summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>2002-05-16 10:09:28 +0000
committermarkm <markm@FreeBSD.org>2002-05-16 10:09:28 +0000
commitf56e05005c751822074f0a22aa9a98d2eb189924 (patch)
treee28fc632241c9d248069d45dd9ab2a41fa64868f
parent344ddc14973a1519f100f54051dcb068069fe43c (diff)
downloadFreeBSD-src-f56e05005c751822074f0a22aa9a98d2eb189924.zip
FreeBSD-src-f56e05005c751822074f0a22aa9a98d2eb189924.tar.gz
Perl is no longer in base. Long live the port!
-rw-r--r--contrib/perl5/AUTHORS557
-rw-r--r--contrib/perl5/Artistic131
-rw-r--r--contrib/perl5/Changes34679
-rw-r--r--contrib/perl5/Changes5.000185
-rw-r--r--contrib/perl5/Changes5.0011299
-rw-r--r--contrib/perl5/Changes5.0024003
-rw-r--r--contrib/perl5/Changes5.003100
-rw-r--r--contrib/perl5/Changes5.00416073
-rw-r--r--contrib/perl5/Changes5.00519336
-rwxr-xr-xcontrib/perl5/Configure16540
-rw-r--r--contrib/perl5/Copying248
-rw-r--r--contrib/perl5/EXTERN.h60
-rw-r--r--contrib/perl5/INSTALL2167
-rw-r--r--contrib/perl5/INTERN.h53
-rw-r--r--contrib/perl5/MANIFEST1728
-rwxr-xr-xcontrib/perl5/Makefile.SH1009
-rwxr-xr-xcontrib/perl5/Policy_sh.SH246
-rw-r--r--contrib/perl5/Porting/Contract108
-rw-r--r--contrib/perl5/Porting/Glossary3798
-rw-r--r--contrib/perl5/Porting/config.sh839
-rw-r--r--contrib/perl5/Porting/config_H3223
-rwxr-xr-xcontrib/perl5/Porting/findvars374
-rwxr-xr-xcontrib/perl5/Porting/fixCORE68
-rwxr-xr-xcontrib/perl5/Porting/fixvars69
-rwxr-xr-xcontrib/perl5/Porting/genlog141
-rwxr-xr-xcontrib/perl5/Porting/makerel161
-rwxr-xr-xcontrib/perl5/Porting/p4d2p84
-rwxr-xr-xcontrib/perl5/Porting/p4desc147
-rw-r--r--contrib/perl5/Porting/patching.pod391
-rwxr-xr-xcontrib/perl5/Porting/patchls574
-rw-r--r--contrib/perl5/Porting/pumpkin.pod1385
-rw-r--r--contrib/perl5/Porting/repository.pod327
-rw-r--r--contrib/perl5/README96
-rw-r--r--contrib/perl5/README.Y2K47
-rw-r--r--contrib/perl5/README.threads336
-rw-r--r--contrib/perl5/Todo88
-rw-r--r--contrib/perl5/Todo-5.6186
-rw-r--r--contrib/perl5/XSUB.h400
-rw-r--r--contrib/perl5/av.c920
-rw-r--r--contrib/perl5/av.h81
-rw-r--r--contrib/perl5/bytecode.pl408
-rw-r--r--contrib/perl5/cc_runtime.h75
-rwxr-xr-xcontrib/perl5/cflags.SH140
-rwxr-xr-xcontrib/perl5/config_h.SH3238
-rwxr-xr-xcontrib/perl5/configpm491
-rw-r--r--contrib/perl5/configure.com5896
-rwxr-xr-xcontrib/perl5/configure.gnu132
-rw-r--r--contrib/perl5/cop.h519
-rw-r--r--contrib/perl5/cv.h124
-rw-r--r--contrib/perl5/deb.c123
-rw-r--r--contrib/perl5/doio.c2013
-rw-r--r--contrib/perl5/doop.c1282
-rw-r--r--contrib/perl5/dosish.h118
-rw-r--r--contrib/perl5/dump.c1192
-rw-r--r--contrib/perl5/eg/ADB8
-rw-r--r--contrib/perl5/eg/README22
-rwxr-xr-xcontrib/perl5/eg/cgi/RunMeFirst36
-rw-r--r--contrib/perl5/eg/cgi/caution.xbm12
-rw-r--r--contrib/perl5/eg/cgi/clickable_image.cgi26
-rw-r--r--contrib/perl5/eg/cgi/cookie.cgi88
-rw-r--r--contrib/perl5/eg/cgi/crash.cgi6
-rw-r--r--contrib/perl5/eg/cgi/customize.cgi92
-rw-r--r--contrib/perl5/eg/cgi/diff_upload.cgi68
-rw-r--r--contrib/perl5/eg/cgi/dna_small_gif.uu63
-rw-r--r--contrib/perl5/eg/cgi/file_upload.cgi71
-rw-r--r--contrib/perl5/eg/cgi/frameset.cgi81
-rw-r--r--contrib/perl5/eg/cgi/index.html119
-rw-r--r--contrib/perl5/eg/cgi/internal_links.cgi33
-rw-r--r--contrib/perl5/eg/cgi/javascript.cgi105
-rw-r--r--contrib/perl5/eg/cgi/monty.cgi84
-rw-r--r--contrib/perl5/eg/cgi/multiple_forms.cgi54
-rw-r--r--contrib/perl5/eg/cgi/nph-clock.cgi18
-rwxr-xr-xcontrib/perl5/eg/cgi/nph-multipart.cgi10
-rw-r--r--contrib/perl5/eg/cgi/popup.cgi32
-rw-r--r--contrib/perl5/eg/cgi/save_state.cgi67
-rw-r--r--contrib/perl5/eg/cgi/tryit.cgi37
-rw-r--r--contrib/perl5/eg/cgi/wilogo_gif.uu13
-rw-r--r--contrib/perl5/eg/changes34
-rwxr-xr-xcontrib/perl5/eg/client34
-rwxr-xr-xcontrib/perl5/eg/down30
-rw-r--r--contrib/perl5/eg/dus22
-rw-r--r--contrib/perl5/eg/findcp53
-rw-r--r--contrib/perl5/eg/findtar17
-rw-r--r--contrib/perl5/eg/g/gcp114
-rw-r--r--contrib/perl5/eg/g/gcp.man77
-rw-r--r--contrib/perl5/eg/g/ged21
-rw-r--r--contrib/perl5/eg/g/ghosts33
-rw-r--r--contrib/perl5/eg/g/gsh117
-rw-r--r--contrib/perl5/eg/g/gsh.man80
-rw-r--r--contrib/perl5/eg/muck141
-rw-r--r--contrib/perl5/eg/muck.man21
-rw-r--r--contrib/perl5/eg/myrup29
-rw-r--r--contrib/perl5/eg/nih11
-rw-r--r--contrib/perl5/eg/relink82
-rwxr-xr-xcontrib/perl5/eg/rename74
-rw-r--r--contrib/perl5/eg/rmfrom7
-rw-r--r--contrib/perl5/eg/scan/scan_df51
-rw-r--r--contrib/perl5/eg/scan/scan_last57
-rw-r--r--contrib/perl5/eg/scan/scan_messages222
-rw-r--r--contrib/perl5/eg/scan/scan_passwd30
-rw-r--r--contrib/perl5/eg/scan/scan_ps32
-rw-r--r--contrib/perl5/eg/scan/scan_sudo54
-rw-r--r--contrib/perl5/eg/scan/scan_suid84
-rw-r--r--contrib/perl5/eg/scan/scanner87
-rwxr-xr-xcontrib/perl5/eg/server27
-rw-r--r--contrib/perl5/eg/shmkill24
-rw-r--r--contrib/perl5/eg/sysvipc/README9
-rw-r--r--contrib/perl5/eg/sysvipc/ipcmsg47
-rw-r--r--contrib/perl5/eg/sysvipc/ipcsem46
-rw-r--r--contrib/perl5/eg/sysvipc/ipcshm50
-rw-r--r--contrib/perl5/eg/travesty46
-rwxr-xr-xcontrib/perl5/eg/unuc186
-rw-r--r--contrib/perl5/eg/uudecode15
-rw-r--r--contrib/perl5/eg/van/empty45
-rw-r--r--contrib/perl5/eg/van/unvanish66
-rw-r--r--contrib/perl5/eg/van/vanexp21
-rw-r--r--contrib/perl5/eg/van/vanish65
-rw-r--r--contrib/perl5/eg/who13
-rwxr-xr-xcontrib/perl5/eg/wrapsuid104
-rw-r--r--contrib/perl5/embed.h5912
-rwxr-xr-xcontrib/perl5/embed.pl2550
-rw-r--r--contrib/perl5/embedvar.h1767
-rw-r--r--contrib/perl5/ext/B/B.pm892
-rw-r--r--contrib/perl5/ext/B/B.xs1285
-rw-r--r--contrib/perl5/ext/B/B/Asmdata.pm172
-rw-r--r--contrib/perl5/ext/B/B/Assembler.pm285
-rw-r--r--contrib/perl5/ext/B/B/Bblock.pm180
-rw-r--r--contrib/perl5/ext/B/B/Bytecode.pm998
-rw-r--r--contrib/perl5/ext/B/B/C.pm1657
-rw-r--r--contrib/perl5/ext/B/B/CC.pm2002
-rw-r--r--contrib/perl5/ext/B/B/Concise.pm823
-rw-r--r--contrib/perl5/ext/B/B/Debug.pm283
-rw-r--r--contrib/perl5/ext/B/B/Deparse.pm3128
-rw-r--r--contrib/perl5/ext/B/B/Disassembler.pm185
-rw-r--r--contrib/perl5/ext/B/B/Lint.pm362
-rw-r--r--contrib/perl5/ext/B/B/Showlex.pm97
-rw-r--r--contrib/perl5/ext/B/B/Stackobj.pm346
-rw-r--r--contrib/perl5/ext/B/B/Stash.pm50
-rw-r--r--contrib/perl5/ext/B/B/Terse.pm153
-rw-r--r--contrib/perl5/ext/B/B/Xref.pm420
-rwxr-xr-xcontrib/perl5/ext/B/B/assemble30
-rw-r--r--contrib/perl5/ext/B/B/cc_harness12
-rwxr-xr-xcontrib/perl5/ext/B/B/disassemble22
-rw-r--r--contrib/perl5/ext/B/B/makeliblinks54
-rw-r--r--contrib/perl5/ext/B/Makefile.PL48
-rw-r--r--contrib/perl5/ext/B/NOTES168
-rw-r--r--contrib/perl5/ext/B/O.pm86
-rw-r--r--contrib/perl5/ext/B/README325
-rw-r--r--contrib/perl5/ext/B/TESTS78
-rw-r--r--contrib/perl5/ext/B/Todo37
-rw-r--r--contrib/perl5/ext/B/defsubs_h.PL42
-rw-r--r--contrib/perl5/ext/B/ramblings/cc.notes32
-rw-r--r--contrib/perl5/ext/B/ramblings/curcop.runtime39
-rw-r--r--contrib/perl5/ext/B/ramblings/flip-flop54
-rw-r--r--contrib/perl5/ext/B/ramblings/magic93
-rw-r--r--contrib/perl5/ext/B/ramblings/reg.alloc32
-rw-r--r--contrib/perl5/ext/B/ramblings/runtime.porting357
-rw-r--r--contrib/perl5/ext/B/typemap69
-rw-r--r--contrib/perl5/ext/ByteLoader/ByteLoader.pm40
-rw-r--r--contrib/perl5/ext/ByteLoader/ByteLoader.xs131
-rw-r--r--contrib/perl5/ext/ByteLoader/Makefile.PL9
-rw-r--r--contrib/perl5/ext/ByteLoader/bytecode.h257
-rw-r--r--contrib/perl5/ext/ByteLoader/byterun.c916
-rw-r--r--contrib/perl5/ext/ByteLoader/byterun.h168
-rw-r--r--contrib/perl5/ext/ByteLoader/hints/sunos.pl2
-rw-r--r--contrib/perl5/ext/DB_File/Changes336
-rw-r--r--contrib/perl5/ext/DB_File/DB_File.pm2072
-rw-r--r--contrib/perl5/ext/DB_File/DB_File.xs2071
-rw-r--r--contrib/perl5/ext/DB_File/DB_File_BS6
-rw-r--r--contrib/perl5/ext/DB_File/Makefile.PL29
-rw-r--r--contrib/perl5/ext/DB_File/dbinfo109
-rw-r--r--contrib/perl5/ext/DB_File/hints/dynixptx.pl3
-rw-r--r--contrib/perl5/ext/DB_File/hints/sco.pl2
-rw-r--r--contrib/perl5/ext/DB_File/typemap44
-rw-r--r--contrib/perl5/ext/DB_File/version.c81
-rw-r--r--contrib/perl5/ext/Data/Dumper/Changes193
-rw-r--r--contrib/perl5/ext/Data/Dumper/Dumper.pm1048
-rw-r--r--contrib/perl5/ext/Data/Dumper/Dumper.xs901
-rw-r--r--contrib/perl5/ext/Data/Dumper/Makefile.PL11
-rw-r--r--contrib/perl5/ext/Data/Dumper/Todo28
-rw-r--r--contrib/perl5/ext/Devel/DProf/Changes176
-rw-r--r--contrib/perl5/ext/Devel/DProf/DProf.pm196
-rw-r--r--contrib/perl5/ext/Devel/DProf/DProf.xs679
-rw-r--r--contrib/perl5/ext/Devel/DProf/Makefile.PL17
-rw-r--r--contrib/perl5/ext/Devel/DProf/Todo13
-rw-r--r--contrib/perl5/ext/Devel/Peek/Changes64
-rw-r--r--contrib/perl5/ext/Devel/Peek/Makefile.PL12
-rw-r--r--contrib/perl5/ext/Devel/Peek/Peek.pm494
-rw-r--r--contrib/perl5/ext/Devel/Peek/Peek.xs404
-rw-r--r--contrib/perl5/ext/DynaLoader/DynaLoader_pm.PL894
-rw-r--r--contrib/perl5/ext/DynaLoader/Makefile.PL34
-rw-r--r--contrib/perl5/ext/DynaLoader/README53
-rw-r--r--contrib/perl5/ext/DynaLoader/XSLoader_pm.PL160
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_aix.xs744
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_beos.xs117
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_dld.xs177
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_dllload.xs189
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_dlopen.xs259
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_dyld.xs226
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_hpux.xs159
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_mac.xs137
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_mpeix.xs131
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_next.xs307
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_none.xs19
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_vmesa.xs175
-rw-r--r--contrib/perl5/ext/DynaLoader/dl_vms.xs367
-rw-r--r--contrib/perl5/ext/DynaLoader/dlutils.c106
-rw-r--r--contrib/perl5/ext/DynaLoader/hints/aix.pl14
-rw-r--r--contrib/perl5/ext/DynaLoader/hints/linux.pl4
-rw-r--r--contrib/perl5/ext/DynaLoader/hints/netbsd.pl3
-rw-r--r--contrib/perl5/ext/DynaLoader/hints/openbsd.pl3
-rw-r--r--contrib/perl5/ext/Errno/ChangeLog55
-rw-r--r--contrib/perl5/ext/Errno/Errno_pm.PL361
-rw-r--r--contrib/perl5/ext/Errno/Makefile.PL30
-rw-r--r--contrib/perl5/ext/Fcntl/Fcntl.pm222
-rw-r--r--contrib/perl5/ext/Fcntl/Fcntl.xs780
-rw-r--r--contrib/perl5/ext/Fcntl/Makefile.PL8
-rw-r--r--contrib/perl5/ext/File/Glob/Changes49
-rw-r--r--contrib/perl5/ext/File/Glob/Glob.pm438
-rw-r--r--contrib/perl5/ext/File/Glob/Glob.xs208
-rw-r--r--contrib/perl5/ext/File/Glob/Makefile.PL21
-rw-r--r--contrib/perl5/ext/File/Glob/TODO21
-rw-r--r--contrib/perl5/ext/File/Glob/bsd_glob.c971
-rw-r--r--contrib/perl5/ext/File/Glob/bsd_glob.h83
-rw-r--r--contrib/perl5/ext/GDBM_File/GDBM_File.pm89
-rw-r--r--contrib/perl5/ext/GDBM_File/GDBM_File.xs363
-rw-r--r--contrib/perl5/ext/GDBM_File/Makefile.PL8
-rw-r--r--contrib/perl5/ext/GDBM_File/hints/sco.pl2
-rw-r--r--contrib/perl5/ext/GDBM_File/typemap38
-rw-r--r--contrib/perl5/ext/IO/ChangeLog318
-rw-r--r--contrib/perl5/ext/IO/IO.pm47
-rw-r--r--contrib/perl5/ext/IO/IO.xs466
-rw-r--r--contrib/perl5/ext/IO/Makefile.PL9
-rw-r--r--contrib/perl5/ext/IO/README5
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Dir.pm239
-rw-r--r--contrib/perl5/ext/IO/lib/IO/File.pm169
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Handle.pm612
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Pipe.pm252
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Poll.pm204
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Seekable.pm127
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Select.pm381
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Socket.pm428
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Socket/INET.pm414
-rw-r--r--contrib/perl5/ext/IO/lib/IO/Socket/UNIX.pm143
-rw-r--r--contrib/perl5/ext/IO/poll.c135
-rw-r--r--contrib/perl5/ext/IO/poll.h55
-rw-r--r--contrib/perl5/ext/IPC/SysV/ChangeLog28
-rw-r--r--contrib/perl5/ext/IPC/SysV/MANIFEST10
-rw-r--r--contrib/perl5/ext/IPC/SysV/Makefile.PL38
-rw-r--r--contrib/perl5/ext/IPC/SysV/Msg.pm223
-rw-r--r--contrib/perl5/ext/IPC/SysV/README20
-rw-r--r--contrib/perl5/ext/IPC/SysV/Semaphore.pm297
-rw-r--r--contrib/perl5/ext/IPC/SysV/SysV.pm102
-rw-r--r--contrib/perl5/ext/IPC/SysV/SysV.xs443
-rw-r--r--contrib/perl5/ext/IPC/SysV/hints/cygwin.pl2
-rw-r--r--contrib/perl5/ext/IPC/SysV/hints/next_3.pl1
-rwxr-xr-xcontrib/perl5/ext/IPC/SysV/t/msg.t41
-rwxr-xr-xcontrib/perl5/ext/IPC/SysV/t/sem.t51
-rw-r--r--contrib/perl5/ext/NDBM_File/Makefile.PL9
-rw-r--r--contrib/perl5/ext/NDBM_File/NDBM_File.pm113
-rw-r--r--contrib/perl5/ext/NDBM_File/NDBM_File.xs173
-rw-r--r--contrib/perl5/ext/NDBM_File/hints/cygwin.pl2
-rw-r--r--contrib/perl5/ext/NDBM_File/hints/dec_osf.pl2
-rw-r--r--contrib/perl5/ext/NDBM_File/hints/dynixptx.pl3
-rw-r--r--contrib/perl5/ext/NDBM_File/hints/sco.pl4
-rw-r--r--contrib/perl5/ext/NDBM_File/hints/solaris.pl3
-rw-r--r--contrib/perl5/ext/NDBM_File/hints/svr4.pl4
-rw-r--r--contrib/perl5/ext/NDBM_File/typemap43
-rw-r--r--contrib/perl5/ext/ODBM_File/Makefile.PL8
-rw-r--r--contrib/perl5/ext/ODBM_File/ODBM_File.pm113
-rw-r--r--contrib/perl5/ext/ODBM_File/ODBM_File.xs207
-rw-r--r--contrib/perl5/ext/ODBM_File/hints/cygwin.pl2
-rw-r--r--contrib/perl5/ext/ODBM_File/hints/dec_osf.pl9
-rw-r--r--contrib/perl5/ext/ODBM_File/hints/hpux.pl4
-rw-r--r--contrib/perl5/ext/ODBM_File/hints/sco.pl4
-rw-r--r--contrib/perl5/ext/ODBM_File/hints/solaris.pl3
-rw-r--r--contrib/perl5/ext/ODBM_File/hints/svr4.pl4
-rw-r--r--contrib/perl5/ext/ODBM_File/hints/ultrix.pl4
-rw-r--r--contrib/perl5/ext/ODBM_File/typemap41
-rw-r--r--contrib/perl5/ext/Opcode/Makefile.PL7
-rw-r--r--contrib/perl5/ext/Opcode/Opcode.pm575
-rw-r--r--contrib/perl5/ext/Opcode/Opcode.xs482
-rw-r--r--contrib/perl5/ext/Opcode/Safe.pm558
-rw-r--r--contrib/perl5/ext/Opcode/ops.pm45
-rw-r--r--contrib/perl5/ext/POSIX/Makefile.PL14
-rw-r--r--contrib/perl5/ext/POSIX/POSIX.pm940
-rw-r--r--contrib/perl5/ext/POSIX/POSIX.pod1984
-rw-r--r--contrib/perl5/ext/POSIX/POSIX.xs3967
-rw-r--r--contrib/perl5/ext/POSIX/hints/bsdos.pl3
-rw-r--r--contrib/perl5/ext/POSIX/hints/dynixptx.pl4
-rw-r--r--contrib/perl5/ext/POSIX/hints/freebsd.pl3
-rw-r--r--contrib/perl5/ext/POSIX/hints/linux.pl5
-rw-r--r--contrib/perl5/ext/POSIX/hints/mint.pl2
-rw-r--r--contrib/perl5/ext/POSIX/hints/netbsd.pl3
-rw-r--r--contrib/perl5/ext/POSIX/hints/next_3.pl5
-rw-r--r--contrib/perl5/ext/POSIX/hints/openbsd.pl3
-rw-r--r--contrib/perl5/ext/POSIX/hints/sunos_4.pl10
-rw-r--r--contrib/perl5/ext/POSIX/hints/svr4.pl12
-rw-r--r--contrib/perl5/ext/POSIX/typemap15
-rw-r--r--contrib/perl5/ext/SDBM_File/Makefile.PL49
-rw-r--r--contrib/perl5/ext/SDBM_File/SDBM_File.pm116
-rw-r--r--contrib/perl5/ext/SDBM_File/SDBM_File.xs191
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/CHANGES18
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/COMPARE88
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/Makefile.PL67
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/README396
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/README.too14
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/biblio64
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/dba.c87
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/dbd.c113
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/dbe.146
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/dbe.c435
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/dbm.c134
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/dbm.h52
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/dbu.c243
-rwxr-xr-xcontrib/perl5/ext/SDBM_File/sdbm/grind9
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/hash.c47
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/linux.patches67
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/makefile.sdbm55
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/pair.c298
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/pair.h22
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/readme.ms353
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/sdbm.3295
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/sdbm.c539
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/sdbm.h285
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/tune.h23
-rw-r--r--contrib/perl5/ext/SDBM_File/sdbm/util.c47
-rw-r--r--contrib/perl5/ext/SDBM_File/typemap43
-rw-r--r--contrib/perl5/ext/Socket/Makefile.PL9
-rw-r--r--contrib/perl5/ext/Socket/Socket.pm453
-rw-r--r--contrib/perl5/ext/Socket/Socket.xs1116
-rw-r--r--contrib/perl5/ext/Sys/Hostname/Hostname.pm153
-rw-r--r--contrib/perl5/ext/Sys/Hostname/Hostname.xs76
-rw-r--r--contrib/perl5/ext/Sys/Hostname/Makefile.PL8
-rw-r--r--contrib/perl5/ext/Sys/Syslog/Makefile.PL8
-rw-r--r--contrib/perl5/ext/Sys/Syslog/Syslog.pm302
-rw-r--r--contrib/perl5/ext/Sys/Syslog/Syslog.xs641
-rw-r--r--contrib/perl5/ext/Thread/Makefile.PL7
-rw-r--r--contrib/perl5/ext/Thread/Notes13
-rw-r--r--contrib/perl5/ext/Thread/README20
-rw-r--r--contrib/perl5/ext/Thread/Thread.pm225
-rw-r--r--contrib/perl5/ext/Thread/Thread.xs670
-rw-r--r--contrib/perl5/ext/Thread/Thread/Queue.pm95
-rw-r--r--contrib/perl5/ext/Thread/Thread/Semaphore.pm85
-rw-r--r--contrib/perl5/ext/Thread/Thread/Signal.pm50
-rw-r--r--contrib/perl5/ext/Thread/Thread/Specific.pm28
-rw-r--r--contrib/perl5/ext/Thread/create.t26
-rw-r--r--contrib/perl5/ext/Thread/die.t16
-rw-r--r--contrib/perl5/ext/Thread/die2.t16
-rw-r--r--contrib/perl5/ext/Thread/io.t39
-rw-r--r--contrib/perl5/ext/Thread/join.t11
-rw-r--r--contrib/perl5/ext/Thread/join2.t12
-rw-r--r--contrib/perl5/ext/Thread/list.t30
-rw-r--r--contrib/perl5/ext/Thread/lock.t27
-rw-r--r--contrib/perl5/ext/Thread/queue.t36
-rw-r--r--contrib/perl5/ext/Thread/specific.t17
-rw-r--r--contrib/perl5/ext/Thread/sync.t60
-rw-r--r--contrib/perl5/ext/Thread/sync2.t68
-rw-r--r--contrib/perl5/ext/Thread/typemap24
-rw-r--r--contrib/perl5/ext/Thread/unsync.t37
-rw-r--r--contrib/perl5/ext/Thread/unsync2.t36
-rw-r--r--contrib/perl5/ext/Thread/unsync3.t50
-rw-r--r--contrib/perl5/ext/Thread/unsync4.t38
-rw-r--r--contrib/perl5/ext/attrs/Makefile.PL7
-rw-r--r--contrib/perl5/ext/attrs/attrs.pm58
-rw-r--r--contrib/perl5/ext/attrs/attrs.xs66
-rw-r--r--contrib/perl5/ext/re/Makefile.PL38
-rw-r--r--contrib/perl5/ext/re/hints/aix.pl22
-rw-r--r--contrib/perl5/ext/re/hints/mpeix.pl3
-rw-r--r--contrib/perl5/ext/re/re.pm129
-rw-r--r--contrib/perl5/ext/re/re.xs61
-rw-r--r--contrib/perl5/ext/util/make_ext141
-rw-r--r--contrib/perl5/ext/util/mkbootstrap5
-rw-r--r--contrib/perl5/fakethr.h56
-rw-r--r--contrib/perl5/form.h26
-rw-r--r--contrib/perl5/global.sym561
-rw-r--r--contrib/perl5/globals.c91
-rw-r--r--contrib/perl5/globvar.sym68
-rw-r--r--contrib/perl5/gv.c1741
-rw-r--r--contrib/perl5/gv.h151
-rw-r--r--contrib/perl5/h2pl/README71
-rw-r--r--contrib/perl5/h2pl/cbreak.pl34
-rw-r--r--contrib/perl5/h2pl/cbreak2.pl33
-rw-r--r--contrib/perl5/h2pl/eg/sizeof.ph14
-rw-r--r--contrib/perl5/h2pl/eg/sys/errno.pl92
-rw-r--r--contrib/perl5/h2pl/eg/sys/ioctl.pl186
-rw-r--r--contrib/perl5/h2pl/eg/sysexits.pl16
-rw-r--r--contrib/perl5/h2pl/getioctlsizes13
-rw-r--r--contrib/perl5/h2pl/mksizes42
-rw-r--r--contrib/perl5/h2pl/mkvars31
-rw-r--r--contrib/perl5/h2pl/tcbreak17
-rw-r--r--contrib/perl5/h2pl/tcbreak217
-rw-r--r--contrib/perl5/handy.h622
-rw-r--r--contrib/perl5/hints/3b1.sh15
-rw-r--r--contrib/perl5/hints/3b1cc88
-rw-r--r--contrib/perl5/hints/README.hints259
-rw-r--r--contrib/perl5/hints/aix.sh424
-rw-r--r--contrib/perl5/hints/altos486.sh3
-rw-r--r--contrib/perl5/hints/amigaos.sh56
-rw-r--r--contrib/perl5/hints/apollo.sh55
-rw-r--r--contrib/perl5/hints/aux_3.sh22
-rw-r--r--contrib/perl5/hints/beos.sh57
-rw-r--r--contrib/perl5/hints/broken-db.msg14
-rw-r--r--contrib/perl5/hints/bsdos.sh131
-rw-r--r--contrib/perl5/hints/convexos.sh12
-rw-r--r--contrib/perl5/hints/cxux.sh106
-rw-r--r--contrib/perl5/hints/cygwin.sh47
-rw-r--r--contrib/perl5/hints/darwin.sh63
-rw-r--r--contrib/perl5/hints/dcosx.sh188
-rw-r--r--contrib/perl5/hints/dec_osf.sh422
-rw-r--r--contrib/perl5/hints/dgux.sh136
-rw-r--r--contrib/perl5/hints/dos_djgpp.sh73
-rw-r--r--contrib/perl5/hints/dynix.sh7
-rw-r--r--contrib/perl5/hints/dynixptx.sh60
-rw-r--r--contrib/perl5/hints/epix.sh66
-rw-r--r--contrib/perl5/hints/esix4.sh36
-rw-r--r--contrib/perl5/hints/fps.sh1
-rw-r--r--contrib/perl5/hints/freebsd.sh234
-rw-r--r--contrib/perl5/hints/genix.sh1
-rw-r--r--contrib/perl5/hints/gnu.sh33
-rw-r--r--contrib/perl5/hints/greenhills.sh1
-rw-r--r--contrib/perl5/hints/hpux.sh442
-rw-r--r--contrib/perl5/hints/i386.sh1
-rw-r--r--contrib/perl5/hints/irix_4.sh45
-rw-r--r--contrib/perl5/hints/irix_5.sh55
-rw-r--r--contrib/perl5/hints/irix_6.sh336
-rw-r--r--contrib/perl5/hints/irix_6_0.sh64
-rw-r--r--contrib/perl5/hints/irix_6_1.sh64
-rw-r--r--contrib/perl5/hints/isc.sh44
-rw-r--r--contrib/perl5/hints/isc_2.sh25
-rw-r--r--contrib/perl5/hints/linux.sh291
-rw-r--r--contrib/perl5/hints/lynxos.sh19
-rw-r--r--contrib/perl5/hints/machten.sh279
-rw-r--r--contrib/perl5/hints/machten_2.sh94
-rw-r--r--contrib/perl5/hints/mint.sh94
-rw-r--r--contrib/perl5/hints/mips.sh14
-rw-r--r--contrib/perl5/hints/mpc.sh1
-rw-r--r--contrib/perl5/hints/mpeix.sh135
-rw-r--r--contrib/perl5/hints/ncr_tower.sh16
-rw-r--r--contrib/perl5/hints/netbsd.sh72
-rw-r--r--contrib/perl5/hints/newsos4.sh33
-rw-r--r--contrib/perl5/hints/next_3.sh141
-rw-r--r--contrib/perl5/hints/next_3_0.sh53
-rw-r--r--contrib/perl5/hints/next_4.sh102
-rw-r--r--contrib/perl5/hints/nonstopux.sh17
-rw-r--r--contrib/perl5/hints/openbsd.sh120
-rw-r--r--contrib/perl5/hints/opus.sh1
-rw-r--r--contrib/perl5/hints/os2.sh365
-rw-r--r--contrib/perl5/hints/os390.sh205
-rw-r--r--contrib/perl5/hints/posix-bc.sh94
-rw-r--r--contrib/perl5/hints/powerux.sh110
-rw-r--r--contrib/perl5/hints/qnx.sh178
-rw-r--r--contrib/perl5/hints/rhapsody.sh67
-rw-r--r--contrib/perl5/hints/sco.sh243
-rw-r--r--contrib/perl5/hints/sco_2_3_0.sh2
-rw-r--r--contrib/perl5/hints/sco_2_3_1.sh2
-rw-r--r--contrib/perl5/hints/sco_2_3_2.sh2
-rw-r--r--contrib/perl5/hints/sco_2_3_3.sh3
-rw-r--r--contrib/perl5/hints/sco_2_3_4.sh5
-rw-r--r--contrib/perl5/hints/solaris_2.sh531
-rw-r--r--contrib/perl5/hints/stellar.sh2
-rw-r--r--contrib/perl5/hints/sunos_4_0.sh2
-rw-r--r--contrib/perl5/hints/sunos_4_1.sh84
-rw-r--r--contrib/perl5/hints/svr4.sh160
-rw-r--r--contrib/perl5/hints/svr5.sh221
-rw-r--r--contrib/perl5/hints/ti1500.sh1
-rw-r--r--contrib/perl5/hints/titanos.sh38
-rw-r--r--contrib/perl5/hints/ultrix_4.sh70
-rw-r--r--contrib/perl5/hints/umips.sh39
-rw-r--r--contrib/perl5/hints/unicos.sh29
-rw-r--r--contrib/perl5/hints/unicosmk.sh32
-rw-r--r--contrib/perl5/hints/unisysdynix.sh1
-rw-r--r--contrib/perl5/hints/utekv.sh12
-rw-r--r--contrib/perl5/hints/uts.sh18
-rw-r--r--contrib/perl5/hints/uwin.sh36
-rw-r--r--contrib/perl5/hints/vmesa.sh337
-rw-r--r--contrib/perl5/hv.c1503
-rw-r--r--contrib/perl5/hv.h188
-rwxr-xr-xcontrib/perl5/installhtml603
-rwxr-xr-xcontrib/perl5/installman285
-rwxr-xr-xcontrib/perl5/installperl703
-rw-r--r--contrib/perl5/intrpvar.h475
-rw-r--r--contrib/perl5/iperlsys.h1499
-rw-r--r--contrib/perl5/keywords.h252
-rwxr-xr-xcontrib/perl5/keywords.pl278
-rw-r--r--contrib/perl5/lib/AnyDBM_File.pm92
-rw-r--r--contrib/perl5/lib/AutoLoader.pm325
-rw-r--r--contrib/perl5/lib/AutoSplit.pm487
-rw-r--r--contrib/perl5/lib/Benchmark.pm798
-rw-r--r--contrib/perl5/lib/CPAN.pm6992
-rw-r--r--contrib/perl5/lib/CPAN/FirstTime.pm671
-rw-r--r--contrib/perl5/lib/CPAN/Nox.pm44
-rw-r--r--contrib/perl5/lib/Carp.pm124
-rw-r--r--contrib/perl5/lib/Carp/Heavy.pm247
-rw-r--r--contrib/perl5/lib/Class/Struct.pm602
-rw-r--r--contrib/perl5/lib/Cwd.pm457
-rw-r--r--contrib/perl5/lib/DB.pm802
-rw-r--r--contrib/perl5/lib/Devel/SelfStubber.pm139
-rw-r--r--contrib/perl5/lib/DirHandle.pm72
-rw-r--r--contrib/perl5/lib/Dumpvalue.pm626
-rw-r--r--contrib/perl5/lib/English.pm194
-rw-r--r--contrib/perl5/lib/Env.pm233
-rw-r--r--contrib/perl5/lib/Exporter.pm313
-rw-r--r--contrib/perl5/lib/Exporter/Heavy.pm225
-rw-r--r--contrib/perl5/lib/ExtUtils/Command.pm213
-rw-r--r--contrib/perl5/lib/ExtUtils/Embed.pm490
-rw-r--r--contrib/perl5/lib/ExtUtils/Install.pm437
-rw-r--r--contrib/perl5/lib/ExtUtils/Installed.pm273
-rw-r--r--contrib/perl5/lib/ExtUtils/Liblist.pm787
-rw-r--r--contrib/perl5/lib/ExtUtils/MM_Cygwin.pm123
-rw-r--r--contrib/perl5/lib/ExtUtils/MM_OS2.pm134
-rw-r--r--contrib/perl5/lib/ExtUtils/MM_Unix.pm3858
-rw-r--r--contrib/perl5/lib/ExtUtils/MM_VMS.pm2309
-rw-r--r--contrib/perl5/lib/ExtUtils/MM_Win32.pm957
-rw-r--r--contrib/perl5/lib/ExtUtils/MakeMaker.pm2096
-rw-r--r--contrib/perl5/lib/ExtUtils/Manifest.pm463
-rw-r--r--contrib/perl5/lib/ExtUtils/Mkbootstrap.pm103
-rw-r--r--contrib/perl5/lib/ExtUtils/Mksymlists.pm302
-rw-r--r--contrib/perl5/lib/ExtUtils/Packlist.pm289
-rwxr-xr-xcontrib/perl5/lib/ExtUtils/inst139
-rw-r--r--contrib/perl5/lib/ExtUtils/testlib.pm26
-rw-r--r--contrib/perl5/lib/ExtUtils/typemap294
-rwxr-xr-xcontrib/perl5/lib/ExtUtils/xsubpp1763
-rw-r--r--contrib/perl5/lib/Fatal.pm186
-rw-r--r--contrib/perl5/lib/File/Basename.pm283
-rw-r--r--contrib/perl5/lib/File/CheckTree.pm151
-rw-r--r--contrib/perl5/lib/File/Compare.pm182
-rw-r--r--contrib/perl5/lib/File/Copy.pm378
-rw-r--r--contrib/perl5/lib/File/DosGlob.pm254
-rw-r--r--contrib/perl5/lib/File/Find.pm773
-rw-r--r--contrib/perl5/lib/File/Path.pm251
-rw-r--r--contrib/perl5/lib/File/Spec.pm93
-rw-r--r--contrib/perl5/lib/File/Spec/Epoc.pm378
-rw-r--r--contrib/perl5/lib/File/Spec/Functions.pm97
-rw-r--r--contrib/perl5/lib/File/Spec/Mac.pm394
-rw-r--r--contrib/perl5/lib/File/Spec/OS2.pm62
-rw-r--r--contrib/perl5/lib/File/Spec/Unix.pm458
-rw-r--r--contrib/perl5/lib/File/Spec/VMS.pm505
-rw-r--r--contrib/perl5/lib/File/Spec/Win32.pm355
-rw-r--r--contrib/perl5/lib/File/Temp.pm1863
-rw-r--r--contrib/perl5/lib/File/stat.pm115
-rw-r--r--contrib/perl5/lib/FileCache.pm78
-rw-r--r--contrib/perl5/lib/FileHandle.pm262
-rw-r--r--contrib/perl5/lib/FindBin.pm169
-rw-r--r--contrib/perl5/lib/Getopt/Long.pm1890
-rw-r--r--contrib/perl5/lib/Getopt/Std.pm176
-rw-r--r--contrib/perl5/lib/I18N/Collate.pm190
-rw-r--r--contrib/perl5/lib/IPC/Open2.pm118
-rw-r--r--contrib/perl5/lib/IPC/Open3.pm333
-rw-r--r--contrib/perl5/lib/Math/BigFloat.pm398
-rw-r--r--contrib/perl5/lib/Math/BigInt.pm519
-rw-r--r--contrib/perl5/lib/Math/Complex.pm1889
-rw-r--r--contrib/perl5/lib/Math/Trig.pm456
-rw-r--r--contrib/perl5/lib/Net/Ping.pm559
-rw-r--r--contrib/perl5/lib/Net/hostent.pm150
-rw-r--r--contrib/perl5/lib/Net/netent.pm168
-rw-r--r--contrib/perl5/lib/Net/protoent.pm96
-rw-r--r--contrib/perl5/lib/Net/servent.pm112
-rw-r--r--contrib/perl5/lib/Pod/Checker.pm1242
-rw-r--r--contrib/perl5/lib/Pod/Find.pm445
-rw-r--r--contrib/perl5/lib/Pod/Functions.pm302
-rw-r--r--contrib/perl5/lib/Pod/Html.pm2025
-rw-r--r--contrib/perl5/lib/Pod/InputObjects.pm933
-rw-r--r--contrib/perl5/lib/Pod/LaTeX.pm1591
-rw-r--r--contrib/perl5/lib/Pod/Man.pm1387
-rw-r--r--contrib/perl5/lib/Pod/ParseUtils.pm851
-rw-r--r--contrib/perl5/lib/Pod/Parser.pm1768
-rw-r--r--contrib/perl5/lib/Pod/Plainer.pm69
-rw-r--r--contrib/perl5/lib/Pod/Select.pm751
-rw-r--r--contrib/perl5/lib/Pod/Text.pm827
-rw-r--r--contrib/perl5/lib/Pod/Text/Color.pm128
-rw-r--r--contrib/perl5/lib/Pod/Text/Overstrike.pm160
-rw-r--r--contrib/perl5/lib/Pod/Text/Termcap.pm145
-rw-r--r--contrib/perl5/lib/Pod/Usage.pm559
-rw-r--r--contrib/perl5/lib/Search/Dict.pm75
-rw-r--r--contrib/perl5/lib/SelectSaver.pm52
-rw-r--r--contrib/perl5/lib/SelfLoader.pm307
-rw-r--r--contrib/perl5/lib/Shell.pm201
-rw-r--r--contrib/perl5/lib/Symbol.pm146
-rw-r--r--contrib/perl5/lib/Term/ANSIColor.pm351
-rw-r--r--contrib/perl5/lib/Term/Cap.pm410
-rw-r--r--contrib/perl5/lib/Term/Complete.pm154
-rw-r--r--contrib/perl5/lib/Term/ReadLine.pm369
-rw-r--r--contrib/perl5/lib/Test.pm262
-rw-r--r--contrib/perl5/lib/Test/Harness.pm571
-rw-r--r--contrib/perl5/lib/Text/Abbrev.pm81
-rw-r--r--contrib/perl5/lib/Text/ParseWords.pm262
-rw-r--r--contrib/perl5/lib/Text/Soundex.pm150
-rw-r--r--contrib/perl5/lib/Text/Tabs.pm97
-rw-r--r--contrib/perl5/lib/Text/Wrap.pm175
-rw-r--r--contrib/perl5/lib/Tie/Array.pm288
-rw-r--r--contrib/perl5/lib/Tie/Handle.pm234
-rw-r--r--contrib/perl5/lib/Tie/Hash.pm160
-rw-r--r--contrib/perl5/lib/Tie/RefHash.pm162
-rw-r--r--contrib/perl5/lib/Tie/Scalar.pm138
-rw-r--r--contrib/perl5/lib/Tie/SubstrHash.pm213
-rw-r--r--contrib/perl5/lib/Time/Local.pm246
-rw-r--r--contrib/perl5/lib/Time/gmtime.pm89
-rw-r--r--contrib/perl5/lib/Time/localtime.pm85
-rw-r--r--contrib/perl5/lib/Time/tm.pm31
-rw-r--r--contrib/perl5/lib/UNIVERSAL.pm101
-rw-r--r--contrib/perl5/lib/User/grent.pm94
-rw-r--r--contrib/perl5/lib/User/pwent.pm297
-rw-r--r--contrib/perl5/lib/Win32.pod287
-rw-r--r--contrib/perl5/lib/abbrev.pl43
-rw-r--r--contrib/perl5/lib/assert.pl55
-rw-r--r--contrib/perl5/lib/attributes.pm399
-rw-r--r--contrib/perl5/lib/autouse.pm157
-rw-r--r--contrib/perl5/lib/base.pm92
-rw-r--r--contrib/perl5/lib/bigfloat.pl254
-rw-r--r--contrib/perl5/lib/bigint.pl320
-rw-r--r--contrib/perl5/lib/bigrat.pl155
-rw-r--r--contrib/perl5/lib/blib.pm72
-rw-r--r--contrib/perl5/lib/bytes.pm69
-rw-r--r--contrib/perl5/lib/bytes_heavy.pl8
-rw-r--r--contrib/perl5/lib/cacheout.pl55
-rw-r--r--contrib/perl5/lib/charnames.pm146
-rw-r--r--contrib/perl5/lib/chat2.pl379
-rw-r--r--contrib/perl5/lib/complete.pl120
-rw-r--r--contrib/perl5/lib/constant.pm278
-rw-r--r--contrib/perl5/lib/ctime.pl59
-rwxr-xr-xcontrib/perl5/lib/diagnostics.pm559
-rw-r--r--contrib/perl5/lib/dotsh.pl76
-rw-r--r--contrib/perl5/lib/dumpvar.pl443
-rw-r--r--contrib/perl5/lib/exceptions.pl61
-rw-r--r--contrib/perl5/lib/fastcwd.pl43
-rw-r--r--contrib/perl5/lib/fields.pm285
-rw-r--r--contrib/perl5/lib/filetest.pm68
-rw-r--r--contrib/perl5/lib/find.pl47
-rw-r--r--contrib/perl5/lib/finddepth.pl46
-rw-r--r--contrib/perl5/lib/flush.pl32
-rw-r--r--contrib/perl5/lib/ftp.pl1086
-rw-r--r--contrib/perl5/lib/getcwd.pl71
-rw-r--r--contrib/perl5/lib/getopt.pl49
-rw-r--r--contrib/perl5/lib/getopts.pl66
-rw-r--r--contrib/perl5/lib/hostname.pl31
-rw-r--r--contrib/perl5/lib/importenv.pl16
-rw-r--r--contrib/perl5/lib/integer.pm91
-rw-r--r--contrib/perl5/lib/less.pm23
-rw-r--r--contrib/perl5/lib/lib.pm136
-rw-r--r--contrib/perl5/lib/locale.pm38
-rw-r--r--contrib/perl5/lib/look.pl50
-rw-r--r--contrib/perl5/lib/newgetopt.pl68
-rw-r--r--contrib/perl5/lib/open.pm76
-rw-r--r--contrib/perl5/lib/open2.pl12
-rw-r--r--contrib/perl5/lib/open3.pl12
-rw-r--r--contrib/perl5/lib/overload.pm1422
-rw-r--r--contrib/perl5/lib/perl5db.pl2708
-rw-r--r--contrib/perl5/lib/pwd.pl67
-rw-r--r--contrib/perl5/lib/shellwords.pl48
-rw-r--r--contrib/perl5/lib/sigtrap.pm289
-rw-r--r--contrib/perl5/lib/stat.pl31
-rw-r--r--contrib/perl5/lib/strict.pm117
-rw-r--r--contrib/perl5/lib/subs.pm38
-rw-r--r--contrib/perl5/lib/syslog.pl199
-rw-r--r--contrib/perl5/lib/tainted.pl9
-rw-r--r--contrib/perl5/lib/termcap.pl178
-rw-r--r--contrib/perl5/lib/timelocal.pl18
-rw-r--r--contrib/perl5/lib/unicode/ArabLink.pl45
-rw-r--r--contrib/perl5/lib/unicode/ArabLnkGrp.pl93
-rw-r--r--contrib/perl5/lib/unicode/ArabShap.txt199
-rw-r--r--contrib/perl5/lib/unicode/BidiMirr.txt238
-rw-r--r--contrib/perl5/lib/unicode/Bidirectional.pl640
-rw-r--r--contrib/perl5/lib/unicode/Block.pl93
-rw-r--r--contrib/perl5/lib/unicode/Blocks.txt90
-rw-r--r--contrib/perl5/lib/unicode/CaseFold.txt821
-rw-r--r--contrib/perl5/lib/unicode/Category.pl1508
-rw-r--r--contrib/perl5/lib/unicode/CombiningClass.pl152
-rw-r--r--contrib/perl5/lib/unicode/CompExcl.txt145
-rw-r--r--contrib/perl5/lib/unicode/Decomposition.pl3470
-rw-r--r--contrib/perl5/lib/unicode/EAWidth.txt10636
-rw-r--r--contrib/perl5/lib/unicode/In/AlphabeticPresentationForms.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Arabic.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/ArabicPresentationForms-A.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/ArabicPresentationForms-B.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Armenian.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Arrows.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/BasicLatin.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Bengali.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/BlockElements.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Bopomofo.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/BopomofoExtended.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/BoxDrawing.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/BraillePatterns.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CJKCompatibility.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CJKCompatibilityForms.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CJKCompatibilityIdeographs.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CJKRadicalsSupplement.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CJKSymbolsandPunctuation.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CJKUnifiedIdeographs.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Cherokee.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CombiningDiacriticalMarks.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CombiningHalfMarks.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CombiningMarksforSymbols.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/ControlPictures.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/CurrencySymbols.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Cyrillic.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Devanagari.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Dingbats.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/EnclosedAlphanumerics.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/EnclosedCJKLettersandMonths.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Ethiopic.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/GeneralPunctuation.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/GeometricShapes.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Georgian.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Greek.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/GreekExtended.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Gujarati.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Gurmukhi.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/HalfwidthandFullwidthForms.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/HangulCompatibilityJamo.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/HangulJamo.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/HangulSyllables.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Hebrew.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/HighPrivateUseSurrogates.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/HighSurrogates.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Hiragana.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/IPAExtensions.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/IdeographicDescriptionCharacters.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Kanbun.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/KangxiRadicals.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Kannada.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Katakana.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Khmer.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Lao.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Latin-1Supplement.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/LatinExtended-A.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/LatinExtended-B.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/LatinExtendedAdditional.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/LetterlikeSymbols.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/LowSurrogates.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Malayalam.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/MathematicalOperators.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/MiscellaneousSymbols.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/MiscellaneousTechnical.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Mongolian.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Myanmar.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/NumberForms.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Ogham.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/OpticalCharacterRecognition.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Oriya.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/PrivateUse.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Runic.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Sinhala.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/SmallFormVariants.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/SpacingModifierLetters.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Specials.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/SuperscriptsandSubscripts.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Syriac.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Tamil.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Telugu.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Thaana.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Thai.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/Tibetan.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/YiRadicals.pl6
-rw-r--r--contrib/perl5/lib/unicode/In/YiSyllables.pl6
-rw-r--r--contrib/perl5/lib/unicode/Index.txt3055
-rw-r--r--contrib/perl5/lib/unicode/Is/ASCII.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/Alnum.pl358
-rw-r--r--contrib/perl5/lib/unicode/Is/Alpha.pl327
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiAL.pl25
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiAN.pl7
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiB.pl10
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiBN.pl15
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiCS.pl16
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiEN.pl15
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiES.pl7
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiET.pl29
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiL.pl325
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiLRE.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiLRO.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiNSM.pl97
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiON.pl115
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiPDF.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiR.pl19
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiRLE.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiRLO.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiS.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/BidiWS.pl12
-rw-r--r--contrib/perl5/lib/unicode/Is/Blank.pl12
-rw-r--r--contrib/perl5/lib/unicode/Is/C.pl20
-rw-r--r--contrib/perl5/lib/unicode/Is/Cc.pl7
-rw-r--r--contrib/perl5/lib/unicode/Is/Cf.pl12
-rw-r--r--contrib/perl5/lib/unicode/Is/Cn.pl373
-rw-r--r--contrib/perl5/lib/unicode/Is/Cntrl.pl20
-rw-r--r--contrib/perl5/lib/unicode/Is/Co.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/Cs.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/DCcircle.pl10
-rw-r--r--contrib/perl5/lib/unicode/Is/DCcompat.pl69
-rw-r--r--contrib/perl5/lib/unicode/Is/DCfinal.pl118
-rw-r--r--contrib/perl5/lib/unicode/Is/DCfont.pl16
-rw-r--r--contrib/perl5/lib/unicode/Is/DCfraction.pl7
-rw-r--r--contrib/perl5/lib/unicode/Is/DCinitial.pl80
-rw-r--r--contrib/perl5/lib/unicode/Is/DCisolated.pl103
-rw-r--r--contrib/perl5/lib/unicode/Is/DCmedial.pl59
-rw-r--r--contrib/perl5/lib/unicode/Is/DCnarrow.pl11
-rw-r--r--contrib/perl5/lib/unicode/Is/DCnoBreak.pl10
-rw-r--r--contrib/perl5/lib/unicode/Is/DCsmall.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/DCsquare.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/DCsub.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/DCsuper.pl15
-rw-r--r--contrib/perl5/lib/unicode/Is/DCvertical.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/DCwide.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/DecoCanon.pl212
-rw-r--r--contrib/perl5/lib/unicode/Is/DecoCompat.pl107
-rw-r--r--contrib/perl5/lib/unicode/Is/Digit.pl25
-rw-r--r--contrib/perl5/lib/unicode/Is/Graph.pl364
-rw-r--r--contrib/perl5/lib/unicode/Is/L.pl260
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkAI.pl139
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkAL.pl387
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkB2.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkBA.pl19
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkBB.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkBK.pl7
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkCB.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkCL.pl47
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkCM.pl117
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkCR.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkEX.pl10
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkGL.pl11
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkHY.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkID.pl81
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkIN.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkIS.pl9
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkLF.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkNS.pl41
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkNU.pl24
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkOP.pl43
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkPO.pl16
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkPR.pl21
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkQU.pl13
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkSA.pl30
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkSG.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkSP.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkSY.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkXX.pl5
-rw-r--r--contrib/perl5/lib/unicode/Is/LbrkZW.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/Ll.pl379
-rw-r--r--contrib/perl5/lib/unicode/Is/Lm.pl23
-rw-r--r--contrib/perl5/lib/unicode/Is/Lo.pl191
-rw-r--r--contrib/perl5/lib/unicode/Is/Lower.pl379
-rw-r--r--contrib/perl5/lib/unicode/Is/Lt.pl15
-rw-r--r--contrib/perl5/lib/unicode/Is/Lu.pl376
-rw-r--r--contrib/perl5/lib/unicode/Is/M.pl105
-rw-r--r--contrib/perl5/lib/unicode/Is/Mc.pl56
-rw-r--r--contrib/perl5/lib/unicode/Is/Me.pl9
-rw-r--r--contrib/perl5/lib/unicode/Is/Mirrored.pl48
-rw-r--r--contrib/perl5/lib/unicode/Is/Mn.pl98
-rw-r--r--contrib/perl5/lib/unicode/Is/N.pl43
-rw-r--r--contrib/perl5/lib/unicode/Is/Nd.pl25
-rw-r--r--contrib/perl5/lib/unicode/Is/Nl.pl9
-rw-r--r--contrib/perl5/lib/unicode/Is/No.pl23
-rw-r--r--contrib/perl5/lib/unicode/Is/P.pl80
-rw-r--r--contrib/perl5/lib/unicode/Is/Pc.pl12
-rw-r--r--contrib/perl5/lib/unicode/Is/Pd.pl16
-rw-r--r--contrib/perl5/lib/unicode/Is/Pe.pl41
-rw-r--r--contrib/perl5/lib/unicode/Is/Pf.pl9
-rw-r--r--contrib/perl5/lib/unicode/Is/Pi.pl10
-rw-r--r--contrib/perl5/lib/unicode/Is/Po.pl70
-rw-r--r--contrib/perl5/lib/unicode/Is/Print.pl365
-rw-r--r--contrib/perl5/lib/unicode/Is/Ps.pl43
-rw-r--r--contrib/perl5/lib/unicode/Is/Punct.pl80
-rw-r--r--contrib/perl5/lib/unicode/Is/S.pl131
-rw-r--r--contrib/perl5/lib/unicode/Is/Sc.pl15
-rw-r--r--contrib/perl5/lib/unicode/Is/Sk.pl27
-rw-r--r--contrib/perl5/lib/unicode/Is/Sm.pl40
-rw-r--r--contrib/perl5/lib/unicode/Is/So.pl103
-rw-r--r--contrib/perl5/lib/unicode/Is/Space.pl13
-rw-r--r--contrib/perl5/lib/unicode/Is/SpacePerl.pl14
-rw-r--r--contrib/perl5/lib/unicode/Is/SylA.pl158
-rw-r--r--contrib/perl5/lib/unicode/Is/SylAA.pl25
-rw-r--r--contrib/perl5/lib/unicode/Is/SylAAI.pl19
-rw-r--r--contrib/perl5/lib/unicode/Is/SylAI.pl7
-rw-r--r--contrib/perl5/lib/unicode/Is/SylC.pl70
-rw-r--r--contrib/perl5/lib/unicode/Is/SylE.pl147
-rw-r--r--contrib/perl5/lib/unicode/Is/SylEE.pl34
-rw-r--r--contrib/perl5/lib/unicode/Is/SylI.pl154
-rw-r--r--contrib/perl5/lib/unicode/Is/SylII.pl25
-rw-r--r--contrib/perl5/lib/unicode/Is/SylN.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/SylO.pl157
-rw-r--r--contrib/perl5/lib/unicode/Is/SylOO.pl25
-rw-r--r--contrib/perl5/lib/unicode/Is/SylU.pl122
-rw-r--r--contrib/perl5/lib/unicode/Is/SylV.pl54
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWA.pl49
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWAA.pl19
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWC.pl13
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWE.pl23
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWEE.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWI.pl22
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWII.pl15
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWO.pl16
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWOO.pl15
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWU.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/SylWV.pl11
-rw-r--r--contrib/perl5/lib/unicode/Is/Syllable.pl4
-rw-r--r--contrib/perl5/lib/unicode/Is/Upper.pl379
-rw-r--r--contrib/perl5/lib/unicode/Is/Word.pl359
-rw-r--r--contrib/perl5/lib/unicode/Is/XDigit.pl8
-rw-r--r--contrib/perl5/lib/unicode/Is/Z.pl12
-rw-r--r--contrib/perl5/lib/unicode/Is/Zl.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/Zp.pl6
-rw-r--r--contrib/perl5/lib/unicode/Is/Zs.pl11
-rw-r--r--contrib/perl5/lib/unicode/Jamo.txt91
-rw-r--r--contrib/perl5/lib/unicode/JamoShort.pl72
-rw-r--r--contrib/perl5/lib/unicode/LineBrk.txt10643
-rw-r--r--contrib/perl5/lib/unicode/Makefile5
-rw-r--r--contrib/perl5/lib/unicode/Name.pl10554
-rw-r--r--contrib/perl5/lib/unicode/Names.txt17271
-rw-r--r--contrib/perl5/lib/unicode/NamesList.html226
-rw-r--r--contrib/perl5/lib/unicode/Number.pl432
-rw-r--r--contrib/perl5/lib/unicode/PropList.txt3592
-rw-r--r--contrib/perl5/lib/unicode/README.Ethiopic18
-rw-r--r--contrib/perl5/lib/unicode/README.perl37
-rw-r--r--contrib/perl5/lib/unicode/ReadMe.txt13
-rw-r--r--contrib/perl5/lib/unicode/SpecCase.txt230
-rw-r--r--contrib/perl5/lib/unicode/To/Digit.pl30
-rw-r--r--contrib/perl5/lib/unicode/To/Lower.pl401
-rw-r--r--contrib/perl5/lib/unicode/To/Title.pl411
-rw-r--r--contrib/perl5/lib/unicode/To/Upper.pl411
-rw-r--r--contrib/perl5/lib/unicode/UCD301.html201
-rw-r--r--contrib/perl5/lib/unicode/UCDFF301.html1025
-rw-r--r--contrib/perl5/lib/unicode/Unicode.30110621
-rwxr-xr-xcontrib/perl5/lib/unicode/mktables.PL447
-rw-r--r--contrib/perl5/lib/unicode/syllables.txt1329
-rw-r--r--contrib/perl5/lib/utf8.pm84
-rw-r--r--contrib/perl5/lib/utf8_heavy.pl221
-rw-r--r--contrib/perl5/lib/validate.pl104
-rw-r--r--contrib/perl5/lib/vars.pm83
-rw-r--r--contrib/perl5/lib/warnings.pm419
-rw-r--r--contrib/perl5/lib/warnings/register.pm38
-rwxr-xr-xcontrib/perl5/makeaperl.SH130
-rw-r--r--contrib/perl5/makedef.pl895
-rwxr-xr-xcontrib/perl5/makedepend.SH240
-rwxr-xr-xcontrib/perl5/makedir.SH68
-rw-r--r--contrib/perl5/malloc.c2102
-rw-r--r--contrib/perl5/mg.c2284
-rw-r--r--contrib/perl5/mg.h50
-rw-r--r--contrib/perl5/minimod.pl139
-rw-r--r--contrib/perl5/miniperlmain.c72
-rw-r--r--contrib/perl5/mv-if-diff15
-rwxr-xr-xcontrib/perl5/myconfig.SH61
-rw-r--r--contrib/perl5/nostdio.h26
-rw-r--r--contrib/perl5/objXSUB.h2333
-rw-r--r--contrib/perl5/op.c6854
-rw-r--r--contrib/perl5/op.h427
-rw-r--r--contrib/perl5/opcode.h1809
-rwxr-xr-xcontrib/perl5/opcode.pl848
-rw-r--r--contrib/perl5/opnames.h408
-rw-r--r--contrib/perl5/patchlevel.h86
-rw-r--r--contrib/perl5/perl.c3905
-rw-r--r--contrib/perl5/perl.h3478
-rw-r--r--contrib/perl5/perlapi.c4169
-rw-r--r--contrib/perl5/perlapi.h926
-rw-r--r--contrib/perl5/perlio.c596
-rw-r--r--contrib/perl5/perlio.h1
-rw-r--r--contrib/perl5/perlio.sym49
-rw-r--r--contrib/perl5/perlsdio.h342
-rw-r--r--contrib/perl5/perlsfio.h69
-rw-r--r--contrib/perl5/perlsh15
-rw-r--r--contrib/perl5/perlvars.h40
-rw-r--r--contrib/perl5/perly.c2506
-rwxr-xr-xcontrib/perl5/perly.fixer227
-rw-r--r--contrib/perl5/perly.h70
-rw-r--r--contrib/perl5/perly.y735
-rw-r--r--contrib/perl5/perly_c.diff189
-rw-r--r--contrib/perl5/pod/Makefile.SH167
-rwxr-xr-xcontrib/perl5/pod/buildtoc.PL492
-rw-r--r--contrib/perl5/pod/checkpods.PL85
-rw-r--r--contrib/perl5/pod/perl.pod368
-rw-r--r--contrib/perl5/pod/perl5004delta.pod1612
-rw-r--r--contrib/perl5/pod/perl5005delta.pod993
-rw-r--r--contrib/perl5/pod/perlapi.pod3546
-rw-r--r--contrib/perl5/pod/perlapio.pod274
-rw-r--r--contrib/perl5/pod/perlbook.pod17
-rw-r--r--contrib/perl5/pod/perlboot.pod815
-rw-r--r--contrib/perl5/pod/perlbot.pod527
-rw-r--r--contrib/perl5/pod/perlcall.pod1957
-rw-r--r--contrib/perl5/pod/perlclib.pod197
-rw-r--r--contrib/perl5/pod/perlcompile.pod441
-rw-r--r--contrib/perl5/pod/perldata.pod829
-rw-r--r--contrib/perl5/pod/perldbmfilter.pod168
-rw-r--r--contrib/perl5/pod/perldebguts.pod925
-rw-r--r--contrib/perl5/pod/perldebtut.pod721
-rw-r--r--contrib/perl5/pod/perldebug.pod956
-rw-r--r--contrib/perl5/pod/perldelta.pod3646
-rw-r--r--contrib/perl5/pod/perldiag.pod3869
-rw-r--r--contrib/perl5/pod/perldsc.pod832
-rw-r--r--contrib/perl5/pod/perlebcdic.pod1235
-rw-r--r--contrib/perl5/pod/perlembed.pod1069
-rw-r--r--contrib/perl5/pod/perlfaq.pod1430
-rw-r--r--contrib/perl5/pod/perlfaq1.pod328
-rw-r--r--contrib/perl5/pod/perlfaq2.pod532
-rw-r--r--contrib/perl5/pod/perlfaq3.pod814
-rw-r--r--contrib/perl5/pod/perlfaq4.pod1821
-rw-r--r--contrib/perl5/pod/perlfaq5.pod1216
-rw-r--r--contrib/perl5/pod/perlfaq6.pod711
-rw-r--r--contrib/perl5/pod/perlfaq7.pod974
-rw-r--r--contrib/perl5/pod/perlfaq8.pod1103
-rw-r--r--contrib/perl5/pod/perlfaq9.pod602
-rw-r--r--contrib/perl5/pod/perlfilter.pod569
-rw-r--r--contrib/perl5/pod/perlfork.pod317
-rw-r--r--contrib/perl5/pod/perlform.pod346
-rw-r--r--contrib/perl5/pod/perlfunc.pod5885
-rw-r--r--contrib/perl5/pod/perlguts.pod2318
-rw-r--r--contrib/perl5/pod/perlhack.pod1722
-rw-r--r--contrib/perl5/pod/perlhist.pod571
-rw-r--r--contrib/perl5/pod/perlintern.pod120
-rw-r--r--contrib/perl5/pod/perlipc.pod1509
-rw-r--r--contrib/perl5/pod/perllexwarn.pod514
-rw-r--r--contrib/perl5/pod/perllocale.pod980
-rw-r--r--contrib/perl5/pod/perllol.pod303
-rw-r--r--contrib/perl5/pod/perlmod.pod455
-rw-r--r--contrib/perl5/pod/perlmodinstall.pod486
-rwxr-xr-xcontrib/perl5/pod/perlmodlib.PL1383
-rw-r--r--contrib/perl5/pod/perlmodlib.pod2042
-rw-r--r--contrib/perl5/pod/perlnewmod.pod282
-rw-r--r--contrib/perl5/pod/perlnumber.pod185
-rw-r--r--contrib/perl5/pod/perlobj.pod566
-rw-r--r--contrib/perl5/pod/perlop.pod1936
-rw-r--r--contrib/perl5/pod/perlopentut.pod864
-rw-r--r--contrib/perl5/pod/perlpod.pod318
-rw-r--r--contrib/perl5/pod/perlport.pod2085
-rw-r--r--contrib/perl5/pod/perlre.pod1285
-rw-r--r--contrib/perl5/pod/perlref.pod703
-rw-r--r--contrib/perl5/pod/perlreftut.pod416
-rw-r--r--contrib/perl5/pod/perlrequick.pod503
-rw-r--r--contrib/perl5/pod/perlretut.pod2504
-rw-r--r--contrib/perl5/pod/perlrun.pod859
-rw-r--r--contrib/perl5/pod/perlsec.pod365
-rw-r--r--contrib/perl5/pod/perlstyle.pod277
-rw-r--r--contrib/perl5/pod/perlsub.pod1278
-rw-r--r--contrib/perl5/pod/perlsyn.pod639
-rw-r--r--contrib/perl5/pod/perlthrtut.pod1067
-rw-r--r--contrib/perl5/pod/perltie.pod1084
-rw-r--r--contrib/perl5/pod/perltoc.pod13046
-rw-r--r--contrib/perl5/pod/perltodo.pod858
-rw-r--r--contrib/perl5/pod/perltoot.pod1798
-rw-r--r--contrib/perl5/pod/perltootc.pod1347
-rw-r--r--contrib/perl5/pod/perltrap.pod1538
-rw-r--r--contrib/perl5/pod/perlunicode.pod242
-rw-r--r--contrib/perl5/pod/perlutil.pod185
-rw-r--r--contrib/perl5/pod/perlvar.pod1234
-rw-r--r--contrib/perl5/pod/perlxs.pod1780
-rw-r--r--contrib/perl5/pod/perlxstut.pod1263
-rw-r--r--contrib/perl5/pod/pod2html.PL183
-rw-r--r--contrib/perl5/pod/pod2latex.PL350
-rw-r--r--contrib/perl5/pod/pod2man.PL496
-rw-r--r--contrib/perl5/pod/pod2text.PL254
-rw-r--r--contrib/perl5/pod/pod2usage.PL179
-rw-r--r--contrib/perl5/pod/podchecker.PL176
-rw-r--r--contrib/perl5/pod/podselect.PL142
-rw-r--r--contrib/perl5/pod/roffitall312
-rwxr-xr-xcontrib/perl5/pod/rofftoc66
-rwxr-xr-xcontrib/perl5/pod/splitman46
-rwxr-xr-xcontrib/perl5/pod/splitpod60
-rw-r--r--contrib/perl5/pp.c5419
-rw-r--r--contrib/perl5/pp.h383
-rw-r--r--contrib/perl5/pp.sym393
-rw-r--r--contrib/perl5/pp_ctl.c4665
-rw-r--r--contrib/perl5/pp_hot.c3008
-rw-r--r--contrib/perl5/pp_proto.h394
-rw-r--r--contrib/perl5/pp_sys.c5382
-rw-r--r--contrib/perl5/proto.h1278
-rw-r--r--contrib/perl5/regcomp.c4599
-rw-r--r--contrib/perl5/regcomp.h343
-rw-r--r--contrib/perl5/regcomp.pl119
-rw-r--r--contrib/perl5/regcomp.sym134
-rw-r--r--contrib/perl5/regexec.c3895
-rw-r--r--contrib/perl5/regexp.h110
-rw-r--r--contrib/perl5/regnodes.h430
-rw-r--r--contrib/perl5/run.c138
-rw-r--r--contrib/perl5/scope.c1063
-rw-r--r--contrib/perl5/scope.h385
-rw-r--r--contrib/perl5/sv.c8413
-rw-r--r--contrib/perl5/sv.h1101
-rw-r--r--contrib/perl5/t/README16
-rwxr-xr-xcontrib/perl5/t/TEST185
-rwxr-xr-xcontrib/perl5/t/UTEST198
-rwxr-xr-xcontrib/perl5/t/base/cond.t19
-rwxr-xr-xcontrib/perl5/t/base/if.t11
-rwxr-xr-xcontrib/perl5/t/base/lex.t247
-rwxr-xr-xcontrib/perl5/t/base/pat.t11
-rwxr-xr-xcontrib/perl5/t/base/rs.t132
-rwxr-xr-xcontrib/perl5/t/base/term.t55
-rwxr-xr-xcontrib/perl5/t/cmd/elsif.t25
-rwxr-xr-xcontrib/perl5/t/cmd/for.t57
-rwxr-xr-xcontrib/perl5/t/cmd/mod.t54
-rwxr-xr-xcontrib/perl5/t/cmd/subval.t186
-rwxr-xr-xcontrib/perl5/t/cmd/switch.t75
-rwxr-xr-xcontrib/perl5/t/cmd/while.t179
-rwxr-xr-xcontrib/perl5/t/comp/bproto.t44
-rwxr-xr-xcontrib/perl5/t/comp/cmdopt.t90
-rwxr-xr-xcontrib/perl5/t/comp/colon.t138
-rwxr-xr-xcontrib/perl5/t/comp/cpp.aux35
-rwxr-xr-xcontrib/perl5/t/comp/cpp.t18
-rwxr-xr-xcontrib/perl5/t/comp/decl.t49
-rwxr-xr-xcontrib/perl5/t/comp/multiline.t46
-rwxr-xr-xcontrib/perl5/t/comp/package.t53
-rwxr-xr-xcontrib/perl5/t/comp/proto.t498
-rwxr-xr-xcontrib/perl5/t/comp/redef.t80
-rwxr-xr-xcontrib/perl5/t/comp/require.t156
-rwxr-xr-xcontrib/perl5/t/comp/script.t24
-rwxr-xr-xcontrib/perl5/t/comp/term.t72
-rwxr-xr-xcontrib/perl5/t/comp/use.t170
-rw-r--r--contrib/perl5/t/harness81
-rwxr-xr-xcontrib/perl5/t/io/argv.t127
-rwxr-xr-xcontrib/perl5/t/io/dup.t40
-rwxr-xr-xcontrib/perl5/t/io/fs.t210
-rwxr-xr-xcontrib/perl5/t/io/inplace.t36
-rwxr-xr-xcontrib/perl5/t/io/iprefix.t36
-rwxr-xr-xcontrib/perl5/t/io/nargv.t63
-rwxr-xr-xcontrib/perl5/t/io/open.t291
-rwxr-xr-xcontrib/perl5/t/io/openpid.t82
-rwxr-xr-xcontrib/perl5/t/io/pipe.t176
-rwxr-xr-xcontrib/perl5/t/io/print.t34
-rwxr-xr-xcontrib/perl5/t/io/read.t26
-rwxr-xr-xcontrib/perl5/t/io/tell.t94
-rwxr-xr-xcontrib/perl5/t/lib/abbrev.t51
-rwxr-xr-xcontrib/perl5/t/lib/ansicolor.t81
-rwxr-xr-xcontrib/perl5/t/lib/anydbm.t155
-rwxr-xr-xcontrib/perl5/t/lib/attrs.t138
-rwxr-xr-xcontrib/perl5/t/lib/autoloader.t122
-rwxr-xr-xcontrib/perl5/t/lib/b.t163
-rwxr-xr-xcontrib/perl5/t/lib/basename.t144
-rwxr-xr-xcontrib/perl5/t/lib/bigfloat.t408
-rwxr-xr-xcontrib/perl5/t/lib/bigfltpm.t478
-rwxr-xr-xcontrib/perl5/t/lib/bigint.t282
-rwxr-xr-xcontrib/perl5/t/lib/bigintpm.t377
-rwxr-xr-xcontrib/perl5/t/lib/cgi-esc.t56
-rwxr-xr-xcontrib/perl5/t/lib/cgi-form.t90
-rwxr-xr-xcontrib/perl5/t/lib/cgi-function.t106
-rwxr-xr-xcontrib/perl5/t/lib/cgi-html.t95
-rwxr-xr-xcontrib/perl5/t/lib/cgi-pretty.t41
-rwxr-xr-xcontrib/perl5/t/lib/cgi-request.t103
-rwxr-xr-xcontrib/perl5/t/lib/charnames.t110
-rwxr-xr-xcontrib/perl5/t/lib/checktree.t19
-rwxr-xr-xcontrib/perl5/t/lib/class-struct.t66
-rwxr-xr-xcontrib/perl5/t/lib/complex.t979
-rwxr-xr-xcontrib/perl5/t/lib/db-btree.t1296
-rwxr-xr-xcontrib/perl5/t/lib/db-hash.t743
-rwxr-xr-xcontrib/perl5/t/lib/db-recno.t889
-rwxr-xr-xcontrib/perl5/t/lib/dirhand.t33
-rwxr-xr-xcontrib/perl5/t/lib/dosglob.t112
-rwxr-xr-xcontrib/perl5/t/lib/dprof.t88
-rw-r--r--contrib/perl5/t/lib/dprof/V.pm63
-rw-r--r--contrib/perl5/t/lib/dprof/test1_t18
-rw-r--r--contrib/perl5/t/lib/dprof/test1_v24
-rw-r--r--contrib/perl5/t/lib/dprof/test2_t21
-rw-r--r--contrib/perl5/t/lib/dprof/test2_v36
-rw-r--r--contrib/perl5/t/lib/dprof/test3_t19
-rw-r--r--contrib/perl5/t/lib/dprof/test3_v29
-rw-r--r--contrib/perl5/t/lib/dprof/test4_t24
-rw-r--r--contrib/perl5/t/lib/dprof/test4_v36
-rw-r--r--contrib/perl5/t/lib/dprof/test5_t25
-rw-r--r--contrib/perl5/t/lib/dprof/test5_v15
-rw-r--r--contrib/perl5/t/lib/dprof/test6_t29
-rw-r--r--contrib/perl5/t/lib/dprof/test6_v16
-rwxr-xr-xcontrib/perl5/t/lib/dumper-ovl.t35
-rwxr-xr-xcontrib/perl5/t/lib/dumper.t810
-rwxr-xr-xcontrib/perl5/t/lib/english.t47
-rwxr-xr-xcontrib/perl5/t/lib/env-array.t100
-rwxr-xr-xcontrib/perl5/t/lib/env.t25
-rwxr-xr-xcontrib/perl5/t/lib/errno.t54
-rwxr-xr-xcontrib/perl5/t/lib/fatal.t36
-rwxr-xr-xcontrib/perl5/t/lib/fields.t172
-rwxr-xr-xcontrib/perl5/t/lib/filecache.t25
-rwxr-xr-xcontrib/perl5/t/lib/filecopy.t109
-rwxr-xr-xcontrib/perl5/t/lib/filefind.t197
-rwxr-xr-xcontrib/perl5/t/lib/filefunc.t17
-rwxr-xr-xcontrib/perl5/t/lib/filehand.t91
-rwxr-xr-xcontrib/perl5/t/lib/filepath.t28
-rwxr-xr-xcontrib/perl5/t/lib/filespec.t379
-rwxr-xr-xcontrib/perl5/t/lib/findbin.t13
-rwxr-xr-xcontrib/perl5/t/lib/ftmp-mktemp.t114
-rwxr-xr-xcontrib/perl5/t/lib/ftmp-posix.t81
-rwxr-xr-xcontrib/perl5/t/lib/ftmp-security.t140
-rwxr-xr-xcontrib/perl5/t/lib/ftmp-tempfile.t145
-rwxr-xr-xcontrib/perl5/t/lib/gdbm.t426
-rwxr-xr-xcontrib/perl5/t/lib/getopt.t73
-rwxr-xr-xcontrib/perl5/t/lib/glob-basic.t129
-rwxr-xr-xcontrib/perl5/t/lib/glob-case.t60
-rwxr-xr-xcontrib/perl5/t/lib/glob-global.t152
-rwxr-xr-xcontrib/perl5/t/lib/glob-taint.t31
-rwxr-xr-xcontrib/perl5/t/lib/gol-basic.t26
-rwxr-xr-xcontrib/perl5/t/lib/gol-compat.t25
-rwxr-xr-xcontrib/perl5/t/lib/gol-linkage.t37
-rwxr-xr-xcontrib/perl5/t/lib/gol-oo.t26
-rw-r--r--contrib/perl5/t/lib/h2ph.h85
-rw-r--r--contrib/perl5/t/lib/h2ph.pht71
-rwxr-xr-xcontrib/perl5/t/lib/h2ph.t35
-rwxr-xr-xcontrib/perl5/t/lib/hostname.t25
-rwxr-xr-xcontrib/perl5/t/lib/io_const.t33
-rwxr-xr-xcontrib/perl5/t/lib/io_dir.t66
-rwxr-xr-xcontrib/perl5/t/lib/io_dup.t61
-rwxr-xr-xcontrib/perl5/t/lib/io_linenum.t80
-rwxr-xr-xcontrib/perl5/t/lib/io_multihomed.t124
-rwxr-xr-xcontrib/perl5/t/lib/io_pipe.t123
-rwxr-xr-xcontrib/perl5/t/lib/io_poll.t82
-rwxr-xr-xcontrib/perl5/t/lib/io_sel.t132
-rwxr-xr-xcontrib/perl5/t/lib/io_sock.t203
-rwxr-xr-xcontrib/perl5/t/lib/io_taint.t48
-rwxr-xr-xcontrib/perl5/t/lib/io_tell.t64
-rwxr-xr-xcontrib/perl5/t/lib/io_udp.t94
-rwxr-xr-xcontrib/perl5/t/lib/io_unix.t89
-rwxr-xr-xcontrib/perl5/t/lib/io_xs.t43
-rwxr-xr-xcontrib/perl5/t/lib/ipc_sysv.t218
-rwxr-xr-xcontrib/perl5/t/lib/ndbm.t420
-rwxr-xr-xcontrib/perl5/t/lib/odbm.t437
-rwxr-xr-xcontrib/perl5/t/lib/opcode.t115
-rwxr-xr-xcontrib/perl5/t/lib/open2.t59
-rwxr-xr-xcontrib/perl5/t/lib/open3.t150
-rwxr-xr-xcontrib/perl5/t/lib/ops.t29
-rwxr-xr-xcontrib/perl5/t/lib/parsewords.t110
-rwxr-xr-xcontrib/perl5/t/lib/peek.t312
-rwxr-xr-xcontrib/perl5/t/lib/ph.t96
-rwxr-xr-xcontrib/perl5/t/lib/posix.t137
-rwxr-xr-xcontrib/perl5/t/lib/safe1.t68
-rwxr-xr-xcontrib/perl5/t/lib/safe2.t145
-rwxr-xr-xcontrib/perl5/t/lib/sdbm.t429
-rwxr-xr-xcontrib/perl5/t/lib/searchdict.t87
-rwxr-xr-xcontrib/perl5/t/lib/selectsaver.t28
-rwxr-xr-xcontrib/perl5/t/lib/selfloader.t201
-rwxr-xr-xcontrib/perl5/t/lib/socket.t87
-rwxr-xr-xcontrib/perl5/t/lib/soundex.t143
-rwxr-xr-xcontrib/perl5/t/lib/symbol.t52
-rwxr-xr-xcontrib/perl5/t/lib/syslfs.t265
-rwxr-xr-xcontrib/perl5/t/lib/syslog.t59
-rwxr-xr-xcontrib/perl5/t/lib/textfill.t98
-rwxr-xr-xcontrib/perl5/t/lib/texttabs.t139
-rwxr-xr-xcontrib/perl5/t/lib/textwrap.t209
-rwxr-xr-xcontrib/perl5/t/lib/thr5005.t131
-rwxr-xr-xcontrib/perl5/t/lib/tie-push.t25
-rwxr-xr-xcontrib/perl5/t/lib/tie-refhash.t305
-rwxr-xr-xcontrib/perl5/t/lib/tie-splice.t17
-rwxr-xr-xcontrib/perl5/t/lib/tie-stdarray.t13
-rwxr-xr-xcontrib/perl5/t/lib/tie-stdhandle.t47
-rwxr-xr-xcontrib/perl5/t/lib/tie-stdpush.t11
-rwxr-xr-xcontrib/perl5/t/lib/tie-substrhash.t111
-rwxr-xr-xcontrib/perl5/t/lib/timelocal.t90
-rwxr-xr-xcontrib/perl5/t/lib/trig.t179
-rwxr-xr-xcontrib/perl5/t/op/64bitint.t297
-rwxr-xr-xcontrib/perl5/t/op/anonsub.t93
-rwxr-xr-xcontrib/perl5/t/op/append.t59
-rwxr-xr-xcontrib/perl5/t/op/args.t75
-rwxr-xr-xcontrib/perl5/t/op/arith.t30
-rwxr-xr-xcontrib/perl5/t/op/array.t231
-rwxr-xr-xcontrib/perl5/t/op/assignwarn.t73
-rwxr-xr-xcontrib/perl5/t/op/attrs.t176
-rwxr-xr-xcontrib/perl5/t/op/auto.t52
-rwxr-xr-xcontrib/perl5/t/op/avhv.t178
-rwxr-xr-xcontrib/perl5/t/op/bop.t171
-rwxr-xr-xcontrib/perl5/t/op/chars.t74
-rwxr-xr-xcontrib/perl5/t/op/chop.t118
-rwxr-xr-xcontrib/perl5/t/op/closure.t507
-rwxr-xr-xcontrib/perl5/t/op/cmp.t35
-rwxr-xr-xcontrib/perl5/t/op/concat.t100
-rwxr-xr-xcontrib/perl5/t/op/cond.t12
-rwxr-xr-xcontrib/perl5/t/op/context.t18
-rwxr-xr-xcontrib/perl5/t/op/defins.t147
-rwxr-xr-xcontrib/perl5/t/op/delete.t123
-rwxr-xr-xcontrib/perl5/t/op/die.t43
-rwxr-xr-xcontrib/perl5/t/op/die_exit.t59
-rwxr-xr-xcontrib/perl5/t/op/do.t44
-rwxr-xr-xcontrib/perl5/t/op/each.t133
-rwxr-xr-xcontrib/perl5/t/op/eval.t208
-rwxr-xr-xcontrib/perl5/t/op/exec.t48
-rwxr-xr-xcontrib/perl5/t/op/exists_sub.t46
-rwxr-xr-xcontrib/perl5/t/op/exp.t27
-rwxr-xr-xcontrib/perl5/t/op/fh.t26
-rwxr-xr-xcontrib/perl5/t/op/filetest.t71
-rwxr-xr-xcontrib/perl5/t/op/flip.t36
-rwxr-xr-xcontrib/perl5/t/op/fork.t423
-rwxr-xr-xcontrib/perl5/t/op/glob.t40
-rwxr-xr-xcontrib/perl5/t/op/goto.t126
-rwxr-xr-xcontrib/perl5/t/op/goto_xs.t98
-rwxr-xr-xcontrib/perl5/t/op/grent.t168
-rwxr-xr-xcontrib/perl5/t/op/grep.t99
-rwxr-xr-xcontrib/perl5/t/op/groups.t143
-rwxr-xr-xcontrib/perl5/t/op/gv.t176
-rwxr-xr-xcontrib/perl5/t/op/hashwarn.t77
-rwxr-xr-xcontrib/perl5/t/op/inc.t97
-rwxr-xr-xcontrib/perl5/t/op/index.t42
-rwxr-xr-xcontrib/perl5/t/op/int.t36
-rwxr-xr-xcontrib/perl5/t/op/join.t67
-rwxr-xr-xcontrib/perl5/t/op/length.t85
-rwxr-xr-xcontrib/perl5/t/op/lex_assign.t325
-rwxr-xr-xcontrib/perl5/t/op/lfs.t272
-rwxr-xr-xcontrib/perl5/t/op/list.t89
-rwxr-xr-xcontrib/perl5/t/op/local.t234
-rwxr-xr-xcontrib/perl5/t/op/lop.t44
-rwxr-xr-xcontrib/perl5/t/op/magic.t228
-rwxr-xr-xcontrib/perl5/t/op/method.t187
-rwxr-xr-xcontrib/perl5/t/op/misc.t603
-rwxr-xr-xcontrib/perl5/t/op/mkdir.t25
-rwxr-xr-xcontrib/perl5/t/op/my.t101
-rwxr-xr-xcontrib/perl5/t/op/my_stash.t31
-rwxr-xr-xcontrib/perl5/t/op/nothr5005.t35
-rwxr-xr-xcontrib/perl5/t/op/numconvert.t192
-rwxr-xr-xcontrib/perl5/t/op/oct.t88
-rwxr-xr-xcontrib/perl5/t/op/ord.t23
-rwxr-xr-xcontrib/perl5/t/op/pack.t418
-rwxr-xr-xcontrib/perl5/t/op/pat.t1130
-rwxr-xr-xcontrib/perl5/t/op/pos.t23
-rwxr-xr-xcontrib/perl5/t/op/push.t56
-rwxr-xr-xcontrib/perl5/t/op/pwent.t170
-rwxr-xr-xcontrib/perl5/t/op/quotemeta.t47
-rwxr-xr-xcontrib/perl5/t/op/rand.t359
-rwxr-xr-xcontrib/perl5/t/op/range.t75
-rw-r--r--contrib/perl5/t/op/re_tests786
-rwxr-xr-xcontrib/perl5/t/op/read.t19
-rwxr-xr-xcontrib/perl5/t/op/readdir.t40
-rwxr-xr-xcontrib/perl5/t/op/recurse.t116
-rwxr-xr-xcontrib/perl5/t/op/ref.t295
-rwxr-xr-xcontrib/perl5/t/op/regexp.t112
-rwxr-xr-xcontrib/perl5/t/op/regexp_noamp.t10
-rwxr-xr-xcontrib/perl5/t/op/regmesg.t179
-rwxr-xr-xcontrib/perl5/t/op/repeat.t98
-rwxr-xr-xcontrib/perl5/t/op/reverse.t33
-rwxr-xr-xcontrib/perl5/t/op/runlevel.t366
-rwxr-xr-xcontrib/perl5/t/op/sleep.t8
-rwxr-xr-xcontrib/perl5/t/op/sort.t317
-rwxr-xr-xcontrib/perl5/t/op/splice.t34
-rwxr-xr-xcontrib/perl5/t/op/split.t129
-rwxr-xr-xcontrib/perl5/t/op/sprintf.t310
-rwxr-xr-xcontrib/perl5/t/op/stat.t287
-rwxr-xr-xcontrib/perl5/t/op/study.t69
-rwxr-xr-xcontrib/perl5/t/op/subst.t381
-rwxr-xr-xcontrib/perl5/t/op/subst_amp.t104
-rwxr-xr-xcontrib/perl5/t/op/subst_wamp.t11
-rwxr-xr-xcontrib/perl5/t/op/substr.t587
-rwxr-xr-xcontrib/perl5/t/op/sysio.t210
-rwxr-xr-xcontrib/perl5/t/op/taint.t735
-rwxr-xr-xcontrib/perl5/t/op/tie.t187
-rwxr-xr-xcontrib/perl5/t/op/tiearray.t210
-rwxr-xr-xcontrib/perl5/t/op/tiehandle.t167
-rwxr-xr-xcontrib/perl5/t/op/time.t53
-rwxr-xr-xcontrib/perl5/t/op/tr.t311
-rwxr-xr-xcontrib/perl5/t/op/undef.t81
-rwxr-xr-xcontrib/perl5/t/op/universal.t142
-rwxr-xr-xcontrib/perl5/t/op/unshift.t14
-rwxr-xr-xcontrib/perl5/t/op/utf8decode.t183
-rwxr-xr-xcontrib/perl5/t/op/vec.t80
-rwxr-xr-xcontrib/perl5/t/op/ver.t181
-rwxr-xr-xcontrib/perl5/t/op/wantarray.t20
-rwxr-xr-xcontrib/perl5/t/op/write.t220
-rwxr-xr-xcontrib/perl5/t/pod/emptycmd.t21
-rw-r--r--contrib/perl5/t/pod/emptycmd.xr2
-rwxr-xr-xcontrib/perl5/t/pod/find.t119
-rwxr-xr-xcontrib/perl5/t/pod/for.t59
-rw-r--r--contrib/perl5/t/pod/for.xr21
-rwxr-xr-xcontrib/perl5/t/pod/headings.t140
-rw-r--r--contrib/perl5/t/pod/headings.xr26
-rwxr-xr-xcontrib/perl5/t/pod/include.t36
-rw-r--r--contrib/perl5/t/pod/include.xr22
-rwxr-xr-xcontrib/perl5/t/pod/included.t35
-rw-r--r--contrib/perl5/t/pod/included.xr3
-rwxr-xr-xcontrib/perl5/t/pod/lref.t66
-rw-r--r--contrib/perl5/t/pod/lref.xr40
-rwxr-xr-xcontrib/perl5/t/pod/multiline_items.t31
-rw-r--r--contrib/perl5/t/pod/multiline_items.xr5
-rwxr-xr-xcontrib/perl5/t/pod/nested_items.t64
-rw-r--r--contrib/perl5/t/pod/nested_items.xr19
-rwxr-xr-xcontrib/perl5/t/pod/nested_seqs.t23
-rw-r--r--contrib/perl5/t/pod/nested_seqs.xr3
-rwxr-xr-xcontrib/perl5/t/pod/oneline_cmds.t46
-rw-r--r--contrib/perl5/t/pod/oneline_cmds.xr26
-rwxr-xr-xcontrib/perl5/t/pod/pod2usage.t18
-rw-r--r--contrib/perl5/t/pod/pod2usage.xr55
-rwxr-xr-xcontrib/perl5/t/pod/poderrs.t198
-rw-r--r--contrib/perl5/t/pod/poderrs.xr46
-rwxr-xr-xcontrib/perl5/t/pod/podselect.t18
-rw-r--r--contrib/perl5/t/pod/podselect.xr42
-rwxr-xr-xcontrib/perl5/t/pod/special_seqs.t46
-rw-r--r--contrib/perl5/t/pod/special_seqs.xr25
-rw-r--r--contrib/perl5/t/pod/testcmp.pl91
-rw-r--r--contrib/perl5/t/pod/testp2pt.pl196
-rw-r--r--contrib/perl5/t/pod/testpchk.pl129
-rwxr-xr-xcontrib/perl5/t/pragma/constant.t230
-rwxr-xr-xcontrib/perl5/t/pragma/diagnostics.t38
-rwxr-xr-xcontrib/perl5/t/pragma/locale.t807
-rw-r--r--contrib/perl5/t/pragma/locale/latin110
-rw-r--r--contrib/perl5/t/pragma/locale/utf810
-rwxr-xr-xcontrib/perl5/t/pragma/overload.t987
-rw-r--r--contrib/perl5/t/pragma/strict-refs297
-rw-r--r--contrib/perl5/t/pragma/strict-subs319
-rw-r--r--contrib/perl5/t/pragma/strict-vars410
-rwxr-xr-xcontrib/perl5/t/pragma/strict.t91
-rwxr-xr-xcontrib/perl5/t/pragma/sub_lval.t542
-rwxr-xr-xcontrib/perl5/t/pragma/subs.t159
-rwxr-xr-xcontrib/perl5/t/pragma/utf8.t462
-rw-r--r--contrib/perl5/t/pragma/warn/1global189
-rw-r--r--contrib/perl5/t/pragma/warn/2use356
-rw-r--r--contrib/perl5/t/pragma/warn/3both266
-rw-r--r--contrib/perl5/t/pragma/warn/4lint216
-rw-r--r--contrib/perl5/t/pragma/warn/5nolint204
-rw-r--r--contrib/perl5/t/pragma/warn/6default121
-rw-r--r--contrib/perl5/t/pragma/warn/7fatal312
-rw-r--r--contrib/perl5/t/pragma/warn/8signal18
-rwxr-xr-xcontrib/perl5/t/pragma/warn/9enabled1162
-rw-r--r--contrib/perl5/t/pragma/warn/av9
-rw-r--r--contrib/perl5/t/pragma/warn/doio209
-rw-r--r--contrib/perl5/t/pragma/warn/doop6
-rw-r--r--contrib/perl5/t/pragma/warn/gv54
-rw-r--r--contrib/perl5/t/pragma/warn/hv8
-rw-r--r--contrib/perl5/t/pragma/warn/malloc9
-rw-r--r--contrib/perl5/t/pragma/warn/mg44
-rw-r--r--contrib/perl5/t/pragma/warn/op872
-rw-r--r--contrib/perl5/t/pragma/warn/perl72
-rw-r--r--contrib/perl5/t/pragma/warn/perlio10
-rw-r--r--contrib/perl5/t/pragma/warn/perly31
-rw-r--r--contrib/perl5/t/pragma/warn/pp110
-rw-r--r--contrib/perl5/t/pragma/warn/pp_ctl230
-rw-r--r--contrib/perl5/t/pragma/warn/pp_hot230
-rw-r--r--contrib/perl5/t/pragma/warn/pp_sys381
-rw-r--r--contrib/perl5/t/pragma/warn/regcomp167
-rw-r--r--contrib/perl5/t/pragma/warn/regexec119
-rw-r--r--contrib/perl5/t/pragma/warn/run8
-rw-r--r--contrib/perl5/t/pragma/warn/sv303
-rw-r--r--contrib/perl5/t/pragma/warn/taint49
-rw-r--r--contrib/perl5/t/pragma/warn/toke587
-rw-r--r--contrib/perl5/t/pragma/warn/universal16
-rw-r--r--contrib/perl5/t/pragma/warn/utf835
-rw-r--r--contrib/perl5/t/pragma/warn/util108
-rwxr-xr-xcontrib/perl5/t/pragma/warnings.t119
-rwxr-xr-xcontrib/perl5/t/run/runenv.t147
-rw-r--r--contrib/perl5/taint.c117
-rw-r--r--contrib/perl5/thrdvar.h257
-rw-r--r--contrib/perl5/thread.h432
-rw-r--r--contrib/perl5/toke.c7639
-rw-r--r--contrib/perl5/universal.c301
-rw-r--r--contrib/perl5/unixish.h142
-rw-r--r--contrib/perl5/utf8.c1321
-rw-r--r--contrib/perl5/utf8.h133
-rw-r--r--contrib/perl5/util.c3978
-rw-r--r--contrib/perl5/util.h36
-rw-r--r--contrib/perl5/utils/Makefile57
-rw-r--r--contrib/perl5/utils/c2ph.PL1403
-rw-r--r--contrib/perl5/utils/dprofpp.PL838
-rw-r--r--contrib/perl5/utils/h2ph.PL746
-rw-r--r--contrib/perl5/utils/h2xs.PL1865
-rw-r--r--contrib/perl5/utils/perlbug.PL1224
-rw-r--r--contrib/perl5/utils/perlcc.PL667
-rw-r--r--contrib/perl5/utils/perldoc.PL875
-rw-r--r--contrib/perl5/utils/pl2pm.PL389
-rw-r--r--contrib/perl5/utils/splain.PL54
-rw-r--r--contrib/perl5/warnings.h113
-rw-r--r--contrib/perl5/warnings.pl589
-rwxr-xr-xcontrib/perl5/writemain.SH108
-rw-r--r--contrib/perl5/x2p/EXTERN.h17
-rw-r--r--contrib/perl5/x2p/INTERN.h17
-rwxr-xr-xcontrib/perl5/x2p/Makefile.SH186
-rw-r--r--contrib/perl5/x2p/a2p.c2807
-rw-r--r--contrib/perl5/x2p/a2p.h486
-rw-r--r--contrib/perl5/x2p/a2p.pod177
-rw-r--r--contrib/perl5/x2p/a2p.y404
-rw-r--r--contrib/perl5/x2p/a2py.c1291
-rwxr-xr-xcontrib/perl5/x2p/cflags.SH95
-rw-r--r--contrib/perl5/x2p/find2perl.PL885
-rw-r--r--contrib/perl5/x2p/hash.c229
-rw-r--r--contrib/perl5/x2p/hash.h52
-rw-r--r--contrib/perl5/x2p/proto.h8
-rw-r--r--contrib/perl5/x2p/s2p.PL858
-rw-r--r--contrib/perl5/x2p/str.c442
-rw-r--r--contrib/perl5/x2p/str.h53
-rw-r--r--contrib/perl5/x2p/util.c221
-rw-r--r--contrib/perl5/x2p/util.h39
-rw-r--r--contrib/perl5/x2p/walk.c2066
-rw-r--r--contrib/perl5/xsutils.c292
1470 files changed, 0 insertions, 641006 deletions
diff --git a/contrib/perl5/AUTHORS b/contrib/perl5/AUTHORS
deleted file mode 100644
index 331f3af..0000000
--- a/contrib/perl5/AUTHORS
+++ /dev/null
@@ -1,557 +0,0 @@
-# To give due honor to those who have made Perl 5 what is is today,
-# here are easily-from-changelogs-extractable people and their
-# (hopefully) current and preferred email addresses (as of late 2000
-# if known) from the Changes files. These people have either submitted
-# patches or suggestions, or their bug reports or comments have inspired
-# the appropriate patches. Corrections, additions, deletions welcome.
-#
---
-Aaron B. Dossett <aaron@iglou.com>
-Abigail <abigail@foad.org>
-Achim Bohnet <ach@mpe.mpg.de>
-Adam Krolnik <adamk@gypsy.cyrix.com>
-Akim Demaille <akim@epita.fr>
-Alan Burlison <Alan.Burlison@uk.sun.com>
-Alan Champion <achampio@lehman.com>
-Alan Harder <Alan.Harder@Ebay.Sun.COM>
-Alan Modra
-Albert Chin-A-Young <china@thewrittenword.com>
-Albert Dvornik <bert@genscan.com>
-Alexander Smishlajev <als@turnhere.com>
-Allen Smith <easmith@beatrice.rutgers.edu>
-Ambrose Kofi Laing
-Andreas Klussmann <andreas@infosys.heitec.de>
-Andreas König <a.koenig@mind.de>
-Andreas Schwab <schwab@suse.de>
-Andrew Bettison <andrewb@zip.com.au>
-Andrew Cohen <cohen@andy.bu.edu>
-Andrew M. Langmead <aml@world.std.com>
-Andrew Pimlott <pimlott@abel.math.harvard.edu>
-Andrew Vignaux <ajv@nz.sangacorp.com>
-Andrew Wilcox <awilcox@maine.com>
-Andy Dougherty <doughera@lafayette.edu>
-Anno Siegel <anno4000@lublin.zrz.tu-berlin.de>
-Anthony David <adavid@netinfo.com.au>
-Anton Berezin <tobez@tobez.org>
-Art Green <Art_Green@mercmarine.com>
-Artur <artur@vogon-solutions.com>
-Barrie Slaymaker <barries@slaysys.com>
-Barry Friedman
-Ben Tilly <ben_tilly@hotmail.com>
-Benjamin Low <b.d.low@unsw.edu.au>
-Benjamin Stuhl <sho_pi@hotmail.com>
-Benjamin Sugars <bsugars@canoe.ca>
-Bernard Quatermass <bernard@quatermass.co.uk>
-Bill Campbell <bill@celestial.com>
-Bill Glicker <billg@burrelles.com>
-Billy Constantine <wdconsta@cs.adelaide.edu.au>
-Blair Zajac <bzajac@geostaff.com>
-Boyd Gerber <gerberb@zenez.com>
-Brad Appleton <bradapp@enteract.com>
-Brad Howerter <bhower@wgc.woodward.com>
-Brad Hughes <brad@tgsmc.com>
-Brad Lanam <bll@gentoo.com>
-Brent B. Powers <powers@ml.com>
-Brian Callaghan <callagh@itginc.com>
-Brian Clarke <clarke@appliedmeta.com>
-Brian Grossman
-Brian Harrison <brie@corp.home.net>
-Brian Jepson <bjepson@home.com>
-Brian Katzung
-Brian Reichert <reichert@internet.com>
-Brian S. Cashman <bsc@umich.edu>
-Bruce Barnett <barnett@grymoire.crd.ge.com>
-Bruce J. Keeler <bkeelerx@iwa.dp.intel.com>
-Bruce P. Schuck <bruce@aps.org>
-Bud Huff <BAHUFF@us.oracle.com>
-Byron Brummer <byron@omix.com>
-Calle Dybedahl <calle@lysator.liu.se>
-Carl M. Fongheiser <cmf@ins.infonet.net>
-Carl Witty <cwitty@newtonlabs.com>
-Cary D. Renzema <caryr@mxim.com>
-Casey R. Tweten <crt@kiski.net>
-Castor Fu
-Chaim Frenkel <chaimf@pobox.com>
-Charles Bailey <bailey@newman.upenn.edu>
-Charles F. Randall <crandall@free.click-n-call.com>
-Charles Lane <lane@DUPHY4.Physics.Drexel.Edu>
-Charles Wilson <cwilson@ece.gatech.edu>
-Chip Salzenberg <chip@pobox.com>
-Chris Faylor <cgf@bbc.com>
-Chris Nandor <pudge@pobox.com>
-Chris Wick <cwick@lmc.com>
-Christian Kirsch <ck@held.mind.de>
-Christopher Chan-Nui <channui@austin.ibm.com>
-Christopher Davis <ckd@loiosh.kei.com>
-Chuck D. Phillips <cdp@hpescdp.fc.hp.com>
-Chuck Phillips <cdp@fc.hp.com>
-Chunhui Teng <cteng@nortel.ca>
-Clark Cooper <coopercc@netheaven.com>
-Clinton Pierce <cpierce1@ford.com>
-Colin Kuskie <ckuskie@cadence.com>
-Conrad Augustin
-Conrad E. Kimball <cek@tblv021.ca.boeing.com>
-Craig A. Berry <craig.berry@psinetcs.com>
-Craig Milo Rogers <Rogers@ISI.EDU>
-Dale Amon <amon@vnl.com>
-Damian Conway <damian@cs.monash.edu.au>
-Damon Atkins <Damon.Atkins@nabaus.com.au>
-Dan Boorstein <dan_boo@bellsouth.net>
-Dan Carson <dbc@tc.fluke.COM>
-Dan Schmidt <dfan@harmonixmusic.com>
-Dan Sugalski <dan@sidhe.org>
-Daniel Chetlin <daniel@chetlin.com>
-Daniel Grisinger <dgris@dimensional.com>
-Daniel Muiño <dmuino@afip.gov.ar>
-Daniel S. Lewart <lewart@vadds.cvm.uiuc.edu>
-Daniel Yacob <dmulholl@cs.indiana.edu>
-Danny R. Faught <faught@mailhost.rsn.hp.com>
-Danny Sadinoff <sadinoff@olf.com>
-Darrell Kindred <dkindred+@cmu.edu>
-Darrell Schiebel <drs@nrao.edu>
-Darren/Torin/Who Ever... <torin@daft.com>
-Dave Bianchi
-Dave Hartnoll <Dave_Hartnoll@3b2.com>
-Dave Nelson <David.Nelson@bellcow.com>
-Dave Schweisguth <dcs@neutron.chem.yale.edu>
-David Billinghurst <David.Billinghurst@riotinto.com.au>
-David Campbell
-David Couture
-David Denholm <denholm@conmat.phys.soton.ac.uk>
-David Dyck <dcd@tc.fluke.com>
-David F. Haertig <dfh@dwroll.lucent.com>
-David Filo
-David Glasser <me@davidglasser.net>
-David Hammen <hammen@gothamcity.jsc.nasa.gov>
-David J. Fiander <davidf@mks.com>
-David Kerry <davidk@tor.securecomputing.com>
-David Muir Sharnoff <muir@idiom.com>
-David R. Favor <dfavor@austin.ibm.com>
-David Sparks <daves@ActiveState.com>
-David Starks-Browning <dstarks@rc.tudelft.nl>
-David Sundstrom <sunds@asictest.sc.ti.com>
-Davin Milun <milun@cs.Buffalo.EDU>
-Dean Roehrich <roehrich@cray.com>
-Dennis Marsa <dennism@cyrix.com>
-dive <dive@ender.com>
-Dominic Dunlop <domo@computer.org>
-Dominique Dumont <Dominique_Dumont@grenoble.hp.com>
-Doug Campbell <soup@ampersand.com>
-Doug MacEachern <dougm@covalent.net>
-Douglas E. Wegscheid <wegscd@whirlpool.com>
-Douglas Lankshear <dougl@activestate.com>
-Dov Grobgeld <dov@Orbotech.Co.IL>
-Drago Goricanec <drago@raptor.otsd.ts.fujitsu.co.jp>
-Ed Mooring <mooring@Lynx.COM>
-Ed Peschko <epeschko@den-mdev1>
-Elaine -HFB- Ashton <elaine@chaos.wustl.edu>
-Eric Arnold <eric.arnold@sun.com>
-Eric Bartley <bartley@icd.cc.purdue.edu>
-Eric E. Coe <Eric.Coe@oracle.com>
-Eric Fifer <egf7@columbia.edu>
-Erich Rickheit
-Eryq <eryq@zeegee.com>
-Etienne Grossman <etienne@isr.isr.ist.utl.pt>
-Eugene Alterman <Eugene.Alterman@bremer-inc.com>
-Fabien Tassin <tassin@eerie.fr>
-Felix Gallo <fgallo@etoys.com>
-Florent Guillaume
-Frank Crawford
-Frank Ridderbusch <Frank.Ridderbusch@pdb.siemens.de>
-Frank Tobin <ftobin@uiuc.edu>
-François Désarménien <desar@club-internet.fr>
-Fréderic Chauveau <fmc@pasteur.fr>
-G. Del Merritt <del@intranetics.com>
-Gabe Schaffer
-Gary Clark <GaryC@mail.jeld-wen.com>
-Gary Ng <71564.1743@compuserve.com>
-Gerben Wierda <G.C.Th.Wierda@AWT.nl>
-Gerd Knops <gerti@BITart.com>
-Giles Lean <giles@nemeton.com.au>
-Gisle Aas <gisle@aas.no>
-Gordon J. Miller <gjm@cray.com>
-Grace Lee <grace@hal.com>
-Graham Barr <gbarr@pobox.com>
-Graham TerMarsch <grahamt@ActiveState.com>
-Greg Bacon <gbacon@itsc.uah.edu>
-Greg Chapman <glc@well.com>
-Greg Earle
-Greg Kuperberg
-Greg Seibert <seibert@Lynx.COM>
-Greg Ward <gward@ase.com>
-Gregory Martin Pfeil <pfeilgm@technomadic.org>
-Guenter Schmidt <gsc@bruker.de>
-Guido Flohr <gufl0000@stud.uni-sb.de>
-Gurusamy Sarathy <gsar@activestate.com>
-Gustaf Neumann
-Guy Decoux <decoux@moulon.inra.fr>
-H.J. Lu <hjl@nynexst.com>
-H.Merijn Brand <h.m.brand@hccnet.nl>
-Hal Pomeranz <pomeranz@netcom.com>
-Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
-Hannu Napari <Hannu.Napari@hut.fi>
-Hans Mulder <hansmu@xs4all.nl>
-Hans de Graaff <J.J.deGraaff@twi.tudelft.nl>
-Harold O Morris <hom00@utsglobal.com>
-Harry Edmon <harry@atmos.washington.edu>
-Helmut Jarausch <jarausch@numa1.igpm.rwth-aachen.de>
-Henrik Tougaard <ht.000@foa.dk>
-Hershel Walters <walters@smd4d.wes.army.mil>
-Holger Bechtold
-Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
-Hubert Feyrer <hubert.feyrer@informatik.fh-regensburg.de>
-Hugo van der Sanden <hv@crypt0.demon.co.uk>
-Hunter Kelly <retnuh@zule.pixar.com>
-Huw Rogers <count0@gremlin.straylight.co.jp>
-Ian Maloney <ian.malonet@ubs.com>
-Ian Phillipps <ian@dial.pipex.com>
-Ignasi Roca <ignasi.roca@fujitsu.siemens.es>
-Ilya Sandler <Ilya.Sandler@etak.com>
-Ilya Zakharevich <ilya@math.ohio-state.edu>
-Inaba Hiroto <inaba@st.rim.or.jp>
-Irving Reid <irving@tor.securecomputing.com>
-J. David Blackstone <jdb@dfwnet.sbms.sbc.com>
-J. van Krieken <John.van.Krieken@ATComputing.nl>
-JD Laub <jdl@access-health.com>
-JT McDuffie <jt@kpc.com>
-Jack Shirazi <JackS@GemStone.com>
-Jacqui Caren <Jacqui.Caren@ig.co.uk>
-Jake Hamby <jehamby@lightside.com>
-James FitzGibbon <james@ican.net>
-Jamshid Afshar
-Jan D. <jan.djarv@mbox200.swipnet.se>
-Jan Dubois <jand@activestate.com>
-Jan Pazdziora <adelton@fi.muni.cz>
-Jan-Erik Karlsson <trg@privat.utfors.se>
-Jan-Pieter Cornet <johnpc@xs4all.nl>
-Jared Rhine <jared@organic.com>
-Jarkko Hietaniemi <jhi@iki.fi>
-Jason A. Smith <smithj4@rpi.edu>
-Jason Shirk
-Jason Stewart <jasons@cs.unm.edu>
-Jason Varsoke <jjv@caesun10.msd.ray.com>
-Jay Rogers <jay@rgrs.com>
-Jeff Bouis
-Jeff McDougal <jmcdo@cris.com>
-Jeff Okamoto <okamoto@corp.hp.com>
-Jeff Pinyan <japhy@pobox.com>
-Jeff Urlwin <jurlwin@access.digex.net>
-Jeffrey Friedl <jfriedl@yahoo-inc.com>
-Jeffrey S. Haemer <jsh@woodcock.boulder.qms.com>
-Jens Hamisch <jens@Strawberry.COM>
-Jens T. Berger Thielemann <jensthi@ifi.uio.no>
-Jens Thomsen <jens@fiend.cis.com>
-Jens-Uwe Mager <jum@helios.de>
-Jeremy D. Zawodny <jzawodn@wcnet.org>
-Jerome Abela <abela@hsc.fr>
-Jim Anderson <jander@ml.com>
-Jim Avera <avera@hal.com>
-Jim Balter
-Jim Meyering <meyering@asic.sc.ti.com>
-Jim Miner <jfm@winternet.com>
-Jim Richardson
-Joachim Huober
-Jochen Wiedmann <joe@ispsoft.de>
-Joe Buehler <jbuehler@hekimian.com>
-Joe Smith <jsmith@inwap.com>
-Joel Rosi-Schwartz <j.schwartz@agonet.it>
-Joerg Porath <Joerg.Porath@informatik.tu-chemnitz.de>
-Joergen Haegg
-Johan Holtman
-Johan Vromans <jvromans@squirrel.nl>
-Johann Klasek <jk@auto.tuwien.ac.at>
-John Bley <jbb6@acpub.duke.edu>
-John Borwick <jhborwic@unity.ncsu.edu>
-John Cerney <j-cerney1@ti.com>
-John D Groenveld <groenvel@cse.psu.edu>
-John Hasstedt <John.Hasstedt@sunysb.edu>
-John Hughes <john@AtlanTech.COM>
-John L. Allen <allen@grumman.com>
-John Macdonald <jmm@revenge.elegant.com>
-John Nolan <jpnolan@Op.Net>
-John Peacock <jpeacock@rowman.com>
-John Pfuntner <pfuntner@vnet.ibm.com>
-John Rowe
-John Salinas <jsalinas@cray.com>
-John Stoffel <jfs@fluent.com>
-John Tobey <jtobey@john-edwin-tobey.org>
-Jon Orwant <orwant@oreilly.com>
-Jonathan Biggar <jon@sems.com>
-Jonathan D Johnston <jdjohnston2@juno.com>
-Jonathan Fine <jfine@borders.com>
-Jonathan I. Kamens <jik@kamens.brookline.ma.us>
-Jonathan Roy <roy@idle.com>
-Joseph N. Hall <joseph@cscaper.com>
-Joseph S. Myers <jsm28@hermes.cam.ac.uk>
-Joshua Pritikin <joshua.pritikin@db.com>
-Juan Gallego <Little.Boss@physics.mcgill.ca>
-Julian Yip <julian@imoney.com>
-Justin Banks <justinb@cray.com>
-Ka-Ping Yee <kpyee@aw.sgi.com>
-Karl Glazebrook <kgb@aaossz.aao.GOV.AU>
-Karl Heuer <kwzh@gnu.org>
-Karl Simon Berg <karl@it.kth.se>
-Karsten Sperling <spiff@phreax.net>
-Kaveh Ghazi <ghazi@caip.rutgers.edu>
-Keith Neufeld <neufeld@fast.pvi.org>
-Keith Thompson <kst@cts.com>
-Ken Estes <estes@ms.com>
-Ken Fox <kfox@ford.com>
-Ken MacLeod <ken@bitsko.slc.ut.us>
-Ken Shan <ken@digitas.harvard.edu>
-Kenneth Albanowski <kjahds@kjahds.com>
-Kenneth Duda <kjd@cisco.com>
-Keong Lim <Keong.Lim@sr.com.au>
-Kevin O'Gorman <kevin.kosman@nrc.com>
-Kevin White <klwhite@magnus.acs.ohio-state.edu>
-Kim Frutiger
-Kragen Sitaker <kragen@dnaco.net>
-Krishna Sethuraman <krishna@sgi.com>
-Kurt D. Starsinic <kstar@smithrenaud.com>
-Kyriakos Georgiou
-Larry Parmelee <parmelee@CS.Cornell.EDU>
-Larry Schuler
-Larry Schwimmer <rosebud@cyclone.Stanford.EDU>
-Larry W. Virden <lvirden@cas.org>
-Larry Wall <larry@wall.org>
-Lars Hecking <lhecking@nmrc.ucc.ie>
-Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
-Len Johnson <lenjay@ibm.net>
-Les Peters <lpeters@aol.net>
-Lincoln D. Stein <lstein@cshl.org>
-Lionel Cons <lionel.cons@cern.ch>
-Luca Fini
-Lupe Christoph <lupe@lupe-christoph.de>
-Luther Huffman <lutherh@stratcom.com>
-M. J. T. Guy <mjtg@cam.ac.uk>
-Major Sébastien <sebastien.major@crdp.ac-caen.fr>
-Makoto MATSUSHITA <matusita@ics.es.osaka-u.ac.jp>
-Malcolm Beattie <mbeattie@sable.ox.ac.uk>
-Marc Lehmann <pcg@goof.com>
-Marc Paquette <Marc.Paquette@Softimage.COM>
-Marcel Grunauer <marcel@codewerk.com>
-Mark A Biggar <mab@wdl.loral.com>
-Mark Bixby <mark@bixby.org>
-Mark Dickinson <dickins3@fas.harvard.edu>
-Mark Hanson
-Mark K Trettin <mkt@lucent.com>
-Mark Kaehny <kaehny@execpc.com>
-Mark Kettenis <kettenis@wins.uva.nl>
-Mark Klein <mklein@dis.com>
-Mark Knutsen <knutsen@pilot.njin.net>
-Mark Kvale <kvale@phy.ucsf.edu>
-Mark Leighton Fisher <fisherm@tce.com>
-Mark Murray <mark@grondar.za>
-Mark P. Lutz <mark.p.lutz@boeing.com>
-Mark Pease <peasem@primenet.com>
-Mark Pizzolato <mark@infocomm.com>
-Mark R. Levinson <mrl@isc.upenn.edu>
-Mark-Jason Dominus <mjd@plover.com>
-Martijn Koster <mak@excitecorp.com>
-Martin J. Bligh <mbligh@sequent.com>
-Martin Jost <Martin.Jost@icn.siemens.de>
-Martin Lichtin <lichtin@bivio.com>
-Martin Plechsmid <plechsmi@karlin.mff.cuni.cz>
-Marty Lucich <marty@netcom.com>
-Martyn Pearce <martyn@inpharmatica.co.uk>
-Masahiro KAJIURA <masahiro.kajiura@toshiba.co.jp>
-Mathias Koerber <mathias@dnssec1.singnet.com.sg>
-Matt Kimball
-Matthew Black <black@csulb.edu>
-Matthew Green <mrg@splode.eterna.com.au>
-Matthew T Harden <mthard@mthard1.monsanto.com>
-Matthias Ulrich Neeracher <neeri@iis.ee.ethz.ch>
-Matthias Urlichs <smurf@noris.net>
-Maurizio Loreti <maurizio.loreti@pd.infn.it>
-Michael Cook <mcook@cognex.com>
-Michael De La Rue <mikedlr@tardis.ed.ac.uk>
-Michael Engel <engel@nms1.cc.huji.ac.il>
-Michael G Schwern <schwern@pobox.com>
-Michael H. Moran <mhm@austin.ibm.com>
-Michael Mahan <mahanm@nextwork.rose-hulman.edu>
-Michael Stevens <mstevens@globnix.org>
-Michele Sardo
-Mik Firestone <fireston@lexmark.com>
-Mike Fletcher <fletch@phydeaux.org>
-Mike Hopkirk <hops@sco.com>
-Mike Rogers
-Mike Stok <mike@stok.co.uk>
-Mike W Ellwood <mwe@rl.ac.uk>
-Milton Hankins <webtools@uewrhp03.msd.ray.com>
-Milton L. Hankins <mlh@swl.msd.ray.com>
-Molnar Laszlo <molnarl@cdata.tvnet.hu>
-Murray Nesbitt <mjn@pathcom.com>
-Nathan Kurz <nate@valleytel.net>
-Nathan Torkington <gnat@frii.com>
-Neale Ferguson <neale@VMA.TABNSW.COM.AU>
-Neil Bowers <neilb@cre.canon.co.uk>
-Nicholas Clark <nick@ccl4.org>
-Nick Duffek
-Nick Gianniotis
-Nick Ing-Simmons <nick@ing-simmons.net>
-Norbert Pueschel <pueschel@imsdd.meb.uni-bonn.de>
-Norton T. Allen <allen@huarp.harvard.edu>
-Olaf Flebbe <o.flebbe@science-computing.de>
-Olaf Titz <olaf@bigred.inka.de>
-Ollivier Robert <roberto@keltia.freenix.fr>
-Owen Taylor <owt1@cornell.edu>
-Patrick Hayes <Patrick.Hayes.CAP_SESA@renault.fr>
-Patrick O'Brien <pdo@cs.umd.edu>
-Paul A Sand <pas@unh.edu>
-Paul David Fardy <pdf@morgan.ucs.mun.ca>
-Paul Green <Paul_Green@stratus.com>
-Paul Hoffman <phoffman@proper.com>
-Paul Holser <Paul.Holser.pholser@nortelnetworks.com>
-Paul Johnson <paul@pjcj.net>
-Paul Marquess <Paul.Marquess@btinternet.com>
-Paul Moore <Paul.Moore@uk.origin-it.com>
-Paul Rogers <Paul.Rogers@Central.Sun.COM>
-Paul Saab <ps@yahoo-inc.com>
-Paul Schinder <schinder@pobox.com>
-Pete Peterson <petersonp@genrad.com>
-Peter Chines <pchines@nhgri.nih.gov>
-Peter Gordon <peter@valor.com>
-Peter Haworth <pmh@edison.ioppublishing.com>
-Peter J. Farley III <pjfarley@banet.net>
-Peter Jaspers-Fayer
-Peter Prymmer <pvhp@forte.com>
-Peter Scott <Peter@PSDT.com>
-Peter Wolfe <wolfe@teloseng.com>
-Peter van Heusden <pvh@junior.uwc.ac.za>
-Petter Reinholdtsen <pere@hungry.com>
-Phil Lobbes <phil@finchcomputer.com>
-Philip Hazel <ph10@cus.cam.ac.uk>
-Philip Newton <pne@cpan.org>
-Piers Cawley <pdcawley@bofh.org.uk>
-Piotr Klaban <makler@oryl.man.torun.pl>
-Prymmer/Kahn <pvhp@best.com>
-Quentin Fennessy <quentin@arrakeen.amd.com>
-Radu Greab <radu@netsoft.ro>
-Ralf S. Engelschall <rse@engelschall.com>
-Randal L. Schwartz <merlyn@stonehenge.com>
-Randy J. Ray <rjray@redhat.com>
-Raphael Manfredi <Raphael.Manfredi@pobox.com>
-Raymund Will <ray@caldera.de>
-Rex Dieter <rdieter@math.unl.edu>
-Rich Morin <rdm@cfcl.com>
-Rich Salz <rsalz@bbn.com>
-Richard A. Wells <Rwells@uhs.harvard.edu>
-Richard Foley <Richard.Foley@m.dasa.de>
-Richard L. England <richard_england@mentorg.com>
-Richard L. Maus, Jr. <rmaus@monmouth.com>
-Richard Soderberg <rs@crystalflame.net>
-Richard Yeh <rcyeh@cco.caltech.edu>
-Rick Delaney <rick@consumercontact.com>
-Rick Pluta
-Rickard Westman
-Rob Henderson <robh@cs.indiana.edu>
-Robert Partington <rjp@riffraff.plig.net>
-Robert Sanders <Robert.Sanders@linux.org>
-Robert Spier <rspier@pobox.com>
-Robin Barker <rmb1@cise.npl.co.uk>
-Robin Houston <robin@kitsite.com>
-Rocco Caputo <troc@netrus.net>
-Roderick Schertler <roderick@argon.org>
-Rodger Anderson <rodger@boi.hp.com>
-Ronald F. Guilmette <rfg@monkeys.com>
-Ronald J. Kimball <rjk@linguist.dartmouth.edu>
-Ruben Schattevoy <schattev@imb-jena.de>
-Rujith S. de Silva <desilva@netbox.com>
-Russ Allbery <rra@stanford.edu>
-Russell Fulton <russell@ccu1.auckland.ac.nz>
-Russell Mosemann
-Ryan Herbert <rherbert@sycamorehq.com>
-SAKAI Kiyotaka <ksakai@netwk.ntt-at.co.jp>
-Samuli Kärkkäinen <skarkkai@woods.iki.fi>
-Scott Gifford <sgifford@tir.com>
-Scott Henry <scotth@sgi.com>
-Sean Robinson <robinson_s@sc.maricopa.edu>
-Sean Sheedy <seans@ncube.com>
-Sebastien Barre <Sebastien.Barre@utc.fr>
-Shigeya Suzuki <shigeya@foretune.co.jp>
-Shimpei Yamashita <shimpei@socrates.patnet.caltech.edu>
-Shishir Gundavaram <shishir@ruby.ora.com>
-Simon Cozens <simon@cozens.net>
-Simon Leinen
-Simon Parsons <S.Parsons@ftel.co.uk>
-Slaven Rezic <eserte@cs.tu-berlin.de>
-Spider Boardman <spider@orb.nashua.nh.us>
-Stephane Payrard <stef@francenet.fr>
-Stephanie Beals <bealzy@us.ibm.com>
-Stephen McCamant <alias@mcs.com>
-Stephen O. Lidie <lusol@turkey.cc.Lehigh.EDU>
-Stephen P. Potter <spp@ds.net>
-Stephen Zander <gibreel@pobox.com>
-Steve A Fink <sfink@cs.berkeley.edu>
-Steve Kelem <steve.kelem@xilinx.com>
-Steve McDougall <swmcd@world.std.com>
-Steve Nielsen <spn@enteract.com>
-Steve Pearlmutter
-Steve Vinoski
-Steven Hirsch <hirschs@btv.ibm.com>
-Steven Knight <knight@theopera.baldmt.citilink.com>
-Steven Morlock <newspost@morlock.net>
-Steven N. Hirsch <hirschs@stargate.btv.ibm.com>
-Steven Parkes <parkes@sierravista.com>
-Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
-SynaptiCAD, Inc. <sales@syncad.com>
-Taro KAWAGISHI
-Ted Ashton <ashted@southern.edu>
-Ted Law <tedlaw@cibcwg.com>
-Teun Burgers <burgers@ecn.nl>
-Thad Floryan <thad@thadlabs.com>
-Thomas Bowditch <bowditch@inmet.com>
-Thomas Conté <tom@fr.uu.net>
-Thomas Dorner <Thomas.Dorner@start.de>
-Thomas Kofler
-Thomas König
-Tim Adye <T.J.Adye@rl.ac.uk>
-Tim Ayers <tayers@bridge.com>
-Tim Bunce <Tim.Bunce@ig.co.uk>
-Tim Conrow <tim@spindrift.srl.caltech.edu>
-Tim Freeman <tfreeman@infoseek.com>
-Tim Jenness <t.jenness@jach.hawaii.edu>
-Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>
-Tim Witham <twitham@pcocd2.intel.com>
-Timur I. Bakeyev <bsdi@listserv.bat.ru>
-Tkil <tkil@reptile.scrye.com>
-Todd C. Miller <Todd.Miller@courtesan.com>
-Tom Bates <tom_bates@att.net>
-Tom Christiansen <tchrist@perl.com>
-Tom Horsley <Tom.Horsley@mail.ccur.com>
-Tom Hughes <tom@compton.nu>
-Tom Phoenix <rootbeer@teleport.com>
-Tom Spindler <dogcow@isi.net>
-Tony Camas
-Tony Cook <tony@develop-help.com>
-Tony Sanders <sanders@bsdi.com>
-Tor Lillqvist <tml@hemuli.tte.vtt.fi>
-Trevor Blackwell <tlb@viaweb.com>
-Tuomas J. Lukka <tjl@lukka.student.harvard.edu>
-Tye McQueen <tye@metronet.com>
-Ulrich Kunitz <kunitz@mai-koeln.com>
-Ulrich Pfeifer <pfeifer@wait.de>
-Vadim Konovalov <vkonovalov@lucent.com>
-Valeriy E. Ushakov <uwe@ptc.spbu.ru>
-Vishal Bhatia <vishal@deja.com>
-Vlad Harchev <hvv@hippo.ru>
-Vladimir Alexiev <vladimir@cs.ualberta.ca>
-W. Phillip Moore <wpm@ms.com>
-Warren Hyde <whyde@pezz.sps.mot.com>
-Warren Jones <wjones@tc.fluke.com>
-Wayne Berke <berke@panix.com>
-Wayne Scott <wscott@ichips.intel.com>
-Wayne Thompson <Wayne.Thompson@Ebay.sun.com>
-Wilfredo Sánchez <wsanchez@apple.com>
-William J. Middleton <William.Middleton@oslo.mobil.telenor.no>
-William Mann <wmann@avici.com>
-William R Ward <hermit@BayView.COM>
-William Setzer <William_Setzer@ncsu.edu>
-Winfried König <win@in.rhein-main.de>
-Wolfgang Laun <Wolfgang.Laun@alcatel.at>
-Yary Hluchan
-Yasushi Nakajima <sey@jkc.co.jp>
-Yitzchak Scott-Thoennes <sthoenna@efn.org>
-Yutaka OIWA <oiwa@is.s.u-tokyo.ac.jp>
-Yutao Feng
-Zachary Miller <zcmiller@simon.er.usgs.gov>
diff --git a/contrib/perl5/Artistic b/contrib/perl5/Artistic
deleted file mode 100644
index 5f22124..0000000
--- a/contrib/perl5/Artistic
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
- The "Artistic License"
-
- Preamble
-
-The intent of this document is to state the conditions under which a
-Package may be copied, such that the Copyright Holder maintains some
-semblance of artistic control over the development of the package,
-while giving the users of the package the right to use and distribute
-the Package in a more-or-less customary fashion, plus the right to make
-reasonable modifications.
-
-Definitions:
-
- "Package" refers to the collection of files distributed by the
- Copyright Holder, and derivatives of that collection of files
- created through textual modification.
-
- "Standard Version" refers to such a Package if it has not been
- modified, or has been modified in accordance with the wishes
- of the Copyright Holder as specified below.
-
- "Copyright Holder" is whoever is named in the copyright or
- copyrights for the package.
-
- "You" is you, if you're thinking about copying or distributing
- this Package.
-
- "Reasonable copying fee" is whatever you can justify on the
- basis of media cost, duplication charges, time of people involved,
- and so on. (You will not be required to justify it to the
- Copyright Holder, but only to the computing community at large
- as a market that must bear the fee.)
-
- "Freely Available" means that no fee is charged for the item
- itself, though there may be fees involved in handling the item.
- It also means that recipients of the item may redistribute it
- under the same conditions they received it.
-
-1. You may make and give away verbatim copies of the source form of the
-Standard Version of this Package without restriction, provided that you
-duplicate all of the original copyright notices and associated disclaimers.
-
-2. You may apply bug fixes, portability fixes and other modifications
-derived from the Public Domain or from the Copyright Holder. A Package
-modified in such a way shall still be considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided
-that you insert a prominent notice in each changed file stating how and
-when you changed that file, and provided that you do at least ONE of the
-following:
-
- a) place your modifications in the Public Domain or otherwise make them
- Freely Available, such as by posting said modifications to Usenet or
- an equivalent medium, or placing the modifications on a major archive
- site such as uunet.uu.net, or by allowing the Copyright Holder to include
- your modifications in the Standard Version of the Package.
-
- b) use the modified Package only within your corporation or organization.
-
- c) rename any non-standard executables so the names do not conflict
- with standard executables, which must also be provided, and provide
- a separate manual page for each non-standard executable that clearly
- documents how it differs from the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
-4. You may distribute the programs of this Package in object code or
-executable form, provided that you do at least ONE of the following:
-
- a) distribute a Standard Version of the executables and library files,
- together with instructions (in the manual page or equivalent) on where
- to get the Standard Version.
-
- b) accompany the distribution with the machine-readable source of
- the Package with your modifications.
-
- c) give non-standard executables non-standard names, and clearly
- document the differences in manual pages (or equivalent), together
- with instructions on where to get the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
-5. You may charge a reasonable copying fee for any distribution of this
-Package. You may charge any fee you choose for support of this
-Package. You may not charge a fee for this Package itself. However,
-you may distribute this Package in aggregate with other (possibly
-commercial) programs as part of a larger (possibly commercial) software
-distribution provided that you do not advertise this Package as a
-product of your own. You may embed this Package's interpreter within
-an executable of yours (by linking); this shall be construed as a mere
-form of aggregation, provided that the complete Standard Version of the
-interpreter is so embedded.
-
-6. The scripts and library files supplied as input to or produced as
-output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whoever generated
-them, and may be sold commercially, and may be aggregated with this
-Package. If such scripts or library files are aggregated with this
-Package via the so-called "undump" or "unexec" methods of producing a
-binary executable image, then distribution of such an image shall
-neither be construed as a distribution of this Package nor shall it
-fall under the restrictions of Paragraphs 3 and 4, provided that you do
-not represent such an executable image as a Standard Version of this
-Package.
-
-7. C subroutines (or comparably compiled subroutines in other
-languages) supplied by you and linked into this Package in order to
-emulate subroutines and variables of the language defined by this
-Package shall not be considered part of this Package, but are the
-equivalent of input as in Paragraph 6, provided these subroutines do
-not change the language in any way that would cause it to fail the
-regression tests for the language.
-
-8. Aggregation of this Package with a commercial distribution is always
-permitted provided that the use of this Package is embedded; that is,
-when no overt attempt is made to make this Package's interfaces visible
-to the end user of the commercial distribution. Such use shall not be
-construed as a distribution of this Package.
-
-9. The name of the Copyright Holder may not be used to endorse or promote
-products derived from this software without specific prior written permission.
-
-10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
- The End
diff --git a/contrib/perl5/Changes b/contrib/perl5/Changes
deleted file mode 100644
index 725d291..0000000
--- a/contrib/perl5/Changes
+++ /dev/null
@@ -1,34679 +0,0 @@
-Please note: This file provides a complete, temporally ordered log of
-changes that went into every version of Perl. If you'd like more
-detailed information, please consult the comments in the individual
-patches posted to the perl5-porters mailing list. Patches for each
-individual change may also be obtained through ftp and rsync--see
-perlhack.pod for the details.
-
-[The "CAST AND CREW" list has been moved to AUTHORS.]
-
-NOTE: Each change entry shows the change number; who checked it into the
-repository; when; description of the change; which branch the change
-happened in; and the affected files. The file lists have a short symbolic
-indicator:
-
- ! modified
- + added
- - deleted
- +> branched (from elsewhere)
- !> merged changes (from elsewhere)
-
-The Message-Ids in the change entries refer to the email messages sent
-to the perl5-porters mailing list. You can retrieve the messages for
-example from http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
-
-This file contains only changes that affect the maint-5.6 branch.
-Cross-references to changes imported from other branches (principally,
-the mainline) are indicated by change numbers. Detailed log entries
-corresponding to these change numbers are available in the Changes
-file in the latest development release.
-
-
---------------
-Version v5.6.1
---------------
-
-____________________________________________________________________________
-[ 9651] By: gsar on 2001/04/09 03:11:19
- Log: update Changes, patchlevel.h &c.
- Branch: maint-5.6/perl
- ! Changes patchlevel.h pod/perldelta.pod pod/perlhist.pod
- ! pod/perltoc.pod
-____________________________________________________________________________
-[ 9649] By: gsar on 2001/04/09 02:35:43
- Log: tweak perldelta as suggested by Jarkko
- Branch: maint-5.6/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 9646] By: gsar on 2001/04/09 00:48:04
- Log: add note about ithreads and Thread.pm (too many people are
- confused by the fact that Thread.pm is built and installed
- under non-5005threads but doesn't work)
- Branch: maint-5.6/perl
- ! ext/Thread/Thread.pm ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 9645] By: gsar on 2001/04/09 00:19:03
- Log: update perldelta.pod for changes in 5.6.1
- Branch: maint-5.6/perl
- ! Changes pod/perldelta.pod
-____________________________________________________________________________
-[ 9640] By: gsar on 2001/04/08 19:20:46
- Log: integrate change#9634 from mainline
-
- Fix the perlmodlib generation (didn't understand separate .pod
- files; didn't understand -- as the name-thing separator).
- Update the CPAN mirrors list.
- Branch: maint-5.6/perl
- ! pod/perlmodlib.pod
- !> pod/perlmodlib.PL
-____________________________________________________________________________
-[ 9639] By: gsar on 2001/04/08 18:57:31
- Log: on windows, many of the README.* pods were being copied to the wrong
- location
- Branch: maint-5.6/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 9638] By: gsar on 2001/04/08 18:38:25
- Log: update to latest JPL from the anoncvs repository
- Branch: maint-5.6/perl
- + jpl/ChangeLog jpl/README.JUST-JNI jpl/docs/Tutorial.pod
- ! MANIFEST jpl/JNI/JNI.pm jpl/JNI/JNI.xs jpl/JNI/Makefile.PL
- ! jpl/PerlInterpreter/PerlInterpreter.h jpl/README
-____________________________________________________________________________
-[ 9632] By: gsar on 2001/04/08 16:36:06
- Log: add $Tie::RefHash::VERSION
- Branch: maint-5.6/perl
- ! lib/Tie/RefHash.pm
-____________________________________________________________________________
-[ 9624] By: gsar on 2001/04/08 06:08:17
- Log: test in t/pod/* were busted
-
- these tests are still not enabled in t/{harness,TEST}
- Branch: maint-5.6/perl
- ! lib/Pod/Find.pm t/pod/emptycmd.t t/pod/find.t t/pod/for.t
- ! t/pod/headings.t t/pod/include.t t/pod/included.t t/pod/lref.t
- ! t/pod/multiline_items.t t/pod/nested_items.t
- ! t/pod/nested_seqs.t t/pod/oneline_cmds.t t/pod/pod2usage.t
- ! t/pod/poderrs.t t/pod/podselect.t t/pod/special_seqs.t
-____________________________________________________________________________
-[ 9623] By: gsar on 2001/04/08 03:37:01
- Log: integrate change#9470 from mainline
-
- Subject: Re: [ID 20010215.006] Bad arg length for Socket::unpack_sockaddr_un, length is 14 ...
- Branch: maint-5.6/perl
- !> ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 9605] By: gsar on 2001/04/07 11:52:40
- Log: can't optimize away scope entry if tr/// is present
- Branch: maint-5.6/perl
- ! op.c t/op/tr.t
-____________________________________________________________________________
-[ 9597] By: gsar on 2001/04/06 18:06:35
- Log: integrate change#9464 from mainline (addendum to change#8313)
-
- Subject: [PATCH @9452] Better peep()ing for foreach() loops
- Branch: maint-5.6/perl
- !> op.c
-____________________________________________________________________________
-[ 9595] By: gsar on 2001/04/06 14:57:17
- Log: add a low-impact fix to accomodate darwin-ism
- Branch: maint-5.6/perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 9594] By: jhi on 2001/04/06 14:55:14
- Log: Integrate changes #9528,9593 from mainline into maintperl;
- tweaking the editor/IDE/shell list.
- Branch: maint-5.6/perl
- !> pod/perlfaq3.pod
-____________________________________________________________________________
-[ 9592] By: gsar on 2001/04/06 14:45:18
- Log: integrate change#9477 from mainline (base.pm doc tweak)
-
- missing doc entry for fmod()
- Branch: maint-5.6/perl
- ! lib/Math/BigFloat.pm
- !> lib/base.pm
-____________________________________________________________________________
-[ 9587] By: gsar on 2001/04/06 07:31:30
- Log: add README.macos (from Chris Nandor)
-
- tyop in change#9555
- Branch: maint-5.6/perl
- + README.macos
- ! MANIFEST pod/buildtoc.PL pod/perl.pod pod/perlfaq9.pod
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 9586] By: gsar on 2001/04/06 07:08:54
- Log: fixes for Math::BigFloat bugs; add fmod() (from John Peacock)
- Branch: maint-5.6/perl
- ! lib/Math/BigFloat.pm t/lib/bigfltpm.t
-____________________________________________________________________________
-[ 9585] By: gsar on 2001/04/06 06:58:44
- Log: integrate changes#9555,9556,9563..9567,9570..9575,9577..9578
- from mainline
-
- Subject: [PATCH] Base64 update to perlfaq9.pod
-
- Subject: [PATCH AUTHORS] Housekeeping
-
- Subject: Re: Not OK: perl v5.6.1 +fools-gold on darwin 1.3 (UNINSTALLED)
- Mac OS X (Darwin) has extra pwent fields.
-
- Subject: [PATCH B::*] print control-character vars readably
- Needs EBCDICification.
-
- Subject: [PATCH B::Deparse] lexical variables with ridiculously long names that are used in list assignments
-
- Subject: [PATCH B::*] cope with SVf_IVisUV, and cope with $^^ and friends
-
- Subject: [PATCH B::Deparse] "${foo}bar", "${foo}[1]" etc.
-
- Subject: [PATCH B::Deparse] binmode is no longer an UNOP
-
- Subject: [PATCH B::Deparse] regex quoting, and a minor milestone
-
- Subject: [PATCH B::Deparse] suppress "unintialized value" warnings
-
- Subject: bleadperl / hex ignores variable length and/or tr doesn't null terminate ( with patch)
-
- Subject: patch for t/op/oct.t that shows need for patch supplied with bug 20010404.009, (bugs in hex and oct)
-
- FreeBSD hints tweak from Anton Berezin.
-
- Subject: [PATCH foolperl & bleadperl] README.vms update
-
- Subject: Re: [PATCH foolperl & bleadperl] README.vms update
- Branch: maint-5.6/perl
- !> AUTHORS README.vms ext/B/B.pm ext/B/B/Concise.pm
- !> ext/B/B/Debug.pm ext/B/B/Deparse.pm ext/B/B/Terse.pm
- !> hints/freebsd.sh pod/perlfaq9.pod pp.c t/op/oct.t t/op/pwent.t
-____________________________________________________________________________
-[ 9584] By: gsar on 2001/04/06 04:09:00
- Log: keep eval"" CVs alive until the end of the statement in which
- they're called; this avoids a coredump ensuing from search for
- lexicals in code such as:
-
- sub bug {
- my $s = @_;
- eval q[sub { eval 'sub { &$s }' }];
- }
- bug("x")->()->();
-
- this code still doesn't work as intended (as it has remained
- since time immemorial), but it doesn't provoke a coredump anymore
- Branch: maint-5.6/perl
- ! embed.h embed.pl global.sym objXSUB.h perlapi.c
- ! pod/perlguts.pod pp_ctl.c proto.h scope.c scope.h sv.c
-____________________________________________________________________________
-[ 9551] By: gsar on 2001/04/05 00:18:34
- Log: tr/// doesn't null-terminate the result in some situations
- (from Gisle Aas)
- Branch: maint-5.6/perl
- ! doop.c t/op/tr.t
-____________________________________________________________________________
-[ 9550] By: gsar on 2001/04/04 20:04:17
- Log: B::Deparse fix for ${^FOO} and documentation for PVX() method
- (from Robin Houston)
- Branch: maint-5.6/perl
- ! ext/B/B.pm ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 9548] By: gsar on 2001/04/04 18:51:49
- Log: integrate changes#9460,9462,9482,9521,9522
-
- Subject: PATCH: B::Debug should show LOOP-specific fields
-
- Subject: B::Deparse precedence bug. (Patch included.)
-
- Subject: Re: [ID 20010330.003] O=Deparse,-p does not preserve "operational semantics"
-
- Subject: [PATCH B::Concise] @stash_array = split(/pat/, str);
-
- Subject: [PATCH B::Concise] padname values may have bogus SvCUR
- Branch: maint-5.6/perl
- !> ext/B/B.pm ext/B/B.xs ext/B/B/Concise.pm ext/B/B/Debug.pm
- !> ext/B/B/Deparse.pm ext/B/B/Showlex.pm
-____________________________________________________________________________
-[ 9547] By: gsar on 2001/04/04 18:49:16
- Log: s/djSP/dSP/
- Branch: maint-5.6/perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 9545] By: gsar on 2001/04/04 18:38:52
- Log: integrate change#8837 from mainline
-
- Subject: [patch] -Wall cleanup round 2
- Branch: maint-5.6/perl
- !> ext/B/B.xs ext/Data/Dumper/Dumper.xs ext/Devel/DProf/DProf.xs
- !> ext/Devel/Peek/Peek.xs ext/Fcntl/Fcntl.xs
- !> ext/File/Glob/Glob.xs ext/GDBM_File/GDBM_File.xs ext/IO/IO.xs
- !> ext/IPC/SysV/SysV.xs ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs
- !> ext/SDBM_File/SDBM_File.xs
-____________________________________________________________________________
-[ 9544] By: gsar on 2001/04/04 17:49:57
- Log: "double" should be "NV"; standard typemap is missing entry
- for NV
- Branch: maint-5.6/perl
- ! ext/B/B.xs ext/B/B/C.pm lib/ExtUtils/typemap
-____________________________________________________________________________
-[ 9539] By: gsar on 2001/04/04 03:01:14
- Log: another tweak needed for SunOS 4.1.x build (from Mike Guy)
- Branch: maint-5.6/perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 9538] By: gsar on 2001/04/04 01:00:38
- Log: fflush() is a macro on SunOS 4.1.x, so provide a wrapper
- for use with _fwalk() (fix for change#7705)
- Branch: maint-5.6/perl
- ! util.c
-____________________________________________________________________________
-[ 9533] By: gsar on 2001/04/03 14:30:07
- Log: better fix for change#9517 to accomodate UNC paths like
- \\server\share\foo, and paths with trailing backslash
- like c:\this\
- Branch: maint-5.6/perl
- ! utils/perldoc.PL x2p/find2perl.PL x2p/s2p.PL
-____________________________________________________________________________
-[ 9530] By: gsar on 2001/04/03 04:56:41
- Log: accomodate VMS "mailbox overflow" quirk in testsuite (from
- Craig Berry)
- Branch: maint-5.6/perl
- ! t/lib/socket.t
-____________________________________________________________________________
-[ 9524] By: gsar on 2001/04/03 01:09:12
- Log: EPOC fix for lib/io_udp.t failure (from Olaf Flebbe)
- Branch: maint-5.6/perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 9517] By: gsar on 2001/04/02 19:52:21
- Log: many of the utilities interpolate literal paths within doublequotes
- (fails on dosish platforms where path contains backslashes)
- Branch: maint-5.6/perl
- ! utils/perldoc.PL x2p/find2perl.PL x2p/s2p.PL
-____________________________________________________________________________
-[ 9516] By: gsar on 2001/04/02 05:49:37
- Log: a foolish release
- Branch: maint-5.6/perl
- ! Changes patchlevel.h pod/perldelta.pod pod/perlhist.pod
- ! pod/perltoc.pod
-____________________________________________________________________________
-[ 9515] By: gsar on 2001/04/02 05:04:29
- Log: add missing changelog summaries
- Branch: maint-5.6/perl
- ! Changes
-____________________________________________________________________________
-[ 9514] By: gsar on 2001/04/02 04:07:13
- Log: add some notes about gutsy threading matters
- Branch: maint-5.6/perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 9513] By: gsar on 2001/04/02 03:25:21
- Log: add more prominent caveat notices about experimental features
- Branch: maint-5.6/perl
- ! pod/perlfork.pod pod/perlunicode.pod
-____________________________________________________________________________
-[ 9512] By: gsar on 2001/04/02 02:54:33
- Log: integrate changes#9479,9509 from mainline
-
- [PATCH] File::Glob stuff for Mac OS
-
- [PATH bsd_glob.c perl@9472] Shut up gcc warning in bsd_glob.c
- Branch: maint-5.6/perl
- !> ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c
- !> t/lib/glob-basic.t t/lib/glob-case.t t/lib/glob-global.t
- !> t/lib/glob-taint.t
-____________________________________________________________________________
-[ 9511] By: gsar on 2001/04/02 02:38:24
- Log: README.win32 tweaks; add a note about alternative location for
- getting a gcc-2.95.2 that will build perl properly on windows
- Branch: maint-5.6/perl
- ! README.win32
-____________________________________________________________________________
-[ 9507] By: jhi on 2001/04/01 19:24:01
- Log: Integrate changes #9378,9458,9469,9475,9489,9490,9505,9506
- from mainline to maintperl: pod tweaks.
- Branch: maint-5.6/perl
- !> pod/perldebug.pod pod/perldiag.pod pod/perlfaq1.pod
- !> pod/perlguts.pod pod/perlhack.pod pod/perlop.pod
- !> pod/perlvar.pod
-____________________________________________________________________________
-[ 9501] By: gsar on 2001/04/01 07:21:57
- Log: fix the perlembed notes on multiple interpreters
-
- fix ExtUtils::Embed to work passably on Windows
- Branch: maint-5.6/perl
- ! lib/ExtUtils/Embed.pm pod/perlembed.pod
-____________________________________________________________________________
-[ 9496] By: gsar on 2001/03/31 23:22:28
- Log: various nits identified by the Borland 5.5 compiler; remove suppression
- of a few warnings
- Branch: maint-5.6/perl
- ! ext/File/Glob/bsd_glob.c sv.c win32/win32.h
-____________________________________________________________________________
-[ 9495] By: gsar on 2001/03/31 21:03:08
- Log: avoid redefinition warnings under Borland 5.02
- Branch: maint-5.6/perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 9494] By: gsar on 2001/03/31 20:18:59
- Log: nits spotted by Borland compiler
- Branch: maint-5.6/perl
- ! utf8.h win32/win32.h
-____________________________________________________________________________
-[ 9493] By: gsar on 2001/03/31 20:18:05
- Log: fix a broken workaround for Borland compiler in change#4739
- (caused weird "short reads" on DATA, which caused op/misc.t to fail)
- Branch: maint-5.6/perl
- ! toke.c
-____________________________________________________________________________
-[ 9491] By: gsar on 2001/03/31 17:01:56
- Log: Cwd::chdir() doesn't set $ENV{PWD} correctly on windows when the
- directory is relative (need to fetch the full path name *before*
- the chdir!)
-
- this is a followup patch for change#6749
- Branch: maint-5.6/perl
- ! lib/Cwd.pm
-____________________________________________________________________________
-[ 9426] By: gsar on 2001/03/29 00:28:04
- Log: dmake can only handle == and != in comparisons; support building
- with Borland's VCL libraries (from Vadim Konovalov)
- Branch: maint-5.6/perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 9416] By: jhi on 2001/03/28 18:06:07
- Log: Integrate change #9409 from mainline to maintperl.
-
- Yet another tweak on AIX dynaloading.
- Branch: maint-5.6/perl
- !> ext/DynaLoader/dl_aix.xs ext/DynaLoader/hints/aix.pl
-____________________________________________________________________________
-[ 9415] By: gsar on 2001/03/28 17:13:01
- Log: integrate changes#9377,9385,9401 from mainline
-
- Subject: RE: 5.6.0 BUG: Lexical warnings aren't lexical
-
- If directory entries compare equal case-insensitively,
- retry case-sensitively.
-
- Subject: [PATCH] B::Terse and warnings
- Branch: maint-5.6/perl
- !> ext/B/B.pm ext/B/B/Terse.pm ext/File/Glob/bsd_glob.c gv.c
- !> t/pragma/warn/perl
-____________________________________________________________________________
-[ 9312] By: gsar on 2001/03/23 16:25:25
- Log: add execute bit to files with shebang lines in the repository;
- avoid clobbering execute bit in Porting/makerel
- Branch: maint-5.6/perl
- ! (edit 144 files)
-____________________________________________________________________________
-[ 9306] By: jhi on 2001/03/23 12:51:36
- Log: There are AIXes without /usr/include/load.h,
- patch from H.Merijn Brand.
- Branch: maint-5.6/perl
- ! ext/DynaLoader/hints/aix.pl
-____________________________________________________________________________
-[ 9299] By: gsar on 2001/03/22 16:53:45
- Log: back out changes#7532,7521 for now (appears to have problems
- on IRIX)
- Branch: maint-5.6/perl
- ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
- ! ext/POSIX/typemap pod/perlvar.pod
-____________________________________________________________________________
-[ 9292] By: gsar on 2001/03/22 07:12:00
- Log: integrate changes#8306,8532 from mainline (missing USE_PURE_BISON
- fixes)
- Branch: maint-5.6/perl
- !> embed.h embed.pl objXSUB.h perlapi.c perly.y proto.h toke.c
-____________________________________________________________________________
-[ 9290] By: jhi on 2001/03/22 05:57:01
- Log: Move MacOS Classic higher in the list of supported platforms.
- Branch: maint-5.6/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 9289] By: gsar on 2001/03/22 05:35:04
- Log: revert part of change#6438 for compatibility (av_reify()
- appears to be needed to implement av_splice()ish things
- in XS)
- Branch: maint-5.6/perl
- ! embed.pl global.sym objXSUB.h perlapi.c
-____________________________________________________________________________
-[ 9288] By: gsar on 2001/03/22 03:09:19
- Log: update copyright year
- Branch: maint-5.6/perl
- ! EXTERN.h INTERN.h README av.c av.h cop.h cv.h deb.c doio.c
- ! doop.c dump.c form.h gv.c gv.h handy.h hv.c hv.h mg.c mg.h
- ! op.c op.h perl.c perl.h perlio.c perly.y pp.c pp.h pp_ctl.c
- ! pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c sv.c sv.h
- ! toke.c utf8.c utf8.h util.c util.h x2p/EXTERN.h x2p/INTERN.h
- ! x2p/a2p.c x2p/a2p.h x2p/a2p.y x2p/a2py.c x2p/hash.c x2p/hash.h
- ! x2p/proto.h x2p/str.c x2p/str.h x2p/util.c x2p/util.h
- ! x2p/walk.c
-____________________________________________________________________________
-[ 9286] By: gsar on 2001/03/21 19:49:54
- Log: makefile.mk tweak
- Branch: maint-5.6/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 9283] By: jhi on 2001/03/21 17:17:35
- Log: Integrate change #9282 from mainline into maintperl,
- 4-arg UTF-8 substr().
- Branch: maint-5.6/perl
- !> pp.c
-____________________________________________________________________________
-[ 9281] By: gsar on 2001/03/21 17:03:14
- Log: makefile.mk defaults to GCC, not BORLAND (as mentioned in README.win32)
- Branch: maint-5.6/perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 9280] By: gsar on 2001/03/21 17:01:20
- Log: some tweaks to change#9278 (fork() emulation should be enabled
- by setting BUILD_FLAVOR instead of changing the defaults)
- Branch: maint-5.6/perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 9279] By: gsar on 2001/03/21 16:47:19
- Log: integrate change#9271 from mainline; a tweak to Glob.pm docs
- Branch: maint-5.6/perl
- ! ext/File/Glob/Glob.pm
- !> lib/Cwd.pm
-____________________________________________________________________________
-[ 9278] By: jhi on 2001/03/21 14:35:10
- Log: Subject: [PATCH: 5.6.1-trial3] Borland C++ for Win32 fixes
- From: "Vadim Konovalov" <watman@inbox.ru>
- Date: Wed, 21 Mar 2001 01:53:51 +0300
- Message-ID: <004101c0b190$a749ea20$f7c030d4@vad>
- Branch: maint-5.6/perl
- ! win32/makefile.mk win32/win32sck.c
-____________________________________________________________________________
-[ 9277] By: jhi on 2001/03/21 13:58:28
- Log: Integrate change #9270 from mainline to maintperl:
- continued 4-arg UTF-8 substr() fixing.
- Branch: maint-5.6/perl
- !> pp.c t/op/substr.t
-____________________________________________________________________________
-[ 9266] By: gsar on 2001/03/20 19:16:43
- Log: VMS piping fixes (from Charles Lane)
- Branch: maint-5.6/perl
- ! vms/vms.c vms/vmspipe.com
-____________________________________________________________________________
-[ 9265] By: gsar on 2001/03/20 17:53:52
- Log: cut-n-paste goof in change#9264
- Branch: maint-5.6/perl
- ! ext/File/Glob/Glob.xs
-____________________________________________________________________________
-[ 9264] By: gsar on 2001/03/20 17:43:47
- Log: do alphabetical sorting by default (for csh compatibility);
- bsd_glob() does ASCII sort by default as usual, unless
- GLOB_ALPHASORT was specified
- Branch: maint-5.6/perl
- ! ext/File/Glob/Changes ext/File/Glob/Glob.pm
- ! ext/File/Glob/Glob.xs ext/File/Glob/bsd_glob.c
- ! ext/File/Glob/bsd_glob.h
-____________________________________________________________________________
-[ 9263] By: gsar on 2001/03/20 16:40:08
- Log: integrate change#9255 from mainline (unicode fix)
-
- substr($bytestr, i, n, $charstr)
- Branch: maint-5.6/perl
- !> Todo-5.6 pp.c t/op/substr.t
-____________________________________________________________________________
-[ 9262] By: gsar on 2001/03/20 15:57:41
- Log: revert the leak fix in change#9142 (problem needs a more experimental
- fix unsuitable for 5.6.1)
- Branch: maint-5.6/perl
- ! scope.c
-____________________________________________________________________________
-[ 9260] By: jhi on 2001/03/20 14:05:46
- Log: Subject: [PATCH perl-5.6.1-TRIAL3/run.c] printf warning
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Tue, 20 Mar 2001 10:12:04 GMT
- Message-Id: <200103201012.KAA04738@tempest.npl.co.uk>
- Branch: maint-5.6/perl
- ! run.c
-____________________________________________________________________________
-[ 9259] By: jhi on 2001/03/20 14:04:39
- Log: Subject: [MacPerl-Porters] [PATCH] POSIX, File::Path (Mac OS) for 5.6.1 and 5.7
- From: Chris Nandor <pudge@pobox.com>
- Date: Tue, 20 Mar 2001 00:40:56 -0500
- Message-Id: <p05010401b6dc9d57a62d@[10.0.1.107]>
- Branch: maint-5.6/perl
- ! ext/POSIX/POSIX.xs lib/File/Path.pm
-____________________________________________________________________________
-[ 9256] By: jhi on 2001/03/20 04:43:12
- Log: Subject: [PATCH: 5.6.1-trial3] test fixes and installation cleanliness for OS/390
- From: Peter Prymmer <pvhp@forte.com>
- Date: Mon, 19 Mar 2001 16:43:13 -0800 (PST)
- Message-ID: <Pine.OSF.4.10.10103191627310.162127-100000@aspara.forte.com>
- Branch: maint-5.6/perl
- ! installperl t/comp/proto.t t/comp/require.t t/op/regmesg.t
-____________________________________________________________________________
-[ 9250] By: jhi on 2001/03/19 21:18:00
- Log: A more robust solution for the 64bitall AIX dynaloading
- problem, from Jens-Uwe Mager.
- Branch: maint-5.6/perl
- ! ext/DynaLoader/dl_aix.xs ext/DynaLoader/hints/aix.pl
-____________________________________________________________________________
-[ 9247] By: jhi on 2001/03/19 19:59:53
- Log: 64-bit AIX dynaloading problem (see #9244) idea
- from Jens-Uwe Mager.
- Branch: maint-5.6/perl
- ! ext/DynaLoader/dl_aix.xs
-____________________________________________________________________________
-[ 9245] By: jhi on 2001/03/19 19:05:19
- Log: Integrate change #9243 from mainline into maintperl.
-
- Subject: [PATCH perl-5.6.1-TRIAL3/README.vmesa] bad =item paragraphs
- Branch: maint-5.6/perl
- !> README.vmesa
-____________________________________________________________________________
-[ 9244] By: jhi on 2001/03/19 19:03:15
- Log: Get 64bitall AIX building, but still does not test okay:
- dynaloading anything fails, for example for op/defins:
- Can't load '../lib/auto/File/Glob/Glob.so' for module File::Glob: loadbind: A system call received a parameter that is not valid. at ../lib/XSLoader.pm line 75. at ../lib/File/Glob.pm line 99
- (update: fixed by #9247,9250)
- Branch: maint-5.6/perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 9241] By: gsar on 2001/03/19 17:34:46
- Log: VMSify tests (from Charles Lane)
- Branch: maint-5.6/perl
- ! t/lib/filehand.t t/lib/texttabs.t
-____________________________________________________________________________
-[ 9239] By: gsar on 2001/03/19 09:23:17
- Log: this is 5.6.1-trial3
- Branch: maint-5.6/perl
- ! Changes
-____________________________________________________________________________
-[ 9238] By: gsar on 2001/03/19 08:47:04
- Log: some new symbols are only available under ithreads
- Branch: maint-5.6/perl
- ! makedef.pl
-____________________________________________________________________________
-[ 9237] By: gsar on 2001/03/19 08:42:28
- Log: update patchlevel.h, Changes, &c.
- Branch: maint-5.6/perl
- ! Changes patchlevel.h pod/perlhist.pod
- !> AUTHORS
-____________________________________________________________________________
-[ 9236] By: gsar on 2001/03/19 08:17:49
- Log: integrate changes#8068,8717 from mainline
-
- [PATCH 5.7.0@8047] RE: [ID 20001013.009] DB_File issues warning when setting element to undef
-
- [PATCH CPAN 1.59_51] warning message (not!)
- Branch: maint-5.6/perl
- !> ext/GDBM_File/GDBM_File.pm ext/GDBM_File/typemap
- !> ext/NDBM_File/NDBM_File.pm ext/NDBM_File/typemap
- !> ext/ODBM_File/ODBM_File.pm ext/ODBM_File/typemap
- !> ext/SDBM_File/SDBM_File.pm ext/SDBM_File/typemap lib/CPAN.pm
- !> t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t
-____________________________________________________________________________
-[ 9235] By: gsar on 2001/03/19 08:07:09
- Log: integrate changes#8617,8713,8715,8716,8721,8953,8963 from mainline
-
- [PATCH] Add missing CV flags to dump.c
-
- Re: [patch] Re: PL_ptr_table
-
- Fixup non-ithread build after 8713
-
- Generated files form 8713 etc.
-
- Correct the correction :-(
-
- Documenting coderef @INC (Re: CPAN "make this script work" feature)
-
- Subject: Re: sync sync sync: have I missed any patches?
- Replace djSP with dSP.
- Branch: maint-5.6/perl
- !> cop.h doio.c doop.c dump.c embed.h embed.pl ext/B/B/C.pm
- !> ext/B/B/CC.pm global.sym objXSUB.h perl.c perlapi.c
- !> pod/perlhack.pod pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h
- !> sv.c sv.h win32/perlhost.h
-____________________________________________________________________________
-[ 9234] By: gsar on 2001/03/19 07:22:05
- Log: revert the change#9090 integrate for now (change looks somewhat
- incomplete in that [ha]v_exists() need something similar; lacks
- tests; &c.)
- Branch: maint-5.6/perl
- ! hv.c
-____________________________________________________________________________
-[ 9233] By: gsar on 2001/03/19 07:10:01
- Log: some refcounts were incorrect in perl_clone(); avoid hang in global
- destruction when there are unreferenced scalars (SvREFCNT==0)
- Branch: maint-5.6/perl
- ! sv.c
-____________________________________________________________________________
-[ 9232] By: jhi on 2001/03/19 05:11:02
- Log: Regen api and toc.
- Branch: maint-5.6/perl
- ! pod/perlapi.pod pod/perltoc.pod
-____________________________________________________________________________
-[ 9231] By: jhi on 2001/03/19 04:06:03
- Log: Integrate changes in #9070,9072,9101 from mainline into maintperl,
- add a lost line in pp.c:pp_chop(), update to new op/chop.
-
- Clarify the description differentiating for and while; inspired by
-
- Subject: [ID 20010306.004] || != named unary operator
-
- The $Is_MacOS needs to be declared.
- Branch: maint-5.6/perl
- ! pp.c t/op/chop.t
- !> lib/ExtUtils/Manifest.pm pod/perlop.pod pod/perlsyn.pod
-____________________________________________________________________________
-[ 9230] By: jhi on 2001/03/19 03:48:16
- Log: Integrate changes #7971(perlio),8982,9061,9062,9068,9069,
- 9079,9083,9089,9090,9091 from mainline to maintperl.
-
- Quieten some noise in Win32 builds
-
- Fixes the bugs 20010221.005 and 20010221.008: "the taint checker..."
-
- The perlretut was still talking about the old \p and \P
- definitions.
-
- More tweakage on the Unicode character class descriptions.
-
- Subject: Re: [ID 20010305.012] chop() against list assignment returns char chopped from el zero
-
- Subject: 'no *POSIX' Patch speeding up make on BS2000
-
- Subject: [PATCH] perldata.pod here-doc docs
-
- Add /sbin and /usr/sbin to the list of directories scanned
- for setuid programs. Takes care of bug id 20010309.003.
-
- Subject: Re: [ID 19990808.001] [PATCH] FETCH triggered on exists()
-
- In op/stat #35 better to scan all the potential directories
- for setuids, not just the first one.
- Branch: maint-5.6/perl
- ! Makefile.SH
- !> doio.c hv.c lib/unicode/mktables.PL makedepend.SH perl.h
- !> pod/perldata.pod pod/perlretut.pod pp.c t/op/chop.t
- !> t/op/stat.t toke.c win32/win32.h
-____________________________________________________________________________
-[ 9229] By: jhi on 2001/03/19 02:31:50
- Log: Subject: [MacPerl-Porters] [PATCH] Portability fixes for Mac OS / maint-5.6
- From: Chris Nandor <pudge@pobox.com>
- Date: Sat, 10 Mar 2001 14:22:19 -0500
- Message-Id: <p0501042db6cf0a8d0b63@[10.0.1.177]>
- Branch: maint-5.6/perl
- ! ext/B/defsubs_h.PL ext/DynaLoader/dl_mac.xs
- ! ext/Errno/Errno_pm.PL lib/ExtUtils/Manifest.pm perlsfio.h
- ! t/lib/b.t t/lib/errno.t
-____________________________________________________________________________
-[ 9228] By: jhi on 2001/03/19 02:29:59
- Log: Integrate changes #9113,9122 from mainline into maintperl.
-
- Subject: [PATCH: perl@9092, dist-3.0@70] OS/390 mydomain last gasp before silly guess (was Re: What do I need to build EBCDIC perl?)
- Branch: maint-5.6/perl
- !> Configure README.os390 hints/os390.sh
-____________________________________________________________________________
-[ 9227] By: jhi on 2001/03/19 02:22:35
- Log: Integrate #9115,9121,9128,9163,9171,9174,9175 from mainline
- into maintperl.
-
- Subject: Re: [ID 20010305.005] "use integer" doesn't make rand() return integers
-
- Forgot to check-in the larger part of #9120, duh.
-
- Subject: Another patch for integer.pm POD
-
- h2ph strictness and cleanliness from Kurt Starsinic.
-
- Borland filename case problem.
-
- h2ph strictness and cleanliness from Kurt Starsinic.
-
- Subject: [PATCH] the uncontroversial doc patches
- Branch: maint-5.6/perl
- +> win32/sncfnmcs.pl
- !> MANIFEST README.os2 README.win32 ext/GDBM_File/GDBM_File.pm
- !> ext/GDBM_File/GDBM_File.xs lib/integer.pm
- !> pod/perl5005delta.pod pod/perldebtut.pod pod/perlfunc.pod
- !> pod/perlhack.pod pod/perllexwarn.pod pod/perllocale.pod
- !> pod/perllol.pod pod/perlmod.pod pod/perlmodlib.pod
- !> pod/perlport.pod pod/perlrun.pod pod/perltoc.pod
- !> pod/perlxs.pod pod/perlxstut.pod utils/h2ph.PL
-____________________________________________________________________________
-[ 9226] By: jhi on 2001/03/19 02:10:21
- Log: Integrate changes #9207,9214 from mainline into maintperl.
-
- podchecker relaxations: =over has an *optional* number after it,
- and whitespace in L<> is okay.
- Branch: maint-5.6/perl
- !> lib/Pod/Checker.pm lib/Pod/ParseUtils.pm pod/perlpod.pod
- !> t/pod/poderrs.xr
-____________________________________________________________________________
-[ 9224] By: jhi on 2001/03/19 02:06:11
- Log: Integrate change #9223 from mainline to maintperl.
-
- Document -Dmksymlinks.
- Branch: maint-5.6/perl
- !> INSTALL
-____________________________________________________________________________
-[ 9222] By: jhi on 2001/03/19 01:15:35
- Log: The -Dmksymlinks wasn't working for maintperl.
- Branch: maint-5.6/perl
- ! Configure
-____________________________________________________________________________
-[ 9219] By: gsar on 2001/03/19 00:16:55
- Log: remove duplicated tests
- Branch: maint-5.6/perl
- ! t/op/re_tests
-____________________________________________________________________________
-[ 9208] By: jhi on 2001/03/18 20:12:12
- Log: Integrate changes #8128,9132 from mainline into maintperl,
- Tie::SubstrHash fixes.
- Branch: maint-5.6/perl
- !> lib/Tie/SubstrHash.pm t/lib/tie-substrhash.t
-____________________________________________________________________________
-[ 9197] By: gsar on 2001/03/18 12:15:57
- Log: more thorough cleaning of arenas--keep going until no more
- SvREFCNT_dec()s occur (this fixes the problem that causes the
- pesky "Scalars leaked" warnings)
- Branch: maint-5.6/perl
- ! embed.pl perl.c proto.h sv.c t/op/sort.t
-____________________________________________________________________________
-[ 9168] By: jhi on 2001/03/15 14:13:22
- Log: Integrate changes #9120,9167 from mainline to maintperl.
-
- Subject: [PATCH 5.6.1] OS/2 docs
-
- Subject: [PATCH 5.6.1] perldoc
- Branch: maint-5.6/perl
- !> os2/Changes utils/perldoc.PL
-____________________________________________________________________________
-[ 9162] By: gsar on 2001/03/15 00:56:53
- Log: avoid warnings
- Branch: maint-5.6/perl
- ! t/op/magic.t
-____________________________________________________________________________
-[ 9161] By: gsar on 2001/03/15 00:52:09
- Log: clearing of $ENV{PERL_DESTRUCT_LEVEL} interferes with purify
- results
- Branch: maint-5.6/perl
- ! t/op/magic.t
-____________________________________________________________________________
-[ 9154] By: gsar on 2001/03/14 17:48:18
- Log: PerlIO_stdoutf() wasn't properly supported under PERL_IMPLICIT_SYS
- (caused Storable 1.0.10 to break on windows)
- Branch: maint-5.6/perl
- ! embed.h embed.pl global.sym globals.c iperlsys.h objXSUB.h
- ! perlapi.c proto.h
-____________________________________________________________________________
-[ 9152] By: gsar on 2001/03/14 07:29:40
- Log: back out changes#9012,9010,9009 and parts of change#9016
- (causes ABRs under purify, and some prerequisites don't
- seem to be there in 5.6.x)
- Branch: maint-5.6/perl
- ! doop.c op.c t/op/tr.t toke.c
-____________________________________________________________________________
-[ 9142] By: gsar on 2001/03/14 03:20:48
- Log: fix another memory leak reported by purify (tie callbacks that
- croak can leak when wiping out magic)
- Branch: maint-5.6/perl
- ! scope.c
-____________________________________________________________________________
-[ 9138] By: gsar on 2001/03/14 01:18:00
- Log: remove squelch controls for "Scalars leaked" messages in most places
- (these are now cured)
- Branch: maint-5.6/perl
- ! t/comp/proto.t t/op/lex_assign.t t/op/local.t t/op/pat.t
- ! t/op/regexp.t t/pragma/strict-vars t/pragma/warn/op
- ! t/pragma/warn/regcomp t/pragma/warn/toke t/pragma/warnings.t
-____________________________________________________________________________
-[ 9137] By: gsar on 2001/03/14 00:57:04
- Log: fix leak in pregcomp() when RE fails to compile (e.g. m/\\/)
- Branch: maint-5.6/perl
- ! regcomp.c
-____________________________________________________________________________
-[ 9133] By: gsar on 2001/03/13 22:46:20
- Log: integrate change#9067 from mainline
-
- Re: [PATCH: 5.6.1 trial2] DynaLoading for OS/390 build option
- Branch: maint-5.6/perl
- !> lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 9131] By: gsar on 2001/03/13 22:30:42
- Log: make the error text look more consistent in hints/hpux.sh
- Branch: maint-5.6/perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 9116] By: gsar on 2001/03/13 00:55:53
- Log: Win32::GetCwd() returns C: instead of C:\ in the root directory
- under ithreads
- Branch: maint-5.6/perl
- ! win32/perlhost.h
-____________________________________________________________________________
-[ 9108] By: gsar on 2001/03/12 10:21:31
- Log: fix memory leak in C<sub X { sub {} }> arising from a refcount
- loop between the outer sub and the inner prototype anonsub
-
- this also enables closures returned by subroutines that
- subsequently get redefined to work without generating coredumps :)
-
- completely removed the free_closures() hack--it shouldn't be
- needed anymore
- Branch: maint-5.6/perl
- + t/op/anonsub.t
- ! MANIFEST embed.h embed.pl op.c op.h pod/perlapi.pod pp_ctl.c
- ! proto.h sv.c
-____________________________________________________________________________
-[ 9076] By: jhi on 2001/03/07 22:59:39
- Log: Integrate change #7784 from mainline into maintperl.
-
- Subject: [PATCH 5.7.0] lexicals not recognized in a run-time (?{})
- Branch: maint-5.6/perl
- !> pp_ctl.c t/op/pat.t
-____________________________________________________________________________
-[ 9064] By: gsar on 2001/03/07 06:29:24
- Log: fix memory leak in pack("Bb",...)
- Branch: maint-5.6/perl
- ! perl.c
-____________________________________________________________________________
-[ 9055] By: jhi on 2001/03/06 02:21:26
- Log: Integrate the change #9054 from mainline:
- retract the PMOP cleanup patch pending further investigation.
- Branch: maint-5.6/perl
- !> op.c op.h
-____________________________________________________________________________
-[ 9050] By: jhi on 2001/03/05 21:44:29
- Log: Integrate changes #9033 and #9044 from mainline into maintperl,
- Sarathy's fix for ID 20010301.005.
- Branch: maint-5.6/perl
- !> op.c op.h
-____________________________________________________________________________
-[ 9030] By: jhi on 2001/03/05 13:46:49
- Log: Subject: [PATCH 5.6.1] OS/2 cleanup
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 5 Mar 2001 02:29:44 -0500
- Message-ID: <20010305022944.A10117@math.ohio-state.edu>
- Branch: maint-5.6/perl
- + os2/os2add.sym
- ! MANIFEST lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm
- ! makedef.pl os2/Changes os2/Makefile.SHs
- ! os2/OS2/REXX/Makefile.PL os2/OS2/REXX/REXX.pm
- ! os2/OS2/REXX/REXX.xs os2/OS2/REXX/t/rx_cmprt.t os2/os2.c
- ! os2/os2.sym os2/os2ish.h
-____________________________________________________________________________
-[ 9028] By: gsar on 2001/03/05 09:58:38
- Log: various nits in MM_Unix.pm found by disabling SelfLoader
- Branch: maint-5.6/perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 9026] By: jhi on 2001/03/05 02:14:59
- Log: Integrate change #9025 from mainline to maintperl,
- retract \N{U+HHHH}.
- Branch: maint-5.6/perl
- !> lib/charnames.pm pod/perldiag.pod pod/perlretut.pod
- !> t/lib/charnames.t toke.c
-____________________________________________________________________________
-[ 9019] By: jhi on 2001/03/04 18:18:43
- Log: Integrate changes #9017 and 9018 from mainline into maintperl.
-
- \N{U+HHHH} fix.
-
- pattern in G_ARRAY context
- Branch: maint-5.6/perl
- !> pp_hot.c t/op/pat.t toke.c
-____________________________________________________________________________
-[ 9016] By: jhi on 2001/03/04 17:41:22
- Log: Integrate changes #9013,9014,9015 from mainline into maintperl.
-
- Tweak the get*ent() OS/2 prototypes.
-
- Add the \N{U+HHHH} syntax.
-
- More tr/// UTF-8 fixes from Inaba Hiroto.
- Branch: maint-5.6/perl
- !> doop.c lib/charnames.pm os2/os2.c pod/perldiag.pod
- !> pod/perlretut.pod t/lib/charnames.t t/op/tr.t toke.c
-____________________________________________________________________________
-[ 9012] By: gsar on 2001/03/04 06:26:14
- Log: avoid warning (nit in change#9009)
- Branch: maint-5.6/perl
- ! toke.c
-____________________________________________________________________________
-[ 9011] By: gsar on 2001/03/04 06:15:24
- Log: lib/charnames.t fails in 5.6.x because of older Unicode
- data
-
- TODO: need to revisit this after updating lib/unicode/...
- Branch: maint-5.6/perl
- ! t/lib/charnames.t
-____________________________________________________________________________
-[ 9010] By: gsar on 2001/03/04 06:08:36
- Log: change#9009 breaks build (no "didrange" variable in 5.6.x)
- Branch: maint-5.6/perl
- ! toke.c
-____________________________________________________________________________
-[ 9009] By: jhi on 2001/03/03 19:27:20
- Log: Integrate change #9008 from mainline to maintperl,
- UTF-8 tr/// fixes from Inaba Hiroto.
- Branch: maint-5.6/perl
- !> doop.c op.c t/op/tr.t toke.c
-____________________________________________________________________________
-[ 9006] By: jhi on 2001/03/03 18:58:06
- Log: Subject: [PATCH 5.6.1] More robust Math::Complex
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 3 Mar 2001 12:51:50 -0500
- Message-ID: <20010303125150.A2147@math.ohio-state.edu>
-
- Be more robust in our quest for the infinite.
- Branch: maint-5.6/perl
- ! lib/Math/Complex.pm
-____________________________________________________________________________
-[ 9005] By: jhi on 2001/03/03 17:55:50
- Log: The #8982 modified for perl 5.6.x, from Radu Greab.
- Branch: maint-5.6/perl
- ! doio.c
-____________________________________________________________________________
-[ 9003] By: jhi on 2001/03/03 17:15:52
- Log: Integrate change #9002 from mainline to maintperl.
-
- Subject: [perl-5.6.x, perl-current] accept for EPOC
- Branch: maint-5.6/perl
- !> pp_sys.c
-____________________________________________________________________________
-[ 8999] By: jhi on 2001/03/03 17:09:28
- Log: Subject: [PATCH 5.6.1] syslog.t
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 3 Mar 2001 02:11:17 -0500
- Message-ID: <20010303021116.A11897@math.ohio-state.edu>
- Branch: maint-5.6/perl
- ! t/lib/syslog.t
-____________________________________________________________________________
-[ 8998] By: jhi on 2001/03/03 17:07:50
- Log: Subject: Re: [PATCH 5.7.0] compiling on OS/2: 5.6.1 too
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 3 Mar 2001 01:53:52 -0500
- Message-ID: <20010303015352.A11741@math.ohio-state.edu>
- Branch: maint-5.6/perl
- ! opcode.pl os2/os2.c
-____________________________________________________________________________
-[ 8997] By: jhi on 2001/03/03 17:03:30
- Log: Subject: [PATCH 5.6.1] compiling on OS/2
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 3 Mar 2001 01:59:59 -0500
- Message-ID: <20010303015959.B11741@math.ohio-state.edu>
- Branch: maint-5.6/perl
- ! hints/os2.sh
-____________________________________________________________________________
-[ 8995] By: jhi on 2001/03/03 00:35:22
- Log: Integrate changes #8099,8218,8220,8221,8227,8304,8317,
- 8318,8320,8337,8503,8877,8890,8903,8971 from mainline
- to maintperl.
-
- Subject: Re: [ID 20000328.039] [PATCH] Eliminate Configure use of /tmp
-
- Add Configure option -Dmksymlinks which will create a symlink
- forest if the current/build differs from the source directory.
- (8218,8220,8221,8317,8318,8971)
-
- Subject: Re: A Configure option like 'otherlibdirs' but for *pre*pending?
- (Document APPLLIB_EXP in INSTALL.)
-
- If running byacc write-enable also perly.h.
-
- DB3 NDBM/ODBM emulation tweaks from Stanislav Brabec <utx@penguin.cz>.
-
- Subject: [PATCH 5.7.1/Configure] failure to set src='.'
-
- Sanity check for conflicting thread flavours.
-
- Fix the sys/fcntl.h problem reported by Peter Prymmer.
-
- Add few CPUs/architectures to the Cppsym scan,
- add -perlio to archname if so selected (modified 8890)
-
- Be more helpful for devel builders, suggested by John L. Allen.
- (admittedly pointless change for maintperl, but the usedevel
- code is there already)
- Branch: maint-5.6/perl
- !> Configure INSTALL Makefile.SH Porting/Glossary
- !> Porting/config.sh Porting/config_H config_h.SH embed.pl
- !> epoc/config.sh ext/NDBM_File/NDBM_File.xs
- !> ext/ODBM_File/ODBM_File.xs t/io/fs.t warnings.pl
- !> win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 8993] By: jhi on 2001/03/02 23:22:12
- Log: Regenerate various files for maint.
- Branch: maint-5.6/perl
- ! Porting/Glossary Porting/config.sh Porting/config_H objXSUB.h
- ! perlapi.c pod/perlapi.pod pod/perltoc.pod proto.h
-____________________________________________________________________________
-[ 8991] By: jhi on 2001/03/02 21:00:08
- Log: Retract the #8742 part of #8986, backward compat.
- Branch: maint-5.6/perl
- ! embed.pl
-____________________________________________________________________________
-[ 8990] By: jhi on 2001/03/02 20:40:07
- Log: Retract the #8919 part of #8987, not applicable to the 5.6 branch.
- Branch: maint-5.6/perl
- ! hv.c
-____________________________________________________________________________
-[ 8987] By: jhi on 2001/03/02 19:43:40
- Log: Integrate changes #8784,8839,8843,8847,8849,8859,8866,
- 8873,8874,8876,8879,8901,8902,8908,8913,8918,8919,8946,8947,8948,
- 8950,8952,8955 from mainline to maintperl.
-
- Subject: [PATCH: perl@8773] small fixups to perlclib.pod
-
- Put to rest the 20010205.001, the email address checking (not) regex.
-
- fork() not everywhere, cleanup temp files.
-
- The #8843 wasn't quite right: %Config needs to imported.
-
- Subject: [PATCH perl@8841] glob-basic.t, runenv.t fix-ups
- (#8849: the glob-basic hunk needed massaging as it depended
- on Schwern's large-scale (unintegrated) patches)
-
- Skip the Perl_sys_intern_clear and Perl_sys_intern_init.
-
- Upgrade to CGI.pm 2.752, from Lincoln Stein.
- (Note: there were some conflicts due to EBCDIC and EPOC
- patches, in general I preferred the repository code.)
- (When 2.753 comes out, we need to synchronize.)
-
- Subject: [PATCH] fix for charnames above FFFF
-
- Subject: [patch perl@8841] One URL update and a possible OS Version snag for perlport.pod
-
- If no sfio, no -lsfio.
-
- Run run/*.t also in minitest.
-
- Subject: [PATCH perl 5.7.0] malloc message address offset
-
- Subject: [PATCH 5.7.0] don't zero CvFLAGS before checking for CvCONST!
-
- Subject: fix for parameter -Dm (for perl@8867)
-
- Subject: [PATCH: perl@8892] was Re: hashing order difference?
- (make the test more portable)
-
- Subject: Re: [PATCH] fix for charnames above FFFF
-
- Subject: Re: I'm losing the war...
- (hv_store() not working correctly in ENV_IS_CASELESS case.)
-
- Subject: Modified README.bs2000
-
- Subject: [PATCH: perl@8935] -Dt padsv($var)
-
- Subject: [PATCH: perl@8890] small fix in pod/perlop.pod
-
- Subject: PATCH: extra tests to check on negative float to unsigned cast
-
- Subject: [PATCH] XPUSH[insp] was Re: progress
-
- Subject: Re: Compile with perlcc..
- Branch: maint-5.6/perl
- !> (integrate 36 files)
-____________________________________________________________________________
-[ 8986] By: jhi on 2001/03/02 18:51:25
- Log: Integrate changes #8689,8697,8724,8726,8731,8742,8754,8755,
- 8763,8767,8770,8772,8795,8796,8813,8822,8823 from mainline
- to maintperl.
-
- Subject: Re: [PATCH lots of pod/] s/chop/chomp/g
-
- Subject: [DOC PATCH] overload.pm nits
-
- Add header for LIB$ prototypes (C. Berry)
-
- Convert fwrite()s to sockets to write()s, since some socket stacks
- don't take kindly to stdio.
- Ignore "expected" SS$_NOLOGNAM when doing internal LNM lookups
- (for often optional LNMs)
- Correct a few typos
- (C. Bailey)
-
- Subject: [PATCH: 5.6.1 trial2 && perl@8671] provide EBCDIC CGI::Util::escape() and test
-
- De-cut-and-pasto.
-
- Subject: Re: [PATCH embed.pl] Forgot to add ./lib to @INC for File::Glob
-
- Upgrade to Text-Tabs+Wrap-2001.0131 from David Muir Sharnoff.
-
- Upgrade to CPAN 1.59_54, from Andreas König.
-
- Bogus shebang.
-
- Subject: [PATCH] Document makepatch in Porting/patching
-
- UTF-8 documentation.
-
- Subject: Re: [PATCH] pod/perlclib.pod - Replacements for C library functions
-
- Sort the MANIFEST.
-
- Subject: [ID 20010210.002] perldiag doesn't include the "Scalars leaked" message
-
- Subject: [PATCH @8807] toke.c cleanup: scan_str()
-
- Subject: [PATCH perl.c] Fixing PERL5OPT (was Re: Warnings, strict, and CPAN)
-
- Add run/*.t to testables.
-
- TODO: integrate #8784.
- Branch: maint-5.6/perl
- +> pod/perlclib.pod t/lib/cgi-esc.t t/run/runenv.t
- !> (integrate 28 files)
-____________________________________________________________________________
-[ 8984] By: jhi on 2001/03/02 16:00:17
- Log: Integrate changes #8978,8979,8980,8981,8983 from mainline.
-
- perlfaq1 reworded to suggest 5.6.0 or 5.005_03, or POSSIBLY
- 5.004_05, and mention the suidperl August 2000 security problem.
- (#8978,#8981)
-
- Subject: [ID 20010301.004] Technically speaking in perldata
-
- Subject: [PATCH] File::Copy for bleadperl, maintperl
-
- Subject: [PATCH 5.7.0/5.6.0+] VMS piping ... cleanup at interpreter exit
-
- (The #8982, fix for 20010221.005 and 20010221.008,
- would be nice too but it didn't integrate cleanly.)
- Branch: maint-5.6/perl
- !> lib/File/Copy.pm pod/perldata.pod pod/perlfaq1.pod vms/vms.c
-____________________________________________________________________________
-[ 8974] By: gsar on 2001/03/01 16:28:21
- Log: fix for bugid 20010226.008
-
- the problem was that some of the pointers (PL_last_lop and
- PL_last_uni specifically) into the lex buffers weren't correctly
- being invalidated when the buffer changed; this would leave the
- pointers pointing at an arbitrary location in the buffer if
- the buffer didn't need to be reallocated, or point into freed
- memory if the buffer had to be realloced
-
- TODO item for bugdb maintainers: check other seemingly random
- parser-related bugs--they might be cured by this
- Branch: maint-5.6/perl
- ! toke.c
-____________________________________________________________________________
-[ 8960] By: jhi on 2001/02/27 22:51:33
- Log: Subject: [PATCH perl@8958 and 5.6.1-trial2] configure.com bug fixing spree
- From: "Craig A. Berry" <craigberry@mac.com>
- Date: Tue, 27 Feb 2001 16:11:44 -0600
- Message-Id: <5.0.2.1.0.20010227150548.02a200f8@exchi01>
- Branch: maint-5.6/perl
- ! configure.com vms/descrip_mms.template
-____________________________________________________________________________
-[ 8957] By: jhi on 2001/02/27 06:15:07
- Log: Subject: [5.6.x] EPOC additions
- From: Olaf Flebbe <O.Flebbe@science-computing.de>
- Date: Mon, 26 Feb 2001 23:33:46 +0100 (CET)
- Message-ID: <Pine.LNX.4.02.10102262333040.3736-100000@milkyway.science-computing.de>
- Branch: maint-5.6/perl
- ! AUTHORS README.epoc epoc/createpkg.pl pp_sys.c
-____________________________________________________________________________
-[ 8945] By: jhi on 2001/02/26 14:19:53
- Log: Integrate the t/op/sprintf.t parts of #7909 and #8944 from mainline
- to maintperl, listing the known failures on the tests 129 and 130.
- Branch: maint-5.6/perl
- !> t/op/sprintf.t
-____________________________________________________________________________
-[ 8917] By: jhi on 2001/02/23 20:27:51
- Log: Integrate change #8916 from mainline,
- do away with USE_WIN32_RTL_ENV.
- Branch: maint-5.6/perl
- !> perl.c util.c win32/win32.c win32/win32.h win32/win32iop.h
-____________________________________________________________________________
-[ 8911] By: jhi on 2001/02/23 04:20:02
- Log: Integrate changes #8896,8897,8898,8906,8907,8908 from mainline.
-
- Duplicated environment freeing, File::Temp 0.12,
- op/append portability (EBCDIC) tweak.
- Branch: maint-5.6/perl
- !> lib/File/Temp.pm perl.c t/lib/ftmp-mktemp.t t/lib/ftmp-posix.t
- !> t/op/append.t
-____________________________________________________________________________
-[ 8910] By: jhi on 2001/02/23 02:07:33
- Log: Integrate change #8909 from mainline, a better Borland
- putenv() workaround.
- Branch: maint-5.6/perl
- !> perl.c
-____________________________________________________________________________
-[ 8900] By: jhi on 2001/02/23 01:18:02
- Log: Integrate changes #8898,8899 from mainline, environ handling.
- Branch: maint-5.6/perl
- !> perl.c
-____________________________________________________________________________
-[ 8894] By: gsar on 2001/02/22 19:06:18
- Log: integrate changes#6162,6163 from mainline (missing leak fixes!)
-
- fix memory leak in method call optimization (change#3768);
- made C<eval "$x->foo()"> leak
-
- fix memory leak in C<eval "BEGIN {}"> (bug in change#4579)
- Branch: maint-5.6/perl
- !> op.c
-____________________________________________________________________________
-[ 8886] By: jhi on 2001/02/22 12:49:24
- Log: Integrate changes #8883,8884 from mainline to maintperl.
-
- Subject: [patch: perl@8867] embed.{h|pl} need not mention ebcdic_control ...
- Subject: Re: File::Temp::_gettemp warning
- Branch: maint-5.6/perl
- !> embed.h embed.pl lib/File/Temp.pm
-____________________________________________________________________________
-[ 8885] By: jhi on 2001/02/22 12:43:59
- Log: Based on
-
- Subject: [ID 20010222.001] POSIX.xs IV vs NV bug
- From: schwab@suse.de
- Date: Thu, 22 Feb 2001 13:08:09 +0100
- Message-Id: <200102221208.f1MC89H09364@sykes.suse.de>
-
- but the fix done slightly differently because the other
- half was already done in #8664.
- Branch: maint-5.6/perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 8882] By: jhi on 2001/02/21 19:41:33
- Log: Integrate change #8881 from mainlin to maintperl.
-
- Subject: [PATCH - perl8585] glob-in-eval memory leak fix
- Branch: maint-5.6/perl
- !> op.c
-____________________________________________________________________________
-[ 8871] By: jhi on 2001/02/21 14:07:29
- Log: Integrate change #8868 from pureperl to maintperl.
-
- Fixed reference count loop caused by sv_magic.
- Branch: maint-5.6/perl
- !> sv.c
-____________________________________________________________________________
-[ 8863] By: jhi on 2001/02/20 20:55:11
- Log: Integrate change #8860,8861 from mainline into maintperl.
-
- "pseudo-literal j"
-
- Subject: [PATCH: 5.6.1 trial2 && perl@8807] workaround VMS I/O problem in Test.pm for bug ID 20010213.009
- Branch: maint-5.6/perl
- !> lib/Test.pm pod/perlop.pod
-____________________________________________________________________________
-[ 8856] By: jhi on 2001/02/20 17:33:16
- Log: Integrate change #8848 from mainline to maintperl: ?DBM_File cleanup.
- Branch: maint-5.6/perl
- !> ext/GDBM_File/GDBM_File.pm ext/NDBM_File/NDBM_File.pm
- !> ext/ODBM_File/ODBM_File.pm ext/SDBM_File/SDBM_File.pm
- !> t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t
-____________________________________________________________________________
-[ 8855] By: jhi on 2001/02/20 17:32:13
- Log: Integrate pureperl changes #8844,8845,8850 to maintperl.
-
- Fixed %^H scoping bug
-
- Removed GV <-> CV refcount loop
-
- Removed %ENV refcount loop
- Branch: maint-5.6/perl
- !> gv.c op.c perl.c pp.c scope.c
-____________________________________________________________________________
-[ 8854] By: jhi on 2001/02/20 17:25:06
- Log: Subject: Addition to readme.win32 for Borland C++ compilers
- Date: Tue, 20 Feb 2001 02:15:25 +0300
- From: "Vadim Konovalov" <watman@inbox.ru>
- Message-ID: <011c01c09aca$93bbbec0$367b55c2@vad>
-
- Document Borland compiler misbehaviour.
- Branch: maint-5.6/perl
- ! README.win32
-____________________________________________________________________________
-[ 8853] By: jhi on 2001/02/20 17:22:25
- Log: The assimilation of ebcdic.c didn't quite work at the first try,
- patches from Thomas Dorner.
- Branch: maint-5.6/perl
- ! handy.h util.c
-____________________________________________________________________________
-[ 8852] By: jhi on 2001/02/20 17:20:15
- Log: Subject: [PATCH] More Mac OS patches for maint-5.6
- From: Chris Nandor <pudge@pobox.com>
- Date: Tue, 20 Feb 2001 08:32:45 -0500
- Message-Id: <p05010403b6b81ee8dca0@[10.0.1.177]>
- Branch: maint-5.6/perl
- ! makedef.pl mg.c
-____________________________________________________________________________
-[ 8831] By: jhi on 2001/02/18 19:14:20
- Log: Integrate change #8827 from mainline.
-
- UTF8 tweaks.
- Branch: maint-5.6/perl
- !> sv.c utf8.c
-____________________________________________________________________________
-[ 8818] By: jhi on 2001/02/18 02:24:50
- Log: FAQ nit from Chris Fedde.
- Branch: maint-5.6/perl
- ! pod/perlfaq4.pod
-____________________________________________________________________________
-[ 8810] By: jhi on 2001/02/15 13:35:08
- Log: Upgrade to podlators 1.08, from Russ Allbery.
- Branch: maint-5.6/perl
- ! lib/Pod/Man.pm lib/Pod/Text.pm
-____________________________________________________________________________
-[ 8809] By: jhi on 2001/02/15 13:26:38
- Log: (accidentally empty check-in)
- Branch: maint-5.6/perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 8808] By: jhi on 2001/02/15 13:23:47
- Log: Subject: [PATCH 5.6.1-TRIAL2] perldoc.PL using install directories
- From: Russ Allbery <rra@stanford.edu>
- Date: 14 Feb 2001 10:15:41 -0800
- Message-ID: <ylzofpf7w2.fsf@windlord.stanford.edu>
-
- perldoc was hardcoding $Config{installscript}, which breaks
- when install* isn't where Perl ends up (such as with AFS).
-
- Use $Config{scriptdir} instead.
- Branch: maint-5.6/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 8806] By: jhi on 2001/02/14 14:25:31
- Log: Integrate changes #8803,8804,8805 from mainline.
-
- Duplicate environment for JPL so that JDK 1.2/1.3 don't get upset.
-
- Don't skip too much of the locale error message if no environ array,
- from Chris Nandor.
-
- More MacOS Classic fixes from Chris Nandor.
- Branch: maint-5.6/perl
- !> doop.c lib/Cwd.pm perl.c perl.h util.c
-____________________________________________________________________________
-[ 8801] By: jhi on 2001/02/13 17:55:19
- Log: Integrate change #8792 from mainline.
-
- Subject: buncha MacPerl patches for bleadperl
- From: Chris Nandor <pudge@pobox.com>
- Date: Tue, 13 Feb 2001 00:02:43 -0500
- Message-Id: <p05010404b6ae6f85e07a@[10.0.1.177]>
- Branch: maint-5.6/perl
- !> lib/AutoLoader.pm lib/AutoSplit.pm lib/ExtUtils/MakeMaker.pm
- !> lib/File/Basename.pm makedef.pl perl.c pp_ctl.c
- !> t/lib/basename.t toke.c util.h
-____________________________________________________________________________
-[ 8800] By: jhi on 2001/02/13 17:46:43
- Log: When doing that Fpos_t used in PerlIO_getpos proto needs
- to be forced to Off_t.
-
- Subject: [ID 20010201.009] 5.6.1-TRIAL2 sfio build fails
- From: nick@ccl4.org
- Date: Thu, 1 Feb 2001 12:01:04 +0000
- Message-Id: <20010201120103.E11401@plum.flirble.org>
- Branch: maint-5.6/perl
- ! iperlsys.h perlio.c
-____________________________________________________________________________
-[ 8799] By: jhi on 2001/02/13 16:52:51
- Log: Duplex duplex hunk hunk.
- Branch: maint-5.6/perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 8794] By: jhi on 2001/02/13 14:26:51
- Log: Integrate change #8793 from mainline, FAQ updates.
- Branch: maint-5.6/perl
- !> pod/perlfaq5.pod pod/perlfaq6.pod pod/perlfaq9.pod
-____________________________________________________________________________
-[ 8791] By: jhi on 2001/02/13 14:10:39
- Log: Integrate change #8790 from mainline.
-
- environ array wrongly assumed in Perl_init_i18nl10n(),
- Branch: maint-5.6/perl
- !> util.c
-____________________________________________________________________________
-[ 8789] By: jhi on 2001/02/13 13:58:07
- Log: Integrate changes #8373,8487,8544,8783 from mainline.
-
- Synchronize the EBCDIC platforms (os390,posix-bc,vmesa):
- hints files, the dynaloading, assimilate ebcdic into util.c.
- Branch: maint-5.6/perl
- - ebcdic.c
- ! MANIFEST hints/posix-bc.sh
- !> Makefile.SH embed.h embed.pl ext/DynaLoader/dl_dllload.xs
- !> handy.h hints/os390.sh hints/vmesa.sh installperl objXSUB.h
- !> perlapi.c proto.h util.c
-____________________________________________________________________________
-[ 8786] By: jhi on 2001/02/13 05:54:34
- Log: Subject: perl@8671 on posix-bc aka BS2000 Posix (small Patch included!)
- From: Dorner Thomas <Thomas.Dorner@start.de>
- Date: Mon, 12 Feb 2001 15:06:26 +0100
- Message-ID: <6727B1DACFCDD311A757009027CA8D69010A8853@Ex02.inhouse.start.de>
- Branch: maint-5.6/perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 8782] By: jhi on 2001/02/13 02:00:07
- Log: Add OpenBSD to the list of 5.6.1-okay platforms.
- Branch: maint-5.6/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 8781] By: jhi on 2001/02/13 01:58:44
- Log: OpenBSD hints update for 5.6.1-TRIAL2 from Todd C. Miller.
- Branch: maint-5.6/perl
- ! hints/openbsd.sh
-____________________________________________________________________________
-[ 8780] By: jhi on 2001/02/13 01:57:33
- Log: Synchronize the regexp tests between maintperl and mainline.
- Branch: maint-5.6/perl
- !> t/op/re_tests
-____________________________________________________________________________
-[ 8777] By: jhi on 2001/02/13 00:17:54
- Log: Subject: Re: [ID 20010212.006] Core dump with /((?:hard|soft)cover)?/
- From: Hugo <hv@crypt.compulink.co.uk>
- Date: Tue, 13 Feb 2001 00:11:11 +0000
- Message-Id: <200102130011.AAA14310@crypt.compulink.co.uk>
- Branch: maint-5.6/perl
- ! regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 8776] By: jhi on 2001/02/12 23:25:52
- Log: Add VOS to the list of 5.6.1 known-to-be-working platforms.
- Branch: maint-5.6/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 8775] By: jhi on 2001/02/12 23:04:28
- Log: VOS updates for 5.6-TRIAL2 from Paul Green.
- Branch: maint-5.6/perl
- ! README.vos vos/Changes vos/build.cm vos/config.alpha.def
- ! vos/config.alpha.h vos/config.ga.def vos/config.ga.h
- ! vos/configure_perl.cm
-____________________________________________________________________________
-[ 8758] By: jhi on 2001/02/10 18:01:17
- Log: Integrate changes #8701,8704,8756 from pureperl to maintperl.
-
- Fixed UMRs and leak in Perl_pmtrans()
-
- Several leaks an UMRs fixed, mainly in the area of Perl_pmtrans and
- associated UTFied tr/// code. Also fixed scoping leak of
- PL_reg_start_tmp.
-
- newATTRSUB leaks when an attempt to redefine the active sort sub is
- made.
- Branch: maint-5.6/perl
- !> op.c regcomp.c
-____________________________________________________________________________
-[ 8748] By: jhi on 2001/02/09 18:31:34
- Log: Integrate changes #8673,8674,8676 from maintperl into mainline,
- plus manual tweakage.
-
- Sync the perlfaq2 between mainline and maintperl.
- Branch: maint-5.6/perl
- ! pod/perlfaq2.pod
- Branch: perl
- !> pod/perlfaq2.pod
-____________________________________________________________________________
-[ 8746] By: jhi on 2001/02/09 18:03:43
- Log: Integrate changes #8699,8708,8709,8744,8745 from mainline.
-
- Subject: perlfaq2, re: perlmongers
-
- Subject: Re: [PATCH pod/[bt]ootc?.pod] Adding mention of useful CPAN modules
-
- Subject: [PATCH pod/perlmodlib.PL 5.6.1-TRIAL2] Up to date CPAN mirror list
-
- Subject: [ID 20010205.001] typo in perlfaq9
-
- Subject: [ID 20010208.002] unordered explanation in perlcall
- Branch: maint-5.6/perl
- !> pod/perlapi.pod pod/perlboot.pod pod/perlcall.pod
- !> pod/perlfaq2.pod pod/perlfaq9.pod pod/perlmodlib.PL
- !> pod/perlobj.pod pod/perltoot.pod pod/perltootc.pod
-____________________________________________________________________________
-[ 8740] By: jhi on 2001/02/09 17:03:46
- Log: Subject: [PATCH perl-current] perlfaq3.pod, URL for vile
- From: "Brendan O'Dea" <bod@compusol.com.au>
- Date: Sun, 4 Feb 2001 11:17:56 +1100
- Message-ID: <20010204111756.A16301@compusol.com.au>
- Branch: maint-5.6/perl
- ! pod/perlfaq3.pod
-____________________________________________________________________________
-[ 8739] By: jhi on 2001/02/09 17:01:59
- Log: Subject: [PATCH: perl-5.6.1-TRIAL2] installhtml change to build prettier html files
- From: "Indy Singh" <indy@nusphere.com>
- Date: Fri, 2 Feb 2001 15:09:59 -0500
- Message-ID: <02b601c08d54$23fd3560$d24b7018@cr637287a>
-
- Html files will be generated with a header to make them look
- a little less bare.
- Branch: maint-5.6/perl
- ! installhtml
-____________________________________________________________________________
-[ 8738] By: jhi on 2001/02/09 16:58:48
- Log: Subject: [PATCH: perl-5.6.1-TRIAL2] Win32 Makefile change to move html directory
- From: "Indy Singh" <indy@nusphere.com>
- Date: Fri, 2 Feb 2001 15:08:23 -0500
- Message-ID: <02b501c08d53$ec354550$d24b7018@cr637287a>
-
- Html files will be installed in a more logical and easier to
- find directory. E.g. c:\perl\html instead of c:\perl\lib\pod\html
- Branch: maint-5.6/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 8736] By: jhi on 2001/02/09 16:42:31
- Log: Latin nit from Philip Newton.
- Branch: maint-5.6/perl
- ! README.hpux
-____________________________________________________________________________
-[ 8733] By: jhi on 2001/02/09 15:35:47
- Log: Subject: Re: [PATCH: 5.6.1 trial 2 && perl@8671] some coded char set issues in perlre.pod
- From: Prymmer/Kahn <pvhp@best.com>
- Date: Thu, 8 Feb 2001 21:21:22 -0800 (PST)
- Message-ID: <Pine.BSF.4.21.0102082048360.1499-100000@shell8.ba.best.com>
- Branch: maint-5.6/perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 8732] By: jhi on 2001/02/09 15:26:17
- Log: Rename README.posix-bc to README.bs2000 (to avoid the
- confusion of a "perlposix-bc.pod"), add a few missing
- arch pods, regen toc.
- Branch: maint-5.6/perl
- +> README.bs2000
- - README.posix-bc
- ! MANIFEST pod/buildtoc.PL pod/perl.pod pod/perlport.pod
- ! pod/perltoc.pod win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 8728] By: jhi on 2001/02/09 14:46:06
- Log: Subject: [PATCH: 5.6.1 trial 2 && perl@8671] podify README.vmesa
- From: Peter Prymmer <pvhp@forte.com>
- Date: Thu, 8 Feb 2001 13:00:30 -0800 (PST)
- Message-ID: <Pine.OSF.4.10.10102081246030.445810-100000@aspara.forte.com>
- Branch: maint-5.6/perl
- ! README.vmesa win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 8727] By: jhi on 2001/02/09 14:33:25
- Log: Integrate change #8712 from mainline.
-
- [PATCH: perl-5.6.1 trial2 && perl@8671] VMS specific simplification for Pod::Find
- Branch: maint-5.6/perl
- !> lib/Pod/Find.pm
-____________________________________________________________________________
-[ 8725] By: jhi on 2001/02/09 04:56:47
- Log: Add NonStopUX to the list of 5.6.1-proven platforms.
- Branch: maint-5.6/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 8723] By: jhi on 2001/02/09 03:29:29
- Log: Integrate change #8722 from mainline.
-
- The Im() function wasn't returning zero for non-Math::Complex
- arguments. The bug reported by John Gamble.
- Branch: maint-5.6/perl
- !> lib/Math/Complex.pm
-____________________________________________________________________________
-[ 8703] By: gsar on 2001/02/06 02:29:37
- Log: $(MAKE) distclean doesn't clean up properly on windows
- Branch: maint-5.6/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 8702] By: gsar on 2001/02/06 01:00:46
- Log: tweak change#8659 to keep it simple
- Branch: maint-5.6/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 8701] By: gsar on 2001/02/05 22:45:41
- Log: change#8693 was missing testsuite changes
- Branch: maint-5.6/perl
- !> t/lib/db-btree.t t/lib/db-hash.t t/lib/db-recno.t
-____________________________________________________________________________
-[ 8695] By: gsar on 2001/02/05 03:27:34
- Log: thread.h tweak to enable 5005threads on HP-UX 10.20 with DCE threads
- Branch: maint-5.6/perl
- ! thread.h
-____________________________________________________________________________
-[ 8693] By: gsar on 2001/02/04 22:38:49
- Log: integrate changes#7801,8068,8094,8108,8196 from mainline (DB_File
- changes)
- Branch: maint-5.6/perl
- !> ext/DB_File/Changes ext/DB_File/DB_File.pm
- !> ext/DB_File/DB_File.xs ext/DB_File/dbinfo ext/DB_File/typemap
- !> ext/DB_File/version.c
-____________________________________________________________________________
-[ 8687] By: jhi on 2001/02/03 17:11:42
- Log: HP-UX thread patches from Merijn H. Brand.
- Branch: maint-5.6/perl
- ! README.hpux hints/hpux.sh
-____________________________________________________________________________
-[ 8682] By: jhi on 2001/02/03 05:52:11
- Log: IRIX hints fix from Scott Henry, get Configure -Dcc="cc -64 -mips3"
- to work correctly.
- Branch: maint-5.6/perl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 8681] By: jhi on 2001/02/03 05:47:33
- Log: perlport tweaks from Peter Prymmer and Chris Nandor.
- Branch: maint-5.6/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 8680] By: jhi on 2001/02/02 21:39:49
- Log: perlport update from Peter Prymmer.
- Branch: maint-5.6/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 8678] By: gsar on 2001/02/02 16:02:12
- Log: note about bincompat, slightly modified (from Lupe Christoph)
- Branch: maint-5.6/perl
- ! README.solaris
-____________________________________________________________________________
-[ 8677] By: jhi on 2001/02/02 15:46:20
- Log: Supported platforms updates.
- Branch: maint-5.6/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 8676] By: jhi on 2001/02/02 03:41:26
- Log: A couple more perlfaq2 tweaks.
- Branch: maint-5.6/perl
- ! pod/perlfaq2.pod
-____________________________________________________________________________
-[ 8675] By: jhi on 2001/02/02 03:17:44
- Log: Misedit in #8661.
- Branch: maint-5.6/perl
- ! Configure
-____________________________________________________________________________
-[ 8674] By: jhi on 2001/02/02 03:14:38
- Log: Damien again.
- Branch: maint-5.6/perl
- ! pod/perlfaq2.pod
-____________________________________________________________________________
-[ 8673] By: jhi on 2001/02/02 03:12:40
- Log: perlfaq update from Elaine Ashton.
- Branch: maint-5.6/perl
- ! pod/perlfaq2.pod
-____________________________________________________________________________
-[ 8672] By: jhi on 2001/02/02 03:07:08
- Log: UTF-8 s/// patch from Inaba Hiroto.
- Branch: maint-5.6/perl
- ! pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 8669] By: jhi on 2001/02/01 21:57:02
- Log: Subject: Re: [PATCH perl5.6.1-TRIAL2] long C<=item>s in perlmodlib.pod
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Thu, 1 Feb 2001 16:59:05 GMT
- Message-Id: <200102011659.QAA01274@tempest.npl.co.uk>
- Branch: maint-5.6/perl
- ! pod/perlmodlib.PL
-____________________________________________________________________________
-[ 8667] By: gsar on 2001/02/01 16:59:11
- Log: add ppaddr as one of the compatibility symbols under -DPERL_POLLUTE
- Branch: maint-5.6/perl
- ! embed.pl embedvar.h
-____________________________________________________________________________
-[ 8666] By: gsar on 2001/02/01 16:34:51
- Log: add missing entries to win32/config.?c
- Branch: maint-5.6/perl
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 8665] By: jhi on 2001/02/01 14:58:51
- Log: Subject: Re: [ID 20010201.006] bad pointer from perlfunc to perlmod
- From: "Stephen P. Potter" <spp@spotter.yi.org>
- Date: Thu, 01 Feb 2001 10:45:46 -0500
- Message-Id: <200102011545.KAA31479@spotter.yi.org>
- Branch: maint-5.6/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 8664] By: gsar on 2001/02/01 14:52:37
- Log: need to use INT2PTR instead of a straight cast or ia64 fails
- posix.t (from Brendan O'Dea <bod@compusol.com.au>)
- Branch: maint-5.6/perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 8663] By: jhi on 2001/02/01 14:09:13
- Log: Allow the float to be fuzzier.
- Branch: maint-5.6/perl
- ! t/lib/peek.t
-____________________________________________________________________________
-[ 8662] By: jhi on 2001/02/01 13:59:00
- Log: Subject: [PATCH perl5.6.1-TRIAL2] long C<=item>s in perlmodlib.pod
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Thu, 1 Feb 2001 13:05:39 GMT
- Message-Id: <200102011305.NAA26160@tempest.npl.co.uk>
- Branch: maint-5.6/perl
- ! pod/perlmodlib.pod
-____________________________________________________________________________
-[ 8661] By: jhi on 2001/02/01 13:57:38
- Log: Subject: [PATCH] Re: v5.6.1 trial2 is available
- Date: Thu, 01 Feb 2001 14:15:41 +0100
- From: "H.Merijn Brand" <h.m.brand@hccnet.nl>
- Message-Id: <20010201141104.303F.H.M.BRAND@hccnet.nl>
-
- Have the $ccflags in the gcc version test (strange, this change
- is claimed to be have been integrated already)
- Branch: maint-5.6/perl
- ! Configure
-____________________________________________________________________________
-[ 8660] By: jhi on 2001/02/01 13:44:10
- Log: Integrate changes #7950,7964,7962 from mainline.
-
- Find the stdchar signedness using cpp, should fix some of
- the Solaris compiler warnings reported by Alan Burlison.
- Branch: maint-5.6/perl
- !> Configure config_h.SH
-____________________________________________________________________________
-[ 8659] By: jhi on 2001/02/01 05:35:32
- Log: Subject: [PATCH 5.6.1-TRIAL? and 5.7.?] perldoc uses unescaped backslashes in filenames
- From: Jan Dubois <JanD@ActiveState.com>
- Date: Wed, 31 Jan 2001 21:17:03 -0800
- Message-ID: <8qrh7t069jt32m98sap53l9dfoge0vjrle@4ax.com>
- Branch: maint-5.6/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 8658] By: jhi on 2001/02/01 04:33:17
- Log: Integrate the README.os390 and README.posix-bc parts of mainline
- changes #8373,8486, 8544,8556. (The hints/os390.sh,Makefile.SH,
- installperl parts were taken care of by #8657.)
- Branch: maint-5.6/perl
- !> README.os390 README.posix-bc
-____________________________________________________________________________
-[ 8657] By: jhi on 2001/02/01 04:29:21
- Log: Subject: [PATCH: 5.6.1 trial2] DynaLoading for OS/390 build option
- From: Peter Prymmer <pvhp@forte.com>
- Date: Wed, 31 Jan 2001 18:18:11 -0800 (PST)
- Message-ID: <Pine.OSF.4.10.10101311815560.336633-100000@aspara.forte.com>
- Branch: maint-5.6/perl
- + ext/DynaLoader/dl_dllload.xs
- ! MANIFEST Makefile.SH hints/os390.sh installperl
-____________________________________________________________________________
-[ 8656] By: jhi on 2001/02/01 04:25:45
- Log: Subject: [PATCH: 5.6.1 trial2]Not OK: perl v5.6.1 +v5.6.1-TRIAL2 on os390 05.00 (UNINSTALLED)
- From: Peter Prymmer <pvhp@forte.com>
- Date: Wed, 31 Jan 2001 15:26:57 -0800 (PST)
- Message-ID: <Pine.OSF.4.10.10101311523101.336633-100000@aspara.forte.com>
- Branch: maint-5.6/perl
- ! lib/Math/BigInt.pm lib/bigint.pl t/lib/b.t t/pragma/sub_lval.t
-____________________________________________________________________________
-[ 8655] By: jhi on 2001/02/01 04:14:47
- Log: Subject: [ID 20010131.066] Not OK: perl v5.6.1 +v5.6.1-TRIAL2 on os2 2.40 (UNINSTALLED)
- From: troc@netrus.net
- Date: Wed, 31 Jan 2001 22:31:26 -0500
- Message-Id: <200102010331.WAA117.85@rocco.homenet>
- Branch: maint-5.6/perl
- ! os2/os2.c
-____________________________________________________________________________
-[ 8654] By: jhi on 2001/02/01 04:12:52
- Log: Solaris 2.7 i386 #defines SP in /usr/include/sys/reg.h
- as reported by Alan Burlison.
- Branch: maint-5.6/perl
- ! pp.h
-____________________________________________________________________________
-[ 8653] By: jhi on 2001/02/01 04:05:12
- Log: Subject: [ID 20010131.042] Not OK: perl v5.6.1 +v5.6.1-TRIAL2 on VMS_AXP V7.2-1
- From: dsugalski@northernlight.com
- Date: Wed, 31 Jan 2001 18:54:11 -0500
- Message-Id: <01013118541126@monsoon.stratus.northernlight.com>
- Branch: maint-5.6/perl
- ! configure.com
-____________________________________________________________________________
-[ 8652] By: jhi on 2001/02/01 04:03:11
- Log: Misplaced #endif.
-
- Subject: [perl-5-6-1-trial2] patches for EPOC
- From: Olaf Flebbe <O.Flebbe@science-computing.de>
- Date: Wed, 31 Jan 2001 23:15:34 +0100 (CET)
- Message-ID: <Pine.LNX.4.02.10101312314470.5682-100000@milkyway.science-computing.de>
- Branch: maint-5.6/perl
- ! epoc/epocish.c
-____________________________________________________________________________
-[ 8651] By: jhi on 2001/02/01 04:00:25
- Log: Integrate changes #8647,8648,8650 from mainline.
-
- Macrofy a magic UTF-8 test.
-
- Protect PL_numeric_radix_sv with USE_NUMERIC_LOCALE.
-
- Watch out for cross compiling for EPOC (usually done on linux).
- Branch: maint-5.6/perl
- !> ext/Errno/Errno_pm.PL sv.c utf8.c utf8.h
-____________________________________________________________________________
-[ 8649] By: gsar on 2001/02/01 00:46:00
- Log: perl_clone() wants to clone PL_numeric_radix_sv (fix for change#8626)
- Branch: maint-5.6/perl
- ! sv.c
-____________________________________________________________________________
-[ 8646] By: gsar on 2001/01/31 15:55:12
- Log: update Changes
- Branch: maint-5.6/perl
- ! Changes
-____________________________________________________________________________
-[ 8645] By: gsar on 2001/01/31 15:10:14
- Log: Configure tweak suggested by Peter Prymmer
- Branch: maint-5.6/perl
- ! Configure
-____________________________________________________________________________
-[ 8644] By: gsar on 2001/01/31 15:06:32
- Log: more files need to be writable in the source distribution
- Branch: maint-5.6/perl
- ! Porting/makerel
-____________________________________________________________________________
-[ 8643] By: jhi on 2001/01/31 14:59:46
- Log: Integrate changes #8258,8278,8279 from mainline.
-
- Make the large file tests more robust/talkative.
- Branch: maint-5.6/perl
- !> t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 8642] By: gsar on 2001/01/31 14:53:48
- Log: integrate changes#8311,8334 from mainline
-
- Add a new MakeMaker variable PM_FILTER that defines a Unix
- filter to be run on each .pm during the pm_to_blib() phase,
- a fixed version of
- Subject: PATCH (blead 8269) ExtUtils::MakeMaker
-
- Subject: PATCH 5.6.1 & blead 8327 -- workaround for t/io/fs.t
- Apparently, the glibc2.2 + linux 2.4.0 + NFS combination prevent
- accurate reading of the "atime".
- Branch: maint-5.6/perl
- !> lib/ExtUtils/Install.pm lib/ExtUtils/MM_Unix.pm
- !> lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MM_Win32.pm
- !> lib/ExtUtils/MakeMaker.pm t/io/fs.t
-____________________________________________________________________________
-[ 8641] By: jhi on 2001/01/31 14:46:37
- Log: Upgrade to Getopt::Long 2.25, from Johan Vromans.
- Branch: maint-5.6/perl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 8640] By: gsar on 2001/01/31 14:40:24
- Log: make regen_all
- Branch: maint-5.6/perl
- ! patchlevel.h pod/perlmodlib.pod pod/perltoc.pod
-____________________________________________________________________________
-[ 8639] By: gsar on 2001/01/31 14:37:25
- Log: refresh windows config files
- Branch: maint-5.6/perl
- ! win32/Makefile win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 8638] By: gsar on 2001/01/31 14:28:10
- Log: makefile tweaks for windows: introduce a bulk-switch to enable
- same options as ActivePerl; sync changes with makefile.mk
- Branch: maint-5.6/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 8636] By: jhi on 2001/01/31 02:38:32
- Log: Integrate changes #7884,8122,8155,8197,8213[just to /nolog part,
- no perlio],8257,8380,8479,8515 from mainline.
-
- Subject: [PATCH perl@7795 (and earlier)] VMS test cleanup
-
- Subject: Re: [ID 20001214.011] Unreachable value in a search list logical name
- Subject: [PATCH perl@8133] fix-up for VMS extensions
-
- In VMS embedded perls couldn't access the statically built Socket.
-
- Subject: [patch: perl@8211]VMS: add -Duseperlio capacity to configure.com (8213)
-
- Further VMS piping fixes from Charles Lane.
-
- Subject: [PATCH] make t/op/misc.t work on VMS
-
- Add tracing for debugging extensions builds in VMS.
-
- Subject: [PATCH perl@8506] typo in last week's configure.com frenzy
- Branch: maint-5.6/perl
- !> configure.com doio.c t/op/misc.t vms/descrip_mms.template
- !> vms/ext/DCLsym/Makefile.PL vms/ext/Stdio/Makefile.PL
- !> vms/test.com vms/vms.c vms/vmsish.h vms/vmspipe.com
-____________________________________________________________________________
-[ 8635] By: jhi on 2001/01/31 01:46:41
- Log: Integrate change #7732 from mainline.
-
- Sparc 64-bit pack() fix from Jens Hamisch.
- Branch: maint-5.6/perl
- !> pp.c
-____________________________________________________________________________
-[ 8634] By: jhi on 2001/01/31 01:41:16
- Log: One spot missing from #8626.
- Branch: maint-5.6/perl
- ! sv.c
-____________________________________________________________________________
-[ 8633] By: jhi on 2001/01/31 00:49:17
- Log: Integrate change #7495 from mainline.
-
- Subject: [PATCH: perl@7483] generalize AIX ccversion hack for re extension
- Branch: maint-5.6/perl
- !> MANIFEST ext/re/Makefile.PL
-____________________________________________________________________________
-[ 8632] By: jhi on 2001/01/30 23:38:49
- Log: Integrate change #8396 from mainline.
-
- Subject: [PATCH] add SO_REUSEPORT to export list in Socket.pm for
- better multicast support (resend)
- Branch: maint-5.6/perl
- !> ext/Socket/Socket.pm
-____________________________________________________________________________
-[ 8631] By: jhi on 2001/01/30 23:28:03
- Log: Integrate changes #7514,7813,8113,8144,8397,8398,8490 from mainline.
-
- More AIX lore. (7514, ext/re/hints/aix.pl)
-
- Subject: Re: [PATCH bleadperl] Re: Not OK: perl5.7.0 +DEVEL7706 +Duseperlio on AIX4.[23]
-
- Subject: Re: [PATCH bleadperl] Re: Not OK: perl5.7.0 +DEVEL7706 +Duseperlio on AIX4.[23] (7813, strictly speaking not yet necessary, but harmless and goes well with #8490)
-
- Subject: [ID 20001214.002] Net::Ping patch
-
- Subject: [patch perl@8133] Typo in my Net::Ping doc patch :(
-
- Subject: [PATCH] add ReusePort option to IO::Socket::INET for better multicast support (resend)
-
- Add ReuseAddr as a (preferred) alias for Reuse as we now
- also have ReusePort.
-
- Subject: [PATCH: perl@8482] minor typos in some dl_$foo.xs files
- Branch: maint-5.6/perl
- +> ext/re/hints/aix.pl
- !> ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_dlopen.xs
- !> ext/IO/lib/IO/Socket/INET.pm lib/Net/Ping.pm
-____________________________________________________________________________
-[ 8630] By: jhi on 2001/01/30 23:03:59
- Log: Integrate changes #8215,8587 from mainline: missing pod nits.
-
- read() documentation tweak for 20001121.004.
-
- Subject: [ID 20010128.003] [PATCH] perlre.pod buglet
- Branch: maint-5.6/perl
- !> pod/perlfunc.pod pod/perlre.pod
-____________________________________________________________________________
-[ 8629] By: jhi on 2001/01/30 22:41:57
- Log: Integrate change #8098 from mainline.
-
- fastgetcwd is defined using a glob alias on a $^O dependent basis
- and there was no default assignment or perl subroutine.
- Branch: maint-5.6/perl
- !> lib/Cwd.pm
-____________________________________________________________________________
-[ 8628] By: jhi on 2001/01/30 21:58:52
- Log: Integrate change #7866 from mainline.
-
- File::Temp 0.11.
- Branch: maint-5.6/perl
- !> lib/File/Temp.pm t/lib/ftmp-tempfile.t
-____________________________________________________________________________
-[ 8627] By: jhi on 2001/01/30 21:39:44
- Log: Integrate changes #8075,8086,8228 from mainline.
-
- Darwin is not Windows. (8075,8086)
-
- Subject: [PATCH 5.6.1-TRIAL1 and @8223]; was Re: Perlbug 20000322.006 status +update
- Branch: maint-5.6/perl
- !> lib/CGI.pm lib/Pod/Select.pm lib/Text/ParseWords.pm
- !> pod/perl.pod pod/perl5004delta.pod pod/perl5005delta.pod
- !> pod/perldiag.pod pod/perlembed.pod pod/perlfaq4.pod
- !> pod/perllocale.pod pod/perlmodlib.pod pod/perlretut.pod
-____________________________________________________________________________
-[ 8626] By: jhi on 2001/01/30 21:22:11
- Log: Integrate with tweakery the change #8625 from mainline,
- the multibyte decimal separator fix ("fa_IR locale failure").
- Branch: maint-5.6/perl
- ! embedvar.h perlapi.h
- !> intrpvar.h perl.c perl.h sv.c util.c
-____________________________________________________________________________
-[ 8624] By: gsar on 2001/01/30 20:17:03
- Log: regen_headers
- Branch: maint-5.6/perl
- ! Makefile.SH pod/perlintern.pod
-____________________________________________________________________________
-[ 8623] By: gsar on 2001/01/30 19:42:34
- Log: backout change#7431 and its dependents (causes spurious rebuilds
- of autogenerated files)
-
- fix benign b.t failure
- Branch: maint-5.6/perl
- ! Makefile.SH t/lib/b.t
-____________________________________________________________________________
-[ 8621] By: gsar on 2001/01/30 19:24:47
- Log: integrate changes#8259,8442,8444,8445,8448,8449,8451,8455
- from mainline
-
- Subject: podlators 1.06 released
-
- Subject: [PATCH @8436] Eliminate op_children
-
- (Replaced by #8448) Traces of op_children (cleanup of #8442)
-
- (Replaced by #8448) More op_children traces (cleanup of #8442).
-
- Subject: [PATCH #3 @8436] Re: Eliminate op_children
- Replace #8444 and #8445.
-
- Under 5.005 threads and debugging crashed in Debian 2.2 Linux/x86
- at the setting of the ofs_sv in new_struct_thread() as the
- thr->Tofs_sv (PL_ofs_sv) was still 0xabab.... (this is what
- uninitialized fields are, uh, initialized with),
- SvREFCNT_inc()ing that invited a core dump.
-
- podlators 1.07, from Russ Allbery.
-
- Subject: [PATCH] regcomp.c old feature removal
- From: mjd@plover.com
- Date: 16 Jan 2001 14:43:18 -0000
- Message-ID: <20010116144318.7140.qmail@plover.com>
- Branch: maint-5.6/perl
- +> lib/Pod/Text/Overstrike.pm
- !> MANIFEST bytecode.pl ext/B/B.xs ext/B/B/Asmdata.pm
- !> ext/B/B/Bytecode.pm ext/B/B/C.pm ext/B/B/Concise.pm
- !> ext/B/B/Debug.pm ext/ByteLoader/byterun.c
- !> ext/ByteLoader/byterun.h lib/Pod/Man.pm lib/Pod/Text/Color.pm
- !> lib/Pod/Text/Termcap.pm op.c op.h pod/pod2text.PL regcomp.c
- !> util.c
-____________________________________________________________________________
-[ 8620] By: gsar on 2001/01/30 18:48:32
- Log: integrate changes#8243,8254,8255,8313,8314,8363,8383,8390,8416,
- 8417,8418,8419,8424,8427,8430,8441,8563 from mainline (TODO: b.t
- now fails one test)
-
- Subject: [PATCH] lvalue AUTOLOAD. No, really.
-
- Subject: [PATCH] Interesting syntax idea
- Make opens + bareword assigns do typeglob assigns.
-
- Tests for #8254.
-
- Subject: [PATCH @8269] Continue blocks and B::Deparse
- Make the peephole optimizer to bypass more null ops and
- and rewrite the deparse handling of continue blocks.
-
- Subject: Re: [PATCH @8269] Continue blocks and B::Deparse
- Doc tweak on #8313.
-
- Subject: [PATCH @8344] Fix spurious GVSV OPpOUR_INTRO
-
- Subject: [PATCH @8382] Remove FileHandle/IO dependence in t/io/openpid.t
-
- Subject: [PATCH perl@8269] Opcode.XS, fix memory leak
-
- Subject: RE: [PATCH] [ID 20001223.002] lvalues in list context
- Replace 10000 with RETVAL_MAX, and compute RETVAL_MAX
- according to the platform.
-
- Subject: [PATCH @8404] Consolidated lvalue sub changes
-
- Subject: Re: [PATCH] [ID 20001223.002] lvalues in list context
-
- Rename RETVAL_MAX to RETURN_UNLIMITED_NUMBER.
-
- Subject: B::Concise -- an improved replacement for B::Terse
-
- The B::Terse drop-in replacement wasn't quite drop-in.
-
- The LVRET macro needed an aTHX.
-
- Use the /^Perl_/-less form of is_lvalue_sub().
-
- Subject: [PATCH @8545] [ID 20000808.005] OP_REFGEN as an lvalue
- Branch: maint-5.6/perl
- +> ext/B/B/Concise.pm
- !> (integrate 27 files)
-____________________________________________________________________________
-[ 8616] By: jhi on 2001/01/30 18:20:58
- Log: Integrate partly the change #8615 from mainline, the t/op/each.t
- part isn't applicable to maintperl.
-
- UTF-8 nit from Inaba Hiroto.
- Branch: maint-5.6/perl
- !> pod/perlapi.pod utf8.c
-____________________________________________________________________________
-[ 8613] By: gsar on 2001/01/30 16:39:59
- Log: make it possible to run the tests outside the source tree
- (there's still a dependency on ../lib being the library
- location)
- Branch: maint-5.6/perl
- ! t/base/term.t t/io/tell.t t/lib/dprof/V.pm t/op/flip.t
-____________________________________________________________________________
-[ 8612] By: gsar on 2001/01/30 16:31:12
- Log: perldoc nit on windows
- Branch: maint-5.6/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 8611] By: gsar on 2001/01/30 16:22:54
- Log: canonicalize paths when doing chdir() on windows (or Cwd::getcwd()
- gets weird results)
- Branch: maint-5.6/perl
- ! win32/vdir.h
-____________________________________________________________________________
-[ 8610] By: gsar on 2001/01/30 16:12:45
- Log: avoid uninitialized value warnings
- Branch: maint-5.6/perl
- ! win32/bin/search.pl
-____________________________________________________________________________
-[ 8609] By: gsar on 2001/01/30 16:08:01
- Log: support for -Dusethreads build under HP-UX 10.20 and DCE threads
- library (11.0 and later have pthreads but 10.x don't)
- Branch: maint-5.6/perl
- ! hints/hpux.sh thread.h
-____________________________________________________________________________
-[ 8608] By: gsar on 2001/01/30 15:48:55
- Log: perl's internal variables are not for public consumption,
- move their docs from perlapi.pod to perlintern.pod
- Branch: maint-5.6/perl
- ! intrpvar.h perlapi.c pod/perlapi.pod pod/perlintern.pod
- ! thrdvar.h
-____________________________________________________________________________
-[ 8607] By: gsar on 2001/01/30 15:44:27
- Log: mistakenly branched perl56delta.pod, revert
- Branch: maint-5.6/perl
- - pod/perl56delta.pod
- !> pod/perldelta.pod
-____________________________________________________________________________
-[ 8606] By: gsar on 2001/01/30 14:20:24
- Log: integrate changes#7984,7987,8010 from mainline (gets rid of
- dTHR which has been a noop for a while now, except for the
- compatibility definition in thread.h)
- Branch: maint-5.6/perl
- !> (integrate 45 files)
-____________________________________________________________________________
-[ 8605] By: jhi on 2001/01/30 05:43:58
- Log: Mark the UTF-8 APIs as experimental.
- Branch: maint-5.6/perl
- ! embed.pl pod/perlapi.pod
-____________________________________________________________________________
-[ 8604] By: jhi on 2001/01/30 05:38:40
- Log: Nits from earlier integrates.
- Branch: maint-5.6/perl
- ! lib/Carp/Heavy.pm
- !> sv.c
-____________________________________________________________________________
-[ 8603] By: jhi on 2001/01/30 05:27:26
- Log: Regenerate Porting files.
- Branch: maint-5.6/perl
- ! Porting/Glossary Porting/config.sh Porting/config_H
-____________________________________________________________________________
-[ 8602] By: jhi on 2001/01/30 05:14:59
- Log: Integrate changes #7891,8034,8078,8110,8111,8112,8277,8291,
- 8310,8339,8447,8492,8493,8505,8525: documentation changes.
-
- Subject: Re: perlfaq style changes
-
- Subject: DOC PATCH 5.6.0: -s return value incompletely documented
-
- Subject: [PATCH] docs on NaN
-
- Subject: [patch] perlfaq7
-
- Subject: [ID 20001214.003] [PATCH bleadperl] POSIX::tmpnam() is dangerous
-
- Subject: [PATCH] Re: [ID 20001013.006] XS subs are not define()ed
-
- Subject: [PATCH] open() example in perlfunc.pod
-
- Podify README.mpeix (a new version from the web)
-
- Subject: [PATCH 5.[67].1]; as Re: [PATCH 5.6.1-TRIAL1 and @8223]; was Re: Perlbug 20000322.006 status update
-
- Subject: [PATCH] format and rewording in perlfaq.pod
-
- Subject: [PATCH] API Variable documentation
-
- Memory management calls documentation.
-
- Subject: [PATCH: perl@8482] README.vms URL updates
-
- Subject: Minor typos in perlfaq2.pod
-
- Subject: [PATCH] pod/perlvar.pod
- Branch: maint-5.6/perl
- +> pod/perl56delta.pod
- ! pod/buildtoc.PL pod/perl.pod pod/perltoc.pod
- !> README.amiga README.epoc README.mpeix README.vms
- !> ext/POSIX/POSIX.pod lib/CPAN.pm lib/Carp/Heavy.pm
- !> lib/Win32.pod pod/perlapi.pod pod/perlfaq.pod pod/perlfaq1.pod
- !> pod/perlfaq2.pod pod/perlfaq6.pod pod/perlfaq7.pod
- !> pod/perlfunc.pod pod/perlop.pod pod/perlrequick.pod
- !> pod/perlvar.pod thrdvar.h
-____________________________________________________________________________
-[ 8601] By: jhi on 2001/01/30 04:38:35
- Log: Integrate changes #8036,8096,8253 from mainline:
- hints changes.
-
- Subject: [ID 20001207.004] [PATCH 5.6.0 and 5.7.x] add NCR MP-RAS support
- Subject: [8095] HP-UX 11.00 / cc / 64bitint & 64bitall / perlio
-
- Output the (apparent) version of gcc in Tru64.
- Branch: maint-5.6/perl
- +> ext/POSIX/hints/svr4.pl
- !> MANIFEST ext/POSIX/Makefile.PL hints/dec_osf.sh hints/hpux.sh
- !> hints/svr4.sh t/lib/bigfltpm.t
-____________________________________________________________________________
-[ 8600] By: jhi on 2001/01/30 04:04:01
- Log: Integrate changes #7863,7868,7875,7876,7888,8384,8480 from mainline:
- locale fixes.
-
- sprintf() does not taint since print() does not. (7863,7875,7876,7888)
-
- Debian allows /usr/bin/locale to exist without any locales. (7868)
-
- Allow the locale test needing POSIX and the taint test
- needing IPC::SysV to run under 'minitest' (basically,
- bail out if loading the extension fails). (8384)
-
- Cleanup the locale.t output (8480)
- Branch: maint-5.6/perl
- !> pod/perllocale.pod sv.c t/op/misc.t t/op/taint.t
- !> t/pragma/locale.t
-____________________________________________________________________________
-[ 8599] By: jhi on 2001/01/30 03:51:04
- Log: Missing generated files from #8598.
- Branch: maint-5.6/perl
- ! embed.h global.sym objXSUB.h perlapi.c proto.h
-____________________________________________________________________________
-[ 8598] By: jhi on 2001/01/30 03:41:54
- Log: Integrate change #8555 from mainline, manually integrate parts
- of changes 8452 and 8583.
-
- Subject: [PATCH] utf8.c documentation (8452)
-
- No point in checking the length if the pointer is bogus. (8555)
-
- Introduce bytes_from_utf8() and implement sv_eq() using it,
- tr/// did not handle UTF-8 ranges, \ before a raw UTF-8 character
- produced "Malformed UTF-8 character" warning, "\x{100}\N{CENT SIGN}"
- was malformed. (8583)
- Branch: maint-5.6/perl
- ! embed.pl t/lib/charnames.t t/op/tr.t toke.c
- !> pod/perlapi.pod sv.c utf8.c
-____________________________________________________________________________
-[ 8597] By: gsar on 2001/01/30 02:37:26
- Log: get PERL_OBJECT build going again on windows
- Branch: maint-5.6/perl
- ! embed.h embed.pl global.sym objXSUB.h perlapi.c
- ! pod/perlapi.pod proto.h sv.c
-____________________________________________________________________________
-[ 8586] By: gsar on 2001/01/29 13:43:44
- Log: make the BOM detection code not call tell() until it has to
- (meant to fix esoteric compatibility issues where PL_rsfp
- is overridden)
- Branch: maint-5.6/perl
- ! toke.c
-____________________________________________________________________________
-[ 8580] By: jhi on 2001/01/28 05:16:25
- Log: Revert the change to sv_2pv() done by #8054: Someone who
- did SvNV_set() on a scalar that also happened to be POK,
- followed by sv_2pv() won't get the right coercion anymore.
- [Sarathy]
- Branch: maint-5.6/perl
- ! sv.c
-____________________________________________________________________________
-[ 8579] By: jhi on 2001/01/28 05:15:04
- Log: Remove the #8084 effect: do not allow -Q to be interpreted
- as -&Q(), this is too much wiggle room.
- Branch: maint-5.6/perl
- ! toke.c
-____________________________________________________________________________
-[ 8578] By: jhi on 2001/01/28 05:12:45
- Log: Needed bits of #8439 (should have been in #8576),
- mainly for lval substr().
- Branch: maint-5.6/perl
- ! mg.c pp.c pp_hot.c
-____________________________________________________________________________
-[ 8577] By: jhi on 2001/01/28 05:02:46
- Log: A missing check-in.
- Branch: maint-5.6/perl
- ! utf8.c
-____________________________________________________________________________
-[ 8576] By: jhi on 2001/01/28 04:26:18
- Log: Integrate changes #8425,8436,8439,8517 from mainline.
- The 8439 was not truly integrated because it had too many
- dependencies on the development branch and because it introduced
- concepts too bold for a maintenance branch (such as the qu operator).
-
- Subject: [PATCH perl@8342] -Wformat
-
- Tighten some of the UTF-8 tests a bit.
-
- More UTF-8 patches from Inaba Hiroto. (8439, but only partly)
- - The substr lval was still not okay.
- - Now pp_stringify and sv_setsv copies source's UTF8 flag
- even if IN_BYTE. pp_stringify is called from fold_constants
- at optimization phase and "\x{100}" was made SvUTF8_off under
- use bytes (the bytes pragma is for "byte semantics" and not
- for "do not produce UTF8 data")
- Branch: maint-5.6/perl
- ! t/lib/charnames.t t/op/substr.t toke.c
- !> sv.c t/pragma/utf8.t
-____________________________________________________________________________
-[ 8575] By: jhi on 2001/01/28 04:01:51
- Log: Integrate changes #8378,8379,8385,8386,8405 from mainline.
-
- Subject: One more patch for UTF8 (UTF-8 fixes for 'x' and tr////)
-
- Subject: [ID 20001230.003] UTF-8 tr still hurts
-
- Test cases for #8385 (from Simon's "torture.pl")
-
- Start fixing UTF-8 lval substr() (8405)
- Branch: maint-5.6/perl
- !> doop.c embed.h embed.pl mg.c op.c pod/perlapi.pod pp.c proto.h
- !> regcomp.c regexec.c t/op/substr.t t/op/tr.t toke.c utf8.c
-____________________________________________________________________________
-[ 8574] By: jhi on 2001/01/28 03:09:06
- Log: Integrate changes #8328,8329,8330,8331,8332,8341,8343,8377
- from mainline.
-
- UTF-8 cleanup.
-
- Subject: [PATCH perl@8327] strings with \x{..} in the middle are corrupted
-
- "\x{FF}\xFF" was broken.
-
- Tests for #8329 and #8330.
-
- Add a note about EBCDIC versus UTF-8 to a potential problem spot.
-
- IRIX compiler noticed that the bof initialization might be
- bypassed by control flow.
-
- Make explicit our assumption that (for now) "\x{80}" produces UTF-8.
- Branch: maint-5.6/perl
- !> doop.c op.c pp.c pp_ctl.c pp_hot.c pp_sys.c regcomp.c
- !> regexec.c sv.c t/op/bop.t toke.c utf8.c
-____________________________________________________________________________
-[ 8572] By: jhi on 2001/01/28 02:04:49
- Log: Integrate changes #8267,8272[perlio],8274,8298,8300,8303,
- 8305,8323,8324 from mainline. The 8267,8272, and 8298 were
- not really integrated but instead salvaged by hand
- (they had too many dependencies on the development release
- to be cleanly integratable).
-
- Subject: more UTF8 test suites and an UTF8 patch
-
- Tweak for MULTIPLICITY/USE_PERLIO
-
- Signedness nit.
-
- Turn SvUTF8 off if not required in pp_chr and pp_stringify.
-
- Use the UTF8_XXX macros in is_utf8_char().
-
- Rewrite pp_concat() in terms of sv_catsv(). The . operator
- should now be UTF-8-proof.
-
- Subject: [PATCH perl@8269] scanning two hex-constants
- fails on EBCDIC environment (script length.t)
-
- Add some Unicode chop() tests.
- Branch: maint-5.6/perl
- ! doop.c mg.c pp.c pp_hot.c toke.c utf8.c
- !> sv.c t/op/chop.t utf8.h
-____________________________________________________________________________
-[ 8571] By: jhi on 2001/01/28 00:35:59
- Log: Integrate changes #8090,8093[perlio,only the sv.c tweak],
- 8245,8247,8248,8249,8250,8251,8260,8263,8264,8265 from mainline.
-
- Subject: [PATCH] Re: Breadperl & Tk (sv_utf8_upgrade fixes)
-
- The maxiters upper limit sanity check (guarding against
- non-progress) assumed bytes instead of characters in s///
- and split().
-
- Signedness nit.
-
- sv_catsv() rewrite (8248,8249,8251,8260,8263,8264,8265)
- join() should now be UTF-8-proof.
-
- More split // UTF-8 tests. (8250)
- Branch: maint-5.6/perl
- !> doop.c hv.c pp.c pp_hot.c sv.c t/op/join.t utf8.c utf8.h
- !> util.c
-____________________________________________________________________________
-[ 8570] By: jhi on 2001/01/27 22:15:46
- Log: Integrate changes #7941,7943,7944,7958,7967,7995,7996,7998,
- 8004,8005,8023,8024,8028,8030,8031,8033,8039,8042,8052[perlio],
- 8053[perlio],8054[perlio,+sv.c(-PerlIO_isutf8),+require.t],
- 8084,8204,8244,8333 from mainline.
-
- For -Q where Q might be a one-letter sub name one does no more
- get a warning about an unknown filetest (7941,7943,7944,8084).
-
- Subject: Re: [ID 20001130.011] expression parsing bug ?
-
- Make uv_to_utf8() to zero-terminate its output buffer.
-
- Split off t/op/length.t (7995)
-
- Split off t/op/utf8decode.t (7996)
-
- Remove an unnecessary 'use utf8' from the utf8.t (7998)
-
- Split off t/op/concat.t (8004)
-
- Split off t/op/ver.t (8005)
-
- Document utf8_length(), utf8_distance(), and utf8_hop().
-
- Document utf8_to_uv() better.
-
- Introduce macros for UTF8 decoding (8028,8033).
-
- Add test for reverse() (8030,8031).
-
- Subject: [PATCH] Re: ebcdic <-> ascii tables interjected in uv <-> utf8 considered harmful (8039,8333)
-
- Do not return the Unicode replacement character on UTF-8
- decoding failure.
-
- Typo/thinko in S_scan_const() - seeing high bit sets has_utf8
- not this_utf8 i.e. the output string has one, but don't mess
- with source assumption. (8052,8053)
-
- Tweak t/comp/require.t to add a 'use bytes' to permit its dubious
- writing of BOM to a non-utf8 stream. Fix SvPVutf8() - sv_2pv()
- was not expecting to be called with something that was already
- SvPOK() - (we just fossiked with SvUTF8 bit). Fix that and also
- just use the SvPV macro in sv_2pvutf8() to avoid the issue/overhead.
- (8054)
-
- Recode the naughty binary bytes in utf8decode.t using the \xHH.
-
- Make some panic messages a bit more logical.
- Branch: maint-5.6/perl
- +> t/op/concat.t t/op/length.t t/op/reverse.t t/op/utf8decode.t
- !> MANIFEST doop.c embed.pl lib/ExtUtils/Liblist.pm op.c
- !> pod/perlapi.pod pod/perldiag.pod pp.c pp_hot.c regcomp.c
- !> regexec.c sv.c t/comp/require.t t/op/misc.t t/op/ver.t
- !> t/pragma/utf8.t t/pragma/warn/toke t/pragma/warn/utf8 toke.c
- !> utf8.c utf8.h
-____________________________________________________________________________
-[ 8569] By: jhi on 2001/01/27 19:16:43
- Log: Integrate changes #7750 from perlio and #8566 from mainline.
- Branch: maint-5.6/perl
- !> regexec.c sv.c
-____________________________________________________________________________
-[ 8568] By: jhi on 2001/01/27 18:06:51
- Log: Integrate changes #7355[-doio.c],7691,7744,7753[perlio],
- 7783,7790[perlio],7869,7871,7872,7911,7916,7932,
- 7935[-perlio.c],7936,7959,7965 from mainline.
-
- Change the "big byte" error message to "Wide character".
- (7355, the croak-if-wide-chars-in-print part ignored)
-
- Use UINT64_C().
-
- Introduce Perl_utf8_length().
-
- diff -se shows these as different (7753, forgotten check-ins)
-
- Subject: [PATCH] doop.c - UTF8 tr///
-
- If we use (aTHX_ ...) then put Perl_ on the front.
-
- Make utf8_length() and utf8_distance() to be less forgiving
- about bad UTF-8.
-
- Test line numbers are different with utf8.
-
- No need to scan till infinity, 13 is enough. (7872,7911)
-
- Subject: [PATCH] Tokeniser debugging
-
- Subject: Re: question about retlen in utf8.c:Perl_utf8_to_uv()
-
- Subject: [PATCH perl@7930] toke.c perlio.c -Wformat nits (only toke.c)
-
- Be more careful in Perl_sv_utf8_downgrade().
-
- Use DO_UTF8().
-
- Raw zero bytes in text files confuse at least GNU patch 2.1.
- Branch: maint-5.6/perl
- !> doop.c embed.h embed.pl global.sym handy.h objXSUB.h op.c
- !> perl.c perl.h perlapi.c pod/perlapi.pod pod/perldiag.pod
- !> pod/perlrun.pod proto.h scope.h sv.c t/op/re_tests
- !> t/pragma/utf8.t toke.c utf8.c utf8.h
-____________________________________________________________________________
-[ 8553] By: jhi on 2001/01/26 15:19:39
- Log: Integrate change #7792 from perlio (multiplicity fix),
- fix the AV leak in regex DEBUGGING (tiny part of the
- polymorphic regexp patch #8143).
- Branch: maint-5.6/perl
- ! regcomp.c
- !> scope.h
-____________________________________________________________________________
-[ 8551] By: jhi on 2001/01/26 02:33:19
- Log: Integrate changes #7760,7815,7870,7873,7874,7877,7878,7879,7881,
- 7937,7938,7939,7940,7968,7969,8403,8414,8510 from mainline.
-
- Subject: [PATCH 5.7.0] The first step in removing recursion from the REx engine
-
- Subject: [PATCH 5.7.0] Overeager visited-positions optimizations
-
- Message nit.
-
- BOUND regex opcodes (\b, \B) could try to scan zero length UTF-8.
-
- Debug dump of ANYOFUTF8 was garbage (data from ANYOF).
-
- (the cleanup of unused submatches in regtry() and regcppop())
-
- Fix for 20001130.008 and 20001130.010, the PL_regnpar wasn't
- stored and restored, and thusly was trounced by the utf8 swash
- routines.
-
- use utf8 not required to use \x{}.
-
- Removed two more tests that make no sense in UTF-8 since the test
- data is not in UTF-8.
-
- Get the three different space character classes right under utf8.
-
- Implement ANYOFUTF8 regprop() dumping.
-
- Subject: Re: [ID 20001029.005] Regex error: "cd. (A. Tw)" !~ /\((\w\. \w+)\)/
-
- Document the regex context pushing/popping a bit better.
- Branch: maint-5.6/perl
- +> lib/unicode/Is/Blank.pl lib/unicode/Is/SpacePerl.pl
- !> MANIFEST lib/unicode/mktables.PL pod/perlre.pod regcomp.c
- !> regexec.c scope.h t/op/pat.t t/op/re_tests t/op/regexp.t
- !> t/op/regmesg.t utf8.c
-____________________________________________________________________________
-[ 8549] By: jhi on 2001/01/25 15:22:28
- Log: Undo 6475: { use utf8; chr(128..255) } is better off producing bytes.
- Branch: maint-5.6/perl
- ! pod/perlfunc.pod pp.c t/pragma/utf8.t
-____________________________________________________________________________
-[ 8548] By: jhi on 2001/01/25 15:02:55
- Log: Integrate changes #7997,8063,8492,8547 from mainline.
-
- Subject: Re: STRLEN - what?
-
- Subject: [PATCH] perlguts.pod
-
- Memory management calls documentation.
-
- Layout using tabulator is not a good idea in a pod.
- Branch: maint-5.6/perl
- !> pod/perlguts.pod
-____________________________________________________________________________
-[ 8546] By: jhi on 2001/01/25 14:31:12
- Log: Integrate changes #8188,8189,8208,8209,8210,8212,8374,8388
- from mainline.
-
- Subject: [DOC PATCH: perl@7953] update list of lang. sensitive editors/IDES
-
- Subject: [DOC PATCH: perl@8150, 5.6.1-TRIAL1] update list of lang. sensitive editors/IDES
-
- More Win32 editor/IDE/shell hints.
-
- More Win32 Perling.
-
- Yet another editor edit.
-
- Edit edit edit.
-
- IDE/editor section tweaking.
-
- Few more IDE/editor nits from p5p.
- Branch: maint-5.6/perl
- !> pod/perlfaq3.pod
-____________________________________________________________________________
-[ 8543] By: jhi on 2001/01/25 03:52:08
- Log: Integrate change #8462,8469 from mainline.
-
- In VMS Perl subversion (perl -V) is undef.
- Branch: maint-5.6/perl
- !> configure.com
-____________________________________________________________________________
-[ 8542] By: jhi on 2001/01/25 03:44:55
- Log: Integrate changes #7835,7850,8315,8316 from mainline.
-
- Solaris hints.
- Branch: maint-5.6/perl
- !> hints/solaris_2.sh
-____________________________________________________________________________
-[ 8541] By: jhi on 2001/01/25 03:39:28
- Log: Integrate #8336 from mainline.
- Branch: maint-5.6/perl
- !> hv.c
-____________________________________________________________________________
-[ 8540] By: jhi on 2001/01/25 03:23:50
- Log: Retract #8539.
- Branch: maint-5.6/perl
- ! pod/perlfaq3.pod
-____________________________________________________________________________
-[ 8539] By: jhi on 2001/01/25 03:21:55
- Log: (Retracted by #8540.)
- Branch: maint-5.6/perl
- ! pod/perlfaq3.pod
-____________________________________________________________________________
-[ 8538] By: jhi on 2001/01/25 03:14:07
- Log: Subject: [re-patch: 5.6.1-TRIAL1] was Re: [PATCH 5.6.1-TRIAL1]VMS buildpatches
- From: Peter Prymmer <pvhp@forte.com>
- Date: Mon, 18 Dec 2000 13:10:35 -0800 (PST)
- Message-ID: <Pine.OSF.4.10.10012181249310.410192-100000@aspara.forte.com>
-
- The VMS bits.
- Branch: maint-5.6/perl
- ! configure.com vms/descrip_mms.template
-____________________________________________________________________________
-[ 8537] By: jhi on 2001/01/25 03:06:09
- Log: Integrate #7710,7824,7973 from mainline.
- Branch: maint-5.6/perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH configure.com epoc/config.sh hints/aix.sh malloc.c
- !> regcomp.c sv.c vos/config.alpha.def vos/config.alpha.h
- !> vos/config.ga.def vos/config.ga.h win32/config.bc
- !> win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 8536] By: jhi on 2001/01/24 13:50:20
- Log: Revert the edits made by me so far to the 5.6 branch since
- the TRIAL1 since I did edits when I should have been using
- integrates. Bad programmer. (Will integrate them properly later.)
- Undoes #8347, #8349, #8350, #8351, #8353, #8355, #8376, #8463, #8470.
- The #8353 will not be reapplied at least for now since
- the UTF-8 hash keys need more thinking.
- (The patches #8347, #8354, #8454, #8473 were okay since they
- were original edits made specifically for the 5.6.1-TRIAL1.)
- Branch: maint-5.6/perl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH configure.com embed.pl epoc/config.sh hints/aix.sh
- ! hints/solaris_2.sh hv.c hv.h malloc.c perlapi.c
- ! pod/perlapi.pod pod/perlfaq3.pod proto.h regcomp.c sv.c
- ! t/op/each.t vms/descrip_mms.template vos/config.alpha.def
- ! vos/config.alpha.h vos/config.ga.def vos/config.ga.h
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 8473] By: gsar on 2001/01/18 11:42:31
- Log: unsubmitted trial1 change
- Branch: maint-5.6/perl
- ! Changes
-____________________________________________________________________________
-[ 8470] By: jhi on 2001/01/18 04:16:00
- Log: Subject: [PATCH: perl@8453] Re: subversion undef on VMS (was Re: [ID 20001218.033] Not OK: perl v5.6.1 +v5.6.1-TRIAL1 on VMS_AXP V7.2-1)
- From: Peter Prymmer <pvhp@forte.com>
- Date: Wed, 17 Jan 2001 13:07:11 -0800 (PST)
- Message-ID: <Pine.OSF.4.10.10101171255380.289071-100000@aspara.forte.com>
- Replace #8463.
- Branch: maint-5.6/perl
- ! configure.com
-____________________________________________________________________________
-[ 8463] By: jhi on 2001/01/17 06:12:42
- Log: (Replaced by #8470)
-
- Subject: subversion undef on VMS (was Re: [ID 20001218.033] Not OK: perl v5.6.1 +v5.6.1-TRIAL1 on VMS_AXP V7.2-1)
- From: "Craig A. Berry" <craigberry@mac.com>
- Date: Tue, 16 Jan 2001 23:38:46 -0600
- Message-Id: <p04330103b68ad8cfcbfd@[172.16.52.1]>
- Branch: maint-5.6/perl
- ! configure.com
-____________________________________________________________________________
-[ 8454] By: jhi on 2001/01/16 16:12:39
- Log: Subject: [PATCH: perl-5.6.1-TRIAL1] Win32 Makefile fixes - v2
- From: "Indy Singh" <indy@nusphere.com>
- Date: Wed, 10 Jan 2001 20:17:49 -0500
- Message-ID: <003001c07b6c$524630b0$00957018@roadhog>
- Branch: maint-5.6/perl
- ! win32/Makefile
-____________________________________________________________________________
-[ 8376] By: jhi on 2001/01/09 04:32:32
- Log: integrate changes #7775, #8316, #8316 from mainline
- Branch: maint-5.6/perl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 8357] By: jhi on 2001/01/07 21:16:09
- Log: Update the EPOC cross SDK URL.
- Branch: maint-5.6/perl
- ! README.epoc
-____________________________________________________________________________
-[ 8355] By: jhi on 2001/01/06 20:27:15
- Log: integrate change #8336 from mainline
-
- Scoping of %^H still broken in both perl@8269 and perl-5.6.1-TRIAL1
- Branch: maint-5.6/perl
- ! hv.c
-____________________________________________________________________________
-[ 8354] By: jhi on 2001/01/06 20:24:29
- Log: Subject: [PATCH 5.6.1-TRIAL1 and @8223]; was Re: Perlbug 20000322.006 status update
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Fri, 22 Dec 2000 12:17:38 GMT
- Message-Id: <200012221217.MAA21332@tempest.npl.co.uk>
-
- The patch reformats some long =item lines so they give
- correct output via pod2man | nroff -man
-
- Subject: [PATCH 5.[67].1]; as Re: [PATCH 5.6.1-TRIAL1 and @8223]; was Re: Perlbug 20000322.006 status update
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Tue, 2 Jan 2001 15:35:03 GMT
- Message-Id: <200101021535.PAA15161@tempest.npl.co.uk>
-
- Here is a _further_ patch which corrects a few more errors:
- * an empty C<=item> in CPAN.pm
- * patching the wrong file (pod/perlamiga.pod not README.amiga)
- * leaving empty C<=item>s which formatted incorrectly
- * over long C<=item>s revealed by latest patch to Pod::Man
- Branch: maint-5.6/perl
- ! README.amiga lib/CGI.pm lib/CPAN.pm lib/Pod/Select.pm
- ! lib/Text/ParseWords.pm lib/Win32.pod pod/perl.pod
- ! pod/perl5004delta.pod pod/perl5005delta.pod pod/perlapi.pod
- ! pod/perldelta.pod pod/perldiag.pod pod/perlembed.pod
- ! pod/perlfaq4.pod pod/perllocale.pod pod/perlmodlib.pod
- ! pod/perlrequick.pod pod/perlretut.pod pod/perlsub.pod
-____________________________________________________________________________
-[ 8353] By: jhi on 2001/01/06 20:21:10
- Log: integrate changes #7980, 8056, 8057 from mainline
-
- UTF-8 hash keys.
- Branch: maint-5.6/perl
- ! embed.h embed.pl hv.c hv.h perlapi.c proto.h t/op/each.t
-____________________________________________________________________________
-[ 8352] By: jhi on 2001/01/06 20:18:44
- Log: Forgotten from #8438.
- Branch: maint-5.6/perl
- ! epoc/epocish.h
-____________________________________________________________________________
-[ 8351] By: jhi on 2001/01/06 20:18:12
- Log: Forgotten from #8347.
- Branch: maint-5.6/perl
- ! config_h.SH
-____________________________________________________________________________
-[ 8350] By: jhi on 2001/01/06 20:00:19
- Log: Thinko in #8347.
- Branch: maint-5.6/perl
- ! regcomp.c
-____________________________________________________________________________
-[ 8349] By: jhi on 2001/01/06 18:05:30
- Log: Copy the FAQ3 IDE section from the development branch,
- changes originally by Peter Prymmer.
- Branch: maint-5.6/perl
- ! pod/perlfaq3.pod
-____________________________________________________________________________
-[ 8348] By: jhi on 2001/01/06 18:03:02
- Log: EPOC updates for TRIAL1.
-
- Subject: [5.6.1 trial1] EPOC update
- From: Olaf Flebbe <O.Flebbe@science-computing.de>
- Date: Sun, 31 Dec 2000 16:04:52 +0100 (CET)
- Message-ID: <Pine.LNX.4.02.10012311603040.14097-100000@milkyway.science-computing.de>
-
- Subject: epoc patch2 for perl-5.6.1-trial1
- From: Olaf Flebbe <O.Flebbe@science-computing.de>
- Date: Sat, 6 Jan 2001 13:55:53 +0100 (CET)
- Message-ID: <Pine.LNX.4.02.10101061355220.26469-100000@milkyway.science-computing.de>
- Branch: maint-5.6/perl
- ! README.epoc epoc/config.sh epoc/createpkg.pl epoc/epoc.c
- ! epoc/epocish.c
-____________________________________________________________________________
-[ 8347] By: jhi on 2001/01/06 17:29:10
- Log: integrate changes #7710,7824,7973 from mainline,
- plus VMS nits from Peter Prymmer and Dan Sugalski.
-
- AIX 4.2 (using latest patchlevels on 20001130) has a broken bind
- library (getprotobyname and getprotobynumber are outversioned by
- the same calls in libc, at least for xlc version 3.
-
- Add HAS_SBRK_PROTO.
-
- Fixes for signedness warnings noticed by VMSperlers.
- Branch: maint-5.6/perl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! configure.com epoc/config.sh hints/aix.sh malloc.c regcomp.c
- ! sv.c vms/descrip_mms.template vos/config.alpha.def
- ! vos/config.alpha.h vos/config.ga.def vos/config.ga.h
- ! win32/config.bc win32/config.gc win32/config.vc
-
-____________________________________________________________________________
-[ 8182] By: gsar on 2000/12/18 09:53:47
- Log: delete spurious files
- Branch: maint-5.6/perl
- - lib/CGI/eg/make_links.pl lib/CGI/eg/wilogo.gif vos/config.def
- - vos/config.h vos/config_h.SH_orig
-____________________________________________________________________________
-[ 8181] By: gsar on 2000/12/18 09:46:08
- Log: regen perltoc
- Branch: maint-5.6/perl
- ! pod/buildtoc.PL pod/perl.pod pod/perlapi.pod pod/perltoc.pod
-____________________________________________________________________________
-[ 8180] By: gsar on 2000/12/18 09:20:27
- Log: integrate changes#7924..7926,7946,7952 from mainline
-
- A test works better if it has the right 1..$n output.
-
- All the core library users of Class::Struct seem to be
- using "use Class::Struct 'struct';" instead of the bare
- "use Class::Struct;", which isn't documented in Class::Struct.
- This can't be right.
-
- Make the Class::Struct import() wiser.
-
- Upgrade to CPAN 1.59_51, from Andreas König.
-
- Subject: Re: long shell lines
- Split overly long shell command lines.
- Branch: maint-5.6/perl
- !> lib/CPAN.pm lib/CPAN/FirstTime.pm lib/ExtUtils/MM_Unix.pm
- !> lib/File/stat.pm t/lib/class-struct.t
-____________________________________________________________________________
-[ 8179] By: gsar on 2000/12/18 08:55:54
- Log: integrate changes#7889,7890,7900,7903,7904,7907,7910,7917,
- 7918,7919,7988,8907 from mainline (various)
-
- Subject: [ID 20001127.004] White space problem in perlamiga.pod
-
- Subject: [PATCH perl@7825] Re: [ID 20001122.006] weird behaviour of $|
-
- Subject: [PATCH] perlcc.PL cleanups
-
- Subject: [PATCH] Updating perltie.pod for arrays
-
- Subject: [ID 20001128.002] what's the point of example code if it is buggy?
- Subject: Re: [PATCH] Updating perltie.pod for arrays
- Subject: Re: [PATCH] Updating perltie.pod for arrays
-
- One more perltie.pod nit from Casey R. Tweten.
-
- Subject: [PATCH] $^O win32 -> MSWin32
- plus similar nits for vms, err, VMS, and UNICOS.
-
- Subject: Re: Minor suggestion for Sys::Syslog [PATCH]
- More checking in case someone has broken their services or
- protocol databases.
-
- Make "use Class::Struct 'struct';" work again (broken by #7617);
- add a test for Class::Struct.
-
- Integrate the "skip" messages to explain().
-
- Subject: [PATCH: perl@8892] treat unicoding and null bytes in op/append.t
- Branch: maint-5.6/perl
- +> t/lib/class-struct.t
- !> MANIFEST README.amiga ext/Sys/Syslog/Syslog.pm gv.c
- !> lib/Class/Struct.pm pod/perlipc.pod pod/perltie.pod
- !> t/lib/syslfs.t t/op/lfs.t utils/perlcc.PL
-____________________________________________________________________________
-[ 8178] By: gsar on 2000/12/18 08:16:30
- Log: avoid redefinition warnings on windows due to sys/socket.h getting
- #included before win32.h
- Branch: maint-5.6/perl
- ! win32/include/sys/socket.h
-____________________________________________________________________________
-[ 8177] By: gsar on 2000/12/18 05:24:04
- Log: make regen_headers; fix POSIX.xs problems; remove outdated
- code from sys/socket.h that makes build fail now
- Branch: maint-5.6/perl
- ! ext/POSIX/POSIX.xs global.sym objXSUB.h perlapi.c
- ! pod/perlapi.pod
- !> win32/include/sys/socket.h
-____________________________________________________________________________
-[ 8176] By: gsar on 2000/12/18 05:20:17
- Log: update Changes
- Branch: maint-5.6/perl
- ! Changes patchlevel.h
-____________________________________________________________________________
-[ 8175] By: gsar on 2000/12/18 04:57:48
- Log: integrate changes#7643,7646..7649,7651..7654,7658,7659,
- 7661..7665,7667..7669,7671,7673,7676,7677,7681..7683,
- 7689..7697,7699..7701,7703,7705,7714,7715,7718..7723,
- 7725,7726,7729..7732,7737,7748,7749,7758,7759,7761,7773,
- 7775,7776,7782,7785..7787,7804,7807,7808,7810,7811,7816,
- 7823,7825,7838
-
- Subject: Re: [PATCH] README.solaris
-
- Add getpagesize() probing, on non-UNIX guess 'undef'.
-
- Simplify the getpagesize() unit by dropping the
- pagesize probe since it's nowadays slightly more
- complicated because of sysconf(). (Note: if some
- platform really needs the -lPW for getpagesize,
- I just broke it.)
- TODO: a new pagesize unit.
-
- Subject: [PATCH] fwd: Re: [ID 20001105.011] Perl 5.6.0 documentation glitch
-
- MachTen doesn't really do mmap() and munmap().
- Subject: [PATCHES Bleadperl] Re: PerlIO - what all of you can all do.
-
- More README.solaris updates from Andy Dougherty.
-
- Copy the s// information of README.hpux also to the perlrun.
-
- Add HAS_FSYNC, lack noticed by Nicholas Clark.
-
- Add a metaconfig unit for fsync.
-
- Subject: [ID 20001112.004] man perlfunc omits tell()'s error return
-
- Many subdocumented return values of the IO extension now documented.
- ungetc and write still left subdocumented.
- Subject: [PATCH] (was Re: IO::Handle::ungetc)
-
- Document tell() on special streams.
-
- Subject: [ID 20001112.006] IO::Seekable::getpos doesn't check for fgetpos() failure
-
- Subject: [ID 20001112.007] sfio's sftell isn't ftell
-
- Couple of tests from #7660 salvaged.
-
- Tweak the definition of the bit complement on UTF-8 data:
- if none of the characters in the string are > 0xff,
- the result is a complemented byte string, not a (UTF-8)
- char string. Based on the summary in
- Subject: Re: [ID 20000918.005] ~ on wide chars
- This should give us the maximum backward (pre-char string)
- compatibility and utf8 compatibility. The other alternative
- would be to limit the bit complement to be always byte only,
- taking the least significant byte of the chars.
-
- Cleanup messy #ifdef.
-
- Typos in #7667.
-
- Declare reg_data like reg_substr_data.
-
- Placate nervous compilers that see longer than ints switch()ing.
-
- Remove the new two tests of lib/io_xs for now, they seem to
- fail under perlio on some platforms.
-
- Subject: Re: [ID 20001112.008] perlio.c's PerlIO_getpos ingores error return
-
- Subject: [ID 20001113.003] utf8_to_uv on malformed utf returns wrong values
-
- Subject: tiny typo in perl5db.pl
-
- Subject: some additions for makefiles for win32 (for perl@7674)
-
- Hoist the duplicated socket/netdb include logic to perl.h;
- undef SETERRNO in case SOCKS has defined it. Based on:
- Subject: [ID 20001114.002] Code-Cleanups concerning SOCKS5 and Solaris
-
- Regen Configure.
-
- Defined INT64_C() and UINT64_C() unless defined by <inttypes.h>
- (a macro to define signed and unsigned integer constants).
-
- Use UINT64_C().
- Subject: [ID 20001114.006] 5.7.0-7680 Solaris 8, 64 bit, utf8 patch
-
- Use u_int32_t for the size of hash_cb(), not size_t.
- Subject: [ID 20001114.003] Solaris 8, 64 Bit DB_file patch
-
- Quit utf8_to_uv() instantly if curlen == 0.
-
- Subject: [PATCH: perl@7674] updates to README.os390
-
- Subject: [PATCH: perl@7674 + Scott-Thoennes] hush warnings about malformed EBCDIC text
-
- EBCDIC tweaks.
- Subject: [PATCH: perl@7674 ++] fixes for warnings and regmesg (reprise)
-
- Linenumber fix.
-
- SOCKS has its own USE_THREADS, based on
- Subject: [ID 20001114.002] et. al. bugfix followup
-
- UINT64_C() work continues.
-
- Detypo.
-
- The type of the hash_cb() size argument is tricky.
-
- Add fwalk() probe to the configuration files and regen perltoc.
-
- Subject: perllocale.pod changes
-
- Avoid an infinite loop in VMS when utils scripts are run
- with no arguments, from Charles Lane.
-
- Subject: Re: Bug in Carp::Heavy/5.6.0?
-
- For Solaris use64bitall the stdchar needs a little bit of help.
-
- The long double hints can be here or there.
-
- Test tweak for the open pragma.
-
- Also the 64bitall hints can be either here or there.
-
- As surmised the #7719 wasn't a good move.
-
- Subject: Fix for 20000409.001
-
- Subject: Fix for 20000815.006
- It's really 20000518.006.
-
- Subject: [PATCH 5.6.0 README.win32] very minor typos
-
- Subject: Fix for README.amiga (20000323.033)
-
- Explain in more detail the {} syntax ambiguousity.
- Subject: [PATCH] Re: [ID 20001117.003] map { "$_", 1} @array is syntax error
-
- Sparc 64-bit pack() fix from Jens Hamisch.
-
- Upgrade to CPAN.pm 1.58_93 (the RC1 for 1.59), from Andreas König.
-
- Subject: podlators 1.05 available
-
- Subject: [ID 20001118.006] [PATCH] perl@7707 djgpp/config.over, hints/dos_djgpp.sh and Storable.pm
-
- Subject: [perl 7711: EPOC] updates
-
- Make certain MacOS Classic has NO_ENVIRON_ARRAY.
-
- Miraculous typo.
-
- sysseek() instead of seek().
-
- Solaris hints tweaks.
-
- Assume SOCKS is broken in all 64bitall platforms, not just Solaris.
- This may be overly harsh but until proven otherwise, we think this
- way, or until we have a simple test for Configure (having to start
- up servers is does not count as simple) to check for the problems.
-
- Remove the shared object before attempting to create
- (by linking) a new one. E.g. in AIX not removing
- becomes quite painful if one tries to do more than one
- build in the same tree (an interrupted build, for example),
- since the AIX' shared dynaloader seemingly keeps the shared
- objects open and therefore 'busy' for quite a while, even when
- nobody is using the objects, leading into link failures.
-
- Subject: [ID 20001120.010] typo in lib/Cwd.pm broke Cwd::chdir
-
- Subject: DOC PATCH 5.6.0 perlreftut
-
- Subject: [PATCH: perl@7777] add system locale testing for VMS
-
- Subject: [PATCH] Test.pm POD peculiarity
-
- Subject: [ID 20001120.002] [PATCH] io_sock.t fails without 'localhost'
-
- Subject: [ID 20001120.003] [PATCH] io_udp.t fails without 'localhost'
-
- Subject: Re: perl@7777
- Detypoing.
-
- Subject: [PATCH: perl@7777] make VMS' test.com tail compatible w/ unix
-
- Go ahead and #include <unistd.h> in perl.h.
-
- Subject: [PATCH perl@7795] small cleanup task for test suite
-
- Subject: Re: av.c patch (having slight problems)
- unshift() speedup.
-
- Reach back one higher up when searching for PERL_SRC.
- Branch: maint-5.6/perl
- +> lib/File/Spec/Epoc.pm
- !> (integrate 88 files)
-____________________________________________________________________________
-[ 8174] By: gsar on 2000/12/18 03:53:09
- Log: integrate changes#7602,7604..7611,7614,7616..7619,7621..7623,
- 7625..7629,7631..7634,7637,7639,7642 from mainline
-
- Fix for the tie-refhash string table leaks.
-
- Subject: [patch perl@7595] VMS configure.com tweak
-
- More careful detection of how well NVs and UVs mix.
- Subject: [PATCH] Re: NV preserving UV (wasRe: [ID 20001007.002] Not OK: perl v5.7.0 +DEVEL7158 on armv4l-linux-64int 2.2.17-rmk1 (UNINSTALLED))
- Added some SIGFPE paranoia.
-
- Forgot to bump the line numbers in #7601.
-
- Subject: PATCH std stdio for (Free)BSD
-
- Deleting $ENV{PATH} in VMS is not recommendable.
-
- Locale buglets.
- Subject: RE: Locales support (setlocale) fixes
-
- Do not test UTF-8 locales since that the tests would require
- polymorphic regexen.
-
- Subject: [PATCH bleadperl] Re: Patch 7533 prevents malloc.c from compiling on MachTen
-
- A missing aTHX_.
-
- Subject: [ID 20001108.013] spelling
-
- Subject: [PATCH] Class::Struct at compile time
-
- Make deleting for %ENV work for (newer versions of) VMS,
- from Craig A. Berry.
-
- Forgot from #7618.
-
- More VMS moves on environment handling, from Charles Lane.
-
- Remove unused extra arguments.
-
- Typo in an ifndef.
- Subject: Re: [PATCH 5.7.0] better messages from malloc()
-
- Subject: [PATCH: perl@7613] updates to Porting/pumpkin.pod
- All except the "cow orker" change.
-
- The generated boot_* headers are wrong. Pickier compiler,
- such as KAI C++ will refuse to compile the resulting perlmain.
- Subject: [ID 20001109.005] Bug in minimod.pl, perl 5.6.0
-
- There's no =head3.
-
- Disable only the tests 99 and 166 for UTF-8 locales.
-
- Missing dTHXs.
- Subject: RE: perl@7595 builds not on cygwin
-
- Subject: Re: bash -c exit and linux hints
-
- Various doc oddball characters.
- Subject: [ID 20001106.004] Perl 5.6.0 bugs
-
- Subject: [PATCH] IO::Seekable pod
-
- Amdahl UTS hints updates.
- Subject: [ID 20001109.016] Trouble going from 5.4 to 5.6
-
- Explain better why certain regex tests are skipped.
- Subject: Re: tests skipped: unknown reason
-
- Subject: [PATCH] README.solaris
-
- Subject: [PATCH perl@7638] cygwin port
- Branch: maint-5.6/perl
- +> README.solaris
- !> (integrate 26 files)
-____________________________________________________________________________
-[ 8173] By: gsar on 2000/12/18 03:37:02
- Log: integrate changes#7472,7474..7478,7481,7485,7489,7493,7494,7496,
- 7497,7499..7503,7505..7507,7509..7513,7515..7523,7526..7534,
- 7536,7540,7542,7544..7546,7549,7553,7556,7557,7559,7561..7563,
- 7565,7568..7572,7576,7578..7589,9592..7594,7596..7601 from mainline
-
- Better create a true mailing list for the repository keepers.
-
- Subject: [ID 20001027.007] uniq array in perlfaq
-
- De-quoted-unreadable to ISO Latin 1.
- (There's one ISO-2022-JP name in Changes5.004.)
-
- Have only one master list of AUTHORS, drop unmaintained MAINTAIN.
-
- The #7476 needs a MANIFEST change, too.
-
- Add also emailless people.
-
- UTF-8 decoder tweak.
-
- Make \x{...} consistently produce UTF-8.
- Subject: Re: \x{...} is confused
-
- Subject: [Chris Winters <cwinters@intes.net>] patch to ExtUtils::Manifest
-
- Add a perlbug flag, -A, to avoid acknowledgement messages.
- Subject: PATCH (Re: [ID 20001030.008] OK: perl v5.7.0 +DEVEL7445 on i586-linux 2.2.16 (UNINSTALLED))
-
- Use Errno magic.
- Subject: [ID 20001030.009] [PATCH] ftmp-mktemp failing
-
- Subject: [PATCH: perl@7483] CRLF fix for cgi-function.t tests
-
- Subject: [PATCH: perl@7483] fix coded control chars in cgi-html.t
-
- Subject: [ID 20001030.001] 5.7.0-7489: Null-Pointer reference in mg.c
-
- Be more lenient on bad UTF-8 when doing bit arithmetics.
- Subject: Re: [ID 20000918.005] ~ on wide chars
- (The ord() part of the patch skipped.)
-
- Subject: perlfaq style changes
-
- AUTHORS tweaks.
-
- Whitespace style tweak. Was originally going to see to
- Subject: PATCH (Re: PerlIO - Configure tweak for Linux/glibc?)
- but that had already been taken care of.
-
- The compiler is either gcc or cc, from Tom Bates.
-
- The osname has been lowercased by now, from Tom Bates.
-
- The NonStop-UX libraries have a novel way to say NaN.
-
- printf UVs the correct way, noticed by Robin Barker.
-
- Subject: [PATCH] startperl to respect versiononly
-
- AUTHORS updates.
-
- Subject: [ID 20001031.004] Uninitialized auto variable in regcomp.c
-
- Subject: [ID 20001101.001] Net::Ping icmp odd $bytes
-
- Subject: [ID 20001005.004] doc bug: perlsec misleading re file output
-
- Generalize the Camel wording.
- Subject: Re: perlfaq style changes
-
- Subject: [ID 20001005.006] Documentation -- description of qr//
-
- C.pm part of
- Subject: [ID 20001010.001] [Daniel.Stutz@astaro.de: perlcc and C.pm in perl-5.7.0]
-
- Locale warning explanation tweak.
-
- Subject: [ID 20000904.004] perlsec Manual Page Incorrect Doing "Safe Backticks"
-
- Make the POSIX::setuid and POSIX::setgid to really call setuid()
- and setgid() because they were just changing $< and $( which means
- only changing the real uid/gid, as opposed to changing both
- real and effective ids. (The alternative way could have been
- in POSIX.pm to change $> and $), too, but making a direct call
- to the C API feels cleaner.) Fixes the bug
- Subject: [ID 20000904.005] POSIX::setuid() Doesn't Call setuid()
-
- Expand %Config variables and %ENV variables only if
- so requested during build time using the
- PERL_BUILD_EXPAND_CONFIG_VARS and PERL_BUILD_EXPAND_ENV_VARS.
- Not expanding makes relocating distributions easier.
-
- More tweaking on the #7522 theme.
-
- Test::Harness revealed buglets in the new DynaLoader.
- Subject: [ID 20001102.001] Not OK: perl v5.7.0 +DEVEL7523 on i686-linux 2.2.16a (UNINSTALLED)
-
- Add Tie::RefHash::Nestable (lives in Tie/RefHash.pm),
- fix a autovivification bug in Tie::RefHash, add tests for both.
- Subject: Re: Tie::RefHash: use hash refs as keys in nested hashes
-
- Detpyo.
-
- recv() can fail and return undef.
- Subject: [ID 20001102.003] Net::Ping patch: "Bad arg lenght" error appears if host is unreachable
-
- Fix the problem discussed in
- Subject: [ID 20001015.004] Fwd: Tie::SubstrHash -- bug & fix (all Perl versions)
- originally from Linc Madison. Also Andreas König's comments
- taken into account. Some other problems with Tie::SubstrHash
- fixed: didn't croak when the table exceeded the requested number
- of entries (as documented) but instead when the number of entries
- exceeded the size of the table, a croak() had an unnecessary \n,
- didn't have a CLEAR method, documented that there is no exists().
- Didn't fix to be strict-proof because the module uses &foo; and
- dynamic scope. Added a test script exercizing both first tamely
- the basic functionality, and then the failure cases reported by
- Linc Madison.
-
- Subject: [PATCH] Perl@7504, vms/gen_shrfls.pl
-
- The #7521 touched things it shouldn't have.
-
- Subject: [PATCH 5.7.0] better messages from malloc()
-
- Subject: Re: README.aix
-
- Add FCNTL_CAN_LOCK.
- Subject: Re: [ID 20001030.011] Not OK: perl v5.7.0 +DEVEL7481 on VMS_AXP V7.1 (UNINSTALLED)
- Subject: Re: [ID 20001030.011] Not OK: perl v5.7.0 +DEVEL7481 on VMS_AXP V7.1 (UNINSTALLED)
-
- Locale tweakery. Add test case for bug id 20000809.003 to op/misc,
- create a "fast path" for locale name probing using "locale -a"
- if available, squash finally hopefully the s?printf resetting
- the numeric locale (since, IIUC perllocale, it never shouldn't).
-
- More Changes tweakery.
-
- Dying is too strict here, better just skip.
-
- Subject: Locales support (setlocale) fixes
- Modified quite a bit to be more portable.
-
- Configure would use a bad $myuname from an old config.sh.
- Subject: [PATCH 5.6.1-to-be and 5.7.x] Very old Configure myuname bug
-
- Fix for
- Subject: [ID 20001004.006] undef is never tainted
- An undef read from a slurped file was not tainted.
-
- Fix for
- Subject: [ID 20001004.007] taint propogation is inconsistent
- The culprit was sv_setsv() which was rather blindly
- propagating taint, which lead to behaviour where if
- a tainted anon hash value was seen all the hash values
- from then on at that level became tainted, or at any
- upper levels in the case of nested anon hashes.
-
- Test tweak: show also the failed locales.
- Subject: [ID 20001105.001] Not OK: perl v5.7.0 +DEVEL7523 on i86pc-solaris 2.8
-
- A fix of sorts for 20000329.026, a better error message
- for a missing "use charnames" when using the \N{...}.
-
- Subject: [Corrected/tested PATCH] Re: [ID 20001102.008] Not OK: perl v5.7.0 +DEVEL7503 on i686-linux 2.2.16
-
- Add =pod to be tidy.
-
- Fix for bug id 19990615.008, pos() unset during s///ge.
-
- Add a note for future generations about bug id 20000229.006.
-
- Use -dM for gcc (the suggested patch did it only for Linux,
- but I think it can be generalized).
- Subject: Re: connect and $!{EINPROGRESS} pb (was [ID 20001030.010] [PATCH] io_multihomed.t failing)
-
- opmini.o can linger from Configures past.
-
- Document that the evaled syntax errors cause scalar leaks.
-
- Fix for
- Subject: [ID 20000728.005] perl -P broken
- (hopefully). The fix is also not complete, it seems to break
- BOM swallowing for libc5 systems, but until someone figures
- out a way to do this without ftell(), this will do.
-
- AUTHORS updates.
-
- Subject: Re: rsync'ed patches vs. rsync'ed source
-
- Admit that the test leaks scalars.
-
- Sanitize the environment further.
-
- VOS updates from Paul Green.
-
- Document %ENV = () portability issues.
-
- Make the stdio test program of 7427 less noisy while being
- compiled so that Digital UNIX wouldn't get both
- d_stdio_ptr_lval_nochange_cnt and d_stdio_ptr_lval_sets_cnt
- undefined. This makes perlio happy.
-
- glibc5 detection by __GNU_LIBRARY__.
-
- %ENV note tweaks from Dan Sugalski.
-
- Varargs don't always work too well if one puts an unsigned
- char on the stack and pop an unsigned quad off the stack.
- Subject: Re: [ID 20001103.002] Not OK: perl v5.7.0 +DEVEL7523 on os2-64int-ld-2.30 (UNINSTALLED)
-
- Subject: Pod updates
-
- Fake support of holey files in win/dosish platforms.
- Subject: SDBM_File under MS-Windows95/98 does not work correctly. (APR#1302)
-
- A doc addition for bug id 20001105.019, beware \p.
-
- Tweak #7587.
-
- Subject: [PATCH perl@7573] configure.com and st-lock.t changes for
-
- perlhack updates from H.Merijn Brand.
-
- Subject: [PATCH perl@7573] cygwin port
- Synchronize with Cygwin 1.1.5.
-
- Bad thinko in #7581 (I used the test program with the expanded
- values as-is).
-
- Make perlbug not insist on dumping to a file when stdout isn't a tty.
- Subject: [PATCH] perlbug.PL
-
- Overrideable keys, each, pop, push, shift, splice, unshift.
- Subject: [PATCH] prototyped functions that should be overrideable
-
- Try to avoid flockless and emulationless places.
- Branch: maint-5.6/perl
- +> t/lib/tie-refhash.t t/lib/tie-substrhash.t
- - MAINTAIN
- !> (integrate 111 files)
-____________________________________________________________________________
-[ 8171] By: gsar on 2000/12/18 02:49:24
- Log: integrate changes#7447,7448,7450,7454,7456,7457,7460,7462,
- 7465..7471 from mainline
-
- Remains of the old UTF-8 API, utf8_to_uv_chk(): didn't link
- in platforms that strictly require all the symbols being present
- at link time.
-
- Subject: [PATCH: perl@7446] restore missing d_stdio_cnt_lval to VMS
-
- Subject: [ID 20001025.011] [PATCH] t/io/open.t perl@7369[ 7350] breaks VMS perl
-
- Subject: [ID 20001026.006] C<use integer; $x += 1> gives uninitialized warning
-
- Subject: [PATCH] todo
-
- Subject: [ID 20001027.002] Patch 7380 followup - Perl_modfl *must* be defined
-
- Use $sort, $uniq (and $tr) consistently as wondered
- by Nicholas Clark.
-
- Too enthusiastic editing in #7460.
-
- The reëntrant version shouldn't be needed unless USE_PURE_BISON.
-
- Upgrade to CPAN 1.58_55.
- Subject: CPAN.pm status
-
- Subject: [ID 20001027.005] Nit in perlos2.pod - space needs deleted on line 118
-
- Make target reordering to avoid pointless re-makes.
- Subject: Re: Total re-make of 'make okfile' after 7451 ?
-
- Subject: [ID 20001027.010] [PATCH] Add info on building CPAN modules to README.dos
-
- Subject: DOC PATCH 5.6.0
-
- Add the repository doc by Malcolm, Sarathy, and by Simon,
- name as suggested by Michael Bletzinger <mbletzin@ncsa.uiuc.edu>.
- Branch: maint-5.6/perl
- +> Porting/repository.pod
- !> Configure MANIFEST Makefile.SH README.dos README.os2
- !> config_h.SH configure.com embed.h embed.pl handy.h lib/CPAN.pm
- !> lib/CPAN/FirstTime.pm perl.h pod/perlfunc.pod pod/perltodo.pod
- !> pp.c proto.h t/io/open.t t/op/assignwarn.t toke.c
-____________________________________________________________________________
-[ 8169] By: gsar on 2000/12/18 02:33:34
- Log: integrate changes#7416,7417,7420..7422,7424,7426..7429,7431..7433,
- 7435..7441,7445 from mainline
-
- Make the UTF-8 decoding stricter and more verbose when
- malformation happens. This involved adding an argument
- to utf8_to_uv_chk(), which involved changing its prototype,
- and prefer STRLEN over I32 for the UTF-8 length, which as
- a domino effect necessitated changing the prototypes of
- scan_bin(), scan_oct(), scan_hex(), and reg_uni().
- The stricter UTF-8 decoding checking uses Markus Kuhn's
- UTF-8 Decode Stress Tester from
- http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
-
- Run vms/vms_yfix.pl, should have done that after changing
- perly.c in #7382.
-
- Subject: [PATCH 5.7.0] static linking with uninstalled perl
-
- (Replaced by #7440.)
- Subject: Re: [ID 20001022.001] Not OK: perl v5.7.0 +DEVEL7368 on i686-linux 2.2.16
-
- Fix the bug ID 20001024.005, the bug introduced by #7416.
-
- Subject: Re: [ID 20001023.003] PATCH perlfaq5 [perl-current]
-
- Fix the bug reported in
- From: andreas.koenig@anima.de (Andreas J. Koenig)
- Also make is_utf8_char() stricter.
-
- Missed the header file changes from #7425.
-
- Check if stdio supports tweaking lval and cnt simultaneously.
- Subject: PATCH (Re: PerlIO - Configure tweak for Linux/glibc?)
-
- Stratus VOS updates from Paul Green.
-
- Podify README.epoc and README.vos.
-
- Add targets to Makefile.SH, most importantly
- 'regen_all' which also remembers to update vms/perly*.
-
- Subject: Minor update to find2perl, for portability
-
- Subject: patch 7416 breaks sv.c on AIX and HP-UX (patch included)
-
- Subject: [ID 20001024.007] [PATCH] "Dump local *FH" causes SEGV
-
- Rename UTF8LEN() to be UNISKIP(), too confusing to have
- UTF8LEN() and UTF8SKIP().
-
- Allow poking holes at the UTF-8 decoding strictness.
-
- Continue the internal UTF-8 API tweaking.
- Rename utf8_to_uv_chk() back to utf8_to_uv() because it's
- used much more than the simpler API, now called utf8_to_uv_simple().
- Still not quite happy with API, too much partial duplication
- of functionality.
-
- A new version of making the syslog test more robust.
- (Replaces #7421.)
- Subject: Re: [ID 20001022.001] Not OK: perl v5.7.0 +DEVEL7368 on i686-linux 2.2.16
-
- buildtoc target tweaks.
-
- Integrate with vmsperl #7430 by Charles Bailey:
-
- Cleanup from prior patch (Charles Lane?):
- - improve handling of MFDs in Basename and Path
- - default to no xsubpp line # munging when building debug images
- Branch: maint-5.6/perl
- +> vos/config.alpha.def vos/config.alpha.h vos/config.ga.def
- +> vos/config.ga.h vos/configure_perl.cm vos/install_perl.cm
- !> (integrate 67 files)
-____________________________________________________________________________
-[ 8168] By: gsar on 2000/12/18 02:05:49
- Log: integrate changes#7512,7733 from mainline (regex bugfixes)
-
- Subject: [ID 20001031.004] Uninitialized auto variable in regcomp.c
- From: Martin Husemann <martin@duskware.de>
-
- Subject: [PATCH 5.7.0] restore match data on backtracing
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: maint-5.6/perl
- !> regcomp.c regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 8167] By: gsar on 2000/12/18 01:55:22
- Log: integrate changes#7858,7986 from mainline
-
- C<foreach my $x ...> in pseudo-fork()ed process may diddle
- parent's memory; fix it by keeping track of the actual pad
- offset rather than a raw pointer (this change is probably also
- relevant to non-ithreads case to avoid fallout from reallocs of
- the pad array, but is currently only enabled for the ithreads
- case in the interests of minimal disruption to existing "well
- tested" code)
-
- fix open(FOO, ">&MYSOCK") failure under Windows 9x (problem is
- due to the notorious GetFileType() bug in Windows 9x, which fstat()
- tickles)
- Branch: maint-5.6/perl
- !> embed.h embed.pl global.sym objXSUB.h perlapi.c pp_ctl.c
- !> proto.h scope.c scope.h sv.c t/op/fork.t win32/perlhost.h
- !> win32/win32.c win32/win32.h win32/win32sck.c
-____________________________________________________________________________
-[ 8166] By: gsar on 2000/12/18 01:52:59
- Log: integrate changes#7626,7632,7717,7738,7814,7817,7902,7912,7915
- from mainline (xsubpp and ExtUtils::LibList fixups, various
- other small items)
-
- The generated boot_* headers are wrong. Pickier compiler,
- such as KAI C++ will refuse to compile the resulting perlmain.
- Subject: [ID 20001109.005] Bug in minimod.pl, perl 5.6.0
-
- Various doc oddball characters.
- Subject: [ID 20001106.004] Perl 5.6.0 bugs
-
- Subject: [PATCH] Re: 20001101.003 PDL
-
- Subject: [PATCH 5.7.0] etags broken again
-
- Subject: [PATCH 5.7.0] Liblist finally works
-
- Subject: [PATCH 5.7.0] Liblist returns found libraries
-
- Subject: [PATCH] Re: 5.6 bug: split /^/ implies /m modifier (from CLPM)
-
- Subject: [PATCH 5.7.0] OUT keyword for xsubpp
-
- Subject: Re: [PATCH 5.7.0] OUT keyword for xsubpp
- OUT keyword nits.
- Subject: Re: [PATCH 5.7.0] OUT keyword for xsubpp
- OUT and IN_OUT documentation.
- Branch: maint-5.6/perl
- !> emacs/cperl-mode.el emacs/ptags lib/ExtUtils/Liblist.pm
- !> lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MakeMaker.pm
- !> lib/ExtUtils/xsubpp lib/unicode/syllables.txt minimod.pl
- !> pod/perlfunc.pod pod/perlxs.pod pod/perlxstut.pod t/op/split.t
- !> win32/bin/search.pl
-____________________________________________________________________________
-[ 8165] By: gsar on 2000/12/18 01:28:45
- Log: integrate changes#7533,7563,7611,7623 from mainline (various
- malloc.c embellishments)
- Branch: maint-5.6/perl
- !> malloc.c pod/perldiag.pod
-____________________________________________________________________________
-[ 8164] By: gsar on 2000/12/18 01:23:33
- Log: integrate changes#7419,7806,8129 from mainline (various h2xs
- fixups)
- Branch: maint-5.6/perl
- !> utils/h2xs.PL
-____________________________________________________________________________
-[ 8163] By: gsar on 2000/12/18 01:17:50
- Log: integrate changes#7493,7599,7803 from mainline (various perlbug
- fixups)
- Branch: maint-5.6/perl
- !> Makefile.SH utils/perlbug.PL
-____________________________________________________________________________
-[ 8162] By: gsar on 2000/12/18 00:25:43
- Log: always export Perl_deb() (it is required by re.xs whether
- Perl is built with or without -DDEBUGGING)
- Branch: maint-5.6/perl
- ! makedef.pl
-____________________________________________________________________________
-[ 8161] By: gsar on 2000/12/18 00:23:38
- Log: integrate change#7414 from mainline
-
- Undo the basename() part of #7412 since the lib/basename
- tests would need upgrading too.
-
- squelch two tests in tr.t that rely on tr/// paranoia change
- that's not in 5.6.x
- Branch: maint-5.6/perl
- ! t/op/tr.t
- !> lib/File/Basename.pm
-____________________________________________________________________________
-[ 8160] By: gsar on 2000/12/18 00:05:30
- Log: missing change in previous integrate
- Branch: maint-5.6/perl
- !> README.aix
-____________________________________________________________________________
-[ 8159] By: gsar on 2000/12/18 00:03:38
- Log: integrate changes#7205..7210,7212,7214..7219,7222,7223,7225,7226,
- 7228,7230..7241,7243,7346,7347,7350..7354,7356,7358..7360,7362,
- 7363,7365..7368,7370..7374,7376..7386,7391,7393..7399,7404..7408,
- 7410..7413 from mainline
-
- Introduce the man[24-8] variables, from Andy Dougherty.
-
- Upgrade to CPAN 1.58, from Andreas König.
-
- An updated EBCDIC tr patch.
- Subject: Re: [PATCH: perl@7181] op/tr tests on OS/390
-
- Subject: [PATCH] 5.6.0 & 5.7.1, VMS fixes
-
- Two thirds of
- Subject: Proposed patches, Install.pm getopts.pl termcap.pl
- The Install.pm changes will be submitted separately because
- they need some work and discussion still.
-
- The Install.pm third of
- Subject: Proposed patches, Install.pm getopts.pl termcap.pl
-
- Subject: [PATCH: perl@7181] was: Re: off to a bad start on fixing regression tests
-
- Subject: [PATCH 5.7.0] IVs in mtats
-
- Subject: [PATCH 5.7.0] Perl API for mstats
-
- Ilya implemented the memory profiling API.
-
- In Amdahl UTS "struct sv" is defined by a system header,
- <ksync.h>.
-
- Slight tweak of the code to appease Amdahl UTS cc.
-
- Amdahl UTS doesn't seem to do dynaloading.
-
- Use UTF8SKIP(), from Simon Cozens.
-
- Thinko in #7222.
-
- op/sprintf.t patch for OS/390 (and any other host with limited
- floating-point exponent length)
- Subject: Re: [ID 20001006.014] Not OK: perl v5.7.0 +DEVEL7158 on os390 05.00 (UNINSTALLED) [PATCH bleadperl]
-
- Tweak #7225.
- Subject: Re: [ID 20001006.014] Not OK: perl v5.7.0 +DEVEL7158 on os390 05.00 (UNINSTALLED) [PATCH bleadperl]
-
- Subject: RFC: a (temporary?) way around utf8.pm for EBCDIC
-
- Needs to be conditional on SunOS 4.
- Subject: [Pach 5.7.0@7229] Removing -ldb from the core build
-
- Test cases for bug id 20000323.056 (the bug seems to be fixed).
-
- Add test for bug id 20000427.003 (which seems to have
- been fixed) (also duplicate as 20000427.004, though
- with a higher severity). Move one utf8 from op/append
- to pragma/utf8, tag the tests with bug ids.
-
- Document FNCASE=y as discussed in the bug 20000902.009.
-
- split() utf8 fixes. Should fix both 20001014.001 and 20000426.003.
- The problem was that rx->minlen was in chars while pp_split()
- thought it would be in bytes.
-
- Make ~(chr(a).chr(b)) eq chr(~a).chr(~b) on utf8.
- Subject: [PATCH] Re: [ID 20000918.005] ~ on wide chars
-
- Fix few quad issues, which for example broke chr(~chr(~0)) for UTF8.
-
- Fix a couple of compiler-noted nits in #7235.
-
- Tweak the test of #7235.
-
- One more ~utf8 tweak.
-
- -w cleanup.
- Subject: Re: Problems with bleadperl
-
- Subject: small pod patch
-
- Subject: [PATCH perlguts.pod] Document offset hack
-
- Add Charles Lane.
-
- Add the capability to include/exclude branches.
-
- Subject: [ID 20001016.012] [PATCHes Included]OK: perl v5.7.0 on dos-djgpp djgpp
-
- Detect early whether the std streams have gone bad.
- Subject: PATCH (was Re: [ID 20001016.007] Not OK: perl v5.7.0 +DEVEL7228 on i586-linux 2.2.16 (UNINSTALLED))
-
- More IoTYPE sprinkling.
-
- Workaround for a sfio bug where the stream error indicator
- is not cleared as documented.
- Subject: PATCH (was Re: [ID 20001016.007] Not OK: perl v5.7.0 +DEVEL7228 on i586-linux 2.2.16 (UNINSTALLED))
-
- Clarify documentation on 'use bytes'.
- Subject: Re: What does 'use bytes' "mean" ?
-
- Show the failed remote port, instead of the failing line number.
- Subject: [PATCH 5.6.1 Debugger] More diagnostics
-
- Make Cwd more bulletproof in chrooted environments.
- Subject: [ID 20001018.001] Fix for Cwd.pm (chroot)
-
- Subject: Pod patch for Devel::Peek
-
- Subject: Re: [ID 20001013.008] perl 5.6.0 on AIX 4.3.2 w/GCC 2.95.2
-
- Borland C fstat() never saw the fd as writable.
- Subject: fix for Borland's weak "stat" (perl@7211)
-
- Missing change from #7362.
-
- Subject: [PATCH 5.7.0] Re: [ID 20001018.008] flip-flop bug when there's no <FH>
-
- Add the test case for the bug id 20000730.004 which seems
- to have been fixed by now.
-
- Fix of sorts for bug id 20000901.092. There seems to be no trace
- of a 'pmshort' anywhere in the B, so the offending line was simply
- removed.
-
- Subject: Re: [ID 20001013.008] perl 5.6.0 on AIX w/GCC
-
- Subject: PATCH do_print has 2 PerlIO_error()s
-
- NonStop-UX patches from Tom Bates <tom.bates@compaq.com>
-
- Typo noted by Mark Lutz.
-
- Subject: PATCH CR+LF should be "\cM\cJ" in perlop
-
- In the latest compiler builds cccdlflags must not become -fpic,
- from Wilfredo Sánchez.
-
- Subject: [PATCH] Perl 5.6.0/5.7.0, vms/gen_shrfls.pl update
-
- Subject: [PATCH] Perl 5.6.0/5.7.0 enable DProf test for VMS
-
- SOCKS function redefinitions need prototypes, too, otherwise
- for example 32 bit versus 64 bit differences cause a lot of
- problems. Part of
- Subject: [ID 20001016.017] [jens: 5.7.0 Solaris 8, 64 Bit, Workshop 6.0 Compiler]
-
- Portability tweak on #7377.
- Subject: Re: [nick@cow.org.uk: [ID 20001020.004] Not OK: perl v5.7.0 +DEVEL7368 on i386-freebsd-64all 4.1-stable (UNINSTALLED)]
-
- Don't write double values through long double pointers,
- based on a part of
- Subject: [ID 20001016.017] [jens: 5.7.0 Solaris 8, 64 Bit, Workshop 6.0 Compiler]
-
- Reëntrancy fix.
- Subject: [PATCH perl@7229] Rentrant parser and yylex()
-
- Make scan_num() reëntrant, as suggested in
- Subject: [PATCH perl@7229] Rentrant parser and yylex()
-
- Fix for ID 20001020.006, concatenating an unset submatch
- with utf8 resulted in "Modification of a read-only value".
-
- Fix for ID 20000915.011, IO::Select warning for an undefined fd.
-
- The #7383 was right only in the context of the original bug report,
- not in more general case.
-
- Update Changes.
-
- Testcases for a #7383,#7385 related bug.
- Subject: PATCH Re: [ID 20001020.006] "$2$utf8" == modification of read-only-variable
-
- Subject: [PATCH@blead Tie/Array.pm] Re: [ID 20001020.002] Tie::Array SPLICE method is buggy
-
- Tweak the Is* definitions of Unicode character classes
- to better match the official categorizations; embrace
- the official categorizations; add the combining marks
- as alpha (and -numeric); fix DCinital (a typo and edito)
- to be DCmedial.
-
- Hints tweak from Anton Berezin.
-
- Subject: installman go-faster stripes
- Subject: Re: installman go-faster stripes
-
- Subject: [ID 20001021.003] updated hints/openbsd.sh
-
- Subject: [PATCH bleadperl] -MO=C falls over on package <none>
-
- Subject: PATCH $Config::Config{ldlibpthname} in ext/DynaLoader/DynaLoader_pm.PL
-
- Subject: [PATCH] Re: [ID 20000121.007] XXX documentation in man ExtUtils::MakeMaker
-
- Doc patch.
- Subject: [ID 19991128.002] \&{'foo'} not caught by strict refs
-
- Retract #7404 with a patch from Robin Barker, via Andy Dougherty.
-
- Subject: Re: [ID 20001021.005] SEGV with regex match
-
- Subject: Re: [20000731.007] potential syntax error not detected [PATCH]
-
- The change #7187 was not so good on VMS.
- Subject: [PATCH perl@7369] VMS perldoc.PL fix for double quoted temp filename
-
- Subject: [PATCH: perl@7386] miscellaneous typos in 3 pods
-
- Miscellaneous MacOS Classic library updates from Matthias Neeracher.
-
- Document PERL_INSTALL_ROOT of #7210.
- Branch: maint-5.6/perl
- +> README.aix hints/nonstopux.sh lib/unicode/Is/DCmedial.pl
- +> t/lib/tie-splice.t
- - lib/unicode/Is/DCinital.pl
- !> (integrate 112 files)
-____________________________________________________________________________
-[ 8156] By: gsar on 2000/12/17 22:49:13
- Log: integrate changes#7069..7077,7079,7081..7087,7090,7092,7093,
- 7096..7104,7109..7117,7119..7124,7126,7128,7129,7133,7134,
- 7136..7139,7141..7146,7148,7149,7151,7153..7155,7157,7158,
- 7160,7161,7164,7165,7169..7178,7180..7191,7193..7197,7199,
- 7201,7204 from mainline
-
- Remove vestiges of tr//CU.
- Subject: [ID 20000912.009] perlunicode.pod still mentions tr///CU
- Subject: Re: [ID 20000912.009] perlunicode.pod still mentions tr///CU
-
- The return value of setlocale must be copied away.
- Subject: [ID 20000913.001] Heap corruption in Perl_init_i18nl10n
-
- Allow chop() and chomp() to be overridden.
- Subject: [PATCH] Re: [ID 20000911.006] I can override glob but not chop?
-
- Hints optimization.
- Subject: Minor nit
-
- Subject: [PATCH] de-wall t/README
-
- Subject: Re: Two advertising clauses need to be removed
-
- Batch of UTF-8 patches from Simon Cozens.
-
- Fix for a parsing bug, not for the original bug.
- Subject: Re: [ID 20000910.005] Another segfault with regexes.
-
- Compilation warnings and an error.
-
- Subject: File::Find 5.7.0 POD nits
-
- Subject: [PATCH perl-5.7.0] continued -Wformat support
-
- The one that got away.
-
- Subject: Re: perl@7078
-
- UTF8-encoded version of 256 is 0xc4 0x80; test that a char is
- convertable to bytes by checking it doesn't go above 0xc3
- Subject: Re: perl@7078
-
- Replace #7084 with
- Subject: Re: perl@7078
-
- We don't need to count the high bit bytes, a boolean is enough.
-
- Subject: [PATCH] utf8.c apidoc
-
- Subject: Re: perl@7078
-
- Botched the #7090 check-in.
-
- Fix for the charnames.t failures from Spider Boardman.
-
- Re-instate Perl_utf8_to_uv without checking parameter - added in change 7075.
- i.e. rename Simon's function to Perl_utf8_to_uv_chk, change all calls to it
- to use new name and add Perl_utf8_to_uv() as a wrapper which calls it passing
- 0 to checking to get the warning.
-
- Subject: [PATCH] Nits in perlmod.pod
-
- Subject: Re: Trapping by opmask sets strange parser state [PATCH]
-
- Subject: Re: unicode support and perl [ID 20000901.097]
-
- Subject: Re: unicode support and perl [ID 20000901.097]
-
- Subject: [PATCH perl@7065] another VMS my_fwrite() fix for Storable
-
- Subject: [PATCH] Re: [ID 20000915.010] Infinite loop with -MO=Deparse
-
- Subject: [ID 20000917.002] 5.7.0 and blead@7095 make html makes man
-
- Subject: [PATCH@blead] Fix some recursion in overload.pm
-
- s/Robin Parker/Robin Barker/
-
- Subject: [PATCH] Fix aliasing of tied filehandles
-
- Subject: Re: [ID 20000912.008] substr replacement of tainted data (bug)
-
- Subject: Re: [PATCH 5.005_64 missed]
-
- SOCK_DGRAM and listen() do not mix as reported in
- Subject: [ID 20000930.001] Bug in perl 5.00503 IO::Socket
- The patch for 5.7.0+ had to be reengineered, though.
-
- Subject: DOC PATCH 5.6.0
-
- Subject: [PATCH 5.7.0] Minor optimization in re_intuit_start
-
- Document the issue (is not a syntax error, kind of)
- Subject: Re: [ID 20000901.011] the list (1,,3) ought to be a syntax error
-
- Subject: [ID 20000928.002] perlcc & ByteCode.pm option mismatch
- Did not apply cleanly, manual intervention was needed.
-
- Subject: [PATCH] DLL not restartabke with threaded perl
-
- Inside require() $^S was always left undefined.
- Subject: Re: Tiny 2-byte change to fix debugger's eval bug
-
- Subject: [PATCH pod/perlop.pod] Documentation glitch in magic autoincrement.
-
- OpenBSD flags tweak from Todd C. Miller, tweaked some more by Abigail.
-
- Regen headers.
-
- Subject: [PATCH 5.7.0] Epoc update
-
- Introduce NO_ENVIRON_ARRAY (and USE_ENVIRON_ARRAY) defines
- as suggested by Olaf Flebbe and Nick Clark.
-
- Subject: [ID 20000915.007] Not OK: perl v5.7.0 +DEVEL7092 on os2-64int-ld 2.30 '(UNINSTALLED)'
-
- Misplaced else.
-
- Scale down the VMS message boxes, by Charles Lane.
- Fix for ID 20000903.009, workaround at
- http://www.xray.mpe.mpg.de/mailing-lists/vmsperl/2000-09/msg00039.html
-
- Subject: [ID 20001003.006] B::Debug not -w clean
-
- Test harness update to sync with the new perlcc,
- from Simon Cozens.
-
- One remaining nit less at the VMS mailbox sizing.
-
- Subject: [PATCH: 7131] PWPASSWD problem for passwd less pwd's
-
- It is possible to have no hosts database at all. Pointed out in
- Subject: [PATCH: 7131] PWPASSWD problem for passwd less pwd's
-
- Subject: [PATCH 5.7.0] h2xs not working
- Subject: [PATCH 5.7.0] h2xs not documenting the created module
-
- Subject: [PATCH] 5.6.0 & 5.7.0 VMS TZ fix for VMS6.2 and earlier
-
- Subject: perlhack.pod Patch for Externals Tools
-
- Subject: [PATCH perlrun.pod] Re: [ID 20000930.002] perlrun nor perldelta mention -s modification
-
- Subject: Re: [PATCH 5.7.0] h2xs not documenting the created module
-
- Enable disabling scripts installation by Configure -Uinstallscripts,
- suggested by H. Merijn Brand.
-
- Code around the stat-on-a-pipe-returns-a-mode-of-zero bug
- reported several times by Dominic Dunlop, for example in
- ID 20000315.008. Patch from Dominic. Patch affects at
- least MachTen, and possibly other oldish BSDs. Should not
- break non-broken platforms (tested on LinuxPPC).
-
- Regen toc.
-
- Subject: Re: Questions about Tie::Array and perl modules
- Bug reported and fix suggested by Philip D Crow <pcrow@hertz.com>.
-
- Patch from Simon Cozens to avoid using utf8 routines in EBCDIC.
-
- Tweak #7153.
-
- IO::Handle->syswrite() did not handle length omission
- like CORE::syswrite() does.
- Subject: [Fwd] IO::Handle, syswrite and arguments
- The original patch from andrew@ugh.net.au.
-
- Also the $ccflags is needed for the C compiler check.
- Subject: Configure (check for C-compiler)
-
- Eliminate $Is_VMS code from the test.
- Subject: Re: [ID 20001004.005] Not OK: perl v5.7.0 +DEVEL7129 on VMS_AXP V7.1
-
- Fix bug in #7157 (s/cflags/ccflags); moved the -o foo
- as the first option of cc/ld because of ultrapicky compilers
- (e.g. OS/390 R2.5)
-
- Change the version number of Tie::Handle in the core to 4.0,
- the (unrelated) Tie::Handle in CPAN will remain at 3.0.
- Subject: Note on Tie::Handle
-
- UTF8ize split() so that the cloned substrings get the UTF8
- flag of the original scalar. Problem reported by Simon Cozens.
-
- save_re_context() could reset PL_curcop to freed memory, causing core
- dumps in code such as C<use CGI::Carp; use something_that_calls_die;>
-
- Subject: PATCH 5.6 perldebguts grammar cleanup
-
- Add a todo note about overloadable assertions.
-
- on Windows, LoadLibrary() could load an extension DLL multiple
- times if forward slashes are used in the path
-
- on Windows, cwd strings in the environment should be of the
- form =X:=X:\foo instead of =X=X:\foo\
-
- on Windows, avoid potential exception (could happen if MSVCRT isn't
- being used) when closing a socket handle
-
- avoid nonportable example code
-
- Windows9x doesn't support link(), despite what Config.pm
- might think
-
- pod nit
-
- Change #7160 had a nasty typo.
-
- Warn about unknown scripts.
- Subject: Re: ideas? patches? [PATCH bleadperl]
-
- on Windows, clean targets might not work under some flavors of the shell
-
- tweak for change#7173
-
- Make eq work again with utf8 (disabling the upgrading
- should no more be necessary since the copies of the
- scalars are upgraded, not the scalars themselves).
- Takes care of ID 20001009.001. (The claimed length()
- bug in 20001009.001 seems bogus to me.)
-
- Subject: [PATCH: perl@7159] various VMS cleanup issues + CXX configure
-
- Upgrade to CGI.pm 2.74, from Lincoln Stein.
-
- Upgrade to podlators 1.04, from Russ Allbery.
-
- Subject: [PATCH 5.6.0] Re: [ID 20001009.004] SEGV from sprintf in a thread
-
- Quote the temp file name, needed in Win32 because the
- default name unfortunately contains spaces, shouldn't
- hurt elsewhere.
- Subject: FW: perldoc fails if $TEMP contains spaces
-
- Subject: RE: [ID 19990803.001] README.win32 suggestions
-
- Subject: [ID 20000720.004] ExtUtils::MakeMaker finds wrong version of perl
-
- Subject: Re: utf8 concat, mg_get
-
- Subject: [PATCH: perl@7181] perlebcdic.pod updates and corrections
-
- Subject: [PATCH: perl@7181] op/tr tests on OS/390
-
- Subject: [PATCH: perl@7181] ver.t v string tests for os/390
-
- Use the versiononly instead of the installscripts,
- retract the changes 7146 and 7147.
-
- Reapply Andy's patch and regen Configure.
-
- Add the test case for #7190, from the original bug report
- by Andreas König.
-
- Remove duplicated code.
-
- SvPV() (via mg_get() of sv_2pv()) can update the UTF8ness of the SVs.
-
- restore change#7202
- Branch: maint-5.6/perl
- !> (integrate 121 files)
-____________________________________________________________________________
-[ 8153] By: gsar on 2000/12/17 21:23:05
- Log: integrate changes#7017..7019,7021..7025,7027..7036,7038,7039,
- 7041..7044,7046..7048,7050..7061,7063,7066..7067,7069..7074
- from mainline
-
- Document the SvIOK_.*UV().
-
- Update Unicode todo list.
-
- Guard against bad string->int conversion for quads.
-
- Subject: small apidoc fix
-
- Subject: [PATCH] Tie::StdHandle did not know about 3-arg open
-
- Subject: [PATCH] Tied filehandle documentation
-
- Subject: [PATCH] Modernize Opcode.pm documentation
-
- Make Data::Dumper (non-XS) to work with changed semantics of ref().
- Subject: Re: Undocumented(?) change to "ref" semantics in 5.7.0
- [applied even though said semantics didn't change in 5.6.x]
-
- Subject: [PATCH@7014] \G in non-/g is well-defined now ... right?
-
- Subject: Re: [ID 20000905.001] Assertion failed: file "toke.c", line 202
-
- Fix the URL, but the server is still missing in action.
- Subject: [ID 20000905.002] perlfaq1.pod URL error
-
- Subject: [ID 20000903.001] \w in utf8-strings
-
- Fix the ccversion detection for 5.1 and beyond.
- Subject: [ID 20000907.007] Not OK: perl v5.7.0 +devel-7030 on alpha-dec_osf 4.0f
-
- Subject: [PATCH 5.7.0] perl5db.pl [Was: Re: Debugger question]
-
- Subject: [ID 20000904.008] Tiny fix for perldiag
-
- Subject: Re: [ID 20000906.004] segfault with bad perl statement
-
- Subject: Re: [ID 20000907.007] Not OK: perl v5.7.0 +devel-7030 on alpha-dec_osf 4.0f
-
- Subject: [ID 20000908.002] perlipc documentation bug.
-
- Subject: [PATCH lib/Benchmark.pm]
-
- Re-allow vec() for characters > 255.
- Subject: [PATCH] Re: [ID 20000907.005] Not OK: perl v5.7.0 +devel-7030 on alpha-dec_osf-perlio 4.0f (UNINSTALLED)
-
- Do away with memory models cruft. Sorry, PDP users.
-
- Continue #7041.
-
- Subject: [PATCH (or RFC): 5.7.0] make the ran_tests intermediate file 8.3 friendly
-
- Subject: [PATCH: 5.7.0] proper setting for isnan for DECC 5.3
-
- Upgrade to CPAN 1.57_65, from Andreas König.
-
- Upgrade to podlators-1.03 (Pod::Man 1.07 and Pod::Text 2.05),
- by Russ Allbery.
-
- Silence t/pod/*.t about alternate quote-mappings now implemented
- by Pod::Text, from Brad Appleton.
-
- Modern Borland C now seems to have anon unions for info.wProcessorArchitecture
- Subject: borland C++ win32.c tweak
-
- C<@a = @b = split(...)> optimization coredumps under ithreads
- (missed a spot when fixing up op_pmreplroot hack for ithreads)
-
- Document the SvUTF8*().
-
- Subject: [PATCH] Perl 5.6.0, 5.7.0 ... vms/test.com to eliminate spurious NL's in test output
-
- Subject: RE: [Patch 5.7.0] Removing -ldb from the core build
-
- Do in VMS as the #7054 does.
-
- Subject: [patch] perlfunc.pod -- POSIX::sigpause should be POSIX::pause
-
- Subject: [ID 20000911.008] Not OK: perl v5.7.0 +DEVEL7048 on os2-64int-ld 2.30 (UNINSTALLED)
-
- Subject: [patch: perl@7045] vms updates
-
- Test for the #7049.
- Subject: Re: [PATCH] Re: [ID 20000910.001] Not OK: perl v5.7.0 +DEVEL7044 on i686-linux 2.2.16-raid (UNINSTALLED)
-
- Break up the myconfig lines a bit.
- Subject: perlbug/perl -V output format
-
- Subject: [ID 20000911.011] misplaced typemap in perlxs.pod
-
- The #7054 truncated Configure badly.
-
- change#6327 didn't quite go all the way to enable USE_SOCKETS_AS_HANDLES
- initialization in all the threads on Windows
-
- Allow for whitespace between "#" and "line" in cpp output.
- Subject: [PATCH] Re: Problems compiling bleadperl on Unicos 9
-
- Remove vestiges of tr//CU.
- Subject: [ID 20000912.009] perlunicode.pod still mentions tr///CU
-
- The return value of setlocale must be copied away.
- Subject: [ID 20000913.001] Heap corruption in Perl_init_i18nl10n
-
- Allow chop() and chomp() to be overridden.
- Subject: [PATCH] Re: [ID 20000911.006] I can override glob but not chop?
-
- Hints optimization.
- Subject: Minor nit
-
- Subject: [PATCH] de-wall t/README
-
- Subject: Re: Two advertising clauses need to be removed
- Branch: maint-5.6/perl
- !> (integrate 75 files)
-____________________________________________________________________________
-[ 8152] By: gsar on 2000/12/17 20:30:11
- Log: integrate changes#6945,6947,6949..6954,6956,6958,6959,6961,
- 6964..6972,6977..6981..6984,6987,6988,6991,6994,6997,
- 6999..7001,7003..7005,7007,7009,7011,7012 from mainline
-
- Don't attach -ld to the archname if pointless.
-
- Document UNTIE in a very minimalistic way.
-
- POSIX doesn't report long double values under -Duselongdouble
- when the long doubles are "real" (bigger than doubles).
-
- More author updates.
-
- Try to deduce NV_MAX. Really should be Configure fodder.
-
- :: not allowed in pathnames, change to .
- Subject: [PATCH perl@6938] cygwin port
-
- Forget about NV_MAX (#6951). Various floating point tweaks,
- ideas from Eric Fifer, Yitzchak, Alan, and Spider.
-
- Move the Solaris 7 scan to use64bitall, make the
- failure to find 64-bot sparc libc to mention the
- possibility of being in an intel, from Lupe and Alan.
-
- Regen perltoc.
-
- AUTHORS tweaks, from Peter Prymmer.
-
- More address tweaking.
-
- Small tweaks all over.
-
- File::Temp patches from Andreas König,
-
- Subject: [PATCH perl@6962] 2 more vms.c fix-ups and status
-
- Subject: CPAN.pm beta 1.57_57 for the core
-
- Part of the solution.
- Subject: Re: [ID 20000807.004] [PATCH] conditional breakpoints leak memory
-
- Subject: [PATCH@6961] Fix misleading example in perlretut.pod
-
- Subject: [PATCH lib/overload.pm] Sanaty checking of arguments to overload::constant
-
- Add the overload warnings to perldiag.
-
- Drop unused argument.
- Subject: Re: [ID 20000831.034] overload::constant and number of arguments.
-
- Subject: Nit in Configure (bleadperl@6961)
-
- Update to PodParser 1.18, from Brad Appleton.
-
- Subject: [ID 20000901.017] [PATCH] Basic test failure in an untidy world
-
- Subject: [PATCH: 6948] add SCNfldbl to configure.com
-
- Document UNTIE. Also tweak implementation to suppress the 'inner references'
- warning when UNTIE exists and instead pass the cound of extra references to
- the UNTIE method.
-
- Rename the PRIElfbl, PRIX64, etc, to be PRIEUfldbl, PRIXU64,
- so that case-ignoring systems like DCL can tell them from
- PRIefldbl and PRIx64. Apply Merijn's ccversion patches.
-
- Subject: Re: [PATCH lib/overload.pm] Sanaty checking of arguments to overload::constant
-
- Feature ordering tweak.
-
- Regen perltoc.
-
- Subject: [PATCH] Fix vec() / utf8 (was Re: bitvec ops still broken with utf8 -- or not?)
-
- Subject: Re: [PATCH perl@6962] 2 more vms.c fix-ups and status
-
- Subject: http:// in L<>
-
- Detypo.
-
- change#6791 accidentally clobbered change#6710, put it back
-
- Only the first line, thank you very much.
-
- Subject: [PATCH: 6996] minimal removal of 8 bit chrs from perlebcdic.pod
- plus rework the http: spots as suggested by Tom Christiansen,
- plus regen perltoc.
-
- Undo part of change 6489 which looks like a bulk edit which
- changed _all_ gv_efullname3() calls to gv_efullname4() calls.
- The supressing of main:: on return from select() is undesirable.
-
- Apparently avoiding the swapping is too costly.
-
- Various Configure nits by Philip Newton,
- plus the ebcdic one by me.
-
- Make certain cc is set before trying to run it.
-
- If overloaded %{} etc. return the object do not loop.
- Thus sub deref { $_[0] } functions if object is wanted type.
-
- Update perlhist.
-
- More %{} and other deref special casing - do not pass to 'nomethod'.
- Branch: maint-5.6/perl
- !> (integrate 59 files)
-____________________________________________________________________________
-[ 8151] By: gsar on 2000/12/17 19:14:38
- Log: integrate changes#6903,6905..6907,6909,6911..6913,6915,6917,6918,
- 6920..6926,6928..6930,6934..6937,6939,6940,6942..6944 from mainline
-
- Subject: [PATCH perl@6889] Chuck Lane's OpenVMS piping improvements
-
- Make the epsilon to be relative, not absolute.
-
- Put back the flags dump as reasoned in
- Subject: Re: [PATCH] Glob dumping
-
- Introduce ccname to keep track of what compiler kind of we have.
-
- Subject: Re: [ID 20000829.020] perl -e 'package; print __PACKAGE__' core dumps
-
- Put back the slice accidentally removed by #6907.
-
- Reset archname and archname64 always, forcing them be
- recomputed at each Configure run, make Configure and
- the hints files agree on the naming of largefiles variables.
-
- Don't say "Perl 5.0 source kit".
-
- Subject: [PATCH] fix misc cast warnings
-
- Subject: typos in pods
-
- NVs not necessarily doubles, as pointed out by Yitzchak.
-
- Subject: [PATCH 6889] add a few ldbl formats to configure.com
-
- Subject: [ID 20000830.036] [DOC] chom?p %hash not documented
-
- Better options for rsync.
-
- Subject: [PATCH perl@6889] fix Storable on VMS by fixing my_fwrite()
-
- Subject: Re: not OK, 6919 on Alpha VMS V 7.1 w/ DECC 6.0-001
-
- Subject: [PATCH] Re: UNTIE method
-
- A better fix for the Socket building problem from Craig Berry.
-
- Retract the dummy test, skip the security tests (instead of failing),
- explain what the warnings mean.
-
- Heap decorruption.
- Subject: [PATCH] Fix for miniperl coredump on Solaris with -Duselongdouble
-
- Update to Unicode 3.0.1.
-
- Missed one Unicode file.
-
- Subject: Re: typos in pods
-
- The #6929 was too skimpy.
-
- sscanf() may be the only way to read long doubles from strings.
-
- Reveal Borland's isnan.
- Subject: build with BC++ tweak
-
- Issue useful diagnostic on unknown pod commands.
- Subject: [PATCH lib/Pod/Man.pm] Re: [ID 20000830.048]
-
- Subject: [PATCH] Re: [ID 20000830.048] Not OK: perl v5.7.0 +DEVEL6938 on i686-linux 2.2.13
-
- Clarify the third case of ftmp-security warnings.
-
- Make -Dusemorebits find long doubles in Solaris.
-
- Wrap the test in eval.
- Branch: maint-5.6/perl
- +> lib/unicode/BidiMirr.txt lib/unicode/CaseFold.txt
- +> lib/unicode/PropList.txt lib/unicode/README.perl
- +> lib/unicode/UCD301.html lib/unicode/UCDFF301.html
- +> lib/unicode/Unicode.301 vms/vmspipe.com
- - lib/unicode/Props.txt lib/unicode/UCD300.html
- - lib/unicode/Unicode.300 lib/unicode/Unicode3.html
- !> (integrate 305 files)
-____________________________________________________________________________
-[ 8146] By: gsar on 2000/12/17 18:09:08
- Log: update Changes
- Branch: maint-5.6/perl
- ! Changes
-____________________________________________________________________________
-[ 7899] By: gsar on 2000/11/28 06:32:55
- Log: reintegrate files missed by change#7895
- Branch: maint-5.6/perl
- +> ext/ByteLoader/bytecode.h utils/Makefile
- - utils/perlbc.PL
-____________________________________________________________________________
-[ 7897] By: gsar on 2000/11/27 18:22:47
- Log: can't integrate these two files, for some reason
- Branch: maint-5.6/perl
- - ext/ByteLoader/bytecode.h utils/Makefile
-____________________________________________________________________________
-[ 7895] By: gsar on 2000/11/27 18:11:21
- Log: integrate changes#6763..6766,6770,6773,6775..6776,6778,6780,
- 6782..6791,6793..6814,6816,6818..6822,6824..6830,6838..6849,
- 6757..6890,6892..6901 from mainline
-
- Bytecompiler patches from Benjamin Stuhl.
-
- More bytecompiler.
-
- Subject: [PATCH blead] B:: missing dependency
-
- Subject: [PATCH: 6757] configure.com updates and syslog build
-
- Long double Gconvert fixes from Yitzchak Scott-Thoennes
- and Spider Boardman.
-
- Subject: [PATCH blead] nextchar() abuse misses an optimisation
-
- Long double fixes from Spider Boardman.
-
- Make the selection of NVff et al stricter.
-
- cSVOPo_*v things index into the current PL_curpad
- under ithreads, which is different from the curpad
- used by the XSUB. (In other words, the code as-is
- before this patch wouldn't work under ithreads.)
-
- Be portable.
-
- VMS MMS (make) wants null action.
-
- Mac and other portability updates from Chris Nandor.
-
- Storable support, v-version fixes.
- Subject: CPAN.pm beta for testing available
-
- Portability fix from Hugo van der Sanden.
-
- Bad makefile.
-
- Subject: [ID 20000823.004] [PATCH 5.6.0+] Pod::Html is too self-contained
-
- Subject: [PATCH] (Mac OS X): Don't #define environ unless PERL_CORE
-
- Subject: [PATCH] Re: [ID 20000821.008] Negitive numbers with vec dumps core
-
- Replace #6705 with a minimal doc patch.
- Subject: [PATCH 5.6.0] replace change #6705
-
- Drop the separate perlbc, perlcc -b should be enough.
-
- installperl couldn't tell whether it had run tests or not.
- Subject: [PATCH] Re: installperl and t/TEST
-
- Add silencer flags to installperl.
- Subject: [PATCH] Making installperl silent.
-
- Make "make install" by default silent. A new "install-verbose"
- target is verbose.
-
- More liberal parsing of version numbers.
- Subject: Re: CPAN.pm beta for testing available
-
- Create directories in silence.
- Subject: [PATCH] Another silencer for MakeMaker
-
- DOS patches and portability/porting notes, from Tim Jenness.
-
- Make installman to recognize the silence flag -S.
-
- Actually do something with the silencer option.
-
- Continue silencing.
-
- Show the doc file, not the temp file.
-
- Regen perltoc.
-
- Subject: [PATCH] More silencing of installman.
-
- Better wording for the vec lvalue diagnostic.
- Subject: Re: [PATCH] Re: [ID 20000821.008] Negitive numbers with vec dumps core
-
- Subject: [PATCH: 6805] several more tweaks to configure.com
-
- Subject: [PATCH perl@6805, 5.6.0, 5.005_03] prevent rare Perl hang on VMS
-
- Missing parts of
- Subject: [PATCH: 6789] some endl fixes for VMS wackiness
-
- Subject: [ID 20000824.029] MakeMaker manifypods fails on DJGPP systems
- (applied slightly modified)
-
- installperl --verbose and --silent.
- Subject: Re: [PATCH] More silencing of installman.
-
- Add install-silent target.
-
- AIX 4.3.3 has SOCKS in libc with a differently named init routine,
- the problem reported in
- Subject: [ID 20000825.007] Building stable 5.6.0 on AIX 4.3.3 using SOCKS
-
- Tweak the sfio/useperlio logic, hopefully as wished in
- Subject: [ID 20000825.004] Not OK: perl v5.7.0 +SUIDMAIL +DEVEL6804 on i586-linux 2.2.12 (UNINSTALLED)
-
- One forgotten file from #6816.
-
- Subject: [PATCH @6820] installman under -w and strict (was Re: [PATCH] More silencing of installman.)
-
- Remove duplicately applied patch shards.
- Subject: [ID 20000825.012] [PATCH@6822] t/lib/cgi-html.t produces ugly cruft during 'make test'
-
- Support preserving extremely big/small angles.
-
- Subject: Re: [ID 20000825.019] Not OK: perl v5.7.0 +SUIDMAIL +DEVEL6820 on alpha-dec_osf 5.1 (UNINSTALLED)
-
- Subject: [PATCH] installation not quite silent yet.
-
- Update the test count.
-
- Use UVxf, PTR2UV, NVff.
-
- Document PTR2XX and INT2PTR.
-
- no-install target a la make -n.
- Subject: [PATCH] make no-install (was Re: [PATCH] installation not quite silent yet.)
-
- grep -e isn't portable.
- Subject: [ID 20000825.027] let me (perlbug@perl.com) know how I blew it
-
- Can't get the test to reliably work thanks to the
- inaccurateness of floating point. "Resolves" bug ids
- 20000826.003, 20000826.009, 20000826.010,
-
- Subject: installman buglet
-
- DJGPP update from Laszlo Molnar.
-
- Subject: MM_Unix.pm LD_RUN_PATH niggles on Solaris
-
- Passing -R in ldflags makes now it to appear in the default
- for lddlflags, just like with -L.
- Subject: Re: MM_Unix.pm LD_RUN_PATH niggles on Solaris
-
- Test nit.
-
- Use the actual thread type, not the pointer-to-struct.
-
- Provice virtual $Config{ccflags_nolargefiles} etc.
-
- display_format used as a class method without arguments was broken,
- reported in
- Subject: Math::Complex->display_format() sets style to 'Math::Complex'
-
- Subject: [ID 20000828.006] dir name "0" not safe with Cwd.pm
-
- Subject: [ID 20000828.009] Not OK: perl v5.7.0 +SUIDMAIL +DEVEL6855 on i586-linux 2.2.12 (UNINSTALLED)
-
- Subject: [PATCH@6855] _Minor_ change to overload.pm pod
-
- opmini.o may be left around if a build is interrupted.
-
- Typo in #6858.
-
- Fix for ID 20000828.001, long doubles were not formatted
- correctly (showed up in $], which stopped installing perl).
-
- An attempt to fix the problem reported in
- Subject: Building perl@6856 using gcc/AIX 4.3.3
- I can't test this properly since the gcc installation I have
- access to seems to be botched (gcc is calling the AIX cpp,
- a losing proposition...)
-
- Add -ld to archname on long tr...double platforms.
-
- Subject: hv.h Doc Patch
-
- Potential cruft.
-
- Subject: [PATCH bleedperl@6856] warnings fixes
-
- -S is the silent flag, -s is the strip flag.
- Subject: [PATCH] Re: [PATCH] make no-install
-
- Take out the SUIDMAIL thing, that will not be
- a problem in 5.7.*.
-
- Subject: [PATCH bleedperl@6866] spellings
-
- Subject: [PATCH] Re: files not cleaned even by veryclean
-
- Use minimal @INC in tests, most of the time just '../lib',
- so that we simply can't pick up stuff from other Perls than
- the one we are testing. Pointed out by
- Subject: Re: [PATCH: 6757] make new Storable tests forgiving of places where not built
-
- Update to Getopt::Long 2.24, from Johan Vromans.
-
- Fix for thinko in #6848.
- Subject: Compiler error in ext/Thread/Thread.c (bleadperl@6866)
-
- Patches all over for people and the files they (hopefully) care about.
-
- Subject: Net::protoent does not export 'getproto'
-
- Missed a change in #6869.
-
- Subject: [PATCH] Warnings in B::Deparse
-
- Subject: [PATCH] Glob dumping
-
- Disable one of the tests for now.
-
- Disabling the one test is a bit tricky.
-
- Don't forget to tidy up.
-
- The #6881 removed one dump line.
-
- Subject: Re: [ID 20000525.003] perldoc fails when Makefile.PL is in cwd
-
- Under usethreads the dumped variable is IN_PAD.
- Subject: Re: [PATCH] Glob dumping
-
- Subject: [ID 20000829.026] [PATCH 6868] File::Temp
-
- Subject: [ID 20000829.022] [PATCH 6868] Minor nit in installhtml
-
- Subject: [ID 20000829.023] [PATCH 6868] perlbug@perl.com --> perlbug@perl.org
-
- Regen Configure for #6894.
-
- Subject: [PATCH: 6889] updates to perlebcdic.pod
-
- Undo namespace pollution of #6878.
- Subject: Re: Net::protoent does not export 'getproto'
-
- Admit that we are leaking scalars.
-
- Subject: [PATCH 5.6.0] [ID 20000608.006] panic: magic_killbackrefs with blessed global weakrefs
- Branch: maint-5.6/perl
- !> (integrate 271 files)
-____________________________________________________________________________
-[ 7894] By: gsar on 2000/11/27 16:00:34
- Log: a couple of nits
- Branch: maint-5.6/perl
- ! MANIFEST pp_sys.c
-____________________________________________________________________________
-[ 7893] By: gsar on 2000/11/27 15:10:56
- Log: integrate changes#6666..6678,6680..6682,6684..6691,6699..6733,
- 6740..6745,6747..6757,6760
-
- Subject: Re: [ID 20000816.006] [PATCH @6655] Shell.pm, bug fix, strict and OO Interface
-
- Subject: [PATCH(2) @6655] Re: perldebut.pod - spelling
-
- Doc nits spotted by Richard Soderberg.
-
- move WNOHANG definition to where other such things are
-
- Make $Config{byteorder} more magical so that it is
- dynamically computed: nice for 'fat binaries'.
- Subject: [PATCH]: default byteorder
-
- Subject: [PATCH] Cwd.pm now uses strict
-
- Subject: Re: [PATCH]Re: Questions about Math::BigFloat
-
- Get -DLEAKTEST to compile (not necessarily to work, mind)
- Subject: [ID 20000724.006] -DLEAKTEST problem
-
- perldebtut 1.10 from Richard Foley, plus Celsius and Fahrenheit.
-
- Add perlebcdic from Peter Prymmer, regen toc.
-
- Don't propose using modules built for 5.005 if no binary
- compatibility with 5.005 is attempted.
-
- Do not use prototyping here.
- Subject: [ID 20000817.016] [PATCH] Peek.xs
-
- Document what the backtick returns if the command fails.
-
- Add byteorder to the myconfig output.
-
- Introduce NVef, NVff, and NVgf, use the middle one.
- (helps for lib/peek + Linux + long doubles) Reported in
- Subject: [ID 20000814.005] Not OK: perl v5.6.0 on i686-linux-64int 2.2.13
- Use NVs in POSIX math, not doubles.
- Subject: [ID 20000817.014] POSIX & modfl
-
- Subject: [PATCH 5.6.0+] newSVrv() memory leak
-
- The byteorder code in #6671 was wrong.
-
- Fix the lib/complex failure of
- Subject: [ID 20000814.005] Not OK: perl v5.6.0 on i686-linux-64int 2.2.13
- Linux long double accuracy issue: something that
- when printed with %g looks like "2" but int() of it is 1.
-
- Propagate new Configure vars.
-
- Unbuffer the output.
-
- Subject: [PATCH] perltrap.pod spring cleaning
-
- Subject: [PATCH] perlfunc.pod -- clarifying sprintf array argument issues
- Subject: [ID 20000817.018] behaviour change 5.5.3 -> 5.6.0 re "Modification of a read-only value"
-
- Tiny Getopt::Long patch from Johan Vromans.
-
- Document code point which makes if (defined %stash::) to work
- (noted by Spider Boardman).
-
- Subject: [PATCH perl@6698] cygwin port
-
- Document the NDBM_File and ODBM_File as SDBM_File
- was documented in #6417.
-
- The new tests were missing from #6415.
-
- Add [[:blank:]] as suggested in
- Subject: [ID 20000716.024] [=cc=] / [:blank:]
- (the [=cc=] has already been taken care of by #6439
- so the whole bug report can be closed)
- and make [[:space:]] to be equivalent to isspace(3)
- (as opposed to \s, which is isSPACE()). The difference
- is that now [[:space:]] matches the mythical vertical tab,
- while \s doesn't.
-
- Don't eat leading os from index entries.
- Subject: Re: [ID 20000810.006] Pod::Man Ate My 'O'!
-
- Subject: [PATCH 5.6.0+] fix for Win32::DomainName
-
- Typo in pp_complement().
- Subject: [PATCH perl-current] Deparse
-
- Add warnif(), check warnings further up the stack,
- all the warnings functions now can take an optional object reference.
- Subject: [PATCH bleedperl@6691] warnings pragma update
-
- Fix a core dump in lib/selfloader under -DDEBUGGING.
- Subject: PATCH @6698 for [ID 20000817.007] Not OK: perl v5.7.0 +SUIDMAIL +DEVEL6676 on alpha-dec_osf 4.0f (UNINSTALLED)
-
- Subject: [PATCH 5.6.0+] fix for Win32::GetFullPathName and Win32::GetShortPathName
-
- Subject: [PATCH: 6698] tidy up the temp files left by peek tests on VMS
-
- Subject: [PATCH: 6698] was Re: [PATCH: 6640] VMS Makefile.SH update (fwd)
- Put back the long double avoidance code to POSIX.xs
- because VMS seems to need it still.
-
- Introduce a 'veryclean' target that is like 'distclean'
- but also removes *~ and *.orig.
-
- Subject: [ID 20000817.023] endianness description in perlfunc.pod
-
- Subject: [PATCH perl@6698] File::Temp fix-ups for OpenVMS
-
- Let's try #6717 again.
-
- UTF8 concat fixes.
- Subject: [PATCH @6713] Re: [ID 20000815.006] latest patched perl core dumps
-
- pp_open() could pass an uninitialized filename down to do_open9().
-
- Subject: Re: [ID 20000819.002] Not OK: perl v5.7.0 +SUIDMAIL +DEVEL6707 on i686-linux 2.2.5-16 (UNINSTALLED)
-
- Update to CGI 2.72, from Lincoln Stein.
-
- Subject: [PATCH] Silence MakeMaker (Was: installman)
-
- Use temporary directory instead of current directory.
- Subject: Re: [ID 20000816.011] Test failure in lib/ftmp-security.t
-
- Document odd vs even subreleases and -Dusedevel.
-
- The veryclean target needs to clobber.
-
- Use File::Spec->tmpdir().
-
- Document the number of exponent digits.
-
- Mention perlebcdic and perlposix-bc.
-
- s/this one/the 5.6.0 release/
-
- The #6724 is here.
-
- The correct cleaning order is an art.
-
- small tweaks for change#6705: avoid C++ style comments in C code;
- use Perl's malloc API rather than the low level system one
-
- Array context keeps slithering in.
-
- Subject: Re: 5.7.0 getting really close, new snapshot: perldelta, Storable
-
- Subject: [PATCH] os2.c fix for use64bitint
-
- Update to Pod::LaTeX 0.53.
- Subject: [PATCH] lib/Pod/LaTeX.pm updates
-
- Document the endianness of Alpha more precisely.
-
- Subject: RE: [PATCH perl@6736] t/pragma/warn/9enabled assumes stdout buffered
-
- Rename the macro argument because some preprocessors
- can't tell the difference and expand arguments also inside
- double quoted strings.
-
- free TLS slot properly on Windows
-
- use Cwd 'chdir' didn't set $ENV{PWD} correctly on Windows
-
- Unicos/mk requires elaborate paranoia.
-
- Tweak the floating point output routine preferences.
-
- Also under djgpp the timestamps are funky.
-
- Apply some PodParser 1.18 patches; the Pod/Find.pm
- patches cannot be applied since #6712 conflicts.
-
- Use PodParser 1.18 new test.
-
- A pod nit.
- Subject: [PATCH] pod/perlre.pod (was Re: [ID 20000821.007] $&, $1, etc. disappear when sub returns)
-
- Be verydeepclean.
- Branch: maint-5.6/perl
- +> pod/perlebcdic.pod
- !> (integrate 106 files)
-____________________________________________________________________________
-[ 7887] By: gsar on 2000/11/27 14:13:05
- Log: integrate changes#6613..6616,6620..6665 from mainline
-
- VMS configure.com update continues.
-
- Subject: Test fails / warnings with perl-current #6612
-
- Subject: [PATCH] @+, @- readonly (was Re: @<punct> interpolating in "")
-
- Subject: Re: [ID 20000807.003] [PATCH] Debugger treatment of condition "0"
-
- For now remove the mail code.
-
- Subject: Re: [PATCH] @+, @- readonly
-
- Subject: warning: storage class after type is obsolescent
-
- Subject: sfio2000
-
- Subject: Re: File::Temp problems on VMS in bleedperl
-
- README.os2 update.
- Subject: Re: [PATCH perl-current] Make op/sprintf.t more comprehensive,
-
- Make the user to give up his firstborn, err, to knowingly
- verify installing an unstable developer release. Also bump
- the release to 5.7.0, but leave a patch tag in the local
- patches saying that this is not yet the real thing.
-
- Update (kinda) to Test 1.14, from Joshua Pritikin.
-
- make ok etc also for win32.
-
- Subject: [ID 20000815.005] [PATCH] perldoc not looking in the right place for script pod
-
- Don't blow limited stacks, a lower number is enough to
- tickle the lookbehind limit.
-
- Use -Dusedevel; regen Configure and the respective Porting stuff.
-
- Subject: [PATCH] debugger exit code should reflect user exit code
-
- Subject: [PATCH perl@6620] cygwin port
-
- Missed a file from #6638.
-
- Subject: [PATCH] for t/lib/peek.t (was Re: [ID 20000814.005] Not OK: perl v5.6.0 on i686-linux-64int 2.2.13)
-
- magic callbacks all need to have same type signature
-
- Subject: [ID 20000815.014] [PATCH] INSTALL doesn't mention 64 bit support.
-
- Fix a dependency problem.
- Subject: [PATCH: 6640] VMS Makefile.SH update
-
- The numeric locale was reset to "C" by s?printf and never restored.
- Subject: [ID 20000809.003] setlocale(LC_NUMERIC...) produces different results in 5.005 and 5.6
- No test since adding the failing example to locale.t
- does not fail -- probably because the locale settings are so
- thoroughly tweaked by that time. Running the example standalone
- does fail, though. UPDATE: test case added at change #7540.
-
- Subject: [ID 20000324.040] minor fix to perlhpux.pod
-
- Update to CPAN 1.57.
-
- Subject: [PATCH] Cwd::_backtick_pwd does not check return value
-
- Change the perlbug address to perl.org since it's more forgiving.
-
- Change the regx compilation error markers to use = instead of <
- since pod makes using the latter quite messy. Reported in
- ID 20000814.006 by Abigail and in
- Subject: Unknown escape E<> ?
-
- Update to perldebtut 1.9, from Richard Foley.
-
- check that the number pseudo children doesn't exceed
- MAXIMUM_WAIT_OBJECTS, which is currently 64 (avoids overflowing
- the WaitForMultipleObjects() limit that would cause wait()
- to crash)
- wait() and waitpid() could potentially be rewritten to use
- more than one thread to do the waiting to eliminate this
- limitation
-
- change#6328 could make close(SOCKET) return false on windows
- when it shouldn't
-
- pod nit seen in passing
-
- on windows, the return values from wait() and waitpid() don't
- match those of pseudo-pids
-
- waitpid() now handles externally spawned pids correctly;
- fixes for backtick/wait/waitpid failures on Windows 9x
- these changes make the pid returned by process functions on
- Windows 9x always positive by clearing the high bit (which
- is always set on Win9x); pseudo-process PIDs are likewise
- always negative now on Win9x (just as on NT/2000)
-
- trailing new %ENV entries weren't being pushed into the real
- environment of subprocesses on Windows
-
- Tweak the regex compilation errors once more.
-
- avoid warnings from dense compiler
-
- add "ok" targets from change#6632 in makefile.mk
- Branch: maint-5.6/perl
- - lib/Pod/PlainText.pm vms/configure.com
- !> (integrate 66 files)
-____________________________________________________________________________
-[ 7885] By: gsar on 2000/11/27 13:53:18
- Log: integrate changes#6540..6541,6546..6549,6552..6554,6557..6606,
- 6610..6611 from mainline
-
- Make regular expression parse error messages easier to understand.
- Subject: Re: enhanced(?) regex error messages
-
- Tiny tidying on report_evil_fh().
-
- Subject: Re: enhanced(?) regex error messages
- plus Capitalize the error messages, plus perldiag them.
-
- Subject: Patch against 5.6.0 to allow "-d:Module=arg,arg,arg"
-
- Document here-doc better.
-
- Subject: [ID 20000807.003] [PATCH] Debugger treatment of condition "0"
-
- Subject: [PATCH] Re: [ID 20000807.008] Double reads considered evil? (deja vu)
- Do away with array context, from Daniel Chetlin <daniel@chetlin.com>
- (either perlbug or p5p ate the original), plus regen
- perlapi and perltoc.
-
- Regen global.sym.
-
- Double check that we have a dirhandle.
-
- Subject: Re: enhanced(?) regex error messages
- (plus two small patches sent privately)
- (this still seems to leave few test failures)
-
- warn is a macro, avoid using at a variable to avoid warnings
- in some configurations; readdir.t is too conservative in
- estimating number of *.t's
-
- Get back into sync with Jeffrey on the enhanced regex warnings.
-
- Subject: [PATCH 5.6.0] cygwin port
-
- Zero entries were skipped, fix from Adrian Goalby
- <argoalby@yahoo.co.uk>
-
- Subject: Remove dead entry in perldiag
-
- Amend the description of Perl6.
- Subject: [PATCH Perl-5.6.0] perlfaq1.pod
-
- detypo
-
- It's the 2ndO'ROSSC.
-
- Revert the sv.c part of #6559, a better fix is needed.
-
- Iterating perl6 description.
-
- Update to Term::ANSIColor 1.03, from Russ Allbery.
-
- Update to Getopt::Long 2.23_05, from Johan Vromans.
-
- Small AUTHORS and MAINTAIN updates. Could do with big updates.
-
- Update to Pod::Parser 1.17, from Brad Appleton.
-
- Update to CPAN 1.56, from Andreas König.
-
- Update to CGI 2.70, from Lincoln Stein.
-
- Put back the std @INC thing.
-
- Fixes to looking-like-number to keep behaviour as it was in 5.005_03.
- Subject: Re: [ID 20000810.002] $a["1foo"] same as $a[0]
-
- Document the IO::Select timeout.
-
- sleep(1) does not necessarily return 1.
- Subject: [PATCH bleadperl] op/lex_assign.t
-
- Subject: debugger "d" command doesnt check line number
-
- B::Deparse didn't do sub attributes.
- Subject: B::Deparse was Re: [ID 20000808.005] refs to returned lvalues are lvalues??
-
- Preprocessing and postprocessing for File::Find.
- Subject: Patch to Find::File.pm to allow alphabetical results
-
- Subject: Re: [ID 20000809.005] trouble with long string and /m modifier - uninitialized value
-
- Subject: Re: [ID 20000809.006] Debugger lost the ability to see $1 et al
-
- Subject: Re: [ID 20000730.003] utf8::length() bad
-
- Subject: Getting perlio and threads to compile
- (the Solaris version changes in Configure skipped)
-
- Tests for #6589.
- Subject: Re: B::Deparse was Re: [ID 20000808.005] refs to returned lvalues are lvalues??
-
- Add Perl debugging tutorial, regen toc.
- Subject: perldebtut.pod
-
- Add a few missing files, update MANIFEST.
-
- Rewrite of vms/subconfigure.com as configure.com,
- from Peter Prymmer and the vmsperl crew.
-
- Should have deleted this in #6603.
-
- Fix the test for 5005threads.
-
- Fix-n-skip the tests under 5005threads.
-
- Subject: [PATCH] t/op/regmesg.t fails if REG_INFTY set
-
- Upgrade to CGI 2.71, from Lincoln Stein.
- Branch: maint-5.6/perl
- +> lib/CGI/eg/make_links.pl lib/CGI/eg/wilogo.gif
- +> lib/Pod/PlainText.pm pod/perldebtut.pod t/lib/gol-oo.t
- +> t/op/regmesg.t t/pod/find.t vms/configure.com
- - vms/subconfigure.com
- ! lib/lib.pm
- !> (integrate 115 files)
-____________________________________________________________________________
-[ 7883] By: gsar on 2000/11/27 11:50:46
- Log: integrate changes#6469..6484,6486..6501,6504..6505,6507..6509,
- 6511..6513,6515..6523,6525..6536
-
- The swallow_bom() saga continues. The #23 of require.t
- (UTF16-LE) still fails (silently, no output) but the #22
- (UTF16-BE) seems to be working now. The root of the
- failure may be in sv_gets(): is it UTF-16LE-aware,
- especially when it comes to line endings?
-
- Document the problem with -P in HP-UX and its workaround.
-
- Subject: [PATCH] allow non-variable as lhs of non-updating tr///
- (aka ID 20000730.002)
-
- Subject: fix and question re: waitpid() under win32
-
- Make the safety catch for buggy gccs work with triple version
- numbers like 2.95.2. Reported in
- Subject: [ID 20000731.005] Perl 5.6.0 "Configure" fails to recognize gcc 2.95.2
-
- In Digital UNIX warn if gcc explicitly chosen because even
- 2.95.2 is known to cause problems.
-
- Make chr() for values >127 to create utf8 when under utf8.
-
- various syntax errors and such (not fixed: comp/require.t#22 coredump
- on Windows)
-
- Stash away the largefiles flags and libswanted.
-
- BOM patching from Simon Cozens.
-
- If gccosandvers is equal to osname, clear gccosandvers.
-
- Make p4desc to skip non-mainperl branches by default.
-
- Subject: [Proposed PATCH] Let Perl define QUAD_MIN and _MAX itself
-
- The test from this
- Subject: Re: [ID 20000411.002] qw() gives different results in 5.6 to previous versions
-
- In new BSDs changes to argv[] do not show up in ps(1) output,
- instead one must use setproctitle(). This was already addressed
- by change #6457, but the below has a new variant for FreeBSD 4.0
- or later, and the matter is also documented more.
-
- FreeBSD 3.* updates from
- Subject: [ID 20000801.007] setting $0 on FreeBSD 4.x does not get reflected in /bin/ps
-
- regen_headers, regen perltoc.
-
- Document in one place the memory abstractions used in Perl core.
-
- memcpy has n o in it, as pinted ut by Sarathy.
-
- Remove the extraneous "main::" prefix from all the
- "opened only for", "on closed", and "never opened" warnings.
-
- The name of a filehandle does not have <these>.
-
- The tr utf8 patching continues.
-
- The new setproctitle() feature is available only in
- bleeding edge FreeBSD. From Paul Saab.
-
- Subject: [PATCH bleadperl] [ID 20000731.010] regex error
-
- Dump UVs as UVs in Data::Dumper.
-
- detypo #6494
-
- Document the IVdf UVuf UVof UVxf.
-
- require.t needs binmode() to work on windows
-
- Generate OP_IS_SOCKET() and OP_IS_FILETEST() macros
- that are hopefully soon put into use.
-
- Allow "no Module;" even if there is no 'unimport'.
-
- Better skip message for the test; one of the two problems in
- Subject: [ID 20000224.003] Not OK: perl v5.5.660 on i86pc-solaris 2.7
-
- The subtest 4 may fail also on VOBS, as pointed out
- by Nick Ing-Simmons in November 1999, bug id 19991124.003
- (but the failure in that bug report isn't the subtest 4).
-
- Be more informative on what is skipped and why,
- also repeat the list at the end.
-
- Add a URL for FSF.
-
- Subject: [PATCH] sv.h documentation - SvLEN
-
- Subject: [PATCH bleadperl] [ID 20000803.001] further regexp counting problems
-
- Subject: [PATCH perl-current] Comings and goings in op/sprintf.t
-
- Subject: [PATCH] bad cppsymbols on os2 + Configure question
-
- Subject: [ID 20000802.002] [PATCH] memory pseudo-leak in sv_dump
-
- Subject: [ID 20000802.004] Tests op/grent.t and op/pwent.t fail unnecessarily
- mention the idea of @( and @)
-
- This is 6512. Really.
-
- Subject: [ID 19990721.004] Documentation bug in perlfunc
-
- Subject: Minor tweak to perlvar.pod
-
- In the warnings call filehandles consistently so;
- add "unopened" warning for stat().
-
- After the #6519 a warning about stat() is just that,
- not about a filetest, which now have their own warning.
-
- Subject: [ID 20000804.002] configure.gnu and arguments with whitespace characters
-
- Subject: Re: Array vs. List context
-
- Subject: New perlcc, take 2
-
- Weed buglets pointed out by
- Subject: Re: [ID 20000803.005] miniperl aborts during Perl make
-
- gcc versions might have (parentheses) in them.
-
- Subject: [ID 20000724.004] Perl interpreter segfault when using built-in flock
-
- Essential prototype changes were missing from #6527.
- Also make report_evil_fh() more bomb-proof.
-
- Zap lib/Sys directory when cleaning up.
-
- Change the Policy policy: now -Dprefix= with an existing
- Policy.sh and prefix == siteprefix == vendorprefix, then all
- of them follow along the new prefix.
- Subject: Re: [ID 20000508.002] -Dprefix completely broken [PATCH]
-
- Continue fixing the io warnings. This also
- sort of fixes bug ID 20000802.003: the core dump
- is no more. Whether the current behaviour is correct
- (giving a warning: "Not a format reference"), is another matter.
-
- Have symbols for the IoTYPEs.
-
- Subject: [PATCH] perlfunc.pod use documentation (5.6.0)
-
- Document a bit that UDP is not what you might think.
- Subject: Re: IO::Socket::INET bug sending large UDP packets/fragmentation
- tr memory corruption fix from Simon Cozens.
-
- Plug the security hole described in the Aug 05 2000 bugtraq message
- "sperl 5.00503 (and newer ;) exploit" by Michal Zalewski.
- The security hole exists only in suidperls, which isn't
- installed or even built by default.
- Branch: maint-5.6/perl
- !> (integrate 71 files)
-____________________________________________________________________________
-[ 7882] By: gsar on 2000/11/27 10:25:36
- Log: integrate changes#6439..6444,6446..6453,6455..6457,6460..6465,6467..6468
- from mainline
-
- Make the unimplemented POSIX regex features [[.cc.]] and [[=c=]]
- to be fatal errors (instead of by default ignoring them, and
- ignoring with a bug: even though -w gave an error, the opening [
- was left in) Reported in:
-
- Subject: [PATCH: perl@6409] bug fix for munchconfig (turned up by CXX)
-
- Subject: [PATCH] split /^/
-
- MacOS nits from Matthias Neeracher.
-
- More split() doc and test patches from Mike Guy.
-
- Allow "sub AUTOLOAD;" to stop AUTOLOAD inheritance,
- from Graham Barr in the module list.
-
- docfix from Peter Scott <Peter@PSDT.com>.
-
- File::Temp patches for VMS and OS/2 from Tim Jenness.
-
- open() wariness in perlbug.
-
- Subject: [PATCH] minor doc change - perlguts
-
- Subject: Minor doc patch: handy.h
-
- Be wary of close()s, too.
-
- Further File::Temp patches from Yitzchak Scott-Thoennes
- and Craig A. Berry.
-
- Subject: [PATCH] fixes bug 20000508.004
-
- Subject: [ID 19990709.002] [DOCUMENTATION PATCH] perldiag
-
- Allow "no AutoLoader;", based on change #6444,
- suggested by Graham Barr.
-
- Use setproctitle() if available to modify $0.
-
- Warn if the version of the operating system used to compile gcc
- differs from the current version of the operating system.
- Also display the gcc compilation os and version in myconfig.
- Inspiration from
-
- Tiny fixes for #6460.
-
- The problem described in this
- Subject: [ID 20000322.018] named chars aren't magical enough
- has been fixed in perl 5.6.0 but just in case added a test
- to keep it away. (The report from Joseph Hall.)
-
- Tune the comments and hopefully stop a memory leak.
-
- Subject: UTF8 concat
- (with a memory leak fixed, plus a few casts added)
- This also seems to help for
- Subject: [ID 20000716.015] join UTF8 weirdness
-
- Do not upgrade SVs into utf8 just because they participate
- in eq or cmp. Reported and fix suggested in
- Subject: [ID 20000720.009] sv_eq UTF8 bug
-
- Fix the HALF_UPGRADE() macro introduced in #6263.
-
- Find green threads before native threads.
- Subject: Re: Patch to jpl/JNI/Makefile.PL
- Branch: maint-5.6/perl
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 7846] By: gsar on 2000/11/24 00:55:57
- Log: integrate changes#6415..6418,6420..6438 from mainline
-
- Fix the bitvector ops for utf8 (tricky since past 7 bits
- the utf8 'characters' can be more than one octet).
-
- MPE/ix updates for perl 5.6.0 from Mark Bixby.
-
- Subject: SDBM_File documentation
-
- Detypo.
-
- Decutandpasto.
-
- Send all installperl messages to STDERR and be -w clean.
-
- Out-of-date note removed.
-
- Protect against "wild next"s, that is, callbacks doing "next"
- instead of "return".
-
- Use STDOUT consistently.
-
- The output might have been produced in the wrong order.
-
- A missing 'break' after the [[:space:]] switch case.
-
- Add tests for
- [ID 19991110.003] another matching finding by pcre author
- which has already been fixed by some patch, as verified in
-
- Documentation to explain the behaviour of map().
-
- Add an optimization for map-maps-a-list-element-to-more-list-elements
- case, but add also notes explaining the relationship of this
- patch and the earlier notes by Sarathy.
-
- Subject: [ID 20000716.023] syslog test fails without sockets
-
- Subject: Re: [PATCH] [ID 20000716.011] strangeness with split($_ =~ m/.../)
- Test cases for #6431.
-
- File::Spec::VMS fixup for tmpdir from Craig Berry.
-
- Make the "uninit variable" warning to say "concat or string"
- or "join or string" when in concat or join .
-
- Get UTF16 BOMs working. Patch from
- Subject: Re: [ID 20000719.001] Problem with bleadperl of 7/18/00
-
- Subject: [PATCH] Make large file tests deal with SIGXFSZ
-
- Subject: [ID 20000724.003] Documentation changes for perllocale.pod
-
- Subject: [PATCH] av.c apidoc
- Branch: maint-5.6/perl
- !> (integrate 43 files)
-____________________________________________________________________________
-[ 7845] By: gsar on 2000/11/24 00:20:45
- Log: integrate changes#6406..6414 from mainline
-
- Merge perlhacktut into perlhack, update perlguts.
-
- Fix AutoSplit to use File::Spec the right way in VMS,
- from Peter Prymmer.
-
- The bug report
- [ID 19991110.002] minimal matching discrepancy found by pcre author
- seems to have been fixed (though differently from what was suggested
- in the report) in 5.6.0. Add tests to keep the bug from reappearing.
-
- thinko fix in vms/descrip_mms.template, the win32.pod in lib,
- not in pod, from Peter Prymmer
-
- Subject: [docpatch] Re: [ID 19991002.011] perldoc -f shift
- From: Hugo <hv@crypt.compulink.co.uk>
- Date: Fri, 14 Jul 2000 23:05:20 +0100
- Message-Id: <200007142205.XAA17882@crypt.compulink.co.uk>
-
- Didn't anymore apply, but that point still could use another fix.
-
- lib/b test fixes from Peter Prymmer.
-
- More docs for sv functions.
-
- perlvms.pod whitespace cleanup to keep pod utils happy.
-
- another VMS build tweak from Peter Prymmer
- Branch: maint-5.6/perl
- !> embed.pl lib/AutoSplit.pm pod/perlapi.pod pod/perlfunc.pod
- !> pod/perlguts.pod pod/perlhack.pod sv.c t/lib/b.t t/op/re_tests
- !> vms/descrip_mms.template vms/perlvms.pod
-____________________________________________________________________________
-[ 7799] By: gsar on 2000/11/22 01:02:56
- Log: some lib_pm.PL changes snuck in via change#7772
- Branch: maint-5.6/perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 7781] By: gsar on 2000/11/20 19:02:55
- Log: type mismatch due to faulty integration
- Branch: maint-5.6/perl
- ! toke.c win32/Makefile
-____________________________________________________________________________
-[ 7780] By: gsar on 2000/11/20 17:31:55
- Log: integrate changes#6392,6394..6399,6401..6404
-
- The {multiplier} of a fixed substring was overlooked which
- caused a wrong initial search offset for that substring.
-
- Subject: [PATCH 5.6.0] Re: [ID 20000613.001] Regex works in v5.005_03 but fails in v5.06
- From: Hugo <hv@crypt.compulink.co.uk>
- Message-Id: <200007131827.TAA14487@crypt.compulink.co.uk>
- Date: Thu, 13 Jul 2000 19:27:13 +0100
-
- Fix the BOM bug: not a byteorder bug, a signedness bug.
-
- Replace change #6337 with a better one.
-
- Subject: Re: [PATCH] [ID 20000701.002] Regular Expressions Not Unsetting $1 Vars When Backtracking
- From: Hugo <hv@crypt.compulink.co.uk>
- Date: Fri, 14 Jul 2000 04:16:20 +0100
- Message-Id: <200007140316.EAA15857@crypt.compulink.co.uk>
-
- MakeMaker should not remove editor backups (*~) on `make clean`
- by default (completes change#6383)
-
- move new variables to the end of the interpreter structure (for
- bincompat in code that doesn't #include XSUB.h)
-
- rename totally bletcherous SvLOCK() thingy (doesn't do what the
- name suggests anyway)
-
- various cleanups (typos, misformatted code, and small bugs)
-
- typecasts needed for change#6394
-
- typos in change#6399, regen headers
-
- inconsistent types needs casts
-
- PERL_OBJECT build tweaks
- Branch: maint-5.6/perl
- !> MANIFEST doop.c embed.h embed.pl embedvar.h
- !> ext/IPC/SysV/Makefile.PL global.sym intrpvar.h
- !> lib/ExtUtils/MM_Unix.pm mg.c op.c perlapi.h pod/perlapi.pod
- !> pp.c proto.h regcomp.c regexec.c sv.h t/op/re_tests thread.h
- !> toke.c util.c
-____________________________________________________________________________
-[ 7779] By: gsar on 2000/11/20 17:06:29
- Log: integrate changes#6376..6378,6380,6383,6385..6388,6391
-
- Cosmetics and perldelta.
-
- Fix nits noticed by Boston.pm.
-
- Do the cc sanity check both before the hints and
- after the cc selction.
-
- get sprintf.t to adjust properly for 3-digit exponents
-
- don't clobber *.orig files on *clean targets
-
- fix bugs in processing %v-*d and similar format specs (from
- Avi Finkel <avi@finkel.org>)
-
- sprintf test tweaks (from Dominic Dunlop)
-
- new selfloader.t in change#6183 doesn't close DATA handles,
- and thus fails to clean up tmp files on dosish platforms
-
- typos (spotted by Peter Prymmer)
-
- typo fix from Craig Berry
- Branch: maint-5.6/perl
- !> Configure Makefile.SH config_h.SH ext/IPC/SysV/Makefile.PL
- !> pod/perldelta.pod pod/perlre.pod sv.c t/lib/english.t
- !> t/lib/selfloader.t t/op/sprintf.t vms/subconfigure.com
- !> x2p/Makefile.SH
-____________________________________________________________________________
-[ 7778] By: gsar on 2000/11/20 16:46:51
- Log: integrate changes#6340..6342,6348,6354,6356,6357,6371,6372,6375
-
- Subject: Re: format bug report [Patch]
- From: "H.Merijn Brand" <h.m.brand@hccnet.nl>
- Date: Wed, 05 Jul 2000 13:12:52 +0200
- Message-Id: <20000705130745.67BF.H.M.BRAND@hccnet.nl>
-
- Subject: Re: format bug report [Patch]
- From: "H.Merijn Brand" <h.m.brand@hccnet.nl>
- Date: Wed, 05 Jul 2000 14:10:01 +0200
- Message-Id: <20000705140837.73C2.H.M.BRAND@hccnet.nl>
-
- Subject: Re: [ID 20000704.002] [PATCH] memory leak with debug / anon subs
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Message-Id: <E13AbRE-00009T-00@libra.cus.cam.ac.uk>
- Date: Fri, 07 Jul 2000 17:57:16 +0100
-
- Subject: [ID 20000710.002] fatal error or memory loss when deleting symbols in evaled code with syntax errors
- To: perl5-porters@perl.org
- From: Karsten Sperling <spiff@phreax.net>
- Date: Mon, 10 Jul 2000 15:12:52 +0200
- Message-Id: <200007101315.e6ADFrg21041@chthon.perl.com>
-
- README.posix-bc podified from Thomas Dorner.
-
- Subject: [PATCH perl-current] Make op/sprintf.t more comprehensive, take2
- From: Dominic Dunlop <domo@computer.org>
- Date: Tue, 11 Jul 2000 12:27:33 +0200
- Message-Id: <p04320405b590a14d4650@[192.168.1.4]>
-
- Typo in #6341.
-
- Fix for
- Subject: [ID 20000711.005] spurious uninit warning with msgrcv()
- From: Roderick Schertler <roderick@argon.org>
- Date: Tue, 11 Jul 2000 13:55:05 -0400
- Message-Id: <200007111755.NAA05077@jones.argon.org>
-
- Minor cleanups on the booklist.
-
- Reintroduce perlbook (updated for Mk III), introduce perlposix-bc,
- regen perltoc.
-
- windows build tweaks (op/sprintf.t still fails tests 120-121, 149)
- Branch: maint-5.6/perl
- +> pod/perlbook.pod
- !> MANIFEST README.posix-bc doio.c lib/Symbol.pm pod/Makefile.SH
- !> pod/buildtoc.PL pod/perl.pod pod/perlfaq2.pod pod/perltoc.pod
- !> pp_hot.c t/op/sprintf.t t/op/write.t toke.c win32/win32sck.c
-____________________________________________________________________________
-[ 7772] By: gsar on 2000/11/20 13:06:23
- Log: integrate changes#6315..6319,6321..6331,6333..6338
-
- Integrate with Sarathy, preliminary fix for unicos
- alignment problems in [ID 20000612.002] Perl problem on Cray system.
-
- some debugger output does not go to the socket when RemotePort is set
-
- winsock cleanup never done on Windows (leads to handle leaks)
-
- fix UNC path handling on Windows under ithreads, and chdir()
- return value when given a non-existent directory
-
- Autogenerate pod/Makefile and pod/buildtoc.
- buildtoc also checks whether the existin pods are
- mentioned in MANIFEST and perl.pod, and vice versa.
- (None of the thusly found discrepancies fixed yet.)
- roffitall also needs to be autogenerated similarly but it
- seems so badly out of date that I didn't touch it yet.
-
- Config is being used.
-
- Add =head1 NAMEs so that buildtoc is happy.
- (The CGI::Util nit reported to Lincoln.)
-
- Fix complaints of buildtoc.
-
- Fix the alignment problem in Crays ([ID 20000612.002]).
-
- Remove perlbook, update perlfaq book listing,
- rearrange perl.pod, regenerate perltoc.
-
- Fix a nit spotted by 64bit IRIX compilation: a (64-bit) pointer
- was cast to an unsigned (32-bit) integer with wild abandon.
-
- winsock options weren't being set in all threads under ithreads
- (caused send()s from second and subsequent threads to fail)
-
- accept() leaks memory on windows due to incorrect ordering of
- closesocket() and fclose() calls
-
- Reorder perl.pod once more.
-
- More POSIX.pod tweaks.
-
- Sprinkle ldlibpath.
-
- Precedence goof, fix based on
- Subject: [PATCH 5.6.0] op/taint.t continues on failed shmget()
- From: Hugo <hv@crypt.compulink.co.uk>
- Date: Tue, 11 Jul 2000 12:52:38 +0100
- Message-Id: <200007111152.MAA05488@crypt.compulink.co.uk>
-
- Subject: PATCH perlguts.pod: Document D and d magic types
- From: mjd@plover.com
- Date: 5 Jul 2000 18:01:51 -0000
- Message-ID: <20000705180151.29413.qmail@plover.com>
-
- Subject: [ID 20000705.002] problem with perl 5.6.0 on NetBSD/sparc
- From: Hubert Feyrer <feyrer@rfhs8012.fh-regensburg.de>
- Date: Wed, 5 Jul 2000 14:56:43 +0200 (MET DST)
- Message-Id: <Pine.GSO.4.10.10007051452330.29215-100000@rfhpc8320.fh-regensburg.de>
-
- Subject: [PATCH cfgperl] $& segfaults if you trick it
- From: simon@brecon.co.uk (Simon Cozens)
- Date: 7 Jul 2000 11:26:09 GMT
- Message-ID: <slrn8mbfif.ead.simon@justanother.perlhacker.org>
-
- Subject: [PATCH] [ID 20000701.002] Regular Expressions Not Unsetting $1 Vars When Backtracking
- From: Hugo <hv@crypt.compulink.co.uk>
- Date: Tue, 11 Jul 2000 12:44:50 +0100
- Message-Id: <200007111144.MAA04446@crypt.compulink.co.uk>
-
- Subject: [PATCH] Re: "%#p" format specifier: document and test or not?
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Tue, 11 Jul 2000 13:50:51 +0100
- Message-Id: <E13BzUx-00033c-00@libra.cus.cam.ac.uk>
- Branch: maint-5.6/perl
- +> ext/DynaLoader/hints/netbsd.pl lib/Win32.pod pod/Makefile.SH
- +> pod/buildtoc.PL
- - pod/Makefile pod/Win32.pod pod/buildtoc pod/perlbook.pod
- !> (integrate 26 files)
-____________________________________________________________________________
-[ 7771] By: gsar on 2000/11/20 12:31:42
- Log: integrate changes#6283..6285,6291,6294..6300,6302..6304,6306..6307,
- 6310,6311,6314
-
- Subject: [PATCH bleedperl] File::Spec 0.82 beta
- From: Barrie Slaymaker <barries@jester.slaysys.com>
- Date: Wed, 28 Jun 2000 11:35:29 -0400
- Message-Id: <200006281535.LAA21095@jester.slaysys.com>
-
- tweak perlembed for multiplicity/usethreads sanity; correct notes
- about Windows
-
- localize %INC in a Safe compartment so that use/require work
- (many other magic globals probably need similar treatment)
-
- dounwind() may cause POPSUB() to diddle the wrong PL_curpad
- when @_ is modified, causing coredumps
-
- slurp mode fix in change#4736 still not quite right
-
- Point to perlipc for more SysV IPC examples.
-
- Elaborate POSIX.pod. Still needs work.
-
- fix ~320 byte memory leak (psig_{ptr,name} tables were never freed)
-
- fix large memory leak that has been around for ever, masked by
- -DPURIFY (most of the arenas were never freed!)
-
- fix memory leak on Windows (PL_sys_intern contents were never
- freed)
-
- PERL_OBJECT build tweak
-
- adjust change#6299
-
- remove rel2abs prototypes (from Barrie Slaymaker)
-
- missing perldiag entry for unpack("w",...) diagnostic (from
- Andreas Koenig)
-
- better diagnostic on Frob->stuff() when Frob:: doesn't exist
- (from Richard Soderberg <rs@oregonnet.com>)
-
- Win32 patches for cfgperl from Sarathy.
-
- b.t fails under OS/2 (from Yitzchak Scott-Thoennes)
-
- More POSIX.pod embellishment.
-
- tyop in change#6306
- Branch: maint-5.6/perl
- !> (integrate 44 files)
-____________________________________________________________________________
-[ 7770] By: gsar on 2000/11/20 11:51:00
- Log: integrate changes#6268..6282 from cfgperl branch
-
- Subject: [PATCH perl-current] Make op/sprintf.t more comprehensive
- From: Dominic Dunlop <domo@computer.org>
- Date: Thu, 29 Jun 2000 12:32:39 +0200
- Message-Id: <p04320403b580cc1338db@[192.168.1.4]>
-
- Regen headers for #6261 (and update embed.pl for this) and #6267,
- silence few compiler warnings.
-
- Subject: PATCH (Re: [ID 20000612.004] Should regression tests fail if user doesn't build XS extensions?)
- From: Nicholas Clark <nick@talking.bollo.cx>
- Date: Fri, 23 Jun 2000 16:21:15 +0100
- Message-ID: <20000623162115.A19894@Bagpuss.unfortu.net>
-
- Subject: PATCH pod/perltie.pod
- From: Ian Phillipps <Ian.Phillipps@iname.com>
- Date: Fri, 16 Jun 2000 00:17:19 +0100
- Message-ID: <20000616001719.A17108@homer.diplex.co.uk>
- (only the first hunk, the second hunk had already been done
- by some other patch)
-
- Subject: [ID 20000614.005] [patch] Tweak to Net::Ping docs
- From: Tom Phoenix <rootbeer@redcat.com>
- Received: (qmail 6398 invoked by uid 508); 15 Jun 2000 00:30:54 -0000
- Date: Wed, 14 Jun 2000 17:30:37 -0700 (PDT)
-
- Subject: [PATCH] xsub attributes
- From: Doug MacEachern <dougm@covalent.net>
- Date: Wed, 14 Jun 2000 15:09:22 -0700 (PDT)
- Message-ID: <Pine.LNX.4.10.10006141456050.340-100000@mojo.covalent.net>
-
- Subject: [ID 20000614.003] 5.6.0 File/Glob.pm incompatibility
- From: Andy Dougherty <doughera@lafayette.edu>
- Date: Wed, 14 Jun 2000 13:33:32 -0400 (EDT)
- Message-Id: <Pine.SOL.4.10.10006141332220.3643-100000@maxwell.phys.lafayette.edu>
-
- Subject: [PATCH] 5.6.0 lib/Pod/{Html,Man,Text}.pm
- From: "Daniel S. Lewart" <d-lewart@uiuc.edu>
- Date: Tue, 13 Jun 2000 02:43:48 -0500
- Message-ID: <20000613024347.A28388@staff2.cso.uiuc.edu>
-
- Subject: [PATCH] Re: eval documentation: context
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Mon, 12 Jun 2000 15:07:29 +0100
- Message-Id: <E131UsD-0002ke-00@ursa.cus.cam.ac.uk>
-
- Subject: [PATCH] Re: [ID 20000612.001] map {chop; $_} (Literals problem)
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Mon, 12 Jun 2000 14:55:59 +0100
- Message-Id: <E131Uh5-0002cj-00@ursa.cus.cam.ac.uk>
-
- Subject: [ID 20000609.002] Text::Wrap::wrap does not handle multiline strings properly
- From: "Milton L. Hankins" <mlh@swl.msd.ray.com>
- Date: Fri, 09 Jun 2000 12:39:27 -0400
- Message-Id: <39411DBF.A04BB1A@swl.msd.ray.com>
- (plus update the version "number" of Text::Wrap)
-
- Subject: [ID 20000602.002] [PATCH] perlsub.pod: ambiguous usage of "closure"
- From: Tim Ayers <tayers@bridge.com>
- Date: Thu, 08 Jun 2000 08:11:06 +0200
- Message-id: <393F38FA.9B5F4C7D@m.dasa.de>
- [resent by Richard Foley, Message-Id probably wrong]
-
- Subject: Re: backwards compatibility in h2xs and makemaker [PATCH]
- From: rspier@pobox.com (Robert Spier)
- Date: Wed, 7 Jun 2000 12:47:37 -0400 (EDT)
- Message-ID: <14654.31913.845602.610277@rls.cx>
-
- Subject: [PATCH 5.6.0] utils/h2xs.PL
- From: "Daniel S. Lewart" <d-lewart@uiuc.edu>
- Date: Wed, 7 Jun 2000 04:02:04 -0500
- Message-ID: <20000607040201.A22568@staff1.cso.uiuc.edu>
-
- Subject: [PATCH 5.6.0]ITHREADs for VMS
- From: Dan Sugalski <dan@sidhe.org>
- Date: Tue, 06 Jun 2000 11:59:50 -0400
- Message-Id: <4.3.2.7.0.20000606115752.01c82220@24.8.96.48>
- Branch: maint-5.6/perl
- !> (integrate 31 files)
-____________________________________________________________________________
-[ 7769] By: gsar on 2000/11/20 11:29:06
- Log: integrate changes#6261..6266 from cfgperl
-
- Subject: Re: [PATCH cfgperl] BOMs away!
- From: simon@brecon.co.uk (Simon Cozens)
- Date: 17 Jun 2000 11:49:57 GMT
- Message-ID: <slrn8kmpf5.8pl.simon@justanother.perlhacker.org>
-
- Subject: 5.6.0 Patch for EPOC
- From: Olaf Flebbe <o.flebbe@gmx.de>
- Date: Tue, 13 Jun 2000 22:59:29 +0200 (MEST)
- Message-ID: <23449.960929969@www11.gmx.net>
-
- tr fixes from Simon Cozens
-
- Subject: [ID 20000628.004] Re: Problem compiling perl? [BSDI-Support-Request #71232]
- From: Marty Lucich <marty@netcom.com>
- Date: Wed, 28 Jun 2000 14:16:05 -0700 (PDT)
- Message-Id: <200006282116.OAA11148@netcom.com>
- ccdlflags update (the BSD/OS 4.1 part had already been taken
- care of by #6141).
-
- Subject: Re: [ID 20000628.006] POSIX::STRERR_FILENO typo
- From: sthoenna@efn.org (Yitzchak Scott-Thoennes)
- Date: Wed, 28 Jun 2000 17:50:12 -0700
- Message-ID: <E1pW5gzkg2kV092yn@efn.org>
-
- Subject: [PATCH 5.6.0] cygwin port
- Message-ID: <779F20BCCE5AD31186A50008C75D997917173C@silldn_mail1.sanwaint.com>
- From: "Fifer, Eric" <EFifer@sanwaint.com>
- Date: Thu, 29 Jun 2000 12:58:29 +0100
- Branch: maint-5.6/perl
- !> README.epoc cygwin/Makefile.SHs doop.c epoc/config.sh
- !> epoc/createpkg.pl epoc/epocish.c epoc/epocish.h
- !> ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
- !> hints/bsdos.sh pod/perldiag.pod t/comp/require.t toke.c
-____________________________________________________________________________
-[ 7768] By: gsar on 2000/11/20 11:13:44
- Log: integrate changes#6252..6256,6259..6260
-
- Paranoia tweak on #6249.
- Subject: Re: [PATCH 5.6.0 IPC/Open3.pm] Allow the use of numeric fd's
- From: Ronald J Kimball <rjk@linguist.dartmouth.edu>
- Date: Sun, 25 Jun 2000 23:43:12 -0400
- Message-ID: <20000625234312.B74147@linguist.dartmouth.edu>
-
- Subject: tr///, help wanted.
- From: simon@brecon.co.uk (Simon Cozens)
- Date: 28 Jun 2000 11:29:04 GMT
- Message-ID: <slrn8ljoc0.fbd.simon@justanother.perlhacker.org>
-
- small thinko tweaks
-
- tweaks from Simon Conzes to further fix tr/// under utf8
-
- perlnewmod was missing from MANIFEST.
-
- Subject: Re: [PATCH] pack('U',$foo) doesn't UTF8
- From: simon@brecon.co.uk (Simon Cozens)
- Date: 17 Jun 2000 11:56:44 GMT
- Message-ID: <slrn8kmprs.8pl.simon@justanother.perlhacker.org>
- pack U0, pack C0
- Branch: maint-5.6/perl
- !> MANIFEST doop.c embed.h embed.pl embedvar.h global.sym
- !> lib/Exporter.pm lib/IPC/Open3.pm objXSUB.h op.c
- !> pod/perlfunc.pod pp.c pp_proto.h proto.h sv.c t/op/my_stash.t
- !> t/op/pack.t t/op/tr.t t/pragma/constant.t t/pragma/warn/op
-____________________________________________________________________________
-[ 7767] By: gsar on 2000/11/20 10:51:38
- Log: integrate change#6250 from cfgperl
-
- Subject: Re: [PATCH] support 'my __PACKAGE__ $obj = ...'
- From: Doug MacEachern <dougm@covalent.net>
- Date: Tue, 27 Jun 2000 14:17:28 -0700 (PDT)
- Message-ID: <Pine.LNX.4.10.10006271412340.7587-100000@mojo.covalent.net>
- Branch: maint-5.6/perl
- +> t/op/my_stash.t
- !> MANIFEST embed.pl global.sym proto.h toke.c
-____________________________________________________________________________
-[ 7766] By: gsar on 2000/11/20 10:48:34
- Log: integrate changes#6240,6242..6246,6248,6249 from cfgperl
-
- Subject: [ID 20000626.007] h2xs man page contains trailing garbage
- From: Nicholas Clark <nick@Bagpuss.unfortu.net>
- Date: Mon, 26 Jun 2000 18:40:14 +0100
- Message-Id: <200006261740.SAA02740@Bagpuss.unfortu.net>
-
- Subject: [PATCH] bytes<->utf8 fixes
- From: simon@brecon.co.uk (Simon Cozens)
- Date: 26 Jun 2000 04:55:45 GMT
- Message-ID: <slrn8ldoih.fbd.simon@justanother.perlhacker.org>
-
- Subject: [PATCH] is_utf8_string
- From: simon@brecon.co.uk (Simon Cozens)
- Date: 26 Jun 2000 02:25:59 GMT
- Message-ID: <slrn8ldfpn.h5k.simon@justanother.perlhacker.org>
-
- Subject: [PATCH] avoid mg_ptr in '*' magic
- From: Doug MacEachern <dougm@covalent.net>
- Date: Sun, 25 Jun 2000 11:16:08 -0700 (PDT)
- Message-ID: <Pine.LNX.4.10.10006251045190.461-100000@mojo.covalent.net>
-
- Subject: [ID 20000624.001] PERL_DL_DEBUG=1 DynaLoader message appears to be wrong
- From: Nicholas Clark <nick@Bagpuss.unfortu.net>
- Date: Sat, 24 Jun 2000 13:06:20 +0100
- Message-Id: <200006241206.NAA03771@Bagpuss.unfortu.net>
-
- Allow for standalone testing.
-
- Subject: DOC PATCH 5.6.0: perlfunc/sprintf does not contain an example
- From: Mark-Jason Dominus <mjd@plover.com>
- Date: Tue, 27 Jun 2000 22:36:42 -0400
- Message-ID: <20000628023642.12166.qmail@plover.com>
-
- Subject: Re: [PATCH 5.6.0 IPC/Open3.pm] Allow the use of numeric fd's
- From: Frank Tobin <ftobin@uiuc.edu>
- Date: Sun, 25 Jun 2000 19:00:58 -0500 (CDT)
- Message-ID: <Pine.BSF.4.21.0006251855340.20487-100000@srh0902.urh.uiuc.edu>
- Branch: maint-5.6/perl
- !> embed.h embed.pl embedvar.h ext/DynaLoader/DynaLoader_pm.PL
- !> global.sym gv.c lib/IPC/Open3.pm objXSUB.h perlapi.c perlapi.h
- !> pod/perlapi.pod pod/perlfunc.pod pod/perlintern.pod pp_proto.h
- !> proto.h sv.c t/lib/filefunc.t t/lib/filespec.t t/lib/peek.t
- !> utf8.c utils/h2xs.PL
-____________________________________________________________________________
-[ 7765] By: gsar on 2000/11/20 10:29:13
- Log: integrate change#6239 from cfgperl
-
- Configure maintenance. Sever some dependency cycles,
- separate gccversion from the cc unit,
- address [ID 20000623.006] Configure script patch for using gcc on AIX
- (but solve it a little bit differently),
- unduplex some accidentally duplicated units,
- suggest using gcc if no cc available
- (p5p thread: "Solaris configure: counterproposal", 1999-09)
- Branch: maint-5.6/perl
- !> Configure Todo-5.6 config_h.SH
-____________________________________________________________________________
-[ 7764] By: gsar on 2000/11/20 10:25:55
- Log: integrate changes#6233..6238 from cfgperl
-
- Subject: PATCH 5.6.0: Document OPf_SPECIAL flag in regcomp op nodes
- From: Mark-Jason Dominus <mjd@plover.com>
- Date: Fri, 16 Jun 2000 20:53:04 -0400
- Message-ID: <20000617005304.8008.qmail@plover.com>
-
- Prefer C:/temp in Win32 as File::Spec->tmpdir to /tmp
- because when run as services (Win32ese for daemons)
- no environment variables are set and tmpdir ends up as /tmp,
- which is ambiguous.
- Subject:[ID 20000616.002] File::Spec->tmpdir broken when running as service
- From: matt@sergeant.org
- Date: 16 Jun 2000 16:30:43 -0000
- Message-Id: <20000616163043.26398.qmail@mail.sergeant.org>
-
- The thread begun by
- Subject: [ID 20000616.001] Typo on line 390 of .../hints/solaris_2.sh
- From: Kevin.Ruscoe@ubsw.com
- Date: Fri, 16 Jun 2000 16:38:51 +0100
- Message-Id: <H000019b03c300d6@MHS>
-
- Tweak embed.pl, regen headers.
-
- Subject: [PATCH 5.6.0] XS module loading fixup for VMS
- From: Dan Sugalski <dan@sidhe.org>
- Date: Fri, 23 Jun 2000 17:00:00 -0400
- Message-Id: <4.3.2.7.0.20000623165934.00c93d10@24.8.96.48>
- Branch: maint-5.6/perl
- !> (integrate 27 files)
-____________________________________________________________________________
-[ 7763] By: gsar on 2000/11/20 10:08:08
- Log: s/perl56delta/perldelta/g
- Branch: maint-5.6/perl
- ! pod/Makefile
-____________________________________________________________________________
-[ 7762] By: gsar on 2000/11/20 10:04:00
- Log: integrate changes#6225,6229,6231,6232 from cfgperl
-
- Add source code filenames to apidoc.
- From: simon@brecon.co.uk (Simon Cozens)
- Subject: [PATCH embed.pl] Source X-ref
- Date: 22 Jun 2000 02:18:49 GMT
- Message-ID: <slrn8l2ts8.h5k.simon@justanother.perlhacker.org>
-
- Subject: README.hpux version 0.6.1
- Date: Tue, 20 Jun 2000 15:25:51 -0700 (PDT)
- From: Jeff Okamoto <okamoto@xfiles.intercon.hp.com>
- Message-Id: <200006202225.PAA26205@xfiles.intercon.hp.com>
-
- Subject: [PATCH 5.6.0] cygwin port
- From: "Fifer, Eric" <EFifer@sanwaint.com>
- Date: Tue, 20 Jun 2000 14:30:58 +0100
- Message-ID: <779F20BCCE5AD31186A50008C75D9979171734@silldn_mail1.sanwaint.com>
-
- Subject: PATCH: pod/perlutil.pod - utilities packaged with the Perl distribution
- From: simon@brecon.co.uk (Simon Cozens)
- Date: 19 Jun 2000 15:18:27 GMT
- Message-ID: <slrn8ksee3.cp9.simon@justanother.perlhacker.org>
-
- plus update pod/Makefile and regenerate perltoc
- Branch: maint-5.6/perl
- +> pod/perlutil.pod
- !> MANIFEST README.cygwin README.hpux Todo-5.6 embed.pl
- !> lib/File/Find.pm pod/Makefile pod/perltoc.pod pod/roffitall
-____________________________________________________________________________
-[ 7344] By: gsar on 2000/10/16 09:30:21
- Log: integrate change#6220 from cfgperl
-
- Win32 patches from Benjamin Stuhl.
- Branch: maint-5.6/perl
- !> makedef.pl win32/win32.h
-____________________________________________________________________________
-[ 7343] By: gsar on 2000/10/16 08:32:19
- Log: integrate changes#6221,6222 from cfgperl
-
- Remove tr///CU (the feature is to be obsoleted by better interfaces).
- From: simon@brecon.co.uk (Simon Cozens)
- Subject: [PATCH] Eliminate tr///[CU][CU]
- Date: 23 Jun 2000 11:05:40 GMT
- Message-ID: <slrn8l6h44.h5k.simon@justanother.perlhacker.org>
-
- doc typo fix
- Subject: [PATCH] documentation typo in lib/Pod/Usage.pm
- From: Ian Phillipps <Ian.Phillipps@iname.com>
- Date: Fri, 23 Jun 2000 10:40:58 +0100
- Message-ID: <20000623104058.A22791@homer.diplex.co.uk>
- Branch: maint-5.6/perl
- !> doop.c embed.pl lib/Pod/Usage.pm pod/perlop.pod toke.c utf8.c
-____________________________________________________________________________
-[ 7342] By: gsar on 2000/10/16 08:28:08
- Log: integrate change#6217 from cfgperl (in part)
-
- Rename the fdpid locking and integrate with Sarathy.
- Branch: maint-5.6/perl
- !> Configure config_h.SH doio.c embed.h embed.pl embedvar.h
- !> global.sym gv.c intrpvar.h objXSUB.h perl.c perlapi.h pp.c
- !> pp_ctl.c proto.h sv.h util.c util.h vmesa/vmesa.c
- !> win32/win32.c
-____________________________________________________________________________
-[ 7341] By: gsar on 2000/10/16 08:23:39
- Log: integrate changes#6214..6216 from mainline
-
- @_ can't have junk in it even in the non-USE_ITHREADS case because
- caller() wants to populate @DB::args with it (causes a coredump
- in Carp::confess())
-
- tweak comment about @DB::args
-
- be more optimal about clearing @_
- Branch: maint-5.6/perl
- !> av.h cop.h pp_ctl.c t/op/runlevel.t
-____________________________________________________________________________
-[ 7340] By: gsar on 2000/10/16 08:20:37
- Log: integrate changes#6207..6210 from cfgperl
-
- Subject: [PATCH 5.6.0] Threadsafe patches
- From: Dan Sugalski <dan@sidhe.org>
- To: perl5-porters@perl.org
- Date: Mon, 08 May 2000 18:08:13 -0400
- Message-Id: <4.3.1.0.20000508180729.02182de0@24.8.96.48>
-
- Regen headers for #6207.
-
- Lock PL_fdpid against race conditions, based on:
- Subject: [PATCH 5.6.0]subprocess fixup for threads
- From: Dan Sugalski <dan@sidhe.org>
- To: perl5-porters@perl.org
- Date: Tue, 11 Apr 2000 17:02:32 -0400
- Message-Id: <4.3.0.20000411170218.01d2f580@24.8.96.48>
-
- Mopup for #6207 and #6209.
- Branch: maint-5.6/perl
- !> doio.c embed.h embed.pl global.sym gv.c intrpvar.h objXSUB.h
- !> perl.c pp.c pp_ctl.c proto.h sv.h util.c vmesa/vmesa.c
- !> win32/win32.c
-____________________________________________________________________________
-[ 7339] By: gsar on 2000/10/16 08:14:34
- Log: integrate change#6203 from cfgperl
-
- perldiag should refer to perlos2.pod not README.os2
- Branch: maint-5.6/perl
- !> pod/perldiag.pod
-____________________________________________________________________________
-[ 7338] By: gsar on 2000/10/16 08:11:42
- Log: integrate change#6201 from mainline
-
- Perl_eval_pv() leaks 4 bytes every time it is called because it
- does a PUSHMARK that's never ever POPMARKed; in general, only
- Perl_call_[sp]v() need a PUSHMARK for incoming arguments;
- Perl_eval_[sp]v() don't because they don't take any incoming
- arguments (this leak has been around since the original version
- of perl_eval_pv() in 5.003_97e)
- Branch: maint-5.6/perl
- !> perl.c
-____________________________________________________________________________
-[ 7337] By: gsar on 2000/10/16 08:08:47
- Log: integrate changes#6197..6200 from cfgperl
-
- Subject: [ID 20000602.005] [PATCH]5.6.0 (DOC) tiny change to perlsyn.pod
- From: John Borwick <jhborwic@unity.ncsu.edu>
- Date: Fri, 2 Jun 2000 14:35:03 -0400 (EDT)
- Message-Id: <Pine.GSO.4.21.0006021420290.11432-100000@eos00du.eos.ncsu.edu>
-
- Subject: [PATCH 5.6.0]VMS fixups so we can build with MULTIPLICITY
- From: Dan Sugalski <dan@sidhe.org>
- To: vmsperl@perl.org, perl5-porters@perl.org
- Date: Fri, 02 Jun 2000 16:00:41 -0400
- Message-Id: <4.3.2.7.0.20000602155951.01f02b20@24.8.96.48>
- Message-Id: <4.3.2.7.0.20000602164011.01ec8c30@24.8.96.48>
-
- Subject: [PATCH 5.6.0]Make perl's malloc work on VMS
- From: Dan Sugalski <dan@sidhe.org>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Date: Fri, 02 Jun 2000 17:30:51 -0400
- Message-Id: <4.3.2.7.0.20000602173021.01f03570@24.8.96.48>
-
- Update to cperl-mode.el 4.31 from
- ftp://ftp.math.ohio-state.edu/pub/users/ilya/cperl-mode.el
- Subject: A couple of notes
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Date: Sat, 3 Jun 2000 23:33:32 -0400
- Message-ID: <20000603233332.A6790@monk.mps.ohio-state.edu>
- Branch: maint-5.6/perl
- !> emacs/cperl-mode.el embed.h embed.pl embedvar.h
- !> ext/POSIX/POSIX.xs global.sym objXSUB.h perlapi.c perlapi.h
- !> pod/perlapi.pod pod/perlintern.pod pod/perlsyn.pod proto.h
- !> vms/descrip_mms.template vms/gen_shrfls.pl vms/vms.c
- !> vms/vmsish.h
-____________________________________________________________________________
-[ 7336] By: gsar on 2000/10/16 08:03:46
- Log: integrate changes#6194,6195 from mainline
-
- fix small eval"" memory leaks under USE_ITHREADS
-
- fix yet another eval"" leak under USE_ITHREADS
- Branch: maint-5.6/perl
- !> cop.h embed.h embed.pl objXSUB.h op.c perl.c perlapi.c perly.c
- !> perly_c.diff pp_ctl.c proto.h scope.c scope.h sv.c toke.c
- !> vms/perly_c.vms
-____________________________________________________________________________
-[ 7335] By: gsar on 2000/10/16 08:02:15
- Log: integrate changes#6190,6191 from mainline
-
- submit missing embed.pl change
-
- vec() loses numericalness (modified version of patch suggested
- by Robin Barker)
- Branch: maint-5.6/perl
- !> doop.c embed.pl t/op/vec.t
-____________________________________________________________________________
-[ 7334] By: gsar on 2000/10/16 08:01:03
- Log: integrate change#6189 from mainline
-
- counting tr/// corrupts later operation (from M.J.T Guy)
- Branch: maint-5.6/perl
- !> doop.c t/op/tr.t
-____________________________________________________________________________
-[ 7333] By: gsar on 2000/10/16 07:59:07
- Log: integrate changes#6183..6188 from mainline
-
- SelfLoader can lose $@ in AUTOLOAD() (from Nicholas Clark
- <nick@ccl4.org>)
-
- tweak for change#6127
-
- remove incorrect documentation about implicit split to @_ in
- list context, which never really worked in perl 5 (from
- M.J.T. Guy)
-
- further qualify references to "alphanumeric" (from Wolfgang Laun
- <wolfgang.laun@alcatel.at>)
-
- replace pod2latex with the one in Pod-LaTeX v0.52 from CPAN
- (from Tim Jenness <t.jenness@jach.hawaii.edu>)
-
- h2xs tweaks
- Branch: maint-5.6/perl
- +> lib/Pod/LaTeX.pm t/lib/selfloader.t
- !> AUTHORS MAINTAIN MANIFEST ext/Devel/Peek/Peek.pm handy.h
- !> lib/SelfLoader.pm perl.c pod/perlapi.pod pod/perldata.pod
- !> pod/perlfaq6.pod pod/perlfaq9.pod pod/perlfunc.pod
- !> pod/perllocale.pod pod/perlre.pod pod/perltrap.pod
- !> pod/pod2latex.PL utils/h2xs.PL
-____________________________________________________________________________
-[ 7332] By: gsar on 2000/10/16 07:53:52
- Log: integrate change#6179 from mainline
-
- buggy modulus on UVs introduced by change#3378 (resulted in
- 4063328477 % 65535 amounting to 27406, instead of 27407)
- Branch: maint-5.6/perl
- !> pp.c t/op/arith.t
-____________________________________________________________________________
-[ 7331] By: gsar on 2000/10/16 07:52:49
- Log: integrate changes#6176,6177,6178,6182 from cfgperl
-
- Single-quoted utf8 patch from Simon Cozens.
-
- Substitution utf8 patch from Simon Cozens.
-
- Be cleaner.
-
- Be Cleaner Part Deux.
- Branch: maint-5.6/perl
- !> Makefile.SH pp_hot.c toke.c
-____________________________________________________________________________
-[ 7330] By: gsar on 2000/10/16 07:41:36
- Log: integrate change#6172 from mainline
-
- fix buggy multiline matching of C<"a\nxb\n" =~ /(?!\A)x/m>
- (from Ilya Zakharevich)
- Branch: maint-5.6/perl
- !> regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 7329] By: gsar on 2000/10/16 07:40:25
- Log: integrate change#6171 from mainline
-
- scalar() doesn't force scalar context when used in void context
- (from Simon Cozens)
- Branch: maint-5.6/perl
- !> op.c t/op/wantarray.t
-____________________________________________________________________________
-[ 7328] By: gsar on 2000/10/16 07:39:33
- Log: integrate change#6170 from mainline
-
- change#6142 needs tweaks to tests to work where there's no
- symlink() (from Helmut Jarausch <jarausch@igpm.rwth-aachen.de>)
- Branch: maint-5.6/perl
- !> t/lib/filefind.t
-____________________________________________________________________________
-[ 7327] By: gsar on 2000/10/16 07:35:34
- Log: integrate changes#6166..6168 from cfgperl
-
- Introduce HAS_GETESPWNAM, HAS_GETPRPWNAM, and I_PROT
- in case somebody wants to write an extension for more
- shadow database interfaces.
-
- tweak todo
-
- Tweak NV_PRESERVES_UV*, vms/subconfigure.com left untouched.
- Branch: maint-5.6/perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> Todo-5.6 config_h.SH epoc/config.sh perl.h pp_sys.c toke.c
- !> vms/subconfigure.com vos/config.def vos/config.h vos/config.pl
- !> vos/config_h.SH_orig win32/config.bc win32/config.gc
- !> win32/config.vc win32/config_H.bc win32/config_H.gc
- !> win32/config_H.vc win32/config_h.PL win32/config_sh.PL
-____________________________________________________________________________
-[ 7326] By: gsar on 2000/10/16 07:29:05
- Log: integrate changes#6157,6159..6161,6164 from cfgperl
-
- Regen Configure to jive with #6149.
-
- Upgrade to File::Temp 0.08 from Tim Jenness via CPAN.
-
- Changes for the File::Temp 0.08 (change #6159) test suite
- to fit better into the Perl distribution test framework.
-
- Add autogeneration of perlmodlib.pod and the new perlnewmod.pod,
- both from Simon Cozens.
-
- detypo
- Branch: maint-5.6/perl
- +> pod/perlmodlib.PL pod/perlnewmod.pod
- !> AUTHORS Configure MAINTAIN MANIFEST config_h.SH
- !> lib/File/Temp.pm pod/Makefile pod/perl.pod pod/perlmodlib.pod
- !> pod/perltoc.pod t/lib/ftmp-mktemp.t t/lib/ftmp-posix.t
- !> t/lib/ftmp-security.t t/lib/ftmp-tempfile.t
-____________________________________________________________________________
-[ 7325] By: gsar on 2000/10/16 07:25:13
- Log: integrate change#6158 from vmsperl
-
- Add fallback to tmpfile for use in cases where user's relying on
- ACLs on SYS$SCRATCH to permit file creation. (based on Charles
- Lane's patch)
- Branch: maint-5.6/perl
- !> vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 7324] By: gsar on 2000/10/16 07:20:50
- Log: integrate changes#6153..6155 from mainline
-
- prettier Test::Harness output on failed tests (from Nicholas Clark
- <nick@Bagpuss.uk.boo.com>)
-
- avoid type mismatch warning
-
- small bug in change#6144; remove random \xA0 character that snuck
- in via change#6145
- Branch: maint-5.6/perl
- !> lib/AutoSplit.pm lib/ExtUtils/xsubpp lib/Test/Harness.pm
- !> perl.c
-____________________________________________________________________________
-[ 7323] By: gsar on 2000/10/16 07:18:47
- Log: integrate changes#6151,6152 from mainline
-
- fix accidental pessimization in RE optimizer (from Ilya Zakharevich)
-
- cosmetic fixups of RE debug output (from Ilya Zakharevich)
- Branch: maint-5.6/perl
- !> regexec.c
-____________________________________________________________________________
-[ 7322] By: gsar on 2000/10/16 07:17:25
- Log: integrate changes#6146..6150 from mainline
-
- doc typo
-
- add a make entry to Config.pm so "perl -V:make" works on VMS
- (from Peter Prymmer)
-
- close open file before chmod() (from Rocco Caputo <troc@netrus.net>)
-
- OS/2 tweaks for usethreads build (from Rocco Caputo
- <troc@netrus.net>)
-
- perlrequick.pod updates (from Mark Kvale <kvale@phy.ucsf.edu>)
- Branch: maint-5.6/perl
- !> Configure hints/os2.sh lib/ExtUtils/MM_Unix.pm lib/warnings.pm
- !> makedef.pl os2/Makefile.SHs os2/OS2/REXX/t/rx_dllld.t
- !> os2/OS2/REXX/t/rx_objcall.t os2/OS2/REXX/t/rx_tievar.t
- !> os2/OS2/REXX/t/rx_tieydb.t os2/os2.c os2/os2ish.h perl.c
- !> pod/perlrequick.pod util.c vms/subconfigure.com warnings.h
- !> warnings.pl x2p/a2p.h
-____________________________________________________________________________
-[ 7321] By: gsar on 2000/10/16 07:14:02
- Log: integrate changes#6143..6145 from mainline
-
- MacOS support, part 1 (from Matthias Neeracher
- <neeri@iis.ee.ethz.ch>)
-
- MacOS support, part 2: make AutoSplit use File::Spec instead
- of assuming Unixisms; *UNTESTED on Unix* (from Matthias Neeracher
- <neeri@iis.ee.ethz.ch>)
-
- make xsubpp skip embedded pod (from Matthias Neeracher
- <neeri@iis.ee.ethz.ch>)
- Branch: maint-5.6/perl
- +> ext/DynaLoader/dl_mac.xs
- !> MANIFEST ext/DB_File/Makefile.PL ext/NDBM_File/Makefile.PL
- !> ext/POSIX/POSIX.xs lib/AutoSplit.pm lib/ExtUtils/MakeMaker.pm
- !> lib/ExtUtils/xsubpp mg.c perl.c perlsfio.h pod/perlfaq4.pod
- !> pp_ctl.c proto.h toke.c util.c util.h
-____________________________________________________________________________
-[ 7320] By: gsar on 2000/10/16 07:12:13
- Log: integrate changes#6141,6142 from mainline
-
- BSD/OS (bsdi) hints update by Timur I. Bakeyev and Todd C. Miller,
- forwarded by Peter Seebach from the bsdi-users mailing list.
- p5p Message-Id: <200005280543.AAA24519@guild.plethora.net>
-
- File::Find fails to chdir when chasing symlinks (from
- Helmut Jarausch <jarausch@igpm.rwth-aachen.de>)
- Branch: maint-5.6/perl
- !> hints/bsdos.sh lib/File/Find.pm t/lib/filefind.t
-____________________________________________________________________________
-[ 7319] By: gsar on 2000/10/16 07:04:30
- Log: integrate change#6139 from mainline
-
- revise mktables.PL for bugs and newness in Unicode 3.0
- (from James Bence <jbence@amgen.com>)
- Branch: maint-5.6/perl
- +> (branch 30 files)
- !> (integrate 49 files)
-____________________________________________________________________________
-[ 7318] By: gsar on 2000/10/16 07:01:01
- Log: integrate changes#6137,6138 from mainline
-
- fix bogus redeclaration warning for "our" variables in different
- scopes
-
- add note about the handling of negative indices to tied arrays
- (from Michael G Schwern <schwern@pobox.com>)
- Branch: maint-5.6/perl
- !> op.c pod/perltie.pod t/pragma/strict-vars
-____________________________________________________________________________
-[ 7317] By: gsar on 2000/10/16 06:58:46
- Log: integrate changes#6127..6136 from mainline
-
- call_method(...,G_EVAL) can longjmp() out if the method probing
- failed (from Gisle Aas)
-
- new perlxstut example for passing/returning refs to arrays
- (from David Lowe <dlowe@pootpoot.com>)
-
- VMS test harness tweak (from Jesper Naur <jesper.naur@post.tele.dk>)
-
- fix places that mean C<"word" character> but say C<alphanumeric
- character>
-
- avoid warnings in POSIX.pm (from Barrie Slaymaker)
-
- warnings::enabled() doesn't fall back to looking at $^W if
- caller isn't using lexical warnings (from Paul Marquess)
-
- elide bogus test in change#6132
-
- make Test::Harness use wait.h/WCOREDUMP if available
- (from Ben Tilly <ben_tilly@hotmail.com>)
-
- enable Test::Harness to dynamically determine column width etc.
- (from Rob Napier <rnapier@employees.org>)
-
- random pod typos (from Peter Scott <Peter@PSDT.com>)
- Branch: maint-5.6/perl
- !> cop.h ext/Devel/Peek/Peek.pm ext/POSIX/POSIX.pm
- !> lib/Test/Harness.pm perl.c pod/perldebguts.pod
- !> pod/perlfunc.pod pod/perlre.pod pod/perlretut.pod
- !> pod/perlxstut.pod pp_ctl.c t/pragma/warn/9enabled vms/test.com
-____________________________________________________________________________
-[ 7316] By: gsar on 2000/10/16 06:53:23
- Log: integrate change#6126 from mainline
-
- change#2879 broke rvalue autovivification of magicals such as
- ${$num} (reworked variant of patch suggested by Simon Cozens)
- Branch: maint-5.6/perl
- !> embed.h embed.pl gv.c pod/perlapi.pod pod/perlintern.pod pp.c
- !> pp_hot.c proto.h t/op/gv.t
-____________________________________________________________________________
-[ 7315] By: gsar on 2000/10/16 06:51:38
- Log: integrate changes#6123,6125 from mainline
-
- clarify gotcha with #line directives (from Rocco Caputo
- <troc@netrus.net>)
-
- enable propagating exception objects via Perl_croak() in XS code
- (from Gisle Aas)
- Branch: maint-5.6/perl
- !> pod/perldebug.pod pod/perlsyn.pod util.c
-____________________________________________________________________________
-[ 7314] By: gsar on 2000/10/16 06:49:28
- Log: integrate change#6122 from mainline
-
- downgrade fatal error on C<"foo@nosucharray.com"> to optional
- warning (from Mark-Jason Dominus)
- Branch: maint-5.6/perl
- !> lib/ExtUtils/typemap pod/perldelta.pod pod/perlsub.pod
- !> pod/perltrap.pod t/base/lex.t t/pragma/strict-vars
- !> t/pragma/strict.t t/pragma/warn/toke t/pragma/warnings.t
- !> toke.c
-____________________________________________________________________________
-[ 7313] By: gsar on 2000/10/16 06:46:54
- Log: integrate changes#6112..6121 from vmsperl
-
- Check for existence of file before trying to delete
-
- Ugly workaround for version-specific RTL error
-
- Urk -- undo previous removal of vmsish 'exit' change
-
- Add bounds checking for several strings (Charles Lane)
-
- Miscellaneous cosmetic fixes (Charles Lane)
-
- Treat sockets as special in sys(read|write) (Charles Lane et al.)
-
- Regularize distinction between RMS$_DNF and RMS$_DIR (Craig Berry)
- Flatten case labels in switch statements uniformly (Charles Bailey)
-
- Quiet error messages in vmsish.t (Charles Lane)
-
- Add missing escape (Charles Lane)
-
- Allow eliminate_macros() and fixpath() to handle space-delimited
- lists (based on fixes by Craig Berry)
- Branch: maint-5.6/perl
- !> lib/ExtUtils/MM_VMS.pm lib/File/Spec/VMS.pm t/op/lex_assign.t
- !> vms/ext/vmsish.pm vms/ext/vmsish.t vms/test.com vms/vms.c
- !> vms/vmsish.h
-____________________________________________________________________________
-[ 7312] By: gsar on 2000/10/16 06:41:18
- Log: integrate changes#6107,6110 from cfgperl
-
- Tweak the todo list.
-
- todo tweak
- Branch: maint-5.6/perl
- !> Todo-5.6
-____________________________________________________________________________
-[ 7311] By: gsar on 2000/10/16 06:38:38
- Log: integrate changes#6104,6108 from mainline
-
- PL_sys_intern was being initialized too late on windows
-
- reenable fake signal handling on Windows, bugs and all
- Branch: maint-5.6/perl
- !> embed.h embed.pl global.sym makedef.pl mg.c objXSUB.h perl.c
- !> perl.h perlapi.c pod/perlapi.pod proto.h win32/perlhost.h
- !> win32/win32.c
-____________________________________________________________________________
-[ 7310] By: gsar on 2000/10/16 06:36:03
- Log: integrate changes#6095,6097..6103 from cfgperl
-
- Introduce NV_PRESERVED_BITS. Not yet used anywhere but
- might be useful in future.
-
- Add a note about possible compilation problems from Allen Smith.
-
- Add a note about other, yet unsupported, shadow password APIs.
-
- Tweaks for the cc bugs from Allen Smith.
-
- More compilation tweakery from Allen Smith.
-
- Hints and test tweaks for Unicos.
-
- The test suite tweak in #6101 wasn't quite right.
-
- Test tweaking for Unicos continues.
- Branch: maint-5.6/perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH hints/irix_6.sh hints/unicos.sh pp_sys.c t/lib/b.t
- !> t/lib/complex.t t/op/64bitint.t
-____________________________________________________________________________
-[ 7309] By: gsar on 2000/10/16 06:29:41
- Log: integrate changes#6093,6094 from mainline
-
- fork() failure to create pseudo process sets errno=EAGAIN and returns
- undef on windows (from Clinton Pierce <clintp@geeksalad.org>)
-
- cygwin update (from Eric Fifer <efifer@sanwaint.com>)
- Branch: maint-5.6/perl
- !> README.cygwin cygwin/Makefile.SHs cygwin/cygwin.c
- !> hints/cygwin.sh pp_sys.c sv.c win32/perlhost.h
-____________________________________________________________________________
-[ 7308] By: gsar on 2000/10/16 06:27:29
- Log: integrate change#6092 from cfgperl
-
- Regen perltoc with the fixed buildtoc.
- Branch: maint-5.6/perl
- !> pod/perltoc.pod
-____________________________________________________________________________
-[ 7307] By: gsar on 2000/10/16 06:26:40
- Log: integrate changes#6089,6090 from mainline
-
- buildtoc tweak to fix newline lossage
-
- concat doesn't preserve utf8-ness, and doesn't invalidate
- [NI]OK; added tests for both
- Branch: maint-5.6/perl
- !> perl.c pod/buildtoc pp_hot.c sv.c t/op/substr.t
-____________________________________________________________________________
-[ 7306] By: gsar on 2000/10/16 06:24:05
- Log: integrate change#6088 from cfgperl
-
- Remove HAS_SETSPENT, HAS_GETSPENT, HAS_ENDSPENT,
- because we do not use those. The HAS_GETSPNAM remains,
- though, because we still do use that.
- Branch: maint-5.6/perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH epoc/config.sh hints/machten.sh pod/perltoc.pod
- !> pp_sys.c vms/subconfigure.com vos/config.def vos/config.h
- !> vos/config_h.SH_orig win32/config.bc win32/config.gc
- !> win32/config.vc win32/config_H.bc win32/config_H.gc
- !> win32/config_H.vc win32/config_h.PL win32/config_sh.PL
-____________________________________________________________________________
-[ 7305] By: gsar on 2000/10/16 06:15:52
- Log: integrate changes#6084,6085,6087 from mainline
-
- substr() does not preserve utf8-ness (from Stefan Eissing
- <Eissing@medicaldataservice.de>); added tests
-
- repeat operator (x) doesn't preserve utf8-ness
-
- reverse() and quotemeta() weren't preserving utf8-ness; add tests
- Branch: maint-5.6/perl
- !> pp.c sv.c t/op/quotemeta.t t/op/substr.t toke.c
-____________________________________________________________________________
-[ 7304] By: gsar on 2000/10/16 06:13:10
- Log: integrate changes#6077..6083 from mainline
-
- avoid warnings in diagnostics.pm; pod tweaks (from Peter Prymmer
- and Tom Phoenix)
-
- workaround for CRT bug in chdir() (from Charles Lane, via
- Peter Prymmer)
-
- remove outdated kludge in Carp (NULLs are permitted in diagnostics
- now)
-
- add File::Temp v0.08 from CPAN, with small tweaks to testsuite
- (from Tim Jenness <t.jenness@jach.hawaii.edu>)
-
- better default perlbug categories for ok reports (from Richard Foley)
-
- peek.t non-portable to ithreads
-
- note about undocumented caller() return value (from M.J.T. Guy);
- yet another peek.t tweak
- Branch: maint-5.6/perl
- +> lib/File/Temp.pm t/lib/ftmp-mktemp.t t/lib/ftmp-posix.t
- +> t/lib/ftmp-security.t t/lib/ftmp-tempfile.t
- !> AUTHORS MAINTAIN MANIFEST iperlsys.h lib/Carp/Heavy.pm
- !> lib/diagnostics.pm pod/perlfunc.pod pod/perlrun.pod
- !> pod/perltie.pod t/lib/peek.t utils/perlbug.PL vms/vms.c
- !> vms/vmsish.h
-____________________________________________________________________________
-[ 7303] By: gsar on 2000/10/16 06:03:18
- Log: integrate changes#6011,6016,6033,6035..6039,6047..6052,6054..6059,
- 6073..6075 from cfgperl (pp_sys.c manually merged due to conflicts)
-
- &HUGE_VAL is not defined, it exists.
-
- Do not warn that an infinity does not look like a number.
-
- Rewrite the pwent/spent logic to be a little bit more clearer.
-
- Continue on the pwent/spent case.
-
- Correct Freudian slip.
-
- Use HUGE_VALL if applicable.
-
- pwent/spent #ifdef imbalance.
-
- Infinite problems.
-
- Call getspnam() only iff needd.
-
- Test both the scalar and list contexts.
-
- Use setxxent()/endxxent().
-
- Complex tweakery.
-
- Unicos hint tweak.
-
- Be more forgiving in POSIX about HUGE_VALL.
-
- Detypo.
-
- The search of infinity continues, this time simplified.
-
- The logic of choosing strtol/strtoul/strtoll/strtoull was wrong
- in natively 64-bit platforms where a long is a quad (no need
- for long longs). Also added bias for IVs.
-
- Complex tweaks.
-
- Introduce t/lib/peek.t.
-
- Make the test more portable.
- Branch: maint-5.6/perl
- +> t/lib/peek.t
- ! pp_sys.c
- !> MANIFEST ext/POSIX/POSIX.xs hints/unicos.sh
- !> lib/Math/Complex.pm sv.c t/lib/complex.t t/op/grent.t
- !> t/op/pwent.t toke.c util.c
-____________________________________________________________________________
-[ 7302] By: gsar on 2000/10/16 05:03:37
- Log: integrate changes#6066..6071 from mainline
-
- s/END/CHECK/
-
- replace direct call to sighandler() with (*PL_sighandlerp)()
-
- note about values()
-
- File::Spec compatibility update (from Barrie Slaymaker
- <barries@slaysys.com>)
-
- remove misleading comment (from M.J.T. Guy)
-
- misformatted perllocal.pod (from Tim Jenness
- <t.jenness@jach.hawaii.edu>)
- Branch: maint-5.6/perl
- !> lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_Win32.pm
- !> lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/Unix.pm
- !> lib/File/Spec/VMS.pm lib/File/Spec/Win32.pm perl.c
- !> pod/perlfunc.pod t/lib/anydbm.t win32/win32.c
-____________________________________________________________________________
-[ 7301] By: gsar on 2000/10/16 05:00:08
- Log: integrate changes#6061..6063 from mainline
-
- change#5921 neglected to make eq honor "use bytes"
-
- additional tests for utf8.t
-
- tokeq() could read unallocated field in argument
- Branch: maint-5.6/perl
- !> sv.c t/pragma/utf8.t toke.c
-____________________________________________________________________________
-[ 7300] By: gsar on 2000/10/16 04:56:54
- Log: integrate changes#6046,6048,6057,6058 from mainline
-
- libscheck has insufficient checks for n32 libs (from
- Albert Chin-A-Young <china@thewrittenword.com>)
-
- add note about how $( doesn't interpolate in REs (from
- Philip Newton <newton@ficus.frogspace.net>)
-
- fix broken parsing of /\x{ab}/
-
- printf(...) should be PerlIO_printf(PerlIO_stdout(), ...)
- (spotted by Donald Kinzer <dkinzer@premia.com>)
- Branch: maint-5.6/perl
- !> hints/irix_6.sh perl.c pod/perlop.pod regcomp.c
- !> t/pragma/utf8.t
-____________________________________________________________________________
-[ 7299] By: gsar on 2000/10/16 04:52:50
- Log: integrate change#6044 from mainline
-
- change#3798 broke the meaning of "\0_7_7", tr/\0_// etc.; fix it
- such that underscores are only ignored in literal numbers,
- "\x{...}", and hex/oct argument
- Branch: maint-5.6/perl
- !> perl.c pp.c regcomp.c t/op/oct.t toke.c util.c
-____________________________________________________________________________
-[ 7298] By: gsar on 2000/10/16 04:50:53
- Log: integrate changes#6027..6043 from mainline
-
- podlators-1.02 update (from Russ Allbery)
-
- Pod::Man generates groff-incompatible macro definition (from
- Tom Christiansen)
-
- add CGI.pm v2.66 (from Lincoln Stein)
-
- introduce @LAST_MATCH_START and @LAST_MATCH_END, English aliases
- for @- and @+ (from Johan Vromans)
-
- small nits in diagnostics.pm (from Robin Barker)
-
- whitespace adjustments
-
- missing files in MANIFEST
-
- cpio 2.4.2 on Linux creates directories in 0700 mode, adjust makerel
- to compensate
-
- remove outdated perltrap entry (from Peter Scott <Peter@PSDT.com>)
-
- perlretut revisions (from Mark Kvale <kvale@phy.ucsf.edu>)
- Branch: maint-5.6/perl
- +> lib/CGI/Util.pm t/lib/cgi-pretty.t
- !> MANIFEST Porting/makerel lib/CGI.pm lib/CGI/Carp.pm
- !> lib/CGI/Cookie.pm lib/CGI/Pretty.pm lib/CGI/Push.pm
- !> lib/English.pm lib/Pod/Man.pm lib/Pod/Text.pm
- !> lib/diagnostics.pm pod/perldiag.pod pod/perlretut.pod
- !> pod/perltrap.pod pod/perlvar.pod pp_sys.c t/lib/cgi-function.t
- !> t/lib/cgi-html.t t/lib/cgi-request.t
-____________________________________________________________________________
-[ 7297] By: gsar on 2000/10/16 04:44:30
- Log: integrate change#6025 from mainline
-
- Is{Alnum,Alpha,Word} don't match titlecase
- TODO: IsSpace is defined recursively!
- (both spotted by Larry)
- Branch: maint-5.6/perl
- !> lib/unicode/Is/Alnum.pl lib/unicode/Is/Alpha.pl
- !> lib/unicode/Is/Word.pl lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 7296] By: gsar on 2000/10/16 04:39:30
- Log: integrate change#6023 from mainline
-
- debugger stomps on $. (from M.J.T. Guy)
- Branch: maint-5.6/perl
- !> lib/perl5db.pl
-____________________________________________________________________________
-[ 7295] By: gsar on 2000/10/16 04:38:02
- Log: integrate change#6022 from mainline
-
- unbalanced LEAVE after perl_clone(...,0) (from Doug MacEachern)
- Branch: maint-5.6/perl
- !> sv.c
-____________________________________________________________________________
-[ 7294] By: gsar on 2000/10/16 04:37:05
- Log: integrate changes#6018..6021 from mainline
-
- make lib/syslog.t portable to systems that don't have _PATH_LOG,
- make _PATH_LOG() return "" if unavailable
-
- windows portability tweaks
-
- test tweak
-
- remove Win2K issue in pod (fixed by change#6020)
- Branch: maint-5.6/perl
- !> README.win32 ext/File/Glob/Glob.pm ext/Sys/Syslog/Syslog.pm
- !> ext/Sys/Syslog/Syslog.xs pod/perldelta.pod t/lib/b.t
- !> t/lib/open3.t t/lib/syslog.t win32/win32.h
-____________________________________________________________________________
-[ 7293] By: gsar on 2000/10/16 04:20:00
- Log: integrate changes#6013..6015 from mainline
-
- tweak change#5945 to display correct switch name in diagnostic
-
- glob() loading File::Glob behind the scenes may cause syntax errors
-
- tweak test for portability
- Branch: maint-5.6/perl
- !> op.c perl.c pod/perldiag.pod t/lib/b.t
-____________________________________________________________________________
-[ 7292] By: gsar on 2000/10/16 04:18:11
- Log: integrate changes#6005..6010 from mainline, cfgperl
-
- perldoc might fail via "use blib" (from Hugo van der Sanden)
-
- Regen Configure.
-
- note about compile failures and END blocks (from M.J.T. Guy)
-
- VMS config tweak (from Craig A. Berry <craig.berry@metamorgs.com>)
-
- (change#6009 integrated earlier in change#7255)
-
- clarify note about shadow password support (from
- gellyfish@gellyfish.com)
- Branch: maint-5.6/perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH installperl pod/perldelta.pod pod/perlfunc.pod
- !> pod/perlmod.pod utils/perldoc.PL vms/subconfigure.com
-____________________________________________________________________________
-[ 7291] By: gsar on 2000/10/16 04:12:03
- Log: integrate changes#6002,6003 from mainline
-
- destructive sv_setsv() can lose UV-ness from source, causing
- numeric promotions/comparisons to fail to do the right thing
-
- allow REG_EXPAND_SZ keys in Windows registry (from
- John Clayton <John.Clayton@barclayscapital.com>)
- Branch: maint-5.6/perl
- !> sv.c win32/win32.c
-____________________________________________________________________________
-[ 7290] By: gsar on 2000/10/16 04:10:19
- Log: integrate change#6001 from mainline
-
- support additional library locations via $Config{otherlibdirs}
- (from Andy Dougherty)
- Branch: maint-5.6/perl
- !> Configure INSTALL Porting/Glossary Porting/config.sh
- !> Porting/config_H config_h.SH epoc/config.sh perl.c
- !> vms/subconfigure.com vos/config.def vos/config_h.SH_orig
- !> win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 7289] By: gsar on 2000/10/16 04:08:28
- Log: integrate change#5999 from mainline
-
- fix line renumbering bug in C<eval qq[#line 10 "X"\nwarn]>
- Branch: maint-5.6/perl
- !> t/pragma/warn/toke toke.c
-____________________________________________________________________________
-[ 7288] By: gsar on 2000/10/16 04:07:01
- Log: integrate changes#5997,5998 from cfgperl
-
- Preserve $!.
-
- Try to get "Inf" by using &POSIX::HUGE_VAL in sprintf.
- Branch: maint-5.6/perl
- !> lib/Math/Complex.pm
-____________________________________________________________________________
-[ 7287] By: gsar on 2000/10/16 04:04:37
- Log: integrate change#5995 from mainline
-
- fixes for bugs in C<use warnings qw(FATAL all)> (from Paul Marquess)
- Branch: maint-5.6/perl
- !> mg.c t/pragma/warn/7fatal warnings.h warnings.pl
-____________________________________________________________________________
-[ 7286] By: gsar on 2000/10/16 04:03:21
- Log: integrate change#5994 from mainline
-
- fix for missed accounting for null byte in pack("Z",...) (from
- M.J.T. Guy)
- Branch: maint-5.6/perl
- !> pp.c t/op/pack.t
-____________________________________________________________________________
-[ 7285] By: gsar on 2000/10/16 04:02:11
- Log: integrate changes#5989..5993 from mainline
-
- qw(a\\b) must be parsed like 'a\\b', i.e., backslash escapes
- itself and no other (from Tom Hughes)
-
- use $ENV{LIB} to search for libs under Visual C compiler
- on Windows (from Jochen Wiedmann <joe@ispsoft.de>)
-
- posix-bc patches (from Dorner Thomas <Thomas.Dorner@start.de>)
-
- pod nit (from Simon Cozens)
-
- various minor tweaks seen on p5p
- Branch: maint-5.6/perl
- !> README.posix-bc hints/posix-bc.sh lib/ExtUtils/Liblist.pm
- !> lib/perl5db.pl pod/perlipc.pod pod/perlop.pod pod/perlvar.pod
- !> t/op/array.t toke.c
-____________________________________________________________________________
-[ 7284] By: gsar on 2000/10/16 03:59:00
- Log: integrate changes#5978..5988 from mainline
-
- sync version numbers in File::Spec with the ones on CPAN
- (from Barrie Slaymaker)
-
- under useithreads, constant pad entries could inadvertantly be
- shared across threads (from Eric Blood <eblood@xmission.com>);
- added Eric's test case to testsuite
-
- allow Configure -S to run non-interactively (spotted by Greg Hudson
- <ghudson@mit.edu>)
-
- rename File::Glob::glob() to File::Glob::bsd_glob() to avoid
- prototype mismatch with CORE::glob(); update pod and tests to
- suit (File::Glob::glob() is still available for backward
- compatibility, but should be considered deprecated)
-
- avoid error in IO::Socket::INET when given an unknown service name
- with a port number (from Brian Raven <brianr@ssprdmh01.liffe.com>)
-
- numeric conversion of non-number in change#3378 tramples on
- OOK offset, causing segfaults
-
- attributes::reftype() doesn't work on tied argument
-
- forked child may not exit correctly if it failed to open
- /dev/console (from Graham Barr)
-
- add regular expressions tutorial and quick-start guide (from
- Mark Kvale <kvale@phy.ucsf.edu>)
-
- B::Bytecode tweaks (from Simon Cozens <simon@brecon.co.uk>)
-
- s/HTMLSCRIPTPOD/HTMLSCRIPTPODS/ (from Paul Sharpe
- <paul@miraclefish.com>)
- Branch: maint-5.6/perl
- +> pod/perlrequick.pod pod/perlretut.pod
- !> AUTHORS Configure MAINTAIN MANIFEST ext/B/B/Bytecode.pm
- !> ext/B/B/Disassembler.pm ext/File/Glob/Glob.pm
- !> ext/IO/lib/IO/Socket/INET.pm ext/Sys/Syslog/Syslog.pm
- !> lib/ExtUtils/MakeMaker.pm lib/File/Spec/Functions.pm
- !> lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm
- !> lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
- !> lib/File/Spec/Win32.pm op.c sv.c t/lib/glob-basic.t
- !> t/lib/glob-case.t t/lib/glob-taint.t t/op/misc.t xsutils.c
-____________________________________________________________________________
-[ 7283] By: gsar on 2000/10/16 03:52:14
- Log: integrate change#5977 from mainline
-
- autoquote barewords followed by newline and arrow properly
- (variant of fix suggested by Rick Delaney and M.J.T. Guy)
- Branch: maint-5.6/perl
- !> t/pragma/warn/toke toke.c
-____________________________________________________________________________
-[ 7282] By: gsar on 2000/10/16 03:50:48
- Log: integrate change#5976 from mainline
-
- DB_File v1.73 update (from Paul Marquess)
- Branch: maint-5.6/perl
- !> ext/DB_File/Changes ext/DB_File/DB_File.pm
- !> ext/DB_File/DB_File.xs ext/DB_File/version.c
-____________________________________________________________________________
-[ 7281] By: gsar on 2000/10/16 03:49:14
- Log: integrate change#5975 from mainline
-
- allow sort() reentrancy (variant of patch suggested by
- Hugo van der Sanden)
- Branch: maint-5.6/perl
- !> pp_ctl.c t/op/sort.t
-____________________________________________________________________________
-[ 7280] By: gsar on 2000/10/16 03:48:22
- Log: integrate change#5974 from mainline
-
- change#4197 somehow missed initializing PL_errors, meaning
- syntax error queueing wasn't working outside eval"" at all;
- also fixed eval"" to localize PL_error_count, so that compile-time
- eval's don't clobber the error state of the outer context
- Branch: maint-5.6/perl
- !> lib/Math/Complex.pm perl.c pp_ctl.c t/pragma/warn/op
- !> t/pragma/warn/toke
-____________________________________________________________________________
-[ 7279] By: gsar on 2000/10/16 03:46:21
- Log: integrate change#5973 from mainline
-
- fix for failure to match $foo =~ /(?i)/ (from Ilya Zakharevich)
- Branch: maint-5.6/perl
- !> regcomp.c regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 7278] By: gsar on 2000/10/16 03:44:54
- Log: integrate change#5971 from cfgperl
-
- Unicos tweaks from Mark P. Lutz.
- Branch: maint-5.6/perl
- !> hints/unicos.sh lib/Math/Complex.pm
-____________________________________________________________________________
-[ 7277] By: gsar on 2000/10/16 03:42:59
- Log: integrate changes#5966..5970 from mainline
-
- add testsuite for B backends, fix bug in B::Deparse (from
- Simon Cozens <simon@brecon.co.uk>)
-
- improved docs on the warn_uninit diagnostic (from David Glasser
- and Simon Cozens)
-
- tolerate spaces in group names in test on solaris (from David Boyce
- <dsb@boyski.com>)
-
- fix Sys::Syslog breakage on domain sockets (from Tom Hughes)
-
- Data::Dumper fumbles negative numbers on 32-bit platforms where
- IV is >32bits
- Branch: maint-5.6/perl
- +> t/lib/b.t t/lib/syslog.t
- !> MANIFEST ext/B/B/Deparse.pm ext/B/B/Stash.pm
- !> ext/Data/Dumper/Dumper.xs ext/Sys/Syslog/Syslog.pm
- !> pod/perldiag.pod t/lib/dumper.t t/op/groups.t
-____________________________________________________________________________
-[ 7276] By: gsar on 2000/10/16 03:39:30
- Log: integrate change#5965 from mainline
-
- avoid "will not stay shared" warnings for our variables (from
- Robin Barker)
- Branch: maint-5.6/perl
- !> op.c t/pragma/warn/op
-____________________________________________________________________________
-[ 7275] By: gsar on 2000/10/16 03:38:18
- Log: integrate change#5964 from mainline
-
- reformat to 72 columns (again)
- Branch: maint-5.6/perl
- !> pod/perldiag.pod
-____________________________________________________________________________
-[ 7274] By: gsar on 2000/10/16 03:36:58
- Log: integrate change#5963 from mainline
-
- patch from Larry to make (\&) prototype work; added tests for
- the same
- Branch: maint-5.6/perl
- !> op.c t/comp/proto.t
-____________________________________________________________________________
-[ 7273] By: gsar on 2000/10/16 03:35:51
- Log: integrate changes#5956..5962 from mainline
-
- better diagnostics on failed tests (from Ilya Zakharevich)
-
- pod nits (from A. C. Yardley <yardley@tanet.net>)
-
- change#3569 deleted some essential code, revert; avoid use of
- atexit() to make DynaLoader work properly on AIX under mod_perl
- (from Jens-Uwe Mager <jum@helios.de>)
-
- doubled words in pods (from Simon Cozens
- <simon.p.cozens@jp.pwcglobal.com>)
-
- better INSTALL notes on Solaris issues (from Dominic Dunlop)
-
- recognize our, CHECK and INIT in cperl-mode (from Doug MacEachern)
-
- updated README.hpux (from Jeff Okamoto)
- Branch: maint-5.6/perl
- !> INSTALL README.hpux emacs/cperl-mode.el
- !> ext/DynaLoader/dl_aix.xs pod/perldebguts.pod pod/perldelta.pod
- !> pod/perlfaq5.pod pod/perlfork.pod pod/perlfunc.pod
- !> pod/perlipc.pod pod/perllexwarn.pod pod/perllocale.pod
- !> pod/perlmod.pod pod/perlmodlib.pod pod/perlnumber.pod
- !> pod/perlopentut.pod pod/perltodo.pod pod/perltootc.pod
- !> t/op/lex_assign.t
-____________________________________________________________________________
-[ 7272] By: gsar on 2000/10/16 03:31:22
- Log: integrate change#5955 from mainline
-
- longstanding bug exposed by change#3307: sort arguments weren't
- compiled with the right wantarray context (ensuing runtime lookup
- via block_gimme() was getting the incidental context of the
- sort() itself)
- Branch: maint-5.6/perl
- !> op.c t/op/sort.t
-____________________________________________________________________________
-[ 7271] By: gsar on 2000/10/16 03:29:11
- Log: integrate changes#5933,5935,5940..5944,5946,5951,5952 from cfgperl
- branch
-
- Flatten the cpp jungle doing the nosuid checking.
-
- Do not assume sign propagation. (from M.J.T. Guy)
-
- Various Unicos 10.0.0.6 fixes. (from Mark Lutz)
-
- Add HAS_FREXPL, HAS_ISNAN, HAS_ISNANL, and HAS_MODFL.
- Now pp_ncmp() returns undef is either operand is a NaN.
-
- On second thoughts frexp() does have two arguments.
-
- Document that tr() is not tr(1).
-
- Be more robust on "extreme" (large absolute value)
- arguments. Originally reported by Daniel Connelly
- as a problem with asinh() on large negative arguments,
- asinh() used to bail out because an argument to log()
- ended up being zero. Ilya Zakharevich proposed using
- Taylor's series in such cases, which for such large
- arguments is a very good approximation.
-
- Undo "use integer" addition from 64bitint as it seems
- to break most of the subtests in Digital UNIX;
- Unicos needs to find another way.
- Branch: maint-5.6/perl
- !> (integrate 29 files)
-____________________________________________________________________________
-[ 7270] By: gsar on 2000/10/16 03:09:44
- Log: integrate changes#5948,5949,5950 from mainline
-
- typo in vars.pm that leads to cryptic message (from Piotr
- Piatkowski <kompas@kompas.usr.onet.pl>)
-
- make perldoc use the pod2man from the same version (from
- M.J.T. Guy)
-
- reformat perldiag to avoid long lines
- Branch: maint-5.6/perl
- !> lib/vars.pm pod/perldiag.pod utils/perldoc.PL
-____________________________________________________________________________
-[ 7269] By: gsar on 2000/10/16 03:05:54
- Log: integrate change#5947 from mainline
-
- use &dl_error rather than &dl_load_file as the guard for calling
- boot_DynaLoader() (meant to fix dl_error() redefined warnings in
- statically built perl)
- Branch: maint-5.6/perl
- !> ext/DynaLoader/DynaLoader_pm.PL ext/DynaLoader/XSLoader_pm.PL
-____________________________________________________________________________
-[ 7268] By: gsar on 2000/10/16 03:04:48
- Log: integrate change#5945 from mainline
-
- make module name mandatory after -M switch; reorder perldiag
- alphabetically (from Mark-Jason Dominus)
- Branch: maint-5.6/perl
- !> perl.c pod/perldiag.pod
-____________________________________________________________________________
-[ 7267] By: gsar on 2000/10/16 03:03:01
- Log: integrate change#5939 from mainline
-
- more pod nits (from Larry Virden)
- Branch: maint-5.6/perl
- !> README.win32 pod/perlsub.pod pod/perlsyn.pod
- !> pod/perlthrtut.pod pod/perltoc.pod pod/perltodo.pod
- !> pod/perlxs.pod pod/perlxstut.pod vms/perlvms.pod
-____________________________________________________________________________
-[ 7266] By: gsar on 2000/10/16 03:01:39
- Log: integrate change#5938 from mainline
-
- Consolidated B::Deparse fixes (from Stephen McCamant)
- Branch: maint-5.6/perl
- !> ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 7265] By: gsar on 2000/10/16 03:00:43
- Log: integrate change#5936 from mainline
-
- additional tests for change#7263 (from Paul Marquess)
- Branch: maint-5.6/perl
- !> t/pragma/warn/2use t/pragma/warn/3both t/pragma/warn/4lint
- !> t/pragma/warn/5nolint t/pragma/warn/6default
-____________________________________________________________________________
-[ 7264] By: gsar on 2000/10/16 02:58:34
- Log: integrate change#5934 from mainline
-
- propagate lexical warnings from surrounding scope correctly
- within string eval() (from Paul Marquess)
- Branch: maint-5.6/perl
- !> pp_ctl.c t/pragma/warn/pp_ctl
-____________________________________________________________________________
-[ 7263] By: gsar on 2000/10/16 02:56:53
- Log: integrate change#5932 from mainline
-
- add rsignal(), whichsig() and do_join() to public API list
- (mod_perl uses them to good advantage)
- Branch: maint-5.6/perl
- !> embed.pl global.sym objXSUB.h perlapi.c proto.h
-____________________________________________________________________________
-[ 7262] By: gsar on 2000/10/16 02:55:53
- Log: integrate change#5931 from mainline
-
- fix RE brokenness on refs/overloaded things (from Ilya Zakharevich)
- Branch: maint-5.6/perl
- !> pp_hot.c regexec.c t/op/pat.t
-____________________________________________________________________________
-[ 7261] By: gsar on 2000/10/16 02:55:01
- Log: integrate change#5930 from mainline
-
- small os390 tweaks (from Peter Prymmer)
- Branch: maint-5.6/perl
- !> config_h.SH makedepend.SH
-____________________________________________________________________________
-[ 7260] By: gsar on 2000/10/16 02:54:10
- Log: integrate change#5929 from mainline
-
- pod nits
- Branch: maint-5.6/perl
- !> pod/perlguts.pod
-____________________________________________________________________________
-[ 7259] By: gsar on 2000/10/16 02:52:55
- Log: integrate change#5927 from mainline
-
- arrange for next() to resume at the unstack op rather than the
- loop conditional, so that scope cleanup happens correctly
- (from Stephen McCamant)
- Branch: maint-5.6/perl
- !> op.c pp_ctl.c t/op/misc.t
-____________________________________________________________________________
-[ 7258] By: gsar on 2000/10/16 02:51:38
- Log: integrate change#5926 from mainline
-
- on windows, reserve 16M of stack rather than 128M (allows more
- threads to run concurrently)
- Branch: maint-5.6/perl
- !> win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 7257] By: gsar on 2000/10/16 02:50:37
- Log: integrate change#5925 from mainline
-
- POSIX-BC tweak (from Ignasi Roca <ignasi.roca@fujitsu.siemens.es>)
- Branch: maint-5.6/perl
- !> toke.c
-____________________________________________________________________________
-[ 7256] By: gsar on 2000/10/16 02:49:36
- Log: integrate change#5924 from mainline
-
- avoid using uninitialized memory in require version check
- Branch: maint-5.6/perl
- !> pp_ctl.c universal.c
-____________________________________________________________________________
-[ 7255] By: gsar on 2000/10/16 02:48:03
- Log: integrate changes#5923,5928,6009 from mainline
-
- IO::Poll bugs fixed (from Lincoln Stein <lstein@cshl.org>)
- Branch: maint-5.6/perl
- !> ext/IO/lib/IO/Poll.pm t/lib/io_poll.t
-____________________________________________________________________________
-[ 7254] By: gsar on 2000/10/16 02:44:46
- Log: integrate change#5922 from mainline
-
- commentary about IoTYPE() (from Nathan Torkington)
- Branch: maint-5.6/perl
- !> sv.h
-____________________________________________________________________________
-[ 7253] By: gsar on 2000/10/16 02:43:49
- Log: integrate change#5921 from mainline
-
- make eq unicode-aware (from Gisle Aas); fix bogus tests revealed
- Branch: maint-5.6/perl
- !> sv.c t/lib/charnames.t t/pragma/utf8.t
-____________________________________________________________________________
-[ 7252] By: gsar on 2000/10/16 02:42:31
- Log: integrate change#5920 from mainline
-
- Larry's fix for buggy propagation of utf8-ness in join(); add test
- Branch: maint-5.6/perl
- !> doop.c t/op/ver.t
-____________________________________________________________________________
-[ 7251] By: gsar on 2000/10/16 02:41:14
- Log: integrate changes#5915..5919 from mainline
-
- various (pod tweaks &c)
- Branch: maint-5.6/perl
- !> (integrate 33 files)
-____________________________________________________________________________
-[ 7250] By: gsar on 2000/10/16 02:38:16
- Log: integrate change#5914 from mainline
-
- caller() wasn't returning the right number of elements for
- eval {...}
- Branch: maint-5.6/perl
- !> pp_ctl.c t/pragma/warn/9enabled
-____________________________________________________________________________
-[ 7249] By: gsar on 2000/10/16 02:37:02
- Log: integrate change#5913 from mainline
-
- pod nit: $yday range for localtime/gmtime is 0..364 not 1..365
- (from Mark-Jason Dominus)
- Branch: maint-5.6/perl
- !> pod/perlfunc.pod
-____________________________________________________________________________
-[ 7248] By: gsar on 2000/10/16 02:35:58
- Log: integrate change#5912 from mainline
-
- fix totally broken caching in UNIVERSAL::isa() (from
- Nick Ing-Simmons)
- Branch: maint-5.6/perl
- !> t/op/universal.t universal.c
-____________________________________________________________________________
-[ 7247] By: gsar on 2000/10/16 02:34:27
- Log: integrate changes#5910,5911 from mainline
-
- typo in pod
-
- add linebreak properties from unicode/LineBrk.txt (from
- Dave Hartnoll <Dave_Hartnoll@3b2.com>)
- Branch: maint-5.6/perl
- +> (branch 29 files)
- !> ext/Thread/Thread.pm lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 7246] By: gsar on 2000/10/16 02:33:29
- Log: integrate change#5909 from mainline
-
- mode argument to do_binmode() should be file mode, not boolean
- Branch: maint-5.6/perl
- !> pp_sys.c
-____________________________________________________________________________
-[ 7245] By: gsar on 2000/10/16 02:31:04
- Log: integrate change#5908 from mainline
-
- introduce illegal symbols into null package so that
- gv_fetchpv(...,TRUE) always returns a valid GV even when the
- symbol is trapped by strictures (avoids coredumps)
- Branch: maint-5.6/perl
- !> embedvar.h gv.c intrpvar.h perl.c perlapi.h
- !> t/pragma/strict-vars
-____________________________________________________________________________
-[ 7242] By: gsar on 2000/10/16 02:26:51
- Log: integrate changes#5905,5906,5907,6064 from mainline
-
- printf/sprintf didn't get quad types right under use64bitint
- Branch: maint-5.6/perl
- !> pp_sys.c sv.c t/op/64bitint.t
-____________________________________________________________________________
-[ 5902] By: gsar on 2000/03/28 01:59:14
- Log: create maint-5.6 branch
- Branch: maint-5.6/perl
- +> (branch 1611 files)
-____________________________________________________________________________
-[ 5900] By: gsar on 2000/03/23 05:42:43
- Log: three guesses on what this is :-)
- Branch: perl
- ! Changes
-
---------------
-Version v5.6.0
---------------
-
-____________________________________________________________________________
-[ 5899] By: gsar on 2000/03/23 05:39:11
- Log: update patchlevel.h, Changes; regen perltoc.pod
- Branch: perl
- ! Changes patchlevel.h pod/perlhist.pod pod/perltoc.pod
-____________________________________________________________________________
-[ 5898] By: jhi on 2000/03/23 05:36:47
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> README.machten Todo Todo-5.6 pod/perldebug.pod
- !> pod/perldelta.pod pod/perldiag.pod pod/perlport.pod sv.c
-____________________________________________________________________________
-[ 5897] By: gsar on 2000/03/23 05:31:12
- Log: revise perldelta for more optimal ordering, minor Todo
- rearrangments
- Branch: perl
- ! README.machten Todo Todo-5.6 pod/perldelta.pod
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 5896] By: gsar on 2000/03/23 05:30:15
- Log: pod updates (from Tom Christiansen)
- Branch: perl
- ! pod/perldebug.pod pod/perlport.pod
-____________________________________________________________________________
-[ 5895] By: gsar on 2000/03/23 02:33:33
- Log: fix misplaced OP refcount for eval root
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5894] By: jhi on 2000/03/22 21:37:03
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> README.machten
- !> MAINTAIN MANIFEST README.win32 ext/DynaLoader/dlutils.c
- !> ext/IO/lib/IO/File.pm hints/machten.sh pod/perl.pod
- !> pod/perldelta.pod pod/perlsyn.pod t/io/fs.t win32/Makefile
- !> win32/makefile.mk
-____________________________________________________________________________
-[ 5893] By: gsar on 2000/03/22 21:08:34
- Log: unretract change#5871 (Dominic Dunlop reports machten is better
- with it than without)
- Branch: perl
- ! hints/machten.sh
-____________________________________________________________________________
-[ 5892] By: gsar on 2000/03/22 20:37:44
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure config_h.SH hints/machten.sh hints/solaris_2.sh
- !> hints/unicosmk.sh
-____________________________________________________________________________
-[ 5891] By: gsar on 2000/03/22 20:04:01
- Log: perlsyn.pod nit (from Tom Christiansen)
- Branch: perl
- ! pod/perlsyn.pod
-____________________________________________________________________________
-[ 5890] By: gsar on 2000/03/22 19:43:22
- Log: typo in comment
- Branch: perl
- ! ext/DynaLoader/dlutils.c
-____________________________________________________________________________
-[ 5889] By: gsar on 2000/03/22 19:41:46
- Log: add README.machten (from Dominic Dunlop)
- Branch: perl
- + README.machten
- ! MAINTAIN MANIFEST pod/perl.pod win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 5888] By: gsar on 2000/03/22 19:29:47
- Log: makefile nits
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 5887] By: gsar on 2000/03/22 19:26:03
- Log: add note about lib/open3.t#22 failure on Win2K
- Branch: perl
- ! README.win32 pod/perldelta.pod
-____________________________________________________________________________
-[ 5886] By: gsar on 2000/03/22 19:14:20
- Log: io/fs.t tweaks for Windows 2000
- Branch: perl
- ! t/io/fs.t
-____________________________________________________________________________
-[ 5885] By: gsar on 2000/03/22 18:41:50
- Log: make unloading of extension shared objects (change#5381) a build
- option (use "Configure -Accflags=-DDL_UNLOAD_ALL_AT_EXIT" to enable)
- Branch: perl
- ! ext/DynaLoader/dlutils.c pod/perldelta.pod
-____________________________________________________________________________
-[ 5884] By: gsar on 2000/03/22 18:16:45
- Log: avoid loading both XSLoader and DynaLoader (avoids dl_error()
- redefinition warnings when statically linked)
- Branch: perl
- ! ext/IO/lib/IO/File.pm
-____________________________________________________________________________
-[ 5883] By: jhi on 2000/03/22 17:45:01
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/lib/thr5005.t t/op/64bitint.t t/op/nothr5005.t
- - t/lib/thread.t t/op/64bit.t t/op/nothread.t
- !> Configure MAINTAIN MANIFEST Todo-5.6 ext/POSIX/Makefile.PL
- !> lib/ExtUtils/Liblist.pm lib/ExtUtils/xsubpp
- !> lib/File/Compare.pm pod/perldelta.pod universal.c util.c
- !> utils/h2xs.PL utils/perlbug.PL win32/Makefile
- !> win32/makefile.mk
-____________________________________________________________________________
-[ 5882] By: jhi on 2000/03/22 17:16:27
- Log: Metaconfigify #5881.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/installdirs/inc_version_list.U
-____________________________________________________________________________
-[ 5881] By: gsar on 2000/03/22 17:04:01
- Log: avoid including things that aren't directories in inc_version_list
- (from Robin Barker)
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 5880] By: gsar on 2000/03/22 16:55:42
- Log: avoid File::Compare warning when passed handles (from Nick
- Ing-Simmons)
- Branch: perl
- ! lib/File/Compare.pm
-____________________________________________________________________________
-[ 5879] By: jhi on 2000/03/22 16:48:33
- Log: Retract #5871.
- Branch: cfgperl
- ! hints/machten.sh
-____________________________________________________________________________
-[ 5878] By: gsar on 2000/03/22 16:29:37
- Log: RM600-svr4 tweaks (from Frank Ridderbusch
- <frank.ridderbusch@pdb.siemens.de>)
- Branch: perl
- ! ext/POSIX/Makefile.PL lib/ExtUtils/Liblist.pm
-____________________________________________________________________________
-[ 5877] By: gsar on 2000/03/22 15:38:49
- Log: save RE context when calling __WARN__ and __DIE__ hooks;
- add missing stack-of-stacks logic for new code that came
- in with lexical warnings (this fixes coredumps from
- -Mdiagnostics when the warnings happens to come from within
- the RE engine)
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 5876] By: gsar on 2000/03/22 15:02:59
- Log: missing pieces in perldelta
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5875] By: gsar on 2000/03/22 14:46:24
- Log: rename tests to more appropriate names
- Branch: perl
- +> t/lib/thr5005.t t/op/64bitint.t t/op/nothr5005.t
- - t/lib/thread.t t/op/64bit.t t/op/nothread.t
- ! MAINTAIN MANIFEST pod/perldelta.pod
-____________________________________________________________________________
-[ 5874] By: jhi on 2000/03/22 14:32:57
- Log: Make the no-luck-on-uselongdouble warning more visible.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5873] By: gsar on 2000/03/22 14:28:56
- Log: backout change#5708; fixups for behavior of recently added -a switch;
- support -k and -m switches in h2xs (from Hugo van der Sanden)
- Branch: perl
- ! lib/ExtUtils/xsubpp utils/h2xs.PL
-____________________________________________________________________________
-[ 5872] By: gsar on 2000/03/22 14:21:20
- Log: remove outdated notes in makefiles
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 5871] By: jhi on 2000/03/22 14:17:40
- Log: Disable SysV shm and msg even more.
- Branch: cfgperl
- ! hints/machten.sh
-____________________________________________________________________________
-[ 5870] By: jhi on 2000/03/22 14:16:54
- Log: Augment #5865.
- Branch: cfgperl
- ! hints/unicosmk.sh
-____________________________________________________________________________
-[ 5869] By: gsar on 2000/03/22 14:07:27
- Log: perlbug -ok shouldn't prompt (from Paul Moore
- <Paul.Moore@uk.origin-it.com>)
- Branch: perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 5868] By: gsar on 2000/03/22 13:54:27
- Log: integrate cfgperl contents into mainline
- Branch: perl
- ! Todo-5.6
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH hints/dec_osf.sh hints/openbsd.sh
- !> hints/solaris_2.sh hints/unicosmk.sh pod/perldelta.pod
- !> pod/perlport.pod win32/config_H.bc win32/config_H.gc
- !> win32/config_H.vc
-____________________________________________________________________________
-[ 5867] By: jhi on 2000/03/22 05:25:40
- Log: OpenBSD pthreadness fixes from Tom Christiansen.
- Branch: cfgperl
- ! hints/openbsd.sh
-____________________________________________________________________________
-[ 5866] By: gsar on 2000/03/22 04:18:39
- Log: UMRs in universal.c (SvCUR() may not be there unless SvPOK())
- Branch: perl
- ! universal.c
-____________________________________________________________________________
-[ 5865] By: jhi on 2000/03/21 21:38:20
- Log: The SysV shm*() are in libc but unimplemented.
- Branch: cfgperl
- ! hints/unicosmk.sh
-____________________________________________________________________________
-[ 5864] By: jhi on 2000/03/21 21:30:02
- Log: s/setgropus/setgroups/; # detypo in a comment
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc
- Branch: metaconfig
- ! U/modified/Getfile.U U/modified/d_flexfnam.U
- ! U/modified/groupstype.U
-____________________________________________________________________________
-[ 5863] By: jhi on 2000/03/21 20:25:40
- Log: Add supported platforms.
- Branch: cfgperl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 5862] By: jhi on 2000/03/21 19:19:04
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> makedef.pl
-____________________________________________________________________________
-[ 5861] By: gsar on 2000/03/21 19:07:13
- Log: add missing bincompat symbols to export list
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 5860] By: jhi on 2000/03/21 18:59:39
- Log: Disallow using too old gcc in {Tru64,Digital UNIX,DEC OSF/1}.
- (Even gcc 2.95 doesn't seem to be working 100%.)
- Branch: cfgperl
- ! hints/dec_osf.sh pod/perldelta.pod
-____________________________________________________________________________
-[ 5859] By: jhi on 2000/03/21 16:36:27
- Log: Nit for #5802 from Robin Barker.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Getfile.U
-____________________________________________________________________________
-[ 5858] By: jhi on 2000/03/21 14:34:25
- Log: Be more lenient in the case libsunmath cannot be found.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5857] By: jhi on 2000/03/21 14:14:38
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 27 files)
-____________________________________________________________________________
-[ 5856] By: gsar on 2000/03/21 10:44:10
- Log: here lies RC3
- Branch: perl
- ! Changes patchlevel.h pod/perlhist.pod
-____________________________________________________________________________
-[ 5855] By: gsar on 2000/03/21 10:05:42
- Log: clone awareness for change#5847
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5854] By: gsar on 2000/03/21 09:30:50
- Log: regen win32/config*
- Branch: perl
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 5853] By: gsar on 2000/03/21 08:56:58
- Log: integrate cfgperl and vmsperl contents into mainline
- Branch: perl
- !> Configure Todo Todo-5.6 config_h.SH lib/File/Spec/VMS.pm
- !> pod/perldelta.pod t/op/taint.t
-____________________________________________________________________________
-[ 5852] By: gsar on 2000/03/21 06:08:20
- Log: README.mint tweaks (from Guido Flohr <gufl0000@stud.uni-sb.de>)
- Branch: perl
- ! Changes README.mint
-____________________________________________________________________________
-[ 5851] By: gsar on 2000/03/21 06:06:44
- Log: make parenthetic warnings look consistent; make diagnostic on
- "use 5.6" et al mention the alternate form; pod fixups
- Branch: perl
- ! gv.c op.c pod/perldelta.pod pod/perldiag.pod pp_ctl.c
- ! t/comp/use.t t/pragma/strict-vars t/pragma/warn/op
- ! t/pragma/warn/pp_hot t/pragma/warn/pp_sys toke.c universal.c
- ! util.c
-____________________________________________________________________________
-[ 5850] By: gsar on 2000/03/21 04:05:00
- Log: disable unused Windows code that won't run on Windows 95
- Branch: perl
- ! win32/vmem.h
-____________________________________________________________________________
-[ 5849] By: gsar on 2000/03/21 03:34:39
- Log: $File::Find::name doesn't reflect top level files
- correctly (from Simon Cozens <simon@brecon.co.uk>)
- Branch: perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 5848] By: gsar on 2000/03/21 02:46:01
- Log: test fails when sockets not available (from Yitzchak Scott-Thoennes)
- Branch: perl
- ! t/lib/io_unix.t
-____________________________________________________________________________
-[ 5847] By: gsar on 2000/03/21 00:09:09
- Log: under useithreads, PUSHLOOP must save PL_curpad for looking up
- iterdata, since dounwind() may defer LEAVEs
- Branch: perl
- ! cop.h
-____________________________________________________________________________
-[ 5846] By: jhi on 2000/03/20 23:54:37
- Log: Document the lib/io_multihomedt hang in 64-bit HP-Ux.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5845] By: jhi on 2000/03/20 23:45:24
- Log: detypo
- Branch: cfgperl
- ! t/op/taint.t
-____________________________________________________________________________
-[ 5844] By: jhi on 2000/03/20 23:17:18
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> lib/Dumpvalue.pm lib/User/pwent.pm lib/dumpvar.pl
- !> lib/strict.pm op.c pod/perldata.pod pod/perldelta.pod
- !> pod/perlfunc.pod pp.c t/io/pipe.t t/lib/charnames.t toke.c
- !> utils/perlbug.PL
-____________________________________________________________________________
-[ 5843] By: gsar on 2000/03/20 22:14:35
- Log: add note about symbolic filehandles (from Johan Vromans)
- Branch: perl
- ! lib/strict.pm pod/perlfunc.pod
-____________________________________________________________________________
-[ 5842] By: gsar on 2000/03/20 21:59:51
- Log: perlbugtron flags in perlbug (from Richard Foley); eliminate duplicate
- code
- Branch: perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 5841] By: gsar on 2000/03/20 21:06:01
- Log: more sleep needed from slow systems (from Peter Haworth)
- Branch: perl
- ! t/io/pipe.t
-____________________________________________________________________________
-[ 5840] By: gsar on 2000/03/20 21:04:42
- Log: typo in change#5839
- Branch: perl
- ! lib/Dumpvalue.pm
-____________________________________________________________________________
-[ 5839] By: gsar on 2000/03/20 21:03:14
- Log: make dumpvar.pl recognize emptyness in arrays (from Matthias Urlichs
- <smurf@noris.de>); fix up duplicate code in Dumpvalue.pm
- Branch: perl
- ! lib/Dumpvalue.pm lib/dumpvar.pl
-____________________________________________________________________________
-[ 5838] By: gsar on 2000/03/20 20:53:25
- Log: mention handle autovivification in perldata (from Johan Vromans)
- Branch: perl
- ! lib/User/pwent.pm pod/perldata.pod
-____________________________________________________________________________
-[ 5837] By: gsar on 2000/03/20 20:37:42
- Log: change#5797 didn't do the right thing for "\xff\N{WHITE SMILING FACE}"
- Branch: perl
- ! t/lib/charnames.t toke.c
-____________________________________________________________________________
-[ 5836] By: gsar on 2000/03/20 16:27:13
- Log: autovivify open($fh[0],...) properly
- Branch: perl
- ! op.c pp.c
-____________________________________________________________________________
-[ 5835] By: gsar on 2000/03/19 18:51:24
- Log: add @x->[2] bug to known issues (from Johan Vromans)
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5834] By: jhi on 2000/03/19 18:42:35
- Log: Fix the socklen default type (from Laszlo Molnar;
- though I prefer signed, not unsigned); move the cross-compialtion
- wish item to Todo; drop excess permissions in taint.t.
- Branch: cfgperl
- ! Configure Todo Todo-5.6 config_h.SH t/op/taint.t
- Branch: metaconfig
- ! U/protos/socksizetype.U
-____________________________________________________________________________
-[ 5833] By: jhi on 2000/03/19 18:20:42
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 42 files)
-____________________________________________________________________________
-[ 5832] By: gsar on 2000/03/19 18:01:28
- Log: pwent.pm doc tweak (from Tom Christiansen)
- Branch: perl
- ! lib/User/pwent.pm
-____________________________________________________________________________
-[ 5831] By: gsar on 2000/03/19 17:57:31
- Log: unsigned is a more reasonable socksizetype default (from
- Laszlo <ml1050@freemail.hu>)
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 5830] By: gsar on 2000/03/19 17:40:20
- Log: taint.t shouldn't fail where IPC::SysV unavailable
- Branch: perl
- ! t/op/taint.t
-____________________________________________________________________________
-[ 5829] By: gsar on 2000/03/19 17:19:46
- Log: update Changes
- Branch: perl
- ! Changes embed.h
-____________________________________________________________________________
-[ 5828] By: gsar on 2000/03/19 16:47:14
- Log: squelch known scalar leak due to compile failure
- Branch: perl
- ! t/pragma/strict-vars
-____________________________________________________________________________
-[ 5827] By: gsar on 2000/03/19 09:20:22
- Log: mention how to look up perllocal.pod (from Michael G Schwern)
- Branch: perl
- ! pod/perlapi.pod pod/perlmodinstall.pod pod/perlmodlib.pod
-____________________________________________________________________________
-[ 5826] By: gsar on 2000/03/19 08:49:27
- Log: mention need to wait for children (from Russ Allbery)
- Branch: perl
- ! lib/IPC/Open2.pm lib/IPC/Open3.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 5825] By: gsar on 2000/03/19 08:47:52
- Log: Pod::Man should strip leading lib/ for module manpages (from
- Russ Allbery)
- Branch: perl
- ! lib/Pod/Man.pm
-____________________________________________________________________________
-[ 5824] By: gsar on 2000/03/19 08:17:49
- Log: User::pwent fixups for additional fields (from Tom Christiansen);
- fix bug in pw_has(); tolerate absense of pw{change,age,quota}
- and pw{comment,class} (Debian 2.1 doesn't have either of these)
- Branch: perl
- ! lib/User/pwent.pm
-____________________________________________________________________________
-[ 5823] By: gsar on 2000/03/19 07:41:46
- Log: pod typo fixes (from Marcel Grunauer <marcel.grunauer@lovely.net>)
- Branch: perl
- ! embed.pl embedvar.h hints/linux.sh pod/perlhack.pod
- ! pod/perlnumber.pod pod/perlthrtut.pod vms/ext/Stdio/Stdio.pm
-____________________________________________________________________________
-[ 5822] By: gsar on 2000/03/19 07:34:29
- Log: integrate cfgperl contents into mainline
- Branch: perl
- ! ext/Thread/Thread.pm pod/perlthrtut.pod
- !> (integrate 41 files)
-____________________________________________________________________________
-[ 5821] By: gsar on 2000/03/19 07:14:38
- Log: remove dead code
- Branch: perl
- ! lib/charnames.pm
-____________________________________________________________________________
-[ 5820] By: gsar on 2000/03/19 07:13:01
- Log: fix typo
- Branch: perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 5819] By: gsar on 2000/03/19 07:09:32
- Log: produce better error message when \N{...} is used without
- "use charnames ..."
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 5818] By: gsar on 2000/03/19 06:30:11
- Log: default warnLevel and dieLevel to 0 in debugger (from Tom
- Christiansen); make dumpvar.pl safe against non-glob entries
- in stashes
- Branch: perl
- ! lib/Dumpvalue.pm lib/dumpvar.pl lib/perl5db.pl
- ! pod/perldebug.pod
-____________________________________________________________________________
-[ 5817] By: gsar on 2000/03/19 06:18:24
- Log: better notes on s///ee (from Simon Cozens <simon@cozens.net>)
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 5816] By: gsar on 2000/03/19 05:55:52
- Log: support for C<use vmsish 'hushed'>; move VMSISH_EXIT out of
- op_private (from Charles Lane <lane@DUPHY4.Physics.Drexel.Edu>)
- Branch: perl
- ! embed.pl op.c op.h opcode.h opcode.pl perl.h pp.sym pp_ctl.c
- ! pp_proto.h vms/ext/vmsish.pm vms/ext/vmsish.t vms/vmsish.h
-____________________________________________________________________________
-[ 5815] By: gsar on 2000/03/19 05:27:31
- Log: fix sort optimizer to not hang inside loops
- Branch: perl
- ! op.c t/op/sort.t
-____________________________________________________________________________
-[ 5814] By: gsar on 2000/03/19 03:59:29
- Log: fixes for alias handling in debugger (from Tom Christiansen)
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 5813] By: gsar on 2000/03/19 03:38:10
- Log: warn about CHECK and INIT blocks encountered at run time
- Branch: perl
- ! op.c pod/perldelta.pod pod/perldiag.pod t/pragma/warn/op
-____________________________________________________________________________
-[ 5812] By: jhi on 2000/03/19 03:15:58
- Log: Taint msgrcv() messages; general SysV IPC cleanup.
- Branch: cfgperl
- ! doio.c ext/IPC/SysV/Msg.pm pod/perldelta.pod pod/perlfunc.pod
- ! pod/perlipc.pod pod/perlsec.pod t/lib/ipc_sysv.t t/op/taint.t
-____________________________________________________________________________
-[ 5811] By: jhi on 2000/03/19 01:48:47
- Log: Taint shmread().
- Branch: cfgperl
- ! doio.c pod/perldelta.pod pod/perlfunc.pod pod/perlsec.pod
- ! t/op/taint.t
-____________________________________________________________________________
-[ 5810] By: jhi on 2000/03/19 01:22:47
- Log: Taint also the passwd field of the getpw*().
- Branch: cfgperl
- ! pod/perldelta.pod pod/perlfunc.pod pod/perlsec.pod pp_sys.c
- ! t/op/taint.t
-____________________________________________________________________________
-[ 5809] By: jhi on 2000/03/18 21:44:34
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> t/pragma/strict-vars toke.c
-____________________________________________________________________________
-[ 5808] By: jhi on 2000/03/18 21:40:55
- Log: (Re-)introduce $uidsign and $gidsign.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH epoc/config.sh pp_sys.c vms/subconfigure.com
- ! vos/config.def vos/config.h vos/config_h.SH_orig
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/config_h.PL win32/config_sh.PL
- Branch: metaconfig
- ! U/modified/groupstype.U U/typedefs/gidtype.U
-____________________________________________________________________________
-[ 5807] By: jhi on 2000/03/18 20:38:12
- Log: The #5805 requires a test change, too.
- Branch: cfgperl
- ! t/op/taint.t
-____________________________________________________________________________
-[ 5806] By: gsar on 2000/03/18 20:10:29
- Log: queued errors may not be displayed after the PL_error_count limit
- Branch: perl
- ! t/pragma/strict-vars toke.c
-____________________________________________________________________________
-[ 5805] By: jhi on 2000/03/18 19:56:12
- Log: Taint the shell from the getpw*.
- Branch: cfgperl
- ! pod/perldelta.pod pod/perlfunc.pod pod/perlsec.pod pp_sys.c
-____________________________________________________________________________
-[ 5804] By: jhi on 2000/03/18 19:37:01
- Log: Use the newSVuv().
- Branch: cfgperl
- ! embed.h op.c pp_sys.c toke.c
-____________________________________________________________________________
-[ 5803] By: jhi on 2000/03/18 19:08:40
- Log: Add newSVuv().
- Branch: cfgperl
- ! Configure embed.pl global.sym objXSUB.h perlapi.c perlapi.h
- ! pod/perlapi.pod proto.h sv.c
-____________________________________________________________________________
-[ 5802] By: jhi on 2000/03/18 17:11:07
- Log: Configure nits: rewording from Sarathy (aka #5796),
- and installation directories patch from Robin Barker.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH vos/config.h vos/config_h.SH_orig
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- Branch: metaconfig
- ! U/modified/Getfile.U
- Branch: metaconfig/U/perl
- ! bincompat5005.U
-____________________________________________________________________________
-[ 5801] By: jhi on 2000/03/18 16:41:31
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes Configure hints/dos_djgpp.sh lib/ExtUtils/xsubpp
- !> lib/Getopt/Long.pm mg.c pod/perlpod.pod pp_hot.c
- !> t/lib/charnames.t t/pragma/utf8.t toke.c
-____________________________________________________________________________
-[ 5800] By: gsar on 2000/03/18 05:16:32
- Log: force i_ieeefp=undef on dos_djgpp (it reportedly causes failures
- in system includes)
- Branch: perl
- ! hints/dos_djgpp.sh
-____________________________________________________________________________
-[ 5799] By: gsar on 2000/03/18 05:12:00
- Log: Getopt::Long 2.23 update (from Johan Vromans)
- Branch: perl
- ! Changes lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 5798] By: gsar on 2000/03/18 05:03:20
- Log: recognize single-line declarations in xsubpp; add switches to
- disable newfangled features (from Ilya Zakharevich)
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 5797] By: gsar on 2000/03/18 04:21:43
- Log: make "\N{...}" enable utf8-ness correctly
- Branch: perl
- ! t/lib/charnames.t toke.c
-____________________________________________________________________________
-[ 5796] By: gsar on 2000/03/18 04:03:08
- Log: avoid mentioning Perl version in Configure question
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 5795] By: gsar on 2000/03/18 03:32:31
- Log: better explanation of C<> tags (from Wolfgang Laun)
- Branch: perl
- ! pod/perlpod.pod
-____________________________________________________________________________
-[ 5794] By: gsar on 2000/03/18 03:26:57
- Log: make return values from match in a list context, as well as $& et
- al propagate utf8-ness (from Graham Barr)
- Branch: perl
- ! mg.c pp_hot.c t/pragma/utf8.t
-____________________________________________________________________________
-[ 5793] By: jhi on 2000/03/18 01:45:30
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> hints/powerux.sh xsutils.c
-____________________________________________________________________________
-[ 5792] By: gsar on 2000/03/18 01:08:25
- Log: hints fixups for PowerMAX (from Tom Horsley)
- Branch: perl
- ! hints/powerux.sh
-____________________________________________________________________________
-[ 5791] By: gsar on 2000/03/17 23:53:21
- Log: make reftype() consistently croak on non-refs
- Branch: perl
- ! xsutils.c
-____________________________________________________________________________
-[ 5790] By: jhi on 2000/03/17 23:41:36
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> configpm ext/Thread/Thread/Queue.pm
- !> ext/Thread/Thread/Semaphore.pm ext/Thread/Thread/Specific.pm
- !> lib/Pod/Find.pm lib/perl5db.pl perl.c pod/perldata.pod
-____________________________________________________________________________
-[ 5789] By: gsar on 2000/03/17 22:37:21
- Log: fix coredump when upgrading PL_sv_yes in a second call to
- perl_construct() (from Doug MacEachern)
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 5788] By: gsar on 2000/03/17 22:32:25
- Log: make noTTY debugger option work again (from Paul Marquess)
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 5787] By: gsar on 2000/03/17 17:00:05
- Log: make Config.pm report sane errors with older perls
- Branch: perl
- ! configpm
-____________________________________________________________________________
-[ 5786] By: gsar on 2000/03/17 16:48:20
- Log: syntax errors in Thread::* (from Tom Christiansen)
- Branch: perl
- ! ext/Thread/Thread/Queue.pm ext/Thread/Thread/Semaphore.pm
- ! ext/Thread/Thread/Specific.pm
-____________________________________________________________________________
-[ 5785] By: gsar on 2000/03/17 16:45:34
- Log: tweak perldata section on v-strings
- Branch: perl
- ! pod/perldata.pod
-____________________________________________________________________________
-[ 5784] By: gsar on 2000/03/17 16:24:28
- Log: missing file in change#5781
- Branch: perl
- ! lib/Pod/Find.pm
-____________________________________________________________________________
-[ 5783] By: jhi on 2000/03/17 14:38:29
- Log: Add the NEXTSTEP strftime %j bug to Known Problems.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5782] By: jhi on 2000/03/17 14:29:46
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> embed.pl ext/B/B/Bblock.pm global.sym lib/File/Spec/Unix.pm
- !> lib/open.pm objXSUB.h op.c perlapi.c pod/perlcompile.pod
- !> pod/perldebug.pod sv.c t/comp/cpp.aux t/pod/testpchk.pl
-____________________________________________________________________________
-[ 5781] By: gsar on 2000/03/17 06:19:17
- Log: PodParser v1.13 update (from Brad Appleton)
- Branch: perl
- ! t/pod/testpchk.pl
-____________________________________________________________________________
-[ 5780] By: gsar on 2000/03/17 05:42:45
- Log: propagate CvFLAGS() into clones
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 5779] By: gsar on 2000/03/17 04:58:39
- Log: documentation fixes from p5p
- Branch: perl
- ! ext/B/B/Bblock.pm lib/File/Spec/Unix.pm pod/perlcompile.pod
- ! pod/perldebug.pod
-____________________________________________________________________________
-[ 5778] By: bailey on 2000/03/17 04:23:35
- Log: Quick pre-release fixes: clean up results in File::Spec::VMS and
- switch dir test order in taint.t to accomodate DECCRTL extension.
- Branch: vmsperl
- ! lib/File/Spec/VMS.pm t/op/taint.t
-____________________________________________________________________________
-[ 5777] By: gsar on 2000/03/17 04:13:27
- Log: make attributes::reftype(*FOO{IO}) return "IO" instead of "UNKNOWN"
- (from Tom Christiansen)
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5776] By: jhi on 2000/03/17 03:40:18
- Log: More Todo.
- Branch: cfgperl
- ! Todo Todo-5.6
-____________________________________________________________________________
-[ 5775] By: gsar on 2000/03/17 03:40:14
- Log: s/:def/:DEFAULT/
- Branch: perl
- ! lib/open.pm
-____________________________________________________________________________
-[ 5774] By: gsar on 2000/03/17 03:39:07
- Log: export cv_undef() and cv_const_sv() (mod_perl uses them to
- good advantage)
- Branch: perl
- ! embed.pl global.sym objXSUB.h perlapi.c
-____________________________________________________________________________
-[ 5773] By: gsar on 2000/03/17 03:12:34
- Log: remove non-ANSI parts in comp/cpp.t
- Branch: perl
- ! t/comp/cpp.aux
-____________________________________________________________________________
-[ 5772] By: jhi on 2000/03/17 03:11:49
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> configure.com embed.h embed.pl lib/CGI.pm
- !> lib/ExtUtils/Mksymlists.pm lib/Pod/Man.pm perl.h
- !> pod/pod2man.PL pod/pod2text.PL pp_sys.c vms/ext/vmsish.pm
- !> vms/ext/vmsish.t vms/subconfigure.com vms/test.com
- !> vms/vmsish.h
-____________________________________________________________________________
-[ 5771] By: jhi on 2000/03/17 03:10:34
- Log: Make the test easier to use.
- Branch: cfgperl
- ! t/op/sysio.t
-____________________________________________________________________________
-[ 5770] By: gsar on 2000/03/17 03:04:33
- Log: pod{man,text} updates from podlators-1.00 (from Russ Allbery)
- Branch: perl
- ! lib/Pod/Man.pm pod/pod2man.PL pod/pod2text.PL
-____________________________________________________________________________
-[ 5769] By: gsar on 2000/03/17 02:53:39
- Log: integrate vmsperl contents into mainline (no actual changes, since
- cfgperl already had them all)
- Branch: perl
- !> configure.com lib/CGI.pm lib/ExtUtils/Mksymlists.pm perl.h
- !> vms/ext/vmsish.pm vms/ext/vmsish.t vms/subconfigure.com
- !> vms/test.com vms/vmsish.h
-____________________________________________________________________________
-[ 5768] By: gsar on 2000/03/17 02:48:14
- Log: fix signedness in test for syswrite() length argument
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 5767] By: gsar on 2000/03/17 02:38:51
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> (integrate 28 files)
-____________________________________________________________________________
-[ 5766] By: jhi on 2000/03/17 02:29:24
- Log: Add "Known Problems" section.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5765] By: gsar on 2000/03/17 00:31:19
- Log: add missing bincompat5005 #defines
- Branch: perl
- ! embed.h embed.pl
-____________________________________________________________________________
-[ 5764] By: jhi on 2000/03/16 15:32:52
- Log: pp_send() type tuning continues.
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 5763] By: jhi on 2000/03/16 04:09:37
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> embed.pl global.sym objXSUB.h perl.c perlapi.c
- !> win32/perlhost.h win32/perllib.c win32/win32.h
-____________________________________________________________________________
-[ 5762] By: jhi on 2000/03/16 04:06:36
- Log: VMS patches from Dan Sugalski and Charles Bailey
- Branch: cfgperl
- ! configure.com ext/File/Glob/Glob.pm lib/CGI.pm
- ! lib/ExtUtils/Mksymlists.pm vms/subconfigure.com
-____________________________________________________________________________
-[ 5761] By: gsar on 2000/03/16 03:18:41
- Log: due to an oversight during PERL_OBJECT migration, hosts created
- by pseudo-fork were never being deleted, leading to a sizeable
- memory leak; std FDs in pseudo-children are now closed
- automatically to avoid resource leaks; basic infinite looping
- fork() test works without leaking again in non-PERL_OBJECT
- build
- Branch: perl
- ! embed.pl global.sym objXSUB.h perl.c perlapi.c
- ! win32/perlhost.h win32/perllib.c win32/win32.h
-____________________________________________________________________________
-[ 5760] By: jhi on 2000/03/16 01:50:13
- Log: Fix pp_send() sizes (pass a Size_t, not an Off_t, and
- return a SSize_t, not an Off_t); add a note about a slightly
- similar situation in pp_truncate(); introduce $sizesize
- for Configure; update EPOC, VOS, Win32, and VMS for the
- sizesize; minor updates on the EPOC config file; reword
- socklen_t message slightly; fix fpossize (though unused currently)
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH epoc/config.sh pp_sys.c vms/subconfigure.com
- ! vos/config.def vos/config.h win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/config_h.PL win32/config_sh.PL
- Branch: metaconfig/U/perl
- ! d_socklen_t.U fpossize.U
-____________________________________________________________________________
-[ 5759] By: jhi on 2000/03/15 23:47:11
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> makedef.pl
-____________________________________________________________________________
-[ 5758] By: jhi on 2000/03/15 23:46:17
- Log: Retract #5767; replace it with a tested patch
- from Anton Berezin.
- Branch: cfgperl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 5757] By: jhi on 2000/03/15 23:36:53
- Log: Configure nits: do not use /tmp to avoid potential security
- problems (Andy Dougherty: this does not fix the rampant
- use of /tmp by the various utilities like C compilers, though.
- Just don't run Configure as root if you care about security.),
- fix man3dir bug (both from Andy Dougherty); fix hints files
- not to use /tmp; retract #4993 (the description of the *symbols
- variables is okay, after all); regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH hints/dec_osf.sh hints/esix4.sh hints/newsos4.sh
- Branch: metaconfig
- + U/modified/d_flexfnam.U
- ! U/installdirs/man3dir.U
-____________________________________________________________________________
-[ 5756] By: jhi on 2000/03/15 22:20:06
- Log: cater for FreeBSD 5.*
- Branch: cfgperl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 5755] By: jhi on 2000/03/15 22:00:57
- Log: Add missing Windows O_ constants.
- Branch: cfgperl
- ! ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
-____________________________________________________________________________
-[ 5754] By: gsar on 2000/03/15 19:56:37
- Log: add PL_thr_key to export list under useithreads
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 5753] By: jhi on 2000/03/15 04:19:19
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 37 files)
-____________________________________________________________________________
-[ 5752] By: bailey on 2000/03/15 03:45:28
- Log: Make DEBUGGING a configurable option
- Branch: vmsperl
- ! configure.com
-____________________________________________________________________________
-[ 5751] By: bailey on 2000/03/15 03:38:57
- Log: Remove obsolete DCL symbol from subconfigure.com
- Branch: vmsperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 5750] By: bailey on 2000/03/15 03:29:17
- Log: Add VMS' default to the CGI.pm temp list (should update to File::Spec)
- Branch: vmsperl
- ! lib/CGI.pm
- !> ext/File/Glob/Glob.pm
-____________________________________________________________________________
-[ 5749] By: bailey on 2000/03/15 02:05:28
- Log: Change test using obsolete %COnfig element
- Branch: vmsperl
- ! lib/ExtUtils/Mksymlists.pm
-____________________________________________________________________________
-[ 5748] By: gsar on 2000/03/14 23:39:42
- Log: update local_patches entry for RC2
- Branch: perl
- ! Changes patchlevel.h pod/perlhist.pod
-____________________________________________________________________________
-[ 5747] By: gsar on 2000/03/14 22:44:27
- Log: more warnings tidy-ups (from Paul Marquess)
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod pod/perlfaq4.pod
- ! t/lib/attrs.t utils/h2xs.PL
-____________________________________________________________________________
-[ 5746] By: gsar on 2000/03/14 22:30:43
- Log: Sys::Syslog fix for accidental arguments to autoloaded constants
- Branch: perl
- ! ext/Sys/Syslog/Syslog.pm ext/Sys/Syslog/Syslog.xs
-____________________________________________________________________________
-[ 5745] By: gsar on 2000/03/14 22:20:27
- Log: tweak to use SIZE_ONLY
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 5744] By: gsar on 2000/03/14 21:56:48
- Log: regen win32/config*
- Branch: perl
- ! win32/Makefile win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 5743] By: gsar on 2000/03/14 21:46:25
- Log: change#5729 had syntax errors
- Branch: perl
- ! t/lib/complex.t
-____________________________________________________________________________
-[ 5742] By: gsar on 2000/03/14 21:26:33
- Log: integrate vmsperl changes into mainline (change#5693 denied)
- Branch: perl
- !> configure.com lib/File/Spec/VMS.pm t/lib/complex.t
- !> t/lib/filespec.t vms/ext/filespec.t vms/subconfigure.com
- !> vms/vms.c
-____________________________________________________________________________
-[ 5741] By: gsar on 2000/03/14 21:17:34
- Log: update Changes; integrate cfgperl contents into mainline
- Branch: perl
- ! Changes
- !> ext/Socket/Socket.xs patchlevel.h perl.h t/lib/complex.t
-____________________________________________________________________________
-[ 5740] By: gsar on 2000/03/14 20:57:12
- Log: perlfaq4 tweak (from Damian Conway <damian@cs.monash.edu.au>)
- Branch: perl
- ! pod/perlfaq4.pod
-____________________________________________________________________________
-[ 5739] By: gsar on 2000/03/14 20:53:07
- Log: allow alternates to negate correctly (from Johan Vromans)
- Branch: perl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 5738] By: gsar on 2000/03/14 20:34:19
- Log: kludge our way around warnings on C<use POSIX; use IO::File;>
- Branch: perl
- ! ext/IO/lib/IO/Seekable.pm
-____________________________________________________________________________
-[ 5737] By: gsar on 2000/03/14 20:06:23
- Log: protect special characters better against interpretation by *roff
- (from Russ Allbery)
- Branch: perl
- ! lib/Pod/Man.pm
-____________________________________________________________________________
-[ 5736] By: gsar on 2000/03/14 19:47:00
- Log: provide an explicit base address for perl56.dll to avoid relocations;
- increase the default stack size (RE engine can use a lot more stack
- than the 1MB default limit); default to using the regular version of
- the MSVCRT even for DEBUGGING builds (this allows extensions to be
- selectively built with debugging)
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 5735] By: gsar on 2000/03/14 19:31:53
- Log: regen perltoc, other pod nits
- Branch: perl
- ! ext/IO/poll.c pod/Makefile pod/buildtoc pod/perlnumber.pod
- ! pod/perltoc.pod pod/roffitall
-____________________________________________________________________________
-[ 5734] By: gsar on 2000/03/14 19:08:22
- Log: avoid dup warning (from Simon Cozens)
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 5733] By: gsar on 2000/03/14 18:46:50
- Log: allow usemymalloc to be overridden via -Uusemymalloc
- Branch: perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5732] By: gsar on 2000/03/14 17:23:47
- Log: test case for change#5700 (from M. J. T. Guy)
- Branch: perl
- ! t/op/universal.t
-____________________________________________________________________________
-[ 5731] By: gsar on 2000/03/14 17:15:44
- Log: revise README.win32 for currentness, point to function
- list in perlport.pod (from a patch suggested by Dominic Dunlop)
- Branch: perl
- ! README.win32 pod/perlport.pod
-____________________________________________________________________________
-[ 5730] By: gsar on 2000/03/14 17:14:21
- Log: tweak sort() notes (from Nathan Torkington)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 5729] By: jhi on 2000/03/14 15:13:13
- Log: Make the tests 1018 and 1019 more robust.
- Branch: cfgperl
- ! t/lib/complex.t
-____________________________________________________________________________
-[ 5728] By: jhi on 2000/03/14 15:07:48
- Log: Fix for one of the problems in RC1 reported by M. E. O'Neill
- in NEXTSTEP 3.3p2.
- Branch: cfgperl
- ! ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 5727] By: jhi on 2000/03/14 14:57:04
- Log: Integrate with Sarathy; unapply the #5539 that snekt in
- with #5539.
- Branch: cfgperl
- +> pod/perldebguts.pod
- ! patchlevel.h perl.h
- !> MANIFEST lib/Text/Abbrev.pm lib/perl5db.pl pod/perl.pod
- !> pod/perldebug.pod pod/perldelta.pod pod/perlnumber.pod
- !> t/lib/io_sock.t utils/perlcc.PL utils/perldoc.PL
- !> win32/makefile.mk
-____________________________________________________________________________
-[ 5726] By: gsar on 2000/03/14 07:43:37
- Log: fixes for Borland compiler (from Vadim Konovalov
- <vkonovalov@lucent.com>)
- Branch: perl
- ! utils/perlcc.PL win32/makefile.mk
-____________________________________________________________________________
-[ 5725] By: gsar on 2000/03/14 07:38:00
- Log: more efficient Text::Abbrev (from M.E. O'Neill <oneill@cs.sfu.ca>)
- Branch: perl
- ! lib/Text/Abbrev.pm
-____________________________________________________________________________
-[ 5724] By: gsar on 2000/03/14 05:59:02
- Log: integrate cfgperl changes into mainline, ignoring the
- __attribute__((unused)) stuff that seems to have snuck
- back in
- Branch: perl
- !> Todo-5.6 patchlevel.h perl.h pod/perl.pod pod/perlport.pod
- !> vms/perlvms.pod
-____________________________________________________________________________
-[ 5723] By: gsar on 2000/03/14 05:49:08
- Log: patches for many bugs in the debugger; documentation updates for
- perldelta; split perldebug.pod into perldeb{ug,guts}.pod (from
- Tom Christiansen)
- Branch: perl
- + pod/perldebguts.pod
- ! MANIFEST lib/perl5db.pl pod/perl.pod pod/perldebug.pod
- ! pod/perldelta.pod pod/perlnumber.pod pod/perlport.pod
-____________________________________________________________________________
-[ 5722] By: gsar on 2000/03/14 05:37:29
- Log: add sleep() to avoid race on NeXT (from M.E. O'Neill
- <oneill@cs.sfu.ca>)
- Branch: perl
- ! t/lib/io_sock.t
-____________________________________________________________________________
-[ 5721] By: gsar on 2000/03/14 03:53:50
- Log: support a -U option when run as root to drop privileges (from
- Tom Christiansen)
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 5720] By: jhi on 2000/03/14 03:43:51
- Log: move the big AVAILABILITY list to perlport as Supported Platforms
- (Tom Christiansen); add few more platforms
- Branch: cfgperl
- ! pod/perl.pod pod/perlport.pod
-____________________________________________________________________________
-[ 5719] By: jhi on 2000/03/14 02:44:55
- Log: more todo
- Branch: cfgperl
- ! Todo-5.6
-____________________________________________________________________________
-[ 5718] By: jhi on 2000/03/14 02:17:16
- Log: detypo
- Branch: cfgperl
- ! vms/perlvms.pod
-____________________________________________________________________________
-[ 5717] By: jhi on 2000/03/14 02:00:24
- Log: Integrate with Sarathy.
- Branch: cfgperl
- ! patchlevel.h perl.h
- !> (integrate 60 files)
-____________________________________________________________________________
-[ 5716] By: gsar on 2000/03/14 00:01:39
- Log: reference miscount in Devel::Peek that causes debugger to
- crash unceremoniously when doing "V DB" etc., repeatedly
- Branch: perl
- ! ext/Devel/Peek/Peek.xs
-____________________________________________________________________________
-[ 5715] By: gsar on 2000/03/13 21:40:23
- Log: fixes for broken L<> links (from Wolfgang Laun
- <wolfgang.laun@alcatel.at>)
- Branch: perl
- ! pod/Win32.pod pod/perlcall.pod pod/perlcompile.pod
- ! pod/perldata.pod pod/perlfaq7.pod pod/perlfunc.pod
- ! pod/perlguts.pod pod/perllocale.pod pod/perlnumber.pod
- ! pod/perlop.pod pod/perlxstut.pod vms/perlvms.pod
-____________________________________________________________________________
-[ 5714] By: gsar on 2000/03/13 21:37:48
- Log: typos in perlboot.pod (from Randal L. Schwartz <merlyn@stonehenge.com>)
- Branch: perl
- ! pod/perlboot.pod
-____________________________________________________________________________
-[ 5713] By: gsar on 2000/03/13 21:36:24
- Log: avoid infinite loop in h2xs (from Hugo van der Sanden)
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 5712] By: gsar on 2000/03/13 21:29:15
- Log: lexical warnings update for docs and tests (from Paul Marquess)
- Branch: perl
- ! ext/File/Glob/Glob.pm lib/fields.pm pod/perl.pod
- ! pod/perldata.pod pod/perldbmfilter.pod pod/perlfaq3.pod
- ! pod/perlfaq4.pod pod/perlfaq7.pod pod/perlfilter.pod
- ! pod/perlipc.pod pod/perlmod.pod pod/perlmodlib.pod
- ! pod/perlop.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- ! pod/perlstyle.pod pod/perlsyn.pod pod/perltie.pod
- ! pod/perltrap.pod pod/perlunicode.pod pod/perlxstut.pod
- ! t/io/open.t t/lib/fields.t t/lib/parsewords.t
- ! t/op/assignwarn.t t/op/gv.t t/op/hashwarn.t t/op/magic.t
- ! t/op/pack.t t/op/pat.t t/op/sort.t t/op/sprintf.t
- ! t/pragma/constant.t t/pragma/locale.t
-____________________________________________________________________________
-[ 5711] By: gsar on 2000/03/13 21:08:29
- Log: updates from PodParser v1.12 on CPAN (from Brad Appleton)
- Branch: perl
- ! lib/Pod/Checker.pm lib/Pod/Find.pm lib/Pod/InputObjects.pm
- ! lib/Pod/ParseUtils.pm lib/Pod/Parser.pm lib/Pod/Select.pm
- ! lib/Pod/Usage.pm t/pod/poderrs.xr t/pod/testp2pt.pl
- ! t/pod/testpchk.pl
-____________________________________________________________________________
-[ 5710] By: gsar on 2000/03/13 20:46:37
- Log: cleaner logic in op.c, also avoids QNX optimizer bug (from Norton
- Allen <allen@huarp.harvard.edu>)
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 5709] By: gsar on 2000/03/13 20:43:30
- Log: mention changes to diagnostics
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5708] By: gsar on 2000/03/13 20:34:38
- Log: ignore const for the purposes of typemaps (from Hugo van der Sanden)
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 5707] By: gsar on 2000/03/13 20:23:24
- Log: don't check for errno after Atof() (atof() doesn't set errno, and
- where Atof() is actually strto[l]d(), some platforms seem to want
- to set errno randomly)
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 5706] By: gsar on 2000/03/13 18:14:18
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure config_h.SH hints/hpux.sh hints/solaris_2.sh mg.c
- !> perl.h pod/perl.pod pp.c
-____________________________________________________________________________
-[ 5705] By: jhi on 2000/03/13 14:44:11
- Log: STRLEN != int.
- Branch: cfgperl
- ! mg.c
-____________________________________________________________________________
-[ 5704] By: jhi on 2000/03/13 13:18:07
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/warnings/register.pm
- !> (integrate 42 files)
-____________________________________________________________________________
-[ 5703] By: gsar on 2000/03/13 12:40:51
- Log: mention autoflush portability caveat
- Branch: perl
- ! pod/perlfunc.pod pod/perlop.pod pod/perlport.pod
-____________________________________________________________________________
-[ 5702] By: gsar on 2000/03/13 11:09:05
- Log: final touches for lexical warnings (from Paul Marquess)
- Branch: perl
- + lib/warnings/register.pm
- ! MANIFEST ext/IO/lib/IO/Select.pm ext/Socket/Socket.pm
- ! lib/Class/Struct.pm lib/I18N/Collate.pm lib/Tie/Handle.pm
- ! lib/Tie/Hash.pm lib/Tie/Scalar.pm lib/constant.pm
- ! lib/syslog.pl lib/vars.pm lib/warnings.pm mg.c perl.c
- ! pod/perllexwarn.pod pp_ctl.c t/lib/filepath.t t/lib/io_sel.t
- ! t/lib/socket.t t/lib/tie-stdhandle.t t/op/tie.t
- ! t/pragma/constant.t t/pragma/diagnostics.t t/pragma/warn/2use
- ! t/pragma/warn/9enabled warnings.h warnings.pl
-____________________________________________________________________________
-[ 5701] By: gsar on 2000/03/13 11:00:00
- Log: avoid compiler warnings
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 5700] By: gsar on 2000/03/13 09:57:59
- Log: make the is_utf8_*() safe for use on invalid utf8 (they now
- return false on such input instead of emitting warnings)
- Branch: perl
- ! embed.h embed.pl global.sym gv.c objXSUB.h perlapi.c
- ! pod/perlapi.pod proto.h universal.c utf8.c
-____________________________________________________________________________
-[ 5699] By: gsar on 2000/03/13 06:59:57
- Log: the premature FREETMPS calls in change#1187 weren't defensive enough
- Branch: perl
- ! pp_ctl.c pp_hot.c t/op/recurse.t
-____________________________________________________________________________
-[ 5698] By: jhi on 2000/03/13 05:03:37
- Log: hints nibbling continues
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5697] By: jhi on 2000/03/13 04:45:57
- Log: there's no end to tweaking
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5696] By: jhi on 2000/03/13 04:26:15
- Log: hints tweak
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5695] By: bailey on 2000/03/13 03:54:09
- Log: Trim out leftover hunk from prior resolve conflict
- Branch: vmsperl
- ! lib/File/Spec/VMS.pm
-____________________________________________________________________________
-[ 5694] By: bailey on 2000/03/13 03:20:20
- Log: Assorted configuration cleanups (Peter Prymmer, and a
- bit from Charles Bailey and Dan Sugalski)
- Branch: vmsperl
- ! configure.com vms/subconfigure.com
-____________________________________________________________________________
-[ 5693] By: bailey on 2000/03/13 03:00:16
- Log: Add vmsish 'hushed' option to suppress error messages at exit
- Branch: vmsperl
- ! perl.h vms/ext/vmsish.pm vms/ext/vmsish.t vms/test.com
- ! vms/vmsish.h
-____________________________________________________________________________
-[ 5692] By: bailey on 2000/03/13 02:50:10
- Log: Fix inverted test conditions for secure lnm translation
- and default file types. (Dan Sugalski)
- Branch: vmsperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 5691] By: bailey on 2000/03/13 02:41:36
- Log: Insulate tests of default display_format from different precision
- on different machines by truncating at 1 digit less than the most
- common choice (.15g)
- Branch: vmsperl
- ! t/lib/complex.t
-____________________________________________________________________________
-[ 5690] By: bailey on 2000/03/13 02:31:44
- Log: Resync with mainline post RC1
- Branch: vmsperl
- +> lib/Pod/Plainer.pm
- !> (integrate 137 files)
-____________________________________________________________________________
-[ 5689] By: bailey on 2000/03/13 02:22:24
- Log: Update File::Spec::VMS and tests
- Since reduce_ricochet has been removed from File::Spec,
- revert changes to VMS::Filespec::vmsify made to accomodate it.
- Branch: vmsperl
- ! lib/File/Spec/VMS.pm t/lib/filespec.t vms/ext/filespec.t
- ! vms/vms.c
-____________________________________________________________________________
-[ 5688] By: bailey on 2000/03/13 02:12:11
- Log: Basic 5.6.0 RC1 build patches for VMS
- Branch: vmsperl
- ! configure.com t/pragma/warn/doio t/pragma/warn/util
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 5687] By: jhi on 2000/03/13 00:41:51
- Log: Solaris long double fixes from Alan Burlison.
- Branch: cfgperl
- ! hints/solaris_2.sh perl.h pp.c
-____________________________________________________________________________
-[ 5686] By: jhi on 2000/03/13 00:17:13
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> dump.c hints/hpux.sh op.c pod/perldelta.pod t/op/misc.t
-____________________________________________________________________________
-[ 5685] By: jhi on 2000/03/13 00:13:17
- Log: Retract #5680, it broke more than it helped.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5684] By: gsar on 2000/03/12 21:48:44
- Log: set optimize=-O only if not already set
- Branch: perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5683] By: gsar on 2000/03/12 20:11:45
- Log: another optimized-OP_SASSIGN bug: ops that were not OA_TARGLEX
- were being mistakenly subverted anyway
- Branch: perl
- ! dump.c op.c pod/perldelta.pod t/op/misc.t
-____________________________________________________________________________
-[ 5682] By: jhi on 2000/03/12 18:11:52
- Log: update AVAILABILITY for LynxOS
- Branch: cfgperl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 5681] By: jhi on 2000/03/12 18:03:46
- Log: 64-bitness hints tweaks
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5680] By: jhi on 2000/03/12 17:49:25
- Log: 64-bitness tweak: separate 64bitint and 64bitall.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5679] By: jhi on 2000/03/12 17:43:09
- Log: metaconfig-ify #5676.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! fflushall.U
-____________________________________________________________________________
-[ 5678] By: jhi on 2000/03/12 17:37:14
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes Configure Todo lib/File/DosGlob.pm
-____________________________________________________________________________
-[ 5677] By: gsar on 2000/03/12 11:35:10
- Log: integrate cfgperl changes into mainline
- Branch: perl
- ! Changes Todo
- !> Todo-5.6 perl.h pod/perldelta.pod
-____________________________________________________________________________
-[ 5676] By: gsar on 2000/03/12 11:27:38
- Log: don't bother testing if we can flush all handles when fflush(stdin)
- shows the pipe bug
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 5675] By: jhi on 2000/03/12 05:08:29
- Log: continue flogging the string->int conversion ifdefs
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 5674] By: gsar on 2000/03/12 05:01:30
- Log: fix File::DosGlob for patterns with drive names like c:*.bat
- (suggested by Jason Mathews <mathews@computer.org>)
- Branch: perl
- ! lib/File/DosGlob.pm
-____________________________________________________________________________
-[ 5673] By: jhi on 2000/03/12 04:48:14
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> doop.c perl.h pod/perldelta.pod pod/perldiag.pod
- !> pod/perlpod.pod toke.c utils/perldoc.PL
-____________________________________________________________________________
-[ 5672] By: gsar on 2000/03/12 03:57:23
- Log: security fixes for perldoc (from Tom Christiansen)
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 5671] By: gsar on 2000/03/12 03:45:27
- Log: Larry's patch to disallow CORE::Snark, with perldiag entry
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 5670] By: gsar on 2000/03/12 03:36:17
- Log: insufficient buffer in change#5317
- Branch: perl
- ! doop.c
-____________________________________________________________________________
-[ 5669] By: gsar on 2000/03/12 03:15:29
- Log: avoid L<foo|bar> for now, not all the pod2foo support it
- Branch: perl
- ! pod/perlpod.pod
-____________________________________________________________________________
-[ 5668] By: gsar on 2000/03/12 02:35:55
- Log: rework change#5664
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 5667] By: jhi on 2000/03/11 21:35:29
- Log: todo and perldelta updates
- Branch: cfgperl
- ! Todo Todo-5.6 pod/perldelta.pod
-____________________________________________________________________________
-[ 5666] By: jhi on 2000/03/11 21:00:34
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> perl.h
-____________________________________________________________________________
-[ 5665] By: jhi on 2000/03/11 20:58:58
- Log: Fixes for #5661.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 5664] By: gsar on 2000/03/11 19:50:06
- Log: fix Strtoul() misdefinition is change#5661
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 5663] By: gsar on 2000/03/11 19:21:18
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure config_h.SH hints/solaris_2.sh perl.h
- !> t/pragma/warn/pp_hot toke.c
-____________________________________________________________________________
-[ 5662] By: jhi on 2000/03/11 19:06:20
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> cop.h perl.c pp_ctl.c t/op/eval.t t/op/misc.t
-____________________________________________________________________________
-[ 5661] By: jhi on 2000/03/11 19:03:32
- Log: Use Atof() instead of bare strtod(); ditto for Atol()/Atoul()
- (introduce the latter) instead of bare strtoll()/strtoll().
- Branch: cfgperl
- ! perl.h toke.c
-____________________________________________________________________________
-[ 5660] By: gsar on 2000/03/11 18:40:49
- Log: another long-standing eval bug: return doesn't reset $@ correctly
- Branch: perl
- ! pp_ctl.c t/op/eval.t
-____________________________________________________________________________
-[ 5659] By: jhi on 2000/03/11 18:27:54
- Log: metaconfig-ify the test for broken fflush(NULL)
- (which ails e.g. Solaris), from Ulrich Pfeifer.
- Branch: cfgperl
- ! Configure config_h.SH hints/solaris_2.sh
- Branch: metaconfig/U/perl
- ! d_unorderedl.U fflushall.U
-____________________________________________________________________________
-[ 5658] By: gsar on 2000/03/11 18:11:22
- Log: change#3511 was not defensive enough about try blocks, causing
- bogus attempts to free closures, and thence, segfaults
- Branch: perl
- ! cop.h perl.c pp_ctl.c t/op/misc.t
-____________________________________________________________________________
-[ 5657] By: jhi on 2000/03/11 18:04:44
- Log: Rewording.
- Branch: cfgperl
- ! t/pragma/warn/pp_hot
-____________________________________________________________________________
-[ 5656] By: jhi on 2000/03/11 17:41:29
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 27 files)
-____________________________________________________________________________
-[ 5655] By: gsar on 2000/03/11 17:06:03
- Log: reword comment
- Branch: perl
- ! t/pragma/warn/pp_hot
-____________________________________________________________________________
-[ 5654] By: gsar on 2000/03/11 17:01:47
- Log: off-by-one in os2.c (from Ilya Zakharevich)
- Branch: perl
- ! os2/os2.c
-____________________________________________________________________________
-[ 5653] By: gsar on 2000/03/11 16:59:48
- Log: File::Spec::VMS fixups, *not tested* on VMS (from Barrie Slaymaker)
- Branch: perl
- ! lib/File/Spec/VMS.pm t/lib/filespec.t
-____________________________________________________________________________
-[ 5652] By: gsar on 2000/03/11 16:52:03
- Log: missing export list entry in change#5619
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 5651] By: gsar on 2000/03/11 16:50:05
- Log: avoid using context pointer in MUTEX_INIT() et al; remove the
- *_NOCONTEXT variants to keep it simple
- Branch: perl
- ! malloc.c thread.h win32/win32thread.h
-____________________________________________________________________________
-[ 5650] By: gsar on 2000/03/11 16:07:35
- Log: remove =for section (from Johan Vromans)
- Branch: perl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 5649] By: gsar on 2000/03/11 16:05:50
- Log: add nokfile target in Makefile (from Andy Dougherty)
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 5648] By: gsar on 2000/03/11 16:02:53
- Log: mention podchecker (from Tim Jenness <timj@jach.hawaii.edu>)
- Branch: perl
- ! pod/perlpod.pod
-____________________________________________________________________________
-[ 5647] By: gsar on 2000/03/11 16:01:03
- Log: VMS build tweaks (from Charles Bailey)
- Branch: perl
- ! configure.com perl.c t/pragma/warn/doio t/pragma/warn/util
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 5646] By: gsar on 2000/03/11 10:13:27
- Log: remove outdated ftp.cis.ufl.edu reference
- Branch: perl
- ! pod/perlfaq2.pod
-____________________________________________________________________________
-[ 5645] By: gsar on 2000/03/11 10:10:39
- Log: failed hunk in change#5644
- Branch: perl
- ! t/op/pat.t
-____________________________________________________________________________
-[ 5644] By: gsar on 2000/03/11 10:08:47
- Log: fix optimizer bug in /^(?p{"a"})b/ (from Ilya Zakharevich)
- Branch: perl
- ! regcomp.c t/op/pat.t
-____________________________________________________________________________
-[ 5643] By: gsar on 2000/03/11 09:48:30
- Log: better {local,gm}time documentation (from Mark-Jason Dominus)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 5642] By: gsar on 2000/03/11 09:45:10
- Log: tweaks for lynxos build (from Ed Mooring <mooring@lynx.com>)
- Branch: perl
- ! doio.c hints/lynxos.sh perl.h
-____________________________________________________________________________
-[ 5641] By: gsar on 2000/03/11 09:42:56
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure Todo-5.6 config_h.SH hints/irix_6.sh
- !> lib/Math/Complex.pm regcomp.c t/op/64bit.t
-____________________________________________________________________________
-[ 5640] By: gsar on 2000/03/11 09:24:30
- Log: perldelta update, typos and whitespace adjustments
- Branch: perl
- ! lib/open.pm miniperlmain.c pod/perldelta.pod win32/perllib.c
-____________________________________________________________________________
-[ 5639] By: jhi on 2000/03/11 00:51:48
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 44 files)
-____________________________________________________________________________
-[ 5638] By: jhi on 2000/03/11 00:45:46
- Log: Cpp out deadcode that IRIX compiler noticed.
- Branch: cfgperl
- ! regcomp.c
-____________________________________________________________________________
-[ 5637] By: jhi on 2000/03/10 14:22:24
- Log: Do not use Perl's malloc in IRIX.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5636] By: jhi on 2000/03/10 05:27:03
- Log: More/modified unused floating point units.
- Branch: metaconfig/U/perl
- + d_fp_class_l.U d_unordered.U d_unorderedl.U
- ! d_fpclass.U
-____________________________________________________________________________
-[ 5635] By: jhi on 2000/03/10 01:54:07
- Log: Add various yet-unused units.
- Branch: metaconfig/U/perl
- + d_class.U d_fchdir.U d_finite.U d_fp_class.U d_fp_classl.U
- + d_fpclass.U d_fpclassify.U d_frexpl.U d_futimes.U
- + d_getitimer.U d_getrlimit.U d_iconv.U d_isfinite.U d_isinf.U
- + d_isnan.U d_isnanl.U d_lchmod.U d_lutimes.U d_setitimer.U
- + d_setrlimit.U d_ualarm.U d_utimes.U
-____________________________________________________________________________
-[ 5634] By: jhi on 2000/03/10 01:07:54
- Log: Fix goofups noticed by Mark Bixby and Jeff Okamoto.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/compline/nblock_io.U
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 5633] By: jhi on 2000/03/09 23:22:33
- Log: Remove an obsolete note.
- Branch: cfgperl
- ! t/op/64bit.t
-____________________________________________________________________________
-[ 5632] By: gsar on 2000/03/09 18:50:43
- Log: update Changes
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 5631] By: gsar on 2000/03/09 18:49:12
- Log: track more of the child state on Windows
- Branch: perl
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5630] By: gsar on 2000/03/09 18:48:05
- Log: UNIVERSAL::isa() and UNIVERSAL::can() fail for magic values
- Branch: perl
- ! universal.c
-____________________________________________________________________________
-[ 5629] By: gsar on 2000/03/09 18:37:35
- Log: tweak Unicode notes, other cleanups
- Branch: perl
- ! Changes lib/bytes.pm lib/utf8.pm pod/perldelta.pod
- ! pod/perlhist.pod pod/perlunicode.pod
-____________________________________________________________________________
-[ 5628] By: gsar on 2000/03/09 17:39:58
- Log: support binmode(F,":crlf") and use open IN => ":raw", OUT => ":crlf"
- semantics; the pragma sets defaults for both open() and qx//
- Branch: perl
- ! doio.c dosish.h embed.h embed.pl epoc/epocish.h lib/open.pm
- ! mpeix/mpeixish.h op.c op.h opcode.h opcode.pl os2/os2ish.h
- ! perl.h perlapi.c plan9/plan9ish.h pod/perlfunc.pod pp.sym
- ! pp_proto.h pp_sys.c proto.h sv.h vms/vmsish.h vos/vosish.h
-____________________________________________________________________________
-[ 5627] By: gsar on 2000/03/09 12:54:08
- Log: avoid autoflushing behavior of fork/system/exec on Solaris (thanks
- to fflush(NULL) bug)
- Branch: perl
- ! hints/solaris_2.sh pod/perldelta.pod
-____________________________________________________________________________
-[ 5626] By: gsar on 2000/03/09 11:34:51
- Log: abort build on HP-UX if bundled non-ANSI compiler is detected
- (from Dominic Dunlop <domo@computer.org>)
- Branch: perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5625] By: gsar on 2000/03/09 11:17:07
- Log: patch from Larry to make -T filetest algorithm recognize utf8 as
- "text"
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 5624] By: gsar on 2000/03/09 11:11:59
- Log: provide support for deleting actions etc. (from Ronald J Kimball
- <rjk@linguist.dartmouth.edu>)
- Branch: perl
- ! lib/perl5db.pl pod/perldebug.pod
-____________________________________________________________________________
-[ 5623] By: gsar on 2000/03/09 06:39:21
- Log: new xsubpp keywords should be in all caps
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 5622] By: gsar on 2000/03/09 06:26:04
- Log: demand-load utf8.pm in swash routines
- Branch: perl
- ! op.c utf8.c
-____________________________________________________________________________
-[ 5621] By: gsar on 2000/03/08 19:27:02
- Log: make Dump() call the XSUB implementation transparently (modified
- version of patch suggested by David Boyce <dsb@world.std.com>)
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm ext/Data/Dumper/Dumper.xs
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5620] By: gsar on 2000/03/08 18:35:48
- Log: do FILE should not see outside lexicals (from Rick Delaney
- <rick@consumercontact.com>)
- Branch: perl
- ! op.c pp_ctl.c t/comp/require.t
-____________________________________________________________________________
-[ 5619] By: gsar on 2000/03/08 18:04:45
- Log: abstract code for C<use Foo 1.23 @ary;> into a Perl_load_module()
- API function
- Branch: perl
- ! doio.c embed.h embed.pl global.sym objXSUB.h op.c op.h
- ! perlapi.c pp_sys.c proto.h
-____________________________________________________________________________
-[ 5618] By: jhi on 2000/03/08 18:03:30
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/Pod/Plainer.pm
- !> Changes MANIFEST dosish.h embedvar.h lib/Pod/InputObjects.pm
- !> lib/Pod/Parser.pm makedef.pl op.c op.h perl.c perlapi.h
- !> perlvars.h pod/perlop.pod pod/pod2latex.PL sv.c unixish.h
- !> vms/vmsish.h
-____________________________________________________________________________
-[ 5617] By: jhi on 2000/03/08 15:44:05
- Log: ICU todo fixes.
- Branch: cfgperl
- ! Todo-5.6
-____________________________________________________________________________
-[ 5616] By: jhi on 2000/03/08 14:30:40
- Log: Even more Todo.
- Branch: cfgperl
- ! Todo-5.6
-____________________________________________________________________________
-[ 5615] By: jhi on 2000/03/08 14:13:45
- Log: More Todo.
- Branch: cfgperl
- ! Todo-5.6
-____________________________________________________________________________
-[ 5614] By: jhi on 2000/03/08 13:50:53
- Log: wording changes
- Branch: cfgperl
- ! lib/Math/Complex.pm
-____________________________________________________________________________
-[ 5613] By: gsar on 2000/03/08 12:51:35
- Log: clarify docs on return value from binding operators
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 5612] By: gsar on 2000/03/08 12:41:38
- Log: shore up pod2latex shortcomings, and a Pod::Parser fix (from
- Robin Barker)
- Branch: perl
- + lib/Pod/Plainer.pm
- ! MANIFEST lib/Pod/Parser.pm pod/pod2latex.PL
-____________________________________________________________________________
-[ 5611] By: gsar on 2000/03/08 12:22:59
- Log: integrate cfgperl changes into mainline
- Branch: perl
- ! Changes
- !> installperl lib/Math/Complex.pm pod/perldelta.pod
- !> t/lib/complex.t vms/vmsish.h
-____________________________________________________________________________
-[ 5610] By: gsar on 2000/03/08 12:08:17
- Log: add missing locks for op refcounts
- Branch: perl
- ! dosish.h embedvar.h makedef.pl op.c op.h perl.c perlapi.h
- ! perlvars.h sv.c unixish.h vms/vmsish.h
-____________________________________________________________________________
-[ 5609] By: gsar on 2000/03/08 11:30:32
- Log: Pod::InputObjects tweak (from Brad Appleton)
- Branch: perl
- ! lib/Pod/InputObjects.pm
-____________________________________________________________________________
-[ 5608] By: jhi on 2000/03/08 05:08:59
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 27 files)
-____________________________________________________________________________
-[ 5607] By: jhi on 2000/03/08 05:07:06
- Log: Make the stringification more customizable.
- A potentially backward incompatible change.
- Based on a suggestion by Roman Kosenko <ra@amk.al.lg.ua>.
- Branch: cfgperl
- ! lib/Math/Complex.pm pod/perldelta.pod t/lib/complex.t
-____________________________________________________________________________
-[ 5606] By: jhi on 2000/03/08 00:49:14
- Log: s/lfs/largefiles/
- Branch: metaconfig
- ! U/mksample
-____________________________________________________________________________
-[ 5605] By: gsar on 2000/03/07 23:37:48
- Log: VMS build patch (from Peter Prymmer)
- Branch: perl
- ! configure.com installhtml lib/lib.pm vms/descrip_mms.template
- ! vms/subconfigure.com vms/vms.c
-____________________________________________________________________________
-[ 5604] By: gsar on 2000/03/07 23:25:46
- Log: CopFILEGV(&PL_compiling) must be reset properly (from Doug MacEachern)
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 5603] By: gsar on 2000/03/07 23:05:16
- Log: type mismatch
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5602] By: gsar on 2000/03/07 22:40:55
- Log: add note to INSTALL about C++ compilers (from M J T Guy)
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 5601] By: gsar on 2000/03/07 22:30:35
- Log: separate options to incpush() for adding version directories and
- architecture directories (from Andy Dougherty)
- Branch: perl
- ! embed.h embed.pl perl.c proto.h t/lib/fatal.t
-____________________________________________________________________________
-[ 5600] By: gsar on 2000/03/07 20:18:54
- Log: support :void to enable croaking only in void context (from
- Simon Cozens <simon@othersideofthe.earth.li>)
- Branch: perl
- ! lib/Fatal.pm t/lib/fatal.t
-____________________________________________________________________________
-[ 5599] By: gsar on 2000/03/07 18:35:21
- Log: Pod::Html tweak to avoid false falses
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 5598] By: gsar on 2000/03/07 18:21:58
- Log: skip null siblings encountered by goto out of loopish block
- (from Doug Lankshear)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 5597] By: gsar on 2000/03/07 16:33:29
- Log: omit XSLoader from bytecode dumps
- Branch: perl
- ! ext/B/B/Bytecode.pm ext/B/B/Stash.pm ext/B/B/Xref.pm
-____________________________________________________________________________
-[ 5596] By: gsar on 2000/03/07 10:58:17
- Log: avoid coredump on C<printf "%vd">
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5595] By: gsar on 2000/03/07 10:26:03
- Log: add missing HTML escapes that can be displayed in xterm (from
- Tim Jenness <timj@jach.hawaii.edu>)
- Branch: perl
- ! lib/Pod/Text.pm
-____________________________________________________________________________
-[ 5594] By: gsar on 2000/03/07 10:24:55
- Log: Fatal.pm pod tweak (from Matt Sergeant <matt@sergeant.org>)
- Branch: perl
- ! lib/Fatal.pm
-____________________________________________________________________________
-[ 5593] By: gsar on 2000/03/07 09:57:24
- Log: get ByteLoader working again
- Branch: perl
- ! bytecode.pl ext/B/B/Asmdata.pm ext/B/B/Bytecode.pm
- ! ext/B/B/C.pm ext/ByteLoader/bytecode.h
- ! ext/ByteLoader/byterun.c
-____________________________________________________________________________
-[ 5592] By: gsar on 2000/03/07 05:14:49
- Log: typo in makedef.pl
- Branch: perl
- ! lib/File/Path.pm makedef.pl
-____________________________________________________________________________
-[ 5591] By: jhi on 2000/03/06 22:56:24
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes ext/File/Glob/Glob.xs lib/Pod/Html.pm
-____________________________________________________________________________
-[ 5590] By: gsar on 2000/03/06 22:32:44
- Log: fix incorrect prototypes in File::Glob
- Branch: perl
- ! ext/File/Glob/Glob.xs
-____________________________________________________________________________
-[ 5589] By: gsar on 2000/03/06 22:07:38
- Log: update Changes
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 5588] By: jhi on 2000/03/06 21:46:18
- Log: From: "Craig A. Berry" <craig.berry@metamorgs.com>
- To: vmsperl@perl.org, perl5-porters@perl.org
- Cc: jhi@iki.fi, Charles Bailey <BAILEY@newman.upenn.edu>, gsar@activestate.com
- Subject: [PATCH 5.5.670] circumvent VMS fileno bug in old DEC C version
- Date: Mon, 06 Mar 2000 15:36:13 -0600
- Message-Id: <4.2.2.20000306153539.00ca6420@exchi01.midwest.metamorgs.com>
- Branch: cfgperl
- ! vms/vmsish.h
-____________________________________________________________________________
-[ 5587] By: jhi on 2000/03/06 21:23:27
- Log: Use $^O.
- Branch: cfgperl
- ! installperl
-____________________________________________________________________________
-[ 5586] By: jhi on 2000/03/06 21:19:15
- Log: Undo drift from the mainline.
- Branch: cfgperl
- !> (integrate 1607 files)
-____________________________________________________________________________
-[ 5585] By: gsar on 2000/03/06 20:23:37
- Log: change#5513 accidentally undid change#5373, put it back
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 5584] By: jhi on 2000/03/06 17:30:48
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> lib/File/Path.pm lib/Getopt/Long.pm lib/IPC/Open2.pm
- !> lib/Pod/Man.pm makedef.pl toke.c vms/subconfigure.com
-____________________________________________________________________________
-[ 5583] By: gsar on 2000/03/06 17:02:52
- Log: makedef.pl typos
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 5582] By: gsar on 2000/03/06 15:24:14
- Log: Pod::Man bugfixes (from Russ Allbery)
- Branch: perl
- ! lib/Pod/Man.pm
-____________________________________________________________________________
-[ 5581] By: gsar on 2000/03/06 15:17:08
- Log: File::Path::rmtree() doesn't delete stale symlinks correctly
- Branch: perl
- ! lib/File/Path.pm
-____________________________________________________________________________
-[ 5580] By: gsar on 2000/03/06 14:55:57
- Log: pod nits
- Branch: perl
- ! lib/Getopt/Long.pm lib/IPC/Open2.pm
-____________________________________________________________________________
-[ 5579] By: gsar on 2000/03/06 14:55:08
- Log: 64-bit build fix on VMS (from Dan Sugalski)
- Branch: perl
- ! toke.c vms/subconfigure.com
-____________________________________________________________________________
-[ 5578] By: jhi on 2000/03/06 14:37:46
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> README.win32 configure.com iperlsys.h lib/File/Spec/VMS.pm
- !> lib/IPC/Open2.pm lib/IPC/Open3.pm perl.c t/lib/filefind.t
- !> t/lib/filespec.t vms/ext/filespec.t vms/subconfigure.com
- !> vms/test.com vms/vms.c win32/config.bc win32/config.gc
- !> win32/config.vc win32/config_H.bc win32/config_H.gc
- !> win32/config_H.vc win32/config_h.PL win32/perlhost.h
- !> win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5577] By: gsar on 2000/03/06 07:26:18
- Log: skip tests that need VMS::Filespec on other platforms
- Branch: perl
- ! t/lib/filespec.t
-____________________________________________________________________________
-[ 5576] By: gsar on 2000/03/06 07:11:21
- Log: integrate vmsperl contents into mainline
- Branch: perl
- !> configure.com lib/File/Spec/VMS.pm t/lib/filefind.t
- !> t/lib/filespec.t vms/ext/filespec.t vms/subconfigure.com
- !> vms/test.com vms/vms.c
-____________________________________________________________________________
-[ 5575] By: gsar on 2000/03/06 07:05:34
- Log: support for autovivified handles (from Tom Christiansen)
- Branch: perl
- ! lib/IPC/Open2.pm lib/IPC/Open3.pm
-____________________________________________________________________________
-[ 5574] By: gsar on 2000/03/06 06:31:55
- Log: vendorlib support for Windows; regen win32/config*
- Branch: perl
- ! README.win32 iperlsys.h perl.c win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/config_h.PL win32/perlhost.h
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5573] By: bailey on 2000/03/06 05:23:23
- Log: Skip openpid.t while VMS subprocess intercommunication in flux (several vmsperlers)
- Branch: vmsperl
- ! vms/test.com
-____________________________________________________________________________
-[ 5572] By: gsar on 2000/03/06 05:21:26
- Log: the incpush()es weren't all quite right on Windows in change#5559
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 5571] By: bailey on 2000/03/06 05:18:59
- Log: Fix ricochet in File::Spec::VMS
- Fix eval error in filespec.t
- Misc. minor fixes in filespec.t
- Branch: vmsperl
- ! lib/File/Spec/VMS.pm t/lib/filespec.t
-____________________________________________________________________________
-[ 5570] By: gsar on 2000/03/06 05:00:44
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure Makefile.SH Porting/Glossary Porting/config.sh
- !> Porting/config_H config_h.SH epoc/config.sh
- !> ext/DynaLoader/DynaLoader_pm.PL hints/aix.sh patchlevel.h
- !> perl.c perl.h toke.c vos/config.def vos/config.h
- !> vos/config_h.SH_orig
-____________________________________________________________________________
-[ 5569] By: jhi on 2000/03/06 04:51:39
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> installperl pp.c
-____________________________________________________________________________
-[ 5568] By: gsar on 2000/03/06 04:48:17
- Log: installperl wasn't putting extensions with two or more
- nested package names in the archlib
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 5567] By: bailey on 2000/03/06 03:43:36
- Log: Set up for vendorarch (and fix 64bitint typo) (Dan Sugalski)
- Branch: vmsperl
- ! configure.com vms/subconfigure.com
-____________________________________________________________________________
-[ 5566] By: bailey on 2000/03/06 03:40:14
- Log: Change $Config{'extensions'} to look Unixy (Charles Lane)
- FIx logic error in glob-basic.t (Charles Lane)
- Branch: vmsperl
- ! configure.com vms/subconfigure.com
-____________________________________________________________________________
-[ 5565] By: bailey on 2000/03/06 03:37:46
- Log: Remove trailing . from typeless files (Charles Lane)
- Branch: vmsperl
- ! t/lib/filefind.t
-____________________________________________________________________________
-[ 5564] By: bailey on 2000/03/06 03:36:26
- Log: Resync with mainline, update test in vmsfspec.t
- Branch: vmsperl
- +> lib/Term/ANSIColor.pm t/lib/ansicolor.t
- ! vms/ext/filespec.t
- !> (integrate 171 files)
-____________________________________________________________________________
-[ 5563] By: gsar on 2000/03/06 03:29:11
- Log: avoid warning
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 5562] By: bailey on 2000/03/06 02:48:17
- Log: Downcase function call to hush picky cc
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5561] By: jhi on 2000/03/06 00:23:22
- Log: VOS patch from Paul Green. Note that the vos/config_h.SH_orig
- is not exactly identical to the current config_h.SH because
- Paul needs better $sitearch control.
- Branch: cfgperl
- ! vos/config.def vos/config.h vos/config_h.SH_orig
-____________________________________________________________________________
-[ 5560] By: jhi on 2000/03/05 23:26:41
- Log: Avoid wiping out @dl_{librefs,modules} when XSLoader
- falls back to DynaLoader.
-
- From: Doug MacEachern <dougm@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH v5.5.670] maintain DynaLoader::dl_{librefs,modules}
- Date: Sun, 5 Mar 2000 15:19:01 -0800 (PST)
- Message-ID: <Pine.LNX.4.10.10003051509460.16885-100000@mojo.covalent.net>
- Branch: cfgperl
- ! ext/DynaLoader/DynaLoader_pm.PL
-____________________________________________________________________________
-[ 5559] By: jhi on 2000/03/05 22:05:54
- Log: sitelib_stem and vendorlib_stem patches from Andy;
- problem reported in
- From: schwern@athens.arena-i.com (Michael G Schwern)
- To: perl5-porters@perl.org
- Subject: [ID 20000305.001] [BUG 5.5.670 perl.c] SITELIB_EXP mangled by hack.
- Date: Sun, 5 Mar 2000 06:31:29 -0500 (EST)
- Message-Id: <20000305113129.80DC23820@athens.arena-i.com>
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH epoc/config.sh patchlevel.h perl.c perl.h
- ! vos/config.def vos/config.h vos/config_h.SH_orig
- Branch: metaconfig
- ! U/installdirs/instubperl.U U/installdirs/sitelib.U
- ! U/installdirs/vendorlib.U
-____________________________________________________________________________
-[ 5558] By: jhi on 2000/03/05 21:18:59
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> hints/linux.sh lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 5557] By: gsar on 2000/03/05 20:35:13
- Log: Getopt-Long v2.21 update (from Johan Vromans)
- Branch: perl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 5556] By: gsar on 2000/03/05 20:26:57
- Log: Linux needs -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 too
- (from Matthias Urlichs <smurf@noris.net>)
- Branch: perl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 5555] By: jhi on 2000/03/05 20:15:34
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/Term/ANSIColor.pm t/lib/ansicolor.t
- !> MANIFEST lib/Pod/InputObjects.pm opcode.h opcode.pl
- !> pod/perldelta.pod pod/perlfunc.pod pp.c pp_sys.c
- !> t/comp/proto.t toke.c utils/perlbug.PL
-____________________________________________________________________________
-[ 5554] By: gsar on 2000/03/05 20:02:17
- Log: prototype changes for eventually supporting C<binmode(F, ":raw")>
- and C<open F, "-|", 'cat', '-v'>
- Branch: perl
- ! opcode.h opcode.pl pod/perlfunc.pod pp.c pp_sys.c
- ! t/comp/proto.t toke.c
-____________________________________________________________________________
-[ 5553] By: jhi on 2000/03/05 19:55:02
- Log: AIX gcvt() cannot format long doubles very well.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 5552] By: jhi on 2000/03/05 18:44:37
- Log: the monster cpp expression needs to be on one line to
- appease makedepend
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 5551] By: jhi on 2000/03/05 18:24:32
- Log: IRIX cpp is fussy.
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 5550] By: gsar on 2000/03/05 17:46:18
- Log: perlbug tweak to grok local_patches better
- Branch: perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 5549] By: gsar on 2000/03/05 17:33:10
- Log: add Term::ANSIColor, perldelta notes on Pod::Man, and fix a bug
- in Pod::InputObjects (from Russ Allbery)
- Branch: perl
- + lib/Term/ANSIColor.pm t/lib/ansicolor.t
- ! MANIFEST lib/Pod/InputObjects.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 5548] By: jhi on 2000/03/05 17:27:06
- Log: clean up the makedepend temp file
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 5547] By: jhi on 2000/03/05 17:23:18
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> perl.c
-____________________________________________________________________________
-[ 5546] By: jhi on 2000/03/05 17:16:12
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 47 files)
-____________________________________________________________________________
-[ 5545] By: gsar on 2000/03/05 17:13:48
- Log: strip last component of SITELIB_EXP only if it looks like a
- number
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 5544] By: jhi on 2000/03/05 17:12:42
- Log: s/Perl/PeRl/; # yeah
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/cpp_stuff.U
-____________________________________________________________________________
-[ 5543] By: gsar on 2000/03/05 16:54:10
- Log: thinko in change#4546 that caused variables to lose their importedness
- (GvIMPORTED_XV_off should be !GvIMPORTED_XV)
- Branch: perl
- ! sv.c t/pragma/strict-vars
-____________________________________________________________________________
-[ 5542] By: gsar on 2000/03/05 09:37:26
- Log: regen win32/config*, up version numbers &c.
- Branch: perl
- ! patchlevel.h win32/Makefile win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 5541] By: gsar on 2000/03/05 09:20:12
- Log: undo change#5506; add patch to make blank line warnings optional
- (from Brad Appleton)
- Branch: perl
- ! lib/Pod/Checker.pm lib/Pod/Parser.pm t/pod/poderrs.xr
-____________________________________________________________________________
-[ 5540] By: gsar on 2000/03/05 09:04:52
- Log: fixes for most warnings identified by gcc -Wall
- Branch: perl
- ! av.c cop.h deb.c doop.c dump.c embed.h embed.pl gv.c hv.c mg.c
- ! miniperlmain.c objXSUB.h op.c perl.c perlapi.c pp.c pp_ctl.c
- ! pp_hot.c pp_sys.c proto.h regcomp.c regexec.c regexp.h run.c
- ! scope.c sv.c sv.h toke.c universal.c util.c xsutils.c
-____________________________________________________________________________
-[ 5539] By: gsar on 2000/03/05 06:37:58
- Log: shup up warnings about dNOOP from gcc with __attribute__ ((unused))
- (from Doug MacEachern <dougm@pobox.com>)
- Branch: perl
- ! patchlevel.h perl.h
-____________________________________________________________________________
-[ 5538] By: gsar on 2000/03/05 05:50:44
- Log: tyop
- Branch: perl
- ! config_h.SH
-____________________________________________________________________________
-[ 5537] By: gsar on 2000/03/05 05:41:10
- Log: integrate cfgperl contents into mainline; add new tests from
- inc.t into 64bit.t
- Branch: perl
- ! t/op/64bit.t
- !> Configure config_h.SH hints/hpux.sh hints/sco.sh perl.h
- !> pod/perl.pod toke.c
-____________________________________________________________________________
-[ 5536] By: jhi on 2000/03/05 05:37:22
- Log: dethinko
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 5535] By: jhi on 2000/03/05 05:14:40
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> pp.c t/op/inc.t toke.c
-____________________________________________________________________________
-[ 5534] By: gsar on 2000/03/05 04:50:26
- Log: optimize change#5533 to stick to IVs if constant is <= IV_MAX,
- since runtime is highly optimized for IVs rather than UVs
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 5533] By: gsar on 2000/03/05 04:30:02
- Log: scan_num() sticks to UVs rather than IVs (now -2147483648 doesn't
- end up being promoted to an NV)
- Branch: perl
- ! pp.c t/op/inc.t toke.c
-____________________________________________________________________________
-[ 5532] By: jhi on 2000/03/05 01:11:37
- Log: more cpp cosmetics, logic cleanup
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 5531] By: jhi on 2000/03/05 00:51:20
- Log: Implement #5525 in metaconfig.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/cpp_stuff.U
-____________________________________________________________________________
-[ 5530] By: jhi on 2000/03/05 00:32:51
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> config_h.SH doio.c lib/Cwd.pm lib/Pod/Html.pm lib/bytes.pm
- !> lib/charnames.pm lib/filetest.pm lib/integer.pm lib/locale.pm
- !> lib/overload.pm lib/utf8.pm os2/os2ish.h pod/perldebug.pod
- !> t/lib/ipc_sysv.t t/pragma/warn/regcomp win32/config_H.bc
- !> win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 5529] By: jhi on 2000/03/05 00:31:17
- Log: Sanity check on the strtoll and strtoull.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! d_strtoll.U d_strtoull.U
-____________________________________________________________________________
-[ 5528] By: jhi on 2000/03/05 00:07:21
- Log: Reformat the fearful cpp expression to be a little bit less fearful.
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 5527] By: gsar on 2000/03/04 21:55:03
- Log: make hints available via globals in the respective pragmas to
- avoid duplicating the constants everywhere
- Branch: perl
- ! lib/bytes.pm lib/charnames.pm lib/filetest.pm lib/integer.pm
- ! lib/locale.pm lib/overload.pm lib/utf8.pm
-____________________________________________________________________________
-[ 5526] By: gsar on 2000/03/04 20:39:36
- Log: remove deadcode
- Branch: perl
- ! lib/Cwd.pm
-____________________________________________________________________________
-[ 5525] By: gsar on 2000/03/04 19:42:55
- Log: make CAT2() portable for use as a macro argument with an extra
- level of macros
- Branch: perl
- ! config_h.SH
-____________________________________________________________________________
-[ 5524] By: gsar on 2000/03/04 19:02:27
- Log: avoid looking up stale PL_statbuf (spotted by Charles Lane
- <lane@DUPHY4.Physics.Drexel.Edu>)
- Branch: perl
- ! doio.c
-____________________________________________________________________________
-[ 5523] By: gsar on 2000/03/04 18:59:03
- Log: pod tweak
- Branch: perl
- ! pod/perldebug.pod
-____________________________________________________________________________
-[ 5522] By: gsar on 2000/03/04 17:46:58
- Log: regen win32/config_H*
- Branch: perl
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 5521] By: jhi on 2000/03/04 16:35:48
- Log: From: "Matthias Urlichs" <smurf@noris.net>
- To: perl5-porters@perl.org
- Subject: BUG: Integer floatifies? +PATCH: reading BIG integers with SMALL floats
- Date: Sat, 4 Mar 2000 12:48:42 +0100
- Message-ID: <20000304124841.A8090@noris.de>
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 5520] By: jhi on 2000/03/04 15:41:12
- Log: unthink wishful thinking
- Branch: cfgperl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 5519] By: gsar on 2000/03/04 06:42:47
- Log: fix OS/2 coredump with POSIX::tmpnam() (from Ilya Zakharevich)
- Branch: perl
- ! os2/os2ish.h
-____________________________________________________________________________
-[ 5518] By: gsar on 2000/03/04 06:02:26
- Log: avoid "scalars leaked" message in test
- Branch: perl
- ! t/pragma/warn/regcomp
-____________________________________________________________________________
-[ 5517] By: jhi on 2000/03/04 06:01:16
- Log: detypo
- Branch: cfgperl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 5516] By: jhi on 2000/03/04 05:59:21
- Log: cleanup AVAILABILITY and mention binaries
- Branch: cfgperl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 5515] By: gsar on 2000/03/04 05:55:02
- Log: syntax error in change#5498
- Branch: perl
- ! t/lib/ipc_sysv.t
-____________________________________________________________________________
-[ 5514] By: jhi on 2000/03/04 05:50:56
- Log: assuming that removing the libbind will be a good idea
- Branch: cfgperl
- ! hints/sco.sh
-____________________________________________________________________________
-[ 5513] By: gsar on 2000/03/04 05:50:15
- Log: Pod::Html fixups for nicer links to functions (from Wolfgang Laun
- <wolfgang.laun@chello.at>)
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 5512] By: jhi on 2000/03/04 05:45:52
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 41 files)
-____________________________________________________________________________
-[ 5511] By: jhi on 2000/03/04 05:42:37
- Log: HP-UX 64-bitness cures
- Branch: cfgperl
- ! hints/hpux.sh perl.h
-____________________________________________________________________________
-[ 5510] By: gsar on 2000/03/04 05:40:08
- Log: better error messages when xsubpp fails to find map for a particular
- type (from Ilya Zakharevich)
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 5509] By: jhi on 2000/03/04 05:33:27
- Log: scratch #5508
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 5508] By: jhi on 2000/03/04 05:31:19
- Log: In HP-UX there is a secret handshake to get strtoll and strtoull.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 5507] By: gsar on 2000/03/04 04:27:51
- Log: more whitespace removal (from Michael G Schwern)
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm ext/Errno/Errno_pm.PL
- ! ext/File/Glob/Glob.pm ext/IO/lib/IO/Select.pm
- ! ext/IO/lib/IO/Socket.pm ext/IO/lib/IO/Socket/INET.pm
- ! ext/IPC/SysV/Msg.pm ext/IPC/SysV/Semaphore.pm lib/CGI.pm
- ! lib/CGI/Cookie.pm lib/CGI/Fast.pm lib/CGI/Push.pm
- ! lib/Carp/Heavy.pm lib/DB.pm lib/Exporter/Heavy.pm
- ! lib/File/DosGlob.pm lib/File/Find.pm lib/Getopt/Long.pm
- ! lib/Math/Trig.pm lib/Net/Ping.pm lib/Net/netent.pm
- ! lib/SelfLoader.pm lib/Tie/Array.pm lib/Tie/Handle.pm
- ! lib/Tie/Scalar.pm lib/Time/Local.pm lib/filetest.pm
- ! lib/overload.pm x2p/s2p.PL
-____________________________________________________________________________
-[ 5506] By: gsar on 2000/03/04 04:12:06
- Log: temporarily disable blank line warning from Pod::Parser until
- it can be made optional
- Branch: perl
- ! lib/Pod/Parser.pm t/pod/poderrs.xr
-____________________________________________________________________________
-[ 5505] By: gsar on 2000/03/04 04:00:44
- Log: rid blanks in pods (from Michael G Schwern)
- Branch: perl
- ! README.amiga README.dos README.os2
-____________________________________________________________________________
-[ 5504] By: gsar on 2000/03/04 03:59:07
- Log: avoid warnings from shmread() when given undefined variable
- (from Tom Christiansen)
- Branch: perl
- ! doio.c
-____________________________________________________________________________
-[ 5503] By: gsar on 2000/03/04 03:53:43
- Log: fpsetmask() needs include on freebsd (from Slaven Rezic
- <eserte@vran.herceg.de>)
- Branch: perl
- ! unixish.h
-____________________________________________________________________________
-[ 5502] By: gsar on 2000/03/04 03:51:05
- Log: avoid ambiguity in indirect object notation (breaks with overridden
- run time require)
- Branch: perl
- ! lib/CGI.pm
-____________________________________________________________________________
-[ 5501] By: gsar on 2000/03/04 01:08:54
- Log: adjust perldelta
- Branch: perl
- ! Todo-5.6 pod/perl.pod pod/perldelta.pod
-____________________________________________________________________________
-[ 5500] By: gsar on 2000/03/04 00:33:49
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> hints/irix_6.sh hints/solaris_2.sh pod/perl.pod
- !> pod/perlfunc.pod t/lib/ipc_sysv.t
-____________________________________________________________________________
-[ 5499] By: jhi on 2000/03/03 22:51:53
- Log: solaris hints tweak
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5498] By: jhi on 2000/03/03 22:35:46
- Log: The SysV IPC test must use the native integers
- (long or short), also noted this in the msgsnd/semctl
- documentation. Reported in
-
- From: schwern@athens.arena-i.com (Michael G Schwern)
- To: perl5-porters@perl.org
- Subject: [ID 20000302.006] [BUG 5.5.670 t/ipc_sysv.t] Fails 2,5,6 with 64bit on Linux
- Date: Thu, 2 Mar 2000 17:15:03 -0500 (EST)
- Message-Id: <20000302221503.EDF6E3830@athens.arena-i.com>
- Branch: cfgperl
- ! pod/perlfunc.pod t/lib/ipc_sysv.t
-____________________________________________________________________________
-[ 5497] By: jhi on 2000/03/03 21:08:53
- Log: Update AVAILABILITY.
- Branch: cfgperl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 5496] By: gsar on 2000/03/03 20:21:05
- Log: perldebug tweak (from M J T Guy)
- Branch: perl
- ! pod/perldebug.pod
-____________________________________________________________________________
-[ 5495] By: jhi on 2000/03/03 19:32:58
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 79 files)
-____________________________________________________________________________
-[ 5494] By: jhi on 2000/03/03 19:14:01
- Log: the workaround is needed in all 7.2.* compilers,
- not just on IRIX64.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5493] By: gsar on 2000/03/03 18:58:45
- Log: whitespace and readabiliti nits in the pods (from Michael G Schwern
- and Robin Barker)
- Branch: perl
- ! Changes pod/perl.pod pod/perl5004delta.pod
- ! pod/perl5005delta.pod pod/perlboot.pod pod/perldata.pod
- ! pod/perldebug.pod pod/perldelta.pod pod/perldiag.pod
- ! pod/perlembed.pod pod/perlfaq.pod pod/perlfaq2.pod
- ! pod/perlfaq4.pod pod/perlfaq5.pod pod/perlfaq6.pod
- ! pod/perlfaq7.pod pod/perlfaq8.pod pod/perlfaq9.pod
- ! pod/perlfilter.pod pod/perlguts.pod pod/perlipc.pod
- ! pod/perllexwarn.pod pod/perllocale.pod pod/perlmodinstall.pod
- ! pod/perlmodlib.pod pod/perlobj.pod pod/perlopentut.pod
- ! pod/perlpod.pod pod/perlport.pod pod/perlre.pod
- ! pod/perlref.pod pod/perlreftut.pod pod/perlsub.pod
- ! pod/perltie.pod pod/perltodo.pod pod/perltoot.pod
- ! pod/perltootc.pod pod/perltrap.pod pod/perlvar.pod
- ! pod/perlxstut.pod
-____________________________________________________________________________
-[ 5492] By: gsar on 2000/03/03 17:48:31
- Log: support for list assignment to pseudohashes (from John Tobey
- <jtobey@john-edwin-tobey.org>)
- Branch: perl
- ! av.c dump.c embed.h embed.pl global.sym objXSUB.h op.c op.h
- ! perlapi.c pp_hot.c proto.h t/op/avhv.t t/op/hashwarn.t
-____________________________________________________________________________
-[ 5491] By: gsar on 2000/03/03 16:45:49
- Log: add MakeMaker caveat to INSTALL (from Andy Dougherty)
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 5490] By: gsar on 2000/03/03 16:44:42
- Log: perldelta tweaks
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5489] By: gsar on 2000/03/03 16:26:52
- Log: /dev/console may not be writable in Syslog.pm (from Ask Bjoern Hansen
- <ask@valueclick.com>)
- Branch: perl
- ! ext/Sys/Syslog/Syslog.pm
-____________________________________________________________________________
-[ 5488] By: gsar on 2000/03/03 16:21:34
- Log: OS/2 patches for dlclose() support (from Yitzchak Scott-Thoennes
- <sthoenna@efn.org>)
- Branch: perl
- ! makedef.pl os2/diff.configure os2/dl_os2.c os2/dlfcn.h
- ! os2/os2.sym
-____________________________________________________________________________
-[ 5487] By: gsar on 2000/03/03 16:16:34
- Log: skip test on AFS (from Hans Ranke <Hans.Ranke@ei.tum.de>)
- Branch: perl
- ! t/lib/glob-basic.t
-____________________________________________________________________________
-[ 5486] By: gsar on 2000/03/03 15:42:28
- Log: integrate cfgperl and vmsperl contents into mainline
- Branch: perl
- ! pod/perl.pod
- !> (integrate 38 files)
-____________________________________________________________________________
-[ 5485] By: jhi on 2000/03/03 15:21:40
- Log: pull the sparcv9 workshop libraries in front of loclibpth
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5484] By: jhi on 2000/03/03 15:09:03
- Log: Introduce i_ieefp because FreeBSD on ix86 needs that
- for ftpsetmask(0); regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH epoc/config.sh perl.h vms/subconfigure.com
- ! vos/config.def vos/config.h vos/config_h.SH_orig
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 5483] By: jhi on 2000/03/03 05:37:58
- Log: The _cflags must be left-aligned.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5482] By: bailey on 2000/03/03 04:42:45
- Log: Once more unto resync
- Branch: vmsperl
- !> (integrate 48 files)
-____________________________________________________________________________
-[ 5481] By: bailey on 2000/03/03 04:36:46
- Log: VMS-specific perldelta update
- Branch: vmsperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5480] By: bailey on 2000/03/03 04:05:28
- Log: Set up Perl invocation method during configuration (Peter Prymmer)
- Add missing bits to various utilities and install them (ditto)
- Branch: vmsperl
- ! configure.com pod/pod2usage.PL pod/podselect.PL
- ! utils/dprofpp.PL vms/descrip_mms.template
-____________________________________________________________________________
-[ 5479] By: bailey on 2000/03/03 04:01:48
- Log: Fix test to match new behavior of vmsify() (Craig Berry)
- Branch: vmsperl
- ! vms/ext/filespec.t
-____________________________________________________________________________
-[ 5478] By: bailey on 2000/03/03 03:54:10
- Log: Try to intuit whether typeless file invoked in subprocess
- is an executable image or DCL procedure.
- Branch: vmsperl
- ! vms/perlvms.pod vms/vms.c
-____________________________________________________________________________
-[ 5477] By: bailey on 2000/03/03 03:37:18
- Log: Remove leftover bits of VAXC support (Dan Sugalski)
- Branch: vmsperl
- ! vms/gen_shrfls.pl
-____________________________________________________________________________
-[ 5476] By: bailey on 2000/03/03 03:34:51
- Log: Add missing declaration (Dan Sugalski)
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5475] By: gsar on 2000/03/03 03:27:52
- Log: warn about /(?p{})/ (from Simon Cozens)
- Branch: perl
- ! regcomp.c toke.c
-____________________________________________________________________________
-[ 5474] By: bailey on 2000/03/03 03:27:05
- Log: Ad hoc patch for duping stdout into stderr
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5473] By: bailey on 2000/03/03 03:23:29
- Log: Bypass PERL_INC_VERSION_LIST until we support in in Configure.Com
- Branch: vmsperl
- ! vms/subconfigure.com vms/vmsish.h
-____________________________________________________________________________
-[ 5472] By: gsar on 2000/03/03 02:58:49
- Log: File::Spec bugs (spotted by Hack Kampbjorn <hack@hackdata.com>)
- Branch: perl
- ! lib/File/Spec/Mac.pm lib/File/Spec/Unix.pm
- ! lib/File/Spec/VMS.pm lib/File/Spec/Win32.pm
-____________________________________________________________________________
-[ 5471] By: jhi on 2000/03/03 02:38:23
- Log: more todo
- Branch: cfgperl
- ! Todo-5.6
-____________________________________________________________________________
-[ 5470] By: gsar on 2000/03/03 02:36:02
- Log: skip test if db doesn't have null key support
- Branch: perl
- ! t/lib/anydbm.t
-____________________________________________________________________________
-[ 5469] By: jhi on 2000/03/03 02:26:53
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> INSTALL lib/AutoSplit.pm lib/ExtUtils/xsubpp lib/SelfLoader.pm
- !> lib/Test/Harness.pm lib/constant.pm pod/perl.pod
- !> pod/perldelta.pod pod/perlpod.pod pod/perlre.pod
- !> pod/perltoc.pod regcomp.c t/op/misc.t t/op/pat.t toke.c
- !> utils/h2xs.PL win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 5468] By: jhi on 2000/03/03 02:24:05
- Log: irix hints tweak
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5467] By: gsar on 2000/03/03 02:19:50
- Log: /(?p{})/ changed to /(??{})/, per Larry's suggestion (from
- Simon Cozens <simon@othersideofthe.earth.li>)
- Branch: perl
- ! lib/AutoSplit.pm lib/ExtUtils/xsubpp lib/SelfLoader.pm
- ! pod/perlre.pod pod/perltoc.pod regcomp.c t/op/misc.t
- ! t/op/pat.t toke.c
-____________________________________________________________________________
-[ 5466] By: jhi on 2000/03/03 02:12:41
- Log: in words order bad
- Branch: cfgperl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 5465] By: jhi on 2000/03/03 02:09:45
- Log: /[[:alpha]/ now dies on unmatched [] instead of
- "an unknown character class" (spotted by Tom Christiansen)
- Branch: cfgperl
- ! regcomp.c t/pragma/warn/regcomp
-____________________________________________________________________________
-[ 5464] By: gsar on 2000/03/03 02:04:48
- Log: perldelta notes about IO::Socket changes (from Graham Barr)
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5463] By: gsar on 2000/03/03 02:02:50
- Log: relax restrictions on constant names a bit (from M J T Guy)
- Branch: perl
- ! lib/constant.pm
-____________________________________________________________________________
-[ 5462] By: gsar on 2000/03/03 01:59:49
- Log: support for generation of accessor functions (from Hugo van der
- Sanden)
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 5461] By: jhi on 2000/03/03 01:51:53
- Log: cosmetics
- Branch: cfgperl
- ! t/op/pack.t
-____________________________________________________________________________
-[ 5460] By: jhi on 2000/03/03 01:50:07
- Log: detypo
- Branch: cfgperl
- ! t/op/pack.t
-____________________________________________________________________________
-[ 5459] By: gsar on 2000/03/03 01:46:35
- Log: pod tweaks
- Branch: perl
- ! pod/perl.pod pod/perlpod.pod
-____________________________________________________________________________
-[ 5458] By: jhi on 2000/03/03 01:25:21
- Log: solaris hints tweak
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5457] By: jhi on 2000/03/02 22:56:49
- Log: detypo
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5456] By: gsar on 2000/03/02 21:15:11
- Log: Test::Harness uses $ENV{HARNESS_PERL_SWITCHES} when running perl;
- add test targets for -C switch on windows
- Branch: perl
- ! lib/Test/Harness.pm win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 5455] By: gsar on 2000/03/02 21:06:49
- Log: add note about failed tests on memory starved systems (from
- Andy Dougherty)
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 5454] By: jhi on 2000/03/02 21:03:35
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes lib/Pod/Find.pm lib/Pod/Html.pm lib/Pod/Man.pm
- !> lib/Term/Cap.pm lib/Test/Harness.pm lib/blib.pm
- !> pod/perldata.pod pod/perldelta.pod pod/perlop.pod
-____________________________________________________________________________
-[ 5453] By: jhi on 2000/03/02 20:58:43
- Log: Further long double patches from Spider Boardman.
- Branch: cfgperl
- ! t/comp/use.t t/lib/bigfltpm.t t/op/pack.t t/op/universal.t
-____________________________________________________________________________
-[ 5452] By: gsar on 2000/03/02 20:52:08
- Log: move doc about v-strings from perlop to perldata (suggested by
- David Dyck <dcd@tc.fluke.com>)
- Branch: perl
- ! pod/perldata.pod pod/perldelta.pod pod/perlop.pod
-____________________________________________________________________________
-[ 5451] By: gsar on 2000/03/02 20:30:29
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure hints/irix_6.sh pp.c
-____________________________________________________________________________
-[ 5450] By: gsar on 2000/03/02 20:08:10
- Log: still other multiline match cleanups (from Greg Bacon)
- Branch: perl
- ! Changes lib/Pod/Find.pm lib/Pod/Html.pm lib/Pod/Man.pm
- ! lib/Term/Cap.pm lib/Test/Harness.pm lib/blib.pm
-____________________________________________________________________________
-[ 5449] By: jhi on 2000/03/02 20:01:58
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> configure.com ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c
- !> lib/ExtUtils/MM_VMS.pm lib/Test/Harness.pm t/lib/glob-basic.t
- !> t/pragma/warn/8signal t/pragma/warn/pp_ctl
- !> vms/descrip_mms.template vms/gen_shrfls.pl
- !> vms/subconfigure.com vms/vms.c win32/Makefile
- !> win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5448] By: jhi on 2000/03/02 20:00:37
- Log: workaround for Tru64 compiler bug (cleaner fix will have
- to wait until 5.6.1), from Spider Boardman
- Branch: cfgperl
- ! pp.c
-____________________________________________________________________________
-[ 5447] By: jhi on 2000/03/02 19:52:34
- Log: Workaround for an optimizer bug.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5446] By: jhi on 2000/03/02 19:44:35
- Log: installation directory fix from Andy Dougherty
- (installstyle was being clobbered, spotted by Spider Boardman)
- Branch: cfgperl
- ! Configure
- Branch: metaconfig
- ! U/installdirs/installstyle.U
-____________________________________________________________________________
-[ 5445] By: gsar on 2000/03/02 19:40:44
- Log: patch to fix mingw32 build under USE_IMP_SYS (from Benjamin Stuhl);
- some parts not applied
- Branch: perl
- ! win32/Makefile win32/makefile.mk win32/perllib.c win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 5444] By: gsar on 2000/03/02 19:26:08
- Log: avoid buffering issue in warn/8signal
- Branch: perl
- ! t/pragma/warn/8signal
-____________________________________________________________________________
-[ 5443] By: gsar on 2000/03/02 18:13:28
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure config_h.SH hints/aix.sh hints/hpux.sh
- !> hints/solaris_2.sh makedepend.SH sv.c t/lib/syslfs.t
- !> t/op/lfs.t t/op/pack.t
-____________________________________________________________________________
-[ 5442] By: gsar on 2000/03/02 18:02:40
- Log: integrate vmsperl changes into mainline (denied their changes to
- Glob.pm, t/pragma/warn/{8signal,pp_ctl})
- Branch: perl
- !> configure.com ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c
- !> lib/ExtUtils/MM_VMS.pm lib/Test/Harness.pm t/lib/glob-basic.t
- !> t/pragma/warn/8signal t/pragma/warn/pp_ctl
- !> vms/descrip_mms.template vms/gen_shrfls.pl
- !> vms/subconfigure.com vms/vms.c
-____________________________________________________________________________
-[ 5441] By: jhi on 2000/03/02 17:56:20
- Log: nit from Spider Boardman
- Branch: cfgperl
- ! makedepend.SH
-____________________________________________________________________________
-[ 5440] By: jhi on 2000/03/02 17:48:15
- Log: Confusion over uselargefiles.cbu and uselfs.cbu (the first one
- is the correct one), spotted by Robin Barker.
- Branch: cfgperl
- ! Configure config_h.SH hints/aix.sh hints/hpux.sh
- Branch: metaconfig/U/perl
- ! uselfs.U
-____________________________________________________________________________
-[ 5439] By: jhi on 2000/03/02 15:32:04
- Log: Remove the pack.t kludge introduced to fudge the test
- to pass under long doubles: leave the similar kludge
- to posix.t because POSIX::strtod() is still double,
- not long double.
- Branch: cfgperl
- ! t/op/pack.t
-____________________________________________________________________________
-[ 5438] By: jhi on 2000/03/02 04:58:48
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> lib/ExtUtils/Install.pm lib/ExtUtils/Installed.pm
- !> lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm lib/FindBin.pm
- !> lib/Pod/Html.pm op.c
-____________________________________________________________________________
-[ 5437] By: jhi on 2000/03/02 04:51:46
- Log: A patch on #5407.
- Branch: cfgperl
- ! sv.c
-____________________________________________________________________________
-[ 5436] By: gsar on 2000/03/02 04:45:37
- Log: avoid useless comparison
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 5435] By: bailey on 2000/03/02 04:43:11
- Log: YA sync with mainline
- Branch: vmsperl
- +> lib/open.pm pod/perlboot.pod pod/perlnumber.pod
- +> t/lib/env-array.t
- !> (integrate 150 files)
-____________________________________________________________________________
-[ 5434] By: gsar on 2000/03/02 04:28:48
- Log: make the "back to top" links optional
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 5433] By: bailey on 2000/03/02 04:26:58
- Log: Protect manipulation of open pipe list from concurrent ASTs (Charles Lane)
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5432] By: bailey on 2000/03/02 04:20:51
- Log: Update dependencies and remove obsolete VAXC support
- Branch: vmsperl
- ! vms/descrip_mms.template
-____________________________________________________________________________
-[ 5431] By: bailey on 2000/03/02 04:19:42
- Log: Rmeove obsolete VAXC support
- Branch: vmsperl
- ! vms/gen_shrfls.pl
-____________________________________________________________________________
-[ 5430] By: bailey on 2000/03/02 04:18:57
- Log: Minor updates to subconfigure.com:
- - remove old VAXC support
- - avoid echoing commands to tempfiles
- - fix typos
- - define 64bit symbols (as "undef") when not using 64 bit support
- Branch: vmsperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 5429] By: bailey on 2000/03/02 04:16:11
- Log: Minor changes to Configure.Com:
- - permit operation in batch mode (splits output)
- - remove old VAXC support
- - default to enabling secure internal lnm translation
- Branch: vmsperl
- ! configure.com
-____________________________________________________________________________
-[ 5428] By: bailey on 2000/03/02 04:06:53
- Log: Optional warning for truncated logical name equivalence string (Dan Sugalski)
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5427] By: bailey on 2000/03/02 04:05:47
- Log: FIx no-op in vms.c
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5426] By: bailey on 2000/03/02 04:04:52
- Log: MIscellaneous tweaks to test and driver (Charles Lane)
- Branch: vmsperl
- ! t/pragma/warn/8signal t/pragma/warn/pp_sys t/pragma/warnings.t
- ! vms/test.com
-____________________________________________________________________________
-[ 5425] By: bailey on 2000/03/02 04:02:44
- Log: Take advantage of new subprocess invocation (Charles Lane)
- Branch: vmsperl
- ! t/op/runlevel.t t/pragma/strict.t t/pragma/subs.t
- ! t/pragma/warnings.t
-____________________________________________________________________________
-[ 5424] By: bailey on 2000/03/02 04:00:20
- Log: Increment counter for skipped tests (Charles Lane)
- Branch: vmsperl
- ! t/io/open.t
-____________________________________________________________________________
-[ 5423] By: bailey on 2000/03/02 03:59:14
- Log: Remove redundant elements of @INC to cope with VMS' 255-char limit
- on PERL5LIB logical (Dan Sugalski)
- Branch: vmsperl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 5422] By: bailey on 2000/03/02 03:57:40
- Log: Use temp to construct dirspec in File::Find (Charles Lane)
- Branch: vmsperl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 5421] By: bailey on 2000/03/02 03:56:13
- Log: Satisfy various Pod::* needs for Unix syntax (Charles Lane)
- (Should move to File::Spec in long term)
- Branch: vmsperl
- ! lib/Pod/Checker.pm lib/Pod/Parser.pm t/pod/testp2pt.pl
-____________________________________________________________________________
-[ 5420] By: bailey on 2000/03/02 03:52:45
- Log: Escape \n in commands written to Descrip.MMS (Charles Lane)
- Branch: vmsperl
- ! lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 5419] By: bailey on 2000/03/02 03:50:53
- Log: Make File::Glob more VMS-friendly (Charles Lane)
- Branch: vmsperl
- ! ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c
- ! t/lib/glob-basic.t
-____________________________________________________________________________
-[ 5418] By: bailey on 2000/03/02 03:47:21
- Log: Miscellaneous fixes to build procedures (Peter Prymmer)
- Branch: vmsperl
- ! configure.com vms/subconfigure.com
-____________________________________________________________________________
-[ 5417] By: bailey on 2000/03/02 03:42:49
- Log: Temrinate statements in pp_ctl warning test (Charles Lane)
- Branch: vmsperl
- ! t/pragma/warn/pp_ctl
-____________________________________________________________________________
-[ 5416] By: bailey on 2000/03/02 03:39:46
- Log: Warn but continue installing when file missing (Dan Sugalski)
- Branch: vmsperl
- ! installperl
-____________________________________________________________________________
-[ 5415] By: jhi on 2000/03/01 23:31:23
- Log: Make file sparseness detection more portable (Scott Henry)
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 5414] By: jhi on 2000/03/01 22:53:48
- Log: detypo #5411 continues: Sun grep doesn't have -e.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5413] By: jhi on 2000/03/01 22:49:44
- Log: detypo #5411
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5412] By: gsar on 2000/03/01 20:04:42
- Log: typo in change#5408
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 5411] By: jhi on 2000/03/01 18:48:52
- Log: Better detection of the solaris workshop compiler.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5410] By: jhi on 2000/03/01 18:18:04
- Log: From: Robin Barker <rmb1@cise.npl.co.uk>
- To: perl5-porters@perl.org
- Subject: solaris 64-bit and gcc
- Date: Wed, 1 Mar 2000 17:59:36 GMT
- Message-Id: <200003011759.RAA03938@tempest.npl.co.uk>
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5409] By: jhi on 2000/03/01 18:16:43
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/lib/env-array.t
- !> MANIFEST README.cygwin ext/DynaLoader/DynaLoader_pm.PL
- !> ext/DynaLoader/dlutils.c lib/AutoLoader.pm lib/AutoSplit.pm
- !> lib/CGI/Carp.pm lib/CPAN.pm lib/Cwd.pm lib/Env.pm
- !> lib/File/Find.pm lib/File/Spec/Mac.pm lib/File/Spec/VMS.pm
- !> pod/perldebug.pod pod/perldelta.pod t/lib/env.t
- !> t/lib/filefind.t t/lib/glob-basic.t
-____________________________________________________________________________
-[ 5408] By: gsar on 2000/03/01 18:15:49
- Log: still more multiline match cleanups (from Greg Bacon)
- Branch: perl
- ! lib/ExtUtils/Install.pm lib/ExtUtils/Installed.pm
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm lib/FindBin.pm
-____________________________________________________________________________
-[ 5407] By: jhi on 2000/03/01 18:11:09
- Log: A further patch from Spider Boardman for long doubleness.
- Branch: cfgperl
- ! sv.c
-____________________________________________________________________________
-[ 5406] By: gsar on 2000/03/01 17:32:09
- Log: yet more multiline match cleanups (from Greg Bacon)
- Branch: perl
- ! lib/CPAN.pm lib/Cwd.pm
-____________________________________________________________________________
-[ 5405] By: gsar on 2000/03/01 17:24:53
- Log: add support for Env arrays (from Gregor N. Purdy
- <gregor@focusresearch.com>)
- Branch: perl
- + t/lib/env-array.t
- ! MANIFEST lib/Env.pm pod/perldelta.pod t/lib/env.t
-____________________________________________________________________________
-[ 5404] By: gsar on 2000/03/01 17:00:23
- Log: cygwin update (from Eric Fifer)
- Branch: perl
- ! README.cygwin t/lib/glob-basic.t
-____________________________________________________________________________
-[ 5403] By: gsar on 2000/03/01 16:55:47
- Log: more multiline match cleanups (from Greg Bacon)
- Branch: perl
- ! lib/AutoLoader.pm lib/AutoSplit.pm lib/CGI/Carp.pm
- ! lib/File/Spec/Mac.pm lib/File/Spec/VMS.pm
-____________________________________________________________________________
-[ 5402] By: gsar on 2000/03/01 16:38:48
- Log: avoid DProf entering dl_unload_file() (from Alan Burlison)
- Branch: perl
- ! ext/DynaLoader/DynaLoader_pm.PL ext/DynaLoader/dlutils.c
-____________________________________________________________________________
-[ 5401] By: gsar on 2000/03/01 16:35:28
- Log: fix minor compatibility issues with finddepth() (from Helmut Jarausch)
- Branch: perl
- ! lib/File/Find.pm t/lib/filefind.t
-____________________________________________________________________________
-[ 5400] By: gsar on 2000/03/01 16:32:24
- Log: mention "r" debugger command (from Ilya Zakharevich)
- Branch: perl
- ! pod/perldebug.pod
-____________________________________________________________________________
-[ 5399] By: jhi on 2000/03/01 14:58:33
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes configure.com ext/File/Glob/Glob.pm
- !> ext/File/Glob/bsd_glob.c installperl lib/ExtUtils/MM_VMS.pm
- !> lib/File/Find.pm lib/Pod/Checker.pm lib/Pod/Parser.pm
- !> t/io/open.t t/io/openpid.t t/lib/glob-basic.t t/op/goto.t
- !> t/op/runlevel.t t/op/split.t t/pod/testp2pt.pl
- !> t/pragma/strict.t t/pragma/subs.t t/pragma/warn/8signal
- !> t/pragma/warn/pp_sys t/pragma/warnings.t
- !> vms/descrip_mms.template vms/subconfigure.com vms/test.com
- !> vms/vms.c
-____________________________________________________________________________
-[ 5398] By: gsar on 2000/03/01 07:03:13
- Log: fix testsuite issues in change#5397
- Branch: perl
- ! Changes t/pragma/warn/8signal t/pragma/warn/pp_sys
-
-----------------
-Version v5.5.670
-----------------
-
-____________________________________________________________________________
-[ 5397] By: gsar on 2000/03/01 06:44:42
- Log: consolidated VMS patches (from Craig A. Berry
- <craig.berry@metamorgs.com>); Glob.pm patch modified to use
- $DEFAULT_FLAGS, and iff no flags were supplied
- Branch: perl
- ! configure.com ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c
- ! installperl lib/ExtUtils/MM_VMS.pm lib/File/Find.pm
- ! lib/Pod/Checker.pm lib/Pod/Parser.pm t/io/open.t
- ! t/io/openpid.t t/lib/glob-basic.t t/op/goto.t t/op/runlevel.t
- ! t/op/split.t t/pod/testp2pt.pl t/pragma/strict.t
- ! t/pragma/subs.t t/pragma/warn/8signal t/pragma/warn/pp_sys
- ! t/pragma/warnings.t vms/descrip_mms.template
- ! vms/subconfigure.com vms/test.com vms/vms.c
-____________________________________________________________________________
-[ 5396] By: gsar on 2000/03/01 06:28:22
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> ext/Fcntl/Fcntl.pm hints/solaris_2.sh pp.c sv.c
-____________________________________________________________________________
-[ 5395] By: jhi on 2000/03/01 06:12:10
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/open.pm
- !> MANIFEST Todo-5.6 mg.c
-____________________________________________________________________________
-[ 5394] By: gsar on 2000/03/01 06:07:00
- Log: fix segfault on C<local ${^WARNING_BITS}>
- Branch: perl
- ! mg.c
-____________________________________________________________________________
-[ 5393] By: jhi on 2000/03/01 06:02:12
- Log: Fcntl de-cut-and-pasto.
- From: Doug MacEachern <dougm@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH v5.5.660] Fcntl.pm
- Date: Tue, 29 Feb 2000 21:24:00 -0800 (PST)
- Message-ID: <Pine.LNX.4.10.10002292120200.382-100000@mojo.itixs.com>
- Branch: cfgperl
- ! ext/Fcntl/Fcntl.pm
-____________________________________________________________________________
-[ 5392] By: gsar on 2000/03/01 05:55:20
- Log: update Todo-5.6, add stub open.pm
- Branch: perl
- + lib/open.pm
- ! MANIFEST Todo-5.6
-____________________________________________________________________________
-[ 5391] By: jhi on 2000/03/01 05:42:25
- Log: The 64-bitallness does require the /usr/lib/sparcv9 in loclibpth.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5390] By: jhi on 2000/03/01 05:35:53
- Log: Couple of math functions need to be Perl_ so that
- they are correctly long double, especially the frexp()
- in sv_vcatpvfn() (spotted by Spider Boardman).
- Branch: cfgperl
- ! pp.c sv.c
-____________________________________________________________________________
-[ 5389] By: jhi on 2000/03/01 05:33:54
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> pod/perlnumber.pod
- !> Changes MANIFEST README.win32 ext/DynaLoader/DynaLoader_pm.PL
- !> ext/DynaLoader/Makefile.PL ext/DynaLoader/dl_dlopen.xs
- !> ext/DynaLoader/dlutils.c lib/File/Find.pm lib/Test/Harness.pm
- !> pod/Makefile pod/buildtoc pod/perl.pod pod/perldelta.pod
- !> pod/perlguts.pod pod/perlhack.pod pod/perlhist.pod
- !> pod/perlport.pod pod/perltoc.pod pod/roffitall vms/vms.c
- !> win32/perllib.c win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5388] By: gsar on 2000/03/01 03:38:03
- Log: Windows miscellany
- Branch: perl
- ! pod/perlguts.pod win32/perllib.c win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5387] By: gsar on 2000/03/01 03:13:37
- Log: mention ftp/rsync access to repository in perlhack
- Branch: perl
- ! Changes pod/perlhack.pod pod/perlhist.pod
-____________________________________________________________________________
-[ 5386] By: gsar on 2000/03/01 03:04:54
- Log: support kill(0,$pid) on Windows to test if process exists
- Branch: perl
- ! README.win32 pod/perldelta.pod pod/perlport.pod win32/win32.c
-____________________________________________________________________________
-[ 5385] By: gsar on 2000/03/01 02:10:01
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH epoc/config.sh hints/dec_osf.sh hints/solaris_2.sh
- !> perl.h vms/subconfigure.com vos/config.def win32/config.bc
- !> win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 5384] By: gsar on 2000/03/01 01:47:55
- Log: oops, change#5382 didn't really fix the typo
- Branch: perl
- ! ext/DynaLoader/dl_dlopen.xs
-____________________________________________________________________________
-[ 5383] By: gsar on 2000/03/01 01:38:25
- Log: avoid warning on type-mismatch
- Branch: perl
- ! ext/DynaLoader/dlutils.c
-____________________________________________________________________________
-[ 5382] By: gsar on 2000/03/01 01:33:42
- Log: fix bug in change#5381
- Branch: perl
- ! ext/DynaLoader/dl_dlopen.xs
-____________________________________________________________________________
-[ 5381] By: gsar on 2000/03/01 00:46:44
- Log: unload extension shared objects when exiting, implemented
- only for dl_dlopen.xs (from Alan Burlison)
- Branch: perl
- ! ext/DynaLoader/DynaLoader_pm.PL ext/DynaLoader/Makefile.PL
- ! ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dlutils.c
-____________________________________________________________________________
-[ 5380] By: gsar on 2000/03/01 00:34:10
- Log: add perlnumber.pod (from Ilya Zakharevich); substantially edited
- prose
- Branch: perl
- + pod/perlnumber.pod
- ! MANIFEST pod/Makefile pod/buildtoc pod/perl.pod
- ! pod/perltoc.pod pod/roffitall
-____________________________________________________________________________
-[ 5379] By: jhi on 2000/02/29 23:37:01
- Log: Be understanding.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! use64bits.U uselfs.U
-____________________________________________________________________________
-[ 5378] By: gsar on 2000/02/29 23:35:50
- Log: VMS fixups (from Dan Sugalski); cosmetic tweaks
- Branch: perl
- ! lib/Test/Harness.pm vms/vms.c
-____________________________________________________________________________
-[ 5377] By: jhi on 2000/02/29 23:12:29
- Log: Tru64 hints fix from Spider Boardman; Tru64 hint for
- d_Gconvert on long doubles to use sprintf %Lg.
- Branch: cfgperl
- ! hints/dec_osf.sh
-____________________________________________________________________________
-[ 5376] By: jhi on 2000/02/29 23:02:45
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> gv.c lib/Pod/Html.pm malloc.c pod/perlapi.pod pod/perlcall.pod
- !> pod/perldiag.pod pod/perlembed.pod pod/perlfunc.pod
- !> pod/perlguts.pod pod/perlop.pod
-____________________________________________________________________________
-[ 5375] By: gsar on 2000/02/29 23:02:34
- Log: fix File::Find::finddepth() bugs (from Helmut Jarausch)
- Branch: perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 5374] By: jhi on 2000/02/29 23:01:35
- Log: Add libsunmath (long double math library for Solaris,
- SUNWspro cc only) awareness; fix various Solaris nits.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH epoc/config.sh hints/solaris_2.sh perl.h
- ! vms/subconfigure.com vos/config.def win32/config.bc
- ! win32/config.gc win32/config.vc
- Branch: metaconfig
- ! U/modified/libs.U
- Branch: metaconfig/U/perl
- + i_sunmath.U
-____________________________________________________________________________
-[ 5373] By: gsar on 2000/02/29 22:56:10
- Log: fix Pod::Html to recognize C<< > >> etc., and convert some pods
- to the more readable form (from Robin Barker)
- Branch: perl
- ! lib/Pod/Html.pm pod/perlfunc.pod pod/perlop.pod
-____________________________________________________________________________
-[ 5372] By: gsar on 2000/02/29 22:52:27
- Log: better fix for malloc bug in change#5346 (from Dominic Dunlop)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 5371] By: gsar on 2000/02/29 22:29:36
- Log: fix pods to reflect newer canonical names for call_sv() etc.
- Branch: perl
- ! gv.c pod/perlapi.pod pod/perlcall.pod pod/perldiag.pod
- ! pod/perlembed.pod pod/perlguts.pod
-____________________________________________________________________________
-[ 5370] By: jhi on 2000/02/29 22:08:26
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> perl.c perl.h win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5369] By: gsar on 2000/02/29 21:37:10
- Log: remove bogus code that caused test failures on HP-UX
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 5368] By: gsar on 2000/02/29 20:45:01
- Log: change#5364 had a few problems
- Branch: perl
- ! perl.c win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5367] By: gsar on 2000/02/29 18:19:04
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure config_h.SH epoc/config.sh hints/hpux.sh
- !> hints/solaris_2.sh regcomp.c vms/subconfigure.com
- !> vos/config.def win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 5366] By: jhi on 2000/02/29 18:15:09
- Log: Some compilers have problems with quad switch() controls.
- Branch: cfgperl
- ! regcomp.c
-____________________________________________________________________________
-[ 5365] By: jhi on 2000/02/29 18:14:30
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> perl.c win32/Makefile win32/makefile.mk win32/win32.c
- !> win32/win32.h
-____________________________________________________________________________
-[ 5364] By: gsar on 2000/02/29 18:11:34
- Log: utf8-ize @ARGV when -C switch is used on Windows
- Branch: perl
- ! perl.c win32/Makefile win32/makefile.mk win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 5363] By: jhi on 2000/02/29 17:47:48
- Log: HP-UX lddlflags were broken.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! dlsrc.U
-____________________________________________________________________________
-[ 5362] By: jhi on 2000/02/29 17:32:27
- Log: Make the failsafe question about socket address structure
- sizes hopefully a bit less confusing.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/protos/socksizetype.U
-____________________________________________________________________________
-[ 5361] By: jhi on 2000/02/29 17:17:10
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> malloc.c
-____________________________________________________________________________
-[ 5360] By: gsar on 2000/02/29 17:16:09
- Log: malloc "fix" in change#5346 coredumps on HP-UX, revert
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 5359] By: jhi on 2000/02/29 17:06:12
- Log: Make the warning about preferring HP's ar more visible.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5358] By: jhi on 2000/02/29 17:04:36
- Log: The sprintf option was blithely printing long doubles as
- doubles (spotted by Spider Boardman); dqgcvt() wasn't ever
- being used; made the test more thorough.
- Branch: cfgperl
- ! Configure config_h.SH epoc/config.sh vms/subconfigure.com
- ! vos/config.def win32/config.bc win32/config.gc win32/config.vc
- Branch: metaconfig
- ! U/compline/d_gconvert.U
-____________________________________________________________________________
-[ 5357] By: jhi on 2000/02/29 16:58:08
- Log: Make the warning about abandoning long doubles more visible.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! uselongdbl.U
-____________________________________________________________________________
-[ 5356] By: jhi on 2000/02/29 16:51:33
- Log: HP-UX gcc fix; detypo in use64bits.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! dlsrc.U use64bits.U
-____________________________________________________________________________
-[ 5355] By: jhi on 2000/02/29 16:31:17
- Log: Solaris 64-bitness hints saga continues.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5354] By: jhi on 2000/02/29 16:04:42
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> ext/Thread/Thread.xs perl.c perl.h
-____________________________________________________________________________
-[ 5353] By: jhi on 2000/02/29 15:54:10
- Log: Solaris hints tweak for 64-bitallness.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5352] By: jhi on 2000/02/29 15:35:13
- Log: Too many 64-bitness option combinations.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 5351] By: gsar on 2000/02/29 15:31:56
- Log: more adjustments needed for change#5342 under use5005threads
- Branch: perl
- ! ext/Thread/Thread.xs perl.c perl.h
-____________________________________________________________________________
-[ 5350] By: jhi on 2000/02/29 15:24:59
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> pod/perlboot.pod
- !> (integrate 40 files)
-____________________________________________________________________________
-[ 5349] By: gsar on 2000/02/29 08:13:56
- Log: more m//s and $ vs \z fixups (from Greg Bacon)
- Branch: perl
- ! lib/File/CheckTree.pm lib/File/Copy.pm lib/File/DosGlob.pm
- ! lib/File/Path.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm
- ! lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
- ! lib/File/Spec/Win32.pm
-____________________________________________________________________________
-[ 5348] By: gsar on 2000/02/29 08:00:48
- Log: increase sleep to compensate for slow cpu (from Peter Haworth
- <pmh@edison.ioppublishing.com>)
- Branch: perl
- ! t/io/pipe.t
-____________________________________________________________________________
-[ 5347] By: gsar on 2000/02/29 07:52:35
- Log: add OO tutorial for beginners (from Randal L. Schwartz
- <merlyn@stonehenge.com>)
- Branch: perl
- + pod/perlboot.pod
- ! MANIFEST pod/Makefile pod/buildtoc pod/perl.pod
- ! pod/perldelta.pod pod/perltoc.pod
-____________________________________________________________________________
-[ 5346] By: gsar on 2000/02/29 07:24:52
- Log: malloc bug fix and machten hints (from Dominic Dunlop
- <domo@computer.org>)
- Branch: perl
- ! hints/machten.sh malloc.c
-____________________________________________________________________________
-[ 5345] By: gsar on 2000/02/29 06:32:56
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure MANIFEST config_h.SH ext/DynaLoader/dl_aix.xs
- !> ext/DynaLoader/hints/aix.pl ext/File/Glob/Makefile.PL
- !> hints/aix.sh hints/hpux.sh hints/irix_6.sh hints/solaris_2.sh
- !> mg.c perl.h pod/perldelta.pod pod/perlop.pod pp.c sv.c
- !> t/lib/ipc_sysv.t t/op/64bit.t t/op/misc.t t/op/numconvert.t
- !> win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 5344] By: gsar on 2000/02/29 06:25:33
- Log: export list tweak
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 5343] By: gsar on 2000/02/29 06:01:22
- Log: various shenanigans in change#5342
- Branch: perl
- ! makedef.pl thread.h util.c win32/Makefile win32/makefile.mk
- ! win32/win32.h win32/win32thread.h
-____________________________________________________________________________
-[ 5342] By: gsar on 2000/02/29 04:53:00
- Log: support fetching current interpreter from TLS under useithreads
- Branch: perl
- ! embed.h embed.pl embedvar.h global.sym intrpvar.h makedef.pl
- ! objXSUB.h perl.c perl.h perlapi.h perlvars.h pod/perldelta.pod
- ! proto.h sv.c thread.h util.c win32/perlhost.h win32/perllib.c
- ! win32/win32.h win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 5341] By: jhi on 2000/02/29 03:26:11
- Log: Don't know how to do large files using gcc in HP-UX.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5340] By: jhi on 2000/02/29 03:07:16
- Log: Added few more libs to scan.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Myinit.U U/modified/libs.U
-____________________________________________________________________________
-[ 5339] By: jhi on 2000/02/29 01:37:43
- Log: Bigger warning on the changed behaviour of the unary ~.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5338] By: jhi on 2000/02/29 01:17:07
- Log: IRIX 64-bitness fixes.
- Branch: cfgperl
- ! Configure config_h.SH hints/irix_6.sh
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 5337] By: jhi on 2000/02/29 00:59:08
- Log: Userfriendliness.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 5336] By: jhi on 2000/02/29 00:53:51
- Log: Undo the sv_2pv() change of #5329, caused numconvert.t
- problems in IRIX 32-n32.
- Branch: cfgperl
- ! sv.c
-____________________________________________________________________________
-[ 5335] By: jhi on 2000/02/29 00:22:37
- Log: Fixes for building on HP-UX using gcc from Daniel S. Lewart.
- Branch: cfgperl
- ! Configure config_h.SH hints/hpux.sh
- Branch: metaconfig/U/perl
- ! dlsrc.U
-____________________________________________________________________________
-[ 5334] By: jhi on 2000/02/28 23:59:59
- Log: Do not cast pointers into I32s.
- Branch: cfgperl
- ! mg.c
-____________________________________________________________________________
-[ 5333] By: jhi on 2000/02/28 23:39:26
- Log: More AIX fixes from Steven Hirsch.
- Branch: cfgperl
- ! Configure config_h.SH ext/DynaLoader/dl_aix.xs
- ! ext/DynaLoader/hints/aix.pl hints/aix.sh
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 5332] By: jhi on 2000/02/28 22:45:59
- Log: Detypo.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5331] By: jhi on 2000/02/28 22:23:36
- Log: Regularize the call-back units (and fix a bug in #5330).
- Branch: cfgperl
- ! hints/aix.sh hints/hpux.sh hints/irix_6.sh hints/solaris_2.sh
-____________________________________________________________________________
-[ 5330] By: jhi on 2000/02/28 21:50:28
- Log: Don't be overeager to turn on 64-bitallness.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5329] By: jhi on 2000/02/28 20:32:53
- Log: Lift the 32-bit straightjacket from bit ops;
- prefer IV/UV over NV in sv_2pv().
- Branch: cfgperl
- ! pod/perldelta.pod pod/perlop.pod pp.c sv.c t/op/64bit.t
- ! t/op/misc.t t/op/numconvert.t
-____________________________________________________________________________
-[ 5328] By: jhi on 2000/02/28 20:11:59
- Log: Do not add -Ae for gcc.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5327] By: jhi on 2000/02/28 17:35:39
- Log: Use the vendor file(1).
- Branch: cfgperl
- ! hints/hpux.sh hints/irix_6.sh hints/solaris_2.sh
-____________________________________________________________________________
-[ 5326] By: jhi on 2000/02/28 17:31:19
- Log: Put back madvise lost because of a typo.
- Branch: cfgperl
- ! Configure config_h.SH perl.h win32/config.bc win32/config.gc
- ! win32/config.vc
-____________________________________________________________________________
-[ 5325] By: jhi on 2000/02/28 16:44:32
- Log: Tweak HP-UX libraries.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5324] By: jhi on 2000/02/28 16:37:43
- Log: Don't be overeager to turn on largefileness.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5323] By: jhi on 2000/02/28 16:23:15
- Log: AIX 64-bit patches from Steven Hirsch <hirschs@btv.ibm.com>
- The patch to File/Glob/Makefile.PL is inconvenient but at the
- moment necessary: adding an ext/FIle/Glob/hints/aix.pl to turn
- off the optimization ($self->{OPTIMIZE} = '') doesn't work,
- the file is processed by MakeMaker but OPTIMIZE ends up as -O
- in the resulting Makefile. A MakeMaker bug?
- Branch: cfgperl
- ! MANIFEST ext/DynaLoader/dl_aix.xs ext/File/Glob/Makefile.PL
- ! hints/aix.sh t/lib/ipc_sysv.t
-____________________________________________________________________________
-[ 5322] By: jhi on 2000/02/28 16:17:33
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 45 files)
-____________________________________________________________________________
-[ 5321] By: gsar on 2000/02/28 10:13:03
- Log: avoid warnings in legacy code (from David Dyck)
- Branch: perl
- ! lib/pwd.pl
-____________________________________________________________________________
-[ 5320] By: gsar on 2000/02/28 10:11:37
- Log: find2perl doc tweak (from David Dyck <dcd@tc.fluke.com>)
- Branch: perl
- ! x2p/find2perl.PL
-____________________________________________________________________________
-[ 5319] By: gsar on 2000/02/28 10:07:00
- Log: fix outdated URLs (from Michael G Schwern)
- Branch: perl
- ! pod/perldelta.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod pod/perlmodinstall.pod pod/perlmodlib.pod
- ! pod/perlopentut.pod pod/perlport.pod pod/perltoc.pod
- ! pod/perlvar.pod pod/perlxs.pod
-____________________________________________________________________________
-[ 5318] By: gsar on 2000/02/28 10:04:57
- Log: update Changes, patchlevel etc.
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 5317] By: gsar on 2000/02/28 09:39:47
- Log: make stringwise bitops work properly on utf8 strings
- Branch: perl
- ! doop.c t/op/bop.t
-____________________________________________________________________________
-[ 5316] By: gsar on 2000/02/28 07:04:22
- Log: integrate cfgperl and vmsperl changes into mainline
- Branch: perl
- ! Porting/makerel
- !> Configure Makefile.SH config_h.SH configure.com
- !> ext/DynaLoader/DynaLoader_pm.PL ext/DynaLoader/dl_vms.xs
- !> hints/hpux.sh lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm
- !> lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm
- !> lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm t/comp/script.t
- !> t/io/openpid.t t/lib/cgi-html.t t/op/goto.t t/op/split.t
- !> vms/descrip_mms.template vms/gen_shrfls.pl
- !> vms/subconfigure.com vms/vms.c
-____________________________________________________________________________
-[ 5315] By: jhi on 2000/02/28 06:31:08
- Log: The search for static _s-suffixex libs was broken;
- add -L/lib/pa20_64 only iff there.
- Branch: cfgperl
- ! Configure config_h.SH hints/hpux.sh
- Branch: metaconfig
- ! U/modified/libs.U
-____________________________________________________________________________
-[ 5314] By: jhi on 2000/02/28 06:08:40
- Log: Even better use64bitall logic.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! use64bits.U uselfs.U
-____________________________________________________________________________
-[ 5313] By: jhi on 2000/02/28 05:47:27
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> lib/File/Basename.pm lib/File/Find.pm lib/fields.pm
- !> pod/perldelta.pod pod/perlfunc.pod pod/perlref.pod
- !> t/lib/fields.t x2p/find2perl.PL
-____________________________________________________________________________
-[ 5312] By: jhi on 2000/02/28 05:09:31
- Log: Ask about use64bitall regardless of whether use64bitint is defined.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 5311] By: bailey on 2000/02/28 05:05:56
- Log: Integrate mainline
- Branch: vmsperl
- !> README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c
- !> ext/File/Glob/Glob.pm hints/dos_djgpp.sh lib/File/Basename.pm
- !> lib/File/Find.pm lib/fields.pm op.c pod/perldelta.pod
- !> pod/perlfaq5.pod pod/perlfunc.pod pod/perlop.pod
- !> pod/perlref.pod pod/perlsec.pod pod/perltodo.pod pp_sys.c
- !> regexec.c sv.c t/lib/fields.t t/pragma/locale.t
- !> x2p/find2perl.PL
-____________________________________________________________________________
-[ 5310] By: bailey on 2000/02/28 04:36:20
- Log: Revert File::Spec::Unix functions and keep VMS versions VMS-specific
- Branch: vmsperl
- ! lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
-____________________________________________________________________________
-[ 5309] By: jhi on 2000/02/28 04:17:36
- Log: The #5249 wasn't doing any good.
- Branch: cfgperl
- ! Makefile.SH lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 5308] By: bailey on 2000/02/28 03:56:51
- Log: Repair typo -- conjunction of variable with text
- Branch: vmsperl
- ! t/lib/cgi-html.t
-____________________________________________________________________________
-[ 5307] By: jhi on 2000/02/28 03:46:14
- Log: A less ambitious version of #5292.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 5306] By: bailey on 2000/02/28 03:42:38
- Log: Defer inclusion of VMS-specific code to runtime
- Branch: vmsperl
- ! t/io/openpid.t
-____________________________________________________________________________
-[ 5305] By: jhi on 2000/02/28 03:41:48
- Log: The #5292 was Not So Good Idea.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 5304] By: bailey on 2000/02/28 02:57:14
- Log: Minor test updates to accomodate new subprocess invocation
- Branch: vmsperl
- ! t/comp/script.t t/op/goto.t t/op/split.t
-____________________________________________________________________________
-[ 5303] By: bailey on 2000/02/28 02:52:47
- Log: Missed bit of #5302 (case-sensitive symbols)
- Branch: vmsperl
- ! lib/ExtUtils/Mksymlists.pm
-____________________________________________________________________________
-[ 5302] By: bailey on 2000/02/28 02:51:00
- Log: Support case-sensitive symbols usage in linker
- Branch: vmsperl
- ! ext/DynaLoader/DynaLoader_pm.PL ext/DynaLoader/dl_vms.xs
- ! lib/ExtUtils/MM_VMS.pm vms/gen_shrfls.pl
-____________________________________________________________________________
-[ 5301] By: bailey on 2000/02/28 02:46:47
- Log: Free $PARSE context after lookups
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5300] By: bailey on 2000/02/28 02:43:56
- Log: Don't wait for subprocess to read final EOF
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5299] By: bailey on 2000/02/28 00:44:45
- Log: Dan Sugalski's config/build changes to .660
- Branch: vmsperl
- ! configure.com vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 5298] By: bailey on 2000/02/28 00:07:13
- Log: When testing CGI.pm, use its notion of CRLF
- Branch: vmsperl
- ! t/lib/cgi-html.t
-____________________________________________________________________________
-[ 5297] By: bailey on 2000/02/28 00:00:08
- Log: Quote command line args which need to be upper case
- Tell subprocess we're finished before waiting for it
- Branch: vmsperl
- ! t/io/openpid.t
-____________________________________________________________________________
-[ 5296] By: gsar on 2000/02/28 00:00:05
- Log: m/.*$/ etc should be m/.*\z/s in many file handling modules; fix
- these insidious errors in File::Basename, File::Find and find2perl
- (from Tom Christiansen)
-
- TODO: many other modules need to be fixed as well!
- Branch: perl
- ! lib/File/Basename.pm lib/File/Find.pm x2p/find2perl.PL
-____________________________________________________________________________
-[ 5295] By: jhi on 2000/02/27 23:18:40
- Log: Version number update.
- Branch: cfgperl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 5294] By: gsar on 2000/02/27 22:27:46
- Log: typos in change#5293
- Branch: perl
- ! lib/fields.pm
-____________________________________________________________________________
-[ 5293] By: gsar on 2000/02/27 21:57:40
- Log: support fields::new() and fields::phash() to create pseudo-hash
- objects and plain pseudo-hashes respectively (this avoids users
- from having to diddle %FIELDS directly); update documentation to
- suit (from original fields::phash() implementation by Peter
- Scott <Peter@PSDT.com>)
- Branch: perl
- ! lib/fields.pm pod/perldelta.pod pod/perlfunc.pod
- ! pod/perlref.pod t/lib/fields.t
-____________________________________________________________________________
-[ 5292] By: jhi on 2000/02/27 21:49:25
- Log: proto.h was mssing from the list of generated files;
- added rules to generate any single wanted file
- (a bunch of other files may also be generated
- at the same time, as before)
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 5291] By: jhi on 2000/02/27 18:57:12
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c
- !> ext/File/Glob/Glob.pm hints/dos_djgpp.sh lib/File/Spec/OS2.pm
- !> lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
- !> lib/File/Spec/Win32.pm op.c pod/perldelta.pod pod/perlfaq5.pod
- !> pod/perlfunc.pod pod/perlop.pod pod/perlsec.pod
- !> pod/perltodo.pod pp_sys.c sv.c vms/perlvms.pod vms/vms.c
-____________________________________________________________________________
-[ 5290] By: gsar on 2000/02/27 18:47:00
- Log: integrate cfgperl and vmsperl contents into mainline
- Branch: perl
- !> lib/File/Spec/OS2.pm lib/File/Spec/Unix.pm
- !> lib/File/Spec/VMS.pm lib/File/Spec/Win32.pm regexec.c
- !> t/pragma/locale.t vms/perlvms.pod vms/vms.c
-____________________________________________________________________________
-[ 5289] By: gsar on 2000/02/27 18:09:04
- Log: tweak change#5286 (we don't ever get to pp_glob() if we're using
- the internal glob())
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 5288] By: gsar on 2000/02/27 17:12:41
- Log: djgpp update (from Laszlo Molnar)
- Branch: perl
- ! README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c
- ! hints/dos_djgpp.sh
-____________________________________________________________________________
-[ 5287] By: gsar on 2000/02/27 16:58:53
- Log: tweak comment about core glob()
- Branch: perl
- ! ext/File/Glob/Glob.pm
-____________________________________________________________________________
-[ 5286] By: gsar on 2000/02/27 16:52:54
- Log: remove outdated info about csh and glob(); glob() need not fail
- when tainting anymore if using internal globbing
- Branch: perl
- ! pod/perldelta.pod pod/perlfaq5.pod pod/perlfunc.pod
- ! pod/perlop.pod pod/perlsec.pod pod/perltodo.pod pp_sys.c
-____________________________________________________________________________
-[ 5285] By: gsar on 2000/02/27 16:20:31
- Log: make readdir() respect IOf_UNTAINT flag (allows untainting of directory
- handles with: C<use IO::Handle; opendir D, $dir or die; D->untaint;>
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 5284] By: gsar on 2000/02/27 14:31:24
- Log: avoid compiler warnings (from Dan Sugalski)
- Branch: perl
- ! op.c sv.c
-____________________________________________________________________________
-[ 5283] By: gsar on 2000/02/27 14:21:16
- Log: propagate utf8ness in sv_setsv() (from Gisle Aas)
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5282] By: bailey on 2000/02/27 05:07:08
- Log: Impose security constraints on lnm lookup only if tainting
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 5281] By: bailey on 2000/02/27 05:05:35
- Log: Add new File::Spec::VMS methods
- Don't add implicit device in VMS <-> Unix filespec translation
- Make File::Spec::Unix{rel2abs|abs2rel} OS-independent
- Branch: vmsperl
- ! lib/File/Spec/OS2.pm lib/File/Spec/Unix.pm
- ! lib/File/Spec/VMS.pm lib/File/Spec/Win32.pm vms/vms.c
-____________________________________________________________________________
-[ 5280] By: bailey on 2000/02/27 04:58:01
- Log: Accept filespecs as command verbs for subprocesses
- Branch: vmsperl
- ! vms/perlvms.pod vms/vms.c
-____________________________________________________________________________
-[ 5279] By: jhi on 2000/02/27 04:01:53
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> pp_hot.c
-____________________________________________________________________________
-[ 5278] By: bailey on 2000/02/27 02:43:01
- Log: Resync with mainline again
- Branch: vmsperl
- !> Makefile.SH README.vms configure.com lib/ExtUtils/MM_Unix.pm
- !> lib/Pod/Checker.pm lib/Pod/InputObjects.pm
- !> lib/Pod/ParseUtils.pm lib/Pod/Parser.pm lib/Pod/Select.pm
- !> lib/Pod/Usage.pm pod/perlfunc.pod pp_hot.c t/pod/poderrs.t
- !> t/pod/poderrs.xr vms/descrip_mms.template vms/sockadapt.h
- !> vms/subconfigure.com
-____________________________________________________________________________
-[ 5277] By: jhi on 2000/02/27 02:36:36
- Log: Fix locale case-ignorant matching bug reported in
-
- From: gomar@md.media-web.de
- To: perl5-porters@perl.org
- Subject: [ID 20000223.005]
- Date: 23 Feb 2000 16:03:08 -0000
- Message-Id: <20000223160308.1830.qmail@md.media-web.de>
- Branch: cfgperl
- ! regexec.c t/pragma/locale.t
-____________________________________________________________________________
-[ 5276] By: gsar on 2000/02/26 18:18:16
- Log: allow $fh->autoflush on globrefs, and thence autovivified filehandles
- (from Tom Christiansen)
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 5275] By: jhi on 2000/02/26 16:43:11
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 34 files)
-____________________________________________________________________________
-[ 5274] By: gsar on 2000/02/26 15:23:45
- Log: rework binmode() entry in perlfunc (from Martien Verbruggen
- <mgjv@comdyn.com.au>)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 5273] By: gsar on 2000/02/26 15:04:54
- Log: PodParser v1.11 update (from Brad Appleton)
- Branch: perl
- ! lib/Pod/Checker.pm lib/Pod/InputObjects.pm
- ! lib/Pod/ParseUtils.pm lib/Pod/Parser.pm lib/Pod/Select.pm
- ! lib/Pod/Usage.pm t/pod/poderrs.t t/pod/poderrs.xr
-____________________________________________________________________________
-[ 5272] By: gsar on 2000/02/26 14:48:24
- Log: add missing perl headers to perldepend action
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 5271] By: gsar on 2000/02/26 08:03:36
- Log: VMS patch (from Peter Prymmer)
- Branch: perl
- ! Makefile.SH README.vms configure.com vms/descrip_mms.template
- ! vms/sockadapt.h vms/subconfigure.com
-____________________________________________________________________________
-[ 5270] By: gsar on 2000/02/26 07:46:35
- Log: integrate vmsperl changes into mainline
- Branch: perl
- !> av.c configure.com installperl lib/ExtUtils/MM_VMS.pm mg.h
- !> pp_sys.c scope.c vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 5269] By: bailey on 2000/02/26 07:04:55
- Log: Resync with mainline
- Branch: vmsperl
- +> cygwin/cygwin.c ext/DynaLoader/dl_dyld.xs
- +> ext/Sys/Hostname/Hostname.pm ext/Sys/Hostname/Hostname.xs
- +> ext/Sys/Hostname/Makefile.PL hints/darwin.sh lib/bytes.pm
- +> lib/bytes_heavy.pl t/pragma/warn/9enabled
- - ext/DynaLoader/dl_rhapsody.xs lib/Sys/Hostname.pm lib/byte.pm
- - lib/byte_heavy.pl lib/unicode/Eq/Latin1.pl
- - lib/unicode/Eq/Unicode.pl
- !> (integrate 323 files)
-____________________________________________________________________________
-[ 5268] By: gsar on 2000/02/26 06:50:04
- Log: reintroduce useithreads (accidentally deleted in change#5261)
- Branch: perl
- ! win32/config.vc
-____________________________________________________________________________
-[ 5266] By: gsar on 2000/02/26 06:46:06
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> cygwin/cygwin.c ext/DynaLoader/dl_dyld.xs hints/darwin.sh
- - ext/DynaLoader/dl_rhapsody.xs
- !> (integrate 62 files)
-____________________________________________________________________________
-[ 5265] By: gsar on 2000/02/26 06:31:10
- Log: support for version vectors in UNIVERSAL::VERSION(), so that
- C<use Foo v1.2.3> etc., work; tests for the same
-
- TODO: XS_VERSION_BOOTCHECK needs to be revisited in light of this
- Branch: perl
- ! embed.h embed.pl global.sym objXSUB.h perlapi.c proto.h
- ! t/comp/use.t toke.c universal.c
-____________________________________________________________________________
-[ 5264] By: jhi on 2000/02/26 04:14:15
- Log: Add libscheck for IRIX.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5263] By: jhi on 2000/02/26 03:40:47
- Log: Add libscheck for Solaris.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5262] By: jhi on 2000/02/26 03:10:47
- Log: Rhapsody/Darwin patches from Wilfredo Sanchez.
- Branch: cfgperl
- + ext/DynaLoader/dl_dyld.xs hints/darwin.sh
- - ext/DynaLoader/dl_rhapsody.xs
- ! Configure INSTALL MANIFEST Makefile.SH README.threads
- ! config_h.SH hints/rhapsody.sh installperl pp_sys.c
- Branch: metaconfig
- ! U/a_dvisory/multiarch.U
-____________________________________________________________________________
-[ 5261] By: jhi on 2000/02/26 02:48:23
- Log: Rename use64bits to use64bitint;
- rename usefull64bits to use64bitall.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH configure.com epoc/config.sh hints/aix.sh
- ! hints/hpux.sh hints/irix_4.sh hints/irix_5.sh hints/irix_6.sh
- ! hints/irix_6_0.sh hints/irix_6_1.sh hints/solaris_2.sh
- ! myconfig.SH perl.c perl.h pod/perldelta.pod pod/perlfunc.pod
- ! vms/subconfigure.com vos/config.def vos/config.h
- ! vos/config_h.SH_orig win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U U/mksample U/modified/libpth.U
- ! U/protos/socksizetype.U U/threads/archname.U
- Branch: metaconfig/U/perl
- ! Extensions.U dbm64.U perlxv.U stdio64.U use64bits.U uselfs.U
- ! usemorebits.U
-____________________________________________________________________________
-[ 5260] By: jhi on 2000/02/25 22:57:16
- Log: From: "Fifer, Eric" <EFifer@sanwaint.com>
- To: "'perl5-porters@perl.org'" <perl5-porters@perl.org>
- Subject: [PATCH 5.5.660] cygwin port
- Message-ID: <779F20BCCE5AD31186A50008C75D99791716E2@SILLDN_MAIL1>
- Branch: cfgperl
- ! README.cygwin cygwin/Makefile.SHs cygwin/cygwin.c
-____________________________________________________________________________
-[ 5259] By: jhi on 2000/02/25 22:53:51
- Log: Configure nits; add socksizetype; add getfsstat for completeness;
- add lseekproto, usefull64bits, socksizetype getfsstat to non-UNIX
- lands; regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH doio.c epoc/config.sh perl.c pp_sys.c
- ! vms/subconfigure.com vos/config.def win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc
- Branch: metaconfig
- + U/protos/socksizetype.U
- Branch: metaconfig/U/perl
- + d_getfsstat.U
- ! d_fstatfs.U fpossize.U use64bits.U uselfs.U
-____________________________________________________________________________
-[ 5258] By: jhi on 2000/02/25 21:04:17
- Log: Further fixes to malloc.c prototypes from Dominic Dunlop.
- Branch: cfgperl
- ! malloc.c
-____________________________________________________________________________
-[ 5257] By: jhi on 2000/02/25 20:48:13
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> embed.h embed.pl objXSUB.h op.c op.h perlapi.c pp_ctl.c
- !> proto.h t/cmd/while.t
-____________________________________________________________________________
-[ 5256] By: gsar on 2000/02/25 20:04:37
- Log: fix missing perl_alloc() declaration under PERL_IMPLICIT_SYS
- Branch: perl
- ! embed.h embed.pl objXSUB.h perlapi.c proto.h
-____________________________________________________________________________
-[ 5255] By: gsar on 2000/02/25 19:23:58
- Log: change#4849 wasn't restoring savestack correctly; make loops that have
- continue blocks recognizable at run time
- Branch: perl
- ! op.c op.h pp_ctl.c t/cmd/while.t
-____________________________________________________________________________
-[ 5254] By: jhi on 2000/02/25 06:00:01
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> ext/B/B.xs ext/B/B/C.pm lib/Pod/InputObjects.pm
- !> lib/Pod/Parser.pm lib/Pod/Select.pm lib/Pod/Usage.pm
- !> t/lib/filefind.t t/pod/poderrs.xr
-____________________________________________________________________________
-[ 5253] By: jhi on 2000/02/25 05:57:59
- Log: Megalopatch for Configure: Andy's new installation schemes;
- introduce usefull64bits, beautify and regularize the various
- type probes; introduce d_lseekproto.
- Branch: cfgperl
- ! Configure INSTALL Policy_sh.SH config_h.SH perl.h
- ! pod/perldelta.pod
- Branch: metaconfig
- + U/installdirs/perl5.U U/installdirs/sitehtml1.U
- + U/installdirs/sitehtml3.U U/installdirs/siteman1.U
- + U/installdirs/siteman3.U U/installdirs/sitescript.U
- + U/installdirs/vendorhtml1.U U/installdirs/vendorhtml3.U
- + U/installdirs/vendorman1.U U/installdirs/vendorman3.U
- + U/installdirs/vendorscript.U U/protos/d_lseekproto.U
- - U/installdirs/vendorhtml1dir.U U/installdirs/vendorhtml3dir.U
- - U/installdirs/vendorman1dir.U U/installdirs/vendorman3dir.U
- - U/installdirs/vendorscriptdir.U
- ! U/compline/doublesize.U U/compline/ptrsize.U
- ! U/installdirs/archlib.U U/installdirs/bin.U
- ! U/installdirs/html1dir.U U/installdirs/html3dir.U
- ! U/installdirs/inc_version_list.U U/installdirs/installprefix.U
- ! U/installdirs/installstyle.U U/installdirs/instubperl.U
- ! U/installdirs/localarch.U U/installdirs/locallib.U
- ! U/installdirs/otherlibdirs.U U/installdirs/prefix.U
- ! U/installdirs/privlib.U U/installdirs/scriptdir.U
- ! U/installdirs/sitearch.U U/installdirs/sitebin.U
- ! U/installdirs/sitelib.U U/installdirs/siteprefix.U
- ! U/installdirs/vendorarch.U U/installdirs/vendorbin.U
- ! U/installdirs/vendorlib.U U/installdirs/vendorprefix.U
- ! U/modified/d_longdbl.U U/modified/d_longlong.U
- ! U/typedefs/gidsize.U U/typedefs/lseektype.U
- ! U/typedefs/uidsize.U
- Branch: metaconfig/U/perl
- ! d_fpos64_t.U d_int64_t.U d_off64_t.U d_socklen_t.U fpossize.U
- ! patchlevel.U use64bits.U uselfs.U usemultiplicity.U
-____________________________________________________________________________
-[ 5252] By: gsar on 2000/02/25 03:15:03
- Log: update PodParser to v1.10 (from Brad Appleton)
- Branch: perl
- ! lib/Pod/InputObjects.pm lib/Pod/Parser.pm lib/Pod/Select.pm
- ! lib/Pod/Usage.pm t/pod/poderrs.xr
-____________________________________________________________________________
-[ 5251] By: gsar on 2000/02/25 03:10:51
- Log: make File::Find tests tolerate case-insensitive systems (from
- Laszlo Molnar)
- Branch: perl
- ! t/lib/filefind.t
-____________________________________________________________________________
-[ 5250] By: gsar on 2000/02/25 01:50:04
- Log: more Compiler tweaks for useithreads
- Branch: perl
- ! ext/B/B.xs ext/B/B/C.pm
-____________________________________________________________________________
-[ 5249] By: jhi on 2000/02/25 00:17:53
- Log: Remove NFS temp files and Configure temp C files.
- Branch: cfgperl
- ! Makefile.SH lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 5248] By: jhi on 2000/02/24 23:57:49
- Log: In FreeBSD disable floating point exception handlers.
- As the comment says, this should be done in the hints.
-
- From: dive <dive@ender.com>
- To: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- cc: perl5-porters@perl.org
- Subject: Re: [ID 20000216.004] apparent bug on freebsd systems when calculating large numbers
- Date: Thu, 24 Feb 2000 15:54:24 -0800 (PST)
- Message-ID: <Pine.LNX.4.04.10002241552080.448-100000@dragon.ender.com>
- Branch: cfgperl
- ! unixish.h
-____________________________________________________________________________
-[ 5247] By: jhi on 2000/02/24 23:46:27
- Log: From: Gisle Aas <gisle@aas.no>
- To: perl5-porters@perl.org
- Subject: [PATCH v5.5.660] More UTF8_MAXLEN fixes
- Date: 25 Feb 2000 00:24:53 +0100
- Message-ID: <m3ema2tc8q.fsf@eik.g.aas.no>
- Branch: cfgperl
- ! doop.c op.c perl.c pp.c regcomp.c regexec.c sv.c
-____________________________________________________________________________
-[ 5246] By: jhi on 2000/02/24 23:15:56
- Log: The op/stat.t patch in #5341 wasn't robust enough,
- it broke subtest 4 almost everywhere else.
- Branch: cfgperl
- ! t/op/stat.t
-____________________________________________________________________________
-[ 5245] By: jhi on 2000/02/24 19:28:53
- Log: More VMS patches from Peter Prymmer.
- Branch: cfgperl
- ! configure.com vms/subconfigure.com
-____________________________________________________________________________
-[ 5244] By: jhi on 2000/02/24 19:26:33
- Log: Largefileness in Solaris doesn't require long longs;
- use64bits enhancements; introduce usefull64bits.
- Branch: cfgperl
- ! Configure config_h.SH hints/aix.sh hints/hpux.sh
- ! hints/irix_6.sh hints/solaris_2.sh
- Branch: metaconfig
- ! U/threads/archname.U
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 5243] By: jhi on 2000/02/24 18:40:25
- Log: Tidy up the 64-bit (and socklen_t) type probing.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/d_longdbl.U U/modified/d_longlong.U
- Branch: metaconfig/U/perl
- + d_fpos64_t.U d_off64_t.U
- - io64.U
- ! d_int64_t.U d_socklen_t.U
-____________________________________________________________________________
-[ 5242] By: jhi on 2000/02/24 18:09:49
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> pod/perlop.pod
-____________________________________________________________________________
-[ 5241] By: jhi on 2000/02/24 18:00:49
- Log: From: "Fifer, Eric" <EFifer@sanwaint.com>
- To: "'perl5-porters@perl.org'" <perl5-porters@perl.org>
- Subject: [PATCH 5.5.660] cygwin port
- Date: Thu, 24 Feb 2000 17:15:28 -0000
- Message-ID: <779F20BCCE5AD31186A50008C75D99791716E1@SILLDN_MAIL1>
- Branch: cfgperl
- + cygwin/cygwin.c
- ! MANIFEST Makefile.SH README.cygwin cygwin/Makefile.SHs
- ! hints/cygwin.sh perl.c t/lib/glob-basic.t t/op/stat.t
-____________________________________________________________________________
-[ 5240] By: jhi on 2000/02/24 17:53:12
- Log: VMS patch from Peter Prymmer; use full_ar.
- Branch: cfgperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 5239] By: jhi on 2000/02/24 17:46:45
- Log: MPE/ix patches from Mark Bixby.
- Branch: cfgperl
- ! pp_sys.c t/io/pipe.t t/lib/glob-basic.t t/lib/io_poll.t
- ! t/lib/io_sock.t t/op/die_exit.t t/op/exec.t t/op/fork.t
- ! t/op/stat.t
-____________________________________________________________________________
-[ 5238] By: jhi on 2000/02/24 17:13:22
- Log: Get -lbind if available. Add pointer to perldelta.pod/64-bit
- support to t/op/numconvert.t.
-
- From: Lupe Christoph <lupe@lupe-christoph.de>
- To: perl5-porters@perl.org
- Subject: [ID 20000224.003] Not OK: perl v5.5.660 on i86pc-solaris 2.7
- Date: Thu, 24 Feb 2000 11:54:50 +0100 (MET)
- Message-Id: <200002241054.LAA06808@lupe-christoph.de>
- Branch: cfgperl
- ! Configure config_h.SH t/op/numconvert.t
- Branch: metaconfig
- ! U/modified/libs.U
-____________________________________________________________________________
-[ 5237] By: jhi on 2000/02/24 15:47:11
- Log: Remove more cruft from IO.
- Branch: cfgperl
- ! ext/IO/IO.xs
-____________________________________________________________________________
-[ 5236] By: jhi on 2000/02/24 15:14:48
- Log: From: Hugo <hv@crypt.compulink.co.uk>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.5.660] double EXPORT_OK in h2xs
- Date: Thu, 24 Feb 2000 13:24:10 +0000
- Message-Id: <200002241324.NAA05900@crypt.compulink.co.uk>
- Branch: cfgperl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 5235] By: jhi on 2000/02/24 15:12:40
- Log: Some Windows setups do not have S_IRGRP, S_IWGRP, S_IXGRP,
- S_IROTH, S_IWOTH, S_IXOTH.
-
- From: js@ddre.dk
- To: perl5-porters@perl.org
- Subject: [ID 20000224.004] Not OK: perl v5.5.660 on MSWin32-x86 4.0
- Date: Thu, 24 Feb 2000 15:11:33 +0100
- Message-Id: <2991B60B9F72D011811C0000F821BB4C983B0C@freja.ddre.dk>
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 5234] By: gsar on 2000/02/24 03:39:17
- Log: integrate cfgperl changes into mainline
- Branch: perl
- - lib/unicode/Eq/Latin1.pl lib/unicode/Eq/Unicode.pl
- ! pod/perlop.pod
- !> Configure MANIFEST Porting/Glossary Porting/config.sh
- !> Porting/config_H config_h.SH configpm configure.com doio.c
- !> ext/Fcntl/Fcntl.pm ext/IO/IO.xs ext/IO/lib/IO/Socket.pm
- !> ext/Sys/Hostname/Hostname.xs hints/dec_osf.sh hints/irix_6.sh
- !> lib/unicode/mktables.PL malloc.c myconfig.SH pp_sys.c
- !> t/op/64bit.t vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 5233] By: jhi on 2000/02/24 01:31:38
- Log: VMS patch from Peter Prymmer.
- Branch: cfgperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 5232] By: jhi on 2000/02/24 01:15:03
- Log: Detypo fpos64_t test.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! io64.U
-____________________________________________________________________________
-[ 5231] By: jhi on 2000/02/24 01:11:17
- Log: miscut'n'paste in #5230.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! d_int64_t.U
-____________________________________________________________________________
-[ 5230] By: jhi on 2000/02/24 01:02:05
- Log: The #5228 wasn't quite right + fix typos.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/d_longdbl.U U/modified/d_longlong.U
- Branch: metaconfig/U/perl
- ! d_int64_t.U d_socklen_t.U io64.U
-____________________________________________________________________________
-[ 5229] By: jhi on 2000/02/24 00:40:01
- Log: Depickify the compiler (about unused and set but not used variables)
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5228] By: jhi on 2000/02/24 00:34:35
- Log: Cosmetics.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/d_longdbl.U U/modified/d_longlong.U
- Branch: metaconfig/U/perl
- ! d_int64_t.U d_socklen_t.U
-____________________________________________________________________________
-[ 5227] By: jhi on 2000/02/24 00:17:34
- Log: In IRIX <sys/mode.h> is something completely different.
-
- From: jarausch@numa1.igpm.rwth-aachen.de (Helmut Jarausch)
- To: perl5-porters@perl.org
- Subject: [ID 20000223.003] Not OK: perl v5.5.660 on IP26-irix 6.5
- Date: Wed, 23 Feb 2000 10:55:08 +0100 (CST)
- Message-Id: <200002230955.KAA89136@numa1.igpm.rwth-aachen.de>
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 5226] By: jhi on 2000/02/23 20:39:28
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> pod/perldelta.pod pod/perlfunc.pod pod/perlop.pod
- !> t/comp/require.t t/op/ver.t toke.c
-____________________________________________________________________________
-[ 5225] By: jhi on 2000/02/23 20:35:58
- Log: From: Dominic Dunlop <domo@computer.org>
- To: perl5-porters@perl.org
- Cc: Gurusamy Sarathy <gsar@activestate.com>
- Subject: [ID 20000223.008] [PATCH 5.5.660] squash malloc.c compile warnings
- Date: Wed, 23 Feb 2000 21:23:44 +0100
- Message-Id: <v04220800b4d9f1bcee1a@[212.24.193.51]>
- Branch: cfgperl
- ! malloc.c
-____________________________________________________________________________
-[ 5224] By: jhi on 2000/02/23 20:22:43
- Log: From: Dan Sugalski <dan@sidhe.org>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.5.660]VMS build patches
- Date: Wed, 23 Feb 2000 15:14:27 -0500
- Message-Id: <4.3.0.20000223151302.01efa560@24.8.96.48>
-
- (the patch was mangled, had to be manually applied)
- Branch: cfgperl
- ! configure.com vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 5223] By: jhi on 2000/02/23 19:54:04
- Log: From: Dominic Dunlop <domo@computer.org>
- To: perl5-porters@perl.org
- Cc: Andy Dougherty <doughera@lafayette.edu>,
- Gurusamy Sarathy <gsar@activestate.com>
- Subject: [ID 20000223.007] [PATCH 5.5.660] $@ unsafe in Configure sed arguments
- Date: Wed, 23 Feb 2000 20:41:54 +0100
- Message-Id: <v04220800b4d9e48c51bb@[212.24.193.51]>
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Oldconfig.U U/modified/libs.U
- Branch: metaconfig/U/perl
- ! dlsrc.U
-____________________________________________________________________________
-[ 5222] By: jhi on 2000/02/23 18:02:39
- Log: Remove &IO::EINPROGRESS now that IO uses Errno anyway
- (suggested by Graham Barr).
- Branch: cfgperl
- ! ext/IO/IO.xs ext/IO/lib/IO/Socket.pm
-____________________________________________________________________________
-[ 5221] By: jhi on 2000/02/23 16:00:29
- Log: Streamline #5218 even more.
- Branch: cfgperl
- ! ext/IO/lib/IO/Socket.pm
-____________________________________________________________________________
-[ 5220] By: gsar on 2000/02/23 09:10:43
- Log: per Larry's idea, parse 1.2.3 as v1.2.3; C<require 5.6.0> and
- C<use 5.6.0> work as well; underscores are now permitted in v-strings
- Branch: perl
- ! pod/perldelta.pod pod/perlfunc.pod pod/perlop.pod
- ! t/comp/require.t t/op/ver.t toke.c
-____________________________________________________________________________
-[ 5219] By: jhi on 2000/02/23 04:24:54
- Log: Streamline #5218.
- Branch: cfgperl
- ! ext/IO/lib/IO/Socket.pm
-____________________________________________________________________________
-[ 5218] By: jhi on 2000/02/23 02:08:19
- Log: Trying to connect to an already open socket may give EISCONN.
- Branch: cfgperl
- ! ext/IO/lib/IO/Socket.pm
-____________________________________________________________________________
-[ 5217] By: jhi on 2000/02/22 23:54:51
- Log: Fix prototype conflicts with POSIX.pm.
- Branch: cfgperl
- ! ext/Fcntl/Fcntl.pm
-____________________________________________________________________________
-[ 5216] By: jhi on 2000/02/22 22:27:19
- Log: See http://www.unicode.org/unicode/reports/tr15/
- for in-depth description of the problem.
- Branch: cfgperl
- - lib/unicode/Eq/Latin1.pl lib/unicode/Eq/Unicode.pl
- ! MANIFEST lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 5215] By: jhi on 2000/02/22 22:11:17
- Log: Add uselongdouble, regroup the use* more logically.
- Branch: cfgperl
- ! myconfig.SH
-____________________________________________________________________________
-[ 5214] By: jhi on 2000/02/22 22:04:43
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> malloc.c perl.c pod/perldelta.pod pod/perldiag.pod
- !> pod/perlpod.pod pod/perlrun.pod toke.c utils/perldoc.PL
-____________________________________________________________________________
-[ 5213] By: jhi on 2000/02/22 22:03:26
- Log: Add socklen_t probe; Configure maintenance.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH doio.c ext/Sys/Hostname/Hostname.xs pp_sys.c
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U U/compline/alignbytes.U U/modified/cc.U
- ! U/modified/libs.U
- Branch: metaconfig/U/perl
- + d_int64_t.U d_socklen_t.U
- - d_int64t.U
- ! i_sysutsname.U
-____________________________________________________________________________
-[ 5212] By: gsar on 2000/02/22 21:46:45
- Log: make Perl's malloc work for allocations over 2GB (from Ilya
- Zakharevich)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 5211] By: gsar on 2000/02/22 19:51:47
- Log: add -W and -X to -h output; fix other pod omissions
- Branch: perl
- ! perl.c pod/perlrun.pod
-____________________________________________________________________________
-[ 5210] By: gsar on 2000/02/22 19:51:13
- Log: describe C<< ... >> in perlpod.pod (from Brad Appleton)
- Branch: perl
- ! pod/perlpod.pod
-____________________________________________________________________________
-[ 5209] By: jhi on 2000/02/22 19:40:43
- Log: The subtests 28 and 31 were wrong. Tightened also the similar
- tests nearby.
- Branch: cfgperl
- ! t/op/64bit.t
-____________________________________________________________________________
-[ 5208] By: gsar on 2000/02/22 19:13:44
- Log: s/Activeware/ActiveState/
- Branch: perl
- ! pod/perlrun.pod
-____________________________________________________________________________
-[ 5207] By: jhi on 2000/02/22 18:38:29
- Log: Perl version nit spotted by Spider Boardman.
- Branch: cfgperl
- ! configpm
-____________________________________________________________________________
-[ 5206] By: gsar on 2000/02/22 17:50:44
- Log: change#5205 wasn't quite right; SvCUR() should be SvLEN()
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 5205] By: gsar on 2000/02/22 17:36:26
- Log: fix memory overrun due to off-by-one in change#5192
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 5204] By: gsar on 2000/02/22 17:10:39
- Log: sundry typos and such
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod utils/perldoc.PL
-____________________________________________________________________________
-[ 5203] By: jhi on 2000/02/22 17:10:22
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 56 files)
-____________________________________________________________________________
-[ 5202] By: gsar on 2000/02/22 16:48:58
- Log: remove vestiges of older attribute syntax
- Branch: perl
- ! ext/attrs/attrs.pm pod/Win32.pod pod/perldelta.pod
- ! pod/perlop.pod pod/perlthrtut.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 5201] By: jhi on 2000/02/22 14:39:56
- Log: Configure nits spotted by Spider Boardman.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/libs.U
- Branch: metaconfig/U/perl
- ! fpossize.U
-____________________________________________________________________________
-[ 5200] By: jhi on 2000/02/22 14:31:21
- Log: Tru64 V5.0 patches from Spider Boardman.
- Branch: cfgperl
- ! hints/dec_osf.sh
-
-----------------
-Version v5.5.660
-----------------
-
-____________________________________________________________________________
-[ 5199] By: gsar on 2000/02/22 11:29:28
- Log: beta2
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 5198] By: gsar on 2000/02/22 10:45:54
- Log: PodParser-1.093 update (from Brad Appleton's site)
- Branch: perl
- ! lib/Pod/Checker.pm lib/Pod/Find.pm lib/Pod/InputObjects.pm
- ! lib/Pod/ParseUtils.pm lib/Pod/Parser.pm lib/Pod/Select.pm
- ! lib/Pod/Usage.pm t/pod/poderrs.t t/pod/poderrs.xr
- ! t/pod/special_seqs.t t/pod/special_seqs.xr
-____________________________________________________________________________
-[ 5197] By: gsar on 2000/02/22 10:24:13
- Log: integrate cfgperl contents into mainline, update Changes
- Branch: perl
- ! Changes pod/perlhist.pod
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH hints/solaris_2.sh malloc.c perl.h
- !> pod/perldelta.pod
-____________________________________________________________________________
-[ 5196] By: gsar on 2000/02/22 10:10:36
- Log: dos-djgpp updates (from Laszlo Molnar <laszlo.molnar@eth.ericsson.se>)
- Branch: perl
- ! djgpp/config.over djgpp/configure.bat djgpp/djgppsed.sh
- ! t/lib/glob-basic.t t/lib/glob-case.t t/lib/glob-global.t
- ! t/lib/glob-taint.t t/lib/io_unix.t
-____________________________________________________________________________
-[ 5195] By: gsar on 2000/02/22 10:01:49
- Log: s/undef/NO_INIT/g in change#5183
- Branch: perl
- ! lib/ExtUtils/xsubpp pod/perlxs.pod
-____________________________________________________________________________
-[ 5194] By: gsar on 2000/02/22 09:44:07
- Log: perlipc bug (spotted by Ben Low)
- Branch: perl
- ! pod/perlipc.pod
-____________________________________________________________________________
-[ 5193] By: gsar on 2000/02/22 09:38:58
- Log: EPOC port update (from Olaf Flebbe <O.Flebbe@science-computing.de>)
- Branch: perl
- ! README.epoc epoc/config.sh epoc/createpkg.pl perl.c
-____________________________________________________________________________
-[ 5192] By: gsar on 2000/02/22 09:26:06
- Log: improvements for high-bit text literals (from Gisle Aas)
- Branch: perl
- ! t/pragma/warn/doop t/pragma/warn/pp t/pragma/warn/sv
- ! t/pragma/warn/toke t/pragma/warn/utf8 toke.c
-____________________________________________________________________________
-[ 5191] By: gsar on 2000/02/22 07:35:47
- Log: allow C<print v10>, $h{v13.10} etc.
- Branch: perl
- ! t/op/ver.t toke.c
-____________________________________________________________________________
-[ 5190] By: gsar on 2000/02/22 05:35:27
- Log: adjust for lost fp precision in require version check
- Branch: perl
- ! pp_ctl.c t/comp/require.t
-____________________________________________________________________________
-[ 5189] By: jhi on 2000/02/22 05:14:35
- Log: Check the alignment of long doubles if they are to be used;
- regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
- Branch: metaconfig
- ! U/compline/alignbytes.U
-____________________________________________________________________________
-[ 5188] By: gsar on 2000/02/22 04:45:57
- Log: use same treatment for EINVAL as for ETIMEDOUT
- Branch: perl
- ! ext/IO/lib/IO/Socket/INET.pm
-____________________________________________________________________________
-[ 5187] By: gsar on 2000/02/21 23:15:12
- Log: type mismatch
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5186] By: gsar on 2000/02/21 21:10:26
- Log: remove dual-valueness of v-strings (i.e., they are pure strings
- now); avoid the word "tuple" to describe strings represented as
- character ordinals; usurp $PERL_VERSION for $^V as suggested by
- Larry, deprecate $] ; adjust the documentation and testsuite
- accordingly
- Branch: perl
- ! MANIFEST lib/English.pm op.c pod/perldelta.pod
- ! pod/perlfunc.pod pod/perlop.pod pod/perlvar.pod
- ! t/comp/require.t t/op/ver.t toke.c
-____________________________________________________________________________
-[ 5185] By: jhi on 2000/02/21 20:36:05
- Log: detypo
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 5184] By: gsar on 2000/02/21 18:37:38
- Log: clarify "use Module VERSION LIST" (from Robin Barker)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 5183] By: gsar on 2000/02/21 18:31:42
- Log: allow optional XSUB parameters without being forced to use a
- default (from Hugo van der Sanden)
- Branch: perl
- ! lib/ExtUtils/xsubpp pod/perlfunc.pod pod/perlxs.pod
-____________________________________________________________________________
-[ 5182] By: jhi on 2000/02/21 18:22:47
- Log: Add Solaris LP64 notes.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 5181] By: gsar on 2000/02/21 16:53:39
- Log: generalize "%v" format into a flag for any integral format type:
- "%vd", "%v#o", "%*vX", etc are allowed
- Branch: perl
- ! perl.c pod/perldelta.pod pod/perlfunc.pod sv.c t/op/ver.t
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 5180] By: gsar on 2000/02/21 07:11:00
- Log: detypo
- Branch: perl
- ! ext/B/B.xs
-____________________________________________________________________________
-[ 5179] By: gsar on 2000/02/21 07:08:38
- Log: undo accidental delete
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs
-____________________________________________________________________________
-[ 5178] By: gsar on 2000/02/21 07:02:16
- Log: get Compiler "working" under useithreads
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs ext/B/B/C.pm ext/B/B/CC.pm
- ! ext/B/B/Deparse.pm ext/B/B/Xref.pm
-____________________________________________________________________________
-[ 5177] By: jhi on 2000/02/21 03:16:24
- Log: Thou shalt not printf longs with %d.
- Branch: cfgperl
- ! malloc.c
-____________________________________________________________________________
-[ 5176] By: jhi on 2000/02/21 01:37:35
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/pragma/warn/9enabled
- !> (integrate 63 files)
-____________________________________________________________________________
-[ 5175] By: gsar on 2000/02/21 00:25:00
- Log: misplaced braces
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 5174] By: gsar on 2000/02/21 00:09:16
- Log: more malloc.c tweaks for change#5070
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 5173] By: gsar on 2000/02/21 00:01:17
- Log: malloc.c fixups in change#5170 need to fetch thx pointer
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 5172] By: gsar on 2000/02/20 23:52:39
- Log: missing file in change#5170
- Branch: perl
- + t/pragma/warn/9enabled
-____________________________________________________________________________
-[ 5171] By: gsar on 2000/02/20 23:49:17
- Log: skip conditionally defined symbols in change#5162
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 5170] By: gsar on 2000/02/20 22:58:09
- Log: lexical warnings update, ability to inspect bitmask in calling
- scope, among other things (from Paul Marquess)
- Branch: perl
- ! MANIFEST lib/warnings.pm malloc.c mg.c op.c pod/perldiag.pod
- ! pod/perlfunc.pod pod/perllexwarn.pod pp.c pp_ctl.c pp_hot.c
- ! regcomp.c regexec.c sv.c t/op/substr.t t/pragma/warn/op
- ! t/pragma/warn/pp t/pragma/warn/pp_ctl t/pragma/warn/pp_hot
- ! t/pragma/warn/regcomp t/pragma/warn/regexec t/pragma/warn/sv
- ! t/pragma/warn/toke toke.c warnings.h warnings.pl
-____________________________________________________________________________
-[ 5169] By: gsar on 2000/02/20 22:22:28
- Log: windows fixes for virtualizing child std{in,out,err} handles,
- attempts to lock uninitialized critical section in files that
- were never explicitly opened (from Doug Lankshear)
- Branch: perl
- ! iperlsys.h win32/perlhost.h win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 5168] By: gsar on 2000/02/20 20:19:11
- Log: update Changes, credits
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 5167] By: gsar on 2000/02/20 18:54:27
- Log: avoid reading out-of-bounds memory when matching against reference
- Branch: perl
- ! regexec.c
-____________________________________________________________________________
-[ 5166] By: gsar on 2000/02/20 17:59:41
- Log: byte mode chop() should clear UTF8 (from Gisle Aas)
- Branch: perl
- ! doop.c
-____________________________________________________________________________
-[ 5165] By: gsar on 2000/02/20 17:57:08
- Log: test fix needed by change#5164
- Branch: perl
- ! t/pragma/warn/toke
-____________________________________________________________________________
-[ 5164] By: gsar on 2000/02/20 17:50:38
- Log: default mkdir() mode argument to 0777
- Branch: perl
- ! opcode.h opcode.pl pod/perldiag.pod pod/perlfunc.pod pp_sys.c
- ! t/op/mkdir.t toke.c
-____________________________________________________________________________
-[ 5163] By: gsar on 2000/02/20 16:34:33
- Log: glob() takes one or no user arguments and a non-user-visible second
- hidden argument, fix its prototype-checking accordingly
- Branch: perl
- ! op.c opcode.h opcode.pl
-____________________________________________________________________________
-[ 5162] By: gsar on 2000/02/20 16:07:38
- Log: make change#3386 a build-time option (avoids problems due to
- perl_run() longjmping out)
- Branch: perl
- ! Todo-5.6 embed.h embed.pl embedvar.h intrpvar.h objXSUB.h
- ! perl.c perl.h perlapi.c perlvars.h pp_ctl.c proto.h scope.c
- ! scope.h sv.c thrdvar.h util.c
-____________________________________________________________________________
-[ 5161] By: gsar on 2000/02/20 12:13:37
- Log: IO::Socket now sets $!, avoids eval/die (patch from Graham Barr
- modified to use Errno more portably)
- Branch: perl
- ! ext/IO/lib/IO/Socket.pm ext/IO/lib/IO/Socket/INET.pm
-____________________________________________________________________________
-[ 5160] By: gsar on 2000/02/20 11:53:28
- Log: mention portability caveat about C<use Errno 'EFOO'>
- Branch: perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 5159] By: gsar on 2000/02/20 11:14:36
- Log: revise docs on @+ and @- (from Tom "Camel" Christiansen)
- Branch: perl
- ! pod/perlvar.pod
-____________________________________________________________________________
-[ 5158] By: gsar on 2000/02/20 10:53:49
- Log: README.vms and related updates (from Peter Prymmer <pvhp@best.com>)
- Branch: perl
- ! MANIFEST Makefile.SH README.vms pod/perl5005delta.pod
- ! pod/perldelta.pod pod/perlport.pod pod/podchecker.PL
- ! vms/descrip_mms.template
-____________________________________________________________________________
-[ 5157] By: jhi on 2000/02/19 20:29:26
- Log: Be explicit about what ops work with bt vectors.
- (And implicit about which don't.)
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5156] By: jhi on 2000/02/19 18:38:14
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/bytes.pm lib/bytes_heavy.pl
- - lib/byte.pm lib/byte_heavy.pl
- !> (integrate 61 files)
-____________________________________________________________________________
-[ 5155] By: gsar on 2000/02/19 17:57:39
- Log: char vs U8 warnings
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5154] By: gsar on 2000/02/19 17:44:56
- Log: remove outdated caveat about C<while ($k = each %foo)> (from
- Hugo van der Sanden)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 5153] By: gsar on 2000/02/19 17:41:41
- Log: tests, doc tweak (from Gisle Aas)
- Branch: perl
- ! pod/perlfaq9.pod t/op/ord.t
-____________________________________________________________________________
-[ 5152] By: gsar on 2000/02/19 17:35:50
- Log: document behavior of splice(@ary) (from Gisle Aas)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 5151] By: gsar on 2000/02/19 17:33:59
- Log: fix bug in backtracking optimizer (from Makoto Ishisone
- <ishisone@sra.co.jp>)
- Branch: perl
- ! regexec.c t/op/pat.t
-____________________________________________________________________________
-[ 5150] By: gsar on 2000/02/19 17:33:05
- Log: more B fixups to cope with empty GVs (these can only happen in pads)
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs ext/B/B/C.pm op.c
-____________________________________________________________________________
-[ 5149] By: gsar on 2000/02/19 17:32:03
- Log: avoid compiler warnings
- Branch: perl
- ! malloc.c perl.h
-____________________________________________________________________________
-[ 5148] By: gsar on 2000/02/19 17:18:09
- Log: document 'lvalue' attribute (from Simon Cozens <simon@brecon.co.uk>)
- Branch: perl
- ! lib/attributes.pm
-____________________________________________________________________________
-[ 5147] By: gsar on 2000/02/19 17:15:34
- Log: avoid failing on $!{ENOTHERE} (they can always use C<exists $!{NOTHERE}>
- for that)
- Branch: perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 5146] By: gsar on 2000/02/19 16:18:46
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure config_h.SH ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
- !> ext/SDBM_File/sdbm/sdbm.c ext/Socket/Socket.pm
- !> ext/Socket/Socket.xs hints/hpux.sh perl.h pod/perldelta.pod
- !> pod/perlfunc.pod pod/perlopentut.pod t/lib/syslfs.t
-____________________________________________________________________________
-[ 5145] By: gsar on 2000/02/19 16:10:37
- Log: POSIX::strftime gets the date wrong (from John Tobey
- <jtobey@epsilondev.com>)
- Branch: perl
- ! ext/POSIX/POSIX.xs t/lib/posix.t
-____________________________________________________________________________
-[ 5144] By: gsar on 2000/02/19 16:02:40
- Log: don't blindly set bool=char on linux (from Andy Dougherty)
- Branch: perl
- ! handy.h hints/linux.sh x2p/a2p.h
-____________________________________________________________________________
-[ 5143] By: gsar on 2000/02/19 15:54:04
- Log: some rearrangement of the includes for easier "microperl" build;
- add PERL_MICRO guards supplied by Simon Cozens <simon@brecon.co.uk>
- Branch: perl
- ! doio.c perl.c perl.h pp_hot.c pp_sys.c toke.c util.c
-____________________________________________________________________________
-[ 5142] By: gsar on 2000/02/19 15:22:17
- Log: fixes for Pod::Html issues (from Wolfgang Laun
- <wolfgang.laun@chello.at>)
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 5141] By: gsar on 2000/02/19 08:27:29
- Log: grammos (spotted by Tom Christiansen)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 5140] By: gsar on 2000/02/19 08:17:04
- Log: various xsubpp enhancements that make it easier to use with
- C::Scan (from Ilya Zakharevich)
-
- TODO: still needs documentation
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 5139] By: gsar on 2000/02/19 07:55:18
- Log: s/croak/Perl_croak/
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5138] By: gsar on 2000/02/19 07:51:39
- Log: make comparisons promote to utf8 as necessary (from Gisle Aas)
- Branch: perl
- ! Todo-5.6 embed.h embed.pl global.sym objXSUB.h perlapi.c
- ! pp_hot.c proto.h sv.c toke.c
-____________________________________________________________________________
-[ 5137] By: gsar on 2000/02/19 07:42:12
- Log: set close-on-exec flag on sockets too, like we do for files
- and pipes
- Branch: perl
- ! pod/perldelta.pod pod/perlfunc.pod pod/perlvar.pod pp_sys.c
-____________________________________________________________________________
-[ 5136] By: gsar on 2000/02/19 07:23:48
- Log: allocate sufficient buffer sizes for 64-bit wide utf8 characters
- permitted by change#5011 (from Gisle Aas)
- Branch: perl
- ! pp.c utf8.c utf8.h
-____________________________________________________________________________
-[ 5135] By: gsar on 2000/02/19 06:53:13
- Log: s/WARN_PRECEDENCE/WARN_BAREWORD/, vide change#5131
- Branch: perl
- ! lib/warnings.pm op.c warnings.h warnings.pl
-____________________________________________________________________________
-[ 5134] By: gsar on 2000/02/19 06:36:46
- Log: s/byte/bytes/g remnants
- Branch: perl
- ! lib/bytes.pm lib/bytes_heavy.pl
-____________________________________________________________________________
-[ 5133] By: gsar on 2000/02/19 06:33:49
- Log: rename byte:: to bytes::
- Branch: perl
- +> lib/bytes.pm lib/bytes_heavy.pl
- - lib/byte.pm lib/byte_heavy.pl
- ! MANIFEST lib/charnames.pm lib/utf8.pm pod/perldelta.pod
- ! pod/perltoc.pod pod/perlunicode.pod pod/perlvar.pod
- ! t/lib/charnames.t t/op/ver.t
-____________________________________________________________________________
-[ 5132] By: gsar on 2000/02/19 05:58:42
- Log: English names for $^R and $^S
- Branch: perl
- ! lib/English.pm pod/perlvar.pod
-____________________________________________________________________________
-[ 5131] By: gsar on 2000/02/19 05:44:20
- Log: rename "Probable precendence problem" diagnostic to "Bareword found
- in conditional" to better reflect the class of error (as suggested
- by Larry)
- Branch: perl
- ! op.c pod/perldelta.pod pod/perldiag.pod t/pragma/warn/op
-____________________________________________________________________________
-[ 5130] By: gsar on 2000/02/19 05:43:10
- Log: fix outdated info about PerlClinic and the bug-tracking system
- Branch: perl
- ! pod/perlfaq2.pod pod/perltodo.pod
-____________________________________________________________________________
-[ 5129] By: gsar on 2000/02/19 04:14:19
- Log: some fixes for mingw32/GCC (SETERRNO() still appears to
- trash memory)
- Branch: perl
- ! README.win32 t/lib/safe2.t t/op/mkdir.t win32/makefile.mk
- ! win32/win32.h
-____________________________________________________________________________
-[ 5128] By: gsar on 2000/02/18 06:55:33
- Log: avoid $@-clearing sideeffect of require in Carp
- Branch: perl
- ! lib/Carp.pm
-____________________________________________________________________________
-[ 5127] By: gsar on 2000/02/18 04:58:26
- Log: stronger testcase for change#5126
- Branch: perl
- ! t/op/pat.t
-____________________________________________________________________________
-[ 5126] By: gsar on 2000/02/18 04:44:28
- Log: make /\S/ match the same things /[\S]/ matches; likewise for
- \D (from Rick Delaney <rick@consumercontact.com>)
- Branch: perl
- ! regexec.c t/op/pat.t
-____________________________________________________________________________
-[ 5125] By: gsar on 2000/02/18 03:57:43
- Log: Compiler fixups from Jan Dubois
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs ext/B/B/C.pm utils/perlcc.PL
-____________________________________________________________________________
-[ 5124] By: jhi on 2000/02/17 22:09:09
- Log: Take out the -Wl,-z as we have survice so far without.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5123] By: jhi on 2000/02/17 18:40:17
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> dump.c ext/ODBM_File/ODBM_File.xs t/op/split.t
-____________________________________________________________________________
-[ 5122] By: gsar on 2000/02/17 18:01:14
- Log: fix test that depends on op_dump() output
- Branch: perl
- ! t/op/split.t
-____________________________________________________________________________
-[ 5121] By: gsar on 2000/02/17 17:55:18
- Log: op_dump() tweak
- Branch: perl
- ! dump.c
-____________________________________________________________________________
-[ 5120] By: jhi on 2000/02/16 23:11:04
- Log: Regularize the use* questions, and replace
- "Configure *must* be run with -Duse..." with.
- "can be run".
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/threads/usethreads.U
- Branch: metaconfig/U/perl
- ! use64bits.U uselfs.U uselongdbl.U uselonglong.U
- ! usemultiplicity.U useperlio.U usesocks.U
-____________________________________________________________________________
-[ 5119] By: jhi on 2000/02/16 22:29:11
- Log: HP-UX 64-bitness/largefile fixes.
- Branch: cfgperl
- ! Configure config_h.SH ext/SDBM_File/sdbm/sdbm.c hints/hpux.sh
- ! perl.h
- Branch: metaconfig
- ! U/modified/cc.U U/modified/libpth.U U/modified/libs.U
- Branch: metaconfig/U/perl
- ! Extensions.U
-____________________________________________________________________________
-[ 5118] By: jhi on 2000/02/16 19:47:51
- Log: Fcntl: more O_ constants, move SEEK_ to @EXPORT_OK
- (tag :seek), add S_I constants (and functions) (tag :mode);
- refer only to the SEEK_ of Fcntl, not the ones from
- POSIX or IO::; add SHUT_ to Socket; get trigonometric
- functions from Math::Trig instead of POSIX.
- Branch: cfgperl
- ! ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs ext/Socket/Socket.pm
- ! ext/Socket/Socket.xs perl.h pod/perldelta.pod pod/perlfunc.pod
- ! pod/perlopentut.pod t/lib/syslfs.t
- Branch: metaconfig/U/perl
- + i_sysmode.U
-____________________________________________________________________________
-[ 5117] By: gsar on 2000/02/16 06:39:06
- Log: avoid warnings due to redefined NULL
- Branch: perl
- ! ext/ODBM_File/ODBM_File.xs
-____________________________________________________________________________
-[ 5116] By: gsar on 2000/02/16 00:10:25
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure Makefile.SH Porting/Glossary Porting/config.sh
- !> Porting/config_H config_h.SH ext/Sys/Hostname/Hostname.xs
- !> ext/Sys/Syslog/Syslog.xs hints/aix.sh hints/hpux.sh
- !> lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm myconfig.SH
-____________________________________________________________________________
-[ 5115] By: jhi on 2000/02/15 23:11:55
- Log: Probe for <sys/utsname.h>.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH ext/Sys/Hostname/Hostname.xs
- Branch: metaconfig/U/perl
- + i_sysutsname.U
-____________________________________________________________________________
-[ 5114] By: jhi on 2000/02/15 22:59:59
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> ext/Sys/Hostname/Hostname.pm ext/Sys/Hostname/Hostname.xs
- +> ext/Sys/Hostname/Makefile.PL
- - lib/Sys/Hostname.pm
- !> (integrate 41 files)
-____________________________________________________________________________
-[ 5113] By: gsar on 2000/02/15 21:22:18
- Log: update Changes, patchlevel
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 5112] By: gsar on 2000/02/15 20:57:12
- Log: fix change#5104 under useithreads
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 5111] By: gsar on 2000/02/15 20:45:10
- Log: export list tweak needed by change#5103
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 5110] By: gsar on 2000/02/15 19:32:56
- Log: add XS version of Sys::Hostname (from Greg Bacon
- <gbacon@itsc.uah.edu>)
- Branch: perl
- + ext/Sys/Hostname/Hostname.pm ext/Sys/Hostname/Hostname.xs
- + ext/Sys/Hostname/Makefile.PL
- - lib/Sys/Hostname.pm
- ! MANIFEST ext/DynaLoader/Makefile.PL ext/Sys/Syslog/Makefile.PL
- ! pod/perldelta.pod t/lib/hostname.t win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 5109] By: gsar on 2000/02/15 18:35:28
- Log: UNIVERSAL::can and UNIVERSAL::isa should return undef when
- given undefined values (from Graham Barr <gbarr@pobox.com>)
- Branch: perl
- ! universal.c
-____________________________________________________________________________
-[ 5108] By: gsar on 2000/02/15 18:25:05
- Log: avoid accidental #line directives (from Rick Delaney
- <rick@consumercontact.com>)
- Branch: perl
- ! pod/perlsyn.pod toke.c
-____________________________________________________________________________
-[ 5107] By: gsar on 2000/02/15 18:04:31
- Log: locale guards needed (from Simon Cozens <simon@brecon.co.uk>)
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 5106] By: gsar on 2000/02/15 18:02:17
- Log: incorrect docs about delete() (spotted by Martyn Pearce
- <martyn@inpharmatica.co.uk>)
- Branch: perl
- ! pod/perldelta.pod pod/perlfunc.pod
-____________________________________________________________________________
-[ 5105] By: gsar on 2000/02/15 17:43:27
- Log: s/use vars/our/ (from Gisle Aas)
- Branch: perl
- ! bytecode.pl
-____________________________________________________________________________
-[ 5104] By: gsar on 2000/02/15 17:42:06
- Log: optimize pseudohash slice in array slice at compile time (from
- John Tobey <jtobey@john-edwin-tobey.org>)
- Branch: perl
- ! op.c t/lib/fields.t
-____________________________________________________________________________
-[ 5103] By: gsar on 2000/02/15 17:18:12
- Log: provide malloc stats via get_mstats() (from Ilya Zakharevich)
- Branch: perl
- ! embed.h embed.pl global.sym makedef.pl malloc.c objXSUB.h
- ! perl.h perlapi.c proto.h vos/vos_dummies.c
-____________________________________________________________________________
-[ 5102] By: gsar on 2000/02/15 17:05:12
- Log: doc patches from Rick Delaney and Chris Nandor; update Todo-5.6
- Branch: perl
- ! Todo-5.6 pod/perldata.pod pod/perlport.pod
-____________________________________________________________________________
-[ 5101] By: gsar on 2000/02/15 17:02:51
- Log: fix regen_headers target to make all the autogenerated files
- writable first
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 5100] By: gsar on 2000/02/15 16:41:53
- Log: fix misoptimization of C<my($x,$y); $x = $y = 1 + $z;> (from
- Ilya Zakharevich)
- Branch: perl
- ! op.c t/op/lex_assign.t
-____________________________________________________________________________
-[ 5099] By: gsar on 2000/02/15 16:17:36
- Log: more complete File::Spec support for Mac and VMS, tests (from
- Barrie Slaymaker <barries@slaysys.com>)
- Branch: perl
- ! lib/File/Spec/Mac.pm lib/File/Spec/Unix.pm
- ! lib/File/Spec/VMS.pm lib/File/Spec/Win32.pm t/lib/filespec.t
-____________________________________________________________________________
-[ 5098] By: gsar on 2000/02/15 16:10:46
- Log: fix incompatibility with bison generated parser (from
- Ignasi Roca <ignasi.roca@fujitsu.siemens.es>)
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 5097] By: gsar on 2000/02/15 16:07:17
- Log: propagate st_mode bits to group/other for Borland build
- (from Vadim Konovalov <vkonovalov@lucent.com>)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 5096] By: jhi on 2000/02/15 14:22:23
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> win32/Makefile win32/bin/exetype.pl win32/makefile.mk
-____________________________________________________________________________
-[ 5095] By: jhi on 2000/02/15 14:19:22
- Log: cc_r can be in different places (/usr/ibmcxx/bin or /usr/bin),
- easier just to drop the paranoid test.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 5094] By: gsar on 2000/02/15 05:42:17
- Log: update exetype.pl tool
- Branch: perl
- ! win32/Makefile win32/bin/exetype.pl win32/makefile.mk
-____________________________________________________________________________
-[ 5093] By: jhi on 2000/02/15 05:24:02
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Porting/pumpkin.pod embed.h embed.pl ext/DB_File/DB_File.xs
- !> ext/GDBM_File/GDBM_File.xs ext/NDBM_File/NDBM_File.xs
- !> ext/ODBM_File/ODBM_File.xs ext/SDBM_File/SDBM_File.xs hv.c
- !> perl.c proto.h sv.c t/op/ord.t t/pragma/warnings.t
-____________________________________________________________________________
-[ 5092] By: jhi on 2000/02/15 05:22:09
- Log: Unroll the libs scan thanks to HP-UX.
- Branch: cfgperl
- ! Configure config_h.SH hints/hpux.sh
- Branch: metaconfig
- ! U/modified/libpth.U U/modified/libs.U
- Branch: metaconfig/U/perl
- ! Extensions.U dlsrc.U
-____________________________________________________________________________
-[ 5091] By: gsar on 2000/02/15 05:17:56
- Log: fix leaks in *DBM_File; safemalloc()ed things need to be freed with
- safefree() rather than Safefree()
- Branch: perl
- ! ext/DB_File/DB_File.xs ext/GDBM_File/GDBM_File.xs
- ! ext/NDBM_File/NDBM_File.xs ext/ODBM_File/ODBM_File.xs
- ! ext/SDBM_File/SDBM_File.xs
-____________________________________________________________________________
-[ 5090] By: gsar on 2000/02/15 04:54:17
- Log: fix memory leak in C<$x = *Y> provoked by change#4198, which
- introduced XPVMG storage in arenas
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5089] By: jhi on 2000/02/15 00:41:36
- Log: AIX perl linkage tweakage.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 5088] By: jhi on 2000/02/15 00:07:06
- Log: abort instead of just promising.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 5087] By: jhi on 2000/02/14 23:51:05
- Log: silly compilers don't know that croak() exits
- and complain about unitialized RETVALs
- Branch: cfgperl
- ! ext/Sys/Syslog/Syslog.xs
-____________________________________________________________________________
-[ 5086] By: jhi on 2000/02/14 21:13:24
- Log: Add lseektype and lseeksize to myconfig.
- Branch: cfgperl
- ! myconfig.SH
-____________________________________________________________________________
-[ 5085] By: gsar on 2000/02/14 18:51:11
- Log: avoid warnings
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 5084] By: gsar on 2000/02/14 18:26:08
- Log: fix small interpreter leaks identified by Purify
- Branch: perl
- ! Porting/pumpkin.pod embed.h embed.pl hv.c perl.c proto.h sv.c
- ! t/op/ord.t t/pragma/warnings.t
-____________________________________________________________________________
-[ 5083] By: jhi on 2000/02/14 17:50:52
- Log: Remove tagged core files.
- Branch: cfgperl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 5082] By: jhi on 2000/02/14 17:41:07
- Log: Prefer full_ar.
- Branch: cfgperl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 5081] By: jhi on 2000/02/14 17:20:32
- Log: Add ivtype, ivsize, nvtype, nvsize to myconfig.
- Branch: cfgperl
- ! myconfig.SH
-____________________________________________________________________________
-[ 5080] By: jhi on 2000/02/14 15:33:03
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Porting/pumpkin.pod av.c malloc.c sv.c
-____________________________________________________________________________
-[ 5079] By: gsar on 2000/02/14 08:50:06
- Log: notes about running Purify
- Branch: perl
- ! Porting/pumpkin.pod av.c sv.c
-____________________________________________________________________________
-[ 5078] By: gsar on 2000/02/14 07:27:21
- Log: use system malloc() instead of sbrk() in Perl_malloc() under -DPURIFY
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 5077] By: gsar on 2000/02/14 07:25:44
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH epoc/config.sh hints/aix.sh hints/hpux.sh
- !> hints/irix_6.sh hints/solaris_2.sh perl.h pod/perldelta.pod
- !> vms/subconfigure.com vos/config.def vos/config.h
- !> vos/config_h.SH_orig win32/config.bc win32/config.gc
- !> win32/config.vc win32/config_H.bc win32/config_H.gc
- !> win32/config_H.vc
-____________________________________________________________________________
-[ 5076] By: jhi on 2000/02/14 05:01:56
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> embed.h embed.pl objXSUB.h perl.c perlapi.c proto.h sv.c
-____________________________________________________________________________
-[ 5075] By: jhi on 2000/02/14 04:56:52
- Log: Configure -A stopped processing of any further options.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Options.U
-____________________________________________________________________________
-[ 5074] By: gsar on 2000/02/14 04:45:01
- Log: remove outdated -DPURIFY code--it reports bogus errors during global
- destruction since we actually depend on SVs being in arenas there
- Branch: perl
- ! embed.h embed.pl objXSUB.h perl.c perlapi.c proto.h sv.c
-____________________________________________________________________________
-[ 5073] By: jhi on 2000/02/13 19:28:17
- Log: Integrate with Sarathy.
- Branch: cfgperl
- - Todo-5.005
- !> cop.h op.c perl.c pp_ctl.c regcomp.c regexec.c scope.c sv.c
- !> util.c
-____________________________________________________________________________
-[ 5072] By: gsar on 2000/02/13 19:02:07
- Log: more purification (pp_require() could access free memory; vdie()
- could think message was random length when passed a null argument;
- utilize() didn't set up the hash for the method name leading to
- pp_method_named() accessing random state; PL_curpm wasn't zeroed
- properly)
- Branch: perl
- ! cop.h op.c perl.c pp_ctl.c regcomp.c regexec.c scope.c sv.c
- ! util.c
-____________________________________________________________________________
-[ 5071] By: jhi on 2000/02/12 19:59:35
- Log: uselonglong sits deep.
- Branch: cfgperl
- ! Configure config_h.SH hints/solaris_2.sh
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 5070] By: jhi on 2000/02/12 01:25:41
- Log: megalomaniac 64-bit update: most importantly,
- uselonglong is eradicated, only backward
- compatibility hooks in use64bits remain.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH epoc/config.sh hints/aix.sh hints/hpux.sh
- ! hints/irix_6.sh hints/solaris_2.sh perl.h vms/subconfigure.com
- ! vos/config.def vos/config.h vos/config_h.SH_orig
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U U/modified/libpth.U U/modified/libs.U
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 5069] By: jhi on 2000/02/11 21:13:41
- Log: undo #5064 for now; there seems to be no good selection
- of flags to add the new option.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5068] By: jhi on 2000/02/11 21:01:21
- Log: Guard against accidental long long use.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 5067] By: jhi on 2000/02/11 19:50:32
- Log: logic fixes
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! uselonglong.U
-____________________________________________________________________________
-[ 5066] By: jhi on 2000/02/11 19:32:30
- Log: Clarify 64-bit issues.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5065] By: jhi on 2000/02/11 18:13:29
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> ext/Devel/Peek/Peek.xs regcomp.c t/comp/require.t t/comp/use.t
- !> toke.c
-____________________________________________________________________________
-[ 5064] By: jhi on 2000/02/11 18:11:47
- Log: Silence linker warnings about binary backward incompatibilities.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5063] By: gsar on 2000/02/11 16:36:14
- Log: fix uninitialized memory reads found by purify
- Branch: perl
- ! ext/Devel/Peek/Peek.xs regcomp.c
-____________________________________________________________________________
-[ 5062] By: jhi on 2000/02/11 00:11:39
- Log: de-fancify the largefiles hints
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 5061] By: gsar on 2000/02/10 19:17:09
- Log: longstanding bug in parsing "require VERSION", could reallocate
- current line and not know it; exposed by change#5004; manifested
- as parse failure of C<{require 5.003}>
- Branch: perl
- ! t/comp/require.t t/comp/use.t toke.c
-____________________________________________________________________________
-[ 5060] By: jhi on 2000/02/10 13:29:25
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> makedef.pl pp_ctl.c t/op/write.t win32/vdir.h
-____________________________________________________________________________
-[ 5059] By: gsar on 2000/02/10 06:21:21
- Log: make global symbol exports AIX-specific
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 5058] By: gsar on 2000/02/10 06:16:57
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure Makefile.SH Porting/Glossary Porting/config.sh
- !> Porting/config_H config_h.SH makedef.pl perl.h
- !> vms/subconfigure.com vos/config.def win32/config.bc
- !> win32/config.gc win32/config.vc win32/config_H.bc
- !> win32/config_H.gc win32/config_H.vc win32/config_h.PL
- !> win32/config_sh.PL
-____________________________________________________________________________
-[ 5057] By: gsar on 2000/02/10 01:08:01
- Log: windows bugfixes for virtual directories under USE_ITHREADS:
- allows path mapping to unknown devices to work properly;
- special file names like CONOUT$ can be opened with sysopen()
- again
- Branch: perl
- ! win32/vdir.h
-____________________________________________________________________________
-[ 5056] By: gsar on 2000/02/10 00:56:27
- Log: formline() could wipe out readonly-ness, freeing constants
- prematurely, or affect cloning of pad constants
- Branch: perl
- ! pp_ctl.c t/op/write.t
-____________________________________________________________________________
-[ 5055] By: jhi on 2000/02/09 19:48:58
- Log: Regenerate Configure for I_SYSLOG.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 5054] By: jhi on 2000/02/09 19:38:04
- Log: fix AIX and multiplicity problems
- Branch: cfgperl
- ! Makefile.SH makedef.pl
-____________________________________________________________________________
-[ 5053] By: bailey on 2000/02/09 10:58:11
- Log: remove redundant archcore directory prefix in installperl
- Branch: vmsperl
- ! installperl
-____________________________________________________________________________
-[ 5052] By: bailey on 2000/02/09 10:44:22
- Log: Work around prefixing bug in older DECC preprocessors
- Branch: vmsperl
- ! vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 5051] By: bailey on 2000/02/09 09:52:06
- Log: Eliminate unnecessary (and sometimes confounding) test for
- word boundary
- Branch: vmsperl
- ! lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 5050] By: bailey on 2000/02/09 09:29:06
- Log: Minor fixes to assuage picky compilers (unsigned comparisons and
- alias rules lead to compilation warnings)
- Branch: vmsperl
- ! av.c mg.h pp_sys.c scope.c sv.c vms/vms.c
-____________________________________________________________________________
-[ 5049] By: bailey on 2000/02/09 09:09:45
- Log: Resync with mainline
- Branch: vmsperl
- +> Todo-5.6 ext/Sys/Syslog/Makefile.PL ext/Sys/Syslog/Syslog.pm
- +> ext/Sys/Syslog/Syslog.xs lib/Pod/Find.pm lib/Pod/ParseUtils.pm
- +> pod/perlapi.pod pod/perlintern.pod pod/perlunicode.pod
- +> t/op/exists_sub.t t/op/ver.t t/pragma/diagnostics.t
- +> vos/config.def vos/config.pl win32/bin/exetype.pl
- - Todo-5.005 lib/Sys/Syslog.pm lib/caller.pm
- ! vms/subconfigure.com
- !> (integrate 358 files)
-____________________________________________________________________________
-[ 5048] By: jhi on 2000/02/09 03:54:05
- Log: OS/2 gcc doesn't like -o foo.exe and -Zexe simultaneously
- (reported by Yitzchak Scott-Thoennes in p5p)
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 5047] By: jhi on 2000/02/09 02:56:43
- Log: (fake) use of getcwd.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.h
-____________________________________________________________________________
-[ 5046] By: jhi on 2000/02/09 02:22:50
- Log: lib scan fix
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/libs.U
-____________________________________________________________________________
-[ 5045] By: jhi on 2000/02/09 02:17:34
- Log: Reintroduce #5019 via metaconfig.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/installdirs/inc_version_list.U
-____________________________________________________________________________
-[ 5044] By: jhi on 2000/02/09 02:07:08
- Log: Add/restore probes for getcwd/mk*temp*/mmap.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.h vms/subconfigure.com vos/config.def
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/config_h.PL win32/config_sh.PL
- Branch: metaconfig
- ! U/modified/d_mkstemp.U U/modified/libs.U
- Branch: metaconfig/U/perl
- + d_mkdtemp.U d_mkstemps.U
-____________________________________________________________________________
-[ 5043] By: jhi on 2000/02/08 20:58:02
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> Todo-5.6 t/op/ver.t win32/bin/exetype.pl
- !> (integrate 110 files)
-____________________________________________________________________________
-[ 5042] By: gsar on 2000/02/08 20:32:12
- Log: avoid exiting just because we didn't scan for libm ('libs' may still
- have it, but we avoided scan for things in 'libs')
- Branch: perl
- ! Configure
-
-----------------
-Version v5.5.650
-----------------
-
-____________________________________________________________________________
-[ 5041] By: gsar on 2000/02/08 07:57:11
- Log: update Changes
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 5040] By: gsar on 2000/02/08 07:51:20
- Log: documentation patches (from Michael Schwern and Yitzchak
- Scott-Thoennes)
- Branch: perl
- ! av.c hv.c lib/UNIVERSAL.pm pod/perlapi.pod
-____________________________________________________________________________
-[ 5039] By: gsar on 2000/02/08 07:22:46
- Log: alias to $^V to $PERL_VERSION_TUPLE
- Branch: perl
- ! lib/English.pm pod/perlvar.pod
-____________________________________________________________________________
-[ 5038] By: gsar on 2000/02/08 07:03:34
- Log: update Changes
- Branch: perl
- ! Changes pod/perlhist.pod
-____________________________________________________________________________
-[ 5037] By: gsar on 2000/02/08 06:59:55
- Log: Windows has a somewhat different sitelib layout, and needs
- $sitelib/archname added as well
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 5036] By: gsar on 2000/02/08 06:59:03
- Log: change#4987 appears to have broken libs scan for platforms that
- don't set ignore_versioned_solibs (Solaris is one of them); add
- derivative fix from the older logic for skipping versioned .so
- libs
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 5035] By: gsar on 2000/02/07 21:21:44
- Log: sprintf("%v"...) buffer resizing busted
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 5034] By: gsar on 2000/02/07 19:16:21
- Log: update Changes
- Branch: perl
- ! Changes pod/perlhist.pod
-____________________________________________________________________________
-[ 5033] By: gsar on 2000/02/07 19:01:08
- Log: stringify "\x{FFF}" to utf8 correctly; set SvUTF8 on "\x{XX}"
- only when XX > 127
- Branch: perl
- ! pp_hot.c toke.c
-____________________________________________________________________________
-[ 5032] By: gsar on 2000/02/07 18:25:31
- Log: add note about printf("%v",...)
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 5031] By: gsar on 2000/02/07 18:18:43
- Log: update Changes
- Branch: perl
- ! Changes Todo-5.6
-____________________________________________________________________________
-[ 5030] By: gsar on 2000/02/07 18:17:49
- Log: thinko in change#5029
- Branch: perl
- ! gv.c
-____________________________________________________________________________
-[ 5029] By: gsar on 2000/02/07 17:49:58
- Log: change $^U to $^WIDE_SYSTEM_CALLS; s/PL_bigchar/PL_widesyscalls/;
- introduce -C switch (sets $^WIDE_SYSTEM_CALLS)
- Branch: perl
- ! embedvar.h gv.c intrpvar.h mg.c perl.c perlapi.h
- ! pod/perlrun.pod pod/perlunicode.pod pod/perlvar.pod
- ! win32/win32.h
-____________________________________________________________________________
-[ 5028] By: gsar on 2000/02/07 17:10:03
- Log: perlport updates (from Peter Prymmer)
- Branch: perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 5027] By: gsar on 2000/02/07 16:53:47
- Log: fix up Todo-5.6
- Branch: perl
- ! Todo-5.6
-____________________________________________________________________________
-[ 5026] By: gsar on 2000/02/07 16:32:31
- Log: rename Todo-5.005 to Todo-5.6
- Branch: perl
- +> Todo-5.6
- - Todo-5.005
- ! MANIFEST
-____________________________________________________________________________
-[ 5025] By: gsar on 2000/02/07 16:09:54
- Log: ${^Warnings} renamed to ${^WARNING_BITS}
- Branch: perl
- ! gv.c lib/warnings.pm mg.c pod/perltoc.pod pod/perlvar.pod
- ! toke.c warnings.pl
-____________________________________________________________________________
-[ 5024] By: gsar on 2000/02/07 11:47:06
- Log: various Windows tweaks: make $^E a little less buggy by saving
- and restoring system error across TLS fetch; avoid needless
- copying of buffers
- Branch: perl
- ! win32/Makefile win32/makefile.mk win32/perllib.c win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 5023] By: gsar on 2000/02/07 11:44:19
- Log: avoid MakeMaker setting $^W=1
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 5022] By: gsar on 2000/02/07 10:38:56
- Log: up to v5.5.650
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 5021] By: gsar on 2000/02/07 10:10:31
- Log: mention threads status in pod
- Branch: perl
- ! ext/Thread/Thread.pm
-____________________________________________________________________________
-[ 5020] By: gsar on 2000/02/07 09:57:46
- Log: tolerate NULL SITELIB_EXP
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 5019] By: gsar on 2000/02/07 09:46:11
- Log: NULL-terminate PERL_INC_VERSION_LIST
- Branch: perl
- ! Configure perl.c win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc
-____________________________________________________________________________
-[ 5018] By: gsar on 2000/02/07 09:13:10
- Log: add compatible versions from $Config{inc_ver_list} to search
- paths automatically (from Tom Hughes <tom@compton.nu>)
- Branch: perl
- ! lib/lib.pm perl.c
-____________________________________________________________________________
-[ 5017] By: gsar on 2000/02/07 08:58:56
- Log: makefiles now use exetype.pl to make wperl.exe
- Branch: perl
- ! sv.c win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 5016] By: gsar on 2000/02/07 08:38:25
- Log: add exetype.pl (from Jan Dubois)
- Branch: perl
- + win32/bin/exetype.pl
- ! MANIFEST
-____________________________________________________________________________
-[ 5015] By: gsar on 2000/02/07 08:29:28
- Log: pod fixes (from Abigail and M J T Guy)
- Branch: perl
- ! Changes README.os2 gv.c pod/perlapi.pod pod/perldebug.pod
- ! pod/perldelta.pod pod/perldiag.pod pod/perlopentut.pod
- ! pod/perlport.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 5014] By: gsar on 2000/02/07 07:09:08
- Log: clarify behavior of vec() when arguments are off the end of the
- string (from M J T Guy)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 5013] By: gsar on 2000/02/07 07:08:15
- Log: remove $^U dependent behaviors in runtime; chr() and sprintf('%c',...)
- now return bytes all the way to 255, they will be transparently
- coerced (in future) to UTF-8 when they are used in operations
- involving other UTF-8 strings; C<use utf8> doesn't set $^U anymore
- Branch: perl
- ! lib/byte.pm lib/utf8.pm pod/perlunicode.pod pod/perlvar.pod
- ! pp.c sv.c
-____________________________________________________________________________
-[ 5012] By: gsar on 2000/02/07 06:36:33
- Log: partly revert change#4851, apparently POSIX::uname() may not be correct
- per strict reading of standard (says Tom Christiansen)
- Branch: perl
- ! lib/Sys/Hostname.pm
-____________________________________________________________________________
-[ 5011] By: gsar on 2000/02/07 06:26:30
- Log: allow 64-bit utf8-encoded integers (from Ilya Zakharevich)
- Branch: perl
- ! utf8.c utf8.h
-____________________________________________________________________________
-[ 5010] By: gsar on 2000/02/06 21:27:03
- Log: fix debug code in Perl_malloc() (from Ilya Zakharevich)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 5009] By: gsar on 2000/02/06 20:45:30
- Log: set SvUTF8 on vectors only if there are chars > 127; update copyright
- years (from Gisle Aas)
- Branch: perl
- ! EXTERN.h INTERN.h README av.c av.h cop.h cv.h deb.c doio.c
- ! doop.c dump.c form.h gv.c gv.h handy.h hv.c hv.h mg.c mg.h
- ! op.c op.h perl.c perl.h perlio.c perly.y pp.c pp.h pp_ctl.c
- ! pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c sv.c sv.h
- ! toke.c utf8.c utf8.h util.c util.h
-____________________________________________________________________________
-[ 5008] By: gsar on 2000/02/06 19:28:31
- Log: use builtin __CYGWIN__ rather than -DCYGWIN (from Eric Fifer
- <EFifer@sanwaint.com>)
- Branch: perl
- ! EXTERN.h XSUB.h doio.c ext/POSIX/POSIX.xs
- ! ext/SDBM_File/sdbm/pair.c ext/SDBM_File/sdbm/sdbm.c
- ! hints/cygwin.sh lib/ExtUtils/MM_Cygwin.pm mg.c perl.h
- ! unixish.h util.c
-____________________________________________________________________________
-[ 5007] By: gsar on 2000/02/06 17:47:01
- Log: reduce memory consumption of POSIX.pm (from Ilya Zakharevich)
- Branch: perl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 5006] By: gsar on 2000/02/06 17:28:35
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure config_h.SH ext/Sys/Syslog/Syslog.xs hints/hpux.sh
- !> perl.h pp_sys.c
-____________________________________________________________________________
-[ 5005] By: gsar on 2000/02/06 17:18:39
- Log: VOS port updates (from Paul Green <Paul_Green@stratus.com>)
- Branch: perl
- ! README.vos pod/perlport.pod vos/Changes vos/build.cm
- ! vos/compile_perl.cm vos/config.def vos/config.h vos/config.pl
- ! vos/config_h.SH_orig vos/perl.bind vos/test_vos_dummies.c
- ! vos/vos_dummies.c vos/vosish.h
-____________________________________________________________________________
-[ 5004] By: gsar on 2000/02/06 17:00:49
- Log: fix parse error on C<{ use strict }> and other constructs that
- make the parser reenter while LEX_KNOWNEXT is active
- Branch: perl
- ! t/comp/use.t toke.c
-____________________________________________________________________________
-[ 5003] By: gsar on 2000/02/06 14:57:30
- Log: avoid -Bforcearchive on netbsd too
- Branch: perl
- ! Changes hints/netbsd.sh
-____________________________________________________________________________
-[ 5002] By: gsar on 2000/02/06 14:45:17
- Log: revised notes about Pod::Parser & Co.
- Branch: perl
- ! lib/Pod/Usage.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 5001] By: gsar on 2000/02/06 14:02:43
- Log: fix description of obsolete diagnostic
- Branch: perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 5000] By: gsar on 2000/02/06 13:59:58
- Log: allow "\x{12ab}" even without C<use utf8>
- Branch: perl
- ! t/pragma/warn/toke toke.c
-____________________________________________________________________________
-[ 4999] By: gsar on 2000/02/06 13:58:31
- Log: make perlbug use new-style version numbers; improve compatibility
- (runs with perl 5.005); fix swapped old vs new version reporting
- Branch: perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 4998] By: gsar on 2000/02/06 13:56:45
- Log: support sprintf("v%v", v1.2.3) (works on any string argument, in
- fact); add tests for version tuples
- Branch: perl
- + t/op/ver.t
- ! MANIFEST perl.c pod/perldiag.pod pod/perlfunc.pod
- ! pod/perlop.pod sv.c toke.c
-____________________________________________________________________________
-[ 4997] By: gsar on 2000/02/04 21:40:08
- Log: change#4970 fallout for useithreads
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 4996] By: jhi on 2000/02/04 20:09:00
- Log: Largefilify offsets of tied handles.
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 4995] By: jhi on 2000/02/04 19:54:25
- Log: Sanity check for libraries scan.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/libs.U
-____________________________________________________________________________
-[ 4994] By: jhi on 2000/02/04 19:48:42
- Log: HP-UX largefileness doesn't like lseek being redeclared;
- no more USE_LONG_LONG.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4993] By: jhi on 2000/02/04 19:18:59
- Log: fix the description as much as possible; the whole
- separation into three different symbols lists is
- pretty broken now.
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 4992] By: jhi on 2000/02/04 19:13:10
- Log: Use <syslog.h>, not <sys/syslog.h>.
- Branch: cfgperl
- ! Configure config_h.SH ext/Sys/Syslog/Syslog.xs
-____________________________________________________________________________
-[ 4991] By: gsar on 2000/02/04 19:11:07
- Log: dmake is on CPAN now
- Branch: perl
- ! README.win32
-____________________________________________________________________________
-[ 4990] By: jhi on 2000/02/04 19:04:01
- Log: Re-introduce #4817 and #4964 wiped out by #4987.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/threads/usethreads.U
- Branch: metaconfig/U/perl
- ! patchlevel.U
-____________________________________________________________________________
-[ 4989] By: jhi on 2000/02/04 18:54:00
- Log: typo fix
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/libs.U
-____________________________________________________________________________
-[ 4988] By: jhi on 2000/02/04 18:34:06
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> ext/Sys/Syslog/Makefile.PL ext/Sys/Syslog/Syslog.pm
- +> ext/Sys/Syslog/Syslog.xs
- - lib/Sys/Syslog.pm
- !> (integrate 37 files)
-____________________________________________________________________________
-[ 4987] By: jhi on 2000/02/04 18:31:05
- Log: Configure megamaintenance. Cppsym (hopefully) final spasms;
- default is to use long long if available; various nits
- here and there; fixed to hpux 64-bitnes and largefileness.
- Branch: cfgperl
- ! Configure config_h.SH hints/hpux.sh perl.h
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U U/modified/Cppsym.U
- ! U/modified/d_gethname.U U/modified/libpth.U U/modified/libs.U
- Branch: metaconfig/U/perl
- ! d_fseeko.U d_ftello.U dlsrc.U uselongdbl.U uselonglong.U
- ! usemultiplicity.U xs_apiversion.U
-____________________________________________________________________________
-[ 4986] By: gsar on 2000/02/04 17:26:37
- Log: avoid bad cast warnings (from Robin Barker <rmb1@cise.npl.co.uk>)
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 4985] By: gsar on 2000/02/04 16:43:49
- Log: avoid 'na' (spotted by Yitzchak Scott-Thoennes <sthoenna@efn.org>)
- Branch: perl
- ! ext/Devel/DProf/DProf.xs
-____________________________________________________________________________
-[ 4984] By: gsar on 2000/02/04 08:20:05
- Log: CPAN.pm updated to v1.52 (from Andreas Koenig)
- Branch: perl
- ! lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
-____________________________________________________________________________
-[ 4983] By: gsar on 2000/02/04 08:00:38
- Log: updated OpenBSD hints (From Todd C. Miller <Todd.Miller@courtesan.com>)
- Branch: perl
- ! hints/openbsd.sh
-____________________________________________________________________________
-[ 4982] By: gsar on 2000/02/04 07:54:04
- Log: pod typos (from Gregor N. Purdy <gregor@focusresearch.com>)
- Branch: perl
- ! lib/Pod/Parser.pm
-____________________________________________________________________________
-[ 4981] By: gsar on 2000/02/04 07:34:38
- Log: avoid assuming cc accepts -o switch (from Tom Hughes)
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4980] By: gsar on 2000/02/04 07:29:59
- Log: Sys::Syslog goes the XS way (from Tom Hughes <tom@compton.nu>)
- Branch: perl
- + ext/Sys/Syslog/Makefile.PL ext/Sys/Syslog/Syslog.pm
- + ext/Sys/Syslog/Syslog.xs
- - lib/Sys/Syslog.pm
- ! MANIFEST pod/perldelta.pod
-____________________________________________________________________________
-[ 4979] By: gsar on 2000/02/04 07:13:19
- Log: pod updates (from David Adler, M J T Guy)
- Branch: perl
- ! pod/perlfaq2.pod pod/perlop.pod pod/perlsyn.pod
-____________________________________________________________________________
-[ 4978] By: gsar on 2000/02/04 07:08:14
- Log: typos in config_h.SH (from Paul_Green@vos.stratus.com)
- Branch: perl
- ! config_h.SH
-____________________________________________________________________________
-[ 4977] By: gsar on 2000/02/04 07:06:10
- Log: avoid adding null components to LD_LIBRARY_PATH, OpenBSD has trouble
- with them (from Todd C. Miller <Todd.Miller@courtesan.com>)
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4976] By: gsar on 2000/02/04 06:33:43
- Log: VMS update (from Dan Sugalski and Peter Prymmer)
- Branch: perl
- ! configure.com vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 4975] By: gsar on 2000/02/04 05:51:14
- Log: patch to provide more informative names for evals and anonymous
- subroutines (from Ilya Zakharevich)
- Branch: perl
- ! ext/Devel/Peek/Peek.pm ext/Devel/Peek/Peek.xs lib/Dumpvalue.pm
- ! lib/dumpvar.pl lib/perl5db.pl op.c perl.h pod/perldebug.pod
- ! pod/perlvar.pod pp_ctl.c
-____________________________________________________________________________
-[ 4974] By: gsar on 2000/02/04 05:05:57
- Log: off-by-one in malloc.c (from Ilya Zakharevich)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 4973] By: gsar on 2000/02/04 05:03:00
- Log: OS/2 build fixups from Ilya Zakharevich
- Branch: perl
- ! ext/Devel/DProf/DProf.xs os2/Makefile.SHs t/op/fork.t
-____________________________________________________________________________
-[ 4972] By: gsar on 2000/02/04 04:58:57
- Log: avoid /* within comment
- Branch: perl
- ! xsutils.c
-____________________________________________________________________________
-[ 4971] By: gsar on 2000/02/04 04:56:09
- Log: another HINT_BYTE victim
- Branch: perl
- ! lib/charnames.pm
-____________________________________________________________________________
-[ 4970] By: gsar on 2000/02/04 04:45:13
- Log: fix pad_alloc panic from C<my $w; sub { my($i) = @_; sub { $w } }>
- Branch: perl
- ! op.c scope.c scope.h t/op/closure.t toke.c
-____________________________________________________________________________
-[ 4969] By: gsar on 2000/02/04 01:09:37
- Log: byte.pm and HINT_BYTE don't match (0x8, not 0x10!)
- Branch: perl
- ! lib/byte.pm
-____________________________________________________________________________
-[ 4968] By: jhi on 2000/02/02 13:17:25
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/Pod/Find.pm lib/Pod/ParseUtils.pm
- ! Configure
- !> (integrate 29 files)
-
-----------------
-Version v5.5.640
-----------------
-
-____________________________________________________________________________
-[ 4967] By: gsar on 2000/02/02 12:22:29
- Log: update makerel for new version format
- Branch: perl
- ! Changes Porting/makerel
-____________________________________________________________________________
-[ 4966] By: gsar on 2000/02/02 11:42:03
- Log: workaround for undefined symbol
- Branch: perl
- ! win32/win32.h
-____________________________________________________________________________
-[ 4965] By: gsar on 2000/02/02 11:19:19
- Log: on cygwin, h_errno is now "__declspec(dllimport) int h_errno"
- (from Eric Fifer <EFifer@sanwaint.com>)
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 4964] By: gsar on 2000/02/02 11:11:15
- Log: adjust notes on use5005threads
- Branch: perl
- ! Configure INSTALL README.threads
-____________________________________________________________________________
-[ 4963] By: gsar on 2000/02/02 10:14:30
- Log: fix typo
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 4962] By: gsar on 2000/02/02 10:13:10
- Log: integrate selected changes from cfgperl (#4899,4900,4904,4918)
- Branch: perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH ext/IO/IO.xs lib/Benchmark.pm
-____________________________________________________________________________
-[ 4961] By: gsar on 2000/02/02 09:55:45
- Log: PodParser-1.092 update via CPAN (from Brad Appleton)
- Branch: perl
- + lib/Pod/Find.pm lib/Pod/ParseUtils.pm
- ! MANIFEST lib/Pod/Checker.pm t/pod/poderrs.t t/pod/poderrs.xr
-____________________________________________________________________________
-[ 4960] By: gsar on 2000/02/02 08:22:31
- Log: replace misleading docs with a BUGS section
- Branch: perl
- ! lib/English.pm
-____________________________________________________________________________
-[ 4959] By: gsar on 2000/02/02 08:16:17
- Log: remove FUD from perlfunc/use (from M J T Guy)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4958] By: gsar on 2000/02/02 08:13:04
- Log: Benchmark displays bogus CPU stats (suggested by Cedric Auzanne
- <cedric.auzanne@nist.gov>)
- Branch: perl
- ! Changes lib/Benchmark.pm
-____________________________________________________________________________
-[ 4957] By: gsar on 2000/02/02 08:04:52
- Log: fix coredump on C<"x" =~ /x/; print @-> (from Ilya Zakharevich)
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 4956] By: gsar on 2000/02/02 08:02:57
- Log: flock() pod talks about "adding" in the sense of "or-ing"
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4955] By: gsar on 2000/02/02 07:58:35
- Log: fixes for switching files in the debugger (from Ilya Zakharevich)
- Branch: perl
- ! lib/perl5db.pl pod/perldebug.pod
-____________________________________________________________________________
-[ 4954] By: gsar on 2000/02/02 07:53:51
- Log: use warnings rather than fiddling with $^W (from Paul Marquess)
- Branch: perl
- ! lib/Cwd.pm lib/English.pm lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MM_Win32.pm lib/ExtUtils/Manifest.pm lib/Fatal.pm
- ! lib/File/Spec/Win32.pm lib/Math/BigFloat.pm
- ! lib/Text/ParseWords.pm lib/utf8_heavy.pl
-____________________________________________________________________________
-[ 4953] By: gsar on 2000/02/02 07:40:33
- Log: dynixptx hints tweak (from Martin J. Bligh <mbligh@sequent.com>)
- Branch: perl
- ! hints/dynixptx.sh
-____________________________________________________________________________
-[ 4952] By: gsar on 2000/02/02 07:36:39
- Log: deltanotes on weakrefs and Pod::Parser (from Tuomas Lukka and
- Brad Appleton)
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4951] By: gsar on 2000/02/02 06:54:22
- Log: avoid mismatched type warnings
- Branch: perl
- ! embed.pl perlapi.h
-____________________________________________________________________________
-[ 4950] By: jhi on 2000/02/02 06:49:10
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> pod/perlunicode.pod
- !> MANIFEST Makefile.SH lib/File/Spec/Win32.pm lib/Text/Tabs.pm
- !> lib/byte.pm lib/byte_heavy.pl lib/utf8.pm lib/warnings.pm
- !> makedef.pl op.c perl.h pod/perldelta.pod pp_ctl.c regcomp.c
- !> regexec.c t/pragma/warn/2use utf8.h utils/perldoc.PL
- !> vms/descrip_mms.template warnings.pl
-____________________________________________________________________________
-[ 4949] By: gsar on 2000/02/02 06:41:17
- Log: fix broken abs2rel() (from François Allard <franka@host.ott.igs.net>)
- Branch: perl
- ! lib/File/Spec/Win32.pm
-____________________________________________________________________________
-[ 4948] By: gsar on 2000/02/02 06:30:41
- Log: makefile tweak
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4947] By: gsar on 2000/02/02 06:27:43
- Log: future-proof unknown warning categories (from Greg Bacon
- <gbacon@cs.uah.edu>)
- Branch: perl
- ! lib/warnings.pm t/pragma/warn/2use warnings.pl
-____________________________________________________________________________
-[ 4946] By: gsar on 2000/02/02 06:21:34
- Log: doc tweak (from Michael G Schwern <schwern@pobox.com>)
- Branch: perl
- ! lib/Text/Tabs.pm
-____________________________________________________________________________
-[ 4945] By: gsar on 2000/02/02 06:03:04
- Log: more meaningful message on invalid pattern argument (from
- Kevin Meltzer <KMeltzer@USCO.com>)
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 4944] By: gsar on 2000/02/02 05:43:49
- Log: XSLoader build patch for VMS (from Craig A. Berry
- <craig.berry@metamorgs.com>)
- Branch: perl
- ! vms/descrip_mms.template
-____________________________________________________________________________
-[ 4943] By: gsar on 2000/02/02 03:40:49
- Log: reword some sections of perlunicode.pod
- Branch: perl
- ! pod/perlunicode.pod
-____________________________________________________________________________
-[ 4942] By: gsar on 2000/02/01 21:02:01
- Log: AIX warning on undefined symbol
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 4941] By: gsar on 2000/02/01 20:29:30
- Log: HINT_UTF8 is not propagated to the op tree anymore; add a
- perlunicode.pod that reflects changes to unicode support so far
- Branch: perl
- + pod/perlunicode.pod
- ! MANIFEST lib/byte.pm lib/byte_heavy.pl lib/utf8.pm op.c perl.h
- ! pod/perldelta.pod pp_ctl.c regcomp.c regexec.c utf8.h
-____________________________________________________________________________
-[ 4940] By: jhi on 2000/02/01 12:22:30
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> embed.pl embedvar.h global.sym gv.c intrpvar.h
- !> lib/charnames.pm lib/utf8.pm mg.c objXSUB.h op.c op.h
- !> perlapi.c perlapi.h pod/perlvar.pod pp.c sv.c sv.h
- !> t/lib/charnames.t toke.c win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 4939] By: gsar on 2000/02/01 08:52:16
- Log: export pregexec(), Tk uses it
- Branch: perl
- ! embed.pl global.sym objXSUB.h perlapi.c
-____________________________________________________________________________
-[ 4938] By: gsar on 2000/02/01 04:00:09
- Log: mark literal utf8 in string literals properly
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4937] By: gsar on 2000/01/31 20:19:34
- Log: introduce $^U, a global bit to indicate whether system
- calls should using widechar APIs; chr and sprintf "%c" also
- follow this flag in the absense of "use byte"; "use utf8"
- sets $^U=1 (this appears kludgey)
- Branch: perl
- ! embedvar.h gv.c intrpvar.h lib/charnames.pm lib/utf8.pm mg.c
- ! op.c op.h perlapi.h pod/perlvar.pod pp.c sv.c sv.h
- ! t/lib/charnames.t win32/win32.h
-____________________________________________________________________________
-[ 4936] By: jhi on 2000/01/31 20:17:44
- Log: HP-UX (induced) fixes.
- Branch: cfgperl
- ! Configure config_h.SH hints/hpux.sh
- Branch: metaconfig
- ! U/modified/Oldconfig.U U/modified/libs.U
- Branch: metaconfig/U/perl
- ! quadfio.U
-____________________________________________________________________________
-[ 4935] By: jhi on 2000/01/31 19:15:43
- Log: Cosmetics.
- Branch: metaconfig
- ! U/compline/d_gconvert.U
-____________________________________________________________________________
-[ 4934] By: jhi on 2000/01/31 19:15:22
- Log: Cppsym saga continues.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 4933] By: gsar on 2000/01/31 18:45:07
- Log: !USING_WIDE() branch is busted in win32_stat()
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 4932] By: jhi on 2000/01/31 06:41:47
- Log: Reveal even more symbols.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 4931] By: jhi on 2000/01/31 06:21:41
- Log: Integrate with Sarathy.
- Branch: cfgperl
- - lib/caller.pm
- !> (integrate 29 files)
-____________________________________________________________________________
-[ 4930] By: gsar on 2000/01/31 04:57:42
- Log: runtime now looks at the SVf_UTF8 bit on the SV to decide
- whether to use widechar semantics; lexer and RE engine continue
- to need "use utf8" to enable unicode awareness in literals
- and patterns (TODO: this needs to be fixed); $1 et al are marked
- SvUTF8 if the pattern was compiled for utf8 (TODO: propagating
- it from the data is probably better)
- Branch: perl
- ! doop.c gv.c mg.c op.c op.h pp.c pp_ctl.c pp_hot.c regcomp.c
- ! sv.c t/pragma/warn/doop t/pragma/warn/pp t/pragma/warn/sv
- ! t/pragma/warn/toke t/pragma/warn/utf8 toke.c utf8.h
-____________________________________________________________________________
-[ 4929] By: gsar on 2000/01/31 04:17:09
- Log: remove caller.pm from change#3534 (flawed idea)
- Branch: perl
- - lib/caller.pm
- ! MANIFEST pod/perldelta.pod pod/perlfunc.pod
-____________________________________________________________________________
-[ 4928] By: gsar on 2000/01/31 04:16:01
- Log: fix factual regression (-e doesn't create temporary files anymore)
- Branch: perl
- ! pod/perlfilter.pod
-____________________________________________________________________________
-[ 4927] By: gsar on 2000/01/30 21:27:12
- Log: introduce $^V (eq chr($revision) . chr($version) . chr($subversion));
- document version tuples
- Branch: perl
- ! gv.c pod/perldelta.pod pod/perlfunc.pod pod/perlop.pod
- ! pod/perlvar.pod
-____________________________________________________________________________
-[ 4926] By: gsar on 2000/01/28 18:10:12
- Log: implement -follow option in find2perl (from Helmut Jarausch
- <jarausch@igpm.rwth-aachen.de>)
- Branch: perl
- ! lib/File/Find.pm x2p/find2perl.PL
-____________________________________________________________________________
-[ 4925] By: gsar on 2000/01/28 18:03:28
- Log: document what chdir() without an argument does (from Mark-Jason
- Dominus <mjd@plover.com>)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4924] By: gsar on 2000/01/28 17:49:34
- Log: README.cygwin update (from Eric Fifer <EFifer@sanwaint.com>)
- Branch: perl
- ! README.cygwin
-____________________________________________________________________________
-[ 4923] By: gsar on 2000/01/28 17:10:08
- Log: avoid leaking lexicals into program being debugged (from Ilya
- Zakharevich)
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 4922] By: gsar on 2000/01/28 16:36:13
- Log: perldelta note about export list changes
- Branch: perl
- ! Changes pod/perldelta.pod
-____________________________________________________________________________
-[ 4921] By: gsar on 2000/01/28 15:49:04
- Log: alias realpath() to abs_path() (from Tom Christiansen)
- Branch: perl
- ! lib/Cwd.pm
-____________________________________________________________________________
-[ 4920] By: jhi on 2000/01/28 09:52:47
- Log: Cppsym fixup from Andy.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 4919] By: jhi on 2000/01/28 09:52:22
- Log: In HP-UX no largefiles if no 64 bits.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 4918] By: jhi on 2000/01/28 09:03:37
- Log: The #4880 was too eager, the $n test is useful too.
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 4917] By: jhi on 2000/01/28 06:27:50
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> pod/perlapi.pod pod/perlintern.pod
- !> (integrate 39 files)
-____________________________________________________________________________
-[ 4916] By: gsar on 2000/01/28 05:29:37
- Log: more exported symbols needed for build on windows
- Branch: perl
- ! embed.pl global.sym objXSUB.h perlapi.c pod/perlapi.pod
- ! pod/perlintern.pod t/lib/thread.t win32/win32.c
-____________________________________________________________________________
-[ 4915] By: gsar on 2000/01/28 03:43:52
- Log: autogenerate API listing from comments in the source (from Benjamin
- Stuhl <sho_pi@hotmail.com>); fix the markup format to be more
- flexible for better readability; add missing docs in sv.c; regenerate
- perltoc
- Branch: perl
- + pod/perlapi.pod pod/perlintern.pod
- ! MANIFEST XSUB.h av.c av.h cop.h cv.h embed.pl global.sym gv.c
- ! gv.h handy.h hv.c hv.h intrpvar.h makedef.pl mg.c objXSUB.h
- ! op.c op.h perl.c perlapi.c pod/Makefile pod/buildtoc
- ! pod/perl.pod pod/perldelta.pod pod/perlguts.pod
- ! pod/perltoc.pod pod/roffitall pp.h scope.h sv.c sv.h thrdvar.h
- ! universal.c util.c
-____________________________________________________________________________
-[ 4914] By: gsar on 2000/01/27 19:43:35
- Log: document unimplemented status of forking pipe open() on windows
- Branch: perl
- ! pod/perlfork.pod t/op/fork.t
-____________________________________________________________________________
-[ 4913] By: jhi on 2000/01/27 11:18:51
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 51 files)
-____________________________________________________________________________
-[ 4912] By: jhi on 2000/01/27 10:35:48
- Log: Cppsym update continues.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 4911] By: gsar on 2000/01/27 08:04:17
- Log: add missing flag in change#4892
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 4910] By: gsar on 2000/01/27 03:56:48
- Log: various pod nits identified by installhtml (all fixed except
- unresolved links)
- Branch: perl
- ! ext/B/B/C.pm ext/Devel/Peek/Peek.pm ext/File/Glob/Glob.pm
- ! ext/IO/lib/IO/Socket/INET.pm ext/IPC/SysV/SysV.pm
- ! ext/Thread/Thread.pm lib/Class/Struct.pm lib/File/Find.pm
- ! lib/File/Spec/VMS.pm lib/Pod/Html.pm lib/UNIVERSAL.pm
- ! pod/buildtoc pod/perlcompile.pod pod/perlfork.pod
- ! pod/perlre.pod pod/perltoc.pod pod/perltodo.pod
-____________________________________________________________________________
-[ 4909] By: gsar on 2000/01/26 22:45:28
- Log: typo
- Branch: perl
- ! Porting/p4desc
-____________________________________________________________________________
-[ 4908] By: gsar on 2000/01/26 22:41:18
- Log: update p4 tool
- Branch: perl
- ! Porting/p4desc
-____________________________________________________________________________
-[ 4907] By: gsar on 2000/01/26 21:45:41
- Log: revised attribute syntax: C<my $foo :a :b :c>, C<my $foo : a b c>
- and C<my $foo : a : b : c> are all valid (from Spider Boardman)
- Branch: perl
- ! lib/AutoSplit.pm lib/SelfLoader.pm lib/attributes.pm
- ! pod/perldelta.pod pod/perldiag.pod pod/perlsub.pod
- ! t/op/attrs.t toke.c
-____________________________________________________________________________
-[ 4906] By: gsar on 2000/01/26 20:16:39
- Log: pod typos and warnings (from Abigail <abigail@delanet.com>)
- Branch: perl
- ! README.win32 ext/B/B/Deparse.pm lib/Class/Struct.pm
-____________________________________________________________________________
-[ 4905] By: gsar on 2000/01/26 19:10:26
- Log: s/STOP/CHECK/ blocks
- Branch: perl
- ! embedvar.h ext/B/B/Stash.pm ext/B/NOTES ext/B/O.pm intrpvar.h
- ! keywords.h keywords.pl lib/constant.pm op.c perl.c perlapi.h
- ! perly.c perly.y pod/perldelta.pod pod/perldiag.pod
- ! pod/perlfunc.pod pod/perlmod.pod pod/perlrun.pod
- ! pod/perlsub.pod pod/perltodo.pod sv.c t/op/misc.t toke.c
- ! vms/perly_c.vms
-____________________________________________________________________________
-[ 4904] By: jhi on 2000/01/26 13:58:18
- Log: In UNICOS and UNICOS/mk after a successful fcntl F_SETFL
- of O_NONBLOCK a subsequent fcntl F_GETFL will return O_NDELAY.
- Branch: cfgperl
- ! ext/IO/IO.xs
-____________________________________________________________________________
-[ 4903] By: jhi on 2000/01/26 11:16:34
- Log: Continue cpp symbol update.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 4902] By: gsar on 2000/01/26 09:28:37
- Log: tweak exports list on Windows
- Branch: perl
- ! makedef.pl t/op/fork.t win32/win32.h
-____________________________________________________________________________
-[ 4901] By: jhi on 2000/01/26 08:05:57
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes README.win32 lib/File/Path.pm lib/Getopt/Std.pm op.c
- !> pod/perldelta.pod pod/perldiag.pod t/op/grep.t
- !> t/pragma/strict-vars toke.c win32/Makefile win32/makefile.mk
- !> win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 4900] By: jhi on 2000/01/26 07:59:05
- Log: s/d_nvpresuv/d_nv_preserves_uv/;
- plus cosmetic change for #4899.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
- Branch: metaconfig
- ! U/modified/Cppsym.U
- Branch: metaconfig/U/perl
- ! perlxv.U
-____________________________________________________________________________
-[ 4899] By: jhi on 2000/01/26 07:46:56
- Log: Update the scan of the cpp symbols.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Cppsym.U
-____________________________________________________________________________
-[ 4898] By: gsar on 2000/01/26 04:49:45
- Log: allow '--' to terminate argument processing (suggested by
- Marc Espie <espie@schutzenberger.liafa.jussieu.fr>)
- Branch: perl
- ! lib/Getopt/Std.pm
-____________________________________________________________________________
-[ 4897] By: gsar on 2000/01/26 02:42:38
- Log: change#3744 should have made grep more like map instead of the
- other way around
- Branch: perl
- ! t/op/grep.t toke.c
-____________________________________________________________________________
-[ 4896] By: gsar on 2000/01/26 00:56:14
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> vos/config.def vos/config.pl
- ! Changes
- !> Configure MANIFEST config_h.SH hints/unicosmk.sh
- !> lib/Benchmark.pm pod/perldelta.pod pod/perlhist.pod pp.c
- !> vos/config.h vos/config_h.SH_orig
-____________________________________________________________________________
-[ 4895] By: gsar on 2000/01/26 00:45:45
- Log: fix parse failure of (my $foo : bar) and similar (from Spider
- Boardman)
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4894] By: gsar on 2000/01/26 00:33:53
- Log: avoid failure if directories already read by rmtree() are
- deleted by another process
- Branch: perl
- ! lib/File/Path.pm
-____________________________________________________________________________
-[ 4893] By: gsar on 2000/01/25 23:19:18
- Log: typo in change#4892
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 4892] By: gsar on 2000/01/25 22:16:19
- Log: eliminate need for perl95.exe on Windows 9x by working around CRT
- bug internally (from Benjamin Stuhl <sho_pi@hotmail.com>); modified
- to call the fixed version of open_osfhandle() only on Windows 9x;
- updated the makefiles and README.win32 to suit
- Branch: perl
- ! README.win32 win32/Makefile win32/makefile.mk win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 4891] By: gsar on 2000/01/25 20:22:01
- Log: produce redeclaration warning on C<our $foo; { our $foo; ... }>
- Branch: perl
- ! op.c pod/perldelta.pod pod/perldiag.pod t/pragma/strict-vars
-____________________________________________________________________________
-[ 4890] By: gsar on 2000/01/25 19:21:17
- Log: update Makefile notes on the now deprecated USE_5005THREADS and
- USE_OBJECT
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4889] By: jhi on 2000/01/25 14:44:55
- Log: Misedit in #4888.
- Branch: cfgperl
- ! pp.c
-____________________________________________________________________________
-[ 4888] By: jhi on 2000/01/25 14:38:59
- Log: UNICOS/mk patches. Removing the _CRAYMPP test may be
- rash but it's the best move I can think of right now.
- UNICOS/mk doesn't anymore (2.0.4.82) define _CRAYMPP,
- but I think it did in the past.
- Removing the _CRAYMPP test fixes a legion of pack/unpack
- failures (hint: SHORTSIZE=4,INTSIZE=8,LONGSIZE=8).
- One subtest, t/lib/io_sock.t #14, is still failing.
- Branch: cfgperl
- ! Configure config_h.SH hints/unicosmk.sh pp.c
- Branch: metaconfig
- ! U/modified/Oldconfig.U
-____________________________________________________________________________
-[ 4887] By: jhi on 2000/01/25 06:13:14
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes Makefile.SH XSUB.h cflags.SH embed.pl globals.c
- !> installperl lib/Pod/Html.pm makedef.pl mg.c objXSUB.h perl.h
- !> perlapi.c perlapi.h pod/perldelta.pod pod/perldiag.pod
- !> t/io/fs.t win32/Makefile win32/makefile.mk win32/perlhost.h
- !> win32/perllib.c win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 4886] By: gsar on 2000/01/25 02:54:00
- Log: consistently use MAX_PATH+1 buffer sizes
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 4885] By: gsar on 2000/01/25 02:51:35
- Log: workaround for rename('x','X') bug in Windows NT
- Branch: perl
- ! t/io/fs.t win32/win32.c
-____________________________________________________________________________
-[ 4884] By: gsar on 2000/01/25 01:32:57
- Log: windows build fixups from uniform DLL name change to perl56.dll
- Branch: perl
- ! installperl makedef.pl win32/perllib.c
-____________________________________________________________________________
-[ 4883] By: gsar on 2000/01/25 01:31:27
- Log: more fixes for warnings from change#4840
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 4882] By: gsar on 2000/01/24 15:35:12
- Log: assorted little nits
- Branch: perl
- ! mg.c win32/Makefile win32/makefile.mk win32/perlhost.h
- ! win32/win32.c
-____________________________________________________________________________
-[ 4881] By: gsar on 2000/01/24 14:32:31
- Log: add new warnings to perldelta
- Branch: perl
- ! Changes pod/perldelta.pod pod/perldiag.pod
-____________________________________________________________________________
-[ 4880] By: jhi on 2000/01/24 14:14:23
- Log: From: Stephane Payrard <properler@freesurf.fr>
- To: Gurusamy Sarathy <gsar@ActiveState.com>
- Cc: perl5-porters@perl.org
- Subject: <patch> avoid division by 0 in Benchmark.pm
- Date: Mon, 24 Jan 2000 16:15:38 +0100
- Message-ID: <20000124161538.A995@freesurf.fr>
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 4879] By: gsar on 2000/01/24 14:14:20
- Log: force linkage of the function wrappers for globals in change#4878
- Branch: perl
- ! embed.pl globals.c perlapi.h win32/win32.h
-____________________________________________________________________________
-[ 4878] By: gsar on 2000/01/24 13:04:45
- Log: enable function wrappers for access to globals under MULTIPLICITY
- (provides binary compatibility in the face of changes in interpreter
- structure)
- Branch: perl
- ! Makefile.SH XSUB.h cflags.SH embed.pl makedef.pl objXSUB.h
- ! perl.h perlapi.c perlapi.h win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4877] By: jhi on 2000/01/24 11:41:57
- Log: perlhist update.
- Branch: cfgperl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 4876] By: jhi on 2000/01/24 11:32:07
- Log: Updates on the large file support status.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4875] By: jhi on 2000/01/24 11:23:16
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> ext/DB_File/Makefile.PL ext/NDBM_File/NDBM_File.pm
- !> ext/ODBM_File/ODBM_File.pm lib/AutoSplit.pm
- !> lib/Math/Complex.pm lib/Math/Trig.pm lib/Shell.pm
-____________________________________________________________________________
-[ 4874] By: gsar on 2000/01/24 10:43:03
- Log: fix typos; avoid use constant for lowercase constants (produces
- warnings now)
- Branch: perl
- ! ext/DB_File/Makefile.PL lib/Math/Complex.pm lib/Math/Trig.pm
- ! lib/Shell.pm
-____________________________________________________________________________
-[ 4873] By: gsar on 2000/01/24 09:40:24
- Log: avoid warnings when there's no subs to autosplit
- Branch: perl
- ! lib/AutoSplit.pm
-____________________________________________________________________________
-[ 4872] By: jhi on 2000/01/24 09:39:01
- Log: Create a tool for converting a config_h.SH into a VOS config.h.
- Branch: cfgperl
- + vos/config.def vos/config.pl
- ! MANIFEST vos/config.h vos/config_h.SH_orig
-____________________________________________________________________________
-[ 4871] By: gsar on 2000/01/24 09:15:20
- Log: typos in change#4623
- Branch: perl
- ! ext/NDBM_File/NDBM_File.pm ext/ODBM_File/ODBM_File.pm
-____________________________________________________________________________
-[ 4870] By: jhi on 2000/01/24 06:43:19
- Log: Sync metaconfig units to comply with the typo fixes of #4869.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- + U/modified/cf_email.U U/modified/so.U
- Branch: metaconfig/U/perl
- ! dlsrc.U
-____________________________________________________________________________
-[ 4869] By: jhi on 2000/01/24 06:04:31
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/pragma/diagnostics.t
- !> (integrate 120 files)
-____________________________________________________________________________
-[ 4868] By: gsar on 2000/01/23 21:49:28
- Log: on windows, set seek position to end for files opened in append mode
- (improves compatibility with Unix, avoids buffering issues)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 4867] By: gsar on 2000/01/23 21:19:31
- Log: change#4866 was flawed; revert and add better fix for warning
- Branch: perl
- ! op.c op.h
-____________________________________________________________________________
-[ 4866] By: gsar on 2000/01/23 20:43:56
- Log: optimize away runtime code for our($foo) (also avoid warnings)
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 4865] By: gsar on 2000/01/23 13:17:18
- Log: DB_File 1.72 update from Paul Marquess <paul.marquess@bt.com>
- Branch: perl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/version.c
-____________________________________________________________________________
-[ 4864] By: gsar on 2000/01/23 13:12:31
- Log: system('VAR123=foo cmd') wasn't invoking shell (de-locale-ized patch
- suggested by Dominic Dunlop <domo@computer.org>)
- Branch: perl
- ! doio.c
-____________________________________________________________________________
-[ 4863] By: gsar on 2000/01/23 13:01:35
- Log: fix misclassified warnings
- Branch: perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 4862] By: gsar on 2000/01/23 12:52:12
- Log: document bareword prototype incompatibility
- Branch: perl
- ! pod/perldelta.pod pod/perlsub.pod
-____________________________________________________________________________
-[ 4861] By: gsar on 2000/01/23 12:32:25
- Log: faulty edit
- Branch: perl
- ! lib/File/stat.pm
-____________________________________________________________________________
-[ 4860] By: gsar on 2000/01/23 12:23:48
- Log: s/use vars/our/g modules that aren't independently maintained on CPAN
- Branch: perl
- ! ext/B/B/Asmdata.pm ext/Data/Dumper/Dumper.pm
- ! ext/Devel/DProf/DProf.pm ext/Fcntl/Fcntl.pm
- ! ext/File/Glob/Glob.pm ext/GDBM_File/GDBM_File.pm
- ! ext/IO/lib/IO/Dir.pm ext/IO/lib/IO/File.pm
- ! ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Pipe.pm
- ! ext/IO/lib/IO/Poll.pm ext/IO/lib/IO/Seekable.pm
- ! ext/IO/lib/IO/Socket.pm ext/IO/lib/IO/Socket/INET.pm
- ! ext/IO/lib/IO/Socket/UNIX.pm ext/NDBM_File/NDBM_File.pm
- ! ext/ODBM_File/ODBM_File.pm ext/Opcode/Opcode.pm
- ! ext/Opcode/Safe.pm ext/POSIX/POSIX.pm
- ! ext/SDBM_File/SDBM_File.pm ext/Socket/Socket.pm
- ! ext/Thread/Thread.pm lib/AnyDBM_File.pm lib/AutoLoader.pm
- ! lib/AutoSplit.pm lib/Class/Struct.pm lib/Dumpvalue.pm
- ! lib/ExtUtils/Command.pm lib/ExtUtils/Install.pm
- ! lib/ExtUtils/Installed.pm lib/ExtUtils/Liblist.pm
- ! lib/ExtUtils/MM_VMS.pm lib/ExtUtils/Mksymlists.pm
- ! lib/ExtUtils/Packlist.pm lib/Fatal.pm lib/File/Basename.pm
- ! lib/File/Compare.pm lib/File/Copy.pm lib/File/Find.pm
- ! lib/File/Path.pm lib/File/stat.pm lib/FileHandle.pm
- ! lib/Math/Complex.pm lib/Math/Trig.pm lib/Net/Ping.pm
- ! lib/Net/hostent.pm lib/Net/netent.pm lib/Net/protoent.pm
- ! lib/Net/servent.pm lib/Shell.pm lib/Test.pm
- ! lib/Test/Harness.pm lib/Tie/Array.pm lib/Tie/Handle.pm
- ! lib/Time/gmtime.pm lib/Time/localtime.pm lib/User/grent.pm
- ! lib/User/pwent.pm lib/base.pm lib/caller.pm lib/constant.pm
- ! lib/diagnostics.pm lib/fields.pm lib/lib.pm lib/strict.pm
-____________________________________________________________________________
-[ 4859] By: gsar on 2000/01/23 11:29:22
- Log: fix diagnostics to report "our" vs "my" correctly
- Branch: perl
- ! op.c pod/perldiag.pod
-____________________________________________________________________________
-[ 4858] By: gsar on 2000/01/23 10:14:46
- Log: set api_version to 5.5.0 (binary compatibility needs to get tested
- more widely)
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 4857] By: gsar on 2000/01/23 10:04:03
- Log: disallow our($foo::bar)
- Branch: perl
- ! pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 4856] By: gsar on 2000/01/23 09:50:54
- Log: dprofpp can't find Devel::DProf::VERSION due to change#4852
- Branch: perl
- ! utils/dprofpp.PL
-____________________________________________________________________________
-[ 4855] By: gsar on 2000/01/23 09:36:51
- Log: new test (from Michael G Schwern <schwern@pobox.com>)
- Branch: perl
- + t/pragma/diagnostics.t
- ! MANIFEST
-____________________________________________________________________________
-[ 4854] By: gsar on 2000/01/23 09:24:40
- Log: add PREREQ_PM to default template (suggested by Michael G Schwern
- <schwern@pobox.com>)
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 4853] By: gsar on 2000/01/23 09:08:30
- Log: cygwin update (from Eric Fifer <EFifer@sanwaint.com>)
- Branch: perl
- ! cygwin/Makefile.SHs hints/cygwin.sh t/io/tell.t
-____________________________________________________________________________
-[ 4852] By: gsar on 2000/01/23 08:52:44
- Log: mark some extensions as "special versions" to avoid CPAN indexer
- confusion (from Ilya Zakharevich)
- Branch: perl
- ! ext/Devel/DProf/DProf.pm ext/Devel/Peek/Peek.pm
-____________________________________________________________________________
-[ 4851] By: gsar on 2000/01/23 08:48:46
- Log: prefer POSIX::uname() rather than syscalls, which require attempting
- to load syscall.ph (from David Huggins-Daines <dhd@eradicator.org>)
- Branch: perl
- ! lib/Sys/Hostname.pm
-____________________________________________________________________________
-[ 4850] By: gsar on 2000/01/23 08:36:43
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure Policy_sh.SH Porting/Glossary Porting/config.sh
- !> Porting/config_H config_h.SH perl.h
-____________________________________________________________________________
-[ 4849] By: gsar on 2000/01/23 08:17:30
- Log: fix localization in while BLOCK when there is a continue BLOCK
- by introducing an explicit scope (c.f. change#4848)
- Branch: perl
- ! op.c pp_ctl.c t/cmd/while.t
-____________________________________________________________________________
-[ 4848] By: gsar on 2000/01/23 06:43:51
- Log: fix scope cleanup when next jumps to a continue block; this is rather
- in the nature of a kludge; it doesn't fix the longstanding bug that
- makes C<while (!$x++) { local $x = 7 } continue { print $x }> print "7"
- instead of "1")
- Branch: perl
- ! pp_ctl.c t/cmd/while.t
-____________________________________________________________________________
-[ 4847] By: gsar on 2000/01/23 04:47:25
- Log: don't warn about masked lexical in C<if (my $x = 1) { my $x; }>,
- C<while (my $x = foo()) { my $x = bar(); }> etc.
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 4846] By: gsar on 2000/01/23 04:44:17
- Log: avoid warnings in change#4839
- Branch: perl
- ! lib/Carp/Heavy.pm
-____________________________________________________________________________
-[ 4845] By: gsar on 2000/01/22 13:12:38
- Log: Configure typos (from Ray Phillips <r.phillips@mailbox.uq.edu.au>)
- Branch: perl
- ! Changes Configure
-____________________________________________________________________________
-[ 4844] By: gsar on 2000/01/22 12:46:26
- Log: wrong category for exec() warning
- Branch: perl
- ! op.c pod/perlop.pod
-____________________________________________________________________________
-[ 4843] By: gsar on 2000/01/22 12:42:40
- Log: fix line continuations in argument lists (from Helmut Jarausch)
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 4842] By: gsar on 2000/01/22 12:34:39
- Log: CGI.pm upgraded to v2.56 from CPAN
- Branch: perl
- ! eg/cgi/index.html lib/CGI.pm lib/CGI/Apache.pm
- ! lib/CGI/Cookie.pm lib/CGI/Pretty.pm lib/CGI/Switch.pm
- ! t/lib/cgi-html.t
-____________________________________________________________________________
-[ 4841] By: gsar on 2000/01/22 12:07:23
- Log: avoid warnings due to lack of forward declarations
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 4840] By: gsar on 2000/01/22 12:04:30
- Log: heavy cleanup of Pod::Html bug fixes (from Wolfgang Laun
- <wolfgang.laun@alcatel.at>)
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 4839] By: gsar on 2000/01/22 11:57:24
- Log: better Carp reporting within subclassed modules (from Wolfgang Laun
- <wolfgang.laun@alcatel.at>)
- Branch: perl
- ! lib/Carp/Heavy.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 4838] By: gsar on 2000/01/22 10:53:06
- Log: truncate(FH) flushes FH before truncating it
- Branch: perl
- ! pp_sys.c t/io/fs.t
-____________________________________________________________________________
-[ 4837] By: gsar on 2000/01/22 10:37:16
- Log: #line directives without a filename leave the file name as it was
- instead of setting it to the script name (from Andrew Pimlott
- <andrew@pimlott.ne.mediaone.net>)
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4836] By: gsar on 2000/01/22 10:06:53
- Log: add patch for printf-style format typechecks (from Robin Barker
- <rmb1@cise.npl.co.uk>); fixes for problems so identified
- Branch: perl
- ! XSUB.h doio.c dump.c embed.pl gv.c op.c perl.c perl.h pp_ctl.c
- ! pp_hot.c pp_sys.c proto.h regcomp.c sv.c toke.c
-____________________________________________________________________________
-[ 4835] By: gsar on 2000/01/22 08:42:52
- Log: From: John Tobey <jtobey@isay.com>
- Date: Thu, 16 Dec 1999 20:20:38 -0500
- Message-Id: <E11ym4U-0000c7-00@einstein.localnet>
- Subject: [ID 19991216.006] [PATCH 5.005_63] Reloading modules that use 'fields'
- Branch: perl
- ! lib/base.pm lib/fields.pm t/lib/fields.t
-____________________________________________________________________________
-[ 4834] By: gsar on 2000/01/22 08:08:08
- Log: fix deeply nested closures that have no references to lexical in
- intervening subs
- Branch: perl
- ! embed.h embed.pl op.c proto.h t/op/closure.t
-____________________________________________________________________________
-[ 4833] By: gsar on 2000/01/21 17:04:21
- Log: add $VERSION
- Branch: perl
- ! lib/Text/Soundex.pm lib/Tie/Handle.pm
-____________________________________________________________________________
-[ 4832] By: gsar on 2000/01/21 16:49:09
- Log: fix bug in dumping self-referential scalars
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm ext/Data/Dumper/Dumper.xs
- ! t/lib/dumper.t
-____________________________________________________________________________
-[ 4831] By: jhi on 2000/01/21 09:16:07
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/op/exists_sub.t
- !> INSTALL MANIFEST embed.h embed.pl global.sym objXSUB.h op.c
- !> op.h perlapi.c pod/perldelta.pod pod/perldiag.pod
- !> pod/perlfunc.pod pod/perlop.pod pod/perlvar.pod pp.c pp_hot.c
- !> pp_sys.c proto.h sv.c sv.h t/pragma/warn/pp_hot
- !> t/pragma/warn/pp_sys util.c utils/h2xs.PL
-____________________________________________________________________________
-[ 4830] By: gsar on 2000/01/21 04:28:08
- Log: patch to report warnings on bogus filehandles passed to flock(),
- more consistent warnings, from Greg Bacon <gbacon@itsc.uah.edu>
- (slightly modified)
- Branch: perl
- ! embed.h embed.pl global.sym objXSUB.h perlapi.c
- ! pod/perldiag.pod pp_hot.c pp_sys.c proto.h
- ! t/pragma/warn/pp_hot t/pragma/warn/pp_sys util.c
-____________________________________________________________________________
-[ 4829] By: gsar on 2000/01/21 03:43:46
- Log: typo fix
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 4828] By: gsar on 2000/01/21 03:32:31
- Log: notes about $^H and %^H from Ilya Zakharevich; substantial
- fixups of faulty facts and prose
- Branch: perl
- ! pod/perlvar.pod
-____________________________________________________________________________
-[ 4827] By: gsar on 2000/01/21 01:45:51
- Log: support for C<exists &func> (from Spider Boardman)
- Branch: perl
- + t/op/exists_sub.t
- ! MANIFEST op.c op.h pod/perldelta.pod pod/perldiag.pod
- ! pod/perlfunc.pod pp.c
-____________________________________________________________________________
-[ 4826] By: gsar on 2000/01/21 01:35:46
- Log: mention the fact that open(my $foo, ...) covers all handle
- constructors
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4825] By: gsar on 2000/01/21 01:03:34
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 19 Jan 2000 15:05:11 -0500
- Message-ID: <20000119150511.A22859@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_63] h2xs goof and a depessimization
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 4824] By: gsar on 2000/01/20 19:14:26
- Log: INSTALL updates from Andy Dougherty
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 4823] By: gsar on 2000/01/20 08:40:13
- Log: sv_true() has a superfluous test
- Branch: perl
- ! sv.c sv.h
-____________________________________________________________________________
-[ 4822] By: bailey on 2000/01/20 02:03:35
- Log: Minor cosmetic updates
- Branch: vmsperl
- ! configure.com
-____________________________________________________________________________
-[ 4821] By: bailey on 2000/01/20 00:25:30
- Log: Quick integration of mainline changes to date
- Branch: vmsperl
- +> (branch 74 files)
- - eg/cgi/dna.small.gif.uu eg/cgi/wilogo.gif.uu epoc/config.h
- - epoc/perl.mmp epoc/perl.pkg ext/DynaLoader/dl_cygwin.xs
- - lib/Pod/PlainText.pm lib/unicode/Eq/Latin1
- - lib/unicode/Eq/Unicode lib/unicode/Jamo-2.txt
- - lib/unicode/Unicode.html lib/unicode/UnicodeData-Latest.txt
- - lib/warning.pm os2/POSIX.mkfifo warning.h
- !> (integrate 462 files)
-____________________________________________________________________________
-[ 4820] By: jhi on 2000/01/19 22:46:42
- Log: More robust inc_version_list from Andy.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
- Branch: metaconfig
- ! U/installdirs/inc_version_list.U
-____________________________________________________________________________
-[ 4819] By: jhi on 2000/01/19 17:36:56
- Log: Add NV_PRESERVES_UV.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.h
- Branch: metaconfig
- ! U/protos/selecttype.U
- Branch: metaconfig/U/perl
- - nvpresuv.U
- ! perlxv.U
-____________________________________________________________________________
-[ 4818] By: jhi on 2000/01/19 08:13:05
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes Configure win32/config.bc win32/config.gc
- !> win32/config.vc win32/config_H.bc win32/config_H.gc
- !> win32/config_H.vc
-____________________________________________________________________________
-[ 4817] By: gsar on 2000/01/19 05:25:43
- Log: regen win32/config*
- Branch: perl
- ! Configure win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 4816] By: jhi on 2000/01/18 21:19:10
- Log: Policy patch from Andy for installation directories,
- removing the $apiversion.
- Branch: cfgperl
- ! Policy_sh.SH
-____________________________________________________________________________
-[ 4815] By: jhi on 2000/01/18 21:11:03
- Log: Move _GNU_SOURCE into config_h.SH awaay from Configure
- as suggested by Andy.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/compline/d_gnulibc.U U/modified/cc.U
-____________________________________________________________________________
-[ 4814] By: gsar on 2000/01/18 20:48:10
- Log: integrate cfgperl changes into mainline
- Branch: perl
- ! Changes
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> Porting/pumpkin.pod config_h.SH doop.c patchlevel.h perl.c
- !> perl.h t/lib/posix.t t/op/pack.t utf8.c
-____________________________________________________________________________
-[ 4813] By: jhi on 2000/01/18 19:41:33
- Log: metaconfig todo note from Andy.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/installdirs/inc_version_list.U
-____________________________________________________________________________
-[ 4812] By: jhi on 2000/01/18 15:02:55
- Log: More -V.
- Branch: cfgperl
- ! perl.c
-____________________________________________________________________________
-[ 4811] By: jhi on 2000/01/18 10:35:30
- Log: More compile-time options shown with -V.
- Branch: cfgperl
- ! perl.c
-____________________________________________________________________________
-[ 4810] By: jhi on 2000/01/17 08:35:49
- Log: Add -D_GNU_SOURCE into ccflags for gcc (for now to expose
- the strtold() and qgcvt() prototypes for long doubles, but
- it should be okay in any case); fix bad assumptions in the
- test suite about string->float conversions; though the out
- parameter of strtold() (and strtoll()) is unused, it is nicer
- to have it in correct type.
- Branch: cfgperl
- ! Configure config_h.SH perl.h t/lib/posix.t t/op/pack.t
- Branch: metaconfig
- ! U/modified/cc.U
-____________________________________________________________________________
-[ 4809] By: jhi on 2000/01/16 19:21:18
- Log: strtoll works better ternary.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4808] By: jhi on 2000/01/16 19:12:58
- Log: Know strtoll.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.h
-____________________________________________________________________________
-[ 4807] By: jhi on 2000/01/16 17:57:03
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> dump.c gv.c gv.h lib/vars.pm op.c op.h perl.h pod/perlfunc.pod
- !> sv.c sv.h t/pragma/strict-vars toke.c util.c
-____________________________________________________________________________
-[ 4806] By: jhi on 2000/01/16 16:37:47
- Log: Continue qgcvt work; closer now but not yet there.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH doop.c utf8.c
- Branch: metaconfig
- ! U/compline/d_gconvert.U
- Branch: metaconfig/U/perl
- ! d_qgcvt.U
-____________________________________________________________________________
-[ 4805] By: jhi on 2000/01/15 22:26:16
- Log: Metaconfig and Porting patches from Andy; start using the new
- long long and long double thingies from #4804; regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! Porting/pumpkin.pod config_h.SH patchlevel.h perl.h util.c
- Branch: metaconfig
- + U/dist_patches/dist-p70a U/dist_patches/dist-p70b
- + U/dist_patches/dist-p70c U/installdirs/inc_version_list.U
- + U/modified/myhostname.U U/modified/nis.U U/nullified/fpu.U
- + U/nullified/lib.U
- ! U/README U/compline/d_gconvert.U U/installdirs/sitearch.U
- ! U/installdirs/sitelib.U U/installdirs/vendorarch.U
- ! U/installdirs/vendorlib.U U/modified/Cppsym.U U/modified/Loc.U
- ! U/modified/Oldconfig.U U/modified/Signal.U
- ! U/modified/sig_name.U U/threads/usethreads.U
- Branch: metaconfig/U/perl
- ! d_qgcvt.U d_strtold.U d_strtoll.U d_strtoq.U d_strtoull.U
- ! d_strtouq.U dlsrc.U i_db.U libperl.U patchlevel.U
- ! usemultiplicity.U
- Branch: perl
- ! perl.h util.c
-____________________________________________________________________________
-[ 4804] By: jhi on 2000/01/14 14:22:24
- Log: Add more quad/long long/long double sciency.
- Branch: metaconfig/U/perl
- + d_qgcvt.U d_strtold.U d_strtoll.U d_strtoq.U d_strtoull.U
- + d_strtouq.U
-____________________________________________________________________________
-[ 4803] By: gsar on 2000/01/14 04:40:49
- Log: minor optimization (avoid double sv_upgrade() for "our Foo $bar;")
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 4802] By: gsar on 2000/01/14 04:35:55
- Log: add note about "our"
- Branch: perl
- ! lib/vars.pm
-____________________________________________________________________________
-[ 4801] By: gsar on 2000/01/14 04:16:51
- Log: nailed "our" declarations, and better warnings on duplicate
- "our" declarations
- Branch: perl
- ! dump.c gv.c gv.h op.c pod/perlfunc.pod sv.c sv.h
- ! t/pragma/strict-vars toke.c
-____________________________________________________________________________
-[ 4800] By: gsar on 2000/01/14 01:27:13
- Log: avoid spurious "Useless use of variable" warning on C<our $foo;>
- Branch: perl
- ! dump.c op.c op.h
-____________________________________________________________________________
-[ 4799] By: gsar on 2000/01/14 01:17:15
- Log: doc typo
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4798] By: jhi on 2000/01/13 16:31:34
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> epoc/config.sh epoc/epocish.c epoc/link.pl
- +> ext/DynaLoader/XSLoader_pm.PL ext/DynaLoader/hints/openbsd.pl
- +> ext/IPC/SysV/hints/cygwin.pl ext/NDBM_File/hints/cygwin.pl
- +> ext/ODBM_File/hints/cygwin.pl lib/byte.pm lib/byte_heavy.pl
- +> lib/unicode/Unicode.300 pod/perlfork.pod t/lib/glob-case.t
- +> win32/perlhost.h win32/vdir.h win32/vmem.h
- - epoc/Config.pm epoc/autosplit.pl epoc/config.h epoc/perl.mmp
- - epoc/perl.pkg ext/DynaLoader/dl_cygwin.xs
- - lib/unicode/UnicodeData-Latest.txt os2/POSIX.mkfifo
- !> (integrate 282 files)
-____________________________________________________________________________
-[ 4797] By: gsar on 2000/01/13 08:12:56
- Log: clearer docs for change#4796; faster av_exists()
- Branch: perl
- ! av.c pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
-____________________________________________________________________________
-[ 4796] By: gsar on 2000/01/13 06:49:03
- Log: support delete() and exists() on array, tied array, and pseudo-hash
- elements or slices
- Branch: perl
- ! av.c embed.h embed.pl global.sym lib/Tie/Array.pm
- ! lib/Tie/Hash.pm objXSUB.h op.c perlapi.c pod/perldelta.pod
- ! pod/perlfunc.pod pod/perlref.pod pod/perltie.pod pp.c proto.h
- ! t/op/avhv.t t/op/delete.t
-____________________________________________________________________________
-[ 4795] By: gsar on 2000/01/11 20:52:30
- Log: extend site_perl changes change#4773 to vendor_perl as well
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 4794] By: gsar on 2000/01/11 19:18:50
- Log: rework INSTALL to reflect new logic for versioning sitelibs
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 4793] By: gsar on 2000/01/11 01:44:00
- Log: test for change#4792
- Branch: perl
- ! t/op/fork.t
-____________________________________________________________________________
-[ 4792] By: gsar on 2000/01/11 01:22:36
- Log: pseudo forked children inherit environment correctly
- Branch: perl
- ! win32/perlhost.h
-____________________________________________________________________________
-[ 4791] By: gsar on 2000/01/10 19:14:03
- Log: test tweak
- Branch: perl
- ! t/op/fork.t
-____________________________________________________________________________
-[ 4790] By: gsar on 2000/01/10 18:56:16
- Log: check for USE_ITHREADS sanity was too restrictive
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 4789] By: gsar on 2000/01/10 18:30:24
- Log: add workaround for textmode read() bug in MSVCRT; make chdir() do
- a real SetCurrentDirectory() in toplevel host
- Branch: perl
- ! README.win32 win32/Makefile win32/makefile.mk win32/perlhost.h
- ! win32/vdir.h win32/win32.c
-____________________________________________________________________________
-[ 4782] By: gsar on 2000/01/10 05:27:03
- Log: EPOC port update (from Olaf Flebbe <O.Flebbe@science-computing.de>)
- Branch: perl
- + epoc/config.sh epoc/epocish.c epoc/link.pl
- - epoc/Config.pm epoc/autosplit.pl epoc/config.h epoc/perl.mmp
- - epoc/perl.pkg
- ! MANIFEST README.epoc epoc/createpkg.pl epoc/epoc.c
- ! epoc/epoc_stubs.c epoc/epocish.h ext/IO/lib/IO/Socket.pm
- ! lib/Sys/Hostname.pm
-____________________________________________________________________________
-[ 4781] By: gsar on 2000/01/10 05:11:03
- Log: pod typos (from Abigail <abigail@delanet.com>)
- Branch: perl
- ! pod/perl.pod pod/perllexwarn.pod pod/perlxstut.pod
-____________________________________________________________________________
-[ 4780] By: gsar on 2000/01/10 05:07:35
- Log: failing RE test added (from Robert Cunningham <rkc@ll.mit.edu>)
- Branch: perl
- ! t/lib/thread.t
-____________________________________________________________________________
-[ 4779] By: gsar on 2000/01/10 05:06:16
- Log: terminate -s switch processing only on C<-->, not on C<--foo>
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 4778] By: gsar on 2000/01/10 04:38:45
- Log: useithreads needs usemultiplicity
- Branch: perl
- ! Configure perl.h
-____________________________________________________________________________
-[ 4777] By: gsar on 2000/01/10 01:18:04
- Log: use $Config{version} rather than $] where appropriate
- Branch: perl
- ! lib/CPAN.pm lib/ExtUtils/Installed.pm lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/Mksymlists.pm lib/Pod/Man.pm lib/diagnostics.pm
- ! lib/lib.pm
-____________________________________________________________________________
-[ 4776] By: gsar on 2000/01/10 00:11:34
- Log: enable fork.t on windows
- Branch: perl
- ! t/op/fork.t
-____________________________________________________________________________
-[ 4775] By: gsar on 2000/01/10 00:07:29
- Log: broken test for use5005threads
- Branch: perl
- ! t/lib/safe2.t
-____________________________________________________________________________
-[ 4774] By: gsar on 2000/01/09 23:56:37
- Log: more windows build tweaks
- Branch: perl
- ! installperl makedef.pl win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/config_sh.PL
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 4773] By: gsar on 2000/01/09 22:27:19
- Log: more changes for new-style version numbers (versions numbers on
- the filesystem look like 5.5.640, except on DOS-DJGPP and VMS where
- they look like 5_5_640; delete @Config{pm_apiversion,xs_apiversion};
- split $Config{apiversion} into three, @Config{apirevision,apiversion,
- apisubversion} for CPP friendliness; $Config{sitelib} now defaults
- to .../site_perl/$version, just like $Config{privlib}, making sitelib
- completely independent across versions and substantially eliminating
- chances of breaking older installations by overwriting newly built
- extensions; all this means compatibility inclusions for @INC will need
- to take into account older sitelib versions (this still TODO)
-
- windows, vms, dos tweaks for the above
- Branch: perl
- ! Changes Configure INSTALL Porting/config.sh Porting/config_H
- ! config_h.SH configure.com dosish.h installman installperl
- ! patchlevel.h perl.c perl.h vms/vmsish.h win32/Makefile
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/config_h.PL win32/config_sh.PL win32/makefile.mk
- ! win32/win32.c
-____________________________________________________________________________
-[ 4772] By: gsar on 2000/01/09 19:05:33
- Log: s/usethreads/use5005threads/g
- Branch: perl
- ! myconfig.SH t/lib/english.t t/lib/thread.t t/op/nothread.t
-____________________________________________________________________________
-[ 4771] By: gsar on 2000/01/09 18:51:50
- Log: Configure changes for new-style version numbers (from Andy Dougherty,
- slightly altered)
- Branch: perl
- ! Configure INSTALL Porting/Glossary Porting/config.sh
- ! Porting/config_H config_h.SH perl.h win32/Makefile
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 4770] By: gsar on 2000/01/07 22:18:54
- Log: fix for 'make utest' failures (from Ilya Zakharevich)
- Branch: perl
- ! regexec.c
-____________________________________________________________________________
-[ 4769] By: gsar on 2000/01/07 18:23:16
- Log: cygwin update (from Eric Fifer <EFifer@sanwaint.com>)
- Branch: perl
- + ext/IPC/SysV/hints/cygwin.pl ext/NDBM_File/hints/cygwin.pl
- + ext/ODBM_File/hints/cygwin.pl
- ! Configure INSTALL MANIFEST ext/POSIX/Makefile.PL
- ! hints/cygwin.sh installman installperl lib/Cwd.pm
- ! lib/ExtUtils/MakeMaker.pm lib/File/Spec/Unix.pm lib/perl5db.pl
- ! perlsdio.h t/op/magic.t t/op/stat.t utils/perlcc.PL
-____________________________________________________________________________
-[ 4768] By: gsar on 2000/01/07 18:12:15
- Log: typo on h2xs.PL (from Helmut Jarausch)
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 4767] By: gsar on 2000/01/07 17:58:45
- Log: VMS update (from Peter Prymmer <pvhp@forte.com>)
- Branch: perl
- ! README.vms configure.com vms/subconfigure.com
-____________________________________________________________________________
-[ 4766] By: gsar on 2000/01/07 17:54:05
- Log: os2/POSIX.mkfifo not needed (from Yitzchak Scott-Thoennes
- <sthoenna@efn.org>)
- Branch: perl
- - os2/POSIX.mkfifo
- ! MANIFEST README.os2
-____________________________________________________________________________
-[ 4765] By: gsar on 2000/01/06 20:11:46
- Log: add workaround for dlopen() bug on OpenBSD (relative paths that
- match /^lib/ won't load properly)
- Branch: perl
- + ext/DynaLoader/hints/openbsd.pl
- ! Changes MANIFEST ext/DynaLoader/dl_dlopen.xs
-____________________________________________________________________________
-[ 4764] By: gsar on 2000/01/06 19:51:08
- Log: add undocumented globals for compatibility--find.pl, and find2perl
- generated code need them (from Helmut Jarausch <jarausch@igpm.rwth-aachen.de>)
- Branch: perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 4763] By: gsar on 2000/01/06 10:51:07
- Log: fix various C-backend shenanigans
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 4762] By: gsar on 2000/01/06 04:09:00
- Log: tweak test in change#4757 for Windows
- Branch: perl
- ! t/io/open.t
-____________________________________________________________________________
-[ 4761] By: gsar on 2000/01/06 02:55:30
- Log: USE_ITHREADS tweak (reused pad values could be SvREADONLY if
- they belonged to freed OP_CONSTs)
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 4760] By: gsar on 2000/01/06 00:22:40
- Log: constant ranges could escape bareword check in list context
- Branch: perl
- ! op.c t/pragma/strict-subs
-____________________________________________________________________________
-[ 4759] By: gsar on 2000/01/05 20:52:50
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 05 Jan 2000 15:23:18 EST
- Message-Id: <20000105152318.A7400@monk.mps.ohio-state.edu>
- Subject: Re: minimal m//g matches appear busted
- Branch: perl
- ! regexec.c t/op/pat.t
-____________________________________________________________________________
-[ 4758] By: gsar on 2000/01/05 12:49:40
- Log: various nits identified by warnings unmasked by recent changes
- Branch: perl
- ! ext/B/Makefile.PL lib/ExtUtils/Install.pm pod/perlfunc.pod
-____________________________________________________________________________
-[ 4757] By: gsar on 2000/01/05 12:48:10
- Log: severe bugs in change#3786 fixed
- Branch: perl
- ! doio.c t/io/open.t
-____________________________________________________________________________
-[ 4756] By: gsar on 2000/01/05 11:25:10
- Log: tweak change#4745 to make ebcdic output match for chars <= 037
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm
-____________________________________________________________________________
-[ 4755] By: gsar on 2000/01/05 06:56:05
- Log: cygwin support tweaks (from Eric Fifer <EFifer@sanwaint.com>)
- Branch: perl
- ! Configure util.c utils/perlcc.PL
-____________________________________________________________________________
-[ 4754] By: gsar on 2000/01/05 06:52:25
- Log: avoid expensive Version_check (from Andreas Koenig)
- Branch: perl
- ! Changes lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm
- ! lib/ExtUtils/MM_Win32.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 4753] By: gsar on 2000/01/05 06:48:22
- Log: From: andreas.koenig@anima.de (Andreas J. Koenig)
- Date: 03 Jan 2000 21:56:02 +0100
- Message-ID: <sfcvh5azxgd.fsf@hohenstaufen.in-berlin.de>
- Subject: Reloading File::Copy
- Branch: perl
- ! Changes lib/File/Copy.pm t/lib/filecopy.t
-____________________________________________________________________________
-[ 4752] By: gsar on 2000/01/04 01:19:20
- Log: s/USE_TEXTMODE_SCRIPTS/PERL_TEXTMODE_SCRIPTS/g
- Branch: perl
- ! win32/Makefile win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 4751] By: gsar on 2000/01/03 18:26:08
- Log: avoid using (custom) autoloader in MakeMaker (from Andreas Koenig)
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 4750] By: gsar on 2000/01/02 21:58:02
- Log: make DProf look at $ENV{PERL_DPROF_OUT_FILE_NAME} to make it possible
- to write to a file other than tmon.out (suggested by Haakon Alstadheim
- <Haakon.Alstadheim@sds.no>)
- Branch: perl
- ! ext/Devel/DProf/DProf.pm ext/Devel/DProf/DProf.xs
-____________________________________________________________________________
-[ 4749] By: gsar on 2000/01/02 21:37:29
- Log: disable optimization in change#3612 for join() and quotemeta()--this
- removes all the gross hacks for the special cases in that change; fix
- pp_concat() for when TARG == arg (modified version of patch suggested
- by Ilya Zakharevich)
- Branch: perl
- ! op.c opcode.h opcode.pl pp_hot.c sv.c t/op/lex_assign.t
-____________________________________________________________________________
-[ 4748] By: gsar on 2000/01/02 20:26:06
- Log: MakeMaker should attempt to "require" rather than "use" prerequisites
- to avoid imports (from Michael G Schwern <schwern@pobox.com>)
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 4747] By: gsar on 2000/01/02 20:17:36
- Log: fix 4-arg substr() when used as argument to subroutine
- Branch: perl
- ! pp.c t/op/substr.t
-____________________________________________________________________________
-[ 4746] By: gsar on 2000/01/02 18:45:58
- Log: usethreads build fixups for NeXTstep (as suggested by Hans Mulder)
- Branch: perl
- ! embed.h embed.pl ext/DynaLoader/dl_beos.xs
- ! ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dl_hpux.xs
- ! ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_rhapsody.xs
- ! perlapi.c proto.h thread.h util.c
-____________________________________________________________________________
-[ 4745] By: gsar on 2000/01/02 18:15:44
- Log: ebcdic fix for Data::Dumper from Peter Prymmer
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm regcomp.c
-____________________________________________________________________________
-[ 4744] By: gsar on 1999/12/31 22:42:23
- Log: missing files in previous submit
- Branch: perl
- ! embed.h embed.pl ext/Devel/DProf/DProf.xs globals.c
- ! lib/ExtUtils/MM_Unix.pm objXSUB.h perlapi.c proto.h
-____________________________________________________________________________
-[ 4743] By: gsar on 1999/12/31 06:47:18
- Log: various Windows build tweaks
- Branch: perl
- ! win32/win32.h
-____________________________________________________________________________
-[ 4742] By: gsar on 1999/12/30 21:32:36
- Log: change#4705 breaks code that interpolates $], so leave string value
- of $] as it was for compatibility (and perhaps introduce $^V or similar
- for the utf8 representation, maybe?)
- Branch: perl
- ! configpm gv.c
-____________________________________________________________________________
-[ 4741] By: gsar on 1999/12/30 19:36:21
- Log: avoid CRLF in byteloadable files created by perlcc
- Branch: perl
- ! utils/perlcc.PL
-____________________________________________________________________________
-[ 4740] By: gsar on 1999/12/30 19:35:07
- Log: leave DATA open in binmode if __END__ line doesn't have CRLF
- Branch: perl
- ! pod/perldelta.pod toke.c
-____________________________________________________________________________
-[ 4739] By: gsar on 1999/12/30 05:44:21
- Log: enable the PERL_BINMODE_SCRIPTS behavior by default on Windows
- to allow ByteLoader to work; the DATA filehandles continue to
- be left open in text mode for compatibility
- Branch: perl
- ! embed.h embed.pl objXSUB.h pod/perldelta.pod proto.h sv.c
- ! toke.c win32/Makefile win32/makefile.mk win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 4738] By: gsar on 1999/12/30 04:36:12
- Log: CR-LF support broken for formats
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4737] By: gsar on 1999/12/29 22:30:52
- Log: make DProf functional under pseudo-fork()
- Branch: perl
- ! ext/Devel/DProf/DProf.xs
-____________________________________________________________________________
-[ 4736] By: gsar on 1999/12/29 21:04:59
- Log: slurp mode fix in change#2910 wasn't quite right (spotted by Hans
- Mulder)
- Branch: perl
- ! doio.c pp_hot.c t/io/argv.t
-____________________________________________________________________________
-[ 4735] By: gsar on 1999/12/29 18:12:40
- Log: re.pm is needed earlier, xsubpp now uses it (spotted by Andreas
- Koenig)
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4734] By: gsar on 1999/12/28 21:10:37
- Log: Windows build tweaks
- Branch: perl
- ! INTERN.h sv.c
-____________________________________________________________________________
-[ 4733] By: gsar on 1999/12/28 20:45:15
- Log: remove never-taken branch for making getc() operate on ARGV (spotted
- by Ralph Corderoy <ralph@inputplus.demon.co.uk>)
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 4732] By: gsar on 1999/12/28 20:42:13
- Log: tests for change#4642 and pod fixups suggested by Ralph Corderoy
- <ralph@inputplus.demon.co.uk>
- Branch: perl
- ! pod/perldelta.pod pod/perlfunc.pod pod/perlre.pod t/io/argv.t
-____________________________________________________________________________
-[ 4731] By: gsar on 1999/12/28 20:23:17
- Log: optimize XSUBs to use targets if the -nooptimize xsubpp option is
- not supplied (variant of patch suggested by Ilya Zakharevich)
- Branch: perl
- ! XSUB.h lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 4730] By: gsar on 1999/12/28 19:55:56
- Log: range operator does magical string increment iff both operands
- are non-numbers, from Tom Phoenix <rootbeer@redcat.com>; fixed
- the "foreach (RANGE)" case as well
- Branch: perl
- ! pp_ctl.c t/op/range.t
-____________________________________________________________________________
-[ 4729] By: gsar on 1999/12/28 18:40:19
- Log: Win9x + GCC update from Benjamin Stuhl <sho_pi@hotmail.com>
- Branch: perl
- - win32/PerlCRT.def win32/gstartup.c win32/oldnames.def
- ! EXTERN.h INTERN.h MANIFEST README.win32 iperlsys.h
- ! lib/ExtUtils/MM_Win32.pm makedef.pl win32/Makefile
- ! win32/config.gc win32/genmk95.pl win32/makefile.mk
- ! win32/perlhost.h win32/perllib.c win32/runperl.c win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 4728] By: gsar on 1999/12/28 07:44:19
- Log: typecasts needed
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4727] By: gsar on 1999/12/28 06:23:08
- Log: change#4721 needed line number adjustments
- Branch: perl
- ! MANIFEST global.sym proto.h t/pragma/warn/doop
- ! t/pragma/warn/pp t/pragma/warn/regcomp t/pragma/warn/sv
- ! t/pragma/warn/toke t/pragma/warn/utf8
-____________________________________________________________________________
-[ 4726] By: gsar on 1999/12/28 04:18:15
- Log: integrate utfperl contents into mainline
- Branch: perl
- +> lib/byte.pm lib/byte_heavy.pl
- !> configpm embed.h embed.pl embedvar.h gv.c intrpvar.h objXSUB.h
- !> patchlevel.h perl.c perl.h perlapi.c pp_ctl.c pp_hot.c proto.h
- !> regnodes.h sv.c sv.h t/comp/require.t toke.c utf8.h
-____________________________________________________________________________
-[ 4725] By: gsar on 1999/12/28 04:08:09
- Log: integrate mainline contents
- Branch: utfperl
- - ext/DynaLoader/dl_cygwin.xs lib/unicode/Eq/Latin1
- - lib/unicode/Eq/Unicode
- !> (integrate 60 files)
-____________________________________________________________________________
-[ 4724] By: gsar on 1999/12/28 03:44:10
- Log: fix for /(^|a)b/ breakage from Ilya Zakharevich
- Branch: perl
- ! regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 4723] By: gsar on 1999/12/28 03:28:39
- Log: more ebcdic testsuite fixups (from Peter Prymmer)
- Branch: perl
- ! Changes lib/bigfloat.pl t/lib/charnames.t t/lib/dumper.t
- ! t/pragma/overload.t t/pragma/utf8.t
-____________________________________________________________________________
-[ 4722] By: gsar on 1999/12/28 03:14:48
- Log: avoid "used once" warning
- Branch: perl
- ! lib/diagnostics.pm
-____________________________________________________________________________
-[ 4721] By: gsar on 1999/12/28 03:10:32
- Log: ebcdic tweaks for tests from Peter Prymmer
- Branch: perl
- ! t/pragma/warn/doop t/pragma/warn/pp t/pragma/warn/regcomp
- ! t/pragma/warn/sv t/pragma/warn/toke t/pragma/warn/utf8
-____________________________________________________________________________
-[ 4720] By: gsar on 1999/12/28 03:08:39
- Log: pod nits from Simon Cozens <simon@brecon.co.uk> and others
- Branch: perl
- ! README.os2 lib/ExtUtils/Embed.pm lib/ExtUtils/Install.pm
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MakeMaker.pm
- ! lib/ExtUtils/Mkbootstrap.pm pod/perlop.pod
-____________________________________________________________________________
-[ 4719] By: gsar on 1999/12/28 03:01:04
- Log: perlport v1.45 from Chris Nandor
- Branch: perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 4718] By: gsar on 1999/12/28 02:59:16
- Log: newer version of constant.pm from Tom Phoenix; added Tom's notes to
- perldelta; added STOP, DESTROY and AUTOLOAD to specials list
- Branch: perl
- ! lib/constant.pm pod/perldelta.pod pod/perlvar.pod
- ! t/pragma/constant.t
-____________________________________________________________________________
-[ 4717] By: gsar on 1999/12/28 02:47:04
- Log: cygwin update from Eric Fifer <EFifer@sanwaint.com>
- Branch: perl
- - ext/DynaLoader/dl_cygwin.xs
- ! MAINTAIN MANIFEST ext/POSIX/POSIX.xs ext/SDBM_File/sdbm/pair.c
- ! hints/cygwin.sh installperl mg.c pod/perlfaq3.pod t/op/stat.t
- ! util.c
-____________________________________________________________________________
-[ 4716] By: gsar on 1999/12/28 02:40:51
- Log: tweak to show up db-linked-with-libpthread-but-not-perl problem
- (from Andy Dougherty)
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 4715] By: gsar on 1999/12/28 02:38:44
- Log: better variant of change#4644 (from Andy Dougherty)
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 4714] By: gsar on 1999/12/28 02:36:40
- Log: be defensive about setting {host,group,pass}cat (from Andy Dougherty)
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 4713] By: gsar on 1999/12/28 02:35:15
- Log: $sitelib should be $prefix/lib/perl5/site_perl, as documented in
- INSTALL (from Andy Dougherty)
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 4712] By: gsar on 1999/12/28 02:30:55
- Log: avoid creating new files during make install
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4711] By: gsar on 1999/12/28 02:24:44
- Log: pod edits from Paul Marquess and Mark-Jason Dominus
- Branch: perl
- ! AUTHORS Changes ext/DynaLoader/dl_aix.xs
- ! ext/DynaLoader/dl_dlopen.xs lib/Net/Ping.pm pod/perlcall.pod
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4710] By: gsar on 1999/12/28 02:05:23
- Log: miniperl build fixes for os2 (from Yitzchak Scott-Thoennes
- <sthoenna@efn.org>); add explicit target for opmini.o
- Branch: perl
- ! Makefile.SH cygwin/Makefile.SHs os2/Makefile.SHs
-____________________________________________________________________________
-[ 4709] By: gsar on 1999/12/28 01:20:39
- Log: partly fix perldiag regressions identified by Tom Christiansen
- Branch: perl
- ! doio.c lib/diagnostics.pm pod/perldiag.pod pp_hot.c pp_sys.c
- ! t/pragma/warn/4lint t/pragma/warn/doio t/pragma/warn/pp_hot
- ! t/pragma/warn/pp_sys
-____________________________________________________________________________
-[ 4708] By: gsar on 1999/12/27 23:33:24
- Log: update perldiag for change#4707
- Branch: perl
- ! perl.c pod/perldiag.pod
-____________________________________________________________________________
-[ 4707] By: gsar on 1999/12/27 23:23:39
- Log: allow spaces in -I switch argument
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 4706] By: gsar on 1999/12/26 23:44:53
- Log: fix typos
- Branch: utfperl
- ! sv.h toke.c
-____________________________________________________________________________
-[ 4705] By: gsar on 1999/12/24 04:02:35
- Log: support for v5.5.640 style version numbers
- Branch: utfperl
- ! configpm embedvar.h gv.c intrpvar.h objXSUB.h patchlevel.h
- ! perl.c perl.h pp_ctl.c sv.c sv.h t/comp/require.t toke.c
-____________________________________________________________________________
-[ 4704] By: gsar on 1999/12/23 08:54:27
- Log: bring in basic threads stuff under USE_ITHREADS
- Branch: perl
- ! makedef.pl op.c perl.c perl.h perlvars.h pp_sys.c thread.h
- ! util.c
-____________________________________________________________________________
-[ 4703] By: gsar on 1999/12/23 00:10:06
- Log: integrate mainline contents into utfperl
- Branch: utfperl
- !> (integrate 33 files)
-____________________________________________________________________________
-[ 4702] By: gsar on 1999/12/20 17:18:23
- Log: virtual directory handling broken on paths with trailing slash
- Branch: perl
- ! win32/Makefile win32/makefile.mk win32/vdir.h
-____________________________________________________________________________
-[ 4701] By: gsar on 1999/12/20 17:09:55
- Log: revert optimization in change#4700 (it appears OPpRUNTIME flag
- isn't set for all m/$foo/o)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 4700] By: gsar on 1999/12/20 16:28:51
- Log: avoid pp_regcomp() changing optree at run time under USE_*THREADS (or
- we have a race on our hands)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 4699] By: gsar on 1999/12/20 16:19:00
- Log: pod tweaks
- Branch: perl
- ! pod/perldelta.pod pod/perlfilter.pod pod/perlopentut.pod
-____________________________________________________________________________
-[ 4698] By: gsar on 1999/12/20 07:55:07
- Log: uv_to_utf8() could lose 37th bit on HAS_QUAD platforms
- Branch: perl
- ! utf8.c
-____________________________________________________________________________
-[ 4697] By: gsar on 1999/12/18 01:35:50
- Log: fix from Larry for parsing C<{ 0x1 => 'foo'}> as an
- anon hash rather than a block; test case for the same
- Branch: perl
- ! t/comp/term.t toke.c
-____________________________________________________________________________
-[ 4696] By: gsar on 1999/12/17 19:55:03
- Log: leak in change#4694 spotted by Larry
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 4695] By: gsar on 1999/12/17 18:14:11
- Log: test case for change#4694
- Branch: perl
- ! t/op/delete.t
-____________________________________________________________________________
-[ 4694] By: gsar on 1999/12/17 18:09:08
- Log: delete() should return the value as is, not a copy thereof
- Branch: perl
- ! hv.c pod/perldelta.pod
-____________________________________________________________________________
-[ 4693] By: gsar on 1999/12/17 17:45:58
- Log: fix for C<"\nx\taa\n" =~ /^\S\s+aa$/m> (from Ilya Zakharevich)
- Branch: perl
- ! regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 4692] By: gsar on 1999/12/17 17:41:10
- Log: credits tweak
- Branch: perl
- ! lib/File/Spec.pm
-____________________________________________________________________________
-[ 4691] By: gsar on 1999/12/17 07:12:53
- Log: DynaLoader doesn't build properly when $(DLSRC) changes
- (fix suggested by Hans Mulder)
- Branch: perl
- ! ext/DynaLoader/Makefile.PL
-____________________________________________________________________________
-[ 4690] By: gsar on 1999/12/17 06:26:34
- Log: add missing new ops
- Branch: perl
- ! ext/B/ramblings/runtime.porting
-____________________________________________________________________________
-[ 4689] By: gsar on 1999/12/17 06:16:49
- Log: test harness tweak from Hans Mulder
- Branch: perl
- ! t/TEST
-____________________________________________________________________________
-[ 4688] By: gsar on 1999/12/17 06:14:23
- Log: miniperl build fixes for NeXTstep and cygwin (from Hans Mulder
- and Lucian CIONCA <Lucian.Cionca@algoritma.ro>)
- Branch: perl
- ! Makefile.SH cygwin/Makefile.SHs
-____________________________________________________________________________
-[ 4687] By: gsar on 1999/12/17 06:06:46
- Log: applied suggested patch with whitespace adjustments
- From: Helmut Jarausch <jarausch@numa1.igpm.rwth-aachen.de>
- Date: Thu, 16 Dec 1999 08:57:55 +0100
- Message-id: <38589B82.C4668E10@numa1.igpm.rwth-aachen.de>
- Subject: Re: [ID 19991215.001] patch 5.005_63: Find::Fill cannot handle /
- Branch: perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 4686] By: gsar on 1999/12/17 05:48:53
- Log: avoid warnings due to symbols unintroduced by XSLoader (spotted
- by Hans Mulder)
- Branch: perl
- ! ext/DynaLoader/dl_dld.xs ext/DynaLoader/dl_hpux.xs
- ! ext/DynaLoader/dl_mpeix.xs ext/DynaLoader/dl_next.xs
- ! ext/DynaLoader/dl_rhapsody.xs
-____________________________________________________________________________
-[ 4685] By: gsar on 1999/12/17 05:37:51
- Log: fix bug when one of the operands is +0E+0 (from Ronald J Kimball
- <rjk@linguist.dartmouth.edu>)
- Branch: perl
- ! lib/Math/BigFloat.pm t/lib/bigfltpm.t
-____________________________________________________________________________
-[ 4684] By: gsar on 1999/12/16 09:32:48
- Log: spell out how to get 4-digit year (from Micheal G Schwern
- <schwern@pobox.com>)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4683] By: gsar on 1999/12/16 09:26:53
- Log: type mismatch for %c format argument (spotted by Robin Barker
- <rmb1@cise.npl.co.uk>)
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 4682] By: gsar on 1999/12/16 08:33:28
- Log: mingw32 doesn't have anonymous union (from Benjamin Stuhl
- <sho_pi@hotmail.com>)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 4681] By: gsar on 1999/12/16 08:31:15
- Log: missing backslash (spotted by Johan Vromans)
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 4680] By: gsar on 1999/12/16 08:26:00
- Log: avoid coredump on diagnostics when STDERR is closed
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 4679] By: gsar on 1999/12/12 18:09:41
- Log: integrate mainline changes
- Branch: utfperl
- +> (branch 39 files)
- - lib/unicode/Jamo-2.txt lib/unicode/Unicode.html
- - lib/unicode/UnicodeData-Latest.txt
- !> (integrate 447 files)
-____________________________________________________________________________
-[ 4678] By: gsar on 1999/12/10 01:39:13
- Log: interpreter structure should be nulled under -DMULTIPLICITY
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 4677] By: gsar on 1999/12/09 11:10:27
- Log: update Changes
- Branch: perl
- ! Changes
-
-----------------
-Version 5.005_63
-----------------
-
-____________________________________________________________________________
-[ 4676] By: gsar on 1999/12/09 10:51:43
- Log: fix File::Find testsuite bugs in symlink-less places
- Branch: perl
- ! t/lib/filefind.t
-____________________________________________________________________________
-[ 4675] By: gsar on 1999/12/09 10:22:31
- Log: USE_ITHREADS tweaks and notes
- Branch: perl
- ! op.c pod/perldelta.pod sv.c
-____________________________________________________________________________
-[ 4674] By: gsar on 1999/12/09 10:21:53
- Log: allow new style sort subs to work under usethreads
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 4673] By: gsar on 1999/12/09 04:00:23
- Log: document compatibility issue with literal list slices and NOTOP
- (C<not (1,2,3)[0]> is now a syntax error)
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4672] By: gsar on 1999/12/09 01:14:46
- Log: avoid mismatched expectation <-> int types for C++ builds
- Branch: perl
- ! embed.pl intrpvar.h proto.h toke.c
-____________________________________________________________________________
-[ 4671] By: gsar on 1999/12/09 00:36:24
- Log: newer version of File::Find with support for following symlinks and
- other features, from Helmut Jarausch <jarausch@igpm.rwth-aachen.de>
- Branch: perl
- ! lib/File/Find.pm pod/perldelta.pod t/lib/filefind.t
-____________________________________________________________________________
-[ 4670] By: gsar on 1999/12/09 00:13:06
- Log: avoid initializing GvCV slot for autovivified filehandles
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 4669] By: gsar on 1999/12/08 19:09:27
- Log: apply change#4618 again along with Ilya's patch to fix bugs
- in it (see change#4622)
- Branch: perl
- ! embed.h embed.pl perl.h proto.h regcomp.c regcomp.h regexec.c
- ! t/op/re_tests t/op/subst.t
-____________________________________________________________________________
-[ 4668] By: gsar on 1999/12/08 18:56:53
- Log: patch to fix parser bug in C<${h{${a[0]}}} = 13>
- From: Larry Wall <larry@wall.org>
- Date: Tue, 7 Dec 1999 12:39:30 -0800 (PST)
- Message-Id: <199912072039.MAA13257@kiev.wall.org>
- Subject: Re: [ID 19991204.002] Inconsistency of ${hash{key}}
- Branch: perl
- ! embedvar.h intrpvar.h objXSUB.h sv.c toke.c
-____________________________________________________________________________
-[ 4667] By: gsar on 1999/12/08 18:47:37
- Log: patch to fix aix hints from ortmann@vnet.ibm.com
- Branch: perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 4666] By: gsar on 1999/12/08 18:29:02
- Log: documentation tweaks from M. J. T. Guy, Micheal Schwern, and
- Tim Meadowcroft
- Branch: perl
- ! Changes lib/Benchmark.pm pod/perlipc.pod pod/perlre.pod
-____________________________________________________________________________
-[ 4665] By: gsar on 1999/12/08 02:22:31
- Log: introduce save_I8() for saving byte values
- Branch: perl
- ! embed.h embed.pl global.sym objXSUB.h perlapi.c proto.h
- ! regcomp.c regexec.c scope.c scope.h sv.c
-____________________________________________________________________________
-[ 4664] By: gsar on 1999/12/08 02:02:33
- Log: use SAVEINT() rather than SAVEDESTRUCTOR() for saving PL_expect etc.
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4663] By: gsar on 1999/12/08 01:11:44
- Log: longstanding typo in lexer: PL_lex_expect was not properly
- saved on reentry
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4662] By: gsar on 1999/12/07 23:16:21
- Log: typos in change#4546
- Branch: perl
- ! ext/B/B.xs ext/B/B/Bytecode.pm ext/B/B/C.pm sv.c
-____________________________________________________________________________
-[ 4661] By: gsar on 1999/12/07 09:33:50
- Log: typos in change#4660
- Branch: perl
- ! embed.h embed.pl objXSUB.h perl.h perlapi.c pp_sys.c proto.h
-____________________________________________________________________________
-[ 4660] By: gsar on 1999/12/06 23:42:55
- Log: tweaks for building with -DUSE_ITHREADS on !WIN32 platforms;
- fix bug where lc($readonly) could result in bogus errors
- Branch: perl
- ! embed.h embed.pl iperlsys.h makedef.pl objXSUB.h perlapi.c
- ! pp.c pp_sys.c proto.h sv.c
-____________________________________________________________________________
-[ 4659] By: gsar on 1999/12/06 15:24:31
- Log: allow IRIX 6.5 to build perl (from Helmut Jarausch
- <jarausch@igpm.rwth-aachen.de>)
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 4658] By: gsar on 1999/12/06 15:18:30
- Log: fix for -Dp via $^D (suggested by Stephane Payrard
- <stef@adnaccess.com>)
- Branch: perl
- ! mg.c
-____________________________________________________________________________
-[ 4657] By: gsar on 1999/12/06 06:50:01
- Log: change#4641 needs perldiag.pod edit
- Branch: perl
- - lib/unicode/UnicodeData-Latest.txt
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 4656] By: gsar on 1999/12/06 01:36:56
- Log: Makefile tweak for change#4649
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4655] By: gsar on 1999/12/05 17:23:57
- Log: change#4653 was missing a patch reject
- Branch: perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 4654] By: gsar on 1999/12/05 11:41:04
- Log: windows build tweaks for Borland compiler
- Branch: perl
- ! win32/makefile.mk win32/perlhost.h win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 4653] By: gsar on 1999/12/05 11:07:37
- Log: applied somewhat modified version of suggested patch
- From: "Benjamin Stuhl" <sho_pi@hotmail.com>
- Date: Thu, 18 Nov 1999 18:45:27 PST
- Message-ID: <19991119024527.72749.qmail@hotmail.com>
- Subject: [PATCH 5.005_62] Perl on Win95, Mark IIB
- Branch: perl
- + win32/PerlCRT.def win32/gstartup.c win32/oldnames.def
- ! MANIFEST ext/SDBM_File/Makefile.PL lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MM_Win32.pm win32/config_sh.PL win32/genmk95.pl
- ! win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 4652] By: gsar on 1999/12/05 09:24:45
- Log: From: Mike Hopkirk (hops) <hops@scoot.pdev.sco.com>
- Date: Thu, 4 Nov 1999 16:34:23 -0800 (PST)
- Message-Id: <199911050034.QAA06499@scoot.pdev.sco.com>
- Subject: [ID 19991104.005] modified hints file for UnixWare7 ( svr5)
- Branch: perl
- ! Changes hints/svr5.sh
-____________________________________________________________________________
-[ 4651] By: gsar on 1999/12/05 09:01:19
- Log: on dosish platforms, avoid infinite recursion in File::Path::mkpath()
- when given non-existent drive names
- Branch: perl
- ! lib/File/Path.pm
-____________________________________________________________________________
-[ 4650] By: gsar on 1999/12/05 08:47:11
- Log: windows build tweaks for change#4649
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4649] By: gsar on 1999/12/05 07:49:28
- Log: make File::Glob::glob() the default for CORE::glob()
- (old csh glob can still be had with -DPERL_EXTERNAL_GLOB)
- Branch: perl
- ! Makefile.SH op.c pod/perldelta.pod win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 4648] By: gsar on 1999/12/05 00:33:34
- Log: fix bug in processing L<> tags (from j.vavruska@post.cz)
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 4647] By: gsar on 1999/12/05 00:14:01
- Log: remove outdated entry
- Branch: perl
- ! pod/perltrap.pod
-____________________________________________________________________________
-[ 4646] By: gsar on 1999/12/04 22:48:51
- Log: s/block/loop block/ in diagnostics about next, last, redo
- Branch: perl
- ! pod/perldiag.pod pp_ctl.c t/op/runlevel.t t/pragma/warn/pp_ctl
-____________________________________________________________________________
-[ 4645] By: gsar on 1999/12/04 22:25:32
- Log: readability tweak suggested by GRommel@sears.com
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 4644] By: gsar on 1999/12/04 22:05:00
- Log: Configure tweak from Peter Prymmer
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 4643] By: gsar on 1999/12/04 21:55:27
- Log: make weak keyword check look for defined(&lock), not
- merely defined(*lock)
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4642] By: gsar on 1999/12/04 21:11:51
- Log: make eof() open ARGV if it isn't open already; also fixes bug
- where eof() would operate on any last-read filehandle, not
- just ARGV
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 4641] By: gsar on 1999/12/04 04:42:25
- Log: make uninitialized value warnings report opcode
- Branch: perl
- ! doio.c embed.h embed.pl global.sym objXSUB.h opcode.h
- ! opcode.pl perl.h perlapi.c pp.c pp_hot.c proto.h sv.c
- ! t/op/misc.t t/pragma/warn/1global t/pragma/warn/2use
- ! t/pragma/warn/3both t/pragma/warn/4lint t/pragma/warn/7fatal
- ! t/pragma/warn/doio t/pragma/warn/pp t/pragma/warn/pp_hot
- ! t/pragma/warn/sv
-____________________________________________________________________________
-[ 4640] By: gsar on 1999/12/04 02:40:44
- Log: provide explicit functions timegm_nocheck() and timelocal_nocheck()
- that don't do range checking
- Branch: perl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 4639] By: gsar on 1999/12/04 01:00:49
- Log: better implementation of change#3326; open(local $foo,...) now
- allowed in addition to any uninitialized variable, for consistency
- with how autovivification works elsewhere; add code to use the
- variable name as the name of the handle for simple variables, so
- that diagnostics report the handle: "... at - line 1, <$foo> line 10."
- Branch: perl
- ! op.c pod/perldelta.pod pp.c t/io/open.t
-____________________________________________________________________________
-[ 4638] By: gsar on 1999/12/03 21:20:00
- Log: pod nits
- Branch: perl
- ! pod/perlfunc.pod pod/perlrun.pod
-____________________________________________________________________________
-[ 4637] By: gsar on 1999/12/03 08:59:04
- Log: change#4431 was flawed
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4636] By: gsar on 1999/12/03 07:59:52
- Log: pod embellishments from Nathan Torkington
- Branch: perl
- ! pod/perlfaq2.pod pod/perlhack.pod
-____________________________________________________________________________
-[ 4635] By: gsar on 1999/12/03 07:56:04
- Log: perlfaq4 typo (from Jeff Pinyan <jeffp@crusoe.net>)
- Branch: perl
- ! pod/perlfaq4.pod
-____________________________________________________________________________
-[ 4634] By: gsar on 1999/12/03 07:47:47
- Log: test tweak for VMS (from Craig A. Berry)
- Branch: perl
- ! t/io/nargv.t
-____________________________________________________________________________
-[ 4633] By: gsar on 1999/12/03 07:44:52
- Log: patchls tweak from Andreas Koenig
- Branch: perl
- ! Porting/patchls
-____________________________________________________________________________
-[ 4632] By: gsar on 1999/12/03 07:42:23
- Log: don't mess with the umask()
- Branch: perl
- ! installhtml installman installperl lib/ExtUtils/Install.pm
- ! lib/ExtUtils/Manifest.pm
-____________________________________________________________________________
-[ 4631] By: gsar on 1999/12/03 06:52:50
- Log: support -a switch to append bytecode to an existing file and make
- perlcc use it (from Tom Hughes <tom@compton.nu>)
- Branch: perl
- ! ext/B/B/Bytecode.pm utils/perlcc.PL
-____________________________________________________________________________
-[ 4630] By: gsar on 1999/12/03 06:46:16
- Log: document incompatible perl4 vec() vs bitwise ops interaction trap
- (from Tom Phoenix)
- Branch: perl
- ! pod/perltrap.pod
-____________________________________________________________________________
-[ 4629] By: gsar on 1999/12/03 06:40:15
- Log: use PerlIO abstraction rather than straight stdio (from
- Chip Salzenberg)
- Branch: perl
- ! ext/ByteLoader/ByteLoader.xs
-____________________________________________________________________________
-[ 4628] By: gsar on 1999/12/03 06:15:54
- Log: avoid warning in IO::Select::exists() if socket doesn't exist
- Branch: perl
- ! ext/IO/lib/IO/Select.pm
-____________________________________________________________________________
-[ 4627] By: gsar on 1999/12/03 06:05:19
- Log: two small patches from Peter Prymmer <pvhp@forte.com>
- Branch: perl
- ! makedepend.SH win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4626] By: gsar on 1999/12/03 05:36:38
- Log: From: Peter Prymmer <pvhp@forte.com>
- Date: Thu, 25 Nov 1999 21:06:19 -0800 (PST)
- Message-Id: <199911260506.VAA17230@brio.forte.com>
- Subject: [PATCH: 5.005_62] implement /[:ascii:]/ on ebcdic machines
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 4625] By: gsar on 1999/12/03 05:20:21
- Log: Windows build tweaks due to change#4623
- Branch: perl
- ! win32/Makefile win32/makefile.mk win32/perlhost.h
-____________________________________________________________________________
-[ 4624] By: gsar on 1999/12/03 04:58:30
- Log: add missing file
- Branch: perl
- + ext/DynaLoader/XSLoader_pm.PL
-____________________________________________________________________________
-[ 4623] By: gsar on 1999/12/03 04:47:03
- Log: applied suggested patch; removed $VERSION = $VERSION hack
- (change#4043 fixed the need for that)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 16 Nov 1999 01:50:31 EST
- Message-Id: <199911160650.BAA18874@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_62] XSLoader.pm
- Branch: perl
- ! MANIFEST ext/B/B.pm ext/ByteLoader/ByteLoader.pm
- ! ext/DB_File/DB_File.pm ext/Data/Dumper/Dumper.pm
- ! ext/Devel/DProf/DProf.pm ext/Devel/Peek/Peek.pm
- ! ext/DynaLoader/DynaLoader_pm.PL ext/DynaLoader/Makefile.PL
- ! ext/DynaLoader/dlutils.c ext/Fcntl/Fcntl.pm
- ! ext/File/Glob/Glob.pm ext/GDBM_File/GDBM_File.pm ext/IO/IO.pm
- ! ext/NDBM_File/NDBM_File.pm ext/ODBM_File/ODBM_File.pm
- ! ext/Opcode/Opcode.pm ext/POSIX/POSIX.pm
- ! ext/SDBM_File/SDBM_File.pm ext/Socket/Socket.pm
- ! ext/Thread/Thread.pm ext/attrs/attrs.pm ext/re/re.pm
- ! lib/AutoLoader.pm lib/FindBin.pm lib/Getopt/Std.pm
-____________________________________________________________________________
-[ 4622] By: gsar on 1999/12/03 04:02:39
- Log: revert change#4618 (breaks C<$_ = 'A:B'; s/^[a-z]:/x/>)
- Branch: perl
- ! Changes embed.h embed.pl perl.h proto.h regcomp.c regcomp.h
-____________________________________________________________________________
-[ 4621] By: gsar on 1999/12/02 22:24:53
- Log: caveat about thread-safety of extensions
- Branch: perl
- ! pod/perlfork.pod
-____________________________________________________________________________
-[ 4620] By: gsar on 1999/12/02 20:31:02
- Log: XS documentation patches suggested by Ilya, severally adjusted
- Branch: perl
- ! pod/perlxs.pod pod/perlxstut.pod
-____________________________________________________________________________
-[ 4619] By: gsar on 1999/12/02 17:52:50
- Log: re-add missing Unicode database master
- Branch: perl
- + lib/unicode/Unicode.300
-____________________________________________________________________________
-[ 4618] By: gsar on 1999/12/02 06:56:18
- Log: applied suggested patch with prototype changes
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 23 Nov 1999 22:55:55 EST
- Message-Id: <199911240355.WAA23033@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_62] First char cognizance
- Branch: perl
- ! embed.h embed.pl perl.h proto.h regcomp.c regcomp.h
-____________________________________________________________________________
-[ 4617] By: gsar on 1999/12/02 06:04:57
- Log: fixes for bugs in change#4586 and OS/2 pod tweak, from Ilya
- Branch: perl
- ! os2/OS2/REXX/REXX.pm regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 4616] By: gsar on 1999/12/02 04:30:22
- Log: various documentation tweaks suggested by M. J. T. Guy
- Branch: perl
- ! INSTALL lib/strict.pm pod/perlfunc.pod pod/perlsyn.pod
-____________________________________________________________________________
-[ 4615] By: gsar on 1999/12/02 04:17:43
- Log: various File::Glob fixes for DOSISH platforms
- From: "Moore, Paul" <Paul.Moore@uk.origin-it.com>
- Date: Tue, 02 Nov 1999 11:11:25 GMT
- Message-Id: <714DFA46B9BBD0119CD000805FC1F53BDC38E3@UKRUX002.rundc.uk.origin-it.com>
- Subject: File::Glob again. Final patch, honest!
- Branch: perl
- + t/lib/glob-case.t
- ! MANIFEST ext/File/Glob/Changes ext/File/Glob/Glob.pm
- ! ext/File/Glob/Glob.xs ext/File/Glob/bsd_glob.c
- ! ext/File/Glob/bsd_glob.h op.c t/lib/glob-global.t
-____________________________________________________________________________
-[ 4614] By: gsar on 1999/12/02 03:42:55
- Log: allow XSUBs and prototyped subroutines to be used with sort() (tweaked
- variant of patch suggested by Peter Haworth <pmh@edison.ioppublishing.com>)
- Branch: perl
- ! pod/perldelta.pod pod/perlfunc.pod pp_ctl.c t/op/sort.t
-____________________________________________________________________________
-[ 4613] By: gsar on 1999/12/02 01:59:19
- Log: ignore yet another known scalar leak
- Branch: perl
- ! t/pragma/warn/regcomp
-____________________________________________________________________________
-[ 4612] By: gsar on 1999/12/02 01:15:02
- Log: avoid potential stack extension bug in pp_unpack() (spotted by Ilya)
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 4611] By: gsar on 1999/12/02 00:31:43
- Log: a somewhat tweaked version of suggested patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 27 Oct 1999 18:57:41 -0400 (EDT)
- Message-Id: <199910272257.SAA29928@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_62] Another round of pack/vec docs patches
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4610] By: gsar on 1999/12/01 19:09:31
- Log: more accurate require() pseudocode (from James P. Williams
- <James.P.Williams@USAHQ.UnitedSpaceAlliance.com>)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4609] By: gsar on 1999/12/01 18:43:49
- Log: avoid "Callback called exit" error on intentional exit()
- Branch: perl
- ! embedvar.h intrpvar.h objXSUB.h perl.c perl.h pp_ctl.c
-____________________________________________________________________________
-[ 4608] By: gsar on 1999/12/01 18:42:38
- Log: find_byclass() prototype was incoherent
- Branch: perl
- ! regexec.c
-____________________________________________________________________________
-[ 4607] By: gsar on 1999/12/01 05:45:10
- Log: better documentation for goto &NAME (from M. J. T. Guy)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4606] By: gsar on 1999/12/01 05:33:14
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> lib/unicode/Jamo.txt lib/unicode/NamesList.html
- +> lib/unicode/UCD300.html lib/unicode/Unicode3.html
- - lib/unicode/Jamo-2.txt lib/unicode/Unicode.html
- ! Changes
- !> (integrate 210 files)
-____________________________________________________________________________
-[ 4605] By: gsar on 1999/12/01 05:15:27
- Log: avoid PTR->IV cast warnings
- Branch: perl
- ! mg.c op.c scope.h
-____________________________________________________________________________
-[ 4604] By: gsar on 1999/12/01 03:59:56
- Log: email address changes
- Branch: perl
- ! AUTHORS Changes Porting/genlog Porting/p4d2p Porting/p4desc
- ! README.win32 ext/Data/Dumper/Dumper.pm lib/DB.pm
- ! lib/File/DosGlob.pm lib/Math/Complex.pm lib/Math/Trig.pm
- ! pod/perl5005delta.pod pod/perlport.pod t/op/runlevel.t
- ! utils/perlbug.PL utils/perldoc.PL win32/bin/perlglob.pl
-____________________________________________________________________________
-[ 4603] By: gsar on 1999/12/01 03:45:13
- Log: minor USE_ITHREADS tweaks
- Branch: perl
- ! doio.c op.c op.h pp_hot.c pp_sys.c run.c win32/Makefile
- ! win32/perllib.c win32/win32.h
-____________________________________________________________________________
-[ 4602] By: gsar on 1999/12/01 01:00:09
- Log: more complete pseudo-fork() support for Windows
- Branch: perl
- + pod/perlfork.pod win32/perlhost.h win32/vdir.h win32/vmem.h
- ! MANIFEST XSUB.h cop.h dump.c embed.h embed.pl embedvar.h
- ! ext/B/B/CC.pm ext/Opcode/Opcode.xs global.sym globals.c
- ! globvar.sym gv.c hv.c intrpvar.h iperlsys.h makedef.pl mg.c
- ! mpeix/mpeixish.h objXSUB.h op.c op.h os2/os2ish.h perl.c
- ! perl.h perlapi.c plan9/plan9ish.h pod/Makefile pod/buildtoc
- ! pod/perl.pod pod/roffitall pp.c pp_ctl.c pp_hot.c pp_sys.c
- ! proto.h regcomp.c run.c scope.c scope.h sv.c t/op/fork.t
- ! toke.c unixish.h util.c vos/vosish.h win32/Makefile
- ! win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h
- ! win32/win32iop.h win32/win32thread.h
-____________________________________________________________________________
-[ 4601] By: gsar on 1999/12/01 00:45:38
- Log: rudimentary support for remote debugging, from aeons ago (somewhat
- modified)
- From: Graham TerMarsch <grahamt@ActiveState.com>
- Date: Sat, 12 Sep 1998 10:46:55 -0700
- Message-ID: <35FAB38F.EA9AAC50@activestate.com>
- Subject: Re: Patches to perl5db.pl to allow for remote debugging
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 4600] By: chip on 1999/11/19 21:16:00
- Log: Document known limitations of fdopen() on some systems,
- as they apply to open() and sysopen().
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4599] By: chip on 1999/11/19 17:20:19
- Log: Undef printf before redirecting it to PerlIO_stdoutf.
- (Avoids an irritating warning when compiling with PerlIO.)
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 4598] By: jhi on 1999/11/22 21:30:17
- Log: Small VMS nits from Craig A. Berry, <craig.berry@metamor.com>.
- Branch: cfgperl
- ! README.vms t/io/open.t
-____________________________________________________________________________
-[ 4597] By: jhi on 1999/11/21 16:21:21
- Log: Replace #4596 with the change done in 5.005_03.
- Branch: cfgperl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 4596] By: jhi on 1999/11/21 16:07:20
- Log: Skip processing a file if the file to be opened is '-'
- (can happen in UNICOS)
- Branch: cfgperl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 4595] By: jhi on 1999/11/21 14:05:10
- Log: VMS patches from Peter Prymmer.
- Branch: cfgperl
- ! doio.c mg.c taint.c vms/subconfigure.com vms/vms.c
-____________________________________________________________________________
-[ 4594] By: jhi on 1999/11/18 17:07:14
- Log: The find_byclass prototype is already in proto.h.
- Branch: cfgperl
- ! regexec.c
-____________________________________________________________________________
-[ 4593] By: gsar on 1999/11/16 21:25:21
- Log: typo in flag checks
- Branch: utfperl
- ! sv.h
-____________________________________________________________________________
-[ 4592] By: jhi on 1999/11/16 21:17:25
- Log: Regen Configure.
- Branch: cfgperl
- ! Configure config_h.SH pp.c pp.h vms/subconfigure.com
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U
-____________________________________________________________________________
-[ 4591] By: jhi on 1999/11/16 14:53:19
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> cop.h deb.c embed.h embed.pl global.sym lib/Pod/Checker.pm
- !> lib/Pod/InputObjects.pm lib/Pod/Parser.pm lib/Pod/Select.pm
- !> lib/Pod/Usage.pm makedef.pl objXSUB.h perl.c perlapi.c
- !> pod/podchecker.PL pp_sys.c proto.h sv.c t/pod/poderrs.t
- !> t/pod/poderrs.xr
-____________________________________________________________________________
-[ 4590] By: gsar on 1999/11/16 05:57:56
- Log: Pod::Parser updates (v1.091) from Brad Appleton <bradapp@enteract.com>
- Branch: perl
- ! lib/Pod/Checker.pm lib/Pod/InputObjects.pm lib/Pod/Parser.pm
- ! lib/Pod/Select.pm lib/Pod/Usage.pm pod/podchecker.PL
- ! t/pod/poderrs.t t/pod/poderrs.xr
-____________________________________________________________________________
-[ 4589] By: gsar on 1999/11/15 18:47:34
- Log: add a synchronous stub fork() for USE_ITHREADS to prove that a simple
- C<if (fork()) { print "parent" } else { print "child" }> works on
- Windows (incidentally running a cloned^2 interpreter :)
- Branch: perl
- ! embed.h embed.pl global.sym makedef.pl objXSUB.h perlapi.c
- ! pp_sys.c proto.h sv.c
-____________________________________________________________________________
-[ 4588] By: gsar on 1999/11/15 14:34:36
- Log: cloning the stack (part 1)
- Branch: perl
- ! cop.h deb.c perl.c sv.c
-____________________________________________________________________________
-[ 4587] By: jhi on 1999/11/15 00:22:20
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes embed.h embed.pl embedvar.h global.sym intrpvar.h
- !> makedef.pl objXSUB.h op.c perl.h perlapi.c proto.h run.c sv.c
- !> win32/perllib.c
-____________________________________________________________________________
-[ 4586] By: jhi on 1999/11/14 21:17:26
- Log: Ilya's "hopscotch" patch, reworked by Ilya to fit.
- Branch: cfgperl
- ! embed.h embed.pl embedvar.h proto.h regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 4585] By: gsar on 1999/11/14 20:01:45
- Log: tweak for win32 build
- Branch: perl
- ! embed.h embed.pl op.c proto.h
-____________________________________________________________________________
-[ 4584] By: gsar on 1999/11/14 19:46:25
- Log: cosmetic tweaks
- Branch: perl
- ! embed.h embed.pl embedvar.h global.sym intrpvar.h makedef.pl
- ! objXSUB.h perl.h perlapi.c proto.h sv.c win32/perllib.c
-____________________________________________________________________________
-[ 4583] By: gsar on 1999/11/14 17:38:32
- Log: fix problem pointer casts
- Branch: perl
- ! Changes run.c sv.c
-____________________________________________________________________________
-[ 4582] By: jhi on 1999/11/14 17:10:01
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> cop.h dump.c ext/Opcode/Opcode.xs gv.c op.c perl.c perly.c
- !> perly.y pp_ctl.c pp_sys.c sv.c t/op/misc.t toke.c util.c
- !> vms/perly_c.vms win32/perllib.c
-____________________________________________________________________________
-[ 4581] By: jhi on 1999/11/14 17:08:23
- Log: The separation of 64-bitness and largefileness continues
- (with a setback, see hpux.sh).
- Branch: cfgperl
- ! Configure MANIFEST config_h.SH hints/aix.sh hints/hpux.sh
- ! hints/solaris_2.sh
- Branch: metaconfig
- ! U/threads/archname.U U/typedefs/lseektype.U
- Branch: metaconfig/U/perl
- ! fpossize.U use64bits.U uselfs.U
-____________________________________________________________________________
-[ 4580] By: jhi on 1999/11/14 13:26:41
- Log: Another Unicode update.
- Branch: cfgperl
- + lib/unicode/Jamo.txt lib/unicode/NamesList.html
- + lib/unicode/UCD300.html lib/unicode/Unicode3.html
- - lib/unicode/Jamo-2.txt lib/unicode/Unicode.html
- ! (edit 189 files)
-____________________________________________________________________________
-[ 4579] By: gsar on 1999/11/14 10:21:49
- Log: sundry cleanups for cloned interpreters (only known failure mode
- is due to regexps keeping non-constant data in their compiled
- structures)
- Branch: perl
- ! cop.h dump.c ext/Opcode/Opcode.xs gv.c op.c perl.c pp_ctl.c
- ! pp_sys.c sv.c toke.c util.c win32/perllib.c
-____________________________________________________________________________
-[ 4578] By: gsar on 1999/11/14 03:37:37
- Log: fix bug in change#4515 (STOP blocks now see @ARGV like the rest)
- Branch: perl
- ! perly.c perly.y t/op/misc.t vms/perly_c.vms
-____________________________________________________________________________
-[ 4577] By: jhi on 1999/11/13 19:50:24
- Log: Change #4576 accidentally leaked also parts of
- Ilya's patch that won't apply cleanly anymore.
- Branch: cfgperl
- ! regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 4576] By: jhi on 1999/11/13 19:43:37
- Log: Integrate with Sarathy.
- Branch: cfgperl
- ! embed.h embed.pl embedvar.h proto.h regexec.c t/op/re_tests
- !> ext/Errno/Errno_pm.PL ext/IO/lib/IO/Socket.pm t/lib/dumper.t
- !> t/op/regexp.t t/pragma/overload.t
-____________________________________________________________________________
-[ 4575] By: gsar on 1999/11/13 19:41:46
- Log: typos in change#4561 and change#4565
- Branch: perl
- ! ext/Errno/Errno_pm.PL ext/IO/lib/IO/Socket.pm
-____________________________________________________________________________
-[ 4574] By: gsar on 1999/11/13 19:31:19
- Log: revert non-kosher parts of change#4562 (sort order problems
- should be ignored (on ebcdic) by fixing dumper.t/T() to sort
- result and expected lines; /[:ascii:]/ not working should be
- fixed, not ignored in regexp.t; result from sort should be
- fixed to be ascii portable on ebcdic, not ebcdic-specific)
- Branch: perl
- ! t/lib/dumper.t t/op/regexp.t t/pragma/overload.t
-____________________________________________________________________________
-[ 4573] By: gsar on 1999/11/13 19:13:04
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> lib/unicode/Eq/Latin1.pl lib/unicode/Eq/Unicode.pl
- +> lib/unicode/In/BopomofoExtended.pl
- +> lib/unicode/In/BraillePatterns.pl
- +> lib/unicode/In/CJKRadicalsSupplement.pl
- +> lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl
- +> lib/unicode/In/Cherokee.pl
- +> lib/unicode/In/IdeographicDescriptionCharacters.pl
- +> lib/unicode/In/KangxiRadicals.pl lib/unicode/In/Khmer.pl
- +> lib/unicode/In/Mongolian.pl lib/unicode/In/Myanmar.pl
- +> lib/unicode/In/Ogham.pl lib/unicode/In/Runic.pl
- +> lib/unicode/In/Sinhala.pl lib/unicode/In/Syriac.pl
- +> lib/unicode/In/Thaana.pl
- +> lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl
- +> lib/unicode/In/YiRadicals.pl lib/unicode/In/YiSyllables.pl
- - lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
- !> (integrate 213 files)
-____________________________________________________________________________
-[ 4572] By: jhi on 1999/11/13 18:44:50
- Log: From: "Craig A. Berry" <craig.berry@metamor.com>
- To: perl5-porters@perl.org, VMSPERL@perl.org
- Subject: [PATCH 5.005_03 and 5.005_62] updates to README.vms
- Date: Wed, 27 Oct 1999 11:02:54 -0500
- Message-Id: <4.2.0.58.19991027105257.00addc10@mmtnt11.metamor.com>
- Branch: cfgperl
- ! README.vms
-____________________________________________________________________________
-[ 4571] By: jhi on 1999/11/13 18:33:39
- Log: From: jand@activestate.com (Jan Dubois)
- To: perl5-porters@perl.org, Perl-Win32-Porters@activestate.com
- Cc: Douglas Lankshear <dougl@activestate.com>,
- Gurusamy Sarathy <gsar@activestate.com>
- Subject: [5.005_62 PATCH] support link() on WinNT and NTFS
- Date: Tue, 09 Nov 1999 00:38:33 +0100
- Message-ID: <382b5d24.10899522@smtprelay.t-online.de>
- Branch: cfgperl
- ! XSUB.h iperlsys.h pp_sys.c t/io/fs.t win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/perllib.c
- ! win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 4570] By: jhi on 1999/11/13 18:30:37
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_62] makedef.pl goof
- Date: Mon, 8 Nov 1999 23:55:21 -0500 (EST)
- Message-Id: <199911090455.XAA25627@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! makedef.pl
-____________________________________________________________________________
-[ 4569] By: jhi on 1999/11/13 18:06:54
- Log: From: Michael G Schwern <schwern@pobox.com>
- To: perl5-porters@perl.org, pod-people@perl.org
- Cc: tchrist@mox.perl.com, gnat@frii.com
- Subject: [DOCPATCH 5.005_62 perlfaq9.pod] Mention HTML::FormatText
- Date: Wed, 10 Nov 1999 17:21:46 -0500
- Message-ID: <19991110172146.A23527@athens.aocn.com>
- Branch: cfgperl
- ! pod/perlfaq9.pod
-____________________________________________________________________________
-[ 4568] By: jhi on 1999/11/13 18:05:33
- Log: From: "Paul Moore" <gustav@morpheus.demon.co.uk>
- To: <perl5-porters@perl.org>
- Subject: DynaLoader_pm.PL patch (backslashes in strings)
- Date: Wed, 10 Nov 1999 22:52:02 -0000
- Message-ID: <LPBBIIMJKJMPNOGHGLLCMEBFCAAA.gustav@morpheus.demon.co.uk>
- Branch: cfgperl
- ! ext/DynaLoader/DynaLoader_pm.PL
-____________________________________________________________________________
-[ 4567] By: jhi on 1999/11/13 18:03:52
- Log: From: JD Laub <jdl@access-health.com>
- To: perl5-porters@perl.org
- Subject: [ID 19991112.002] patch: Exporter.pm not reporting path
- Date: Fri, 12 Nov 1999 08:58:28 -0700 (MST)
- Message-Id: <199911121558.IAA08915@mocha.iasi.com>
- Branch: cfgperl
- ! lib/Exporter/Heavy.pm
-____________________________________________________________________________
-[ 4566] By: jhi on 1999/11/13 18:01:24
- Log: From: Bernard Quatermass <bernard@quatermass.co.uk>
- To: perl5-porters@perl.org
- Subject: small patch for perldoc
- Date: Fri, 12 Nov 1999 23:11:43 GMT
- Message-Id: <VA.0000001c.00d1e05a@quatermass.co.uk>
- Branch: cfgperl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 4565] By: jhi on 1999/11/13 17:58:54
- Log: From: Scott Gifford <sgifford@tir.com>
- To: perl5-porters@perl.org
- Cc: gbarr@pobox.com
- Subject: [ID 19991112.004] Bug in IO::Socket (patch included)
- Date: 12 Nov 1999 18:55:30 -0500
- Message-Id: <m3emdvw9hp.fsf@sgifford.tir.com>
- Branch: cfgperl
- ! ext/IO/lib/IO/Socket.pm
-____________________________________________________________________________
-[ 4564] By: jhi on 1999/11/13 17:45:39
- Log: Applied manually:
- From: "Craig A. Berry" <craig.berry@metamor.com>
- To: perl5-porters@perl.org, VMSPERL@perl.org
- Subject: [PATCH 5.005_62] patches required to build on VMS
- Date: Tue, 09 Nov 1999 18:16:14 -0600
- Message-Id: <4.2.2.19991109173839.00d12630@mmtnt11.metamor.com>
- Branch: cfgperl
- ! configure.com vms/descrip_mms.template vms/subconfigure.com
- ! vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 4563] By: jhi on 1999/11/13 17:18:41
- Log: Regen Unicode tables to include a warning:
- Thou Shalt Not Edit Them By Hand; add missing
- (Unicode 2.0 -introduced) tables to MANIFEST;
- convert the equivalence tables to be valid Perl code.
- Branch: cfgperl
- + lib/unicode/Eq/Latin1.pl lib/unicode/Eq/Unicode.pl
- + lib/unicode/In/BopomofoExtended.pl
- + lib/unicode/In/BraillePatterns.pl
- + lib/unicode/In/CJKRadicalsSupplement.pl
- + lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl
- + lib/unicode/In/Cherokee.pl
- + lib/unicode/In/IdeographicDescriptionCharacters.pl
- + lib/unicode/In/KangxiRadicals.pl lib/unicode/In/Khmer.pl
- + lib/unicode/In/Mongolian.pl lib/unicode/In/Myanmar.pl
- + lib/unicode/In/Ogham.pl lib/unicode/In/Runic.pl
- + lib/unicode/In/Sinhala.pl lib/unicode/In/Syriac.pl
- + lib/unicode/In/Thaana.pl
- + lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl
- + lib/unicode/In/YiRadicals.pl lib/unicode/In/YiSyllables.pl
- - lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
- ! (edit 169 files)
-____________________________________________________________________________
-[ 4562] By: jhi on 1999/11/13 16:53:00
- Log: From: Peter Prymmer <pvhp@forte.com>
- To: gsar@activestate.com, perl-mvs@perl.org, perlbug@perl.com
- Subject: [PATCH: 5.005_62]was Re: [ID 19991102.003] perl on os390
- Date: Wed, 10 Nov 1999 14:34:36 -0800 (PST)
- Message-Id: <199911102234.OAA01018@brio.forte.com>
- Branch: cfgperl
- ! t/lib/dumper.t t/op/pack.t t/op/regexp.t t/pragma/locale.t
- ! t/pragma/overload.t
-____________________________________________________________________________
-[ 4561] By: jhi on 1999/11/13 16:29:37
- Log: $Config{myarchname} is not a good architecture identifier
- because it may contain host/node identification like
- CPU serial numbers.
- Branch: cfgperl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 4560] By: jhi on 1999/11/13 16:26:13
- Log: Continue largefileness separation from quadness;
- move nv-preserving test out of perl.h into Configure;
- use HAS_SETVBUF in IO.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH ext/IO/IO.xs hints/solaris_2.sh perl.h pp_sys.c
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U
- Branch: metaconfig/U/perl
- + nvpresuv.U
- ! d_fseeko.U d_ftello.U io64.U perlxv.U
-____________________________________________________________________________
-[ 4559] By: jhi on 1999/11/13 13:46:38
- Log: Try to fix largefileness so that it "works" without a quad IV.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.h pp_sys.c t/lib/syslfs.t t/op/lfs.t
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U U/typedefs/lseektype.U
- Branch: metaconfig/U/perl
- ! io64.U
-____________________________________________________________________________
-[ 4558] By: jhi on 1999/11/13 11:36:19
- Log: Undo drift from mainline.
- Branch: cfgperl
- ! regcomp.c util.c utils/h2xs.PL
-____________________________________________________________________________
-[ 4557] By: gsar on 1999/11/13 10:54:46
- Log: typo
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 4556] By: gsar on 1999/11/13 10:53:41
- Log: integrate cfgperl contents (op.[ch] needed manual resolve)
- Branch: perl
- +> epoc/Config.pm epoc/autosplit.pl epoc/createpkg.pl
- +> epoc/epoc_stubs.c
- !> (integrate 48 files)
-____________________________________________________________________________
-[ 4555] By: jhi on 1999/11/13 10:05:54
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> dump.c ext/Devel/DProf/DProf.xs gv.c mg.c op.c perl.c pp.c
- !> sv.c warnings.h warnings.pl win32/Makefile win32/perllib.c
-____________________________________________________________________________
-[ 4554] By: jhi on 1999/11/13 10:03:07
- Log: s/_SIGN$/_sign/g;
- Branch: metaconfig
- ! U/typedefs/gidsign.U U/typedefs/pidsign.U U/typedefs/uidsign.U
-____________________________________________________________________________
-[ 4553] By: gsar on 1999/11/13 02:17:53
- Log: cloned interpreters now actually run and pass all but 55/10386
- subtests; various subtle bugs, new and old, observed when running
- cloned interpreters have been fixed
-
- still to do:
- | * dup psig_ptr table
- | * merge PADOP GVs support with "our" SVs (existing PADOPs are too
- | simple-minded and grab one pad entry each, heavily bloating
- | the pad by not avoiding dups)
- | * overloaded constants are not really immutable--they need to
- | be PADOPs
- | * allocator for constants and OPs need to be spelled differently
- | (shared vs interpreter-local allocations)
- | * optree refcounting is still missing locking (macros are in place)
- | * curstackinfo, {mark,scope,save,ret}stack need to be cloned so
- | perl_clone() can be called from within runops*()
- Branch: perl
- ! dump.c ext/Devel/DProf/DProf.xs gv.c mg.c op.c perl.c pp.c
- ! sv.c warnings.h warnings.pl win32/Makefile win32/perllib.c
-____________________________________________________________________________
-[ 4552] By: jhi on 1999/11/11 23:17:43
- Log: Turn on largefileness always if available and
- continue 64-bit fixes.
- Branch: cfgperl
- ! Configure config_h.SH handy.h hints/aix.sh hints/dec_osf.sh
- ! hints/hpux.sh hints/irix_6.sh hints/solaris_2.sh perl.h pp.c
- ! sv.c t/lib/syslfs.t t/op/lfs.t utf8.c
-____________________________________________________________________________
-[ 4551] By: jhi on 1999/11/11 23:16:15
- Log: Split int64type from i_inttypes, rename quadcase into quadkind.
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U
- Branch: metaconfig/U/perl
- + d_int64t.U
- ! i_inttypes.U io64.U
-____________________________________________________________________________
-[ 4550] By: jhi on 1999/11/11 20:24:55
- Log: Fix a thinko in 4548.
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 4549] By: jhi on 1999/11/11 19:48:21
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 56 files)
-____________________________________________________________________________
-[ 4548] By: jhi on 1999/11/11 19:41:56
- Log: Try to do something if st_size, st_uid, st_gid are too big for an IV;
- regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH pp_sys.c
-____________________________________________________________________________
-[ 4547] By: jhi on 1999/11/11 19:40:38
- Log: s/_SIZE$/_size/g; add sizesize and ssizesize.
- Branch: metaconfig
- + U/typedefs/sizesize.U U/typedefs/ssizesize.U
- ! U/typedefs/gidsize.U U/typedefs/pidsize.U U/typedefs/uidsize.U
-____________________________________________________________________________
-[ 4546] By: gsar on 1999/11/11 10:32:54
- Log: avoid stash pointers in optree under USE_ITHREADS
- Branch: perl
- ! bytecode.pl cop.h ext/B/B.xs ext/B/B/Asmdata.pm
- ! ext/B/B/Bytecode.pm ext/B/B/C.pm ext/B/B/Debug.pm
- ! ext/B/B/Deparse.pm ext/ByteLoader/bytecode.h
- ! ext/ByteLoader/byterun.c ext/ByteLoader/byterun.h
- ! ext/Opcode/Opcode.xs gv.c op.c perl.c pp.c pp_ctl.c pp_hot.c
- ! scope.h sv.c
-____________________________________________________________________________
-[ 4545] By: gsar on 1999/11/11 06:04:20
- Log: another change towards a shareable optree: avoid pointer to filegv
- in COP; revert parts of change#4485 and s/xcv_filegv/xcv_file/
- (CvFILE() may yet come in handy somewhere); adjust compiler doodads
- to suit
- Branch: perl
- ! bytecode.pl cop.h cv.h dump.c ext/B/B.pm ext/B/B.xs
- ! ext/B/B/Asmdata.pm ext/B/B/Bytecode.pm ext/B/B/C.pm
- ! ext/B/B/CC.pm ext/B/B/Debug.pm ext/B/B/Deparse.pm
- ! ext/B/B/Lint.pm ext/B/B/Xref.pm ext/ByteLoader/bytecode.h
- ! ext/ByteLoader/byterun.c ext/ByteLoader/byterun.h
- ! ext/Devel/Peek/Peek.pm gv.c gv.h op.c perl.c pp.c pp_ctl.c
- ! pp_sys.c scope.c scope.h sv.c sv.h toke.c util.c util.h
- ! win32/perllib.c
-____________________________________________________________________________
-[ 4544] By: gsar on 1999/11/10 18:19:12
- Log: more cleanups for change#4539
- Branch: perl
- ! gv.h op.c op.h pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 4543] By: gsar on 1999/11/10 01:52:22
- Log: remove dead branch/infinite looper in change#3612
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 4542] By: gsar on 1999/11/09 20:05:47
- Log: IoDIRP may be fake when used in source filters, mark as such
- Branch: perl
- ! sv.c sv.h toke.c
-____________________________________________________________________________
-[ 4541] By: gsar on 1999/11/09 05:47:53
- Log: small nits in changes#4538,4539
- Branch: perl
- ! op.c sv.c
-____________________________________________________________________________
-[ 4540] By: gsar on 1999/11/08 20:30:58
- Log: win32 symbol export tweak
- Branch: perl
- ! makedef.pl win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 4539] By: gsar on 1999/11/08 18:50:40
- Log: preliminary support for GVOP indirection via pad
- Branch: perl
- ! doio.c dump.c embed.h embed.pl global.sym objXSUB.h op.c op.h
- ! opcode.pl perlapi.c pp_hot.c pp_sys.c proto.h run.c
-____________________________________________________________________________
-[ 4538] By: gsar on 1999/11/08 11:25:49
- Log: preliminary support for perl_clone() (still needs work in
- the following areas: SVOPs must indirect via pad; context
- stack, scope stack, and runlevels must be cloned; must
- hook up the virtualized pseudo-process support provided by
- "host"; ...)
- Branch: perl
- ! av.h embed.h embed.pl embedvar.h global.sym hv.c hv.h
- ! intrpvar.h makedef.pl objXSUB.h perl.h perlapi.c proto.h sv.c
- ! win32/perllib.c win32/win32.c
-____________________________________________________________________________
-[ 4537] By: gsar on 1999/11/08 11:19:18
- Log: more thorough cleanup in perl_destroy()
- Branch: perl
- ! perl.c util.c
-____________________________________________________________________________
-[ 4536] By: gsar on 1999/11/08 07:16:10
- Log: win32 internal data must be interpreter-local
- Branch: perl
- ! win32/win32.c win32/win32.h win32/win32sck.c
-____________________________________________________________________________
-[ 4535] By: gsar on 1999/11/08 04:17:28
- Log: tweak change#4502
- Branch: perl
- ! doio.c perl.c
-____________________________________________________________________________
-[ 4534] By: jhi on 1999/11/07 13:17:03
- Log: Four special class subs, not three.
- Branch: cfgperl
- ! pod/perlmod.pod
-____________________________________________________________________________
-[ 4533] By: jhi on 1999/11/07 13:13:15
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> mg.c t/io/print.t
-____________________________________________________________________________
-[ 4532] By: jhi on 1999/11/07 12:36:10
- Log: More test program maintenance.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/a_dvisory/intsize.U U/compline/alignbytes.U
- ! U/compline/charsize.U U/compline/d_sigaction.U
- ! U/compline/doublesize.U U/compline/floatsize.U
- ! U/compline/nblock_io.U U/compline/ptrsize.U
- ! U/modified/Signal.U U/typedefs/gidsize.U U/typedefs/pidsize.U
- ! U/typedefs/uidsize.U
- Branch: metaconfig/U/perl
- ! fpossize.U
-____________________________________________________________________________
-[ 4531] By: jhi on 1999/11/07 00:34:09
- Log: Tidy up the metaconfig test programs.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/a_dvisory/intsize.U U/compline/alignbytes.U
- ! U/compline/charsize.U U/compline/doublesize.U
- ! U/compline/nblock_io.U U/compline/ptrsize.U
- ! U/modified/d_longlong.U U/typedefs/gidsize.U
- ! U/typedefs/lseektype.U U/typedefs/pidsize.U
- ! U/typedefs/uidsize.U
- Branch: metaconfig/U/perl
- ! fpossize.U
-____________________________________________________________________________
-[ 4530] By: jhi on 1999/11/06 23:51:34
- Log: So many printfs, so little time.
- Branch: cfgperl
- ! op.c perl.c regcomp.c scope.c util.c
-____________________________________________________________________________
-[ 4529] By: jhi on 1999/11/06 23:27:35
- Log: Replace the explicit zeros with NOOPs.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4528] By: jhi on 1999/11/06 23:10:54
- Log: From: jand@activestate.com (Jan Dubois)
- To: perl5-porters@perl.org
- Cc: Mike Blazer <blazer@mail.nevalink.ru>,
- Mark Borgerding <mborgerding@acm.org>
- Subject: [5.005_62 PATCH] binmode and locale support for -T and -B filetest operators
- Date: Sat, 06 Nov 1999 22:16:43 +0100
- Message-ID: <38279207.46448719@smtprelay.t-online.de>
- Branch: cfgperl
- ! op.c op.h
-____________________________________________________________________________
-[ 4527] By: jhi on 1999/11/06 20:22:14
- Log: ...and fewer.
- Branch: cfgperl
- ! dump.c
-____________________________________________________________________________
-[ 4526] By: jhi on 1999/11/06 20:19:04
- Log: ...and they are getting fewer.
- Branch: cfgperl
- ! dump.c op.c util.c
-____________________________________________________________________________
-[ 4525] By: jhi on 1999/11/06 19:59:59
- Log: More printf miscasts flushed out.
- Branch: cfgperl
- ! dump.c ext/B/B.xs ext/Data/Dumper/Dumper.xs regcomp.c
- ! regexec.c
-____________________________________________________________________________
-[ 4524] By: jhi on 1999/11/06 15:39:05
- Log: Crushing the remaining %ld guerillas.
- Branch: cfgperl
- ! ext/Devel/DProf/DProf.xs
-____________________________________________________________________________
-[ 4523] By: jhi on 1999/11/06 15:11:38
- Log: Update CPAN sites list.
- Branch: cfgperl
- ! pod/perlmodlib.pod
-____________________________________________________________________________
-[ 4522] By: jhi on 1999/11/05 19:50:46
- Log: The -n32 is normally part of $cc, not $ccflags.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 4521] By: gsar on 1999/11/05 04:35:30
- Log: allow $\ to work right when set to a string with embedded nulls
- Branch: perl
- ! mg.c t/io/print.t
-____________________________________________________________________________
-[ 4520] By: jhi on 1999/11/04 23:30:09
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> embedvar.h ext/B/B/Bytecode.pm ext/B/B/Lint.pm
- !> ext/B/B/Stash.pm ext/B/NOTES ext/B/O.pm ext/File/Glob/Glob.pm
- !> ext/File/Glob/bsd_glob.c ext/File/Glob/bsd_glob.h intrpvar.h
- !> keywords.h keywords.pl objXSUB.h op.c perl.c pod/perldelta.pod
- !> pod/perldiag.pod pod/perlfunc.pod pod/perlmod.pod
- !> pod/perlrun.pod pod/perlsub.pod pod/perltodo.pod toke.c
-____________________________________________________________________________
-[ 4519] By: jhi on 1999/11/04 23:09:25
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_62] ref to non-lvalue method
- Date: Wed, 3 Nov 1999 03:52:48 -0500 (EST)
- Message-Id: <199911030852.DAA06563@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! op.c
-____________________________________________________________________________
-[ 4518] By: jhi on 1999/11/04 23:07:27
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_62] xsubpp dependency
- Date: Wed, 3 Nov 1999 02:57:23 -0500 (EST)
- Message-Id: <199911030757.CAA06325@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 4517] By: jhi on 1999/11/04 23:05:59
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_62] regexp.h
- Date: Wed, 3 Nov 1999 02:55:21 -0500 (EST)
- Message-Id: <199911030755.CAA06311@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! regexp.h
-____________________________________________________________________________
-[ 4516] By: gsar on 1999/11/04 18:25:45
- Log: change#4485 didn't do the right thing for B::Bytecode
- Branch: perl
- ! ext/B/B/Bytecode.pm
-____________________________________________________________________________
-[ 4515] By: gsar on 1999/11/04 17:28:29
- Log: implement STOP blocks and fix compiler to use them (minimally
- tested)
- Branch: perl
- ! embedvar.h ext/B/B/Lint.pm ext/B/B/Stash.pm ext/B/NOTES
- ! ext/B/O.pm intrpvar.h keywords.h keywords.pl objXSUB.h op.c
- ! perl.c pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- ! pod/perlmod.pod pod/perlrun.pod pod/perlsub.pod
- ! pod/perltodo.pod toke.c
-____________________________________________________________________________
-[ 4514] By: gsar on 1999/11/04 15:59:46
- Log: display BSD license in Glob.pm (for clause #2 conformity)
- Branch: perl
- ! ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c
- ! ext/File/Glob/bsd_glob.h
-____________________________________________________________________________
-[ 4513] By: jhi on 1999/11/04 08:26:19
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/io/nargv.t
- !> (integrate 34 files)
-____________________________________________________________________________
-[ 4512] By: jhi on 1999/11/04 08:01:25
- Log: Incremental Mac integration from Matthias.
- Branch: cfgperl
- ! perl.c perl.h pp_ctl.c pp_hot.c run.c sv.c t/pod/testpchk.pl
- ! toke.c util.c
-____________________________________________________________________________
-[ 4511] By: gsar on 1999/11/04 02:53:37
- Log: remove VIRTUAL tag, PERL_OBJECT doesn't need it anymore
- Branch: perl
- ! dosish.h embed.pl mg.c os2/os2ish.h perl.c perl.h perly.c
- ! perly_c.diff pp_ctl.c proto.h regcomp.c regexec.c sv.c toke.c
- ! universal.c vms/perly_c.vms vms/vmsish.h win32/win32.h
- ! xsutils.c
-____________________________________________________________________________
-[ 4510] By: jhi on 1999/11/02 22:12:29
- Log: S_init_interp is a better place to diddle with PL_opargs
- than perl_construct.
- Branch: cfgperl
- ! perl.c
-____________________________________________________________________________
-[ 4509] By: jhi on 1999/11/02 21:30:02
- Log: From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- To: ben@mucus.advanced.org, perl5-porters@perl.org
- Subject: Re: [ID 19991102.002] unpack('N', pack('N', -1)) not idempotent
- Date: Tue, 02 Nov 1999 21:36:00 +0000
- Message-Id: <E11ilay-00020o-00@taurus.cus.cam.ac.uk>
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4508] By: jhi on 1999/11/02 20:46:27
- Log: Initial integration of the MacPerl changes form Matthias.
- Branch: cfgperl
- ! doio.c ext/DynaLoader/DynaLoader_pm.PL ext/Fcntl/Fcntl.pm
- ! ext/Fcntl/Fcntl.xs gv.c mg.c opcode.pl perl.c perl.h pp_ctl.c
- ! pp_hot.c pp_sys.c run.c sv.c toke.c util.c
-____________________________________________________________________________
-[ 4507] By: jhi on 1999/11/01 23:05:07
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: lvirden@cas.org (Larry W. Virden)
- Cc: perl5-porters@perl.org, lvirden@cas.org
- Subject: Re: [ID 19991026.001] perl segmentation fault report
- Date: Mon, 1 Nov 1999 18:14:16 -0500 (EST)
- Message-Id: <199911012314.SAA22664@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! regexec.c t/op/pat.t
-____________________________________________________________________________
-[ 4506] By: jhi on 1999/11/01 19:56:28
- Log: From: Olaf Flebbe <olaf@science-computing.de>
- To: perl5-porters@perl.org
- Subject: [PATCH: 5.005_62] Patch for EPOC Support
- Date: Mon, 1 Nov 1999 20:46:54 +0100 (MET)
- Message-ID: <Pine.LNX.4.10.9911012045190.411-100000@dragon.science-computing.de>
- Branch: cfgperl
- + epoc/Config.pm epoc/autosplit.pl epoc/createpkg.pl
- + epoc/epoc_stubs.c
- ! MANIFEST README.epoc epoc/epocish.h epoc/perl.mmp
- ! epoc/perl.pkg
-____________________________________________________________________________
-[ 4505] By: gsar on 1999/11/01 17:09:44
- Log: macros for COP.cop_filegv access
- Branch: perl
- ! cop.h deb.c gv.c op.c perl.c pp_ctl.c pp_sys.c scope.c toke.c
- ! util.c
-____________________________________________________________________________
-[ 4504] By: gsar on 1999/11/01 17:08:28
- Log: enable better Win32::DomainName() by demand loading netapi32.dll
- (from Jan Dubois)
- Branch: perl
- ! pod/Win32.pod win32/win32.c
-____________________________________________________________________________
-[ 4503] By: gsar on 1999/10/31 20:56:06
- Log: change#4502 was missing a file
- Branch: perl
- + t/io/nargv.t
-____________________________________________________________________________
-[ 4502] By: gsar on 1999/10/31 20:46:02
- Log: make nested ARGV/$^I loops work correctly; fixes several bugs
- in the way ARGV state was handled in readline(); writing a
- subroutine to do inplace edits is now possible, provided *ARGV,
- *ARGVOUT, $^I and $_ are localized where needed
- Branch: perl
- ! MANIFEST doio.c embedvar.h intrpvar.h objXSUB.h perl.c
- ! pp_hot.c scope.c
-____________________________________________________________________________
-[ 4501] By: jhi on 1999/10/31 12:43:54
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> perl.h win32/config.bc win32/config.gc win32/config.vc
- !> win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 4500] By: gsar on 1999/10/31 10:01:17
- Log: updated windows config* files
- Branch: perl
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 4499] By: gsar on 1999/10/31 09:15:17
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH perl.h
-____________________________________________________________________________
-[ 4498] By: gsar on 1999/10/31 09:13:41
- Log: remove unused struct Outrec
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 4497] By: jhi on 1999/10/30 12:41:50
- Log: Add HAS_QUAD ($Config{d_quad}); use it.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.h
- Branch: metaconfig
- ! U/a_dvisory/quadtype.U U/compline/charsize.U U/typedefs/gidf.U
- ! U/typedefs/uidf.U
- Branch: metaconfig/U/perl
- ! perlxv.U
-____________________________________________________________________________
-[ 4496] By: gsar on 1999/10/30 00:28:32
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure Policy_sh.SH Porting/Glossary Porting/config.sh
- !> Porting/config_H README.hurd config_h.SH doop.c handy.h
- !> hints/aix.sh hints/irix_6.sh hints/solaris_2.sh mg.c perl.c
- !> perl.h pp.c pp.h regexec.c sv.c taint.c
-____________________________________________________________________________
-[ 4495] By: jhi on 1999/10/29 23:36:19
- Log: Continue what #4494 started; introduce uid and gid formats.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH handy.h perl.h
- Branch: metaconfig
- + U/a_dvisory/quadtype.U U/typedefs/gidf.U U/typedefs/uidf.U
- - U/typedefs/quadtype.U
- Branch: metaconfig/U/perl
- ! perlxv.U
-____________________________________________________________________________
-[ 4494] By: jhi on 1999/10/29 22:09:01
- Log: Move the IV, UV, I8, U8, ..., and NV to metaconfig
- from perl.h and handy.h.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH handy.h perl.h
- Branch: metaconfig/U/perl
- + perlxv.U perlxvf.U
-____________________________________________________________________________
-[ 4493] By: jhi on 1999/10/29 22:08:06
- Log: Finetuning the output continues along the lines of #4490 and #4491.
- Branch: metaconfig
- ! U/modified/i_sysuio.U U/threads/d_pthreadj.U
- ! U/typedefs/fpostype.U
- Branch: metaconfig/U/perl
- + fpossize.U
- ! d_cmsghdr_s.U d_fs_data_s.U d_msghdr_s.U d_statfs3.U
- ! d_statfs4.U d_statfs_f_flags.U d_statfs_s.U io64.U
-____________________________________________________________________________
-[ 4492] By: jhi on 1999/10/29 21:14:53
- Log: Hurd update from Mark Kettenis.
- Branch: cfgperl
- ! README.hurd
-____________________________________________________________________________
-[ 4491] By: jhi on 1999/10/29 20:37:02
- Log: A new try at what #4490 tried to accomplish.
- Branch: metaconfig
- ! U/modified/i_sysuio.U U/threads/d_pthreadj.U
- Branch: metaconfig/U/perl
- ! d_cmsghdr_s.U d_fs_data_s.U d_msghdr_s.U d_statfs3.U
- ! d_statfs4.U d_statfs_f_flags.U d_statfs_s.U io64.U
-____________________________________________________________________________
-[ 4490] By: jhi on 1999/10/29 20:19:41
- Log: metaconfig nits.
- Branch: metaconfig
- ! U/modified/i_sysuio.U U/threads/d_pthreadj.U
- Branch: metaconfig/U/perl
- + d_iovec_s.U
- ! d_cmsghdr_s.U d_fs_data_s.U d_msghdr_s.U d_statfs3.U
- ! d_statfs4.U d_statfs_f_flags.U d_statfs_s.U io64.U
-____________________________________________________________________________
-[ 4489] By: jhi on 1999/10/29 16:08:43
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 31 files)
-____________________________________________________________________________
-[ 4488] By: jhi on 1999/10/29 15:30:30
- Log: Regen Configure and Glossary.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 4487] By: jhi on 1999/10/29 15:24:13
- Log: Remove quad logic from perl.h; regen Configure;
- add -DUSE_LONG_LONG to ccflags if not already there.
- Branch: cfgperl
- ! Configure config_h.SH doop.c hints/aix.sh hints/irix_6.sh
- ! hints/solaris_2.sh perl.h pp.c pp.h regexec.c sv.c
-____________________________________________________________________________
-[ 4486] By: jhi on 1999/10/29 15:22:38
- Log: metaconfig: moved quad logic from perl.h to Configure (quadtype.U);
- fixed the use*.U to define their stuff only iff not already defined
- (so that ccflags can have any -DUSE_* it wants);
- uselonglong.U added; various small nits fixed.
- Branch: metaconfig
- + U/typedefs/quadtype.U
- ! U/modified/d_longdbl.U U/modified/d_longlong.U
- ! U/modified/d_statblks.U U/modified/usenm.U
- ! U/threads/usethreads.U
- Branch: metaconfig/U/perl
- + uselonglong.U
- ! d_cmsghdr_s.U d_fs_data_s.U d_msghdr_s.U d_statfs3.U
- ! d_statfs4.U d_statfs_f_flags.U d_statfs_s.U i_inttypes.U
- ! quadfio.U use64bits.U uselfs.U uselongdbl.U usemorebits.U
- ! usemultiplicity.U useperlio.U usesocks.U
-____________________________________________________________________________
-[ 4485] By: gsar on 1999/10/29 06:08:50
- Log: more cleanup: avoid unused knowledge of "file GV" notion in CV and GV
- Branch: perl
- ! bytecode.pl cv.h dump.c ext/B/B.pm ext/B/B.xs
- ! ext/B/B/Asmdata.pm ext/B/B/Bytecode.pm ext/B/B/C.pm
- ! ext/B/B/Debug.pm ext/B/B/Xref.pm ext/ByteLoader/byterun.c
- ! ext/ByteLoader/byterun.h ext/Devel/Peek/Peek.pm gv.c gv.h op.c
- ! sv.h
-____________________________________________________________________________
-[ 4484] By: gsar on 1999/10/29 03:00:21
- Log: usurp GVOP slot for new PADOP (one small step to making optree
- shareable across interpreters)
- Branch: perl
- ! bytecode.pl doio.c dump.c ext/B/B.pm ext/B/B.xs
- ! ext/B/B/Asmdata.pm ext/B/B/Bytecode.pm ext/B/B/C.pm
- ! ext/B/B/Debug.pm ext/B/B/Deparse.pm ext/B/B/Lint.pm
- ! ext/B/B/Terse.pm ext/B/typemap ext/ByteLoader/byterun.c
- ! ext/ByteLoader/byterun.h op.c op.h opcode.h opcode.pl perl.h
- ! pp_hot.c pp_sys.c regexec.c run.c
-____________________________________________________________________________
-[ 4483] By: jhi on 1999/10/28 22:01:12
- Log: Regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 4482] By: jhi on 1999/10/28 21:45:26
- Log: Installdirs patches from Andy.
- Branch: metaconfig
- ! U/installdirs/sitearch.U U/installdirs/sitebin.U
- ! U/installdirs/sitehtml1dir.U U/installdirs/sitehtml3dir.U
- ! U/installdirs/sitelib.U U/installdirs/siteman1dir.U
- ! U/installdirs/siteman3dir.U U/installdirs/siteprefix.U
- ! U/installdirs/sitescriptdir.U U/installdirs/vendorarch.U
- ! U/installdirs/vendorbin.U U/installdirs/vendorhtml1dir.U
- ! U/installdirs/vendorhtml3dir.U U/installdirs/vendorlib.U
- ! U/installdirs/vendorman1dir.U U/installdirs/vendorman3dir.U
- ! U/installdirs/vendorprefix.U U/installdirs/vendorscriptdir.U
-____________________________________________________________________________
-[ 4481] By: gsar on 1999/10/28 17:33:49
- Log: remove C<use Time::Local 'no_range_check'> misfeature (global
- can still be directly set)
- Branch: perl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 4480] By: jhi on 1999/10/28 13:49:26
- Log: Fix printing of uids and gids; regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH mg.c perl.c perl.h taint.c
-____________________________________________________________________________
-[ 4479] By: jhi on 1999/10/28 11:53:57
- Log: Fix typo.
- Branch: metaconfig
- ! U/typedefs/gidsize.U
-____________________________________________________________________________
-[ 4478] By: jhi on 1999/10/28 06:50:02
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes iperlsys.h makedef.pl patchlevel.h perl.h
- !> win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- !> win32/config_H.bc win32/config_H.gc win32/config_H.vc
- !> win32/config_sh.PL win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 4477] By: jhi on 1999/10/28 06:40:54
- Log: (Slightly) better comments for Policy_sh.SH from Andy.
- Branch: cfgperl
- ! Policy_sh.SH
-____________________________________________________________________________
-[ 4476] By: gsar on 1999/10/27 23:54:36
- Log: regen config* stuff for windows
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/config_sh.PL
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 4475] By: gsar on 1999/10/27 21:32:30
- Log: integrate cfgperl contents into mainline; merge conflicts
- Branch: perl
- !> (integrate 46 files)
-____________________________________________________________________________
-[ 4474] By: gsar on 1999/10/27 21:15:07
- Log: patch up egcs-1.1.2-mingw32 build (builds a working miniperl, but not
- perl; stdout/stderr redirects seem broken as well)
- Branch: perl
- ! iperlsys.h makedef.pl perl.h win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 4473] By: jhi on 1999/10/27 21:11:11
- Log: Do not block if no message queues available.
- Branch: cfgperl
- ! t/lib/ipc_sysv.t
-____________________________________________________________________________
-[ 4472] By: jhi on 1999/10/27 18:27:40
- Log: Remove unused "squatter" symbols; regen Configure.
- Branch: cfgperl
- ! Configure Makefile.SH Porting/Glossary Porting/config.sh
- ! Porting/config_H config_h.SH epoc/config.h iperlsys.h perl.h
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 4471] By: jhi on 1999/10/27 18:26:55
- Log: metaconfig; split socket; fix output.
- Branch: metaconfig
- ! U/modified/d_socket.U U/modified/d_statblks.U
- Branch: metaconfig/U/perl
- + d_cmsghdr_s.U d_msghdr_s.U d_recvmsg.U d_sendmsg.U
- ! i_sysstatfs.U i_sysvfs.U
-____________________________________________________________________________
-[ 4470] By: jhi on 1999/10/27 17:19:06
- Log: Regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.c perl.h
-____________________________________________________________________________
-[ 4469] By: jhi on 1999/10/27 17:18:41
- Log: metaconfig; split statfs.
- Branch: metaconfig/U/perl
- + d_fs_data_s.U d_statfs_f_flags.U d_statfs_s.U
- ! d_statfs.U
-____________________________________________________________________________
-[ 4468] By: jhi on 1999/10/27 14:06:44
- Log: Integrate with Sarathy; manual resolve on regcomp.c conflicts
- (Ilya's changes won).
- Branch: cfgperl
- +> os2/OS2/REXX/DLL/Changes os2/OS2/REXX/DLL/DLL.pm
- +> os2/OS2/REXX/DLL/DLL.xs os2/OS2/REXX/DLL/MANIFEST
- +> os2/OS2/REXX/DLL/Makefile.PL os2/OS2/REXX/t/rx_emxrv.t
- !> (integrate 65 files)
-____________________________________________________________________________
-[ 4467] By: jhi on 1999/10/27 13:38:41
- Log: Regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 4466] By: jhi on 1999/10/27 13:18:06
- Log: metaconfig fixes from Andy.
- Branch: metaconfig
- + U/modified/libnlist.U U/modified/usrinc.U
- ! U/Glossary.patch U/mkglossary U/modified/libpth.U
-____________________________________________________________________________
-[ 4465] By: jhi on 1999/10/27 13:06:27
- Log: Nosuid checking for statfs() people.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.c perl.h pod/perldiag.pod
-____________________________________________________________________________
-[ 4464] By: jhi on 1999/10/27 13:04:20
- Log: metaconfig maintenance; fix Hasfield, statfs;
- add Hasstruct, statfs3, statfs4, ustat, sysvfs;
- split fstatfs away from statfs.
- Branch: metaconfig
- + U/protos/Hasstruct.U
- ! U/protos/Hasfield.U
- Branch: metaconfig/U/perl
- + d_fstatfs.U d_statfs3.U d_statfs4.U d_ustat.U i_sysvfs.U
- + i_ustat.U
- ! d_statfs.U
-____________________________________________________________________________
-[ 4463] By: jhi on 1999/10/27 07:55:53
- Log: We need cc to be able to test for cc -v.
- Branch: cfgperl
- ! hints/dec_osf.sh
-____________________________________________________________________________
-[ 4462] By: gsar on 1999/10/27 01:31:41
- Log: more GCC v2.95 induced adjustments
- Branch: perl
- ! globals.c mg.c opcode.h opcode.pl perl.h sv.c
- ! win32/makefile.mk win32/win32.c x2p/walk.c
-____________________________________________________________________________
-[ 4461] By: gsar on 1999/10/26 21:42:59
- Log: warnings and const violations identified by compiling in C++ mode
- with GCC v2.95
- Branch: perl
- ! doio.c embed.pl mg.c op.c perl.c perlapi.c proto.h regcomp.c
- ! sv.c taint.c toke.c win32/win32.c
-____________________________________________________________________________
-[ 4459] By: jhi on 1999/10/26 10:15:58
- Log: Regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 4458] By: jhi on 1999/10/26 09:48:37
- Log: Minor rewordings.
- Branch: metaconfig/U/perl
- ! d_getmnt.U d_getmntent.U d_statfs.U d_statvfs.U
-____________________________________________________________________________
-[ 4456] By: jhi on 1999/10/26 09:11:49
- Log: Fix d_statfsflags; add d_getmnt.
- Branch: metaconfig/U/perl
- + d_getmnt.U
- ! d_statfs.U
-____________________________________________________________________________
-[ 4455] By: jhi on 1999/10/26 08:12:27
- Log: Massive multitypo in #4446.
- Branch: cfgperl
- ! hints/dec_osf.sh
-____________________________________________________________________________
-[ 4454] By: jhi on 1999/10/25 08:28:45
- Log: From: Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
- To: Perl 5 Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_62] dos-djgpp update
- Date: Mon, 25 Oct 1999 10:11:30 +0200
- Message-ID: <19991025101130.K459@crater.eth.ericsson.se>
- Branch: cfgperl
- ! djgpp/config.over djgpp/configure.bat djgpp/djgppsed.sh
- ! pod/perldelta.pod t/lib/io_unix.t
-____________________________________________________________________________
-[ 4453] By: jhi on 1999/10/25 08:25:50
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_62] Remove the last regnode<==>char*
- Date: Mon, 25 Oct 1999 03:06:21 -0400 (EDT)
- Message-Id: <199910250706.DAA16825@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! embed.h embed.pl proto.h regcomp.c regcomp.h regexec.c
-____________________________________________________________________________
-[ 4452] By: jhi on 1999/10/25 08:16:55
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_62] Missing REx engine patch
- Date: Sun, 24 Oct 1999 23:47:45 -0400 (EDT)
- Message-Id: <199910250347.XAA16094@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! pod/perldiag.pod regcomp.c regexec.c
-____________________________________________________________________________
-[ 4451] By: jhi on 1999/10/25 08:13:06
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_62] charnames and UTEST
- Date: Sun, 24 Oct 1999 23:39:49 -0400 (EDT)
- Message-Id: <199910250339.XAA16058@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! t/lib/charnames.t
-____________________________________________________________________________
-[ 4450] By: gsar on 1999/10/25 07:38:15
- Log: win32 tweak
- Branch: perl
- ! win32/perllib.c
-____________________________________________________________________________
-[ 4449] By: gsar on 1999/10/24 23:20:10
- Log: remove inconsistent tainting behavior of sprintf("%e",...)
- (all bets are off is "C" locale is compromised)
- Branch: perl
- ! pod/perlfunc.pod pod/perllocale.pod sv.c
-____________________________________________________________________________
-[ 4448] By: gsar on 1999/10/24 22:20:42
- Log: remove unused interpreter globals
- Branch: perl
- ! deb.c dump.c embed.h embed.pl embedvar.h ext/POSIX/POSIX.xs
- ! global.sym gv.c gv.h intrpvar.h objXSUB.h perl.c perlapi.c
- ! proto.h toke.c
-____________________________________________________________________________
-[ 4447] By: jhi on 1999/10/24 21:49:52
- Log: Another hints tweak.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 4446] By: jhi on 1999/10/24 21:48:02
- Log: Hints tweak.
- Branch: cfgperl
- ! hints/dec_osf.sh
-____________________________________________________________________________
-[ 4445] By: nick on 1999/10/24 21:03:28
- Log: Integrate own changes to mainline.
- Branch: utfperl
- !> installperl pp.c
-____________________________________________________________________________
-[ 4444] By: nick on 1999/10/24 20:54:06
- Log: Avoid creating GV with NULL name when vivifying nameless scalars.
- (Fix/workround for [ID19991024.001])
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 4443] By: nick on 1999/10/24 15:09:51
- Log: Follow that camel ... another sync.
- Branch: utfperl
- +> os2/OS2/REXX/DLL/Changes os2/OS2/REXX/DLL/DLL.pm
- +> os2/OS2/REXX/DLL/DLL.xs os2/OS2/REXX/DLL/MANIFEST
- +> os2/OS2/REXX/DLL/Makefile.PL os2/OS2/REXX/t/rx_emxrv.t
- !> (integrate 36 files)
-____________________________________________________________________________
-[ 4442] By: gsar on 1999/10/24 14:40:01
- Log: typo in installperl (from Paul Moore <gustav@morpheus.demon.co.uk>)
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 4441] By: gsar on 1999/10/24 14:33:11
- Log: test in change#4428 needs strict interpretation of C modulus
- Branch: perl
- ! t/op/int.t
-____________________________________________________________________________
-[ 4440] By: gsar on 1999/10/24 13:47:17
- Log: don't allow SIGCHLD to be ignored at startup, or wait*() and
- $? break
- Branch: perl
- ! perl.c pod/perldelta.pod pod/perldiag.pod
-____________________________________________________________________________
-[ 4439] By: jhi on 1999/10/24 13:19:17
- Log: test for #2835 (yeah, better later than never)
- Branch: cfgperl
- ! t/op/array.t
-____________________________________________________________________________
-[ 4438] By: gsar on 1999/10/24 12:59:12
- Log: typo, doc tweak
- Branch: perl
- ! lib/attributes.pm pod/perlop.pod
-____________________________________________________________________________
-[ 4437] By: gsar on 1999/10/24 11:59:55
- Log: allow get() and reftype() functions to be imported (from
- Spider Boardman)
- Branch: perl
- ! lib/attributes.pm
-____________________________________________________________________________
-[ 4436] By: gsar on 1999/10/24 11:52:53
- Log: suppress scalar leak messages for known leaks (from
- Robin Barker <rmb1@cise.npl.co.uk>)
- Branch: perl
- ! Changes t/op/lex_assign.t t/pragma/warn/op
-____________________________________________________________________________
-[ 4435] By: gsar on 1999/10/24 11:39:42
- Log: VMS tweak (suggested by Craig A. Berry <craig.berry@metamor.com>)
- Branch: perl
- ! ext/B/defsubs_h.PL
-____________________________________________________________________________
-[ 4434] By: gsar on 1999/10/24 11:36:08
- Log: relax range checking if they ask for it (from John L. Allen
- <allen@grumman.com>)
- Branch: perl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 4433] By: gsar on 1999/10/24 11:25:51
- Log: README nits pointed out by Chris Nandor <pudge@pobox.com>
- Branch: perl
- ! README lib/File/Path.pm
-____________________________________________________________________________
-[ 4432] By: gsar on 1999/10/24 11:11:02
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 24 Oct 1999 03:24:28 -0400 (EDT)
- Message-Id: <199910240724.DAA12230@monk.mps.ohio-state.edu>
- Subject: Re: [PATCH 5.005_62] OS/2 improvements
- Branch: perl
- + os2/OS2/REXX/DLL/Changes os2/OS2/REXX/DLL/DLL.pm
- + os2/OS2/REXX/DLL/DLL.xs os2/OS2/REXX/DLL/MANIFEST
- + os2/OS2/REXX/DLL/Makefile.PL os2/OS2/REXX/t/rx_emxrv.t
- ! MANIFEST hints/os2.sh mg.c miniperlmain.c os2/Changes
- ! os2/OS2/REXX/Changes os2/OS2/REXX/Makefile.PL
- ! os2/OS2/REXX/REXX.pm os2/OS2/REXX/REXX.xs
- ! os2/OS2/REXX/t/rx_dllld.t os2/OS2/REXX/t/rx_objcall.t
- ! os2/OS2/REXX/t/rx_tievar.t os2/OS2/REXX/t/rx_tieydb.t
- ! os2/OS2/REXX/t/rx_vrexx.t os2/dl_os2.c os2/os2.c os2/os2ish.h
- ! perl.c perl.h t/io/fs.t t/op/magic.t
-____________________________________________________________________________
-[ 4431] By: gsar on 1999/10/24 10:50:14
- Log: install all README.foo with pod content as podfoo.pod
- Branch: perl
- ! Makefile.SH installman
-____________________________________________________________________________
-[ 4430] By: gsar on 1999/10/24 09:28:24
- Log: @INC needs ../lib
- Branch: perl
- ! t/op/int.t
-____________________________________________________________________________
-[ 4429] By: jhi on 1999/10/23 21:47:49
- Log: More printf-fixes (see also #4426).
- Branch: cfgperl
- ! deb.c dump.c ext/Data/Dumper/Dumper.xs
- ! ext/Devel/DProf/DProf.xs malloc.c mg.c op.c perl.c pp.c
- ! pp_ctl.c regcomp.c regexec.c run.c scope.c sv.c util.c
-____________________________________________________________________________
-[ 4428] By: gsar on 1999/10/23 20:28:56
- Log: fix accidental C modulo semantics on integer-valued operations
- (e.g. caused C<length("abc") % -10> to return 3 rather than -7)
- Branch: perl
- ! op.c t/op/int.t
-____________________________________________________________________________
-[ 4427] By: jhi on 1999/10/23 16:10:10
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> sv.c win32/win32.c
-____________________________________________________________________________
-[ 4426] By: jhi on 1999/10/23 16:04:02
- Log: Fix the printfing nits pointed out by using gcc -Wall and
- Configure -Duse64bits -Dccflags=-DDEBUGGING in Solaris,
- plus few other warnings in Dumper.xs.
- Branch: cfgperl
- ! ext/Data/Dumper/Dumper.xs ext/Devel/DProf/DProf.xs
- ! ext/Devel/Peek/Peek.xs regcomp.c regexec.c sv.c util.c
-____________________________________________________________________________
-[ 4425] By: jhi on 1999/10/23 15:16:41
- Log: Configure regen to pick up the new installation directories
- from Policy_sh.SH. The explanations of "public add-ons" and
- "vendor-supplied" could do with more work.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 4424] By: nick on 1999/10/23 00:46:22
- Log: Resolve mainline before possible hacking operertunity this weekend
- Branch: utfperl
- +> pod/perlfilter.pod
- !> (integrate 32 files)
-____________________________________________________________________________
-[ 4423] By: jhi on 1999/10/22 22:53:17
- Log: Update Policy_sh.SH to handle the newer installation directives.
- From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_62] Policy_sh.SH update
- Date: Fri, 22 Oct 1999 16:47:34 -0400 (EDT)
- Message-ID: <Pine.SOL.4.10.9910221645470.15232-100000@maxwell.phys.lafayette.edu>
- Branch: cfgperl
- ! Policy_sh.SH
-____________________________________________________________________________
-[ 4422] By: jhi on 1999/10/22 22:44:44
- Log: so back to 'so', from Stephanie Beals <bealzy@us.ibm.com>
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 4421] By: gsar on 1999/10/22 21:16:44
- Log: sv_vcatpvfn() bug: fell through to assuming intsize of 'q' for
- C<"%ld", long_val>
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 4420] By: gsar on 1999/10/22 16:36:46
- Log: win32_utime() on directories should use localtime() rather
- than gmtime() (from Jan Dubois)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 4419] By: jhi on 1999/10/21 10:31:41
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Makefile.SH lib/CPAN/FirstTime.pm op.c opcode.h opcode.pl
- !> t/lib/glob-basic.t t/op/sort.t
-____________________________________________________________________________
-[ 4418] By: gsar on 1999/10/20 23:49:47
- Log: add test for change#4417
- Branch: perl
- ! t/op/sort.t
-____________________________________________________________________________
-[ 4417] By: gsar on 1999/10/20 23:45:03
- Log: avoid coredump on C<sort { my $c; return $a cmp $b } ...>
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 4416] By: gsar on 1999/10/20 01:00:50
- Log: fix prototype mismatch (from Hans Mulder <hansm@xs4all.nl>)
- Branch: perl
- ! lib/CPAN/FirstTime.pm
-____________________________________________________________________________
-[ 4415] By: gsar on 1999/10/20 00:52:34
- Log: disable optimizing troublesome ops in change#3612
- (from Ilya Zakharevich)
- Branch: perl
- ! Makefile.SH opcode.h opcode.pl
-____________________________________________________________________________
-[ 4414] By: gsar on 1999/10/20 00:37:46
- Log: skip unreadable directory test when running as root
- Branch: perl
- ! t/lib/glob-basic.t
-____________________________________________________________________________
-[ 4413] By: jhi on 1999/10/19 09:26:52
- Log: Avoid GNU ar if HP cc is being used.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 4412] By: jhi on 1999/10/19 07:24:29
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> perlvars.h
-____________________________________________________________________________
-[ 4411] By: jhi on 1999/10/19 07:22:34
- Log: Long double support: sqrtl et al are not available everywhere,
- e.g. not in Solaris, even when long doubles are.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.h
-____________________________________________________________________________
-[ 4410] By: jhi on 1999/10/19 07:21:42
- Log: Add sqrtl probe, add echo dependencies.
- Branch: metaconfig
- ! U/threads/d_pthreadj.U
- Branch: metaconfig/U/perl
- + d_sqrtl.U
- ! i_inttypes.U io64.U
-____________________________________________________________________________
-[ 4409] By: gsar on 1999/10/19 02:18:54
- Log: perl_mutex n/a if !USE_THREADS
- Branch: perl
- ! perlvars.h
-____________________________________________________________________________
-[ 4408] By: jhi on 1999/10/18 20:13:02
- Log: Forgotten s/warning/warnings/.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4407] By: jhi on 1999/10/18 20:02:12
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> pod/perlfilter.pod
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 4406] By: gsar on 1999/10/18 16:32:10
- Log: added intro to source filters from Paul Marquess
- Branch: perl
- + pod/perlfilter.pod
- ! MANIFEST pod/perldelta.pod
-____________________________________________________________________________
-[ 4405] By: gsar on 1999/10/18 05:53:06
- Log: missing manpages
- Branch: perl
- ! installman
-____________________________________________________________________________
-[ 4404] By: gsar on 1999/10/18 05:09:22
- Log: pod updates from Tom Christiansen
- Branch: perl
- ! lib/Pod/Man.pm pod/perldelta.pod pod/perlmodlib.pod
-____________________________________________________________________________
-[ 4403] By: gsar on 1999/10/17 23:43:59
- Log: PL_malloc_mutex needs to be global, not per-interpreter
- (malloc.c has static data)
- Branch: perl
- ! embedvar.h intrpvar.h objXSUB.h perl.c perlvars.h
-____________________________________________________________________________
-[ 4402] By: gsar on 1999/10/17 22:30:30
- Log: support PERL_IMPLICIT_SYS with MULTIPLICITY/USE_THREADS on
- windows
- Branch: perl
- ! XSUB.h ext/POSIX/POSIX.xs intrpvar.h makedef.pl malloc.c
- ! perl.c perl.h perlio.c win32/perllib.c win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 4401] By: gsar on 1999/10/17 20:33:42
- Log: serious bug introduced by G_VOID changes in 5.003_96: scalar
- eval"" did not pop stack correctly; C<$a = eval "(1,2)x1">
- is one symptom of the problem
- Branch: perl
- ! pp_ctl.c t/op/eval.t
-____________________________________________________________________________
-[ 4400] By: gsar on 1999/10/17 18:36:46
- Log: remove FileHandle from list of PodParser dependencies (the
- difference is 20 files vs 6 files loaded!)
- Branch: perl
- ! lib/Pod/Parser.pm lib/Pod/Select.pm pod/perldelta.pod
- ! t/pod/testcmp.pl
-____________________________________________________________________________
-[ 4399] By: nick on 1999/10/17 14:51:35
- Log: Pre-trip resolve
- Branch: utfperl
- !> installperl lib/Text/Tabs.pm perl.c pp_hot.c
-____________________________________________________________________________
-[ 4398] By: gsar on 1999/10/17 09:19:24
- Log: make installperl ignore RCS files (from Michael G Schwern
- <schwern@pobox.com>)
- Branch: perl
- ! installperl lib/Text/Tabs.pm
-____________________________________________________________________________
-[ 4397] By: gsar on 1999/10/16 18:30:14
- Log: another bug in change#3386 (CATCH_SET wasn't reverted correctly)
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 4396] By: jhi on 1999/10/16 17:44:39
- Log: Missing comma.
- Branch: cfgperl
- ! lib/diagnostics.pm
-____________________________________________________________________________
-[ 4395] By: gsar on 1999/10/16 17:18:36
- Log: assumption about @_ always being non-REAL doesn't hold when
- debugger is running; DB::sub() can call arbitrary stuff
- that modifies @_ at will
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 4394] By: nick on 1999/10/16 09:35:20
- Log: Resolve utfperl branch against mainline as of _62
- Branch: utfperl
- +> eg/cgi/dna_small_gif.uu eg/cgi/wilogo_gif.uu
- +> ext/DB_File/hints/sco.pl ext/DynaLoader/hints/aix.pl
- +> ext/File/Glob/Changes ext/File/Glob/Glob.pm
- +> ext/File/Glob/Glob.xs ext/File/Glob/Makefile.PL
- +> ext/File/Glob/TODO ext/File/Glob/bsd_glob.c
- +> ext/File/Glob/bsd_glob.h ext/NDBM_File/hints/sco.pl
- +> pod/perlhack.pod t/lib/glob-basic.t t/lib/glob-global.t
- +> t/lib/glob-taint.t win32/genmk95.pl
- - eg/cgi/dna.small.gif.uu eg/cgi/wilogo.gif.uu
- !> (integrate 144 files)
-____________________________________________________________________________
-[ 4393] By: gsar on 1999/10/16 04:07:02
- Log: OS/2 support bits (from Ilya Zakharevich)
- Branch: perl
- ! hints/os2.sh makedef.pl os2/Makefile.SHs t/lib/glob-basic.t
-____________________________________________________________________________
-[ 4392] By: jhi on 1999/10/15 10:28:09
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes MANIFEST Makefile.SH Porting/makerel lib/Pod/Man.pm
- !> lib/Pod/Parser.pm op.c pod/perldelta.pod pod/perlopentut.pod
- !> win32/Makefile win32/makefile.mk
-
-----------------
-Version 5.005_62
-----------------
-
-____________________________________________________________________________
-[ 4391] By: gsar on 1999/10/15 10:12:42
- Log: here be 5.005_62
- Branch: perl
- ! Changes MANIFEST Porting/makerel
-____________________________________________________________________________
-[ 4390] By: gsar on 1999/10/15 09:45:51
- Log: lvalue subs patch (change#4081) breaks C<\(Foo->Bar())>;
- avoid tickling it in Pod::Man for now; other nits in
- Pod::*
- Branch: perl
- ! lib/Pod/Man.pm lib/Pod/Parser.pm pod/perldelta.pod
- ! pod/perlopentut.pod
-____________________________________________________________________________
-[ 4389] By: gsar on 1999/10/15 08:55:01
- Log: disable internal globbing for miniperl (or build breaks out
- in a rash of failed dependencies)
- Branch: perl
- ! Makefile.SH op.c win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4388] By: jhi on 1999/10/15 08:07:49
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes ext/POSIX/POSIX.xs lib/Benchmark.pm pod/perldelta.pod
- !> pod/perlfaq2.pod win32/include/dirent.h win32/win32.c
-____________________________________________________________________________
-[ 4387] By: gsar on 1999/10/15 07:46:24
- Log: integrate cfgperl contents into mainline
- Branch: perl
- ! Changes
- !> pod/perldelta.pod pod/perldiag.pod regcomp.c
- !> t/pragma/warn/regcomp
-____________________________________________________________________________
-[ 4386] By: gsar on 1999/10/15 05:45:36
- Log: various little goofs in change#4385
- Branch: perl
- ! win32/include/dirent.h win32/win32.c
-____________________________________________________________________________
-[ 4385] By: gsar on 1999/10/15 04:49:09
- Log: win32_*dir() cleanup; win32_readdir() iterates as necessary
- rather than win32_opendir() reading all files up front (untested)
- Branch: perl
- ! win32/include/dirent.h win32/win32.c
-____________________________________________________________________________
-[ 4384] By: gsar on 1999/10/15 01:34:09
- Log: Benchmark notes (from Barrie Slaymaker <barries@slaysys.com>)
- Branch: perl
- ! lib/Benchmark.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 4383] By: gsar on 1999/10/15 01:22:32
- Log: include info about Perl Mongers in perlfaq2 (from David H. Adler
- <dha@panix.com>)
- Branch: perl
- ! pod/perlfaq2.pod
-____________________________________________________________________________
-[ 4382] By: gsar on 1999/10/15 01:14:22
- Log: From: jand@ActiveState.com (Jan Dubois)
- Date: Fri, 15 Oct 1999 01:14:23 +0200
- Message-ID: <380f61ae.18202914@smtprelay.t-online.de>
- Subject: [PATCH 5.005_61] Prevent "Out of memory" error in POSIX's strftime()
- Branch: perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 4381] By: jhi on 1999/10/14 22:11:36
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> XSUB.h cop.h embed.h embed.pl ext/File/Glob/bsd_glob.c
- !> lib/Time/Local.pm perl.c perlapi.c pod/perlop.pod pp_ctl.c
- !> proto.h scope.c scope.h t/op/runlevel.t util.c win32/Makefile
- !> win32/makefile.mk
-____________________________________________________________________________
-[ 4380] By: jhi on 1999/10/14 22:08:22
- Log: Warn inside character classes about unknown backslash escapes
- (that are not caught earlier because of being completely unknown,
- such as \m), such as \z (because they make do sense inside regexen,
- but not inside character classes).
- Branch: cfgperl
- ! pod/perldelta.pod pod/perldiag.pod regcomp.c
- ! t/pragma/warn/regcomp
-____________________________________________________________________________
-[ 4379] By: gsar on 1999/10/14 18:26:56
- Log: clarify significance of parens for "x" (from M.J.T. Guy
- <mjtg@cus.cam.ac.uk>)
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 4378] By: gsar on 1999/10/14 18:25:20
- Log: make timelocal work better when time is close to the epoch
- east of GMT (from Keiki SATOH <kki@wakusei.ne.jp>)
- Branch: perl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 4377] By: gsar on 1999/10/14 18:15:11
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> ext/DB_File/hints/sco.pl
- !> MANIFEST hints/aix.sh hints/linux.sh hints/svr5.sh
- !> pod/perldelta.pod pod/perldiag.pod pod/perlop.pod
- !> pod/perlre.pod regcomp.c t/op/re_tests t/pragma/warn/regcomp
-____________________________________________________________________________
-[ 4376] By: gsar on 1999/10/14 17:47:35
- Log: fix POPSTACK panics that ensued from bad interaction between
- runlevels and stack of stacks (change#3988 done right);
- basically, we pop the runlevel if the stacklevel is not the
- same one we started the runlevel with
- Branch: perl
- ! cop.h perl.c pp_ctl.c t/op/runlevel.t util.c
-____________________________________________________________________________
-[ 4375] By: gsar on 1999/10/14 15:54:48
- Log: avoid warnings
- Branch: perl
- ! ext/File/Glob/bsd_glob.c
-____________________________________________________________________________
-[ 4374] By: jhi on 1999/10/14 10:08:44
- Log: Warn about false ranges like \d-\w (see the change #4355).
- The invalid ranges (b-a) warning message also enhanced.
- Branch: cfgperl
- ! pod/perldelta.pod pod/perldiag.pod regcomp.c t/op/re_tests
- ! t/pragma/warn/regcomp
-____________________________________________________________________________
-[ 4373] By: gsar on 1999/10/14 03:49:54
- Log: File::Glob fixes for Windows
- Branch: perl
- ! XSUB.h ext/File/Glob/bsd_glob.c win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 4372] By: gsar on 1999/10/14 02:21:31
- Log: avoid inefficiency in change#3386 (every longjmp() was followed
- by an avoidable call to setjmp())
- Branch: perl
- ! embed.h embed.pl perl.c perlapi.c pod/perldelta.pod pp_ctl.c
- ! proto.h scope.c scope.h
-____________________________________________________________________________
-[ 4371] By: jhi on 1999/10/13 21:17:17
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> op.c pod/perldelta.pod
-____________________________________________________________________________
-[ 4370] By: gsar on 1999/10/13 18:08:45
- Log: misc tweaks
- Branch: perl
- ! op.c pod/perldelta.pod
-____________________________________________________________________________
-[ 4369] By: jhi on 1999/10/13 16:18:58
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
-____________________________________________________________________________
-[ 4368] By: gsar on 1999/10/13 16:14:16
- Log: pod nits from various perl porters
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
-____________________________________________________________________________
-[ 4367] By: jhi on 1999/10/13 12:10:30
- Log: From: Vlad Harchev <hvv@hippo.ru>
- To: perl5-porters@perl.org
- Subject: [ID 19991013.002] fix for 'perlop.pod' shipped with perl5.00503
- Date: Wed, 13 Oct 1999 15:48:59 +0500 (SAMST)
- Message-Id: <Pine.LNX.4.10.9910131546580.3542-100000@localhost.localdomain>
- Branch: cfgperl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 4366] By: gsar on 1999/10/13 08:11:11
- Log: typos and language goofs pointed out by Hugo van der Sanden
- <hv@crypt.compulink.co.uk>
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod
-____________________________________________________________________________
-[ 4365] By: jhi on 1999/10/13 07:27:44
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> ext/File/Glob/Changes ext/File/Glob/Glob.pm
- +> ext/File/Glob/Glob.xs ext/File/Glob/Makefile.PL
- +> ext/File/Glob/TODO ext/File/Glob/bsd_glob.c
- +> ext/File/Glob/bsd_glob.h ext/NDBM_File/hints/sco.pl
- +> t/lib/glob-basic.t t/lib/glob-global.t t/lib/glob-taint.t
- !> Changes MANIFEST README.win32 ext/ODBM_File/hints/sco.pl
- !> lib/perl5db.pl op.c pod/perldelta.pod pod/perlfaq8.pod
- !> pod/perlfunc.pod pod/perlop.pod pod/perlport.pod t/op/glob.t
- !> t/op/readdir.t t/op/taint.t t/pragma/overload.t util.c
-____________________________________________________________________________
-[ 4364] By: gsar on 1999/10/13 07:06:04
- Log: debugger tweak (from M.J.T. Guy <mjtg@cus.cam.ac.uk>)
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 4363] By: jhi on 1999/10/13 07:03:43
- Log: From: Mike Hopkirk (hops) <hops@scoot.pdev.sco.com>
- To: perl5-porters@perl.org
- Subject: [ID 19991012.002] Latest UnixWare7 (svr5.sh) hints file
- Date: Tue, 12 Oct 1999 19:48:11 -0700 (PDT)
- Message-Id: <199910130248.TAA14636@scoot.pdev.sco.com>
- Branch: cfgperl
- ! hints/svr5.sh
-____________________________________________________________________________
-[ 4362] By: jhi on 1999/10/13 06:57:16
- Log: Add DB_File hint for SCO ODT.
- From: hops@sco.com
- To: perl5-porters@perl.org
- Subject: [ID 19991012.004] Build patch for perl5.005_03 on ODT3 ( 3.2v4.2)
- Date: Tue, 12 Oct 1999 20:16:04 PDT
- Message-Id: <199910122016.aa18415@charmstr.pdev.sco.com>
- Branch: cfgperl
- + ext/DB_File/hints/sco.pl
- ! MANIFEST
-____________________________________________________________________________
-[ 4361] By: gsar on 1999/10/13 06:56:08
- Log: PL_numeric_radix used without being defined (from Ilya
- Zakharevich)
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 4360] By: gsar on 1999/10/13 06:43:03
- Log: use libdbm.nfs.a if available (libdbm.a is missing dbmclose())
- From: hops@sco.com
- Date: Tue, 12 Oct 1999 20:16:04 PDT
- Message-Id: <199910122016.aa18415@charmstr.pdev.sco.com>
- Subject: [ID 19991012.004] Build patch for perl5.005_03 on ODT3 ( 3.2v4.2)
- Branch: perl
- + ext/NDBM_File/hints/sco.pl
- ! MANIFEST ext/ODBM_File/hints/sco.pl
-____________________________________________________________________________
-[ 4359] By: gsar on 1999/10/13 06:34:53
- Log: various pod tweaks (from M.J.T. Guy <mjtg@cus.cam.ac.uk>)
- Branch: perl
- ! README.win32 pod/perlfaq8.pod pod/perlfunc.pod pod/perlop.pod
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 4358] By: gsar on 1999/10/12 19:10:27
- Log: perldelta updates
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4357] By: gsar on 1999/10/12 17:11:18
- Log: update perldelta for change#4356
- Branch: perl
- ! Changes pod/perldelta.pod
-____________________________________________________________________________
-[ 4356] By: gsar on 1999/10/12 16:53:31
- Log: add File::BSDGlob as File::Glob and load it at compile-time
- if perl was built with -DPERL_INTERNAL_GLOB
-
- TODO: we currently get a compile-time failure if File/Glob.pm
- can't be found; such failure needs to be made to emit a warning
- and use the csh implementation instead
- Branch: perl
- + ext/File/Glob/Changes ext/File/Glob/Glob.pm
- + ext/File/Glob/Glob.xs ext/File/Glob/Makefile.PL
- + ext/File/Glob/TODO ext/File/Glob/bsd_glob.c
- + ext/File/Glob/bsd_glob.h t/lib/glob-basic.t
- + t/lib/glob-global.t t/lib/glob-taint.t
- ! MANIFEST op.c t/op/glob.t t/op/readdir.t t/op/taint.t
- ! t/pragma/overload.t
-____________________________________________________________________________
-[ 4355] By: jhi on 1999/10/12 15:30:05
- Log: Revert the parts of #3926 that outlawed character ranges
- that have character classes such as \w as either endpoint.
- This change re-establishes the old behavior which meant that
- such ranges weren't really ranges, the "-" was literal.
- Moreover, this change also fixes the old behavior to be
- more consistent: [\w-.] and [\s-\w] worked, but [.-\w] didn't.
- Now they all do work as described above. The #3926 outlawed
- all of those.
- Branch: cfgperl
- ! pod/perldiag.pod pod/perlre.pod regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 4354] By: jhi on 1999/10/12 09:58:59
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 33 files)
-____________________________________________________________________________
-[ 4353] By: gsar on 1999/10/12 05:53:40
- Log: apply parts of LynxOS patches from Alan Johnson
- <johnson@alonn.gemse.fr>
- Branch: perl
- ! Changes hints/lynxos.sh pod/perldelta.pod t/lib/safe2.t
- ! t/op/groups.t
-____________________________________________________________________________
-[ 4352] By: gsar on 1999/10/12 05:24:39
- Log: allow any unpack specifier to take a count via '/'
- (from Ilya Zakharevich)
- Branch: perl
- ! pp.c t/op/pack.t
-____________________________________________________________________________
-[ 4351] By: gsar on 1999/10/12 05:02:35
- Log: avoid warnings
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 4350] By: gsar on 1999/10/12 04:50:52
- Log: various cleanups
- Branch: perl
- ! ext/Devel/DProf/DProf.xs op.c perl.c perly.c perly.y
- ! perly_c.diff pp_hot.c toke.c vms/perly_c.vms win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/config_sh.PL
-____________________________________________________________________________
-[ 4349] By: gsar on 1999/10/12 00:23:11
- Log: update Changes, patchlevel etc.
- Branch: perl
- ! Changes Porting/findvars patchlevel.h win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 4348] By: gsar on 1999/10/11 23:11:57
- Log: add vec() example from Chaim Frenkel <chaimf@pobox.com>
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4347] By: jhi on 1999/10/11 21:25:03
- Log: Sparc Linux -Duseshrplib fix.
-
- From: Brian Jepson <bjepson@home.com>
- To: Nick Ing-Simmons <nick@ing-simmons.net>
- cc: perl5-porters@perl.org
- Subject: Re: [ID 19990813.002] Can't build Perl 5.005_60 on SPARC/Linux with -Duseshrplib
- Date: Fri, 20 Aug 1999 11:25:17 -0500 (EST)
- Message-ID: <Pine.LNX.4.10.9908201123570.5116-100000@cx384756-a.sking1.ri.home.com>
- Branch: cfgperl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 4346] By: gsar on 1999/10/11 20:28:32
- Log: more pack/unpack documentation (from Ilya Zakharevich); changed
- the behavior of 'Z*' and 'Z3' to always pack a trailing
- null byte; changed documentation to suit; added test
- Branch: perl
- ! pod/perlfunc.pod pp.c t/op/pack.t
-____________________________________________________________________________
-[ 4345] By: gsar on 1999/10/11 19:15:46
- Log: writing to perllocal.pod fails if it was never created;
- tweak pseudo-hash example (both suggested by Michael G Schwern
- <schwern@pobox.com>)
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm pod/perlref.pod
-____________________________________________________________________________
-[ 4344] By: gsar on 1999/10/11 17:57:31
- Log: slightly edited variant of suggested patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 9 Sep 1999 18:35:37 -0400
- Message-ID: <19990909183537.A28682@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_58] How RExen match?
- Branch: perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 4343] By: gsar on 1999/10/11 16:55:48
- Log: change#4327 was inefficient
- Branch: perl
- ! lib/lib.pm
-____________________________________________________________________________
-[ 4342] By: jhi on 1999/10/11 07:01:46
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> pod/perlhack.pod
- !> (integrate 28 files)
-____________________________________________________________________________
-[ 4341] By: jhi on 1999/10/11 06:37:47
- Log: The 2.5th cut at the AIX C++ extension problems.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 4340] By: gsar on 1999/10/10 23:48:07
- Log: add perlhack.pod from Nathan Torkington <gnat@frii.com>
- Branch: perl
- + pod/perlhack.pod
- ! MANIFEST pod/Makefile pod/perl.pod pod/roffitall
-____________________________________________________________________________
-[ 4339] By: gsar on 1999/10/10 20:42:40
- Log: revert SAVEDESTRUCTOR() to accepting void(*)(void*) for source
- compatibility; introduce SAVEDESTRUCTOR_X() that accepts
- void(*)(pTHX_ void*)
- Branch: perl
- ! embed.h embed.pl ext/Devel/DProf/DProf.xs global.sym mg.c
- ! objXSUB.h perl.h perlapi.c perly.c perly.y perly_c.diff
- ! pod/perlguts.pod pod/perltoc.pod pp.c pp_hot.c proto.h
- ! regcomp.h regexec.c scope.c scope.h toke.c vms/perly_c.vms
-____________________________________________________________________________
-[ 4338] By: gsar on 1999/10/10 20:38:59
- Log: add missing new diagnostics to perldelta
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4337] By: gsar on 1999/10/10 17:40:13
- Log: update perldelta for change#3406
- Branch: perl
- ! embed.pl pod/perldata.pod pod/perldelta.pod
-____________________________________________________________________________
-[ 4336] By: gsar on 1999/10/10 16:33:14
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> ext/DynaLoader/hints/aix.pl
- !> MANIFEST ext/DynaLoader/dl_aix.xs hints/aix.sh hints/irix_6.sh
- !> makedef.pl perl.h pod/perldelta.pod
-____________________________________________________________________________
-[ 4335] By: jhi on 1999/10/10 11:09:48
- Log: Update perldelta.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4334] By: jhi on 1999/10/10 10:31:46
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> win32/genmk95.pl
- !> Changes MANIFEST README.win32 cop.h ext/Thread/Thread.pm
- !> ext/Thread/Thread.xs ext/Thread/Thread/Queue.pm
- !> ext/Thread/Thread/Semaphore.pm ext/Thread/Thread/Specific.pm
- !> ext/Thread/sync.t ext/Thread/sync2.t installperl
- !> lib/Exporter.pm lib/ExtUtils/MM_Unix.pm
- !> lib/ExtUtils/MM_Win32.pm lib/diagnostics.pm lib/lib.pm perl.c
- !> pod/perldelta.pod pod/perlfunc.pod pp_ctl.c pp_hot.c pp_sys.c
- !> utils/perldoc.PL win32/makefile.mk
-____________________________________________________________________________
-[ 4333] By: gsar on 1999/10/10 06:33:15
- Log: install pods to 'pods' rather than 'pod' on cygwin (modified
- a patch suggested by cwilson@cc865179-c.chmbl1.ga.home.com)
- Branch: perl
- ! installperl lib/diagnostics.pm utils/perldoc.PL
-____________________________________________________________________________
-[ 4332] By: gsar on 1999/10/10 05:15:26
- Log: add $VERSION
- Branch: perl
- ! lib/Exporter.pm
-____________________________________________________________________________
-[ 4331] By: gsar on 1999/10/10 05:10:22
- Log: describe what can go in an export list (from Anno Siegel
- <anno4000@lublin.zrz.tu-berlin.de>)
- Branch: perl
- ! lib/Exporter.pm
-____________________________________________________________________________
-[ 4330] By: gsar on 1999/10/10 04:50:43
- Log: more basic support for building modules under Windows 95/98
- (applied relevant parts from a patch suggested by
- Jochen Wiedmann <joe@ispsoft.de>)
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 4329] By: gsar on 1999/10/10 04:28:38
- Log: rudimentary support for building under Windows 95/98 (from
- Benjamin Stuhl <sho_pi@hotmail.com>)
- Branch: perl
- + win32/genmk95.pl
- ! MANIFEST README.win32 lib/ExtUtils/MM_Win32.pm
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 4328] By: gsar on 1999/10/10 03:37:21
- Log: fix two leaks in Thread.xs (from Eugene Alterman
- <Eugene.Alterman@bremer-inc.com>); convert places with
- 'use attrs' to new attributes syntax
- Branch: perl
- ! ext/Thread/Thread.pm ext/Thread/Thread.xs
- ! ext/Thread/Thread/Queue.pm ext/Thread/Thread/Semaphore.pm
- ! ext/Thread/Thread/Specific.pm ext/Thread/sync.t
- ! ext/Thread/sync2.t
-____________________________________________________________________________
-[ 4327] By: gsar on 1999/10/10 02:23:52
- Log: avoid duplicates in @INC, they cause leaks in mod_perl etc
- (suggested by Tod Irwin <irwin@stockmaster.com>)
- Branch: perl
- ! lib/lib.pm
-____________________________________________________________________________
-[ 4326] By: gsar on 1999/10/10 00:51:48
- Log: better documentation for recv() (from Anton Berezin
- <tobez@plab.ku.dk>)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4325] By: gsar on 1999/10/09 22:46:23
- Log: perldelta updates (see TODO markers)
- Branch: perl
- ! Changes pod/perldelta.pod pp_sys.c
-____________________________________________________________________________
-[ 4324] By: gsar on 1999/10/09 19:43:10
- Log: fix Exporter::export_to_level() documentation
- Branch: perl
- ! lib/Exporter.pm
-____________________________________________________________________________
-[ 4323] By: gsar on 1999/10/09 18:48:31
- Log: don't run END blocks when running under -c switch (older,
- rarely useful behavior may still be obtained by putting
- BEGIN { $^C = 0; exit; } at the end of the script)
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 4322] By: jhi on 1999/10/09 05:31:26
- Log: While awaiting a good test program to detect the broken gcc.
- From: Thomas Conté <tom@fr.uu.net>
- To: <jhi@iki.fi>
- Cc: <perl5-porters@perl.org>
- Subject: Re: [ID 19990825.007] test t/lib/ipc_sysv.t failing under irix 6.4
- Date: Wed, 6 Oct 1999 19:56:29 +0200
- Message-ID: <000a01bf1024$1d938f20$252ad0d4@eng.iway.fr>
- Branch: cfgperl
- ! hints/irix_6.sh perl.h
-____________________________________________________________________________
-[ 4321] By: gsar on 1999/10/09 00:41:02
- Log: POPSUB() gave up the refcount to the CV before LEAVE had a chance to
- clear entries in the CV's pad, leading to coredumps when CV had no
- other references to it; this is a slightly edited version of the
- patch suggested by Russel O'Connor <roconnor@world.std.com>
- Branch: perl
- ! cop.h pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 4320] By: gsar on 1999/10/08 22:50:51
- Log: revert POP{SUB,LOOP}{1,2} logic to the simpler pre-5.003_24
- situation (assumptions about cx invalidation are not valid
- anymore)
- Branch: perl
- ! cop.h pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 4319] By: jhi on 1999/10/08 14:33:31
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> cop.h ext/Thread/Thread.xs op.c opcode.h perl.c perl.h perly.c
- !> perly.y pod/perldiag.pod pod/perlfunc.pod pp_ctl.c pp_sys.c
- !> t/comp/bproto.t thrdvar.h toke.c util.c
-____________________________________________________________________________
-[ 4318] By: jhi on 1999/10/08 13:51:34
- Log: The second cut at AIX C++ extension troubles.
- Branch: cfgperl
- ! ext/DynaLoader/dl_aix.xs ext/DynaLoader/hints/aix.pl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 4317] By: jhi on 1999/10/08 10:44:13
- Log: The first cut at fixing Perl extensions written in C++ in AIX,
- statics don't get initialized right. This patch at least
- doesn't seem to break the build in my AIX, but unfortunately
- I don't have the IBM C++ to do further testing.
-
- Problem reported by Stephanie Beals in
- From: bealzy@us.ibm.com
- To: perl5-porters@perl.org
- Subject: [ID 19991007.005] DynaLoader/dl_aix.xs problem using load and unload on AIX
- Date: Thu, 7 Oct 1999 15:05:54 -0400
- Message-Id: <85256803.0068E70D.00@D51MTA03.pok.ibm.com>
- Branch: cfgperl
- + ext/DynaLoader/hints/aix.pl
- ! MANIFEST ext/DynaLoader/dl_aix.xs hints/aix.sh
-____________________________________________________________________________
-[ 4316] By: gsar on 1999/10/08 10:26:15
- Log: remove kludgey duplicate background error avoidance (caused
- "leaks"; %@ wasn't even user-visible under -Dusethreads);
- only repeats of most recent error are now avoided
- Branch: perl
- ! ext/Thread/Thread.xs perl.c perl.h pp_ctl.c thrdvar.h util.c
-____________________________________________________________________________
-[ 4315] By: jhi on 1999/10/08 09:48:59
- Log: Fix omission.
- Branch: cfgperl
- ! makedef.pl
-____________________________________________________________________________
-[ 4314] By: gsar on 1999/10/08 07:17:01
- Log: extend change#2299 to C<use> (fixes scoping problems in
- C<if (...) { use foo; ... }>)
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 4313] By: gsar on 1999/10/08 04:52:19
- Log: small tweak for change#4309
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 4312] By: gsar on 1999/10/08 02:31:13
- Log: add suggested patch =~ s/NOTOP/OP_NOT/ with tests
- From: Larry Wall <larry@wall.org>
- Date: Wed, 6 Oct 1999 09:55:57 -0700 (PDT)
- Message-Id: <199910061655.JAA11333@kiev.wall.org>
- Subject: Re: [ID 19991001.004] apparent parsing error with not(arg)
- Branch: perl
- ! opcode.h t/comp/bproto.t toke.c
-____________________________________________________________________________
-[ 4311] By: gsar on 1999/10/08 00:58:19
- Log: typo
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 4310] By: gsar on 1999/10/07 23:51:38
- Log: fix setpgrp vs getpgrp and POSIX vs BSD confusion (spotted by
- Brian Mitchell <brian@chele.cais.net>)
- Branch: perl
- ! pod/perldiag.pod pod/perlfunc.pod pp_sys.c
-____________________________________________________________________________
-[ 4309] By: gsar on 1999/10/07 22:57:52
- Log: change#3728 was flawed (loop contexts saw the wrong statement
- info, causing loop control constructs to not find the label);
- disable OP_SETSTATE entirely and add a fix that is specifically
- targetted at disabling the OP_LINESEQ optimization in else BLOCK,
- which was what the original patch was supposed to fix
-
- TODO: remove the remainder of the setstate logic if it can't
- be used anywhere else (it isn't used anywhere now)
- Branch: perl
- ! cop.h op.c perly.c perly.y
-____________________________________________________________________________
-[ 4308] By: jhi on 1999/10/07 19:21:27
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> lib/Pod/Man.pm lib/Pod/Text.pm pod/pod2man.PL
-____________________________________________________________________________
-[ 4307] By: gsar on 1999/10/07 15:12:24
- Log: update to podlators-0.08 from Russ Allbery
- Branch: perl
- ! lib/Pod/Man.pm lib/Pod/Text.pm pod/pod2man.PL
-____________________________________________________________________________
-[ 4306] By: jhi on 1999/10/06 17:20:34
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 45 files)
-____________________________________________________________________________
-[ 4305] By: gsar on 1999/10/06 16:55:45
- Log: some versions of mingw32 have __int64, define iff it isn't
- Branch: perl
- ! win32/win32.h
-____________________________________________________________________________
-[ 4304] By: gsar on 1999/10/06 03:45:44
- Log: fix typos in change#4288
- Branch: perl
- ! Changes dump.c sv.c
-____________________________________________________________________________
-[ 4303] By: gsar on 1999/10/06 03:22:46
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> eg/cgi/dna_small_gif.uu eg/cgi/wilogo_gif.uu
- - eg/cgi/dna.small.gif.uu eg/cgi/wilogo.gif.uu
- !> (integrate 31 files)
-____________________________________________________________________________
-[ 4302] By: gsar on 1999/10/06 02:36:53
- Log: make die/warn and other diagnostics go to wherever STDERR happens
- to point at; change places that meant Perl_debug_log rather than
- PerlIO_stderr()
- Branch: perl
- ! cop.h doio.c embedvar.h ext/Devel/Peek/Peek.xs
- ! ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_beos.xs
- ! ext/DynaLoader/dl_cygwin.xs ext/DynaLoader/dl_dld.xs
- ! ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dl_hpux.xs
- ! ext/DynaLoader/dl_mpeix.xs ext/DynaLoader/dl_next.xs
- ! ext/DynaLoader/dl_rhapsody.xs ext/DynaLoader/dl_vmesa.xs
- ! ext/DynaLoader/dl_vms.xs ext/DynaLoader/dlutils.c
- ! ext/Thread/Thread.xs ext/Thread/typemap intrpvar.h malloc.c
- ! mg.c objXSUB.h op.c perl.c perl.h perlio.c pp.c pp_ctl.c
- ! pp_hot.c regexec.c scope.c scope.h sv.c thread.h toke.c util.c
- ! win32/dl_win32.xs win32/win32.c win32/win32thread.c
-____________________________________________________________________________
-[ 4301] By: jhi on 1999/10/05 23:03:46
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: François Désarménien <desar@club-internet.fr>
- Cc: "perl5-porters@perl.org" <perl5-porters@perl.org>
- Subject: Re: Strange RE engine breakage in 5_61
- Date: Mon, 4 Oct 1999 19:58:03 -0400
- Message-ID: <19991004195803.A21760@monk.mps.ohio-state.edu>
-
- (had to apply pat.t part manually because there
- already were more tests than there was in _61)
- Branch: cfgperl
- ! regcomp.c regexec.c t/op/pat.t t/op/re_tests
-____________________________________________________________________________
-[ 4300] By: jhi on 1999/10/04 17:03:18
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Jarkko Hietaniemi <jhi@iki.fi>
- cc: Perl Porters <perl5-porters@perl.org>, jhi@cc.hut.fi
- Subject: Re: [ID 19991001.005] [_61] [PATCH] tarball fine on win32, zip isn't
- Date: Mon, 4 Oct 1999 13:05:08 -0400 (EDT)
- Message-ID: <Pine.SOL.4.10.9910041302550.6502-100000@maxwell.phys.lafayette.edu>
- Branch: cfgperl
- + eg/cgi/dna_small_gif.uu eg/cgi/wilogo_gif.uu
- - eg/cgi/dna.small.gif.uu eg/cgi/wilogo.gif.uu
- ! MANIFEST ext/B/defsubs_h.PL
-____________________________________________________________________________
-[ 4299] By: jhi on 1999/10/04 07:15:16
- Log: From: Michael G Schwern <schwern@pobox.com>
- To: perl5-porters@perl.org
- Subject: Re: [PATCH av.c, op.c, perldiag.pod] "array field" -> "pseudo-hash field"
- Date: Sun, 3 Oct 1999 17:34:17 -0400
- Message-ID: <19991003173417.A4351@blackrider>
- Branch: cfgperl
- ! t/lib/fields.t t/pragma/constant.t
-____________________________________________________________________________
-[ 4298] By: gsar on 1999/10/04 04:57:53
- Log: some compatibility macros were busted
- Branch: perl
- ! embed.h embed.pl toke.c
-____________________________________________________________________________
-[ 4297] By: jhi on 1999/10/03 17:50:59
- Log: A better version of #4296.
-
- From: Michael G Schwern <schwern@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH av.c, op.c, perldiag.pod] "array field" -> "pseudo-hash field"
- Date: Sun, 3 Oct 1999 13:54:23 -0400
- Message-ID: <19991003135423.A3050@blackrider>
- Branch: cfgperl
- ! av.c op.c pod/perldiag.pod
-____________________________________________________________________________
-[ 4296] By: jhi on 1999/10/03 17:21:01
- Log: (Replaced by #4297.)
-
- From: Michael G Schwern <schwern@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH av.c, perldiag.pod] Added field name to "No such array field"
- Date: Sun, 3 Oct 1999 13:16:47 -0400
- Message-ID: <19991003131647.A2816@blackrider>
-
- plus changed the error message to say "No such pseudo-hash field"
- as discussed in the above mail message.
- Branch: cfgperl
- ! av.c pod/perldiag.pod
-____________________________________________________________________________
-[ 4295] By: gsar on 1999/10/03 16:09:36
- Log: avoid doing irrelevant things on 'make perl'
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 4294] By: jhi on 1999/10/03 14:16:24
- Log: Fix a typo in #4293 spotted by Graham Barr.
- Branch: cfgperl
- ! pod/perlref.pod
-____________________________________________________________________________
-[ 4293] By: jhi on 1999/10/03 11:31:22
- Log: From: Michael G Schwern <schwern@blackrider.aocn.com>
- To: perl5-porters@perl.org
- Subject: Re: Should keys in pseudo-hashes -always- exist? [DOC PATCH]
- Date: Sun, 3 Oct 1999 02:34:01 -0400
- Message-ID: <19991003023401.A1520@blackrider>
- Branch: cfgperl
- ! pod/perlfunc.pod pod/perlref.pod
-____________________________________________________________________________
-[ 4292] By: jhi on 1999/10/03 09:23:16
- Log: From: Barrie Slaymaker <barries@slaysys.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_61] Benchmark.pm bugfix, tweaks
- Date: Sun, 3 Oct 1999 00:09:51 -0400
- Message-Id: <199910030409.AAA18228@jester.slaysys.com>
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 4291] By: jhi on 1999/10/02 23:43:53
- Log: Be understanding about large file systems.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4290] By: jhi on 1999/10/02 23:39:16
- Log: Configure fixfest continues.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/d_longdbl.U U/modified/d_longlong.U
- ! U/threads/d_pthreadj.U U/typedefs/gidsign.U
- ! U/typedefs/gidsize.U U/typedefs/pidsign.U U/typedefs/pidsize.U
- ! U/typedefs/uidsign.U U/typedefs/uidsize.U
- Branch: metaconfig/U/perl
- ! i_inttypes.U io64.U
-____________________________________________________________________________
-[ 4289] By: jhi on 1999/10/02 23:12:54
- Log: Regen Porting stuff.
- Branch: cfgperl
- ! Porting/Glossary Porting/config.sh Porting/config_H
-____________________________________________________________________________
-[ 4288] By: jhi on 1999/10/02 23:05:50
- Log: Untangle the IV_IS_QUAD jungle by introduding
- macros to be used when doing formatted printing:
- IVdf, UVuf, UVxf, UVof. Also introduce Uid_t_SIGN.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH doio.c dump.c op.c perl.h pp_hot.c pp_sys.c
- ! regcomp.c sv.c taint.c toke.c util.c
-____________________________________________________________________________
-[ 4287] By: jhi on 1999/10/02 22:54:18
- Log: metaconfig maintenance.
- Branch: metaconfig
- ! U/ebcdic/ebcdic.U U/typedefs/gidsign.U U/typedefs/gidsize.U
- ! U/typedefs/pidsign.U U/typedefs/pidsize.U U/typedefs/uidsign.U
- ! U/typedefs/uidsize.U
-____________________________________________________________________________
-[ 4286] By: nick on 1999/10/02 11:11:44
- Log: Incremental merge of mainline
- Branch: utfperl
- +> README.Y2K hints/svr5.sh lib/Pod/Man.pm
- +> lib/unicode/Unicode.html t/op/args.t t/pod/multiline_items.t
- +> t/pod/multiline_items.xr t/pod/pod2usage.t t/pod/pod2usage.xr
- +> t/pod/podselect.t t/pod/podselect.xr
- - lib/Pod/PlainText.pm
- !> (integrate 148 files)
-____________________________________________________________________________
-[ 4285] By: jhi on 1999/10/02 10:16:15
- Log: Battle namespace pollution.
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 4284] By: jhi on 1999/10/02 10:11:20
- Log: Regen Configure, all of xs_apiversion didn't take.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH patchlevel.h
-____________________________________________________________________________
-[ 4283] By: jhi on 1999/10/02 09:48:17
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/Pod/Man.pm t/pod/multiline_items.t
- +> t/pod/multiline_items.xr t/pod/pod2usage.t t/pod/pod2usage.xr
- +> t/pod/podselect.t t/pod/podselect.xr
- - lib/Pod/PlainText.pm
- !> (integrate 50 files)
-____________________________________________________________________________
-[ 4282] By: gsar on 1999/10/02 06:39:14
- Log: update pod2man, pod2text and related Pod:: modules with the
- ones in podlators-0.07 from Russ Allbery
- Branch: perl
- + lib/Pod/Man.pm
- ! lib/Pod/Text.pm lib/Pod/Text/Color.pm lib/Pod/Text/Termcap.pm
- ! pod/pod2man.PL pod/pod2text.PL
-____________________________________________________________________________
-[ 4281] By: gsar on 1999/10/02 06:14:44
- Log: fix PodParser testsuite; Pod::Text subsumes Pod::PlainText
- Branch: perl
- - lib/Pod/PlainText.pm
- ! MANIFEST lib/Pod/Text.pm lib/Pod/Usage.pm pod/pod2usage.PL
- ! pod/podchecker.PL pod/podselect.PL t/pod/emptycmd.t
- ! t/pod/for.t t/pod/headings.t t/pod/include.t t/pod/included.t
- ! t/pod/lref.t t/pod/multiline_items.t t/pod/nested_items.t
- ! t/pod/nested_seqs.t t/pod/oneline_cmds.t t/pod/pod2usage.t
- ! t/pod/poderrs.t t/pod/poderrs.xr t/pod/podselect.t
- ! t/pod/special_seqs.t t/pod/testp2pt.pl t/pod/testpchk.pl
-____________________________________________________________________________
-[ 4280] By: gsar on 1999/10/02 04:39:38
- Log: upgrade to PodParser-1.085 from Brad Appleton <bradapp@enteract.com>
- Branch: perl
- + t/pod/multiline_items.t t/pod/multiline_items.xr
- + t/pod/pod2usage.t t/pod/pod2usage.xr t/pod/podselect.t
- + t/pod/podselect.xr
- ! MANIFEST lib/Pod/Checker.pm lib/Pod/InputObjects.pm
- ! lib/Pod/Parser.pm lib/Pod/PlainText.pm lib/Pod/Select.pm
- ! lib/Pod/Usage.pm t/pod/for.xr t/pod/headings.xr
- ! t/pod/include.xr t/pod/included.xr t/pod/lref.xr
- ! t/pod/nested_items.xr t/pod/nested_seqs.xr
- ! t/pod/oneline_cmds.xr t/pod/poderrs.xr t/pod/special_seqs.xr
- ! t/pod/testp2pt.pl
-____________________________________________________________________________
-[ 4279] By: gsar on 1999/10/02 03:36:41
- Log: make exists() work better on pseudo-hashes (reworked a patch suggested
- by Michael G Schwern <schwern@pobox.com>)
- Branch: perl
- ! av.c t/op/avhv.t
-____________________________________________________________________________
-[ 4278] By: gsar on 1999/10/02 02:36:55
- Log: deprecate C<use attrs>
- Branch: perl
- ! ext/attrs/attrs.pm ext/attrs/attrs.xs t/lib/attrs.t
- ! t/lib/thread.t t/pragma/sub_lval.t
-____________________________________________________________________________
-[ 4277] By: gsar on 1999/10/02 01:43:25
- Log: add notes about effect of loop control statements inside
- LABEL BLOCK continue BLOCK
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4276] By: gsar on 1999/10/02 01:23:02
- Log: indent nested =items properly (suggested by Bill Fenner
- <fenner@research.att.com>)
- Branch: perl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 4275] By: gsar on 1999/10/02 01:09:16
- Log: updated ptags generator from Ilya Zakharevich
- Branch: perl
- ! emacs/ptags
-____________________________________________________________________________
-[ 4274] By: gsar on 1999/10/01 23:08:52
- Log: update Changes
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 4273] By: gsar on 1999/10/01 22:58:55
- Log: typo, whitespace adjustments
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 4272] By: gsar on 1999/10/01 22:46:06
- Log: remove dup hunks
- Branch: perl
- ! configure.com vms/vms.c
-____________________________________________________________________________
-[ 4271] By: gsar on 1999/10/01 22:33:02
- Log: integrate cfgperl contents into mainline; resolve h2xs.PL conflict
- by declaring new globals "our" (XXX this means h2xs generated code
- won't run on earlier versions; a switch to generate compatible
- source is needed)
- Branch: perl
- !> (integrate 35 files)
-____________________________________________________________________________
-[ 4270] By: jhi on 1999/10/01 12:05:56
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> ext/B/B/C.pm lib/ExtUtils/typemap lib/ExtUtils/xsubpp
- !> pod/perldiag.pod util.c
-____________________________________________________________________________
-[ 4269] By: jhi on 1999/10/01 10:26:19
- Log: From: Piotr Klaban <makler@oryl.man.torun.pl>
- To: perl5-porters@perl.org
- Subject: [ID 19991001.001] perlguts man page error
- Date: Fri, 1 Oct 1999 10:23:49 +0200 (MET DST)
- Message-Id: <199910010823.KAA05796@oryl.man.torun.pl>
- Branch: cfgperl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 4268] By: jhi on 1999/10/01 07:32:33
- Log: There *is* a month called October.
- Branch: cfgperl
- ! t/op/time.t
-____________________________________________________________________________
-[ 4267] By: jhi on 1999/10/01 06:58:10
- Log: Temp file cleanliness.
- Branch: cfgperl
- ! t/lib/filecopy.t
-____________________________________________________________________________
-[ 4266] By: jhi on 1999/10/01 06:46:56
- Log: From: Barrie Slaymaker <barries@slaysys.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_61] Benchmark.pm: Export countit(), cmpthese() by default
- Date: Thu, 30 Sep 1999 22:16:26 -0400
- Message-Id: <199910010216.WAA08309@jester.slaysys.com>
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 4265] By: jhi on 1999/09/30 20:25:35
- Log: From: Barrie Slaymaker <barries@slaysys.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_61] Benchmark tweaks, fixes, cmpthese()
- Date: Thu, 30 Sep 1999 15:44:00 -0400
- Message-Id: <199909301944.PAA07166@jester.slaysys.com>
- (Replaces #4175.)
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 4264] By: gsar on 1999/09/30 17:59:26
- Log: re-add missing "Out of memory!" entry
- Branch: perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 4263] By: jhi on 1999/09/30 17:05:43
- Log: Regenerate Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 4261] By: jhi on 1999/09/30 16:15:05
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_61] rand() advisory for perldelta.pod
- Date: Thu, 30 Sep 1999 12:24:00 -0400 (EDT)
- Message-ID: <Pine.SOL.4.10.9909301218390.3343-100000@maxwell.phys.lafayette.edu>
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4260] By: jhi on 1999/09/30 15:48:56
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Jarkko Hietaniemi <jhi@iki.fi>, Gurusamy Sarathy <gsar@activestate.com>
- Subject: Re: Possible skeletal structure for searching multiple versions
- Date: Thu, 30 Sep 1999 11:52:00 -0400 (EDT)
- Message-ID: <Pine.SOL.4.10.9909301149090.3343-100000@maxwell.phys.lafayette.edu>
- Branch: metaconfig
- ! U/mkglossary
- Branch: metaconfig/U/perl
- + xs_apiversion.U
- ! patchlevel.U
-____________________________________________________________________________
-[ 4259] By: jhi on 1999/09/30 15:07:16
- Log: Further ?idsize.U fixing.
- Branch: metaconfig
- ! U/typedefs/gidsize.U U/typedefs/pidsize.U U/typedefs/uidsize.U
-____________________________________________________________________________
-[ 4258] By: jhi on 1999/09/30 15:00:14
- Log: Fix the ?idsi{gn,ze} units, from Andy Dougherty.
- Branch: metaconfig
- ! U/typedefs/gidsign.U U/typedefs/gidsize.U U/typedefs/pidsign.U
- ! U/typedefs/pidsize.U U/typedefs/uidsign.U U/typedefs/uidsize.U
-____________________________________________________________________________
-[ 4257] By: jhi on 1999/09/30 09:48:33
- Log: From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: Gurusamy Sarathy <gsar@ActiveState.com>
- Cc: tchrist@perl.com, Larry Wall <larry@wall.org>,
- The Perl Porters Mailing List <perl5-porters@perl.org>
- Subject: [PATCH] (Was: deprecating SIGDIE)
- Date: Wed, 29 Sep 1999 15:16:50 -0400
- Message-ID: <19990929151650.E26675@O2.chapin.edu>
- Branch: cfgperl
- ! Porting/findvars embedvar.h intrpvar.h mg.c objXSUB.h perl.c
-____________________________________________________________________________
-[ 4256] By: jhi on 1999/09/30 09:45:22
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Gurusamy Sarathy <gsar@activestate.com>
- Cc: Barrie Slaymaker <barries@slaysys.com>, perl5-porters@perl.org
- Subject: Re: _58, _61 Argument "" is not numeric in sprintf
- Date: Wed, 29 Sep 1999 18:58:23 -0400
- Message-ID: <19990929185823.A22099@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! Makefile.SH opcode.pl
-____________________________________________________________________________
-[ 4255] By: gsar on 1999/09/30 09:03:48
- Log: remove prehistoric XFree() gunk
- Branch: perl
- ! lib/ExtUtils/typemap lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 4254] By: gsar on 1999/09/30 08:40:14
- Log: From: Vishal Bhatia <vishal@gol.com>
- Date: Wed, 29 Sep 1999 23:27:28 +0900 (JST)
- Message-ID: <Pine.LNX.4.10.9909292326280.5599-100000@localhost.localdomain>
- Subject: [patch _61] Minor corrections in C.pm
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 4253] By: gsar on 1999/09/30 08:36:27
- Log: off-by-one in fbm_compile() (spotted by John Bley
- <jbley@cs.cmu.edu>); whitespace adjustments
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 4251] By: jhi on 1999/09/30 08:09:13
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.00561+] Followup h2xs patch
- Date: Thu, 30 Sep 1999 04:15:52 -0400 (EDT)
- Message-Id: <199909300815.EAA25425@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 4250] By: jhi on 1999/09/29 19:11:32
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> djgpp/configure.bat embed.h embed.pl lib/Exporter/Heavy.pm
- !> lib/ExtUtils/MM_Unix.pm lib/Time/Local.pm proto.h
- !> t/pragma/locale/latin1 win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4249] By: bailey on 1999/09/29 02:21:31
- Log: resync with mainline
- Branch: vmsperl
- +> (branch 32 files)
- - ext/B/defsubs.h.PL lib/unicode/arabshp.txt
- - lib/unicode/blocks.txt lib/unicode/index2.txt
- - lib/unicode/jamo2.txt lib/unicode/names2.txt
- - lib/unicode/props2.txt lib/unicode/readme.txt
- - t/lib/bigfloatpm.t
- !> (integrate 240 files)
-____________________________________________________________________________
-[ 4248] By: jhi on 1999/09/28 18:14:39
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_xx] Re: [Config 5.005_03] -DDEBUGGING
- Date: Tue, 28 Sep 1999 12:20:50 -0400 (EDT)
- Message-ID: <Pine.SOL.4.10.9909281019360.1890-100000@maxwell.phys.lafayette.edu>
-
- From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [ANOTHER PATCH 5.005_61] Re: [Config 5.005_03] -DDEBUGGING
- Date: Tue, 28 Sep 1999 13:39:49 -0400 (EDT)
- Message-ID: <Pine.SOL.4.10.9909281338180.2012-100000@maxwell.phys.lafayette.edu>
- Branch: cfgperl
- ! hints/README.hints hints/amigaos.sh hints/cygwin.sh
- ! hints/dynixptx.sh hints/epix.sh hints/esix4.sh hints/mint.sh
- ! hints/mpeix.sh hints/next_3.sh hints/next_3_0.sh
- ! hints/next_4.sh
-____________________________________________________________________________
-[ 4247] By: gsar on 1999/09/28 17:36:59
- Log: revert change#4115 (breaks libwww's base/date.t); could be
- reworked to enable it conditional on $Time::Local::nocroak
- or some such
- Branch: perl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 4246] By: gsar on 1999/09/28 17:33:14
- Log: tweak for win32 build
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4245] By: gsar on 1999/09/28 17:31:34
- Log: change#4236 fallout
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 4244] By: gsar on 1999/09/28 17:29:31
- Log: remove doubled new_xpv
- Branch: perl
- ! embed.h embed.pl proto.h
-____________________________________________________________________________
-[ 4243] By: jhi on 1999/09/27 19:13:20
- Log: Artistic fine-tuning.
- Branch: cfgperl
- ! ext/B/defsubs_h.PL
-____________________________________________________________________________
-[ 4242] By: gsar on 1999/09/27 17:05:22
- Log: avoid implicit split to @_ in change#4181; binary -> text file
- types in p4
- Branch: perl
- ! djgpp/configure.bat lib/Exporter/Heavy.pm
- ! t/pragma/locale/latin1
-____________________________________________________________________________
-[ 4241] By: jhi on 1999/09/27 07:48:19
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> INSTALL embed.h embed.pl malloc.c pod/perldiag.pod pp.c
- !> pp_ctl.c pp_hot.c pp_sys.c win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4240] By: jhi on 1999/09/27 07:47:11
- Log: Finalize change #4232.
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Jarkko Hietaniemi <jhi@iki.fi>
- Cc: gsar@activestate.com, Mailing list Perl5 <perl5-porters@perl.org>
- Subject: Re: xsubpp change breaks B, DB_File, POSIX builds
- Date: Sun, 26 Sep 1999 16:52:31 -0400
- Message-ID: <19990926165230.A26933@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 4239] By: gsar on 1999/09/27 02:48:42
- Log: add notes in INSTALL about Configure -Accflags=-DFOO
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 4238] By: gsar on 1999/09/27 02:03:48
- Log: PERL_POLLUTE isn't required for bincompat, so don't enable
- it automatically
- Branch: perl
- ! embed.h embed.pl
-____________________________________________________________________________
-[ 4237] By: gsar on 1999/09/27 01:52:47
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 24 Sep 1999 23:25:36 -0400
- Message-ID: <19990924232536.A16257@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_61] Malloc fixes and docs
- Branch: perl
- ! malloc.c pod/perldiag.pod
-____________________________________________________________________________
-[ 4236] By: gsar on 1999/09/27 01:31:32
- Log: avoid .exe in $Config{cc} (spotted by Vadim Konovalov
- <vkonovalov@lucent.com>)
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4235] By: gsar on 1999/09/26 17:02:03
- Log: fix buggy popping of subroutine contexts in the lvalue
- subroutines implementation (change#4081); correct the
- plethora of cases where DIE() was more appropriate than
- croak()
- Branch: perl
- ! pp.c pp_ctl.c pp_hot.c pp_sys.c
-____________________________________________________________________________
-[ 4234] By: jhi on 1999/09/26 12:06:28
- Log: Fix #endif.
- Branch: cfgperl
- ! XSUB.h
-____________________________________________________________________________
-[ 4233] By: jhi on 1999/09/26 11:59:18
- Log: Integrate with Sarathy. h2xs.PL had to be manually resolved,
- I kept my (Ilya's) version.
- Branch: cfgperl
- !> gv.c gv.h intrpvar.h keywords.h keywords.pl lib/Shell.pm op.c
- !> pod/perldiag.pod pod/perlembed.pod pod/perlfaq3.pod
- !> pod/perlfaq7.pod pod/perlfunc.pod pod/perlmod.pod
- !> pod/perlmodlib.pod pod/perlsub.pod pod/perltoot.pod
- !> pod/perlxstut.pod sv.h t/pragma/strict-vars toke.c
- !> utils/h2xs.PL win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4232] By: jhi on 1999/09/26 09:53:43
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_61] teach xsubpp function pointers
- Date: Sun, 26 Sep 1999 01:36:09 -0400
- Message-ID: <19990926013609.A21148@monk.mps.ohio-state.edu>
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_61] Make h2xs -x almost bullet-proof
- Date: Sun, 26 Sep 1999 03:00:50 -0400
- Message-ID: <19990926030050.A21498@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! lib/ExtUtils/xsubpp utils/h2xs.PL
-____________________________________________________________________________
-[ 4231] By: jhi on 1999/09/26 09:48:49
- Log: From: "Konovalov, Vadim" <vkonovalov@lucent.com>
- To: perl5-porters@perl.org
- Subject: misprint in perlguts
- Date: Sun, 26 Sep 1999 12:48:36 +0400
- Message-ID: <402099F49BEED211999700805FC7359F20D7A5@ru0028exch01.spb.lucent.com>
- Branch: cfgperl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 4230] By: gsar on 1999/09/26 00:50:08
- Log: add $installarchlib/CORE to default linker search path on windows
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 4229] By: gsar on 1999/09/25 20:05:03
- Log: support C<use Shell> on Windows (reworked a patch suggested
- by Jenda Krynicky <Jenda@McCann.cz>)
- Branch: perl
- ! lib/Shell.pm
-____________________________________________________________________________
-[ 4228] By: gsar on 1999/09/25 07:03:34
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> hints/svr5.sh
- !> Configure MANIFEST Makefile.SH config_h.SH hints/sco.sh
- !> lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
- !> lib/unicode/mktables.PL pod/perldelta.pod pod/perlfaq9.pod
- !> regcomp.c regexec.c t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4227] By: gsar on 1999/09/25 06:44:47
- Log: From: Larry Wall <larry@wall.org>
- Date: Fri, 24 Sep 1999 21:59:37 PDT
- Message-Id: <199909250459.VAA27506@kiev.wall.org>
- Subject: Re: [PATCH 5.005_61] "our" declarations
- Branch: perl
- ! gv.c gv.h intrpvar.h keywords.h keywords.pl op.c
- ! pod/perldiag.pod pod/perlembed.pod pod/perlfaq3.pod
- ! pod/perlfaq7.pod pod/perlfunc.pod pod/perlmod.pod
- ! pod/perlmodlib.pod pod/perlsub.pod pod/perltoot.pod
- ! pod/perlxstut.pod sv.h t/pragma/strict-vars toke.c
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 4226] By: jhi on 1999/09/24 23:10:52
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> XSUB.h ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
- !> ext/POSIX/hints/linux.pl pod/perldiag.pod pod/perlfunc.pod
- !> pp.c t/lib/posix.t t/op/pack.t toke.c utils/perlcc.PL
-____________________________________________________________________________
-[ 4225] By: gsar on 1999/09/24 18:19:54
- Log: avoid infinite recursive exec()s of perl.exe when shebang
- contains "Perl" rather than "perl" on DOSISH platforms
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4224] By: gsar on 1999/09/24 16:09:23
- Log: support cygwin and other platforms that link to import libraries
- rather than directly with shared libraries (from a suggestion
- by Lucian Cionca <Lucian.Cionca@algoritma.ro>)
- Branch: perl
- ! utils/perlcc.PL
-____________________________________________________________________________
-[ 4223] By: gsar on 1999/09/24 05:05:06
- Log: normalize time for strftime() (without the isdst effects of
- mktime()) using a custom mini_mktime()
- From: spider-perl@Orb.Nashua.NH.US
- Date: Thu, 23 Sep 1999 17:54:53 -0400
- Message-Id: <199909232154.RAA25151@leggy.zk3.dec.com>
- Subject: Re: [ID 19990913.003] Possible bug using POSIX::strftime Digital UNIX Perl 5.005_03
- Branch: perl
- ! ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
- ! ext/POSIX/hints/linux.pl t/lib/posix.t
-____________________________________________________________________________
-[ 4222] By: gsar on 1999/09/23 06:44:42
- Log: change "#" to a comment starter in pack templates; "/" now
- used for specifying counted types
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 22 Sep 1999 19:41:30 -0400
- Message-ID: <19990922194130.A864@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_61] Enable comments in pack()/unpack() templates
- Branch: perl
- ! pod/perldiag.pod pod/perlfunc.pod pp.c t/op/pack.t
-____________________________________________________________________________
-[ 4221] By: gsar on 1999/09/23 06:26:54
- Log: From: Vishal Bhatia <vishal@gol.com>
- Date: Thu, 23 Sep 1999 12:45:19 +0900 (JST)
- Message-ID: <Pine.LNX.4.10.9909231218360.3428-100000@localhost.localdomain>
- Subject: [patch _61] perlcc changes
- Branch: perl
- ! utils/perlcc.PL
-____________________________________________________________________________
-[ 4220] By: gsar on 1999/09/23 01:12:24
- Log: add include guard
- Branch: perl
- ! XSUB.h
-____________________________________________________________________________
-[ 4219] By: jhi on 1999/09/22 20:38:15
- Log: Cleanup cleanup.
- Branch: cfgperl
- ! Makefile.SH t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4218] By: jhi on 1999/09/22 19:26:58
- Log: Tweak the equivalence tables once again.
- Branch: cfgperl
- ! lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
- ! lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 4215] By: jhi on 1999/09/22 06:47:03
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_61] regfree could segfault with -Mre=debug
- Date: Tue, 21 Sep 1999 19:50:00 -0400
- Message-ID: <19990921195000.A23938@monk.mps.ohio-state.edu>
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_61] More verbose -Mre=debug
- Date: Tue, 21 Sep 1999 22:29:55 -0400
- Message-ID: <19990921222955.A25094@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! regcomp.c regexec.c
-____________________________________________________________________________
-[ 4214] By: jhi on 1999/09/21 21:08:43
- Log: From: 0000-Admin (0000) <root@devsys0.zenez.com>
- Reply-To: gerberb@zenez.com
- To: perl5-porters@perl.org
- Subject: [ID 19990921.004] Changes for SCO OpenServer and UnixWare 7
- Date: Tue, 21 Sep 1999 11:07:46 -0600 (MDT)
- Message-Id: <199909211707.LAA23611@devsys0.zenez.com>
-
- (Snipped away the last lines of svr5.sh a la change #3725)
- Branch: cfgperl
- + hints/svr5.sh
- ! Configure MANIFEST config_h.SH hints/sco.sh
- Branch: metaconfig
- ! U/modified/Cppsym.U U/modified/Oldconfig.U
-____________________________________________________________________________
-[ 4213] By: jhi on 1999/09/21 20:48:01
- Log: From: Kragen Sitaker <kragen@dnaco.net>
- To: perl5-porters@perl.org
- Subject: [ID 19990921.013] accidental list context in perlfaq9
- Date: Tue, 21 Sep 1999 16:27:53 -0400 (EDT)
- Reply-To: kragen@pobox.com
- Message-Id: <199909212027.QAA03450@kirk.dnaco.net>
- Branch: cfgperl
- ! pod/perlfaq9.pod
-____________________________________________________________________________
-[ 4212] By: jhi on 1999/09/20 19:55:42
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> README.Y2K
- !> Changes MANIFEST
-____________________________________________________________________________
-[ 4211] By: jhi on 1999/09/20 19:44:44
- Log: Rename -Duselfs to -Duselargefiles. We don't need no stnkngbbrvtns.
- Branch: cfgperl
- ! Configure config_h.SH pod/perldelta.pod
- Branch: metaconfig/U/perl
- ! use64bits.U uselfs.U uselongdbl.U
-____________________________________________________________________________
-[ 4210] By: jhi on 1999/09/20 19:38:26
- Log: Configure -A change: -Afoo=bar is equal to -Aappend:foo=" bar".
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Options.U
-____________________________________________________________________________
-[ 4209] By: gsar on 1999/09/20 19:35:39
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> lib/unicode/Unicode.html
- ! Changes
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH doio.c perl.h pod/perldelta.pod pod/perlfunc.pod
-____________________________________________________________________________
-[ 4208] By: gsar on 1999/09/20 18:28:44
- Log: add README.Y2K (from Dominic Dunlop <domo@vo.lu>)
- Branch: perl
- + README.Y2K
- ! MANIFEST
-____________________________________________________________________________
-[ 4207] By: jhi on 1999/09/20 11:06:13
- Log: Document -Duselfs, -Duselongdouble, and -Dusemorebits.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4206] By: jhi on 1999/09/20 09:53:15
- Log: Do not test for gccish things in non-gccish platforms.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/compline/ccflags.U
-____________________________________________________________________________
-[ 4205] By: jhi on 1999/09/20 09:41:22
- Log: Prompt for uselfs.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
- Branch: metaconfig
- ! U/mksample
- Branch: metaconfig/U/perl
- ! use64bits.U uselfs.U
-____________________________________________________________________________
-[ 4204] By: jhi on 1999/09/20 09:09:29
- Log: Add usemorebits and uselfs.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH doio.c perl.h
- Branch: metaconfig/U/perl
- + uselfs.U usemorebits.U
- ! use64bits.U uselongdbl.U
-____________________________________________________________________________
-[ 4203] By: jhi on 1999/09/20 07:48:48
- Log: Dethinko.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4202] By: jhi on 1999/09/20 07:33:32
- Log: Fix a bug in the description of endianness. Reported in
- From: "Konovalov, Vadim" <vkonovalov@lucent.com>
- To: perl5-porters@perl.org
- Subject: BUG: perldoc -f pack
- Date: Mon, 20 Sep 1999 09:43:49 +0400
- Message-ID: <402099F49BEED211999700805FC7359F20D3F5@ru0028exch01.spb.lucent.com>
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4201] By: jhi on 1999/09/20 07:01:26
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/op/args.t
- !> (integrate 31 files)
-____________________________________________________________________________
-[ 4200] By: gsar on 1999/09/20 03:45:06
- Log: From: Russ Allbery <rra@stanford.edu>
- Date: 19 Aug 1999 04:35:44 -0700
- Message-Id: <yl7lms9f5b.fsf@windlord.stanford.edu>
- Subject: [ID 19990819.002] File::Find error when pruning top-level directories
- Branch: perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 4199] By: gsar on 1999/09/20 03:27:49
- Log: suppress warning (from John Tobey <jtobey@epsilondev.com>)
- Branch: perl
- ! ext/B/B/Terse.pm
-____________________________________________________________________________
-[ 4198] By: gsar on 1999/09/20 03:25:25
- Log: add arenas for managing allocations of remaining xpv*v structures
- From: Vishal Bhatia <vishal@gol.com>
- Date: Wed, 25 Aug 1999 00:31:33 +0900 (JST)
- Message-ID: <Pine.LNX.4.10.9908250031000.11727-100000@localhost.localdomain>
- Subject: [PATCH 5.005_60] removing extra ref count (compiler)
- Branch: perl
- ! embed.h embed.pl embedvar.h ext/B/B/C.pm intrpvar.h objXSUB.h
- ! proto.h sv.c
-____________________________________________________________________________
-[ 4197] By: gsar on 1999/09/20 03:06:10
- Log: queue errors due to strictures rather than printing them as
- warnings; symbols that violate strictures do *not* end up in
- the symbol table anyway, making multiple evals of the same piece
- of code produce the same errors; errors indicate all locations
- of a global symbol rather than just the first one; these
- changes make compile-time failures within evals reliably
- visible via the return value or contents of $@, and trappable
- using __DIE__ hooks
- Branch: perl
- ! embed.h embed.pl embedvar.h ext/DynaLoader/dlutils.c
- ! ext/Thread/Thread.xs global.sym gv.c objXSUB.h op.c perl.c
- ! perlapi.c pp_ctl.c proto.h regcomp.c t/pragma/strict-refs
- ! t/pragma/strict-vars thrdvar.h toke.c util.c
-____________________________________________________________________________
-[ 4196] By: gsar on 1999/09/19 22:14:29
- Log: control change#1914 via hints (causes problems on some platforms)
- Branch: perl
- ! ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
- ! ext/POSIX/hints/linux.pl
-____________________________________________________________________________
-[ 4195] By: gsar on 1999/09/19 21:30:18
- Log: avoid clearing @_ at all for faster subroutine calls; fix bugs
- in passing around references to @_, eg C<sub foo { \@_ }>; add
- tests for the same
- Branch: perl
- + t/op/args.t
- ! MANIFEST cop.h pp.c pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 4194] By: jhi on 1999/09/18 18:57:45
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> opcode.h opcode.pl
-____________________________________________________________________________
-[ 4193] By: nick on 1999/09/18 15:24:56
- Log: Re-integrate mainline
- Basic SvUTF8 stuff in headers, no functional changes yet.
- Branch: utfperl
- + lib/byte.pm lib/byte_heavy.pl
- +> ext/B/defsubs_h.PL ext/DB_File/version.c jpl/JNI/Closer.java
- +> jpl/JNI/JNIConfig jpl/JNI/JNIConfig.Win32
- +> jpl/JNI/JNIConfig.kaffe jpl/JNI/JNIConfig.noembed
- +> jpl/JNI/JNIConfig.standard jpl/JNI/typemap.gcc
- +> jpl/JNI/typemap.win32 jpl/SETVARS.PL lib/unicode/ArabShap.txt
- +> lib/unicode/Blocks.txt lib/unicode/CompExcl.txt
- +> lib/unicode/EAWidth.txt lib/unicode/Index.txt
- +> lib/unicode/Jamo-2.txt lib/unicode/LineBrk.txt
- +> lib/unicode/Names.txt lib/unicode/Props.txt
- +> lib/unicode/ReadMe.txt lib/unicode/SpecCase.txt
- +> t/lib/bigfltpm.t
- - ext/B/defsubs.h.PL lib/unicode/arabshp.txt
- - lib/unicode/blocks.txt lib/unicode/index2.txt
- - lib/unicode/jamo2.txt lib/unicode/names2.txt
- - lib/unicode/props2.txt lib/unicode/readme.txt
- - t/lib/bigfloatpm.t
- ! doop.c embed.h embed.pl gv.c mg.c objXSUB.h op.c op.h perl.h
- ! perlapi.c pp.c pp_ctl.c pp_hot.c proto.h regcomp.c regcomp.h
- ! regexec.c regexp.h regnodes.h sv.c sv.h toke.c utf8.c utf8.h
- ! warnings.h
- !> (integrate 142 files)
-____________________________________________________________________________
-[ 4192] By: gsar on 1999/09/18 15:11:47
- Log: more op description tweaks
- Branch: perl
- ! opcode.h opcode.pl
-____________________________________________________________________________
-[ 4191] By: jhi on 1999/09/18 07:47:16
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes opcode.h opcode.pl t/io/open.t t/op/misc.t
- !> t/pragma/warn/op
-____________________________________________________________________________
-[ 4190] By: jhi on 1999/09/18 07:35:45
- Log: Add description of the Unicode database files.
- Branch: cfgperl
- + lib/unicode/Unicode.html
-____________________________________________________________________________
-[ 4189] By: gsar on 1999/09/18 03:14:58
- Log: tweak some op names in change#4177 (will any of this break code that
- gropes $@ ?)
- Branch: perl
- ! Changes opcode.h opcode.pl t/io/open.t t/op/misc.t
- ! t/pragma/warn/op
-____________________________________________________________________________
-[ 4188] By: jhi on 1999/09/17 21:30:08
- Log: Pick up the typo fix.
- Branch: cfgperl
- !> t/io/open.t
-____________________________________________________________________________
-[ 4187] By: gsar on 1999/09/17 21:13:55
- Log: fix typo
- Branch: perl
- ! t/io/open.t
-____________________________________________________________________________
-[ 4186] By: gsar on 1999/09/17 20:57:29
- Log: integrate cfgperl change
- Branch: perl
- !> vms/subconfigure.com
-____________________________________________________________________________
-[ 4185] By: jhi on 1999/09/17 20:46:41
- Log: Re-apply applicable parts of #3993, #3994, and #3995.
- Branch: cfgperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 4184] By: gsar on 1999/09/17 20:26:02
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> lib/unicode/ArabShap.txt lib/unicode/Blocks.txt
- +> lib/unicode/CompExcl.txt lib/unicode/EAWidth.txt
- +> lib/unicode/Index.txt lib/unicode/Jamo-2.txt
- +> lib/unicode/LineBrk.txt lib/unicode/Names.txt
- +> lib/unicode/Props.txt lib/unicode/ReadMe.txt
- +> lib/unicode/SpecCase.txt
- - lib/unicode/arabshp.txt lib/unicode/blocks.txt
- - lib/unicode/index2.txt lib/unicode/jamo2.txt
- - lib/unicode/names2.txt lib/unicode/props2.txt
- - lib/unicode/readme.txt
- !> (integrate 73 files)
-____________________________________________________________________________
-[ 4183] By: jhi on 1999/09/17 20:25:51
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> configure.com ext/ByteLoader/byterun.h
- !> ext/DynaLoader/DynaLoader_pm.PL lib/ExtUtils/MM_VMS.pm
- !> lib/File/Spec/VMS.pm pod/perlhist.pod t/io/open.t
- !> vms/descrip_mms.template vms/gen_shrfls.pl vms/perly_c.vms
- !> vms/perly_h.vms vms/subconfigure.com vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 4182] By: gsar on 1999/09/17 20:16:28
- Log: integrate vmsperl contents into mainline (where VMS files conflicted,
- vmsperl contents have prevailed)
- Branch: perl
- !> configure.com ext/ByteLoader/byterun.h
- !> ext/DynaLoader/DynaLoader_pm.PL lib/ExtUtils/MM_VMS.pm
- !> lib/File/Spec/VMS.pm t/io/open.t vms/descrip_mms.template
- !> vms/gen_shrfls.pl vms/perly_c.vms vms/perly_h.vms
- !> vms/subconfigure.com vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 4181] By: jhi on 1999/09/17 20:12:37
- Log: From: Michael G Schwern <schwern@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_60 lib/Exporter/Heavy.pm] export_to_level()
- Date: Thu, 19 Aug 1999 21:30:01 -0400
- Message-ID: <19990819213001.A22512@athens.aocn.com>
- Branch: cfgperl
- ! lib/Exporter/Heavy.pm
-____________________________________________________________________________
-[ 4180] By: gsar on 1999/09/17 20:11:00
- Log: perlhist additions
- Branch: perl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 4179] By: jhi on 1999/09/17 20:08:00
- Log: The change #4176 should've undone only the test, not the code patch.
- Branch: cfgperl
- ! doio.c
-____________________________________________________________________________
-[ 4178] By: jhi on 1999/09/17 20:06:08
- Log: From: Ian Phillipps <ian@dial.pipex.com>
- To: Hans GINZEL <hgin2088@mail.kolej.mff.cuni.cz>, perl5-porters@perl.org
- Subject: [PATCH 5.005_59] Re: [ID 19990820.007] Small typo in perlsyn.pod
- Date: Sat, 21 Aug 1999 12:36:12 +0100
- Message-ID: <19990821123612.A9955@homer.diplex.co.uk>
- Branch: cfgperl
- ! pod/perlsyn.pod
-____________________________________________________________________________
-[ 4177] By: jhi on 1999/09/17 20:00:19
- Log: More descriptive names for operators.
-
- From: Michael G Schwern <schwern@pobox.com>
- To: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Cc: perl5-porters@perl.org
- Subject: Re: [ID 19990817.009] [BUG 5.005_60 & 5.005_03] == reported as eq in
- Date: Tue, 17 Aug 1999 18:35:45 -0400
- Message-ID: <19990817183545.A23073@toldyouso.com>
-
- From: Michael G Schwern <schwern@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_60 opcode.pl and friends] Improved opcode descriptions
- Date: Wed, 18 Aug 1999 03:53:38 -0400
- Message-ID: <19990818035337.A31505@athens.aocn.com>
- Branch: cfgperl
- ! opcode.h opcode.pl pp.sym pp_proto.h sv.c t/op/misc.t
- ! t/pragma/warn/op t/pragma/warn/sv
-____________________________________________________________________________
-[ 4176] By: jhi on 1999/09/17 18:19:18
- Log: Take away the infamous io/dup.t #7.
- It seems there simply is no way to portably
- "flush" an input file handle.
- Branch: cfgperl
- ! doio.c t/io/dup.t
-____________________________________________________________________________
-[ 4175] By: jhi on 1999/09/17 14:45:08
- Log: From: Barrie Slaymaker <barries@slaysys.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_61] Benchmark: screwed patch format, try this instead
- Date: Fri, 17 Sep 1999 11:16:48 -0400
- Message-Id: <199909171516.LAA30887@jester.slaysys.com>
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 4174] By: jhi on 1999/09/17 14:07:16
- Log: UNICOS does support large files but doesn't support sparse files
- so we cannot easily test for large file support.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4173] By: jhi on 1999/09/17 14:03:44
- Log: UNICOS has sloppy division/modulo for floating point numbers.
- Branch: cfgperl
- ! t/op/arith.t
-____________________________________________________________________________
-[ 4172] By: jhi on 1999/09/17 13:47:49
- Log: Portable blocksize (replaces #4171).
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4171] By: jhi on 1999/09/17 13:08:54
- Log: (replaced by #4172)
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4170] By: jhi on 1999/09/17 12:59:11
- Log: Detypo #4169.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4169] By: jhi on 1999/09/17 12:16:34
- Log: Diagnose possible quota limits.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4168] By: jhi on 1999/09/17 12:10:43
- Log: UNICOS doesn't have getpgid(). Or, at least 9.0.1ai
- doesn't have one that wouldn't cause SIGSYS. UNICOS
- does have getpgrp(void) so Perl getpgrp() is happy.
- Branch: cfgperl
- ! hints/unicos.sh
-____________________________________________________________________________
-[ 4167] By: jhi on 1999/09/17 11:49:30
- Log: Filesystem quotas may stop you from using large files.
- Branch: cfgperl
- ! pod/perldelta.pod t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4166] By: jhi on 1999/09/17 11:36:01
- Log: Too strict pattern for parsing group lists.
- Branch: cfgperl
- ! t/op/groups.t
-____________________________________________________________________________
-[ 4165] By: jhi on 1999/09/17 09:06:18
- Log: Configure maintenance. It's sigaction.sa_flags
- and the Glossary regen'ed.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
- Branch: metaconfig
- ! U/compline/d_sigaction.U
-____________________________________________________________________________
-[ 4164] By: jhi on 1999/09/15 06:57:51
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> jpl/JNI/Closer.java jpl/JNI/JNIConfig jpl/JNI/JNIConfig.Win32
- +> jpl/JNI/JNIConfig.kaffe jpl/JNI/JNIConfig.noembed
- +> jpl/JNI/JNIConfig.standard jpl/JNI/typemap.gcc
- +> jpl/JNI/typemap.win32 jpl/SETVARS.PL
- !> Changes MANIFEST embed.h embed.pl jpl/JNI/JNI.pm
- !> jpl/JNI/JNI.xs jpl/JNI/Makefile.PL jpl/JNI/test.pl
- !> jpl/JNI/typemap jpl/JPL/Makefile.PL
- !> jpl/PerlInterpreter/Makefile.PL
- !> jpl/PerlInterpreter/PerlInterpreter.c
- !> jpl/PerlInterpreter/PerlInterpreter.h jpl/README
- !> jpl/Sample/Makefile.PL jpl/install-jpl
- !> lib/File/Spec/Functions.pm pod/perlhist.pod regexec.c
- !> t/op/pat.t
-____________________________________________________________________________
-[ 4163] By: gsar on 1999/09/15 05:17:27
- Log: add :ALL export tag (from Chris Nandor <pudge@pobox.com>)
- Branch: perl
- ! lib/File/Spec/Functions.pm
-____________________________________________________________________________
-[ 4162] By: gsar on 1999/09/15 05:09:14
- Log: addendum to change#4136 (from Robin Barker <rmb1@cise.npl.co.uk>)
- Branch: perl
- ! Changes embed.h embed.pl
-____________________________________________________________________________
-[ 4161] By: gsar on 1999/09/15 04:08:25
- Log: missing perlhist dates from Jeff Okamoto
- Branch: perl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 4160] By: gsar on 1999/09/15 03:13:08
- Log: jpl tweak
- Branch: perl
- ! MANIFEST jpl/JNI/Makefile.PL
-____________________________________________________________________________
-[ 4159] By: gsar on 1999/09/15 02:57:08
- Log: update to JPL snapshot v09141999, with minor tweaks (from Brian
- Jepson <bjepson@home.com>)
- Branch: perl
- + jpl/JNI/Closer.java jpl/JNI/JNIConfig jpl/JNI/JNIConfig.Win32
- + jpl/JNI/JNIConfig.kaffe jpl/JNI/JNIConfig.noembed
- + jpl/JNI/JNIConfig.standard jpl/JNI/typemap.gcc
- + jpl/JNI/typemap.win32 jpl/SETVARS.PL
- ! jpl/JNI/JNI.pm jpl/JNI/JNI.xs jpl/JNI/Makefile.PL
- ! jpl/JNI/test.pl jpl/JNI/typemap jpl/JPL/Makefile.PL
- ! jpl/PerlInterpreter/Makefile.PL
- ! jpl/PerlInterpreter/PerlInterpreter.c
- ! jpl/PerlInterpreter/PerlInterpreter.h jpl/README
- ! jpl/Sample/Makefile.PL jpl/install-jpl
-____________________________________________________________________________
-[ 4158] By: gsar on 1999/09/15 01:27:14
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 14 Sep 1999 21:26:15 EDT
- Message-Id: <199909150126.VAA24720@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_58+] Re: [ID 19990914.001] Perl_re_intuit_start() hangs in a loop
- Branch: perl
- ! regexec.c t/op/pat.t
-____________________________________________________________________________
-[ 4157] By: jhi on 1999/09/14 21:18:09
- Log: config.h will define USE_64_BITS if need be.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 4156] By: jhi on 1999/09/14 20:30:00
- Log: Change #4149 necessitates also a small code change.
- Branch: cfgperl
- ! ext/B/defsubs_h.PL
-____________________________________________________________________________
-[ 4155] By: jhi on 1999/09/14 20:15:53
- Log: Update EPOC libdir names.
- Branch: cfgperl
- ! epoc/config.h
-____________________________________________________________________________
-[ 4154] By: jhi on 1999/09/14 20:13:41
- Log: Obsolete epoc/config.h caused #4153 to re-introduce already
- deceased HAS.*DBM.*64 mumblings.
- Branch: cfgperl
- ! Configure config_h.SH epoc/config.h
-____________________________________________________________________________
-[ 4153] By: jhi on 1999/09/14 20:04:53
- Log: Configure nits.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/compline/d_sigaction.U U/threads/i_pthread.U
-____________________________________________________________________________
-[ 4152] By: jhi on 1999/09/14 19:30:22
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> ext/B/defsubs_h.PL t/lib/bigfltpm.t
- - ext/B/defsubs.h.PL t/lib/bigfloatpm.t
- !> INSTALL MANIFEST ext/B/Makefile.PL pod/perldiag.pod
- !> win32/config_sh.PL
-____________________________________________________________________________
-[ 4151] By: jhi on 1999/09/14 10:25:01
- Log: Update Unicode database and recompute the tables.
- Rename the .txt files to be more Unicode 3.0-like.
- Unihan-3.0.txt not included because it is 16 MB.
- syllables.txt is manually maintained.
- See ReadMe.txt for description of the .txt files.
- (not all of them are used yet)
- Branch: cfgperl
- + lib/unicode/ArabShap.txt lib/unicode/Blocks.txt
- + lib/unicode/CompExcl.txt lib/unicode/EAWidth.txt
- + lib/unicode/Index.txt lib/unicode/Jamo-2.txt
- + lib/unicode/LineBrk.txt lib/unicode/Names.txt
- + lib/unicode/Props.txt lib/unicode/ReadMe.txt
- + lib/unicode/SpecCase.txt
- - lib/unicode/arabshp.txt lib/unicode/blocks.txt
- - lib/unicode/index2.txt lib/unicode/jamo2.txt
- - lib/unicode/names2.txt lib/unicode/props2.txt
- - lib/unicode/readme.txt
- ! MANIFEST lib/unicode/ArabLink.pl lib/unicode/ArabLnkGrp.pl
- ! lib/unicode/Bidirectional.pl lib/unicode/Block.pl
- ! lib/unicode/Category.pl lib/unicode/CombiningClass.pl
- ! lib/unicode/Decomposition.pl
- ! lib/unicode/In/ArabicPresentationForms-B.pl
- ! lib/unicode/In/Specials.pl lib/unicode/In/Tibetan.pl
- ! lib/unicode/Is/Alnum.pl lib/unicode/Is/Alpha.pl
- ! lib/unicode/Is/BidiCS.pl lib/unicode/Is/BidiL.pl
- ! lib/unicode/Is/BidiON.pl lib/unicode/Is/BidiWS.pl
- ! lib/unicode/Is/DCcompat.pl lib/unicode/Is/DecoCanon.pl
- ! lib/unicode/Is/DecoCompat.pl lib/unicode/Is/L.pl
- ! lib/unicode/Is/Ll.pl lib/unicode/Is/Lo.pl
- ! lib/unicode/Is/Lower.pl lib/unicode/Is/Lu.pl
- ! lib/unicode/Is/Pd.pl lib/unicode/Is/Po.pl lib/unicode/Is/S.pl
- ! lib/unicode/Is/Sm.pl lib/unicode/Is/So.pl
- ! lib/unicode/Is/Upper.pl lib/unicode/Is/Word.pl
- ! lib/unicode/JamoShort.pl lib/unicode/UnicodeData-Latest.txt
- ! lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 4150] By: gsar on 1999/09/14 09:31:57
- Log: INSTALL tweak
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 4149] By: gsar on 1999/09/14 09:00:45
- Log: change some filenames to be 8.3-friendly
- Branch: perl
- +> ext/B/defsubs_h.PL t/lib/bigfltpm.t
- - ext/B/defsubs.h.PL t/lib/bigfloatpm.t
- ! MANIFEST ext/B/Makefile.PL pod/perldiag.pod
-____________________________________________________________________________
-[ 4148] By: gsar on 1999/09/14 08:35:00
- Log: win32 config tweak (suggested by Greg Chapman <glc@well.com>)
- Branch: perl
- ! win32/config_sh.PL
-____________________________________________________________________________
-[ 4147] By: jhi on 1999/09/14 08:07:49
- Log: Not that UVSIZE normally differs that much from IVSIZE...
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4146] By: jhi on 1999/09/14 08:04:40
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes ext/DB_File/DB_File.xs
-____________________________________________________________________________
-[ 4145] By: jhi on 1999/09/14 07:10:02
- Log: I_PTHREAD was PTHREADEAD.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/threads/i_pthread.U
-____________________________________________________________________________
-[ 4144] By: gsar on 1999/09/14 06:46:47
- Log: change#4113 was missing DB_File.xs changes
- Branch: perl
- ! ext/DB_File/DB_File.xs
-____________________________________________________________________________
-[ 4143] By: jhi on 1999/09/13 20:16:20
- Log: Small doc and whitespace edits.
- Branch: cfgperl
- ! ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_beos.xs
- ! ext/DynaLoader/dl_cygwin.xs ext/DynaLoader/dl_dld.xs
- ! ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_mpeix.xs
- ! ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_rhapsody.xs
- ! ext/DynaLoader/dl_vmesa.xs ext/DynaLoader/dl_vms.xs
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4142] By: gsar on 1999/09/13 19:32:31
- Log: integrate cfgperl contents into mainline, update Changes
- Branch: perl
- +> ext/DB_File/version.c
- ! Changes
- !> (integrate 44 files)
-____________________________________________________________________________
-[ 4141] By: jhi on 1999/09/13 16:16:56
- Log: Scan for <pthread.h> always.
- Branch: cfgperl
- ! Configure config_h.SH perl.h
- Branch: metaconfig
- ! U/threads/i_pthread.U
-____________________________________________________________________________
-[ 4140] By: jhi on 1999/09/13 16:00:08
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 27 files)
-____________________________________________________________________________
-[ 4139] By: jhi on 1999/09/13 15:35:18
- Log: Add -A option to Configure to diddle with variables
- after the hints file has been applied.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/Oldconfig.U U/modified/Options.U
-____________________________________________________________________________
-[ 4138] By: jhi on 1999/09/13 13:42:56
- Log: Change #4136 edited DynaLoader.xs which is kind of fruitless.
- Branch: cfgperl
- ! ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_beos.xs
- ! ext/DynaLoader/dl_cygwin.xs ext/DynaLoader/dl_dld.xs
- ! ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_mpeix.xs
- ! ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_rhapsody.xs
- ! ext/DynaLoader/dl_vmesa.xs ext/DynaLoader/dl_vms.xs
-____________________________________________________________________________
-[ 4137] By: jhi on 1999/09/13 13:25:31
- Log: Applying change #4136 manually introduced patch residue.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4136] By: jhi on 1999/09/13 13:23:04
- Log: Replace change #4100 with
- From: Robin Barker <rmb1@cise.npl.co.uk>
- To: gsar@activestate.com
- Cc: perl5-porters@perl.org
- Subject: Re: [ID 19990907.004] [PATCH perl5.005_61] compiler warnings with -Duse64bits
- Date: Mon, 13 Sep 1999 14:15:11 +0100 (BST)
- Message-Id: <199909131315.OAA24012@tempest.npl.co.uk>
- Branch: cfgperl
- ! doio.c dump.c ext/B/B.xs ext/B/typemap
- ! ext/ByteLoader/bytecode.h ext/Devel/DProf/DProf.xs
- ! ext/DynaLoader/dl_dlopen.xs ext/ODBM_File/ODBM_File.xs
- ! ext/POSIX/POSIX.xs lib/ExtUtils/typemap malloc.c perl.h pp.c
- ! pp_ctl.c pp_hot.c pp_sys.c sv.c
-____________________________________________________________________________
-[ 4135] By: jhi on 1999/09/13 10:22:31
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_61] MakeMaker supports uninstalled Perls
- Date: Sat, 11 Sep 1999 05:31:03 -0400 (EDT)
- Message-Id: <199909110931.FAA11036@monk.mps.ohio-state.edu>
-
- From: andreas.koenig@anima.de (Andreas J. Koenig)
- To: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Cc: perl5-porters@perl.org (Mailing list Perl5)
- Subject: Re: [PATCH 5.005_61] MakeMaker supports uninstalled Perls
- Date: 11 Sep 1999 15:36:26 +0200
- Message-ID: <sfc906dr2n9.fsf@hohenstaufen.in-berlin.de>
- Branch: cfgperl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 4134] By: jhi on 1999/09/13 10:20:14
- Log: From: Tom Phoenix <rootbeer@redcat.com>
- To: Perl Porters Mailing List <perl5-porters@perl.org>
- Subject: [DOCPATCH] Server errors and perldiag
- Date: Fri, 10 Sep 1999 16:45:02 -0700 (PDT)
- Message-ID: <Pine.GSO.4.10.9909101639490.16999-100000@user2.teleport.com>
- Branch: cfgperl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 4133] By: gsar on 1999/09/13 03:25:43
- Log: avoid assertion failure on C<@a'>
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 4132] By: gsar on 1999/09/13 03:03:57
- Log: add -DPERL_Y2KWARN build option that will generate additional
- warnings on "19$yy" etc (reworked a patch suggested by
- Ulrich Pfeifer <upf@de.uu.net>)
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod pod/perllexwarn.pod
- ! pp_hot.c sv.c t/pragma/warn/pp_hot t/pragma/warn/sv
-____________________________________________________________________________
-[ 4131] By: gsar on 1999/09/12 22:06:25
- Log: fix DATA leaks; reword documentation about the DATA filehandle
- Branch: perl
- ! ext/Opcode/Safe.pm lib/Pod/Functions.pm pod/perldata.pod
-____________________________________________________________________________
-[ 4130] By: gsar on 1999/09/12 20:08:56
- Log: make sprintf("%g",...) threadsafe; only taint its result iff the
- formatted result looks nonstandard
- Branch: perl
- ! embed.pl embedvar.h intrpvar.h objXSUB.h perl.c perlapi.c
- ! pod/perlfunc.pod pod/perlguts.pod proto.h sv.c
- ! t/pragma/locale.t thrdvar.h
-____________________________________________________________________________
-[ 4129] By: gsar on 1999/09/12 17:04:11
- Log: From: Doug MacEachern <dougm@cp.net>
- Date: Sun, 25 Jul 1999 15:49:00 -0700 (PDT)
- Message-ID: <Pine.LNX.4.10.9907251538380.373-100000@mojo.eng.cp.net>
- Subject: [PATCH 5.005_57] B::clearsym
- Branch: perl
- ! ext/B/B.pm ext/B/B/Bblock.pm ext/B/B/Debug.pm ext/B/B/Terse.pm
-____________________________________________________________________________
-[ 4128] By: gsar on 1999/09/12 16:59:12
- Log: better debugger help output (from Ilya Zakharevich)
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 4127] By: jhi on 1999/09/11 20:50:37
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> pod/perlcompile.pod t/lib/gol-basic.t t/lib/gol-compat.t
- +> t/lib/gol-linkage.t
- !> (integrate 43 files)
-____________________________________________________________________________
-[ 4126] By: nick on 1999/09/10 20:44:22
- Log: Get resolve -at mainline
- Branch: utfperl
- +> (branch 297 files)
- - README.cygwin32 XSlock.h bytecode.h byterun.c byterun.h
- - cygwin32/cw32imp.h cygwin32/gcc2 cygwin32/ld2 cygwin32/perlgcc
- - cygwin32/perlld ext/B/byteperl.c ext/DynaLoader/dl_cygwin32.xs
- - hints/cygwin32.sh interp.sym myconfig objpp.h perl_exp.SH
- - t/pragma/warn-1global t/pragma/warning.t thread.sym
- - win32/GenCAPI.pl win32/TEST win32/autosplit.pl
- - win32/bin/network.pl win32/bin/webget.pl win32/bin/www.pl
- - win32/genxsdef.pl win32/makedef.pl win32/makemain.pl
- - win32/makeperldef.pl win32/perlhost.h
- !> (integrate 847 files)
-____________________________________________________________________________
-[ 4125] By: gsar on 1999/09/10 19:22:14
- Log: s/dXS_TARGET/dXSTARG/ in change#4044 (to match dARGS vs dXSARGS
- etc.)
- Branch: perl
- ! XSUB.h pp.h
-____________________________________________________________________________
-[ 4124] By: gsar on 1999/09/10 19:14:35
- Log: rewrote substantive parts of patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 27 Aug 1999 19:02:18 -0400
- Message-ID: <19990827190218.A19561@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_58] REx documentation
- Branch: perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 4123] By: gsar on 1999/09/10 18:21:53
- Log: note about AVf_*
- Branch: perl
- ! av.h
-____________________________________________________________________________
-[ 4122] By: gsar on 1999/09/10 17:55:42
- Log: allow 'text' in L<text|A::B/"C"> (from Martin Lichtin
- <lichtin@bivio.com>)
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 4121] By: gsar on 1999/09/10 17:49:35
- Log: dos-djgpp update (from Laszlo Molnar <laszlo.molnar@eth.ericsson.se>)
- Branch: perl
- ! AUTHORS Changes README.dos djgpp/config.over
- ! djgpp/configure.bat djgpp/djgpp.c djgpp/djgppsed.sh dosish.h
- ! lib/ExtUtils/MM_Unix.pm pod/pod2usage.PL pod/podchecker.PL
- ! pod/podselect.PL sv.h t/io/openpid.t util.c
-____________________________________________________________________________
-[ 4120] By: gsar on 1999/09/10 12:25:01
- Log: add perlcompile.pod (edited content from Nathan Torkington
- <gnat@frii.com> and others)
- Branch: perl
- + pod/perlcompile.pod
- ! MANIFEST pod/Makefile pod/buildtoc pod/perl.pod pod/roffitall
-____________________________________________________________________________
-[ 4119] By: gsar on 1999/09/10 11:05:13
- Log: avoid leaking static local_patches unless patchlevel.h is
- explicitly included
- Branch: perl
- ! patchlevel.h perl.c
-____________________________________________________________________________
-[ 4118] By: gsar on 1999/09/10 10:44:54
- Log: upgrade to Getopt::Long v2.20 (from Johan Vromans
- <jvromans@squirrel.nl>)
- Branch: perl
- + t/lib/gol-basic.t t/lib/gol-compat.t t/lib/gol-linkage.t
- ! Changes MANIFEST lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 4116] By: jhi on 1999/09/09 15:56:52
- Log: perldeltify change #4115.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4115] By: jhi on 1999/09/09 15:48:56
- Log: From: "John L. Allen" <allen@grumman.com>
- To: perl5-porters@perl.org
- Subject: [ID 19990901.003] Time::Local should not croak on "out-of-range" days
- Date: Wed, 1 Sep 1999 13:33:39 -0400 (EDT)
- Message-Id: <199909011733.NAA17356@gateway.grumman.com>
- Branch: cfgperl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 4114] By: jhi on 1999/09/09 15:42:30
- Log: From: "Daniel S. Lewart" <lewart@www.cvm.uiuc.edu>
- To: perl5-porters@perl.org
- Subject: [ID 19990909.003] MAXINT redefined warning on HP-UX 10.20
- Date: Thu, 9 Sep 1999 10:33:37 -0500 (CDT)
- Message-Id: <199909091533.KAA01242@www.cvm.uiuc.edu>
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 4113] By: jhi on 1999/09/09 10:17:45
- Log: From: paul.marquess@bt.com
- To: gsar@ActiveState.com
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.005_61] DB_File 1.71
- Date: Thu, 9 Sep 1999 11:20:13 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB202D49BBE@mbtlipnt02.btlabs.bt.co.uk>
- Branch: cfgperl
- + ext/DB_File/version.c
- ! MANIFEST ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/Makefile.PL ext/DB_File/dbinfo ext/DB_File/typemap
- ! t/lib/db-btree.t
-____________________________________________________________________________
-[ 4112] By: jhi on 1999/09/09 09:05:32
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_58] Fix interaction of (?p{}) and (?>)
- Date: Thu, 9 Sep 1999 04:40:11 -0400 (EDT)
- Message-Id: <199909090840.EAA26471@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! regexec.c t/op/pat.t
-____________________________________________________________________________
-[ 4110] By: jhi on 1999/09/09 07:29:17
- Log: Tidy up 64-bit situation in perldelta.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 4109] By: jhi on 1999/09/09 07:26:53
- Log: Clear up PL_regcc issues.
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_60] Another regexec.c unobfuscation
- Date: Thu, 9 Sep 1999 02:49:49 -0400 (EDT)
- Message-Id: <199909090649.CAA26119@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! regexec.c
-____________________________________________________________________________
-[ 4108] By: gsar on 1999/09/08 20:52:51
- Log: avoid ass_u_ming uppercase types are not user objects (spotted
- by Kurt Starsinic)
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm
-____________________________________________________________________________
-[ 4107] By: gsar on 1999/09/08 20:35:18
- Log: From: akim@epita.fr (DEMAILLE Akim)
- Date: Wed, 8 Sep 1999 18:18:44 +0200 (CEST)
- Message-Id: <m11OkQm-003A4IC@beyrouth.lrde.epita.fr>
- Subject: [ID 19990908.014] s2p does not quote @
- Branch: perl
- ! x2p/s2p.PL
-____________________________________________________________________________
-[ 4106] By: gsar on 1999/09/08 20:25:12
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 4105] By: jhi on 1999/09/08 09:02:37
- Log: Minor touches at the [:class:] description.
- Branch: cfgperl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 4104] By: jhi on 1999/09/08 08:57:58
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_58] Fix debugging output for REx
- Date: Wed, 8 Sep 1999 05:02:02 -0400
- Message-ID: <19990908050201.A17682@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! regcomp.c
-____________________________________________________________________________
-[ 4103] By: gsar on 1999/09/08 00:53:50
- Log: fix memory leak in C<sub f { split ' ', "a b" } f() while 1>
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 4102] By: gsar on 1999/09/08 00:52:50
- Log: fix memory leak in C<sub f { @_ = 1 } f() while 1>
- Branch: perl
- ! cop.h pp_hot.c
-____________________________________________________________________________
-[ 4101] By: gsar on 1999/09/07 17:25:07
- Log: various fixups for windows
- Branch: perl
- ! embed.h embed.pl objXSUB.h op.c perlapi.c proto.h
- ! win32/Makefile win32/makefile.mk xsutils.c
-____________________________________________________________________________
-[ 4100] By: jhi on 1999/09/07 12:49:15
- Log: Fix pointer casts.
-
- From: Robin Barker <rmb1@cise.npl.co.uk>
- To: perl5-porters@perl.org
- Subject: [ID 19990907.004] [PATCH perl5.005_61] compiler warnings with
- -Duse64bits
- Date: Tue, 7 Sep 1999 12:30:18 +0100 (BST)
- Message-Id: <199909071130.MAA11435@tempest.npl.co.uk>
- Branch: cfgperl
- ! doio.c dump.c ext/B/B.xs ext/B/typemap
- ! ext/ByteLoader/bytecode.h ext/Devel/DProf/DProf.xs
- ! ext/DynaLoader/dl_dlopen.xs ext/ODBM_File/ODBM_File.xs
- ! ext/POSIX/POSIX.xs lib/ExtUtils/typemap malloc.c perl.h pp.c
- ! pp_ctl.c pp_hot.c pp_sys.c sv.c
-____________________________________________________________________________
-[ 4099] By: jhi on 1999/09/07 10:29:04
- Log: Add sig/pid/uid size and sign probes.
- Branch: metaconfig
- + U/typedefs/gidsign.U U/typedefs/gidsize.U U/typedefs/pidsign.U
- + U/typedefs/pidsize.U U/typedefs/uidsign.U U/typedefs/uidsize.U
-____________________________________________________________________________
-[ 4098] By: jhi on 1999/09/07 10:27:06
- Log: Band-aid until we've got %{Uid_t} or something similar
- for sv_catpvfn().
- Branch: cfgperl
- ! taint.c
-____________________________________________________________________________
-[ 4097] By: jhi on 1999/09/07 09:41:23
- Log: Fix a printf thinko: now quads must have the ll L q prefix.
- (in other words, a bare %d is an int/unsigned)
- Branch: cfgperl
- ! pp_sys.c sv.c t/op/64bit.t
-____________________________________________________________________________
-[ 4096] By: jhi on 1999/09/07 07:36:17
- Log: HP-UX 10.20 and gcc 2.8.1 break UINT32_MAX.
-
- From: "Daniel S. Lewart" <lewart@www.cvm.uiuc.edu>
- To: perl5-porters@perl.org
- Subject: [ID 19990906.007] Not OK: perl 5.00561 on PA-RISC1.1 10.20
- Date: Mon, 6 Sep 1999 21:18:12 -0500 (CDT)
- Message-Id: <199909070218.VAA29232@www.cvm.uiuc.edu>
- Branch: cfgperl
- ! hints/hpux.sh perl.h
-____________________________________________________________________________
-[ 4095] By: gsar on 1999/09/06 20:47:02
- Log: applied suggested patch with suitable test to detect MSVC
- From: "Vishal Bhatia" <vishalb@my-deja.com>
- Date: Wed, 11 Aug 1999 01:43:28 -0700
- Message-ID: <GFCJELIOGEENAAAA@my-deja.com>
- Subject: compiler on win32
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 4094] By: jhi on 1999/09/06 20:34:44
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> ext/B/B/Bytecode.pm lib/Test/Harness.pm t/TEST t/UTEST
- !> t/harness t/pragma/sub_lval.t utils/Makefile utils/perlcc.PL
-____________________________________________________________________________
-[ 4093] By: jhi on 1999/09/06 20:33:43
- Log: Fix UV_SIZEOF to UVSIZE; change the overflow tests
- so that they overflow also on 64-bit platforms.
- Branch: cfgperl
- ! t/pragma/warn/toke t/pragma/warn/util toke.c util.c
-____________________________________________________________________________
-[ 4092] By: gsar on 1999/09/06 20:16:58
- Log: support bytecode and C backends in perlcc (patch suggested
- by Tom Hughes <tom@compton.au>); s/-opt/-noopt/ and make the
- C backend the default; describe new switches in pod; introduce
- PERLCC_OPTS and s/COMPILE_TIMEOUT/PERLCC_TIMEOUT/;
- s/COMPILE_TEST/HARNESS_COMPILE_TEST/; document these %ENV
- entries
- Branch: perl
- ! ext/B/B/Bytecode.pm lib/Test/Harness.pm t/TEST t/UTEST
- ! t/harness utils/Makefile utils/perlcc.PL
-____________________________________________________________________________
-[ 4091] By: jhi on 1999/09/06 19:10:41
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/pragma/sub_lval.t
- !> (integrate 52 files)
-____________________________________________________________________________
-[ 4090] By: gsar on 1999/09/06 19:09:06
- Log: propagate changed error text
- Branch: perl
- ! t/pragma/sub_lval.t
-____________________________________________________________________________
-[ 4089] By: gsar on 1999/09/06 18:54:43
- Log: sprintf doc tweak (from Ian Phillipps <ian@dial.pipex.com>)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 4088] By: gsar on 1999/09/06 18:52:10
- Log: From: paul.marquess@bt.com
- Date: Sun, 5 Sep 1999 15:11:08 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB202D49BAB@mbtlipnt02.btlabs.bt.co.uk>
- Subject: [PATCH 5.005_61] Another patch for Lexical Warnings
- Branch: perl
- ! pp_sys.c t/pragma/warn/doio t/pragma/warn/op
- ! t/pragma/warn/pp_hot t/pragma/warn/pp_sys
- ! t/pragma/warn/regcomp t/pragma/warn/sv t/pragma/warn/toke
- ! t/pragma/warn/universal t/pragma/warn/utf8 t/pragma/warn/util
- ! toke.c
-____________________________________________________________________________
-[ 4087] By: gsar on 1999/09/06 18:06:06
- Log: change#3612 is buggy when quotemeta argument matches target
- (hope this is the last of the optimized-OP_SASSIGN bugs)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 5 Sep 1999 06:07:42 -0400 (EDT)
- Message-Id: <199909051007.GAA06423@monk.mps.ohio-state.edu>
- Subject: Re: [BUG: quotemeta]
- Branch: perl
- ! Changes op.c t/op/lex_assign.t
-____________________________________________________________________________
-[ 4086] By: gsar on 1999/09/06 17:57:52
- Log: misc tweaks
- Branch: perl
- ! bytecode.pl ext/ByteLoader/byterun.h pod/perlsyn.pod toke.c
-____________________________________________________________________________
-[ 4085] By: gsar on 1999/09/06 03:54:23
- Log: applied patch suggested by Hans Mulder to fix problems on
- OPENSTEP-Mach; be more careful about PERL_POLLUTE_MALLOC
- when they ask for bincompat (platforms that used to default
- to EMBEDMYMALLOC continue to do so); disable warnings.t#192
- (appears unsalvageable on some platforms)
- Branch: perl
- ! embed.h embed.pl handy.h perl.h pp_sys.c t/pragma/warn/pp_hot
-____________________________________________________________________________
-[ 4084] By: bailey on 1999/09/06 02:39:11
- Log: Integrate mainline 5.05_61
- Branch: vmsperl
- +> (branch 32 files)
- - lib/unicode/EthiopicSyllables.txt
- - lib/unicode/MakeEthiopicSyllables.PL t/pragma/warning.t
- - warning.pl
- ! vms/descrip_mms.template vms/gen_shrfls.pl vms/perly_c.vms
- ! vms/perly_h.vms vms/vms.c
- !> (integrate 346 files)
-____________________________________________________________________________
-[ 4083] By: gsar on 1999/09/06 00:10:40
- Log: optional warning on join(/foo/...) (reworked suggested patch
- by Mark-Jason Dominus <mjd@plover.com>)
- Branch: perl
- ! embed.h objXSUB.h op.c opcode.h opcode.pl perlapi.c
- ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod pp.sym
- ! pp_proto.h t/pragma/warn/op
-____________________________________________________________________________
-[ 4082] By: gsar on 1999/09/05 22:28:57
- Log: fix data loss when more than one block is read from SDBM
- *.dir file (suggested by Uwe Ohse <uwe@ohse.de>)
- Branch: perl
- ! ext/SDBM_File/sdbm/sdbm.c
-____________________________________________________________________________
-[ 4081] By: gsar on 1999/09/05 22:07:18
- Log: initial implementation of lvalue subroutines (slightly fixed
- version of patch suggested by Ilya Zakharevich, which in turn
- is based on the one suggested by Tuomas J. Lukka <lukka@iki.fi>)
- Branch: perl
- + t/pragma/sub_lval.t
- ! MANIFEST cop.h cv.h dump.c embed.h ext/Opcode/Opcode.pm
- ! ext/attrs/attrs.pm ext/attrs/attrs.xs global.sym objXSUB.h
- ! op.c op.h opcode.h opcode.pl opnames.h perlapi.c
- ! pod/perldiag.pod pod/perlsub.pod pp.c pp.sym pp_hot.c
- ! pp_proto.h proto.h t/pragma/warn/pp_ctl
-____________________________________________________________________________
-[ 4080] By: jhi on 1999/09/05 22:02:18
- Log: Undo #4055 (related to #4079).
- Branch: cfgperl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 4079] By: jhi on 1999/09/05 21:30:54
- Log: Time is not yet ripe.
- Branch: cfgperl
- ! pod/perldelta.pod pod/perlop.pod pp.c t/op/64bit.t t/op/misc.t
-____________________________________________________________________________
-[ 4078] By: gsar on 1999/09/05 18:17:32
- Log: modified suggested patch to handle cross-refs and qr// objects
- correctly; unfollowed refs are represented as simple string
- value, not just the bare type; $VERSION stays the same until
- it is ready for prime time (avoids CPAN confustication)
- From: John Nolan <jpnolan@Op.Net>
- Date: Wed, 04 Aug 1999 20:21:10 EDT
- Message-Id: <199908050021.UAA09693@monet.op.net>
- Subject: [ID 19990804.006] [PATCH]5.005_60 (Data::Dumper) - implements Maxdepth setting
- Branch: perl
- ! Changes ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm
- ! ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Todo t/lib/dumper.t
-____________________________________________________________________________
-[ 4077] By: jhi on 1999/09/04 21:54:42
- Log: timesum() wasn't @EXPORTed as promised by the documentation.
- Bug reported by Alex Efros <powerman@inart.kharkov.com>.
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 4076] By: gsar on 1999/09/04 20:21:59
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> lib/attributes.pm lib/warnings.pm t/lib/attrs.t t/op/attrs.t
- +> t/pragma/warn/7fatal t/pragma/warn/8signal t/pragma/warnings.t
- +> warnings.h warnings.pl xsutils.c
- - lib/warning.pm t/pragma/warning.t warning.h warning.pl
- !> (integrate 109 files)
-____________________________________________________________________________
-[ 4075] By: jhi on 1999/09/04 18:04:47
- Log: use integer on the problematic subtest.
- Branch: cfgperl
- ! t/op/misc.t
-____________________________________________________________________________
-[ 4074] By: jhi on 1999/09/04 17:57:40
- Log: Warn about numconvert.t in case somebody
- wants to make sv_2pv more 64-bit aware.
- Branch: cfgperl
- ! sv.c
-____________________________________________________________________________
-[ 4073] By: jhi on 1999/09/04 17:54:51
- Log: Comment upgrading: the quad situation isn't quite as
- bad as it used to be.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4072] By: jhi on 1999/09/04 15:35:37
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> win32/win32.c
-____________________________________________________________________________
-[ 4071] By: jhi on 1999/09/04 15:28:11
- Log: Fix LFS with -Duseperlio in Solaris. Reported in
-
- From: Robin Barker <rmb1@cise.npl.co.uk>
- To: perl5-porters@perl.org
- Subject: [ID 19990823.009] [PATCH perl5.005_61] typo in perl.h
- Date: Mon, 23 Aug 1999 16:41:11 +0100 (BST)
- Message-Id: <199908231541.QAA10043@tempest.npl.co.uk>
-
- and later (in private email) found to be dependent
- on useperlio.
-
- Mental note: the cpp magic done in perlsdio.h (and assumedly
- also in perlsfio.h) may cause trouble later with lfs because
- both the perlio scheme by Perl and the lfs support by vendors
- like to play cpp games to map the stdio namespace back and forth.
- The problem fixed here (fseek vs fseeko, ftell vs ftello) may be
- just the beginning.
- Branch: cfgperl
- ! perlio.c
-____________________________________________________________________________
-[ 4070] By: jhi on 1999/09/04 13:12:14
- Log: Enable 64-bit clean bit ops.
- (Disables the t/op/misc.t substest 3 in 64-bit platforms.)
- Branch: cfgperl
- ! pod/perldelta.pod pod/perlop.pod pp.c pp_hot.c t/op/64bit.t
- ! t/op/misc.t
-____________________________________________________________________________
-[ 4069] By: jhi on 1999/09/03 21:17:30
- Log: Turn on USE_64_BIT_OFFSETS implicitly.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4068] By: jhi on 1999/09/03 08:19:59
- Log: Fix from Spider for the sub attributes (there was an undocumented
- dependency between force_word() and skipspace()).
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 4067] By: jhi on 1999/09/01 23:17:06
- Log: From: John Tobey <spam@john-edwin-tobey.org>
- To: ilya@math.ohio-state.edu
- CC: perl5-porters@perl.org
- Subject: Re: [PATCH 5.005_60] distclean forgot two
- Date: Mon, 23 Aug 1999 02:10:11 -0400 (EDT)
- Message-Id: <m11InJ5-000FPCC@feynman.localnet>
- Branch: cfgperl
- ! t/lib/dprof.t
-____________________________________________________________________________
-[ 4066] By: jhi on 1999/09/01 23:14:50
- Log: From: "Fifer, Eric" <EFifer@sanwaint.com>
- To: perl5-porters@perl.org
- Subject: [ID 19990821.001] [PATCH] perl5.005_60 cygwin port
- Date: Fri, 20 Aug 1999 15:37:27 +0100
- Message-Id: <8A160D637356D311BC4300600849EC8122E217@POST>
- Branch: cfgperl
- ! cygwin/Makefile.SHs ext/ByteLoader/byterun.h
- ! ext/SDBM_File/sdbm/sdbm.c hints/cygwin.sh perl.h pp_sys.c
- ! t/io/fs.t t/io/tell.t t/lib/anydbm.t t/op/stat.t
-____________________________________________________________________________
-[ 4065] By: jhi on 1999/09/01 22:06:43
- Log: From: Dominic Dunlop <domo@vo.lu>
- To: perl5-porters@perl.org
- Subject: [ID 19990819.001] Not OK: perl 5.00560 on powerpc-machten 4.1.1
- (UNINSTALLED) [PATCH]
- Date: Thu, 19 Aug 1999 09:48:03 +0200
- Message-Id: <v03110709b3e165b51dda@[212.24.192.132]>
-
- The PERL_POLLUTE_MALLOC part had to be manually applied.
- Branch: cfgperl
- ! hints/machten.sh perl.h
-____________________________________________________________________________
-[ 4064] By: jhi on 1999/09/01 13:56:14
- Log: From: Martin Lichtin <lichtin@bivio.com>
- To: jhi@iki.fi
- CC: perl5-porters@perl.org
- Subject: Re: [ID 19990829.001] ExtUtils::Install.pm, minor umask problem
- Date: Wed, 01 Sep 1999 15:50:04 +0200
- Message-ID: <37CD2F0C.944BFACE@bivio.com>
- Branch: cfgperl
- ! lib/ExtUtils/Install.pm
-____________________________________________________________________________
-[ 4063] By: jhi on 1999/09/01 13:16:11
- Log: Enhance lfs tests: check every seek and sysseek
- and test also that -e and -f detect largefiles.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 4062] By: jhi on 1999/09/01 12:08:04
- Log: From: Colin Kuskie <ckuskie@Cadence.COM>
- To: Ronald J Kimball <rjk@linguist.dartmouth.edu>
- cc: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>,
- The Perl Porters Mailing List <perl5-porters@perl.org>
- Subject: [REPATCH 5.005_61] Re: perldiag.pod omissions
- Date: Tue, 31 Aug 1999 11:24:31 -0700 (PDT)
- Message-ID: <Pine.GSO.4.10.9908311055460.11290-100000@pdxult10a.cadence.com>
- Branch: cfgperl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 4061] By: jhi on 1999/09/01 12:03:03
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Cc: perl5-porters@perl.org, cloos@adamsmith.ai
- Subject: Re: [ID 19990830.005] Assigning value of an op on an SV to said SV
- Date: Wed, 1 Sep 1999 02:56:06 -0400 (EDT)
- Message-Id: <199909010656.CAA04478@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! op.c t/op/join.t
-____________________________________________________________________________
-[ 4060] By: jhi on 1999/09/01 07:59:42
- Log: IV_DIG and NV_DIG fixes.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4059] By: jhi on 1999/08/31 14:47:18
- Log: \C{} -> \N{} residue.
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 4057] By: gsar on 1999/08/30 22:08:19
- Log: avoid hiding child process window
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 4055] By: jhi on 1999/08/30 21:20:50
- Log: Document the undefinedness of overshifting.
- Branch: cfgperl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 4054] By: jhi on 1999/08/30 20:18:18
- Log: History fixes and updates.
- Branch: cfgperl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 4053] By: jhi on 1999/08/30 19:34:02
- Log: Shell quoting thinko broke installdirs.
- From: JVromans@Squirrel.nl (Johan Vromans)
- To: perl5-porters@perl.org
- Subject: [ID 19990830.001] 5.005_61 Configure does not substitute
- installprefix
- Date: Mon, 30 Aug 1999 16:10:10 +0200 (MEST)
- Message-Id: <14282.37058.934928.805633@plume.nl.compuware.com>
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/installdirs/archlib.U U/installdirs/bin.U
- ! U/installdirs/html1dir.U U/installdirs/html3dir.U
- ! U/installdirs/installprefix.U U/installdirs/man1dir.U
- ! U/installdirs/man3dir.U U/installdirs/privlib.U
- ! U/installdirs/scriptdir.U U/installdirs/sitearch.U
- ! U/installdirs/sitebin.U U/installdirs/sitehtml1dir.U
- ! U/installdirs/sitehtml3dir.U U/installdirs/sitelib.U
- ! U/installdirs/siteman1dir.U U/installdirs/siteman3dir.U
- ! U/installdirs/sitescriptdir.U U/installdirs/vendorarch.U
- ! U/installdirs/vendorbin.U U/installdirs/vendorhtml1dir.U
- ! U/installdirs/vendorhtml3dir.U U/installdirs/vendorlib.U
- ! U/installdirs/vendorman1dir.U U/installdirs/vendorman3dir.U
- ! U/installdirs/vendorscriptdir.U
-____________________________________________________________________________
-[ 4052] By: jhi on 1999/08/30 02:57:05
- Log: Use \N{named characters} instead of \C.
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: jhi@iki.fi
- Cc: larry@wall.org (Larry Wall), Tim.Bunce@ig.co.uk (Tim Bunce),
- perl5-porters@perl.org (Mailing list Perl5)
- Subject: Re: [PATCH 5.005_58] Named characters in Perl
- Date: Sun, 29 Aug 1999 16:46:53 -0400 (EDT)
- Message-Id: <199908292046.QAA05510@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! lib/charnames.pm lib/utf8.pm pod/perldiag.pod pod/perlop.pod
- ! pod/perlre.pod regcomp.c t/lib/charnames.t toke.c
-____________________________________________________________________________
-[ 4051] By: jhi on 1999/08/30 02:54:20
- Log: From: Spider Boardman <spider@Orb.Nashua.NH.US>
- To: perl5-porters@perl.org
- Subject: [ID 19990829.004] Autoloaded &VERSION and UNIVERSAL::VERSION
- don't mix
- Date: Sun, 29 Aug 1999 19:04:53 -0400
- Message-Id: <199908292304.TAA13738@Orb.Nashua.NH.US>
- Branch: cfgperl
- ! universal.c
-____________________________________________________________________________
-[ 4050] By: jhi on 1999/08/29 16:38:58
- Log: Conditionally socksify the LIBS of Socket.
- Branch: cfgperl
- ! ext/Socket/Makefile.PL
-____________________________________________________________________________
-[ 4049] By: jhi on 1999/08/29 15:33:30
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: Re: [PATCH 5.005_60] fix @DB::typeahead
- Date: Wed, 25 Aug 1999 16:19:58 -0400
- Message-ID: <19990825161958.A4658@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 4048] By: jhi on 1999/08/29 15:31:36
- Log: From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- To: perl5-porters@perl.org
- Subject: [PATCH _61] Lost arguments to simplified sort
- Date: Wed, 25 Aug 1999 23:22:32 -0700 (PDT)
- Message-ID: <14276.56616.879390.562685@metonymy.hip.berkeley.edu>
- Branch: cfgperl
- ! op.c t/op/sort.t
-____________________________________________________________________________
-[ 4047] By: jhi on 1999/08/29 15:29:29
- Log: From: Olaf Flebbe <olaf@science-computing.de>
- Sender: owner-perl5-porters@perl.org
- To: perl5-porters@perl.org
- Subject: [ID 19990827.003] [PATCH]5.005_60 Patch for EPOC Support
- Date: Fri, 27 Aug 1999 21:50:41 +0200 (MEST)
- Branch: cfgperl
- ! README.epoc epoc/config.h epoc/epoc.c epoc/epocish.h
- ! epoc/perl.mmp epoc/perl.pkg
-____________________________________________________________________________
-[ 4046] By: jhi on 1999/08/29 15:21:18
- Log: From: pvhp@forte.com (Peter Prymmer)
- To: perl5-porters@perl.org
- Subject: [PATCH: 5.005_61] an EBCDIC friendly cgi-html.t test
- Date: Fri, 27 Aug 99 18:51:04 PDT
- Message-Id: <9908280151.AA05010@forte.com>
- Branch: cfgperl
- ! t/lib/cgi-html.t
-____________________________________________________________________________
-[ 4045] By: jhi on 1999/08/29 15:18:38
- Log: Fix scalar gmtime (and localtime) in quad environments,
- bug reported by Robin Barker.
-
- From: Robin Barker <rmb1@cise.npl.co.uk>
- To: jhi@iki.fi
- Cc: perl5-porters@perl.org
- Subject: Re: [ID 19990823.009] [PATCH perl5.005_61] typo in perl.h
- Date: Tue, 24 Aug 1999 11:09:24 +0100 (BST)
- Message-Id: <199908241009.LAA24394@tempest.npl.co.uk>
- Branch: cfgperl
- ! pp_sys.c t/op/time.t
-____________________________________________________________________________
-[ 4044] By: jhi on 1999/08/29 11:24:03
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_60] Speeding up XSUB calls up to 66%
- Date: Fri, 27 Aug 1999 03:33:01 -0400 (EDT)
- Message-Id: <199908270733.DAA16927@monk.mps.ohio-state.edu>
-
- Addendum: it's "only" 33% speedup.
- Branch: cfgperl
- ! dump.c op.c op.h pp.h
-____________________________________________________________________________
-[ 4043] By: jhi on 1999/08/29 11:10:33
- Log: From: spider-perl@Orb.Nashua.NH.US
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_61 CORE] sub : attrlist
- Date: Sun, 29 Aug 1999 03:02:11 -0400
- Message-Id: <199908290702.DAA32191@Orb.Nashua.NH.US>
- Branch: cfgperl
- + lib/attributes.pm t/lib/attrs.t t/op/attrs.t xsutils.c
- ! MANIFEST Makefile.SH embed.h embed.pl embedvar.h global.sym
- ! gv.c lib/AutoSplit.pm lib/SelfLoader.pm objXSUB.h op.c perl.c
- ! perl.h perlapi.c perlapi.h perly.c perly.fixer perly.h perly.y
- ! perly_c.diff pod/perldelta.pod pod/perldiag.pod
- ! pod/perlfunc.pod pod/perlmodlib.pod pod/perlsub.pod proto.h
- ! toke.c vms/perly_c.vms vms/perly_h.vms warnings.h
-____________________________________________________________________________
-[ 4042] By: jhi on 1999/08/29 11:08:50
- Log: Turn off gcc-2.95's strict-alias optimization.
- This, of course, should be only temporary.
- From Andy Dougherty.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/compline/ccflags.U U/modified/cc.U
-____________________________________________________________________________
-[ 4041] By: jhi on 1999/08/29 10:47:30
- Log: Fix a typo in #4036.
- Branch: cfgperl
- ! mg.c
-____________________________________________________________________________
-[ 4040] By: jhi on 1999/08/29 10:34:58
- Log: Add a missing #endif forgotten by #4035.
- Branch: cfgperl
- ! doop.c
-____________________________________________________________________________
-[ 4039] By: jhi on 1999/08/29 10:31:19
- Log: Remove an extra #endif introduced by #4036.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4038] By: jhi on 1999/08/29 10:18:59
- Log: Rename warning to warnings, from Paul Marquess.
- Branch: cfgperl
- + lib/warnings.pm t/pragma/warn/7fatal t/pragma/warn/8signal
- + t/pragma/warnings.t warnings.h warnings.pl
- - lib/warning.pm t/pragma/warning.t warning.h warning.pl
- ! MANIFEST Makefile.SH gv.c mg.c perl.h pod/perldelta.pod
- ! pod/perldiag.pod pod/perlfunc.pod pod/perllexwarn.pod
- ! pod/perlmodlib.pod pod/perlrun.pod pod/perltoc.pod
- ! pod/perlvar.pod t/op/64bit.t t/op/tie.t t/pragma/warn/2use
- ! t/pragma/warn/3both t/pragma/warn/4lint t/pragma/warn/5nolint
- ! t/pragma/warn/6default t/pragma/warn/doio t/pragma/warn/doop
- ! t/pragma/warn/gv t/pragma/warn/mg t/pragma/warn/op
- ! t/pragma/warn/perl t/pragma/warn/perly t/pragma/warn/pp
- ! t/pragma/warn/pp_ctl t/pragma/warn/pp_hot t/pragma/warn/pp_sys
- ! t/pragma/warn/regcomp t/pragma/warn/regexec t/pragma/warn/sv
- ! t/pragma/warn/taint t/pragma/warn/toke t/pragma/warn/universal
- ! t/pragma/warn/utf8 t/pragma/warn/util toke.c
-____________________________________________________________________________
-[ 4037] By: jhi on 1999/08/29 10:08:47
- Log: Create the equivalence tables based on
- the real Unicode decomposition, not on
- the character name.
- Branch: cfgperl
- ! lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
- ! lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 4036] By: jhi on 1999/08/29 09:29:08
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/unicode/Is/SylA.pl lib/unicode/Is/SylC.pl
- +> lib/unicode/Is/SylE.pl lib/unicode/Is/SylI.pl
- +> lib/unicode/Is/SylO.pl lib/unicode/Is/SylU.pl
- +> lib/unicode/Is/SylV.pl lib/unicode/Is/SylWA.pl
- +> lib/unicode/Is/SylWC.pl lib/unicode/Is/SylWE.pl
- +> lib/unicode/Is/SylWI.pl lib/unicode/Is/SylWV.pl
- !> (integrate 190 files)
-____________________________________________________________________________
-[ 4035] By: jhi on 1999/08/29 08:56:15
- Log: Implement 64-bit vec().
- Branch: cfgperl
- ! doop.c pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- ! pp.h t/op/64bit.t
-____________________________________________________________________________
-[ 4034] By: gsar on 1999/08/29 03:35:18
- Log: deadcode removal
- Branch: perl
- ! XSUB.h embed.h embed.pl global.sym mg.c op.c perl.h perlapi.h
- ! pp_ctl.c proto.h run.c sv.c
-____________________________________________________________________________
-[ 4033] By: jhi on 1999/08/28 17:31:07
- Log: From: Robin Barker <rmb1@cise.npl.co.uk>
- To: perl5-porters@perl.org
- Subject: [ID 19990823.009] [PATCH perl5.005_61] typo in perl.h
- Date: Mon, 23 Aug 1999 16:41:11 +0100 (BST)
- Message-Id: <199908231541.QAA10043@tempest.npl.co.uk>
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4032] By: gsar on 1999/08/26 23:53:33
- Log: new thread should set current interp in TLS
- Branch: perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 4031] By: bailey on 1999/08/23 03:40:07
- Log: When extension doesn't have a "main" object file to anchor linker search, pull in all objct files
- Branch: vmsperl
- ! lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 4030] By: bailey on 1999/08/23 03:37:43
- Log: Patch up holes in realclean target
- Branch: vmsperl
- ! vms/descrip_mms.template
-____________________________________________________________________________
-[ 4029] By: bailey on 1999/08/23 03:36:24
- Log: Fix handling of PERL_POLLUTE
- Branch: vmsperl
- ! lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 4028] By: bailey on 1999/08/23 03:34:08
- Log: Update VMS version of perly.h
- Branch: vmsperl
- ! vms/perly_h.vms
-____________________________________________________________________________
-[ 4027] By: bailey on 1999/08/23 03:32:45
- Log: Update dependencies in Descrip.MMS
- Branch: vmsperl
- ! vms/descrip_mms.template
-____________________________________________________________________________
-[ 4026] By: bailey on 1999/08/23 03:30:01
- Log: Fix prototypes in perlapi.c (64-bit?)
- Clear prior definition of getenv_len before defining VMS-specific macro
- Branch: vmsperl
- ! perlapi.c vms/vmsish.h
-____________________________________________________________________________
-[ 4025] By: bailey on 1999/08/23 03:25:51
- Log: Add '-m' option to Configure.com which skips the MANIFEST check
- Branch: vmsperl
- ! configure.com
-____________________________________________________________________________
-[ 4024] By: bailey on 1999/08/23 03:23:34
- Log: Skip open() tests that rely on Unix fork semantics
- Branch: vmsperl
- ! t/io/open.t
-____________________________________________________________________________
-[ 4023] By: bailey on 1999/08/23 03:21:46
- Log: Loosen conditons for recognizing a function name in perl.h to accomodate revisions
- Branch: vmsperl
- ! vms/gen_shrfls.pl
-____________________________________________________________________________
-[ 4022] By: bailey on 1999/08/23 03:17:33
- Log: update MM_VMS to use new File::Spec routines
- Branch: vmsperl
- ! lib/ExtUtils/MM_VMS.pm lib/File/Spec/VMS.pm
-____________________________________________________________________________
-[ 4021] By: bailey on 1999/08/23 03:13:40
- Log: byteperl is now part of the ByteLoader ext
- Branch: vmsperl
- ! ext/ByteLoader/byterun.h vms/descrip_mms.template
-____________________________________________________________________________
-[ 4020] By: bailey on 1999/08/23 03:10:41
- Log: Allow option to treat barewords at start of Unix paths as simple words rather than logicals
- Branch: vmsperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 4019] By: bailey on 1999/08/23 03:07:28
- Log: Update calls for new thread context handling
- Branch: vmsperl
- ! ext/Devel/DProf/DProf.xs ext/DynaLoader/dl_vms.xs
- ! ext/POSIX/POSIX.xs vms/vms.c vms/vmsish.h vms/writemain.pl
-____________________________________________________________________________
-[ 4018] By: bailey on 1999/08/23 03:01:31
- Log: Allow for file versions in library when looking for .bs files
- Branch: vmsperl
- ! ext/DynaLoader/DynaLoader_pm.PL
-____________________________________________________________________________
-[ 4017] By: bailey on 1999/08/23 02:58:55
- Log: Update VMS configuration procedures for 5.005_60
- Branch: vmsperl
- ! configure.com vms/subconfigure.com
-____________________________________________________________________________
-[ 4016] By: gsar on 1999/08/20 22:19:56
- Log: update Changes
- Branch: perl
- ! Changes
-
-----------------
-Version 5.005_61
-----------------
-
-____________________________________________________________________________
-[ 4015] By: gsar on 1999/08/20 22:17:41
- Log: perl_free() should use PerlMem_free()
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 4014] By: gsar on 1999/08/20 22:10:46
- Log: win32 tweaks
- Branch: perl
- ! XSUB.h mg.c perl.c win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc
-____________________________________________________________________________
-[ 4013] By: gsar on 1999/08/20 22:09:56
- Log: DEBUG_m() adjusted to internalize dTHX
- Branch: perl
- ! malloc.c perl.h util.c
-____________________________________________________________________________
-[ 4012] By: gsar on 1999/08/20 17:51:06
- Log: make autogenerated files writable
- Branch: perl
- ! (edit 171 files)
-____________________________________________________________________________
-[ 4011] By: gsar on 1999/08/20 17:43:47
- Log: update Changes
- Branch: perl
- ! Changes perl.h pod/perldelta.pod pod/perlguts.pod
-____________________________________________________________________________
-[ 4010] By: gsar on 1999/08/20 17:21:53
- Log: up patchlevel &c
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 4009] By: gsar on 1999/08/20 16:46:26
- Log: add missing Is/Syl*.pl files
- Branch: perl
- + lib/unicode/Is/SylA.pl lib/unicode/Is/SylC.pl
- + lib/unicode/Is/SylE.pl lib/unicode/Is/SylI.pl
- + lib/unicode/Is/SylO.pl lib/unicode/Is/SylU.pl
- + lib/unicode/Is/SylV.pl lib/unicode/Is/SylWA.pl
- + lib/unicode/Is/SylWC.pl lib/unicode/Is/SylWE.pl
- + lib/unicode/Is/SylWI.pl lib/unicode/Is/SylWV.pl
-____________________________________________________________________________
-[ 4008] By: gsar on 1999/08/20 16:31:02
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> ext/ByteLoader/hints/sunos.pl lib/charnames.pm
- +> lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
- +> lib/unicode/syllables.txt t/lib/charnames.t t/lib/syslfs.t
- +> t/op/lfs.t
- - lib/unicode/EthiopicSyllables.txt
- - lib/unicode/MakeEthiopicSyllables.PL
- !> (integrate 261 files)
-____________________________________________________________________________
-[ 4007] By: gsar on 1999/08/20 15:24:08
- Log: support USE_THREADS+MULTIPLICITY; source compat tweaks for
- USE_THREADS and MULTIPLICITY; minor pod adjustments
- Branch: perl
- ! Porting/patching.pod Todo Todo-5.005 XSUB.h embed.pl
- ! embedvar.h perl.c perl.h pod/perlguts.pod util.c
-____________________________________________________________________________
-[ 4006] By: jhi on 1999/08/19 19:01:41
- Log: Tighten the vec() code so that naughty BITS cause an error.
- Branch: cfgperl
- ! doop.c
-____________________________________________________________________________
-[ 4005] By: jhi on 1999/08/19 15:55:09
- Log: Don't document ill-defined vec() bits cases
- (for which the code doesn't work right in any case)
- Branch: cfgperl
- ! pod/perldiag.pod pod/perlfunc.pod
-____________________________________________________________________________
-[ 4004] By: jhi on 1999/08/19 12:49:41
- Log: Removed duplicated code (in pp.c and mg.c) by introducing
- do_vecget(). NOTE: the calling convention of do_vecset()
- changes, too: the `offset' that is assigned to LvTARGOFF(TARG)
- in pp_vec() is no more multiplied by `size' in pp_vec(),
- the multiplication is now done in do_vecset().
-
- Also fix a cpp thinko in change #4002.
- Branch: cfgperl
- ! doop.c embed.h embed.pl embedvar.h global.sym mg.c objXSUB.h
- ! perl.h perlapi.c pod/perldiag.pod pod/perlfunc.pod pp.c
- ! proto.h
-____________________________________________________________________________
-[ 4003] By: jhi on 1999/08/18 08:27:22
- Log: Warn about small spherical distances.
- Branch: cfgperl
- ! lib/Math/Trig.pm
-____________________________________________________________________________
-[ 4002] By: jhi on 1999/08/17 09:11:51
- Log: Enhance IV_FITS_IN_IV (though it's still unused).
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 4001] By: jhi on 1999/08/17 08:13:34
- Log: From: andreas.koenig@anima.de (Andreas J. Koenig)
- Message-ID: <sfcogg7ylk7.fsf@hohenstaufen.in-berlin.de>
- To: The Perl5 Porters Mailing List <perl5-porters@perl.org>
- Subject: [PATCH] overload.pm str/num confu
- Date: 17 Aug 1999 08:21:12 +0200
- Branch: cfgperl
- ! lib/overload.pm
-____________________________________________________________________________
-[ 4000] By: jhi on 1999/08/17 07:20:23
- Log: From: merlyn@stonehenge.com (Randal L. Schwartz)
- To: perl5-porters@perl.org
- Subject: [ID 19990816.006] small patch to perlobj.pod from 5.005_03
- Date: 16 Aug 1999 14:24:28 -0700
- Message-Id: <m1ogg7to4z.fsf@halfdome.holdit.com>
- Branch: cfgperl
- ! pod/perlobj.pod
-____________________________________________________________________________
-[ 3999] By: jhi on 1999/08/16 19:49:09
- Log: Integrate with Nick.
- Branch: cfgperl
- !> cop.h op.c perl.c t/op/eval.t t/pragma/warn/op util.c
-____________________________________________________________________________
-[ 3998] By: jhi on 1999/08/16 19:44:29
- Log: Fix most of the pod2man moanings reported in
-
- From: "Larry W. Virden" <lvirden@cas.org>
- To: perl5-porters@perl.org
- Subject: [ID 19990803.011] Not OK: perl 5.00560 on sun4-solaris 2.6
- (UNINSTALLED)
- Date: Tue, 3 Aug 1999 15:35:06 -0400 (EDT)
- Message-Id: <199908031935.PAA27692@cas.org>
-
- Configure regen'ed.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH ext/B/B/Stash.pm lib/Carp/Heavy.pm
- ! lib/Dumpvalue.pm lib/Exporter/Heavy.pm lib/filetest.pm
- ! lib/utf8.pm pod/perllexwarn.pod pod/perlxstut.pod
- ! utils/h2xs.PL utils/perlcc.PL
-____________________________________________________________________________
-[ 3997] By: jhi on 1999/08/16 19:20:37
- Log: A fix of sorts for the flush-before-dup scenario.
- Branch: cfgperl
- ! doio.c
-____________________________________________________________________________
-[ 3996] By: jhi on 1999/08/16 19:14:37
- Log: More paranoia.
- Branch: cfgperl
- ! sv.c
-____________________________________________________________________________
-[ 3995] By: jhi on 1999/08/16 18:55:35
- Log: Batch of small 64-bit/long double/large file support tweaks:
- - scan for LDBL_DIG
- - from DBL_DIG and LDBL_DIG select NV_DIG
- - introduce IVSIZE, UVSIZE, NVSIZE
- - introduce IV_DIG
- - remove stdio64
- - AIX uses `oslevel` when others use `uname -r`
- - already AIX 4.2 goes 64-bit
- - in HP-UX require the 64-bit libc, just the directory isn't enough
- - group ids are not NVs
- - #undef USE_LONG_DOUBLE if long double is no better than double
- - introduce NV_WITHIN_*() and IV_FITS_IN_IV
- - mention large file support in perldelta
- - introduce quad TOPpin' and POPpin'
- - the svcat... buffer was tiny for printing quads in %b
- - fix the multiplication test in 64bit.t
- - try to make VMS to comply with all this removal and "introducal"
- of symbols
- Branch: cfgperl
- ! Configure config_h.SH dump.c hints/aix.sh hints/hpux.sh mg.c
- ! perl.h perlio.c pod/perldelta.pod pp.h sv.c t/lib/syslfs.t
- ! t/op/64bit.t t/op/lfs.t utf8.c vms/subconfigure.com
- Branch: metaconfig
- ! U/modified/d_longdbl.U
- Branch: metaconfig/U/perl
- + d_ldbl_dig.U
-____________________________________________________________________________
-[ 3994] By: jhi on 1999/08/16 07:53:44
- Log: More Configure/subconfigure.com syncing.
- Branch: cfgperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 3993] By: jhi on 1999/08/14 22:09:26
- Log: Remove from VMS what the change #3982 took away from Configure lands.
- Branch: cfgperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 3992] By: jhi on 1999/08/14 13:29:13
- Log: Small test tweaks.
- Branch: cfgperl
- ! t/io/dup.t t/lib/dprof.t t/lib/odbm.t
-____________________________________________________________________________
-[ 3991] By: jhi on 1999/08/14 13:08:41
- Log: Augment filesize limit note.
- Branch: cfgperl
- ! doio.c
-____________________________________________________________________________
-[ 3990] By: jhi on 1999/08/14 13:06:12
- Log: Note about filesize limits.
- Branch: cfgperl
- ! doio.c pp_sys.c
-____________________________________________________________________________
-[ 3989] By: jhi on 1999/08/14 11:31:58
- Log: Catch the case of filesize limits.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 3988] By: nick on 1999/08/14 09:20:58
- Log: New lightweight Carp has a require. If Carp is used in a __DIE__ handler
- this causes a POPSTACK panic. The problem seems to be that although
- die_where() has unwound the tail of perl_vdie() top_env setjmp has been
- set to resume execution there. Avoiding setting CATCH_SET(TRUE) in
- call_sv() avoids this. So invent a new G_NOCATCH flag to disable
- messing with CATCH_SET() in call_sv, use it in perl_vdie().
- Add test to op/eval.t which will fail (panic) if bug comes back.
- >>> I AM NOT CONVINCED THIS IS CORRECT LONG TERM FIX <<<
- Branch: perl
- ! cop.h perl.c t/op/eval.t util.c
-____________________________________________________________________________
-[ 3987] By: jhi on 1999/08/13 23:57:52
- Log: From: "Craig A. Berry" <craig.berry@metamor.com>
- To: perl5-porters@perl.org, vmsperl@perl.org, sarathy@activestate.com
- Subject: [PATCH 5.005_60] fix MM_VMS.pm for space-delimited lists
- Date: Fri, 13 Aug 1999 17:42:47 -0500
- Message-Id: <v04210105b3da3ed9599d@[172.16.246.133]>
- Branch: cfgperl
- ! lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 3986] By: jhi on 1999/08/13 23:56:44
- Log: Don't quit before printing out the message.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 3985] By: jhi on 1999/08/13 23:35:49
- Log: Remove more t/ trash on target "clean".
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3984] By: jhi on 1999/08/13 23:02:53
- Log: Avoid double long double.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! uselongdbl.U
-____________________________________________________________________________
-[ 3983] By: jhi on 1999/08/13 22:59:56
- Log: BYTEORDER fix.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/compline/byteorder.U
-____________________________________________________________________________
-[ 3982] By: jhi on 1999/08/13 22:48:40
- Log: Jumbo Configure and large file support update.
- Remove a lot of unneeded 64-bitness cruft;
- re-introduce BYTEORDER; update 64-bitness hints;
- lfs should now work in Solaris; long doubles in AIX.
- Branch: cfgperl
- ! Configure config_h.SH doio.c hints/aix.sh hints/hpux.sh
- ! hints/irix_6.sh hints/solaris_2.sh iperlsys.h perl.h perlio.c
- ! perlsdio.h pp.h pp_sys.c
- Branch: metaconfig
- ! U/compline/byteorder.U U/compline/ccflags.U
- Branch: metaconfig/U/perl
- ! d_dlsymun.U io64.U uselongdbl.U
-____________________________________________________________________________
-[ 3980] By: jhi on 1999/08/13 15:09:11
- Log: Introduce HAS_LLSEEK.
- Branch: cfgperl
- ! Configure config_h.SH perl.h
-____________________________________________________________________________
-[ 3979] By: jhi on 1999/08/13 14:29:47
- Log: From: <dan@sidhe.org>
- To: perl5-porters@perl.org, vmsperl@perl.org, bailey@newman.upenn.edu,
- sarathy@activestate.com
- Subject: [PATCH 5.005_60]fix up VMS->unix filename translation a bit
- Date: Fri, 13 Aug 1999 09:00:42 -0700 (PDT)
- Message-ID: <Pine.LNX.4.10.9908130849390.3950-100000@tuatha.sidhe.org>
- Branch: cfgperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 3978] By: jhi on 1999/08/13 09:56:46
- Log: Make the 64-bit tests more paranoid.
- Branch: cfgperl
- ! t/op/64bit.t
-____________________________________________________________________________
-[ 3976] By: jhi on 1999/08/12 21:49:16
- Log: IRIX64 needs more -mabi=64 with gcc.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 3975] By: jhi on 1999/08/12 21:02:03
- Log: Reincarnate change #3967, now in more modest form.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 3974] By: jhi on 1999/08/12 20:49:36
- Log: Remove rt from libswanted (I added it many moons ago
- when I thought it would be useful in Digital UNIX,
- I was wrong); undo the recent IRIX hints changes,
- getting rid of one warning brought new ones.
- Branch: cfgperl
- ! Configure config_h.SH hints/irix_6.sh
- Branch: metaconfig
- ! U/modified/Myinit.U
-____________________________________________________________________________
-[ 3973] By: jhi on 1999/08/12 19:42:53
- Log: st_blocks is in 512 byte blocks.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 3972] By: jhi on 1999/08/12 19:27:31
- Log: Don't claim defeat too early.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! longdblfio.U
-____________________________________________________________________________
-[ 3971] By: jhi on 1999/08/12 19:24:14
- Log: IRIX 64-bit hint tweak.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 3970] By: nick on 1999/08/12 19:17:20
- Log: Turn of deprecated warnings for defined(@Sompack::ISA) type
- tests i.e. RV2AV and RV2HV
- Branch: perl
- ! op.c t/pragma/warn/op
-____________________________________________________________________________
-[ 3969] By: jhi on 1999/08/12 19:06:17
- Log: Add Configure -Duselongdouble and add a missing semicolon.
- Branch: cfgperl
- ! Configure config_h.SH sv.c
- Branch: metaconfig/U/perl
- + uselongdbl.U
-____________________________________________________________________________
-[ 3968] By: jhi on 1999/08/12 18:46:00
- Log: Simply exit() early if lfs support seems unlikely.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 3967] By: jhi on 1999/08/12 18:44:05
- Log: Suffer silently for unused libraries.
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 3966] By: jhi on 1999/08/12 13:18:44
- Log: Update MANIFEST to follow change #3965.
- Branch: cfgperl
- ! MANIFEST
-____________________________________________________________________________
-[ 3965] By: jhi on 1999/08/12 13:15:38
- Log: Regenerate Unicode tables based on new syllable lists
- from Daniel Yacob.
- Branch: cfgperl
- ! (edit 159 files)
-____________________________________________________________________________
-[ 3964] By: jhi on 1999/08/12 10:06:24
- Log: Remove more spurious casting.
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 3963] By: jhi on 1999/08/12 08:18:53
- Log: Minor niggles on the lfs tests.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 3962] By: jhi on 1999/08/11 22:48:25
- Log: Don't bother with lfs testing if off_t is too small.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 3961] By: jhi on 1999/08/11 22:22:54
- Log: Long double patches from Dan Sugalski.
- Branch: cfgperl
- ! sv.c
-____________________________________________________________________________
-[ 3960] By: jhi on 1999/08/11 22:17:55
- Log: Flush buffer before duplicating file descriptor.
-
- From: Mark-Jason Dominus <mjd@plover.com>
- To: Graham Barr <gbarr@pobox.com>
- cc: Vicki Brown <vlb@cfcl.com>, perl5-porters@perl.org, mjd@plover.com
- Subject: Re: [ID 19990811.002] can't dup DATA? (PATCH (5.005_57))
- Date: Wed, 11 Aug 1999 15:56:09 -0400
- Message-ID: <19990811195610.5933.qmail@plover.com>
-
- From: Mark-Jason Dominus <mjd@plover.com>
- To: perl5-porters@perl.org
- Subject: Re: [ID 19990811.002] can't dup DATA? (PATCH (5.005_57))
- Date: Wed, 11 Aug 1999 16:05:46 -0400
- Message-ID: <19990811200546.6165.qmail@plover.com>
- Branch: cfgperl
- ! doio.c pod/perldelta.pod
-____________________________________________________________________________
-[ 3959] By: jhi on 1999/08/11 22:11:35
- Log: Bypass fsync(NULL) (crashes miniperl compiled with DEC C 5.2)
-
- From: "Craig A. Berry" <craig.berry@metamor.com>
- Sender: owner-perl5-porters@perl.org
- To: vmsperl@perl.org, perl5-porters@perl.org, sarathy@activestate.com,
- bailey@newman.upenn.edu
- Subject: [PATCH 5.005_60] vms.c my_flush patch to circumvent fileno
- problem
- Date: Wed, 11 Aug 1999 14:31:11 -0500
- Message-Id: <4.2.0.58.19990811141007.00b8f8a0@mmtnt11.metamor.com>
- Branch: cfgperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 3958] By: jhi on 1999/08/11 15:35:45
- Log: Add a hopefully comforting message if there seems to be no LFS.
- This seems to be the case with e.g. ext2fs, a somewhat popular fs.
- The tests will fail on lfs tests only if quad is available,
- if ENOQUAD, the lfs tests will be skipped.
- Branch: cfgperl
- ! t/lib/syslfs.t t/op/lfs.t
-____________________________________________________________________________
-[ 3957] By: jhi on 1999/08/11 12:25:59
- Log: Unapply an experimental patch that accidentally escaped
- from the lab by piggybacking with the change #3955.
- Branch: cfgperl
- ! pp.c pp.h pp_hot.c
-____________________________________________________________________________
-[ 3956] By: jhi on 1999/08/11 08:19:23
- Log: Add sysio large file support testing.
- Branch: cfgperl
- + t/lib/syslfs.t
- ! MANIFEST pod/perlfunc.pod t/op/64bit.t t/op/lfs.t
-____________________________________________________________________________
-[ 3955] By: jhi on 1999/08/10 22:39:11
- Log: From: <dan@sidhe.org>
- To: vmsperl@perl.org, perl5-porters@perl.org,
- sarathy@activestate.com, bailey@newman.upenn.edu
- Subject: [PATCH 5.005_60]Patches needed to get _60 building with
- threads on VMS
- Date: Tue, 10 Aug 1999 16:34:56 -0700 (PDT)
- Message-ID: <Pine.LNX.4.10.9908101631030.18266-100000@tuatha.sidhe.org>
- Branch: cfgperl
- ! ext/Devel/DProf/DProf.xs ext/DynaLoader/dl_vms.xs
- ! ext/POSIX/POSIX.xs pp.c pp.h pp_hot.c vms/vms.c vms/vmsish.h
- ! vms/writemain.pl
-____________________________________________________________________________
-[ 3954] By: jhi on 1999/08/10 20:37:55
- Log: LFS testing robustness.
- Branch: cfgperl
- ! t/op/lfs.t
-____________________________________________________________________________
-[ 3953] By: jhi on 1999/08/10 19:54:50
- Log: From: <dan@sidhe.org>
- To: vmsperl@perl.org, perp5-porters@perl.org, bailey@newman.upenn.edu,
- sarathy@activestate.com
- Subject: [PATCH 5.005_60]Pathces to get _60 building on VMS
- Date: Tue, 10 Aug 1999 13:28:18 -0700 (PDT)
- Message-ID: <Pine.LNX.4.10.9908101323130.18266-100000@tuatha.sidhe.org>
- Branch: cfgperl
- ! configure.com vms/descrip_mms.template vms/gen_shrfls.pl
- ! vms/subconfigure.com vms/vmsish.h
-____________________________________________________________________________
-[ 3952] By: jhi on 1999/08/10 17:18:57
- Log: AIX is different, again. Now in cc -E output.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig
- ! U/modified/cppstdin.U
-____________________________________________________________________________
-[ 3951] By: jhi on 1999/08/10 14:37:08
- Log: Use Pid_t on pgrp matters.
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 3950] By: jhi on 1999/08/10 14:35:30
- Log: Use Pid_t.
- Branch: cfgperl
- ! doio.c embed.h embed.pl embedvar.h global.sym perlapi.c
- ! pp_sys.c proto.h util.c
-____________________________________________________________________________
-[ 3949] By: jhi on 1999/08/10 14:11:15
- Log: Use Mode_t.
- Branch: cfgperl
- ! doio.c embed.h embed.pl embedvar.h global.sym perlapi.c
- ! perlapi.h pp_sys.c proto.h
-____________________________________________________________________________
-[ 3948] By: jhi on 1999/08/10 13:53:19
- Log: Small perlbug doc tweaks from Jon Orwant.
- Branch: cfgperl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 3947] By: jhi on 1999/08/10 09:55:11
- Log: Large file support testing.
- Branch: cfgperl
- + t/op/lfs.t
- ! MANIFEST t/op/64bit.t
-____________________________________________________________________________
-[ 3946] By: jhi on 1999/08/10 09:13:54
- Log: Remove I32 casting from time-related functions.
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 3945] By: jhi on 1999/08/10 09:06:42
- Log: Gratuitous uid and gid casts to I32s and ints removed.
- There are still problem spots in printfing such ids:
- width (%d vs %ld) and signedness %d vs %u.
- Branch: cfgperl
- ! doio.c embed.h embed.pl embedvar.h global.sym intrpvar.h mg.c
- ! perl.c perlapi.c pp_hot.c proto.h
-____________________________________________________________________________
-[ 3944] By: jhi on 1999/08/10 07:43:03
- Log: Remove I32 casts from pp_stat, these make stat()
- very broken e.g. on files larger than 2 gigabytes.
- Reported by
- From: Phil Lobbes <phil@finchcomputer.com>
- To: perl5-porters@perl.org
- Subject: [ID 19990810.001] Possible bug using stat w/large files Digital
- UNIX Perl 5.005_03
- Date: Mon, 09 Aug 1999 21:38:54 -0700
- Message-Id: <199908100438.VAA08292@ultra.finchcomputer.com>
-
- There are more of these I32 casts all over pp_sys.c,
- all of them should be checked.
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 3943] By: jhi on 1999/08/10 07:38:30
- Log: Remove blathering.
- Branch: cfgperl
- ! lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 3942] By: jhi on 1999/08/09 20:35:13
- Log: lexwarn maintenance: new warning class unsafe
- subclasses 'overflow' and 'portable' created,
- used by the recent integer overflow warnings.
- Class syntax subclass 'octal' renamed to 'digit',
- binary and hexadecimal parsing errors also 'digit' warnings.
- Branch: cfgperl
- ! lib/warning.pm pod/perllexwarn.pod t/pragma/warn/util toke.c
- ! util.c warning.h warning.pl
-____________________________________________________________________________
-[ 3941] By: jhi on 1999/08/09 10:40:47
- Log: Integrate with Nick.
- Branch: cfgperl
- +> opnames.h
- !> Changes MANIFEST embed.h embed.pl ext/B/B/C.pm ext/B/B/CC.pm
- !> global.sym opcode.h opcode.pl perl.h perlapi.c pp.c
-____________________________________________________________________________
-[ 3940] By: jhi on 1999/08/09 10:32:43
- Log: Regenerate the Unicode tables after having updated the Unicode
- database (change #3939).
- Branch: cfgperl
- ! (edit 157 files)
-____________________________________________________________________________
-[ 3939] By: jhi on 1999/08/09 10:27:22
- Log: Unicode data updated to be the latest beta of the Unicode 3.0.
- Branch: cfgperl
- ! lib/unicode/UnicodeData-Latest.txt
-____________________________________________________________________________
-[ 3938] By: jhi on 1999/08/09 10:25:54
- Log: Ethiopic changes via private email from Daniel Yacob,
- <dmulholl@cs.indiana.edu>. Ethiopic and Cherokee done,
- Canadian Syllabics and Yi under construction.
- Branch: cfgperl
- + lib/unicode/syllables.txt
- - lib/unicode/EthiopicSyllables.txt
- - lib/unicode/MakeEthiopicSyllables.PL
- ! MANIFEST lib/unicode/UnicodeData-Latest.txt
- ! lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 3937] By: jhi on 1999/08/09 10:21:51
- Log: Move the equivalence class creation last.
- Branch: cfgperl
- ! lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 3936] By: jhi on 1999/08/09 10:20:40
- Log: Compute equivalence classes (diacritics stripping) only
- for letters, not for ligatures.
- Branch: cfgperl
- ! lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
- ! lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 3935] By: nick on 1999/08/08 13:53:57
- Log: Will now correctly re-call
- bootstrap "Foo";
- if requested. This should allow build on Win32 and other
- platforms where you cannot link to loadables directly.
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 3934] By: nick on 1999/08/07 12:23:55
- Log: Vishal Bhatia <vishalb@my-deja.com>
- Subject: [PATCH 5.005_60] fix for some obscure bugs (compiler)
- Message-ID: <HLPEBPHPAKHKAAAA@my-deja.com>
- Branch: perl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 3933] By: nick on 1999/08/07 12:19:46
- Log: B::C changes to get simple Tk app. compiling again
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 3932] By: jhi on 1999/08/06 21:17:16
- Log: Regen Configure to include change #3915.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3931] By: jhi on 1999/08/06 18:52:57
- Log: Todo update.
- Branch: cfgperl
- ! Todo Todo-5.005 lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 3930] By: jhi on 1999/08/06 13:13:05
- Log: Character class equivalence tables.
- Branch: cfgperl
- + lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
- ! MANIFEST lib/unicode/mktables.PL
-____________________________________________________________________________
-[ 3929] By: jhi on 1999/08/06 11:59:11
- Log: More Fcntl constants. (This process really needs
- to be automated, at least partly, see the Errno extension.)
- Now also the SEEK_ constants are available via the Fcntl.
- Yes, this is redundant (IO::Seekable and POSIX supply them already),
- but now Fcntl is a one-stop shopping mall for all your
- file-related constants.
- Branch: cfgperl
- ! ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs pod/perlfunc.pod
-____________________________________________________________________________
-[ 3928] By: jhi on 1999/08/06 08:08:03
- Log: Protect against pack/unpack repeat count overflows,
- based on:
-
- From: Nathan Torkington <gnat@frii.com>
- To: Brian Keefer <mgomes@cwix.com>
- Cc: perl5-porters@perl.org
- Subject: Re: [ID 19990806.001] Core dump with obfuscated code
- Date: Thu, 5 Aug 1999 23:01:51 -0600 (MDT)
- Message-ID: <14250.27711.769942.100675@localhost.frii.com>
- Branch: cfgperl
- ! pod/perldiag.pod pp.c
-____________________________________________________________________________
-[ 3927] By: jhi on 1999/08/06 07:32:20
- Log: Fix for Nathan's fix (#3920) from Guy Decoux.
-
- From: Nathan Torkington <gnat@frii.com>
- To: perl5-porters@perl.org
- Subject: Bugfix for my bugfix
- Date: Thu, 5 Aug 1999 21:25:47 -0600 (MDT)
- Message-ID: <14250.21947.765134.940583@localhost.frii.com>
- Branch: cfgperl
- ! ext/B/B/Assembler.pm
-____________________________________________________________________________
-[ 3926] By: jhi on 1999/08/05 17:25:19
- Log: Fix regex charclass parsing so that bogus ranges
- like [0-\d] and [[:word:]-z] are no more allowed.
- The anomaly was noticed by Guy Decoux.
- Branch: cfgperl
- ! pod/perldiag.pod pod/perlre.pod regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 3925] By: jhi on 1999/08/05 10:31:47
- Log: split /^/ deprecation warning should not be on by default.
- Branch: cfgperl
- ! pp.c
-____________________________________________________________________________
-[ 3923] By: jhi on 1999/08/05 09:16:57
- Log: From: paul.marquess@bt.com
- To: jhi@iki.fi, paul.marquess@bt.com
- Cc: gsar@ActiveState.com, perl5-porters@perl.org
- Subject: RE: [PATCH 5.005_60] anydbm.t + DB_File + Berkeley DB >= 2.4.10
- Date: Thu, 5 Aug 1999 09:33:14 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB202D49B26@mbtlipnt02.btlabs.bt.co.uk>
- Branch: cfgperl
- ! t/lib/anydbm.t
-____________________________________________________________________________
-[ 3921] By: jhi on 1999/08/05 08:05:13
- Log: From: paul.marquess@bt.com
- To: perl5-porters@perl.org
- Cc: gsar@activestate.com, nik@tiuk.ti.com, jhi@iki.fi,
- randy@theoryx5.uwinnipeg.ca
- Subject: [PATCH 5.005_60] DB_File 1.70
- Date: Wed, 4 Aug 1999 23:22:22 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB202D49B21@mbtlipnt02.btlabs.bt.co.uk>
-
- (Replaces change #3917)
- Branch: cfgperl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs t/lib/db-btree.t t/lib/db-hash.t
-____________________________________________________________________________
-[ 3920] By: jhi on 1999/08/04 19:02:58
- Log: From: Nathan Torkington <gnat@frii.com>
- To: perl5-porters@perl.org
- Subject: [5.005_60 PATCH] Make B::Bytecode work
- Date: Wed, 4 Aug 1999 11:24:56 -0600 (MDT)
- Message-ID: <14248.30568.769427.216092@localhost.frii.com>
- Branch: cfgperl
- ! ext/B/B/Assembler.pm
-____________________________________________________________________________
-[ 3919] By: jhi on 1999/08/04 10:56:26
- Log: Update history records.
- Branch: cfgperl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 3918] By: jhi on 1999/08/04 09:36:13
- Log: Minor fixes to linux -Dusethreads -Duseperlio.
- Branch: cfgperl
- ! perlio.c
-____________________________________________________________________________
-[ 3917] By: jhi on 1999/08/04 08:13:20
- Log: (Replaced by change #3921)
- From: paul.marquess@bt.com
- To: gsar@activestate.com
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.005_60] DB_File 1.69
- Date: Tue, 3 Aug 1999 22:55:00 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB29C6D04@mbtlipnt02.btlabs.bt.co.uk>
- Branch: cfgperl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs t/lib/db-btree.t t/lib/db-hash.t
-____________________________________________________________________________
-[ 3916] By: jhi on 1999/08/04 07:59:05
- Log: Introduce the charnames pragma.
-
- Subject: [PATCH 5.005_58] Free \C (for named chars), move to \O
- From: Ilya Zakharevich <[9]ilya@math.ohio-state.edu>
- To: Chip Salzenberg <[11]chip@perlsupport.com>
- Cc: Mailing list Perl5 <[12]perl5-porters@perl.org>
- Date: Sat, 31 Jul 1999 05:44:05 -0400
- Message-Id: <[13]199907311407.IAA25042@localhost.frii.com>
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_58] Named characters in Perl
- Date: Mon, 2 Aug 1999 19:25:40 -0400
- Message-ID: <19990802192540.B24407@monk.mps.ohio-state.edu>
- Branch: cfgperl
- + lib/charnames.pm t/lib/charnames.t
- ! MAINTAIN MANIFEST lib/utf8.pm pod/perldiag.pod pod/perlop.pod
- ! pod/perlre.pod regcomp.c toke.c
-____________________________________________________________________________
-[ 3915] By: jhi on 1999/08/03 21:18:49
- Log: Support Configure -Dmake=pmake.
- Via private email from Andy.
- NOTE: assumes "basename" command.
- Branch: metaconfig
- ! U/modified/Config_sh.U
-____________________________________________________________________________
-[ 3914] By: jhi on 1999/08/03 21:11:11
- Log: The op/filetest.t failed subtest 7 if testing as root.
-
- From: François Désarménien <desar@club-internet.fr>
- To: perl5-porters@perl.org
- Subject: [ID 19990727.039] Not OK: perl 5.00558 on i386-sco 3.2v5.0.4
- Date: Tue, 27 Jul 1999 22:54:05 +0200
- Message-Id: <379E1C6D.626DC765@club-internet.fr>
- Branch: cfgperl
- ! t/op/filetest.t
-____________________________________________________________________________
-[ 3911] By: jhi on 1999/08/03 19:52:38
- Log: The "-Dusethreads -Duseperlio" combination failed.
-
- From: Spider Boardman <spider@leggy.zk3.dec.com>
- To: perl5-porters@perl.org
- Subject: [ID 19990803.007] Not OK: perl 5.00560 on alpha-dec_osf-thread
- 4.0 (UNINSTALLED)
- Date: Tue, 3 Aug 1999 14:25:00 -0400
- Message-Id: <199908031825.OAA29254@leggy.zk3.dec.com>
-
- See also change #3912.
- Branch: cfgperl
- ! perlio.c
-____________________________________________________________________________
-[ 3910] By: jhi on 1999/08/03 10:44:24
- Log: From: Chris Nandor <pudge@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_58] perlbug.PL 1.27
- Date: Wed, 28 Jul 1999 23:42:49 -0400
- Message-Id: <v04210104b3c57ce9e3de@[152.167.11.247]>
- Branch: cfgperl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 3909] By: jhi on 1999/08/03 10:41:04
- Log: Hints for building ByteLoader in SunoS. Based on
- From: Andy Dougherty <doughera@lafayette.edu>
- To: Gurusamy Sarathy <gsar@activestate.com>
- Cc: Perl Porters <perl5-porters@perl.org>
- Subject: Re: 5.005_58 Not OK SunOS 4.1.3
- Date: Mon, 2 Aug 1999 14:01:58 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9908021357410.5873-100000@newton.phys>
- Branch: cfgperl
- + ext/ByteLoader/hints/sunos.pl
- ! MANIFEST ext/ByteLoader/ByteLoader.xs
-____________________________________________________________________________
-[ 3908] By: jhi on 1999/08/03 09:29:22
- Log: Clarify RE engine code; inline a static function to a macro;
- make exact string nodes smaller.
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_60] Cosmetic change to REx engine
- Date: Mon, 2 Aug 1999 21:53:36 -0400 (EDT)
- Message-Id: <199908030153.VAA10542@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! Makefile.SH embed.pl global.sym keywords.h lib/warning.pm
- ! opcode.h pp.sym pp_proto.h regcomp.c regcomp.h regexec.c
- ! regnodes.h warning.h
-____________________________________________________________________________
-[ 3907] By: jhi on 1999/08/03 08:11:49
- Log: 5_59 configured with -Dd_bincompat5005 can't be made
- binary compatible with a 5_03 which was built with -DEMBEDMYMALLOC.
-
- From: Spider Boardman <spider@leggy.zk3.dec.com>
- To: perl5-porters@perl.org
- Subject: [ID 19990802.016] Not OK: perl 5.00559
- Date: Mon, 2 Aug 1999 16:11:13 -0400
- Message-Id: <199908022011.QAA30224@leggy.zk3.dec.com>
- Branch: cfgperl
- ! embed.pl
-____________________________________________________________________________
-[ 3906] By: jhi on 1999/08/03 07:48:59
- Log: Change #3790 redemption: with a little additional
- patch from Ilya it works okay.
- Branch: cfgperl
- ! ext/SDBM_File/Makefile.PL lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MakeMaker.pm os2/OS2/REXX/Makefile.PL perl.h
-____________________________________________________________________________
-[ 3905] By: gsar on 1999/08/02 21:03:23
- Log: this will be 5.005_60
- Branch: perl
- ! Changes
-
-----------------
-Version 5.005_60
-----------------
-
-____________________________________________________________________________
-[ 3904] By: gsar on 1999/08/02 20:30:23
- Log: don't enable PERL_POLLUTE_MALLOC when EMBEDMYMALLOC is
- in effect (from Spider Boardman <spider@leggy.zk3.dec.com>);
- regen headers
- Branch: perl
- ! embed.h embed.pl global.sym opcode.h perlapi.c
-____________________________________________________________________________
-[ 3903] By: gsar on 1999/08/02 20:26:07
- Log: native int pack/unpack fixes (from Spider Boardman
- <spider@leggy.zk3.dec.com>)
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 3902] By: gsar on 1999/08/02 20:24:41
- Log: fix broken -DDEBUGGING_OPS (from Spider Boardman
- <spider@leggy.zk3.dec.com>)
- Branch: perl
- + opnames.h
- ! Changes MANIFEST opcode.pl perl.h
-____________________________________________________________________________
-[ 3901] By: gsar on 1999/08/02 18:51:18
- Log: integrate cfgperl contents
- Branch: perl
- !> INSTALL README pod/perldelta.pod
-____________________________________________________________________________
-[ 3900] By: jhi on 1999/08/02 18:46:21
- Log: Update README and INSTALL; partly based on the message
-
- From: "John L. Allen" <allen@grumman.com>
- To: Jarkko Hietaniemi <jhi@iki.fi>
- cc: perl5-porters@perl.org
- Subject: Re: Perl Installation Problem
- Date: Thu, 29 Jul 1999 14:55:05 -0400 (EDT)
- Message-ID: <Pine.SOL.3.91.990729144440.1035A-100000@gateway.grumman.com>
-
- and private email from Andy Dougherty.
- Branch: cfgperl
- ! INSTALL README
-____________________________________________________________________________
-[ 3899] By: jhi on 1999/08/02 18:36:35
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> op.c
-____________________________________________________________________________
-[ 3898] By: jhi on 1999/08/02 18:34:49
- Log: Update PERL_BINCOMPAT_5005; update 64-bitness.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3897] By: gsar on 1999/08/02 18:18:37
- Log: optimizations could sometimes bypass bareword check
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3896] By: jhi on 1999/08/02 18:18:34
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes makedef.pl patchlevel.h win32/Makefile
- !> win32/config_H.bc win32/config_H.gc win32/config_H.vc
- !> win32/makefile.mk
-____________________________________________________________________________
-[ 3895] By: gsar on 1999/08/02 17:22:40
- Log: up patchlevel etc.
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 3894] By: gsar on 1999/08/02 17:12:31
- Log: integrate change#3893, make it conditional on bincompat5005
- Branch: perl
- ! makedef.pl
-____________________________________________________________________________
-[ 3893] By: jhi on 1999/08/02 16:49:08
- Log: PERL_BINCOMPAT_5005 symbol translation.
- (AIX wouldn't link neither perl nor extensions.)
- Branch: cfgperl
- ! makedef.pl
-____________________________________________________________________________
-[ 3892] By: gsar on 1999/08/02 16:09:13
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> t/op/64bit.t
- ! Changes
- !> Configure MANIFEST config_h.SH doio.c dump.c hints/aix.sh op.c
- !> pod/perlfunc.pod pp_hot.c pp_sys.c regcomp.c sv.c t/io/open.t
- !> t/pragma/utf8.t t/pragma/warn/pp_hot toke.c util.c
-____________________________________________________________________________
-[ 3891] By: jhi on 1999/08/02 14:52:40
- Log: AIX long long probing requires LL suffix for
- the ll constant. The suffix doesn't seem
- to bother other ll platforms.
- Branch: cfgperl
- ! Configure config_h.SH hints/aix.sh
- Branch: metaconfig/U/perl
- ! quadfio.U
-____________________________________________________________________________
-[ 3890] By: jhi on 1999/08/02 14:21:55
- Log: Exact path to perl for open -|.
- Branch: cfgperl
- ! t/io/open.t
-____________________________________________________________________________
-[ 3889] By: jhi on 1999/08/02 14:18:03
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes patchlevel.h pod/perlhist.pod pp_ctl.c util.c
- !> win32/Makefile win32/config_H.bc win32/config_H.gc
- !> win32/config_H.vc win32/makefile.mk win32/win32.c
-____________________________________________________________________________
-[ 3888] By: jhi on 1999/08/02 14:14:29
- Log: AIX -Duse64bits: old AIXen do not have the getconf variables.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 3887] By: jhi on 1999/08/02 12:53:10
- Log: Fix some of the {IV_IS_QUAD,UV_IS_QUAD} cases so that
- emacs code indentation doesn't get wrong ideas--
- in other words, introduce a couple of "redundant" if:s.
- Branch: cfgperl
- ! doio.c dump.c op.c pp_hot.c pp_sys.c regcomp.c sv.c toke.c
- ! util.c
-____________________________________________________________________________
-[ 3886] By: jhi on 1999/08/02 12:43:16
- Log: Mention that also *BSD systems with glibc are known to stumble.
- Branch: cfgperl
- ! t/pragma/warn/pp_hot
-____________________________________________________________________________
-[ 3885] By: jhi on 1999/08/02 12:34:15
- Log: Allow also non-long long but still quad platforms print quads.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! longdblfio.U quadfio.U
-____________________________________________________________________________
-[ 3884] By: jhi on 1999/08/02 11:56:14
- Log: Fix regclass utf8 hex ranges for quads.
- Branch: cfgperl
- ! regcomp.c
-____________________________________________________________________________
-[ 3883] By: jhi on 1999/08/02 11:42:14
- Log: Enhance the description of how to detect quad support.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3882] By: jhi on 1999/08/02 11:22:19
- Log: Fix printf %D %U %O for quads.
- Branch: cfgperl
- ! sv.c t/op/64bit.t
-____________________________________________________________________________
-[ 3881] By: jhi on 1999/08/02 11:16:12
- Log: Document quad printing.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3880] By: jhi on 1999/08/02 10:32:01
- Log: More 64-bit fixing. One known bug of that kind
- remains, 32-bit platforms using long long in
- the test t/pragma/utf8 subtests 1-3 fail.
- (Update: change #3884 fixed that one.)
- Branch: cfgperl
- + t/op/64bit.t
- ! Configure MANIFEST config_h.SH regcomp.c sv.c t/pragma/utf8.t
-
-----------------
-Version 5.005_59
-----------------
-
-____________________________________________________________________________
-[ 3879] By: gsar on 1999/08/02 08:18:58
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure config_h.SH sv.c
-____________________________________________________________________________
-[ 3878] By: gsar on 1999/08/02 08:13:16
- Log: change#3692 had an unintentional patch leak through!
- (this would explain the mysterious C<next LABEL> failures
- people have seen)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 3877] By: gsar on 1999/08/02 08:00:29
- Log: up patchlevel to 59
- Branch: perl
- ! Changes patchlevel.h pod/perlhist.pod win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 3876] By: gsar on 1999/08/02 07:51:18
- Log: fix coredump under usethreads+debug
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 3875] By: jhi on 1999/08/02 07:50:51
- Log: d_bincompat5005 could be left empty.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! bincompat5005.U
-____________________________________________________________________________
-[ 3874] By: jhi on 1999/08/02 07:42:45
- Log: Fix printf %d when IV is quad.
- Branch: cfgperl
- ! sv.c
-____________________________________________________________________________
-[ 3873] By: gsar on 1999/08/02 07:41:03
- Log: fix d_bincompat5005='' junking config.h
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 3872] By: gsar on 1999/08/02 07:38:48
- Log: C needs parameter list, not merely type
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3871] By: jhi on 1999/08/02 07:20:51
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes ext/B/B/C.pm ext/B/B/CC.pm regexec.c
-____________________________________________________________________________
-[ 3870] By: gsar on 1999/08/02 07:12:18
- Log: integrate cfgperl changes into mainline
- Branch: perl
- ! Changes
- !> Configure Makefile.SH Porting/Glossary Porting/config.sh
- !> Porting/config_H config_h.SH doio.c dump.c mg.c op.c perl.h
- !> pp_ctl.c pp_hot.c pp_sys.c scope.c sv.c t/pragma/warn/sv
- !> toke.c util.c
-____________________________________________________________________________
-[ 3869] By: gsar on 1999/08/02 06:59:09
- Log: From: "Vishal Bhatia" <vishalb@my-deja.com>
- Date: Sat, 31 Jul 1999 19:08:33 -0700
- Message-ID: <LAONLKLELDJAFAAA@my-deja.com>
- Subject: [PATCH 5.005_58] "use constant" in the compiler
- Branch: perl
- ! ext/B/B/C.pm ext/B/B/CC.pm
-____________________________________________________________________________
-[ 3868] By: gsar on 1999/08/02 06:55:51
- Log: debug build tweak
- Branch: perl
- ! regexec.c
-____________________________________________________________________________
-[ 3867] By: gsar on 1999/08/02 06:35:18
- Log: create vmsperl branch (to be owned and operated by: cbailey)
- Branch: vmsperl
- +> (branch 1476 files)
-____________________________________________________________________________
-[ 3866] By: jhi on 1999/08/01 23:34:40
- Log: so_locations once is enough.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3865] By: jhi on 1999/08/01 23:13:05
- Log: Simplicate duplicated code.
- Branch: cfgperl
- ! util.c
-____________________________________________________________________________
-[ 3864] By: jhi on 1999/08/01 22:41:41
- Log: Integrate with Sarathy. perl.h and util.c required manual resolving.
- Branch: cfgperl
- +> README.cygwin cygwin/Makefile.SHs cygwin/ld2.in
- +> cygwin/perlld.in ext/DynaLoader/dl_cygwin.xs hints/cygwin.sh
- - README.cygwin32 cygwin32/Makefile.SHs
- - cygwin32/build-instructions.READFIRST
- - cygwin32/build-instructions.charles-wilson
- - cygwin32/build-instructions.sebastien-barre
- - cygwin32/build-instructions.steven-morlock
- - cygwin32/build-instructions.steven-morlock2 cygwin32/ld2.in
- - cygwin32/perlld.in ext/DynaLoader/dl_cygwin32.xs
- - hints/cygwin32.sh
- !> (integrate 61 files)
-____________________________________________________________________________
-[ 3863] By: jhi on 1999/08/01 22:36:02
- Log: Regen Configure and Glossary once again.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 3862] By: jhi on 1999/08/01 22:26:09
- Log: Glossary update for #3861.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 3861] By: jhi on 1999/08/01 22:22:51
- Log: 64-bit work. Now 32-bit platforms get a 100% make test
- with -Duse64bits (using long long).
- Tested in Solaris 2.6 sparc RH Linux 6.0 x86
- (and Digital IX 4.0D, to get a true 64-bit opinion). Now e.g.
- 'print unpack "q", pack "q", 12345678901'
- should work on such 32-bit platforms.
- Still a lot of printf()s behind -D which wrongly assume
- that %ld/%lx and (long) are a good combination.
- Introducing a slew of new macros intended to be used in printf()
- format strings: e. g. PERL_PRId64 is the string to be used
- when printing an IV, printf("%" PERL_PRId64 "\n", iv).
- The PRI... naming follows the C9X naming of <inttypes.h> macros.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH doio.c dump.c mg.c op.c perl.h pp_ctl.c pp_hot.c
- ! pp_sys.c scope.c sv.c t/pragma/warn/sv toke.c util.c
- Branch: metaconfig/U/perl
- + atolf.U atoll.U longdblfio.U quadfio.U strtoull.U
-____________________________________________________________________________
-[ 3860] By: gsar on 1999/08/01 21:23:18
- Log: integrate cfgperl contents into mainline
- Branch: perl
- ! toke.c
- !> (integrate 29 files)
-____________________________________________________________________________
-[ 3859] By: gsar on 1999/08/01 21:13:09
- Log: From: Nathan Torkington <gnat@frii.com>
- Date: Sun, 1 Aug 1999 11:23:35 -0600 (MDT)
- Message-ID: <14244.33431.739419.806927@localhost.frii.com>
- Subject: [PATCH 5.005_58] ext/B/B/Disassembler.pm patch
- Branch: perl
- ! ext/B/B/Disassembler.pm
-____________________________________________________________________________
-[ 3858] By: gsar on 1999/08/01 21:09:15
- Log: DB_File 1.68 update from Paul Marquess
- Branch: perl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs t/lib/db-btree.t t/lib/db-hash.t
- ! t/lib/db-recno.t
-____________________________________________________________________________
-[ 3857] By: gsar on 1999/08/01 21:05:54
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 31 Jul 1999 05:13:38 -0400
- Message-Id: <199907311407.IAA25038@localhost.frii.com>
- Subject: [PATCH 5.005_58] More optimizations to REx engine
- Branch: perl
- ! embed.pl embedvar.h ext/Thread/Thread.xs objXSUB.h perl.c
- ! perl.h proto.h regcomp.c regexec.c t/op/re_tests thrdvar.h
-____________________________________________________________________________
-[ 3856] By: gsar on 1999/08/01 20:59:59
- Log: slightly modified version of suggested patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 31 Jul 1999 04:45:12 -0400
- Message-Id: <199907311406.IAA25034@localhost.frii.com>
- Subject: [PATCH 5.005_58] Fix OS/2 build
- Branch: perl
- ! Makefile.SH lib/ExtUtils/MM_OS2.pm lib/ExtUtils/Mksymlists.pm
- ! makedef.pl os2/Makefile.SHs os2/diff.configure perl.h sv.h
-____________________________________________________________________________
-[ 3855] By: gsar on 1999/08/01 20:49:06
- Log: cygwin update
- From: "Fifer, Eric" <EFifer@sanwaint.com>
- Date: Fri, 30 Jul 1999 18:31:48 +0100
- Message-Id: <71E287AB0D94D111BBD600600849EC8185EE06@POST>
- Subject: [ID 19990730.003] PATCH] perl5.005_58 cygwin port
- Branch: perl
- ! doio.c dosish.h lib/File/Spec/Unix.pm mg.c perl.h perlsdio.h
- ! pp_sys.c unixish.h util.c
-____________________________________________________________________________
-[ 3854] By: gsar on 1999/08/01 20:41:53
- Log: fixes from Stephen McCamant that address bugs in change#3612
- (the optimization shouldn't be enabled in expressions where
- the variable is introduced), and fix Deparse to grok the
- optimization
- Date: Thu, 29 Jul 1999 21:21:49 -0500 (CDT)
- Message-ID: <14241.3133.979257.953396@alias-2.pr.mcs.net>
- Subject: [PATCH _58] Set OPpTARGET_MY more consistently
- --
- Date: Thu, 29 Jul 1999 22:31:16 -0500 (CDT)
- Message-ID: <14241.7300.181386.763503@alias-2.pr.mcs.net>
- Subject: [PATCH _58] Disable TARGET_MY-ization on variable introduction
- --
- Date: Fri, 30 Jul 1999 22:25:27 -0500 (CDT)
- Message-Id: <199907310326.VAA24376@localhost.frii.com>
- Subject: [PATCH _58, long] B::Deparse (was Re: New warning 'Useless use of...')
- Branch: perl
- ! ext/B/B/Deparse.pm op.c
-____________________________________________________________________________
-[ 3853] By: gsar on 1999/08/01 20:31:32
- Log: From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Thu, 29 Jul 1999 14:08:50 -0500 (CDT)
- Message-ID: <14240.42690.292893.605292@alias-2.pr.mcs.net>
- Subject: [PATCH _58] Two one-liner LOGOP tweaks
- Branch: perl
- ! op.c opcode.h opcode.pl
-____________________________________________________________________________
-[ 3852] By: gsar on 1999/08/01 20:29:17
- Log: rename cygwin32 to cygwin (from Eric Fifer <EFifer@sanwaint.com>)
- Branch: perl
- ! AUTHORS EXTERN.h INSTALL MAINTAIN Makefile.SH Porting/patchls
- ! README.cygwin README.win32 XSUB.h cygwin/Makefile.SHs
- ! ext/DynaLoader/dl_cygwin.xs ext/POSIX/POSIX.xs
- ! ext/SDBM_File/sdbm/pair.c hints/cygwin.sh
- ! lib/ExtUtils/MM_Cygwin.pm makedepend.SH perl.h pod/perl.pod
- ! pod/perlport.pod pp_sys.c util.c
-____________________________________________________________________________
-[ 3851] By: gsar on 1999/08/01 20:20:05
- Log: move files around for s/cygwin32/cygwin/ renaming
- Branch: perl
- +> README.cygwin cygwin/Makefile.SHs cygwin/ld2.in
- +> cygwin/perlld.in ext/DynaLoader/dl_cygwin.xs hints/cygwin.sh
- - README.cygwin32 cygwin32/Makefile.SHs
- - cygwin32/build-instructions.READFIRST
- - cygwin32/build-instructions.charles-wilson
- - cygwin32/build-instructions.sebastien-barre
- - cygwin32/build-instructions.steven-morlock
- - cygwin32/build-instructions.steven-morlock2 cygwin32/ld2.in
- - cygwin32/perlld.in ext/DynaLoader/dl_cygwin32.xs
- - hints/cygwin32.sh
- ! MANIFEST
-____________________________________________________________________________
-[ 3850] By: gsar on 1999/08/01 20:05:14
- Log: posix-bc hints tweak (via private mail from Thomas Dorner
- <Thomas.Dorner@start.de>)
- Branch: perl
- ! Changes hints/posix-bc.sh
-____________________________________________________________________________
-[ 3849] By: gsar on 1999/08/01 19:50:20
- Log: notes on PERL_IMPLICIT_CONTEXT (from a version by Nathan Torkington
- <gnat@frii.com>)
- Branch: perl
- ! perl.h pod/perldelta.pod pod/perlguts.pod
-____________________________________________________________________________
-[ 3848] By: gsar on 1999/08/01 18:34:41
- Log: fix defined(@foo) encarpments
- Branch: perl
- ! ext/B/B/C.pm lib/CGI.pm lib/Dumpvalue.pm lib/dumpvar.pl
- ! pod/perltrap.pod
-____________________________________________________________________________
-[ 3847] By: jhi on 1999/08/01 17:17:07
- Log: Undo #3790 and the patches that attempted to fix it
- (#3837, #3838, #3845). The #3790 caused linkage failures
- and/or core dumps in Solaris 2.6, Digital UNIX 4.0D, and
- IRIX 6.5.
- Branch: cfgperl
- - ext/SDBM_File/hints/dec_osf.pl ext/SDBM_File/hints/solaris.pl
- ! MANIFEST ext/SDBM_File/Makefile.PL lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MakeMaker.pm os2/OS2/REXX/Makefile.PL perl.h
-____________________________________________________________________________
-[ 3846] By: jhi on 1999/08/01 11:41:52
- Log: Reading 64-bit decimal numbers was broken because
- the NV was cast to an I32, not an IV.
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 3845] By: jhi on 1999/08/01 11:00:24
- Log: Solaris doesn't like PERL_MALLOC_OK in SDBM_File.
- Branch: cfgperl
- + ext/SDBM_File/hints/solaris.pl
-____________________________________________________________________________
-[ 3844] By: jhi on 1999/08/01 10:55:44
- Log: Enable Solaris largefiles support only if -Duse64bits is used.
- (Effectively removes #3311).
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 3843] By: jhi on 1999/07/31 22:44:56
- Log: Integer overflow iteration.
- Branch: cfgperl
- ! t/op/oct.t toke.c util.c
-____________________________________________________________________________
-[ 3842] By: jhi on 1999/07/31 22:11:03
- Log: Remove a lot of unused regnode codes.
- Noticed by Ilya.
- Branch: cfgperl
- ! regcomp.c regcomp.sym regexec.c regnodes.h
-____________________________________________________________________________
-[ 3841] By: jhi on 1999/07/31 21:53:54
- Log: Make the use64bits and usethreads friendlier/braver;
- they no more wimp out if the platform is unknown.
- On use64bits if gcc used -DUSE_LONG_LONG is added
- to the ccflags (this dependency on gcc caused a slightly weird
- reordering of Configure, but things still seem to work.)
- Branch: cfgperl
- ! Configure README.threads config_h.SH
- Branch: metaconfig
- ! U/threads/usethreads.U
- Branch: metaconfig/U/perl
- ! use64bits.U
-____________________________________________________________________________
-[ 3840] By: jhi on 1999/07/31 20:26:22
- Log: Hack the "integer overflow" code some more.
- Branch: cfgperl
- ! perl.h toke.c util.c
-____________________________________________________________________________
-[ 3839] By: jhi on 1999/07/31 20:22:00
- Log: Test oct() at the 2^32-1 limit.
- Branch: cfgperl
- ! t/op/oct.t
-____________________________________________________________________________
-[ 3838] By: jhi on 1999/07/31 20:08:43
- Log: Update MANIFEST for #3837.
- Branch: cfgperl
- ! MANIFEST
-____________________________________________________________________________
-[ 3837] By: jhi on 1999/07/31 20:02:40
- Log: Digital UNIX 4.0D doesn't like perl malloc on sdbm
- (a core dump with a corrput stack ensues).
- Branch: cfgperl
- + ext/SDBM_File/hints/dec_osf.pl
-____________________________________________________________________________
-[ 3836] By: jhi on 1999/07/29 21:09:01
- Log: Allow for Configure -Ubincompat5005 override.
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: metaconfig/U/perl
- ! bincompat5005.U
-____________________________________________________________________________
-[ 3835] By: jhi on 1999/07/29 21:04:02
- Log: Make Configure support PERL_BINCOMPAT_5005.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
- Branch: metaconfig/U/perl
- + bincompat5005.U
-____________________________________________________________________________
-[ 3834] By: jhi on 1999/07/29 19:25:35
- Log: AIX tweak, need reported by David R. Fravor <dfavor@austin.ibm.com>
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3833] By: jhi on 1999/07/29 14:07:09
- Log: Integrate with Sarathy. I overruled on perldelta
- and perldiag.
- Branch: cfgperl
- !> README.win32 emacs/cperl-mode.el globals.c installperl
- !> iperlsys.h makedef.pl perl.h pod/perldelta.pod
- !> pod/perldiag.pod pod/perllexwarn.pod toke.c utils/perldoc.PL
- !> win32/Makefile win32/bin/pl2bat.pl win32/makefile.mk
- !> win32/perllib.c win32/win32.c
-____________________________________________________________________________
-[ 3832] By: jhi on 1999/07/29 14:02:50
- Log: Repent and make overly large integerish
- constants non-fatal. They are now promoted
- to NVs, accompanied by an overflow warning that
- is by default on.
- Branch: cfgperl
- ! embed.pl global.sym pod/perldelta.pod pod/perldiag.pod pp.c
- ! proto.h t/op/oct.t t/pragma/warn/6default t/pragma/warn/util
- ! toke.c util.c
-____________________________________________________________________________
-[ 3831] By: jhi on 1999/07/29 11:40:04
- Log: AIX exhibits different error on failed system().
- Slightly modified patch via private email from
- David R. Favor <dfavor@austin.ibm.com>
- Branch: cfgperl
- ! t/op/exec.t
-____________________________________________________________________________
-[ 3830] By: gsar on 1999/07/29 07:46:11
- Log: cperl-mode.el v4.19
- Branch: perl
- ! emacs/cperl-mode.el
-____________________________________________________________________________
-[ 3829] By: gsar on 1999/07/29 07:30:35
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 28 Jul 1999 22:01:42 +0200
- Message-ID: <37aa5f9b.12941448@smtp1.ibm.net>
- Subject: [PATCH 5.005_58] win32/bin/pl2bat.pl doesn't work correctly
- Branch: perl
- ! win32/bin/pl2bat.pl
-____________________________________________________________________________
-[ 3828] By: gsar on 1999/07/29 07:19:27
- Log: tweak previous change for multiple hits
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 3827] By: gsar on 1999/07/29 07:10:00
- Log: band-aid for perldoc -t broken-ness (the new Pod::Text
- really needs a pod2text() compatibility function)
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 3826] By: gsar on 1999/07/29 01:33:46
- Log: minor tweaks to pods and toke.c comments
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod pod/perllexwarn.pod toke.c
-____________________________________________________________________________
-[ 3825] By: gsar on 1999/07/29 00:12:52
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> README.threads config_h.SH ext/IO/lib/IO/Handle.pm
- !> ext/IO/lib/IO/Socket.pm ext/IO/lib/IO/Socket/INET.pm
- !> ext/POSIX/POSIX.xs lib/ExtUtils/Install.pm perl.h
- !> pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- !> pod/perllexwarn.pod pod/perlre.pod pp.c pp_sys.c
- !> t/lib/io_unix.t t/op/oct.t t/pragma/warn/6default
- !> t/pragma/warn/util toke.c util.c
-____________________________________________________________________________
-[ 3824] By: jhi on 1999/07/28 21:15:04
- Log: Tiny patch to go over #3820 (via private mail from Lincoln).
- Branch: cfgperl
- ! ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Socket.pm
- ! ext/IO/lib/IO/Socket/INET.pm
-____________________________________________________________________________
-[ 3823] By: jhi on 1999/07/28 20:29:17
- Log: Continue pack() doc honing.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3822] By: jhi on 1999/07/28 20:17:37
- Log: Enhance pack() doc.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3821] By: jhi on 1999/07/28 18:34:50
- Log: UNIX Domain Sockets are not implemented under QNX.
-
- From: Norton Allen <allen@huarp.harvard.edu>
- To: perl5-porters@perl.org
- Subject: [ID 19990728.010] Patch:t/lib/io_unix.t _58 QNX
- Date: Wed, 28 Jul 1999 14:07:16 -0400 (edt)
- Message-Id: <199907281807.OAA13167@bottesini.harvard.edu>
- Branch: cfgperl
- ! t/lib/io_unix.t
-____________________________________________________________________________
-[ 3820] By: jhi on 1999/07/28 18:13:37
- Log: IO::* enhancements.
-
- 1) write() and syswrite() will now accept a single-argument
- form of the call, for consistency with Perl's syswrite().
- 2) You can create a TCP-based IO::Socket::INET without forcing
- a connect attempt. This allows you to configure its options
- (like making it non-blocking) and then call connect() manually.
- 3) Fixed a bug that prevented the IO::Socket::protocol() accessor
- from ever returning the correct value.
-
- From: Lincoln Stein <lstein@formaggio.cshl.org>
- To: Graham Barr <gbarr@pobox.com>
- Cc: Lincoln Stein <lstein@cshl.org>, perl5-porters@perl.org
- Subject: Re: patch for IO::*
- Date: Wed, 28 Jul 1999 13:55:05 -0400 (EDT)
- Message-ID: <14239.17401.330408.145295@formaggio.cshl.org>
- Branch: cfgperl
- ! ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Socket.pm
- ! ext/IO/lib/IO/Socket/INET.pm
-____________________________________________________________________________
-[ 3819] By: gsar on 1999/07/28 18:08:06
- Log: misc PERL_OBJECT tweaks; perlcore.dll is now perl56.dll
- Branch: perl
- ! README.win32 globals.c installperl iperlsys.h makedef.pl
- ! perl.h win32/Makefile win32/makefile.mk win32/perllib.c
- ! win32/win32.c
-____________________________________________________________________________
-[ 3818] By: jhi on 1999/07/28 17:48:16
- Log: Need to add QNX to the list for DONT_DECLARE_STD.
- (The elimination of use of the _() macro apparently triggered
- an incompatability with a #define of atof)
-
- From: Norton Allen <allen@huarp.harvard.edu>
- To: perl5-porters@perl.org
- Subject: [ID 19990728.008] Patch:perl.h _58 QNX
- Date: Wed, 28 Jul 1999 13:06:23 -0400 (edt)
- Message-Id: <199907281706.NAA07617@bottesini.harvard.edu>
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 3817] By: jhi on 1999/07/28 17:46:30
- Log: Need to add some more conditions to deal with the case
- defined(HAS_GETSPNAM) && ! defined(HAS_GETSPENT)
- which is true for QNX4.
- From: Norton Allen <allen@huarp.harvard.edu>
- To: perl5-porters@perl.org
- Subject: [ID 19990728.009] Patch:pp_sys.c _58 QNX
- Date: Wed, 28 Jul 1999 13:08:42 -0400 (edt)
- Message-Id: <199907281708.NAA07947@bottesini.harvard.edu>
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 3816] By: jhi on 1999/07/28 17:43:40
- Log: The QNX shell needs a couple more semicolons.
-
- From: Norton Allen <allen@huarp.harvard.edu>
- To: perl5-porters@perl.org
- Subject: [ID 19990728.007] Patch:Configure _58 QNX
- Date: Wed, 28 Jul 1999 13:03:00 -0400 (edt)
- Message-Id: <199907281703.NAA07363@bottesini.harvard.edu>
-
- plus silence metalint moanings on vendorprefix.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 3815] By: jhi on 1999/07/28 17:31:11
- Log: Silence metalint on vendorprefix.U.
- Branch: metaconfig
- ! U/installdirs/vendorprefix.U
-____________________________________________________________________________
-[ 3814] By: jhi on 1999/07/28 17:13:29
- Log: QNX shell needs more semicolons.
- Branch: metaconfig/U/perl
- ! Extensions.U
-____________________________________________________________________________
-[ 3813] By: jhi on 1999/07/28 17:05:08
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 3812] By: jhi on 1999/07/28 16:20:17
- Log: Fix a typo, un-shout, and reformat the installation output.
- Branch: cfgperl
- ! lib/ExtUtils/Install.pm
-____________________________________________________________________________
-[ 3811] By: gsar on 1999/07/28 15:41:11
- Log: fix typo that caused INSTALLPRIVLIB to have doubled 'perl5'
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 3810] By: jhi on 1999/07/28 13:55:57
- Log: Talk more about subsecond things in perlfunc.
- (Yes, redundant with perlfaq8.)
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3809] By: jhi on 1999/07/28 07:23:48
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> configpm hints/freebsd.sh lib/Pod/Html.pm perl.h t/op/grent.t
- !> t/op/pwent.t
-____________________________________________________________________________
-[ 3808] By: jhi on 1999/07/28 07:23:03
- Log: Document toke.c.
- From: Nathan Torkington <gnat@frii.com>
- To: perl5-porters@perl.org
- Subject: Re: toke.c patch, work in progress
- Date: Tue, 27 Jul 1999 23:02:09 -0600 (MDT)
- Message-ID: <14238.36561.979473.667842@localhost.frii.com>
- Branch: cfgperl
- ! toke.c
-____________________________________________________________________________
-[ 3807] By: jhi on 1999/07/28 07:10:56
- Log: perlre clarification.
-
- From: Ian Phillipps <ian@dial.pipex.com>
- To: Perl 5 Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.00557] Add definite article to perlre.pod
- Date: Tue, 27 Jul 1999 10:46:29 +0100
- Message-ID: <19990727104629.A10074@homer.diplex.co.uk>
- Branch: cfgperl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 3806] By: gsar on 1999/07/28 07:07:46
- Log: fix the perl -V breakage
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Jarkko Hietaniemi <jhi@iki.fi>
- Cc: "John L. Allen" <allen@grumman.com>, perl5-porters@perl.org,
- gsar@activestate.com
- Subject: Re: Follow up to: _58 on AIX 431
- Date: Tue, 27 Jul 1999 17:42:00 -0400
- Message-ID: <19990727174200.A12775@monk.mps.ohio-state.edu>
- Branch: perl
- ! configpm
-____________________________________________________________________________
-[ 3805] By: gsar on 1999/07/28 07:03:34
- Log: avoid warning (from Doug MacEachern)
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 3804] By: gsar on 1999/07/28 06:59:30
- Log: Pod::Html tweak
-
- From: jan.dubois@ibm.net (Jan Dubois)
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_58] pod2html: Missing chunk for VMS filenames
- Date: Tue, 27 Jul 1999 22:14:12 +0200
- Message-ID: <37a50af0.46171380@smtp1.ibm.net>
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 3803] By: gsar on 1999/07/28 06:56:38
- Log: freebsd hints update
-
- From: Anton Berezin <tobez@plab.ku.dk>
- To: perl5-porters@perl.org
- Subject: [ID 19990727.034] Not OK: perl 5.00558 on i386-freebsd-thread4.0-current (UNINSTALLED)
- Date: Tue, 27 Jul 1999 20:29:39 +0200 (CEST)
- Message-Id: <199907271829.UAA62861@lion.plab.ku.dk>
- Branch: perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 3802] By: gsar on 1999/07/28 06:51:32
- Log: cosmetic testsuite patch
-
- From: Graham Barr <gbarr@ti.com>
- To: Perl5 Porters <perl5-porters@perl.org>
- Subject: 5.005_58 build
- Date: Tue, 27 Jul 1999 08:09:25 -0500
- Message-ID: <19990727080925.F4683@dal.asp.ti.com>
- Branch: perl
- ! t/op/grent.t t/op/pwent.t
-____________________________________________________________________________
-[ 3801] By: jhi on 1999/07/27 13:49:39
- Log: Minuscule cleanup of the integer overflow patch.
- Branch: cfgperl
- ! util.c
-____________________________________________________________________________
-[ 3800] By: jhi on 1999/07/27 13:37:23
- Log: Test hex('x...').
- Branch: cfgperl
- ! t/op/oct.t
-____________________________________________________________________________
-[ 3799] By: jhi on 1999/07/27 12:45:45
- Log: Integrate with Sarathy (5.005_58).
- Branch: cfgperl
- - ext/B/byteperl.c
- !> Changes MANIFEST Porting/makerel configpm embed.h embed.pl
- !> ext/Devel/DProf/DProf.xs ext/POSIX/POSIX.pm
- !> ext/SDBM_File/Makefile.PL lib/AutoLoader.pm
- !> lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
- !> lib/Pod/Parser.pm lib/SelfLoader.pm os2/OS2/REXX/Makefile.PL
- !> perl.h pod/perldelta.pod pod/perlfaq9.pod pod/perlhist.pod
- !> win32/bin/pl2bat.pl win32/config_H.bc win32/config_H.gc
- !> win32/config_H.vc
-____________________________________________________________________________
-[ 3798] By: jhi on 1999/07/27 12:42:43
- Log: Integer constants (0x, 0[0-7], 0b) now overflow fatally,
- they used to be just optional lexical warnings.
- Also, with warnings turned on, constants > 2**32-1
- trigger a non-portability warning.
- Branch: cfgperl
- ! pod/perldelta.pod pod/perldiag.pod pod/perllexwarn.pod pp.c
- ! t/op/oct.t t/pragma/warn/6default t/pragma/warn/util toke.c
- ! util.c
-____________________________________________________________________________
-[ 3797] By: gsar on 1999/07/27 10:48:27
- Log: here lies 5.005_58
- Branch: perl
- - ext/B/byteperl.c
- ! Changes MANIFEST Porting/makerel pod/perldelta.pod
- ! pod/perlfaq9.pod pod/perlhist.pod
-
-----------------
-Version 5.005_58
-----------------
-
-____________________________________________________________________________
-[ 3796] By: gsar on 1999/07/27 09:23:42
- Log: regenerate win32/config_H.?c
- Branch: perl
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 3795] By: gsar on 1999/07/27 09:02:31
- Log: From: Tye McQueen <tye@metronet.com>
- Date: Mon, 26 Jul 1999 19:19:22 -0500 (CDT)
- Message-Id: <199907270019.AA08223@metronet.com>
- Subject: Patch pl2bat.pl so batch file can fail
- Branch: perl
- ! win32/bin/pl2bat.pl
-____________________________________________________________________________
-[ 3794] By: gsar on 1999/07/27 08:59:58
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 26 Jul 1999 01:09:00 -0400 (EDT)
- Message-Id: <199907260509.BAA26303@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_57] decrease memory footprint of standard modules
- Branch: perl
- ! configpm ext/POSIX/POSIX.pm lib/AutoLoader.pm
- ! lib/SelfLoader.pm
-____________________________________________________________________________
-[ 3793] By: gsar on 1999/07/27 08:19:16
- Log: support -DPERL_BINCOMPAT_5005, still needs a Configure test
- (from Andy Dougherty)
- Branch: perl
- ! embed.h embed.pl
-____________________________________________________________________________
-[ 3792] By: gsar on 1999/07/27 08:04:19
- Log: recognize more constructs such as C<$-> in pod (from Russ Allbery
- and Brad Appleton)
- Branch: perl
- ! lib/Pod/Parser.pm
-____________________________________________________________________________
-[ 3791] By: gsar on 1999/07/27 07:50:54
- Log: cover case where CLK_TCK is a float, not integer (from
- alexander smishlajev <als@turnhere.com>)
- Branch: perl
- ! ext/Devel/DProf/DProf.xs
-____________________________________________________________________________
-[ 3790] By: gsar on 1999/07/27 07:45:08
- Log: provide MakeMaker attribute PERL_MALLOC_OK that allows extensions
- to call Perl_malloc() as malloc() (from Ilya Zakharevich)
- Branch: perl
- ! ext/SDBM_File/Makefile.PL lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MakeMaker.pm os2/OS2/REXX/Makefile.PL perl.h
-____________________________________________________________________________
-[ 3789] By: jhi on 1999/07/27 07:44:55
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> lib/Pod/Text/Color.pm lib/Pod/Text/Termcap.pm
- !> MANIFEST doio.c embed.h embed.pl ext/B/B/CC.pm
- !> ext/SDBM_File/sdbm/sdbm.h global.sym lib/Pod/Html.pm
- !> lib/Pod/Text.pm objXSUB.h opcode.h opcode.pl perlapi.c
- !> pod/perldiag.pod pod/perlfunc.pod pod/pod2text.PL pp_sys.c
- !> proto.h t/comp/proto.t t/io/open.t
-____________________________________________________________________________
-[ 3788] By: gsar on 1999/07/27 07:29:59
- Log: replace Pod::Text with Pod::SimpleText v0.01 (thanks
- to Russ Allbery <rra@stanford.edu>); s/Simple// and
- s/pod2txt/pod2text/ etc.
- Branch: perl
- + lib/Pod/Text/Color.pm lib/Pod/Text/Termcap.pm
- ! MANIFEST lib/Pod/Text.pm pod/pod2text.PL
-____________________________________________________________________________
-[ 3787] By: gsar on 1999/07/27 06:48:40
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- Date: Wed, 16 Jun 1999 14:40:09 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9906161435390.248-100000@newton.phys>
- Subject: Re: [ID 19990608.003] my_bcopy problem; Unixware 2.0.3
- Branch: perl
- ! ext/SDBM_File/sdbm/sdbm.h
-____________________________________________________________________________
-[ 3786] By: gsar on 1999/07/27 06:30:09
- Log: applied suggested patch; added missing prototype changes to
- opcode.pl along with documentation typos (feature still needs
- to be described in perlopentut.pod and summarized in
- perldelta.pod)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 17 Jun 1999 00:39:34 -0400 (EDT)
- Message-Id: <199906170439.AAA18154@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00557] 3-arg open
- Branch: perl
- ! doio.c embed.h embed.pl global.sym objXSUB.h opcode.h
- ! opcode.pl perlapi.c pod/perldiag.pod pod/perlfunc.pod pp_sys.c
- ! proto.h t/comp/proto.t t/io/open.t
-____________________________________________________________________________
-[ 3785] By: gsar on 1999/07/27 04:36:39
- Log: don't quit if =head* wasn't found (suggested by Roland Bauer
- <roland.bauer@fff.at>)
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 3784] By: gsar on 1999/07/27 03:56:17
- Log: change#3762 wasn't needed
- Branch: perl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 3783] By: jhi on 1999/07/26 19:08:21
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes makedef.pl patchlevel.h pod/perlfunc.pod pp_ctl.c
- !> toke.c utils/dprofpp.PL win32/Makefile win32/config_H.bc
- !> win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 3782] By: gsar on 1999/07/26 18:16:50
- Log: update Changes, patchlevel &c.
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 3781] By: gsar on 1999/07/26 17:54:47
- Log: a more correct fix for change#2744
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Sun, 25 Jul 1999 14:02:25 -0500 (CDT)
- Message-ID: <14235.24385.671437.246345@alias-2.pr.mcs.net>
- Subject: [PATCH _57] Re: toke.c questions
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 3780] By: gsar on 1999/07/26 17:37:04
- Log: utime() doc typo from Greg Bacon <gbacon@itsc.uah.edu>
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3779] By: jhi on 1999/07/26 16:37:23
- Log: Dusting off.
- Branch: cfgperl
- ! README.threads
-____________________________________________________________________________
-[ 3778] By: gsar on 1999/07/26 13:28:46
- Log: avoid DIVZERO
- Branch: perl
- ! utils/dprofpp.PL
-____________________________________________________________________________
-[ 3777] By: gsar on 1999/07/26 13:18:53
- Log: warnings identified by Borland compiler
- Branch: perl
- ! makedef.pl pp_ctl.c
-____________________________________________________________________________
-[ 3776] By: jhi on 1999/07/26 13:07:36
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> lib/Carp/Heavy.pm pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 3775] By: gsar on 1999/07/26 12:55:43
- Log: avoid infinite recursion when Thread.pm croaks during
- bootstrap
- Branch: perl
- ! lib/Carp/Heavy.pm
-____________________________________________________________________________
-[ 3774] By: gsar on 1999/07/26 12:43:02
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> lib/Carp/Heavy.pm
- !> MANIFEST Makefile.SH cflags.SH configpm ext/util/make_ext
- !> lib/AutoSplit.pm lib/Carp.pm makedepend.SH pod/pod2html.PL
- !> pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL
- !> pod/pod2usage.PL pod/podchecker.PL pod/podselect.PL
- !> writemain.SH x2p/Makefile.SH x2p/cflags.SH
-____________________________________________________________________________
-[ 3773] By: jhi on 1999/07/26 12:40:29
- Log: Use long doubles only if they are useful.
- Branch: cfgperl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 3772] By: gsar on 1999/07/26 12:33:11
- Log: typo in change#3768
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 3771] By: gsar on 1999/07/26 12:08:27
- Log: alpha-stage support for user-hooks in @INC
- From: Ken Fox <kfox@ford.com>
- Date: Mon, 19 Jul 1999 22:12:29 -0400 (EDT)
- Message-Id: <199907200213.WAA02816@mailfw2.ford.com>
- Subject: Re: loading remote modules
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 3770] By: jhi on 1999/07/26 11:38:36
- Log: Back out #3735. Needs more work.
- Branch: cfgperl
- ! Makefile.SH cflags.SH configpm ext/util/make_ext
- ! lib/AutoSplit.pm makedepend.SH pod/pod2html.PL
- ! pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL
- ! pod/pod2usage.PL pod/podchecker.PL pod/podselect.PL
- ! writemain.SH x2p/Makefile.SH x2p/cflags.SH
-____________________________________________________________________________
-[ 3769] By: jhi on 1999/07/26 11:24:45
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 35 files)
-____________________________________________________________________________
-[ 3768] By: gsar on 1999/07/26 11:03:07
- Log: optimize method name lookup
- From: Chip Salzenberg <chip@perlsupport.com>
- Date: Thu, 22 Jul 1999 13:43:36 -0400
- Message-ID: <19990722134336.Q391@perlsupport.com>
- Subject: [PATCH] OP_METHOD_NAMED
- Branch: perl
- ! dump.c embed.h embed.pl ext/Opcode/Opcode.pm objXSUB.h op.c
- ! opcode.h opcode.pl perlapi.c pp.sym pp_hot.c pp_proto.h
- ! proto.h
-____________________________________________________________________________
-[ 3767] By: gsar on 1999/07/26 10:44:11
- Log: allow arrow omission in $foo[10]->('foo') etc. (but not in
- foo()->()); rework grammar to remove conflicts
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Fri, 23 Jul 1999 15:55:22 -0500 (CDT)
- Message-ID: <14232.54970.771570.548676@alias-2.pr.mcs.net>
- Subject: [PATCH _57, long] Re: optional arrow asymmetry
- Branch: perl
- ! Makefile.SH embed.h embed.pl global.sym objXSUB.h op.c
- ! perlapi.c perly.c perly.h perly.y perly_c.diff proto.h
- ! vms/perly_c.vms vms/perly_h.vms
-____________________________________________________________________________
-[ 3766] By: jhi on 1999/07/26 10:18:56
- Log: Use $< instead of $*.c in *perlmain.o rules.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3765] By: gsar on 1999/07/26 09:28:48
- Log: From: Ian Phillipps <ian@dial.pipex.com>
- Date: Fri, 23 Jul 1999 23:35:56 +0100
- Message-ID: <19990723233556.B2435@homer.diplex.co.uk>
- Subject: (Version 2) Extending unpack to deal with counted strings
- Branch: perl
- ! pod/perldiag.pod pod/perlfunc.pod pp.c t/op/pack.t
-____________________________________________________________________________
-[ 3764] By: jhi on 1999/07/26 09:17:26
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_57] Lean Carp.pm with Carp/Heavy.pm
- Date: Mon, 26 Jul 1999 04:05:27 -0400 (EDT)
- Message-Id: <199907260805.EAA26888@monk.mps.ohio-state.edu>
-
- The patch was based on 5_57 so had to re-apply lib/Carp.pm
- parts of changes #3498, #3696, and #3702 for the new
- lib/Carp/Heavy.pm.
- Branch: cfgperl
- + lib/Carp/Heavy.pm
- ! MANIFEST lib/Carp.pm
-____________________________________________________________________________
-[ 3763] By: gsar on 1999/07/26 09:03:17
- Log: ~ isn't valid in VMS filenames
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 3762] By: gsar on 1999/07/26 08:59:47
- Log: setstate stop-gap from Vishal Bhatia
- Branch: perl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 3761] By: gsar on 1999/07/26 08:06:39
- Log: patch for pp_foo -> Perl_pp_foo changes from Vishal Bhatia;
- add B::OP::name() method that returns just the op_name;
- convert Deparse et all to use that instead of B::OP::ppaddr();
- add support for OP_SETSTATE in Deparse
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs ext/B/B/Bblock.pm ext/B/B/Bytecode.pm
- ! ext/B/B/C.pm ext/B/B/CC.pm ext/B/B/Deparse.pm ext/B/B/Lint.pm
- ! ext/B/B/Xref.pm opcode.h opcode.pl
-____________________________________________________________________________
-[ 3760] By: jhi on 1999/07/26 07:14:43
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 43 files)
-____________________________________________________________________________
-[ 3759] By: gsar on 1999/07/26 05:12:24
- Log: add disclaimer about perl 4 libraries (modified version of
- patch suggested by Clinton Pierce <cpierce1@ford.com>)
- Branch: perl
- ! lib/abbrev.pl lib/bigfloat.pl lib/bigint.pl lib/bigrat.pl
- ! lib/cacheout.pl lib/chat2.pl lib/complete.pl lib/ctime.pl
- ! lib/dotsh.pl lib/exceptions.pl lib/fastcwd.pl lib/flush.pl
- ! lib/ftp.pl lib/getcwd.pl lib/getopt.pl lib/getopts.pl
- ! lib/hostname.pl lib/look.pl lib/pwd.pl lib/termcap.pl
-____________________________________________________________________________
-[ 3758] By: gsar on 1999/07/26 04:48:35
- Log: make reset() behave with high-bit characters
- From: Ian Phillipps <ian@dial.pipex.com>
- Date: Thu, 22 Jul 1999 22:48:59 +0100
- Message-ID: <19990722224859.A27987@homer.diplex.co.uk>
- Subject: [PATCH 5.005_57] sv_reset can cause stack corruption
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 3757] By: gsar on 1999/07/26 04:40:32
- Log: update to perlport-1.44 from Chris Nandor <pudge@pobox.com>
- Branch: perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 3756] By: gsar on 1999/07/26 04:20:37
- Log: dprofpp pod additions from Nathan Torkington <gnat@frii.com>
- Branch: perl
- ! utils/dprofpp.PL
-____________________________________________________________________________
-[ 3755] By: gsar on 1999/07/26 04:18:00
- Log: disable VPATH for now (breaks x2p build)
- Branch: perl
- ! x2p/Makefile.SH
-____________________________________________________________________________
-[ 3754] By: gsar on 1999/07/26 03:15:33
- Log: INSTALL =~ s/5.006/5.6/; delay loading Errno until needed
- (%! has the necessary magic); misc typos
- Branch: perl
- ! INSTALL ext/DB_File/DB_File.pm ext/Fcntl/Fcntl.pm
- ! ext/GDBM_File/GDBM_File.pm gv.c jpl/JNI/JNI.pm
- ! lib/AutoLoader.pm lib/CPAN.pm perl.c pod/perllocale.pod
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 3753] By: gsar on 1999/07/26 02:38:28
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> t/pragma/locale/latin1 t/pragma/locale/utf8
- !> (integrate 53 files)
-____________________________________________________________________________
-[ 3752] By: gsar on 1999/07/26 02:11:31
- Log: ensure implicitly closed handles don't set $? or $!
- Branch: perl
- ! doio.c embed.h embed.pl perlapi.c proto.h sv.c t/io/pipe.t
-____________________________________________________________________________
-[ 3751] By: gsar on 1999/07/26 01:28:34
- Log: change#3534 didn't preserve undef return values from caller()
- Branch: perl
- ! Changes pp_ctl.c
-____________________________________________________________________________
-[ 3750] By: jhi on 1999/07/25 20:59:29
- Log: Back up a tiny bit from #3735.
- This may break builds outside the source directory
- but then again, they do not work that ell yet anyway.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3750] By: jhi on 1999/07/25 20:59:29
- Log: Back up a tiny bit from #3735.
- This may break builds outside the source directory
- but then again, they do not work that ell yet anyway.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3749] By: jhi on 1999/07/25 19:15:55
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> lib/ExtUtils/MM_Unix.pm toke.c utils/h2xs.PL
-____________________________________________________________________________
-[ 3748] By: jhi on 1999/07/25 19:06:59
- Log: Recode locale.t so that the change in #3730
- is not needed and locale.t works both without
- and with the utf8 pragma.
- Branch: cfgperl
- + t/pragma/locale/latin1 t/pragma/locale/utf8
- ! MANIFEST t/pragma/locale.t
-____________________________________________________________________________
-[ 3747] By: jhi on 1999/07/25 19:01:46
- Log: Like #3743.
- Branch: cfgperl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 3746] By: gsar on 1999/07/25 18:08:58
- Log: add option to omit Changes file, from Abigail <abigail@delanet.com>;
- append a HISTORY section to POD if option is used
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 3745] By: gsar on 1999/07/25 17:40:03
- Log: warn rather than die when parse_version() can't cut it (from
- Michael G Schwern <schwern@pobox.com>)
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 3744] By: gsar on 1999/07/25 16:32:48
- Log: make map behave like grep wrt indirect object slot when
- there are parentheses; revert an experimental mod by Larry
- in change#2038 that failed to parse %{{qw(a b c)}} properly
- (this means C<map {use Foo; ...} ...> still needs a proper
- fix)
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 3743] By: jhi on 1999/07/25 16:24:55
- Log: Fix a typo in #3725.
- Branch: cfgperl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 3742] By: jhi on 1999/07/25 16:14:39
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 26 files)
-____________________________________________________________________________
-[ 3741] By: jhi on 1999/07/25 16:02:28
- Log: Cut-and-pasto in #3737.
- Branch: cfgperl
- ! perl.c
-____________________________________________________________________________
-[ 3740] By: gsar on 1999/07/25 15:59:34
- Log: add note about glibc bug
- Branch: perl
- ! t/pragma/warn/pp_hot
-____________________________________________________________________________
-[ 3739] By: gsar on 1999/07/25 15:48:40
- Log: fix bug in change#3728 that might free COPs prematurely;
- null(op) now does more thorough scrubbing of the op, which
- fixes a few compile-time memory "leaks"
- Branch: perl
- ! dump.c embed.h embed.pl op.c proto.h
-____________________________________________________________________________
-[ 3738] By: jhi on 1999/07/25 14:15:26
- Log: In accordance with #3737.
- Branch: metaconfig
- ! U/installdirs/sitelib.U U/installdirs/vendorprefix.U
- ! U/modified/Oldconfig.U
- Branch: metaconfig/U/perl
- ! Extensions.U
-____________________________________________________________________________
-[ 3737] By: jhi on 1999/07/25 14:12:34
- Log: Use vendorprefixlib.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.c
-____________________________________________________________________________
-[ 3736] By: jhi on 1999/07/25 13:10:03
- Log: Populate metaconfig branch.
- Branch: metaconfig
- + (add 1468 files)
- Branch: metaconfig/U/perl
- + (add 101 files)
-____________________________________________________________________________
-[ 3735] By: jhi on 1999/07/25 12:27:20
- Log: First steps of making builds outside the source
- directory possible. These should get us as far
- as miniperl, then building DynaLoader falls into
- tiny twinkling pieces as MakeMaker knows nothing
- of VPATH mindset.
- Branch: cfgperl
- ! Configure Makefile.SH cflags.SH config_h.SH configpm
- ! ext/util/make_ext lib/AutoSplit.pm makedepend.SH
- ! pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL
- ! pod/pod2text.PL pod/pod2usage.PL pod/podchecker.PL
- ! pod/podselect.PL writemain.SH x2p/Makefile.SH x2p/cflags.SH
-____________________________________________________________________________
-[ 3734] By: jhi on 1999/07/25 11:19:28
- Log: Poor Glossary--are we fixed yet?
- Branch: cfgperl
- ! Porting/Glossary
-____________________________________________________________________________
-[ 3733] By: jhi on 1999/07/25 11:15:06
- Log: Change #3732 mistakenly clobbered Glossary.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 3732] By: jhi on 1999/07/25 10:46:39
- Log: Andy's new installation scheme (note: a lot of this
- leaked in already with change #3731). The vendor*
- stuff is not used anywhere (in *.SH, say), so it
- isn't in Configure, either.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 3731] By: jhi on 1999/07/25 10:12:07
- Log: Circumcode a strange shell(?) bug in AIX found
- while trying to do -Duse64bits (which I couldn't do
- in the end because the CPU isn't 64-bit in that box,
- but at least now the probing doesn't crash.)
- Branch: cfgperl
- ! Configure config_h.SH hints/aix.sh
-____________________________________________________________________________
-[ 3730] By: gsar on 1999/07/25 04:56:56
- Log: fix little utf8 nits in testsuite; add patch from Ilya that cures
- a utf8 bug in one of the new RE optimizations
- Branch: perl
- ! regcomp.c regexec.c t/harness t/lib/io_udp.t t/op/re_tests
- ! t/pragma/locale.t
-____________________________________________________________________________
-[ 3729] By: jhi on 1999/07/23 19:56:27
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_57] INSTALL-1.58
- Date: Fri, 23 Jul 1999 10:50:13 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9907231033190.3555-100000@newton.phys>
-
- plus
-
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: Andy Dougherty <doughera@lafayette.edu>
- Cc: Perl Porters <perl5-porters@perl.org>
- Subject: Re: [PATCH 5.005_57] INSTALL-1.58
- Date: Fri, 23 Jul 1999 13:38:25 -0400
- Message-ID: <19990723133825.A12033@O2.chapin.edu>
- Branch: cfgperl
- ! INSTALL
-____________________________________________________________________________
-[ 3728] By: gsar on 1999/07/23 17:24:42
- Log: applied suggested patch for tracking line numbers correctly in
- optimized blocks with a single statement; changed setcop to
- setstate and added code for -Dx dumps
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Wed, 23 Jun 1999 17:27:42 +0100
- Message-Id: <199906231627.RAA24033@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_57] Line number error in optimised else()
- Branch: perl
- ! dump.c embed.h ext/Devel/DProf/DProf.xs ext/Opcode/Opcode.pm
- ! objXSUB.h op.c opcode.h opcode.pl perlapi.c pp.sym pp_hot.c
- ! pp_proto.h t/op/misc.t
-____________________________________________________________________________
-[ 3727] By: gsar on 1999/07/23 15:56:04
- Log: avoid useless use of target for pp_each(); also fixes bugs due to
- refcount held by the target
- Branch: perl
- ! opcode.h opcode.pl pp.c t/op/each.t
-____________________________________________________________________________
-[ 3726] By: jhi on 1999/07/23 12:08:30
- Log: Change #3725 aftershock.
- Branch: cfgperl
- ! INSTALL jpl/JNI/JNI.pm
-____________________________________________________________________________
-[ 3725] By: jhi on 1999/07/23 11:58:49
- Log: Introduce $Config{ldlibpthname} which contains
- the name of the environment variable holding the
- dynamic library search path, often LD_LIBRARY_PATH.
- Use this new feature all over.
- Also removed remnants of admonition "add LD_LIBRARY_PATH
- before running make" because Makefile.SH does this for you.
- Branch: cfgperl
- ! Configure Makefile.SH config_h.SH
- ! ext/DynaLoader/DynaLoader_pm.PL hints/README.hints
- ! hints/aix.sh hints/beos.sh hints/cygwin32.sh hints/dgux.sh
- ! hints/epix.sh hints/esix4.sh hints/hpux.sh hints/next_4.sh
- ! hints/os2.sh hints/rhapsody.sh hints/svr4.sh jpl/JNI/JNI.pm
- ! jpl/install-jpl utils/perlbug.PL
-____________________________________________________________________________
-[ 3724] By: jhi on 1999/07/23 08:03:36
- Log: From: Spider Boardman <spider@orb.nashua.nh.us>
- To: perl5-porters@perl.org
- Subject: [PATCH] Re: [ID 19990715.003] [BUG] all perl5 versions: segfault on $#
- Date: Thu, 22 Jul 1999 19:58:34 -0400
- Message-Id: <199907222358.TAA27354@Orb.Nashua.NH.US>
- Branch: cfgperl
- ! av.c
-____________________________________________________________________________
-[ 3723] By: gsar on 1999/07/23 00:01:29
- Log: emit warning about function calls that were encountered too early
- to enforce their prototype
- Branch: perl
- ! op.c op.h pod/perldiag.pod
-____________________________________________________________________________
-[ 3722] By: jhi on 1999/07/22 21:19:59
- Log: From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: perl5-porters@perl.org
- Cc: Chip Salzenberg <chip@perlsupport.com>, Gurusamy Sarathy <gsar@activestate.com>
- Subject: [PATCH] MakeMaker documentation
- Date: Wed, 21 Jul 1999 14:15:42 -0400
- Message-ID: <19990721141542.A1800@O2.chapin.edu>
- Branch: cfgperl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 3721] By: jhi on 1999/07/22 21:05:19
- Log: From: pvhp@forte.com (Peter Prymmer)
- To: chip@perlsupport.com, gsar@activestate.com, perl-mvs@perl.org, perl5-porters@perl.org
- Subject: [PATCH: 5.005_03 && 5.005_57]os390 hints file appendix stops bad builds
- Date: Wed, 21 Jul 99 17:15:39 PDT
- Message-Id: <9907220015.AA11931@forte.com>
- Branch: cfgperl
- ! hints/os390.sh
-____________________________________________________________________________
-[ 3720] By: jhi on 1999/07/22 20:51:17
- Log: AIX magic: ccdlflags needs to be different for
- Perl itself and for extra-core extensions
- (as used by ExtUtilss::embed::ldopts).
- Based on the problems described in
-
- From: Mike W Ellwood <mwe@rl.ac.uk>
- To: perl5-porters@perl.org
- Subject: [ID 19990722.002] Perl 5.00503 and AIX 4.1.5; perl.exp; build errors. Also Imagemagick...
- Date: Thu, 22 Jul 1999 14:28:19 +0100 (BST)
- Reply-To: m.w.ellwood@rl.ac.uk
- Message-Id: <Pine.A41.3.96.990722141209.72660V-100000@unixfe.rl.ac.uk>
- Branch: cfgperl
- ! Configure Makefile.SH config_h.SH hints/aix.sh
-____________________________________________________________________________
-[ 3719] By: jhi on 1999/07/22 08:23:53
- Log: Update history records.
- Branch: cfgperl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 3718] By: jhi on 1999/07/21 13:54:42
- Log: Todododobedobedo.
- Branch: cfgperl
- ! Todo
-____________________________________________________________________________
-[ 3717] By: jhi on 1999/07/21 12:10:48
- Log: Even more Todo.
- Branch: cfgperl
- ! Todo
-____________________________________________________________________________
-[ 3716] By: jhi on 1999/07/21 11:40:39
- Log: Use Errno more extensively so that error
- messages are more portable (another way
- would be to muck around with LC_MESSAGES).
- Problem reported in
-
- From: oracle@pcr8.pcr.com
- To: perl5-porters@perl.org
- Subject: [ID 19990719.003] LC_MESSAGES breaks h2xs autoloaded constants on AIX 4.1.4
- Date: Mon, 19 Jul 1999 18:39:13 -0400
- Message-Id: <9907192239.AA44990@pcr8.pcr.com>
- Branch: cfgperl
- ! ext/DB_File/DB_File.pm ext/Fcntl/Fcntl.pm
- ! ext/GDBM_File/GDBM_File.pm jpl/JNI/JNI.pm lib/AutoLoader.pm
- ! lib/CPAN.pm pod/perllocale.pod utils/h2xs.PL
-____________________________________________________________________________
-[ 3715] By: jhi on 1999/07/21 11:05:36
- Log: Slightly modified patch.
- From: Sean Sheedy <seans@ncube.com>
- To: perl5-porters@perl.org
- Subject: [ID 19990720.003] Perl 5.005_3 patch: Non-standard object extensions
- Date: Tue, 20 Jul 1999 09:52:06 -0700
- Message-Id: <3794A935.1C150E54@ncube.com>
- Branch: cfgperl
- ! cflags.SH x2p/cflags.SH
-____________________________________________________________________________
-[ 3714] By: jhi on 1999/07/20 21:26:19
- Log: More Todo.
- Branch: cfgperl
- ! Todo
-____________________________________________________________________________
-[ 3713] By: jhi on 1999/07/20 18:02:45
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> ext/Devel/DProf/Changes ext/Devel/DProf/DProf.pm
- +> ext/Devel/DProf/DProf.xs ext/Devel/DProf/Makefile.PL
- +> ext/Devel/DProf/Todo t/lib/dprof.t t/lib/dprof/V.pm
- +> t/lib/dprof/test1_t t/lib/dprof/test1_v t/lib/dprof/test2_t
- +> t/lib/dprof/test2_v t/lib/dprof/test3_t t/lib/dprof/test3_v
- +> t/lib/dprof/test4_t t/lib/dprof/test4_v t/lib/dprof/test5_t
- +> t/lib/dprof/test5_v t/lib/dprof/test6_t t/lib/dprof/test6_v
- +> utils/dprofpp.PL
- !> INSTALL MAINTAIN MANIFEST configure.com
- !> ext/Devel/Peek/Makefile.PL installman installperl
- !> pod/roffitall utils/Makefile vms/descrip_mms.template
- !> win32/Makefile win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 3712] By: gsar on 1999/07/20 15:29:01
- Log: DProf tweak
- Branch: perl
- ! ext/Devel/DProf/DProf.xs
-____________________________________________________________________________
-[ 3711] By: gsar on 1999/07/20 07:56:19
- Log: another DProf build tweak
- Branch: perl
- ! utils/dprofpp.PL
-____________________________________________________________________________
-[ 3710] By: gsar on 1999/07/20 07:36:36
- Log: move DProf things around to where they are supposed to be
- Branch: perl
- + t/lib/dprof.t t/lib/dprof/V.pm t/lib/dprof/test1_t
- + t/lib/dprof/test1_v t/lib/dprof/test2_t t/lib/dprof/test2_v
- + t/lib/dprof/test3_t t/lib/dprof/test3_v t/lib/dprof/test4_t
- + t/lib/dprof/test4_v t/lib/dprof/test5_t t/lib/dprof/test5_v
- + t/lib/dprof/test6_t t/lib/dprof/test6_v
- +> utils/dprofpp.PL
- - ext/Devel/DProf/dprofpp.PL ext/Devel/DProf/t/V.pm
- - ext/Devel/DProf/t/test1.pl ext/Devel/DProf/t/test1.t
- - ext/Devel/DProf/t/test1.v ext/Devel/DProf/t/test2.t
- - ext/Devel/DProf/t/test2.v ext/Devel/DProf/t/test3.t
- - ext/Devel/DProf/t/test3.v ext/Devel/DProf/t/test4.t
- - ext/Devel/DProf/t/test4.v ext/Devel/DProf/t/test5.t
- - ext/Devel/DProf/t/test5.v ext/Devel/DProf/t/test6.t
- - ext/Devel/DProf/t/test6.v ext/Devel/DProf/test.pl
- ! INSTALL MANIFEST ext/Devel/DProf/Makefile.PL installman
- ! installperl pod/roffitall utils/Makefile
- ! vms/descrip_mms.template win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 3709] By: gsar on 1999/07/20 06:13:16
- Log: DProf fixups for PERL_IMPLICIT_CONTEXT
- Branch: perl
- ! ext/Devel/DProf/DProf.xs ext/Devel/DProf/Makefile.PL
- ! ext/Devel/Peek/Makefile.PL
-____________________________________________________________________________
-[ 3708] By: gsar on 1999/07/20 06:01:22
- Log: move DProf to Devel/DProf
- Branch: perl
- +> ext/Devel/DProf/Changes ext/Devel/DProf/DProf.pm
- +> ext/Devel/DProf/DProf.xs ext/Devel/DProf/Makefile.PL
- +> ext/Devel/DProf/Todo ext/Devel/DProf/dprofpp.PL
- +> ext/Devel/DProf/t/V.pm ext/Devel/DProf/t/test1.pl
- +> ext/Devel/DProf/t/test1.t ext/Devel/DProf/t/test1.v
- +> ext/Devel/DProf/t/test2.t ext/Devel/DProf/t/test2.v
- +> ext/Devel/DProf/t/test3.t ext/Devel/DProf/t/test3.v
- +> ext/Devel/DProf/t/test4.t ext/Devel/DProf/t/test4.v
- +> ext/Devel/DProf/t/test5.t ext/Devel/DProf/t/test5.v
- +> ext/Devel/DProf/t/test6.t ext/Devel/DProf/t/test6.v
- +> ext/Devel/DProf/test.pl
- - ext/DProf/Changes ext/DProf/DProf.pm ext/DProf/DProf.xs
- - ext/DProf/Makefile.PL ext/DProf/Todo ext/DProf/dprofpp.PL
- - ext/DProf/t/V.pm ext/DProf/t/test1.pl ext/DProf/t/test1.t
- - ext/DProf/t/test1.v ext/DProf/t/test2.t ext/DProf/t/test2.v
- - ext/DProf/t/test3.t ext/DProf/t/test3.v ext/DProf/t/test4.t
- - ext/DProf/t/test4.v ext/DProf/t/test5.t ext/DProf/t/test5.v
- - ext/DProf/t/test6.t ext/DProf/t/test6.v ext/DProf/test.pl
- ! MAINTAIN MANIFEST configure.com win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 3707] By: gsar on 1999/07/20 05:39:11
- Log: add Devel::DProf v19990108 from CPAN, as it was
- Branch: perl
- + ext/DProf/Changes ext/DProf/DProf.pm ext/DProf/DProf.xs
- + ext/DProf/Makefile.PL ext/DProf/Todo ext/DProf/dprofpp.PL
- + ext/DProf/t/V.pm ext/DProf/t/test1.pl ext/DProf/t/test1.t
- + ext/DProf/t/test1.v ext/DProf/t/test2.t ext/DProf/t/test2.v
- + ext/DProf/t/test3.t ext/DProf/t/test3.v ext/DProf/t/test4.t
- + ext/DProf/t/test4.v ext/DProf/t/test5.t ext/DProf/t/test5.v
- + ext/DProf/t/test6.t ext/DProf/t/test6.v ext/DProf/test.pl
- ! MANIFEST
-____________________________________________________________________________
-[ 3706] By: gsar on 1999/07/20 04:52:25
- Log: C<union any> needs no PERL_OBJECT-treatment
- Branch: perl
- ! win32/win32.h
-____________________________________________________________________________
-[ 3705] By: gsar on 1999/07/20 04:11:54
- Log: fix problem in default build
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 3704] By: jhi on 1999/07/19 07:06:36
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Changes lib/Carp.pm makedef.pl pod/perldiag.pod sv.h util.c
- !> win32/win32.c
-____________________________________________________________________________
-[ 3703] By: gsar on 1999/07/19 05:55:57
- Log: win32 nits
- Branch: perl
- ! makedef.pl sv.h
-____________________________________________________________________________
-[ 3702] By: gsar on 1999/07/19 04:29:34
- Log: don't display tid from main thread (or testsuite breaks)
- Branch: perl
- ! lib/Carp.pm util.c
-____________________________________________________________________________
-[ 3701] By: gsar on 1999/07/19 00:47:52
- Log: remove several doubled (and tripled!) entries
- Branch: perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 3700] By: gsar on 1999/07/19 00:42:34
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> makedef.pl
- - perl_exp.SH win32/makedef.pl
- !> MANIFEST Makefile.SH ext/DynaLoader/DynaLoader_pm.PL
- !> ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_vms.xs hints/aix.sh
- !> pod/perldiag.pod pp.c regexec.c t/pragma/warn/util toke.c
- !> utf8.c util.c win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 3699] By: gsar on 1999/07/19 00:33:59
- Log: avoid bug in win32_str_os_error() (from Jan Dubois)
- Branch: perl
- ! Changes win32/win32.c
-____________________________________________________________________________
-[ 3698] By: jhi on 1999/07/18 21:33:57
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> t/op/chars.t
- !> (integrate 57 files)
-____________________________________________________________________________
-[ 3697] By: gsar on 1999/07/18 05:22:36
- Log: From: pvhp@forte.com (Peter Prymmer)
- Date: Thu, 1 Jul 99 19:31:24 PDT
- Message-Id: <9907020231.AA16942@forte.com>
- Subject: [ID 19990701.031] 4 ctl chars on EBCDIC not asciiish enough
- Branch: perl
- + t/op/chars.t
- ! MANIFEST ebcdic.c t/op/ord.t
-____________________________________________________________________________
-[ 3696] By: gsar on 1999/07/18 05:11:02
- Log: display thread id in diagnostics (suggested by Dan Sugalski)
- Branch: perl
- ! lib/Carp.pm util.c
-____________________________________________________________________________
-[ 3695] By: gsar on 1999/07/18 04:57:47
- Log: missing perldiag entry (from Dan Sugalski <sugalskd@osshe.edu>)
- Branch: perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 3694] By: gsar on 1999/07/18 04:56:28
- Log: cache [NIUP]V conversions of defined READONLY values
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 11 Jul 1999 04:39:44 -0400
- Message-ID: <19990711043944.A25944@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_57] Allow caching of numeric/string conversion
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 3693] By: gsar on 1999/07/18 03:53:38
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 17 Jul 1999 10:58:29 +0200
- Message-ID: <379144ad.13616689@smtp1.ibm.net>
- Subject: [PATCH 5.005] Some lib/ExtUtils/Manifest.pm POD fixes
- Branch: perl
- ! lib/ExtUtils/Manifest.pm
-____________________________________________________________________________
-[ 3692] By: gsar on 1999/07/18 03:51:03
- Log: remove spurious newSTATEOP() that causes goto to enter one too many
- contexts when jumping between if and elsif blocks
- Branch: perl
- ! perly.c perly.y pp_ctl.c t/op/goto.t
-____________________________________________________________________________
-[ 3691] By: gsar on 1999/07/18 01:49:59
- Log: detypo, update Changes
- Branch: perl
- ! Changes doio.c
-____________________________________________________________________________
-[ 3690] By: gsar on 1999/07/18 01:16:59
- Log: mention the -Minteger effect on modulus (from Nathan Torkington)
- Branch: perl
- ! lib/integer.pm
-____________________________________________________________________________
-[ 3689] By: gsar on 1999/07/18 00:47:17
- Log: ensure __END__ appears on a line by itself in wrapped
- scripts (thanks to Steve Tolkin <tolkin@mediaone.net>);
- mention caveat about successfull kill()
- Branch: perl
- ! pod/perlfunc.pod win32/bin/pl2bat.pl
-____________________________________________________________________________
-[ 3688] By: gsar on 1999/07/17 20:47:44
- Log: noecho noops (from Nicholas Clark <nick@flirble.org>)
- Branch: perl
- ! ext/SDBM_File/sdbm/Makefile.PL
-____________________________________________________________________________
-[ 3687] By: gsar on 1999/07/17 20:43:27
- Log: make CC.pm use a distinct CCPP() macro rather than PP()
- (suggested by Vishal Bhatia <vishalb@my-deja.com>)
- Branch: perl
- ! cc_runtime.h ext/B/B/CC.pm
-____________________________________________________________________________
-[ 3686] By: gsar on 1999/07/17 20:39:08
- Log: tiny bug in vars.pm (from John Dlugosz)
- Branch: perl
- ! lib/vars.pm
-____________________________________________________________________________
-[ 3685] By: gsar on 1999/07/17 20:37:27
- Log: applied suggested patch, along with later tweak
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 14 Jul 1999 23:53:43 +0200
- Message-ID: <37a902e7.15977234@smtp1.ibm.net>
- Subject: Merge ActivePerl Stylesheet support etc into Pod::Html.pm
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 3684] By: gsar on 1999/07/17 20:24:32
- Log: avoid #ifdef DEBUGGING in thrdvar.h (from Dominic Dunlop <domo@vo.lu>)
- Branch: perl
- ! thrdvar.h
-____________________________________________________________________________
-[ 3683] By: gsar on 1999/07/17 20:21:01
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 13 Jul 1999 05:44:28 -0400 (EDT)
- Message-Id: <199907130944.FAA04473@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_57] Segfaults if $^P
- Branch: perl
- ! embed.h embed.pl global.sym mg.c objXSUB.h perl.c perlapi.c
- ! proto.h
-____________________________________________________________________________
-[ 3682] By: gsar on 1999/07/17 20:04:17
- Log: use a better prefixify() heuristic than m/perl/ (prefix/lib/perl5
- and prefix/lib/perl5/man are ass_u_med only if those directories
- actually exist; else prefix/{lib,man} are used)
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 3681] By: gsar on 1999/07/17 19:12:33
- Log: allow $foo{$x} and $bar[$i] for (\$) prototype
- Branch: perl
- ! op.c t/comp/proto.t
-____________________________________________________________________________
-[ 3680] By: gsar on 1999/07/17 18:23:55
- Log: fix vec() on magic values
- From: Ian Phillipps <ian@dial.pipex.com>
- Date: Mon, 12 Jul 1999 12:30:05 +0100
- Message-ID: <19990712123005.A11355@homer.diplex.co.uk>
- Subject: [PATCH 5.005_57] Re: do_vecset is broken. Re: [ID 19990703.003].
- Branch: perl
- ! doop.c t/op/tie.t
-____________________________________________________________________________
-[ 3679] By: gsar on 1999/07/17 18:10:44
- Log: make system() return -1 and set $! if exec of child failed
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 9 Jul 1999 05:21:13 -0400
- Message-ID: <19990709052113.A6201@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_57] system()==-1 and $! from failing fork/exec
- Branch: perl
- ! doio.c embed.h embed.pl global.sym objXSUB.h perlapi.c
- ! pod/perlfunc.pod pp_sys.c proto.h t/op/exec.t
-____________________________________________________________________________
-[ 3678] By: gsar on 1999/07/17 17:54:01
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 9 Jul 1999 04:27:51 -0400 (EDT)
- Message-Id: <199907090827.EAA03321@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_57] File descriptor leak in do_exec3
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 3677] By: gsar on 1999/07/17 17:34:38
- Log: a modernized version of find2perl from Ken Pizzini <ken@halcyon.com>;
- converted Ken's documentation outline into pod
- Branch: perl
- ! x2p/find2perl.PL
-____________________________________________________________________________
-[ 3676] By: gsar on 1999/07/17 16:34:09
- Log: pod fixes (with minor edits) from Abigail, Ronald Kimball, Jon
- Waddington, Tuomas Lukka, Steven Tolkin, Ian Phillipps, and
- Steve Lidie
- Branch: perl
- ! pod/Win32.pod pod/perldelta.pod pod/perlfaq.pod
- ! pod/perlfaq1.pod pod/perlfaq2.pod pod/perlfaq3.pod
- ! pod/perlfaq4.pod pod/perlfaq5.pod pod/perlfunc.pod
- ! pod/perlguts.pod pod/perlhist.pod pod/perlop.pod
- ! pod/perlport.pod pod/perltoc.pod pod/perltodo.pod
- ! pod/perltoot.pod pod/perltootc.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 3675] By: gsar on 1999/07/17 00:16:53
- Log: backout redundant change#3628
- Branch: perl
- ! Changes hints/bsdos.sh
-____________________________________________________________________________
-[ 3674] By: jhi on 1999/07/15 14:26:03
- Log: Fix the bin/oct/hex constant overflow tests for
- long long platforms.
- Branch: cfgperl
- ! t/pragma/warn/util
-____________________________________________________________________________
-[ 3673] By: jhi on 1999/07/14 21:59:11
- Log: Fixed AIX dynamic loading and AIX shared Perl library.
- Tested in: AIX 4.1.5 cc+useshrplib+usethreads, 4.1.5 cc,
- 4.1.5 gcc+useshrplib+usethreads, 4.3.1 cc+useshrplib.
- Hijacked win32/makedef.pl for more general purpose export
- list building, now it is used (as toplevel makedef.pl)
- for win32 and AIX (perl_exp.SH made unnecessary).
- Because the export lists are now correct in AIX, no more linker
- warnings about "Exported symbol not defined" should appear.
- Branch: cfgperl
- + makedef.pl
- - perl_exp.SH win32/makedef.pl
- ! MANIFEST Makefile.SH ext/DynaLoader/DynaLoader_pm.PL
- ! ext/DynaLoader/dl_aix.xs hints/aix.sh win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 3672] By: gsar on 1999/07/14 17:12:13
- Log: minor efficiency tweak
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 3671] By: jhi on 1999/07/14 16:22:39
- Log: The regexec.c change of #3606 caused a core dump in fbm_instr()
- if its caller re_intuit_start() was entered with strend == strpos
- because end_shift ended up as -1. The patch ain't necessarily
- correct but least the core dump is avoided.
- Branch: cfgperl
- ! regexec.c
-____________________________________________________________________________
-[ 3670] By: jhi on 1999/07/13 07:59:09
- Log: Integrate with Sarathy.
- Branch: cfgperl
- - XSlock.h win32/GenCAPI.pl win32/TEST win32/autosplit.pl
- - win32/genxsdef.pl win32/makemain.pl win32/makeperldef.pl
- !> (integrate 67 files)
-____________________________________________________________________________
-[ 3669] By: gsar on 1999/07/12 06:14:54
- Log: fixups for sundry warnings about function pointers
- Branch: perl
- ! ext/re/re.xs intrpvar.h op.c perl.c perl.h pp_ctl.c scope.h
- ! sv.c thrdvar.h util.c win32/Makefile win32/makefile.mk
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 3668] By: gsar on 1999/07/12 04:11:58
- Log: tweaks for win32/borland
- Branch: perl
- ! t/pragma/locale.t win32/makedef.pl win32/makefile.mk
-____________________________________________________________________________
-[ 3667] By: gsar on 1999/07/12 01:55:15
- Log: yet more cleanups of the PERL_OBJECT, MULTIPLICITY and USE_THREADS
- builds; passing the implicit context is unified among the three
- flavors; PERL_IMPLICIT_CONTEXT is auto-enabled under all three
- flavors (see the top of perl.h) for testing; all varargs functions
- foo() have a va_list-taking variant vfoo() for generating the
- context-free versions; the PERL_OBJECT build should now be
- hyper-compatible with CPAN extensions (C++ is totally out of
- the picture)
-
- result has only been tested on Windows
-
- TODO: write docs on the THX rationale and idiomatic usage of
- the Perl API
- Branch: perl
- - XSlock.h win32/GenCAPI.pl win32/TEST win32/autosplit.pl
- - win32/genxsdef.pl win32/makemain.pl win32/makeperldef.pl
- ! MANIFEST XSUB.h bytecode.pl deb.c dump.c embed.h embed.pl
- ! embedvar.h ext/B/B.xs ext/ByteLoader/ByteLoader.xs
- ! ext/ByteLoader/byterun.c ext/Data/Dumper/Dumper.xs
- ! ext/Devel/Peek/Peek.xs ext/Fcntl/Fcntl.xs ext/IO/IO.xs
- ! ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs
- ! ext/SDBM_File/SDBM_File.xs ext/Socket/Socket.xs
- ! ext/Thread/Thread.xs ext/attrs/attrs.xs ext/re/re.xs
- ! global.sym globals.c intrpvar.h iperlsys.h
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_Win32.pm
- ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/xsubpp lib/base.pm
- ! lib/warning.pm malloc.c objXSUB.h perl.c perl.h perlapi.c
- ! perlapi.h perlio.c pp_sys.c proto.h regcomp.c regexec.c
- ! scope.c sv.c thrdvar.h util.c win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/config_h.PL
- ! win32/dl_win32.xs win32/include/dirent.h
- ! win32/include/sys/socket.h win32/makedef.pl win32/makefile.mk
- ! win32/perllib.c win32/runperl.c win32/win32.c win32/win32.h
- ! win32/win32iop.h win32/win32sck.c
-____________________________________________________________________________
-[ 3666] By: jhi on 1999/07/11 22:00:13
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> op.c t/op/lex_assign.t
-____________________________________________________________________________
-[ 3665] By: jhi on 1999/07/11 21:59:01
- Log: More manual sync.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3664] By: gsar on 1999/07/11 19:11:07
- Log: change#3612 was buggy and failed to build Tk; applied Ilya's
- remedy and related tests via private mail
- Branch: perl
- ! op.c t/op/lex_assign.t
-____________________________________________________________________________
-[ 3663] By: jhi on 1999/07/11 15:04:37
- Log: Manual synchronization with Sarathy (some files
- had drifted apart for no apparent reason), plus
- I had a typo in dl_vms.xs Sarathy had fixed.
- Branch: cfgperl
- ! ext/DynaLoader/dl_vms.xs pod/perldelta.pod pp.c pp_sys.c
-____________________________________________________________________________
-[ 3662] By: jhi on 1999/07/10 12:23:21
- Log: Change t/pragma/warn oct()/hex() overflow tests to use %Config
- to adapt to the underlying platform (the binary, 0b1..., test
- was broken in 64-bit platforms). Also change "hex" in the
- warning messages to "hexadecimal" to match "binary" and "octal".
- Branch: cfgperl
- ! pod/perldiag.pod t/pragma/warn/util util.c
-____________________________________________________________________________
-[ 3661] By: jhi on 1999/07/08 21:54:55
- Log: Integrate with Sarathy.
- Branch: cfgperl
- +> perlapi.c perlapi.h
- !> (integrate 43 files)
-____________________________________________________________________________
-[ 3660] By: gsar on 1999/07/08 18:47:35
- Log: more PERL_OBJECT cleanups (changes still untested on Unix!)
- Branch: perl
- + perlapi.c perlapi.h
- ! MANIFEST XSUB.h emacs/ptags embed.h embed.pl embedvar.h
- ! ext/Opcode/Opcode.xs global.sym globals.c intrpvar.h
- ! iperlsys.h mg.c miniperlmain.c objXSUB.h perl.c perl.h perly.c
- ! pp.c pp_ctl.c pp_hot.c proto.h regcomp.c regcomp.h regexec.c
- ! scope.c scope.h sv.c thrdvar.h toke.c util.c win32/GenCAPI.pl
- ! win32/Makefile win32/makedef.pl win32/perllib.c win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 3659] By: gsar on 1999/07/08 18:41:45
- Log: sundry cleanups for clean build on windows
- Branch: perl
- ! doio.c regcomp.c regcomp.h t/io/openpid.t utf8.c
-____________________________________________________________________________
-[ 3658] By: gsar on 1999/07/08 01:24:25
- Log: fixes for logical bugs in the lexwarn patch; other tweaks to avoid
- type mismatch problems
- Branch: perl
- ! doio.c gv.c op.c pp.c regcomp.c regexec.c run.c sv.c
- ! t/pragma/warn/op toke.c utf8.c util.c
-____________________________________________________________________________
-[ 3657] By: jhi on 1999/07/07 23:01:16
- Log: Integrate with Sarathy. perldiag.pod required manual editing.
- Branch: cfgperl
- ! pod/perldiag.pod
- !> Changes configure.com ext/B/B/Deparse.pm
- !> ext/ByteLoader/Makefile.PL ext/Fcntl/Fcntl.xs
- !> ext/IO/lib/IO/File.pm gv.c iperlsys.h lib/ExtUtils/MM_VMS.pm
- !> lib/File/Basename.pm lib/File/Spec/VMS.pm perlsfio.h
- !> t/base/rs.t t/lib/io_multihomed.t t/lib/textfill.t
- !> t/lib/textwrap.t t/op/filetest.t t/op/mkdir.t
- !> t/pragma/overload.t thread.h vms/vms.c
-____________________________________________________________________________
-[ 3656] By: gsar on 1999/07/07 21:04:38
- Log: integrate cfgperl contents
- Branch: perl
- +> lib/unicode/Is/ASCII.pl lib/unicode/Is/Cntrl.pl
- +> lib/unicode/Is/Graph.pl lib/unicode/Is/Punct.pl
- +> lib/unicode/Is/Word.pl lib/unicode/Is/XDigit.pl
- ! Changes
- !> (integrate 45 files)
-____________________________________________________________________________
-[ 3655] By: gsar on 1999/07/07 18:55:45
- Log: filetest.t and ByteLoader build tweaks from Peter Prymmer
- <pvhp@forte.com>
- Branch: perl
- ! ext/ByteLoader/Makefile.PL t/op/filetest.t
-____________________________________________________________________________
-[ 3654] By: gsar on 1999/07/07 18:47:03
- Log: change#1889 mistakenly removed F_SETLK
- Branch: perl
- ! ext/Fcntl/Fcntl.xs
-____________________________________________________________________________
-[ 3653] By: gsar on 1999/07/07 18:42:42
- Log: B::Deparse update
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Mon, 5 Jul 1999 17:57:03 -0500 (CDT)
- Message-ID: <14209.13729.738691.610723@alias-2.pr.mcs.net>
- Subject: [PATCH _57, long] B::Deparse 0.58
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 3652] By: gsar on 1999/07/07 18:41:07
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 5 Jul 1999 18:24:19 -0400 (EDT)
- Message-Id: <199907052224.SAA10454@monk.mps.ohio-state.edu>
- Subject: Re: [ID 19990705.001] Overloading boolean conversion
- Branch: perl
- ! gv.c t/pragma/overload.t
-____________________________________________________________________________
-[ 3651] By: gsar on 1999/07/07 17:47:30
- Log: missing PerlIO_reopen() (suggested by sam@daemoninc.com)
- Branch: perl
- ! perlsfio.h
-____________________________________________________________________________
-[ 3650] By: gsar on 1999/07/07 17:45:52
- Log: applied new parts of suggested patch
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Fri, 02 Jul 1999 19:18:41 -0400 (EDT)
- Message-id: <01JD3M8W1VXS000S5G@mail.newman.upenn.edu>
- Subject: [PATCH 5.005_57] Consolidated VMS patch
- Branch: perl
- ! configure.com ext/IO/lib/IO/File.pm iperlsys.h
- ! lib/ExtUtils/MM_VMS.pm lib/File/Basename.pm
- ! lib/File/Spec/VMS.pm pod/perldiag.pod t/base/rs.t
- ! t/lib/io_multihomed.t t/lib/textfill.t t/lib/textwrap.t
- ! t/op/filetest.t t/op/mkdir.t thread.h vms/vms.c
-____________________________________________________________________________
-[ 3649] By: jhi on 1999/07/07 13:38:02
- Log: Sync regcomp warn with reality.
- Branch: cfgperl
- ! t/pragma/warn/regcomp
-____________________________________________________________________________
-[ 3648] By: jhi on 1999/07/07 13:04:55
- Log: Integrate with Sarathy; one conflict in t/pragma/warn/recgomp
- resolved manually.
- Branch: cfgperl
- +> pod/perllexwarn.pod t/pragma/warn/6default t/pragma/warn/av
- +> t/pragma/warn/doop t/pragma/warn/hv t/pragma/warn/malloc
- +> t/pragma/warn/perlio t/pragma/warn/run t/pragma/warn/utf8
- - README.lexwarn
- !> (integrate 79 files)
-____________________________________________________________________________
-[ 3647] By: gsar on 1999/07/07 10:32:03
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Thu, 01 Jul 1999 11:17:53 +0200
- Message-ID: <377b2ca4.14467042@smtp1.ibm.net>
- Subject: [PATCH 5.005_57] MakeMaker support for pod2html
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_Win32.pm
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 3646] By: gsar on 1999/07/07 10:27:55
- Log: fix undocumented IO::Handle functions as suggested
- by cj10@cam.ac.uk
- Branch: perl
- ! ext/IO/lib/IO/Handle.pm
-____________________________________________________________________________
-[ 3645] By: gsar on 1999/07/07 10:18:55
- Log: prohibit thread join()ing itself (from Dan Sugalski)
- Branch: perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 3644] By: gsar on 1999/07/07 10:14:26
- Log: From: "Vishal Bhatia" <vishalb@my-deja.com>
- Date: Wed, 30 Jun 1999 14:02:42 -0700
- Message-ID: <LJHFKBDHMHHJDAAA@my-deja.com>
- Subject: [PATCH 5.005_57] Compiler and XSUBS
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 3643] By: gsar on 1999/07/07 10:08:38
- Log: mention C<foreach VAR (LIST) BLOCK continue BLOCK> syntax
- (from François Désarménien <desar@club-internet.fr>)
- Branch: perl
- ! pod/perlsyn.pod
-____________________________________________________________________________
-[ 3642] By: gsar on 1999/07/07 10:03:24
- Log: From: Doug MacEachern <dougm@cp.net>
- Date: Sun, 27 Jun 1999 22:43:25 -0700 (PDT)
- Message-ID: <Pine.LNX.4.10.9906272236430.389-100000@mojo.eng.cp.net>
- Subject: [PATCH 5.005_57] add B::PV::{LEN,CUR}
- Branch: perl
- ! ext/B/B.xs
-____________________________________________________________________________
-[ 3641] By: gsar on 1999/07/07 10:00:57
- Log: slightly modified version of suggested patch
- From: Steven N. Hirsch <hirschs@stargate.btv.ibm.com>
- Date: Mon, 28 Jun 1999 14:23:59 -0400
- Message-Id: <199906281823.OAA24912@stargate.btv.ibm.com>
- Subject: [ID 19990628.007] POSIX::tmpnam() broken for threaded 5.00503
- Branch: perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 3640] By: gsar on 1999/07/07 09:45:43
- Log: lexical warnings update (warning.t fails one test
- due to leaked scalar, investigation pending)
- From: paul.marquess@bt.com
- Date: Sat, 26 Jun 1999 23:19:52 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB29C6C8E@mbtlipnt02.btlabs.bt.co.uk>
- Subject: [PATCH 5.005_57] Lexical Warnings - mandatory warning are now default warnings
- Branch: perl
- + pod/perllexwarn.pod t/pragma/warn/6default t/pragma/warn/av
- + t/pragma/warn/doop t/pragma/warn/hv t/pragma/warn/malloc
- + t/pragma/warn/perlio t/pragma/warn/run t/pragma/warn/utf8
- - README.lexwarn
- ! Changes MANIFEST av.c djgpp/djgpp.c doio.c doop.c
- ! ext/B/B/Asmdata.pm ext/ByteLoader/byterun.c
- ! ext/ByteLoader/byterun.h gv.c hv.c jpl/JNI/JNI.xs
- ! lib/warning.pm mg.c op.c os2/os2.c perl.c perlio.c
- ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- ! pod/perlmodlib.pod pod/perlrun.pod pod/perlvar.pod pp.c
- ! pp_ctl.c run.c sv.c t/pragma/warn/3both t/pragma/warn/doio
- ! t/pragma/warn/gv t/pragma/warn/mg t/pragma/warn/op
- ! t/pragma/warn/perl t/pragma/warn/perly t/pragma/warn/pp
- ! t/pragma/warn/pp_ctl t/pragma/warn/pp_hot t/pragma/warn/pp_sys
- ! t/pragma/warn/regcomp t/pragma/warn/regexec t/pragma/warn/sv
- ! t/pragma/warn/taint t/pragma/warn/toke t/pragma/warn/universal
- ! t/pragma/warn/util t/pragma/warning.t toke.c utf8.c util.c
- ! warning.h warning.pl win32/win32.c
-____________________________________________________________________________
-[ 3639] By: gsar on 1999/07/07 08:09:30
- Log: From: Brian Jepson <bjepson@home.com>
- Date: Sat, 26 Jun 1999 10:47:45 -0500 (EST)
- Message-ID: <Pine.LNX.4.10.9906261044180.659-100000@cx384756-a.sking1.ri.home.com>
- Subject: Patch to JPL example program
- Branch: perl
- ! jpl/JPL_Rolo/JPL_Rolo.jpl
-____________________________________________________________________________
-[ 3638] By: jhi on 1999/07/07 08:07:58
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 34 files)
-____________________________________________________________________________
-[ 3637] By: gsar on 1999/07/07 08:07:49
- Log: From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Fri, 25 Jun 1999 13:38:44 -0500 (CDT)
- Message-ID: <14193.25034.113373.245377@alias-2.pr.mcs.net>
- Subject: [PATCH _57, long] Eliminate CONDOPs
- Branch: perl
- ! bytecode.pl dump.c ext/B/B.pm ext/B/B.xs ext/B/B/Bblock.pm
- ! ext/B/B/Bytecode.pm ext/B/B/C.pm ext/B/B/CC.pm
- ! ext/B/B/Debug.pm ext/B/B/Xref.pm ext/B/ramblings/flip-flop
- ! ext/B/typemap op.c op.h opcode.h opcode.pl perl.h
- ! pod/perltoc.pod pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 3636] By: gsar on 1999/07/07 07:50:51
- Log: adapted suggested patch for IO-1.20x
- From: ian@dial.pipex.com
- Date: Fri, 25 Jun 1999 10:39:42 +0100
- Message-Id: <199906250939.KAA02152@homer.diplex.co.uk>
- Subject: [ID 19990625.001] Minor fixes for IO::Socket.pm
- Branch: perl
- ! ext/IO/lib/IO/Socket.pm
-____________________________________________________________________________
-[ 3635] By: gsar on 1999/07/07 07:26:05
- Log: PowerMAX hints update from Tom Horsley <Tom.Horsley@mail.ccur.com>
- Branch: perl
- ! hints/powerux.sh
-____________________________________________________________________________
-[ 3634] By: gsar on 1999/07/07 07:20:02
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Wed, 23 Jun 1999 16:16:05 +0100
- Message-Id: <199906231516.QAA23851@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_57] memleak in optimizer
- Branch: perl
- ! embed.h embed.pl objXSUB.h op.c proto.h
-____________________________________________________________________________
-[ 3633] By: gsar on 1999/07/07 07:10:52
- Log: add do-not-edit caveats for files generated by opcode.pl
- (suggested by Hugo van der Sanden)
- Branch: perl
- ! opcode.h opcode.pl pp.sym pp_proto.h
-____________________________________________________________________________
-[ 3632] By: gsar on 1999/07/07 06:41:13
- Log: better diagnostics on read operations from write-only
- filehandles
- Branch: perl
- ! doio.c perl.c pod/perldelta.pod pod/perldiag.pod pp_hot.c
- ! pp_sys.c t/pragma/warn/pp_hot t/pragma/warn/pp_sys
-____________________________________________________________________________
-[ 3631] By: gsar on 1999/07/07 02:03:34
- Log: make Sys::Hostname safe against C<$SIG{CHLD}='IGNORE'> (suggested
- by David Muir Sharnoff <muir@idiom.com>)
- Branch: perl
- ! lib/Sys/Hostname.pm
-____________________________________________________________________________
-[ 3630] By: gsar on 1999/07/07 01:57:16
- Log: From: "Vishal Bhatia" <vishalb@my-deja.com>
- Date: Sun, 20 Jun 1999 17:17:17 -0700
- Message-ID: <AEBDBGKPMEAJAAAA@my-deja.com>
- Subject: [PATCH 5.005_57] Minor bug fix in pp_require
- Branch: perl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 3629] By: gsar on 1999/07/07 01:46:03
- Log: installperl should write normal messages to STDOUT, not STDERR
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 3628] By: gsar on 1999/07/07 01:41:25
- Log: BSD/OS needs -DSTRUCT_TM_HASZONE as of 4.0.1 (from mab@alink.net)
- Branch: perl
- ! hints/bsdos.sh
-____________________________________________________________________________
-[ 3627] By: gsar on 1999/07/07 00:27:10
- Log: make diagnostic on C<my $^I> etc., more readable
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3626] By: gsar on 1999/07/06 23:47:27
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- Date: Thu, 17 Jun 1999 12:07:11 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9906171204580.937-100000@newton.phys>
- Subject: [ID 19990617.004 [PATCH 5.005_57] make distclean fixes]
- Branch: perl
- ! Makefile.SH utils/Makefile
-____________________________________________________________________________
-[ 3625] By: jhi on 1999/07/06 21:50:46
- Log: Some new files of #3624 missing from MANIFEST.
- Branch: cfgperl
- ! MANIFEST
-____________________________________________________________________________
-[ 3624] By: jhi on 1999/07/06 21:47:04
- Log: POSIX [[:character class:]] support for standard, locale,
- and utf8. If both utf8 and locale are on, utf8 wins.
- I don't fully understand why so many tables changed in
- lib/unicode because of "make" -- maybe it was just overdue.
- Branch: cfgperl
- + lib/unicode/Is/ASCII.pl lib/unicode/Is/Cntrl.pl
- + lib/unicode/Is/Graph.pl lib/unicode/Is/Punct.pl
- + lib/unicode/Is/Word.pl lib/unicode/Is/XDigit.pl
- ! MANIFEST Todo-5.005 embed.h embed.pl embedvar.h global.sym
- ! handy.h intrpvar.h lib/unicode/Bidirectional.pl
- ! lib/unicode/Block.pl lib/unicode/Category.pl
- ! lib/unicode/Is/Alnum.pl lib/unicode/Is/Alpha.pl
- ! lib/unicode/Is/BidiL.pl lib/unicode/Is/Digit.pl
- ! lib/unicode/Is/L.pl lib/unicode/Is/Lo.pl
- ! lib/unicode/Is/Lower.pl lib/unicode/Is/Print.pl
- ! lib/unicode/Is/Space.pl lib/unicode/Is/Upper.pl
- ! lib/unicode/Is/Z.pl lib/unicode/Is/Zs.pl lib/unicode/Name.pl
- ! lib/unicode/To/Digit.pl lib/unicode/mktables.PL objXSUB.h
- ! pod/perldelta.pod pod/perldiag.pod pod/perlre.pod proto.h
- ! regcomp.c regcomp.h regcomp.sym regexec.c regnodes.h
- ! t/op/pat.t t/op/re_tests t/op/regexp.t t/pragma/utf8.t
- ! t/pragma/warn/regcomp utf8.c
-____________________________________________________________________________
-[ 3623] By: gsar on 1999/07/06 20:52:48
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 16 Jun 1999 14:57:22 -0400
- Message-ID: <19990616145722.B16258@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00557] Devel::Peek
- Branch: perl
- ! ext/Devel/Peek/Peek.pm ext/Devel/Peek/Peek.xs
-____________________________________________________________________________
-[ 3622] By: gsar on 1999/07/06 20:22:59
- Log: applied patch after demunging headers with appropriate paths
- From: "Vishal Bhatia" <vishalb@my-deja.com>
- Date: Sat, 12 Jun 1999 08:23:59 -0700
- Message-ID: <JIHEJPFDFKIBDAAA@my-deja.com>
- Subject: [Patch 5.005_57] unsigned arithmetic (Compiler)
- Branch: perl
- ! cc_runtime.h ext/B/B.xs ext/B/B/CC.pm ext/B/B/Stackobj.pm
- ! ext/B/defsubs.h.PL lib/ExtUtils/typemap t/harness
-____________________________________________________________________________
-[ 3621] By: gsar on 1999/07/06 20:10:50
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 10 Jun 1999 04:05:22 -0400 (EDT)
- Message-Id: <199906100805.EAA18216@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_57] Optimize 2>&1 in commands
- Branch: perl
- ! doio.c
-____________________________________________________________________________
-[ 3620] By: jhi on 1999/07/06 19:16:47
- Log: Mention EPOC and SOCKS.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3619] By: gsar on 1999/07/06 16:52:37
- Log: fix int vs STRLEN issue
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 3618] By: jhi on 1999/07/06 16:52:20
- Log: There ain't Perl_atonv().
- Branch: cfgperl
- ! ext/ByteLoader/bytecode.h
-____________________________________________________________________________
-[ 3617] By: jhi on 1999/07/06 15:55:22
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> Makefile.SH
-____________________________________________________________________________
-[ 3616] By: jhi on 1999/07/06 15:54:09
- Log: Tweak for #3613.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3615] By: gsar on 1999/07/06 11:00:21
- Log: From: "Todd C. Miller" <Todd.Miller@courtesan.com>
- Date: Sun, 13 Jun 1999 17:46:13 -0600 (MDT)
- Message-Id: <199906132346.RAA26632@xerxes.courtesan.com>
- Subject: [ID 19990613.003 linklibperl set incorrectly in Makefile.SH for OpenBSD]
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3614] By: jhi on 1999/07/06 10:44:48
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> ext/IO/lib/IO/File.pm op.c op.h opcode.h opcode.pl perl.h pp.h
- !> pp.sym pp_proto.h t/base/rs.t t/pragma/warn/op
-____________________________________________________________________________
-[ 3613] By: jhi on 1999/07/06 10:43:20
- Log: From: Nathan Kurz <nate@valleytel.net>
- Subject: [ID 19990612.001 compiling three deep modules within ext/]
- ply-To: nate@valleytel.net
- erl5-porters@perl.org
- Date: Sat, 12 Jun 1999 01:26:04 -0500
- Message-Id: <199906120626.BAA04996@trinkpad.valleytel.net>
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3612] By: gsar on 1999/07/06 10:17:52
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 12 Jun 1999 04:49:09 -0400 (EDT)
- Message-Id: <199906120849.EAA26986@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_57] Optimize away OP_SASSIGN
- Branch: perl
- ! op.c op.h opcode.h opcode.pl pp.h pp.sym pp_proto.h
-____________________________________________________________________________
-[ 3611] By: gsar on 1999/07/06 09:51:20
- Log: From: pvhp@forte.com (Peter Prymmer)
- Date: Fri, 11 Jun 99 17:07:19 PDT
- Message-Id: <9906120007.AA13802@forte.com>
- Subject: [PATCH _03 && _57]portability fix for IO::File and FileHandle
- Branch: perl
- ! ext/IO/lib/IO/File.pm
-____________________________________________________________________________
-[ 3610] By: gsar on 1999/07/06 09:37:37
- Log: fix for C<$/ = 42> setting paragraph mode (applied with small
- tweak)
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Wed, 09 Jun 1999 18:27:51 +0100
- Message-Id: <E10rm8l-00023T-00@ursa.cus.cam.ac.uk>
- Subject: Re: [ID 19990608.002] Possible bug with binmode and <FH> on Perl 5.005_03 Win32
- Branch: perl
- ! perl.h t/base/rs.t
-____________________________________________________________________________
-[ 3609] By: jhi on 1999/07/06 09:28:48
- Log: Integrate with Sarathy.
- Branch: cfgperl
- !> (integrate 49 files)
-____________________________________________________________________________
-[ 3608] By: gsar on 1999/07/06 09:28:21
- Log: test tweak
- Branch: perl
- ! t/pragma/warn/op
-____________________________________________________________________________
-[ 3607] By: jhi on 1999/07/06 09:22:48
- Log: Put back the cygwin32 Configure fix of 3582 undone by 3597.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3606] By: gsar on 1999/07/06 09:05:02
- Log: applied slightly tweaked version of suggested patch for
- improved RE API
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 9 Jun 1999 18:14:27 -0400 (EDT)
- Message-Id: <199906092214.SAA14126@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_57] REx engine rehash
- Branch: perl
- ! Changes dump.c embed.h embed.pl embedvar.h ext/re/Makefile.PL
- ! ext/re/re.xs global.sym objXSUB.h perl.c perl.h pp.c pp_hot.c
- ! proto.h regcomp.c regcomp.h regexec.c regexp.h thrdvar.h
- ! util.c
-____________________________________________________________________________
-[ 3605] By: gsar on 1999/07/06 08:54:03
- Log: bug in change#3602 (cpp conditionals not allowed inside macro args)
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 3604] By: gsar on 1999/07/06 07:08:30
- Log: From: paul.marquess@bt.com
- Date: Tue, 8 Jun 1999 22:37:58 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB29C6C3C@mbtlipnt02.btlabs.bt.co.uk>
- Subject: [PATCH 5.005_57] DB_File 1.67
- Branch: perl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/typemap
-____________________________________________________________________________
-[ 3603] By: gsar on 1999/07/06 07:04:50
- Log: From: paul.marquess@bt.com
- Date: Tue, 8 Jun 1999 22:34:01 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB29C6C3B@mbtlipnt02.btlabs.bt.co.uk>
- Subject: [PATCH 5.005_57] DBM Filters
- Branch: perl
- ! ext/GDBM_File/GDBM_File.pm ext/GDBM_File/GDBM_File.xs
- ! ext/NDBM_File/NDBM_File.pm ext/NDBM_File/NDBM_File.xs
- ! ext/ODBM_File/ODBM_File.pm ext/ODBM_File/ODBM_File.xs
- ! ext/SDBM_File/SDBM_File.pm ext/SDBM_File/SDBM_File.xs
-____________________________________________________________________________
-[ 3602] By: gsar on 1999/07/06 07:00:01
- Log: slightly tweaked version of suggested patch
- From: Dan Sugalski <sugalskd@ous.edu>
- Date: Tue, 08 Jun 1999 14:09:38 -0700
- Message-Id: <3.0.6.32.19990608140938.030f12e0@ous.edu>
- Subject: [PATCH 5.005_57]Use NV instead of double in the core
- Branch: perl
- ! av.h bytecode.pl cv.h doio.c dump.c embed.pl
- ! ext/ByteLoader/bytecode.h ext/ByteLoader/byterun.c hv.h
- ! intrpvar.h mg.c op.c perl.h pp.c pp.h pp_ctl.c pp_sys.c
- ! proto.h sv.c sv.h toke.c universal.c util.c
-____________________________________________________________________________
-[ 3601] By: gsar on 1999/07/06 06:52:57
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> README.epoc epoc/config.h epoc/epoc.c epoc/epocish.h
- +> epoc/perl.mmp epoc/perl.pkg
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 3598] By: jhi on 1999/07/05 20:02:55
- Log: Integrate with mainperl.
- Branch: cfgperl
- +> lib/CGI/Pretty.pm
- !> Changes ext/B/B/Bblock.pm ext/B/B/C.pm ext/B/B/CC.pm
- !> ext/B/B/Stackobj.pm ext/GDBM_File/GDBM_File.xs mg.c op.c
- !> opcode.h opcode.pl pp_sys.c t/lib/io_udp.t thread.h toke.c
- !> vms/descrip_mms.template vms/subconfigure.com vms/vms.c
- !> vms/vmsish.h
-____________________________________________________________________________
-[ 3597] By: jhi on 1999/07/05 19:59:48
- Log: Hack SOCKS support some more plus a patch from Andy Dougherty
- that addresses the notorious "Additional libraries" question.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH doio.c ext/Socket/Socket.xs hints/aix.sh perl.c
- ! pp_sys.c
-____________________________________________________________________________
-[ 3596] By: gsar on 1999/07/05 18:30:51
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 8 Jun 1999 04:47:58 -0400 (EDT)
- Message-Id: <199906080847.EAA03810@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00557] Long-standing UDP sockets bug on OS/2
- Branch: perl
- ! pp_sys.c t/lib/io_udp.t
-____________________________________________________________________________
-[ 3595] By: gsar on 1999/07/05 18:29:08
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 8 Jun 1999 04:44:58 -0400 (EDT)
- Message-Id: <199906080844.EAA03784@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00557] Setting $^E wipes out $!
- Branch: perl
- ! mg.c
-____________________________________________________________________________
-[ 3594] By: gsar on 1999/07/05 18:24:53
- Log: hand-apply whitespace mutiliated patch
- From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Mon, 07 Jun 1999 14:46:42 -0700
- Message-Id: <3.0.6.32.19990607144642.03079100@ous.edu>
- Subject: [PATCH 5.005_57]Updated VMS patch
- Branch: perl
- ! thread.h vms/descrip_mms.template vms/subconfigure.com
- ! vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 3593] By: gsar on 1999/07/05 17:53:04
- Log: applied parts not duplicated by previous patches
- From: "Vishal Bhatia" <vishalb@my-deja.com>
- Date: Sat, 05 Jun 1999 08:42:17 -0700
- Message-ID: <JAMCAJKJEJDPAAAA@my-deja.com>
- Subject: Fwd: [PATCH 5.005_57] consolidated compiler changes
- Branch: perl
- ! Changes ext/B/B/Bblock.pm ext/B/B/C.pm ext/B/B/CC.pm
- ! ext/B/B/Stackobj.pm
-____________________________________________________________________________
-[ 3592] By: jhi on 1999/07/05 17:17:22
- Log: AIX threaded build, plus few more on the side.
- Branch: cfgperl
- ! embed.h embed.pl ext/DynaLoader/dl_aix.xs
- ! ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_rhapsody.xs
- ! ext/DynaLoader/dl_vms.xs hints/aix.sh objXSUB.h perl.h
- ! perl_exp.SH pp_ctl.c proto.h toke.c util.c
-____________________________________________________________________________
-[ 3591] By: gsar on 1999/07/05 16:52:34
- Log: "\e" and "\a" didn't produce right escape under EBCDIC
- From: pvhp@forte.com (Peter Prymmer)
- Date: Fri, 4 Jun 99 12:00:27 PDT
- Message-Id: <9906041900.AA28387@forte.com>
- Subject: [PATCH 5.005_57]lingering ASCIIism in tokener
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 3590] By: gsar on 1999/07/05 16:40:01
- Log: s/scalar ref constructor/single ref constructor/ (suggested
- by Stephen McCamant)
- Branch: perl
- ! opcode.h opcode.pl
-____________________________________________________________________________
-[ 3589] By: gsar on 1999/07/05 16:34:06
- Log: no such thing as gdbm_clearerr() (from Andy Dougherty)
- Branch: perl
- ! ext/GDBM_File/GDBM_File.xs
-____________________________________________________________________________
-[ 3588] By: gsar on 1999/07/05 16:29:39
- Log: allow C<-foo> under C<use integer> (behavior of C<-$string>
- is unchanged still)
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3587] By: jhi on 1999/07/05 10:31:43
- Log: Make perl_exp.SH smarter about what to include and what to exclude.
- Branch: cfgperl
- ! perl_exp.SH
-____________________________________________________________________________
-[ 3586] By: jhi on 1999/07/05 09:29:31
- Log: Remove unnecessary and extraneous my $i = 0.
- Branch: cfgperl
- ! bytecode.pl
-____________________________________________________________________________
-[ 3585] By: jhi on 1999/07/05 07:28:59
- Log: Integrate with mainperl.
- Branch: cfgperl
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 3584] By: gsar on 1999/07/05 05:36:28
- Log: From: Vishal Bhatia <vishalb@hotmail.com>
- Date: Thu, 03 Jun 1999 00:57:48 PDT
- Message-ID: <19990603075749.86665.qmail@hotmail.com>
- Subject: Re: [PATCH 5.005_57] pp_sort sorted out
- Branch: perl
- ! ext/B/B/Bblock.pm ext/B/B/C.pm ext/B/B/CC.pm
-____________________________________________________________________________
-[ 3583] By: gsar on 1999/07/05 05:31:19
- Log: suppress fancy display when in verbose mode (suggested by
- Paul Johnson <pjcj@transeda.com>)
- Branch: perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 3582] By: gsar on 1999/07/05 05:17:12
- Log: cygwin32 update
- From: "Fifer, Eric" <EFifer@sanwaint.com>
- Date: Wed, 2 Jun 1999 15:16:05 +0100
- Message-Id: <71E287AB0D94D111BBD600600849EC8185EDD9@POST>
- Subject: [ID 19990602.003] perl5.005_03 (CORE) cygwin32 port
- Branch: perl
- ! Configure Makefile.SH README.cygwin32 cygwin32/Makefile.SHs
- ! cygwin32/build-instructions.READFIRST
- ! cygwin32/build-instructions.charles-wilson
- ! cygwin32/build-instructions.sebastien-barre
- ! cygwin32/build-instructions.steven-morlock
- ! cygwin32/build-instructions.steven-morlock2 doio.c dosish.h
- ! ext/POSIX/Makefile.PL ext/POSIX/POSIX.xs hints/cygwin32.sh
- ! lib/Cwd.pm lib/ExtUtils/MM_Cygwin.pm perl.h pp_hot.c
- ! t/op/magic.t util.c
-____________________________________________________________________________
-[ 3581] By: gsar on 1999/07/05 02:46:18
- Log: NeXT doesn't have FD_CLOEXEC (suggested by Hans Mulder)
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 3580] By: gsar on 1999/07/05 02:38:03
- Log: From: "Ed Peschko" <ed_peschko@csgsystems.com>
- Date: Mon, 31 May 1999 18:18:13 -0600
- Message-ID: <19990601001813.AAA17834@csgsystems.com>
- Subject: [ PATCH perl5.005_57 ] new perlcc + regression tests
- Branch: perl
- ! t/TEST t/UTEST t/harness utils/perlcc.PL
-____________________________________________________________________________
-[ 3579] By: gsar on 1999/07/05 01:20:58
- Log: compatibility tweak for Class::Struct
- Branch: perl
- ! lib/Class/Struct.pm
-____________________________________________________________________________
-[ 3578] By: jhi on 1999/07/04 23:26:01
- Log: Miscellaneus AIX fixes + SOCKS support.
- Branch: cfgperl
- ! Configure Makefile.SH Porting/Glossary Porting/config.sh
- ! Porting/config_H config_h.SH doio.c ext/Socket/Socket.xs
- ! hints/aix.sh pp_sys.c
-____________________________________________________________________________
-[ 3577] By: gsar on 1999/07/04 23:07:39
- Log: test tweak
- Branch: perl
- ! t/io/openpid.t
-____________________________________________________________________________
-[ 3576] By: jhi on 1999/07/04 22:39:23
- Log: Integrate with mainperl.
- Branch: cfgperl
- +> t/io/openpid.t
- - win32/perlhost.h
- !> (integrate 51 files)
-____________________________________________________________________________
-[ 3575] By: jhi on 1999/07/04 22:26:48
- Log: Added 64-bit support for AIX 4.3 or better
- based on Martin H. Rusoff's observations.
- Branch: cfgperl
- ! Configure config_h.SH hints/aix.sh
-____________________________________________________________________________
-[ 3574] By: jhi on 1999/07/04 21:34:47
- Log: Do not throw away gccvers compilation errors.
- From: Andy Dougherty <doughera@lafayette.edu>
- To: Ron Seguin <rseguin@on.bell.ca>
- Cc: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH] Re: [ID 19990625.011] WHOA There
- Date: Mon, 28 Jun 1999 12:36:38 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9906281230100.6265-100000@newton.phys>
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3573] By: gsar on 1999/07/04 21:10:32
- Log: adapted suggested tests for addition to testsuite
- From: RonaldWS@aol.com
- Date: Sun, 30 May 1999 16:27:28 EDT
- Message-Id: <25cd799f.2482f930@aol.com>
- Subject: [19990530.007] Open with pipe | does not return pid under win32
- Branch: perl
- + t/io/openpid.t
- ! MANIFEST win32/win32.c
-____________________________________________________________________________
-[ 3572] By: gsar on 1999/07/04 20:29:32
- Log: perl_run() should call my_exit(0) for normal completion
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 3571] By: jhi on 1999/07/04 20:10:44
- Log: Add test for change #3568 plus general cleanup.
- Branch: cfgperl
- ! t/pragma/locale.t
-____________________________________________________________________________
-[ 3570] By: gsar on 1999/07/04 20:03:21
- Log: make overload, Data::Dumper, and dumpvar understand qr// stringify
- overloading
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm ext/Data/Dumper/Dumper.xs
- ! lib/Dumpvalue.pm lib/dumpvar.pl lib/overload.pm pp_ctl.c
-____________________________________________________________________________
-[ 3569] By: gsar on 1999/07/04 18:04:48
- Log: make AIX dynaloading work when libperl is shared (and thus under
- mod_perl etc.)
- From: Jens-Uwe Mager <jum@helios.de>
- Date: Sat, 29 May 1999 17:09:52 +0200
- Message-Id: <199905291509.RAA43978@ans.helios.de>
- Subject: [19990529.002] DynaLoader does not work properly if perl is not the main program (AIX)
- Branch: perl
- ! ext/DynaLoader/dl_aix.xs
-____________________________________________________________________________
-[ 3568] By: jhi on 1999/07/04 14:54:23
- Log: pp_lc/pp_lcfirst/pp_quotemeta/pp_uc/pp_ucfirst were not calling mg_set().
- This resulted for example in the 'o' magic not being cleared by
- magic_setcollxfrm(), which resulted in strange cmp results.
- The bug was reported originally in the message
- Subject: Bug with locale
- From: Jan Starzynski <jan@planet.de>
- To: perlbug@perl.com
- Date: Fri, 09 Apr 1999 13:23:07 +0200
- Message-ID: <370DE31B.DAEE1332@planet.de>
- Branch: cfgperl
- ! pp.c
-____________________________________________________________________________
-[ 3567] By: gsar on 1999/07/04 02:38:34
- Log: remove misleading info on defined(&func), unclutter deprecation
- about defined(@array)
- Branch: perl
- ! op.c pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- ! t/pragma/warn/op
-____________________________________________________________________________
-[ 3566] By: gsar on 1999/07/04 01:46:31
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 26 May 1999 22:07:17 +0200
- Message-ID: <374c53ac.10322322@smtp1.ibm.net>
- Subject: [PATCH 5.005_57] MINGW32 and EGCS 1.1.2 support
- Branch: perl
- ! Changes win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 3565] By: gsar on 1999/07/04 01:26:02
- Log: newer version of perlxstut from Jeff Okamoto (slightly edited
- for win32 issues)
- Branch: perl
- ! pod/perlxstut.pod
-____________________________________________________________________________
-[ 3564] By: gsar on 1999/07/02 03:09:04
- Log: avoid warnings
- Branch: perl
- ! ext/Thread/Thread/Specific.pm lib/fields.pm
-____________________________________________________________________________
-[ 3563] By: gsar on 1999/06/28 19:23:47
- Log: inc version (for CPAN.pm sanity)
- Branch: perl
- ! lib/Text/ParseWords.pm
-____________________________________________________________________________
-[ 3562] By: gsar on 1999/06/28 19:19:01
- Log: regen perltoc
- Branch: perl
- ! pod/perltoc.pod
-____________________________________________________________________________
-[ 3561] By: gsar on 1999/06/28 19:08:41
- Log: From: Damian Conway <damian@cs.monash.edu.au>
- Date: Wed, 26 May 1999 00:58:35 -0400
- Message-Id: <199905260458.AAA06411@defender.perl.org>
- Subject: [19990526.002] Misc. improvements to Class:Struct
- Branch: perl
- ! MANIFEST lib/Class/Struct.pm
-____________________________________________________________________________
-[ 3560] By: gsar on 1999/06/28 18:50:52
- Log: remove bogus PL_optype_size
- Branch: perl
- ! bytecode.pl ext/ByteLoader/byterun.h
-____________________________________________________________________________
-[ 3559] By: gsar on 1999/06/28 18:22:26
- Log: upgrade CGI.pm to v2.53 (CGI/{Apache,Switch}.pm NOT deleted)
- Branch: perl
- + lib/CGI/Pretty.pm
- ! eg/cgi/file_upload.cgi lib/CGI.pm lib/CGI/Carp.pm
- ! lib/CGI/Cookie.pm lib/CGI/Fast.pm t/lib/cgi-form.t
- ! t/lib/cgi-html.t t/lib/cgi-request.t
-____________________________________________________________________________
-[ 3558] By: jhi on 1999/06/28 07:30:21
- Log: Change Olaf Lebbe's email address.
- Branch: cfgperl
- ! README.epoc
-____________________________________________________________________________
-[ 3557] By: gsar on 1999/06/28 00:07:33
- Log: make autogenerated files writable
- Branch: perl
- - win32/perlhost.h
- ! MANIFEST Porting/makerel embed.h embedvar.h ext/B/B/Asmdata.pm
- ! ext/ByteLoader/byterun.c ext/ByteLoader/byterun.h global.sym
- ! keywords.h lib/warning.pm objXSUB.h opcode.h pp.sym pp_proto.h
- ! proto.h regnodes.h warning.h win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 3556] By: jhi on 1999/06/27 19:22:53
- Log: Update MANIFEST to match #3555.
- Branch: cfgperl
- ! MANIFEST
-____________________________________________________________________________
-[ 3555] By: jhi on 1999/06/27 19:16:22
- Log: EPOC port to Psion5.
- From: Olaf Flebbe <O.Flebbe@science-computing.de>
- To: Jarkko Hietaniemi <jhi@iki.fi>
- Cc: perl5-porters@perl.org
- Subject: Re: Psion5
- Date: Sun, 27 Jun 1999 20:50:30 +0200 (METDST)
- Message-ID: <Pine.GHP.4.02.9906272048130.17736-100000@io.science-computing.de>
- Branch: cfgperl
- + README.epoc epoc/config.h epoc/epoc.c epoc/epocish.h
- + epoc/perl.mmp epoc/perl.pkg
- ! MANIFEST doio.c lib/Term/ReadLine.pm lib/perl5db.pl perl.c
- ! perl.h sv.c util.c
-____________________________________________________________________________
-[ 3554] By: jhi on 1999/06/27 18:50:52
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 48 files)
-____________________________________________________________________________
-[ 3553] By: gsar on 1999/06/27 14:28:49
- Log: somewhat untested PERL_OBJECT cleanups (C++isms mostly
- gone from the public API); PERL_OBJECT builds again on
- windows
-
- TODO: namespace-clean the typedefs in iperlsys.h and
- elsewhere; remove C++ remnants from public headers
- Branch: perl
- ! XSUB.h bytecode.pl cv.h embed.h embed.pl ext/B/B.xs
- ! ext/ByteLoader/ByteLoader.xs ext/ByteLoader/bytecode.h
- ! ext/ByteLoader/byterun.c ext/ByteLoader/byterun.h
- ! ext/DynaLoader/dlutils.c global.sym globals.c iperlsys.h
- ! lib/ExtUtils/Embed.pm lib/ExtUtils/xsubpp mg.c objXSUB.h
- ! opcode.h opcode.pl perl.c perl.h pod/perlhist.pod pp_ctl.c
- ! pp_hot.c proto.h scope.h sv.h toke.c universal.c util.c
- ! win32/GenCAPI.pl win32/Makefile win32/config.bc
- ! win32/config.gc win32/config.vc win32/dl_win32.xs
- ! win32/makedef.pl win32/makefile.mk win32/perllib.c
- ! win32/runperl.c win32/win32.c win32/win32.h win32/win32iop.h
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 3552] By: gsar on 1999/06/27 13:49:31
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> dump.c embed.h embed.pl embedvar.h global.sym intrpvar.h mg.c
- !> objXSUB.h op.c perl.c perl.h perlvars.h pp.c pp_ctl.c
- !> pp_proto.h pp_sys.c proto.h sv.c t/pragma/locale.t toke.c
- !> util.c
-____________________________________________________________________________
-[ 3551] By: gsar on 1999/06/27 13:31:11
- Log: fix indents
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3550] By: gsar on 1999/06/24 22:42:53
- Log: update Changes
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 3549] By: gsar on 1999/06/24 22:41:17
- Log: avoid race condition in the CAPI extension bootstrap handler
- Branch: perl
- ! lib/ExtUtils/xsubpp win32/GenCAPI.pl
-____________________________________________________________________________
-[ 3548] By: gsar on 1999/06/24 22:39:53
- Log: sanity check to cover the case when perl is installed into the
- X:\ (drive root)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3547] By: gsar on 1999/06/22 19:30:32
- Log: tweak RefHash to make intent clearer (suggested by John Dlugosz)
- Branch: perl
- ! lib/Tie/RefHash.pm
-____________________________________________________________________________
-[ 3544] By: jhi on 1999/06/18 19:24:28
- Log: Tidy up #3542 and #3543.
- Branch: cfgperl
- ! t/pragma/locale.t util.c
-____________________________________________________________________________
-[ 3543] By: jhi on 1999/06/18 10:28:45
- Log: Spice up locale.t.
- Branch: cfgperl
- ! t/pragma/locale.t
-____________________________________________________________________________
-[ 3542] By: jhi on 1999/06/17 22:42:03
- Log: Fixed two long-standing locale bugs.
-
- Both problems were related to numeric locale which
- controls the radix character aka the decimal separator.
- (1) printf (and sprintf) were resetting the numeric locale to C.
- (2) Using locale-numerically formatted floating point
- numbers (e.g. "1,23") together with -w caused warnings about
- "isn't numeric". The operations were working fine, though,
- because atof() was using the local locale.
- Both problems reported by Stefan Vogtner.
-
- Introduced a wrapper for atof() that attempts to convert
- the string both ways. This helps Perl to understand
- numbers like this "4.56" even when using a local locale
- makes atof() understand only numbers like this "7,89".
-
- Remaining related problems, both of which existed before
- this patch and continue to exist after this patch:
- (a) The behaviour of print() is _not_ as documented by perllocale.
- Instead of always using the C locale, print() does use the
- local locale, just like the *printf() do. This may be fixable
- now that switching to-and-fro between locales has been made
- more consistent, but fixing print() would change existing
- behaviour. perllocale is not changed by this patch.
- (b) If a number has been stringified (say, via "$number") under
- a local locale, the cached string value persists even under
- "no locale". This may or may not be a problem: operations
- work fine because the original number is still there, but
- that the string form keeps its locale-ish outlook may be
- somewhat confusing.
- Branch: cfgperl
- ! dump.c embed.h embed.pl embedvar.h global.sym intrpvar.h mg.c
- ! objXSUB.h op.c perl.c perl.h perlvars.h pp.c pp_ctl.c
- ! pp_proto.h pp_sys.c proto.h sv.c t/pragma/locale.t toke.c
- ! util.c
-____________________________________________________________________________
-[ 3541] By: jhi on 1999/06/17 20:00:16
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> ext/Data/Dumper/Dumper.pm op.c
-____________________________________________________________________________
-[ 3540] By: gsar on 1999/06/16 16:49:55
- Log: dump C<0> as such, not C<'0'>
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm
-____________________________________________________________________________
-[ 3539] By: gsar on 1999/06/13 04:04:40
- Log: fix coredumper in change#3498
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3538] By: jhi on 1999/06/12 22:01:26
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> lib/caller.pm
- !> (integrate 36 files)
-____________________________________________________________________________
-[ 3537] By: gsar on 1999/06/12 06:43:03
- Log: EXTERN_C declarations for global arrays in various
- headers, so perl can be built even in C++ mode; win32
- build fixups; regen headers
- Branch: perl
- ! XSUB.h embedvar.h ext/B/B.xs objXSUB.h opcode.h opcode.pl
- ! perl.h regcomp.h regexec.c utf8.h win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 3536] By: gsar on 1999/06/12 06:38:21
- Log: caller.pm typos
- Branch: perl
- ! lib/caller.pm
-____________________________________________________________________________
-[ 3535] By: gsar on 1999/06/11 23:13:54
- Log: various little tweaks; most globals are now in intrpvar.h, ninterps
- is temporarily gone
- Branch: perl
- ! embed.pl intrpvar.h os2/os2.c perl.c perlvars.h
- ! pod/perldelta.pod proto.h win32/perllib.c
-____________________________________________________________________________
-[ 3534] By: gsar on 1999/06/11 20:41:51
- Log: implement C<use caller 'encoding'>
- Branch: perl
- + lib/caller.pm
- ! MANIFEST perl.h pod/perldelta.pod pod/perlfunc.pod pp_ctl.c
-____________________________________________________________________________
-[ 3533] By: gsar on 1999/06/11 16:51:04
- Log: truncate() has a peculiar exemption from strict barewords, even
- though it has a non-filehandle prototype
- Branch: perl
- ! op.c t/io/fs.t
-____________________________________________________________________________
-[ 3532] By: gsar on 1999/06/11 09:09:16
- Log: GDBM tweak
- Branch: perl
- ! ext/GDBM_File/GDBM_File.xs ext/GDBM_File/typemap
-____________________________________________________________________________
-[ 3531] By: gsar on 1999/06/10 23:34:19
- Log: part of the platform changes for IMPLICIT_CONTEXT
- Branch: perl
- ! djgpp/djgpp.c jpl/JNI/JNI.xs jpl/JNI/typemap
- ! jpl/PerlInterpreter/PerlInterpreter.c
- ! jpl/PerlInterpreter/PerlInterpreter.h
- ! os2/OS2/ExtAttr/ExtAttr.xs os2/OS2/PrfDB/PrfDB.xs
- ! os2/OS2/Process/Process.xs os2/OS2/REXX/REXX.xs perl.h
-____________________________________________________________________________
-[ 3530] By: jhi on 1999/06/10 20:55:56
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> ext/DB_File/DB_File.xs ext/DB_File/typemap
-____________________________________________________________________________
-[ 3529] By: gsar on 1999/06/10 20:40:01
- Log: DB_File tweaks for IMPLICIT CONTEXT
- Branch: perl
- ! ext/DB_File/DB_File.xs ext/DB_File/typemap
-____________________________________________________________________________
-[ 3528] By: jhi on 1999/06/10 10:18:15
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 105 files)
-____________________________________________________________________________
-[ 3527] By: gsar on 1999/06/10 09:30:35
- Log: most globals are now interpreter local; locale initialization
- was too early, defer it until interpreter is allocated and
- initialized; multiple interpreters should now be
- concurrency-safe (untested)
- Branch: perl
- ! embedvar.h intrpvar.h malloc.c miniperlmain.c perl.c perl.h
- ! perlvars.h
-____________________________________________________________________________
-[ 3526] By: gsar on 1999/06/10 08:38:00
- Log: fix small nits
- Branch: perl
- ! cc_runtime.h ext/B/B/CC.pm run.c
-____________________________________________________________________________
-[ 3525] By: gsar on 1999/06/10 04:41:38
- Log: win32 build fixes
- Branch: perl
- ! bytecode.pl dosish.h embed.h embed.pl ext/B/B.xs
- ! ext/ByteLoader/ByteLoader.xs ext/ByteLoader/bytecode.h
- ! ext/ByteLoader/byterun.h ext/SDBM_File/sdbm/sdbm.c globals.c
- ! mg.c objXSUB.h op.h perl.c perl.h pp_sys.c proto.h sv.c util.c
- ! win32/Makefile win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/config_h.PL win32/dl_win32.xs
- ! win32/makedef.pl win32/makefile.mk win32/perllib.c
- ! win32/win32.c win32/win32.h win32/win32sck.c
- ! win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 3524] By: gsar on 1999/06/09 18:03:01
- Log: more complete support for implicit thread/interpreter pointer,
- enabled via -DPERL_IMPLICIT_CONTEXT (all changes are noops
- without that enabled):
- - USE_THREADS now enables PERL_IMPLICIT_CONTEXT, so dTHR
- is a noop; tests pass on Solaris; should be faster now!
- - MULTIPLICITY has been tested with and without
- PERL_IMPLICIT_CONTEXT on Solaris
- - improved function database now merged with embed.pl
- - everything except the varargs functions have foo(a,b,c) macros
- to provide compatibility
- - varargs functions default to compatibility variants that
- get the context pointer using dTHX
- - there should be almost no source compatibility issues as a
- result of all this
- - dl_foo.xs changes other than dl_dlopen.xs untested
- - still needs documentation, fixups for win32 etc
- Next step: migrate most non-mutex variables from perlvars.h
- to intrpvar.h
- Branch: perl
- - proto.pl
- ! MANIFEST XSUB.h av.c bytecode.pl cv.h doio.c doop.c dump.c
- ! ebcdic.c embed.h embed.pl embedvar.h ext/B/B.xs ext/B/typemap
- ! ext/ByteLoader/ByteLoader.xs ext/ByteLoader/bytecode.h
- ! ext/ByteLoader/byterun.c ext/ByteLoader/byterun.h
- ! ext/Data/Dumper/Dumper.xs ext/Devel/Peek/Peek.xs
- ! ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_beos.xs
- ! ext/DynaLoader/dl_cygwin32.xs ext/DynaLoader/dl_dld.xs
- ! ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dl_hpux.xs
- ! ext/DynaLoader/dl_mpeix.xs ext/DynaLoader/dl_next.xs
- ! ext/DynaLoader/dl_none.xs ext/DynaLoader/dl_rhapsody.xs
- ! ext/DynaLoader/dl_vmesa.xs ext/DynaLoader/dl_vms.xs
- ! ext/DynaLoader/dlutils.c ext/Opcode/Opcode.xs
- ! ext/POSIX/POSIX.xs ext/Thread/Thread.xs ext/re/re.xs
- ! global.sym globals.c gv.c hv.c lib/ExtUtils/typemap
- ! lib/ExtUtils/xsubpp malloc.c mg.c mg.h miniperlmain.c
- ! objXSUB.h op.c opcode.h opcode.pl perl.c perl.h perlio.c
- ! perlsfio.h perly.c pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c
- ! proto.h regcomp.c regcomp.h regexec.c run.c scope.c scope.h
- ! sv.c taint.c thrdvar.h thread.h toke.c universal.c utf8.c
- ! util.c win32/Makefile win32/makefile.mk writemain.SH
-____________________________________________________________________________
-[ 3523] By: gsar on 1999/06/07 05:24:13
- Log: missed a file
- Branch: perl
- + proto.pl
- ! MANIFEST
-____________________________________________________________________________
-[ 3522] By: gsar on 1999/06/07 05:18:34
- Log: initial stub implementation of implicit thread/this
- pointer argument; builds/tests on Solaris, win32
- hasn't been fixed up yet; proto.h, global.sym and
- static function decls are now generated from a common
- database in proto.pl; some inconsistently named
- perl_foo() things are now Perl_foo(), compatibility
- #defines provided; perl_foo() (lowercase 'p') reserved
- for functions that take an explicit context argument;
- next step: generate #define foo(a,b) Perl_foo(aTHX_ a,b)
- Branch: perl
- ! XSUB.h av.c cop.h deb.c doio.c doop.c dump.c ebcdic.c embed.h
- ! embed.pl ext/POSIX/POSIX.xs global.sym globals.c gv.c gv.h
- ! hv.c malloc.c mg.c miniperlmain.c objXSUB.h op.c opcode.h
- ! opcode.pl perl.c perl.h perl_exp.SH perlio.c perly.c perly.y
- ! pp.c pp.sym pp_ctl.c pp_hot.c pp_proto.h pp_sys.c proto.h
- ! regcomp.c regexec.c run.c scope.c scope.h sv.c taint.c toke.c
- ! universal.c utf8.c util.c
-____________________________________________________________________________
-[ 3521] By: gsar on 1999/06/04 23:00:22
- Log: clean up some stray "global" symbols
- Branch: perl
- ! embed.h embed.pl global.sym objXSUB.h opcode.pl pp.sym
- ! pp_proto.h proto.h
-____________________________________________________________________________
-[ 3520] By: jhi on 1999/06/02 21:33:28
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 94 files)
-____________________________________________________________________________
-[ 3519] By: gsar on 1999/06/02 07:16:10
- Log: avoid dereferencing null pointer from getpwent() et al
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 3518] By: gsar on 1999/06/02 04:47:10
- Log: remove _() non-ansism
- Branch: perl
- ! Porting/config_H XSUB.h config_h.SH cv.h doio.c doop.c
- ! ext/B/B/C.pm ext/B/B/CC.pm ext/B/byteperl.c
- ! ext/ByteLoader/ByteLoader.xs ext/Data/Dumper/Dumper.xs
- ! ext/DynaLoader/dl_beos.xs ext/DynaLoader/dl_dlopen.xs
- ! ext/DynaLoader/dl_vmesa.xs ext/IO/poll.h ext/IPC/SysV/SysV.xs
- ! ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs ext/Thread/Thread.xs
- ! ext/re/re.xs handy.h hv.c iperlsys.h
- ! jpl/PerlInterpreter/PerlInterpreter.c lib/ExtUtils/Embed.pm
- ! malloc.c mg.c mg.h minimod.pl miniperlmain.c op.c op.h
- ! opcode.h opcode.pl os2/POSIX.mkfifo perl.c perl.h
- ! plan9/config.plan9 pod/perlembed.pod pod/perlguts.pod pp.c
- ! pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c regexec.c run.c
- ! scope.h sv.c sv.h thread.h toke.c util.c vms/sockadapt.h
- ! vms/vmsish.h vms/writemain.pl vos/config.h
- ! vos/config_h.SH_orig win32/GenCAPI.pl win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makemain.pl
- ! win32/perllib.c win32/runperl.c win32/win32.h
- ! win32/win32thread.h writemain.SH x2p/a2p.c x2p/a2p.h x2p/a2p.y
- ! x2p/hash.h x2p/str.h x2p/util.h x2p/walk.c
-____________________________________________________________________________
-[ 3517] By: gsar on 1999/06/02 02:17:51
- Log: missed a few files
- Branch: perl
- ! ext/POSIX/POSIX.xs jpl/JNI/JNI.xs
-____________________________________________________________________________
-[ 3516] By: gsar on 1999/06/02 01:37:33
- Log: integrate cfgperl contents into mainline
- Branch: perl
- +> ext/ByteLoader/bytecode.h ext/ByteLoader/byterun.c
- +> ext/ByteLoader/byterun.h
- - bytecode.h byterun.c byterun.h
- ! Changes
- !> (integrate 58 files)
-____________________________________________________________________________
-[ 3515] By: gsar on 1999/06/02 00:48:50
- Log: remove stray K&R-isms
- Branch: perl
- ! ext/SDBM_File/sdbm/dba.c ext/SDBM_File/sdbm/dbd.c
- ! ext/SDBM_File/sdbm/dbe.c ext/SDBM_File/sdbm/dbm.c
- ! ext/SDBM_File/sdbm/dbu.c mg.c op.c pp_ctl.c pp_sys.c sv.c
- ! toke.c util.c win32/win32.c x2p/hash.c
-____________________________________________________________________________
-[ 3514] By: gsar on 1999/06/01 15:55:55
- Log: change#3447 didn't do enough to exempt Foo->bar(qw/.../) from
- strict 'subs'
- Branch: perl
- ! op.c t/pragma/strict-subs
-____________________________________________________________________________
-[ 3513] By: jhi on 1999/06/01 07:17:05
- Log: Patch applying of #3499 had gone awry.
- Branch: cfgperl
- ! ext/ByteLoader/bytecode.h ext/ByteLoader/byterun.h
-____________________________________________________________________________
-[ 3512] By: gsar on 1999/05/31 19:21:30
- Log: tighter -help output
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 3511] By: gsar on 1999/05/31 17:18:23
- Log: fix memory leak in C<eval 'return sub {...}'>
- Branch: perl
- ! embed.h embed.pl objXSUB.h pp_ctl.c proto.h
-____________________________________________________________________________
-[ 3510] By: gsar on 1999/05/31 14:11:46
- Log: tweak C++isms
- Branch: perl
- ! win32/dl_win32.xs win32/win32.c
-____________________________________________________________________________
-[ 3509] By: jhi on 1999/05/30 13:02:26
- Log: Cleanup of #3488.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3508] By: jhi on 1999/05/30 11:16:01
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_57] Teach Socket and io_unix.t the syntax of OS/2
- Date: Sat, 29 May 1999 20:18:13 -0400
- Message-ID: <19990529201813.B9489@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! ext/Socket/Socket.xs os2/os2ish.h t/lib/io_unix.t
-____________________________________________________________________________
-[ 3507] By: jhi on 1999/05/29 20:05:40
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- To: perl5-porters@perl.com
- Subject: PATCH (5.005_57): Document use of `SPECIAL' flag for `pushre':
- Date: Sat, 29 May 1999 14:45:10 -0400
- Message-ID: <19990529184510.27557.qmail@plover.com>
- Branch: cfgperl
- ! op.h
-____________________________________________________________________________
-[ 3506] By: gsar on 1999/05/29 16:49:39
- Log: avoid gv_check() recursive pit
- Branch: perl
- ! gv.c
-____________________________________________________________________________
-[ 3505] By: jhi on 1999/05/29 11:38:16
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- To: Gurusamy Sarathy <gsar@activestate.com>
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.005_57]Safeguard against unimplemented functions in pwuid.t and grent.t
- Date: Sat, 29 May 1999 08:46:22 +0200
- Message-ID: <374f8007.2016008@smtp1.ibm.net>
- Branch: cfgperl
- ! t/op/grent.t t/op/pwent.t
-____________________________________________________________________________
-[ 3504] By: jhi on 1999/05/29 11:07:10
- Log: QNX needs <sys/select.h> to define fd_set.
-
- From: Norton Allen <allen@huarp.harvard.edu>
- To: perl5-porters@perl.org
- Subject: [19990526.016] Not OK: perl 5.00503 on x86-qnx 424
- Date: Wed, 26 May 1999 13:51:27 -0400 (EDT)
- Message-Id: <199905261751.NAA20966@bottesini.harvard.edu>
- Branch: cfgperl
- ! ext/IO/poll.c
-____________________________________________________________________________
-[ 3503] By: jhi on 1999/05/29 10:53:31
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- To: Gurusamy Sarathy <gsar@activestate.com>, perl5-porters@perl.org
- Subject: [PATCH all versions] (was Re: Unitialized Value Complaints in Math::BigFloat)
- Date: Fri, 28 May 1999 20:14:35 +0200
- Message-ID: <3751daa4.7188847@smtp1.ibm.net>
- Branch: cfgperl
- ! lib/Math/BigFloat.pm
-____________________________________________________________________________
-[ 3502] By: jhi on 1999/05/29 10:44:44
- Log: Make Configure support the change #3367,
- SysV shadow passwords.
- Branch: cfgperl
- ! Configure config_h.SH pp_sys.c
-____________________________________________________________________________
-[ 3501] By: gsar on 1999/05/28 21:22:23
- Log: add wide versions of win32 system calls (first step in
- globalization); delayload winsock for performance if compiling
- with VC 6.0
- Branch: perl
- ! win32/Makefile win32/dl_win32.xs win32/makefile.mk
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 3500] By: jhi on 1999/05/28 21:17:24
- Log: The new t/lib/io_linenum.t was using stricture
- before @INC was set up.
- Branch: cfgperl
- ! t/lib/io_linenum.t
-____________________________________________________________________________
-[ 3499] By: jhi on 1999/05/28 17:13:23
- Log: From: Tom Hughes <tom@compton.nu>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_57] ByteLoader mark 2
- Date: Wed, 26 May 1999 23:59:49 +0100
- Message-ID: <bf337a0849.tom@compton.compton.nu>
-
- plus resolve tiny conflict with #3479
- plus regen_headers.
- Branch: cfgperl
- + ext/ByteLoader/bytecode.h ext/ByteLoader/byterun.c
- + ext/ByteLoader/byterun.h
- - bytecode.h byterun.c byterun.h
- ! MANIFEST Makefile.SH bytecode.pl embed.h embedvar.h ext/B/B.pm
- ! ext/B/B.xs ext/B/B/Bytecode.pm ext/B/Makefile.PL
- ! ext/ByteLoader/ByteLoader.pm ext/ByteLoader/ByteLoader.xs
- ! ext/ByteLoader/Makefile.PL global.sym intrpvar.h objXSUB.h
- ! perl.h perlvars.h proto.h util.c utils/Makefile
-____________________________________________________________________________
-[ 3498] By: jhi on 1999/05/28 16:53:04
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- To: perl5-porters@perl.com
- Subject: PATCH (5.005_57): defined(@a) now deprecated
- Date: Thu, 27 May 1999 16:05:44 -0400
- Message-ID: <19990527200544.13330.qmail@plover.com>
- Branch: cfgperl
- ! lib/Carp.pm op.c opcode.h opcode.pl pod/perldelta.pod
- ! pod/perldiag.pod pod/perlfunc.pod pp_proto.h t/pragma/warn/op
-____________________________________________________________________________
-[ 3497] By: jhi on 1999/05/28 16:50:54
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.00557] Cosmetic OS/2-related patches
- Date: Fri, 28 May 1999 12:13:00 -0400 (EDT)
- Message-Id: <199905281613.MAA02048@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! MANIFEST Makefile.SH ext/POSIX/POSIX.xs hints/os2.sh
- ! os2/Makefile.SHs t/io/pipe.t t/lib/io_sock.t
-____________________________________________________________________________
-[ 3496] By: jhi on 1999/05/28 16:48:39
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.00557] Required OS/2-related patches
- Date: Fri, 28 May 1999 12:11:48 -0400 (EDT)
- Message-Id: <199905281611.MAA02037@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! os2/os2.c t/lib/bigfloatpm.t t/lib/io_unix.t t/op/groups.t
- ! t/op/stat.t util.c
-____________________________________________________________________________
-[ 3495] By: jhi on 1999/05/28 16:45:56
- Log: From: Paul Johnson <pjcj@transeda.com>
- To: perl5-porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_57] Provide more useful test okay percentage
- Date: Fri, 28 May 1999 15:13:54 +0100
- Message-ID: <19990528151354.B289@west-tip.transeda.com>
- Branch: cfgperl
- ! t/TEST
-____________________________________________________________________________
-[ 3494] By: jhi on 1999/05/28 16:44:34
- Log: From: Paul Johnson <pjcj@transeda.com>
- To: perl5-porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_57] Fixes related to working local $.
- Date: Fri, 28 May 1999 15:11:18 +0100
- Message-ID: <19990528151118.A289@west-tip.transeda.com>
- Branch: cfgperl
- ! ext/IO/lib/IO/Handle.pm pod/perlvar.pod t/lib/io_linenum.t
-____________________________________________________________________________
-[ 3493] By: gsar on 1999/05/28 16:37:26
- Log: change#3449 wasn't doing enough
- Branch: perl
- ! op.c t/comp/proto.t
-____________________________________________________________________________
-[ 3492] By: jhi on 1999/05/28 08:12:23
- Log: From: paul.marquess@bt.com
- To: doughera@lafayette.edu
- Cc: perl5-porters@perl.org
- Subject: RE: [19990527.002] DBM Filters in _57 cause problems in NDBM_File
- Date: Thu, 27 May 1999 23:31:38 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB29C6C03@mbtlipnt02.btlabs.bt.co.uk>
-
- Had to be applied manually; some mailer had munged the patch slightly.
- Branch: cfgperl
- ! ext/NDBM_File/NDBM_File.xs
-____________________________________________________________________________
-[ 3491] By: jhi on 1999/05/28 07:51:17
- Log: From: "Vishal Bhatia" <vishalb@my-deja.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_57] fixing eval in the compiler
- Date: Thu, 27 May 1999 07:56:54 -0700
- Message-ID: <JDIKFDKKLGHHBAAA@my-deja.com>
- Branch: cfgperl
- ! cc_runtime.h scope.h
-____________________________________________________________________________
-[ 3490] By: jhi on 1999/05/28 07:47:06
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: perlbug@perl.com
- Cc: Jarkko Hietaniemi <jhi@iki.fi>
- Subject: [PATCH] Configure updates for ISC 4.1
- Date: Thu, 27 May 1999 15:19:21 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9905271513500.22115-100000@newton.phys>
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3489] By: jhi on 1999/05/28 07:39:17
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> malloc.c win32/makedef.pl win32/win32.c
-____________________________________________________________________________
-[ 3488] By: jhi on 1999/05/27 16:57:19
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH] Re: 5.005_57 NOT OK on SunOS 4.1.3
- Date: Thu, 27 May 1999 12:26:28 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9905271120230.22115-100000@newton.phys>
- Branch: cfgperl
- ! Configure config_h.SH hints/sunos_4_1.sh util.c
-____________________________________________________________________________
-[ 3487] By: gsar on 1999/05/27 03:56:20
- Log: make win32_spawnvp() inherit standard handles even when they
- may be redirected
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3486] By: jhi on 1999/05/26 19:55:52
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: perl5-porters@perl.org
- Subject: Re: BUG -> [19990526.004] perl5.005_57 error in util.c on sun4-solaris2.6
- Date: Wed, 26 May 1999 14:49:52 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9905261448310.19172-100000@newton.phys>
- Branch: cfgperl
- ! util.c
-____________________________________________________________________________
-[ 3485] By: chip on 1999/05/26 17:19:11
- Log: Look for Linux FILE structure in libio.h, for glibc-2.1.
- Branch: maint-5.004/perl
- ! Configure
-____________________________________________________________________________
-[ 3484] By: gsar on 1999/05/26 01:56:28
- Log: fix missing exported symbol
- Branch: perl
- ! malloc.c win32/makedef.pl
-____________________________________________________________________________
-[ 3483] By: jhi on 1999/05/25 23:08:07
- Log: Configure -Dopenbsd_distribution to build for the OpenBSD tree.
-
- From: "Todd C. Miller" <Todd.Miller@courtesan.com>
- To: perlbug@perl.com
- Subject: OpenBSD hints file update
- Date: Tue, 25 May 1999 12:12:38 -0600 (MDT)
- Message-Id: <199905251812.MAA06032@xerxes.courtesan.com>
- Branch: cfgperl
- ! hints/openbsd.sh
-____________________________________________________________________________
-[ 3482] By: jhi on 1999/05/25 23:01:25
- Log: From: Tom Hughes <tom@compton.nu>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_57] Make Configure recognise glibc 2.1 stdio
- Date: Tue, 25 May 1999 23:10:23 +0100
- Message-ID: <1ed7f10749.tom@compton.compton.nu>
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3481] By: jhi on 1999/05/25 22:31:50
- Log: 3479, 3480, 3481 seems logical.
- Branch: cfgperl
- !> hints/aix.sh
-____________________________________________________________________________
-[ 3480] By: jhi on 1999/05/25 22:13:39
- Log: The change #3479 wasn't perfect.
- Branch: perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 3479] By: jhi on 1999/05/25 21:59:21
- Log: Cures for _57 in AIX 4.1.5.0.
- (1) The lddlflags lost its -lc by change #3660
- (and the politeness of change #3257).
- (2) optype_size must end up in perl.exp (as PL_optype_size).
- Added it to perlvars.h, fixed bytecode.pl,
- regen'ed the relevant headers.
- Branch: cfgperl
- ! bytecode.h bytecode.pl byterun.h embed.h embedvar.h objXSUB.h
- ! perlvars.h
- Branch: perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 3478] By: jhi on 1999/05/25 20:13:47
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> pod/perltootc.pod
- !> (integrate 101 files)
-____________________________________________________________________________
-[ 3477] By: gsar on 1999/05/25 10:43:48
- Log: here be 5.005_57
- Branch: perl
- ! Changes MANIFEST Porting/makerel
- !> Changes5.005
-
-----------------
-Version 5.005_57
-----------------
-
-____________________________________________________________________________
-[ 3476] By: gsar on 1999/05/25 09:23:43
- Log: up patchlevel &c
- Branch: perl
- ! Changes patchlevel.h pod/perlhist.pod win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 3475] By: gsar on 1999/05/25 09:14:51
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 25 May 1999 02:42:23 -0400 (EDT)
- Message-Id: <199905250642.CAA06208@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_56] REx engine improvements
- Branch: perl
- ! embedvar.h mg.c objXSUB.h pp.c pp_ctl.c pp_hot.c regcomp.c
- ! regexec.c regexp.h t/op/pat.t t/op/re_tests t/op/regexp.t
- ! thrdvar.h util.c
-____________________________________________________________________________
-[ 3474] By: gsar on 1999/05/25 08:39:56
- Log: test case for change#3470
- Branch: perl
- ! t/lib/bigintpm.t
-____________________________________________________________________________
-[ 3473] By: gsar on 1999/05/25 08:36:52
- Log: perlport 1.43 update from Chris Nandor and Tom Christiansen
- Branch: perl
- ! Changes pod/perlport.pod
-____________________________________________________________________________
-[ 3472] By: gsar on 1999/05/25 08:28:57
- Log: assorted tweaks
- Branch: perl
- ! doio.c iperlsys.h win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makedef.pl
-____________________________________________________________________________
-[ 3471] By: gsar on 1999/05/25 06:06:04
- Log: perlref update from Tom Christiansen
- Branch: perl
- ! pod/perlref.pod
-____________________________________________________________________________
-[ 3470] By: gsar on 1999/05/25 06:03:27
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 24 May 1999 17:43:56 -0400
- Message-ID: <19990524174356.A1944@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] hv.c calling negative malloc()
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 3469] By: gsar on 1999/05/25 05:59:22
- Log: avoid temporary files that have a constant name (from a suggestion
- by Anthony J. Lill <ajlill@ajlc.waterloo.on.ca>)
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 3468] By: gsar on 1999/05/25 05:54:29
- Log: From: pvhp@forte.com (Peter Prymmer)
- Date: Mon, 24 May 99 11:20:25 PDT
- Message-Id: <9905241820.AA28071@forte.com>
- Subject: [PATCH: _56 and _03]EBCDIC %HTML_Escapes for Pod::Text, plus sync patch.
- Branch: perl
- ! lib/Pod/Text.pm
-____________________________________________________________________________
-[ 3467] By: gsar on 1999/05/25 04:08:50
- Log: fix glob() bug that resulted in missing symlinks that don't point
- anywhere
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 3466] By: gsar on 1999/05/25 03:00:00
- Log: avoid enumerating @INC contents in diagnostic if @INC was never
- searched
- Branch: perl
- ! pod/perldiag.pod pp_ctl.c
-____________________________________________________________________________
-[ 3465] By: gsar on 1999/05/25 02:24:08
- Log: add caveat about close(PIPE) carelessness
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3464] By: gsar on 1999/05/24 23:55:53
- Log: fix bogus line numbers for void context warnings
- (change#2548 was overeager)
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3463] By: gsar on 1999/05/24 23:31:58
- Log: change#3455 had a typo
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 3462] By: gsar on 1999/05/24 17:32:20
- Log: more pod updates from Tom Christiansen; regen perltoc
- Branch: perl
- ! pod/perl.pod pod/perldelta.pod pod/perlmod.pod pod/perlobj.pod
- ! pod/perlre.pod pod/perltoc.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 3461] By: gsar on 1999/05/24 07:41:32
- Log: perlmod notes from Damian Conway (via Tom Christiansen)
- Branch: perl
- ! pod/perlmod.pod
-____________________________________________________________________________
-[ 3460] By: gsar on 1999/05/24 07:24:11
- Log: major pod update from Tom Christiansen
- Branch: perl
- + pod/perltootc.pod
- ! MANIFEST lib/Pod/Functions.pm pod/Makefile pod/buildtoc
- ! pod/perl.pod pod/perl5004delta.pod pod/perlcall.pod
- ! pod/perldata.pod pod/perldebug.pod pod/perldelta.pod
- ! pod/perldsc.pod pod/perlfunc.pod pod/perlipc.pod
- ! pod/perllol.pod pod/perlmod.pod pod/perlmodinstall.pod
- ! pod/perlmodlib.pod pod/perlobj.pod pod/perlop.pod
- ! pod/perlopentut.pod pod/perlpod.pod pod/perlport.pod
- ! pod/perlre.pod pod/perlref.pod pod/perlrun.pod pod/perlsec.pod
- ! pod/perlsub.pod pod/perlsyn.pod pod/perlthrtut.pod
- ! pod/perltie.pod pod/perltrap.pod pod/perlvar.pod
- ! pod/perlxs.pod pod/pod2man.PL
-____________________________________________________________________________
-[ 3459] By: gsar on 1999/05/24 06:26:48
- Log: perlfaq update from Tom Christiansen
- Branch: perl
- ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod
-____________________________________________________________________________
-[ 3458] By: gsar on 1999/05/24 05:55:11
- Log: updated to v1.50 from CPAN
- Branch: perl
- ! lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
-____________________________________________________________________________
-[ 3457] By: gsar on 1999/05/24 05:46:20
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Sun, 23 May 1999 16:35:07 +0100
- Message-Id: <199905231535.QAA00032@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_56] name PL_in_eval bits
- Branch: perl
- ! cop.h op.c perl.c pp_ctl.c toke.c util.c
-____________________________________________________________________________
-[ 3456] By: gsar on 1999/05/24 05:18:06
- Log: make -t mode the default on emacs/dumb terminals
- Branch: perl
- ! Changes utils/perldoc.PL
-____________________________________________________________________________
-[ 3455] By: gsar on 1999/05/24 05:05:19
- Log: return 0 rather than "" when scalar grep has nothing to iterate
- on (brings behavior in line with documentation)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 3454] By: gsar on 1999/05/24 04:52:52
- Log: From: Tim Jenness <t.jenness@jach.hawaii.edu>
- Date: Thu, 20 May 1999 13:27:02 -1000
- Message-Id: <E10kcDN-0007TA-00@lapaki>
- Subject: Problem with MM_Unix in 5.005_03
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 3453] By: gsar on 1999/05/24 04:39:49
- Log: avoid removing duplicates in user-generated warnings
- From: byron@omix.com (Byron Brummer)
- Date: Thu, 20 May 1999 04:01:17 -0700 (PDT)
- Message-Id: <199905201101.EAA91175@thrush.omix.com>
- Subject: [PATCH] Re: warn buffers/loses output in ?? - 5.005_03
- Branch: perl
- ! lib/diagnostics.pm
-____________________________________________________________________________
-[ 3452] By: gsar on 1999/05/24 04:23:10
- Log: straighten some code to avoid NeXT compiler bugs (from
- Geoff Kuenning <geoff@cs.hmc.edu>)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 3451] By: gsar on 1999/05/24 03:03:05
- Log: minor logic tweak for reserved word warning
- Branch: perl
- ! lib/Test/Harness.pm toke.c
-____________________________________________________________________________
-[ 3450] By: gsar on 1999/05/24 02:34:20
- Log: oops, some files missing in change#3449
- Branch: perl
- ! op.c op.h toke.c
-____________________________________________________________________________
-[ 3449] By: gsar on 1999/05/24 02:33:12
- Log: allow '*' prototype to autoquote even barewords that happen to be
- function names; parens or ampersand continue to force the other
- interpretation; makes C<sub Foo {'bar'} CORE::GLOBAL::require Foo;>
- do the right thing, for example
- Branch: perl
- ! t/comp/proto.t
-____________________________________________________________________________
-[ 3448] By: gsar on 1999/05/24 01:51:24
- Log: remove vestiges of PL_last_proto
- Branch: perl
- ! embedvar.h intrpvar.h objXSUB.h
-____________________________________________________________________________
-[ 3447] By: gsar on 1999/05/24 01:49:20
- Log: redo change#2061 and parts of change#1169 with code in the
- parser; PL_last_proto hackery gone, strict 'subs' in now
- implemented in the optimizer where specifying the exceptional
- cases is much more robust; '*' (bareword) prototype now works
- reliably when used in second and subsequent arguments
- Branch: perl
- ! dump.c embed.h embed.pl objXSUB.h op.c op.h proto.h toke.c
-____________________________________________________________________________
-[ 3446] By: gsar on 1999/05/23 05:00:55
- Log: remove redundant part of change#1169 superceded by change#2061;
- avoid "future reserved word" warning on prototypical bearwords
- Branch: perl
- ! t/lib/fatal.t toke.c
-____________________________________________________________________________
-[ 3445] By: gsar on 1999/05/21 23:36:49
- Log: s/isspace/isSPACE/g and make sure the CRT version is always
- passed an unsigned char (fixes random occurrence of spaces in
- arguments containing high-bit chars passed to spawned children,
- on win32)
- Branch: perl
- ! ext/SDBM_File/sdbm/dbe.c win32/perlhost.h win32/win32.c
-____________________________________________________________________________
-[ 3444] By: gsar on 1999/05/21 23:08:55
- Log: integrate Configure changes from cfgperl
- Branch: perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH
-____________________________________________________________________________
-[ 3443] By: jhi on 1999/05/21 22:00:56
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes doop.c ext/SDBM_File/sdbm/dba.c
- !> ext/SDBM_File/sdbm/dbd.c ext/SDBM_File/sdbm/dbe.c os2/os2.c
- !> perl.h pod/perldiag.pod pod/perlport.pod pp.c t/comp/proto.t
- !> win32/perlhost.h win32/win32.c x2p/walk.c
-____________________________________________________________________________
-[ 3442] By: jhi on 1999/05/21 21:59:46
- Log: fflush.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 3441] By: gsar on 1999/05/21 17:48:55
- Log: integrate cfgperl changes
- Branch: perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH hints/sunos_4_1.sh installperl
-____________________________________________________________________________
-[ 3440] By: gsar on 1999/05/21 17:42:49
- Log: test tweak
- Branch: perl
- ! t/comp/proto.t
-____________________________________________________________________________
-[ 3439] By: gsar on 1999/05/21 17:31:26
- Log: fix breakage when neither FFLUSH_ALL nor FFLUSH_NULL are #defined.
- (Configure fflush(NULL) detection seems broken on Solaris, which
- is why I hit the problem)
- Branch: perl
- ! Changes perl.h
-____________________________________________________________________________
-[ 3438] By: gsar on 1999/05/20 16:41:01
- Log: perlport 1.41 update from Chris Nandor <pudge@pobox.com>
- Branch: perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 3437] By: jhi on 1999/05/20 07:14:39
- Log: Patches to fflushing in SunOS 4 from Andy Dougherty
- (via private email).
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH hints/sunos_4_1.sh
-____________________________________________________________________________
-[ 3436] By: gsar on 1999/05/20 05:18:26
- Log: various little nits
- Branch: perl
- ! doop.c ext/SDBM_File/sdbm/dba.c ext/SDBM_File/sdbm/dbd.c
- ! ext/SDBM_File/sdbm/dbe.c os2/os2.c pod/perldiag.pod pp.c
- ! win32/perlhost.h win32/win32.c x2p/walk.c
-____________________________________________________________________________
-[ 3435] By: jhi on 1999/05/18 16:25:49
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- To: perl5-porters@perl.org
- Subject: installperl
- Date: Fri, 14 May 1999 21:34:58 +0100
- Message-Id: <199905142034.VAA00865@crypt.compulink.co.uk>
- Branch: cfgperl
- ! installperl
-____________________________________________________________________________
-[ 3434] By: jhi on 1999/05/17 21:25:54
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> lib/ExtUtils/MM_Cygwin.pm
- - cygwin32/impure_ptr.c
- !> MANIFEST README.cygwin32 XSUB.h cygwin32/Makefile.SHs
- !> cygwin32/perlld.in dosish.h ext/DynaLoader/dl_cygwin32.xs
- !> ext/POSIX/POSIX.xs gv.c hints/cygwin32.sh installman
- !> installperl perl.h pod/perldiag.pod pp.c pp_hot.c util.c
- !> x2p/find2perl.PL
-____________________________________________________________________________
-[ 3433] By: gsar on 1999/05/17 09:49:01
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure INSTALL config_h.SH configure.com embed.h
- !> ext/Devel/Peek/Peek.xs ext/Socket/Socket.xs global.sym
- !> hints/dec_osf.sh objXSUB.h perl.h pod/perldiag.pod proto.h
- !> util.c
-____________________________________________________________________________
-[ 3432] By: gsar on 1999/05/17 09:06:45
- Log: emit more appropriate diagnostic for failed glob (variant
- of patch suggested by Graham Barr)
- Branch: perl
- ! gv.c pod/perldiag.pod pp.c pp_hot.c
-____________________________________________________________________________
-[ 3431] By: gsar on 1999/05/17 08:38:09
- Log: From: "Todd C. Miller" <Todd.Miller@courtesan.com>
- Date: Thu, 13 May 1999 22:18:43 -0600 (MDT)
- Message-Id: <199905140418.WAA18826@xerxes.courtesan.com>
- Subject: find2perl does not grok the 'c' suffix to the -size argument
- Branch: perl
- ! x2p/find2perl.PL
-____________________________________________________________________________
-[ 3430] By: gsar on 1999/05/17 08:26:21
- Log: additional cleanups for cygwin32 port
- From: "Fifer, Eric" <EFifer@sanwaint.com>
- Date: Wed, 12 May 1999 20:25:54 +0100
- Message-ID: <71E287AB0D94D111BBD600600849EC8185EDAF@POST>
- Subject: [PATCH]perl5.005_03 (CORE) cygwin32 port
- Branch: perl
- + lib/ExtUtils/MM_Cygwin.pm
- - cygwin32/impure_ptr.c
- ! MANIFEST README.cygwin32 XSUB.h cygwin32/Makefile.SHs
- ! cygwin32/perlld.in dosish.h ext/DynaLoader/dl_cygwin32.xs
- ! ext/POSIX/POSIX.xs hints/cygwin32.sh installman installperl
- ! perl.h util.c
-____________________________________________________________________________
-[ 3429] By: gsar on 1999/05/17 08:01:04
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- Date: Wed, 12 May 1999 11:44:11 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9905121136520.25150-100000@newton.phys>
- Subject: [PATCH] (Was Re: SunOS4.1 compilation error)
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 3428] By: jhi on 1999/05/17 07:03:26
- Log: Integrate from mainperl modulo the Socket.xs change.
- Branch: cfgperl
- !> ext/Socket/Socket.xs op.c win32/include/sys/socket.h
- !> win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 3427] By: jhi on 1999/05/16 22:09:11
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_56] Devel::Peek::mstat not working
- Date: Sun, 16 May 1999 01:28:18 -0400 (EDT)
- Message-Id: <199905160528.BAA23376@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! ext/Devel/Peek/Peek.xs
-____________________________________________________________________________
-[ 3426] By: jhi on 1999/05/16 22:07:11
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- To: perl5-porters@perl.com
- Subject: DOC PATCH (5.005_55): Error message missing from perldiag.pod
- Date: Sat, 15 May 1999 12:43:47 -0400
- Message-ID: <19990515164348.7313.qmail@plover.com>
- Branch: cfgperl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 3425] By: nick on 1999/05/15 15:56:10
- Log: Mingw32 + w32api-0.1.5 tweaks
- - now more like other Win32 compilers
- Branch: perl
- ! ext/Socket/Socket.xs win32/include/sys/socket.h win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 3424] By: nick on 1999/05/14 21:04:22
- Log: Experimental "slab" allocator for ops.
- To try it -DPL_OP_SLAB_ALLOC for op.c
- This is for proof of concept only, it leaks memory
- (ops are not free'd) so don't use in embedded apps.
- If this minimalist version does not show performance
- gain then whole idea is worthless.
- Nick see's approx 12% speed up vs perlmalloc running
- perl -Ilib -MCPAN -e ''
- Solaris2.6, gcc-2.8.1 but numbers are not repeatable.
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3423] By: gsar on 1999/05/14 19:55:04
- Log: on win32, look for "site/5.XXX/lib" if "site/5.XXXYY/lib" isn't
- found (brings sitelib intuition in line with privlib)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3422] By: jhi on 1999/05/14 08:08:01
- Log: From: pvhp@forte.com (Peter Prymmer)
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH: 5.005_56] add config.msg to VMS configure.com
- Date: Thu, 13 May 99 15:29:57 PDT
- Message-Id: <9905132229.AA15854@forte.com>
- Branch: cfgperl
- ! configure.com
-____________________________________________________________________________
-[ 3421] By: jhi on 1999/05/14 07:34:20
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> lib/ExtUtils/MM_Unix.pm win32/win32.c
-____________________________________________________________________________
-[ 3420] By: jhi on 1999/05/14 07:33:26
- Log: Still fflushing.
- Branch: cfgperl
- ! Configure config_h.SH util.c
-____________________________________________________________________________
-[ 3419] By: gsar on 1999/05/14 03:08:29
- Log: mortalize string allocations by win32_get_{priv,site}lib()
- (fixes small memory leak in interpreter)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3418] By: gsar on 1999/05/14 03:06:50
- Log: make win32_longname() preserve kind of slashes in argument
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3417] By: gsar on 1999/05/14 03:04:44
- Log: canonicalize path for $(FULLPERL) and $(PERL) in MakeMaker
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 3416] By: jhi on 1999/05/13 21:18:06
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> pp_ctl.c
-____________________________________________________________________________
-[ 3415] By: jhi on 1999/05/13 21:16:49
- Log: Fixes from Andy Dougherty (via private email).
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3414] By: nick on 1999/05/13 20:04:26
- Log: valist vs va_list typo
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 3413] By: jhi on 1999/05/13 15:04:05
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: perlbug@perl.com
- Subject: [PATCH] (Was Re: SunOS4.1 compilation error)
- Date: Wed, 12 May 1999 11:44:11 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9905121136520.25150-100000@newton.phys>
- Branch: cfgperl
- ! INSTALL
-____________________________________________________________________________
-[ 3412] By: jhi on 1999/05/13 14:20:17
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> pp_ctl.c
-____________________________________________________________________________
-[ 3411] By: gsar on 1999/05/13 14:16:56
- Log: docatch_body() declaration mismatch
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 3410] By: jhi on 1999/05/13 13:51:44
- Log: Add HAS_MEMCHR and make memchr into a cpp macro if it already isn't.
- Branch: cfgperl
- ! Configure config_h.SH perl.h
-____________________________________________________________________________
-[ 3409] By: jhi on 1999/05/13 13:31:53
- Log: Still fflushing strong.
- Branch: cfgperl
- ! Configure config_h.SH embed.h global.sym objXSUB.h perl.h
- ! proto.h util.c
-____________________________________________________________________________
-[ 3408] By: jhi on 1999/05/12 14:30:23
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 3407] By: jhi on 1999/05/12 12:28:31
- Log: Be tidier with fflush(NULL) testing.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3406] By: gsar on 1999/05/12 11:26:03
- Log: better range-checking on list slices, with test
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Sun, 02 May 1999 17:02:53 +0100
- Message-Id: <199905021602.RAA13905@crypt.compulink.co.uk>
- Subject: Re: List slice of undefs returns 0 items
- Branch: perl
- ! pp.c t/op/list.t
-____________________________________________________________________________
-[ 3405] By: gsar on 1999/05/12 11:22:27
- Log: change#3397 needs test tweak
- Branch: perl
- ! Changes t/pragma/warn/sv
-____________________________________________________________________________
-[ 3404] By: gsar on 1999/05/12 11:07:44
- Log: typo in change#3397
- Branch: perl
- ! doop.c
-____________________________________________________________________________
-[ 3403] By: gsar on 1999/05/12 10:49:01
- Log: From: Stephen Zander <gibreel@pobox.com>
- Date: 12 May 1999 01:22:31 -0700
- Message-ID: <87u2tik88o.fsf@pooh.fire-swamp.net>
- Subject: Re: Test::Harness runs tainted tests with wrong library path
- Branch: perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 3402] By: gsar on 1999/05/12 10:42:06
- Log: typo in change#3400
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 3401] By: jhi on 1999/05/12 10:40:42
- Log: A better, shinier, and possibly even correctly working
- reincarnation of #3398.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3400] By: gsar on 1999/05/12 10:40:11
- Log: deparse \&func() as \(&func()) for clarity
- From: Albert Dvornik <bert@genscan.com>
- Date: 11 May 1999 13:32:04 -0400
- Message-ID: <tqk8ufwm0b.fsf@puma.genscan.com>
- Subject: [PATCH 5.005_56] Deparse and \&func() (was Re: File::Find...)
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 3399] By: gsar on 1999/05/12 10:36:02
- Log: more testsuite smarts (many of them courtesy Ilya)
- Branch: perl
- ! lib/Test/Harness.pm t/comp/cpp.t t/io/pipe.t t/lib/db-btree.t
- ! t/lib/db-hash.t t/lib/db-recno.t t/lib/gdbm.t
- ! t/lib/io_multihomed.t t/lib/io_pipe.t t/lib/io_sock.t
- ! t/lib/io_udp.t t/lib/io_unix.t t/lib/ipc_sysv.t t/lib/ndbm.t
- ! t/lib/odbm.t t/lib/thread.t t/op/exec.t t/op/fork.t
- ! t/op/grent.t t/op/groups.t t/op/nothread.t t/op/numconvert.t
- ! t/op/pwent.t
-____________________________________________________________________________
-[ 3398] By: jhi on 1999/05/12 09:33:08
- Log: Detect whether fflush(NULL) works as per change #3352.
- Branch: cfgperl
- ! Configure config_h.SH perl.h
-____________________________________________________________________________
-[ 3397] By: gsar on 1999/05/12 08:56:03
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 12 May 1999 01:01:00 +0200
- Message-ID: <3741b5e8.20386944@smtp1.ibm.net>
- Subject: [PATCH 5.005_03] chop/chomp modify readonly values
- Branch: perl
- ! doop.c
-____________________________________________________________________________
-[ 3396] By: gsar on 1999/05/12 08:23:27
- Log: opendir(D,"x:") on win32 opens cwd() for drive rather than root;
- stat() behaves similarly
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3395] By: jhi on 1999/05/11 22:21:32
- Log: Redo parts of #3341 and #3358 that #3394 undid.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3394] By: jhi on 1999/05/11 22:03:48
- Log: Add I_NETINET_TCP to help change #3391.
- Branch: cfgperl
- ! Configure config_h.SH ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 3393] By: jhi on 1999/05/11 21:44:59
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 55 files)
-____________________________________________________________________________
-[ 3392] By: gsar on 1999/05/11 20:56:43
- Log: update embedvar.h
- Branch: perl
- ! embedvar.h ext/ByteLoader/ByteLoader.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 3391] By: gsar on 1999/05/11 16:32:05
- Log: From: Joshua Pritikin <joshua.pritikin@db.com>
- Date: Tue, 11 May 1999 11:10:13 -0400 (EDT)
- Message-ID: <Pine.GSO.4.02.9905111106460.1418-100000@eq1062.wks.na.deuba.com>
- Subject: Socket IPPROTO_TCP [PATCH 5.005_5x]
- Branch: perl
- ! ext/Socket/Socket.pm ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 3390] By: gsar on 1999/05/11 15:27:40
- Log: display more frequent progress messages when STDOUT is a tty
- Branch: perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 3389] By: gsar on 1999/05/11 14:40:58
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 10 May 1999 02:07:01 -0400 (EDT)
- Message-Id: <199905100607.CAA26045@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Explanations by Test::Harness
- Branch: perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 3388] By: gsar on 1999/05/11 14:08:14
- Log: avoid creating spurious subroutine stubs on failed subroutine
- call and other places of sv_2cv() misuse; fixes problems with
- failed subroutine calls "hiding" later attempts to lookup methods
- in base classes
- Branch: perl
- ! gv.c perl.c pod/perlguts.pod pp_hot.c sv.c t/op/method.t
-____________________________________________________________________________
-[ 3387] By: gsar on 1999/05/11 09:34:13
- Log: various fixes for clean build and test on win32; configpm broken,
- needed to open myconfig.SH rather than myconfig; sundry adjustments
- to bytecode stuff; tweaks to DYNAMIC_ENV_FETCH code to make it
- work under win32; getenv_sv() changed to getenv_len() since SVs
- aren't visible in the lower echelons; remove bogus exports from
- config.sym; PERL_OBJECT-ness for C++ exception support; null out
- IoDIRP in filter_del() or sv_free() will attempt to close it
- Branch: perl
- ! Changes bytecode.pl byterun.c byterun.h configpm embed.h
- ! embed.pl ext/B/B/Asmdata.pm ext/ByteLoader/ByteLoader.xs
- ! ext/DynaLoader/dlutils.c global.sym hv.c iperlsys.h objXSUB.h
- ! op.c perl.c perl.h pp.c pp_ctl.c proto.h scope.c scope.h
- ! t/io/open.t t/op/magic.t toke.c util.c vms/vms.c vms/vmsish.h
- ! win32/GenCAPI.pl win32/Makefile win32/config.bc
- ! win32/config.gc win32/config.vc win32/makedef.pl
- ! win32/makefile.mk win32/perlhost.h win32/runperl.c
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 3386] By: gsar on 1999/05/11 02:49:07
- Log: gutsupport for C++ exceptions
- From: Chip Salzenberg <chip@perlsupport.com>
- Date: Tue, 9 Mar 1999 11:51:57 -0500
- Message-ID: <19990309115157.E7911@perlsupport.com>
- Subject: [PATCH 5.005] Flexible Exceptions
- Branch: perl
- ! embed.h global.sym objXSUB.h perl.c perl.h pp_ctl.c proto.h
- ! scope.c scope.h thrdvar.h util.c
-____________________________________________________________________________
-[ 3385] By: gsar on 1999/05/10 19:33:36
- Log: "weak" references internals, still needs perlguts documentation
- (somewhat modified version of patch suggested by Tuomas J. Lukka
- <lukka@fas.harvard.edu>)
- Branch: perl
- ! dump.c embed.h embed.pl global.sym mg.c objXSUB.h perl.h
- ! pod/perldiag.pod proto.h sv.c sv.h util.c
-____________________________________________________________________________
-[ 3384] By: jhi on 1999/05/10 18:21:43
- Log: Circumnavigate Digital UNIX 4.0D miniperl core dump
- (due to QAR 56761) (the bug has been fixed in 4.0E or better)
- Branch: cfgperl
- ! INSTALL hints/dec_osf.sh
-____________________________________________________________________________
-[ 3381] By: jhi on 1999/05/10 14:39:28
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> cygwin32/Makefile.SHs cygwin32/build-instructions.READFIRST
- +> cygwin32/build-instructions.charles-wilson
- +> cygwin32/build-instructions.sebastien-barre
- +> cygwin32/build-instructions.steven-morlock
- +> cygwin32/build-instructions.steven-morlock2
- +> cygwin32/impure_ptr.c cygwin32/ld2.in cygwin32/perlld.in
- +> ext/ByteLoader/ByteLoader.pm ext/ByteLoader/ByteLoader.xs
- +> ext/ByteLoader/Makefile.PL pod/Win32.pod t/lib/io_linenum.t
- +> t/op/numconvert.t utils/perlbc.PL
- - cygwin32/cw32imp.h cygwin32/gcc2 cygwin32/ld2 cygwin32/perlgcc
- - cygwin32/perlld
- !> (integrate 105 files)
-____________________________________________________________________________
-[ 3380] By: gsar on 1999/05/10 12:27:14
- Log: regen regnodes.h
- Branch: perl
- ! Changes regnodes.h
-____________________________________________________________________________
-[ 3379] By: gsar on 1999/05/10 12:17:26
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 01 May 1999 22:55:36 +0200
- Message-ID: <373067e9.56194713@smtp1.ibm.net>
- Subject: [PATCH 5.005_56] Win32 and VC++ 98 doesn't support CASTI
- Branch: perl
- ! pod/perlfunc.pod pod/perlop.pod win32/config.vc
- ! win32/config_H.vc
-____________________________________________________________________________
-[ 3378] By: gsar on 1999/05/10 12:07:13
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 30 Apr 1999 22:26:09 -0400 (EDT)
- Message-Id: <199905010226.WAA19127@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_56] Self-consistent numeric conversion again
- Branch: perl
- + t/op/numconvert.t
- ! MANIFEST doio.c dump.c perl.h pp.c pp_hot.c sv.c sv.h toke.c
- ! util.c
-____________________________________________________________________________
-[ 3377] By: gsar on 1999/05/10 11:39:48
- Log: pp_modulo comment tweak from Ilya
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 3376] By: gsar on 1999/05/10 11:30:40
- Log: From: Joshua Pritikin <joshua.pritikin@db.com>
- Date: Fri, 7 May 1999 11:31:00 -0400 (EDT)
- Message-ID: <Pine.GSO.4.02.9905071127100.1449-100000@eq1062.wks.na.deuba.com>
- Subject: Test.pm update [PATCH _56]
- Branch: perl
- ! lib/Test.pm
-____________________________________________________________________________
-[ 3375] By: gsar on 1999/05/10 11:28:30
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 07 May 1999 00:59:54 +0200
- Message-ID: <373318ae.19292461@smtp1.ibm.net>
- Subject: Re: Using existing memory for an SV's PV
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 3374] By: gsar on 1999/05/10 11:23:44
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 07 May 1999 00:59:52 +0200
- Message-ID: <37321800.19118320@smtp1.ibm.net>
- Subject: [PATCH 5.005_56] Fix -Dm memory debugging for PERL_OBJECT
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 3373] By: gsar on 1999/05/10 11:22:10
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 6 May 1999 18:17:28 -0400
- Message-ID: <19990506181728.A12433@monk.mps.ohio-state.edu>
- Subject: Re: [PATCH 5.005_56] Make open(F,"command |") return correct err(no)
- Branch: perl
- ! doio.c embed.h global.sym objXSUB.h pod/perldiag.pod proto.h
- ! util.c
-____________________________________________________________________________
-[ 3372] By: gsar on 1999/05/10 10:57:49
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 6 May 1999 01:21:05 -0400 (EDT)
- Message-Id: <199905060521.BAA03485@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_56] Cosmetic: data-driven REx-dump
- Branch: perl
- ! regcomp.c regcomp.pl
-____________________________________________________________________________
-[ 3371] By: gsar on 1999/05/10 10:54:01
- Log: From: lane@duphy4.physics.drexel.edu
- Date: Tue, 04 May 1999 10:19:25 -0700
- Message-Id: <3.0.6.32.19990504101925.02ecde30@ous.edu>
- Subject: [PATCH 5.005.56] pod->html VMS fixes
- Branch: perl
- ! installhtml lib/Pod/Html.pm
-____________________________________________________________________________
-[ 3370] By: gsar on 1999/05/10 10:45:52
- Log: testsuite nits
- Branch: perl
- ! t/lib/io_linenum.t t/op/filetest.t
-____________________________________________________________________________
-[ 3369] By: gsar on 1999/05/10 10:35:22
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 3 May 1999 22:38:50 -0400 (EDT)
- Message-Id: <199905040238.WAA01865@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Quickier thread-specific data on OS/2
- Branch: perl
- ! os2/os2ish.h os2/os2thread.h
-____________________________________________________________________________
-[ 3368] By: gsar on 1999/05/10 10:00:11
- Log: From: Albert Dvornik <bert@genscan.com>
- Date: 03 May 1999 12:20:57 -0400
- Message-ID: <tqlnf6gm52.fsf@puma.genscan.com>
- Subject: [PATCH 5.005_56] do_sv_dump does dump (core) on IO handles
- Branch: perl
- ! dump.c
-____________________________________________________________________________
-[ 3367] By: gsar on 1999/05/10 09:55:51
- Log: shadow password support for Solaris (needs Configure help to
- determine HAS_GETSPENT)
- From: "Patrick O'Brien" <pdo@cs.umd.edu>
- Date: Sat, 01 May 1999 19:41:17 -0400
- Message-Id: <199905012341.TAA23989@optimus.cs.umd.edu>
- Subject: getpwent() under solaris
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 3366] By: gsar on 1999/05/10 09:45:58
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 01 May 1999 23:45:47 +0200
- Message-ID: <373373fb.59284266@smtp1.ibm.net>
- Subject: [PATCH 5.005_56] Add POLLUTE=1 option to MakeMaker
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3365] By: gsar on 1999/05/10 09:34:22
- Log: test suite and fix input_line_number()
- From: Paul Johnson <pjcj@transeda.com>
- Date: Thu, 29 Apr 1999 06:28:14 +0100
- Message-ID: <19990429062814.A17906@west-tip.transeda.com>
- Subject: [PATCH] IO::Handle 1.20 (was Re: FAIL Gedcom-1.01 i86pc-solaris 2.6)
- Branch: perl
- + t/lib/io_linenum.t
- ! MANIFEST ext/IO/lib/IO/Handle.pm
-____________________________________________________________________________
-[ 3364] By: gsar on 1999/05/10 09:20:56
- Log: fix overeager [:foo:] parsing
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Fri, 30 Apr 1999 09:26:18 +0100
- Message-Id: <199904300826.JAA01257@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_{56,03}] Re: Regular expression difference b/n 5.004 & 5.005
- Branch: perl
- ! regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 3363] By: gsar on 1999/05/10 09:09:21
- Log: documentation for Win32 builtins (somewhat modified)
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Tue, 30 Mar 1999 08:05:03 +0200
- Message-ID: <37006783.1926460@smtp1.ibm.net>
- Subject: Re: Issues with build 509
- Branch: perl
- + pod/Win32.pod
- ! MANIFEST
-____________________________________________________________________________
-[ 3362] By: gsar on 1999/05/10 08:22:07
- Log: provide File::Copy::syscopy() via Win32::CopyFile() on win32
- Branch: perl
- ! lib/File/Copy.pm win32/win32.c
-____________________________________________________________________________
-[ 3361] By: gsar on 1999/05/10 08:11:29
- Log: escape ampersands in <pre> sections
- Branch: perl
- ! Changes lib/Pod/Html.pm
-____________________________________________________________________________
-[ 3360] By: gsar on 1999/05/10 08:04:14
- Log: AIX hints enhancements (threads build, SOCKS support)
- From: "David R. Favor" <dfavor@austin.ibm.com>
- Date: Wed, 28 Apr 1999 08:45:28 -0500
- Message-ID: <372710F8.B1F73BEB@austin.ibm.com>
- Subject: Working build for AIX + gcc + threading
- Branch: perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 3359] By: gsar on 1999/05/10 07:49:26
- Log: more Compiler patches from Vishal Bhatia <vishalb@my-dejanews.com>
- Date: Tue, 27 Apr 1999 23:47:24 PDT
- Message-ID: <19990428064724.95244.qmail@hotmail.com>
- Subject: [PATCH 5.005_56] Saving Tied hashes ( C.pm)
- --
- Date: Thu, 29 Apr 1999 18:21:06 -0700
- Message-ID: <GEFPBFDJADFJBAAA@my-dejanews.com>
- Subject: [PATCH 5.005_56] double constants ( C.pm)
- --
- Date: Mon, 03 May 1999 20:21:31 PDT
- Message-ID: <19990504032131.81113.qmail@hotmail.com>
- Subject: [PATCH 5.005_56] Overloading implementation ( Compiler)
- --
- Date: Thu, 06 May 1999 17:57:09 -0700
- Message-ID: <FCJELBLAJBOBAAAA@my-dejanews.com>
- Subject: Stash.pm
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs ext/B/B/Bblock.pm ext/B/B/C.pm
- ! ext/B/B/CC.pm ext/B/B/Stash.pm t/harness
-____________________________________________________________________________
-[ 3358] By: gsar on 1999/05/10 04:39:15
- Log: cygwin32 update (untested adaptation of patch against 5.005_03)
- From: alexander smishlajev <als@turnhere.com>
- Date: Sun, 25 Apr 1999 14:58:29 +0300
- Message-ID: <37230365.5F68B460@turnhere.com>
- Subject: [PATCH]5.005_03 (CORE) cygwin32 port
- Branch: perl
- + cygwin32/Makefile.SHs cygwin32/build-instructions.READFIRST
- + cygwin32/build-instructions.charles-wilson
- + cygwin32/build-instructions.sebastien-barre
- + cygwin32/build-instructions.steven-morlock
- + cygwin32/build-instructions.steven-morlock2
- + cygwin32/impure_ptr.c cygwin32/ld2.in cygwin32/perlld.in
- - cygwin32/cw32imp.h cygwin32/gcc2 cygwin32/ld2 cygwin32/perlgcc
- - cygwin32/perlld
- ! Configure EXTERN.h MANIFEST Makefile.SH README.cygwin32 XSUB.h
- ! cflags.SH config_h.SH dosish.h ext/POSIX/Makefile.PL
- ! ext/SDBM_File/sdbm/pair.c hints/cygwin32.sh installperl
- ! lib/Cwd.pm lib/ExtUtils/MakeMaker.pm lib/perl5db.pl
- ! makedepend.SH perl.h perlvars.h pp_hot.c pp_sys.c regcomp.c
- ! t/io/fs.t t/io/tell.t t/lib/anydbm.t t/op/stat.t util.c
-____________________________________________________________________________
-[ 3357] By: gsar on 1999/05/10 04:07:07
- Log: applied suggested patch, modulo already applied parts
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Sat, 24 Apr 1999 20:12:43 -0400 (EDT)
- Message-id: <01JAF9UAV9XG002O0W@mail.newman.upenn.edu>
- Subject: [Patch 5.005_56] VMS consolidated patch #2
- Branch: perl
- ! configure.com t/op/filetest.t t/op/taint.t t/pragma/warn/doio
- ! t/pragma/warn/mg t/pragma/warn/pp_sys t/pragma/warn/sv
- ! vms/descrip_mms.template vms/ext/vmsish.t vms/perlvms.pod
- ! vms/subconfigure.com vms/test.com vms/vms.c
-____________________________________________________________________________
-[ 3356] By: gsar on 1999/05/10 03:48:08
- Log: applied suggested patch, with win32 and PERL_OBJECT additions
- From: Tom Hughes <tom@compton.nu>
- Date: Sat, 24 Apr 1999 18:11:59 +0100
- Message-ID: <609bdff748.tom@compton.compton.nu>
- Subject: ByteLoader patch
- Branch: perl
- + ext/ByteLoader/ByteLoader.pm ext/ByteLoader/ByteLoader.xs
- + ext/ByteLoader/Makefile.PL utils/perlbc.PL
- ! MANIFEST bytecode.h bytecode.pl byterun.c byterun.h embed.h
- ! embed.pl ext/B/B.xs ext/B/B/Asmdata.pm ext/B/B/Bytecode.pm
- ! ext/B/B/Debug.pm objXSUB.h op.c pp_ctl.c proto.h
- ! utils/Makefile win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 3355] By: gsar on 1999/05/10 03:22:49
- Log: document 'test' attribute (from Andreas Koenig)
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 3354] By: gsar on 1999/05/10 03:12:37
- Log: From: pmarquess@bfsec.bt.co.uk
- Date: Thu, 22 Apr 1999 23:12:08 +0100
- Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB29C6B45@mbtlipnt02.btlabs.bt.co.uk>
- Subject: PATCH for small bug in scan_bin
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 3353] By: gsar on 1999/05/10 02:39:33
- Log: more bulletproof workaround for mangled paths (updates changes#3345,3350);
- provide Win32::GetLongPathName() to complement Win32::GetShortPathName()
- Branch: perl
- ! t/op/magic.t win32/makedef.pl win32/runperl.c win32/win32.c
- ! win32/win32iop.h
-____________________________________________________________________________
-[ 3352] By: gsar on 1999/05/09 22:47:39
- Log: flush all open output buffers before fork(), exec(), system, qx//
- and pipe open() operations, simplifying buffering headaches faced
- by users; uses fflush(NULL), which may need Configure test
- Branch: perl
- ! perl.h pod/perldelta.pod pod/perlfunc.pod pod/perlipc.pod
- ! pp_sys.c util.c vmesa/vmesa.c vms/vms.c win32/win32.c
-____________________________________________________________________________
-[ 3351] By: gsar on 1999/05/09 21:11:51
- Log: perlcc on win32 (correct version of fix suggested by Jean-Louis
- Leroy <jll@skynet.be>)
- Branch: perl
- ! utils/perlcc.PL
-____________________________________________________________________________
-[ 3350] By: gsar on 1999/05/09 20:39:11
- Log: normalize $^X to full pathname on win32
- Branch: perl
- ! win32/runperl.c
-____________________________________________________________________________
-[ 3349] By: gsar on 1999/05/09 20:23:07
- Log: allow readline($globref), <$globref> already works
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 3348] By: gsar on 1999/05/09 20:00:09
- Log: perldoc cleanups (variant of changes suggested by Christian Lemburg
- <lemburg@online-club.de>)
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 3347] By: gsar on 1999/05/09 18:47:21
- Log: additions to Thread.pm docs from Tuomas J. Lukka
- <lukka@fas.harvard.edu>
- Branch: perl
- ! ext/Thread/Thread.pm
-____________________________________________________________________________
-[ 3346] By: gsar on 1999/05/09 18:38:00
- Log: From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Sat, 17 Apr 1999 02:46:13 -0700 (PDT)
- Message-ID: <14103.57454.614253.598264@fre-76-120.reshall.berkeley.edu>
- Subject: [PATCH _56] Re: pdt: Perl Development Tools?
- Branch: perl
- ! ext/B/B/Xref.pm
-____________________________________________________________________________
-[ 3345] By: gsar on 1999/05/09 18:22:43
- Log: work around mangled archname on win32 while finding privlib/sitelib;
- normalize lib paths to forward slashes internally
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3344] By: gsar on 1999/05/09 03:20:06
- Log: fix typo in dbm filters that caused odbm.t to fail
- Branch: perl
- ! ext/ODBM_File/ODBM_File.xs t/lib/odbm.t
-____________________________________________________________________________
-[ 3343] By: gsar on 1999/05/09 02:02:59
- Log: tweak test totals
- Branch: perl
- ! Changes t/lib/tie-stdhandle.t
-____________________________________________________________________________
-[ 3342] By: gsar on 1999/05/09 01:42:06
- Log: import list propagation busted (pointed out by Ton Hospel
- <thospel@mail.dma.be>)
- Branch: perl
- ! lib/autouse.pm
-____________________________________________________________________________
-[ 3341] By: gsar on 1999/05/09 00:54:18
- Log: hpux needs {SHLIB_PATH,LDOPTS} rather than LD_{LIBRARY,RUN}_PATH
- (as suggested by Eric Boehm <boehm@nortelnetworks.com>)
- Branch: perl
- ! Configure Makefile.SH
-____________________________________________________________________________
-[ 3340] By: gsar on 1999/05/09 00:40:41
- Log: generate manpages for newly added utils
- Branch: perl
- ! installman
-____________________________________________________________________________
-[ 3339] By: gsar on 1999/05/09 00:33:50
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Sun, 02 May 1999 17:59:24 +0100
- Message-Id: <199905021659.RAA14016@crypt.compulink.co.uk>
- Subject: [PATCH] Re: ptr to realloced memory in yylex
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 3338] By: jhi on 1999/05/08 22:40:29
- Log: Remove CONFIG item, add Digital UNIX 'ld' bug.
- Branch: cfgperl
- ! INSTALL
-____________________________________________________________________________
-[ 3337] By: jhi on 1999/05/08 22:22:26
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> pod/perldbmfilter.pod t/io/open.t t/lib/tie-stdhandle.t
- !> (integrate 54 files)
-____________________________________________________________________________
-[ 3336] By: gsar on 1999/05/08 21:48:22
- Log: make perldoc -f grok nested =items
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 3335] By: gsar on 1999/05/08 19:48:11
- Log: allow AV/HV dereferences on pseudohashes ($ph->{foo}[1], etc.)
- Branch: perl
- ! op.c t/lib/fields.t
-____________________________________________________________________________
-[ 3334] By: gsar on 1999/05/08 19:09:41
- Log: update test totals
- Branch: perl
- ! t/lib/bigintpm.t
-____________________________________________________________________________
-[ 3333] By: gsar on 1999/05/08 16:56:02
- Log: mention unpack('pP',...) footshot (from Albert Dvornik <bert@genscan.com>)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3332] By: gsar on 1999/05/08 16:46:44
- Log: applied suggested patch, added tests
- From: William Mann <wmann@avici.com>
- Date: Mon, 12 Apr 1999 12:25:22 -0400 (EDT)
- Message-Id: <199904121625.MAA00983@hwsrv1.avici.com>
- Subject: BigInt.pm extensions for logical operations
- Branch: perl
- ! lib/Math/BigInt.pm pod/perldelta.pod t/lib/bigintpm.t
-____________________________________________________________________________
-[ 3331] By: gsar on 1999/05/08 16:09:33
- Log: avoid temporary files named 'tmp'
- Branch: perl
- ! Makefile.SH pp.c
-____________________________________________________________________________
-[ 3330] By: nick on 1999/05/08 14:16:30
- Log: Implement OPEN, EOF, SEEK, TELL, BINMODE and FILENO as TIEHANDLE methods.
- Provide Tie::StdHandle
- Basic update of docs.
- Branch: perl
- + t/lib/tie-stdhandle.t
- ! lib/Tie/Handle.pm pod/perltie.pod pp_sys.c
-____________________________________________________________________________
-[ 3329] By: nick on 1999/05/08 12:03:45
- Log: Tweaks to open(my $fh,...) stuff
- Branch: perl
- ! op.c pp.c pp_sys.c t/io/open.t
-____________________________________________________________________________
-[ 3328] By: nick on 1999/05/08 11:18:42
- Log: Bring SDBM_File.xs into line with new typemap
- Branch: perl
- ! ext/SDBM_File/SDBM_File.xs
-____________________________________________________________________________
-[ 3327] By: gsar on 1999/05/08 00:07:11
- Log: add test case for AUTOLOAD reentrancy fix in change#3279
- Branch: perl
- ! t/lib/autoloader.t
-____________________________________________________________________________
-[ 3326] By: nick on 1999/05/07 21:24:50
- Log: Implement open( my $fh, ...) and similar.
- Set flag in op.c for "constructor ops"
- In pp_rv2gv, if flag is set and arg is PADSV and uninit
- vivify as reference to a detached GV.
- (Name of GV is the pad name.)
- This scheme should "just work" for pipe/socket etc. too.
-
- #if 0 out the open(FH,undef) for now.
- Change t/io/open.t to test open(my $fh,...)
- Branch: perl
- ! op.c pp.c pp_sys.c t/io/open.t
-____________________________________________________________________________
-[ 3325] By: nick on 1999/05/07 21:18:42
- Log: Correct SvLEN vs SvCUR which leads to odd "chunk" vs "line" in mess().
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 3324] By: gsar on 1999/05/07 20:28:31
- Log: avoid using PL_sv_mutex in condpair_magic() (avoids hangs when
- intervening code has to allocate SVs)
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 3323] By: gsar on 1999/05/07 19:45:08
- Log: allow line numbers to show in diagnostics during global destruction
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 3322] By: gsar on 1999/05/07 09:38:11
- Log: From: Dan Sugalski <sugalskd@ous.edu>
- Date: Fri, 09 Apr 1999 16:16:39 -0700
- Message-Id: <3.0.6.32.19990409161639.02ea1050@ous.edu>
- Subject: [PATCH 5.005_03]Bug in MM_VMS.PM
- Branch: perl
- ! lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 3321] By: gsar on 1999/05/07 09:08:23
- Log: From: kwzh@gnu.org (Karl Heuer)
- Date: Wed, 7 Apr 1999 23:58:58 -0400
- Message-Id: <199904080358.XAA01192@mescaline.gnu.org>
- Subject: [perl-5.005.02] detect lack of /dev/tty
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3320] By: gsar on 1999/05/07 08:52:14
- Log: allow distinct prefix for versioned executables
- From: Roderick Schertler <roderick@argon.org>
- Date: Wed, 07 Apr 1999 15:34:56 -0400
- Message-ID: <3003.923513696@eeyore.ibcinc.com>
- Subject: perl55.00503 -> perl5.00503 patch for installperl
- Branch: perl
- ! INSTALL installperl
-____________________________________________________________________________
-[ 3319] By: gsar on 1999/05/07 08:07:02
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Mon, 05 Apr 1999 15:38:42 -0700
- Message-Id: <3.0.6.32.19990405153842.0367b650@ous.edu>
- Subject: Re: chomp fails with $/ in fixed-length record mode
- --
- From: Roderick Schertler <roderick@argon.org>
- Date: Tue, 06 Apr 1999 21:11:37 -0400
- Message-ID: <2795.923447497@eeyore.ibcinc.com>
- Subject: Re: chomp fails with $/ in fixed-length record mode
- Branch: perl
- ! doop.c pod/perlfunc.pod t/op/chop.t
-____________________________________________________________________________
-[ 3318] By: gsar on 1999/05/07 07:56:35
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 6 Apr 1999 01:40:36 -0400
- Message-ID: <19990406014035.A1238@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Make % use fmod()
- Branch: perl
- ! pp.c t/op/arith.t
-____________________________________________________________________________
-[ 3317] By: gsar on 1999/05/07 04:18:11
- Log: DBM Filters (via private mail)
- From: pmarquess@bfsec.bt.co.uk
- Date: Sun, 18 Apr 1999 21:05:52 +0100
- Message-Id: <199904182009.NAA19152@activestate.com>
- Subject: DBM Filters
- Branch: perl
- + pod/perldbmfilter.pod
- ! MANIFEST ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/typemap
- ! ext/GDBM_File/GDBM_File.pm ext/GDBM_File/GDBM_File.xs
- ! ext/GDBM_File/typemap ext/NDBM_File/NDBM_File.pm
- ! ext/NDBM_File/NDBM_File.xs ext/NDBM_File/typemap
- ! ext/ODBM_File/ODBM_File.pm ext/ODBM_File/ODBM_File.xs
- ! ext/ODBM_File/typemap ext/SDBM_File/SDBM_File.pm
- ! ext/SDBM_File/SDBM_File.xs ext/SDBM_File/typemap
- ! lib/AnyDBM_File.pm pod/Makefile pod/buildtoc pod/perl.pod
- ! pod/perldelta.pod t/lib/db-btree.t t/lib/db-hash.t
- ! t/lib/db-recno.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t
- ! t/lib/sdbm.t
-____________________________________________________________________________
-[ 3316] By: gsar on 1999/05/07 03:28:53
- Log: avoid negative return value from Win32::GetTickCount()
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 03 Apr 1999 19:04:18 +0200
- Message-ID: <37084742.22824479@smtp1.ibm.net>
- Subject: Re: Win32::GetTickCount
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3314] By: gsar on 1999/05/06 08:01:23
- Log: compiler fixes from Vishal Bhatia <vishalb@hotmail.com>
- Date: Tue, 30 Mar 1999 23:40:34 PST
- Message-ID: <19990331074034.6117.qmail@hotmail.com>
- Subject: [PATCH 5.005_56] pp_entersub and pp_leavewrite(CC.pm)
- --
- Date: Wed, 07 Apr 1999 00:28:23 -0800
- Message-ID: <FGBNLNPOEELFAAAA@my-dejanews.com>
- Subject: [PATCH 5.005_56] function prototypes(B.pm)
- --
- Date: Thu, 22 Apr 1999 23:40:52 -0700
- Message-ID: <OEAOMKBMLDADCAAA@my-dejanews.com>
- Subject: [PATCH 5.005_56 ] discarding worthless padsvs
- --
- Date: Tue, 27 Apr 1999 01:14:49 PDT
- Message-ID: <19990427081449.28615.qmail@hotmail.com>
- Subject: [PATCH 5.005_56] pp_ncmp implementation ( CC.pm)
- Branch: perl
- ! ext/B/B.pm ext/B/B/CC.pm ext/B/B/Stackobj.pm t/op/gv.t
- ! t/op/ref.t
-____________________________________________________________________________
-[ 3313] By: jhi on 1999/05/06 07:59:52
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 33 files)
-____________________________________________________________________________
-[ 3312] By: gsar on 1999/05/06 07:11:50
- Log: add Ethiopic section to unicode master database (from Ken
- Whistler <kenw@sybase.com>)
- Branch: perl
- ! lib/unicode/UnicodeData-Latest.txt
-____________________________________________________________________________
-[ 3311] By: gsar on 1999/05/06 05:37:55
- Log: From: Damon Atkins <n107844@sysmgtdev.nabaus.com.au>
- Date: Tue, 30 Mar 1999 11:26:11 +1000 (EST)
- Message-Id: <199903300126.LAA20870@sysmgtdev.nabaus.com.au>
- Subject: Largefiles for Solaris
- Branch: perl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 3310] By: gsar on 1999/05/06 05:14:35
- Log: emit more accurate diagnostic for syntax errors involving <>
- within eval""
- Branch: perl
- ! toke.c utils/perldoc.PL
-____________________________________________________________________________
-[ 3309] By: gsar on 1999/05/06 04:36:31
- Log: additional test for IPC::Open3 (courtesy RonaldWS@aol.com)
- Branch: perl
- ! t/lib/open3.t
-____________________________________________________________________________
-[ 3308] By: gsar on 1999/05/06 03:19:16
- Log: applied first part of suggested patch (bug described cannot be
- reproduced any longer, so the second inconclusive part has not
- been applied)
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Sun, 28 Mar 1999 04:51:34 +0100
- Message-Id: <199903280351.EAA20430@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_56] Re: A core dump
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 3307] By: gsar on 1999/05/06 01:56:06
- Log: fix bogus OPf_REF context in C<sort BLOCK @foo> (extension of
- change#3180)
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3306] By: gsar on 1999/05/05 17:17:34
- Log: applied non-conflicting parts of suggested patch
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Sat, 27 Mar 1999 00:16:51 -0400 (EDT)
- Message-id: <01J9AZY8I2PW001O2S@mail.newman.upenn.edu>
- Subject: [Patch 5.005_56] Revised VMS patch
- Branch: perl
- ! Changes ext/B/defsubs.h.PL hv.c iperlsys.h perl.c
- ! pod/perldiag.pod proto.h util.c vms/perlvms.pod vms/vms.c
-____________________________________________________________________________
-[ 3305] By: gsar on 1999/05/05 16:20:19
- Log: make perldoc use backslashed pathnames within system() on win32
- Branch: perl
- ! pod/perldiag.pod pod/perlthrtut.pod utils/perldoc.PL
-____________________________________________________________________________
-[ 3304] By: gsar on 1999/05/05 07:29:43
- Log: upgrade Pod::Parser to v1.081 from CPAN
- Branch: perl
- ! lib/Pod/Checker.pm lib/Pod/InputObjects.pm lib/Pod/Parser.pm
- ! lib/Pod/PlainText.pm lib/Pod/Select.pm lib/Pod/Usage.pm
- ! t/pod/special_seqs.t t/pod/special_seqs.xr t/pod/testp2pt.pl
-____________________________________________________________________________
-[ 3303] By: gsar on 1999/05/05 07:02:07
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- Date: Fri, 19 Mar 1999 12:31:35 -0500 (EST)
- Message-Id: <Pine.GSU.4.05.9903191208250.8899-100000@newton.phys>
- Subject: [PATCH 5.005_03-MT3] INSTALL patches
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 3302] By: gsar on 1999/05/05 06:55:21
- Log: load base packages based on nonexistent $VERSION
- From: andreas.koenig@anima.de (Andreas J. Koenig)
- Date: 19 Mar 1999 06:00:28 +0100
- Message-ID: <sfcsob2m5ub.fsf@dubravka.in-berlin.de>
- Subject: Re: base.pm flaw
- Branch: perl
- ! lib/base.pm lib/locale.pm
-____________________________________________________________________________
-[ 3301] By: gsar on 1999/05/04 05:41:08
- Log: pod2man outputs switched date and revision label (fix suggested by
- EthanSasiela@mede.com)
- Branch: perl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 3300] By: gsar on 1999/05/03 18:48:25
- Log: adjust win32_stat() to cope with FindFirstFile() and stat() bugs
- (makes opendir(D,"c:") work reliably)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3299] By: gsar on 1999/05/02 19:39:55
- Log: add test case for change#3298
- Branch: perl
- ! sv.c t/op/readdir.t
-____________________________________________________________________________
-[ 3298] By: gsar on 1999/05/02 19:24:41
- Log: close directory handles properly when localized
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 3297] By: jhi on 1999/04/30 11:42:14
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes config_h.SH configure.com lib/AutoLoader.pm
- !> lib/AutoSplit.pm lib/File/Path.pm pod/perlre.pod pp.c pp_ctl.c
- !> pp_sys.c proto.h regcomp.c t/op/die.t t/op/ref.t util.c
- !> vms/descrip_mms.template vms/gen_shrfls.pl vms/munchconfig.c
- !> vms/subconfigure.com win32/win32.c
-____________________________________________________________________________
-[ 3293] By: chip on 1999/04/29 18:50:49
- Log: Fix shebang lines.
- Branch: maint-5.004/perl
- ! Porting/p4d2p h2pl/mksizes pod/checkpods.PL pod/pod2html.PL
- ! pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL utils/c2ph.PL
- ! utils/h2ph.PL utils/h2xs.PL utils/perlbug.PL utils/perldoc.PL
- ! utils/pl2pm.PL utils/splain.PL win32/bin/search.pl
- ! x2p/find2perl.PL x2p/s2p.PL
-____________________________________________________________________________
-[ 3284] By: gsar on 1999/04/27 00:48:42
- Log: integrate change#3279 from maint-5.004
- Branch: perl
- ! lib/AutoLoader.pm
-____________________________________________________________________________
-[ 3279] By: chip on 1999/04/26 23:09:26
- Log: Make &AutoLoad::AUTOLOAD reentrant.
- Branch: maint-5.004/perl
- ! lib/AutoLoader.pm
-____________________________________________________________________________
-[ 3276] By: chip on 1999/04/26 22:34:36
- Log: Make porting scripts executable.
- Branch: maint-5.004/perl
- ! Changes Porting/genlog Porting/makerel Porting/p4desc
- ! Porting/patchls
-____________________________________________________________________________
-[ 3274] By: gsar on 1999/04/26 17:30:31
- Log: allow embedded null characters in diagnostics
- Branch: perl
- ! pp_ctl.c pp_sys.c proto.h regcomp.c t/op/die.t util.c
-____________________________________________________________________________
-[ 3273] By: gsar on 1999/04/26 08:27:22
- Log: hand-applied conflicting parts of suggested patch
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Wed, 17 Mar 1999 23:55:23 -0400 (EDT)
- Message-id: <01J8YELSL7WK001E7S@mail.newman.upenn.edu>
- Subject: [PATCH 5.005_56] VMS configuration/build
- Branch: perl
- ! configure.com vms/descrip_mms.template vms/gen_shrfls.pl
- ! vms/munchconfig.c vms/subconfigure.com
-____________________________________________________________________________
-[ 3272] By: gsar on 1999/04/26 08:25:41
- Log: update Changes; tweak minor regressions
- Branch: perl
- ! Changes lib/AutoSplit.pm lib/File/Path.pm
-____________________________________________________________________________
-[ 3271] By: gsar on 1999/04/26 07:52:51
- Log: integrate change#3229 from maint-5.004
- Branch: perl
- ! pp_ctl.c util.c
-____________________________________________________________________________
-[ 3270] By: gsar on 1999/04/25 22:58:27
- Log: fix buggy reference count on refs to SVs with autoviv magic
- (resulted in C<my @a; $a[1] = 1; print \$_ for @a> and Data::Dumper
- accessing free()d memory)
- Branch: perl
- ! pp.c t/op/ref.t
-____________________________________________________________________________
-[ 3269] By: gsar on 1999/04/24 17:07:55
- Log: fix bug in change#3123 (off-by-one, caused C<qx[noargs]> to fail
- on win32)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3268] By: gsar on 1999/04/24 16:38:25
- Log: kill dup hunk
- Branch: perl
- ! config_h.SH
-____________________________________________________________________________
-[ 3267] By: gsar on 1999/04/24 16:35:57
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> myconfig.SH
- - myconfig
- ! pod/perlre.pod
- !> (integrate 38 files)
-____________________________________________________________________________
-[ 3266] By: jhi on 1999/04/23 18:42:44
- Log: From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: perl5-porters@perl.org, Jarkko Hietaniemi <jhi@iki.fi>,
- Graham Barr <gbarr@pobox.com>, Gurusamy Sarathy <gsar@activestate.com>
- Cc: Lionel Cons <lionel.cons@cern.ch>,
- Ilya Zakharevich <ilya@math.ohio-state.edu>,
- David Hayes <david@bdel.com>
- Subject: [PATCH] h2ph
- Date: Fri, 23 Apr 1999 12:37:23 -0400
- Message-ID: <19990423123723.A49550@O2.chapin.edu>
- Branch: cfgperl
- ! utils/h2ph.PL
-____________________________________________________________________________
-[ 3265] By: jhi on 1999/04/21 18:17:12
- Log: From: lane@duphy4.physics.drexel.edu (by way of Dan Sugalski <sugalskd@ous.edu>)
- To: perlbug@perl.org
- Subject: [PATCH Perl 5.005.56] descrip_mms.template installed files fix
- Date: Wed, 21 Apr 1999 08:17:54 -0700
- Message-Id: <3.0.6.32.19990421081754.03127b60@ous.edu>
- Branch: cfgperl
- ! vms/descrip_mms.template
-____________________________________________________________________________
-[ 3264] By: jhi on 1999/04/20 08:50:54
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: The Perl Porters Mailing List <perl5-porters@perl.org>
- Subject: [PATCH 5.005_56] Re: 5.006 Todo
- Date: Mon, 19 Apr 1999 16:27:07 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9904191623470.7838-100000@newton.phys>
- Branch: cfgperl
- ! Porting/pumpkin.pod
-____________________________________________________________________________
-[ 3263] By: jhi on 1999/04/20 08:05:01
- Log: From: Chip Salzenberg <chip@perlsupport.com>
- To: Perl 5 Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_56] Configure: $sig_count
- Date: Sun, 18 Apr 1999 17:54:36 -0400
- Message-ID: <19990418175436.A27496@perlsupport.com>
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 3262] By: jhi on 1999/04/19 18:23:50
- Log: Subject: PATCH wrong faq reference in perlbook.pod
- From: Robin Barker <rmb1@cise.npl.co.uk>
- To: perlbug@perl.com
- Date: Fri, 9 Apr 1999 16:05:23 +0100 (BST)
- Message-Id: <199904091505.QAA03757@cyclone.cise.npl.co.uk>
- Branch: cfgperl
- ! pod/perlbook.pod
-____________________________________________________________________________
-[ 3261] By: jhi on 1999/04/15 13:59:04
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Hugo van der Sanden <hugo@corp.netcom.net.uk>
- Cc: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH] Re: 5.005_03 and gcc, GNU ld under Solaris 2.6
- Date: Wed, 14 Apr 1999 17:07:43 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9904141658290.4262-100000@newton.phys>
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 3260] By: jhi on 1999/04/15 13:56:53
- Log: From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: PATCH: 5.005_56: perldata.pod (UPDATE)
- Date: Thu, 15 Apr 1999 07:13:41 -0600
- Message-Id: <199904151313.HAA07682@jhereg.perl.com>
- Branch: cfgperl
- ! pod/perldata.pod
-____________________________________________________________________________
-[ 3259] By: jhi on 1999/04/13 23:12:52
- Log: LDLIBPTH also on 'clean' targets.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 3258] By: jhi on 1999/04/13 21:38:46
- Log: Add information about the two DEC C compiler optimizer bugs
- (what patch levels of the compilers fix them).
- Branch: cfgperl
- ! pp.c t/op/repeat.t
-____________________________________________________________________________
-[ 3257] By: jhi on 1999/04/13 14:25:08
- Log: Be polite about ccdlflags and lddflags, too.
- Avoid Perl's malloc only when threaded.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 3256] By: jhi on 1999/04/13 10:21:33
- Log: Croak if no known ways to semctl() (don't assume union semun).
- Branch: cfgperl
- ! doio.c perl.h
-____________________________________________________________________________
-[ 3255] By: jhi on 1999/04/13 09:10:26
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [Patch 5.005/5.006]Another MM_VMS.pm patch
- Date: Mon, 12 Apr 1999 13:36:48 -0700
- Message-Id: <3.0.6.32.19990412133648.030e7ec0@ous.edu>
- Branch: cfgperl
- ! lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 3254] By: jhi on 1999/04/13 06:56:26
- Log: From: "Todd C. Miller" <Todd.Miller@courtesan.com>
- To: perlbug@perl.com
- Subject: Update for OpenBSD hints
- Date: Mon, 12 Apr 1999 23:12:22 -0600 (MDT)
- Message-Id: <199904130512.XAA27712@xerxes.courtesan.com>
- Branch: cfgperl
- ! hints/openbsd.sh
-____________________________________________________________________________
-[ 3229] By: chip on 1999/04/13 04:04:14
- Log: Preserve errno from importunities of sfio.
- Branch: maint-5.004/perl
- ! pp_ctl.c util.c
-____________________________________________________________________________
-[ 3226] By: jhi on 1999/04/11 12:52:26
- Log: If both ways to call semctl are broken, skip the tests.
- Branch: cfgperl
- ! t/lib/ipc_sysv.t
-____________________________________________________________________________
-[ 3225] By: jhi on 1999/04/10 22:27:28
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: dsembr01@ox.slug.louisville.edu
- Cc: perlbug@perl.com
- Subject: [PATCH 5.004_05 5.005_03 5.005_56] Re: Misspelled macro in ext/POSIX/POSIX.xs?
- Date: Fri, 9 Apr 1999 16:58:08 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9904091648570.894-100000@newton.phys>
- Branch: cfgperl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 3224] By: jhi on 1999/04/09 18:50:32
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_56] Re: prefix= in hints
- Date: Fri, 9 Apr 1999 14:54:18 -0400 (EDT)
- Message-Id: <Pine.GSU.4.05.9904091445280.894-100000@newton.phys>
-
- (Overrides change #3204 from Kurt)
- Branch: cfgperl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 3223] By: jhi on 1999/04/09 18:37:55
- Log: Understand Apollo's //node notation.
-
- From: Johann Klasek <jk@auto.tuwien.ac.at>
- To: jhi@iki.fi
- Subject: Re: DomainPerl
- Date: Fri, 9 Apr 1999 18:21:37 +0200
- Message-ID: <19990409182137.A2299@euklid.auto.tuwien.ac.at>
- Branch: cfgperl
- ! lib/Cwd.pm
-____________________________________________________________________________
-[ 3220] By: jhi on 1999/04/04 16:33:49
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 39 files)
-____________________________________________________________________________
-[ 3219] By: gsar on 1999/04/04 02:48:17
- Log: tweak previous change
- Branch: maint-5.005/perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3218] By: gsar on 1999/04/04 02:44:47
- Log: be careful about extending the stack for the Win32:: builtins
- Branch: maint-5.005/perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3217] By: gsar on 1999/04/04 01:59:26
- Log: correct places that said newSVpv() when they meant newSVpvn()
- Branch: perl
- ! XSUB.h dump.c ext/B/B.xs ext/B/defsubs.h.PL
- ! ext/DB_File/DB_File.xs ext/DynaLoader/dl_vms.xs
- ! ext/IPC/SysV/SysV.xs ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs
- ! ext/Socket/Socket.xs ext/attrs/attrs.xs gv.c hv.c hv.h
- ! jpl/JNI/JNI.xs mg.c op.c perl.c pod/perlguts.pod pp.c pp_ctl.c
- ! pp_sys.c regcomp.c toke.c util.c win32/dl_win32.xs
- ! win32/win32.c
-____________________________________________________________________________
-[ 3216] By: gsar on 1999/04/03 23:58:27
- Log: avoid duplicate code
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 3215] By: gsar on 1999/04/03 23:14:34
- Log: grow PL_tmps_stack more efficiently; make it more amenable to
- STRESS_REALLOC testing
- Branch: perl
- ! embed.h embed.pl global.sym objXSUB.h pp.h proto.h scope.c
- ! sv.c
-____________________________________________________________________________
-[ 3214] By: gsar on 1999/04/03 21:01:09
- Log: scrounge and save three extra branches in pp_entersub()
- Branch: perl
- ! cv.h pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 3213] By: gsar on 1999/04/03 17:43:23
- Log: remove duplicate code and an extra branch in sv_setsv() and
- other hot code by making SvTHINKFIRST() think about FAKE SVs
- Branch: perl
- ! doio.c embed.h embed.pl global.sym objXSUB.h pp.c pp_hot.c
- ! proto.h scope.c sv.c sv.h
-____________________________________________________________________________
-[ 3212] By: jhi on 1999/04/03 16:20:09
- Log: Fix up some _t nits (Pid_t, Gid_t, Uid_t, etc. instead of int).
-
- From: John Bley <jbb6@acpub.duke.edu>
- To: perlbug@perl.org
- Subject: [PATCH]5.005_03 (CORE) Fix some _t nits
- Date: Thu, 1 Apr 1999 02:01:47 -0500 (EST)
- Message-ID: <Pine.SOL.3.91.990401015805.21458A-100000@soc13.acpub.duke.edu>
- Branch: cfgperl
- ! doio.c pp_sys.c
-____________________________________________________________________________
-[ 3211] By: jhi on 1999/04/03 13:27:26
- Log: Change #3210 was rather unportable. This is better.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3210] By: jhi on 1999/04/03 13:16:20
- Log: Avoid Digital UNIX' ksh.
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- To: Henrik Tougaard <ht000@siberut.foa.dk>
- Cc: perlbug@perl.com, ht000@foa.dk
- Subject: Re: Not OK perl5.005_03-MAINT_TRIAL_4
- Date: Wed, 27 Jan 1999 16:52:33 +0200 (EET)
- Message-ID: <13999.10289.319422.239987@alpha.hut.fi>
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3209] By: jhi on 1999/04/03 12:49:04
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes Makefile.SH README installperl t/lib/bigfloatpm.t
-____________________________________________________________________________
-[ 3208] By: jhi on 1999/04/03 12:27:24
- Log: Add -mabi=64 to ccflags for 64-bit IRIX gcc.
-
- From: Lionel Cons <lionel.cons@cern.ch>
- To: jhi@iki.fi
- Cc: perlbug@perl.com, kstar@isinet.com,
- Philippe Defert <philippe.defert@cern.ch>
- Subject: Re: Not OK: perl 5.00503 on IP27-irix 6.5 (UNINSTALLED)
- Date: Thu, 1 Apr 1999 14:05:28 +0200 (METDST)
- Message-Id: <199904011205.OAA11380@mercury.cern.ch>
- Branch: cfgperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 3207] By: jhi on 1999/04/03 12:20:21
- Log: Be polite about usemymalloc.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 3206] By: gsar on 1999/04/02 23:31:59
- Log: a typo in change#3205
- Branch: perl
- ! t/lib/bigfloatpm.t
-____________________________________________________________________________
-[ 3205] By: gsar on 1999/04/02 23:20:31
- Log: make testsuite reflect change#3157 (Math::BigFloat->new now
- returns NaNs faithfully)
- Branch: perl
- ! t/lib/bigfloatpm.t
-____________________________________________________________________________
-[ 3204] By: jhi on 1999/04/02 22:03:23
- Log: On -Uinstallusrbinperl and no -Dprefix, set prefix to /usr/local.
-
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: perl5-porters@perl.org
- Subject: linux hints nit
- Date: Fri, 2 Apr 1999 16:49:47 -0500
- Message-ID: <19990402164947.E80926@O2.chapin.edu>
- Branch: cfgperl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 3203] By: jhi on 1999/04/02 22:00:56
- Log: Display exact glibc version in Linux.
-
- From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: Displaying glibc version on Linux
- Date: Mon, 29 Mar 1999 15:04:26 -0500 (EST)
- Message-Id: <Pine.GSU.4.05.9903291417370.15335-100000@newton.phys>
- Branch: cfgperl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 3202] By: gsar on 1999/04/02 21:23:18
- Log: various little goofs
- Branch: perl
- ! Changes Makefile.SH README installperl
-____________________________________________________________________________
-[ 3201] By: jhi on 1999/04/02 13:13:39
- Log: Configure regen.
-
- Add llseek + offset_t probing.
- Change CONFIG to CONFIGDOTSH.
- 'unset foo' is unportable, use foo=''.
- Branch: cfgperl
- ! Configure Makefile.SH Policy_sh.SH cflags.SH config_h.SH
- ! configpm makeaperl.SH makedepend.SH makedir.SH myconfig.SH
- ! perl_exp.SH writemain.SH
-____________________________________________________________________________
-[ 3200] By: jhi on 1999/04/02 12:06:22
- Log: Introduce myconfig.SH.
-
- From: Andy Dougherty <doughera@lafayette.edu>
- To: Jarkko Hietaniemi <jhi@iki.fi>
- Cc: Nick Ing-Simmons <nik@tiuk.ti.com>, Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH] myconfig.SH (was Re: perl install bug on AIX 4.3.1.0)
- Date: Tue, 30 Mar 1999 12:41:29 -0500 (EST)
- Message-Id: <Pine.GSU.4.05.9903301222280.15987-100000@newton.phys>
- Branch: cfgperl
- + myconfig.SH
- - myconfig
- ! MANIFEST
-____________________________________________________________________________
-[ 3195] By: jhi on 1999/03/28 16:42:54
- Log: Update perlhist on 5_03.
- Branch: maint-5.005/perl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 3194] By: jhi on 1999/03/28 12:30:01
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> t/op/grep.t
- ! lib/Math/BigFloat.pm lib/Math/BigInt.pm lib/bigfloat.pl
- ! t/lib/bigintpm.t
- !> MANIFEST Porting/p4desc ext/Thread/Thread.xs op.c
- !> t/lib/thread.t
-____________________________________________________________________________
-[ 3189] By: gsar on 1999/03/28 08:22:00
- Log: various pod niggles
- Branch: maint-5.005/perl
- ! pod/perl.pod pod/perldebug.pod pod/perldiag.pod
- ! pod/perlfunc.pod pod/perlhist.pod
-____________________________________________________________________________
-[ 3187] By: gsar on 1999/03/28 07:31:16
- Log: regularize CAPI declarations (CAPI extensions now build under
- the Borland compiler)
- Branch: maint-5.005/perl
- ! win32/GenCAPI.pl
-____________________________________________________________________________
-[ 3186] By: gsar on 1999/03/28 07:26:33
- Log: ensure XS_LOCKS stuff happens *before* XSUB is entered under
- -DPERL_CAPI
- Branch: maint-5.005/perl
- ! XSlock.h win32/GenCAPI.pl win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 3183] By: gsar on 1999/03/28 06:00:46
- Log: update p4 utility to ignore non-text files
- Branch: perl
- ! Porting/p4desc
-____________________________________________________________________________
-[ 3181] By: gsar on 1999/03/28 03:37:23
- Log: integrate change#3179 from maint-5.005
- Branch: perl
- !> ext/Thread/Thread.xs t/lib/thread.t
-____________________________________________________________________________
-[ 3180] By: gsar on 1999/03/28 02:28:20
- Log: fix bogus OPf_REF context for the BLOCK in C<grep BLOCK @foo>
- (sometimes caused bizarreness in the BLOCK)
- Branch: perl
- + t/op/grep.t
- ! MANIFEST op.c
-____________________________________________________________________________
-[ 3179] By: gsar on 1999/03/28 02:14:04
- Log: fix thread segfault when passing large number of arguments to child
- a la C<Thread->new($foo, 1..1000)>
- Branch: maint-5.005/perl
- ! ext/Thread/Thread.xs t/lib/thread.t
-____________________________________________________________________________
-[ 3178] By: gbarr on 1999/03/28 01:39:23
- Log: fix $Config{'usethreads'} typo in perlthrtut
-
- From: Ian Maloney <szhmf9@wsblob.ubs.com>
- Date: Thu, 25 Mar 1999 16:40:14 +0100 (MET)
- Message-Id: <199903251540.QAA02439@wsblob.>
- Subject: perlthrtut documentation error
- Branch: maint-5.005/perl
- ! pod/perlthrtut.pod
-____________________________________________________________________________
-[ 3173] By: gbarr on 1999/03/27 18:19:47
- Log: Update Test.pm to VERSION 1.122 from CPAN
- Branch: maint-5.005/perl
- ! lib/Test.pm
-____________________________________________________________________________
-[ 3171] By: jhi on 1999/03/26 22:38:28
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 37 files)
-____________________________________________________________________________
-[ 3170] By: gsar on 1999/03/26 01:30:25
- Log: specify type of bracket in "Unmatched bracket" diagnostic;
- prefer 'brace' or 'curly bracket' over 'curly brace'
- Branch: perl
- ! pod/perldiag.pod pod/perlreftut.pod pod/perlstyle.pod
- ! t/op/misc.t t/op/re_tests toke.c
-____________________________________________________________________________
-[ 3169] By: gsar on 1999/03/26 00:50:51
- Log: better description of "Integer overflow" diagnostic
- Branch: perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 3168] By: gsar on 1999/03/25 11:02:46
- Log: applied needful parts of suggested patch
- From: "Vishal Bhatia" <vishalb@my-dejanews.com>
- Date: Tue, 23 Mar 1999 16:21:43 -0800
- Message-ID: <OOOKJGFMLFLHBAAA@my-dejanews.com>
- Subject: [PATCH 5.005_56] pp_formline correction
- Branch: perl
- ! ext/B/B/Bblock.pm ext/B/B/CC.pm
-____________________________________________________________________________
-[ 3167] By: gsar on 1999/03/25 10:39:02
- Log: clarify what a "comment" means (due to Mark-Jason Dominus
- <mjd@plover.com>)
- Branch: perl
- ! pod/perlsyn.pod
-____________________________________________________________________________
-[ 3166] By: gsar on 1999/03/25 10:33:18
- Log: describe current behavior on local($foo{nothere}) (suggested by
- Lionel Cons <lionel.cons@cern.ch>)
- Branch: perl
- ! pod/perlsub.pod
-____________________________________________________________________________
-[ 3165] By: gsar on 1999/03/25 06:21:05
- Log: fix refcnt on PL_main_cv (variant of suggestion by Vishal Bhatia
- <vishalb@hotmail.com>)
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 3164] By: gsar on 1999/03/25 06:17:27
- Log: From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Tue, 23 Mar 1999 17:47:04 -0800 (PST)
- Message-ID: <14072.16859.154428.241373@fre-76-120.reshall.berkeley.edu>
- Subject: [PATCH _56] Compiler needs to know about utf8 SVOP tr///s
- Branch: perl
- ! ext/B/B.xs op.h opcode.pl
-____________________________________________________________________________
-[ 3163] By: gsar on 1999/03/25 06:15:49
- Log: B::Deparse update from Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Tue, 23 Mar 1999 02:41:34 -0800 (PST)
- Message-ID: <14071.27445.867782.852353@fre-76-120.reshall.berkeley.edu>
- Subject: [PATCH _56] B::Deparse 0.57
- --
- Date: Tue, 23 Mar 1999 13:08:12 -0800 (PST)
- Message-ID: <14072.502.107712.175179@fre-76-120.reshall.berkeley.edu>
- Subject: Re: [PATCH _56] B::Deparse 0.57
- Branch: perl
- ! AUTHORS MAINTAIN ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 3162] By: gsar on 1999/03/25 06:11:46
- Log: fix a few places that said 'int', but meant 'STRLEN'
- Branch: perl
- ! pod/perlguts.pod proto.h sv.c
-____________________________________________________________________________
-[ 3161] By: gsar on 1999/03/25 06:01:18
- Log: From: Russ Allbery <rra@stanford.edu>
- Date: 22 Mar 1999 04:26:26 -0800
- Message-ID: <yl4sndr9ql.fsf@windlord.stanford.edu>
- Subject: [5.005_56] Add EXISTS to SDBM_File and libsdbm
- Branch: perl
- ! ext/SDBM_File/SDBM_File.xs ext/SDBM_File/sdbm/README.too
- ! ext/SDBM_File/sdbm/pair.c ext/SDBM_File/sdbm/pair.h
- ! ext/SDBM_File/sdbm/sdbm.3 ext/SDBM_File/sdbm/sdbm.c
- ! ext/SDBM_File/sdbm/sdbm.h pod/perldelta.pod t/lib/sdbm.t
-____________________________________________________________________________
-[ 3160] By: gsar on 1999/03/25 02:26:31
- Log: better description of OP_UNSTACK (s/unstack/iteration finalizer/)
- Branch: perl
- ! opcode.h opcode.pl
-____________________________________________________________________________
-[ 3159] By: gsar on 1999/03/25 02:18:17
- Log: add statement-modifier loops to :base_loop class
- Branch: perl
- ! ext/Opcode/Opcode.pm
-____________________________________________________________________________
-[ 3158] By: gsar on 1999/03/25 00:36:57
- Log: integrate changes#3105,3130,3154 from maint-5.005
- Branch: perl
- !> Configure INSTALL hints/dec_osf.sh hints/netbsd.sh
-____________________________________________________________________________
-[ 3157] By: gsar on 1999/03/25 00:24:17
- Log: remove bogus panic()
- Branch: perl
- ! Changes lib/Math/BigFloat.pm
-____________________________________________________________________________
-[ 3156] By: jhi on 1999/03/24 22:43:43
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> (branch 38 files)
- !> (integrate 68 files)
-____________________________________________________________________________
-[ 3155] By: jhi on 1999/03/24 22:12:17
- Log: Configure regenerated because of changes #3130/#3154 and #3147.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3154] By: jhi on 1999/03/24 21:40:51
- Log: Reword the shared library search path (LD_LIBRARY_PATH) info
- based on suggestions from Andy Dougherty.
- Branch: maint-5.005/perl
- ! INSTALL
-____________________________________________________________________________
-[ 3153] By: gsar on 1999/03/24 10:38:05
- Log: applied suggested patch, modulo superceded parts
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Thu, 18 Mar 1999 00:10:44 -0400 (EDT)
- Message-id: <01J8YFGIHW2W001E7S@mail.newman.upenn.edu>
- Subject: [PATCH 5.005_56] Miscellaneous VMS-specific fixes
- Branch: perl
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_VMS.pm
- ! t/comp/require.t t/op/lex_assign.t t/op/taint.t
- ! utils/perldoc.PL vms/ext/Stdio/Stdio.pm vms/ext/Stdio/Stdio.xs
- ! vms/ext/Stdio/test.pl vms/test.com vms/vmsish.h
-____________________________________________________________________________
-[ 3152] By: gsar on 1999/03/24 10:30:51
- Log: applied suggested patch, modulo superceded parts
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Thu, 18 Mar 1999 00:04:31 -0400 (EDT)
- Message-id: <01J8YF0EOWLU001E7S@mail.newman.upenn.edu>
- Subject: [PATCH 5.005_56] Miscellaneous small fixes
- Branch: perl
- ! ext/B/defsubs.h.PL ext/re/re.pm lib/ExtUtils/MM_Unix.pm
- ! lib/File/Basename.pm
-____________________________________________________________________________
-[ 3151] By: gsar on 1999/03/24 10:15:00
- Log: doc tweak suggested by M.J.T. Guy <mjtg@cus.cam.ac.uk>
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 3150] By: gsar on 1999/03/24 10:09:13
- Log: missing integration in previous change
- Branch: perl
- !> README.apollo
-____________________________________________________________________________
-[ 3149] By: gsar on 1999/03/24 10:06:44
- Log: integrate changes#3116,3119 from maint-5.005
- Branch: perl
- + README.apollo
- +> apollo/netinet/in.h
- !> MANIFEST hints/apollo.sh t/lib/io_udp.t
-____________________________________________________________________________
-[ 3148] By: gsar on 1999/03/24 10:01:56
- Log: integrate changes#3091-3094 from maint-5.005
- Branch: perl
- !> README.hurd vms/subconfigure.com vos/config.h
- !> vos/config_h.SH_orig
-____________________________________________________________________________
-[ 3147] By: gsar on 1999/03/24 09:31:49
- Log: warn about newfangled vfork() caveats
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 3146] By: jhi on 1999/03/24 09:20:14
- Log: Bring in changes #2808 and #2812 (from mainline perl)
- that enhance the perlbug checklist.
- Branch: maint-5.005/perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 3145] By: gsar on 1999/03/24 08:37:02
- Log: integrate change#3115 from maint-5.005
- Branch: perl
- !> ext/DB_File/Changes ext/DB_File/DB_File.pm
- !> ext/DB_File/DB_File.xs ext/DB_File/typemap
-____________________________________________________________________________
-[ 3144] By: gsar on 1999/03/24 08:33:59
- Log: add note about map in scalar context
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3143] By: gsar on 1999/03/24 08:25:59
- Log: doc tweak
- Branch: perl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 3142] By: gsar on 1999/03/24 08:20:37
- Log: applied suggested patch, modulo bogus hunk
- From: "Vishal Bhatia" <vishalb@hotmail.com>
- Date: Thu, 11 Mar 1999 07:40:27 PST
- Message-ID: <19990311154027.25891.qmail@hotmail.com>
- Subject: [PATCH 5.005_56] Minor fixes in perlcc
- Branch: perl
- ! ext/B/B/C.pm ext/B/B/CC.pm utils/perlcc.PL
-____________________________________________________________________________
-[ 3141] By: gsar on 1999/03/24 08:06:12
- Log: integrate change#3104 from maint-5.005
- Branch: perl
- !> README.os390 t/lib/posix.t
-____________________________________________________________________________
-[ 3140] By: gsar on 1999/03/24 06:34:56
- Log: fix failure of C<&locked_sub;> under -Dusethreads
- Branch: perl
- ! pp_hot.c t/lib/thread.t
-____________________________________________________________________________
-[ 3139] By: gsar on 1999/03/24 05:52:00
- Log: debugger tweak (wasn't printing a newline after recalled commands)
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 3138] By: gsar on 1999/03/24 05:33:28
- Log: document OO exceptions (based on a suggestion by Andreas Koenig
- <andreas.koenig@anima.de>)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3137] By: gsar on 1999/03/24 02:50:20
- Log: better "Illegal %s digit ignored" warnings
- Branch: perl
- ! MANIFEST pod/perldiag.pod pod/perlfunc.pod t/pragma/warn/util
- ! toke.c util.c
-____________________________________________________________________________
-[ 3136] By: gsar on 1999/03/24 02:26:38
- Log: fix off-by-one that resulted in misparse of C</[\x{80}-\x{81}]/>
- Branch: perl
- + t/pragma/utf8.t
- ! regcomp.c
-____________________________________________________________________________
-[ 3135] By: gsar on 1999/03/24 01:29:09
- Log: flip release & version in win32_uname()
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3134] By: gsar on 1999/03/24 01:08:33
- Log: support POSIX::uname() via win32_uname()
- Branch: perl
- ! XSUB.h iperlsys.h win32/GenCAPI.pl win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makedef.pl
- ! win32/perlhost.h win32/win32.c win32/win32.h win32/win32iop.h
-____________________________________________________________________________
-[ 3133] By: gsar on 1999/03/23 22:20:10
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 06 Mar 1999 21:42:56 +0100
- Message-ID: <36e49281.50337171@smtp1.ibm.net>
- Subject: [PATCH 5.005_56] perldelta.pod changes for Win32::* functions
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3132] By: gsar on 1999/03/23 22:17:45
- Log: File::Spec fixes from Jan Dubois <jan.dubois@ibm.net>
- Date: Sat, 06 Mar 1999 17:50:49 +0100
- Message-ID: <36e25209.33833760@smtp1.ibm.net>
- Subject: [PATCH 5.005_56] Fixes for File::Spec::Functions.pm
- --
- Date: Sat, 06 Mar 1999 18:15:00 +0100
- Message-ID: <36e36222.37954195@smtp1.ibm.net>
- Subject: [PATCH 5.005_56] Fix for File::Spec::Win32.pm
- Branch: perl
- + t/lib/filefunc.t
- ! MANIFEST lib/File/Spec/Functions.pm lib/File/Spec/Win32.pm
- ! pod/perldelta.pod pod/perlmodlib.pod
-____________________________________________________________________________
-[ 3131] By: gsar on 1999/03/23 22:07:59
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> ext/DynaLoader/dl_rhapsody.xs hints/rhapsody.sh
- !> Configure Makefile.SH config_h.SH configure.gnu handy.h
- !> installperl malloc.c perl.c perl.h pod/perl.pod
- !> pod/perldelta.pod pp_sys.c t/op/stat.t x2p/util.c
-____________________________________________________________________________
-[ 3130] By: jhi on 1999/03/23 22:02:23
- Log: Don't use config.msg to remind about the
- LD_LIBRARY_PATH because Makefile.SH takes
- care of that.
-
- Use shrplib in DEC O^W^Digital U^W^WTru64 UNIX.
- This used to be the default but in some MT or another it
- was dropped because of some transient error or another.
- Branch: maint-5.005/perl
- ! Configure hints/dec_osf.sh
-____________________________________________________________________________
-[ 3129] By: gsar on 1999/03/23 21:38:03
- Log: add Pod-Parser-1.08 (verbatim module =include tests elided owing
- to size and better maintainability)
- Branch: perl
- + lib/Pod/Checker.pm lib/Pod/InputObjects.pm lib/Pod/Parser.pm
- + lib/Pod/PlainText.pm lib/Pod/Select.pm lib/Pod/Usage.pm
- + pod/pod2usage.PL pod/podchecker.PL pod/podselect.PL
- + t/pod/emptycmd.t t/pod/emptycmd.xr t/pod/for.t t/pod/for.xr
- + t/pod/headings.t t/pod/headings.xr t/pod/include.t
- + t/pod/include.xr t/pod/included.t t/pod/included.xr
- + t/pod/lref.t t/pod/lref.xr t/pod/nested_items.t
- + t/pod/nested_items.xr t/pod/nested_seqs.t t/pod/nested_seqs.xr
- + t/pod/oneline_cmds.t t/pod/oneline_cmds.xr t/pod/poderrs.t
- + t/pod/poderrs.xr t/pod/special_seqs.t t/pod/special_seqs.xr
- + t/pod/testcmp.pl t/pod/testp2pt.pl t/pod/testpchk.pl
- ! AUTHORS MAINTAIN MANIFEST installperl pod/Makefile
- ! win32/Makefile win32/makefile.mk win32/pod.mak
-____________________________________________________________________________
-[ 3128] By: jhi on 1999/03/23 10:14:54
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 46 files)
-____________________________________________________________________________
-[ 3127] By: gsar on 1999/03/23 06:57:30
- Log: From: Tim Witham - FES <twitham@pcocd2.intel.com>
- Date: Thu, 4 Mar 1999 10:54:01 -0800
- Message-Id: <9903041854.AA46868@frc0000>
- Subject: patch for useless Math::BigInt warnings
- Branch: perl
- ! lib/Math/BigInt.pm
-____________________________________________________________________________
-[ 3126] By: gsar on 1999/03/23 05:54:37
- Log: avoid literal 'undef' in $lddlflags under `Configure -Uoptimize`
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- Date: Fri, 19 Feb 1999 15:47:59 -0500
- Message-ID: <19990219154759.A32350@O2.chapin.edu>
- Subject: [PATCH] OSF/1 hints
- Branch: perl
- ! hints/dec_osf.sh
-____________________________________________________________________________
-[ 3125] By: gsar on 1999/03/23 00:56:38
- Log: avoid typeglob persistence in pp_readline()
- Branch: perl
- ! sv.c t/op/gv.t
-____________________________________________________________________________
-[ 3124] By: gsar on 1999/03/22 21:12:23
- Log: update copyright years
- Branch: perl
- ! Changes EXTERN.h INTERN.h av.c av.h bytecode.pl cop.h cv.h
- ! deb.c doio.c doop.c dump.c form.h gv.c gv.h handy.h hv.c hv.h
- ! malloc.c mg.c mg.h op.c op.h perl.c perl.h perlio.c pp.c pp.h
- ! pp_ctl.c pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c
- ! sv.c sv.h toke.c utf8.c utf8.h util.c
-____________________________________________________________________________
-[ 3123] By: gsar on 1999/03/22 07:07:06
- Log: implement win32_spawnvp() internally, making it return true PIDs
- for asynchronous spawns; fix win32_kill() to always deal with
- PIDs
- Branch: perl
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 3122] By: jhi on 1999/03/19 21:12:14
- Log: Describe the new Benchmark feature in more detail.
- Branch: cfgperl
- ! pod/perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3121] By: jhi on 1999/03/19 08:16:12
- Log: AVAILABILITY tuning.
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3120] By: jhi on 1999/03/17 14:52:17
- Log: Rhapsody change assumed too much.
- Branch: cfgperl
- ! t/op/stat.t
-____________________________________________________________________________
-[ 3119] By: jhi on 1999/03/17 14:33:43
- Log: More Apollo fixes.
- Branch: maint-5.005/perl
- ! README.apollo hints/apollo.sh t/lib/io_udp.t
-____________________________________________________________________________
-[ 3118] By: jhi on 1999/03/16 17:23:39
- Log: Nada.
- Branch: maint-5.005/perl
- ! README.apollo
-____________________________________________________________________________
-[ 3117] By: jhi on 1999/03/16 17:18:49
- Log: Apollo DomainOS AVAILABILITY.
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3116] By: jhi on 1999/03/16 17:14:00
- Log: Apollo DomainOS patch
- From: Johann Klasek <jk@auto.tuwien.ac.at>
- Subject: Re: DomainPerl
- Date: Tue, 16 Mar 1999 17:46:32 +0100
- Message-ID: <19990316174632.A19759@euklid.auto.tuwien.ac.at>
- Branch: maint-5.005/perl
- + README.apollo apollo/netinet/in.h
- ! MANIFEST hints/apollo.sh
-____________________________________________________________________________
-[ 3115] By: jhi on 1999/03/16 14:23:54
- Log: From: Paul Marquess <pmarquess@bfsec.bt.co.uk>
- To: Gurusamy Sarathy <gsar@activestate.com>,
- Graham Barr <gbarr@pobox.com>
- Cc: Perl5 Porters <perl5-porters@perl.org>,
- "Paul.Marquess" <Paul.Marquess@btinternet.com>
- Subject: [PATCH 5.005_56 & 5.005_03_T6] Upgrade DB_File to version 1.65
- Date: Sun, 14 Mar 1999 14:43:57 -0000
- Message-Id: <199903141841.NAA17040@defender.perl.org>
- Branch: maint-5.005/perl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/typemap
-____________________________________________________________________________
-[ 3114] By: jhi on 1999/03/16 12:42:20
- Log: Mention Rhapsody in 5.005_5X perldelta,
- and in Rhapsody and Netware in 5.005_0X and 5.005_5X
- *planned* AVAILABILITY.
- Branch: cfgperl
- ! pod/perl.pod pod/perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3113] By: jhi on 1999/03/16 10:38:53
- Log: perldelta niggling.
- Branch: cfgperl
- ! pod/perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3112] By: jhi on 1999/03/16 10:35:21
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> lib/unicode/MakeEthiopicSyllables.PL pod/perldelta.pod
- !> pod/perlhist.pod pod/perlmodinstall.pod pod/perltodo.pod
-____________________________________________________________________________
-[ 3111] By: jhi on 1999/03/16 10:28:10
- Log: AVAILABILITY update: still mention PowerUX,
- Novell Netware now has sources available.
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3110] By: gsar on 1999/03/16 04:34:23
- Log: sundry pod niggles
- Branch: perl
- ! lib/unicode/MakeEthiopicSyllables.PL pod/perldelta.pod
- ! pod/perlhist.pod pod/perlmodinstall.pod pod/perltodo.pod
-____________________________________________________________________________
-[ 3109] By: jhi on 1999/03/15 17:00:11
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> lib/unicode/EthiopicSyllables.txt lib/unicode/In/Ethiopic.pl
- +> lib/unicode/Is/Syllable.pl
- +> lib/unicode/MakeEthiopicSyllables.PL
- +> lib/unicode/README.Ethiopic
- !> AUTHORS MAINTAIN MANIFEST lib/unicode/Block.pl
- !> lib/unicode/Category.pl lib/unicode/Is/Alnum.pl
- !> lib/unicode/Is/Alpha.pl lib/unicode/Is/Digit.pl
- !> lib/unicode/Is/L.pl lib/unicode/Is/Lo.pl lib/unicode/Is/N.pl
- !> lib/unicode/Is/Nd.pl lib/unicode/Is/No.pl lib/unicode/Is/P.pl
- !> lib/unicode/Is/Po.pl lib/unicode/Is/Space.pl
- !> lib/unicode/Is/Z.pl lib/unicode/Is/Zs.pl lib/unicode/Makefile
- !> lib/unicode/Name.pl lib/unicode/Number.pl op.c
-____________________________________________________________________________
-[ 3108] By: jhi on 1999/03/15 16:58:12
- Log: First pass of integrating the Rhapsody port,
-
- From: Wilfredo Sanchez <wsanchez@apple.com>
- Subject: Keeping the world in sync.
- Reply-To: wsanchez@apple.com
- To: perlbug@perl.com
- Date: Fri, 13 Nov 1998 17:11:30 -0800
- Message-Id: <199811140111.RAA41784@scv4.apple.com>
- Branch: cfgperl
- + ext/DynaLoader/dl_rhapsody.xs hints/rhapsody.sh
- ! Configure Makefile.SH config_h.SH configure.gnu handy.h
- ! installperl malloc.c perl.c perl.h pp_sys.c t/op/stat.t
- ! x2p/util.c
-____________________________________________________________________________
-[ 3107] By: gsar on 1999/03/15 03:22:10
- Log: applied suggested patch (mailed to perl-unicode@perl.org) with minor tweaks
- From: Daniel Yacob <dmulholl@cs.indiana.edu>
- Date: Tue, 23 Feb 1999 16:13:42 -0500 (EST)
- Message-Id: <199902232113.QAA26135@drum.cs.indiana.edu>
- Subject: ../lib/unicode/ Unicode 3.0 Extensions for Ethiopic
- Branch: perl
- + lib/unicode/EthiopicSyllables.txt lib/unicode/In/Ethiopic.pl
- + lib/unicode/Is/Syllable.pl
- + lib/unicode/MakeEthiopicSyllables.PL
- + lib/unicode/README.Ethiopic
- ! AUTHORS MAINTAIN MANIFEST lib/unicode/Block.pl
- ! lib/unicode/Category.pl lib/unicode/Is/Alnum.pl
- ! lib/unicode/Is/Alpha.pl lib/unicode/Is/Digit.pl
- ! lib/unicode/Is/L.pl lib/unicode/Is/Lo.pl lib/unicode/Is/N.pl
- ! lib/unicode/Is/Nd.pl lib/unicode/Is/No.pl lib/unicode/Is/P.pl
- ! lib/unicode/Is/Po.pl lib/unicode/Is/Space.pl
- ! lib/unicode/Is/Z.pl lib/unicode/Is/Zs.pl lib/unicode/Makefile
- ! lib/unicode/Name.pl lib/unicode/Number.pl
-____________________________________________________________________________
-[ 3106] By: gsar on 1999/03/12 20:35:36
- Log: change#3067 failed package.t due to needless creation of $a and $b;
- fixed to do that only for C<sort BLOCK|CODE @foo>, not C<sort(@foo)>
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 3105] By: jhi on 1999/03/12 15:54:57
- Log: Recognize the NetBSD packages collection.
- Branch: maint-5.005/perl
- ! hints/netbsd.sh
-____________________________________________________________________________
-[ 3104] By: jhi on 1999/03/12 09:07:04
- Log: From: pvhp@forte.com (Peter Prymmer)
- To: jhi@iki.fi, perl-mvs@perl.org, perlbug@perl.com
- Subject: [PATCH MT6,_56] was Re: Not OK: perl 5.00503 +MAINT_TRIAL_6 on os390 06.00 (UNINSTALLED)
- Date: Thu, 11 Mar 99 14:24:54 PST
- Message-Id: <9903112224.AA24346@forte.com>
- Branch: maint-5.005/perl
- ! README.os390 t/lib/posix.t
-____________________________________________________________________________
-[ 3103] By: jhi on 1999/03/10 11:07:46
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes embed.h embed.pl embedvar.h global.sym objXSUB.h op.c
- !> perl.c perl.h pod/perldelta.pod pod/pod2man.PL t/base/lex.t
- !> t/pragma/warn/1global toke.c win32/makedef.pl
-____________________________________________________________________________
-[ 3102] By: jhi on 1999/03/10 11:01:20
- Log: From: pvhp@forte.com (Peter Prymmer)
- To: perl5-porters@perl.org
- Subject: [5.005_03-MT6]Patch: time passes
- Date: Tue, 9 Mar 99 18:42:17 PST
- Message-Id: <9903100242.AA29057@forte.com>
- Branch: maint-5.005/perl
- ! perl.c
-____________________________________________________________________________
-[ 3101] By: jhi on 1999/03/10 10:30:15
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- To: perl5-porters@perl.com
- Subject: Minor fix to perlfunc.pod
- Date: Mon, 08 Mar 1999 20:05:53 -0500
- Message-ID: <19990309010553.13757.qmail@plover.com>
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3100] By: gsar on 1999/03/09 23:04:44
- Log: change#3060 had the wrong quotes
- Branch: perl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 3099] By: jhi on 1999/03/09 12:52:21
- Log: d_uname was broken (probably since _53), reported by
-
- From: Alan Burlison <Alan.Burlison@uk.sun.com>
- To: p5p <perl5-porters@perl.org>, Gurusamy Sarathy <gsar@umich.edu>,
- cpan-testers@perl.org
- Subject: Not OK: perl 5.00556 on sun4-solaris 2.6
- Date: Mon, 08 Mar 1999 13:22:31 +0000
- Message-ID: <36E3CF17.EA1FEDAA@uk.sun.com>
-
- and
-
- From: lvirden@cas.org (Larry W. Virden)
- To: perlbug@perl.com
- Subject: configure not correctly identifying uname posix compatibility
- Date: Mon, 8 Mar 1999 06:36:16 -0500 (EST)
- Message-Id: <199903081136.GAA23682@cas.org>
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3098] By: gsar on 1999/03/09 03:16:07
- Log: fix parsing of here documents in C<eval 's/.../<<FOO/e'>
- Branch: perl
- ! op.c perl.h pod/perldelta.pod t/base/lex.t toke.c
-____________________________________________________________________________
-[ 3097] By: gsar on 1999/03/09 02:50:43
- Log: use yyerror() instead of croak() so that compile-time failures in
- my(LIST) don't confuse globals with lexicals
- Branch: perl
- ! op.c toke.c
-____________________________________________________________________________
-[ 3096] By: gsar on 1999/03/09 02:47:36
- Log: adjust testsuite for change#3067
- Branch: perl
- ! t/pragma/warn/1global
-____________________________________________________________________________
-[ 3095] By: gsar on 1999/03/08 21:04:48
- Log: remove bogus symbols from global.sym
- Branch: perl
- ! Changes embed.h embed.pl embedvar.h global.sym objXSUB.h
- ! perl.h win32/makedef.pl
-____________________________________________________________________________
-[ 3094] By: jhi on 1999/03/06 16:16:15
- Log: From: Mark Kettenis <kettenis@wins.uva.nl>
- To: jhi@iki.fi
- Subject: Oops
- Date: Sat, 6 Mar 1999 17:15:35 +0100 (CET)
- Message-Id: <199903061615.RAA00207@delius.kettenis.nl>
- Branch: maint-5.005/perl
- ! README.hurd
-____________________________________________________________________________
-[ 3093] By: jhi on 1999/03/06 15:59:46
- Log: From: Mark Kettenis <kettenis@wins.uva.nl>
- To: jhi@iki.fi
- Subject: New Hurd README
- Date: Sat, 6 Mar 1999 16:46:12 +0100 (CET)
- Message-Id: <199903061601.RAA00185@delius.kettenis.nl>
- Branch: maint-5.005/perl
- ! README.hurd
-____________________________________________________________________________
-[ 3092] By: jhi on 1999/03/06 12:52:06
- Log: From: Paul_Green@stratus.com
- To: perl5-porters@perl.org
- Cc: jhi@iki.fi, Paul_Green@stratus.com
- Subject: [PATCH 5.005_03-MAINT_TRIAL_6]: platform: vos -- updates to VOS port of Perl5
- Date: Fri, 5 Mar 1999 18:08:49 -0500
- Message-ID: <1D1A4EF7AD4DD211A80D00A0C9D7DB665A035A@exna1.stratus.com>
- Branch: maint-5.005/perl
- ! vos/config.h vos/config_h.SH_orig
-____________________________________________________________________________
-[ 3091] By: jhi on 1999/03/06 12:42:21
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.005_03-MT6]VMS build patch
- Date: Fri, 05 Mar 1999 12:36:19 -0800
- Message-Id: <3.0.6.32.19990305123619.02d326a0@ous.edu>
- Branch: maint-5.005/perl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 3090] By: gsar on 1999/03/06 04:40:03
- Log: integrate change#3089 from mainline
-
- tolerate CRs after options
- Branch: maint-5.005/perl
- !> perl.c
-____________________________________________________________________________
-[ 3089] By: gsar on 1999/03/06 04:30:40
- Log: tolerate CRs after options
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 3088] By: jhi on 1999/03/05 12:49:01
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> README.hurd
- !> MANIFEST ext/Errno/Errno_pm.PL t/lib/io_sock.t
-____________________________________________________________________________
-[ 3087] By: gsar on 1999/03/05 06:41:16
- Log: adjust timeouts to accomodate slow/busy systems
- Branch: perl
- ! t/lib/io_sock.t
-____________________________________________________________________________
-[ 3083] By: gsar on 1999/03/05 01:32:47
- Log: integrate change#3081 from maint-5.005
- Branch: perl
- !> ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 3082] By: gsar on 1999/03/05 01:31:06
- Log: integrate change#2904 from maint-5.005
- Branch: perl
- +> README.hurd
- !> MANIFEST
-____________________________________________________________________________
-[ 3081] By: gsar on 1999/03/05 00:14:33
- Log: protect against doubled backslashes
- Branch: maint-5.005/perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 3077] By: jhi on 1999/03/04 08:10:13
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> ext/B/B/Stash.pm
- !> MANIFEST README.hpux cc_runtime.h config_h.SH ext/B/B/C.pm
- !> ext/B/B/CC.pm gv.c lib/File/Compare.pm lib/Test/Harness.pm
- !> op.c pod/perldelta.pod pod/perlfunc.pod pod/pod2man.PL
- !> t/lib/bigfloatpm.t t/lib/io_sock.t utils/perlcc.PL
-____________________________________________________________________________
-[ 3076] By: jhi on 1999/03/04 08:07:59
- Log: Regen config_h.SH once more because of *size,
- noticed by
-
- From: Hans Mulder <hansm@icgned.icgroup.nl>
- To: Jarkko Hietaniemi <jhi@iki.fi>
- Cc: perl5-porters@perl.org
- Subject: [PATCH for _56] LONGSIZE used before it is set in config.h
- Date: Thu, 4 Mar 99 00:10:45 +0100
- Message-Id: <9903032317.AA23021@icgned.icgroup.nl>
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3068] By: gsar on 1999/03/04 05:48:03
- Log: From: Hans Mulder <hansm@icgned.icgroup.nl>
- Date: Thu, 4 Mar 99 00:10:45 +0100
- Message-Id: <9903032317.AA23021@icgned.icgroup.nl>
- Subject: [PATCH for _56] LONGSIZE used before it is set in config.h
- Branch: perl
- ! config_h.SH
-____________________________________________________________________________
-[ 3067] By: gsar on 1999/03/04 05:44:32
- Log: exempt $foo::a,$foo::b from warnings only if sort() was seen in package foo
- From: Graham Barr <gbarr@ti.com>
- Date: Wed, 3 Mar 1999 17:23:56 -0600
- Message-ID: <19990303172356.F7442@dal.asp.ti.com>
- Subject: Re: 'use strict' doesn't work for one-letter variables
- Branch: perl
- ! gv.c op.c
-____________________________________________________________________________
-[ 3066] By: gsar on 1999/03/04 05:20:50
- Log: updates to compiler modules
- From: "Vishal Bhatia" <vishalb@hotmail.com>
- Date: Tue, 02 Mar 1999 23:27:25 PST
- Message-ID: <19990303072725.779.qmail@hotmail.com>
- Subject: PATCH 5.005_56 + Test procedure
- Branch: perl
- + ext/B/B/Stash.pm
- ! MANIFEST cc_runtime.h ext/B/B/C.pm ext/B/B/CC.pm
- ! lib/Test/Harness.pm utils/perlcc.PL
-____________________________________________________________________________
-[ 3065] By: gsar on 1999/03/04 05:03:30
- Log: more s/s_/s!/ etc.
- Branch: perl
- ! pod/perldelta.pod pod/perlfunc.pod
-____________________________________________________________________________
-[ 3064] By: gsar on 1999/03/04 04:50:45
- Log: integrate cfgperl contents into mainline
- Branch: perl
- !> Configure README.vms bytecode.h config_h.SH configure.com
- !> ext/B/defsubs.h.PL hints/hpux.sh pod/perldelta.pod
- !> pod/perldiag.pod pp.c t/lib/ipc_sysv.t t/op/pack.t thread.h
- !> vms/ext/vmsish.pm vms/subconfigure.com vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 3063] By: gsar on 1999/03/04 04:44:13
- Log: HP-UX has yet another spelling for /NaNQ?/
- Branch: perl
- ! t/lib/bigfloatpm.t
-____________________________________________________________________________
-[ 3062] By: gsar on 1999/03/04 04:36:08
- Log: error-check for accept() test
- Branch: perl
- ! t/lib/io_sock.t
-____________________________________________________________________________
-[ 3061] By: gsar on 1999/03/04 03:40:25
- Log: allow custom comparison function in File::Compare::compare_text()
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 26 Feb 1999 21:56:09 +0100
- Message-ID: <36db0838.8805651@smtp1.ibm.net>
- Subject: Re: PodParser 1.07 (was: RE: C<stuff()> vs stuff())
- Branch: perl
- ! lib/File/Compare.pm
-____________________________________________________________________________
-[ 3060] By: gsar on 1999/03/04 03:37:38
- Log: better version of change#3038
- From: abigail@fnx.com
- Date: Mon, 1 Mar 1999 14:11:36 -0500 (EST)
- Message-ID: <19990301191136.5557.qmail@alexandra.wayne.fnx.com>
- Subject: Re: [PATCH 5.005_03 TRIAL-5 pod/pod2man.PL] Recognize -> and => inside
- Branch: perl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 3058] By: jhi on 1999/03/03 22:30:40
- Log: Configure regen to
- (1) match maint-5.005 patches #3056 and #3057
- (2) better version of PHOSTNAME of #3050
- (3) the crosscompile/multiarch config_h.SH trouble solved for now
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3054] By: jhi on 1999/03/03 09:57:59
- Log: Change #3053 missed perldelta.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3053] By: jhi on 1999/03/03 08:29:43
- Log: Use '!' to mark native integer packings instead of '_'.
- Branch: cfgperl
- ! pod/perldiag.pod pp.c t/lib/ipc_sysv.t t/op/pack.t
-____________________________________________________________________________
-[ 3052] By: jhi on 1999/03/02 23:12:36
- Log: The HP-UX threads patch (change #3028) is needed also here.
- Branch: cfgperl
- ! hints/hpux.sh thread.h
-____________________________________________________________________________
-[ 3051] By: jhi on 1999/03/02 08:24:52
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.005_0x and 5.005_5x]Minor update to README.VMS
- Date: Mon, 01 Mar 1999 16:10:57 -0800
- Message-Id: <3.0.6.32.19990301161057.03b1fc00@ous.edu>
- Branch: cfgperl
- ! README.vms
- Branch: maint-5.005/perl
- ! README.vms
-____________________________________________________________________________
-[ 3050] By: jhi on 1999/03/02 08:22:29
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH5.005_56]Diffs to get 5.005_56 building on VMS
- Date: Mon, 01 Mar 1999 16:06:29 -0800
- Message-Id: <3.0.6.32.19990301160629.02e09ec0@ous.edu>
-
- From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.005_56]vmsish.pm patch
- Date: Mon, 01 Mar 1999 20:19:04 -0800
- Message-Id: <3.0.6.32.19990301201904.02cff460@ous.edu>
-
- plus Configure regen containing a "solution" to the
- crosscompile/multiarch problem.
- Branch: cfgperl
- ! Configure config_h.SH configure.com ext/B/defsubs.h.PL
- ! vms/ext/vmsish.pm vms/subconfigure.com vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 3049] By: jhi on 1999/03/02 07:34:21
- Log: From: Spider Boardman <spider@leggy.zk3.dec.com>
- To: perl5-porters@perl.org
- Subject: [PATCH] Eliminate (valid) warning in byterun.c
- Date: Mon, 01 Mar 1999 17:27:59 -0500
- Message-Id: <199903012227.RAA00181@leggy.zk3.dec.com>
- Branch: cfgperl
- ! bytecode.h
- Branch: maint-5.005/perl
- ! bytecode.h
-____________________________________________________________________________
-[ 3048] By: gsar on 1999/03/02 06:41:21
- Log: updated HP-UX notes from Jeff Okamoto <okamoto@xfiles.intercon.hp.com>
- Branch: perl
- ! MANIFEST README.hpux
-____________________________________________________________________________
-[ 3047] By: jhi on 1999/03/01 06:34:43
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> README.hpux lib/File/Spec/Functions.pm
- !> (integrate 28 files)
-____________________________________________________________________________
-[ 3046] By: gsar on 1999/03/01 05:34:28
- Log: this is 5.005_56
- Branch: perl
- ! Changes
-
-----------------
-Version 5.005_56
-----------------
-
-____________________________________________________________________________
-[ 3045] By: gsar on 1999/03/01 03:32:30
- Log: destroy PL_svref_mutex in perl_destruct()
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 3044] By: gsar on 1999/03/01 00:38:50
- Log: up patchlevel &c.
- Branch: perl
- ! Changes patchlevel.h pod/perlhist.pod win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 3043] By: gsar on 1999/03/01 00:14:15
- Log: integrate cfgperl contents into mainline
- Branch: perl
- ! pod/perldelta.pod
- !> Configure config_h.SH
-____________________________________________________________________________
-[ 3042] By: gsar on 1999/02/28 23:55:08
- Log: slightly edited version of suggested patch
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Mon, 01 Mar 1999 00:32:05 +0100
- Message-ID: <36dbcf2c.12325433@smtp1.ibm.net>
- Subject: Re: [PATCH 5.005_55] Cleanup of File::Spec module
- Branch: perl
- + lib/File/Spec/Functions.pm
- ! MANIFEST lib/File/Spec.pm
-____________________________________________________________________________
-[ 3041] By: gsar on 1999/02/28 22:47:19
- Log: fix subtle bug in eval'' testsuite
- Branch: perl
- ! t/op/eval.t
-____________________________________________________________________________
-[ 3040] By: gsar on 1999/02/28 22:46:24
- Log: avoid literal control characters in change#3039
- Branch: perl
- ! t/base/lex.t
-____________________________________________________________________________
-[ 3039] By: gsar on 1999/02/28 21:47:18
- Log: todo item: permit extended control variables a la ${^Foo} (patch
- courtesy Mark-Jason Dominus <mjd@plover.com>)
- Branch: perl
- ! op.c pod/perldelta.pod pod/perltodo.pod pod/perlvar.pod
- ! t/base/lex.t toke.c
-____________________________________________________________________________
-[ 3038] By: gsar on 1999/02/28 21:21:05
- Log: From: abigail@fnx.com
- Date: Sun, 28 Feb 1999 10:59:16 -0500 (EST)
- Message-ID: <19990228155916.14496.qmail@alexandra.wayne.fnx.com>
- Subject: Recognize -> and => inside [A-Z]<> sequences.
- Branch: perl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 3037] By: gsar on 1999/02/28 21:12:22
- Log: fix longstanding bug: searches for lexicals originating within eval''
- weren't stopping at the subroutine boundary correctly
- Branch: perl
- ! op.c proto.h t/op/eval.t
-____________________________________________________________________________
-[ 3036] By: gsar on 1999/02/28 20:02:29
- Log: revert parts of change#2990 to preserve predictable usage of Win32::Foo()
- as stacked list values
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 27 Feb 1999 18:24:17 +0100
- Message-ID: <36e22849.36531259@smtp1.ibm.net>
- Subject: Re: resend [PATCH 5.005_55] Various win32/win32.c cleanup
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 3035] By: gsar on 1999/02/28 19:48:54
- Log: remove superfluous stack_sp decl
- Branch: perl
- ! jpl/JNI/JNI.xs
-____________________________________________________________________________
-[ 3034] By: gsar on 1999/02/28 19:34:58
- Log: s/print STDERR/warn/ suggested by abigail@fnx.com; add $VERSION
- Branch: perl
- ! lib/Getopt/Std.pm
-____________________________________________________________________________
-[ 3033] By: gsar on 1999/02/28 19:23:41
- Log: add File::Compare::compare_text()
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 26 Feb 1999 00:20:41 +0100
- Message-ID: <36dcd8ab.20195659@smtp1.ibm.net>
- Subject: Re: PodParser 1.07 (was: RE: C<stuff()> vs stuff())
- Branch: perl
- ! lib/File/Compare.pm pod/perltodo.pod
-____________________________________________________________________________
-[ 3032] By: gsar on 1999/02/28 19:01:33
- Log: add README.hpux
- Branch: perl
- + README.hpux
- ! MAINTAIN MANIFEST
-____________________________________________________________________________
-[ 3031] By: gsar on 1999/02/28 18:49:08
- Log: avoid escaping &amp; et al multiple times (variant of fix suggested by
- James Cromie <jcromie@fossil.uswc.uswest.com>
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 3030] By: gsar on 1999/02/28 18:35:09
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 24 Feb 1999 22:34:56 +0100
- Message-ID: <36d86f1e.11495549@smtp1.ibm.net>
- Subject: [PATCH 5.005_55] Test::Harness setting $ENV{HARNESS_ACTIVE}
- Branch: perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 3029] By: gsar on 1999/02/28 18:28:18
- Log: add note about env pollution
- Branch: perl
- ! INSTALL pod/perltodo.pod
-____________________________________________________________________________
-[ 3028] By: jhi on 1999/02/26 14:40:00
- Log: HP-UX 11 threads.
-
- From: Jeff Okamoto <okamoto@xfiles.intercon.hp.com>
- To: perl5-porters@perl.org
- Cc: jhi@cc.hut.fi
- Subject: Maint 5 and _54 with threading on HP-UX 11.00
- Date: Wed, 3 Feb 1999 12:57:18 -0800 (PST)
- Message-Id: <199902032057.MAA10218@xfiles.intercon.hp.com>
-
- NOTE from jhi: the hpux hints could still be more robust by
- disabling gdbm when necessary.
-
- Currently if there's a libgdbm.sl (gdbm 1.7.3) which is pre-11,
- linking -lgdbm -lpthread creates an executable that instantly
- core dumps on a pthreads internal panic:
-
- ./gdpt
-
- Pthread internal error: message: __libc_reinit() failed, file: ../pthreads/pthread.c, line: 1096
- Return Pointer is 0xc082bf33
- 17639 quit (core dumped) ./gdpt
-
- You don't have to *use* either gdbm or pthreads in the executable,
- just linking them together is enough. Workaround is to recompile
- the GDBM under HP-UX 11, that makes the problem go away.
- Branch: maint-5.005/perl
- ! hints/hpux.sh thread.h
-____________________________________________________________________________
-[ 3025] By: jhi on 1999/02/25 20:41:07
- Log: Temporary workaround for the config_h.SH versus
- crosscompile and multiarch plus introduce 'rt'
- to $libswanted: in UNIX98 sched_yield() lives there.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3024] By: jhi on 1999/02/24 12:54:59
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> t/lib/fatal.t
- !> (integrate 44 files)
-____________________________________________________________________________
-[ 3023] By: gsar on 1999/02/24 07:02:12
- Log: integrate cfgperl contents
- Branch: perl
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 3022] By: gsar on 1999/02/24 05:59:47
- Log: From: Daniel Grisinger <dgris@moiraine.dimensional.com>
- Date: 23 Feb 1999 17:53:22 -0700
- Message-ID: <m3g17w62rh.fsf@moiraine.dimensional.com>
- Subject: [PATCH: _55] perldoc -q broken
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 3021] By: gsar on 1999/02/24 05:51:53
- Log: ansify perlio.c, fix PerlIO-ish typos
- Branch: perl
- ! ext/DynaLoader/dl_beos.xs ext/DynaLoader/dl_cygwin32.xs
- ! iperlsys.h perlio.c
-____________________________________________________________________________
-[ 3020] By: gsar on 1999/02/24 05:28:06
- Log: adjust a Perl_malloc() flag for NeXT
- From: Hans Mulder <hansm@icgned.icgroup.nl>
- Date: Tue, 23 Feb 99 00:26:25 +0100
- Message-Id: <9902222329.AA17516@icgned.icgroup.nl>
- Subject: [PATCH for _55] MUTEX_INIT_CALLS_MALLOC no longer necessary
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 3019] By: gsar on 1999/02/24 05:19:42
- Log: perltodo adjustments from Joshua Pritikin <joshua.pritikin@db.com>
- Branch: perl
- ! pod/perltodo.pod
-____________________________________________________________________________
-[ 3018] By: gsar on 1999/02/24 04:15:18
- Log: From: Joshua Pritikin <joshua.pritikin@db.com>
- Date: Mon, 22 Feb 1999 11:29:09 -0500 (EST)
- Message-ID: <Pine.GSO.4.02.9902221128200.500-100000@eq1062.wks.na.deuba.com>
- Subject: improved error message [PATCH _55] [RESEND]
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 3017] By: gsar on 1999/02/24 03:50:34
- Log: From: Tom Christiansen <tchrist@jhereg.perl.com>
- Date: Sun, 21 Feb 1999 20:02:18 -0700
- Message-Id: <199902220302.UAA09981@jhereg.perl.com>
- Subject: perlfunc updates (against 55)
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3016] By: gsar on 1999/02/24 03:17:05
- Log: testsuite adjustments
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Sat, 20 Feb 1999 15:24:57 +0000
- Message-Id: <E10EEH3-0003Wf-00@taurus.cus.cam.ac.uk>
- Subject: Not quite OK: perl5.005_55 on SunOS 4.1.3 / gcc
- Branch: perl
- ! t/lib/io_sock.t t/op/lex_assign.t
-____________________________________________________________________________
-[ 3015] By: gsar on 1999/02/24 02:54:47
- Log: avoid modifying readonly values from qw()
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 3014] By: gsar on 1999/02/24 02:49:04
- Log: more "correct" utbuf for utime()
- Branch: perl
- ! doio.c
-____________________________________________________________________________
-[ 3013] By: jhi on 1999/02/22 19:27:44
- Log: Fix MacPerl version, change PowerUX to PowerMAX.
-
- From: Chris Nandor <pudge@pobox.com>
- To: jhi@iki.fi
- Cc: perl5-porters@perl.org
- Subject: Re: perl current availability as documented by perl.pod
- Date: Sun, 21 Feb 1999 11:06:03 -0500
- Message-Id: <v04020a07b2f5df60c9e3@[192.168.0.77]>
-
- From: Tom Horsley <Tom.Horsley@mail.ccur.com>
- To: jhi@iki.fi
- Cc: perl5-porters@perl.org
- Subject: Re: perl current availability as documented by perl.pod
- Date: Mon, 22 Feb 1999 13:08:30 GMT
- Message-Id: <199902221308.NAA19971@cleo.ccur.com>
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3012] By: jhi on 1999/02/22 10:26:11
- Log: Snapshot the cross-compilation/multiarchitecture stuff
- (currently broken in next)
- Branch: cfgperl
- ! Configure config_h.SH pp.c
-____________________________________________________________________________
-[ 3011] By: jhi on 1999/02/22 10:24:51
- Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- To: gsar@activestate.com (Gurusamy Sarathy)
- Cc: perl5-porters@perl.org (Perl5 Porters)
- Subject: [PATCH 5.005_55] DB_File 1.64 patch
- Date: Mon, 22 Feb 1999 10:07:00 +0000 (GMT)
- Message-Id: <9902221007.AA17751@claudius.bfsec.bt.co.uk>
- Branch: cfgperl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/typemap t/lib/db-recno.t
-____________________________________________________________________________
-[ 3009] By: jhi on 1999/02/22 09:14:26
- Log: Scratch #3008 and introduce $crosscompile and $multiarch
- also in non-Configure lands.
- Branch: cfgperl
- ! Configure config_h.SH hints/next_3.sh hints/next_3_0.sh
- ! hints/next_4.sh vms/subconfigure.com win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 3008] By: jhi on 1999/02/22 08:58:04
- Log: Add -DMULTIARCH (see change #3006).
- Branch: cfgperl
- ! hints/next_3.sh hints/next_3_0.sh hints/next_4.sh
-____________________________________________________________________________
-[ 3007] By: jhi on 1999/02/22 08:54:06
- Log: Undo the references to local{lib,arch} introduced by #3006.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3006] By: jhi on 1999/02/22 08:43:50
- Log: From: hansm@icgned.icgroup.nl
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00555 on OPENSTEP-Mach-thread 4_2 (UNINSTALLED)
- Date: Sun, 21 Feb 1999 22:58:55 +0100
- Reply-To: hansmu@xs4all.nl
- Message-Id: <9902212201.AA13386@icgned.icgroup.nl>
-
- plus other Configure changes: prepare for cross-compilation/
- multiarchitecture builds.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 3005] By: jhi on 1999/02/22 08:35:30
- Log: Configure/Perl knew how to look for use Mach cthreads
- but Configure didn't let them to be used ($osname 'next').
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 3004] By: jhi on 1999/02/21 15:46:02
- Log: Update Acorn AVAILABILITY.
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3003] By: jhi on 1999/02/21 14:50:42
- Log: From: rjk@linguist.dartmouth.edu (Ronald J. Kimball)
- To: perl5-porters@perl.org (Perl 5 Porters)
- Subject: PATCH: perlref.pod - symbolic ref example
- Date: Sat, 20 Feb 1999 17:32:11 -0500 (EST)
- Message-Id: <199902202232.RAA62306@linguist.dartmouth.edu>
- Branch: cfgperl
- ! pod/perlref.pod
- Branch: maint-5.005/perl
- ! pod/perlref.pod
-____________________________________________________________________________
-[ 3002] By: jhi on 1999/02/21 14:35:22
- Log: Sync cfgperl with maint-5.005 change #3000.
- Branch: cfgperl
- ! pod/perlfunc.pod t/op/pack.t
-____________________________________________________________________________
-[ 2999] By: gsar on 1999/02/20 22:48:30
- Log: From: John Bley <jbb6@acpub.duke.edu>
- Date: Sat, 20 Feb 1999 16:02:34 EST
- Message-Id: <Pine.SOL.3.91.990220155832.9913A-100000@soc11.acpub.duke.edu>
- Subject: [PATCH]5.005_55 (CORE) Sparse intializer in regcomp.c
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 2998] By: jhi on 1999/02/20 14:13:06
- Log: Enhanced the endianness description.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2996] By: jhi on 1999/02/20 13:55:41
- Log: Glossary now mostly fixed.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 2994] By: jhi on 1999/02/20 11:58:33
- Log: Perldeltify GNU/Hurd.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2993] By: gsar on 1999/02/20 00:59:10
- Log: fix typo in Perl_sbrk()
- From: hansm@icgned.icgroup.nl
- Date: Fri, 19 Feb 1999 23:19:31 +0100
- Message-Id: <9902192221.AA07213@icgned.icgroup.nl>
- Subject: Not OK: perl 5.00555 on OPENSTEP-Mach 4_2 (UNINSTALLED)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 2992] By: gsar on 1999/02/20 00:51:08
- Log: integrate change#2980 from maint-5.005
- Branch: perl
- !> utils/h2xs.PL
-____________________________________________________________________________
-[ 2991] By: gsar on 1999/02/20 00:34:01
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Thu, 18 Feb 1999 18:51:38 +0000
- Message-Id: <199902181851.SAA14018@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_55] test failures with MIME-tools-4.122 and perl 5.005_55
- Branch: perl
- ! pp_hot.c t/op/pat.t
-____________________________________________________________________________
-[ 2990] By: gsar on 1999/02/20 00:30:48
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Thu, 18 Feb 1999 19:14:07 +0100
- Message-ID: <36d15809.40853323@smtp1.ibm.net>
- Subject: resend [PATCH 5.005_55] Various win32/win32.c cleanup
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 2989] By: gsar on 1999/02/20 00:27:01
- Log: do poll() emulation unless HAS_POLL && I_POLL
- Branch: perl
- ! ext/IO/poll.h
-____________________________________________________________________________
-[ 2988] By: gsar on 1999/02/19 23:52:12
- Log: tweak RE for NaNQ? recognition
- Branch: perl
- ! t/lib/bigfloatpm.t
-____________________________________________________________________________
-[ 2987] By: gsar on 1999/02/19 23:29:59
- Log: mention C<use utf8> and C<use warning> in perldelta
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2985] By: jhi on 1999/02/19 20:43:19
- Log: pack/unpack better in (network-)short-non-16-bits and
- (network-)long-non-32-bits systems such as Cray C90.
- Branch: cfgperl
- ! perl.h pp.c t/op/pack.t
-____________________________________________________________________________
-[ 2984] By: jhi on 1999/02/19 20:38:54
- Log: Regen Configure.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! perl.c
-____________________________________________________________________________
-[ 2982] By: jhi on 1999/02/19 19:51:49
- Log: Configure update: fstatvfs/fstafs/getmntent/hasmntopt were
- not probed for and
-
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: Chaim Frenkel <chaimf@pobox.com>,
- Russ Allbery <rra@stanford.edu>,
- Jarkko Hietaniemi <jhi@iki.fi>,
- Gurusamy Sarathy <gsar@activestate.com>,
- Graham Barr <gbarr@pobox.com>
- Cc: bdensch@ameritech.net, perlbug@perl.com
- Subject: [PATCH] Re: Solaris 7 for Intel
- Message-ID: <19990219124404.A30182@O2.chapin.edu>
-
- Glossary is still missing some terms because
- mkglossary is misbehaving (change #2981 updated
- Glossary manually)
- Branch: cfgperl
- ! Configure Makefile.SH Porting/Glossary Porting/config.sh
- ! Porting/config_H
-____________________________________________________________________________
-[ 2980] By: gbarr on 1999/02/19 16:06:53
- Log: Make result of h2xs work when user adds C<use strict>
- Branch: maint-5.005/perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 2979] By: gsar on 1999/02/19 05:24:29
- Log: doc for change#2978
- Branch: perl
- ! pod/perlsub.pod
-____________________________________________________________________________
-[ 2978] By: gsar on 1999/02/19 05:08:29
- Log: bring '*' prototype closer to how it behaves internally
- Branch: perl
- + t/lib/fatal.t
- ! MANIFEST lib/Fatal.pm op.c t/comp/proto.t
-____________________________________________________________________________
-[ 2977] By: gsar on 1999/02/19 02:50:31
- Log: stem leakage of perly.h #defines #ifndef PERL_CORE
- Branch: perl
- ! perly.h
-____________________________________________________________________________
-[ 2975] By: gsar on 1999/02/18 21:41:57
- Log: distinguish eval'' from BEGIN|INIT|END CVs (fixes buggy propagation
- of lexical searches in BEGIN|INIT|END)
- Branch: perl
- ! cop.h cv.h op.c perly.c perly.y pp_ctl.c t/op/misc.t
- ! vms/perly_c.vms
-____________________________________________________________________________
-[ 2974] By: gsar on 1999/02/18 21:03:06
- Log: missing PERL_POLLUTE_MALLOC
- Branch: perl
- ! ext/SDBM_File/sdbm/sdbm.h
-____________________________________________________________________________
-[ 2973] By: gsar on 1999/02/18 17:10:49
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- Date: Wed, 17 Feb 1999 17:22:50 EST
- Message-Id: <Pine.GSU.4.05.9902171720490.17243-100000@newton.phys>
- Subject: [PATCH 5.005_xx] dotsh.pl triggers new warnings
- Branch: perl
- ! lib/dotsh.pl
-____________________________________________________________________________
-[ 2972] By: gsar on 1999/02/18 17:04:12
- Log: s/#defined/#define/
- Branch: perl
- ! ext/Data/Dumper/Dumper.xs
-____________________________________________________________________________
-[ 2970] By: gsar on 1999/02/18 03:26:43
- Log: ensure is data malloc()ed by GDBM is free()d (not Perl_mfree()d)
- Branch: perl
- ! ext/GDBM_File/GDBM_File.pm ext/GDBM_File/GDBM_File.xs
- ! ext/GDBM_File/typemap
-____________________________________________________________________________
-[ 2969] By: gsar on 1999/02/17 23:30:47
- Log: correct slurp mode doc
- Branch: perl
- ! pod/perlfunc.pod pod/perlop.pod
-____________________________________________________________________________
-[ 2968] By: jhi on 1999/02/17 23:15:49
- Log: Ultrix hints update.
-
- From: Spider Boardman <spider@zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00555 on RISC-ultrix 4.4 (UNINSTALLED)
- Date: Tue, 16 Feb 1999 23:04:28 -0500
- Message-Id: <9902170404.AA11036@abyss.zk3.dec.com>
- Branch: cfgperl
- ! hints/ultrix_4.sh
-____________________________________________________________________________
-[ 2966] By: jhi on 1999/02/17 23:09:21
- Log: Change #2965 wiped out some Sarathy's _55 changes.
- Now unwiped.
- Branch: cfgperl
- ! Configure pp.c t/op/pack.t
-____________________________________________________________________________
-[ 2965] By: jhi on 1999/02/17 23:00:04
- Log: Configure tweaks.
-
- Fix the Unixware/SCO uname scan:
-
- From: Tom Hughes <thh@cyberscience.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00555 on i386-svr4 [actually Unixware 2.1] (UNINSTALLED)
- Date: 17 Feb 1999 15:34:15 +0000
- Message-ID: <yekg185nix4.fsf@elva.cyberscience.com>
-
- AIX syscalls.exp scan: the syscall might be marked 32, 3264, or 64
-
- From: Joe Buehler <jhpb@hekimian.com>
- To: perl5-porters@perl.org
- Subject: setsid not detected by perl 5.005_02 configure under AIX 4.3
- Date: 12 Feb 1999 11:25:21 -0500
- Message-ID: <yd3lni3613i.fsf@ganymede.hekimian.com>
-
- Make the pthreads joinable constant scan to output to fd 4, not 2.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2964] By: gsar on 1999/02/17 21:30:07
- Log: From: Tom Christiansen <tchrist@jhereg.perl.com>
- Date: Wed, 17 Feb 1999 06:53:13 -0700
- Message-Id: <199902171353.GAA15682@jhereg.perl.com>
- Subject: PATCH: lib/Pod/Functions.pm for perl5.005_55
- Branch: perl
- ! lib/Pod/Functions.pm
-____________________________________________________________________________
-[ 2963] By: gsar on 1999/02/17 21:18:21
- Log: fix comppad handling for failures in eval 'qr/(?p{...})/'
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Wed, 17 Feb 1999 10:06:01 +0000
- Message-Id: <199902171006.KAA10204@crypt.compulink.co.uk>
- Subject: Re: [5.005_53] panic: pad_free curpad
- Branch: perl
- ! regcomp.c regexec.c t/op/misc.t
-____________________________________________________________________________
-[ 2962] By: gsar on 1999/02/16 21:26:28
- Log: NaNQ? tweak
- Branch: perl
- ! t/lib/bigfloatpm.t
-____________________________________________________________________________
-[ 2961] By: jhi on 1999/02/16 19:26:38
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 37 files)
-____________________________________________________________________________
-[ 2960] By: gsar on 1999/02/16 18:04:29
- Log: undo change#2465 (qw[] is a real list now)
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 2959] By: gsar on 1999/02/16 07:09:33
- Log: this was 5.005_55
- Branch: perl
- ! Changes
-
-----------------
-Version 5.005_55
-----------------
-
-____________________________________________________________________________
-[ 2958] By: gsar on 1999/02/16 06:18:27
- Log: integrate change#2852 from maint-5.005; integrate cfgperl contents;
- elide dups and non-dependents from Changes
- Branch: perl
- ! Changes pod/perlhist.pod
- !> Configure INSTALL README.threads doio.c ext/IPC/SysV/SysV.xs
- !> hints/ultrix_4.sh pod/perl.pod pod/perlfunc.pod
- !> pod/perlport.pod pp.c t/op/pack.t
-____________________________________________________________________________
-[ 2957] By: gsar on 1999/02/16 04:09:47
- Log: propagate PERL_VERSION everywhere, add to pod
- Branch: perl
- ! Configure configpm configure.com ext/B/B/C.pm ext/B/byteperl.c
- ! ext/DB_File/DB_File.xs ext/Data/Dumper/Dumper.xs ext/IO/IO.xs
- ! hints/freebsd.sh hints/os2.sh installman installperl myconfig
- ! os2/Makefile.SHs os2/os2.c patchlevel.h perl.c perl.h
- ! plan9/genconfig.pl plan9/myconfig.plan9 plan9/versnum
- ! pod/perldebug.pod pod/perldelta.pod vms/genconfig.pl
- ! vms/myconfig.com vms/subconfigure.com win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_sh.PL
- ! win32/win32.c x2p/a2py.c
-____________________________________________________________________________
-[ 2955] By: jhi on 1999/02/15 16:15:03
- Log: The pack tests now better in C90 (after the packnative patches).
- Branch: cfgperl
- ! t/op/pack.t
-____________________________________________________________________________
-[ 2954] By: gsar on 1999/02/15 14:11:50
- Log: tweak Configure to follow new PERL_VERSION etc.
- Branch: perl
- ! Configure patchlevel.h pod/perlhist.pod
-____________________________________________________________________________
-[ 2953] By: jhi on 1999/02/15 14:02:21
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> MANIFEST Porting/makerel
-____________________________________________________________________________
-[ 2952] By: jhi on 1999/02/15 13:50:07
- Log: Enhance the packnative patch: use the packnative code
- only if required. Also added hefty testing (hopefully
- I didn't assume too much...). Tested on alpha, ix86, sparc.
- Branch: cfgperl
- ! pod/perlfunc.pod pp.c t/op/pack.t
-____________________________________________________________________________
-[ 2951] By: jhi on 1999/02/15 13:46:56
- Log: AVAILABILITY from 5.005_03-tobe, will of course
- require updating when 5.006 comes out.
- Branch: cfgperl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2949] By: gsar on 1999/02/15 13:28:51
- Log: will this be it for 5.005_55?
- Branch: perl
- ! MANIFEST Porting/makerel
-____________________________________________________________________________
-[ 2948] By: jhi on 1999/02/15 13:23:52
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes Makefile.SH ext/B/B/C.pm patchlevel.h perl.h
- !> pod/perldiag.pod pod/perlembed.pod pod/perlfaq3.pod
- !> pod/perlfaq4.pod pod/perlfaq9.pod pod/perlmodinstall.pod
- !> pod/perlmodlib.pod pod/perltoc.pod t/io/argv.t
- !> t/lib/bigfloatpm.t t/lib/h2ph.t win32/Makefile win32/config.bc
- !> win32/config.gc win32/config.vc win32/config_H.bc
- !> win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 2947] By: jhi on 1999/02/15 13:20:41
- Log: perlport.pod 1.39 from Chris.
- Branch: cfgperl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 2946] By: jhi on 1999/02/15 13:09:58
- Log: Import Ultrix update, change #2864,
-
- From: Spider Boardman <spider@zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on RISC-ultrix 4.4 (UNINSTALLED)
- Date: Wed, 10 Feb 1999 23:33:31 -0500
- Message-Id: <9902110433.AA12816@abyss.zk3.dec.com>
- Branch: cfgperl
- ! doio.c ext/IPC/SysV/SysV.xs hints/ultrix_4.sh
-____________________________________________________________________________
-[ 2945] By: jhi on 1999/02/15 13:04:50
- Log: OpenBSD sparc SHMLBA.
- Branch: cfgperl
- ! ext/IPC/SysV/SysV.xs
-____________________________________________________________________________
-[ 2944] By: gsar on 1999/02/15 12:09:52
- Log: update win32/config* stuff, Changes
- Branch: perl
- ! Changes win32/Makefile win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 2943] By: gsar on 1999/02/15 11:54:08
- Log: #include patchlevel.h by default, provide
- PERL_{REVISION,VERSION,SUBVERSION}
- Branch: perl
- ! patchlevel.h perl.h
-____________________________________________________________________________
-[ 2942] By: gsar on 1999/02/15 10:26:59
- Log: allow /0|NaN/ on some bigfloatpm.t tests for portability; other
- misc fixes
- Branch: perl
- ! Makefile.SH t/io/argv.t t/lib/bigfloatpm.t t/lib/h2ph.t
-____________________________________________________________________________
-[ 2941] By: gsar on 1999/02/15 10:24:37
- Log: broken URLs fixed (from Michael G Schwern <schwern@pobox.com>)
- Message-ID: <19990207002851.B9185@toldyouso.com>
- Message-ID: <19990207212152.A9765@toldyouso.com>
- Message-ID: <19990207212041.A9622@toldyouso.com>
- Message-ID: <19990207213127.A10244@toldyouso.com>
- Message-ID: <19990207212559.A9950@toldyouso.com>
- Message-ID: <19990207212842.A9994@toldyouso.com>
- Message-ID: <19990207212500.A9860@toldyouso.com>
- Message-ID: <19990207213013.A10105@toldyouso.com>
- Branch: perl
- ! pod/perldiag.pod pod/perlembed.pod pod/perlfaq3.pod
- ! pod/perlfaq4.pod pod/perlfaq9.pod pod/perlmodinstall.pod
- ! pod/perlmodlib.pod pod/perltoc.pod
-____________________________________________________________________________
-[ 2940] By: gsar on 1999/02/15 10:07:08
- Log: enable dynaloading in C.pm-compiled programs (non-conflicting part
- of suggested patch)
- From: "Vishal Bhatia" <vishalb@my-dejanews.com>
- Date: Mon, 08 Feb 1999 01:14:41 -0000
- Message-ID: <DHIDFFOPMEFDBAAA@my-dejanews.com>
- Subject: [PATCH 5.005_54] some pending C.pm stuff
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 2939] By: jhi on 1999/02/15 08:40:18
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> t/lib/bigfloat.t t/lib/bigfloatpm.t
- - lib/File/PathConvert.pm
- !> (integrate 81 files)
-____________________________________________________________________________
-[ 2938] By: gsar on 1999/02/15 06:56:39
- Log: change#2839 was bogus, redo
- Branch: perl
- !> t/lib/h2ph.pht
-____________________________________________________________________________
-[ 2937] By: gsar on 1999/02/15 06:38:15
- Log: support Win32::GetFullPathName() and Win32::SetLastError()
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Tue, 09 Feb 1999 22:27:31 +0100
- Message-ID: <36c1a2ed.8007554@smtp1.ibm.net>
- Subject: [PATCH _54] Win32::GetFullPathName (Re: File::Spec::Win32 and UNCs)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 2936] By: gsar on 1999/02/15 06:26:39
- Log: support native integers, pack("L_",...) etc. (via private mail)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Wed, 10 Feb 1999 00:04:52 +0200 (EET)
- Message-Id: <199902092204.AAA29065@alpha.hut.fi>
- Subject: the "packnative" patch
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod pp.c
- ! t/lib/ipc_sysv.t t/op/pack.t
-____________________________________________________________________________
-[ 2935] By: gsar on 1999/02/15 06:04:02
- Log: From: Michael G Schwern <schwern@pobox.com>
- Date: Tue, 9 Feb 1999 04:13:12 -0500
- Message-ID: <19990209041312.A15788@toldyouso.com>
- Subject: [PATCH]5.005_03-MAINT_TRIAL_5 utils/h2xs fixing -A & more
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 2934] By: gsar on 1999/02/15 05:30:13
- Log: fix bugs in the handling of negative numbers, among other things
- From: Steven Knight <knight@theopera.baldmt.citilink.com>
- Date: Mon, 8 Feb 1999 01:16:24 -0600
- Message-Id: <199902080716.BAA24652@theopera.baldmt.citilink.com>
- Subject: Math::BigFloat and Math::BigInt
- Branch: perl
- + t/lib/bigfloat.t t/lib/bigfloatpm.t
- ! lib/Math/BigFloat.pm lib/Math/BigInt.pm lib/bigfloat.pl
- ! t/lib/bigintpm.t
-____________________________________________________________________________
-[ 2933] By: gsar on 1999/02/15 04:57:52
- Log: From: "J. van Krieken" <John.van.Krieken@ATComputing.nl>
- Date: Thu, 4 Feb 1999 17:25:25 +0100 (MET)
- Message-Id: <199902041625.RAA14489@atcmpg.ATComputing.nl>
- Subject: s2p incorrectly handles hold space commands
- Branch: perl
- ! x2p/s2p.PL
-____________________________________________________________________________
-[ 2932] By: gsar on 1999/02/15 04:45:55
- Log: clarify what a "line" is
- Branch: perl
- ! pod/perlfunc.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 2931] By: gsar on 1999/02/15 04:23:29
- Log: backout change#2811 and add newer version based on File::Spec
- From: Barrie Slaymaker <rbs@telerama.com>
- Date: Thu, 11 Feb 1999 16:29:24 -0500
- Message-ID: <36C34BB4.A62090E0@telerama.com>
- Subject: [PATCH]5.005_54 (pod2html) Relative URLs using new File::Spec
- Branch: perl
- - lib/File/PathConvert.pm
- ! MANIFEST installhtml lib/Pod/Html.pm
-____________________________________________________________________________
-[ 2930] By: gsar on 1999/02/15 04:16:25
- Log: From: Barrie Slaymaker <rbs@telerama.com>
- Date: Thu, 11 Feb 1999 19:39:48 -0500
- Message-ID: <36C37854.707D139@telerama.com>
- Subject: [PATCH] 5.005_54 #2 Merging File::PathConvert in to File::Spec
- Branch: perl
- ! lib/File/Spec/Unix.pm lib/File/Spec/Win32.pm
-____________________________________________________________________________
-[ 2929] By: gsar on 1999/02/15 04:06:50
- Log: patches suggested by John Bley <jbb6@acpub.duke.edu> (with minor edits)
- Date: Wed, 3 Feb 1999 05:24:55 -0500 (EST)
- Message-ID: <Pine.SOL.3.91.990203051924.302A-100000@soc11.acpub.duke.edu>
- Subject: [PATCH]5.005_54 (DOC) fix many typos
- --
- Date: Wed, 3 Feb 1999 08:53:53 -0500 (EST)
- Message-ID: <Pine.SOL.3.91.990203085157.895A-100000@soc11.acpub.duke.edu>
- Subject: [PATCH]5.005_54 (DOC) typos
- Branch: perl
- ! pod/perl5004delta.pod pod/perl5005delta.pod pod/perlcall.pod
- ! pod/perldebug.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod pod/perlfunc.pod pod/perlguts.pod
- ! pod/perllol.pod pod/perlmod.pod pod/perlref.pod
- ! pod/perlrun.pod pod/perlsub.pod pod/perltoc.pod
- ! pod/perlvar.pod pod/perlxs.pod
-____________________________________________________________________________
-[ 2928] By: gsar on 1999/02/15 03:39:53
- Log: allow the Carp routines to pass through exception objects
- Branch: perl
- ! lib/Carp.pm
-____________________________________________________________________________
-[ 2927] By: gsar on 1999/02/15 03:22:57
- Log: mention Proc::Daemon (suggested by Michael G Schwern <schwern@pobox.com>)
- Branch: perl
- ! pod/perlfaq8.pod
-____________________________________________________________________________
-[ 2926] By: gsar on 1999/02/15 03:19:39
- Log: integrate h2ph.PL fixes from change#2809 (change#2838 was supposed to
- have done that, but didn't)
- Branch: perl
- !> utils/h2ph.PL
-____________________________________________________________________________
-[ 2925] By: gsar on 1999/02/15 03:17:01
- Log: integrate cfgperl changes into mainline
- Branch: perl
- ! Changes
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH hints/openbsd.sh hints/ultrix_4.sh
- !> pod/perlport.pod t/lib/h2ph.pht utils/h2ph.PL
- !> vms/subconfigure.com
-____________________________________________________________________________
-[ 2924] By: gsar on 1999/02/15 03:07:08
- Log: add const qualifier to most char* prototypes, handle ripple effect
- Branch: perl
- ! gv.c hv.c hv.h mg.c op.c perl.c pod/perlguts.pod proto.h sv.c
- ! universal.c util.c
-____________________________________________________________________________
-[ 2923] By: gsar on 1999/02/15 01:04:30
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Thu, 04 Feb 1999 02:37:31 +0000
- Message-Id: <199902040237.CAA03255@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_54] Re: .. misinterpreted as flipflop
- Branch: perl
- ! pp_ctl.c t/op/range.t
-____________________________________________________________________________
-[ 2922] By: gsar on 1999/02/15 00:24:34
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Sun, 31 Jan 1999 01:50:06 +0000
- Message-Id: <199901310150.BAA16299@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_03t4] regexp flags bug
- Branch: perl
- ! regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 2921] By: gsar on 1999/02/15 00:13:02
- Log: use New() et al., rather than safemalloc() et al.
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 29 Jan 1999 23:27:22 +0100
- Message-ID: <36bd33f2.51029616@smtp1.ibm.net>
- Subject: [PATCH _03-MT5] POSIX.xs memory API
- Branch: perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2920] By: gsar on 1999/02/15 00:05:33
- Log: tweak READ() docs to mention $buffer must be altered by reference
- Branch: perl
- ! pod/perltie.pod
-____________________________________________________________________________
-[ 2919] By: gsar on 1999/02/14 23:50:39
- Log: applied suggested patch, with several language/readability tweaks
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 29 Jan 1999 00:25:02 -0500
- Message-ID: <19990129002502.C2898@monk.mps.ohio-state.edu>
- Subject: Re: [PATCH 5.005_*] Better parsing docs
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 2918] By: gsar on 1999/02/14 23:20:42
- Log: several bug fixes; now croak()s when date exceeds integer limits (instead
- of silently returning bogus values)
- From: Peter Chines <pchines@nhgri.nih.gov>
- Date: Wed, 27 Jan 1999 16:11:31 -0500
- Message-Id: <199901272117.QAA21458@kronos.nhgri.nih.gov>
- Subject: Time::Local
- Branch: perl
- ! lib/Time/Local.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 2917] By: gsar on 1999/02/14 11:21:43
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 28 Jan 1999 10:02:20 -0500
- Message-ID: <19990128100220.A1321@monk.mps.ohio-state.edu>
- Subject: Re: [PATCH 5.005_53] Better perldoc
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 2916] By: gsar on 1999/02/14 10:59:38
- Log: back out change#2751, apply updated version
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 06 Feb 1999 01:06:29 +0100
- Message-ID: <36bc844c.18763049@smtp1.ibm.net>
- Subject: [PATCH] Cleanup of File::Spec module
- Branch: perl
- ! lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm
- ! lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
- ! lib/File/Spec/Win32.pm
-____________________________________________________________________________
-[ 2915] By: gsar on 1999/02/14 10:48:01
- Log: tweak select() test
- Branch: perl
- ! pod/perlipc.pod t/op/fh.t
-____________________________________________________________________________
-[ 2914] By: gsar on 1999/02/14 10:25:55
- Log: allow C<select('foo')> to autovivify *foo (SelectSaver expects that)
- Branch: perl
- ! op.c pod/perldiag.pod pp_sys.c t/op/misc.t
-____________________________________________________________________________
-[ 2913] By: gsar on 1999/02/14 10:03:51
- Log: From: Kenneth Albanowski <kjahds@kjahds.com>
- Date: Sat, 23 Jan 1999 21:52:15 -0500 (EST)
- Message-ID: <Pine.LNX.3.93.990123212857.446B-100000@kjahds.kjahds.com>
- Subject: Re: SvOPV() or SvPV_nolen() or ...
- Branch: perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 2912] By: gsar on 1999/02/14 09:57:29
- Log: provide SvPV_nolen(sv) to avoid use of PL_na
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sun, 24 Jan 1999 02:45:32 +0100
- Message-ID: <36bb7ada.68485547@smtp1.ibm.net>
- Subject: [PATCH 5.005_54] _54 version of SvPV_nolen patch
- Branch: perl
- ! embed.h global.sym objXSUB.h pod/perlguts.pod proto.h sv.c
- ! sv.h
-____________________________________________________________________________
-[ 2911] By: gsar on 1999/02/14 06:51:05
- Log: elide stray effluvium
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2910] By: gsar on 1999/02/14 05:51:56
- Log: slurping an empty file should return '' rather than undef, with
- commensurate effects on ARGV processing
- Branch: perl
- ! pod/perldelta.pod pod/perlfunc.pod pod/perlop.pod
- ! pod/perlvar.pod pp_hot.c sv.h t/io/argv.t
-____________________________________________________________________________
-[ 2909] By: gsar on 1999/02/14 00:02:11
- Log: perly_c.diff typo
- Branch: perl
- ! perly.c perly_c.diff vms/perly_c.vms
-____________________________________________________________________________
-[ 2908] By: gsar on 1999/02/13 18:20:13
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 13 Feb 1999 13:25:53 +0100
- Message-Id: <36c9629c.13334874@smtp1.ibm.net>
- Subject: [PATCH 5.005_03-MT5] "goto must have label" message for C<goto ''>
- Branch: perl
- ! pod/perlfunc.pod pp_ctl.c t/lib/io_unix.t
-____________________________________________________________________________
-[ 2907] By: jhi on 1999/02/13 15:07:26
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> emacs/e2ctags.pl pod/perltodo.pod t/op/lop.t
- !> (integrate 150 files)
-____________________________________________________________________________
-[ 2903] By: gsar on 1999/02/12 13:25:59
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sun, 24 Jan 1999 01:12:00 +0100
- Message-ID: <36b66479.62756298@smtp1.ibm.net>
- Subject: [PATCH 5.005_54] remove OVERLOAD conditionals
- Branch: perl
- ! XSUB.h dump.c gv.c hv.h mg.c perl.h perlvars.h pp.c pp.h
- ! proto.h sv.c sv.h
-____________________________________________________________________________
-[ 2902] By: gsar on 1999/02/12 12:55:11
- Log: script to generate ctags from etags
- From: Colin Kuskie <ckuskie@cadence.com>
- Date: Wed, 20 Jan 1999 16:29:35 -0800 (PST)
- Message-ID: <Pine.GSO.3.96.990120160519.5755Q-100000@pdxue150.cadence.com>
- Subject: [PATCH 5.005_54] adding ctags to the source, FAQ, make
- Branch: perl
- + emacs/e2ctags.pl
- ! Makefile.SH pod/perlfaq3.pod
-____________________________________________________________________________
-[ 2901] By: gsar on 1999/02/12 12:40:17
- Log: allow boolean assign ops to be lvalues
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Mon, 11 Jan 1999 16:52:18 -0600 (CST)
- Message-ID: <13978.32609.495338.544643@alias-2.pr.mcs.net>
- --
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Mon, 18 Jan 1999 10:04:00 +0000
- Message-Id: <199901181004.KAA17471@crypt.compulink.co.uk>
- Subject: Re: [inconsistency 5.005_54] ||= not an lvalue
- Branch: perl
- + t/op/lop.t
- ! MANIFEST op.c
-____________________________________________________________________________
-[ 2899] By: jhi on 1999/02/12 12:03:48
- Log: Configure update: OpenBSD thread-awareness, SCO ODT/OSR osvers.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH hints/openbsd.sh
-____________________________________________________________________________
-[ 2898] By: gsar on 1999/02/12 11:49:25
- Log: support win32_putenv()
- Branch: perl
- ! mg.c util.c win32/GenCAPI.pl win32/makedef.pl win32/perlhost.h
- ! win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 2894] By: gsar on 1999/02/12 11:09:27
- Log: add missing hunk in change#2657
- Branch: perl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2893] By: gsar on 1999/02/12 11:00:13
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 19 Jan 1999 20:13:15 -0500
- Message-ID: <19990119201315.A21167@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Remove extraneous sh in test suites
- Branch: perl
- ! t/op/fh.t t/op/misc.t t/op/runlevel.t t/pragma/strict.t
- ! t/pragma/subs.t t/pragma/warning.t
-____________________________________________________________________________
-[ 2892] By: gsar on 1999/02/12 10:44:38
- Log: update change#2670 to later version
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Sun, 31 Jan 1999 16:16:14 +0000
- Message-Id: <199901311616.QAA17673@crypt.compulink.co.uk>
- Subject: Re: [PATCH 5.005_54] Evalled substitution parsing
- Branch: perl
- ! t/op/subst.t toke.c
-____________________________________________________________________________
-[ 2891] By: gsar on 1999/02/12 10:31:17
- Log: make testsuite somewhat location independent
- Branch: perl
- ! (edit 117 files)
-____________________________________________________________________________
-[ 2890] By: gsar on 1999/02/12 10:00:30
- Log: add $AutoLoader::VERSION
- Branch: perl
- ! lib/AutoLoader.pm
-____________________________________________________________________________
-[ 2889] By: gsar on 1999/02/12 09:55:48
- Log: tweak PERL_STRICT_CR notes
- Branch: perl
- ! pod/perl5005delta.pod
-____________________________________________________________________________
-[ 2888] By: gsar on 1999/02/12 09:41:45
- Log: add note about test-notty target
- Branch: perl
- ! README.win32
-____________________________________________________________________________
-[ 2887] By: gsar on 1999/02/12 09:37:37
- Log: add perltodo.pod
- Branch: perl
- + pod/perltodo.pod
- ! MANIFEST Todo pod/Makefile pod/perl.pod pod/roffitall
- ! win32/pod.mak
-____________________________________________________________________________
-[ 2886] By: jhi on 1999/02/12 08:52:14
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> t/op/fh.t
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 2885] By: gsar on 1999/02/12 08:42:10
- Log: note how to find REG_INFTY limit
- Branch: perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 2884] By: jhi on 1999/02/12 08:36:14
- Log: OpenBSD pthreads awareness, thanks to
- David Leonard <david.leonard@csee.uq.edu.au>
- Branch: maint-5.005/perl
- ! Configure hints/openbsd.sh
-____________________________________________________________________________
-[ 2882] By: gsar on 1999/02/12 08:05:20
- Log: IO is maintained by p5p (per Graham Barr's wishes)
- Branch: perl
- ! MAINTAIN ext/IO/ChangeLog ext/IO/README ext/IO/lib/IO/Dir.pm
- ! ext/IO/lib/IO/Pipe.pm ext/IO/lib/IO/Poll.pm
- ! ext/IO/lib/IO/Select.pm ext/IO/lib/IO/Socket.pm
- ! ext/IO/lib/IO/Socket/INET.pm ext/IO/lib/IO/Socket/UNIX.pm
-____________________________________________________________________________
-[ 2881] By: gsar on 1999/02/12 07:57:13
- Log: fh.t typo
- Branch: perl
- ! t/op/fh.t
-____________________________________________________________________________
-[ 2880] By: gsar on 1999/02/12 07:38:16
- Log: PERL5OPT=-T enables taint mode (suggested by Jason Riedy <ejr@cise.ufl.edu>)
- Branch: perl
- ! perl.c pod/perlrun.pod
-____________________________________________________________________________
-[ 2879] By: gsar on 1999/02/12 05:39:29
- Log: fix ops that are not filehandle constructors to not create GV if it
- doesn't already exist (avoids leaks); extend semantics of defined()
- so that defined(*{$foo}) works (experimental)
- Branch: perl
- + t/op/fh.t
- ! MANIFEST embed.h embed.pl objXSUB.h op.c pod/perldiag.pod pp.c
- ! pp_hot.c pp_sys.c proto.h t/op/gv.t t/op/misc.t
-____________________________________________________________________________
-[ 2877] By: jhi on 1999/02/11 20:44:00
- Log: From: Chris Nandor <pudge@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH] perlport.pod 1.39
- Date: Thu, 11 Feb 1999 12:28:35 -0500
- Message-Id: <v04020a2db2e8c3177123@[192.168.0.77]>
- Branch: cfgperl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 2870] By: gsar on 1999/02/11 11:17:08
- Log: remove double typeglob deref (suggested by RonaldWS <ronaldws@aol.com>)
- Branch: perl
- ! ext/IO/lib/IO/Pipe.pm
-____________________________________________________________________________
-[ 2869] By: gsar on 1999/02/11 11:00:56
- Log: update win32/pod.mak
- Branch: perl
- ! win32/pod.mak
-____________________________________________________________________________
-[ 2868] By: gsar on 1999/02/11 10:42:44
- Log: From: Benjamin Low <b.d.low@unsw.edu.au>
- Date: Fri, 08 Jan 1999 14:36:53 +1100
- Message-ID: <36957D55.1D65A0B2@unsw.edu.au>
- Subject: Re: [Fwd: IO::Socket::connect and blocking]
- Branch: perl
- ! ext/IO/lib/IO/Socket.pm
-____________________________________________________________________________
-[ 2867] By: gsar on 1999/02/11 09:43:03
- Log: av_extend() doc tweak from Jan Dubois
- Branch: perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 2866] By: gsar on 1999/02/11 09:27:17
- Log: display full pathname of unreadable files
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 2865] By: gsar on 1999/02/11 09:02:31
- Log: missing patch in change#2522
- Branch: perl
- ! lib/Pod/Text.pm
-____________________________________________________________________________
-[ 2864] By: jhi on 1999/02/11 08:45:00
- Log: From: Spider Boardman <spider@zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on RISC-ultrix 4.4 (UNINSTALLED)
- Date: Wed, 10 Feb 1999 23:33:31 -0500
- Message-Id: <9902110433.AA12816@abyss.zk3.dec.com>
- Branch: maint-5.005/perl
- ! doio.c ext/IPC/SysV/SysV.xs hints/ultrix_4.sh
-____________________________________________________________________________
-[ 2862] By: gsar on 1999/02/11 08:14:34
- Log: integrate changes#2738,2740 from maint-5.005
- Branch: perl
- !> lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2861] By: jhi on 1999/02/11 08:04:25
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes perl.h pod/perl5005delta.pod pp_ctl.c t/op/local.t
- !> t/op/range.t win32/config.gc
-____________________________________________________________________________
-[ 2860] By: gsar on 1999/02/11 07:30:08
- Log: binmode() support for cygwin32 (suggested by Steven Morlock
- <newspost@morlock.net>)
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 2859] By: gsar on 1999/02/11 07:14:21
- Log: update Changes
- Branch: perl
- ! Changes
- !> pod/perl5005delta.pod
-____________________________________________________________________________
-[ 2856] By: gsar on 1999/02/11 07:07:39
- Log: integrate perldelta changes from maint-5.005
- Branch: perl
- !> pod/perl5005delta.pod
-____________________________________________________________________________
-[ 2855] By: gsar on 1999/02/11 06:31:50
- Log: applied suggested patch; added tests
- From: Adam Krolnik <adamk@gypsy.cyrix.com>
- Date: Sat, 12 Dec 98 15:30:18 -0600
- Message-Id: <9812122130.AA03717@gypsy.eng.cyrix.com>
- Subject: Range operation doesn't handle IV_MAX
- Branch: perl
- ! pp_ctl.c t/op/range.t
-____________________________________________________________________________
-[ 2854] By: gsar on 1999/02/11 05:00:55
- Log: compatibility fix: magic non-propagation in foreach implicit localization
- Branch: perl
- ! pp_ctl.c t/op/local.t win32/config.gc
-____________________________________________________________________________
-[ 2852] By: gsar on 1999/02/10 23:17:49
- Log: fair warning about -Dusethreads
- Branch: maint-5.005/perl
- ! Configure INSTALL README.threads
-____________________________________________________________________________
-[ 2847] By: jhi on 1999/02/09 19:13:28
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> pod/perldelta.pod pod/perlfunc.pod pod/perlobj.pod
- !> pod/perlop.pod pp.c t/op/method.t t/op/pack.t
-____________________________________________________________________________
-[ 2846] By: gsar on 1999/02/09 13:53:28
- Log: a modified version of suggested patch for pack template 'Z'; added docs
- From: "Valeriy E. Ushakov" <uwe@ptc.spbu.ru>
- Date: Mon, 16 Jun 1997 03:00:31 +0400 (MSD)
- Message-ID: <%lOHpzIuGV@snark.ptc.spbu.ru>
- Subject: lack of pack/unpack letter with useful symmetry for C null delimited strings
- Branch: perl
- ! pod/perldelta.pod pod/perlfunc.pod pp.c t/op/pack.t
-____________________________________________________________________________
-[ 2845] By: gsar on 1999/02/09 00:03:26
- Log: clarify docs for change#2835
- Branch: perl
- ! pod/perldelta.pod pod/perlop.pod
-____________________________________________________________________________
-[ 2844] By: gsar on 1999/02/08 23:40:57
- Log: addendum to change#2823
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Sun, 13 Dec 1998 16:06:04 -0800 (PST)
- Message-ID: <13940.21805.470054.299@fre-76-120.reshall.berkeley.edu>
- Subject: [PATCH] Docs and tests for method-call syntax
- Branch: perl
- ! pod/perlobj.pod t/op/method.t
-____________________________________________________________________________
-[ 2843] By: jhi on 1999/02/08 21:06:28
- Log: Ultrix mmap tidbit.
- Branch: cfgperl
- ! hints/ultrix_4.sh
-____________________________________________________________________________
-[ 2842] By: jhi on 1999/02/08 20:22:55
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> t/op/subst_wamp.t
- !> (integrate 35 files)
-____________________________________________________________________________
-[ 2841] By: jhi on 1999/02/08 18:23:26
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_53] s/\ba/./g was over-optimized
- Date: Sun, 7 Feb 1999 17:25:22 -0500
- Message-ID: <19990207172522.B894@monk.mps.ohio-state.edu>
- Branch: cfgperl
- + t/op/subst_amp.t
- ! MANIFEST regcomp.c t/op/subst.t
-____________________________________________________________________________
-[ 2840] By: jhi on 1999/02/08 18:16:54
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_53] Fix list-context //g with zero-length matches
- Date: Sun, 7 Feb 1999 17:00:10 -0500
- Message-ID: <19990207170009.A894@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! pp_hot.c t/op/pat.t
-____________________________________________________________________________
-[ 2839] By: jhi on 1999/02/08 17:25:30
- Log: A require was missing.
- Branch: cfgperl
- ! t/lib/h2ph.pht
-____________________________________________________________________________
-[ 2838] By: jhi on 1999/02/08 16:38:41
- Log: Bring in the change #2809 (the Configure part has been
- modified rather a lot since the #2809, though.)
- Branch: cfgperl
- ! Configure utils/h2ph.PL
-____________________________________________________________________________
-[ 2835] By: gsar on 1999/02/08 14:40:23
- Log: make qw() into a true list at compile time (slightly modified
- variant of patch suggested by Tom Hughes <tom@compton.demon.co.uk>)
- Branch: perl
- ! pod/perldelta.pod pod/perlop.pod pp_hot.c toke.c
-____________________________________________________________________________
-[ 2834] By: gsar on 1999/02/08 13:23:16
- Log: make safesysmalloc() etc., always available; safemalloc() et al are
- now macros that point to the right malloc; fix various places in
- sources that need to always use safesysmalloc() et al
- Branch: perl
- ! embed.h embedvar.h global.sym iperlsys.h mg.c objXSUB.h perl.h
- ! perl_exp.SH proto.h util.c vms/gen_shrfls.pl win32/makedef.pl
-____________________________________________________________________________
-[ 2833] By: gsar on 1999/02/08 10:56:16
- Log: remove spurious #endif in last change
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 2832] By: gsar on 1999/02/08 10:34:55
- Log: make EMBEDMYMALLOC the default and provide PERL_POLLUTE_MALLOC to let
- them ask for insanity (untested)
- Branch: perl
- ! INSTALL Todo-5.005 ext/SDBM_File/sdbm/sdbm.h hints/machten.sh
- ! hints/next_3.sh hints/next_4.sh hints/qnx.sh iperlsys.h
- ! malloc.c perl.h pod/perldelta.pod pod/perlguts.pod sv.c
-____________________________________________________________________________
-[ 2831] By: jhi on 1999/02/08 08:33:33
- Log: Update vms/subconfigure.com along the lines of change #2829.
- Branch: cfgperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 2830] By: gsar on 1999/02/08 00:19:46
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> ext/DynaLoader/dl_beos.xs ext/GDBM_File/hints/sco.pl
- +> lib/File/PathConvert.pm pod/perlthrtut.pod
- ! Changes
- !> (integrate 93 files)
-____________________________________________________________________________
-[ 2829] By: jhi on 1999/02/07 23:49:46
- Log: Configure update.
-
- Probe for mmap() et alia.
- The *cc*symbols patch (just Configure, no h2ph).
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH perl.h
-____________________________________________________________________________
-[ 2828] By: gsar on 1999/02/07 23:38:47
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 7 Feb 1999 17:25:22 -0500
- Message-ID: <19990207172522.B894@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] s/\ba/./g was over-optimized
- Branch: perl
- + t/op/subst_amp.t t/op/subst_wamp.t
- ! MANIFEST regcomp.c t/op/subst.t
-____________________________________________________________________________
-[ 2827] By: gsar on 1999/02/07 23:27:32
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 7 Feb 1999 17:00:10 -0500
- Message-ID: <19990207170009.A894@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Fix list-context //g with zero-length matches
- Branch: perl
- ! pp_hot.c t/op/pat.t
-____________________________________________________________________________
-[ 2826] By: gsar on 1999/02/07 23:26:04
- Log: patch for change#2822, done right; add PERL_OBJECT stuff; regen headers
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 7 Feb 1999 15:07:27 -0500
- Message-ID: <19990207150726.A571@monk.mps.ohio-state.edu>
- Subject: Re: fixing memory leaks in REx compilation
- Branch: perl
- ! embed.h embed.pl objXSUB.h proto.h regcomp.c regcomp.h
- ! regexec.c
-____________________________________________________________________________
-[ 2825] By: jhi on 1999/02/07 18:05:13
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> lib/DB.pm t/comp/bproto.t
- !> MANIFEST ext/Data/Dumper/Dumper.pm ext/SDBM_File/sdbm/sdbm.c
- !> lib/Pod/Html.pm op.c perly.c perly.y perly_c.diff
- !> pod/perldelta.pod pod/perlfunc.pod pod/perlop.pod regcomp.h
- !> toke.c vms/perly_c.vms
-____________________________________________________________________________
-[ 2824] By: gsar on 1999/02/07 14:21:48
- Log: tweak doc on bitwise ops
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 2823] By: gsar on 1999/02/07 13:38:31
- Log: applied suggested patch; regen perly* and vms/perly*
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Sun, 13 Dec 1998 01:10:12 -0800 (PST)
- Message-ID: <13939.26706.620683.846776@fre-76-120.reshall.berkeley.edu>
- Subject: [PATCH] Re: Suggestion for perlobj man page
- Branch: perl
- ! perly.c perly.y perly_c.diff toke.c vms/perly_c.vms
-____________________________________________________________________________
-[ 2822] By: gsar on 1999/02/07 12:39:09
- Log: Ilya's idea for cleaning up failed regex allocs (substantive parts
- disabled, fails tests)
- Branch: perl
- ! regcomp.h
-____________________________________________________________________________
-[ 2821] By: gsar on 1999/02/07 11:09:39
- Log: pod2html misinterprets Foo::Bar as a URL (fix suggested by Alexander Barilo
- <Alexander.Barilo@aexp.com>)
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 2820] By: gsar on 1999/02/07 10:20:35
- Log: add draft debugging API implementation
- Branch: perl
- + lib/DB.pm
- ! MANIFEST
-____________________________________________________________________________
-[ 2819] By: gsar on 1999/02/07 09:58:45
- Log: avoid garbage in db->dirbuf
- From: Masahiro KAJIURA <masahiro.kajiura@toshiba.co.jp>
- Date: Sat, 05 Dec 1998 14:14:54 +0900
- Message-Id: <199812050514.OAA23268@toshiba.co.jp>
- Subject: SDBM bug
- Branch: perl
- ! ext/SDBM_File/sdbm/sdbm.c
-____________________________________________________________________________
-[ 2818] By: gsar on 1999/02/07 09:32:24
- Log: missing entry
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 2817] By: gsar on 1999/02/07 09:30:47
- Log: properly prototype check parenthesized unary ops (e.g. defined(&a,&b))
- Branch: perl
- + t/comp/bproto.t
- ! op.c pod/perldelta.pod pod/perlfunc.pod pod/perlop.pod
-____________________________________________________________________________
-[ 2816] By: gsar on 1999/02/06 00:14:29
- Log: minor bug in dumping blessed subrefs
- Branch: perl
- ! ext/Data/Dumper/Dumper.pm
-____________________________________________________________________________
-[ 2812] By: jhi on 1999/02/03 22:02:24
- Log: Enhance change #2808.
-
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- To: perl5-porters@perl.org
- Subject: Re: [PATCH 5.00*]: perlbug checklist
- Date: Wed, 3 Feb 1999 19:02:27 +0000
- Message-Id: <E1087ZD-0005z1-00@taurus.cus.cam.ac.uk>
- Branch: cfgperl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 2811] By: jhi on 1999/02/03 21:53:23
- Log: From: Barrie Slaymaker <rbs@telerama.com>
- To: perl5-porters@perl.org
- CC: pod-people@perl.org
- Subject: [PATCH]5.005_54 (pod2html) Generate Relative URLs
- Date: Wed, 03 Feb 1999 10:34:18 -0500
- Message-ID: <36B86C7A.E99EFFF1@telerama.com>
-
- Add File::PathConvert.pm.
- Fix Pod::Html and installhtml to understand relative urls.
- Branch: cfgperl
- + lib/File/PathConvert.pm
- ! MANIFEST installhtml lib/Pod/Html.pm
-____________________________________________________________________________
-[ 2810] By: jhi on 1999/02/03 20:25:10
- Log: From: Francois Desarmenien <desar@club-internet.fr>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH]5.005_54 (hints) SCO 3/5 hint files and SysV correction
- Date: Wed, 03 Feb 1999 13:13:24 +0000
- Message-ID: <36B84B74.5EC9B6C8@club-internet.fr>
-
- (note: this patch completely overrides Tom Wolfe's patch,
- change #2604)
- Branch: cfgperl
- + ext/GDBM_File/hints/sco.pl
- ! MANIFEST ext/IPC/SysV/SysV.xs hints/sco.sh
-____________________________________________________________________________
-[ 2809] By: jhi on 1999/02/03 19:54:16
- Log: h2ph fixes + Configure patch to support them.
-
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: Graham Barr <gbarr@pobox.com>, Jarkko Hietaniemi <jhi@iki.fi>,
- Gurusamy Sarathy <gsar@engin.umich.edu>
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.00503_MT5] h2ph.PL
- Date: Tue, 2 Feb 1999 19:48:06 -0500
- Message-ID: <19990202194806.E10647@O2.chapin.edu>
- Branch: maint-5.005/perl
- ! Configure utils/h2ph.PL
-____________________________________________________________________________
-[ 2808] By: jhi on 1999/02/03 16:59:55
- Log: Enhance the perlbug checklist.
- Branch: cfgperl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 2807] By: jhi on 1999/02/03 14:01:37
- Log: Document the standard strftime %formats.
-
- From: Dominic Dunlop <domo@vo.lu>
- To: "Kurt D. Starsinic" <kstar@chapin.edu>, Ben Gertzfield <che@debian.org>
- Subject: [PATCH] 5.00[45]*: Re: POSIX's strftime() does not enforce POSIX %C on Solaris
- Date: Tue, 2 Feb 1999 15:55:29 +0100
- Message-Id: <v0311070cb2dcb3f5f773@[212.24.192.188]>
- Branch: cfgperl
- ! ext/POSIX/POSIX.pod
-____________________________________________________________________________
-[ 2806] By: jhi on 1999/02/03 13:58:00
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> perl.h
-____________________________________________________________________________
-[ 2805] By: gsar on 1999/02/03 03:32:31
- Log: PL_uuemap[] init needs help for sizeof()
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 2804] By: jhi on 1999/02/02 20:44:30
- Log: These should've been already in #2803.
- Branch: cfgperl
- ! Configure config_h.SH vms/subconfigure.com
-____________________________________________________________________________
-[ 2803] By: jhi on 1999/02/02 20:38:45
- Log: telldir prototype issue, from mists of time...
- Branch: cfgperl
- ! hints/netbsd.sh pp_sys.c
-____________________________________________________________________________
-[ 2801] By: jhi on 1999/02/02 17:40:14
- Log: From: John Bley <jbb6@acpub.duke.edu>
- To: perlbug@perl.org
- Subject: [PATCH]5.005_54 (DOC) fix minor typos
- Date: Tue, 2 Feb 1999 07:52:52 -0500 (EST)
- Message-ID: <Pine.SOL.3.91.990202075115.23589A-100000@soc11.acpub.duke.edu>
- Branch: cfgperl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 2800] By: jhi on 1999/02/02 17:26:49
- Log: Update todo with POSIX 1003.1 1996 Edition reminder.
- Branch: cfgperl
- ! Todo-5.005
-____________________________________________________________________________
-[ 2799] By: jhi on 1999/02/02 17:18:51
- Log: Update FindBin from maint-5.005.
- Branch: cfgperl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 2798] By: jhi on 1999/02/02 17:16:07
- Log: Fix typecasts in #2797
-
- From: "G. Del Merritt" <del@intranetics.com>
- Date: Fri, 29 Jan 1999 11:47:25 -0700
- Message-Id: <199901291847.LAA04828@jhereg.perl.com>
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on MSWin32-x86-object 4.0 (PATCH included)
- Branch: cfgperl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2797] By: jhi on 1999/02/02 17:14:37
- Log: From: Ted Law <tedlaw@cibcwg.com>
- Date: Wed, 27 Jan 1999 14:54:03 -0500 (EST)
- Message-Id: <199901271954.OAA07391@dcm2.cibcwg.com>
- Subject: POSIX::strftime buffer overflow problem
- Branch: cfgperl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2796] By: jhi on 1999/02/02 17:13:23
- Log: Do not use File::Slurp.
- Branch: cfgperl
- ! t/lib/textfill.t
-____________________________________________________________________________
-[ 2795] By: jhi on 1999/02/02 17:11:48
- Log: perlhist update from maint-5.005.
- Branch: cfgperl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 2794] By: jhi on 1999/02/02 17:10:33
- Log: POSIX::redef setv?buf() to IO::Handle:: (by gbarr).
- Branch: cfgperl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 2793] By: jhi on 1999/02/02 17:08:39
- Log: Missed the html test from change #2787.
- Branch: cfgperl
- ! t/lib/cgi-html.t
-____________________________________________________________________________
-[ 2792] By: jhi on 1999/02/02 17:01:24
- Log: Update Getopt::Long to 2.19.
- Branch: cfgperl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 2791] By: jhi on 1999/02/02 16:59:13
- Log: overload syntax is no longer experimental
- Branch: cfgperl
- ! lib/overload.pm
-____________________________________________________________________________
-[ 2789] By: jhi on 1999/02/02 16:47:50
- Log: Still doc fixes.
- Branch: cfgperl
- ! lib/diagnostics.pm
-____________________________________________________________________________
-[ 2788] By: jhi on 1999/02/02 16:47:07
- Log: Doc fixes.
- Branch: cfgperl
- ! lib/CGI.pm lib/diagnostics.pm
-____________________________________________________________________________
-[ 2787] By: jhi on 1999/02/02 16:38:55
- Log: CGI.pm updated to 2.46 (the CGI docs fixes redone
- where applicable).
- Branch: cfgperl
- ! eg/cgi/RunMeFirst eg/cgi/caution.xbm
- ! eg/cgi/clickable_image.cgi eg/cgi/cookie.cgi eg/cgi/crash.cgi
- ! eg/cgi/customize.cgi eg/cgi/diff_upload.cgi
- ! eg/cgi/dna.small.gif.uu eg/cgi/file_upload.cgi
- ! eg/cgi/frameset.cgi eg/cgi/index.html
- ! eg/cgi/internal_links.cgi eg/cgi/javascript.cgi
- ! eg/cgi/monty.cgi eg/cgi/multiple_forms.cgi
- ! eg/cgi/nph-clock.cgi eg/cgi/nph-multipart.cgi eg/cgi/popup.cgi
- ! eg/cgi/save_state.cgi eg/cgi/tryit.cgi eg/cgi/wilogo.gif.uu
- ! lib/CGI.pm lib/CGI/Apache.pm lib/CGI/Carp.pm lib/CGI/Cookie.pm
- ! lib/CGI/Fast.pm lib/CGI/Push.pm lib/CGI/Switch.pm
-____________________________________________________________________________
-[ 2786] By: jhi on 1999/02/02 16:17:52
- Log: Update CPAN to 1.47.
- Branch: cfgperl
- ! lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
-____________________________________________________________________________
-[ 2785] By: jhi on 1999/02/02 16:09:03
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- Date: Sat, 16 Jan 1999 17:22:06 -0500
- Subject: Re: DOC PATCH (5.005_54 perlsub.pod)
- Message-ID: <19990116222206.3674.qmail@plover.com>
- Branch: cfgperl
- ! pod/perlsub.pod
-____________________________________________________________________________
-[ 2784] By: jhi on 1999/02/02 16:01:31
- Log: Fix incorrect "used only once" warnings
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 8 Jan 1999 04:37:10 -0500
- Message-ID: <19990108043710.A14390@monk.mps.ohio-state.edu>
- Subject: Re: change#965 flakiness
- Branch: cfgperl
- ! gv.c
-____________________________________________________________________________
-[ 2783] By: jhi on 1999/02/02 15:50:38
- Log: perldelta updates.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2782] By: jhi on 1999/02/02 14:28:26
- Log: Mirror change #2781.
- Branch: cfgperl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 2781] By: jhi on 1999/02/02 14:27:01
- Log: Update the MkLinux note.
- Branch: maint-5.005/perl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 2780] By: jhi on 1999/02/02 14:10:59
- Log: Update todo.
- Branch: cfgperl
- ! Todo-5.005
-____________________________________________________________________________
-[ 2779] By: jhi on 1999/02/02 14:00:25
- Log: Integrate from mainperl.
- Branch: cfgperl
- ! t/lib/textfill.t t/lib/textwrap.t
- !> (integrate 32 files)
-____________________________________________________________________________
-[ 2778] By: jhi on 1999/02/02 13:56:23
- Log: VMS update, applicable parts of
-
- From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_03MT3]VMS configure tweak
- Date: Wed, 20 Jan 1999 12:05:18 -0800
- Message-Id: <3.0.6.32.19990120120518.00a98470@ous.edu>
-
- From: Dan Sugalski <sugalskd@osshe.edu>
- To: perlbug@perl.com, vmsperl@perl.org
- Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on VMSAXP (Patch included, of course)
- Date: Tue, 26 Jan 1999 14:40:38 -0800
- Message-Id: <3.0.6.32.19990126144038.02e5d650@ous.edu>
-
- From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.005_03-MAILT_TRIAL_4]VMS test patches
- Date: Tue, 26 Jan 1999 14:55:29 -0800
- Message-Id: <3.0.6.32.19990126145529.02f22280@ous.edu>
- Branch: cfgperl
- ! vms/ext/Stdio/test.pl vms/subconfigure.com
-____________________________________________________________________________
-[ 2777] By: jhi on 1999/02/02 13:43:24
- Log: Synch usethreads parts from maint-5.005.
- Branch: cfgperl
- ! hints/aix.sh hints/dec_osf.sh hints/dos_djgpp.sh
- ! hints/freebsd.sh hints/hpux.sh hints/irix_4.sh hints/irix_5.sh
- ! hints/irix_6.sh hints/irix_6_0.sh hints/irix_6_1.sh
- ! hints/linux.sh hints/os2.sh hints/solaris_2.sh hints/vmesa.sh
-____________________________________________________________________________
-[ 2776] By: jhi on 1999/02/02 13:17:16
- Log: Jumbo FreeBSD update from Anton Berezin <tobez@plab.ku.dk>
- Branch: cfgperl
- ! Makefile.SH hints/freebsd.sh
-____________________________________________________________________________
-[ 2774] By: jhi on 1999/02/02 13:10:39
- Log: Add perlthrtut, update pod/* machinery.
- (a pod/Makefile.SH is sorely needed)
- Branch: cfgperl
- + pod/perlthrtut.pod
- ! MANIFEST pod/Makefile pod/perl.pod pod/roffitall
-____________________________________________________________________________
-[ 2773] By: jhi on 1999/02/02 12:54:24
- Log: From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- To: perl5-porters@perl.org
- Subject: Re: [PATCH] perl5.005_03-MAINT_TRIAL_3: clarify Sv[INU]V versus Sv[INU]VX in perlguts
- Date: Tue, 26 Jan 1999 22:25:07 +0000
- Message-Id: <E105Gux-0000Ac-00@taurus.cus.cam.ac.uk>
- Branch: cfgperl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 2771] By: jhi on 1999/02/02 12:47:34
- Log: Use perlbug instead of personal email address.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2770] By: jhi on 1999/02/02 12:42:06
- Log: Miniperl fails to build (pp_sys.c was changed and iperlsys.h wasn't)
-
- From: "G. Del Merritt" <del@intranetics.com>
- To: perlbug@perl.com
- Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on MSWin32-x86-object (PATCHES included)
- Date: Tue, 26 Jan 1999 12:09:09 -0700
- Message-Id: <199901261909.MAA25525@jhereg.perl.com>
- Branch: cfgperl
- ! iperlsys.h
-____________________________________________________________________________
-[ 2769] By: jhi on 1999/02/02 12:37:57
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_*] OS/2 threads
- Date: Tue, 26 Jan 1999 13:39:46 -0500
- Message-ID: <19990126133946.A11594@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! os2/os2ish.h
-____________________________________________________________________________
-[ 2768] By: jhi on 1999/02/02 12:36:16
- Log: Apply change #2711 from maint-5.005:
-
- make ok", "make okfile", and "make nok" were broken
- with -Duseshrplib, because of a shared typo.
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED)
- Date: Wed, 27 Jan 1999 12:27:15 -0500
- Message-Id: <199901271727.MAA233455@web.zk3.dec.com>
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2766] By: jhi on 1999/02/02 12:27:08
- Log: Make Configure use "int main()" instead of bare "main()".
- Like maint-5.005 change #2703 but now via metaconfig.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2765] By: jhi on 1999/02/02 11:59:30
- Log: Undo part of change #2562.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2764] By: jhi on 1999/02/02 11:52:39
- Log: NetBSD synch with maint-5.005.
- Branch: cfgperl
- ! Makefile.SH hints/netbsd.sh makedepend.SH unixish.h
-____________________________________________________________________________
-[ 2763] By: jhi on 1999/02/02 11:44:07
- Log: $Config{installusrbinperl}
- (maint-5.005 changes #2614 and #2709)
- Branch: cfgperl
- ! Configure installperl
-____________________________________________________________________________
-[ 2762] By: jhi on 1999/02/02 11:29:13
- Log: Errno update from maint-5.005 (changes #2583, #2710).
- Branch: cfgperl
- ! Configure ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 2759] By: jhi on 1999/02/02 10:53:20
- Log: Update Trig.pm from maint-5.005.
- Branch: cfgperl
- ! lib/Math/Trig.pm
-____________________________________________________________________________
-[ 2757] By: jhi on 1999/02/02 10:41:26
- Log: MPE/iX update (mirror maint-5.005 change #2715)
- Branch: cfgperl
- ! hints/mpeix.sh mpeix/relink
-____________________________________________________________________________
-[ 2756] By: jhi on 1999/02/02 10:38:08
- Log: BeOS update (Mirror maint-5.005 change #2727).
- Branch: cfgperl
- + ext/DynaLoader/dl_beos.xs
- ! Configure MANIFEST Makefile.SH README.beos hints/beos.sh
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 2754] By: gsar on 1999/02/02 08:52:13
- Log: Todo updates from Andy Dougherty <doughera@lafayette.edu>
- Branch: perl
- ! Porting/pumpkin.pod Todo Todo-5.005
-____________________________________________________________________________
-[ 2753] By: gsar on 1999/02/02 08:46:21
- Log: Todo tweaks
- Branch: perl
- ! Todo Todo-5.005
-____________________________________________________________________________
-[ 2752] By: jhi on 1999/02/01 22:15:12
- Log: Add perlthrtut.pod.
-
- From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org
- Subject: perlthrtut.pod
- Date: Mon, 01 Feb 1999 10:57:11 -0800
- Message-Id: <3.0.6.32.19990201105711.02e62540@ous.edu>
- Branch: maint-5.005/perl
- + pod/perlthrtut.pod
- ! MANIFEST pod/Makefile pod/buildtoc pod/perldelta.pod
- ! pod/roffitall
-____________________________________________________________________________
-[ 2751] By: gsar on 1999/02/01 07:28:05
- Log: devnull() support from Jan Dubois <jan.dubois@ibm.net> and others
- Branch: perl
- ! lib/File/Spec/OS2.pm lib/File/Spec/Unix.pm
- ! lib/File/Spec/VMS.pm lib/File/Spec/Win32.pm
-____________________________________________________________________________
-[ 2750] By: gsar on 1999/02/01 07:09:20
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 4 Dec 1998 01:02:03 -0500 (EST)
- Message-Id: <199812040602.BAA07215@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Debugging REx with lookbehind
- Branch: perl
- ! regexec.c
-____________________________________________________________________________
-[ 2749] By: gsar on 1999/02/01 07:07:59
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 4 Dec 1998 00:05:41 -0500 (EST)
- Message-Id: <199812040505.AAA16616@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Speed up .*? and half-fix UTF lookbehind
- Branch: perl
- ! regexec.c
-____________________________________________________________________________
-[ 2748] By: gsar on 1999/02/01 06:47:06
- Log: From: "Jonathan I. Kamens" <jik@kamens.brookline.ma.us>
- Date: Thu, 3 Dec 1998 15:10:17 -0500
- Message-Id: <199812032010.PAA09692@jik.shore.net>
- Subject: sample checksum code in "perlfunc" man page is wrong
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2747] By: gsar on 1999/02/01 06:35:13
- Log: typos in Pod/Text.pm
- From: "Greg Chapman" <glc@well.com>
- Date: Tue, 1 Dec 1998 10:50:18 -0800
- Message-Id: <199812011849.KAA08816@smtp.well.com>
- Subject: Glitch in Pod::Text
- Branch: perl
- ! lib/Pod/Text.pm
-____________________________________________________________________________
-[ 2746] By: gsar on 1999/02/01 06:27:35
- Log: various win32-ish changes merged from maint-5.005
- Branch: perl
- ! README.win32 embedvar.h globvar.sym lib/ExtUtils/MM_Unix.pm
- ! objXSUB.h op.c perl.h perlvars.h pp.c sv.c t/io/fs.t toke.c
- ! win32/Makefile win32/config.bc win32/config.vc
- ! win32/config_sh.PL win32/makefile.mk win32/runperl.c
- ! win32/win32.c
-____________________________________________________________________________
-[ 2745] By: gsar on 1999/02/01 04:51:54
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> INSTALL hints/aix.sh lib/Time/Local.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 2744] By: gsar on 1999/02/01 04:31:09
- Log: improved diagnostic on syntax errors at EOL
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 2743] By: gsar on 1999/02/01 03:59:13
- Log: don't attempt connect() to bogus IP addresses
- From: Graham Barr <gbarr@pobox.com>
- Date: Sun, 31 Jan 1999 21:50:45 CST
- Message-Id: <19990131215045.A633@pobox.com>
- Branch: perl
- ! t/lib/io_multihomed.t
-____________________________________________________________________________
-[ 2742] By: gsar on 1999/02/01 03:08:58
- Log: update Changes
- Branch: perl
- ! Changes pod/perldelta.pod
-____________________________________________________________________________
-[ 2740] By: gsar on 1999/02/01 02:43:07
- Log: CAPI inheritance tweak and doc
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2739] By: jhi on 1999/01/31 18:31:54
- Log: Undo changes #2730 and #2731 and replace them
- with an extensively tested patch from
- Anton Berezin <tobez@plab.ku.dk> (via private email).
- Branch: maint-5.005/perl
- ! Makefile.SH hints/freebsd.sh
-____________________________________________________________________________
-[ 2738] By: gsar on 1999/01/31 05:04:32
- Log: fix bogus CAPI inheritance from change#2541
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2731] By: jhi on 1999/01/29 14:33:12
- Log: FreeBSD version numbers can be like "2.2.8-release".
- Branch: maint-5.005/perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2730] By: jhi on 1999/01/29 12:40:38
- Log: FreeBSD hints iteration (hopefully convergent).
- usethreads: require at least FreeBSD 2.2.8.
- signal type: mirror change #2429 in cfgperl.
- Branch: maint-5.005/perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2727] By: gbarr on 1999/01/29 04:09:57
- Log: From: Tom Spindler <dogcow@isi.net>
- Date: Thu, 28 Jan 1999 17:15:11 -0800
- Message-ID: <19990128171510.A11778@isi.net>
- Subject: [PATCH] BeOS dynamic loading support for perl5.005_03_MT4
- Branch: maint-5.005/perl
- + ext/DynaLoader/dl_beos.xs
- ! Configure MANIFEST Makefile.SH README.beos hints/beos.sh
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 2726] By: gbarr on 1999/01/29 03:30:51
- Log: Remove use of File::Slurp in t/lib/textfill.t
- Branch: maint-5.005/perl
- ! t/lib/textfill.t
-____________________________________________________________________________
-[ 2725] By: gbarr on 1999/01/29 03:11:41
- Log: From: Gurusamy Sarathy <gsar@ActiveState.com>
- Date: Wed, 27 Jan 1999 23:14:33 -0800
- Message-Id: <199901280714.XAA10176@activestate.com>
- Subject: Re: NOT OK: "@INC contains: ." after make install - MAINT_TRIAL_4 - 5.005_03 maintenance trial 4 MSWin32-x86-object
- Branch: maint-5.005/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2720] By: gsar on 1999/01/27 21:54:42
- Log: missing space while munging CCFLAGS for PERL_CAPI
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 2718] By: jhi on 1999/01/27 19:46:04
- Log: io/fs.t fails test #18 (sense of tests appears to have been
- changed incompletely; this patch just skips the test attached,
- a la test #17 preceding it).
-
- From: "G. Del Merritt" <del@intranetics.com>
- To: perlbug@perl.com
- Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on MSWin32-x86-object (PATCHES included)
- Date: Tue, 26 Jan 1999 12:09:09 -0700
- Message-Id: <199901261909.MAA25525@jhereg.perl.com>
- Branch: maint-5.005/perl
- ! t/io/fs.t
-____________________________________________________________________________
-[ 2717] By: jhi on 1999/01/27 19:44:46
- Log: Miniperl fails to build (pp_sys.c was changed and iperlsys.h wasn't)
-
- From: "G. Del Merritt" <del@intranetics.com>
- To: perlbug@perl.com
- Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on MSWin32-x86-object (PATCHES included)
- Date: Tue, 26 Jan 1999 12:09:09 -0700
- Message-Id: <199901261909.MAA25525@jhereg.perl.com>
- Branch: maint-5.005/perl
- ! iperlsys.h
-____________________________________________________________________________
-[ 2715] By: jhi on 1999/01/27 19:34:28
- Log: From: Mark Bixby <markb@spock.dis.cccd.edu>
- To: perl5-porters@perl.org
- Subject: [PATCH perl5.005_03-MAINT_TRIAL_4] MPE port tweaks
- Date: Tue, 26 Jan 1999 16:32:18 -0800 (PST)
- Message-Id: <199901270032.QAA13395@spock.dis.cccd.edu>
- Branch: maint-5.005/perl
- ! hints/mpeix.sh mpeix/relink
-____________________________________________________________________________
-[ 2710] By: jhi on 1999/01/27 19:22:23
- Log: Errno fixes:
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED)
- Date: Wed, 27 Jan 1999 12:27:15 -0500
- Message-Id: <199901271727.MAA233455@web.zk3.dec.com>
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED)
- Date: Wed, 27 Jan 1999 13:31:16 -0500
- Message-Id: <199901271831.NAA241001@web.zk3.dec.com>
- Branch: maint-5.005/perl
- ! Configure ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 2709] By: jhi on 1999/01/27 19:17:35
- Log: Fix Configure installusrbinperl:
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- To: jhi@iki.fi
- cc: perl5-porters@perl.org
- Subject: Re: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED)
- Date: Wed, 27 Jan 1999 13:03:35 -0500
- Message-Id: <199901271803.NAA238257@web.zk3.dec.com>
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2707] By: gbarr on 1999/01/26 02:06:17
- Log: Add redef IO::Handle::* for setv?buf()
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 2705] By: jhi on 1999/01/24 15:14:30
- Log: Mention year-1900 and month 0..11.
- Branch: cfgperl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 2704] By: jhi on 1999/01/24 15:13:36
- Log: Document Configure -Uinstallusrbinperl.
- Branch: cfgperl
- ! INSTALL pod/perldelta.pod
-____________________________________________________________________________
-[ 2698] By: jhi on 1999/01/24 12:46:00
- Log: Use only xlc_r for usethreads.
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 2695] By: gsar on 1999/01/24 07:09:05
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> lib/Exporter/Heavy.pm
- !> (integrate 65 files)
-____________________________________________________________________________
-[ 2694] By: gsar on 1999/01/24 01:28:49
- Log: better notes on 'make' on win32
- Branch: perl
- ! README.win32
-____________________________________________________________________________
-[ 2683] By: jhi on 1999/01/22 15:41:00
- Log: More de-cut-and-pastos.
- Branch: cfgperl
- ! hints/irix_6.sh hints/os2.sh
-____________________________________________________________________________
-[ 2682] By: jhi on 1999/01/22 15:30:51
- Log: usethreads.cbu cut-and-pasto.
- Branch: cfgperl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 2681] By: jhi on 1999/01/22 14:54:55
- Log: Better (I hope) LANGUAGE documentation.
- Branch: cfgperl
- ! pod/perllocale.pod
-____________________________________________________________________________
-[ 2680] By: jhi on 1999/01/22 09:20:29
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_03MT3]VMS configure tweak
- Date: Wed, 20 Jan 1999 12:05:18 -0800
- Message-Id: <3.0.6.32.19990120120518.00a98470@ous.edu>
- Branch: cfgperl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 2679] By: jhi on 1999/01/22 09:13:18
- Log: nosuid getmntent() branch.
- Branch: cfgperl
- ! perl.c perl.h
-____________________________________________________________________________
-[ 2678] By: jhi on 1999/01/22 08:54:19
- Log: nosuid patch continued: *BSD needs <sys/param.h>.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 2676] By: gbarr on 1999/01/22 01:54:02
- Log: Fixup FindBin to use File::Spec
-
- Message-Id: <19990120185157.D24479@west-tip.transeda.com>
- Date: Wed, 20 Jan 1999 18:51:57 +0000
- From: Paul Johnson <pjcj@transeda.com>
- Subject: Re: [PATCH] 5005_54 Make FindBin work with UNC paths
- Branch: maint-5.005/perl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 2671] By: gbarr on 1999/01/22 00:40:13
- Log: Fix win32 for Borland compiler and spaces in paths
-
- From: Gurusamy Sarathy <gsar@activestate.com>
- Date: Mon, 18 Jan 1999 20:33:17 -0800
- Message-Id: <199901190433.UAA03656@activestate.com>
- Subject: [PATCH] 5.005_03-trial3 win32 issues
- Branch: maint-5.005/perl
- ! README.win32 win32/Makefile win32/config_sh.PL
- ! win32/makefile.mk win32/runperl.c
-____________________________________________________________________________
-[ 2670] By: jhi on 1999/01/21 16:12:38
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- To: perl5-porters@perl.org
- Subject: Re: [PATCH 5.005_54] Evalled substitution parsing
- Date: Thu, 21 Jan 1999 12:08:01 +0000
- Message-Id: <199901211208.MAA01228@crypt.compulink.co.uk>
- Branch: cfgperl
- ! pod/perldiag.pod t/op/subst.t toke.c
-____________________________________________________________________________
-[ 2669] By: jhi on 1999/01/21 16:11:46
- Log: To: perl5-porters@perl.org
- Subject: [PATCH 5.005_54] hints/freebsd.sh - reflect the birth of version 4.0
- From: Anton Berezin <tobez@plab.ku.dk>
- Date: 21 Jan 1999 17:07:28 +0100
- Message-ID: <86emood2yn.fsf@lion.plab.ku.dk>
- Branch: cfgperl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2668] By: jhi on 1999/01/21 15:38:34
- Log: Add Daniel Grisinger <dgris@dimensional.com>.
- Branch: cfgperl
- ! AUTHORS MAINTAIN
-____________________________________________________________________________
-[ 2667] By: jhi on 1999/01/21 15:32:28
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_53] Lean Exporter.pm
- Date: Thu, 21 Jan 1999 03:25:23 -0500
- Message-ID: <19990121032523.A25704@monk.mps.ohio-state.edu>
- Branch: cfgperl
- + lib/Exporter/Heavy.pm
- ! MANIFEST lib/Exporter.pm
-____________________________________________________________________________
-[ 2666] By: jhi on 1999/01/21 15:24:10
- Log: From: "W. Phillip Moore" <wpm@ms.com>
- To: Graham Barr <gbarr@ti.com>, perlbug@perl.org
- Subject: Re: [PATCH] File::Path 1.04 bug (all perl5 core versions)
- Date: Tue, 19 Jan 1999 11:39:11 -0500 (EST)
- Message-ID: <13988.46383.298992.97303@zappa>
- Branch: cfgperl
- ! lib/File/Path.pm
-____________________________________________________________________________
-[ 2665] By: jhi on 1999/01/21 15:20:48
- Log: CPAN update (CPAN-1.44_54) from Andreas and
- jumbo doc patch from Abigail.
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL 3 lib/AutoLoader.pm] Typos
- Date: Tue, 19 Jan 1999 19:14:10 -0500 (EST)
- Message-ID: <19990120001410.19645.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/CGI.pm] Typos
- Date: Tue, 19 Jan 1999 19:32:42 -0500 (EST)
- Message-ID: <19990120003242.19938.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/CPAN.pm] Typos
- Date: Tue, 19 Jan 1999 19:40:41 -0500 (EST)
- Message-ID: <19990120004041.20052.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/Carp.pm] Typo
- Date: Tue, 19 Jan 1999 19:43:12 -0500 (EST)
- Message-ID: <19990120004312.20152.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/Cwd.pm] Typo
- Date: Tue, 19 Jan 1999 19:44:29 -0500 (EST)
- Message-ID: <19990120004429.20190.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/Safe.pm] Typo
- Date: Tue, 19 Jan 1999 19:52:41 -0500 (EST)
- Message-ID: <19990120005241.20693.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/SelfLoader.pm] Typos
- Date: Tue, 19 Jan 1999 19:55:25 -0500 (EST)
- Message-ID: <19990120005525.20788.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/Symbol.pm] Typo
- Date: Tue, 19 Jan 1999 19:58:21 -0500 (EST)
- Message-ID: <19990120005821.20926.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/Test.pm] Typo
- Date: Tue, 19 Jan 1999 20:00:02 -0500 (EST)
- Message-ID: <19990120010002.20973.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/ops.pm] Typo
- Date: Tue, 19 Jan 1999 20:39:09 -0500 (EST)
- Message-ID: <19990120013909.23085.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/diagnostics.pm] Typos (ignore previous patch for this file...)
- Date: Tue, 19 Jan 1999 20:38:23 -0500 (EST)
- Message-ID: <19990120013823.23015.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/overload.pm] Typos
- Date: Tue, 19 Jan 1999 20:58:16 -0500 (EST)
- Message-ID: <19990120015817.24306.qmail@alexandra.wayne.fnx.com>
-
- From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_03 TRIAL3 lib/re.pm] Typos
- Date: Tue, 19 Jan 1999 21:03:26 -0500 (EST)
- Message-ID: <19990120020326.24373.qmail@alexandra.wayne.fnx.com>
- Branch: cfgperl
- ! ext/Opcode/Safe.pm ext/Opcode/ops.pm lib/AutoLoader.pm
- ! lib/CGI.pm lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
- ! lib/Carp.pm lib/Cwd.pm lib/SelfLoader.pm lib/Symbol.pm
- ! lib/Test.pm lib/diagnostics.pm lib/fields.pm lib/overload.pm
-____________________________________________________________________________
-[ 2664] By: jhi on 1999/01/21 14:47:43
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_*] OS2::PrfDB was exploiting a bug in U32 XSUBs
- Date: Thu, 21 Jan 1999 03:58:29 -0500
- Message-ID: <19990121035829.A25822@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! os2/Changes os2/OS2/PrfDB/PrfDB.xs
-____________________________________________________________________________
-[ 2663] By: jhi on 1999/01/21 14:43:58
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_*] Errno.pm suffers from \\ too
- Date: Thu, 21 Jan 1999 02:46:34 -0500
- Message-ID: <19990121024634.A25600@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 2662] By: jhi on 1999/01/21 14:42:42
- Log: From: Daniel Grisinger <dgris@moiraine.dimensional.com>
- To: Francois Desarmenien <desar@club-internet.fr>
- Cc: Gurusamy Sarathy <gsar@activestate.com>,
- Mailing list Perl5 <perl5-porters@perl.org>, bugmongers@perl.org
- Subject: [PATCH] patching.pod, misc fixes (was Re: Which ? What ? Why ? When ?)
- Date: 21 Jan 1999 00:17:35 -0700
- Message-ID: <m31zkpqels.fsf_-_@moiraine.dimensional.com>
- Branch: cfgperl
- ! Porting/patching.pod
-____________________________________________________________________________
-[ 2661] By: jhi on 1999/01/21 14:41:13
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.00*] makedepend
- Date: Thu, 21 Jan 1999 02:08:27 -0500
- Message-ID: <19990121020827.A25509@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! makedepend.SH
-____________________________________________________________________________
-[ 2660] By: jhi on 1999/01/21 14:36:45
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_53] Pipes and 2>&1 on OS/2
- Date: Tue, 19 Jan 1999 20:06:45 -0500
- Message-ID: <19990119200645.A21154@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! os2/Changes os2/os2.c
-____________________________________________________________________________
-[ 2657] By: jhi on 1999/01/21 11:40:35
- Log: From: "Vishal Bhatia" <vishalb@hotmail.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_54]pp_mapstart & pp_grepstart return val (CC.pm)
- Date: Mon, 18 Jan 1999 01:32:31 PST
- Message-ID: <19990118093231.18443.qmail@hotmail.com>
- Branch: cfgperl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2656] By: jhi on 1999/01/21 11:35:34
- Log: From: Achim Bohnet <ach@mpe.mpg.de>
- Subject: [PATCH] Not OK: perl 5.00503 +MAINT_TRIAL_3 on alpha-dec_osf 4.0 (UNINSTALLED)
- Date: Wed, 20 Jan 1999 20:25:53 +0100
- Message-Id: <199901201925.UAA16940@o06.xray.mpe.mpg.de>
- Branch: cfgperl
- ! pp.c
-____________________________________________________________________________
-[ 2655] By: jhi on 1999/01/21 10:46:01
- Log: Handle NIS (and NetInfo) more robustly.
- Branch: cfgperl
- ! t/op/grent.t t/op/pwent.t
-____________________________________________________________________________
-[ 2654] By: jhi on 1999/01/21 10:17:20
- Log: Two-argument eaccess() of SCO.
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 2653] By: jhi on 1999/01/21 08:53:14
- Log: -DNO_NOSUID_CHECK for those platforms which have no way
- of checking for nosuid but still want suidperl.
- Branch: cfgperl
- ! perl.c
-____________________________________________________________________________
-[ 2652] By: jhi on 1999/01/21 08:22:50
- Log: The LANGUAGE mirrors LC_ALL usage.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 2651] By: jhi on 1999/01/20 22:01:21
- Log: I_MNTENT was missing.
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 2650] By: jhi on 1999/01/19 13:42:03
- Log: NetBSD update, based on patches from the NetBSD packages system.
- Branch: cfgperl
- ! Makefile.SH hints/netbsd.sh makedepend.SH unixish.h
-____________________________________________________________________________
-[ 2649] By: jhi on 1999/01/19 12:44:02
- Log: Jumbo Configure update.
- * -Uinstallusrbinperl: disable /usr/bin/perl installation
- by installperl
- * usethreads.cbu
- * use64bits.cbu
- * "nosuid"
- Branch: cfgperl
- ! Configure config_h.SH hints/aix.sh hints/dec_osf.sh
- ! hints/dos_djgpp.sh hints/freebsd.sh hints/hpux.sh
- ! hints/irix_4.sh hints/irix_5.sh hints/irix_6.sh
- ! hints/irix_6_0.sh hints/irix_6_1.sh hints/linux.sh
- ! hints/os2.sh hints/solaris_2.sh hints/vmesa.sh perl.c perl.h
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 2648] By: jhi on 1999/01/19 09:16:44
- Log: Mention /usr/share/locale.
- Branch: cfgperl
- ! pod/perllocale.pod
-____________________________________________________________________________
-[ 2647] By: jhi on 1999/01/19 09:11:11
- Log: SHMLBA strikes back in NetBSD/sparc.
-
- From: Dave Nelson <David.Nelson@bellcow.com>
- To: jhi@iki.fi
- Subject: perl5.005_02 + IPC::SysV + NetBSD/Sparc
- Date: Mon, 18 Jan 1999 22:07:56 -0600
- Message-Id: <199901190407.WAA02543@longhorn.bellcow.com>
- Branch: cfgperl
- ! ext/IPC/SysV/SysV.xs
-____________________________________________________________________________
-[ 2646] By: jhi on 1999/01/19 08:58:17
- Log: Show LANGUAGE env var when needed. (Augment change #2645).
- Branch: cfgperl
- ! util.c utils/perlbug.PL
-____________________________________________________________________________
-[ 2645] By: jhi on 1999/01/19 08:52:15
- Log: Document the GNU LANGUAGE env var.
- Branch: cfgperl
- ! pod/perllocale.pod
-____________________________________________________________________________
-[ 2644] By: jhi on 1999/01/19 08:42:25
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_53] Fixing \G bug by Francois Desarmenien
- Date: Mon, 18 Jan 1999 20:57:02 -0500
- Message-ID: <19990118205702.A18379@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! pp_hot.c t/op/pat.t
-____________________________________________________________________________
-[ 2643] By: jhi on 1999/01/18 11:23:41
- Log: Add various cruft to "clean" target. (Time for t/Makefile?)
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2642] By: jhi on 1999/01/18 11:03:38
- Log: GNU libc locale system has LANGUAGE env var that partly
- overrides even LC_ALL.
- Branch: cfgperl
- ! t/lib/safe2.t t/op/groups.t t/op/mkdir.t
-____________________________________________________________________________
-[ 2641] By: jhi on 1999/01/18 10:55:04
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> ext/B/defsubs.h.PL
- ! t/op/groups.t
- !> (integrate 38 files)
-____________________________________________________________________________
-[ 2640] By: gsar on 1999/01/18 10:06:29
- Log: a few random cleanups
- Branch: perl
- ! ext/B/Makefile.PL lib/Test/Harness.pm t/pragma/warn/doio
-____________________________________________________________________________
-[ 2639] By: gsar on 1999/01/18 05:56:21
- Log: From: "Vishal Bhatia" <vishalb@hotmail.com>
- Date: Sun, 17 Jan 1999 16:41:10 PST
- Message-Id: <19990118004111.29667.qmail@hotmail.com>
- Subject: [PATCH 5.005_54]Duplicate saved ops (CC.pm)
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 2638] By: gsar on 1999/01/18 05:41:21
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Mon, 18 Jan 1999 00:37:41 +0100
- Message-Id: <36a271cd.2105507@smtp1.ibm.net>
- Subject: [PATCH 5.005_54] fix bugs in do_sv_dump() from Devel::Peek integration
- Branch: perl
- ! dump.c
-____________________________________________________________________________
-[ 2633] By: gsar on 1999/01/17 13:39:59
- Log: bogus assert()
- Branch: perl
- ! pp.c t/op/groups.t
-____________________________________________________________________________
-[ 2632] By: gsar on 1999/01/17 13:22:04
- Log: various tweaks for clean build and test on win32
- Branch: perl
- ! embed.h ext/B/Makefile.PL global.sym lib/FindBin.pm objXSUB.h
- ! op.c t/pragma/warn/doio
-____________________________________________________________________________
-[ 2631] By: gsar on 1999/01/17 12:28:06
- Log: undo change#2336, and add clarification about subversive
- CPAN distributions from Andreas Koenig
- Branch: perl
- ! Porting/pumpkin.pod lib/CPAN.pm
-____________________________________________________________________________
-[ 2630] By: gsar on 1999/01/17 12:04:06
- Log: fix silent taint failures under -U
- Branch: perl
- ! doio.c
-____________________________________________________________________________
-[ 2629] By: gsar on 1999/01/17 12:00:23
- Log: sanity check piped opens (tweaked version of patch suggested
- by Mark-Jason Dominus)
- Branch: perl
- ! doio.c pod/perldelta.pod pod/perldiag.pod t/io/pipe.t
- ! t/op/taint.t t/pragma/warn/doio
-____________________________________________________________________________
-[ 2628] By: gsar on 1999/01/17 11:26:21
- Log: regen headers
- Branch: perl
- ! embed.h embedvar.h objXSUB.h
-____________________________________________________________________________
-[ 2627] By: gsar on 1999/01/17 11:23:37
- Log: PERL_OBJECTness for change#2595
- Branch: perl
- ! embed.pl op.c pod/perlport.pod proto.h
-____________________________________________________________________________
-[ 2626] By: gsar on 1999/01/17 09:47:07
- Log: PERL_OBJECT tweaks for change#2426
- Branch: perl
- ! embed.pl proto.h regcomp.c
-____________________________________________________________________________
-[ 2625] By: gsar on 1999/01/17 09:37:58
- Log: documentation in change#2596 is not quite right; fix it
- Branch: perl
- ! lib/Math/BigFloat.pm pod/perlguts.pod
-____________________________________________________________________________
-[ 2624] By: gsar on 1999/01/17 09:28:34
- Log: undo change#2571; C<use File::Spec> instead
- Branch: perl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 2623] By: gsar on 1999/01/17 09:20:42
- Log: change#2572 is not applicable; undo, retaining scan_bin addition
- to global.sym
- Branch: perl
- ! global.sym perl.c proto.h
-____________________________________________________________________________
-[ 2622] By: gsar on 1999/01/17 09:17:42
- Log: change#2576 is based on a wrong premise; undo it
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 2621] By: gsar on 1999/01/17 09:12:42
- Log: fix change#2602 to not used hard coded constants
- Branch: perl
- ! ext/B/B/C.pm ext/B/defsubs.h.PL
-____________________________________________________________________________
-[ 2620] By: gsar on 1999/01/17 09:02:07
- Log: integrate cfgperl changes into mainline, fix conflicts
- Branch: perl
- +> AUTHORS MAINTAIN README.mint ext/DynaLoader/hints/linux.pl
- +> ext/POSIX/hints/mint.pl hints/gnu.sh hints/mint.sh
- +> lib/Dumpvalue.pm mint/Makefile mint/README mint/errno.h
- +> mint/pwd.c mint/stdio.h mint/sys/time.h mint/time.h
- +> pod/perlopentut.pod
- !> (integrate 162 files)
-____________________________________________________________________________
-[ 2619] By: gsar on 1999/01/17 08:42:04
- Log: a few doc typos
- Branch: perl
- ! lib/utf8.pm pod/perlfunc.pod pod/perlre.pod
-____________________________________________________________________________
-[ 2616] By: gbarr on 1999/01/16 18:59:55
- Log: Win32 changes from Jan
-
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 15 Jan 1999 23:38:35 +0100
- Message-ID: <36a7c10d.16311905@smtp1.ibm.net>
- Subject: [PATCH 5.005_03m2] Win32 Makefile patches
-
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 16 Jan 1999 13:02:45 +0100
- Message-ID: <36a07da6.10722337@smtp1.ibm.net>
- Subject: [PATCH 5.005_03m2] minor tweaks to README.win32
- Branch: maint-5.005/perl
- ! README.win32 win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2615] By: gbarr on 1999/01/16 18:48:48
- Log: Jumbo patch from Sarathy for PERL_OBJECT & USE_THREADS
-
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Thu, 07 Jan 1999 00:12:00 -0500
- Message-Id: <199901070512.AAA23568@aatma.engin.umich.edu>
- Subject: Re: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds
-
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Thu, 14 Jan 1999 19:21:46 -0500
- Message-Id: <199901150021.TAA01886@aatma.engin.umich.edu>
- Subject: Re: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds
- Branch: maint-5.005/perl
- ! embed.h global.sym lib/ExtUtils/MM_Unix.pm objXSUB.h objpp.h
- ! op.c perl.c perl.h perly.c perly.y perly_c.diff pp.c proto.h
- ! sv.c t/io/fs.t toke.c win32/GenCAPI.pl win32/config.bc
- ! win32/makedef.pl win32/runperl.c win32/win32.c
-____________________________________________________________________________
-[ 2614] By: gbarr on 1999/01/16 16:48:38
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 15 Jan 1999 17:28:34 +0200 (EET)
- Message-Id: <199901151528.RAA08785@alpha.hut.fi>
- Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: NetBSD patches
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 15 Jan 1999 18:44:19 +0200 (EET)
- Message-Id: <199901151644.SAA08184@alpha.hut.fi>
- Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: allow skipping the "install also as /usr/bin/perl" question of installperl
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 15 Jan 1999 18:52:29 +0200 (EET)
- Message-Id: <199901151652.SAA11259@alpha.hut.fi>
- Subject: the promised "installusrbinperl + NetBSD" fix
- Branch: maint-5.005/perl
- ! Configure Makefile.SH hints/netbsd.sh installperl
- ! makedepend.SH unixish.h
-____________________________________________________________________________
-[ 2611] By: jhi on 1999/01/14 12:16:14
- Log: From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: perlopentut.pod
- Date: Sat, 09 Jan 1999 08:13:18 -0700
- Message-Id: <199901091513.IAA17512@jhereg.perl.com>
- Branch: cfgperl
- + pod/perlopentut.pod
- ! MANIFEST pod/perl.pod pod/perldelta.pod pod/roffitall
-____________________________________________________________________________
-[ 2607] By: gbarr on 1999/01/14 02:53:40
- Log: Added Carp::cluck to perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2605] By: jhi on 1999/01/13 18:26:19
- Log: From: "Jonathan Fine (IT- Borders Online)" <jfine@borders.com>
- To: "'cpan@perl.org'" <cpan@perl.org>
- Subject: "Bug" fix for File::Find.pm
- Date: Thu, 31 Dec 1998 13:01:50 -0500
- Message-ID: <311F144DB5E5D011B03F00805FE954B10708BE17@exchange01_ph.borders.com>
- Branch: cfgperl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 2604] By: jhi on 1999/01/13 18:08:45
- Log: From: Peter Wolfe <wolfe@teloseng.com>
- Subject: SCO 3.2v5 patch for perl5.005_03-MAINT_TRIAL_1
- To: perlbug@perl.com
- Date: 11 Jan 1999 23:00:05 +0200
- Message-ID: <MLIST_199901111950.LAA01703@titan.teloseng.com>
- Branch: cfgperl
- ! hints/sco.sh
-____________________________________________________________________________
-[ 2603] By: jhi on 1999/01/13 18:06:56
- Log: From: hans@icgroup.nl (Hans Mulder)
- Subject: [Patch for 5.005_54] re::debugcolors dumps core
- To: perlbug@perl.com
- Cc: hansmu@xs4all.nl
- Date: 11 Jan 1999 22:22:45 +0200
- Message-ID: <MLIST_9901111947.AA22109@icgned.icgroup.nl>
- Branch: cfgperl
- ! ext/re/re.pm regcomp.c
-____________________________________________________________________________
-[ 2602] By: jhi on 1999/01/13 18:05:43
- Log: From: "Vishal Bhatia" <vishalb@hotmail.com>
- Subject: [PATCH 5.005_54]B::MAGIC::PTR doesnot check for valid length.
- Date: 11 Jan 1999 08:02:41 +0200
- Lines: 134
- Message-ID: <MLIST_19990111052126.27966.qmail@hotmail.com>
- Branch: cfgperl
- ! ext/B/B.xs ext/B/B/C.pm
-____________________________________________________________________________
-[ 2601] By: jhi on 1999/01/13 18:01:53
- Log: From: James FitzGibbon <james@ican.net>
- Subject: Trivial patch for HP-UX 11 and shared libperl
- To: perl5-porters@perl.org
- Date: 8 Jan 1999 19:13:23 +0200
- Message-ID: <MLIST_Pine.BSF.4.05.9901081110090.21785-100000@staff1.tor.accglobal.net>
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2600] By: jhi on 1999/01/13 17:59:45
- Log: From: "Vishal Bhatia" <vishalb@hotmail.com>
- Subject: [PATCH 5.005_54] B::CC::pp_rv2cv problem
- To: perl5-porters@perl.org
- Date: 8 Jan 1999 12:43:36 +0200
- Message-ID: <MLIST_19990108101557.4481.qmail@hotmail.com>
- Branch: cfgperl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2599] By: jhi on 1999/01/13 17:50:11
- Log: From: Robin Barker <rmb1@cise.npl.co.uk>
- Subject: PATCH to installperl
- To: perl5-porters@perl.org
- Date: 4 Jan 1999 16:15:18 +0200
- Message-ID: <MLIST_199901041350.NAA19665@cyclone.cise.npl.co.uk>
- Branch: cfgperl
- ! installperl
-____________________________________________________________________________
-[ 2598] By: jhi on 1999/01/13 17:34:51
- Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- To: gsar@engin.umich.edu (Gurusamy Sarathy), gbarr@pobox.com
- Cc: perl5-porters@perl.org
- Subject: PATCH DB_File 1.63 for 5.005_54 & 5.005_03
- Date: Tue, 29 Dec 1998 16:23:54 +0000 (GMT)
- Message-Id: <9812291623.AA20884@claudius.bfsec.bt.co.uk>
- Branch: cfgperl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/dbinfo ext/DB_File/typemap
-____________________________________________________________________________
-[ 2597] By: jhi on 1999/01/13 17:30:33
- Log: From: David Dyck <dcd@tc.fluke.com>
- To: Perl Porters <perl5-porters@perl.org>,
- Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: PATCH to perl5.005_54/pod/perldsc.pod (fix typo)
- Date: Tue, 12 Jan 1999 11:14:19 -0800 (PST)
- Message-ID: <Pine.LNX.4.05.9901121111250.22568-100000@dd.tc.fluke.com>
- Branch: cfgperl
- ! pod/perldsc.pod
-____________________________________________________________________________
-[ 2596] By: jhi on 1999/01/13 17:26:44
- Log: From: Joshua Pritikin <joshua.pritikin@db.com>
- To: perl5-porters@perl.org
- Subject: [PATCH] modglobal w/ spelling fixes
- Date: Tue, 12 Jan 1999 18:06:01 -0500 (EST)
- Message-ID: <Pine.GSO.4.02.9901121805290.625-100000@eq1062.wks.na.deuba.com>
- Branch: cfgperl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 2595] By: jhi on 1999/01/13 17:24:59
- Log: From: Hans Mulder <hansm@icgroup.nl>
- Optimize common sort routines. Thread started by the message
-
- From: Hans Mulder <hansm@icgroup.nl>
- Sender: owner-perl5-porters@perl.org
- To: perl5-porters@perl.org
- Subject: [Patch for 5.00554] From the Todo list: Optimize sort by { $a <=> $b
- Message-Id: <9901092156.AA03831@icgned.icgroup.nl>
-
- and the patch from the message
-
- From: Hans Mulder <hans@icgroup.nl>
- To: jhi@iki.fi
- Cc: perl5-porters@perl.org
- Subject: Re: [Patch for 5.00554] From the Todo list: Optimize sort by { $a <=>
- $b }
- Date: Wed, 13 Jan 1999 17:39:35 +0100
- Message-Id: <9901131639.AA17419@icgned.icgroup.nl>
- Branch: cfgperl
- ! Todo op.c op.h pp_ctl.c t/op/sort.t
-____________________________________________________________________________
-[ 2594] By: jhi on 1999/01/13 16:50:17
- Log: Atari MiNT port by Guido Flohr <gufl0000@stud.uni-sb.de>
- (the diffs were based on 5.004_02). Tested by Guido
- and Frank Naumann <fnaumann@prinz-atm.CS.Uni-Magdeburg.De>.
- Branch: cfgperl
- + README.mint ext/POSIX/hints/mint.pl hints/mint.sh
- + mint/Makefile mint/README mint/errno.h mint/pwd.c mint/stdio.h
- + mint/sys/time.h mint/time.h
- ! MANIFEST doio.c malloc.c miniperlmain.c perl.c t/io/fs.t
- ! t/lib/safe2.t t/op/groups.t t/op/mkdir.t t/op/taint.t util.c
-____________________________________________________________________________
-[ 2593] By: jhi on 1999/01/09 16:54:26
- Log: Detypo.
- Branch: cfgperl
- ! hints/dec_osf.sh
-____________________________________________________________________________
-[ 2592] By: jhi on 1999/01/09 16:17:13
- Log: Move usethreads and use64bits logic from hints to Configure.
- Branch: cfgperl
- ! Configure hints/README.hints hints/aix.sh hints/dec_osf.sh
- ! hints/dos_djgpp.sh hints/freebsd.sh hints/hpux.sh
- ! hints/irix_6.sh hints/irix_6_0.sh hints/irix_6_1.sh
- ! hints/linux.sh hints/os2.sh hints/solaris_2.sh hints/vmesa.sh
-____________________________________________________________________________
-[ 2591] By: jhi on 1999/01/09 14:45:24
- Log: Missing dTHRs added.
- Branch: cfgperl
- ! regcomp.c toke.c
-____________________________________________________________________________
-[ 2590] By: jhi on 1999/01/08 15:27:17
- Log: Finalize change #2589 and add better AIX nm scanning from:
-
- Message-Id: <m0zyNW0-00017VC@gentoo.com>
- From: bll@gentoo.com (Brad Lanam)
- Subject: Re: mailhelp returned a non-zero status
- In-Reply-To: <199901072155.WAA14369@hptnocou.grenoble.hp.com> from Raphael Manfredi at "Jan 7, 1999 10:55:24 pm"
- To: ram@hptnocou.grenoble.hp.com (Raphael Manfredi)
- Branch: cfgperl
- ! Configure hints/freebsd.sh hints/linux.sh
-____________________________________________________________________________
-[ 2589] By: jhi on 1999/01/08 15:14:54
- Log: Undo change #2581.
- Branch: cfgperl
- ! Configure hints/freebsd.sh hints/linux.sh
-____________________________________________________________________________
-[ 2588] By: jhi on 1999/01/08 11:51:52
- Log: FAQ jumbo patch from tchrist.
-
- Message-Id: <199901080605.XAA20229@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq.pod
- Date: Thu, 7 Jan 1999 23:05:02 -0700
-
- Message-Id: <199901080605.XAA20231@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq1.pod
- Date: Thu, 7 Jan 1999 23:05:02 -0700
-
- Message-Id: <199901080605.XAA20233@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq2.pod
- Date: Thu, 7 Jan 1999 23:05:02 -0700
-
- Message-Id: <199901080605.XAA20235@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq3.pod
- Date: Thu, 7 Jan 1999 23:05:02 -0700
-
- Message-Id: <199901080605.XAA20237@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq4.pod
- Date: Thu, 7 Jan 1999 23:05:02 -0700
-
- Message-Id: <199901080605.XAA20239@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq5.pod
- Date: Thu, 7 Jan 1999 23:05:02 -0700
-
- Message-Id: <199901080605.XAA20241@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq6.pod
- Date: Thu, 7 Jan 1999 23:05:02 -0700
-
- Message-Id: <199901080605.XAA20243@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq7.pod
- Date: Thu, 7 Jan 1999 23:05:03 -0700
-
- Message-Id: <199901080605.XAA20245@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq8.pod
- Date: Thu, 7 Jan 1999 23:05:03 -0700
-
- Message-Id: <199901080605.XAA20257@jhereg.perl.com>
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: pumpkings@jhereg.perl.com
- Subject: newest version of perlfaq9.pod
- Date: Thu, 7 Jan 1999 23:05:03 -0700
- Branch: cfgperl
- ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod
-____________________________________________________________________________
-[ 2587] By: jhi on 1999/01/08 11:17:43
- Log: More doc fixes from Abigail.
- Branch: cfgperl
- ! lib/Time/gmtime.pm lib/Time/localtime.pm lib/User/grent.pm
- ! lib/User/pwent.pm
-____________________________________________________________________________
-[ 2585] By: jhi on 1999/01/08 08:31:02
- Log: Change #2584 from maint-5.005:
-
- implemented Ilya's suggested fix, and added a testcase
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 5 Jan 1999 00:56:01 -0500 (EST)
- Message-Id: <199901050556.AAA02597@monk.mps.ohio-state.edu>
- Subject: Re: Text::ParseWords: regex fix
- Branch: cfgperl
- ! lib/Text/ParseWords.pm t/lib/parsewords.t
-____________________________________________________________________________
-[ 2583] By: gbarr on 1999/01/08 04:50:03
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Thu, 7 Jan 1999 12:47:38 +0200 (EET)
- Message-Id: <199901071047.MAA24100@alpha.hut.fi>
- Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: ext/Errno_pm.PL: understand wrapper cppstdins
- Branch: maint-5.005/perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 2581] By: jhi on 1999/01/07 16:38:03
- Log: Configure update:
- - usethreads, use64bits, and usemultiplicity
- are no more interactively asked by Configure
- - "int main()" (vs bare "main()") enforced in test programs
- Branch: cfgperl
- ! Configure hints/freebsd.sh hints/linux.sh
-____________________________________________________________________________
-[ 2580] By: jhi on 1999/01/07 11:19:12
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Wed, 06 Jan 1999 13:47:34 -0800
- Message-Id: <3.0.6.32.19990106134734.0334d260@ous.edu>
- Subject: [PATCH 5.005_02-MT2, 5.005_5x]VMS.C tweak for occasional system() error
- Branch: cfgperl
- ! vms/vms.c
-____________________________________________________________________________
-[ 2579] By: jhi on 1999/01/07 09:08:36
- Log: Another set of doc patches from Abigail
-
- From: abigail@fnx.com
- Message-ID: <19990107032132.20124.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRAIL2 lib/Net/hostent.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:21:32 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107032445.20178.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Net/netent.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:24:45 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107032834.20362.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRAIL2 lib/Term/Complete.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:28:34 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107033136.20440.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRAIL2 lib/Term/ReadLine.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:31:36 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107033351.20540.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/CGI/Apache.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:33:51 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107033933.20707.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/CGI/Push.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:39:33 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107034548.20936.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/File/Copy.pm] Typo fixes
- Date: Wed, 6 Jan 1999 22:45:48 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107034856.21056.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/File/Spec.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:48:56 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107035113.21174.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/File/Spec/Mac.pm] Typo fixes
- Date: Wed, 6 Jan 1999 22:51:13 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107035612.21522.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Math/BigFloat.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:56:12 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107035842.21585.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Math/BigInt.pm] Typo fixes
- Date: Wed, 6 Jan 1999 22:58:41 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107040644.22009.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Text/Wrap.pm] Typo fixes
- Date: Wed, 6 Jan 1999 23:06:44 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107040955.22087.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Tie/Array.pm] Typo fixes
- Date: Wed, 6 Jan 1999 23:09:55 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107041136.22174.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Tie/Hash.pm] Typo fix
- Date: Wed, 6 Jan 1999 23:11:36 -0500 (EST)
- Branch: cfgperl
- ! lib/CGI/Apache.pm lib/CGI/Push.pm lib/File/Copy.pm
- ! lib/File/Spec.pm lib/File/Spec/Mac.pm lib/Math/BigFloat.pm
- ! lib/Math/BigInt.pm lib/Net/hostent.pm lib/Net/netent.pm
- ! lib/Term/Complete.pm lib/Term/ReadLine.pm lib/Text/Wrap.pm
- ! lib/Tie/Array.pm lib/Tie/Hash.pm
-____________________________________________________________________________
-[ 2576] By: jhi on 1999/01/06 17:05:20
- Log: Change #2582 fallout: the amagic_cmp* are no more file static.
- Branch: cfgperl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 2575] By: jhi on 1999/01/06 13:18:56
- Log: Enhance the great_circle_distance() documentation.
- Branch: cfgperl
- ! lib/Math/Trig.pm
-____________________________________________________________________________
-[ 2574] By: jhi on 1999/01/06 12:58:03
- Log: From: Mark Bixby <markb@spock.dis.cccd.edu>
- To: perlbug@perl.com
- Subject: [PATCH 5.005_03-MAINT_TRIAL_2] t/op/sysio.t for MPE/iX
- Date: Mon, 4 Jan 1999 13:34:58 -0800 (PST)
- Message-Id: <199901042134.NAA18852@spock.dis.cccd.edu>
- Branch: cfgperl
- ! t/op/sysio.t
-____________________________________________________________________________
-[ 2573] By: jhi on 1999/01/06 12:40:19
- Log: From: "W. Phillip Moore" <wpm@ms.com>
- To: perlbug@perl.org
- Subject: [PATCH] POSIX getpgrp is not -w clean
- Date: Tue, 5 Jan 1999 12:40:27 -0500 (EST)
- Message-ID: <13970.20107.190314.549471@zappa>
- Branch: cfgperl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 2572] By: jhi on 1999/01/06 12:25:24
- Log: Based on
- From: jan.dubois@ibm.net (Jan Dubois)
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds
- Date: Wed, 06 Jan 1999 01:24:09 +0100
- Message-ID: <3696aa85.18259325@smtp1.ibm.net>
- except that
- - objXSUB.h was already okay
- - embed.h patching is futile, global.sym patched instead
- - objpp.h does not exist
- - proto.h addition applied manually
- - win32/GenCAPI.pl was already okay
- - win32/makedef.pl was already okay
- Branch: cfgperl
- ! global.sym perl.c proto.h
-____________________________________________________________________________
-[ 2571] By: jhi on 1999/01/06 11:25:48
- Log: From: Slaven Rezic <eserte@cs.tu-berlin.de>
- To: perlbug@perl.com
- Subject: FindBin.pm on Win32 systems
- Date: Mon, 4 Jan 1999 23:01:46 +0100 (CET)
- Message-Id: <199901042201.XAA01875@cabulja.herceg.de>
- Branch: cfgperl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 2570] By: jhi on 1999/01/06 11:21:48
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.005_03-MAINT_TRIAL_2]taint.c fix for VMS
- Date: Tue, 05 Jan 1999 16:47:31 -0800
- Message-Id: <3.0.6.32.19990105164731.00b5b2d0@ous.edu>
-
- (the ext/IO/lib/IO/Socket.pm was not really changed here;
- it was a leftover from #2569)
- Branch: cfgperl
- ! ext/IO/lib/IO/Socket.pm taint.c
-____________________________________________________________________________
-[ 2569] By: jhi on 1999/01/06 11:18:22
- Log: Jumbo doc patch from Abigail (almost identical to
- the 5.005-maint change #2562 except for the
- ext/IO/lib/IO/Socket.pm patch which was not
- applicable because the IO version of 5.005-devel
- is somewhat different (why?))
-
- From: abigail@fnx.com
- Message-ID: <19990105170142.4889.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03-TRIAL2 lib/ExtUtils/Liblist.pm] pod fixes
- Date: Tue, 5 Jan 1999 12:01:42 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105172855.5115.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 MAINT2 lib/ExtUtils/Commands.pm] Typo fix.
- Date: Tue, 5 Jan 1999 12:28:55 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105173808.5260.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH perl5.005_03 MAINT3 lib/ExtUtils/Embed.pm] Typo fix
- Date: Tue, 5 Jan 1999 12:38:08 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105174859.5533.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 MAINT2 lib/ExtUtils/Install.pm] Typo fix
- Date: Tue, 5 Jan 1999 12:48:59 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105174947.5547.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 lib/ExtUtils/MM_Unix.pm] Typo fixes
- Date: Tue, 5 Jan 1999 12:49:46 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105182301.5966.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 lib/ExtUtils/MakeMaker.pm] Typos fixes.
- Date: Tue, 5 Jan 1999 13:23:00 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105183344.6065.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/ExtUtils/Manifest.pm] Typo fixes
- Date: Tue, 5 Jan 1999 13:33:44 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105184028.6220.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/ExtUtils/Mksymlists.pm] Typo fix
- Date: Tue, 5 Jan 1999 13:40:28 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990106012015.9451.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/IO/Pipe.pm] Typo fixes.
- Date: Tue, 5 Jan 1999 20:20:15 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990106012047.9459.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRAIL2 lib/IO/Seekable.pm] Typo fixes
- Date: Tue, 5 Jan 1999 20:20:47 -0500 (EST)
- Branch: cfgperl
- ! ext/IO/lib/IO/Pipe.pm ext/IO/lib/IO/Seekable.pm
- ! lib/ExtUtils/Command.pm lib/ExtUtils/Embed.pm
- ! lib/ExtUtils/Install.pm lib/ExtUtils/Liblist.pm
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
- ! lib/ExtUtils/Manifest.pm lib/ExtUtils/Mksymlists.pm
-____________________________________________________________________________
-[ 2568] By: gbarr on 1999/01/06 03:13:15
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 06 Jan 1999 01:24:09 +0100
- Message-ID: <3696aa85.18259325@smtp1.ibm.net>
- Subject: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds
- Branch: maint-5.005/perl
- ! embed.h global.sym objXSUB.h objpp.h perl.c proto.h
- ! win32/GenCAPI.pl win32/makedef.pl
-____________________________________________________________________________
-[ 2566] By: gbarr on 1999/01/06 02:29:05
- Log: From: "W. Phillip Moore" <wpm@ms.com>
- Date: Tue, 5 Jan 1999 12:40:27 -0500 (EST)
- Message-ID: <13970.20107.190314.549471@zappa>
- Subject: [PATCH] POSIX getpgrp is not -w clean
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 2565] By: gbarr on 1999/01/06 02:19:00
- Log: From: Slaven Rezic <eserte@cs.tu-berlin.de>
- Date: Mon, 4 Jan 1999 23:01:46 +0100 (CET)
- Message-Id: <199901042201.XAA01875@cabulja.herceg.de>
- Subject: FindBin.pm on Win32 systems
- Branch: maint-5.005/perl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 2561] By: jhi on 1999/01/05 10:49:10
- Log: Reword the setlocale() 1-arg case better.
- Branch: cfgperl
- ! ext/POSIX/POSIX.pod
-____________________________________________________________________________
-[ 2559] By: gbarr on 1999/01/02 15:37:35
- Log: From: Blair Zajac <bzajac@geostaff.com>
- Date: Wed, 23 Dec 1998 17:13:32 -0800
- Message-ID: <3681953C.8B6A90AA@geostaff.com>
- Subject: Tie::SubstrHash patch
- Branch: maint-5.005/perl
- ! lib/Tie/SubstrHash.pm
-____________________________________________________________________________
-[ 2554] By: jhi on 1999/01/02 14:55:06
- Log: Object destruction order testing.
- Branch: cfgperl
- ! t/op/misc.t
-____________________________________________________________________________
-[ 2553] By: jhi on 1999/01/02 14:49:40
- Log: perldelta the Dumpvalue.pm of change #2513.
- Branch: cfgperl
- ! lib/Dumpvalue.pm pod/perldelta.pod
-____________________________________________________________________________
-[ 2552] By: nick on 1999/01/02 14:45:38
- Log: Tone down Makefile.PL so it works on Win32
- Branch: perl
- ! ext/B/Makefile.PL
-____________________________________________________________________________
-[ 2551] By: nick on 1999/01/02 14:06:30
- Log: Export constant subs from B.xs for op.h, cop.h and a few others.
- Use them in various B::* rather than have local defs.
- Branch: perl
- + ext/B/defsubs.h.PL
- ! ext/B/B.pm ext/B/B.xs ext/B/B/Bytecode.pm ext/B/B/C.pm
- ! ext/B/B/CC.pm ext/B/B/Deparse.pm ext/B/B/Lint.pm
- ! ext/B/B/Stackobj.pm ext/B/B/Xref.pm ext/B/Makefile.PL
-____________________________________________________________________________
-[ 2550] By: nick on 1999/01/02 10:04:02
- Log: Integrate ext/B changes from //depot/cfgperl
- Branch: perl
- !> ext/B/B.xs ext/B/B/C.pm ext/B/B/CC.pm ext/B/B/Stackobj.pm
-____________________________________________________________________________
-[ 2549] By: jhi on 1999/01/01 13:54:16
- Log: From: "Paul Holser" <Paul.Holser.pholser@nortelnetworks.com>
- To: perlbug@perl.com
- Subject: op/groups.t fails test 1 on HP-UX 10.20
- Date: Wed, 30 Dec 1998 15:16:12 -0600 (CST)
- Message-Id: <199812302116.PAA12439@crchh44c.us.nortel.com>
- Branch: cfgperl
- ! t/op/groups.t
-____________________________________________________________________________
-[ 2548] By: jhi on 1999/01/01 13:53:31
- Log: From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- To: perl5-porters@perl.org
- cc: hv@crypt0.demon.co.uk
- Subject: [bug 5.004_54] duplicate error message
- Date: Thu, 31 Dec 1998 04:05:25 +0000
- Message-Id: <199812310405.EAA00386@crypt.compulink.co.uk>
-
- Message-ID: <13963.60672.134591.383377@alias-2.pr.mcs.net>
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- To: hv@crypt0.demon.co.uk
- Cc: perl5-porters@perl.org
- Subject: [PATCH _54] Re: duplicate error message
- Date: Thu, 31 Dec 1998 16:10:13 -0600 (CST)
-
- Message-Id: <199901010732.HAA02926@crypt.compulink.co.uk>
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- To: Stephen McCamant <smccam@uclink4.berkeley.edu>
- cc: hv@crypt0.demon.co.uk, perl5-porters@perl.org
- Subject: [TEST PATCH _54] Re: duplicate error message
- Date: Fri, 01 Jan 1999 07:32:14 +0000
- Branch: cfgperl
- ! op.c t/pragma/warn/op
-____________________________________________________________________________
-[ 2547] By: jhi on 1998/12/31 14:15:04
- Log: From: Chris Nandor <pudge@pobox.com>
- To: jhi@iki.fi
- Cc: perl5-porters@perl.org
- Subject: Re: [PATCH] perlport.pod 1.38
- Date: Thu, 31 Dec 1998 09:06:48 -0500
- Message-Id: <v04020a1db2b1352ec92a@[192.168.0.77]>
- Branch: cfgperl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 2546] By: jhi on 1998/12/31 11:18:17
- Log: From: Wilson P. Snyder II
- To: perl5-porters@perl.org
- Subject: [PATCH v5.5.53] REV2: Binary number support
- Date: 1998/11/30
- Message-ID: <199811301543.KAA15689@vulcan.maker.com>
- Branch: cfgperl
- ! pod/perldata.pod pod/perldelta.pod pod/perlfunc.pod pp.c
- ! proto.h sv.c t/op/oct.t t/op/sprintf.t t/pragma/warn/util
- ! toke.c util.c
-____________________________________________________________________________
-[ 2545] By: jhi on 1998/12/31 09:27:40
- Log: From: "Todd C. Miller" <Todd.Miller@courtesan.com>
- To: perlbug@perl.com
- Subject: "perl -T -P" dumps core on OpenBSD and Linux
- Date: Wed, 30 Dec 1998 21:11:05 -0700 (MST)
- Message-Id: <199812310411.VAA37568@xerxes.courtesan.com>
- Branch: cfgperl
- ! taint.c
-____________________________________________________________________________
-[ 2544] By: jhi on 1998/12/31 09:21:45
- Log: From: Tim Bunce <Tim.Bunce@ig.co.uk>
- To: perlbug@perl.com
- Subject: bug in pod2man search for perl binary [5.005_5x]
- Date: Sat, 12 Dec 1998 23:08:51 +0000
- Message-ID: <19981212230851.A20578@ig.co.uk>
- Branch: cfgperl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 2541] By: gbarr on 1998/12/30 14:37:14
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 23 Dec 1998 21:26:38 +0100
- Message-ID: <36895086.8849224@smtp1.ibm.net>
- Subject: [PATCH 5.005_03m1] subdirectory Makefiles should inherit CAPI setting from command line
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2540] By: jhi on 1998/12/30 08:42:04
- Log: Evermore AUTHORS and MAINTAIN.
- Branch: cfgperl
- ! AUTHORS MAINTAIN
-____________________________________________________________________________
-[ 2539] By: jhi on 1998/12/29 15:10:34
- Log: More AUTHORS and MAINTAIN.
- Branch: cfgperl
- ! AUTHORS MAINTAIN
-____________________________________________________________________________
-[ 2537] By: jhi on 1998/12/29 14:34:47
- Log: From: Frank Ridderbusch <Frank.Ridderbusch@pdb.siemens.de>
- Date: Tue, 15 Dec 1998 16:23:12 +0100 (MET)
- Message-ID: <13942.32480.700000.640927@utensil>
- Subject: Minor Bug in AutoSplit.qm in 5.005 and 5.004
- (mirror change#2531 in the 5.005-maint)
- Branch: cfgperl
- ! lib/AutoSplit.pm
-____________________________________________________________________________
-[ 2531] By: gbarr on 1998/12/29 14:12:25
- Log: change in_pod pattern to /^=\w/ from /^=/
- From: Frank Ridderbusch <Frank.Ridderbusch@pdb.siemens.de>
- Date: Tue, 15 Dec 1998 16:23:12 +0100 (MET)
- Message-ID: <13942.32480.700000.640927@utensil>
- Subject: Minor Bug in AutoSplit.qm in 5.005 and 5.004
- Branch: maint-5.005/perl
- ! lib/AutoSplit.pm
-____________________________________________________________________________
-[ 2525] By: jhi on 1998/12/29 13:06:26
- Log: From: "Vishal Bhatia" <vishalb@hotmail.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_54] More minor Fixes in CC.pm/C.pm
- Date: 16 Dec 1998 03:17:03 +0200
- Message-ID: <MLIST_199812160055.QAA06272@f10.hotmail.com>
- Branch: cfgperl
- ! ext/B/B/C.pm ext/B/B/CC.pm ext/B/B/Stackobj.pm
-____________________________________________________________________________
-[ 2524] By: jhi on 1998/12/29 13:00:06
- Log: From: "Vishal Bhatia" <vishalb@hotmail.com>
- To: perl5-porters@perl.org
- Cc: rmb1@cise.npl.co.uk, nick@ni-s.u-net.com
- Subject: [PATCH 5.005_54] Re:perlcc -e 'my $x = shift; print +($x ?...' failure
- Date: 10 Dec 1998 08:30:02 +0200
- Message-ID: <MLIST_19981210061651.29891.qmail@hotmail.com>
-
- (Nick's part was applied earlier, in change #2460)
- Branch: cfgperl
- ! ext/B/B.xs ext/B/B/C.pm ext/B/B/CC.pm ext/B/B/Stackobj.pm
-____________________________________________________________________________
-[ 2523] By: jhi on 1998/12/29 12:41:31
- Log: From: "vishal bhatia" <vishalb@hotmail.com>
- To: nick@ni-s.u-net.com
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.005_54] return value of perlcc/B::CC generated functions.
- Date: 9 Dec 1998 06:50:30 +0200
- Message-ID: <MLIST_19981209043146.16829.qmail@hotmail.com>
- Branch: cfgperl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2522] By: jhi on 1998/12/29 12:15:18
- Log: From: rjk@linguist.dartmouth.edu (Ronald J. Kimball)
- To: perl5-porters@perl.org (Perl 5 Porters)
- Subject: [PATCH 5.005_54] Pod::Text.pm reformating indented paragraphs
- Date: 25 Dec 1998 23:02:28 +0200
- Message-ID: <MLIST_199812252034.PAA27812@linguist.dartmouth.edu>
- Branch: cfgperl
- ! lib/Pod/Text.pm
-____________________________________________________________________________
-[ 2521] By: jhi on 1998/12/29 12:07:54
- Log: Undo #2519 (breaks universal.c).
- Branch: cfgperl
- ! XSUB.h
-____________________________________________________________________________
-[ 2519] By: jhi on 1998/12/29 11:41:10
- Log: From: Joshua Pritikin <joshua.pritikin@db.com>
- To: perl5-porters@perl.org
- Cc: perl-xs@perl.org
- Subject: XSUB.h refinement [PATCH]
- Date: 18 Dec 1998 03:58:44 +0200
- Message-ID: <MLIST_Pine.GSO.4.02.9812171733330.589-100000@eq1062.wks.na.deuba.com>
- Branch: cfgperl
- ! XSUB.h
-____________________________________________________________________________
-[ 2518] By: jhi on 1998/12/29 11:36:19
- Log: From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_02; lib/fields.pm] Typos in pod.
- Date: 28 Dec 1998 21:39:15 +0200
- Message-ID: <MLIST_19981228191612.8380.qmail@alexandra.wayne.fnx.com>
- Branch: cfgperl
- ! lib/fields.pm
-____________________________________________________________________________
-[ 2517] By: jhi on 1998/12/29 11:35:03
- Log: Document change #2516.
- Branch: cfgperl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2516] By: jhi on 1998/12/29 11:32:26
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_53] Warn on unrecognized alpha escapes.
- Date: 9 Dec 1998 10:39:31 +0200
- Message-ID: <MLIST_199812090823.DAA17566@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! pod/perldiag.pod regcomp.c toke.c
-____________________________________________________________________________
-[ 2515] By: jhi on 1998/12/29 11:27:11
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_53] Bugs in hairy interactions of feature in REx
- Date: 8 Dec 1998 09:02:04 +0200
- Message-ID: <MLIST_199812080637.BAA16025@monk.mps.ohio-state.edu>
-
- \G fixes (wasn't working right with //g, s///, and $_ in (?{})).
- Branch: cfgperl
- ! pp_ctl.c pp_hot.c regexec.c regexp.h t/op/pat.t t/op/subst.t
-____________________________________________________________________________
-[ 2514] By: jhi on 1998/12/29 11:21:31
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: perl5-porters@perl.org (Mailing list Perl5)
- Subject: [PATCH 5.005_53] Regexp tests and UTF8
- Date: 8 Dec 1998 07:02:01 +0200
- Message-ID: <MLIST_199812080447.XAA05297@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! regcomp.c
-____________________________________________________________________________
-[ 2513] By: jhi on 1998/12/29 11:18:34
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.005_*] Dumpvar.pm
- To: perl5-porters@perl.org (Mailing list Perl5)
- Date: 7 Dec 1998 10:17:35 +0200
- Message-ID: <MLIST_199812070744.CAA18949@monk.mps.ohio-state.edu>
- Branch: cfgperl
- + lib/Dumpvalue.pm
- ! MANIFEST
-____________________________________________________________________________
-[ 2511] By: gbarr on 1998/12/28 14:55:28
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Tue, 01 Dec 1998 00:07:33 +0100
- Message-ID: <366921b5.14512598@smtp1.ibm.net>
- Subject: Re: 5.005_03-MAINT-TRIAL1, [PATCH] to compile on Win32
-
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 02 Dec 1998 00:24:54 +0100
- Message-ID: <366a77bb.19498126@smtp1.ibm.net>
- Subject: Re: 5.005_03-MAINT-TRIAL1, [PATCH] spaces in filenames support
- Branch: maint-5.005/perl
- ! perl.h proto.h taint.c win32/GenCAPI.pl win32/Makefile
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_sh.PL win32/makedef.pl
-____________________________________________________________________________
-[ 2509] By: jhi on 1998/12/28 13:00:31
- Log: Kickstart AUTHORS and MAINTAIN.
- Branch: cfgperl
- + AUTHORS MAINTAIN
- ! MANIFEST
-____________________________________________________________________________
-[ 2508] By: jhi on 1998/12/28 08:04:00
- Log: From: Nathan Torkington <gnat@frii.com>
- To: perlbug@perl.com
- Subject: [PATCH] perlxstut.pod fix
- Date: Sat, 26 Dec 1998 14:28:21 +1300 (NZDT)
- Message-ID: <13956.15285.933914.320849@localhost.frii.com>
- Branch: cfgperl
- ! pod/perlxstut.pod
-____________________________________________________________________________
-[ 2507] By: jhi on 1998/12/28 07:59:00
- Log: From: abigail@fnx.com
- To: perlbug@perl.com
- Subject: [PATCH 5.005_02] Re: m// doc is buggy (was Re: m'$foo' is undocumented)
- Date: Wed, 23 Dec 1998 22:59:59 -0500 (EST)
- Message-ID: <19981224035959.16994.qmail@alexandra.wayne.fnx.com>
- (slightly modified, a part of the patch was rejected)
- (strange, I thought I had already submitted this one
- but Perforce disagrees with me...)
- Branch: cfgperl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 2506] By: jhi on 1998/12/28 07:56:59
- Log: From: Artur <artur@vogon-solutions.com>
- To: perlbug@perl.com
- Subject: PATCH: perlmodlib.pod
- Date: Fri, 25 Dec 1998 00:48:39 +0000
- Message-ID: <3682E0E7.EBFB5D65@vogon-solutions.com>
- Branch: cfgperl
- ! pod/perlmodlib.pod pod/perlop.pod
-____________________________________________________________________________
-[ 2505] By: jhi on 1998/12/28 07:46:06
- Log: From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_02] Typo in documentation of pod2html.
- Date: Wed, 23 Dec 1998 22:32:07 -0500 (EST)
- Message-ID: <19981224033207.16751.qmail@alexandra.wayne.fnx.com>
- Branch: cfgperl
- ! pod/pod2html.PL
-____________________________________________________________________________
-[ 2504] By: jhi on 1998/12/28 07:44:35
- Log: From: Jim Avera <avera@fjst.com>
- To: perlbug@perl.com
- Subject: perlbug bug - shows dates reversed
- Date: Wed, 23 Dec 1998 18:08:56 -0800 (PST)
- Message-Id: <199812240208.SAA27616@membrane.ssd.hal.com>
- Branch: cfgperl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 2503] By: jhi on 1998/12/28 07:41:39
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- To: makemaker@franz.ww.TU-Berlin.DE, perl5-porters@perl.org
- Subject: [PATCH 5.005_03m1] subdirectory Makefiles should inherit CAPI setting from command line
- Date: Wed, 23 Dec 1998 21:26:38 +0100
- Message-ID: <36895086.8849224@smtp1.ibm.net>
- Branch: cfgperl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2502] By: jhi on 1998/12/28 07:39:20
- Log: From: Blair Zajac <bzajac@geostaff.com>
- To: perl5-porters@perl.org
- Subject: Tie::SubstrHash patch
- Date: Wed, 23 Dec 1998 17:13:32 -0800
- Message-ID: <3681953C.8B6A90AA@geostaff.com>
- Branch: cfgperl
- ! lib/Tie/SubstrHash.pm
-____________________________________________________________________________
-[ 2501] By: jhi on 1998/12/28 07:37:16
- Log: From: Alan.Harder@Ebay.Sun.COM (Alan Harder)
- To: perlbug@perl.com
- Subject: perlfaq9 minor error
- Date: Wed, 23 Dec 1998 14:54:19 -0800
- Message-Id: <199812232254.OAA05986@moshpit.EBay.Sun.COM>
- Branch: cfgperl
- ! pod/perlfaq9.pod
-____________________________________________________________________________
-[ 2500] By: jhi on 1998/12/23 10:38:18
- Log: More porting notes about filesystems, AmigaOS, and MiNT.
- Branch: cfgperl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 2499] By: jhi on 1998/12/22 09:26:49
- Log: Add few MSG_ and uio constants.
- Branch: cfgperl
- ! ext/Socket/Socket.pm ext/Socket/Socket.xs iperlsys.h
-____________________________________________________________________________
-[ 2498] By: jhi on 1998/12/22 08:39:30
- Log: Slight recoding of util.c:repeatcpy() to circumnavigate
- a Digital C compiler optimizer bug that broke the 'x'
- operator under certain circumstances. See t/op/repeat.t
- test #20 for graphic details. Reported in
-
- From: Gisle Aas <gisle@aas.no>
- To: Mark Martinec <Mark.Martinec@nsc.ijs.si>
- Cc: ach@xray.mpe.mpg.de, cpan-testers@perl.org, perl5-porters@perl.org
- Subject: Re: Digest-MD5-2.00 test fails on DEC Alpha - a patch
- Date: 18 Dec 1998 14:27:40 +0100
- Message-ID: <m37lvpa8c3.fsf@furu.g.aas.no>
-
- and discussed further in the thread
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- To: Gisle Aas <gisle@aas.no>
- Cc: Mark Martinec <Mark.Martinec@nsc.ijs.si>, ach@xray.mpe.mpg.de,
- cpan-testers@perl.org, perl5-porters@perl.org
- Subject: x operator broken in DEC Alpha for 8-bit characters (Re: Digest-MD5-2.00 test fails on DEC Alpha - a patch)
- Date: Fri, 18 Dec 1998 16:18:37 +0200 (EET)
- Message-ID: <13946.25661.193449.138023@alpha.hut.fi>
- Branch: cfgperl
- ! t/op/repeat.t util.c
-____________________________________________________________________________
-[ 2497] By: jhi on 1998/12/21 14:18:57
- Log: Change #2483 update.
- Branch: cfgperl
- ! t/op/tr.t
-____________________________________________________________________________
-[ 2496] By: jhi on 1998/12/21 14:07:41
- Log: Update on change #2493.
- Branch: cfgperl
- ! t/pragma/warn/op
-____________________________________________________________________________
-[ 2495] By: jhi on 1998/12/21 13:52:00
- Log: Change #2487 aftershock.
- Branch: cfgperl
- ! warning.pl
-____________________________________________________________________________
-[ 2494] By: jhi on 1998/12/21 12:35:00
- Log: From: Chris Nandor <pudge@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH] perlport.pod v1.37
- Date: Sat, 19 Dec 1998 12:54:34 -0500
- Message-Id: <v04020a03b2a194aaa676@[192.168.0.77]>
- Branch: cfgperl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 2493] By: jhi on 1998/12/21 12:22:44
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- To: perl5-porters@perl.com
- Subject: PATCH (5.005_02): Dejargonizing
- Date: Sun, 20 Dec 1998 14:35:20 -0500
- Message-ID: <19981220193520.11230.qmail@plover.com>
-
- From: Mark-Jason Dominus <mjd@plover.com>
- To: perl5-porters@perl.com
- Subject: PATCH (5.005_02): Spelling correction in warning message
- Date: Sun, 20 Dec 1998 13:51:30 -0500
- Message-ID: <19981220185130.11067.qmail@plover.com>
- Branch: cfgperl
- ! doio.c op.c
-____________________________________________________________________________
-[ 2492] By: jhi on 1998/12/21 09:00:05
- Log: From: "Vishal Bhatia" <vishalb@hotmail.com>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_54] pp_next/pp_last/pp_redo problems
- Date: Sun, 20 Dec 1998 19:03:25 PST
- Message-ID: <19981221030326.27660.qmail@hotmail.com>
-
- (slightly reformatted)
- Branch: cfgperl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2491] By: nick on 1998/12/20 14:21:29
- Log: Save _all_ GV's which have SV, AV or HV set.
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 2490] By: jhi on 1998/12/18 15:13:19
- Log: Add idea about generalising cpp symbol probing of Errno.
- Branch: cfgperl
- ! Todo
-____________________________________________________________________________
-[ 2489] By: jhi on 1998/12/18 14:47:57
- Log: Address some of the issues of:
-
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: perl-porters-active@jhereg.perl.com
- Subject: Undocumentation Issues for 5.005
- Date: Thu, 17 Dec 1998 14:46:24 -0700
- Message-Id: <199812172146.OAA05316@jhereg.perl.com>
- Branch: cfgperl
- ! pod/perl5005delta.pod
-____________________________________________________________________________
-[ 2488] By: jhi on 1998/12/18 11:26:32
- Log: From: root <root@dubravka.in-berlin.de>
- To: perlbug@perl.com
- Cc: k@dubravka.in-berlin.de
- Subject: Please add no_modify to PERL_POLLUTE
- Date: Fri, 18 Dec 1998 10:45:52 +0100
- Message-Id: <199812180945.KAA05275@dubravka.in-berlin.de>
-
- (Really from Andreas König)
- Branch: cfgperl
- ! embed.pl
-____________________________________________________________________________
-[ 2487] By: jhi on 1998/12/17 14:05:52
- Log: Some (by far not all) issues of the below message addressed.
-
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- To: The Perl Porters Mailing List <perl5-porters@perl.org>
- Subject: important UNDOC issues for 5.005_54
- Date: Wed, 16 Dec 1998 21:14:53 -0700
- Message-Id: <199812170414.VAA25860@jhereg.perl.com>
- Branch: cfgperl
- ! lib/warning.pm pod/perl5005delta.pod pod/perldelta.pod
-____________________________________________________________________________
-[ 2486] By: jhi on 1998/12/17 12:47:15
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: domo@computer.org
- Cc: jhi@iki.fi, perl5-porters@perl.org
- Subject: Re: stuff related to malloc.c
- Date: Wed, 16 Dec 1998 16:40:27 -0500 (EST)
- Message-Id: <199812162140.QAA04925@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! malloc.c
-____________________________________________________________________________
-[ 2485] By: jhi on 1998/12/17 12:17:19
- Log: More porting notes.
- Branch: cfgperl
- ! Porting/pumpkin.pod
-____________________________________________________________________________
-[ 2484] By: jhi on 1998/12/15 08:38:05
- Log: Undo #2386 and #2205.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2483] By: jhi on 1998/12/14 17:58:35
- Log: lib was missing from @INC.
- Branch: cfgperl
- ! t/op/tr.t
-____________________________________________________________________________
-[ 2482] By: jhi on 1998/12/14 17:52:42
- Log: Was missing use Text::Wrap.
- Branch: cfgperl
- ! t/lib/textfill.t
-____________________________________________________________________________
-[ 2481] By: jhi on 1998/12/14 16:00:22
- Log: nlist.h not yet Configure-probed but DynaLoader Linux-hinted.
-
- From: Jonathan Roy <roy@idle.com>
- To: perl5-porters@perl.org
- Subject: nlist.h add to Configure checks?
- Date: Sun, 13 Dec 1998 22:22:49 -0500
- Message-Id: <4.1.19981213221847.00a3e100@pop-server.tampabay.rr.com>
- Branch: cfgperl
- + ext/DynaLoader/hints/linux.pl
- ! MANIFEST
-____________________________________________________________________________
-[ 2480] By: jhi on 1998/12/14 15:02:44
- Log: Give up completely using nm in AIX.
-
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: Gurusamy Sarathy <gsar@engin.umich.edu>, Jarkko Hietaniemi <jhi@iki.fi>
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.005_54] AIX 4.3.1.0 fails to locate some functions
- Date: Thu, 10 Dec 1998 00:51:46 -0500
- Message-ID: <19981210005146.B29986@O2.chapin.edu>
- Branch: cfgperl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 2479] By: jhi on 1998/12/14 14:39:52
- Log: AIX' error messages are different.
-
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: Gurusamy Sarathy <gsar@engin.umich.edu>
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.005_54] AIX 4.1.3.0 fails pragma/warning.t
- Date: Thu, 10 Dec 1998 00:42:36 -0500
- Message-ID: <19981210004236.A29986@O2.chapin.edu>
-
- From: Michael Engel <engel@nms1.cc.huji.ac.il>
- To: perlbug@perl.com
- Subject: erroes in installing perl5*53 on IBM RS6000, aix 4.1
- Date: Mon, 14 Dec 1998 16:15:20 +0200 (IST)
- Message-ID: <Pine.A41.4.05_heb2.07.9812141609500.58712-300000@nms1.cc.huji.ac.il>
- Branch: cfgperl
- ! t/pragma/warn/doio
-____________________________________________________________________________
-[ 2475] By: jhi on 1998/12/13 12:35:55
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: jhi@iki.fi
- Cc: Carl_Adler@idx.com, perl5-porters@perl.org
- Subject: Re: stuff related to malloc.c
- Date: Sat, 12 Dec 1998 19:39:44 -0500 (EST)
- Message-Id: <199812130039.TAA21704@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! malloc.c
-____________________________________________________________________________
-[ 2474] By: jhi on 1998/12/13 12:32:42
- Log: Some notes about porting issues.
- Branch: cfgperl
- ! Porting/pumpkin.pod
-____________________________________________________________________________
-[ 2473] By: jhi on 1998/12/13 12:03:58
- Log: From: Laszlo Molnar <ml1050@freemail.c3.hu>
- To: Perl 5 Porters <perl5-porters@perl.org>
- Subject: [patch 5.005_02] dos-djgpp update
- Date: Sun, 13 Dec 1998 00:08:44 +0100
- Message-ID: <19981213000844.C264@beeblebrox>
- Branch: cfgperl
- ! djgpp/config.over
-____________________________________________________________________________
-[ 2472] By: gbarr on 1998/12/12 17:12:28
- Log: undo changes to Exporter.pm from #2312
- Branch: maint-5.005/perl
- ! lib/Exporter.pm
-____________________________________________________________________________
-[ 2465] By: jhi on 1998/12/12 12:31:21
- Log: Document that qw() taints.
-
- From: Christian Burger <burger@terra.mpikg-teltow.mpg.de>
- To: perlbug@perl.com
- Subject: taint problems
- Date: Sun, 1 Nov 1998 22:28:41 +0100 (MET)
- Message-Id: <199811012128.WAA23381@terra.mpikg-teltow.mpg.de>
- Branch: cfgperl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 2464] By: jhi on 1998/12/11 14:09:51
- Log: From: Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
- To: dist-users@foretune.co.jp
- Subject: (dist-users 871) dist-3.0@70 generates lots of main() without type
- Date: Mon, 07 Dec 1998 20:13:04 -0400
- Message-Id: <199812072313.UAA06181@sleipnir.valparaiso.cl>
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2463] By: jhi on 1998/12/11 13:29:54
- Log: MAXPATHLEN.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 2462] By: jhi on 1998/12/11 08:37:58
- Log: From: Mark Kettenis <kettenis@phys.uva.nl>
- To: perl5-porters@perl.org
- Subject: [PATCH]5.005_54 (CONFIG) Added support for GNU/Hurd
- Date: Thu, 10 Dec 1998 22:00:57 +0100 (CET)
- Message-Id: <199812102100.WAA00097@delius.kettenis.nl>
- Branch: cfgperl
- + hints/gnu.sh
-____________________________________________________________________________
-[ 2461] By: nick on 1998/12/10 21:00:50
- Log: Date: Wed, 09 Dec 1998 22:16:50 PST
- From: Vishal Bhatia <vishalb@hotmail.com>
- 1. Fixes the bug reported by Robin Barker <rmb1@cise.npl.co.uk>
- 2. Fixes the bug regarding return value of c-functions generated out
- of perl subs. ( Just includes the patch I sent earlier)
- 3. Incorporates the other changes that need to be done to get CC.pm
- use ISA search for packages and methods on the same lines as C.pm
-
- Vishal would appreciate comments about B::Stackobj changes from
- someone knowing that module well.
- Branch: perl
- ! ext/B/B/C.pm ext/B/B/CC.pm ext/B/B/Stackobj.pm
-____________________________________________________________________________
-[ 2460] By: jhi on 1998/12/08 08:11:27
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes ext/B/B.pm ext/B/B.xs ext/B/B/C.pm ext/B/B/CC.pm
- !> ext/B/B/Deparse.pm perl.h pod/perl.pod pod/perl5005delta.pod
- !> pod/perldiag.pod pod/perlfunc.pod pp_sys.c t/lib/io_unix.t
- !> toke.c util.c
-____________________________________________________________________________
-[ 2459] By: jhi on 1998/12/07 07:50:11
- Log: From: hansm@icgroup.nl
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_1 on OPENSTEP-Mach 4_1 (UNINSTALLED)
- Reply-To: hansmu@xs4all.nl
- To: perlbug@perl.com
- Date: Sun, 6 Dec 98 22:19:54 +0100
- Message-Id: <9812062116.AA26445@icgned.icgroup.nl>
- Branch: cfgperl
- ! util.c
-____________________________________________________________________________
-[ 2458] By: gsar on 1998/12/07 06:00:55
- Log: fix dup lexical
- Branch: perl
- ! ext/B/B/Deparse.pm t/lib/io_unix.t
-____________________________________________________________________________
-[ 2457] By: gsar on 1998/12/06 14:38:59
- Log: mention limit on line numbers reported by diagnostics
- Branch: perl
- ! pod/perl.pod toke.c
-____________________________________________________________________________
-[ 2456] By: gsar on 1998/12/06 13:49:02
- Log: branch perldelta.pod
- Branch: maint-5.005/perl
- +> pod/perldelta.pod
-____________________________________________________________________________
-[ 2455] By: gsar on 1998/12/06 13:47:21
- Log: clobber perldelta.pod to reestablish branch from perl5005delta.pod
- Branch: maint-5.005/perl
- - pod/perldelta.pod
-____________________________________________________________________________
-[ 2454] By: gsar on 1998/12/06 13:35:31
- Log: fix outdated/incorrect info about arbitrary limits
- Branch: perl
- ! Changes perl.h pod/perl.pod pod/perl5005delta.pod
- ! pod/perldiag.pod pod/perlfunc.pod pp_sys.c util.c
-____________________________________________________________________________
-[ 2453] By: nick on 1998/12/05 16:14:42
- Log: Avoid hard-coding op numbers
- Update CC.pm to save %INC, and to co-exist with new C.pm
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs ext/B/B/C.pm ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2452] By: nick on 1998/12/05 10:44:28
- Log: B.xs had its own code to calculate hash() which differed from
- PERL_HASH in hv.h - so all saved HV's were mangled - including %INC
- which meant that run-time require was re-done.
- Removed some debug from C.pm
- Branch: perl
- ! ext/B/B.xs ext/B/B/C.pm
-____________________________________________________________________________
-[ 2451] By: nick on 1998/12/04 21:58:49
- Log: Snapshot of re-worked B::C which compiles Tk apps at least as
- well as _54, but with pre-scan for classes and save the ISA scheme.
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 2450] By: nick on 1998/12/04 17:58:44
- Log: Vishal Bhatia's patch as a basis.
- Branch: perl
- ! ext/B/B/C.pm ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2449] By: jhi on 1998/12/04 16:39:21
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> t/op/goto.t t/op/tr.t
-____________________________________________________________________________
-[ 2448] By: gsar on 1998/12/04 06:06:49
- Log: tweak test for UTEST
- Branch: perl
- ! t/op/tr.t
-____________________________________________________________________________
-[ 2444] By: jhi on 1998/12/03 14:37:22
- Log: s/\bthe the\b/the/g *.pod
- Branch: cfgperl
- ! pod/perlfaq8.pod pod/perlfunc.pod pod/perlguts.pod
-____________________________________________________________________________
-[ 2443] By: jhi on 1998/12/03 13:39:53
- Log: Change#2441 aftermath.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH thread.h vms/subconfigure.com
-____________________________________________________________________________
-[ 2441] By: jhi on 1998/12/03 08:15:13
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@cor.newman.upenn.edu
- Subject: [PATCH 5.005_54]Initial VMS patches
- Date: 3 Dec 1998 01:05:55 +0200
- Message-ID: <MLIST_3.0.6.32.19981202141057.0339a7f0@ous.edu>
-
- The patch to config_h.SH requires more study because
- metaconfig needs to agree.
- Branch: cfgperl
- ! config_h.SH configure.com global.sym lib/ExtUtils/MM_VMS.pm
- ! t/lib/textfill.t t/pragma/warning.t vms/descrip_mms.template
- ! vms/gen_shrfls.pl vms/subconfigure.com vms/vmsish.h
-____________________________________________________________________________
-[ 2440] By: gsar on 1998/12/03 01:32:16
- Log: add failed check-in of goto.t from change#1867
- Branch: perl
- ! t/op/goto.t
-____________________________________________________________________________
-[ 2437] By: jhi on 1998/12/02 18:03:51
- Log: Fix most of the bad L<> links of
-
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- Subject: bad L<> links
- Reply-to: tchrist@perl.com
- To: perlbug@jhereg.perl.com
- Date: Tue, 11 Aug 1998 10:58:07 -0500
- Message-Id: <199808111658.KAA00484@jhereg.perl.com>
-
- The ones not fixed may require darker Pod::HTML magic,
- for example the perlguts.html#tags should work fine, IMHO.
- Branch: cfgperl
- ! pod/perl5005delta.pod pod/perlcall.pod pod/perldata.pod
- ! pod/perldiag.pod pod/perlfaq5.pod pod/perlfaq7.pod
- ! pod/perlfunc.pod pod/perlguts.pod pod/perllocale.pod
- ! pod/perlobj.pod pod/perlport.pod pod/perlsub.pod
- ! pod/perlvar.pod
-____________________________________________________________________________
-[ 2436] By: jhi on 1998/12/02 16:35:04
- Log: One paste too many in #2345.
- Branch: cfgperl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 2435] By: jhi on 1998/12/02 16:32:33
- Log: Pod::Html and Pod::Text were not locale-savvy:
- for example in =head1 all non-ASCII-\w-runs were
- turned into underscores in NAME tags. This could
- result in several NAME tags becoming identical.
- Reported by:
-
- From: Fyodor Krasnov <fyodor@aha.ru>
- Subject: pod2html vs Russian Characters
- To: Tom.Christiansen@snn.aha.ru, tchrist@perl.com
- Date: Tue, 24 Nov 1998 19:00:36 +0300 (MSK)
- Message-Id: <199811241600.TAA05149@stat.aha.ru>
- Branch: cfgperl
- ! lib/Pod/Html.pm lib/Pod/Text.pm
-____________________________________________________________________________
-[ 2434] By: jhi on 1998/12/02 10:29:00
- Log: The real Mc5_54 integration.
- Branch: cfgperl
- !> Changes MANIFEST pod/perlhist.pod pp_hot.c
-____________________________________________________________________________
-[ 2433] By: jhi on 1998/12/02 08:52:13
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_xx] Missing redirection of simple test program
- Date: Tue, 1 Dec 1998 13:40:12 -0500 (EST)
- Message-Id: <Pine.SUN.3.96.981201133546.4288K-100000@newton.phys>
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2432] By: jhi on 1998/12/02 08:49:47
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- To: Perl Porters <perl5-porters@perl.org>
- Subject: [PATCH 5.005_xx] erroneous 'none' in lddlflags
- Date: Tue, 1 Dec 1998 12:50:27 -0500 (EST)
- Message-Id: <Pine.SUN.3.96.981201124929.4288H-100000@newton.phys>
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2431] By: jhi on 1998/12/01 16:11:50
- Log: From: achampio@lehman.com (Alan Champion)
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_1 on sun4-solaris 2.3 (UNINSTALLED)
- To: perlbug@perl.com
- Date: 1 Dec 1998 17:36:33 +0200
- Message-ID: <MLIST_9812011518.AA00005@lonhpov1.lehman.com>
-
- Skip NIS includes.
- Branch: cfgperl
- ! t/op/pwent.t
-____________________________________________________________________________
-[ 2430] By: gsar on 1998/12/01 12:12:50
- Log: 5.005_54, as released
- Branch: perl
- ! Changes MANIFEST pod/perlhist.pod pp_hot.c
-____________________________________________________________________________
-[ 2429] By: jhi on 1998/12/01 11:28:39
- Log: From: Anton Berezin <tobez@plab.ku.dk>
- To: perl5-porters@perl.org
- Subject: [PATCH 5.005_54] Configure - hints/freebsd.sh signal handler type
- Date: 30 Nov 1998 19:46:24 +0100
- Message-ID: <864srhhvcv.fsf@lion.plab.ku.dk>
- Branch: cfgperl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2428] By: jhi on 1998/12/01 11:08:16
- Log: Integrate from _54 mainperl modulo the NetBSD ifdef in util.c.
- Branch: cfgperl
- +> (branch 30 files)
- !> (integrate 71 files)
-____________________________________________________________________________
-[ 2427] By: jhi on 1998/12/01 10:51:37
- Log: Default to accepting a hinted $randfunc even when $csym
- does not find it. (the previous defaylt behaviour was not
- to accept).
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2426] By: jhi on 1998/12/01 10:13:03
- Log: Separated the [:foo:] parsing to its own function.
- Passes all tests.
- Branch: cfgperl
- ! regcomp.c
-____________________________________________________________________________
-[ 2425] By: jhi on 1998/12/01 08:22:49
- Log: Typo in comments.
- Branch: cfgperl
- ! regexec.c
-____________________________________________________________________________
-[ 2424] By: jhi on 1998/12/01 08:21:38
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.005_*] Debugger 'v' command
- To: perl5-porters@perl.org (Mailing list Perl5)
- Date: 1 Dec 1998 07:55:11 +0200
- Message-ID: <MLIST_199812010534.AAA21371@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 2423] By: jhi on 1998/12/01 08:19:08
- Log: From: pvhp@forte.com (Peter Prymmer)
- Subject: [PATCH 5.005_03t1 && 5.005_54]dll linkage side decks for OS/390
- To: perl5-porters@perl.org
- Date: 1 Dec 1998 07:27:11 +0200
- Message-ID: <MLIST_9812010508.AA07791@forte.com>
- Branch: cfgperl
- ! hints/os390.sh
-____________________________________________________________________________
-[ 2417] By: jhi on 1998/11/30 08:14:00
- Log: s/SCM_CREDENTIALSS/SCM_CREDENTIAL/
- Branch: cfgperl
- ! ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 2416] By: jhi on 1998/11/30 08:00:15
- Log: Undo #2395, seems more like a problem in netbsd-current.
- Branch: cfgperl
- ! util.c
-
-----------------
-Version 5.005_54
-----------------
-
-____________________________________________________________________________
-[ 2414] By: gsar on 1998/11/30 02:23:55
- Log: more JPL tweaks
- Branch: perl
- - jpl/JNI/MANIFEST jpl/PerlInterpreter/Makefile
- ! Changes MANIFEST jpl/JNI/JNI.pm jpl/README
-____________________________________________________________________________
-[ 2413] By: gsar on 1998/11/30 01:35:56
- Log: stub bin/jpl that just runs JPL::Compile::files()
- Branch: perl
- + jpl/bin/jpl
-____________________________________________________________________________
-[ 2412] By: gsar on 1998/11/30 01:32:14
- Log: delete symlink
- Branch: perl
- - jpl/bin/jpl
-____________________________________________________________________________
-[ 2410] By: gsar on 1998/11/30 01:30:44
- Log: branch jpl from perlext to perl
- Branch: perl
- +> (branch 30 files)
-____________________________________________________________________________
-[ 2407] By: gsar on 1998/11/30 01:24:53
- Log: JPL tweaks to build with 5.005
- Branch: perlext
- ! jpl/JNI/JNI.xs jpl/JNI/typemap jpl/JPL/Compile.pm
- ! jpl/PerlInterpreter/PerlInterpreter.c jpl/README
-____________________________________________________________________________
-[ 2406] By: gsar on 1998/11/30 00:55:54
- Log: integrate changes#2273,2274,2288,2291 from maint-5.004
- Branch: perl
- ! Porting/patchls doio.c lib/Sys/Syslog.pm t/op/die_exit.t
-____________________________________________________________________________
-[ 2405] By: gsar on 1998/11/30 00:28:55
- Log: patchlevel up to 54
- Branch: perl
- ! patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 2403] By: gsar on 1998/11/29 23:35:50
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure Porting/Glossary Porting/config.sh Porting/config_H
- !> config_h.SH pod/perlfunc.pod t/op/grent.t t/op/pwent.t util.c
-____________________________________________________________________________
-[ 2402] By: gsar on 1998/11/29 23:08:42
- Log: sync Text::Wrap version number
- Branch: perl
- ! lib/Text/Wrap.pm
-____________________________________________________________________________
-[ 2401] By: gsar on 1998/11/29 22:56:21
- Log: textfill.t tweak
- Branch: perl
- ! t/lib/textfill.t
-____________________________________________________________________________
-[ 2400] By: gsar on 1998/11/29 22:50:41
- Log: update to Text::Wrap 98.112901 from David Muir Sharnoff
- <muir@idiom.com>
- Branch: perl
- + t/lib/textfill.t
- ! MANIFEST lib/Text/Wrap.pm
-____________________________________________________________________________
-[ 2399] By: gsar on 1998/11/29 22:28:05
- Log: updated to Text::Wrap 98.112801 from CPAN; one published change
- has happened without the authors knowledge or consent; the subversive
- version (which is in 5.00502) breaks one of the tests in the
- authors testsuite; attempts are being made to find a fix that
- avoids breaking code already running with the 5.005_02 version
- From: David Muir Sharnoff <muir@idiom.com>
- Date: Sat, 28 Nov 1998 04:34:17 PST
- Message-Id: <199811281234.EAA03082@idiom.com>
- Subject: Updated Text::Wrap, Time::ParseDate, File::Flock
- Branch: perl
- ! lib/Text/Wrap.pm t/lib/textwrap.t
-____________________________________________________________________________
-[ 2397] By: nick on 1998/11/29 20:13:58
- Log: Update docs and English.pm for $^C
- Branch: perl
- ! lib/English.pm pod/perlvar.pod
-____________________________________________________________________________
-[ 2396] By: jhi on 1998/11/29 20:13:03
- Log: Mirror #2384.
- Branch: cfgperl
- ! t/op/pwent.t
-____________________________________________________________________________
-[ 2395] By: jhi on 1998/11/29 19:59:12
- Log: Newer NetBSDs don't have NSIG in <sys/signal.h>, they need <signal.h>.
- Branch: cfgperl
- ! util.c
-____________________________________________________________________________
-[ 2394] By: gsar on 1998/11/29 19:49:08
- Log: updated perlreftut.pod
- Branch: perl
- ! pod/perlreftut.pod
-____________________________________________________________________________
-[ 2393] By: gsar on 1998/11/29 19:31:56
- Log: misc tweaks
- Branch: perl
- ! ext/IO/Makefile.PL lib/Test.pm t/lib/io_poll.t t/op/sort.t
-____________________________________________________________________________
-[ 2392] By: gsar on 1998/11/29 19:31:18
- Log: notes about -DPERL_POLLUTE
- Branch: perl
- ! INSTALL pod/perldelta.pod win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2391] By: gsar on 1998/11/29 19:13:52
- Log: explain various win32 build caveats more clearly
- Branch: perl
- ! README.win32 win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2390] By: gsar on 1998/11/29 16:51:59
- Log: remove I_POLL detection (Configure will do that now)
- Branch: perl
- ! ext/IO/Makefile.PL
-____________________________________________________________________________
-[ 2389] By: jhi on 1998/11/29 16:39:16
- Log: Add I_POLL for IO 1.20.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH
-____________________________________________________________________________
-[ 2388] By: gsar on 1998/11/29 16:23:30
- Log: add p4desc (augments 'p4 describe' output with diffs for new files)
- Branch: perl
- + Porting/p4desc
- ! MANIFEST
-____________________________________________________________________________
-[ 2387] By: gsar on 1998/11/29 16:08:03
- Log: another threads reliability fix: serialize writes to thr->threadsv
- avoid most uses of PL_na (which is much more inefficient than a
- simple local); update docs to suit; PL_na now being thr->Tna may
- be a minor compatibility issue for extensions--will require dTHR
- outside of XSUBs (those get automatic dTHR)
- Branch: perl
- ! XSUB.h djgpp/djgpp.c doio.c doop.c dump.c ext/B/B.xs
- ! ext/DB_File/DB_File.xs ext/DynaLoader/dl_next.xs
- ! ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs ext/Thread/Thread.xs
- ! ext/attrs/attrs.xs gv.c malloc.c mg.c op.c
- ! os2/OS2/REXX/REXX.xs os2/os2.c perl.c perly.c perly.y
- ! pod/perlcall.pod pod/perlembed.pod pod/perlguts.pod
- ! pod/perlxs.pod pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c run.c sv.c
- ! t/op/pwent.t taint.c toke.c universal.c vmesa/vmesa.c
- ! vms/ext/Stdio/Stdio.xs vms/perly_c.vms vms/vms.c win32/win32.c
-____________________________________________________________________________
-[ 2386] By: jhi on 1998/11/29 15:40:42
- Log: Tune the "if" entry.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2385] By: gsar on 1998/11/29 12:40:28
- Log: various fixes for race conditions under threads: mutex locks based
- on PL_threadnum were seriously flawed, since it means more than one
- thread could enter the critical region; PL_na was global instead of
- thread-local; child thread could finish and free thr structures
- before Thread->new() got around to creating the Thread object;
- cv_clone() needed locking, as it mucks with PL_comppad and other
- global data; new_struct_thread() needed to lock template-thread's
- mutex while copying its data
- Branch: perl
- ! embedvar.h ext/Thread/Thread.xs gv.c op.c perl.c perlvars.h
- ! pp_hot.c thrdvar.h thread.h util.c win32/win32thread.c
-____________________________________________________________________________
-[ 2384] By: gsar on 1998/11/29 10:54:38
- Log: s/warn/print/ on multiply defined groups
- Branch: perl
- ! t/op/grent.t
-____________________________________________________________________________
-[ 2383] By: gsar on 1998/11/29 10:48:39
- Log: backout change#2334
- Branch: perl
- ! pod/perlfunc.pod pp_hot.c sv.c thrdvar.h
-____________________________________________________________________________
-[ 2382] By: jhi on 1998/11/29 10:33:40
- Log: Better NetInfo behaviour.
- Branch: cfgperl
- ! t/op/grent.t t/op/pwent.t
-____________________________________________________________________________
-[ 2381] By: jhi on 1998/11/29 10:08:15
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> ext/IO/ChangeLog ext/IO/lib/IO/Dir.pm ext/IO/lib/IO/Poll.pm
- +> ext/IO/lib/IO/Socket/INET.pm ext/IO/lib/IO/Socket/UNIX.pm
- +> ext/IO/poll.c ext/IO/poll.h pod/perlreftut.pod
- +> t/lib/io_const.t t/lib/io_dir.t t/lib/io_multihomed.t
- +> t/lib/io_poll.t t/lib/io_unix.t
- !> (integrate 58 files)
-____________________________________________________________________________
-[ 2380] By: gsar on 1998/11/29 08:22:49
- Log: prefer IO::Handle for IO if FileHandle:: is empty (as suggested by
- Tim Bunce)
- Branch: perl
- ! gv.c
-____________________________________________________________________________
-[ 2379] By: gsar on 1998/11/29 07:06:43
- Log: fix for pat.t failure under USE_THREADS
- Branch: perl
- ! pp_ctl.c regexec.c
-____________________________________________________________________________
-[ 2378] By: nick on 1998/11/28 22:46:57
- Log: More C.pm tweaks
- Save globs even if we have saved cv itself before - may be imported.
-
- While we don't save "bootstrap" CV we need to provide a stub,
- so that if we require it later we don't fall through and attempt
- to DynaLoad module again.
-
- Attempt to save %INC so that "require" does not reload things
- we have compiled-in (does not work right yet - seems to be due
- to PL_incgv being created in perl_parse() current scheme setting
- GvHV() is "better" than saving the glob, but still does not
- work as I expect).
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 2377] By: gsar on 1998/11/28 22:30:38
- Log: various tweaks; result passes all tests for normal build on Solaris;
- fails two pat.t tests under USE_THREADS; io_poll.t test#3 fails on
- win32 due to lack of select() that works on non-socket fds
- Branch: perl
- ! ext/IO/poll.c regcomp.c regexec.c scope.c
- ! t/lib/io_multihomed.t win32/makefile.mk
-____________________________________________________________________________
-[ 2376] By: gsar on 1998/11/28 20:44:39
- Log: add $config_args to perl -V display (suggested by Ilya Zakharevich)
- Branch: perl
- ! myconfig
-____________________________________________________________________________
-[ 2375] By: gsar on 1998/11/28 20:42:58
- Log: integrate cfgperl changes into mainline
- Branch: perl
- !> Configure ext/POSIX/hints/dynixptx.pl myconfig t/op/grent.t
- !> t/op/pwent.t t/op/undef.t t/pragma/locale.t util.c
-____________________________________________________________________________
-[ 2374] By: gsar on 1998/11/28 20:02:03
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 5 Nov 1998 02:21:12 -0500 (EST)
- Message-Id: <199811050721.CAA27998@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00553] Yet another OS/2 patch
- Branch: perl
- ! os2/Changes os2/Makefile.SHs os2/os2.c t/pragma/warn/op
-____________________________________________________________________________
-[ 2373] By: gsar on 1998/11/28 19:30:06
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 28 Nov 1998 01:51:56 -0500 (EST)
- Message-Id: <199811280651.BAA18095@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Change $#+
- Branch: perl
- ! mg.c pod/perlvar.pod t/op/pat.t
-____________________________________________________________________________
-[ 2372] By: gsar on 1998/11/28 19:28:00
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 28 Nov 1998 00:33:17 -0500 (EST)
- Message-Id: <199811280533.AAA25654@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Finishing off SNOBOL: $1 in (?{})
- Branch: perl
- ! embedvar.h mg.c objXSUB.h perl.c regexec.c t/op/pat.t
- ! thrdvar.h
-____________________________________________________________________________
-[ 2371] By: gsar on 1998/11/28 19:23:53
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 27 Nov 1998 16:16:48 -0500 (EST)
- Message-Id: <199811272116.QAA03502@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] better -Mre=debugcolor
- Branch: perl
- ! embedvar.h objXSUB.h regexec.c thrdvar.h
-____________________________________________________________________________
-[ 2370] By: gsar on 1998/11/28 19:21:17
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 27 Nov 1998 15:22:19 -0500 (EST)
- Message-Id: <199811272022.PAA17874@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] regcolors
- Branch: perl
- ! embed.h global.sym objXSUB.h proto.h regcomp.c regexec.c
-____________________________________________________________________________
-[ 2369] By: gsar on 1998/11/28 19:00:15
- Log: allow final period in a file (not followed by a newline) to
- terminate format spec
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 2368] By: gsar on 1998/11/28 18:58:25
- Log: Liblist tweak suggested by Swen Thuemmler <Swen.Thuemmler@paderlinx.de>;
- add C<$Config{installarchlib}/CORE> to the default locations searched
- on win32
- Branch: perl
- ! lib/ExtUtils/Liblist.pm
-____________________________________________________________________________
-[ 2367] By: gsar on 1998/11/28 18:46:05
- Log: applied suggested patch with PERL_OBJECT tweaks
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 26 Nov 1998 02:46:20 -0500 (EST)
- Message-Id: <199811260746.CAA23164@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] Enable $_ and pos() inside (?{ CODE }) in RExen
- Branch: perl
- ! embed.h embed.pl embedvar.h objXSUB.h pp_ctl.c proto.h
- ! regexec.c t/op/pat.t thrdvar.h
-____________________________________________________________________________
-[ 2366] By: gsar on 1998/11/28 18:38:34
- Log: additional documentation for qr//
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199811260751.CAA24560@monk.mps.ohio-state.edu>
- Date: Thu, 26 Nov 1998 02:51:09 -0500 (EST)
- Subject: [PATCH 5.005_*] Documentation (fwd)
- Branch: perl
- ! pod/perlfunc.pod pod/perlop.pod pod/perlpod.pod
-____________________________________________________________________________
-[ 2365] By: gsar on 1998/11/28 18:35:35
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 25 Nov 1998 23:33:45 -0500 (EST)
- Message-Id: <199811260433.XAA29281@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Fix \G in REx without //g
- Branch: perl
- ! cop.h embedvar.h objXSUB.h pp.c pp_ctl.c pp_hot.c regexec.c
- ! regexp.h t/op/pat.t thrdvar.h
-____________________________________________________________________________
-[ 2364] By: gsar on 1998/11/28 18:24:20
- Log: update Test.pm to Test-1.12; tweak 're' detection
- Branch: perl
- ! lib/Test.pm
-____________________________________________________________________________
-[ 2363] By: gsar on 1998/11/28 18:12:04
- Log: avoid command-line quoting portability problems in lex_assign.t
- Branch: perl
- ! t/op/lex_assign.t
-____________________________________________________________________________
-[ 2362] By: gsar on 1998/11/28 18:08:50
- Log: From: John Tobey <jtobey@channel1.com>
- Date: Thu, 19 Nov 1998 14:14:15 -0500 (EST)
- Message-Id: <m0zgZWx-000FOgC@feynman.localnet>
- Subject: PATCH: document English.pm sawampersand and thread issues
- Branch: perl
- ! lib/English.pm pod/perlvar.pod
-____________________________________________________________________________
-[ 2361] By: gsar on 1998/11/28 18:03:04
- Log: fix uninitialized warnings
- From: Brian Callaghan <callagh@itginc.com>
- Date: Thu, 19 Nov 1998 17:49:10 -0800
- Message-Id: <3654CA96.B64FCAEB@itginc.com>
- Subject: Complete.pm patch (version 1.1)
- Branch: perl
- ! lib/Term/Complete.pm
-____________________________________________________________________________
-[ 2360] By: gsar on 1998/11/28 17:59:16
- Log: s/Array/List/ suggested by John Tobey
- Branch: perl
- ! pod/perldata.pod
-____________________________________________________________________________
-[ 2359] By: gsar on 1998/11/28 17:47:48
- Log: update tie() entry in perlfunc to reflect TIEARRAY and TIEHANDLE
- Branch: perl
- ! lib/Tie/Handle.pm pod/perlfunc.pod
-____________________________________________________________________________
-[ 2358] By: jhi on 1998/11/28 17:23:15
- Log: Revamp the locale tests.
- (0) Instead of rewiring a few locales scan for them.
- (1) Bogus test #101 removed.
- (2) All the locales are checked, the lists of failed
- and non-failed ones are displayed.
- (3) The test #103 is again 'active' so that it may fail.
- (4) To balance (3) a hopefully pacifying message is shown
- if the #103 fails.
- Branch: cfgperl
- ! t/pragma/locale.t
-____________________________________________________________________________
-[ 2357] By: gsar on 1998/11/28 17:21:07
- Log: add perlreftut.pod
- Branch: perl
- + pod/perlreftut.pod
- ! MANIFEST pod/Makefile pod/buildtoc pod/perl.pod
- ! pod/perlref.pod pod/roffitall vms/descrip_mms.template
- ! win32/pod.mak
-____________________________________________________________________________
-[ 2356] By: jhi on 1998/11/28 16:58:01
- Log: Change #2346 fallout.
- Branch: cfgperl
- ! t/op/undef.t
-____________________________________________________________________________
-[ 2355] By: gsar on 1998/11/28 16:46:43
- Log: IO.xs tweaks; avoid coredump in io_xs.t; remove newCONSTSUB();
- ANSI prototypes
- Branch: perl
- ! ext/IO/IO.xs
-____________________________________________________________________________
-[ 2354] By: gsar on 1998/11/28 16:08:07
- Log: add IO-1.20; mess with t/lib/io_*.t in an attempt to
- keep platform hacks that aren't in the 1.20 dist; add new files
- to MANIFEST; hack Makefile.PL; result hasn't been tested
- anywhere
- Branch: perl
- + ext/IO/ChangeLog ext/IO/lib/IO/Dir.pm ext/IO/lib/IO/Poll.pm
- + ext/IO/lib/IO/Socket/INET.pm ext/IO/lib/IO/Socket/UNIX.pm
- + ext/IO/poll.c ext/IO/poll.h t/lib/io_const.t t/lib/io_dir.t
- + t/lib/io_multihomed.t t/lib/io_poll.t t/lib/io_unix.t
- ! MANIFEST ext/IO/IO.pm ext/IO/IO.xs ext/IO/Makefile.PL
- ! ext/IO/README ext/IO/lib/IO/File.pm ext/IO/lib/IO/Handle.pm
- ! ext/IO/lib/IO/Pipe.pm ext/IO/lib/IO/Seekable.pm
- ! ext/IO/lib/IO/Select.pm ext/IO/lib/IO/Socket.pm
- ! t/lib/io_sock.t t/lib/io_udp.t
-____________________________________________________________________________
-[ 2353] By: jhi on 1998/11/28 15:51:03
- Log: Locale collation, ctype, and numeric, were initialized wrong
- (if LC_ALL or LANG were unset, so were the collation/ctype/numeric),
- as reported by
-
- From: Ilya.Sandler@etak.com (Ilya Sandler)
- Subject: a bug in locale handling: LC_COLLATE ignored sometimes
- To: perlbug@perl.com
- Date: 25 Nov 1998 04:53:52 +0200
- Message-ID: <MLIST_199811250226.SAA12590@axi001.etak.sw>
- Branch: cfgperl
- ! util.c
-____________________________________________________________________________
-[ 2352] By: nick on 1998/11/28 15:21:59
- Log: Implement $^C to allow perl access to -c flag - I think this
- was agreed once...
- Branch: perl
- ! gv.c mg.c
-____________________________________________________________________________
-[ 2351] By: jhi on 1998/11/28 15:14:24
- Log: Change #2251 fixup.
- Branch: cfgperl
- ! myconfig
-____________________________________________________________________________
-[ 2350] By: jhi on 1998/11/28 14:58:19
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> ext/Devel/Peek/Changes ext/Devel/Peek/Makefile.PL
- +> ext/Devel/Peek/Peek.pm ext/Devel/Peek/Peek.xs
- +> pod/perl5005delta.pod
- !> (integrate 49 files)
-____________________________________________________________________________
-[ 2349] By: jhi on 1998/11/28 14:27:36
- Log: Passwd and group file groveling.
- Branch: cfgperl
- ! t/op/grent.t t/op/pwent.t
-____________________________________________________________________________
-[ 2348] By: gsar on 1998/11/28 14:09:50
- Log: more conservative version of changes#2345,2346,2347; those break
- C<defined(@{"foo::ISA"})> which seems to be extensively used in
- the libs :-(
- Branch: perl
- ! pp.c t/op/method.t
-____________________________________________________________________________
-[ 2347] By: gsar on 1998/11/28 13:36:08
- Log: tweak bogus test
- Branch: perl
- ! t/op/method.t
-____________________________________________________________________________
-[ 2346] By: gsar on 1998/11/28 13:20:34
- Log: test cases for previous change
- Branch: perl
- ! t/op/undef.t
-____________________________________________________________________________
-[ 2345] By: gsar on 1998/11/28 13:07:17
- Log: fix typo in pp_defined() causing C<defined %tied> to fail
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 2344] By: gsar on 1998/11/28 13:03:29
- Log: s/comment/comment_t/ tweak (suggested by John Gorman
- <jgorman@webbysoft.com>)
- Branch: perl
- ! ext/B/B/Assembler.pm ext/B/B/Disassembler.pm
-____________________________________________________________________________
-[ 2343] By: gsar on 1998/11/28 12:52:40
- Log: add (stub) perldelta.pod
- Branch: perl
- + pod/perldelta.pod
-____________________________________________________________________________
-[ 2342] By: gsar on 1998/11/28 12:49:26
- Log: rename perldelta.pod to perl5005delta.pod in preparation for
- starting a new one
- Branch: perl
- +> pod/perl5005delta.pod
- - pod/perldelta.pod
- ! MANIFEST pod/perl.pod
-____________________________________________________________________________
-[ 2341] By: gsar on 1998/11/28 12:41:55
- Log: fix MALLOC_LOCK #define
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 2340] By: gsar on 1998/11/28 12:18:23
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 15 Nov 1998 20:25:50 -0500 (EST)
- Message-Id: <199811160125.UAA05268@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_53] OS/2 events get closer to Perl
- Branch: perl
- ! os2/Changes os2/os2.c os2/os2.sym os2/os2ish.h
-____________________________________________________________________________
-[ 2339] By: jhi on 1998/11/28 11:59:01
- Log: Add -lm to dynix/ptx POSIX hints.
- From: "Martin J. Bligh" <mbligh@sequent.com>
- To: jhi@iki.fi
- Subject: Re: Making Perl work on DYNIX/ptx
- Date: Wed, 25 Nov 1998 10:34:41 -0800
- Message-ID: <1457015007.911990081@w-186d219.rhe.sequent.com>
- Branch: cfgperl
- ! ext/POSIX/hints/dynixptx.pl
-____________________________________________________________________________
-[ 2338] By: jhi on 1998/11/28 11:57:19
- Log: Detypo.
- Branch: cfgperl
- ! lib/filetest.pm
-____________________________________________________________________________
-[ 2337] By: jhi on 1998/11/28 11:56:29
- Log: Better LD_LIBRARY_PATH instructions for Bourneists.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2336] By: gsar on 1998/11/28 11:41:14
- Log: teach CPAN.pm to ignore beta perl distributions when looking for
- modules
- From: root@dogberry.rutgers.edu (root)
- Date: Thu, 12 Nov 1998 23:08:39 -0500
- Message-Id: <199811130408.XAA10578@dogberry.rutgers.edu>
- Subject: recompile tries getting a perl distribution
- Branch: perl
- ! lib/CPAN.pm
-____________________________________________________________________________
-[ 2335] By: gsar on 1998/11/28 11:27:46
- Log: make $1 et al readonly under threads; make C<undef $1> fail like
- C<$1 = undef> does
- Branch: perl
- ! op.c pp.c t/op/undef.t
-____________________________________________________________________________
-[ 2334] By: gsar on 1998/11/28 10:24:52
- Log: s/Regexp/re/ and clarify policy on lowercased object namespaces
- Branch: perl
- ! pod/perlfunc.pod pp_hot.c sv.c thrdvar.h
-____________________________________________________________________________
-[ 2333] By: gsar on 1998/11/28 09:36:40
- Log: document changed PERL_HASH()
- Branch: perl
- ! pod/perlfunc.pod pod/perlguts.pod
-____________________________________________________________________________
-[ 2332] By: nick on 1998/11/27 21:10:27
- Log: Handle INIT list in C.pm
- 1. Provide init_av() from B.xs
- 2. Export it in B.pm
- 3. Use it in C.pm
- Also disable some pruning in savecv() which seems to undo
- my previous patch.
- Experimental feature - save pathnames of .so files in easily
- grep-able form for use in wrapper to feed to linker.
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs ext/B/B/C.pm
-____________________________________________________________________________
-[ 2327] By: gsar on 1998/11/27 15:12:01
- Log: integrate change#2315 from maint-5.005
- Branch: perl
- ! t/op/sort.t
- !> op.c sv.c
-____________________________________________________________________________
-[ 2326] By: gsar on 1998/11/27 15:00:42
- Log: integrate changes#2304,2305,2306,2308 from maint-5.005
- Branch: perl
- !> ext/DynaLoader/dl_mpeix.xs installperl lib/ExtUtils/MM_Unix.pm
- !> lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MakeMaker.pm
- !> lib/ExtUtils/typemap
-____________________________________________________________________________
-[ 2325] By: gsar on 1998/11/27 14:46:18
- Log: malloc bugfix and documentation from Ilya Zakharevich
- Date: Tue, 24 Nov 1998 17:24:55 -0500 (EST)
- Message-Id: <199811242224.RAA22618@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Re: Internal coredump
- --
- Date: Thu, 26 Nov 1998 03:06:10 -0500 (EST)
- Message-Id: <199811260806.DAA28913@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] malloc.c documentation
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 2324] By: gsar on 1998/11/27 14:41:38
- Log: B::C tweaks to allow Tk compiles from Nick Ing-Simmons
- Branch: perl
- ! ext/B/B/C.pm
-____________________________________________________________________________
-[ 2323] By: gsar on 1998/11/27 14:33:44
- Log: From: maeda@src.ricoh.co.jp
- Date: Tue, 24 Nov 1998 10:37:45 +0900
- Message-Id: <199811240137.KAA05867@luna.src.ricoh.co.jp>
- Subject: format "..." bug
- Branch: perl
- ! pp_ctl.c t/op/write.t
-____________________________________________________________________________
-[ 2322] By: gsar on 1998/11/27 14:20:12
- Log: add ext/Devel/Peek
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Mon, 23 Nov 1998 00:48:11 +0100
- Message-ID: <36589ec9.49964585@smtp1.ibm.net>
- Subject: [PATCH 5.005_53] Devel::Peek integration
- Branch: perl
- + ext/Devel/Peek/Changes ext/Devel/Peek/Makefile.PL
- + ext/Devel/Peek/Peek.pm ext/Devel/Peek/Peek.xs
- ! MANIFEST dump.c embed.h embedvar.h global.sym intrpvar.h
- ! objXSUB.h perl.c perl.h proto.h sv.c sv.h thrdvar.h
- ! win32/GenCAPI.pl win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2321] By: gsar on 1998/11/27 13:03:08
- Log: ensure 'make regen_headers' even without perl installed
- (suggested by Ilya Zakharevich)
- Branch: perl
- ! bytecode.pl warning.pl
-____________________________________________________________________________
-[ 2320] By: gsar on 1998/11/27 12:58:36
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 9 Nov 1998 19:03:25 -0500 (EST)
- Message-Id: <199811100003.TAA05815@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Cosmetic malloc patch
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 2319] By: gsar on 1998/11/27 12:56:13
- Log: eliminate dup hunk from integration
- Branch: perl
- ! lib/filetest.pm perl.h
-____________________________________________________________________________
-[ 2318] By: gsar on 1998/11/27 12:50:08
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> ext/DB_File/hints/dynixptx.pl ext/POSIX/hints/dynixptx.pl
- ! pod/perlfaq4.pod
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 2317] By: jhi on 1998/11/27 11:38:13
- Log: C<-x>.
- Branch: cfgperl
- ! lib/filetest.pm
-____________________________________________________________________________
-[ 2316] By: jhi on 1998/11/27 11:10:22
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> XSUB.h embed.h embed.pl embedvar.h ext/Thread/Thread.xs
- !> iperlsys.h mg.c objXSUB.h op.c pp_ctl.c pp_sys.c proto.h
- !> t/comp/package.t t/lib/dumper.t t/pragma/warn/pp_ctl
- !> universal.c util.c win32/GenCAPI.pl win32/win32.h
- !> win32/win32sck.c
-____________________________________________________________________________
-[ 2315] By: gbarr on 1998/11/27 05:16:50
- Log: integrate change#2246 from mainline, while still allowing
- C<sort $globref @foo>
-
- allow C<sort $coderef @foo>
- Branch: maint-5.005/perl
- ! op.c sv.c
- !> t/op/sort.t
-____________________________________________________________________________
-[ 2308] By: gbarr on 1998/11/27 00:11:44
- Log: Updates for MPE/iX DynaLoader and installperl, via private mail
- forwarded by Jarkko Hietaniemi from Mark Bixby
- Branch: maint-5.005/perl
- ! ext/DynaLoader/dl_mpeix.xs installperl
-____________________________________________________________________________
-[ 2306] By: gbarr on 1998/11/26 23:44:47
- Log: Allow PL_FILES to have multiple targets from one source by allowing
- an array ref as the value in the hash
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2305] By: gbarr on 1998/11/26 23:38:06
- Log: fix unsigned variables to use SvUV and sv_setuv
- Branch: maint-5.005/perl
- ! lib/ExtUtils/typemap
-____________________________________________________________________________
-[ 2304] By: gbarr on 1998/11/26 23:36:17
- Log: Fix embeded \n in ABSTRACT and <> in AUTHOR
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 2301] By: gsar on 1998/11/26 10:16:54
- Log: fix PL_defoutgv leak under threads
- Branch: perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 2300] By: gsar on 1998/11/26 09:04:44
- Log: properly free temporaries created by threads
- Branch: perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 2299] By: gsar on 1998/11/26 06:51:16
- Log: fix C<if (...) { package Foo; ... }> misoptimization that fails
- to set the package for the block properly
- Branch: perl
- ! op.c t/comp/package.t t/lib/dumper.t
-____________________________________________________________________________
-[ 2298] By: nick on 1998/11/24 22:04:20
- Log: Part-1 of tweaks to allow Tk to be "compiled"
- Make XS_UNIVERSAL_xxx non-static so they can be found in libperl.
- (May also need attention to exports etc. - to follow.)
- Branch: perl
- ! universal.c
-____________________________________________________________________________
-[ 2294] By: jhi on 1998/11/23 10:44:26
- Log: The new socket tests need in some platforms
- to #include <sys/types.h>.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2293] By: jhi on 1998/11/23 10:33:42
- Log: From: Gerben Wierda <G.C.Th.Wierda@AWT.nl>
- To: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Subject: Re: Test results for perl5.005_53 under NEXTSTEP 3.3 (intel)
- Date: Mon, 23 Nov 1998 10:07:04 +0100
- Message-Id: <9811230907.AA06484@AWT.nl>
-
- NeXTstep NetInfo uses nidump to get the user/group databases.
- Branch: cfgperl
- ! t/op/grent.t t/op/pwent.t
-____________________________________________________________________________
-[ 2291] By: TimBunce on 1998/11/22 22:23:09
- Log: Updated Porting/patchls utility.
- Branch: maint-5.004/perl
- ! Porting/patchls
-____________________________________________________________________________
-[ 2288] By: TimBunce on 1998/11/22 21:46:11
- Log: Title: "Buglet in Sys::Syslog.pm (with fix)"
- From: Henrik Tougaard <ht.000@foa.dk>
- Msg-ID: <Pine.OSF.3.95.981117092651.1492C-100000@sula.pensam.dk>
- Files: lib/Sys/Syslog.pm
- Branch: maint-5.004/perl
- ! lib/Sys/Syslog.pm
-____________________________________________________________________________
-[ 2286] By: jhi on 1998/11/22 19:08:42
- Log: Change#2284 aid: allow also for plain old MSG_ and SCM_ #defines.
- Branch: cfgperl
- ! ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 2285] By: jhi on 1998/11/22 18:21:07
- Log: MSG_PROXY for GNU/Hurd (previously we believed that
- all GNU libc platforms have MSG_PROXY. Untrue).
- In fact this ended up as a major MSG_* and SCM_*
- update. The MSG_XXX known to be enums in some
- versions of the glibc are now probed for and respective
- HAS_MSG_XXX are defined. While I was at it I noticed
- SCM_RIGHTS being similarly an enum. This reminded me of
- an ancient discussion in perl5-porters:
- http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/9612/msg01017.html
- The BSD socket interface has a nifty feature for passing
- file descriptors and credentials--via sockets. It may be
- too late to add this functionality to the CORE but
- at least Configure now probes for the functions,
- structs, and includes, defining the appropriate
- HAS_YYY and I_ZZZ, and the Socket extension exports
- the constants, in case somebody wants to write an
- extension for this interface.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH ext/Socket/Socket.pm ext/Socket/Socket.xs
- ! iperlsys.h
-____________________________________________________________________________
-[ 2284] By: jhi on 1998/11/22 18:13:21
- Log: perlhist.pod 1.54, containing 5_53.
- Branch: cfgperl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 2274] By: TimBunce on 1998/11/22 16:25:46
- Log: Preserve errno around fcntl(fd,F_SETFD,fd > maxsysfd) in do_open()
- Branch: maint-5.004/perl
- ! doio.c
-____________________________________________________________________________
-[ 2273] By: TimBunce on 1998/11/22 16:17:43
- Log: Improve op/die_exit.t test for implicit close changing $!
- Branch: maint-5.004/perl
- ! t/op/die_exit.t
-____________________________________________________________________________
-[ 2268] By: jhi on 1998/11/22 14:44:11
- Log: Fix thinko.
- Branch: cfgperl
- ! hints/dynixptx.sh
-____________________________________________________________________________
-[ 2267] By: jhi on 1998/11/22 13:19:41
- Log: Document the d_socket override.
- Branch: cfgperl
- ! hints/dynixptx.sh
-____________________________________________________________________________
-[ 2266] By: jhi on 1998/11/22 12:12:29
- Log: From: John Tobey <jtobey@channel1.com>
- Subject: [PATCH] perlfaq typos
- To: perl5-porters@perl.com
- Date: 22 Nov 1998 04:25:15 +0200
- Message-ID: <MLIST_m0zhPeF-000FOgC@feynman.localnet>
- Branch: cfgperl
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq7.pod pod/perlfaq8.pod
-____________________________________________________________________________
-[ 2265] By: jhi on 1998/11/22 12:06:29
- Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Subject: DB_File 1.61 patch for 5.005_53 & 5.005_02
- Newsgroups: hut.lists.perl5-porters
- To: gsar@engin.umich.edu (Gurusamy Sarathy)
- Cc: perl5-porters@perl.org (Perl5 Porters)
- Date: 20 Nov 1998 12:20:41 +0200
- Branch: cfgperl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs
-____________________________________________________________________________
-[ 2264] By: jhi on 1998/11/22 11:55:09
- Log: NeXTstep /etc/group and /etc/passwd are used only at boot time,
- From: Gerben Wierda <G.C.Th.Wierda@AWT.nl>
- Subject: Test results for perl5.005_53 under NEXTSTEP 3.3 (intel)
- To: perlbug@perl.com
- Date: 20 Nov 1998 18:39:06 +0200
- Lines: 47
- Message-ID: <MLIST_9811201533.AA22148@AWT.nl>
- Branch: cfgperl
- ! t/op/grent.t t/op/pwent.t
-____________________________________________________________________________
-[ 2263] By: jhi on 1998/11/22 11:42:59
- Log: Permission testing is tricky when we have too much power.
- Problem reported in
- From: Gerben Wierda <G.C.Th.Wierda@AWT.nl>
- Subject: Test results for perl5.005_53 under NEXTSTEP 3.3 (intel)
- To: perlbug@perl.com
- Date: 20 Nov 1998 18:39:06 +0200
- Message-ID: <MLIST_9811201533.AA22148@AWT.nl>
- Branch: cfgperl
- ! t/op/filetest.t
-____________________________________________________________________________
-[ 2262] By: gsar on 1998/11/22 11:37:02
- Log: fix broken CAPI generation
- Branch: perl
- ! win32/GenCAPI.pl
-____________________________________________________________________________
-[ 2261] By: jhi on 1998/11/22 11:17:00
- Log: -x should be C<-x>, reported by Gerben Wierda.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2260] By: gsar on 1998/11/22 11:12:02
- Log: phase 2 of PERL_OBJECT cleanup; objXSUB.h autogeneration
- Branch: perl
- ! XSUB.h embed.h embed.pl embedvar.h iperlsys.h objXSUB.h
- ! proto.h
-____________________________________________________________________________
-[ 2259] By: jhi on 1998/11/22 11:06:40
- Log: From: "Kurt D. Starsinic" <kstar@chapin.edu>
- Subject: Re: [PATCH] Re: pod2man bug in date generated line
- To: Albert Dvornik <bert@genscan.com>, "Larry W. Virden" <lvirden@cas.org>
- Cc: perlbug@perl.com
- Date: 20 Nov 1998 21:30:17 +0200
- Message-ID: <MLIST_19981120131523.A464@O2.chapin.edu>
- Branch: cfgperl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 2256] By: jhi on 1998/11/21 10:44:01
- Log: From: Thomas Bowditch <bowditch@inmet.com>
- Subject: Benchmark.pm suggestion
- To: jhi@iki.fi, Tim.Bunce@ig.co.uk
- Date: Fri, 20 Nov 1998 17:43:46 -0500
- Message-Id: <199811202243.RAA26252@harp.camb.inmet.com>
-
- Added timesum().
- Branch: cfgperl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 2255] By: gsar on 1998/11/21 08:45:06
- Log: another win32 portability fix: make sysread() and syswrite()
- work on sockets
- Branch: perl
- ! pp_sys.c win32/win32.h
-____________________________________________________________________________
-[ 2254] By: gsar on 1998/11/21 07:49:06
- Log: win32_recvfrom() compatibility fix
- Branch: perl
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 2253] By: jhi on 1998/11/20 08:22:06
- Log: From: Mark Bixby <markb@spock.dis.cccd.edu>
- To: jhi@iki.fi
- Subject: MPE/iX Perl 5.005_02 oops
- Date: Thu, 19 Nov 1998 17:10:45 -0800 (PST)
- Message-Id: <199811200110.RAA07395@spock.dis.cccd.edu>
- Branch: cfgperl
- ! ext/DynaLoader/dl_mpeix.xs installperl
-____________________________________________________________________________
-[ 2252] By: gsar on 1998/11/19 17:38:03
- Log: mess_sv tweak for change#2249
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 2251] By: jhi on 1998/11/18 12:32:19
- Log: Display use64bits and usemultiplicity but only if necessary.
- Branch: cfgperl
- ! myconfig
-____________________________________________________________________________
-[ 2250] By: jhi on 1998/11/18 12:26:50
- Log: From: Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
- Subject: pp.c uses 'unsigned Quad_t'
- To: perlbug@perl.com
- Date: Sun, 15 Nov 1998 20:57:05 -0300
- Message-Id: <199811152357.UAA12768@sleipnir.valparaiso.cl>
- Branch: cfgperl
- ! perl.h pp.c
-____________________________________________________________________________
-[ 2249] By: gsar on 1998/11/18 05:43:11
- Log: use PL_mess_sv only during global destruction (fixes problems with
- overlapping invocations of form()/warn()/die()/croak() trampling on
- each other's messages)
- Branch: perl
- ! mg.c util.c
-____________________________________________________________________________
-[ 2248] By: gsar on 1998/11/18 05:39:36
- Log: tweak change#2245 to skip previous message if any
- Branch: perl
- ! pp_ctl.c t/pragma/warn/pp_ctl
-____________________________________________________________________________
-[ 2247] By: jhi on 1998/11/17 11:46:56
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 26 files)
-____________________________________________________________________________
-[ 2246] By: gsar on 1998/11/17 09:41:10
- Log: allow C<sort $coderef @foo>
- Branch: perl
- ! op.c t/op/sort.t t/pragma/overload.t
-____________________________________________________________________________
-[ 2245] By: gsar on 1998/11/17 08:28:26
- Log: propagate failures in DESTROY() as (optional) warnings
- Branch: perl
- ! pod/perldiag.pod pp_ctl.c t/pragma/warn/pp_ctl
-____________________________________________________________________________
-[ 2244] By: gsar on 1998/11/17 07:43:08
- Log: ensure PL_dirty is reinit-ed properly under -DMULTIPLICITY
- Branch: perl
- ! perl.c thrdvar.h
-____________________________________________________________________________
-[ 2243] By: gsar on 1998/11/17 07:40:09
- Log: sort WARN_FOO symbols to avoid hash traversal order dependency
- Branch: perl
- ! lib/warning.pm warning.h warning.pl
-____________________________________________________________________________
-[ 2242] By: gsar on 1998/11/17 06:32:39
- Log: fix skipspace() to properly account for newlines in eval''-ed
- strings (caused bogus line numbers in diagnostics and debugger)
- Branch: perl
- ! t/pragma/warn/pp_ctl t/pragma/warn/toke toke.c
-____________________________________________________________________________
-[ 2241] By: gsar on 1998/11/17 03:48:12
- Log: s/Perl_utf8skip/PL_utf8skip/g
- Branch: perl
- ! embed.h embed.pl global.sym globvar.sym regexec.c utf8.h
-____________________________________________________________________________
-[ 2240] By: gsar on 1998/11/14 06:09:06
- Log: rework op/groups.t
- Branch: perl
- ! t/op/filetest.t t/op/groups.t
-____________________________________________________________________________
-[ 2235] By: gsar on 1998/11/14 00:17:05
- Log: catch a neophyte trap: open(<FH>), close(<FH>) etc.
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 2234] By: gsar on 1998/11/14 00:14:02
- Log: update Changes
- Branch: perl
- ! Changes win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 2233] By: gsar on 1998/11/13 09:43:03
- Log: doc tweak
- Branch: perl
- ! README.win32
-____________________________________________________________________________
-[ 2230] By: jhi on 1998/11/12 17:07:45
- Log: Allow hints file override for d_socket
- (based on Sequent-induced change #2229).
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2229] By: jhi on 1998/11/12 16:32:33
- Log:
- From: "Martin J. Bligh" <mbligh@sequent.com>
- To: jhi@iki.fi
- cc: gbarr@ti.com, gbarr@pobox.com, gsar@umich.edu
- Subject: Re: Making Perl work on DYNIX/ptx
- Date: Tue, 10 Nov 1998 16:24:26 -0800
- Message-ID: <181999655.910715066@w-186d219.rhe.sequent.com>
- Branch: cfgperl
- ! hints/dynixptx.sh
-____________________________________________________________________________
-[ 2228] By: jhi on 1998/11/12 11:40:37
- Log: From: "Martin J. Bligh" <mbligh@sequent.com>
- Message-ID: <187803647.910720870@w-186d219.rhe.sequent.com>
- To: jhi@iki.fi
- cc: gbarr@ti.com, gbarr@pobox.com, gsar@umich.edu
- Subject: Re: Making Perl work on DYNIX/ptx
- Date: Tue, 10 Nov 1998 18:01:10 -0800
- Branch: cfgperl
- + ext/DB_File/hints/dynixptx.pl ext/POSIX/hints/dynixptx.pl
-____________________________________________________________________________
-[ 2227] By: jhi on 1998/11/12 11:17:42
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes XSUB.h av.c embed.h embed.pl embedvar.h
- !> ext/IPC/SysV/Msg.pm global.sym hv.c lib/Text/Wrap.pm objXSUB.h
- !> perl.c perl.h pod/perlfunc.pod pod/perlvar.pod pp_sys.c
- !> proto.h regexec.c t/op/array.t util.c win32/makedef.pl
- !> win32/win32.c x2p/s2p.PL
-____________________________________________________________________________
-[ 2226] By: gsar on 1998/11/11 21:05:42
- Log: provide -DPERL_POLLUTE
- Branch: perl
- ! embed.pl embedvar.h
-____________________________________________________________________________
-[ 2225] By: jhi on 1998/11/09 07:45:12
- Log: From: Hans Mulder <hansm@icgroup.nl>
- To: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Cc: gsar@engin.umich.edu (Gurusamy Sarathy), jhi@iki.fi,
- perl5-porters@perl.org
- Subject: Re: [PATCH] Re: Not OK: perl 5.00553 on OPENSTEP-Mach 4_1
- (UNINSTALLED)
- Date: Sun, 8 Nov 98 22:20:23 +0100
- Message-Id: <9811082119.AA11802@icgned.icgroup.nl>
- Branch: cfgperl
- ! malloc.c perl.h
-____________________________________________________________________________
-[ 2224] By: gsar on 1998/11/09 03:13:14
- Log: avoid endless loops in Text::Wrap (from a suggestion by Lupe
- Christoph <lupe@alanya.m.isar.de>)
- Branch: perl
- ! lib/Text/Wrap.pm
-____________________________________________________________________________
-[ 2223] By: gsar on 1998/11/09 02:09:06
- Log: fix misplaced brace in s2p (as suggested by Lionel Fourquaux
- <lionel.fourquaux@wanadoo.fr>)
- Branch: perl
- ! x2p/s2p.PL
-____________________________________________________________________________
-[ 2222] By: gsar on 1998/11/09 01:56:24
- Log: patches from Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Wed, 04 Nov 1998 12:19:44 +0000
- Message-Id: <199811041219.MAA05451@crypt.compulink.co.uk>
- Subject: [PATCH] Re: [5.005_53] read overflow?
- --
- Date: Wed, 04 Nov 1998 13:15:18 +0000
- Message-Id: <199811041315.NAA05711@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_53] perl -V fix
- Branch: perl
- ! perl.c regexec.c
-____________________________________________________________________________
-[ 2221] By: gsar on 1998/11/09 01:34:56
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sun, 01 Nov 1998 00:05:01 +0100
- Message-ID: <364294bd.18052307@smtp1.ibm.net>
- Subject: [PATCH v5.5.53, WIN32] PL_block_type undefined unless DEBUGGING
- Branch: perl
- ! Changes win32/makedef.pl
-____________________________________________________________________________
-[ 2220] By: gsar on 1998/11/08 21:13:07
- Log: integrate changes#2120,2168,2218 from maint-5.005;
- add new vtbls; s/\bvtbl_/PL_vtbl_/; remove trailing comma in
- enum; make regen_headers
- Branch: perl
- ! XSUB.h embed.h embedvar.h ext/IPC/SysV/Msg.pm global.sym
- ! objXSUB.h perl.h pod/perlfunc.pod proto.h util.c win32/win32.c
-____________________________________________________________________________
-[ 2219] By: gsar on 1998/11/08 19:42:57
- Log: integrate cfgperl changes into mainline
- Branch: perl
- +> README.vmesa
- !> Configure MANIFEST Porting/Glossary Porting/config.sh
- !> Porting/config_H config_h.SH ext/Thread/Thread.xs
- !> hints/hpux.sh hints/vmesa.sh lib/Math/Complex.pm malloc.c
- !> perl.h pod/perlfunc.pod pod/perllocale.pod pod/perlport.pod
- !> pp_sys.c sv.c t/lib/complex.t t/op/groups.t t/op/lex_assign.t
- !> thread.h vms/subconfigure.com vos/config.h
-____________________________________________________________________________
-[ 2218] By: gbarr on 1998/11/08 16:48:44
- Log: From: Graham Barr <gbarr@ti.com>
- Date: Mon, 2 Nov 1998 07:38:52 -0600
- Message-ID: <19981102073852.A12751@asic.sc.ti.com>
- Subject: [PATCH 5.005_*] Re: IPC::Msg 1.03
- Branch: maint-5.005/perl
- ! ext/IPC/SysV/Msg.pm
-____________________________________________________________________________
-[ 2215] By: gsar on 1998/11/08 02:52:52
- Log: set close-on-exec bit on pipe() FDs
- Branch: perl
- ! pod/perlfunc.pod pod/perlvar.pod pp_sys.c
-____________________________________________________________________________
-[ 2214] By: gsar on 1998/11/08 02:27:57
- Log: typo in newHVhv()
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 2211] By: jhi on 1998/11/07 21:14:18
- Log: Finalize the Mach CThreads support.
-
- From: Hans Mulder <hansm@icgroup.nl>
- Date: Sat, 7 Nov 98 22:06:20 +0100
- To: Gurusamy Sarathy <gsar@engin.umich.edu>
- Cc: jhi@iki.fi, perl5-porters@perl.org
- Subject: [PATCH] Re: Not OK: perl 5.00553 on OPENSTEP-Mach 4_1 (UNINSTALLED)
- Message-Id: <9811072105.AA07794@icgned.icgroup.nl>
- Branch: cfgperl
- ! malloc.c perl.h
-____________________________________________________________________________
-[ 2210] By: gsar on 1998/11/06 20:36:50
- Log: fix AvREALISH bogusness
- Branch: perl
- ! av.c t/op/array.t
-____________________________________________________________________________
-[ 2209] By: jhi on 1998/11/06 08:05:31
- Log: Renamed malloc.c ASSERT() macro to P_ASSERT() because
- ASSERT() causes problems in {NeXTStep,OpenStep}.
-
- From: Hans Mulder <hansm@icgroup.nl>
- To: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Subject: Re: Not OK: perl 5.00553 on OPENSTEP-Mach 4_1 (UNINSTALLED)
- Date: Fri, 6 Nov 98 01:27:41 +0100
- Message-Id: <9811060025.AA27389@icgned.icgroup.nl>
-
- and
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: Re: ASSERT() in malloc.c
- To: jhi@iki.fi
- Date: Fri, 6 Nov 1998 02:59:29 -0500 (EST)
- Message-Id: <199811060759.CAA18915@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! malloc.c
-____________________________________________________________________________
-[ 2208] By: jhi on 1998/11/06 07:55:38
- Log: Mach CThreads needs #include <mach/cthreads.h>.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 2206] By: jhi on 1998/11/05 14:54:52
- Log: PERL_BADLANG wrongly documented.
-
- From: ts <decoux@moulon.inra.fr>
- To: jhi@cc.hut.fi
- Subject: Re: Locale warning messages
- Date: Thu, 5 Nov 1998 14:34:19 +0100 (MET)
- Message-Id: <199811051334.OAA24863@moulon.inra.fr>
-
- and
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: Re: PERL_BADLANG
- To: jhi@iki.fi
- Subject: Re: PERL_BADLANG
- Date: Thu, 5 Nov 1998 09:49:00 -0500 (EST)
- Message-Id: <199811051449.JAA04238@monk.mps.ohio-state.edu>
- Branch: cfgperl
- ! pod/perllocale.pod
-____________________________________________________________________________
-[ 2205] By: jhi on 1998/11/05 14:24:33
- Log: Document all the control flow keywords in perlfunc
- so that "perlfunc -f while" works.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2204] By: jhi on 1998/11/05 12:46:02
- Log: Configure update. Remove last trace of PTHREADS_CREATED_JOINABLE
- (from vos/config.h). Update Porting/{Glossary,config*}.
- Branch: cfgperl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH vos/config.h
-____________________________________________________________________________
-[ 2203] By: jhi on 1998/11/05 08:34:39
- Log: VM/ESA and VMS sig_num_init (change#2101) catchup.
- Branch: cfgperl
- ! hints/vmesa.sh vms/subconfigure.com
-____________________________________________________________________________
-[ 2202] By: jhi on 1998/11/05 08:03:20
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> Changes cop.h doop.c gv.c mg.c perl.c pp_ctl.c sv.c util.c
- !> win32/Makefile win32/makefile.mk win32/win32.c
-____________________________________________________________________________
-[ 2201] By: gsar on 1998/11/05 04:40:44
- Log: another POPSTACK victim
- Branch: perl
- ! cop.h sv.c
-____________________________________________________________________________
-[ 2196] By: gsar on 1998/11/05 02:07:54
- Log: fix a location affected by change#2191, add note about POPSTACK
- Branch: perl
- ! cop.h gv.c pp_ctl.c
-____________________________________________________________________________
-[ 2195] By: gsar on 1998/11/05 02:04:45
- Log: makefile notes
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2192] By: gsar on 1998/11/04 23:48:53
- Log: indeterminate order-of-evaluation fixes
- Branch: perl
- ! mg.c
-____________________________________________________________________________
-[ 2191] By: gsar on 1998/11/04 23:02:16
- Log: refetch local stack pointer in POPSTACK
- Branch: perl
- ! cop.h perl.c
-____________________________________________________________________________
-[ 2190] By: jhi on 1998/11/04 08:50:40
- Log: Configure update.
- Sequent DYNIX/ptx updates: osvers=$4 (instead of $3) of uname -a,
-
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- To: Martin Bligh <mbligh@sequent.com>
- Cc: Jarkko Hietaniemi <jhi@iki.fi>
- Subject: Re: Perl 5's configure on DYNIX/ptx
- Message-Id: <Pine.SUN.3.96.981103090824.5533B-100000@newton.phys>
- Date: Tue, 3 Nov 1998 09:35:26 -0500 (EST)
-
- find sockets also from libsocket, not just libnet.
- OS390: $compile_ok instead of $compile for <inttypes.h>,
-
- From: pvhp@forte.com (Peter Prymmer)
- To: Thomas.Dorner@start.de, jhi@iki.fi, neale@VMA.TABNSW.COM.AU
- Subject: _53 not OK on os390 but looking better than ever
- Date: Tue, 3 Nov 98 17:33:22 PST
- Message-Id: <9811040133.AA09450@forte.com>
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2189] By: jhi on 1998/11/04 07:43:58
- Log: sysio.t failure: fix undefined order of evaluation, from
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- Subject: Not OK: perl 5.00553 on alpha-thread 5.0 [PATCH]
- To: perlbug@perl.com
- Date: 4 Nov 1998 01:22:30 +0200
- Message-ID: <MLIST_199811032227.RAA143892@web.zk3.dec.com>
- Branch: cfgperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 2188] By: gsar on 1998/11/04 02:59:16
- Log: fix return value of win32_pclose()
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 2187] By: gsar on 1998/11/04 02:56:34
- Log: s/sv_upgrade/SvUPGRADE/ a couple of places
- Branch: perl
- ! Changes doop.c gv.c util.c
-____________________________________________________________________________
-[ 2186] By: jhi on 1998/11/03 08:17:52
- Log: Document quads in pack.
- Branch: cfgperl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2185] By: jhi on 1998/11/03 07:49:35
- Log: (IV) vs (I32) vs I_V()
-
- Subject: [PATCH 5.005_53] Reverting typecast in sv_upgrade()
- From: Anton Berezin <tobez@plab.ku.dk>
- To: "p5p" <perl5-porters@perl.org>
- Date: 01 Nov 1998 15:09:11 +0100
- Message-ID: <86hfwjtshk.fsf@lion.plab.ku.dk>
-
- and
-
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 2 Nov 1998 10:17:34 -0500 (EST)
- Message-Id: <Pine.SUN.3.96.981102101433.4479B-100000@newton.phys>
- Branch: cfgperl
- ! sv.c
-____________________________________________________________________________
-[ 2184] By: jhi on 1998/11/03 07:42:46
- Log: VM/ESA updates.
- Branch: cfgperl
- + README.vmesa
- ! MANIFEST pod/perlfunc.pod pod/perlport.pod
-____________________________________________________________________________
-[ 2183] By: jhi on 1998/11/02 12:58:13
- Log: The id(1)-parsing is real fun.
- Branch: cfgperl
- ! t/op/groups.t
-____________________________________________________________________________
-[ 2182] By: jhi on 1998/11/02 12:07:43
- Log: Decommission the symlink test.
- Branch: cfgperl
- ! t/op/lex_assign.t
-____________________________________________________________________________
-[ 2181] By: jhi on 1998/11/02 12:03:08
- Log: Replace ATTR_JOINABLE with true Configure probe
- for PTHREAD_CREATE_JOINABLE (or equivalent:
- PTHREAD_CREATE_UNDETACHED or __UNDETACHED).
- Remove ATTR_JOINABLE itself: Thread.xs uses
- PTHREAD_CREATE_JOINABLE (or equivalent) directly.
-
- Really scan for <mach/cthreads.h> only if usethreads.
- Branch: cfgperl
- ! Configure config_h.SH ext/Thread/Thread.xs thread.h
-____________________________________________________________________________
-[ 2180] By: jhi on 1998/11/02 11:07:34
- Log: In HP-UX 10.X usethreads only if the required files are present.
- Branch: cfgperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 2179] By: jhi on 1998/11/02 09:10:33
- Log: Prefer groups(1).
- id -Gn can be broken.
- id -a can save the day.
- Branch: cfgperl
- ! t/op/groups.t
-____________________________________________________________________________
-[ 2178] By: jhi on 1998/11/02 08:35:29
- Log: Detrail enum comma.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 2177] By: jhi on 1998/11/02 08:24:12
- Log: 0**0 = 1, from
-
- From: d-lewart@uiuc.edu (Daniel S. Lewart)
- Subject: Math::Complex 0**0 patches
- Date: Sun, 1 Nov 1998 19:21:48 -0600 (CST)
- Message-Id: <199811020121.TAA28310@staff2.cso.uiuc.edu>
- To: jhi@iki.fi (Jarkko Hietaniemi),
- Raphael_Manfredi@grenoble.hp.com (Raphael Manfredi)
- Branch: cfgperl
- ! lib/Math/Complex.pm t/lib/complex.t
-____________________________________________________________________________
-[ 2168] By: gbarr on 1998/11/01 01:58:58
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 09 Oct 1998 23:28:31 +0200
- Message-ID: <36217b7f.3193091@smtp1.ibm.net>
- Subject: [PATCH 5.005_02] Allow XS access to vtbl_*s when compiled with PERL_OBJECT
- Branch: maint-5.005/perl
- ! XSUB.h
-____________________________________________________________________________
-[ 2164] By: jhi on 1998/10/31 15:50:02
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> t/op/lex_assign.t
- !> (integrate 45 files)
-
-----------------
-Version 5.005_53
-----------------
-
-____________________________________________________________________________
-[ 2163] By: gsar on 1998/10/31 11:31:12
- Log: bump patchlevel; other minor fixes for clean build and test on
- Solaris and win32
- Branch: perl
- ! Changes ext/Data/Dumper/Dumper.xs patchlevel.h pp.h sv.c
- ! t/lib/dumper.t t/op/groups.t t/op/lex_assign.t
- ! t/pragma/warn/regexec win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
- ! x2p/a2p.c
-____________________________________________________________________________
-[ 2162] By: gsar on 1998/10/31 09:40:31
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 30 Oct 1998 18:36:20 -0500 (EST)
- Message-Id: <199810302336.SAA17336@monk.mps.ohio-state.edu>
- Subject: Re: [PATCH 5.00552] Overloaded <> and deref again
- Branch: perl
- ! pp.h
-____________________________________________________________________________
-[ 2161] By: gsar on 1998/10/31 09:39:13
- Log: From: Albert Dvornik <bert@genscan.com>
- Date: 30 Oct 1998 17:50:04 -0500
- Message-Id: <tqd879vf4z.fsf@puma.genscan.com>
- Subject: [PATCH perl5.00[45]] a2p: make sprintf less greedy without -o
- Branch: perl
- ! x2p/Makefile.SH x2p/a2p.c x2p/a2p.pod x2p/a2p.y x2p/a2py.c
-____________________________________________________________________________
-[ 2160] By: gsar on 1998/10/31 09:35:03
- Log: fix for bugs in -x mode
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 31 Oct 1998 00:30:57 -0500 (EST)
- Message-Id: <199810310530.AAA22277@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Fix h2xs
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 2159] By: gsar on 1998/10/31 09:31:36
- Log: Data::Dumper update
- Branch: perl
- ! ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm
- ! ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Todo
-____________________________________________________________________________
-[ 2153] By: gsar on 1998/10/30 21:40:09
- Log: add testsuite portion of patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 29 Oct 1998 23:20:01 -0500 (EST)
- Message-Id: <199810300420.XAA25651@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00321 ;-)] 87% speedup
- Branch: perl
- + t/op/lex_assign.t
- ! MANIFEST
-____________________________________________________________________________
-[ 2152] By: gsar on 1998/10/30 21:08:11
- Log: mention the C<$SIG{CHLD} = 'IGNORE'> special case
- Branch: perl
- ! pod/perlfunc.pod pod/perlipc.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 2151] By: gsar on 1998/10/30 20:18:09
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- Date: Fri, 30 Oct 1998 14:24:23 EST
- Message-Id: <19981030192423.27276.qmail@plover.com>
- Subject: PATCH: (5.005_02) a2p should use `chomp' instead of `chop'
- Branch: perl
- ! x2p/walk.c
-____________________________________________________________________________
-[ 2150] By: gsar on 1998/10/30 20:08:57
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 29 Oct 1998 22:04:54 -0500 (EST)
- Message-Id: <199810300304.WAA23291@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Overloaded <> and deref again
- Branch: perl
- ! gv.c lib/overload.pm perl.h pp.c pp.h pp_hot.c pp_sys.c sv.c
- ! t/pragma/overload.t toke.c
-____________________________________________________________________________
-[ 2149] By: gsar on 1998/10/30 19:38:15
- Log: From: Roderick Schertler <roderick@argon.org>
- Date: Thu, 29 Oct 1998 14:50:18 -0500
- Message-ID: <17625.909690618@eeyore.ibcinc.com>
- Subject: patch for daemonization docs in perlipc
- Branch: perl
- ! pod/perlipc.pod
-____________________________________________________________________________
-[ 2148] By: gsar on 1998/10/30 19:36:07
- Log: From: Anton Berezin <tobez@plab.ku.dk>
- Date: 29 Oct 1998 17:06:25 +0100
- Message-ID: <86pvbbuzcu.fsf@lion.plab.ku.dk>
- Subject: [PATCH 5.005_52] win32_opendir() fails on empty drives
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 2147] By: gsar on 1998/10/30 19:31:37
- Log: tweaked version of suggested patch
- From: Anton Berezin <tobez@plab.ku.dk>
- Date: 29 Oct 1998 14:48:54 +0100
- Message-ID: <86yapzv5q1.fsf@lion.plab.ku.dk>
- Subject: [PATCH 5.005_52] One more problem with win32_stat and MSVC
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 2146] By: gsar on 1998/10/30 19:03:50
- Log: hand-apply whitespace-mutiliated patch
- From: "vishal bhatia" <vishalb@hotmail.com>
- Date: Wed, 28 Oct 1998 23:45:32 PST
- Message-ID: <19981029074534.2334.qmail@hotmail.com>
- Subject: [PATCH 5.005_52]Compiling modules,more bugfixes for B
- Branch: perl
- ! ext/B/B/C.pm ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2145] By: gsar on 1998/10/30 18:46:58
- Log: remaining PL_foo stragglers
- Branch: perl
- ! doio.c ext/B/B.pm ext/IPC/SysV/SysV.xs ext/Opcode/Opcode.pm
- ! op.h os2/os2.c vms/gen_shrfls.pl
-____________________________________________________________________________
-[ 2144] By: gsar on 1998/10/30 17:38:36
- Log: integrate cfgperl tweaks into mainline
- Branch: perl
- !> Makefile.SH README.posix-bc doio.c ext/POSIX/POSIX.xs proto.h
- !> t/op/misc.t t/pragma/subs.t t/pragma/warning.t
-____________________________________________________________________________
-[ 2143] By: jhi on 1998/10/30 13:27:39
- Log: There can be multiple yacc/bison errors.
- Branch: cfgperl
- ! t/op/misc.t t/pragma/subs.t t/pragma/warning.t
-____________________________________________________________________________
-[ 2142] By: jhi on 1998/10/30 13:18:43
- Log: README.posix-bc update.
- Branch: cfgperl
- ! README.posix-bc
-____________________________________________________________________________
-[ 2141] By: jhi on 1998/10/30 09:12:59
- Log: #2133 fallout.
- Branch: cfgperl
- ! doio.c ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2140] By: jhi on 1998/10/30 08:43:18
- Log: Integrate from mainperl.
- Branch: cfgperl
- +> globvar.sym pp.sym
- - objpp.h thread.sym
- !> (integrate 61 files)
-____________________________________________________________________________
-[ 2133] By: gsar on 1998/10/30 02:51:39
- Log: phase 1 of somewhat major rearrangement of PERL_OBJECT stuff
- (objpp.h is gone, embed.pl now does some of that); objXSUB.h
- should soon be automated also; the global variables that
- escaped the PL_foo conversion are now reined in; renamed
- MAGIC in regcomp.h to REG_MAGIC to avoid collision with the
- type of same name; duplicated lists of pp_things in various
- places is now gone; result has only been tested on win32
- Branch: perl
- + globvar.sym pp.sym
- - objpp.h thread.sym
- ! MANIFEST Makefile.SH av.c bytecode.h byterun.h cop.h doio.c
- ! doop.c dump.c embed.h embed.pl embedvar.h ext/B/B.xs
- ! ext/POSIX/POSIX.xs ext/Thread/Thread.xs global.sym globals.c
- ! gv.c malloc.c mg.c objXSUB.h op.c opcode.h opcode.pl perl.c
- ! perl.h perl_exp.SH perlvars.h perly.c pod/perlguts.pod pp.c
- ! pp.h pp_ctl.c pp_hot.c pp_proto.h pp_sys.c proto.h regcomp.c
- ! regcomp.h regcomp.pl regcomp.sym regexec.c regnodes.h run.c
- ! scope.c sv.c t/op/filetest.t taint.c thrdvar.h toke.c util.c
- ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makedef.pl win32/makefile.mk win32/perlhost.h
-____________________________________________________________________________
-[ 2130] By: jhi on 1998/10/29 15:31:26
- Log: Pure bison yylex() proto was broken.
- Branch: cfgperl
- ! proto.h
-____________________________________________________________________________
-[ 2126] By: jhi on 1998/10/29 08:35:54
- Log: Integrate mainperl.
- Branch: cfgperl
- !> INSTALL README.cygwin32 cygwin32/gcc2 cygwin32/ld2
- !> lib/ExtUtils/MakeMaker.pm lib/perl5db.pl malloc.c pp.c
- !> pp_ctl.c proto.h regexec.c t/pragma/overload.t
- !> t/pragma/warn/doio toke.c win32/makefile.mk
-____________________________________________________________________________
-[ 2125] By: jhi on 1998/10/29 08:32:38
- Log: EBCDIC Makefile.SH iteration converges. Hopefully.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2124] By: jhi on 1998/10/29 08:06:44
- Log: EBCDIC Makefile.SH tuneup.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2119] By: gsar on 1998/10/28 23:24:04
- Log: remove doubled hunk from integration
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 2118] By: gsar on 1998/10/28 22:03:31
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 28 Oct 1998 01:23:27 -0500 (EST)
- Message-Id: <199810280623.BAA06968@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Minor debugger tweaks
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 2117] By: gsar on 1998/10/28 22:02:30
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 28 Oct 1998 01:20:33 -0500 (EST)
- Message-Id: <199810280620.BAA06893@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Make sort respect overloading
- Branch: perl
- ! pp_ctl.c proto.h t/pragma/overload.t
-____________________________________________________________________________
-[ 2116] By: gsar on 1998/10/28 21:51:11
- Log: MM patches from Ilya Zakharevich
- Date: Wed, 28 Oct 1998 01:27:04 -0500 (EST)
- Message-Id: <199810280627.BAA07053@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Make MakeMaker more verbose
- --
- Date: Wed, 28 Oct 1998 01:25:36 -0500 (EST)
- Message-Id: <199810280625.BAA06980@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Make MakeMaker ignore errors in kid Makefile.PL
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2115] By: gsar on 1998/10/28 21:46:19
- Log: add explicit references to perl source path in ld2 and gcc2
- Branch: perl
- ! README.cygwin32 cygwin32/gcc2 cygwin32/ld2
-____________________________________________________________________________
-[ 2114] By: gsar on 1998/10/28 21:39:56
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Tue, 27 Oct 1998 10:40:41 -0500 (EST)
- Message-Id: <Pine.SUN.3.96.981027103726.28498E-100000@newton.phys>
- Subject: [PATCH] Re: Problems with: Creating an installable tar archive
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 2113] By: gsar on 1998/10/28 21:21:16
- Log: integrate cfgperl into mainline
- Branch: perl
- +> t/op/filetest.t
- !> Configure MANIFEST Makefile.SH config_h.SH perl.h perly.y
- !> perly_c.diff pp.c proto.h t/comp/require.t t/io/pipe.t
- !> t/op/groups.t t/op/misc.t t/pragma/subs.t t/pragma/warning.t
- !> thread.h toke.c vmesa/Makefile
-____________________________________________________________________________
-[ 2112] By: gsar on 1998/10/28 21:14:18
- Log: minor cleanup
- Branch: perl
- ! malloc.c regexec.c t/pragma/warn/doio win32/makefile.mk
-____________________________________________________________________________
-[ 2111] By: gsar on 1998/10/28 18:52:10
- Log: smarter C<$SIG{FOO} = BAREWORD;> warning
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 2110] By: jhi on 1998/10/28 15:07:54
- Log: posix-bc doesn't want to regenerate a2p.h from a2p.y.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2109] By: jhi on 1998/10/28 13:39:54
- Log: a2p.y needs to generate also y.tab.h.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2108] By: jhi on 1998/10/28 10:33:36
- Log: The "parse error" must be converted to "syntax error",
- just matching it aint' enough.
- Branch: cfgperl
- ! t/comp/require.t t/op/misc.t t/pragma/subs.t
- ! t/pragma/warning.t
-____________________________________________________________________________
-[ 2107] By: jhi on 1998/10/28 10:23:05
- Log: Regen sig_n{ame,umber}* if slightest doubt.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2106] By: jhi on 1998/10/28 08:44:49
- Log: Bison says 'parse error', not 'parser error'.
- Branch: cfgperl
- ! t/comp/require.t t/op/misc.t t/pragma/subs.t
- ! t/pragma/warning.t
-____________________________________________________________________________
-[ 2105] By: jhi on 1998/10/28 08:42:09
- Log: yylex() parametrization.
- Branch: cfgperl
- ! proto.h toke.c
-____________________________________________________________________________
-[ 2104] By: jhi on 1998/10/28 08:25:09
- Log: Bring in #2102.
- Branch: cfgperl
- ! pp.c
-____________________________________________________________________________
-[ 2103] By: jhi on 1998/10/28 08:22:04
- Log: From: Dominic Dunlop <domo@vo.lu>
- Subject: [PATCH 5.005_02] Re: perl5.004_04 testing problem
- Date: 27 Oct 1998 20:47:25 +0200
- Message-ID: <MLIST_v03110700b25b7dc95bbc@[212.24.192.87]>
- Branch: cfgperl
- ! t/op/groups.t
-____________________________________________________________________________
-[ 2102] By: larry on 1998/10/27 18:58:55
- Log: utf8 change to quotemeta broke EBCDIC
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 2101] By: jhi on 1998/10/27 12:55:34
- Log: $Config{sig_num_init}.
- Also, a new approach to the 'pthreads-created-joinable': drop
- it and use {PTHREAD_CREATE_{JOINABLE,UNDETACHED},__UNDETACHED}
- directly. (See also #2096).
- Branch: cfgperl
- ! Configure config_h.SH
-____________________________________________________________________________
-[ 2100] By: jhi on 1998/10/27 10:48:55
- Log: Regenerated perly_c.diff.
- Branch: cfgperl
- ! perly_c.diff
-____________________________________________________________________________
-[ 2099] By: jhi on 1998/10/27 08:42:25
- Log: First the mangler was Netscape, then it was me.
- Branch: cfgperl
- ! vmesa/Makefile
-____________________________________________________________________________
-[ 2098] By: jhi on 1998/10/27 08:34:40
- Log: `id -Gn` might be available where `groups` is not.
- Branch: cfgperl
- ! t/op/groups.t
-____________________________________________________________________________
-[ 2097] By: jhi on 1998/10/27 08:05:17
- Log: Netscape had mangled the tabs.
- Branch: cfgperl
- ! vmesa/Makefile
-____________________________________________________________________________
-[ 2096] By: jhi on 1998/10/27 08:03:05
- Log: ATTR_JOINABLE logic, based on (private email)
-
- From: Neale Ferguson <neale@VMA.TABNSW.COM.AU>
- Subject: Some little diffs
- Message-ID: <36350969.DA33E7B4@mailbox.tabnsw.com.au>
- Date: Tue, 27 Oct 1998 13:44:42 +1300
- Branch: cfgperl
- ! thread.h
-____________________________________________________________________________
-[ 2095] By: jhi on 1998/10/27 07:56:57
- Log: Mach cthreads support based on:
-
- From: brie@corp.home.net (Brian Harrison)
- Subject: perl5.005_02 patch for mthreads
- To: perl5-porters@perl.org
- Date: 24 Oct 1998 01:01:55 +0300
- Message-ID: <MLIST_Pine.GSO.4.04.9810231410220.11111-200000@sulaco.eos.home.net>
-
- Pthread yield probe (dejavu)
- Cosmetic nanochange for the union semun output.
- Better inttypes.h probe.
- Undo the 'void *' $selecttype probe from #1971 because
- it breaks the $selectminbits test.
- Branch: cfgperl
- ! Configure config_h.SH perl.h thread.h
-____________________________________________________________________________
-[ 2094] By: jhi on 1998/10/26 13:02:07
- Log: Also posix-bc wants to reyacc.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2093] By: jhi on 1998/10/26 10:17:21
- Log: Removed !(*s & 0x80) from pp_quotemeta(), introduced after
- 5_02 and really breaking things in non-ASCII worlds.
- Branch: cfgperl
- ! pp.c
-____________________________________________________________________________
-[ 2092] By: jhi on 1998/10/26 09:08:00
- Log: More robustness.
- Branch: cfgperl
- ! t/comp/require.t t/op/misc.t t/pragma/subs.t
- ! t/pragma/warning.t
-____________________________________________________________________________
-[ 2091] By: jhi on 1998/10/26 08:47:32
- Log: s/YYLEXPARAM/PERL_YYLEX_PARAM_DECL/g
- Bison really wants YYLEX_PARAM.
- Branch: cfgperl
- ! perly.y proto.h toke.c
-____________________________________________________________________________
-[ 2090] By: jhi on 1998/10/26 08:21:25
- Log: s/YYLEX_PARAM/YYLEXPARAM/
- Branch: cfgperl
- ! perly.y
-____________________________________________________________________________
-[ 2089] By: jhi on 1998/10/26 08:17:33
- Log: Indicate skipped subtests.
- Branch: cfgperl
- ! t/io/pipe.t
-____________________________________________________________________________
-[ 2088] By: jhi on 1998/10/26 08:11:36
- Log: Integrate from mainperl.
- Branch: cfgperl
- !> (integrate 54 files)
-____________________________________________________________________________
-[ 2087] By: jhi on 1998/10/26 08:08:02
- Log: Add test for filetests.
- Branch: cfgperl
- + t/op/filetest.t
- ! MANIFEST
-____________________________________________________________________________
-[ 2086] By: gsar on 1998/10/26 02:44:44
- Log: various win32 tweaks; disable new xs_cpp section (it creates
- ambiguous inference graph for %.xs --> %.o)
- Branch: perl
- ! ext/Thread/Thread.xs gv.c lib/ExtUtils/MakeMaker.pm mg.c pp.c
- ! pp_hot.c proto.h win32/GenCAPI.pl win32/Makefile
- ! win32/config.gc win32/config_H.gc win32/makedef.pl
- ! win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 2085] By: gsar on 1998/10/26 00:50:02
- Log: sanity-check $Config{drand01} in rand.t
- Branch: perl
- ! t/op/rand.t win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 2078] By: gsar on 1998/10/25 10:22:04
- Log: update win32/config*.?c
- Branch: perl
- ! Changes win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 2077] By: gsar on 1998/10/25 08:39:25
- Log: From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 24 Oct 1998 21:45:50 -0500
- Message-ID: <19981024214550.C508@pobox.com>
- Subject: Re: die with a reference should use overload "" operator
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 2076] By: gsar on 1998/10/25 08:37:49
- Log: From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 24 Oct 1998 12:45:21 -0500
- Message-ID: <19981024124521.C512@pobox.com>
- Subject: [PATCH 5.005_02] Re: Auto-incrementing tied scalar causes SEGV
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 2075] By: gsar on 1998/10/25 08:24:09
- Log: fix C<print $n += 5;> etc.
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 2074] By: gsar on 1998/10/25 08:12:28
- Log: list builtins with portability caveats
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 23 Oct 1998 14:05:23 +0300 (EET DST)
- Message-Id: <199810231105.OAA02411@alpha.hut.fi>
- Subject: [PATCH] 5.005_02 and 5.005_52: perlfunc.pod and perlport.pod
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2073] By: gsar on 1998/10/25 07:55:43
- Log: fix stack overrun in file test operators
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 2072] By: gsar on 1998/10/25 07:29:45
- Log: implement C<goto &func> and other fixes (via private mail)
- From: "vishal bhatia" <vishalb@hotmail.com>
- Date: Wed, 21 Oct 1998 22:59:03 PDT
- Message-Id: <19981022055904.20083.qmail@hotmail.com>
- Subject: [PATCH 5.005_52] More fixes for B
- Branch: perl
- ! ext/B/B.pm ext/B/B.xs ext/B/B/C.pm ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2071] By: gsar on 1998/10/25 07:14:41
- Log: From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 17 Oct 1998 20:42:41 -0500
- Message-ID: <19981017204241.G510@pobox.com>
- Subject: Re: taint checking for: use lib "$ENV{'EVIL'}"
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 2070] By: gsar on 1998/10/25 07:07:29
- Log: avoid bogus line number in XSUB redefined warnings
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 2069] By: gsar on 1998/10/25 06:59:03
- Log: From: Martijn Koster <mak@excitecorp.com>
- Date: Wed, 21 Oct 1998 13:12:03 +0100
- Message-ID: <19981021131203.A15661@excitecorp.com>
- Subject: File::Path::mkpath reports the wrong error
- Branch: perl
- ! lib/File/Path.pm
-____________________________________________________________________________
-[ 2068] By: gsar on 1998/10/25 06:54:43
- Log: From: Zachary Miller <zcmiller@simon.er.usgs.gov>
- Date: Tue, 20 Oct 1998 20:52:20 -0500
- Message-Id: <199810210152.UAA07792@simon.er.usgs.gov>
- Subject: Exporter.pm's export_to_level() argument handling buggy
- Branch: perl
- ! lib/Exporter.pm
-____________________________________________________________________________
-[ 2067] By: gsar on 1998/10/25 06:50:19
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 21 Oct 1998 00:55:51 +0200
- Message-ID: <36380269.55370608@smtp1.ibm.net>
- Subject: Make _really_ sure Dynaloader.xs code is initialized only once
- Branch: perl
- ! ext/DynaLoader/DynaLoader_pm.PL
-____________________________________________________________________________
-[ 2066] By: gsar on 1998/10/25 06:48:19
- Log: recognize '%' as a shell metachar for win32
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Tue, 20 Oct 1998 21:57:35 +0200
- Message-ID: <3636ea31.49170453@smtp1.ibm.net>
- Subject: [PATCH 5.005_02, Win32] Re: %ENV% not expanded in backquotes?
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 2065] By: gsar on 1998/10/25 06:46:30
- Log: remove FAST_SV_GETS remnant (as suggested by Gisle Aas)
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 2064] By: gsar on 1998/10/25 06:45:09
- Log: From: Gisle Aas <gisle@aas.no>
- Date: 20 Oct 1998 14:24:44 +0200
- Message-ID: <m34sszctf7.fsf@furu.g.aas.no>
- Subject: ord() and unpack("U*",...) should not be negative
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 2063] By: gsar on 1998/10/25 06:42:29
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 18 Oct 1998 23:20:57 -0400 (EDT)
- Message-Id: <199810190320.XAA28249@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Improve sbrk() on OS/2
- Branch: perl
- ! os2/os2.c
-____________________________________________________________________________
-[ 2062] By: gsar on 1998/10/25 06:41:26
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 18 Oct 1998 23:10:29 -0400 (EDT)
- Message-Id: <199810190310.XAA28102@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Speed up aassign
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 2061] By: gsar on 1998/10/25 06:39:04
- Log: From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 17 Oct 1998 22:22:02 -0500
- Message-ID: <19981017222202.J510@pobox.com>
- Subject: Re: '*' prototype does not allow bareword with strict
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 2060] By: gsar on 1998/10/25 06:37:34
- Log: handle '::' in section names properly
- From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 17 Oct 1998 12:57:54 -0500
- Message-ID: <19981017125754.C510@pobox.com>
- Subject: Re: pod2html
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 2059] By: gsar on 1998/10/25 06:33:43
- Log: integrate changes#1982,2014,2021 (from maint-5.005)
- Branch: perl
- !> av.c doop.c ext/POSIX/POSIX.xs hv.c lib/ExtUtils/MakeMaker.pm
- !> mg.c mg.h pp.c pp_hot.c pp_sys.c scope.c t/op/tie.t
-____________________________________________________________________________
-[ 2058] By: gsar on 1998/10/25 05:44:17
- Log: allow more win32 symbol exports (suggested by Jan Dubois)
- Branch: perl
- ! win32/makedef.pl
-____________________________________________________________________________
-[ 2057] By: gsar on 1998/10/25 05:40:40
- Log: integrate change#2053 from maint-5.005
- Branch: perl
- !> cop.h t/cmd/while.t
-____________________________________________________________________________
-[ 2056] By: gsar on 1998/10/25 05:16:41
- Log: commented version of a patch suggested by Drago Goricanec
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Date: 16 Oct 1998 15:24:45 +0300
- Message-ID: <oeeogrc1ype.fsf@alpha.hut.fi>
- Subject: Re: [PATCH 5.005_52] Linux select fails with more than 32 FDs
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 2055] By: gsar on 1998/10/25 05:11:03
- Log: include eof() in description of buffering caveats
- From: Anton Berezin <tobez@plab.ku.dk>
- Date: Fri, 16 Oct 1998 19:22:41 +0200 (CEST)
- Message-Id: <199810161722.TAA28813@lion.plab.ku.dk>
- Subject: [DOCPATCH] pod/perlfunc.pod
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2054] By: gsar on 1998/10/25 05:07:42
- Log: disallow 'x' in hex numbers (except leading '0x')
- From: Gisle Aas <gisle@aas.no>
- Date: 16 Oct 1998 16:33:12 +0200
- Message-ID: <m3n26wtw47.fsf@furu.g.aas.no>
- Subject: Re: [PATCH 5.005_52] 'x' is not a legal hex digit
- Branch: perl
- ! perlvars.h t/op/oct.t util.c
-____________________________________________________________________________
-[ 2052] By: gsar on 1998/10/25 04:49:04
- Log: avoid the circular refcnt logic in magic_mutexfree()
- Branch: perl
- ! mg.c pp.c pp_hot.c
-____________________________________________________________________________
-[ 2051] By: gsar on 1998/10/25 04:35:07
- Log: properly restore PL_rsfp_filters after require
- Branch: perl
- ! embed.h global.sym objXSUB.h objpp.h pp_ctl.c proto.h scope.c
- ! scope.h
-____________________________________________________________________________
-[ 2050] By: gsar on 1998/10/25 02:42:32
- Log: integrate cfgperl changes back into mainline
- Branch: perl
- +> README.posix-bc hints/posix-bc.sh hints/vmesa.sh
- +> vmesa/Makefile vmesa/vmesa.c vmesa/vmesaish.h
- !> (integrate 33 files)
-____________________________________________________________________________
-[ 2049] By: gsar on 1998/10/25 01:30:48
- Log: avoid "mysterious" compile-time failures without messages
- Branch: perl
- ! gv.c
-____________________________________________________________________________
-[ 2041] By: gsar on 1998/10/23 21:11:56
- Log: checkin jpl under //depot/perlext/jpl/...
- Branch: perlext
- + jpl/JNI/Changes jpl/JNI/JNI.pm jpl/JNI/JNI.xs jpl/JNI/MANIFEST
- + jpl/JNI/Makefile.PL jpl/JNI/test.pl jpl/JNI/typemap
- + jpl/JPL/AutoLoader.pm jpl/JPL/Class.pm jpl/JPL/Compile.pm
- + jpl/JPL/Makefile.PL jpl/JPL_Rolo/JPL_Rolo.jpl
- + jpl/JPL_Rolo/Makefile.PL jpl/JPL_Rolo/README
- + jpl/JPL_Rolo/cardfile jpl/PerlInterpreter/Makefile
- + jpl/PerlInterpreter/Makefile.PL
- + jpl/PerlInterpreter/PerlInterpreter.c
- + jpl/PerlInterpreter/PerlInterpreter.h
- + jpl/PerlInterpreter/PerlInterpreter.java jpl/README
- + jpl/Sample/Makefile.PL jpl/Sample/Sample.jpl
- + jpl/Test/Makefile.PL jpl/Test/Test.jpl jpl/bin/jpl
- + jpl/get_jdk/README jpl/get_jdk/get_jdk.pl
- + jpl/get_jdk/jdk_hosts jpl/install-jpl
-____________________________________________________________________________
-[ 2040] By: larry on 1998/10/23 19:31:42
- Log: chr(0xFFFFFFFF) didn't translate to utf8 character
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 2039] By: larry on 1998/10/23 18:48:34
- Log: tr///d does not seem to work
- Branch: perl
- ! lib/utf8_heavy.pl
-____________________________________________________________________________
-[ 2038] By: larry on 1998/10/23 18:00:41
- Log: Program with utf8 identifiers fails to compile
- Branch: perl
- ! doop.c gv.c op.c pp.c pp_hot.c toke.c
-____________________________________________________________________________
-[ 2037] By: jhi on 1998/10/23 14:04:51
- Log: Test suite portability:
- - posix-bc does not write to broken pipes
- - filehand #11 only iff we have fork
- - warning.t can now match $expected using regular expressions
- Branch: cfgperl
- ! t/io/pipe.t t/lib/filehand.t t/pragma/warn/doio
- ! t/pragma/warning.t
-____________________________________________________________________________
-[ 2036] By: jhi on 1998/10/23 12:12:07
- Log: yacc clarification.
- Branch: cfgperl
- ! README.posix-bc
-____________________________________________________________________________
-[ 2035] By: jhi on 1998/10/23 12:09:59
- Log: Some C compilers get upset about 8-bit characters in /* comments. */
- Branch: cfgperl
- ! mg.c
-____________________________________________________________________________
-[ 2034] By: jhi on 1998/10/22 09:11:52
- Log: Configure update: both for pthread_yield more robust
- testing (all variants of pthread_attr_getdetachstate()) --
- and because Configure was broken in major way! About 1000
- last lines were truncated.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2033] By: jhi on 1998/10/22 07:47:10
- Log: DJGPP feedback for #2028.
- Branch: cfgperl
- ! thread.h
-____________________________________________________________________________
-[ 2032] By: jhi on 1998/10/21 13:03:57
- Log: yielding, the saga continues.
- Branch: cfgperl
- ! Configure config_h.SH
- !> av.c lib/constant.pm op.c pod/perldiag.pod pp_ctl.c
- !> t/op/goto.t t/pragma/constant.t
-____________________________________________________________________________
-[ 2031] By: jhi on 1998/10/21 09:15:42
- Log: VM/ESA feedback for #2028.
- Branch: cfgperl
- ! Configure config_h.SH thread.h
-____________________________________________________________________________
-[ 2030] By: gsar on 1998/10/21 04:22:53
- Log: fix handling of mayhaps-extended @_ in goto &sub
- Branch: perl
- ! av.c pp_ctl.c t/op/goto.t
-____________________________________________________________________________
-[ 2029] By: gsar on 1998/10/21 00:54:14
- Log: restore sanity to "constant" references
- Branch: perl
- ! lib/constant.pm op.c pod/perldiag.pod t/pragma/constant.t
-____________________________________________________________________________
-[ 2028] By: jhi on 1998/10/20 15:01:20
- Log: OLD_PTHREADS_API reorganizing.
- Branch: cfgperl
- ! dosish.h ext/Thread/Thread.xs perl.h thread.h util.c
- ! vmesa/vmesaish.h
-____________________________________________________________________________
-[ 2027] By: jhi on 1998/10/20 14:14:51
- Log: #2026 fallout.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2026] By: jhi on 1998/10/20 11:47:21
- Log: VM/ESA update.
- Branch: cfgperl
- ! Makefile.SH vmesa/vmesa.c vmesa/vmesaish.h
-____________________________________________________________________________
-[ 2025] By: jhi on 1998/10/20 08:20:56
- Log: 64-bitness, based on
-
- From: Scott Henry <scotth@sgi.com>
- To: perl-64bit@perl.org
- Message-ID: <yd8u30zyerl.fsf@hoshi.engr.sgi.com>
- Subject: Re: Configure problems/questions...
- Date: 19 Oct 1998 22:38:06 -0700
- Branch: cfgperl
- ! hints/irix_6.sh perl.h
-____________________________________________________________________________
-[ 2024] By: jhi on 1998/10/20 08:09:07
- Log: Add lseeksize.
- Branch: cfgperl
- ! config_h.SH
-____________________________________________________________________________
-[ 2023] By: jhi on 1998/10/20 08:08:33
- Log: Mumble about _yields() only when threaded.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2022] By: jhi on 1998/10/20 07:46:26
- Log: Thinko at PTHREADS_CREATED_JOINABLE.
- Branch: cfgperl
- ! thread.h
-____________________________________________________________________________
-[ 2021] By: gbarr on 1998/10/20 01:25:23
- Log: From: Chip Salzenberg <chip@perlsupport.com>
- Date: Tue, 6 Oct 1998 13:33:05 -0400
- Message-ID: <19981006133305.A2348@perlsupport.com>
- Subject: [PATCH] 5.005_02: Eliminate leak on self-ties
- Branch: maint-5.005/perl
- ! av.c doop.c hv.c mg.c mg.h pp.c pp_hot.c pp_sys.c scope.c
- ! t/op/tie.t
-____________________________________________________________________________
-[ 2020] By: jhi on 1998/10/19 09:15:53
- Log: YIELD more robustly.
- Branch: cfgperl
- ! thread.h
-____________________________________________________________________________
-[ 2019] By: jhi on 1998/10/19 08:48:33
- Log: VM/ESA (and OS390) are in between of OLD_PTHREADS_API and
- the 'new' one (just like DJGPP, it seems).
- Branch: cfgperl
- ! thread.h
-____________________________________________________________________________
-[ 2018] By: jhi on 1998/10/19 07:02:44
- Log: vmesaish.h doesn't exclude unixish.h.
- Branch: cfgperl
- ! perl.h
-____________________________________________________________________________
-[ 2017] By: jhi on 1998/10/19 06:44:19
- Log: 1<<$randbits is not good for randbits=48.
- Branch: cfgperl
- ! t/op/rand.t
-____________________________________________________________________________
-[ 2016] By: jhi on 1998/10/19 06:39:47
- Log: Make #2012 glob pattern more portable.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2014] By: gbarr on 1998/10/17 20:31:42
- Log: Fix POSIX::sigprocmask not to check type of $old parameter
- as it is output only
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2012] By: jhi on 1998/10/17 15:04:23
- Log: clean numbered core dumps and t/tmp[0-9]*.
- Branch: cfgperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2011] By: jhi on 1998/10/17 14:59:15
- Log: More robust yacc/bison failure output handling.
- Branch: cfgperl
- ! t/comp/require.t t/op/misc.t t/pragma/subs.t
-____________________________________________________________________________
-[ 2010] By: jhi on 1998/10/17 14:51:05
- Log: BC2000 POSIX update.
- Branch: cfgperl
- ! MANIFEST
-____________________________________________________________________________
-[ 2009] By: jhi on 1998/10/17 14:49:46
- Log: POSIX BC2000 port from perl-mvs:
-
- Subject: Ported perl 5.005.02 to BS2000 / POSIX
- From: Dorner Thomas <Thomas.Dorner@start.de>
- Date: Tue, 29 Sep 1998 13:29:36 +0100
- Message-ID: <9CE47B416A24D2118BC40000F84009B20B72C5@start.de>
- Branch: cfgperl
- + README.posix-bc hints/posix-bc.sh
- ! Configure MANIFEST perl.c perly.y proto.h t/lib/cgi-html.t
- ! t/op/magic.t t/op/pack.t t/op/quotemeta.t t/op/subst.t toke.c
- ! unixish.h
-____________________________________________________________________________
-[ 2008] By: jhi on 1998/10/17 14:07:49
- Log: VM/ESA-update.
- Branch: cfgperl
- ! MANIFEST
-____________________________________________________________________________
-[ 2007] By: jhi on 1998/10/17 13:55:34
- Log: Forgot few S_I* imports.
- Branch: cfgperl
- ! t/lib/ipc_sysv.t
-____________________________________________________________________________
-[ 2006] By: jhi on 1998/10/17 13:43:54
- Log: The VM/ESA port essentials, based on
-
- perl-mvs:
-
- From: Neale Ferguson <neale@VMA.TABNSW.COM.AU>
- Subject: Re: Can't find Data/Dumper.pm
- Date: Mon, 28 Sep 1998 07:40:49 +1300
- Message-ID: <360E86B0.23847AF4@mailbox.tabnsw.com.au>
-
- private email:
-
- From: Neale Ferguson <neale@VMA.TABNSW.COM.AU>
- Subject: Re: Perl thread problems in VM/ESA
- Date: Thu, 15 Oct 1998 07:18:35 +1300
- Message-ID: <3624EAFA.16163A2B@mailbox.tabnsw.com.au>
-
- and private email:
-
- From: Neale Ferguson <NEALE@PUCC.PRINCETON.EDU>
- Subject: perl archive
- Date: Sun, 11 Oct 1998 19:28:54 EDT
- Message-Id: <19981011233112Z67215-26626+1513@outbound.Princeton.EDU>
- which gave a pointer to
-
- http://pucc.princeton.edu/~neale/perl.tar
-
- (based on Perl 5.005_51)
- Branch: cfgperl
- + hints/vmesa.sh vmesa/Makefile vmesa/vmesa.c vmesa/vmesaish.h
- ! ext/Errno/Errno_pm.PL perl.c perl.h perly.y pp_sys.c
- ! t/io/pipe.t t/lib/cgi-html.t t/lib/ipc_sysv.t t/op/magic.t
- ! t/op/pack.t t/op/quotemeta.t t/op/subst.t util.c x2p/a2p.h
-____________________________________________________________________________
-[ 2005] By: jhi on 1998/10/17 13:17:19
- Log: Integrate mainperl.
- Branch: cfgperl
- !> Porting/genlog ext/B/B/CC.pm ext/POSIX/POSIX.pm
- !> lib/ExtUtils/MM_Win32.pm lib/ExtUtils/MakeMaker.pm
- !> lib/Term/Complete.pm op.c opcode.h opcode.pl os2/Makefile.SHs
- !> os2/os2.c pod/perlfunc.pod pod/perlxs.pod pp.c sv.c
- !> t/op/grent.t t/op/sysio.t t/op/tiehandle.t toke.c
- !> utils/perldoc.PL vms/ext/Stdio/Stdio.pm win32/Makefile
- !> win32/makefile.mk
-____________________________________________________________________________
-[ 2004] By: jhi on 1998/10/17 11:19:06
- Log: Removed an extra ' from the int64_t test.
- Branch: cfgperl
- ! Configure
-____________________________________________________________________________
-[ 2003] By: gsar on 1998/10/17 04:11:40
- Log: silence -w noises (suggested by Greg Bacon)
- Branch: perl
- ! lib/Term/Complete.pm
-____________________________________________________________________________
-[ 2002] By: gsar on 1998/10/17 04:07:48
- Log: From: Gisle Aas <gisle@aas.no>
- Date: 14 Oct 1998 15:53:14 +0200
- Message-ID: <m3g1cr9rn9.fsf@furu.g.aas.no>
- Subject: Re: chr(0xFFFF_FFFF) and "\x{10_FFFF}" [PATCH 5.005_52]
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 2001] By: gsar on 1998/10/17 04:06:10
- Log: From: Gisle Aas <gisle@aas.no>
- Date: 14 Oct 1998 15:17:44 +0200
- Message-ID: <m3iuhn9taf.fsf@furu.g.aas.no>
- Subject: [PATCH 5.005_52] Core dump from "Missing right brace on \x{}"
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 2000] By: gsar on 1998/10/17 03:06:33
- Log: From: Gisle Aas <gisle@aas.no>
- Date: 14 Oct 1998 00:38:06 +0200
- Message-ID: <m3iuhonl4h.fsf@furu.g.aas.no>
- Subject: [PATCH 5.005_52] utf8 substr can access memory outside PVX buffer
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1999] By: gsar on 1998/10/17 03:04:48
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Tue, 13 Oct 1998 15:10:57 -0700
- Message-Id: <3.0.6.32.19981013151057.00a947a0@ous.edu>
- Subject: [PATCH 5.004/5.005/5.006]Doc patch to VMS::Stdio module
- Branch: perl
- ! vms/ext/Stdio/Stdio.pm
-____________________________________________________________________________
-[ 1998] By: gsar on 1998/10/17 03:00:40
- Log: skip readonly vars and unref references when doing a reset()
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1997] By: gsar on 1998/10/17 02:49:19
- Log: fix buggy treatment of large checksums on unicode strings
- From: Gisle Aas <gisle@aas.no>
- Date: 13 Oct 1998 21:35:39 +0200
- Message-ID: <m31zocp850.fsf@furu.g.aas.no>
- Subject: unpack("%48U*",...) [PATCH 5.005_52]
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 1996] By: gsar on 1998/10/17 02:43:22
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 13 Oct 1998 04:46:00 -0400 (EDT)
- Message-Id: <199810130846.EAA00769@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_52] Memory overrun in os2.c
- Branch: perl
- ! os2/Makefile.SHs os2/os2.c
-____________________________________________________________________________
-[ 1995] By: gsar on 1998/10/17 02:42:01
- Log: clarify section name rules for typemaps
- Branch: perl
- ! pod/perlxs.pod
-____________________________________________________________________________
-[ 1994] By: gsar on 1998/10/17 02:33:02
- Log: whitespace-proof grent.t
- Branch: perl
- ! t/op/grent.t
-____________________________________________________________________________
-[ 1993] By: gsar on 1998/10/17 02:27:29
- Log: fix bug in B::CC::pp_sassign()
- From: "vishal bhatia" <vishalb@hotmail.com>
- Date: Sun, 11 Oct 1998 18:41:38 PDT
- Message-ID: <19981012014139.19614.qmail@hotmail.com>
- Subject: B::CC problems with pp_sassign routine
- Branch: perl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 1992] By: gsar on 1998/10/17 02:17:49
- Log: applied suggested patch with small doc tweak
- From: Gisle Aas <gisle@aas.no>
- Date: 11 Oct 1998 12:53:13 +0200
- Message-ID: <m3u31bfjza.fsf@furu.g.aas.no>
- Subject: Re: [PATCH 5.005_52] Optional syswrite LENGTH argument
- Branch: perl
- ! opcode.h opcode.pl pod/perlfunc.pod pp_sys.c t/op/sysio.t
- ! t/op/tiehandle.t
-____________________________________________________________________________
-[ 1991] By: gsar on 1998/10/17 02:08:30
- Log: apply non-conflicting parts from suggested patch
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 10 Oct 1998 13:15:45 +0200
- Message-ID: <36223ed7.18279374@smtp1.ibm.net>
- Subject: [PATCH 5.005_52] Still more MakeMaker patches
- Branch: perl
- ! lib/ExtUtils/MM_Win32.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1990] By: gsar on 1998/10/17 02:01:24
- Log: provide option to enable optimization with VC (suggested by Jan
- Dubois)
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1989] By: gsar on 1998/10/17 01:55:27
- Log: Rhapsody DR2 has bsd/ctypes.h, not objc/NXCType.h (suggested by
- Dave Leppik <dleppik@gage.com>
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 1988] By: gsar on 1998/10/17 01:49:05
- Log: stray typo found by Hugo van der Sanden
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1987] By: gsar on 1998/10/17 01:45:52
- Log: perldoc pod update
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Date: 06 Oct 1998 23:56:51 -0600
- Message-ID: <m3g1d0kj8c.fsf@perrin.dimensional.com>
- Subject: [PATCH _02 and _52] perldoc
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1986] By: gsar on 1998/10/17 01:41:40
- Log: qualify names of builtins
- Branch: perl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 1982] By: gbarr on 1998/10/17 00:20:57
- Log: From: Jochen Wiedmann <joe@ispsoft.de>
- Date: Thu, 17 Sep 1998 17:16:06 +0200
- Message-ID: <360127B6.E44564A@ispsoft.de>
- Subject: [PATCH] ExtUtils::MakeMaker::prompt cannot return 0
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1978] By: gsar on 1998/10/16 01:58:58
- Log: integrate cfgperl mods into mainline
- Branch: perl
- +> ext/DynaLoader/dl_vmesa.xs
- ! Porting/genlog
- !> Configure MANIFEST Makefile.SH config_h.SH
- !> ext/Thread/Thread.xs gv.c hints/hpux.sh hints/irix_6.sh
- !> hints/linux.sh hints/os390.sh op.c t/op/pat.t thread.h
- !> x2p/Makefile.SH
-____________________________________________________________________________
-[ 1976] By: gsar on 1998/10/16 00:10:52
- Log: stray tweak
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1975] By: gsar on 1998/10/15 23:54:38
- Log: propagate typeness of lexicals while cloning them
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1974] By: gsar on 1998/10/15 23:53:25
- Log: s/last/first/ typo in append_list()
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1973] By: gsar on 1998/10/15 20:06:17
- Log: nuke confperl branch and contents
- Branch: confperl
- - (delete 1284 files)
-____________________________________________________________________________
-[ 1972] By: jhi on 1998/10/15 07:07:35
- Log: Test #162 had been added but the "print 1..161" had not been updated.
- Branch: cfgperl
- ! t/op/pat.t
-____________________________________________________________________________
-[ 1971] By: gsar on 1998/10/15 03:09:58
- Log: check in all confperl changes as of change#1964 into cfgperl
- Branch: cfgperl
- + ext/DynaLoader/dl_vmesa.xs
- ! Configure MANIFEST Makefile.SH config_h.SH
- ! ext/Thread/Thread.xs gv.c hints/hpux.sh hints/irix_6.sh
- ! hints/linux.sh hints/os390.sh op.c thread.h x2p/Makefile.SH
-____________________________________________________________________________
-[ 1970] By: gsar on 1998/10/15 03:05:59
- Log: integrate mainline to get tr.t
- Branch: cfgperl
- +> t/op/tr.t
-____________________________________________________________________________
-[ 1969] By: gsar on 1998/10/15 03:04:17
- Log: add missing tr.t to repository
- Branch: perl
- + t/op/tr.t
-____________________________________________________________________________
-[ 1968] By: gsar on 1998/10/15 03:02:43
- Log: create cfgperl branch
- Branch: cfgperl
- +> (branch 1282 files)
-____________________________________________________________________________
-[ 1967] By: gsar on 1998/10/15 02:46:08
- Log: correct bugs exposed in MM_Unix.pm by commenting out Selfloader
- (MAN3PODS cannot be set to ' '; stray stricture violation)
- Branch: perl
- ! ext/B/Makefile.PL ext/DB_File/Makefile.PL
- ! ext/Data/Dumper/Makefile.PL ext/DynaLoader/Makefile.PL
- ! ext/Errno/Makefile.PL ext/Fcntl/Makefile.PL
- ! ext/GDBM_File/Makefile.PL ext/IO/Makefile.PL
- ! ext/IPC/SysV/Makefile.PL ext/NDBM_File/Makefile.PL
- ! ext/ODBM_File/Makefile.PL ext/Opcode/Makefile.PL
- ! ext/POSIX/Makefile.PL ext/SDBM_File/Makefile.PL
- ! ext/Socket/Makefile.PL ext/Thread/Makefile.PL
- ! ext/attrs/Makefile.PL ext/re/Makefile.PL
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 1966] By: gsar on 1998/10/15 02:19:03
- Log: tweak to make fix in change#1944 behave correctly for closures
- created within eval''
- Branch: perl
- ! op.c t/op/eval.t
-____________________________________________________________________________
-[ 1965] By: gsar on 1998/10/14 23:22:41
- Log: use better numbers for exitstatus test
- Branch: perl
- ! t/op/die_exit.t
-____________________________________________________________________________
-[ 1964] By: jhi on 1998/10/14 17:25:41
- Log: Add VM/ESA dynaloading (uses <dll.h>).
- Branch: confperl
- + ext/DynaLoader/dl_vmesa.xs
- ! MANIFEST
-____________________________________________________________________________
-[ 1963] By: jhi on 1998/10/14 17:17:10
- Log: Remove a2p.loadmap in 'clean' target.
- Branch: confperl
- ! x2p/Makefile.SH
-____________________________________________________________________________
-[ 1962] By: jhi on 1998/10/14 17:13:11
- Log: VM/ESA produces also .prelmaps. (No, not .perlmaps...)
- Branch: confperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1961] By: jhi on 1998/10/14 16:27:39
- Log: VM/ESA creates executable.loadmaps.
- Branch: confperl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1960] By: jhi on 1998/10/14 15:37:39
- Log: Introduce SCHED_YIELD (one of sched_yield(),
- pthread_yield(), or pthread_yield(NULL)).
- YIELD is then defined using SCHED_YIELD unless
- a platform-specific YIELD has already been defined.
-
- Support pthread_attr_setdetachstate(pthread_attr_t*, int*).
-
- The need for pthread_yield(NULL) and pthread_attr_setdet...
- introduced by (private email)
-
- From: Neale Ferguson <neale@VMA.TABNSW.COM.AU>
- Date: Sat, 10 Oct 1998 21:08:15 +1300
- Message-ID: <361F15EE.47376EC@mailbox.tabnsw.com.au>
- Subject: Re: Perl thread problems in VM/ESA
-
- Better select() protoprobe (for AIX), from (private email)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Fri, 2 Oct 1998 14:52:25 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.981002144601.11832D-100000@newton.phys>
- Subject: AIX select (fwd)
- From: Lars Hecking <lhecking@nmrc.ucc.ie>
- To: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Fri, 2 Oct 1998 10:40:01 +0100
- Subject: AIX select
-
- Linux-avoid-so.X.Y, based on
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- Date: Tue, 13 Oct 1998 15:55:07 -0400
- Message-ID: <19981013155507.B4004@O2.chapin.edu>
- Subject: Re: [PATCH 5.005_52] [Was: Re: How can Debian accomodate new installation ?]
- Branch: confperl
- ! Configure config_h.SH ext/Thread/Thread.xs hints/linux.sh
- ! thread.h
-____________________________________________________________________________
-[ 1959] By: jhi on 1998/10/14 12:51:26
- Log: Some old pthread implementations have
- pthread_attr_setdetachstate(pthread_attr_t*, int*).
- Branch: confperl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 1958] By: jhi on 1998/10/14 12:41:11
- Log: SCHED_YIELD and ATTR_JOINABLE fixes. Thread.xs and Configure
- counterparts will follow soon.
- Branch: confperl
- ! thread.h
-____________________________________________________________________________
-[ 1957] By: jhi on 1998/10/14 12:38:11
- Log: Add tr.t (MANIFEST already knew about it, strange)
- Branch: confperl
- + t/op/tr.t
-____________________________________________________________________________
-[ 1956] By: jhi on 1998/10/14 12:24:35
- Log: Mutexen should be initialized only once.
- Branch: confperl
- ! gv.c op.c
-____________________________________________________________________________
-[ 1955] By: jhi on 1998/10/14 12:19:38
- Log: os390 has its own cppstdin.
- Branch: confperl
- ! hints/os390.sh
-____________________________________________________________________________
-[ 1954] By: jhi on 1998/10/14 12:15:06
- Log: Integrate with mainperl.
- Branch: confperl
- !> (integrate 1280 files)
-____________________________________________________________________________
-[ 1953] By: jhi on 1998/10/14 11:48:08
- Log: Removed duplicate CMA threads code for HPUX 10.X.
- (probably residue of patch(1) being too understanding)
- Enhanced 64-bit settings. (redo change#1940)
- Branch: confperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 1952] By: jhi on 1998/10/14 11:45:16
- Log: (redo change#1949) Detypo in the d_open64 warning about
- the impending WHOA.
- Branch: confperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 1951] By: jhi on 1998/10/14 10:54:16
- Log: Mutexen should only be inited once, after they have been New()ed.
- Branch: confperl
- ! gv.c op.c
-____________________________________________________________________________
-[ 1950] By: jhi on 1998/10/14 10:41:43
- Log: Own cppstdin.
- Branch: confperl
- ! hints/os390.sh
-____________________________________________________________________________
-[ 1949] By: jhi on 1998/10/14 10:34:23
- Log: Detypo in the d_open64 warning about the impending WHOA.
- Branch: confperl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 1948] By: gsar on 1998/10/14 05:38:01
- Log: two typos
- Branch: perl
- ! pp_hot.c t/op/eval.t
-____________________________________________________________________________
-[ 1947] By: gsar on 1998/10/14 05:37:10
- Log: let docatch() pass the buck when restartop turns out to be null,
- making exceptions in BEGIN{} propagate as expected
- Branch: perl
- ! pp_ctl.c t/op/misc.t
-____________________________________________________________________________
-[ 1946] By: gsar on 1998/10/13 03:41:49
- Log: add missing file from change#1943
- Branch: perl
- ! proto.h
-____________________________________________________________________________
-[ 1945] By: gsar on 1998/10/13 03:32:02
- Log: defer "deep recursion" warnings until CXt_SUB context is properly
- set up
- Branch: perl
- ! pp_hot.c t/pragma/warn/pp_hot
-____________________________________________________________________________
-[ 1944] By: gsar on 1998/10/13 03:15:50
- Log: change#1614 merely disabled earlier fix (doh!); undo it and properly
- fixup the cop_seq value that must be seen by lexical lookups that
- emanate within eval''
- Branch: perl
- ! cop.h op.c pp_ctl.c pp_hot.c scope.c t/op/eval.t
-____________________________________________________________________________
-[ 1943] By: gsar on 1998/10/13 02:06:09
- Log: ensure recursive attempts to findlex()icals know enough about where
- the last eval'' context was encountered
- Branch: perl
- ! op.c t/op/eval.t
-____________________________________________________________________________
-[ 1942] By: gsar on 1998/10/13 02:01:24
- Log: force copy of substrings when matching against temporaries
- Branch: perl
- ! pp_hot.c t/op/pat.t
-____________________________________________________________________________
-[ 1941] By: gsar on 1998/10/13 01:49:16
- Log: don't longjmp() in pp_goto() (regressive bug from old single-stack
- implementation)
- Branch: perl
- ! pp_ctl.c t/op/runlevel.t
-____________________________________________________________________________
-[ 1940] By: jhi on 1998/10/12 09:57:44
- Log: Removed duplicate CMA threads code for HPUX 10.X.
- (probably residue of patch(1) being too understanding)
- Enhanced 64-bit settings.
- Branch: confperl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 1939] By: jhi on 1998/10/12 09:53:11
- Log: Initial sync from mainline perl.
- Branch: confperl
- + (add 1282 files)
-____________________________________________________________________________
-[ 1937] By: gsar on 1998/10/06 21:16:34
- Log: fix $/ init for USE_THREADS
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 1936] By: gsar on 1998/10/06 07:19:39
- Log: fix globals caught by change#1927; builds and tests on Solaris
- Branch: perl
- ! Changes mg.c op.c perl.c pp_ctl.c regcomp.c utf8.c utf8.h
- ! warning.h warning.pl
-____________________________________________________________________________
-[ 1935] By: gsar on 1998/10/06 06:50:35
- Log: add test for previous fix
- Branch: perl
- ! ext/Thread/create.t
-____________________________________________________________________________
-[ 1934] By: gsar on 1998/10/06 06:37:36
- Log: fix USE_THREADS coredump due to uninitialized PL_hv_fetch_ent_mh
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 1933] By: gsar on 1998/10/06 05:04:20
- Log: undo bogus part of change#1903 (as pointed out by Larry)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 1932] By: gsar on 1998/10/06 04:21:31
- Log: added tweaked version of suggested patch
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 03 Oct 1998 19:04:48 +0200
- Message-ID: <361d54b2.36841294@smtp1.ibm.net>
- Subject: [PATCH 5.005_52] More MakeMaker patches
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
- ! lib/ExtUtils/Mkbootstrap.pm lib/ExtUtils/Mksymlists.pm
-____________________________________________________________________________
-[ 1931] By: gsar on 1998/10/06 04:04:33
- Log: use cpp symbols instead of hardwired constants
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Mon, 05 Oct 1998 09:23:33 +0100
- Message-Id: <199810050823.JAA00891@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_52] By the numbers (resend)
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1930] By: gsar on 1998/10/06 04:01:55
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199810050637.CAA07781@monk.mps.ohio-state.edu>
- Date: Mon, 5 Oct 1998 02:37:43 -0400 (EDT)
- Subject: [PATCH 5.005_52] Cumulative OS/2-related patch
- Branch: perl
- ! Makefile.SH hints/os2.sh lib/ExtUtils/MM_OS2.pm mg.c
- ! os2/Changes os2/Makefile.SHs os2/os2.c perl_exp.SH util.c
-____________________________________________________________________________
-[ 1929] By: gsar on 1998/10/06 03:50:36
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 5 Oct 1998 02:39:00 -0400 (EDT)
- Message-Id: <199810050639.CAA07803@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Minor test improvement
- Branch: perl
- ! t/op/magic.t
-____________________________________________________________________________
-[ 1928] By: gsar on 1998/10/06 03:49:03
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 5 Oct 1998 02:38:23 -0400 (EDT)
- Message-Id: <199810050638.CAA07792@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] emacs/ptags inprovements
- Branch: perl
- ! emacs/ptags
-____________________________________________________________________________
-[ 1927] By: gsar on 1998/10/06 03:47:44
- Log: disable C<#define dirty PL_dirty> et al.
- Branch: perl
- ! embed.pl embedvar.h
-____________________________________________________________________________
-[ 1926] By: gsar on 1998/10/06 03:43:32
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- Date: Sun, 04 Oct 1998 14:48:11 -0400
- Message-ID: <19981004184811.16048.qmail@plover.com>
- Subject: PATCH: perldoc -f does not locate -e, -r, -x, etc.
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1925] By: gsar on 1998/10/06 03:27:35
- Log: disable USE_THREADS when PERL_OBJECT is enabled
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1924] By: gsar on 1998/10/06 03:26:54
- Log: remove spurious unused conflicting globals (PL_yy{v,s}sp)
- Branch: perl
- ! Makefile.SH Todo-5.005 embedvar.h perlvars.h perly.c toke.c
- ! vms/perly_c.vms
-____________________________________________________________________________
-[ 1923] By: gsar on 1998/10/03 05:19:56
- Log: make C<use> recognize C<require> overrides; allow C<do EXPR> to be
- overridden
- Branch: perl
- ! embed.h global.sym objXSUB.h objpp.h op.c perly.c perly.y
- ! proto.h vms/perly_c.vms
-____________________________________________________________________________
-[ 1922] By: gsar on 1998/10/03 03:59:50
- Log: suppress manifypods leak in extensions
- Branch: perl
- ! ext/Errno/Makefile.PL ext/IPC/SysV/Makefile.PL pod/pod2man.PL
-____________________________________________________________________________
-[ 1921] By: gsar on 1998/10/02 22:30:15
- Log: os390 fixes (suggested by Peter Prymmer)
- Branch: perl
- ! Makefile.SH regcomp.c
-____________________________________________________________________________
-[ 1920] By: gsar on 1998/10/02 21:41:19
- Log: squelch undef warnings
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Fri, 02 Oct 1998 11:01:14 +0100
- Message-Id: <199810021001.LAA19214@crypt.compulink.co.uk>
- Subject: [PATCH] Re: Apparent bug in Math::BigInt
- Branch: perl
- ! Changes lib/Math/BigInt.pm
-____________________________________________________________________________
-[ 1919] By: gsar on 1998/10/02 04:59:13
- Log: add note to INSTALL about ANSI C
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 1918] By: gsar on 1998/10/02 04:21:10
- Log: tolerate spaces when fixing up __cplusplus output by old h2xs
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 30 Sep 1998 23:35:30 +0200
- Message-ID: <3619a1e8.12336659@smtp1.ibm.net>
- Subject: [PATCH 5.005_52]: xsubpp and PERL_OBJECT
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 1917] By: gsar on 1998/10/02 04:16:02
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Thu, 1 Oct 1998 11:37:26 +0300 (EET DST)
- Message-Id: <199810010837.LAA31371@alpha.hut.fi>
- Subject: Re: Configure test for selectbits busted
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 1916] By: gsar on 1998/10/02 04:14:17
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Wed, 30 Sep 1998 17:15:20 -0700
- Message-Id: <3.0.6.32.19980930171520.00b22eb0@ous.edu>
- Subject: [PATCH 5.005_02]VMS config tweaks
- Branch: perl
- ! vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 1915] By: gsar on 1998/10/02 04:10:47
- Log: use Off_t to permit 64-bit seek()
- From: Scott Henry <scotth@sgi.com>
- Date: 29 Sep 1998 17:38:46 -0700
- Message-ID: <yd8lnn2zb6x.fsf_-_@hoshi.engr.sgi.com>
- Subject: Re: [PATCH] 5.005_02: Configure "Massive Attack"
- --
- Date: 28 Sep 1998 18:55:37 -0700
- Message-ID: <yd8ogrz1y3q.fsf@hoshi.engr.sgi.com>
- Subject: Re: [PATCH] 5.005_51: Configure "Massive Attack"
- Branch: perl
- ! doio.c pp_sys.c proto.h sv.c
-____________________________________________________________________________
-[ 1914] By: gsar on 1998/10/02 04:05:36
- Log: normalize tm struct passed to strftime() with mktime()
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Date: Wed, 30 Sep 1998 15:12:09 -0400
- Message-Id: <199809301912.PAA26119@Orb.Nashua.NH.US>
- Subject: [PATCH 5.005_52] Re: POSIX::strftime returns incorrect date
- Branch: perl
- ! ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 1913] By: gsar on 1998/10/02 03:59:46
- Log: don't try to run foo_SH.orig etc.
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 1912] By: gsar on 1998/10/02 03:45:37
- Log: make warning about glob process failure optional
- Branch: perl
- ! pod/perldiag.pod pp_hot.c
-____________________________________________________________________________
-[ 1911] By: gsar on 1998/10/02 02:52:21
- Log: document yet another RE diagnostic, make it consistent with REG_INFTY
- From: Dominic Dunlop <domo@vo.lu>
- Date: Tue, 29 Sep 1998 21:06:30 +0000
- Message-Id: <v03110700b236f60b1375@[212.24.192.106]>
- Subject: [PATCH 5.005_52] Fix hard-coded "matches null string many times" limit
- --
- Date: Wed, 30 Sep 1998 11:46:44 +0000
- Message-Id: <v03110702b237beb04830@[212.24.192.74]>
- Subject: [PATCH 5.005_52] Add "Strange *+?{} ..." to perldiag
- Branch: perl
- ! pod/perldiag.pod regcomp.c
-____________________________________________________________________________
-[ 1910] By: gsar on 1998/10/02 02:48:48
- Log: minor Configure tweaks (via private mail)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Wed, 30 Sep 1998 02:25:06 +0300 (EET DST)
- Message-Id: <199809292325.CAA19737@alpha.hut.fi>
- Subject: [PATCH] 5.005_52: the drizzle continues
- Branch: perl
- ! Configure config_h.SH handy.h
-____________________________________________________________________________
-[ 1909] By: gsar on 1998/10/02 02:46:39
- Log: update SCO hints for dynamic loading
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 28 Sep 1998 16:50:38 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980928164648.8130E-100000@newton.phys>
- Subject: [PATCH 5.004_04-MAINT_TRIAL_5 and 5.005_xx] Re: Perl on SCO_SV
- --
- Date: Tue, 29 Sep 1998 16:48:55 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980929164612.8634A-100000@newton.phys>
- Subject: Re: [PATCH 5.004_04-MAINT_TRIAL_5 and 5.005_xx] Re: Perl on SCO_SV
- Branch: perl
- ! hints/sco.sh
-____________________________________________________________________________
-[ 1908] By: gsar on 1998/10/02 02:33:39
- Log: make File::Find work when wanted() is autoloaded or a symbolic ref
- Branch: perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 1907] By: gsar on 1998/10/02 02:21:52
- Log: applied patches, but retained old behavior for win32 (where compilers
- can't read from stdin at all)
- From: Graham Barr <gbarr@ti.com>
- Date: Mon, 28 Sep 1998 09:41:49 -0500
- Message-ID: <19980928094149.B26576@asic.sc.ti.com>
- Subject: Re: 5.005_51 Errno invokes cpprun incorrectly
- --
- Date: Tue, 29 Sep 1998 12:35:43 -0500
- Message-ID: <19980929123543.Z26576@asic.sc.ti.com>
- Subject: Re: 5.005_51 Errno invokes cpprun incorrectly
- Branch: perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 1906] By: gsar on 1998/10/02 02:02:19
- Log: tolerate whitespace in /etc/group entries (suggested by Jarkko
- Hietaniemi)
- Branch: perl
- ! t/op/grent.t
-____________________________________________________________________________
-[ 1905] By: gsar on 1998/10/02 01:59:56
- Log: win32 caveats about truncate()
- Branch: perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 1904] By: gsar on 1998/10/02 01:53:25
- Log: various Configure and hints updates (prefer drand48() or random()
- over rand(); add -Dusemultiplicity; enhanced 64-bitness); patch
- applied modulo SCO hints superceded by later patch
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 29 Sep 1998 00:56:33 +0300 (EET DST)
- Message-Id: <199809282156.AAA18615@alpha.hut.fi>
- Subject: [PATCH] 5.005_52: Configure et al:
- Branch: perl
- + ext/IPC/SysV/hints/next_3.pl
- ! Configure INSTALL MANIFEST config_h.SH ext/IPC/SysV/SysV.xs
- ! hints/dec_osf.sh hints/irix_6.sh hints/next_3.sh
- ! hints/solaris_2.sh perl.h pod/perldiag.pod pp.c pp_sys.c
-____________________________________________________________________________
-[ 1903] By: gsar on 1998/10/02 01:42:37
- Log: fixes for bugs in /RE/p from Hugo van der Sanden
- Date: Mon, 28 Sep 1998 17:41:49 +0100
- Message-Id: <199809281641.RAA02450@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_52] Re: More on ?p
- --
- Date: Thu, 01 Oct 1998 09:10:58 +0100
- Message-Id: <199810010810.JAA16426@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_52] ?p fix
- --
- Date: Thu, 01 Oct 1998 10:45:56 +0100
- Message-Id: <199810010945.KAA16733@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_52] more on ?p
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 1902] By: gsar on 1998/10/02 01:36:14
- Log: From: Kenneth Duda <kjd@cisco.com>
- Date: Sun, 27 Sep 1998 20:22:12 -0700 (PDT)
- Message-Id: <199809280322.UAA01261@scorpion.cisco.com>
- Subject: writemain dies when there are more than 4000 characters of extensions
- Branch: perl
- ! writemain.SH
-____________________________________________________________________________
-[ 1901] By: gsar on 1998/10/02 01:33:16
- Log: tweak run_byacc recipe
- Branch: perl
- ! Makefile.SH Porting/pumpkin.pod
-____________________________________________________________________________
-[ 1900] By: gsar on 1998/10/02 01:02:09
- Log: use SETERRNO() to reset errno (suggested by Charles Bailey)
- Branch: perl
- ! perl.h pp_ctl.c
-____________________________________________________________________________
-[ 1899] By: gsar on 1998/09/28 20:46:30
- Log: fix various 5.00552 mishaps (fixes suggested by Jan Dubois,
- Kurt Starsinic, Spider Boardman, Dan Sugalski and Albert
- Dvornik)
- Branch: perl
- ! hints/irix_6.sh lib/ExtUtils/MakeMaker.pm mg.c scope.c
-____________________________________________________________________________
-[ 1898] By: gsar on 1998/09/28 20:42:52
- Log: flush unsubmitted 5.00552 change
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 1897] By: gsar on 1998/09/27 04:43:06
- Log: run vms_yfix.pl
- Branch: perl
- ! vms/perly_c.vms
-____________________________________________________________________________
-[ 1896] By: gsar on 1998/09/27 03:38:55
- Log: small tweak on last change
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 1895] By: gsar on 1998/09/27 03:17:17
- Log: fix win32_stat() to do the right thing for share names
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 1891] By: larry on 1998/09/25 18:50:40
- Log: Fixed apostrophe problem from Mark Knutsen.
- Branch: perl
- ! sv.h
-
-----------------
-Version 5.005_52
-----------------
-
-____________________________________________________________________________
-[ 1890] By: gsar on 1998/09/25 10:25:00
- Log: update template config.sh, add new config vars to win32 stuff
- Branch: perl
- ! Changes Porting/config.sh Porting/config_H config_h.SH objpp.h
- ! pp_sys.c proto.h win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/win32.h
-____________________________________________________________________________
-[ 1889] By: gsar on 1998/09/25 07:13:13
- Log: big Configure update from Jarkko: sync metaconfig units; d_statblks fix
- for Linux; hpux CMA-threads hints; ELF support for FreeBSD; beginnings
- of full-fledged 64-bit support (including support for: fseeko/ftello,
- Quad_t aka long long, hpux and irix 64-bits hints, new 64-bit constants
- in Fcntl)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 11 Sep 1998 23:56:11 +0300 (EET DST)
- Message-Id: <199809112056.XAA04720@alpha.hut.fi>
- Subject: [PATCH] 5.005_51: Configure "Massive Attack"
- --
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Date: 12 Sep 1998 09:44:25 +0300
- Message-ID: <oeeaf45bzjq.fsf@alpha.hut.fi>
- Subject: Re: [PATCH] 5.005_51: Configure "Massive Attack"
- Branch: perl
- + lib/filetest.pm
- ! Configure MANIFEST Makefile.SH config_h.SH doio.c embedvar.h
- ! ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs handy.h hints/dec_osf.sh
- ! hints/freebsd.sh hints/hpux.sh hints/irix_6.sh objXSUB.h
- ! perl.c perl.h perl_exp.SH perlio.c perlvars.h pod/perldiag.pod
- ! pod/perlfunc.pod pp_sys.c proto.h win32/GenCAPI.pl
- ! win32/makedef.pl
-____________________________________________________________________________
-[ 1888] By: gsar on 1998/09/25 06:27:12
- Log: bump patchlevel to 52; other little tweaks for threads, win32 builds
- Branch: perl
- ! doop.c mg.c patchlevel.h regexec.c win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makedef.pl win32/makefile.mk win32/win32.c
-____________________________________________________________________________
-[ 1887] By: gsar on 1998/09/25 04:50:49
- Log: win32.c tweak
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 1886] By: gsar on 1998/09/25 04:47:32
- Log: s/MAKEMAKEROPT/PERL_MM_OPT/
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1885] By: gsar on 1998/09/25 04:05:09
- Log: From: Dominic Dunlop <domo@vo.lu>
- Date: Thu, 10 Sep 1998 11:02:46 +0000
- Message-Id: <v03110703b21d581d7ef1@[212.24.192.107]>
- Subject: MM_Unix::canonpath erroneously turns leading // into /
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 1884] By: gsar on 1998/09/25 03:06:10
- Log: temporarily disable perl malloc for a2p until we clean up
- conflicting malloc() declarations everywhere
- Branch: perl
- ! x2p/Makefile.SH
-____________________________________________________________________________
-[ 1883] By: gsar on 1998/09/25 02:27:00
- Log: remove obsolete win32/bin/*.pl
- Branch: perl
- - win32/bin/network.pl win32/bin/webget.pl win32/bin/www.pl
- ! Changes MANIFEST win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1882] By: gsar on 1998/09/25 02:04:43
- Log: missing file in last submit
- Branch: perl
- ! proto.h
-____________________________________________________________________________
-[ 1881] By: gsar on 1998/09/25 01:56:54
- Log: serial access to PL_x[inpr]v_root for USE_THREADS
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1880] By: gsar on 1998/09/25 01:19:38
- Log: lock sv_mutex in new_he() and del_he() for USE_THREADS
- From: Drago Goricanec <drago@king.otsd.ts.fujitsu.co.jp>
- Date: Thu, 24 Sep 1998 22:01:09 +0900
- Message-Id: <19980924220109J.drago@otsd.ts.fujitsu.co.jp>
- Subject: [PATCH 5.005_51] Re: Perl 5.005_51 not yet multi Thread safe
- Branch: perl
- ! hv.c proto.h
-____________________________________________________________________________
-[ 1879] By: gsar on 1998/09/25 00:20:07
- Log: tweaks to enable PERL_OBJECT to build & test on win32
- Branch: perl
- ! Changes doop.c mg.c objpp.h proto.h regexec.c util.c
- ! win32/GenCAPI.pl
-____________________________________________________________________________
-[ 1878] By: gsar on 1998/09/25 00:13:36
- Log: fix change#1861, which breaks default boot_xxx symbol generation
- Branch: perl
- ! lib/ExtUtils/Mksymlists.pm
-____________________________________________________________________________
-[ 1877] By: gsar on 1998/09/24 10:29:54
- Log: two tweaks for clean build and test on Solaris
- Branch: perl
- ! op.c t/op/subst.t
-____________________________________________________________________________
-[ 1876] By: gsar on 1998/09/24 09:04:43
- Log: From: Colin Kuskie <ckuskie@cadence.com>
- Date: Wed, 26 Aug 1998 14:53:01 -0700 (PDT)
- Message-ID: <Pine.GSO.3.96.980826143507.3258K-100000@pdxmail.cadence.com>
- Subject: [PATCH 5.005_51] perlform.pod
- Branch: perl
- ! pod/perlform.pod
-____________________________________________________________________________
-[ 1875] By: gsar on 1998/09/24 08:47:47
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 25 Aug 1998 15:35:58 -0400 (EDT)
- Message-Id: <199808251935.PAA11384@monk.mps.ohio-state.edu>
- Subject: Re: problem with (?p{}) [PATCH 5.005_5*]
- Branch: perl
- ! regexec.c
-____________________________________________________________________________
-[ 1874] By: gsar on 1998/09/24 08:44:55
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 25 Aug 1998 14:56:06 -0400 (EDT)
- Message-Id: <199808251856.OAA10825@monk.mps.ohio-state.edu>
- Subject: Re: your Regexp.patch dated 21.8 [PATCH]
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 1873] By: gsar on 1998/09/24 08:39:41
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 25 Aug 1998 04:29:49 -0400 (EDT)
- Message-Id: <199808250829.EAA02470@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Extraneous warning for (?()A|B)
- Branch: perl
- ! Changes regcomp.c
-____________________________________________________________________________
-[ 1872] By: gsar on 1998/09/24 08:37:00
- Log: From: Krishna Sethuraman <krishpl@shamu.engr.sgi.com>
- Date: Sun, 23 Aug 1998 23:18:38 PDT
- Message-Id: <199808240618.XAA05329@shamu.engr.sgi.com>
- Subject: new irix_6.sh hints file
- Branch: perl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 1871] By: gsar on 1998/09/24 07:26:37
- Log: correct FSF address in various places
- Branch: perl
- ! Copying README ext/B/README lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 1870] By: gsar on 1998/09/24 07:11:56
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Fri, 14 Aug 1998 09:20:16 PDT
- Message-Id: <3.0.5.32.19980814092016.00b37dc0@ous.edu>
- Subject: [PATCH 5.005_02] (and _5x I expect) VMS config procedure patch
- Branch: perl
- ! configure.com
-____________________________________________________________________________
-[ 1869] By: gsar on 1998/09/24 06:55:59
- Log: use STRICT_ALIGNMENT on IRIX to allow usemymalloc=y again
- From: Scott Henry <scotth@sgi.com>
- Date: 13 Aug 1998 09:52:15 PDT
- Message-Id: <yd8pve46czk.fsf@hoshi.engr.sgi.com>
- Subject: [PATCH] Irix USE_LONG_LONG/malloc.c incompatibility (was...)
- Branch: perl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 1868] By: gsar on 1998/09/24 06:51:23
- Log: From: Nathan Torkington <gnat@frii.com>
- Date: Thu, 13 Aug 1998 10:59:48 MDT
- Message-Id: <199808131659.KAA06179@prometheus.frii.com>
- Subject: [PATCH] 5.005_02 perlfunc.pod, improve umask entry
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1867] By: gsar on 1998/09/24 06:45:13
- Log: make C<goto &sub> AUTOLOAD-aware (autouse now works for modules
- that are autoloaded)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 1866] By: gsar on 1998/09/24 05:21:19
- Log: grandfather deprecated "$$<digit>" no more
- Branch: perl
- ! pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 1865] By: gsar on 1998/09/24 04:52:48
- Log: tweak PERL_HASH() to h=h+(h>>5) in order to improve distribution of
- low bits (suggested by Ilya Zakharevich)
- Branch: perl
- ! hv.h
-____________________________________________________________________________
-[ 1864] By: gsar on 1998/09/24 04:29:14
- Log: move yyglobal decls from perly.c to perlvars.h, regen headers, tweak
- perly_c.diff
- Branch: perl
- ! embed.h embedvar.h global.sym perlvars.h perly.c perly.h
- ! perly_c.diff toke.c
-____________________________________________________________________________
-[ 1863] By: gsar on 1998/09/24 03:36:30
- Log: provide locked access to string table for USE_THREADS
- Branch: perl
- ! embedvar.h hv.c intrpvar.h objXSUB.h perl.c thread.h
-____________________________________________________________________________
-[ 1862] By: gsar on 1998/09/24 03:30:32
- Log: remove bogus warn()
- Branch: perl
- ! embed.pl
-____________________________________________________________________________
-[ 1861] By: gsar on 1998/09/24 02:58:51
- Log: applied suggested patch, adapted for all platforms
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sun, 20 Sep 1998 12:56:38 +0200
- Message-ID: <3604de0c.12319885@smtp1.ibm.net>
- Subject: [New PATCH 5.005_02] Support Mksymlists FUNCLIST argument in MakeMaker
- Branch: perl
- ! lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MM_Win32.pm
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1860] By: gsar on 1998/09/24 02:16:14
- Log: upgrade to CPAN-1.40
- Branch: perl
- ! Changes lib/CPAN.pm lib/CPAN/FirstTime.pm
-____________________________________________________________________________
-[ 1859] By: gsar on 1998/09/24 02:08:59
- Log: use $ENV{MAKEMAKEROPT} to set default command line args
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1857] By: gsar on 1998/09/23 10:58:36
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 22 Sep 1998 17:30:16 -0400 (EDT)
- Message-Id: <199809222130.RAA17034@monk.mps.ohio-state.edu>
- Subject: More verbose Test::Harness [PATCH]
- Branch: perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 1856] By: gsar on 1998/09/23 10:56:24
- Log: update hints for OPENSTEP 4.2 on i386
- From: Gerben Wierda <Gerben_Wierda@RnA.nl>
- Date: Sun, 20 Sep 1998 01:03:18 +0200
- Message-Id: <9809192303.AA29190@Spike>
- Subject: Perl 5.005_02 compilation problems
- Branch: perl
- ! hints/next_4.sh
-____________________________________________________________________________
-[ 1855] By: gsar on 1998/09/23 10:52:27
- Log: reset errno after C<require> search (as suggested by Larry)
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 1854] By: gsar on 1998/09/23 10:50:26
- Log: misc pod tweaks
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod pod/perlport.pod
-____________________________________________________________________________
-[ 1853] By: gsar on 1998/09/23 10:46:06
- Log: make Pod/Html.pm handle the --title option properly (as suggested
- by gml4410@ggr.co.uk)
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 1852] By: gsar on 1998/09/23 10:41:39
- Log: SSNEW() API for allocating memory on the savestack
- From: Albert Dvornik <bert@genscan.com>
- Date: 17 Sep 1998 19:23:07 -0400
- Message-Id: <tqemtae338.fsf@puma.genscan.com>
- Subject: [PATCH 5.005_51] (was: why SAVEDESTRUCTOR()...)
- Branch: perl
- ! Changes Changes5.005 embed.h global.sym mg.c objXSUB.h objpp.h
- ! perl.h proto.h scope.c scope.h t/io/tell.t
-____________________________________________________________________________
-[ 1851] By: gsar on 1998/09/23 10:37:05
- Log: From: Jochen Wiedmann <joe@ispsoft.de>
- Date: Thu, 17 Sep 1998 17:16:06 +0200
- Message-ID: <360127B6.E44564A@ispsoft.de>
- Subject: [PATCH] ExtUtils::MakeMaker::prompt cannot return 0
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1850] By: gsar on 1998/09/23 10:33:05
- Log: From: andreas.koenig@kulturbox.de (Andreas J. Koenig)
- Date: 15 Sep 1998 01:32:31 +0200
- Message-ID: <sfchfya46eo.fsf@dubravka.in-berlin.de>
- Subject: Re: [PATCH] MakeMaker "test" target doesn't depend on "all"
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 1849] By: gsar on 1998/09/23 10:29:04
- Log: From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Sat, 12 Sep 1998 19:25:32 -0400 (EDT)
- Message-id: <01J1QBJUAY1I002KOW@cor.newman.upenn.edu>
- Subject: Re: extralibs.ld problem in MM_VMS.pm
- Branch: perl
- ! lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 1848] By: gsar on 1998/09/23 10:25:24
- Log: From: Roderick Schertler <roderick@argon.org>
- Date: 11 Sep 1998 16:19:21 -0400
- Message-ID: <pzyarqpfli.fsf@eeyore.ibcinc.com>
- Subject: Re: Open2 and memory leaks
- Branch: perl
- ! lib/IPC/Open3.pm
-____________________________________________________________________________
-[ 1847] By: gsar on 1998/09/23 10:18:31
- Log: From: Roderick Schertler <roderick@argon.org>
- Date: Wed, 09 Sep 1998 23:52:48 -0400
- Message-ID: <20567.905399568@eeyore.ibcinc.com>
- Subject: seed srand from /dev/urandom when possible
- Branch: perl
- ! pod/perlfunc.pod pp.c
-____________________________________________________________________________
-[ 1846] By: gsar on 1998/09/23 10:12:22
- Log: From: Roderick Schertler <roderick@argon.org>
- Date: Thu, 10 Sep 1998 00:32:17 -0400
- Message-ID: <21142.905401937@eeyore.ibcinc.com>
- Subject: doc update for crypt()'s salt
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1845] By: gsar on 1998/09/23 10:09:23
- Log: fix h2ph handling of C<#error "foo">
- From: SAKAI Kiyotaka <ksakai@netwk.ntt-at.co.jp>
- Date: Thu, 10 Sep 1998 09:59:33 +0900
- Message-Id: <19980910095933N.ksakai@netwk.ntt-at.co.jp>
- Subject: [5.005_02] h2ph problem
- Branch: perl
- ! utils/h2ph.PL
-____________________________________________________________________________
-[ 1844] By: gsar on 1998/09/23 10:06:13
- Log: plug strictly private function leaks in API listing
- Branch: perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 1843] By: gsar on 1998/09/23 10:02:57
- Log: hide symbol for static build
- From: Dominic Dunlop <domo@vo.lu>
- Date: Tue, 8 Sep 1998 21:40:46 +0000
- Message-Id: <v03110700b21b52db318d@[212.24.192.111]>
- Subject: Not OK: perl 5.00551 on powerpc-machten 4.1.1 [PATCH]
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 1842] By: gsar on 1998/09/23 09:52:46
- Log: define PUT_svindex(), PUT_opindex()
- Branch: perl
- ! ext/B/B/Assembler.pm
-____________________________________________________________________________
-[ 1841] By: gsar on 1998/09/23 09:44:25
- Log: From: Dominic Dunlop <domo@vo.lu>
- Date: Tue, 8 Sep 1998 15:34:53 +0000
- Message-Id: <v03110701b21afbdc7cfb@[212.24.192.76]>
- Subject: [PATCH 5.005_51] Eliminate pragma/warn-regexec test dependence on REG_INFTY value
- Branch: perl
- ! t/pragma/warn/regexec
-____________________________________________________________________________
-[ 1840] By: gsar on 1998/09/23 09:42:17
- Log: pl2bat tweak from Tye McQueen <tye@metronet.com>
- Branch: perl
- ! win32/bin/pl2bat.pl
-____________________________________________________________________________
-[ 1839] By: gsar on 1998/09/23 09:38:18
- Log: From: Drago Goricanec <drago@raptor.otsd.ts.fujitsu.co.jp>
- Date: Mon, 7 Sep 1998 17:36:09 +0900
- Message-Id: <199809070836.RAA14631@raptor.otsd.ts.fujitsu.co.jp>
- Subject: Thread::cond_wait bug in 5.005.51 causes deadlock
- Branch: perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 1838] By: gsar on 1998/09/23 09:21:11
- Log: From: "Green, Paul" <pgreen@seussnt.stratus.com>
- Date: Thu, 10 Sep 1998 00:02:07 -0400
- Message-ID: <646CD0392810D211B04A00A024BF26FB1022EB@terminator.sw.stratus.com>
- Subject: RE: [PATCH] 5.005_02 and 5.005_51: Stratus VOS port
- Branch: perl
- + README.vos vos/Changes vos/build.cm vos/compile_perl.cm
- + vos/config.h vos/config_h.SH_orig vos/perl.bind
- + vos/test_vos_dummies.c vos/vos_dummies.c vos/vosish.h
- ! MANIFEST perl.c perl.h pod/perlport.pod
-____________________________________________________________________________
-[ 1837] By: gsar on 1998/09/23 08:45:58
- Log: (via private mail)
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Sat, 05 Sep 1998 01:23:58 -0400 (EDT)
- Message-id: <01J1FH7R43NS002F14@cor.newman.upenn.edu>
- Subject: [Patch 5.005_02] Miscellaneous VMS cleanup
- Branch: perl
- ! Changes Changes5.005 README.vms ext/DynaLoader/dl_vms.xs
- ! lib/Cwd.pm lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MakeMaker.pm
- ! lib/ExtUtils/Mksymlists.pm lib/File/Copy.pm lib/File/Path.pm
- ! lib/File/Spec.pm pod/perldiag.pod pod/perlfaq1.pod
- ! pod/perlport.pod pod/perlrun.pod vms/ext/DCLsym/0README.txt
- ! vms/ext/DCLsym/DCLsym.pm vms/ext/DCLsym/DCLsym.xs
- ! vms/ext/Filespec.pm vms/ext/XSSymSet.pm vms/gen_shrfls.pl
- ! vms/mms2make.pl vms/perly_c.vms vms/sockadapt.c
- ! vms/sockadapt.h vms/test.com vms/vms.c vms/vms_yfix.pl
- ! vms/writemain.pl
-____________________________________________________________________________
-[ 1836] By: gsar on 1998/09/23 08:17:42
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 5 Sep 1998 00:14:51 -0400 (EDT)
- Message-Id: <199809050414.AAA19801@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] OS/2 spawning typos
- Branch: perl
- ! os2/os2.c
-____________________________________________________________________________
-[ 1835] By: gsar on 1998/09/23 08:09:55
- Log: warn on C<my($foo,$foo)>
- Branch: perl
- ! op.c pod/perldiag.pod
-____________________________________________________________________________
-[ 1834] By: gsar on 1998/09/23 07:35:56
- Log: From: pvhp@forte.com (Peter Prymmer)
- Date: Fri, 4 Sep 98 13:27:41 PDT
- Message-Id: <9809042027.AA04463@forte.com>
- Subject: [PATCH 5.005_02 && 5.005_51] general updates to README.vms
- Branch: perl
- ! README.vms
-____________________________________________________________________________
-[ 1833] By: gsar on 1998/09/23 07:27:34
- Log: From: Jeff Okamoto <okamoto@xfiles.intercon.hp.com>
- Date: Wed, 2 Sep 1998 10:06:49 -0700 (PDT)
- Message-Id: <199809021706.KAA26349@xfiles.intercon.hp.com>
- Subject: PATCH: 5.005_02 hint/hpux.sh
- Branch: perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 1832] By: gsar on 1998/09/23 07:22:40
- Log: fix (some) installhtml bugs
- From: Larry Parmelee <parmelee@CS.Cornell.EDU>
- Date: Tue, 1 Sep 1998 12:43:40 -0400 (EDT)
- Message-Id: <199809011643.MAA05702@sundown.cs.cornell.edu>
- Subject: installhtml script needs work
- Branch: perl
- ! installhtml
-____________________________________________________________________________
-[ 1831] By: gsar on 1998/09/23 07:19:30
- Log: document 'U' magic with examples
- From: Alan Burlison <Alan.Burlison@UK.Sun.com>
- Date: Tue, 1 Sep 1998 15:54:06 +0100 (BST)
- Message-Id: <199809011455.PAA00631@sale-wts>
- Subject: Re: Looking for some XS MAGIC examples...
- Branch: perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 1830] By: gsar on 1998/09/23 07:16:43
- Log: From: pvhp@forte.com (Peter Prymmer)
- Date: Mon, 31 Aug 98 17:13:49 PDT
- Message-Id: <9809010013.AA06737@forte.com>
- Subject: [PATCH: 5.005_02; yet another system configuration tip for OS/390]
- Branch: perl
- ! README.os390
-____________________________________________________________________________
-[ 1829] By: gsar on 1998/09/23 07:15:08
- Log: fix problematic typecast in filter_del()
- From: Mark P Lutz <tecmpl1@triton.ca.boeing.com>
- Date: Mon, 31 Aug 1998 21:13:11 GMT
- Message-Id: <199808312113.VAA53356@triton.ca.boeing.com>
- Subject: perl5.005_02 does not build on Cray T90
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 1828] By: gsar on 1998/09/23 07:11:34
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 31 Aug 1998 14:52:10 -0400 (EDT)
- Message-Id: <199808311852.OAA24676@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_5*] (?>) broken in RE
- Branch: perl
- ! regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 1827] By: gsar on 1998/09/23 07:09:50
- Log: U/WIN testsuite patches from Joe Buehler <jhpb@hekimian.com>
- Branch: perl
- ! t/op/grent.t t/op/groups.t
-____________________________________________________________________________
-[ 1826] By: gsar on 1998/09/23 07:03:16
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Wed, 12 Aug 1998 22:41:37 +0300 (EET DST)
- Message-Id: <199808121941.WAA06263@alpha.hut.fi>
- Subject: [PATCH] 5.004_50 or 5.005_02: get rid of interp.sym because not even AIX needs it
- Branch: perl
- - interp.sym
- ! MANIFEST Makefile.SH embed.pl perl_exp.SH
-____________________________________________________________________________
-[ 1825] By: gsar on 1998/09/23 06:56:40
- Log: re-introduce change#1703
- Branch: perl
- ! ext/re/re.pm pod/perlre.pod regcomp.c regexec.c thrdvar.h
-____________________________________________________________________________
-[ 1824] By: gsar on 1998/09/23 06:44:19
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 29 Aug 1998 17:38:30 -0400 (EDT)
- Message-Id: <199808292138.RAA18359@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Protect debugger from nonlocal exits
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 1823] By: gsar on 1998/09/23 06:41:34
- Log: From: Joe Buehler <jhpb@hekimian.com>
- Date: 29 Aug 1998 17:13:28 -0400
- Message-ID: <yd37lzro5jb.fsf@pandora.hekimian.com>
- Subject: patches for perl 5.005_51 under U/WIN
- Branch: perl
- + hints/uwin.sh
- ! Configure installman lib/ExtUtils/MM_Unix.pm makedepend.SH
- ! t/lib/posix.t
-____________________________________________________________________________
-[ 1822] By: gsar on 1998/09/23 06:36:59
- Log: add missing C<no utf8;> tweak from Larry
- Branch: perl
- ! t/op/subst.t
-____________________________________________________________________________
-[ 1821] By: gsar on 1998/09/23 06:27:51
- Log: s/runops/CALLRUNOPS/
- Branch: perl
- ! cc_runtime.h
-____________________________________________________________________________
-[ 1820] By: gsar on 1998/09/23 06:24:49
- Log: rename t/pragma/warn-* to t/pragma/warn/*, be 8.3-friendly
- Branch: perl
- +> t/pragma/warn/1global t/pragma/warn/2use t/pragma/warn/3both
- +> t/pragma/warn/4lint t/pragma/warn/5nolint t/pragma/warn/doio
- +> t/pragma/warn/gv t/pragma/warn/mg t/pragma/warn/op
- +> t/pragma/warn/perl t/pragma/warn/perly t/pragma/warn/pp
- +> t/pragma/warn/pp_ctl t/pragma/warn/pp_hot t/pragma/warn/pp_sys
- +> t/pragma/warn/regcomp t/pragma/warn/regexec t/pragma/warn/sv
- +> t/pragma/warn/taint t/pragma/warn/toke t/pragma/warn/universal
- +> t/pragma/warn/util
- - t/pragma/warn-1global t/pragma/warn-2use t/pragma/warn-3both
- - t/pragma/warn-4lint t/pragma/warn-5nolint t/pragma/warn-doio
- - t/pragma/warn-gv t/pragma/warn-mg t/pragma/warn-op
- - t/pragma/warn-perl t/pragma/warn-perly t/pragma/warn-pp
- - t/pragma/warn-pp_ctl t/pragma/warn-pp_hot t/pragma/warn-pp_sys
- - t/pragma/warn-regcomp t/pragma/warn-regexec t/pragma/warn-sv
- - t/pragma/warn-taint t/pragma/warn-toke t/pragma/warn-universal
- - t/pragma/warn-util
- ! MANIFEST t/pragma/warning.t
-____________________________________________________________________________
-[ 1819] By: gsar on 1998/09/23 06:08:46
- Log: make \(%foo) return refs to values (not copies of values)
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- Date: Fri, 28 Aug 1998 20:46:10 -0700 (PDT)
- Message-ID: <13799.30680.47765.352558@fre-76-120.reshall.berkeley.edu>
- --
- From: Roderick Schertler <roderick@argon.org>
- Date: Sat, 29 Aug 1998 00:58:33 -0400
- Message-ID: <29894.904366713@eeyore.ibcinc.com>
- Subject: Re: \(%x) problems
- Branch: perl
- ! doop.c pod/perlref.pod
-____________________________________________________________________________
-[ 1818] By: gsar on 1998/09/23 06:05:08
- Log: make h2xs generate ANSI prototypes
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 1817] By: gsar on 1998/09/23 05:57:16
- Log: updated usethreads hints for hpux 10.X
- From: Matthew T Harden <mthard@mthard1.monsanto.com>
- Date: Fri, 28 Aug 1998 14:10:42 GMT
- Message-Id: <199808281410.AA11058@mthard1.monsanto.com>
- Subject: Re: OK: perl 5.00502 on PA-RISC1.1-thread 10.20 (UNINSTALLED)
- Branch: perl
- ! hints/hpux.sh perl.h
-____________________________________________________________________________
-[ 1816] By: gsar on 1998/09/23 05:53:31
- Log: don't create empty directories in installperl
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Fri, 21 Aug 1998 11:29:24 +0100 (BST)
- Message-Id: <199808211029.LAA00551@cyclone.cise.npl.co.uk>
- Subject: [PATCH 5.005_02] install: empty dirs
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 1815] By: gsar on 1998/09/23 05:50:36
- Log: make behavior of /(a{3})+/ like /(aaa)+/ w.r.t where it matches
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 21 Aug 1998 05:41:02 -0400 (EDT)
- Message-Id: <199808210941.FAA16467@monk.mps.ohio-state.edu>
- Subject: Re: your mail
- Branch: perl
- ! regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 1814] By: gsar on 1998/09/23 05:45:17
- Log: From: "Kurt D. Starsinic" <kstar@chapin.edu>
- Date: Thu, 20 Aug 1998 20:59:03 -0400
- Message-ID: <19980820205903.A12908@O2.chapin.edu>
- Subject: [PATCH] h2ph misquotes #error directives
- Branch: perl
- ! t/lib/h2ph.pht utils/h2ph.PL
-____________________________________________________________________________
-[ 1813] By: gsar on 1998/09/23 05:42:41
- Log: patch to support computed regular subexpressions
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 20 Aug 1998 15:19:50 -0400 (EDT)
- Message-Id: <199808201919.PAA04692@monk.mps.ohio-state.edu>
- Subject: [5.005_5* PATCH] Postponed RE - now!
- Branch: perl
- ! embedvar.h objXSUB.h pod/perlre.pod regcomp.c regexec.c
- ! t/op/pat.t t/op/re_tests thrdvar.h toke.c
-____________________________________________________________________________
-[ 1812] By: gsar on 1998/09/23 05:26:26
- Log: better CR-handling on shebang line and in formats (fixed variant of
- patch suggested by Igor Sysoev <igor@nitek.ru>)
- Branch: perl
- ! perl.c toke.c
-____________________________________________________________________________
-[ 1811] By: gsar on 1998/09/23 04:35:46
- Log: document non-loopish blocks better
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Tue, 18 Aug 1998 12:28:36 +0100
- Message-Id: <E0z8jwK-00057Z-00@ursa.cus.cam.ac.uk>
- Subject: Re: next in do {} while block gives error message
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1810] By: gsar on 1998/09/23 04:12:05
- Log: fix bogus integerization of pop()'s return value
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Sat, 15 Aug 1998 23:27:54 -0400
- Message-Id: <199808160327.XAA05186@aatma.engin.umich.edu>
- Subject: Re: Complex expression does integer arithmetic
- Branch: perl
- ! opcode.h opcode.pl
-____________________________________________________________________________
-[ 1809] By: gsar on 1998/09/23 04:09:43
- Log: tweak README.win32
- Branch: perl
- ! README.win32
-____________________________________________________________________________
-[ 1808] By: gsar on 1998/09/23 03:40:57
- Log: better diagnostic for do{} used as lvalue
- Branch: perl
- ! op.c pod/perlport.pod
-____________________________________________________________________________
-[ 1807] By: gsar on 1998/09/23 03:38:30
- Log: enable PERL_SBRK_VIA_MALLOC on OPENSTEP-Mach
- From: hansm@icgroup.nl
- Date: Tue, 11 Aug 98 21:08:51 +0200
- Message-Id: <9808111907.AA21903@icgned.icgroup.nl>
- Subject: Not OK: perl 5.00551 on OPENSTEP-Mach 4_1 (UNINSTALLED)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 1806] By: gsar on 1998/09/23 03:36:08
- Log: support make written in perl (aka "pmake") on win32
- Branch: perl
- ! lib/ExtUtils/MM_Win32.pm
-____________________________________________________________________________
-[ 1805] By: gsar on 1998/09/23 03:30:07
- Log: fix mismatched UV/U32 types for to_utf8_*()
- Branch: perl
- ! utf8.c
-____________________________________________________________________________
-[ 1804] By: gsar on 1998/09/23 03:22:22
- Log: From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Date: Sun, 9 Aug 1998 22:38:23 +0200
- Message-ID: <19980809223823.A215@cdata.tvnet.hu>
- Subject: [PATCH 5.5002] dos-djgpp update
- Branch: perl
- ! t/io/fs.t
-____________________________________________________________________________
-[ 1803] By: gsar on 1998/09/23 03:20:13
- Log: apply minimal variant of patch (sent via private mail)
- From: jarkko.hietaniemi@research.nokia.com (Jarkko Hietaniemi)
- Date: Wed, 12 Aug 1998 15:42:35 +0300
- Message-Id: <199808121242.PAA29761@comanche.spices>
- Subject: [PATCH] 5.004_02 or 5.005_51: fix regexp and tr character ranges in non-ASCII lands
- Branch: perl
- ! MANIFEST perl.h pod/perllocale.pod pod/perlop.pod
- ! pod/perlre.pod regcomp.c t/pragma/locale.t toke.c
-____________________________________________________________________________
-[ 1802] By: gsar on 1998/09/23 03:03:39
- Log: adjust searchdict.t for EBCDIC (still needs documenting)
- From: pvhp@forte.com (Peter Prymmer)
- Date: Thu, 6 Aug 98 18:09:39 PDT
- Message-Id: <9808070109.AA06158@forte.com>
- Subject: [PATCH 5.005_02-TRIAL2] potential modification to t/lib/searchdict.t
- Branch: perl
- ! README.os390 t/lib/searchdict.t
-____________________________________________________________________________
-[ 1801] By: gsar on 1998/09/23 02:54:15
- Log: silence redefined warning for XS(INIT) {}
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1800] By: gsar on 1998/09/23 02:42:23
- Log: support match indices via special variables @- and @+
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 21 Jul 1998 23:00:35 -0400 (EDT)
- Message-Id: <199807220300.XAA16081@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_76] @- and @+
- Branch: perl
- ! av.c embed.h global.sym gv.c mg.c objXSUB.h objpp.h perl.h
- ! pod/perlvar.pod proto.h regnodes.h sv.c t/op/pat.t toke.c
-____________________________________________________________________________
-[ 1799] By: gsar on 1998/09/23 01:44:31
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 11 Aug 1998 18:43:29 -0400 (EDT)
- Message-Id: <199808112243.SAA14243@monk.mps.ohio-state.edu>
- Subject: Re: Segmentation fault for /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- Branch: perl
- ! regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 1798] By: gsar on 1998/09/23 01:39:23
- Log: integrate maint-5.005 changes (except conflicting change#1794)
- Branch: perl
- ! Changes
- !> objXSUB.h op.c pod/perlfunc.pod pp.c regcomp.c t/op/re_tests
- !> toke.c util.c win32/config.bc win32/config.gc win32/config.vc
- !> win32/win32.h
-____________________________________________________________________________
-[ 1797] By: gsar on 1998/09/23 01:32:36
- Log: add note to win32/Makefile about setting CCHOME
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1796] By: gsar on 1998/09/23 01:31:32
- Log: perl.pod tweak
- Branch: perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 1795] By: gsar on 1998/09/21 20:34:10
- Log: make xsubpp generate well-formed code with CAPI && !PERL_OBJECT
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 1789] By: gsar on 1998/09/18 18:01:37
- Log: delay freeing itervar so C<for $i (@a) { return($i) }> works
- Branch: perl
- ! cop.h t/cmd/for.t
-____________________________________________________________________________
-[ 1788] By: gsar on 1998/09/17 02:19:11
- Log: resync win32/config.?c with Porting/config.sh to pick up apiversion
- Branch: perl
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1787] By: gsar on 1998/09/17 01:45:14
- Log: suppress bogus warning on C<sub x {} x()>
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 1786] By: gsar on 1998/09/17 01:42:51
- Log: ntohl typo in objXSUB.h
- Branch: perl
- ! objXSUB.h
-____________________________________________________________________________
-[ 1785] By: gsar on 1998/09/17 01:41:48
- Log: fill gaps in sig_* entries in win32/config.?c
- Branch: perl
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1781] By: larry on 1998/09/05 23:48:24
- Log: tr/// logic was hosed under utf8
- Branch: perl
- ! doop.c op.c op.h pp.c proto.h
-____________________________________________________________________________
-[ 1780] By: larry on 1998/09/05 23:44:16
- Log: several new tests needed tweaking to work under utf8
- Branch: perl
- ! t/comp/require.t t/op/pack.t t/op/substr.t
-____________________________________________________________________________
-[ 1779] By: larry on 1998/09/05 23:41:42
- Log: index() applied BM optimization to wrong argument
- Branch: perl
- ! op.c util.c
-____________________________________________________________________________
-[ 1778] By: larry on 1998/09/05 23:38:29
- Log: Implicit require during compile reset line numbering
- Branch: perl
- ! pp_ctl.c
-
-----------------
-Version 5.005_51
-----------------
-
-____________________________________________________________________________
-[ 1777] By: gsar on 1998/08/10 07:02:38
- Log: various tweaks: fix signed vs. unsigned problems that prevented C++
- builds; add sundry PERL_OBJECT scaffolding to get it to build; fix
- lexical warning testsuite for win32
- Branch: perl
- ! Changes doop.c embed.h global.sym objXSUB.h objpp.h op.c
- ! pod/perlhist.pod pp.c pp_hot.c proto.h regcomp.c regexec.c
- ! sv.c t/pragma/warn-doio t/pragma/warn-mg t/pragma/warn-op
- ! t/pragma/warn-regexec toke.c utf8.c win32/GenCAPI.pl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1776] By: gsar on 1998/08/09 17:53:48
- Log: fix coredump with MULTIPLICITY (ckWARN() needs early curcop init)
- Branch: perl
- ! Changes MANIFEST perl.c pod/perlhist.pod
-____________________________________________________________________________
-[ 1775] By: gsar on 1998/08/09 14:35:33
- Log: tweak warning test
- Branch: perl
- ! t/pragma/warn-toke
-____________________________________________________________________________
-[ 1774] By: gsar on 1998/08/09 14:13:46
- Log: add missing dTHR; notes for test failures due to small stacksize
- Branch: perl
- ! doio.c gv.c op.c sv.c t/pragma/warn-mg t/pragma/warn-regexec
- ! toke.c universal.c util.c
-____________________________________________________________________________
-[ 1773] By: gsar on 1998/08/09 11:31:53
- Log: lexical warnings; tweaks to places that didn't apply correctly
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Date: Wed, 29 Jul 1998 09:28:45 BST
- Message-Id: <9807290828.AA26286@claudius.bfsec.bt.co.uk>
- Subject: lexical warnings patch for 5.005_50
- Branch: perl
- + README.lexwarn lib/warning.pm t/pragma/warn-2use
- + t/pragma/warn-3both t/pragma/warn-4lint t/pragma/warn-5nolint
- + t/pragma/warn-doio t/pragma/warn-gv t/pragma/warn-mg
- + t/pragma/warn-op t/pragma/warn-perl t/pragma/warn-perly
- + t/pragma/warn-pp t/pragma/warn-pp_ctl t/pragma/warn-pp_hot
- + t/pragma/warn-pp_sys t/pragma/warn-regcomp
- + t/pragma/warn-regexec t/pragma/warn-sv t/pragma/warn-taint
- + t/pragma/warn-toke t/pragma/warn-universal t/pragma/warn-util
- + warning.h warning.pl
- ! Changes MANIFEST Makefile.SH cop.h doio.c global.sym gv.c
- ! lib/diagnostics.pm mg.c op.c op.h perl.c perl.h pp.c pp_ctl.c
- ! pp_hot.c pp_sys.c proto.h regcomp.c regexec.c sv.c t/op/tie.t
- ! t/pragma/warn-1global t/pragma/warning.t taint.c toke.c
- ! universal.c util.c
-____________________________________________________________________________
-[ 1772] By: gsar on 1998/08/08 23:06:00
- Log: bump patchlevel to 5.005_51
- Branch: perl
- ! patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1771] By: gsar on 1998/08/08 23:01:57
- Log: fix bogus warning on "\x{123}"
- From: pmarquess@claudius.bfsec.bt.co.uk (Paul Marquess)
- Date: Mon, 27 Jul 1998 06:16:15 +0100 (BST)
- Message-Id: <9807270534.AA11102@claudius.bfsec.bt.co.uk>
- Subject: [5.005_50 PATCH] Some unicode problems
- Branch: perl
- ! regcomp.c toke.c
-____________________________________________________________________________
-[ 1770] By: gsar on 1998/08/08 22:56:55
- Log: hide dup symbol for static build of ext/re
- From: Dominic Dunlop <domo@ppp72.vo.lu>
- Date: Wed, 29 Jul 1998 11:09:56 +0100 (WET DST)
- Message-Id: <199807291009.LAA08935@ppp72.vo.lu>
- Subject: Not OK: perl 5.00550 on powerpc-machten 4.1 [BOGUS PATCH]
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 1769] By: gsar on 1998/08/08 22:45:06
- Log: fix double free on -Mutf8 -e '$b=uc("")'
- From: larry@wall.org (Larry Wall)
- Date: Fri, 7 Aug 1998 14:42:43 -0700
- Message-Id: <199808072142.OAA14920@wall.org>
- Subject: [PATCH 5.005_50]: uc("") and lc("") under utf8 fails
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 1768] By: gsar on 1998/08/08 22:42:29
- Log: substr() assumes utf8 without say-so
- From: larry@wall.org (Larry Wall)
- Date: Fri, 7 Aug 1998 12:25:12 -0700
- Message-Id: <199808071925.MAA13436@wall.org>
- Subject: [PATCH 5.005_50] substr bug?
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 1767] By: gsar on 1998/08/08 22:38:25
- Log: fix intolerance of SWASHes for blank lines
- From: Gisle Aas <aas@sn.no>
- Date: 06 Aug 1998 23:28:57 +0200
- Message-ID: <m3emutkdeu.fsf@furu.g.aas.no>
- Subject: Re: Re[2]: another joyride begins
- Branch: perl
- ! lib/utf8_heavy.pl
-____________________________________________________________________________
-[ 1766] By: gsar on 1998/08/08 22:33:10
- Log: utf8 doc tweak
- From: Gisle Aas <aas@sn.no>
- Date: 05 Aug 1998 00:41:04 +0200
- Message-ID: <m3yat4wetb.fsf@furu.g.aas.no>
- Subject: Matching clumps
- Branch: perl
- ! lib/utf8.pm
-____________________________________________________________________________
-[ 1765] By: gsar on 1998/08/08 22:31:37
- Log: kill bogus warning from -we 'use utf8; $_="\x{FF}"'
- From: Gisle Aas <aas@sn.no>
- Date: 04 Aug 1998 22:56:11 +0200
- Message-ID: <m3yat4sbys.fsf@furu.g.aas.no>
- Subject: Re: another joyride begins
- Branch: perl
- ! lib/utf8_heavy.pl
-____________________________________________________________________________
-[ 1764] By: gsar on 1998/08/08 22:28:43
- Log: From: larry@wall.org (Larry Wall)
- Date: Tue, 4 Aug 1998 17:04:51 -0700
- Message-Id: <199808050004.RAA22592@wall.org>
- Subject: [PATCH 5.005_50] \pX not implemented!
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 1763] By: gsar on 1998/08/08 22:27:15
- Log: From: Stephen McCamant <alias@mcs.com>
- Date: Sun, 2 Aug 1998 16:33:18 -0500 (CDT)
- Message-ID: <13764.55116.921952.837027@alias-2.pr.mcs.net>
- Subject: [PATCH] Eliminate superfluous RV2p[AH]Vs in oops[AH]V()
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1762] By: gsar on 1998/08/08 22:26:09
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Sun, 2 Aug 1998 22:05:28 +0300 (EET DST)
- Message-Id: <199808021905.WAA10592@alpha.hut.fi>
- Subject: [PATCH] 5.005_02-TRIAL1 or 5.004_05-MAINT_TRIAL_5: t/op/{pw,gr}ent.t
- Branch: perl
- + t/op/grent.t t/op/pwent.t
- ! MANIFEST
-____________________________________________________________________________
-[ 1761] By: gsar on 1998/08/08 22:21:52
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 30 Jul 1998 19:23:56 -0400 (EDT)
- Message-Id: <199807302323.TAA21175@monk.mps.ohio-state.edu>
- Subject: [5.005_50 PATCH] misprint in RE engine
- Branch: perl
- ! regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 1760] By: gsar on 1998/08/08 22:18:54
- Log: integrate maint-5.005 changes into mainline
- Branch: perl
- +> Porting/fixCORE README.os390 ebcdic.c win32/des_fcrypt.patch
- !> (integrate 138 files)
-____________________________________________________________________________
-[ 1672] By: gsar on 1998/07/27 18:35:28
- Log: create new Changes
- Branch: perl
- + Changes
- ! Changes5.005 MANIFEST
-____________________________________________________________________________
-[ 1671] By: gsar on 1998/07/27 18:30:57
- Log: rename Changes --> Changes5.005
- Branch: perl
- +> Changes5.005
- - Changes
-____________________________________________________________________________
-[ 1670] By: gsar on 1998/07/27 18:10:14
- Log: integrate 5.005_01 changes from maint
- Branch: perl
- ! Changes
- !> README.win32 pod/perldelta.pod proto.h toke.c win32/GenCAPI.pl
- !> win32/win32.c
-____________________________________________________________________________
-[ 1667] By: nick on 1998/07/26 14:31:01
- Log: Add dTHR so that it compiles miniperl in threaded mode
- Branch: perl
- ! doop.c mg.c regcomp.c regexec.c
-____________________________________________________________________________
-[ 1666] By: nick on 1998/07/26 13:01:10
- Log: Resolve ansiperl against mainline (@1648?)
- Unclear that change number has "taken".
- Branch: ansiperl
- +> (branch 169 files)
- - ObjXSub.h XSLock.h compat3.sym fixvars pod/perld4.pod
- !> (integrate 131 files)
-
-----------------
-Version 5.005_50
-----------------
-
-____________________________________________________________________________
-[ 1665] By: gsar on 1998/07/26 05:38:48
- Log: add trailing newline to file
- Branch: perl
- ! Changes lib/unicode/blocks.txt
-____________________________________________________________________________
-[ 1664] By: gsar on 1998/07/26 05:08:48
- Log: integrate proto.h additions from maint-5.005
- Branch: perl
- !> pod/perlhist.pod proto.h
-____________________________________________________________________________
-[ 1663] By: gsar on 1998/07/26 05:07:05
- Log: add new files to MANIFEST; add missing prototypes to proto.h;
- s/PL_utf8skip/utf8skip/ for now, or we end up with Perl_PL_;
- add typecasts to silence warnings; tweaks for win32 builds
- Branch: perl
- ! MANIFEST embed.h global.sym proto.h regexec.c toke.c utf8.h
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1662] By: gsar on 1998/07/26 05:01:52
- Log: add missing sv_*_mg() prototypes in proto.h, update perlhist.pod
- Branch: maint-5.005/perl
- ! pod/perlhist.pod proto.h
-____________________________________________________________________________
-[ 1661] By: gsar on 1998/07/26 02:52:48
- Log: up patchlevel to 5.005_50
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1660] By: gsar on 1998/07/26 02:43:57
- Log: integrate utfperl
- Branch: perl
- +> (branch 162 files)
- !> (integrate 29 files)
-____________________________________________________________________________
-[ 1659] By: gsar on 1998/07/26 02:38:22
- Log: integrate maint-5.005 changes
- Branch: perl
- !> Changes README.vms djgpp/fixpmain emacs/ptags hints/beos.sh
- !> lib/Math/BigInt.pm pod/perldelta.pod pod/perlmodinstall.pod
- !> pod/perltoc.pod pp_sys.c t/lib/bigintpm.t
- !> vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 1658] By: gsar on 1998/07/26 02:23:46
- Log: VMS patches from Dan Sugalski <sugalskd@osshe.edu>
- Date: Fri, 24 Jul 1998 11:38:25 -0700
- Message-Id: <3.0.5.32.19980724113825.00a067b0@ous.edu>
- Subject: [PATCH 5.005] version number problem with VMS (Corrected)
- --
- Date: Fri, 24 Jul 1998 12:30:36 -0700
- Message-Id: <3.0.5.32.19980724123036.009f0390@ous.edu>
- Subject: [PATCH 5.005]Tweaks to README.vms
- --
- Date: Sat, 25 Jul 1998 17:56:55 -0700 (PDT)
- Message-ID: <Pine.GSO.3.96.980725175626.15740D-100000@netserve.ous.edu>
- Subject: [PATCH 5.005] Final build cleanup patch
- Branch: maint-5.005/perl
- ! README.vms vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 1657] By: gsar on 1998/07/26 02:19:50
- Log: another platform where pp_sselect() needs a whole fd_set buffer
- From: Lupe Christoph <lupe@alanya.m.isar.de>
- Date: Sat, 25 Jul 1998 19:49:33 +0200 (MET DST)
- Message-Id: <199807251749.TAA22347@alanya.m.isar.de>
- Subject: Patch for Not OK: perl 5.005 on i86pc-solaris-thread 2.6
- Branch: maint-5.005/perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1656] By: gsar on 1998/07/26 02:12:46
- Log: fix problem building modules on dos-djgpp
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Date: Sat, 25 Jul 1998 00:53:39 +0200
- Message-ID: <19980725005339.C222@cdata.tvnet.hu>
- Subject: [PATCH 5.005] dos-djgpp and modules problem
- Branch: maint-5.005/perl
- ! djgpp/fixpmain
-____________________________________________________________________________
-[ 1655] By: gsar on 1998/07/26 02:11:09
- Log: From: Tom Spindler <dogcow@home.merit.edu>
- Date: Wed, 22 Jul 1998 16:11:07 -0400
- Message-ID: <19980722161107.A16813@home.merit.edu>
- Subject: [PATCH 5.005] BeOS tweak
- Branch: maint-5.005/perl
- ! hints/beos.sh
-____________________________________________________________________________
-[ 1654] By: gsar on 1998/07/26 02:09:29
- Log: various pod tweaks
- Branch: maint-5.005/perl
- ! Changes pod/perldelta.pod pod/perlmodinstall.pod
- ! pod/perltoc.pod
-____________________________________________________________________________
-[ 1653] By: gsar on 1998/07/26 02:05:46
- Log: fix emacs/ptags for PL_* changes
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 24 Jul 1998 03:12:35 -0400 (EDT)
- Message-Id: <199807240712.DAA04204@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_76] Yet better ptags
- Branch: maint-5.005/perl
- ! emacs/ptags
-____________________________________________________________________________
-[ 1652] By: gsar on 1998/07/26 02:03:01
- Log: fix behavior of <=> on bigints
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Message-Id: <E0yzlfF-0004kz-00@taurus.cus.cam.ac.uk>
- Date: Fri, 24 Jul 1998 18:29:53 +0100
- Subject: [PATCH] Re: Math::BigInt <=> op is not correct.
- Branch: maint-5.005/perl
- ! lib/Math/BigInt.pm t/lib/bigintpm.t
-____________________________________________________________________________
-[ 1651] By: larry on 1998/07/24 05:44:33
- Log: Here are the long-expected Unicode/UTF-8 modifications.
- Branch: utfperl
- + lib/unicode/ArabLink.pl lib/unicode/ArabLnkGrp.pl
- + lib/unicode/Bidirectional.pl lib/unicode/Block.pl
- + lib/unicode/Category.pl lib/unicode/CombiningClass.pl
- + lib/unicode/Decomposition.pl
- + lib/unicode/In/AlphabeticPresentationForms.pl
- + lib/unicode/In/Arabic.pl
- + lib/unicode/In/ArabicPresentationForms-A.pl
- + lib/unicode/In/ArabicPresentationForms-B.pl
- + lib/unicode/In/Armenian.pl lib/unicode/In/Arrows.pl
- + lib/unicode/In/BasicLatin.pl lib/unicode/In/Bengali.pl
- + lib/unicode/In/BlockElements.pl lib/unicode/In/Bopomofo.pl
- + lib/unicode/In/BoxDrawing.pl
- + lib/unicode/In/CJKCompatibility.pl
- + lib/unicode/In/CJKCompatibilityForms.pl
- + lib/unicode/In/CJKCompatibilityIdeographs.pl
- + lib/unicode/In/CJKSymbolsandPunctuation.pl
- + lib/unicode/In/CJKUnifiedIdeographs.pl
- + lib/unicode/In/CombiningDiacriticalMarks.pl
- + lib/unicode/In/CombiningHalfMarks.pl
- + lib/unicode/In/CombiningMarksforSymbols.pl
- + lib/unicode/In/ControlPictures.pl
- + lib/unicode/In/CurrencySymbols.pl lib/unicode/In/Cyrillic.pl
- + lib/unicode/In/Devanagari.pl lib/unicode/In/Dingbats.pl
- + lib/unicode/In/EnclosedAlphanumerics.pl
- + lib/unicode/In/EnclosedCJKLettersandMonths.pl
- + lib/unicode/In/GeneralPunctuation.pl
- + lib/unicode/In/GeometricShapes.pl lib/unicode/In/Georgian.pl
- + lib/unicode/In/Greek.pl lib/unicode/In/GreekExtended.pl
- + lib/unicode/In/Gujarati.pl lib/unicode/In/Gurmukhi.pl
- + lib/unicode/In/HalfwidthandFullwidthForms.pl
- + lib/unicode/In/HangulCompatibilityJamo.pl
- + lib/unicode/In/HangulJamo.pl lib/unicode/In/HangulSyllables.pl
- + lib/unicode/In/Hebrew.pl
- + lib/unicode/In/HighPrivateUseSurrogates.pl
- + lib/unicode/In/HighSurrogates.pl lib/unicode/In/Hiragana.pl
- + lib/unicode/In/IPAExtensions.pl lib/unicode/In/Kanbun.pl
- + lib/unicode/In/Kannada.pl lib/unicode/In/Katakana.pl
- + lib/unicode/In/Lao.pl lib/unicode/In/Latin-1Supplement.pl
- + lib/unicode/In/LatinExtended-A.pl
- + lib/unicode/In/LatinExtended-B.pl
- + lib/unicode/In/LatinExtendedAdditional.pl
- + lib/unicode/In/LetterlikeSymbols.pl
- + lib/unicode/In/LowSurrogates.pl lib/unicode/In/Malayalam.pl
- + lib/unicode/In/MathematicalOperators.pl
- + lib/unicode/In/MiscellaneousSymbols.pl
- + lib/unicode/In/MiscellaneousTechnical.pl
- + lib/unicode/In/NumberForms.pl
- + lib/unicode/In/OpticalCharacterRecognition.pl
- + lib/unicode/In/Oriya.pl lib/unicode/In/PrivateUse.pl
- + lib/unicode/In/SmallFormVariants.pl
- + lib/unicode/In/SpacingModifierLetters.pl
- + lib/unicode/In/Specials.pl
- + lib/unicode/In/SuperscriptsandSubscripts.pl
- + lib/unicode/In/Tamil.pl lib/unicode/In/Telugu.pl
- + lib/unicode/In/Thai.pl lib/unicode/In/Tibetan.pl
- + lib/unicode/Is/Alnum.pl lib/unicode/Is/Alpha.pl
- + lib/unicode/Is/BidiAN.pl lib/unicode/Is/BidiB.pl
- + lib/unicode/Is/BidiCS.pl lib/unicode/Is/BidiEN.pl
- + lib/unicode/Is/BidiES.pl lib/unicode/Is/BidiET.pl
- + lib/unicode/Is/BidiL.pl lib/unicode/Is/BidiON.pl
- + lib/unicode/Is/BidiR.pl lib/unicode/Is/BidiS.pl
- + lib/unicode/Is/BidiWS.pl lib/unicode/Is/C.pl
- + lib/unicode/Is/Cc.pl lib/unicode/Is/Cn.pl lib/unicode/Is/Co.pl
- + lib/unicode/Is/DCcircle.pl lib/unicode/Is/DCcompat.pl
- + lib/unicode/Is/DCfinal.pl lib/unicode/Is/DCfont.pl
- + lib/unicode/Is/DCinital.pl lib/unicode/Is/DCinitial.pl
- + lib/unicode/Is/DCisolated.pl lib/unicode/Is/DCnarrow.pl
- + lib/unicode/Is/DCnoBreak.pl lib/unicode/Is/DCsmall.pl
- + lib/unicode/Is/DCsquare.pl lib/unicode/Is/DCsub.pl
- + lib/unicode/Is/DCsuper.pl lib/unicode/Is/DCvertical.pl
- + lib/unicode/Is/DCwide.pl lib/unicode/Is/DecoCanon.pl
- + lib/unicode/Is/DecoCompat.pl lib/unicode/Is/Digit.pl
- + lib/unicode/Is/L.pl lib/unicode/Is/Ll.pl lib/unicode/Is/Lm.pl
- + lib/unicode/Is/Lo.pl lib/unicode/Is/Lower.pl
- + lib/unicode/Is/Lt.pl lib/unicode/Is/Lu.pl lib/unicode/Is/M.pl
- + lib/unicode/Is/Mc.pl lib/unicode/Is/Mirrored.pl
- + lib/unicode/Is/Mn.pl lib/unicode/Is/N.pl lib/unicode/Is/Nd.pl
- + lib/unicode/Is/No.pl lib/unicode/Is/P.pl lib/unicode/Is/Pd.pl
- + lib/unicode/Is/Pe.pl lib/unicode/Is/Po.pl
- + lib/unicode/Is/Print.pl lib/unicode/Is/Ps.pl
- + lib/unicode/Is/S.pl lib/unicode/Is/Sc.pl lib/unicode/Is/Sm.pl
- + lib/unicode/Is/So.pl lib/unicode/Is/Space.pl
- + lib/unicode/Is/Upper.pl lib/unicode/Is/Z.pl
- + lib/unicode/Is/Zl.pl lib/unicode/Is/Zp.pl lib/unicode/Is/Zs.pl
- + lib/unicode/JamoShort.pl lib/unicode/Makefile
- + lib/unicode/Name.pl lib/unicode/Number.pl
- + lib/unicode/To/Digit.pl lib/unicode/To/Lower.pl
- + lib/unicode/To/Title.pl lib/unicode/To/Upper.pl
- + lib/unicode/UnicodeData-Latest.txt lib/unicode/arabshp.txt
- + lib/unicode/blocks.txt lib/unicode/index2.txt
- + lib/unicode/jamo2.txt lib/unicode/mktables.PL
- + lib/unicode/names2.txt lib/unicode/props2.txt
- + lib/unicode/readme.txt lib/utf8.pm lib/utf8_heavy.pl t/UTEST
- + utf8.c utf8.h
- ! Makefile.SH doop.c embed.h embedvar.h global.sym handy.h mg.c
- ! op.c op.h perl.h perlvars.h pod/perlfunc.pod pod/perlop.pod
- ! pod/perlre.pod pp.c pp_ctl.c pp_hot.c proto.h regcomp.c
- ! regcomp.h regcomp.sym regexec.c regexp.h regnodes.h sv.c
- ! t/op/vec.t toke.c util.c vms/vmsish.h
-____________________________________________________________________________
-[ 1650] By: gsar on 1998/07/24 04:06:48
- Log: create utfperl branch
- Branch: utfperl
- +> (branch 1079 files)
-____________________________________________________________________________
-[ 1649] By: gsar on 1998/07/24 03:56:56
- Log: create maint-5.005 branch
- Branch: maint-5.005/perl
- +> (branch 1079 files)
-____________________________________________________________________________
-[ 1648] By: gsar on 1998/07/24 03:36:35
- Log: un-checked-in 5.005 Changes (this is 5.005 *exactly*)
- Branch: perl
- ! Changes
-
diff --git a/contrib/perl5/Changes5.000 b/contrib/perl5/Changes5.000
deleted file mode 100644
index 78cab26..0000000
--- a/contrib/perl5/Changes5.000
+++ /dev/null
@@ -1,185 +0,0 @@
--------------
-Version 5.000
--------------
-
-New things
-----------
- The -w switch is much more informative.
-
- References. See t/op/ref.t for examples. All entities in Perl 5 are
- reference counted so that it knows when each item should be destroyed.
-
- Objects. See t/op/ref.t for examples.
-
- => is now a synonym for comma. This is useful as documentation for
- arguments that come in pairs, such as initializers for associative arrays,
- or named arguments to a subroutine.
-
- All functions have been turned into list operators or unary operators,
- meaning the parens are optional. Even subroutines may be called as
- list operators if they've already been declared.
-
- More embeddible. See main.c and embed_h.sh. Multiple interpreters
- in the same process are supported (though not with interleaved
- execution yet).
-
- The interpreter is now flattened out. Compare Perl 4's eval.c with
- the perl 5's pp.c. Compare Perl 4's 900 line interpreter loop in cmd.c
- with Perl 5's 1 line interpreter loop in run.c. Eventually we'll make
- everything non-blocking so we can interface nicely with a scheduler.
-
- eval is now treated more like a subroutine call. Among other things,
- this means you can return from it.
-
- Format value lists may be spread over multiple lines by enclosing in
- a do {} block.
-
- You may now define BEGIN and END subroutines for each package. The BEGIN
- subroutine executes the moment it's parsed. The END subroutine executes
- just before exiting.
-
- Flags on the #! line are interpreted even if the script wasn't
- executed directly. (And even if the script was located by "perl -x"!)
-
- The ?: operator is now legal as an lvalue.
-
- List context now propagates to the right side of && and ||, as well
- as the 2nd and 3rd arguments to ?:.
-
- The "defined" function can now take a general expression.
-
- Lexical scoping available via "my". eval can see the current lexical
- variables.
-
- The preferred package delimiter is now :: rather than '.
-
- tie/untie are now preferred to dbmopen/dbmclose. Multiple DBM
- implementations are allowed in the same executable, so you can
- write scripts to interchange data among different formats.
-
- New "and" and "or" operators work just like && and || but with
- a precedence lower than comma, so they work better with list operators.
-
- New functions include: abs(), chr(), uc(), ucfirst(), lc(), lcfirst(),
- chomp(), glob()
-
- require with a number checks to see that the version of Perl that is
- currently running is at least that number.
-
- Dynamic loading of external modules is now supported.
-
- There is a new quote form qw//, which is equivalent to split(' ', q//).
-
- Assignment of a reference to a glob value now just replaces the
- single element of the glob corresponding to the reference type:
- *foo = \$bar, *foo = \&bletch;
-
- Filehandle methods are now supported:
- output_autoflush STDOUT 1;
-
- There is now an "English" module that provides human readable translations
- for cryptic variable names.
-
- Autoload stubs can now call the replacement subroutine with goto &realsub.
-
- Subroutines can be defined lazily in any package by declaring an AUTOLOAD
- routine, which will be called if a non-existent subroutine is called in
- that package.
-
- Several previously added features have been subsumed under the new
- keywords "use" and "no". Saying "use Module LIST" is short for
- BEGIN { require Module; import Module LIST; }
- The "no" keyword is identical except that it calls "unimport" instead.
- The earlier pragma mechanism now uses this mechanism, and two new
- modules have been added to the library to implement "use integer"
- and variations of "use strict vars, refs, subs".
-
- Variables may now be interpolated literally into a pattern by prefixing
- them with \Q, which works just like \U, but backwhacks non-alphanumerics
- instead. There is also a corresponding quotemeta function.
-
- Any quantifier in a regular expression may now be followed by a ? to
- indicate that the pattern is supposed to match as little as possible.
-
- Pattern matches may now be followed by an m or s modifier to explicitly
- request multiline or singleline semantics. An s modifier makes . match
- newline.
-
- Patterns may now contain \A to match only at the beginning of the string,
- and \Z to match only at the end. These differ from ^ and $ in that
- they ignore multiline semantics. In addition, \G matches where the
- last interation of m//g or s///g left off.
-
- Non-backreference-producing parens of various sorts may now be
- indicated by placing a ? directly after the opening parenthesis,
- followed by a character that indicates the purpose of the parens.
- An :, for instance, indicates simple grouping. (?:a|b|c) will
- match any of a, b or c without producing a backreference. It does
- "eat" the input. There are also assertions which do not eat the
- input but do lookahead for you. (?=stuff) indicates that the next
- thing must be "stuff". (?!nonsense) indicates that the next thing
- must not be "nonsense".
-
- The negation operator now treats non-numeric strings specially.
- A -"text" is turned into "-text", so that -bareword is the same
- as "-bareword". If the string already begins with a + or -, it
- is flipped to the other sign.
-
-Incompatibilities
------------------
- @ now always interpolates an array in double-quotish strings. Some programs
- may now need to use backslash to protect any @ that shouldn't interpolate.
-
- Ordinary variables starting with underscore are no longer forced into
- package main.
-
- s'$lhs'$rhs' now does no interpolation on either side. It used to
- interplolate $lhs but not $rhs.
-
- The second and third arguments of splice are now evaluated in scalar
- context (like the book says) rather than list context.
-
- Saying "shift @foo + 20" is now a semantic error because of precedence.
-
- "open FOO || die" is now incorrect. You need parens around the filehandle.
-
- The elements of argument lists for formats are now evaluated in list
- context. This means you can interpolate list values now.
-
- You can't do a goto into a block that is optimized away. Darn.
-
- It is no longer syntactically legal to use whitespace as the name
- of a variable, or as a delimiter for any kind of quote construct.
-
- Some error messages will be different.
-
- The caller function now returns a false value in a scalar context if there
- is no caller. This lets library files determine if they're being required.
-
- m//g now attaches its state to the searched string rather than the
- regular expression.
-
- "reverse" is no longer allowed as the name of a sort subroutine.
-
- taintperl is no longer a separate executable. There is now a -T
- switch to turn on tainting when it isn't turned on automatically.
-
- Symbols starting with _ are no longer forced into package main, except
- for $_ itself (and @_, etc.).
-
- Double-quoted strings may no longer end with an unescaped $ or @.
-
- Negative array subscripts now count from the end of the array.
-
- The comma operator in a scalar context is now guaranteed to give a
- scalar context to its arguments.
-
- The ** operator now binds more tightly than unary minus.
-
- Setting $#array lower now discards array elements so that destructors
- work reasonably.
-
- delete is not guaranteed to return the old value for tied arrays,
- since this capability may be onerous for some modules to implement.
-
- Attempts to set $1 through $9 now result in a run-time error.
diff --git a/contrib/perl5/Changes5.001 b/contrib/perl5/Changes5.001
deleted file mode 100644
index c26134a..0000000
--- a/contrib/perl5/Changes5.001
+++ /dev/null
@@ -1,1299 +0,0 @@
--------------
-Version 5.001
--------------
-
-Nearly all the changes for 5.001 were bug fixes of one variety or another,
-so here's the bug list, along with the "resolution" for each of them. If
-you wish to correspond about any of them, please include the bug number.
-
-There were a few that can be construed as enhancements:
- NETaa13059: now warns of use of \1 where $1 is necessary.
- NETaa13512: added $SIG{__WARN__} and $SIG{__DIE__} hooks
- NETaa13520: added closures
- NETaa13530: scalar keys now resets hash iterator
- NETaa13641: added Tim's fancy new import whizbangers
- NETaa13710: cryptswitch needed to be more "useable"
- NETaa13716: Carp now allows multiple packages to be skipped out of
- NETaa13716: now counts imported routines as "defined" for redef warnings
- (and, of course, much of the stuff from the perl5-porters)
-
-NETaa12974: README incorrectly said it was a pre-release.
-Files patched: README
-
-NETaa13033: goto pushed a bogus scope on the context stack.
-From: Steve Vinoski
-Files patched: pp_ctl.c
- The goto operator pushed an extra bogus scope onto the context stack. (This
- often didn't matter, since many things pop extra unrecognized scopes off.)
-
-NETaa13034: tried to get valid pointer from undef.
-From: Castor Fu
-Also: Achille Hui, the Day Dreamer
-Also: Eric Arnold
-Files patched: pp_sys.c
- Now treats undef specially, and calls SvPV_force on any non-numeric scalar
- value to get a real pointer to somewhere.
-
-NETaa13035: included package info with filehandles.
-From: Jack Shirazi - BIU
-Files patched: pp_hot.c pp_sys.c
- Now passes a glob to filehandle methods to keep the package info intact.
-
-NETaa13048: didn't give strict vars message on every occurrence.
-From: Doug Campbell
-Files patched: gv.c
- It now complains about every occurrence. (The bug resulted from an
- ill-conceived attempt to suppress a duplicate error message in a
- suboptimal fashion.)
-
-NETaa13052: test for numeric sort sub return value fooled by taint magic.
-From: Peter Jaspers-Fayer
-Files patched: pp_ctl.c sv.h
- The test to see if the sort sub return value was numeric looked at the
- public flags rather than the private flags of the SV, so taint magic
- hid that info from the sort.
-
-NETaa13053: forced a2p to use byacc
-From: Andy Dougherty
-Files patched: MANIFEST x2p/Makefile.SH x2p/a2p.c
- a2p.c is now pre-byacced and shipped with the kit.
-
-NETaa13055: misnamed constant in previous patch.
-From: Conrad Augustin
-Files patched: op.c op.h toke.c
- The tokener translates $[ to a constant, but with a special marking in case
- the constant gets assigned to or localized. Unfortunately, the marking
- was done with a combination of OPf_SPECIAL and OPf_MOD that was easily
- spoofed. There is now a private OPpCONST_ARYLEN flag for this purpose.
-
-NETaa13055: use of OPf_SPECIAL for $[ lvaluehood was too fragile.
-Files patched: op.c op.h toke.c
- (same)
-
-NETaa13056: convert needs to throw away any number info on its list.
-From: Jack Shirazi - BIU
-Files patched: op.c
- The listiness of the argument list leaked out to the subroutine call because
- of how prepend_elem and append_elem reuse an existing list. The convert()
- routine just needs to discard any listiness it finds on its argument.
-
-NETaa13058: AUTOLOAD shouldn't assume size of @_ is meaningful.
-From: Florent Guillaume
-Files patched: ext/DB_File/DB_File.pm ext/Fcntl/Fcntl.pm ext/GDBM_File/GDBM_File.pm ext/Socket/Socket.pm h2xs.SH
- I just deleted the optimization, which is silly anyway since the eventual
- subroutine definition is cached.
-
-NETaa13059: now warns of use of \1 where $1 is necessary.
-From: Gustaf Neumann
-Files patched: toke.c
- Now says
-
- Can't use \1 to mean $1 in expression at foo line 2
-
- along with an explanation in perldiag.
-
-NETaa13060: no longer warns on attempt to read <> operator's transition state.
-From: Chaim Frenkel
-Files patched: pp_hot.c
- No longer warns on <> operator's transitional state.
-
-NETaa13140: warning said $ when @ would be more appropriate.
-From: David J. MacKenzie
-Files patched: op.c pod/perldiag.pod
- Now says
-
- (Did you mean $ or @ instead of %?)
-
- and added more explanation to perldiag.
-
-NETaa13149: was reading freed memory to make incorrect error message.
-Files patched: pp_ctl.c
- It was reading freed memory to make an error message that would be
- incorrect in any event because it had the inner filename rather than
- the outer.
-
-NETaa13149: confess was sometimes less informative than croak
-From: Jack Shirazi
-Files patched: lib/Carp.pm
- (same)
-
-NETaa13150: stderr needs to be STDERR in package
-From: Jack Shirazi
-Files patched: lib/File/CheckTree.pm
- Also fixed pl2pm to translate the filehandles to uppercase.
-
-NETaa13150: uppercases stdin, stdout and stderr
-Files patched: pl2pm
- (same)
-
-NETaa13154: array assignment didn't notice package magic.
-From: Brian Reichert
-Files patched: pp_hot.c
- The list assignment operator looked for only set magic, but set magic is
- only on the elements of a magical hash, not on the hash as a whole. I made
- the operator look for any magic at all on the target array or hash.
-
-NETaa13155: &DB::DB left trash on the stack.
-From: Thomas Koenig
-Files patched: lib/perl5db.pl pp_ctl.c
- The call by pp_dbstate() to &DB::DB left trash on the stack. It now
- calls DB in list context, and DB returns ().
-
-NETaa13156: lexical variables didn't show up in debugger evals.
-From: Joergen Haegg
-Files patched: op.c
- The code that searched back up the context stack for the lexical scope
- outside the eval only partially took into consideration that there
- might be extra debugger subroutine frames that shouldn't be used, and
- ended up comparing the wrong statement sequence number to the range of
- valid sequence numbers for the scope of the lexical variable. (There
- was also a bug fixed in passing that caused the scope of lexical to go
- clear to the end of the subroutine even if it was within an inner block.)
-
-NETaa13157: any request for autoloaded DESTROY should create a null one.
-From: Tom Christiansen
-Files patched: lib/AutoLoader.pm
- If DESTROY.al is not located, it now creates sub DESTROY {} automatically.
-
-NETaa13158: now preserves $@ around destructors while leaving eval.
-From: Tim Bunce
-Files patched: pp_ctl.c
- Applied supplied patch, except the whole second hunk can be replaced with
-
- sv_insert(errsv, 0, 0, message, strlen(message));
-
-NETaa13160: clarified behavior of split without arguments
-From: Harry Edmon
-Files patched: pod/perlfunc.pod
- Clarified the behavior of split without arguments.
-
-NETaa13162: eval {} lost list/scalar context
-From: Dov Grobgeld
-Files patched: op.c
- LEAVETRY didn't propagate number to ENTERTRY.
-
-NETaa13163: clarified documentation of foreach using my variable
-From: Tom Christiansen
-Files patched: pod/perlsyn.pod
- Explained that foreach using a lexical is still localized.
-
-NETaa13164: the dot detector for the end of formats was over-rambunctious.
-From: John Stoffel
-Files patched: toke.c
- The dot detector for the end of formats was over-rambunctious. It would
- pick up any dot that didn't have a space in front of it.
-
-NETaa13165: do {} while 1 never linked outer block into next chain.
-From: Gisle Aas
-Files patched: op.c
- When the conditional of do {} while 1; was optimized away, it confused the
- postfix order construction so that the block that ordinarily sits around the
- whole loop was never executed. So when the loop tried to unstack between
- iterations, it got the wrong context, and blew away the lexical variables
- of the outer scope. Fixed it by introducing a NULL opcode that will be
- optimized away later.
-
-NETaa13167: coercion was looking at public bits rather than private bits.
-From: Randal L. Schwartz
-Also: Thomas Riechmann
-Also: Shane Castle
-Files patched: sv.c
- There were some bad ifdefs around the various varieties of set*id(). In
- addition, tainting was interacting badly with assignment to $> because
- sv_2iv() was examining SvPOK rather than SvPOKp, and so couldn't coerce
- a string uid to an integer one.
-
-NETaa13167: had some ifdefs wrong on set*id.
-Files patched: mg.c pp_hot.c
- (same)
-
-NETaa13168: relaxed test for comparison of new and old fds
-From: Casper H.S. Dik
-Files patched: t/lib/posix.t
- I relaxed the comparison to just check that the new fd is greater.
-
-NETaa13169: autoincrement can corrupt scalar value state.
-From: Gisle Aas
-Also: Tom Christiansen
-Files patched: sv.c
- It assumed a PV didn't need to be upgraded to become an NV.
-
-NETaa13169: previous patch could leak a string pointer.
-Files patched: sv.c
- (same)
-
-NETaa13170: symbols missing from global.sym
-From: Tim Bunce
-Files patched: global.sym
- Applied suggested patch.
-
-NETaa13171: \\ in <<'END' shouldn't reduce to \.
-From: Randal L. Schwartz
-Files patched: toke.c
- <<'END' needed to bypass ordinary single-quote processing.
-
-NETaa13172: 'use integer' turned off magical autoincrement.
-From: Erich Rickheit KSC
-Files patched: pp.c pp_hot.c
- The integer versions of the increment and decrement operators were trying too
- hard to be efficient.
-
-NETaa13172: deleted duplicate increment and decrement code
-Files patched: opcode.h opcode.pl pp.c
- (same)
-
-NETaa13173: install should make shared libraries executable.
-From: Brian Grossman
-Also: Dave Nadler
-Also: Eero Pajarre
-Files patched: installperl
- Now gives permission 555 to any file ending with extension specified by $dlext.
-
-NETaa13176: ck_rvconst didn't free the const it used up.
-From: Nick Duffek
-Files patched: op.c
- I checked in many random memory leaks under this bug number, since it
- was an eval that brought many of them out.
-
-NETaa13176: didn't delete XRV for temp ref of destructor.
-Files patched: sv.c
- (same)
-
-NETaa13176: didn't delete op_pmshort in matching operators.
-Files patched: op.c
- (same)
-
-NETaa13176: eval leaked the name of the eval.
-Files patched: scope.c
- (same)
-
-NETaa13176: gp_free didn't free the format.
-Files patched: gv.c
- (same)
-
-NETaa13176: minor leaks in loop exits and constant subscript optimization.
-Files patched: op.c
- (same)
-
-NETaa13176: plugged some duplicate struct allocation memory leaks.
-Files patched: perl.c
- (same)
-
-NETaa13176: sv_clear of an FM didn't clear anything.
-Files patched: sv.c
- (same)
-
-NETaa13176: tr/// didn't mortalize its return value.
-Files patched: pp.c
- (same)
-
-NETaa13177: SCOPE optimization hid line number info
-From: David J. MacKenzie
-Also: Hallvard B Furuseth
-Files patched: op.c
- Every pass on the syntax tree has to keep track of the current statement.
- Unfortunately, the single-statement block was optimized into a single
- statement between the time the variable was parsed and the time the
- void code scan was done, so that pass didn't see the OP_NEXTSTATE
- operator, because it has been optimized to an OP_NULL.
-
- Fortunately, null operands remember what they were, so it was pretty easy
- to make it set the correct line number anyway.
-
-NETaa13178: some linux doesn't handle nm well
-From: Alan Modra
-Files patched: hints/linux.sh
- Applied supplied patch.
-
-NETaa13180: localized slice now pre-extends array
-From: Larry Schuler
-Files patched: pp.c
- A localized slice now pre-extends its array to avoid reallocation during
- the scope of the local.
-
-NETaa13181: m//g didn't keep track of whether previous match matched null.
-From: "philippe.verdret"
-Files patched: mg.h pp_hot.c
- A pattern isn't allowed to match a null string in the same place twice in
- a row. m//g wasn't keeping track of whether the previous match matched
- the null string.
-
-NETaa13182: now includes whitespace as a regexp metacharacter.
-From: Larry Wall
-Files patched: toke.c
- scan_const() now counts " \t\n\r\f\v" as metacharacters when scanning a pattern.
-
-NETaa13183: sv_setsv shouldn't try to clone an object.
-From: Peter Gordon
-Files patched: sv.c
- The sv_mortalcopy() done by the return in STORE called sv_setsv(),
- which cloned the object. sv_setsv() shouldn't be in the business of
- cloning objects.
-
-NETaa13184: bogus warning on quoted signal handler name removed.
-From: Dan Carson
-Files patched: toke.c
- Now doesn't complain unless the first non-whitespace character after the =
- is an alphabetic character.
-
-NETaa13186: now croaks on chop($')
-From: Casper H.S. Dik
-Files patched: doop.c
- Now croaks on chop($') and such.
-
-NETaa13187: "${foo::bar}" now counts as mere delimitation, not as a bareword.
-From: Jay Rogers
-Files patched: toke.c
- "${foo::bar}" now counts as mere delimitation, not as a bareword inside a
- reference block.
-
-NETaa13188: for backward compatibility, looks for "perl -" before "perl".
-From: Russell Mosemann
-Files patched: toke.c
- Now allows non-whitespace characters on the #! line between the "perl"
- and the "-".
-
-NETaa13188: now allows non-whitespace after #!...perl before switches.
-Files patched: toke.c
- (same)
-
-NETaa13189: derivative files need to be removed before recreation
-From: Simon Leinen
-Also: Dick Middleton
-Also: David J. MacKenzie
-Files patched: embed_h.sh x2p/Makefile.SH
- Fixed various little nits as suggested in several messages.
-
-NETaa13190: certain assignments can spoof pod directive recognizer
-From: Ilya Zakharevich
-Files patched: toke.c
- The lexer now only recognizes pod directives where a statement is expected.
-
-NETaa13194: now returns undef when there is no curpm.
-From: lusol@Dillon.CC.Lehigh.EDU
-Files patched: mg.c
- Since there was no regexp prior to the "use", it was returning whatever the
- last successful match was within the "use", because there was no current
- regexp, so it treated it as a normal variable. It now returns undef.
-
-NETaa13195: semop had one S too many.
-From: Joachim Huober
-Files patched: opcode.pl
- The entry in opcode.pl had one too many S's.
-
-NETaa13196: always assumes it's a Perl script if -c is used.
-From: Dan Carson
-Files patched: toke.c
- It now will assume it's a Perl script if the -c switch is used.
-
-NETaa13197: changed implicit -> message to be more understandable.
-From: Bruce Barnett
-Files patched: op.c pod/perldiag.pod
- I changed the error message to be more understandable. It now says
-
- Can't use subscript on sort...
-
-
-NETaa13201: added OPpCONST_ENTERED flag to properly enter filehandle symbols.
-From: E. Jay Berkenbilt
-Also: Tom Christiansen
-Files patched: op.c op.h toke.c
- The grammatical reduction of a print statement didn't properly count
- the filehandle as a symbol reference because it couldn't distinguish
- between a symbol entered earlier in the program and a symbol entered
- for the first time down in the lexer.
-
-NETaa13203: README shouldn't mention uperl.o any more.
-From: Anno Siegel
-Files patched: README
-
-NETaa13204: .= shouldn't warn on uninitialized target.
-From: Pete Peterson
-Files patched: pp_hot.c
- No longer warns on uninitialized target of .= operator.
-
-NETaa13206: handy macros in XSUB.h
-From: Tim Bunce
-Files patched: XSUB.h
- Added suggested macros.
-
-NETaa13228: commonality checker didn't treat lexicals as variables.
-From: mcook@cognex.com
-Files patched: op.c opcode.pl
- The list assignment operator tries to avoid unnecessary copies by doing the
- assignment directly if there are no common variables on either side of the
- equals. Unfortunately, the code that decided that only recognized references
- to dynamic variables, not lexical variables.
-
-NETaa13229: fixed sign stuff for complement, integer coercion.
-From: Larry Wall
-Files patched: perl.h pp.c sv.c
- Fixed ~0 and integer coercions.
-
-NETaa13230: no longer tries to reuse scratchpad temps if tainting in effect.
-From: Luca Fini
-Files patched: op.c
- I haven't reproduced it, but I believe the problem is the reuse of scratchpad
- temporaries between statements. I've made it not try to reuse them if
- tainting is in effect.
-
-NETaa13231: *foo = *bar now prevents typo warnings on "foo"
-From: Robin Barker
-Files patched: sv.c
- Aliasing of the form *foo = *bar is now protected from the typo warnings.
- Previously only the *foo = \$bar form was.
-
-NETaa13235: require BAREWORD now introduces package name immediately.
-From: Larry Wall
-Files patched: toke.c
- require BAREWORD now introduces package name immediately. This lets the
- method intuit code work right even though the require hasn't actually run
- yet.
-
-NETaa13289: didn't calculate correctly using arybase.
-From: Jared Rhine
-Files patched: pp.c pp_hot.c
- The runtime code didn't use curcop->cop_arybase correctly.
-
-NETaa13301: store now throws exception on error
-From: Barry Friedman
-Files patched: ext/GDBM_File/GDBM_File.xs ext/NDBM_File/NDBM_File.xs ext/ODBM_File/ODBM_File.xs ext/SDBM_File/SDBM_File.xs
- Changed warn to croak in ext/*DBM_File/*.xs.
-
-NETaa13302: ctime now takes Time_t rather than Time_t*.
-From: Rodger Anderson
-Files patched: ext/POSIX/POSIX.xs
- Now declares a Time_t and takes the address of that in CODE.
-
-NETaa13302: shorter way to do this patch
-Files patched: ext/POSIX/POSIX.xs
- (same)
-
-NETaa13304: could feed too large $@ back into croak, whereupon it croaked.
-From: Larry Wall
-Files patched: perl.c
- callist() could feed $@ back into croak with more than a bare %s. (croak()
- handles long strings with a bare %s okay.)
-
-NETaa13305: compiler misoptimized RHS to outside of s/a/print/e
-From: Brian S. Cashman <bsc@umich.edu>
-Files patched: op.c
- The syntax tree was being misconstructed because the compiler felt that
- the RHS was invariant, so it did it outside the s///.
-
-NETaa13314: assigning mortal to lexical leaks
-From: Larry Wall
-Files patched: sv.c
- In stealing strings, sv_setsv was checking SvPOK to see if it should free
- the destination string. It should have been checking SvPVX.
-
-NETaa13316: wait4pid now recalled when errno == EINTR
-From: Robert J. Pankratz
-Files patched: pp_sys.c util.c
- system() and the close() of a piped open now recall wait4pid if it returned
- prematurely with errno == EINTR.
-
-NETaa13329: needed to localize taint magic
-From: Brian Katzung
-Files patched: sv.c doio.c mg.c pp_hot.c pp_sys.c scope.c taint.c
- Taint magic is now localized better, though I had to resort to a kludge
- to allow a value to be both tainted and untainted simultaneously during
- the assignment of
-
- local $foo = $_[0];
-
- when $_[0] is a reference to the variable $foo already.
-
-NETaa13341: clarified interaction of AnyDBM_File::ISA and "use"
-From: Ian Phillipps
-Files patched: pod/modpods/AnyDBMFile.pod
- The doc was misleading.
-
-NETaa13342: grep and map with block would enter block but never leave it.
-From: Ian Phillipps
-Files patched: op.c
- The compiler use some sort-checking code to handle the arguments of
- grep and map. Unfortunately, this wiped out the block exit opcode while
- leaving the block entry opcode. This doesn't matter to sort, but did
- matter to grep and map. It now leave the block entry intact.
-
- The reason it worked without the my is because the block entry and exit
- were optimized away to an OP_SCOPE, which it doesn't matter if it's there
- or not.
-
-NETaa13343: goto needed to longjmp when in a signal handler.
-From: Robert Partington
-Files patched: pp_ctl.c
- goto needed to longjmp() when in a signal handler to get back into the
- right run() context.
-
-
-NETaa13344: strict vars shouldn't apply to globs or filehandles.
-From: Andrew Wilcox
-Files patched: gv.c
- Filehandles and globs will be excepted from "strict vars", so that you can
- do the standard Perl 4 trick of
-
- use strict;
- sub foo {
- local(*IN);
- open(IN,"file");
- }
-
-
-NETaa13345: assert.pl didn't use package DB
-From: Hans Mulder
-Files patched: lib/assert.pl
- Now it does.
-
-NETaa13348: av_undef didn't free scalar representing $#foo.
-From: David Filo
-Files patched: av.c
- av_undef didn't free scalar representing $#foo.
-
-NETaa13349: sort sub accumulated save stack entries
-From: David Filo
-Files patched: pp_ctl.c
- COMMON only gets set if assigning to @_, which is reasonable. Most of the
- problem was a memory leak.
-
-NETaa13351: didn't treat indirect filehandles as references.
-From: Andy Dougherty
-Files patched: op.c
- Now produces
-
- Can't use an undefined value as a symbol reference at ./foo line 3.
-
-
-NETaa13352: OP_SCOPE allocated as UNOP rather than LISTOP.
-From: Andy Dougherty
-Files patched: op.c
-
-NETaa13353: scope() didn't release filegv on OP_SCOPE optimization.
-From: Larry Wall
-Files patched: op.c
- When scope() nulled out a NEXTSTATE, it didn't release its filegv reference.
-
-NETaa13355: hv_delete now avoids useless mortalcopy
-From: Larry Wall
-Files patched: hv.c op.c pp.c pp_ctl.c proto.h scope.c util.c
- hv_delete now avoids useless mortalcopy.
-
-
-NETaa13359: comma operator section missing its heading
-From: Larry Wall
-Files patched: pod/perlop.pod
-
-NETaa13359: random typo
-Files patched: pod/perldiag.pod
-
-NETaa13360: code to handle partial vec values was bogus.
-From: Conrad Augustin
-Files patched: pp.c
- The code that Mark J. added a long time ago to handle values that were partially
- off the end of the string was incorrect.
-
-NETaa13361: made it not interpolate inside regexp comments
-From: Martin Jost
-Files patched: toke.c
- To avoid surprising people, it no longer interpolates inside regexp
- comments.
-
-NETaa13362: ${q[1]} should be interpreted like it used to
-From: Hans Mulder
-Files patched: toke.c
- Now resolves ${keyword[1]} to $keyword[1] and warns if -w. Likewise for {}.
-
-NETaa13363: meaning of repeated search chars undocumented in tr///
-From: Stephen P. Potter
-Files patched: pod/perlop.pod
- Documented that repeated characters use the first translation given.
-
-NETaa13365: if closedir fails, don't try it again.
-From: Frank Crawford
-Files patched: pp_sys.c
- Now does not attempt to closedir a second time.
-
-NETaa13366: can't do block scope optimization on $1 et al when tainting.
-From: Andrew Vignaux
-Files patched: toke.c
- The tainting mechanism assumes that every statement starts out
- untainted. Unfortunately, the scope removal optimization for very
- short blocks removed the statementhood of statements that were
- attempting to read $1 as an untainted value, with the effect that $1
- appeared to be tainted anyway. The optimization is now disabled when
- tainting and the block contains $1 (or equivalent).
-
-NETaa13366: fixed this a better way in toke.c.
-Files patched: op.c
- (same)
-
-NETaa13366: need to disable scope optimization when tainting.
-Files patched: op.c
- (same)
-
-NETaa13367: Did a SvCUR_set without nulling out final char.
-From: "Rob Henderson" <robh@cs.indiana.edu>
-Files patched: doop.c pp.c pp_sys.c
- When do_vop set the length on its result string it neglected to null-terminate
- it.
-
-NETaa13368: bigrat::norm sometimes chucked sign
-From: Greg Kuperberg
-Files patched: lib/bigrat.pl
- The normalization routine was assuming that the gcd of two numbers was
- never negative, and based on that assumption managed to move the sign
- to the denominator, where it was deleted on the assumption that the
- denominator is always positive.
-
-NETaa13368: botched previous patch
-Files patched: lib/bigrat.pl
- (same)
-
-NETaa13369: # is now a comment character, and \# should be left for regcomp.
-From: Simon Parsons
-Files patched: toke.c
- It was not skipping the comment when it skipped the white space, and constructed
- an opcode that tried to match a null string. Unfortunately, the previous
- star tried to use the first character of the null string to optimize where
- to recurse, so it never matched.
-
-NETaa13369: comment after regexp quantifier induced non-match.
-Files patched: regcomp.c
- (same)
-
-NETaa13370: some code assumed SvCUR was of type int.
-From: Spider Boardman
-Files patched: pp_sys.c
- Did something similar to the proposed patch. I also fixed the problem that
- it assumed the type of SvCUR was int. And fixed get{peer,sock}name the
- same way.
-
-NETaa13375: sometimes dontbother wasn't added back into strend.
-From: Jamshid Afshar
-Files patched: regexec.c
- When the /g modifier was used, the regular expression code would calculate
- the end of $' too short by the minimum number of characters the pattern could
- match.
-
-NETaa13375: sv_setpvn now disallows negative length.
-Files patched: sv.c
- (same)
-
-NETaa13376: suspected indirect objecthood prevented recognition of lexical.
-From: Gisle.Aas@nr.no
-Files patched: toke.c
- When $data[0] is used in a spot that might be an indirect object, the lexer
- was getting confused over the rule that says the $data in $$data[0] isn't
- an array element. (The lexer uses XREF state for both indirect objects
- and for variables used as names.)
-
-NETaa13377: -I processesing ate remainder of #! line.
-From: Darrell Schiebel
-Files patched: perl.c
- I made the -I processing in moreswitches look for the end of the string,
- delimited by whitespace.
-
-NETaa13379: ${foo} now treated the same outside quotes as inside
-From: Hans Mulder
-Files patched: toke.c
- ${bareword} is now treated the same outside quotes as inside.
-
-NETaa13379: previous fix for this bug was botched
-Files patched: toke.c
- (same)
-
-NETaa13381: TEST should check for perl link
-From: Andy Dougherty
-Files patched: t/TEST
- die "You need to run \"make test\" first to set things up.\n" unless -e 'perl';
-
-
-NETaa13384: fixed version 0.000 botch.
-From: Larry Wall
-Files patched: installperl
-
-NETaa13385: return 0 from required file loses message
-From: Malcolm Beattie
-Files patched: pp_ctl.c
- Works right now.
-
-NETaa13387: added pod2latex
-From: Taro KAWAGISHI
-Files patched: MANIFEST pod/pod2latex
- Added most recent copy to pod directory.
-
-NETaa13388: constant folding now prefers integer results over double
-From: Ilya Zakharevich
-Files patched: op.c
- Constant folding now prefers integer results over double.
-
-NETaa13389: now treats . and exec as shell metathingies
-From: Hans Mulder
-Files patched: doio.c
- Now treats . and exec as shell metathingies.
-
-NETaa13395: eval didn't check taintedness.
-From: Larry Wall
-Files patched: pp_ctl.c
-
-NETaa13396: $^ coredumps at end of string
-From: Paul Rogers
-Files patched: toke.c
- The scan_ident() didn't check for a null following $^.
-
-NETaa13397: improved error messages when operator expected
-From: Larry Wall
-Files patched: toke.c
- Added message (Do you need to predeclare BAR?). Also fixed the missing
- semicolon message.
-
-NETaa13399: cleanup by Andy
-From: Larry Wall
-Files patched: Changes Configure Makefile.SH README cflags.SH config.H config_h.SH deb.c doop.c dump.c ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs ext/DynaLoader/DynaLoader.pm ext/Fcntl/Fcntl.pm ext/GDBM_File/GDBM_File.pm ext/POSIX/POSIX.pm ext/SDBM_File/sdbm/sdbm.h ext/Socket/Socket.pm ext/util/make_ext h2xs.SH hints/aix.sh hints/bsd386.sh hints/dec_osf.sh hints/esix4.sh hints/freebsd.sh hints/irix_5.sh hints/next_3_2.sh hints/sunos_4_1.sh hints/svr4.sh hints/ultrix_4.sh installperl lib/AutoSplit.pm lib/Cwd.pm lib/ExtUtils/MakeMaker.pm lib/ExtUtils/xsubpp lib/Term/Cap.pm mg.c miniperlmain.c perl.c perl.h perl_exp.SH pod/Makefile pod/perldiag.pod pod/pod2html pp.c pp_ctl.c pp_hot.c pp_sys.c proto.h sv.h t/re_tests util.c x2p/Makefile.SH x2p/a2p.h x2p/a2py.c x2p/handy.h x2p/hash.c x2p/hash.h x2p/str.c x2p/str.h x2p/util.c x2p/util.h x2p/walk.c
-
-NETaa13399: cleanup from Andy
-Files patched: MANIFEST
-
-NETaa13399: configuration cleanup
-Files patched: Configure Configure MANIFEST MANIFEST Makefile.SH Makefile.SH README config.H config.H config_h.SH config_h.SH configpm ext/DynaLoader/DynaLoader.pm ext/DynaLoader/dl_hpux.xs ext/NDBM_File/Makefile.PL ext/ODBM_File/Makefile.PL ext/util/make_ext handy.h hints/aix.sh hints/hpux_9.sh hints/hpux_9.sh hints/irix_4.sh hints/linux.sh hints/mpeix.sh hints/next_3_2.sh hints/solaris_2.sh hints/svr4.sh installperl installperl lib/AutoSplit.pm lib/ExtUtils/MakeMaker.pm lib/ExtUtils/MakeMaker.pm lib/ExtUtils/xsubpp lib/Getopt/Long.pm lib/Text/Tabs.pm makedepend.SH makedepend.SH mg.c op.c perl.h perl_exp.SH pod/perl.pod pod/perldiag.pod pod/perlsyn.pod pod/pod2man pp_sys.c proto.h proto.h unixish.h util.c util.c vms/config.vms writemain.SH x2p/a2p.h x2p/a2p.h x2p/a2py.c x2p/a2py.c x2p/handy.h x2p/util.c x2p/walk.c x2p/walk.c
-
-NETaa13399: new files from Andy
-Files patched: ext/DB_File/Makefile.PL ext/DynaLoader/Makefile.PL ext/Fcntl/Makefile.PL ext/GDBM_File/Makefile.PL ext/NDBM_File/Makefile.PL ext/ODBM_File/Makefile.PL ext/POSIX/Makefile.PL ext/SDBM_File/Makefile.PL ext/SDBM_File/sdbm/Makefile.PL ext/Socket/Makefile.PL globals.c hints/convexos.sh hints/irix_6.sh
-
-NETaa13399: patch0l from Andy
-Files patched: Configure MANIFEST Makefile.SH config.H config_h.SH ext/DB_File/Makefile.PL ext/GDBM_File/Makefile.PL ext/NDBM_File/Makefile.PL ext/POSIX/POSIX.xs ext/SDBM_File/sdbm/Makefile.PL ext/util/make_ext h2xs.SH hints/next_3_2.sh hints/solaris_2.sh hints/unicos.sh installperl lib/Cwd.pm lib/ExtUtils/MakeMaker.pm makeaperl.SH vms/config.vms x2p/util.c x2p/util.h
-
-NETaa13399: stuff from Andy
-Files patched: Configure MANIFEST Makefile.SH configpm hints/dec_osf.sh hints/linux.sh hints/machten.sh lib/ExtUtils/MakeMaker.pm util.c
-
-NETaa13399: Patch 0k from Andy
-Files patched: Configure MANIFEST Makefile.SH config.H config_h.SH hints/dec_osf.sh hints/mpeix.sh hints/next_3_0.sh hints/ultrix_4.sh installperl lib/ExtUtils/MakeMaker.pm lib/File/Path.pm makeaperl.SH minimod.PL perl.c proto.h vms/config.vms vms/ext/MM_VMS.pm x2p/a2p.h
-
-NETaa13399: Patch 0m from Andy
-Files patched: Configure MANIFEST Makefile.SH README config.H config_h.SH ext/DynaLoader/README ext/POSIX/POSIX.xs ext/SDBM_File/sdbm/sdbm.h ext/util/extliblist hints/cxux.sh hints/linux.sh hints/powerunix.sh lib/ExtUtils/MakeMaker.pm malloc.c perl.h pp_sys.c util.c
-
-NETaa13400: pod2html update from Bill Middleton
-From: Larry Wall
-Files patched: pod/pod2html
-
-NETaa13401: Boyer-Moore code attempts to compile string longer than 255.
-From: Kyriakos Georgiou
-Files patched: util.c
- The Boyer-Moore table uses unsigned char offsets, but the BM compiler wasn't
- rejecting strings longer than 255 chars, and was miscompiling them.
-
-NETaa13403: missing a $ on variable name
-From: Wayne Scott
-Files patched: installperl
- Yup, it was missing.
-
-NETaa13406: didn't wipe out dead match when proceeding to next BRANCH
-From: Michael P. Clemens
-Files patched: regexec.c
- The code to check alternatives didn't invalidate backreferences matched by the
- failed branch.
-
-NETaa13407: overload upgrade
-From: owner-perl5-porters@nicoh.com
-Also: Ilya Zakharevich
-Files patched: MANIFEST gv.c lib/Math/BigInt.pm perl.h pod/perlovl.pod pp.c pp.h pp_hot.c sv.c t/lib/bigintpm.t t/op/overload.t
- Applied supplied patch, and fixed bug induced by use of sv_setsv to do
- a deep copy, since sv_setsv no longer copies objecthood.
-
-NETaa13409: sv_gets tries to grow string at EOF
-From: Harold O Morris
-Files patched: sv.c
- Applied suggested patch, only two statements earlier, since the end code
- also does SvCUR_set.
-
-NETaa13410: delaymagic did =~ instead of &= ~
-From: Andreas Schwab
-Files patched: pp_hot.c
- Applied supplied patch.
-
-NETaa13411: POSIX didn't compile under -DLEAKTEST
-From: Frederic Chauveau
-Files patched: ext/POSIX/POSIX.xs
- Used NEWSV instead of newSV.
-
-NETaa13412: new version from Tony Sanders
-From: Tony Sanders
-Files patched: lib/Term/Cap.pm
- Installed as Term::Cap.pm
-
-NETaa13413: regmust extractor needed to restart loop on BRANCH for (?:) to work
-From: DESARMENIEN
-Files patched: regcomp.c
- The BRANCH skipper should have restarted the loop from the top.
-
-NETaa13414: the check for accidental list context was done after pm_short check
-From: Michael H. Coen
-Files patched: pp_hot.c
- Moved check for accidental list context to before the pm_short optimization.
-
-NETaa13418: perlre.pod babbled nonsense about | in character classes
-From: Philip Hazel
-Files patched: pod/perlre.pod
- Removed bogus brackets. Now reads:
- Note however that "|" is interpreted as a literal with square brackets,
- so if you write C<[fee|fie|foe]> you're really only matching C<[feio|]>.
-
-NETaa13419: need to document introduction of lexical variables
-From: "Heading, Anthony"
-Files patched: pod/perlfunc.pod
- Now mentions that lexicals aren't introduced till after the current statement.
-
-NETaa13420: formats that overflowed a page caused endless top of forms
-From: Hildo@CONSUL.NL
-Files patched: pp_sys.c
- If a record is too large to fit on a page, it now prints whatever will
- fit and then calls top of form again on the remainder.
-
-NETaa13423: the code to do negative list subscript in scalar context was missing
-From: Steve McDougall
-Files patched: pp.c
- The negative subscript code worked right in list context but not in scalar
- context. In fact, there wasn't code to do it in the scalar context.
-
-NETaa13424: existing but undefined CV blocked inheritance
-From: Spider Boardman
-Files patched: gv.c
- Applied supplied patch.
-
-NETaa13425: removed extra argument to croak
-From: "R. Bernstein"
-Files patched: regcomp.c
- Removed extra argument.
-
-NETaa13427: added return types
-From: "R. Bernstein"
-Files patched: x2p/a2py.c
- Applied suggested patch.
-
-NETaa13427: added static declarations
-Files patched: x2p/walk.c
- (same)
-
-NETaa13428: split was assuming that all backreferences were defined
-From: Dave Schweisguth
-Files patched: pp.c
- split was assuming that all backreferences were defined.
-
-NETaa13430: hoistmust wasn't hoisting anchored shortcircuit's length
-From: Tom Christiansen
-Also: Rob Hooft
-Files patched: toke.c
-
-NETaa13432: couldn't call code ref under debugger
-From: Mike Fletcher
-Files patched: op.c pp_hot.c sv.h
- The debugging code assumed it could remember a name to represent a subroutine,
- but anonymous subroutines don't have a name. It now remembers a CV reference
- in that case.
-
-NETaa13435: 1' dumped core
-From: Larry Wall
-Files patched: toke.c
- Didn't check a pointer for nullness.
-
-NETaa13436: print foo(123) didn't treat foo as subroutine
-From: mcook@cognex.com
-Files patched: toke.c
- Now treats it as a subroutine rather than a filehandle.
-
-NETaa13437: &$::foo didn't think $::foo was a variable name
-From: mcook@cognex.com
-Files patched: toke.c
- Now treats $::foo as a global variable.
-
-NETaa13439: referred to old package name
-From: Tom Christiansen
-Files patched: lib/Sys/Syslog.pm
- Wasn't a strict refs problem after all. It was simply referring to package
- syslog, which had been renamed to Sys::Syslog.
-
-NETaa13440: stat operations didn't know what to do with glob or ref to glob
-From: mcook@cognex.com
-Files patched: doio.c pp_sys.c
- Now knows about the kinds of filehandles returned by FileHandle constructors
- and such.
-
-NETaa13442: couldn't find name of copy of deleted symbol table entry
-From: Spider Boardman
-Files patched: gv.c gv.h
- I did a much simpler fix. When gp_free notices that it's freeing the
- master GV, it nulls out gp_egv. The GvENAME and GvESTASH macros know
- to revert to gv if egv is null.
-
- This has the advantage of not creating a reference loop.
-
-NETaa13443: couldn't override an XSUB
-From: William Setzer
-Files patched: op.c
- When the newSUB and newXS routines checked for whether the old sub was
- defined, they only looked at CvROOT(cv), not CvXSUB(cv).
-
-NETaa13443: needed to do same thing in newXS
-Files patched: op.c
- (same)
-
-NETaa13444: -foo now doesn't warn unless sub foo is defined
-From: Larry Wall
-Files patched: toke.c
- Made it not warn on -foo, unless there is a sub foo defined.
-
-NETaa13451: in scalar context, pp_entersub now guarantees one item from XSUB
-From: Nick Gianniotis
-Files patched: pp_hot.c
- The pp_entersub routine now guarantees that an XSUB in scalar context
- returns one and only one value. If there are fewer, it pushes undef,
- and if there are more, it returns the last one.
-
-NETaa13457: now explicitly disallows printf format with 'n' or '*'.
-From: lees@cps.msu.edu
-Files patched: doop.c
- Now says
-
- Use of n in printf format not supported at ./foo line 3.
-
-
-NETaa13458: needed to call SvPOK_only() in pp_substr
-From: Wayne Scott
-Files patched: pp.c
- Needed to call SvPOK_only() in pp_substr.
-
-NETaa13459: umask and chmod now warn about missing initial 0 even with paren
-From: Andreas Koenig
-Files patched: toke.c
- Now skips parens as well as whitespace looking for argument.
-
-NETaa13460: backtracking didn't work on .*? because reginput got clobbered
-From: Andreas Koenig
-Files patched: regexec.c
- When .*? did a probe of the rest of the string, it clobbered reginput,
- so the next call to match a . tried to match the newline and failed.
-
-NETaa13475: \(@ary) now treats array as list of scalars
-From: Tim Bunce
-Files patched: op.c
- The mod() routine now refrains from marking @ary as an lvalue if it's in parens
- and is the subject of an OP_REFGEN.
-
-NETaa13481: accept buffer wasn't aligned good enough
-From: Holger Bechtold
-Also: Christian Murphy
-Files patched: pp_sys.c
- Applied suggested patch.
-
-NETaa13486: while (<>) now means while (defined($_ = <>))
-From: Jim Balter
-Files patched: op.c pod/perlop.pod
- while (<HANDLE>) now means while (defined($_ = <HANDLE>)).
-
-NETaa13500: needed DESTROY in FileHandle
-From: Tim Bunce
-Files patched: ext/POSIX/POSIX.pm
- Added DESTROY method. Also fixed ungensym to use POSIX:: instead of _POSIX.
- Removed ungensym from close method, since DESTROY should do that now.
-
-NETaa13502: now complains if you use local on a lexical variable
-From: Larry Wall
-Files patched: op.c
- Now says something like
-
- Can't localize lexical variable $var at ./try line 6.
-
-NETaa13512: added $SIG{__WARN__} and $SIG{__DIE__} hooks
-From: Larry Wall
-Files patched: embed.h gv.c interp.sym mg.c perl.h pod/perlvar.pod pp_ctl.c util.c Todo pod/perldiag.pod
-
-NETaa13514: statements before intro of lex var could see lex var
-From: William Setzer
-Files patched: op.c
- When a lexical variable is declared, introduction is delayed until
- the start of the next statement, so that any initialization code runs
- outside the scope of the new variable. Thus,
-
- my $y = 3;
- my $y = $y;
- print $y;
-
- should print 3. Unfortunately, the declaration was marked with the
- beginning location at the time that "my $y" was processed instead of
- when the variable was introduced, so any embedded statements within
- an anonymous subroutine picked up the wrong "my". The declaration
- is now labelled correctly when the variable is actually introduced.
-
-NETaa13520: added closures
-From: Larry Wall
-Files patched: Todo cv.h embed.h global.sym gv.c interp.sym op.c perl.c perl.h pod/perlform.pod pp.c pp_ctl.c pp_hot.c sv.c sv.h toke.c
-
-NETaa13520: test to see if lexical works in a format now
-Files patched: t/op/write.t
-
-NETaa13522: substitution couldn't be used on a substr()
-From: Hans Mulder
-Files patched: pp_ctl.c pp_hot.c
- Changed pp_subst not to use sv_replace() anymore, which didn't handle lvalues
- and was overkill anyway. Should be slightly faster this way too.
-
-NETaa13525: G_EVAL mode in perl_call_sv didn't return values right.
-Files patched: perl.c
-
-NETaa13525: consolidated error message
-From: Larry Wall
-Files patched: perl.h toke.c
-
-NETaa13525: derived it
-Files patched: perly.h
-
-NETaa13525: missing some values from embed.h
-Files patched: embed.h
-
-NETaa13525: random cleanup
-Files patched: MANIFEST Todo cop.h lib/TieHash.pm lib/perl5db.pl opcode.h patchlevel.h pod/perldata.pod pod/perlsub.pod t/op/ref.t toke.c
-
-NETaa13525: random cleanup
-Files patched: pp_ctl.c util.c
-
-NETaa13527: File::Find needed to export $name and $dir
-From: Chaim Frenkel
-Files patched: lib/File/Find.pm
- They are now exported.
-
-NETaa13528: cv_undef left unaccounted-for GV pointer in CV
-From: Tye McQueen
-Also: Spider Boardman
-Files patched: op.c
-
-NETaa13530: scalar keys now resets hash iterator
-From: Tim Bunce
-Files patched: doop.c
- scalar keys() now resets the hash iterator.
-
-NETaa13531: h2ph doesn't check defined right
-From: Casper H.S. Dik
-Files patched: h2ph.SH
-
-NETaa13540: VMS update
-From: Larry Wall
-Files patched: MANIFEST README.vms doio.c embed.h ext/DynaLoader/dl_vms.xs interp.sym lib/Cwd.pm lib/ExtUtils/xsubpp lib/File/Basename.pm lib/File/Find.pm lib/File/Path.pm mg.c miniperlmain.c perl.c perl.h perly.c perly.c.diff pod/perldiag.pod pp_ctl.c pp_hot.c pp_sys.c proto.h util.c vms/Makefile vms/config.vms vms/descrip.mms vms/ext/Filespec.pm vms/ext/MM_VMS.pm vms/ext/VMS/stdio/Makefile.PL vms/ext/VMS/stdio/stdio.pm vms/ext/VMS/stdio/stdio.xs vms/genconfig.pl vms/perlvms.pod vms/sockadapt.c vms/sockadapt.h vms/vms.c vms/vmsish.h vms/writemain.pl
-
-NETaa13540: got some duplicate code
-Files patched: lib/File/Path.pm
-
-NETaa13540: stuff from Charles
-Files patched: MANIFEST README.vms lib/ExtUtils/MakeMaker.pm lib/ExtUtils/MakeMaker.pm lib/ExtUtils/xsubpp lib/File/Basename.pm lib/File/Path.pm perl.c perl.h pod/perldiag.pod pod/perldiag.pod vms/Makefile vms/Makefile vms/config.vms vms/config.vms vms/descrip.mms vms/descrip.mms vms/ext/Filespec.pm vms/ext/Filespec.pm vms/ext/MM_VMS.pm vms/ext/MM_VMS.pm vms/ext/VMS/stdio/stdio.pm vms/ext/VMS/stdio/stdio.xs vms/gen_shrfls.pl vms/gen_shrfls.pl vms/genconfig.pl vms/genconfig.pl vms/mms2make.pl vms/perlvms.pod vms/sockadapt.h vms/test.com vms/vms.c vms/vms.c vms/vmsish.h vms/vmsish.h vms/writemain.pl
-
-NETaa13540: tweak from Charles
-Files patched: lib/File/Path.pm
-
-NETaa13552: scalar unpack("P4",...) ignored the 4
-From: Eric Arnold
-Files patched: pp.c
- The optimization that tried to do only one item in a scalar context didn't
- realize that the argument to P was not a repeat count.
-
-NETaa13553: now warns about 8 or 9 in octal escapes
-From: Mike Rogers
-Files patched: util.c
- Now warns if it finds 8 or 9 before the end of the octal escape sequence.
- So \039 produces a warning, but \0339 does not.
-
-NETaa13554: now allows foreach ${"name"}
-From: Johan Holtman
-Files patched: op.c
- Instead of trying to remove OP_RV2SV, the compiler now just transmutes it into an
- OP_RV2GV, which is a no-op for ordinary variables and does the right
- thing for ${"name"}.
-
-NETaa13559: substitution now always checks for readonly
-From: Rodger Anderson
-Files patched: pp_hot.c
- Substitution now always checks for readonly.
-
-NETaa13561: added explanations of closures and curly-quotes
-From: Larry Wall
-Files patched: pod/perlref.pod
-
-NETaa13562: null components in path cause indigestion
-From: Ambrose Kofi Laing
-Files patched: lib/Cwd.pm lib/pwd.pl
-
-NETaa13575: documented semantics of negative substr length
-From: Jeff Bouis
-Files patched: pod/perlfunc.pod
- Documented the fact that negative length now leaves characters off the end,
- and while I was at it, made it work right even if offset wasn't 0.
-
-NETaa13575: negative length to substr didn't work when offset non-zero
-Files patched: pp.c
- (same)
-
-NETaa13575: random cleanup
-Files patched: pod/perlfunc.pod
- (same)
-
-NETaa13580: couldn't localize $ACCUMULATOR
-From: Larry Wall
-Files patched: gv.c lib/English.pm mg.c perl.c sv.c
- Needed to make $^A a real magical variable. Also lib/English.pm wasn't
- exporting good.
-
-NETaa13583: doc mods from Tom
-From: Larry Wall
-Files patched: pod/modpods/AnyDBMFile.pod pod/modpods/Basename.pod pod/modpods/Benchmark.pod pod/modpods/Cwd.pod pod/modpods/Dynaloader.pod pod/modpods/Exporter.pod pod/modpods/Find.pod pod/modpods/Finddepth.pod pod/modpods/Getopt.pod pod/modpods/MakeMaker.pod pod/modpods/Open2.pod pod/modpods/POSIX.pod pod/modpods/Ping.pod pod/modpods/less.pod pod/modpods/strict.pod pod/perlapi.pod pod/perlbook.pod pod/perldata.pod pod/perlform.pod pod/perlfunc.pod pod/perlipc.pod pod/perlmod.pod pod/perlobj.pod pod/perlref.pod pod/perlrun.pod pod/perlsec.pod pod/perlsub.pod pod/perltrap.pod pod/perlvar.pod
-
-NETaa13589: return was enforcing list context on its arguments
-From: Tim Freeman
-Files patched: opcode.pl
- A return was being treated like a normal list operator, in that it was
- setting list context on its arguments. This was bogus.
-
-NETaa13591: POSIX::creat used wrong argument
-From: Paul Marquess
-Files patched: ext/POSIX/POSIX.pm
- Applied suggested patch.
-
-NETaa13605: use strict refs error message now displays bad ref
-From: Peter Gordon
-Files patched: perl.h pod/perldiag.pod pp.c pp_hot.c
- Now says
-
- Can't use string ("2") as a HASH ref while "strict refs" in use at ./foo line 12.
-
-NETaa13630: eof docs were unclear
-From: Hallvard B Furuseth
-Files patched: pod/perlfunc.pod
- Applied suggested patch.
-
-NETaa13636: $< and $> weren't refetched on undump restart
-From: Steve Pearlmutter
-Files patched: perl.c
- The code in main() bypassed perl_construct on an undump restart, which bypassed
- the code that set $< and $>.
-
-NETaa13641: added Tim's fancy new import whizbangers
-From: Tim Bunce
-Files patched: lib/Exporter.pm
- Applied suggested patch.
-
-NETaa13649: couldn't AUTOLOAD a symbol reference
-From: Larry Wall
-Files patched: pp_hot.c
- pp_entersub needed to guarantee a CV so it would get to the AUTOLOAD code.
-
-NETaa13651: renamed file had wrong package name
-From: Andreas Koenig
-Files patched: lib/File/Path.pm
- Applied suggested patch.
-
-NETaa13660: now that we're testing distribution we can diagnose RANDBITS errors
-From: Karl Glazebrook
-Files patched: t/op/rand.t
- Changed to suggested algorithm. Also duplicated it to test rand(100) too.
-
-NETaa13660: rand.t didn't test for proper distribution within range
-Files patched: t/op/rand.t
- (same)
-
-NETaa13671: array slice misbehaved in a scalar context
-From: Tye McQueen
-Files patched: pp.c
- A spurious else prevented the scalar-context-handling code from running.
-
-NETaa13672: filehandle constructors in POSIX don't return failure successfully
-From: Ian Phillipps
-Files patched: ext/POSIX/POSIX.pm
- Applied suggested patch.
-
-
-NETaa13678: forced $1 to always be untainted
-From: Ka-Ping Yee
-Files patched: mg.c
- I believe the bug that triggered this was fixed elsewhere, but just in case,
- I put in explicit code to force $1 et al not to be tainted regardless.
-
-NETaa13682: formline doc need to discuss ~ and ~~ policy
-From: Peter Gordon
-Files patched: pod/perlfunc.pod
-
-NETaa13686: POSIX::open and POSIX::mkfifo didn't check tainting
-From: Larry Wall
-Files patched: ext/POSIX/POSIX.xs
- open() and mkfifo() now check tainting.
-
-NETaa13687: new Exporter.pm
-From: Tim Bunce
-Files patched: lib/Exporter.pm
- Added suggested changes, except for @EXPORTABLE, because it looks too much
- like @EXPORTTABLE. Decided to stick with @EXPORT_OK because it looks more
- like an adjunct. Also added an export_tags routine. The keys in the
- %EXPORT_TAGS hash no longer use colons, to make the initializers prettier.
-
-NETaa13687: new Exporter.pm
-Files patched: ext/POSIX/POSIX.pm
- (same)
-
-NETaa13694: add sockaddr_in to Socket.pm
-From: Tim Bunce
-Files patched: ext/Socket/Socket.pm
- Applied suggested patch.
-
-NETaa13695: library routines should use qw() as good example
-From: Dean Roehrich
-Files patched: ext/DB_File/DB_File.pm ext/DynaLoader/DynaLoader.pm ext/Fcntl/Fcntl.pm ext/GDBM_File/GDBM_File.pm ext/POSIX/POSIX.pm ext/Socket/Socket.pm
- Applied suggested patch.
-
-NETaa13696: myconfig should be a routine in Config.pm
-From: Kenneth Albanowski
-Files patched: configpm
- Applied suggested patch.
-
-NETaa13704: fdopen closed fd on failure
-From: Hallvard B Furuseth
-Files patched: doio.c
- Applied suggested patch.
-
-NETaa13706: Term::Cap doesn't work
-From: Dean Roehrich
-Files patched: lib/Term/Cap.pm
- Applied suggested patch.
-
-NETaa13710: cryptswitch needed to be more "useable"
-From: Tim Bunce
-Files patched: embed.h global.sym perl.h toke.c
- The cryptswitch_fp function now can operate in two modes. It can
- modify the global rsfp to redirect input as before, or it can modify
- linestr and return true, indicating that it is not necessary for yylex
- to read another line since cryptswitch_fp has just done it.
-
-NETaa13712: new_tmpfile() can't be called as constructor
-From: Hans Mulder
-Files patched: ext/POSIX/POSIX.xs
- Now allows new_tmpfile() to be called as a constructor.
-
-NETaa13714: variable method call not documented
-From: "Randal L. Schwartz"
-Files patched: pod/perlobj.pod
- Now indicates that OBJECT->$method() works.
-
-NETaa13715: PACK->$method produces spurious warning
-From: Larry Wall
-Files patched: toke.c
- The -> operator was telling the lexer to expect an operator when the
- next thing was a variable.
-
-NETaa13716: Carp now allows multiple packages to be skipped out of
-From: Larry Wall
-Files patched: lib/Carp.pm
- The subroutine redefinition warnings now warn on import collisions.
-
-NETaa13716: Exporter catches warnings and gives a better line number
-Files patched: lib/Exporter.pm
- (same)
-
-NETaa13716: now counts imported routines as "defined" for redef warnings
-Files patched: op.c sv.c
- (same)
diff --git a/contrib/perl5/Changes5.002 b/contrib/perl5/Changes5.002
deleted file mode 100644
index 6382d52..0000000
--- a/contrib/perl5/Changes5.002
+++ /dev/null
@@ -1,4003 +0,0 @@
--------------
-Version 5.002
--------------
-
-The main enhancement to the Perl core was the addition of prototypes.
-Many of the modules that come with Perl have been extensively upgraded.
-
-Other than that, nearly all the changes for 5.002 were bug fixes of one
-variety or another, so here's the bug list, along with the "resolution"
-for each of them. If you wish to correspond about any of them, please
-include the bug number (if any).
-
-Changes specific to the Configure and build process are described
-at the bottom.
-
-Added APPLLIB_EXP for embedded perl library support.
-Files patched: perl.c
-
-Couldn't define autoloaded routine by assignment to typeglob.
-Files patched: pp_hot.c sv.c
-
-NETaa13525: Tiny patch to fix installman -n
-From: Larry Wall
-Files patched: installman
-
-NETaa13525: de-documented \v
-Files patched: pod/perlop.pod pod/perlre.pod
-
-NETaa13525: doc changes
-Files patched: pod/perlop.pod pod/perltrap.pod
-
-NETaa13525: perlxs update from Dean Roehrich
-Files patched: pod/perlxs.pod
-
-NETaa13525: rename powerunix to powerux
-Files patched: MANIFEST hints/powerux.sh
-
-NETaa13540: VMS uses CLK_TCK for HZ
-Files patched: pp_sys.c
-
-NETaa13721: pad_findlex core dumps on bad CvOUTSIDE()
-From: Carl Witty
-Files patched: op.c sv.c toke.c
- Each CV has a reference to the CV containing it lexically. Unfortunately,
- it didn't reference-count this reference, so when the outer CV was freed,
- we ended up with a pointer to memory that got reused later as some other kind
- of SV.
-
-NETaa13721: warning suppression
-Files patched: toke.c
- (same)
-
-NETaa13722: walk.c had inconsistent static declarations
-From: Tim Bunce
-Files patched: x2p/walk.c
- Consolidated the various declarations and made them consistent with
- the actual definitions.
-
-NETaa13724: -MPackage=args patch
-From: Tim Bunce
-Files patched: perl.c pod/perlrun.pod
- Added in the -MPackage=args patch too.
-
-NETaa13729: order-of-evaluation dependency in scope.c on leaving REGCONTEXT
-From: "Jason Shirk"
-Files patched: scope.c
- Did
-
- I32 delta = SSPOPINT;
- savestack_ix -= delta; /* regexp must have croaked */
-
- instead.
-
-NETaa13731: couldn't assign external lexical array to itself
-From: oneill@cs.sfu.ca
-Files patched: op.c
- The pad_findmy routine was only checking previous statements for previous
- mention of external lexicals, so the fact that the current statement
- already mentioned @list was not noted. It therefore allocated another
- reference to the outside lexical, and this didn't compare equal when
- the assigment parsing code was trying to determine whether there was a
- common variable on either side of the equals. Since it didn't see the
- same variable, it thought it could avoid making copies of the values on
- the stack during list assignment. Unfortunately, before using those
- values, the list assignment has to zero out the target array, which
- destroys the values.
-
- The fix was to make pad_findmy search the current statement as well. This
- was actually a holdover from some old code that was trying to delay
- introduction of "my" variables until the next statement. This is now
- done with a different mechanism, so the fix should not adversely affect
- that.
-
-NETaa13733: s/// doesn't free old string when using copy mode
-From: Larry Wall
-Files patched: pp_ctl.c pp_hot.c
- When I removed the use of sv_replace(), I simply forgot to free the old char*.
-
-NETaa13736: closures leaked memory
-From: Carl Witty
-Files patched: op.c pp.c
- This is a specific example of a more general bug, fixed as NETaa13760, having
- to do with reference counts on comppads.
-
-NETaa13739: XSUB interface caches gimme in case XSUB clobbers it
-From: Dean Roehrich
-Files patched: pp_hot.c
- Applied suggest patch. Also deleted second gimme declaration as redundant.
-
-NETaa13760: comppad reference counts were inconsistent
-From: Larry Wall
-Files patched: op.c perl.c pp_ctl.c toke.c
- All official references to comppads are supposed to be through compcv now,
- but the transformation was not complete, resulting in memory leakage.
-
-NETaa13761: sv_2pv() wrongly preferred IV to NV when SV was readonly
-From: "Jack R. Lawler"
-Files patched: sv.c
- Okay, I understand how this one happened. This is a case where a
- beneficial fix uncovered a bug elsewhere. I changed the constant
- folder to prefer integer results over double if the numbers are the
- same. In this case, they aren't, but it leaves the integer value there
- anyway because the storage is already allocated for it, and it *might*
- be used in an integer context. And since it's producing a constant, it
- sets READONLY. Unfortunately, sv_2pv() bogusly preferred the integer
- value to the double when READONLY was set. This never showed up if you
- just said
-
- print 1.4142135623731;
-
- because in that case, there was already a string value.
-
-
-NETaa13772: shmwrite core dumps consistently
-From: Gabe Schaffer
-Files patched: opcode.h opcode.pl
- The shmwrite operator is a list operator but neglected to push a stack
- mark beforehand, because an 'm' was missing from opcode.pl.
-
-NETaa13773: $. was misdocumented as read-only.
-From: Inaba Hiroto
-Files patched: pod/perlvar.pod
- <1.array-element-read-only>
- % perl -le '$,=", "; $#w=5; for (@w) { $_=1; } print @w'
- Modification of a read-only value attempted at -e line 1.
- % perl4 -le '$,=", "; $#w=5; for (@w) { $_=1; } print @w'
- 1, 1, 1, 1, 1, 1
-
- This one may stay the way it is for performance reasons.
-
- <2.begin-local-RS>
- % cat abc
- a
- b
- c
- % perl -e 'BEGIN { local $/ = ""; } print "$.:$_" while <>;' abc
- 1:a
- b
- c
- % perl -e '{ local $/ = ""; } print "$.:$_" while <>;' abc
- 1:a
- 2:b
- 3:c
-
- $/ wasn't initialized early enough, so local set it back to permanently
- undefined on exit from the block.
-
- <3.grep-x0-bug>
- % perl -le 'print grep(/^-/ ? ($x=$_) x 0 : 1, "a", "-b", "c");'
- a
-
- % perl4 -le 'print grep(/^-/ ? ($x=$_) x 0 : 1, "a", "-b", "c");'
- ac
-
- An extra mark was left on the stack if (('x') x $repeat) was used in a scalar
- context.
-
- <4.input-lineno-assign>
- # perl -w does not complain about assignment to $. (Is this just a feature?)
- # perlvar.pod says "This variable should be considered read-only."
- % cat abc
- a
- b
- c
- % perl -wnle '$. = 10 if $. == 2; print "$.:$_"' abc
- 1:a
- 10:b
- 11:c
-
- Fixed doc.
-
- <5.local-soft-ref.bug>
- % perl -e 'local ${"a"}=1;'
- zsh: 529 segmentation fault perl -e 'local ${"a"}=1;'
-
- Now says
- Can't localize a reference at -e line 1.
-
- <6.package-readline>
- % perl -e 'package foo; sub foo { 1; } package main; $_ = foo::foo(); print'
- 1
- % perl -e '
- package readline; sub foo { 1; } package main; $_ = readline::foo(); print'
- Undefined subroutine &main::foo called at -e line 1.
- % perl -e '
- package readline; sub foo { 1; } package main; $_ = &readline::foo(); print'
- 1
-
- Now treats foo::bar correctly even if foo is a keyword.
-
- <7.page-head-set-to-null-string>
- % cat page-head
- #From: russell@ccu1.auckland.ac.nz (Russell Fulton)
- #Newsgroups: comp.lang.perl
- #Subject: This script causes Perl 5.00 to sementation fault
- #Date: 15 Nov 1994 00:11:37 GMT
- #Message-ID: <3a8ubp$jrj@net.auckland.ac.nz>
-
- select((select(STDOUT), $^='')[0]); #this is the critical line
- $a = 'a';
- write ;
- exit;
-
- format STDOUT =
- @<<<<<<
- $a
- .
-
- % perl page-head
- zsh: 1799 segmentation fault perl /tmp/page-head
-
- Now says
- Undefined top format "main::" called at ./try line 11.
-
- <8.sub-as-index>
- # parser bug?
- % perl -le 'sub foo {0}; $x[0]=0;$x[foo]<=0'
- Unterminated <> operator at -e line 1.
- % perl -le 'sub foo {0}; $x[0]=0;$x[foo()]<=0'
-
- A right square bracket now forces expectation of an operator.
-
- <9.unary-minus-to-regexp-var>
- % cat minus-reg
- #From: Michael Cook <mcook@cognex.com>
- #Newsgroups: comp.lang.perl
- #Subject: bug: print -$1
- #Date: 01 Feb 1995 15:31:25 GMT
- #Message-ID: <MCOOK.95Feb1103125@erawan.cognex.com>
-
- $_ = "123";
- /\d+/;
- print $&, "\n";
- print -$&, "\n";
- print 0-$&, "\n";
-
- % perl minus-reg
- 123
- 123
- -123
-
- Apparently already fixed in my copy.
-
- <10.vec-segv>
- % cat vec-bug
- ## Offset values are changed for my machine.
-
- #From: augustin@gdstech.grumman.com (Conrad Augustin)
- #Subject: perl5 vec() bug?
- #Message-ID: <1994Nov22.193728.25762@gdstech.grumman.com>
- #Date: Tue, 22 Nov 1994 19:37:28 GMT
-
- #The following two statements each produce a segmentation fault in perl5:
-
- #vec($a, 21406, 32) = 1; # seg fault
- vec($a, 42813, 16) = 1; # seg fault
-
- #When the offset values are one less, all's well:
- #vec($a, 21405, 32) = 1; # ok
- #vec($a, 42812, 16) = 1; # ok
-
- #Interestingly, this is ok for all high values of N:
- #$N=1000000; vec($a, $N, 8) = 1;
-
- % perl vec-bug
- zsh: 1806 segmentation fault perl vec-bug
-
- Can't reproduce this one.
-
-
-NETaa13773: $/ not correctly localized in BEGIN
-Files patched: perl.c
- (same)
-
-NETaa13773: foo::bar was misparsed if foo was a reserved word
-Files patched: toke.c toke.c
- (same)
-
-NETaa13773: right square bracket didn't force expectation of operator
-Files patched: toke.c
- (same)
-
-NETaa13773: scalar ((x) x $repeat) left stack mark
-Files patched: op.c
- (same)
-
-NETaa13778: -w coredumps on <$>
-From: Hans Mulder
-Files patched: pp_hot.c toke.c
- Now produces suggested error message. Also installed guard in warning code
- that coredumped.
-
-NETaa13779: foreach didn't use savestack mechanism
-From: Hans Mulder
-Files patched: cop.h pp_ctl.c
- The foreach mechanism saved the old scalar value on the context stack
- rather than the savestack. It could consequently get out of sync if
- unexpectedly unwound.
-
-NETaa13785: GIMME sometimes used wrong context frame
-From: Greg Earle
-Files patched: embed.h global.sym op.h pp_ctl.c proto.h
- The expression inside the return was taking its context from the immediately
- surrounding block rather than the innermost surrounding subroutine call.
-
-NETaa13797: could modify sv_undef through auto-vivification
-From: Ilya Zakharevich
-Files patched: pp.c
- Inserted the missing check for readonly values on auto-vivification.
-
-NETaa13798: if (...) {print} treats print as quoted
-From: Larry Wall
-Files patched: toke.c
- The trailing paren of the condition was setting expectations to XOPERATOR
- rather than XBLOCK, so it was being treated like ${print}.
-
-NETaa13926: commonality was not detected in assignments using COND_EXPR
-From: Mark Hanson
-Files patched: opcode.h opcode.pl
- The assignment compiler didn't check the 2nd and 3rd args of a ?:
- for commonality. It still doesn't, but I made ?: into a "dangerous"
- operator so it is forced to treat it as common.
-
-NETaa13957: was marking the PUSHMARK as modifiable rather than the arg
-From: David Couture
-Files patched: op.c sv.c
- It was marking the PUSHMARK as modifiable rather than the arg.
-
-NETaa13962: documentation of behavior of scalar <*> was unclear
-From: Tom Christiansen
-Files patched: pod/perlop.pod
- Added the following to perlop:
-
- A glob only evaluates its (embedded) argument when it is starting a new
- list. All values must be read before it will start over. In a list
- context this isn't important, because you automatically get them all
- anyway. In a scalar context, however, the operator returns the next value
- each time it is called, or a FALSE value if you've just run out. Again,
- FALSE is returned only once. So if you're expecting a single value from
- a glob, it is much better to say
-
- ($file) = <blurch*>;
-
- than
-
- $file = <blurch*>;
-
- because the latter will alternate between returning a filename and
- returning FALSE.
-
-
-NETaa13986: split ignored /m pattern modifier
-From: Winfried Koenig
-Files patched: pp.c
- Fixed to work like m// and s///.
-
-NETaa13992: regexp comments not seen after + in non-extended regexp
-From: Mark Knutsen
-Files patched: regcomp.c
- The code to skip regexp comments was guarded by a conditional that only
- let it work when /x was in effect.
-
-NETaa14014: use subs should not count as definition, only as declaration
-From: Keith Thompson
-Files patched: sv.c
- On *foo = \&bar, doesn't set GVf_IMPORTED if foo and bar are in same package.
-
-NETaa14021: sv_inc and sv_dec "upgraded" magical SV to non-magical
-From: Paul A Sand
-Also: Andreas Koenig
-Files patched: sv.c
- The sv_inc() and sv_dec() routines "upgraded" null magical SVs to non-magical.
-
-NETaa14086: require should check tainting
-From: Karl Simon Berg
-Files patched: pp_ctl.c
- Since we shouldn't allow tainted requires anyway, it now says:
-
- Insecure dependency in require while running with -T switch at tst.pl line 1.
-
-NETaa14104: negation fails on magical variables like $1
-From: tim
-Files patched: pp.c
- Negation was failing on magical values like $1. It was testing the wrong
- bits and also failed to provide a final "else" if none of the bits matched.
-
-NETaa14107: deep sort return leaked contexts
-From: Quentin Fennessy
-Files patched: pp_ctl.c
- Needed to call dounwind() appropriately.
-
-NETaa14129: attempt to localize via a reference core dumps
-From: Michele Sardo
-Files patched: op.c pod/perldiag.pod
- Now produces an error "Can't localize a reference", with explanation in
- perldiag.
-
-NETaa14138: substr() and s/// can cause core dump
-From: Andrew Vignaux
-Files patched: pp_hot.c
- Forgot to call SvOOK_off() on the SV before freeing its string.
-
-NETaa14145: ${@INC}[0] dumped core in debugger
-From: Hans Mulder
-Files patched: sv.c
- Now croaks "Bizarre copy of ARRAY in block exit", which is better than
- a core dump. The fact that ${@INC}[0] means $INC[0] outside the debugger
- is a different bug.
-
-NETaa14147: bitwise assignment ops wipe out byte of target string
-From: Jim Richardson
-Files patched: doop.c
- The code was assuming that the target was not either of the two operands,
- which is false for an assignment operator.
-
-NETaa14153: lexing of lexicals in patterns fooled by character class
-From: Dave Bianchi
-Files patched: toke.c
- It never called the dwimmer, which is how it fooled it.
-
-NETaa14154: allowed autoloaded methods by recognizing sub method; declaration
-From: Larry Wall
-Files patched: gv.c
- Made sub method declaration sufficient for autoloader to stop searching on.
-
-NETaa14156: shouldn't optimize block scope on tainting
-From: Pete Peterson
-Files patched: op.c toke.c
- I totally disabled the block scope optimization when running tainted.
-
-NETaa14157: -T and -B only allowed 1/30 "odd" characters--changed to 1/3
-From: Tor Lillqvist
-Files patched: pp_sys.c
- Applied suggested patch.
-
-NETaa14160: deref of null symbol should produce null list
-From: Jared Rhine
-Files patched: pp_hot.c
- It didn't check for list context before returning undef.
-
-NETaa14162: POSIX::gensym now returns a symbol reference
-From: Josh N. Pritikin
-Also: Tim Bunce
-Files patched: ext/POSIX/POSIX.pm
- Applied suggested patch.
-
-NETaa14164: POSIX autoloader now distinguishes non-constant "constants"
-From: Tim Bunce <Tim.Bunce@ig.co.uk>
-Files patched: ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs
- The .xs file now distinguishes non-constant "constants" by setting EAGAIN.
- This will also let us use #ifdef within the .xs file to de-constantify
- any other macros that happen not to be constants even if they don't use
- an argument.
-
-NETaa14166: missing semicolon after "my" induces core dump
-From: Thomas Kofler
-Files patched: toke.c
- The parser was left thinking it was still processing a "my", and flubbed.
- I made it wipe out the "in_my" variable on a syntax error.
-
-NETaa14166: missing semicolon after "my" induces core dump"
-Files patched: toke.c
- (same)
-
-NETaa14206: can now use English and strict at the same time
-From: Andrew Wilcox
-Files patched: sv.c
- It now counts imported symbols as okay under "use strict".
-
-NETaa14206: can now use English and strict at the same time
-Files patched: gv.c pod/perldiag.pod
- (same)
-
-NETaa14265: elseif now produces severe warning
-From: Yutao Feng
-Files patched: pod/perldiag.pod toke.c
- Now complains explicitly about "elseif".
-
-NETaa14279: list assignment propagated taintedness to independent scalars
-From: Tim Freeman
-Files patched: pp_hot.c
- List assignment needed to be modified so that tainting didn't propagate
- between independent scalar values.
-
-NETaa14312: undef in @EXPORTS core dumps
-From: William Setzer
-Files patched: lib/Exporter.pm
- Now says:
-
- Unable to create sub named "t::" at lib/Exporter.pm line 159.
- Illegal null symbol in @t::EXPORT at -e line 1
- BEGIN failed--compilation aborted at -e line 1.
-
-
-NETaa14312: undef in @EXPORTS core dumps
-Files patched: pod/perldiag.pod sv.c
- (same)
-
-NETaa14321: literal @array check shouldn't happen inside embedded expressions
-From: Mark H. Nodine
-Files patched: toke.c
- The general solution to this is to disable the literal @array check within
- any embedded expression. For instance, this also failed bogusly:
-
- print "$foo{@foo}";
-
- The reason fixing this also fixes the s///e problem is that the lexer
- effectively puts the RHS into a do {} block, making the expression
- embedded within curlies, as far as the error message is concerned.
-
-NETaa14322: now localizes $! during POSIX::AUTOLOAD
-From: Larry Wall
-Files patched: ext/POSIX/POSIX.pm
- Added local $! = 0.
-
-NETaa14324: defined() causes spurious sub existence
-From: "Andreas Koenig"
-Files patched: op.c pp.c
- It called pp_rv2cv which wrongly assumed it could add any sub it referenced.
-
-NETaa14336: use Module () forces import of nothing
-From: Tim Bunce
-Files patched: op.c
- use Module () now refrains from calling import at all.
-
-NETaa14353: added special HE allocator
-From: Larry Wall
-Files patched: global.sym
-
-NETaa14353: added special HE allocator
-Files patched: hv.c perl.h
-
-NETaa14353: array extension now converts old memory to SV storage.
-Files patched: av.c av.h sv.c
-
-NETaa14353: hashes now convert old storage into SV arenas.
-Files patched: global.sym
-
-NETaa14353: hashes now convert old storage into SV arenas.
-Files patched: hv.c perl.h
-
-NETaa14353: upgraded SV arena allocation
-Files patched: proto.h
-
-NETaa14353: upgraded SV arena allocation
-Files patched: perl.c sv.c
-
-NETaa14422: added rudimentary prototypes
-From: Gisle Aas
-Files patched: Makefile.SH op.c op.c perly.c perly.c.diff perly.h perly.y proto.h sv.c toke.c
- Message-Id: <9509290018.AA21548@scalpel.netlabs.com>
- To: doughera@lafcol.lafayette.edu (Andy Dougherty)
- Cc: perl5-porters@africa.nicoh.com
- Subject: Re: Jumbo Configure patch vs. 1m.
- Date: Thu, 28 Sep 95 17:18:54 -0700
- From: lwall@scalpel.netlabs.com (Larry Wall)
-
- : No. Larry's currently got the patch pumpkin for all such core perl topics.
-
- I dunno whether you should let me have the patch pumpkin or not. To fix
- a Sev 2 I just hacked in rudimentary prototypes. :-)
-
- We can now define true unary subroutines, as well as argumentless
- subroutines:
-
- sub baz () { 12; } # Must not have argument
- sub bar ($) { $_[0] * 7 } # Must have exactly one argument
- sub foo ($@) { print "@_\n" } # Must have at least one argument
- foo bar baz / 2 || "oops", "is the answer";
-
- This prints "42 is the answer" on my machine. That is, it's the same as
-
- foo( bar( baz() / 2) || "oops", "is the answer");
-
- Attempting to compile
-
- foo;
-
- results in
-
- Too few arguments for main::foo at ./try line 8, near "foo;"
-
- Compiling
-
- bar 1,2,3;
-
- results in
-
- Too many arguments for main::bar at ./try line 8, near "foo;"
-
- But
-
- @array = ('a','b','c');
- foo @array, @array;
-
- prints "3 a b c" because the $ puts the first arg of foo into scalar context.
-
- The main win at this point is that we can say
-
- sub AAA () { 1; }
- sub BBB () { 2; }
-
- and the user can say AAA + BBB and get 3.
-
- I'm not quite sure how this interacts with autoloading though. I fear
- POSIX.pm will need to say
-
- sub E2BIG ();
- sub EACCES ();
- sub EAGAIN ();
- sub EBADF ();
- sub EBUSY ();
- ...
- sub _SC_STREAM_MAX ();
- sub _SC_TZNAME_MAX ();
- sub _SC_VERSION ();
-
- unless we can figure out how to efficiently declare a default prototype
- at import time. Meaning, not using eval. Currently
-
- *foo = \&bar;
-
- (the ordinary import mechanism) implicitly stubs &bar with no prototype if
- &bar is not yet declared. It's almost like you want an AUTOPROTO to
- go with your AUTOLOAD.
-
- Another thing to rub one's 5 o'clock shadow over is that there's no way
- to apply a prototype to a method call at compile time.
-
- And no, I don't want to have the
-
- sub howabout ($formal, @arguments) { ... }
-
- argument right now.
-
- Larry
-
-NETaa14422: couldn't take reference of a prototyped function
-Files patched: op.c
- (same)
-
-NETaa14423: use didn't allow expressions involving the scratch pad
-From: Graham Barr
-Files patched: op.c perly.c perly.c.diff perly.y proto.h vms/perly_c.vms
- Applied suggested patch.
-
-NETaa14444: lexical scalar didn't autovivify
-From: Gurusamy Sarathy
-Files patched: op.c pp_hot.c
- It didn't have code in pp_padsv to do the right thing.
-
-NETaa14448: caller could dump core when used within an eval or require
-From: Danny R. Faught
-Files patched: pp_ctl.c
- caller() was incorrectly assuming the context stack contained a subroutine
- context when it in fact contained an eval context.
-
-NETaa14451: improved error message on bad pipe filehandle
-From: Danny R. Faught
-Files patched: pp_sys.c
- Now says the slightly more informative
-
- Can't use an undefined value as filehandle reference at ./try line 3.
-
-NETaa14462: pp_dbstate had a scope leakage on recursion suppression
-From: Tim Bunce
-Files patched: pp_ctl.c
- Swapped the code in question around.
-
-NETaa14482: sv_unref freed ref prematurely at times
-From: Gurusamy Sarathy
-Files patched: sv.c
- Made sv_unref() mortalize rather than free the old reference.
-
-NETaa14484: appending string to array produced bizarre results
-From: Greg Ward
-Also: Malcolm Beattie
-Files patched: pp_hot.c
- Will now say, "Can't coerce ARRAY to string".
-
-NETaa14525: assignment to globs didn't reset them correctly
-From: Gurusamy Sarathy
-Files patched: sv.c
- Applied parts of patch not overridden by subsequent patch.
-
-NETaa14529: a partially matching subpattern could spoof infinity detector
-From: Wayne Berke
-Files patched: regexec.c
- A partial match on a subpattern could fool the infinite regress detector
- into thinking progress had been made.
- The previous workaround prevented another bug (NETaa14529) from being fixed,
- so I've backed it out. I'll need to think more about how to detect failure
- to progress. I'm still hopeful it's not equivalent to the halting problem.
-
-NETaa14535: patches from Gurusamy Sarathy
-From: Gurusamy Sarathy
-Files patched: op.c pp.c pp_hot.c regexec.c sv.c toke.c
- Applied most recent suggested patches.
-
-NETaa14537: select() can return too soon
-From: Matt Kimball
-Also: Andreas Gustafsson
-Files patched: pp_sys.c
-
-NETaa14538: method calls were treated like do {} under loop modifiers
-From: Ilya Zakharevich
-Files patched: perly.c perly.y
- Needed to take the OPf_SPECIAL flag off of entersubs from method reductions.
- (It was probably a cut-and-paste error from long ago.)
-
-NETaa14540: foreach (@array) no longer does extra stack copy
-From: darrinm@lmc.com
-Files patched: Todo op.c pp_ctl.c pp_hot.c
- Fixed by doing the foreach(@array) optimization, so it iterates
- directly through the array, and can detect the implicit shift from
- referencing <>.
-
-NETaa14541: new version of perlbug
-From: Kenneth Albanowski
-Files patched: README pod/perl.pod utils/perlbug.PL
- Brought it up to version 1.09.
-
-NETaa14541: perlbug 1.11
-Files patched: utils/perlbug.PL
- (same)
-
-NETaa14548: magic sets didn't check private OK bits
-From: W. Bradley Rubenstein
-Files patched: mg.c
- The magic code was getting mixed up between private and public POK bits.
-
-NETaa14550: made ~ magic magical
-From: Tim Bunce
-Files patched: sv.c
- Applied suggested patch.
-
-NETaa14551: humongous header causes infinite loop in format
-From: Grace Lee
-Files patched: pp_sys.c
- Needed to check for page exhaustion after doing top-of-form.
-
-NETaa14558: attempt to call undefined top format core dumped
-From: Hallvard B Furuseth
-Files patched: pod/perldiag.pod pp_sys.c
- Now issues an error on attempts to call a non-existent top format.
-
-NETaa14561: Gurusamy Sarathy's G_KEEPERR patch
-From: Andreas Koenig
-Also: Gurusamy Sarathy
-Also: Tim Bunce
-Files patched: cop.h interp.sym perl.c perl.h pp_ctl.c pp_sys.c sv.c toke.c
- Applied latest patch.
-
-NETaa14581: shouldn't execute BEGIN when there are compilation errors
-From: Rickard Westman
-Files patched: op.c
- Perl should not try to execute BEGIN and END blocks if there's been a
- compilation error.
-
-NETaa14582: got SEGV sorting sparse array
-From: Rick Pluta
-Files patched: pp_ctl.c
- Now weeds out undefined values much like Perl 4 did.
- Now sorts undefined values to the front.
-
-NETaa14582: sort was letting unsortable values through to comparison routine
-Files patched: pp_ctl.c
- (same)
-
-NETaa14585: globs in pad space weren't properly cleaned up
-From: Gurusamy Sarathy
-Files patched: op.c pp.c pp_hot.c sv.c
- Applied suggested patch.
-
-NETaa14614: now does dbmopen with perl_eval_sv()
-From: The Man
-Files patched: perl.c pp_sys.c proto.h
- dbmopen now invokes perl_eval_sv(), which should handle error conditions
- better.
-
-NETaa14618: exists doesn't work in GDBM_File
-From: Andrew Wilcox
-Files patched: ext/GDBM_File/GDBM_File.xs
- Applied suggested patch.
-
-NETaa14619: tied()
-From: Larry Wall
-Also: Paul Marquess
-Files patched: embed.h global.sym keywords.h keywords.pl opcode.h opcode.pl pp_sys.c toke.c
- Applied suggested patch.
-
-NETaa14636: Jumbo Dynaloader patch
-From: Tim Bunce
-Files patched: ext/DynaLoader/DynaLoader.pm ext/DynaLoader/dl_dld.xs ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_vms.xs ext/DynaLoader/dlutils.c
- Applied suggested patches.
-
-NETaa14637: checkcomma routine was stupid about bareword sub calls
-From: Tim Bunce <Tim.Bunce@ig.co.uk>
-Files patched: toke.c
- The checkcomma routine was stupid about bareword sub calls.
-
-NETaa14639: (?i) didn't reset on runtime patterns
-From: Mark A. Scheel
-Files patched: op.h pp_ctl.c toke.c
- It didn't distinguish between permanent flags outside the pattern and
- temporary flags within the pattern.
-
-NETaa14649: selecting anonymous globs dumps core
-From: Chip Salzenberg
-Files patched: cop.h doio.c embed.h global.sym perl.c pp_sys.c proto.h
- Applied suggested patch, but reversed the increment and decrement to avoid
- decrementing and freeing what we're going to increment.
-
-NETaa14655: $? returned negative value on AIX
-From: Kim Frutiger
-Also: Stephen D. Lee
-Files patched: pp_sys.c
- Applied suggested patch.
-
-NETaa14668: {2,} could match once
-From: Hugo van der Sanden
-Files patched: regexec.c
- When an internal pattern failed a conjecture, it didn't back off on the
- number of times it thought it had matched.
-
-NETaa14673: open $undefined dumped core
-From: Samuli K{rkk{inen
-Files patched: pp_sys.c
- pp_open() didn't check its argument for globness.
-
-NETaa14683: stringifies were running pad out of space
-From: Robin Barker
-Files patched: op.h toke.c
- Increased PADOFFSET to a U32, and made lexer not put double-quoted strings
- inside OP_STRINGIFY unless they really needed it.
-
-NETaa14689: shouldn't have . in @INC when tainting
-From: William R. Somsky
-Files patched: perl.c
- Now does not put . into @INC when tainting. It may still be added with a
-
- use lib ".";
-
- or, to put it at the end,
-
- BEGIN { push(@INC, ".") }
-
- but this is not recommended unless a chdir to a known location has been done
- first.
-
-NETaa14690: values inside tainted SVs were ignored
-From: "James M. Stern"
-Files patched: pp.c pp_ctl.c
- It was assuming that a tainted value was a string.
-
-NETaa14692: format name required qualification under use strict
-From: Tom Christiansen
-Files patched: gv.c
- Now treats format names the same as subroutine names.
-
-NETaa14695: added simple regexp caching
-From: John Rowe
-Files patched: pp_ctl.c
- Applied suggested patch.
-
-NETaa14697: regexp comments were sometimes wrongly treated as literal text
-From: Tom Christiansen
-Files patched: regcomp.c
- The literal-character grabber didn't know about extended comments.
- N.B. '#' is treated as a comment character whenever the /x option is
- used now, so you can't include '#' as a simple literal in /x regexps.
-
- (By the way, Tom, the boxed form of quoting in the previous enclosure is
- exceeding antisocial when you want to extract the code from it.)
-
-NETaa14704: closure got wrong outer scope if outer sub was predeclared
-From: Marc Paquette
-Files patched: op.c
- The outer scope of the anonymous sub was set to the stub rather than to
- the actual subroutine. I kludged it by making the outer scope of the
- stub be the actual subroutine, if anything is depending on the stub.
-
-NETaa14705: $foo .= $foo did free memory read
-From: Gerd Knops
-Files patched: sv.c
- Now modifies address to copy if it was reallocated.
-
-NETaa14709: Chip's FileHandle stuff
-From: Larry Wall
-Also: Chip Salzenberg
-Files patched: MANIFEST ext/FileHandle/FileHandle.pm ext/FileHandle/FileHandle.xs ext/FileHandle/Makefile.PL ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs lib/FileCache.pm lib/Symbol.pm t/lib/filehand.t t/lib/posix.t
- Applied suggested patches.
-
-NETaa14711: added (&) and (*) prototypes for blocks and symbols
-From: Kenneth Albanowski
-Files patched: Makefile.SH op.c perly.c perly.h perly.y toke.c
- & now means that it must have an anonymous sub as that argument. If
- it's the first argument, the sub may be specified as a block in the
- indirect object slot, much like grep or sort, which have prototypes of (&@).
-
- Also added * so you can do things like
-
- sub myopen (*;$);
-
- myopen(FOO, $filename);
-
-NETaa14713: setuid FROM root now defaults to not do tainting
-From: Tony Camas
-Files patched: mg.c perl.c pp_hot.c
- Applied suggested patch.
-
-NETaa14714: duplicate magics could be added to an SV
-From: Yary Hluchan
-Files patched: sv.c sv.c
- The sv_magic() routine didn't properly check to see if it already had a
- magic of that type. Ordinarily it would have, but it was called during
- mg_get(), which forces the magic flags off temporarily.
-
-NETaa14721: sub defined during erroneous do-FILE caused core dump
-From: David Campbell
-Files patched: op.c
- Fixed the seg fault. I couldn't reproduce the return problem.
-
-NETaa14734: ref should never return undef
-From: Dale Amon
-Files patched: pp.c t/op/overload.t
- Now returns null string.
-
-NETaa14751: slice of undefs now returns null list
-From: Tim Bunce
-Files patched: pp.c pp_hot.c
- Null list clobberation is now done in lslice, not aassign.
-
-NETaa14789: select coredumped on Linux
-From: Ulrich Kunitz
-Files patched: pp_sys.c
- Applied suggested patches, more or less.
-
-NETaa14789: straightened out ins and out of duping
-Files patched: lib/IPC/Open3.pm
- (same)
-
-NETaa14791: implemented internal SUPER class
-From: Nick Ing-Simmons
-Also: Dean Roehrich
-Files patched: gv.c
- Applied suggested patch.
-
-NETaa14845: s/// didn't handle offset strings
-From: Ken MacLeod
-Files patched: pp_ctl.c
- Needed a call to SvOOK_off(targ) in pp_substcont().
-
-NETaa14851: Use of << to mean <<"" is deprecated
-From: Larry Wall
-Files patched: toke.c
-
-NETaa14865: added HINT_BLOCK_SCOPE to "elsif"
-From: Jim Avera
-Files patched: perly.y
- Needed to set HINT_BLOCK_SCOPE on "elsif" to prevent the do block from
- being optimized away, which caused the statement transition in elsif
- to reset the stack too far back.
-
-NETaa14876: couldn't delete localized GV safely
-From: John Hughes
-Files patched: pp.c scope.c
- The reference count of the "borrowed" GV needed to be incremented while
- there was a reference to it in the savestack.
-
-NETaa14887: couldn't negate magical scalars
-From: ian
-Also: Gurusamy Sarathy
-Files patched: pp.c
- Applied suggested patch, more or less. (It's not necessary to test both
- SvNIOK and SvNIOKp, since the private bits are always set if the public
- bits are set.)
-
-NETaa14893: /m modifier was sticky
-From: Jim Avera
-Files patched: pp_ctl.c
- pp_match() and pp_subst() were using an improperly scoped SAVEINT to restore
- the value of the internal variable multiline.
-
-NETaa14893: /m modifier was sticky
-Files patched: cop.h pp_hot.c
- (same)
-
-NETaa14916: complete.pl retained old return value
-From: Martyn Pearce
-Files patched: lib/complete.pl
- Applied suggested patch.
-
-NETaa14928: non-const 3rd arg to split assigned to list could coredump
-From: Hans de Graaff
-Files patched: op.c
- The optimizer was assuming the OP was an OP_CONST.
-
-NETaa14942: substr as lvalue could disable magic
-From: Darrell Kindred <dkindred+@cmu.edu>
-Files patched: pp.c
- The substr was disabling the magic of $1.
-
-NETaa14990: "not" not parseable when expecting term
-From: "Randal L. Schwartz"
-Files patched: perly.c perly.c.diff perly.y vms/perly_c.vms
- The NOTOP production needed to be moved down into the terms.
-
-NETaa14993: Bizarre copy of formline
-From: Tom Christiansen
-Also: Charles Bailey
-Files patched: sv.c
- Applied suggested patch.
-
-NETaa14998: sv_add_arena() no longer leaks memory
-From: Andreas Koenig
-Files patched: av.c hv.c perl.h sv.c
- Now keeps one potential arena "on tap", but doesn't use it unless there's
- demand for SV headers. When an AV or HV is extended, its old memory
- becomes the next potential arena unless there already is one, in which
- case it is simply freed. This will have the desired property of not
- stranding medium-sized chunks of memory when extending a single array
- repeatedly, but will not degrade when there's no SV demand beyond keeping
- one chunk of memory on tap, which generally will be about 250 bytes big,
- since it prefers the earlier freed chunk over the later. See the nice_chunk
- variable.
-
-NETaa14999: $a and $b now protected from use strict and lexical declaration
-From: Tom Christiansen
-Files patched: gv.c pod/perldiag.pod toke.c
- Bare $a and $b are now allowed during "use strict". In addition,
- the following diag was added:
-
- =item Can't use "my %s" in sort comparison
-
- (F) The global variables $a and $b are reserved for sort comparisons.
- You mentioned $a or $b in the same line as the <=> or cmp operator,
- and the variable had earlier been declared as a lexical variable.
- Either qualify the sort variable with the package name, or rename the
- lexical variable.
-
-
-NETaa15034: use strict refs should allow calls to prototyped functions
-From: Roderick Schertler
-Files patched: perly.c perly.c.diff perly.y toke.c vms/perly_c.vms
- Applied patch suggested by Chip.
-
-NETaa15083: forced $AUTOLOAD to be untainted
-From: Tim Bunce
-Files patched: gv.c pp_hot.c
- Stripped any taintmagic from $AUTOLOAD after setting it.
-
-NETaa15084: patch for Term::Cap
-From: Mark Kaehny
-Also: Hugo van der Sanden
-Files patched: lib/Term/Cap.pm
- Applied suggested patch.
-
-NETaa15086: null pattern could cause coredump in s//_$1_/
-From: "Paul E. Maisano"
-Files patched: cop.h pp_ctl.c
- If the replacement pattern was complicated enough to cause pp_substcont
- to be called, then it lost track of which REGEXP* it was supposed to
- be using.
-
-NETaa15087: t/io/pipe.t didn't work on AIX
-From: Andy Dougherty
-Files patched: t/io/pipe.t
- Applied suggested patch.
-
-NETaa15088: study was busted
-From: Hugo van der Sanden
-Files patched: opcode.h opcode.pl pp.c
- It was studying its scratch pad target rather than the argument supplied.
-
-NETaa15090: MSTATS patch
-From: Tim Bunce
-Files patched: global.sym malloc.c perl.c perl.h proto.h
- Applied suggested patch.
-
-NETaa15098: longjmp out of magic leaks memory
-From: Chip Salzenberg
-Files patched: mg.c sv.c
- Applied suggested patch.
-
-NETaa15102: getpgrp() is broken if getpgrp2() is available
-From: Roderick Schertler
-Files patched: perl.h pp_sys.c
- Applied suggested patch.
-
-NETaa15103: prototypes leaked opcodes
-From: Chip Salzenberg
-Files patched: op.c
- Applied suggested patch.
-
-NETaa15107: quotameta memory bug on all metacharacters
-From: Chip Salzenberg
-Files patched: pp.c
- Applied suggested patch.
-
-NETaa15108: Fix for incomplete string leak
-From: Chip Salzenberg
-Files patched: toke.c
- Applied suggested patch.
-
-NETaa15110: couldn't use $/ with 8th bit set on some architectures
-From: Chip Salzenberg
-Files patched: doop.c interp.sym mg.c op.c perl.c perl.h pp_ctl.c pp_hot.c pp_sys.c sv.c toke.c util.c
- Applied suggested patches.
-
-NETaa15112: { a_1 => 2 } didn't parse as expected
-From: Stuart M. Weinstein
-Files patched: toke.c
- The little dwimmer was only skipping ALPHA rather than ALNUM chars.
-
-NETaa15123: bitwise ops produce spurious warnings
-From: Hugo van der Sanden
-Also: Chip Salzenberg
-Also: Andreas Gustafsson
-Files patched: sv.c
- Decided to suppress the warning in the conversion routines if merely converting
- a temporary, which can never be a user-supplied value anyway.
-
-NETaa15129: #if defined (foo) misparsed in h2ph
-From: Roderick Schertler <roderick@gate.net>
-Files patched: utils/h2ph.PL
- Applied suggested patch.
-
-NETaa15131: some POSIX functions assumed valid filehandles
-From: Chip Salzenberg
-Files patched: ext/POSIX/POSIX.xs
- Applied suggested patch.
-
-NETaa15151: don't optimize split on OPpASSIGN_COMMON
-From: Huw Rogers
-Files patched: op.c
- Had to swap the optimization down to after the assignment op is generated
- and COMMON is calculated, and then clean up the resultant tree differently.
-
-NETaa15154: MakeMaker-5.18
-From: Andreas Koenig
-Files patched: MANIFEST lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm
- Brought it up to 5.18.
-
-NETaa15156: some Exporter tweaks
-From: Roderick Schertler
-Also: Tim Bunce
-Files patched: lib/Exporter.pm
- Also did Tim's Tiny Trivial patch.
-
-NETaa15157: new version of Test::Harness
-From: Andreas Koenig
-Files patched: lib/Test/Harness.pm
- Applied suggested patch.
-
-NETaa15175: overloaded nomethod has garbage 4th op
-From: Ilya Zakharevich
-Files patched: gv.c
- Applied suggested patch.
-
-NETaa15179: SvPOK_only shouldn't back off on offset pointer
-From: Gutorm.Hogasen@oslo.teamco.telenor.no
-Files patched: sv.h
- SvPOK_only() was calling SvOOK_off(), which adjusted the string pointer
- after tr/// has already acquired it. It shouldn't really be necessary
- for SvPOK_only() to undo an offset string pointer, since there's no
- conflict with a possible integer value where the offset is stored.
-
-NETaa15193: & now always bypasses prototype checking
-From: Larry Wall
-Files patched: dump.c op.c op.h perly.c perly.c.diff perly.y pod/perlsub.pod pp_hot.c proto.h toke.c vms/perly_c.vms vms/perly_h.vms
- Turned out to be a big hairy deal because the lexer turns foo() into &foo().
- But it works consistently now. Also fixed pod.
-
-NETaa15197: 5.002b2 is 'appending' to $@
-From: Gurusamy Sarathy
-Files patched: pp_ctl.c
- Applied suggested patch.
-
-NETaa15201: working around Linux DBL_DIG problems
-From: Kenneth Albanowski
-Files patched: hints/linux.sh sv.c
- Applied suggested patch.
-
-NETaa15208: SelectSaver
-From: Chip Salzenberg
-Files patched: MANIFEST lib/SelectSaver.pm
- Applied suggested patch.
-
-NETaa15209: DirHandle
-From: Chip Salzenberg
-Files patched: MANIFEST lib/DirHandle.pm t/lib/dirhand.t
-
-NETaa15210: sysopen()
-From: Chip Salzenberg
-Files patched: doio.c keywords.pl lib/ExtUtils/typemap opcode.pl pod/perlfunc.pod pp_hot.c pp_sys.c proto.h toke.c
- Applied suggested patch. Hope it works...
-
-NETaa15211: use mnemonic names in Safe setup
-From: Chip Salzenberg
-Files patched: ext/Safe/Safe.pm
- Applied suggested patch, more or less.
-
-NETaa15214: prototype()
-From: Chip Salzenberg
-Files patched: ext/Safe/Safe.pm global.sym keywords.pl opcode.pl pp.c toke.c
- Applied suggested patch.
-
-NETaa15217: -w problem with -d:foo
-From: Tim Bunce
-Files patched: perl.c
- Applied suggested patch.
-
-NETaa15218: *GLOB{ELEMENT}
-From: Larry Wall
-Files patched: Makefile.SH embed.h ext/Safe/Safe.pm keywords.h opcode.h opcode.h opcode.pl perly.c perly.c.diff perly.y pp_hot.c t/lib/safe.t vms/perly_c.vms
-
-NETaa15219: Make *x=\*y do like *x=*y
-From: Chip Salzenberg
-Files patched: sv.c
- Applied suggested patch.
-
-NETaa15221: Indigestion with Carp::longmess and big eval '...'s
-From: Tim Bunce
-Files patched: lib/Carp.pm
- Applied suggested patch.
-
-NETaa15222: VERSION patch for standard extensions
-From: Paul Marquess
-Files patched: ext/DB_File/Makefile.PL ext/DynaLoader/DynaLoader.pm ext/DynaLoader/Makefile.PL ext/Fcntl/Fcntl.pm ext/Fcntl/Makefile.PL ext/GDBM_File/GDBM_File.pm ext/GDBM_File/Makefile.PL ext/NDBM_File/Makefile.PL ext/NDBM_File/NDBM_File.pm ext/ODBM_File/Makefile.PL ext/ODBM_File/ODBM_File.pm ext/POSIX/Makefile.PL ext/POSIX/POSIX.pm ext/SDBM_File/Makefile.PL ext/SDBM_File/SDBM_File.pm ext/Safe/Makefile.PL ext/Safe/Safe.pm ext/Socket/Makefile.PL
- Applied suggested patch.
-
-NETaa15222: VERSION patch for standard extensions (reprise)
-Files patched: ext/DB_File/DB_File.pm ext/DynaLoader/DynaLoader.pm ext/Fcntl/Fcntl.pm ext/GDBM_File/GDBM_File.pm ext/NDBM_File/NDBM_File.pm ext/ODBM_File/ODBM_File.pm ext/POSIX/POSIX.pm ext/SDBM_File/SDBM_File.pm ext/Safe/Safe.pm ext/Socket/Socket.pm
- (same)
-
-NETaa15227: $i < 10000 should optimize to integer op
-From: Larry Wall
-Files patched: op.c op.c
- The program
-
- for ($i = 0; $i < 100000; $i++) {
- push @foo, $i;
- }
-
- takes about one quarter the memory if the optimizer decides that it can
- use an integer < comparison rather than floating point. It now does so
- if one side is an integer constant and the other side a simple variable.
- This should really help some of our benchmarks. You can still force a
- floating point comparison by using 100000.0 instead.
-
-NETaa15228: CPerl-mode patch
-From: Ilya Zakharevich
-Files patched: emacs/cperl-mode.el
- Applied suggested patch.
-
-NETaa15231: Symbol::qualify()
-From: Chip Salzenberg
-Files patched: ext/FileHandle/FileHandle.pm gv.c lib/SelectSaver.pm lib/Symbol.pm pp_hot.c
- Applied suggested patch.
-
-NETaa15236: select select broke under use strict
-From: Chip Salzenberg
-Files patched: op.c
- Instead of inventing a new bit, I just turned off the HINT_STRICT_REFS bit.
- I don't think it's worthwhile distinguishing between qualified or unqualified
- names to select.
-
-NETaa15237: use vars
-From: Larry Wall
-Files patched: MANIFEST gv.c lib/subs.pm lib/vars.pm sv.c
-
-NETaa15240: keep op names _and_ descriptions
-From: Chip Salzenberg
-Files patched: doio.c embed.h ext/Safe/Safe.pm ext/Safe/Safe.xs global.sym op.c opcode.h opcode.pl scope.c sv.c
- Applied suggested patch.
-
-NETaa15259: study doesn't unset on string modification
-From: Larry Wall
-Files patched: mg.c pp.c
- Piggybacked on m//g unset magic to unset the study too.
-
-NETaa15276: pick a better initial cxstack_max
-From: Chip Salzenberg
-Files patched: perl.c
- Added fudge in, and made it calculate how many it could fit into (most of) 8K,
- to avoid getting 16K of Kingsley malloc.
-
-NETaa15287: numeric comparison optimization adjustments
-From: Clark Cooper
-Files patched: op.c
- Applied patch suggested by Chip, with liberalization to >= and <=.
-
-NETaa15299: couldn't eval string containing pod or __DATA__
-From: Andreas Koenig
-Also: Gisle Aas
-Files patched: toke.c
- Basically, eval didn't know how to bypass pods correctly.
-
-NETaa15300: sv_backoff problems
-From: Paul Marquess
-Also: mtr
-Also: Chip Salzenberg
-Files patched: op.c sv.c sv.h
- Applied suggested patch.
-
-NETaa15312: Avoid fclose(NULL)
-From: Chip Salzenberg
-Files patched: toke.c
- Applied suggested patch.
-
-NETaa15318: didn't set up perl_init_i18nl14n for export
-From: Ilya Zakharevich
-Files patched: perl_exp.SH
- Applied suggested patch.
-
-NETaa15331: File::Path::rmtree followed symlinks
-From: Andreas Koenig
-Files patched: lib/File/Path.pm
- Added suggested patch, except I did
-
- if (not -l $root and -d _) {
-
- for efficiency, since if -d is true, the -l already called lstat on it.
-
-NETaa15339: sv_gets() didn't reset count
-From: alanburlison@unn.unisys.com
-Files patched: sv.c
- Applied suggested patch.
-
-NETaa15341: differentiated importation of different types
-From: Chip Salzenberg
-Files patched: gv.c gv.h op.c perl.c pp.c pp_ctl.c sv.c sv.h toke.c
- Applied suggested patch.
-
-NETaa15342: Consistent handling of e_{fp,tmpname}
-From: Chip Salzenberg
-Files patched: perl.c pp_ctl.c util.c
- Applied suggested patch.
-
-NETaa15344: Safe gets confused about malloc on AIX
-From: Tim Bunce
-Files patched: ext/Safe/Safe.xs
- Applied suggested patch.
-
-NETaa15348: -M upgrade
-From: Tim Bunce
-Files patched: perl.c pod/perlrun.pod
- Applied suggested patch.
-
-NETaa15369: change in split optimization broke scalar context
-From: Ulrich Pfeifer
-Files patched: op.c
- The earlier patch to make the split optimization pay attention to
- OPpASSIGN_COMMON rearranged how the syntax tree is constructed, but kept
- the wrong context flags. This causes pp_split() do do the wrong thing.
-
-NETaa15423: can't do subversion numbering because of %5.3f assumptions
-From: Andy Dougherty
-Files patched: configpm patchlevel.h perl.c perl.h pp_ctl.c
- Removed the %5.3f assumptions where appropriate. patchlevel.h now
- defines SUBVERSION, which if greater than 0 indicates a development version.
-
-NETaa15424: Sigsetjmp patch
-From: Kenneth Albanowski
-Files patched: Configure config_h.SH op.c perl.c perl.h pp_ctl.c util.c
- Applied suggested patch.
-
-Needed to make install paths absolute.
-Files patched: installperl
-
-h2xs 1.14
-Files patched: utils/h2xs.PL
-
-makedir() looped on a symlink to a directory.
-Files patched: installperl
-
-xsubpp 1.932
-Files patched: lib/ExtUtils/xsubpp
-
-----------------------------------------------------------------
-Summary of user-visible Configure and build changes since 5.001:
-----------------------------------------------------------------
-
-Yet more enhancements and fixes have been made to the Configure and
-build process for perl. Most of these will not be visible to the
-ordinary user--they just make the process more robust and likely to
-work on a wider range of platforms.
-
-This is a brief summary of the most important changes. A more
-detailed description is given below.
-
- Slightly changed installation directories. See INSTALL.
-
- Include 5.000 - 5.001 upgrage notes :-) (see below). You might
- want to read through them as well as these notes.
-
- Install documentation for perl modules and pod2* translators. You can
- now view perl module documentation with either your system's man(1)
- program or with the supplied perldoc script.
-
- Many hint file updates.
-
- Improve and simplify detection of local libraries and header files.
-
- Expand documentation of installation process in new INSTALL file.
-
- Try to reduce Unixisms (such as SH file extraction) to enhance
- portability to other platforms. There's still a long way to go.
-
-Upgrade Traps and Pitfalls:
-
-Since a lot has changed in the build process, you are probably best off
-starting with a fresh copy of the perl5.002 sources. In particular,
-your 5.000 or 5.001 config.sh will contain several variables that are no
-longer needed. Further, improvements in the Configure tests may mean
-that some of the answers will be different than they were in previous
-versions, and which answer to keep can be difficult to sort out.
-Therefore, you are probably better off ignoring your old config.sh, as
-in the following:
-
- make -k distclean # (if you've built perl before)
- rm -f config.sh # (in case distclean mysteriously fails)
- sh Configure [whatever options you like]
- make depend
- make
- make test
-
-This, and much more, is described in the new INSTALL file.
-
-Here are the detailed changes from 5.002beta1 to 5.002b2 in
-reverse chronolgical order:
-
--------------
-Version 5.002beta2
--------------
-
-This is patch.2b2 to perl5.002beta1.
-This takes you from 5.002beta1h to 5.002beta2.
-
-Renaming this as beta2 reflects _my_ feeling that it's time to
-wrap up things for the release of 5.002.
-
-Index: Changes.Conf
-
- Include changes from patches 2b1a .. 2b1h, as well as this
- patch.
-
-Index: Configure
-
- Use nm -D on Linux with shared libraries, if the system
- supports nm -D.
-
-Prereq: 3.0.1.8
-*** perl5.002b1h/Configure Thu Jan 4 11:14:37 1996
---- perl5.002b2/Configure Thu Jan 11 17:09:13 1996
-
-Index: MANIFEST
-
- Include Stub Readline library as part of new debugger.
-
- Include hints file dec_osf for ODBM_File extension.
-
-*** perl5.002b1h/MANIFEST Wed Jan 3 14:37:54 1996
---- perl5.002b2/MANIFEST Sat Jan 13 16:30:43 1996
-
-Index: configpm
-
- Updates from Tim's -m/-M/-V patch.
-
-*** perl5.002b1h/configpm Tue Oct 31 11:51:52 1995
---- perl5.002b2/configpm Fri Jan 12 10:53:34 1996
-
-Index: doop.c
-
- Chip's patch to use STDCHAR and U8 nearly everywhere instead of
- assuming 8-bit chars or ~(char) 0 == 0xff.
-
-*** perl5.002b1h/doop.c Wed Nov 15 15:08:01 1995
---- perl5.002b2/doop.c Fri Jan 12 15:05:04 1996
-
-Index: embed.h
-
- Updates from Tim's -m/-M/-V patch.
-
-*** perl5.002b1h/embed.h Thu Jan 4 13:28:08 1996
---- perl5.002b2/embed.h Fri Jan 12 15:09:11 1996
-
-Index: ext/DB_File/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/DB_File/Makefile.PL Tue Nov 14 14:14:17 1995
---- perl5.002b2/ext/DB_File/Makefile.PL Tue Jan 9 16:54:17 1996
-
-*** perl5.002b1h/ext/DB_File/Makefile.PL Tue Nov 14 14:14:17 1995
---- perl5.002b2/ext/DB_File/Makefile.PL Sat Jan 13 17:07:11 1996
-
-Index: ext/DynaLoader/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/DynaLoader/Makefile.PL Tue Jun 6 12:24:37 1995
---- perl5.002b2/ext/DynaLoader/Makefile.PL Sat Jan 13 17:16:34 1996
-
-Index: ext/Fcntl/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/Fcntl/Makefile.PL Thu Jan 19 18:58:52 1995
---- perl5.002b2/ext/Fcntl/Makefile.PL Sat Jan 13 17:16:38 1996
-
-Index: ext/GDBM_File/GDBM_File.pm
-
- Make the NAME section a legal paragraph.
-
-*** perl5.002b1h/ext/GDBM_File/GDBM_File.pm Mon Nov 20 10:22:26 1995
---- perl5.002b2/ext/GDBM_File/GDBM_File.pm Fri Jan 12 16:11:38 1996
-
-Index: ext/GDBM_File/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/GDBM_File/Makefile.PL Wed Feb 22 14:36:36 1995
---- perl5.002b2/ext/GDBM_File/Makefile.PL Sat Jan 13 17:08:02 1996
-
-Index: ext/NDBM_File/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/NDBM_File/Makefile.PL Wed Feb 22 14:36:39 1995
---- perl5.002b2/ext/NDBM_File/Makefile.PL Sat Jan 13 17:08:13 1996
-
-Index: ext/ODBM_File/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/ODBM_File/Makefile.PL Mon Jun 5 15:03:44 1995
---- perl5.002b2/ext/ODBM_File/Makefile.PL Sat Jan 13 17:08:22 1996
-
-Index: ext/ODBM_File/hints/dec_osf.pl
-
- New file.
-
-*** /dev/null Sat Jan 13 16:48:01 1996
---- perl5.002b2/ext/ODBM_File/hints/dec_osf.pl Sat Jan 13 16:30:01 1996
-
-Index: ext/POSIX/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/POSIX/Makefile.PL Thu Jan 19 18:59:00 1995
---- perl5.002b2/ext/POSIX/Makefile.PL Sat Jan 13 17:08:27 1996
-
-Index: ext/SDBM_File/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/SDBM_File/Makefile.PL Tue Nov 14 11:16:43 1995
---- perl5.002b2/ext/SDBM_File/Makefile.PL Sat Jan 13 17:16:49 1996
-
-Index: ext/SDBM_File/sdbm/sdbm.c
-
- Give correct prototype for free.
-
-Prereq: 1.16
-*** perl5.002b1h/ext/SDBM_File/sdbm/sdbm.c Mon Nov 13 23:01:41 1995
---- perl5.002b2/ext/SDBM_File/sdbm/sdbm.c Fri Jan 12 10:33:32 1996
-
-Index: ext/Safe/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/Safe/Makefile.PL Tue Jan 2 15:43:53 1996
---- perl5.002b2/ext/Safe/Makefile.PL Sat Jan 13 17:08:45 1996
-
-Index: ext/Safe/Safe.pm
-
- Patch from Andreas.
-
-*** perl5.002b1h/ext/Safe/Safe.pm Tue Jan 2 15:45:27 1996
---- perl5.002b2/ext/Safe/Safe.pm Fri Jan 12 10:52:33 1996
-
-Index: ext/Safe/Safe.xs
-
- Patch for older compilers which had namespace confusion.
-
-*** perl5.002b1h/ext/Safe/Safe.xs Tue Jan 2 15:45:27 1996
---- perl5.002b2/ext/Safe/Safe.xs Fri Jan 5 14:27:47 1996
-
-Index: ext/Socket/Makefile.PL
-
- Disable prototypes.
- Disable pod2man.
-
-*** perl5.002b1h/ext/Socket/Makefile.PL Sat Dec 2 16:23:52 1995
---- perl5.002b2/ext/Socket/Makefile.PL Sat Jan 13 17:08:52 1996
-
-Index: ext/Socket/Socket.xs
-
- Use unsigned shorts for ports.
-
-*** perl5.002b1h/ext/Socket/Socket.xs Sat Dec 2 15:46:20 1995
---- perl5.002b2/ext/Socket/Socket.xs Mon Jan 8 21:59:52 1996
-
-Index: global.sym
-
- Updates from Tim's -m/-M/-V patch.
-
-*** perl5.002b1h/global.sym Wed Jan 3 12:01:59 1996
---- perl5.002b2/global.sym Fri Jan 12 10:53:34 1996
-
-Index: gv.c
-
- Avoid VMS sprintf bug with buffers >1024.
-
-*** perl5.002b1h/gv.c Fri Dec 8 10:37:22 1995
---- perl5.002b2/gv.c Fri Jan 12 15:27:27 1996
-
-Index: hints/aix.sh
-
- Updated
-
-*** perl5.002b1h/hints/aix.sh Mon Nov 13 23:03:33 1995
---- perl5.002b2/hints/aix.sh Fri Jan 12 12:09:48 1996
-
-Index: hints/irix_5.sh
-
- Updated
-
-*** perl5.002b1h/hints/irix_5.sh Tue Jan 2 14:53:52 1996
---- perl5.002b2/hints/irix_5.sh Tue Jan 9 16:05:11 1996
-
-Index: hints/linux.sh
-
- Updated
-
-*** perl5.002b1h/hints/linux.sh Fri Jun 2 10:20:55 1995
---- perl5.002b2/hints/linux.sh Fri Jan 12 11:43:52 1996
-
-Index: hints/machten.sh
-
- Updated
-
-*** perl5.002b1h/hints/machten.sh Sun Mar 12 02:36:04 1995
---- perl5.002b2/hints/machten.sh Wed Jan 10 14:53:32 1996
-
-Index: installman
-
- Use File::Path::mkpath instead of our own makedir().
- ./perl installman --man1dir=man1 could lead to infinte recursion
- in old makedir() routine. Use the standard library instead.
-
-*** perl5.002b1h/installman Thu Dec 28 16:06:11 1995
---- perl5.002b2/installman Thu Jan 11 16:12:30 1996
-
-Index: installperl
-
- Use File::Path::mkpath instead of our own makedir().
-
-*** perl5.002b1h/installperl Wed Jan 3 14:33:57 1996
---- perl5.002b2/installperl Thu Jan 11 16:12:16 1996
-
-Index: interp.sym
-
- Updates from Tim's -m/-M/-V patch.
-
-*** perl5.002b1h/interp.sym Fri Nov 10 17:17:32 1995
---- perl5.002b2/interp.sym Fri Jan 12 15:05:04 1996
-
-Index: lib/AutoLoader.pm
-
- Undo Tim's tainting patch from beta1h.
-
-*** perl5.002b1h/lib/AutoLoader.pm Tue Jan 2 16:10:36 1996
---- perl5.002b2/lib/AutoLoader.pm Fri Jan 5 16:02:28 1996
-
-Index: lib/Carp.pm
-*** perl5.002b1h/lib/Carp.pm Tue Jan 2 12:10:38 1996
---- perl5.002b2/lib/Carp.pm Fri Jan 12 11:23:31 1996
-
-Index: lib/ExtUtils/MM_VMS.pm
-
- Updated to MakeMaker-5.16.
-
-*** perl5.002b1h/lib/ExtUtils/MM_VMS.pm Tue Jan 2 14:07:10 1996
---- perl5.002b2/lib/ExtUtils/MM_VMS.pm Thu Jan 4 21:00:46 1996
-
-Index: lib/ExtUtils/MakeMaker.pm
-
- Updated to MakeMaker-5.16.
-
-Prereq: 1.129
-*** perl5.002b1h/lib/ExtUtils/MakeMaker.pm Tue Jan 2 14:07:10 1996
---- perl5.002b2/lib/ExtUtils/MakeMaker.pm Wed Jan 10 16:13:05 1996
-
-Index: lib/File/Find.pm
-
- Fixed exporting of symbols to work.
-
-*** perl5.002b1h/lib/File/Find.pm Wed Nov 15 15:20:03 1995
---- perl5.002b2/lib/File/Find.pm Wed Jan 10 14:46:24 1996
-
-Index: lib/I18N/Collate.pm
-
- Updated documentation to match program.
-
-*** perl5.002b1h/lib/I18N/Collate.pm Fri Jun 2 11:30:49 1995
---- perl5.002b2/lib/I18N/Collate.pm Fri Jan 5 16:05:26 1996
-
-Index: lib/Term/ReadLine.pm
-
- Stub new file to interface to various readline packages, or
- give stub functions if none are found.
-
-*** /dev/null Sat Jan 13 16:48:01 1996
---- perl5.002b2/lib/Term/ReadLine.pm Fri Jan 12 11:23:31 1996
-
-Index: lib/dumpvar.pl
-
- Ilya's new debugger.
-
-*** perl5.002b1h/lib/dumpvar.pl Tue Oct 18 12:36:00 1994
---- perl5.002b2/lib/dumpvar.pl Fri Jan 12 11:23:31 1996
-
-Index: lib/perl5db.pl
-
- Ilya's new debugger.
-
-*** perl5.002b1h/lib/perl5db.pl Tue Jan 2 16:30:33 1996
---- perl5.002b2/lib/perl5db.pl Fri Jan 12 11:23:31 1996
-
-Index: lib/sigtrap.pm
-
- Ilya's new debugger.
-
-*** perl5.002b1h/lib/sigtrap.pm Thu May 25 11:20:13 1995
---- perl5.002b2/lib/sigtrap.pm Fri Jan 12 11:23:31 1996
-
-Index: miniperlmain.c
-
- More robust i18nl14n() function from jhi.
-
-*** perl5.002b1h/miniperlmain.c Thu Jan 4 12:03:37 1996
---- perl5.002b2/miniperlmain.c Mon Jan 8 22:00:19 1996
-
-Index: myconfig
-
- Updates from Tim's -m/-M/-V patch.
-
-*** perl5.002b1h/myconfig Tue Apr 4 12:13:21 1995
---- perl5.002b2/myconfig Fri Jan 12 10:53:35 1996
-
-Index: op.c
-
- Chip's U8/STDCHAR patch.
-
-*** perl5.002b1h/op.c Wed Jan 3 14:17:01 1996
---- perl5.002b2/op.c Fri Jan 12 15:05:05 1996
-
-Index: perl.c
-
- Change Copyright date to include 1996. Hope you don't mind.
-
- Presumptively call this beta2.
-
-*** perl5.002b1h/perl.c Thu Jan 4 15:13:53 1996
---- perl5.002b2/perl.c Fri Jan 12 15:05:05 1996
-
-Index: perl.h
-
- Updates from Tim's -m/-M/-V patch.
-
-*** perl5.002b1h/perl.h Wed Jan 3 12:21:55 1996
---- perl5.002b2/perl.h Fri Jan 12 15:05:04 1996
-
-Index: pod/Makefile
-
- Use PERL=../miniperl
-
-*** perl5.002b1h/pod/Makefile Wed Jan 3 15:06:41 1996
---- perl5.002b2/pod/Makefile Fri Jan 5 14:14:30 1996
-
-Index: pod/perlembed.pod
-
- Give correct usage for the 5th arg to perl_parse (don't pass
- env).
-
-*** perl5.002b1h/pod/perlembed.pod Thu Dec 28 16:34:07 1995
---- perl5.002b2/pod/perlembed.pod Tue Jan 9 16:02:51 1996
-
-Index: pod/perlfunc.pod
-
- Work around a pod2man complaint about the -X function.
-
-*** perl5.002b1h/pod/perlfunc.pod Tue Jan 2 15:39:26 1996
---- perl5.002b2/pod/perlfunc.pod Fri Jan 12 11:04:15 1996
-
-*** perl5.002b1h/pod/perlfunc.pod Tue Jan 2 15:39:26 1996
---- perl5.002b2/pod/perlfunc.pod Fri Jan 12 11:04:15 1996
-
-Index: pod/perlovl.pod
-
- Add DESCRIPTION to head1 line.
-
-*** perl5.002b1h/pod/perlovl.pod Thu Dec 28 16:34:13 1995
---- perl5.002b2/pod/perlovl.pod Thu Jan 11 17:11:16 1996
-
-Index: pod/perlrun.pod
-
- Updates from Tim's -m/-M/-V patch.
-
-*** perl5.002b1h/pod/perlrun.pod Thu Dec 28 16:34:15 1995
---- perl5.002b2/pod/perlrun.pod Fri Jan 12 10:53:35 1996
-
-Index: pp_ctl.c
-
- Debugger patch.
-
-*** perl5.002b1h/pp_ctl.c Wed Jan 3 12:23:13 1996
---- perl5.002b2/pp_ctl.c Fri Jan 12 15:05:05 1996
-
-Index: t/lib/posix.t
-
- Not having POSIX shouldn't result in test failing TEST harness.
-
-*** perl5.002b1h/t/lib/posix.t Mon Jan 16 22:27:33 1995
---- perl5.002b2/t/lib/posix.t Tue Jan 9 15:33:14 1996
-
-Index: t/lib/safe.t
-
- Not having Safe shouldn't result in test failing TEST harness.
-
-*** perl5.002b1h/t/lib/safe.t Tue Jan 2 15:43:53 1996
---- perl5.002b2/t/lib/safe.t Tue Jan 9 15:35:43 1996
-
-Index: t/lib/socket.t
-
- Not having Socket shouldn't result in test failing TEST harness.
-
-*** perl5.002b1h/t/lib/socket.t Fri Dec 8 11:16:01 1995
---- perl5.002b2/t/lib/socket.t Tue Jan 9 15:35:51 1996
-
-Index: t/op/time.t
-
- Test missed year-end wrap-around by one day.
-
-*** perl5.002b1h/t/op/time.t Tue Oct 18 12:46:31 1994
---- perl5.002b2/t/op/time.t Wed Jan 10 16:04:41 1996
-
-Index: toke.c
-
- Chip's U8/STDCHAR patch.
-
- Tim's "add a ; after PERL5DB" patch.
-
-*** perl5.002b1h/toke.c Wed Dec 6 13:24:19 1995
---- perl5.002b2/toke.c Fri Jan 12 15:05:06 1996
-
-Index: utils/h2xs.PL
-
- Updated to 1.13. Include Changes template file.
-
-*** perl5.002b1h/utils/h2xs.PL Tue Jan 2 13:50:55 1996
---- perl5.002b2/utils/h2xs.PL Thu Jan 11 16:59:48 1996
-
-Index: writemain.SH
-
- Updates from Tim's -m/-M/-V patch.
-
-*** perl5.002b1h/writemain.SH Sat Nov 18 15:51:55 1995
---- perl5.002b2/writemain.SH Fri Jan 12 10:53:35 1996
-
--------------
-Version 5.002b1h
--------------
-
-This is patch.2b1h to perl5.002beta1. This is mainly a clean-up
-patch. No progress is made dealing with memory leaks or
-optimizations, though I have used #define STRANGE_MALLOC to
-work around at least some problems.
-
-Index: Configure
-
- Upgraded to metaconfig patchlevel 60.
-
- Add in usesafe variable to include or exclude the Safe extension.
-
- Test for sigaction().
-
- Check for pager. This was actually accidental since perldoc.PL
- mentions $pager and metaconfig has a unit to check for the
- user's pager. In retrospect, I decided the Configure check
- didn't do any harm and some extension writers might decide to
- use it.
-
- Always put man1dir under $prefix unless a command line
- override is used.
-
- Allow command-line overrides of $man1ext and $man3ext.
-
-
- Allow man1dir and man3dir names like .../man.1 instead of
- just .../man1.
-
- Lots of rearrangements of various pieces of Configure.
- This might be because I ran metaconfig on a different
- architecture.
-
- libc searching now honors $libpth. Previously, it (almost)
- always looked in /usr/lib before checking /lib.
-
- Only prompt user if voidflags is not 15. If voidflags is 15, then
- we presume all is well.
-
-
-Prereq: 3.0.1.8
-*** perl5.002b1g/Configure Fri Dec 8 11:23:56 1995
---- perl5.002b1h/Configure Thu Jan 4 11:14:37 1996
-
-Index: INSTALL
-
- Document how to skip various extensions.
-
- Indicate that site_perl is typically under (not beside)
- /usr/local/lib/perl5.
-
- Mention how to avoid nm extraction.
-
-
-*** perl5.002b1g/INSTALL Tue Nov 21 22:54:28 1995
---- perl5.002b1h/INSTALL Thu Jan 4 11:06:28 1996
-
-Index: MANIFEST
-
- Rearrange files some. Try to move .PL utilities to a separate
- utils/ subdirectory.
-
- Merge c2ph.PL and c2ph.doc.
-
- Add the Safe extension.
-
-*** perl5.002b1g/MANIFEST Fri Jan 5 11:41:50 1996
---- perl5.002b1h/MANIFEST Wed Jan 3 14:37:54 1996
-
-Index: Makefile.SH
-
- Now builds .PL utilities in the utils/ subdirectory.
-
-*** perl5.002b1g/Makefile.SH Fri Dec 8 10:36:33 1995
---- perl5.002b1h/Makefile.SH Wed Jan 3 14:28:30 1996
-
-Index: README.vms
-
- Updated.
-
-*** perl5.002b1g/README.vms Wed Nov 15 14:23:10 1995
---- perl5.002b1h/README.vms Tue Jan 2 16:33:02 1996
-
-Index: XSUB.h
-
- Updated to match xsubpp-1.929.
-
-*** perl5.002b1g/XSUB.h Wed Dec 6 13:25:26 1995
---- perl5.002b1h/XSUB.h Tue Jan 2 11:57:57 1996
-
-Index: config_h.SH
-
- Check for HAS_SIGACCTION
-
- Add STARTPERL define for C code (specifically, a2p).
-
-Prereq: 3.0.1.4
-*** perl5.002b1g/config_h.SH Fri Dec 8 11:23:56 1995
---- perl5.002b1h/config_h.SH Thu Jan 4 11:14:37 1996
-
-Index: doio.c
-
- VMS changes for kill.
-
-*** perl5.002b1g/doio.c Wed Nov 15 14:36:12 1995
---- perl5.002b1h/doio.c Tue Jan 2 16:27:07 1996
-
-Index: embed.h
-
- Auto-generated from global.sym and interp.sym.
-
-*** perl5.002b1g/embed.h Wed Nov 15 14:48:47 1995
---- perl5.002b1h/embed.h Thu Jan 4 13:28:08 1996
-
-Index: ext/DynaLoader/DynaLoader.pm
-
- VMS-specific updates.
-
-*** perl5.002b1g/ext/DynaLoader/DynaLoader.pm Fri Nov 10 11:49:00 1995
---- perl5.002b1h/ext/DynaLoader/DynaLoader.pm Tue Jan 2 16:28:02 1996
-
-Index: ext/DynaLoader/dl_vms.xs
-
- Updated to Oct 31, 1995 version.
-
-*** perl5.002b1g/ext/DynaLoader/dl_vms.xs Tue Oct 31 11:06:06 1995
---- perl5.002b1h/ext/DynaLoader/dl_vms.xs Tue Jan 2 16:27:32 1996
-
-Index: global.sym
-
- Added maxo and save_pptr items.
-
-*** perl5.002b1g/global.sym Wed Nov 15 14:58:14 1995
---- perl5.002b1h/global.sym Wed Jan 3 12:01:59 1996
-
-Index: hints/README.hints
-
- List of tested systems updated a little.
-
-*** perl5.002b1g/hints/README.hints Fri May 5 14:12:06 1995
---- perl5.002b1h/hints/README.hints Tue Dec 12 20:03:36 1995
-
-Index: hints/irix_5.sh
-
- Note SGI stdio/malloc related problem.
-
-*** perl5.002b1g/hints/irix_5.sh Fri May 5 14:07:52 1995
---- perl5.002b1h/hints/irix_5.sh Tue Jan 2 14:53:52 1996
-
-Index: hints/irix_6.sh
-
- Address change.
-
- Note SGI stdio/malloc related problem.
-
-*** perl5.002b1g/hints/irix_6.sh Fri May 5 14:08:41 1995
---- perl5.002b1h/hints/irix_6.sh Tue Jan 2 14:54:04 1996
-
-Index: hints/irix_6_2.sh
-
- Address change.
-
-*** perl5.002b1g/hints/irix_6_2.sh Mon Nov 20 11:16:55 1995
---- perl5.002b1h/hints/irix_6_2.sh Tue Jan 2 14:49:45 1996
-
-Index: hints/os2.sh
-
- Updated.
-
-*** perl5.002b1g/hints/os2.sh Tue Nov 14 11:07:33 1995
---- perl5.002b1h/hints/os2.sh Tue Dec 26 17:51:16 1995
-
-Index: installman
-
- Use fork if available.
-
-*** perl5.002b1g/installman Fri Jan 5 11:41:52 1996
---- perl5.002b1h/installman Thu Dec 28 16:06:11 1995
-
-Index: installperl
-
- Use new location of utility scripts.
-
- Eliminate double '//' and extra "".
-
-*** perl5.002b1g/installperl Mon Nov 20 12:55:03 1995
---- perl5.002b1h/installperl Wed Jan 3 14:33:57 1996
-
-Index: lib/AutoLoader.pm
-
- Avoid tainting problems.
-
-*** perl5.002b1g/lib/AutoLoader.pm Wed Nov 15 15:04:59 1995
---- perl5.002b1h/lib/AutoLoader.pm Tue Jan 2 16:10:36 1996
-
-Index: lib/Carp.pm
-
- Honor trailing \n in messages, as is done for warn().
-
-*** perl5.002b1g/lib/Carp.pm Thu May 25 11:16:07 1995
---- perl5.002b1h/lib/Carp.pm Tue Jan 2 12:10:38 1996
-
-Index: lib/Cwd.pm
-
- VMS patches.
-
-*** perl5.002b1g/lib/Cwd.pm Fri Jan 5 11:41:52 1996
---- perl5.002b1h/lib/Cwd.pm Tue Jan 2 16:28:57 1996
-
-Index: lib/Exporter.pm
-
- Include Tim Bunce's enhanced Exporter. I also tried to
- resolve the two copies of documentation that I had.
-
-*** perl5.002b1g/lib/Exporter.pm Fri Jan 5 11:41:52 1996
---- perl5.002b1h/lib/Exporter.pm Thu Jan 4 14:02:08 1996
-
-Index: lib/ExtUtils/MM_VMS.pm
-
- New file. Incorporates VMS-specific items into MakeMaker.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/lib/ExtUtils/MM_VMS.pm Tue Jan 2 14:07:10 1996
-
-Index: lib/ExtUtils/MakeMaker.pm
-Prereq: 1.116
-
- Updated from 5.12 to 5.16.
-
-*** perl5.002b1g/lib/ExtUtils/MakeMaker.pm Fri Jan 5 11:41:53 1996
---- perl5.002b1h/lib/ExtUtils/MakeMaker.pm Tue Jan 2 14:07:10 1996
-
-Index: lib/ExtUtils/Manifest.pm
-
- Updated from MakeMaker 5.12 to 5.16.
-
-*** perl5.002b1g/lib/ExtUtils/Manifest.pm Fri Jan 5 11:41:54 1996
---- perl5.002b1h/lib/ExtUtils/Manifest.pm Tue Jan 2 14:07:10 1996
-
-Index: lib/ExtUtils/Mkbootstrap.pm
-
- Updated from MakeMaker 5.12 to 5.16.
-
-*** perl5.002b1g/lib/ExtUtils/Mkbootstrap.pm Fri Jan 5 11:41:54 1996
---- perl5.002b1h/lib/ExtUtils/Mkbootstrap.pm Tue Jan 2 14:07:10 1996
-
-Index: lib/ExtUtils/xsubpp
-
- Updated from xsubpp-1.924 to 1.929.
-
-*** perl5.002b1g/lib/ExtUtils/xsubpp Sun Nov 26 16:04:50 1995
---- perl5.002b1h/lib/ExtUtils/xsubpp Tue Jan 2 16:29:59 1996
-
-Index: lib/File/Path.pm
-
- VMS-specific changes.
-
-*** perl5.002b1g/lib/File/Path.pm Wed Nov 15 15:20:31 1995
---- perl5.002b1h/lib/File/Path.pm Tue Jan 2 16:30:21 1996
-
-Index: lib/Pod/Text.pm
-
- New file. This was created by Dov (???) and enhanced
- by Kenneth Albanowski, but all based on Tom C.'s pod2text.
- Unfortunately, they used a version of pod2text earlier than
- the one in patch.2b1g. I've tried to straighten this all out.
-
- Equally unfortunately, we've all left Tom as the AUTHOR, even
- though we can't hold him responsible for errors he didn't
- introduce. Oh well.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/lib/Pod/Text.pm Thu Jan 4 14:16:50 1996
-
-Index: lib/Sys/Hostname.pm
-
- VMS-specific changes.
-
-*** perl5.002b1g/lib/Sys/Hostname.pm Fri Jan 5 11:41:55 1996
---- perl5.002b1h/lib/Sys/Hostname.pm Tue Jan 2 16:30:49 1996
-
-Index: lib/diagnostics.pm
-
- A patch from Tim Bunce (?)
-
-*** perl5.002b1g/lib/diagnostics.pm Wed Dec 6 13:58:42 1995
---- perl5.002b1h/lib/diagnostics.pm Tue Jan 2 12:10:37 1996
-
-Index: lib/perl5db.pl
-
- VMS-specific changes.
-
-*** perl5.002b1g/lib/perl5db.pl Wed Nov 15 22:37:45 1995
---- perl5.002b1h/lib/perl5db.pl Tue Jan 2 16:30:33 1996
-
-Index: lib/splain
-
- Fix some old typos.
-
-*** perl5.002b1g/lib/splain Tue Nov 14 16:16:36 1995
---- perl5.002b1h/lib/splain Tue Jan 2 12:10:37 1996
-
-Index: makeaperl.SH
-
- Use the 'new' startperl variable.
-
-*** perl5.002b1g/makeaperl.SH Thu Jun 1 11:20:52 1995
---- perl5.002b1h/makeaperl.SH Tue Jan 2 12:11:28 1996
-
-Index: mg.c
-
- Set up a reliable signal handler, courtesy of Kenneth Albanowski.
- This needs to be documented still. The idea is that even on
- System V systems, you won't have to reset the signal handler as
- the first action inside your signal handler.
-
-*** perl5.002b1g/mg.c Wed Nov 15 15:44:10 1995
---- perl5.002b1h/mg.c Thu Jan 4 13:49:12 1996
-
-Index: minimod.pl
-
- Give a proper NAME description.
-
-*** perl5.002b1g/minimod.pl Sun Nov 26 16:19:55 1995
---- perl5.002b1h/minimod.pl Tue Jan 2 14:30:24 1996
-
-Index: miniperlmain.c
-
- Better locale handling, courtesy of jhi.
-
- Include a proper cast of NULL for non-prototyping compilers.
-
-*** perl5.002b1g/miniperlmain.c Sat Nov 18 15:48:10 1995
---- perl5.002b1h/miniperlmain.c Thu Jan 4 12:03:37 1996
-
-Index: op.c
-
- Turn on USE_OP_MASK by default for the Safe extension. I'll be
- interested in benchmark results with this on and off.
-
-*** perl5.002b1g/op.c Wed Nov 15 22:10:36 1995
---- perl5.002b1h/op.c Wed Jan 3 14:17:01 1996
-
-Index: os2/Makefile.SHs
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/Makefile.SHs Sun Dec 24 13:55:22 1995
-
-Index: os2/README
-
- Updated.
-
-*** perl5.002b1g/os2/README Tue Nov 14 14:42:13 1995
---- perl5.002b1h/os2/README Tue Dec 26 18:31:32 1995
-
-Index: os2/diff.MANIFEST
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/diff.MANIFEST Tue Dec 26 19:54:12 1995
-
-Index: os2/diff.Makefile
-
- Updated
-
-*** perl5.002b1g/os2/diff.Makefile Tue Nov 14 11:09:29 1995
---- perl5.002b1h/os2/diff.Makefile Fri Dec 8 00:09:56 1995
-
-Index: os2/diff.c2ph
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/diff.c2ph Thu Dec 7 15:25:52 1995
-
-Index: os2/diff.configure
-
- Updated.
-
-*** perl5.002b1g/os2/diff.configure Sun Nov 12 01:31:34 1995
---- perl5.002b1h/os2/diff.configure Tue Dec 26 19:57:08 1995
-
-Index: os2/diff.db_file
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/diff.db_file Tue Dec 19 02:14:54 1995
-
-Index: os2/diff.init
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/diff.init Sun Nov 26 15:05:48 1995
-
-Index: os2/diff.installman
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/diff.installman Wed Nov 22 03:50:26 1995
-
-Index: os2/diff.installperl
-
- Updated.
-
-*** perl5.002b1g/os2/diff.installperl Tue Nov 14 11:09:28 1995
---- perl5.002b1h/os2/diff.installperl Wed Nov 22 02:59:58 1995
-
-Index: os2/diff.mkdep
-
- Updated.
-
-*** perl5.002b1g/os2/diff.mkdep Tue Nov 14 11:09:28 1995
---- perl5.002b1h/os2/diff.mkdep Sun Nov 26 15:00:24 1995
-
-Index: os2/diff.rest
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/diff.rest Thu Dec 7 16:03:26 1995
-
-Index: os2/diff.x2pMakefile
-
- Updated.
-
-*** perl5.002b1g/os2/diff.x2pMakefile Tue Nov 14 11:09:29 1995
---- perl5.002b1h/os2/diff.x2pMakefile Wed Nov 22 21:55:42 1995
-
-Index: os2/notes
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/notes Tue Dec 26 19:55:30 1995
-
-Index: os2/os2.c
-
- Updated.
-
-*** perl5.002b1g/os2/os2.c Tue Nov 14 11:07:33 1995
---- perl5.002b1h/os2/os2.c Sun Dec 24 13:43:02 1995
-
-Index: os2/os2ish.h
-
- Updated.
-
-*** perl5.002b1g/os2/os2ish.h Tue Nov 14 11:07:33 1995
---- perl5.002b1h/os2/os2ish.h Mon Dec 18 16:17:38 1995
-
-Index: os2/perl2cmd.pl
-
- New file.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/os2/perl2cmd.pl Tue Dec 19 11:20:42 1995
-
-Index: perl.c
-
- Updated to say beta1h.
-
- Move VMS env code.
-
-*** perl5.002b1g/perl.c Fri Jan 5 11:41:56 1996
---- perl5.002b1h/perl.c Thu Jan 4 15:13:53 1996
-
-Index: perl.h
-
- 5.002beta1 attempted some memory optimizations, but unfortunately
- they can result in a memory leak problem. This can be
- avoided by #define STRANGE_MALLOC. I do that here until
- consensus is reached on a better strategy for handling the
- memory optimizations.
-
- Include maxo for the maximum number of operations (needed
- for the Safe extension).
-
-*** perl5.002b1g/perl.h Wed Nov 15 17:13:16 1995
---- perl5.002b1h/perl.h Wed Jan 3 12:21:55 1996
-
-Index: pod/Makefile
-
- Include -I../lib so that pod2* can find the appropriate libraries.
-
- The pod names are once again sorted.
-
- The PERL line is wrong. It should read
- PERL = ../miniperl
- This file is automatically generated, but I happened to do it on
- a system without miniperl avaialable, so my script fell back on
- the perl default.
-
-*** perl5.002b1g/pod/Makefile Fri Jan 5 11:41:56 1996
---- perl5.002b1h/pod/Makefile Wed Jan 3 15:06:41 1996
-
-Index: pod/perlmod.pod
-
- Mention the Safe extension.
-
-*** perl5.002b1g/pod/perlmod.pod Fri Jan 5 11:41:59 1996
---- perl5.002b1h/pod/perlmod.pod Thu Jan 4 13:52:14 1996
-
-Index: pod/perltoc.pod
-
- Rebuilt using pod/buildtoc and fmt.
-
-*** perl5.002b1g/pod/perltoc.pod Fri Jan 5 11:42:00 1996
---- perl5.002b1h/pod/perltoc.pod Thu Jan 4 14:04:20 1996
-
-Index: pod/pod2text.PL
-*** perl5.002b1g/pod/pod2text.PL Fri Jan 5 11:42:01 1996
---- perl5.002b1h/pod/pod2text.PL Tue Jan 2 14:28:24 1996
-
-Index: pp_sys.c
-
- VMS changes ?
-
-*** perl5.002b1g/pp_sys.c Wed Nov 15 21:51:33 1995
---- perl5.002b1h/pp_sys.c Tue Jan 2 16:32:50 1996
-
-Index: t/lib/safe.t
-
- New test.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/t/lib/safe.t Tue Jan 2 15:43:53 1996
-
-Index: utils/Makefile
-
- New file to build the utilities.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/utils/Makefile Wed Jan 3 14:06:18 1996
-
-Index: utils/c2ph.PL
-
- Ungracefully merge the old c2ph.doc in as an embedded pod.
-
- Delete lots of trailing spaces and tabs that have crept in.
-
-Prereq: 1.7
-*** perl5.002b1g/utils/c2ph.PL Mon Nov 20 12:36:17 1995
---- perl5.002b1h/utils/c2ph.PL Wed Jan 3 14:05:41 1996
-
-Index: utils/h2ph.PL
-
- Add patch for AIX files which sometimes have #include<foo.h>,
- i.e., no spaces after the word 'include'.
-
-*** perl5.002b1g/utils/h2ph.PL Mon Nov 27 10:14:50 1995
---- perl5.002b1h/utils/h2ph.PL Tue Jan 2 16:13:31 1996
-
-Index: utils/h2xs.PL
-
- Add version stuff.
-
- The old version didn't have a number. This one's called 1.12.
-
-*** perl5.002b1g/utils/h2xs.PL Sun Nov 19 22:37:58 1995
---- perl5.002b1h/utils/h2xs.PL Tue Jan 2 13:50:55 1996
-
-Index: utils/perlbug.PL
-
- New utility.
-
-*** /dev/null Fri Jan 5 12:48:01 1996
---- perl5.002b1h/utils/perlbug.PL Sat Nov 18 16:15:13 1995
-
-Index: utils/perldoc.PL
-
- Better error handling.
-
- Updated to use Pod::Text, if available.
-
- More VMS friendly.
-
- New -u option .
-
-*** perl5.002b1g/utils/perldoc.PL Tue Nov 14 14:57:57 1995
---- perl5.002b1h/utils/perldoc.PL Tue Jan 2 14:28:08 1996
-
-Index: utils/pl2pm.PL
-
- Changed into a .PL extract file for proper setting of
- $startperl.
-
- Add _minimal_ pod documentation.
-
-*** perl5.002b1g/utils/pl2pm.PL Mon Jan 16 23:45:07 1995
---- perl5.002b1h/utils/pl2pm.PL Wed Jan 3 14:14:57 1996
-
-Index: vms/Makefile
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/Makefile Wed Nov 15 22:05:15 1995
---- perl5.002b1h/vms/Makefile Tue Jan 2 16:33:53 1996
-
-Index: vms/config.vms
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/config.vms Wed Nov 15 22:05:26 1995
---- perl5.002b1h/vms/config.vms Tue Jan 2 16:33:09 1996
-
-Index: vms/descrip.mms
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/descrip.mms Wed Nov 15 22:05:38 1995
---- perl5.002b1h/vms/descrip.mms Tue Jan 2 16:33:18 1996
-
-Index: vms/ext/Filespec.pm
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/ext/Filespec.pm Sun Mar 12 03:14:26 1995
---- perl5.002b1h/vms/ext/Filespec.pm Tue Jan 2 16:33:25 1996
-
-Index: vms/ext/MM_VMS.pm
-
- Updated for VMS. This might be obsolete now that we have
- lib/ExtUtils/MM_VMS.pm.
-
-*** perl5.002b1g/vms/ext/MM_VMS.pm Wed Nov 15 22:05:48 1995
---- perl5.002b1h/vms/ext/MM_VMS.pm Tue Jan 2 16:33:32 1996
-
-Index: vms/gen_shrfls.pl
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/gen_shrfls.pl Wed Nov 15 22:06:27 1995
---- perl5.002b1h/vms/gen_shrfls.pl Tue Jan 2 16:33:47 1996
-
-Index: vms/genconfig.pl
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/genconfig.pl Sun Mar 12 03:14:36 1995
---- perl5.002b1h/vms/genconfig.pl Tue Jan 2 16:33:39 1996
-
-Index: vms/perlvms.pod
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/perlvms.pod Wed Nov 15 22:06:32 1995
---- perl5.002b1h/vms/perlvms.pod Tue Jan 2 16:33:59 1996
-
-Index: vms/test.com
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/test.com Wed Nov 15 22:06:59 1995
---- perl5.002b1h/vms/test.com Tue Jan 2 16:34:07 1996
-
-Index: vms/vms.c
-
- Updated for VMS.
-
-Prereq: 2.2
-*** perl5.002b1g/vms/vms.c Wed Nov 15 22:07:10 1995
---- perl5.002b1h/vms/vms.c Tue Jan 2 16:34:13 1996
-
-Index: vms/vmsish.h
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/vmsish.h Wed Nov 15 22:07:24 1995
---- perl5.002b1h/vms/vmsish.h Tue Jan 2 16:34:20 1996
-
-Index: vms/writemain.pl
-
- Updated for VMS.
-
-*** perl5.002b1g/vms/writemain.pl Mon Mar 6 20:00:18 1995
---- perl5.002b1h/vms/writemain.pl Tue Jan 2 16:34:26 1996
-
-Index: x2p/a2py.c
-
- Use new config_h.SH STARTPERL #define.
-
-*** perl5.002b1g/x2p/a2py.c Tue Mar 7 11:53:10 1995
---- perl5.002b1h/x2p/a2py.c Tue Jan 2 12:11:28 1996
-
-Index: x2p/find2perl.PL
-
- Add missing "" around $Config{startperl}.
-
-*** perl5.002b1g/x2p/find2perl.PL Sun Nov 19 23:11:58 1995
---- perl5.002b1h/x2p/find2perl.PL Tue Jan 2 12:11:27 1996
-
-Index: x2p/s2p.PL
-
- Add missing "" around $Config{startperl}.
-
-*** perl5.002b1g/x2p/s2p.PL Sun Nov 19 23:14:59 1995
---- perl5.002b1h/x2p/s2p.PL Tue Jan 2 12:11:27 1996
-
-
--------------
-Version 5.002b1g
--------------
-
-This is patch.2b1g to perl5.002beta1.
-
-This patch is just my packaging of Tom's documentation patches
-he released as patch.2b1g.
-
-Index: MANIFEST
-*** perl5.002b1f/MANIFEST Fri Dec 8 13:34:53 1995
---- perl5.002b1g/MANIFEST Thu Dec 21 13:00:58 1995
-
-Index: ext/DB_File/DB_File.pm
-*** perl5.002b1f/ext/DB_File/DB_File.pm Tue Nov 14 14:14:25 1995
---- perl5.002b1g/ext/DB_File/DB_File.pm Thu Dec 21 13:00:58 1995
-
-Index: ext/POSIX/POSIX.pm
-*** perl5.002b1f/ext/POSIX/POSIX.pm Fri Dec 8 10:23:54 1995
---- perl5.002b1g/ext/POSIX/POSIX.pm Thu Dec 21 13:00:58 1995
-
-Index: ext/POSIX/POSIX.pod
-*** perl5.002b1f/ext/POSIX/POSIX.pod Fri Dec 8 10:30:40 1995
---- perl5.002b1g/ext/POSIX/POSIX.pod Thu Dec 21 13:00:59 1995
-
-Index: ext/Safe/Makefile.PL
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/ext/Safe/Makefile.PL Thu Dec 21 13:01:00 1995
-
-Index: ext/Safe/Safe.pm
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/ext/Safe/Safe.pm Thu Dec 21 13:01:00 1995
-
-Index: ext/Safe/Safe.xs
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/ext/Safe/Safe.xs Thu Dec 21 13:01:00 1995
-
-Index: ext/Socket/Socket.pm
-*** perl5.002b1f/ext/Socket/Socket.pm Wed Dec 6 13:58:41 1995
---- perl5.002b1g/ext/Socket/Socket.pm Thu Dec 21 13:01:00 1995
-
-Index: installman
-*** perl5.002b1f/installman Mon Nov 6 11:16:43 1995
---- perl5.002b1g/installman Thu Dec 21 13:01:00 1995
-
-Index: lib/AutoSplit.pm
-*** perl5.002b1f/lib/AutoSplit.pm Wed Nov 15 15:06:19 1995
---- perl5.002b1g/lib/AutoSplit.pm Thu Dec 21 13:01:01 1995
-
-Index: lib/Cwd.pm
-*** perl5.002b1f/lib/Cwd.pm Fri Dec 8 10:42:46 1995
---- perl5.002b1g/lib/Cwd.pm Thu Dec 21 13:01:01 1995
-
-Index: lib/Devel/SelfStubber.pm
-*** perl5.002b1f/lib/Devel/SelfStubber.pm Sun Nov 26 16:59:51 1995
---- perl5.002b1g/lib/Devel/SelfStubber.pm Thu Dec 21 13:01:01 1995
-
-Index: lib/Env.pm
-*** perl5.002b1f/lib/Env.pm Tue Oct 18 12:34:43 1994
---- perl5.002b1g/lib/Env.pm Thu Dec 21 13:01:01 1995
-
-Index: lib/Exporter.pm
-*** perl5.002b1f/lib/Exporter.pm Wed Nov 15 15:19:33 1995
---- perl5.002b1g/lib/Exporter.pm Thu Dec 21 13:01:01 1995
-
-Index: lib/ExtUtils/Liblist.pm
-*** perl5.002b1f/lib/ExtUtils/Liblist.pm Tue Dec 5 07:56:53 1995
---- perl5.002b1g/lib/ExtUtils/Liblist.pm Thu Dec 21 13:01:01 1995
-
-Index: lib/ExtUtils/MakeMaker.pm
-Prereq: 1.115
-*** perl5.002b1f/lib/ExtUtils/MakeMaker.pm Tue Dec 5 13:20:56 1995
---- perl5.002b1g/lib/ExtUtils/MakeMaker.pm Thu Dec 21 13:01:02 1995
-
-Index: lib/ExtUtils/Manifest.pm
-*** perl5.002b1f/lib/ExtUtils/Manifest.pm Tue Dec 5 13:21:00 1995
---- perl5.002b1g/lib/ExtUtils/Manifest.pm Thu Dec 21 13:01:02 1995
-
-Index: lib/ExtUtils/Mkbootstrap.pm
-*** perl5.002b1f/lib/ExtUtils/Mkbootstrap.pm Thu Oct 19 05:58:34 1995
---- perl5.002b1g/lib/ExtUtils/Mkbootstrap.pm Thu Dec 21 13:01:02 1995
-
-Index: lib/FileHandle.pm
-*** perl5.002b1f/lib/FileHandle.pm Thu May 25 11:18:20 1995
---- perl5.002b1g/lib/FileHandle.pm Thu Dec 21 13:01:02 1995
-
-Index: lib/IPC/Open2.pm
-*** perl5.002b1f/lib/IPC/Open2.pm Thu May 25 11:31:07 1995
---- perl5.002b1g/lib/IPC/Open2.pm Thu Dec 21 13:01:03 1995
-
-Index: lib/IPC/Open3.pm
-Prereq: 1.1
-*** perl5.002b1f/lib/IPC/Open3.pm Wed Nov 15 15:21:11 1995
---- perl5.002b1g/lib/IPC/Open3.pm Thu Dec 21 13:01:03 1995
-
-Index: lib/SelfLoader.pm
-*** perl5.002b1f/lib/SelfLoader.pm Sun Nov 26 16:59:51 1995
---- perl5.002b1g/lib/SelfLoader.pm Thu Dec 21 13:01:03 1995
-
-Index: lib/Sys/Hostname.pm
-*** perl5.002b1f/lib/Sys/Hostname.pm Tue Oct 18 12:38:25 1994
---- perl5.002b1g/lib/Sys/Hostname.pm Thu Dec 21 13:01:03 1995
-
-Index: lib/Sys/Syslog.pm
-*** perl5.002b1f/lib/Sys/Syslog.pm Wed Dec 6 14:07:54 1995
---- perl5.002b1g/lib/Sys/Syslog.pm Thu Dec 21 13:01:04 1995
-
-Index: lib/Term/Cap.pm
-*** perl5.002b1f/lib/Term/Cap.pm Sun Mar 12 00:14:42 1995
---- perl5.002b1g/lib/Term/Cap.pm Thu Dec 21 13:01:04 1995
-
-Index: lib/Term/Complete.pm
-*** perl5.002b1f/lib/Term/Complete.pm Wed May 24 12:09:48 1995
---- perl5.002b1g/lib/Term/Complete.pm Thu Dec 21 13:01:04 1995
-
-Index: lib/Test/Harness.pm
-*** perl5.002b1f/lib/Test/Harness.pm Mon Nov 13 23:01:40 1995
---- perl5.002b1g/lib/Test/Harness.pm Thu Dec 21 13:01:04 1995
-
-Index: lib/Text/Soundex.pm
-Prereq: 1.2
-*** perl5.002b1f/lib/Text/Soundex.pm Tue Oct 18 12:38:42 1994
---- perl5.002b1g/lib/Text/Soundex.pm Thu Dec 21 13:01:04 1995
-
-Index: lib/Text/Tabs.pm
-*** perl5.002b1f/lib/Text/Tabs.pm Sat Nov 18 16:08:55 1995
---- perl5.002b1g/lib/Text/Tabs.pm Thu Dec 21 13:01:04 1995
-
-Index: lib/Text/Wrap.pm
-*** perl5.002b1f/lib/Text/Wrap.pm Sat Nov 18 16:08:56 1995
---- perl5.002b1g/lib/Text/Wrap.pm Thu Dec 21 13:01:05 1995
-
-Index: lib/TieHash.pm
-*** perl5.002b1f/lib/TieHash.pm Wed Nov 15 15:27:47 1995
---- perl5.002b1g/lib/TieHash.pm Thu Dec 21 13:01:05 1995
-
-Index: lib/Time/Local.pm
-*** perl5.002b1f/lib/Time/Local.pm Tue Oct 18 12:38:47 1994
---- perl5.002b1g/lib/Time/Local.pm Thu Dec 21 13:01:05 1995
-
-Index: lib/less.pm
-*** perl5.002b1f/lib/less.pm Thu May 25 11:19:59 1995
---- perl5.002b1g/lib/less.pm Thu Dec 21 13:01:05 1995
-
-Index: lib/overload.pm
-*** perl5.002b1f/lib/overload.pm Sat Nov 18 16:03:33 1995
---- perl5.002b1g/lib/overload.pm Thu Dec 21 13:01:05 1995
-
-Index: lib/strict.pm
-*** perl5.002b1f/lib/strict.pm Thu May 25 11:20:27 1995
---- perl5.002b1g/lib/strict.pm Thu Dec 21 13:01:05 1995
-
-Index: lib/syslog.pl
-*** perl5.002b1f/lib/syslog.pl Tue Oct 18 12:37:13 1994
---- perl5.002b1g/lib/syslog.pl Thu Dec 21 13:01:05 1995
-
-Index: perl.c
-*** perl5.002b1f/perl.c Sun Nov 19 16:11:29 1995
---- perl5.002b1g/perl.c Thu Dec 21 13:01:06 1995
-
-Index: pod/Makefile
-*** perl5.002b1f/pod/Makefile Mon Nov 20 13:00:50 1995
---- perl5.002b1g/pod/Makefile Thu Dec 21 13:01:06 1995
-
-Index: pod/PerlDoc/Functions.pm
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/pod/PerlDoc/Functions.pm Thu Dec 21 13:01:07 1995
-
-Index: pod/PerlDoc/Functions.pm.POSIX
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/pod/PerlDoc/Functions.pm.POSIX Thu Dec 21 13:01:07 1995
-
-Index: pod/buildtoc
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/pod/buildtoc Thu Dec 21 13:01:07 1995
-
-Index: pod/perl.pod
-*** perl5.002b1f/pod/perl.pod Sat Nov 18 17:23:58 1995
---- perl5.002b1g/pod/perl.pod Thu Dec 21 13:01:07 1995
-
-Index: pod/perlbot.pod
-*** perl5.002b1f/pod/perlbot.pod Fri Nov 10 17:27:33 1995
---- perl5.002b1g/pod/perlbot.pod Thu Dec 21 13:01:07 1995
-
-Index: pod/perldata.pod
-*** perl5.002b1f/pod/perldata.pod Sat Nov 18 17:23:59 1995
---- perl5.002b1g/pod/perldata.pod Thu Dec 21 13:01:07 1995
-
-Index: pod/perldiag.pod
-*** perl5.002b1f/pod/perldiag.pod Sun Nov 19 22:10:58 1995
---- perl5.002b1g/pod/perldiag.pod Thu Dec 21 13:01:08 1995
-
-Index: pod/perldsc.pod
-*** perl5.002b1f/pod/perldsc.pod Sat Nov 18 17:24:22 1995
---- perl5.002b1g/pod/perldsc.pod Thu Dec 21 13:01:08 1995
-
-Index: pod/perlembed.pod
-*** perl5.002b1f/pod/perlembed.pod Tue Oct 18 12:39:24 1994
---- perl5.002b1g/pod/perlembed.pod Thu Dec 21 13:01:09 1995
-
-Index: pod/perlform.pod
-*** perl5.002b1f/pod/perlform.pod Sat Nov 18 17:23:59 1995
---- perl5.002b1g/pod/perlform.pod Thu Dec 21 13:01:09 1995
-
-Index: pod/perlfunc.pod
-*** perl5.002b1f/pod/perlfunc.pod Sat Nov 18 17:24:01 1995
---- perl5.002b1g/pod/perlfunc.pod Thu Dec 21 13:01:09 1995
-
-Index: pod/perlguts.pod
-*** perl5.002b1f/pod/perlguts.pod Tue Oct 31 15:38:18 1995
---- perl5.002b1g/pod/perlguts.pod Thu Dec 21 13:01:10 1995
-
-Index: pod/perlipc.pod
-*** perl5.002b1f/pod/perlipc.pod Sat Nov 18 17:24:02 1995
---- perl5.002b1g/pod/perlipc.pod Thu Dec 21 13:01:11 1995
-
-Index: pod/perllol.pod
-*** perl5.002b1f/pod/perllol.pod Sat Nov 18 17:24:22 1995
---- perl5.002b1g/pod/perllol.pod Thu Dec 21 13:01:11 1995
-
-Index: pod/perlmod.pod
-*** perl5.002b1f/pod/perlmod.pod Sat Nov 18 17:24:03 1995
---- perl5.002b1g/pod/perlmod.pod Thu Dec 21 13:01:11 1995
-
-Index: pod/perlobj.pod
-*** perl5.002b1f/pod/perlobj.pod Sun Mar 12 00:48:38 1995
---- perl5.002b1g/pod/perlobj.pod Thu Dec 21 13:01:11 1995
-
-Index: pod/perlop.pod
-*** perl5.002b1f/pod/perlop.pod Sat Nov 18 17:24:03 1995
---- perl5.002b1g/pod/perlop.pod Thu Dec 21 13:01:12 1995
-
-Index: pod/perlovl.pod
-*** perl5.002b1f/pod/perlovl.pod Mon Jan 23 13:25:35 1995
---- perl5.002b1g/pod/perlovl.pod Thu Dec 21 13:01:12 1995
-
-Index: pod/perlpod.pod
-*** perl5.002b1f/pod/perlpod.pod Sun Nov 19 22:22:59 1995
---- perl5.002b1g/pod/perlpod.pod Thu Dec 21 13:01:12 1995
-
-Index: pod/perlre.pod
-*** perl5.002b1f/pod/perlre.pod Sun Nov 26 16:57:20 1995
---- perl5.002b1g/pod/perlre.pod Thu Dec 21 13:01:12 1995
-
-Index: pod/perlref.pod
-*** perl5.002b1f/pod/perlref.pod Sat Nov 18 17:24:04 1995
---- perl5.002b1g/pod/perlref.pod Thu Dec 21 13:01:12 1995
-
-Index: pod/perlrun.pod
-*** perl5.002b1f/pod/perlrun.pod Wed Feb 22 18:32:59 1995
---- perl5.002b1g/pod/perlrun.pod Thu Dec 21 13:01:12 1995
-
-Index: pod/perlsec.pod
-*** perl5.002b1f/pod/perlsec.pod Wed Feb 22 18:33:02 1995
---- perl5.002b1g/pod/perlsec.pod Thu Dec 21 13:01:12 1995
-
-Index: pod/perlstyle.pod
-*** perl5.002b1f/pod/perlstyle.pod Tue Oct 18 12:40:13 1994
---- perl5.002b1g/pod/perlstyle.pod Thu Dec 21 13:01:13 1995
-
-Index: pod/perlsub.pod
-*** perl5.002b1f/pod/perlsub.pod Sun Mar 12 22:42:58 1995
---- perl5.002b1g/pod/perlsub.pod Thu Dec 21 13:01:13 1995
-
-Index: pod/perlsyn.pod
-*** perl5.002b1f/pod/perlsyn.pod Sat Nov 18 17:24:04 1995
---- perl5.002b1g/pod/perlsyn.pod Thu Dec 21 13:01:14 1995
-
-Index: pod/perltie.pod
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/pod/perltie.pod Thu Dec 21 13:01:14 1995
-
-Index: pod/perltoc.pod
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/pod/perltoc.pod Thu Dec 21 13:01:14 1995
-
-Index: pod/perltrap.pod
-*** perl5.002b1f/pod/perltrap.pod Wed Nov 15 21:36:11 1995
---- perl5.002b1g/pod/perltrap.pod Thu Dec 21 13:01:14 1995
-
-Index: pod/perlvar.pod
-*** perl5.002b1f/pod/perlvar.pod Wed Nov 15 21:36:59 1995
---- perl5.002b1g/pod/perlvar.pod Thu Dec 21 13:01:15 1995
-
-Index: pod/perlxs.pod
-*** perl5.002b1f/pod/perlxs.pod Sun Nov 19 22:12:44 1995
---- perl5.002b1g/pod/perlxs.pod Thu Dec 21 13:01:15 1995
-
-Index: pod/perlxstut.pod
-*** perl5.002b1f/pod/perlxstut.pod Mon Nov 20 13:02:12 1995
---- perl5.002b1g/pod/perlxstut.pod Thu Dec 21 13:01:15 1995
-
-Index: pod/pod2man.PL
-Prereq: 1.5
-*** perl5.002b1f/pod/pod2man.PL Wed Nov 15 22:32:51 1995
---- perl5.002b1g/pod/pod2man.PL Thu Dec 21 13:01:15 1995
-
-Index: pod/pod2text
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/pod/pod2text Thu Dec 21 13:01:16 1995
-
-Index: pod/roffitall
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/pod/roffitall Thu Dec 21 13:01:16 1995
-
-Index: pod/splitpod
-*** /dev/null Wed Jan 3 14:35:56 1996
---- perl5.002b1g/pod/splitpod Thu Dec 21 13:01:16 1995
-
--------------
-Version 5.002b1f
--------------
-
-This is patch.2b1f to perl5.002beta1.
-
-Index: Changes.Conf
-
-Include 5.001m -> 5.002beta1 changes.
-
-*** perl5.002b1e/Changes.Conf Mon Nov 20 10:08:05 1995
---- perl5.002b1f/Changes.Conf Wed Dec 6 15:29:48 1995
-
-Index: Configure
-
- Include Jeff Okamoto's patch to allow arbitrary specification
- of $startperl.
-
- As requested, I have moved site_perl to be under
- $privlib, by default. The default will now be
- /usr/local/lib/perl5/site_perl. This is in accord with the way
- emacs used to do it :-).
-
-
-Prereq: 3.0.1.8
-*** perl5.002b1e/Configure Fri Dec 8 14:55:26 1995
---- perl5.002b1f/Configure Fri Dec 8 11:23:56 1995
-
-Index: MANIFEST
- Add in POSIX.pod. I didn't include Dean's mkposixman tool because
- it seemed to confuse MakeMaker, and I didn't want to manually fix
- the POSIX/Makefile.PL file today.
-
- Renamed minimod.PL. The idea is as follows: I'd like to reserve
- the .PL suffix for files that are extracted during build time, and
- then can be deleted after installation. That is, it will be
- analogous to the .SH suffix. For example, h2xs.PL creates
- h2xs, and a 'make realclean' will remove the h2xs. Minimod.PL
- was an exception to this pattern. Eventually, the .PL dependencies
- will be generated automatically, just as the .SH dependencies are
- now.
-
- Add in socket test.
-
-*** perl5.002b1e/MANIFEST Fri Dec 8 14:55:27 1995
---- perl5.002b1f/MANIFEST Fri Dec 8 13:34:53 1995
-
-Index: Makefile.SH
-
- Renamed minimod.PL to minimod.pl
-
-*** perl5.002b1e/Makefile.SH Mon Nov 20 15:56:12 1995
---- perl5.002b1f/Makefile.SH Fri Dec 8 10:36:33 1995
-
-Index: XSUB.h
-
- Include (SV*) cast in the newXSproto #define.
-
-*** perl5.002b1e/XSUB.h Fri Dec 8 14:55:14 1995
---- perl5.002b1f/XSUB.h Wed Dec 6 13:25:26 1995
-
-Index: ext/POSIX/POSIX.pm
-
- I have included Dean's patch and the .pod generated by mkposixman.
-
-*** perl5.002b1e/ext/POSIX/POSIX.pm Wed Nov 15 14:54:09 1995
---- perl5.002b1f/ext/POSIX/POSIX.pm Fri Dec 8 10:23:54 1995
-
-Index: ext/POSIX/POSIX.pod
-
- I have included Dean's patch and the .pod generated by mkposixman.
-
-*** /dev/null Fri Dec 8 13:36:14 1995
---- perl5.002b1f/ext/POSIX/POSIX.pod Fri Dec 8 10:30:40 1995
-
-Index: ext/POSIX/POSIX.xs
-
- I have included Dean's patch and the .pod generated by mkposixman.
-
-*** perl5.002b1e/ext/POSIX/POSIX.xs Wed Nov 15 14:56:22 1995
---- perl5.002b1f/ext/POSIX/POSIX.xs Fri Dec 8 10:23:54 1995
-
-Index: ext/Socket/Socket.pm
-
- Replace errant sockaddr_in by correct sockaddr_un.
- Remove an extra ')'. -- from Tom C.
-
-*** perl5.002b1e/ext/Socket/Socket.pm Fri Dec 8 14:55:28 1995
---- perl5.002b1f/ext/Socket/Socket.pm Wed Dec 6 13:58:41 1995
-
-Index: gv.c
-
- Fix from Nick Ing-Simmons to get HvNAME(stash) from caller's
- package.
-
-*** perl5.002b1e/gv.c Wed Nov 15 14:58:39 1995
---- perl5.002b1f/gv.c Fri Dec 8 10:37:22 1995
-
-Index: lib/Cwd.pm
-
- Fix a long-standing problem where insufficient permissions higher
- up in the directory tree caused getcwd to fail. This often showed
- up on AFS.
-
-*** perl5.002b1e/lib/Cwd.pm Mon Nov 13 23:01:38 1995
---- perl5.002b1f/lib/Cwd.pm Fri Dec 8 10:42:46 1995
-
-Index: lib/Sys/Syslog.pm
-
- Modernize Syslog.pm to 'use Socket;' and 'use Sys::Hostname'.
- Alas, I've lost the attribution for this patch. Sorry about
- that.
-
-*** perl5.002b1e/lib/Sys/Syslog.pm Thu Feb 9 20:05:36 1995
---- perl5.002b1f/lib/Sys/Syslog.pm Wed Dec 6 14:07:54 1995
-
-Index: lib/diagnostics.pm
-
- Fixes from Tom.
-
-*** perl5.002b1e/lib/diagnostics.pm Tue Nov 14 16:16:36 1995
---- perl5.002b1f/lib/diagnostics.pm Wed Dec 6 13:58:42 1995
-
-Index: t/lib/socket.t
-
- New test from Tom. I've allowed it to fail if the echo service is
- disabled, as is apparently the case on some systems.
-
-*** /dev/null Fri Dec 8 13:36:14 1995
---- perl5.002b1f/t/lib/socket.t Fri Dec 8 11:16:01 1995
-
-Index: toke.c
-
- A patch from Paul Marquess "purely for source filters".
-
-*** perl5.002b1e/toke.c Wed Nov 15 22:08:23 1995
---- perl5.002b1f/toke.c Wed Dec 6 13:24:19 1995
-
--------------
-Version 5.002b1e
--------------
-
-This is patch.2b1e to perl5.002beta1. This is simply
-an upgrade from MakeMaker-5.10 to MakeMaker-5.11.
-
-
-Index: lib/ExtUtils/Liblist.pm
-*** perl5.002b1d/lib/ExtUtils/Liblist.pm Sat Dec 2 16:50:47 1995
---- perl5.002b1e/lib/ExtUtils/Liblist.pm Wed Dec 6 11:52:22 1995
-
-Index: lib/ExtUtils/MakeMaker.pm
-Prereq: 1.114
-*** perl5.002b1d/lib/ExtUtils/MakeMaker.pm Sat Dec 2 16:50:48 1995
---- perl5.002b1e/lib/ExtUtils/MakeMaker.pm Wed Dec 6 11:52:22 1995
-
-Index: lib/ExtUtils/Manifest.pm
-*** perl5.002b1d/lib/ExtUtils/Manifest.pm Sat Dec 2 16:50:48 1995
---- perl5.002b1e/lib/ExtUtils/Manifest.pm Wed Dec 6 11:52:22 1995
-
--------------
-Version 5.002b1d
--------------
-
-This is patch.2b1d to perl5.002beta1.
-
-This patch includes patches for the following items:
-
- NETaa14710: Included bsdi_bsdos.sh hint file.
-
- pod/perlre.pod: Mention 32bit limit.
-
- Configure Updates.
-
- Update Socket.xs to version 1.5. This handles
- systems that might not have <sys/un.h>.
-
- Fix missing quotes in h2ph.PL
-
-These are each described in detail below, after the corresponding
-index line.
-
-Index: Configure
-
- locincpth should now work as documented in INSTALL
-
- Improved guessing of man1dir
-
- Remove spurious semicolon in NONBLOCK testing.
-
- Send failed './loc' message to fd 4.
-
- Check for <sys/un.h>
-
- Allow 'unixisms' to be overridden by hint files.
-
- Remove -r test from './loc' since some executables are
- not readable.
-
- Remove spurious doublings of -L/usr/local/lib when reusing old
- config.sh.
-
- Improved domain name guessing, from
- Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
-
- Include sitelib (architecture-independent directory).
-
-
-Prereq: 3.0.1.8
-*** perl5.002b1c/Configure Mon Nov 20 10:00:33 1995
---- perl5.002b1d/Configure Sat Dec 2 15:35:13 1995
-
-Index: INSTALL
-
- Consistently use "sh Configure" in examples.
-
- Add reminder that interactive use may be helpful.
-
-*** perl5.002b1c/INSTALL Mon Nov 20 10:46:48 1995
---- perl5.002b1d/INSTALL Tue Nov 21 22:54:28 1995
-
-Index: MANIFEST
-
- Include renamed hint file.
-
-*** perl5.002b1c/MANIFEST Sat Dec 2 16:20:21 1995
---- perl5.002b1d/MANIFEST Sun Nov 26 17:03:31 1995
-
-Index: config_h.SH
-
- Include check for <sys/un.h>.
-
- Include SITELIB_EXP definition for architecture-independent
- site-specific modules. Usually, this will be
- /usr/local/lib/site_perl.
-
-Prereq: 3.0.1.4
-*** perl5.002b1c/config_h.SH Mon Nov 20 10:00:33 1995
---- perl5.002b1d/config_h.SH Sat Dec 2 15:35:13 1995
-
-Index: ext/Socket/Makefile.PL
-
- Update version number to 1.5.
-
-*** perl5.002b1c/ext/Socket/Makefile.PL Sat Nov 18 15:36:56 1995
---- perl5.002b1d/ext/Socket/Makefile.PL Sat Dec 2 16:23:52 1995
-
-Index: ext/Socket/Socket.pm
-
- Update to version 1.5.
-
-*** perl5.002b1c/ext/Socket/Socket.pm Sat Nov 18 15:37:03 1995
---- perl5.002b1d/ext/Socket/Socket.pm Sat Dec 2 16:25:17 1995
-
-Index: ext/Socket/Socket.xs
-
- Update to version 1.5.
- This only supports the sockaddr_un -related functions if your
- system has <sys/un.h>. SVR3 systems generally don't.
-
-*** perl5.002b1c/ext/Socket/Socket.xs Sat Nov 18 15:36:57 1995
---- perl5.002b1d/ext/Socket/Socket.xs Sat Dec 2 15:46:20 1995
-
-Index: h2ph.PL
-
- Add missing quotes.
-
-*** perl5.002b1c/h2ph.PL Sun Nov 19 23:00:39 1995
---- perl5.002b1d/h2ph.PL Mon Nov 27 10:14:50 1995
-
-Index: hints/bsdi_bsdos.sh
-
- Updated and renamed file.
-
-*** perl5.002b1c/hints/bsdi_bsdos.sh Thu Jan 19 19:08:34 1995
---- perl5.002b1d/hints/bsdi_bsdos.sh Sun Nov 26 16:50:26 1995
-
-Index: pod/perlre.pod
-
- Mention 65536 limit explicitly.
-
-*** perl5.002b1c/pod/perlre.pod Wed Nov 15 21:35:31 1995
---- perl5.002b1d/pod/perlre.pod Sun Nov 26 16:57:20 1995
-
--------------
-Version 5.002b1c
--------------
-
-This is patch.2b1c to perl5.002beta1. This patch includes
- lib/SelfLoader, version 1.06, and
- lib/Devel/SelfStubber, version 1.01.
-These versions include prototype support.
-
-This is simply re-posting these library modules.
-I have also updated MANIFEST to include them.
-
-
-Index: MANIFEST
-*** perl5.002b1b/MANIFEST Sat Dec 2 16:13:24 1995
---- perl5.002b1c/MANIFEST Sat Dec 2 16:12:54 1995
-
-Index: lib/Devel/SelfStubber.pm
-*** /dev/null Fri Dec 1 16:03:22 1995
---- perl5.002b1c/lib/Devel/SelfStubber.pm Sun Nov 26 16:14:19 1995
-
-Index: lib/SelfLoader.pm
-*** /dev/null Fri Dec 1 16:03:22 1995
---- perl5.002b1c/lib/SelfLoader.pm Sun Nov 26 16:14:50 1995
-
--------------
-Version 5.002b1b
--------------
-
-This is patch.2b1b to perl5.002beta1. This is simply
-MakeMaker-5.10. Nothing else is included.
-
-It contains:
-
-Upgrade to MakeMaker-5.10
-and a revised minimod.PL that now writes a pod section into ExtUtils::Miniperl.
-
-Index: lib/ExtUtils/Liblist.pm
-*** perl5.002b1a/lib/ExtUtils/Liblist.pm Mon Nov 13 22:03:29 1995
---- perl5.002b1b/lib/ExtUtils/Liblist.pm Sat Dec 2 15:58:00 1995
-
-Index: lib/ExtUtils/MakeMaker.pm
-*** perl5.002b1a/lib/ExtUtils/MakeMaker.pm Sat Nov 18 16:01:05 1995
---- perl5.002b1b/lib/ExtUtils/MakeMaker.pm Sat Dec 2 15:58:01 1995
-
-Index: lib/ExtUtils/Manifest.pm
-*** perl5.002b1a/lib/ExtUtils/Manifest.pm Mon Nov 13 22:03:30 1995
---- perl5.002b1b/lib/ExtUtils/Manifest.pm Sat Dec 2 15:58:02 1995
-
-Index: minimod.PL
-*** perl5.002b1a/minimod.PL Sun Nov 19 23:01:02 1995
---- perl5.002b1b/minimod.PL Sat Dec 2 15:58:02 1995
-
--------------
-Version 5.002b1a
--------------
-
-This is patch.2b1a to perl5.002beta1. This is simply
-xsubpp-1.944. It includes perl prototype support.
-
-Index: XSUB.h
-
-Updated to match xsubpp-1.944. Includes perl prototype support.
-
-*** perl5.002beta1/XSUB.h Fri Nov 10 13:11:02 1995
---- perl5.002b1a/XSUB.h Sat Dec 2 15:43:54 1995
-
-Index: lib/ExtUtils/xsubpp
-
-Updated to xsubpp-1.944. Includes perl prototype support.
-
-*** perl5.002beta1/lib/ExtUtils/xsubpp Mon Nov 20 11:03:49 1995
---- perl5.002b1a/lib/ExtUtils/xsubpp Sat Dec 2 15:43:55 1995
-
-
-
-Here are the detailed changes from 5.001m to 5.002beta1:
-
-# rm -f Doc/perl5-notes # Obsolete
-# rm -f c2ph.SH # Replaced by c2ph.PL
-# rm -f emacs/cperl-mode # Obsolete
-# rm -f emacs/emacs19 # Obsolete
-# rm -f emacs/perl-mode.el # Obsolete
-# rm -f emacs/perldb.el # Obsolete
-# rm -f emacs/perldb.pl # Obsolete
-# rm -f emacs/tedstuff # Obsolete
-# rm -f h2ph.SH # Replaced by h2ph.PL
-# rm -f h2xs.SH # Replaced by h2xs.PL
-# rm -f hints/hpux_9.sh # Replaced by generic hpux.sh
-# rm -f hints/sco_3.sh # Replaced by generic sco.sh
-# rm -f perldoc.SH # Replaced by perldoc.PL
-# rm -f pod/pod2html.SH # Replaced by pod2html.PL
-# rm -f pod/pod2latex.SH # Replaced by pod2latex.PL
-# rm -f pod/pod2man.SH # Replaced by pod2man.PL
-# rm -f x2p/find2perl.SH # Replaced by find2perl.PL
-# rm -f x2p/s2p.SH # Replaced by s2p.PL
-# exit
-
-
-Index: patchlevel.h
-Incremented to 2!
-*** perl5.001.lwall/patchlevel.h Sun Mar 12 22:29:12 1995
---- perl5.002beta1/patchlevel.h Sat Nov 18 15:41:15 1995
-
-Index: Changes
-This includes the Changes file Larry sent me. I added the first
-paragraph.
-*** perl5.001.lwall/Changes Mon Mar 13 00:44:07 1995
---- perl5.002beta1/Changes Sat Nov 18 15:43:29 1995
-
-Index: Changes.Conf
-An all too brief summary.
-*** perl5.001.lwall/Changes.Conf Thu Oct 19 21:00:06 1995
---- perl5.002beta1/Changes.Conf Mon Nov 20 10:08:05 1995
-
-Index: Configure
-
-Upgraded to metaconfig PL60 (despite the erroneous metaconfig message.
-
-Layed some groundwork for support on non Unix systems, such as OS/2.
-Define things such as .o vs. .obj, '' vs. .exe, .a vs. .lib, etc.
-
-Include I_LOCALE testing.
-
-Include checks for new library set-up. I don't want to ever have to
-change this again. It's documented more clearly in INSTALL.
-
-Figure out correct string for $startperl (usually
-#!/usr/local/bin/perl).
-
-Improve signal detection even more. Once again, the signal number
-corresponding to sig_name[n] is n (up to NSIG-1). Gaps in signal
-numbers (e.g. on Solaris) are allowed and are filled with
-innocuous names such as NUM37 NUM38, etc., where the 37 or 38
-represents the actual signal number.
-
-Prereq: 3.0.1.8
-*** perl5.001.lwall/Configure Mon Oct 23 14:08:59 1995
---- perl5.002beta1/Configure Mon Nov 20 10:00:33 1995
-
-Index: INSTALL
-
-Explain the library directory structure.
-
-Remove some tailing whitespace.
-
-Indicate that only the interfaces to gdbm and db are provided, not
-the libraries themselves.
-
-Add section on upgrading from previous versions of perl5.00x.
-
-Mention how to override old config.sh with Configure -D and -O.
-
-*** perl5.001.lwall/INSTALL Mon Oct 23 14:10:26 1995
---- perl5.002beta1/INSTALL Mon Nov 20 10:46:48 1995
-
-Index: MANIFEST
-
-In an attempt to make the distribution slightly less Unix specific,
-I've changed .SH extraction to a .PL extraction where possible.
-That way folks on systems without a shell can still get the
-auxilliarly files such as find2perl (assuming they *can* build
-perl).
-
-The emacs/ directory was hopelessly out of date. I don't use emacs,
-but included a current cperl-mode.el
-
-*** perl5.001.lwall/MANIFEST Tue Nov 14 15:21:03 1995
---- perl5.002beta1/MANIFEST Mon Nov 20 12:40:41 1995
-
-Index: Makefile.SH
-
-Add variables for non unix systems.
-
-Add .PL file extraction logic.
-
-*** perl5.001.lwall/Makefile.SH Tue Nov 14 20:25:48 1995
---- perl5.002beta1/Makefile.SH Mon Nov 20 15:56:12 1995
-
-Index: XSUB.h
-
-Protect arguments of macros with ().
-
-*** perl5.001.lwall/XSUB.h Tue Mar 7 14:10:00 1995
---- perl5.002beta1/XSUB.h Fri Nov 10 13:11:02 1995
-
-Index: c2ph.PL
-Replaces c2ph.SH.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/c2ph.PL Mon Nov 20 12:36:17 1995
-
-Index: cflags.SH
-Allow for .o or .obj in file names.
-*** perl5.001.lwall/cflags.SH Thu Jan 19 19:06:13 1995
---- perl5.002beta1/cflags.SH Tue Nov 14 15:18:41 1995
-
-Index: config_H
-Updated.
-Prereq: 3.0.1.3
-*** perl5.001.lwall/config_H Thu Oct 19 21:01:14 1995
---- perl5.002beta1/config_H Mon Nov 20 15:41:49 1995
-
-Index: config_h.SH
-Updated to match new Configure.
-Prereq: 3.0.1.3
-*** perl5.001.lwall/config_h.SH Mon Oct 23 14:10:38 1995
---- perl5.002beta1/config_h.SH Mon Nov 20 10:00:33 1995
-
-Index: configpm
-Add in routine to print out full config.sh file.
-*** perl5.001.lwall/configpm Wed Jun 7 19:46:01 1995
---- perl5.002beta1/configpm Tue Oct 31 11:51:52 1995
-
-Index: doop.c
-Check for sprintf memory overflow that can arise from things
-like %999999s.
-
-*** perl5.001.lwall/doop.c Sun Jul 2 23:33:44 1995
---- perl5.002beta1/doop.c Wed Nov 15 15:08:01 1995
-
-Index: emacs/cperl-mode.el
-New version.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/emacs/cperl-mode.el Sat Nov 11 16:29:33 1995
-
-Index: embed.h
-Remove unnecessary whichsigname introduced in patch.1n.
-*** perl5.001.lwall/embed.h Tue Nov 14 15:21:08 1995
---- perl5.002beta1/embed.h Wed Nov 15 14:48:47 1995
-
-Index: ext/DB_File/DB_File.pm
-Updated to version 1.01.
-*** perl5.001.lwall/ext/DB_File/DB_File.pm Wed Jun 7 19:46:14 1995
---- perl5.002beta1/ext/DB_File/DB_File.pm Tue Nov 14 14:14:25 1995
-
-Index: ext/DB_File/DB_File.xs
-Updated to version 1.01.
-*** perl5.001.lwall/ext/DB_File/DB_File.xs Wed Jun 7 19:46:17 1995
---- perl5.002beta1/ext/DB_File/DB_File.xs Tue Nov 14 14:14:37 1995
-
-Index: ext/DB_File/Makefile.PL
-Updated to version 1.01.
-*** perl5.001.lwall/ext/DB_File/Makefile.PL Wed Feb 22 14:36:32 1995
---- perl5.002beta1/ext/DB_File/Makefile.PL Tue Nov 14 14:14:17 1995
-
-Index: ext/DB_File/typemap
-Fix typemap to avoid core dump.
-*** perl5.001.lwall/ext/DB_File/typemap Tue Oct 18 12:27:52 1994
---- perl5.002beta1/ext/DB_File/typemap Tue Oct 31 11:53:28 1995
-
-Index: ext/DynaLoader/DynaLoader.pm
-Add parentheses to Carp::confess call.
-*** perl5.001.lwall/ext/DynaLoader/DynaLoader.pm Thu Oct 19 20:13:25 1995
---- perl5.002beta1/ext/DynaLoader/DynaLoader.pm Fri Nov 10 11:49:00 1995
-
-Index: ext/DynaLoader/dl_os2.xs
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/ext/DynaLoader/dl_os2.xs Mon Nov 13 22:58:42 1995
-
-Index: ext/Fcntl/Fcntl.xs
-Add O_BINARY define for OS/2.
-*** perl5.001.lwall/ext/Fcntl/Fcntl.xs Mon Oct 23 14:10:54 1995
---- perl5.002beta1/ext/Fcntl/Fcntl.xs Mon Nov 13 23:01:40 1995
-
-Index: ext/GDBM_File/GDBM_File.pm
-Added a tiny bit of documentation, including how to get gdbm.
-Shamelessly stolen from the DB_File.pm documentation.
-*** perl5.001.lwall/ext/GDBM_File/GDBM_File.pm Wed Jun 7 19:46:34 1995
---- perl5.002beta1/ext/GDBM_File/GDBM_File.pm Mon Nov 20 10:22:26 1995
-
-Index: ext/GDBM_File/GDBM_File.xs
-Add gdbm_EXISTS #define.
-*** perl5.001.lwall/ext/GDBM_File/GDBM_File.xs Sat Jul 1 18:44:02 1995
---- perl5.002beta1/ext/GDBM_File/GDBM_File.xs Sat Nov 11 14:25:50 1995
-
-Index: ext/NDBM_File/hints/solaris.pl
-Updated for MakeMaker 5.0x.
-*** perl5.001.lwall/ext/NDBM_File/hints/solaris.pl Wed Jun 7 19:46:39 1995
---- perl5.002beta1/ext/NDBM_File/hints/solaris.pl Fri Nov 10 10:39:23 1995
-
-Index: ext/ODBM_File/hints/sco.pl
-Updated for MakeMaker 5.0x.
-*** perl5.001.lwall/ext/ODBM_File/hints/sco.pl Wed Jun 7 19:46:44 1995
---- perl5.002beta1/ext/ODBM_File/hints/sco.pl Fri Nov 10 10:39:32 1995
-
-Index: ext/ODBM_File/hints/solaris.pl
-Updated for MakeMaker 5.0x.
-*** perl5.001.lwall/ext/ODBM_File/hints/solaris.pl Wed Jun 7 19:46:46 1995
---- perl5.002beta1/ext/ODBM_File/hints/solaris.pl Fri Nov 10 10:39:44 1995
-
-Index: ext/ODBM_File/hints/svr4.pl
-Updated for MakeMaker 5.0x.
-*** perl5.001.lwall/ext/ODBM_File/hints/svr4.pl Wed Jun 7 19:46:48 1995
---- perl5.002beta1/ext/ODBM_File/hints/svr4.pl Fri Nov 10 10:39:54 1995
-
-Index: ext/POSIX/POSIX.pm
-Remove POSIX_loadlibs relics from perl5alpha days.
-*** perl5.001.lwall/ext/POSIX/POSIX.pm Thu Sep 21 19:14:19 1995
---- perl5.002beta1/ext/POSIX/POSIX.pm Wed Nov 15 14:54:09 1995
-
-Index: ext/POSIX/POSIX.xs
-Change whichsigname(sig) back to sig_name[sig].
-*** perl5.001.lwall/ext/POSIX/POSIX.xs Mon Oct 23 14:11:01 1995
---- perl5.002beta1/ext/POSIX/POSIX.xs Wed Nov 15 14:56:22 1995
-
-Index: ext/SDBM_File/Makefile.PL
-Updated for MakeMaker 5.0x to allow compilation on non-unix systems.
-*** perl5.001.lwall/ext/SDBM_File/Makefile.PL Thu Jan 19 18:59:02 1995
---- perl5.002beta1/ext/SDBM_File/Makefile.PL Tue Nov 14 11:16:43 1995
-
-Index: ext/SDBM_File/sdbm/Makefile.PL
-Updated for MakeMaker 5.0x to allow compilation on non-unix systems.
-*** perl5.001.lwall/ext/SDBM_File/sdbm/Makefile.PL Wed Feb 22 14:36:47 1995
---- perl5.002beta1/ext/SDBM_File/sdbm/Makefile.PL Tue Nov 14 11:17:16 1995
-
-Index: ext/SDBM_File/sdbm/sdbm.c
-Include OS/2 O_BINARY flag.
-Prereq: 1.16
-*** perl5.001.lwall/ext/SDBM_File/sdbm/sdbm.c Wed Jun 7 19:46:57 1995
---- perl5.002beta1/ext/SDBM_File/sdbm/sdbm.c Mon Nov 13 23:01:41 1995
-
-Index: ext/Socket/Makefile.PL
-Updated to 1.3. Actually we're up to 1.4, but I forgot to update
-the Makefile.PL.
-*** perl5.001.lwall/ext/Socket/Makefile.PL Thu Jan 19 18:59:06 1995
---- perl5.002beta1/ext/Socket/Makefile.PL Sat Nov 18 15:36:56 1995
-
-Index: ext/Socket/Socket.pm
-Updated to 1.3. Actually we're up to 1.4, but I forgot to update
-the version number. This adds some non-portable stuff to manipulate
-structures in <sys/un.h>. I'll have to #ifdef it out in the next
-patch.
-
-*** perl5.001.lwall/ext/Socket/Socket.pm Sat Jul 1 15:51:54 1995
---- perl5.002beta1/ext/Socket/Socket.pm Sat Nov 18 15:37:03 1995
-
-Index: ext/Socket/Socket.xs
-Updated to 1.3. Actually we're up to 1.4, but I forgot to update
-the version number. This adds some non-portable stuff to manipulate
-structures in <sys/un.h>. I'll have to #ifdef it out in the next
-patch.
-
-*** perl5.001.lwall/ext/Socket/Socket.xs Sat Jul 1 15:51:56 1995
---- perl5.002beta1/ext/Socket/Socket.xs Sat Nov 18 15:36:57 1995
-
-Index: global.sym
-Remove unnecessary whichsigname that was added in patch.1n.
-*** perl5.001.lwall/global.sym Tue Nov 14 15:21:11 1995
---- perl5.002beta1/global.sym Wed Nov 15 14:58:14 1995
-
-Index: h2ph.PL
-Converted from h2ph.SH.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/h2ph.PL Sun Nov 19 23:00:39 1995
-
-Index: h2xs.PL
-Converted from h2xs.SH.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/h2xs.PL Sun Nov 19 22:37:58 1995
-
-Index: hints/aix.sh
-Add gcc-specific -Xlinker, if you're using gcc.
-*** perl5.001.lwall/hints/aix.sh Thu Oct 19 21:02:08 1995
---- perl5.002beta1/hints/aix.sh Mon Nov 13 23:03:33 1995
-
-Index: hints/freebsd.sh
-Warn about possible here-document problem.
-*** perl5.001.lwall/hints/freebsd.sh Sat Jul 1 18:44:07 1995
---- perl5.002beta1/hints/freebsd.sh Sat Nov 18 16:21:20 1995
-
-Index: hints/hpux.sh
-Replace old hpux_9.sh, since this works for 9 and 10.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/hints/hpux.sh Mon Nov 20 09:53:28 1995
-
-Index: hints/irix_6_2.sh
-New hint file. This should be merged with irix_6.sh, since it's
-almost identical.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/hints/irix_6_2.sh Mon Nov 20 11:16:55 1995
-
-Index: hints/ncr_tower.sh
-Give pointers about directory functions.
-*** perl5.001.lwall/hints/ncr_tower.sh Tue Oct 18 12:33:25 1994
---- perl5.002beta1/hints/ncr_tower.sh Tue Oct 31 11:57:51 1995
-
-Index: hints/netbsd.sh
-Updated.
-*** perl5.001.lwall/hints/netbsd.sh Wed Jun 7 19:47:45 1995
---- perl5.002beta1/hints/netbsd.sh Mon Nov 13 23:04:17 1995
-
-Index: hints/os2.sh
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/hints/os2.sh Tue Nov 14 11:07:33 1995
-
-Index: hints/sco.sh
-Renamed from sco_3, since it should apply to most recent versions.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/hints/sco.sh Mon Jun 5 11:50:11 1995
-
-Index: hints/solaris_2.sh
-Remove temporary file try.c.
-*** perl5.001.lwall/hints/solaris_2.sh Thu Oct 19 21:02:37 1995
---- perl5.002beta1/hints/solaris_2.sh Mon Nov 20 16:01:50 1995
-
-Index: hints/ultrix_4.sh
-Note that you can substitute sh5 for sh to get a big speed up.
-*** perl5.001.lwall/hints/ultrix_4.sh Mon Feb 13 20:15:05 1995
---- perl5.002beta1/hints/ultrix_4.sh Sat Nov 11 17:11:41 1995
-
-Index: installman
-Quit if they just asked for help with -h.
-*** perl5.001.lwall/installman Sat Jul 1 18:44:09 1995
---- perl5.002beta1/installman Mon Nov 6 11:16:43 1995
-
-Index: installperl
-Updated to use Config rather than hand-reading config.sh again.
-
-Install h2ph.
-
-Create site_perl and site_perl/archname directories.
-
-*** perl5.001.lwall/installperl Sat Jul 1 18:44:12 1995
---- perl5.002beta1/installperl Mon Nov 20 12:55:08 1995
-
-Index: lib/AutoSplit.pm
-Handle OS/2 backslashes.
-
-Tim's prototype patch.
-
-Less enthusiastic checking of autoloader_seen.
-
-*** perl5.001.lwall/lib/AutoSplit.pm Sat Jul 1 15:52:03 1995
---- perl5.002beta1/lib/AutoSplit.pm Wed Nov 15 15:06:19 1995
-
-Index: lib/Cwd.pm
-Updated for Unix, NT, and OS/2.
-*** perl5.001.lwall/lib/Cwd.pm Wed Jun 7 19:48:18 1995
---- perl5.002beta1/lib/Cwd.pm Mon Nov 13 23:01:38 1995
-
-Index: lib/ExtUtils/Liblist.pm
-Updated to MakeMaker 5.06.
-*** perl5.001.lwall/lib/ExtUtils/Liblist.pm Wed Jun 7 19:48:27 1995
---- perl5.002beta1/lib/ExtUtils/Liblist.pm Mon Nov 13 22:03:29 1995
-
-Index: lib/ExtUtils/MakeMaker.pm
-Updated to MakeMaker 5.06.
-Prereq: 1.21
-*** perl5.001.lwall/lib/ExtUtils/MakeMaker.pm Thu Oct 19 21:02:57 1995
---- perl5.002beta1/lib/ExtUtils/MakeMaker.pm Sat Nov 18 16:01:05 1995
-
-Index: lib/ExtUtils/Manifest.pm
-Updated to MakeMaker 5.06.
-*** perl5.001.lwall/lib/ExtUtils/Manifest.pm Sat Jul 1 15:52:11 1995
---- perl5.002beta1/lib/ExtUtils/Manifest.pm Mon Nov 13 22:03:30 1995
-
-Index: lib/ExtUtils/xsubpp
-Updated to xsubpp-1.923.
-*** perl5.001.lwall/lib/ExtUtils/xsubpp Sat Jul 1 20:08:00 1995
---- perl5.002beta1/lib/ExtUtils/xsubpp Mon Nov 20 11:03:49 1995
-
-Index: lib/File/Find.pm
-OS/2 patch for nlink.
-*** perl5.001.lwall/lib/File/Find.pm Sat Jul 1 15:52:13 1995
---- perl5.002beta1/lib/File/Find.pm Wed Nov 15 15:20:03 1995
-
-Index: lib/Net/Ping.pm
-Updated to Net::Ping 1.00.
-*** perl5.001.lwall/lib/Net/Ping.pm Wed Jun 7 19:49:13 1995
---- perl5.002beta1/lib/Net/Ping.pm Tue Oct 31 11:15:55 1995
-
-Index: lib/Shell.pm
-Updated for OS/2 or Unix.
-*** perl5.001.lwall/lib/Shell.pm Tue Oct 18 12:34:59 1994
---- perl5.002beta1/lib/Shell.pm Mon Nov 13 23:01:40 1995
-
-Index: lib/Test/Harness.pm
-Updated for OS/2 or Unix.
-*** perl5.001.lwall/lib/Test/Harness.pm Tue Oct 18 12:38:35 1994
---- perl5.002beta1/lib/Test/Harness.pm Mon Nov 13 23:01:40 1995
-
-Index: lib/Text/Tabs.pm
-Updated.
-*** perl5.001.lwall/lib/Text/Tabs.pm Wed Jun 7 19:49:20 1995
---- perl5.002beta1/lib/Text/Tabs.pm Sat Nov 18 16:08:55 1995
-
-Index: lib/Text/Wrap.pm
-New module.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/lib/Text/Wrap.pm Sat Nov 18 16:08:56 1995
-
-Index: lib/diagnostics.pm
-New module.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/lib/diagnostics.pm Tue Nov 14 16:16:36 1995
-
-Index: lib/lib.pm
-Automatically try to load an architecture-dependent library too.
-*** perl5.001.lwall/lib/lib.pm Sat Jul 1 15:51:37 1995
---- perl5.002beta1/lib/lib.pm Fri Nov 10 16:50:43 1995
-
-Index: lib/overload.pm
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/lib/overload.pm Sat Nov 18 16:03:33 1995
-
-Index: lib/perl5db.pl
-Emacs and OS/2 fixes.
-*** perl5.001.lwall/lib/perl5db.pl Sun Mar 12 22:34:53 1995
---- perl5.002beta1/lib/perl5db.pl Wed Nov 15 22:37:45 1995
-
-Index: lib/splain
-New file -- same as diagnostics.pm.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/lib/splain Tue Nov 14 16:16:36 1995
-
-Index: mg.c
-Remove unnecessary whichsigname introduced in 5.001n.
-*** perl5.001.lwall/mg.c Tue Nov 14 15:31:03 1995
---- perl5.002beta1/mg.c Wed Nov 15 15:44:10 1995
-
-Index: minimod.PL
-Made c++ friendly.
-*** perl5.001.lwall/minimod.PL Mon Feb 13 20:15:47 1995
---- perl5.002beta1/minimod.PL Sun Nov 19 23:01:02 1995
-
-Index: miniperlmain.c
-Made c++ friendly.
-*** perl5.001.lwall/miniperlmain.c Mon Feb 13 21:48:50 1995
---- perl5.002beta1/miniperlmain.c Sat Nov 18 15:48:10 1995
-
-Index: op.c
-Larry's post 5.001mx prototype patch.
-*** perl5.001.lwall/op.c Tue Nov 14 20:36:08 1995
---- perl5.002beta1/op.c Wed Nov 15 22:10:36 1995
-
-Index: os2/Makefile.SH
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/Makefile.SH Tue Nov 14 11:07:32 1995
-
-Index: os2/POSIX.mkfifo
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/POSIX.mkfifo Tue Nov 14 10:48:16 1995
-
-Index: os2/README
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/README Tue Nov 14 14:42:13 1995
-
-Index: os2/diff.Makefile
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/diff.Makefile Tue Nov 14 11:09:29 1995
-
-Index: os2/diff.configure
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/diff.configure Sun Nov 12 01:31:34 1995
-
-Index: os2/diff.installperl
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/diff.installperl Tue Nov 14 11:09:28 1995
-
-Index: os2/diff.mkdep
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/diff.mkdep Tue Nov 14 11:09:28 1995
-
-Index: os2/diff.x2pMakefile
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/diff.x2pMakefile Tue Nov 14 11:09:29 1995
-
-Index: os2/os2.c
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/os2.c Tue Nov 14 11:07:33 1995
-
-Index: os2/os2ish.h
-New file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/os2/os2ish.h Tue Nov 14 11:07:33 1995
-
-Index: perl.c
-Add -h option to print out usage.
-
-Add 'beta' to version number.
-
-Add new library hierarchy. See INSTALL.
-
-*** perl5.001.lwall/perl.c Tue Nov 14 20:09:28 1995
---- perl5.002beta1/perl.c Sun Nov 19 16:11:29 1995
-
-Index: perl.h
-
-Move around some includes for OS/2.
-
-Check for <locale.h>
-
-*** perl5.001.lwall/perl.h Thu Nov 9 19:50:43 1995
---- perl5.002beta1/perl.h Wed Nov 15 17:13:16 1995
-
-Index: perldoc.PL
-
-Moved from perldoc.SH. Updated to handle no nroff.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/perldoc.PL Tue Nov 14 14:57:57 1995
-
-Index: pod/Makefile
-Updated for new pods and for new .PL format.
-*** perl5.001.lwall/pod/Makefile Wed Jun 7 19:50:02 1995
---- perl5.002beta1/pod/Makefile Mon Nov 20 13:00:50 1995
-
-Index: pod/perl.pod
-Updated to refer to new pods.
-*** perl5.001.lwall/pod/perl.pod Thu Oct 5 19:54:43 1995
---- perl5.002beta1/pod/perl.pod Sat Nov 18 17:23:58 1995
-
-Index: pod/perlbook.pod
-Updated info.
-*** perl5.001.lwall/pod/perlbook.pod Wed Feb 22 18:32:35 1995
---- perl5.002beta1/pod/perlbook.pod Sat Nov 11 17:17:23 1995
-
-Index: pod/perlbot.pod
-Include SUPER stuff.
-*** perl5.001.lwall/pod/perlbot.pod Wed Jun 7 19:50:14 1995
---- perl5.002beta1/pod/perlbot.pod Fri Nov 10 17:27:33 1995
-
-Index: pod/perlcall.pod
-Change perlapi to perlxs.
-*** perl5.001.lwall/pod/perlcall.pod Wed Jun 7 19:50:17 1995
---- perl5.002beta1/pod/perlcall.pod Tue Oct 31 15:37:57 1995
-
-Index: pod/perldata.pod
-Tom's updates.
-*** perl5.001.lwall/pod/perldata.pod Sun Mar 12 22:35:14 1995
---- perl5.002beta1/pod/perldata.pod Sat Nov 18 17:23:59 1995
-
-Index: pod/perldiag.pod
-Tom's updates.
-*** perl5.001.lwall/pod/perldiag.pod Tue Nov 14 22:04:11 1995
---- perl5.002beta1/pod/perldiag.pod Sun Nov 19 22:10:58 1995
-
-Index: pod/perldsc.pod
-Tom's updates.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/pod/perldsc.pod Sat Nov 18 17:24:22 1995
-
-Index: pod/perlform.pod
-Tom's updates.
-*** perl5.001.lwall/pod/perlform.pod Wed Feb 22 18:32:41 1995
---- perl5.002beta1/pod/perlform.pod Sat Nov 18 17:23:59 1995
-
-Index: pod/perlfunc.pod
-Tom's updates.
-*** perl5.001.lwall/pod/perlfunc.pod Tue Nov 14 15:31:33 1995
---- perl5.002beta1/pod/perlfunc.pod Sat Nov 18 17:24:01 1995
-
-Index: pod/perlguts.pod
-Change perlapi to perlxs.
-*** perl5.001.lwall/pod/perlguts.pod Wed Jun 7 19:50:25 1995
---- perl5.002beta1/pod/perlguts.pod Tue Oct 31 15:38:18 1995
-
-Index: pod/perlipc.pod
-New file from Tom.
-*** perl5.001.lwall/pod/perlipc.pod Wed Feb 22 18:32:48 1995
---- perl5.002beta1/pod/perlipc.pod Sat Nov 18 17:24:02 1995
-
-Index: pod/perllol.pod
-New file from Tom.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/pod/perllol.pod Sat Nov 18 17:24:22 1995
-
-Index: pod/perlmod.pod
-Updates from Tom.
-*** perl5.001.lwall/pod/perlmod.pod Wed Feb 22 18:32:51 1995
---- perl5.002beta1/pod/perlmod.pod Sat Nov 18 17:24:03 1995
-
-Index: pod/perlop.pod
-Add missing '>'.
-*** perl5.001.lwall/pod/perlop.pod Tue Nov 14 15:31:37 1995
---- perl5.002beta1/pod/perlop.pod Sat Nov 18 17:24:03 1995
-
-Index: pod/perlpod.pod
-Add note about =cut operator.
-*** perl5.001.lwall/pod/perlpod.pod Tue Oct 18 12:39:53 1994
---- perl5.002beta1/pod/perlpod.pod Sun Nov 19 22:22:59 1995
-
-Index: pod/perlref.pod
-Updates from Tom.
-*** perl5.001.lwall/pod/perlref.pod Tue Mar 7 00:56:46 1995
---- perl5.002beta1/pod/perlref.pod Sat Nov 18 17:24:04 1995
-
-Index: pod/perlsyn.pod
-Updates from Tom.
-*** perl5.001.lwall/pod/perlsyn.pod Sat Mar 11 14:13:48 1995
---- perl5.002beta1/pod/perlsyn.pod Sat Nov 18 17:24:04 1995
-
-Index: pod/perlxs.pod
-Updated.
-*** perl5.001.lwall/pod/perlxs.pod Tue Nov 14 15:31:42 1995
---- perl5.002beta1/pod/perlxs.pod Sun Nov 19 22:12:44 1995
-
-Index: pod/perlxstut.pod
-New file from Jeff.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/pod/perlxstut.pod Mon Nov 20 13:02:12 1995
-
-Index: pod/pod2html.PL
-Updated -- version 1.15 merges Tom's suggestions and ideas from
-pod2fm.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/pod/pod2html.PL Sun Nov 19 22:11:59 1995
-
-Index: pod/pod2latex.PL
-Changed to a .PL file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/pod/pod2latex.PL Wed Nov 15 22:32:39 1995
-
-Index: pod/pod2man.PL
-Changed to a .PL file.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/pod/pod2man.PL Wed Nov 15 22:32:51 1995
-
-Index: pp_ctl.c
-Add OS/2 stuff.
-*** perl5.001.lwall/pp_ctl.c Wed Nov 15 00:37:25 1995
---- perl5.002beta1/pp_ctl.c Wed Nov 15 21:46:37 1995
-
-Index: pp_sys.c
-Add OS/2 stuff.
-*** perl5.001.lwall/pp_sys.c Tue Nov 14 21:03:06 1995
---- perl5.002beta1/pp_sys.c Wed Nov 15 21:51:33 1995
-
-Index: proto.h
-Add OS/2 stuff to better protect MYMALLOC.
-*** perl5.001.lwall/proto.h Tue Nov 14 21:01:28 1995
---- perl5.002beta1/proto.h Wed Nov 15 21:55:23 1995
-
-Index: t/TEST
-Add OS/2 check for perl.exe.
-*** perl5.001.lwall/t/TEST Sat Jan 14 19:35:33 1995
---- perl5.002beta1/t/TEST Tue Nov 14 11:22:08 1995
-
-Index: t/lib/db-btree.t
-Updated.
-*** perl5.001.lwall/t/lib/db-btree.t Tue Oct 18 12:44:05 1994
---- perl5.002beta1/t/lib/db-btree.t Tue Oct 31 11:53:29 1995
-
-Index: t/op/overload.t
-Updated.
-*** perl5.001.lwall/t/op/overload.t Tue Nov 14 20:56:57 1995
---- perl5.002beta1/t/op/overload.t Mon Nov 20 15:48:56 1995
-
-Index: t/op/stat.t
-Add note about tmpfs failures.
-*** perl5.001.lwall/t/op/stat.t Tue Oct 18 12:46:23 1994
---- perl5.002beta1/t/op/stat.t Wed Nov 15 22:00:50 1995
-
-Index: toke.c
-Patch from Paul M. for source filters.
-*** perl5.001.lwall/toke.c Tue Nov 14 21:59:50 1995
---- perl5.002beta1/toke.c Wed Nov 15 22:08:23 1995
-
-Index: util.c
-Varargs fixes.
-*** perl5.001.lwall/util.c Wed Jun 7 19:51:19 1995
---- perl5.002beta1/util.c Tue Nov 14 10:46:37 1995
-
-Index: writemain.SH
-Make c++ friendly.
-*** perl5.001.lwall/writemain.SH Wed Feb 8 19:44:20 1995
---- perl5.002beta1/writemain.SH Sat Nov 18 15:51:55 1995
-
-Index: x2p/Makefile.SH
-Updated for .PL extraction.
-*** perl5.001.lwall/x2p/Makefile.SH Wed Jun 7 19:51:37 1995
---- perl5.002beta1/x2p/Makefile.SH Sun Nov 19 23:17:39 1995
-
-Index: x2p/a2p.h
-Add OS/2 stuff.
-*** perl5.001.lwall/x2p/a2p.h Thu Oct 19 21:03:58 1995
---- perl5.002beta1/x2p/a2p.h Tue Nov 14 10:46:57 1995
-
-Index: x2p/cflags.SH
-Add .obj for OS/2.
-*** perl5.001.lwall/x2p/cflags.SH Tue Oct 18 12:47:34 1994
---- perl5.002beta1/x2p/cflags.SH Tue Nov 14 15:18:27 1995
-
-Index: x2p/find2perl.PL
-Changed from .SH to .PL.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/x2p/find2perl.PL Sun Nov 19 23:11:58 1995
-
-Index: x2p/s2p.PL
-Changed from .SH to .PL extraction.
-*** /dev/null Mon Nov 20 17:28:51 1995
---- perl5.002beta1/x2p/s2p.PL Sun Nov 19 23:14:59 1995
diff --git a/contrib/perl5/Changes5.003 b/contrib/perl5/Changes5.003
deleted file mode 100644
index daba248..0000000
--- a/contrib/perl5/Changes5.003
+++ /dev/null
@@ -1,100 +0,0 @@
--------------
-Version 5.003
--------------
-
- ***> IMPORTANT NOTICE: <***
-The main reason for this release was to fix a security bug affecting
-suidperl on some systems. If you build suidperl on your system, it
-is strongly recommended that you replace any existing copies with
-version 5.003 or later immediately.
-
-The changes in 5.003 have been held to a minimum, in the hope that this
-will simplify installation and testing at sites which may be affected
-by the security hole in suidperl. In brief, 5.003 does the following:
-
-- Plugs security hole in suidperl mechanism on affected systems
-
-- MakeMaker was also updated to version 5.34, and extension Makefile.PLs
- were modified to match it.
-
-- The following hints files were updated: bsdos.sh, hpux.sh, linux.sh,
- machten.sh, solaris_2.sh
-
-- A fix was added to installperl to insure that file permissions were
- set correctly for the installed C header files.
-
-- t/op/stat.t was modified to work around MachTen's belief that /dev/null
- is a terminal device.
-
-- Incorporation of Perl version information into the VMS' version of
- config.h was changed to make it compatible with the older VAXC.
-
-- Minor fixes were made to VMS-specific C code, and the routine
- VMS::Filespec::rmsexpand was added.
-
-----------------
-Version 5.002_01
-----------------
-
-- The EMBED namespace changes are now used by default, in order to better
- segregate Perl's C global symbols from those belonging to embedding
- applications or to libraries. This makes it necessary to rebuild dynamic
- extensions built under previous versions of Perl without the EMBED option.
- The default use of EMBED can be overridden by placing -DNO_EMBED on the
- cc command line.
-
- The EMBED change is the beginning of a general cleanup of C global
- symbols used by Perl, so binary compatibility with previously
- compiled dynamic extensions may be broken again in the next few
- releases.
-
-- Several bugs in the core were fixed, including the following:
- - made sure FILE * for -e temp file was closed only once
- - improved form of single-statement macro definitions to keep
- as many ccs as possible happy
- - fixed file tests to insure that signed values were used when
- computing differences between times.
- - fixed toke.c so implicit loop isn't doubled when perl is
- invoked with both the -p and -n switches
-
-- The new SUBVERSION number has been included in the default value for
- architecture-specific library directories, so development and
- production architecture-dependent libraries can coexist.
-
-- Two new magic variables, $^E and $^O, have been added. $^E contains the
- OS-specific equivalent of $!. $^O contains the name of the operating
- system, in order to make it easily available to Perl code whose behavior
- differs according to its environment. The standard library files have
- been converted to use $^O in preference to $Config{'osname'}.
-
-- A mechanism was added to allow listing of locally applied patches
- in the output of perl -v.
-
-- Miscellaneous minor corrections and updates were made to the documentation.
-
-- Extensive updates were made to the OS/2 and VMS ports
-
-- The following hints file were updated: bsdos.sh, dynixptx.sh,
- irix_6_2.sh, linux.sh, os2.sh
-
-- Several changes were made to standard library files:
- - reduced use of English.pm and $`, $', and $& in library modules,
- since these degrade module loading and evaluation of regular expressions,
- respectively.
- - File/Basename.pm: Added path separator to dirname('.')
- - File/Copy.pm: Added support for VMS and OS/2 system-level copy
- - MakeMaker updated to v5.26
- - Symbol.pm now accepts old (') and new (::) package delimiters
- - Sys/Syslog.pm uses Sys::Hostname only when necessary
- - chat2.pl picks up necessary constants from socket.ph
- - syslog.pl: Corrected thinko 'Socket' --> 'Syslog'
- - xsubpp updated to v1.935
-
-
-- The perlbug utility is now more cautious about sending mail, in order
- to reduce the chance of accidentally send a bug report by giving the
- wrong response to a prompt.
-
-- The -m switch has been added to perldoc, causing it to display the
- Perl code in target file as well as any documentation.
-
diff --git a/contrib/perl5/Changes5.004 b/contrib/perl5/Changes5.004
deleted file mode 100644
index 2d578b4..0000000
--- a/contrib/perl5/Changes5.004
+++ /dev/null
@@ -1,16073 +0,0 @@
-Please note: This file provides a summary of significant changes
-between versions and sub-versions of Perl, not necessarily a complete
-list of each modification. If you'd like more detailed information,
-please consult the comments in the patches on which the relevant
-release of Perl is based. (Patches can be found on any CPAN
-site, in the .../src/5.0 directory for full version releases,
-or in the .../src/5/0/unsupported directory for sub-version
-releases.)
-
-
- ---------------
- CAST AND CREW
- ---------------
-
-To give due honor to those who have made Perl 5.004 what is is today,
-here are some of the more common names in the Changes file, and their
-current addresses (as of March 1997):
-
- Gisle Aas <gisle@aas.no>
- Kenneth Albanowski <kjahds@kjahds.com>
- Graham Barr <gbarr@ti.com>
- Spider Boardman <spider@orb.nashua.nh.us>
- Tom Christiansen <tchrist@perl.com>
- Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
- M. J. T. Guy <mjtg@cus.cam.ac.uk>
- Gurusamy Sarathy <gsar@engin.umich.edu>
- Jarkko Hietaniemi <jhi@iki.fi>
- Nick Ing-Simmons <nik@tiuk.ti.com>
- Andreas Koenig <a.koenig@mind.de>
- Doug MacEachern <dougm@opengroup.org>
- Paul Marquess <pmarquess@bfsec.bt.co.uk>
- Hans Mulder <hansm@euronet.nl>
- Jeff Okamoto <okamoto@hpcc123.corp.hp.com>
- Ulrich Pfeifer <pfeifer@charly.informatik.uni-dortmund.de>
- Tom Phoenix <rootbeer@teleport.com>
- Norbert Pueschel <pueschel@imsdd.meb.uni-bonn.de>
- Dean Roehrich <roehrich@cray.com>
- Roderick Schertler <roderick@argon.org>
- Larry W. Virden <lvirden@cas.org>
- Ilya Zakharevich <ilya@math.ohio-state.edu>
-
-And the Keepers of the Patch Pumpkin:
-
- Charles Bailey <bailey@hmivax.humgen.upenn.edu>
- Tim Bunce <Tim.Bunce@ig.co.uk>
- Andy Dougherty <doughera@lafcol.lafayette.edu>
- Chip Salzenberg <chip@perl.com>
-
-And, of course, the Author of Perl:
-
- Larry Wall <larry@wall.org>
-
-----------------
-Version 5.004_05 Maintenance release 5 for 5.004
-----------------
-
-"I said to my soul, be still, and wait without hope
- For hope would hope for the wrong thing; wait without love
- For love would be love of the wrong thing; there is yet faith
- But the faith and the love and the hope are all in the waiting.
- Wait without thought, for you are not ready for thought:
- So the darkness shall be light, and the stillness the dancing."
- -- T.S.Eliot, East Coker
-
-
- HEADLINES FOR THIS MAINTENANCE RELEASE
-
- TBA
-
-
-Change 996 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "Negative array subscript unrecognized in regex"
- From: Mark-Jason Dominus <mjd@plover.com>,
- h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <19980425040819.13828.qmail@plover.com>,
- <199805151514.RAA04121@dorlas.elsevier.nl>
- Files: t/base/lex.t toke.c
-
- Title: "Remove e_fp from toke.c after change 955"
- From: Tim Bunce
- Files: toke.c
-
-Change 995 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "Fix -e security hole (no longer uses temp file)"
- From: Tim Bunce
- Files: embed.h perl.h perl.c
-
-Change 992 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "install non-backwards compatible .pm files into archlib"
- From: Tim Bunce
- Files: installperl
-
- Title: "revert "Can't locate" message to original for maintenance"
- From: Tim Bunce
- Msg-ID: <199804240047.SAA24155@den-mdev1.co.csgsystems.com>
- Files: pod/perldiag.pod pp_ctl.c
-
-Change 990 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "Add tests for die $ref"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <355C6297.121B576B@ti.com>
- Files: MANIFEST t/op/die.t
-
-Change 989 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "Fix t/op/ipcmsg.t for Digital UNIX"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199805151337.QAA01174@alpha.hut.fi>
- Files: t/op/ipcmsg.t
-
-Change 986 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "Patches for BeOS port of Perl, courtesy of Tom Spindler"
- From: Jarkko Hietaniemi <jhi@iki.fi>, Tom Spindler
- Msg-ID: <199805042312.CAA09025@alpha.hut.fi>
- Files: MANIFEST Configure config_h.SH hints/beos.sh pod/perlfunc.pod
- Porting/Glossary README.beos beos/nm.c lib/Term/ReadLine.pm
- plan9/config.plan9 pp_sys.c t/io/pipe.t vms/config.vms
- win32/config.bc win32/config.vc win32/config_H.bc
- win32/config_H.vc
-
-Change 985 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "allow die $ref"
- From: Graham Barr <gbarr@ti.com>, Tim.Bunce@ig.co.uk (Tim Bunce)
- Msg-ID: <199805151351.OAA01985@toad.ig.co.uk>, <355C3E67.AF25B9F7@ti.com>
- Files: pp_ctl.c pp_sys.c util.c
-
- Title: "ExtUtils::Manifest could truncate files during "make dist""
- From: "James E Jurach Jr." <muaddib@arrakis.int.ein.cz>,
- koenig@kulturbox.de (Andreas J. Koenig)
- Msg-ID: <199805111048.MAA02573@arrakis.int.ein.cz>,
- <sfc90o8bgie.fsf@dubravka.in-berlin.de>
- Files: lib/ExtUtils/Manifest.pm
-
- Title: "Autosplit doesn't like upper case letters in sub names on VMS"
- From: Dan Sugalski <sugalskd@osshe.edu>
- Msg-ID: <3.0.5.32.19980330152332.009cb130@osshe.edu>
- Files: lib/AutoSplit.pm
-
- Title: "AutoSplit/AutoLoaded subs: give useful line numbers in warnings etc"
- From: "Jesse N. Glick" <jglick@sig.bsh.com>, koenig@anna.mind.de (Andreas
- J. Koenig), larry@wall.org (Larry Wall)
- Msg-ID: <199709292015.NAA09627@wall.org>, <342FCDDF.23534195@sig.bsh.com>,
- <sfc202c9jsb.fsf@anna.in-berlin.de>,
- <sfc3efg5rhg.fsf@dubravka.in-berlin.de>
- Files: lib/AutoSplit.pm
-
-Change 984 on 1998/05/15 by TimBunce@ig.co.uk
-
- ------ CORE LANGUAGE ------
-
- Title: "Fix close pipe returning status from wrong child"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, kstar@chapin.edu@ig.co.uk ()
- Msg-ID: <199805142313.TAA02684@chapin.edu>,
- <E0yZ8ah-0005d8-00@taurus.cus.cam.ac.uk>
- Files: t/io/pipe.t util.c
-
- Title: "Avoid English.pm triggering load of Errno.pm"
- From: Tim Bunce
- Files: gv.c lib/English.pm
-
- ------ DOCUMENTATION ------
-
- Title: "Document child exit cause a parent sleep to end early"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yZwMK-0000D9-00@taurus.cus.cam.ac.uk>
- Files: pod/perlfunc.pod
-
- ------ EXTENSIONS ------
-
- Title: "BSD Platforms need STRUCT_TM_HASZONE for POSIX"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980512095524.8158C-100000@newton.phys>
- Files: MANIFEST ext/POSIX/hints/bsdos.pl ext/POSIX/hints/freebsd.pl
- ext/POSIX/hints/netbsd.pl ext/POSIX/hints/openbsd.pl
-
- Title: "MM_VMS.pm fixes for building external library"
- From: Dan Sugalski <sugalskd@ous.edu>
- Msg-ID: <3.0.5.32.19980511160542.009dd480@ous.edu>
- Files: lib/ExtUtils/MM_VMS.pm
-
- Title: "Appease picky DEC compiler in POSIX.xs"
- From: Dan Sugalski <sugalskd@ous.edu>
- Msg-ID: <3.0.5.32.19980511161434.009f8bb0@ous.edu>
- Files: ext/POSIX/POSIX.xs
-
- ------ TESTS ------
-
- Title: "Fix constant detection in t/op/ipcsem.t for Digit UNIX"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199805121212.PAA15351@alpha.hut.fi>
- Files: t/op/ipcsem.t
-
- Title: "Fix doc bug for system() return value"
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Msg-ID: <Pine.LNX.3.96.980514165608.4062A-100000@perrin.dimensional.com>
- Files: pod/perlfunc.pod t/op/exec.t
-
- ------ UTILITIES ------
-
- Title: "Avoid possible constant autoload loop"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Graham Barr <gbarr@ti.com>, Ilya
- Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199805141910.PAA26994@monk.mps.ohio-state.edu>,
- <355B475A.C5AD4B90@ti.com>,
- <E0ya11X-0000hm-00@taurus.cus.cam.ac.uk>
- Files: utils/h2xs.PL
-
- Title: "Further improvements to h2ph.PL"
- From: kstar@chapin.edu
- Msg-ID: <199805130241.WAA25459@chapin.edu>
- Files: utils/h2ph.PL
-
-Change 982 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "comment init_postdump_symbols issues"
- From: Tim Bunce
- Files: perl.c
-
- Title: "Improve sort docs re SUBNAME"
- From: circle@azstarnet.com
- Msg-ID: <199804281828.LAA22737@andromeda.azstarnet.com>
- Files: pod/perlfunc.pod
-
-Change 981 on 1998/05/15 by TimBunce@ig.co.uk
-
- Title: "Add hook to tie %! to external Errno.pm module (not included)"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <355080CD.1111BC81@ti.com>
- Files: gv.c
-
-Change 971 on 1998/05/14 by TimBunce@ig.co.uk
-
- Title: "fix C<print "foo ${\()}"> (pp_refgen fumbles when G_SCALAR, no args)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805070402.AAA02858@aatma.engin.umich.edu>
- Files: pp.c
-
-Change 970 on 1998/05/14 by TimBunce@ig.co.uk
-
- Title: "perlbug reformatted"
- From: Dominic Dunlop <domo@vo.lu>, Hugo van der Sanden
- <hv@crypt0.demon.co.uk>
- Msg-ID: <199805110954.LAA20367@dorlas.elsevier.nl>,
- <l03130300b17cebcb6d33@[194.222.64.89]>,
- <v03110702b17ccbab6824@[195.95.102.67]>
- Files: utils/perlbug.PL
-
-Change 965 on 1998/05/14 by TimBunce@ig.co.uk
-
- Title: "Sub declaration cost reduced from ~500 to ~100 bytes"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199805050607.CAA02050@monk.mps.ohio-state.edu>
- Files: gv.h gv.c op.c
-
-Change 949 on 1998/05/14 by TimBunce@ig.co.uk
-
- Title: "while($x=<>) no longer warns (implicit defined added)"
- From: Nick Ing-Simmons <nik@tiuk.ti.com>
- Msg-ID: <199805051035.LAA27365@pluto.tiuk.ti.com>
- Files: MANIFEST op.c t/op/defins.t
-
-Change 946 on 1998/05/14 by TimBunce@ig.co.uk
-
- Title: "Fix PERL_DESTRUCT_LEVEL core dumps"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805062301.TAA24599@aatma.engin.umich.edu>
- Files: perl.c sv.c t/op/misc.t
-
-Change 944 on 1998/05/14 by TimBunce@ig.co.uk
-
- Title: "5.004_04-m2 Cleanup of test failures"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805070416.AAA03082@aatma.engin.umich.edu>
- Files: t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t t/op/taint.t
- win32/config.bc win32/config.vc
-
-Change 922 on 1998/05/11 by TimBunce@ig.co.uk
-
- Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "incorrect return value for hv_iterinit"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805031848.OAA20618@aatma.engin.umich.edu>
- Files: pod/perlguts.pod hv.c
-
- ------ DOCUMENTATION ------
-
- Title: "perlvar.pod buglet E<EVMSERR>"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9805041415.AA22185@o09.xray.mpe.mpg.de>
- Files: pod/perlvar.pod
-
- Title: "Improve docs for warning about code after an exec()"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Chaim Frenkel
- <chaimf@concentric.net>
- Msg-ID: <E0yYUit-0003yb-00@taurus.cus.cam.ac.uk>,
- <m3ra22qn1z.fsf@chany-p100.emwp.com>
- Files: pod/perlfunc.pod
-
- Title: "Remove dead code from pod2man"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yXmuT-0006Ll-00@ursa.cus.cam.ac.uk>
- Files: pod/pod2man.PL
-
- Title: "tweak doc for C<do FILENAME>"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805090017.UAA06888@aatma.engin.umich.edu>
- Files: pod/perlfunc.pod
-
- Title: "Document integer pragma effect on % operator"
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3yawjmzhx.fsf@furu.g.aas.no>
- Files: pod/perlop.pod
-
- Title: "Reduce rm command line length in pod/Makefile"
- From: Hugo van der Sanden <h.sanden@elsevier.nl>
- Msg-ID: <199805041423.QAA13199@dorlas.elsevier.nl>
- Files: pod/Makefile
-
- ------ EXTENSIONS ------
-
- Title: "Clarify Termios usage in POSIX.pod"
- From: Rocco Caputo <troc@netrus.net>
- Msg-ID: <199805101952.PAA12738@ns.netrus.net>
- Files: ext/POSIX/POSIX.pod
-
- ------ LIBRARY ------
-
- Title: "Fix File::Find::finddepth typo in trial 2 release"
- From: koenig@kulturbox.de (Andreas J. Koenig)
- Msg-ID: <sfcbttflsjz.fsf@dubravka.in-berlin.de>
- Files: lib/File/Find.pm t/lib/filefind.t
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Add Porting/patching.pod document"
- From: Daniel Grisinger <dgris@tdrenterprises.com>
- Msg-ID: <199805030305.XAA16147@relay.pair.com>
- Files: MANIFEST Porting/patching.pod
-
- Title: "hints/machten.sh: disable semctl(), align with devel version"
- From: Dominic Dunlop <domo@vo.lu>
- Msg-ID: <v03110701b175fc029eb1@[195.95.102.115]>
- Files: hints/machten.sh
-
- Title: "Add VMS specifics to Porting/makerel"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IWDK1LONRQ0026P0@cor.newman.upenn.edu>,
- <199804271732.SAA13762@toad.ig.co.uk>,
- <9804250212.AA27695@forte.com>
- Files: Porting/makerel
-
-Change 913 on 1998/05/01 by TimBunce@ig.co.uk
-
- Update MANIFEST for trial 2.
- (Porting/Contract lib/Tie/Handle.pm t/op/tiehandle.t)
-
-Change 912 on 1998/05/01 by TimBunce@ig.co.uk
-
- Add t/op/tiehandle.t as xtext to repository (see change 911)
-
-Change 911 on 1998/05/01 by TimBunce@ig.co.uk
-
- Title: "Add ERRSV, ERRHV, DEFSV and SAVE_DEFSV for XS 5.005 compatibility"
- From: timbo@ig.co.uk (Tim Bunce)
- Msg-ID: <199804200854.JAA01482@toad.ig.co.uk>
- Files: perl.h
-
- Title: "Add WRITE & CLOSE to TIEHANDLE"
- From: Graham Barr <gbarr@pobox.com>
- Msg-ID: <34F63DC8.CA95670F@pobox.com>
- Files: pod/perltie.pod lib/Tie/Handle.pm pp_sys.c t/op/tiehandle.t
-
-Change 910 on 1998/05/01 by TimBunce@ig.co.uk
-
- Title: "Add warning for Illegal hex digit"
- From: Stephen P Potter <spp@spp.users.ds.net>, Stephen Potter
- <spp@psasolar.colltech.com>, Tim.Bunce@ig.co.uk (Tim Bunce)
- Msg-ID: <199804232219.SAA02267@spp.users.ds.net>,
- <199804271409.PAA12819@toad.ig.co.uk>,
- <199804280307.WAA12332@psasolar.psa.pencom.com>
- Files: pod/perldiag.pod util.c
-
- Title: "perl_call_method() bug fix (corrupt op pointer)"
- From: "Alterman, Eugene" <Eugene.Alterman@bremer-inc.com>
- Msg-ID: <510415F72ECFD111A31700A0C9B3CCDE3098@efx98digmasa.bremer-inc.com>
- Files: perl.c
-
- Title: "Fix printf segmentation fault"
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Msg-ID: <l03130300b16bebdbc314@[194.222.64.89]>
- Files: pp_hot.c
-
- Title: "Document changed local($a[$i],$b{$j}) behaviour re delete/splice"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IVMVIHNZ36001NKH@cor.newman.upenn.edu>
- Files: pod/perlsub.pod
-
-Change 909 on 1998/05/01 by TimBunce@ig.co.uk
-
- Title: "Change Ilya's do_binmode to K&R prototype and move to doio.c"
- Files: doio.c util.c
-
-Change 907 on 1998/05/01 by TimBunce@ig.co.uk
-
- Title: "Runtime Carp verbosity without aliasing"
- From: Joshua.Pritikin@NewYork2.dmg.deuba.com, Tim Bunce
- Msg-ID: <H00000e50003936c@MHS>
- Files: lib/Carp.pm
-
- Title: "Fix File::Basename to not untaint results (using new //t flag)"
- From: Eric Hammond <erich@finity.citysearch.com>, Tom Phoenix
- <rootbeer@teleport.com>
- Msg-ID: <199710070515.WAA00682@finity.citysearch.com>,
- <Pine.GSO.3.96.971007074114.14211J-100000@usertest.teleport.com>
- Files: lib/File/Basename.pm
-
-Change 906 on 1998/04/28 by TimBunce@ig.co.uk
-
- ------ CORE LANGUAGE ------
-
- Title: "5.004_04m5t1: Fix dangling references in LVs", "Fix dangling
- references in LVs"
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Msg-ID: <199804010541.AAA32615@Orb.Nashua.NH.US>,
- <19980422164037.D29222@perl.org>
- Files: embed.h keywords.h opcode.h perl.h proto.h doop.c global.sym mg.c
- pp.c sv.c
-
- Title: "Fix SvGMAGIC typo in change 904"
- Files: doop.c
-
-Change 905 on 1998/04/28 by TimBunce@ig.co.uk
-
- Regexp patches
-
- Title: "New regex flag //t to leave $1 etc. tainted"
- From: Chip Salzenberg <chip@pobox.com>, Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <19980310192640.37826@cyprus>
- Files: pod/perlop.pod pod/perlre.pod op.h dump.c mg.c pp_hot.c sv.c
- t/op/taint.t toke.c
-
- Title: "Don't accidentally untaint target of s///"
- From: Chip Salzenberg <chip@pobox.com>
- Msg-ID: <19980310151756.24767@cyprus>
- Files: pp_ctl.c pp_hot.c t/op/taint.t
-
- Title: "Allow but ignore embedded /...(?o).../ in regexp"
- From: h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <199804201243.OAA08244@dorlas.elsevier.nl>
- Files: regcomp.c
-
-Change 904 on 1998/04/27 by TimBunce@ig.co.uk
-
- Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "Protect join() against double reads on undef and SvGMAGICALs"
- From: Chip Salzenberg <chip@perlsupport.com>, Tim Bunce
- <Tim.Bunce@ig.co.uk>
- Msg-ID: <19980424080630.D13985@perl.org>
- Files: doop.c
-
- Title: "Better error message for require failure"
- From: epeschko@den-mdev1 (Ed Peschko)
- Msg-ID: <199804240047.SAA24155@den-mdev1.co.csgsystems.com>
- Files: pod/perldiag.pod pp_ctl.c
-
- Title: "fixes for various noises under PERL_DESTRUCT_LEVEL"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804231926.PAA23969@aatma.engin.umich.edu>
- Files: perl.c
-
- Title: "Fix nice_chunk memory leak"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804052347.TAA15699@aatma.engin.umich.edu>
- Files: sv.c
-
- Title: "-2.0 vs. -2 (was Number representations)"
- From: Chip Salzenberg <chip@pobox.com>
- Msg-ID: <19980309185652.11231@cyprus>
- Files: op.c
-
- Title: "perl.c fixes for -DUNEXEC"
- From: Matt Wette <mwette@mr-ed.jpl.nasa.gov>, Matthew R Wette
- <mwette@mr-ed.jpl.nasa.gov>
- Msg-ID: <199710152146.OAA07283@mr-ed.jpl.nasa.gov>
- Files: perl.c
-
- ------ DOCUMENTATION ------
-
- Title: "perlcall is Perl from C, not C from Perl"
- From: Steve A Fink <sfink@cs.berkeley.edu>
- Files: pod/perlembed.pod
-
- Title: "Clarify require "Foo::Bar" non-bareword issue"
- From: Dominique Dumont <domi@ss7serv.grenoble.hp.com>
- Msg-ID: <199804231527.AA153445256@ss7serv.grenoble.hp.com>
- Files: pod/perlfunc.pod
-
- Title: "(repost) new text for perlsec", "new text for perlsec"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980423161605.5518N-100000@user2.teleport.com>
- Files: pod/perlsec.pod
-
- ------ EXTENSIONS ------
-
- Title: "IO::Socket->socketpair broken (typo)"
- From: Olaf Titz <olaf@bigred.inka.de>
- Msg-ID: <19980425224535.2807.qmail@bigred.inka.de>
- Files: ext/IO/lib/IO/Socket.pm
-
- Title: "NDBM_File man page needs Fcntl"
- From: "Danny R. Faught" <faught@mailhost.rsn.hp.com>
- Msg-ID: <199707011500.IAA00601@palrel3.hp.com>
- Files: ext/NDBM_File/NDBM_File.pm
-
- ------ LIBRARY ------
-
- Title: "Documentation discrepancy: pragmatic modules"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <199804221525.RAA12695@dorlas.elsevier.nl>,
- <E0ySPhk-00034f-00@taurus.cus.cam.ac.uk>
- Files: lib/strict.pm lib/subs.pm lib/vars.pm
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Updated hints file for svr4"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980423110522.26621A-100000@newton.phys>
- Files: hints/svr4.sh
-
- Title: "Pumpkin update -- shared libperl.so location"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980424115837.6222A-100000@newton.phys>
- Files: Porting/pumpkin.pod
-
- Title: "perl compile fix for AIX 4.3"
- From: Jens-Uwe Mager <jum@helios.de>
- Msg-ID: <199804261611.SAA34728@ans.helios.de>
- Files: ext/DynaLoader/dl_aix.xs
-
- Title: "Dynaloader build on VMS",
- From: pvhp@forte.com (Peter Prymmer), timbo@ig.co.uk (Tim Bunce)
- Msg-ID: <199804271732.SAA13762@toad.ig.co.uk>, <9804250212.AA27695@forte.com>
- Files: vms/descrip.mms
-
- ------ UTILITIES ------
-
- Title: "Major update to h2ph.PL"
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Msg-ID: <Pine.SV4.3.93.980424031837.20782A-200000@ermintrude.teaching.cs.adelaide.edu.au>
- Files: utils/h2ph.PL
-
-Change 897 on 1998/04/23 by TimBunce@ig.co.uk
-
- Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "fix for "Unbalanced string table refcount""
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804042251.RAA25527@aatma.engin.umich.edu>
- Files: sv.c
-
- Title: "Allow more lenient switch processing"
- From: "John L. Allen" <allen@grumman.com>
- Msg-ID: <199803251638.LAA22664@gateway.grumman.com>
- Files: perl.c
-
- Title: "Add fourth arg to substr: substr EXPR,OFFSET,LEN,REPLACEMENT"
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3g1jglqtm.fsf@furu.g.aas.no>
- Files: pod/perlfunc.pod Todo opcode.pl pp.c t/op/substr.t
-
- Title: "Odd number of elements in hash list."
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980328151929.29336D-100000@user2.teleport.com>
- Files: MANIFEST pod/perldiag.pod pp.c pp_hot.c t/op/hashwarn.t
-
- Title: "another destruct_level fix"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804030105.UAA04400@aatma.engin.umich.edu>
- Files: hv.c
-
- Title: "bidirectional pipe warning blues"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9804082151.AA20399@claudius.bfsec.bt.co.uk>
- Files: doio.c
-
- Title: "stale pointers after realloc (MEXTEND in pp_print and pp_prtf)"
- From: Malcolm Beattie <mbeattie@sable.ox.ac.uk>
- Msg-ID: <199801191107.LAA17979@sable.ox.ac.uk>
- Files: pp_hot.c pp_sys.c
-
- Title: "unimplemented umask() should return undef not die"
- From: kstar@chapin.edu (Kurt D. Starsinic)
- Msg-ID: <199803120515.VAA08660@chapin.edu>
- Files: pod/perlfunc.pod pp_sys.c
-
- Title: "warning for: bless $foo, """
- From: Joshua.Pritikin@NewYork2.dmg.deuba.com
- Msg-ID: <H00000e5000378a0@MHS>
- Files: pod/perldiag.pod pp.c
-
- ------ DOCUMENTATION ------
-
- Title: "Mention SWIG in perlxs.pod"
- From: Steve A Fink <sfink@cs.berkeley.edu>
- Msg-ID: <Pine.HPP.3.96.980408154956.20990K-100000@brooksie.CS.Berkeley.EDU>
- Files: pod/perlxs.pod
-
- Title: "fix-up of previous perlre.pod patch"
- From: Ted Ashton <ashted@southern.edu>
- Msg-ID: <199803031540.KAA09388@ns.southern.edu>
- Files: pod/perlre.pod
-
- Title: "long list of man page nitpicks"
- From: Greg Bacon <gbacon@mickey.cs.uah.edu>, Tom Christiansen
- <tchrist@jhereg.perl.com>
- Msg-ID: <199804221844.NAA08338@pluto.cs.uah.edu>,
- <199804222204.QAA20805@jhereg.perl.com>
- Files: pod/perlapio.pod pod/perlcall.pod pod/perldebug.pod pod/perldelta.pod
- pod/perldiag.pod pod/perlembed.pod pod/perlfaq2.pod
- pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- pod/perlfaq7.pod pod/perlfaq8.pod pod/perlform.pod
- pod/perlfunc.pod pod/perlguts.pod pod/perlipc.pod
- pod/perllocale.pod pod/perlmodlib.pod pod/perlop.pod
- pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod
- pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod
- pod/pod2man.PL
-
- Title: "document that system() does not set $! when it fails"
- From: "Mark R. Levinson" <mrl@isc.upenn.edu>
- Msg-ID: <199803011946.OAA31942@anaximander.dccs.upenn.edu>
- Files: pod/perlfunc.pod
-
- Title: "Fix pod/roffitall execute permission"
- From: lvirden@cas.org
- Msg-ID: <1997Nov17.132031.2589892@cor.newman>
- Files: pod/roffitall
-
- Title: "document when split ignores trailing empty fields"
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Msg-ID: <l03130300b14fac832b77@[194.222.64.89]>
- Files: pod/perlfunc.pod
-
- ------ EXTENSIONS ------
-
- Title: "Buglet in Opcode.pm documentation"
- From: Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
- Msg-ID: <199804170349.XAA32445@sleipnir.valparaiso.cl>
- Files: ext/Opcode/Opcode.pm
-
- Title: "Failure to append to perllocal.pod should not be fatal"
- From: koenig@kulturbox.de (Andreas J. Koenig)
- Msg-ID: <sfciuogy67x.fsf@dubravka.in-berlin.de>
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Document that IO.pm does not load IO::Select etc"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <353B48F1.64E35A63@ti.com>
- Files: ext/IO/IO.pm
-
- Title: "Install extensions with bootstrap (again) in $archlib"
- From: Achim Bohnet <ach@mpe.mpg.de>, koenig@kulturbox.de (Andreas J.
- Koenig)
- Msg-ID: <9804061909.AA12675@o09.xray.mpe.mpg.de>,
- <sfc90oxc0uj.fsf@dubravka.in-berlin.de>
- Files: lib/ExtUtils/Install.pm
-
- Title: "glibc2.0.6 missing MSG_* <sys/socket.h> defines."
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980406113950.3166L-100000@newton.phys>
- Files: ext/Socket/Socket.xs
-
- ------ LIBRARY ------
-
- Title: "Benchmark.pm: add run-for-some-time mode"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199804080647.JAA15136@alpha.hut.fi>
- Files: lib/Benchmark.pm
-
- Title: "Comments added to Carp.pm"
- From: Andy Wardley <abw@cre.canon.co.uk>, Chip Salzenberg
- <chip@perlsupport.com>, Tom Christiansen
- <tchrist@jhereg.perl.com>
- Msg-ID: <19980422164242.E29222@perl.org>,
- <199804222033.OAA17959@jhereg.perl.com>,
- <980409182357.ZM21638@bandanna>
- Files: lib/Carp.pm
-
- Title: "chat2.pl fix"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IVMVF507PO001NKH@cor.newman.upenn.edu>
- Files: lib/chat2.pl
-
- Title: "lib/Pod/Html.pm"
- From: d-lewart@uiuc.edu (Daniel S. Lewart)
- Msg-ID: <199710170718.DAA25472@staff1.cso.uiuc.edu>,
- <199710180417.AAA19778@staff2.cso.uiuc.edu>
- Files: lib/Pod/Html.pm
-
- Title: "ormaments method in Term/ReadLine.pm causes warning with string
- arg."
- From: hiroo.hayashi@computer.org
- Msg-ID: <199804061519.AAA21907@mail.fb3.so-net.ne.jp>
- Files: lib/Term/ReadLine.pm
-
- ------ OTHER CHANGES ------
-
- Title: "ptags broken"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199804120208.WAA29264@monk.mps.ohio-state.edu>
- Files: emacs/ptags
-
- ------ PORTABILITY - WIN32 ------
-
- Title: "win32 tweaks (signals and crypt support)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804170505.BAA06413@aatma.engin.umich.edu>
- Files: perl.h win32/config.bc win32/config.vc win32/config_H.bc
- win32/config_H.vc win32/win32.c
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Add Social Contract (2nd Draft) as Porting/Contract"
- From: Russ Allbery <rra@stanford.edu>
- Msg-ID: <m3btw66n8i.fsf@windlord.Stanford.EDU>
- Files: Porting/Contract
-
- Title: "Config: Irix 5 hints"
- From: kstar@O2.chapin.edu
- Msg-ID: <199804061712.NAA22823@O2.chapin.edu>
- Files: hints/irix_5.sh
-
- Title: "VMS patches to 5.004_03"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IVYJS0L8D200209B@cor.newman.upenn.edu>
- Files: vms/vms.c
-
- Title: "hints/netbsd.sh - enable vfork"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980417110749.19327B-100000@newton.phys>
- Files: hints/netbsd.sh
-
- ------ UTILITIES ------
-
- Title: "support find2perl -follow"
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Msg-ID: <Pine.SV4.3.93.980408005903.24081A-100000@ermintrude.teaching.cs.adelaide.edu.au>
- Files: x2p/find2perl.PL
-
-Change 896 on 1998/04/22 by TimBunce@ig.co.uk
-
- Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "Additional regex-cache patch"
- From: Chip Salzenberg <chip@atlantic.net>
- Msg-ID: <19980305104831.38100@cyprus>
- Files: pp_ctl.c
-
- Title: "Conservative C<*x = undef> patch"
- From: Chip Salzenberg <chip@atlantic.net>
- Msg-ID: <19980310163310.48509@cyprus>
- Files: pod/perldiag.pod pod/perlfunc.pod pp.c sv.c t/op/gv.t
-
- Title: "Consider @ARGV to be plain files if inplace (-i)"
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Msg-ID: <199802042106.QAA04082@nielsenmedia.com>
- Files: doio.c
-
- Title: "Fix semctl for Linux, Sun and SVR4"
- From: Graham Barr <gbarr@ti.com>, lvirden@cas.org (Larry W. Virden, x2487)
- Msg-ID: <3484247D.BB036D39@ti.com>, <9712021313.AA11495@cas.org>
- Files: doio.c
-
- Title: "C<dSP> entails using C<SP>, not C<sp>"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803070149.UAA12217@aatma.engin.umich.edu>
- Files: pod/perlcall.pod pod/perlembed.pod pod/perlguts.pod pod/perlxs.pod
- doio.c doop.c ext/DB_File/DB_File.xs
- ext/DynaLoader/dl_dld.xs ext/Opcode/Opcode.xs
- ext/POSIX/POSIX.xs ext/Socket/Socket.xs gv.c
- lib/ExtUtils/typemap mg.c os2/OS2/REXX/REXX.xs
- win32/win32.c
-
- Title: "Make autouse -w-safe"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199803030236.VAA13244@monk.mps.ohio-state.edu>
- Files: lib/autouse.pm op.c sv.c
-
- Title: "Misleading error on close of unopened handle"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0y4R07-0003PH-00@ursa.cus.cam.ac.uk>
- Files: doio.c
-
- Title: "Confusing error from perl -e "x'""
- From: Hans Mulder <hansmu@xs4all.nl>
- Msg-ID: <1998Mar25.174320.2866352@cor.newman.upenn.edu>
- Files: toke.c
-
- Title: "Add HAS_GNULIBC define"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305115202.9180K-100000@newton.phys>
- Files: config_H config_h.SH
-
- Title: "h_errno might not be an int"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980325165059.22255D-100000@newton.phys>
- Files: pp_sys.c
-
- Title: "Revised taint hole closer", "Revised taint hole closer"
- From: Chip Salzenberg <chip@atlantic.net>, Ilya Zakharevich
- <ilya@math.ohio-state.edu>
- Msg-ID: <19980310222127.09350@cyprus>,
- <199803110554.AAA29157@monk.mps.ohio-state.edu>
- Files: doio.c
-
- Title: "SEGV compiling localised lexical in perl5.004_05t1"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, h.sanden@elsevier.nl (Hugo
- van der Sanden)
- Msg-ID: <199803171530.QAA24053@dorlas.elsevier.nl>,
- <199803171727.MAA05234@aatma.engin.umich.edu>
- Files: op.c t/op/misc.t
-
- Title: "Stale SP in pp_substr"
- From: Stephen McCamant <alias@mcs.com>
- Msg-ID: <m0yFsTS-000EZpC@alias-2.pr.mcs.net>
- Files: pp.c
-
- Title: "Statement unlikely to be reached warning"
- From: Hans Mulder <hansm@icgned.nl>
- Msg-ID: <1997Dec24.171511.2683516@cor.newman>
- Files: op.c
-
- Title: "Tainting propagates from nowhere"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803140411.XAA09343@aatma.engin.umich.edu>
- Files: pp.c
-
- Title: "two trivial tweaks to 5.004m5t1"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803060553.AAA28461@aatma.engin.umich.edu>
- Files: proto.h win32/Makefile
-
- Title: "unpacking negatives on Alpha"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9710201503.AA24797@o09.xray.mpe.mpg.de>
- Files: pp.c t/op/pack.t
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "Cwd.pm: abs_path() and fast_abs_path() plus code merge"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <3482F365.4A0486BA@ti.com>
- Files: lib/Cwd.pm
-
- Title: "Math/BigInt.pm, fixed use of undefined value."
- From: abigail@fnx.com
- Msg-ID: <19980313052452.27365.qmail@betelgeuse.wayne.fnx.com>
- Files: lib/Math/BigInt.pm
-
- Title: "File::Find rewrite"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199803052344.SAA01008@monk.mps.ohio-state.edu>
- Files: lib/File/Find.pm
-
- Title: "efficient version of strict.pm"
- From: koenig@anna.mind.de (Andreas J. Koenig)
- Msg-ID: <sfcpvonhdnc.fsf@anna.in-berlin.de>
- Files: lib/strict.pm
-
- Title: "Socket occasional SEGV in pack_sockaddr_un"
- From: Trevor Blackwell <tlb@viaweb.com>
- Msg-ID: <199710281804.NAA09632@wagg.viaweb.com>
- Files: ext/Socket/Socket.xs
-
- Title: "Warning on mis-use of 'use lib'"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Tom Phoenix
- <rootbeer@teleport.com>, chip@atlantic.net
- Msg-ID: <199801270435.XAA14147@cyprus.atlantic.net>,
- <E0xx9x4-0006jc-00@ursa.cus.cam.ac.uk>,
- <Pine.GSO.3.96.980126192445.22284N-100000@user2.teleport.com>
- Files: lib/lib.pm
-
- Title: "bug in Class::Struct"
- From: Tom Christiansen <tchrist@toy.perl.com>
- Msg-ID: <199803290814.KAA05699@toy.perl.com>
- Files: lib/Class/Struct.pm
-
- Title: "Allow POSIX to export nice()"
- From: bkeelerx@iwa.dp.intel.com (Bruce J. Keeler)
- Msg-ID: <eclg1kf5yf0.fsf@ws010.dp.intel.com>
- Files: ext/POSIX/POSIX.pm
-
- Title: "'use Env' on WinNT/95 fails"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803280511.AAA15933@aatma.engin.umich.edu>
- Files: lib/Env.pm
-
- ------ OTHER CHANGES ------
-
- Title: "mv-if-diff"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Msg-ID: <14572.9803271806@tempest.cise.npl.co.uk>
- Files: mv-if-diff
-
- ------ PORTABILITY - WIN32 ------
-
- Title: "fix various problems with backticks on win32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803070705.CAA15945@aatma.engin.umich.edu>
- Files: win32/config_h.PL win32/win32.c
-
- ------ TESTS ------
-
- Title: "Fix bug in locale.t"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199801042148.XAA08599@alpha.hut.fi>
- Files: t/pragma/locale.t
-
-Change 887 on 1998/04/10 by TimBunce@ig.co.uk
-
- Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "Re: die exits with 0"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Files: perl.c t/op/die_exit.t
-
- Title: "More toke.c commentary; fix oddity"
- From: h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <199803251022.LAA01308@dorlas.elsevier.nl>
- Files: toke.c
-
- Title: "for semctl on solaris"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <34624B80.C014E841@ti.com>
- Files: doio.c t/op/ipcmsg.t t/op/ipcsem.t
-
- ------ DOCUMENTATION ------
-
- Title: "Add more 'see also's to perlre.pod.", "Perl regexp /g modifier bug"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>, epeschko@den-mdev1 (Ed
- Peschko), pjr@watcher.telstra.com.au (Peter Richardson)
- Msg-ID: <199803050000.LAA11476@watcher.telecom.com.au>,
- <199803050231.VAA19128@monk.mps.ohio-state.edu>,
- <199803050605.XAA09785@den-mdev1.co.csgsystems.com>
- Files: pod/perlre.pod
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "BigFloat - small neagtive numbers cause panic"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711201325.NAA09732@crypt.compulink.co.uk>
- Files: lib/Math/BigFloat.pm
-
- Title: "Update Getopt::Long to 2.16"
- From: JVromans@Squirrel.nl (Johan Vromans), Johan Vromans
- <jvromans@squirrel.nl>
- Msg-ID: <13571.48089.726787.147769@plume.nl.compuware.com>,
- <13572.6847.863219.973795@phoenix.squirrel.nl>
- Files: lib/Getopt/Long.pm
-
- Title: "New Text::ParseWords"
- From: pomeranz@netcom.com (Hal Pomeranz)
- Msg-ID: <199710162118.OAA06275@netcom7.netcom.com>
- Files: lib/Text/ParseWords.pm t/lib/parsewords.t
-
- Title: "Fixed Text/Wrap.pm bugs (2)"
- From: Jacqui Caren <Jacqui.Caren@ig.co.uk>
- Msg-ID: <199709291548.QAA08645@toad.ig.co.uk>
- Files: lib/Text/Wrap.pm
-
- Title: "Very *evil* File::CheckTree behavior! (now uses warn/die not
- print/exit)"
- From: Eryq <eryq@zeegee.com>, Randal Schwartz <merlyn@stonehenge.com>
- Msg-ID: <34B542FD.190A@zeegee.com>, <8cen2i9k6f.fsf@gadget.cscaper.com>
- Files: lib/File/CheckTree.pm
-
- ------ OTHER CHANGES ------
-
- Title: "Add ./emacs/ptags"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199803150847.DAA08196@monk.mps.ohio-state.edu>
- Files: emacs/ptags
-
- ------ TESTS ------
-
- Title: "Avoid stat test failure from build in /tmp (tmpfs)", "Build in /tmp"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>, Greg Bacon
- <gbacon@adtran.com>, pudge@pobox.com (Chris Nandor)
- Msg-ID: <199710171616.LAA13435@crp-201.adtran.com>,
- <Pine.SUN.3.96.971017171023.2349A-100000@newton.phys>,
- <v02130515b06be80f1486@[205.228.240.16]>
- Files: t/op/stat.t
-
- Title: "for failure with lib/timelocal"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, jan.dubois@ibm.net (Jan Dubois)
- Msg-ID: <34c78f61.2529827@smtp1.ibm.net>,
- <E0xvdfI-00057d-00@ursa.cus.cam.ac.uk>
- Files: t/lib/timelocal.t
-
- Title: "Make "localhost" related failures more clear"
- From: Paul Hoffman <phoffman@proper.com>
- Msg-ID: <199801201859.KAA05686@mail.proper.com>
- Files: t/lib/io_sock.t t/lib/io_udp.t
-
- ------ UTILITIES ------
-
- Title: "Let h2xs read multiple header files"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>, Benjamin Sugars
- <bsugars@canoe.ca>
- Msg-ID: <Pine.SOL.3.95.980310091946.25236A-100000@interact>,
- <Pine.SUN.3.96.980310145455.638A-100000@newton.phys>
- Files: utils/h2xs.PL
-
-Change 886 on 1998/04/10 by TimBunce@ig.co.uk
-
- Changes relating primarily to portability.
-
- ------ CORE LANGUAGE ------
-
- Title: "5.004_55: Another round of OS/2 patches"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199803050945.EAA20153@monk.mps.ohio-state.edu>
- Files: hints/os2.sh pod/perlguts.pod cop.h perl.h proto.h README.os2
- global.sym lib/ExtUtils/MM_OS2.pm lib/File/Path.pm op.c
- os2/Changes os2/Makefile.SHs os2/os2.c os2/perl2cmd.pl
- perl.c pod/pod2man.PL pp_ctl.c pp_hot.c pp_sys.c
- t/lib/filecopy.t util.c utils/perldoc.PL
-
- Title: "VMS: chdir() with empty arg list"
- From: lane@duphy4.drexel.edu (Charles Lane)
- Msg-ID: <980317125556.222041c7@DUPHY4.Physics.Drexel.Edu>
- Files: pp_sys.c
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "ExtUtils/MM_Unix.pm changed to use ld -rpath on IRIX"
- From: "W. Phillip Moore" <wpm@ms.com>
- Msg-ID: <199712011738.MAA21139@zappa.morgan.com>
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "[Linux] POSIX::_[PS]C_.+ bug (add HINT_SC_EXIST)"
- From: Yutaka OIWA <oiwa@is.s.u-tokyo.ac.jp>
- Msg-ID: <199712251923.EAA08260@tjms1f.is.s.u-tokyo.ac.jp>
- Files: ext/POSIX/hints/linux.pl ext/POSIX/POSIX.xs
-
- Title: "5.004_04-m1] Use HAS_GNULIBC in POSIX.xs"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305115517.9180L-100000@newton.phys>
- Files: ext/POSIX/POSIX.xs
-
- Title: ""ODBM_File.c", line 275: NULL undefined"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9803091310.AA23264@claudius.bfsec.bt.co.uk>
- Files: ext/ODBM_File/ODBM_File.xs
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "5.004_04 QNX getcwd"
- From: Norton Allen <allen@huarp.harvard.edu>
- Msg-ID: <199802121838.NAA20452@dolores.harvard.edu>,
- <199803061511.KAA22346@bottesini.harvard.edu>
- Files: hints/qnx.sh lib/Cwd.pm t/op/magic.t
-
- Title: "hints/netbsd.sh d_setrgid d_setruid"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802281435.QAA10866@alpha.hut.fi>
- Files: hints/netbsd.sh
-
- Title: "osname=unixware, osvers=2.03, archname=i386-unixware
- d_casti32=undef"
- From: Tom Hughes <tom@compton.demon.co.uk>
- Msg-ID: <465398da47%tom@compton.demon.co.uk>
- Files: hints/svr4.sh
-
- Title: "hints/bsdos.sh patch for BSDI 3.1"
- From: Jan-Pieter Cornet <johnpc@xs4all.nl>
- Msg-ID: <6fbip6$3cp$1@xs1.xs4all.nl>
- Files: hints/bsdos.sh
-
- Title: "Remove BIND_NOSTART from DynaLoader for HP"
- From: Keong Lim <Keong.Lim@sr.com.au>
- Msg-ID: <01BD1D03.53B65E90@sieplan2.sr.com.au>
- Files: ext/DynaLoader/dl_hpux.xs
-
- Title: "Building Perl on AIX 4+ with shared libraries and dynamic loading"
- From: Juan Gallego <Little.Boss@physics.mcgill.ca>
- Msg-ID: <Pine.SGI.3.91.971022084517.17052F-100000@nazgul.physics.mcgill.ca>
- Files: hints/aix.sh
-
- Title: "alpha-dec_osf 5.0"
- From: Spider Boardman <spider@Orb.Nashua.NH.US>
- Msg-ID: <199712232305.SAA08359@Orb.Nashua.NH.US>
- Files: hints/dec_osf.sh
-
- Title: "Off-by-one error with OS2::PrfDB"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710170920.FAA00390@monk.mps.ohio-state.edu>
- Files: os2/OS2/PrfDB/PrfDB.xs
-
- Title: "5.004_04-m1] Allow overrides in hints/openbsd.sh"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305115956.9180N-100000@newton.phys>
- Files: hints/openbsd.sh
-
- Title: "5.004_04-m1] Linux shouldn't use -lnet"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305115843.9180M-100000@newton.phys>
- Files: hints/linux.sh
-
- Title: "5.004_(04|63)] Close VMS security hole"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IV6LRJCSSC0009C4@cor.newman.upenn.edu>
- Files: vms/vms.c
-
- Title: "Re: Perl online documentation on OpenVMS"
- From: pvhp@forte.com (Peter Prymmer)
- Msg-ID: <9803192143.AA28120@forte.com>
- Files: README.vms
-
- Title: "Perl5.004_04m4t4 *almost* makes it for VMS", "Updated
- vms/perly_c.vms and vms/perly_h.vms"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>, Dan Sugalski
- <sugalskd@osshe.edu>, larry@wall.org (Larry Wall)
- Msg-ID: <199710151650.JAA29185@wall.org>,
- <3.0.3.32.19971014150404.02fdef78@osshe.edu>,
- <Pine.SUN.3.96.971015121704.28456F-100000@newton.phys>
- Files: vms/perly_c.vms
-
- Title: "Updated, non-wordwrapped, patch to README.VMS"
- From: Dan Sugalski <sugalskd@osshe.edu>
- Msg-ID: <3.0.5.32.19980213133828.0092c870@osshe.edu>
- Files: README.vms
-
- Title: "VMS patches to 5.004_03 (excluding installperl and timelocal.t)"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01INZT9G2LZS0006YW@cor.newman.upenn.edu>
- Files: lib/File/Basename.pm lib/File/Path.pm vms/config.vms vms/descrip.mms
- vms/genconfig.pl vms/test.com vms/vms.c vms/ext/Filespec.pm
- vms/ext/filespec.t
-
- Title: "Re: VMSperl crashes on -Mblib argument"
- From: bailey@newman.upenn.edu (Charles Bailey)
- Msg-ID: <1997Dec10.004439.2635060@cor.newman>
- Files: lib/blib.pm vms/vms.c
-
- Title: "hints/linux.sh (MkLinux / PPC)"
- From: pudge@pobox.com (Chris Nandor)
- Msg-ID: <v0213050cb06c19682a25@[205.228.240.28]>
- Files: hints/linux.sh
-
- Title: "hpux.sh hints file clarification suggestion"
- From: root@qad.com
- Msg-ID: <199802192351.QAA09096@jhereg.perl.com>
- Files: hints/hpux.sh
-
- Title: "new hints/solaris_2.sh"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0xw80h-0005SV-00@ursa.cus.cam.ac.uk>
- Files: hints/solaris_2.sh
-
-Change 873 on 1998/04/03 by TimBunce@ig.co.uk
-
- Title: "FileHandle Documentation patch"
- From: "Darren/Torin/Who Ever..." <torin@daft.com>
- Msg-ID: <87emzqo49g.fsf@perv.daft.com>
- Files: lib/FileHandle.pm
-
-Change 872 on 1998/04/03 by TimBunce@ig.co.uk
-
- Documentation and documentation related patches:
-
- ------ BUILD PROCESS ------
-
- Title: "Docs re /usr/bin/perl quasi-standard location"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971117080737.12318C-100000@usertest.teleport.com>
- Files: INSTALL pod/perlrun.pod
-
- ------ DOCUMENTATION ------
-
- Title: "/RFC|RFC-1305/ non-greedy"
- From: Jan-Pieter Cornet <johnpc@xs4all.nl>
- Msg-ID: <6epo02$c4r$1@xs1.xs4all.nl>
- Files: pod/perlre.pod
-
- Title: "5.004_04: perlhist.pod, buildtoc, perltoc.pod"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802191543.RAA29231@alpha.hut.fi>
- Files: pod/perl.pod pod/perlhist.pod pod/perltoc.pod pod/buildtoc
-
- Title: "5.004_04: pod/perlfunc.pod: i18n example for localtime()"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199711141555.RAA18875@alpha.hut.fi>
- Files: pod/perlfunc.pod
-
- Title: "typo-fix and suggestion for perlguts.pod"
- From: h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <199803051543.QAA03097@dorlas.elsevier.nl>
- Files: pod/perlguts.pod
-
- Title: "perlfunc/syscall curiosity"
- From: Roderick Schertler <roderick@argon.org>, Tkil
- <tkil@reptile.scrye.com>
- Msg-ID: <199711302259.PAA02134@reptile.scrye.com>,
- <pziut8snva.fsf@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod
-
- Title: "Document sprintf %#x behaviour for zero value"
- From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Msg-ID: <1997Nov5.185959.2539604@cor.newman>
- Files: pod/perlfunc.pod
-
- Title: "NUL termination (was Re: STOP THE PRESSES)"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0xsn5M-0002gw-00@ursa.cus.cam.ac.uk>
- Files: pod/perlguts.pod
-
- Title: "Typo fix."
- From: abigail@fnx.com
- Msg-ID: <19971101120114.1030.qmail@betelgeuse.wayne.fnx.com>
- Files: pod/perlop.pod pod/perlvar.pod
-
- Title: "5.004_63 perlrun.pod: _DEBUG_MSTATS"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9803181940.AA22587@o09.xray.mpe.mpg.de>
- Files: pod/perlrun.pod
-
- Title: "Re: Conservative C<*x = undef> patch"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yCjHT-0005Dt-00@ursa.cus.cam.ac.uk>
- Files: pod/perltrap.pod
-
- Title: "perlfunc.pod for flock()"
- From: "Jeremy D. Zawodny" <jzawodn@wcnet.org>
- Msg-ID: <3.0.5.32.19971118203119.00a723e0@woody.wcnet.org>
- Files: pod/perlfunc.pod
-
- Title: "buglet: 'perltoc' not mentioned in perl.pod"
- From: Tkil <tkil@scrye.com>
- Msg-ID: <19971127035036.17668.qmail@scrye.com>
- Files: pod/perl.pod
-
- Title: "for() and map() peculiarity"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0y4YAa-0003Qu-00@ursa.cus.cam.ac.uk>
- Files: pod/perlsyn.pod
-
- Title: "Re: new text for perlsec"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980328100418.22321T-100000@user2.teleport.com>
- Files: pod/perlsec.pod
-
- Title: "perldsc's debugger x command"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <10669.878352893@eeyore.ibcinc.com>
- Files: pod/perldsc.pod
-
- Title: "perlre.pod"
- From: Ted Ashton <ashted@southern.edu>
- Msg-ID: <199802271501.KAA09279@ns.southern.edu>
- Files: pod/perlre.pod
-
- Title: "Re: printf and $\", "printf and $\"
- From: Roderick Schertler <roderick@argon.org>, Tom Phoenix
- <rootbeer@teleport.com>, nag <nick@flirble.org>
- Msg-ID: <199711141918.TAA08096@flirble.org>,
- <Pine.GSO.3.96.971117085421.12318J-100000@usertest.teleport
- .com>, <pzyb2ncr42.fsf@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod
-
- Title: "recv() typo"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <12064.877012073@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod
-
- Title: "truncate return value"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <5490.878337883@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod
-
- Title: "update to perlbook.pod"
- From: "Nathan V. Patwardhan" <nvp@mediaone.net>, Randal Schwartz
- <merlyn@stonehenge.com>, Stephen Potter
- <spp@psasolar.colltech.com>, Tom Phoenix
- <rootbeer@teleport.com>
- Msg-ID: <199803241354.HAA23938@psasolar.psa.pencom.com>,
- <199803241441.OAA01261@mediaone.net>,
- <8clnu0i05k.fsf@gadget.cscaper.com>,
- <Pine.GSO.3.96.980324111957.15753C-100000@user1.teleport.com>
- Files: pod/perlbook.pod
-
- Title: "utime documentation"
- From: "Brandon S. Allbery KF8NH" <bsa@kf8nh.apk.net>, "M.J.T. Guy"
- <mjtg@cus.cam.ac.uk>
- Msg-ID: <199802180256.VAA11369@speaker.kf8nh.apk.net>,
- <E0y4qd6-0000P6-00@ursa.cus.cam.ac.uk>
- Files: pod/perlfunc.pod
-
- Title: "(well, doc patch) use of // requires successful match"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <pz7mb4bips.fsf@eeyore.ibcinc.com>
- Files: pod/perlop.pod
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "MakeMaker PM doc patch and a DIR buglet"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9711101050.AA13868@o09.xray.mpe.mpg.de>
- Files: lib/ExtUtils/MakeMaker.pm
-
- Title: "bareword clarification for constant.pm"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <6460.878143077@eeyore.ibcinc.com>
- Files: lib/constant.pm
-
- Title: "integer rand - bug or feature?"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <pzhg8lvgta.fsf@eeyore.ibcinc.com>
- Files: lib/integer.pm
-
- ------ OTHER CHANGES ------
-
- Title: "FileHandle Documentation patch"
- From: "Darren/Torin/Who Ever..." <torin@daft.com>
- Msg-ID: <87emzqo49g.fsf@perv.daft.com>
-
- Title: "perl5.004_61 myconfig updates"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305150629.11530G-100000@newton.phys>
- Files: myconfig
-
- Title: "small fixups in pod2latex.PL"
- From: "Darren/Torin/Who Ever..." <torin@daft.com>
- Msg-ID: <873eg6o3v2.fsf@perv.daft.com>
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Misc doc fixes for README.VMS"
- From: Dan Sugalski <sugalskd@osshe.edu>
- Msg-ID: <3.0.5.32.19980121113134.00924a20@osshe.edu>
- Files: README.vms
-
- Title: "moved DynaLib"
- From: John Tobey <jtobey@channel1.com>
- Msg-ID: <199710182332.XAA21630@remote212>
- Files: ext/DynaLoader/DynaLoader.pm.PL
-
- ------ UTILITIES ------
-
- Title: "Searching for FAQs (patch to perldoc)"
- From: Piers Cawley <pdcawley@bofh.org.uk>, Russ Allbery <rra@stanford.edu>
- Msg-ID: <m3d8gsb8uk.fsf@windlord.Stanford.EDU>,
- <m3iuqkfmiq.fsf@tower.bofh.org.uk>
- Files: utils/perldoc.PL
-
- Title: "perldoc"
- From: Ted Ashton <ashted@southern.edu>
- Msg-ID: <199802271510.KAA10506@ns.southern.edu>
- Files: utils/perldoc.PL
-
- Title: "perldoc -f not using pod2man"
- From: Russ Allbery <rra@stanford.edu>
- Msg-ID: <m3hg4f9vyy.fsf@windlord.Stanford.EDU>
- Files: utils/perldoc.PL
-
- Title: "perldoc -m should not require pod"
- From: Robin Houston <robin@nml.guardian.co.uk>
- Msg-ID: <199803241319.NAA24777@stringfellow.guardian.co.uk>
- Files: utils/perldoc.PL
-
- Title: "small fix for perldoc in perl 5.004_04"
- From: Julian Yip <julian@imoney.com>
- Msg-ID: <Roam.SIMC.2.0.6.884805579.5280.julian@imoney.com>
- Files: utils/perldoc.PL
-
-Change 764 on 1998/03/05 by TimBunce@ig.co.uk
-
- APPLLIB_EXP now has arch and version dirs added to @INC
-
-Change 761 on 1998/03/05 by TimBunce@ig.co.uk
-
- Title: "properly refcount localization, fix C<local $tied{foo}>"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802191207.MAA10742@toad.ig.co.uk>
- Files: av.c hv.c scope.c t/op/local.t
-
-Change 758 on 1998/03/04 by TimBunce@ig.co.uk
-
- perldoc -f now uses pager if text is too long for screen
-
-Change 757 on 1998/03/04 by TimBunce@ig.co.uk
-
- Added OpenBSD hint file from <Todd.Miller@courtesan.com>
- Document 'warn with no args' behaviour, from <johnpc@xs4all.net>
-
-Change 756 on 1998/03/04 by TimBunce@ig.co.uk
-
- Fix for new gnulibc stdio.h when using sfio+perlio
-
-Change 755 on 1998/03/04 by TimBunce@ig.co.uk
-
- Fixed typo in vms/ext/Stdio/Stdio.pm AUTOLOAD
- Added details of split in scalar context to perlfunc.pod
-
-Change 754 on 1998/03/04 by TimBunce@ig.co.uk
-
- Updated perl -v info to include reference to docs and home page.
-
-Change 753 on 1998/03/04 by TimBunce@ig.co.uk
-
- Updated hints/bsdos.sh for BSD/OS 3.1
- Fixed typo in pod/perlsyn.pod
- Added workaround for old gmake in ext/SDBM_File/sdbm/Makefile.PL
- Fixed typo in ext/GDBM_File/GDBM_File.pm
-
-Change 752 on 1998/03/04 by TimBunce@ig.co.uk
-
- Changed bug address in README to perlbug@perl.com
- Changed Copyright in perl.c to 1998
- Added op/pos.t test from Robin Houston <robin@oneworld.org>
-
-Change 751 on 1998/03/04 by TimBunce@ig.co.uk
-
- Make t/comp/require.t and t/lib/ph.t executable in repository
-
-Change 750 on 1998/03/04 by TimBunce@ig.co.uk
-
- Added dTHR definition to ease backwards compatibility for XS
- source code from 5.005.
-
-Change 749 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "rename local 'op' variables to 'o'", #F114
- From: Gurusamy Sarathy
- Files: op.h opcode.h proto.h dump.c op.c opcode.pl pp_ctl.c run.c scope.c
- toke.c
-
-Change 748 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "consolidated win32 patch", #F112
- From: Gurusamy Sarathy
- Files: MANIFEST pod/perlfaq2.pod pod/perlrun.pod win32/include/sys/socket.h
- EXTERN.h INTERN.h dosish.h lib/ExtUtils/Command.pm
- lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm
- lib/ExtUtils/Mksymlists.pm lib/File/DosGlob.pm t/TEST
- t/harness win32/win32.h win32/win32iop.h README.win32
- doio.c installhtml installperl pp_sys.c win32/Makefile
- win32/config.bc win32/config.vc win32/config_H.bc
- win32/config_H.vc win32/config_h.PL win32/config_sh.PL
- win32/dl_win32.xs win32/makedef.pl win32/makefile.mk
- win32/perllib.c win32/runperl.c win32/win32.c
- win32/win32sck.c win32/bin/perlglob.pl x2p/a2p.h x2p/a2p.c
- x2p/a2py.c
-
-Change 747 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "initialize @INC in ph.t, and fix up MANIFEST", #F111
- From: Gurusamy Sarathy
- Files: MANIFEST t/lib/ph.t
-
-Change 746 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "properly save STDOUT during system() in debugger", #F110
- From: Jason Smith <smithj4@rpi.edu>
- Files: lib/perl5db.pl
-
-Change 745 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "generate DynaLoader.pm at build time", #F109
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9802111938.AA26224@o09.xray.mpe.mpg.de>
- Files: MANIFEST ext/DynaLoader/DynaLoader.pm.PL ext/DynaLoader/Makefile.PL
-
-Change 744 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "Install extensions with bootstrap in $archlib", #F108
- From: koenig@anna.mind.de (Andreas J. Koenig), koenig@kulturbox.de (Andreas
- J. Koenig)
- Msg-ID: <sfcra9fqx0n.fsf@anna.in-berlin.de>
- Files: lib/ExtUtils/Install.pm
-
-Change 743 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "Pod::Html trips over "C<0>"", #F107
- From: Chip Salzenberg
- Files: lib/Pod/Html.pm
-
-Change 742 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "5.004_58 | _04: pod2*,perlpod: L<show this|man/section>", #F106
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9802111629.AA00595@o09.xray.mpe.mpg.de>
- Files: pod/perlpod.pod lib/Pod/Html.pm lib/Pod/Text.pm pod/pod2man.PL
-
-Change 741 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "New patch for $^E==GetLastError() under Win32", #F105
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Tye McQueen
- <tye@metronet.com>, ilya@math.ohio-state.edu (Ilya
- Zakharevich)
- Msg-ID: <199801040630.AA29298@metronet.com>,
- <199801041826.NAA11568@aatma.engin.umich.edu>,
- <1998Jan4.130412.2719461@cor.newman>
- Files: pod/perlfunc.pod pod/perlvar.pod doio.c lib/dumpvar.pl lib/perl5db.pl
- win32/win32.h mg.c util.c win32/makedef.pl win32/win32.c
-
-Change 740 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "5.004_56: Patch to Tie::Hash and docs", #F104
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199801120134.UAA05437@monk.mps.ohio-state.edu>
- Files: pod/perlfunc.pod lib/Tie/Hash.pm
-
-Change 739 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "more doc for perldoc", #F103
- From: Gurusamy Sarathy
- Files: utils/perldoc.PL
-
-Change 738 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "Make perldoc look for an index file ", #F102
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <199801221220.NAA22902@furu.g.aas.no>
- Files: utils/perldoc.PL
-
-Change 737 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "perldoc -F filename", #F101
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199712120037.TAA00176@math.mps.ohio-state.edu>
- Files: utils/perldoc.PL
-
-Change 736 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "sv_grow can fail for HAS_64K_LIMIT systems", #F100
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3iuqsl3oq.fsf@furu.g.aas.no>
- Files: sv.c
-
-Change 735 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "Benchmark.pm: timethese corrupts $_", #F099
- From: abigail@fnx.com
- Msg-ID: <19980201114609.7779.qmail@betelgeuse.wayne.fnx.com>
- Files: lib/Benchmark.pm
-
-Change 734 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "STRANGE_MALLOC should test failed alloc", #F098
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <199802021406.PAA03285@furu.g.aas.no>
- Files: hv.c
-
-Change 733 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "support caseless %ENV", #F097
- From: Gurusamy Sarathy
- Files: hv.c t/op/magic.t win32/win32.h
-
-Change 732 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "newer cperl-mode.el (from 5.004_60)", #F096
- From: Ilya Zakharevich
- Files: emacs/cperl-mode.el
-
-Change 731 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "Handle set magic on xsub OUTPUT args, add API functions that handle
- magic", #F095
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199801190409.XAA26710@aatma.engin.umich.edu>
- Files: pod/perlguts.pod pod/perlxs.pod embed.h proto.h sv.h global.sym
- lib/ExtUtils/xsubpp sv.c
-
-Change 730 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "Fix flawed cleanup when signal handlers are not defined", #F094
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710290106.UAA11485@aatma.engin.umich.edu>
- Files: mg.c
-
-Change 729 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "Tests for C<sort 'foo','bar'>", #F093
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711021247.MAA01743@crypt.compulink.co.uk>
- Files: t/op/sort.t
-
-Change 728 on 1998/03/04 by TimBunce@ig.co.uk
-
- Title: "Make search.pl work on win32", #F092
- From: Gurusamy Sarathy
- Files: win32/bin/search.pl
-
-Change 721 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix spurious perldoc warnings on DOSISH platforms", #F091
- From: Molnar Laszlo <molnarl@cdata.tvnet.hu>
- Msg-ID: <34475659.1AA69855@cdata.tvnet.hu>
- Files: utils/perldoc.PL
-
-Change 720 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Make ExtUtils::MM_Unix::fixin() do something meaningful on win32",
- #F090
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199801070016.TAA17766@aatma.engin.umich.edu>
- Files: lib/ExtUtils/MM_Unix.pm
-
-Change 719 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix inconsistent case $ENV{Path} (vs $ENV{PATH})", #F089
- From: Gurusamy Sarathy
- Files: lib/FindBin.pm
-
-Change 718 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix File::Find's longstanding confusion about win32 being like VMS",
- #F088
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802020459.XAA04964@aatma.engin.umich.edu>
- Files: lib/File/Find.pm
-
-Change 717 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "do_postponed breaks with multiple interpreters", #F087
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710290316.WAA15888@aatma.engin.umich.edu>
- Files: op.c
-
-Change 716 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Make warning on C<Nosuch::> optional, add to perl{diag,delta}.pod",
- #F086
- From: Gurusamy Sarathy
- Files: pod/perldelta.pod pod/perldiag.pod toke.c
-
-Change 715 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Pod::Html bug and fix: missing </UL> in index", #F085
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802192314.SAA23326@aatma.engin.umich.edu>
- Files: lib/Pod/Html.pm
-
-Change 714 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "New pod: perlhist", #F084
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802191556.RAA09578@alpha.hut.fi>
- Files: MANIFEST pod/perl.pod pod/perlhist.pod pod/perltoc.pod pod/buildtoc
-
-Change 713 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix restoration of locals on scope unwinding", #F083
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802110515.AAA23700@aatma.engin.umich.edu>
- Files: pp_ctl.c t/op/local.t
-
-Change 712 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "after an eval-ed bad require, requiring a string ref SEGVs", #F082
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802102349.SAA16001@aatma.engin.umich.edu>
- Files: pp_ctl.c
-
-Change 711 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix seg fault on eval/require and syntax errors", #F081
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802102321.SAA15346@aatma.engin.umich.edu>
- Files: MANIFEST scope.h op.c pp_ctl.c scope.c t/comp/require.t toke.c
-
-Change 710 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "5.004_58: the locale.t problem in IRIX", #F080
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802091747.TAA01735@alpha.hut.fi>
- Files: t/pragma/locale.t
-
-Change 709 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "sv_setnv will upgrade SVt_NV to SVt_PVNV", #F079
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3g1lwl3bq.fsf@furu.g.aas.no>
- Files: sv.c
-
-Change 708 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Eliminate double warnings under C<package;>", #F077
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0y0paq-0000Ov-00@ursa.cus.cam.ac.uk>
- Files: gv.c op.c toke.c
-
-Change 707 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix infinite loop on unlink() failure in File::Path::rmtree()",
- #F076
- From: Murray Nesbitt <mjn@pathcom.com>, Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <199802061100.LAA16423@toad.ig.co.uk>
- Files: lib/File/Path.pm
-
-Change 706 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Update of h2ph", #F075
- From: kstar@www.chapin.edu (Kurt D. Starsinic)
- Msg-ID: <199802051354.FAA11452@www.chapin.edu>
- Files: t/lib/ph.t utils/h2ph.PL
-
-Change 705 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix AutoLoader for deep packages", #F074
- From: Zachary Miller <zcmiller@zappy.er.usgs.gov>
- Msg-ID: <199710092348.SAA02108@zappy.er.usgs.gov>
- Files: lib/AutoLoader.pm
-
-Change 704 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix order of warnings for misplaced subscripts", #F073
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199710131023.LAA16796@crypt.compulink.co.uk>
- Files: op.c
-
-Change 703 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Make recursive lexical analysis more robust", #F072
- From: Ilya Zakharevich and Chip Salzenberg
- Msg-ID: <199710160102.VAA28817@monk.mps.ohio-state.edu>
- Files: toke.c
-
-Change 702 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix random whitespace errors in docs", #F070
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <12726.877706444@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod pod/checkpods.PL
-
-Change 701 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix line numbers after here documents in eval STRING", #F069
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710241745.NAA08166@monk.mps.ohio-state.edu>
- Files: toke.c
-
-Change 700 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix SEGV from combining caller and C<package;>", #F068
- From: James Duncan <jduncan@epitome.hawk.igs.net>, Nicholas Clark
- <nick@flirble.org>
- Msg-ID: <199710241248.NAA00163@flirble.org>,
- <Pine.LNX.3.96.971024135912.12197A-100000@epitome.hawk.igs.
- net>
- Files: pp_ctl.c sv.c
-
-Change 699 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Don't fold string comparison under C<use locale>", #F067
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199711151506.RAA26287@alpha.hut.fi>
- Files: op.c
-
-Change 698 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix SEGV on constant at end of sort block", #F066
- From: Administration <fadmin@informatics.muni.cz>
- Msg-ID: <199711170838.JAA26073@thetis.fi.muni.cz>
- Files: op.c
-
-Change 697 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Allow C<last()> to mean C<last>", #F065
- From: Chip Salzenberg
- Files: op.c
-
-Change 696 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix extension version mismatch message", #F064
- From: Chip Salzenberg
- Files: XSUB.h
-
-Change 695 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Better handle and test struct tm of Linux and SunOS", #F063
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980205134340.15567B-100000@newton.phys>
- Files: MANIFEST ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl
- hints/linux.sh hints/sunos_4_1.sh t/lib/posix.t
-
-Change 694 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix doc bug in getservbyname() examples", #F062
- From: Tom Christiansen
- Files: ext/Socket/Socket.pm
-
-Change 693 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Kill warning about parameter type", #F061
- From: Chip Salzenberg
- Files: op.c
-
-Change 692 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Socket occasional SEGV", #F060
- From: Trevor Blackwell <tlb@viaweb.com>
- Msg-ID: <199710281804.NAA09632@wagg.viaweb.com>
- Files: ext/Socket/Socket.xs
-
-Change 691 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Avoid SEGV from local($@)", #F059
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710290251.VAA14362@aatma.engin.umich.edu>
- Files: pp_ctl.c
-
-Change 690 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Don't use broken pad_reset() (was Re: Perl bug in 5.004_03 )", #F058
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710300036.TAA01004@aatma.engin.umich.edu>
- Files: op.c
-
-Change 689 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Use STMT_{START,END} in XSRETURN", #F057
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710300245.VAA04244@aatma.engin.umich.edu>
- Files: XSUB.h
-
-Change 688 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Re: Sort grammar bug", #F056
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199711011946.OAA18882@aatma.engin.umich.edu>
- Files: toke.c
-
-Change 687 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Document indirect object cases for exec(), system()", #F055
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03110700b084e89234a7@[194.51.248.90]>
- Files: pod/perlfunc.pod
-
-Change 686 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Update docs on tr///", #F054
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971103071602.10568C-100000@usertest.teleport.com>
- Files: pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- pod/perllocale.pod pod/perlmod.pod pod/perlop.pod
- pod/perlstyle.pod toke.c
-
-Change 685 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Re: perlop bitwise & | ^ documentation", #F053
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971106073858.29771O-100000@usertest.teleport.com>
- Files: pod/perlop.pod
-
-Change 684 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix SEGV on C<*glob{'SCALAR','ARRAY'}>", #F052
- From: "Joseph N. Hall" <joseph@cscaper.com>
- Msg-ID: <199711110552.WAA12613@gadget.cscaper.com>
- Files: perly.c perly.c.diff perly.y vms/perly_c.vms
-
-Change 683 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "for perlguts.pod: document sv_derived_from, sv_vcatpfn and
- sv_vsetpfn", #F051
- From: jan.dubois@ibm.net (Jan Dubois) and Chip Salzenberg
- Msg-ID: <346ae970.7444534@smtp1.ibm.net>
- Files: pod/perlguts.pod
-
-Change 682 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "5.004_04: locale startup failure (at last) documented", #F050
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199711172054.WAA08261@alpha.hut.fi>
- Files: INSTALL pod/perldiag.pod pod/perllocale.pod
-
-Change 681 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Cope with lack of args in Fcntl::AUTOLOAD", #F049
- From: Jerome Abela <abela@hsc.fr>
- Msg-ID: <19971120183248.23588@coredump.hsc.fr>
- Files: ext/Fcntl/Fcntl.pm
-
-Change 680 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Commenting toke.c", #F048
- From: gnat@frii.com
- Msg-ID: <199801082138.OAA14186@prometheus.frii.com>
- Files: toke.c
-
-Change 679 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Re: 5.004_04 vec() fails with 32-bit values", #F047
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0xsnr8-0007SS-00@taurus.cus.cam.ac.uk>
- Files: pod/perlguts.pod pp.c t/op/vec.t
-
-Change 678 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "A few perl5.004_03 bugs", #F046
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199801221211.MAA05315@crypt.compulink.co.uk>
- Files: mg.c t/op/magic.t
-
-Change 677 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Faster, cleaner av_unshift() ", #F045
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <199801221850.TAA23111@furu.g.aas.no>
- Files: av.c
-
-Change 676 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "New hints/solaris2.sh", #F044
- From: Stephen Zander <srz@mckesson.com>
- Msg-ID: <87oh12y458.fsf@wsuse5.mckesson.com>
- Files: hints/solaris_2.sh
-
-Change 675 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Refresh Complex.pm and test", #F043
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802051608.SAA20262@alpha.hut.fi>
- Files: lib/Math/Complex.pm t/lib/complex.t
-
-Change 674 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix (\@@) proto", #F042
- From: "Joseph N. Hall" <joseph@cscaper.com>
- Msg-ID: <199801240132.SAA25111@gadget.cscaper.com>
- Files: op.c t/comp/proto.t
-
-Change 673 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Allow empty BLOCK in code", #F041
- From: Vladimir Alexiev <vladimir@cs.ualberta.ca>
- Msg-ID: <19980129002112Z13378-6931+226@scapa.cs.ualberta.ca>
- Files: toke.c
-
-Change 672 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix name of $Foo::{'Bar::'}: '*Foo::Bar::'", #F040
- From: Chip Salzenberg
- Files: gv.c t/op/gv.t
-
-Change 671 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Keep accurate reference count on globs' stashes", #F038
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3zpk7sd3n.fsf@furu.g.aas.no>
- Files: gv.c sv.c
-
-Change 670 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Avoid memory allocation in gv_fetchpv(), for speed", #F037
- From: Chip Salzenberg
- Files: gv.c
-
-Change 669 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Make Configure less negative about PerlIO", #F036
- From: chip@atlantic.net
- Msg-ID: <199801312323.SAA15237@cyprus.atlantic.net>
- Files: Configure
-
-Change 668 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix (mostly) pseudo-same-REs due to embedded NULs", #F035
- From: Martin Plechsmid <plechsmi@karlin.mff.cuni.cz>
- Msg-ID: <199802021217.NAA05230@albert.karlin.mff.cuni.cz>
- Files: pp_ctl.c
-
-Change 667 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Make Getopt::Long avoid $&, $`, $'", #F034
- From: Irving Reid <irving@tor.securecomputing.com>
- Msg-ID: <98Feb3.005102est.11655@janus.tor.securecomputing.com>
- Files: lib/Getopt/Long.pm
-
-Change 666 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "adding the newSVpvn API function", #F033
- From: Matthias Ulrich Neeracher <neeri@iis.ee.ethz.ch>
- Msg-ID: <199801310532.GAA23798@solar.ethz.ch>
- Files: pod/perlguts.pod pod/perltoc.pod proto.h global.sym sv.c
-
-Change 665 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Support C<Package::> as function-blind bearword", #F032
- From: Chip Salzenberg
- Files: toke.c
-
-Change 664 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Re-optimize character classes", #F031
- From: Chip Salzenberg
- Files: regcomp.h regcomp.c regexec.c
-
-Change 663 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix C<if (1) { local $x }> which needed ENTER/LEAVE", #F030
- From: dfh@dwroll.lucent.com (D461-David_F_Haertig(Dave)83040)
- Msg-ID: <EnKC0q.6qI@drnews.dr.lucent.com>
- Files: op.c t/op/local.t
-
-Change 662 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Dramatically improve performance of // with parens or $&", #F029
- From: Chip Salzenberg
- Files: cop.h perl.h proto.h regexp.h gv.c interp.sym perl.c pp.c pp_ctl.c
- pp_hot.c regexec.c scope.c
-
-Change 661 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Don't warn on $x{shift}, ne => 1, or -f => 1", #F028
- From: Chip Salzenberg
- Files: toke.c
-
-Change 660 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Protect against weirdness with unreal @_ in C<local @_>", #F027
- From: Chip Salzenberg
- Files: scope.c
-
-Change 659 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix C<printf "%.0d", 0>", #F026
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711021331.NAA01826@crypt.compulink.co.uk>
- Files: sv.c t/op/sprintf.t
-
-Change 658 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Tiny core patch for source filters", #F025
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9711202312.AA02937@claudius.bfsec.bt.co.uk>
- Files: toke.c
-
-Change 657 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Here-doc in s///e (was: Bug)", #F024
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711221445.OAA14153@crypt.compulink.co.uk>
- Files: t/base/lex.t toke.c
-
-Change 656 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix duplicate warnings on C<-e undef>", #F023
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711221252.MAA14000@crypt.compulink.co.uk>
- Files: doio.c t/pragma/warn-1global
-
-Change 655 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix '*' prototype", #F022
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199711212225.RAA00755@monk.mps.ohio-state.edu>
- Files: toke.c
-
-Change 654 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "File::Find bugs (and patches)", "File::Find bugs & patches", #F021
- From: "Conrad E. Kimball" <cek@tblv021.ca.boeing.com>
- Msg-ID: <199711260703.XAA21257@mailgate2.boeing.com>
- Files: lib/File/Find.pm
-
-Change 653 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix typo: FORM{,AT}LINE", #F020
- From: Chip Salzenberg
- Files: sv.c
-
-Change 652 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix use of unref mem when blessed object goes out of scope", #F019
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199711282326.SAA15090@aatma.engin.umich.edu>
- Files: scope.c
-
-Change 651 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix C<my ($a, undef, $b) = @x>", #F018
- From: Stephane Payrard <stef@francenet.fr>
- Msg-ID: <199712040054.BAA04612@www.zweig.com>
- Files: op.c t/op/my.t
-
-Change 650 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "enhanced "use strict" warning", #F017
- From: Tkil <tkil@reptile.scrye.com>
- Msg-ID: <199712040938.CAA07628@reptile.scrye.com>
- Files: gv.c t/pragma/strict-subs t/pragma/strict-vars
-
-Change 649 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "eval of sub gives spurious "uninitialised" warning", #F016
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199712061025.FAA14396@aatma.engin.umich.edu>
- Files: pod/perldelta.pod pod/perlfunc.pod op.c t/op/eval.t
-
-Change 648 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "[PERL] Assigning result of pop scrambles unrelated reference", #F015
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199712061100.GAA14864@aatma.engin.umich.edu>
- Files: sv.c
-
-Change 647 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "[PERL] Filedescriptor leak in 5.004_55 (and earlier)", #F014
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199712151922.OAA06410@monk.mps.ohio-state.edu>
- Files: os2/os2.c util.c
-
-Change 646 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix fdopen() on STD{IN,OUT,ERR}", #F013
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <pzg1npp6e3.fsf@eeyore.ibcinc.com>
- Files: doio.c t/op/misc.t
-
-Change 645 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix local $a[0] and local $h{a}", #F012
- From: Stephen McCamant <alias@mcs.com>
- Msg-ID: <m0xjWFq-000EZeC@alias-2.pr.mcs.net>
- Files: embed.h scope.h global.sym pp.c pp_hot.c scope.c t/op/local.t
-
-Change 644 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Eliminate redundant mg_get() in SvTRUE()", #F011
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Msg-ID: <199712251839.NAA14800@Orb.Nashua.NH.US>
- Files: sv.c
-
-Change 643 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Don't force scalar context on C<my @x> or C<my %x>", #F010
- From: Chip Salzenberg
- Files: op.c t/op/my.t
-
-Change 642 on 1998/03/03 by TimBunce@ig.co.uk
-
- Title: "Fix assignment to $_[0] in DESTROY", #F009
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199801010030.TAA14274@aatma.engin.umich.edu>
- Files: pod/perlobj.pod sv.c t/op/ref.t
-
-Change 627 on 1998/03/02 by TimBunce@ig.co.uk
-
- Title: "Fix inefficient checks for TIEHANDLE", #F008
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199801080106.UAA05048@aatma.engin.umich.edu>
- Files: pp_hot.c pp_sys.c
-
-Change 626 on 1998/03/02 by TimBunce@ig.co.uk
-
- This is the change description for change 625
- Title: "Fix tr///s option", #F007
- From: Inaba Hiroto <inaba@st.rim.or.jp>
- Msg-ID: <19980110155333D.inaba@st.rim.or.jp>
- Files: doop.c
-
-Change 623 on 1998/03/02 by TimBunce@ig.co.uk
-
- Title: "Fix lexical lookup in eval-sub-eval", #F006
- From: Chip Salzenberg
- Files: pp_ctl.c
-
-Change 622 on 1998/03/02 by TimBunce@ig.co.uk
-
- Title: "Don't upgrade target of assignment from LVALUE", #F005
- From: Chip Salzenberg
- Files: sv.c
-
-Change 621 on 1998/03/02 by TimBunce@ig.co.uk
-
- Title: "Fix compile-time warning line in while ()", #F004
- From: Chip Salzenberg
- Files: op.c
-
-Change 620 on 1998/03/02 by TimBunce@ig.co.uk
-
- Title: "STMT foreach LIST;", #F002
- From: Chip Salzenberg
- Files: pod/perlsyn.pod perly.c perly.c.diff perly.y t/cmd/mod.t toke.c
- vms/perly_c.vms
-
-Change 619 on 1998/03/02 by TimBunce@ig.co.uk
-
- Title: "Fix SIGSEGV on C<42 until forever>", #F001
- From: Chip Salzenberg
- Files: op.c
-
-----------------
-Version 5.004_04 Maintenance release 4 for 5.004
-----------------
-
-"1. Out of clutter, find simplicity.
- 2. From discord, find harmony.
- 3. In the middle of difficulty lies opportunity."
- -- Albert Einstein, three rules of work
-
-
- HEADLINES FOR THIS MAINTENANCE RELEASE
-
- Fixed gaps in tainting (readdir, readlink, gecos, bit vector ops).
- Fixed memory leak in splice(@_).
- Fixed debugger core dumps.
- IO::Socket now sets autoflush by default.
- Several perldoc bugs fixed, now faster and more helpful.
- Fixed Win32 handle leak.
- Many other improvements to Win32 support.
- Many many other bug fixes and enhancements.
-
-
- ------ BUILD PROCESS ------
-
- Title: "ExtUtils::Liblist prints diagnostics to STDOUT (vs. STDERR)"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>, jesse@ginger
- (Jesse Glick)
- Msg-ID: <199708290032.UAA15663@ginger>,
- <Pine.SUN.3.96.970829132217.28552A-100000@newton.phys>
- Files: MANIFEST lib/ExtUtils/Liblist.pm
-
- Title: "Set LD_RUN_PATH when building suidperl"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Tony Sanders
- <sanders@bsdi.com>
- Msg-ID: <199708272226.QAA10206@austin.bsdi.com>
- Files: Makefile.SH
-
- Title: "INSTALL version 1.26"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.970828143314.27416B-100000@newton.phys>
- Files: INSTALL
-
- Title: "Propagate MAKE=$(MAKE) through perl build"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.970908143853.13750C-100000@newton.phys>
- Files: Makefile.SH makedepend.SH x2p/Makefile.SH ext/util/make_ext
-
- Title: "update to installperl for perl5.004_02 to skip CVS dir"
- From: Tony Sanders <sanders@bsdi.com>
- Msg-ID: <199708272307.RAA13451@austin.bsdi.com>
- Files: installperl
-
- Title: "makedepend loop on HP-UX 10.20"
- Msg-ID: <1997Sep20.183731.2297443@cor.newman>
- Files: Makefile.SH
-
- Title: "Tiny Grammaro in INSTALL"
- From: koenig@anna.mind.de (Andreas J. Koenig)
- Msg-ID: <sfcwwkb2pc8.fsf@anna.in-berlin.de>
- Files: INSTALL
-
- Title: "Fix Configured osvers under Linux 1"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>, Hugo van der
- Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199709241439.PAA17114@crypt.compulink.co.uk>,
- <Pine.SUN.3.96.970924112654.5054D-100000@newton.phys>
- Files: Configure
-
- Title: "INSTALL-1.28"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.971010131207.23751A-100000@newton.phys>
- Files: INSTALL
-
- Title: "makedepend.SH fix for UNICOS"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199710132039.XAA21459@alpha.hut.fi>
- Files: makedepend.SH
-
- ------ CORE LANGUAGE ------
-
- Title: "Re: "perl -d" dumps core when loading syslog.ph"
- From: Jochen Wiedmann <wiedmann@neckar-alb.de>, Stephen McCamant
- <alias@mcs.com>, ilya@math.ohio-state.edu (Ilya
- Zakharevich)
- Msg-ID: <1997Aug30.034921.2297381@cor.newman.upenn.edu>,
- <3407639E.FEBF20BA@neckar-alb.de>,
- <m0x4ZGj-000EZYC@alias-2.pr.mcs.net>
- Files: pp_ctl.c
-
- Title: "Allow $obj->$coderef()"
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Msg-ID: <199708291649.MAA23276@nielsenmedia.com>
- Files: pp_hot.c
-
- Title: "Localize PV value in save_gp()", "typeglob differences in perl4 and
- perl5"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Stephen McCamant
- <alias@mcs.com>
- Msg-ID: <199708272348.TAA03139@aatma.engin.umich.edu>,
- <m0x4u2o-000EZkC@alias-2.pr.mcs.net>
- Files: scope.c t/op/ref.t
-
- Title: "Avoid assumption that STRLEN == I32"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Hallvard B Furuseth
- <h.b.furuseth@usit.uio.no>
- Msg-ID: <199708242310.BAA05497@bombur2.uio.no>
- Files: hv.c
-
- Title: "Fix memory leak in splice(@_)"
- From: "Tuomas J. Lukka" <tjl@fkfuga.pc.helsinki.fi>, Chip Salzenberg
- <chip@rio.atlantic.net>
- Msg-ID: <m0x3iQE-000CBrC@lukka.student.harvard.edu>
- Files: proto.h av.c global.sym pp.c
-
- Title: "Fix line number of warnings in while() conditional", "misleading
- uninit value warning"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Greg Bacon
- <gbacon@crp-201.adtran.com>
- Msg-ID: <199708271607.LAA01403@crp-201.adtran.com>
- Files: proto.h op.c perly.c perly.y
-
- Title: "-t and POSIX::isatty on IO::Handle objects", "Fix C<-t $handle>"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Greg Ward
- <greg@bic.mni.mcgill.ca>
- Msg-ID: <199708261754.NAA24826@bottom.bic.mni.mcgill.ca>
- Files: pp_sys.c
-
- Title: "Fix output of invalid printf formats"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>
- Msg-ID: <199708241529.QAA02457@crypt.compulink.co.uk>
- Files: sv.c t/op/sprintf.t
-
- Title: "regexec.c regcppartblow declaration missing an arg"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199708290059.BAA05808@crypt.compulink.co.uk>
- Files: regexec.c
-
- Title: "taint readlink, readdir, gecos"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199709131651.TAA13471@alpha.hut.fi>
- Files: pod/perlfunc.pod pod/perlsec.pod pp_sys.c t/op/taint.t
-
- Title: "clean up old style package' usage in op.c"
- From: Stephen Potter <spp@psa.pencom.com>
- Msg-ID: <199709151813.NAA14433@psisa.psa.pencom.com>
- Files: op.c
-
- Title: "beautifying usage() code in perl.c"
- From: "John L. Allen" <"John L. Allen"<allen@gateway.grumman.com>>
- Msg-ID: <Pine.SOL.3.91.970905091314.5991C-100000@gateway>
- Files: perl.c
-
- Title: "debugger to fix core dumps, adds $^S"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199709170823.EAA21359@monk.mps.ohio-state.edu>
- Files: pod/perlvar.pod perl.h gv.c lib/perl5db.pl mg.c perl.c toke.c
-
- Title: "downgrade "my $foo masks earlier" from mandatory to "-w""
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Stephen Potter
- <spp@psa.pencom.com>
- Msg-ID: <199709091832.NAA14763@psisa.psa.pencom.com>,
- <199709102019.QAA09591@aatma.engin.umich.edu>
- Files: pod/perldelta.pod pod/perldiag.pod op.c
-
- Title: "fix overridden glob() problems"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199709171645.MAA13988@aatma.engin.umich.edu>
- Files: MANIFEST pod/perlsub.pod lib/File/DosGlob.pm op.c t/lib/dosglob.t
- toke.c
-
- Title: "Reverse previous "Fix C<qq #hi#>" patch"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Kenneth Albanowski
- <kjahds@kjahds.com>, Tom Christiansen
- <tchrist@jhereg.perl.com>
- Msg-ID: <199707050155.VAA27394@rio.atlantic.net>,
- <199708172326.RAA19344@jhereg.perl.com>,
- <Pine.LNX.3.93.970817200236.170F-100000@kjahds.com>
- Files: toke.c
-
- Title: "printf type warning buglets in m3t2"
- From: Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
- Msg-ID: <199708141017.MAA10225@bombur2.uio.no>
- Files: regcomp.c regexec.c scope.c sv.c util.c x2p/util.c
-
- Title: "Localize PV value in save_gp()", "typeglob differences in perl4 and
- perl5"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Stephen McCamant
- <alias@mcs.com>
- Msg-ID: <199708272348.TAA03139@aatma.engin.umich.edu>,
- <m0x4AUk-000EUJC@alias-2.pr.mcs.net>
- Files: scope.c t/op/ref.t
-
- Title: "unpack now allows commas but -w warns", "unpack() difference
- 5.003->5.004"
- From: "John L. Allen" <allen@gateway.grumman.com>, Chip Salzenberg
- <chip@rio.atlantic.net>, Jarkko Hietaniemi <jhi@iki.fi>,
- Jim Esten <jesten@wdynamic.com>, Jim Esten
- <jesten@wepco.com>, timbo (Tim Bunce)
- Msg-ID: <199709031632.LAA29584@wepco.com>,
- <199709090257.WAA32670@rio.atlantic.net>,
- <199709090917.MAA05602@alpha.hut.fi>,
- <199709091000.LAA24094@toad.ig.co.uk>,
- <341077FE.132F@wdynamic.com>,
- <Pine.SOL.3.91.970905171243.14630A-100000@gateway>
- Files: pod/perldiag.pod pp.c
-
- Title: "5.004_04 trial 1 assorted minor details"
- From: Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
- Msg-ID: <HBF.970921p5f6@bombur2.uio.no>
- Files: Porting/pumpkin.pod hv.c op.c sv.c x2p/util.c
-
- Title: "A couple of 4_04t1 problems"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9709210959.AA28772@claudius.bfsec.bt.co.uk>
- Files: lib/Cwd.pm perl.c
-
- Title: "Minor changes to ease port to MVS"
- From: Len Johnson <lenjay@ibm.net>, SMTP%"BAHUFF@us.oracle.com" ,
- SMTP%"pfuntner@vnet.ibm.com" , pvhp@forte.com (Peter
- Prymmer)
- Msg-ID: <199709162058.NAA00952@mailsun2.us.oracle.com>
- Files: unixish.h miniperlmain.c
-
- Title: "Truer version string and more robust perlbug"
- From: "Michael A. Chase" <mchase@ix.netcom.com>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>
- Msg-ID: <199709201514.QAA21187@crypt.compulink.co.uk>,
- <1997Sep22.090701.2297448@cor.newman>
- Files: perl.c utils/perlbug.PL
-
- Title: "Fix locale bug for constant (readonly) strings"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199709262125.AAA28292@alpha.hut.fi>
- Files: sv.c t/pragma/locale.t
-
- Title: "Enable truly global glob()"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710080000.UAA18972@aatma.engin.umich.edu>
- Files: op.c
-
- Title: "Fix for $0 truncation"
- From: Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <199710081703.SAA02653@toad.ig.co.uk>
- Files: mg.c
-
- Title: "Fix for missing &import leaving stack untidy"
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Msg-ID: <199709282252.SAA22915@nielsenmedia.com>
- Files: pp_hot.c
-
- Title: "Larry's proto fix"
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Msg-ID: <199709290004.UAA07559@nielsenmedia.com>
- Files: op.c t/comp/proto.t
-
- Title: "Fix bugs with magical arrays and hashes (@ISA)"
- From: Chip Salzenberg <chip@rio.atlantic.net>
- Msg-ID: <199709232148.RAA29967@rio.atlantic.net>
- Files: perl.h proto.h av.c global.sym gv.c mg.c pp.c pp_hot.c scope.c
- t/op/method.t
-
- Title: "Perl_debug_log stream used for all DEBUG_*(...) macro uses"
- From: Nick Ing-Simmons <nik@tiuk.ti.com>, Tim Bunce
- Msg-ID: <199709230820.JAA11945@tiuk.ti.com>
- Files: perl.c taint.c util.c
-
- Title: "Tainting bitwise vector ops"
- From: Chip Salzenberg <chip@rio.atlantic.net>
- Msg-ID: <199710061726.NAA16438@rio.atlantic.net>
- Files: doop.c t/op/taint.t
-
- Title: "Enhance $^E on OS/2"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199709232236.SAA04463@monk.mps.ohio-state.edu>
- Files: pod/perlvar.pod mg.c os2/Changes
-
- Title: "option "!#... -- ..." in perl 5.004.03 seems not to work"
- From: "John L. Allen" <allen@gateway.grumman.com>, Urs Thuermann
- <urs@isnogud.escape.de>
- Msg-ID: <199709232030.WAA30425@isnogud.escape.de>,
- <Pine.SOL.3.91.970930105158.10789A-100000@gateway>
- Files: perl.c
-
- Title: "syswrite will again write a zero length buffer"
- From: Cameron Simpson <cs@zip.com.au>, Jarkko Hietaniemi <jhi@iki.fi>,
- aml@world.std.com (Andrew M. Langmead)
- Msg-ID: <199710042107.AAA28561@alpha.hut.fi>,
- <19971007104652-cameron-1-10391@sid.research.canon.com.au>
- Files: pp_sys.c
-
- Title: "make Odd number of elements in hash list warning non-mandatory"
- From: Jason Varsoke {81530} <jjv@caesun10.msd.ray.com>
- Msg-ID: <199710021651.MAA15690@caesun7.msd.ray.com>
- Files: pp.c pp_hot.c
-
- Title: "Fix defined() bug in m4t3 affecting LWP"
- From: chip@atlantic.net@ig.co.uk ()
- Msg-ID: <199710101822.OAA14249@cyprus.atlantic.net>
- Files: pp.c
-
- Title: "Include $archname in perl -v output"
- From: Tim Bunce <Tim.Bunce@ig.co.uk>
- Files: perl.c
-
- Title: "-I flag can easily lead to whitespace in @INC"
- From: Kenneth Stephen <y2kmvs@us.ibm.com>, Tim Bunce <Tim.Bunce@ig.co.uk>,
- pvhp@forte.com (Peter Prymmer)
- Msg-ID: <199710130922.KAA07780@toad.ig.co.uk>,
- <5040400007001448000002L082*@MHS>,
- <9710132015.AA12457@forte.com>
- Files: perl.c
-
- ------ DOCUMENTATION ------
-
- Title: "perldiag.pod: gotcha in short pattern/char ops"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199709050718.KAA31405@alpha.hut.fi>
- Files: pod/perldiag.pod
-
- Title: "Documenting the perl-thanks address"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.970913064628.12359F-100000@julie.teleport.com>
- Files: pod/perl.pod
-
- Title: "Missing section for @_ in perlvar."
- From: abigail@fnx.com (Abigail)
- Msg-ID: <199708142146.RAA13146@fnx.com>
- Files: pod/perlvar.pod
-
- Title: "Promised information about AvHASH in perguts is not delivered"
- From: mjd@plover.com
- Files: pod/perlguts.pod
-
- Title: "perlfunc.doc - $_ aliasing in map, grep, foreach etc"
- From: Ted Ashton <ashted@southern.edu>
- Msg-ID: <199708181852.OAA15901@ns.southern.edu>
- Files: pod/perlfunc.pod
-
- Title: "-U Unsafe operations need -w to warn"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.970826141343.13463h-100000@julie.teleport.com>
- Files: pod/perlrun.pod
-
- Title: "document the return value of syscall"
- From: Hans Mulder <hansm@icgned.nl>
- Msg-ID: <1997Sep7.160817.2297395@cor.newman>
- Files: pod/perlfunc.pod
-
- Title: "minor fix for perltrap.pod"
- From: abigail@fnx.com (Abigail)
- Msg-ID: <199709170500.BAA14805@fnx.com>
- Files: pod/perltrap.pod
-
- Title: "xsubpp: document advanced dynamic typemap usage"
- From: "Rujith S. de Silva" <desilva@netbox.com>
- Files: pod/perlxs.pod
-
- Title: "Improved diagnostic docs for here-documents"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.970921074004.21358G-100000@julie.teleport.com>
- Files: pod/perldiag.pod
-
- Title: "[POD patch] do-FILE forces scalar context."
- From: Robin Houston <robin@oneworld.org>
- Msg-ID: <199709221553.QAA28409@carryon.oneworld.org>
- Files: pod/perlfunc.pod
-
- Title: "perlop.pop. Behaviour of C<qq#hi#> vs C<qq #hi#>."
- From: abigail@fnx.com (Abigail)
- Msg-ID: <199709220107.VAA27064@fnx.com>
- Files: pod/perlop.pod
-
- Title: "Clarify exec docs in perlfunc.pod"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199710081353.OAA00834@crypt.compulink.co.uk>
- Files: pod/perlfunc.pod
-
- Title: "Documentation patch for perlguts.pod--document tainting routines"
- From: Dan Sugalski <sugalskd@osshe.edu>
- Msg-ID: <3.0.3.32.19971007165226.02fd2cd4@osshe.edu>
- Files: pod/perlguts.pod
-
- Title: "Man perlfunc: incorrect split example"
- From: Joerg Porath <Joerg.Porath@informatik.tu-chemnitz.de>
- Msg-ID: <199709240620.IAA30928@pandora.hrz.tu-chemnitz.de>
- Files: pod/perlfunc.pod
-
- Title: "Improve "Use of inherited AUTOLOAD for non-method" disgnostic"
- From: rjray@uswest.com (Randy J. Ray)
- Msg-ID: <199709231710.LAA08854@tremere.ecte.uswc.uswest.com>
- Files: pod/perldiag.pod
-
- Title: "Document split-with-limit on empty string perl4/perl5 change"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Gisle Aas <aas@bergen.sn.no>, Hugo
- van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199709221419.PAA03987@crypt.compulink.co.uk>,
- <hiuvttdkv.fsf@bergen.sn.no>
- Files: pod/perlfunc.pod pod/perltrap.pod URI/URL/http.pm t/op/split.t
-
- Title: "Clarify close() docs"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710081653.MAA20611@monk.mps.ohio-state.edu>
- Files: pod/perlfunc.pod
-
- Title: "perldiag log & sqrt - refer to Math::Complex package"
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Msg-ID: <199710042129.AAA20367@alpha.hut.fi>
- Files: pod/perldiag.pod
-
- Title: "perlfunc.pod: sysread, syswrite docs"
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Msg-ID: <199710061910.WAA15266@alpha.hut.fi>
- Files: pod/perlfunc.pod
-
- Title: "Document //gc"
- From: abigail@fnx.com (Abigail)
- Msg-ID: <199709232302.TAA27947@fnx.com>
- Files: pod/perlop.pod
-
- Title: "repeating #! switches"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Robin Barker
- <rmb1@cise.npl.co.uk>
- Msg-ID: <199709241736.NAA25855@rio.atlantic.net>,
- <24778.9709241501@tempest.cise.npl.co.uk>
- Files: pod/perlrun.pod
-
- Title: "Re: taint documentation bug"
- From: Ken Estes <estes@ms.com>, Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971006121349.10551X-100000@usertest.teleport.com>
- Files: pod/perlsec.pod
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "FileHandle.pm fails if Exporter has not been loaded previously"
- From: jan.dubois@ibm.net (Jan Dubois)
- Msg-ID: <3445e05b.17874041@smtp2.ibm.net>
- Files: lib/FileHandle.pm
-
- Title: "Prefer startperl path over perlpath in MakeMaker"
- From: Andreas Klussmann <andreas@infosys.heitec.de>
- Msg-ID: <199709162017.WAA05043@troubadix.infosys.heitec.net>
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Sys::Hostname fails under Solaris 2.5 when setuid"
- From: Patrick Hayes <Patrick.Hayes.CAP_SESA@renault.fr>
- Msg-ID: <199708201240.OAA04243@goblin.renault.fr>
- Files: lib/Sys/Hostname.pm
-
- Title: "Cwd::getcwd cannot handle path contains '0' element"
- From: Hironori Ikura <hikura@tcc.co.jp>, Hironori Ikura
- <hikura@trans-nt.com>, Stephen Zander <srz@mckesson.com>
- Msg-ID: <19970830060142J.hikura@matsu.tcc.co.jp>,
- <m0x4TzI-0003F1C@wsuse5.mckesson.com>
- Files: lib/Cwd.pm
-
- Title: "Getopt::Long 2.11"
- From: JVromans@squirrel.nl (Johan Vromans)
- Msg-ID: <m0xBcdR-000RArC@plume.nl.compuware.com>
- Files: lib/Getopt/Long.pm
-
- Title: "IO::Socket autoflush by default, assume tcp and PeerAddr"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Andy Dougherty
- <doughera@newton.phys.lafayette.edu>, Gisle Aas
- <aas@bergen.sn.no>
- Msg-ID: <E0x9WpH-0003HT-00@ursa.cus.cam.ac.uk>,
- <Pine.SUN.3.96.970915115856.23236F-100000@newton.phys>,
- <hvi07zvo9.fsf@bergen.sn.no>
- Files: ext/IO/lib/IO/Socket.pm
-
- Title: "Syslog.pm and missing _PATH_LOG"
- From: Ulrich Pfeifer <upf@de.uu.net>
- Msg-ID: <p5iuw1cris.fsf@knowway.de.uu.net>
- Files: lib/Sys/Syslog.pm
-
- Title: "Undocumented: $Test::Harness::switches"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9708272110.AA26904@o09.xray.mpe.mpg.de>
- Files: lib/Test/Harness.pm
-
- Title: "Patches for lib/Math/Complex.pm and t/lib/complex.t"
- From: Jarkko Hietaniemi <jhi@anna.in-berlin.de>
- Msg-ID: <199709102009.WAA27428@anna.in-berlin.de>
- Files: lib/Math/Complex.pm t/lib/complex.t
-
- Title: "Win32: Install.pm not correctly comparing binary files."
- From: Jeff Urlwin <jurlwin@access.digex.net>
- Msg-ID: <01BCBFAA.E325C4A0.jurlwin@access.digex.net>
- Files: lib/ExtUtils/Install.pm
-
- Title: "Document that File::Find doesn't follow symlinks"
- From: Greg Ward <greg@bic.mni.mcgill.ca>
- Msg-ID: <199708191853.OAA07111@bottom.bic.mni.mcgill.ca>
- Files: lib/File/Find.pm
-
- Title: "fix subroutines called in a void context in perl5db.pl"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0x6Gsa-0004VR-00@ursa.cus.cam.ac.uk>
- Files: lib/perl5db.pl
-
- Title: "xsubpp fix to allow #ifdef's around entire XSubs"
- From: John Tobey <jtobey@user1.channel1.com>
- Msg-ID: <199709070034.AAA16457@remote119>
- Files: lib/ExtUtils/xsubpp
-
- Title: "Banishing eval from getopt.pl and Getopt/Std.pm"
- From: "John L. Allen" <allen@gateway.grumman.com>
- Msg-ID: <Pine.SOL.3.91.970920154720.3683A@gateway>
- Files: lib/getopt.pl lib/Getopt/Std.pm
-
- Title: "further complex number patches"
- From: Jarkko Hietaniemi <jhi@iki.fi>, d-lewart@uiuc.edu (Daniel S. Lewart)
- Msg-ID: <199709221009.FAA21216@staff2.cso.uiuc.edu>,
- <199709221216.PAA15130@alpha.hut.fi>
- Files: lib/Math/Complex.pm t/lib/complex.t
-
- Title: "Trap Time::Local infinite loop"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199710030030.BAA17372@crypt.compulink.co.uk>
- Files: lib/Time/Local.pm
-
- Title: "Cosmetic Test::Harness patch"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710032226.SAA15354@monk.mps.ohio-state.edu>
- Files: lib/Test/Harness.pm
-
- Title: "ExtUtil::Install sub my_cmp needs to binmode its files"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Stephen Potter
- <spp@psa.pencom.com>
- Msg-ID: <199710010617.BAA02037@psisa.psa.pencom.com>,
- <199710011819.OAA03288@aatma.engin.umich.edu>
- Files: lib/ExtUtils/Install.pm
-
- Title: "Enable make test "TEST_FILES=t/*.t.were_failing""
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710032231.SAA15364@monk.mps.ohio-state.edu>
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Fix for autouse.pm"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710071734.NAA19462@monk.mps.ohio-state.edu>
- Files: lib/autouse.pm
-
- Title: "Math::Complex fixes - fixes problems on m68-linux"
- From: Jarkko Hietaniemi <jarkko.hietaniemi@research.nokia.com>
- Msg-ID: <199709301422.HAA24368@koah.research.nokia.com>
- Files: lib/Math/Complex.pm
-
- Title: "Updated CPAN.pm for 5.004_04"
- From: koenig@anna.mind.de (Andreas J. Koenig)
- Msg-ID: <sfcpvpv8teo.fsf@anna.in-berlin.de>
- Files: lib/CPAN.pm lib/CPAN/FirstTime.pm
-
- Title: "debugger bug with 'c subname'"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199709232331.TAA04546@monk.mps.ohio-state.edu>
- Files: lib/perl5db.pl
-
- Title: "Fix atan2 & restrict $t to (-pi,pi] instead of to [-pi,pi]"
- From: Daniel S. Lewart, Jarkko Hietaniemi
- <jarkko.hietaniemi@research.nokia.com>
- Msg-ID: <199710010939.CAA00964@koah.research.nokia.com>
- Files: lib/Math/Complex.pm
-
- Title: "Cwd::fastcwd needs changes to work with tainting"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>, Ulrich Pfeifer
- <pfeifer@wait.de>, Tim Bunce
- Msg-ID: <yfmwwk6y0bc.ulp@gretchen.informatik.uni-dortmund.de>
- Files: lib/Cwd.pm
-
- Title: "use autouse: requires prototype now"
- From: user@agate.berkeley.edu
- Msg-ID: <9709220450.AA0380@tuzik.HIP.Berkeley.EDU>
- Files: lib/autouse.pm
-
- Title: ""use base qw(Foo Bar);" to set @ISA at compile time"
- From: Gisle Aas <gisle@aas.no>, Graham Barr <gbarr@pobox.com>, Graham Barr
- <gbarr@ti.com>, Tim Bunce <Tim.Bunce@ig.co.uk>,
- jan.dubois@ibm.net (Jan Dubois), larry@wall.org (Larry
- Wall)
- Msg-ID: <199710022151.WAA21250@toad.ig.co.uk>,
- <199710031613.JAA11286@wall.org>,
- <199710040829.KAA16739@furu.g.aas.no>,
- <3434E4C6.AE24135E@ti.com>, <343C2278.7DC1ADC6@pobox.com>,
- <343ec306.50394803@smtp-gw01.ny.us.ibm.net>
- Files: lib/base.pm
-
- Title: "Further Math/Complex.pm enhancements"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199710132055.XAA02086@alpha.hut.fi>
- Files: lib/Math/Complex.pm t/lib/complex.t
-
- Title: "Further Math::Complex fixes"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199710120933.MAA01165@alpha.hut.fi>
- Files: lib/Math/Complex.pm
-
- ------ OTHER CHANGES ------
-
- Title: "POD patches w.r.t. $^S"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710030001.UAA14241@monk.mps.ohio-state.edu>
- Files: ../pod/perlfunc.pod ../pod/perlvar.pod
-
- Title: "libperl.sl on HP-UX 10.20"
- From: "Darren/Torin/Who Ever..." <torin@daft.com>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>
- Msg-ID: <199709250003.BAA18085@crypt.compulink.co.uk>,
- <873emkbpit.fsf@perv.daft.com>
- Files:
-
- Title: "myconfig / perl -V: remove randbits and add prototype"
- From: Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <199709290857.JAA07706@toad.ig.co.uk>
- Files: myconfig
-
- Title: "Emacs CPerl update for 5.004_04"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710140835.EAA26825@monk.mps.ohio-state.edu>
- Files: emacs/cperl-mode.el
-
- Title: "Enhance perly.fixer to help porters."
- From: Tim Bunce
- Files: perly.fixer
-
- ------ PORTABILITY - WIN32 ------
-
- Title: "Fix win32/Makefile for perl95"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: win32/Makefile win32/makefile.mk
-
- Title: "Win32 archnames"
- From: Bill Middleton <wmiddlet@Adobe.COM>, Gurusamy Sarathy
- <gsar@engin.umich.edu>, Peter Prymmer <pvhp@forte.com>, Tim
- Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <199709111929.PAA22488@aatma.engin.umich.edu>,
- <341719E4.4923@forte.com>,
- <Pine.GSO.3.95.970905123145.12361B-100000@ducks>
- Files: win32/config_H.bc win32/config_H.vc
-
- Title: "pl2bat.bat -> pl2bat.pl change in win32/pod.mak"
- From: jan.dubois@ibm.net (Jan Dubois)
- Msg-ID: <3411ee6f.9143607@smtp-gw01.ny.us.ibm.net>
- Files: win32/pod.mak
-
- Title: "Add test-notty target to Win32 Makefile"
- From: jan.dubois@ibm.net (Jan Dubois)
- Msg-ID: <343f5106.12461608@smtp2.ibm.net>
- Files: win32/Makefile
-
- Title: "Bug in Win32::GetShortPathName"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710092229.SAA21556@aatma.engin.umich.edu>
- Files: win32/win32.c
-
- Title: "Fix NT handles leak."
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710111319.JAA10918@aatma.engin.umich.edu>
- Files: win32/win32io.c win32/win32sck.c
-
- Title: "fix socket init duality on win32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710111523.LAA12407@aatma.engin.umich.edu>
- Files: win32/win32sck.c
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Tweak to hints/machten.sh: stop t/lib/complex.t from failing"
- From: Dominic Dunlop <domo@tcp.ip.lu>
- Msg-ID: <v03110700b06a30bdfc42@[194.51.248.80]>
- Files: hints/machten.sh
-
- Title: "Irix 6.2 build problem - so_locations"
- From: "Billinghurst, David" <David.Billinghurst@riotinto.com.au>
- Msg-ID: <D54B1932FFB4CF11B5C80000F8018BD2907E31@CRCMAIL>
- Files: hints/irix_6.sh
-
- Title: "Porting/pumpkin.pod version 1.13"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.970828142011.27416A-100000@newton.phys>
- Files: Porting/pumpkin.pod
-
- Title: "lib/timelocal.t fails test 1 for VMS 7.1"
- From: Dan Sugalski <sugalsd@lbcc.cc.or.us>
- Msg-ID: <3.0.3.32.19970908112449.0087bc90@stargate.lbcc.cc.or.us>
- Files: vms/vmsish.h vms/vms.c
-
- Title: "Patches to updated README.VMS for Perl 5.004_04"
- From: Dan Sugalski <sugalsd@stargate.lbcc.cc.or.us>
- Msg-ID: <3.0.3.32.19970918100648.008b1c60@stargate.lbcc.cc.or.us>
- Files: README.vms
-
- Title: "Fix perl build on Digital UNIX after JDK installs libnet.so"
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Msg-ID: <199709191826.OAA18040@Orb.Nashua.NH.US>
- Files: hints/dec_osf.sh
-
- Title: "Updated README.VMS for Perl 5.004_04"
- From: Dan Sugalski <sugalsd@stargate.lbcc.cc.or.us>
- Msg-ID: <3.0.3.32.19970912091524.008a3620@stargate.lbcc.cc.or.us>
- Files: README.vms
-
- Title: "Dynixptx hints"
- From: bruce@aps.org ("Bruce P. Schuck")
- Msg-ID: <Pine.PTX.3.95.971002104651.12112G-200000@lancelot.aps.org>
- Files: hints/dynixptx.sh
-
- Title: "Minor OS/2 patch for 4_03"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710032224.SAA15345@monk.mps.ohio-state.edu>
- Files: os2/os2.c
-
- Title: "OS2::REXX improvements"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199709272214.SAA08638@monk.mps.ohio-state.edu>
- Files: os2/Changes os2/OS2/REXX/Makefile.PL os2/OS2/REXX/REXX.pm
-
- Title: "hints/qnx.sh update"
- From: Norton Allen <allen@huarp.harvard.edu>
- Msg-ID: <199709261508.LAA07889@dolores.harvard.edu>
- Files: hints/qnx.sh
-
- Title: "New hints file for IBM OS/390 OpenEdition (MVS)"
- From: pvhp@forte.com (Peter Prymmer)
- Msg-ID: <9709240106.AA26484@forte.com>
- Files: hints/os390.sh
-
- Title: "OS/2 Hints"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710130631.CAA25426@monk.mps.ohio-state.edu>
- Files: hints/os2.sh
-
- ------ TESTS ------
-
- Title: "op/glob.t test failure under Win32 with CVS"
- From: Warren Jones <wjones@tc.fluke.com>
- Msg-ID: <97Aug26.091048pdt.35761-1@gateway.fluke.com>
- Files: t/op/glob.t
-
- Title: "tests fail if localhost/loopback address not defined"
- From: David McLean <David McLean<davem@icc.gsfc.nasa.gov>>, David McLean
- <davem@icc.gsfc.nasa.gov>
- Msg-ID: <34048947.2944@icc.gsfc.nasa.gov>
- Files: t/lib/io_sock.t t/lib/io_udp.t
-
- Title: "Improve pragma/locale test 102 - and don't fail, just warn"
- From: Jarkko Hietaniemi <jhi@anna.in-berlin.de>
- Files: t/pragma/locale.t
-
- Title: "Invalid test output in t/op/taint.t in trial 1"
- From: Dan Sugalski <sugalsd@lbcc.cc.or.us>
- Msg-ID: <3.0.3.32.19970919160918.00857a50@stargate.lbcc.cc.or.us>
- Files: t/op/taint.t
-
- Title: "Identify t/*/*.t test failing because of file permissions"
- From: koenig@anna.mind.de (Andreas J. Koenig)
- Msg-ID: <sfcraah0xvy.fsf@anna.in-berlin.de>
- Files: t/TEST
-
- Title: "fix poor t/op/runlevel.t test"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>, Norton Allen
- <allen@huarp.harvard.edu>
- Msg-ID: <199709261458.KAA28611@dolores.harvard.edu>
- Files: t/op/runlevel.t
-
- ------ UTILITIES ------
-
- Title: "Missing 'require' in auto-generated .pm by h2xs"
- From: davidk@tor.securecomputing.com (David Kerry)
- Msg-ID: <97Aug27.131618edt.11650@janus.tor.securecomputing.com>
- Files: utils/h2xs.PL
-
- Title: "Perldoc tiny patch to avoid $0"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199709122141.RAA16846@monk.mps.ohio-state.edu>
- Files: utils/perldoc.PL
-
- Title: "h2ph broken in 5.004_02"
- From: David Mazieres <dm@reeducation-labor.lcs.mit.edu>,
- kstar@www.chapin.edu (Kurt D. Starsinic)
- Msg-ID: <199708201454.KAA05122@reeducation-labor.lcs.mit.edu>,
- <199708201700.KAA02621@www.chapin.edu>
- Files: utils/h2ph.PL
-
- Title: "add key_t caddr_t to h2ph", "eg/sysvipc/ipcsem bug", "update
- hints/bsdos.sh"
- From: Tony Sanders <sanders@bsdi.com>
- Msg-ID: <199708272301.RAA12803@austin.bsdi.com>
- Files: eg/sysvipc/ipcsem utils/h2ph.PL
-
- Title: "perldoc search ., lib and blib/* if -f 'Makefile.PL'"
- From: Tim Bunce
- Msg-ID: <199708251732.KAA19299@gadget.cscaper.com>
- Files: utils/perldoc.PL
-
- Title: "5.004m4t1: perlbug: NIS domainname gets into wrong places"
- From: koenig@anna.mind.de (Andreas J. Koenig)
- Msg-ID: <sfcg1qy38as.fsf@anna.in-berlin.de>
- Files: utils/perlbug.PL
-
- Title: "add better local patch info to perlbug", "perlbug checks perl
- build/run version changes"
- From: Tim.Bunce@ig.co.uk
- Files: utils/perlbug.PL
-
- Title: "perldoc - suggest modules if requested module not found"
- From: Anthony David <adavid@netinfo.com.au>
- Msg-ID: <3439CD83.6969@netinfo.com.au>
- Files: utils/perldoc.PL
-
- Title: "perldoc mail::foo tries to read binary /usr/ucb/mail"
- From: "Joseph Moof-in' Hall" <joseph@cscaper.com>, Tim Bunce
- Msg-ID: <199710082014.NAA00808@gadget.cscaper.com>
- Files: utils/perldoc.PL
-
- Title: "perldoc -f setpwent (for example) returns no descriptive text"
- From: Tim Bunce
- Files: utils/perldoc.PL
-
- Title: "perldoc diffs: don't search auto - much faster"
- From: "Joseph N. Hall" <joseph@5sigma.com>
- Msg-ID: <MailDrop1.2d7dPPC.971012211957@screechy.cscaper.com>
- Files: utils/perldoc.PL
-
-
-
-----------------
-Version 5.004_03 Maintenance release 3 for 5.004
-----------------
-
-"To err is human, to forgive divine."
- -- Alexander Pope
-
-
- HEADLINES FOR THIS MAINTENANCE RELEASE
-
- Fixed 5.004_02 compilation failure on VMS.
- Fixed Configure (non)errors being displayed to user.
- Better support for Windows 95.
- Assorted documentation and hint file improvements.
- perl --foo no longer silently ignored.
-
-
- ------ BUILD PROCESS ------
-
- Title: "Show Configure failure reason even with -s"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.970812141623.14256K-100000@newton.phys>
- Files: Configure
-
- Title: "Configure can stop without fully explaining itself"
- From: Jim Anderson <jander@ml.com>
- Msg-ID: <199708111328.JAA28976@nsd15.ny-swaps-develop.ml.com>,
- <199708111952.PAA29346@nsd15.ny-swaps-develop.ml.com>
- Files: Configure
-
- ------ CORE LANGUAGE ------
-
- Title: "typos in perl -h output"
- From: "Richard A. Wells" <Rwells@uhs.harvard.edu>
- Msg-ID: <6D0BF914BC@gateuhs.harvard.edu>
- Files: perl.c
-
- Title: "Some perldb -> PERLDB_* macro changes were missed"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199708100323.XAA27155@monk.mps.ohio-state.edu>
- Files: pp_ctl.c
-
- Title: "Further fix to lseek's in lockf_emulate_flock"
- From: Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
- Msg-ID: <199708060031.CAA07387@bombur2.uio.no>,
- <199708102225.AAA16970@bombur2.uio.no>
- Files: pp_sys.c
-
- Title: "GNU style perl --version (or any other --foo) ignored"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Kenneth Albanowski
- <kjahds@kjahds.com>, Stephen McCamant <alias@mcs.com>
- Msg-ID: <E0wx8MO-0007BS-00@ursa.cus.cam.ac.uk>,
- <Pine.LNX.3.93.970813122557.9443C-100000@kjahds.com>,
- <m0wy8nl-000EYgC@alias-2.pr.mcs.net>
- Files: pod/perldiag.pod perl.c
-
- Title: "seen_dot declaration in perl.c needed for VMS"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708072033.QAA09167@aatma.engin.umich.edu>
- Files: perl.c
-
- ------ DOCUMENTATION ------
-
- Title: "[PATCH] -D info in perlrun", "[PATCH] Re: -D info in perlrun"
- From: Stephen McCamant <alias@mcs.com>, ilya@math.ohio-state.edu (Ilya
- Zakharevich)
- Msg-ID: <1997Aug10.195832.2224477@hmivax.humgen.upenn.edu>,
- <m0wxNNL-000EYgC@alias-2.pr.mcs.net>,
- <m0wxz6l-000EYgC@alias-2.pr.mcs.net>
- Files: pod/perlrun.pod
-
- Title: "perlop pod inconsistent in presentation of regexp options"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Hans Mulder <hansm@icgned.nl>,
- jmr@whirlwind.fmr.com
- Msg-ID: <199708061404.KAA06717@whirlwind.fmr.com>,
- <199708081505.LAA09810@whirlwind.fmr.com>,
- <1997Aug7.160530.2196011@hmivax.humgen.upenn.edu>,
- <E0wwnqc-00057s-00@ursa.cus.cam.ac.uk>,
- <E0wwswg-00017x-00@ursa.cus.cam.ac.uk>
- Files: pod/perlop.pod
-
- Title: "pod2man generated .IX lines upset whatis on Solaris"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, jmr@whirlwind.fmr.com (John
- Redford)
- Msg-ID: <E0wxoUZ-0006Ee-00@ursa.cus.cam.ac.uk>
- Files: pod/pod2man.PL
-
- Title: "The description of the \Q metacharacter is confusing to novices"
- From: aml@world.std.com (Andrew M. Langmead)
- Msg-ID: <199708101946.AA06339@world.std.com>
- Files: pod/perlre.pod
-
- Title: "doc patch for pack("p",undef) packing a NULL pointer"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9708102159.AA11726@claudius.bfsec.bt.co.uk>
- Files: pod/perldelta.pod pod/perlfunc.pod
-
- Title: "perlfunc.pod error"
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- Msg-ID: <199708102235.QAA18420@jhereg.perl.com>
- Files: pod/perlfunc.pod
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "patch for documentation error in FileCache.pm"
- From: Mike Stok <mike@stok.co.uk>, mikebo@tellabs.com
- Msg-ID: <Pine.LNX.3.95.970810143321.437C-100000@stok.co.uk>
- Files: lib/FileCache.pm
-
- Title: "[PATCH] 5.004_02: Complex/Trig: update"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199708081842.VAA31214@alpha.hut.fi>
- Files: lib/Math/Complex.pm lib/Math/Trig.pm t/lib/complex.t
-
- Title: "CPAN Use of uninitialized value in newest perl"
- From: tom@amber.ssd.hcsc.com (Tom Horsley)
- Msg-ID: <9708091738.AA16435@amber.ssd.hcsc.com>
- Files: lib/CPAN.pm
-
- ------ PORTABILITY - WIN32 ------
-
- Title: "[PATCH] /x is not a valid shell switch on Win95"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708121720.NAA14760@aatma.engin.umich.edu>
- Files: win32/win32.c
-
- Title: "[PATCH] Win95-proofing pl2bat"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708121733.NAA14888@aatma.engin.umich.edu>
- Files: MANIFEST win32/Makefile win32/makefile.mk win32/bin/pl2bat.pl
- win32/bin/runperl.pl win32/bin/search.pl
- win32/bin/webget.pl
-
- Title: "[PATCH] [OK] Perl5.004_02 on Alpha NT"
- From: wmiddlet@adobe.com (William Middleton)
- Msg-ID: <199708072100.OAA13141@ducks>
- Files: win32/win32.c
-
- ------ PORTABILITY - OTHER ------
-
- Title: "Improve dual-universe comments in hints/sunos_4_1.sh"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.970812170358.14488E-100000@newton.phys>
- Files: hints/sunos_4_1.sh
-
- Title: "Dynamic Loading on MkLinux (osname=linux,archname=ppc-linux)"
- From: Chris Nandor <pudge@pobox.com>, Shimpei Yamashita
- <shimpei@socrates.patnet.caltech.edu>
- Msg-ID: <33EF1634.B36B6500@pobox.com>
- Files: hints/linux.sh
-
- Title: "5.004_02 Configure - worrying but normal errors displayed to user"
- From: Paul Marquess <pmarquess@bfsec.bt.co.uk>, pmarquess@bfsec.bt.co.uk
- (Paul Marquess)
- Msg-ID: <01BCA3DE.E257BFC0.pmarquess@bfsec.bt.co.uk>,
- <9708102159.AA11726@claudius.bfsec.bt.co.uk>
- Files: Configure os2/diff.configure
-
- Title: "Minor glitch with Perl 5.004_01 on SunOS 4.1.3 (groupstype)"
- From: thad@thadlabs.com (Thad Floryan)
- Msg-ID: <9708111415.AA03808@thadlabs.com>
- Files: hints/sunos_4_1.sh
-
- Title: "SCO Openserver 5.0.4 - add comment to hint file re compiler bug"
- From: Bill Glicker <billg@burrelles.com>
- Msg-ID: <Pine.SCO.3.96.970811153021.18457A-100000@laura.burrelles.com>
- Files: hints/sco.sh
-
- ------ UTILITIES ------
-
- Title: "perlbug -d non-interactive (with patch)"
- From: Ted Ashton <ashted@southern.edu>
- Msg-ID: <199708071418.KAA15711@ns.southern.edu>
- Files: utils/perlbug.PL
-
-
-
-----------------
-Version 5.004_02 Maintenance release 2 for 5.004
-----------------
-
-"When you work you are a flute through whose
- heart the whispering of the hours turns to music."
- -- from The Prophet by Kahlil Gibran
-
-
- HEADLINES FOR THIS MAINTENANCE RELEASE
-
- Major memory growth bug fixed.
- Object destruction is more timely and orderly.
- Further major enhancements to Win32 support, including:
- Win32 binary compatibility between Visual C++ and Borland C++.
- The -S option is now more useful on dos/Win32 (see perlrun).
- Implicit -p print now checks for write errors.
- DB_File now sub-classable (and other fixes).
- Memory usage stats available with perl's malloc (see perldelta).
- 'use UNIVERSAL;' deprecated (see perldelta).
- Internal integer to string conversions are faster.
- Carp can be forced to give stack traces (see perldoc Carp).
- Many other bug fixes and enhancements.
-
-
- ------ BUILD PROCESS ------
-
- Title: "[PATCH] m2t3: Configure: cf_time always in C locale"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199708061827.VAA09623@alpha.hut.fi>
- Files: Configure
-
- Title: "Configure can't find open3 on NeXTstep"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>, hans@icgned.nl
- (Hans Mulder)
- Msg-ID: <9706271816.AA10551@ icgned.icgned.nl >
- Files: Configure
-
- Title: "Don't use undef value in Config::myconfig"
- From: "Andreas J. Koenig" <k@sissy.in-berlin.de>, Chip Salzenberg
- <salzench@nielsenmedia.com>
- Msg-ID: <199706271525.RAA13517@sissy.in-berlin.de>
- Files: configpm
-
- Title: "make Configure recognize powerux hint (perl5.004_01)"
- From: tom@amber.ssd.hcsc.com (Tom Horsley)
- Msg-ID: <9707301938.AA08352@amber.ssd.hcsc.com>
- Files: Configure
-
- Title: "[PATCH]: HP-UX 10 w/o transition links"
- From: Jeff Okamoto <okamoto@hpcc123.corp.hp.com>
- Msg-ID: <199706181851.AA093329906@hpcc123.corp.hp.com>,
- <199706231650.AA070364627@hpcc123.corp.hp.com>
- Files: Configure
-
- Title: "INSTALL updates for GNU ld and __inet_* errors"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Files: INSTALL
-
- ------ CORE LANGUAGE ------
-
- Title: "[PATCH] Additional patch for "Can't execute ...""
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707191651.MAA04897@monk.mps.ohio-state.edu>
- Files: pod/perldiag.pod perl.c
-
- Title: "[PATCH] Band-aid fix for local([@%]$x)"
- From: Stephen McCamant <alias@mcs.com>
- Msg-ID: <m0wsb7J-000EYPC@alias-2.pr.mcs.net>
- Files: pod/perldiag.pod op.c pp_hot.c t/op/local.t
-
- Title: "[PATCH] Re: Bug in Regular Expressions when using colon as
- delimiter"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0wtbhv-0005Mm-00@ursa.cus.cam.ac.uk>
- Files: pod/perldiag.pod regcomp.c t/op/re_tests t/op/regexp.t
-
- Title: "[PATCH] Re: Can't pack literals as pointers"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708012250.SAA20278@aatma.engin.umich.edu>
- Files: pod/perldiag.pod pod/perlfunc.pod pp.c t/op/pack.t
-
- Title: "[PATCH] Do not constant-fold ops that depend on locale if C<use
- locale>"
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Msg-ID: <199707210519.BAA13785@nielsenmedia.com>
- Files: op.c
-
- Title: "Eval fails in certain situations (eval "{'...")"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707211753.NAA14940@aatma.engin.umich.edu>
- Files: t/comp/term.t toke.c
-
- Title: "Fix memory leak on eval 'sub {}'"
- From: Chip Salzenberg <chip@rio.atlantic.net>
- Files: pp_ctl.c
-
- Title: "stringify looses integerness"
- From: Gisle Aas <aas@bergen.sn.no>
- Msg-ID: <hbu4l96z2.fsf@bergen.sn.no>
- Files: sv.c
-
- Title: "Fix intolerance of a space between "print" and opening paren"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707011421.KAA15836@aatma.engin.umich.edu>
- Files: toke.c
-
- Title: "[PATCH] Re: Calling Perl from within C from within Perl"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199706301842.OAA05569@aatma.engin.umich.edu>
- Files: perl.c
-
- Title: "UNIVERSAL.pm and import methods (tests)"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0whfHh-0007bW-00@ursa.cus.cam.ac.uk>
- Files: t/op/universal.t universal.c
-
- Title: "Avoid core dump on some paren'd regexp matches", "One-liner regex
- causes SEGV on 5.003 under HP-UX and Linux"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199706261236.NAA03472@crypt.compulink.co.uk>,
- <199707061144.MAA04443@crypt.compulink.co.uk>
- Files: regexec.c t/op/re_tests
-
- Title: "Forbid negative splice offset beyond array start"
- From: "John L. Allen" <allen@gateway.grumman.com>, Chip Salzenberg
- <chip@rio.atlantic.net>
- Msg-ID: <Pine.SOL.3.91.970625111744.19300A-100000@gateway>
- Files: pp.c
-
- Title: "Forbid "goto" into middle of foreach loop"
- From: Chip Salzenberg <chip@rio.atlantic.net>
- Files: pod/perldiag.pod pp_ctl.c
-
- Title: "Fix C<qq #hi#>"
- From: Chip Salzenberg <chip@rio.atlantic.net>
- Files: toke.c
-
- Title: "bless file handles as FileHandle if loaded else IO::Handle"
- From: Gisle Aas <aas@bergen.sn.no>
- Msg-ID: <hyb80drrz.fsf@bergen.sn.no>
- Files: gv.c lib/FileHandle.pm
-
- Title: "infinite recursion in malloc() with some compile flags"
- From: Hans Mulder <hansmu@xs4all.nl>
- Msg-ID: <199706240050.CAA10550@xs2.xs4all.nl>
- Files: malloc.c
-
- Title: "sv_vcatpvfn hogs memory [Patch included]"
- From: Matthias Neeracher <neeri@iis.ee.ethz.ch>
- Msg-ID: <199706211521.RAA12778@solar.ethz.ch>
- Files: sv.c
-
- Title: "Fix '-' flag on sprintf() of floats"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Jarkko Hietaniemi
- <jhi@iki.fi>
- Msg-ID: <199705270646.JAA02510@alpha.hut.fi>
- Files: sv.c
-
- Title: "Free temps before calling END blocks", "Too late destruction"
- From: Chip Salzenberg <chip@rio.atlantic.net>
- Msg-ID: <m33erfv5hx.fsf@chany-p100.emwp.com>
- Files: perl.c
-
- Title: "Fix C<print $foo x 2> parsing"
- From: "Chuck D. Phillips (NON-HP Employee)" <cdp@hpescdp.fc.hp.com>, Chip
- Salzenberg <chip@rio.atlantic.net>
- Msg-ID: <199706121737.KAA00503@palrel3.hp.com>
- Files: toke.c
-
- Title: "Fix lockf_emulate_flock() positioning"
- From: Chip Salzenberg <chip@rio.atlantic.net>, gen@atd.rdc.ricoh.co.jp
- Msg-ID: <199706091132.UAA00895@wampa.atd.rdc.ricoh.co.jp>
- Files: pp_sys.c
-
- Title: "Don't use atol() for unsigned values", "signedness problem in
- pack("N", "value");"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Roger Espel Llima
- <espel@llaic.univ-bpclermont.fr>
- Msg-ID: <19970531200007.40218@llaic.univ-bpclermont.fr>
- Files: sv.c
-
- Title: "Don't warn about "${foo}" in string, even if &foo exists"
- From: Chip Salzenberg <chip@rio.atlantic.net>
- Files: toke.c
-
- Title: "[PATCH] -p does not check for failure of implicit print"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v0311070aafea3fa83061@[194.51.248.75]>
- Files: pod/perldiag.pod pod/perlrun.pod toke.c
-
- Title: "Fix double form() in XS version check"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707150010.UAA00816@monk.mps.ohio-state.edu>
- Files: XSUB.h
-
- Title: "Constant-fold sprintf()"
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Files: opcode.pl
-
- Title: "[PATCH] Fix double form() in XS version check"
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Msg-ID: <199707210518.BAA13771@nielsenmedia.com>
- Files: XSUB.h
-
- Title: "[PATCH] Make DEBUGGING_MSTATS info consistent"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.970731131529.3740A-100000@newton.phys>
- Files: INSTALL pod/perldelta.pod perl.h
-
- Title: "Minor Win32 glitch with -S flag"
- From: Warren Jones <wjones@tc.fluke.com>
- Msg-ID: <97Jun19.150511pdt.35717-2@gateway.fluke.com>
- Files: perl.c
-
- Title: "Slightly safer signals"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Files: mg.c perl.c
-
- Title: "Time::Local patch (plus perl.c and filehand.t)"
- From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Files: lib/Time/Local.pm perl.c t/lib/filehand.t
-
- Title: "[PATCH] Weirdness in sv_peek()"
- From: Stephen McCamant <alias@mcs.com>
- Msg-ID: <m0wsEMU-000EYLC@alias-2.pr.mcs.net>,
- <m0wsf7Y-000EYPC@alias-2.pr.mcs.net>
- Files: sv.c
-
- Title: "Win32 UNC path causes autoload to fail"
- From: Warren Jones <wjones@tc.fluke.com>
- Msg-ID: <97Jun18.163826pdt.35714-1@gateway.fluke.com>
- Files: pp_ctl.c
-
- Title: "[PATCH]: reduced malloc patch"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707150829.EAA01291@monk.mps.ohio-state.edu>
- Files: av.c
-
- Title: "[PATCH] $\1 and serious bug in evalling"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707262127.RAA12883@monk.mps.ohio-state.edu>
- Files: pp_ctl.c
-
- Title: "Faster int to string conversion", "[PATCH} Re: memory leak in buffer
- safety code"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>, Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <199707140912.KAA09935@crypt.compulink.co.uk>,
- <199707142050.QAA20976@rio.atlantic.net>,
- <199707182035.VAA20990@crypt.compulink.co.uk>,
- <9707151040.AA02883@toad.ig.co.uk>
- Files: global.sym sv.c
-
- Title: "object never destructs"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707131955.PAA29655@aatma.engin.umich.edu>
- Files: scope.c t/op/ref.t
-
- Title: "[PATCH] -S flag fixes for DOSISH platforms", "[RESEND] [PATCH] -S
- flag fixes for DOSISH platforms"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707250043.UAA02385@aatma.engin.umich.edu>,
- <199707301828.OAA19508@aatma.engin.umich.edu>
- Files: pod/perldiag.pod pod/perlrun.pod perl.c
-
- Title: "Perldb internal flag rehaul"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Files: pod/perldebug.pod pod/perlvar.pod perl.h gv.c mg.c op.c perl.c
- pp_ctl.c pp_hot.c pp_sys.c sv.c toke.c
-
- Title: "[PATCH] Re: q and escaping paired delimiters"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Kenneth Albanowski
- <kjahds@kjahds.com>
- Msg-ID: <199707280516.BAA14055@aatma.engin.umich.edu>,
- <Pine.LNX.3.93.970727172201.350K-100000@kjahds.com>,
- <Pine.LNX.3.93.970728013540.350U-100000@kjahds.com>
- Files: t/base/lex.t toke.c
-
- Title: "Enable PERL_DEBUG_MSTATS without -DDEBUGGING_MSTATS"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707150829.EAA01291@monk.mps.ohio-state.edu>
- Files: malloc.c perl.c
-
- Title: "semctl broken under Linux"
- From: Andreas Schwab <schwab@LS5.informatik.uni-dortmund.de>, Andreas
- Schwab <schwab@issan.informatik.uni-dortmund.de>, Graham
- Barr <gbarr@ti.com>, Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <33C38291.2D9302DA@ti.com>,
- <9707040912.AA03470@issan.informatik.uni-dortmund.de>,
- <9707041538.AA08946@toad.ig.co.uk>,
- <9707070924.AA11774@issan.informatik.uni-dortmund.de>,
- <9707090933.AA19012@issan.informatik.uni-dortmund.de>
- Files: doio.c
-
- Title: "[PATCH] m2t2: problem in NetBSD 1.2D with sfio"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Files: perl.h
-
- Title: "fix substr fix (tests 27 etc)", "perl5.004_02 trial 1 available
- (with substr bug and still some"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>, Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199707301759.SAA02899@crypt.compulink.co.uk>,
- <199707302228.BAA18032@alpha.hut.fi>,
- <199707310929.KAA06515@crypt.compulink.co.uk>,
- <E0wtruH-0002JM-00@ursa.cus.cam.ac.uk>
- Files: pp.c
-
- Title: "Fwd: substr("foo", -1000)", "substr: warn if substring doesn't
- intersect original at all"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199707100655.JAA14924@alpha.hut.fi>,
- <E0wm1JG-0000UY-00@taurus.cus.cam.ac.uk>
- Files: pod/perlfunc.pod pp.c t/op/substr.t
-
- Title: "[PATCH] work around compiler bug on CX/UX (perl5.004_01)"
- From: tom@amber.ssd.hcsc.com (Tom Horsley)
- Msg-ID: <9707301934.AA18594@amber.ssd.hcsc.com>
- Files: hints/cxux.sh pp.c
-
- ------ DOCUMENTATION ------
-
- Title: "Duplicates in perlguts.pod"
- From: hans@icgned.nl (Hans Mulder)
- Msg-ID: <9707082346.AA13231@ icgned.icgned.nl >
- Files: pod/perlguts.pod
-
- Title: "Better "Can't locate auto/%s.al in @INC" error documentation"
- From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Msg-ID: <1997Jun24.195847.2091744@hmivax.humgen.upenn.edu>
- Files: pod/perldiag.pod
-
- Title: "new perlembed.pod:match.c"
- From: Doug MacEachern <dougm@opengroup.org>
- Msg-ID: <199707170355.XAA21370@postman.opengroup.org>
- Files: pod/perlembed.pod
-
- Title: "Document bug fix in localization of $1 etc."
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Files: pod/perldelta.pod
-
- Title: "[PATCH] Major goof in XS Tutorial regarding subdirs"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707260920.FAA12453@monk.mps.ohio-state.edu>
- Files: pod/perlxstut.pod
-
- Title: "[PATCH] Magic info in perlguts, take 2"
- From: Stephen McCamant <alias@mcs.com>
- Msg-ID: <m0wr6P8-000EYLC@alias-2.pr.mcs.net>
- Files: pod/perlguts.pod
-
- Title: "[BUG:PATCH] Missing semicolon message wrong in perldiag"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0welEn-0002vT-00@taurus.cus.cam.ac.uk>,
- <E0wfRJU-0006Aw-00@taurus.cus.cam.ac.uk>
- Files: pod/perldiag.pod
-
- Title: "[PATCH] Updates to perlguts (repost)"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707152223.SAA00776@monk.mps.ohio-state.edu>
- Files: pod/perlguts.pod
-
- Title: "[BUG:47:LOG] Dropped "and" in pod2man"
- From: hans@icgned.nl (Hans Mulder)
- Msg-ID: <9707082355.AA13254@ icgned.icgned.nl >
- Files: pod/pod2man.PL
-
- Title: "[BUG] perlembed.pod:power.c example"
- From: Doug MacEachern <dougm@opengroup.org>
- Msg-ID: <199707181344.JAA10565@postman.opengroup.org>
- Files: pod/perlembed.pod
-
- Title: "[PATCH] arguments swapped in perlapio.pod"
- From: Hans Mulder <hansmu@xs4all.nl>
- Msg-ID: <199706240049.CAA10534@xs2.xs4all.nl>
- Files: pod/perlapio.pod
-
- Title: "[PATCH] cool quote for perldebug"
- From: Greg Bacon <gbacon@adtrn-srv4.adtran.com>
- Msg-ID: <199707292140.QAA28579@adtrn-srv4.adtran.com>
- Files: pod/perldebug.pod
-
- Title: "[PATCH] multiline commands in qx//"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707212350.TAA18496@aatma.engin.umich.edu>
- Files: pod/perlfunc.pod pod/perlop.pod
-
- Title: "patch to 5.004_01 perltrap.pod"
- From: jmm@revenge.elegant.com (John Macdonald)
- Msg-ID: <9706231525.AA22790@revenge.elegant.com>
- Files: pod/perltrap.pod
-
- Title: "perl4 to perl5.004 converion with debugger problem"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0wdKJY-00010w-00@taurus.cus.cam.ac.uk>
- Files: pod/perltrap.pod
-
- Title: "done3/perlbook.pod"
- From: Randal Schwartz <merlyn@gadget.cscaper.com>
- Files: pod/perlbook.pod
-
- Title: "[PATCH] readline and readpipe are undocumented"
- From: Hans Mulder <hansmu@xs4all.nl>
- Files: pod/perlfunc.pod
-
- Title: "Document use of - in a regex char class."
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03102804afd578bcef2c@[194.51.248.88]>
- Files: pod/perlre.pod
-
- Title: "[PATCH] splitpod broken in 5.004_01"
- From: Hans Mulder <hansmu@xs4all.nl>, Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <199706240048.CAA10515@xs2.xs4all.nl>,
- <9706241612.AA09119@toad.ig.co.uk>
- Files: pod/splitpod
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "Carp::cluck() and -MCarp=verbose"
- From: Tim.Bunce@ig.co.uk, epeschko@elmer.tci.com (Ed Peschko)
- Msg-ID: <199708060607.AAA16681@den-mdev1.tci.com>,
- <199708062105.PAA09878@den-mdev1.tci.com>
- Files: lib/Carp.pm
-
- Title: "Warning from calls using "use Shell""
- From: Andrew Pimlott <pimlott@abel.math.harvard.edu>
- Msg-ID: <Pine.SOL.3.91.970806173903.7320H-100000@abel>
- Files: lib/Shell.pm
-
- Title: "confessing a carp"
- From: Chip Salzenberg <chip@rio.atlantic.net>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>, Nick Ing-Simmons
- <nick@ni-s.u-net.com>, Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <199708052155.WAA25393@crypt.compulink.co.uk>,
- <199708060721.IAA30894@crypt.compulink.co.uk>,
- <199708061533.LAA01313@rio.atlantic.net>,
- <33E79BE2.4E6F@ni-s.u-net.com>,
- <33E8E3C5.62C@ni-s.u-net.com>,
- <9708051619.AA13764@toad.ig.co.uk>
- Files: lib/Carp.pm
-
- Title: "[BUG:PATCH] dumpvar.pl parses some references incorrectly"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0wwAjQ-0004l6-00@ursa.cus.cam.ac.uk>
- Files: lib/dumpvar.pl
-
- Title: "[PATCH] m2t3: minor doc patch (to obsolete I18N::Collate)"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199708060732.KAA02675@alpha.hut.fi>
- Files: lib/I18N/Collate.pm
-
- Title: "[PATCH] Binary installers for Perl modules"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707210006.UAA06165@monk.mps.ohio-state.edu>
- Files: lib/ExtUtils/Install.pm
-
- Title: "m2t2 broke CPAN.pm :-("
- From: a.koenig@kulturbox.de (Andreas J. Koenig)
- Files: lib/CPAN.pm lib/Bundle/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
-
- Title: "[PATCH] CPAN.pm on OS/2"
- From: "Andreas J. Koenig" <k@anna.in-berlin.de>, Ilya Zakharevich
- <ilya@math.ohio-state.edu>
- Msg-ID: <199707180415.AAA03180@monk.mps.ohio-state.edu>,
- <199707181407.QAA12920@anna.in-berlin.de>
- Files: lib/CPAN.pm
-
- Title: "Docs of IO::Handle [PATCH]"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707222307.TAA08380@monk.mps.ohio-state.edu>
- Files: ext/IO/lib/IO/Handle.pm
-
- Title: "Exporter errors give wrong location"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0wdJra-0000n8-00@taurus.cus.cam.ac.uk>
- Files: lib/Exporter.pm
-
- Title: "[PATCH] Exporter new export_to_level method"
- From: epeschko@elmer.tci.com (Ed Peschko)
- Files: lib/Exporter.pm
-
- Title: "DB_File produces spurious output when trapping __DIE__"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9706302125.AA28254@claudius.bfsec.bt.co.uk>
- Files: ext/DB_File/DB_File.pm
-
- Title: "Remove 'use UNIVERSAL;', switch to UNIVERSAL::isa()"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0whaZJ-0007BA-00@ursa.cus.cam.ac.uk>
- Files: lib/Class/Struct.pm lib/File/Compare.pm lib/File/Copy.pm
-
- Title: "perl5.004 Time::Local still broken"
- From: Mathias Koerber <mathias@dnssec1.singnet.com.sg>
- Msg-ID: <199706260452.MAA22647@dnssec1.singnet.com.sg>
- Files: lib/Time/Local.pm
-
- Title: "Sys::Hostname should localize $SIG{__DIE__}"
- From: Ken Shan <ken@digitas.harvard.edu>
- Msg-ID: <199707070357.XAA18065@digitas.harvard.edu>
- Files: lib/Sys/Hostname.pm
-
- Title: "xsubpp patch"
- From: John Tobey <jtobey@user1.channel1.com>
- Msg-ID: <199707010221.CAA01234@remote133>
- Files: lib/ExtUtils/xsubpp
-
- Title: "DB_File 1.15 patch"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9707192117.AA01973@claudius.bfsec.bt.co.uk>
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs ext/DB_File/typemap
- t/lib/db-btree.t t/lib/db-hash.t t/lib/db-recno.t
-
- Title: "Problems with setvbuf"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707250040.UAA11000@monk.mps.ohio-state.edu>
- Files: ext/IO/IO.xs
-
- Title: "[PATCH] Repost of fork() debugger patch"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707252101.RAA11846@monk.mps.ohio-state.edu>
- Files: lib/perl5db.pl lib/Term/ReadLine.pm
-
- Title: "IO::File and DB_File pollutes namespace with Fcntl constants"
- From: Gisle Aas <aas@bergen.sn.no>
- Msg-ID: <h205qyijy.fsf@bergen.sn.no>
- Files: ext/IO/lib/IO/File.pm
-
- Title: "[MM] [PATCH] Re: Liblist problems for MSWin32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199706182152.RAA20273@aatma.engin.umich.edu>
- Files: lib/ExtUtils/Liblist.pm
-
- Title: "Net::hostent documentation error"
- From: gnat@frii.com
- Msg-ID: <199707082222.QAA24728@elara.frii.com>
- Files: lib/Net/hostent.pm
-
- Title: "PATCH: make DBM*_File modules sub-classable"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9707121854.AA19472@claudius.bfsec.bt.co.uk>
- Files: ext/GDBM_File/typemap ext/NDBM_File/typemap
- ext/ODBM_File/ODBM_File.xs ext/SDBM_File/typemap
- t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t
-
- Title: "Sys::Syslog patch to allow unix domain sockets"
- From: Sean Robinson <robinson_s@sc.maricopa.edu>
- Msg-ID: <33B31342.7EB16A44@sc.maricopa.edu>
- Files: lib/Sys/Syslog.pm
-
- Title: "'use UNIVERSAL;' deprecated, do C<UNIVERSAL::isa()> instead",
- "UNIVERSAL.pm and import methods"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Gisle Aas <aas@bergen.sn.no>,
- Graham Barr <gbarr@ti.com>, Gurusamy Sarathy
- <gsar@engin.umich.edu>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>
- Msg-ID: <199706271701.NAA25664@aatma.engin.umich.edu>,
- <199706271904.UAA00120@crypt.compulink.co.uk>,
- <199706272054.QAA28913@aatma.engin.umich.edu>,
- <199706301554.LAA03763@aatma.engin.umich.edu>,
- <33B22248.7D7C1985@ti.com>,
- <E0wf5TN-0006ps-00@taurus.cus.cam.ac.uk>,
- <E0wguTR-0005bs-00@ursa.cus.cam.ac.uk>,
- <E0whaZJ-0007BA-00@ursa.cus.cam.ac.uk>,
- <E0whfHh-0007bW-00@ursa.cus.cam.ac.uk>,
- <E0wiyUG-00073j-00@taurus.cus.cam.ac.uk>,
- <hiuyv6q9k.fsf@bergen.sn.no>
- Files: lib/Class/Struct.pm lib/File/Compare.pm lib/File/Copy.pm
- t/op/universal.t universal.c
-
- Title: "[MM] Small patch to MakeMaker, new release"
- From: "Andreas J. Koenig" <k@anna.in-berlin.de>
- Msg-ID: <199706281603.SAA10869@anna.in-berlin.de>
- Files: lib/ExtUtils/Command.pm lib/ExtUtils/Install.pm
- lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm
- lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm
-
- Title: "ExtUtils-Embed upgrade"
- From: Doug MacEachern <dougm@opengroup.org>
- Files: lib/ExtUtils/Embed.pm
-
- Title: "[PATCH] icmp tweak for IO::Socket"
- From: Nick.Ing-Simmons@tiuk.ti.com
- Msg-ID: <199707041240.NAA21484@pluto.tiuk.ti.com>
- Files: ext/IO/lib/IO/Socket.pm
-
- Title: "Allow concurrent mkdir in File::Path::mkpath"
- From: schattev@imb-jena.de (Ruben Schattevoy)
- Msg-ID: <199707300943.LAA21574@kant.imb-jena.de>
- Files: lib/File/Path.pm
-
- Title: "CPAN.pm, $VERSION and nested (bundled) modules."
- From: a.koenig@kulturbox.de (Andreas J. Koenig)
- Files: lib/ExtUtils/Install.pm lib/ExtUtils/Liblist.pm
- lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
- lib/ExtUtils/Mksymlists.pm
-
- Title: "[PATCH] perl debugger, win32, and emacs"
- From: Jay Rogers <jay@rgrs.com>
- Msg-ID: <199707311759.NAA13276@crooked-i.mitre.org>
- Files: lib/perl5db.pl
-
- Title: "[PATCH] pod2html mangles C<&foo(42);>"
- From: Hans Mulder <hansmu@xs4all.nl>
- Msg-ID: <199706250057.CAA10162@xs1.xs4all.nl>
- Files: lib/Pod/Html.pm
-
- Title: "[PATCH] posix.xs broken on VMS 7.1"
- From: Dan Sugalski <sugalsd@lbcc.cc.or.us>
- Msg-ID: <3.0.2.32.19970718095755.00875ba0@stargate.lbcc.cc.or.us>
- Files: ext/POSIX/POSIX.xs
-
- Title: "MM_Unix.pm nits for Win32 DMAKE"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708032051.QAA14248@aatma.engin.umich.edu>
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Sys::Hostname -w unclean in trial 2"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708032055.QAA14278@aatma.engin.umich.edu>
- Files: lib/Sys/Hostname.pm
-
- Title: "(3) File::Find::find()/finddepth() bugs with toplevel paths"
- From: "Conrad E. Kimball" <cek@tblv021.ca.boeing.com>
- Msg-ID: <199707040045.RAA24459@mailgate2.boeing.com>
- Files: lib/File/Find.pm
-
- ------ OTHER CHANGES ------
-
- Title: "EMERGENCY_SBRK or PERL_EMERGENCY_SBRK ?"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>,
- ilya@math.ohio-state.edu (Ilya Zakharevich)
- Msg-ID: <1997Aug1.191631.2167470@hmivax.humgen.upenn.edu>,
- <Pine.SUN.3.96.970801134400.4393F-100000@newton.phys>
- Files:
- Files:
-
- ------ PORTABILITY - WIN32 ------
-
- Title: "[PATCH] Embedding threaded apps in perl.dll"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707261518.LAA24346@aatma.engin.umich.edu>,
- <199707301833.OAA19570@aatma.engin.umich.edu>
- Files: win32/win32.c
-
- Title: "Minor fix for pl2bat.bat", "[PATCH] Re: Minor fix for pl2bat.bat"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Warren Jones
- <wjones@tc.fluke.com>
- Msg-ID: <199707061843.OAA23874@aatma.engin.umich.edu>,
- <97Jun24.115804pdt.35752-2@gateway.fluke.com>
- Files: win32/bin/pl2bat.bat
-
- Title: "WIN32 Build - pod2xxx.bat Missing?", "[PATCH] Re: WIN32 Build -
- pod2xxx.bat Missing?"
- From: Chris Williams <chrisw@netinfo.com.au>, Gurusamy Sarathy
- <gsar@engin.umich.edu>
- Msg-ID: <199707011423.KAA15855@aatma.engin.umich.edu>,
- <33B8B962.D96FA1F5@netinfo.com.au>
- Files: win32/Makefile win32/makefile.mk
-
- Title: "[PATCH] Win32 sitelib intuition from DLL location"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199706231647.MAA23260@aatma.engin.umich.edu>
- Files: win32/win32.h win32/config_h.PL win32/win32.c
-
- Title: "[PATCH] binary coexistence on win32", "[RESEND] [PATCH] binary
- coexistence on win32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707250109.VAA02666@aatma.engin.umich.edu>,
- <199707301829.OAA19516@aatma.engin.umich.edu>
- Files: lib/ExtUtils/Mksymlists.pm win32/win32.h win32/win32io.h
- win32/win32iop.h win32/makedef.pl win32/win32.c
- win32/win32io.c
-
- Title: "[PATCH] docs for win32 utilities"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707250045.UAA02510@aatma.engin.umich.edu>
- Files: win32/bin/pl2bat.bat win32/bin/runperl.bat
-
- Title: "[PATCH] exec() fixed on win32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199706241525.LAA06554@aatma.engin.umich.edu>
- Files: win32/win32.h win32/win32io.h win32/win32iop.h README.win32 doio.c
- win32/config_H.bc win32/config_H.vc win32/makedef.pl
- win32/win32.c win32/win32io.c
-
- Title: "[PATCH] getenv() after my_setenv() gets old entry on Win32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199706231700.NAA23400@aatma.engin.umich.edu>
- Files: win32/win32.h win32/win32.c
-
- Title: "[PATCH] getservby*() calls fail on Windows NT"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199706231654.MAA23276@aatma.engin.umich.edu>
- Files: win32/win32sck.c
-
- Title: "[PATCH] minor win32 scribbles"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Hugo van der Sanden
- <hv@crypt.compulink.co.uk>
- Msg-ID: <199707262307.TAA28410@aatma.engin.umich.edu>,
- <199707270832.JAA19399@crypt.compulink.co.uk>
- Files: pod/perldelta.pod README.win32 win32/Makefile win32/config.bc
- win32/config.vc win32/makefile.mk
-
- Title: "[PATCH] trial2: some batch files won't run"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708040226.WAA17301@aatma.engin.umich.edu>
- Files: win32/bin/pl2bat.bat win32/bin/runperl.bat
-
- Title: "[PATCH] win32 docs and runperl.bat"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707070446.AAA29560@aatma.engin.umich.edu>
- Files: MANIFEST README.win32 win32/bin/pl2bat.bat win32/bin/runperl.bat
-
- Title: "[PATCH] win32 extras and embedding"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707250232.WAA03421@aatma.engin.umich.edu>,
- <199707301831.OAA19528@aatma.engin.umich.edu>
- Files: dosish.h win32/win32.h perl.c win32/config.bc win32/config_H.bc
- win32/makedef.pl win32/perllib.c win32/win32.c
-
- Title: "[PATCH] win32 tweaks"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707042150.RAA01065@aatma.engin.umich.edu>
- Files: win32/win32.h win32/win32.c
-
- Title: "[PATCH] win32_stat() fixes (2nd try)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708040137.VAA16810@aatma.engin.umich.edu>
- Files: t/op/stat.t win32/win32iop.h win32/win32.c
-
- ------ PORTABILITY - OTHER ------
-
- Title: "Additional OS/2 patches"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Ilya Zakharevich
- <ilya@math.ohio-state.edu>
- Msg-ID: <199708020823.EAA19521@monk.mps.ohio-state.edu>,
- <199708021424.KAA28561@aatma.engin.umich.edu>,
- <199708042108.RAA27671@aatma.engin.umich.edu>
- Files: README.os2 os2/Changes perl.c
-
- Title: "Additional patch is needed for os2/diff.configure"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199708020745.DAA19483@monk.mps.ohio-state.edu>
- Files: os2/diff.configure
-
- Title: "Assorted OS/2 fixes"
- From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Msg-ID: <1997Jun16.163234.2091727@hmivax.humgen.upenn.edu>
- Files: hints/os2.sh os2/diff.configure os2/os2ish.h README.os2 os2/Changes
- os2/Makefile.SHs os2/os2.c util.c
-
- Title: "[PATCH] Changes for VMS 7.1 support"
- From: Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>, Dan Sugalski
- <sugalsd@lbcc.cc.or.us>
- Msg-ID: <01ILDXUH0J1W00026U@hmivax.humgen.upenn.edu>,
- <3.0.2.32.19970718095935.0087a2d0@stargate.lbcc.cc.or.us>
- Files: vms/sockadapt.h vms/config.vms vms/sockadapt.c
-
- Title: "[PATCH] Easier TCP stack selection for VMS"
- From: Dan Sugalski <sugalsd@lbcc.cc.or.us>
- Msg-ID: <3.0.1.32.19970624151939.00994490@stargate.lbcc.cc.or.us>
- Files: vms/descrip.mms
-
- Title: "Minor VMS patches"
- From: Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
- Msg-ID: <01ILCUO6XXTE000WFK@hmivax.humgen.upenn.edu>
- Files: lib/ExtUtils/MM_VMS.pm vms/vmsish.h vms/descrip.mms vms/test.com
- vms/vms.c vms/ext/filespec.t
-
- Title: "[PATCH] Two un-disabled tests for VMS"
- From: Dan Sugalski <sugalsd@lbcc.cc.or.us>
- Msg-ID: <3.0.2.32.19970718095842.00879220@stargate.lbcc.cc.or.us>
- Files: vms/test.com
-
- Title: "fixes for hints/svr4 for UnixWare >= 2.1.1"
- From: John Hughes <john@titanic.atlantech.com>
- Msg-ID: <199707021230.OAA24230@titanic.AtlanTech.COM>
- Files: hints/svr4.sh
-
- Title: "make depend loop fix and minor OS/2 improvements to build process"
- From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Files: Makefile.SH hints/os2.sh os2/Makefile.SHs
-
- ------ TESTS ------
-
- Title: "Add xor tests to test suite"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199706250730.IAA06097@crypt.compulink.co.uk>
- Files: t/comp/cmdopt.t
-
- Title: "[PATCH] enable some tests on Win32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199707250029.UAA02351@aatma.engin.umich.edu>
- Files: t/op/magic.t
-
- Title: "Fix up problems with *DBM tests"
- From: Paul Marquess <pmarquess@bfsec.bt.co.uk>
- Files: t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t
-
- ------ UTILITIES ------
-
- Title: "[PATCH] m2t3: utils/perlbug.PL: -ok report is not a bug"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199708071022.NAA13008@alpha.hut.fi>
- Files: utils/perlbug.PL
-
- Title: "perlbug - check sendmail and fix win32 tmp path"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199708060349.XAA15895@aatma.engin.umich.edu>
- Files: utils/perlbug.PL
-
- Title: "OK: perl <some_version> on <some_system> (corrected)", "enhancements
- to perlbug -ok"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Stephen McCamant <alias@mcs.com>
- Msg-ID: <E0wukVt-0006Da-00@ursa.cus.cam.ac.uk>,
- <E0wvMQl-00055y-00@ursa.cus.cam.ac.uk>,
- <m0wv81x-000EYPC@alias-2.pr.mcs.net>
- Files: utils/Makefile utils/perlbug.PL
-
- Title: "perlbug -ok [PATCH]"
- From: "Charles F. Randall" <crandall@free.click-n-call.com>
- Msg-ID: <199706181824.MAA04082@free.click-n-call.com>
- Files: utils/perlbug.PL
-
- Title: "perlbug broken"
- From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
- Msg-ID: <9707040912.AA03466@issan.informatik.uni-dortmund.de>
- Files: utils/perlbug.PL
-
- Title: "[PATCH] perlbug under OS/2"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707180333.XAA03102@monk.mps.ohio-state.edu>
- Files: utils/perlbug.PL
-
- Title: "perldoc doesn't grok Win32 UNC paths"
- From: Warren Jones <wjones@tc.fluke.com>
- Msg-ID: <97Jun17.184420pdt.35728-1@gateway.fluke.com>,
- <97Jun18.165618pdt.35713-1@gateway.fluke.com>
- Files: utils/perldoc.PL
-
- Title: "[PATCH] perldoc under OS/2"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199707180340.XAA03114@monk.mps.ohio-state.edu>
- Files: utils/perldoc.PL
-
- Title: "h2ph corrections to avoid redefined sub warnings"
- From: wdconsta <wdconsta@cs.adelaide.edu.au>
- Msg-ID: <Pine.SV4.3.93.970708143446.23808A-100000@florence.teaching.cs.adelaide.edu.au>
- Files: utils/h2ph.PL
-
-
-
-----------------
-Version 5.004_01 Maintenance release 1 for 5.004
-----------------
-
-"Practice random kindness and senseless acts of beauty"
- -- Anne Herbert
-
- HEADLINES FOR THIS MAINTENANCE RELEASE
-
- (..., undef, ...) = split(...) bug fixed.
- Win32 support greatly improved, now very strong.
- Memory leak using Tied hashes and arrays fixed.
- Documentation updates.
- Many other bug fixes and enhancements.
-
- CORE LANGUAGE
-
- Title: "[PATCH] first true value returned by scalar C<...> is wrong"
- From: hansm@euronet.nl
- Files: pp_ctl.c t/op/flip.t
-
- Title: "Regex Bug in 5.003_26 thru 003_99a"
- From: Andreas Karrer <karrer@ife.ee.ethz.ch>, Chip Salzenberg
- <chip@atlantic.net>
- Msg-ID: <199705152303.BAA08890@kuru.ee.ethz.ch>,
- <199705161915.PAA18721@rio.atlantic.net>
- Files: regcomp.h regcomp.c regexec.c
-
- Title: "[PATCH] -w interacts badly with -Dt"
- From: Spider Boardman <spider@Orb.Nashua.NH.US>
- Files: sv.c
-
- Title: "No DESTROY on untie. Tie memory leak fixed."
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Jay Rogers <jay@rgrs.com>,
- pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <199705170235.WAA00267@fluffy.rgrs.com>,
- <199705172156.RAA20561@aatma.engin.umich.edu>,
- <9705171506.AA04491@claudius.bfsec.bt.co.uk>
- Files: pp_hot.c
-
- Title: "magic_clear_all_env proto should match svt_clear"
- From: Nick Ing-Simmons <nik@tiuk.ti.com>
- Files: proto.h mg.c
-
- Title: "[PATCH] ENV leaks on win32 (was Re: Comments on ENV patch sought)",
- "[PATCH] for NETaa13787: %ENV=(); doesn't clear the environment"
- From: hansm@euronet.nl, pvhp@forte.com (Peter Prymmer)
- Msg-ID: <199705292240.AAA01135@mail.euronet.nl>
- Files: embed.h perl.h proto.h global.sym mg.c t/op/magic.t
-
- Title: "Patch to show @INC when require dies"
- From: avera@hal.com (Jim Avera)
- Msg-ID: <9705230121.AA27872@membrane.hal.com>
- Files: pp_ctl.c
-
- Title: "[PATCH] bug with m// nested inside s///e"
- From: hansm@euro.net
- Files: op.c t/op/subst.t
-
- DOCUMENTATION
-
- Title: "[PATCH] perlembed Win32 update"
- From: Doug MacEachern <dougm@opengroup.org>
- Files: pod/perlembed.pod
-
- Title: "perldiag.pod patch - "(W) substr outside string" is "(S)evere" if
- used as lvalue."
- From: John Hughes <john@AtlanTech.COM>
- Files: pod/perldiag.pod
-
- Title: "local(%ENV) looses magic - document behaviour"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: pod/perlsub.pod
-
- Title: "[PATCH] perlguts caveats", "perlguts additions"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, ilya@math.ohio-state.edu
- (Ilya Zakharevich)
- Msg-ID: <199705180052.UAA22066@aatma.engin.umich.edu>,
- <199705180202.WAA22826@aatma.engin.umich.edu>,
- <199705301341.JAA05204@aatma.engin.umich.edu>,
- <1997May17.235722.2033087@hmivax.humgen.upenn.edu>
- Files: pod/perlguts.pod
-
- Title: "pod2man produces broken pages", "weird condition in perldelta breaks
- nroff"
- From: Davin Milun <milun@cs.Buffalo.EDU>, Hans Mulder <hansm@icgned.nl>
- Msg-ID: <199705310447.AAA15721@obelix.cs.Buffalo.EDU>,
- <1997May25.192350.2055977@hmivax.humgen.upenn.edu>
- Files: pod/pod2man.PL
-
- Title: "Perl 5 pod2man fix", "perlguts man page corrupted"
- From: chen@adi.com (Franklin Chen), gnat@frii.com, lvirden@cas.org, tom
- (Tom Dinger on Feste), tom@edc.com (Tom Dinger on Feste)
- Msg-ID: <199705210013.UAA09599@menhaden.adi.com>,
- <199706011305.JAA18271@cas.org>,
- <199706012116.PAA14102@elara.frii.com>,
- <9504250959.AA23419@feste.edc.com>,
- <9504251700.AA23823@feste.edc.com>
- Files: pod/pod2man.PL
-
- Title: "[PATCH] reference form chomp to chop in perlfunc"
- From: hansm@euronet.nl
- Files: pod/perlfunc.pod
-
- Title: "pod2man gags if "=pod" is before "=head1 NAME""
- From: whyde@pezz.sps.mot.com (Warren Hyde)
- Msg-ID: <9705212115.AA21730@pezz.sps.mot.com>
- Files: pod/pod2man.PL
-
- Title: "perlfunc.pod unclear about return value range of rand"
- From: "Tuomas J. Lukka" <tjl@lukka.student.harvard.edu>
- Msg-ID: <m0wSMiC-000C9xC@lukka.student.harvard.edu>
- Files: pod/perlfunc.pod
-
- Title: "Error in perllol manpage", "Error in perllol manpage (fwd)"
- From: Chris Wick <cwick@lmc.com>
- Files: pod/perllol.pod
-
- Title: "5.004 removed deprecated %OVERLOAD support silently"
- From: jon@sems.com (Jonathan Biggar)
- Msg-ID: <199705232319.QAA28388@clamp.netlabs.com>
- Files: pod/perldelta.pod
-
- Title: "[PATCH] Documentation bugs"
- From: Stephen Potter <spp@psa.pencom.com>
- Files: pod/perldata.pod pod/perldiag.pod pod/perlfaq8.pod pod/perlfaq9.pod
- pod/perlop.pod pod/perlsub.pod pod/perltoot.pod
-
- Title: "5.004 POD stuff", "make html - any takers?", "make html --> unusable
- xref links", "pod/*.html -- all hyperlinks are invalid"
- From: "Darren/Torin/Who Ever..." <torin@daft.com>, "Paul D. Smith"
- <psmith@BayNetworks.COM>, Gurusamy Sarathy
- <gsar@engin.umich.edu>, Jarkko Hietaniemi <jhi@iki.fi>,
- Michael R Cook <mcook@cognex.com>, avera@hal.com (Jim
- Avera), lvirden@cas.org
- Msg-ID: <199705162008.XAA06906@alpha.hut.fi>,
- <199705171830.OAA15652@erawan.cognex.com>,
- <199706081749.NAA04552@aatma.engin.umich.edu>,
- <1997May16.191039.2033079@hmivax.humgen.upenn.edu>,
- <87hgg2y1h4.fsf@perv.daft.com>,
- <9705161931.AA01075@membrane.hal.com>,
- <9705191839.AA28702@lemming.engeast>
- Files: INSTALL pod/perldiag.pod installhtml
-
- Title: "checkpods- forget blank line status when starting a new file"
- From: Larry Parmelee <parmelee@CS.Cornell.EDU>
- Files: pod/checkpods.PL
-
- Title: "installhtml: Fix 'no title' & 'unexpected ...' warnings. Double speed."
- From: Tim Bunce
- Files: installhtml lib/Pod/Html.pm pod/splitpod
-
- LIBRARY AND EXTENSIONS
-
- Title: "sdbm can fail if a config.h exists in system directories"
- From: Tim Bunce
- Files: ext/SDBM_File/sdbm/Makefile.PL
-
- Title: "LWP and SIG __DIE__ traps not playing well together!"
- From: Gisle Aas <aas@bergen.sn.no>
- Files: lib/AutoLoader.pm
-
- Title: "Memory Consumption of autosplit_lib_modules/sv_gets (workaround)"
- From: Matthias Neeracher <neeri@iis.ee.ethz.ch>
- Files: lib/AutoSplit.pm
-
- Title: "Comments of this Sys::Syslog patch", "Unusual Sys::Syslog behaviour
- with FQDN ? [Even in 5.004 - a bug?]"
- From: Jarkko Hietaniemi <jhi@iki.fi>, Russ Allbery <rra@stanford.edu>,
- alansz@mellers1.psych.berkeley.edu (Alan Schwartz)
- Msg-ID: <199705231621.TAA16790@alpha.hut.fi>, <5m4fjr$rhs@agate.berkeley.edu>
- Files: lib/Sys/Syslog.pm
-
- Title: "Patch to CPAN.pm (perl5.004) for ncftp"
- From: "Richard L. Maus, Jr." <rmaus@monmouth.com>
- Msg-ID: <337FBAC8.167EB0E7@monmouth.com>
- Files: lib/CPAN.pm
-
- Title: "[PATCH] Harness.pm bug w/perl5.004 & VMS"
- From: Dan Sugalski <sugalsd@lbcc.cc.or.us>
- Msg-ID: <3.0.1.32.19970530102300.008a2730@stargate.lbcc.cc.or.us>
- Files: lib/Test/Harness.pm
-
- Title: "more Fcntl constants [PATCH]"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
-
- Title: "5.004 breaks ftp.pl due to missing (although obsolete) chat2.pl"
- From: Tim Bunce
- Files: lib/chat2.pl
-
- BUILD PROCESS
-
- Title: "make test && ... doesn't work"
- From: Tim Bunce
- Files: Makefile.SH
-
- Title: "[PATCH] INSTALL-1.18"
- From: Andy Dougherty <doughera@fractal.phys.lafayette.edu>
- Msg-ID: <Pine.SOL.3.95q.970529142739.662D-100000@fractal.lafayette.edu>
- Files: INSTALL
-
- Title: "improved gnuwin32 Configure support"
- From: Chris Faylor <cgf@bbc.com>
- Msg-ID: <199706070318.XAA09214@hardy.bbc.com>
- Files: Configure
-
- Title: "installhtml problems finding splitpod"
- From: lvirden@cas.org
- Files: installhtml INSTALL
-
- Title: "perl 5.004 (and 01) man pages not generated and installed"
- From: lvirden@cas.org (Larry W. Virden)
- Files: installman
-
- Title: "oddity in Configure"
- From: Mike Stok <mike@stok.co.uk>
- Files: Configure
-
- Title: "perl5.004 on AIX: Patches", "perl5.004 on FreeBSD and AIX"
- From: Peter van Heusden <pvh@junior.uwc.ac.za>
- Msg-ID: <Pine.A32.3.93.970519142625.22442B-100000@junior.uwc.ac.za>,
- <Pine.A32.3.93.970519163700.25188A-100000@junior.uwc.ac.za>
- Files: Makefile.SH perl_exp.SH ext/DynaLoader/dl_aix.xs perlio.sym
-
- Title: "Compiling perl5.004 on NEWS-OS 4.x"
- From: Makoto MATSUSHITA (=?ISO-2022-JP?B?GyRCJF4kRCQ3JD8kXiQzJEgbKEI=?=)
- <matusita@ics.es.osaka-u.ac.jp>
- Msg-ID: <19970521132814F.matusita@ics.es.osaka-u.ac.jp>
- Files: Configure hints/newsos4.sh
-
- PORTABILITY
-
- Title: "win32: additional default libraries"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199705291332.JAA21560@aatma.engin.umich.edu>
- Files: lib/ExtUtils/MM_Win32.pm
-
- Title: "[PATCH] win32 minor fixes"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_Win32.pm win32/config.bc
-
- Title: "[PATCH] clean up perlocal.pod output on VMS"
- From: pvhp@forte.com (Peter Prymmer)
- Files: lib/ExtUtils/MM_VMS.pm
-
- Title: "[PATCH] Re: Term::ReadKey on Win32: set console"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: lib/Term/ReadLine.pm
-
- Title: "[PATCH] Pod::Text nit for Win32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: lib/Pod/Text.pm
-
- Title: "pathname bug in xsubpp on win32"
- From: jon@sems.com (Jonathan Biggar)
- Msg-ID: <199705230126.SAA23401@clamp.netlabs.com>
- Files: lib/ExtUtils/xsubpp
-
- Title: "MakeMaker stumbles on Win32 UNC paths"
- From: Warren Jones <wjones@TC.FLUKE.COM>
- Files: lib/ExtUtils/MM_Win32.pm
-
- Title: "build problem on SGI R10000 PowerChallenge (IRIX 6.2) lseek proto"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Files: doio.c
-
- Title: "Perl 5.004 + Linux 2.0.30 & semctl()"
- From: Andy Dougherty <doughera@fractal.phys.lafayette.edu>, Jordan
- Mendelson <jordy@snappy.wserv.com>
- Files: doio.c
-
- Title: "lib/io_udp.t fails on VMS"
- From: Jonathan.Hudson@jrhudson.demon.co.uk
- Msg-ID: <XFMail.970522181042.Jonathan.Hudson@jrhudson.demon.co.uk>
- Files: pp_sys.c
-
- Title: "Compilation of mg.c from perl5.004m1t2 fails on OpenVMS/AXP"
- From: Henrik Tougaard <ht.000@foa.dk>
- Files: mg.c t/op/taint.t
-
- Title: "[PATCH] (NEXT|OPEN)STEP hints"
- From: Gerd Knops <gerti@BITart.com>
- Files: hints/next_3.sh hints/next_4.sh
-
- Title: "win32: user defined shell"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199705291339.JAA21682@aatma.engin.umich.edu>
- Files: pod/perlrun.pod win32/win32.c
-
- Title: "misc perl5.004 doc fixes, especially vms"
- From: lvirden@cas.org (Larry W. Virden)
- Msg-ID: <199705160419.AAA16317@cas.org>
- Files: pod/perlfaq4.pod vms/perlvms.pod lib/Pod/Html.pm pod/roffitall
- vms/ext/DCLsym/DCLsym.pm vms/ext/Stdio/Stdio.pm
-
- Title: "[PATCH] gen_shrfls.pl too picky for Dec C 5.6 preprocessor output"
- From: Dan Sugalski <sugalsd@lbcc.cc.or.us>
- Files: vms/gen_shrfls.pl
-
- Title: "[PATCH] win32: Configure cf_email"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199705301335.JAA05079@aatma.engin.umich.edu>
- Files: win32/Makefile win32/config.bc win32/config.vc win32/config_sh.PL
- win32/makefile.mk
-
- Title: "[PATCH] README.win32 nits"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: README.win32
-
- Title: "Document cause and remedy for op/taint.t failure"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: README.win32
-
- Title: "SVR4 hints for DDE SMES Supermax Enterprise Server"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Files: hints/svr4.sh
-
- Title: "porting.help"
- From: Tim Bunce
- Files: Porting/pumpkin.pod Porting/preprel
-
- Title: "Major 5.004 Win32 update (Borland win32 support, and other patches)",
- "($a,undef,$b) = qw(a b c) and ties delaying DESTROY fixes"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: MANIFEST pod/perlguts.pod win32/include/sys/socket.h EXTERN.h
- opcode.h perl.h regcomp.h ext/Fcntl/Fcntl.pm
- ext/SDBM_File/Makefile.PL lib/ExtUtils/Install.pm
- lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_Win32.pm
- lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm
- lib/File/DosGlob.pm t/op/mkdir.t t/op/stat.t win32/win32.h
- win32/win32io.h win32/win32iop.h README.win32 doio.c gv.c
- mg.c op.c perlio.c pp.c pp_ctl.c pp_hot.c pp_sys.c util.c
- win32/Makefile win32/config.bc win32/config.vc
- win32/config_H.bc win32/config_H.vc win32/makedef.pl
- win32/makefile.mk win32/makeperldef.pl win32/perlglob.c
- win32/perllib.c win32/win32.c win32/win32io.c
- win32/win32sck.c
-
- Title: "[PATCH] Re: Maintenance release (remove PERL_DUMMY_SIZE)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: opcode.h perl.h regcomp.h win32/win32.h gv.c
-
- Title: "[PATCH] ENV leaks on win32 (was Re: Comments on ENV patch sought)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: win32/win32.h win32/win32io.h win32/win32iop.h global.sym mg.c perl.c
- t/op/magic.t util.c win32/makedef.pl win32/win32.c
- win32/win32io.c
-
- Title: "[PATCH] win32: ExtUtils::Liblist support"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: lib/ExtUtils/Liblist.pm win32/Makefile win32/config.bc
- win32/makefile.mk
-
- Title: "[PATCH] Re: borland C++Perl embedding failures re __declspec()"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: win32/win32.c
-
- Title: "No need to use `pwd` in t/op/magic.t test for amigaos"
- From: Norbert Pueschel <pueschel@imsdd.meb.uni-bonn.de>
- Files: t/op/magic.t
-
- TESTS
-
- Title: "Tests depend on locale"
- From: "Jan D." <jan.djarv@mbox200.swipnet.se>, Jarkko Hietaniemi
- <jhi@iki.fi>
- Msg-ID: <199705191127.NAA08148@ostrich.gaia.swipnet.se>,
- <199705191230.PAA21070@alpha.hut.fi>
- Files: t/lib/safe2.t t/op/mkdir.t
-
- Title: "op/groups test fails on Linux (groups in /bin)"
- From: "Jan D." <jan.djarv@mbox200.swipnet.se>
- Msg-ID: <199705191120.NAA08130@ostrich.gaia.swipnet.se>
- Files: t/op/groups.t
-
- Title: "More simple regexp tests and test docs"
- From: Hans Mulder <hansm@euronet.nl>
- Files: t/op/re_tests t/op/regexp.t
-
- Title: "[PATCH] Re: Using undef to ignore values returned from split"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Files: t/op/split.t
-
- UTILITIES
-
- Title: "bad test of -A flag in h2xs"
- From: "Jeffrey S. Haemer" <jsh@woodcock.boulder.qms.com>
- Files: utils/h2xs.PL
-
- Title: "[PATCH] h2xs missing from utils/Makefile"
- From: hansm@euronet.nl
- Files: utils/Makefile
-
- Title: "PATCH: bug in perlbug w.r.t. environment variables", "bug in perlbug
- w.r.t. environment variables"
- From: "Jan D." <jan.djarv@mbox200.swipnet.se>, Jarkko Hietaniemi
- <jhi@iki.fi>
- Msg-ID: <199705191841.UAA00969@ostrich.gaia.swipnet.se>,
- <199705191857.VAA09154@alpha.hut.fi>
- Files: utils/perlbug.PL
-
- Title: "[PATCH] final newline missing in MANIFEST generated by h2xs"
- From: hansm@euronet.nl
- Files: utils/h2xs.PL
-
-
--------------
-Version 5.004
--------------
-
-"Hey, Rocky! Watch me pull a release out of my hat!"
-"Aww, that trick never works..."
-
- CORE LANGUAGE CHANGES
-
- Title: "Make C<m//g> reset pos on failure; make C<m//gc> not reset"
- From: Chip Salzenberg
- Files: dump.c op.c op.h pod/perldelta.pod pod/perlfaq6.pod
- pod/perlop.pod pod/perlre.pod pp_ctl.c pp_hot.c regcomp.c
- t/op/pat.t toke.c
-
- Title: "SECURITY: Forbid exec() if $ENV{BASH_ENV} is tainted"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perlrun.pod pod/perlsec.pod t/op/taint.t
- taint.c
-
- Title: "Allow exec() if $ENV{TERM} is tainted but innocuous"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perlrun.pod pod/perlsec.pod t/op/taint.t
- taint.c
-
- Title: "Allow globbing when tainted under VMS (no external program)"
- From: Chip Salzenberg
- Files: pp_sys.c t/op/taint.t
-
- CORE PORTABILITY
-
- Title: "Make Irix hints adapt when n32 libm.so is missing"
- From: Chip Salzenberg
- Files: hints/irix_6.sh
-
- Title: "Fix default HP-UX installation path"
- From: Jeff Okamoto
- Msg-ID: <199705132228.AA227042483@hpcc123.corp.hp.com>
- Date: Tue, 13 May 1997 15:28:04 -0700
- Files: hints/hpux.sh
-
- Title: "VMS update, including socket support (four patches)"
- From: Jonathan Hudson <Jonathan.Hudson@jrhudson.demon.co.uk>,
- Peter Prymmer <pvhp@forte.com>,
- Dan Sugalski <sugalsd@lbcc.cc.or.us>
- Files: vms/config.vms vms/descrip.mms vms/sockadapt.h vms/vms.c
- vms/vmsish.h
-
- Title: "Win32 update (three patches)"
- From: Gurusamy Sarathy
- Files: README.win32 perl.c win32/Makefile win32/config.H
- win32/config_h.PL win32/config_sh.PL win32/makedef.pl
- win32/win32.c win32/win32.h win32/win32io.c win32/win32io.h
- win32/win32iop.h
-
- Title: "Don't require executable bit on perl -S if DOSISH"
- From: Danny Sadinoff <sadinoff@olf.com>
- Msg-ID: <337351CE.79B28DE3@olf.com>
- Date: Fri, 09 May 1997 12:33:18 -0400
- Files: perl.c
-
- OTHER CORE CHANGES
-
- Title: "In C<eval &func>, always call &func in scalar context"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Fix recursive substitution"
- From: Chip Salzenberg; test from Tim Bunce
- Files: cop.h global.sym pp_ctl.c proto.h scope.c t/op/subst.t
-
- Title: "Make read with <> from a TTY notice EOF"
- From: Jonathan I. Kamens <jik@kamens.brookline.ma.us>
- Msg-ID: <199705121147.HAA03845@jik.saturn.net>
- Date: Mon, 12 May 1997 07:47:13 -0400
- Files: sv.c
-
- Title: "Fix core dump from get*() functions returning no alias array"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "Fix typo"
- From: Mark K Trettin <mkt@lucent.com>
- Msg-ID: <199705102228.RAA11163@gv18c.ih.lucent.com>
- Date: Sat, 10 May 1997 17:28:35 -0500
- Files: pp_sys.c
-
- BUILD PROCESS
-
- Title: "Don't use 'unset' in Configure"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Protect against having no such command as 'cc'"
- From: Hans Mulder <hansm@icgned.nl>
- Msg-ID: <1997May12.163534.2006434@hmivax.humgen.upenn.edu>
- Date: Mon, 12 May 1997 16:35:34 -0400 (EDT)
- Files: Configure
-
- Title: "minor wording enhancement for Configure"
- From: Jarkko Hietaniemi
- Msg-ID: <199705101038.NAA00471@alpha.hut.fi>
- Date: Sat, 10 May 1997 13:38:31 +0300 (EET DST)
- Files: Configure
-
- LIBRARY AND EXTENSIONS
-
- Title: "Refresh CGI.pm to 2.36"
- From: Lincoln Stein <lstein@genome.wi.mit.edu>
- Files: eg/cgi/frameset.cgi eg/cgi/javascript.cgi lib/CGI.pm
-
- Title: "In IO::File::open, prepend './' less often (for Win32 et al)"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/File.pm
-
- Title: "Fix core dump on IO::Seekable::setpos($fh, undef)"
- From: Chip Salzenberg
- Files: ext/IO/IO.xs t/lib/io_xs.t
-
- TESTS
-
- Title: "Make rand.t vanishingly unlikely to give false failure"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.96.970510190846.23340K-100000@kelly.teleport.com>
- Date: Sat, 10 May 1997 19:57:30 -0700 (PDT)
- Files: t/op/rand.t
-
- Title: "Fix sleep test: sleep(N) is defined to allow sleeping N-1"
- From: Chuck D. Phillips <cdp@hpescdp.fc.hp.com>
- Msg-ID: <199705151735.KAA01143@palrel1.hp.com>
- Date: Thu, 15 May 1997 11:35:41 -0600
- Files: t/op/sleep.t
-
- UTILITIES
-
- Title: "h2xs and @EXPORT_OK"
- From: Jeff Okamoto
- Msg-ID: <199705092348.AA057881699@hpcc123.corp.hp.com>
- Date: Fri, 9 May 1997 16:48:20 -0700
- Files: utils/h2xs.PL
-
- DOCUMENTATION
-
- Title: "Tweaks for perldelta"
- From: hansm@euronet.nl
- Msg-ID: <199705102346.BAA17300@mail.euronet.nl>
- Date: Sun, 11 May 97 01:46:00 +0200
- Files: pod/perldelta.pod
-
- Title: "Mention perlfaq.pod and perlmodlib.pod in perldelta.pod"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Fix example of use of lexicals with formats"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Explain that destruction order is not defined"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199705150600.CAA13550@aatma.engin.umich.edu>
- Date: Thu, 15 May 1997 02:00:23 -0400
- Files: pod/perltoot.pod
-
- Title: "Note that DATA filehandle is unavailable during BEGIN {}"
- From: neilb@cre.canon.co.uk (Neil Bowers)
- Msg-ID: <199705121227.NAA29718@tardis.cre.canon.co.uk>
- Date: Mon, 12 May 1997 13:27:43 +0100
- Files: pod/perldata.pod
-
- Title: "More detailed IO::Socket documentation"
- From: Tom Christiansen
- Msg-ID: <199705141456.IAA19061@jhereg.perl.com>
- Date: Wed, 14 May 1997 08:56:30 -0600
- Files: pod/perlipc.pod
-
-
------------------
-Version 5.003_99a
------------------
-
-Herein we find the fruits of the gamma.
-
- CORE LANGUAGE CHANGES
-
- Title: "SECURITY: Forbid glob() when tainting (-T or setuid)"
- From: Chip Salzenberg
- Files: pod/perlrun.pod pod/perlsec.pod pp_sys.c
-
- Title: "SECURITY: Forbid exec() if $ENV{TERM} or $ENV{ENV} is tainted"
- From: Chip Salzenberg
- Files: pod/perlrun.pod pod/perlsec.pod t/op/taint.t taint.c
-
- CORE PORTABILITY
-
- Title: "(NeXT|Open)Step update"
- From: Gerd Knops <gerti@BITart.com>
- Msg-ID: <9705072247.AA18882@BITart.com>
- Date: Wed, 7 May 97 17:47:02 -0500
- Files: Configure MANIFEST config_h.SH hints/next_3.sh hints/next_4.sh
-
- Title: "NetBSD hint update"
- From: Giles Lean <giles@nemeton.com.au>
- Msg-ID: <199705051346.XAA13584@topaz.nemeton.com.au>
- Date: Mon, 5 May 1997 23:46:37 +1000 (EST)
- Files: hints/netbsd.sh
-
- Title: "Irix hint update"
- From: Scott Henry <scotth@sgi.com>
- Msg-ID: <yd83es0fp57.fsf@hoshi.engr.sgi.com>
- Date: 06 May 1997 11:09:56 -0700
- Files: hints/irix_6.sh
-
- Title: "HPUX: patch for ext/DynaLoader/dl_hpux.xs"
- From: Chuck D. Phillips <cdp@hpescdp.fc.hp.com>
- Msg-ID: <199705050548.WAA21260@palrel1.hp.com>
- Date: Sun, 4 May 1997 23:48:39 -0600
- Files: ext/DynaLoader/dl_hpux.xs
-
- Title: "Win32 update (consolidated patch plus three followups)"
- From: Gurusamy Sarathy
- Files: EXTERN.h README.win32 lib/Sys/Hostname.pm pod/perldelta.pod
- win32/config.H win32/config.w32 win32/config_sh.PL win32/perllib.c
- win32/win32.c win32/win32.h win32/include/sys/socket.h
-
- Title: "Win32 boot_DynaLoader problem in 99"
- From: Gary Clark <GaryC@mail.jeld-wen.com>
- Msg-ID: <1997May05.105000.1708.84476@mail.jeld-wen.com>
- Date: Mon, 05 May 1997 10:49:03 -0700
- Files: win32/makedef.pl
-
- OTHER CORE CHANGES
-
- Title: "Fix wantarray() in sort subs [fixes metaconfig]"
- From: Chip Salzenberg
- Files: pp_ctl.c
-
- Title: "Fix for redefined sort subs nastiness"
- From: Gurusamy Sarathy
- Msg-ID: <199705090004.UAA15032@aatma.engin.umich.edu>
- Date: Thu, 08 May 1997 20:04:18 -0400
- Files: op.c pod/perldelta.pod pod/perldiag.pod sv.c t/op/sort.t
-
- BUILD PROCESS
-
- Title: "AFS patches"
- From: Chip Salzenberg, Larry Schwimmer <rosebud@cyclone.Stanford.EDU>
- Files: Configure installperl
-
- LIBRARY AND EXTENSIONS
-
- Title: "Another blank line patch to Pod::Text"
- From: Russ Allbery <rra@stanford.edu>
- Msg-ID: <m3afm5g6ar.fsf@windlord.Stanford.EDU>
- Date: 08 May 1997 11:36:12 -0700
- Files: lib/Pod/Text.pm
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- Title: "Three bugs in pod2html"
- From: hansm@euronet.nl
- Msg-ID: <199705052228.AAA25351@mail.euronet.nl>
- Date: Tue, 6 May 97 00:28:06 +0200
- Files: lib/Pod/Html.pm
-
- Title: "Trivial bugfix for pod of xsubpp"
- From: Ralf S. Engelschall <rse@engelschall.com>
- Msg-ID: <199705051447.QAA09995@en1.engelschall.com>
- Date: Mon, 5 May 1997 16:47:03 +0200
- Files: lib/ExtUtils/xsubpp
-
- Title: "Newer CPerl mode"
- From: Ilya Zakharevich
- Msg-ID: <199705080032.UAA22532@monk.mps.ohio-state.edu>
- Date: Wed, 7 May 1997 20:32:46 -0400 (EDT)
- Files: emacs/cperl-mode.el
-
- DOCUMENTATION
-
- Title: "Updates to perldelta"
- From: Chip Salzenberg and Dominic Dunlop
- Files: pod/perldelta.pod
-
- Title: "More explicit Solaris instructions"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970508171206.438A-100000@fractal.lafayette.ed
- Date: Thu, 08 May 1997 17:14:54 -0400 (EDT)
- Files: INSTALL hints/solaris_2.sh
-
- Title: "Document 'Possible attempt to separate words with commas'"
- From: Gisle Aas
- Msg-ID: <hyb9snvdw.fsf@bergen.sn.no>
- Date: 06 May 1997 23:27:55 +0200
- Files: pod/perlop.pod
-
- Title: "perlfaq9, hostname"
- From: John D Groenveld <groenvel@cse.psu.edu>
- Msg-ID: <199705061741.NAA22777@cse.psu.edu>
- Date: Tue, 06 May 1997 13:41:12 EDT
- Files: pod/perlfaq9.pod
-
- Title: "Debugger docs patch"
- From: Ilya Zakharevich
- Msg-ID: <199705080107.VAA24317@monk.mps.ohio-state.edu>
- Date: Wed, 7 May 1997 21:07:14 -0400 (EDT)
- Files: pod/perldebug.pod
-
- Title: "Document that C<m?x?> is just like C<?x?>"
- From: Chip Salzenberg
- Files: pod/perlop.pod
-
- Title: "Refresh description of sprintf()"
- From: Chip Salzenberg
- Files: pod/perl.pod pod/perlfunc.pod
-
- Title: "Mention the Regular Expressions book"
- From: Stephen Potter <spp@psa.pencom.com>
- Msg-ID: <199705071737.MAA18799@psa.pencom.com>
- Date: Wed, 07 May 1997 12:37:37 -0500
- Files: pod/perlbook.pod pod/perlre.pod
-
- Title: "OS/2 doc patch for _99"
- From: Ilya Zakharevich
- Msg-ID: <199705080046.UAA23466@monk.mps.ohio-state.edu>
- Date: Wed, 7 May 1997 20:46:45 -0400 (EDT)
- Files: README.os2
-
-
-----------------
-Version 5.003_99
-----------------
-
-"Oops." Now this _has_ to be the gamma; we're out of numbers.
-
- CORE LANGUAGE CHANGES
-
- (no changes)
-
- CORE PORTABILITY
-
- Title: "NeXT hints update"
- From: hansm@euronet.nl
- Msg-ID: <199704302229.AAA02690@mail.euronet.nl>
- Date: Thu, 1 May 97 00:28:41 +0200
- Files: Configure Makefile.SH hints/next_4.sh
-
- Title: "Support shared libperl on AIX"
- From: Eric Bartley <bartley@icd.cc.purdue.edu>
- Msg-ID: <199704270131.UAA51426@icd.cc.purdue.edu>
- Date: Sat, 26 Apr 1997 20:31:37 -0500
- Files: Configure Makefile.SH hints/aix.sh
-
- OTHER CORE CHANGES
-
- Title: "Fix NUL-termination bug in delimcpy()"
- From: Chip Salzenberg
- Files: util.c
-
- Title: "Forget prototype of subroutine after C<undef &subr>"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Handle tainted values in lists returned from subs, evals"
- From: Chip Salzenberg
- Files: pp_ctl.c pp_hot.c t/op/taint.t
-
- Title: "Fix sysread() on tied handle"
- From: Spider Boardman
- Msg-ID: <199705010601.CAA04926@Orb.Nashua.NH.US>
- Date: Thu, 1 May 1997 02:01:20 -0400
- Files: pp_sys.c
-
- Title: "Fix OS/2-specific buffer overflow"
- From: Ilya Zakharevich
- Msg-ID: <199704301920.PAA09681@monk.mps.ohio-state.edu>
- Date: Wed, 30 Apr 1997 15:20:01 -0400 (EDT)
- Files: os2/os2.c
-
- BUILD PROCESS
-
- Title: "Add new globals to perl.exp"
- From: Chip Salzenberg
- Files: perl_exp.SH
-
- LIBRARY AND EXTENSIONS
-
- Title: "Refresh DB_File to 1.14"
- From: Paul Marquess
- Msg-ID: <9704302045.AA05484@claudius.bfsec.bt.co.uk>
- Date: Wed, 30 Apr 1997 21:45:09 +0100 (BST)
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs t/lib/db-btree.t
- t/lib/db-hash.t t/lib/db-recno.t
-
- TESTS
-
- Title: "Disable op/pipe.t test under Machten"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03102801af8e160d3879@[194.51.248.68]>
- Date: Thu, 1 May 1997 12:48:26 +0200
- Files: t/io/pipe.t
-
- UTILITIES
-
- Title: "typo fixes to installhtml"
- From: lvirden@cas.org (Larry W. Virden)
- Msg-ID: <199705011114.HAA26968@cas.org>
- Date: Thu, 1 May 1997 07:14:31 -0400
- Files: installhtml
-
- DOCUMENTATION
-
- Title: "Fix description of av_undef() in perlguts"
- From: Gisle Aas
- Msg-ID: <199705011042.MAA09897@bergen.sn.no>
- Date: Thu, 1 May 1997 12:42:46 +0200
- Files: pod/perlguts.pod
-
- Title: "Fix typo in perldelta"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
-
-----------------
-Version 5.003_98
-----------------
-
-Here it is, the second public beta (a.k.a gamma).
-
- CORE LANGUAGE CHANGES
-
- Title: "Support C< $coderef->($x,$y) >"
- From: Chip Salzenberg
- Files: perly.c perly.c.diff perly.y pod/perldelta.pod pod/perldsc.pod
- pod/perlref.pod t/op/ref.t vms/perly_c.vms
-
- CORE PORTABILITY
-
- (no changes)
-
- OTHER CORE CHANGES
-
- Title: "Fix C< hex('80') * 0x1000000 >"
- From: Chip Salzenberg
- Files: opcode.pl
-
- Title: "Reset errno after failed piped close"
- From: Roderick Schertler
- Msg-ID: <28152.862264940@eeyore.ibcinc.com>
- Date: Mon, 28 Apr 1997 18:02:20 -0400
- Files: lib/Time/gmtime.pm lib/Time/localtime.pm pod/perlfunc.pod
- t/io/pipe.t util.c
-
- Title: "Fix warning wrt return value of PerlIO_getname()"
- From: Spider Boardman
- Msg-ID: <199704300448.AAA24174@Orb.Nashua.NH.US>
- Date: Wed, 30 Apr 1997 00:48:13 -0400
- Files: perlio.c
-
- BUILD PROCESS
-
- (no changes)
-
- LIBRARY AND EXTENSIONS
-
- (no changes)
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- (no changes)
-
- DOCUMENTATION
-
- Title: "Describe Math::Trig in perlmodlib"
- From: Chip Salzenberg
- Files: pod/perlmodlib.pod
-
- Title: "Add new diagnostics to perldelta"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perldiag.pod
-
-
------------------
-Version 5.003_97j
------------------
-
-This patch should be _98, unless it's egregiously broken somehow.
-
- CORE LANGUAGE CHANGES
-
- (no changes)
-
- CORE PORTABILITY
-
- Title: "Return to favoring memset(,0,) over bzero()"
- From: Chip Salzenberg
- Files: perl.h
-
- Title: "NetBSD hint update"
- From: matthew green <mrg@splode.eterna.com.au>
- Msg-ID: <199704251021.EAA22570@jhereg.perl.com>
- Date: Fri, 25 Apr 1997 20:18:02 +1000
- Files: hints/netbsd.sh
-
- Title: "HP-UX hint update"
- From: Chuck D. Phillips <cdp@hpescdp.fc.hp.com>
- Msg-ID: <199704280535.WAA22441@palrel1.hp.com>
- Date: Sun, 27 Apr 1997 23:35:07 -0600
- Files: hints/hpux.sh
-
- Title: "Win32 update (three patches)"
- From: Gurusamy Sarathy and Nick Ing-Simmons
- Files: win32/makedef.pl win32/perllib.c win32/win32.c
-
- OTHER CORE CHANGES
-
- Title: "Update sprintf: '%hn'; '%s',NULL; panic on frexp() failure"
- From: Chip Salzenberg
- Files: perl.h pod/perldiag.pod sv.c
-
- Title: "Fix lingering '%S' in XS_VERSION_BOOTCHECK"
- From: Chip Salzenberg
- Files: XSUB.h
-
- Title: "Eliminate Alpha warnings"
- From: Hallvard B Furuseth and Chip Salzenberg
- Files: perlsdio.h pp_sys.c
-
- Title: "Fix typo in NeXT dynaloader"
- From: Chip Salzenberg
- Files: ext/DynaLoader/dl_next.xs
-
- Title: "Fix possible buffer overflow under VMS"
- From: Chip Salzenberg
- Files: taint.c
-
- BUILD PROCESS
-
- (no changes)
-
- LIBRARY AND EXTENSIONS
-
- Title: "Refresh CGI.pm to 2.35"
- From: Lincoln Stein <lstein@genome.wi.mit.edu>
- Files: lib/CGI.pm
-
- Title: "Refresh DB_File to 1.13"
- From: Paul Marquess
- Msg-ID: <9704271413.AA08876@claudius.bfsec.bt.co.uk>
- Date: Sun, 27 Apr 1997 15:12:59 +0100 (BST)
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
-
- Title: "SelfLoader: fix prototype pattern, rename intrusive lexical"
- From: Jesse Glick <jesse@ginger> and Chip Salzenberg
- Files: lib/SelfLoader.pm
-
- TESTS
-
- (no changes)
-
- UTILITIES
-
- (no changes)
-
- DOCUMENTATION
-
- Title: "Split perlmod"
- From: Tom Christiansen
- Msg-ID: <199704260050.RAA02468@toy.perl.com>
- Date: Fri, 25 Apr 1997 20:50:09 -0400
- Files: MANIFEST pod/Makefile pod/buildtoc pod/perl.pod
- pod/perldsc.pod pod/perlfaq3.pod pod/perlipc.pod
- pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod
- pod/perltie.pod pod/roffitall
-
- Title: "Describe __PACKAGE__ in perldelta"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Doc fix for close of pipe handle"
- From: Chip Salzenberg
- Files: pod/perlfunc.pod
-
-
------------------
-Version 5.003_97i
------------------
-
-This patch eliminates all known sources of buffer overflow! (And the
-crowd goes wild. (Yeah.)) Showstoppers only between here and _98.
-
- CORE LANGUAGE CHANGES
-
- (no changes)
-
- CORE PORTABILITY
-
- Title: "Provide memset() if it's missing"
- From: Chip Salzenberg
- Files: global.sym perl.h proto.h util.c
-
- Title: "Don't tell GCC that warn(), croak(), and die() are printf-lik
- From: Chip Salzenberg
- Files: proto.h
-
- OTHER CORE CHANGES
-
- Title: "Misc. sv_vcatpvfn() fixes"
- From: Hugo, Dale, Nick, Hallvard, Chip
- Files: gv.c mg.c op.c perl.c pp.c pp_ctl.c sv.c toke.c util.c
-
- Title: "Enforce order of sprintf() elements"
- From: Chip Salzenberg
- Files: sv.c
-
- Title: "Guard against long numbers, <<LONG_DELIM, and <long glob>"
- From: Chip Salzenberg
- Files: global.sym mg.c perl.c pod/perldiag.pod proto.h toke.c util.c
-
- Title: "Guard against C<goto> to deeply nested label"
- From: Chip Salzenberg
- Files: pod/perldiag.pod pp_ctl.c
-
- Title: "Guard against overflow in dup2() emulation"
- From: Chip Salzenberg
- Files: util.c
-
- Title: "Win32: Guard against long function names"
- From: Chip Salzenberg
- Files: win32/win32sck.c
-
- Title: "Make mess() always work, by using a non-arena SV"
- From: Chip Salzenberg, from idea by Gurusamy Sarathy
- Files: perl.c util.c
-
- Title: "Fix scalar leak in pp_prtf()"
- From: Doug MacEachern
- Msg-ID: <199704241706.NAA19140@postman.osf.org>
- Date: Thu, 24 Apr 1997 13:06:21 -0400
- Files: pp_sys.c
-
- Title: "When copying a format line, take only its string value"
- From: Chip Salzenberg
- Files: sv.c
-
- Title: "Undo private patch"
- From: Chip Salzenberg
- Files: installperl lib/ExtUtils/Install.pm
-
- Title: "Fix LEAKTEST numbers"
- From: Chip Salzenberg
- Files: ext/DynaLoader/dl_vms.xs handy.h os2/os2.c util.c vms/vms.c
- win32/win32.c win32/win32sck.c
-
- BUILD PROCESS
-
- Title: "Cope with a <db.h> that isn't related to DB"
- From: Jarkko Hietaniemi
- Msg-ID: <199704241728.UAA09951@alpha.hut.fi>
- Date: Thu, 24 Apr 1997 20:28:39 +0300 (EET DST)
- Files: Configure
-
- LIBRARY AND EXTENSIONS
-
- Title: "Always NUL-terminate opsets"
- From: Chip Salzenberg
- Files: ext/Opcode/Opcode.xs
-
- Title: "Don't core dump if my_inet_aton() get a NULL"
- From: Chip Salzenberg
- Files: ext/Socket/Socket.xs
-
- Title: "Handle symlinks, high permission bits in File::Path"
- From: Chip Salzenberg
- Files: lib/File/Path.pm
-
- Title: "Math::{Complex,Trig} update"
- From: Jarkko Hietaniemi
- Msg-ID: <199704242221.BAA30363@alpha.hut.fi>
- Date: Fri, 25 Apr 1997 01:21:44 +0300 (EET DST)
- Files: lib/Math/Complex.pm lib/Math/Trig.pm pod/roffitall
- t/lib/complex.t t/lib/trig.t
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- Title: "Fix buffer overflow in a2p"
- From: Chip Salzenberg
- Files: x2p/a2py.c
-
- DOCUMENTATION
-
- Title: "FAQ udpate (24-apr-97)"
- From: Nathan Torkington <gnat@prometheus.frii.com>
- Msg-ID: <199704242247.QAA07010@prometheus.frii.com>
- Date: Thu, 24 Apr 1997 16:47:23 -0600 (MDT)
- Files: pod/perlfaq*.pod
-
- Title: "Document new {,s}printf() behavior"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perlfunc.pod
-
-
------------------
-Version 5.003_97h
------------------
-
-This patch eliminates almost all possible sources of buffer overflow;
-in particular, there are no more sprintf() bugs. (!!) This patch
-also has a few other fixes. With these changes in place, I can sleep
-at night. (Because I've stopped hacking. :-))
-
- CORE LANGUAGE CHANGES
-
- Title: "Support PRINTF for tied handles"
- From: Doug MacEachern
- Msg-ID: <199704202226.SAA08032@postman.osf.org>
- Date: Sun, 20 Apr 1997 18:26:13 -0400
- Files: pod/perldelta.pod pod/perltie.pod pp_sys.c t/op/misc.t
-
- CORE PORTABILITY
-
- Title: "Fix bitwise shifts and pack('w') on Crays"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Win32 update (two patches)"
- From: Gurusamy Sarathy
- Files: lib/AutoSplit.pm lib/ExtUtils/MM_Unix.pm win32/config.w32
- win32/makedef.pl
-
- OTHER CORE CHANGES
-
- Title: "Mondo Cool patch for buffer safety and convenience"
- From: Chip Salzenberg
- Files: XSUB.h doop.c dump.c ext/DynaLoader/dl_dlopen.xs
- ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_next.xs
- ext/DynaLoader/dlutils.c ext/ODBM_File/ODBM_File.xs
- global.sym gv.c interp.sym mg.c op.c perl.c perl.h
- pod/perlguts.pod pp.c pp_ctl.c pp_hot.c pp_sys.c proto.h
- regcomp.c regexec.c sv.c toke.c util.c
-
- Title: "Problems with glob"
- From: Ilya Zakharevich
- Msg-ID: <1997Apr20.024432.1941365@hmivax.humgen.upenn.edu>
- Date: Sun, 20 Apr 1997 02:44:32 -0400 (EDT)
- Files: op.c
-
- Title: "Fix scalar leak in closures"
- From: Chip Salzenberg
- Files: op.c scope.c
-
- Title: "Refine error messages re: anon subs' prototypes"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Outermost scope is void, not scalar"
- From: Chip Salzenberg
- Files: pp_ctl.c
-
- BUILD PROCESS
-
- Title: "Fix up Linux hints for tcsh, and Configure patch"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970422101051.2506C-100000@fractal.lafayette.e
- Date: Tue, 22 Apr 1997 11:02:27 -0400 (EDT)
- Files: Configure hints/linux.sh
-
- Title: "There is no standard answer to 'Use suidperl?'"
- From: Chip Salzenberg
- Files: hints/bsdos.sh hints/freebsd.sh hints/linux.sh
- hints/machten_2.sh
-
- LIBRARY AND EXTENSIONS
-
- Title: "Math::Complex update"
- From: Jarkko Hietaniemi
- Files: lib/Math/Complex.pm t/lib/complex.t
-
- Title: "Croak on C<use autouse> without module name"
- From: Chip Salzenberg
- Files: lib/autouse.pm
-
- Title: "Silence warnings on simple C<use ops>"
- From: Roderick Schertler
- Msg-ID: <pzybafum6k.fsf@eeyore.ibcinc.com>
- Date: 19 Apr 1997 10:22:43 -0400
- Files: ext/Opcode/ops.pm
-
- TESTS
-
- Title: "Don't put leading newline on numeric strings"
- From: Andreas Koenig
- Msg-ID: <199704230847.KAA22752@anna.in-berlin.de>
- Date: Wed, 23 Apr 1997 10:47:00 +0200
- Files: t/pragma/constant.t
-
- UTILITIES
-
- (no changes)
-
- DOCUMENTATION
-
- Title: "FAQ udpate (23-apr-97)"
- From: Nathan Torkington <gnat@prometheus.frii.com>
- Msg-ID: <199704231822.MAA05074@prometheus.frii.com>
- Date: Wed, 23 Apr 1997 12:22:55 -0600 (MDT)
- Files: pod/perlfaq*.pod
-
- Title: "Two doublewords less"
- From: Jarkko Hietaniemi
- Msg-ID: <199704201938.WAA07722@alpha.hut.fi>
- Date: Sun, 20 Apr 1997 22:38:13 +0300 (EET DST)
- Files: pod/perlrun.pod vms/perlvms.pod
-
-
------------------
-Version 5.003_97g
------------------
-
-This one has two security bug fixes for buffer overflows. Perl has
-not yet been searched to see if more fixes are needed.
-
- CORE LANGUAGE CHANGES
-
- Title: "Improve sysseek(), remove systell(), fix Opcode"
- From: Chip Salzenberg
- Files: doio.c ext/Opcode/Makefile.PL ext/Opcode/Opcode.pm
- ext/Opcode/Opcode.xs global.sym keywords.pl opcode.pl
- pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod pp_sys.c
- proto.h t/op/sysio.t toke.c
-
- Title: "Fix (and test) spaces in {,un}pack()"
- From: Chip Salzenberg
- Files: pp.c t/op/pack.t
-
- CORE PORTABILITY
-
- Title: "Irix update"
- From: Scott Henry <scotth@sgi.com>
- Msg-ID: <yd8d8rsi0ln.fsf@hoshi.engr.sgi.com>
- Date: 18 Apr 1997 12:37:24 -0700
- Files: MANIFEST hints/irix_6.sh hints/irix_6_0.sh hints/irix_6_1.sh
-
- Title: "ExtUtils/Miniperl.pm not built on Win32"
- From: Nick Ing-Simmons
- Msg-ID: <199704181742.SAA08407@ni-s.u-net.com>
- Date: Fri, 18 Apr 1997 18:42:32 +0100
- Files: win32/Makefile
-
- OTHER CORE CHANGES
-
- Title: "SECURITY FIX: 'Identifier too long'"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perldiag.pod toke.c
-
- Title: "SECURITY FIX: Buffer overflow in gv_fetchfile()"
- From: Chip Salzenberg
- Files: gv.c
-
- Title: "Remove pp_method() inefficiency from last patch"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- BUILD PROCESS
-
- Title: "Fix unnecessary re-linking"
- From: Chip Salzenberg
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Fix tcsh hack in Configure"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Minor, optional patch to Makefile.SH"
- From: "Randy J. Ray" <rjray@uswest.com>
- Msg-ID: <rjray-9703180132.AA00374040@snakepit.ecte.uswc.uswest.com>
- Date: Thu, 17 Apr 1997 19:32:17 -0600
- Files: Makefile.SH
-
- LIBRARY AND EXTENSIONS
-
- Title: "Patch to Getopt::Long"
- From: Johan Vromans <jvromans@squirrel.nl>
- Msg-ID: <m0wIKCO-00081IC@phoenix.squirrel.nl>
- Date: Fri, 18 Apr 97 22:24 MET DST
- Files: lib/Getopt/Long.pm
-
- Title: "Fix NAME in SDBM_File build"
- From: Chip Salzenberg
- Files: ext/SDBM_File/sdbm/Makefile.PL
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- Title: "Make h2ph generate constant subs"
- From: Roderick Schertler
- Msg-ID: <pz2088w5ot.fsf@eeyore.ibcinc.com>
- Date: 18 Apr 1997 14:23:46 -0400
- Files: utils/h2ph.PL
-
- DOCUMENTATION
-
- Title: "Document {,un}pack changes"
- From: Paul Marquess
- Msg-ID: <9704181249.AA11733@claudius.bfsec.bt.co.uk>
- Date: Fri, 18 Apr 97 13:49:39 BST
- Files: pod/perldelta.pod pod/perldiag.pod
-
-
------------------
-Version 5.003_97f
------------------
-
-This is it before _98. No more last-minute features. Really, I mean
-it this time. No kidding.
-
- CORE LANGUAGE CHANGES
-
- Title: "New operator systell()"
- From: Chip Salzenberg
- Files: doio.c ext/Opcode/Opcode.pm keywords.pl opcode.pl
- pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod pp_sys.c
- t/op/sysio.t toke.c
-
- Title: "Allow constant sub to be optimized when called with parens"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Make {,un}pack fail on invalid pack types"
- From: Chip Salzenberg
- Files: pod/perldiag.pod pp.c
-
- CORE PORTABILITY
-
- Title: "Fix bitwise ops and {,un}pack() on Cray CPUs"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "VMS update"
- From: Charles Bailey
- Files: lib/Cwd.pm lib/File/Path.pm lib/FindBin.pm vms/perly_c.vms
- vms/vms.c vms/writemain.pl
-
- Title: "Win32 update (three patches)"
- From: Gurusamy Sarathy and Nick Ing-Simmons
- Files: lib/Cwd.pm lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_Win32.pm
- lib/File/Basename.pm win32/Makefile win32/makedef.pl
- win32/perllib.c win32/win32.c win32/win32iop.h
-
- OTHER CORE CHANGES
-
- Title: "Fix error messages on method lookup failure"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Fix use of var before init in util.c"
- From: Gurusamy Sarathy
- Msg-ID: <199704162342.TAA20773@aatma.engin.umich.edu>
- Date: Wed, 16 Apr 1997 19:42:41 -0400
- Files: util.c
-
- BUILD PROCESS
-
- Title: "Linux hints: Allow build w/o suidperl, prefer tcsh to csh"
- From: Michael De La Rue <mikedlr@tardis.ed.ac.uk>
- Files: Configure hints/linux.sh
-
- LIBRARY AND EXTENSIONS
-
- Title: "Fix bug in Opcode when (maxo & 15) > 8"
- From: Chip Salzenberg
- Files: ext/Opcode/Makefile.PL ext/Opcode/Opcode.pm
- ext/Opcode/Opcode.xs
-
- Title: "CGI.pm broke again"
- From: Andreas Koenig
- Msg-ID: <199704171136.NAA24859@anna.in-berlin.de>
- Date: Thu, 17 Apr 1997 13:36:28 +0200
- Files: lib/CGI.pm
-
- Title: "Revise quotewords()"
- From: Shishir Gundavaram <shishir@ruby.ora.com>
- Files: lib/Text/ParseWords.pm
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- (no changes)
-
- DOCUMENTATION
-
- Title: "Doc updates: INSTALL-1.13, pumpkin.pod-1.9"
- From: Andy Dougherty
- Files: INSTALL Porting/pumpkin.pod
-
- Title: "Document size restrictions for packed integers"
- From: Jarkko Hietaniemi
- Files: pod/perlfunc.pod
-
-
------------------
-Version 5.003_97e
------------------
-
-Y'know, I've heard of this "beta" thing, but it's been so long since
-I've seen one, I'm not sure it really exists...
-
- CORE LANGUAGE CHANGES
-
- Title: "New operator: sysseek()"
- From: Chip Salzenberg
- Files: doio.c ext/Opcode/Makefile.PL ext/Opcode/Opcode.pm global.sym
- keywords.pl opcode.pl pod/perldelta.pod pod/perlfunc.pod
- pp_sys.c t/op/sysio.t toke.c
-
- Title: "Allow recursive substitution again"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perldiag.pod pp_hot.c
-
- CORE PORTABILITY
-
- Title: "Use size_t for socket size parameters of GNU libc"
- From: Chip Salzenberg
- Files: doio.c pp_sys.c
-
- Title: "Fix STMT_{START,END} under g++"
- From: Steven Parkes <parkes@sierravista.com>
- Msg-ID: <199704141935.MAA11240@monterey.sierravista.com>
- Date: Mon, 14 Apr 1997 12:35:34 -0700
- Files: perl.h
-
- Title: "Win32 update (four patches)"
- From: Gurusamy Sarathy and Nick Ing-Simmons
- Files: MANIFEST README.win32 dosish.h ext/SDBM_File/Makefile.PL
- ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/sdbm.c
- ext/SDBM_File/sdbm/sdbm.h lib/ExtUtils/MM_Unix.pm perl.c
- utils/perlbug.PL utils/perldoc.PL win32/Makefile win32/TEST
- win32/config.H win32/config.w32 win32/config_h.PL
- win32/config_sh.PL win32/perllib.c win32/runperl.c
- win32/win32.c win32/win32io.c win32/win32sck.c
-
- OTHER CORE CHANGES
-
- Title: "New API function: perl_eval_pv()"
- From: Doug MacEachern
- Msg-ID: <199704142113.RAA06823@postman.osf.org>
- Date: Mon, 14 Apr 1997 17:13:41 -0400
- Files: perl.c pod/perlcall.pod pod/perldelta.pod pod/perlembed.pod
- pod/perlguts.pod proto.h
-
- Title: "Fix C< s//whatever/ >, which reuses old pattern"
- From: Chip Salzenberg
- Files: pp_hot.c regexec.c
-
- Title: "Return a value from PerlIO_{,un}getc"
- From: Hallvard B Furuseth
- Msg-ID: <199704131228.OAA05695@bombur2.uio.no>
- Date: Sun, 13 Apr 1997 14:28:14 +0200 (MET DST)
- Files: perlio.c
-
- Title: "Fix for environment leak"
- From: skimo@breughel.ufsia.ac.be (Sven Verdoolaege)
- Msg-ID: <19970415103246.NN46698@breughel.ufsia.ac.be>
- Date: Tue, 15 Apr 1997 10:32:46 +0200
- Files: util.c
-
- Title: "Fix comments in seed()"
- From: Hallvard B Furuseth
- Msg-ID: <199704141758.TAA06895@bombur2.uio.no>
- Date: Mon, 14 Apr 1997 19:58:38 +0200 (MET DST)
- Files: pp.c
-
- BUILD PROCESS
-
- Title: "Put extensions' autoload files in $archlib"
- From: Chip Salzenberg
- Files: installperl
-
- Title: "Use '-fPIC' for debugging compiles under Solaris with gcc"
- From: Hallvard B Furuseth
- Files: Configure
-
- LIBRARY AND EXTENSIONS
-
- Title: "Refresh CGI to 2.34"
- From: Chip Salzenberg
- Files: eg/cgi/customize.cgi eg/cgi/tryit.cgi lib/CGI.pm
- lib/CGI/Apache.pm
-
- Title: "Debugger update"
- From: Ilya Zakharevich
- Msg-ID: <199704142115.RAA09923@monk.mps.ohio-state.edu>
- Date: Mon, 14 Apr 1997 17:15:27 -0400 (EDT)
- Files: lib/perl5db.pl
-
- Title: "diagnostics: $/ gotcha"
- From: Andreas Koenig
- Msg-ID: <199704151814.UAA03404@anna.in-berlin.de>
- Date: Tue, 15 Apr 1997 20:14:01 +0200
- Files: lib/diagnostics.pm
-
- Title: "Update File::Path"
- From: Andreas Koenig
- Msg-ID: <199704151401.QAA02556@anna.in-berlin.de>
- Date: Tue, 15 Apr 1997 16:01:07 +0200
- Files: lib/File/Path.pm t/lib/filepath.t
-
- Title: "User::pwent.pm: g{,e}cos"
- From: Tom Christiansen
- Msg-ID: <199704130135.TAA23274@jhereg.perl.com>
- Date: Sat, 12 Apr 1997 19:35:54 -0600
- Files: lib/User/pwent.pm
-
- Title: "Sys::Syslog: hyphens in hostnames"
- From: Jarkko Hietaniemi
- Msg-ID: <199704151421.RAA19693@alpha.hut.fi>
- Date: Tue, 15 Apr 1997 17:21:53 +0300 (EET DST)
- Files: lib/Sys/Syslog.pm
-
- Title: "Clean up format of dlopen() debug info"
- From: Hallvard B Furuseth
- Files: ext/DynaLoader/dl_dlopen.xs
-
- TESTS
-
- (no changes)
-
- UTILITIES
-
- Title: "xsubpp incorrectly handles 'class::newthing()'"
- From: "John Q. Linux" <jql@jql.accessone.com>
- Msg-ID: <199704122201.PAA01780@jql.accessone.com>
- Date: Sat, 12 Apr 1997 15:01:33 -0700
- Files: lib/ExtUtils/xsubpp
-
- DOCUMENTATION
-
- Title: "Add CGI to perldelta.pod and improve its description in MANIFEST"
- From: Chip Salzenberg
- Files: MANIFEST pod/perldelta.pod
-
- Title: "Describe probs with majordomo 1.94.1"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Fix description of /\G/g"
- From: Chip Salzenberg
- Files: pod/perlop.pod
-
- Title: "Mention '...' operator in precedence table"
- From: Tom Christiansen
- Msg-ID: <199704131724.LAA23120@jhereg.perl.com>
- Date: Sun, 13 Apr 1997 11:24:16 -0600
- Files: pod/perlop.pod
-
-
------------------
-Version 5.003_97d
------------------
-
-Any minute now... second public beta... no, really...
-
- CORE LANGUAGE CHANGES
-
- Title: "Fix for incorrect overloaded assignment"
- From: Ilya Zakharevich
- Msg-ID: <199704112225.SAA03482@monk.mps.ohio-state.edu>
- Date: Fri, 11 Apr 1997 18:25:33 -0400 (EDT)
- Files: gv.c
-
- Title: "Fix C< $x=''; pos($x)=0; $x=~/\G$/ >"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Fix label on C<for(;;)> statement"
- From: Chip Salzenberg
- Files: perly.c perly.y
-
- CORE PORTABILITY
-
- Title: "update to 5.003_97b/hint/irix_6_2.sh"
- From: Scott Henry <scotth@sgi.com>
- Msg-ID: <yd8hghdjbk0.fsf@hoshi.engr.sgi.com>
- Date: 11 Apr 1997 18:05:03 -0700
- Files: hints/irix_6_2.sh
-
- OTHER CORE CHANGES
-
- Title: "Before 'BEGIN not safe', explain why"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "New error msg for low-key failure of C<require>"
- From: Chip Salzenberg
- Files: pod/perldiag.pod pp_ctl.c t/pragma/strict-subs
- t/pragma/strict-vars
-
- Title: "Put "dXSUB_SYS" last in declarations"
- From: Chip Salzenberg
- Files: win32/perllib.c
-
- Title: "Minor type cleanup"
- From: Chip Salzenberg
- Files: proto.h toke.c
-
- BUILD PROCESS
-
- (no changes)
-
- LIBRARY AND EXTENSIONS
-
- Title: "win32: perl5db patch"
- From: Gurusamy Sarathy
- Msg-ID: <199704102142.RAA27396@aatma.engin.umich.edu>
- Date: Thu, 10 Apr 1997 17:42:13 -0400
- Files: lib/perl5db.pl
-
- Title: "Enhancements to debugger, Term::ReadLine, Term::Cap"
- From: Ilya Zakharevich
- Msg-ID: <199704101948.PAA01841@monk.mps.ohio-state.edu>
- Date: Thu, 10 Apr 1997 15:48:07 -0400 (EDT)
- Files: lib/Term/Cap.pm lib/Term/ReadLine.pm lib/perl5db.pl
-
- Title: "MM_Unix patch for use under CVS"
- From: Ulrich Pfeifer
- Msg-ID: <yfmd8s1vhpn.fsf@ls6.informatik.uni-dortmund.de>
- Date: 11 Apr 1997 14:59:00 +0200
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Complex update (five patches)"
- From: Jarkko Hietaniemi
- Files: lib/Math/Complex.pm t/lib/complex.t
-
- Title: "Fix undef warning in Math::BigInt"
- From: Chip Salzenberg
- Files: lib/Math/BigInt.pm
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- Title: "Add B<-o> option to a2p, for old awk; make new the default"
- From: Chip Salzenberg
- Files: x2p/a2p.h x2p/a2p.pod x2p/a2py.c x2p/walk.c
-
- DOCUMENTATION
-
- Title: "typo in lib/diagnostics.pm"
- From: barnett@grymoire.crd.ge.com (Bruce Barnett)
- Msg-ID: <199704111800.OAA27297@grymoire.crd.ge.com>
- Date: Fri, 11 Apr 1997 14:00:54 -0400
- Files: lib/diagnostics.pm
-
- Title: "Use B<> for options in Class::Struct pod"
- From: Hugo van der Sanden <hv@iii.co.uk>
- Msg-ID: <334D2E7B.67F0@iii.co.uk>
- Date: Thu, 10 Apr 1997 19:16:27 +0100
- Files: lib/Class/Struct.pm
-
- Title: "Explain //g and \G issues"
- From: Gurusamy Sarathy
- Msg-ID: <199704122048.QAA25060@aatma.engin.umich.edu>
- Date: Sat, 12 Apr 1997 16:48:41 -0400
- Files: pod/perldelta.pod pod/perlop.pod pod/perlre.pod
-
- Title: "more (err, less) doubled words"
- From: Jarkko Hietaniemi
- Msg-ID: <199704111931.WAA24460@alpha.hut.fi>
- Date: Fri, 11 Apr 1997 22:31:25 +0300 (EET DST)
- Files: ext/DB_File/DB_File.pm ext/DynaLoader/DynaLoader.pm
- ext/IO/lib/IO/Pipe.pm lib/CGI.pm lib/Exporter.pm
- lib/ExtUtils/MakeMaker.pm lib/IPC/Open2.pm lib/IPC/Open3.pm
- lib/vars.pm pod/perlcall.pod pod/perldiag.pod
- pod/perlfaq1.pod pod/perlfaq3.pod pod/perlfaq5.pod
- pod/perlfaq7.pod pod/perlfaq8.pod pod/perlipc.pod
-
- Title: "Freudian slip error in perlsub.pod"
- From: barnett@grymoire.crd.ge.com (Bruce Barnett)
- Msg-ID: <199704111755.NAA27200@grymoire.crd.ge.com>
- Date: Fri, 11 Apr 1997 13:55:07 -0400
- Files: pod/perlsub.pod
-
- Title: "Little patch for perl5.003_97c/pod/perlpod.pod"
- From: rse@engelschall.com (Ralf S. Engelschall)
- Msg-ID: <199704112048.WAA08733@en1.engelschall.com>
- Date: Fri, 11 Apr 1997 22:48:37 +0200
- Files: pod/perlpod.pod
-
-
------------------
-Version 5.003_97c
------------------
-
-That second public beta will be Real Soon Now...
-
- CORE LANGUAGE CHANGES
-
- Title: "Refine setgroups() behavior of C<$)>"
- From: Chip Salzenberg
- Files: mg.c pod/perldelta.pod pod/perlvar.pod
-
- Title: "Forbid -[Mm] on #! line"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perldiag.pod toke.c
-
- CORE PORTABILITY
-
- Title: "Fix dynamic loading (and argv[0]) under AmigaOS"
- From: Norbert Pueschel
- Msg-ID: <77724842@Armageddon.meb.uni-bonn.de>
- Date: Tue, 08 Apr 1997 22:01:45 +0200
- Files: hints/amigaos.sh
-
- Title: "Special mkdir() for VMS"
- From: Charles Bailey
- Msg-ID: <01IHGOXN6MZM0004K3@hmivax.humgen.upenn.edu>
- Date: Tue, 08 Apr 1997 12:33:56 -0400 (EDT)
- Files: dosish.h lib/ExtUtils/MM_Unix.pm lib/File/Path.pm os2/os2ish.h
- plan9/plan9ish.h pp_sys.c unixish.h vms/vms.c vms/vmsish.h
-
- OTHER CORE CHANGES
-
- Title: "Fix assignment from magic SV that becomes a glob"
- From: Chip Salzenberg
- Files: sv.c
-
- BUILD PROCESS
-
- Title: "Fix syntax error in Configure comment(!)"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "For Solaris, if -DDEBUGGING, default to '-KPIC', not '-Kpic'"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Fix usage of dXSUB_SYS, esp. in ExtUtils::Miniperl"
- From: Chip Salzenberg
- Files: dosish.h minimod.pl os2/os2ish.h plan9/plan9ish.h vms/vmsish.h
-
- LIBRARY AND EXTENSIONS
-
- Title: "Replace Class::Template with improved Class::Struct"
- From: Jim Miner <jfm@winternet.com>
- Files: MANIFEST lib/Class/Struct.pm lib/Class/Template.pm
- lib/File/stat.pm lib/Net/hostent.pm lib/Net/netent.pm
- lib/Net/protoent.pm lib/Net/servent.pm lib/Time/gmtime.pm
- lib/Time/localtime.pm lib/Time/tm.pm lib/User/grent.pm
- lib/User/pwent.pm pod/perldelta.pod pod/perlfaq7.pod
- pod/perlmod.pod pod/perltoot.pod
-
- Title: "MakeMaker pathname patch"
- From: Nick Ing-Simmons
- Msg-ID: <199704091908.UAA00877@ni-s.u-net.com>
- Date: Wed, 9 Apr 1997 20:08:23 +0100
- Files: lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
-
- Title: "Fix configuration of new socket"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/Socket.pm
-
- Title: "Improve IO::Handle docs; don't export _open_mode_string"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/File.pm ext/IO/lib/IO/Handle.pm
-
- Title: "Complex.pm: 0**0 sanity"
- From: Jarkko Hietaniemi
- Msg-ID: <199704091804.VAA13930@alpha.hut.fi>
- Date: Wed, 9 Apr 1997 21:04:23 +0300 (EET DST)
- Files: lib/Math/Complex.pm
-
- Title: "Fix typos in Math::Trig"
- From: Jarkko Hietaniemi
- Files: lib/Math/Trig.pm
-
- TESTS
-
- Title: "Accommodate CodeBuilder variant of Machten 4.0.3"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03020902af704d320f27@[194.51.248.88]>
- Date: Tue, 8 Apr 1997 22:15:15 +0200
- Files: t/io/fs.t t/op/stat.t
-
- UTILITIES
-
- (no changes)
-
- DOCUMENTATION
-
- Title: "IO::Socket doc fix"
- From: Roderick Schertler
- Msg-ID: <28383.860527843@eeyore.ibcinc.com>
- Date: Tue, 08 Apr 1997 15:30:43 -0400
- Files: ext/IO/lib/IO/Socket.pm
-
-
------------------
-Version 5.003_97b
------------------
-
-Working on the second public beta...
-
- CORE LANGUAGE CHANGES
-
- Title: "Make assignment to C<$)> call setgroups()"
- From: Chip Salzenberg
- Files: Configure config_H config_h.SH mg.c plan9/config.plan9
- pod/perldelta.pod vms/config.vms win32/config.H
- win32/config.w32
-
- Title: "Grandfather "$$<digit>" in strings"
- From: Chip Salzenberg
- Files: pod/perldiag.pod toke.c
-
- Title: "Disconnect warn and die hooks _after_ object destruction"
- From: Chip Salzenberg
- Files: perl.c
-
- Title: "Forbid recursive substitutions"
- From: Chip Salzenberg
- Files: cop.h pod/perldelta.pod pod/perldiag.pod pp_ctl.c pp_hot.c
-
- CORE PORTABILITY
-
- Title: "Use SSize_t for values of PerlIO_{read,write}"
- From: Chip Salzenberg
- Files: perlio.c perlio.h perlsdio.h pp_sys.c
-
- Title: "perlwin-97a_4: win32 environ fix"
- From: Gurusamy Sarathy
- Msg-ID: <199704060431.XAA23400@aatma.engin.umich.edu>
- Date: Sat, 05 Apr 1997 23:31:11 -0500
- Files: win32/win32.c win32/win32io.c win32/win32io.h win32/win32iop.h
-
- OTHER CORE CHANGES
-
- Title: "length($') isn't"
- From: Gurusamy Sarathy
- Msg-ID: <199704070730.DAA07310@aatma.engin.umich.edu>
- Date: Mon, 07 Apr 1997 03:30:44 -0400
- Files: mg.c
-
- Title: "Fix obscure regex bug related to leading C<.*>"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Add warning for glob failure"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perldiag.pod pp_hot.c
-
- Title: "Fix C<perl -V> in presence of local patches"
- From: Chip Salzenberg
- Files: perl.c
-
- BUILD PROCESS
-
- Title: "Don't suggest 'Configure -der' in config.sh comments"
- From: Chip Salzenberg
- Files: Configure
-
- LIBRARY AND EXTENSIONS
-
- Title: "CGI->redirect patch"
- From: Doug MacEachern
- Msg-ID: <199704051527.KAA11280@postman.osf.org>
- Date: Sat, 05 Apr 1997 10:27:52 -0500
- Files: lib/CGI.pm
-
- Title: "Updates to Math::Complex and Math::Trig"
- From: Jarkko Hietaniemi
- Files: lib/Math/Complex.pm lib/Math/Trig.pm pod/perldelta.pod
- t/lib/complex.t
-
- Title: "Fix FindBin under Win32, and document success"
- From: Nick Ing-Simmons and Gurusamy Sarathy
- Msg-ID: <199704051504.QAA09507@ni-s.u-net.com>
- Date: Sat, 5 Apr 1997 16:04:52 +0100
- Files: README.win32 lib/Cwd.pm lib/FindBin.pm
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- Title: "Patch for 'perldoc -f'"
- From: Gisle Aas
- Msg-ID: <199704061732.TAA00353@bergen.sn.no>
- Date: Sun, 6 Apr 1997 19:32:04 +0200
- Files: utils/perldoc.PL
-
- DOCUMENTATION
-
- Title: "Document required module versions"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Document sample function perl_eval()"
- From: Doug MacEachern
- Msg-ID: <199704051524.KAA06090@postman.osf.org>
- Date: Sat, 05 Apr 1997 10:24:43 -0500
- Files: pod/perlcall.pod pod/perlembed.pod
-
- Title: "Make L<perltrap> refer to L<perldelta>"
- From: Chip Salzenberg
- Files: pod/perltrap.pod
-
-
------------------
-Version 5.003_97a
------------------
-
-This release gets a letter instead of a full subversion because I'm
-planning on making 5.003_98 the second public beta.
-
- CORE LANGUAGE CHANGES
-
- Title: "Fix AUTOLOAD, or kill me"
- From: Chip Salzenberg
- Files: gv.c pp.c t/op/method.t
-
- CORE PORTABILITY
-
- Title: "Add support for Cygwin32 (GNU-Win32) -- very low impact"
- From: John Cerney <j-cerney1@ti.com>
- Msg-ID: <199704030821.JAA08762@pluto.tiuk.ti.com>
- Date: Thu, 3 Apr 1997 09:21:17 +0100
- Files: MANIFEST README.cygwin32 cygwin32/cw32imp.h cygwin32/gcc2
- cygwin32/ld2 cygwin32/perlgcc cygwin32/perlld
- ext/DynaLoader/dl_cygwin32.xs hints/cygwin32.sh perl.h
- pp_sys.c
-
- Title: "Win32 update (six patches)"
- From: Gurusamy Sarathy
- Files: MANIFEST README.win32 dosish.h t/io/fs.t t/io/tell.t
- t/lib/io_tell.t t/op/magic.t t/op/mkdir.t t/op/runlevel.t
- t/op/stat.t t/op/taint.t win32/Makefile win32/VC-2.0/pod.mak
- win32/makedef.pl win32/pod.mak win32/win32.c win32/win32.h
- win32/win32io.c win32/win32io.h win32/win32iop.h
-
- Title: "AmigaOS update"
- From: Norbert Pueschel
- Msg-ID: <77724828@Armageddon.meb.uni-bonn.de>
- Date: Thu, 03 Apr 1997 16:16:51 +0200
- Files: README.amiga hints/amigaos.sh
-
- OTHER CORE CHANGES
-
- Title: "Fix const-sub-related panic on C<sub foo { my $x; 0 } foo>"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Fix warning for useless C<1..2>"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Minor cleanups"
- From: Gurusamy Sarathy
- Msg-ID: <199704040056.TAA22253@aatma.engin.umich.edu>
- Date: Thu, 03 Apr 1997 19:56:57 -0500
- Files: mg.c mg.h perl.c
-
- Title: "Eliminate unreliable warning with %SIG and strict refs"
- From: Chip Salzenberg
- Files: mg.c
-
- Title: "Fix impossible test in vivification"
- From: Chip Salzenberg
- Files: mg.c
-
- Title: "runlevel is I32, not int"
- From: Roderick Schertler
- Msg-ID: <2848.860109823@eeyore.ibcinc.com>
- Date: Thu, 03 Apr 1997 18:23:43 -0500
- Files: pp_ctl.c util.c
-
- BUILD PROCESS
-
- Title: "Re: shared lib compilation problem with miniperl5.003_97"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970404124326.647K-100000@fractal.lafayette.ed
- Date: Fri, 04 Apr 1997 13:02:23 -0500 (EST)
- Files: Makefile.SH
-
- LIBRARY AND EXTENSIONS
-
- Title: "Math::Trig, based on (and from an author of) Math::Complex"
- From: Chip Salzenberg
- Files: MANIFEST lib/Math/Complex.pm lib/Math/Trig.pm
- pod/perldelta.pod t/lib/complex.t t/lib/trig.t
-
- Title: "Update AutoLoader and docs; support C<use AutoLoader 'AUTOLOAD'>"
- From: Chip Salzenberg and Tim Bunce
- Files: lib/AutoLoader.pm
-
- Title: "CPAN & TRL-Gnu"
- From: Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
- Msg-ID: <9704040809.AA26143@o09.rosat.mpe-garching.mpg.de>
- Date: Fri, 04 Apr 1997 10:09:03 +0200
- Files: lib/CPAN.pm
-
- Title: "Limit @ISA to actual DBM in AnyDBM"
- From: Chip Salzenberg
- Files: lib/AnyDBM_File.pm
-
- Title: "Don't use $4 when it might be undef"
- From: Chip Salzenberg
- Files: lib/bigfloat.pl
-
- TESTS
-
- Title: "Make *dbm tests work with Win32"
- From: Chip Salzenberg
- Files: t/lib/anydbm.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t
- t/lib/sdbm.t
-
- UTILITIES
-
- (no changes)
-
- DOCUMENTATION
-
- Title: "Update INSTALL"
- From: Andy Dougherty
- Files: INSTALL
-
- Title: "Pod style"
- From: Nathan Torkington <gnat@prometheus.frii.com>
- Files: pod/perlcall.pod pod/perldata.pod pod/perldebug.pod
- pod/perldiag.pod pod/perlform.pod pod/perlfunc.pod
- pod/perlipc.pod pod/perllocale.pod pod/perlmod.pod
- pod/perlop.pod pod/perlre.pod pod/perlrun.pod
- pod/perlstyle.pod pod/perltoc.pod pod/perlvar.pod
-
-
-----------------
-Version 5.003_97
-----------------
-
- CORE LANGUAGE CHANGES
-
- Title: "Reenable but deprecate inherited AUTOLOAD for plain funcs"
- From: Chip Salzenberg
- Files: ext/DynaLoader/DynaLoader.pm gv.c lib/Text/ParseWords.pm
- pod/perldelta.pod pod/perldiag.pod t/op/method.t
-
- CORE PORTABILITY
-
- Title: "Don't use setjmp() and longjmp() in complex exprs"
- From: Chip Salzenberg
- Files: perl.c pp_ctl.c scope.h
-
- Title: "Improve definition of Sock_size_t"
- From: Chip Salzenberg
- Files: doio.c pp_sys.c
-
- Title: "Don't use a completely empty macro parameter"
- From: Chip Salzenberg
- Files: sv.h
-
- Title: "Win32 update"
- From: Gurusamy Sarathy
- Msg-ID: <199704020608.BAA29538@aatma.engin.umich.edu>
- Date: Wed, 02 Apr 1997 01:08:09 -0500
- Files: win32/VC-2.0/modules.mak win32/VC-2.0/perl.mak win32/VC-
- 2.0/perldll.mak win32/perl.mak
-
- OTHER CORE CHANGES
-
- Title: "Introduce and use gv_fetchmethod_autoload()"
- From: Chip Salzenberg
- Files: global.sym gv.c pod/perlguts.pod proto.h universal.c
-
- Title: "Reduce memory footprint of literal strings"
- From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Msg-ID: <1997Apr1.113438.1913905@hmivax.humgen.upenn.edu>
- Date: Tue, 01 Apr 1997 11:34:37 -0500 (EST)
- Files: toke.c
-
- BUILD PROCESS
-
- Title: "Remove target before link() of perldiag.pod"
- From: Chip Salzenberg
- Files: installperl
-
- LIBRARY AND EXTENSIONS
-
- Title: "Refresh CPAN to 1.24"
- From: Andreas Koenig
- Files: lib/CPAN.pm lib/CPAN/FirstTime.pm
-
- Title: "Refresh ExtUtils::Manifest to 1.33"
- From: Andreas Koenig
- Files: lib/ExtUtils/Manifest.pm
-
- Title: "Update $VERSION of ExtUtils::Embed to reflect reality"
- From: Chip Salzenberg
- Files: lib/ExtUtils/Embed.pm
-
- Title: "Fix POSIX::raise()"
- From: "Jens T. Berger Thielemann" <jensthi@ifi.uio.no>
- Msg-ID: <Pine.SUN.3.91.970401153125.8053A-100000@holmenkollen.ifi.uio
- Date: Tue, 1 Apr 1997 15:34:47 +0200 (MET DST)
- Files: ext/POSIX/POSIX.pm
-
- Title: "Eliminate warnings in File::Basename"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Msg-ID: <11173.9704011111@tempest.cise.npl.co.uk>
- Date: Tue, 1 Apr 97 12:11:43 BST
- Files: lib/File/Basename.pm t/lib/basename.t
-
- Title: "Eliminate warning in CGI.pm"
- From: Chip Salzenberg
- Files: lib/CGI.pm
-
- Title: "Tweaks to constant.pm"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.96.970331205519.16684I-100000@kelly.teleport.com>
- Date: Mon, 31 Mar 1997 21:10:14 -0800 (PST)
- Files: lib/constant.pm
-
- Title: "Document eval vs. sub in Benchmark"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199704012231.XAA00225@crypt.compulink.co.uk>
- Date: Tue, 01 Apr 1997 23:31:55 +0100
- Files: lib/Benchmark.pm
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- Title: "Improve heuristics for pod2man titles"
- From: Roderick Schertler
- Msg-ID: <pzn2ri9gto.fsf@eeyore.ibcinc.com>
- Date: 01 Apr 1997 23:41:55 -0500
- Files: pod/pod2man.PL
-
- DOCUMENTATION
-
- Title: "Clean up some poddities, and make C<make html> work again"
- From: Chip Salzenberg
- Files: pod/Makefile pod/perldelta.pod pod/perldiag.pod
- pod/perlfaq8.pod pod/perlfunc.pod pod/perlop.pod
- pod/perltrap.pod
-
- Title: "Fix MM doc's use of "SUPER::""
- From: avera@hal.com (Jim Avera)
- Msg-ID: <9704012235.AA07841@membrane.hal.com>
- Date: Tue, 1 Apr 1997 14:35:26 -0800 (PST)
- Files: lib/ExtUtils/MakeMaker.pm
-
- Title: "Eliminate pod warnings in libs"
- From: Chip Salzenberg
- Files: lib/CGI.pm lib/ExtUtils/Command.pm
-
-
-----------------
-Version 5.003_96
-----------------
-
- CORE LANGUAGE CHANGES
-
- Title: "Support $ENV{PERL5OPT}"
- From: Chip Salzenberg
- Files: perl.c pod/perldiag.pod pod/perldelta.pod pod/perlrun.pod
-
- Title: "Implement void context, in which C<wantarray> is undef"
- From: Chip Salzenberg
- Files: cop.h doop.c dump.c global.sym gv.c op.c op.h perl.c
- pod/perlcall.pod pod/perldelta.pod pod/perlfunc.pod
- pod/perlguts.pod pod/perlsub.pod pp.c pp_ctl.c pp_hot.c
- pp_sys.c proto.h
-
- Title: "Don't look up &AUTOLOAD in @ISA when calling plain function"
- From: Chip Salzenberg
- Files: global.sym gv.c lib/Text/ParseWords.pm pod/perldelta.pod
- pp_hot.c proto.h t/op/method.t
-
- Title: "Allow closures to be constant subroutines"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Make C<scalar(reverse)> mean C<scalar(reverse $_)>"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Fix lexical suicide from C<my $x = $x> in sub"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Make "Unrecog. char." fatal, and update its doc"
- From: Chip Salzenberg
- Files: pod/perldiag.pod toke.c
-
- Title: "Die on patterns that will match empty string forever"
- From: Stephen Potter <spp@psa.pencom.com>
- Msg-ID: <199703282138.PAA28311@psa.pencom.com>
- Date: Fri, 28 Mar 1997 15:38:30 -0600
- Files: regcomp.c
-
- CORE PORTABILITY
-
- Title: "safefree() mismatch"
- From: Roderick Schertler
- Msg-ID: <21338.859653381@eeyore.ibcinc.com>
- Date: Sat, 29 Mar 1997 11:36:21 -0500
- Files: util.c
-
- Title: "FreeBSD update"
- From: Slaven Rezic <eserte@cs.tu-berlin.de>
- Msg-ID: <199703311417.QAA04162@cabulja.herceg.de>
- Date: Mon, 31 Mar 1997 16:17:42 +0200 (MET DST)
- Files: hints/freebsd.sh
-
- Title: "Win32 update (seven patches)"
- From: Gurusamy Sarathy and Nick Ing-Simmons
- Files: EXTERN.h MANIFEST win32/Makefile win32/perl.mak
- win32/perl.rc win32/perldll.mak win32/makedef.pl
- win32/modules.mak win32/win32io.c win32/bin/pl2bat.bat
-
- OTHER CORE CHANGES
-
- Title: "Report PERL* environment variables in -V and perlbug"
- From: Chip Salzenberg
- Files: perl.c utils/perlbug.PL
-
- Title: "Typo in perl.c: Printing NO_EMBED for perl -V"
- From: Gisle Aas
- Msg-ID: <199703301922.VAA13509@furubotn.sn.no>
- Date: Sun, 30 Mar 1997 21:22:11 +0200
- Files: perl.c
-
- Title: "Don't let C<$var = $var> untaint $var"
- From: Chip Salzenberg
- Files: pp_hot.c pp_sys.c sv.h t/op/taint.t
-
- Title: "Fix autoviv bug in C<my $x; ++$x->{KEY}>"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Re: 5.004's new srand() default seed"
- From: Hallvard B Furuseth
- Msg-ID: <199703302219.AAA20998@bombur2.uio.no>
- Date: Mon, 31 Mar 1997 00:19:13 +0200 (MET DST)
- Files: pp.c
-
- Title: "Re: embedded perl and top_env problem "
- From: Gurusamy Sarathy
- Msg-ID: <199703280031.TAA05711@aatma.engin.umich.edu>
- Date: Thu, 27 Mar 1997 19:31:42 -0500
- Files: gv.c interp.sym perl.c perl.h pp_ctl.c pp_sys.c scope.h util.c
-
- Title: "Define and use new macro: boolSV()"
- From: Tim Bunce
- Files: gv.c lib/ExtUtils/typemap os2/os2.c pp.c pp_hot.c pp_sys.c
- sv.c sv.h universal.c vms/vms.c
-
- Title: "Re: strict @F"
- From: Hallvard B Furuseth
- Msg-ID: <199703252110.WAA16038@bombur2.uio.no>
- Date: Tue, 25 Mar 1997 22:10:33 +0100 (MET)
- Files: toke.c
-
- Title: "Try harder to identify errors at EOF"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Minor string change in toke.c: 'bareword'"
- From: lvirden@cas.org
- Msg-ID: <1997Mar27.130247.1911552@hmivax.humgen.upenn.edu>
- Date: Thu, 27 Mar 1997 13:02:46 -0500 (EST)
- Files: toke.c
-
- Title: "Improve diagnostic on \r in program text"
- From: Chip Salzenberg
- Files: pod/perldiag.pod toke.c
-
- Title: "Make Sock_size_t typedef work right"
- From: Chip Salzenberg
- Files: perl.h pp_sys.c
-
- Title: "Eliminate unused dummy variable"
- From: Doug MacEachern
- Msg-ID: <199703270123.UAA25454@postman.osf.org>
- Date: Wed, 26 Mar 1997 20:23:14 -0500
- Files: lib/ExtUtils/Embed.pm unixish.h writemain.SH
-
- BUILD PROCESS
-
- Title: "Allow for coexistence of various versions of perldiag.pod"
- From: Chip Salzenberg
- Files: installperl lib/diagnostics.pm
-
- LIBRARY AND EXTENSIONS
-
- Title: "New module constant.pm"
- From: Tom Phoenix
- Files: MANIFEST lib/constant.pm op.c pp.c t/pragma/constant.t
-
- Title: "Remove chat2"
- From: Chip Salzenberg
- Files: MANIFEST lib/chat2.inter lib/chat2.pl
-
- Title: "Include CGI.pm 2.32"
- From: Chip Salzenberg
- Files: MANIFEST eg/cgi/* lib/CGI.pm lib/CGI/Apache.pm
- lib/CGI/Carp.pm lib/CGI/Fast.pm lib/CGI/Push.pm
- lib/CGI/Switch.pm
-
- Title: "Fix C<print $_> in debugger"
- From: Ilya Zakharevich
- Msg-ID: <199703312355.SAA01068@monk.mps.ohio-state.edu>
- Date: Mon, 31 Mar 1997 18:55:55 -0500 (EST)
- Files: lib/perl5db.pl
-
- Title: "Re: Pod problems & fixes"
- From: Hallvard B Furuseth
- Msg-ID: <199703261829.TAA17015@bombur2.uio.no>
- Date: Wed, 26 Mar 1997 19:29:14 +0100 (MET)
- Files: lib/Pod/Text.pm
-
- Title: "Re: $whoami calculation in Sys::Syslog.pm should not be greedy"
- From: Roderick Schertler
- Msg-ID: <pz4tdu7j57.fsf@eeyore.ibcinc.com>
- Date: 29 Mar 1997 11:33:24 -0500
- Files: lib/Sys/Syslog.pm
-
- Title: "C<new SelectSaver $fh> doesn't always restore"
- From: Spider Boardman
- Msg-ID: <199703291906.OAA07232@Orb.Nashua.NH.US>
- Date: Sat, 29 Mar 1997 14:06:37 -0500
- Files: lib/SelectSaver.pm
-
- Title: "Patch for Benchmark.pm"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk> w/Tim Bunce
- Msg-ID: <199703291504.PAA01596@crypt.compulink.co.uk>
- Date: Sat, 29 Mar 1997 15:04:32 +0000
- Files: lib/Benchmark.pm
-
- Title: "Tiny doc fix for AutoSplit.pm"
- From: "Randy J. Ray" <rjray@uswest.com>
- Msg-ID: <rjray-9702272117.AA001223633@snakepit.ecte.uswc.uswest.com>
- Date: Thu, 27 Mar 1997 14:17:38 -0700
- Files: lib/AutoSplit.pm
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- Title: "Tom C's Pod::Html and html tools, as of 30 March 97"
- From: Chip Salzenberg
- Files: MANIFEST installhtml lib/Pod/Html.pm pod/pod2html.PL
-
- Title: "Fix path bugs in installhtml"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Msg-ID: <3180.9703270906@tempest.cise.npl.co.uk>
- Date: Thu, 27 Mar 97 09:06:14 GMT
- Files: installhtml
-
- Title: "Make perlbug say that it's only for core Perl bugs"
- From: Chip Salzenberg
- Files: utils/perlbug.PL
-
- DOCUMENTATION
-
- Title: "INSTALL-1.11"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970326140905.10178A-100000@fractal.lafayette.
- Date: Wed, 26 Mar 1997 14:27:52 -0500 (EST)
- Files: INSTALL
-
- Title: "Patch for perl.pod"
- From: wmiddlet@Adobe.COM (William Middleton)
- Msg-ID: <199703262305.PAA13121@ducks>
- Date: Wed, 26 Mar 1997 15:05:39 -0800 (PST)
- Files: pod/perl.pod
-
- Title: "Document autouse and constant; update diagnostics"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Suggest to upgraders that they try '-w' again"
- From: Hallvard B Furuseth
- Msg-ID: <199703251901.UAA15982@bombur2.uio.no>
- Date: Tue, 25 Mar 1997 20:01:26 +0100 (MET)
- Files: pod/perldelta.pod
-
- Title: "Improve and update documentation of constant subs"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.96.970331122546.14185C-100000@kelly.teleport.com>
- Date: Mon, 31 Mar 1997 13:05:54 -0800 (PST)
- Files: pod/perlsub.pod
-
- Title: "Improve documentation of C<return>"
- From: Chip Salzenberg
- Files: pod/perlfunc.pod pod/perlsub.pod
-
- Title: "perlfunc.pod patch"
- From: Gisle Aas
- Msg-ID: <199703262159.WAA17531@furubotn.sn.no>
- Date: Wed, 26 Mar 1997 22:59:23 +0100
- Files: pod/perlfunc.pod
-
- Title: "Use 'while (defined($x = <>)) {}', per <gnat@frii.com>"
- From: Chip Salzenberg
- Files: configpm lib/Term/Cap.pm perlsh pod/perlipc.pod pod/perlop.pod
- pod/perlsub.pod pod/perlsyn.pod pod/perltrap.pod
- pod/perlvar.pod win32/bin/search.bat
-
- Title: "Document and test C<%> behavior with negative operands"
- From: Chip Salzenberg
- Files: pod/perlop.pod t/op/arith.t
-
- Title: "Update docs on $]"
- From: Chip Salzenberg
- Files: pod/perlvar.pod
-
- Title: "perlvar.pod patch"
- From: Gisle Aas
- Msg-ID: <199703261254.NAA10237@bergen.sn.no>
- Date: Wed, 26 Mar 1997 13:54:00 +0100
- Files: pod/perlvar.pod
-
- Title: "Fix example of C<or> vs. C<||>"
- From: Chip Salzenberg
- Files: pod/perlsyn.pod
-
- Title: "Pod usage and spelling patch"
- From: Larry W. Virden
- Files: pod/*.pod
-
- Title: "Pod updates"
- From: "Cary D. Renzema" <caryr@mxim.com>
- Msg-ID: <199703262353.PAA01819@macs.mxim.com>
- Date: Wed, 26 Mar 1997 15:53:22 -0800 (PST)
- Files: pod/*.pod
-
-
-----------------
-Version 5.003_95
-----------------
-
- CORE LANGUAGE CHANGES
-
- Title: "Don't compile scalar mods of aggregates, like C<@a =~ s/a/b/>"
- From: Chip Salzenberg
- Files: op.c t/op/misc.t
-
- Title: "Automatically flush on C< $| = 1 >"
- From: Chip Salzenberg
- Files: mg.c
-
- Title: "Refine modulus ("%") per suggestion of Tim Goodwin"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "If C<perl -a>, do equivalent of C<use vars '@F'>"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Warn about undef magic values just like non-magic"
- From: Chip Salzenberg
- Files: ext/Opcode/Safe.pm sv.c t/lib/db-btree.t t/lib/db-hash.t
- t/lib/db-recno.t t/pragma/locale.t
-
- CORE PORTABILITY
-
- Title: "Remove redundant patch to hints/bsdos.sh"
- From: Shigeya Suzuki <shigeya@foretune.co.jp>
- Msg-ID: <19970322222244K.shigeya@foretune.co.jp>
- Date: Sat, 22 Mar 1997 22:22:44 +0900
- Files: hints/bsdos.sh
-
- Title: "Another MachTen Patch"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.96.970324152150.20610P-100000@kelly.teleport.com>
- Date: Mon, 24 Mar 1997 15:26:48 -0800 (PST)
- Files: hints/machten_2.sh
-
- Title: "Win32 update (five patches)"
- From: Gurusamy Sarathy and Nick Ing-Simmons
- Files: MANIFEST README.win32 doio.c dosish.h pp_sys.c
- lib/ExtUtils/Command.pm t/comp/multiline.t t/op/magic.t
- t/op/mkdir.t t/op/runlevel.t t/op/stat.t t/op/write.t
- win32/Makefile win32/config.H win32/config.w32 win32/win32.c
- win32/win32.h win32/win32aux.c win32/*.mak win32/VC-2.0/*.mak
-
- OTHER CORE CHANGES
-
- Title: "Fix botch with G_NOARGS; PUSHMARK *is* required"
- From: Chip Salzenberg
- Files: perl.c
-
- Title: "Improve 'prototype mismatch' warning"
- From: Chip Salzenberg
- Files: global.sym op.c pod/perldiag.pod proto.h sv.c t/comp/redef.t
-
- Title: "In perlio, fix vprintf() definition and define vfprintf()"
- From: Chip Salzenberg
- Files: perlio.c
-
- BUILD PROCESS
-
- (no other changes)
-
- LIBRARY AND EXTENSIONS
-
- Title: "Fix C<require> in Getopt::Long to work with 5.003"
- From: Chip Salzenberg
- Files: lib/Getopt/Long.pm
-
- Title: "Extraneous blank lines from Pod::Text"
- From: Russ Allbery <rra@stanford.edu>
- Msg-ID: <qumend4qq08.fsf@cyclone.stanford.edu>
- Date: 25 Mar 1997 01:28:55 -0800
- Files: lib/Pod/Text.pm
-
- Title: "Exporting UNIVERSAL::can"
- From: "M.J.T. Guy"
- Msg-ID: <E0w9DwX-0000Zr-00@taurus.cus.cam.ac.uk>
- Date: Mon, 24 Mar 1997 17:54:01 +0000
- Files: lib/UNIVERSAL.pm
-
- Title: "Term::Readline patch for AmigaOS"
- From: Norbert Pueschel
- Msg-ID: <77724797@Armageddon.meb.uni-bonn.de>
- Date: Sun, 23 Mar 1997 18:57:22 +0100
- Files: lib/Term/ReadLine.pm
-
- TESTS
-
- Title: "Reduce memory footprint of complex.t"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03020902af5d8e03c5ab@[194.51.248.84]>
- Date: Tue, 25 Mar 1997 15:39:26 +0100
- Files: t/lib/complex.t
-
- UTILITIES
-
- Title: "Improve pod2man diagnostic when NAME is invalid"
- From: Chip Salzenberg
- Files: pod/pod2man.PL
-
- DOCUMENTATION
-
- Title: "INSTALL-1.8 to INSTALL-1.9 updates"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970325135138.3374A-100000@fractal.lafayette.e
- Date: Tue, 25 Mar 1997 13:52:53 -0500 (EST)
- Files: INSTALL
-
- Title: "Document possible problems with -Mdiagnostics after upgrade"
- From: Chip Salzenberg
- Files: INSTALL
-
- Title: "Mention perldelta in INSTALL"
- From: Chip Salzenberg
- Files: INSTALL
-
- Title: "Describe pod format at top of INSTALL"
- From: Chip Salzenberg
- Files: INSTALL
-
- Title: "Document C</a *b/x> fix"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "pods for subroutine argument autovivication"
- From: "M.J.T. Guy"
- Msg-ID: <E0w9489-0005YT-00@ursa.cus.cam.ac.uk>
- Date: Mon, 24 Mar 1997 07:25:21 +0000
- Files: pod/perldelta.pod pod/perlsub.pod
-
- Title: "Missing item in perldiag"
- From: "M.J.T. Guy"
- Msg-ID: <E0w8jVZ-0005va-00@ursa.cus.cam.ac.uk>
- Date: Sun, 23 Mar 1997 09:24:09 +0000
- Files: pod/perldiag.pod
-
- Title: "Mention and discourage use of term 'soft reference'"
- From: Chip Salzenberg
- Files: pod/perlref.pod
-
- Title: "Pod problems & fixes"
- From: Hallvard B Furuseth
- Msg-ID: <199703242031.VAA14997@bombur2.uio.no>
- Date: Mon, 24 Mar 1997 21:31:51 +0100 (MET)
- Files: INSTALL lib/Term/Complete.pm lib/subs.pm pod/perlcall.pod
- pod/perldata.pod pod/perldiag.pod pod/perlembed.pod
- pod/perlguts.pod pod/perlmod.pod pod/perlop.pod
- pod/perlpod.pod pod/pod2html.PL
-
- Title: "DB_File documentation fix"
- From: Paul Marquess
- Msg-ID: <9703240854.AA08401@claudius.bfsec.bt.co.uk>
- Date: Mon, 24 Mar 97 08:54:16 GMT
- Files: ext/DB_File/DB_File.pm
-
- Title: "FAQ update"
- From: Nathan Torkington <gnat@prometheus.frii.com>
- Files: pod/perlfaq*.pod
-
-
-----------------
-Version 5.003_94
-----------------
-
- CORE LANGUAGE CHANGES
-
- Title: "Defer creation of array and hash elements as parameters"
- From: Chip Salzenberg
- Files: dump.c global.sym mg.c op.c op.h perl.h pp.c pp_hot.c proto.h
- sv.c
-
- Title: "New special literal: __PACKAGE__"
- From: Chip Salzenberg
- Files: keywords.pl pod/perldata.pod toke.c
-
- Title: "Ignore whitespace before +*? in //x"
- From: Chip Salzenberg
- Files: regcomp.c
-
- Title: "Abort compilation at C<BEGIN{}> or C<use> after errors"
- From: Chip Salzenberg
- Files: op.c pod/perldiag.pod t/pragma/subs.t
-
- Title: "allow C<substr 'hello', -10>"
- From: David Dyck <dcd@tc.fluke.com>
- Msg-ID: <97Mar10.155517pst.35716-2@gateway.fluke.com>
- Date: Mon, 10 Mar 1997 15:55:44 -0800
- Files: pp.c
-
- Title: "Regularize C<x % y>, esp. when y is negative"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Flush before C<flock(FOO, LOCK_UN)>"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perlfunc.pod pp_sys.c
-
- Title: "Close loopholes in prototype mismatch warning"
- From: Chip Salzenberg
- Files: op.c sv.c toke.c
-
- Title: "Warn on C<while ($x = each %y) {}>"
- From: Chip Salzenberg
- Files: op.c pod/perldiag.pod
-
- Title: "Don't warn on C<print $fh func()>"
- From: Chip Salzenberg
- Files: toke.c
-
- CORE PORTABILITY
-
- Title: "Don't say 'static var = 1'"
- From: Jarkko Hietaniemi
- Msg-ID: <199703091319.PAA24714@alpha.hut.fi>
- Date: Sun, 9 Mar 1997 15:19:57 +0200 (EET)
- Files: malloc.c
-
- Title: "BSD/OS 3.0 hints"
- From: Christopher Davis <ckd@loiosh.kei.com>
- Msg-ID: <w47mjakw5t.fsf@loiosh.kei.com>
- Date: 14 Mar 1997 16:20:46 -0500
- Files: hints/bsdos.sh
-
- Title: "More MachTen hints"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970316133852.27997A-100000@kelly.teleport.com
- Date: Sun, 16 Mar 1997 13:40:35 -0800 (PST)
- Files: hints/machten_2.sh
-
- Title: "HP/UX hint comments"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970321153918.28770B-100000@fractal.lafayette.
- Date: Fri, 21 Mar 1997 15:43:07 -0500 (EST)
- Files: hints/hpux.sh
-
- Title: "VMS update"
- From: Charles Bailey
- Msg-ID: <1997Mar11.220056.1873182@hmivax.humgen.upenn.edu>
- Date: Tue, 11 Mar 1997 22:00:55 -0500 (EST)
- Files: lib/ExtUtils/MM_VMS.pm lib/Test/Harness.pm t/op/taint.t
- utils/perlbug.PL vms/descrip.mms
-
- Title: "vmsish.t and related patches"
- From: Charles Bailey
- Msg-ID: <01IGQW3IP1KK005VFB@hmivax.humgen.upenn.edu>
- Date: Fri, 21 Mar 1997 01:32:47 -0500 (EST)
- Files: MANIFEST perl.h vms/descrip.mms vms/ext/vmsish.t vms/vms.c
-
- Title: "Win32 update (four patches)"
- From: Gurusamy Sarathy and Nick Ing-Simmons
- Files: MANIFEST README.win32 lib/AutoSplit.pm lib/Cwd.pm
- lib/ExtUtils/Command.pm lib/ExtUtils/Install.pm
- lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm
- lib/ExtUtils/MM_Win32.pm lib/ExtUtils/MakeMaker.pm
- lib/ExtUtils/Mksymlists.pm lib/File/Basename.pm
- lib/File/Path.pm mg.c t/comp/cpp.t t/comp/script.t t/harness
- t/io/argv.t t/io/dup.t t/io/fs.t t/io/inplace.t
- t/lib/filehand.t t/lib/io_dup.t t/lib/io_sel.t
- t/lib/io_taint.t t/op/closure.t t/op/exec.t t/op/glob.t
- t/op/goto.t t/op/magic.t t/op/misc.t t/op/rand.t
- t/op/split.t t/op/stat.t t/op/sysio.t t/op/taint.t
- t/pragma/strict.t t/pragma/subs.t t/pragma/warning.t util.c
- win32/*
-
- OTHER CORE CHANGES
-
- Title: "Guard against buffer overflow in yyerror() and related funcs"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "For bin compat, rename calllist() and he_{,delay}free"
- From: Chip Salzenberg
- Files: global.sym hv.c op.c perl.c pod/perlguts.pod proto.h
-
- Title: "Fix C<print> on tied default handle"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Fix C<local($a, undef, $b) = (1,2,3)>"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Improve diagnostic on C<@a++>, C<--%a>, @a =~ s/a/b/"
- From: Chip Salzenberg
- Files: pp.c pp_hot.c
-
- Title: "Don't warn on C<$x{y} .= "z"> when %x is tied"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Eliminate 'unreachable code' warnings"
- From: Chip Salzenberg
- Files: ext/POSIX/POSIX.xs mg.c pp_ctl.c toke.c
-
- Title: "printf format corrections for -DDEBUGGING"
- From: Roderick Schertler
- Msg-ID: <26592.858793370@eeyore.ibcinc.com>
- Date: Wed, 19 Mar 1997 12:42:50 -0500
- Files: doop.c malloc.c op.c pp_ctl.c regexec.c sv.c x2p/str.c
- x2p/util.c
-
- Title: "Warn about missing -DMULTIPLICITY if likely a problem"
- From: Doug MacEachern
- Msg-ID: <199703192345.SAA15070@postman.osf.org>
- Date: Wed, 19 Mar 1997 18:45:53 -0500
- Files: perl.c
-
- BUILD PROCESS
-
- Title: "Don't use $(LIBS) when creating shared libperl"
- From: Chip Salzenberg
- Files: Makefile.SH
-
- Title: "Don't use db 2.x, we're not yet ready for it"
- From: Paul Marquess and Andy Dougherty
- Files: Configure
-
- Title: "Warn if #! command is longer than 32 chars"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "patches re perl -wc install{perl,man}"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Msg-ID: <21544.9703111313@tempest.cise.npl.co.uk>
- Date: Tue, 11 Mar 97 13:13:16 GMT
- Files: installman installperl
-
- Title: "3_93 doesn't install pods"
- From: Spider Boardman
- Msg-ID: <199703160721.CAA08339@Orb.Nashua.NH.US>
- Date: Sun, 16 Mar 1997 02:21:35 -0500
- Files: installperl
-
- Title: "When installing, use File::Copy instead of `cp`"
- From: Chip Salzenberg
- Files: installperl
-
- Title: "Make hint files' warnings more visible"
- From: Hallvard B Furuseth
- Msg-ID: <199703202218.XAA09041@bombur2.uio.no>
- Date: Thu, 20 Mar 1997 23:18:03 +0100 (MET)
- Files: hints/3b1.sh hints/apollo.sh hints/cxux.sh hints/dcosx.sh
- hints/dgux.sh hints/esix4.sh hints/freebsd.sh hints/hpux.sh
- hints/irix_4.sh hints/mips.sh hints/next_3_0.sh hints/os2.sh
- hints/qnx.sh hints/sco_2_3_3.sh hints/sco_2_3_4.sh
- hints/solaris_2.sh hints/ultrix_4.sh hints/utekv.sh
-
- LIBRARY AND EXTENSIONS
-
- Title: "New module: autouse.pm"
- From: Ilya Zakharevich
- Msg-ID: <199703210034.TAA13469@monk.mps.ohio-state.edu>
- Date: Thu, 20 Mar 1997 19:34:30 -0500 (EST)
- Files: MANIFEST lib/autouse.pm
-
- Title: "Math::Complex update"
- From: Jarkko Hietaniemi
- Files: lib/Math/Complex.pm t/lib/complex.t
-
- Title: "Refresh DB_File to 1.12"
- From: Paul Marquess
- Msg-ID: <9703121551.AA07435@claudius.bfsec.bt.co.uk>
- Date: Wed, 12 Mar 97 15:51:14 GMT
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
-
- Title: "New subroutine Symbol::qualify_to_ref()"
- From: Roderick Schertler
- Msg-ID: <pzlo7ut03b.fsf@eeyore.ibcinc.com>
- Date: 11 Mar 1997 19:39:36 -0500
- Files: lib/Symbol.pm
-
- Title: "In debugger, don't reference %{$f{$g}} if $f{$g} doesn't exist"
- From: Chip Salzenberg
- Files: lib/perl5db.pl
-
- Title: "In File::Path, some systems can't remove read-only files"
- From: Chip Salzenberg
- Files: lib/File/Path.pm
-
- Title: "Fix typo in -l*perl* pattern"
- From: Doug MacEachern
- Msg-ID: <199703110414.XAA12884@berlin.atlantic.net>
- Date: Mon, 10 Mar 1997 22:58:38 -0500
- Files: lib/ExtUtils/Embed.pm
-
- Title: "Fix bugs revealed by prototype warnings"
- From: Chip Salzenberg
- Files: ext/Opcode/Opcode.pm lib/ExtUtils/MakeMaker.pm
- lib/Getopt/Long.pm
-
- Title: "Problems with SKIP in makemaker"
- From: Ilya Zakharevich
- Msg-ID: <199703210413.XAA21601@monk.mps.ohio-state.edu>
- Date: Thu, 20 Mar 1997 23:13:31 -0500 (EST)
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "In Exporter, don't C<require Carp> at file scope"
- From: Chip Salzenberg
- Files: lib/Exporter.pm
-
- Title: "fix for Exporter's $SIG{__WARN__} handler"
- From: Roderick Schertler
- Msg-ID: <2282.858296451@eeyore.ibcinc.com>
- Date: Thu, 13 Mar 1997 18:40:51 -0500
- Files: lib/Exporter.pm
-
- Title: "Don't try to substr() refs in Carp"
- From: Chip Salzenberg
- Files: lib/Carp.pm
-
- Title: "Re: NUL in die and other messages"
- From: "M.J.T. Guy"
- Msg-ID: <E0w815V-0005xs-00@ursa.cus.cam.ac.uk>
- Date: Fri, 21 Mar 1997 09:58:17 +0000
- Files: lib/Carp.pm
-
- Title: "Add entry for prototype() in Pod::Functions"
- From: Chip Salzenberg
- Files: lib/Pod/Functions.pm
-
- Title: "Fix typos in IO::Socket documentation"
- From: "M.J.T. Guy"
- Msg-ID: <E0w75po-0003yh-00@taurus.cus.cam.ac.uk>
- Date: Tue, 18 Mar 1997 20:50:16 +0000
- Files: ext/IO/lib/IO/Socket.pm
-
- TESTS
-
- (no other changes)
-
- UTILITIES
-
- Title: "Re: bug in pod2man (5.00326): section=3 for .pm modules"
- From: Roderick Schertler
- Msg-ID: <pzn2sat1hg.fsf@eeyore.ibcinc.com>
- Date: 11 Mar 1997 19:09:31 -0500
- Files: pod/pod2man.PL
-
- DOCUMENTATION
-
- Title: "perlfaq.pod"
- From: Tom Christiansen
- Msg-ID: <199703172301.QAA12566@jhereg.perl.com>
- Date: Mon, 17 Mar 1997 16:01:40 -0700
- Files: MANIFEST pod/Makefile pod/buildtoc pod/perl.pod
- pod/perlfaq*.pod pod/roffitall
-
- Title: "*.pod changes based on the FAQ"
- From: gnat@frii.com
- Msg-ID: <199703171650.JAA02655@elara.frii.com>
- Date: Mon, 17 Mar 1997 09:50:14 -0700 (MST)
- Files: pod/perldata.pod pod/perlfunc.pod pod/perlipc.pod
- pod/perlop.pod pod/perlre.pod pod/perlrun.pod
- pod/perlsec.pod pod/perlvar.pod
-
- Title: "INSTALL: How to enable debugging"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970321112326.1414A-100000@fractal.lafayette.e
- Date: Fri, 21 Mar 1997 11:25:32 -0500 (EST)
- Files: INSTALL
-
- Title: "Document that $. is not reset on implicit open"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Re: Embedding success with _93 "
- From: Doug MacEachern
- Msg-ID: <199703112255.RAA22775@postman.osf.org>
- Date: Tue, 11 Mar 1997 17:55:05 -0500
- Files: pod/perldelta.pod
-
- Title: "Update site list"
- From: lvirden@cas.org (Larry W. Virden, x2487)
- Msg-ID: <9703111053.AA20051@cas.org>
- Date: Tue, 11 Mar 1997 10:53:49 -0500
- Files: pod/perlmod.pod
-
- Title: "Patch to document illegal characters"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.96.970314090558.15346J-100000@kelly.teleport.com>
- Date: Fri, 14 Mar 1997 09:08:10 -0800 (PST)
- Files: pod/perldiag.pod pod/perltrap.pod
-
- Title: "Document trap with //o and closures"
- From: Charles Bailey
- Msg-ID: <01IGCHWRNSEU00661G@hmivax.humgen.upenn.edu>
- Date: Mon, 10 Mar 1997 18:08:08 -0500 (EST)
- Files: pod/perltrap.pod
-
- Title: "Re: Inline PI function"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970310143125.22489V-100000@kelly.teleport.com
- Date: Mon, 10 Mar 1997 14:33:20 -0800 (PST)
- Files: pod/perlsub.pod
-
- Title: "Illegal character in input"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970310151512.22489a-100000@kelly.teleport.com
- Date: Mon, 10 Mar 1997 15:21:21 -0800 (PST)
- Files: pod/perldiag.pod
-
- Title: "Patch for docs Re: Lost backslash"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.96.970319071438.24834G-100000@kelly.teleport.com>
- Date: Wed, 19 Mar 1997 07:28:57 -0800 (PST)
- Files: pod/perlop.pod
-
- Title: "XSUB's doc fix"
- From: Roderick Schertler
- Msg-ID: <28804.858012126@eeyore.ibcinc.com>
- Date: Mon, 10 Mar 1997 11:42:06 -0500
- Files: pod/perlcall.pod pod/perlguts.pod pod/perlxstut.pod
-
- Title: "Document return from do FILE"
- From: "M.J.T. Guy"
- Msg-ID: <E0w70DK-0001yJ-00@ursa.cus.cam.ac.uk>
- Date: Tue, 18 Mar 1997 14:50:10 +0000
- Files: pod/perlfunc.pod
-
- Title: "Document $^M in perlvar"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Msg-ID: <6153.9703202108@tempest.cise.npl.co.uk>
- Date: Thu, 20 Mar 97 21:08:33 GMT
- Files: pod/perlvar.pod
-
- Title: "typos in pods of 5.003_93"
- From: Jim Meyering <meyering@asic.sc.ti.com>
- Msg-ID: <wpgendbzvhx.fsf@asic.sc.ti.com>
- Date: 19 Mar 1997 10:39:38 -0600
- Files: pod/perlfunc.pod pod/perlguts.pod pod/perlre.pod
- pod/perltoot.pod pod/perlxs.pod
-
- Title: "Re: Updates to pod punctuations"
- From: lvirden@cas.org (Larry W. Virden, x2487)
- Msg-ID: <9703141700.AA22911@cas.org>
- Date: Fri, 14 Mar 1997 17:00:12 -0500
- Files: pod/*.pod
-
- Title: "clarify example in perlfunc"
- From: Jarkko Hietaniemi
- Msg-ID: <199703201746.TAA25195@alpha.hut.fi>
- Date: Thu, 20 Mar 1997 19:46:01 +0200 (EET)
- Files: pod/perlfunc.pod
-
- Title: "Regularize headings in DB_File documentation"
- From: Chip Salzenberg
- Files: ext/DB_File/DB_File.pm
-
-
-----------------
-Version 5.003_93
-----------------
-
-Me, last time:
- "This release will be the public beta of 5.004,
- or my name isn't Larson T. Pettifogger."
-Me, now:
- "Gone like *that*, a fortune in letterhead."
-
- CORE LANGUAGE CHANGES
-
- Title: "Don't autovivify array and hash elements in sub parameters"
- From: Gurusamy Sarathy
- Msg-ID: <199703061912.OAA20606@aatma.engin.umich.edu>
- Date: Thu, 06 Mar 1997 14:12:09 -0500
- Files: op.c pod/perldelta.pod pod/perlsub.pod pod/perltrap.pod
-
- Title: "Support READ and GETC for tied handles"
- From: Doug MacEachern
- Msg-ID: <199703090019.TAA32591@postman.osf.org>
- Date: Sat, 08 Mar 1997 19:19:38 -0500
- Files: pod/perldelta.pod pod/perltie.pod pp_sys.c t/op/misc.t
-
- Title: "Warn on C<@x =~ /a/> and C<%x =~ s/a/b/>"
- From: Chip Salzenberg
- Files: op.c pod/perldiag.pod
-
- Title: "Warn on %{+undef} and @{+undef}"
- From: Chip Salzenberg
- Files: pp.c pp_hot.c
-
- CORE PORTABILITY
-
- Title: "VMS update"
- From: Charles Bailey
- Msg-ID: <01IG8KN5R28M00661G@hmivax.humgen.upenn.edu>
- Date: Fri, 07 Mar 1997 22:49:46 -0500 (EST)
- Files: lib/ExtUtils/MM_VMS.pm vms/descrip.mms vms/gen_shrfls.pl
- vms/sockadapt.h
-
- Title: "AmigaOS hint patch"
- From: Norbert Pueschel
- Msg-ID: <77724767@Armageddon.meb.uni-bonn.de>
- Date: Sat, 08 Mar 1997 12:50:15 +0100
- Files: hints/amigaos.sh
-
- OTHER CORE CHANGES
-
- Title: "Make conversion of @_ to real array work right after C<shift>"
- From: Chip Salzenberg
- Files: av.c
-
- Title: "Fix imbalanced ENTER/LEAVE from C<BEGIN{die}>"
- From: Chip Salzenberg
- Files: op.c perl.c proto.h
-
- Title: "perl -P path patch"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970308120242.23766D-100000@fractal.lafayette.
- Date: Sat, 08 Mar 1997 12:45:08 -0500 (EST)
- Files: config_H config_h.SH perl.c plan9/config.plan9 t/comp/cpp.t
- vms/config.vms win32/config.H
-
- BUILD PROCESS
-
- Title: "Fix for Unisys UNIX and libperl.so"
- From: aburlison@cix.compulink.co.uk (Alan Burlison)
- Msg-ID: <memo.147328@cix.compulink.co.uk>
- Date: Thu, 6 Mar 97 16:28 GMT0
- Files: Configure
-
- Title: "Allow './Configure -Uoptimize'"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970306110532.11070A-100000@fractal.lafayette.
- Date: Thu, 06 Mar 1997 11:15:47 -0500 (EST)
- Files: Configure
-
- Title: "Use 'test -f', not 'test -x'"
- From: Spider Boardman
- Msg-ID: <199703080053.TAA13943@web.zk3.dec.com>
- Date: Fri, 7 Mar 1997 19:53:00 -0500
- Files: Configure
-
- Title: "Don't count on 'trap 0' inside () in shell script"
- From: aburlison@cix.compulink.co.uk (Alan Burlison)
- Msg-ID: <memo.147326@cix.compulink.co.uk>
- Date: Thu, 6 Mar 97 16:28 GMT0
- Files: perl_exp.SH
-
- LIBRARY AND EXTENSIONS
-
- Title: "Carp with multiple arguments"
- From: "M.J.T. Guy"
- Msg-ID: <E0w3STZ-0007RW-00@taurus.cus.cam.ac.uk>
- Date: Sat, 8 Mar 1997 20:12:17 +0000
- Files: lib/Carp.pm
-
- Title: "@EXPORT_FAIL fix for Exporter.pm"
- From: Roderick Schertler
- Msg-ID: <24884.857841724@eeyore.ibcinc.com>
- Date: Sat, 08 Mar 1997 12:22:04 -0500
- Files: lib/Exporter.pm
-
- Title: "Open[23] autoflush docs"
- From: Roderick Schertler
- Msg-ID: <7939.857693947@eeyore.ibcinc.com>
- Date: Thu, 06 Mar 1997 19:19:07 -0500
- Files: lib/IPC/Open2.pm lib/IPC/Open3.pm
-
- TESTS
-
- Title: "Fix counts in output of TEST"
- From: Hugo van der Sanden <hv@iii.co.uk>
- Msg-ID: <331F1507.4BE8@iii.co.uk>
- Date: Thu, 06 Mar 1997 19:03:35 +0000
- Files: t/TEST
-
- Title: "Ignore backup files in strict.t and warning.t"
- From: Chip Salzenberg
- Files: t/pragma/strict.t t/pragma/warning.t
-
- UTILITIES
-
- Title: "Quote pathname before using as pattern"
- From: Chip Salzenberg
- Files: pod/pod2html.PL
-
- DOCUMENTATION
-
- Title: "Consolidated INSTALL updates since _92"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970308131806.23766F-100000@fractal.lafayette.
- Date: Sat, 08 Mar 1997 13:21:22 -0500 (EST)
-
- Title: "Fix more E-Mail addresses in pods"
- From: Chip Salzenberg
- Files: lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm
- lib/diagnostics.pm pod/buildtoc
-
- Title: "Warn about '.' terminating E-Mail"
- From: Chip Salzenberg
- Files: pod/perlform.pod
-
- Title: "OS/2 doc update"
- From: Ilya Zakharevich
- Msg-ID: <199703080537.AAA25157@monk.mps.ohio-state.edu>
- Date: Sat, 8 Mar 1997 00:37:30 -0500 (EST)
- Files: README.os2
-
- Title: "PODs corrections"
- From: Ilya Zakharevich
- Msg-ID: <199703080253.VAA24975@monk.mps.ohio-state.edu>
- Date: Fri, 7 Mar 1997 21:53:04 -0500 (EST)
- Files: ext/DB_File/DB_File.pm ext/Socket/Socket.pm
- lib/Class/Template.pm lib/ExtUtils/Embed.pm
- lib/ExtUtils/MM_VMS.pm lib/ExtUtils/Mksymlists.pm
- lib/File/Basename.pm lib/File/stat.pm lib/Time/gmtime.pm
- lib/Time/localtime.pm lib/Time/tm.pm lib/User/grent.pm
- lib/User/pwent.pm pod/perlcall.pod pod/perldebug.pod
- pod/perlfunc.pod pod/perlguts.pod pod/perllocale.pod
- pod/perlop.pod pod/perlsub.pod
-
-
-----------------
-Version 5.003_92
-----------------
-
-This release will be the public beta of 5.004, or my name isn't
-Larson T. Pettifogger.
-
- CORE LANGUAGE CHANGES
-
- Title: "Strictly follow lexical context of C<eval ''> and nested subs"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Make ::SUPER and UNIVERSAL work together"
- From: Chip Salzenberg
- Files: gv.c pod/perlguts.pod
-
- CORE PORTABILITY
-
- Title: "HP-UX hint update"
- From: Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
- Msg-ID: <1479.857653838@lyon.grenoble.hp.com>
- Date: Thu, 06 Mar 97 14:10:38 +0100
- Files: hints/hpux.sh
-
- Title: "Re: The continuing MachTen saga"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970305091611.3572E-100000@kelly.teleport.com>
- Date: Wed, 5 Mar 1997 09:47:22 -0800 (PST)
- Files: hints/machten_2.sh
-
- Title: "OS/2 patches"
- From: Ilya Zakharevich
- Msg-ID: <199703060308.WAA22211@monk.mps.ohio-state.edu>
- Date: Wed, 5 Mar 1997 22:08:43 -0500 (EST)
- Files: hints/os2.sh lib/ExtUtils/MakeMaker.pm t/op/taint.t
-
- Title: "VMS patches"
- From: Charles Bailey
- Msg-ID: <01IG5SQE4A6U00661G@hmivax.humgen.upenn.edu>
- Date: Wed, 05 Mar 1997 23:10:24 -0500 (EST)
- Files: lib/ExtUtils/MM_VMS.pm lib/ExtUtils/Manifest.pm perlsdio.h
- t/op/runlevel.t t/op/taint.t vms/descrip.mms vms/perly_c.vms
- vms/sockadapt.c vms/sockadapt.h vms/vms_yfix.pl
-
- OTHER CORE CHANGES
-
- Title: "Make sure $^X is tainted when ARG_ZERO_IS_SCRIPT"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Clarify '-T too late' error"
- From: Chip Salzenberg
- Files: perl.c pod/perldiag.pod
-
- Title: "Warn when redefining or undefining a constant sub"
- From: Chip Salzenberg
- Files: pod/perldiag.pod pp.c sv.c
-
- Title: "Don't generate spurious 'not imported' warning"
- From: Chip Salzenberg
- Files: gv.c t/pragma/strict-vars pod/perldiag.pod
-
- Title: "Clarify message re: @host in string"
- From: Chip Salzenberg
- Files: pod/perldiag.pod pod/perltrap.pod toke.c
-
- Title: "Disconnect refs that are targets of pp_readline"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Fix typo in test of HvFILL()"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Allow for pad name array to be shorter than pad array"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Eliminate format-string type warnings"
- From: Hallvard B Furuseth
- Msg-ID: <199703030915.KAA11634@bombur2.uio.no>
- Date: Mon, 3 Mar 1997 10:15:11 +0100 (MET)
- Files: doio.c ext/POSIX/POSIX.xs gv.c hints/dec_osf.sh pp.c pp_ctl.c
- pp_hot.c run.c sv.c x2p/a2py.c
-
- Title: "Update copyright dates"
- From: Chip Salzenberg
- Files: *.[hc] x2p/*.[hc] win32/EXTERN.h vms/vmsish.h vms/vms.c
-
- BUILD PROCESS
-
- Title: "near-harmless bug in _91's Configure"
- From: Roderick Schertler
- Msg-ID: <pzg1yfuiza.fsf@eeyore.ibcinc.com>
- Date: 01 Mar 1997 21:26:49 -0500
- Files: Configure
-
- Title: "Change 'continuing anyway' to 'probably harmless'"
- From: Chip Salzenberg
- Files: INSTALL lib/ExtUtils/Liblist.pm
-
- LIBRARY AND EXTENSIONS
-
- Title: "Newer ReadLine"
- From: Ilya Zakharevich
- Msg-ID: <199703040634.BAA19919@monk.mps.ohio-state.edu>
- Date: Tue, 4 Mar 1997 01:34:28 -0500 (EST)
- Files: lib/Term/ReadLine.pm lib/perl5db.pl
-
- Title: "Refresh Getopt::Long to 2.9"
- From: Johan Vromans <jvromans@squirrel.nl>
- Files: lib/Getopt/Long.pm
-
- Title: "Benchmark: using code refs"
- From: Hugo van der Sanden <hv@iii.co.uk>
- Msg-ID: <199703041132.LAA07613@tyree.iii.co.uk>
- Date: Tue, 04 Mar 1997 11:32:11 +0000
- Files: lib/Benchmark.pm
-
- Title: "Fix quotewords"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199703060755.HAA15060@crypt.compulink.co.uk>
- Date: Thu, 06 Mar 1997 07:55:25 +0000
- Files: lib/Text/ParseWords.pm
-
- Title: "Use IV instead of double for tms structure members"
- From: Chip Salzenberg
- Files: ext/POSIX/POSIX.xs
-
- Title: "Document IO::File::new_tmpfile"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/File.pm
-
- TESTS
-
- Title: "Make op/TEST silent under -w"
- From: d-lewart@uiuc.edu (Daniel S. Lewart)
- Msg-ID: <199703011821.NAA13037@sinistar.idle.com>
- Date: Sat, 1 Mar 97 12:04:09 CST
- Files: t/TEST
-
- Title: "Smarter t/op/taint.t"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970303103047.24000A-100000@kelly.teleport.com
- Date: Mon, 3 Mar 1997 10:31:54 -0800 (PST)
- Files: t/op/taint.t
-
- Title: "Fix taint test for systems without csh"
- From: Chip Salzenberg
- Files: t/op/taint.t
-
- Title: "Don't test locales if there is no setlocale()"
- From: Chip Salzenberg
- Files: t/pragma/locale.t
-
- UTILITIES
-
- Title: "Update pod2html"
- From: wmiddlet@Adobe.COM (William Middleton)
- Msg-ID: <199703030025.QAA08106@ducks>
- Date: Sun, 2 Mar 1997 16:25:03 -0800 (PST)
- Files: pod/pod2html.PL
-
- Title: "Support 'long long' in h2ph"
- From: (name lost)
- Files: utils/h2ph.PL
-
- DOCUMENTATION
-
- Title: "Add taint checks and srand to perldelta"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970302115355.23058D-100000@kelly.teleport.com
- Date: Sun, 2 Mar 1997 11:56:08 -0800 (PST)
- Files: pod/perldelta.pod
-
- Title: "Don't call FileHandle 'deprecated'"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Improve sample module header"
- From: Tom Christiansen and Graham Barr
- Msg-ID: <199703011732.KAA14693@jhereg.perl.com>
- Date: Sat, 01 Mar 1997 10:32:31 -0700
- Files: pod/perlmod.pod
-
- Title: "Clarify C<crypt> documentation"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970228131112.12357D-100000@kelly.teleport.com
- Date: Fri, 28 Feb 1997 13:18:25 -0800 (PST)
- Files: pod/perlfunc.pod
-
- Title: "Update list of CPAN sites"
- From: Jarkko Hietaniemi
- Msg-ID: <199703021454.QAA07446@alpha.hut.fi>
- Date: Sun, 2 Mar 1997 16:54:22 +0200 (EET)
- Files: pod/perlmod.pod
-
- Title: "Enhance description of 'server error'"
- From: Jarkko Hietaniemi
- Msg-ID: <199702041903.VAA16070@alpha.hut.fi>
- Date: Tue, 4 Feb 1997 21:03:23 +0200 (EET)
- Files: pod/perldiag.pod
-
- Title: "Regularize format of E-Mail addresses in *.pod"
- From: Chip Salzenberg
- Files: pod/*.pod
-
-
-----------------
-Version 5.003_91
-----------------
-
-This is (should be? must be!) the public beta of 5.004.
-
- CORE LANGUAGE CHANGES
-
- Title: "Fix perl_call_*() when !G_EVAL"
- From: Gurusamy Sarathy
- Msg-ID: <199702250725.CAA09192@aatma.engin.umich.edu>,
- <199702251925.OAA15498@aatma.engin.umich.edu>,
- <199702252200.RAA16853@aatma.engin.umich.edu>
- Date: Tue, 25 Feb 1997 02:25:56 -0500
- Files: MANIFEST gv.c interp.sym perl.c perl.h pp_ctl.c pp_sys.c
- t/op/runlevel.t
-
- Title: "Fix taint tests for writeable dirs in $ENV{PATH}"
- From: Chip Salzenberg
- Files: mg.c mg.h pod/perlsec.pod taint.c
-
- Title: "Forbid tainted parameters for truncate()"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "Don't taint magic hash keys unnecessarily"
- From: Charles Bailey
- Msg-ID: <01IFXL9TY74Y00661G@hmivax.humgen.upenn.edu>
- Date: Fri, 28 Feb 1997 02:11:26 -0500 (EST)
- Files: hv.c
-
- CORE PORTABILITY
-
- Title: "VMS patches post _90"
- From: Charles Bailey
- Msg-ID: <01IFYDE5ZT7O005A53@hmivax.humgen.upenn.edu>
- Date: Fri, 28 Feb 1997 15:26:33 -0500 (EST)
- Files: doio.c mg.c perl.h pp_hot.c t/op/rand.t t/op/taint.t taint.c
- vms/descrip.mms vms/vms.c
-
- Title: "Fix taint check in system() and exec() under VMS and OS/2"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "If _XOPEN_VERSION >= 4, socket length parameters are size_t"
- From: Michael H. Moran <mhm@austin.ibm.com>
- Files: perl.h pp_sys.c
-
- Title: "Make dooneliner() compile again"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- OTHER CORE CHANGES
-
- Title: "Short-circuit duplicate study() calls"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Call sv_set[iu]v() with [IU]V parameter, not [IU]32"
- From: Chip Salzenberg
- Files: perl.c pp.c pp_sys.c toke.c util.c
-
- Title: "Clean up and document API for hashes"
- From: Gurusamy Sarathy
- Msg-ID: <199702251824.NAA14859@aatma.engin.umich.edu>
- Date: Tue, 25 Feb 1997 13:24:02 -0500
- Files: hv.c hv.h pod/perldelta.pod pod/perlguts.pod
-
- Title: "pp_undef was not always freeing memory"
- From: Ilya Zakharevich
- Msg-ID: <199702270653.BAA13949@monk.mps.ohio-state.edu>
- Date: Thu, 27 Feb 1997 01:53:51 -0500 (EST)
- Files: pp.c
-
- Title: "Fix SEGV when debugging with foreach() lvalue patch"
- From: Ilya Zakharevich
- Msg-ID: <199702271924.OAA14557@monk.mps.ohio-state.edu>
- Date: Thu, 27 Feb 1997 14:24:36 -0500 (EST)
- Files: sv.c
-
- Title: "Don't examine rx->exec_tainted if pregexec() fails"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Silence bogus typo warning on $DB::postponed"
- From: Gurusamy Sarathy
- Msg-ID: <199702271802.NAA12505@aatma.engin.umich.edu>
- Date: Thu, 27 Feb 1997 13:02:30 -0500
- Files: op.c
-
- BUILD PROCESS
-
- Title: "Sanity check linking with $libs"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970225221634.2486A-100000@fractal.lafayette.edu>
- Date: Tue, 25 Feb 1997 14:13:45 -0500 (EST)
- Files: Configure
-
- Title: "Flush stdout when printing $randbits guess"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Configure changes for Irix nm"
- From: Helmut Jarausch and Fabien Tassin
- Files: Configure
-
- Title: "Update OS/2 Configure diff"
- From: Ilya Zakharevich
- Msg-ID: <199702251906.OAA10608@monk.mps.ohio-state.edu>
- Date: Tue, 25 Feb 1997 14:06:23 -0500 (EST)
- Files: os2/diff.configure
-
- LIBRARY AND EXTENSIONS
-
- Title: "Don't require() in a signal handler"
- From: Chip Salzenberg
- Files: lib/perl5db.pl
-
- Title: "Make IPC::Open3 work without fork()"
- From: Ilya Zakharevich
- Msg-ID: <199702251937.OAA10718@monk.mps.ohio-state.edu>
- Date: Tue, 25 Feb 1997 14:37:07 -0500 (EST)
- Files: lib/IPC/Open3.pm
-
- Title: "Follow up on elimination of $` $& $' in libraries"
- From: "M.J.T. Guy"
- Msg-ID: <E0w0Sqc-00046E-00@ursa.cus.cam.ac.uk>
- Date: Fri, 28 Feb 1997 13:59:42 +0000
- Files: lib/Getopt/Long.pm lib/diagnostics.pm
-
- Title: "Don't warn on use of CCFLAGS"
- From: Andreas Koenig
- Msg-ID: <199702251038.LAA13123@anna.in-berlin.de>
- Date: Tue, 25 Feb 1997 11:38:43 +0100
- Files: lib/ExtUtils/MakeMaker.pm
-
- Title: "Allow explicit '-lperl' in link arguments"
- From: Doug MacEachern
- Msg-ID: <199702271625.LAA25402@postman.osf.org>
- Date: Thu, 27 Feb 1997 11:25:04 -0500
- Files: lib/ExtUtils/Embed.pm
-
- TESTS
-
- Title: "New test op/taint.t"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970225101328.18288M-100000@kelly.teleport.com
- Date: Tue, 25 Feb 1997 11:36:53 -0800 (PST)
- Files: MANIFEST t/op/taint.t
-
- Title: "Patch to t/op/rand.t"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970225181321.13796Q-100000@kelly.teleport.com
- Date: Tue, 25 Feb 1997 18:19:34 -0800 (PST)
- Files: t/op/rand.t
-
- UTILITIES
-
- Title: "Add --lax option to pod2man; use it in perldoc"
- From: Nat <gnat@frii.com>, Chip Salzenberg
- Files: pod/pod2man.PL utils/perldoc.PL
-
- Title: "Eliminate dead code in pod2man"
- From: Chip Salzenberg
- Files: pod/pod2man.PL
-
- DOCUMENTATION
-
- Title: "Warn about intrusive sfio behavior"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970228112136.24038G-100000@fractal.lafayette.
- Date: Fri, 28 Feb 1997 11:35:49 -0500 (EST)
- Files: INSTALL
-
- Title: "Updates to perlfunc.pod"
- From: Tom Phoenix (with help from M.J.T. Guy and Tom C.)
- Files: pod/perlfunc.pod
-
- Title: "Move ENVIRONMENT from perl.pod to perlrun.pod"
- From: Chip Salzenberg
- Files: pod/perl.pod pod/perlrun.pod
-
- Title: "Describe PERL_DEBUG_MSTATS in perlrun.pod"
- From: Nat <gnat@frii.com>
- Files: pod/perlrun.pod
-
- Title: "Fix references to perlbug"
- From: Chip Salzenberg
- Files: pod/perl.pod pod/perldelta.pod pod/perllocale.pod
- pod/perltoc.pod
-
-
-----------------
-Version 5.003_90
-----------------
-
-At last, a mil[le]stone: The first beta of Perl 5.004.
-
- CORE LANGUAGE CHANGES
-
- Title: "Automatically call srand() before rand() if user didn't"
- From: Chip Salzenberg
- Files: pod/perlfunc.pod pp.c
-
- CORE PORTABILITY
-
- Title: "Ultrix hints"
- From: Spider Boardman
- Msg-ID: <199702220951.EAA08156@Orb.Nashua.NH.US>
- Date: Sat, 22 Feb 1997 04:51:48 -0500
- Files: hints/ultrix_4.sh
-
- Title: "Digital UNIX and 3_28"
- From: Jarkko Hietaniemi
- Msg-ID: <199702231427.QAA13807@alpha.hut.fi>
- Date: Sun, 23 Feb 1997 16:27:19 +0200 (EET)
- Files: Configure MANIFEST ext/NDBM_File/hints/dec_osf.pl
- ext/ODBM_File/hints/dec_osf.pl hints/dec_osf.sh
-
- Title: "AmigaOS patches to 5.003_28"
- From: Norbert Pueschel
- Msg-ID: <77724759@Armageddon.meb.uni-bonn.de>
- Date: Sat, 22 Feb 1997 18:08:02 +0100
- Files: README.amiga hints/amigaos.sh t/io/fs.t t/lib/anydbm.t
- t/lib/db-btree.t t/lib/db-hash.t t/lib/db-recno.t
- t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t
- t/op/magic.t t/op/stat.t
-
- Title: "Hints for DC/OSx"
- From: Stephen Zander <srz@loopback>
- Msg-ID: <199702242124.NAA03796@wsuse5.mckesson.com>
- Date: Mon, 24 Feb 1997 13:24:54 -0800
- Files: hints/dcosx.sh
-
- Title: "Update VMS version"
- From: Chip Salzenberg
- Files: vms/config.vms vms/descrip.mms
-
- OTHER CORE CHANGES
-
- Title: "Don't assume that sizeof(int) >= sizeof(void*)"
- From: Chip Salzenberg
- Files: doio.c malloc.c regexec.c
-
- BUILD PROCESS
-
- Title: "Re: ccdlflags don't quite work"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970224160630.5700E-100000@fractal.lafayette.e
- Date: Mon, 24 Feb 1997 16:07:07 -0500 (EST)
- Files: Configure
-
- Title: "Use $ccflags, $ldflags, $libs when determining $randbits"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "'installperl -v' doesn't do enough"
- From: Spider Boardman
- Msg-ID: <199702241342.IAA25945@Orb.Nashua.NH.US>
- Date: Mon, 24 Feb 1997 08:42:59 -0500
- Files: installperl
-
- Title: "installperl breaks running system (for a while)"
- From: Spider Boardman
- Msg-ID: <199702241412.JAA11829@Orb.Nashua.NH.US>
- Date: Mon, 24 Feb 1997 09:12:11 -0500
- Files: installperl
-
- LIBRARY AND EXTENSIONS
-
- Title: "Don't clobber $1 et al in debugger's DB::sub()"
- From: Ilya Zakharevich
- Files: lib/perl5db.pl
-
- Title: "Fix fd leak in IO::Pipe"
- From: Roderick Schertler
- Msg-ID: <pzn2sv722y.fsf@eeyore.ibcinc.com>
- Date: 23 Feb 1997 14:29:57 -0500
- Files: ext/IO/lib/IO/Pipe.pm
-
- Title: "Pod::Text fixes"
- From: Roderick Schertler
- Msg-ID: <350.856634588@eeyore.ibcinc.com>
- Date: Sat, 22 Feb 1997 13:03:08 -0500
- Files: lib/Pod/Text.pm
-
- Title: "Trivial patch to make ExtUtils::Install more -w clean"
- From: Tim Bunce
- Msg-ID: <9702241605.AA17436@toad.ig.co.uk>
- Date: Mon, 24 Feb 1997 16:05:17 +0000
- Files: lib/ExtUtils/Install.pm
-
- Title: "C<use vars> didn't work until 5.002"
- From: Chip Salzenberg
- Files: lib/vars.pm
-
- TESTS
-
- Title: "More thoroughly test rand() and srand()"
- From: Tom Phoenix
- Files: t/op/rand.t
-
- Title: "Don't use <*> where readdir() will do"
- From: Chip Salzenberg
- Files: t/op/stat.t
-
- Title: "Allow for $^X to be 'miniperl'"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03020903af360f31aced@[194.51.248.65]>
- Date: Sun, 23 Feb 1997 16:22:45 +0100
- Files: t/op/magic.t
-
- UTILITIES
-
- Title: "Post-28 INSTALL updates"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970224170713.5700H-100000@fractal.lafayette.e
- Date: Mon, 24 Feb 1997 17:09:09 -0500 (EST)
- Files: INSTALL
-
- Title: "Re: Hash key created by subroutine call? (fwd) "
- From: Gurusamy Sarathy
- Msg-ID: <199702242229.RAA04395@aatma.engin.umich.edu>
- Date: Mon, 24 Feb 1997 17:29:30 -0500
- Files: pod/perlsub.pod pod/perltrap.pod
-
- Title: "Add documentation and '-h' option to perlbug"
- From: Gurusamy Sarathy
- Msg-ID: <199702240854.DAA27128@aatma.engin.umich.edu>
- and <199702242009.PAA02849@aatma.engin.umich.edu>
- Date: Mon, 24 Feb 1997
- Files: pod/perl.pod pod/perldelta.pod installman
- utils/perlbug.PL
-
- Title: "pumpkin-1.9.pod"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970224155702.5700D-100000@fractal.lafayette.e
- Date: Mon, 24 Feb 1997 16:06:02 -0500 (EST)
- Files: Porting/pumpkin.pod
-
- DOCUMENTATION
-
- Title: "Fix typo in 'Tolkien quotation typo' fix"
- From: Jarkko Hietaniemi
- Files: Changes
-
- Title: "Document one-argument limitation with #! line"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95q.970223182745.15989A-100000@kelly.teleport.com
- Date: Sun, 23 Feb 1997 18:41:02 -0800 (PST)
- Files: pod/perldiag.pod pod/perlsec.pod
-
-
-----------------
-Version 5.003_28
-----------------
-
-This release is beta candidate #6. If this isn't good enough to go beta,
-I'll eat a floppy disk. (Okay, it's a chocolate floppy, but still....)
-
- CORE LANGUAGE CHANGES
-
- Title: "Don't let C<sub foo;> undefine &foo"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Make code, doc agree on $ENV{PATH} and `cmd`"
- From: Chip Salzenberg
- Files: pod/perlsec.pod pp_sys.c
-
- Title: "Don't taint $x in C<$x = ($tainted =~ /(\w+)/)>"
- From: Chip Salzenberg
- Files: pp_ctl.c pp_hot.c
-
- Title: "Turn off 'expression tainted' flag at end of runops()"
- From: Chip Salzenberg
- Files: run.c
-
- Title: "When overloading, don't throw away nomethod's value"
- From: Ilya Zakharevich
- Files: gv.c
-
- Title: "Optimize keys() and values() in void context"
- From: Chip Salzenberg
- Files: doop.c op.c
-
- CORE PORTABILITY
-
- Title: "New hints for Digital UNIX"
- From: Jarkko Hietaniemi
- Files: hints/dec_osf.sh
-
- Title: "No version of AIX has working setre[ug]id()"
- From: neufeld@fast.pvi.org (Keith Neufeld)
- Files: hints/aix.sh
-
- Title: "VMS patches post _27"
- From: Charles Bailey
- Msg-ID: <01IFMEMPN1IU0057E2@hmivax.humgen.upenn.edu>
- Date: Thu, 20 Feb 1997 01:58:46 -0500 (EST)
- Files: MANIFEST dosish.h hv.c lib/ExtUtils/MM_VMS.pm
- lib/ExtUtils/xsubpp perl.c perlsdio.h pod/perldelta.pod
- pod/perlvar.pod t/op/closure.t unixish.h vms/Makefile
- vms/descrip.mms vms/ext/filespec.t vms/genconfig.pl
- vms/vms.c vms/vmsish.h
-
- Title: "Re: OS/2 patch for _27"
- From: Ilya Zakharevich
- Msg-ID: <199702210024.TAA03174@monk.mps.ohio-state.edu>
- Date: Thu, 20 Feb 1997 19:24:16 -0500 (EST)
- Files: INSTALL README.os2 lib/Test/Harness.pm os2/Changes
- os2/OS2/PrfDB/t/os2_prfdb.t os2/os2.c os2/os2ish.h
- os2/perl2cmd.pl perl.c pod/perldelta.pod t/TEST t/harness
- t/op/magic.t
-
- OTHER CORE CHANGES
-
- Title: "Fix a typo"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "Undo signal patch -- it broke die() in signal"
- From: Chip Salzenberg
- Files: mg.c
-
- Title: "Fix perl_call_sv(..., G_NOARGS)"
- From: Chip Salzenberg
- Files: perl.c
-
- Title: "Fix SIGSEGV when cloning sub with complex expression"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Minor update to malloc.c"
- From: Ilya Zakharevich
- Msg-ID: <199702210244.VAA03676@monk.mps.ohio-state.edu>
- Date: Thu, 20 Feb 1997 21:44:13 -0500 (EST)
- Files: malloc.c
-
- Title: "Fix the Tolkien quotation"
- From: Chip Salzenberg
- Files: perly.y
-
- BUILD PROCESS
-
- (no changes)
-
- LIBRARY AND EXTENSIONS
-
- Title: "Debugger patch"
- From: Ilya Zakharevich
- Msg-ID: <199702210737.CAA03951@monk.mps.ohio-state.edu>
- Date: Fri, 21 Feb 1997 02:37:59 -0500 (EST)
- Files: lib/perl5db.pl
-
- Title: "Avoid $` $& $' in libraries"
- From: Ilya Zakharevich
- Msg-ID: <199702210207.VAA03560@monk.mps.ohio-state.edu>
- Date: Thu, 20 Feb 1997 21:07:30 -0500 (EST)
- Files: lib/Getopt/Long.pm lib/Pod/Text.pm lib/diagnostics.pm
- os2/OS2/REXX/REXX.pm
-
- Title: "Remove redundant clearerr() from IO::Seekable"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Seekable.pm
-
- Title: "prototype error in File::stat"
- From: Graham.Barr@tiuk.ti.com
- Msg-ID: <199702180748.HAA14151@ultra-boy>
- Date: Tue, 18 Feb 1997 07:48:40 GMT
- Files: lib/File/stat.pm
-
- TESTS
-
- Title: "Include 'study' in regexp.t"
- From: Chip Salzenberg
- Files: t/op/regexp.t
-
- Title: "Don't run locale test if -DNO_LOCALE"
- From: Chip Salzenberg
- Files: t/pragma/locale.t
-
- Title: "Tweak tests to notice $dont_use_nlink"
- From: Chip Salzenberg
- Files: t/io/fs.t t/op/stat.t
-
- Title: "Add test for grep() and wantarray"
- From: Hugo van der Sanden <hv@iii.co.uk>
- Msg-ID: <199702181105.LAA17895@tyree.iii.co.uk>
- Date: Tue, 18 Feb 1997 11:05:59 +0000
- Files: t/op/misc.t
-
- UTILITIES
-
- (no changes)
-
- DOCUMENTATION
-
- Title: "INSTALL updates since _26"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95q.970218155815.2014F-100000@fractal.lafayette.e
- Date: Tue, 18 Feb 1997 16:00:08 -0500 (EST)
- Files: INSTALL
-
- Title: "Document "$$0" change"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "Don't recommend impossible //o for C<$x =~ $y>"
- From: Chip Salzenberg
- Files: pod/perlop.pod
-
- Title: "Correct doc that claimed that <FH> was never false"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perlop.pod
-
- Title: "Document C<$?> vs. $SIG{CHLD}"
- From: Ulrich Pfeifer
- Files: pod/perlvar.pod
-
- Title: "Add pumpkin.pod"
- From: Chip Salzenberg
- Files: MANIFEST Porting/pumpkin.pod
-
- Title: "Don't say "associat*ve arr*y""
- From: Chip Salzenberg
- Files: MANIFEST gv.h hv.c lib/Env.pm lib/overload.pm opcode.pl
- pod/perl.pod pod/perldelta.pod pod/perldiag.pod
- pod/perlfunc.pod pod/perlguts.pod pod/perlmod.pod
- pod/perltie.pod pod/perltoc.pod pod/perltrap.pod x2p/a2p.pod
-
-
-----------------
-Version 5.003_27
-----------------
-
-This release is beta candidate #5: Our last, best hope for a beta.
-
- CORE LANGUAGE CHANGES
-
- Title: "Better looks_like_number() function [sv.c]"
- From: Gisle Aas
- Msg-ID: <199702141708.SAA17546@bergen.sn.no>
- Date: Fri, 14 Feb 1997 18:08:52 +0100
- Files: sv.c
-
- Title: "Remove redundant functions UNIVERSAL::{class,is_instance}"
- From: Gisle Aas
- Msg-ID: <hwwsbpeq2.fsf@bergen.sn.no>
- Date: 14 Feb 1997 15:52:21 +0000
- Files: pod/perldelta.pod pod/perlobj.pod t/op/universal.t universal.c
-
- Title: "Allow C<setpgrp $$>"
- From: Roderick Schertler
- Msg-ID: <pzraigyshr.fsf@eeyore.ibcinc.com>
- Date: 16 Feb 1997 23:19:12 -0500
- Files: pp_sys.c
-
- Title: "Fix syntax error on C<&$1>"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Fix sub call through magic var (e.g. C<&$1>)"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Fix grep() with refs in list context"
- From: Chip Salzenberg
- Files: pp.c
-
- CORE PORTABILITY
-
- Title: "Eliminate $^S; add C<use vmsish qw(status exit time)>"
- From: Charles Bailey
- Msg-ID: <01IFI9CFKL0S004R2V@hmivax.humgen.upenn.edu>
- Date: Mon, 17 Feb 1997 02:45:26 -0500 (EST)
- Files: MANIFEST gv.c lib/English.pm lib/ExtUtils/MM_VMS.pm
- lib/ExtUtils/Mksymlists.pm lib/ExtUtils/xsubpp mg.c op.c
- perl.c perl.h pod/perldelta.pod pod/perlmod.pod
- pod/perlvar.pod pp_ctl.c pp_sys.c utils/perldoc.PL
- vms/Makefile vms/config.vms vms/descrip.mms
- vms/ext/Stdio/Stdio.pm vms/ext/Stdio/Stdio.xs
- vms/ext/XSSymSet.pm vms/ext/vmsish.pm vms/vms.c vms/vmsish.h
- win32/makedef.pl
-
- Title: "Eliminate FP exceptions under SCO 5"
- From: Chip Salzenberg
- Files: hints/sco.sh unixish.h
-
- Title: "Digital UNIX hints"
- From: Jarkko Hietaniemi
- Msg-ID: <199702151906.VAA22999@alpha.hut.fi>
- Date: Sat, 15 Feb 1997 21:06:33 +0200 (EET)
- Files: hints/dec_osf.sh
-
- Title: "Irix6.4 (with 7.1 compilers)"
- From: John Stoffel <jfs@fluent.com>
- Msg-ID: <199702130238.VAA24468@jfs.Fluent.COM>
- Date: Wed, 12 Feb 1997 21:38:51 -0500 (EST)
- Files: hints/irix_6_2.sh hints/irix_6_4.sh
-
- Title: "Update Plan 9, Win32, VMS configs with $shortsize and $longsize"
- From: Chip Salzenberg
- Files: plan9/config.plan9 plan9/genconfig.pl
- vms/genconfig.pl win32/config.w32
-
- OTHER CORE CHANGES
-
- Title: "Fix core dump when embedding"
- From: Chip Salzenberg
- Files: perl.c
-
- Title: "Re: Fragile signals"
- From: Ilya Zakharevich
- Msg-ID: <199702130644.BAA07572@monk.mps.ohio-state.edu>
- Date: Thu, 13 Feb 1997 01:44:39 -0500 (EST)
- Files: mg.c
-
- Title: "Make format strings correspond exactly to parameters"
- From: Roderick Schertler
- Msg-ID: <pz7mkc1h0g.fsf@eeyore.ibcinc.com>
- Date: 13 Feb 1997 17:24:31 -0500
- Files: doio.c ext/DB_File/DB_File.xs ext/Opcode/Opcode.xs gv.c op.c
- perl.c pp_ctl.c pp_sys.c regcomp.c toke.c
-
- Title: "Don't try to attach 'o' magic to read-only values"
- From: Chip Salzenberg
- Files: sv.c
-
- Title: "Fix carriage-return message"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "In <=>, test for equality first"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Don't mark sv_{true,false} PADTMP"
- From: Chip Salzenberg
- Files: op.c
-
- BUILD PROCESS
-
- Title: "Fix eval "" in Configure"
- From: allen@gateway.grumman.com (John L. Allen)
- Msg-ID: <9702141809.AA17001@gateway.grumman.com>
- Date: Fri, 14 Feb 1997 13:09:53 -0500
- Files: Configure
-
- Title: "Don't link with -lsfio if sfio is not requested"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "perl5.003_26 Configure change "win" for AIX 4"
- From: Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>
- Msg-ID: <Pine.OSF.3.95.970214135751.32654A-100000@dogbert.cc.ndsu.NoD
- Date: Fri, 14 Feb 1997 13:59:02 -0600 (CST)
- Files: Configure
-
- Title: "Update os2/diff.configure"
- From: Chip Salzenberg
- Files: os2/diff.configure
-
- LIBRARY AND EXTENSIONS
-
- Title: "Remove Fatal.pm"
- From: Chip Salzenberg
- Files: MANIFEST lib/Fatal.pm pod/perldelta.pod pod/perlmod.pod
- pod/roffitall t/lib/fatal.t
-
- Title: "Refresh MakeMaker to 5.40"
- From: Andy Dougherty, Andreas Koenig, Tim Bunce
- Files: lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm
- lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm
-
- Title: "Refresh CPAN.pm to 1.21"
- From: Andreas Koenig
- Files: lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
-
- Title: "Refresh Test::Harness to 1.15"
- From: Andreas Koenig
- Files: lib/Test/Harness.pm
-
- TESTS
-
- Title: "Remove non-portable locale tests"
- From: Chip Salzenberg
- Files: t/pragma/locale.t
-
- UTILITIES
-
- Title: "pod2man: missing '-' in name section shouldn't be fatal"
- From: Ulrich Pfeifer
- Msg-ID: <yfmzpxcimsa.fsf@ls6.informatik.uni-dortmund.de>
- Date: 10 Feb 1997 18:38:45 +0100
- Files: pod/pod2man.PL
-
- DOCUMENTATION
-
- Title: "Update To-Do list"
- From: Tim Bunce
- Msg-ID: <9702101900.AA25293@toad.ig.co.uk>
- Date: Mon, 10 Feb 1997 19:00:59 +0000
- Files: Todo
-
- Title: "Fix formatting in perldiag"
- From: Chip Salzenberg
- Files: pod/perldiag.pod
-
-
-----------------
-Version 5.003_26
-----------------
-
-This release is beta candidate #4. "Once more, dear friends...."
-
- CORE LANGUAGE CHANGES
-
- Title: "Make \r in script an error (per Larry)"
- From: Chip Salzenberg
- Files: pod/perldiag.pod toke.c
-
- Title: "Support '%i' format and 'h' modifier in s?printf"
- From: Chip Salzenberg
- Files: doop.c pod/perldelta.pod
-
- CORE PORTABILITY
-
- Title: "Fix value of system() and $? for DEC UNIX, VMS, others"
- From: Chip Salzenberg
- Files: mg.c perl.h pp_sys.c
-
- Title: "VMS patches post _25"
- From: Charles Bailey
- Msg-ID: <01IF48W3P39W0050BD@hmivax.humgen.upenn.edu>
- Date: Fri, 07 Feb 1997 01:56:12 -0500 (EST)
- Files: Porting/Glossary lib/ExtUtils/Liblist.pm
- lib/ExtUtils/MM_VMS.pm lib/ExtUtils/xsubpp perl.c
- vms/Makefile vms/config.vms vms/descrip.mms vms/genconfig.pl
- vms/perlvms.pod vms/vms.c vms/vmsish.h x2p/a2p.c
-
- Title: "Hints for BSDOS"
- From: Christopher Davis <ckd@loiosh.kei.com>
- Msg-ID: <199702042011.PAA09206@loiosh.kei.com>
- Date: Tue, 4 Feb 1997 15:11:13 -0500 (EST)
- Files: hints/bsdos.sh
-
- Title: "On C<sysopen(..., O_APPEND)>, call C<fopen(..., "a")>"
- From: Chip Salzenberg
- Files: doio.c
-
- OTHER CORE CHANGES
-
- Title: "Fix (yet another) Tk closure problem"
- From: Chip Salzenberg
- Files: op.c perl.c pp_ctl.c
-
- Title: "Fix value of C<foreach>"
- From: Chip Salzenberg
- Files: cop.h pp_ctl.c
-
- Title: "Regexp optimizations"
- From: Ilya Zakharevich
- Msg-ID: <199702041102.GAA24805@monk.mps.ohio-state.edu>
- Date: Tue, 4 Feb 1997 06:02:10 -0500 (EST)
- Files: regcomp.c regexec.c
-
- Title: "Re: static buffer in not_a_number() [sv.c] might overflow"
- From: Gisle Aas
- Msg-ID: <hbu9uz1si.fsf@bergen.sn.no>
- Date: 09 Feb 1997 11:55:41 +0100
- Files: sv.c
-
- Title: "Refine 'runaway string' heuristic"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Fix core dump on C<print "a", last> in eval"
- From: Chip Salzenberg
- Files: pp_ctl.c
-
- Title: "Catch C<use integer; $x % 0>"
- From: Chip Salzenberg
- Files: pp.c
-
- BUILD PROCESS
-
- Title: "Fix usage message in configure.gnu"
- From: Jarkko Hietaniemi
- Files: configure.gnu
-
- LIBRARY AND EXTENSIONS
-
- Title: "DB_File 1.11 patch"
- From: Paul Marquess
- Msg-ID: <9702061553.AA18147@claudius.bfsec.bt.co.uk>
- Date: Thu, 6 Feb 97 15:53:34 GMT
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
-
- Title: "Faster File::Compare"
- From: Gisle Aas
- Msg-ID: <199702051342.OAA02753@bergen.sn.no>
- Date: Wed, 5 Feb 1997 14:42:49 +0100
- Files: lib/File/Compare.pm
-
- Title: "Make diagnostics module strip formatting directives"
- From: Chip Salzenberg
- Files: lib/diagnostics.pm pod/perldiag.pod
-
- Title: "Fix warning from missing POSIX::setvbuf()"
- From: Chip Salzenberg
- Files: ext/IO/IO.xs
-
- TESTS
-
- Title: "Fix closure.t for AmigaOS (again)"
- From: Norbert Pueschel
- Msg-ID: <77724742@Armageddon.meb.uni-bonn.de>
- Date: Wed, 05 Feb 1997 18:56:45 +0100
- Files: t/op/closure.t
-
- UTILITIES
-
- Title: "perldoc -f <perlfunc>"
- From: Gisle Aas
- Msg-ID: <199702051127.MAA02090@bergen.sn.no>
- Date: Wed, 5 Feb 1997 12:27:36 +0100
- Files: utils/perldoc.PL
-
- Title: "Fix pod2man's handling of quotes in =items"
- From: Jarkko Hietaniemi
- Msg-ID: <199702042023.WAA13143@alpha.hut.fi>
- Date: Tue, 4 Feb 1997 22:23:34 +0200 (EET)
- Files: pod/pod2man.PL
-
- DOCUMENTATION
-
- Title: "return *FH pod patch"
- From: allen@gateway.grumman.com (John L. Allen)
- Msg-ID: <9702061507.AA04474@gateway.grumman.com>
- Date: Thu, 6 Feb 1997 10:07:28 -0500
- Files: pod/perldata.pod pod/perlsub.pod
-
- Title: "Describe interation of untie and DESTROY"
- From: Paul Marquess and Chip Salzenberg
- Files: pod/perltie.pod
-
-
-----------------
-Version 5.003_25
-----------------
-
-This release is beta candidate #3. Here's hoping...
-
- CORE LANGUAGE CHANGES
-
- Title: "Make $] read-only"
- From: Chip Salzenberg
- Files: gv.c
-
- Title: "New variable C<$^S> is a native version of C<$?>"
- From: Chip Salzenberg
- Files: doio.c global.sym gv.c interp.sym lib/English.pm mg.c perl.c
- perl.h pod/perldelta.pod pod/perlfunc.pod pod/perlvar.pod
- pp_ctl.c pp_sys.c proto.h util.c
-
- Title: "Make $^T work with undump, and don't taint it"
- From: Chip Salzenberg
- Files: perl.c
-
- CORE PORTABILITY
-
- Title: "VMS patches for _24"
- From: Charles Bailey
- Msg-ID: <01IEUIFP5038004GQP@hmivax.humgen.upenn.edu>
- Date: Fri, 31 Jan 1997 02:34:37 -0500 (EST)
- Files: ext/DynaLoader/DynaLoader.pm ext/DynaLoader/dl_vms.xs
- lib/AutoSplit.pm lib/ExtUtils/MM_VMS.pm
- lib/ExtUtils/MakeMaker.pm perl.h pp_hot.c t/lib/filehand.t
- t/op/closure.t vms/Makefile vms/config.vms vms/descrip.mms
- vms/ext/filespec.t vms/vms.c vms/vmsish.h
-
- Title: "hints/dec_osf.sh: polishing the comments"
- From: Jarkko Hietaniemi
- Msg-ID: <199701301958.VAA08992@alpha.hut.fi>
- Date: Thu, 30 Jan 1997 21:58:10 +0200 (EET)
- Files: hints/dec_osf.sh
-
- Title: "amigaos.sh"
- From: Norbert Pueschel
- Msg-ID: <77724724@Armageddon.meb.uni-bonn.de>
- Date: Wed, 29 Jan 1997 11:39:49 +0100
- Files: hints/amigaos.sh
-
- OTHER CORE CHANGES
-
- Title: "Require '-T' in argv[], not just on #! line"
- From: Chip Salzenberg
- Files: perl.c pod/perldiag.pod
-
- Title: "Fix C<return @_> and associated stack bugs"
- From: Chip Salzenberg
- Files: cop.h pp_ctl.c pp_hot.c t/op/misc.t
-
- Title: "Fix never-closing handle after C<select>"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "Fix /\G/g with patterns that match empty string"
- From: Ilya Zakharevich
- Files: pp_hot.c
-
- Title: "Fix scalar leak in av_unshift"
- From: Chip Salzenberg
- Files: av.c
-
- Title: "Ignore refs to lexicals when making refs to lexicals"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Don't create AV, HV, IO when assigning glob"
- From: Chip Salzenberg
- Files: mg.c
-
- BUILD PROCESS
-
- Title: "Configure updates for intsize and ssizetype"
- From: Andy Dougherty
- Files: Configure MANIFEST config_H config_h.SH handy.h
-
- Title: "Ask about /usr/bin/perl iff STDIN and STDERR are terminals"
- From: Chip Salzenberg
- Files: installperl
-
- LIBRARY AND EXTENSIONS
-
- Title: "Refresh CPAN to 1.19"
- From: Andreas Koenig
- Files: lib/Bundle/CPAN.pm lib/CPAN.pm lib/CPAN/FirstTime.pm
-
- Title: "Debugger update"
- From: Ilya Zakharevich
- Msg-ID: <199702030406.XAA23029@monk.mps.ohio-state.edu>
- Date: Sun, 2 Feb 1997 23:06:34 -0500 (EST)
- Files: lib/perl5db.pl
-
- Title: "In Symbol::gensym, don't make glob fake by copying it"
- From: John Hughes <john@AtlanTech.COM>
- Files: lib/Symbol.pm
-
- Title: "Make POSIX::is*() eight-bit-clean"
- From: Chip Salzenberg
- Files: ext/POSIX/POSIX.xs
-
- Title: "Make IO::Handle::gets() an alias of getline"
- From: Gisle Aas
- Msg-ID: <199701301103.MAA11291@bergen.sn.no>
- Date: Thu, 30 Jan 1997 12:03:15 +0100
- Files: ext/IO/lib/IO/Handle.pm lib/IO/Handle.pm
-
- TESTS
-
- Title: "More Amiga test patches"
- From: Norbert Pueschel
- Msg-ID: <77724725@Armageddon.meb.uni-bonn.de>
- Date: Wed, 29 Jan 1997 16:07:33 +0100
- Files: README.amiga t/lib/safe2.t t/op/closure.t
-
- UTILITIES
-
- Title: "c2ph.PL fix"
- From: lvirden@cas.org (Larry W. Virden)
- Msg-ID: <199701301349.IAA16724@cas.org>
- Date: Thu, 30 Jan 1997 08:49:19 -0500
- Files: utils/c2ph.PL
-
- Title: "Make pod2man a little laxer for perltoc.pod"
- From: Chip Salzenberg
- Files: pod/pod2man.PL
-
- DOCUMENTATION
-
- Title: "Update to perl INSTALL file"
- From: lvirden@cas.org (Larry W. Virden)
- Msg-ID: <199701301338.IAA15878@cas.org>
- Date: Thu, 30 Jan 1997 08:38:23 -0500
- Files: INSTALL
-
- Title: "Update to perl.pod suggested"
- From: lvirden@cas.org (Larry W. Virden)
- Msg-ID: <199701301345.IAA16514@cas.org>
- Date: Thu, 30 Jan 1997 08:45:59 -0500
- Files: pod/perl.pod
-
- Title: "Document how extension pms go in $archlib"
- From: Chip Salzenberg
- Files: pod/perldelta.pod
-
- Title: "perlfunc.pod tweaks"
- From: Roderick Schertler
- Msg-ID: <20526.854659255@eeyore.ibcinc.com>
- Date: Thu, 30 Jan 1997 16:20:55 -0500
- Files: pod/perlfunc.pod
-
- Title: "new (Feb 1) perlembed.pod"
- From: Jon Orwant <orwant@media.mit.edu>
- Msg-ID: <9702012334.AA15747@fahrenheit-451.media.mit.edu>
- Date: Sat, 1 Feb 1997 18:34:59 -0500
- Files: pod/perlembed.pod
-
- Title: "Error lines must not have trialing periods"
- From: Chip Salzenberg
- Files: pod/perldiag.pod
-
-
-----------------
-Version 5.003_24
-----------------
-
-This release is the second candidate for a public beta test.
-It's, well, bunches better than _23.
-
- CORE LANGUAGE CHANGES
-
- Title: "glob defaults to $_"
- From: Gurusamy Sarathy
- Msg-ID: <199701270809.DAA00934@aatma.engin.umich.edu>
- Date: Mon, 27 Jan 1997 03:09:13 -0500
- Files: op.c opcode.pl pod/perlfunc.pod t/op/glob.t
-
- Title: "Re: an overloading bug "
- From: Gurusamy Sarathy
- Msg-ID: <199701270007.TAA26525@aatma.engin.umich.edu>
- Date: Sun, 26 Jan 1997 19:07:45 -0500
- Files: pod/perldiag.pod pod/perlfunc.pod pp_ctl.c
-
- Title: "Don't warn on C<$\ = undef>"
- From: Chip Salzenberg
- Files: mg.c
-
- CORE PORTABILITY
-
- Title: "Win32 port"
- From: Gary Ng <71564.1743@compuserve.com>
- Files: MANIFEST win32/*
-
- Title: "Amiga files"
- From: Norbert Pueschel
- Msg-ID: <77724712@Armageddon.meb.uni-bonn.de>
- Date: Sun, 26 Jan 1997 17:42:15 +0100
- Files: MANIFEST README.amiga hints/amigaos.sh
-
- Title: "New dec_osf hints"
- From: Jarkko.Hietaniemi@cc.hut.fi
- Msg-ID: <199701271233.OAA21548@alpha.hut.fi>
- Date: Mon, 27 Jan 1997 14:33:01 +0200 (EET)
- Files: hints/dec_osf.sh
-
- OTHER CORE CHANGES
-
- Title: "Prevent premature death of @_ during leavesub"
- From: Chip Salzenberg
- Files: pp_hot.c t/op/misc.t
-
- Title: "Deref old stash when re-blessing"
- From: Chip Salzenberg
- Files: sv.c
-
- Title: "Don't abort when RCHECK and DEBUGGING"
- From: Tim Bunce
- Msg-ID: <9701272339.AA16537@toad.ig.co.uk>
- Date: Mon, 27 Jan 1997 23:39:48 +0000
- Files: malloc.c
-
- Title: "Fix overloading macro conflict with Digital 'cc -fast'"
- From: Jarkko Hietaniemi
- Msg-ID: <199701272216.AAA04557@alpha.hut.fi>
- Date: Tue, 28 Jan 1997 00:16:49 +0200 (EET)
- Files: perl.h
-
- Title: "global.sym: typo?"
- From: Jarkko Hietaniemi
- Msg-ID: <199701261937.VAA07556@alpha.hut.fi>
- Date: Sun, 26 Jan 1997 21:37:59 +0200 (EET)
- Files: global.sym
-
- BUILD PROCESS
-
- Title: "Put all extensions' modules in $archlib"
- From: Chip Salzenberg
- Files: installperl
-
- Title: "Configure fixes: set $archlib, omit _NO_PROTO"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Make configure{,.gnu} ignore --cache-file option"
- From: Norbert Pueschel
- Files: configure configure.gnu
-
- LIBRARY AND EXTENSIONS
-
- Title: "Version checking in XS bootstrap is optional"
- From: Chip Salzenberg
- Files: XSUB.h
-
- Title: "Update $VERSION of DynaLoader and POSIX"
- From: Chip Salzenberg
- Files: ext/DynaLoader/DynaLoader.pm ext/POSIX/POSIX.pm
-
- Title: "Refresh Text::Wrap to 97.011701"
- From: Chip Salzenberg
- Files: lib/Text/Wrap.pm
-
- Title: "Fcntl.xs: F_[GS]ETOWN were in wrong case branch"
- From: Jarkko Hietaniemi
- Msg-ID: <199701251510.RAA05142@alpha.hut.fi>
- Date: Sat, 25 Jan 1997 17:10:20 +0200 (EET)
- Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
-
- Title: "Fix $Is_VMS typo in Test::Harness"
- From: Chip Salzenberg
- Files: lib/Test/Harness.pm
-
- Title: "Allow for really big keys in Tie::SubstrHash"
- From: data-drift@so.uio.no
- Msg-ID: <199701282014.VAA12645@selters.uio.no>
- Date: Tue, 28 Jan 1997 21:14:34 +0100 (MET)
- Files: lib/Tie/SubstrHash.pm
-
- Title: "Avoid newRV_noinc() in IO, for compiling with old Perls"
- From: Chip Salzenberg
- Files: ext/IO/IO.xs
-
- TESTS
-
- Title: "New test op/closure.t"
- From: Tom Phoenix, Ulrich Pfeifer
- Files: MANIFEST t/op/closure.t
-
- UTILITIES
-
- Title: "xsubpp handing of void funcs breaks extensions using XST_m*()"
- From: Tim Bunce
- Msg-ID: <9701271659.AA15137@toad.ig.co.uk>
- Date: Mon, 27 Jan 1997 16:59:06 +0000
- Files: lib/ExtUtils/xsubpp
-
- DOCUMENTATION
-
- Title: "perldelta Fcntl enhancement"
- From: Jarkko Hietaniemi
- Msg-ID: <199701251505.RAA22159@alpha.hut.fi>
- Date: Sat, 25 Jan 1997 17:05:34 +0200 (EET)
- Files: pod/perldelta.pod
-
- Title: "Updates to perldelta re: Fcntl, DB_File, Net::Ping"
- From: Paul Marquess
- Files: pod/perldelta.pod
-
- Title: "Document restrictions on gv_fetchmethod() and perl_call_sv()"
- From: Chip Salzenberg
- Files: pod/perldelta.pod pod/perlguts.pod
-
- Title: "perldiag.pod: No comma allowed after %s"
- From: Jarkko.Hietaniemi@cc.hut.fi
- Msg-ID: <199701251541.RAA04120@alpha.hut.fi>
- Date: Sat, 25 Jan 1997 17:41:53 +0200 (EET)
- Files: pod/perldiag.pod
-
- Title: "perlfunc.pod: localtime"
- From: Jarkko Hietaniemi
- Msg-ID: <199701251629.SAA08114@alpha.hut.fi>
- Date: Sat, 25 Jan 1997 18:29:37 +0200 (EET)
- Files: pod/perlfunc.pod
-
- Title: "perlfunc diff: gmtime"
- From: Peter Haworth <pmh@edison.ioppublishing.com>
- Msg-ID: <32EE1298.7B90@edison.ioppublishing.com>
- Date: Tue, 28 Jan 1997 14:52:08 +0000
- Files: pod/perlfunc.pod
-
- Title: "Updates to guts"
- From: Ilya Zakharevich
- Msg-ID: <199701270034.TAA13177@monk.mps.ohio-state.edu>
- Date: Sun, 26 Jan 1997 19:34:18 -0500 (EST)
- Files: pod/perlguts.pod
-
- Title: "perltoot fixes"
- From: Tom Christiansen
- Msg-ID: <6807.854214205@jinete>
- Date: Sat, 25 Jan 1997 09:43:25 -0800
- Files: pod/perltoot.pod
-
- Title: "5.003_23: small typo in perlsyn.pod"
- From: Gurusamy Sarathy
- Msg-ID: <199701270824.DAA01169@aatma.engin.umich.edu>
- Date: Mon, 27 Jan 1997 03:24:25 -0500
- Files: pod/perlsyn.pod
-
-
-----------------
-Version 5.003_23
-----------------
-
-This release is our first candidate for a public beta test.
-
- CORE LANGUAGE CHANGES
-
- Title: "Disallow changing $_[0] in __DIE__ handlers"
- From: Chip Salzenberg
- Files: pod/perlfunc.pod util.c
-
- Title: "Fix overloading with inheritance and AUTOLOAD"
- From: Ilya Zakharevich
- Msg-ID: <199701202226.RAA05072@monk.mps.ohio-state.edu>
- Date: Mon, 20 Jan 1997 17:26:32 -0500 (EST)
- Files: gv.c lib/diagnostics.pm lib/overload.pm pod/perldebug.pod
- pod/perldiag.pod pod/perlfunc.pod pod/perlop.pod
- pod/perlre.pod pod/perltoc.pod pod/perlxs.pod
-
- Title: "Nested here-docs"
- From: larry@wall.org (Larry Wall)
- Msg-ID: <199701202313.PAA11693@wall.org>
- Date: Mon, 20 Jan 1997 15:13:42 -0800
- Files: toke.c
-
- Title: "Revert $^X to old behavior (plus HP-UX bug fix)"
- From: Chip Salzenberg
- Files: hints/hpux.sh toke.c
-
- Title: "Protect against '0' in 'stmt while <HANDLE>'"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Don't warn when closure uses var at file scope"
- From: Chip Salzenberg
- Files: op.c
-
- CORE PORTABILITY
-
- Title: "VMS patches for _22"
- From: Charles Bailey
- Msg-ID: <01IEGBJ2TMYS003PCL@hmivax.humgen.upenn.edu>
- Date: Mon, 20 Jan 1997 22:50:21 -0500 (EST)
- Files: ext/POSIX/POSIX.xs lib/ExtUtils/MM_VMS.pm lib/ExtUtils/xsubpp
- lib/Test/Harness.pm toke.c vms/Makefile vms/descrip.mms
- vms/genconfig.pl vms/perly_c.vms vms/vmsish.h x2p/a2p.h
- vms/Makefile vms/config.vms vms/descrip.mms vms/perly_c.vms
-
- Title: "Re: Perl 5.003_21: OS/2 patches"
- From: Ilya Zakharevich
- Msg-ID: <199701170446.XAA28939@monk.mps.ohio-state.edu>
- Date: Thu, 16 Jan 1997 23:46:40 -0500 (EST)
- Files: os2/Changes os2/os2.c
-
- Title: "Plan9 update"
- From: lutherh@stratcom.com (Luther Huffman)
- Files: plan9/config.plan9 plan9/mkfile
-
- Title: "Bugfixes for AmigaOS"
- From: Norbert Pueschel
- Msg-ID: <77724691@Armageddon.meb.uni-bonn.de>
- Date: Wed, 22 Jan 1997 00:13:54 +0100
- Files: hints/amigaos.sh lib/File/Basename.pm
-
- Title: "New dec_osf.sh hints file"
- From: Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
- Msg-ID: <9701241058.AA29550@o09.rosat.mpe-garching.mpg.de>
- Date: Fri, 24 Jan 1997 11:58:24 +0100
- Files: hints/dec_osf.sh
-
- Title: "on NeXT: gdbm problem fixed"
- From: Andreas Koenig
- Msg-ID: <199701210201.DAA17794@anna.in-berlin.de>
- Date: Tue, 21 Jan 1997 03:01:32 +0100
- Files: hints/next_3.sh hints/next_3_0.sh
-
- Title: "patch for hints/powerux.sh"
- From: tom@amber.ssd.hcsc.com (Tom Horsley)
- Msg-ID: <9701181833.AA02602@amber.ssd.hcsc.com>
- Date: Sat, 18 Jan 97 13:33:26 -0500
- Files: hints/powerux.sh
-
- Title: "hints & Configure changes to build perl on DC/OSx"
- From: Stephen Zander <stephen.zander@interlock.mckesson.com>
- Msg-ID: <199701170043.QAA25985@wsbip1.mckesson.com>
- Date: Thu, 16 Jan 1997 16:43:52 -0800
- Files: Configure MANIFEST hints/dcosx.sh
-
- Title: "patch for hints/cxux.sh perl5.003_22"
- From: tom@amber.ssd.hcsc.com (Tom Horsley)
- Msg-ID: <9701192014.AA05722@amber.ssd.hcsc.com>
- Date: Sun, 19 Jan 97 15:14:04 -0500
- Files: hints/cxux.sh
-
- OTHER CORE CHANGES
-
- Title: "Make PERL5LIB and -I work like C<use lib>"
- From: Tim Bunce
- Msg-ID: <9701231523.AA26613@toad.ig.co.uk>
- Date: Thu, 23 Jan 1997 15:23:27 +0000
- Files: lib/lib.pm perl.c
-
- Title: "Fix /\G.a/"
- From: Chip Salzenberg
- Files: regcomp.c regcomp.h regexec.c regexp.h toke.c
-
- Title: "Extend stack in pp_undef (!)"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Allow for sub to be redefined while executing"
- From: Chip Salzenberg
- Files: cop.h pp_hot.c t/op/misc.t
-
- Title: "Eliminate redundant flag CVf_FORMAT"
- From: Chip Salzenberg
- Files: cv.h op.c perl.c perly.c perly.y proto.h sv.c toke.c
-
- Title: "Generate IVs when possible in abs() and int()"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Efficiency patchlet for pp_aassign()"
- From: Ilya Zakharevich
- Msg-ID: <199701210305.WAA05451@monk.mps.ohio-state.edu>
- Date: Mon, 20 Jan 1997 22:05:39 -0500 (EST)
- Files: pp_hot.c
-
- Title: "When sorting, promote to PVNV only for built-in comparison"
- From: Chip Salzenberg
- Files: pp_ctl.c
-
- Title: "Remove "suidperl security patch" message"
- From: Chip Salzenberg
- Files: perl.c
-
- BUILD PROCESS
-
- Title: "Make configure.gnu a copy of configure; make configure writea
- From: Chip Salzenberg
- Files: MANIFEST configure.gnu
-
- Title: "Regen Configure with metaconfig: +ARCHNAME, -FILE_filbuf"
- From: Chip Salzenberg and Charles Bailey
- Files: Configure config_H config_h.SH hints/lynxos.sh
- os2/diff.configure os2/os2ish.h plan9/config.plan9 sv.c
- utils/perlbug.PL vms/config.vms vms/fndvers.com
-
- Title: "Compile with optimization when testing memory functions"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Minor patch for Debian installation"
- From: Chip Salzenberg
- Files: installperl
-
- LIBRARY AND EXTENSIONS
-
- Title: "Debugger update"
- From: Ilya Zakharevich
- Msg-ID: <199701190455.XAA02579@monk.mps.ohio-state.edu>
- Date: Sat, 18 Jan 1997 23:54:59 -0500 (EST)
- Files: lib/perl5db.pl
-
- Title: "DynaLoader enhancement: support RTLD_GLOBAL"
- From: Nick Ing-Simmons
- Msg-ID: <199701240937.JAA11443@pluto.tiuk.ti.com>
- Date: Fri, 24 Jan 1997 09:37:18 GMT
- Files: ext/DynaLoader/DynaLoader.pm ext/DynaLoader/dl_aix.xs
- ext/DynaLoader/dl_dld.xs ext/DynaLoader/dl_dlopen.xs
- ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_next.xs
- ext/DynaLoader/dl_vms.xs
-
- Title: "Fcntl: add more constants"
- From: Jarkko.Hietaniemi@cc.hut.fi
- Msg-ID: <199701191811.UAA16346@alpha.hut.fi>
- Date: Sun, 19 Jan 1997 20:11:22 +0200 (EET)
- Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
-
- Title: "Refresh IO to 1.15 (plus DESTROY and new_tmpfile fixes)"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/File.pm ext/IO/lib/IO/Handle.pm
- ext/IO/lib/IO/Pipe.pm ext/IO/lib/IO/Seekable.pm
- ext/IO/lib/IO/Socket.pm t/lib/io_pipe.t
-
- Title: "Allow IO.xs to remain at 1.15 while $VERSION is 1.1501"
- From: Chip Salzenberg
- Files: XSUB.h ext/IO/Makefile.PL ext/IO/lib/IO/Handle.pm
-
- Title: "Refresh CPAN to 1.15"
- From: Andreas Koenig
- Files: lib/CPAN.pm lib/CPAN/FirstTime.pm
-
- Title: "Add E* and SA_* constants"
- From: Roderick Schertler
- Msg-ID: <23338.853986967@eeyore.ibcinc.com>
- Date: Wed, 22 Jan 1997 21:36:07 -0500
- Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
-
- TESTS
-
- Title: "Test nested here-docs"
- From: hv@crypt.compulink.co.uk (Hugo van der Sanden)
- Msg-ID: <199701210053.AAA02139@crypt.compulink.co.uk>
- Date: Tue, 21 Jan 1997 00:53:44 +0000 (GMT)
- Files: t/base/lex.t
-
- Title: "Fix tests of $^X and $0 to work with QNX"
- From: Chip Salzenberg
- Files: t/lib/io_pipe.t t/lib/open2.t t/lib/open3.t t/op/magic.t
-
- Title: "Patch tests for systems without fork()"
- From: Norbert Pueschel
- Msg-ID: <77724697@Armageddon.meb.uni-bonn.de>
- Date: Thu, 23 Jan 1997 23:51:28 +0100
- Files: t/io/pipe.t t/lib/filehand.t t/lib/io_pipe.t t/lib/io_sock.t
- t/lib/open2.t t/lib/open3.t t/op/fork.t
-
- Title: "Test patches for OS/2"
- From: Ilya Zakharevich
- Msg-ID: <199701170448.XAA28948@monk.mps.ohio-state.edu>
- Date: Thu, 16 Jan 1997 23:48:18 -0500 (EST)
- Files: os2/OS2/ExtAttr/t/os2_ea.t os2/OS2/PrfDB/t/os2_prfdb.t
- os2/OS2/REXX/t/rx_cmprt.t os2/OS2/REXX/t/rx_dllld.t
- os2/OS2/REXX/t/rx_objcall.t os2/OS2/REXX/t/rx_sql.test
- os2/OS2/REXX/t/rx_tiesql.test os2/OS2/REXX/t/rx_tievar.t
- os2/OS2/REXX/t/rx_tieydb.t os2/OS2/REXX/t/rx_varset.t
- os2/OS2/REXX/t/rx_vrexx.t t/README t/cmd/while.t
- t/comp/colon.t t/comp/multiline.t t/io/argv.t t/lib/anydbm.t
- t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t
- t/op/cmp.t t/op/magic.t
-
- UTILITIES
-
- Title: "Translate \200 to &#200; in pod2html"
- From: Chip Salzenberg
- Files: pod/pod2html.PL
-
- Title: "VMS patches: '.com' extension on scripts"
- From: Charles Bailey
- Msg-ID: <01IELNPDLYJM003E7J@hmivax.humgen.upenn.edu>
- Date: Fri, 24 Jan 1997 18:42:29 -0500 (EST)
- Files: pod/checkpods.PL pod/pod2html.PL pod/pod2latex.PL
- pod/pod2man.PL pod/pod2text.PL utils/c2ph.PL utils/h2ph.PL
- utils/h2xs.PL utils/perlbug.PL utils/perldoc.PL
- utils/pl2pm.PL utils/splain.PL vms/Makefile vms/descrip.mms
- x2p/find2perl.PL x2p/s2p.PL
-
- Title: "Allow MakeMaker 5.34 to use libraries containing '+' in name"
- From: dennism@cyrix.com (Dennis Marsa)
- Msg-ID: <9701172027.AA27861@orion.cyrix.com>
- Date: Fri, 17 Jan 97 14:27:32 CST
- Files: lib/ExtUtils/Liblist.pm
-
- DOCUMENTATION
-
- Title: "First cut at INSTALL edit"
- From: Chip Salzenberg
- Files: INSTALL
-
- Title: "Additional docs for __DIE__ and __WARN__"
- From: Gurusamy Sarathy
- Files: pod/perlfunc.pod pod/perlrun.pod pod/perlvar.pod
-
- Title: "Document #line directive"
- From: Gurusamy Sarathy
- Msg-ID: <199701240908.EAA23846@aatma.engin.umich.edu>
- Date: Fri, 24 Jan 1997 04:08:44 -0500
- Files: pod/perlsyn.pod pod/perltoc.pod
-
- Title: "Perlguts version 30"
- From: Jeff Okamoto
- Msg-ID: <199701172117.AA116515863@hpcc123.corp.hp.com>
- Date: Fri, 17 Jan 1997 13:17:43 -0800
- Files: pod/perlguts.pod
-
- Title: "delta for perldelta"
- From: Tom Christiansen
- Msg-ID: <804.854121463@jinete>
- Date: Fri, 24 Jan 1997 07:57:43 -0800
- Files: pod/perlnews.pod pod/perltoc.pod
-
- Title: "Updates to perldelta"
- From: Ilya Zakharevich
- Msg-ID: <199701211610.LAA06227@monk.mps.ohio-state.edu>
- Date: Mon, 20 Jan 1997 06:48:49 -0500 (EST)
- Files: pod/perlnews.pod pod/perltoc.pod
-
- Title: "perlnews.pod diff for the Fcntl"
- From: Jarkko Hietaniemi
- Msg-ID: <199701211600.SAA30117@alpha.hut.fi>
- Date: Tue, 21 Jan 1997 18:00:56 +0200 (EET)
- Files: pod/perlnews.pod
-
- Title: "Rename perlnews -> perldelta per Tom's request"
- From: Chip Salzenberg
- Files: MANIFEST pod/Makefile pod/buildtoc pod/perl.pod
- pod/perldelta.pod pod/perltoc.pod pod/roffitall
-
- Title: "Remove bad advice from perllocale.pod"
- From: Chip Salzenberg
- Files: pod/perllocale.pod
-
-
-----------------
-Version 5.003_22
-----------------
-
-This release is primarily made up of bug fixes, the foremost among
-which repairs a showstopper memory corruption bug in formats.
-
- CORE LANGUAGE CHANGES
-
- Title: "Fix parsing of C< ${ xyz } >"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Don't parse method calls in strings"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Fix overly picky carping about leading '{' in regex"
- From: Chip Salzenberg
- Files: regcomp.c
-
- OTHER CORE CHANGES
-
- Title: "Fix memory corruption from formats"
- From: Chip Salzenberg
- Files: op.c perl.c perly.c perly.c.diff perly.y proto.h sv.c toke.c
-
- BUILD PROCESS
-
- Title: "Fix '_mopop' typo"
- From: Chip Salzenberg
- Files: Makefile.SH
-
- LIBRARY AND EXTENSIONS
-
- Title: "Gut IO::Handle::DESTROY"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/Handle.pm
-
- Title: "RiscOS is case-insensitive"
- From: Chip Salzenberg
- Files: lib/File/Basename.pm
-
- TESTS
-
- Title: "Fix thinko in db-recno.t"
- From: Chip Salzenberg
- Files: t/lib/db-recno.t
-
- UTILITIES
-
- Title: "Make perlbug more cautionary and more verbose"
- From: Kenneth Albanowski and Jarkko Hietaniemi
- Files: utils/perlbug.PL
-
- DOCUMENTATION
-
- Title: "NEW roffitall + INSTALL fix"
- From: Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
- Msg-ID: <6058.853410121@lyon.grenoble.hp.com>
- Date: Thu, 16 Jan 97 11:22:01 +0100
- Files: INSTALL pod/roffitall
-
- Title: "srand() doc update"
- From: Roderick Schertler
- Msg-ID: <24195.853379065@eeyore.ibcinc.com>
- Date: Wed, 15 Jan 1997 20:44:25 -0500
- Files: pod/perlfunc.pod
-
- Title: "documentation of configpm (perl5.003_20)"
- From: win@in.rhein-main.de (Winfried Koenig)
- Msg-ID: <m0vkU40-0004WAC@incom.rhein-main.de>
- Date: Wed, 15 Jan 1997 14:03:27 +0200 (EET)
- Files: configpm
-
-
-----------------
-Version 5.003_21
-----------------
-
-This release includes several important bug fixes, and a couple of
-minor but valuable language tweaks. Please read on for a list of the
-significant changes:
-
- CORE LANGUAGE CHANGES
-
- Title: "Fix overloading via inherited autoloaded functions"
- From: Ilya Zakharevich
- Msg-ID: <199701131022.FAA22830@monk.mps.ohio-state.edu>
- Date: Mon, 13 Jan 1997 05:22:47 -0500 (EST)
- Files: gv.c lib/overload.pm pod/perldiag.pod t/pragma/overload.t
-
- Title: "Method call fixes: Don't cache in alias, don't skip undef"
- From: Chip Salzenberg
- Files: global.sym gv.c gv.h hv.c op.c pod/perlguts.pod
- pod/perltoc.pod pp.c pp_ctl.c pp_hot.c proto.h scope.c sv.c
- t/op/method.t
-
- Title: "Formats can be closures"
- From: Chip Salzenberg
- Files: cv.h op.c perly.c perly.c.diff perly.y pp_sys.c sv.h
-
- Title: "Quote 'foo' in C<$x{-foo}>"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Forbid C< x->{y} > and C< x->[0] > under C<strict refs>"
- From: Chip Salzenberg
- Files: op.c pod/perldiag.pod t/pragma/strict-refs
-
- Title: "Allow <=> to return undef when operands are not ordered"
- From: Chip Salzenberg and Andreas Koenig
- Files: MANIFEST pp.c t/op/cmp.t
-
- Title: "Fail regex that starts with '{'"
- From: Chip Salzenberg
- Files: regcomp.c
-
- CORE PORTABILITY
-
- Title: "Re: Perl 5.003_20: OS/2 patches"
- From: Ilya Zakharevich
- Msg-ID: <199701101102.GAA19051@monk.mps.ohio-state.edu>
- Date: Fri, 10 Jan 1997 06:02:16 -0500 (EST)
- Files: hints/os2.sh os2/Changes os2/os2.c os2/os2ish.h pp_sys.c
-
- Title: "VMS patches for _20"
- From: Charles Bailey
- Msg-ID: <01IE7MGK7ULQ003K5M@hmivax.humgen.upenn.edu>
- Date: Tue, 14 Jan 1997 17:34:43 -0500 (EST)
- Files: configpm dosish.h os2/os2ish.h plan9/plan9ish.h proto.h
- t/pragma/strict.t t/pragma/subs.t t/pragma/warning.t toke.c
- unixish.h vms/Makefile vms/config.vms vms/descrip.mms
- vms/genconfig.pl vms/perly_c.vms vms/test.com vms/vmsish.h
- x2p/a2p.h x2p/str.c
-
- Title: "Irix 6.3 & 6.4 and perl5.003_20"
- From: John Stoffel <jfs@fluent.com>
- Msg-ID: <199701132242.RAA14601@jfs.Fluent.COM>
- Date: Mon, 13 Jan 1997 17:42:50 -0500 (EST)
- Files: MANIFEST hints/irix_6_3.sh hints/irix_6_4.sh
-
- Title: "Patch: MachTen hints, Configure"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03010d00af0123a93670@[194.51.248.75]>
- Date: Tue, 14 Jan 1997 13:43:13 +0100
- Files: Configure hints/machten.sh
-
- Title: "Rename aux.sh to aux_3.sh for MS-LOSS"
- From: Chip Salzenberg
- Files: MANIFEST hints/aux_3.sh
-
- OTHER CORE CHANGES
-
- Title: "Fix C< eval { my $x; eval '$x' } >"
- From: Chip Salzenberg
- Files: op.c t/op/misc.t
-
- Title: "Don't warn if eval '' uses outer func's lexicals"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Avoid memory wastage in wait(); make pidstatus global"
- From: Chip Salzenberg
- Files: global.sym interp.sym perl.c perl.h pp_sys.c
-
- Title: "Forbid ++ and -- on readonly values"
- From: "John Q. Linux" <jql@accessone.com>
- Msg-ID: <Pine.LNX.3.95.970110193330.11249D-100000@jql.accessone.com>
- Date: Fri, 10 Jan 1997 19:47:16 -0800 (PST)
- Files: pp.c pp_hot.c
-
- Title: "Keep array from dying during foreach(@array)"
- From: Chip Salzenberg
- Files: cop.h pp_ctl.c
-
- Title: "Fix C< $a="simple"; split /($a)/o >"
- From: Chip Salzenberg
- Files: pp.c t/op/misc.t
-
- Title: "Fix infinite loop for undef function in @SIG{__WARN__,__DIE__}"
- From: Chip Salzenberg
- Files: util.c
-
- Title: "Fix for anon-lists with tied entries coredump"
- From: Gurusamy Sarathy
- Msg-ID: <199701100745.CAA13057@aatma.engin.umich.edu>
- Date: Fri, 10 Jan 1997 02:45:11 -0500
- Files: pp.c
-
- Title: "Don't set SVf_PADBUSY on immortal SVs"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Patch for Object subroutines"
- From: Ilya Zakharevich
- Msg-ID: <199701080156.UAA15366@monk.mps.ohio-state.edu>
- Date: Tue, 7 Jan 1997 20:56:02 -0500 (EST)
- Files: cop.h
-
- Title: "Use an SVt_PVLV to hold stacked OP pointers when debugging"
- From: Chip Salzenberg
- Files: pp.c pp_hot.c
-
- Title: "Undo change that freed large pad vars"
- From: Chip Salzenberg
- Files: scope.c
-
- BUILD PROCESS
-
- Title: "Make MachTen hints file warn about db-recno failures"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03010d00aef92fba6aca@[194.51.248.78]>
- Date: Wed, 8 Jan 1997 12:07:18 +0100
- Files: hints/machten.sh
-
- Title: "5.003_20, FreeBSD 3.0 and minor patch"
- From: roberto@eurocontrol.fr (Ollivier Robert)
- Msg-ID: <Mutt.19970108143747.roberto@caerdonn.eurocontrol.fr>
- Date: Wed, 8 Jan 1997 14:37:47 +0100
- Files: Configure
-
- Title: "Make installperl quieter; only shared libraries need 0555"
- From: Chip Salzenberg
- Files: installperl
-
- TESTS
-
- Title: "Advice on TEST failure"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03010d01aefbaefcf3bc@[194.51.248.78]>
- Date: Fri, 10 Jan 1997 10:19:07 +0100
- Files: t/TEST
-
- Title: "UNIVERSAL tests"
- From: Roderick Schertler
- Files: MANIFEST t/op/universal.t
-
- Title: "Test deletion of array during foreach"
- From: Jarkko Hietaniemi
- Files: t/op/misc.t
-
- Title: "patch for db-recno.t"
- From: Paul Marquess
- Msg-ID: <9701121509.AA11147@claudius.bfsec.bt.co.uk>
- Date: Sun, 12 Jan 1997 15:09:33 +0000 (GMT)
- Files: t/lib/db-recno.t
-
- LIBRARY AND EXTENSIONS
-
- Title: "Localize info about filesystems being case-forgiving"
- From: Chip Salzenberg
- Files: lib/File/Basename.pm pod/checkpods.PL pod/pod2html.PL
- pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL
- utils/c2ph.PL utils/h2ph.PL utils/h2xs.PL utils/perlbug.PL
- utils/perldoc.PL utils/pl2pm.PL utils/splain.PL
- x2p/find2perl.PL x2p/s2p.PL
-
- Title: "Fix for fd leak in IO::File::new_tmpfile"
- From: Graham Barr and Chip Salzenberg
- Files: ext/IO/IO.xs ext/IO/lib/IO/Handle.pm
-
- Title: "Refresh Getopt::Long to 2.6"
- From: Johan Vromans <jvromans@squirrel.nl>
- Files: lib/Getopt/Long.pm
-
- Title: "Refresh DB_File to 1.10"
- From: Paul Marquess
- Msg-ID: <9701141247.AA21242@claudius.bfsec.bt.co.uk>
- Date: Tue, 14 Jan 97 12:47:40 GMT
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
-
- Title: "Re: FileCache::cacheout clobbers $_"
- From: Roderick Schertler
- Msg-ID: <pz3ewb3189.fsf@eeyore.ibcinc.com>
- Date: 08 Jan 1997 23:45:58 -0500
- Files: lib/FileCache.pm lib/cacheout.pl
-
- Title: "PATCH: AutoSplit"
- From: Graham Barr
- Msg-ID: <9603111010.AA29935@tiuk.ti.com>
- Date: 11 Mar 1996 06:01:58 -0500
- Files: lib/AutoSplit.pm
-
- Title: "Re: Uninitialized value in Carp.pm ? "
- From: Gurusamy Sarathy
- Msg-ID: <199701141815.NAA07960@aatma.engin.umich.edu>
- Date: Tue, 14 Jan 1997 13:15:25 -0500
- Files: lib/Carp.pm
-
- Title: "Avoid "uninitialized" warnings from POSIX::constant()"
- From: Chip Salzenberg
- Files: ext/POSIX/POSIX.pm
-
- Title: "Eliminate warning from C<use overload>"
- From: Chip Salzenberg
- Files: lib/overload.pm
-
- Title: "low priority patches"
- From: Paul Marquess
- Msg-ID: <9701081655.AA27349@claudius.bfsec.bt.co.uk>
- Date: Wed, 8 Jan 97 16:55:02 GMT
- Files: lib/Cwd.pm t/comp/redef.t t/lib/db-btree.t
-
- UTILITIES
-
- Title: "Re: xsubpp and Tk ==> segfault"
- From: Ilya Zakharevich
- Msg-ID: <199701080825.DAA15813@monk.mps.ohio-state.edu>
- Date: Wed, 8 Jan 1997 03:25:47 -0500 (EST)
- Files: lib/ExtUtils/xsubpp
-
- Title: "Re: MakeMaker and 'make uninstall'"
- From: Andreas Koenig
- Msg-ID: <199701101243.NAA26400@anna.in-berlin.de>
- Date: Fri, 10 Jan 1997 13:43:39 +0100
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Don't search for pod if path is already valid"
- From: Wayne Scott <wscott@ichips.intel.com>
- Msg-ID: <199701082325.PAA04521@pdxlx008.intel.com>
- Date: Wed, 08 Jan 1997 15:25:19 -0800
- Files: utils/perldoc.PL
-
- Title: "Yet another perldoc option"
- From: Gisle Aas
- Msg-ID: <199610022200.AAA15334@furubotn.sn.no>
- Date: Thu, 3 Oct 1996 00:00:35 +0200
- Files: utils/perldoc.PL
-
- Title: "Re: perldoc, temp files, async pagers"
- From: Roderick Schertler
- Msg-ID: <pzwwtoom8p.fsf@eeyore.ibcinc.com>
- Date: 07 Jan 1997 22:54:14 -0500
- Files: utils/perldoc.PL
-
- DOCUMENTATION
-
- Title: "Full documentation generation patch"
- From: Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
- Msg-ID: <15309.853323388@lyon.grenoble.hp.com>
- Date: Wed, 15 Jan 97 11:16:28 +0100
- Files: MANIFEST pod/roffitall pod/rofftoc
-
- Title: "Re: documentation correction (i.e. patch) for perlsyn.pod"
- From: "M.J.T. Guy"
- Msg-ID: <E0vilLh-0000M6-00@ursa.cus.cam.ac.uk>
- Date: Fri, 10 Jan 1997 18:06:37 +0000
- Files: pod/perlsyn.pod
-
- Title: "Document use of pos() and /\G/"
- From: Gurusamy Sarathy
- Msg-ID: <199701132013.PAA26606@aatma.engin.umich.edu>
- Date: Mon, 13 Jan 1997 15:13:12 -0500
- Files: pod/perlfunc.pod pod/perlnews.pod pod/perlop.pod
- pod/perlre.pod pod/perltoc.pod pod/perltrap.pod
-
- Title: "Fix example #4 in perlXStut"
- From: Ilya Zakharevich
- Msg-ID: <199701050739.CAA11112@monk.mps.ohio-state.edu>
- Date: Sun, 5 Jan 1997 02:39:45 -0500 (EST)
- Files: pod/perlxstut.pod
-
- Title: "Document new closure warnings"
- From: Chip Salzenberg
- Files: op.c pod/perldiag.pod
-
- Title: "Misc. doc patches missing in _20"
- From: Roderick Schertler
- Msg-ID: <102.852695733@eeyore.ibcinc.com>
- Date: Tue, 07 Jan 1997 22:55:33 -0500
- Files: pod/perlsub.pod pod/perltoc.pod pod/perlvar.pod
-
-
-----------------
-Version 5.003_20
-----------------
-
-The only language change in this release is the recension of support
-for named closures: Now, no subroutine declared "sub foo {}" can be
-a closure. (This is a return to the behavior of 5.003.) In addition,
-there are new warnings triggered by any apparent attempt to use named
-functions as closures.
-
-And, as usual, there are the usual little fixes, documentation
-updates, and expanded tests. This is good stuff. "I love you, man!"
-
- CORE LANGUAGE CHANGES
-
- Title: "Rescind named closures"
- From: Chip Salzenberg
- Files: Makefile.SH op.c perly.c perly.c.diff perly.y pp_hot.c
-
- Title: "Fix: empty @_ when calling empty-proto subs without parens"
- From: Graham Barr
- Msg-ID: <32CE30F0.7E8425A5@tiuk.ti.com>
- Date: Sat, 04 Jan 1997 10:29:04 +0000
- Files: perly.c perly.y
-
- CORE PORTABILITY
-
- Title: "Fix $^X on systems that set it to Perl's basename"
- From: Chip Salzenberg
- Files: hints/hpux.sh toke.c
-
- Title: "Configure/perl5/Compartmented Mode Workstation (fwd)"
- From: Andy Dougherty
- Msg-ID: <Pine.SOL.3.95.970106131505.1662C-100000@fractal.lafayette.ed
- Date: Mon, 06 Jan 1997 13:15:38 -0500 (EST)
- Files: Configure hints/dec_osf.sh
-
- Title: "Remove obsolete file "dl_os2.xs"."
- From: Ilya Zakharevich
- Files: MANIFEST
-
- OTHER CORE CHANGES
-
- Title: "Fix C< sub foo (&@); sub bar (&); foo {}, bar {}, bar {} >"
- From: Chip Salzenberg
- Files: perly.c perly.c.diff perly.y
-
- Title: "plug for safe/opcode leaks"
- From: Doug MacEachern
- Msg-ID: <199701072220.RAA02117@postman.osf.org>
- Date: Tue, 07 Jan 1997 17:20:46 -0500
- Files: op.c
-
- Title: "Finish OP= warnings: none on ^="
- From: Chip Salzenberg
- Files: doop.c pp.c t/op/assignwarn.t
-
- Title: "Fix Dynaloader failures with DProf"
- From: Gurusamy Sarathy
- Msg-ID: <199701061718.MAA26909@aatma.engin.umich.edu>
- Date: Mon, 06 Jan 1997 12:18:46 -0500
- Files: pp_hot.c
-
- BUILD PROCESS
-
- Title: "Make Configure default to the first domain in /etc/resolv.conf"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Start all helper scripts with $startsh"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Support libperl.so under FreeBSD"
- From: roberto@keltia.freenix.fr (Ollivier Robert)
- Msg-ID: <Mutt.19970105224149.roberto@keltia.freenix.fr>
- Date: Sun, 5 Jan 1997 22:41:49 +0100
- Files: Configure Makefile.SH
-
- TESTS
-
- Title: "New test: comp/proto.t"
- From: Graham Barr
- Msg-ID: <32D0C21F.3FB28D51@tiuk.ti.com>
- Date: Mon, 06 Jan 1997 09:13:03 +0000
- Files: MANIFEST t/comp/proto.t
-
- Title: "More magic variable tests"
- From: Roderick Schertler
- Msg-ID: <7043.852565192@eeyore.ibcinc.com>
- Date: Mon, 06 Jan 1997 10:39:52 -0500
- Files: t/harness t/op/magic.t
-
- LIBRARY AND EXTENSIONS
-
- Title: "File::Basename::dirname bugs"
- From: Robin Barker <rmb@cise.npl.co.uk>
- Msg-ID: <12393.9701071719@tempest.cise.npl.co.uk>
- Date: Tue, 7 Jan 97 17:19:59 GMT
- Files: lib/File/Basename.pm t/lib/basename.t
-
- Title: "sigaction() problems"
- From: Roderick Schertler
- Msg-ID: <12808.852583324@eeyore.ibcinc.com>
- Date: Mon, 06 Jan 1997 15:42:04 -0500
- Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod
-
- Title: "Fix importation of FileHandle methods; fix POSIX docs"
- From: Chip Salzenberg
- Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod lib/FileHandle.pm
-
- Title: "Patch: make hints files warn about db-recno failures"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03010d00aef53ac4d18a@[194.51.248.68]>
- Date: Sun, 5 Jan 1997 12:34:25 +0100
- Files: MANIFEST hints/aux.sh hints/broken-db.msg hints/freebsd.sh
-
- UTILITIES
-
- Title: "pod2html.PL patch (for 5.003-19)"
- From: Fabien TASSIN <tassin@eerie.fr>
- Msg-ID: <199701052347.AAA21297@solar5>
- Date: Mon, 6 Jan 1997 00:47:01 +0100
- Files: pod/pod2html.PL
-
- DOCUMENTATION
-
- Title: "tiny doc patches"
- From: Roderick Schertler
- Msg-ID: <23338.852394333@eeyore.ibcinc.com>
- Date: Sat, 04 Jan 1997 11:12:13 -0500
- Files: pod/perlapio.pod pod/perlnews.pod pod/perltoc.pod
-
- Title: "doc patch for defined on perlfunc.pod"
- From: Roderick Schertler
- Msg-ID: <pz91686ek1.fsf@eeyore.ibcinc.com>
- Date: 04 Jan 1997 21:28:30 -0500
- Files: pod/perlfunc.pod
-
- Title: "doc patch: perldsc"
- From: Roderick Schertler
- Msg-ID: <pzafqo6eo9.fsf@eeyore.ibcinc.com>
- Date: 04 Jan 1997 21:25:58 -0500
- Files: pod/perldsc.pod pod/perltoc.pod
-
- Title: "Re: constant function inlining"
- From: Roderick Schertler
- Msg-ID: <pzk9pp1b95.fsf@eeyore.ibcinc.com>
- Date: 07 Jan 1997 15:27:50 -0500
- Files: pod/perldiag.pod pod/perlsub.pod
-
- Title: "scalar caller doc fix"
- From: Roderick Schertler
- Msg-ID: <18245.852608060@eeyore.ibcinc.com>
- Date: Mon, 06 Jan 1997 22:34:20 -0500
- Files: pod/perlfunc.pod
-
- Title: "perlpod.pod possible patches"
- From: lvirden@cas.org (Larry W. Virden, x2487)
- Msg-ID: <9701070756.AA1185@cas.org>
- Date: Tue, 7 Jan 1997 07:56:30 -0500
- Files: pod/perlpod.pod
-
- Title: "Misc perlfunc updates"
- From: Tom Christiansen
- Files: pod/perlfunc.pod pod/perltoc.pod
-
-
-----------------
-Version 5.003_19
-----------------
-
-Lots of internal cleanup in this patch, especially plugged memory
-leaks when embedded Perl interpreters shut down and restart. The
-method cache is now invisible to user code. And there is a new test
-directory, "t/pragma".
-
-IMHO, this is Beta quality code.
-
-Here's a list of the more significant changes...
-
- CORE LANGUAGE CHANGES
-
- Title: "Make method cache invisible to user code"
- From: Chip Salzenberg
- Files: dump.c gv.c gv.h hv.c op.c perl.c pp_hot.c pp_sys.c sv.c
- toke.c
-
- Title: "Never parse "{m,s,y,tr,q{,q,w,x}}:{,:}" as package or label"
- From: Chip Salzenberg
- Files: toke.c
-
- CORE PORTABILITY
-
- Title: "Fix $^X under HP-UX"
- From: Chip Salzenberg
- Files: hints/hpux.sh toke.c
-
- Title: "New hints/hpux.sh"
- From: Jeff Okamoto
- Msg-ID: <199612312309.AA283393772@hpcc123.corp.hp.com>
- Date: Tue, 31 Dec 1996 15:09:32 -0800
- Files: hints/hpux.sh
-
- OTHER CORE CHANGES
-
- Title: "Fix segv when calling named closures"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Finish rationalizing "undef value" warnings"
- From: Chip Salzenberg
- Files: doop.c pp.c sv.c t/op/assignwarn.t
-
- Title: "Arrange for all "_<file" entries to be in %main::"
- From: Chip Salzenberg
- Files: gv.c lib/perl5db.pl
-
- Title: "Introduce CVf_NODEBUG flag"
- From: Gurusamy Sarathy
- Msg-ID: <199701012042.PAA25994@aatma.engin.umich.edu>
- Date: Wed, 01 Jan 1997 15:42:05 -0500
- Files: cv.h pp_hot.c
-
- Title: "Reword 'may be "0"' warning per Larry; fix its line number"
- From: Chip Salzenberg
- Files: op.c pod/perldiag.pod
-
- Title: "5.003_18: perl_{con,des}truct fixes"
- From: Doug MacEachern
- Msg-ID: <199701032042.PAA06766@postman.osf.org>
- Date: Fri, 03 Jan 1997 15:42:04 -0500
- Files: perl.c perl.h pod/perlembed.pod pod/perltoc.pod t/op/sysio.t
-
- Title: "Fix lost value from READLINE after TIEHANDLE"
- From: Gurusamy Sarathy
- Files: pp_hot.c sv.h
-
- Title: "Free memory of large lexical variables when leaving scope"
- From: Chip Salzenberg
- Files: scope.c
-
- TESTS
-
- Title: "Create t/pragma directory; populate with new and old"
- From: Paul Marquess
- Files: MANIFEST Makefile.SH t/TEST t/comp/use.t t/lib/locale.t
- t/op/overload.t t/op/use.t t/pragma/locale.t t/pragma/overload.t
- t/pragma/strict-refs t/pragma/strict-subs t/pragma/strict-vars
- t/pragma/strict.t t/pragma/subs.t t/pragma/warn-global
- t/pragma/warning.t
-
- Title: "New tests: comp/colon.t and op/assignwarn.t"
- From: Robin Barker <rmb@cise.npl.co.uk>
- Files: MANIFEST t/comp/colon.t t/op/assignwarn.t
-
- LIBRARY AND EXTENSIONS
-
- Title: "Make libs clean under '-w'"
- From: Jarkko Hietaniemi
- Files: lib/AutoSplit.pm lib/Devel/SelfStubber.pm lib/Env.pm
- lib/Math/Complex.pm lib/Pod/Functions.pm lib/Search/Dict.pm
- lib/SelfLoader.pm lib/Term/Complete.pm lib/chat2.pl
- lib/complete.pl lib/diagnostics.pm lib/ftp.pl lib/termcap.pl
- lib/validate.pl
-
- DOCUMENTATION
-
- Title: "Perlguts, version 28"
- From: Jeff Okamoto
- Msg-ID: <199701032110.AA102535846@hpcc123.corp.hp.com>
- Date: Fri, 3 Jan 1997 13:10:46 -0800
- Files: pod/perlguts.pod
-
- Title: "Re: perldelta, take 3"
- From: Tim Bunce
- Msg-ID: <9701031748.AA15335@toad.ig.co.uk>
- Date: Fri, 3 Jan 1997 17:48:46 +0000
- Files: pod/perlnews.pod
-
- Title: "Miscellaneous pod patches"
- From: Ralf S. Engelschall <rse@engelschall.com>
- Files: pod/Makefile pod/perldebug.pod pod/perlfunc.pod
- pod/perlguts.pod
-
- Title: "expanded flock() docs"
- From: Roderick Schertler
- Msg-ID: <4481.852337871@eeyore.ibcinc.com>
- Date: Fri, 03 Jan 1997 19:31:11 -0500
- Files: pod/perlfunc.pod
-
- Title: "Use Text::Wrap in buildtoc; run buildtoc"
- From: Ulrich Pfeifer
- Files: pod/buildtoc pod/perltoc.pod
-
- Title: "Remove obsolete perlovl.pod"
- From: Chip Salzenberg
- Files: MANIFEST plan9/mkfile pod/perlovl.pod vms/Makefile
- vms/descrip.mms
-
-
-----------------
-Version 5.003_18
-----------------
-
-Yet further down the road to 5.004....
-
- CORE LANGUAGE CHANGES
-
- Title: "Inherited overloading"
- From: Ilya Zakharevich
- Msg-ID: <199612291312.IAA02134@monk.mps.ohio-state.edu>
- Date: Sun, 29 Dec 1996 08:12:54 -0500 (EST)
- Files: gv.c lib/overload.pm perl.h sv.c sv.h t/op/overload.t
-
- Title: "Hide lexicals from C<use>d or C<require>d module (!)"
- From: Chip Salzenberg
- Files: pp_ctl.c
-
- Title: "Closures at file scope must be anonymous"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Warn on '{if,while} ($x = X)' where X is glob, readdir, or <FH>"
- From: Chip Salzenberg
- Files: op.c pod/perldiag.pod
-
- Title: "Warn on 'undef $x; $x OP 1' where OP is *=, /=, %=, or **="
- From: Chip Salzenberg
- Files: pp.c
-
- CORE PORTABILITY
-
- Title: "Ultrix setlocale() workaround"
- From: Chip Salzenberg
- Files: hints/ultrix_4.sh util.c
-
- OTHER CORE CHANGES
-
- Title: "Get rid of 'Leaked scalars'"
- From: Chip Salzenberg
- Files: cop.h gv.c op.c
-
- Title: "Don't forget $c in C<(($a,$b,$c)=(1,2))=(3,4,5)>"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Fix core dump on perl_construct()/perl_destruct() loop"
- From: Chip Salzenberg
- Files: perl.c
-
- Title: "Add missing syms to global.sym; update magic doc"
- From: Chip Salzenberg
- Files: global.sym pod/perlguts.pod
-
- TESTS
-
- Title: "Expanded locale.t and misc.t"
- From: Jarkko Hietaniemi
- Files: t/lib/locale.t t/lib/misc.t
-
- Title: "Expanded my.t"
- From: Chip Salzenberg
- Files: t/lib/my.t
-
- Title: "test harness for C<use x.xxxx>"
- From: Graham Barr
- Msg-ID: <32C76882.3F3C7999@tiuk.ti.com>
- Date: Mon, 30 Dec 1996 07:00:18 +0000
- Files: MANIFEST t/op/use.t
-
- Title: "More tests"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95.961229170736.15213M-100000@solaris.teleport.co
- Date: Sun, 29 Dec 1996 17:46:21 -0800 (PST)
- Files: t/op/each.t t/op/oct.t t/op/quotemeta.t t/op/rand.t
-
- LIBRARY AND EXTENSIONS
-
- Title: "Improving Config.pm"
- From: Tom Phoenix
- Msg-ID: <Pine.GSO.3.95.961230091244.13467L-100000@solaris.teleport.co
- Date: Mon, 30 Dec 1996 09:24:16 -0800 (PST)
- Files: configpm
-
- Title: "File::Copy under OS/2"
- From: Ilya Zakharevich
- Msg-ID: <199612280347.WAA00293@monk.mps.ohio-state.edu>
- Date: Fri, 27 Dec 1996 22:47:24 -0500 (EST)
- Files: lib/File/Copy.pm t/lib/filecopy.t
-
- DOCUMENTATION
-
- Title: "Updates to perllocale.pod"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Files: pod/perllocale.pod
-
- Title: "Locale-related pod patches, take 2"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03007800aeea9e488b36@[194.51.248.77]>
- Date: Sat, 28 Dec 1996 10:56:41 +0100
- Files: pod/perl.pod pod/perlform.pod pod/perlfunc.pod pod/perlop.pod
- pod/perlre.pod pod/perlsec.pod
-
- Title: "Re: perldiag.pod entry for "Scalar value @%s{%s} ...""
- From: Roderick Schertler
- Msg-ID: <2043.852051019@eeyore.ibcinc.com>
- Date: Tue, 31 Dec 1996 11:50:19 -0500
- Files: pod/perldiag.pod
-
-
-----------------
-Version 5.003_17
-----------------
-
-The rate of patches is slowing down.... I see 5.004 at the end of the
-tunnel! (Hey, what's that whistle?)
-
- CORE LANGUAGE CHANGES
-
- Title: "Support named closures"
- From: Chip Salzenberg
- Files: cv.h op.c perl.c pp.c pp_ctl.c pp_hot.c
-
- CORE PORTABILITY
-
- Title: "perl5.003_15 and Interactive Unix"
- From: win@in.rhein-main.de (Winfried Koenig)
- Msg-ID: <m0vd254-0004oKC@incom.rhein-main.de>
- Date: Thu, 26 Dec 1996 00:45:45 +0200 (EET)
- Files: hints/isc.sh pp_sys.c
-
- Title: "Suggest "usemymalloc='n'" for FreeBSD 2.*"
- From: rse@engelschall.com (Ralf S. Engelschall)
- Files: hints/freebsd.sh
-
- Title: "Minor OS/2 fixes"
- From: Ilya Zakharevich
- Msg-ID: <199612252105.QAA11890@monk.mps.ohio-state.edu>
- Date: Wed, 25 Dec 1996 16:05:42 -0500 (EST)
- Files: os2/os2ish.h pod/perlxstut.pod
-
- OTHER CORE CHANGES
-
- Title: "Fix {,un}tainting of $1 etc. when C<use locale>"
- From: Chip Salzenberg
- Files: mg.c sv.c
-
- Title: "Limit effects of "=pod" to a single file"
- From: Chip Salzenberg
- Files: toke.c
-
- TESTS
-
- Title: "New tests: op/method.t and op/locale.t"
- From: Ilya Zakharevich and Jarkko Hietaniemi
- Files: MANIFEST t/lib/locale.t t/op/method.t
-
- Title: "Test C< ()=() >"
- From: Chip Salzenberg
- Files: t/op/misc.t
-
- LIBRARY AND EXTENSIONS
-
- Title: "Refresh MakeMaker to 5.39"
- From: Andreas Koenig
- Files: lib/ExtUtils/Install.pm lib/ExtUtils/Liblist.pm
- lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
- lib/ExtUtils/Mksymlists.pm
-
- Title: "Newer debugger"
- From: Ilya Zakharevich
- Msg-ID: <199612261954.OAA12999@monk.mps.ohio-state.edu>
- Date: Thu, 26 Dec 1996 14:54:34 -0500 (EST)
- Files: lib/perl5db.pl
-
- DOCUMENTATION
-
- Title: "Perlguts, version 27"
- From: Jeff Okamoto
- Msg-ID: <199612250144.AA059528263@hpcc123.corp.hp.com>
- Date: Tue, 24 Dec 1996 17:44:23 -0800
- Files: pod/perlguts.pod
-
- Title: "perlpod.pod patch for _16"
- From: Kenneth Albanowski
- Msg-ID: <Pine.LNX.3.93.961224225906.337B-100000@kjahds.com>
- Date: Tue, 24 Dec 1996 23:00:10 -0500 (EST)
- Files: pod/perlpod.pod
-
- Title: "tiny perllocale.pod diff for _16"
- From: Jarkko Hietaniemi
- Msg-ID: <199612261306.PAA21161@alpha.hut.fi>
- Date: Thu, 26 Dec 1996 15:06:04 +0200 (EET)
- Files: pod/perllocale.pod
-
-
-----------------
-Version 5.003_16
-----------------
-
-This patch is all bug fixes, library updates, and documentation
-updates. We'll get to 5.004 RSN, I promise. :-)
-
- CORE LANGUAGE CHANGES
-
- Title: "Fix closures that are not in subroutines"
- From: Chip Salzenberg
- Files: op.c
-
- CORE PORTABILITY
-
- Title: "_13: patches for unicos/unicosmk"
- From: Dean Roehrich
- Msg-ID: <199612202038.OAA22805@poplar.cray.com>
- Date: Fri, 20 Dec 1996 14:38:50 -0600
- Files: Configure MANIFEST hints/unicos.sh hints/unicosmk.sh
-
- OTHER CORE CHANGES
-
- Title: "Fix 'foreach(@ARGV) { while (<>) { push @p,$_ } }'"
- From: Chip Salzenberg
- Files: cop.h pp_hot.c scope.c
-
- Title: "Eliminate warnings from C< undef $x; $x OP= "foo" >"
- From: Chip Salzenberg
- Files: doop.c pp.c pp.h pp_hot.c
-
- Title: "Try again to improve method caching"
- From: Ilya Zakharevich
- Msg-ID: <199612240113.UAA09487@monk.mps.ohio-state.edu>
- Date: Mon, 23 Dec 1996 20:13:56 -0500 (EST)
- Files: gv.c sv.c
-
- Title: "Be more careful about 'o' magic memory management"
- From: Chip Salzenberg
- Files: mg.c sv.c
-
- Title: "Fix bad pointer refs when localized object loses magic"
- From: Chip Salzenberg
- Files: scope.c
-
- LIBRARY AND EXTENSIONS
-
- Title: "Refresh CPAN to 1.09"
- From: Andreas Koenig
- Files: lib/CPAN.pm
-
- Title: "Refresh Net::Ping to 2.02"
- From: Russell Mosemann <mose@ccsn.edu>
- Files: lib/Net/Ping.pm
-
- Title: "Refresh IO to 1.14"
- From: Graham Barr
- Files: MANIFEST ext/IO/IO.xs ext/IO/README ext/IO/lib/IO/File.pm
- ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Pipe.pm
- ext/IO/lib/IO/Seekable.pm ext/IO/lib/IO/Select.pm
- ext/IO/lib/IO/Socket.pm t/lib/io_dup.t t/lib/io_pipe.t
- t/lib/io_sel.t t/lib/io_sock.t t/lib/io_tell.t
- t/lib/io_udp.t t/lib/io_xs.t
-
- BUILD PROCESS AND UTILITIES
-
- Title: "Don't recurse into subdirs twice on 'make realclean'"
- From: Chip Salzenberg
- Files: Makefile.SH
-
- Title: "Use root EXTERN.h when compiling x2p/malloc.c."
- From: Paul Marquess
- Files: x2p/Makefile.SH
-
- Title: "Fix compilation errors when malloc.c used for x2p"
- From: Robin Barker <rmb@cise.npl.co.uk>
- Files: malloc.c
-
- DOCUMENTATION
-
- Title: "Edit INSTALL to describe new binary compat setup"
- From: Chip Salzenberg
- Files: INSTALL
-
- Title: "Update to perllocale.pod"
- From: Jarkko Hietaniemi
- Files: pod/perllocale.pod
-
-
-----------------
-Version 5.003_15
-----------------
-
-As soon as I posted 5.003_14, I found a fatal error in it. :-(
-
-This release is strictly a bug fix -- it removes some function caching
-changes that were supposed to be improvements, but weren't.
-
-
-----------------
-Version 5.003_14
-----------------
-
-We seem to have achieved "release candidate" status.
-
- CORE LANGUAGE CHANGES
-
- Title: "Eliminate support for {if,unless,while,until} BLOCK BLOCK"
- From: Chip Salzenberg
- Files: perly.c perly.c.diff perly.y toke.c
-
- Title: "Taint $x after $x =~ s/pat/xyz/ if pat or xyz is tainted by locale"
- From: Chip Salzenberg
- Files: cop.h mg.c pp_ctl.c pp_hot.c
-
- Title: "Complete support for modifying undefined array members in foreach"
- From: Chip Salzenberg
- Files: global.sym mg.c perl.h pp.c pp_hot.c proto.h sv.c
-
- OTHER CORE CHANGES
-
- Title: "patch for regex bug: (x|x){n}"
- From: Gurusamy Sarathy
- Msg-ID: <199612210259.VAA10170@aatma.engin.umich.edu>
- Date: Fri, 20 Dec 1996 21:59:22 -0500
- Files: regexec.c
-
- Title: "Bug in debugger with import manipulations"
- From: Ilya Zakharevich
- Msg-ID: <199612231037.FAA08617@monk.mps.ohio-state.edu>
- Date: Mon, 23 Dec 1996 05:37:48 -0500 (EST)
- Files: pp_hot.c
-
- Title: "Import and dynamic methods"
- From: Ilya Zakharevich
- Msg-ID: <199612230645.BAA08378@monk.mps.ohio-state.edu>
- Date: Mon, 23 Dec 1996 01:45:37 -0500 (EST)
- Files: gv.c hv.c sv.c
-
- Title: "malloc.c patch"
- From: Ilya Zakharevich
- Msg-ID: <199612220748.CAA07164@monk.mps.ohio-state.edu>
- Date: Sun, 22 Dec 1996 02:48:58 -0500 (EST)
- Files: malloc.c
-
- Title: "sv_gets patch"
- From: Ilya Zakharevich
- Msg-ID: <199612220824.DAA07235@monk.mps.ohio-state.edu>
- Date: Sun, 22 Dec 1996 03:24:04 -0500 (EST)
- Files: pp_hot.c
-
- Title: "pos $str patch"
- From: Ilya Zakharevich
- Msg-ID: <199612220831.DAA07247@monk.mps.ohio-state.edu>
- Date: Sun, 22 Dec 1996 03:31:21 -0500 (EST)
- Files: mg.c pp_hot.c t/op/pat.t
-
- Title: "Prevent warnings when STDCHAR is unsigned"
- From: Chip Salzenberg
- Files: perlio.c perlio.h
-
- PORTABILITY
-
- Title: "Fix bugs in bincompat3 usage"
- From: Chip Salzenberg
- Files: perl.h perl_exp.SH
-
- Title: "Support shared libperl on SunOS"
- From: Ulrich Pfeifer
- Files: Makefile.SH
-
- Title: "Configure on OS/2"
- From: Ilya Zakharevich
- Msg-ID: <199612202325.SAA05505@monk.mps.ohio-state.edu>
- Date: Fri, 20 Dec 1996 18:25:30 -0500 (EST)
- Files: Configure
-
- Title: "Fixes for Interactive Unix"
- From: win@in.rhein-main.de (Winfried Koenig)
- Msg-ID: <m0vbeNO-00003WC@incom.rhein-main.de>
- Date: Sun, 22 Dec 96 05:14 EET
- Files: hints/isc.sh op.c pp_sys.c universal.c
-
- Title: "Use "proto" instead of "_" in sdbm.h"
- From: Chip Salzenberg
- Files: ext/SDBM_File/sdbm/sdbm.h
-
- Title: "VMS patches to 5.003_13"
- From: Charles Bailey
- Msg-ID: <01IDBYYFYPIS002ASE@hmivax.humgen.upenn.edu>
- Date: Mon, 23 Dec 1996 01:26:47 -0500 (EST)
- Files: deb.c ext/POSIX/POSIX.xs gv.c lib/File/Copy.pm mg.c perl.c
- perl.h proto.h sv.c t/lib/filecopy.t taint.c toke.c util.c
- vms/Makefile vms/config.vms vms/descrip.mms
- vms/gen_shrfls.pl vms/genconfig.pl vms/genopt.com
- vms/perly_c.vms vms/perly_h.vms vms/test.com vms/vms.c
- vms/vms_yfix.pl
-
- UTILITIES, LIBRARY, AND EXTENSIONS
-
- Title: "Remove libnet"
- From: Chip Salzenberg
- Files: MANIFEST pod/perlmod.pod
-
- Title: "Refresh CPAN module to 1.08"
- From: Chip Salzenberg
- Files: lib/CPAN.pm lib/CPAN/FirstTime.pm
-
- Title: "Refresh ExtUtils::Manifest to version 1.28"
- From: Andreas Koenig
- Files: lib/ExtUtils/Manifest.pm
-
- Title: "Update IO->VERSION() to 1.1201 for CPAN's sake"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/Handle.pm lib/IO/Handle.pm
-
- Title: "Remodel File::Copy."
- From: Chip Salzenberg
- Files: lib/File/Copy.pm
-
- Title: "dumb bug in User::pwent.pm"
- From: Tom Christiansen
- Msg-ID: <199612201145.EAA27860@mox.perl.com>
- Date: Fri, 20 Dec 1996 04:45:37 -0700
- Files: lib/User/pwent.pm
-
- DOCUMENTATION
-
- Title: "Better support for =for"
- From: Kenneth Albanowski
- Msg-ID: <Pine.LNX.3.93.961220163747.298T-100000@kjahds.com>
- Date: Fri, 20 Dec 1996 16:43:35 -0500 (EST)
- Files: lib/Pod/Text.pm pod/pod2latex.PL pod/pod2man.PL
-
- Title: "perllocale.pod -- second draft"
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03007800aee1923e30a2@[194.51.248.68]>
- Date: Sat, 21 Dec 1996 15:00:50 +0100
- Files: pod/perllocale.pod
-
- Title: "Perlguts, version 26"
- From: Jeff Okamoto
- Msg-ID: <199612201943.AA048111018@hpcc123.corp.hp.com>
- Date: Fri, 20 Dec 1996 11:43:38 -0800
- Files: pod/perlguts.pod
-
- Title: "Update pod/Makefile; s/perli18n/perllocale/"
- From: Chip Salzenberg
- Files: ext/POSIX/POSIX.pod lib/I18N/Collate.pm pod/Makefile
- pod/perl.pod pod/perlmod.pod pod/perlnews.pod pod/roffitall
-
- Title: "obstruct pod2man doc tweaks"
- From: Roderick Schertler
- Msg-ID: <3923.851106237@eeyore.ibcinc.com>
- Date: Fri, 20 Dec 1996 13:23:57 -0500
- Files: lib/Class/Template.pm lib/Time/tm.pm
-
-
-----------------
-Version 5.003_13
-----------------
-
-The watchword here is "synchronization." There were a couple of
-show-stopper bugs in 5.003_12, so I'm issuing this patch to bring
-everyone up to a common working base.
-
- CORE LANGUAGE CHANGES
-
- Title: "Disallow labels named q, qq, qw, qx, s, y, and tr"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Make evals' lexicals visible to nested evals"
- From: Chip Salzenberg
- Files: pp_ctl.c
-
- OTHER CORE CHANGES
-
- Title: "Fix core dump bug with anoncode"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Allow DESTROY to make refs to dying objects"
- From: Chip Salzenberg
- Files: sv.c
-
- PORTABILITY
-
- Title: "Add missing backslash in Configure"
- From: Chip Salzenberg
- Files: Configure
-
- UTILITIES, LIBRARY, AND EXTENSIONS
-
- Title: "Include libnet-1.01 instead of old Net::FTP"
- From: Graham Barr
- Files: MANIFEST lib/Net/Cmd.pm lib/Net/Domain.pm
- lib/Net/DummyInetd.pm lib/Net/FTP.pm lib/Net/NNTP.pm
- lib/Net/Netrc.pm lib/Net/POP3.pm lib/Net/SMTP.pm
- lib/Net/SNPP.pm lib/Net/Socket.pm lib/Net/Telnet.pm
- lib/Net/Time.pm pod/perlmod.pod
-
- Title: "Use binmode when doing binary FTP"
- From: Ilya Zakharevich
- Files: lib/Net/FTP.pm
-
- Title: "Re: Open3.pm tries to close unopened file handle"
- From: Roderick Schertler
- Msg-ID: <pzloavmd9h.fsf@eeyore.ibcinc.com>
- Date: 18 Dec 1996 22:19:54 -0500
- Files: MANIFEST lib/IPC/Open2.pm lib/IPC/Open3.pm lib/open2.pl
- lib/open3.pl pod/perldiag.pod pod/perlfunc.pod t/lib/open2.t
- t/lib/open3.t
-
- Title: "Long-standing problem in Socket module"
- From: Spider Boardman
- Msg-ID: <199612190418.XAA07291@Orb.Nashua.NH.US>
- Date: Wed, 18 Dec 1996 23:18:14 -0500
- Files: Configure Porting/Glossary config_H config_h.SH
- ext/Socket/Socket.pm ext/Socket/Socket.xs
-
- Title: "flock() constants"
- From: Roderick Schertler
- Msg-ID: <26669.850977437@eeyore.ibcinc.com>
- Date: Thu, 19 Dec 1996 01:37:17 -0500
- Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs pod/perlfunc.pod
-
- Title: "Re: find2perl . -xdev BROKEN still"
- From: Roderick Schertler
- Msg-ID: <pzvi9yig3h.fsf@eeyore.ibcinc.com>
- Date: 19 Dec 1996 12:44:34 -0500
- Files: lib/File/Find.pm lib/find.pl lib/finddepth.pl
-
- DOCUMENTATION
-
- Title: "small doc tweaks for _12"
- From: Roderick Schertler
- Msg-ID: <1826.851011557@eeyore.ibcinc.com>
- Date: Thu, 19 Dec 1996 11:05:57 -0500
- Files: lib/UNIVERSAL.pm pod/perldiag.pod pod/perltie.pod
-
- Title: "Re: missing E<> POD directive in perlpod.pod"
- From: Roderick Schertler
- Msg-ID: <pzwwueimak.fsf@eeyore.ibcinc.com>
- Date: 19 Dec 1996 10:30:43 -0500
- Files: pod/perlpod.pod pod/pod2html.PL
-
-
-----------------
-Version 5.003_12
-----------------
-
-This patch is huge. A multitude of bug fixes, new modules (especially
-CPAN and Net::FTP), a couple of new Configure variables, updated
-docs... it's a long list. And speaking of lists, here's a list of
-the more significant changes in 5.003_12:
-
- CORE LANGUAGE CHANGES
-
- Title: "Support C<delete @hash{@keys}>"
- From: Chip Salzenberg
- Files: op.c op.h opcode.pl pod/perldiag.pod pod/perlfunc.pod pp.c
- t/op/delete.t
-
- Title: "Autovivify scalars"
- From: Chip Salzenberg
- Files: dump.c op.c op.h pp.c pp_hot.c
-
- Title: "Allow any word, including keyword, as label"
- From: Chip Salzenberg
- Files: toke.c
-
- OTHER CORE CHANGES
-
- Title: "Allow assignment to empty array values during foreach()"
- From: Chip Salzenberg
- Files: cop.h global.sym mg.c op.c perl.h pp_hot.c proto.h sv.c
-
- Title: "Fix nested closures"
- From: Chip Salzenberg
- Files: op.c opcode.pl pp.c pp_ctl.c pp_hot.c
-
- Title: "Fix core dump on auto-vivification"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Fix core dump on C<open $undef_var, "X">"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "Fix -T/-B on globs and globrefs"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "Fix memory management of $`, $&, and $'"
- From: Chip Salzenberg
- Files: pp_hot.c regexec.c
-
- Title: "Fix paren matching during backtracking"
- From: Chip Salzenberg
- Files: regexec.c
-
- Title: "Fix memory leak and std{in,out,err} death in perl_{con,de}str
- From: Chip Salzenberg
- Files: miniperlmain.c perl.c perl.h sv.c
-
- Title: "Discard garbage bytes at end of prototype()"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Fix local($pack::{foo})"
- From: Chip Salzenberg
- Files: global.sym pp.c pp_hot.c proto.h scope.c
-
- Title: "Fix for AmigaOS - inplace operation"
- From: Norbert Pueschel
- Msg-ID: <77724601@Armageddon.meb.uni-bonn.de>
- Date: Sun, 08 Dec 1996 15:33:00 +0100
- Files: doio.c
-
- Title: "Disable warn, die, and parse hooks _before_ global destruction
- From: Chip Salzenberg
- Files: perl.c
-
- Title: "Re: Bug in formline "
- From: Gurusamy Sarathy
- Msg-ID: <199612081958.OAA26025@aatma.engin.umich.edu>
- Date: Sun, 08 Dec 1996 14:58:32 -0500
- Files: pp_ctl.c
-
- Title: "Fix C<@a = ($a,$b,$c,$d) = (1,2)>"
- From: Chip Salzenberg
- Files: pp_hot.c
-
- Title: "Fix %ENV assignment when environment starts out empty"
- From: Chip Salzenberg
- Files: hv.c
-
- Title: "Properly support and document newRV{,_inc,_noinc}"
- From: Chip Salzenberg
- Files: global.sym pod/perlguts.pod sv.c sv.h
-
- Title: "Support SvREADONLY on arrays"
- From: Chip Salzenberg
- Files: av.c
-
- Title: "Allow lvalue pos inside recursive function"
- From: Chip Salzenberg
- Files: op.c pp.c pp_ctl.c pp_hot.c
-
- PORTABILITY
-
- Title: "Eliminate PerlIO warnings when setting cnt to -1"
- From: Chip Salzenberg
- Files: perlio.c
-
- Title: "Make $privlib contents compatible with 5.003"
- From: Chip Salzenberg
- Files: INSTALL ext/Opcode/Safe.pm installperl lib/FileHandle.pm
- lib/Test/Harness.pm
-
- Title: "Support $bincompat3 config variable; update metaconfig units"
- From: Chip Salzenberg
- Files: Configure MANIFEST compat3.sym config_h.SH embed.pl global.sym
- old_embed.pl old_global.sym old_perl_exp.SH perl_exp.SH
-
- Title: "Look for gettimeofday() in Configure"
- From: John Hughes <john@AtlanTech.COM>
- Msg-ID: <01BBE77A.F6F37F80@malvinas.AtlanTech.COM>
- Date: Wed, 11 Dec 1996 15:49:57 +0100
- Files: Configure config_H config_h.SH pp.c
-
- Title: "Make $startperl a relative path if people want portable scrip
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Homogenize use of "eval exec" hack"
- From: Chip Salzenberg
- Files: Porting/Glossary eg/README eg/nih eg/sysvipc/ipcmsg
- eg/sysvipc/ipcsem eg/sysvipc/ipcshm lib/diagnostics.pm
- makeaperl.SH pod/checkpods.PL pod/perlrun.pod
- pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL
- pod/pod2text.PL utils/c2ph.PL utils/h2ph.PL utils/h2xs.PL
- utils/perlbug.PL utils/perldoc.PL utils/pl2pm.PL x2p/a2py.c
- x2p/find2perl.PL x2p/s2p.PL
-
- Title: "LynxOS support"
- From: seibert@Lynx.COM (Greg Seibert)
- Msg-ID: <m0vYEsY-0000IZC@kzinti.lynx.com>
- Date: Thu, 12 Dec 1996 09:25:00 PST
- Files: Configure MANIFEST hints/lynxos.sh t/op/stat.t
-
- Title: "In Linux hints, set suidsafe=no and dosuid=yes"
- From: Chip Salzenberg
- Files: hints/linux.sh
-
- Title: "5.003_11 on UnixWare 2.1.1 - Only one small UnixWare buglet"
- From: aburlison@cix.compulink.co.uk (Alan Burlison)
- Msg-ID: <memo.453720@cix.compulink.co.uk>
- Date: Wed, 11 Dec 96 18:34 GMT0
- Files: hints/svr4.sh
-
- Title: "Re: db-recno.t failures with _11 on Freebsd 2.1-stable"
- From: Roderick Schertler
- Msg-ID: <pzohg0r5tr.fsf@eeyore.ibcinc.com>
- Date: 11 Dec 1996 18:58:56 -0500
- Files: INSTALL hints/freebsd.sh
-
- Title: "OS/2 updates from Ilya"
- From: Ilya Zakharevich
- Files: README.os2 os2/Changes os2/Makefile.SHs os2/os2.c os2/os2ish.h
-
- Title: "VMS patches to 5.003_11"
- From: Charles Bailey
- Msg-ID: <01ICTR32LCZG001A1D@hmivax.humgen.upenn.edu>
- Date: Mon, 09 Dec 1996 23:16:10 -0500 (EST)
- Files: MANIFEST regexec.c t/lib/filehand.t util.c vms/*
-
- TESTING
-
- Title: "recurse recurse recurse ..."
- From: Jarkko Hietaniemi
- Msg-ID: <199612092144.XAA29025@alpha.hut.fi>
- Date: Mon, 9 Dec 1996 23:44:27 +0200 (EET)
- Files: MANIFEST t/op/recurse.t
-
- UTILITIES, LIBRARY, AND EXTENSIONS
-
- Title: "Add CPAN and Net::FTP"
- From: Chip Salzenberg
- Files: MANIFEST lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
- lib/Net/FTP.pm lib/Net/Netrc.pm lib/Net/Socket.pm
- pod/perlmod.pod
-
- Title: "Please update Text::Wrap and Text::Tabs"
- From: David Muir Sharnoff <muir@idiom.com>
- Msg-ID: <199612180659.WAA24957@idiom.com>
- Date: Tue, 17 Dec 1996 22:59:59 -0800 (PST)
- Files: lib/Text/Tabs.pm lib/Text/Wrap.pm
-
- Title: "Add File::Compare"
- From: Nick Ing-Simmons
- Msg-ID: <199612161844.SAA02152@pluto>
- Date: Mon, 16 Dec 1996 18:44:59 GMT
- Files: MANIFEST lib/File/Compare.pm pod/perlmod.pod
-
- Title: "Add Tie::RefHash"
- From: Gurusamy Sarathy
- Msg-ID: <199612152358.SAA28665@aatma.engin.umich.edu>
- Date: Sun, 15 Dec 1996 18:58:08 -0500
- Files: MANIFEST lib/Tie/RefHash.pm pod/perlmod.pod
-
- Title: "Put "splain" in utils."
- From: Chip Salzenberg
- Files: Makefile.SH installperl utils/Makefile utils/splain.PL
-
- Title: "Some h2ph fixes"
- From: Jeff Okamoto
- Msg-ID: <199612131934.AA289845652@hpcc123.corp.hp.com>
- Date: Fri, 13 Dec 1996 11:34:12 -0800
- Files: utils/h2ph.PL
-
- Title: "xsubpp patch to add #line"
- From: Nick Ing-Simmons
- Msg-ID: <199612162153.VAA03590@ni-s.u-net.com>
- Date: Mon, 16 Dec 1996 21:53:56 GMT
- Files: lib/ExtUtils/xsubpp
-
- Title: "Re: Proposed addition to File::Copy: move"
- From: Charles Bailey
- Msg-ID: <01ICZBN0LRC8001A1D@hmivax.humgen.upenn.edu>
- Date: Sat, 14 Dec 1996 00:27:29 -0500 (EST)
- Files: lib/File/Copy.pm t/lib/filecopy.t
-
- Title: "DB_File 1.09 patch"
- From: Paul Marquess
- Msg-ID: <9612181037.AA10123@claudius.bfsec.bt.co.uk>
- Date: Wed, 18 Dec 96 10:37:58 GMT
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
-
- Title: "Debugger update"
- From: Ilya Zakharevich
- Msg-ID: <199612111038.FAA24363@monk.mps.ohio-state.edu>
- Date: Wed, 11 Dec 1996 05:38:28 -0500 (EST)
- Files: lib/perl5db.pl
-
- DOCUMENTATION
-
- Title: "Update pods: perldelta -> perlnews, perli18n -> perllocale"
- From: Tom Christiansen and Dominic Dunlop
- Files: MANIFEST pod/perl.pod pod/perldelta.pod pod/perli18n.pod
- pod/perlnews.pod
-
- Title: "perltoot.pod"
- From: Tom Christiansen
- Msg-ID: <199612091444.HAA09947@toy.perl.com>
- Date: Mon, 09 Dec 1996 07:44:10 -0700
- Files: MANIFEST pod/perltoot.pod
-
- Title: "Perlguts, version 25"
- From: Jeff Okamoto
- Msg-ID: <199612061940.AA055461228@hpcc123.corp.hp.com>
- Date: Fri, 6 Dec 96 11:40:27 PST
- Files: pod/perlguts.pod
-
- Title: "pod/perlipc.pod patch"
- From: d-lewart@uiuc.edu (Daniel S. Lewart)
- Msg-ID: <199612090910.CAA20906@mox.perl.com>
- Date: Mon, 9 Dec 96 3:10:02 CST
- Files: pod/perlipc.pod
-
- Title: "pod patches for English errors"
- From: Steve Kelem <steve.kelem@xilinx.com>
- Msg-ID: <24616.850167191@castor>
- Date: Mon, 09 Dec 1996 13:33:11 -0800
- Files: pod/*.pod
-
- Title: "Misc doc updates"
- From: Tom Christiansen
- Msg-ID: <199612150156.SAA12506@mox.perl.com>
- Date: Sat, 14 Dec 1996 18:56:33 -0700
- Files: pod/*
-
-----------------
-Version 5.003_11
-----------------
-
-This patch is (still) closing in on 5.004. Nothing dramatic, lots of
-value.
-
- CORE LANGUAGE CHANGES
-
- Title: "Fix precedence problems with subs as uniops or listops"
- From: Chip Salzenberg
- Files: perly.c perly.c.diff perly.h perly.y
-
- Title: "Don't reset $. on open()"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "Support *glob{IO} (eventually deprecate *glob{FILEHANDLE})"
- From: Chip Salzenberg
- Files: pod/perlref.pod pp_hot.c sv.c
-
- Title: "Don't let expression context force return context"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Properly convert "1E2" et al to IV/UV"
- From: Chip Salzenberg
- Files: doio.c sv.c
-
- Title: "Fix modulo operator in UV realm"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Fix stat(_) after stat(HANDLE)"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "Fix: s/// and "$x =~ $y" under 'use locale'"
- From: Chip Salzenberg
- Files: op.c toke.c
-
- OTHER CORE CHANGES
-
- Title: "Eliminate spurious warning when splicing undefs"
- From: Chip Salzenberg
- Files: pp.c sv.h
-
- Title: "Eliminate spurious warning from "x=" operator"
- From: Chip Salzenberg
- Files: op.c
-
- Title: "Fix line numbers near control structures"
- From: Chip Salzenberg
- Files: op.c perly.c perly.c.diff perly.y proto.h
-
- Title: "Don't let scalar unpack() underflow stack"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Fix core dump from precedence bug in "@foo" warning"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Move die() to utils.c; add varargs hack to croak()"
- From: Chip Salzenberg
- Files: pp_ctl.c util.c
-
- Title: "Avoid memcmp() for magnitude test if it thinks char is signed"
- From: Chip Salzenberg
- Files: Configure config_H config_h.SH doop.c
- ext/SDBM_File/sdbm/pair.c ext/SDBM_File/sdbm/sdbm.h handy.h
- hv.c perl.h pp_hot.c proto.h regexec.c sv.c toke.c util.c
-
- Title: "Less malloc in magic"
- From: Chip Salzenberg
- Files: mg.c
-
- Title: "Re: 5.003_09: PADTMP fix"
- From: Ilya Zakharevich
- Msg-ID: <199611281150.GAA06884@monk.mps.ohio-state.edu>
- Date: Thu, 28 Nov 1996 06:50:58 -0500 (EST)
- Files: pod/perlguts.pod
-
- Title: "Fully paramaterize locales; disable all if NO_LOCALE"
- From: Chip Salzenberg
- Files: ext/POSIX/POSIX.xs op.c perl.h pp.c pp_sys.c sv.c util.c
-
- PORTABILITY AND TESTING
-
- Title: "Bitwise op fix for Alpha"
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "hints/dgux.sh update"
- From: Roderick Schertler
- Msg-ID: <24178.849309616@eeyore.ibcinc.com>
- Date: Fri, 29 Nov 1996 18:20:16 -0500
- Files: hints/dgux.sh
-
- Title: "BUG in hints/hpux.sh"
- From: Jeff McDougal <jmcdo@cris.com>
- Msg-ID: <32A42C11.7FA2@cris.com>
- Date: Tue, 03 Dec 1996 08:33:05 -0500
- Files: hints/hpux.sh
-
- Title: "VMS patches for 5.003_10"
- From: Charles Bailey
- Msg-ID: <01ICMALO8NMS001A1D@hmivax.humgen.upenn.edu>
- Date: Wed, 04 Dec 1996 16:40:12 -0500 (EST)
- Files: EXTERN.h INTERN.h old_perl_exp.SH perl.c perl.h perl_exp.SH
- pp.c pp_ctl.c pp_sys.c proto.h sv.c toke.c util.c
- utils/perldoc.PL vms/config.vms vms/descrip.mms
- vms/gen_shrfls.pl vms/genconfig.pl vms/vmsish.h
-
- Title: "_10+ under OS/2"
- From: Ilya Zakharevich
- Msg-ID: <199612011107.GAA10805@monk.mps.ohio-state.edu>
- Date: Sun, 1 Dec 1996 06:07:19 -0500 (EST)
- Files: malloc.c os2/diff.configure
-
- LIBRARY AND EXTENSIONS
-
- Title: "{in,ob}structive pods"
- From: Tom Christiansen
- Msg-ID: <199611301652.JAA24201@toy.perl.com>
- Date: Sat, 30 Nov 1996 09:52:57 -0700
- Files: MANIFEST lib/Class/Template.pm lib/File/stat.pm
- lib/Net/hostent.pm lib/Net/netent.pm lib/Net/protoent.pm
- lib/Net/servent.pm lib/Time/gmtime.pm lib/Time/localtime.pm
- lib/Time/tm.pm lib/User/grent.pm lib/User/pwent.pm
-
- Title: "FileHandle that 'ISA' IO::File"
- From: Nick Ing-Simmons
- Msg-ID: <199612021718.RAA04416@pluto>
- Date: Mon, 2 Dec 1996 17:18:02 GMT
- Files: MANIFEST lib/FileHandle.pm
-
- Title: "Make IO::File::import use its parameters"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/File.pm
-
- Title: "10+ debugger patch"
- From: Ilya Zakharevich
- Msg-ID: <199612011137.GAA10864@monk.mps.ohio-state.edu>
- Date: Sun, 1 Dec 1996 06:37:31 -0500 (EST)
- Files: lib/perl5db.pl perl.c pod/perldebug.pod
-
- Title: "Don't call CORE::close in file handle DESTROY method"
- From: Chip Salzenberg
- Files: ext/IO/lib/IO/Handle.pm
-
- Title: "Re: Namespace cleanup: Does SDBM need binary compatibility?"
- From: Hallvard B Furuseth
- Msg-ID: <199612031445.PAA19056@bombur2.uio.no>
- Date: Tue, 3 Dec 1996 15:45:27 +0100 (MET)
- Files: ext/SDBM_File/sdbm/pair.h ext/SDBM_File/sdbm/sdbm.3
-
- Title: "DB_File 1.07"
- From: Paul Marquess
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs t/lib/db-btree.t
- t/lib/db-recno.t
-
- Title: "DB_File 1.08"
- From: Paul Marquess
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
-
-
-----------------
-Version 5.003_10
-----------------
-
-This patch is closing in on 5.004. It contains lots of small and
-valuable changes, but nothing dramatic.
-
- CORE LANGUAGE CHANGES
-
- Title: "Allow &{sub {...}} without warning"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Make parens optional on [gs]ethost and [gs]et{pw,gr} functions
- From: John L. Allen <allen@gateway.grumman.com>
- Files: toke.c
-
- Title: "Fix syntax error with "$x [0]" and "$x {y}" and "@x {y}""
- From: Chip Salzenberg
- Files: toke.c
-
- OTHER CORE CHANGES
-
- Title: "Fix regex matching of chars with high bit set"
- From: Chip Salzenberg
- Files: regexec.c
-
- Title: "Hash key memory corruption fix and naming cleanup"
- From: Chip Salzenberg
- Files: hv.c hv.h perl.h
-
- Title: "Undo broken perf. patch (PADTMP stealing)"
- From: Chip Salzenberg
- Files: sv.c
-
- Title: "Make SV unstudied in sv_gets()"
- From: Chip Salzenberg
- Files: sv.c
-
- Title: "Better support for UVs"
- From: Paul Marquess
- Files: global.sym old_global.sym perl.h pp.c pp.h proto.h sv.c sv.h
-
- Title: "Minor locale cleanups"
- (Accept "POSIX" locale as standard like "C". Reset locale to
- 'C' when testing strtod() in t/lib/posix.t.)
- From: Chip Salzenberg
- Files: t/lib/posix.t util.c
-
- Title: "Always taint result of sprintf() on float"
- From: Chip Salzenberg
- Files: doop.c
-
- Title: "Fix spurious warning from bitwise string ops"
- From: Chip Salzenberg
- Files: doop.c
-
- Title: "Eliminate warning on {,sys}read(,$newvar,)"
- From: Chip Salzenberg
- Files: doop.c pp_sys.c
-
- Title: "Don't call fcntl(fileno(rsfp)) if !rsfp"
- From: Chip Salzenberg
- Files: perl.c
-
- Title: "Save message when calling __DIE__ hook"
- From: Chip Salzenberg
- Files: pp_ctl.c
-
- Title: "Namespace cleanup"
- From: Chip Salzenberg
- Files: global.sym old_global.sym perl.h
-
- Title: "Modify perl_exp.SH; create old_perl_exp.SH; document old_*"
- From: Chip Salzenberg
- Files: Configure INSTALL MANIFEST old_perl_exp.SH perl_exp.SH
-
- PORTABILITY
-
- Title: "Reliable signal patch"
- From: Kenneth Albanowski
- Msg-ID: <Pine.LNX.3.93.961126053209.294J-100000@kjahds.com>
- Date: Tue, 26 Nov 1996 05:40:50 -0500 (EST)
- Files: global.sym mg.c old_global.sym perl.h pp_sys.c proto.h util.c
-
- Title: "Emulate missing flock() with either fcntl() or lockf()"
- From: Chip Salzenberg
- Files: pp_sys.c
-
- Title: "3_09: minor patches for OS/2"
- From: Ilya Zakharevich
- Msg-ID: <199611270830.DAA04985@monk.mps.ohio-state.edu>
- Date: Wed, 27 Nov 1996 03:30:05 -0500 (EST)
- Files: doio.c global.sym malloc.c old_global.sym os2/Makefile.SHs
- os2/OS2/ExtAttr/Makefile.PL os2/OS2/PrfDB/Makefile.PL
- os2/OS2/Process/Makefile.PL os2/OS2/REXX/Makefile.PL
- os2/os2.c os2/os2ish.h perl.h
-
- Title: "Re: 5.003_09 and QNX"
- From: nort@bottesini.harvard.edu (Norton Allen)
- Msg-ID: <9611271836.AA14460@bottesini.harvard.edu>
- Date: Wed, 27 Nov 96 13:36:06 est
- Files: Configure MANIFEST README.qnx hints/qnx.sh qnx/ar qnx/cpp
- t/TEST toke.c util.c x2p/proto.h
-
- Title: "Re: updated patch on the sysread, syswrite for VMS"
- From: Charles Bailey
- Msg-ID: <01ICB648K2XG001A1D@hmivax.humgen.upenn.edu>
- Date: Tue, 26 Nov 1996 17:28:23 -0500 (EST)
- Files: t/op/sysio.t
-
- LIBRARY AND EXTENSIONS
-
- Title: "Minor patch to debugger"
- From: Ilya Zakharevich
- Msg-ID: <199611290533.AAA08053@monk.mps.ohio-state.edu>
- Date: Fri, 29 Nov 1996 00:33:49 -0500 (EST)
- Files: lib/perl5db.pl
-
- Title: "AutoLoader::AUTOLOAD optimization"
- From: Nick Ing-Simmons
- Msg-ID: <199611231954.TAA09921@ni-s.u-net.com>
- Date: Sat, 23 Nov 1996 19:54:52 GMT
- Files: lib/AutoLoader.pm
-
- Title: "Diagnostic cleanup"
- From: Chip Salzenberg
- Files: lib/diagnostics.pm pod/perldiag.pod
-
- DOCUMENTATION
-
- Title: "Improve documentation for sysread() and syswrite()"
- From: Chip Salzenberg
- Files: pod/perlfunc.pod
-
- Title: "Document how to use $SIG{ALRM} and alarm()"
- From: Roderick Schertler
- Msg-ID: <5898.849026569@eeyore.ibcinc.com>
- Date: Tue, 26 Nov 1996 11:42:49 -0500
- Files: pod/perlfunc.pod
-
-
-----------------
-Version 5.003_09
-----------------
-
-This patch was a compendium of various fixes and enhancements from
-many people, including some serious improvement in lexical variable
-scoping and locale handling.
-
- CORE LANGUAGE CHANGES
-
- Title: "Lexical locales"
- (make effectiveness of locales depend on C<use locale>)
- From: Chip Salzenberg
- Files: too many to list
-
- Title: "Lexical scoping cleanup"
- (tighten scoping of lexical variables, somewhat on the
- new constructs and somewhat on the old)
- From: Chip Salzenberg
- Files: many... but mostly perly.y and toke.c
-
- Title: "Re: memory corruption / security bug in sysread,syswrite + pa
- From: Jarkko Hietaniemi
- Msg-ID: <199611251946.VAA30459@alpha.hut.fi>
- Date: Mon, 25 Nov 1996 21:46:31 +0200 (EET)
- Files: MANIFEST pod/perldiag.pod pod/perlfunc.pod pp_sys.c
- t/op/sysio.t
-
- OTHER CORE CHANGES
-
- Title: "Configure fix for handling DynaLoader"
- From: Chip Salzenberg
- Files: Configure
-
- Title: "Properly prototype safe{malloc,calloc,realloc,free}."
- From: Chip Salzenberg
- Files: proto.h
-
- Title: "UnixWare 2.1 fix for perl5.003_08 - cope with fp->_cnt < -1,
- From: John Hughes <john@AtlanTech.COM>
- Msg-ID: <01BBD6EE.E915C860@malvinas.AtlanTech.COM>
- Date: Wed, 20 Nov 1996 14:27:06 +0100
- Files: sv.c
-
- Title: ""static" call to UNIVERSAL::can"
- From: Nick Ing-Simmons
- Msg-ID: <199611211547.PAA15878@pluto>
- Date: Thu, 21 Nov 1996 15:47:46 GMT
- Files: universal.c
-
- Title: "die -> croak"
- From: Gurusamy Sarathy
- Msg-ID: <199611212111.QAA17070@aatma.engin.umich.edu>
- Date: Thu, 21 Nov 1996 16:11:21 -0500
- Files: pp_ctl.c
-
- Title: "Patch for embed.pl when !EMBED && !MULTIPLICITY"
- From: Chip Salzenberg
- Files: embed.pl
-
- Title: "Add new symbols to old_global.sym, too."
- From: Chip Salzenberg
- Files: global.sym old_global.sym
-
- Title: "Cleanup of {,un}pack('w')."
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Cleanups from Ilya."
- From: Chip Salzenberg
- Files: gv.c malloc.c pod/perlguts.pod pp_ctl.c
-
- Title: "Fix for unpack('w') on 64-bit systems."
- From: Chip Salzenberg
- Files: pp.c
-
- Title: "Re: LC_NUMERIC support is ready + performance"
- From: Ilya Zakharevich
- Msg-ID: <199611260308.WAA02677@monk.mps.ohio-state.edu>
- Date: Mon, 25 Nov 1996 22:08:27 -0500 (EST)
- Files: sv.c
-
- Title: "Hash key sharing improvements from Ilya."
- From: Chip Salzenberg
- Files: hv.c hv.h proto.h
-
- Title: "Mortal stack pre-allocation from Ilya."
- From: Chip Salzenberg
- Files: pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c
-
- PORTABILITY
-
- Title: "VMS patches post-5.003_08"
- From: Charles Bailey
- Msg-ID: <1996Nov22.181631.1603238@hmivax.humgen.upenn.edu>
- Date: Fri, 22 Nov 1996 18:16:31 -0500 (EST)
- Files: lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm
- lib/ExtUtils/MakeMaker.pm lib/File/Path.pm mg.c pp_ctl.c
- utils/h2xs.PL vms/config.vms vms/descrip.mms
- vms/gen_shrfls.pl vms/genconfig.pl vms/perlvms.pod vms/vms.c
- vms/vmsish.h
-
- Title: "5.003_08: OS/2-specific bugs/enhancements"
- From: Ilya Zakharevich
- Msg-ID: <199611241147.GAA00490@monk.mps.ohio-state.edu>
- Date: Sun, 24 Nov 1996 06:47:25 -0500 (EST)
- Files: README.os2 hints/os2.sh os2/Changes os2/Makefile.SHs
- os2/OS2/PrfDB/PrfDB.pm os2/os2.c
-
- Title: "HP patches didn't make it into _08 (fwd)"
- From: Jeff Okamoto
- Msg-ID: <199611260215.AA100414526@hpcc123.corp.hp.com>
- Date: Mon, 25 Nov 96 18:15:26 PST
- Files: ext/DynaLoader/dl_hpux.xs
-
- Title: "Another HP "patch" that didn't make it (new hints file)"
- From: Jeff Okamoto
- Msg-ID: <199611252116.AA245766577@hpcc123.corp.hp.com>
- Date: Mon, 25 Nov 1996 13:16:17 -0800
- Files: hints/hpux.sh
-
- LIBRARY AND EXTENSIONS
-
- Title: "Elide spurious space in db-hash.t"
- From: Chip Salzenberg
- Files: t/lib/db-hash.t
-
- Title: "Update documentation and warning in I18N::Collate."
- From: Chip Salzenberg
- Files: lib/I18N/Collate.pm
-
- Title: "Fix bitwise op test; clean up a couple of others"
- From: Chip Salzenberg
- Files: t/lib/bigintpm.t t/op/bop.t t/op/overload.t
-
- Title: "minimal timelocal.pl for _09"
- From: Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
- Msg-ID: <9611191854.AA19586@o09.rosat.mpe-garching.mpg.de>
- Date: Tue, 19 Nov 1996 19:54:23 +0100
- Files: lib/Time/Local.pm
-
- Title: "Socket test improvement from Ilya."
- From: Chip Salzenberg
- Files: t/lib/io_sock.t
-
- Title: "Re: blib"
- From: Nick Ing-Simmons
- Msg-ID: <199611230917.JAA00471@ni-s.u-net.com>
- Date: Sat, 23 Nov 1996 09:17:40 GMT
- Files: lib/blib.pm
-
- DOCUMENTATION
-
- Title: "perldiag documentation patch."
- From: Paul Marquess
- Msg-ID: <9611201607.AA12729@claudius.bfsec.bt.co.uk>
- Date: Wed, 20 Nov 96 16:07:28 GMT
- Files: pod/perldiag.pod
-
- Title: "a missing perldiag entry"
- From: Gurusamy Sarathy
- Msg-ID: <199611212024.PAA15758@aatma.engin.umich.edu>
- Date: Thu, 21 Nov 1996 15:24:02 -0500
- Files: pod/perldiag.pod
-
- Title: "perlfunc patch"
- From: Paul Marquess
- Msg-ID: <9611201404.AA12477@claudius.bfsec.bt.co.uk>
- Date: Wed, 20 Nov 96 14:04:08 GMT
- Files: pod/perlfunc.pod
-
- Title: "Patch for pod/perlpod.pod"
- From: "Joseph S. Myers" <jsm28@cam.ac.uk>
- Msg-ID: <Pine.LNX.3.95.961120235016.6666A-100000@hammer.chu.cam.ac.uk
- Date: Wed, 20 Nov 1996 23:54:41 +0000 (GMT)
- Files: pod/perlpod.pod
-
- Title: "Update locale documentation."
- From: Chip Salzenberg
- Files: pod/perli18n.pod
-
- BUNDLED UTILITIES
-
- Title: "Fix type mismatches in x2p's safe{alloc,realloc,free}."
- From: Chip Salzenberg
- Files: x2p/util.c
-
-
-----------------
-Version 5.003_08
-----------------
-
-This patch was a compendium of various fixes and enhancements from
-many people. Here are some of the more significant changes.
-
-
- CORE LANGUAGE CHANGES
-
- Title: "Make C<no FOO> fail if C<unimport FOO> fails"
- From: Tim Bunce
- Files: gv.c
-
- Title: "Bitwise op sign rationalization"
- (Make bitwise ops result in unsigned values, unless C<use
- integer> is in effect. Includes initial support for UVs.)
- From: Chip Salzenberg
- Files: op.c opcode.pl pod/perlop.pod pod/perltoc.pod pp.c pp.h
- pp_hot.c proto.h sv.c t/op/bop.t
-
- Title: "Defined scoping for C<my> in control structures"
- (Finally defines semantics of "my" in control expressions,
- like the condition of "if" and "while". In all cases, scope
- of a "my" var extends to the end of the entire control
- structure. Also adds new construct "for my", which
- automatically declares the control variable "my" and limits
- its scope to the loop.)
- From: Chip Salzenberg
- Files: op.c perly.c perly.c.diff perly.h perly.y proto.h toke.c
-
- Title: "Fix ++/-- after int conversion (e.g. 'printf "%d"')"
- (This patch makes Perl correctly ignore SvIVX() if either
- NOK or POK is true, since SvIVX() may be a truncated or
- overflowed version of the real value.)
- From: Chip Salzenberg
- Files: pp.c pp_hot.c sv.c
-
- Title: "Make code match Camel II re: functions that use $_"
- From: Paul Marquess
- Files: opcode.pl
-
- Title: "Provide scalar context on left side of "->""
- From: Chip Salzenberg
- Files: perly.c perly.y
-
- Title: "Quote bearword package/handle FOO in "funcname FOO => 'bar'""
- From: Chip Salzenberg
- Files: toke.c
-
-
- OTHER CORE CHANGES
-
- Title: "Warn on overflow of octal and hex integers"
- From: Chip Salzenberg
- Files: proto.h toke.c util.c
-
- Title: "If -w active, warn for commas and hashes ('#') in qw()"
- From: Chip Salzenberg
- Files: toke.c
-
- Title: "Fixes for pack('w')"
- From: Ulrich Pfeifer
- Files: pp.c t/op/pack.t
-
- Title: "More complete output from sv_dump()"
- From: Gurusamy Sarathy
- Files: sv.c
-
- Title: "Major '..' and debugger patches"
- From: Ilya Zakharevich
- Files: lib/perl5db.pl op.c pp_ctl.c scope.c scope.h
-
- Title: "Fix for formline()"
- From: Gurusamy Sarathy
- Files: global.sym mg.c perl.h pod/perldiag.pod pp_ctl.c proto.h sv.c
- t/op/write.t
-
- Title: "Fix stack botch in untie and binmode"
- From: Gurusamy Sarathy
- Files: pp_sys.c
-
- Title: "Complete EMBED, including symbols from interp.sym"
- (New define EMBEDMYMALLOC makes embedding total by
- avoiding "Mymalloc" etc.)
- From: Chip Salzenberg
- Files: MANIFEST embed.pl ext/DynaLoader/dlutils.c
- ext/SDBM_File/sdbm/sdbm.h global.sym handy.h malloc.c
- perl.h pp_sys.c proto.h regexec.c toke.c util.c
- x2p/Makefile.SH x2p/a2p.h x2p/handy.h x2p/util.h
-
- Title: "Support old embedding for people who want it"
- From: Chip Salzenberg
- Files: MANIFEST Makefile.SH old_embed.pl old_global.sym
-
-
- PORTABILITY
-
- Title: "Miscellaneous VMS fixes"
- From: Charles Bailey
- Files: lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_VMS.pm
- lib/Math/Complex.pm lib/Time/Local.pm lib/timelocal.pl
- perl.h perl_exp.SH proto.h t/TEST t/io/read.t
- t/lib/findbin.t t/lib/getopt.t util.c utils/h2xs.PL
- vms/Makefile vms/config.vms vms/descrip.mms
- vms/ext/Stdio/Stdio.pm vms/ext/Stdio/Stdio.xs
- vms/perlvms.pod vms/test.com vms/vms.c
-
- Title: "DJGPP patches (MS-DOS)"
- From: "Douglas E. Wegscheid" <wegscd@whirlpool.com>
- Files: doio.c dosish.h ext/SDBM_File/sdbm/sdbm.c handy.h
- lib/AutoSplit.pm lib/Cwd.pm lib/File/Find.pm malloc.c perl.c
- perl.h pp_sys.c proto.h sv.c util.c
-
- Title: "Plan 9 update"
- From: Luther Huffman <lutherh@infinet.com>
- Files: plan9/buildinfo plan9/config.plan9 plan9/exclude
- plan9/genconfig.pl plan9/mkfile plan9/setup.rc
-
- Title: "Patch to make Perl work under AmigaOS"
- From: Norbert Pueschel
- Files: MANIFEST hints/amigaos.sh installman lib/File/Basename.pm
- lib/File/Find.pm pod/pod2man.PL pp_sys.c util.c
-
- LIBRARY AND EXTENSIONS
-
- Title: "DB_File 1.05"
- From: Paul Marquess
- Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs t/lib/db-hash.t
-
- Title: "Getopts::Std patch for hash support"
- From: Stephen Zander <stephen.zander@interlock.mckesson.com>
- Files: lib/Getopt/Std.pm
-
- Title: "Kludge for bareword handles"
- (Add 'require IO::Handle' at beginning of FileHandle.pm)
- From: Chip Salzenberg
- Files: ext/FileHandle/FileHandle.pm
-
- Title: "Re: strtod / strtol patch for POSIX module"
- From: hammen@gothamcity.jsc.nasa.gov (David Hammen)
- Files: Configure config_h.SH ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod
- ext/POSIX/POSIX.xs t/lib/posix.t
-
- BUNDLED UTILITIES
-
- Title: "Fix a2p translation of '{print "a" "b" "c"}'"
- From: Chip Salzenberg
- Files: x2p/a2p.c x2p/a2p.y
-
-
-----------------
-Version 5.003_07
-----------------
-
-This patch was primarily to fix bugs or include little things I missed
-in 5.003_06. 5.003_07 is intended to be stable enough to merit serious
-testing with an eye towards eventual release as 5.004.
-
-If it doesn't work for you, try
-
- LC_ALL=C; export LC_ALL
-
-for Bourne shell users, or
-
- setenv LC_ALL C
-
-for C-shell users. Some versions of IRIX are reported to have
-problems with sort when the locale is other than C. This manifests
-as an infinite loop in the ./miniperl configpm step.
-
-The details are described below. A very brief summary is:
-
-o Visible Changes to Core Functionality
-
- -Support for BER compressed integers. See perlfunc.pod for
- documentation on the 'w' option.
-
- -untaint support added to IO extension.
-
-o Changes in Core Internals
-
- -Perl's realloc is once again called 'Myremalloc' (with -DHIDEMYMALLOC),
- as it was pre-5.003_01. Again, this is for binary compatibility
- with 5.003. (5.003_06 erroneously called it Myrealloc.)
-
- -Getopt::Long updated to version 2.4.
-
-o Configure and build enhancements
-
- -improved SCO hints. Actually these are unconfirmed guesses, but
- they may be right.
-
- -OS/2 and Plan9 updates.
-
-o Bug fixes
-
- -print sort (4,1,3,2);
-
- -group numbers are integers again.
-
- -other things. See the specific changes for details.
-
-o Specific Changes
-
-Here are the specific file-by-file changes.
-
-Index: Changes
-
- Updated for 5.003_07.
-
- Fixed a spelling error.
-
-Index: Configure
-
- Detect GNU libc (thanks, Skimo!) and avoid nm if we have GNU libc.
- Since the GNU libc test requires compiling and linking a test
- program, the dependencies have been altered and lots of pieces of
- Configure have moved around unchanged. The patch is big but the
- effect is little.
-
- Allow for both <sys/select.h> and <time.h> in fd_set tests.
- Systems which don't allow both (e.g. SCO) have to turn off one
- or the other in the hints file for now.
-
-Index: INSTALL
-
- Warn about re-using config.sh version-specific values.
-
-Index: MANIFEST
-
- Date: Tue, 8 Oct 1996 22:24:48 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: PATCH: untaint method for IO::Handle, 5.003_06 version
-
- This is a re-post of my patch to Graham's IO library to add a method in
- IO::Handle called "untaint", that sets the IOf_UNTAINT flag on an object
- that is of or inherits from IO::Handle. With this flag set, data read from
- said handle is not tainted, whether running under -T, suid or sgid.
-
- This patch adds the method to IO.xs, adds documentation and warning to the
- pod of IO/Handle.pm, creates a new test in t/lib called io_taint.t, and
- adds mention of the new file to MANIFEST.
-
- Add mention of t/lib/io_taint.t
-
- Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT)
- From: Ilya Zakharevich
-
- os2/Changes added.
-
-Index: Makefile.SH
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- All the executable targets are moved into the same chunk with
- shared library target, which is delegated to
- $osname/Makefile.SHs if found.
- config.h should depend on config_h.SH.
-
- Remove mkmanifest target, since it will generate incorrectly
- sorted MANIFEST file, I would imagine (I haven't checked).
-
-Index: README.os2
-
- New version.
-
-Index: config_H
-
- Update SH_PATH comment.
-
-Index: config_h.SH
-
- Update SH_PATH comment.
-
-Index: ext/IO/IO.xs
-
- Date: Tue, 8 Oct 1996 22:24:48 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: PATCH: untaint method for IO::Handle, 5.003_06 version
-
- This is a re-post of my patch to Graham's IO library to add a method in
- IO::Handle called "untaint", that sets the IOf_UNTAINT flag on an object
- that is of or inherits from IO::Handle. With this flag set, data read from
- said handle is not tainted, whether running under -T, suid or sgid.
-
- This patch adds the method to IO.xs, adds documentation and warning to the
- pod of IO/Handle.pm, creates a new test in t/lib called io_taint.t, and
- adds mention of the new file to MANIFEST.
-
- Add method "untaint" into class IO::Handle
-
-Index: ext/IO/lib/IO/Handle.pm
-
- Date: Tue, 8 Oct 1996 22:24:48 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: PATCH: untaint method for IO::Handle, 5.003_06 version
-
- This is a re-post of my patch to Graham's IO library to add a method in
- IO::Handle called "untaint", that sets the IOf_UNTAINT flag on an object
- that is of or inherits from IO::Handle. With this flag set, data read from
- said handle is not tainted, whether running under -T, suid or sgid.
-
- This patch adds the method to IO.xs, adds documentation and warning to the
- pod of IO/Handle.pm, creates a new test in t/lib called io_taint.t, and
- adds mention of the new file to MANIFEST.
-
- Document IO::Handle::untaint and give warning about the bad
- things it can do.
-
-Index: ext/SDBM_File/sdbm/sdbm.h
-
- Change Myrealloc to Myremalloc to conform to 5.003's version.
- I left in the Mycalloc since malloc.c now includes a calloc,
- and we might need to hide it.
-
-Index: gv.c
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- Better error message for overload.
-
-Index: hints/os2.sh
-
- Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT)
- From: Ilya Zakharevich
-
- Some optimization (speedup in loading GNU utilities with some
- memory present - 32M should be quite enough).
- Test for revision of EMX, and setting fork()ing appropriately.
- libc was in .../st/... instead of mt.
- README.os2 is installed as pod/perlos2.pod.
-
-Index: hints/sco.sh
-
- Don't include <sys/select.h> along with <time.h>.
-
-Index: installperl
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- Restore timestamps under OS/2 (needed for binary install).
-
-Index: lib/Cwd.pm
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- Use builtin methods if present under OS/2 (maybe should be
- done outside of OS/2 too?).
-
-Index: lib/ExtUtils/MM_Unix.pm
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- Made `use strict'-clean even in parts shadowed by Autoloading.
-
-Index: lib/ExtUtils/typemap
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- `bool' entry added.
-
-Index: lib/ExtUtils/xsubpp
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- Logic for processing RETVAL documented (at last!).
-
-Index: lib/File/Copy.pm
-
- Date: Thu, 10 Oct 1996 00:42:29 -0400 (EDT)
- From: Ilya Zakharevich
- Subject: Cleanup after new test
-
- Below are patches for File::Copy (copying to filehandles was just
- plain broken under OS/2 and VMS)
-
-Index: lib/FindBin.pm
-
- Date: Fri, 20 Sep 1996 15:04:04 +0200
- From: Gisle Aas
- Subject: Documentation patch to the FindBin module
-
-Index: lib/Getopt/Long.pm
-
- Update to version 2.4.
-
-Index: lib/lib.pm
-
- Date: Thu, 10 Oct 1996 14:22:05 -0400
- From: "Brent B. Powers" <powers@ml.com>
- Subject: Re: patch for lib.pm
-
- Ignore undefined entries.
-
-Index: lib/newgetopt.pl
-
- Updated to version 2.4 to match Getopt::Long.
-
-Index: makedepend.SH
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- weed out perl_exp.SH, config_h.SH
- (They have these funny names to avoid names like perl.exp.SH
- with more than two '.' Such names are illegal on some systems.)
-
-Index: mg.c
-
- Date: Thu, 10 Oct 1996 14:33:08 +0000 ()
- From: Chip Salzenberg
- Subject: Re: Group fix for 5.003_06
-
- The group problems recently experienced are due to a small error
- introduced in 5.003_06. This patch is required to fix the bug:
-
-Index: os2/Changes
-
- Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT)
- From: Ilya Zakharevich
-
- sys/un.h is not very useful without Merlin toolkit.
- updates for fork()ing.
-
- Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT)
- From: Ilya Zakharevich
-
- added.
-
-Index: os2/Makefile.SHs
-
- Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT)
- From: Ilya Zakharevich
-
- Convoluted process to create chimera executables added.
- aout_clean is done automatically on clean.
-
-Index: os2/OS2/ExtAttr/t/os2_ea.t
-
- Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT)
- From: Ilya Zakharevich
-
- Use `unlink' where appropriate.
-
-Index: os2/diff.configure
-
- Updated.
-
-Index: os2/os2.c
-
- Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT)
- From: Ilya Zakharevich
-
- /bin/sh is translated to the configured value of location of sh.exe.
- popen() used even if we can fork (as we do now).
- builtins added for the sake of path manipulation.
-
-Index: os2/os2ish.h
-
- Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT)
- From: Ilya Zakharevich
-
- sys/un.h is not very useful without Merlin toolkit.
- updates for fork()ing.
-
-Index: patchlevel.h
-
- Change to subversion 7.
-
-Index: perl.c
-
- Date: Wed, 9 Oct 1996 19:03:41 +0000
- From: Tim Bunce
- Subject: Infinte loop with perl_destruct_level and $SIG{__WARN__}
-
- I've just started using purify on a perl with DBD::Oracle linked in
- (the number of uninitialised memory reads in the Oracle libraries
- is frightning!).
-
- If perl_destruct_level and $SIG{__WARN__} are set then I see a range
- of problems typified by this example and folowed by a core dump:
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- Copywrite of OS/2 port now has \n\n.
- Now deletes -e file (again!) if compilation is interrupted.
-
-Index: perl.h
-
- Change Myrealloc to Myremalloc to conform to 5.003's version.
- I left in the Mycalloc since malloc.c now includes a calloc,
- and we might need to hide it.
-
-Index: plan9/aperl
-
- Updated for 5.003_07
-
-Index: plan9/arpa/inet.h
-
- Updated for 5.003_07
-
-Index: plan9/buildinfo
-
- Updated for 5.003_07
-
-Index: plan9/config.plan9
-
- Updated for 5.003_07
-
-Index: plan9/exclude
-
- Updated for 5.003_07
-
-Index: plan9/fndvers
-
- Updated for 5.003_07
-
-Index: plan9/genconfig.pl
-
- Updated for 5.003_07
-
-Index: plan9/mkfile
-
- Updated for 5.003_07
-
-Index: plan9/myconfig.plan9
-
- Updated for 5.003_07
-
-Index: plan9/perlplan9.doc
-
- Updated for 5.003_07
-
-Index: plan9/perlplan9.pod
-
- Updated for 5.003_07
-
-Index: plan9/plan9.c
-
- Updated for 5.003_07
-
-Index: plan9/plan9ish.h
-
- Updated for 5.003_07
-
-Index: plan9/setup.rc
-
- Updated for 5.003_07
-
-Index: plan9/versnum
-
- Updated for 5.003_07
-
-Index: pod/perldiag.pod
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- mention that malloc in berkeley DB is broken, and PERL_BADFREE.
- OS/2-specific messages added.
-
-Index: pod/perlfunc.pod
-
- Date: 20 Sep 1996 13:17:14 +0200
- From: Ulrich Pfeifer
- Subject: Re: Patch for ASN.1 compressed integer in pack/unpack
-
-Index: pod/perli18n.pod
-
- Updated version with high bits intact.
-
-Index: pod/perlop.pod
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- Crossrefs corrected.
-
-Index: pod/perltrap.pod
-
- Clarified that warn() _always_ printed to STDERR, both in perl4
- and perl5.
-
-Index: pod/perlvar.pod
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- $^E under OS/2.
-
-Index: pp.c
-
- Date: 20 Sep 1996 13:17:14 +0200
- From: Ulrich Pfeifer
- Subject: Re: Patch for ASN.1 compressed integer in pack/unpack
-
-Index: pp_sys.c
-
- Date: Wed, 9 Oct 1996 19:07:24 GMT
- From: Chris Faylor <cgf@bbc.com>
-
- The problem is that SCO apparently needs to have a file opened
- with write privileges for chsize to work correctly.
-
-Index: sv.c
-
- Date: Tue, 08 Oct 1996 23:54:47 -0400
- From: Gurusamy Sarathy
- Subject: Re: Sorting lists of integers doesn't always work
-
- >> > print sort (4,1,2,3);
- >> >
- >> > actually prints "4123", i.e. doesn't actually sort. Bug? Feature?
-
- This broke between 5.001n and 5.002. There was a long winded thread
- about sorting undefs in some order (rather than coredumping) around
- the 5.002beta times (search for "bogorefs" in the subject-line on
- p5p archive for details). Larry added in some code that presumes that
- the private flags are set by the time qsort() is called:
-
- Unfortunately, sv_2pv() does not set the POKp flag, so the above
- code breaks! Here's a patch against 5.00306.
-
-Index: t/lib/anydbm.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- File mode under OS/2 is not what you expect. However, this has
- nothing to do with databases, _and_ there is a test
- for this in stat.t (which dutifully fails). There is
- no point to consider this behaviour as a bug in
- database code.
- So OS/2 is special-cased in these tests.
-
-Index: t/lib/db-btree.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- File mode under OS/2 is not what you expect. However, this has
- nothing to do with databases, _and_ there is a test
- for this in stat.t (which dutifully fails). There is
- no point to consider this behaviour as a bug in
- database code.
- So OS/2 is special-cased in these tests.
-
-Index: t/lib/db-hash.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- File mode under OS/2 is not what you expect. However, this has
- nothing to do with databases, _and_ there is a test
- for this in stat.t (which dutifully fails). There is
- no point to consider this behaviour as a bug in
- database code.
- So OS/2 is special-cased in these tests.
-
-Index: t/lib/db-recno.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- File mode under OS/2 is not what you expect. However, this has
- nothing to do with databases, _and_ there is a test
- for this in stat.t (which dutifully fails). There is
- no point to consider this behaviour as a bug in
- database code.
- So OS/2 is special-cased in these tests.
-
-Index: t/lib/gdbm.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- File mode under OS/2 is not what you expect. However, this has
- nothing to do with databases, _and_ there is a test
- for this in stat.t (which dutifully fails). There is
- no point to consider this behaviour as a bug in
- database code.
- So OS/2 is special-cased in these tests.
-
-Index: t/lib/io_pipe.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- Better error message on dying.
-
-Index: t/lib/io_taint.t
-
- Date: Tue, 8 Oct 1996 22:24:48 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: PATCH: untaint method for IO::Handle, 5.003_06 version
-
- This is a re-post of my patch to Graham's IO library to add a method in
- IO::Handle called "untaint", that sets the IOf_UNTAINT flag on an object
- that is of or inherits from IO::Handle. With this flag set, data read from
- said handle is not tainted, whether running under -T, suid or sgid.
-
- This patch adds the method to IO.xs, adds documentation and warning to the
- pod of IO/Handle.pm, creates a new test in t/lib called io_taint.t, and
- adds mention of the new file to MANIFEST.
-
- Test suite for the untaint method of class IO::Handle.
-
-Index: t/lib/ndbm.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- File mode under OS/2 is not what you expect. However, this has
- nothing to do with databases, _and_ there is a test
- for this in stat.t (which dutifully fails). There is
- no point to consider this behaviour as a bug in
- database code.
- So OS/2 is special-cased in these tests.
-
-Index: t/lib/odbm.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- File mode under OS/2 is not what you expect. However, this has
- nothing to do with databases, _and_ there is a test
- for this in stat.t (which dutifully fails). There is
- no point to consider this behaviour as a bug in
- database code.
- So OS/2 is special-cased in these tests.
-
-Index: t/lib/sdbm.t
-
- Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT)
- From: Ilya Zakharevich
-
- File mode under OS/2 is not what you expect. However, this has
- nothing to do with databases, _and_ there is a test
- for this in stat.t (which dutifully fails). There is
- no point to consider this behaviour as a bug in
- database code.
- So OS/2 is special-cased in these tests.
-
-Index: t/lib/socket.t
-
- Date: Thu, 10 Oct 1996 01:09:59 -0400
- From: Spider Boardman
- Subject: Re: 5.003_06 is available (results on ULTRIX)
-
- fix t/lib/socket.t to treat TCP like the stream protocol it is
- rather than expecting it behave rationally in all cases.
-
-Index: t/op/pack.t
-
- Date: 20 Sep 1996 13:17:14 +0200
- From: Ulrich Pfeifer
- Subject: Re: Patch for ASN.1 compressed integer in pack/unpack
-
-Index: t/op/sort.t
-
- Date: Wed, 09 Oct 1996 00:41:27 -0400
- From: Gurusamy Sarathy
- Subject: more t/op/sort.t tests
-
-Index: util.c
-
- Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT)
- From: Ilya Zakharevich
-
- uses my_syspopen, my_syspclose ifdef OS2. my_pclose is defined
- as my_syspclose ifdef OS2 and can FORK (as OS2 does).
-
-Index: x2p/Makefile.SH
-
- Date: Wed, 9 Oct 96 16:00:29 edt
- From: Norton Allen <nort@bottesini.harvard.edu>
- Subject: Re: sh Configure?
-
- Extract x2p/Makefile.SH and x2p/cflags.SH correctly down
- in the x2p directory, even if $0 isn't set to the full
- pathname of the file being extracted.
-
-Index: x2p/cflags.SH
-
- Date: Wed, 9 Oct 96 16:00:29 edt
- From: Norton Allen <nort@bottesini.harvard.edu>
- Subject: Re: sh Configure?
-
- Extract x2p/Makefile.SH and x2p/cflags.SH correctly down
- in the x2p directory, even if $0 isn't set to the full
- pathname of the file being extracted.
-
-
-----------------
-Version 5.003_06
-----------------
-
-This patch was primarily to fix bugs, improve the documentation,
-and work towards restoring binary compatibility with 5.003.
-The details are described below. A very brief summary is:
-
-o Visible Changes to Core Functionality
-
- -Significantly improved support _with documentation_ for
- locales, including LC_COLLATE. See the new pod/perli18n.pod.
- Thanks to Jarkko Hietaniemi.
-
- -new version of Math::Complex, with test suite. Ought to be
- backwards compatible, but check it out if you use Math::Complex.
-
- -Pre-extending hashes now works. keys %hash = 5000 will pre-size
- %hash.
-
- -__DATA__ filehandle is untainted.
-
-o Changes in Core Internals
-
- -gv_fullname and gv_efullname have reverted to their pre-5.003_03
- versions for binary compatibility. Actually, they are implemented
- as stubs pointing to the new 3-argument forms gv_fullname3 and
- gv_efullname3.
-
- -Perl's malloc is once again called 'Mymalloc' (with -DHIDEMYMALLOC),
- as it was pre-5.003_01. Again, this is for binary compatibility
- with 5.003.
-
-o Configure and build enhancements
-
- -many new tests for the standard library.
-
- -test suite now locale-friendly.
-
- -a2p.man and s2p.man now made into pods.
-
-o Bug fixes
-
- -whitespace lexer errors fixed.
-
- -many, many other things. See details below.
-
-o Specific Changes
-
-Here are the specific file-by-file changes.
-
-# This is my patch perl5.003_06.pat to perl5.003_05
-# The full description is below.
-# Please execute the following commands before applying this patch.
-# (You can feed this patch to 'sh' to do so.)
-# -- Andy Dougherty
-
-# We'll create some new tests, but patch won't automatically make them
-# executable.
-for t in abbrev.t autoloader.t basename.t checktree.t complex.t \
- env.t fatal.t filecache.t filecopy.t filefind.t filepath.t \
- findbin.t getopt.t hostname.t parsewords.t searchdict.t \
- selectsaver.t symbol.t texttabs.t textwrap.t timelocal.t
-do
- touch t/lib/$t
- chmod +x t/lib/$t
-done
-
-# The a2p.man and s2p.man pages have been changed into pods.
-rm -f x2p/a2p.man x2p/s2p.man
-
-exit 0
-
-
-This is patch perl5.003_06.pat to perl version 5.003_05.
-This takes you from 5.003_05 to 5.003_06.
-
-To apply this patch, run the above commands,
-cd to your perl source directory and then type
-
- patch -p1 -N < perl5.003_06.pat
-
-The changes are described after each /^Index:/ line below. This is
-designed so you can examine each change with a command such as
-
- csplit -k perl5.003_06.pat '/^Index:/' '{999}'
-
-(Of course, since there are more than 100 Index entries, your
-csplit may complain, since many csplit's have an arbitrary limit of 100
-files. Still, you can manually split the file or roll your own.)
-
-Index: Changes
-
- Updated for 5.003_06.
-
-Index: Configure
-
- Add -Wl,rpath option for irix* to find the installed shared
- libperl.so
-
- Add /shlib to libpth. It is used by Digital Unix 4.0.
-
- Date: Mon, 30 Sep 1996 14:01:05 +0100
- From: Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
-
- Detect Cygnus Win32, or at least don't let Configure get fooled
- into thinking it's OS/2.
-
-Index: INSTALL
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- added LC_COLLATE doc.
-
-Index: MANIFEST
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
- Date: Sat, 28 Sep 1996 15:11:06 +0200
- From: Andreas Koenig
- Subject: Dale's posting as patch (Was: Perl 5.003_5 make fails on NS3.2 - CURED)
-
- Handle NeXT, POSIX, and setpgid in pp_sys.c and POSIX.
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- added perli18n.pod.
-
-Index: README
-
- Changed Larry's address to larry@wall.org.
-
-Index: configpm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: configure
-
- Date: Mon, 30 Sep 1996 14:01:05 +0100
- From: Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
-
- Warn the user of case-insensitive file systems that they may have
- accidentally gotten 'configure' instead of 'Configure'.
-
-Index: doio.c
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: doop.c
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
-Index: dump.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
-Index: embed.h
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
-Index: ext/DynaLoader/DynaLoader.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: ext/FileHandle/FileHandle.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: ext/IO/IO.pm
-
- Updated to IO-1.12.
-
-Index: ext/IO/IO.xs
-
- Updated to IO-1.12.
-
-Index: ext/IO/lib/IO/File.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Updated to IO-1.12.
-
-Index: ext/IO/lib/IO/Handle.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Updated to IO-1.12.
-
-Index: ext/IO/lib/IO/Pipe.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Updated to IO-1.12.
-
-Index: ext/IO/lib/IO/Seekable.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Updated to IO-1.12.
-
-Index: ext/IO/lib/IO/Select.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Updated to IO-1.12.
-
-Index: ext/IO/lib/IO/Socket.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Updated to IO-1.12.
-
-Index: ext/NDBM_File/hints/dynixptx.pl
-
- Perl 5.003_05 compiles on DYNIX/ptx 4.0 (v4.1.3), and passes all tests.
- The only change needed is in "ext/NDBM_File/Makefile.PL" - on this system,
- ndbm is actually contained in the libc library, and must be linked against
- -lc when compiling. (this is for dynamic ELF executables, I didn't compile
- statically)
-
-Index: ext/Opcode/Opcode.pm
-
- Date: Fri, 20 Sep 1996 12:59:21 +0200
- From: Gisle Aas
- Subject: Re: Symbol.pm clobbers $_ at startup
-
- The same kind of problem seem to be present in Opcode.pm:
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: ext/Opcode/Safe.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: ext/POSIX/POSIX.pod
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- enhanced setlocale() docs and introduced the one-argument variant doc.
-
-Index: ext/POSIX/POSIX.xs
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- setlocale() allowed one argument only,
- call to perl_init_fold() (in util.c) if setlocale() succeeded.
-
-Index: ext/POSIX/hints/next_3.pl
-
- Date: Sat, 28 Sep 1996 15:11:06 +0200
- From: Andreas Koenig
- Subject: Dale's posting as patch (Was: Perl 5.003_5 make fails on NS3.2 - CURED)
-
- Handle NeXT, POSIX, and setpgid in pp_sys.c and POSIX.
-
-Index: ext/SDBM_File/sdbm/sdbm.h
-
- Revert from Perl_malloc to Mymalloc for binary compatibility with
- 5.003.
-
-Index: ext/Socket/Socket.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: global.sym
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- added var lc_collate_active and func mem_collxfrm.
-
-Index: gv.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
-Index: handy.h
-
- Date: Sat, 21 Sep 1996 21:33:15 -0400 (EDT)
- From: Kenneth Albanowski
- Subject: Full LONG_MAX & co. patch over 5.003_05
-
- This patch contains the changes I've collected for the various _MAX issues
- since 5.003_05. No patches issued between 5.003_05 and this one should be
- applied, use this one instead.
-
- The effect is to remove the CHAR_* and I8_* constants (which are
- ambiguous) and to explicitly cast all of the constants.
-
-Index: hints/machten.sh
-
- Add notes about MachTen 4.0.3 SYSV IPC.
-
-Index: hints/next_3.sh
-
- Replace optimize="-g" by optimize="" since we're just trying to turn off
- the optimizier.
-
- Date: Sat, 28 Sep 1996 15:11:06 +0200
- From: Andreas Koenig
- Subject: Dale's posting as patch (Was: Perl 5.003_5 make fails on NS3.2 - CURED)
-
- Handle NeXT, POSIX, and setpgid in pp_sys.c and POSIX.
-
-Index: hv.c
-
- Date: Fri, 20 Sep 1996 15:38:57 -0400
- From: Gurusamy Sarathy
- Subject: Re: "Attempt to free non-existent shared string"? (with patch)
-
- I found a subtle problem with the lazydelete mechanism (which is used
- to postpone the delete of a entry that may be getting iterated over).
- I was using the HeKLEN slot to hold the hint, but the real HeKLEN is
- needed later to call unsharepvn(). This means that only magical
- hash entries can use the HeKLEN slot to hold flags.
-
- Here's a tested patch against 5.00305 that fixes the problem.
- The patch simply moves the LAZYDEL hint to become a SV-level private
- flag.
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
-Index: hv.h
-
- Date: Fri, 20 Sep 1996 15:38:57 -0400
- From: Gurusamy Sarathy
- Subject: Re: "Attempt to free non-existent shared string"? (with patch)
-
- I found a subtle problem with the lazydelete mechanism (which is used
- to postpone the delete of a entry that may be getting iterated over).
- I was using the HeKLEN slot to hold the hint, but the real HeKLEN is
- needed later to call unsharepvn(). This means that only magical
- hash entries can use the HeKLEN slot to hold flags.
-
- Here's a tested patch against 5.00305 that fixes the problem.
- The patch simply moves the LAZYDEL hint to become a SV-level private
- flag.
-
-Index: installman
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: installperl
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/AutoLoader.pm
-
- Date: Mon Sep 9 09:29:44 1996
- From: Gisle Aas
- Subject: Re: problem with 'die' and UserAgent
-
- > This is a patch to the AutoLoader.pm (from 5.003) that fixes the problem:
- This is a better patch (no need to test for /::DESTROY$/ twice):
-
- Date: Mon, 30 Sep 1996 00:54:37 -0400
- From: Spider Boardman
-
- The test and patches for AutoLoader were also non-functional,
- since the regexp context (curpm) was still being clobbered by the
- filename manipulations:
-
- Date: Sun, 06 Oct 1996 16:15:07 +0200
- From: Gisle Aas
- Subject: Re: Can't locate auto/U/autosplit.ix
-
- It would IMHO be much better if the AutoLoader exported the AUTOLOAD()
- function. With an exported AUTOLOAD() we would not have to inherit
- from AutoLoader, and we would avoid these problems.
-
- This patch tries to explain the behavior of AutoLoader instead by
- updating its documentation.
-
-Index: lib/Benchmark.pm
-
- Date: Sat, 28 Sep 1996 17:01:22 +0300 (EET DST)
- From: Jarkko Hietaniemi
- Subject: a really really tiny typo
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Cwd.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Devel/SelfStubber.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Env.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Exporter.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/ExtUtils/Embed.pm
-
- Remove unwantd space after the I in -I$Config[archlib}
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/ExtUtils/Install.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/ExtUtils/MM_Unix.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/ExtUtils/MM_VMS.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: lib/ExtUtils/MakeMaker.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/ExtUtils/Manifest.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: lib/ExtUtils/Mksymlists.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/ExtUtils/xsubpp
-
- Change a reference from perlapi(1) to perlxs(1).
-
-Index: lib/File/Basename.pm
-
- Date: Fri, 20 Sep 1996 14:11:05 +0200
- From: Gisle Aas
- Subject: File::BaseName: "/" is legal path separator for MSDOS
-
- The File::BaseName module should allow "/" as path separator when
- fileparse_set_fstype("MSDOS") is in effect:
-
- Date: Fri, 20 Sep 1996 13:58:52 +0200
- From: Gisle Aas
- Subject: File::Basename documentation patch
-
- Date: Mon, 30 Sep 1996 00:54:37 -0400
- From: Spider Boardman
-
- For t/lib/basename.t, though, the associated patch for
- File::Basename was also wrong:
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: lib/File/Copy.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/File/Find.pm
-
- Date: Sat, 7 Sep 1996 21:37:44 +0200
- From: Michael De La Rue <mikedlr@it.com.pl>
- Subject: File::Find assumes $_ remains unchanged; bug
-
- The File::Find perl module assumes that the $_ variable remains unchanged
- through the user defined function which is callbacked from find. It carries
- out a stat operation
-
- Simplest fix is merely to document this
-
-Index: lib/File/Path.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/FindBin.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Getopt/Long.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/I18N/Collate.pm
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- deprecated and trapped (will whine if called and tell to migrate away)
-
-Index: lib/IPC/Open2.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/IPC/Open3.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Math/BigInt.pm
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- ord() is a dangerous thing.
-
-Index: lib/Math/Complex.pm
-
- Date: Thu, 03 Oct 96 18:38:08 +0200
- From: Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
- # Complex numbers and associated mathematical functions
- # -- Raphael Manfredi, Sept 1996
- # New version. Should be backwards compatible, but please
- # check it out if you use it.
-
-Index: lib/Pod/Text.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Search/Dict.pm
-
- Date: Sat, 21 Sep 1996 23:02:42 +0200
- From: Gisle Aas
- Subject: look() in Search::Dict should use lc() istead of tr/A-Z/a-z/
-
- The Search::Dict look() function should use the lc() function instead
- of tr/A-Z/a-z/. This will make folding of non-english letters work if
- the locale is set up correctly.
-
-Index: lib/SelfLoader.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Symbol.pm
-
- Date: Fri, 20 Sep 1996 12:38:14 +0200
- From: Gisle Aas
- Subject: Symbol.pm clobbers $_ at startup
-
- perl -le 'BEGIN {$_="foo";} use Symbol; print qualify($_)'
-
- I don't understand why the module want to initialize %global from
- <DATA> in the first place. Perhaps we want to apply this patch
- instead.
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Sys/Hostname.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Term/Cap.pm
-
- Date: 23 Sep 1996 14:11:38 +0200
- From: Ulrich Pfeifer
- Subject: Patch for Term::Cap
-
- 'use Term::Cap' produces a warning when diagnosics are active. The
- patch below avoids the warning.
-
- [The $entry .= $_ usage is idiomatic enough that it ought to be
- ok, I would think, but the patch certainly is ok too.]
-
-Index: lib/Term/Complete.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Term/ReadLine.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Test/Harness.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: lib/Text/Abbrev.pm
-
- Date: 23 Sep 1996 11:33:01 +0200
- From: Ulrich Pfeifer
- Subject: Text::Abbrev (Re: More standard library test scripts)
-
- This patch merges the Text::Abbrev related patches/tests from Gisle
- and my previous patch (i.e. replaces both).
-
-Index: lib/Text/Tabs.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Text/Wrap.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/Time/Local.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/UNIVERSAL.pm
-
- Add in stub file.
-
-Index: lib/bigint.pl
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- ord() is a dangerous thing.
-
-Index: lib/diagnostics.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/overload.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/perl5db.pl
-
- Date: Mon, 30 Sep 1996 00:34:58 -0400 (EDT)
- From: Ilya Zakharevich
- Subject: Re: dereferencing a hash from the debugger won't work
-
-Index: lib/splain
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: lib/strict.pm
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: makedepend.SH
-
- Add explicit $touch $firstmakefile for QNX which apparently
- preserves modification times for a 'cp' command.
- I worry, though, that touch might not be portable to OS/2.
- If it is, then I'll remove the fancy case statement.
-
-Index: malloc.c
-
- Not all sbrks return zeroed memory.
-
-Index: mg.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
- Date: Sun, 29 Sep 1996 22:18:19 -0400 (EDT)
- From: Chip Salzenberg
- Subject: 5.003_05: Fix numeric value of $!
-
- This patch undoes a bit of over-zealous integerization in mg.c, related
- to the numeric value of $!.
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
- Date: Fri, 4 Oct 1996 12:38:31 -0400 (EDT)
- From: Chip Salzenberg
- Subject: 5.003_05: Fix numeric $! and $^E
-
- This patch undoes a bit of over-zealous integerization in mg.c,
- related to the numeric values of $! and $^E. This patch *REPLACES*
- the one I posted earlier, which was only effective for $!.
-
- [Some of this is superceded by similar stuff in the VMS patches.]
-
-Index: op.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
-Index: opcode.h
-
- Date: Mon, 16 Sep 1996 16:37:48 -0700
- From: Jonathan Biggar <jon@sems.com>
- Subject: Perl 5.003 bug when embedding in C++ program
-
- The following patch is necessary in order to embed the Perl5.003 interpreter
- into a C++ program without getting prototype mismatch errors from the
- C++ compiler.
-
-Index: opcode.pl
-
- Date: Mon, 16 Sep 1996 16:37:48 -0700
- From: Jonathan Biggar <jon@sems.com>
- Subject: Perl 5.003 bug when embedding in C++ program
-
- The following patch is necessary in order to embed the Perl5.003 interpreter
- into a C++ program without getting prototype mismatch errors from the
- C++ compiler.
-
-Index: patchlevel.h
-
- Change to subversion 6.
-
-Index: perl.c
-
- From: Roderick Schertler
- Subject: Re: -T flag and removal of `.' from @INC
-
- support C<perl -e'attached code'>
-
- Date: Tue, 01 Oct 1996 19:02:17 -0400
- From: Gurusamy Sarathy
- Subject: Re: 2 core dumps (patch)
- Message-Id: <199610012302.TAA08395@aatma.engin.umich.edu>
-
- The problem is an uninitialized SV slot in errgv. Here's a patch.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: perl.h
-
- Date: Sat, 21 Sep 1996 21:33:15 -0400 (EDT)
- From: Kenneth Albanowski
- Subject: Full LONG_MAX & co. patch over 5.003_05
-
- This patch contains the changes I've collected for the various _MAX issues
- since 5.003_05. No patches issued between 5.003_05 and this one should be
- applied, use this one instead.
-
- The effect is to remove the CHAR_* and I8_* constants (which are
- ambiguous) and to explicitly cast all of the constants.
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
- Revert from Perl_malloc to Mymalloc for binary compatibility with
- 5.003.
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
-Index: perl_exp.SH
-
- Add new function perl_init_fold. (I'm not sure it goes here.)
-
-Index: perlio.c
-
- Date: Thu, 12 Sep 96 15:58 PDT
- From: Hunter Kelly <retnuh@zule.pixar.com>
- Subject: Re: 5.003_05 is available.
-
- Fix PerlIO_reopen parameters.
-
-Index: perlsdio.h
-
- Date: Fri, 13 Sep 1996 17:24:01 -0400
- From: John Stoffel <jfs@jfs.fluent.com>
- Subject: Re: 5.003_05 is available.
-
- Undef Irix getc_unlocked and putc_unlocked #defines.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: pod/Makefile
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- perli18n.pod (and perlapio.pod, btw) added.
-
-Index: pod/buildtoc
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perl.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Changed Larry's address to larry@wall.org.
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- perli18n advertised.
-
-Index: pod/perlapio.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
-Index: pod/perlbook.pod
-
- Updated for Second Edition.
-
-Index: pod/perlcall.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perldata.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perldebug.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perldiag.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: pod/perldsc.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlembed.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlform.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlfunc.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlguts.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
- Date: Mon, 23 Sep 96 13:18:01 PDT
- From: Jeff Okamoto
- Subject: Re: perlguts API Listing patch
-
- Here's the lastest complete version for inclusion into _06 or .004. This
- incorporates and supersedes Dean's patch.
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perli18n.pod
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- written.
-
-Index: pod/perlipc.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perllol.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlmod.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Date: Wed, 02 Oct 1996 16:52:08 -0400
- From: Roderick Schertler
- Subject: documentation for $? in END
-
- Document the behavior with $? WRT END subroutines.
-
-Index: pod/perlobj.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlop.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Date: Fri, 4 Oct 1996 10:36:19 -0400 (EDT)
- From: Kenneth Albanowski
- Subject: Re: Suggestion for improving man page
-
- Add alternative names for various escape sequences.
-
-Index: pod/perlpod.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlre.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Date: Fri, 4 Oct 1996 10:36:19 -0400 (EDT)
- From: Kenneth Albanowski
- Subject: Re: Suggestion for improving man page
-
- Add alternative names for various escape sequences.
-
-Index: pod/perlref.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlrun.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlsec.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlstyle.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlsub.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlsyn.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perltie.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perltoc.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Changed Larry's address to larry@wall.org.
-
-Index: pod/perltrap.pod
-
- Date: Wed, 11 Sep 1996 13:26:18 -0400
- From: Gurusamy Sarathy
- Subject: a perl425 trap
-
- Here's an addition that should be self-explanatory.
- [interpolation issues]
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/perlvar.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Date: Wed, 02 Oct 1996 16:52:08 -0400
- From: Roderick Schertler
- Subject: documentation for $? in END
-
- Document the behavior with $? WRT END subroutines.
-
-Index: pod/perlxstut.pod
-
- Date: Wed, 11 Sep 1996 11:55:18 -0500
- From: "Daniel S. Lewart" <lewart@vadds.cvm.uiuc.edu>
- Subject: POD spelling patches
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: pod/pod2man.PL
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
- Bugs found in pod2man
-
- The following bugs were noticed, and some fixed:
-
- 1. Where a L<> link extends over more than one line, pod2man does not
- treat it as a link but displays it literally, and so these have been
- rearranged to place the link on one line. This is the only bug worked
- around. [Fixed; the rearrangements, which were done beforehand,
- remain in some cases, but are no longer necessary, and pod paragraphs
- can now be safely reformatted to whatever width is desired in the pod,
- without breaking links.]
-
- 2. It seems to swallow spaces after certain links: for example, part
- of the "open" entry in the perlfunc manpage comes out as "the
- \f(CWbinmode\fR entry elsewhere in this documentfor tips", the source
- having been "L</binmode> for tips". [Fixed.]
-
- 3. 'L</"Pass by Reference">', in perlsub.pod, comes out as '\fI/"Pass
- by Reference\fR', that is, with an initial '/"'.
-
- 4. If a pod line begins with ".", nothing is done to prevent [tng]roff
- from treating it as a [tng]roff instruction.
-
- 5. When the paragraph below =head1 NAME has more than one line, this
- confuses pod2man: so in the case of Term::Readline, the manpage begins
- with a stray line 'no real package is found, substitutes stubs instead
- of basic functions."'.
-
- Of course, it would be better to fix pod2man; I hope that the new Pod
- modules, when ready, will not have these defects.
-
-Index: pp_ctl.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- sortcmp() sprouted a LC_COLLATE branch.
-
-Index: pp_hot.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
- Date: Thu, 19 Sep 1996 11:58:22 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: Patch: Untaint FH flag and clean DATA handles
-
- This patch adds a IOf_UNTAINT flag in sv.h, as one of the possibles
- on an xpvio->xio_flags struct member. It is used to mark the given
- file handle as a clean source, even when tainting is turned on.
- There are also patches to pp_sys.c in pp_sysread to check this flag
- before tainting data, and in pp_hot.c in do_readline for the same
- reason. Lastly, it patches toke.c to automatically set this flag on
- on a __DATA__ filehandle. The creation of the $pack::DATA
- pseudo-filehandle is already checked against running under eval, so
- this should not introduce any insecurity.
-
- This patch *does not*:
-
- * Add the "untaint" keyword.
-
-Index: pp_sys.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
- Date: Thu, 19 Sep 1996 11:58:22 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: Patch: Untaint FH flag and clean DATA handles
-
- This patch adds a IOf_UNTAINT flag in sv.h, as one of the possibles
- on an xpvio->xio_flags struct member. It is used to mark the given
- file handle as a clean source, even when tainting is turned on.
- There are also patches to pp_sys.c in pp_sysread to check this flag
- before tainting data, and in pp_hot.c in do_readline for the same
- reason. Lastly, it patches toke.c to automatically set this flag on
- on a __DATA__ filehandle. The creation of the $pack::DATA
- pseudo-filehandle is already checked against running under eval, so
- this should not introduce any insecurity.
-
- This patch *does not*:
-
- * Add the "untaint" keyword.
-
- Date: Sun, 22 Sep 1996 17:26:57 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: Patch to patch for untainting
-
- The following patch ensures that a glob used as a filehandle that
- has had the UNTAINT flag set will not carry that flag over on a
- re-open. In a nutshell, a re-open of the DATA filehandle would be
- considered untainted, and an object of class IO::Handle (or one of
- its sub-classes) that is marked untainted with the untaint method,
- then closed and re-opened, retained the untaintedness.
-
- Date: Mon, 30 Sep 1996 00:54:37 -0400
- From: Spider Boardman
-
- First, with IO::untaint, the patches as posted resulted in a
- miniperl which couldn't open files, so the autosplitting of the
- library and the creation of Makefiles for the extensions didn't
- work. Worse, it didn't just fail to open files, it dumped core.
-
-Index: proto.h
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- mem_collxfrm() and perl_init_fold() added.
-
-Index: run.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
-Index: sv.c
-
- Restore the 5.003 gv_fullname() and gv_efullname() functions.
- Provide new 3-arg forms gv_fullname3() and gv_efullname3().
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
- I've added some DEBUG_Ps to sv.c which give a trace of the
- fast I/O fiddling with stdio in sv_gets(). These were useful
- to me in setting up the VMS fast I/O, and I left them in in
- case they're useful to someone in the future. However, if you
- think it overloads -DP too much, feel free to drop it. (-DP
- already adds a profile of op usage to its advertised output.)
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- sv_cmp() sprouted a LC_COLLATE branch.
-
-Index: sv.h
-
- Date: Thu, 19 Sep 1996 11:58:22 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: Patch: Untaint FH flag and clean DATA handles
-
- This patch adds a IOf_UNTAINT flag in sv.h, as one of the possibles
- on an xpvio->xio_flags struct member. It is used to mark the given
- file handle as a clean source, even when tainting is turned on.
- There are also patches to pp_sys.c in pp_sysread to check this flag
- before tainting data, and in pp_hot.c in do_readline for the same
- reason. Lastly, it patches toke.c to automatically set this flag on
- on a __DATA__ filehandle. The creation of the $pack::DATA
- pseudo-filehandle is already checked against running under eval, so
- this should not introduce any insecurity.
-
- This patch *does not*:
-
- * Add the "untaint" keyword.
-
- Date: Fri, 20 Sep 1996 15:38:57 -0400
- From: Gurusamy Sarathy
- Subject: Re: "Attempt to free non-existent shared string"? (with patch)
-
- I found a subtle problem with the lazydelete mechanism (which is used
- to postpone the delete of a entry that may be getting iterated over).
- I was using the HeKLEN slot to hold the hint, but the real HeKLEN is
- needed later to call unsharepvn(). This means that only magical
- hash entries can use the HeKLEN slot to hold flags.
-
- Here's a tested patch against 5.00305 that fixes the problem.
- The patch simply moves the LAZYDEL hint to become a SV-level private
- flag.
-
-Index: t/base/term.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- \n not necessarily lt ' '.
-
-Index: t/comp/package.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- XYZ not necessarily gt xyz.
-
-Index: t/lib/abbrev.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
- Date: 23 Sep 1996 11:33:01 +0200
- From: Ulrich Pfeifer
- Subject: Text::Abbrev (Re: More standard library test scripts)
-
- This patch merges the Text::Abbrev related patches/tests from Gisle
- and my previous patch (i.e. replaces both).
-
-Index: t/lib/anydbm.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/lib/autoloader.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
- Date: Mon, 30 Sep 1996 00:54:37 -0400
- From: Spider Boardman
-
- The test and patches for AutoLoader were also non-functional,
- since the regexp context (curpm) was still being clobbered by the
- filename manipulations:
-
-Index: t/lib/basename.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
- Date: Mon, 30 Sep 1996 00:54:37 -0400
- From: Spider Boardman
-
- Fix the number of tests.
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
- A different set of tests for File::Basename and friends.
-
-Index: t/lib/checktree.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/complex.t
-
- Date: Thu, 03 Oct 96 18:38:08 +0200
- From: Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
- # Complex numbers and associated mathematical functions
- # -- Raphael Manfredi, Sept 1996
-
- Tests for new version.
-
-Index: t/lib/db-btree.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/lib/db-hash.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/lib/env.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/fatal.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/filecache.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/filecopy.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/filefind.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/filepath.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/findbin.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/gdbm.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/lib/getopt.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/hostname.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/ndbm.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/lib/odbm.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/lib/parsewords.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/sdbm.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/lib/searchdict.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/selectsaver.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/symbol.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
- Date: Mon, 30 Sep 1996 00:54:37 -0400
- From: Spider Boardman
-
- The various new lib/*.t tests didn't all work. For some, it was
- only because the count of tests was wrong:
-
-Index: t/lib/texttabs.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/textwrap.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/lib/timelocal.t
-
- Date: Sun, 22 Sep 1996 00:59:56 +0200
- From: Gisle Aas
- Subject: More standard library test scripts
-
- This is a collection of test scripts for the standard library modules.
- Some of the tests does not pass unless some of the patches I have sent
- out are applied.
-
-Index: t/op/each.t
-
- Date: Mon, 30 Sep 1996 01:13:28 -0400
- From: Spider Boardman
- Subject: Re: pre extending hash? - need speed
-
- The patch below (which is relative to perl5.001l) implements
- "keys %hash = 50_000;" (or other integer-evaluable sizes) for
- pre-sizing hashes. I've only moved the patch forward from
- when I first did it. I'm sure the code in hv_ksplit could be
- improved.
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/op/glob.t
-
- Date: Tue, 01 Oct 1996 16:37:03 -0400 (EDT)
- From: Charles Bailey
- Subject: Re: glob test 1 failing...bad test or bug
-
- Under AIX 4.1.4, with LOCALE set en_GB (British english) glob test one
- fails because <op/*> sorts op/re_* before op/rea*, while
- $otherway = `echo op/*` sorts op/re_* after op/re[a-z]*.t
-
- This version doesn't rely on the sorting order.
-
-Index: t/op/magic.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
-Index: t/op/readdir.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: t/op/sort.t
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- A not necessarily gt a.
-
-Index: toke.c
-
- Date: Sat, 14 Sep 1996 17:08:16 -0400
- From: Gurusamy Sarathy
- Subject: whitespace induced lexer errors (with patch)
-
- I finally got around to fixing skipspace() to not indiscriminately
- overwrite oldbufptr and oldoldbufptr (which are used in making
- expectation decisions in the lexer).
-
- Date: Sat, 14 Sep 1996 18:55:16 -0400
- From: Gurusamy Sarathy
- Subject: perl lexer won't accept C<my($a,$b);$a<=>$b;>
-
- Date: Thu, 19 Sep 1996 11:58:22 -0400
- From: "Randy J. Ray" <rjray@uswest.com>
- Subject: Patch: Untaint FH flag and clean DATA handles
-
- This patch adds a IOf_UNTAINT flag in sv.h, as one of the possibles
- on an xpvio->xio_flags struct member. It is used to mark the given
- file handle as a clean source, even when tainting is turned on.
- There are also patches to pp_sys.c in pp_sysread to check this flag
- before tainting data, and in pp_hot.c in do_readline for the same
- reason. Lastly, it patches toke.c to automatically set this flag on
- on a __DATA__ filehandle. The creation of the $pack::DATA
- pseudo-filehandle is already checked against running under eval, so
- this should not introduce any insecurity.
-
- This patch *does not*:
-
- * Add the "untaint" keyword.
-
-Index: util.c
-
- Date: Mon, 7 Oct 1996 22:03:00 +0300
- From: Jarkko Hietaniemi
- Subject: LC_COLLATE.
-
- Big patch to add, document, and test LC_COLLATE support.
-
- rewrote perl_init_i18n() completely.
- - reworded to be much more friendly and clear.
- - perl_init_fold() split to its own function.
- wrote mem_collxfrm().
-
-Index: utils/c2ph.PL
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: utils/h2ph.PL
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: utils/h2xs.PL
-
- Date: Sat, 21 Sep 1996 16:38:24 -0500
- From: Dean Roehrich
- Subject: h2xs bug fix
-
- The h2xs that is in perl5.003_05 has a regexp bug which prevents it from
- finding #define statements and filling the constant() function. This patch
- fixes that. The h2xs_test program found this--maybe people who are
- modifying h2xs should get a copy of the test program.
-
- This also adds a -d to enable debugging messages (there's just one for now).
- I've also placed some of the doc-related things in alphabetical order.
-
- h2xs_test can be found in my directory on CPAN. Those of you modifying
- xsubpp should know there's a test suite for that, too, called XSTEST which
- can also be found in my directory on CPAN.
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- Here is a patch for various typos and other defects in the Perl
- 5.003_05 pods, including the pods embedded in library modules.
-
-Index: utils/perldoc.PL
-
- Date: Sun, 29 Sep 1996 22:00:09 -0400 (EDT)
- From: Kenneth Albanowski
- Subject: perldoc patch
-
- Ilya has found that this change makes perldoc much more useful under OS/2.
-
-Index: vms/config.vms
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: vms/descrip.mms
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: vms/genconfig.pl
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: vms/perlvms.pod
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: vms/vms.c
-
- Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT)
- From: Charles Bailey
- Subject: VMS patches to 5.003_05
-
-Index: x2p/a2p.pod
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- This patch just changed the old a2p.man page into a pod page.
-
-Index: x2p/s2p.PL
-
- Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST)
- From: "Joseph S. Myers" <jsm28@hermes.cam.ac.uk>
- Subject: Pod typos, pod2man bugs, and miscellaneous installation comments
-
- This patch just changed the old s2p.man page into a pod page.
- I then embedded the pod into the s2p script.
-
-
-----------------
-Version 5.003_05
-----------------
-
-This patch was primarily to fix bugs and to clean up some of
-the remaining issues from in 5.003_04. The details are described below.
-A very brief summary is:
-
-o Visible Changes to Core Functionality
-
- -Add support for a READLINE method to tied filehandles.
-
- -times function now uses CLK_TCK if HZ is not available, rather
- than just defaulting to 60. times output might change on some
- systems, but should be correct now.
-
- -AnyDBM_File (modifying ISA does not work as expected)
- Now behaves as documented: Modifying ISA works to select
- order in which *DB* modules are tried. The default is still
- the same.
-
-o Configure and build enhancements
-
- -Enhance detection of [gs]etpgrp() variants. Some systems have
- BSD-style behavior for one and POSIX for the other. Use
- [gs]etpgid() instead, whenever possible.
-
- -You can now build a shared libperl.so without running through
- the LD_RUN_PATH hoops, if your system supports appropriate
- ld command-line options. Solaris, NetBSD, and Linux are currently
- supported. Others are easy to add. (This makes like a lot easier
- for embedders.)
-
- -VMS updates.
-
- -Fix installperl and installman so that the -n option really only
- prints commands. (previously, it would still do the mkdirs.)
-
-o Bug fixes
-
- -debugger ought to work.
-
- -A new heredoc tag in Makefile.SH is now quoted. This prevented
- 5.003_04 from working most places.
-
- -numerous smaller ones, detailed below.
-
-o Specific Changes
-
-Here are the specific file-by-file changes.
-
-# This is my patch perl5.003_05.pat to perl5.003_04
-# The full description is below.
-# Please execute the following commands before applying this patch.
-# (You can feed this patch to 'sh' to do so.)
-# -- Andy Dougherty
-
-# We'll create a new test, but patch won't automatically make it
-# executable.
-touch t/io/read.t
-chmod +x t/io/read.t
-
-exit 0
-
-
-This is patch perl5.003_05.pat to perl version 5.003_04.
-This takes you from 5.003_04 to 5.003_05.
-
-To apply this patch, run the above commands,
-cd to your perl source directory and then type
-
- patch -p1 -N < perl5.003_05.pat
-
-The changes are described after each /^Index/ line below. This is
-designed so you can examine each change with a command such as
-
- csplit -k perl5.003_05.pat '/^Index:/' '{99}'
-
-Index: Changes
-
- Updated for 5.003_05.
-
-Index: Configure
-
- Allow command line or hint-file overrides of $afs.
-
- Allow trailing spaces in nm output for HPUX10.
-
- Check for newer BIND 'search' directives in /etc/resolv.conf as well
- as older 'domain' directive.
-
- Enhance detection of [gs]etpgrp() variants. Some systems have
- BSD-style behavior for one and POSIX for the other. Use
- [gs]etpgid() instead, whenever possible.
-
- Include -s in the -h summary of available options.
-
- Allow command-line override of $afs.
-
- Handle trailing spaces in nm-output on HPUX10.
-
- Set shrpenv for handling LD_RUN_PATH, if needed. (This used to
- be in Makefile.SH. Now it's available for other modules too.)
-
- When using shared libperl, avoid LD_RUN_PATH if possible by adding
- correct ld flags. Currently, Solaris and NetBSD get the correct
- -R $archlibexp/CORE, and Linux gets its
- -Wl,-rpath,$archlibexp/CORE flag. Other contributions are
- welcome.
-
-Index: INSTALL
-
- Correct libperl5 -> libperl typo.
-
- Describe MakeMaker's Warning (will try anyway) messages.
-
- More info on where and how to send reports.
-
- Add info on non-Unix ports.
-
-
-Index: MANIFEST
-
- Add new test t/io/read.t.
-
- Add new hints files for ODBM_File for ultrix and hpux.
-
- Add new pod checker script.
-
-Index: Makefile.SH
-
- A new heredoc tag in Makefile.SH needs to be quoted.
-
- shrpenv stuff moved to Configure.
-
-Index: Porting/Glossary
-
- Updated to match Configure.
-
-Index: README.vms
-
- VMS 5.003_05 Update.
-
-Index: av.h
-
- Subject: turbidity in av.[ch]
- Date: Sun, 10 Dec 1995 00:21:31 -0500
- From: Gurusamy Sarathy
-
- Some unclean code that I noticed today.
-
-Index: config_H
-
- Updated to match newest config_h.SH.
-
-Index: config_h.SH
-
- Updated to match Configure.
-
- Changed the DLSYM_NEEDS_UNDERSCORE comment to
- /**/ to conform to metaconfig style.
-
-Index: emacs/cperl-mode.el
-
- From: Ilya Zakharevich
- Subject: Newer CPerl-mode
-
-Index: ext/DB_File/DB_File.pm
-
- Update to DB_File 1.03.
-
-Index: ext/DB_File/DB_File.xs
-
- Update to DB_File 1.03.
-
-Index: ext/Fcntl/Fcntl.pm
-
- Date: Thu, 5 Sep 1996 18:19:14 -0400 (EDT)
- From: Chip Salzenberg
- Subject: No AutoLoader for Fcntl
-
- Just like Socket, Fcntl doesn't need splitting and AutoLoading.
-
-Index: ext/FileHandle/FileHandle.pm
-
- From: Roderick Schertler
- Subject: FileHandle::DESTROY for fd 0
-
- This fixes FileHandle::DESTROY when called on stdin.
-
-Index: ext/ODBM_File/ODBM_File.xs
-
- Attempt to correct for "Bad free" in Ultrix and HPUX versions of
- odbm.
-
-Index: ext/ODBM_File/hints/hpux.pl
-
- Try to work around "bad free" in dbmclose().
-
-Index: ext/ODBM_File/hints/ultrix.pl
-
- Try to work around "bad free" in dbmclose().
-
-Index: ext/Socket/Socket.pm
-
- Date: Thu, 5 Sep 1996 09:58:08 +0200
- From: Andreas Koenig
- Subject: Patch to inhibit autosplit on Socket.pm
-
- This patch inhibits production and use of a completely useless
- auto/Socket/autosplit.ix.
-
-Index: handy.h
-
- Make a little more C++-friendly for IBM's CSET++ compiler.
-
-Index: hints/convexos.sh
-
- Remove [gs]etpgrp workaround. Configure & perl.h should handle
- this now.
-
-Index: hints/hpux.sh
-
- Add note about possible gcc GR3 warning message.
-
- Remove [gs]etpgrp workaround. Configure & perl.h should handle
- this now.
-
-Index: hints/sco.sh
-
- Turn off optimization for stock cc. This appears to
- prevent miniperl core dumps.
-
-Index: hints/solaris_2.sh
-
- Catch GNU ld even though it doesn't identify itself as a GNU tool.
- Thanks to Tim Pierce <twpierce@midway.uchicago.edu>.
-
-Index: hints/sunos_4_1.sh
-
- Describe solution for the __lib_version problem with acc on
- SunOS.
-
-Index: hv.c
-
- Date: Thu, 05 Sep 1996 00:25:28 -0400
- From: Gurusamy Sarathy
- Subject: minor misc. cleanup
-
- This patch makes some minor cleanups to the sources. No change
- in functionality whatsoever.
-
- Date: Thu, 05 Sep 1996 02:52:21 -0400
- From: Gurusamy Sarathy
-
- Subject: debugger problems--another patch (was Re: 5.003_04)
-
- I have tried to avoid copying of hash keys that are passed to
- magical hashes, but it seems that copying may be unavoidable
- since the hv_*_ent() functions could be PADTMPs (and other
- SVs that may get reused) as keys.
-
- VMS dynamic %ENV fix
-
-Index: installman
-
- From: scotth@sgi.com
- Subject: Re: installperl feature request (was: Re: Upgrade 4.0x to 5.001m)
-
- Fix installperl so that the -n option really only prints commands.
- (previously, it would still do the mkdirs.)
-
- an "ignore installed" option, so that it doesn't bother to check
- to see if the target already exists (an optimization that I
- *don't* want it to do when I do #1 above)
-
-Index: installperl
-
- From: scotth@sgi.com
- Subject: Re: installperl feature request (was: Re: Upgrade 4.0x to 5.001m)
-
- Fix installperl so that the -n option really only prints commands.
- (previously, it would still do the mkdirs.)
-
- an "ignore installed" option, so that it doesn't bother to check
- to see if the target already exists (an optimization that I
- *don't* want it to do when I do #1 above)
-
-Index: lib/AnyDBM_File.pm
-
- AnyDBM_File (modifying ISA does not work as expected)
- Now behaves as documented: Modifying ISA works to select
- order in which *DB* modules are tried. The default is still
- the same.
-
-
- Add helpful "die" message to end of AnyDBM_File. Previously
- it would return a 0, and the failure would eventually show up
- somewhere else in the script and be hard to track down. It is
- a failure if perl can't open AnyDBM_File. The test regression
- suite is supposed to indicate this as a failure too.
-
-Index: lib/ExtUtils/Install.pm
-
- Updated to MakeMaker-5.38.
-
- Fix for VMS utime.
-
-Index: lib/ExtUtils/Liblist.pm
-
- Updated to MakeMaker-5.38.
-
-Index: lib/ExtUtils/MM_Unix.pm
- Updated to MakeMaker-5.38.
-
-Index: lib/ExtUtils/MakeMaker.pm
-
- Updated to MakeMaker-5.38.
-
- Updated to MakeMaker-5.39 to allow CFLAGS in hint files.
-
-Index: lib/ExtUtils/Manifest.pm
-
- Updated to MakeMaker-5.38.
-
-Index: lib/ExtUtils/Mkbootstrap.pm
-
- Updated to MakeMaker-5.38.
-
-Index: lib/ExtUtils/Mksymlists.pm
-
- Updated to MakeMaker-5.38.
-
-Index: lib/File/Find.pm
-
- From: Michael Mahan <mahanm@nextwork.rose-hulman.edu>
- Subject: Cwd::fastcwd in File::Find
-
- Is there a good reason why File::Find uses Cwd::fastcwd instead of
- Cwd:cwd when fastcwd isn't as portable?
- [In particular, fastcwd() doesn't work on AFS.]
-
-Index: lib/Math/Complex.pm
-
- There was a mistake in the sqrt routine in lib/Math/Complex.pm that
- gave wrong answers when the magnitude of the imaginary part of the
- argument exceeded the magnitude of the real part. Line 69 had too
- many sqrt($y)'s. Further, expressions were re-arranged so that
- calls to the expensive real sqrt() routine were reduced from 4 to 2
- in this case.
-
-Index: lib/open3.pl
-
- The I/O directions on the dad_wtr and kid_rdr were backwards.
- IO/Open3.pm didn't have this error.
-
-Index: lib/syslog.pl
-
- Date: Tue, 03 Sep 1996 20:33:54 -0400
- From: Roderick Schertler
- Subject: syslog.pl `use Socket' lossage
-
- syslog.pl tries but fails to use
- Socket.pm, the problem is that use doesn't return a true value. This
- module should be recast in terms of Sys::Syslog, of course.
-
-Index: makedepend.SH
-
- This patch eliminates "\|" in sed patterns in makedepend.SH, since
- they're not really needed anyway in this one case.
-
-Index: mg.c
-
- Ok, here's a tested patch for the debugger problem.
- I was missing the fact that DB::dbline magic is actually
- uppercase (which means hv_store_ent() etc., will pass SV keys
- to the vtbl_dbline handlers).
-
- Replace the oft-repeated mg_ptr incantation with
- the simple MgPVKEY macro.
-
- Rename MgPVKEY to MgPV (to match with HePV elsewhere). Add
- additional parens around the "mg".
-
- (lines near 584) Part of VMS changes. I don't know what this did.
-
- Date: Fri, 23 Aug 1996 17:20:22 -0400 (EDT)
- From: Chip Salzenberg
- Subject: Integerize mg.c; eliminate warning on C< local($)) >
-
- This patch converts magic variables ($!, $^E, etc.) to use integers
- (C<sv_setiv>) instead of floats. It also eliminates a warning from
- C< local($)) >, via a hack similar to $!.
-
-Index: mg.h
-
- Replace the oft-repeated mg_ptr incantation with
- the simple MgPVKEY macro.
-
- Rename MgPVKEY to MgPV (to match with HePV elsewhere). Add
- additional parens around the "mg".
-
-Index: nostdio.h
-
- Add _STDIO_LOADED (VMS) to list of guard symbols.
-
-Index: op.c
-
- From: Gurusamy Sarathy
- Subject: Re: \ ( @array ) busted for lexical @array (once more)
-
-Index: patchlevel.h
-
- Change to subversion 5.
-
-Index: perl.c
-
- Make floating point constants Locale-friendly.
-
-Index: perl.h
-
- One last LONG & co. fix (yet another cut'n'paste error) and a few
- minor cleanups. Nothing crucial.
-
- Make a little more C++-friendly for IBM's CSET++ compiler.
-
- Enhance detection of [gs]etpgrp() variants. Some systems have
- BSD-style behavior for one and POSIX for the other. Use
- [gs]etpgid() instead, whenever possible.
-
-Index: perlio.c
-
- Eliminate potential "signed vs. unsigned" warning
-
- Add PerlIO_reopen and PerlIO_cgetname functions.
-
-Index: perlsdio.h
-
- Don't supply redundant parameters for PerlIO_open and PerlIO_fdopen.
-
- Include PerlIO_reopen and PerlIO_getname.
-
- s/FILE_(CNT|PTR)_LVALUE/STDIO_(CNT|PTR)_LVALUE to fix a typo.
- This had prevented SV_FAST_FGETS from working anywhere.
-
- Include PerlIO_canset_cnt. I'm not sure how this is supposed to
- differ from STDIO_CNT_LVALUE.
-
-Index: pod/Makefile
-
- Remove trailing spaces in pods.
- Include a call to the checkpods script in the Makefile (though it's
- not ordinarily used by users).
-
-Index: pod/checkpods.PL
-
- New script to check for common errors in pods. This is not
- normally called during the perl build process, but you can
- use it with B<make check>.
-
-Index: pod/perlfunc.pod
-
- Document correct C<use POSIX ":wait_h";> usage.
-
- Add notes about POSIX [gs]etpgrp.
-
-Index: pod/perlipc.pod
-
- Document correct C<use POSIX ":wait_h";> usage.
-
-Index: pod/perlref.pod
-
- From: Gurusamy Sarathy
- Subject: Re: \ ( @array ) busted for lexical @array (once more)
-
-Index: pod/perltie.pod
-
- Date: Thu, 29 Aug 1996 15:14:51 +0200
- From: Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
- Subject: more TIEHANDLE
-
- This adds support for a READLINE method.
-
-Index: pod/perltrap.pod
-
- Here's documentation on the change in split's behavior between Perl 4
- and Perl 5.
-
- Subject: More (and less!) 425traps
-
- Large integer traps
-
- Precedence
-
- warn STDERR
-
- Change blank lines to empty lines.
-
-Index: pod/perlvar.pod
-
- Be explicit about $/="" matching empty lines, that is, lines
- with no spaces or tabs.
-
- Change blank lines to empty lines.
-
-Index: pp.c
-
- Date: Fri, 23 Aug 1996 17:22:40 -0400 (EDT)
- From: Chip Salzenberg
- Subject: Minor integer speedups in mathematics
-
- This patch provides minor speedups by using integer math and SVt_IV
- values when performing bitwise operations and modulus.
-
- Date: Tue, 3 Sep 1996 17:49:22 -0400 (EDT)
- From: Kenneth Albanowski
- Subject: Pack Patch (was Re: 5.002 - pack/unpack does not do "I" right)
-
- (double)auint cast added for call to sv_setnv().
-
-Index: pp_hot.c
-
- Date: Thu, 05 Sep 1996 00:25:28 -0400
- From: Gurusamy Sarathy
- Subject: minor misc. cleanup
-
- This patch makes some minor cleanups to the sources. No change
- in functionality whatsoever.
-
- Date: Thu, 29 Aug 1996 15:14:51 +0200
- From: Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
- Subject: more TIEHANDLE
-
- This adds support for a READLINE method.
-
-Index: pp_sys.c
-
- Clear any buffer space exposed by by read().
- This is almost certainly a bug-fix.
-
- Undef and then re-define my_chsize from Perl_my_chsize to
- just plain chsize if this system HAS_CHSIZE. This probably only
- applies to SCO. This shows the perils of having internal
- functions with the same name as external library functions :-).
-
- Use CLK_TCK if HZ is not available.
-
-Index: sv.c
-
- Fix more spots where we had PerlIO_stderr() and should have had
- Perl_debug_log instead.
-
- Date: Fri, 23 Aug 1996 17:26:42 -0400 (EDT)
- From: Chip Salzenberg
- Subject: Minor potential bug in AV creation
-
- I wasn't the one who originated this patch. But it looks like it
- would improve the safety of AV creation.
-
- Remove potentially incorrect casts on PerlIO_set_ptrcnt.
- 'ptr' is already STDCHAR, which is supposed to be the type of
- char used in stdio.h, so we shouldn't have to cast it.
-
-Index: t/io/read.t
-
- Clear any buffer space exposed by by read().
- This is almost certainly a bug-fix.
-
-Index: t/lib/db-btree.t
-
- Update to DB_File 1.03.
-
-Index: t/lib/db-hash.t
-
- Update to DB_File 1.03.
-
-Index: t/lib/db-recno.t
-
- Update to DB_File 1.03.
-
-Index: t/lib/io_sock.t
-
- From: Lupe Christoph <lupe@alanya.m.isar.de>
- Subject: Perl 5.003.03: race condition in t/lib/io_sock.t
-
- io_sock.t works by forking a subprocess it can communicate with.
- It has the subprocess wait for the main process by sleeping 10
- seconds or until an alarm arrives.
-
- With my setup, the alarm signal arrives *before* the child
- has a chance to ignore the alarm signal.
-
- I fixed this by moving the "$SIG{ALRM} = sub {};" up before the
- fork. It does not hurt to have the parent ignore alarms, too.
-
-Index: t/op/inc.t
-
- One last LONG & co. fix (yet another cut'n'paste error) and a few
- minor cleanups. Nothing crucial.
-
-Index: t/op/misc.t
-
- Date: Thu, 29 Aug 1996 15:14:51 +0200
- From: Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
- Subject: more TIEHANDLE
-
- This adds support for a READLINE method.
-
-Index: t/op/pack.t
-
- Date: Tue, 3 Sep 1996 17:49:22 -0400 (EDT)
- From: Kenneth Albanowski
- Subject: Pack Patch (was Re: 5.002 - pack/unpack does not do "I" right)
-
-Index: t/op/ref.t
-
- From: Gurusamy Sarathy
- Subject: Re: \ ( @array ) busted for lexical @array (once more)
-
-Index: universal.c
-
- Date: Thu, 29 Aug 96 07:05:10 BST
- From: Graham Barr
- Subject: Re: UNIVERSAL::class busted
-
- yes, but I also noticed that this does not check that the reference
- is an object, so the patch should be
-
-Index: unixish.h
-
- Change comment style so that IBM's picky xlc compiler doesn't
- think we've mistakenly tried to nest comments.
-
-Index: util.c
-
- One last LONG & co. fix (yet another cut'n'paste error) and a few
- minor cleanups. Nothing crucial.
-
-Index: utils/h2xs.PL
-
- Date: Fri, 6 Sep 1996 06:09:20 -0400 (EDT)
- From: Ilya Zakharevich
- Subject: updated h2xs
-
- Changes:
- a) Docs and examples for -x updated;
- b) Path to xxxx.h would not be changed to /usr/include/xxxx.h
- unless this file exists (outside of VMS, I'm afraid to make an error
- there). - Useful with -x option, when the file may be eaten via -I
- inside -F.
- c) .h file would be scanned only if needed.
- d) typemap would be generated (with T_PTROBJ).
- e) Documentation (=list) for autogenerated guys would be
- included into POD.
- f) duplicated XSUBs would not be generated;
- g) arguments to XSUBs being arrays are recognized (note that
- xsubpp would probably choke on such guys).
-
- -x option requires C-Scan-0.3 (releases a couple of minutes ago to
- ftp://ftp.math.ohio-state.edu/pub/users/ilya/perl
- should propagate to CPAN soon).
-
-Index: utils/perlbug.PL
-
- Fix typo $Config{'has_sockets'} ought to be $Config{'d_socket'};
-
-Index: utils/perldoc.PL
-
- More choices in the pager war. Unfortunately, we can't rely on
- all users agreeing with the Sysadmin's choice, nor can we
- assign a default preference order, since opinions vary. If the
- user doesn't have $ENV{PAGER} set, we do want to pick up one that
- at least works, so we'll try whatever Configure found.
-
-Index: vms/Makefile
-
- VMS 5.003_05 Update.
-
-Index: vms/config.vms
-
- VMS 5.003_05 Update.
-
-Index: vms/descrip.mms
-
- VMS 5.003_05 Update.
-
-Index: vms/ext/Stdio/Stdio.pm
-
- VMS 5.003_05 Update.
-
-Index: vms/ext/filespec.t
-
- VMS 5.003_05 Update.
-
-Index: vms/gen_shrfls.pl
-
- VMS 5.003_05 Update.
-
-Index: vms/perlvms.pod
-
- VMS 5.003_05 Update.
-
-Index: vms/vms.c
-
- VMS 5.003_05 Update.
-
-Index: vms/vmsish.h
-
- VMS 5.003_05 Update.
-
-
-----------------
-Version 5.003_04
-----------------
-
-This patch was primarily to fix bugs and to clean up some of
-the changes made in 5.003_03. The details are described below.
-A very brief summary is:
-
-o Visible Changes to Core Functionality
-
- -Allow and document permissions for FileHandle::new and
- IO::File::new.
- -glob in Safe compartment used to allow shell access; now
- it's in the same category as `` and system().
-
-o Configure and build enhancements
-
- -perl library name is again -lperl, not -lperl5 in some cases.
- -Several hint files no longer set -g -DDEBUGGING by default.
- Instead, they just turn off optimization, since that is
- probably what was intended.
- -Include OS/2 and Plan9 updates.
-
-o Bug fixes
-
- -SEGV with $_[0] and circular references fixed.
- -Ilya's debugger patch.
- -FAKE typeglobs fixed.
- -truncate with file name now works.
- -lval substr() no longer coredumps with refs
- -lval substr now clears lexicals in re-entered scopes.
- -core dump in caller() for signal handler for __DIE__.
-
-o Specific Changes
-
-Here are the specific file-by-file changes.
-
-# This is my patch perl5.003_04.pat to perl5.003_03
-# The full description is below.
-# Please execute the following commands before applying this patch.
-# (You can feed this patch to 'sh' to do so.)
-# -- Andy Dougherty
-
-# Obsolete perl4 hint file.
-rm -f hints/dnix.sh
-# Obsolete
-rm -f os2/notes
-
-# We'll create a new test, but patch won't automatically make it
-# executable.
-touch t/op/gv.t
-chmod +x t/op/gv.t
-
-exit 0
-
-
-This is patch perl5.003_04.pat to perl version 5.003_03.
-This takes you from 5.003_03 to 5.003_04.
-
-To apply this patch, run the above commands,
-cd to your perl source directory and then type
-
- patch -p1 -N < perl5.003_04.pat
-
-The changes are described after each /^Index/ line below. This is
-designed so you can examine each change with a command such as
-
- csplit -k perl5.003_04.pat '/^Index:/' '{99}'
-
-Index: Changes
-
- Updated for 5.003_04.
-
-Index: Configure
-
- Change name of shared libperl library back to libperl.so.xxx,
- so that a simple -lperl picks up either libperl.a or
- libperl.so.xxx.
-
- Check if $sh='' in case we've reloaded an old config.sh
-
-Index: INSTALL
-
- Change name of shared perl library to libperl, instead of
- libperl5.
-
- Add notes about fragility of shared libperl and the usefulness
- of archlib to separate different binaries.
-
-Index: MANIFEST
-
- os2/notes removed
-
- obsolete hints/dnix.sh removed.
-
- New typeglob test.
-
-Index: Makefile.SH
-
- For building shared libperl, relocate whole rule to
- inside the if test -f $osname/Makefile.SHs case.
-
-Index: Porting/Glossary
-
- Updated.
-
-Index: README.os2
-
- Updated.
-
-Index: av.c
-
- Subject: Re: SEGV with $_[0] and circular references
-
- Subject: random cleanup
-
- This patch removes a few obvious redundancies in the source.
-
-Index: config_H
-
- Updated. Note new comments to make AIX happy.
-
-Index: config_h.SH
-
- Change /*#define../**/ into /*#define../ **/
- to make IBM's xlc compiler shut up about nested comments.
- The /*#define FOO /**/ is a perfectly legal un-nested comment, and
- I wish IBM would fix it's blasted compiler instead. In the meantime
- we'll take mercy on the poor AIX user and get rid of the screenfulls
- of stupid warning messages. Thanks to Hallvard B Furuseth for the fix.
-
-Index: dump.c
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: ext/FileHandle/FileHandle.pm
-
- This patch documents the behavior of FileHandle::{new,open} with
- regard to open modes. It also documents the exportation of Fcntl
- constants.
-
- This patch fixes a bug observed by Tom Christiansen: FileHandle::new
- didn't allow for file permissions after the file mode. Here's a patch.
-
-Index: ext/IO/lib/IO/File.pm
-
- This patch fixes a bug observed by Tom Christiansen: IO::File::new
- didn't allow for file permissions after the file mode. Here's a patch.
-
- This patch documents the behavior of IO::File::{new,open} with
- regard to open modes. It also documents the exportation of Fcntl
- constants.
-
-Index: ext/Opcode/Opcode.pm
-
- Subject: Re: glob in Safe compartment allows shell access
-
- I've moved the glob op into the same opcode tag as backticks and system
- and added a comment.
-
-Index: gv.c
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: handy.h
-
- Subject: Patch for LONG_MAX & co.
-
- Sorry about adding yet another #ifdef forest, but hopefully this
- should resolve the *_MAX issues permanently. It adds to the
- previously defined PERL_LONG_MAX, PERL_LONG_MIN, and PERL_ULONG_MAX
- symbols the complete set of
- /PERL_U?(CHAR|SHORT|INT|LONG)_(MAX|MIN)/, and installs aliases to
- those from /(I|U)(8|16|32|V)_(MAX|MIN)/ so that for any standard
- Perl typedef, like I32 or UV, you can reference I32_MAX or UV_MIN,
- and get appropriate figures. All references to LONG_(MIN|MAX) are
- changed appropriately.
-
- The .c changes have the side effect of making cast_uv properly use quad
- limits if quads are in use, but longs aren't 64 bit. Hopefully this all
- works, but I don't have any handy Crays to try it out on.
-
- Add notes on perl's internal types, specifically Quad_t and IV.
-
-Index: hints/hpux.sh
-
- Remove the d_bsdpgrp hint. The defaults should be ok.
-
-Index: hints/irix_6_2.sh
-
- Change optimize=-g to optimize=none to avoid pulling in -DDEBUGGING,
- unless that's what the user really wants.
-
-Index: hints/mpeix.sh
-
- Change optimize=-g to optimize=none to avoid pulling in -DDEBUGGING,
- unless that's what the user really wants.
-
-Index: hints/os2.sh
-
- Fixes for sh vs. bin_sh + cleanup.
-
-Index: hints/ultrix_4.sh
-
- Don't call optimize=-g, just call optimize=none. The -g
- pulls in -DDEBUGGING, which might not be wanted.
-
-Index: lib/ExtUtils/MM_Unix.pm
-
- .C$(obj_ext) removed under OS/2 - conflicts with .c$(obj_ext).
-
-Index: lib/ExtUtils/xsubpp
-
- Fix SCOPE? (See pod/perlxs.pod).
- Up version number to 1.938.
-
-Index: lib/Test/Harness.pm
-
- Add a return value to runtests - non-zero if all tests ran ok,
- zero otherwise.
-
-Index: lib/perl5db.pl
-
- Ilya's debugger patch.
- Undefined subroutine &Carp::longmess called at
- /opt/perl5.003_03/lib/perl5db.pl line 1423.
-
-
- Make perl5db compatible with the recent 'strict refs' enforcement
- in %SIG.
-
-Index: malloc.c
-
- A patch to perl5.003_02/malloc to give a sensible error abort() message
- in ANSI C, and to give it to stderr instead of stdout.
-
- Use config_h's STRINGIFY macro instead of pre-ANSI "p".
-
-Index: mg.c
-
- Subject: FAKE typeglobs seriously busted (with patch)
-
- Handling of fake typeglobs (scalars that are really globs
- in disguise) is seriously busted since 5.002 (it wasn't
- so in 5.001n).
- The problem is that mg_get() on a glob calls gv_efullname()
- which might coerce its first arg to a string.
-
- Sub-critical patch to conceivably fix some %SIG problems. (Shared hash key
- weren't being properly detected by some of the sig magic, but as shared
- hash keys wouldn't normally be used in %SIG it's unlikely this is a
- significant problem.)
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: myconfig
-
- Update perlio-related variables.
-
-Index: op.c
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: opcode.h
-
- Updated. See opcode.pl.
-
-Index: opcode.pl
-
- Subject: Re: truncate with file name does not work (with patch)
-
- The prototype for truncate was changed so that perl won't die
- with C<use strict;> when the first arg is a bareword (filehandle).
- I think it was Tom (as in "tchrist") who brought this up.
-
- Here's a patch that undoes the damage, makes it work with
- C<use strict;>, and adds to the testsuite.
-
-Index: os2/Makefile.SHs
-
- perllib vs. LIBPERL
-
-Index: os2/diff.configure
-
- Updated.
-
-Index: os2/os2.c
-
- SH_PATH_INI vs. BIN_SH
-
-Index: os2/os2ish.h
-
- SH_PATH_INI added (needed to redefine SH_PATH for binary
- distribution).
- SH_PATH is redefined.
-
-Index: patchlevel.h
-
- SUBVERSION 4.
-
-Index: perl.h
-
- Subject: Patch for LONG_MAX & co.
-
- Sorry about adding yet another #ifdef forest, but hopefully this
- should resolve the *_MAX issues permanently. It adds to the
- previously defined PERL_LONG_MAX, PERL_LONG_MIN, and PERL_ULONG_MAX
- symbols the complete set of
- /PERL_U?(CHAR|SHORT|INT|LONG)_(MAX|MIN)/, and installs aliases to
- those from /(I|U)(8|16|32|V)_(MAX|MIN)/ so that for any standard
- Perl typedef, like I32 or UV, you can reference I32_MAX or UV_MIN,
- and get appropriate figures. All references to LONG_(MIN|MAX) are
- changed appropriately.
-
- The .c changes have the side effect of making cast_uv properly use quad
- limits if quads are in use, but longs aren't 64 bit. Hopefully this all
- works, but I don't have any handy Crays to try it out on.
-
- Add notes on perl's internal types, specifically Quad_t and IV.
-
-Index: perlio.c
-
- Removes an incorrect prototype for setlinebuf from
- perlio.c because it conflicts with the correct declaration in
- MachTen's stdio.h (and possibly other stdio's as well).
-
- Secondly, the code in perlio.c is not handling the (!PERLIO_IS_STDIO &
- HAS_F[GS]ETPOS) case. The patch fixes this omission (in a rather lumpen
- manner). I don't think this should affect platforms which try to hack a
- different path through the #ifdef forest, but this assertion would benefit
- from testing...
-
- Dominic Dunlop
-
-Index: plan9/config.plan9
-
- Updated.
-
-Index: plan9/fndvers
-
- Updated.
-
-Index: plan9/mkfile
-
- Updated.
-
-Index: plan9/setup.rc
-
- Updated.
-
-Index: pod/perldiag.pod
-
- Subject: lval substr() coredumps with refs (with patch)
-
- substr() coredumps with a target that is a ref, when it is used in
- an lvalue context.
- The patch below corrects the problem by stringifying the reference
- first (and emitting a warning when appropriate).
-
-Index: pod/perlxs.pod
-
- document xsubpp SCOPE:
-
-Index: pp.c
-
- Subject: lval substr() fails to clear lexicals in re-entered scopes (with patch)
-
- substr() in lvalue context interacts in buggy fashion with SVs that
- are !SvOK. This manifests itself with lexicals that have a REFCNT of
- 1, since these are merely "cleared in place" by setting SvOK_off.
-
- Subject: lval substr() coredumps with refs (with patch)
-
- substr() coredumps with a target that is a ref, when it is used in
- an lvalue context.
- The patch below corrects the problem by stringifying the reference
- first (and emitting a warning when appropriate).
-
- Subject: Patch for LONG_MAX & co.
-
-Index: pp_ctl.c
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: pp_hot.c
-
- Subject: Patch for LONG_MAX & co.
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: pp_sys.c
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: proto.h
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: run.c
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
-Index: sv.c
-
- Subject: random cleanup
-
- This patch removes a few obvious redundancies in the source.
-
- Subject: sv_setsv patch
-
- This patch changes neither behavior nor performance. However, it does
- reduce code size and improve maintainability by combining some common
- code in gv_fullname() and gv_efullname().
-
- From: Chip Salzenberg
- Subject: Track SVs for destruction when -DPURIFY
-
- When checking for memory leaks, I compiled Perl with "-DPURIFY".
- Although that flag improves the leak checking, it also breaks
- destruction of global objects, because SVs aren't kept in captive
- arenas any more.
-
- This patch rectifies the problem by providing an alternative
- method for keeping track of SVs when Perl is compiled for Purify.
- It has no effect on normal operation.
-
-
- Add comment about assert(len >=0) when len is unsigned anyway.
-
-Index: t/io/fs.t
-
- Subject: Re: truncate with file name does not work (with patch)
-
- The prototype for truncate was changed so that perl won't die
- with C<use strict;> when the first arg is a bareword (filehandle).
- I think it was Tom (as in "tchrist") who brought this up.
-
- Here's a patch that undoes the damage, makes it work with
- C<use strict;>, and adds to the testsuite.
-
- The "not implemented" branch is missing a "\n".
-
-Index: t/op/gv.t
-
- Subject: FAKE typeglobs seriously busted (with patch)
-
- Handling of fake typeglobs (scalars that are really globs
- in disguise) is seriously busted since 5.002 (it wasn't
- so in 5.001n).
-
- The problem is that mg_get() on a glob calls gv_efullname()
- which might coerce its first arg to a string.
-
-Index: t/op/substr.t
-
-
- Subject: lval substr() fails to clear lexicals in re-entered scopes (with patch)
-
- substr() in lvalue context interacts in buggy fashion with SVs that
- are !SvOK. This manifests itself with lexicals that have a REFCNT of
- 1, since these are merely "cleared in place" by setting SvOK_off.
-
- Subject: lval substr() coredumps with refs (with patch)
-
- substr() coredumps with a target that is a ref, when it is used in
- an lvalue context.
- The patch below corrects the problem by stringifying the reference
- first (and emitting a warning when appropriate).
-
-Index: toke.c
-
- Subject: Re: truncate with file name does not work (with patch)
-
- The prototype for truncate was changed so that perl won't die
- with C<use strict;> when the first arg is a bareword (filehandle).
- I think it was Tom (as in "tchrist") who brought this up.
-
- Here's a patch that undoes the damage, makes it work with
- C<use strict;>, and adds to the testsuite.
-
-Index: util.c
-
- Subject: Re: Perl 5.003 dumps core executing caller() in signal handler for
- __DIE__ (with patch)
-
- sv_2pv() might call croak() (which is not prepared to handle that
- when it calls sv_2pv(), itself). Likewise for warn() (but under
- slightly more esoteric circumstances--mg_get() in sv_2pv() might
- trigger a call to warn()).
-
-
- Subject: Patch for LONG_MAX & co.
-
- PERL_BADLANG is examined by default before issuing a warning during
- internationalization.
-
-Index: utils/h2xs.PL
-
- Make leading =head NAME item a paragraph so pod2man finds it.
-
-Index: utils/perldoc.PL
-
- Use col -x to filter out half-line feeds (ESC-9) from
- HP-UX nroff -man output. (col -x isn't portable -- SunOS
- doesn't support the -x option.)
-
-
-----------------
-Version 5.003_03
-----------------
-
-Most of the changes in 5.003_03 are to make the build and installation
-process more robust. The details are described below. A very brief
-summary is:
-
-o Visible Changes to Core Functionality
-
- -Support for tied filehandles.
-
-o Configure enhancements
-
- -How to build and install a shared libperl.so is now documented
- and supported, though it's not the default for most platforms.
-
-o Bug fixes
-
- -Support bit operations on strings longer than 15 bytes.
-
- -If a regex supplied to split() contains paranthesized subpatterns
- that can result in null matches, perl no longer coredumps.
-
- -Fix problems with each() on tied hashes.
-
- -Make h2ph architecture-independent by using Config at run-time
- rather than extraction time.
-
-o Specific Changes
-
-Here are the specific file-by-file changes.
-
-# This is my patch perl5.003_03.pat to perl5.003_02
-# The full description is below.
-# Please execute the following commands before applying this patch.
-# (You can feed this patch to 'sh' to do so.)
-# -- Andy Dougherty
-
-# Absorbed into Changes5.002
-rm -f Changes.Conf
-
-# Not needed.
-rm -f ext/POSIX/mkposixman.pl
-
-# Moved to README.os2. I'm not sure why the README files are
-# here rather than in the appropriate subdirectories.
-rm -f os2/README
-
-# Not needed.
-rm -f pod/Makefile.PL
-
-# New test for bit ops.
-touch t/op/bob.t
-
-# Patches that create new tests don't always make them executable.
-chmod +x t/*/*.t
-
-# Create a new directory for Porting and Patching info.
-mkdir Porting
-
-exit 0
-
-This is patch perl5.003_03.pat to perl version 5.003_02.
-This takes you from 5.003_02 to 5.003_03.
-
-To apply this patch, run the above commands,
-cd to your perl source directory and then type
-
- patch -p1 -N < perl5.003_03.pat
-
-The changes are described after each /^Index/ line below. This is
-designed so you can examine each change with a command such as
-
- csplit -k perl5.003_03.pat '/^Index:/' '{99}'
-
-Index: Changes
-
- Include 5.003_03 change notes.
-
- Move older change notes to separate files.
-
-Index: Changes5.000
-
- New file. Changes from perl4.036 to 5.000.
-
-Index: Changes5.001
-
- New file. Changes from 5.000 to 5.001
-
-Index: Changes5.002
-
- New file. Changes from 5.001 to 5.002
-
-Index: Changes5.003
-
- New file. Changes from 5.002 to 5.003
-
-Index: Configure
-
- Relaxed warning about ksh on exotic machines.
-
- Changed usesafe to useopcode.
-
- Add search for gzip and zip.
-
- Look more carefully for $sh (the Bourne-ish shell).
- Use that info to set $startsh correctly.
-
- Change prompts for PerlIO interface. See INSTALL
- for how this is supposed to work. The default is
- still the same as in 5.003_02, namely don't use
- any fancy new PerlIO stuff.
-
- Don't look for sigvec() since we don't actually use it.
- (Plus, it used to print an alarming misleading message about
- race conditions.)
-
- Look for stdio's _filbuf under the possible names of
- _filbuf, __filbuf, and _fill.
-
- New $useshrplib variable to control whether we build a shared
- libperl.so. The name of the library is in $libperl.
- Always install it in $installarchlib/CORE/$libperl.
-
- Check for <sys/resource.h> and <sys/wait.h> for NetBSD.
-
- Replace old $altmake stuff with newer autoconf-ish
- $make_set_make, which checks if $make sets $(MAKE). Now you
- choose an alternate make with sh Configure -Dmake=gmake (or
- whatever).
-
- Remove 'ln' for the list of essential commands. Simulate
- it with 'cp' if necessary.
-
- Change `logname` prompts to handle extra gratuitous spaces in
- Ultrix output.
-
- Autodetect os2.
-
- Fix silly bug in checking for fully-qualified names in /etc/hosts.
-
- Generalize Gconvert tests. Give correct and more useful
- error messages.
-
- Use $obj_ext instead of literal '.o' in the dynaloader test.
-
- Include appropriate header files in bcopy() and memcpy()
- tests. Note whether memmove is available.
-
- Check whether struct sigaction works (needed for Solaris 2.5
- with -Xc).
-
- Include appropriate header files for randbits test.
-
-Index: INSTALL
-
- Add note about space requirements.
-
- Update to match Configure changes (Opcode vs. Safe,
- useperlio, useshrplib, etc.)
-
- Reorganize the structure of some of the hints.
-
- Miscellaneous clarifications.
-
-Index: MANIFEST
-
- Updated. 5.003_02 introduced some massive patches, mostly
- due to spacing changes. I didn't bother to sort them all out;
- I just started with 5.003's MANIEFST.
-
-Index: Makefile.SH
-
- Support the new simplified shared libperl mechanism.
-
- Use new $make_set_make directive.
-
- Remove redundant libperl Make variable.
-
- Remove unnecessary MAB variable.
-
- Remove dependency of minitest on lib/Config.pm, since it could
- well have been a failure of configpm that inspired testing
- miniperl in the first place!
-
-Index: Porting/Glossary
-
- New file describing all the config.sh variables.
- Eventually, I hope to fill this directory with other useful
- stuff.
-
-Index: README.os2
-
- Replace old README.os2 with more up-to-date os2/README.
-
-Index: config_H
-
- Updated to match current Configure and config_h.SH.
- Some rearrangement of parts has occurred due to new
- dependencies in the metaconfig units.
-
-Index: config_h.SH
-
- Updated to match current Configure and config_h.SH.
- Some rearrangement of parts has occurred due to new
- dependencies in the metaconfig units.
-
- Include full descriptions of ARCHLIB, OLDARCHLIB, PRIVLIB,
- SITEARCH, and SITELIB. Previous versions just included the
- ~-expanded names (with unhelpful descriptions). No functionality
- is changed, but maybe it's a little better documented now.
-
-Index: doio.c
-
- Possibly Include <signal.h> and <unistd.h>
-
-Index: doop.c
-
- No longer prefer bcmp over memcmp when order doesn't matter.
-
- Support bit operations on strings longer than 15 bytes.
-
-Index: embed.h
-
- Auto-generated.
-
-Index: embed.pl
-
- Expand warning at the top.
-
-Index: ext/IO/IO.pm
-
- Clean up docmentation installation errors.
-
-Index: ext/IO/lib/IO/Seekable.pm
-
- Clean up docmentation installation errors.
-
-Index: ext/IO/lib/IO/Select.pm
-
- Clean up docmentation installation errors.
-
-Index: ext/Opcode/Opcode.xs
-
- Add support for tied filehandles.
-
-Index: ext/SDBM_File/sdbm/sdbm.h
-
- Change the Mymalloc to match Perl_malloc in perl.h.
-
-Index: ext/util/make_ext
-
- Typo change.
- Get rid of unused altmake.
-
-Index: global.sym
-
- Fix problems with each() on tied hashes.
-
-Index: handy.h
-
- Change safe*alloc functions to have prototypes that
- match the system's malloc and free types. That is, use
- Malloc_t instead of char *, and Free_t instead of void.
- This is necessary so . . .
-
- Safefree cast matches type of free() whether it's perl's
- malloc/free or the system's malloc/free.
-
-Index: hints/README.hints
-
- Remove out-of-date info.
-
- Document a bit about how hint files work.
-
-Index: hints/aix.sh
-
- qmaxmem hint doesn't apply to gcc.
-
-Index: hints/dgux.sh
-
- Configure will now automatically detect shared libperl stuff.
-
-Index: hints/dynixptx.sh
-
- Fix typo in comment.
-
- Configure will now automatically detect shared libperl stuff.
-
-Index: hints/epix.sh
-
- Use glibpth instead of libpth. This allows Configure to
- add local directories, such as /opt/local/lib, etc.
-
-Index: hints/irix_6_2.sh
-
- Include some info on cc -n32 compile.
-
-Index: hints/linux.sh
-
- Configure now tests gcvt() more thoroughly.
-
-Index: hints/machten_2.sh
-
- Update where to find dld.
-
-Index: hints/mips.sh
-
- Use glibpth instead of libpth.
-
-Index: hints/next_3.sh
-
- Build up $mab dynamically. Since $mab isn't used anywhere
- anymore, this is useless. However, $mab was never used for
- next_3.sh anyway, so there's been no change in functionality.
-
-Index: hints/next_4.sh
-
- Get rid of extraneous isnext_4 variable. Configure and
- Makefile.SH will use $osname and $osvers instead.
-
- Build up $mab dynamically based on available architectures.
-
- Absorb $mab into ccflags and ccdlflags. I hope that will
- cover everything. (Configure should automatically remove
- the -arch stuff from cppflags.)
-
- Configure now knows next4 needs to use a shared libperl.5.so.
-
- Allow users to use -Dprefix.
-
-Index: hints/os2.sh
-
- Try to update to reflect newer shared libperl stuff.
- I probably goofed :-).
-
-Index: hints/sco.sh
-
- Additional notes on using icc.
-
- Additional flags for dynamic loading.
-
-Index: hints/solaris_2.sh
-
- Perl.h no longer prefers bcmp, so it's again ok if Configure
- finds them, since perl will prefer the mem* versions anyway.
-
-Index: hints/sunos_4_0.sh
-
- Don't include <unistd.h>
-
-Index: hints/sunos_4_1.sh
-
- Add brief note about GNU as and ld.
-
- Don't include <unistd.h>
-
- Add notes about WHOA THERE messages.
-
-Index: hints/titanos.sh
-
- Include sfio in libswanted.
-
- Don't set libpth any more.
-
-Index: hints/umips.sh
-
- New hint file.
-
-Index: hv.c
-
- Use memcmp even in cases where ordering doesn't matter.
-
- Fix problems with each() on tied hashes.
-
-Index: installperl
-
- Simplify installation of shared libperl.so.
-
- Avoid reaching Command Failed!!! with /usr/bin/perl.
-
-Index: lib/AutoSplit.pm
-
- Clean up docmentation installation errors.
-
-Index: lib/ExtUtils/MM_Unix.pm
-
- Remove MAB references.
-
- Use 'useshrplib' instead of 'd_shrplib'
-
-Index: lib/ExtUtils/MakeMaker.pm
-
- Remove mab references.
-
-Index: lib/FindBin.pm
-
- Clean up docmentation installation errors.
-
-Index: lib/Symbol.pm
-
- Put back in the BEGIN { require 5.002; }. The version in
- 5.003_02 wouldn't work in 5.002 anyway. Further, the whole
- point of the construct is to catch 5.001m, so we can't use
- syntax introduced after 5.001m to do that.
-
-Index: lib/Text/Wrap.pm
-
- Remove double 'use strict'.
-
-Index: lib/perl5db.pl
-
- Add explicit '&' to avoid warnings under strict refs.
-
-Index: lib/sigtrap.pm
-
- Clean up docmentation installation errors.
-
-Index: makedepend.SH
-
- Use Configure's $sh and $make_set_make variables.
-
-Index: mg.c
-
- Include <unistd.h>
-
- Use Safefree() macro instead of safefree() function with
- a (possibly) incorrect cast. The whole point of the
- Safefree() macro is that it does the correct cast for you.
-
-
-Index: patchlevel.h
-
- Change to SUBVERSION 3.
-
-Index: perl.c
-
- Include <unistd.h>
-
-Index: perl.h
-
- No longer prefer bcmp slightly for comparisons that don't care
- about ordering.
-
- Rely on Configure setting SH_PATH.
-
- Change the function name to Pause() instead of pause() to
- avoid potential prototype problems. (This naming convention
- is similar to the Fwrite and Fflush macros.)
-
- Fix problems with each() on tied hashes.
-
- Work around crypt prototype problem on NeXT.
-
-Index: perlio.c
-
- Fixes to support non-std stdio.
-
-Index: perlio.h
-
- Try to document the various #defines a bit. This is far from
- finished.
-
- Remove a lot of trailing whitespace. (It's of no consequence, but
- but I'm not going to redo the patch just to put back in the trailing
- whitespace either.)
-
-Index: perlsdio.h
-
- Fixes to support non-std stdio.
-
-Index: perly.c
-
- Restore use of Safefree() macro.
-
-Index: perly.c.diff
-
- Restore use of Safefree() macro.
-
-Index: perly.h
-
- Delete duplicate line.
-
-Index: plan9/buildinfo
-
- Update.
-
-Index: pod/perlapio.pod
-
- Clean up docmentation installation errors.
-
-Index: pod/perlipc.pod
-
- Fix typo.
-
- Untaint port number.
-
-Index: pod/perlmod.pod
-
- Fix a minor nit regarding Exporter.
-
-Index: pod/perlre.pod
-
- Clean up docmentation installation errors.
-
-Index: pod/perltie.pod
-
- Add support for tied filehandles.
-
-Index: pod/perltrap.pod
-
- Clean up docmentation installation errors.
-
-Index: pod/perlxstut.pod
-
- Clean up docmentation installation errors.
-
-Index: pod/pod2man.PL
-
- Clean up docmentation installation errors.
-
-Index: pp.c
-
- Add support for tied filehandles.
-
- If a regex supplied to split() contains paranthesized subpatterns
- that can result in null matches, perl coredumps.
-
-Index: pp_hot.c
-
- Use memcmp instead of bcmp even when we don't care about order.
-
- Add support for tied filehandles.
-
-Index: pp_sys.c
-
- Include <unistd.h>, <sys/wait.h>, and <sys/resource.h>.
- (The latter two are especially for NetBSD.)
-
- Don't assume sys/time.h and sys/select.h can't coexist.
-
- Use Pause macro.
-
-Index: proto.h
-
- Fix safe*alloc and safefree prototypes.
-
-Index: regexec.c
-
- Use memcmp instead of bcmp even when we don't care about order.
-
-Index: sv.c
-
- Use memcmp instead of bcmp even when we don't care about order.
-
-Index: t/lib/opcode.t
-
- Add support for tied filehandles.
-
-Index: t/op/bop.t
-
- Support bit operations on strings longer than 15 bytes.
-
-Index: t/op/misc.t
-
- Add support for tied filehandles.
-
-Index: t/op/split.t
-
- If a regex supplied to split() contains paranthesized subpatterns
- that can result in null matches, perl coredumps.
-
-Index: toke.c
-
- Include <unistd.h>.
-
- Use memcmp instead of bcmp even when we don't care about order.
-
-Index: util.c
-
- Include <unistd.h>.
-
- Use correct types for safe*alloc and safefree functions.
-
-Index: utils/h2ph.PL
-
- Make h2ph architecture-independent by using Config at run-time
- rather than extraction time.
-
-Index: writemain.SH
-
- Remove unnecessary curlies. (They are a leftover from
- an older auto_init mechanism.)
-
-Index: x2p/Makefile.SH
-
- Use Configure's $sh and $make_set_make.
-
- Remove MAB stuff, since it's now in ccflags.
-
- Keep 5.003's RCS info.
-
-Index: x2p/a2p.h
-
- Keep 5.003's RCS info.
-
-Index: x2p/str.c
-
- Use Configure's FILE_filbuf macro instead of a raw _filbuf.
-
-
-----------------
-Version 5.003_02
-----------------
-
-o Visible Changes to Core Functionality
- - Redefining constant subs, or changing sub's prototype now give warnings.
- - Fixes for ++/-- of values close to max/min size of an integer
- - Warning for un-qualified bareword as handler in $SIG{}.
- - UNIVERSAL::isa can now be called as static method.
-
-o Changes in Core Internals
- - PerlIO abstraction added.
- Perl core and standard extensions no longer assume ANSI C's stdio is IO
- mechanism, Default Configure mode is still to use stdio via set of C macros.
- Alternate modes are to use stdio via one perlio.c module, or
- to use sfio if available.
-
- - Several bug fixs from perl5-porters
- - Make sources non-ANSI C correct again.
- - SUPER in gv.c
- - Last of shared-hash-key patches
- - eval '(0,1..3)'; # --> SegFault
- - coredumps after simple subsitutes.
- - Correction to UNIVERSAL::VERSION docs.
- - Fixed io_udp test.
- - Fixed another abuse of malloc'ed memory.
- - Enabled DEBUGING_MSTATS whenever perl's malloc() is used.
- - Reverted to default of not hiding perl's malloc (if used).
-
-o Changes in the Standard Library and Utilities
- - Fixed MakeMaker for static SDBM and builing in a link tree.
- - Upgraded to IO-1.09, and includes latest (still experimental) IO::Select.
- - Documentation/test tweak to DB_File
- - h2xs upgrade to allow use C::Scan module
-
-o Changes in OS-specific and Build-time Support
- - Attempted to re-created 5.003_01's NeXT support with metaconfig units.
- - Updated MANIFEST
- - make minitest now depends on lib/Config.pm, as some of tests require it.
- - Included latest plan9 sub-directory
- - Applied OS/2 patches.
- - Typo patch for VMS.
-
-
-----------------
-Version 5.003_01
-----------------
-
-Version 5.003_01 contains bugfixes and additions accumulated since
-version 5.002_01, since the patch to version 5.003 was deliberately
-kept simple. In addition to numerous small bugfixes in the core,
-library files, and documentation, this patch contains several
-significant revisions, summarized below:
-
-o Visible Changes to Core Functionality
-
- - A port to Plan9 has been started, and changes are integrated into
- the standard distribution. As of this release, the Perl core
- and several common extensions are working.
-
- - A set of basic methods in the UNIVERSAL class have been added to
- the Perl core. Since UNIVERSAL is an implicit member of every
- class's @ISA, the methods can be called via any object.
-
- - A mandatory warning has been added for 'declarations' of lexical
- variables using the "my" operator which mask an existing lexical
- variable declared in the same scope, making the previous variable
- inaccessible by its name.
-
- - The "use" and "require" operators have been extended to allow
- checking of the required module's version. The "use" operator
- can now be used for an immediate version check of Perl itself.
-
- - A new "strict" pragma, "strict untie", has been added, which
- produces an error if a tied value is untied when other references
- exist to the internal object implementing the tie.
-
- - Barewords used as associative array keys (i.e. when specifying
- an associative array element like $foo{__BAR} or on the left
- side of the => operator) may now begin with an underscore as
- well as an alphabetic character.
-
- - Some of the configuration information previously produced by the
- -v switch has been moved to the -V switch, in order to keep -v
- output concise.
-
-o Changes in Core Internals
-
- - Symbol table and method lookups have been made faster.
-
- - Perl subroutines which just return a constant value are now
- optimized at compile time into inline constants.
-
- - Management of keys for associative arrays has been improved to
- conserve space when the same keys are reused frequently, and
- to pass true Perl values to tie functions, instead of stringified
- representations.
-
- - Messages normally output to stderr may be directed to another
- stream when Perl is built. This allows some platforms to
- present diagnostic output in a separate window from normal
- program results.
-
- - A bug which caused suiperl to fail silently, albeit securely,
- in version 5.003 on some systems has been fixed.
-
- - Management of Unix-style signal handlers via the %SIG associative
- array has been made safer.
-
- - Several global C symbols have been renamed to eliminate collisions
- with system C header files or libraries on some platforms.
- Unfortunately, this means that dynamic extensions compiled under
- previous versions of Perl will need to be rebuilt for Perl
- 5.003_01. We're in the process of cleaning up Perl's C
- namespace to make it easier to link Perl with other binaries,
- so this will probably happen again between now and version 5.004.
- After that, we'll do our best to maintain binary compatibility
- between versions.
-
- - An alternate allocation strategy has been added to Perl's
- optional private memory management routines. This strategy,
- which may be selected when Perl is built, is designed to
- conserve memory in programs which allocate many small
- chunks of memory with sizes near a power of 2, as is often
- the case in Perl programs.
-
- - Several memory leaks in the creation and destruction of
- multiple interpreters have been fixed.
-
-o Changes in the Standard Library and Utilities
-
- - The Opcode extension, which allows you to control a program's
- access to Perl operations, has been added to the standard
- distribution. This extends the work begun in the original
- Safe extension, and subsumes it. The Safe interface is still
- available.
-
- - The IO extension, which provides a set of classes for object-
- oriented handling of common I/O tasks, has been added to the
- standard distribution. The IO classes will form the basis
- for future development of Perl's I/O interface, and will
- subsume the FileHandle class in the near future. The default
- class to which all Perl I/O handles belong is now IO::Handle,
- rather than FileHandle.
-
- - The ExtUtils::Embed library module, which provides a set
- of utility function to help in embedding Perl in other
- applications, has been added to the standard distribution.
-
- - The Fatal library module, which provides a simple interface
- for creating "do-or-die" equivalents of existing functions,
- has been added to the standard distribution.
-
- - The FindBin library module, which determines the full path
- to the currently executing program, has been added to the
- standard distribution.
-
- - The DB_File extension, and the Getopt::Long, Test::Harness,
- Text::Tabs, Text::Wrap, Time::Local and sigtrap library modules
- have been updated to the authors' latest versions.
-
- - The Carp library module now considers the @ISA chain when
- determining the caller's package for inclusion in error messages.
-
- - The h2xs, perlbug, and xsubpp utilities have been updated.
-
- - The standard Perl debugger has been updated, and the information
- provided to the debugger when an XSUB is called has been improved,
- making it possible for alternate debuggers (such as Devel::DProf)
- to do a better job of tracking XSUB calls.
-
- - The pod documentation formatting tools in the standard distribution
- can now handle characters in the input stream whose high bit is set.
-
- - The cperl-mode EMACS editing mode has been updated.
-
-o Changes in Documentation
-
- - Typographic and formatting errors have been corrected in the pod
- documentation for the core and standard library files
-
- - Explanations of several core operators have been improved
-
- - The perldebug, perlembed, perlipc, perlsec, and perltrap documents
- extensively revised.
-
-o Changes in OS-specific and Build-time Support
-
- - Support for the NeXT platform has been extended through
- NeXTSTEP/OPENSTEP 4.0, and now includes the ability to create MABs.
-
- - Support for OS/2 has been extended as well, and now includes
- options for building a.out binaries.
-
- - Support for VMS has also been extended, incorporating improved
- processing of file specification strings, optional suppression of
- carriage control interpretation for record-structured files,
- improved support for the -S command line switch, a number of
- VMS-specific bugfixes, and significantly improved performance
- in line-oriented reading of files.
-
- - Several hints files have been added or updated: aux.sh (updated),
- convexos.sh (updated), irix_4.sh (updated), irix_5.sh (updated),
- irix_6_2.sh (updated), next_3.sh (updated), next_3_2.sh (new),
- next_3_3.sh (new), next_4.sh (new), os2/sh (updated),
- sco.sh (updated), and solaris_2.sh (updated).
-
- - The test driver for the regression tests now reports when a set
- of tests have been skipped (presumable because the operation
- they're designed to test isn't supported on the current system).
diff --git a/contrib/perl5/Changes5.005 b/contrib/perl5/Changes5.005
deleted file mode 100644
index d0d19a2..0000000
--- a/contrib/perl5/Changes5.005
+++ /dev/null
@@ -1,19336 +0,0 @@
-Please note: This file provides a summary of significant changes
-between versions and sub-versions of Perl, not necessarily a complete
-list of each modification. If you'd like more detailed information,
-please consult the comments in the patches on which the relevant
-release of Perl is based. (Patches can be found on any CPAN
-site, in the .../src/5.0 directory for full version releases,
-or in the .../src/5/0/unsupported directory for sub-version
-releases.)
-
-
- ---------------
- CAST AND CREW
- ---------------
-
-To give due honor to those who have made Perl what is is today,
-here are some of the more common names in the Changes file, and their
-current addresses (as of July 1998):
-
- Gisle Aas <gisle@aas.no>
- Abigail <abigail@fnx.com>
- Kenneth Albanowski <kjahds@kjahds.com>
- Russ Allbery <rra@stanford.edu>
- Spider Boardman <spider@orb.nashua.nh.us>
- Tom Christiansen <tchrist@perl.com>
- Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
- M. J. T. Guy <mjtg@cus.cam.ac.uk>
- Jarkko Hietaniemi <jhi@iki.fi>
- Nick Ing-Simmons <nik@tiuk.ti.com>
- Andreas Koenig <a.koenig@mind.de>
- Doug MacEachern <dougm@opengroup.org>
- Paul Marquess <pmarquess@bfsec.bt.co.uk>
- Stephen McCamant <alias@mcs.com>
- Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Hans Mulder <hansmu@xs4all.nl>
- Matthias Neeracher <neeri@iis.ee.ethz.ch>
- Jeff Okamoto <okamoto@hpcc123.corp.hp.com>
- Ulrich Pfeifer <pfeifer@charly.informatik.uni-dortmund.de>
- Tom Phoenix <rootbeer@teleport.com>
- Joshua Pritikin <joshua.pritikin@db.com>
- Norbert Pueschel <pueschel@imsdd.meb.uni-bonn.de>
- Dean Roehrich <roehrich@cray.com>
- Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Roderick Schertler <roderick@argon.org>
- Kurt D. Starsinic <kstar@isinet.com>
- Dan Sugalski <sugalskd@osshe.edu>
- Larry W. Virden <lvirden@cas.org>
- Ilya Zakharevich <ilya@math.ohio-state.edu>
-
-And the Keepers of the Patch Pumpkin:
-
- Charles Bailey <bailey@newman.upenn.edu>
- Graham Barr <gbarr@pobox.com>
- Malcolm Beattie <mbeattie@sable.ox.ac.uk>
- Tim Bunce <Tim.Bunce@ig.co.uk>
- Andy Dougherty <doughera@lafcol.lafayette.edu>
- Gurusamy Sarathy <gsar@umich.edu>
- Chip Salzenberg <chip@perl.com>
-
-And, of course, the Author of Perl:
-
- Larry Wall <larry@wall.org>
-
-
-NOTE: Each change entry shows the change number; who checked it into the
-repository; when; description of the change; which branch the change
-happened in; and the affected files. The file lists have a short symbolic
-indicator:
-
- ! modified
- + added
- - deleted
- +> branched (from elsewhere)
- !> merged changes (from elsewhere)
-
-
-----------------
-Version 5.005_03 Third maintenance release of 5.005
-----------------
-
-____________________________________________________________________________
-[ 3198] By: gbarr on 1999/03/28 22:21:49
- Log: redo #3193 which #3195 undid
- Branch: maint-5.005/perl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 3197] By: gbarr on 1999/03/28 21:04:04
- Log: Updated CPAN.pm to 1.48
- Branch: maint-5.005/perl
- ! lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
-____________________________________________________________________________
-[ 3196] By: gbarr on 1999/03/28 17:21:27
- Log: AIX hints update from Jarkko
- Branch: maint-5.005/perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 3195] By: jhi on 1999/03/28 16:42:54
- Log: Update perlhist on 5_03.
- Branch: maint-5.005/perl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 3193] By: gsar on 1999/03/28 09:46:29
- Log: =end needs matching =begin (or installhtml will croak)
- Branch: maint-5.005/perl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 3192] By: gsar on 1999/03/28 09:10:15
- Log: update pod/Makefile
- Branch: maint-5.005/perl
- ! pod/Makefile
-____________________________________________________________________________
-[ 3191] By: gsar on 1999/03/28 08:43:47
- Log: integrate change#3180 from mainline
-
- fix bogus OPf_REF context for the BLOCK in C<grep BLOCK @foo>
- (sometimes caused bizarreness in the BLOCK)
- Branch: maint-5.005/perl
- +> t/op/grep.t
- !> MANIFEST op.c
-____________________________________________________________________________
-[ 3190] By: gsar on 1999/03/28 08:29:51
- Log: integrate change#3147 from mainline
-
- warn about newfangled vfork() caveats
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 3189] By: gsar on 1999/03/28 08:22:00
- Log: various pod niggles
- Branch: maint-5.005/perl
- ! pod/perl.pod pod/perldebug.pod pod/perldiag.pod
- ! pod/perlfunc.pod pod/perlhist.pod
-____________________________________________________________________________
-[ 3188] By: gsar on 1999/03/28 07:37:43
- Log: integrate binary compatible variant of change#3098 from mainline
- Branch: maint-5.005/perl
- ! op.c perl.h t/base/lex.t toke.c
-____________________________________________________________________________
-[ 3187] By: gsar on 1999/03/28 07:31:16
- Log: regularize CAPI declarations (CAPI extensions now build under
- the Borland compiler)
- Branch: maint-5.005/perl
- ! win32/GenCAPI.pl
-____________________________________________________________________________
-[ 3186] By: gsar on 1999/03/28 07:26:33
- Log: ensure XS_LOCKS stuff happens *before* XSUB is entered under
- -DPERL_CAPI
- Branch: maint-5.005/perl
- ! XSlock.h win32/GenCAPI.pl win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 3185] By: gbarr on 1999/03/28 06:37:41
- Log: integrate change #2846 from mainline
-
- a modified version of suggested patch for pack template 'Z'; added docs
- From: "Valeriy E. Ushakov" <uwe@ptc.spbu.ru>
- Date: Mon, 16 Jun 1997 03:00:31 +0400 (MSD)
- Message-ID: <%lOHpzIuGV@snark.ptc.spbu.ru>
- Subject: lack of pack/unpack letter with useful symmetry for C null delimited strings
- Branch: maint-5.005/perl
- ! pod/perldelta.pod pod/perlfunc.pod pp.c
- !> t/op/pack.t
-____________________________________________________________________________
-[ 3184] By: gbarr on 1999/03/28 06:35:50
- Log: integrate change # 3160 from mainline
-
- better description of OP_UNSTACK (s/unstack/iteration finalizer/)
- Branch: maint-5.005/perl
- ! opcode.h opcode.pl
-____________________________________________________________________________
-[ 3182] By: gbarr on 1999/03/28 03:40:28
- Log: Integrate changes #3067 and #3106 from mainline
-
- exempt $foo::a,$foo::b from warnings only if sort() was seen in package foo
- From: Graham Barr <gbarr@ti.com>
- Date: Wed, 3 Mar 1999 17:23:56 -0600
- Message-ID: <19990303172356.F7442@dal.asp.ti.com>
- Subject: Re: 'use strict' doesn't work for one-letter variables
-
- change#3067 failed package.t due to needless creation of $a and $b;
- fixed to do that only for C<sort BLOCK|CODE @foo>, not C<sort(@foo)>
- Branch: maint-5.005/perl
- ! gv.c op.c t/pragma/warn-1global
-____________________________________________________________________________
-[ 3179] By: gsar on 1999/03/28 02:14:04
- Log: fix thread segfault when passing large number of arguments to child
- a la C<Thread->new($foo, 1..1000)>
- Branch: maint-5.005/perl
- ! ext/Thread/Thread.xs t/lib/thread.t
-____________________________________________________________________________
-[ 3178] By: gbarr on 1999/03/28 01:39:23
- Log: fix $Config{'usethreads'} typo in perlthrtut
-
- From: Ian Maloney <szhmf9@wsblob.ubs.com>
- Date: Thu, 25 Mar 1999 16:40:14 +0100 (MET)
- Message-Id: <199903251540.QAA02439@wsblob.>
- Subject: perlthrtut documentation error
- Branch: maint-5.005/perl
- ! pod/perlthrtut.pod
-____________________________________________________________________________
-[ 3177] By: gbarr on 1999/03/28 01:09:59
- Log: Integrate #2910 from mainline
-
- slurping an empty file should return '' rather than undef, with
- commensurate effects on ARGV processing
- Branch: maint-5.005/perl
- ! pod/perldelta.pod pp_hot.c sv.h
- !> t/io/argv.t
-____________________________________________________________________________
-[ 3176] By: gbarr on 1999/03/28 00:00:30
- Log: Integrate relevant doc changes from mainline
- Branch: maint-5.005/perl
- !> (integrate 34 files)
-____________________________________________________________________________
-[ 3175] By: gbarr on 1999/03/27 19:20:32
- Log: Integrated #2352 and #2397 from mainline
-
- Implement $^C to allow perl access to -c flag - I think this
- was agreed once...
-
- Update docs and English.pm for $^C
- Branch: maint-5.005/perl
- ! gv.c mg.c
- !> lib/English.pm
-____________________________________________________________________________
-[ 3174] By: gbarr on 1999/03/27 18:21:01
- Log: Update Copyright year
- Branch: maint-5.005/perl
- ! EXTERN.h INTERN.h README av.c av.h cop.h cv.h deb.c doio.c
- ! doop.c dump.c form.h gv.c gv.h handy.h hv.c hv.h mg.c mg.h
- ! op.c op.h perl.h perly.y pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c
- ! regcomp.c regexec.c run.c scope.c sv.c sv.h toke.c util.c
- ! util.h
-____________________________________________________________________________
-[ 3173] By: gbarr on 1999/03/27 18:19:47
- Log: Update Test.pm to VERSION 1.122 from CPAN
- Branch: maint-5.005/perl
- ! lib/Test.pm
-____________________________________________________________________________
-[ 3154] By: jhi on 1999/03/24 21:40:51
- Log: Reword the shared library search path (LD_LIBRARY_PATH) info
- based on suggestions from Andy Dougherty.
- Branch: maint-5.005/perl
- ! INSTALL
-____________________________________________________________________________
-[ 3146] By: jhi on 1999/03/24 09:20:14
- Log: Bring in changes #2808 and #2812 (from mainline perl)
- that enhance the perlbug checklist.
- Branch: maint-5.005/perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 3130] By: jhi on 1999/03/23 22:02:23
- Log: Don't use config.msg to remind about the
- LD_LIBRARY_PATH because Makefile.SH takes
- care of that.
-
- Use shrplib in DEC O^W^Digital U^W^WTru64 UNIX.
- This used to be the default but in some MT or another it
- was dropped because of some transient error or another.
- Branch: maint-5.005/perl
- ! Configure hints/dec_osf.sh
-____________________________________________________________________________
-[ 3122] By: jhi on 1999/03/19 21:12:14
- Log: Describe the new Benchmark feature in more detail.
- Branch: cfgperl
- ! pod/perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3121] By: jhi on 1999/03/19 08:16:12
- Log: AVAILABILITY tuning.
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3119] By: jhi on 1999/03/17 14:33:43
- Log: More Apollo fixes.
- Branch: maint-5.005/perl
- ! README.apollo hints/apollo.sh t/lib/io_udp.t
-____________________________________________________________________________
-[ 3118] By: jhi on 1999/03/16 17:23:39
- Log: Nada.
- Branch: maint-5.005/perl
- ! README.apollo
-____________________________________________________________________________
-[ 3117] By: jhi on 1999/03/16 17:18:49
- Log: Apollo DomainOS AVAILABILITY.
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3116] By: jhi on 1999/03/16 17:14:00
- Log: Apollo DomainOS patch
- From: Johann Klasek <jk@auto.tuwien.ac.at>
- Subject: Re: DomainPerl
- Date: Tue, 16 Mar 1999 17:46:32 +0100
- Message-ID: <19990316174632.A19759@euklid.auto.tuwien.ac.at>
- Branch: maint-5.005/perl
- + README.apollo apollo/netinet/in.h
- ! MANIFEST hints/apollo.sh
-____________________________________________________________________________
-[ 3115] By: jhi on 1999/03/16 14:23:54
- Log: From: Paul Marquess <pmarquess@bfsec.bt.co.uk>
- To: Gurusamy Sarathy <gsar@activestate.com>,
- Graham Barr <gbarr@pobox.com>
- Cc: Perl5 Porters <perl5-porters@perl.org>,
- "Paul.Marquess" <Paul.Marquess@btinternet.com>
- Subject: [PATCH 5.005_56 & 5.005_03_T6] Upgrade DB_File to version 1.65
- Date: Sun, 14 Mar 1999 14:43:57 -0000
- Message-Id: <199903141841.NAA17040@defender.perl.org>
- Branch: maint-5.005/perl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/typemap
-____________________________________________________________________________
-[ 3114] By: jhi on 1999/03/16 12:42:20
- Log: Mention Rhapsody in 5.005_5X perldelta,
- and in Rhapsody and Netware in 5.005_0X and 5.005_5X
- *planned* AVAILABILITY.
- Branch: cfgperl
- ! pod/perl.pod pod/perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3113] By: jhi on 1999/03/16 10:38:53
- Log: perldelta niggling.
- Branch: cfgperl
- ! pod/perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 3111] By: jhi on 1999/03/16 10:28:10
- Log: AVAILABILITY update: still mention PowerUX,
- Novell Netware now has sources available.
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3105] By: jhi on 1999/03/12 15:54:57
- Log: Recognize the NetBSD packages collection.
- Branch: maint-5.005/perl
- ! hints/netbsd.sh
-____________________________________________________________________________
-[ 3104] By: jhi on 1999/03/12 09:07:04
- Log: From: pvhp@forte.com (Peter Prymmer)
- To: jhi@iki.fi, perl-mvs@perl.org, perlbug@perl.com
- Subject: [PATCH MT6,_56] was Re: Not OK: perl 5.00503 +MAINT_TRIAL_6 on os390 06.00 (UNINSTALLED)
- Date: Thu, 11 Mar 99 14:24:54 PST
- Message-Id: <9903112224.AA24346@forte.com>
- Branch: maint-5.005/perl
- ! README.os390 t/lib/posix.t
-____________________________________________________________________________
-[ 3102] By: jhi on 1999/03/10 11:01:20
- Log: From: pvhp@forte.com (Peter Prymmer)
- To: perl5-porters@perl.org
- Subject: [5.005_03-MT6]Patch: time passes
- Date: Tue, 9 Mar 99 18:42:17 PST
- Message-Id: <9903100242.AA29057@forte.com>
- Branch: maint-5.005/perl
- ! perl.c
-____________________________________________________________________________
-[ 3101] By: jhi on 1999/03/10 10:30:15
- Log: From: Mark-Jason Dominus <mjd@plover.com>
- To: perl5-porters@perl.com
- Subject: Minor fix to perlfunc.pod
- Date: Mon, 08 Mar 1999 20:05:53 -0500
- Message-ID: <19990309010553.13757.qmail@plover.com>
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 3094] By: jhi on 1999/03/06 16:16:15
- Log: From: Mark Kettenis <kettenis@wins.uva.nl>
- To: jhi@iki.fi
- Subject: Oops
- Date: Sat, 6 Mar 1999 17:15:35 +0100 (CET)
- Message-Id: <199903061615.RAA00207@delius.kettenis.nl>
- Branch: maint-5.005/perl
- ! README.hurd
-____________________________________________________________________________
-[ 3093] By: jhi on 1999/03/06 15:59:46
- Log: From: Mark Kettenis <kettenis@wins.uva.nl>
- To: jhi@iki.fi
- Subject: New Hurd README
- Date: Sat, 6 Mar 1999 16:46:12 +0100 (CET)
- Message-Id: <199903061601.RAA00185@delius.kettenis.nl>
- Branch: maint-5.005/perl
- ! README.hurd
-____________________________________________________________________________
-[ 3092] By: jhi on 1999/03/06 12:52:06
- Log: From: Paul_Green@stratus.com
- To: perl5-porters@perl.org
- Cc: jhi@iki.fi, Paul_Green@stratus.com
- Subject: [PATCH 5.005_03-MAINT_TRIAL_6]: platform: vos -- updates to VOS port of Perl5
- Date: Fri, 5 Mar 1999 18:08:49 -0500
- Message-ID: <1D1A4EF7AD4DD211A80D00A0C9D7DB665A035A@exna1.stratus.com>
- Branch: maint-5.005/perl
- ! vos/config.h vos/config_h.SH_orig
-____________________________________________________________________________
-[ 3091] By: jhi on 1999/03/06 12:42:21
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.005_03-MT6]VMS build patch
- Date: Fri, 05 Mar 1999 12:36:19 -0800
- Message-Id: <3.0.6.32.19990305123619.02d326a0@ous.edu>
- Branch: maint-5.005/perl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 3090] By: gsar on 1999/03/06 04:40:03
- Log: integrate change#3089 from mainline
-
- tolerate CRs after options
- Branch: maint-5.005/perl
- !> perl.c
-____________________________________________________________________________
-[ 3086] By: gbarr on 1999/03/05 01:48:05
- Log: #3085 was a bit premature, this is MT6 as 2 files were
- missing from MANIFEST
- Branch: maint-5.005/perl
- ! MANIFEST
-____________________________________________________________________________
-[ 3085] By: gbarr on 1999/03/05 01:41:06
- Log: Trial release 6
- Branch: maint-5.005/perl
- ! Changes
-____________________________________________________________________________
-[ 3084] By: gbarr on 1999/03/05 01:34:07
- Log: Don't process - as a file in Errno_pm.PL
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Thu, 4 Mar 1999 13:29:23 +0200 (EET)
- Message-ID: <14046.28307.561693.849859@alpha.hut.fi>
- Subject: Re: maint-5.005
- Branch: maint-5.005/perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 3081] By: gsar on 1999/03/05 00:14:33
- Log: protect against doubled backslashes
- Branch: maint-5.005/perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 3080] By: gsar on 1999/03/04 23:37:20
- Log: pick up AIX hints from mainline
- Branch: maint-5.005/perl
- !> hints/aix.sh
-____________________________________________________________________________
-[ 3079] By: gsar on 1999/03/04 21:09:43
- Log: tweak cast and crew
- Branch: maint-5.005/perl
- ! Changes
-____________________________________________________________________________
-[ 3078] By: gsar on 1999/03/04 21:03:04
- Log: update patchlevel, Changes
- Branch: maint-5.005/perl
- ! Changes README.win32 patchlevel.h
- !> pod/perlhist.pod
-____________________________________________________________________________
-[ 3075] By: gsar on 1999/03/04 07:36:53
- Log: integrate changes#3037,3041 from mainline
-
- fix longstanding bug: searches for lexicals originating within eval''
- weren't stopping at the subroutine boundary correctly
- --
- fix subtle bug in eval'' testsuite
- Branch: maint-5.005/perl
- !> op.c proto.h t/op/eval.t
-____________________________________________________________________________
-[ 3074] By: gsar on 1999/03/04 07:32:15
- Log: integrate change#3048 from mainline
-
- updated HP-UX notes from Jeff Okamoto <okamoto@xfiles.intercon.hp.com>
- Branch: maint-5.005/perl
- !> MANIFEST README.hpux
-____________________________________________________________________________
-[ 3073] By: gsar on 1999/03/04 07:29:43
- Log: integrate changes#3014,3015,3021,3032,3034,3045 from mainline
-
- more "correct" utbuf for utime()
- --
- avoid modifying readonly values from qw()
- --
- ansify perlio.c, fix PerlIO-ish typos
- --
- add README.hpux
- --
- s/print STDERR/warn/ suggested by abigail@fnx.com; add $VERSION
- --
- destroy PL_svref_mutex in perl_destruct()
- Branch: maint-5.005/perl
- +> README.hpux
- !> MANIFEST doio.c ext/DynaLoader/dl_beos.xs
- !> ext/DynaLoader/dl_cygwin32.xs iperlsys.h
- !> lib/ExtUtils/MM_Unix.pm lib/Getopt/Std.pm perl.c perlio.c
-____________________________________________________________________________
-[ 3072] By: gsar on 1999/03/04 07:12:15
- Log: integrate changes#2978,2979 from mainline
-
- bring '*' prototype closer to how it behaves internally
- --
- doc for change#2978
- Branch: maint-5.005/perl
- +> t/lib/fatal.t
- !> MANIFEST lib/Fatal.pm op.c pod/perlsub.pod t/comp/proto.t
-____________________________________________________________________________
-[ 3071] By: gsar on 1999/03/04 07:05:50
- Log: integrate changes#2919,2920,2921,2928,2932,2933 from mainline
-
- applied suggested patch, with several language/readability tweaks
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 29 Jan 1999 00:25:02 -0500
- Message-ID: <19990129002502.C2898@monk.mps.ohio-state.edu>
- Subject: Re: [PATCH 5.005_*] Better parsing docs
- --
- tweak READ() docs to mention $buffer must be altered by reference
- --
- use New() et al., rather than safemalloc() et al.
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 29 Jan 1999 23:27:22 +0100
- Message-ID: <36bd33f2.51029616@smtp1.ibm.net>
- Subject: [PATCH _03-MT5] POSIX.xs memory API
- --
- allow the Carp routines to pass through exception objects
- --
- clarify what a "line" is
- --
- From: "J. van Krieken" <John.van.Krieken@ATComputing.nl>
- Date: Thu, 4 Feb 1999 17:25:25 +0100 (MET)
- Message-Id: <199902041625.RAA14489@atcmpg.ATComputing.nl>
- Subject: s2p incorrectly handles hold space commands
- Branch: maint-5.005/perl
- !> ext/POSIX/POSIX.xs lib/Carp.pm pod/perlfunc.pod pod/perlop.pod
- !> pod/perltie.pod pod/perlvar.pod x2p/s2p.PL
-____________________________________________________________________________
-[ 3070] By: gsar on 1999/03/04 06:43:57
- Log: integrate changes#2748,2753,2754,2819,2824,2855,2866,2867,2869,2885,2888,2889
- from mainline
-
- From: "Jonathan I. Kamens" <jik@kamens.brookline.ma.us>
- Date: Thu, 3 Dec 1998 15:10:17 -0500
- Message-Id: <199812032010.PAA09692@jik.shore.net>
- Subject: sample checksum code in "perlfunc" man page is wrong
- --
- Todo tweaks
- --
- Todo updates from Andy Dougherty <doughera@lafayette.edu>
- --
- avoid garbage in db->dirbuf
- From: Masahiro KAJIURA <masahiro.kajiura@toshiba.co.jp>
- Date: Sat, 05 Dec 1998 14:14:54 +0900
- Message-Id: <199812050514.OAA23268@toshiba.co.jp>
- Subject: SDBM bug
- --
- tweak doc on bitwise ops
- --
- applied suggested patch; added tests
- From: Adam Krolnik <adamk@gypsy.cyrix.com>
- Date: Sat, 12 Dec 98 15:30:18 -0600
- Message-Id: <9812122130.AA03717@gypsy.eng.cyrix.com>
- Subject: Range operation doesn't handle IV_MAX
- --
- display full pathname of unreadable files
- --
- av_extend() doc tweak from Jan Dubois
- --
- update win32/pod.mak
- --
- note how to find REG_INFTY limit
- --
- add note about test-notty target
- --
- tweak PERL_STRICT_CR notes
- Branch: maint-5.005/perl
- !> Porting/pumpkin.pod README.win32 Todo Todo-5.005
- !> ext/SDBM_File/sdbm/sdbm.c pod/perldelta.pod pod/perlfunc.pod
- !> pod/perlguts.pod pod/perlop.pod pod/perlre.pod pp_ctl.c
- !> t/op/range.t utils/perldoc.PL win32/pod.mak
-____________________________________________________________________________
-[ 3069] By: gsar on 1999/03/04 06:02:29
- Log: integrate change#2747 from mainline
-
- typos in Pod/Text.pm
- Branch: maint-5.005/perl
- !> lib/Pod/Text.pm
-____________________________________________________________________________
-[ 3059] By: jhi on 1999/03/03 22:46:43
- Log: Document HP-UX 11 Y2K patch effect, based on
-
- From: "Richard L. England" <richard_england@mentorg.com>
- To: perlbug@perl.com
- CC: "England, Richard" <richard_england@mentorg.com>
- Subject: test io/fs.t number 18 fails on HPUX 11.0 when Y2K patch installed.
- Date: Fri, 26 Feb 1999 15:35:49 -0800
- Message-ID: <36D72FD4.4136C84F@mentorg.com>
- Branch: maint-5.005/perl
- ! INSTALL
-____________________________________________________________________________
-[ 3057] By: jhi on 1999/03/03 21:42:22
- Log: The *symbols patch (for Kurt's h2ph fixes) haunted us in AIX.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 3056] By: jhi on 1999/03/03 21:21:46
- Log: Fixed the pthreads_created_joinable test messed up
- by the Mach cthreads change.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 3055] By: jhi on 1999/03/03 18:17:55
- Log: Configure and make gotchas.
- Branch: maint-5.005/perl
- ! INSTALL
-____________________________________________________________________________
-[ 3051] By: jhi on 1999/03/02 08:24:52
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.005_0x and 5.005_5x]Minor update to README.VMS
- Date: Mon, 01 Mar 1999 16:10:57 -0800
- Message-Id: <3.0.6.32.19990301161057.03b1fc00@ous.edu>
- Branch: cfgperl
- ! README.vms
- Branch: maint-5.005/perl
- ! README.vms
-____________________________________________________________________________
-[ 3049] By: jhi on 1999/03/02 07:34:21
- Log: From: Spider Boardman <spider@leggy.zk3.dec.com>
- To: perl5-porters@perl.org
- Subject: [PATCH] Eliminate (valid) warning in byterun.c
- Date: Mon, 01 Mar 1999 17:27:59 -0500
- Message-Id: <199903012227.RAA00181@leggy.zk3.dec.com>
- Branch: cfgperl
- ! bytecode.h
- Branch: maint-5.005/perl
- ! bytecode.h
-____________________________________________________________________________
-[ 3028] By: jhi on 1999/02/26 14:40:00
- Log: HP-UX 11 threads.
-
- From: Jeff Okamoto <okamoto@xfiles.intercon.hp.com>
- To: perl5-porters@perl.org
- Cc: jhi@cc.hut.fi
- Subject: Maint 5 and _54 with threading on HP-UX 11.00
- Date: Wed, 3 Feb 1999 12:57:18 -0800 (PST)
- Message-Id: <199902032057.MAA10218@xfiles.intercon.hp.com>
-
- NOTE from jhi: the hpux hints could still be more robust by
- disabling gdbm when necessary.
-
- Currently if there's a libgdbm.sl (gdbm 1.7.3) which is pre-11,
- linking -lgdbm -lpthread creates an executable that instantly
- core dumps on a pthreads internal panic:
-
- ./gdpt
-
- Pthread internal error: message: __libc_reinit() failed, file: ../pthreads/pthread.c, line: 1096
- Return Pointer is 0xc082bf33
- 17639 quit (core dumped) ./gdpt
-
- You don't have to *use* either gdbm or pthreads in the executable,
- just linking them together is enough. Workaround is to recompile
- the GDBM under HP-UX 11, that makes the problem to go away.
- Branch: maint-5.005/perl
- ! hints/hpux.sh thread.h
-____________________________________________________________________________
-[ 3027] By: jhi on 1999/02/26 09:04:29
- Log: From: abigail@fnx.com
- To: perl5-porters@perl.org (Perl Porters)
- Subject: [PATCH 5.005_02 Getopt::Std] warn() instead of print STDERR.
- Date: Thu, 25 Feb 1999 22:08:41 -0500 (EST)
- Message-ID: <19990226030841.5985.qmail@alexandra.wayne.fnx.com>
- Branch: maint-5.005/perl
- ! lib/Getopt/Std.pm
-____________________________________________________________________________
-[ 3026] By: jhi on 1999/02/26 08:18:26
- Log: full_ar wasn't propagated.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 3013] By: jhi on 1999/02/22 19:27:44
- Log: Fix MacPerl version, change PowerUX to PowerMAX.
-
- From: Chris Nandor <pudge@pobox.com>
- To: jhi@iki.fi
- Cc: perl5-porters@perl.org
- Subject: Re: perl current availability as documented by perl.pod
- Date: Sun, 21 Feb 1999 11:06:03 -0500
- Message-Id: <v04020a07b2f5df60c9e3@[192.168.0.77]>
-
- From: Tom Horsley <Tom.Horsley@mail.ccur.com>
- To: jhi@iki.fi
- Cc: perl5-porters@perl.org
- Subject: Re: perl current availability as documented by perl.pod
- Date: Mon, 22 Feb 1999 13:08:30 GMT
- Message-Id: <199902221308.NAA19971@cleo.ccur.com>
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3010] By: jhi on 1999/02/22 10:21:55
- Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- To: gbarr@pobox.com (Graham Barr)
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.005_03-MT5] DB_File 1.64 patch
- Date: Mon, 22 Feb 1999 10:12:34 +0000 (GMT)
- Message-Id: <9902221012.AA17784@claudius.bfsec.bt.co.uk>
- Branch: maint-5.005/perl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/typemap t/lib/db-recno.t
-____________________________________________________________________________
-[ 3005] By: jhi on 1999/02/22 08:35:30
- Log: Configure/Perl knew how to look for use Mach cthreads
- but Configure didn't let them to be used ($osname 'next').
- Branch: cfgperl
- ! Configure config_h.SH
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 3004] By: jhi on 1999/02/21 15:46:02
- Log: Update Acorn AVAILABILITY.
- Branch: cfgperl
- ! pod/perl.pod
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 3003] By: jhi on 1999/02/21 14:50:42
- Log: From: rjk@linguist.dartmouth.edu (Ronald J. Kimball)
- To: perl5-porters@perl.org (Perl 5 Porters)
- Subject: PATCH: perlref.pod - symbolic ref example
- Date: Sat, 20 Feb 1999 17:32:11 -0500 (EST)
- Message-Id: <199902202232.RAA62306@linguist.dartmouth.edu>
- Branch: cfgperl
- ! pod/perlref.pod
- Branch: maint-5.005/perl
- ! pod/perlref.pod
-____________________________________________________________________________
-[ 3000] By: jhi on 1999/02/21 14:15:31
- Log: pack s/l for negative numbers was broken on platforms
- where sizeof(short) != 2 or sizeof(long) != 4 (Alpha, Cray).
- pack v was broken for sizeof(short) == 8 big-endian platforms
- (Cray), only zeros were produced.
- Branch: maint-5.005/perl
- ! perl.h pod/perlfunc.pod pp.c t/op/pack.t
-____________________________________________________________________________
-[ 2997] By: jhi on 1999/02/20 14:00:26
- Log: Glossary update.
- Branch: maint-5.005/perl
- ! Porting/Glossary
-____________________________________________________________________________
-[ 2995] By: jhi on 1999/02/20 12:25:10
- Log: Document #2893, Mach cthreads support.
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2986] By: jhi on 1999/02/19 23:26:34
- Log: Remove the unnecessary osf1 -D__LANGUAGE_C__.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2983] By: jhi on 1999/02/19 20:35:51
- Log: Mach cthreads:
- From: brie@corp.home.net (Brian Harrison)
- Subject: perl5.005_02 patch for mthreads
- To: perl5-porters@perl.org
- Date: Fri, 23 Oct 1998 14:20:57 -0700 (PDT)
- Message-ID: <Pine.GSO.4.04.9810231410220.11111-200000@sulaco.eos.home.net>
- Branch: maint-5.005/perl
- ! Configure Porting/Glossary config_h.SH malloc.c perl.h
- ! thread.h
-____________________________________________________________________________
-[ 2981] By: jhi on 1999/02/19 19:49:03
- Log: From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: Chaim Frenkel <chaimf@pobox.com>,
- Russ Allbery <rra@stanford.edu>,
- Jarkko Hietaniemi <jhi@iki.fi>,
- Gurusamy Sarathy <gsar@activestate.com>,
- Graham Barr <gbarr@pobox.com>
- Cc: bdensch@ameritech.net, perlbug@perl.com
- Subject: [PATCH] Re: Solaris 7 for Intel
- Message-ID: <19990219124404.A30182@O2.chapin.edu>
-
- and Glossary update.
- Branch: maint-5.005/perl
- ! Configure Makefile.SH Porting/Glossary
-____________________________________________________________________________
-[ 2980] By: gbarr on 1999/02/19 16:06:53
- Log: Make result of h2xs work when user adds C<use strict>
- Branch: maint-5.005/perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 2976] By: gsar on 1999/02/18 21:54:09
- Log: integrate change#2975 from mainline
-
- distinguish eval'' from BEGIN|INIT|END CVs (fixes buggy propagation
- of lexical searches in BEGIN|INIT|END)
- Branch: maint-5.005/perl
- !> cop.h cv.h op.c perly.c perly.y pp_ctl.c t/op/misc.t
- !> vms/perly_c.vms
-____________________________________________________________________________
-[ 2971] By: jhi on 1999/02/18 11:14:24
- Log: AIX syscalls.exp scan missed explicitly 32/64-bit syscalls.
-
- From: Joe Buehler <jhpb@hekimian.com>
- To: perl5-porters@perl.org
- Subject: setsid not detected by perl 5.005_02 configure under AIX 4.3
- Date: 12 Feb 1999 11:25:21 -0500
- Message-ID: <yd3lni3613i.fsf@ganymede.hekimian.com>
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2967] By: jhi on 1999/02/17 23:12:59
- Log: Make SCO/Unixware scan to work in Unixware, too.
-
- From: Tom Hughes <thh@cyberscience.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00555 on i386-svr4 [actually Unixware 2.1] (UNINSTALLED)
- Date: 17 Feb 1999 15:34:15 +0000
- Message-ID: <yekg185nix4.fsf@elva.cyberscience.com>
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2956] By: jhi on 1999/02/15 21:03:28
- Log: OpenBSD sparc SHMLBA (like change #2945).
- Branch: maint-5.005/perl
- ! ext/IPC/SysV/SysV.xs
-____________________________________________________________________________
-[ 2950] By: jhi on 1999/02/15 13:37:28
- Log: AVAILABILITY sync.
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2906] By: jhi on 1999/02/13 14:55:47
- Log: AVAILABILITY sync.
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2905] By: gsar on 1999/02/13 00:12:53
- Log: integrate change#2898 from mainline
-
- support win32_putenv()
- Branch: maint-5.005/perl
- !> mg.c util.c win32/GenCAPI.pl win32/makedef.pl win32/perlhost.h
- !> win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 2904] By: jhi on 1999/02/12 21:23:30
- Log: Add README.hurd, from Mark Kettenis <kettenis@wins.uva.nl>.
- Branch: maint-5.005/perl
- + README.hurd
- ! MANIFEST
-____________________________________________________________________________
-[ 2900] By: jhi on 1999/02/12 12:07:28
- Log: SCO ODT/OSR release scanning.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2897] By: jhi on 1999/02/12 11:24:25
- Log: Undo a big bad paste from change #2884.
- Branch: maint-5.005/perl
- ! hints/openbsd.sh
-____________________________________________________________________________
-[ 2896] By: jhi on 1999/02/12 11:19:52
- Log: Update the error message of db-recno.t to DB version 1.86
- and the URL to www.sleepycat.com instead of www.bostic.com.
- Branch: maint-5.005/perl
- ! t/lib/db-recno.t
-____________________________________________________________________________
-[ 2895] By: gsar on 1999/02/12 11:18:59
- Log: integrate change#2854 from mainline
-
- compatibility fix: magic non-propagation in foreach implicit localization
- Branch: maint-5.005/perl
- !> pp_ctl.c t/op/local.t
-____________________________________________________________________________
-[ 2884] By: jhi on 1999/02/12 08:36:14
- Log: OpenBSD pthreads awareness, thanks to
- David Leonard <david.leonard@csee.uq.edu.au>
- Branch: maint-5.005/perl
- ! Configure hints/openbsd.sh
-____________________________________________________________________________
-[ 2883] By: jhi on 1999/02/12 08:29:51
- Log: AVAILABILITY sync.
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2878] By: jhi on 1999/02/11 22:00:50
- Log: Replace changes #2783, #2784, #2785, with a single tested
- patch from Francois Desarmenien <desar@club-internet.fr>.
- Branch: maint-5.005/perl
- ! MANIFEST ext/GDBM_File/hints/sco.pl ext/IPC/SysV/SysV.xs
- ! hints/sco.sh
-____________________________________________________________________________
-[ 2876] By: jhi on 1999/02/11 20:43:17
- Log: From: Chris Nandor <pudge@pobox.com>
- To: perl5-porters@perl.org
- Subject: [PATCH] perlport.pod 1.39
- Date: Thu, 11 Feb 1999 12:28:35 -0500
- Message-Id: <v04020a2db2e8c3177123@[192.168.0.77]>
- Branch: maint-5.005/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 2875] By: jhi on 1999/02/11 20:35:08
- Log: The fpsetmask() really is SCO5 only.
- Branch: maint-5.005/perl
- ! unixish.h
-____________________________________________________________________________
-[ 2874] By: jhi on 1999/02/11 20:32:06
- Log: Change #2783 missed these.
- Branch: maint-5.005/perl
- ! ext/IPC/SysV/SysV.xs unixish.h
-____________________________________________________________________________
-[ 2873] By: jhi on 1999/02/11 20:27:45
- Log: Import the change #2810 from cfgperl.
- Branch: maint-5.005/perl
- + ext/GDBM_File/hints/sco.pl
- ! MANIFEST hints/sco.sh unixish.h
-____________________________________________________________________________
-[ 2872] By: jhi on 1999/02/11 19:57:37
- Log: Sync the current AVAILABILITY.
- Branch: maint-5.005/perl
- ! pod/perl.pod pod/perldelta.pod
-____________________________________________________________________________
-[ 2871] By: jhi on 1999/02/11 19:42:54
- Log: Copied the GNU/Hurd hints file over from cfgperl
- because it works well enough (there are still some
- rough edges in Hurd), verified via private
- email from Mark Kettenis <kettenis@wins.uva.nl>
- Branch: maint-5.005/perl
- + hints/gnu.sh
-____________________________________________________________________________
-[ 2864] By: jhi on 1999/02/11 08:45:00
- Log: From: Spider Boardman <spider@zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on RISC-ultrix 4.4 (UNINSTALLED)
- Date: Wed, 10 Feb 1999 23:33:31 -0500
- Message-Id: <9902110433.AA12816@abyss.zk3.dec.com>
- Branch: maint-5.005/perl
- ! doio.c ext/IPC/SysV/SysV.xs hints/ultrix_4.sh
-____________________________________________________________________________
-[ 2863] By: jhi on 1999/02/11 08:35:35
- Log: AVAILABILITY.
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2858] By: gsar on 1999/02/11 07:10:59
- Log: remove dup hunk
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2857] By: gsar on 1999/02/11 07:09:20
- Log: sync with parent version of perldelta.pod
- Branch: maint-5.005/perl
- !> pod/perldelta.pod
-____________________________________________________________________________
-[ 2853] By: gsar on 1999/02/11 00:33:06
- Log: integrate change#2816 from mainline
-
- minor bug in dumping blessed subrefs
- Branch: maint-5.005/perl
- !> ext/Data/Dumper/Dumper.pm
-____________________________________________________________________________
-[ 2852] By: gsar on 1999/02/10 23:17:49
- Log: fair warning about -Dusethreads
- Branch: maint-5.005/perl
- ! Configure INSTALL README.threads
-____________________________________________________________________________
-[ 2851] By: jhi on 1999/02/10 23:00:39
- Log: Snapshot of the ongoing AVAILABILITY discussion.
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2850] By: jhi on 1999/02/10 16:07:32
- Log: OS390 and Windows AVAILABILITY entries enhanced.
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2849] By: jhi on 1999/02/10 12:39:46
- Log: AS/400 and Mac were not described right.
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2848] By: jhi on 1999/02/10 09:13:49
- Log: Added AVAILABILITY section.
- Branch: maint-5.005/perl
- ! pod/perl.pod
-____________________________________________________________________________
-[ 2837] By: jhi on 1999/02/08 14:51:39
- Log: Fix typo introduced in change #2836.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2836] By: jhi on 1999/02/08 14:44:31
- Log: Augment change #2809, the h2ph-*symbols patch.
- Branch: maint-5.005/perl
- ! Configure t/lib/h2ph.pht
-____________________________________________________________________________
-[ 2815] By: gsar on 1999/02/05 03:44:50
- Log: integrate change#2242 from mainline
-
- fix skipspace() to properly account for newlines in eval''-ed
- strings (caused bogus line numbers in diagnostics and debugger)
- Branch: maint-5.005/perl
- !> toke.c
-____________________________________________________________________________
-[ 2814] By: jhi on 1999/02/04 21:21:39
- Log: Stratus perlport update.
- Branch: maint-5.005/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 2813] By: jhi on 1999/02/04 21:16:54
- Log: Stratus VOS update.
-
- From: Paul_Green@stratus.com
- To: jhi@iki.fi
- Subject: RE: VOS changes for Perl5.005_03 are ready!
- Date: Thu, 4 Feb 1999 14:51:07 -0500
- Message-ID: <1D1A4EF7AD4DD211A80D00A0C9D7DB665A0168@exna1.stratus.com>
- Branch: maint-5.005/perl
- + vos/vos_accept.c
- ! MANIFEST README.vos perl.c pod/perlport.pod vos/Changes
- ! vos/build.cm vos/compile_perl.cm vos/config.h
- ! vos/config_h.SH_orig vos/perl.bind vos/test_vos_dummies.c
- ! vos/vos_dummies.c vos/vosish.h
-____________________________________________________________________________
-[ 2809] By: jhi on 1999/02/03 19:54:16
- Log: h2ph fixes + Configure patch to support them.
-
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- To: Graham Barr <gbarr@pobox.com>, Jarkko Hietaniemi <jhi@iki.fi>,
- Gurusamy Sarathy <gsar@engin.umich.edu>
- Cc: perl5-porters@perl.org
- Subject: [PATCH 5.00503_MT5] h2ph.PL
- Date: Tue, 2 Feb 1999 19:48:06 -0500
- Message-ID: <19990202194806.E10647@O2.chapin.edu>
- Branch: maint-5.005/perl
- ! Configure utils/h2ph.PL
-____________________________________________________________________________
-[ 2802] By: jhi on 1999/02/02 17:41:23
- Log: From: John Bley <jbb6@acpub.duke.edu>
- To: perlbug@perl.org
- Subject: [PATCH]5.005_54 (DOC) fix minor typos
- Date: Tue, 2 Feb 1999 07:52:52 -0500 (EST)
- Message-ID: <Pine.SOL.3.91.990202075115.23589A-100000@soc11.acpub.duke.edu>
- Branch: maint-5.005/perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 2790] By: jhi on 1999/02/02 16:51:45
- Log: Re-introduce the typo corrections (update to CGI 2.46
- overran them).
- Branch: maint-5.005/perl
- ! lib/CGI.pm
-____________________________________________________________________________
-[ 2781] By: jhi on 1999/02/02 14:27:01
- Log: Update the MkLinux note.
- Branch: maint-5.005/perl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 2775] By: jhi on 1999/02/02 13:13:24
- Log: Mention lib/Dumpvalue.pm.
- Branch: maint-5.005/perl
- ! pod/roffitall
-____________________________________________________________________________
-[ 2767] By: jhi on 1999/02/02 12:29:57
- Log: Demangle spaces to tab+space.
- Branch: maint-5.005/perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2758] By: jhi on 1999/02/02 10:51:26
- Log: Detypo.
- Branch: maint-5.005/perl
- ! lib/Math/Trig.pm
-____________________________________________________________________________
-[ 2755] By: jhi on 1999/02/02 09:07:51
- Log: Make FreeBSD 2.2.7 work with -Duseshrplib -ders.
- Branch: maint-5.005/perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2752] By: jhi on 1999/02/01 22:15:12
- Log: Add perlthrtut.pod.
-
- From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org
- Subject: perlthrtut.pod
- Date: Mon, 01 Feb 1999 10:57:11 -0800
- Message-Id: <3.0.6.32.19990201105711.02e62540@ous.edu>
- Branch: maint-5.005/perl
- + pod/perlthrtut.pod
- ! MANIFEST pod/Makefile pod/buildtoc pod/perldelta.pod
- ! pod/roffitall
-____________________________________________________________________________
-[ 2741] By: gbarr on 1999/02/01 03:00:42
- Log: Fix typecasts in #2728
-
- From: "G. Del Merritt" <del@intranetics.com>
- Date: Fri, 29 Jan 1999 11:47:25 -0700
- Message-Id: <199901291847.LAA04828@jhereg.perl.com>
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on MSWin32-x86-object 4.0 (PATCH included)
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2740] By: gsar on 1999/02/01 02:43:07
- Log: CAPI inheritance tweak and doc
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2739] By: jhi on 1999/01/31 18:31:54
- Log: Undo changes #2730 and #2731 and replace them
- with an extensively tested patch from
- Anton Berezin <tobez@plab.ku.dk> (via private email).
- Branch: maint-5.005/perl
- ! Makefile.SH hints/freebsd.sh
-____________________________________________________________________________
-[ 2738] By: gsar on 1999/01/31 05:04:32
- Log: fix bogus CAPI inheritance from change#2541
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2737] By: gsar on 1999/01/31 04:55:06
- Log: remove the big ugly thing jhi sneezed into INSTALL :-)
- Branch: maint-5.005/perl
- ! INSTALL
-____________________________________________________________________________
-[ 2736] By: jhi on 1999/01/30 12:57:06
- Log: From: pvhp@forte.com (Peter Prymmer)
- To: perl-mvs@perl.org, perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_5 on os390 05.00 (UNINSTALLED)
- Date: Fri, 29 Jan 99 19:22:31 PST
- Message-Id: <9901300322.AA19136@forte.com>
-
- (slighty edited at the end)
- Branch: maint-5.005/perl
- ! README.os390
-____________________________________________________________________________
-[ 2735] By: jhi on 1999/01/30 11:49:54
- Log: Undo 5.005-devel random, srandom mention.
- Branch: maint-5.005/perl
- ! INSTALL
-____________________________________________________________________________
-[ 2734] By: jhi on 1999/01/29 22:22:00
- Log: Add perlreftut.
- Branch: maint-5.005/perl
- + pod/perlreftut.pod
- ! MANIFEST pod/perl.pod pod/perldelta.pod pod/roffitall
-____________________________________________________________________________
-[ 2732] By: gsar on 1999/01/29 20:09:44
- Log: integrate change#2720 from mainline
-
- missing space while munging CCFLAGS for PERL_CAPI
- Branch: maint-5.005/perl
- !> lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 2731] By: jhi on 1999/01/29 14:33:12
- Log: FreeBSD version numbers can be like "2.2.8-release".
- Branch: maint-5.005/perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2730] By: jhi on 1999/01/29 12:40:38
- Log: FreeBSD hints iteration (hopefully convergent).
- usethreads: require at least FreeBSD 2.2.8.
- signal type: mirror change #2429 in cfgperl.
- Branch: maint-5.005/perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2729] By: gbarr on 1999/01/29 05:06:32
- Log: Trial release 5
- Branch: maint-5.005/perl
- ! Changes patchlevel.h pod/perlhist.pod
-____________________________________________________________________________
-[ 2728] By: gbarr on 1999/01/29 04:10:37
- Log: From: Ted Law <tedlaw@cibcwg.com>
- Date: Wed, 27 Jan 1999 14:54:03 -0500 (EST)
- Message-Id: <199901271954.OAA07391@dcm2.cibcwg.com>
- Subject: POSIX::strftime buffer overflow problem
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2728] By: gbarr on 1999/01/29 04:10:37
- Log: From: Ted Law <tedlaw@cibcwg.com>
- Date: Wed, 27 Jan 1999 14:54:03 -0500 (EST)
- Message-Id: <199901271954.OAA07391@dcm2.cibcwg.com>
- Subject: POSIX::strftime buffer overflow problem
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2727] By: gbarr on 1999/01/29 04:09:57
- Log: From: Tom Spindler <dogcow@isi.net>
- Date: Thu, 28 Jan 1999 17:15:11 -0800
- Message-ID: <19990128171510.A11778@isi.net>
- Subject: [PATCH] BeOS dynamic loading support for perl5.005_03_MT4
- Branch: maint-5.005/perl
- + ext/DynaLoader/dl_beos.xs
- ! Configure MANIFEST Makefile.SH README.beos hints/beos.sh
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 2726] By: gbarr on 1999/01/29 03:30:51
- Log: Remove use of File::Slurp in t/lib/textfill.t
- Branch: maint-5.005/perl
- ! t/lib/textfill.t
-____________________________________________________________________________
-[ 2725] By: gbarr on 1999/01/29 03:11:41
- Log: From: Gurusamy Sarathy <gsar@ActiveState.com>
- Date: Wed, 27 Jan 1999 23:14:33 -0800
- Message-Id: <199901280714.XAA10176@activestate.com>
- Subject: Re: NOT OK: "@INC contains: ." after make install - MAINT_TRIAL_4 - 5.005_03 maintenance trial 4 MSWin32-x86-object
- Branch: maint-5.005/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2724] By: jhi on 1999/01/28 19:27:15
- Log: Change jhi@iki.fi to perlbug@perl.com.
- Cosmetic change in semctl probing messages.
- Branch: maint-5.005/perl
- ! Configure hints/freebsd.sh
-____________________________________________________________________________
-[ 2723] By: jhi on 1999/01/28 17:27:49
- Log: Yet another typo in a test program.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2722] By: jhi on 1999/01/28 17:13:52
- Log: The pthreads_created_joinable test had a typo,
- by blind luck the default value works almost anywhere.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2721] By: jhi on 1999/01/28 13:04:23
- Log: MinT support, adapted from change #2594.
- Branch: maint-5.005/perl
- + README.mint ext/POSIX/hints/mint.pl hints/mint.sh
- + mint/Makefile mint/README mint/errno.h mint/pwd.c mint/stdio.h
- + mint/sys/time.h mint/time.h
- ! MANIFEST doio.c malloc.c miniperlmain.c perl.c
- ! pod/perldelta.pod t/io/fs.t t/lib/safe2.t t/op/groups.t
- ! t/op/mkdir.t t/op/taint.t
-____________________________________________________________________________
-[ 2719] By: jhi on 1999/01/27 19:49:49
- Log: From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- To: perl5-porters@perl.org
- Subject: Re: [PATCH] perl5.005_03-MAINT_TRIAL_3: clarify Sv[INU]V versus Sv[INU]VX in perlguts
- Date: Tue, 26 Jan 1999 22:25:07 +0000
- Message-Id: <E105Gux-0000Ac-00@taurus.cus.cam.ac.uk>
- Branch: maint-5.005/perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 2718] By: jhi on 1999/01/27 19:46:04
- Log: io/fs.t fails test #18 (sense of tests appears to have been
- changed incompletely; this patch just skips the test attached,
- a la test #17 preceding it).
-
- From: "G. Del Merritt" <del@intranetics.com>
- To: perlbug@perl.com
- Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on MSWin32-x86-object (PATCHES included)
- Date: Tue, 26 Jan 1999 12:09:09 -0700
- Message-Id: <199901261909.MAA25525@jhereg.perl.com>
- Branch: maint-5.005/perl
- ! t/io/fs.t
-____________________________________________________________________________
-[ 2717] By: jhi on 1999/01/27 19:44:46
- Log: Miniperl fails to build (pp_sys.c was changed and iperlsys.h wasn't)
-
- From: "G. Del Merritt" <del@intranetics.com>
- To: perlbug@perl.com
- Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on MSWin32-x86-object (PATCHES included)
- Date: Tue, 26 Jan 1999 12:09:09 -0700
- Message-Id: <199901261909.MAA25525@jhereg.perl.com>
- Branch: maint-5.005/perl
- ! iperlsys.h
-____________________________________________________________________________
-[ 2716] By: jhi on 1999/01/27 19:38:36
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- To: perlbug@perl.com, vmsperl@perl.org
- Subject: NOT OK: perl 5.00503 +MAINT_TRIAL_4 on VMSAXP (Patch included, of course)
- Date: Tue, 26 Jan 1999 14:40:38 -0800
- Message-Id: <3.0.6.32.19990126144038.02e5d650@ous.edu>
-
- From: Dan Sugalski <sugalskd@osshe.edu>
- To: perl5-porters@perl.org, vmsperl@perl.org
- Subject: [PATCH 5.005_03-MAILT_TRIAL_4]VMS test patches
- Date: Tue, 26 Jan 1999 14:55:29 -0800
- Message-Id: <3.0.6.32.19990126145529.02f22280@ous.edu>
- Branch: maint-5.005/perl
- ! t/lib/textfill.t t/lib/textwrap.t vms/ext/Stdio/test.pl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 2715] By: jhi on 1999/01/27 19:34:28
- Log: From: Mark Bixby <markb@spock.dis.cccd.edu>
- To: perl5-porters@perl.org
- Subject: [PATCH perl5.005_03-MAINT_TRIAL_4] MPE port tweaks
- Date: Tue, 26 Jan 1999 16:32:18 -0800 (PST)
- Message-Id: <199901270032.QAA13395@spock.dis.cccd.edu>
- Branch: maint-5.005/perl
- ! hints/mpeix.sh mpeix/relink
-____________________________________________________________________________
-[ 2714] By: jhi on 1999/01/27 19:32:41
- Log: NetBSD does not do setruid, setrgid.
- Branch: maint-5.005/perl
- ! hints/netbsd.sh
-____________________________________________________________________________
-[ 2713] By: jhi on 1999/01/27 19:28:53
- Log: FreeBSD usethreads, based on private email with
- Anton Berezin <tobez@plab.ku.dk>.
- Branch: maint-5.005/perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2712] By: jhi on 1999/01/27 19:26:17
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- To: Mailing list Perl5 <perl5-porters@perl.org>
- Subject: [PATCH 5.005_*] OS/2 threads
- Date: Tue, 26 Jan 1999 13:39:46 -0500
- Message-ID: <19990126133946.A11594@monk.mps.ohio-state.edu>
- Branch: maint-5.005/perl
- ! os2/os2ish.h
-____________________________________________________________________________
-[ 2711] By: jhi on 1999/01/27 19:24:28
- Log: "make ok", "make okfile", and "make nok" were broken
- with -Duseshrplib, because of a shared typo.
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED)
- Date: Wed, 27 Jan 1999 12:27:15 -0500
- Message-Id: <199901271727.MAA233455@web.zk3.dec.com>
- Branch: maint-5.005/perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 2710] By: jhi on 1999/01/27 19:22:23
- Log: Errno fixes:
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED)
- Date: Wed, 27 Jan 1999 12:27:15 -0500
- Message-Id: <199901271727.MAA233455@web.zk3.dec.com>
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- To: perlbug@perl.com
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED)
- Date: Wed, 27 Jan 1999 13:31:16 -0500
- Message-Id: <199901271831.NAA241001@web.zk3.dec.com>
- Branch: maint-5.005/perl
- ! Configure ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 2709] By: jhi on 1999/01/27 19:17:35
- Log: Fix Configure installusrbinperl:
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- To: jhi@iki.fi
- cc: perl5-porters@perl.org
- Subject: Re: Not OK: perl 5.00503 +MAINT_TRIAL_4 on alpha-dec_osf-thread 5.0 (UNINSTALLED)
- Date: Wed, 27 Jan 1999 13:03:35 -0500
- Message-Id: <199901271803.NAA238257@web.zk3.dec.com>
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2708] By: gbarr on 1999/01/26 04:14:42
- Log: Trial release 4
- Branch: maint-5.005/perl
- ! Changes patchlevel.h pod/perlhist.pod
-____________________________________________________________________________
-[ 2707] By: gbarr on 1999/01/26 02:06:17
- Log: Add redef IO::Handle::* for setv?buf()
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 2706] By: jhi on 1999/01/24 22:26:12
- Log: Better AIX libc nm scan.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2703] By: jhi on 1999/01/24 14:26:18
- Log: Minor Configure adjustments.
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2702] By: jhi on 1999/01/24 13:57:33
- Log: Use usethreads.cbu consistently.
- Branch: maint-5.005/perl
- ! Configure hints/aix.sh hints/dec_osf.sh hints/dos_djgpp.sh
- ! hints/freebsd.sh hints/hpux.sh hints/irix_4.sh hints/irix_5.sh
- ! hints/irix_6.sh hints/irix_6_0.sh hints/irix_6_1.sh
- ! hints/linux.sh hints/os2.sh hints/solaris_2.sh
-____________________________________________________________________________
-[ 2701] By: jhi on 1999/01/24 13:55:43
- Log: Mention year-1900 and month 0..11 also here.
- Branch: maint-5.005/perl
- ! lib/Time/Local.pm
-____________________________________________________________________________
-[ 2700] By: jhi on 1999/01/24 13:52:36
- Log: Document Configure -Uinstallusrbinperl.
- Branch: maint-5.005/perl
- ! INSTALL pod/perldelta.pod
-____________________________________________________________________________
-[ 2699] By: jhi on 1999/01/24 13:01:57
- Log: perlopentut was missing.
- Branch: maint-5.005/perl
- + pod/perlopentut.pod
- ! MANIFEST pod/perldelta.pod
-____________________________________________________________________________
-[ 2697] By: jhi on 1999/01/24 12:31:33
- Log: Remove t/op/grent.t (t/op/pwent.t was removed by #2685).
- Branch: maint-5.005/perl
- - t/op/grent.t
- ! MANIFEST
-____________________________________________________________________________
-[ 2696] By: gsar on 1999/01/24 11:39:39
- Log: integrate changes#2255,2694 from mainline
-
- another win32 portability fix: make sysread() and syswrite()
- work on sockets
-
- better notes on 'make' on win32
- Branch: maint-5.005/perl
- ! README.win32 pp_sys.c win32/win32.h
-____________________________________________________________________________
-[ 2693] By: gbarr on 1999/01/24 00:53:31
- Log: Integrate changes #2646,2647 from cfgperl
-
- Show LANGUAGE env var when needed. (Augment change #2645).
-
- SHMLBA strikes back in NetBSD/sparc.
-
- From: Dave Nelson <David.Nelson@bellcow.com>
- To: jhi@iki.fi
- Subject: perl5.005_02 + IPC::SysV + NetBSD/Sparc
- Date: Mon, 18 Jan 1999 22:07:56 -0600
- Message-Id: <199901190407.WAA02543@longhorn.bellcow.com>
- Branch: maint-5.005/perl
- ! util.c utils/perlbug.PL
- !> ext/IPC/SysV/SysV.xs
-____________________________________________________________________________
-[ 2692] By: gbarr on 1999/01/24 00:28:52
- Log: Integrate #2630 from mainline and an errno save fix
- Branch: maint-5.005/perl
- !> doio.c
-____________________________________________________________________________
-[ 2691] By: gbarr on 1999/01/24 00:28:37
- Log: Update CGI modules to 2.46 and Getopt::Long to 2.19
- Branch: maint-5.005/perl
- ! lib/CGI.pm lib/CGI/Carp.pm lib/CGI/Cookie.pm lib/CGI/Fast.pm
- ! lib/CGI/Push.pm lib/Getopt/Long.pm t/lib/cgi-html.t
-____________________________________________________________________________
-[ 2690] By: gbarr on 1999/01/23 23:35:39
- Log: Integrate #2681 from cfgperl
-
- Better (I hope) LANGUAGE documentation.
- Branch: maint-5.005/perl
- !> pod/perllocale.pod
-____________________________________________________________________________
-[ 2689] By: gbarr on 1999/01/23 23:31:59
- Log: More nosuid patches
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 22 Jan 1999 12:12:45 +0200 (EET)
- Message-ID: <13992.20253.269284.841300@alpha.hut.fi>
- Subject: Re: [PATCH] 5.005*: the "nosuid" problem: v2
- Branch: maint-5.005/perl
- ! Configure config_h.SH perl.c perl.h pod/perldelta.pod
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 2688] By: gbarr on 1999/01/23 23:03:39
- Log: From: Anton Berezin <tobez@plab.ku.dk>
- Date: 21 Jan 1999 17:07:28 +0100
- Message-ID: <86emood2yn.fsf@lion.plab.ku.dk>
- Subject: [PATCH 5.005_54] hints/freebsd.sh - reflect the birth of version 4.0
- Branch: maint-5.005/perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 2687] By: gbarr on 1999/01/23 22:52:58
- Log: overload syntax is no longer experimental
- Branch: maint-5.005/perl
- ! lib/overload.pm
-____________________________________________________________________________
-[ 2685] By: gbarr on 1999/01/23 22:15:46
- Log: Remove t/op/pwent.t added from cfgperl, but is not robust.
- Branch: maint-5.005/perl
- - t/op/pwent.t
- ! MANIFEST
-____________________________________________________________________________
-[ 2684] By: gbarr on 1999/01/23 22:13:07
- Log: More doc typos from Abigail, and undo some in lib/diagnostics.pm
- from change #2672
-
- From: abigail@fnx.com
- Date: Tue, 19 Jan 1999 19:32:42 -0500 (EST)
- Message-Id: <19990120003242.19938.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/CGI.pm] Typos
-
- From: abigail@fnx.com
- Date: Tue, 19 Jan 1999 19:40:41 -0500 (EST)
- Message-Id: <19990120004041.20052.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/CPAN.pm] Typos
- Branch: maint-5.005/perl
- ! lib/CGI.pm lib/CPAN.pm lib/diagnostics.pm
-____________________________________________________________________________
-[ 2677] By: gbarr on 1999/01/22 03:38:07
- Log: Integrate #2645, #2648 and update patching.pod
-
- Document the GNU LANGUAGE env var.
-
- Mention /usr/share/locale.
-
- From: Daniel Grisinger <dgris@moiraine.dimensional.com>
- Date: 21 Jan 1999 00:17:35 -0700
- Message-Id: <m31zkpqels.fsf_-_@moiraine.dimensional.com>
- Subject: [PATCH] patching.pod, misc fixes (was Re: Which ? What ? Why ? When ?)
- Branch: maint-5.005/perl
- ! Porting/patching.pod
- !> pod/perllocale.pod
-____________________________________________________________________________
-[ 2676] By: gbarr on 1999/01/22 01:54:02
- Log: Fixup FindBin to use File::Spec
-
- Message-Id: <19990120185157.D24479@west-tip.transeda.com>
- Date: Wed, 20 Jan 1999 18:51:57 +0000
- From: Paul Johnson <pjcj@transeda.com>
- Subject: Re: [PATCH] 5005_54 Make FindBin work with UNC paths
- Branch: maint-5.005/perl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 2675] By: gbarr on 1999/01/22 01:38:31
- Log: Add new config values added for nosuid fix into VMS configure
-
- From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Wed, 20 Jan 1999 12:05:18 -0800
- Message-Id: <3.0.6.32.19990120120518.00a98470@ous.edu>
- Subject: [PATCH 5.005_03MT3]VMS configure tweak
- Branch: maint-5.005/perl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 2674] By: gbarr on 1999/01/22 01:36:35
- Log: Fix for buggy compiler optimization on dec for pack("I",...)
-
- From: Achim Bohnet <ach@mpe.mpg.de>
- Date: Wed, 20 Jan 1999 20:25:53 +0100
- Message-Id: <199901201925.UAA16940@o06.xray.mpe.mpg.de>
- Subject: [PATCH] Not OK: perl 5.00503 +MAINT_TRIAL_3 on alpha-dec_osf 4.0
- Branch: maint-5.005/perl
- ! pp.c
-____________________________________________________________________________
-[ 2673] By: gbarr on 1999/01/22 01:29:37
- Log: OS/2 patches from Ilya
-
- Date: Thu, 21 Jan 1999 02:08:27 -0500
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.00*] makedepend
- Message-Id: <19990121020827.A25509@monk.mps.ohio-state.edu>
-
- Date: Thu, 21 Jan 1999 02:46:34 -0500
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.005_*] Errno.pm suffers from \\ too
- Message-Id: <19990121024634.A25600@monk.mps.ohio-state.edu>
-
- Date: Thu, 21 Jan 1999 02:50:16 -0500
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.005_03] Resend of OS/2 patch
- Message-Id: <19990121025016.A25612@monk.mps.ohio-state.edu>
-
- Date: Thu, 21 Jan 1999 03:58:29 -0500
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.005_*] OS2::PrfDB was exploiting a bug in U32 XSUBs
- Message-Id: <19990121035829.A25822@monk.mps.ohio-state.edu>
- Branch: maint-5.005/perl
- ! ext/Errno/Errno_pm.PL makedepend.SH os2/Changes
- ! os2/Makefile.SHs os2/OS2/PrfDB/PrfDB.xs os2/os2.c
-____________________________________________________________________________
-[ 2672] By: gbarr on 1999/01/22 01:05:45
- Log: More doc typo patches from Abigail
-
- From: abigail@fnx.com
- Message-Id: <19990120001410.19645.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL 3 lib/AutoLoader.pm] Typos
- Date: Tue, 19 Jan 1999 19:14:10 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120004312.20152.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/Carp.pm] Typo
- Date: Tue, 19 Jan 1999 19:43:12 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120004429.20190.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/Cwd.pm] Typo
- Date: Tue, 19 Jan 1999 19:44:29 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120005241.20693.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/Safe.pm] Typo
- Date: Tue, 19 Jan 1999 19:52:41 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120005525.20788.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/SelfLoader.pm] Typos
- Date: Tue, 19 Jan 1999 19:55:25 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120005821.20926.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/Symbol.pm] Typo
- Date: Tue, 19 Jan 1999 19:58:21 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120010002.20973.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/Test.pm] Typo
- Date: Tue, 19 Jan 1999 20:00:02 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120013823.23015.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/diagnostics.pm] Typos (ignore
- Date: Tue, 19 Jan 1999 20:38:23 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120013909.23085.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/ops.pm] Typo
- Date: Tue, 19 Jan 1999 20:39:09 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120015817.24306.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/overload.pm] Typos
- Date: Tue, 19 Jan 1999 20:58:16 -0500 (EST)
-
- From: abigail@fnx.com
- Message-Id: <19990120020326.24373.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL3 lib/re.pm] Typos
- Date: Tue, 19 Jan 1999 21:03:26 -0500 (EST)
- Branch: maint-5.005/perl
- ! ext/Opcode/Safe.pm ext/Opcode/ops.pm ext/re/re.pm
- ! lib/AutoLoader.pm lib/Carp.pm lib/Cwd.pm lib/SelfLoader.pm
- ! lib/Symbol.pm lib/Test.pm lib/diagnostics.pm lib/overload.pm
-____________________________________________________________________________
-[ 2671] By: gbarr on 1999/01/22 00:40:13
- Log: Fix win32 for Borland compiler and spaces in paths
-
- From: Gurusamy Sarathy <gsar@activestate.com>
- Date: Mon, 18 Jan 1999 20:33:17 -0800
- Message-Id: <199901190433.UAA03656@activestate.com>
- Subject: [PATCH] 5.005_03-trial3 win32 issues
- Branch: maint-5.005/perl
- ! README.win32 win32/Makefile win32/config_sh.PL
- ! win32/makefile.mk win32/runperl.c
-____________________________________________________________________________
-[ 2637] By: gbarr on 1999/01/18 02:52:18
- Log: Update DB_File to 1.63
-
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Date: Tue, 29 Dec 1998 16:23:54 +0000 (GMT)
- Message-Id: <9812291623.AA20884@claudius.bfsec.bt.co.uk>
- Subject: PATCH DB_File 1.63 for 5.005_54 & 5.005_03
- Branch: maint-5.005/perl
- ! ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/dbinfo ext/DB_File/typemap
-____________________________________________________________________________
-[ 2636] By: gbarr on 1999/01/17 18:03:31
- Log: Trial release 3
- Branch: maint-5.005/perl
- ! Changes patchlevel.h
-____________________________________________________________________________
-[ 2635] By: gbarr on 1999/01/17 17:32:01
- Log: Update to CPAN-1.44
-
- From: Mark-Jason Dominus <mjd@plover.com>
- Date: Sat, 16 Jan 1999 17:22:06 -0500
- Message-ID: <19990116222206.3674.qmail@plover.com>
- Subject: Re: DOC PATCH (5.005_54 perlsub.pod)
- Branch: maint-5.005/perl
- ! lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
- ! pod/perlsub.pod
-____________________________________________________________________________
-[ 2634] By: gbarr on 1999/01/17 17:27:12
- Log: Fix for suidperl when script is on a nosuid filesystem
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Sun, 17 Jan 1999 16:27:06 +0200 (EET)
- Message-ID: <13985.62266.324824.292401@alpha.hut.fi>
- Subject: [PATCH] 5.005*: the "nosuid" problem: v2
- Branch: maint-5.005/perl
- ! Configure config_h.SH perl.c perl.h pod/perldiag.pod
-____________________________________________________________________________
-[ 2618] By: gbarr on 1999/01/16 19:18:26
- Log: Added Dumpvalue.pm
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 7 Dec 1998 02:44:25 -0500 (EST)
- Message-Id: <199812070744.CAA18949@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Dumpvar.pm
- Branch: maint-5.005/perl
- + lib/Dumpvalue.pm
- ! MANIFEST pod/perldelta.pod
-____________________________________________________________________________
-[ 2617] By: gbarr on 1999/01/16 19:09:36
- Log: Minor change to perlxstut and added perlopentut.pod
-
- From: Nathan Torkington <gnat@frii.com>
- Date: Sat, 26 Dec 1998 14:28:21 +1300 (NZDT)
- Message-ID: <13956.15285.933914.320849@localhost.frii.com>
- Subject: [PATCH] perlxstut.pod fix
-
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- Date: Sat, 09 Jan 1999 08:13:18 -0700
- Message-Id: <199901091513.IAA17512@jhereg.perl.com>
- Subject: perlopentut.pod
- Branch: maint-5.005/perl
- ! MANIFEST pod/perl.pod pod/perldelta.pod pod/perlxstut.pod
- ! pod/roffitall
-____________________________________________________________________________
-[ 2616] By: gbarr on 1999/01/16 18:59:55
- Log: Win32 changes from Jan
-
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 15 Jan 1999 23:38:35 +0100
- Message-ID: <36a7c10d.16311905@smtp1.ibm.net>
- Subject: [PATCH 5.005_03m2] Win32 Makefile patches
-
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sat, 16 Jan 1999 13:02:45 +0100
- Message-ID: <36a07da6.10722337@smtp1.ibm.net>
- Subject: [PATCH 5.005_03m2] minor tweaks to README.win32
- Branch: maint-5.005/perl
- ! README.win32 win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2615] By: gbarr on 1999/01/16 18:48:48
- Log: Jumbo patch from Sarathy for PERL_OBJECT & USE_THREADS
-
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Thu, 07 Jan 1999 00:12:00 -0500
- Message-Id: <199901070512.AAA23568@aatma.engin.umich.edu>
- Subject: Re: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds
-
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Thu, 14 Jan 1999 19:21:46 -0500
- Message-Id: <199901150021.TAA01886@aatma.engin.umich.edu>
- Subject: Re: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds
- Branch: maint-5.005/perl
- ! embed.h global.sym lib/ExtUtils/MM_Unix.pm objXSUB.h objpp.h
- ! op.c perl.c perl.h perly.c perly.y perly_c.diff pp.c proto.h
- ! sv.c t/io/fs.t toke.c win32/GenCAPI.pl win32/config.bc
- ! win32/makedef.pl win32/runperl.c win32/win32.c
-____________________________________________________________________________
-[ 2614] By: gbarr on 1999/01/16 16:48:38
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 15 Jan 1999 17:28:34 +0200 (EET)
- Message-Id: <199901151528.RAA08785@alpha.hut.fi>
- Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: NetBSD patches
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 15 Jan 1999 18:44:19 +0200 (EET)
- Message-Id: <199901151644.SAA08184@alpha.hut.fi>
- Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: allow skipping the "install also as /usr/bin/perl" question of installperl
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 15 Jan 1999 18:52:29 +0200 (EET)
- Message-Id: <199901151652.SAA11259@alpha.hut.fi>
- Subject: the promised "installusrbinperl + NetBSD" fix
- Branch: maint-5.005/perl
- ! Configure Makefile.SH hints/netbsd.sh installperl
- ! makedepend.SH unixish.h
-____________________________________________________________________________
-[ 2613] By: gbarr on 1999/01/16 16:28:40
- Log: From: Laszlo Molnar <ml1050@freemail.c3.hu>
- Date: Thu, 14 Jan 1999 22:37:26 +0100
- Message-ID: <19990114223726.A177@beeblebrox>
- Subject: [PATCH for 5.005_03-MAINT_TRIAL_2] dos-djgpp update
- Branch: maint-5.005/perl
- ! djgpp/config.over djgpp/djgpp.c
-____________________________________________________________________________
-[ 2612] By: gbarr on 1999/01/16 16:27:25
- Log: Hints for sco.sh to automatically support dynamic linking
-
- From: Peter Wolfe <wolfe@teloseng.com>
- Date: Mon, 11 Jan 1999 11:50:20 -0800 (PST)
- Message-Id: <199901111950.LAA01703@titan.teloseng.com>
- Subject: SCO 3.2v5 patch for perl5.005_03-MAINT_TRIAL_1
- Branch: maint-5.005/perl
- ! hints/sco.sh
-____________________________________________________________________________
-[ 2610] By: gbarr on 1999/01/14 03:07:33
- Log: Fix login in installperl for pods
-
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Mon, 4 Jan 1999 13:50:10 GMT
- Message-Id: <199901041350.NAA19665@cyclone.cise.npl.co.uk>
- Subject: PATCH to installperl
- Branch: maint-5.005/perl
- ! installperl
-____________________________________________________________________________
-[ 2609] By: gbarr on 1999/01/14 03:04:37
- Log: Fix incorrect "used only once" warnings
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 8 Jan 1999 04:37:10 -0500
- Message-ID: <19990108043710.A14390@monk.mps.ohio-state.edu>
- Subject: Re: change#965 flakiness
- Branch: maint-5.005/perl
- ! gv.c
-____________________________________________________________________________
-[ 2608] By: gbarr on 1999/01/14 02:56:46
- Log: Fixed double GLOB de-reference
-
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Sat, 09 Jan 1999 23:40:24 -0500
- Message-Id: <199901100440.XAA12360@aatma.engin.umich.edu>
- Subject: Re: IO::Pipe with perl -d (on HPUX)
- Branch: maint-5.005/perl
- ! ext/IO/lib/IO/Pipe.pm
-____________________________________________________________________________
-[ 2607] By: gbarr on 1999/01/14 02:53:40
- Log: Added Carp::cluck to perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2606] By: gbarr on 1999/01/14 02:44:04
- Log: New perlfaq*.pod from Tom (private mail)
- Branch: maint-5.005/perl
- ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod
-____________________________________________________________________________
-[ 2584] By: gbarr on 1999/01/08 04:50:56
- Log: implemented Ilya's suggested fix, and added a testcase
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 5 Jan 1999 00:56:01 -0500 (EST)
- Message-Id: <199901050556.AAA02597@monk.mps.ohio-state.edu>
- Subject: Re: Text::ParseWords: regex fix
- Branch: maint-5.005/perl
- ! lib/Text/ParseWords.pm t/lib/parsewords.t
-____________________________________________________________________________
-[ 2583] By: gbarr on 1999/01/08 04:50:03
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Thu, 7 Jan 1999 12:47:38 +0200 (EET)
- Message-Id: <199901071047.MAA24100@alpha.hut.fi>
- Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: ext/Errno_pm.PL: understand wrapper cppstdins
- Branch: maint-5.005/perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 2582] By: gbarr on 1999/01/08 03:37:55
- Log: More doc changes from Abigail, and included change #2575 from cfgperl
-
- From: abigail@fnx.com
- Message-ID: <19990107041434.22326.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Time/gmtime.pm] Typo fix
- Date: Wed, 6 Jan 1999 23:14:34 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107041746.22376.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Time/localtime.pm] Typo fix
- Date: Wed, 6 Jan 1999 23:17:46 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107042105.22527.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/User/grent.pm] Typo fix
- Date: Wed, 6 Jan 1999 23:21:05 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107042254.22624.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/User/pwent.pw] Typo fix
- Date: Wed, 6 Jan 1999 23:22:54 -0500 (EST)
- Branch: maint-5.005/perl
- ! lib/Math/Trig.pm lib/Time/gmtime.pm lib/Time/localtime.pm
- ! lib/User/grent.pm lib/User/pwent.pm
-____________________________________________________________________________
-[ 2578] By: gbarr on 1999/01/07 04:30:26
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Wed, 06 Jan 1999 13:47:34 -0800
- Message-Id: <3.0.6.32.19990106134734.0334d260@ous.edu>
- Subject: [PATCH 5.005_02-MT2, 5.005_5x]VMS.C tweak for occasional system() error
- Branch: maint-5.005/perl
- ! vms/vms.c
-____________________________________________________________________________
-[ 2577] By: gbarr on 1999/01/07 04:26:28
- Log: Another set of doc patches from Abigail
-
- From: abigail@fnx.com
- Message-ID: <19990107032132.20124.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRAIL2 lib/Net/hostent.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:21:32 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107032445.20178.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Net/netent.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:24:45 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107032834.20362.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRAIL2 lib/Term/Complete.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:28:34 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107033136.20440.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRAIL2 lib/Term/ReadLine.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:31:36 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107033351.20540.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/CGI/Apache.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:33:51 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107033933.20707.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/CGI/Push.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:39:33 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107034548.20936.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/File/Copy.pm] Typo fixes
- Date: Wed, 6 Jan 1999 22:45:48 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107034856.21056.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/File/Spec.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:48:56 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107035113.21174.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/File/Spec/Mac.pm] Typo fixes
- Date: Wed, 6 Jan 1999 22:51:13 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107035612.21522.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Math/BigFloat.pm] Typo fix
- Date: Wed, 6 Jan 1999 22:56:12 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107035842.21585.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Math/BigInt.pm] Typo fixes
- Date: Wed, 6 Jan 1999 22:58:41 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107040644.22009.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Text/Wrap.pm] Typo fixes
- Date: Wed, 6 Jan 1999 23:06:44 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107040955.22087.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Tie/Array.pm] Typo fixes
- Date: Wed, 6 Jan 1999 23:09:55 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990107041136.22174.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/Tie/Hash.pm] Typo fix
- Date: Wed, 6 Jan 1999 23:11:36 -0500 (EST)
- Branch: maint-5.005/perl
- ! lib/CGI/Apache.pm lib/CGI/Push.pm lib/File/Copy.pm
- ! lib/File/Spec.pm lib/File/Spec/Mac.pm lib/Math/BigFloat.pm
- ! lib/Math/BigInt.pm lib/Net/hostent.pm lib/Net/netent.pm
- ! lib/Term/Complete.pm lib/Term/ReadLine.pm lib/Text/Wrap.pm
- ! lib/Tie/Array.pm lib/Tie/Hash.pm
-____________________________________________________________________________
-[ 2568] By: gbarr on 1999/01/06 03:13:15
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 06 Jan 1999 01:24:09 +0100
- Message-ID: <3696aa85.18259325@smtp1.ibm.net>
- Subject: [PATCH 5.005_03-MAINT_TRIAL2] fixes for PERL_OBJECT and USE_THREADS builds
- Branch: maint-5.005/perl
- ! embed.h global.sym objXSUB.h objpp.h perl.c proto.h
- ! win32/GenCAPI.pl win32/makedef.pl
-____________________________________________________________________________
-[ 2567] By: gbarr on 1999/01/06 02:31:28
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Tue, 05 Jan 1999 16:47:31 -0800
- Message-Id: <3.0.6.32.19990105164731.00b5b2d0@ous.edu>
- Subject: [PATCH 5.005_03-MAINT_TRIAL_2]taint.c fix for VMS
- Branch: maint-5.005/perl
- ! taint.c
-____________________________________________________________________________
-[ 2566] By: gbarr on 1999/01/06 02:29:05
- Log: From: "W. Phillip Moore" <wpm@ms.com>
- Date: Tue, 5 Jan 1999 12:40:27 -0500 (EST)
- Message-ID: <13970.20107.190314.549471@zappa>
- Subject: [PATCH] POSIX getpgrp is not -w clean
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 2565] By: gbarr on 1999/01/06 02:19:00
- Log: From: Slaven Rezic <eserte@cs.tu-berlin.de>
- Date: Mon, 4 Jan 1999 23:01:46 +0100 (CET)
- Message-Id: <199901042201.XAA01875@cabulja.herceg.de>
- Subject: FindBin.pm on Win32 systems
- Branch: maint-5.005/perl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 2564] By: gbarr on 1999/01/06 02:13:23
- Log: From: Mark Bixby <markb@spock.dis.cccd.edu>
- Date: Mon, 4 Jan 1999 13:34:58 -0800 (PST)
- Message-Id: <199901042134.NAA18852@spock.dis.cccd.edu>
- Subject: [PATCH 5.005_03-MAINT_TRIAL_2] t/op/sysio.t for MPE/iX
- Branch: maint-5.005/perl
- ! t/op/sysio.t
-____________________________________________________________________________
-[ 2563] By: gbarr on 1999/01/06 02:03:44
- Log: From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Date: Mon, 4 Jan 1999 19:25:03 +0200 (EET)
- Message-Id: <199901041725.TAA30462@alpha.hut.fi>
- Subject: [PATCH] 5.005_03-MAINT_TRIAL_2: undo untrue HP-UX 64-bitness (mostly harmless but misleading)
- Branch: maint-5.005/perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 2562] By: gbarr on 1999/01/06 02:02:18
- Log: Jumbo doc patch from Abigail
-
- From: abigail@fnx.com
- Message-ID: <19990105170142.4889.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03-TRIAL2 lib/ExtUtils/Liblist.pm] pod fixes
- Date: Tue, 5 Jan 1999 12:01:42 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105172855.5115.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 MAINT2 lib/ExtUtils/Commands.pm] Typo fix.
- Date: Tue, 5 Jan 1999 12:28:55 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105173808.5260.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH perl5.005_03 MAINT3 lib/ExtUtils/Embed.pm] Typo fix
- Date: Tue, 5 Jan 1999 12:38:08 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105174859.5533.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 MAINT2 lib/ExtUtils/Install.pm] Typo fix
- Date: Tue, 5 Jan 1999 12:48:59 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105174947.5547.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 lib/ExtUtils/MM_Unix.pm] Typo fixes
- Date: Tue, 5 Jan 1999 12:49:46 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105182301.5966.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 lib/ExtUtils/MakeMaker.pm] Typos fixes.
- Date: Tue, 5 Jan 1999 13:23:00 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105183344.6065.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/ExtUtils/Manifest.pm] Typo fixes
- Date: Tue, 5 Jan 1999 13:33:44 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990105184028.6220.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/ExtUtils/Mksymlists.pm] Typo fix
- Date: Tue, 5 Jan 1999 13:40:28 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990106012015.9451.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/IO/Pipe.pm] Typo fixes.
- Date: Tue, 5 Jan 1999 20:20:15 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990106012047.9459.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRAIL2 lib/IO/Seekable.pm] Typo fixes
- Date: Tue, 5 Jan 1999 20:20:47 -0500 (EST)
-
- From: abigail@fnx.com
- Message-ID: <19990106012338.9536.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_03 TRIAL2 lib/IO/Socket.pm] Typo fix
- Date: Tue, 5 Jan 1999 20:23:38 -0500 (EST)
- Branch: maint-5.005/perl
- ! ext/IO/lib/IO/Pipe.pm ext/IO/lib/IO/Seekable.pm
- ! ext/IO/lib/IO/Socket.pm lib/ExtUtils/Command.pm
- ! lib/ExtUtils/Embed.pm lib/ExtUtils/Install.pm
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm
- ! lib/ExtUtils/Mksymlists.pm
-____________________________________________________________________________
-[ 2560] By: gbarr on 1999/01/03 16:59:01
- Log: Trial release 2
- Branch: maint-5.005/perl
- ! Changes patchlevel.h
-____________________________________________________________________________
-[ 2559] By: gbarr on 1999/01/02 15:37:35
- Log: From: Blair Zajac <bzajac@geostaff.com>
- Date: Wed, 23 Dec 1998 17:13:32 -0800
- Message-ID: <3681953C.8B6A90AA@geostaff.com>
- Subject: Tie::SubstrHash patch
- Branch: maint-5.005/perl
- ! lib/Tie/SubstrHash.pm
-____________________________________________________________________________
-[ 2558] By: gbarr on 1999/01/02 15:30:01
- Log: integrate change #2544
-
- From: Tim Bunce <Tim.Bunce@ig.co.uk>
- Subject: bug in pod2man search for perl binary [5.005_5x]
- Date: Sat, 12 Dec 1998 23:08:51 +0000
- Message-ID: <19981212230851.A20578@ig.co.uk>
- Branch: maint-5.005/perl
- !> pod/pod2man.PL
-____________________________________________________________________________
-[ 2557] By: gbarr on 1999/01/02 15:20:42
- Log: integrate change #2548
-
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- To: perl5-porters@perl.org
- cc: hv@crypt0.demon.co.uk
- Subject: [bug 5.004_54] duplicate error message
- Date: Thu, 31 Dec 1998 04:05:25 +0000
- Message-Id: <199812310405.EAA00386@crypt.compulink.co.uk>
-
- Message-ID: <13963.60672.134591.383377@alias-2.pr.mcs.net>
- From: Stephen McCamant <smccam@uclink4.berkeley.edu>
- To: hv@crypt0.demon.co.uk
- Cc: perl5-porters@perl.org
- Subject: [PATCH _54] Re: duplicate error message
- Date: Thu, 31 Dec 1998 16:10:13 -0600 (CST)
-
- Message-Id: <199901010732.HAA02926@crypt.compulink.co.uk>
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- To: Stephen McCamant <smccam@uclink4.berkeley.edu>
- cc: hv@crypt0.demon.co.uk, perl5-porters@perl.org
- Subject: [TEST PATCH _54] Re: duplicate error message
- Date: Fri, 01 Jan 1999 07:32:14 +0000
- Branch: maint-5.005/perl
- ! op.c t/pragma/warn-1global taint.c
-____________________________________________________________________________
-[ 2556] By: gbarr on 1999/01/02 15:18:58
- Log: From: abigail@fnx.com
- Date: Mon, 28 Dec 1998 14:16:12 -0500 (EST)
- Message-ID: <19981228191612.8380.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_02; lib/fields.pm] Typos in pod.
- Branch: maint-5.005/perl
- ! lib/fields.pm
-____________________________________________________________________________
-[ 2555] By: gbarr on 1999/01/02 15:11:45
- Log: intregrate change #2547
-
- From: Chris Nandor <pudge@pobox.com>
- Subject: Re: [PATCH] perlport.pod 1.38
- Date: Thu, 31 Dec 1998 09:06:48 -0500
- Message-Id: <v04020a1db2b1352ec92a@[192.168.0.77]>
- Branch: maint-5.005/perl
- !> pod/perlport.pod
-____________________________________________________________________________
-[ 2543] By: gbarr on 1998/12/31 06:17:13
- Log: integrated relevant parts og changes #2385 & #2387 from mainline
-
- various fixes for race conditions under threads: mutex locks based
- on PL_threadnum were seriously flawed, since it means more than one
- thread could enter the critical region; PL_na was global instead of
- thread-local; child thread could finish and free thr structures
- before Thread->new() got around to creating the Thread object;
- cv_clone() needed locking, as it mucks with PL_comppad and other
- global data; new_struct_thread() needed to lock template-thread's
- mutex while copying its data
-
- another threads reliability fix: serialize writes to thr->threadsv
- avoid most uses of PL_na (which is much more inefficient than a
- simple local); update docs to suit; PL_na now being thr->Tna may
- be a minor compatibility issue for extensions--will require dTHR
- outside of XSUBs (those get automatic dTHR)
- Branch: maint-5.005/perl
- ! XSUB.h djgpp/djgpp.c doio.c doop.c dump.c embedvar.h
- ! ext/DynaLoader/dl_next.xs ext/IO/IO.xs ext/Opcode/Opcode.xs
- ! ext/POSIX/POSIX.xs ext/Thread/Thread.xs ext/attrs/attrs.xs
- ! gv.c malloc.c mg.c objXSUB.h op.c os2/OS2/REXX/REXX.xs
- ! os2/os2.c perl.c perlvars.h perly.c perly.y pod/perlcall.pod
- ! pod/perlembed.pod pod/perlguts.pod pod/perlxs.pod pp.c pp.h
- ! pp_ctl.c pp_hot.c pp_sys.c run.c sv.c taint.c thread.h toke.c
- ! universal.c util.c vms/ext/Stdio/Stdio.xs vms/perly_c.vms
- ! vms/vms.c win32/win32.c win32/win32thread.c
-____________________________________________________________________________
-[ 2542] By: gbarr on 1998/12/30 14:46:40
- Log: doc updates
-
- From: abigail@fnx.com
- Date: Wed, 23 Dec 1998 22:32:07 -0500 (EST)
- Message-ID: <19981224033207.16751.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_02] Typo in documentation of pod2html.
-
- From: abigail@fnx.com
- Date: Wed, 23 Dec 1998 22:59:59 -0500 (EST)
- Message-ID: <19981224035959.16994.qmail@alexandra.wayne.fnx.com>
- Subject: [PATCH 5.005_02] Re: m// doc is buggy (was Re: m'$foo' is undocumented)
-
- pod/perldelta.pod from:
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Thu, 17 Dec 1998 16:13:34 +0200 (EET)
- Message-ID: <13945.4494.140163.973953@alpha.hut.fi>
- Subject: Re: important UNDOC issues for 5.005_54
- Branch: maint-5.005/perl
- ! pod/perldelta.pod pod/perlop.pod pod/pod2html.PL
-____________________________________________________________________________
-[ 2541] By: gbarr on 1998/12/30 14:37:14
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 23 Dec 1998 21:26:38 +0100
- Message-ID: <36895086.8849224@smtp1.ibm.net>
- Subject: [PATCH 5.005_03m1] subdirectory Makefiles should inherit CAPI setting from command line
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2538] By: gbarr on 1998/12/29 14:41:29
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 22 Dec 1998 10:57:48 +0200 (EET)
- Message-ID: <13951.24332.932827.831376@alpha.hut.fi>
- Subject: Re: x operator broken in DEC Alpha for 8-bit characters (Re: Digest-MD5-2.00 test fails on DEC Alpha - a patch)
- Branch: maint-5.005/perl
- ! t/op/repeat.t util.c
-____________________________________________________________________________
-[ 2535] By: gbarr on 1998/12/29 14:27:56
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 18 Dec 1998 16:39:27 +0200 (EET)
- Message-ID: <13946.26911.140905.387070@alpha.hut.fi>
- Subject: Math::Trig, Math::Complex, Fcntl, addressed (Re: Undocumentation Issues for 5.005)
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 2534] By: gbarr on 1998/12/29 14:23:02
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 15 Dec 1998 17:52:32 +0200 (EET)
- Message-ID: <13942.34240.66558.169330@alpha.hut.fi>
- Subject: some doc link fixes
- Branch: maint-5.005/perl
- ! pod/perlcall.pod pod/perldata.pod pod/perldiag.pod
- ! pod/perlfaq5.pod pod/perlfaq7.pod pod/perlfunc.pod
- ! pod/perlguts.pod pod/perllocale.pod pod/perlobj.pod
- ! pod/perlsub.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 2533] By: gbarr on 1998/12/29 14:23:00
- Log: From: Chris Nandor <pudge@pobox.com>
- Date: Sat, 19 Dec 1998 12:54:34 -0500
- Message-Id: <v04020a03b2a194aaa676@[192.168.0.77]>
- Subject: [PATCH] perlport.pod v1.37
- Branch: maint-5.005/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 2531] By: gbarr on 1998/12/29 14:12:25
- Log: change in_pod pattern to /^=\w/ from /^=/
- From: Frank Ridderbusch <Frank.Ridderbusch@pdb.siemens.de>
- Date: Tue, 15 Dec 1998 16:23:12 +0100 (MET)
- Message-ID: <13942.32480.700000.640927@utensil>
- Subject: Minor Bug in AutoSplit.qm in 5.005 and 5.004
- Branch: maint-5.005/perl
- ! lib/AutoSplit.pm
-____________________________________________________________________________
-[ 2530] By: gbarr on 1998/12/29 14:09:51
- Log: undo the "perlsyn intrusion" into perlfunc
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2529] By: gbarr on 1998/12/29 14:04:35
- Log: From: Jarkko Hietaniemi <hietanie@koah.research.nokia.com>
- Date: Sun, 13 Dec 1998 14:54:56 +0200 (EET)
- Message-Id: <199812131254.OAA24494@koah.research.nokia.com>
- Subject: ignore_versioned_libs isn't used anywhere (it became ignore_versioned_solibs)
- Branch: maint-5.005/perl
- ! hints/linux.sh
-____________________________________________________________________________
-[ 2528] By: gbarr on 1998/12/29 13:59:49
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 28 Oct 1998 01:20:33 -0500 (EST)
- Message-Id: <199810280620.BAA06893@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Make sort respect overloading
- Branch: maint-5.005/perl
- ! pp_ctl.c t/pragma/overload.t
-____________________________________________________________________________
-[ 2527] By: gbarr on 1998/12/29 13:58:56
- Log: doc update, quads only work on 64-but platforms
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2526] By: gbarr on 1998/12/29 13:49:55
- Log: From: Andy Dougherty <doughera@lafayette.edu>
- Date: Tue, 1 Dec 1998 12:50:27 -0500 (EST)
- Message-Id: <Pine.SUN.3.96.981201124929.4288H-100000@newton.phys>
- Subject: [PATCH 5.005_xx] erroneous 'none' in lddlflags
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2512] By: gbarr on 1998/12/28 14:56:36
- Log: change t/op/pwent.t to ignore NIS includes
- From: achampio@lehman.com (Alan Champion)
- Date: Tue, 1 Dec 1998 15:18:03 GMT
- Message-Id: <9812011518.AA00005@lonhpov1.lehman.com>
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_1 on sun4-solaris 2.3 (UNINSTALLED)
-
- From: pvhp@forte.com (Peter Prymmer)
- Date: Fri, 4 Dec 98 17:11:41 PST
- Message-Id: <9812050111.AA16778@forte.com>
- Subject: [PATCH 5.005_03-MAINT_TRIAL_1 && 5.005_54]dumper and searchdict ebcdic style
- Branch: maint-5.005/perl
- ! t/lib/dumper.t t/lib/searchdict.t t/op/pwent.t
-____________________________________________________________________________
-[ 2511] By: gbarr on 1998/12/28 14:55:28
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Tue, 01 Dec 1998 00:07:33 +0100
- Message-ID: <366921b5.14512598@smtp1.ibm.net>
- Subject: Re: 5.005_03-MAINT-TRIAL1, [PATCH] to compile on Win32
-
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 02 Dec 1998 00:24:54 +0100
- Message-ID: <366a77bb.19498126@smtp1.ibm.net>
- Subject: Re: 5.005_03-MAINT-TRIAL1, [PATCH] spaces in filenames support
- Branch: maint-5.005/perl
- ! perl.h proto.h taint.c win32/GenCAPI.pl win32/Makefile
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_sh.PL win32/makedef.pl
-____________________________________________________________________________
-[ 2510] By: gbarr on 1998/12/28 14:37:35
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 1 Dec 1998 00:34:08 -0500 (EST)
- Message-Id: <199812010534.AAA21371@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Debugger 'v' command
- Branch: maint-5.005/perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 2478] By: gbarr on 1998/12/13 16:02:24
- Log: From: pvhp@forte.com (Peter Prymmer)
- Date: Mon, 30 Nov 98 21:08:36 PST
- Message-Id: <9812010508.AA07791@forte.com>
- Subject: [PATCH 5.005_03t1 && 5.005_54]dll linkage side decks for OS/390
- Branch: maint-5.005/perl
- ! hints/os390.sh
-____________________________________________________________________________
-[ 2477] By: gbarr on 1998/12/13 16:00:23
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Mon, 30 Nov 1998 17:08:12 -0800
- Message-Id: <3.0.6.32.19981130170812.00b12b70@ous.edu>
- Subject: [PATCH 5.005_03]Minor VMS patches needed to build
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MM_VMS.pm vms/subconfigure.com
-____________________________________________________________________________
-[ 2476] By: gbarr on 1998/12/13 15:30:58
- Log: From: pvhp@forte.com (Peter Prymmer)
- Date: Fri, 4 Dec 98 00:37:32 PST
- Message-Id: <9812040837.AA10908@forte.com>
- Subject: Re: [PATCH 5.005_03-MAINT-TRIAL1] some tweaks to the build process for OS/390
- Branch: maint-5.005/perl
- ! Makefile.SH regcomp.c
-____________________________________________________________________________
-[ 2472] By: gbarr on 1998/12/12 17:12:28
- Log: undo changes to Exporter.pm from #2312
- Branch: maint-5.005/perl
- ! lib/Exporter.pm
-____________________________________________________________________________
-[ 2471] By: gbarr on 1998/12/12 17:09:39
- Log: integrate change#2459 from cfgperl
-
- enclose case want_vtbl_collxfrm with #ifdef USE_LOCALE_COLLATE
-
- From: hansm@icgroup.nl
- Subject: Not OK: perl 5.00503 +MAINT_TRIAL_1 on OPENSTEP-Mach 4_1 (UNINSTALLED)
- Date: Sun, 6 Dec 98 22:19:54 +0100
- Message-Id: <9812062116.AA26445@icgned.icgroup.nl>
- Branch: maint-5.005/perl
- ! util.c
-____________________________________________________________________________
-[ 2470] By: gbarr on 1998/12/12 16:46:03
- Log: re-sync'd Text::Wrap with new version from CPAN
- Branch: maint-5.005/perl
- +> t/lib/textfill.t
- ! MANIFEST
- !> lib/Text/Wrap.pm t/lib/textwrap.t
-____________________________________________________________________________
-[ 2469] By: gbarr on 1998/12/12 15:58:43
- Log: integrate changes#2435,2436 from cfgperl
-
- Pod::Html and Pod::Text were not locale-savvy:
- for example in =head1 all non-ASCII-\w-runs were
- turned into underscores in NAME tags. This could
- result in several NAME tags becoming identical.
- Reported by:
-
- From: Fyodor Krasnov <fyodor@aha.ru>
- Subject: pod2html vs Russian Characters
- To: Tom.Christiansen@snn.aha.ru, tchrist@perl.com
- Date: Tue, 24 Nov 1998 19:00:36 +0300 (MSK)
- Message-Id: <199811241600.TAA05149@stat.aha.ru>
-
- One paste too many in #2435.
- Branch: maint-5.005/perl
- !> lib/Pod/Html.pm lib/Pod/Text.pm
-____________________________________________________________________________
-[ 2468] By: gbarr on 1998/12/12 15:01:58
- Log: redirect trail program to error msg file in Configure
-
- From: Andy Dougherty <doughera@lafayette.edu>
- Date: Tue, 1 Dec 1998 13:40:12 -0500 (EST)
- Message-Id: <Pine.SUN.3.96.981201133546.4288K-100000@newton.phys>
- Subject: [PATCH 5.005_xx] Missing redirection of simple test program
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2467] By: gbarr on 1998/12/12 14:52:24
- Log: Change reall_srchlen back to an int from a #define
-
- From: Graham Barr <gbarr@ti.com>
- Date: Mon, 30 Nov 1998 14:29:14 -0600
- Message-ID: <19981130142914.X1504@asic.sc.ti.com>
- Subject: [PATCH 5.005_03-MT!] Re: one compilation warning from 5_03-MT1
- Branch: maint-5.005/perl
- ! malloc.c
-____________________________________________________________________________
-[ 2466] By: gbarr on 1998/12/12 14:40:56
- Log: s/SCM_CREDENTIALSS/SCM_CREDENTIALs/ in Socket.xs
-
- From: Andy Dougherty <doughera@lafayette.edu>
- Date: Thu, 3 Dec 1998 11:26:25 -0500 (EST)
- Message-Id: <Pine.SUN.3.96.981203112330.8800H-100000@newton.phys>
- Subject: [PATCH 5.005_03-MAINT_TRIAL_1] Trivial grammar patch
- Branch: maint-5.005/perl
- ! Porting/Glossary
- !> ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 2456] By: gsar on 1998/12/06 13:49:02
- Log: branch perldelta.pod
- Branch: maint-5.005/perl
- +> pod/perldelta.pod
-____________________________________________________________________________
-[ 2455] By: gsar on 1998/12/06 13:47:21
- Log: clobber perldelta.pod to reestablish branch from perl5005delta.pod
- Branch: maint-5.005/perl
- - pod/perldelta.pod
-____________________________________________________________________________
-[ 2415] By: gbarr on 1998/11/30 02:31:15
- Log: Chnages,patchlevel.h etc...
- Branch: maint-5.005/perl
- ! Changes MANIFEST patchlevel.h t/op/tr.t win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 2411] By: gbarr on 1998/11/30 01:31:22
- Log: integrated changes#2323,2353,2369
-
- From: maeda@src.ricoh.co.jp
- Date: Tue, 24 Nov 1998 10:37:45 +0900
- Message-Id: <199811240137.KAA05867@luna.src.ricoh.co.jp>
- Subject: format "..." bug
-
- Locale collation, ctype, and numeric, were initialized wrong
- (if LC_ALL or LANG were unset, so were the collation/ctype/numeric),
- as reported by
-
- From: Ilya.Sandler@etak.com (Ilya Sandler)
- Subject: a bug in locale handling: LC_COLLATE ignored sometimes
- Date: 25 Nov 1998 04:53:52 +0200
- Message-ID: <MLIST_199811250226.SAA12590@axi001.etak.sw>
-
- allow final period in a file (not followed by a newline) to
- terminate format spec
- Branch: maint-5.005/perl
- ! pp_ctl.c toke.c util.c
- !> t/op/write.t
-____________________________________________________________________________
-[ 2408] By: gbarr on 1998/11/30 01:29:19
- Log: integrated ext/B/... changes from mainline
- Branch: maint-5.005/perl
- !> ext/B/B.pm ext/B/B.xs ext/B/B/Assembler.pm ext/B/B/C.pm
- !> ext/B/B/Disassembler.pm
-____________________________________________________________________________
-[ 2404] By: gbarr on 1998/11/30 00:26:36
- Log: integrate some of change#2318 from mainline
- Branch: maint-5.005/perl
- +> t/op/grent.t t/op/pwent.t
- !> ext/DB_File/Changes ext/DB_File/DB_File.pm
- !> ext/DB_File/DB_File.xs ext/POSIX/hints/dynixptx.pl
- !> ext/Socket/Socket.pm ext/Socket/Socket.xs lib/Benchmark.pm
- !> pod/perldata.pod t/op/sort.t
-____________________________________________________________________________
-[ 2398] By: gbarr on 1998/11/29 22:11:16
- Log: integrate changes#2254,2259,2335,2345,2348,2361,2368,2380 from mainline
-
- win32_recvfrom() compatibility fix
-
- From: "Kurt D. Starsinic" <kstar@chapin.edu>
- Subject: Re: [PATCH] Re: pod2man bug in date generated line
- To: Albert Dvornik <bert@genscan.com>, "Larry W. Virden" <lvirden@cas.org>
- Cc: perlbug@perl.com
- Date: 20 Nov 1998 21:30:17 +0200
- Message-ID: <MLIST_19981120131523.A464@O2.chapin.edu>
-
- make $1 et al readonly under threads; make C<undef $1> fail like
- C<$1 = undef> does
-
- fix typo in pp_defined() causing C<defined %tied> to fail
-
- more conservative version of changes#2345,2346,2347; those break
- C<defined(@{"foo::ISA"})> which seems to be extensively used in
- the libs :-(
-
- fix uninitialized warnings
- From: Brian Callaghan <callagh@itginc.com>
- Date: Thu, 19 Nov 1998 17:49:10 -0800
- Message-Id: <3654CA96.B64FCAEB@itginc.com>
- Subject: Complete.pm patch (version 1.1)
-
- Liblist tweak suggested by Swen Thuemmler <Swen.Thuemmler@paderlinx.de>;
- add C<$Config{installarchlib}/CORE> to the default locations searched
- on win32
-
- prefer IO::Handle for IO if FileHandle:: is empty (as suggested by
- Tim Bunce)
- Branch: maint-5.005/perl
- ! gv.c op.c pp.c
- !> lib/ExtUtils/Liblist.pm lib/Term/Complete.pm pod/perlfaq4.pod
- !> pod/pod2man.PL t/op/undef.t win32/win32sck.c
-____________________________________________________________________________
-[ 2315] By: gbarr on 1998/11/27 05:16:50
- Log: integrate change#2246 from mainline, while still allowing
- C<sort $globref @foo>
-
- allow C<sort $coderef @foo>
- Branch: maint-5.005/perl
- ! op.c sv.c
- !> t/op/sort.t
-____________________________________________________________________________
-[ 2314] By: gbarr on 1998/11/27 04:03:58
- Log: integrate change#2159 from mainline
-
- Data::Dumper update
- Branch: maint-5.005/perl
- !> ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm
- !> ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Todo t/lib/dumper.t
-____________________________________________________________________________
-[ 2313] By: gbarr on 1998/11/27 03:04:21
- Log: Fix typo in change#2312
- Branch: maint-5.005/perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 2312] By: gbarr on 1998/11/27 03:03:03
- Log: integrate change#1837,1967,1986,2060,2068,2146,2214,2224,2300,2301 from mainline
-
- (via private mail)
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Date: Sat, 05 Sep 1998 01:23:58 -0400 (EDT)
- Message-id: <01J1FH7R43NS002F14@cor.newman.upenn.edu>
- Subject: [Patch 5.005_02] Miscellaneous VMS cleanup
-
- correct bugs exposed in MM_Unix.pm by commenting out Selfloader
- (MAN3PODS cannot be set to ' '; stray stricture violation)
-
- qualify names of builtins
-
- handle '::' in section names properly
- From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 17 Oct 1998 12:57:54 -0500
- Message-ID: <19981017125754.C510@pobox.com>
- Subject: Re: pod2html
-
- From: Zachary Miller <zcmiller@simon.er.usgs.gov>
- Date: Tue, 20 Oct 1998 20:52:20 -0500
- Message-Id: <199810210152.UAA07792@simon.er.usgs.gov>
- Subject: Exporter.pm's export_to_level() argument handling buggy
-
- hand-apply whitespace-mutiliated patch
- From: "vishal bhatia" <vishalb@hotmail.com>
- Date: Wed, 28 Oct 1998 23:45:32 PST
- Message-ID: <19981029074534.2334.qmail@hotmail.com>
- Subject: [PATCH 5.005_52]Compiling modules,more bugfixes for B
-
- typo in newHVhv()
-
- avoid endless loops in Text::Wrap (from a suggestion by Lupe
- Christoph <lupe@alanya.m.isar.de>)
-
- properly free temporaries created by threads
-
- fix PL_defoutgv leak under threads
- Branch: maint-5.005/perl
- !> (integrate 31 files)
-____________________________________________________________________________
-[ 2311] By: gbarr on 1998/11/27 01:31:36
- Log: integrate change#2210 from mainline
-
- fix AvREALISH bogusness
- Branch: maint-5.005/perl
- ! av.c
- !> t/op/array.t
-____________________________________________________________________________
-[ 2310] By: gbarr on 1998/11/27 00:20:21
- Log: integrate changes#2235,2299,2300 from mainline
-
- catch a neophyte trap: open(<FH>), close(<FH>) etc.
-
- fix C<if (...) { package Foo; ... }> misoptimization that fails
- to set the package for the block properly
-
- properly free temporaries created by threads
- Branch: maint-5.005/perl
- ! ext/Thread/Thread.xs op.c perl.h util.c
- !> t/comp/package.t
-____________________________________________________________________________
-[ 2309] By: gbarr on 1998/11/27 00:16:36
- Log: integrate change#2298 from mainline
- Branch: maint-5.005/perl
- !> universal.c
-____________________________________________________________________________
-[ 2308] By: gbarr on 1998/11/27 00:11:44
- Log: Updates for MPE/iX DynaLoader and installperl, via private mail
- forwarded by Jarkko Hietaniemi from Mark Bixby
- Branch: maint-5.005/perl
- ! ext/DynaLoader/dl_mpeix.xs installperl
-____________________________________________________________________________
-[ 2307] By: gbarr on 1998/11/27 00:07:27
- Log: Remove docs for feature not in _0*
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 2306] By: gbarr on 1998/11/26 23:44:47
- Log: Allow PL_FILES to have multiple targets from one source by allowing
- an array ref as the value in the hash
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 2305] By: gbarr on 1998/11/26 23:38:06
- Log: fix unsigned variables to use SvUV and sv_setuv
- Branch: maint-5.005/perl
- ! lib/ExtUtils/typemap
-____________________________________________________________________________
-[ 2304] By: gbarr on 1998/11/26 23:36:17
- Log: Fix embeded \n in ABSTRACT and <> in AUTHOR
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 2302] By: gbarr on 1998/11/26 15:27:03
- Log: integrate changes#2177,2189,2228,2229 from cfgperl
-
- 0**0 = 1, from
-
- From: d-lewart@uiuc.edu (Daniel S. Lewart)
- Subject: Math::Complex 0**0 patches
- Date: Sun, 1 Nov 1998 19:21:48 -0600 (CST)
- Message-Id: <199811020121.TAA28310@staff2.cso.uiuc.edu>
-
- sysio.t failure: fix undefined order of evaluation, from
-
- From: Spider Boardman <spider@web.zk3.dec.com>
- Subject: Not OK: perl 5.00553 on alpha-thread 5.0 [PATCH]
- Date: 4 Nov 1998 01:22:30 +0200
- Message-ID: <MLIST_199811032227.RAA143892@web.zk3.dec.com>
-
- From: "Martin J. Bligh" <mbligh@sequent.com>
- Message-ID: <187803647.910720870@w-186d219.rhe.sequent.com>
- Subject: Re: Making Perl work on DYNIX/ptx
- Date: Tue, 10 Nov 1998 18:01:10 -0800
-
- From: "Martin J. Bligh" <mbligh@sequent.com>
- Subject: Re: Making Perl work on DYNIX/ptx
- Date: Tue, 10 Nov 1998 16:24:26 -0800
- Message-ID: <181999655.910715066@w-186d219.rhe.sequent.com>
- Branch: maint-5.005/perl
- +> ext/DB_File/hints/dynixptx.pl ext/POSIX/hints/dynixptx.pl
- ! pp_sys.c
- !> hints/dynixptx.sh lib/Math/Complex.pm t/lib/complex.t
-____________________________________________________________________________
-[ 2297] By: gbarr on 1998/11/24 02:32:38
- Log: integrate change#2266 from cfgperl
- From: John Tobey <jtobey@channel1.com>
- Subject: [PATCH] perlfaq typos
- To: perl5-porters@perl.com
- Date: 22 Nov 1998 04:25:15 +0200
- Message-ID: <MLIST_m0zhPeF-000FOgC@feynman.localnet>
- Branch: maint-5.005/perl
- !> pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- !> pod/perlfaq7.pod pod/perlfaq8.pod
-____________________________________________________________________________
-[ 2296] By: gbarr on 1998/11/24 01:39:18
- Log: integrated changes#2011,2092,2106,2108,2143 from cfgperl
-
- More robust yacc/bison failure output handling.
-
- More robustness.
-
- Bison says 'parse error', not 'parser error'.
-
- The "parse error" must be converted to "syntax error",
- just matching it aint' enough.
-
- There can be multiple yacc/bison errors.
- Branch: maint-5.005/perl
- !> t/comp/require.t t/op/misc.t t/pragma/subs.t
- !> t/pragma/warning.t
-____________________________________________________________________________
-[ 2295] By: gbarr on 1998/11/24 00:49:28
- Log: integrate change#1823 from mainline
- From: Joe Buehler <jhpb@hekimian.com>
- Date: 29 Aug 1998 17:13:28 -0400
- Message-ID: <yd37lzro5jb.fsf@pandora.hekimian.com>
- Subject: patches for perl 5.005_51 under U/WIN
- Branch: maint-5.005/perl
- +> hints/uwin.sh
- ! Configure
- !> installman makedepend.SH t/lib/posix.t
-____________________________________________________________________________
-[ 2258] By: gbarr on 1998/11/21 20:48:02
- Log: Another Configure patch from Jarkko
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 2257] By: gbarr on 1998/11/21 17:23:13
- Log: Big Configure patch from Jarkko Hietaniemi <jhi@iki.fi> via
- private mail
- Branch: maint-5.005/perl
- ! Configure Makefile.SH config_h.SH hints/dec_osf.sh
- ! hints/freebsd.sh hints/irix_6.sh hints/linux.sh
- ! hints/next_3.sh hints/os390.sh pp_sys.c
-____________________________________________________________________________
-[ 2239] By: gbarr on 1998/11/14 03:59:58
- Log: more doc changes from mainline
- Branch: maint-5.005/perl
- ! pod/perldiag.pod pod/perlfunc.pod pod/perlre.pod
- !> INSTALL README.vms vms/ext/Stdio/Stdio.pm
-____________________________________________________________________________
-[ 2238] By: gbarr on 1998/11/14 02:51:51
- Log: integrate doc changes from mainline, including
- changes#1796,1811,1830,1831,1844,1846,1876,1905,2149,2152
- Branch: maint-5.005/perl
- !> README.os390 pod/perl.pod pod/perldelta.pod pod/perlfaq1.pod
- !> pod/perlform.pod pod/perlfunc.pod pod/perlguts.pod
- !> pod/perlipc.pod pod/perllocale.pod pod/perlport.pod
- !> pod/perlref.pod pod/perlrun.pod pod/perlvar.pod pod/perlxs.pod
- !> pod/pod2man.PL
-____________________________________________________________________________
-[ 2237] By: gbarr on 1998/11/14 02:51:49
- Log: integrate change#1847 from mainline
- From: Roderick Schertler <roderick@argon.org>
- Date: Wed, 09 Sep 1998 23:52:48 -0400
- Message-ID: <20567.905399568@eeyore.ibcinc.com>
- Subject: seed srand from /dev/urandom when possible
- Branch: maint-5.005/perl
- ! pp.c
-____________________________________________________________________________
-[ 2232] By: gbarr on 1998/11/13 03:12:37
- Log: integrate change#2215 from mainline
- set close-on-exec bit on pipe() FDs
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod pod/perlvar.pod pp_sys.c
-____________________________________________________________________________
-[ 2231] By: gbarr on 1998/11/13 02:16:03
- Log: integrate change#2188 from mainline
- fix return value of win32_pclose()
- Branch: maint-5.005/perl
- !> win32/win32.c
-____________________________________________________________________________
-[ 2218] By: gbarr on 1998/11/08 16:48:44
- Log: From: Graham Barr <gbarr@ti.com>
- Date: Mon, 2 Nov 1998 07:38:52 -0600
- Message-ID: <19981102073852.A12751@asic.sc.ti.com>
- Subject: [PATCH 5.005_*] Re: IPC::Msg 1.03
- Branch: maint-5.005/perl
- ! ext/IPC/SysV/Msg.pm
-____________________________________________________________________________
-[ 2217] By: gbarr on 1998/11/08 05:22:39
- Log: fix changes in 2213 not to break binary compat
- Branch: maint-5.005/perl
- ! pp_ctl.c proto.h
-____________________________________________________________________________
-[ 2216] By: gbarr on 1998/11/08 04:21:01
- Log: integrate change#2192 from mainline
- indeterminate order-of-evaluation fixes
- Branch: maint-5.005/perl
- ! mg.c
-____________________________________________________________________________
-[ 2213] By: gbarr on 1998/11/08 00:39:44
- Log: integrate change#2051 from mainline
- properly restore PL_rsfp_filters after require
- Branch: maint-5.005/perl
- ! embed.h global.sym objXSUB.h objpp.h pp_ctl.c proto.h scope.c
- ! scope.h
-____________________________________________________________________________
-[ 2212] By: gbarr on 1998/11/07 23:13:29
- Log: integrate changes#1914,1925,1926,1945,1956,1987 from mainline
-
- normalize tm struct passed to strftime() with mktime()
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Date: Wed, 30 Sep 1998 15:12:09 -0400
- Message-Id: <199809301912.PAA26119@Orb.Nashua.NH.US>
- Subject: [PATCH 5.005_52] Re: POSIX::strftime returns incorrect date
-
- disable USE_THREADS when PERL_OBJECT is enabled
-
- From: Mark-Jason Dominus <mjd@plover.com>
- Date: Sun, 04 Oct 1998 14:48:11 -0400
- Message-ID: <19981004184811.16048.qmail@plover.com>
- Subject: PATCH: perldoc -f does not locate -e, -r, -x, etc.
-
- defer "deep recursion" warnings until CXt_SUB context is properly
- set up
-
- Mutexen should be initialized only once.
-
- perldoc pod update
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Date: 06 Oct 1998 23:56:51 -0600
- Message-ID: <m3g1d0kj8c.fsf@perrin.dimensional.com>
- Subject: [PATCH _02 and _52] perldoc
- Branch: maint-5.005/perl
- ! gv.c op.c pp_hot.c
- !> ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs utils/perldoc.PL
- !> win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2207] By: gbarr on 1998/11/06 01:36:17
- Log: integrate changes#1912,1948 from mainline
- change warning about glob process failure
- Branch: maint-5.005/perl
- ! pod/perldiag.pod pp_hot.c
-____________________________________________________________________________
-[ 2200] By: gbarr on 1998/11/05 04:26:26
- Log: integrate changes#1840,1855,1860,1882,1884,1891,1900,1907 from mainline
- pl2bat tweak from Tye McQueen <tye@metronet.com>
-
- reset errno after C<require> search (as suggested by Larry)
-
- upgrade to CPAN-1.40
-
- missing file in last submit (1881)
-
- temporarily disable perl malloc for a2p until we clean up
- conflicting malloc() declarations everywhere
-
- Fixed apostrophe problem from Mark Knutsen.
-
- use SETERRNO() to reset errno (suggested by Charles Bailey)
-
- applied patches, but retained old behavior for win32 (where compilers
- can't read from stdin at all)
- From: Graham Barr <gbarr@ti.com>
- Date: Mon, 28 Sep 1998 09:41:49 -0500
- Message-ID: <19980928094149.B26576@asic.sc.ti.com>
- Subject: Re: 5.005_51 Errno invokes cpprun incorrectly
- --
- Date: Tue, 29 Sep 1998 12:35:43 -0500
- Message-ID: <19980929123543.Z26576@asic.sc.ti.com>
- Subject: Re: 5.005_51 Errno invokes cpprun incorrectly
-
- and ext/Errno/Errno_pm.PL from change#2050
- Branch: maint-5.005/perl
- ! perl.h pp_ctl.c proto.h sv.h
- !> ext/Errno/Errno_pm.PL lib/CPAN.pm lib/CPAN/FirstTime.pm
- !> win32/bin/pl2bat.pl x2p/Makefile.SH
-____________________________________________________________________________
-[ 2199] By: gbarr on 1998/11/05 03:35:00
- Log: integrate changes#1817,1856,1869,1909 from mainline
- updated usethreads hints for hpux 10.X
- From: Matthew T Harden <mthard@mthard1.monsanto.com>
- Date: Fri, 28 Aug 1998 14:10:42 GMT
- Message-Id: <199808281410.AA11058@mthard1.monsanto.com>
- Subject: Re: OK: perl 5.00502 on PA-RISC1.1-thread 10.20 (UNINSTALLED)
-
- update hints for OPENSTEP 4.2 on i386
- From: Gerben Wierda <Gerben_Wierda@RnA.nl>
- Date: Sun, 20 Sep 1998 01:03:18 +0200
- Message-Id: <9809192303.AA29190@Spike>
- Subject: Perl 5.005_02 compilation problems
-
- use STRICT_ALIGNMENT on IRIX to allow usemymalloc=y again
- From: Scott Henry <scotth@sgi.com>
- Date: 13 Aug 1998 09:52:15 PDT
- Message-Id: <yd8pve46czk.fsf@hoshi.engr.sgi.com>
- Subject: [PATCH] Irix USE_LONG_LONG/malloc.c incompatibility (was...)
-
- update SCO hints for dynamic loading
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 28 Sep 1998 16:50:38 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980928164648.8130E-100000@newton.phys>
- Subject: [PATCH 5.004_04-MAINT_TRIAL_5 and 5.005_xx] Re: Perl on SCO_SV
- --
- Date: Tue, 29 Sep 1998 16:48:55 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980929164612.8634A-100000@newton.phys>
- Subject: Re: [PATCH 5.004_04-MAINT_TRIAL_5 and 5.005_xx] Re: Perl on SCO_SV
- Branch: maint-5.005/perl
- !> hints/hpux.sh hints/irix_6.sh hints/next_4.sh hints/sco.sh
-____________________________________________________________________________
-[ 2198] By: gbarr on 1998/11/05 03:00:51
- Log: integrate OS2 changes from mainline, change#1836,1930,1996,2063
- and os2/os2,c from #2145
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 5 Sep 1998 00:14:51 -0400 (EDT)
- Message-Id: <199809050414.AAA19801@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] OS/2 spawning typos
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199810050637.CAA07781@monk.mps.ohio-state.edu>
- Date: Mon, 5 Oct 1998 02:37:43 -0400 (EDT)
- Subject: [PATCH 5.005_52] Cumulative OS/2-related patch
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 13 Oct 1998 04:46:00 -0400 (EDT)
- Message-Id: <199810130846.EAA00769@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_52] Memory overrun in os2.c
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 18 Oct 1998 23:20:57 -0400 (EDT)
- Message-Id: <199810190320.XAA28249@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Improve sbrk() on OS/2
-
- remaining PL_foo stragglers
- Branch: maint-5.005/perl
- ! mg.c perl_exp.SH util.c
- !> hints/os2.sh os2/Changes os2/Makefile.SHs os2/os2.c
-____________________________________________________________________________
-[ 2197] By: gbarr on 1998/11/05 02:15:53
- Log: integrate changes#1826,1862 from mainline
-
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Wed, 12 Aug 1998 22:41:37 +0300 (EET DST)
- Message-Id: <199808121941.WAA06263@alpha.hut.fi>
- Subject: [PATCH] 5.004_50 or 5.005_02: get rid of interp.sym because not even AIX needs it
-
- remove bogus warn()
- Branch: maint-5.005/perl
- - interp.sym
- ! MANIFEST Makefile.SH embed.pl perl_exp.SH
-____________________________________________________________________________
-[ 2194] By: gbarr on 1998/11/05 01:26:46
- Log: integarte malloc.c changes from mainline change#1807,2112,2133
- Branch: maint-5.005/perl
- !> malloc.c
-____________________________________________________________________________
-[ 2193] By: gbarr on 1998/11/05 01:25:31
- Log: integrate changes#1763,1778,1801,1804 from mainline
-
- From: Stephen McCamant <alias@mcs.com>
- Date: Sun, 2 Aug 1998 16:33:18 -0500 (CDT)
- Message-ID: <13764.55116.921952.837027@alias-2.pr.mcs.net>
- Subject: [PATCH] Eliminate superfluous RV2p[AH]Vs in oops[AH]V()
-
- Implicit require during compile reset line numbering
-
- silence redefined warning for XS(INIT) {}
-
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Date: Sun, 9 Aug 1998 22:38:23 +0200
- Message-ID: <19980809223823.A215@cdata.tvnet.hu>
- Subject: [PATCH 5.5002] dos-djgpp update
- Branch: maint-5.005/perl
- ! op.c pp_ctl.c
- !> t/io/fs.t
-____________________________________________________________________________
-[ 2176] By: gbarr on 1998/11/02 04:51:48
- Log: integrate change#2030 from mainline
-
- fix handling of mayhaps-extended @_ in goto &sub
- Branch: maint-5.005/perl
- ! av.c pp_ctl.c
- !> t/op/goto.t
-____________________________________________________________________________
-[ 2175] By: gbarr on 1998/11/02 04:32:02
- Log: integrate chnage#1934,1935 from mainline
- fix USE_THREADS coredump due to uninitialized PL_hv_fetch_ent_mh
- add test for previous fix
- Branch: maint-5.005/perl
- ! util.c
- !> ext/Thread/create.t
-____________________________________________________________________________
-[ 2174] By: gbarr on 1998/11/02 04:22:20
- Log: integrate change#1863,1881 from mainline
-
- provide locked access to string table for USE_THREADS
-
- serial access to PL_x[inpr]v_root for USE_THREADS
- Branch: maint-5.005/perl
- ! embedvar.h objXSUB.h perl.c proto.h sv.c
- !> hv.c intrpvar.h thread.h
-____________________________________________________________________________
-[ 2173] By: gbarr on 1998/11/02 04:10:46
- Log: integrate change#1990 from mainline
-
- provide option to enable optimization with VC (suggested by Jan
- Dubois)
- Branch: maint-5.005/perl
- !> win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 2172] By: gbarr on 1998/11/02 02:52:29
- Log: integrate changes#1944,1948,1966 from mainline
-
- change#1614 merely disabled earlier fix (doh!); undo it and properly
- fixup the cop_seq value that must be seen by lexical lookups that
- emanate within eval''
-
- tweak to make fix in change#1944 behave correctly for closures
- created within eval''
- Branch: maint-5.005/perl
- ! op.c pp_ctl.c pp_hot.c scope.c
- !> cop.h t/op/eval.t
-____________________________________________________________________________
-[ 2171] By: gbarr on 1998/11/01 03:59:39
- Log: integrate changes 1835,2003,2067 and File::Find change in 1938
- warn on C<my($foo,$foo)>
-
- silence -w noises (suggested by Greg Bacon) Term::Complete
-
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Wed, 21 Oct 1998 00:55:51 +0200
- Message-ID: <36380269.55370608@smtp1.ibm.net>
- Subject: Make _really_ sure Dynaloader.xs code is initialized only once
- Branch: maint-5.005/perl
- ! op.c pod/perldiag.pod
- !> ext/DynaLoader/DynaLoader_pm.PL lib/File/Find.pm
- !> lib/Term/Complete.pm
-____________________________________________________________________________
-[ 2170] By: gbarr on 1998/11/01 03:48:38
- Log: integrate change 1992 from mainline
-
- applied suggested patch with small doc tweak
- From: Gisle Aas <gisle@aas.no>
- Date: 11 Oct 1998 12:53:13 +0200
- Message-ID: <m3u31bfjza.fsf@furu.g.aas.no>
- Subject: Re: [PATCH 5.005_52] Optional syswrite LENGTH argument
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod pp_sys.c
- !> opcode.h opcode.pl t/op/sysio.t t/op/tiehandle.t
-____________________________________________________________________________
-[ 2168] By: gbarr on 1998/11/01 01:58:58
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Date: Fri, 09 Oct 1998 23:28:31 +0200
- Message-ID: <36217b7f.3193091@smtp1.ibm.net>
- Subject: [PATCH 5.005_02] Allow XS access to vtbl_*s when compiled with PERL_OBJECT
- Branch: maint-5.005/perl
- ! XSUB.h
-____________________________________________________________________________
-[ 2167] By: gbarr on 1998/11/01 01:22:41
- Log: integrate change#2029 from mainline
- restore sanity to "constant" references
- Branch: maint-5.005/perl
- ! op.c pod/perldiag.pod
- !> lib/constant.pm t/pragma/constant.t
-____________________________________________________________________________
-[ 2166] By: gbarr on 1998/11/01 01:04:24
- Log: integrate changes#1895,1896,2066,2147,2148 from mainline
- fix win32_stat() to do the right thing for share names
-
- small tweak on last change
-
- recognize '%' as a shell metachar for win32
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Tue, 20 Oct 1998 21:57:35 +0200
- Message-ID: <3636ea31.49170453@smtp1.ibm.net>
- Subject: [PATCH 5.005_02, Win32] Re: %ENV% not expanded in backquotes?
-
- tweaked version of suggested patch
- From: Anton Berezin <tobez@plab.ku.dk>
- Date: 29 Oct 1998 14:48:54 +0100
- Message-ID: <86yapzv5q1.fsf@lion.plab.ku.dk>
- Subject: [PATCH 5.005_52] One more problem with win32_stat and MSVC
-
- From: Anton Berezin <tobez@plab.ku.dk>
- Date: 29 Oct 1998 17:06:25 +0100
- Message-ID: <86pvbbuzcu.fsf@lion.plab.ku.dk>
- Subject: [PATCH 5.005_52] win32_opendir() fails on empty drives
- Branch: maint-5.005/perl
- !> win32/win32.c
-____________________________________________________________________________
-[ 2165] By: gbarr on 1998/11/01 00:10:15
- Log: integrated changes#1941,1942,1943,1975,2061,2111,2151 from mainline
-
- don't longjmp() in pp_goto() (regressive bug from old single-stack
- implementation)
-
- force copy of substrings when matching against temporaries
-
- ensure recursive attempts to findlex()icals know enough about where
- the last eval'' context was encountered
-
- propagate typeness of lexicals while cloning them
-
- From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 17 Oct 1998 22:22:02 -0500
- Message-ID: <19981017222202.J510@pobox.com>
- Subject: Re: '*' prototype does not allow bareword with strict
-
- smarter C<$SIG{FOO} = BAREWORD;> warning
-
- From: Mark-Jason Dominus <mjd@plover.com>
- Date: Fri, 30 Oct 1998 14:24:23 EST
- Message-Id: <19981030192423.27276.qmail@plover.com>
- Subject: PATCH: (5.005_02) a2p should use `chomp' instead of `chop'
- Branch: maint-5.005/perl
- ! op.c pp_ctl.c pp_hot.c t/op/pat.t toke.c
- !> t/op/eval.t t/op/runlevel.t x2p/walk.c
-____________________________________________________________________________
-[ 2158] By: gbarr on 1998/10/31 05:03:02
- Log: integrate changes#1821 & 1857 from mainline
-
- s/runops/CALLRUNOPS/
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 22 Sep 1998 17:30:16 -0400 (EDT)
- Message-Id: <199809222130.RAA17034@monk.mps.ohio-state.edu>
- Subject: More verbose Test::Harness [PATCH]
- Branch: maint-5.005/perl
- !> cc_runtime.h lib/Test/Harness.pm
-____________________________________________________________________________
-[ 2157] By: gbarr on 1998/10/31 02:35:07
- Log: integrate change#1839 from mainline
- From: Drago Goricanec <drago@raptor.otsd.ts.fujitsu.co.jp>
- Date: Mon, 7 Sep 1998 17:36:09 +0900
- Message-Id: <199809070836.RAA14631@raptor.otsd.ts.fujitsu.co.jp>
- Subject: Thread::cond_wait bug in 5.005.51 causes deadlock
- Branch: maint-5.005/perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 2156] By: gbarr on 1998/10/31 02:22:11
- Log: integrate change#1829 from mainline
- fix problematic typecast in filter_del()
- From: Mark P Lutz <tecmpl1@triton.ca.boeing.com>
- Date: Mon, 31 Aug 1998 21:13:11 GMT
- Message-Id: <199808312113.VAA53356@triton.ca.boeing.com>
- Subject: perl5.005_02 does not build on Cray T90
- Branch: maint-5.005/perl
- ! toke.c
-____________________________________________________________________________
-[ 2155] By: gbarr on 1998/10/31 01:59:08
- Log: integrate chnages#1824,2118 from mainline
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 29 Aug 1998 17:38:30 -0400 (EDT)
- Message-Id: <199808292138.RAA18359@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Protect debugger from nonlocal exits
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 28 Oct 1998 01:23:27 -0500 (EST)
- Message-Id: <199810280623.BAA06968@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.00552] Minor debugger tweaks
- Branch: maint-5.005/perl
- !> lib/perl5db.pl
-____________________________________________________________________________
-[ 2154] By: gbarr on 1998/10/31 01:06:35
- Log: integrate all lib/ExtUtils/... changes from mainline
- Branch: maint-5.005/perl
- !> lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm
- !> lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MM_Win32.pm
- !> lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mkbootstrap.pm
- !> lib/ExtUtils/Mksymlists.pm lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 2139] By: gbarr on 1998/10/30 04:17:53
- Log: apply chnage#2071 from mainline
- From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 17 Oct 1998 20:42:41 -0500
- Message-ID: <19981017204241.G510@pobox.com>
- Subject: Re: taint checking for: use lib "$ENV{'EVIL'}"
- Branch: maint-5.005/perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 2138] By: gbarr on 1998/10/30 04:14:35
- Log: apply change#2077 from mainline
- From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 24 Oct 1998 21:45:50 -0500
- Message-ID: <19981024214550.C508@pobox.com>
- Subject: Re: die with a reference should use overload "" operator
- Branch: maint-5.005/perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 2137] By: gbarr on 1998/10/30 04:01:06
- Log: integrate change#1937 from mainline
- fix $/ init for USE_THREADS
- Branch: maint-5.005/perl
- ! perl.c
-____________________________________________________________________________
-[ 2136] By: gbarr on 1998/10/30 03:40:55
- Log: apply change#2076 from mainline
- From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 24 Oct 1998 12:45:21 -0500
- Message-ID: <19981024124521.C512@pobox.com>
- Subject: [PATCH 5.005_02] Re: Auto-incrementing tied scalar causes SEGV
- Branch: maint-5.005/perl
- ! sv.c
-____________________________________________________________________________
-[ 2135] By: gbarr on 1998/10/30 03:28:29
- Log: integrate change#1873 from mainline
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 25 Aug 1998 04:29:49 -0400 (EDT)
- Message-Id: <199808250829.EAA02470@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Extraneous warning for (?()A|B)
- Branch: maint-5.005/perl
- ! regcomp.c
-____________________________________________________________________________
-[ 2134] By: gbarr on 1998/10/30 03:15:12
- Log: integrate change#1816 from mainline
- don't create empty directories in installperl
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Fri, 21 Aug 1998 11:29:24 +0100 (BST)
- Message-Id: <199808211029.LAA00551@cyclone.cise.npl.co.uk>
- Subject: [PATCH 5.005_02] install: empty dirs
- Branch: maint-5.005/perl
- !> installperl
-____________________________________________________________________________
-[ 2132] By: gbarr on 1998/10/30 01:39:00
- Log: integrate changes#1815 & 1828 from mainline
- make behavior of /(a{3})+/ like /(aaa)+/ w.r.t where it matches
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 21 Aug 1998 05:41:02 -0400 (EDT)
- Message-Id: <199808210941.FAA16467@monk.mps.ohio-state.edu>
- Subject: Re: your mail
-
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 31 Aug 1998 14:52:10 -0400 (EDT)
- Message-Id: <199808311852.OAA24676@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_5*] (?>) broken in RE
- Branch: maint-5.005/perl
- ! regexec.c
- !> t/op/re_tests
-____________________________________________________________________________
-[ 2131] By: gbarr on 1998/10/30 01:09:19
- Log: integrate change#1947 from mainline
- let docatch() pass the buck when restartop turns out to be null,
- making exceptions in BEGIN{} propagate as expected
- Branch: maint-5.005/perl
- ! pp_ctl.c
- !> t/op/misc.t
-____________________________________________________________________________
-[ 2129] By: gbarr on 1998/10/29 14:53:11
- Log: integrate change#1810 from mainline
- fix bogus integerization of pop()'s return value
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Sat, 15 Aug 1998 23:27:54 -0400
- Message-Id: <199808160327.XAA05186@aatma.engin.umich.edu>
- Subject: Re: Complex expression does integer arithmetic
- Branch: maint-5.005/perl
- !> opcode.h opcode.pl
-____________________________________________________________________________
-[ 2128] By: gbarr on 1998/10/29 14:28:13
- Log: integrate change#1870 from mainline
- From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Fri, 14 Aug 1998 09:20:16 PDT
- Message-Id: <3.0.5.32.19980814092016.00b37dc0@ous.edu>
- Subject: [PATCH 5.005_02] (and _5x I expect) VMS config procedure patch
- Branch: maint-5.005/perl
- !> configure.com
-____________________________________________________________________________
-[ 2127] By: gbarr on 1998/10/29 13:36:29
- Log: Integrate change#1789 from mainline
- delay freeing itervar so C<for $i (@a) { return($i) }> works
- Branch: maint-5.005/perl
- !> cop.h t/cmd/for.t
-____________________________________________________________________________
-[ 2123] By: gbarr on 1998/10/29 02:43:01
- Log: Apply change#2075 from mainline
- fix C<print $n += 5;> etc.
- Branch: maint-5.005/perl
- ! toke.c
-____________________________________________________________________________
-[ 2122] By: gbarr on 1998/10/29 02:40:31
- Log: Apply change#2070 from mainline
- avoid bogus line number in XSUB redefined warnings
- Branch: maint-5.005/perl
- ! op.c
-____________________________________________________________________________
-[ 2121] By: gbarr on 1998/10/29 02:38:59
- Log: Apply change#2052 from mainline
- avoid the circular refcnt logic in magic_mutexfree()
- Branch: maint-5.005/perl
- ! mg.c pp.c pp_hot.c
-____________________________________________________________________________
-[ 2120] By: gbarr on 1998/10/29 02:36:23
- Log: Remove "5.005" hard-coded and expose vtbl_* from the perl DLL
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Date: Mon, 28 Sep 1998 08:49:13 -0700
- Message-ID: <000001bdeaf7$8a189350$a32fa8c0@tau.Active>
- Subject: PATCH [5.005_02] update
- Branch: maint-5.005/perl
- ! embed.h global.sym objXSUB.h objpp.h perl.h proto.h util.c
- ! win32/win32.c
-____________________________________________________________________________
-[ 2084] By: gbarr on 1998/10/25 19:09:11
- Log: Integrate change#2069 from mainline
- From: Martijn Koster <mak@excitecorp.com>
- Date: Wed, 21 Oct 1998 13:12:03 +0100
- Message-ID: <19981021131203.A15661@excitecorp.com>
- Subject: File::Path::mkpath reports the wrong error
- Branch: maint-5.005/perl
- !> lib/File/Path.pm
-____________________________________________________________________________
-[ 2083] By: gbarr on 1998/10/25 18:48:39
- Log: Integrate change#1965 from mainline
- use better numbers for exitstatus test
- Branch: maint-5.005/perl
- !> t/op/die_exit.t
-____________________________________________________________________________
-[ 2082] By: gbarr on 1998/10/25 18:22:54
- Log: Apply change 2054 from mainline
- disallow 'x' in hex numbers (except leading '0x')
- From: Gisle Aas <gisle@aas.no>
- Date: 16 Oct 1998 16:33:12 +0200
- Message-ID: <m3n26wtw47.fsf@furu.g.aas.no>
- Subject: Re: [PATCH 5.005_52] 'x' is not a legal hex digit
- Branch: maint-5.005/perl
- ! perlvars.h util.c
- !> t/op/oct.t
-____________________________________________________________________________
-[ 2081] By: gbarr on 1998/10/25 17:58:04
- Log: Apply change #1998 from mainline
- skip readonly vars and unref references when doing a reset()
- Branch: maint-5.005/perl
- ! sv.c
-____________________________________________________________________________
-[ 2080] By: gbarr on 1998/10/25 16:06:35
- Log: Integrate changes #2072 & #1993 from mainline
- fix bug in B::CC::pp_sassign()
- From: "vishal bhatia" <vishalb@hotmail.com>
- Date: Sun, 11 Oct 1998 18:41:38 PDT
- Message-ID: <19981012014139.19614.qmail@hotmail.com>
- Subject: B::CC problems with pp_sassign routine
- implement C<goto &func> and other fixes (via private mail)
- From: "vishal bhatia" <vishalb@hotmail.com>
- Date: Wed, 21 Oct 1998 22:59:03 PDT
- Message-Id: <19981022055904.20083.qmail@hotmail.com>
- Subject: [PATCH 5.005_52] More fixes for B
- Branch: maint-5.005/perl
- !> ext/B/B.pm ext/B/B.xs ext/B/B/C.pm ext/B/B/CC.pm
-____________________________________________________________________________
-[ 2079] By: gbarr on 1998/10/25 14:08:00
- Log: integrate from mainline more FSF address changes
- Branch: maint-5.005/perl
- !> Copying ext/B/README lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 2053] By: gbarr on 1998/10/25 04:56:47
- Log: From: Graham Barr <gbarr@pobox.com>
- Date: Sat, 17 Oct 1998 23:05:18 -0500
- Message-ID: <19981017230518.K510@pobox.com>
- Subject: Re: redo LOOP not restoring $` $' $&
- Branch: maint-5.005/perl
- ! cop.h t/cmd/while.t
-____________________________________________________________________________
-[ 2048] By: gbarr on 1998/10/24 04:20:10
- Log: Change Free Software Foundation address in README
- Branch: maint-5.005/perl
- !> README
-____________________________________________________________________________
-[ 2047] By: gbarr on 1998/10/24 04:02:20
- Log: Remove #ifdef DEBUGGING around SvTEMP_off
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Mon, 28 Sep 1998 15:23:39 -0400
- Message-Id: <199809281923.PAA10303@aatma.engin.umich.edu>
- Subject: Re: [PATCH] Re: 5.005_52: the miniperl coredump: touch magic and you're toast
- Branch: maint-5.005/perl
- ! scope.c
-____________________________________________________________________________
-[ 2046] By: gbarr on 1998/10/24 04:00:54
- Log: use cpp symbols instead of hardwired constants
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Mon, 05 Oct 1998 09:23:33 +0100
- Message-Id: <199810050823.JAA00891@crypt.compulink.co.uk>
- Subject: [PATCH 5.005_52] By the numbers (resend)
- Branch: maint-5.005/perl
- ! op.c
-____________________________________________________________________________
-[ 2045] By: gbarr on 1998/10/24 03:50:25
- Log: squelch undef warnings
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Fri, 02 Oct 1998 11:01:14 +0100
- Message-Id: <199810021001.LAA19214@crypt.compulink.co.uk>
- Subject: [PATCH] Re: Apparent bug in Math::BigInt
- Branch: maint-5.005/perl
- !> lib/Math/BigInt.pm
-____________________________________________________________________________
-[ 2044] By: gbarr on 1998/10/24 03:47:24
- Log: Add note to INSTALL about ANSI C
- Branch: maint-5.005/perl
- ! INSTALL
-____________________________________________________________________________
-[ 2043] By: gbarr on 1998/10/24 02:38:12
- Log: make C<goto &sub> AUTOLOAD-aware (autouse now works for modules
- that are autoloaded)
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Thu, 24 Sep 1998 03:01:01 -0400
- Message-Id: <199809240701.DAA16223@aatma.engin.umich.edu>
- Subject: Re: autouse and Getopt::Long don't work together anymore
- Branch: maint-5.005/perl
- ! pp_ctl.c t/op/goto.t
-____________________________________________________________________________
-[ 2042] By: gbarr on 1998/10/24 02:16:26
- Log: From: jarkko.hietaniemi@research.nokia.com (Jarkko Hietaniemi)
- Date: Wed, 12 Aug 1998 15:42:35 +0300
- Message-Id: <199808121242.PAA29761@comanche.spices>
- Subject: [PATCH] 5.004_02 or 5.005_51: fix regexp and tr character ranges in non-ASCII lands
- Branch: maint-5.005/perl
- + t/op/tr.t
- ! MANIFEST perl.h pod/perllocale.pod pod/perlop.pod
- ! pod/perlre.pod regcomp.c t/pragma/locale.t toke.c
-____________________________________________________________________________
-[ 2021] By: gbarr on 1998/10/20 01:25:23
- Log: From: Chip Salzenberg <chip@perlsupport.com>
- Date: Tue, 6 Oct 1998 13:33:05 -0400
- Message-ID: <19981006133305.A2348@perlsupport.com>
- Subject: [PATCH] 5.005_02: Eliminate leak on self-ties
- Branch: maint-5.005/perl
- ! av.c doop.c hv.c mg.c mg.h pp.c pp_hot.c pp_sys.c scope.c
- ! t/op/tie.t
-____________________________________________________________________________
-[ 2015] By: gbarr on 1998/10/17 21:49:56
- Log: make h2xs generate ANSI prototypes
- Branch: maint-5.005/perl
- !> utils/h2xs.PL
-____________________________________________________________________________
-[ 2014] By: gbarr on 1998/10/17 20:31:42
- Log: Fix POSIX::sigprocmask not to check type of $old parameter
- as it is output only
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 2013] By: gbarr on 1998/10/17 17:51:16
- Log: From: "Kurt D. Starsinic" <kstar@chapin.edu>
- Date: Thu, 20 Aug 1998 20:59:03 -0400
- Message-ID: <19980820205903.A12908@O2.chapin.edu>
- Subject: [PATCH] h2ph misquotes #error directives
-
- fix h2ph handling of C<#error "foo">
- From: SAKAI Kiyotaka <ksakai@netwk.ntt-at.co.jp>
- Date: Thu, 10 Sep 1998 09:59:33 +0900
- Message-Id: <19980910095933N.ksakai@netwk.ntt-at.co.jp>
- Subject: [5.005_02] h2ph problem
- Branch: maint-5.005/perl
- !> t/lib/h2ph.pht utils/h2ph.PL
-____________________________________________________________________________
-[ 1985] By: gbarr on 1998/10/17 00:41:40
- Log: s/last/first/ typo in append_list()
- Branch: maint-5.005/perl
- ! op.c
-____________________________________________________________________________
-[ 1984] By: gbarr on 1998/10/17 00:36:51
- Log: From: "Green, Paul" <pgreen@seussnt.stratus.com>
- Date: Thu, 10 Sep 1998 00:02:07 -0400
- Message-ID: <646CD0392810D211B04A00A024BF26FB1022EB@terminator.sw.stratus.com>
- Subject: RE: [PATCH] 5.005_02 and 5.005_51: Stratus VOS port
- Branch: maint-5.005/perl
- + README.vos vos/Changes vos/build.cm vos/compile_perl.cm
- + vos/config.h vos/config_h.SH_orig vos/perl.bind
- + vos/test_vos_dummies.c vos/vos_dummies.c vos/vosish.h
- ! MANIFEST perl.c perl.h pod/perlport.pod
-____________________________________________________________________________
-[ 1983] By: gbarr on 1998/10/17 00:23:31
- Log: define PUT_svindex(), PUT_opindex()
- Branch: maint-5.005/perl
- !> ext/B/B/Assembler.pm
-____________________________________________________________________________
-[ 1982] By: gbarr on 1998/10/17 00:20:57
- Log: From: Jochen Wiedmann <joe@ispsoft.de>
- Date: Thu, 17 Sep 1998 17:16:06 +0200
- Message-ID: <360127B6.E44564A@ispsoft.de>
- Subject: [PATCH] ExtUtils::MakeMaker::prompt cannot return 0
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1981] By: gbarr on 1998/10/16 02:58:10
- Log: better CR-handling on shebang line and in formats (fixed variant of
- patch suggested by Igor Sysoev <igor@nitek.ru>)
- Branch: maint-5.005/perl
- ! perl.c toke.c
-____________________________________________________________________________
-[ 1980] By: gbarr on 1998/10/16 02:21:57
- Log: From: Roderick Schertler <roderick@argon.org>
- Date: 11 Sep 1998 16:19:21 -0400
- Message-ID: <pzyarqpfli.fsf@eeyore.ibcinc.com>
- Subject: Re: Open2 and memory leaks
- Branch: maint-5.005/perl
- !> lib/IPC/Open3.pm
-____________________________________________________________________________
-[ 1979] By: gbarr on 1998/10/16 02:15:54
- Log: integrate change #1908 from mainline
- Branch: maint-5.005/perl
- !> lib/File/Find.pm
-____________________________________________________________________________
-[ 1977] By: gbarr on 1998/10/16 01:52:46
- Log: tests missing from change #1794
- Branch: maint-5.005/perl
- ! t/op/re_tests
-____________________________________________________________________________
-[ 1794] By: gbarr on 1998/09/20 15:59:20
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 11 Aug 1998 18:43:29 -0400 (EDT)
- Message-Id: <199808112243.SAA14243@monk.mps.ohio-state.edu>
- Subject: Re: Segmentation fault for /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- Branch: maint-5.005/perl
- ! regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 1793] By: gbarr on 1998/09/20 15:39:41
- Log: From: Peter Prymmer <pvhp@forte.com>
- Date: Mon, 10 Aug 98 16:58:22 PDT
- Message-Id: <9808102358.AA10616@forte.com>
- Subject: fix for unpack('u') failures on OS/390
- Branch: maint-5.005/perl
- ! pp.c
-____________________________________________________________________________
-[ 1792] By: gbarr on 1998/09/20 15:11:33
- Log: From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Sun, 9 Aug 1998 15:51:48 +0100
- Message-Id: <E0z5Wp2-00071p-00@taurus.cus.cam.ac.uk>
- Subject: Fix typo, change "an array" to "a hash"
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1791] By: gbarr on 1998/09/20 14:49:26
- Log: From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Wed, 16 Sep 1998 22:13:17 -0400
- Message-Id: <199809170213.WAA10546@aatma.engin.umich.edu>
- Subject: fill gaps in sig_* entries in win32/config.?c
- and resync win32/config.?c with Porting/config.sh to pick up apiversion
- Branch: maint-5.005/perl
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1790] By: gbarr on 1998/09/20 14:40:56
- Log: From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Sun, 06 Sep 1998 15:35:11 -0400
- Message-Id: <199809061935.PAA21531@aatma.engin.umich.edu>
- Subject: suppress bogus warning on C<sub x {} x()>
- Branch: maint-5.005/perl
- ! toke.c
-____________________________________________________________________________
-[ 1784] By: nick on 1998/09/12 09:53:36
- Log: Two tweaks to allow quiet compile qith egcs-1.1
- Branch: maint-5.005/perl
- ! win32/win32.h
-____________________________________________________________________________
-[ 1783] By: gbarr on 1998/09/07 20:33:11
- Log: Subject: index() applied BM optimization to wrong argument
- From: larry@wall.org (Larry Wall)
- Date: Thu, 3 Sep 1998 12:49:13 -0700
- Message-Id: <199809031949.MAA29566@wall.org>, <199809060004.RAA23792@wall.org>
- Branch: maint-5.005/perl
- ! op.c util.c
-____________________________________________________________________________
-[ 1782] By: gbarr on 1998/09/07 18:54:49
- Log: From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Date: Fri, 28 Aug 1998 00:33:15 -0400
- Mssage-Id: <199808280433.AAA06767@aatma.engin.umich.edu>
- Subject: socket problems on NT
- Branch: maint-5.005/perl
- ! objXSUB.h
-____________________________________________________________________________
-[ 1759] By: gsar on 1998/08/08 20:57:47
- Log: pending submit of 5.005_02
- Branch: maint-5.005/perl
- ! Changes
-
-----------------
-Version 5.005_02 Second maintenance release of 5.005
-----------------
-
-____________________________________________________________________________
-[ 1758] By: gsar on 1998/08/08 03:45:04
- Log: set patchlevel.h, other minor tweaks
- Branch: maint-5.005/perl
- ! Changes patchlevel.h pod/perlhist.pod pod/perlport.pod
-____________________________________________________________________________
-[ 1757] By: gsar on 1998/08/08 03:33:33
- Log: prevent lexical leaks from Benchmark into target code (inspired by
- an attempt by John Allen)
- Branch: maint-5.005/perl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 1755] By: gsar on 1998/08/07 23:58:33
- Log: temporary opcode.pl workaround for ebcdic (suggested by
- David J. Fiander <davidf@mks.com> and M.J.T. Guy)
- Branch: maint-5.005/perl
- ! opcode.pl
-____________________________________________________________________________
-[ 1754] By: gsar on 1998/08/07 22:21:10
- Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Date: Fri, 7 Aug 1998 09:56:01 +0100 (BST)
- Message-Id: <9808070856.AA28065@claudius.bfsec.bt.co.uk>
- Subject: [PATCH 5.005_50 & 5.005_02] Fix for command line use of source filters
- Branch: maint-5.005/perl
- ! perl.c
-____________________________________________________________________________
-[ 1753] By: gsar on 1998/08/07 22:19:42
- Log: perlport.pod notes from Jarkko Hietaniemi; utime() note for Win32
- Branch: maint-5.005/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 1752] By: gsar on 1998/08/07 22:08:29
- Log: perlport.pod v1.33 from Chris Nandor <pudge@pobox.com>
- Branch: maint-5.005/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 1751] By: gsar on 1998/08/07 22:01:04
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 6 Aug 1998 19:44:16 -0400 (EDT)
- Message-Id: <199808062344.TAA09505@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Minor cleanup of RE tests and docs
- Branch: maint-5.005/perl
- ! pod/perlre.pod t/op/regexp.t
-____________________________________________________________________________
-[ 1750] By: gsar on 1998/08/07 21:51:52
- Log: allow more compatible interpretation of spaces File::DosGlob::glob()
- patterns
- Branch: maint-5.005/perl
- ! lib/File/DosGlob.pm
-____________________________________________________________________________
-[ 1749] By: gsar on 1998/08/07 21:36:04
- Log: don't use © in Test.pm (suggested by M.J.T. Guy)
- Branch: maint-5.005/perl
- ! lib/Test.pm
-____________________________________________________________________________
-[ 1748] By: gsar on 1998/08/07 21:31:46
- Log: From: Dominic Dunlop <domo@computer.org>
- Date: Thu, 6 Aug 1998 12:38:07 +0000
- Message-Id: <v03110702b1ef5274635a@[195.95.102.104]>
- Subject: [Patch perl5.005_02-TRIAL2] Update hints, Configure for MachTen 4.1.1
- Branch: maint-5.005/perl
- ! Configure hints/machten.sh
-____________________________________________________________________________
-[ 1746] By: gsar on 1998/08/05 22:55:59
- Log: MM_Win32.pm and Liblist.pm tweaks
- Branch: maint-5.005/perl
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm
-____________________________________________________________________________
-[ 1745] By: gsar on 1998/08/05 21:57:00
- Log: pod/perlfaq* update from Tom Christiansen <tchrist@perl.com>
- Branch: maint-5.005/perl
- ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq8.pod
-____________________________________________________________________________
-[ 1744] By: gsar on 1998/08/05 21:53:30
- Log: From: Chris Nandor <pudge@pobox.com>
- Date: Wed, 5 Aug 1998 15:38:48 -0400
- Message-Id: <v04011701b1ee58b86c63@[192.168.0.3]>
- Subject: [PATCH] perlport 1.32
- Branch: maint-5.005/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 1743] By: gsar on 1998/08/05 21:52:05
- Log: README.os2 update
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 5 Aug 1998 05:44:46 -0400 (EDT)
- Message-Id: <199808050944.FAA09053@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Additional OS/2 tweaks: docs, tests
- Branch: maint-5.005/perl
- ! README.os2 t/lib/posix.t t/op/exec.t
-____________________________________________________________________________
-[ 1742] By: gsar on 1998/08/05 21:50:07
- Log: additional INSTALL notes from Jarkko Hietaniemi <jhi@cc.hut.fi>
- on semget failure in t/lib/ipc_sysv.t
- Branch: maint-5.005/perl
- ! INSTALL
-____________________________________________________________________________
-[ 1741] By: gsar on 1998/08/05 21:46:13
- Log: correct URL for perlcrt.dll
- Branch: maint-5.005/perl
- ! Changes win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1740] By: gsar on 1998/08/05 10:05:46
- Log: update Changes, patchlevel, tweak Liblist.pm
- Branch: maint-5.005/perl
- ! Changes lib/ExtUtils/Liblist.pm patchlevel.h
-____________________________________________________________________________
-[ 1739] By: gsar on 1998/08/05 09:10:45
- Log: newer cperl-mode.el
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 5 Aug 1998 03:50:16 -0400 (EDT)
- Message-Id: <199808050750.DAA07240@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] CPerl update
- Branch: maint-5.005/perl
- ! emacs/cperl-mode.el
-____________________________________________________________________________
-[ 1738] By: gsar on 1998/08/05 09:08:33
- Log: support :nosearch in ExtUtils::Liblist for win32, and make -lfoo
- processing (somewhat) compiler-specific
- Branch: maint-5.005/perl
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm
-____________________________________________________________________________
-[ 1737] By: gsar on 1998/08/05 03:20:03
- Log: add index entries for -X
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 02 Aug 1998 16:33:18 EDT
- Message-Id: <199808022033.QAA18778@monk.mps.ohio-state.edu>
- Subject: [PATCH] A missing docu patch
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1736] By: gsar on 1998/08/05 03:09:58
- Log: make Test::Harness optionally check for stray files when running tests
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 2 Aug 1998 18:12:48 -0400 (EDT)
- Message-Id: <199808022212.SAA20126@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] File leaked from test suite
- Branch: maint-5.005/perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 1735] By: gsar on 1998/08/05 02:29:46
- Log: back out change#1703 that break bincompat with PERL_OBJECT and
- MULTIPLICITY
- Branch: maint-5.005/perl
- ! ext/re/re.pm regcomp.c regexec.c thrdvar.h
-____________________________________________________________________________
-[ 1734] By: gsar on 1998/08/05 02:23:47
- Log: fixes to enable ISC to build IPC/SysV
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Date: 05 Aug 1998 00:59:13 +0300
- Message-ID: <oee3ebce7da.fsf@alpha.hut.fi>
- Subject: [PATCH] 5.005_02-TRIAL1: (Re: Bug in pp_rename and ISC hint)
- Branch: maint-5.005/perl
- ! ext/IPC/SysV/SysV.xs hints/isc.sh hints/isc_2.sh
-____________________________________________________________________________
-[ 1733] By: gsar on 1998/08/05 01:20:29
- Log: let some 'tr' be '$tr' for occult reasons
- From: Jeff Okamoto <okamoto@xfiles.intercon.hp.com>
- Date: Mon, 3 Aug 1998 11:04:30 -0700 (PDT)
- Message-Id: <199808031804.LAA25595@xfiles.intercon.hp.com>
- Subject: PATCH: Configure uses tr, not $tr
- Branch: maint-5.005/perl
- ! Configure
-____________________________________________________________________________
-[ 1732] By: gsar on 1998/08/05 01:16:40
- Log: perlre.pod tweak suggested by Mike Wescott <mike.wescott@columbiasc.ncr.com>
- Branch: maint-5.005/perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 1731] By: gsar on 1998/08/05 01:10:41
- Log: explain caveat about use of numeric constants in podoc for sysopen()
- From: "David J. Fiander" <davidf@mks.com>
- Date: Tue, 4 Aug 1998 13:09:58 -0400
- Message-Id: <199808041709.NAA01750@mks.com>
- Subject: Re: [PATCH] 5.005_01: OE MVS
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1730] By: gsar on 1998/08/05 00:46:53
- Log: end pod processing when source file is closed (prevents it carrying
- over into require()d files)
- Branch: maint-5.005/perl
- ! t/comp/require.t toke.c
-____________________________________________________________________________
-[ 1729] By: gsar on 1998/08/04 23:03:23
- Log: correct prototype for des_fcrypt(), explain how to add it in more
- detail, and supply a patch for libdes-3.06
- Branch: maint-5.005/perl
- + win32/des_fcrypt.patch
- ! MANIFEST README.win32 win32/Makefile win32/makefile.mk
- ! win32/win32.c
-____________________________________________________________________________
-[ 1728] By: gsar on 1998/08/04 21:50:40
- Log: tweak to avoid ambiguity warnings
- Branch: maint-5.005/perl
- ! pp.c
-____________________________________________________________________________
-[ 1727] By: gsar on 1998/08/04 20:31:04
- Log: remove useless 'rcsid' (extension of a suggestion by
- Stephen McCamant)
- Branch: maint-5.005/perl
- ! embed.h ext/SDBM_File/sdbm/pair.c ext/SDBM_File/sdbm/sdbm.c
- ! global.sym gv.c perl.c vms/gen_shrfls.pl
-____________________________________________________________________________
-[ 1726] By: gsar on 1998/08/04 19:52:43
- Log: correct Pod::Html's notion of email addresses
- From: abigail@fnx.com
- Date: Mon, 3 Aug 1998 20:22:49 -0400 (EDT)
- Message-ID: <19980804002249.2011.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH 5.005_01] lib/Pod/Html.pm
- Branch: maint-5.005/perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 1725] By: gsar on 1998/08/04 19:50:06
- Log: perlport.pod additions from Peter Prymmer <pvhp@forte.com>
- Date: Mon, 3 Aug 98 15:31:35 PDT
- Message-Id: <9808032231.AA22324@forte.com>
- --
- Date: Tue, 4 Aug 98 12:44:20 PDT
- Message-Id: <9808041944.AA04815@forte.com>
- Branch: maint-5.005/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 1724] By: gsar on 1998/08/04 18:08:07
- Log: From: Chris Nandor <pudge@pobox.com>
- Date: Mon, 3 Aug 1998 13:35:25 -0400
- Message-Id: <v04011711b1eba46d0827@[192.168.0.3]>
- Subject: [PATCH] perlport 1.30
- Branch: maint-5.005/perl
- ! pod/perlport.pod
-____________________________________________________________________________
-[ 1723] By: gsar on 1998/08/04 18:06:13
- Log: update postscript generator
- From: Tom Christiansen <tchrist@chthon.perl.com>
- Date: Mon, 3 Aug 1998 05:29:25 -0600
- Message-Id: <199808031129.FAA24985@chthon.perl.com>
- Subject: PATCH: pod/roffitall (5.005_02)
- Branch: maint-5.005/perl
- ! pod/roffitall
-____________________________________________________________________________
-[ 1722] By: gsar on 1998/08/03 17:01:12
- Log: applied suggested patch, slightly tweaked
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Date: Mon, 3 Aug 1998 11:52:30 +0300 (EET DST)
- Message-Id: <199808030852.LAA14153@alpha.hut.fi>
- Subject: [PATCH] perl5.005_02-TRIAL1: pod/perlhist.pod
- Branch: maint-5.005/perl
- ! pod/perlhist.pod
-____________________________________________________________________________
-[ 1721] By: gsar on 1998/08/03 16:30:20
- Log: fix segfault when threadsv is used as foreach itervar
- From: Stephen McCamant <alias@mcs.com>
- Date: Sun, 02 Aug 1998 21:44:34 CDT
- Message-Id: <13765.8641.997452.14516@alias-2.pr.mcs.net>
- Subject: [PATCH] threadsv index in enteriter targ in op_free()
- Branch: maint-5.005/perl
- ! op.c
-____________________________________________________________________________
-[ 1720] By: gsar on 1998/08/02 23:33:42
- Log: close() open files before unlink()
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 2 Aug 1998 18:14:22 -0400 (EDT)
- Message-Id: <199808022214.SAA20135@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] File leaked from test suite - tests
- Branch: maint-5.005/perl
- ! t/base/rs.t t/op/defins.t
-____________________________________________________________________________
-[ 1719] By: gsar on 1998/08/02 23:31:51
- Log: more pack() tests
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Mon, 3 Aug 1998 00:59:41 +0300 (EET DST)
- Message-Id: <199808022159.AAA17160@alpha.hut.fi>
- Subject: Re: uudecode 'u' problem
- Branch: maint-5.005/perl
- ! t/op/pack.t
-____________________________________________________________________________
-[ 1718] By: gsar on 1998/08/02 23:26:51
- Log: t/TEST aesthetic tweak suggested by Jarkko
- Branch: maint-5.005/perl
- ! t/TEST
-____________________________________________________________________________
-[ 1717] By: gsar on 1998/08/02 23:23:43
- Log: add Digital Unix 3.x notes to README.threads (as suggested by
- Phoenix <awrobel@jedi.cis.temple.edu>)
- Branch: maint-5.005/perl
- ! README.threads
-____________________________________________________________________________
-[ 1716] By: gsar on 1998/08/02 23:15:00
- Log: allow *FOO{BAR}[0] etc. (without intervening arrow)
- From: Stephen McCamant <alias@mcs.com>
- Date: Sun, 2 Aug 1998 16:16:50 -0500 (CDT)
- Message-ID: <13764.54929.60137.104838@alias-2.pr.mcs.net>
- Subject: [PATCH] Re: Minor nit in glob notation
- Branch: maint-5.005/perl
- ! Changes op.c
-____________________________________________________________________________
-[ 1715] By: gsar on 1998/08/02 22:49:53
- Log: fix unpack('u',...) problem with spaces in input
- Branch: maint-5.005/perl
- ! pp.c t/op/pack.t
-____________________________________________________________________________
-[ 1714] By: gsar on 1998/08/02 21:27:19
- Log: update location of perlcrt.dll for win32 builds
- Branch: maint-5.005/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1713] By: gsar on 1998/08/02 09:28:32
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 2 Aug 1998 04:35:11 -0400 (EDT)
- Message-Id: <199808020835.EAA09367@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Better debugging output from malloc.c
- Branch: maint-5.005/perl
- ! malloc.c
-____________________________________________________________________________
-[ 1712] By: gsar on 1998/08/02 09:16:55
- Log: fix longstanding bug in pack('u',...) (reads garbage beyond the end
- of the input string)
- Branch: maint-5.005/perl
- ! pp.c
-____________________________________________________________________________
-[ 1711] By: gsar on 1998/08/02 08:14:25
- Log: update Changes, tweak Porting/makerel
- Branch: maint-5.005/perl
- ! Changes Porting/makerel
-____________________________________________________________________________
-[ 1710] By: gsar on 1998/08/02 07:31:37
- Log: remove CRs from djgpp/configure.bat (Porting/makerel adds them)
- Branch: maint-5.005/perl
- ! djgpp/configure.bat
-____________________________________________________________________________
-[ 1709] By: gsar on 1998/08/02 07:27:34
- Log: Porting/makerel tweaks
- Branch: maint-5.005/perl
- ! Porting/makerel
-____________________________________________________________________________
-[ 1708] By: gsar on 1998/08/02 07:09:35
- Log: fixes for pod noises
- Branch: maint-5.005/perl
- ! ext/B/B/Bytecode.pm ext/Thread/Thread/Specific.pm
- ! pod/perlembed.pod pod/perlfaq.pod
-____________________________________________________________________________
-[ 1707] By: gsar on 1998/08/02 06:59:47
- Log: malloc.c tweaks
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 01 Aug 1998 18:46:32 EDT
- Message-Id: <199808012246.SAA00699@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.005_*] Better malloc.c
- Branch: maint-5.005/perl
- ! malloc.c
-____________________________________________________________________________
-[ 1706] By: gsar on 1998/08/02 06:56:37
- Log: fix quoting of keys with embedded nulls
- From: Slaven Rezic <eserte@cs.tu-berlin.de>
- Date: Sat, 01 Aug 1998 13:38:03 +0200
- Message-Id: <199808011138.NAA05189@mail.cs.tu-berlin.de>
- Subject: Data::Dumper 2.09, patch
- Branch: maint-5.005/perl
- ! ext/Data/Dumper/Dumper.xs
-____________________________________________________________________________
-[ 1705] By: gsar on 1998/08/02 06:50:07
- Log: From: pvhp@forte.com (Peter Prymmer)
- Date: Fri, 31 Jul 1998 14:50:41 PDT
- Message-Id: <9807312150.AA08867@forte.com>
- Subject: Re: \Q doesn't work in interpolated regular expressions
- Branch: maint-5.005/perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 1704] By: gsar on 1998/08/02 06:37:06
- Log: add test for magic autovivification
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Thu, 30 Jul 1998 12:18:15 +0100
- Message-Id: <E0z1qit-0003O5-00@taurus.cus.cam.ac.uk>
- Subject: Re: Perl5.005_01 failing to autovivify subroutine args
- Branch: maint-5.005/perl
- ! pod/perldiag.pod t/cmd/subval.t
-____________________________________________________________________________
-[ 1703] By: gsar on 1998/08/02 06:26:57
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 21 Jul 1998 23:58:53 -0400 (EDT)
- Message-Id: <199807220358.XAA19811@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_76] better RE colors
- Branch: maint-5.005/perl
- ! ext/re/re.pm regcomp.c regexec.c thrdvar.h
-____________________________________________________________________________
-[ 1702] By: gsar on 1998/08/02 06:22:15
- Log: mark link type of exported functions for OS/2
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 26 Jul 1998 21:03:03 -0400 (EDT)
- Message-Id: <199807270103.VAA04977@monk.mps.ohio-state.edu>
- Subject: Re: Compiler linkage's types [PATCH 5.005]
- Branch: maint-5.005/perl
- ! os2/os2ish.h proto.h
-____________________________________________________________________________
-[ 1701] By: gsar on 1998/08/02 06:16:03
- Log: tweaked version of suggested patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 20 Jul 1998 21:40:00 -0400 (EDT)
- Message-Id: <199807210140.VAA17186@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_75] Enable -DS
- Branch: maint-5.005/perl
- ! README.threads ext/Thread/Thread.xs ext/Thread/typemap mg.c
- ! op.c perl.c perl.h pod/perlrun.pod pp.c pp_hot.c scope.c
- ! thread.h util.c win32/win32thread.c
-____________________________________________________________________________
-[ 1700] By: gsar on 1998/08/02 05:54:00
- Log: up patchlevel to 5.005_02
- Branch: maint-5.005/perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1699] By: gsar on 1998/08/02 05:50:01
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199807180809.EAA09379@monk.mps.ohio-state.edu>
- Date: Sat, 18 Jul 1998 04:09:26 -0400 (EDT)
- Subject: [PATCH 5.004_72] Make tests succeed on OS/2
- Branch: maint-5.005/perl
- ! t/io/fs.t t/lib/io_pipe.t t/lib/io_sock.t t/op/stat.t
-____________________________________________________________________________
-[ 1698] By: gsar on 1998/08/02 05:41:41
- Log: use I32_MAX as the limit when U16_MAX > I32_MAX (for CRAY)
- Branch: maint-5.005/perl
- ! regcomp.c
-____________________________________________________________________________
-[ 1697] By: gsar on 1998/08/02 05:20:12
- Log: support OE/MVS
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Message-Id: <199808010903.MAA09371@alpha.hut.fi>
- Date: Sat, 1 Aug 1998 12:03:02 +0300 (EET DST)
- Subject: [PATCH] 5.005_01: OE MVS
- Branch: maint-5.005/perl
- + README.os390 ebcdic.c
- ! Configure MANIFEST doio.c ext/Errno/Errno_pm.PL gv.c handy.h
- ! hints/os390.sh lib/bigint.pl mg.c patchlevel.h perl.c perl.h
- ! perly.c perly.h perly.y perly_c.diff pod/perldelta.pod
- ! pod/perlport.pod pp.c pp_ctl.c pp_hot.c pp_sys.c sv.c
- ! t/base/term.t t/comp/package.t t/comp/require.t
- ! t/lib/bigintpm.t t/lib/cgi-html.t t/lib/filehand.t t/lib/ph.t
- ! t/op/auto.t t/op/bop.t t/op/each.t t/op/magic.t t/op/misc.t
- ! t/op/ord.t t/op/pack.t t/op/quotemeta.t t/op/re_tests
- ! t/op/regexp.t t/op/sort.t t/op/sprintf.t t/op/subst.t
- ! t/op/taint.t t/op/universal.t t/pragma/constant.t
- ! t/pragma/overload.t t/pragma/subs.t toke.c x2p/a2p.h
- ! x2p/a2py.c
-____________________________________________________________________________
-[ 1696] By: gsar on 1998/08/02 05:03:09
- Log: VMS patches
- From: pvhp@forte.com (Peter Prymmer)
- Message-Id: <9807290017.AA01833@forte.com>
- Date: Tue, 28 Jul 98 17:17:33 PDT
- Subject: Re: Not OK: perl 5.00501 on VMS_AXP-thread I7.2
- --
- From: Dan Sugalski <sugalskd@osshe.edu>
- Message-Id: <3.0.5.32.19980729125623.00b562b0@ous.edu>
- Date: Wed, 29 Jul 1998 12:56:23 -0700
- Subject: [PATCH 5.005_01]Typo in CONFIGURE.COM (vms)
- --
- From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Thu, 30 Jul 1998 09:02:24 -0700
- Message-Id: <3.0.5.32.19980730090224.00b70eb0@ous.edu>
- Subject: [PATCH 5.005_01]VMS config SOCKETSHR typo patch and fcntl check
- Branch: maint-5.005/perl
- ! configure.com vms/subconfigure.com
-____________________________________________________________________________
-[ 1695] By: gsar on 1998/08/02 04:49:32
- Log: rename duplicate warning in regexec.c
- Branch: maint-5.005/perl
- ! regexec.c
-____________________________________________________________________________
-[ 1694] By: gsar on 1998/08/02 04:44:20
- Log: beware egcs' ld on Solaris
- From: Tom Spindler <dogcow@home.merit.edu>
- Message-ID: <19980801212158.A2934@home.merit.edu>
- Date: Sat, 1 Aug 1998 21:21:58 -0400
- Subject: Re: [PATCH perl5.005_01] hints/solaris_2.sh, egcs, and ld
- Branch: maint-5.005/perl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 1693] By: gsar on 1998/08/02 04:41:43
- Log: de-utf-ized variation of Ilya's patch
- From: Jan-Pieter Cornet <johnpc@xs4all.net>
- Date: 31 Jul 1998 12:44:57 +0200
- Message-ID: <6ps779$hmj$1@xs1.xs4all.nl>
- Subject: Re: s/\s*$//g in majordomo causes segfault under 5.005_01
- Branch: maint-5.005/perl
- ! regexec.c
-____________________________________________________________________________
-[ 1692] By: gsar on 1998/08/02 04:39:14
- Log: better validation of SysV IPC availability
- From: Jarkko Hietaniemi <jarkko.hietaniemi@research.nokia.com>
- Date: Fri, 31 Jul 1998 13:13:57 +0300 (EEST)
- Message-Id: <199807311013.NAA28887@koah.research.nokia.com>
- Subject: Re: lib/ipc_sysv.t fails under FreeBSD 2.2.1
- Branch: maint-5.005/perl
- ! Configure INSTALL ext/IPC/SysV/SysV.xs pod/perldiag.pod
- ! t/lib/ipc_sysv.t
-____________________________________________________________________________
-[ 1691] By: gsar on 1998/08/02 04:32:30
- Log: fix bug in display of watched expressions
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 30 Jul 1998 20:02:04 -0400 (EDT)
- Message-Id: <199807310002.UAA21681@monk.mps.ohio-state.edu>
- Subject: Re: Bug? in perl5db.pl [PATCH]
- Branch: maint-5.005/perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 1690] By: gsar on 1998/08/02 04:29:08
- Log: applied all but one hunk
- From: Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
- Date: Thu, 30 Jul 1998 17:19:42 -0400
- Message-Id: <199807302119.RAA06852@sleipnir.valparaiso.cl>
- Subject: Some typos in perldelta.pod
- Branch: maint-5.005/perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 1689] By: gsar on 1998/08/02 04:27:02
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Thu, 30 Jul 1998 10:22:36 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980730101627.17514B-100000@newton.phys>
- Subject: [PATCH 5.005_05] Remove redundant dTHR
- Branch: maint-5.005/perl
- ! mg.c sv.c
-____________________________________________________________________________
-[ 1688] By: gsar on 1998/08/02 04:25:49
- Log: From: Tom Hughes <thh@cyberscience.com>
- Date: 30 Jul 1998 09:47:31 +0100
- Message-ID: <yek1zr3vi70.fsf@elva.cyberscience.com>
- Subject: Class::Struct has an incomplete tied array package
- Branch: maint-5.005/perl
- ! lib/Class/Struct.pm
-____________________________________________________________________________
-[ 1687] By: gsar on 1998/08/02 04:21:48
- Log: ensure implicit close on local(*FH) doesn't affect $! and thence $?
- Branch: maint-5.005/perl
- ! sv.c t/op/die_exit.t
-____________________________________________________________________________
-[ 1686] By: gsar on 1998/08/02 03:57:28
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Thu, 30 Jul 1998 00:39:30 +0300 (EET DST)
- Message-Id: <199807292139.AAA01795@alpha.hut.fi>
- Subject: Re: [PATCH] 5.004_05-MAINT_TRIAL_5: three locale fixes
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.xs pod/perllocale.pod
-____________________________________________________________________________
-[ 1685] By: gsar on 1998/08/02 03:54:15
- Log: PERL_OBJECT bincompat fixes from Douglas Lankshear <dougl@ActiveState.com>
- Date: Wed, 29 Jul 1998 10:45:31 -0700
- Message-ID: <000101bdbb18$ae767550$a32fa8c0@tau.Active>
- Subject: [PATCH 5.005_01] Fixes binary compatibility for PERL_OBJECT
- --
- Date: Sat, 1 Aug 1998 09:33:19 -0700
- Message-ID: <000701bdbd6a$17ada180$a32fa8c0@tau.Active>
- Subject: [PATCH 5.005_01]
- Branch: maint-5.005/perl
- ! perl.h proto.h
-____________________________________________________________________________
-[ 1684] By: gsar on 1998/08/02 03:49:33
- Log: hand-apply whitespace-mutiliated patch
- From: Nicholas Clark <nick@flirble.org>
- Date: Tue, 28 Jul 1998 16:40:42 +0100 (BST)
- Message-Id: <199807281540.QAA04640@flirble.org>
- Subject: [PATCH] POSIX::ELOOP
- Branch: maint-5.005/perl
- ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 1683] By: gsar on 1998/08/02 03:45:26
- Log: document return values of do() better
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Tue, 28 Jul 1998 12:44:36 +0100
- Message-Id: <E0z18BI-0003cH-00@taurus.cus.cam.ac.uk>
- Subject: [PATCH] Re: Obscurity of lexicals with do ""
- Branch: maint-5.005/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1682] By: gsar on 1998/08/02 03:42:26
- Log: avoid reusing foreach itervar if magic got tacked onto it
- From: Stephen McCamant <alias@mcs.com>
- Date: Tue, 28 Jul 1998 22:18:25 -0500 (CDT)
- Message-ID: <13758.36756.215424.719750@alias-2.pr.mcs.net>
- Subject: [PATCH] Re: pos() resetting changed with 5.005?
- Branch: maint-5.005/perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 1681] By: gsar on 1998/08/02 03:39:27
- Log: From: Nick Ing-Simmons <nik@tiuk.ti.com>
- Date: Wed, 29 Jul 1998 13:28:14 +0100
- Message-Id: <199807291228.NAA20055@tiuk.ti.com>
- Subject: [Patch] Math::Complex - Ambiguous call resolved as CORE::foo()
- Branch: maint-5.005/perl
- + Porting/fixCORE
- ! MANIFEST lib/Math/Complex.pm
-____________________________________________________________________________
-[ 1680] By: gsar on 1998/08/02 03:33:07
- Log: From: h.sanden@elsevier.nl (Hugo van der Sanden)
- Date: Mon, 27 Jul 1998 13:34:45 +0200
- Message-Id: <199807271134.NAA24475@dorlas.elsevier.nl>
- Subject: perlcall.pod
- Branch: maint-5.005/perl
- ! pod/perlcall.pod
-____________________________________________________________________________
-[ 1679] By: gsar on 1998/08/02 03:29:41
- Log: MM_Win32::maybe_command() case-insesitivity tweak
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MM_Win32.pm
-____________________________________________________________________________
-[ 1678] By: gsar on 1998/08/02 03:24:29
- Log: fix MM_Win32::maybe_command()
- Branch: maint-5.005/perl
- ! lib/ExtUtils/MM_Win32.pm
-____________________________________________________________________________
-[ 1677] By: gsar on 1998/08/01 19:52:19
- Log: fixes for overloading bugs and docs, tweaked some
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 25 Jul 1998 21:28:16 -0400 (EDT)
- Message-Id: <199807260128.VAA10543@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_76] better overloading
- Branch: maint-5.005/perl
- ! Changes gv.c lib/dumpvar.pl lib/overload.pm lib/perl5db.pl
- ! t/pragma/overload.t
-____________________________________________________________________________
-[ 1676] By: gsar on 1998/08/01 19:37:13
- Log: stray s/foo/PL_foo/
- From: win@in.rhein-main.de (Winfried Koenig)
- Date: Mon, 27 Jul 98 21:13 MET
- Message-Id: <m0z0teW-00019aC@incom.rhein-main.de>
- Subject: Bug in pp_rename and ISC hint
- Branch: maint-5.005/perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1675] By: gsar on 1998/08/01 19:22:13
- Log: newer Porting/patchls from maint-5.004
- Branch: maint-5.005/perl
- ! Porting/patchls
-____________________________________________________________________________
-[ 1674] By: gsar on 1998/08/01 17:50:44
- Log: fix buggy detection of failed glob()
- Branch: maint-5.005/perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 1673] By: gsar on 1998/07/29 18:14:32
- Log: fix typo in change#1489 that prevented magic-autovivification
- Branch: maint-5.005/perl
- ! mg.c
-
-----------------
-Version 5.005_01 First maintenance release of 5.005
-----------------
-
-____________________________________________________________________________
-[ 1669] By: gsar on 1998/07/26 23:19:02
- Log: update Changes; add sv_*_mg() entries in win32/GenCAPI.pl
- Branch: maint-5.005/perl
- ! Changes proto.h win32/GenCAPI.pl
-____________________________________________________________________________
-[ 1668] By: gsar on 1998/07/26 21:12:11
- Log: s/TMP_CRLF_PATCH/PERL_STRICT_CR/ with sense reversed, so they
- can disable it from config.sh if they want; up patchlevel to 5_01;
- little tweaks to pods
- Branch: maint-5.005/perl
- ! README.win32 patchlevel.h pod/perldelta.pod toke.c
- ! win32/Makefile win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makefile.mk win32/win32.c
-____________________________________________________________________________
-[ 1662] By: gsar on 1998/07/26 05:01:52
- Log: add missing sv_*_mg() prototypes in proto.h, update perlhist.pod
- Branch: maint-5.005/perl
- ! pod/perlhist.pod proto.h
-____________________________________________________________________________
-[ 1658] By: gsar on 1998/07/26 02:23:46
- Log: VMS patches from Dan Sugalski <sugalskd@osshe.edu>
- Date: Fri, 24 Jul 1998 11:38:25 -0700
- Message-Id: <3.0.5.32.19980724113825.00a067b0@ous.edu>
- Subject: [PATCH 5.005] version number problem with VMS (Corrected)
- --
- Date: Fri, 24 Jul 1998 12:30:36 -0700
- Message-Id: <3.0.5.32.19980724123036.009f0390@ous.edu>
- Subject: [PATCH 5.005]Tweaks to README.vms
- --
- Date: Sat, 25 Jul 1998 17:56:55 -0700 (PDT)
- Message-ID: <Pine.GSO.3.96.980725175626.15740D-100000@netserve.ous.edu>
- Subject: [PATCH 5.005] Final build cleanup patch
- Branch: maint-5.005/perl
- ! README.vms vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 1657] By: gsar on 1998/07/26 02:19:50
- Log: another platform where pp_sselect() needs a whole fd_set buffer
- From: Lupe Christoph <lupe@alanya.m.isar.de>
- Date: Sat, 25 Jul 1998 19:49:33 +0200 (MET DST)
- Message-Id: <199807251749.TAA22347@alanya.m.isar.de>
- Subject: Patch for Not OK: perl 5.005 on i86pc-solaris-thread 2.6
- Branch: maint-5.005/perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1656] By: gsar on 1998/07/26 02:12:46
- Log: fix problem building modules on dos-djgpp
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Date: Sat, 25 Jul 1998 00:53:39 +0200
- Message-ID: <19980725005339.C222@cdata.tvnet.hu>
- Subject: [PATCH 5.005] dos-djgpp and modules problem
- Branch: maint-5.005/perl
- ! djgpp/fixpmain
-____________________________________________________________________________
-[ 1655] By: gsar on 1998/07/26 02:11:09
- Log: From: Tom Spindler <dogcow@home.merit.edu>
- Date: Wed, 22 Jul 1998 16:11:07 -0400
- Message-ID: <19980722161107.A16813@home.merit.edu>
- Subject: [PATCH 5.005] BeOS tweak
- Branch: maint-5.005/perl
- ! hints/beos.sh
-____________________________________________________________________________
-[ 1654] By: gsar on 1998/07/26 02:09:29
- Log: various pod tweaks
- Branch: maint-5.005/perl
- ! Changes pod/perldelta.pod pod/perlmodinstall.pod
- ! pod/perltoc.pod
-____________________________________________________________________________
-[ 1653] By: gsar on 1998/07/26 02:05:46
- Log: fix emacs/ptags for PL_* changes
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 24 Jul 1998 03:12:35 -0400 (EDT)
- Message-Id: <199807240712.DAA04204@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_76] Yet better ptags
- Branch: maint-5.005/perl
- ! emacs/ptags
-____________________________________________________________________________
-[ 1652] By: gsar on 1998/07/26 02:03:01
- Log: fix behavior of <=> on bigints
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Message-Id: <E0yzlfF-0004kz-00@taurus.cus.cam.ac.uk>
- Date: Fri, 24 Jul 1998 18:29:53 +0100
- Subject: [PATCH] Re: Math::BigInt <=> op is not correct.
- Branch: maint-5.005/perl
- ! lib/Math/BigInt.pm t/lib/bigintpm.t
-____________________________________________________________________________
-[ 1649] By: gsar on 1998/07/24 03:56:56
- Log: create maint-5.005 branch
- Branch: maint-5.005/perl
- +> (branch 1079 files)
-____________________________________________________________________________
-[ 1648] By: gsar on 1998/07/24 03:36:35
- Log: un-checked-in 5.005 Changes (this is 5.005 *exactly*)
- Branch: perl
- ! Changes
-
--------------
-Version 5.005 Production release
--------------
-
-____________________________________________________________________________
-[ 1647] By: gsar on 1998/07/22 21:11:29
- Log: sneak in hints/irix_6.sh update
- Branch: perl
- ! Changes hints/irix_6.sh
-____________________________________________________________________________
-[ 1646] By: gsar on 1998/07/22 21:00:44
- Log: Update perldelta and Changes; refresh perltoc; newer perlembed.pod
- from Jon Orwant <orwant@media.mit.edu>; update guts documentation
- to reflect PL_* changes; is this *it* for 5.005?
- Branch: perl
- ! Changes README.win32 patchlevel.h pod/perlcall.pod
- ! pod/perldelta.pod pod/perlembed.pod pod/perlguts.pod
- ! pod/perltoc.pod pod/perlxs.pod
-____________________________________________________________________________
-[ 1645] By: gsar on 1998/07/22 19:37:41
- Log: don't use qualify() in class methods
- From: Albert Dvornik <bert@genscan.com>
- Date: 22 Jul 1998 15:14:46 EDT
- Message-Id: <tqbtqhlmu1.fsf_-_@puma.genscan.com>
- Subject: [PATCH 5.005-MAYBE] Bug in IO::Handle->input_record_separator
- Branch: perl
- ! ext/IO/lib/IO/Handle.pm
-____________________________________________________________________________
-[ 1644] By: gsar on 1998/07/22 18:13:31
- Log: newer perlembed.pod
- Branch: perl
- ! pod/perlembed.pod
-____________________________________________________________________________
-[ 1643] By: gsar on 1998/07/22 18:03:42
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Wed, 22 Jul 1998 13:42:20 EDT
- Message-Id: <Pine.SUN.3.96.980722134049.10073C-100000@newton.phys>
- Subject: Re: 5.005 - a sneak preview
- Branch: perl
- ! Porting/pumpkin.pod
-____________________________________________________________________________
-[ 1642] By: gsar on 1998/07/22 17:58:42
- Log: add perlmodinstall, regen perltoc
- Branch: perl
- + pod/perlmodinstall.pod
- ! MANIFEST pod/Makefile pod/buildtoc pod/perl.pod
- ! pod/perltoc.pod win32/pod.mak
-____________________________________________________________________________
-[ 1641] By: gsar on 1998/07/22 17:11:55
- Log: support optional crypt() with PERL_OBJECT
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Date: Wed, 22 Jul 1998 08:21:10 PDT
- Message-Id: <000701bdb584$5b57c070$a32fa8c0@tau.Active>
- Subject: [PATCH 5.005 maybe] for crypt with PERL_OBJECT
- Branch: perl
- ! iperlsys.h pp.c win32/Makefile win32/makefile.mk
- ! win32/perlhost.h win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 1640] By: gsar on 1998/07/22 17:09:11
- Log: win32 tweaks
- Date: Wed, 22 Jul 1998 07:09:09 PDT
- Message-Id: <000001bdb57a$4bc9dd00$a32fa8c0@tau.Active>
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Branch: perl
- ! win32/Makefile win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 1639] By: gsar on 1998/07/22 17:00:30
- Log: From: d-lewart@uiuc.edu (Daniel S. Lewart)
- Date: Wed, 22 Jul 1998 06:20:08 CDT
- Message-Id: <199807221120.GAA07962@staff2.cso.uiuc.edu>
- Subject: [PATCH] lib/Sys/Syslog.pm doc
- Branch: perl
- ! Changes lib/Sys/Syslog.pm
-____________________________________________________________________________
-[ 1638] By: gsar on 1998/07/22 09:12:26
- Log: up patchlevel etc (only doc patching from now on, testing in progress)
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1637] By: gsar on 1998/07/22 08:27:09
- Log: VMS patches from Dan Sugalski <sugalskd@osshe.edu>
- Date: Tue, 21 Jul 1998 16:04:40 PDT
- Message-Id: <3.0.5.32.19980721160440.00a916f0@ous.edu>
- Subject: [PATCH 5.004_76]Document Vax C's death for VMS
- --
- Date: Tue, 21 Jul 1998 16:08:57 PDT
- Message-Id: <3.0.5.32.19980721160857.00a6d250@ous.edu>
- Subject: [PATCH 5.004_76]fix clean/realclean targets of VMS' makefile
- --
- Date: Tue, 21 Jul 1998 16:05:56 PDT
- Message-Id: <3.0.5.32.19980721160556.00a1a100@ous.edu>
- Subject: [PATCH 5.004_76]Note the record-read capabilities of $/ in perldelta.pod
- Branch: perl
- ! README.vms pod/perldelta.pod vms/descrip_mms.template
-____________________________________________________________________________
-[ 1636] By: gsar on 1998/07/22 08:04:37
- Log: fix quoting in t/io/inplace.t
- Branch: perl
- ! t/io/inplace.t
-____________________________________________________________________________
-[ 1635] By: gsar on 1998/07/22 07:59:30
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Tue, 21 Jul 1998 13:06:44 PDT
- Message-Id: <3.0.5.32.19980721130644.00ac5100@ous.edu>
- Subject: [PATCH 5.004_76]t/io/inplace.t enabled for VMS
- Branch: perl
- ! t/io/inplace.t vms/test.com
-____________________________________________________________________________
-[ 1634] By: gsar on 1998/07/22 07:55:35
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Tue, 21 Jul 1998 12:42:20 PDT
- Message-Id: <3.0.5.32.19980721124220.00a82a20@ous.edu>
- Subject: [PATCH 5.004_76]Fix inplace editing for VMS
- Branch: perl
- ! doio.c
-____________________________________________________________________________
-[ 1633] By: gsar on 1998/07/22 07:53:53
- Log: fix AIX hints for PL_* changes
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 21 Jul 1998 22:53:54 +0300
- Message-Id: <199807211953.WAA55724@vipunen.hut.fi>
- Subject: Re: _76 fails to link B extension on AIX 414
- Branch: perl
- ! perl_exp.SH
-____________________________________________________________________________
-[ 1632] By: gsar on 1998/07/22 07:51:56
- Log: From: Anton Berezin <tobez@plab.ku.dk>
- Date: Tue, 21 Jul 1998 21:46:45 +0200
- Message-Id: <199807211946.VAA01301@lion.plab.ku.dk>
- Subject: [PATCH _76] t/op/eval.t test for eval & scoping of lexicals
- Branch: perl
- ! t/op/eval.t
-____________________________________________________________________________
-[ 1631] By: gsar on 1998/07/22 07:48:20
- Log: applied patch, with tweak suggested by Michael Parker
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Tue, 21 Jul 1998 14:30:05 EDT
- Message-Id: <Pine.SUN.3.96.980721142928.8231Q-100000@newton.phys>
- Subject: Re: Not OK: _76 on IP22-irix6.2 fails tests
- Branch: perl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 1630] By: gsar on 1998/07/22 07:40:25
- Log: better diagnostic on errno.t failure
- From: Graham Barr <gbarr@ti.com>
- Date: Tue, 21 Jul 1998 13:07:29 CDT
- Message-Id: <19980721130729.K4337@asic.sc.ti.com>
- Branch: perl
- ! t/lib/errno.t
-____________________________________________________________________________
-[ 1629] By: gsar on 1998/07/22 07:36:38
- Log: win32 tweaks: disable XSLOCKS in perl.c, correct typo, search
- the registry for anything that begins with "PERL", not "PERL5"
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Date: Tue, 21 Jul 1998 11:08:00 PDT
- Message-Id: <000601bdb4d2$7ee74720$a32fa8c0@tau.Active>
- Branch: perl
- ! perl.c win32/perlhost.h win32/win32.c
-____________________________________________________________________________
-[ 1628] By: gsar on 1998/07/22 07:28:35
- Log: suppress redefined warnings on C<INIT {} INIT {}>
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1627] By: gsar on 1998/07/22 07:15:19
- Log: remove spurious $VERSION line that confuses CPAN
- From: Johan Vromans <jvromans@squirrel.nl>
- Date: Tue, 21 Jul 1998 20:01:36 +0200
- Message-Id: <13748.55168.397720.564438@phoenix.squirrel.nl>
- Subject: Re: 5.004_76 missing version numbers
- Branch: perl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 1626] By: gsar on 1998/07/22 06:57:56
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Tue, 21 Jul 1998 10:20:13 EDT
- Message-Id: <Pine.SUN.3.96.980721101922.8078A-100000@newton.phys>
- Subject: [PATCH] Porting/config* updates for 5.005
- Branch: perl
- ! Changes Porting/config.sh Porting/config_H
-____________________________________________________________________________
-[ 1625] By: gsar on 1998/07/22 06:46:38
- Log: add a few more globals with old names #defined
- Branch: perl
- ! embed.pl embedvar.h
-____________________________________________________________________________
-[ 1624] By: gsar on 1998/07/22 06:39:22
- Log: allow extensions to be specified as paths
- From: Paul Johnson <pjcj@transeda.com>
- Date: Tue, 21 Jul 1998 12:04:27 BST
- Message-Id: <19980721120427.F903@west-tip.transeda.com>
- Subject: [PATCH] 5.004_75 Embed and static extensions
- Branch: perl
- ! lib/ExtUtils/Embed.pm
-____________________________________________________________________________
-[ 1623] By: gsar on 1998/07/22 06:12:50
- Log: make $ prototype to accept THREADSVs
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1622] By: gsar on 1998/07/22 06:04:25
- Log: fix Liblist.pm to find entries that are plain pathnames on win32
- Branch: perl
- ! lib/ExtUtils/Liblist.pm
-____________________________________________________________________________
-[ 1621] By: gsar on 1998/07/22 05:10:53
- Log: perlfaq update from From Tom Christiansen and Nathan Torkington
- (removes all mention of training courses from perlfaq*.pod)
- Branch: perl
- ! pod/perlfaq.pod pod/perlfaq2.pod pod/perlfaq3.pod
- ! pod/perlfaq4.pod pod/perlfaq6.pod pod/perlfaq7.pod
- ! pod/perlfaq8.pod pod/perlfaq9.pod
-____________________________________________________________________________
-[ 1620] By: gsar on 1998/07/22 02:51:13
- Log: applied patch, modulo parts already added to perldelta
- From: Stephen McCamant <alias@mcs.com>
- Date: Tue, 21 Jul 1998 17:06:23 CDT
- Message-Id: <13749.3106.995764.413053@alias-2.pr.mcs.net>
- Subject: [PATCH] Re: Beta2 is available
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 1619] By: gsar on 1998/07/22 02:45:55
- Log: applied patch, add new message to perldeta
- From: Stephen McCamant <alias@mcs.com>
- Date: Tue, 21 Jul 1998 16:12:25 CDT
- Message-Id: <13749.910.83378.949909@alias-2.pr.mcs.net>
- Subject: [PATCH] Band-aid patch for local($avhv->{a})
- Branch: perl
- ! pod/perldelta.pod pod/perldiag.pod pp.c pp_hot.c
-____________________________________________________________________________
-[ 1618] By: gsar on 1998/07/22 02:08:00
- Log: fix up B modules for PL_* changes
- Branch: perl
- ! ext/B/B/C.pm ext/B/B/CC.pm ext/B/B/Stackobj.pm
-____________________________________________________________________________
-[ 1617] By: gsar on 1998/07/22 01:42:14
- Log: From: Malcolm Beattie <mbeattie@sable.ox.ac.uk>
- Date: Tue, 21 Jul 1998 18:13:16 BST
- Message-Id: <199807211713.SAA20735@sable.ox.ac.uk>
- Subject: Compiler docs for 5.005
- Branch: perl
- ! ext/B/B.pm ext/B/B/Bytecode.pm ext/B/B/C.pm ext/B/B/CC.pm
- ! ext/B/O.pm
-____________________________________________________________________________
-[ 1616] By: gsar on 1998/07/22 01:29:09
- Log: s/PL_sv/PL_bytecode_sv/ etc., so we have unique, case-insensitive
- names
- Branch: perl
- ! bytecode.h bytecode.pl byterun.c embedvar.h interp.sym
- ! intrpvar.h
-____________________________________________________________________________
-[ 1615] By: nick on 1998/07/21 22:26:34
- Log: Mingw32 PERL_OBJECT tweaks
- Branch: perl
- ! ext/Fcntl/Fcntl.xs ext/IO/IO.xs ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 1614] By: gsar on 1998/07/21 19:43:32
- Log: fix off-by-one in change#623 that broke lexical lookups in eval''
- Branch: perl
- ! pp_ctl.c
-
-----------------
-Version 5.004_76 5.005 Public Beta, Issue 2
-----------------
-
-____________________________________________________________________________
-[ 1613] By: gsar on 1998/07/21 10:26:01
- Log: final tweaks before beta2
- Branch: perl
- + Porting/findvars
- +> Porting/fixvars
- - fixvars
- ! Changes MANIFEST intrpvar.h iperlsys.h
- ! lib/ExtUtils/MM_Win32.pm win32/perlhost.h
-____________________________________________________________________________
-[ 1612] By: gsar on 1998/07/21 07:15:54
- Log: fixes to enable PERL_OBJECT build with mingw32/egcs-1.0.2
- Branch: perl
- ! ext/Opcode/Opcode.xs proto.h win32/makedef.pl
- ! win32/makefile.mk win32/perlhost.h win32/win32.c win32/win32.h
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 1611] By: gsar on 1998/07/21 07:12:00
- Log: fix bytecode.pl with moved var names
- Branch: perl
- ! bytecode.pl byterun.c byterun.h ext/B/B/Asmdata.pm
-____________________________________________________________________________
-[ 1610] By: gsar on 1998/07/21 05:51:10
- Log: tweak toke.c
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 1609] By: gsar on 1998/07/21 05:46:59
- Log: change case of PERL_OBJECT filenames, consistent with the rest
- Branch: perl
- + XSlock.h objXSUB.h
- - ObjXSub.h XSLock.h
- ! MANIFEST XSUB.h lib/ExtUtils/MM_Win32.pm perl.h
- ! win32/GenCAPI.pl win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1608] By: gsar on 1998/07/21 05:31:13
- Log: part 2 of PERL_OBJECT fixes (globals in bytecode.h moved to intrpvar.h)
- Branch: perl
- ! bytecode.h byterun.c embedvar.h interp.sym intrpvar.h
-____________________________________________________________________________
-[ 1607] By: gsar on 1998/07/21 05:29:10
- Log: part 1 of PERL_OBJECT fixes for new var names
- Branch: perl
- ! ObjXSub.h bytecode.h globals.c iperlsys.h perl.h pp_ctl.c
- ! run.c win32/GenCAPI.pl
-____________________________________________________________________________
-[ 1606] By: gsar on 1998/07/21 05:17:26
- Log: From: Stephen McCamant <alias@mcs.com>
- Date: Mon, 20 Jul 1998 23:53:32 CDT
- Message-Id: <13748.6947.311341.657005@alias-2.pr.mcs.net>
- Subject: [PATCH] redundant RV2GVs in ck_fun()
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1605] By: gsar on 1998/07/21 05:13:28
- Log: From: Stephen McCamant <alias@mcs.com>
- Date: Mon, 20 Jul 1998 23:32:42 CDT
- Message-Id: <13748.6392.921893.643238@alias-2.pr.mcs.net>
- Subject: B::Deparse 0.56 (first testsuite fixes; big)
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 1604] By: gsar on 1998/07/21 05:07:29
- Log: applied a slightly tweaked version of suggested patch
- From: Colin Kuskie <ckuskie@cadence.com>
- Date: Mon, 20 Jul 1998 15:58:31 -0700 (PDT)
- Message-ID: <Pine.GSO.3.96.980720154841.6188M-100000@pdxmail.cadence.com>
- Subject: [PATCH _75] More documentation for -i prefix
- Branch: perl
- ! pod/perlrun.pod
-____________________________________________________________________________
-[ 1603] By: gsar on 1998/07/21 04:59:19
- Log: disable malloced_size() feedback with -DLEAKTEST
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 20 Jul 1998 21:20:21 -0400 (EDT)
- Message-Id: <199807210120.VAA15031@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_75] -DLEAKTEST broken
- Branch: perl
- ! av.c sv.c
-____________________________________________________________________________
-[ 1602] By: gsar on 1998/07/21 04:57:43
- Log: fix hints/hpux.sh for cpp recognition
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 20 Jul 1998 12:46:33 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980720124202.6585B-100000@newton.phys>
- Subject: RE: Configure misses preprocessor on HP-UX
- Branch: perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 1601] By: gsar on 1998/07/21 04:55:51
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sun, 19 Jul 1998 18:16:38 -0400 (EDT)
- Message-Id: <199807192216.SAA10482@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Compile (?{}) into a correct package
- Branch: perl
- ! pp_ctl.c t/op/pat.t
-____________________________________________________________________________
-[ 1600] By: gsar on 1998/07/21 04:48:32
- Log: allocate a whole fd_set for pp_sselect() on more platforms
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Date: 20 Jul 1998 00:14:18 +0300
- Message-ID: <oeen2a5y251.fsf@alpha.hut.fi>
- Subject: Re: Not OK: perl 5.00475 +DEVEL_BETA_ISSUE_1 on OPENSTEP-Mach 4_1 (UNINSTALLED)
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1599] By: gsar on 1998/07/21 04:44:04
- Log: add tests to check if context propagation works
- From: Francois Desarmenien <desar@club-internet.fr>
- Date: Sun, 19 Jul 1998 12:28:33 +0200
- Message-ID: <35B1CA51.A606AD27@club-internet.fr>
- Subject: Re: m//g strange behaviour in 5.004
- Branch: perl
- + t/op/context.t
- ! MANIFEST
-____________________________________________________________________________
-[ 1598] By: gsar on 1998/07/21 04:37:49
- Log: applied RE doc patches, with tweaks to the prose
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 18 Jul 1998 23:11:13 -0400 (EDT)
- Message-Id: <199807190311.XAA25080@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Document irregular zero-length matches
- --
- Date: Sun, 19 Jul 1998 00:38:44 -0400 (EDT)
- Message-Id: <199807190438.AAA26226@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Another irregularity of expressions documented
- Branch: perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 1597] By: gsar on 1998/07/21 04:16:51
- Log: pod tweak suggested by Ilya
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1596] By: gsar on 1998/07/21 04:12:39
- Log: enable color output with -Mre=debugcolor with -DDEBUGGING
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 18 Jul 1998 17:34:00 -0400 (EDT)
- Message-Id: <199807182134.RAA20644@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Better -Mre=colordb
- Branch: perl
- ! ext/re/re.xs
-____________________________________________________________________________
-[ 1595] By: gsar on 1998/07/21 04:07:44
- Log: From: "John L. Allen" <allen@grumman.com>
- Date: Thu, 16 Jul 1998 11:43:54 -0400 (EDT)
- Message-ID: <Pine.SOL.3.91.980716113018.14617A-100000@gateway.grumman.com>
- Subject: [PATCH _75 & _05] perlbug does not report usage on invalid flags
- Branch: perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 1594] By: gsar on 1998/07/21 04:06:06
- Log: don't use SelectSaver on IO::Handle->input_*() methods
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Thu, 16 Jul 1998 15:00:39 +0100 (BST)
- Message-Id: <199807161400.PAA25532@tempest.cise.npl.co.uk>
- Subject: Re: Bug in IO::Handle->input_record_separator
- Branch: perl
- ! ext/IO/lib/IO/Handle.pm
-____________________________________________________________________________
-[ 1593] By: gsar on 1998/07/21 04:03:46
- Log: applied a tweaked version of suggested patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 15 Jul 1998 17:02:48 -0400 (EDT)
- Message-Id: <199807152102.RAA19952@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Enable/document colors in re.pm
- Branch: perl
- ! ext/re/re.pm
-____________________________________________________________________________
-[ 1592] By: gsar on 1998/07/21 03:49:55
- Log: remove compat3.sym and rename perld4.pod
- Branch: perl
- +> pod/perl5004delta.pod
- - compat3.sym pod/perld4.pod
- ! MANIFEST
-____________________________________________________________________________
-[ 1591] By: gsar on 1998/07/21 03:38:16
- Log: update patchlevel, Changes
- Branch: perl
- ! Changes patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1590] By: gsar on 1998/07/21 03:06:04
- Log: documentation tweaks from Abigail <abigail@fnx.com>
- Date: Fri, 17 Jul 1998 20:52:36 -0400 (EDT)
- Message-ID: <19980718005236.5154.qmail@betelgeuse.wayne.fnx.com>
- Subject: Re: [PATCH 5.00475] pod/perlsyn.pod
- --
- Date: Thu, 16 Jul 1998 17:00:49 -0400 (EDT)
- Message-ID: <19980716210049.16156.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH 5.00475] pod/perlguts.pod
- --
- Date: Thu, 16 Jul 1998 16:52:05 -0400 (EDT)
- Message-ID: <19980716205205.15949.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH 5.00475] Tweaking pod/perlfunc.pod
- --
- Date: Fri, 17 Jul 1998 22:58:05 -0400 (EDT)
- Message-ID: <19980718025805.7135.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH, 5.00475], pod/perlsub.pod
- --
- Date: Sat, 18 Jul 1998 04:02:00 -0400 (EDT)
- Message-ID: <19980718080200.9927.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH 5.00475] pod/perlfunc.pod
- Branch: perl
- ! pod/perlfunc.pod pod/perlguts.pod pod/perlsub.pod
- ! pod/perlsyn.pod
-____________________________________________________________________________
-[ 1589] By: gsar on 1998/07/21 02:44:25
- Log: VMS patches from Dan Sugalski <sugalskd@osshe.edu>
- Date: Wed, 15 Jul 1998 09:38:12 -0700
- Message-Id: <3.0.5.32.19980715093812.00a42a50@ous.edu>
- Subject: [PATCH 5.005-beta1]Quick VMS config update
- --
- Date: Wed, 15 Jul 1998 12:53:52 -0700
- Message-Id: <3.0.5.32.19980715125352.00a25cb0@ous.edu>
- Subject: Re: $ebcdic has broken VMS in _75 (Now with doc patch!)
- --
- Date: Thu, 16 Jul 1998 11:15:44 -0700
- Message-Id: <3.0.5.32.19980716111544.00b78770@ous.edu>
- Subject: [PATCH 5.004_75]Another VMS tweak for the Vax C compiler
- --
- Date: Thu, 16 Jul 1998 11:21:55 -0700
- Message-Id: <3.0.5.32.19980716112155.00a66c50@ous.edu>
- Subject: [PATCH 5.004_75]Get archname correct for thread build on VMS
- --
- Date: Thu, 16 Jul 1998 11:25:04 -0700
- Message-Id: <3.0.5.32.19980716112504.00ae0d50@ous.edu>
- Subject: [PATCH 5.004_75]Thread build tweaks for VMS 6.2 and older
- --
- Date: Fri, 17 Jul 1998 15:29:13 -0700
- Message-Id: <3.0.5.32.19980717152913.00a469b0@ous.edu>
- Subject: [PATCH 5.004_75]Missed a header file in VMS build procedure
- --
- Date: Mon, 20 Jul 1998 10:20:49 -0700
- Message-Id: <3.0.5.32.19980720102049.00a05100@ous.edu>
- Subject: [PATCH 5.004_75]Tweaks to Thread.XS for OLD_PTHREADS_API build
- --
- Date: Mon, 20 Jul 1998 10:13:03 -0700
- Message-Id: <3.0.5.32.19980720101303.00a17100@ous.edu>
- Subject: [PATCH 5.004_75]Explicitly specify extensions during VMS config process
- --
- From: Brad Hughes <brad@tgsmc.com>
- Date: Mon, 20 Jul 1998 15:51:22 -0700
- Message-Id: <3.0.5.32.19980720155122.00a41950@ous.edu>
- Subject: patch for readme.vms
- Branch: perl
- ! README.vms ext/Thread/Thread.xs vms/descrip_mms.template
- ! vms/gen_shrfls.pl vms/subconfigure.com
-____________________________________________________________________________
-[ 1588] By: gsar on 1998/07/21 01:26:20
- Log: change#1481 didn't go through at all, redo it
- Branch: perl
- ! t/base/rs.t
-____________________________________________________________________________
-[ 1587] By: gsar on 1998/07/21 01:21:41
- Log: workaround C<"foo" "bar"> catenation-intolerant compilers
- Branch: perl
- ! regexec.c toke.c
-____________________________________________________________________________
-[ 1586] By: gsar on 1998/07/21 01:05:49
- Log: do not override PERL_DESTRUCT_LEVEL if use has it set
- Branch: perl
- ! t/TEST
-____________________________________________________________________________
-[ 1585] By: gsar on 1998/07/21 00:39:17
- Log: fix small memory leak when mess_sv happens to be touched by magic
- Branch: perl
- ! perl.c t/lib/thread.t t/op/local.t t/op/pat.t t/op/regexp.t
-____________________________________________________________________________
-[ 1584] By: gsar on 1998/07/21 00:37:32
- Log: fix memory leak in C<local(*foo) = 'bar'>
- Branch: perl
- ! scope.c
-____________________________________________________________________________
-[ 1583] By: TimBunce on 1998/07/20 22:14:11
- Log: Update Changes and patchlevel.h for release. At last.
- Branch: maint-5.004/perl
- ! Changes patchlevel.h
-____________________________________________________________________________
-[ 1582] By: gsar on 1998/07/20 21:28:43
- Log: add rsfp_filters and perldb to pollutants list
- Branch: perl
- ! embed.pl
-____________________________________________________________________________
-[ 1581] By: nick on 1998/07/20 19:22:37
- Log: Integrate mainline pre-beta2 - just in case
- Branch: ansiperl
- !> (integrate 66 files)
-____________________________________________________________________________
-[ 1580] By: TimBunce on 1998/07/20 17:16:38
- Log: Assorted patches:
-
- Title: "Clean up hash array allocation"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807201052.GAA13336@aatma.engin.umich.edu>
- Files: hv.c
-
- Title: "Further fixes for cppstdin on HP-UX 11"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980720124202.6585B-100000@newton.phys>
- Files: hints/hpux.sh
- Branch: maint-5.004/perl
- ! hints/hpux.sh hv.c
-____________________________________________________________________________
-[ 1579] By: TimBunce on 1998/07/20 09:46:14
- Log: Assorted patches:
-
- Title: "Fix C<$1 .. $2> coredump under debugger"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807200042.UAA23288@aatma.engin.umich.edu>
- Files: pp_ctl.c
-
- Title: "Fix lvalue leaks stemming from failure to free LvTARG(sv)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807191829.OAA12433@aatma.engin.umich.edu>
- Files: embed.h perl.h proto.h global.sym mg.c sv.c t/op/substr.t t/op/vec.t
-
- Title: "fix major bug (from 5.003_96); void contexts were using the context
- of the enclosing sub!"
- From: Francois Desarmenien <desar@club-internet.fr>, Gurusamy Sarathy
- <gsar@engin.umich.edu>
- Msg-ID: <199807180927.FAA08032@aatma.engin.umich.edu>,
- <35B1CA51.A606AD27@club-internet.fr>
- Files: op.h
-
- Title: "Update lib/Getopt/Long.pm (from perl5.005 beta 1)"
- From: Johan Vromans <jvromans@squirrel.nl>
- Msg-ID: <13745.47704.943964.34613@phoenix.squirrel.nl>
- Files: lib/Getopt/Long.pm
-
- Title: "Add Porting/p4d2p utility for converting perforce diffs"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807200002.UAA21398@aatma.engin.umich.edu>
- Files: MANIFEST Porting/p4d2p
- Branch: maint-5.004/perl
- + Porting/p4d2p
- ! MANIFEST embed.h global.sym lib/Getopt/Long.pm mg.c op.h
- ! perl.h pp_ctl.c proto.h sv.c t/op/substr.t t/op/vec.t
-____________________________________________________________________________
-[ 1578] By: gsar on 1998/07/20 09:38:39
- Log: complete s/foo/PL_foo/ changes (all escaped cases identified with
- brute force search script). Result builds and passes all tests on
- Solaris. win32 and PERL_OBJECT are still untested.
- Branch: perl
- ! XSLock.h XSUB.h bytecode.h bytecode.pl byterun.c cc_runtime.h
- ! djgpp/djgpp.c embed.pl ext/B/B.xs ext/B/B/Asmdata.pm
- ! ext/B/byteperl.c ext/DB_File/DB_File.xs ext/DB_File/typemap
- ! ext/DynaLoader/dl_dld.xs ext/DynaLoader/dl_next.xs
- ! ext/DynaLoader/dl_vms.xs ext/GDBM_File/typemap ext/IO/IO.xs
- ! ext/IPC/SysV/SysV.xs ext/NDBM_File/typemap
- ! ext/ODBM_File/ODBM_File.xs ext/ODBM_File/typemap
- ! ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs ext/SDBM_File/typemap
- ! ext/Thread/Thread.xs ext/attrs/attrs.xs fakethr.h gv.c hv.c
- ! lib/ExtUtils/typemap malloc.c mg.c op.c os2/OS2/PrfDB/PrfDB.xs
- ! os2/OS2/PrfDB/typemap os2/OS2/REXX/REXX.xs os2/os2.c
- ! os2/os2ish.h perl.c perl.h pp.c pp_ctl.c pp_hot.c pp_sys.c
- ! regcomp.c regcomp.h regexec.c scope.c scope.h sv.h taint.c
- ! toke.c util.c vms/ext/DCLsym/DCLsym.xs vms/ext/Stdio/Stdio.xs
- ! vms/vms.c vms/vmsish.h win32/win32.c win32/win32thread.c
-____________________________________________________________________________
-[ 1577] By: TimBunce on 1998/07/20 08:28:17
- Log: Title: "Make failed matches return empty list in list context"
- From: "Paul E. Maisano" <pem@aaii.oz.au>, Gurusamy Sarathy
- <gsar@engin.umich.edu>, Paul Maisano <pem@aaii.oz.au>
- Msg-ID: <199807200002.UAA21398@aatma.engin.umich.edu>,
- <199807200027.KAA27815@ironbark-ridge.aaii.oz.au>,
- <35B156FB.504E66E@aaii.oz.au>
- Files: pod/perlop.pod pp_hot.c t/op/pat.t
- Branch: maint-5.004/perl
- ! pod/perlop.pod pp_hot.c t/op/pat.t
-____________________________________________________________________________
-[ 1576] By: TimBunce on 1998/07/20 08:11:37
- Log: Title: "win32 update from 5.005 beta 2 for 5.004_05"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807192332.TAA20905@aatma.engin.umich.edu>
- Files: win32/include/dirent.h win32/include/sys/socket.h proto.h
- lib/ExtUtils/Liblist.pm lib/ExtUtils/Mksymlists.pm
- win32/win32.h win32/win32iop.h README.win32 installperl
- pp_ctl.c win32/Makefile win32/config.bc win32/config.vc
- win32/config_H.bc win32/config_H.vc win32/config_h.PL
- win32/config_sh.PL win32/dl_win32.xs win32/makedef.pl
- win32/makefile.mk win32/pod.mak win32/win32.c
- win32/win32sck.c win32/bin/pl2bat.pl
- Branch: maint-5.004/perl
- ! README.win32 installperl lib/ExtUtils/Liblist.pm
- ! lib/ExtUtils/Mksymlists.pm pp_ctl.c proto.h win32/Makefile
- ! win32/bin/pl2bat.pl win32/config.bc win32/config.vc
- ! win32/config_H.bc win32/config_H.vc win32/config_h.PL
- ! win32/config_sh.PL win32/dl_win32.xs win32/include/dirent.h
- ! win32/include/sys/socket.h win32/makedef.pl win32/makefile.mk
- ! win32/pod.mak win32/win32.c win32/win32.h win32/win32iop.h
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 1575] By: gsar on 1998/07/20 01:27:14
- Log: integrate ansi branch to get s/foo/PL_foo/ changes
- Branch: perl
- +> fixvars
- !> (integrate 537 files)
-____________________________________________________________________________
-[ 1574] By: gsar on 1998/07/20 00:33:43
- Log: fix C<$1 .. $2> coredump under debugger
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 1573] By: gsar on 1998/07/20 00:28:27
- Log: misc win32 config tweaks
- Branch: perl
- ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_h.PL win32/makefile.mk
-____________________________________________________________________________
-[ 1572] By: nick on 1998/07/19 19:04:58
- Log: Missed file that had changed
- Branch: ansiperl
- ! embedvar.h
-____________________________________________________________________________
-[ 1571] By: nick on 1998/07/19 18:57:35
- Log: Another threaded, perl malloc issue, x2p's Makefile.SH has a
- pattern match...
- Branch: ansiperl
- ! x2p/Makefile.SH
-____________________________________________________________________________
-[ 1570] By: nick on 1998/07/19 18:16:20
- Log: Drat! - threaded perl-malloc has mutex that needs PL_
- Branch: ansiperl
- ! malloc.c perl.h
-____________________________________________________________________________
-[ 1569] By: nick on 1998/07/19 17:55:22
- Log: PL_ for perl's malloc
- Branch: ansiperl
- ! hv.c malloc.c
-____________________________________________________________________________
-[ 1568] By: nick on 1998/07/19 16:23:30
- Log: PL_ minir tidy up
- Branch: ansiperl
- ! embed.pl ext/Thread/Thread.xs util.c
-____________________________________________________________________________
-[ 1567] By: nick on 1998/07/19 13:21:07
- Log: Add PL_ to merged file
- Branch: ansiperl
- ! pp_hot.c
-____________________________________________________________________________
-[ 1566] By: nick on 1998/07/19 12:38:30
- Log: Merge Mainline
- Branch: ansiperl
- + fixvars
- !> (integrate 29 files)
-____________________________________________________________________________
-[ 1565] By: gsar on 1998/07/19 07:06:54
- Log: tweak pod in MakeMaker.pm
- From: Paul Johnson <pjcj@transeda.com>
- Date: Sat, 18 Jul 1998 15:58:48 +0100
- Message-ID: <19980718155847.D903@west-tip.transeda.com>
- Subject: [PATCH]5.004_75 (DOC) MakeMaker.pm
- Branch: perl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1564] By: gsar on 1998/07/19 07:04:45
- Log: From: Gisle Aas <gisle@aas.no>
- Date: 17 Jul 1998 22:49:32 +0200
- Message-ID: <m390lsb3tv.fsf@furu.g.aas.no>
- Subject: [PATCH _75] sv_gets() did not NUL-terminate SV when reading records
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1563] By: gsar on 1998/07/19 07:03:32
- Log: update freebsd hints
- From: Mik Firestone <fireston@lexmark.com>
- Date: Fri, 17 Jul 1998 15:24:26 -0400 (EDT)
- Message-Id: <199807171924.AA05297@interlock2.lexmark.com>
- Subject: [PATCH 5.005b1] hints/freebsd.sh
- Branch: perl
- ! hints/freebsd.sh
-____________________________________________________________________________
-[ 1562] By: gsar on 1998/07/19 07:01:33
- Log: From: Mark Bixby <markb@spock.dis.cccd.edu>
- Date: Fri, 17 Jul 1998 10:37:49 -0700 (PDT)
- Message-Id: <199807171737.KAA06967@spock.dis.cccd.edu>
- Subject: [PATCH 5.005b1] MPE/iX hints and readme tweaks
- Branch: perl
- ! README.mpeix hints/mpeix.sh
-____________________________________________________________________________
-[ 1561] By: gsar on 1998/07/19 07:00:19
- Log: From: Norton Allen <allen@huarp.harvard.edu>
- Date: Fri, 17 Jul 1998 12:37:27 -0400 (edt)
- Message-Id: <199807171637.MAA24830@bottesini.harvard.edu>
- Subject: [PATCH: 75] make install fails
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1560] By: gsar on 1998/07/19 06:58:55
- Log: fix flawed substitution-loop detection on zero-length matches
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Fri, 17 Jul 1998 13:55:38 -0400 (EDT)
- Message-Id: <199807171755.NAA27720@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Substitution loop in devel branch
- Branch: perl
- ! pp_hot.c t/op/subst.t
-____________________________________________________________________________
-[ 1559] By: gsar on 1998/07/19 06:56:19
- Log: add perltrap entry about "${#a}", as suggested by
- andy barfoot <abarfoot@eng.auburn.edu>
- Branch: perl
- ! pod/perltrap.pod
-____________________________________________________________________________
-[ 1558] By: gsar on 1998/07/19 06:43:53
- Log: From: Anton Berezin <tobez@plab.ku.dk>
- Date: Fri, 17 Jul 1998 11:49:30 +0200 (CEST)
- Message-Id: <199807170949.LAA18099@lion.plab.ku.dk>
- Subject: [PATCH 5.005b1] perlcall.pod SAVETMPS/FREETMPS bracket
- Branch: perl
- ! pod/perlcall.pod
-____________________________________________________________________________
-[ 1557] By: gsar on 1998/07/19 06:40:33
- Log: From: "Art Green" <Art_Green@mercmarine.com>
- Date: Thu, 16 Jul 1998 21:37:05 -0500
- Message-ID: <86256644.000E61D4.00@FDLTest1.mercmarine.com>
- Subject: [PATCH]:_75 - Update hints/aix.sh for c_r library
- Branch: perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 1556] By: gsar on 1998/07/19 06:38:17
- Log: update README.threads
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Thu, 16 Jul 1998 11:10:33 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980716110949.2651J-100000@newton.phys>
- Subject: Re: Sort of OK: 5.005-beta1 and threads on ppc-powerux-threads
- Branch: perl
- ! README.threads
-____________________________________________________________________________
-[ 1555] By: gsar on 1998/07/19 06:36:32
- Log: From: Scott Henry <scotth@sgi.com>
- Date: 15 Jul 1998 20:23:02 -0700
- Message-ID: <yd890lu1nu1.fsf@hoshi.engr.sgi.com>
- Subject: [PATCH 5.005-beta1] update hints/irix_6.sh
- Branch: perl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 1554] By: gsar on 1998/07/19 06:35:10
- Log: From: Spider Boardman <spider@web.zk3.dec.com>
- Date: Wed, 15 Jul 1998 16:56:48 -0400
- Message-Id: <199807152056.QAA369057@web.zk3.dec.com>
- Subject: [PATCH _75] dec_osf hints still wrong
- Branch: perl
- ! hints/dec_osf.sh
-____________________________________________________________________________
-[ 1553] By: gsar on 1998/07/19 06:33:29
- Log: tweak hpux hints in vain attempt to get cppstdin set properly
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Wed, 15 Jul 1998 16:11:43 -0400 (EDT)
- Subject: Re: HP-UX 11, perl 5.004_04, Oracle 7.3.3.4, DBI 0.93
- Message-Id: <Pine.SUN.3.96.980715161018.1560D-100000@newton.phys>
- --
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Thu, 16 Jul 1998 11:37:58 -0400 (EDT)
- Subject: Re: Configure misses preprocessor on HP-UX
- Message-Id: <Pine.SUN.3.96.980716113128.2651N-100000@newton.phys>
- Branch: perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 1552] By: gsar on 1998/07/19 06:26:24
- Log: From: Tye McQueen <tye@metronet.com>
- Date: Wed, 15 Jul 1998 13:46:44 -0500 (CDT)
- Message-Id: <199807151846.AA12653@metronet.com>
- Subject: Minor debugger fix
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 1551] By: gsar on 1998/07/19 06:25:05
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Wed, 15 Jul 1998 14:23:39 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980715135257.1310F-100000@newton.phys>
- Subject: Re: Configure s?rand support [PATCH 5.004_75] -- better patch
- Branch: perl
- ! INSTALL pp.c
-____________________________________________________________________________
-[ 1550] By: gsar on 1998/07/19 06:23:10
- Log: minor re.pm cleanup
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Wed, 15 Jul 1998 12:41:14 +0100
- Message-Id: <E0ywPvu-0003V7-00@ursa.cus.cam.ac.uk>
- Subject: Re: [PATCH 5.004_74]Don't use tainted REs in Basename.pm when building perl
- Branch: perl
- ! ext/re/re.pm pod/perldiag.pod
-____________________________________________________________________________
-[ 1549] By: gsar on 1998/07/19 06:20:49
- Log: export additional symbols on OS/2
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 15 Jul 1998 06:13:07 -0400 (EDT)
- Message-Id: <199807151013.GAA11279@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Export more symbols from Perl DLL
- Branch: perl
- ! os2/os2.sym
-____________________________________________________________________________
-[ 1548] By: gsar on 1998/07/19 06:18:58
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 15 Jul 1998 06:10:36 -0400 (EDT)
- Message-Id: <199807151010.GAA11270@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Minor improvements to perlcc
- Branch: perl
- ! utils/perlcc.PL
-____________________________________________________________________________
-[ 1547] By: gsar on 1998/07/19 06:17:22
- Log: applied slightly tweaked version of patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 16 Jul 1998 15:49:15 -0400 (EDT)
- Message-Id: <199807161949.PAA08214@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Updated patch to Test::Harness
- Branch: perl
- ! lib/Test/Harness.pm
-____________________________________________________________________________
-[ 1546] By: gsar on 1998/07/19 06:11:03
- Log: improve 'frame' handling in debugger
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 15 Jul 1998 00:52:10 -0400 (EDT)
- Message-Id: <199807150452.AAA06685@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Better debugger trace
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 1545] By: gsar on 1998/07/19 06:07:51
- Log: fix and test handling of literal newlines in heredocs
- From: Gisle Aas <gisle@aas.no>
- Date: 17 Jul 1998 14:58:25 +0200
- Message-ID: <m3iukw63da.fsf@furu.g.aas.no>
- Subject: Re: [PATCH _71] CRs et al
- --
- From: larry@wall.org (Larry Wall)
- Date: Fri, 17 Jul 1998 09:32:35 -0700
- Message-Id: <199807171632.JAA12959@wall.org>
- Subject: Re: [PATCH _71] CRs et al
- Branch: perl
- ! t/comp/multiline.t toke.c
-____________________________________________________________________________
-[ 1544] By: gsar on 1998/07/19 06:00:12
- Log: remove possibly unwritable lib/re.pm before overwrite
- From: larry@wall.org (Larry Wall)
- Date: Wed, 15 Jul 1998 14:26:03 -0700
- Message-Id: <199807152126.OAA04623@wall.org>
- Subject: Re: bug encountered building perl5.005beta1
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1543] By: gsar on 1998/07/19 05:56:18
- Log: unsubmitted Changes tweak
- Branch: perl
- ! Changes cygwin32/ld2
-____________________________________________________________________________
-[ 1542] By: gsar on 1998/07/19 01:21:22
- Log: make failed matches return empty list in list context
- Branch: perl
- ! pod/perlop.pod pp_hot.c t/op/pat.t
-____________________________________________________________________________
-[ 1541] By: gsar on 1998/07/18 22:27:59
- Log: remove obsolete perltrap about m//g's pos() reset behavior
- Branch: perl
- ! pod/perltrap.pod
-____________________________________________________________________________
-[ 1540] By: nick on 1998/07/18 22:16:26
- Log: PL_ stuff passes non-threaded on Mingw32
- (Why did it compile without this fix?)
- Branch: ansiperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1539] By: TimBunce on 1998/07/18 22:04:58
- Log: Assorted patches:
-
- Title: "Minor fixes to MakeMaker docs re ExtUtils::Embed"
- From: Paul Johnson <pjcj@transeda.com>
- Msg-ID: <19980718155847.D903@west-tip.transeda.com>
- Files: lib/ExtUtils/MakeMaker.pm
-
- Title: "Update t/op/array.t (from 5.005 beta 1)"
- Files: t/op/array.t
- Branch: maint-5.004/perl
- ! lib/ExtUtils/MakeMaker.pm t/op/array.t
-____________________________________________________________________________
-[ 1538] By: TimBunce on 1998/07/18 21:57:50
- Log: Title: "Remove flawed '// with parens or $&' performance patch (Change 662)"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Tim Bunce <Tim.Bunce@ig.co.uk>,
- larry@wall.org (Larry Wall)
- Msg-ID: <19980717015308.E6244@ig.co.uk>, <199807171819.LAA13771@wall.org>,
- <E0yvtzn-0002F9-00@ursa.cus.cam.ac.uk>
- Files: cop.h embed.h perl.h proto.h regexp.h gv.c interp.sym perl.c pp.c
- pp_ctl.c pp_hot.c regexec.c scope.c
- Branch: maint-5.004/perl
- ! cop.h embed.h gv.c interp.sym perl.c perl.h pp.c pp_ctl.c
- ! pp_hot.c proto.h regexec.c regexp.h scope.c
-____________________________________________________________________________
-[ 1537] By: nick on 1998/07/18 20:56:58
- Log: PL_ scheme Builds under Minw32 - some SEGFAULT snags
- Branch: ansiperl
- ! doio.c mg.c perl.c pp_hot.c pp_sys.c util.c win32/perllib.c
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 1536] By: nick on 1998/07/18 20:50:26
- Log: Merge latest mainline
- Branch: ansiperl
- ! patchlevel.h
- !> ext/Thread/Thread.xs op.h util.c
-____________________________________________________________________________
-[ 1535] By: nick on 1998/07/18 16:45:29
- Log: Edited "behind my back" ...
- Branch: ansiperl
- ! vms/perly_c.vms
-____________________________________________________________________________
-[ 1534] By: nick on 1998/07/18 16:38:27
- Log: PL_ stuff for threads
- Branch: ansiperl
- ! byterun.c cop.h deb.c doio.c doop.c embed.pl embedvar.h
- ! ext/B/B.xs ext/Thread/Thread.xs gv.c intrpvar.h mg.c
- ! miniperlmain.c op.c op.h perl.c perl.h perly.y pp.c pp.h
- ! pp_ctl.c pp_hot.c pp_sys.c regexec.c run.c scope.c sv.c sv.h
- ! thread.h toke.c util.c win32/perllib.c
-____________________________________________________________________________
-[ 1533] By: nick on 1998/07/18 14:30:54
- Log: Builds and passes tests with -DMULTIPLICITY and -DCRIPPLED_CC
- (still with PERL_GLOBAL_STRUCT) - to cover more #if branches
- Branch: ansiperl
- ! embed.pl intrpvar.h perl.c toke.c
-____________________________________________________________________________
-[ 1532] By: nick on 1998/07/18 13:53:03
- Log: PL_ prefix to all perlvars, part1
- Builds and passes all tests at one limit i.e. -DPERL_GLOBAL_STRUCT
- Branch: ansiperl
- ! XSUB.h av.c bytecode.h byterun.c byterun.h cop.h deb.c doio.c
- ! doop.c dump.c embed.h embed.pl embedvar.h ext/B/B.xs
- ! ext/Data/Dumper/Dumper.xs ext/DynaLoader/dl_next.xs
- ! ext/ODBM_File/ODBM_File.xs ext/Opcode/Opcode.xs
- ! ext/POSIX/POSIX.xs ext/Socket/Socket.xs ext/attrs/attrs.xs
- ! ext/re/re.xs gv.c hv.c hv.h lib/ExtUtils/typemap
- ! lib/ExtUtils/xsubpp mg.c miniperlmain.c op.c perl.c perl.h
- ! perly.c perly.y pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c regcomp.c
- ! regcomp.h regexec.c run.c scope.c scope.h sv.c sv.h taint.c
- ! thrdvar.h toke.c universal.c util.c
-____________________________________________________________________________
-[ 1531] By: gsar on 1998/07/18 08:48:13
- Log: fix yet another USE_THREADS leak due to failure to free stacks
- Branch: perl
- ! ext/Thread/Thread.xs util.c
-____________________________________________________________________________
-[ 1530] By: gsar on 1998/07/18 08:46:58
- Log: fix major bug in GIMME (introduced in 5.003_96); void contexts were
- using the context of the enclosing sub!
- Branch: perl
- ! op.h
-____________________________________________________________________________
-[ 1529] By: nick on 1998/07/18 08:18:03
- Log: Integrate post-beta tweaks to ansiperl
- Branch: ansiperl
- !> ObjXSub.h embed.h ext/Thread/Thread.xs global.sym gv.c mg.c
- !> objpp.h op.c perl.c perl.h pp_sys.c proto.h sv.c t/op/substr.t
- !> t/op/vec.t toke.c util.c
-____________________________________________________________________________
-[ 1528] By: gsar on 1998/07/18 04:23:12
- Log: fix lvalue leaks stemming from failure to free LvTARG(sv)
- Branch: perl
- ! ObjXSub.h embed.h global.sym mg.c objpp.h perl.h proto.h sv.c
- ! t/op/substr.t t/op/vec.t
-____________________________________________________________________________
-[ 1527] By: gsar on 1998/07/18 02:16:40
- Log: check ferror() only if read() returned 0
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1526] By: gsar on 1998/07/18 02:08:01
- Log: fix another CvMUTEXP() leak
- Branch: perl
- ! gv.c
-____________________________________________________________________________
-[ 1525] By: TimBunce on 1998/07/18 01:51:52
- Log: Assorted patches:
-
- Title: "Fix @a=@a=qw(...) properly"
- From: Stephen McCamant <alias@mcs.com>
- Msg-ID: <13742.49404.367751.437966@alias-2.pr.mcs.net>
- Files: opcode.h
-
- Title: "Larry's patch to support CR LF in scripts (updated)"
- From: Gisle Aas <gisle@aas.no>, larry@wall.org (Larry Wall)
- Msg-ID: <199807120054.RAA19550@wall.org>, <m3iukw63da.fsf@furu.g.aas.no>
- Files: t/comp/multiline.t toke.c
-
- Title: "Change getc() docs to match behaviour. Make read() return undef on
- error."
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807052257.SAA10004@aatma.engin.umich.edu>
- Files: pod/perlfunc.pod pp_sys.c
-
- Title: "Update patchls utility"
- Files: Porting/patchls
- Branch: maint-5.004/perl
- ! Porting/patchls opcode.h pod/perlfunc.pod pp_sys.c
- ! t/comp/multiline.t toke.c
-____________________________________________________________________________
-[ 1524] By: gsar on 1998/07/18 01:22:35
- Log: fix CvMUTEXP() leaks with -Dusethreads
- Branch: perl
- ! op.c toke.c
-____________________________________________________________________________
-[ 1523] By: gsar on 1998/07/18 01:17:28
- Log: fix $/ init for multiple interpreters/threads
- Branch: perl
- ! ext/Thread/Thread.xs perl.c util.c
-____________________________________________________________________________
-[ 1522] By: gsar on 1998/07/18 01:11:07
- Log: fix missing init that caused RE alternations to fail under
- -Dusethreads
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 1521] By: TimBunce on 1998/07/16 22:23:25
- Log: Assorted patches:
-
- Title: "Allow $SIG{CHLD}='IGNORE' to work (reap zombies) on Solaris"
- From: Albert Dvornik <bert@genscan.com>, Chip Salzenberg <chip@perl.org>
- Msg-ID: <19980708181055.A8005@perlsupport.com>,
- <tqn2adkvge.fsf@puma.genscan.com>
- Files: util.c
-
- Title: "Document perltrap on precedence of keys/values/each"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807151857.OAA04704@aatma.engin.umich.edu>
- Files: pod/perltrap.pod
-
- Title: "perlbook.pod patch"
- From: Tom Christiansen <tchrist@chthon.perl.com>
- Msg-ID: <199807140037.SAA04556@chthon.perl.com>
- Files: pod/perlbook.pod
-
- Title: "perlmod.pod patch"
- From: Tom Christiansen <tchrist@chthon.perl.com>
- Msg-ID: <199807140109.TAA04678@chthon.perl.com>
- Files: pod/perlmod.pod
-
- Title: "Fix bug in IO::Handle->input_record_separator"
- From: Robin Barker <rmb1@cise.npl.co.uk>, Swen Thuemmler
- <Swen.Thuemmler@paderlinx.de>
- Msg-ID: <199807161400.PAA25532@tempest.cise.npl.co.uk>,
- <Pine.GSO.4.00.9807161649380.6537-100000@rmail>
- Files: ext/IO/lib/IO/Handle.pm
-
- Title: "update h2ph, Math::Complex and Math::Trig (from 5.005 beta 1)"
- Files: lib/Math/Complex.pm lib/Math/Trig.pm t/lib/complex.t t/lib/h2ph.t
- t/lib/trig.t utils/h2ph.PL
-
- Title: "Update hints/irix_6.sh"
- From: Scott Henry <scotth@sgi.com>
- Msg-ID: <yd890lu1nu1.fsf@hoshi.engr.sgi.com>
- Files: hints/irix_6.sh
-
- Title: "Configure misses preprocessor on HP-UX (further fix)"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980716113128.2651N-100000@newton.phys>
- Files: hints/hpux.sh
-
- Title: "update perlbug to v1.26 (from 5.005 beta 1)"
- Files: utils/perlbug.PL
- Branch: maint-5.004/perl
- ! ext/IO/lib/IO/Handle.pm hints/hpux.sh hints/irix_6.sh
- ! lib/Math/Complex.pm lib/Math/Trig.pm pod/perlbook.pod
- ! pod/perlmod.pod pod/perltrap.pod t/lib/complex.t t/lib/h2ph.t
- ! t/lib/trig.t util.c utils/h2ph.PL utils/perlbug.PL
-____________________________________________________________________________
-[ 1520] By: TimBunce on 1998/07/15 21:24:12
- Log: Assorted patches:
-
- Title: "Add stub attrs.pm"
- From: Graham Barr <gbarr@ti.com>, Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <19980713163312.A18222@asic.sc.ti.com>,
- <199807132140.RAA09583@aatma.engin.umich.edu>
- Files: MANIFEST lib/attrs.pm
-
- Title: "Fix @a=@a=qw(...)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Stephen McCamant
- <alias@mcs.com>
- Msg-ID: <13737.12300.950886.821143@alias-2.pr.mcs.net>,
- <199807122351.TAA05649@aatma.engin.umich.edu>
- Files: op.c opcode.pl t/op/array.t
-
- Title: "Fix 'PERL_DESTRUCT_LEVEL=2 ./perl -DD -e 1' loop"
- From: Gisle Aas <gisle@aas.no>, Stephen McCamant <alias@mcs.com>
- Msg-ID: <13739.55551.205810.338648@alias-2.pr.mcs.net>,
- <m33ec4jdwn.fsf@furu.g.aas.no>
- Files: sv.c
-
- Title: "Make Power MachTen use vfork() and system malloc()"
- From: Dominic Dunlop <domo@computer.org>, Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <v03110700b1c95b010820@[195.95.102.91]>
- Files: hints/machten.sh malloc.c
-
- Title: "Use REG_INFTY in place of hardwired constant"
- From: Dominic Dunlop <domo@computer.org>
- Msg-ID: <v03110703b1ca662c44f8@[195.95.102.91]>
- Files: regcomp.h regcomp.c regexec.c
-
- Title: "Minor debugger fix (history adds an extra newline)"
- From: Tye McQueen <tye@metronet.com>
- Msg-ID: <199807151846.AA12653@metronet.com>
- Files: lib/perl5db.pl
-
- Title: "Protect Term::ReadLine against non-default $/ value"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>,
- kstar@chapin.edu@ig.co.uk ()
- Msg-ID: <19980713151749.G8596@O2.chapin.edu>,
- <199807132139.RAA11270@monk.mps.ohio-state.edu>
- Files: lib/Term/ReadLine.pm
-
- Title: "Fix HP-UX 11 build (cppstdin)"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980715161018.1560D-100000@newton.phys>
- Files: Configure hints/hpux.sh
-
- Title: "VMS filetest operator fixup (SS$_ACCONFLICT)"
- From: Dan Sugalski <sugalskd@osshe.edu>
- Msg-ID: <3.0.5.32.19980702135255.00a6ad90@ous.edu>
- Files: vms/vms.c
- Branch: maint-5.004/perl
- + lib/attrs.pm
- ! Configure MANIFEST hints/hpux.sh hints/machten.sh
- ! lib/Term/ReadLine.pm lib/perl5db.pl malloc.c op.c opcode.pl
- ! regcomp.c regcomp.h regexec.c sv.c t/op/array.t vms/vms.c
-____________________________________________________________________________
-[ 1519] By: nick on 1998/07/15 18:56:17
- Log: Integrate mainline at beta1
- Branch: ansiperl
- +> Porting/p4d2p README.mpeix Todo-5.005
- +> ext/DynaLoader/dl_mpeix.xs ext/re/hints/mpeix.pl
- +> mpeix/mpeixish.h mpeix/nm mpeix/relink perly_c.diff
- +> pod/perld4.pod pod/perlport.pod t/lib/ipc_sysv.t
- - Todo.5.005 lib/Bundle/CPAN.pm perly.c.diff pod/perldelta4.pod
- - t/op/ipcmsg.t t/op/ipcsem.t
- !> (integrate 167 files)
-
-----------------
-Version 5.004_75 5.005 Public Beta, Issue 1
-----------------
-
-____________________________________________________________________________
-[ 1518] By: gsar on 1998/07/15 10:01:41
- Log: add stub docs for ext/B, other minor tweaks
- Branch: perl
- ! Changes Porting/config_H config_h.SH ext/B/B.pm
- ! ext/B/B/Asmdata.pm ext/B/B/Assembler.pm ext/B/B/Bblock.pm
- ! ext/B/B/Bytecode.pm ext/B/B/C.pm ext/B/B/CC.pm
- ! ext/B/B/Debug.pm ext/B/B/Disassembler.pm ext/B/B/Showlex.pm
- ! ext/B/B/Stackobj.pm ext/B/B/Terse.pm ext/B/O.pm sv.c
-____________________________________________________________________________
-[ 1517] By: gsar on 1998/07/15 08:27:15
- Log: up patchlevel to 75 (Beta, Issue 1), add podpatch
- From: abigail@fnx.com
- Date: Wed, 15 Jul 1998 04:03:44 -0400 (EDT)
- Message-ID: <19980715080344.21975.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH 5.004_74] pod/perlop.pod
- Branch: perl
- ! Changes patchlevel.h pod/perlop.pod win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 1516] By: gsar on 1998/07/15 08:04:24
- Log: From: abigail@fnx.com
- Date: Wed, 15 Jul 1998 03:47:56 EDT
- Message-Id: <19980715074756.21868.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH 5.004_74] pod/pod2man.PL Fix use of < inside C<>
- Branch: perl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 1515] By: gsar on 1998/07/15 08:02:14
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 15 Jul 1998 03:49:24 EDT
- Message-Id: <199807150749.DAA09177@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] Additional targets for OS/2 build
- Branch: perl
- ! os2/Makefile.SHs
-____________________________________________________________________________
-[ 1514] By: gsar on 1998/07/15 07:58:29
- Log: rename some long file names to be 8.3 truncation-safe
- Branch: perl
- +> Todo-5.005 perly_c.diff pod/perld4.pod
- - Todo.5.005 perly.c.diff pod/perldelta4.pod
- ! MANIFEST Porting/pumpkin.pod perly.fixer
-____________________________________________________________________________
-[ 1513] By: gsar on 1998/07/15 07:35:29
- Log: minor tweaks to docs on qr//
- Branch: perl
- ! ext/re/re.pm pod/perldelta.pod pod/perlop.pod pod/perlre.pod
-____________________________________________________________________________
-[ 1512] By: gsar on 1998/07/15 07:06:02
- Log: applied patch, with tab tweak suggest by Peter Prymmer
- From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Tue, 14 Jul 1998 16:41:14 -0700
- Message-Id: <3.0.5.32.19980714164114.00a3e2a0@ous.edu>
- Subject: [PATCH 5.004_74]VMS build cleanups
- Branch: perl
- ! vms/descrip_mms.template
-____________________________________________________________________________
-[ 1511] By: gsar on 1998/07/15 07:03:33
- Log: allow perlbug -ok when STDIN it not a tty
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Date: Wed, 15 Jul 1998 03:24:56 +0200
- Message-Id: <l03130302b1d1b1e7c2a0@[194.222.64.89]>
- Subject: Re: [NOT OK] 5.004_74: "make ok" not ok in IRIX 6.2
- Branch: perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 1510] By: gsar on 1998/07/15 06:59:43
- Log: From: "Art Green" <Art_Green@mercmarine.com>
- Date: Tue, 14 Jul 1998 20:53:48 -0500
- Message-ID: <86256642.0004D7AB.00@FDLTest1.mercmarine.com>
- Subject: [PATCH]:_74 - Allow Configure to recognize _AIX41 & _POWER compiler defines
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 1509] By: gsar on 1998/07/15 06:57:50
- Log: typecast long vs. IV compares in pp_flip/pp_flop
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 1508] By: gsar on 1998/07/15 06:50:49
- Log: don't copy foreach itervar when no external refs exist
- From: Gisle Aas <gisle@aas.no>
- Date: 15 Jul 1998 03:35:25 +0200
- Message-ID: <m33ec3nbfm.fsf@furu.g.aas.no>
- Subject: Re: Testcase for 1..n closure change
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 1507] By: gsar on 1998/07/15 06:46:41
- Log: applied patch, regen headers
- From: Stephen McCamant <alias@mcs.com>
- Date: Tue, 14 Jul 1998 19:56:47 -0500 (CDT)
- Message-ID: <13739.64763.792570.626015@alias-2.pr.mcs.net>
- Subject: B::Deparse update for qr// and regcreset
- Branch: perl
- ! ext/B/B/Deparse.pm opcode.h opcode.pl
-____________________________________________________________________________
-[ 1506] By: gsar on 1998/07/15 06:43:04
- Log: make pregcomp et al VIRTUAL again for PERL_OBJECT
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Date: Tue, 14 Jul 1998 16:40:30 -0700
- Message-ID: <000301bdaf80$c93d14a0$a32fa8c0@tau.Active>
- Subject: [PATCH 5.004_74]
- Branch: perl
- ! proto.h
-____________________________________________________________________________
-[ 1505] By: gsar on 1998/07/15 06:41:43
- Log: dont use sv_dump() in -DD diagnostic
- From: Gisle Aas <gisle@aas.no>
- Date: 14 Jul 1998 23:55:36 +0200
- Message-ID: <m33ec4jdwn.fsf@furu.g.aas.no>
- Subject: [PATCH] Fix 'PERL_DESTRUCT_LEVEL=2 ./perl -DD -e 1' loop
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1504] By: gsar on 1998/07/15 06:39:37
- Log: add a few more thread.t tests
- Branch: perl
- ! t/lib/thread.t
-____________________________________________________________________________
-[ 1503] By: gsar on 1998/07/15 06:31:33
- Log: fix thread.t ('join $t' ne '$t->join' !)
- Branch: perl
- ! t/lib/thread.t
-____________________________________________________________________________
-[ 1502] By: gsar on 1998/07/15 06:26:00
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Wed, 15 Jul 1998 01:45:57 +0300 (EET DST)
- Message-Id: <199807142245.BAA09651@alpha.hut.fi>
- Subject: [PATCH] 5.004_74: MPE/iX final touches
- Branch: perl
- ! installperl lib/File/Copy.pm
-____________________________________________________________________________
-[ 1501] By: gsar on 1998/07/15 05:59:49
- Log: apply (reversed) patch
- From: Peter Wolfe <wolfe@titan.teloseng.com>
- Date: Tue, 14 Jul 1998 13:01:58 -0700 (PDT)
- Message-Id: <199807142001.NAA26550@titan.teloseng.com>
- Subject: NOT_OK: perl 5.00474 on SCO 3.2v5.0.4
- Branch: perl
- ! ext/IPC/SysV/SysV.xs
-____________________________________________________________________________
-[ 1500] By: gsar on 1998/07/15 05:57:39
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Tue, 14 Jul 1998 14:14:59 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980714141346.29710D-100000@newton.phys>
- Subject: [PATCH 5.004_74] Config_74-01
- Branch: perl
- ! Configure MANIFEST Porting/Glossary Porting/config.sh
- ! Porting/config_H Porting/pumpkin.pod config_h.SH
- ! vms/subconfigure.com win32/config.bc win32/config.gc
- ! win32/config.vc
-____________________________________________________________________________
-[ 1499] By: gsar on 1998/07/15 05:48:38
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 14 Jul 1998 21:35:02 +0300 (EET DST)
- Message-Id: <199807141835.VAA09030@alpha.hut.fi>
- Subject: [PATCH] 5.004_74: trig.t: math inaccuracy fudge for unicos
- Branch: perl
- ! t/lib/trig.t
-____________________________________________________________________________
-[ 1498] By: gsar on 1998/07/15 05:47:33
- Log: -w, strict clean perldoc (via PM)
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Tue, 14 Jul 98 17:22:01 BST
- Message-Id: <18695.9807141622@tempest.cise.npl.co.uk>
- Subject: [PATCH 5.004_74] perldoc.PL
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1497] By: gsar on 1998/07/15 05:35:54
- Log: add comment about cpprun etc., to hints/hpux.sh
- Branch: perl
- ! hints/hpux.sh
-____________________________________________________________________________
-[ 1496] By: gsar on 1998/07/15 05:15:16
- Log: fix warning from CGI::Carp
- Branch: perl
- ! lib/CGI/Carp.pm
-____________________________________________________________________________
-[ 1495] By: gsar on 1998/07/14 23:47:18
- Log: fix off-by-one in win32 registry handling
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Date: Tue, 14 Jul 1998 07:39:06 -0700
- Message-ID: <000401bdaf35$27489e80$a32fa8c0@tau.Active>
- Subject: [PATCH 5.004_73]
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 1494] By: gsar on 1998/07/14 23:45:58
- Log: doc patches from Gisle Aas <gisle@aas.no>
- Date: 14 Jul 1998 16:18:31 +0200
- Message-ID: <m33ec4cy88.fsf@furu.g.aas.no>
- Subject: [PATCH] substr/splice changes for perldelta.pod
- --
- Date: 14 Jul 1998 20:31:27 +0200
- Message-ID: <m3hg0kqo74.fsf@furu.g.aas.no>
- Subject: [PATCH] Duplicate description of use integer %
- Branch: perl
- ! pod/perldelta.pod pod/perlop.pod
-____________________________________________________________________________
-[ 1493] By: gsar on 1998/07/14 23:39:31
- Log: File/Spec.pm needs trailing newline
- Branch: perl
- ! lib/File/Spec.pm
-____________________________________________________________________________
-[ 1492] By: gsar on 1998/07/14 21:43:03
- Log: unsubmitted _74 tweaks
- Branch: perl
- ! Changes mpeix/nm mpeix/relink pod/perldelta.pod
- ! pod/perldiag.pod
-
-----------------
-Version 5.004_74
-----------------
-
-____________________________________________________________________________
-[ 1491] By: gsar on 1998/07/14 08:48:28
- Log: up patchlevel to 74; introduce distinct archname for PERL_OBJECT
- Branch: perl
- ! Changes patchlevel.h pod/perlhist.pod win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 1490] By: gsar on 1998/07/14 08:31:13
- Log: From: Gisle Aas <gisle@aas.no>
- Date: 14 Jul 1998 10:20:34 +0200
- Message-Id: <m3hg0k973h.fsf@furu.g.aas.no>
- Subject: [PATCH] Make -DP work (and readable)
- Branch: perl
- ! run.c
-____________________________________________________________________________
-[ 1489] By: gsar on 1998/07/14 08:23:46
- Log: fix function parameter autovivification for pseudohashes
- Branch: perl
- ! mg.c t/op/avhv.t
-____________________________________________________________________________
-[ 1488] By: gsar on 1998/07/14 07:34:45
- Log: merge changes#1423,1465 from maintbranch; checkin two missed files
- from earlier changes#1461,1478
- Branch: perl
- ! pod/perldiag.pod pod/perlfunc.pod pod/perlop.pod pp_sys.c
- ! t/TEST t/lib/thread.t t/op/local.t t/op/pat.t t/op/regexp.t
- ! t/op/substr.t t/op/vec.t
-____________________________________________________________________________
-[ 1487] By: gsar on 1998/07/14 07:04:54
- Log: tweak t/lib/thread.t
- Branch: perl
- ! t/lib/thread.t
-____________________________________________________________________________
-[ 1486] By: gsar on 1998/07/14 06:38:15
- Log: applied patch, slightly tweaked
- From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Mon, 13 Jul 1998 11:52:27 -0700
- Message-Id: <3.0.5.32.19980713115227.00a73970@ous.edu>
- Subject: [PATCH 5.004_73]Get re module working on VMS
- Branch: perl
- ! ext/re/Makefile.PL perl.h proto.h
-____________________________________________________________________________
-[ 1485] By: gsar on 1998/07/14 06:32:58
- Log: add Porting/p4d2p
- Branch: perl
- + Porting/p4d2p
- ! MANIFEST
-____________________________________________________________________________
-[ 1484] By: gsar on 1998/07/14 06:08:20
- Log: doc patches from Tom Christiansen <tchrist@chthon.perl.com> (via PM)
- Date: Mon, 13 Jul 1998 19:09:09 -0600
- Message-Id: <199807140109.TAA04678@chthon.perl.com>
- Subject: perlmod.pod patch
- --
- Date: Mon, 13 Jul 1998 18:37:07 -0600
- Message-Id: <199807140037.SAA04556@chthon.perl.com>
- Subject: perlbook.pod patch
- Branch: perl
- ! pod/perlbook.pod pod/perlmod.pod
-____________________________________________________________________________
-[ 1483] By: gsar on 1998/07/14 06:04:25
- Log: OS/2 update
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199807132336.TAA12967@monk.mps.ohio-state.edu>
- Date: Mon, 13 Jul 1998 19:36:05 -0400 (EDT)
- Subject: [PATCH 5.004_72] OS/2 system() and friends additions
- Branch: perl
- ! README.os2 hints/os2.sh os2/Changes os2/os2.c t/op/magic.t
-____________________________________________________________________________
-[ 1482] By: gsar on 1998/07/14 06:01:12
- Log: more VMS patches from Dan Sugalski <sugalskd@osshe.edu>
- Date: Mon, 13 Jul 1998 16:37:49 -0700
- Message-Id: <3.0.5.32.19980713163749.00af1c40@ous.edu>
- Subject: [PATCH 5.004_73]t/io/iprefix.t patch for VMS
- --
- Date: Mon, 13 Jul 1998 15:51:09 -0700
- Message-Id: <3.0.5.32.19980713155109.00a52c30@ous.edu>
- Subject: [PATCH5.004_73]Tweak t/lib/cgi-html.t to work on VMS
- Branch: perl
- ! t/io/iprefix.t t/lib/cgi-html.t
-____________________________________________________________________________
-[ 1481] By: gsar on 1998/07/14 05:57:36
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Mon, 13 Jul 1998 15:41:53 -0700
- Message-Id: <3.0.5.32.19980713154153.00a87be0@ous.edu>
- Subject: [PATCH 5.004_73]Fix t/base/rs.t test failures on VMS
- Branch: perl
- ! t/base/rs.t
-____________________________________________________________________________
-[ 1480] By: gsar on 1998/07/14 05:56:14
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Message-Id: <3.0.5.32.19980713150427.00b2a540@ous.edu>
- Date: Mon, 13 Jul 1998 15:04:27 -0700
- Subject: [PATCH 5.004_73]Thread tweak for VMS.C
- Branch: perl
- ! vms/vms.c
-____________________________________________________________________________
-[ 1479] By: gsar on 1998/07/14 05:55:13
- Log: From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Date: Mon, 13 Jul 1998 23:13:43 +0200
- Message-ID: <19980713231343.A178@cdata.tvnet.hu>
- Subject: [PATCH _72] Configure problem on dos-djgpp
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 1478] By: gsar on 1998/07/14 05:53:08
- Log: add files and tweaks needed for MPE/iX port (via PM)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 14 Jul 1998 00:07:30 +0300 (EET DST)
- Message-Id: <199807132107.AAA20603@alpha.hut.fi>
- Subject: MPE/iX patches for _73
- Branch: perl
- + README.mpeix ext/DynaLoader/dl_mpeix.xs ext/re/hints/mpeix.pl
- + mpeix/mpeixish.h mpeix/nm mpeix/relink
- ! MANIFEST ext/Socket/Socket.xs hints/mpeix.sh installperl
- ! lib/File/Copy.pm perl.c perl.h pod/perldelta.pod
-____________________________________________________________________________
-[ 1477] By: gsar on 1998/07/14 04:23:28
- Log: added suggested patch (via PM), tweaked to implicitly specify -DDEBUGGING
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 13 Jul 1998 16:50:55 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980713164922.28314B-100000@newton.phys>
- Subject: Re: _70 and Devel::RE
- Branch: perl
- ! ext/re/Makefile.PL ext/re/re.xs regcomp.c regexec.c
-____________________________________________________________________________
-[ 1476] By: gsar on 1998/07/14 04:06:25
- Log: minor Configure nits
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Mon, 13 Jul 1998 23:25:27 +0300 (EET DST)
- Message-Id: <199807132025.XAA10771@alpha.hut.fi>
- Subject: Configure patches for MVS (and one x2p/Makefile.SH)
- Branch: perl
- ! Configure x2p/Makefile.SH
-____________________________________________________________________________
-[ 1475] By: gsar on 1998/07/14 03:59:56
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Mon, 13 Jul 1998 12:54:19 -0700
- Message-Id: <3.0.5.32.19980713125419.009e0100@ous.edu>
- Subject: [PATCH 5.004_73] Fixes to the VMS configuration system
- Branch: perl
- ! vms/munchconfig.c vms/subconfigure.com
-____________________________________________________________________________
-[ 1474] By: gsar on 1998/07/14 03:58:13
- Log: make Term::Readline::get_line() independent of caller's $/
- From: kstar@chapin.edu
- Date: Mon, 13 Jul 1998 15:17:49 -0400
- Message-ID: <19980713151749.G8596@O2.chapin.edu>
- Subject: [PATCH] Was: CPAN.pm still fails
- Branch: perl
- ! lib/Term/ReadLine.pm
-____________________________________________________________________________
-[ 1473] By: gsar on 1998/07/14 03:55:29
- Log: fix $trnl interpolation in here-docs (via PM)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 13 Jul 1998 15:49:00 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980713151243.28129F-100000@newton.phys>
- Subject: Re: [PATCH] 5.004_73: Re: Configure/trnl craziness
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 1472] By: gsar on 1998/07/14 03:50:18
- Log: From: Dominic Dunlop <domo@ppp52.vo.lu>
- Date: Mon, 13 Jul 1998 15:55:09 +0100 (WET DST)
- Message-Id: <199807131455.PAA23621@ppp52.vo.lu>
- Subject: Not OK: perl 5.00473 on powerpc-machten 4.1 [PATCH 5.004_73]
- Branch: perl
- ! hints/machten.sh
-____________________________________________________________________________
-[ 1471] By: gsar on 1998/07/14 03:49:07
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Message-Id: <3.0.5.32.19980713123005.00b6be50@ous.edu>
- Date: Mon, 13 Jul 1998 12:30:05 -0700
- Subject: [PATCH 5.004_73] Add Data::Dumper and re modules to VMS config stuff
- Branch: perl
- ! configure.com vms/descrip_mms.template
-____________________________________________________________________________
-[ 1470] By: gsar on 1998/07/14 03:40:14
- Log: consistently refer to functions as C<foo()>
- From: abigail@fnx.com
- Date: Mon, 13 Jul 1998 03:04:24 -0400 (EDT)
- Message-ID: <19980713070424.19841.qmail@betelgeuse.wayne.fnx.com>
- Subject: Re: [PATCH 5.004_71] pod/perlfunc.pod
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1469] By: gsar on 1998/07/14 03:35:06
- Log: From: Tom Hughes <thh@cyberscience.com>
- Date: 13 Jul 1998 09:34:16 +0100
- Message-ID: <yekk95i175j.fsf@elva.cyberscience.com>
- Subject: [PATCH 5.004_72] Fix d_Gconvert definition in hints/svr4.sh
- Branch: perl
- ! hints/svr4.sh
-____________________________________________________________________________
-[ 1468] By: gsar on 1998/07/14 03:34:03
- Log: From: andreas.koenig@kulturbox.de (Andreas J. Koenig)
- Date: 13 Jul 1998 11:16:27 +0200
- Message-ID: <sfc90lyqff8.fsf@dubravka.in-berlin.de>
- Subject: Parallel Makefiles
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 1467] By: gsar on 1998/07/14 03:31:39
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 13 Jul 1998 00:12:19 -0400 (EDT)
- Message-Id: <199807130412.AAA27128@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_72] t/io/pipe.t - completely broken?
- Branch: perl
- ! t/io/pipe.t
-____________________________________________________________________________
-[ 1466] By: gsar on 1998/07/14 03:29:25
- Log: minor tweaks to perldelta and README.win32
- Branch: perl
- ! Changes README.win32 pod/perldelta.pod
-____________________________________________________________________________
-[ 1465] By: TimBunce on 1998/07/13 21:33:45
- Log: Assorted patches:
-
- Title: "Fix string substitution returncode problem"
- From: Dominic Dunlop <domo@vo.lu>, Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805271236.IAA28213@aatma.engin.umich.edu>,
- <v03110700b191a557f041@[195.95.102.114]>
- Files: pp_hot.c
-
- Title: "umask EXPR is fatal only if (EXPR & 0700) > 0"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807111656.MAA03310@aatma.engin.umich.edu>
- Files: pod/perldiag.pod pp_sys.c
-
- Title: "Remove reference to qsort from perlfunc.pod"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807111923.PAA05124@aatma.engin.umich.edu>
- Files: pod/perlfunc.pod
-
- Title: "Deprecate AvFILL in favor of av_len()"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807111945.PAA05489@aatma.engin.umich.edu>
- Files: pod/perlguts.pod
-
- Title: "Further clarify effects of using quotes with m operator"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199806201921.PAA03829@aatma.engin.umich.edu>
- Files: pod/perlop.pod
-
- Title: "Add PERL_DESTRUCT_LEVEL=2 to test suite"
- From: Tim Bunce
- Files: t/TEST t/op/local.t t/op/pat.t t/op/regexp.t t/op/substr.t t/op/vec.t
- Branch: maint-5.004/perl
- ! pod/perldiag.pod pod/perlfunc.pod pod/perlguts.pod
- ! pod/perlop.pod pp_hot.c pp_sys.c t/TEST t/op/local.t
- ! t/op/pat.t t/op/regexp.t t/op/substr.t t/op/vec.t toke.c
-
-----------------
-Version 5.004_73
-----------------
-
-____________________________________________________________________________
-[ 1464] By: gsar on 1998/07/13 04:41:07
- Log: up patchlevel to 73, update Changes &c.
- Branch: perl
- ! Changes patchlevel.h pod/perlhist.pod t/op/array.t
- ! win32/Makefile win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1463] By: gsar on 1998/07/13 02:58:51
- Log: avoid empty rm -f in MM_Unix.pm
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 1462] By: gsar on 1998/07/13 02:54:52
- Log: update perldelta
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 1461] By: gsar on 1998/07/13 02:44:30
- Log: added patch, tweaked PERL_OBJECT things
- From: Graham Barr <gbarr@pobox.com>
- Date: Sun, 12 Jul 1998 19:57:47 CDT
- Message-Id: <19980712195747.C493@pobox.com>
- Subject: [ PATCH perl5.004_72] patch to add qr//
- Branch: perl
- ! dump.c embed.h ext/Opcode/Opcode.pm global.sym globals.c
- ! keywords.h keywords.pl op.c op.h opcode.h opcode.pl
- ! pod/perlfunc.pod pp.c pp_hot.c pp_proto.h proto.h regcomp.c
- ! regexp.h sv.c t/op/pat.t toke.c
-____________________________________________________________________________
-[ 1460] By: gsar on 1998/07/13 01:25:07
- Log: add a few more PURIFY guards
- Branch: perl
- ! av.c sv.c
-____________________________________________________________________________
-[ 1459] By: gsar on 1998/07/12 23:38:31
- Log: add tests for change#1458 and then some
- Branch: perl
- ! t/op/array.t
-____________________________________________________________________________
-[ 1458] By: gsar on 1998/07/12 22:42:47
- Log: apply patch for smarter AASSIGN_COMMON detection; regen headers
- From: Stephen McCamant <alias@mcs.com>
- Date: Sun, 12 Jul 1998 17:17:00 CDT
- Message-Id: <13737.12300.950886.821143@alias-2.pr.mcs.net>
- Subject: [PATCH] @a=@a=qw(1) not working, both 5.004_04 and 5.004_71
- Branch: perl
- ! op.c opcode.h opcode.pl
-____________________________________________________________________________
-[ 1457] By: gsar on 1998/07/12 22:06:05
- Log: small tweaks from Jarkko Hietaniemi <jhi@cc.hut.fi>
- Branch: perl
- ! Configure Makefile.SH ext/Socket/Socket.xs perl.c
-____________________________________________________________________________
-[ 1456] By: gsar on 1998/07/12 21:56:39
- Log: From: Doug MacEachern <dougm@pobox.com>
- Date: Sun, 12 Jul 1998 14:29:29 -0400
- Message-Id: <199807121829.OAA00525@postman.opengroup.org>
- Subject: [PATCH 5.004_72] Embed.pm support for PERL_OBJECT
- Branch: perl
- ! lib/ExtUtils/Embed.pm
-____________________________________________________________________________
-[ 1455] By: gsar on 1998/07/12 21:54:02
- Log: applied installperl patch, corrected other little nits
- From: andreas.koenig@kulturbox.de (Andreas J. Koenig)
- Date: 12 Jul 1998 16:27:21 +0200
- Message-ID: <sfcn2afrvp2.fsf@dubravka.in-berlin.de>
- Subject: [5.004_72] installperl tweak
- Branch: perl
- ! Changes Configure README.win32 installperl win32/makefile.mk
-____________________________________________________________________________
-[ 1454] By: gsar on 1998/07/12 10:14:24
- Log: update MANIFEST, Changes
- Branch: perl
- - lib/Bundle/CPAN.pm
- ! Changes MANIFEST
-
-----------------
-Version 5.004_72
-----------------
-
-____________________________________________________________________________
-[ 1453] By: gsar on 1998/07/12 10:04:33
- Log: merge changes 1424, 1428 from maintbranch
- Branch: perl
- ! Porting/makerel ext/re/re.pm lib/Sys/Syslog.pm
-____________________________________________________________________________
-[ 1452] By: gsar on 1998/07/12 09:46:40
- Log: patchlevel up to 72, update Changes, minor tweaks to win32/config*
- and README.win32
- Branch: perl
- ! Changes README.win32 patchlevel.h win32/Makefile
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 1451] By: gsar on 1998/07/12 07:01:26
- Log: generic Configure mods and HAS_GROUP additions to help MiNT/MPEix/MVS
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Sat, 11 Jul 1998 17:51:07 +0300 (EET DST)
- Message-Id: <199807111451.RAA27010@alpha.hut.fi>
- Subject: M3 "generic" parts
- Branch: perl
- ! Configure Makefile.SH config_h.SH ext/POSIX/POSIX.xs
- ! ext/SDBM_File/sdbm/sdbm.h lib/ExtUtils/MM_Unix.pm
- ! makedepend.SH mv-if-diff perl.h plan9/plan9ish.h pp_sys.c
- ! unixish.h vms/subconfigure.com vms/vmsish.h win32/config_H.bc
- ! win32/config_H.gc x2p/Makefile.SH
-____________________________________________________________________________
-[ 1450] By: gsar on 1998/07/12 06:38:27
- Log: various tweaks for PERL_OBJECT build & test
- Branch: perl
- ! globals.c iperlsys.h win32/GenCAPI.pl win32/Makefile
- ! win32/makefile.mk win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 1449] By: gsar on 1998/07/12 06:29:23
- Log: From: andreas.koenig@kulturbox.de (Andreas J. Koenig)
- Date: 12 Jul 1998 08:22:16 +0200
- Message-Id: <sfck95jtwpz.fsf@dubravka.in-berlin.de>
- Subject: [5.004_71] Patch: let CPAN.pm work with threaded perl
- Branch: perl
- ! lib/CPAN.pm lib/SelfLoader.pm
-____________________________________________________________________________
-[ 1448] By: gsar on 1998/07/12 05:10:50
- Log: make RE engine threadsafe; -Dusethreads builds, tests on Solaris,
- and runs regexes in 1000s of threads without crashing; also fixed
- statcache not being thread-local
- Branch: perl
- ! embed.h embedvar.h ext/Thread/Thread.xs ext/re/re.xs
- ! intrpvar.h op.c perl.c pp_ctl.c regcomp.c regexec.c sv.c
- ! t/lib/thread.t thrdvar.h util.c
-____________________________________________________________________________
-[ 1447] By: gsar on 1998/07/12 02:40:45
- Log: From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Date: Sun, 12 Jul 1998 03:23:04 +0200
- Message-Id: <l03130300b1cdbff87621@[194.222.64.89]>
- Subject: Re: perlbug doesn't check that save succeeded
- Branch: perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 1446] By: gsar on 1998/07/12 02:39:24
- Log: be generous about CRs
- From: larry@wall.org (Larry Wall)
- Date: Sat, 11 Jul 1998 17:54:21 PDT
- Message-Id: <199807120054.RAA19550@wall.org>
- Subject: [PATCH _71] CRs et al
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 1445] By: gsar on 1998/07/12 02:11:16
- Log: fix pp_caller() to fully traverse stacklevels
- Branch: perl
- ! objpp.h pp_ctl.c proto.h t/op/runlevel.t
-____________________________________________________________________________
-[ 1444] By: gsar on 1998/07/11 23:43:37
- Log: add patch, along with all the missing bits, and doc tweaks
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 9 Jul 1998 18:47:25 -0400 (EDT)
- Message-Id: <199807092247.SAA06314@monk.mps.ohio-state.edu>
- Subject: Re: [PATCH 5.004_71] Secure RE update
- Branch: perl
- ! ObjXSub.h embed.h embedvar.h ext/Opcode/Opcode.pm ext/re/re.pm
- ! global.sym globals.c interp.sym intrpvar.h op.c opcode.h
- ! opcode.pl pp_ctl.c pp_proto.h regcomp.c sv.c t/op/misc.t
- ! t/op/pat.t t/op/subst.t
-____________________________________________________________________________
-[ 1443] By: gsar on 1998/07/11 23:08:14
- Log: tweak to get BSDI to build IPC/SysV
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Date: 11 Jul 1998 16:26:44 +0300
- Message-ID: <oeeww9kecx7.fsf@alpha.hut.fi>
- Subject: Re: NOT OK: perl5.004_71 on BSDI 3.1
- Branch: perl
- ! ext/IPC/SysV/SysV.xs
-____________________________________________________________________________
-[ 1442] By: gsar on 1998/07/11 23:03:39
- Log: fix closures in optimized C<for (1..5)> (only the tests are in this
- change, the pp_hot.c fix accidentally went in change#1441)
- Branch: perl
- ! t/op/closure.t
-____________________________________________________________________________
-[ 1441] By: gsar on 1998/07/11 22:35:40
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Sat, 11 Jul 1998 18:21:21 -0400 (EDT)
- Message-Id: <199807112221.SAA03221@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_71] Update os2's OS2::Process
- Branch: perl
- ! os2/OS2/Process/Makefile.PL os2/OS2/Process/Process.pm
- ! os2/OS2/Process/Process.xs pp_hot.c
-____________________________________________________________________________
-[ 1440] By: gsar on 1998/07/11 19:41:59
- Log: From: andreas.koenig@kulturbox.de (Andreas J. Koenig)
- Date: 11 Jul 1998 17:00:21 +0200
- Message-ID: <sfc1zrsxwje.fsf@dubravka.in-berlin.de>
- Subject: [perl5.004_71] Patch: change MakeMaker default compress --> gzip
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1439] By: gsar on 1998/07/11 19:36:58
- Log: export newRV_noinc on win32, deprecate AvFILL in favor of av_len()
- Branch: perl
- ! pod/perlguts.pod win32/makedef.pl
-____________________________________________________________________________
-[ 1438] By: gsar on 1998/07/11 19:14:21
- Log: applied patch for perlfunc tweaks, removed reference to system qsort()
- From: abigail@fnx.com
- Date: Sat, 11 Jul 1998 04:20:54 -0400 (EDT)
- Message-ID: <19980711082054.2184.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH 5.004_71] pod/perlfunc.pod
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1437] By: gsar on 1998/07/11 19:05:00
- Log: From: abigail@fnx.com
- Date: Sat, 11 Jul 1998 04:09:57 -0400 (EDT)
- Message-ID: <19980711080957.2106.qmail@betelgeuse.wayne.fnx.com>
- Subject: [PATCH 5.004_71] pod/pod2man.PL
- Branch: perl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 1436] By: gsar on 1998/07/11 18:58:03
- Log: more complete version of change#1421
- From: Stephen McCamant <alias@mcs.com>
- Date: Fri, 10 Jul 1998 23:46:46 -0500 (CDT)
- Message-ID: <13734.58994.735473.859218@alias-2.pr.mcs.net>
- Subject: [PATCH] Re: B::Deparse for(1..100000)
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 1435] By: gsar on 1998/07/11 18:54:42
- Log: win32 fixes for VC 6.0 nits
- Branch: perl
- ! ext/Data/Dumper/Dumper.xs win32/Makefile win32/makefile.mk
- ! win32/win32.h
-____________________________________________________________________________
-[ 1434] By: gsar on 1998/07/11 18:45:32
- Log: s/AVHV/pseudo-hash/ (via PM)
- From: Gisle Aas <gisle@aas.no>
- Date: 11 Jul 1998 00:16:53 +0200
- Message-ID: <m3hg0pbbca.fsf@furu.g.aas.no>
- Subject: [PATCH] trivial fields.pm doc patch
- Branch: perl
- ! lib/fields.pm
-____________________________________________________________________________
-[ 1433] By: gsar on 1998/07/11 18:43:11
- Log: From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Date: Fri, 10 Jul 1998 23:12:11 +0200
- Message-ID: <19980710231211.A161@cdata.tvnet.hu>
- Subject: [PATCH _71] dos-djgpp update
- Branch: perl
- ! Configure djgpp/config.over djgpp/djgppsed.sh djgpp/fixpmain
-____________________________________________________________________________
-[ 1432] By: gsar on 1998/07/11 18:41:00
- Log: applied patch, reformatted long lines in places
- From: Dominic Dunlop <domo@computer.org>
- Date: Fri, 10 Jul 1998 23:11:30 +0000
- Message-Id: <v03110703b1cc32a02438@[195.95.102.91]>
- Subject: [PATCH 5.004_71] Re: Document "count exceeded" regular expression
- warning
- Branch: perl
- ! pod/perldiag.pod regexec.c
-____________________________________________________________________________
-[ 1431] By: gsar on 1998/07/11 18:29:18
- Log: From: "John L. Allen" <allen@grumman.com>
- Date: Fri, 10 Jul 1998 13:57:01 -0400 (EDT)
- Message-ID: <Pine.SOL.3.91.980710134236.15717A-100000@gateway.grumman.com>
- Subject: [PATCH]: _71 & _04 - Make AIX hints preserve ccflags as per docs
- Branch: perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 1430] By: TimBunce on 1998/07/11 18:15:09
- Log: Title: "Fix string substitution returncode problem"
- From: Dominic Dunlop <domo@vo.lu>, Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805271236.IAA28213@aatma.engin.umich.edu>,
- <v03110700b191a557f041@[195.95.102.114]>
- Files: pp_hot.c
- Branch: maint-5.004/perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 1429] By: gsar on 1998/07/11 18:07:52
- Log: applied patch, tweaked doc and code that does labels/indentation
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Thu, 9 Jul 1998 21:39:40 -0400 (EDT)
- Message-Id: <199807100139.VAA08617@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_71] perldebug.pod and RE
- Branch: perl
- ! pod/perldebug.pod regcomp.c regexec.c
-____________________________________________________________________________
-[ 1428] By: TimBunce on 1998/07/11 17:45:56
- Log: Assorted patches:
-
- Title: "makerel now reads local patch list from patchlevel.h"
- Files: patchlevel.h Porting/makerel
-
- Title: "pod/pod2man.PL"
- From: abigail@fnx.com
- Msg-ID: <19980711080957.2106.qmail@betelgeuse.wayne.fnx.com>
- Files: pod/pod2man.PL
-
- Title: "Clarify taint example in re.pm"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980623155803.3227X-100000@user2.teleport.com>
- Files: lib/re.pm
-
- Title: "Anohter ptags improvement"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199807070059.UAA28815@monk.mps.ohio-state.edu>
- Files: emacs/ptags
-
- Title: "_71 & _04 - Make AIX hints preserve ccflags as per docs"
- From: "John L. Allen" <allen@grumman.com>
- Msg-ID: <Pine.SOL.3.91.980710134236.15717A-100000@gateway.grumman.com>
- Files: hints/aix.sh
- Branch: maint-5.004/perl
- ! Porting/makerel emacs/ptags hints/aix.sh lib/re.pm
- ! patchlevel.h pod/pod2man.PL
-____________________________________________________________________________
-[ 1427] By: gsar on 1998/07/11 17:04:47
- Log: make Liblist return consistently backslashed paths
- Branch: perl
- ! lib/ExtUtils/Liblist.pm
-____________________________________________________________________________
-[ 1426] By: gsar on 1998/07/11 16:53:56
- Log: don't 'touch a2p.c', it might readonly (via PM)
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Fri, 10 Jul 98 17:19:54 BST
- Message-Id: <20430.9807101619@tempest.cise.npl.co.uk>
- Branch: perl
- ! x2p/Makefile.SH
-____________________________________________________________________________
-[ 1425] By: TimBunce on 1998/07/11 16:42:26
- Log: Title: "Add newCONSTSUB (from 5.005_70)"
- Files: embed.h proto.h global.sym op.c
- Branch: maint-5.004/perl
- ! embed.h global.sym op.c proto.h
-____________________________________________________________________________
-[ 1424] By: TimBunce on 1998/07/11 16:20:21
- Log: Title: "Assorted fixes for Sys::Syslog.pm"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Sean Robinson
- <ROBINSON_S@sc.maricopa.edu>, Tim.Bunce@ig.co.uk
- Msg-ID: <01IXGLISWJ7Q0001B6@sc.maricopa.edu>,
- <199805270939.KAA08453@toad.ig.co.uk>,
- <E0yeHPI-00047D-00@taurus.cus.cam.ac.uk>
- Files: lib/Sys/Syslog.pm
- Branch: maint-5.004/perl
- ! lib/Sys/Syslog.pm
-____________________________________________________________________________
-[ 1423] By: TimBunce on 1998/07/11 15:53:37
- Log: Assorted patches:
-
- Title: "umask: die if EXPR & 0700 else return undef"
- From: Chip Salzenberg <chip@perl.org>, Jarkko Hietaniemi <jhi@cc.hut.fi>,
- Jarkko Hietaniemi <jhi@iki.fi>, Malcolm Beattie
- <mbeattie@sable.ox.ac.uk>, Tim.Bunce@ig.co.uk (Tim Bunce),
- kstar@chapin.ed, kstar@chapin.edu@ig.co.uk ()
- Msg-ID: <199805291520.QAA01615@sable.ox.ac.uk>,
- <199805291549.SAA01439@alpha.hut.fi>,
- <199805291608.RAA29283@toad.ig.co.uk>,
- <19980530105129.A24006@O2.chapin.edu>,
- <19980608133037.A8793@perlsupport.com>
- Files: pod/perldiag.pod pod/perlfunc.pod pp_sys.c
-
- Title: "File name DynaLoader.pm.PL is 8.3 unfriendly"
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Msg-ID: <19980610005417.G162@cdata.tvnet.hu>
- Files: MANIFEST ext/DynaLoader/Makefile.PL
- Branch: maint-5.004/perl
- +> ext/DynaLoader/DynaLoader_pm.PL
- - ext/DynaLoader/DynaLoader.pm.PL
- ! MANIFEST ext/DynaLoader/Makefile.PL pod/perldiag.pod
- ! pod/perlfunc.pod pp_sys.c
-____________________________________________________________________________
-[ 1421] By: gsar on 1998/07/11 02:54:02
- Log: From: Gisle Aas <gisle@aas.no>
- Subject: [PATCH] B::Deparse for(1..100000)
- Date: 10 Jul 1998 14:04:44 +0200
- Message-ID: <m3n2ahx677.fsf@furu.g.aas.no>
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 1420] By: gsar on 1998/07/11 02:28:18
- Log: add 'clean' target for ext/re
- Branch: perl
- ! ext/re/Makefile.PL
-____________________________________________________________________________
-[ 1419] By: gsar on 1998/07/11 02:20:32
- Log: From: Tom Hughes <thh@cyberscience.com>
- Date: 10 Jul 1998 10:25:18 +0100
- Message-ID: <yekn2ai5a81.fsf@elva.cyberscience.com>
- Subject: [5.004_71] Patch: svr4 hints updates for Unixware
- Branch: perl
- ! hints/svr4.sh
-____________________________________________________________________________
-[ 1418] By: gsar on 1998/07/11 02:19:12
- Log: move op/ipc{msg,sem}.t into lib/ipc_sysv.t
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Fri, 10 Jul 1998 13:08:08 +0300 (EET DST)
- Message-Id: <199807101008.NAA10817@alpha.hut.fi>
- Subject: Re: make minitest does not work out of the box - test subset
- needs pruning
- Branch: perl
- + t/lib/ipc_sysv.t
- - t/op/ipcmsg.t t/op/ipcsem.t
- ! MANIFEST
-____________________________________________________________________________
-[ 1417] By: gsar on 1998/07/11 02:14:16
- Log: disable CR croaking (via #define, default off) in lieu of more
- complete fix
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 1416] By: gsar on 1998/07/11 02:06:11
- Log: added patch, made linking with setargv a build option
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Date: Thu, 9 Jul 1998 09:51:42 -0700
- Message-ID: <000101bdab59$d9602dc0$a32fa8c0@tau.Active>
- Subject: [PATCH 5.004_71]
- Branch: perl
- ! perl.c pp_sys.c win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1415] By: gsar on 1998/07/11 01:47:19
- Log: From: Tom Hughes <thh@cyberscience.com>
- Date: 10 Jul 1998 09:01:12 +0100
- Message-ID: <yekr9zu5e47.fsf@elva.cyberscience.com>
- Subject: [5.004_71] Patch: Fix perl_exp.SH for Unixware
- Branch: perl
- ! perl_exp.SH
-____________________________________________________________________________
-[ 1414] By: gsar on 1998/07/11 01:45:45
- Log: make lib/re.pm a prereq for minitest
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1413] By: gsar on 1998/07/11 01:40:56
- Log: add patch (via PM)
- From: Stephen McCamant <alias@mcs.com>
- Date: Fri, 10 Jul 1998 01:14:11 -0500 (CDT)
- Message-ID: <13733.45251.47363.431138@alias-2.pr.mcs.net>
- Subject: Big B::Deparse update
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 1412] By: gsar on 1998/07/11 00:25:17
- Log: add perlport.pod v1.23 from Chris Nandor <pudge@pobox.com>
- Branch: perl
- + pod/perlport.pod
- ! pod/perl.pod
-____________________________________________________________________________
-[ 1411] By: gsar on 1998/07/10 21:53:06
- Log: make binmode(STDIN) not whine
- From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Thu, 09 Jul 1998 16:51:27 -0700
- Message-Id: <3.0.5.32.19980709165127.00a692e0@ous.edu>
- Subject: [PATCH 5.004_70] Fix up binmode() for VMS
- Branch: perl
- ! vms/vms.c
-____________________________________________________________________________
-[ 1410] By: gsar on 1998/07/10 21:50:57
- Log: CPAN-1.39 update
- From: koenig@kulturbox.de (Andreas J. Koenig)
- Date: 10 Jul 1998 00:45:36 +0200
- Message-ID: <sfcbtqytzhr.fsf@dubravka.in-berlin.de>
- Subject: Re: perl5.004_71 hit the stands this morn
- Branch: perl
- ! MANIFEST lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
-____________________________________________________________________________
-[ 1409] By: gsar on 1998/07/10 21:45:10
- Log: manually apply patch with conflicts
- From: Dan Sugalski <sugalskd@osshe.edu>
- Date: Thu, 09 Jul 1998 12:08:33 -0700
- Message-Id: <3.0.5.32.19980709120833.009eb100@ous.edu>
- Subject: [PATCH 5.004_70] Updated duble-quotes in config.h/config.pm patch
- Branch: perl
- ! configpm
-____________________________________________________________________________
-[ 1408] By: gsar on 1998/07/10 21:36:54
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Thu, 9 Jul 1998 11:58:30 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980709115556.24236D-100000@newton.phys>
- Subject: Re: perldelta.pod [PATCH]
- Branch: perl
- ! pod/perldelta.pod
-____________________________________________________________________________
-[ 1407] By: gsar on 1998/07/10 21:35:13
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Thu, 9 Jul 1998 11:26:03 -0400 (EDT)
- Subject: [PATCH 5.004_71] Allow static build of IPC::SysV
- Message-Id: <Pine.SUN.3.96.980709112507.24236B-100000@newton.phys>
- Branch: perl
- ! ext/IPC/SysV/Makefile.PL
-____________________________________________________________________________
-[ 1406] By: gsar on 1998/07/10 21:33:30
- Log: manually apply patch with conflicts
- From: kstar@chapin.edu
- Message-ID: <19980709093621.B7857@O2.chapin.edu>
- Date: Thu, 9 Jul 1998 09:36:21 -0400
- Subject: Re: [PATCH] 5.004_70 installperl and docs
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 1405] By: gsar on 1998/07/10 21:28:29
- Log: misc tweaks to docs and qsortsv() warning
- Branch: perl
- ! Changes pod/perldelta.pod pod/perlsub.pod pp_ctl.c
-____________________________________________________________________________
-[ 1404] By: gsar on 1998/07/10 21:23:53
- Log: add more correct version of change#1350 (as yet untested)
- From: joshua.pritikin@db.com
- Date: Thu, 9 Jul 1998 09:22:46 -0400
- Message-Id: <H00000e50008f277@MHS>
- Subject: Re: [PATCH _70] cache missing methods
- Branch: perl
- ! embedvar.h gv.c interp.sym intrpvar.h perlvars.h
-____________________________________________________________________________
-[ 1403] By: gsar on 1998/07/10 20:46:12
- Log: add win32_rename() that does what docs say
- Branch: perl
- ! win32/GenCAPI.pl win32/makedef.pl win32/perlhost.h
- ! win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 1402] By: gsar on 1998/07/10 20:19:18
- Log: inet_aton() should do DNS lookup only if arg isn't a dotted-quad
- (suggested by Philippe.Simonet@swisscom.com)
- Branch: perl
- ! ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 1401] By: gsar on 1998/07/10 03:24:45
- Log: undo change#1379 (order of tests *is* significant)
- Branch: perl
- ! t/lib/posix.t
-____________________________________________________________________________
-[ 1400] By: nick on 1998/07/09 17:43:14
- Log: Integrate mainline (_071-ish)
- Branch: ansiperl
- +> ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm
- +> ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Makefile.PL
- +> ext/Data/Dumper/Todo ext/IPC/SysV/ChangeLog
- +> ext/IPC/SysV/MANIFEST ext/IPC/SysV/Makefile.PL
- +> ext/IPC/SysV/Msg.pm ext/IPC/SysV/README
- +> ext/IPC/SysV/Semaphore.pm ext/IPC/SysV/SysV.pm
- +> ext/IPC/SysV/SysV.xs ext/IPC/SysV/t/msg.t ext/IPC/SysV/t/sem.t
- +> ext/re/Makefile.PL ext/re/re.pm ext/re/re.xs pp_proto.h
- +> t/io/iprefix.t t/lib/dumper-ovl.t t/lib/dumper.t
- !> (integrate 145 files)
-
-----------------
-Version 5.004_71
-----------------
-
-____________________________________________________________________________
-[ 1399] By: gsar on 1998/07/09 12:15:12
- Log: update Changes, perlhist.pod, beginnings of perldelta.pod
- Branch: perl
- ! Changes pod/perldelta.pod pod/perlhist.pod
-____________________________________________________________________________
-[ 1397] By: gsar on 1998/07/09 08:35:39
- Log: merge changes from maintbranch (1354, and relevant part of 1356); all
- maintenance changes upto 1356 merged
- Branch: perl
- ! pod/perldiag.pod pp_hot.c t/op/misc.t
-____________________________________________________________________________
-[ 1396] By: gsar on 1998/07/09 08:02:52
- Log: add Data-Dumper, up patchlevel to 71, various misc tweaks to
- make all configs build on Solaris and win32
- Branch: perl
- + ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm
- + ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Makefile.PL
- + ext/Data/Dumper/Todo t/lib/dumper-ovl.t t/lib/dumper.t
- ! MANIFEST Todo patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1395] By: gsar on 1998/07/09 05:39:48
- Log: From: Stephen McCamant <alias@mcs.com>
- Date: Wed, 08 Jul 1998 23:16:49 CDT
- Message-Id: <13732.16626.904108.608743@alias-2.pr.mcs.net>
- Subject: [PATCH] UNOP opclass test in B.xs
- Branch: perl
- ! ext/B/B.xs
-____________________________________________________________________________
-[ 1394] By: gsar on 1998/07/09 05:37:48
- Log: get it building again on win32
- Branch: perl
- ! bytecode.h embed.h ext/re/Makefile.PL global.sym intrpvar.h
- ! op.c opcode.pl perl.h pp.c pp_ctl.c pp_hot.c pp_proto.h
- ! pp_sys.c proto.h win32/Makefile win32/makedef.pl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 1393] By: gsar on 1998/07/09 05:20:31
- Log: applied patch from Ilya, tweaked some to get clean static build of
- the ext/re stuff (untested on win32)
- Branch: perl
- ! regcomp.c regexec.c
-____________________________________________________________________________
-[ 1392] By: gsar on 1998/07/09 03:56:45
- Log: fix installperl typo
- From: kstar@chapin.edu
- Date: Wed, 08 Jul 1998 23:51:57 EDT
- Message-Id: <19980708235157.D1380@O2.chapin.edu>
- Subject: Re: [PATCH] 5.004_70 installperl and docs
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 1391] By: gsar on 1998/07/09 01:48:16
- Log: From: Chip Salzenberg <chip@perl.org>
- Date: Wed, 8 Jul 1998 18:10:55 -0400
- Message-ID: <19980708181055.A8005@perlsupport.com>
- Subject: [PATCH _70] Allow $SIG{CHLD}='IGNORE' to work on Solaris
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 1390] By: gsar on 1998/07/09 01:45:16
- Log: added patch, tweaked per Ilya's suggestion
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Wed, 8 Jul 1998 13:34:42 +0100
- Message-Id: <E0yttQo-0002aH-00@taurus.cus.cam.ac.uk>
- Subject: [PATCH] perl5db.pl complains about non-integer condition
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 1389] By: gsar on 1998/07/09 01:42:13
- Log: reenable misaligned memory checks, cast to UV & check alignment
- From: Dominic Dunlop <domo@computer.org>
- Date: Wed, 8 Jul 1998 11:21:48 +0000
- Message-Id: <v03110703b1c8ffdb68ed@[195.95.102.91]>
- Subject: Re: [PATCH 5.00469] corrupt malloc ptr on NeXT
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 1388] By: gsar on 1998/07/09 01:36:22
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Wed, 8 Jul 1998 13:32:07 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980708133010.23053F-100000@newton.phys>
- Subject: [PATCH 5.004_70] more on finding metaconfig units.
- Branch: perl
- ! Porting/pumpkin.pod
-____________________________________________________________________________
-[ 1387] By: gsar on 1998/07/09 01:35:23
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Wed, 8 Jul 1998 13:29:34 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980708132743.23053E-100000@newton.phys>
- Subject: Configure indentation patch
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 1386] By: gsar on 1998/07/09 01:33:31
- Log: don't try to hardlink perldiag.pod; that is no longer not needed
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Wed, 8 Jul 1998 12:18:32 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980708120844.23053D-100000@newton.phys>
- Subject: Re: pelr installation attempts hard links between file systems
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 1385] By: gsar on 1998/07/09 01:28:05
- Log: win32/makefile.mk =~ s|gcc -pipe|gcc|
- Branch: perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 1384] By: gsar on 1998/07/09 01:26:19
- Log: make t/TEST run 'perl $switches ./foo/test.t' everywhere
- Branch: perl
- ! t/TEST
-____________________________________________________________________________
-[ 1383] By: gsar on 1998/07/09 01:06:47
- Log: manually apply patch with a dependency on unapplied patch
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 8 Jul 1998 07:03:51 -0400 (EDT)
- Message-Id: <199807081103.HAA25145@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_70] make quoted RE embeddable
- Branch: perl
- ! sv.c t/op/pat.t
-____________________________________________________________________________
-[ 1382] By: gsar on 1998/07/09 01:02:23
- Log: change order of libs for extensions
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Date: Tue, 7 Jul 1998 23:48:05 +0200
- Message-ID: <19980707234805.C180@cdata.tvnet.hu>
- Subject: [PATCH _70] linking problem with modules
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 1381] By: gsar on 1998/07/09 00:56:12
- Log: patch for more flexible initialization of xsub parameters
- From: Tye McQueen <tye@metronet.com>
- Date: Mon, 6 Jul 1998 19:04:27 -0500 (CDT)
- Message-Id: <199807070004.AA16454@metronet.com>
- Subject: Enhanced arg inits for xsubpp
- Branch: perl
- ! lib/ExtUtils/xsubpp pod/perlxs.pod
-____________________________________________________________________________
-[ 1380] By: gsar on 1998/07/09 00:44:01
- Log: From: Tye McQueen <tye@metronet.com>
- Date: Mon, 6 Jul 1998 17:34:54 -0500 (CDT)
- Message-Id: <16619-17073@lyris.activestate.com>
- Subject: New pl2bat.pl
- Branch: perl
- ! win32/bin/pl2bat.pl
-____________________________________________________________________________
-[ 1379] By: gsar on 1998/07/09 00:30:58
- Log: remove ordering dependency in posix.t
- Branch: perl
- ! t/lib/posix.t
-____________________________________________________________________________
-[ 1378] By: gsar on 1998/07/08 20:17:43
- Log: make -i'*suffix' work too
- Branch: perl
- ! doio.c
-____________________________________________________________________________
-[ 1377] By: gsar on 1998/07/08 08:56:28
- Log: regen headers; result builds & tests on Solaris again (threaded)
- Branch: perl
- ! embedvar.h
-____________________________________________________________________________
-[ 1376] By: gsar on 1998/07/08 08:55:03
- Log: change#1350 breaks things, back it out
- Branch: perl
- ! embedvar.h gv.c interp.sym intrpvar.h perlvars.h
-____________________________________________________________________________
-[ 1375] By: gsar on 1998/07/08 07:47:00
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Wed, 8 Jul 1998 01:30:15 -0400 (EDT)
- Message-Id: <199807080530.BAA14072@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_70] Switch modifiers in RE off
- Branch: perl
- ! pod/perlre.pod regcomp.c t/op/re_tests
-____________________________________________________________________________
-[ 1374] By: gsar on 1998/07/08 07:41:06
- Log: From: Gisle Aas <gisle@aas.no>
- Date: 07 Jul 1998 23:08:59 +0200
- Message-ID: <m3vhp9z7v8.fsf@furu.g.aas.no>
- Subject: [PATCH] Faster copying from SvIV/SvNVs in sv_setsv()
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1373] By: gsar on 1998/07/08 07:36:01
- Log: From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Date: Tue, 7 Jul 1998 23:47:50 +0200
- Message-ID: <19980707234750.A180@cdata.tvnet.hu>
- Subject: [PATCH _70] dos-djgpp update
- Branch: perl
- ! djgpp/config.over djgpp/djgppsed.sh
-____________________________________________________________________________
-[ 1372] By: gsar on 1998/07/08 07:12:47
- Log: add extension to support SysV IPC
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 7 Jul 1998 02:32:53 +0300 (EET DST)
- Message-Id: <199807062332.CAA25792@alpha.hut.fi>
- Subject: [PATCH] 5.004_70: IPC::SysV
- Branch: perl
- + ext/IPC/SysV/ChangeLog ext/IPC/SysV/MANIFEST
- + ext/IPC/SysV/Makefile.PL ext/IPC/SysV/Msg.pm
- + ext/IPC/SysV/README ext/IPC/SysV/Semaphore.pm
- + ext/IPC/SysV/SysV.pm ext/IPC/SysV/SysV.xs ext/IPC/SysV/t/msg.t
- + ext/IPC/SysV/t/sem.t
- ! Configure MANIFEST pod/perlfunc.pod pod/perlipc.pod
- ! t/op/ipcmsg.t t/op/ipcsem.t
-____________________________________________________________________________
-[ 1371] By: gsar on 1998/07/08 05:12:07
- Log: add patch for C<use re 'debug'>
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 6 Jul 1998 22:24:33 -0400 (EDT)
- Message-Id: <199807070224.WAA10318@monk.mps.ohio-state.edu>
- Subject: Re: _70 and Devel::RE
- Branch: perl
- + ext/re/Makefile.PL ext/re/re.pm ext/re/re.xs
- - lib/re.pm
- ! MANIFEST Makefile.SH global.sym interp.sym intrpvar.h op.c
- ! perl.h pp.c pp_ctl.c pp_hot.c regcomp.c regexec.c
-____________________________________________________________________________
-[ 1370] By: gsar on 1998/07/08 04:27:27
- Log: added patch to generate PPDEF(pp_foo)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 6 Jul 1998 20:43:54 -0400 (EDT)
- Message-Id: <199807070043.UAA28572@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_70] Autogenerate declarations for opcodes
- Branch: perl
- + pp_proto.h
- ! MANIFEST Makefile.SH opcode.pl proto.h
-____________________________________________________________________________
-[ 1369] By: gsar on 1998/07/08 04:19:49
- Log: suggest 'make test' after make
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1368] By: gsar on 1998/07/08 03:58:19
- Log: added patch for -i'foo*bar', made code somewhat simpler, tweaked doc
- From: Colin Kuskie <ckuskie@cadence.com>
- Date: Tue, 7 Jul 1998 09:44:33 -0700 (PDT)
- Message-ID: <Pine.GSO.3.96.980707093457.28681A-100000@pdxue150.cadence.com>
- Subject: Corrected -i prefix patch
- Branch: perl
- + t/io/iprefix.t
- ! MANIFEST doio.c pod/perlrun.pod
-____________________________________________________________________________
-[ 1366] By: gsar on 1998/07/08 02:28:30
- Log: From: Gisle Aas <gisle@aas.no>
- Date: 07 Jul 1998 17:48:36 +0200
- Message-ID: <m3vhp94q7f.fsf@furu.g.aas.no>
- Subject: [PATCH] Remove some rendundant SvOOK_on tests
- Branch: perl
- ! sv.c sv.h
-____________________________________________________________________________
-[ 1365] By: gsar on 1998/07/08 02:25:17
- Log: applied patch to clarify m//g
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Date: Tue, 7 Jul 1998 15:59:03 +0100
- Message-Id: <E0ytZCx-0006Bi-00@taurus.cus.cam.ac.uk>
- Subject: [PATCH] Re: m//g in perlop.pod
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 1364] By: gsar on 1998/07/08 02:13:07
- Log: From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Subject: [PATCH] 5.004_70 bug in perlfaq.pod
- Message-Id: <E0ytVTJ-0002kb-00@taurus.cus.cam.ac.uk>
- Date: Tue, 7 Jul 1998 11:59:41 +0100
- Branch: perl
- ! pod/perlfaq.pod
-____________________________________________________________________________
-[ 1363] By: gsar on 1998/07/08 02:11:11
- Log: applied tweak (via private mail)
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Date: Tue, 7 Jul 1998 13:27:47 +0300 (EET DST)
- Message-Id: <199807071027.NAA20829@alpha.hut.fi>
- Subject: tiny perllocale.pod patch for 5.004_70
- Branch: perl
- ! pod/perllocale.pod
-____________________________________________________________________________
-[ 1362] By: gsar on 1998/07/08 02:07:48
- Log: applied patch, various tweaks to pander to pod2man tantrums
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 6 Jul 1998 22:47:30 -0400 (EDT)
- Message-Id: <199807070247.WAA10677@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_70] CONFIGPM
- Branch: perl
- ! Porting/Glossary configpm
-____________________________________________________________________________
-[ 1361] By: gsar on 1998/07/07 22:13:11
- Log: From: Stephen McCamant <alias@mcs.com>
- Date: Mon, 6 Jul 1998 21:22:17 -0500 (CDT)
- Message-ID: <13729.33816.311236.995647@alias-2.pr.mcs.net>
- Subject: Re: Inconsistent arithmetics on refs
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1360] By: gsar on 1998/07/07 22:11:11
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Mon, 6 Jul 1998 20:59:10 -0400 (EDT)
- Message-Id: <199807070059.UAA28815@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_70] Anohter ptags improvement
- Branch: perl
- ! emacs/ptags
-____________________________________________________________________________
-[ 1359] By: gsar on 1998/07/07 22:08:48
- Log: fix accidental RE-de-optimization
- From: larry@wall.org (Larry Wall)
- Date: Mon, 6 Jul 1998 17:49:31 -0700
- Message-Id: <199807070049.RAA23475@wall.org>
- Subject: Re: before you deluge us with patches
- --
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Date: Tue, 7 Jul 1998 03:10:56 -0400 (EDT)
- Message-Id: <199807070710.DAA25399@monk.mps.ohio-state.edu>
- Subject: Re: before you deluge us with patches
- Branch: perl
- ! pp_hot.c regexec.c
-____________________________________________________________________________
-[ 1358] By: gsar on 1998/07/07 21:36:29
- Log: From: Gisle Aas <gisle@aas.no>
- Subject: [PATCH] Evaluation of AVHVs in scalar context
- Date: 06 Jul 1998 21:41:14 +0200
- Message-ID: <m33ecedaxx.fsf@furu.g.aas.no>
- Branch: perl
- ! pp_hot.c t/op/avhv.t
-____________________________________________________________________________
-[ 1357] By: gsar on 1998/07/07 21:29:46
- Log: doc tweaks suggested by Abigail, M.J.T. Guy, and Larry Wall
- Branch: perl
- ! lib/Math/Trig.pm lib/fields.pm thread.sym
-____________________________________________________________________________
-[ 1356] By: TimBunce on 1998/07/07 17:19:42
- Log: Assorted patches:
-
- ------ BUILD PROCESS ------
-
- Title: "Add Test.pm (from perl 5.004_70)"
- Files: MANIFEST lib/Test.pm
-
- ------ EXTENSIONS ------
-
- Title: "Add CR LF CRLF to Socket.pm"
- From: Chris Nandor <pudge@pobox.com>
- Msg-ID: <v04003a46b1b6067832a1@[24.48.28.52]>
- Files: ext/Socket/Socket.pm
-
- ------ LIBRARY ------
-
- Title: "AutoSplit upgrade (AutoSplit 1.0302 from 5.004_70)"
- Files: lib/AutoSplit.pm
-
- Title: "Upgrade base.pm (from perl 5.004_70)"
- Files: lib/base.pm
-
- Title: "Add File::Spec modules (from 5.004_70)"
- Files: lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm
- lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
- lib/File/Spec/Win32.pm
-
- ------ TESTS ------
-
- Title: "fixup test for method call on undefined value"
- Files: t/op/misc.t
-
- ------ UTILITIES ------
-
- Title: "perlbug upgrade (from 5.004_70)"
- Files: utils/perlbug.PL
-
- Title: "Upgrade perldoc (from 5.004_70)"
- Files: utils/perldoc.PL
- Branch: maint-5.004/perl
- + lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm
- + lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
- + lib/File/Spec/Win32.pm lib/Test.pm
- ! MANIFEST ext/Socket/Socket.pm lib/AutoSplit.pm lib/base.pm
- ! t/op/misc.t utils/perlbug.PL utils/perldoc.PL
-____________________________________________________________________________
-[ 1355] By: TimBunce on 1998/07/07 14:39:51
- Log: Title: "Fix memory leak in Safe module"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199806290544.BAA18463@aatma.engin.umich.edu>
- Files: ext/Opcode/Opcode.xs ext/Opcode/Safe.pm
- Branch: maint-5.004/perl
- ! ext/Opcode/Opcode.xs ext/Opcode/Safe.pm
-____________________________________________________________________________
-[ 1354] By: TimBunce on 1998/07/07 14:35:25
- Log: Title: "Better error message for $undef->method call"
- From: Tim Bunce <Tim.Bunce@ig.co.uk>, Graham Barr <gbarr@ti.com>,
- joshua.pritikin@db.com
- Msg-ID: <19980615171027.U4120@asic.sc.ti.com>, <H00000e500073a20@MHS>
- Files: pod/perldiag.pod pp_hot.c
- Branch: maint-5.004/perl
- ! pod/perldiag.pod pp_hot.c
-____________________________________________________________________________
-[ 1353] By: gsar on 1998/07/06 23:33:38
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 6 Jul 1998 16:59:06 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980706165659.21068B-100000@newton.phys>
- Subject: [PATCH 5.004_70] Update metaconfig info
- Branch: perl
- ! Porting/pumpkin.pod
-____________________________________________________________________________
-[ 1352] By: gsar on 1998/07/06 23:30:54
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 6 Jul 1998 13:14:37 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980706130959.20719A-100000@newton.phys>
- Subject: [PATCH 5.004_70] Config_70-01: Remove default "/share"
- Branch: perl
- ! Configure INSTALL Policy_sh.SH Porting/Glossary
- ! Porting/config.sh Porting/config_H
-____________________________________________________________________________
-[ 1351] By: gsar on 1998/07/06 23:24:47
- Log: try harder to run non-executable tests
- Branch: perl
- ! t/TEST
-____________________________________________________________________________
-[ 1350] By: gsar on 1998/07/06 23:12:17
- Log: add patch to improve method caching, regen headers
- From: joshua.pritikin@db.com
- Date: Mon, 6 Jul 1998 09:19:29 -0400
- Message-Id: <H00000e50008a518@MHS>
- Subject: [PATCH _70] cache missing methods
- Branch: perl
- ! embedvar.h gv.c interp.sym intrpvar.h perlvars.h
-____________________________________________________________________________
-[ 1349] By: TimBunce on 1998/07/06 23:03:16
- Log: Assorted patches:
-
- ------ BUILD PROCESS ------
-
- Title: "Configure: Workaround bash CDPATH oddity"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980608121159.13706C-100000@newton.phys>
- Files: Configure
-
- Title: "Don't suppress display of Makefile recipes that invoke perl"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199806252213.SAA08545@aatma.engin.umich.edu>
- Files: Makefile.SH
-
- ------ CORE LANGUAGE ------
-
- Title: "one more^Wless quad unpack bug"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199806301132.OAA27353@alpha.hut.fi>
- Files: pp.c
-
- Title: "minor fixups to bring maint closer to devel for patching"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805200046.UAA19284@aatma.engin.umich.edu>
- Files: pod/perldiag.pod deb.c dump.c t/op/ref.t t/op/split.t taint.c util.c
-
- Title: "-Pw switches used together report bogus error"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199806252331.TAA10160@aatma.engin.umich.edu>
- Files: perl.c
-
- Title: "Add doc and perl home page info to -v output"
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- Msg-ID: <199802172229.PAA29309@jhereg.perl.com>
- Files: perl.c
-
- Title: "Fix C<@a = (%a = 1)> bizarreness"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Tom Christiansen
- <tchrist@jhereg.perl.com>
- Msg-ID: <199807012026.OAA31507@jhereg.perl.com>,
- <199807012339.TAA26024@aatma.engin.umich.edu>
- Files: pp_hot.c
-
- Title: "make find_script() return saved string, reenable missing
- diagnostics"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199806262224.SAA00422@aatma.engin.umich.edu>
- Files: perl.c util.c
-
- Title: "minor e_script optimization"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807060704.DAA25988@aatma.engin.umich.edu>
- Files: perl.c
-
- ------ DOCUMENTATION ------
-
- Title: "Insecure $ENV{} message out of step with perldiag"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yooQA-0003za-00@taurus.cus.cam.ac.uk>
- Files: pod/perldiag.pod pod/perlsec.pod
-
- Title: "documenting close without arguments"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980623084413.24075V-100000@user2.teleport.com>
- Files: pod/perlfunc.pod
-
- Title: "pod for scalar .. op"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yqyN8-0006gv-00@taurus.cus.cam.ac.uk>
- Files: pod/perlop.pod
-
- ------ EXTENSIONS ------
-
- Title: "Fcntl: add few constants, enhance maintainability"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199806221558.SAA18626@alpha.hut.fi>
- Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
-
- ------ LIBRARY ------
-
- Title: "Fix undef warnings in Text::Parsewords"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199806300842.LAA26409@alpha.hut.fi>
- Files: lib/Text/ParseWords.pm
-
- Title: "Add Symbol::delete_package()"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807060702.DAA25976@aatma.engin.umich.edu>
- Files: pod/perlembed.pod lib/Symbol.pm
- Branch: maint-5.004/perl
- ! Configure Makefile.SH deb.c dump.c ext/Fcntl/Fcntl.pm
- ! ext/Fcntl/Fcntl.xs lib/Symbol.pm lib/Text/ParseWords.pm perl.c
- ! pod/perldiag.pod pod/perlembed.pod pod/perlfunc.pod
- ! pod/perlop.pod pod/perlsec.pod pp.c pp_hot.c t/op/ref.t
- ! t/op/split.t taint.c util.c
-____________________________________________________________________________
-[ 1348] By: gsar on 1998/07/06 22:55:56
- Log: remove #! line from Errno_pm.PL
- Branch: perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 1347] By: gsar on 1998/07/06 22:51:34
- Log: added patch to fix Cwd.pm warnings, fixed a couple more places
- From: Gisle Aas <gisle@aas.no>
- Date: 06 Jul 1998 13:08:53 +0200
- Message-ID: <m3af6nfd8a.fsf@furu.g.aas.no>
- Subject: [PATCH] 5.004_70 Cwd.pm now give warnings
- Branch: perl
- ! lib/Cwd.pm
-____________________________________________________________________________
-[ 1346] By: gsar on 1998/07/06 22:20:29
- Log: much simpler fix to typecheck read/sysread/recv, as suggested by
- Stephen McCamant
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 1345] By: gsar on 1998/07/06 21:58:52
- Log: undo ck_sysread() changes#1319,1337 in preparation for a much
- simpler fix
- Branch: perl
- ! ObjXSub.h embed.h global.sym globals.c objpp.h op.c opcode.h
- ! opcode.pl proto.h
-____________________________________________________________________________
-[ 1344] By: TimBunce on 1998/07/06 21:51:05
- Log: Title: "Fix for broken goto &xsub"
- From: Albert Dvornik <bert@genscan.com>,
- Msg-ID: <tq4sxawf2h.fsf@puma.genscan.com>
- Files: MANIFEST pp_ctl.c t/op/goto_xs.t
- Branch: maint-5.004/perl
- + t/op/goto_xs.t
- ! MANIFEST pp_ctl.c
-____________________________________________________________________________
-[ 1343] By: TimBunce on 1998/07/06 21:40:14
- Log: Title: "Undo sub stub optimization and add comments on GV_FOO constants"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199807050841.EAA25114@aatma.engin.umich.edu>
- Files: gv.h gv.c op.c toke.c
- Branch: maint-5.004/perl
- ! gv.c gv.h op.c toke.c
-____________________________________________________________________________
-[ 1342] By: gsar on 1998/07/06 20:57:06
- Log: From: Gisle Aas <gisle@aas.no>
- Message-Id: <m3zpem4v0z.fsf@furu.g.aas.no>
- Date: 06 Jul 1998 21:52:12 +0200
- Subject: Keepers of the Patch Pumpkin
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 1341] By: gsar on 1998/07/06 20:43:35
- Log: remove dup entry in perldiag
- Branch: perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 1340] By: gsar on 1998/07/06 20:31:44
- Log: more reasonable diagnostic on keyword vs. sub ambiguity
- Branch: perl
- ! pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 1339] By: gsar on 1998/07/06 19:23:06
- Log: rename s/\bSI_/PERLSI_/ to avoid collisions with sysinfo headers
- Branch: perl
- ! av.c cop.h gv.c mg.c op.c perl.c pp_ctl.c pp_sys.c scope.c
- ! sv.c toke.c util.c
-____________________________________________________________________________
-[ 1338] By: gsar on 1998/07/06 18:45:35
- Log: per Larry suggestion, toss change#1327 and fix the documentation
- to match behavior instead
- Branch: perl
- ! pod/perlfunc.pod pp_sys.c
-____________________________________________________________________________
-[ 1337] By: gsar on 1998/07/06 17:15:26
- Log: allow read(FH,threadsv,...)
- Branch: perl
- ! op.c
-
-----------------
-Version 5.004_70
-----------------
-
-____________________________________________________________________________
-[ 1336] By: gsar on 1998/07/06 09:06:33
- Log: 5.004_70 tweaks
- Branch: perl
- ! Changes win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1335] By: gsar on 1998/07/06 07:05:37
- Log: update Changes
- Branch: perl
- ! Changes pod/perldiag.pod
-____________________________________________________________________________
-[ 1334] By: gsar on 1998/07/06 06:41:17
- Log: allow eval-groups in patterns only if they C<use re 'eval';>
- Branch: perl
- ! lib/re.pm perl.h pod/perldiag.pod pod/perlre.pod regcomp.c
- ! t/op/misc.t t/op/pat.t t/op/regexp.t t/op/subst.t
-____________________________________________________________________________
-[ 1333] By: gsar on 1998/07/06 03:22:52
- Log: From: Hans Mulder <hansm@icgroup.nl>
- Date: Mon, 6 Jul 98 02:11:32 +0200
- Message-Id: <9807060021.AA29027@icgned.icgroup.nl>
- Subject: [PATCH 5.00469] corrupt malloc ptr on NeXT
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 1332] By: gsar on 1998/07/06 03:18:34
- Log: added Errno-1.09 from CPAN
- Branch: perl
- ! ext/Errno/ChangeLog ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 1331] By: gsar on 1998/07/06 02:59:09
- Log: fix small memleak on -e, don't try to find_script() when e_script
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 1330] By: gsar on 1998/07/06 00:40:24
- Log: add Symbol::delete_package()
- Branch: perl
- ! lib/Symbol.pm pod/perlembed.pod
-____________________________________________________________________________
-[ 1329] By: gsar on 1998/07/05 23:05:40
- Log: patch to remove assumptions about offset of IV being == sizeof(XPV)
- From: Stephen McCamant <alias@mcs.com>
- Date: Sun, 5 Jul 1998 17:36:14 -0500 (CDT)
- Message-ID: <13727.63831.95324.696098@alias-2.pr.mcs.net>
- Subject: [PATCH] alignment in X[IN]V allocation
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1328] By: gsar on 1998/07/05 22:47:57
- Log: make read() return undef on errors as documented, and clarify docs
- Branch: perl
- ! pod/perlfunc.pod pp_sys.c
-____________________________________________________________________________
-[ 1327] By: gsar on 1998/07/05 22:11:21
- Log: fix getc() to return empty string instead of undef on eof, as it was
- documented to behave; still returns undef on error
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1326] By: gsar on 1998/07/05 21:53:30
- Log: patch whitespace-mutiliated; applied manually
- From: Hans Mulder <hansm@icgroup.nl>
- Date: Sun, 5 Jul 98 23:23:20 +0200
- Message-Id: <9807052133.AA28626@icgned.icgroup.nl>
- Subject: [PATCH 5.004_69] building Errno.pm still fails on NeXT
- Branch: perl
- ! ext/Errno/Errno_pm.PL
-____________________________________________________________________________
-[ 1325] By: gsar on 1998/07/05 21:38:39
- Log: applied patch (via private mail), modulo retrohunks in pod/perlfaq2.pod
- From: Tom Christiansen <tchrist@jhereg.perl.com>
- Date: Sun, 05 Jul 1998 09:15:22 -0500
- Subject: Re: docpatch
- Message-Id: <199807051515.JAA03644@jhereg.perl.com>
- Branch: perl
- ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod pod/perlfunc.pod pod/perlipc.pod
- ! pod/perlrun.pod
-____________________________________________________________________________
-[ 1324] By: gsar on 1998/07/05 21:06:56
- Log: applied patch, and undid change#1302 which it made unnecessary
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Date: Sun, 5 Jul 1998 23:05:52 +0930 (CST)
- Subject: [PATCH] utils/h2ph.PL and t/lib/h2ph.t
- Message-ID: <Pine.SV4.3.93.980705230337.27658A-100000@xenon.teaching.cs.adelaide.edu.au>
- Branch: perl
- ! t/lib/h2ph.t utils/h2ph.PL
-____________________________________________________________________________
-[ 1323] By: gsar on 1998/07/05 20:56:39
- Log: fix t/lib/fields.t's @INC so make test runs
- Branch: perl
- ! t/lib/fields.t
-____________________________________________________________________________
-[ 1322] By: gsar on 1998/07/05 20:26:43
- Log: add comments on GV_FOO constants, s/8/GV_ADDINEVAL/
- Branch: perl
- ! gv.c gv.h toke.c
-____________________________________________________________________________
-[ 1321] By: gsar on 1998/07/05 07:41:50
- Log: sundry win32 config tweaks
- Branch: perl
- ! Todo.5.005 t/op/stat.t win32/Makefile win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/config_h.PL
- ! win32/config_sh.PL win32/makefile.mk
-____________________________________________________________________________
-[ 1320] By: gsar on 1998/07/05 06:30:35
- Log: update Changes
- Branch: perl
- ! Changes
-____________________________________________________________________________
-[ 1319] By: gsar on 1998/07/05 06:27:37
- Log: add ck_sysread() for better sysread/read/recv sanity
- Branch: perl
- ! ObjXSub.h embed.h global.sym globals.c objpp.h op.c opcode.h
- ! opcode.pl proto.h
-____________________________________________________________________________
-[ 1318] By: gsar on 1998/07/05 04:34:05
- Log: From: Stephen McCamant <alias@mcs.com>
- Date: Sat, 4 Jul 1998 23:24:47 -0500 (CDT)
- Subject: [PATCH] Document B::Deparse, add pp_threadsv
- Message-ID: <13726.65230.19324.216849@alias-2.pr.mcs.net>
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 1317] By: gsar on 1998/07/05 04:15:25
- Log: added patch with tweak to doc
- From: Chip Salzenberg <chip@perl.org>
- Message-ID: <19980704205136.A16319@perlsupport.com>
- Date: Sat, 4 Jul 1998 20:51:36 -0400
- Subject: [PATCH _69] Take 2: Warn on C<sub log; log($msg)>
- Branch: perl
- ! ext/IO/lib/IO/Handle.pm pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 1316] By: gsar on 1998/07/05 03:56:22
- Log: Porting/Glossary goes podly into Config.pm
- Branch: perl
- ! Porting/Glossary configpm
-____________________________________________________________________________
-[ 1315] By: gsar on 1998/07/05 02:50:18
- Log: add suggested tool as an example in ExtUtils::Packlist
- From: Alan Burlison <Alan.Burlison@UK.Sun.com>
- Message-Id: <199807031028.LAA10456@sale-wts>
- Date: Fri, 3 Jul 1998 11:28:03 +0100 (BST)
- Subject: Re: [make install] another horror story
- Branch: perl
- ! lib/ExtUtils/Installed.pm lib/ExtUtils/Packlist.pm
-____________________________________________________________________________
-[ 1314] By: gsar on 1998/07/05 02:28:04
- Log: avoid race condition (storing ptr to SV before incrementing its
- REFCNT) and warning in newRV()
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1313] By: gsar on 1998/07/05 02:06:40
- Log: applied suggested fix for xhv_array sizing, with portability tweaks
- From: Gisle Aas <gisle@aas.no>
- Subject: Re: [PATCH] Re: perl5.004_69 core dump
- Date: 04 Jul 1998 10:20:35 +0200
- Message-ID: <m3af6qowmk.fsf@furu.g.aas.no>
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 1312] By: gsar on 1998/07/05 01:36:45
- Log: From: Gisle Aas <gisle@aas.no>
- Subject: [PATCH] hv_max may be a few too many
- Date: 04 Jul 1998 09:28:46 +0200
- Message-ID: <m3d8bmoz0x.fsf@furu.g.aas.no>
- Branch: perl
- ! doop.c
-____________________________________________________________________________
-[ 1311] By: gsar on 1998/07/05 00:35:27
- Log: patchlevel up to 5.004_70, various tweaks
- * fix taint problems due to maintbranch regression
- * PERL_OBJECT now builds again
- * deal with C++ strong-typing problems in hv.c
- * fix mismatch in "reserved word" diagnostic
- Branch: perl
- ! av.c hv.c objpp.h patchlevel.h pp_ctl.c pp_hot.c proto.h
- ! regexec.c regexp.h toke.c win32/perlhost.h win32/win32.c
-____________________________________________________________________________
-[ 1310] By: TimBunce on 1998/07/04 11:35:25
- Log: Remove old RE //t flag from scan_subst().
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 1309] By: gsar on 1998/07/04 08:32:53
- Log: various small tweaks (still fails a few taint tests in {taint,locale}.t)
- Branch: perl
- ! Todo.5.005 lib/re.pm sv.c t/lib/fields.t
-____________________________________________________________________________
-[ 1307] By: gsar on 1998/07/04 07:00:14
- Log: fix C<local $tied{foo} = $tied{foo}>, add tests
- Branch: perl
- ! pp_hot.c t/op/local.t
-____________________________________________________________________________
-[ 1306] By: gsar on 1998/07/04 05:52:34
- Log: fixes for mortalization bug in xsubpp, other efficiency tweaks
- From: joshua.pritikin@db.com
- Date: Wed, 1 Jul 1998 10:09:43 -0400
- Message-Id: <H00000e500086fb3@MHS>
- Subject: [PATCH _69] sv_2mortal fix
- Branch: perl
- ! lib/ExtUtils/xsubpp perl.c pp.c pp_hot.c proto.h sv.c sv.h
-____________________________________________________________________________
-[ 1305] By: gsar on 1998/07/04 05:46:42
- Log: add patch preextend global string table, tweak for 512 entries
- From: Gisle Aas <gisle@aas.no>
- Date: 04 Jul 1998 01:04:08 +0200
- Subject: Re: [PATCH] Re: perl5.004_69 core dump
- Message-ID: <m3ra02v8nr.fsf@furu.g.aas.no>
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 1304] By: gsar on 1998/07/04 05:40:35
- Log: simplify xhv_array sizing
- From: Gisle Aas <gisle@aas.no>
- Date: 04 Jul 1998 00:49:42 +0200
- Subject: Re: [PATCH] Re: perl5.004_69 core dump
- Message-ID: <m3yauav9bt.fsf@furu.g.aas.no>
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 1303] By: gsar on 1998/07/04 05:37:29
- Log: make 4-arg win32_select() sleep more reasonably on false values
- From: Blair Zajac <blair@gps.caltech.edu>
- Message-Id: <199807020225.TAA18740@gobi.gps.caltech.edu>
- Date: Wed, 1 Jul 1998 19:25:56 -0700 (PDT)
- Subject: [PATCH 5.004_69] select dumps core on MSWin32-x86
- --
- Message-Id: <199807030107.SAA08595@gobi.gps.caltech.edu>
- Date: Thu, 2 Jul 1998 18:07:19 -0700 (PDT)
- Subject: [PATCH 5.004_69] select dumps core on MSWin32-x86
- Branch: perl
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 1302] By: gsar on 1998/07/04 05:32:50
- Log: adjust h2ph.t for dos-specific problem
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Message-ID: <19980703234525.C208@cdata.tvnet.hu>
- Date: Fri, 3 Jul 1998 23:45:25 +0200
- Subject: Re: [PATCH _68] t/lib/h2ph.t problem
- Branch: perl
- ! t/lib/h2ph.t
-____________________________________________________________________________
-[ 1301] By: gsar on 1998/07/04 05:31:04
- Log: fix CPAN.pm problem, OS2 tweaks
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199807030459.AAA00097@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_68] PAtch to CPAN first-time
- Date: Fri, 3 Jul 1998 00:59:35 -0400 (EDT)
- Branch: perl
- ! lib/CPAN/FirstTime.pm lib/ExtUtils/MM_OS2.pm
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1300] By: gsar on 1998/07/04 05:27:20
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199807030102.VAA26813@monk.mps.ohio-state.edu>
- Date: Thu, 2 Jul 1998 21:02:59 -0400 (EDT)
- Subject: [PATCH 5.004_68] Add elc target to to makefile
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1299] By: gsar on 1998/07/04 05:25:56
- Log: newer emacs/cperl-mode.el (via private mail)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199807030104.VAA26825@monk.mps.ohio-state.edu>
- Date: Thu, 2 Jul 1998 21:04:29 -0400 (EDT)
- Subject: [PATCH 5.004_68] cperl-mode
- Branch: perl
- ! emacs/cperl-mode.el
-____________________________________________________________________________
-[ 1298] By: gsar on 1998/07/04 05:22:41
- Log: From: Dominic Dunlop <domo@computer.org>
- Message-Id: <v03110701b1c1603eae52@[195.95.102.68]>
- Date: Thu, 2 Jul 1998 22:57:26 +0000
- Subject: [PATCH 5.004_69] Make Power MachTen use vfork and perl's malloc
- Branch: perl
- ! hints/machten.sh malloc.c
-____________________________________________________________________________
-[ 1297] By: gsar on 1998/07/04 05:20:52
- Log: allow a flags args to fbm_instr() for future needs
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199807020749.DAA12379@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_68] mORE FBM_ CHANGES FOR FUTURE
- Date: Thu, 2 Jul 1998 03:49:32 -0400 (EDT)
- Branch: perl
- ! pod/perlguts.pod pp.c pp_hot.c proto.h regexec.c util.c
-____________________________________________________________________________
-[ 1296] By: gsar on 1998/07/04 05:16:15
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Thu, 2 Jul 1998 11:50:41 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980702114956.18246B-100000@newton.phys>
- Subject: [PATCH 5.004_69] INSTALL-1.39
- Branch: perl
- ! INSTALL
-____________________________________________________________________________
-[ 1295] By: gsar on 1998/07/04 05:15:05
- Log: Configure update
- From: doughera@newton.phys.lafayette.edu (Andy Dougherty)
- Date: Wed, 1 Jul 98 23:07:50 EDT
- Message-Id: <9807020307.AA17848@newton.phys.lafayette.edu>
- Subject: [PATCH 5.004_69] Config_69-01
- Branch: perl
- ! Configure INSTALL MANIFEST Policy_sh.SH Porting/Glossary
- ! Porting/config.sh Porting/config_H Porting/pumpkin.pod
- ! config_h.SH win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1294] By: gsar on 1998/07/04 05:10:25
- Log: add perlbug -F switch to save message to file
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Message-Id: <l03130301b1c03a649e45@[194.222.64.89]>
- Date: Wed, 1 Jul 1998 21:14:22 +0200
- Subject: Re: [PATCH 5.004_69] perlbug -fok
- Branch: perl
- ! Makefile.SH utils/perlbug.PL
-____________________________________________________________________________
-[ 1293] By: gsar on 1998/07/04 05:06:52
- Log: catch nonexistent backrefs in REs
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Message-Id: <l03130304b1c027e1df9e@[194.222.64.89]>
- Date: Wed, 1 Jul 1998 20:14:05 +0200
- Subject: Re: [PATCH _66] for bad backrefs
- --
- Message-Id: <l03130300b1c03425261c@[194.222.64.89]>
- Date: Wed, 1 Jul 1998 20:47:16 +0200
- Subject: Re: [PATCH _66] for bad backrefs
- Branch: perl
- ! regcomp.c t/op/re_tests util.c
-____________________________________________________________________________
-[ 1292] By: gsar on 1998/07/04 05:02:01
- Log: fix perlcc to not rm output file, and other -w(arts)
- Branch: perl
- ! utils/perlcc.PL
-____________________________________________________________________________
-[ 1291] By: gsar on 1998/07/04 04:30:03
- Log: ignore stash entries that are not GVs in dump.c
- Branch: perl
- ! dump.c
-____________________________________________________________________________
-[ 1290] By: gsar on 1998/07/04 03:55:10
- Log: cleaner page headers from pod2man
- Branch: perl
- ! pod/pod2man.PL
-____________________________________________________________________________
-[ 1288] By: gsar on 1998/07/04 03:16:39
- Log: tweaks to Getopt::Std
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Tue, 30 Jun 98 14:45:49 BST
- Message-Id: <14103.9806301345@tempest.cise.npl.co.uk>
- Subject: [PATCH perl5.004_69] lib/Getopt/Std.pm
- --
- Message-Id: <17918.9807021053@tempest.cise.npl.co.uk>
- To: perl5-porters@perl.org
- Subject: [PATCH perl5.004_69] second: lib/Getopt/Std.pm
- Branch: perl
- ! lib/Getopt/Std.pm
-____________________________________________________________________________
-[ 1287] By: gsar on 1998/07/04 03:13:02
- Log: added patch, with tweaks
- From: Gisle Aas <gisle@aas.no>
- Date: 03 Jul 1998 00:50:15 +0200
- Message-ID: <m3btr7n9zs.fsf@furu.g.aas.no>
- Subject: [PATCH] Some AVHV documentation
- Branch: perl
- ! pod/perlref.pod
-____________________________________________________________________________
-[ 1286] By: gsar on 1998/07/04 02:53:26
- Log: applied patch with tweaks to prose
- From: Gisle Aas <gisle@aas.no>
- Subject: [PATCH] Simplified AVHV support
- Date: 30 Jun 1998 13:34:07 +0200
- Message-ID: <m3k95z86og.fsf@furu.g.aas.no>
- Branch: perl
- ! ObjXSub.h av.c embed.h global.sym objpp.h pod/perldiag.pod
- ! pp.c proto.h t/op/avhv.t
-____________________________________________________________________________
-[ 1285] By: gsar on 1998/07/04 02:30:48
- Log: tweak doc for ".."
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Subject: [PATCH] pod for scalar ..
- Message-Id: <E0yqyN8-0006gv-00@taurus.cus.cam.ac.uk>
- Date: Tue, 30 Jun 1998 12:14:50 +0100
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 1284] By: gsar on 1998/07/04 02:28:43
- Log: fix use of uninitialized var in pp_unpack()
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 30 Jun 1998 14:32:17 +0300 (EET DST)
- Message-Id: <199806301132.OAA27353@alpha.hut.fi>
- Subject: [PATCH] 5.004_69 (also for 5.004_04) one more^Wless quad bug
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 1283] By: gsar on 1998/07/04 02:26:37
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Tue, 30 Jun 1998 11:40:22 +0300 (EET DST)
- Message-Id: <199806300840.LAA04872@alpha.hut.fi>
- Subject: [PATCH] 5.004_69: Parsewords.pm: avoid undefined warnings
- Branch: perl
- ! lib/Text/ParseWords.pm
-____________________________________________________________________________
-[ 1282] By: gsar on 1998/07/04 02:24:32
- Log: VMS updates from Dan Sugalski <sugalskd@osshe.edu>
- Message-Id: <3.0.5.32.19980629165356.00a20730@ous.edu>
- Date: Mon, 29 Jun 1998 16:53:56 -0700
- Subject: [PATCH 5.004_69]README.vms doc patch
- --
- Message-Id: <3.0.5.32.19980629165125.00a4e100@ous.edu>
- Date: Mon, 29 Jun 1998 16:51:25 -0700
- --
- Message-Id: <3.0.5.32.19980702135357.00a5eb40@ous.edu>
- Date: Thu, 02 Jul 1998 13:53:57 -0700
- Subject: [PATCH 5.004_69]VMS filetest operator fixup
- Branch: perl
- ! README.vms vms/descrip_mms.template vms/vms.c
-____________________________________________________________________________
-[ 1281] By: gsar on 1998/07/04 02:17:48
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Message-Id: <3.0.5.32.19980629164625.00a4d7c0@ous.edu>
- Date: Mon, 29 Jun 1998 16:46:25 -0700
- Subject: [PATCH 5.004_69]Tweaks to VMS configuration procedure
- Branch: perl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 1280] By: gsar on 1998/07/04 02:16:03
- Log: don't attempt to copy directories on VMS
- From: Dan Sugalski <sugalskd@osshe.edu>
- Message-Id: <3.0.5.32.19980629163129.00a82140@ous.edu>
- Date: Mon, 29 Jun 1998 16:31:29 -0700
- Subject: [PATCH 5.004_69]Tweak to installperl
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 1279] By: gsar on 1998/07/04 02:09:26
- Log: add 'installhtml*dir' to win32 config templates
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Subject: [PATCH 5.004_68] For Win32 config
- Date: Mon, 29 Jun 1998 09:00:13 -0700
- Message-ID: <000a01bda376$ffe8b0b0$a32fa8c0@tau.Active>
- Branch: perl
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1278] By: gsar on 1998/07/04 02:06:23
- Log: implemented described fix for h2ph hanging on "enum"
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Subject: Re: h2ph problem on Solaris 2.6/SPARC/Sun compiler
- Message-ID: <Pine.SV4.3.93.980627010407.21715A-100000@xenon.teaching.cs.adelaide.edu.au>
- Date: Sat, 27 Jun 1998 01:13:12 +0930 (CST)
- Branch: perl
- ! utils/h2ph.PL
-____________________________________________________________________________
-[ 1277] By: gsar on 1998/07/04 01:51:47
- Log: merge changes#1210,1211,1270 from maintbranch
- Branch: perl
- + lib/re.pm
- ! MANIFEST dump.c installperl lib/File/Basename.pm mg.c op.c
- ! op.h perl.h pod/perlmodlib.pod pod/perlop.pod pp_ctl.c
- ! pp_hot.c t/lib/basename.t t/op/taint.t toke.c
-____________________________________________________________________________
-[ 1276] By: gsar on 1998/07/04 00:33:37
- Log: deprecate use of reserved word "our" (Larry's idea)
- Date: Mon, 22 Jun 1998 08:55:09 -0700
- From: larry@wall.org (Larry Wall)
- Message-Id: <199806221555.IAA07212@wall.org>
- Subject: Re: our
- Branch: perl
- ! pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 1275] By: nick on 1998/07/02 18:36:59
- Log: Integrate mainline, just to keep up.
- Branch: ansiperl
- +> t/lib/fields.t
- - lib/Math/Trig/Radial.pm
- !> MANIFEST lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
- !> lib/Math/Trig.pm lib/base.pm lib/fields.pm mg.c
- !> pod/perldiag.pod pod/perltrap.pod pp_hot.c scope.c scope.h
- !> t/lib/trig.t t/op/array.t toke.c utils/perldoc.PL
- !> win32/config.bc win32/config.gc win32/config.vc
- !> win32/include/dirent.h win32/makedef.pl win32/win32.c
- !> win32/win32iop.h
-____________________________________________________________________________
-[ 1274] By: gsar on 1998/07/02 16:47:20
- Log: tweak win32/config.* variables
- Branch: perl
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1273] By: gsar on 1998/07/02 16:33:53
- Log: export opendir() set of functions on win32
- Branch: perl
- ! win32/include/dirent.h win32/makedef.pl win32/win32.c
- ! win32/win32iop.h
-____________________________________________________________________________
-[ 1272] By: gsar on 1998/07/01 23:21:49
- Log: fix C<@a = (%a = 1)> bizarreness
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 1271] By: gsar on 1998/06/30 22:49:39
- Log: document perltrap on precedence of keys/values/each
- Branch: perl
- ! pod/perltrap.pod
-____________________________________________________________________________
-[ 1270] By: TimBunce on 1998/06/30 09:06:21
- Log: Added lib/re.pm missing from change 1210
- Branch: maint-5.004/perl
- + lib/re.pm
-____________________________________________________________________________
-[ 1269] By: gsar on 1998/06/30 08:20:52
- Log: From: Murray Nesbitt <murray@ActiveState.com>
- Message-Id: <77180549BCE.AAA466A@mail.rdc1.bc.wave.home.com>
- Date: Mon, 29 Jun 1998 14:30:59 PDT
- Subject: Re: [PATCH 5.004_67] MakeMaker mods for PPD support
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1268] By: gsar on 1998/06/30 05:38:34
- Log: From: Robin Barker <rmb1@cise.npl.co.uk>
- Message-Id: <13254.9806291404@tempest.cise.npl.co.uk>
- Date: Mon, 29 Jun 1998 15:04:57 -0000
- Subject: [PATCH perl5.004_69] perldoc.PL
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1267] By: gsar on 1998/06/30 05:34:06
- Log: add patch to integrate Math::Trig::Radial into Math::Trig
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Mon, 29 Jun 1998 16:28:53 +0300 (EET DST)
- Message-Id: <199806291328.QAA16916@alpha.hut.fi>
- Subject: [PATCH] 5.004_68 (or 5.004_04): radial trig
- Branch: perl
- - lib/Math/Trig/Radial.pm
- ! MANIFEST lib/Math/Trig.pm t/lib/trig.t
-____________________________________________________________________________
-[ 1266] By: gsar on 1998/06/30 05:17:33
- Log: From: Gisle Aas <gisle@aas.no>
- Message-Id: <m367hk4hra.fsf@furu.g.aas.no>
- Date: 29 Jun 1998 12:36:09 +0200
- Subject: Re: [PATCH] Simplified magic_setisa() and improved fields.pm
- Branch: perl
- + t/lib/fields.t
- ! MANIFEST lib/base.pm lib/fields.pm mg.c pod/perldiag.pod
- ! t/op/array.t
-____________________________________________________________________________
-[ 1265] By: gsar on 1998/06/30 05:12:57
- Log: tweaks to overloaded constants (change#1259)
- Branch: perl
- ! scope.c scope.h toke.c
-____________________________________________________________________________
-[ 1264] By: nick on 1998/06/29 17:38:03
- Log: Integrate mainline c. _69 to ansiperl
- Branch: ansiperl
- +> eg/cgi/caution.xbm eg/cgi/dna.small.gif.uu
- +> eg/cgi/nph-multipart.cgi ext/Errno/ChangeLog
- +> ext/Errno/Errno_pm.PL ext/Errno/Makefile.PL lib/CGI/Cookie.pm
- +> lib/Math/Trig/Radial.pm perlio.h t/lib/cgi-form.t
- +> t/lib/cgi-function.t t/lib/cgi-html.t t/lib/cgi-request.t
- +> t/lib/errno.t t/op/goto_xs.t t/op/splice.t
- !> (integrate 100 files)
-
-----------------
-Version 5.004_69
-----------------
-
-____________________________________________________________________________
-[ 1263] By: gsar on 1998/06/29 09:17:28
- Log: update Changes and perlhist.pod
- Branch: perl
- ! Changes pod/perlhist.pod
-____________________________________________________________________________
-[ 1262] By: gsar on 1998/06/29 08:26:36
- Log: bump patchlevel to 69, various little tweaks (tested on win32, Solaris
- under several build configurations)
- Branch: perl
- ! Todo.5.005 op.c patchlevel.h t/lib/cgi-function.t
- ! t/lib/cgi-request.t toke.c win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1261] By: gsar on 1998/06/29 06:51:10
- Log: add missing SSCHECK() to rectify faulty SSPUSH*() logic in change#1259
- Branch: perl
- ! scope.h
-____________________________________________________________________________
-[ 1260] By: gsar on 1998/06/29 06:46:12
- Log: Message-Id: <199806290610.IAA19443@moulon.inra.fr>
- Date: Mon, 29 Jun 1998 08:10:46 +0200
- From: ts <decoux@moulon.inra.fr>
- Subject: {perlembed.pod] Re: Memory leak in Perl 5.004 and the fix
- Branch: perl
- ! pod/perlembed.pod
-____________________________________________________________________________
-[ 1259] By: gsar on 1998/06/29 06:01:35
- Log: added patch for overloading constants, made PERL_OBJECT-aware
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806270328.XAA21088@monk.mps.ohio-state.edu>
- Date: Fri, 26 Jun 1998 23:28:41 -0400 (EDT)
- Branch: perl
- ! ObjXSub.h embed.h embedvar.h global.sym hv.c interp.sym
- ! intrpvar.h lib/Math/BigInt.pm lib/overload.pm objpp.h op.c
- ! perl.c perl.h pp_ctl.c proto.h scope.c scope.h
- ! t/pragma/overload.t toke.c
-____________________________________________________________________________
-[ 1258] By: gsar on 1998/06/29 05:32:25
- Log: fix Socket.pm typo from change#1240
- Branch: perl
- ! ext/Socket/Socket.pm
-____________________________________________________________________________
-[ 1257] By: gsar on 1998/06/29 05:09:24
- Log: applied patch, tweak for threads awareness
- From: Albert Dvornik <bert@genscan.com>
- Subject: [PATCH]5.004_04-m4 (CORE) fix for broken "goto &xsub"
- Date: 24 Jun 1998 19:33:09 -0400
- Message-Id: <tq4sxawf2h.fsf@puma.genscan.com>
- Branch: perl
- + t/op/goto_xs.t
- ! MANIFEST pp_ctl.c
-____________________________________________________________________________
-[ 1256] By: gsar on 1998/06/29 03:34:18
- Log: applied patch, fixed one more leak, tweaked whitespace bugs
- From: Guy Decoux <decoux@moulon.inra.fr>
- (via)
- Date: Fri, 26 Jun 1998 09:59:32 -0400
- From: "Chunhui Teng" <cteng@nortel.ca>
- Message-Id: <199806261359.JAA02393@bmers357.nortel.ca>
- Subject: Memory leak in Perl 5.004 and the fix
- Branch: perl
- ! ext/Opcode/Opcode.xs ext/Opcode/Safe.pm
-____________________________________________________________________________
-[ 1255] By: gsar on 1998/06/29 02:50:37
- Log: From: koenig@kulturbox.de (Andreas J. Koenig)
- Subject: Permissions in MakeMaker (Was: patch to MM_Unix.pm)
- Date: 28 Jun 1998 23:47:07 +0200
- Message-ID: <sfc1zs9gpwk.fsf@dubravka.in-berlin.de>
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1254] By: gsar on 1998/06/28 21:35:02
- Log: From: joshua.pritikin@db.com
- Date: Fri, 26 Jun 1998 09:34:34 -0400
- Message-Id: <H00000e500081d23@MHS>
- Subject: [PATCH _68] PUSHSTACK renovation
- Branch: perl
- ! av.c cop.h gv.c mg.c perl.c pp_ctl.c pp_sys.c sv.c util.c
-____________________________________________________________________________
-[ 1253] By: gsar on 1998/06/28 21:21:22
- Log: From: Stephen McCamant <alias@mcs.com>
- Message-Id: <m0yq2fr-000EalC@alias-2.pr.mcs.net>
- Date: Sat, 27 Jun 1998 16:38:19 -0500 (CDT)
- Subject: IV changes for long long (was Re: 5.004_68 on its way to the CPAN)
- Branch: perl
- ! perlvars.h sv.c
-____________________________________________________________________________
-[ 1252] By: gsar on 1998/06/28 21:16:34
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806272359.TAA05436@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_68] Improve warning on zero-length chunks in RE
- Date: Sat, 27 Jun 1998 19:59:13 -0400 (EDT)
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 1251] By: gsar on 1998/06/28 21:14:32
- Log: add Math/Trig/Radial.pm, update MANIFEST
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Sat, 27 Jun 1998 17:28:14 +0300 (EET DST)
- Message-Id: <199806271428.RAA05307@alpha.hut.fi>
- Subject: Math::Trig::Radial ?
- Branch: perl
- + lib/Math/Trig/Radial.pm
- ! MANIFEST
-____________________________________________________________________________
-[ 1250] By: gsar on 1998/06/28 21:09:48
- Log: applied patch, tweaked doc, and regen regnodes.h
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806270655.CAA29144@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_68] \z in RE
- Date: Sat, 27 Jun 1998 02:55:26 -0400 (EDT)
- Branch: perl
- ! pod/perlre.pod regcomp.c regcomp.sym regexec.c regnodes.h
- ! t/op/re_tests t/op/regexp.t toke.c
-____________________________________________________________________________
-[ 1249] By: gsar on 1998/06/28 20:56:38
- Log: From: mike@bill.iac.net
- Message-ID: <19980627034913.A32220@bill.minivend.com>
- Date: Sat, 27 Jun 1998 03:49:13 +0000
- Subject: [ PATCH 5.004 68 ] Text::ParseWords, ^W fixed, version 3.1
- Branch: perl
- ! lib/Text/ParseWords.pm t/lib/parsewords.t
-____________________________________________________________________________
-[ 1248] By: gsar on 1998/06/28 20:54:43
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806270352.XAA21174@monk.mps.ohio-state.edu>
- Subject: [PATCH] Fix ptags
- Date: Fri, 26 Jun 1998 23:52:54 -0400 (EDT)
- Branch: perl
- ! emacs/ptags
-____________________________________________________________________________
-[ 1247] By: gsar on 1998/06/28 20:42:54
- Log: apply patch sent via private mail
- From: Stephen McCamant <alias@mcs.com>
- Message-Id: <m0ypkmt-000EalC@alias-2.pr.mcs.net>
- Date: Fri, 26 Jun 1998 21:32:23 -0500 (CDT)
- Subject: Re: Enhanced B::Deparse
- Branch: perl
- ! ext/B/B/Deparse.pm
-____________________________________________________________________________
-[ 1246] By: gsar on 1998/06/28 20:38:24
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806270109.VAA14907@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_68] pat.t tests
- Date: Fri, 26 Jun 1998 21:09:02 -0400 (EDT)
- Branch: perl
- ! t/op/pat.t
-____________________________________________________________________________
-[ 1245] By: gsar on 1998/06/28 20:36:08
- Log: From: joshua.pritikin@db.com
- Date: Fri, 26 Jun 1998 10:02:32 -0400
- Message-Id: <H00000e500081d28@MHS>
- Subject: [PATCH _68] improve recursive error messages!
- Branch: perl
- ! gv.c pod/perldiag.pod universal.c
-____________________________________________________________________________
-[ 1244] By: gsar on 1998/06/28 20:09:02
- Log: From: Dominic Dunlop <domo@vo.lu>
- Message-Id: <v03110701b1b83a06733a@[195.95.102.101]>
- Date: Thu, 25 Jun 1998 17:46:55 +0000
- Subject: [PATCH 5.004_68]: Move REG_INFTY-dependent tests from op/regexp.t
- to op/pat.t; add tests for a few more regexp parse failures etc.
- Branch: perl
- ! t/op/pat.t t/op/re_tests t/op/regexp.t
-____________________________________________________________________________
-[ 1243] By: gsar on 1998/06/28 20:06:30
- Log: specify *.sym files needed in perl_exp.SH instead of picking up all
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Thu, 25 Jun 1998 10:36:21 -0400 (EDT)
- Subject: Re: Not OK: perl 5.00468 on aix-thread 4.1.4.0
- Message-Id: <Pine.SUN.3.96.980625102459.11241F-100000@newton.phys>
- Branch: perl
- ! perl_exp.SH
-____________________________________________________________________________
-[ 1242] By: gsar on 1998/06/28 20:01:28
- Log:
- From: Gisle Aas <gisle@aas.no>
- Subject: Re: [PATCH] 4-arg substr update for perl5.004_68
- Date: 25 Jun 1998 10:32:43 +0200
- Message-ID: <m3iulpubis.fsf@furu.g.aas.no>
- Branch: perl
- ! op.c pod/perlfunc.pod pp.c t/op/substr.t
-____________________________________________________________________________
-[ 1241] By: gsar on 1998/06/28 19:55:11
- Log: applied patch, tweaked opcode.pl for PERL_OBJECT, and regen opcode.h
- From: Stephen McCamant <alias@mcs.com>
- Message-Id: <m0yp1Ue-000EP2C@alias-2.pr.mcs.net>
- Date: Wed, 24 Jun 1998 21:10:32 -0500 (CDT)
- Subject: [PATCH REPOST] refgen in opcode.pl
- Branch: perl
- ! opcode.h opcode.pl
-____________________________________________________________________________
-[ 1240] By: gsar on 1998/06/28 19:46:29
- Log: From: Chris Nandor <pudge@pobox.com>
- Message-Id: <v04011709b1b742cd7f0c@[24.48.29.192]>
- Date: Wed, 24 Jun 1998 19:58:28 -0400
- Subject: [PATCH 3d try] Add CR LF CRLF to Socket.pm
- Branch: perl
- ! ext/Socket/Socket.pm
-____________________________________________________________________________
-[ 1239] By: gsar on 1998/06/28 19:44:19
- Log: From: Gisle Aas <gisle@aas.no>
- Subject: [PATCH] Optimize foreach (1..1000000)
- Date: 24 Jun 1998 20:26:48 +0200
- Message-ID: <m3lnqmwt93.fsf@furu.g.aas.no>
- Branch: perl
- ! Todo cop.h op.c pod/perldiag.pod pod/perlop.pod pp_ctl.c
- ! pp_hot.c t/op/range.t
-____________________________________________________________________________
-[ 1238] By: gsar on 1998/06/28 19:28:13
- Log: avoid creation of %^R
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806241825.OAA06346@monk.mps.ohio-state.edu>
- Subject: Re: [5.004_68] What is %^R ? [PATCH?]
- Date: Wed, 24 Jun 1998 14:25:06 -0400 (EDT)
- Branch: perl
- ! perl.c t/op/splice.t
-____________________________________________________________________________
-[ 1237] By: gsar on 1998/06/28 19:23:40
- Log: From: Gisle Aas <gisle@aas.no>
- Subject: [PATCH] Negative LENGTH argument to splice
- Date: 24 Jun 1998 15:11:35 +0200
- Message-ID: <m3g1gvc5bs.fsf@furu.g.aas.no>
- Branch: perl
- + t/op/splice.t
- ! MANIFEST pod/perlfunc.pod pp.c
-____________________________________________________________________________
-[ 1236] By: gsar on 1998/06/28 19:18:29
- Log: From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Subject: [PATCH] Insecure $ENV{} message out of step with perldiag
- Message-Id: <E0yooQA-0003za-00@taurus.cus.cam.ac.uk>
- Date: Wed, 24 Jun 1998 13:13:02 +0100
- Branch: perl
- ! pod/perldiag.pod pod/perlsec.pod
-____________________________________________________________________________
-[ 1235] By: gsar on 1998/06/28 19:16:13
- Log: Complex.pm update
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Wed, 24 Jun 1998 15:19:05 +0300 (EET DST)
- Message-Id: <199806241219.PAA04061@alpha.hut.fi>
- Subject: [PATCH] 5.004_68: Complex.pm, complex.t
- Branch: perl
- ! lib/Math/Complex.pm t/lib/complex.t
-____________________________________________________________________________
-[ 1234] By: gsar on 1998/06/28 19:13:05
- Log: disable perl malloc on UNICOS for now
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Wed, 24 Jun 1998 12:37:14 +0300 (EET DST)
- Message-Id: <199806240937.MAA01669@alpha.hut.fi>
- Subject: [PATCH] 5.004_68: UNICOS hints
- Branch: perl
- ! hints/unicos.sh
-____________________________________________________________________________
-[ 1233] By: gsar on 1998/06/28 19:10:53
- Log: fixes unpack("q"...), and semctl() tests for UNICOS
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Date: Wed, 24 Jun 1998 11:55:09 +0300 (EET DST)
- Message-Id: <199806240855.LAA16152@alpha.hut.fi>
- Subject: [PATCH] 5.004_68: semctl() in UNICOS (was: pack/unpack)
- Branch: perl
- ! pp.c t/op/ipcsem.t t/op/pack.t
-____________________________________________________________________________
-[ 1232] By: gsar on 1998/06/28 19:01:23
- Log: tweak various places for iperlsys.h awareness
- Branch: perl
- ! MANIFEST Makefile.SH lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MM_VMS.pm pod/perlapio.pod
-____________________________________________________________________________
-[ 1231] By: gsar on 1998/06/28 18:37:07
- Log: add a perlio.h stub for compat (some extensions seem to #include it)
- Branch: perl
- + perlio.h
-____________________________________________________________________________
-[ 1230] By: gsar on 1998/06/28 18:35:23
- Log: Message-ID: <19980624003701.C161@cdata.tvnet.hu>
- Date: Wed, 24 Jun 1998 00:37:01 +0200
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Subject: Re: [PATCH for _66] Makefile.SH problem on dos/djgpp
- Branch: perl
- ! pod/pod2text.PL
-____________________________________________________________________________
-[ 1229] By: gsar on 1998/06/28 18:33:42
- Log: hand apply mutiliated patch
- Message-Id: <3.0.5.32.19980623114100.00ab76e0@ous.edu>
- Date: Tue, 23 Jun 1998 11:41:00 -0700
- From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: [PATCH 5.004_68]Configure update for VMS
- Branch: perl
- ! configure.com vms/descrip_mms.template vms/subconfigure.com
-____________________________________________________________________________
-[ 1228] By: gsar on 1998/06/28 17:17:35
- Log: hand apply whitespace mutiliated patch
- Date: Tue, 23 Jun 98 16:38:06 BST
- Message-Id: <5389.9806231538@tempest.cise.npl.co.uk>
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Subject: PATCH [perl5.004_68] perlbug.PL; was Re: Error message for Errno_pm.PL
- Branch: perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 1227] By: gsar on 1998/06/28 17:14:34
- Log: Date: Tue, 23 Jun 1998 08:51:00 -0700 (PDT)
- From: Tom Phoenix <rootbeer@teleport.com>
- Subject: [PATCH] documenting close without arguments
- Message-ID: <Pine.GSO.3.96.980623084413.24075V-100000@user2.teleport.com>
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1226] By: gsar on 1998/06/28 17:12:56
- Log: Date: Tue, 23 Jun 1998 05:37:09 -0700 (PDT)
- From: Tom Phoenix <rootbeer@teleport.com>
- Subject: Better diags for vars.pm
- Message-ID: <Pine.GSO.3.96.980623052846.24075A-100000@user2.teleport.com>
- Branch: perl
- ! lib/vars.pm
-____________________________________________________________________________
-[ 1225] By: gsar on 1998/06/28 17:05:59
- Log: hand apply whitespace mutiliated perldoc.PL patches
- Date: Tue, 23 Jun 98 15:49:52 BST
- Message-Id: <5302.9806231449@tempest.cise.npl.co.uk>
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Subject: PATCH [5.004_68] perldoc.PL
- --
- Date: Fri, 26 Jun 98 17:50:05 BST
- Message-Id: <6834.9806261650@tempest.cise.npl.co.uk>
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Subject: [PATCH 5.004_68] perldoc.PL
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1224] By: gsar on 1998/06/28 16:50:59
- Log: integrate ansiperl to get makedef.pl tweak
- Branch: perl
- ! Porting/pumpkin.pod win32/makedef.pl
-____________________________________________________________________________
-[ 1223] By: gsar on 1998/06/28 16:33:32
- Log: add CGI-2.42, its and testsuite
- Branch: perl
- + eg/cgi/caution.xbm eg/cgi/dna.small.gif.uu
- + eg/cgi/nph-multipart.cgi lib/CGI/Cookie.pm t/lib/cgi-form.t
- + t/lib/cgi-function.t t/lib/cgi-html.t t/lib/cgi-request.t
- ! MANIFEST eg/cgi/RunMeFirst eg/cgi/file_upload.cgi
- ! eg/cgi/index.html eg/cgi/monty.cgi eg/cgi/save_state.cgi
- ! eg/cgi/wilogo.gif.uu lib/CGI.pm lib/CGI/Apache.pm
- ! lib/CGI/Carp.pm lib/CGI/Fast.pm lib/CGI/Push.pm
- ! lib/CGI/Switch.pm
-____________________________________________________________________________
-[ 1222] By: gsar on 1998/06/28 15:28:29
- Log: enable Errno build on win32, add Errno-1.08 files to repository
- Branch: perl
- + ext/Errno/ChangeLog ext/Errno/Errno_pm.PL
- + ext/Errno/Makefile.PL t/lib/errno.t
- ! MANIFEST win32/Makefile win32/config.bc win32/config.gc
- ! win32/config.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1221] By: gsar on 1998/06/28 14:34:06
- Log: tweak win32 config templates for cpp
- Branch: perl
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1220] By: nick on 1998/06/26 16:46:13
- Log: Integrate mainline
- Branch: ansiperl
- !> Changes Makefile.SH ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod
- !> ext/POSIX/POSIX.xs perl.c pod/perlre.pod pod/perlvar.pod sv.c
- !> util.c win32/win32.h
-____________________________________________________________________________
-[ 1219] By: gsar on 1998/06/26 04:33:57
- Log: make find_script() return saved string, reenable missing diagnostics
- Branch: perl
- ! perl.c util.c
-____________________________________________________________________________
-[ 1218] By: gsar on 1998/06/25 23:24:53
- Log: avoid warning with -P switch
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 1217] By: gsar on 1998/06/25 22:06:58
- Log: don't suppress display of Makefile recipes that invoke perl
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1216] By: gsar on 1998/06/25 21:32:06
- Log: tweak order of destruction so OBJECTs in GLOBs are visited after those
- in RVs
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1215] By: gsar on 1998/06/25 18:56:59
- Log: mknod() is not POSIX, so remove the POSIX pieces from change#1199
- Branch: perl
- ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
-____________________________________________________________________________
-[ 1214] By: gsar on 1998/06/25 18:11:22
- Log: add FILE_SHARE_DELETE ifndef in win32.h
- Branch: perl
- ! win32/win32.h
-____________________________________________________________________________
-[ 1213] By: nick on 1998/06/24 17:18:59
- Log: Correct perl malloc tweak to .def generation
- Branch: ansiperl
- ! win32/makedef.pl
-____________________________________________________________________________
-[ 1212] By: gsar on 1998/06/24 12:40:13
- Log: check in what change#1182 didn't, and Changes
- Branch: perl
- ! Changes pod/perlre.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 1211] By: TimBunce on 1998/06/23 23:09:37
- Log: Update test count in t/lib/basename.t (see change 1210)
- Branch: maint-5.004/perl
- ! t/lib/basename.t
-____________________________________________________________________________
-[ 1210] By: TimBunce on 1998/06/23 22:58:18
- Log: Title: "Add C<use re 'taint'> pragma to propagate tainting in m// and s///"
- From: Chip Salzenberg <chip@perl.org>, Gurusamy Sarathy
- <gsar@engin.umich.edu>, Tim.Bunce@ig.co.uk (Tim Bunce)
- Msg-ID: <19980525155222.A18445@perlsupport.com>,
- <199805261143.MAA04260@toad.ig.co.uk>,
- <199805261235.IAA10371@aatma.engin.umich.edu>,
- Files: MANIFEST pod/perlmodlib.pod pod/perlop.pod op.h perl.h dump.c
- installperl lib/re.pm lib/File/Basename.pm mg.c op.c
- pp_ctl.c pp_hot.c t/lib/basename.t t/op/taint.t toke.c
- Branch: maint-5.004/perl
- ! MANIFEST dump.c embed.h installperl lib/File/Basename.pm mg.c
- ! op.c op.h perl.h pod/perlmodlib.pod pod/perlop.pod pp_ctl.c
- ! pp_hot.c t/lib/basename.t t/op/taint.t toke.c
-____________________________________________________________________________
-[ 1209] By: nick on 1998/06/23 21:33:34
- Log: Perl_malloced_size() only available with perl's malloc
- Branch: ansiperl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 1208] By: nick on 1998/06/23 18:15:23
- Log: Integrate mainline c. 5.004_68 into ansiperl, mainly
- so see what has changed...
- Branch: ansiperl
- +> Porting/genlog iperlsys.h lib/File/Spec.pm
- +> lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm
- +> lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
- +> lib/File/Spec/Win32.pm regcomp.pl regcomp.sym regnodes.h
- +> t/lib/filespec.t win32/perlhost.h
- - atomic.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h ipsock.h
- - ipstdio.h perldir.h perlenv.h perlio.h perllio.h perlmem.h
- - perlproc.h perlsock.h
- !> (integrate 96 files)
-
-----------------
-Version 5.004_68
-----------------
-
-____________________________________________________________________________
-[ 1207] By: gsar on 1998/06/23 10:55:05
- Log: final touches to 5.004_68
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 1206] By: gsar on 1998/06/23 10:50:10
- Log: more MULTIPLICITY tweaks
- Branch: perl
- ! objpp.h perl.c perl.h proto.h win32/GenCAPI.pl win32/config.bc
- ! win32/config.gc win32/config.vc win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 1205] By: gsar on 1998/06/23 09:03:46
- Log: partial MULTIPLICITY cleanup
- Branch: perl
- ! embedvar.h interp.sym intrpvar.h perl.c perlvars.h proto.h
- ! thrdvar.h
-____________________________________________________________________________
-[ 1204] By: gsar on 1998/06/23 09:00:48
- Log: tweak MANIFEST, add Dev_t to POSIX/typemap
- Branch: perl
- ! MANIFEST Porting/makerel README.win32 ext/POSIX/typemap
-____________________________________________________________________________
-[ 1203] By: gsar on 1998/06/23 07:08:02
- Log: bump patchlevel to 68, Porting/makerel tweaks
- Branch: perl
- ! Porting/makerel patchlevel.h win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1202] By: gsar on 1998/06/23 06:16:19
- Log: remove atomic.h pending resolution of licensing issues,
- EMULATE_ATOMIC_REFCOUNTS everywhere
- Branch: perl
- - atomic.h
- ! MANIFEST perl.h sv.h
-____________________________________________________________________________
-[ 1201] By: gsar on 1998/06/23 06:06:23
- Log: applied patch, regen headers
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806220819.EAA03295@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Malloc size feedback
- Date: Mon, 22 Jun 1998 04:19:45 -0400 (EDT)
- Branch: perl
- ! ObjXSub.h av.c embed.h global.sym hv.c malloc.c objpp.h perl.c
- ! pp_sys.c proto.h sv.c toke.c
-____________________________________________________________________________
-[ 1200] By: gsar on 1998/06/23 05:59:09
- Log: Message-Id: <m0yoIgR-000EP2C@alias-2.pr.mcs.net>
- Date: Mon, 22 Jun 1998 21:19:43 -0500 (CDT)
- From: Stephen McCamant <alias@mcs.com>
- Subject: [PATCH] Inheritance of B:: classes
- Branch: perl
- ! ext/B/B.pm
-____________________________________________________________________________
-[ 1199] By: gsar on 1998/06/23 05:57:58
- Log: applied patch, moved #define mkfifo ... from perl.h to POSIX.xs
- Date: Tue, 23 Jun 1998 00:01:02 +0300 (EET DST)
- Message-Id: <199806222101.AAA16456@alpha.hut.fi>
- Subject: [PATCH] _67: somebody said POSIX::mknod?
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! Configure config_h.SH ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod
- ! ext/POSIX/POSIX.xs perl.h
-____________________________________________________________________________
-[ 1198] By: gsar on 1998/06/23 05:48:56
- Log: Date: Mon, 22 Jun 1998 14:10:46 -0600 (MDT)
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Subject: PATCH [5.004_67] perldoc.PL
- Message-ID: <Pine.LNX.3.96.980622135953.10412A-100000@perrin.dimensional.com>
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1197] By: gsar on 1998/06/23 05:47:24
- Log: Message-Id: <3.0.5.32.19980622092918.00aa46e0@ous.edu>
- Date: Mon, 22 Jun 1998 09:29:18 -0700
- From: Dan Sugalski <sugalskd@ous.edu>
- Subject: [PATCH 5.004_67] Autosplit's not qite case-insensitive enough on VMS
- Branch: perl
- ! lib/AutoSplit.pm
-____________________________________________________________________________
-[ 1196] By: gsar on 1998/06/23 05:45:19
- Log: Date: Mon, 22 Jun 1998 18:58:55 +0300 (EET DST)
- Message-Id: <199806221558.SAA18626@alpha.hut.fi>
- Subject: [PATCH] 5.004_67: Fcntl: add few constants, enhance maintainability
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
-____________________________________________________________________________
-[ 1195] By: gsar on 1998/06/23 05:43:32
- Log: Message-Id: <v03110700b1b41e1760b2@[195.95.102.55]>
- Date: Mon, 22 Jun 1998 15:22:24 +0000
- From: Dominic Dunlop <domo@vo.lu>
- Subject: [PATCH 5.004_67] Amend tests/regexp.t for variable REG_INFTY;
- update machten.sh to vary REG_INFTY
- Branch: perl
- ! hints/machten.sh t/op/re_tests t/op/regexp.t
-____________________________________________________________________________
-[ 1194] By: gsar on 1998/06/23 05:38:36
- Log: filter out array subscripts when generating symbols for AIX
- Date: Mon, 22 Jun 1998 12:14:31 +0300 (EET DST)
- Message-Id: <199806220914.MAA13631@alpha.hut.fi>
- Subject: [PATCH] 5.004_67: perl.exp bug, AIX unhappy
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! perl_exp.SH
-____________________________________________________________________________
-[ 1193] By: gsar on 1998/06/23 05:32:52
- Log: updated hints file to cope with buggy sigsetjmp() on Solaris-x86
- Message-Id: <199806221102.NAA12106@alanya.m.isar.de>
- Date: Mon, 22 Jun 1998 13:02:45 +0200 (MET DST)
- From: Lupe Christoph <lupe@alanya.m.isar.de>
- Subject: Re: Perl 5.004_67: Death is on vacation - miniperl can't die
- Branch: perl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 1192] By: gsar on 1998/06/23 05:27:13
- Log: add detailed changelogs and 'genlog'--the script which generates them
- Branch: perl
- + Porting/genlog
- ! Changes INSTALL
-____________________________________________________________________________
-[ 1191] By: gsar on 1998/06/22 15:56:27
- Log: tweak win32 makefiles for PERL_OBJECT build
- Branch: perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1190] By: gsar on 1998/06/22 04:06:02
- Log: backout change#1178 as it was dependent on an unapplied patch,
- fix filespec.t to know its @INC
- Branch: perl
- ! sv.c t/lib/filespec.t
-____________________________________________________________________________
-[ 1189] By: gsar on 1998/06/22 03:47:43
- Log: eliminate use of tokenbuf in util.c
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 1188] By: gsar on 1998/06/22 01:53:59
- Log: add patch that generates regnodes.h via regcomp.pl
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806212038.QAA29797@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] regcomp.h regnodes cleanup
- Date: Sun, 21 Jun 1998 16:38:21 -0400 (EDT)
- Branch: perl
- + regcomp.pl regcomp.sym regnodes.h
- ! MANIFEST Makefile.SH regcomp.h
-____________________________________________________________________________
-[ 1187] By: gsar on 1998/06/22 01:42:21
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806210145.VAA21629@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Avoid temporaries on recursion
- Date: Sat, 20 Jun 1998 21:45:03 -0400 (EDT)
- Branch: perl
- ! pp_ctl.c pp_hot.c
-____________________________________________________________________________
-[ 1186] By: gsar on 1998/06/22 01:14:14
- Log: merge relevant portions from maintbranch change#1155
- Branch: perl
- ! lib/Math/BigFloat.pm op.c pod/perlfunc.pod pod/perlop.pod
- ! pod/perlrun.pod pp_hot.c
-____________________________________________________________________________
-[ 1185] By: gsar on 1998/06/22 00:59:28
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806210827.EAA26322@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Zero-length matching bug
- Date: Sun, 21 Jun 1998 04:27:16 -0400 (EDT)
- Branch: perl
- ! regexec.c t/op/pat.t
-____________________________________________________________________________
-[ 1184] By: gsar on 1998/06/22 00:57:27
- Log: fix alignment issues in malloc.c on 64-bit platforms (via private mail)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806170844.EAA24584@monk.mps.ohio-state.edu>
- Subject: Re: _67 not okay
- Date: Wed, 17 Jun 1998 04:44:26 -0400 (EDT)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 1183] By: gsar on 1998/06/22 00:53:37
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806210727.DAA24072@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Test study/re/
- Date: Sun, 21 Jun 1998 03:27:13 -0400 (EDT)
- Branch: perl
- ! t/op/pat.t
-____________________________________________________________________________
-[ 1182] By: gsar on 1998/06/21 21:25:07
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806210430.AAA21818@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] $^R documented
- Date: Sun, 21 Jun 1998 00:30:48 -0400 (EDT)
- Branch: perl
- ! pod/perlre.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 1181] By: gsar on 1998/06/21 21:23:41
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806210111.VAA17752@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Re docs
- Date: Sat, 20 Jun 1998 21:11:37 -0400 (EDT)
- Branch: perl
- ! pod/perlop.pod pod/perlre.pod
-____________________________________________________________________________
-[ 1180] By: gsar on 1998/06/21 21:22:16
- Log: adapted contents of message into comments in malloc.c and INSTALL
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806162240.SAA23597@monk.mps.ohio-state.edu>
- Subject: [5.004_67] malloc.c -Defines
- Date: Tue, 16 Jun 1998 18:40:41 -0400 (EDT)
- Branch: perl
- ! INSTALL malloc.c
-____________________________________________________________________________
-[ 1179] By: gsar on 1998/06/21 07:26:35
- Log: applied patch, with edits to the prose
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806201936.PAA17499@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Error variables compared
- Date: Sat, 20 Jun 1998 15:36:14 -0400 (EDT)
- Branch: perl
- ! pod/perlvar.pod
-____________________________________________________________________________
-[ 1178] By: gsar on 1998/06/21 07:07:16
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806200104.VAA11343@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] print study /re/ broken
- Date: Fri, 19 Jun 1998 21:04:54 -0400 (EDT)
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 1177] By: gsar on 1998/06/21 07:06:10
- Log: applied patch, tweaked wording
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806200838.EAA13992@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Documentation patch for malloc
- Date: Sat, 20 Jun 1998 04:38:07 -0400 (EDT)
- Branch: perl
- ! malloc.c pod/perldiag.pod
-____________________________________________________________________________
-[ 1176] By: gsar on 1998/06/21 07:00:30
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806200829.EAA13974@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Cosmetic malloc patch
- Date: Sat, 20 Jun 1998 04:29:00 -0400 (EDT)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 1175] By: gsar on 1998/06/21 06:58:37
- Log: Message-Id: <3.0.5.32.19980619160057.032e7480@ous.edu>
- Date: Fri, 19 Jun 1998 16:00:57 -0700
- From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: [PATCH 5.004_67] fixup patches for VMS
- Branch: perl
- ! ext/SDBM_File/sdbm/Makefile.PL t/lib/filecopy.t t/op/defins.t
- ! t/op/taint.t vms/test.com vms/vms.c
-____________________________________________________________________________
-[ 1174] By: gsar on 1998/06/21 06:55:18
- Log: applied VMS patch from Dan Sugalski
- Date: Fri, 19 Jun 1998 15:36:34 -0700
- From: SYSTEM@cedar.osshe.edu
- Message-Id: <980619153634.2063ee12@cedar.osshe.edu>
- Subject: [PATCH 5.004_67] Enhancements to the VMS configuration procedures
- Branch: perl
- ! configure.com lib/ExtUtils/MM_VMS.pm perl.h
- ! vms/descrip_mms.template vms/gen_shrfls.pl
- ! vms/subconfigure.com
-____________________________________________________________________________
-[ 1173] By: gsar on 1998/06/21 06:51:38
- Log: applied patch, modified logic to avoid reentering lexer at compile-time
- Message-ID: <19980619113104.S9711@asic.sc.ti.com>
- Date: Fri, 19 Jun 1998 11:31:04 -0500
- From: Graham Barr <gbarr@ti.com>
- Subject: Re: [PATCH perl5.004_67] Add Errno in ext/
- Branch: perl
- ! Configure MANIFEST Makefile.SH ext/util/make_ext gv.c
- ! lib/English.pm
-____________________________________________________________________________
-[ 1172] By: gsar on 1998/06/21 06:27:57
- Log: applied patch, along with many changes:
- - ipfoo.h headers have been coalesced along with perlfoo.h into
- iperlsys.h
- - win32/cp*.h have been combined in perlhost.h
- - CPerlObj::PerlParse() takes an extra xsinit arg
- - tweaks to get dl_win32.xs compiling again w/ PERL_OBJECT
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Message-Id: <000001bd9b8c$0417fe90$a32fa8c0@tau.Active>
- Subject: RE: [PATCH 5.004_67] Fixes for broken MS compiler
- Date: Fri, 19 Jun 1998 10:59:50 -0700
- Branch: perl
- + iperlsys.h win32/perlhost.h
- - ipdir.h ipenv.h iplio.h ipmem.h ipproc.h ipsock.h ipstdio.h
- - perldir.h perlenv.h perlio.h perllio.h perlmem.h perlproc.h
- - perlsock.h
- ! MANIFEST mg.h op.h perl.h perlio.c proto.h util.c
- ! win32/Makefile win32/dl_win32.xs win32/makefile.mk
- ! win32/runperl.c win32/win32.h
-____________________________________________________________________________
-[ 1171] By: gsar on 1998/06/21 00:44:42
- Log: Date: Fri, 19 Jun 1998 07:55:19 -0600 (MDT)
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Subject: Re: PATCH _67 (Doc) perlop.pod
- Message-ID: <Pine.LNX.3.96.980619075203.13326A-100000@perrin.dimensional.com>
- Branch: perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 1170] By: gsar on 1998/06/21 00:43:06
- Log: a tweaked version of:
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Subject: [PATCH 5.004_67] Win32 using PerlCRT.dll
- Date: Wed, 17 Jun 1998 20:25:51 -0700
- Message-ID: <001b01bd9a68$cb752410$a32fa8c0@tau.Active>
- Branch: perl
- ! lib/ExtUtils/MM_Win32.pm win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1169] By: gsar on 1998/06/21 00:10:18
- Log: added patch, regen headers
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806190227.WAA07371@monk.mps.ohio-state.edu>
- Subject: Re: Ilya's patches
- Date: Thu, 18 Jun 1998 22:27:31 -0400 (EDT)
- Branch: perl
- ! ObjXSub.h embedvar.h interp.sym intrpvar.h toke.c
-____________________________________________________________________________
-[ 1168] By: gsar on 1998/06/21 00:05:01
- Log: Date: Thu, 18 Jun 1998 23:37:32 -0700 (PDT)
- From: Tom Phoenix <rootbeer@teleport.com>
- Subject: [PATCH] docs creating files via open
- Message-ID: <Pine.GSO.3.96.980618231856.17544S-100000@user2.teleport.com>
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 1167] By: gsar on 1998/06/21 00:03:34
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806172151.RAA28441@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_67] Better version of malloc improver
- Date: Wed, 17 Jun 1998 17:51:54 -0400 (EDT)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 1166] By: gsar on 1998/06/20 23:59:23
- Log: enhance perlre.pod to say C<)> can't appear in a (?#...) comment
- Branch: perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 1165] By: gsar on 1998/06/20 23:47:09
- Log: added patch, tweaked missed files, excised comment that doesn't really
- belong in the sources
- From: joshua.pritikin@db.com
- Date: Mon, 15 Jun 1998 10:03:37 -0400
- Message-Id: <H00000e500072c63@MHS>
- Subject: [PATCH 5.004_57] tied hash slice & do_kv cleanup
- Branch: perl
- ! ObjXSub.h av.c doop.c embed.h global.sym objpp.h pp.c proto.h
- ! t/op/avhv.t
-____________________________________________________________________________
-[ 1164] By: gsar on 1998/06/20 23:29:09
- Log: add File-Spec-0.6 from CPAN
- Branch: perl
- + lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm
- + lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm
- + lib/File/Spec/Win32.pm t/lib/filespec.t
- ! MANIFEST
-____________________________________________________________________________
-[ 1163] By: gsar on 1998/06/20 23:15:41
- Log: tweaks to allow both mingw32{gcc-2.8.1,egcs-1.0.2} build and test
- Branch: perl
- ! ext/POSIX/POSIX.xs win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1162] By: gsar on 1998/06/20 21:48:32
- Log: manual integration of all outstanding ansi branch stuff into mainline
- Branch: perl
- ! ext/POSIX/POSIX.xs lib/ExtUtils/MM_Win32.pm t/op/ipcsem.t
- ! win32/config.gc win32/dl_win32.xs win32/makefile.mk
- ! win32/win32.h
-____________________________________________________________________________
-[ 1161] By: gsar on 1998/06/20 21:12:01
- Log: undo goofed change 1157 (backed out the fix instead of keeping it)
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1160] By: nick on 1998/06/20 21:05:51
- Log: Patches to build with EGCS-1.0.2 Mingw32 port.
- Branch: ansiperl
- ! ext/POSIX/POSIX.xs win32/config.gc win32/config_H.gc
- ! win32/dl_win32.xs win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 1159] By: gsar on 1998/06/20 02:51:35
- Log: cleanup installation of utilities on win32
- Branch: perl
- ! installperl pod/Makefile win32/Makefile win32/makefile.mk
- ! win32/pod.mak
-____________________________________________________________________________
-[ 1158] By: gsar on 1998/06/20 02:50:35
- Log: intuit @INC pathnames from exe location only if dll location
- is unknown (ensures that multiple executables will coexist)
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 1157] By: gsar on 1998/06/20 02:48:34
- Log: make perldoc ignore null files (it tried to open() them)
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1156] By: gsar on 1998/06/19 21:18:47
- Log: fix perldoc to ignore unfound null filenames
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 1155] By: TimBunce on 1998/06/19 18:47:57
- Log: Assorted patches:
-
- ------ BUILD PROCESS ------
-
- Title: "Clarify varargs issues in INSTALL docs"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980603125427.8559C-100000@newton.phys>
- Files: INSTALL
-
- ------ CORE LANGUAGE ------
-
- Title: "Further fixes for updated SysV IPC support"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199805211644.TAA15139@alpha.hut.fi>
- Files: Configure perl.h doio.c
-
- Title: "Fixed SEGV caused by bug in pp_hot.c:pp_sassign()"
- From: Andrew Bettison <andrewb@zip.com.au>
- Msg-ID: <m0ykMQx-000OQCC@headroom.zip.com.au>
- Files: pp_hot.c
-
- Title: "Invalidate method cache on C<local *subname>"
- From: Chip Salzenberg <chip@perl.org>
- Msg-ID: <19980604134731.D24343@perlsupport.com>
- Files: scope.c t/op/method.t
-
- Title: "fix uninitialized cv variable in op.c"
- From: joshua.pritikin@db.com
- Msg-ID: <H00000e50005af05@MHS>
- Files: op.c
-
- Title: "fix for undef as last arg to setsockopt"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <19980603112219.B7638@asic.sc.ti.com>
- Files: pp_sys.c
-
- Title: "Fix -i when @ARGV is empty"
- From: Chip Salzenberg <chip@perl.org>, Gurusamy Sarathy
- <gsar@engin.umich.edu>, Ilya Zakharevich
- <ilya@math.ohio-state.edu>, Tim.Bunce@ig.co.uk (Tim Bunce)
- Msg-ID: <19980606184942.A4583@perlsupport.com>,
- <199806070029.UAA18709@monk.mps.ohio-state.edu>,
- <199806071817.OAA28141@aatma.engin.umich.edu>,
- <199806191549.QAA16376@toad.ig.co.uk>
- Files: pp_hot.c
-
- ------ DOCUMENTATION ------
-
- Title: "Discrepancy between perlop.pod and m// operator docs"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980526092614.27437B-100000@user2.teleport.com>
- Files: pod/perlop.pod
-
- Title: "Doc addition for perlfunc entry for system()"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>, Mike Fletcher
- <fletch@phydeaux.org>
- Msg-ID: <199806011908.PAA31069@dewdrop2.mindspring.com>,
- <199806012057.QAA26830@monk.mps.ohio-state.edu>
- Files: pod/perlfunc.pod
-
- Title: "Clarify effects of using quotes with m operator"
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Msg-ID: <Pine.LNX.3.96.980617111641.25631B-100000@perrin.dimensional.com>
- Files: pod/perlop.pod
-
- Title: "Document -i with STDIN"
- From: joshua.pritikin@db.com
- Msg-ID: <H00000e50006a84a@MHS>
- Files: pod/perlrun.pod
-
- ------ EXTENSIONS ------
-
- Title: "Fix Liblist.pm to tolerate backslashen in paths"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199806011954.PAA10900@aatma.engin.umich.edu>
- Files: lib/ExtUtils/Liblist.pm
-
- ------ LIBRARY ------
-
- Title: "Typo fix for Math::BogFloat"
- From: Mike Stok <mike@stok.co.uk>
- Msg-ID: <Pine.LNX.3.96.980605101623.982F-100000@stok.co.uk>
- Files: lib/Math/BigFloat.pm
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Add docs about types of diff to Porting/patching.pod"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199806090105.VAA20005@aatma.engin.umich.edu>
- Files: Porting/patching.pod
-
- Title: "Set dont_use_nlink for PowerMAX OS 4.2"
- From: Tom Horsley <Tom.Horsley@mail.ccur.com>
- Msg-ID: <199806161354.NAA21316@cleo.ssd.hcsc.com>
- Files: hints/powerux.sh
-
- Title: "Assorted improvements to hints/solaris_2.sh"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980527135845.26608K-100000@newton.phys>
- Files: hints/solaris_2.sh
- Branch: maint-5.004/perl
- ! Configure INSTALL Porting/patching.pod doio.c hints/powerux.sh
- ! hints/solaris_2.sh lib/ExtUtils/Liblist.pm
- ! lib/Math/BigFloat.pm op.c perl.h pod/perlfunc.pod
- ! pod/perlop.pod pod/perlrun.pod pp_hot.c pp_sys.c scope.c
- ! t/op/method.t
-____________________________________________________________________________
-[ 1154] By: gsar on 1998/06/19 17:22:23
- Log: update repository copy of Asmdata.pm after `perl bytecode.pl`
- Branch: perl
- ! ext/B/B/Asmdata.pm regcomp.c
-____________________________________________________________________________
-[ 1153] By: nick on 1998/06/19 17:21:21
- Log: Use libxxx.a for -lxxx with GCC
- Branch: ansiperl
- ! lib/ExtUtils/MM_Win32.pm win32/config.gc win32/config_H.gc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 1152] By: TimBunce on 1998/06/19 17:08:18
- Log: Title: Tom's jumbo doc patch
- From: Tom Christiansen <tchrist@chthon.perl.com>
- Msg-Id: <199806140419.WAA20549@chthon.perl.com>
- Files: pod/perl.pod pod/perlbook.pod pod/perldata.pod pod/perldsc.pod
- pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
- pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
- pod/perlfaq9.pod pod/perlform.pod pod/perlfunc.pod
- pod/perlipc.pod pod/perllocale.pod pod/perllol.pod
- pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod
- pod/perlop.pod pod/perlre.pod pod/perlref.pod
- pod/perlrun.pod pod/perlsec.pod pod/perlsub.pod
- pod/perlsyn.pod pod/perltie.pod pod/perltoot.pod
- pod/perlvar.pod
- Branch: maint-5.004/perl
- ! pod/perl.pod pod/perlbook.pod pod/perldata.pod pod/perldsc.pod
- ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod pod/perlform.pod pod/perlfunc.pod
- ! pod/perlipc.pod pod/perllocale.pod pod/perllol.pod
- ! pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod
- ! pod/perlop.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- ! pod/perlsec.pod pod/perlsub.pod pod/perlsyn.pod
- ! pod/perltie.pod pod/perltoot.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 1151] By: nick on 1998/06/19 15:38:28
- Log: Resolve latest
- Branch: ansiperl
- !> av.c embed.h embedvar.h ext/Socket/Socket.xs global.sym
- !> hints/powerux.sh mg.c perl.h pod/perlsub.pod pp_ctl.c proto.h
- !> sv.c t/TEST
-____________________________________________________________________________
-[ 1150] By: gsar on 1998/06/18 20:43:07
- Log: Date: Tue, 16 Jun 1998 13:54:17 GMT
- Message-Id: <199806161354.NAA21316@cleo.ssd.hcsc.com>
- From: Tom Horsley <Tom.Horsley@mail.ccur.com>
- Subject: [PATCH] perl5.004 hints file (maint and dev paths)
- Branch: perl
- ! hints/powerux.sh
-____________________________________________________________________________
-[ 1149] By: gsar on 1998/06/18 20:41:30
- Log: hand apply whitespace-mutiliated patch
- From: joshua.pritikin@db.com
- Date: Mon, 15 Jun 1998 09:21:36 -0400
- Message-Id: <H00000e50007289b@MHS>
- Subject: [PATCH 5.004_67] SvREADONLY for av_clear
- Branch: perl
- ! av.c
-____________________________________________________________________________
-[ 1148] By: gsar on 1998/06/18 20:33:59
- Log: hand apply whitespace-mutiliated and reversed patch
- Date: Tue, 16 Jun 1998 16:31:40 -0400
- From: Les Peters <lpeters@aol.net>
- Message-Id: <199806162031.QAA08202@ds9>
- Subject: [PATCH 5.004_67] Socket.xs tweak for IRIX 6.3
- Branch: perl
- ! ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 1147] By: gsar on 1998/06/18 20:26:59
- Log: close child pipe in t/TEST, other cosmetic tweaks
- Branch: perl
- ! t/TEST
-____________________________________________________________________________
-[ 1146] By: gsar on 1998/06/18 19:37:41
- Log: back out problematic change#1105, tweak perlsub.pod
- Branch: perl
- ! embed.h embedvar.h global.sym mg.c perl.h pod/perlsub.pod
- ! pp_ctl.c proto.h sv.c
-____________________________________________________________________________
-[ 1145] By: nick on 1998/06/18 19:31:07
- Log: Integrate and resolve -at mainline to ansiperl prior to Ming32 hacking
- Branch: ansiperl
- +> configure.com ext/DB_File/dbinfo
- +> ext/DynaLoader/DynaLoader_pm.PL t/base/rs.t
- +> t/op/regexp_noamp.t vms/descrip_mms.template vms/munchconfig.c
- +> vms/subconfigure.com
- - ext/DynaLoader/DynaLoader.pm.PL vms/config.vms vms/descrip.mms
- - vms/fndvers.com
- !> (integrate 499 files)
-____________________________________________________________________________
-[ 1144] By: gsar on 1998/06/18 16:35:11
- Log: fix spurious cxstack_max init that trampled memory
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 1143] By: gsar on 1998/06/18 16:33:01
- Log: fix memory leaks and uninitialized memory accesses found by Purify
- Branch: perl
- ! doio.c perl.c regexec.c sv.c
-____________________________________________________________________________
-[ 1142] By: gsar on 1998/06/18 16:28:48
- Log: fix off-by-one that trampled memory in re_croak2()
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 1141] By: gsar on 1998/06/18 16:26:59
- Log: fix AutoLoader to do the right thing when there are relative paths
- in @INC
- Branch: perl
- ! lib/AutoLoader.pm
-____________________________________________________________________________
-[ 1140] By: gsar on 1998/06/18 16:22:47
- Log: fix Makefile.SH typo
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1139] By: gsar on 1998/06/17 18:06:16
- Log: 5.004_67 niggles
- Branch: perl
- ! Makefile.SH op.c
-
-----------------
-Version 5.004_67
-----------------
-
-____________________________________________________________________________
-[ 1138] By: gsar on 1998/06/15 10:09:27
- Log: up patchlevel.h to 67, other small tweaks
- Branch: perl
- ! patchlevel.h pod/perlhist.pod pod/perltoc.pod vms/perly_c.vms
- ! win32/Makefile win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1137] By: gsar on 1998/06/15 09:08:57
- Log: tweaks to get PERL_OBJECT building again; passes tests
- Branch: perl
- ! ObjXSub.h objpp.h proto.h
-____________________________________________________________________________
-[ 1136] By: gsar on 1998/06/15 08:51:54
- Log: back out previous change (it breaks PERL_OBJECT)
- Branch: perl
- ! ObjXSub.h cc_runtime.h embed.h embedvar.h global.sym
- ! interp.sym intrpvar.h objpp.h perl.c perl.h pod/perldiag.pod
- ! pod/perlguts.pod pp_ctl.c proto.h scope.c scope.h util.c
-____________________________________________________________________________
-[ 1135] By: gsar on 1998/06/15 05:32:01
- Log: added patch, fixed typo, reworked documentation
- Message-Id: <H00000e500071aa3@MHS>
- Date: Sun, 14 Jun 1998 14:03:15 EDT
- From: joshua.pritikin@db.com
- Subject: [PATCH 5.004_66] JMPENV!
- Branch: perl
- ! ObjXSub.h cc_runtime.h embed.h embedvar.h global.sym
- ! interp.sym intrpvar.h objpp.h perl.c perl.h pod/perldiag.pod
- ! pod/perlguts.pod pp_ctl.c proto.h scope.c scope.h util.c
-____________________________________________________________________________
-[ 1134] By: gsar on 1998/06/15 04:07:18
- Log: various win32 odds and ends
- - added support for waitpid(), open2/open3, and a bugfix for kill()
- from Ronald Schmidt <RonaldWS@aol.com>
- - tweak testsuite mods of above
- - regenerate win32/config_H.?c
- - change kill() to win32_kill() and export it
- - coalesce common code in win32.c
- - add PerlProc_waitpid() and export win32_waitpid()
- result builds and passes on the three win32 compilers
- Branch: perl
- ! ipproc.h lib/IPC/Open3.pm perlproc.h t/lib/open2.t
- ! t/lib/open3.t util.c win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makedef.pl win32/runperl.c
- ! win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 1133] By: gsar on 1998/06/15 01:39:13
- Log: newer Getopt/Long.pm from public distribution cited in:
- Message-Id: <m2n2bgm8en.fsf@phoenix.squirrel.nl>
- Date: 14 Jun 1998 15:15:28 +0200
- From: Johan Vromans <jvromans@squirrel.nl>
- Subject: Getopt::Long version 2.17 released
- Branch: perl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 1132] By: gsar on 1998/06/15 01:37:12
- Log: documentation update from tchrist
- Message-Id: <199806140419.WAA20549@chthon.perl.com>
- Date: Sat, 13 Jun 1998 22:19:32 MDT
- From: Tom Christiansen <tchrist@chthon.perl.com>
- Subject: doc patches
- Branch: perl
- ! pod/perl.pod pod/perlbook.pod pod/perldata.pod pod/perldsc.pod
- ! pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod pod/perlform.pod pod/perlfunc.pod
- ! pod/perlipc.pod pod/perllocale.pod pod/perllol.pod
- ! pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod
- ! pod/perlop.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- ! pod/perlsec.pod pod/perlsub.pod pod/perlsyn.pod
- ! pod/perltie.pod pod/perltoot.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 1131] By: gsar on 1998/06/14 19:33:36
- Log: Message-ID: <pz3edaedog.fsf@eeyore.ibcinc.com>
- From: Roderick Schertler <roderick@argon.org>
- Subject: [PATCH] Re: Exceptions in IPC::Open2
- Date: 12 Jun 1998 13:24:15 -0400
- Branch: perl
- ! lib/IPC/Open3.pm
-____________________________________________________________________________
-[ 1130] By: gsar on 1998/06/14 19:32:25
- Log: fixup MANIFEST
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 1129] By: gsar on 1998/06/14 18:51:53
- Log: various win32 fixes
- - fixes that silence VC noises about dup exports, non-default libs, and
- unsupported *.def file directives
- - s/inplace/inplace_label/ malloc.c
- - update Config{usemymalloc} based on d_mymalloc
- - export Perl_*Vars
- - fix makefiles to not build miniperl.exe twice, and to make it properly
- when defaults are changed
- Branch: perl
- ! lib/ExtUtils/MM_Win32.pm lib/ExtUtils/Mksymlists.pm malloc.c
- ! win32/Makefile win32/config_sh.PL win32/makedef.pl
- ! win32/makefile.mk win32/perllib.c win32/win32.h
-____________________________________________________________________________
-[ 1128] By: gsar on 1998/06/14 01:38:39
- Log: remove unused global `scrgv'
- Branch: perl
- ! ObjXSub.h cygwin32/cw32imp.h embedvar.h perlvars.h
-____________________________________________________________________________
-[ 1127] By: nick on 1998/06/13 08:39:07
- Log: Move specialsv_list to embed.sym, regen embed*.h
- Branch: win32/perl
- ! embed.h embedvar.h global.sym interp.sym
-____________________________________________________________________________
-[ 1126] By: gsar on 1998/06/12 07:23:06
- Log: From: jan.dubois@ibm.net (Jan Dubois)
- Subject: Re: execv in toke.c [PATCH]: win32 wrapper for _66
- Date: Thu, 11 Jun 1998 21:13:31 +0200
- Message-ID: <35842ac5.7883075@smtp1.ibm.net>
- Branch: perl
- ! win32/makedef.pl win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 1125] By: gsar on 1998/06/12 07:21:29
- Log: added patch, undo earlier workaround
- From: jan.dubois@ibm.net (Jan Dubois)
- Subject: Re: Why does saferealloc(NULL,size) croak? [PATCH] against _66
- Date: Thu, 11 Jun 1998 20:28:36 +0200
- Message-ID: <35831f69.4975644@smtp1.ibm.net>
- Branch: perl
- ! perl.c util.c
-____________________________________________________________________________
-[ 1124] By: gsar on 1998/06/12 07:16:12
- Log: hand-applied patch with wrapped lines
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Subject: [PATCH 5.004_66] Win32::Reg... bloat in Win32
- Date: Thu, 11 Jun 1998 11:06:33 -0700
- Message-ID: <000101bd9563$aae0c4c0$a32fa8c0@tau.Active>
- Branch: perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 1123] By: gsar on 1998/06/12 07:07:25
- Log: Date: Thu, 11 Jun 1998 12:40:05 -0400 (EDT)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Subject: [PATCH 5.004_66] Config_66-01-02.diff
- Message-Id: <Pine.SUN.3.96.980611123857.18493K-100000@newton.phys>
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 1122] By: gsar on 1998/06/12 07:06:02
- Log: Message-Id: <Pine.SUN.3.96.980611122249.18493J-100000@newton.phys>
- Date: Thu, 11 Jun 1998 12:27:15 -0400 (EDT)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Subject: Re: [PATCH for _66] Makefile.SH problem on dos/djgpp
- Branch: perl
- ! pod/checkpods.PL pod/pod2html.PL pod/pod2latex.PL
- ! pod/pod2man.PL utils/c2ph.PL utils/h2ph.PL utils/h2xs.PL
- ! utils/perlbug.PL utils/perlcc.PL utils/perldoc.PL
- ! utils/pl2pm.PL utils/splain.PL x2p/find2perl.PL x2p/s2p.PL
-____________________________________________________________________________
-[ 1121] By: gsar on 1998/06/12 07:01:20
- Log: a tweaked version of:
- Message-Id: <l03130300b1a6143078cd@[194.222.64.89]>
- Date: Fri, 12 Jun 1998 01:26:53 +0200
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Subject: Re: Misparsing s///x
- Branch: perl
- ! pod/perlre.pod
-____________________________________________________________________________
-[ 1120] By: gsar on 1998/06/12 06:51:08
- Log: applied patch, with indentation tweaks
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806110803.EAA09149@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_66] Remove REG_ALIGN junk
- Date: Thu, 11 Jun 1998 04:03:58 -0400 (EDT)
- Branch: perl
- ! regcomp.c regcomp.h regexec.c
-____________________________________________________________________________
-[ 1119] By: gsar on 1998/06/11 17:42:07
- Log: make REG_INFTY default to something saner when sizeof(short) > 2
- Message-Id: <Pine.SUN.3.96.980611114241.18493H-100000@newton.phys>
- Date: Thu, 11 Jun 1998 11:50:07 EDT
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Subject: Re: [PATCH for tests] Regexp fails on long string
- Branch: perl
- ! regcomp.h
-____________________________________________________________________________
-[ 1118] By: gsar on 1998/06/11 07:09:06
- Log: regen embedvar.h
- Branch: perl
- ! embedvar.h
-____________________________________________________________________________
-[ 1117] By: gsar on 1998/06/11 06:45:52
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806100751.DAA05441@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_66] Bugs with (?{}), $^R and many-to-many subst
- Date: Wed, 10 Jun 1998 03:51:47 -0400 (EDT)
- Branch: perl
- ! interp.sym intrpvar.h op.c op.h perl.c regcomp.c regcomp.h
- ! regexec.c regexp.h t/op/pat.t t/op/subst.t
-____________________________________________________________________________
-[ 1116] By: gsar on 1998/06/11 06:35:54
- Log: misc win32 fixes
- From: "Douglas Lankshear" <dougl@ActiveState.com>
- Subject: [PATCH 5.004_66]
- Date: Wed, 10 Jun 1998 11:28:27 -0700
- Message-ID: <001a01bd949d$8fd18050$a32fa8c0@tau.Active>
- Branch: perl
- ! ObjXSub.h perl.c win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1115] By: gsar on 1998/06/11 06:33:21
- Log: Message-ID: <19980610005325.D162@cdata.tvnet.hu>
- Date: Wed, 10 Jun 1998 00:53:25 +0200
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Subject: [PATCH for _66] Makefile.SH problem on dos/djgpp
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 1114] By: gsar on 1998/06/11 06:31:34
- Log: back out change#1111 and add alternative patch:
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806101538.LAA07293@monk.mps.ohio-state.edu>
- Subject: Re: PATCH for study/foo/
- Date: Wed, 10 Jun 1998 11:38:58 -0400 (EDT)
- Branch: perl
- ! pp.c sv.c
-____________________________________________________________________________
-[ 1113] By: gsar on 1998/06/11 02:59:23
- Log: fix outdated bytecode.pl
- Branch: perl
- ! bytecode.h bytecode.pl byterun.c byterun.h
-____________________________________________________________________________
-[ 1112] By: gsar on 1998/06/10 07:56:06
- Log: Added patch, regenerated perly.c and perly.c.diff
- Message-Id: <m0ygCL8-000Eb3C@alias-2.pr.mcs.net>
- Date: Sun, 31 May 1998 12:56:14 -0500 (CDT)
- From: Stephen McCamant <alias@mcs.com>
- Subject: [PATCH] too many RV2GVs in *foo{THING}
- Branch: perl
- ! perly.c perly.c.diff perly.y t/op/gv.t
-____________________________________________________________________________
-[ 1111] By: gsar on 1998/06/10 07:40:30
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806100309.XAA04974@monk.mps.ohio-state.edu>
- Subject: Re: PATCH for study/foo/
- Date: Tue, 9 Jun 1998 23:09:55 -0400 (EDT)
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 1110] By: gsar on 1998/06/10 07:37:04
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806100219.WAA04865@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_66] -DL and PERL_DEBUG_MSTATS unravelled
- Date: Tue, 9 Jun 1998 22:19:02 -0400 (EDT)
- Branch: perl
- ! pod/perldebug.pod
-____________________________________________________________________________
-[ 1109] By: gsar on 1998/06/10 07:35:29
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806100302.XAA04958@monk.mps.ohio-state.edu>
- Subject: Re: [PATCH 5.004_66] REG_INFTY patch corrected
- Date: Tue, 9 Jun 1998 23:02:52 -0400 (EDT)
- Branch: perl
- ! regcomp.h
-____________________________________________________________________________
-[ 1108] By: gsar on 1998/06/10 07:31:25
- Log: Added patch, tweaked other places affected by name change
- Message-ID: <19980610005417.G162@cdata.tvnet.hu>
- Date: Wed, 10 Jun 1998 00:54:17 +0200
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Subject: [PATCH] file name DynaLoader.pm.PL is 8.3 unfriendly
- Branch: perl
- +> ext/DynaLoader/DynaLoader_pm.PL
- - ext/DynaLoader/DynaLoader.pm.PL
- ! MANIFEST ext/DynaLoader/Makefile.PL win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 1107] By: gsar on 1998/06/10 07:24:20
- Log: Message-ID: <19980610005342.E162@cdata.tvnet.hu>
- Date: Wed, 10 Jun 1998 00:53:42 +0200
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Subject: [PATCH for _66] new version of README.dos
- Branch: perl
- ! README.dos
-____________________________________________________________________________
-[ 1106] By: gsar on 1998/06/10 07:22:31
- Log: Message-ID: <19980610005404.F162@cdata.tvnet.hu>
- Date: Wed, 10 Jun 1998 00:54:04 +0200
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Subject: [PATCH for _66] op/taint.t problem on dos/djgpp
- Branch: perl
- ! t/op/taint.t
-____________________________________________________________________________
-[ 1105] By: gsar on 1998/06/10 07:21:21
- Log: Applied patch, followed by tweaks to *.sym and `perl embed.pl`
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806090216.WAA02041@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_66] Resend of RE cache patch (modified)
- Date: Mon, 8 Jun 1998 22:16:56 -0400 (EDT)
- Branch: perl
- ! embed.h embedvar.h global.sym intrpvar.h mg.c perl.h
- ! perlvars.h pp_ctl.c proto.h sv.c
-____________________________________________________________________________
-[ 1104] By: gsar on 1998/06/10 07:06:01
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806090210.WAA02027@monk.mps.ohio-state.edu>
- Subject: Lost chunk of RE jumbo patch
- Date: Mon, 8 Jun 1998 22:10:52 -0400 (EDT)
- Branch: perl
- + t/op/regexp_noamp.t
-____________________________________________________________________________
-[ 1103] By: gsar on 1998/06/10 07:04:20
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Message-Id: <199806090207.WAA02015@monk.mps.ohio-state.edu>
- Subject: [PATCH 5.004_66] Combined OS/2 support
- Date: Mon, 8 Jun 1998 22:07:48 -0400 (EDT)
- Branch: perl
- ! os2/Changes os2/diff.configure os2/os2.c
-____________________________________________________________________________
-[ 1102] By: gsar on 1998/06/10 07:00:08
- Log: Message-Id: <199803140103.UAA04839@monk.mps.ohio-state.edu>
- Date: Fri, 13 Mar 1998 20:03:52 EST
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.004_62 5_004_04m1] pod2html again
- Branch: perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 1101] By: gsar on 1998/06/10 06:55:20
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: Re: 5.004_65 uninitialized variable regexec.c (2)
- Date: Thu, 28 May 1998 01:28:54 -0400 (EDT)
- Branch: perl
- ! regexec.c
-____________________________________________________________________________
-[ 1100] By: gsar on 1998/06/10 06:52:50
- Log: updated MANIFEST for previous change
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 1099] By: gsar on 1998/06/10 06:51:08
- Log: Mangled patch, needed hand-tweaks, along with binmode for rs.t:
- Message-Id: <3.0.5.32.19980605110840.009e12b0@ous.edu>
- Date: Fri, 05 Jun 1998 11:08:40 -0700
- From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: Re: [PATCH 5.004_66]Add record read capability to <>
- Branch: perl
- + t/base/rs.t
- ! perl.h pod/perlvar.pod sv.c
-____________________________________________________________________________
-[ 1098] By: gsar on 1998/06/10 06:36:59
- Log: From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Message-Id: <9806042022.AA10418@claudius.bfsec.bt.co.uk>
- Subject: [PATCH fror 5.004_66] DB_File-1.60
- Date: Thu, 4 Jun 1998 21:22:35 +0100 (BST)
- Branch: perl
- + ext/DB_File/dbinfo
- ! MANIFEST ext/DB_File/Changes ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/typemap t/lib/db-btree.t
- ! t/lib/db-hash.t t/lib/db-recno.t
-____________________________________________________________________________
-[ 1097] By: gsar on 1998/06/10 06:33:16
- Log: Message-ID: <19980604134731.D24343@perlsupport.com>
- Date: Thu, 4 Jun 1998 13:47:31 -0400
- From: Chip Salzenberg <chip@perl.org>
- Subject: [PATCH] Invalidate method cache on C<local *subname>
- Branch: perl
- ! scope.c t/op/method.t
-____________________________________________________________________________
-[ 1096] By: gsar on 1998/06/10 06:30:51
- Log: From: Norton Allen <allen@huarp.harvard.edu>
- Message-Id: <199806031908.PAA04183@bottesini.harvard.edu>
- Subject: [PATCH] _66 MM_Unix.pm for QNX
- Date: Wed, 3 Jun 1998 15:08:33 -0400 (edt)
- Branch: perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 1095] By: gsar on 1998/06/10 06:29:21
- Log: From: Norton Allen <allen@huarp.harvard.edu>
- Message-Id: <199806031909.PAA04358@bottesini.harvard.edu>
- Subject: [PATCH] _66 proto.h
- Date: Wed, 3 Jun 1998 15:09:14 -0400 (edt)
- Branch: perl
- ! proto.h
-____________________________________________________________________________
-[ 1094] By: gsar on 1998/06/10 06:26:39
- Log: Applied relevant parts of:
- From: Paul Johnson <pjcj@transeda.com>
- Date: Wed, 3 Jun 1998 19:07:55 +0100 (BST)
- Message-Id: <199806031807.TAA04100@west-tip.transeda.com>
- Subject: [PATCH] Enhancing xsubpp's support for C++
- Branch: perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 1093] By: gsar on 1998/06/10 06:22:54
- Log: Message-ID: <19980603112219.B7638@asic.sc.ti.com>
- Date: Wed, 3 Jun 1998 11:22:19 -0500
- From: Graham Barr <gbarr@ti.com>
- Subject: [PATCH perl5.004_04-m4] fix for undef as last arg to setsockopt
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1092] By: gsar on 1998/06/10 06:20:44
- Log: Message-Id: <199806030919.KAA03527@sale-wts>
- Date: Wed, 3 Jun 1998 10:20:06 +0100 (BST)
- From: Alan Burlison <Alan.Burlison@UK.Sun.com>
- Subject: [PATCH 5.004_66] ExtUtils::Installed.pm and ExtUtils::Packlist.pm
- Branch: perl
- ! lib/ExtUtils/Installed.pm lib/ExtUtils/Packlist.pm
-____________________________________________________________________________
-[ 1091] By: gsar on 1998/06/10 06:18:42
- Log: Message-Id: <3.0.5.32.19980601122229.00a58420@ous.edu>
- Date: Mon, 01 Jun 1998 12:22:29 -0700
- From: SYSTEM@cedar.osshe.edu (by way of Dan Sugalski <sugalskd@ous.edu>)
- Subject: [PATCH 5.004_66] proto.h change to make byterun() visible to VMS
- Branch: perl
- ! proto.h
-____________________________________________________________________________
-[ 1090] By: gsar on 1998/06/10 06:14:24
- Log: A tweaked version of:
- Date: Mon, 1 Jun 1998 12:05:47 -0700
- From: SYSTEM@cedar.osshe.edu
- Message-Id: <980601120547.20617d54@cedar.osshe.edu>
- Subject: [PATCH 5.004_66] Fix problem with SDBM makefile on VMS
- Branch: perl
- ! ext/SDBM_File/sdbm/Makefile.PL
-____________________________________________________________________________
-[ 1089] By: gsar on 1998/06/10 05:58:00
- Log: Message-Id: <m0yfdd4-000Eb2C@alias-2.pr.mcs.net>
- Date: Fri, 29 May 1998 23:52:26 -0500 (CDT)
- From: Stephen McCamant <alias@mcs.com>
- Subject: [PATCH] Re: Uninitialised error from -M()
- Branch: perl
- ! op.c t/op/stat.t
-____________________________________________________________________________
-[ 1088] By: gsar on 1998/06/10 05:55:24
- Log: Date: Sat, 30 May 1998 08:07:01 -0400
- From: lvirden@cas.org (Larry Virden)
- Message-Id: <199805301207.IAA08856@cas.org>
- Subject: PATCH for pod and warning notice
- Branch: perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 1087] By: gsar on 1998/06/10 05:52:05
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Date: Mon, 8 Jun 1998 14:45:36 -0400 (EDT)
- Message-Id: <Pine.SUN.3.96.980608144437.13972A-100000@newton.phys>
- Subject: [PATCH 5.004_66] Config_66-01
- Branch: perl
- ! Configure MANIFEST Porting/Glossary Porting/config.sh
- ! Porting/config_H config_h.SH
-____________________________________________________________________________
-[ 1086] By: gsar on 1998/06/10 05:46:38
- Log: Message-Id: <3.0.5.32.19980608161314.00a0a880@ous.edu>
- Date: Mon, 08 Jun 1998 16:13:14 -0700
- From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: [PATCH 5.004_66] Documentation patch for Semaphore.pm
- Branch: perl
- ! ext/Thread/Thread/Semaphore.pm
-____________________________________________________________________________
-[ 1085] By: gsar on 1998/06/10 05:44:44
- Log: Message-Id: <3.0.5.32.19980608161002.00a64a70@ous.edu>
- Date: Mon, 08 Jun 1998 16:10:02 -0700
- From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: [PATCH 5.004_66]Doc & feature patch for Thread::Queue
- Branch: perl
- - vms/descrip.mms
- ! ext/Thread/Thread/Queue.pm
-____________________________________________________________________________
-[ 1084] By: gsar on 1998/06/10 05:38:11
- Log: Message-Id: <3.0.5.32.19980608153828.00a81ea0@ous.edu>
- Date: Mon, 08 Jun 1998 15:38:28 -0700
- From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: [PATCH POINTER 5.004_66]A configuration system for VMS perl
- Branch: perl
- + configure.com vms/descrip_mms.template vms/munchconfig.c
- + vms/subconfigure.com
- - vms/config.vms vms/fndvers.com
- ! MANIFEST README.vms lib/ExtUtils/MM_VMS.pm
-____________________________________________________________________________
-[ 1083] By: gsar on 1998/06/10 05:07:04
- Log: xsubpp enhancements ($CPAN/authors/id/ILYAZ/patches/diff_xsubpp_65), a
- variant of:
- Message-Id: <199712131231.HAA04125@monk.mps.ohio-state.edu>
- Date: Sat, 13 Dec 1997 07:31:02 EST
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: 5.004_55: xsubpp: new keywords INTERFACE C_ARGS
- Branch: perl
- ! XSUB.h lib/ExtUtils/xsubpp pod/perlxs.pod
-____________________________________________________________________________
-[ 1082] By: gsar on 1998/06/10 04:52:26
- Log: add newer malloc.c from Ilya Zakharevich <ilya@math.ohio-state.edu>
- (from $CPAN/authors/id/ILYAZ/patches/diff_malloc_65)
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 1081] By: gsar on 1998/06/10 03:45:10
- Log: reverse integrate contents of win32 branch into mainline
- Branch: perl
- !> (integrate 44 files)
-____________________________________________________________________________
-[ 1080] By: gsar on 1998/06/09 17:37:55
- Log: `p4 integrate -b ASPerl && p4 resolve -at`
- Branch: asperl
- !> (integrate 43 files)
-____________________________________________________________________________
-[ 1079] By: gsar on 1998/06/09 00:59:06
- Log: add examples of diff(1) usage
- Branch: win32/perl
- ! Porting/patching.pod
-____________________________________________________________________________
-[ 1078] By: gsar on 1998/06/09 00:52:23
- Log: undo change#1077
- Branch: win32/perl
- ! sv.c
-____________________________________________________________________________
-[ 1077] By: gsar on 1998/06/06 16:47:32
- Log: make sv_setsv() treat freed SVs like SVt_NULL
- Branch: win32/perl
- ! sv.c
-____________________________________________________________________________
-[ 1076] By: gsar on 1998/06/05 19:03:14
- Log: delete undiscussed AS changes for PPD (broke .packlist
- mechanism)
- Branch: win32/perl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 1075] By: gsar on 1998/06/05 18:18:44
- Log: add AS patch#26 (rename THIS to PERL_OBJEC_THIS to avoid clash
- with the xsubpp-generated symbol)
- Branch: win32/perl
- ! ObjXSub.h perl.c perl.h pp_ctl.c pp_hot.c toke.c
- ! win32/dl_win32.xs
-____________________________________________________________________________
-[ 1074] By: gsar on 1998/06/04 22:45:18
- Log: add AS patch#25 (allow B build with -DPERL_OBJECT)
- Branch: win32/perl
- ! ObjXSub.h byterun.h embed.h embedvar.h ext/B/B.xs intrpvar.h
- ! objpp.h proto.h util.c win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1073] By: nick on 1998/06/04 17:18:14
- Log: resolve -at win32 branch into ansiperl
- Branch: ansiperl
- +> ObjXSub.h XSLock.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h
- +> ipsock.h ipstdio.h objpp.h t/lib/h2ph.h t/lib/h2ph.pht
- +> t/lib/h2ph.t win32/GenCAPI.pl
- !> (integrate 127 files)
-____________________________________________________________________________
-[ 1072] By: gsar on 1998/06/04 01:49:24
- Log: document CORE::GLOBAL:: and global overriding, fix up
- File::DosGlob, testsuited and all
- Branch: win32/perl
- ! lib/File/DosGlob.pm pod/perlsub.pod t/lib/dosglob.t
-____________________________________________________________________________
-[ 1071] By: gsar on 1998/06/03 22:12:55
- Log: add AS patch#24, remove one other instance of error_no
- that was missed (patch#23 was intentionally skipped)
- Branch: win32/perl
- ! embedvar.h globals.c perlvars.h win32/makedef.pl
- ! win32/runperl.c
-____________________________________________________________________________
-[ 1070] By: gsar on 1998/06/01 19:42:06
- Log: fix Liblist.pm to tolerate backslashen in paths
- Branch: win32/perl
- ! lib/ExtUtils/Liblist.pm
-____________________________________________________________________________
-[ 1069] By: gsar on 1998/06/01 07:43:02
- Log: @INC construction on win32 cleaned up
- - perl.dll location based paths should be much more reliable now
- - registry stuff unchanged
- - Config.pm now has all the installfoolib entries for MakeMaker et al
- Branch: win32/perl
- ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/config_h.PL win32/config_sh.PL win32/makefile.mk
- ! win32/runperl.c win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 1068] By: gsar on 1998/05/31 21:52:18
- Log: semctl tweak
- Message-Id: <199805312127.QAA06750@gbarr.connect.net>
- Date: Sun, 31 May 1998 16:27:33 CDT
- From: Graham Barr <gbarr@pobox.com>
- Subject: Not OK: perl 5.00466 on i586-linux-thread 2.0.31
- Branch: win32/perl
- ! doio.c
-____________________________________________________________________________
-[ 1067] By: gsar on 1998/05/31 21:07:44
- Log: minimal fix to enable compiling with -DMULTIPLICITY
- (non-threadsafe regcomp.c globals need revisiting)
- Branch: win32/perl
- ! ObjXSub.h embedvar.h interp.sym intrpvar.h regcomp.c
- ! win32/GenCAPI.pl win32/makedef.pl
-____________________________________________________________________________
-[ 1066] By: gsar on 1998/05/30 21:35:37
- Log: integrate mainline changes (ASPerl branch is identical to
- win32 branch as of this change)
- Branch: asperl
- !> MANIFEST Todo.5.005 embed.h ext/POSIX/POSIX.xs global.sym
- !> lib/ExtUtils/Mksymlists.pm pod/perldelta.pod pp_sys.c
- !> t/op/ipcmsg.t t/op/ipcsem.t win32/Makefile win32/config.bc
- !> win32/config.gc win32/config.vc win32/config_H.bc
- !> win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 1065] By: gsar on 1998/05/30 21:13:06
- Log: change#1060 was inexplicably missing some of the "ensure
- AS stuff does no harm" fixes
- Branch: win32/perl
- ! embed.h global.sym win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1064] By: gsar on 1998/05/30 21:10:27
- Log: integrate mainline to pick up trivial changes
- Branch: win32/perl
- !> MANIFEST pp_sys.c
-
-----------------
-Version 5.004_66
-----------------
-
-____________________________________________________________________________
-[ 1063] By: mbeattie on 1998/05/29 15:19:55
- Log: Remove duplicate win32/TEST line from MANIFEST.
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 1062] By: mbeattie on 1998/05/29 15:18:33
- Log: Add missing ";" to pp_umask (spotted by Jarkko Hietaniemi).
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1061] By: mbeattie on 1998/05/29 12:02:17
- Log: Integrate from win32 branch into mainline (this now pulls in the
- asperl stuff).
- Branch: perl
- +> ObjXSub.h XSLock.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h
- +> ipsock.h ipstdio.h objpp.h t/lib/h2ph.h t/lib/h2ph.pht
- +> t/lib/h2ph.t win32/GenCAPI.pl
- !> (integrate 104 files)
-____________________________________________________________________________
-[ 1060] By: gsar on 1998/05/29 11:05:50
- Log: reverse integrate asperl branch contents (phew!)
- - various fixups to ensure AS stuff does no harm
- - adjust win32/makefiles for the new directory layout (new layout
- looks rather a muddle--needs rework)
- - verified build & test on NT and Solaris/gcc
- Branch: win32/perl
- +> ObjXSub.h XSLock.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h
- +> ipsock.h ipstdio.h objpp.h win32/GenCAPI.pl
- ! ext/POSIX/POSIX.xs lib/ExtUtils/Mksymlists.pm win32/Makefile
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
- !> (integrate 77 files)
-____________________________________________________________________________
-[ 1059] By: gsar on 1998/05/29 08:33:56
- Log: asperl branch verified to build w/o PERL_OBJECT on Solaris and NT
- Branch: asperl
- ! util.c
-____________________________________________________________________________
-[ 1058] By: gsar on 1998/05/29 08:31:09
- Log: type xtext for *.t that were missing it
- Branch: asperl
- ! t/lib/thread.t t/op/nothread.t
-____________________________________________________________________________
-[ 1057] By: gsar on 1998/05/29 08:28:46
- Log: stray t/op/ipc*.t fixups
- Branch: win32/perl
- ! t/op/ipcmsg.t t/op/ipcsem.t
-____________________________________________________________________________
-[ 1056] By: gsar on 1998/05/29 07:41:49
- Log: fixups to make it build and pass tests under both compilers
- Branch: asperl
- ! ObjXSub.h objpp.h proto.h
-____________________________________________________________________________
-[ 1055] By: gsar on 1998/05/29 07:22:51
- Log: integrate mainline changes
- Branch: asperl
- +> t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t
- !> (integrate 69 files)
- Branch: win32/perl
- ! Todo.5.005 pod/perldelta.pod
-____________________________________________________________________________
-[ 1054] By: gsar on 1998/05/29 05:04:03
- Log: add a txt_compare() routine to t/h2ph.t for DOSISH sanity
- Branch: win32/perl
- ! t/lib/h2ph.t
-____________________________________________________________________________
-[ 1053] By: gsar on 1998/05/29 05:01:54
- Log: misc changes
- - remove code that works around lack of I_STDARG (we're a happy ANSI family)
- - leave dump_foo() stubs when not -DDEBUGGING for consistent symbol exports
- Branch: win32/perl
- ! deb.c dump.c ext/DynaLoader/dlutils.c ext/POSIX/POSIX.xs
- ! perl.h perlio.c proto.h regcomp.c run.c scope.c sv.c util.c
- ! x2p/util.c x2p/util.h
-____________________________________________________________________________
-[ 1052] By: gsar on 1998/05/29 02:31:44
- Log: merge changes#1014,1038 from maintbranch
- Branch: win32/perl
- + t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t
- ! MANIFEST Makefile.SH doio.c ext/POSIX/POSIX.xs gv.c
- ! lib/Benchmark.pm lib/ExtUtils/MM_Unix.pm pod/perldebug.pod
- ! pod/perldiag.pod pod/perlfunc.pod pod/perlop.pod
- ! pod/perlre.pod pod/perltie.pod pod/perltrap.pod sv.c
- ! t/io/pipe.t utils/h2ph.PL
-____________________________________________________________________________
-[ 1051] By: gsar on 1998/05/29 01:38:51
- Log: regenerate win32/config_H.?c
- Branch: win32/perl
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 1050] By: gsar on 1998/05/29 01:32:41
- Log: integrate mainline
- Branch: win32/perl
- ! win32/Makefile win32/makefile.mk
- !> Configure INSTALL MANIFEST Porting/Glossary Porting/config.sh
- !> Porting/config_H Porting/patching.pod config_h.SH doio.c
- !> ext/POSIX/hints/sunos_4.pl hints/bsdos.sh hints/openbsd.sh
- !> hints/solaris_2.sh hints/sunos_4_1.sh hints/svr4.sh
- !> lib/FileHandle.pm patchlevel.h perl.h plan9/config.plan9
- !> vms/config.vms win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1049] By: gsar on 1998/05/29 00:57:05
- Log: fix various shenanigans with C<environ>, BC and VC builds now pass
- all tests
- Branch: asperl
- ! globals.c win32/Makefile win32/makefile.mk win32/runperl.c
- ! win32/win32.h win32/win32iop.h
-____________________________________________________________________________
-[ 1048] By: mbeattie on 1998/05/28 18:07:24
- Log: Integrated win32 branch into mainline. The changes to t/op/ipc*.t
- in change 1043 clashed badly with changes made in the win32
- branch. I did an accept on the win32 branch version for now.
- Branch: perl
- +> t/op/die.t
- !> (integrate 52 files)
-____________________________________________________________________________
-[ 1047] By: mbeattie on 1998/05/28 17:59:18
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Subject: [PATCH 5.004_65] Config_65-02-03.diff: SunOS and Solaris hints
- Date: Thu, 28 May 1998 13:27:25 -0400 (EDT)
- Subject: [PATCH 5.004_65] Config_65-03-04.diff: semctl probing
- Date: Thu, 28 May 1998 13:28:21 -0400 (EDT)
- Branch: perl
- ! Configure MANIFEST Porting/Glossary Porting/config.sh
- ! Porting/config_H config_h.SH doio.c ext/POSIX/hints/sunos_4.pl
- ! hints/solaris_2.sh hints/sunos_4_1.sh perl.h vms/config.vms
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1046] By: mbeattie on 1998/05/28 17:55:48
- Log: Back out change 1043 since Andy's forthcoming Config patch
- includes a modified version.
- Branch: perl
- ! Configure config_h.SH doio.c perl.h
-____________________________________________________________________________
-[ 1045] By: mbeattie on 1998/05/28 17:52:40
- Log: Bump patchlevel.h to 66.
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 1044] By: mbeattie on 1998/05/28 17:51:49
- Log: From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Subject: [PATCH] _04m2 <DOC> perlfunc.pod (fwd)
- Date: Fri, 15 May 1998 16:18:26 -0600 (MDT)
- (above minus the t/system.t test pending checking)
- Subject: [PATCH] 5.004[04|65] <DOC> FileHandle.pm
- Date: Wed, 20 May 1998 19:50:50 -0600 (MDT)
- Subject: [PATCH] _65 and _04 <DOC> patching.pod
- Date: Thu, 21 May 1998 16:33:03 -0600 (MDT)
- Branch: perl
- ! Porting/patching.pod lib/FileHandle.pm pod/perlfunc.pod
-____________________________________________________________________________
-[ 1043] By: mbeattie on 1998/05/28 17:42:21
- Log: This change really is:
- Subject: [PATCH] 5.004_65: the infamous semctl()
- Date: Sun, 24 May 1998 16:13:21 +0300 (EET DST)
- From: Jarkko Hietaniemi <jhi@iki.fi>
-
- Change 1041 claimed to be this patch but was really:
- Subject: [PATCH] 5.004_65: t/op/ipc*.t
- Date: Sat, 16 May 1998 00:52:39 +0300 (EET DST)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! Configure config_h.SH doio.c perl.h
-____________________________________________________________________________
-[ 1042] By: mbeattie on 1998/05/28 17:36:57
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Subject: [PATCH 5.004_65] Config_65-01: lchown() detection.
- Date: Thu, 28 May 1998 13:25:21 -0400 (EDT)
- Subject: [PATCH 5.004_65] Config_65-01-02.diff: INSTALL and hints fixes
- Date: Thu, 28 May 1998 13:26:18 -0400 (EDT)
- Branch: perl
- ! Configure INSTALL Porting/Glossary Porting/config.sh
- ! Porting/config_H config_h.SH doio.c hints/bsdos.sh
- ! hints/openbsd.sh hints/svr4.sh plan9/config.plan9
- ! vms/config.vms win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 1041] By: mbeattie on 1998/05/28 17:34:26
- Log: Subject: [PATCH] 5.004_65: the infamous semctl()
- Date: Sun, 24 May 1998 16:13:21 +0300 (EET DST)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! t/op/ipcmsg.t t/op/ipcsem.t
-____________________________________________________________________________
-[ 1040] By: gsar on 1998/05/28 02:06:47
- Log: tweaks to enable Borland build
- Branch: asperl
- ! win32/makefile.mk win32/win32.c
-____________________________________________________________________________
-[ 1039] By: gsar on 1998/05/27 23:29:22
- Log: remove C<#define index strchr> from win32.h (unused, and the
- pollution causes spurious variable name changes in extensions)
- Branch: win32/perl
- ! win32/win32.h
-____________________________________________________________________________
-[ 1038] By: TimBunce on 1998/05/27 17:29:15
- Log: Assorted patches:
-
- ------ BUILD PROCESS ------
-
- Title: "add utilities to make test dependencies"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Msg-ID: <2607.9805211303@tempest.cise.npl.co.uk>
- Files: Makefile.SH
-
- Title: "Add 'make nok' complement to 'make ok'"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0ycRDf-0005Wh-00@taurus.cus.cam.ac.uk>
- Files: Makefile.SH
-
- Title: "further h2ph patches (add enum support)"
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Msg-ID: <Pine.SV4.3.93.980521025541.14577A-100000@xenon.teaching.cs.adelaide.edu.au>
- Files: MANIFEST t/lib/h2ph.pht t/lib/h2ph.t utils/h2ph.PL
-
- ------ CORE LANGUAGE ------
-
- Title: "Fix %! error spelling and add perldiag.pod entry"
- From: Graham Barr <gbarr@pobox.com>, Tim Bunce
- Msg-ID: <19980524193101.A573@pobox.com>
- Files: pod/perldiag.pod gv.c
-
- Title: "Remove obsolete Win32 uppercasing ENV code"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805201510.LAA28676@aatma.engin.umich.edu>
- Files: perl.c
-
- Title: "Don't mung $! on implicit close"
- From: Chip Salzenberg <chip@perl.org>
- Msg-ID: <19980525113309.A15845@perlsupport.com>
- Files: doio.c
-
- Title: "Maint trial 3 fails on SunOS 4.1.3 with Sun cc"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980527113114.26608D-100000@newton.phys>
- Files: doio.c
-
- ------ DOCUMENTATION ------
-
- Title: "doc patch: you canna return an array ( list context: || vs or)"
- From: Jarkko Hietaniemi <jhi@cc.hut.fi>
- Msg-ID: <oeeemxguf5h.fsf_-_@alpha.hut.fi>
- Files: pod/perldebug.pod pod/perlfunc.pod pod/perltie.pod pod/perltrap.pod
-
- Title: "doc patch: @ needs escaping in m/\Q\E/ environment"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yecim-0002qr-00@taurus.cus.cam.ac.uk>
- Files: pod/perlop.pod pod/perlre.pod
-
- Title: "Discrepancy between perlop.pod and m// operator", "Doc fix: Only
- with /g does list context get matches without parens"
- From: Greg Chapman <glc@well.com>, Tom Christiansen
- <tchrist@jhereg.perl.com>, Tom Phoenix
- <rootbeer@teleport.com>
- Msg-ID: <000201bd865e$f3bf72e0$1f04400c@assigned.well.com>,
- <199805231559.JAA21316@jhereg.perl.com>,
- <Pine.GSO.3.96.980523084947.22348I-100000@user2.teleport.com>
- Files: pod/perlop.pod
-
- Title: "Documenting last/next/redo even further"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Tom Phoenix
- <rootbeer@teleport.com>
- Msg-ID: <E0yec2h-0000B9-00@taurus.cus.cam.ac.uk>,
- <Pine.GSO.3.96.980526111426.27437K-100000@user2.teleport.com>
- Files: pod/perlfunc.pod
-
- Title: "Documenting last/next/redo within continue block"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980525214558.7133H-100000@user2.teleport.com>
- Files: pod/perlfunc.pod
-
- Title: "Document stat return in scalar context"
- From: Mark-Jason Dominus <mjd@plover.com>
- Files: pod/perlfunc.pod
-
- ------ EXTENSIONS ------
-
- Title: "Better LD_RUN_PATH handling on IRIX"
- From: "W. Phillip Moore" <wpm@ms.com>
- Msg-ID: <199805212206.SAA07504@zappa.morgan.com>
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Dealing with <unistd.h> in POSIX and SunOS"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980527115256.26608F-100000@newton.phys>
- Files: ext/POSIX/hints/sunos_4.pl hints/sunos_4_1.sh ext/POSIX/POSIX.xs
-
- ------ LIBRARY ------
-
- Title: "Fix FileHandle.pm example bug"
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Msg-ID: <Pine.LNX.3.96.980520194825.10845C-100000@perrin.dimensional.com>
- Files: lib/FileHandle.pm
-
- Title: "Add zero/negative $count docs for Benchmark.pm"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0ydEAr-0006NV-00@taurus.cus.cam.ac.uk>
- Files: lib/Benchmark.pm
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Add test suite recommendations to Porting/patching.pod"
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Msg-ID: <Pine.LNX.3.96.980521162925.3568B-100000@perrin.dimensional.com>
- Files: Porting/patching.pod
-
- ------ TESTS ------
-
- Title: "Fix looping bug in t/io/pipe.t"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yc737-0006fB-00@taurus.cus.cam.ac.uk>
- Files: t/io/pipe.t
- Branch: maint-5.004/perl
- ! MANIFEST Makefile.SH Porting/patching.pod doio.c
- ! ext/POSIX/POSIX.xs ext/POSIX/hints/sunos_4.pl gv.c
- ! hints/sunos_4_1.sh lib/Benchmark.pm lib/ExtUtils/MM_Unix.pm
- ! lib/FileHandle.pm perl.c pod/perldebug.pod pod/perldiag.pod
- ! pod/perlfunc.pod pod/perlop.pod pod/perlre.pod pod/perltie.pod
- ! pod/perltrap.pod t/io/pipe.t t/lib/h2ph.pht t/lib/h2ph.t
- ! utils/h2ph.PL
-____________________________________________________________________________
-[ 1037] By: gsar on 1998/05/27 16:18:30
- Log: add AS patch#22 (fix to make die_exit.t pass)
- Branch: asperl
- ! win32/runperl.c
-____________________________________________________________________________
-[ 1036] By: gsar on 1998/05/27 12:50:34
- Log: add AS patch#21 (misc. fixes)
- Branch: asperl
- ! ObjXSub.h lib/ExtUtils/MM_Unix.pm objpp.h perl.h
- ! win32/GenCAPI.pl win32/Makefile win32/makefile.mk
- ! win32/win32.c win32/win32sck.c
-____________________________________________________________________________
-[ 1035] By: gsar on 1998/05/26 17:26:17
- Log: more changes to satisfy non-debug VC build (C-API doesn't
- build, and the testsuite still won't run)
- Branch: asperl
- ! ObjXSub.h deb.c dump.c ext/POSIX/POSIX.xs globals.c proto.h
- ! regcomp.c run.c scope.c sv.c util.c win32/GenCAPI.pl
-____________________________________________________________________________
-[ 1034] By: gsar on 1998/05/26 17:20:22
- Log: remove doubled hunk (perforce auto-integrate oddity)
- Branch: win32/perl
- ! pod/perldiag.pod
-____________________________________________________________________________
-[ 1033] By: gsar on 1998/05/26 13:39:14
- Log: tweaks to make it build with the Borland compiler. Won't run
- testsuite because @INC intuition from location of perlcore.dll seems
- to be broken. Also, system() and qx// seem broken as well.
- Branch: asperl
- ! ObjXSub.h doio.c embedvar.h ext/POSIX/POSIX.xs interp.sym
- ! intrpvar.h objpp.h perl.c perl.h perlvars.h proto.h regcomp.c
- ! regexec.c toke.c
-____________________________________________________________________________
-[ 1032] By: gsar on 1998/05/24 23:13:05
- Log: tweak Benchmark.pm to restore old timestr() behavior--show wall secs
- Branch: win32/perl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 1031] By: gsar on 1998/05/24 05:36:44
- Log: tweak makefiles
- Branch: asperl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 1030] By: gsar on 1998/05/23 18:58:23
- Log: merge changes#1016,1018 from maintbranch (1017 is n/a)
- Branch: win32/perl
- ! pp_sys.c t/op/die.t
-____________________________________________________________________________
-[ 1029] By: gsar on 1998/05/23 18:55:13
- Log: merge change#1015 from maintbranch (must revisit 1014 later, is
- incomplete)
- Branch: win32/perl
- ! embed.h global.sym op.c pp.c proto.h sv.c
-____________________________________________________________________________
-[ 1028] By: gsar on 1998/05/23 18:25:14
- Log: merge change#1013 from maintbranch (1012 is n/a)
- Branch: win32/perl
- ! toke.c
-____________________________________________________________________________
-[ 1027] By: gsar on 1998/05/23 18:02:21
- Log: merge change#1011 from maintbranch
- Branch: win32/perl
- ! perl.c pod/perldiag.pod pod/perlfunc.pod pp_ctl.c
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 1026] By: nick on 1998/05/23 08:45:04
- Log: Ids of msgs and sems can be zero, so change || die to a defined() test
- Branch: win32/perl
- ! t/op/ipcmsg.t t/op/ipcsem.t
-____________________________________________________________________________
-[ 1025] By: nick on 1998/05/23 08:36:36
- Log: Resolve win32 into ansiperl
- Branch: ansiperl
- +> t/op/die.t
- !> (integrate 42 files)
-____________________________________________________________________________
-[ 1024] By: gsar on 1998/05/21 21:11:12
- Log: more mingw32 tweaks
- Branch: win32/perl
- ! ext/POSIX/POSIX.xs t/pragma/locale.t
-____________________________________________________________________________
-[ 1023] By: gsar on 1998/05/21 19:15:02
- Log: fix problematic change#965 from maintbranch
- Message-Id: <199805162145.RAA02552@monk.mps.ohio-state.edu>
- Date: Sat, 16 May 1998 17:45:22 EDT
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: Re: Not OK (after all) : perl 5.00404 +MAINT_TRIAL_3 on sun4-solaris 2.5
- Branch: win32/perl
- ! gv.c op.c t/comp/proto.t
-____________________________________________________________________________
-[ 1022] By: gsar on 1998/05/21 01:37:04
- Log: fix POSIX for mingw32
- Branch: win32/perl
- ! ext/POSIX/POSIX.xs win32/config.gc win32/config_H.gc
-____________________________________________________________________________
-[ 1021] By: gsar on 1998/05/20 15:02:21
- Log: remove strupr() from perl.c
- Branch: win32/perl
- ! perl.c
-____________________________________________________________________________
-[ 1020] By: TimBunce on 1998/05/19 22:41:40
- Log: Title: "fix up descrepancy in h2ph test"
- From: Tim Bunce
- Files: t/lib/h2ph.pht
- Branch: maint-5.004/perl
- ! t/lib/h2ph.pht
-____________________________________________________________________________
-[ 1019] By: TimBunce on 1998/05/19 22:17:15
- Log: Title: "add a test to check return value from successful s/// (there was none!)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805161759.NAA12995@aatma.engin.umich.edu>
- Files: t/op/subst.t
-
- Title: "fix up descrepancy in h2ph test"
- From: Tim Bunce
- Files: t/lib/h2ph.t
- Branch: maint-5.004/perl
- ! t/lib/h2ph.t t/op/subst.t
-____________________________________________________________________________
-[ 1018] By: TimBunce on 1998/05/19 21:56:32
- Log: Title: "fix mem leak and core dump from change 1016"
- From: Tim Bunce
- Files: pp_sys.c
- Branch: maint-5.004/perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 1017] By: TimBunce on 1998/05/19 21:26:03
- Log: Title: "qsort, Win32 "POSIX" plus other devel changes for patch-compatibility"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Files: MANIFEST cflags.SH pod/perlembed.pod pod/perlfunc.pod
- pod/perlguts.pod pod/perlref.pod pod/perlrun.pod
- pod/perlxstut.pod av.h embed.h hv.h op.h perl.h pp.h
- proto.h Todo av.c cygwin32/perlgcc cygwin32/perlld deb.c
- doio.c doop.c ext/ODBM_File/ODBM_File.xs
- ext/POSIX/Makefile.PL ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs
- gv.c hv.c interp.sym lib/AutoSplit.pm lib/Cwd.pm
- lib/FindBin.pm lib/strict.pm lib/ExtUtils/Command.pm
- lib/ExtUtils/Liblist.pm lib/ExtUtils/MakeMaker.pm
- lib/ExtUtils/Manifest.pm lib/File/Basename.pm
- lib/File/Find.pm lib/File/Path.pm lib/Getopt/Long.pm
- lib/Getopt/Std.pm lib/Net/Ping.pm lib/Pod/Html.pm
- lib/Pod/Text.pm lib/Term/Cap.pm lib/Test/Harness.pm mg.c
- op.c perl.c pod/pod2latex.PL pod/pod2man.PL pp.c pp_ctl.c
- pp_hot.c pp_sys.c scope.c sv.c t/lib/posix.t
- t/pragma/locale.t utils/perldoc.PL win32/win32.h toke.c
- universal.c util.c win32/Makefile win32/config_H.bc
- win32/config_H.vc win32/dl_win32.xs win32/makedef.pl
- win32/makefile.mk win32/perlglob.c win32/runperl.c
- win32/win32.c win32/win32sck.c x2p/s2p.PL
- Branch: maint-5.004/perl
- ! MANIFEST Todo av.c av.h cflags.SH cygwin32/perlgcc
- ! cygwin32/perlld deb.c doio.c doop.c embed.h
- ! ext/ODBM_File/ODBM_File.xs ext/POSIX/Makefile.PL
- ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs gv.c hv.c hv.h
- ! interp.sym lib/AutoSplit.pm lib/Cwd.pm lib/ExtUtils/Command.pm
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MakeMaker.pm
- ! lib/ExtUtils/Manifest.pm lib/File/Basename.pm lib/File/Find.pm
- ! lib/File/Path.pm lib/FindBin.pm lib/Getopt/Long.pm
- ! lib/Getopt/Std.pm lib/Net/Ping.pm lib/Pod/Html.pm
- ! lib/Pod/Text.pm lib/Term/Cap.pm lib/Test/Harness.pm
- ! lib/strict.pm mg.c op.c op.h perl.c perl.h pod/perlembed.pod
- ! pod/perlfunc.pod pod/perlguts.pod pod/perlref.pod
- ! pod/perlrun.pod pod/perlxstut.pod pod/pod2latex.PL
- ! pod/pod2man.PL pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h
- ! scope.c sv.c t/lib/posix.t t/pragma/locale.t toke.c
- ! universal.c util.c utils/perldoc.PL win32/Makefile
- ! win32/config_H.bc win32/config_H.vc win32/dl_win32.xs
- ! win32/makedef.pl win32/makefile.mk win32/perlglob.c
- ! win32/runperl.c win32/win32.c win32/win32.h win32/win32sck.c
- ! x2p/s2p.PL
-____________________________________________________________________________
-[ 1016] By: TimBunce on 1998/05/19 20:37:42
- Log: Title: "eval { die $obj }; die; calls $obj->PROPAGATE"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <3561D147.7F3E0C88@ti.com>
- Files: pp_sys.c t/op/die.t
- Branch: maint-5.004/perl
- ! pp_sys.c t/op/die.t
-____________________________________________________________________________
-[ 1015] By: TimBunce on 1998/05/19 20:07:01
- Log: Title: "loosen const sub re-defined warnings"
- From: Doug MacEachern <dougm@pobox.com>
- Msg-ID: <355F713B.6A4C0F04@pobox.com>
- Files: proto.h global.sym op.c pp.c sv.c
- Branch: maint-5.004/perl
- ! global.sym op.c pp.c proto.h sv.c
-____________________________________________________________________________
-[ 1014] By: TimBunce on 1998/05/19 19:48:18
- Log: Title: "s/FORMLINE/FORMAT/ in sv.c"
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Msg-ID: <l03130303b1837a243670@[194.222.64.89]>
- Files: sv.c
-
- Title: "Further h2ph patches (including a test suite)"
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Msg-ID: <Pine.SV4.3.93.980516234652.2100A-100000@xenon.teaching.cs.adelaide.edu.au>
- Files: MANIFEST t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t utils/h2ph.PL
- Branch: maint-5.004/perl
- + t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t
- ! MANIFEST sv.c utils/h2ph.PL
-____________________________________________________________________________
-[ 1013] By: TimBunce on 1998/05/19 19:14:13
- Log: Title: "Remove change 673 (Allow empty BLOCK in code)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Ilya Zakharevich
- <ilya@math.ohio-state.edu>
- Msg-ID: <199805151857.OAA29586@monk.mps.ohio-state.edu>,
- <199805151931.PAA23086@aatma.engin.umich.edu>,
- <19980129002112Z13378-6931+226@scapa.cs.ualberta.ca>
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 1012] By: TimBunce on 1998/05/19 19:03:32
- Log: Title: "Further SysV sem/msg fixes and removal of non-portable tests"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>, Jarkko Hietaniemi
- <jhi@iki.fi>
- Msg-ID: <199805182028.XAA15717@alpha.hut.fi>,
- <Pine.SUN.3.96.980518133606.17488A-100000@newton.phys>
- Files: MANIFEST Configure config_h.SH perl.h doio.c t/op/ipcmsg.t
- t/op/ipcsem.t
- Branch: maint-5.004/perl
- ! Configure MANIFEST config_h.SH doio.c perl.h t/op/ipcmsg.t
- ! t/op/ipcsem.t
-____________________________________________________________________________
-[ 1011] By: TimBunce on 1998/05/19 17:55:38
- Log: Title: "interp.sym is missing C<e_script> after -e fix"
- From: jan.dubois@ibm.net (Jan Dubois)
- Msg-ID: <355d460d.7621669@smtp1.ibm.net>
- Files: embed.h interp.sym
-
- Title: "Undo changed error message which breaks Tk"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805161557.LAA08106@aatma.engin.umich.edu>
- Files: pp_ctl.c
-
- Title: "Minor fixups to new -e script code"
- From: Tim Bunce
- Files: perl.c
-
- Title: "Remove old diags not relevant after -e fix"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>, Gurusamy Sarathy
- <gsar@engin.umich.edu>, Tim.Bunce@ig.co.uk (Tim Bunce)
- Msg-ID: <199805172143.RAA07896@aatma.engin.umich.edu>,
- <199805181335.OAA07008@toad.ig.co.uk>,
- <Pine.SUN.3.96.980517104819.16183B-100000@newton.phys>
- Files: pod/perldiag.pod
-
- Title: "more examples for vec()"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980518093728.28732P-100000@user2.teleport.com>
- Files: pod/perlfunc.pod
-
- Title: ""make ok" (perlbug -ok) should not be interactive"
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>, Jarkko Hietaniemi
- <jhi@iki.fi>
- Msg-ID: <199805160942.MAA20171@alpha.hut.fi>,
- <l03130300b1834f9732a0@[194.222.64.89]>
- Files: utils/perlbug.PL
- Branch: maint-5.004/perl
- ! embed.h interp.sym perl.c pod/perldiag.pod pod/perlfunc.pod
- ! pp_ctl.c utils/perlbug.PL
-____________________________________________________________________________
-[ 1010] By: gsar on 1998/05/18 09:40:58
- Log: integrate mainline changes (untested)
- Branch: asperl
- +> Porting/Contract Porting/patching.pod README.beos beos/nm.c
- +> ext/DynaLoader/DynaLoader.pm.PL ext/POSIX/hints/bsdos.pl
- +> ext/POSIX/hints/freebsd.pl ext/POSIX/hints/netbsd.pl
- +> ext/POSIX/hints/openbsd.pl hints/beos.sh hints/openbsd.sh
- +> pod/perldelta4.pod t/op/defins.t t/op/die.t t/op/die_exit.t
- +> t/op/ipcmsg.t t/op/ipcsem.t t/op/pos.t utils/perlcc.PL
- - ext/DynaLoader/DynaLoader.pm
- ! win32/win32.c
- !> (integrate 234 files)
-____________________________________________________________________________
-[ 1009] By: gsar on 1998/05/18 07:51:19
- Log: more whitespace tweaks from maintbranch
- Branch: win32/perl
- ! av.c perl.c pp_ctl.c pp_sys.c toke.c
-____________________________________________________________________________
-[ 1008] By: gsar on 1998/05/17 22:37:20
- Log: sundry whitespace cleanups from maintbranch
- Branch: win32/perl
- ! Porting/Contract XSUB.h av.c gv.c mg.c perl.c
-____________________________________________________________________________
-[ 1007] By: gsar on 1998/05/16 21:59:46
- Log: integrate mainline
- Branch: win32/perl
- !> INSTALL doio.c lib/strict.pm perl.c perl.h pod/perldebug.pod
- !> t/op/ipcmsg.t t/op/ipcsem.t
-____________________________________________________________________________
-[ 1006] By: gsar on 1998/05/16 21:54:23
- Log: merge changes#996,998,999 from maintbranch
- Branch: win32/perl
- ! Changes5.004 Porting/makerel t/base/lex.t toke.c
-____________________________________________________________________________
-[ 1005] By: gsar on 1998/05/16 21:49:47
- Log: merge change#995 from maintbranch, tweak interp.sym and
- run embed.pl
- Branch: win32/perl
- ! embedvar.h interp.sym intrpvar.h perl.c
-____________________________________________________________________________
-[ 1004] By: gsar on 1998/05/16 21:27:18
- Log: merge changes#989,990,992 from maintbranch
- Branch: win32/perl
- + t/op/die.t
- ! MANIFEST installperl pod/perldiag.pod pp_ctl.c t/op/ipcmsg.t
-____________________________________________________________________________
-[ 1003] By: gsar on 1998/05/16 21:16:47
- Log: sync config*.gc with others, and verify that nothing from
- change#986 needs to be merged
- Branch: win32/perl
- ! win32/config.gc win32/config_H.gc
-____________________________________________________________________________
-[ 1002] By: gsar on 1998/05/16 21:04:04
- Log: merge change#985 from maintbranch
- Branch: win32/perl
- ! lib/AutoSplit.pm lib/ExtUtils/Manifest.pm pp_ctl.c pp_sys.c
- ! util.c
-____________________________________________________________________________
-[ 1001] By: gsar on 1998/05/16 17:53:16
- Log: add a test to check return value from successful s/// (there was none!)
- Branch: win32/perl
- ! t/op/subst.t
-____________________________________________________________________________
-[ 1000] By: gsar on 1998/05/16 17:42:34
- Log: fix misplaced SPAGAIN that caused successful s/// to fail to
- return a value on the stack
- Branch: win32/perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 999] By: TimBunce on 1998/05/15 23:04:30
- Log: Title: "Update Porting/makerel script for perforce dir structure"
- From: Tim Bunce
- Files: Porting/makerel
- Branch: maint-5.004/perl
- ! Porting/makerel
-____________________________________________________________________________
-[ 998] By: TimBunce on 1998/05/15 22:49:55
- Log: Title: "Updated Changes file for trial 3"
- From: Tim Bunce
- Files: Changes
- Branch: maint-5.004/perl
- ! Changes
-____________________________________________________________________________
-[ 997] By: gsar on 1998/05/15 22:21:41
- Log: merge changes#982,984 from maintbranch
- Branch: win32/perl
- ! gv.c lib/English.pm perl.c pod/perlfunc.pod t/io/pipe.t
- ! t/op/exec.t t/op/ipcsem.t util.c utils/h2ph.PL utils/h2xs.PL
-____________________________________________________________________________
-[ 996] By: TimBunce on 1998/05/15 22:19:32
- Log: Title: "Negative array subscript unrecognized in regex"
- From: Mark-Jason Dominus <mjd@plover.com>,
- h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <19980425040819.13828.qmail@plover.com>,
- <199805151514.RAA04121@dorlas.elsevier.nl>
- Files: t/base/lex.t toke.c
-
- Title: "Remove e_fp from toke.c after change 955"
- From: Tim Bunce
- Files: toke.c
- Branch: maint-5.004/perl
- ! t/base/lex.t toke.c
-____________________________________________________________________________
-[ 995] By: TimBunce on 1998/05/15 22:08:32
- Log: Title: "Fix -e security hole (no longer uses temp file)"
- From: Tim Bunce
- Files: embed.h perl.h perl.c
- Branch: maint-5.004/perl
- ! embed.h perl.c perl.h
-____________________________________________________________________________
-[ 994] By: gsar on 1998/05/15 22:08:17
- Log: merge change#981 from maintbranch, add XXX comment about
- supporting %! for usethreads case
- Branch: win32/perl
- ! gv.c op.c
-____________________________________________________________________________
-[ 992] By: TimBunce on 1998/05/15 22:01:32
- Log: Title: "install non-backwards compatible .pm files into archlib"
- From: Tim Bunce
- Files: installperl
-
- Title: "revert "Can't locate" message to original for maintenance"
- From: Tim Bunce
- Msg-ID: <199804240047.SAA24155@den-mdev1.co.csgsystems.com>
- Files: pod/perldiag.pod pp_ctl.c
- Branch: maint-5.004/perl
- ! installperl pod/perldiag.pod pp_ctl.c
-____________________________________________________________________________
-[ 991] By: gsar on 1998/05/15 21:35:00
- Log: reverse integrate ansiperl (all except the
- C<attrs qw(package locked)> stuff, and the duplicate hunks)
- i.e. prototype fixes, perldoc.PL enhancements, and s/comment/comment_t/g
- Branch: win32/perl
- !> bytecode.h byterun.c cv.h ext/attrs/attrs.pm
- !> ext/attrs/attrs.xs pod/perlop.pod pp_hot.c sv.c toke.c
- !> utils/perldoc.PL
-____________________________________________________________________________
-[ 990] By: TimBunce on 1998/05/15 16:54:18
- Log: Title: "Add tests for die $ref"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <355C6297.121B576B@ti.com>
- Files: MANIFEST t/op/die.t
- Branch: maint-5.004/perl
- + t/op/die.t
- ! MANIFEST
-____________________________________________________________________________
-[ 989] By: TimBunce on 1998/05/15 16:38:19
- Log: Title: "Fix t/op/ipcmsg.t for Digital UNIX"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199805151337.QAA01174@alpha.hut.fi>
- Files: t/op/ipcmsg.t
- Branch: maint-5.004/perl
- ! t/op/ipcmsg.t
-____________________________________________________________________________
-[ 988] By: mbeattie on 1998/05/15 16:28:08
- Log: Patch from Sarathy to fix up win32 integration. Patch from Jarkko
- (manually applied and tweaked) to fix up SysV IPC semaphores for
- Solaris and Linux (pre-glibc and glibc). Fix up t/op/ipcmsg.t and
- t/op/ipcsem.t for platforms which wanted to skip test. Completely
- disable ipcsem.t since it doesn't seem to work properly even when
- not skipped. This is _65.
- Branch: perl
- ! INSTALL doio.c lib/strict.pm perl.c perl.h pod/perldebug.pod
- ! t/op/ipcmsg.t t/op/ipcsem.t
-____________________________________________________________________________
-[ 987] By: nick on 1998/05/15 16:03:35
- Log: Integrate win32
- Branch: ansiperl
- +> Porting/Contract Porting/patching.pod README.beos beos/nm.c
- +> ext/DynaLoader/DynaLoader.pm.PL ext/POSIX/hints/bsdos.pl
- +> ext/POSIX/hints/freebsd.pl ext/POSIX/hints/netbsd.pl
- +> ext/POSIX/hints/openbsd.pl hints/beos.sh hints/openbsd.sh
- +> pod/perldelta4.pod t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t
- +> t/op/pos.t utils/perlcc.PL
- - ext/DynaLoader/DynaLoader.pm
- !> (integrate 208 files)
-____________________________________________________________________________
-[ 986] By: TimBunce on 1998/05/15 15:28:45
- Log: Title: "Patches for BeOS port of Perl, courtesy of Tom Spindler"
- From: Jarkko Hietaniemi <jhi@iki.fi>, Tom Spindler
- Msg-ID: <199805042312.CAA09025@alpha.hut.fi>
- Files: MANIFEST Configure config_h.SH hints/beos.sh pod/perlfunc.pod
- Porting/Glossary README.beos beos/nm.c lib/Term/ReadLine.pm
- plan9/config.plan9 pp_sys.c t/io/pipe.t vms/config.vms
- win32/config.bc win32/config.vc win32/config_H.bc
- win32/config_H.vc
- Branch: maint-5.004/perl
- + README.beos beos/nm.c hints/beos.sh
- ! Configure MANIFEST Porting/Glossary config_h.SH
- ! lib/Term/ReadLine.pm plan9/config.plan9 pod/perlfunc.pod
- ! pp_sys.c t/io/pipe.t vms/config.vms win32/config.bc
- ! win32/config.vc win32/config_H.bc win32/config_H.vc
-____________________________________________________________________________
-[ 985] By: TimBunce on 1998/05/15 15:02:43
- Log: Title: "allow die $ref"
- From: Graham Barr <gbarr@ti.com>, Tim.Bunce@ig.co.uk (Tim Bunce)
- Msg-ID: <199805151351.OAA01985@toad.ig.co.uk>, <355C3E67.AF25B9F7@ti.com>
- Files: pp_ctl.c pp_sys.c util.c
-
- Title: "ExtUtils::Manifest could truncate files during "make dist""
- From: "James E Jurach Jr." <muaddib@arrakis.int.ein.cz>,
- koenig@kulturbox.de (Andreas J. Koenig)
- Msg-ID: <199805111048.MAA02573@arrakis.int.ein.cz>,
- <sfc90o8bgie.fsf@dubravka.in-berlin.de>
- Files: lib/ExtUtils/Manifest.pm
-
- Title: "Autosplit doesn't like upper case letters in sub names on VMS"
- From: Dan Sugalski <sugalskd@osshe.edu>
- Msg-ID: <3.0.5.32.19980330152332.009cb130@osshe.edu>
- Files: lib/AutoSplit.pm
-
- Title: "AutoSplit/AutoLoaded subs: give useful line numbers in warnings etc"
- From: "Jesse N. Glick" <jglick@sig.bsh.com>, koenig@anna.mind.de (Andreas
- J. Koenig), larry@wall.org (Larry Wall)
- Msg-ID: <199709292015.NAA09627@wall.org>, <342FCDDF.23534195@sig.bsh.com>,
- <sfc202c9jsb.fsf@anna.in-berlin.de>,
- <sfc3efg5rhg.fsf@dubravka.in-berlin.de>
- Files: lib/AutoSplit.pm
- Branch: maint-5.004/perl
- ! lib/AutoSplit.pm lib/ExtUtils/Manifest.pm pp_ctl.c pp_sys.c
- ! util.c
-____________________________________________________________________________
-[ 984] By: TimBunce on 1998/05/15 14:18:52
- Log: ------ CORE LANGUAGE ------
-
- Title: "Fix close pipe returning status from wrong child"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, kstar@chapin.edu@ig.co.uk ()
- Msg-ID: <199805142313.TAA02684@chapin.edu>,
- <E0yZ8ah-0005d8-00@taurus.cus.cam.ac.uk>
- Files: t/io/pipe.t util.c
-
- Title: "Avoid English.pm triggering load of Errno.pm"
- From: Tim Bunce
- Files: gv.c lib/English.pm
-
- ------ DOCUMENTATION ------
-
- Title: "Document child exit cause a parent sleep to end early"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yZwMK-0000D9-00@taurus.cus.cam.ac.uk>
- Files: pod/perlfunc.pod
-
- ------ EXTENSIONS ------
-
- Title: "BSD Platforms need STRUCT_TM_HASZONE for POSIX"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980512095524.8158C-100000@newton.phys>
- Files: MANIFEST ext/POSIX/hints/bsdos.pl ext/POSIX/hints/freebsd.pl
- ext/POSIX/hints/netbsd.pl ext/POSIX/hints/openbsd.pl
-
- Title: "MM_VMS.pm fixes for building external library"
- From: Dan Sugalski <sugalskd@ous.edu>
- Msg-ID: <3.0.5.32.19980511160542.009dd480@ous.edu>
- Files: lib/ExtUtils/MM_VMS.pm
-
- Title: "Appease picky DEC compiler in POSIX.xs"
- From: Dan Sugalski <sugalskd@ous.edu>
- Msg-ID: <3.0.5.32.19980511161434.009f8bb0@ous.edu>
- Files: ext/POSIX/POSIX.xs
-
- ------ TESTS ------
-
- Title: "Fix constant detection in t/op/ipcsem.t for Digit UNIX"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199805121212.PAA15351@alpha.hut.fi>
- Files: t/op/ipcsem.t
-
- Title: "Fix doc bug for system() return value"
- From: Daniel Grisinger <dgris@perrin.dimensional.com>
- Msg-ID: <Pine.LNX.3.96.980514165608.4062A-100000@perrin.dimensional.com>
- Files: pod/perlfunc.pod t/op/exec.t
-
- ------ UTILITIES ------
-
- Title: "Avoid possible constant autoload loop"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Graham Barr <gbarr@ti.com>, Ilya
- Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199805141910.PAA26994@monk.mps.ohio-state.edu>,
- <355B475A.C5AD4B90@ti.com>,
- <E0ya11X-0000hm-00@taurus.cus.cam.ac.uk>
- Files: utils/h2xs.PL
-
- Title: "Further improvements to h2ph.PL"
- From: kstar@chapin.edu
- Msg-ID: <199805130241.WAA25459@chapin.edu>
- Files: utils/h2ph.PL
- Branch: maint-5.004/perl
- + ext/POSIX/hints/bsdos.pl ext/POSIX/hints/freebsd.pl
- + ext/POSIX/hints/netbsd.pl ext/POSIX/hints/openbsd.pl
- ! MANIFEST ext/POSIX/POSIX.xs gv.c lib/English.pm
- ! lib/ExtUtils/MM_VMS.pm pod/perlfunc.pod t/io/pipe.t
- ! t/op/exec.t t/op/ipcsem.t util.c utils/h2ph.PL utils/h2xs.PL
-
-----------------
-Version 5.004_64
-----------------
-
-____________________________________________________________________________
-[ 983] By: mbeattie on 1998/05/15 14:04:17
- Log: Integrate win32 branch into mainline.
- Branch: perl
- +> Porting/patching.pod t/op/defins.t
- !> (integrate 107 files)
-____________________________________________________________________________
-[ 982] By: TimBunce on 1998/05/15 12:33:26
- Log: Title: "comment init_postdump_symbols issues"
- From: Tim Bunce
- Files: perl.c
-
- Title: "Improve sort docs re SUBNAME"
- From: circle@azstarnet.com
- Msg-ID: <199804281828.LAA22737@andromeda.azstarnet.com>
- Files: pod/perlfunc.pod
- Branch: maint-5.004/perl
- ! perl.c pod/perlfunc.pod
-____________________________________________________________________________
-[ 981] By: TimBunce on 1998/05/15 11:47:28
- Log: Title: "Add hook to tie %! to external Errno.pm module (not included)"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <355080CD.1111BC81@ti.com>
- Files: gv.c
- Branch: maint-5.004/perl
- ! gv.c
-____________________________________________________________________________
-[ 980] By: gsar on 1998/05/15 06:16:13
- Log: add doc for C<+{}> vs. C<{;}> disambiguation
- Branch: win32/perl
- ! pod/perlref.pod
-____________________________________________________________________________
-[ 979] By: gsar on 1998/05/15 04:59:47
- Log: tweaks to win32 makefiles. This version builds and passes all
- tests on Solaris/gcc, win32/[bv]c. Looks all set to go.
- Branch: win32/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 978] By: gsar on 1998/05/15 02:41:58
- Log: merge changes#922,944,949,965,970 from maintbranch
- Branch: win32/perl
- + Porting/patching.pod t/op/defins.t
- ! MANIFEST Porting/makerel ext/POSIX/POSIX.pod gv.c gv.h hv.c
- ! lib/File/Find.pm op.c pod/Makefile pod/perlfunc.pod
- ! pod/perlguts.pod pod/perlop.pod pod/pod2man.PL
- ! t/lib/filefind.t t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 977] By: gsar on 1998/05/15 02:15:25
- Log: merge changes#906,907,909,910 from maintbranch
- Branch: win32/perl
- ! MANIFEST doio.c doop.c embed.h embedvar.h global.sym
- ! keywords.h lib/Carp.pm lib/File/Basename.pm mg.c opcode.h
- ! perl.c perl.h pod/perldiag.pod pp.c pp_hot.c proto.h sv.c
- ! util.c
-____________________________________________________________________________
-[ 976] By: gsar on 1998/05/15 01:34:53
- Log: merge change#905 from maintbranch, minor fixes to get
- clean build+test on Solaris
- Branch: win32/perl
- ! doop.c dump.c embed.h embedvar.h lib/strict.pm mg.c op.h
- ! opcode.h pod/perlop.pod pod/perlre.pod pp_ctl.c pp_hot.c
- ! regcomp.c sv.c t/op/taint.t toke.c
-____________________________________________________________________________
-[ 975] By: gsar on 1998/05/14 23:34:26
- Log: merge change#904 from maintbranch
- Branch: win32/perl
- ! doop.c ext/DynaLoader/dl_aix.xs ext/IO/lib/IO/Socket.pm
- ! ext/NDBM_File/NDBM_File.pm lib/strict.pm lib/subs.pm
- ! lib/vars.pm op.c perl.c pod/perldiag.pod pod/perlembed.pod
- ! pod/perlfunc.pod pod/perlsec.pod pp_ctl.c sv.c utils/h2ph.PL
- ! vms/descrip.mms
-____________________________________________________________________________
-[ 974] By: gsar on 1998/05/14 23:11:05
- Log: merge change#897 from maintbranch
- Branch: win32/perl
- ! Porting/Contract Todo doio.c emacs/ptags embed.h ext/IO/IO.pm
- ! ext/Opcode/Opcode.pm lib/Carp.pm lib/ExtUtils/MM_Unix.pm
- ! lib/Pod/Html.pm lib/Term/ReadLine.pm lib/chat2.pl opcode.h
- ! opcode.pl perl.c pod/perlapio.pod pod/perlcall.pod
- ! pod/perldebug.pod pod/perldelta.pod pod/perldelta4.pod
- ! pod/perldiag.pod pod/perlembed.pod pod/perlfaq2.pod
- ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- ! pod/perlfaq7.pod pod/perlfaq8.pod pod/perlform.pod
- ! pod/perlfunc.pod pod/perlguts.pod pod/perlhist.pod
- ! pod/perlipc.pod pod/perllocale.pod pod/perlmodlib.pod
- ! pod/perlop.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- ! pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod
- ! pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod pod/pod2man.PL
- ! pod/roffitall pp.c pp_sys.c t/TEST t/op/gv.t t/op/hashwarn.t
- ! t/op/substr.t vms/vms.c win32/config.bc win32/config.vc
- ! win32/config_H.bc win32/config_H.vc win32/win32.c
- ! x2p/find2perl.PL
-____________________________________________________________________________
-[ 973] By: gsar on 1998/05/14 22:24:26
- Log: integrate mainline
- Branch: win32/perl
- + Porting/Contract
- +> README.beos beos/nm.c ext/POSIX/hints/bsdos.pl
- +> ext/POSIX/hints/freebsd.pl ext/POSIX/hints/netbsd.pl
- +> ext/POSIX/hints/openbsd.pl hints/beos.sh pod/perldelta4.pod
- +> utils/perlcc.PL
- ! MANIFEST Todo doio.c emacs/ptags embed.h ext/IO/IO.pm
- ! ext/Opcode/Opcode.pm ext/Socket/Socket.xs hints/irix_5.sh
- ! hints/netbsd.sh hv.c lib/Benchmark.pm lib/Carp.pm
- ! lib/ExtUtils/Install.pm lib/ExtUtils/MM_Unix.pm
- ! lib/Pod/Html.pm lib/Term/ReadLine.pm lib/chat2.pl opcode.h
- ! opcode.pl perl.c perl.h pod/perlapio.pod pod/perlcall.pod
- ! pod/perldebug.pod pod/perldelta.pod pod/perldiag.pod
- ! pod/perlembed.pod pod/perlfaq2.pod pod/perlfaq3.pod
- ! pod/perlfaq4.pod pod/perlfaq5.pod pod/perlfaq7.pod
- ! pod/perlfaq8.pod pod/perlform.pod pod/perlfunc.pod
- ! pod/perlguts.pod pod/perlhist.pod pod/perlipc.pod
- ! pod/perllocale.pod pod/perlmodlib.pod pod/perlop.pod
- ! pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- ! pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod
- ! pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod pod/pod2man.PL
- ! pod/roffitall pp.c pp_hot.c pp_sys.c sv.c t/TEST t/op/gv.t
- ! t/op/hashwarn.t t/op/substr.t vms/vms.c win32/config.bc
- ! win32/config.vc win32/config_H.bc win32/config_H.vc
- ! win32/win32.c x2p/find2perl.PL
- !> (integrate 59 files)
-____________________________________________________________________________
-[ 972] By: nick on 1998/05/14 18:09:01
- Log: Changes to allow compiler with gcc-2.8.1 in C++ mode,
- Remove K&R style functions, avoid struct/typedef clash.
- Branch: ansiperl
- ! bytecode.h byterun.c sv.c toke.c
-____________________________________________________________________________
-[ 971] By: TimBunce on 1998/05/14 16:52:19
- Log:
- Title: "fix C<print "foo ${\()}"> (pp_refgen fumbles when G_SCALAR, no args)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805070402.AAA02858@aatma.engin.umich.edu>
- Files: pp.c
- Branch: maint-5.004/perl
- ! pp.c
-____________________________________________________________________________
-[ 970] By: TimBunce on 1998/05/14 16:18:06
- Log:
- Title: "perlbug reformatted"
- From: Dominic Dunlop <domo@vo.lu>, Hugo van der Sanden
- <hv@crypt0.demon.co.uk>
- Msg-ID: <199805110954.LAA20367@dorlas.elsevier.nl>,
- <l03130300b17cebcb6d33@[194.222.64.89]>,
- <v03110702b17ccbab6824@[195.95.102.67]>
- Files: utils/perlbug.PL
- Branch: maint-5.004/perl
- ! utils/perlbug.PL
-____________________________________________________________________________
-[ 969] By: mbeattie on 1998/05/14 16:15:09
- Log: Integrate win32 branch into mainline
- Branch: perl
- +> ext/DynaLoader/DynaLoader.pm.PL hints/openbsd.sh
- +> t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t t/op/pos.t
- - ext/DynaLoader/DynaLoader.pm
- !> (integrate 118 files)
-____________________________________________________________________________
-[ 968] By: mbeattie on 1998/05/14 16:05:57
- Log: Bump patchlevel to 65
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 967] By: mbeattie on 1998/05/14 16:05:19
- Log: Another fixup of MANIFEST
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 966] By: mbeattie on 1998/05/14 16:02:20
- Log: Add missing files to MANIFEST
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 965] By: TimBunce on 1998/05/14 16:00:11
- Log:
- Title: "Sub declaration cost reduced from ~500 to ~100 bytes"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199805050607.CAA02050@monk.mps.ohio-state.edu>
- Files: gv.h gv.c op.c
- Branch: maint-5.004/perl
- ! gv.c gv.h op.c
-____________________________________________________________________________
-[ 964] By: mbeattie on 1998/05/14 15:58:01
- Log: Subject: [PATCH] Using Getopts::* with strict vars
- Date: Wed, 29 Apr 1998 22:48:16 -0700 (PDT)
- From: Tom Phoenix <rootbeer@teleport.com>
- Branch: perl
- ! lib/Getopt/Long.pm lib/Getopt/Std.pm lib/strict.pm
-____________________________________________________________________________
-[ 963] By: mbeattie on 1998/05/14 15:56:53
- Log: Subject: [ PATCH 5.004_64 ] Integrated regression tests for compiler
- Date: Wed, 29 Apr 1998 21:02:36 -0600 (MDT)
- From: epeschko@den-mdev1 (Ed Peschko)
- Branch: perl
- + utils/perlcc.PL
- ! MANIFEST Makefile.SH installperl lib/Test/Harness.pm
- ! pod/Makefile t/TEST t/harness utils/Makefile x2p/Makefile.SH
-____________________________________________________________________________
-[ 962] By: mbeattie on 1998/05/14 15:45:28
- Log: From: Dan Sugalski <sugalskd@ous.edu>
- Subject: [PATCH 5.004_64] Final (I hope) doc patch for Thread.pm
- Date: Wed, 08 Apr 1998 17:08:48 -0700
- Subject: [PATCH 5.004_64] Revised second Thread.PM doc patch
- Date: Fri, 08 May 1998 10:49:16 -0700
- Branch: perl
- ! ext/Thread/Thread.pm
-____________________________________________________________________________
-[ 961] By: mbeattie on 1998/05/14 15:43:39
- Log: Subject: Consolidated patch to 5.004_64
- Date: Wed, 08 Apr 1998 19:44:34 -0400 (EDT)
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Branch: perl
- ! ext/B/byteperl.c lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MM_VMS.pm lib/chat2.pl perl.c pod/perlsub.pod
- ! vms/config.vms vms/descrip.mms vms/genconfig.pl
- ! vms/perlvms.pod
-____________________________________________________________________________
-[ 960] By: mbeattie on 1998/05/14 15:41:41
- Log: Subject: Re: ANNOUNCE: Perl 5.005b1t3 (a.k.a. perl5.004_64) is available
- Date: 07 Apr 1998 18:31:21 +0200
- From: JVromans@Squirrel.nl (Johan Vromans)
- Branch: perl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 959] By: mbeattie on 1998/05/14 15:39:29
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Subject: Re: [PATCH] 5.004_04 or 5.004_64: Benchmark.pm: add run-for-some-time
- Date: Wed, 8 Apr 1998 09:47:45 +0300 (EET DST)
- Subject: [PATCH] perl 5.004_64+Config_04
- Date: Thu, 14 May 1998 12:14:07 +0300 (EET DST)
- Branch: perl
- ! lib/Benchmark.pm pod/perlfunc.pod
-____________________________________________________________________________
-[ 958] By: mbeattie on 1998/05/14 15:36:30
- Log: From: kstar@chapin.edu
- Subject: [PATCH] hints for Irix 6
- Date: Mon, 6 Apr 1998 15:14:14 -0400 (EDT)
- Subject: [PATCH 5.004_64] Threads - an easy way for dual installation
- Date: Wed, 29 Apr 1998 15:39:46 -0400 (EDT)
- Branch: perl
- ! INSTALL hints/irix_6.sh installperl
-____________________________________________________________________________
-[ 957] By: mbeattie on 1998/05/14 15:33:48
- Log: Subject: [PATCH] Install extensions with bootstrap (again) in $archlib
- Date: Mon, 06 Apr 1998 21:09:24 +0200
- From: Achim Bohnet <ach@mpe.mpg.de>
- Branch: perl
- ! lib/ExtUtils/Install.pm
-____________________________________________________________________________
-[ 956] By: mbeattie on 1998/05/14 15:32:39
- Log: Subject: [PATCH] Config: Irix 5 hints
- Date: Mon, 6 Apr 1998 13:12:47 -0400 (EDT)
- From: kstar@O2.chapin.edu
- Branch: perl
- ! hints/irix_5.sh
-____________________________________________________________________________
-[ 955] By: mbeattie on 1998/05/14 15:31:12
- Log: Subject: PATCH: h2ph produces incorrect code
- Date: Mon, 6 Apr 1998 23:52:13 +0930 (CST)
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Branch: perl
- ! utils/h2ph.PL
-____________________________________________________________________________
-[ 954] By: mbeattie on 1998/05/14 15:29:27
- Log: Subject: [PATCH] perldebug.pod
- Date: Mon, 6 Apr 1998 00:36:57 -0600
- From: jason stewart <jasons@sandy-home.arc.unm.edu>
- Branch: perl
- ! pod/perldebug.pod
-____________________________________________________________________________
-[ 953] By: mbeattie on 1998/05/14 15:28:00
- Log: From: Dominic Dunlop <domo@vo.lu>
- Subject: [PATCH 5.004_64]: hints/machten.sh: disable semctl()
- Date: Wed, 6 May 1998 14:39:32 +0000
- Subject: [PATCH] Not OK: perl 5.00464 on powerpc-machten 4.1 (hashwarn @INC problem)
- Date: Sat, 4 Apr 1998 19:44:34 +0000
- Branch: perl
- ! hints/machten.sh t/op/hashwarn.t
-____________________________________________________________________________
-[ 952] By: mbeattie on 1998/05/14 15:23:19
- Log: New pod/perldelta.pod (previous one branched in last change):
- Subject: [PATCH 5.004_64] Start new perldelta
- Date: Thu, 23 Apr 1998 12:12:38 -0400 (EDT)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Branch: perl
- + pod/perldelta.pod
-____________________________________________________________________________
-[ 951] By: mbeattie on 1998/05/14 15:20:43
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Subject: [PATCH for 5.004_04 and 5.004_64] (Was: Obsoleted svr4.sh)
- Date: Thu, 23 Apr 1998 11:10:15 -0400 (EDT)
- Subject: [PATCH 5.004_64] Start new perldelta
- Date: Thu, 23 Apr 1998 12:12:38 -0400 (EDT)
- (above branched perldelta -> perldelta4, new perldelta will be
- created/added next change)
- Subject: [PATCH] BSD Platforms need STRUCT_TM_HASZONE
- Date: Tue, 12 May 1998 09:58:49 -0400 (EDT)
- Branch: perl
- + ext/POSIX/hints/bsdos.pl ext/POSIX/hints/freebsd.pl
- + ext/POSIX/hints/netbsd.pl ext/POSIX/hints/openbsd.pl
- +> pod/perldelta4.pod
- - pod/perldelta.pod
- ! MANIFEST hints/svr4.sh
-____________________________________________________________________________
-[ 949] By: TimBunce on 1998/05/14 15:11:30
- Log:
- Title: "while($x=<>) no longer warns (implicit defined added)"
- From: Nick Ing-Simmons <nik@tiuk.ti.com>
- Msg-ID: <199805051035.LAA27365@pluto.tiuk.ti.com>
- Files: MANIFEST op.c t/op/defins.t
- Branch: maint-5.004/perl
- + t/op/defins.t
- ! MANIFEST op.c
-____________________________________________________________________________
-[ 948] By: mbeattie on 1998/05/14 15:09:51
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Subject: [PATCH for 5.004_64] Configure patch Config_64-01
- Date: Tue, 14 Apr 1998 13:04:58 -0400 (EDT)
- Subject: [PATCH for 5.004_64] Configure patch Config_64-01-02.diff
- Date: Fri, 17 Apr 1998 11:01:13 -0400 (EDT)
- Subject: [PATCH for 5.004_64] Configure patch Config_64-02-03.diff
- Date: Thu, 23 Apr 1998 15:03:20 -0400 (EDT)
- Subject: [PATCH 5.004_64] Config_64-03-04.diff
- Date: Wed, 13 May 1998 14:33:30 -0400 (EDT)
- Branch: perl
- + README.beos beos/nm.c hints/beos.sh
- ! Configure INSTALL MANIFEST Makefile.SH Policy_sh.SH
- ! Porting/Glossary Porting/config.sh Porting/config_H
- ! Porting/pumpkin.pod Todo cflags.SH config_h.SH
- ! djgpp/djgppsed.sh doop.c handy.h hints/dos_djgpp.sh
- ! hints/netbsd.sh hints/solaris_2.sh hints/unicos.sh
- ! hints/unicosmk.sh hv.h lib/Term/ReadLine.pm perl.h
- ! plan9/config.plan9 pod/perlfunc.pod pp.c pp_sys.c sv.h
- ! t/io/pipe.t thread.h vms/config.vms win32/config.bc
- ! win32/config.vc win32/config_H.bc win32/config_H.vc
-____________________________________________________________________________
-[ 946] By: TimBunce on 1998/05/14 15:07:06
- Log:
- Title: "Fix PERL_DESTRUCT_LEVEL core dumps"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805062301.TAA24599@aatma.engin.umich.edu>
- Files: perl.c sv.c t/op/misc.t
- Branch: maint-5.004/perl
- ! perl.c sv.c t/op/misc.t
-____________________________________________________________________________
-[ 945] By: mbeattie on 1998/05/14 15:00:31
- Log: Subject: Perl Social Contract
- Date: 13 Apr 1998 06:16:59 -0700
- From: Russ Allbery <rra@stanford.edu>
- Branch: perl
- + Porting/Contract
-____________________________________________________________________________
-[ 944] By: TimBunce on 1998/05/14 14:59:37
- Log:
- Title: "5.004_04-m2 Cleanup of test failures"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805070416.AAA03082@aatma.engin.umich.edu>
- Files: t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t t/op/taint.t
- win32/config.bc win32/config.vc
- Branch: maint-5.004/perl
- ! t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t t/op/taint.t
- ! win32/config.bc win32/config.vc
-____________________________________________________________________________
-[ 943] By: mbeattie on 1998/05/14 14:58:13
- Log: From: Joshua.Pritikin@NewYork2.dmg.deuba.com
- Subject: [PATCH 5.004_64] Test.pm update
- Date: Sat, 4 Apr 1998 08:33:50 -0500
- Subject: [PATCH 5.004_64] modcount + comments
- Date: Fri, 17 Apr 1998 16:07:35 -0400
- Branch: perl
- ! lib/Test.pm op.c thrdvar.h
-____________________________________________________________________________
-[ 942] By: mbeattie on 1998/05/14 14:49:43
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.004_64] newSV
- Date: Wed, 8 Apr 1998 03:21:03 -0400 (EDT)
- Subject: [PATCH 5.004_64] Cryptic error from B::CC
- Date: Sat, 11 Apr 1998 19:52:25 -0400 (EDT)
- Branch: perl
- ! ext/B/B/CC.pm handy.h proto.h sv.c
-____________________________________________________________________________
-[ 941] By: mbeattie on 1998/05/14 14:47:29
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: [PATCH 5.004_64] anydbm.t
- Date: Sat, 4 Apr 1998 01:39:03 -0500 (EST)
- Subject: [PATCH 5.004_64] threads on OS/2
- Date: Sat, 4 Apr 1998 01:44:29 -0500 (EST)
- Subject: [PATCH 5.004_64] Better handling of Perl DLLs under OS/2
- Date: Sat, 4 Apr 1998 01:47:58 -0500 (EST)
- Subject: [PATCH 5.004_64] Immediate stop in debugger
- Date: Sat, 11 Apr 1998 19:50:58 -0400 (EDT)
- Subject: [PATCH 5.005_64] ptags broken
- Date: Sat, 11 Apr 1998 22:08:21 -0400 (EDT)
- Subject: [PATCH 5.004_64] Document switch syntax via RE
- Date: Sun, 12 Apr 1998 01:12:33 -0400 (EDT)
- Branch: perl
- ! emacs/ptags lib/ExtUtils/MM_OS2.pm lib/ExtUtils/Mksymlists.pm
- ! lib/perl5db.pl os2/Changes os2/Makefile.SHs os2/os2.c
- ! os2/os2thread.h pod/perlsyn.pod t/lib/anydbm.t
-____________________________________________________________________________
-[ 940] By: mbeattie on 1998/05/14 14:38:44
- Log: Subject: [PATCH 5.004_64] Build Stdio and DCLSym modules as part of normal VMS perl build
- Date: Fri, 03 Apr 1998 16:01:57 -0800
- From: Dan Sugalski <sugalskd@osshe.edu>
- Branch: perl
- ! vms/descrip.mms vms/ext/DCLsym/Makefile.PL
- ! vms/ext/Stdio/Makefile.PL vms/ext/Stdio/Stdio.xs
-____________________________________________________________________________
-[ 939] By: mbeattie on 1998/05/14 14:35:42
- Log: Subject: [PATCH 5.004_64] perl dies in perl_construct when compiled with MULTIPLICITY
- Date: Fri, 03 Apr 1998 13:58:15 -0800
- From: Dan Sugalski <sugalskd@osshe.edu>
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 938] By: gsar on 1998/05/14 10:53:55
- Log: merge change#896 from maintbranch
- Branch: win32/perl
- ! doio.c ext/Socket/Socket.xs lib/Class/Struct.pm lib/Cwd.pm
- ! lib/File/Find.pm lib/Math/BigInt.pm lib/lib.pm lib/strict.pm
- ! op.c pod/perldiag.pod pod/perlfunc.pod pp.c pp_ctl.c sv.c
- ! t/op/gv.t t/op/misc.t t/op/pack.t
-____________________________________________________________________________
-[ 937] By: gsar on 1998/05/14 09:31:34
- Log: merge change#887 from maintbranch
- Branch: win32/perl
- + t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t
- ! MANIFEST doio.c lib/File/CheckTree.pm lib/Getopt/Long.pm
- ! lib/Math/BigFloat.pm lib/Text/ParseWords.pm lib/Text/Wrap.pm
- ! lib/base.pm perl.c pod/perlre.pod t/lib/io_sock.t
- ! t/lib/io_udp.t t/lib/parsewords.t t/lib/timelocal.t
- ! t/op/stat.t toke.c utils/h2xs.PL
-____________________________________________________________________________
-[ 936] By: gsar on 1998/05/14 09:06:18
- Log: merge change#886 from maintbranch
- Branch: win32/perl
- ! README.os2 README.vms cop.h ext/DynaLoader/dl_hpux.xs
- ! ext/POSIX/POSIX.xs ext/POSIX/hints/linux.pl global.sym
- ! hints/aix.sh hints/bsdos.sh hints/dec_osf.sh hints/hpux.sh
- ! hints/linux.sh hints/netbsd.sh hints/os2.sh hints/svr4.sh
- ! lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm
- ! lib/File/Basename.pm lib/File/Path.pm op.c os2/Makefile.SHs
- ! os2/os2.c os2/perl2cmd.pl perl.c perl.h pod/perlguts.pod
- ! pod/pod2man.PL pp_ctl.c pp_hot.c pp_sys.c proto.h
- ! t/lib/filecopy.t util.c utils/perldoc.PL vms/config.vms
- ! vms/descrip.mms vms/ext/Filespec.pm vms/ext/filespec.t
- ! vms/test.com
-____________________________________________________________________________
-[ 935] By: gsar on 1998/05/14 07:00:02
- Log: merge changes#872,873 from maintbranch
- Branch: win32/perl
- ! Changes5.004 INSTALL lib/ExtUtils/MakeMaker.pm
- ! lib/FileHandle.pm lib/Tie/Hash.pm lib/constant.pm
- ! lib/integer.pm pod/perl.pod pod/perlbook.pod pod/perldsc.pod
- ! pod/perlfunc.pod pod/perlguts.pod pod/perlhist.pod
- ! pod/perlop.pod pod/perlre.pod pod/perlrun.pod pod/perlsec.pod
- ! pod/perltrap.pod pod/perlvar.pod pod/pod2latex.PL
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 934] By: gsar on 1998/05/14 06:24:38
- Log: merge changes#755..759,763,764 from maintbranch
- Branch: win32/perl
- + hints/openbsd.sh
- ! MANIFEST Porting/patchls perl.c perlsdio.h pod/perlfunc.pod
- ! t/op/pos.t utils/perldoc.PL
-____________________________________________________________________________
-[ 933] By: gsar on 1998/05/14 06:07:31
- Log: merge change#754 from maintbranch
- Branch: win32/perl
- ! perl.c
-____________________________________________________________________________
-[ 932] By: gsar on 1998/05/14 06:03:50
- Log: merge changes#752,753 from maintbranch
- Branch: win32/perl
- + t/op/pos.t
- ! README ext/GDBM_File/GDBM_File.pm
- ! ext/SDBM_File/sdbm/Makefile.PL pod/perlsyn.pod
-____________________________________________________________________________
-[ 931] By: gsar on 1998/05/14 05:51:19
- Log: merge change#745 from maintbranch
- Branch: win32/perl
- + ext/DynaLoader/DynaLoader.pm.PL
- - ext/DynaLoader/DynaLoader.pm
- ! MANIFEST ext/DynaLoader/Makefile.PL
-____________________________________________________________________________
-[ 930] By: nick on 1998/05/13 20:39:59
- Log: resolve -at //depot/win32 into ansiperl for C++ testing.
- Branch: ansiperl
- ! utils/perldoc.PL
- !> MANIFEST ext/Fcntl/Fcntl.pm hv.c lib/ExtUtils/Liblist.pm op.c
- !> perl.c pod/perlfunc.pod pod/perlguts.pod pp.c pp_ctl.c
- !> regcomp.c regcomp.h regexec.c t/op/hashwarn.t t/op/runlevel.t
- !> win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- !> win32/makedef.pl win32/makefile.mk
-____________________________________________________________________________
-[ 929] By: gsar on 1998/05/13 10:13:36
- Log: merge change#687 from maintbranch
- Branch: win32/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 928] By: gsar on 1998/05/13 10:08:13
- Log: merge change#683 from maintbranch
- Branch: win32/perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 927] By: gsar on 1998/05/13 09:51:43
- Log: merge change#681 from maintbranch
- Branch: win32/perl
- ! ext/Fcntl/Fcntl.pm
-____________________________________________________________________________
-[ 926] By: gsar on 1998/05/13 09:47:11
- Log: merge change#664 from maint branch
- Branch: win32/perl
- ! regcomp.c regcomp.h regexec.c
-____________________________________________________________________________
-[ 925] By: gsar on 1998/05/13 08:55:28
- Log: merge missing part of change#663 from maint branch
- Branch: win32/perl
- ! op.c
-____________________________________________________________________________
-[ 924] By: gsar on 1998/05/12 18:50:04
- Log: remove x586 code gen switch (-5) for Borland, it is non-generic,
- and seems to generate problematic code for PII.
- Branch: win32/perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 923] By: gsar on 1998/05/12 16:24:02
- Log: fix test failure
- Message-Id: <199805120940.KAA01252@pluto.tiuk.ti.com>
- Date: Tue, 12 May 1998 10:40:57 BST
- From: Nick.Ing-Simmons@tiuk.ti.com
- Subject: test buglet
- Branch: win32/perl
- ! t/op/hashwarn.t
-____________________________________________________________________________
-[ 922] By: TimBunce on 1998/05/11 20:58:58
- Log: Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "incorrect return value for hv_iterinit"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805031848.OAA20618@aatma.engin.umich.edu>
- Files: pod/perlguts.pod hv.c
-
- ------ DOCUMENTATION ------
-
- Title: "perlvar.pod buglet E<EVMSERR>"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9805041415.AA22185@o09.xray.mpe.mpg.de>
- Files: pod/perlvar.pod
-
- Title: "Improve docs for warning about code after an exec()"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Chaim Frenkel
- <chaimf@concentric.net>
- Msg-ID: <E0yYUit-0003yb-00@taurus.cus.cam.ac.uk>,
- <m3ra22qn1z.fsf@chany-p100.emwp.com>
- Files: pod/perlfunc.pod
-
- Title: "Remove dead code from pod2man"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yXmuT-0006Ll-00@ursa.cus.cam.ac.uk>
- Files: pod/pod2man.PL
-
- Title: "tweak doc for C<do FILENAME>"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199805090017.UAA06888@aatma.engin.umich.edu>
- Files: pod/perlfunc.pod
-
- Title: "Document integer pragma effect on % operator"
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3yawjmzhx.fsf@furu.g.aas.no>
- Files: pod/perlop.pod
-
- Title: "Reduce rm command line length in pod/Makefile"
- From: Hugo van der Sanden <h.sanden@elsevier.nl>
- Msg-ID: <199805041423.QAA13199@dorlas.elsevier.nl>
- Files: pod/Makefile
-
- ------ EXTENSIONS ------
-
- Title: "Clarify Termios usage in POSIX.pod"
- From: Rocco Caputo <troc@netrus.net>
- Msg-ID: <199805101952.PAA12738@ns.netrus.net>
- Files: ext/POSIX/POSIX.pod
-
- ------ LIBRARY ------
-
- Title: "Fix File::Find::finddepth typo in trial 2 release"
- From: koenig@kulturbox.de (Andreas J. Koenig)
- Msg-ID: <sfcbttflsjz.fsf@dubravka.in-berlin.de>
- Files: lib/File/Find.pm t/lib/filefind.t
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Add Porting/patching.pod document"
- From: Daniel Grisinger <dgris@tdrenterprises.com>
- Msg-ID: <199805030305.XAA16147@relay.pair.com>
- Files: MANIFEST Porting/patching.pod
-
- Title: "hints/machten.sh: disable semctl(), align with devel version"
- From: Dominic Dunlop <domo@vo.lu>
- Msg-ID: <v03110701b175fc029eb1@[195.95.102.115]>
- Files: hints/machten.sh
-
- Title: "Add VMS specifics to Porting/makerel"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IWDK1LONRQ0026P0@cor.newman.upenn.edu>,
- <199804271732.SAA13762@toad.ig.co.uk>,
- <9804250212.AA27695@forte.com>
- Files: Porting/makerel
- Branch: maint-5.004/perl
- + Porting/patching.pod
- ! MANIFEST Porting/makerel ext/POSIX/POSIX.pod hints/machten.sh
- ! hv.c lib/File/Find.pm pod/Makefile pod/perlfunc.pod
- ! pod/perlguts.pod pod/perlop.pod pod/perlvar.pod pod/pod2man.PL
- ! t/lib/filefind.t
-____________________________________________________________________________
-[ 921] By: gsar on 1998/05/10 02:28:03
- Log: various tweaks to makefiles
- Branch: win32/perl
- ! win32/Makefile win32/makedef.pl win32/makefile.mk
-____________________________________________________________________________
-[ 920] By: gsar on 1998/05/10 02:27:19
- Log: fix ExtUtils::Liblist mishandling paths with spaces
- Branch: win32/perl
- ! lib/ExtUtils/Liblist.pm
-____________________________________________________________________________
-[ 919] By: gsar on 1998/05/09 17:10:15
- Log: minor cleanup
- Branch: win32/perl
- ! MANIFEST perl.c
-____________________________________________________________________________
-[ 918] By: gsar on 1998/05/09 17:09:09
- Log: protect sortcop from C<sort { sort { ... } ... } ...>
- Message-Id: <199805082333.TAA06287@aatma.engin.umich.edu>
- Date: Fri, 08 May 1998 19:33:44 EDT
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: [PATCH] Re: double recursion in sort
- Branch: win32/perl
- ! pp_ctl.c t/op/runlevel.t
-____________________________________________________________________________
-[ 917] By: gsar on 1998/05/09 17:05:55
- Log: c
- Branch: win32/perl
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 916] By: gsar on 1998/05/07 03:40:15
- Log: fix C<print "foo ${\()}"> (pp_refgen fumbles when G_SCALAR, no args)
- Branch: win32/perl
- ! pp.c
-____________________________________________________________________________
-[ 915] By: mbeattie on 1998/05/06 13:08:29
- Log: Speed up pp_entersub for usethreads with only 1 thread running.
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 914] By: gsar on 1998/05/03 18:44:38
- Log: make hv_iterinit() return HvKEYS()
- Message-Id: <3.0.1.32.19980502162922.009e6320@www.syncad.com>
- Date: Sat, 02 May 1998 16:29:22 EDT
- From: "SynaptiCAD, Inc." <sales@syncad.com>
- Subject: incorrect return value for hv_iterinit
- Branch: win32/perl
- ! hv.c pod/perlguts.pod
-____________________________________________________________________________
-[ 913] By: TimBunce on 1998/05/01 22:38:38
- Log: Update MANIFEST for trial 2.
- (Porting/Contract lib/Tie/Handle.pm t/op/tiehandle.t)
- Branch: maint-5.004/perl
- ! MANIFEST
-____________________________________________________________________________
-[ 912] By: TimBunce on 1998/05/01 22:30:29
- Log: Add t/op/tiehandle.t as xtext to repository (see change 911)
- Branch: maint-5.004/perl
- + t/op/tiehandle.t
-____________________________________________________________________________
-[ 911] By: TimBunce on 1998/05/01 21:35:03
- Log:
- Title: "Add ERRSV, ERRHV, DEFSV and SAVE_DEFSV for XS 5.005 compatibility"
- From: timbo@ig.co.uk (Tim Bunce)
- Msg-ID: <199804200854.JAA01482@toad.ig.co.uk>
- Files: perl.h
-
- Title: "Add WRITE & CLOSE to TIEHANDLE"
- From: Graham Barr <gbarr@pobox.com>
- Msg-ID: <34F63DC8.CA95670F@pobox.com>
- Files: pod/perltie.pod lib/Tie/Handle.pm pp_sys.c t/op/tiehandle.t
- Branch: maint-5.004/perl
- + lib/Tie/Handle.pm
- ! perl.h pod/perltie.pod pp_sys.c
-____________________________________________________________________________
-[ 910] By: TimBunce on 1998/05/01 20:47:47
- Log:
- Title: "Add warning for Illegal hex digit"
- From: Stephen P Potter <spp@spp.users.ds.net>, Stephen Potter
- <spp@psasolar.colltech.com>, Tim.Bunce@ig.co.uk (Tim Bunce)
- Msg-ID: <199804232219.SAA02267@spp.users.ds.net>,
- <199804271409.PAA12819@toad.ig.co.uk>,
- <199804280307.WAA12332@psasolar.psa.pencom.com>
- Files: pod/perldiag.pod util.c
-
- Title: "perl_call_method() bug fix (corrupt op pointer)"
- From: "Alterman, Eugene" <Eugene.Alterman@bremer-inc.com>
- Msg-ID: <510415F72ECFD111A31700A0C9B3CCDE3098@efx98digmasa.bremer-inc.com>
- Files: perl.c
-
- Title: "Fix printf segmentation fault"
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Msg-ID: <l03130300b16bebdbc314@[194.222.64.89]>
- Files: pp_hot.c
-
- Title: "Document changed local($a[$i],$b{$j}) behaviour re delete/splice"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IVMVIHNZ36001NKH@cor.newman.upenn.edu>
- Files: pod/perlsub.pod
- Branch: maint-5.004/perl
- ! perl.c pod/perldiag.pod pod/perlsub.pod pp_hot.c util.c
-____________________________________________________________________________
-[ 909] By: TimBunce on 1998/05/01 19:44:47
- Log:
- Title: "Change Ilya's do_binmode to K&R prototype and move to doio.c"
- Files: doio.c util.c
- Branch: maint-5.004/perl
- ! doio.c util.c
-____________________________________________________________________________
-[ 908] By: gsar on 1998/05/01 19:21:02
- Log: add AS patch#20 (exposes more global constants)
- Branch: asperl
- ! ObjXSub.h byterun.h embed.h embedvar.h global.sym globals.c
- ! interp.sym ipsock.h ipstdio.h objpp.h perlio.h perlsock.h
- ! proto.h util.c win32/GenCAPI.pl win32/runperl.c
-____________________________________________________________________________
-[ 907] By: TimBunce on 1998/05/01 17:50:46
- Log:
- Title: "Runtime Carp verbosity without aliasing"
- From: Joshua.Pritikin@NewYork2.dmg.deuba.com, Tim Bunce
- Msg-ID: <H00000e50003936c@MHS>
- Files: lib/Carp.pm
-
- Title: "Fix File::Basename to not untaint results (using new //t flag)"
- From: Eric Hammond <erich@finity.citysearch.com>, Tom Phoenix
- <rootbeer@teleport.com>
- Msg-ID: <199710070515.WAA00682@finity.citysearch.com>,
- <Pine.GSO.3.96.971007074114.14211J-100000@usertest.teleport.com>
- Files: lib/File/Basename.pm
- Branch: maint-5.004/perl
- ! lib/Carp.pm lib/File/Basename.pm
-____________________________________________________________________________
-[ 906] By: TimBunce on 1998/04/28 11:04:49
- Log:
- ------ CORE LANGUAGE ------
-
- Title: "5.004_04m5t1: Fix dangling references in LVs", "Fix dangling
- references in LVs"
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Msg-ID: <199804010541.AAA32615@Orb.Nashua.NH.US>,
- <19980422164037.D29222@perl.org>
- Files: embed.h keywords.h opcode.h perl.h proto.h doop.c global.sym mg.c
- pp.c sv.c
-
- Title: "Fix SvGMAGIC typo in change 904"
- Files: doop.c
- Branch: maint-5.004/perl
- ! doop.c embed.h global.sym keywords.h mg.c opcode.h perl.h pp.c
- ! proto.h sv.c
-____________________________________________________________________________
-[ 905] By: TimBunce on 1998/04/28 10:32:20
- Log: Regexp patches
-
- Title: "New regex flag //t to leave $1 etc. tainted"
- From: Chip Salzenberg <chip@pobox.com>, Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <19980310192640.37826@cyprus>
- Files: pod/perlop.pod pod/perlre.pod op.h dump.c mg.c pp_hot.c sv.c
- t/op/taint.t toke.c
-
- Title: "Don't accidentally untaint target of s///"
- From: Chip Salzenberg <chip@pobox.com>
- Msg-ID: <19980310151756.24767@cyprus>
- Files: pp_ctl.c pp_hot.c t/op/taint.t
-
- Title: "Allow but ignore embedded /...(?o).../ in regexp"
- From: h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <199804201243.OAA08244@dorlas.elsevier.nl>
- Files: regcomp.c
- Branch: maint-5.004/perl
- ! dump.c mg.c op.h pod/perlop.pod pod/perlre.pod pp_ctl.c
- ! pp_hot.c regcomp.c sv.c t/op/taint.t toke.c
-____________________________________________________________________________
-[ 904] By: TimBunce on 1998/04/27 20:20:21
- Log: Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "Protect join() against double reads on undef and SvGMAGICALs"
- From: Chip Salzenberg <chip@perlsupport.com>, Tim Bunce
- <Tim.Bunce@ig.co.uk>
- Msg-ID: <19980424080630.D13985@perl.org>
- Files: doop.c
-
- Title: "Better error message for require failure"
- From: epeschko@den-mdev1 (Ed Peschko)
- Msg-ID: <199804240047.SAA24155@den-mdev1.co.csgsystems.com>
- Files: pod/perldiag.pod pp_ctl.c
-
- Title: "fixes for various noises under PERL_DESTRUCT_LEVEL"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804231926.PAA23969@aatma.engin.umich.edu>
- Files: perl.c
-
- Title: "Fix nice_chunk memory leak"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804052347.TAA15699@aatma.engin.umich.edu>
- Files: sv.c
-
- Title: "-2.0 vs. -2 (was Number representations)"
- From: Chip Salzenberg <chip@pobox.com>
- Msg-ID: <19980309185652.11231@cyprus>
- Files: op.c
-
- Title: "perl.c fixes for -DUNEXEC"
- From: Matt Wette <mwette@mr-ed.jpl.nasa.gov>, Matthew R Wette
- <mwette@mr-ed.jpl.nasa.gov>
- Msg-ID: <199710152146.OAA07283@mr-ed.jpl.nasa.gov>
- Files: perl.c
-
- ------ DOCUMENTATION ------
-
- Title: "perlcall is Perl from C, not C from Perl"
- From: Steve A Fink <sfink@cs.berkeley.edu>
- Files: pod/perlembed.pod
-
- Title: "Clarify require "Foo::Bar" non-bareword issue"
- From: Dominique Dumont <domi@ss7serv.grenoble.hp.com>
- Msg-ID: <199804231527.AA153445256@ss7serv.grenoble.hp.com>
- Files: pod/perlfunc.pod
-
- Title: "(repost) new text for perlsec", "new text for perlsec"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980423161605.5518N-100000@user2.teleport.com>
- Files: pod/perlsec.pod
-
- ------ EXTENSIONS ------
-
- Title: "IO::Socket->socketpair broken (typo)"
- From: Olaf Titz <olaf@bigred.inka.de>
- Msg-ID: <19980425224535.2807.qmail@bigred.inka.de>
- Files: ext/IO/lib/IO/Socket.pm
-
- Title: "NDBM_File man page needs Fcntl"
- From: "Danny R. Faught" <faught@mailhost.rsn.hp.com>
- Msg-ID: <199707011500.IAA00601@palrel3.hp.com>
- Files: ext/NDBM_File/NDBM_File.pm
-
- ------ LIBRARY ------
-
- Title: "Documentation discrepancy: pragmatic modules"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <199804221525.RAA12695@dorlas.elsevier.nl>,
- <E0ySPhk-00034f-00@taurus.cus.cam.ac.uk>
- Files: lib/strict.pm lib/subs.pm lib/vars.pm
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Updated hints file for svr4"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980423110522.26621A-100000@newton.phys>
- Files: hints/svr4.sh
-
- Title: "Pumpkin update -- shared libperl.so location"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980424115837.6222A-100000@newton.phys>
- Files: Porting/pumpkin.pod
-
- Title: "perl compile fix for AIX 4.3"
- From: Jens-Uwe Mager <jum@helios.de>
- Msg-ID: <199804261611.SAA34728@ans.helios.de>
- Files: ext/DynaLoader/dl_aix.xs
-
- Title: "Dynaloader build on VMS",
- From: pvhp@forte.com (Peter Prymmer), timbo@ig.co.uk (Tim Bunce)
- Msg-ID: <199804271732.SAA13762@toad.ig.co.uk>, <9804250212.AA27695@forte.com>
- Files: vms/descrip.mms
-
- ------ UTILITIES ------
-
- Title: "Major update to h2ph.PL"
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Msg-ID: <Pine.SV4.3.93.980424031837.20782A-200000@ermintrude.teaching.cs.adelaide.edu.au>
- Files: utils/h2ph.PL
- Branch: maint-5.004/perl
- ! Porting/pumpkin.pod doop.c ext/DynaLoader/dl_aix.xs
- ! ext/IO/lib/IO/Socket.pm ext/NDBM_File/NDBM_File.pm
- ! hints/svr4.sh lib/strict.pm lib/subs.pm lib/vars.pm op.c
- ! perl.c pod/perldiag.pod pod/perlembed.pod pod/perlfunc.pod
- ! pod/perlsec.pod pp_ctl.c sv.c utils/h2ph.PL vms/descrip.mms
-____________________________________________________________________________
-[ 903] By: gsar on 1998/04/25 22:27:19
- Log: add AS patch#19 (adds socket layer generation to GenCAPI.pl)
- Branch: asperl
- ! win32/GenCAPI.pl
-____________________________________________________________________________
-[ 902] By: nick on 1998/04/25 16:35:08
- Log: Case sensitive tweak to perldoc.PL
- Branch: ansiperl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 901] By: nick on 1998/04/25 15:16:54
- Log: Implement use attrs qw(locked package);
- Passes all tests except posix (hangs/dies) in sigaction test after
- printing "ok 9".
- Branch: ansiperl
- ! cv.h ext/attrs/attrs.pm ext/attrs/attrs.xs pp_hot.c
-____________________________________________________________________________
-[ 900] By: nick on 1998/04/25 13:58:17
- Log: Auto-insert defined() test in while when test expression is
- readline (i.e. <>), glob, readdir, or each.
- Branch: ansiperl
- + t/op/defins.t
- ! op.c pod/perlop.pod
-____________________________________________________________________________
-[ 899] By: nick on 1998/04/25 13:14:52
- Log: Resolve ansiperl against win32 branch
- Branch: ansiperl
- +> (branch 53 files)
- - config_H
- !> (integrate 227 files)
-____________________________________________________________________________
-[ 898] By: gsar on 1998/04/24 17:01:05
- Log: add AS patch#18
- Branch: asperl
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/xsubpp win32/GenCAPI.pl
-____________________________________________________________________________
-[ 897] By: TimBunce on 1998/04/23 19:49:22
- Log: Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "fix for "Unbalanced string table refcount""
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804042251.RAA25527@aatma.engin.umich.edu>
- Files: sv.c
-
- Title: "Allow more lenient switch processing"
- From: "John L. Allen" <allen@grumman.com>
- Msg-ID: <199803251638.LAA22664@gateway.grumman.com>
- Files: perl.c
-
- Title: "Add fourth arg to substr: substr EXPR,OFFSET,LEN,REPLACEMENT"
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3g1jglqtm.fsf@furu.g.aas.no>
- Files: pod/perlfunc.pod Todo opcode.pl pp.c t/op/substr.t
-
- Title: "Odd number of elements in hash list."
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980328151929.29336D-100000@user2.teleport.com>
- Files: MANIFEST pod/perldiag.pod pp.c pp_hot.c t/op/hashwarn.t
-
- Title: "another destruct_level fix"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804030105.UAA04400@aatma.engin.umich.edu>
- Files: hv.c
-
- Title: "bidirectional pipe warning blues"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9804082151.AA20399@claudius.bfsec.bt.co.uk>
- Files: doio.c
-
- Title: "stale pointers after realloc (MEXTEND in pp_print and pp_prtf)"
- From: Malcolm Beattie <mbeattie@sable.ox.ac.uk>
- Msg-ID: <199801191107.LAA17979@sable.ox.ac.uk>
- Files: pp_hot.c pp_sys.c
-
- Title: "unimplemented umask() should return undef not die"
- From: kstar@chapin.edu (Kurt D. Starsinic)
- Msg-ID: <199803120515.VAA08660@chapin.edu>
- Files: pod/perlfunc.pod pp_sys.c
-
- Title: "warning for: bless $foo, """
- From: Joshua.Pritikin@NewYork2.dmg.deuba.com
- Msg-ID: <H00000e5000378a0@MHS>
- Files: pod/perldiag.pod pp.c
-
- ------ DOCUMENTATION ------
-
- Title: "Mention SWIG in perlxs.pod"
- From: Steve A Fink <sfink@cs.berkeley.edu>
- Msg-ID: <Pine.HPP.3.96.980408154956.20990K-100000@brooksie.CS.Berkeley.EDU>
- Files: pod/perlxs.pod
-
- Title: "fix-up of previous perlre.pod patch"
- From: Ted Ashton <ashted@southern.edu>
- Msg-ID: <199803031540.KAA09388@ns.southern.edu>
- Files: pod/perlre.pod
-
- Title: "long list of man page nitpicks"
- From: Greg Bacon <gbacon@mickey.cs.uah.edu>, Tom Christiansen
- <tchrist@jhereg.perl.com>
- Msg-ID: <199804221844.NAA08338@pluto.cs.uah.edu>,
- <199804222204.QAA20805@jhereg.perl.com>
- Files: pod/perlapio.pod pod/perlcall.pod pod/perldebug.pod pod/perldelta.pod
- pod/perldiag.pod pod/perlembed.pod pod/perlfaq2.pod
- pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod
- pod/perlfaq7.pod pod/perlfaq8.pod pod/perlform.pod
- pod/perlfunc.pod pod/perlguts.pod pod/perlipc.pod
- pod/perllocale.pod pod/perlmodlib.pod pod/perlop.pod
- pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod
- pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod
- pod/pod2man.PL
-
- Title: "document that system() does not set $! when it fails"
- From: "Mark R. Levinson" <mrl@isc.upenn.edu>
- Msg-ID: <199803011946.OAA31942@anaximander.dccs.upenn.edu>
- Files: pod/perlfunc.pod
-
- Title: "Fix pod/roffitall execute permission"
- From: lvirden@cas.org
- Msg-ID: <1997Nov17.132031.2589892@cor.newman>
- Files: pod/roffitall
-
- Title: "document when split ignores trailing empty fields"
- From: Hugo van der Sanden <hv@crypt0.demon.co.uk>
- Msg-ID: <l03130300b14fac832b77@[194.222.64.89]>
- Files: pod/perlfunc.pod
-
- ------ EXTENSIONS ------
-
- Title: "Buglet in Opcode.pm documentation"
- From: Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
- Msg-ID: <199804170349.XAA32445@sleipnir.valparaiso.cl>
- Files: ext/Opcode/Opcode.pm
-
- Title: "Failure to append to perllocal.pod should not be fatal"
- From: koenig@kulturbox.de (Andreas J. Koenig)
- Msg-ID: <sfciuogy67x.fsf@dubravka.in-berlin.de>
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "Document that IO.pm does not load IO::Select etc"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <353B48F1.64E35A63@ti.com>
- Files: ext/IO/IO.pm
-
- Title: "Install extensions with bootstrap (again) in $archlib"
- From: Achim Bohnet <ach@mpe.mpg.de>, koenig@kulturbox.de (Andreas J.
- Koenig)
- Msg-ID: <9804061909.AA12675@o09.xray.mpe.mpg.de>,
- <sfc90oxc0uj.fsf@dubravka.in-berlin.de>
- Files: lib/ExtUtils/Install.pm
-
- Title: "glibc2.0.6 missing MSG_* <sys/socket.h> defines."
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980406113950.3166L-100000@newton.phys>
- Files: ext/Socket/Socket.xs
-
- ------ LIBRARY ------
-
- Title: "Benchmark.pm: add run-for-some-time mode"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199804080647.JAA15136@alpha.hut.fi>
- Files: lib/Benchmark.pm
-
- Title: "Comments added to Carp.pm"
- From: Andy Wardley <abw@cre.canon.co.uk>, Chip Salzenberg
- <chip@perlsupport.com>, Tom Christiansen
- <tchrist@jhereg.perl.com>
- Msg-ID: <19980422164242.E29222@perl.org>,
- <199804222033.OAA17959@jhereg.perl.com>,
- <980409182357.ZM21638@bandanna>
- Files: lib/Carp.pm
-
- Title: "chat2.pl fix"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IVMVF507PO001NKH@cor.newman.upenn.edu>
- Files: lib/chat2.pl
-
- Title: "lib/Pod/Html.pm"
- From: d-lewart@uiuc.edu (Daniel S. Lewart)
- Msg-ID: <199710170718.DAA25472@staff1.cso.uiuc.edu>,
- <199710180417.AAA19778@staff2.cso.uiuc.edu>
- Files: lib/Pod/Html.pm
-
- Title: "ormaments method in Term/ReadLine.pm causes warning with string
- arg."
- From: hiroo.hayashi@computer.org
- Msg-ID: <199804061519.AAA21907@mail.fb3.so-net.ne.jp>
- Files: lib/Term/ReadLine.pm
-
- ------ OTHER CHANGES ------
-
- Title: "ptags broken"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199804120208.WAA29264@monk.mps.ohio-state.edu>
- Files: emacs/ptags
-
- ------ PORTABILITY - WIN32 ------
-
- Title: "win32 tweaks (signals and crypt support)"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199804170505.BAA06413@aatma.engin.umich.edu>
- Files: perl.h win32/config.bc win32/config.vc win32/config_H.bc
- win32/config_H.vc win32/win32.c
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Add Social Contract (2nd Draft) as Porting/Contract"
- From: Russ Allbery <rra@stanford.edu>
- Msg-ID: <m3btw66n8i.fsf@windlord.Stanford.EDU>
- Files: Porting/Contract
-
- Title: "Config: Irix 5 hints"
- From: kstar@O2.chapin.edu
- Msg-ID: <199804061712.NAA22823@O2.chapin.edu>
- Files: hints/irix_5.sh
-
- Title: "VMS patches to 5.004_03"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IVYJS0L8D200209B@cor.newman.upenn.edu>
- Files: vms/vms.c
-
- Title: "hints/netbsd.sh - enable vfork"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980417110749.19327B-100000@newton.phys>
- Files: hints/netbsd.sh
-
- ------ UTILITIES ------
-
- Title: "support find2perl -follow"
- From: Billy <wdconsta@cs.adelaide.edu.au>
- Msg-ID: <Pine.SV4.3.93.980408005903.24081A-100000@ermintrude.teaching.cs.adelaide.edu.au>
- Files: x2p/find2perl.PL
- Branch: maint-5.004/perl
- + Porting/Contract t/op/hashwarn.t
- ! MANIFEST Todo doio.c emacs/ptags embed.h ext/IO/IO.pm
- ! ext/Opcode/Opcode.pm ext/Socket/Socket.xs hints/irix_5.sh
- ! hints/netbsd.sh hv.c lib/Benchmark.pm lib/Carp.pm
- ! lib/ExtUtils/Install.pm lib/ExtUtils/MM_Unix.pm
- ! lib/Pod/Html.pm lib/Term/ReadLine.pm lib/chat2.pl opcode.h
- ! opcode.pl perl.c perl.h pod/perlapio.pod pod/perlcall.pod
- ! pod/perldebug.pod pod/perldelta.pod pod/perldiag.pod
- ! pod/perlembed.pod pod/perlfaq2.pod pod/perlfaq3.pod
- ! pod/perlfaq4.pod pod/perlfaq5.pod pod/perlfaq7.pod
- ! pod/perlfaq8.pod pod/perlform.pod pod/perlfunc.pod
- ! pod/perlguts.pod pod/perlhist.pod pod/perlipc.pod
- ! pod/perllocale.pod pod/perlmodlib.pod pod/perlop.pod
- ! pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- ! pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod
- ! pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod pod/pod2man.PL
- ! pod/roffitall pp.c pp_hot.c pp_sys.c sv.c t/TEST t/op/gv.t
- ! t/op/substr.t vms/vms.c win32/config.bc win32/config.vc
- ! win32/config_H.bc win32/config_H.vc win32/win32.c
- ! x2p/find2perl.PL
-____________________________________________________________________________
-[ 896] By: TimBunce on 1998/04/22 11:49:24
- Log: Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "Additional regex-cache patch"
- From: Chip Salzenberg <chip@atlantic.net>
- Msg-ID: <19980305104831.38100@cyprus>
- Files: pp_ctl.c
-
- Title: "Conservative C<*x = undef> patch"
- From: Chip Salzenberg <chip@atlantic.net>
- Msg-ID: <19980310163310.48509@cyprus>
- Files: pod/perldiag.pod pod/perlfunc.pod pp.c sv.c t/op/gv.t
-
- Title: "Consider @ARGV to be plain files if inplace (-i)"
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Msg-ID: <199802042106.QAA04082@nielsenmedia.com>
- Files: doio.c
-
- Title: "Fix semctl for Linux, Sun and SVR4"
- From: Graham Barr <gbarr@ti.com>, lvirden@cas.org (Larry W. Virden, x2487)
- Msg-ID: <3484247D.BB036D39@ti.com>, <9712021313.AA11495@cas.org>
- Files: doio.c
-
- Title: "C<dSP> entails using C<SP>, not C<sp>"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803070149.UAA12217@aatma.engin.umich.edu>
- Files: pod/perlcall.pod pod/perlembed.pod pod/perlguts.pod pod/perlxs.pod
- doio.c doop.c ext/DB_File/DB_File.xs
- ext/DynaLoader/dl_dld.xs ext/Opcode/Opcode.xs
- ext/POSIX/POSIX.xs ext/Socket/Socket.xs gv.c
- lib/ExtUtils/typemap mg.c os2/OS2/REXX/REXX.xs
- win32/win32.c
-
- Title: "Make autouse -w-safe"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199803030236.VAA13244@monk.mps.ohio-state.edu>
- Files: lib/autouse.pm op.c sv.c
-
- Title: "Misleading error on close of unopened handle"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0y4R07-0003PH-00@ursa.cus.cam.ac.uk>
- Files: doio.c
-
- Title: "Confusing error from perl -e "x'""
- From: Hans Mulder <hansmu@xs4all.nl>
- Msg-ID: <1998Mar25.174320.2866352@cor.newman.upenn.edu>
- Files: toke.c
-
- Title: "Add HAS_GNULIBC define"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305115202.9180K-100000@newton.phys>
- Files: config_H config_h.SH
-
- Title: "h_errno might not be an int"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980325165059.22255D-100000@newton.phys>
- Files: pp_sys.c
-
- Title: "Revised taint hole closer", "Revised taint hole closer"
- From: Chip Salzenberg <chip@atlantic.net>, Ilya Zakharevich
- <ilya@math.ohio-state.edu>
- Msg-ID: <19980310222127.09350@cyprus>,
- <199803110554.AAA29157@monk.mps.ohio-state.edu>
- Files: doio.c
-
- Title: "SEGV compiling localised lexical in perl5.004_05t1"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, h.sanden@elsevier.nl (Hugo
- van der Sanden)
- Msg-ID: <199803171530.QAA24053@dorlas.elsevier.nl>,
- <199803171727.MAA05234@aatma.engin.umich.edu>
- Files: op.c t/op/misc.t
-
- Title: "Stale SP in pp_substr"
- From: Stephen McCamant <alias@mcs.com>
- Msg-ID: <m0yFsTS-000EZpC@alias-2.pr.mcs.net>
- Files: pp.c
-
- Title: "Statement unlikely to be reached warning"
- From: Hans Mulder <hansm@icgned.nl>
- Msg-ID: <1997Dec24.171511.2683516@cor.newman>
- Files: op.c
-
- Title: "Tainting propagates from nowhere"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803140411.XAA09343@aatma.engin.umich.edu>
- Files: pp.c
-
- Title: "two trivial tweaks to 5.004m5t1"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803060553.AAA28461@aatma.engin.umich.edu>
- Files: proto.h win32/Makefile
-
- Title: "unpacking negatives on Alpha"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9710201503.AA24797@o09.xray.mpe.mpg.de>
- Files: pp.c t/op/pack.t
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "Cwd.pm: abs_path() and fast_abs_path() plus code merge"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <3482F365.4A0486BA@ti.com>
- Files: lib/Cwd.pm
-
- Title: "Math/BigInt.pm, fixed use of undefined value."
- From: abigail@fnx.com
- Msg-ID: <19980313052452.27365.qmail@betelgeuse.wayne.fnx.com>
- Files: lib/Math/BigInt.pm
-
- Title: "File::Find rewrite"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199803052344.SAA01008@monk.mps.ohio-state.edu>
- Files: lib/File/Find.pm
-
- Title: "efficient version of strict.pm"
- From: koenig@anna.mind.de (Andreas J. Koenig)
- Msg-ID: <sfcpvonhdnc.fsf@anna.in-berlin.de>
- Files: lib/strict.pm
-
- Title: "Socket occasional SEGV in pack_sockaddr_un"
- From: Trevor Blackwell <tlb@viaweb.com>
- Msg-ID: <199710281804.NAA09632@wagg.viaweb.com>
- Files: ext/Socket/Socket.xs
-
- Title: "Warning on mis-use of 'use lib'"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, Tom Phoenix
- <rootbeer@teleport.com>, chip@atlantic.net
- Msg-ID: <199801270435.XAA14147@cyprus.atlantic.net>,
- <E0xx9x4-0006jc-00@ursa.cus.cam.ac.uk>,
- <Pine.GSO.3.96.980126192445.22284N-100000@user2.teleport.com>
- Files: lib/lib.pm
-
- Title: "bug in Class::Struct"
- From: Tom Christiansen <tchrist@toy.perl.com>
- Msg-ID: <199803290814.KAA05699@toy.perl.com>
- Files: lib/Class/Struct.pm
-
- Title: "Allow POSIX to export nice()"
- From: bkeelerx@iwa.dp.intel.com (Bruce J. Keeler)
- Msg-ID: <eclg1kf5yf0.fsf@ws010.dp.intel.com>
- Files: ext/POSIX/POSIX.pm
-
- Title: "'use Env' on WinNT/95 fails"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803280511.AAA15933@aatma.engin.umich.edu>
- Files: lib/Env.pm
-
- ------ OTHER CHANGES ------
-
- Title: "mv-if-diff"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Msg-ID: <14572.9803271806@tempest.cise.npl.co.uk>
- Files: mv-if-diff
-
- ------ PORTABILITY - WIN32 ------
-
- Title: "fix various problems with backticks on win32"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199803070705.CAA15945@aatma.engin.umich.edu>
- Files: win32/config_h.PL win32/win32.c
-
- ------ TESTS ------
-
- Title: "Fix bug in locale.t"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199801042148.XAA08599@alpha.hut.fi>
- Files: t/pragma/locale.t
- Branch: maint-5.004/perl
- ! config_H config_h.SH doio.c doop.c ext/DB_File/DB_File.xs
- ! ext/DynaLoader/dl_dld.xs ext/Opcode/Opcode.xs
- ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs ext/Socket/Socket.xs
- ! gv.c lib/Class/Struct.pm lib/Cwd.pm lib/Env.pm
- ! lib/ExtUtils/typemap lib/File/Find.pm lib/Math/BigInt.pm
- ! lib/autouse.pm lib/lib.pm lib/strict.pm mg.c mv-if-diff op.c
- ! os2/OS2/REXX/REXX.xs pod/perlcall.pod pod/perldiag.pod
- ! pod/perlembed.pod pod/perlfunc.pod pod/perlguts.pod
- ! pod/perlxs.pod pp.c pp_ctl.c pp_sys.c proto.h sv.c t/op/gv.t
- ! t/op/misc.t t/op/pack.t t/pragma/locale.t toke.c
- ! win32/Makefile win32/config_h.PL win32/win32.c
-____________________________________________________________________________
-[ 895] By: gsar on 1998/04/22 03:13:19
- Log: intern -> sys_intern
- Branch: win32/perl
- ! embedvar.h interp.sym intrpvar.h win32/win32.h
-____________________________________________________________________________
-[ 894] By: gsar on 1998/04/22 02:42:20
- Log: hand-applied patch along with small tweaks
- Message-Id: <35400e2a.13538517@smtp1.ibm.net>
- Date: Tue, 21 Apr 1998 23:31:06 +0200
- From: jan.dubois@ibm.net (Jan Dubois)
- Subject: Re: Per-Interpreter variables for win32.c
- Branch: win32/perl
- ! embedvar.h interp.sym intrpvar.h perl.c perl.h proto.h
- ! win32/makedef.pl win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 893] By: gsar on 1998/04/21 03:42:21
- Log: add AS patch#17
- Branch: asperl
- + win32/GenCAPI.pl
- ! MANIFEST XSUB.h cv.h ipstdio.h lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MM_Win32.pm lib/ExtUtils/MakeMaker.pm
- ! lib/ExtUtils/Mksymlists.pm lib/ExtUtils/xsubpp op.c perl.h
- ! pp_ctl.c pp_hot.c proto.h sv.h thread.h win32/Makefile
- ! win32/dl_win32.xs win32/makefile.mk win32/runperl.c
- ! win32/win32.c
-____________________________________________________________________________
-[ 892] By: gsar on 1998/04/20 20:51:50
- Log: add AS patch#16
- Branch: asperl
- ! globals.c ipdir.h perl.h perlvars.h regcomp.h win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 891] By: gsar on 1998/04/19 23:50:34
- Log: tweak doc for C<do FILENAME>
- Branch: win32/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 890] By: gsar on 1998/04/19 01:08:11
- Log: use a pidtable that grows dynamically for popen()
- Message-Id: <3539f434.44835409@smtp1.ibm.net>
- Date: Sat, 18 Apr 1998 21:01:27 +0200
- From: jan.dubois@ibm.net (Jan Dubois)
- Subject: Re: [PATCH] for bug in 5.004_64 when compiled with MSC++ 4.2
- Branch: win32/perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 889] By: gsar on 1998/04/17 02:13:58
- Log: support POSIX, enable more locale tests
- Branch: win32/perl
- ! ext/POSIX/Makefile.PL ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs
- ! t/lib/posix.t t/pragma/locale.t win32/Makefile
- ! win32/makedef.pl win32/makefile.mk
-____________________________________________________________________________
-[ 888] By: mbeattie on 1998/04/14 16:22:51
- Log: CC did "<<" instead of ">>" for right-shift on ints.
- Branch: perl
- ! ext/B/B/CC.pm
-____________________________________________________________________________
-[ 887] By: TimBunce on 1998/04/10 17:44:55
- Log: Assorted patches:
-
- ------ CORE LANGUAGE ------
-
- Title: "Re: die exits with 0"
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Files: perl.c t/op/die_exit.t
-
- Title: "More toke.c commentary; fix oddity"
- From: h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <199803251022.LAA01308@dorlas.elsevier.nl>
- Files: toke.c
-
- Title: "for semctl on solaris"
- From: Graham Barr <gbarr@ti.com>
- Msg-ID: <34624B80.C014E841@ti.com>
- Files: doio.c t/op/ipcmsg.t t/op/ipcsem.t
-
- ------ DOCUMENTATION ------
-
- Title: "Add more 'see also's to perlre.pod.", "Perl regexp /g modifier bug"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>, epeschko@den-mdev1 (Ed
- Peschko), pjr@watcher.telstra.com.au (Peter Richardson)
- Msg-ID: <199803050000.LAA11476@watcher.telecom.com.au>,
- <199803050231.VAA19128@monk.mps.ohio-state.edu>,
- <199803050605.XAA09785@den-mdev1.co.csgsystems.com>
- Files: pod/perlre.pod
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "BigFloat - small neagtive numbers cause panic"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711201325.NAA09732@crypt.compulink.co.uk>
- Files: lib/Math/BigFloat.pm
-
- Title: "Update Getopt::Long to 2.16"
- From: JVromans@Squirrel.nl (Johan Vromans), Johan Vromans
- <jvromans@squirrel.nl>
- Msg-ID: <13571.48089.726787.147769@plume.nl.compuware.com>,
- <13572.6847.863219.973795@phoenix.squirrel.nl>
- Files: lib/Getopt/Long.pm
-
- Title: "New Text::ParseWords"
- From: pomeranz@netcom.com (Hal Pomeranz)
- Msg-ID: <199710162118.OAA06275@netcom7.netcom.com>
- Files: lib/Text/ParseWords.pm t/lib/parsewords.t
-
- Title: "Fixed Text/Wrap.pm bugs (2)"
- From: Jacqui Caren <Jacqui.Caren@ig.co.uk>
- Msg-ID: <199709291548.QAA08645@toad.ig.co.uk>
- Files: lib/Text/Wrap.pm
-
- Title: "Very *evil* File::CheckTree behavior! (now uses warn/die not
- print/exit)"
- From: Eryq <eryq@zeegee.com>, Randal Schwartz <merlyn@stonehenge.com>
- Msg-ID: <34B542FD.190A@zeegee.com>, <8cen2i9k6f.fsf@gadget.cscaper.com>
- Files: lib/File/CheckTree.pm
-
- ------ OTHER CHANGES ------
-
- Title: "Add ./emacs/ptags"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199803150847.DAA08196@monk.mps.ohio-state.edu>
- Files: emacs/ptags
-
- ------ TESTS ------
-
- Title: "Avoid stat test failure from build in /tmp (tmpfs)", "Build in /tmp"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>, Greg Bacon
- <gbacon@adtran.com>, pudge@pobox.com (Chris Nandor)
- Msg-ID: <199710171616.LAA13435@crp-201.adtran.com>,
- <Pine.SUN.3.96.971017171023.2349A-100000@newton.phys>,
- <v02130515b06be80f1486@[205.228.240.16]>
- Files: t/op/stat.t
-
- Title: "for failure with lib/timelocal"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>, jan.dubois@ibm.net (Jan Dubois)
- Msg-ID: <34c78f61.2529827@smtp1.ibm.net>,
- <E0xvdfI-00057d-00@ursa.cus.cam.ac.uk>
- Files: t/lib/timelocal.t
-
- Title: "Make "localhost" related failures more clear"
- From: Paul Hoffman <phoffman@proper.com>
- Msg-ID: <199801201859.KAA05686@mail.proper.com>
- Files: t/lib/io_sock.t t/lib/io_udp.t
-
- ------ UTILITIES ------
-
- Title: "Let h2xs read multiple header files"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>, Benjamin Sugars
- <bsugars@canoe.ca>
- Msg-ID: <Pine.SOL.3.95.980310091946.25236A-100000@interact>,
- <Pine.SUN.3.96.980310145455.638A-100000@newton.phys>
- Files: utils/h2xs.PL
- Branch: maint-5.004/perl
- + emacs/ptags t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t
- ! MANIFEST doio.c lib/File/CheckTree.pm lib/Getopt/Long.pm
- ! lib/Math/BigFloat.pm lib/Text/ParseWords.pm lib/Text/Wrap.pm
- ! lib/base.pm perl.c pod/perlre.pod t/lib/io_sock.t
- ! t/lib/io_udp.t t/lib/parsewords.t t/lib/timelocal.t
- ! t/op/stat.t toke.c utils/h2xs.PL vms/perly_h.vms
-____________________________________________________________________________
-[ 886] By: TimBunce on 1998/04/10 14:35:34
- Log: Changes relating primarily to portability.
-
- ------ CORE LANGUAGE ------
-
- Title: "5.004_55: Another round of OS/2 patches"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199803050945.EAA20153@monk.mps.ohio-state.edu>
- Files: hints/os2.sh pod/perlguts.pod cop.h perl.h proto.h README.os2
- global.sym lib/ExtUtils/MM_OS2.pm lib/File/Path.pm op.c
- os2/Changes os2/Makefile.SHs os2/os2.c os2/perl2cmd.pl
- perl.c pod/pod2man.PL pp_ctl.c pp_hot.c pp_sys.c
- t/lib/filecopy.t util.c utils/perldoc.PL
-
- Title: "VMS: chdir() with empty arg list"
- From: lane@duphy4.drexel.edu (Charles Lane)
- Msg-ID: <980317125556.222041c7@DUPHY4.Physics.Drexel.Edu>
- Files: pp_sys.c
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "ExtUtils/MM_Unix.pm changed to use ld -rpath on IRIX"
- From: "W. Phillip Moore" <wpm@ms.com>
- Msg-ID: <199712011738.MAA21139@zappa.morgan.com>
- Files: lib/ExtUtils/MM_Unix.pm
-
- Title: "[Linux] POSIX::_[PS]C_.+ bug (add HINT_SC_EXIST)"
- From: Yutaka OIWA <oiwa@is.s.u-tokyo.ac.jp>
- Msg-ID: <199712251923.EAA08260@tjms1f.is.s.u-tokyo.ac.jp>
- Files: ext/POSIX/hints/linux.pl ext/POSIX/POSIX.xs
-
- Title: "5.004_04-m1] Use HAS_GNULIBC in POSIX.xs"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305115517.9180L-100000@newton.phys>
- Files: ext/POSIX/POSIX.xs
-
- Title: ""ODBM_File.c", line 275: NULL undefined"
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9803091310.AA23264@claudius.bfsec.bt.co.uk>
- Files: ext/ODBM_File/ODBM_File.xs
-
- ------ OTHER CHANGES ------
- Files:
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "5.004_04 QNX getcwd"
- From: Norton Allen <allen@huarp.harvard.edu>
- Msg-ID: <199802121838.NAA20452@dolores.harvard.edu>,
- <199803061511.KAA22346@bottesini.harvard.edu>
- Files: hints/qnx.sh lib/Cwd.pm t/op/magic.t
-
- Title: "hints/netbsd.sh d_setrgid d_setruid"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802281435.QAA10866@alpha.hut.fi>
- Files: hints/netbsd.sh
-
- Title: "osname=unixware, osvers=2.03, archname=i386-unixware
- d_casti32=undef"
- From: Tom Hughes <tom@compton.demon.co.uk>
- Msg-ID: <465398da47%tom@compton.demon.co.uk>
- Files: hints/svr4.sh
-
- Title: "hints/bsdos.sh patch for BSDI 3.1"
- From: Jan-Pieter Cornet <johnpc@xs4all.nl>
- Msg-ID: <6fbip6$3cp$1@xs1.xs4all.nl>
- Files: hints/bsdos.sh
-
- Title: "Remove BIND_NOSTART from DynaLoader for HP"
- From: Keong Lim <Keong.Lim@sr.com.au>
- Msg-ID: <01BD1D03.53B65E90@sieplan2.sr.com.au>
- Files: ext/DynaLoader/dl_hpux.xs
-
- Title: "Building Perl on AIX 4+ with shared libraries and dynamic loading"
- From: Juan Gallego <Little.Boss@physics.mcgill.ca>
- Msg-ID: <Pine.SGI.3.91.971022084517.17052F-100000@nazgul.physics.mcgill.ca>
- Files: hints/aix.sh
-
- Title: "alpha-dec_osf 5.0"
- From: Spider Boardman <spider@Orb.Nashua.NH.US>
- Msg-ID: <199712232305.SAA08359@Orb.Nashua.NH.US>
- Files: hints/dec_osf.sh
-
- Title: "Off-by-one error with OS2::PrfDB"
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710170920.FAA00390@monk.mps.ohio-state.edu>
- Files: os2/OS2/PrfDB/PrfDB.xs
-
- Title: "5.004_04-m1] Allow overrides in hints/openbsd.sh"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305115956.9180N-100000@newton.phys>
- Files: hints/openbsd.sh
-
- Title: "5.004_04-m1] Linux shouldn't use -lnet"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305115843.9180M-100000@newton.phys>
- Files: hints/linux.sh
-
- Title: "5.004_(04|63)] Close VMS security hole"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01IV6LRJCSSC0009C4@cor.newman.upenn.edu>
- Files: vms/vms.c
-
- Title: "Re: Perl online documentation on OpenVMS"
- From: pvhp@forte.com (Peter Prymmer)
- Msg-ID: <9803192143.AA28120@forte.com>
- Files: README.vms
-
- Title: "Perl5.004_04m4t4 *almost* makes it for VMS", "Updated
- vms/perly_c.vms and vms/perly_h.vms"
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>, Dan Sugalski
- <sugalskd@osshe.edu>, larry@wall.org (Larry Wall)
- Msg-ID: <199710151650.JAA29185@wall.org>,
- <3.0.3.32.19971014150404.02fdef78@osshe.edu>,
- <Pine.SUN.3.96.971015121704.28456F-100000@newton.phys>
- Files: vms/perly_c.vms
-
- Title: "Updated, non-wordwrapped, patch to README.VMS"
- From: Dan Sugalski <sugalskd@osshe.edu>
- Msg-ID: <3.0.5.32.19980213133828.0092c870@osshe.edu>
- Files: README.vms
-
- Title: "VMS patches to 5.004_03 (excluding installperl and timelocal.t)"
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Msg-ID: <01INZT9G2LZS0006YW@cor.newman.upenn.edu>
- Files: lib/File/Basename.pm lib/File/Path.pm vms/config.vms vms/descrip.mms
- vms/genconfig.pl vms/test.com vms/vms.c vms/ext/Filespec.pm
- vms/ext/filespec.t
-
- Title: "Re: VMSperl crashes on -Mblib argument"
- From: bailey@newman.upenn.edu (Charles Bailey)
- Msg-ID: <1997Dec10.004439.2635060@cor.newman>
- Files: lib/blib.pm vms/vms.c
-
- Title: "hints/linux.sh (MkLinux / PPC)"
- From: pudge@pobox.com (Chris Nandor)
- Msg-ID: <v0213050cb06c19682a25@[205.228.240.28]>
- Files: hints/linux.sh
-
- Title: "hpux.sh hints file clarification suggestion"
- From: root@qad.com
- Msg-ID: <199802192351.QAA09096@jhereg.perl.com>
- Files: hints/hpux.sh
-
- Title: "new hints/solaris_2.sh"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0xw80h-0005SV-00@ursa.cus.cam.ac.uk>
- Files: hints/solaris_2.sh
- Branch: maint-5.004/perl
- ! README.os2 README.vms cop.h ext/DynaLoader/dl_hpux.xs
- ! ext/ODBM_File/ODBM_File.xs ext/POSIX/POSIX.xs
- ! ext/POSIX/hints/linux.pl global.sym hints/aix.sh
- ! hints/bsdos.sh hints/dec_osf.sh hints/hpux.sh hints/linux.sh
- ! hints/netbsd.sh hints/openbsd.sh hints/os2.sh hints/qnx.sh
- ! hints/solaris_2.sh hints/svr4.sh lib/Cwd.pm
- ! lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm
- ! lib/File/Basename.pm lib/File/Path.pm lib/blib.pm op.c
- ! os2/Changes os2/Makefile.SHs os2/OS2/PrfDB/PrfDB.xs os2/os2.c
- ! os2/perl2cmd.pl perl.c perl.h pod/perlguts.pod pod/pod2man.PL
- ! pp_ctl.c pp_hot.c pp_sys.c proto.h t/lib/filecopy.t
- ! t/op/magic.t util.c utils/perldoc.PL vms/config.vms
- ! vms/descrip.mms vms/ext/Filespec.pm vms/ext/filespec.t
- ! vms/genconfig.pl vms/perly_c.vms vms/perly_h.vms vms/test.com
- ! vms/vms.c
-____________________________________________________________________________
-[ 885] By: gsar on 1998/04/08 01:14:29
- Log: small tweaks to make it compile (doesn't run)
- Branch: asperl
- ! objpp.h win32/Makefile win32/config.bc win32/config.gc
- ! win32/config.vc win32/makefile.mk
-____________________________________________________________________________
-[ 884] By: gsar on 1998/04/08 00:14:13
- Log: integrate mainline changes
- Branch: asperl
- +> Changes5.004 ext/Thread/Thread/Signal.pm
- +> lib/ExtUtils/Installed.pm lib/ExtUtils/Packlist.pm
- +> lib/ExtUtils/inst t/op/hashwarn.t
- ! ObjXSub.h embedvar.h interp.sym intrpvar.h objpp.h
- !> (integrate 127 files)
-____________________________________________________________________________
-[ 883] By: gsar on 1998/04/06 20:21:20
- Log: make old DomainName() implementation the default (so Win95
- is happy)
- Branch: win32/perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 882] By: gsar on 1998/04/05 23:32:33
- Log: fix memory leaks in offer_nice_chunk()
- Branch: win32/perl
- ! perl.h sv.c
-____________________________________________________________________________
-[ 881] By: gsar on 1998/04/04 23:11:52
- Log: set up PUSHSTACK for __DIE__ and __WARN__ hooks also
- Branch: win32/perl
- ! cop.h util.c
-____________________________________________________________________________
-[ 880] By: gsar on 1998/04/04 22:35:54
- Log: fix refcounting of GvSTASH() when glob becomes nought
- (this takes care of the "unbalanced strtab refcount" problem)
- Branch: win32/perl
- ! sv.c
-____________________________________________________________________________
-[ 879] By: gsar on 1998/04/04 21:16:17
- Log: change 866 was incomplete
- Branch: win32/perl
- ! hv.c
-____________________________________________________________________________
-[ 878] By: gsar on 1998/04/04 20:31:56
- Log: fixes for various noises under PERL_DESTRUCT_LEVEL
- Branch: win32/perl
- ! cop.h perl.c pp_ctl.c
-____________________________________________________________________________
-[ 877] By: gsar on 1998/04/04 17:55:30
- Log: integrate mainline
- Branch: win32/perl
- +> Changes5.004
- !> Changes MANIFEST sv.c t/op/misc.t
-____________________________________________________________________________
-[ 876] By: gsar on 1998/04/04 17:26:32
- Log: remove __declspec kludge in sdbm.h in favor of setting a
- flag for static symbols
- Branch: win32/perl
- ! EXTERN.h ext/SDBM_File/sdbm/Makefile.PL
- ! ext/SDBM_File/sdbm/sdbm.h
-____________________________________________________________________________
-[ 875] By: gsar on 1998/04/04 01:11:57
- Log: fix order of init
- Message-Id: <3.0.5.32.19980403135815.009d2440@osshe.edu>
- Date: Fri, 03 Apr 1998 13:58:15 PST
- From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: [PATCH 5.004_64] perl dies in perl_construct when compiled
- with MULTIPLICITY
- Branch: win32/perl
- ! perl.c
-____________________________________________________________________________
-[ 874] By: gsar on 1998/04/04 00:34:59
- Log: the EXTCONST in sdbm.h breaks SDBM on Borland, since
- the declared symbol is not in a DLL (so kludge it)
- Branch: win32/perl
- ! ext/SDBM_File/sdbm/sdbm.h
-____________________________________________________________________________
-[ 873] By: TimBunce on 1998/04/03 22:17:40
- Log: Title: "FileHandle Documentation patch"
- From: "Darren/Torin/Who Ever..." <torin@daft.com>
- Msg-ID: <87emzqo49g.fsf@perv.daft.com>
- Files: lib/FileHandle.pm
- Branch: maint-5.004/perl
- ! lib/FileHandle.pm
-____________________________________________________________________________
-[ 872] By: TimBunce on 1998/04/03 22:01:03
- Log: Documentation and documentation related patches:
-
- ------ BUILD PROCESS ------
-
- Title: "Docs re /usr/bin/perl quasi-standard location"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971117080737.12318C-100000@usertest.teleport.com>
- Files: INSTALL pod/perlrun.pod
-
- ------ DOCUMENTATION ------
-
- Title: "/RFC|RFC-1305/ non-greedy"
- From: Jan-Pieter Cornet <johnpc@xs4all.nl>
- Msg-ID: <6epo02$c4r$1@xs1.xs4all.nl>
- Files: pod/perlre.pod
-
- Title: "5.004_04: perlhist.pod, buildtoc, perltoc.pod"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802191543.RAA29231@alpha.hut.fi>
- Files: pod/perl.pod pod/perlhist.pod pod/perltoc.pod pod/buildtoc
-
- Title: "5.004_04: pod/perlfunc.pod: i18n example for localtime()"
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199711141555.RAA18875@alpha.hut.fi>
- Files: pod/perlfunc.pod
-
- Title: "typo-fix and suggestion for perlguts.pod"
- From: h.sanden@elsevier.nl (Hugo van der Sanden)
- Msg-ID: <199803051543.QAA03097@dorlas.elsevier.nl>
- Files: pod/perlguts.pod
-
- Title: "perlfunc/syscall curiosity"
- From: Roderick Schertler <roderick@argon.org>, Tkil
- <tkil@reptile.scrye.com>
- Msg-ID: <199711302259.PAA02134@reptile.scrye.com>,
- <pziut8snva.fsf@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod
-
- Title: "Document sprintf %#x behaviour for zero value"
- From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Msg-ID: <1997Nov5.185959.2539604@cor.newman>
- Files: pod/perlfunc.pod
-
- Title: "NUL termination (was Re: STOP THE PRESSES)"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0xsn5M-0002gw-00@ursa.cus.cam.ac.uk>
- Files: pod/perlguts.pod
-
- Title: "Typo fix."
- From: abigail@fnx.com
- Msg-ID: <19971101120114.1030.qmail@betelgeuse.wayne.fnx.com>
- Files: pod/perlop.pod pod/perlvar.pod
-
- Title: "5.004_63 perlrun.pod: _DEBUG_MSTATS"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9803181940.AA22587@o09.xray.mpe.mpg.de>
- Files: pod/perlrun.pod
-
- Title: "Re: Conservative C<*x = undef> patch"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0yCjHT-0005Dt-00@ursa.cus.cam.ac.uk>
- Files: pod/perltrap.pod
-
- Title: "perlfunc.pod for flock()"
- From: "Jeremy D. Zawodny" <jzawodn@wcnet.org>
- Msg-ID: <3.0.5.32.19971118203119.00a723e0@woody.wcnet.org>
- Files: pod/perlfunc.pod
-
- Title: "buglet: 'perltoc' not mentioned in perl.pod"
- From: Tkil <tkil@scrye.com>
- Msg-ID: <19971127035036.17668.qmail@scrye.com>
- Files: pod/perl.pod
-
- Title: "for() and map() peculiarity"
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0y4YAa-0003Qu-00@ursa.cus.cam.ac.uk>
- Files: pod/perlsyn.pod
-
- Title: "Re: new text for perlsec"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.980328100418.22321T-100000@user2.teleport.com>
- Files: pod/perlsec.pod
-
- Title: "perldsc's debugger x command"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <10669.878352893@eeyore.ibcinc.com>
- Files: pod/perldsc.pod
-
- Title: "perlre.pod"
- From: Ted Ashton <ashted@southern.edu>
- Msg-ID: <199802271501.KAA09279@ns.southern.edu>
- Files: pod/perlre.pod
-
- Title: "Re: printf and $\", "printf and $\"
- From: Roderick Schertler <roderick@argon.org>, Tom Phoenix
- <rootbeer@teleport.com>, nag <nick@flirble.org>
- Msg-ID: <199711141918.TAA08096@flirble.org>,
- <Pine.GSO.3.96.971117085421.12318J-100000@usertest.teleport
- .com>, <pzyb2ncr42.fsf@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod
-
- Title: "recv() typo"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <12064.877012073@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod
-
- Title: "truncate return value"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <5490.878337883@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod
-
- Title: "update to perlbook.pod"
- From: "Nathan V. Patwardhan" <nvp@mediaone.net>, Randal Schwartz
- <merlyn@stonehenge.com>, Stephen Potter
- <spp@psasolar.colltech.com>, Tom Phoenix
- <rootbeer@teleport.com>
- Msg-ID: <199803241354.HAA23938@psasolar.psa.pencom.com>,
- <199803241441.OAA01261@mediaone.net>,
- <8clnu0i05k.fsf@gadget.cscaper.com>,
- <Pine.GSO.3.96.980324111957.15753C-100000@user1.teleport.com>
- Files: pod/perlbook.pod
-
- Title: "utime documentation"
- From: "Brandon S. Allbery KF8NH" <bsa@kf8nh.apk.net>, "M.J.T. Guy"
- <mjtg@cus.cam.ac.uk>
- Msg-ID: <199802180256.VAA11369@speaker.kf8nh.apk.net>,
- <E0y4qd6-0000P6-00@ursa.cus.cam.ac.uk>
- Files: pod/perlfunc.pod
-
- Title: "(well, doc patch) use of // requires successful match"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <pz7mb4bips.fsf@eeyore.ibcinc.com>
- Files: pod/perlop.pod
-
- ------ LIBRARY AND EXTENSIONS ------
-
- Title: "MakeMaker PM doc patch and a DIR buglet"
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9711101050.AA13868@o09.xray.mpe.mpg.de>
- Files: lib/ExtUtils/MakeMaker.pm
-
- Title: "bareword clarification for constant.pm"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <6460.878143077@eeyore.ibcinc.com>
- Files: lib/constant.pm
-
- Title: "integer rand - bug or feature?"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <pzhg8lvgta.fsf@eeyore.ibcinc.com>
- Files: lib/integer.pm
-
- ------ OTHER CHANGES ------
-
- Title: "FileHandle Documentation patch"
- From: "Darren/Torin/Who Ever..." <torin@daft.com>
- Msg-ID: <87emzqo49g.fsf@perv.daft.com>
-
- Title: "perl5.004_61 myconfig updates"
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980305150629.11530G-100000@newton.phys>
- Files: myconfig
-
- Title: "small fixups in pod2latex.PL"
- From: "Darren/Torin/Who Ever..." <torin@daft.com>
- Msg-ID: <873eg6o3v2.fsf@perv.daft.com>
-
- ------ PORTABILITY - GENERAL ------
-
- Title: "Misc doc fixes for README.VMS"
- From: Dan Sugalski <sugalskd@osshe.edu>
- Msg-ID: <3.0.5.32.19980121113134.00924a20@osshe.edu>
- Files: README.vms
-
- Title: "moved DynaLib"
- From: John Tobey <jtobey@channel1.com>
- Msg-ID: <199710182332.XAA21630@remote212>
- Files: ext/DynaLoader/DynaLoader.pm.PL
-
- ------ UTILITIES ------
-
- Title: "Searching for FAQs (patch to perldoc)"
- From: Piers Cawley <pdcawley@bofh.org.uk>, Russ Allbery <rra@stanford.edu>
- Msg-ID: <m3d8gsb8uk.fsf@windlord.Stanford.EDU>,
- <m3iuqkfmiq.fsf@tower.bofh.org.uk>
- Files: utils/perldoc.PL
-
- Title: "perldoc"
- From: Ted Ashton <ashted@southern.edu>
- Msg-ID: <199802271510.KAA10506@ns.southern.edu>
- Files: utils/perldoc.PL
-
- Title: "perldoc -f not using pod2man"
- From: Russ Allbery <rra@stanford.edu>
- Msg-ID: <m3hg4f9vyy.fsf@windlord.Stanford.EDU>
- Files: utils/perldoc.PL
-
- Title: "perldoc -m should not require pod"
- From: Robin Houston <robin@nml.guardian.co.uk>
- Msg-ID: <199803241319.NAA24777@stringfellow.guardian.co.uk>
- Files: utils/perldoc.PL
-
- Title: "small fix for perldoc in perl 5.004_04"
- From: Julian Yip <julian@imoney.com>
- Msg-ID: <Roam.SIMC.2.0.6.884805579.5280.julian@imoney.com>
- Files: utils/perldoc.PL
- Branch: maint-5.004/perl
- - ext/DynaLoader/DynaLoader.pm
- ! Changes Configure INSTALL README.vms
- ! ext/DynaLoader/DynaLoader.pm.PL ext/Socket/Socket.pm
- ! lib/ExtUtils/MakeMaker.pm lib/Tie/Hash.pm lib/constant.pm
- ! lib/integer.pm myconfig pod/buildtoc pod/checkpods.PL
- ! pod/perl.pod pod/perlbook.pod pod/perldelta.pod
- ! pod/perldiag.pod pod/perldsc.pod pod/perlfunc.pod
- ! pod/perlguts.pod pod/perlhist.pod pod/perllocale.pod
- ! pod/perlmod.pod pod/perlop.pod pod/perlre.pod pod/perlrun.pod
- ! pod/perlsec.pod pod/perlstyle.pod pod/perlsyn.pod
- ! pod/perltoc.pod pod/perltrap.pod pod/perlvar.pod
- ! pod/pod2latex.PL toke.c utils/perldoc.PL
-
-----------------
-Version 5.004_64
-----------------
-
-____________________________________________________________________________
-[ 871] By: mbeattie on 1998/04/03 13:38:59
- Log: Update Changes5.004 and Changes, fix MANIFEST
- Branch: perl
- + Changes
- ! Changes5.004 MANIFEST
-____________________________________________________________________________
-[ 870] By: mbeattie on 1998/04/03 13:36:29
- Log: Rename Changes to Changes5.004 (via an integrate)
- Branch: perl
- +> Changes5.004
- - Changes
-____________________________________________________________________________
-[ 869] By: mbeattie on 1998/04/03 11:53:00
- Log: Subject: [PATCH] Perl 5.005b1t2/perl5.004_63 (resend)
- Date: Wed, 18 Mar 1998 01:24:20 +0100 (MET)
- From: Jan-Pieter Cornet <johnpc@xs4all.net>
- Branch: perl
- ! sv.c t/op/misc.t
-____________________________________________________________________________
-[ 868] By: mbeattie on 1998/04/03 11:16:26
- Log: Integrate win32 branch into mainline
- Branch: perl
- !> (integrate 31 files)
-____________________________________________________________________________
-[ 867] By: gsar on 1998/04/03 08:47:55
- Log: config.* fixes
- Branch: win32/perl
- ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 866] By: gsar on 1998/04/03 07:22:50
- Log: fixup hv_free_ent() to not fail on null HeVAL()
- Branch: win32/perl
- ! hv.c perl.c
-____________________________________________________________________________
-[ 865] By: gsar on 1998/04/03 07:06:12
- Log: integrate mainline
- Branch: win32/perl
- +> ext/Thread/Thread/Signal.pm t/op/hashwarn.t
- !> (integrate 71 files)
-____________________________________________________________________________
-[ 864] By: gsar on 1998/04/03 06:59:37
- Log: implement stack-of-stacks so that magic invocations don't
- invalidate local stack pointer
- Branch: win32/perl
- ! av.c cop.h deb.c embed.h embedvar.h global.sym gv.c interp.sym
- ! intrpvar.h mg.c op.c perl.c pp.h pp_ctl.c pp_sys.c proto.h
- ! scope.c sv.c t/op/runlevel.t thrdvar.h util.c
-____________________________________________________________________________
-[ 863] By: gsar on 1998/04/03 01:26:09
- Log: add AS patch#15
- Branch: asperl
- ! ipenv.h lib/ExtUtils/MM_Unix.pm perl.c perlenv.h
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/config_h.PL win32/config_sh.PL win32/runperl.c
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 862] By: mbeattie on 1998/04/02 17:08:43
- Log: Subject: [PATCH for 5.004_63] Config_63-04-05.diff
- Date: Thu, 2 Apr 1998 11:56:51 -0500 (EST)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Branch: perl
- ! Configure ext/Socket/Socket.xs myconfig
-____________________________________________________________________________
-[ 861] By: mbeattie on 1998/04/02 16:32:53
- Log: Change 854 added { NULL, 0 } to sdbm.h which needs to be {0, 0}
- since appropriate headers aren't included.
- Branch: perl
- ! ext/SDBM_File/sdbm/sdbm.h
-____________________________________________________________________________
-[ 860] By: mbeattie on 1998/04/02 16:17:11
- Log: Bumped patchlevel.h to 64
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 859] By: mbeattie on 1998/04/02 16:16:26
- Log: Subject: Re: [PATCH] 5.004_63: UNICOS 9
- Date: Fri, 20 Mar 1998 19:39:28 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! hints/unicos.sh regcomp.h
-____________________________________________________________________________
-[ 858] By: mbeattie on 1998/04/02 16:13:24
- Log: Subject: [PATCH] Re: Odd number of elements in hash list.
- Date: Sat, 28 Mar 1998 15:26:46 -0800 (PST)
- From: Tom Phoenix <rootbeer@teleport.com>
- Branch: perl
- + t/op/hashwarn.t
- ! MANIFEST pod/perldiag.pod pp.c pp_hot.c
-____________________________________________________________________________
-[ 857] By: mbeattie on 1998/04/02 16:08:43
- Log: Subject: [PATCH 5.004_(04|63)] Close VMS security hole
- Date: Sat, 28 Mar 1998 02:05:03 -0500 (EST)
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Branch: perl
- ! vms/vms.c
-____________________________________________________________________________
-[ 856] By: mbeattie on 1998/04/02 16:07:44
- Log: Subject: [PATCH] mv-if-diff
- Date: Fri, 27 Mar 98 18:06:11 GMT
- From: Robin Barker <rmb1@cise.npl.co.uk>
- Branch: perl
- ! mv-if-diff
-____________________________________________________________________________
-[ 855] By: mbeattie on 1998/04/02 16:06:54
- Log: From: Jan-Pieter Cornet <johnpc@xs4all.net>
- Subject: Re: [PATCH] [BUG 5.004_63] define/set of PERL_DESTRUCT_LEVEL
- Date: Fri, 27 Mar 1998 02:11:21 +0100 (MET)
- Subject: [PATCH] another destruct_level fix
- Date: Mon, 30 Mar 1998 23:48:12 +0200 (MET DST)
- Branch: perl
- ! perl.c sv.c
-____________________________________________________________________________
-[ 854] By: mbeattie on 1998/04/02 16:03:37
- Log: Subject: Next wave of _63 VMS patches
- Date: Thu, 26 Mar 1998 15:11:50 -0500 (EST)
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Branch: perl
- ! EXTERN.h INTERN.h ext/SDBM_File/Makefile.PL
- ! ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/dba.c
- ! ext/SDBM_File/sdbm/dbd.c ext/SDBM_File/sdbm/dbu.c
- ! ext/SDBM_File/sdbm/hash.c ext/SDBM_File/sdbm/pair.c
- ! ext/SDBM_File/sdbm/sdbm.c ext/SDBM_File/sdbm/sdbm.h
- ! ext/Thread/io.t installperl lib/ExtUtils/MM_VMS.pm
- ! lib/Net/Ping.pm perldir.h perlsdio.h t/lib/english.t
- ! vms/config.vms vms/descrip.mms vms/ext/Filespec.pm
- ! vms/ext/Stdio/0README.txt vms/ext/Stdio/Stdio.pm
- ! vms/ext/Stdio/Stdio.xs vms/ext/Stdio/test.pl
- ! vms/ext/filespec.t vms/genconfig.pl vms/perly_c.vms vms/vms.c
- ! vms/vmsish.h
-____________________________________________________________________________
-[ 853] By: mbeattie on 1998/04/02 15:55:46
- Log: Subject: [PATCH 5.00463] Confusing error from perl -e "x'"
- Date: Wed, 25 Mar 1998 17:43:17 -0500 (EST)
- From: Hans Mulder <hansmu@xs4all.nl>
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 852] By: mbeattie on 1998/04/02 15:54:24
- Log: Subject: [PATCH] small fixups in pod2latex.PL
- Date: 25 Mar 1998 13:30:25 -0800
- From: "Darren/Torin/Who Ever..." <torin@daft.com>
- Branch: perl
- ! pod/pod2latex.PL
-____________________________________________________________________________
-[ 851] By: mbeattie on 1998/04/02 15:50:58
- Log: Subject: [PATCH] hints/irix_6.sh with GCC
- Date: Tue, 24 Mar 1998 12:25:10 -0800 (EST)
- From: kstar@chapin.edu (Kurt D. Starsinic)
- Branch: perl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 850] By: mbeattie on 1998/04/02 15:45:33
- Log: Subject: [PATCH] perldoc -m
- Date: Tue, 24 Mar 1998 13:19:38 GMT
- From: Robin Houston <robin@nml.guardian.co.uk>
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 849] By: mbeattie on 1998/04/02 15:42:52
- Log: Subject: [PATCH for 5.004_63] dos-djgpp update
- Date: Mon, 23 Mar 1998 14:13:46 +0100
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Branch: perl
- ! djgpp/config.over hints/dos_djgpp.sh
-____________________________________________________________________________
-[ 848] By: mbeattie on 1998/04/02 15:38:19
- Log: Subject: [PATCH] Stale SP in pp_substr
- Date: Thu, 19 Mar 1998 21:28:02 -0600 (CST)
- From: Stephen McCamant <alias@mcs.com>
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 847] By: mbeattie on 1998/04/02 15:36:33
- Log: Add missing export of "nice" to ext/POSIX/POSIX.pm (Phil Tait)
- Branch: perl
- ! ext/POSIX/POSIX.pm
-____________________________________________________________________________
-[ 846] By: mbeattie on 1998/04/02 15:34:36
- Log: Subject: [PATCH] 5.004_63: further -e patching
- Date: Wed, 18 Mar 1998 23:21:08 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! perl.c pod/perldiag.pod
-____________________________________________________________________________
-[ 845] By: mbeattie on 1998/04/02 15:25:18
- Log: Andy Dougherty's configuration patches (Config_63-01 up to 04).
- Branch: perl
- ! Configure INSTALL Policy_sh.SH Porting/Glossary
- ! Porting/config.sh Porting/config_H config_h.SH
- ! ext/POSIX/POSIX.xs handy.h hints/hpux.sh myconfig perlsock.h
- ! pp.c pp_sys.c regexec.c
-____________________________________________________________________________
-[ 844] By: mbeattie on 1998/04/02 14:28:17
- Log: Subject: [PATCH 5.004_63] perlrun.pod: PERL_DEBUG_MSTATS
- Date: Wed, 18 Mar 1998 20:40:19 +0100
- From: Achim Bohnet <ach@mpe.mpg.de>
- Branch: perl
- ! pod/perlrun.pod
-____________________________________________________________________________
-[ 843] By: mbeattie on 1998/04/02 14:26:52
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: 5.004_63 picky compiler fixes [PATCH]
- Date: Wed, 18 Mar 1998 09:36:32 -0800
- Subject: [PATCH 5.004_63] Fix function prototype with long doubles
- Date: Wed, 18 Mar 1998 14:48:19 -0800
- Branch: perl
- ! ext/POSIX/POSIX.xs ext/Thread/Thread.xs vms/vms.c
-____________________________________________________________________________
-[ 842] By: mbeattie on 1998/04/02 14:22:41
- Log: From: Stephen Potter <spp@psasolar.colltech.com>
- Subject: Re: doc: perlrun typo
- Date: Wed, 18 Mar 1998 10:06:55 -0600
- Subject: Re: [PATCH 5.004_63] PerlLIO abstraction cleanup
- Date: Tue, 24 Mar 1998 21:20:51 -0600
- Branch: perl
- ! mg.c perl.c pod/perlrun.pod pp_hot.c pp_sys.c util.c
-____________________________________________________________________________
-[ 841] By: mbeattie on 1998/04/02 14:17:31
- Log: Subject: [PATCH] Add "Full 64 bit support" to Todo; document Todo in pumpkin.pod
- Date: Wed, 18 Mar 1998 12:44:58 +0100
- From: Dominic Dunlop <domo@vo.lu>
- Branch: perl
- ! Porting/pumpkin.pod Todo
-____________________________________________________________________________
-[ 840] By: mbeattie on 1998/04/02 14:14:22
- Log: Subject: [PATCH] Configure hints/ patches
- Date: Wed, 18 Mar 1998 02:47:38 +0100 (MET)
- From: Jan-Pieter Cornet <johnpc@xs4all.net>
- Branch: perl
- ! hints/linux.sh hints/qnx.sh
-____________________________________________________________________________
-[ 839] By: mbeattie on 1998/04/02 14:13:13
- Log: Remove duplicate code in cygwin32/perlgcc (Blair Zajac)
- Branch: perl
- ! cygwin32/perlgcc
-____________________________________________________________________________
-[ 838] By: gsar on 1998/03/28 05:01:57
- Log: fix Env.pm to weed out illegal names
- Branch: win32/perl
- ! lib/Env.pm
-____________________________________________________________________________
-[ 837] By: gsar on 1998/03/28 04:39:43
- Log: fix typo in makefile.mk
- Branch: win32/perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 836] By: gsar on 1998/03/23 17:40:15
- Log: add file: to installhtml URLs
- Branch: win32/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 835] By: mbeattie on 1998/03/18 11:03:11
- Log: Add Thread::Signal to run signal handlers reliably in a new thread
- Branch: perl
- + ext/Thread/Thread/Signal.pm
- ! MANIFEST ext/Thread/Thread.xs
-
-----------------
-Version 5.004_63
-----------------
-
-____________________________________________________________________________
-[ 834] By: mbeattie on 1998/03/17 16:19:10
- Log: Policy_sh.SH had extra $ in pager=$pager comment (Hallvard B Furuseth)
- Branch: perl
- ! Policy_sh.SH
-____________________________________________________________________________
-[ 833] By: mbeattie on 1998/03/17 16:11:02
- Log: Integrate win32 branch into mainline.
- Branch: perl
- !> regcomp.c win32/config.bc win32/config.gc win32/config.vc
- !> win32/config_H.bc win32/config_H.gc win32/config_H.vc
- !> win32/win32.c
-____________________________________________________________________________
-[ 832] By: gsar on 1998/03/17 14:32:39
- Log: propagate bugfix @ change831 from asperl
- Branch: win32/perl
- ! regcomp.c
-____________________________________________________________________________
-[ 831] By: gsar on 1998/03/17 14:02:51
- Log: fix buggy order of free() in regcomp.c (from AS)
- Branch: asperl
- ! regcomp.c
-____________________________________________________________________________
-[ 830] By: gsar on 1998/03/17 01:10:54
- Log: add a part of AS patch#14, backout incomplete variable
- name changes for gcc. Builds and tests under VC/BC once again.
- Branch: asperl
- ! bytecode.h mg.c pp.c pp_ctl.c pp_hot.c toke.c
-____________________________________________________________________________
-[ 829] By: gsar on 1998/03/16 23:49:18
- Log: stray tweak to win32.c
- Branch: win32/perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 828] By: gsar on 1998/03/16 22:06:03
- Log: update win32/config* files
- Branch: win32/perl
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 827] By: gsar on 1998/03/16 19:09:30
- Log: trivial integrate of mainline
- Branch: win32/perl
- +> lib/ExtUtils/Installed.pm lib/ExtUtils/Packlist.pm
- +> lib/ExtUtils/inst
- !> (integrate 61 files)
-____________________________________________________________________________
-[ 826] By: mbeattie on 1998/03/16 16:39:23
- Log: newCONSTSUB had private MY_start_subparse.
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 825] By: mbeattie on 1998/03/16 16:36:55
- Log: Missing dTHR in hv_fetch_ent when statics moved to thread struct.
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 824] By: mbeattie on 1998/03/16 16:27:43
- Log: Added missing entry for lib/ExtUtils/Packlist.pm to MANIFEST
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 823] By: mbeattie on 1998/03/16 16:26:02
- Log: Missed p4 add of lib/ExtUtils/Packlist.pm in change 814.
- Branch: perl
- + lib/ExtUtils/Packlist.pm
-____________________________________________________________________________
-[ 822] By: mbeattie on 1998/03/16 16:22:58
- Log: Bump patchlevel.h to 63.
- Branch: perl
- ! ext/IO/IO.xs patchlevel.h
- !> (integrate 41 files)
-____________________________________________________________________________
-[ 821] By: mbeattie on 1998/03/16 16:18:35
- Log: newCONSTSUB added (XSUB equivalent for inlinable sub () { 123 }).
- Subject: Bundling builtin.pm and newCONSTSUB with the core?
- From: jan.dubois@ibm.net (Jan Dubois)
- Date: Sun, 15 Mar 1998 19:09:05 +0100
- Branch: perl
- ! embed.h global.sym op.c pod/perlguts.pod proto.h
-____________________________________________________________________________
-[ 820] By: mbeattie on 1998/03/16 16:02:50
- Log: Subject: [PATCH] STRESS_REALLOC
- Date: Fri, 13 Mar 1998 22:28:19 -0600 (CST)
- From: Stephen McCamant <alias@mcs.com>
- Branch: perl
- ! malloc.c perl.c scope.c
-____________________________________________________________________________
-[ 819] By: mbeattie on 1998/03/16 16:01:06
- Log: Subject: [BUG+PATCH] _62 with -DDEBUGGING and -Duseperlio
- Date: Fri, 13 Mar 1998 23:21:25 +0100
- From: Jan-Pieter Cornet <john@pc.xs4all.nl>
- Branch: perl
- ! perly.c
-____________________________________________________________________________
-[ 818] By: mbeattie on 1998/03/16 15:59:16
- Log: Subject: [Configure PATCH] for OS/2
- Date: Fri, 13 Mar 1998 16:18:12 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- [Two hunks to Configure failed to apply due to clashes]
- Branch: perl
- ! Configure hints/os2.sh
-____________________________________________________________________________
-[ 817] By: mbeattie on 1998/03/16 15:55:28
- Log: Subject: [PATCH 5.004_62] VMS updates (direct)
- Date: Thu, 12 Mar 1998 16:02:29 -0500 (EST)
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- [Needed manual tweaks on vms/config.vms since it clashed with other
- patches. I may have got it wrong.]
- Branch: perl
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_VMS.pm
- ! lib/ExtUtils/Mksymlists.pm perl.h pp.c pp_hot.c regcomp.c
- ! regcomp.h utils/perldoc.PL vms/config.vms vms/descrip.mms
- ! vms/ext/Stdio/Stdio.pm vms/ext/filespec.t vms/fndvers.com
- ! vms/gen_shrfls.pl vms/genconfig.pl vms/sockadapt.h
- ! vms/test.com vms/vms.c vms/vmsish.h
-____________________________________________________________________________
-[ 816] By: mbeattie on 1998/03/16 15:26:04
- Log: Subject: [PATCH] Let h2xs read multiple header files
- Date: Tue, 10 Mar 1998 09:35:42 -0500 (EST)
- From: Benjamin Sugars <bsugars@canoe.ca>
- Branch: perl
- ! utils/h2xs.PL
-____________________________________________________________________________
-[ 815] By: mbeattie on 1998/03/16 15:24:12
- Log: Subject: Re: Almost OK: Perl 5.004_62 on VMS 7.1
- Date: Mon, 09 Mar 1998 09:18:56 -0800
- From: Dan Sugalski <sugalskd@osshe.edu>
- Branch: perl
- ! vms/config.vms
-____________________________________________________________________________
-[ 814] By: mbeattie on 1998/03/16 13:17:14
- Log: Subject: PATCH for 5.004_62 : Add .packlist handling classes to ExtUtils
- Date: Sun, 08 Mar 1998 12:50:23 +0000
- From: Alan Burlison <alan.burlison@UK.Sun.COM>
- plus manual update of MANIFEST
- Branch: perl
- + lib/ExtUtils/Installed.pm lib/ExtUtils/inst
- ! MANIFEST installman installperl lib/ExtUtils/Install.pm
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 813] By: mbeattie on 1998/03/16 13:08:55
- Log: From: Blair Zajac <blair@gps.caltech.edu>
- Subject: PATCH: util.c and util.h function declarations do not match
- Date: Fri, 6 Mar 1998 10:29:29 -0800 (PST)
- Subject: PATCH: cgywin32 patch for perlgcc
- Date: Fri, 6 Mar 1998 11:15:36 -0800 (PST)
- Subject: PATCH: perl5.004_62 on cygwin32
- Date: Fri, 6 Mar 1998 11:57:35 -0800 (PST)
- Branch: perl
- ! Configure cygwin32/perlgcc cygwin32/perlld pp_sys.c x2p/util.c
-____________________________________________________________________________
-[ 812] By: mbeattie on 1998/03/16 12:55:39
- Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Subject: [PATCH 5.004_62} Config_62-01 patch available.
- Date: Mon, 9 Mar 1998 15:23:33 -0500 (EST)
- Subject: [PATCH 5.004_62] Tiny hint file updates
- Date: Mon, 9 Mar 1998 13:21:46 -0500 (EST)
- Branch: perl
- ! Configure Porting/Glossary Porting/config.sh Porting/config_H
- ! config_h.SH ext/ODBM_File/ODBM_File.xs handy.h hints/aix.sh
- ! hints/dec_osf.sh hints/dos_djgpp.sh hints/freebsd.sh
- ! hints/irix_6.sh hints/irix_6_0.sh hints/irix_6_1.sh
- ! hints/os2.sh hints/solaris_2.sh patchlevel.h perl.c perl.h
- ! perllio.h pod/perldiag.pod pp_sys.c vms/config.vms
-____________________________________________________________________________
-[ 811] By: mbeattie on 1998/03/16 12:13:55
- Log: DOS djgpp updates:
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Subject: [PATCH for 5.004_61] dos-djgpp update
- Date: Fri, 6 Mar 1998 10:41:01 +0100
- Subject: [PATCH 5.004_62] dos-djgpp update
- Date: Thu, 12 Mar 1998 13:34:51 +0100
- Branch: perl
- ! djgpp/config.over hints/dos_djgpp.sh
-____________________________________________________________________________
-[ 810] By: gsar on 1998/03/16 08:48:17
- Log: integrate mainline
- Branch: win32/perl
- !> pp_sys.c
-____________________________________________________________________________
-[ 809] By: gsar on 1998/03/16 08:44:37
- Log: various changes to get asperl working under Borland
- (passes all tests when built under PERL_OBJECT)
- Branch: asperl
- ! ObjXSub.h ext/Opcode/Opcode.xs globals.c mg.c objpp.h op.c
- ! perl.h perly.c perly.c.diff pp.c pp_ctl.c pp_hot.c pp_sys.c
- ! proto.h scope.h sv.c toke.c win32/Makefile win32/config_H.bc
- ! win32/config_H.gc win32/config_H.vc win32/makedef.pl
- ! win32/makefile.mk win32/runperl.c win32/win32.c win32/win32.h
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 808] By: gsar on 1998/03/12 19:50:20
- Log: set sockets to nonoverlapped mode for every thread
- Message-Id: <35081FE4.965A484D@enteract.com>
- Date: Thu, 12 Mar 1998 11:48:20 CST
- From: Steve Nielsen <spn@enteract.com>
- Subject: [PATCH 5.004_62] win32: set sockopt on a per-thread basis
- Branch: win32/perl
- ! win32/win32.h win32/win32sck.c
-____________________________________________________________________________
-[ 807] By: gsar on 1998/03/12 19:26:54
- Log: add AS patch#13
- Branch: asperl
- ! win32/Makefile
-____________________________________________________________________________
-[ 806] By: gsar on 1998/03/12 00:51:08
- Log: added AS patch#12 with minor changes
- Branch: asperl
- ! ObjXSub.h bytecode.h byterun.c doio.c iplio.h
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
- ! lib/ExtUtils/Mksymlists.pm lib/ExtUtils/xsubpp objpp.h perl.c
- ! perllio.h proto.h regcomp.c win32/Makefile win32/config_h.PL
- ! win32/runperl.c
-____________________________________________________________________________
-[ 805] By: gsar on 1998/03/10 20:35:10
- Log: reinstate some standard sig_names to avoid noise from
- modules (and in hopes of making them _do_ something in future)
- Branch: win32/perl
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
-____________________________________________________________________________
-[ 804] By: gsar on 1998/03/10 20:33:05
- Log: mingw32 tweaks
- Branch: win32/perl
- ! win32/makefile.mk win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 803] By: gsar on 1998/03/09 20:56:07
- Log: tweak Win32::DomainName() implementation
- Branch: win32/perl
- ! win32/Makefile win32/win32.c
-____________________________________________________________________________
-[ 802] By: gsar on 1998/03/09 03:51:01
- Log: merge C<local $tied{foo}> patch, also moved statics in
- [ah]v.c to thrdvar.h
- Branch: win32/perl
- ! av.c embedvar.h hv.c scope.c t/op/local.t thrdvar.h
-____________________________________________________________________________
-[ 801] By: gsar on 1998/03/09 02:38:35
- Log: minor win32 support fixes
- - add a better implementation of Win32::DomainName() (as
- suggested by Jutta M. Klebe <jmk@exc.bybyte.de>)
- - fix opendir() emulation was unsafe what given long paths
- Branch: win32/perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 800] By: nick on 1998/03/07 09:36:41
- Log: There has been a 'thaw' in config.h (the ICE has gone ;-))
- So pp_sys.c needs tweaking otherwise it does not believe getservby*()
- exist. (Breaks libnet).
- Branch: perl
- ! pp_sys.c
-____________________________________________________________________________
-[ 799] By: gsar on 1998/03/07 07:51:28
- Log: integrate mainline changes
- Branch: asperl
- !> (integrate 111 files)
-____________________________________________________________________________
-[ 798] By: gsar on 1998/03/07 07:01:55
- Log: integrate mainline
- Branch: win32/perl
- !> myconfig patchlevel.h
-____________________________________________________________________________
-[ 797] By: gsar on 1998/03/07 06:49:49
- Log: provide our own popen()/pclose() to fix problems with qx//:
- - qx// used to always invoke the shell, now does so only when needed
- - qx// didn't respect PERL5SHELL, now does
- Branch: win32/perl
- ! lib/ExtUtils/typemap win32/config_h.PL win32/win32.c
-____________________________________________________________________________
-[ 796] By: gsar on 1998/03/07 01:37:10
- Log: a missed s/sp/SP/
- Branch: win32/perl
- ! lib/ExtUtils/typemap pod/perlcall.pod
-____________________________________________________________________________
-[ 795] By: gsar on 1998/03/07 01:05:21
- Log: change all 'sp' to 'SP' in code and in the docs. Explicitly
- mention that local stack pointer should be called SP. This makes the
- API safer from source incompatibilities down the line.
- Branch: win32/perl
- ! av.c doio.c doop.c ext/DB_File/DB_File.xs
- ! ext/DynaLoader/dl_dld.xs ext/Opcode/Opcode.xs
- ! ext/POSIX/POSIX.xs ext/Socket/Socket.xs ext/Thread/Thread.xs
- ! gv.c mg.c op.c os2/OS2/REXX/REXX.xs perl.c pod/perlcall.pod
- ! pod/perlembed.pod pod/perlguts.pod pod/perlxs.pod pp.c
- ! pp_ctl.c pp_hot.c pp_sys.c util.c
-
-----------------
-Version 5.004_62
-----------------
-
-____________________________________________________________________________
-[ 794] By: mbeattie on 1998/03/06 09:38:08
- Log: Subject: [PATCH] perl5.004_61 myconfig updates
- Date: Thu, 5 Mar 1998 15:10:54 -0500 (EST)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Branch: perl
- ! myconfig
-____________________________________________________________________________
-[ 793] By: mbeattie on 1998/03/06 09:36:37
- Log: Bump patchlevel.h to 62.
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 792] By: mbeattie on 1998/03/06 09:35:57
- Log: Integrate win32 branch into mainline.
- Branch: perl
- !> bytecode.h op.c proto.h scope.c win32/Makefile win32/config.bc
- !> win32/config.gc win32/config.vc win32/config_H.bc
- !> win32/config_H.gc win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 791] By: gsar on 1998/03/06 06:00:08
- Log: various
- - s/PerlIO_fread/PerlIO_read/, the former doesn't exist
- - add missing prototypes
- - regenerate win32/config*.?c
- Branch: win32/perl
- ! bytecode.h proto.h win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc win32/makefile.mk
-____________________________________________________________________________
-[ 790] By: gsar on 1998/03/06 03:19:23
- Log: fix typo in Makefile
- Branch: win32/perl
- ! win32/Makefile
-____________________________________________________________________________
-[ 789] By: gsar on 1998/03/05 22:55:53
- Log: integrate mainline
- Branch: win32/perl
- !> (integrate 47 files)
-____________________________________________________________________________
-[ 788] By: gsar on 1998/03/05 20:02:09
- Log: added AS patch#11
- Message-Id: <01BD4820.AFC70110.dougl@ActiveState.com>
- Date: Thu, 05 Mar 1998 10:23:04 PST
- From: Douglas Lankshear <dougl@ActiveState.com>
-
- This patch fixes a bug I introduced removing duplicate code.
- -- Doug
- Branch: asperl
- ! ObjXSub.h objpp.h win32/runperl.c
-____________________________________________________________________________
-[ 787] By: gsar on 1998/03/05 19:56:17
- Log: add Nick's dTHR fixes
- Branch: win32/perl
- ! op.c scope.c
-____________________________________________________________________________
-[ 786] By: gsar on 1998/03/05 19:54:49
- Log: maintpatch
- Message-Id: <199803050749.CAA15206@Orb.Nashua.NH.US>
- Date: Thu, 05 Mar 1998 02:49:46 EST
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Subject: [PATCH] 5.004_04 +MAINT_TRIAL_1 broken when sizeof(int) != sizeof(void
- Branch: win32/perl
- ! scope.c
-____________________________________________________________________________
-[ 785] By: mbeattie on 1998/03/05 19:12:14
- Log: Subject: [5.004_61 PATCH] Make incompatible changes to RE engine NOW
- Date: Wed, 4 Mar 1998 23:55:54 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! op.c proto.h regcomp.c regexp.h util.c
-____________________________________________________________________________
-[ 784] By: mbeattie on 1998/03/05 19:11:09
- Log: Subject: [PATCH] Re: perl 5.0061 unable to build on sparc 5 Sol2.5.1 threads.
- Date: Wed, 4 Mar 1998 10:18:03 GMT
- From: Nick Ing-Simmons <nik@tiuk.ti.com>
- Branch: perl
- ! atomic.h
-____________________________________________________________________________
-[ 783] By: mbeattie on 1998/03/05 19:09:16
- Log: Subject: Configure patches -01 and -02 for 5.004_61.
- Date: Tue, 3 Mar 1998 16:41:16 -0500 (EST)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Branch: perl
- ! Configure INSTALL Policy_sh.SH Porting/Glossary
- ! Porting/config.sh Porting/config_H Porting/pumpkin.pod
- ! config_h.SH handy.h hints/README.hints hints/aix.sh
- ! hints/linux.sh hints/solaris_2.sh hints/unicos.sh
- ! makedepend.SH myconfig pp_sys.c
-____________________________________________________________________________
-[ 782] By: mbeattie on 1998/03/05 19:05:23
- Log: Subject: [PATCH] Compiling with OP_IN_REGISTER
- Date: 03 Mar 1998 18:05:07 +0100
- From: Gisle Aas <gisle@aas.no>
- Branch: perl
- ! perl.h pp_ctl.c
-____________________________________________________________________________
-[ 781] By: mbeattie on 1998/03/05 19:04:34
- Log: Subject: [PATCH] Make autouse -w-safe
- Date: Mon, 2 Mar 1998 21:36:02 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! lib/autouse.pm op.c sv.c
-____________________________________________________________________________
-[ 780] By: mbeattie on 1998/03/05 19:02:50
- Log: Subject: [PATCH] External symbol re_croak2
- Date: 02 Mar 1998 13:00:45 +0100
- From: Gisle Aas <gisle@aas.no>
- Branch: perl
- ! regcomp.c regcomp.h
-____________________________________________________________________________
-[ 779] By: mbeattie on 1998/03/05 19:01:25
- Log: Subject: [PATCH 5.004_61] Miscellaneous minor fixes
- Date: Mon, 02 Mar 1998 01:48:27 -0500 (EST)
- From: bailey@newman.upenn.edu (Charles Bailey)
- Branch: perl
- ! bytecode.h embedvar.h ext/B/Makefile.PL ext/B/byteperl.c
- ! ext/Thread/Makefile.PL lib/File/Path.pm patchlevel.h perldir.h
- ! sv.h
-____________________________________________________________________________
-[ 778] By: mbeattie on 1998/03/05 18:53:13
- Log: Subject: [PATCH 5.004_61] USHRT range limit macros
- Date: Mon, 02 Mar 1998 01:41:41 -0500 (EST)
- From: bailey@newman.upenn.edu (Charles Bailey)
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 777] By: mbeattie on 1998/03/05 18:50:25
- Log: Subject: [PATCH 5.004_61] File::Basename taint fix (revised)
- Date: Mon, 02 Mar 1998 01:39:47 -0500 (EST)
- From: bailey@newman.upenn.edu (Charles Bailey)
- Branch: perl
- ! lib/File/Basename.pm
-____________________________________________________________________________
-[ 776] By: mbeattie on 1998/03/05 18:49:15
- Log: Subject: [PATCH] Take out version number in perlguts (perl5.004_61)
- Date: 01 Mar 1998 15:16:03 +0100
- From: Gisle Aas <gisle@aas.no>
- Branch: perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 775] By: mbeattie on 1998/03/05 18:48:05
- Log: Subject: Re: [PATCH] 5.004_61: Makefile.SH (Re: 5.004_61: annoyingly missing patch)
- Date: Sun, 1 Mar 1998 12:14:44 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! Makefile.SH perl_exp.SH
-____________________________________________________________________________
-[ 774] By: mbeattie on 1998/03/05 18:46:32
- Log: Subject: Almost OK: 5.004_61 (threads, perlio)
- Date: Sun, 1 Mar 1998 02:02:47 -0500
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Branch: perl
- ! bytecode.h bytecode.pl byterun.c byterun.h perlsdio.h
-____________________________________________________________________________
-[ 773] By: mbeattie on 1998/03/05 18:43:57
- Log: Subject: [PATCH 5.004_61] print sort {-1} 1..10; hangs
- Date: Sat, 28 Feb 1998 15:51:14 -0500 (EST)
- From: Hans Mulder <hansmu@xs4all.nl>
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 772] By: mbeattie on 1998/03/05 18:39:25
- Log: Subject: [PATCH] 5.004_61: Makefile.SH: 'ok' target needs perlbug...
- Date: Sat, 28 Feb 1998 17:06:41 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! Makefile.SH
-____________________________________________________________________________
-[ 771] By: mbeattie on 1998/03/05 18:38:32
- Log: Subject: [PATCH] 5.004_61: hints/netbsd.sh
- Date: Sat, 28 Feb 1998 16:35:32 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! hints/netbsd.sh
-____________________________________________________________________________
-[ 770] By: mbeattie on 1998/03/05 18:36:50
- Log: Add byterun.c to cflags.SH (Dominic Dunlop <domo@vo.lu>)
- Branch: perl
- ! cflags.SH
-____________________________________________________________________________
-[ 769] By: mbeattie on 1998/03/05 18:34:35
- Log: Change getc/fread to PerlIO_getc/fread in bytecode.h:
- Subject: [PATCH 5.004_61] bunch of small patches
- Date: Fri, 27 Feb 1998 20:03:29 -0500 (EST)
- From: Andrew Cohen <cohen@andy.bu.edu>
- Branch: perl
- ! bytecode.h
-____________________________________________________________________________
-[ 768] By: mbeattie on 1998/03/05 18:13:06
- Log: Integrate win32 branch into mainline.
- Branch: perl
- !> (integrate 53 files)
-____________________________________________________________________________
-[ 767] By: TimBunce on 1998/03/05 11:48:09
- Log: Update to change 744.
- Branch: maint-5.004/perl
- ! lib/ExtUtils/Install.pm
-____________________________________________________________________________
-[ 765] By: TimBunce on 1998/03/05 11:24:24
- Log: Update embed.h after make regen_headers.
- Branch: maint-5.004/perl
- ! embed.h
-____________________________________________________________________________
-[ 764] By: TimBunce on 1998/03/05 11:05:13
- Log: APPLLIB_EXP now has arch and version dirs added to @INC
- Branch: maint-5.004/perl
- ! perl.c
-____________________________________________________________________________
-[ 763] By: TimBunce on 1998/03/05 11:01:38
- Log: Added hints/openbsd.sh and t/op/pos.t to MANIFEST
- Added MAINT_TRIAL_1 local patch label to patchlevel.h
- Removed win32/win32io.c and win32/win32io.h from repository
- Branch: maint-5.004/perl
- - win32/win32io.c win32/win32io.h
- ! MANIFEST patchlevel.h
-____________________________________________________________________________
-[ 762] By: TimBunce on 1998/03/05 10:05:34
- Log: Title: "5.004_04 +MAINT_TRIAL_1 broken when sizeof(int) != sizeof(void)"
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Files: scope.c
- Branch: maint-5.004/perl
- ! scope.c
-____________________________________________________________________________
-[ 761] By: TimBunce on 1998/03/05 10:03:10
- Log: Title: "properly refcount localization, fix C<local $tied{foo}>"
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802191207.MAA10742@toad.ig.co.uk>
- Files: av.c hv.c scope.c t/op/local.t
- Branch: maint-5.004/perl
- ! av.c hv.c scope.c t/op/local.t
-____________________________________________________________________________
-[ 760] By: gsar on 1998/03/04 20:58:21
- Log: added AS patch#10
- Message-Id: <01BD4691.963D1670.dougl@ActiveState.com>
- Date: Tue, 03 Mar 1998 10:46:13 PST
- From: Douglas Lankshear <dougl@ActiveState.com>
- Subject: [PATCH]
-
- Here's a patch to win32/dl_win32.xs that is a fix for the lookup of statically
- linked modules.
-
- -- Doug
- Branch: asperl
- ! win32/dl_win32.xs
-____________________________________________________________________________
-[ 759] By: TimBunce on 1998/03/04 18:46:41
- Log: Update patchls utility
- Branch: maint-5.004/perl
- ! Porting/patchls
-____________________________________________________________________________
-[ 758] By: TimBunce on 1998/03/04 17:07:06
- Log: perldoc -f now uses pager if text is too long for screen
- Branch: maint-5.004/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 757] By: TimBunce on 1998/03/04 16:57:04
- Log: Added OpenBSD hint file from <Todd.Miller@courtesan.com>
- Document 'warn with no args' behaviour, from <johnpc@xs4all.net>
- Branch: maint-5.004/perl
- + hints/openbsd.sh
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 756] By: TimBunce on 1998/03/04 16:48:40
- Log: Fix for new gnulibc stdio.h when using sfio+perlio
- Branch: maint-5.004/perl
- ! perlsdio.h
-____________________________________________________________________________
-[ 755] By: TimBunce on 1998/03/04 16:47:08
- Log: Fixed typo in vms/ext/Stdio/Stdio.pm AUTOLOAD
- Added details of split in scalar context to perlfunc.pod
- Branch: maint-5.004/perl
- ! pod/perlfunc.pod vms/ext/Stdio/Stdio.pm
-____________________________________________________________________________
-[ 754] By: TimBunce on 1998/03/04 16:35:58
- Log: Updated perl -v info to include reference to docs and home page.
- Branch: maint-5.004/perl
- ! perl.c
-____________________________________________________________________________
-[ 753] By: TimBunce on 1998/03/04 16:31:29
- Log: Updated hints/bsdos.sh for BSD/OS 3.1
- Fixed typo in pod/perlsyn.pod
- Added workaround for old gmake in ext/SDBM_File/sdbm/Makefile.PL
- Fixed typo in ext/GDBM_File/GDBM_File.pm
- Branch: maint-5.004/perl
- ! ext/GDBM_File/GDBM_File.pm ext/SDBM_File/sdbm/Makefile.PL
- ! hints/bsdos.sh pod/perlsyn.pod
-____________________________________________________________________________
-[ 752] By: TimBunce on 1998/03/04 15:49:19
- Log: Changed bug address in README to perlbug@perl.com
- Changed Copyright in perl.c to 1998
- Added op/pos.t test from Robin Houston <robin@oneworld.org>
- Branch: maint-5.004/perl
- + t/op/pos.t
- ! README perl.c
-____________________________________________________________________________
-[ 751] By: TimBunce on 1998/03/04 14:47:15
- Log: Make t/comp/require.t and t/lib/ph.t executable in repository
- Branch: maint-5.004/perl
- ! t/comp/require.t t/lib/ph.t
-____________________________________________________________________________
-[ 750] By: TimBunce on 1998/03/04 13:29:58
- Log: Added dTHR definition to ease backwards compatibility for XS
- source code from 5.005.
- Branch: maint-5.004/perl
- ! perl.h
-____________________________________________________________________________
-[ 749] By: TimBunce on 1998/03/04 12:19:19
- Log: Title: "rename local 'op' variables to 'o'", #F114
- From: Gurusamy Sarathy
- Files: op.h opcode.h proto.h dump.c op.c opcode.pl pp_ctl.c run.c scope.c
- toke.c
- Branch: maint-5.004/perl
- ! dump.c op.c op.h opcode.h opcode.pl pp_ctl.c proto.h run.c
- ! scope.c toke.c
-____________________________________________________________________________
-[ 748] By: TimBunce on 1998/03/04 12:12:27
- Log: Title: "consolidated win32 patch", #F112
- From: Gurusamy Sarathy
- Files: MANIFEST pod/perlfaq2.pod pod/perlrun.pod win32/include/sys/socket.h
- EXTERN.h INTERN.h dosish.h lib/ExtUtils/Command.pm
- lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm
- lib/ExtUtils/Mksymlists.pm lib/File/DosGlob.pm t/TEST
- t/harness win32/win32.h win32/win32iop.h README.win32
- doio.c installhtml installperl pp_sys.c win32/Makefile
- win32/config.bc win32/config.vc win32/config_H.bc
- win32/config_H.vc win32/config_h.PL win32/config_sh.PL
- win32/dl_win32.xs win32/makedef.pl win32/makefile.mk
- win32/perllib.c win32/runperl.c win32/win32.c
- win32/win32sck.c win32/bin/perlglob.pl x2p/a2p.h x2p/a2p.c
- x2p/a2py.c
- Branch: maint-5.004/perl
- + win32/bin/perlglob.pl
- ! EXTERN.h INTERN.h MANIFEST README.win32 doio.c dosish.h
- ! installhtml installperl lib/ExtUtils/Command.pm
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm
- ! lib/ExtUtils/Mksymlists.pm lib/File/DosGlob.pm
- ! pod/perlfaq2.pod pod/perlrun.pod pp_sys.c t/TEST t/harness
- ! win32/Makefile win32/config.bc win32/config.vc
- ! win32/config_H.bc win32/config_H.vc win32/config_h.PL
- ! win32/config_sh.PL win32/dl_win32.xs
- ! win32/include/sys/socket.h win32/makedef.pl win32/makefile.mk
- ! win32/perllib.c win32/runperl.c win32/win32.c win32/win32.h
- ! win32/win32iop.h win32/win32sck.c x2p/a2p.c x2p/a2p.h
- ! x2p/a2py.c
-____________________________________________________________________________
-[ 747] By: TimBunce on 1998/03/04 11:59:57
- Log: Title: "initialize @INC in ph.t, and fix up MANIFEST", #F111
- From: Gurusamy Sarathy
- Files: MANIFEST t/lib/ph.t
- Branch: maint-5.004/perl
- ! MANIFEST t/lib/ph.t
-____________________________________________________________________________
-[ 746] By: TimBunce on 1998/03/04 11:47:43
- Log: Title: "properly save STDOUT during system() in debugger", #F110
- From: Jason Smith <smithj4@rpi.edu>
- Files: lib/perl5db.pl
- Branch: maint-5.004/perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 745] By: TimBunce on 1998/03/04 11:40:19
- Log: Title: "generate DynaLoader.pm at build time", #F109
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9802111938.AA26224@o09.xray.mpe.mpg.de>
- Files: MANIFEST ext/DynaLoader/DynaLoader.pm.PL ext/DynaLoader/Makefile.PL
- Branch: maint-5.004/perl
- + ext/DynaLoader/DynaLoader.pm.PL
- ! MANIFEST ext/DynaLoader/Makefile.PL
-____________________________________________________________________________
-[ 744] By: TimBunce on 1998/03/04 11:34:09
- Log: Title: "Install extensions with bootstrap in $archlib", #F108
- From: koenig@anna.mind.de (Andreas J. Koenig), koenig@kulturbox.de (Andreas
- J. Koenig)
- Msg-ID: <sfcra9fqx0n.fsf@anna.in-berlin.de>
- Files: lib/ExtUtils/Install.pm
- Branch: maint-5.004/perl
- ! lib/ExtUtils/Install.pm
-____________________________________________________________________________
-[ 743] By: TimBunce on 1998/03/04 10:45:05
- Log: Title: "Pod::Html trips over "C<0>"", #F107
- From: Chip Salzenberg
- Files: lib/Pod/Html.pm
- Branch: maint-5.004/perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 742] By: TimBunce on 1998/03/04 10:12:54
- Log: Title: "5.004_58 | _04: pod2*,perlpod: L<show this|man/section>", #F106
- From: Achim Bohnet <ach@mpe.mpg.de>
- Msg-ID: <9802111629.AA00595@o09.xray.mpe.mpg.de>
- Files: pod/perlpod.pod lib/Pod/Html.pm lib/Pod/Text.pm pod/pod2man.PL
- Branch: maint-5.004/perl
- ! lib/Pod/Html.pm lib/Pod/Text.pm pod/perlpod.pod pod/pod2man.PL
-____________________________________________________________________________
-[ 741] By: TimBunce on 1998/03/04 10:08:31
- Log: Title: "New patch for $^E==GetLastError() under Win32", #F105
- From: Gurusamy Sarathy <gsar@engin.umich.edu>, Tye McQueen
- <tye@metronet.com>, ilya@math.ohio-state.edu (Ilya
- Zakharevich)
- Msg-ID: <199801040630.AA29298@metronet.com>,
- <199801041826.NAA11568@aatma.engin.umich.edu>,
- <1998Jan4.130412.2719461@cor.newman>
- Files: pod/perlfunc.pod pod/perlvar.pod doio.c lib/dumpvar.pl lib/perl5db.pl
- win32/win32.h mg.c util.c win32/makedef.pl win32/win32.c
- Branch: maint-5.004/perl
- ! doio.c lib/dumpvar.pl lib/perl5db.pl mg.c pod/perlfunc.pod
- ! pod/perlvar.pod util.c win32/makedef.pl win32/win32.c
- ! win32/win32.h
-____________________________________________________________________________
-[ 740] By: TimBunce on 1998/03/04 09:55:57
- Log: Title: "5.004_56: Patch to Tie::Hash and docs", #F104
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199801120134.UAA05437@monk.mps.ohio-state.edu>
- Files: pod/perlfunc.pod lib/Tie/Hash.pm
- Branch: maint-5.004/perl
- ! lib/Tie/Hash.pm pod/perlfunc.pod
-____________________________________________________________________________
-[ 739] By: TimBunce on 1998/03/04 09:26:01
- Log: Title: "more doc for perldoc", #F103
- From: Gurusamy Sarathy
- Files: utils/perldoc.PL
- Branch: maint-5.004/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 738] By: TimBunce on 1998/03/04 09:23:16
- Log: Title: "Make perldoc look for an index file ", #F102
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <199801221220.NAA22902@furu.g.aas.no>
- Files: utils/perldoc.PL
- Branch: maint-5.004/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 737] By: TimBunce on 1998/03/04 09:21:15
- Log: Title: "perldoc -F filename", #F101
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199712120037.TAA00176@math.mps.ohio-state.edu>
- Files: utils/perldoc.PL
- Branch: maint-5.004/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 736] By: TimBunce on 1998/03/04 09:16:20
- Log: Title: "sv_grow can fail for HAS_64K_LIMIT systems", #F100
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3iuqsl3oq.fsf@furu.g.aas.no>
- Files: sv.c
- Branch: maint-5.004/perl
- ! sv.c
-____________________________________________________________________________
-[ 735] By: TimBunce on 1998/03/04 09:08:51
- Log: Title: "Benchmark.pm: timethese corrupts $_", #F099
- From: abigail@fnx.com
- Msg-ID: <19980201114609.7779.qmail@betelgeuse.wayne.fnx.com>
- Files: lib/Benchmark.pm
- Branch: maint-5.004/perl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 734] By: TimBunce on 1998/03/04 08:59:58
- Log: Title: "STRANGE_MALLOC should test failed alloc", #F098
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <199802021406.PAA03285@furu.g.aas.no>
- Files: hv.c
- Branch: maint-5.004/perl
- ! hv.c
-____________________________________________________________________________
-[ 733] By: TimBunce on 1998/03/04 08:35:19
- Log: Title: "support caseless %ENV", #F097
- From: Gurusamy Sarathy
- Files: hv.c t/op/magic.t win32/win32.h
- Branch: maint-5.004/perl
- ! hv.c t/op/magic.t win32/win32.h
-____________________________________________________________________________
-[ 732] By: TimBunce on 1998/03/04 08:33:58
- Log: Title: "newer cperl-mode.el (from 5.004_60)", #F096
- From: Ilya Zakharevich
- Files: emacs/cperl-mode.el
- Branch: maint-5.004/perl
- ! emacs/cperl-mode.el
-____________________________________________________________________________
-[ 731] By: TimBunce on 1998/03/04 08:26:23
- Log: Title: "Handle set magic on xsub OUTPUT args, add API functions that handle
- magic", #F095
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199801190409.XAA26710@aatma.engin.umich.edu>
- Files: pod/perlguts.pod pod/perlxs.pod embed.h proto.h sv.h global.sym
- lib/ExtUtils/xsubpp sv.c
- Branch: maint-5.004/perl
- ! embed.h global.sym lib/ExtUtils/xsubpp pod/perlguts.pod
- ! pod/perlxs.pod proto.h sv.c sv.h
-____________________________________________________________________________
-[ 730] By: TimBunce on 1998/03/04 08:20:52
- Log: Title: "Fix flawed cleanup when signal handlers are not defined", #F094
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710290106.UAA11485@aatma.engin.umich.edu>
- Files: mg.c
- Branch: maint-5.004/perl
- ! mg.c
-____________________________________________________________________________
-[ 729] By: TimBunce on 1998/03/04 08:18:02
- Log: Title: "Tests for C<sort 'foo','bar'>", #F093
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711021247.MAA01743@crypt.compulink.co.uk>
- Files: t/op/sort.t
- Branch: maint-5.004/perl
- ! t/op/sort.t
-____________________________________________________________________________
-[ 728] By: TimBunce on 1998/03/04 08:17:07
- Log: Title: "Make search.pl work on win32", #F092
- From: Gurusamy Sarathy
- Files: win32/bin/search.pl
- Branch: maint-5.004/perl
- ! win32/bin/search.pl
-____________________________________________________________________________
-[ 727] By: gsar on 1998/03/04 04:13:23
- Log: missing s/op/o/ from one of the mainpatches
- Branch: win32/perl
- ! op.c
-____________________________________________________________________________
-[ 726] By: gsar on 1998/03/04 02:12:13
- Log: maintpatches #102 and #103 to perldoc.PL
- Branch: win32/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 725] By: gsar on 1998/03/04 02:00:15
- Log: renumber some tests to match maint branch
- Branch: win32/perl
- ! t/op/local.t
-____________________________________________________________________________
-[ 724] By: gsar on 1998/03/04 01:25:50
- Log: maintpatch
- #70: "Fix random whitespace errors in docs"
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <12726.877706444@eeyore.ibcinc.com>
- Date: Fri, 24 Oct 1997 11:20:44 -0400
- Files: pod/checkpods.PL pod/perlfunc.pod
- Branch: win32/perl
- ! pod/checkpods.PL
-____________________________________________________________________________
-[ 723] By: gsar on 1998/03/04 01:04:37
- Log: sync maintpatch
- #76: "Fix infinite loop on unlink() failure in File::Path::rmtree()
- From: Chip Salzenberg
- Files: lib/File/Path.pm
- Branch: win32/perl
- ! lib/File/Path.pm
-____________________________________________________________________________
-[ 722] By: gsar on 1998/03/04 00:46:46
- Log: remove redundancy in File::Find
- Branch: win32/perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 721] By: TimBunce on 1998/03/03 20:06:41
- Log: Title: "Fix spurious perldoc warnings on DOSISH platforms", #F091
- From: Molnar Laszlo <molnarl@cdata.tvnet.hu>
- Msg-ID: <34475659.1AA69855@cdata.tvnet.hu>
- Files: utils/perldoc.PL
- Branch: maint-5.004/perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 720] By: TimBunce on 1998/03/03 20:03:59
- Log: Title: "Make ExtUtils::MM_Unix::fixin() do something meaningful on win32",
- #F090
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199801070016.TAA17766@aatma.engin.umich.edu>
- Files: lib/ExtUtils/MM_Unix.pm
- Branch: maint-5.004/perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 719] By: TimBunce on 1998/03/03 20:02:06
- Log: Title: "Fix inconsistent case $ENV{Path} (vs $ENV{PATH})", #F089
- From: Gurusamy Sarathy
- Files: lib/FindBin.pm
- Branch: maint-5.004/perl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 718] By: TimBunce on 1998/03/03 20:00:26
- Log: Title: "Fix File::Find's longstanding confusion about win32 being like VMS",
- #F088
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802020459.XAA04964@aatma.engin.umich.edu>
- Files: lib/File/Find.pm
- Branch: maint-5.004/perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 717] By: TimBunce on 1998/03/03 19:59:38
- Log: Title: "do_postponed breaks with multiple interpreters", #F087
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710290316.WAA15888@aatma.engin.umich.edu>
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 716] By: TimBunce on 1998/03/03 19:57:17
- Log: Title: "Make warning on C<Nosuch::> optional, add to perl{diag,delta}.pod",
- #F086
- From: Gurusamy Sarathy
- Files: pod/perldelta.pod pod/perldiag.pod toke.c
- Branch: maint-5.004/perl
- ! pod/perldelta.pod pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 715] By: TimBunce on 1998/03/03 19:51:33
- Log: Title: "Pod::Html bug and fix: missing </UL> in index", #F085
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802192314.SAA23326@aatma.engin.umich.edu>
- Files: lib/Pod/Html.pm
- Branch: maint-5.004/perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 714] By: TimBunce on 1998/03/03 19:50:28
- Log: Title: "New pod: perlhist", #F084
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802191556.RAA09578@alpha.hut.fi>
- Files: MANIFEST pod/perl.pod pod/perlhist.pod pod/perltoc.pod pod/buildtoc
- Branch: maint-5.004/perl
- + pod/perlhist.pod
- ! MANIFEST pod/buildtoc pod/perl.pod pod/perltoc.pod
-____________________________________________________________________________
-[ 713] By: TimBunce on 1998/03/03 19:47:13
- Log: Title: "Fix restoration of locals on scope unwinding", #F083
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802110515.AAA23700@aatma.engin.umich.edu>
- Files: pp_ctl.c t/op/local.t
- Branch: maint-5.004/perl
- ! pp_ctl.c t/op/local.t
-____________________________________________________________________________
-[ 712] By: TimBunce on 1998/03/03 19:45:56
- Log: Title: "after an eval-ed bad require, requiring a string ref SEGVs", #F082
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802102349.SAA16001@aatma.engin.umich.edu>
- Files: pp_ctl.c
- Branch: maint-5.004/perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 711] By: TimBunce on 1998/03/03 19:44:41
- Log: Title: "Fix seg fault on eval/require and syntax errors", #F081
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199802102321.SAA15346@aatma.engin.umich.edu>
- Files: MANIFEST scope.h op.c pp_ctl.c scope.c t/comp/require.t toke.c
- Branch: maint-5.004/perl
- + t/comp/require.t
- ! MANIFEST op.c pp_ctl.c scope.c scope.h toke.c
-____________________________________________________________________________
-[ 710] By: TimBunce on 1998/03/03 19:36:34
- Log: Title: "5.004_58: the locale.t problem in IRIX", #F080
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802091747.TAA01735@alpha.hut.fi>
- Files: t/pragma/locale.t
- Branch: maint-5.004/perl
- ! t/pragma/locale.t
-____________________________________________________________________________
-[ 709] By: TimBunce on 1998/03/03 19:32:30
- Log: Title: "sv_setnv will upgrade SVt_NV to SVt_PVNV", #F079
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3g1lwl3bq.fsf@furu.g.aas.no>
- Files: sv.c
- Branch: maint-5.004/perl
- ! sv.c
-____________________________________________________________________________
-[ 708] By: TimBunce on 1998/03/03 19:28:06
- Log: Title: "Eliminate double warnings under C<package;>", #F077
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0y0paq-0000Ov-00@ursa.cus.cam.ac.uk>
- Files: gv.c op.c toke.c
- Branch: maint-5.004/perl
- ! gv.c op.c toke.c
-____________________________________________________________________________
-[ 707] By: TimBunce on 1998/03/03 19:13:17
- Log: Title: "Fix infinite loop on unlink() failure in File::Path::rmtree()",
- #F076
- From: Murray Nesbitt <mjn@pathcom.com>, Tim Bunce <Tim.Bunce@ig.co.uk>
- Msg-ID: <199802061100.LAA16423@toad.ig.co.uk>
- Files: lib/File/Path.pm
- Branch: maint-5.004/perl
- ! lib/File/Path.pm
-____________________________________________________________________________
-[ 706] By: TimBunce on 1998/03/03 19:08:45
- Log: Title: "Update of h2ph", #F075
- From: kstar@www.chapin.edu (Kurt D. Starsinic)
- Msg-ID: <199802051354.FAA11452@www.chapin.edu>
- Files: t/lib/ph.t utils/h2ph.PL
- Branch: maint-5.004/perl
- + t/lib/ph.t
- ! utils/h2ph.PL
-____________________________________________________________________________
-[ 705] By: TimBunce on 1998/03/03 18:56:59
- Log: Title: "Fix AutoLoader for deep packages", #F074
- From: Zachary Miller <zcmiller@zappy.er.usgs.gov>
- Msg-ID: <199710092348.SAA02108@zappy.er.usgs.gov>
- Files: lib/AutoLoader.pm
- Branch: maint-5.004/perl
- ! lib/AutoLoader.pm
-____________________________________________________________________________
-[ 704] By: TimBunce on 1998/03/03 18:35:36
- Log: Title: "Fix order of warnings for misplaced subscripts", #F073
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199710131023.LAA16796@crypt.compulink.co.uk>
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 703] By: TimBunce on 1998/03/03 18:32:28
- Log: Title: "Make recursive lexical analysis more robust", #F072
- From: Ilya Zakharevich and Chip Salzenberg
- Msg-ID: <199710160102.VAA28817@monk.mps.ohio-state.edu>
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 702] By: TimBunce on 1998/03/03 18:18:10
- Log: Title: "Fix random whitespace errors in docs", #F070
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <12726.877706444@eeyore.ibcinc.com>
- Files: pod/perlfunc.pod pod/checkpods.PL
- Branch: maint-5.004/perl
- ! pod/checkpods.PL pod/perlfunc.pod
-____________________________________________________________________________
-[ 701] By: TimBunce on 1998/03/03 18:13:54
- Log: Title: "Fix line numbers after here documents in eval STRING", #F069
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199710241745.NAA08166@monk.mps.ohio-state.edu>
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 700] By: TimBunce on 1998/03/03 18:11:20
- Log: Title: "Fix SEGV from combining caller and C<package;>", #F068
- From: James Duncan <jduncan@epitome.hawk.igs.net>, Nicholas Clark
- <nick@flirble.org>
- Msg-ID: <199710241248.NAA00163@flirble.org>,
- <Pine.LNX.3.96.971024135912.12197A-100000@epitome.hawk.igs.
- net>
- Files: pp_ctl.c sv.c
- Branch: maint-5.004/perl
- ! pp_ctl.c sv.c
-____________________________________________________________________________
-[ 699] By: TimBunce on 1998/03/03 18:06:59
- Log: Title: "Don't fold string comparison under C<use locale>", #F067
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199711151506.RAA26287@alpha.hut.fi>
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 698] By: TimBunce on 1998/03/03 18:04:51
- Log: Title: "Fix SEGV on constant at end of sort block", #F066
- From: Administration <fadmin@informatics.muni.cz>
- Msg-ID: <199711170838.JAA26073@thetis.fi.muni.cz>
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 697] By: TimBunce on 1998/03/03 18:02:54
- Log: Title: "Allow C<last()> to mean C<last>", #F065
- From: Chip Salzenberg
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 696] By: TimBunce on 1998/03/03 17:58:12
- Log: Title: "Fix extension version mismatch message", #F064
- From: Chip Salzenberg
- Files: XSUB.h
- Branch: maint-5.004/perl
- ! XSUB.h
-____________________________________________________________________________
-[ 695] By: TimBunce on 1998/03/03 17:53:04
- Log: Title: "Better handle and test struct tm of Linux and SunOS", #F063
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Msg-ID: <Pine.SUN.3.96.980205134340.15567B-100000@newton.phys>
- Files: MANIFEST ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl
- hints/linux.sh hints/sunos_4_1.sh t/lib/posix.t
- Branch: maint-5.004/perl
- + ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl
- ! MANIFEST hints/linux.sh hints/sunos_4_1.sh t/lib/posix.t
-____________________________________________________________________________
-[ 694] By: TimBunce on 1998/03/03 17:40:47
- Log: Title: "Fix doc bug in getservbyname() examples", #F062
- From: Tom Christiansen
- Files: ext/Socket/Socket.pm
- Branch: maint-5.004/perl
- ! ext/Socket/Socket.pm
-____________________________________________________________________________
-[ 693] By: TimBunce on 1998/03/03 17:32:57
- Log: Title: "Kill warning about parameter type", #F061
- From: Chip Salzenberg
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 692] By: TimBunce on 1998/03/03 17:11:07
- Log: Title: "Socket occasional SEGV", #F060
- From: Trevor Blackwell <tlb@viaweb.com>
- Msg-ID: <199710281804.NAA09632@wagg.viaweb.com>
- Files: ext/Socket/Socket.xs
- Branch: maint-5.004/perl
- ! ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 691] By: TimBunce on 1998/03/03 17:09:51
- Log: Title: "Avoid SEGV from local($@)", #F059
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710290251.VAA14362@aatma.engin.umich.edu>
- Files: pp_ctl.c
- Branch: maint-5.004/perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 690] By: TimBunce on 1998/03/03 17:08:21
- Log: Title: "Don't use broken pad_reset() (was Re: Perl bug in 5.004_03 )", #F058
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710300036.TAA01004@aatma.engin.umich.edu>
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 689] By: TimBunce on 1998/03/03 17:05:57
- Log: Title: "Use STMT_{START,END} in XSRETURN", #F057
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199710300245.VAA04244@aatma.engin.umich.edu>
- Files: XSUB.h
- Branch: maint-5.004/perl
- ! XSUB.h
-____________________________________________________________________________
-[ 688] By: TimBunce on 1998/03/03 17:04:15
- Log: Title: "Re: Sort grammar bug", #F056
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199711011946.OAA18882@aatma.engin.umich.edu>
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 687] By: TimBunce on 1998/03/03 17:01:32
- Log: Title: "Document indirect object cases for exec(), system()", #F055
- From: Dominic Dunlop <domo@slipper.ip.lu>
- Msg-ID: <v03110700b084e89234a7@[194.51.248.90]>
- Files: pod/perlfunc.pod
- Branch: maint-5.004/perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 686] By: TimBunce on 1998/03/03 16:56:44
- Log: Title: "Update docs on tr///", #F054
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971103071602.10568C-100000@usertest.teleport.com>
- Files: pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- pod/perllocale.pod pod/perlmod.pod pod/perlop.pod
- pod/perlstyle.pod toke.c
- Branch: maint-5.004/perl
- ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- ! pod/perllocale.pod pod/perlmod.pod pod/perlop.pod
- ! pod/perlstyle.pod toke.c
-____________________________________________________________________________
-[ 685] By: TimBunce on 1998/03/03 16:38:50
- Log: Title: "Re: perlop bitwise & | ^ documentation", #F053
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971106073858.29771O-100000@usertest.teleport.com>
- Files: pod/perlop.pod
- Branch: maint-5.004/perl
- ! pod/perlop.pod
-____________________________________________________________________________
-[ 684] By: TimBunce on 1998/03/03 16:37:00
- Log: Title: "Fix SEGV on C<*glob{'SCALAR','ARRAY'}>", #F052
- From: "Joseph N. Hall" <joseph@cscaper.com>
- Msg-ID: <199711110552.WAA12613@gadget.cscaper.com>
- Files: perly.c perly.c.diff perly.y vms/perly_c.vms
- Branch: maint-5.004/perl
- ! perly.c perly.c.diff perly.y vms/perly_c.vms
-____________________________________________________________________________
-[ 683] By: TimBunce on 1998/03/03 16:31:15
- Log: Title: "for perlguts.pod: document sv_derived_from, sv_vcatpfn and
- sv_vsetpfn", #F051
- From: jan.dubois@ibm.net (Jan Dubois) and Chip Salzenberg
- Msg-ID: <346ae970.7444534@smtp1.ibm.net>
- Files: pod/perlguts.pod
- Branch: maint-5.004/perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 682] By: TimBunce on 1998/03/03 16:28:30
- Log: Title: "5.004_04: locale startup failure (at last) documented", #F050
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199711172054.WAA08261@alpha.hut.fi>
- Files: INSTALL pod/perldiag.pod pod/perllocale.pod
- Branch: maint-5.004/perl
- ! INSTALL pod/perldiag.pod pod/perllocale.pod
-____________________________________________________________________________
-[ 681] By: TimBunce on 1998/03/03 16:24:12
- Log: Title: "Cope with lack of args in Fcntl::AUTOLOAD", #F049
- From: Jerome Abela <abela@hsc.fr>
- Msg-ID: <19971120183248.23588@coredump.hsc.fr>
- Files: ext/Fcntl/Fcntl.pm
- Branch: maint-5.004/perl
- ! ext/Fcntl/Fcntl.pm
-____________________________________________________________________________
-[ 680] By: TimBunce on 1998/03/03 16:23:20
- Log: Title: "Commenting toke.c", #F048
- From: gnat@frii.com
- Msg-ID: <199801082138.OAA14186@prometheus.frii.com>
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 679] By: TimBunce on 1998/03/03 16:18:32
- Log: Title: "Re: 5.004_04 vec() fails with 32-bit values", #F047
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Msg-ID: <E0xsnr8-0007SS-00@taurus.cus.cam.ac.uk>
- Files: pod/perlguts.pod pp.c t/op/vec.t
- Branch: maint-5.004/perl
- ! pod/perlguts.pod pp.c t/op/vec.t
-____________________________________________________________________________
-[ 678] By: TimBunce on 1998/03/03 16:15:44
- Log: Title: "A few perl5.004_03 bugs", #F046
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199801221211.MAA05315@crypt.compulink.co.uk>
- Files: mg.c t/op/magic.t
- Branch: maint-5.004/perl
- ! mg.c t/op/magic.t
-____________________________________________________________________________
-[ 677] By: TimBunce on 1998/03/03 16:13:11
- Log: Title: "Faster, cleaner av_unshift() ", #F045
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <199801221850.TAA23111@furu.g.aas.no>
- Files: av.c
- Branch: maint-5.004/perl
- ! av.c
-____________________________________________________________________________
-[ 676] By: TimBunce on 1998/03/03 16:04:30
- Log: Title: "New hints/solaris2.sh", #F044
- From: Stephen Zander <srz@mckesson.com>
- Msg-ID: <87oh12y458.fsf@wsuse5.mckesson.com>
- Files: hints/solaris_2.sh
- Branch: maint-5.004/perl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 675] By: TimBunce on 1998/03/03 15:33:07
- Log: Title: "Refresh Complex.pm and test", #F043
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Msg-ID: <199802051608.SAA20262@alpha.hut.fi>
- Files: lib/Math/Complex.pm t/lib/complex.t
- Branch: maint-5.004/perl
- ! lib/Math/Complex.pm t/lib/complex.t
-____________________________________________________________________________
-[ 674] By: TimBunce on 1998/03/03 15:29:16
- Log: Title: "Fix (\@@) proto", #F042
- From: "Joseph N. Hall" <joseph@cscaper.com>
- Msg-ID: <199801240132.SAA25111@gadget.cscaper.com>
- Files: op.c t/comp/proto.t
- Branch: maint-5.004/perl
- ! op.c t/comp/proto.t
-____________________________________________________________________________
-[ 673] By: TimBunce on 1998/03/03 15:26:31
- Log: Title: "Allow empty BLOCK in code", #F041
- From: Vladimir Alexiev <vladimir@cs.ualberta.ca>
- Msg-ID: <19980129002112Z13378-6931+226@scapa.cs.ualberta.ca>
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 672] By: TimBunce on 1998/03/03 15:23:55
- Log: Title: "Fix name of $Foo::{'Bar::'}: '*Foo::Bar::'", #F040
- From: Chip Salzenberg
- Files: gv.c t/op/gv.t
- Branch: maint-5.004/perl
- ! gv.c t/op/gv.t
-____________________________________________________________________________
-[ 671] By: TimBunce on 1998/03/03 10:02:32
- Log: Title: "Keep accurate reference count on globs' stashes", #F038
- From: Gisle Aas <gisle@aas.no>
- Msg-ID: <m3zpk7sd3n.fsf@furu.g.aas.no>
- Files: gv.c sv.c
- Branch: maint-5.004/perl
- ! gv.c sv.c
-____________________________________________________________________________
-[ 670] By: TimBunce on 1998/03/03 09:59:48
- Log: Title: "Avoid memory allocation in gv_fetchpv(), for speed", #F037
- From: Chip Salzenberg
- Files: gv.c
- Branch: maint-5.004/perl
- ! gv.c
-____________________________________________________________________________
-[ 669] By: TimBunce on 1998/03/03 09:58:58
- Log: Title: "Make Configure less negative about PerlIO", #F036
- From: chip@atlantic.net
- Msg-ID: <199801312323.SAA15237@cyprus.atlantic.net>
- Files: Configure
- Branch: maint-5.004/perl
- ! Configure
-____________________________________________________________________________
-[ 668] By: TimBunce on 1998/03/03 09:55:51
- Log: Title: "Fix (mostly) pseudo-same-REs due to embedded NULs", #F035
- From: Martin Plechsmid <plechsmi@karlin.mff.cuni.cz>
- Msg-ID: <199802021217.NAA05230@albert.karlin.mff.cuni.cz>
- Files: pp_ctl.c
- Branch: maint-5.004/perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 667] By: TimBunce on 1998/03/03 09:52:59
- Log: Title: "Make Getopt::Long avoid $&, $`, $'", #F034
- From: Irving Reid <irving@tor.securecomputing.com>
- Msg-ID: <98Feb3.005102est.11655@janus.tor.securecomputing.com>
- Files: lib/Getopt/Long.pm
- Branch: maint-5.004/perl
- ! lib/Getopt/Long.pm
-____________________________________________________________________________
-[ 666] By: TimBunce on 1998/03/03 09:51:27
- Log: Title: "adding the newSVpvn API function", #F033
- From: Matthias Ulrich Neeracher <neeri@iis.ee.ethz.ch>
- Msg-ID: <199801310532.GAA23798@solar.ethz.ch>
- Files: pod/perlguts.pod pod/perltoc.pod proto.h global.sym sv.c
- Branch: maint-5.004/perl
- ! global.sym pod/perlguts.pod pod/perltoc.pod proto.h sv.c
-____________________________________________________________________________
-[ 665] By: TimBunce on 1998/03/03 09:43:30
- Log: Title: "Support C<Package::> as function-blind bearword", #F032
- From: Chip Salzenberg
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 664] By: TimBunce on 1998/03/03 09:41:40
- Log: Title: "Re-optimize character classes", #F031
- From: Chip Salzenberg
- Files: regcomp.h regcomp.c regexec.c
- Branch: maint-5.004/perl
- ! regcomp.c regcomp.h regexec.c
-____________________________________________________________________________
-[ 663] By: TimBunce on 1998/03/03 09:39:55
- Log: Title: "Fix C<if (1) { local $x }> which needed ENTER/LEAVE", #F030
- From: dfh@dwroll.lucent.com (D461-David_F_Haertig(Dave)83040)
- Msg-ID: <EnKC0q.6qI@drnews.dr.lucent.com>
- Files: op.c t/op/local.t
- Branch: maint-5.004/perl
- ! op.c t/op/local.t
-____________________________________________________________________________
-[ 662] By: TimBunce on 1998/03/03 09:37:51
- Log: Title: "Dramatically improve performance of // with parens or $&", #F029
- From: Chip Salzenberg
- Files: cop.h perl.h proto.h regexp.h gv.c interp.sym perl.c pp.c pp_ctl.c
- pp_hot.c regexec.c scope.c
- Branch: maint-5.004/perl
- ! cop.h gv.c interp.sym perl.c perl.h pp.c pp_ctl.c pp_hot.c
- ! proto.h regexec.c regexp.h scope.c
-____________________________________________________________________________
-[ 661] By: TimBunce on 1998/03/03 09:27:04
- Log: Title: "Don't warn on $x{shift}, ne => 1, or -f => 1", #F028
- From: Chip Salzenberg
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 660] By: TimBunce on 1998/03/03 09:24:41
- Log: Title: "Protect against weirdness with unreal @_ in C<local @_>", #F027
- From: Chip Salzenberg
- Files: scope.c
- Branch: maint-5.004/perl
- ! scope.c
-____________________________________________________________________________
-[ 659] By: TimBunce on 1998/03/03 09:24:00
- Log: Title: "Fix C<printf "%.0d", 0>", #F026
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711021331.NAA01826@crypt.compulink.co.uk>
- Files: sv.c t/op/sprintf.t
- Branch: maint-5.004/perl
- ! sv.c t/op/sprintf.t
-____________________________________________________________________________
-[ 658] By: TimBunce on 1998/03/03 09:22:13
- Log: Title: "Tiny core patch for source filters", #F025
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Msg-ID: <9711202312.AA02937@claudius.bfsec.bt.co.uk>
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 657] By: TimBunce on 1998/03/03 09:20:00
- Log: Title: "Here-doc in s///e (was: Bug)", #F024
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711221445.OAA14153@crypt.compulink.co.uk>
- Files: t/base/lex.t toke.c
- Branch: maint-5.004/perl
- ! t/base/lex.t toke.c
-____________________________________________________________________________
-[ 656] By: TimBunce on 1998/03/03 09:17:56
- Log: Title: "Fix duplicate warnings on C<-e undef>", #F023
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199711221252.MAA14000@crypt.compulink.co.uk>
- Files: doio.c t/pragma/warn-1global
- Branch: maint-5.004/perl
- ! doio.c t/pragma/warn-1global
-____________________________________________________________________________
-[ 655] By: TimBunce on 1998/03/03 09:16:56
- Log: Title: "Fix '*' prototype", #F022
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199711212225.RAA00755@monk.mps.ohio-state.edu>
- Files: toke.c
- Branch: maint-5.004/perl
- ! toke.c
-____________________________________________________________________________
-[ 654] By: TimBunce on 1998/03/03 09:15:04
- Log: Title: "File::Find bugs (and patches)", "File::Find bugs & patches", #F021
- From: "Conrad E. Kimball" <cek@tblv021.ca.boeing.com>
- Msg-ID: <199711260703.XAA21257@mailgate2.boeing.com>
- Files: lib/File/Find.pm
- Branch: maint-5.004/perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 653] By: TimBunce on 1998/03/03 09:11:55
- Log: Title: "Fix typo: FORM{,AT}LINE", #F020
- From: Chip Salzenberg
- Files: sv.c
- Branch: maint-5.004/perl
- ! sv.c
-____________________________________________________________________________
-[ 652] By: TimBunce on 1998/03/03 09:07:50
- Log: Title: "Fix use of unref mem when blessed object goes out of scope", #F019
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199711282326.SAA15090@aatma.engin.umich.edu>
- Files: scope.c
- Branch: maint-5.004/perl
- ! scope.c
-____________________________________________________________________________
-[ 651] By: TimBunce on 1998/03/03 09:07:10
- Log: Title: "Fix C<my ($a, undef, $b) = @x>", #F018
- From: Stephane Payrard <stef@francenet.fr>
- Msg-ID: <199712040054.BAA04612@www.zweig.com>
- Files: op.c t/op/my.t
- Branch: maint-5.004/perl
- ! op.c t/op/my.t
-____________________________________________________________________________
-[ 650] By: TimBunce on 1998/03/03 09:04:04
- Log: Title: "enhanced "use strict" warning", #F017
- From: Tkil <tkil@reptile.scrye.com>
- Msg-ID: <199712040938.CAA07628@reptile.scrye.com>
- Files: gv.c t/pragma/strict-subs t/pragma/strict-vars
- Branch: maint-5.004/perl
- ! gv.c t/pragma/strict-subs t/pragma/strict-vars
-____________________________________________________________________________
-[ 649] By: TimBunce on 1998/03/03 09:02:55
- Log: Title: "eval of sub gives spurious "uninitialised" warning", #F016
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199712061025.FAA14396@aatma.engin.umich.edu>
- Files: pod/perldelta.pod pod/perlfunc.pod op.c t/op/eval.t
- Branch: maint-5.004/perl
- ! op.c pod/perldelta.pod pod/perlfunc.pod t/op/eval.t
-____________________________________________________________________________
-[ 648] By: TimBunce on 1998/03/03 08:58:00
- Log: Title: "[PERL] Assigning result of pop scrambles unrelated reference", #F015
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199712061100.GAA14864@aatma.engin.umich.edu>
- Files: sv.c
- Branch: maint-5.004/perl
- ! sv.c
-____________________________________________________________________________
-[ 647] By: TimBunce on 1998/03/03 08:53:35
- Log: Title: "[PERL] Filedescriptor leak in 5.004_55 (and earlier)", #F014
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Msg-ID: <199712151922.OAA06410@monk.mps.ohio-state.edu>
- Files: os2/os2.c util.c
- Branch: maint-5.004/perl
- ! os2/os2.c util.c
-____________________________________________________________________________
-[ 646] By: TimBunce on 1998/03/03 08:51:04
- Log: Title: "Fix fdopen() on STD{IN,OUT,ERR}", #F013
- From: Roderick Schertler <roderick@argon.org>
- Msg-ID: <pzg1npp6e3.fsf@eeyore.ibcinc.com>
- Files: doio.c t/op/misc.t
- Branch: maint-5.004/perl
- ! doio.c t/op/misc.t
-____________________________________________________________________________
-[ 645] By: TimBunce on 1998/03/03 08:49:34
- Log: Title: "Fix local $a[0] and local $h{a}", #F012
- From: Stephen McCamant <alias@mcs.com>
- Msg-ID: <m0xjWFq-000EZeC@alias-2.pr.mcs.net>
- Files: embed.h scope.h global.sym pp.c pp_hot.c scope.c t/op/local.t
- Branch: maint-5.004/perl
- ! embed.h global.sym pp.c pp_hot.c scope.c scope.h t/op/local.t
-____________________________________________________________________________
-[ 644] By: TimBunce on 1998/03/03 08:43:06
- Log: Title: "Eliminate redundant mg_get() in SvTRUE()", #F011
- From: Spider Boardman <spider@orb.nashua.nh.us>
- Msg-ID: <199712251839.NAA14800@Orb.Nashua.NH.US>
- Files: sv.c
- Branch: maint-5.004/perl
- ! sv.c
-____________________________________________________________________________
-[ 643] By: TimBunce on 1998/03/03 08:41:07
- Log: Title: "Don't force scalar context on C<my @x> or C<my %x>", #F010
- From: Chip Salzenberg
- Files: op.c t/op/my.t
- Branch: maint-5.004/perl
- ! op.c t/op/my.t
-____________________________________________________________________________
-[ 642] By: TimBunce on 1998/03/03 08:39:11
- Log: Title: "Fix assignment to $_[0] in DESTROY", #F009
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199801010030.TAA14274@aatma.engin.umich.edu>
- Files: pod/perlobj.pod sv.c t/op/ref.t
- Branch: maint-5.004/perl
- ! pod/perlobj.pod sv.c t/op/ref.t
-____________________________________________________________________________
-[ 641] By: gsar on 1998/03/03 04:39:49
- Log: merge problematic maintpatch to op.c
- #77: "Eliminate double warnings under C<package;>"
- From: Chip Salzenberg
- Files: gv.c op.c toke.c
- Branch: win32/perl
- ! gv.c op.c toke.c
-____________________________________________________________________________
-[ 640] By: gsar on 1998/03/03 04:30:22
- Log: merge another conflicting maintpatch to op.c
- #17: "Enhanced "use strict" warning"
- From: Tkil <tkil@reptile.scrye.com>
- Msg-ID: <199712040938.CAA07628@reptile.scrye.com>
- Date: Thu, 4 Dec 1997 02:38:26 -0700
- Files: gv.c t/pragma/strict-subs t/pragma/strict-vars
- Branch: win32/perl
- ! gv.c t/pragma/strict-subs t/pragma/strict-vars
-____________________________________________________________________________
-[ 639] By: gsar on 1998/03/03 04:09:11
- Log: maintpatch
- #73: "Fix order of warnings for misplaced subscripts"
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Msg-ID: <199710131023.LAA16796@crypt.compulink.co.uk>
- Date: Mon, 13 Oct 1997 11:23:56 +0100
- Files: op.c
- Branch: win32/perl
- ! op.c
-____________________________________________________________________________
-[ 638] By: gsar on 1998/03/03 04:02:16
- Log: manually apply another conflicting maintpatch
- #64: "Fix extension version mismatch message"
- From: Chip Salzenberg
- Files: XSUB.h
- Branch: win32/perl
- ! XSUB.h
-____________________________________________________________________________
-[ 637] By: gsar on 1998/03/03 03:57:08
- Log: maintpatch
- #62: "Fix doc bug in getservbyname() examples"
- From: Tom Christiansen
- Files: ext/Socket/Socket.pm
- Branch: win32/perl
- ! ext/Socket/Socket.pm
-____________________________________________________________________________
-[ 636] By: gsar on 1998/03/03 03:55:13
- Log: maintpatch
- #60: "Socket occasional SEGV"
- From: Trevor Blackwell <tlb@viaweb.com>
- Msg-ID: <199710281804.NAA09632@wagg.viaweb.com>
- Date: Tue, 28 Oct 1997 13:04:43 -0500 (EST)
- Files: ext/Socket/Socket.xs
- Branch: win32/perl
- ! ext/Socket/Socket.xs
-____________________________________________________________________________
-[ 635] By: gsar on 1998/03/03 03:51:01
- Log: maintpatches for docs
- #53: "Perlop bitwise & | ^ documentation"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971106073858.29771O-100000@usertest.teleport.c
- Date: Thu, 6 Nov 1997 07:44:52 -0800 (PST)
- Files: pod/perlfunc.pod
- --------
- #54: "Update docs on tr///"
- From: Tom Phoenix <rootbeer@teleport.com>
- Msg-ID: <Pine.GSO.3.96.971103071602.10568C-100000@usertest.teleport.c
- Date: Mon, 3 Nov 1997 07:28:39 -0800 (PST)
- Files: pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- pod/perllocale.pod pod/perlmod.pod pod/perlop.pod
- pod/perlstyle.pod toke.c
- Branch: win32/perl
- ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- ! pod/perllocale.pod pod/perlmod.pod pod/perlop.pod
- ! pod/perlstyle.pod toke.c
-____________________________________________________________________________
-[ 634] By: gsar on 1998/03/03 03:43:42
- Log: another maintpatch (this one needed adjust of test nos.)
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Message-Id: <199801221211.MAA05315@crypt.compulink.co.uk>
- Date: Thu, 22 Jan 1998 12:11:49 +0000
- Subject: Re: [PERL] A few perl5.004_03 bugs
- Branch: win32/perl
- ! mg.c t/op/magic.t
-____________________________________________________________________________
-[ 633] By: gsar on 1998/03/03 03:36:40
- Log: merge another toke.c patch and its dependent (very carefully)
- #32: "Support C<Package::> as function-blind bearword"
- From: Chip Salzenberg
- Files: toke.c
- --------
- #86: "Make warning on C<Nosuch::> optional, add to perl{diag,delta}.pod"
- From: Gurusamy Sarathy
- Files: toke.c pod/perldelta.pod pod/perldiag.pod
- Branch: win32/perl
- ! pod/perldelta.pod pod/perldiag.pod toke.c
-____________________________________________________________________________
-[ 632] By: gsar on 1998/03/03 03:12:16
- Log: another toke.c maintpatch
- #28: "Don't warn on $x{shift}, ne => 1, or -f => 1"
- From: Chip Salzenberg
- Files: toke.c
- Branch: win32/perl
- ! toke.c
-____________________________________________________________________________
-[ 631] By: gsar on 1998/03/03 03:06:59
- Log: still another maintpatch
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Message-Id: <199711021331.NAA01826@crypt.compulink.co.uk>
- Date: Sun, 02 Nov 1997 13:31:54 +0000
- Subject: [PATCH] assorted sprintf bugs
- Branch: win32/perl
- ! sv.c t/op/sprintf.t
-____________________________________________________________________________
-[ 630] By: gsar on 1998/03/03 03:03:55
- Log: yet another maintpatch
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Message-Id: <199711221252.MAA14000@crypt.compulink.co.uk>
- Date: Sat, 22 Nov 1997 12:52:16 +0000
- Subject: Re: [PERL] Unexpected output
- Branch: win32/perl
- ! doio.c t/pragma/warn-1global
-____________________________________________________________________________
-[ 629] By: gsar on 1998/03/03 02:57:33
- Log: merge another maintpatch to toke.c
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Date: Sat, 22 Nov 1997 14:45:23 GMT
- Message-Id: <199711221445.OAA14153@crypt.compulink.co.uk>
- Subject: Re: [PERL] Here-doc in s///e (was: Bug)
- Branch: win32/perl
- ! t/base/lex.t toke.c
-____________________________________________________________________________
-[ 628] By: gsar on 1998/03/03 02:50:20
- Log: manually merge a maintpatch
- Date: Thu, 8 Jan 1998 14:38:04 -0700 (MST)
- Message-Id: <199801082138.OAA14186@prometheus.frii.com>
- From: gnat@frii.com
- Subject: [PERL] Commenting toke.c
- Branch: win32/perl
- ! toke.c
-____________________________________________________________________________
-[ 627] By: TimBunce on 1998/03/02 22:34:47
- Log: Title: "Fix inefficient checks for TIEHANDLE", #F008
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Msg-ID: <199801080106.UAA05048@aatma.engin.umich.edu>
- Files: pp_hot.c pp_sys.c
- Branch: maint-5.004/perl
- ! pp_hot.c pp_sys.c
-____________________________________________________________________________
-[ 626] By: TimBunce on 1998/03/02 22:31:13
- Log: This is the change description for change 625
- Title: "Fix tr///s option", #F007
- From: Inaba Hiroto <inaba@st.rim.or.jp>
- Msg-ID: <19980110155333D.inaba@st.rim.or.jp>
- Files: doop.c
- Branch: maint-5.004/perl
- ! doop.c
-____________________________________________________________________________
-[ 625] By: TimBunce on 1998/03/02 22:23:48
- Log: Branch: maint-5.004/perl
- ! doop.c
-____________________________________________________________________________
-[ 623] By: TimBunce on 1998/03/02 21:51:53
- Log: Title: "Fix lexical lookup in eval-sub-eval", #F006
- From: Chip Salzenberg
- Files: pp_ctl.c
- Branch: maint-5.004/perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 622] By: TimBunce on 1998/03/02 21:43:29
- Log: Title: "Don't upgrade target of assignment from LVALUE", #F005
- From: Chip Salzenberg
- Files: sv.c
- Branch: maint-5.004/perl
- ! sv.c
-____________________________________________________________________________
-[ 621] By: TimBunce on 1998/03/02 21:29:59
- Log: Title: "Fix compile-time warning line in while ()", #F004
- From: Chip Salzenberg
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 620] By: TimBunce on 1998/03/02 21:25:27
- Log: Title: "STMT foreach LIST;", #F002
- From: Chip Salzenberg
- Files: pod/perlsyn.pod perly.c perly.c.diff perly.y t/cmd/mod.t toke.c
- vms/perly_c.vms
- Branch: maint-5.004/perl
- ! perly.c perly.c.diff perly.y pod/perlsyn.pod t/cmd/mod.t
- ! toke.c vms/perly_c.vms
-____________________________________________________________________________
-[ 619] By: TimBunce on 1998/03/02 21:12:58
- Log: Title: "Fix SIGSEGV on C<42 until forever>", #F001
- From: Chip Salzenberg
- Files: op.c
- Branch: maint-5.004/perl
- ! op.c
-____________________________________________________________________________
-[ 618] By: gsar on 1998/03/02 04:40:16
- Log: make t/lib/nothread.t type xtext also
- Branch: win32/perl
- ! t/op/nothread.t
-____________________________________________________________________________
-[ 617] By: gsar on 1998/03/02 04:35:15
- Log: make t/lib/thread.t type xtext
- Branch: win32/perl
- ! t/lib/thread.t
-____________________________________________________________________________
-[ 616] By: gsar on 1998/03/02 04:17:40
- Log: fix misapplied hunks in change#614
- Branch: win32/perl
- ! scope.c scope.h
-____________________________________________________________________________
-[ 615] By: gsar on 1998/03/02 03:39:16
- Log: another one down
- From: "Conrad E. Kimball" <cek@tblv021.ca.boeing.com>
- Message-Id: <199711260703.XAA21257@mailgate2.boeing.com>
- Date: Tue, 25 Nov 1997 23:03:48 -0800
- Subject: [PERL] File::Find bugs & patches
- Branch: win32/perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 614] By: gsar on 1998/03/02 03:28:28
- Log: this one with adjusted test numbers
- Message-Id: <m0xjWFq-000EZeC@alias-2.pr.mcs.net>
- Date: Sat, 20 Dec 1997 15:16:14 -0600 (CST)
- From: Stephen McCamant <alias@mcs.com>
- Subject: [PERL] [PATCH] Fix local $a[0] and local $h{a}
- Branch: win32/perl
- ! embed.h global.sym pp.c pp_hot.c scope.c scope.h t/op/local.t
-____________________________________________________________________________
-[ 613] By: gsar on 1998/03/02 03:13:32
- Log: still another
- From: Inaba Hiroto <inaba@st.rim.or.jp>
- Subject: [PERL] tr///s bug
- Message-Id: <19980110155333D.inaba@st.rim.or.jp>
- Date: Sat, 10 Jan 1998 15:53:33 +0900
- Branch: win32/perl
- ! doop.c t/op/subst.t
-____________________________________________________________________________
-[ 612] By: gsar on 1998/03/02 03:01:27
- Log: yet another patch
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Message-Id: <199709161748.NAA08418@nielsenmedia.com>
- Subject: Tiny but massively cool: C<statement foreach @list>
- Date: Tue, 16 Sep 1997 13:47:28 -0400 (EDT)
- Branch: win32/perl
- ! perly.c perly.c.diff perly.y pod/perlsyn.pod t/cmd/mod.t
- ! toke.c vms/perly_c.vms
-____________________________________________________________________________
-[ 611] By: gsar on 1998/03/02 01:52:46
- Log: yet another 'old' patch
- From: Stephane Payrard <stef@francenet.fr>
- Message-Id: <199712040054.BAA04612@www.zweig.com>
- To: perl5-porters@perl.org
- Subject: Re: [PERL] buglet : minor but gratuitous inconsistency
- between `my' and `local' (Patch included)
- Branch: win32/perl
- ! op.c t/op/my.t
-____________________________________________________________________________
-[ 610] By: gsar on 1998/03/02 01:45:55
- Log: another 'old' patch
- From: Roderick Schertler <roderick@argon.org>
- Date: 19 Dec 1997 12:52:36 -0500
- Message-Id: <pzg1npp6e3.fsf@eeyore.ibcinc.com>
- Subject: [PERL] [PATCH] Re: Problem with open >&=
- Branch: win32/perl
- ! doio.c t/op/misc.t
-____________________________________________________________________________
-[ 609] By: gsar on 1998/03/02 01:23:56
- Log: apply missing pieces from:
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Message-Id: <199711272044.PAA12102@nielsenmedia.com>
- Subject: [PATCH] Improved LVALUE patch
- Date: Thu, 27 Nov 1997 15:44:02 -0500 (EST)
- Branch: win32/perl
- ! sv.c
-____________________________________________________________________________
-[ 608] By: gsar on 1998/03/02 01:13:01
- Log: merge two important 'old' patches
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Message-Id: <199709241632.MAA09164@nielsenmedia.com>
- Subject: [PATCH] Fix C<42 until forever> SIGSEGV
- Date: Wed, 24 Sep 1997 12:32:11 -0400 (EDT)
- ------
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Message-Id: <199710221332.JAA04814@nielsenmedia.com>
- Subject: [PATCH] Fix for compile-time while() warnings
- Date: Wed, 22 Oct 1997 09:31:50 -0400 (EDT)
- Branch: win32/perl
- ! op.c
-____________________________________________________________________________
-[ 607] By: gsar on 1998/03/01 06:52:26
- Log: integrate mainline changes
- Branch: asperl
- +> Policy_sh.SH Porting/config.sh Porting/config_H atomic.h
- +> lib/Tie/Handle.pm t/op/tiehandle.t
- - config_H
- !> (integrate 89 files)
-____________________________________________________________________________
-[ 606] By: gsar on 1998/02/28 23:11:00
- Log: misc small tweaks
- - AutoLoader fix for long::pack::names
- - d_mymalloc can be set from makefiles now
- - make search.pl actually work on win32
- - revert podoc about $^E on OS/2 (per Ilya's wishes)
- Branch: win32/perl
- ! lib/AutoLoader.pm pod/perlvar.pod win32/Makefile
- ! win32/bin/search.pl win32/makefile.mk win32/win32.c
-____________________________________________________________________________
-[ 605] By: gsar on 1998/02/28 22:16:45
- Log: fix typo in sv.h, and run 'make regen_headers' to make it build
- Branch: win32/perl
- ! embedvar.h sv.h
-____________________________________________________________________________
-[ 604] By: gsar on 1998/02/28 21:08:58
- Log: integrate mainline
- Branch: win32/perl
- +> Policy_sh.SH atomic.h lib/Tie/Handle.pm t/op/tiehandle.t
- !> Configure MANIFEST Makefile.SH bytecode.h bytecode.pl
- !> byterun.c ext/SDBM_File/Makefile.PL
- !> ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/sdbm.h
- !> lib/ExtUtils/MM_VMS.pm os2/diff.configure os2/os2.c perl.c
- !> perlvars.h pod/perltie.pod pp_sys.c sv.c sv.h t/lib/anydbm.t
- !> t/lib/sdbm.t util.c vms/descrip.mms vms/perlvms.pod
- !> vms/test.com win32/makedef.pl
-____________________________________________________________________________
-[ 603] By: nick on 1998/02/28 11:31:15
- Log: Missed FREAD in bytecode.h
- Cannot export svref_mutex in non-threaded perl
- Branch: perl
- ! bytecode.h win32/makedef.pl
-
-----------------
-Version 5.004_61
-----------------
-
-____________________________________________________________________________
-[ 602] By: mbeattie on 1998/02/27 18:35:27
- Log: Change FREAD/FGETC to BGET_FREAD/BGET_FGETC to avoid clash with
- preprocessor symbol on Digital UNIX.
- Branch: perl
- ! bytecode.h bytecode.pl byterun.c
-____________________________________________________________________________
-[ 601] By: mbeattie on 1998/02/27 18:27:00
- Log: Fix stupid ATOMIC_DEC_AND_TEST typo in sv.h.
- Branch: perl
- ! sv.h
-____________________________________________________________________________
-[ 600] By: mbeattie on 1998/02/27 18:15:07
- Log: Add atomic.h to MANIFEST
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 599] By: mbeattie on 1998/02/27 18:13:52
- Log: Integrate win32 branch into mainline.
- Branch: perl
- ! bytecode.pl
- !> bytecode.h byterun.c byterun.h dosish.h embed.h embedvar.h
- !> ext/B/B.xs ext/B/Makefile.PL global.sym perl.h sv.c
- !> win32/Makefile win32/bin/pl2bat.pl win32/config.bc
- !> win32/config.gc win32/config.vc win32/config_H.bc
- !> win32/config_H.gc win32/config_H.vc win32/config_h.PL
- !> win32/makedef.pl win32/makefile.mk win32/win32.c win32/win32.h
- !> win32/win32thread.h
-____________________________________________________________________________
-[ 598] By: mbeattie on 1998/02/27 18:06:41
- Log: Make refcounts atomic for threading (dependent on appropriate
- arch-dependent and compiler-dependent definitions in atomic.h
- or else falls back to a global mutex to protect refcounts).
- Branch: perl
- + atomic.h
- ! global.sym perl.c perlvars.h sv.c sv.h
-____________________________________________________________________________
-[ 597] By: mbeattie on 1998/02/27 15:37:22
- Log: Tiehandle stuff in change 595 didn't add to MANIFEST
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 596] By: mbeattie on 1998/02/27 15:34:55
- Log: Missed adding new file Policy_sh.SH in change 592.
- Branch: perl
- + Policy_sh.SH
-____________________________________________________________________________
-[ 595] By: mbeattie on 1998/02/27 15:34:06
- Log: Subject: [PATCH] _60 & _04 - Add WRITE & CLOSE to TIEHANDLE
- Date: Fri, 27 Feb 1998 04:15:04 +0000
- From: Graham Barr <gbarr@pobox.com>
- Branch: perl
- + lib/Tie/Handle.pm t/op/tiehandle.t
- ! pod/perltie.pod pp_sys.c
-____________________________________________________________________________
-[ 594] By: mbeattie on 1998/02/27 15:31:12
- Log: From: Dan Sugalski <sugalskd@osshe.edu>
- Subject: [PATCH 5.004_60] Fix to MM_VMS.PM
- Date: Thu, 26 Feb 1998 11:09:55 -0800
- Subject: [PATCH 5.004_60] Get SDBM_File working on VMS
- Date: Thu, 26 Feb 1998 11:15:24 -0800
- Branch: perl
- ! ext/SDBM_File/Makefile.PL ext/SDBM_File/sdbm/Makefile.PL
- ! ext/SDBM_File/sdbm/sdbm.h lib/ExtUtils/MM_VMS.pm
- ! t/lib/anydbm.t t/lib/sdbm.t vms/descrip.mms vms/perlvms.pod
- ! vms/test.com
-____________________________________________________________________________
-[ 593] By: mbeattie on 1998/02/27 15:26:45
- Log: Fix file-descriptor leak when pipes fail via taint checks:
- Subject: [PATCH] Some patches went through cracks
- Date: Thu, 26 Feb 1998 02:47:46 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! os2/os2.c util.c
-____________________________________________________________________________
-[ 592] By: mbeattie on 1998/02/27 15:15:12
- Log: Subject: Config_60-03-04.diff patch for 5.004_60
- Date: Wed, 25 Feb 1998 17:14:39 -0500 (EST)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Branch: perl
- ! Configure MANIFEST Makefile.SH os2/diff.configure
-____________________________________________________________________________
-[ 591] By: gsar on 1998/02/26 19:34:50
- Log: added AS patch#9
- Branch: asperl
- - win32/ipdir.c win32/ipenv.c win32/iplio.c win32/ipmem.c
- - win32/ipproc.c win32/ipsock.c win32/ipstdio.c
- - win32/ipstdiowin.h win32/perlobj.def
- ! ObjXSub.h globals.c perl.c proto.h win32/Makefile
- ! win32/dl_win32.xs win32/runperl.c win32/win32.c win32/win32.h
- ! win32/win32sck.c win32/win32thread.c
-____________________________________________________________________________
-[ 590] By: gsar on 1998/02/26 04:25:40
- Log: various changes to make win32 build under the new Configure & co.
- - added byterun.c to core C build
- - makefile.mk now has a regen_config_h target to quickly update config_H.[bgv]c
- after adding new variables to config.[bgv]c
- - sig_name_init now has only the valid signals
- - we now have $Config{usethreads}
- - tested under the two commercial compilers w/ and w/o usethreads
- Branch: win32/perl
- ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/config_h.PL win32/makedef.pl win32/makefile.mk
-____________________________________________________________________________
-[ 589] By: gsar on 1998/02/26 03:56:19
- Log: various cleanups so that B can be built as "just another extension"
- - export symbols needed for building B
- - bset_obj_store() is needed by byterun(), so define it there instead
- of at B.xs, and export it
- - freadpv() is only used in B.xs, so move it there
- - byte*.h are now included by perl.h
- - regenerate embed*.h
- Branch: win32/perl
- ! bytecode.h bytecode.pl byterun.c byterun.h embed.h embedvar.h
- ! ext/B/B.xs ext/B/Makefile.PL global.sym perl.h
-____________________________________________________________________________
-[ 588] By: gsar on 1998/02/25 21:46:35
- Log: integrate mainline
- Branch: win32/perl
- +> Porting/config.sh Porting/config_H
- - config_H
- !> (integrate 54 files)
-____________________________________________________________________________
-[ 587] By: gsar on 1998/02/25 19:20:26
- Log: added AS patch#8
- Branch: asperl
- ! sv.c x2p/a2py.c x2p/util.c
-____________________________________________________________________________
-[ 586] By: gsar on 1998/02/25 19:08:06
- Log: added AS patch#7
- Message-Id: <01BD40F9.CE57B210.dougl@ActiveState.com>
- Date: Tue, 24 Feb 1998 07:57:07 PST
- From: Douglas Lankshear <dougl@ActiveState.com>
- Subject: [PATCH]
-
- Here's an attempt at
- 6. MANIFEST must be updated with new file names
- 5. Mktime(), Stat() etc., rather than MKtime()/STat() etc.
- And some changes to move toward
- 1. Merge PERL_OBJECT build support into regular Makefile and makefile.mk
-
- -- Doug
- Branch: asperl
- ! MANIFEST installperl ipdir.h ipenv.h iplio.h ipmem.h ipproc.h
- ! ipsock.h ipstdio.h lib/ExtUtils/MM_Win32.pm perldir.h
- ! perlenv.h perlio.h perllio.h win32/Makefile
-____________________________________________________________________________
-[ 585] By: mbeattie on 1998/02/25 17:44:34
- Log: More compiler tweaks.
- Branch: perl
- ! Makefile.SH bytecode.pl byterun.c byterun.h ext/B/B/Asmdata.pm
-____________________________________________________________________________
-[ 584] By: mbeattie on 1998/02/25 15:36:38
- Log: Subject: [PATCH 5.004_60] dos-djgpp update
- Date: Wed, 25 Feb 1998 11:17:07 +0100
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Branch: perl
- ! djgpp/djgpp.c dosish.h hints/dos_djgpp.sh perl.c thread.h
-____________________________________________________________________________
-[ 583] By: mbeattie on 1998/02/25 15:34:48
- Log: Move find_threadsv to right bit of global.sym. Bump patchlevel to 61.
- Branch: perl
- ! global.sym patchlevel.h
-____________________________________________________________________________
-[ 582] By: mbeattie on 1998/02/25 15:28:08
- Log: Subject: Re: [PATCH 5.004_60] Fix goto-in-eval segfault (unwrapped!)
- Date: Tue, 24 Feb 1998 11:15:57 +0000
- From: Robin Houston <robin@oneworld.org>
- Branch: perl
- ! pod/perldiag.pod pp_ctl.c
-____________________________________________________________________________
-[ 581] By: mbeattie on 1998/02/25 15:27:06
- Log: Subject: [PATCH] #ifdef CAN_PROTOTYPE cleanup
- Date: 23 Feb 1998 23:36:09 +0100
- From: Gisle Aas <gisle@aas.no>
- Branch: perl
- ! doio.c miniperlmain.c op.c perl.c pp.h regcomp.c toke.c util.c
-____________________________________________________________________________
-[ 580] By: mbeattie on 1998/02/25 15:25:29
- Log: Subject: [PATCH 5.004_60] improved Test.pm
- Date: Sat, 21 Feb 1998 14:17:09 -0500
- From: Joshua Pritikin <pritikin@mindspring.com>
- Branch: perl
- ! lib/Test.pm
-____________________________________________________________________________
-[ 579] By: mbeattie on 1998/02/25 15:23:24
- Log: HP-UX hints and AIX global.sym changes (with Makefile.SH rule)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Subject: [PATCH] 5.004_60: AIX: global.sym and Makefile.SH
- Date: Sat, 21 Feb 1998 15:26:19 +0200 (EET)
- Subject: Re: your HP-UX perl patch
- Date: Mon, 23 Feb 1998 23:14:37 +0200 (EET)
- Branch: perl
- ! Makefile.SH embed.h global.sym hints/hpux.sh
-____________________________________________________________________________
-[ 578] By: mbeattie on 1998/02/25 15:18:06
- Log: Back out DB_File patch (change _553) and tweak Configure.
- Subject: ANNOUNCE: perl5.004_60 is available
- Date: Mon, 23 Feb 1998 10:47:26 -0000
- From: Paul Marquess <pmarquess@bfsec.bt.co.uk>
- Branch: perl
- ! Configure ext/DB_File/DB_File.xs
-____________________________________________________________________________
-[ 577] By: mbeattie on 1998/02/25 15:04:00
- Log: Subject: [PATCH] Cwd.pm
- Date: Fri, 20 Feb 1998 10:27:54 -0600
- From: Graham Barr <gbarr@ti.com>
- Branch: perl
- ! lib/Cwd.pm
-____________________________________________________________________________
-[ 576] By: mbeattie on 1998/02/25 15:02:57
- Log: From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Subject: [5.004_5* PATCH] Make ornaments default in Term::ReadLine
- Date: Fri, 20 Feb 1998 00:09:52 -0500 (EST)
- Subject: [PATCH 5.004_5*] Fix debugger messages and the default package
- Date: Fri, 20 Feb 1998 00:12:28 -0500 (EST)
- Subject: Re: Continued presence of segmentation violation in study_chunk()[PATCH]
- Date: Sat, 21 Feb 1998 15:32:29 -0500 (EST)
- Branch: perl
- ! lib/Term/ReadLine.pm lib/perl5db.pl regcomp.c
-____________________________________________________________________________
-[ 575] By: mbeattie on 1998/02/25 14:58:00
- Log: Subject: Re: ANNOUNCE: perl5.004_60 Configure patch is available
- Date: Tue, 24 Feb 1998 16:02:43 -0500 (EST)
- From: Andy Dougherty <doughera@lafcol.lafayette.edu>
- Branch: perl
- + Porting/config.sh Porting/config_H
- - config_H
- ! Configure INSTALL MANIFEST Makefile.SH Porting/Glossary
- ! Porting/pumpkin.pod config_h.SH ext/POSIX/POSIX.xs
- ! hints/aix.sh hints/amigaos.sh hints/bsdos.sh hints/dec_osf.sh
- ! hints/freebsd.sh hints/irix_6.sh hints/linux.sh
- ! hints/netbsd.sh hints/next_3.sh hints/next_4.sh hints/os2.sh
- ! hints/solaris_2.sh makedepend.SH perl.c perl.h pp.c pp_sys.c
- ! t/lib/thread.t t/op/nothread.t x2p/Makefile.SH
-____________________________________________________________________________
-[ 574] By: gsar on 1998/02/24 02:21:14
- Log: fix typos in sv.c
- Branch: win32/perl
- ! sv.c
-____________________________________________________________________________
-[ 573] By: mbeattie on 1998/02/23 10:03:39
- Log: Remove old Linux+threads segfault degugging kludge.
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 572] By: gsar on 1998/02/23 09:45:26
- Log: undo previous change (no added value!)
- Branch: win32/perl
- ! win32/bin/pl2bat.pl
-____________________________________________________________________________
-[ 571] By: gsar on 1998/02/23 09:18:32
- Log: fix pl2bat.pl to tolerate trailing .bat (as suggested by
- John Cavanaugh <cavanaug@sdd.hp.com>)
- Branch: win32/perl
- ! win32/bin/pl2bat.pl
-____________________________________________________________________________
-[ 570] By: gsar on 1998/02/22 04:02:15
- Log: support chown() (just a noop for now)
- Branch: win32/perl
- ! dosish.h win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 569] By: gsar on 1998/02/22 03:09:55
- Log: integrate latest win32 branch
- Branch: asperl
- +> (branch 41 files)
- !> (integrate 59 files)
-____________________________________________________________________________
-[ 568] By: gsar on 1998/02/22 02:40:56
- Log: get compiler building under win32 (needed Makefile.PL
- hacks that could be applicable to other platforms)
- Branch: win32/perl
- ! ext/B/Makefile.PL win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 567] By: gsar on 1998/02/22 01:30:19
- Log: integrate mainline
- Branch: win32/perl
- +> (branch 41 files)
- !> (integrate 46 files)
-____________________________________________________________________________
-[ 566] By: gsar on 1998/02/20 22:31:56
- Log: fix handle leak in join()
- Branch: win32/perl
- ! win32/win32thread.h
-
-----------------
-Version 5.004_60
-----------------
-
-____________________________________________________________________________
-[ 565] By: mbeattie on 1998/02/20 18:23:47
- Log: Remove compiler files from their old lib/B locations. The compiler
- now builds by default (without the byteperl executable so far) and
- seems to work at least minimally.
- Branch: perl
- - lib/B.pm lib/B/Asmdata.pm lib/B/Assembler.pm lib/B/Bblock.pm
- - lib/B/Bytecode.pm lib/B/C.pm lib/B/CC.pm lib/B/Debug.pm
- - lib/B/Deparse.pm lib/B/Disassembler.pm lib/B/Lint.pm
- - lib/B/Showlex.pm lib/B/Stackobj.pm lib/B/Terse.pm
- - lib/B/Xref.pm lib/B/assemble lib/B/cc_harness
- - lib/B/disassemble lib/B/makeliblinks lib/O.pm
- ! MANIFEST bytecode.pl
-____________________________________________________________________________
-[ 564] By: mbeattie on 1998/02/20 18:05:33
- Log: Move lib/B/... and lib/[BO].pm over to where they should be,
- under ext/B.
- Branch: perl
- +> ext/B/B.pm ext/B/B/Asmdata.pm ext/B/B/Assembler.pm
- +> ext/B/B/Bblock.pm ext/B/B/Bytecode.pm ext/B/B/C.pm
- +> ext/B/B/CC.pm ext/B/B/Debug.pm ext/B/B/Deparse.pm
- +> ext/B/B/Disassembler.pm ext/B/B/Lint.pm ext/B/B/Showlex.pm
- +> ext/B/B/Stackobj.pm ext/B/B/Terse.pm ext/B/B/Xref.pm
- +> ext/B/B/assemble ext/B/B/cc_harness ext/B/B/disassemble
- +> ext/B/B/makeliblinks ext/B/O.pm
-____________________________________________________________________________
-[ 563] By: mbeattie on 1998/02/20 17:54:58
- Log: Start getting compiler to work when built with the core.
- [Still won't work as of this change.]
- Branch: perl
- +> byterun.c byterun.h lib/B/Asmdata.pm lib/B/Assembler.pm
- +> lib/B/Bblock.pm lib/B/Bytecode.pm lib/B/C.pm lib/B/CC.pm
- +> lib/B/Debug.pm lib/B/Deparse.pm lib/B/Disassembler.pm
- +> lib/B/Lint.pm lib/B/Showlex.pm lib/B/Stackobj.pm
- +> lib/B/Terse.pm lib/B/Xref.pm
- ! MANIFEST Makefile.SH bytecode.pl ext/B/Makefile.PL
-____________________________________________________________________________
-[ 562] By: mbeattie on 1998/02/20 16:42:13
- Log: Merge perlext/Compiler/... into mainline. Some files move to
- ext/B/..., some to lib/B/..., O.pm and B.pm go in lib and some
- move to the base perl directory (e.g. headers). Will need some
- cleaning up before it builds properly, I would guess.
- Branch: perl
- +> bytecode.h bytecode.pl cc_runtime.h ext/B/B.xs
- +> ext/B/Makefile.PL ext/B/NOTES ext/B/README ext/B/TESTS
- +> ext/B/Todo ext/B/byteperl.c ext/B/ramblings/cc.notes
- +> ext/B/ramblings/curcop.runtime ext/B/ramblings/flip-flop
- +> ext/B/ramblings/magic ext/B/ramblings/reg.alloc
- +> ext/B/ramblings/runtime.porting ext/B/typemap lib/B.pm
- +> lib/B/assemble lib/B/cc_harness lib/B/disassemble
- +> lib/B/makeliblinks lib/O.pm
-____________________________________________________________________________
-[ 561] By: mbeattie on 1998/02/20 16:39:38
- Log: Win32 changes from Sarathy, tweaked slightly by me.
- Branch: perlext
- ! Compiler/B.xs Compiler/B/Asmdata.pm Compiler/B/Bytecode.pm
- ! Compiler/B/C.pm Compiler/Makefile.PL Compiler/assemble
- ! Compiler/bytecode.h Compiler/bytecode.pl Compiler/byteperl.c
- ! Compiler/byterun.c Compiler/byterun.h Compiler/cc_harness
-____________________________________________________________________________
-[ 560] By: mbeattie on 1998/02/20 15:46:15
- Log: Initialise $@ early (fixes t/lib/ph.t for threaded perl).
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 559] By: mbeattie on 1998/02/20 12:56:10
- Log: Add missing t/op/wantarray.t to MANIFEST. Bump patchlevel to 60.
- Branch: perl
- ! MANIFEST patchlevel.h
-____________________________________________________________________________
-[ 558] By: mbeattie on 1998/02/20 12:53:26
- Log: Integrate win32 branch into mainline.
- Branch: perl
- !> XSUB.h config_h.SH doio.c lib/Pod/Html.pm pp_sys.c
- !> win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- !> win32/config_H.bc win32/config_H.gc win32/config_H.vc
- !> win32/makedef.pl win32/makefile.mk win32/win32.c win32/win32.h
- !> win32/win32iop.h x2p/a2p.h
-____________________________________________________________________________
-[ 557] By: mbeattie on 1998/02/20 12:51:42
- Log: Subject: retry [PATCH] 5.004_59: the perlhist.pod etc
- Date: Thu, 19 Feb 1998 17:54:52 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! ext/Thread/Thread.pm ext/Thread/Thread/Queue.pm
- ! ext/Thread/Thread/Semaphore.pm ext/Thread/Thread/Specific.pm
- ! lib/fields.pm pod/buildtoc pod/perl.pod pod/perlhist.pod
- ! pod/perltoc.pod pod/perlvar.pod
-____________________________________________________________________________
-[ 556] By: mbeattie on 1998/02/20 12:49:54
- Log: Subject: [PATCH] installperl
- Date: Wed, 18 Feb 1998 11:51:44 -0500 (est)
- From: Norton Allen <allen@huarp.harvard.edu>
- Branch: perl
- ! installperl
-____________________________________________________________________________
-[ 555] By: mbeattie on 1998/02/20 12:49:09
- Log: Subject: [PATCH:_59] t/op/wantarray.t
- Date: Wed, 18 Feb 1998 11:19:54 -0500 (est)
- From: Norton Allen <allen@huarp.harvard.edu>
- Branch: perl
- + t/op/wantarray.t
-____________________________________________________________________________
-[ 554] By: mbeattie on 1998/02/20 12:47:44
- Log: Subject: Misprint in regcomp.c [PATCH]
- Date: Tue, 17 Feb 1998 23:54:07 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! regcomp.c
-____________________________________________________________________________
-[ 553] By: mbeattie on 1998/02/20 12:45:08
- Log: Subject: DB_File ->length does not work just after tie.
- Date: Tue, 17 Feb 1998 13:19:18 GMT
- From: Nick Ing-Simmons <nik@tiuk.ti.com>
- Branch: perl
- ! ext/DB_File/DB_File.xs
-____________________________________________________________________________
-[ 552] By: mbeattie on 1998/02/20 12:43:32
- Log: Subject: [PATCH] - perl5.005_59, update Copyright
- Date: Mon, 16 Feb 1998 20:31:06 -0500 (EST)
- From: lusol@CS4.CC.Lehigh.EDU (Stephen O. Lidie)
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 551] By: mbeattie on 1998/02/20 12:42:41
- Log: Subject: Re: for() and map() peculiarity
- Date: Mon, 16 Feb 1998 21:33:44 +0000
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Branch: perl
- ! pod/perlsyn.pod
-____________________________________________________________________________
-[ 550] By: mbeattie on 1998/02/20 12:41:53
- Log: Subject: [PATCH 5.004_59] Updates to VMS/CONFIG.VMS
- Date: Mon, 16 Feb 1998 11:46:29 -0800
- From: Dan Sugalski <sugalskd@osshe.edu>
- Branch: perl
- ! vms/config.vms
-____________________________________________________________________________
-[ 549] By: mbeattie on 1998/02/20 12:40:55
- Log: Subject: [PATCH] 5.004_59 global.sym for AIX 3.2.5
- Date: Mon, 16 Feb 1998 14:27:53 -0500 (EST)
- From: "Stephen O. Lidie" <lusol@turkey.cc.Lehigh.EDU>
- Branch: perl
- ! global.sym
-____________________________________________________________________________
-[ 548] By: mbeattie on 1998/02/20 12:39:56
- Log: Subject: [PATCH] 5.004_59: hints/irix_6.sh
- Date: Mon, 16 Feb 1998 15:44:57 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 547] By: mbeattie on 1998/02/20 12:38:58
- Log: Subject: [PATCH] perlguts update
- Date: 16 Feb 1998 11:23:53 +0100
- From: Gisle Aas <gisle@aas.no>
- Branch: perl
- ! pod/perlguts.pod
-____________________________________________________________________________
-[ 546] By: mbeattie on 1998/02/20 12:38:01
- Log: Subject: [PATCH 5.004_59] bsdos/hints.sh is wrong
- Date: Sun, 15 Feb 1998 23:56:05 -0500
- From: Irving Reid <irving@tor.securecomputing.com>
- Branch: perl
- ! hints/bsdos.sh
-____________________________________________________________________________
-[ 545] By: mbeattie on 1998/02/20 12:37:11
- Log: Subject: [PATCH] 5% speedup in an empty loop
- Date: Sun, 15 Feb 1998 17:49:46 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 544] By: mbeattie on 1998/02/20 12:36:26
- Log: Subject: [PATCH for 5.004_59] netdb_host_type and netdb_hlen_type on NeXt
- Date: Sun, 15 Feb 98 23:06:16 +0100
- From: Hans Mulder <hansm@icgroup.nl>
- Branch: perl
- ! hints/next_3.sh hints/next_4.sh
-____________________________________________________________________________
-[ 543] By: mbeattie on 1998/02/20 12:35:39
- Log: Subject: [PATCH for 5.004_59] Perl_sbrk declared inconsistently
- Date: Sun, 15 Feb 98 23:05:20 +0100
- From: Hans Mulder <hansm@icgroup.nl>
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 542] By: mbeattie on 1998/02/20 12:35:03
- Log: Subject: [PATCH for 5.004_59] "d_gethbyname" misspelled in Configure
- From: Hans Mulder <hansm@icgroup.nl>
- Date: Sun, 15 Feb 98 23:04:29 +0100
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 541] By: mbeattie on 1998/02/20 12:33:56
- Log: Subject: [PATCH for 5.004_59] NeXT doesn't need DONT_DECLARE_STD (was:
- NeXT needs DONT_DECLARE_STD)
- Date: Sun, 15 Feb 98 23:04:19 +0100
- From: Hans Mulder <hansm@icgroup.nl>
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 540] By: mbeattie on 1998/02/20 12:32:25
- Log: Subject: [PATCH] sv_check_thinkfirst macroized
- Date: 15 Feb 1998 22:00:38 +0100
- From: Gisle Aas <gisle@aas.no>
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 539] By: mbeattie on 1998/02/20 12:31:07
- Log: Subject: [PATCH 5.004_59] allow the Test::Harness to grok TODO-type tests docs
- Date: Sat, 14 Feb 1998 17:58:01 -0500
- From: Joshua Pritikin <pritikin@mindspring.com>
- Branch: perl
- + lib/Test.pm
- ! MANIFEST lib/Test/Harness.pm
-____________________________________________________________________________
-[ 538] By: mbeattie on 1998/02/20 12:24:31
- Log: Subject: [PATCH] 5.004_59: locale startup problems documentation++
- Date: Sat, 14 Feb 1998 15:40:44 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! INSTALL pod/perldiag.pod pod/perllocale.pod
-____________________________________________________________________________
-[ 537] By: mbeattie on 1998/02/20 12:23:04
- Log: Subject: [PATCH] Updated, non-wordwrapped, patch to README.VMS
- Date: Fri, 13 Feb 1998 13:38:28 -0800
- From: Dan Sugalski <sugalskd@osshe.edu>
- Branch: perl
- ! README.vms
-____________________________________________________________________________
-[ 536] By: mbeattie on 1998/02/20 12:20:29
- Log: Subject: [PATCH] 5.004_58, move intuition tests
- Date: Thu, 12 Feb 1998 17:11:05 -0600
- From: Stephen Potter <spp@psa.pencom.com>
- Branch: perl
- ! t/lib/anydbm.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t
- ! t/lib/sdbm.t t/op/array.t t/op/delete.t t/op/each.t
- ! t/op/flip.t t/op/pat.t t/op/push.t
-____________________________________________________________________________
-[ 535] By: gsar on 1998/02/19 23:07:24
- Log: applied a version of this with tabs intact
- Message-Id: <wklnv7pdf5.fsf@turangalila.harmonixmusic.com>
- Date: 19 Feb 1998 15:06:38 EST
- From: dfan@harmonixmusic.com (Dan Schmidt)
- Subject: Pod::Html bug and fix: missing </UL> in index
- Branch: win32/perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 534] By: gsar on 1998/02/19 19:40:27
- Log: Fix C<0> problem in Pod::Html
- Branch: win32/perl
- ! lib/Pod/Html.pm
-____________________________________________________________________________
-[ 533] By: gsar on 1998/02/18 18:11:08
- Log: non-debug VC builds are -O1 now (they say it works, and is
- faster)
- Branch: win32/perl
- ! win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 532] By: gsar on 1998/02/18 04:11:03
- Log: integrate nick's patch to mainline
- Branch: win32/perl
- !> pp.c
-____________________________________________________________________________
-[ 531] By: mbeattie on 1998/02/17 17:50:50
- Log: Assorted changes to the compiler
- Branch: perlext
- ! Compiler/B.pm Compiler/B.xs Compiler/B/Asmdata.pm
- ! Compiler/B/Bytecode.pm Compiler/B/C.pm Compiler/B/Debug.pm
- ! Compiler/NOTES Compiler/O.pm Compiler/bytecode.pl
- ! Compiler/byterun.c Compiler/byterun.h Compiler/typemap
-____________________________________________________________________________
-[ 530] By: gsar on 1998/02/17 01:47:35
- Log: DLLs are now ok on mingw32/gcc-2.8.0 after removing the
- FORCE_ARG_STRING() hack (that bug is fixed in gcc now). mingw32
- build passes all tests except t/lib/io_xs.t (seems to be due to
- broken tmpfile() in the CRT or import lib)
- Branch: win32/perl
- ! XSUB.h win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 529] By: gsar on 1998/02/16 23:03:31
- Log: fix mingw32 gcc 2.8.0 build (DLLs generated seem to be broken
- in this version of gcc!)
- Branch: win32/perl
- ! doio.c pp_sys.c win32/config.gc win32/makefile.mk
- ! win32/win32.c win32/win32.h win32/win32iop.h x2p/a2p.h
-____________________________________________________________________________
-[ 528] By: nick on 1998/02/16 22:13:04
- Log: Missing PUSHMARK in unshift TIEARRAY hook
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 527] By: gsar on 1998/02/15 20:59:07
- Log: integrate win32 branch
- Branch: asperl
- !> config_h.SH win32/config.bc win32/config.gc win32/config.vc
- !> win32/config_H.bc win32/config_H.gc win32/config_H.vc
- !> win32/makedef.pl
-____________________________________________________________________________
-[ 526] By: gsar on 1998/02/15 20:02:11
- Log: Fix typo: s/GETNETBYADD\b/GETNETBYADDR/
- Branch: win32/perl
- ! config_h.SH win32/config_H.bc win32/config_H.gc
- ! win32/config_H.vc
-____________________________________________________________________________
-[ 525] By: gsar on 1998/02/15 03:26:45
- Log: fix build problems due to renamed Config variables
- Branch: win32/perl
- ! win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/makedef.pl
-____________________________________________________________________________
-[ 524] By: gsar on 1998/02/14 01:00:15
- Log: bring ASPerl uptodate with mainline changes
- Branch: asperl
- +> ext/DB_File/Changes t/comp/require.t
- !> (integrate 41 files)
-____________________________________________________________________________
-[ 523] By: gsar on 1998/02/14 00:52:17
- Log: integrate mainline
- Branch: win32/perl
- !> hints/qnx.sh lib/Cwd.pm lib/ExtUtils/xsubpp patchlevel.h
- !> pp_hot.c t/op/magic.t
-____________________________________________________________________________
-[ 522] By: gsar on 1998/02/14 00:42:37
- Log: added AS patch#6
- Message-Id: <01BD3846.B29FB880.dougl@ActiveState.com>
- Date: Fri, 13 Feb 1998 06:14:51 PST
- From: Douglas Lankshear <dougl@ActiveState.com>
- Subject: [PATCH] command line build
-
- This patch is for the command line build of perl object.
- I'll merge the ipfoo.c function with win32_xxx functions next.
-
- -- Doug
- Branch: asperl
- ! ObjXSub.h ext/Opcode/Opcode.xs lib/ExtUtils/MM_Win32.pm
- ! objpp.h proto.h sv.c win32/dl_win32.xs win32/ipenv.c
- ! win32/ipstdio.c win32/makedef.pl win32/runperl.c win32/win32.h
-____________________________________________________________________________
-[ 521] By: gsar on 1998/02/14 00:14:04
- Log: added AS patch#5 (patch #4 was intentionally skipped after
- discussion)
- Branch: asperl
- ! embed.h embedvar.h global.sym globals.c hv.c interp.sym
- ! intrpvar.h op.c perl.c perl.h pp_ctl.c proto.h regcomp.c
- ! regexec.c sv.c toke.c
-____________________________________________________________________________
-[ 520] By: nick on 1998/02/13 18:15:46
- Log: Resolve ansiperl against win32
- Branch: ansiperl
- +> ext/DB_File/Changes ext/POSIX/hints/linux.pl
- +> ext/POSIX/hints/sunos_4.pl lib/Fatal.pm t/comp/require.t
- +> t/lib/ph.t
- !> (integrate 898 files)
-
-----------------
-Version 5.004_59
-----------------
-
-____________________________________________________________________________
-[ 519] By: mbeattie on 1998/02/13 17:05:37
- Log: Integrate win32 into mainline.
- Branch: perl
- ! lib/ExtUtils/xsubpp
- !> win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- !> win32/makefile.mk
-____________________________________________________________________________
-[ 518] By: mbeattie on 1998/02/13 17:01:16
- Log: Bump patchlevel.h to 59.
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 517] By: mbeattie on 1998/02/13 16:57:59
- Log: Subject: [PATCH] _58: wantarray in void context broken
- Date: Fri, 13 Feb 1998 11:24:49 -0500 (est)
- From: Norton Allen <allen@huarp.harvard.edu>
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 516] By: mbeattie on 1998/02/13 16:55:33
- Log: Subject: [PATCH] 5.004_58 QNX getcwd
- Date: Thu, 12 Feb 1998 13:40:56 -0500 (est)
- From: Norton Allen <allen@huarp.harvard.edu>
- Branch: perl
- ! hints/qnx.sh lib/Cwd.pm t/op/magic.t
-____________________________________________________________________________
-[ 515] By: gsar on 1998/02/12 18:29:52
- Log: pickup lddlflags properly for Config.pm
- Branch: win32/perl
- ! win32/Makefile win32/config.bc win32/config.gc win32/config.vc
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 514] By: gsar on 1998/02/12 18:16:09
- Log: fix xsubpp bug in SETMAGIC code
- Branch: win32/perl
- ! lib/ExtUtils/xsubpp
-____________________________________________________________________________
-[ 513] By: gsar on 1998/02/12 18:06:30
- Log: integrate mainline
- Branch: win32/perl
- +> ext/DB_File/Changes
- !> Configure MANIFEST config_h.SH ext/DB_File/DB_File.pm
- !> ext/DB_File/DB_File.xs hints/machten.sh
- !> lib/ExtUtils/Install.pm lib/Pod/Html.pm lib/Pod/Text.pm
- !> lib/perl5db.pl malloc.c pod/perldiag.pod pod/perlpod.pod
- !> pod/pod2man.PL pp_sys.c regcomp.c regexec.c scope.h sv.c
- !> t/lib/db-recno.t t/lib/filecopy.t t/op/misc.t t/op/pat.t
- !> t/op/re_tests t/pragma/locale.t
-____________________________________________________________________________
-[ 512] By: mbeattie on 1998/02/12 17:34:02
- Log: Missing WITH_THR from new deb() in ENTER/LEAVE caused builds
- with -DUSE_THREADS -DDEBUGGING to fail.
- Branch: perl
- ! scope.h
-____________________________________________________________________________
-[ 511] By: mbeattie on 1998/02/12 16:44:03
- Log: Integrate win32 into mainline
- Branch: perl
- +> t/comp/require.t
- !> MANIFEST pp_ctl.c scope.c scope.h t/op/local.t toke.c
-____________________________________________________________________________
-[ 510] By: mbeattie on 1998/02/12 16:42:26
- Log: Subject: Re: [PATCH] 5.004_58 | _04 DynaLoader.pm -> DynaLoader.pm.PL (resend)
- Date: 12 Feb 1998 14:25:55 +0100
- From: koenig@kulturbox.de (Andreas J. Koenig)
- Branch: perl
- ! lib/ExtUtils/Install.pm
-____________________________________________________________________________
-[ 509] By: mbeattie on 1998/02/12 16:40:34
- Log: Subject: Re: wrong prototype for sbrk [PATCH]
- Date: Wed, 11 Feb 1998 15:37:31 -0500 (EST)
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 508] By: mbeattie on 1998/02/12 16:36:53
- Log: Subject: [PATCH] 5.004_58 | _04: pod2*,perlpod: L<show this|man/section>
- Date: Wed, 11 Feb 1998 17:29:20 +0100
- From: Achim Bohnet <ach@mpe.mpg.de>
- Branch: perl
- ! lib/Pod/Html.pm lib/Pod/Text.pm pod/perlpod.pod pod/pod2man.PL
-____________________________________________________________________________
-[ 507] By: mbeattie on 1998/02/12 16:35:26
- Log: Subject: [PATCH] slight tweaks to hints/machten.sh
- Date: Wed, 11 Feb 1998 14:59:46 +0100
- From: Dominic Dunlop <domo@vo.lu>
- Branch: perl
- ! hints/machten.sh
-____________________________________________________________________________
-[ 506] By: mbeattie on 1998/02/12 16:28:40
- Log: Subject: DB_File 1.58 patch
- Date: Tue, 10 Feb 1998 11:23:22 +0000 (GMT)
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Branch: perl
- + ext/DB_File/Changes
- ! MANIFEST ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
- ! t/lib/db-recno.t
-____________________________________________________________________________
-[ 505] By: mbeattie on 1998/02/12 16:24:26
- Log: Subject: 5.004_5*: [PATCH] restore old behaviour of \1 in RE
- Date: Tue, 10 Feb 1998 02:57:46 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 504] By: mbeattie on 1998/02/12 16:22:46
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Subject: [PATCH] 5.004_58: the locale.t problem in IRIX
- Date: Mon, 9 Feb 1998 19:47:22 +0200 (EET)
- Subject: [PATCH] 5.004_58: reserve the POSIX regexp extensions
- Date: Tue, 10 Feb 1998 15:12:12 +0200 (EET)
- Subject: [PATCH] 5.004_58: <netdb.h> API prototype probing
- Date: Wed, 11 Feb 1998 12:50:35 +0200 (EET)
- Branch: perl
- ! Configure config_h.SH pod/perldiag.pod pp_sys.c regcomp.c
- ! t/op/misc.t t/op/pat.t t/op/re_tests t/pragma/locale.t
-____________________________________________________________________________
-[ 503] By: mbeattie on 1998/02/12 16:15:43
- Log: Subject: [PATCH] filecopy.t #3 fails on dos-djgpp
- Date: Mon, 9 Feb 1998 13:19:45 +0100
- From: Laszlo Molnar <molnarl@cdata.tvnet.hu>
- Branch: perl
- ! t/lib/filecopy.t
-____________________________________________________________________________
-[ 502] By: mbeattie on 1998/02/12 16:14:27
- Log: Assorted patches to sv.c:
- From: Gisle Aas <gisle@aas.no>
- Subject: [PATCH] sv_grow can fail for HAS_64K_LIMIT systems
- Date: 07 Feb 1998 00:21:57 +0100
- Subject: [PATCH] sv_setnv will upgrade SVt_NV to SVt_PVNV
- Date: 07 Feb 1998 00:29:45 +0100
- Subject: [PATCH] sv_upgrade() always returns TRUE
- Date: 09 Feb 1998 15:44:01 +0100
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 501] By: mbeattie on 1998/02/12 16:09:26
- Log: Fix saving of STDOUT during system() in lib/perl5db.pl:
- Subject: Perl debugger.
- Date: Fri, 6 Feb 1998 17:47:08 -0500
- From: "Jason A. Smith" <smithj4@rpi.edu>
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 500] By: gsar on 1998/02/12 03:20:55
- Log: merge another maint patch
- Message-Id: <199802102349.SAA16001@aatma.engin.umich.edu>
- Date: Tue, 10 Feb 1998 18:49:00 EST
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: Re: after an eval-ed bad require, requiring a string ref gives a SEGV
- Branch: win32/perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 499] By: gsar on 1998/02/12 03:14:39
- Log: make t/comp/require.t type xtext
- Branch: win32/perl
- ! t/comp/require.t
-____________________________________________________________________________
-[ 498] By: gsar on 1998/02/12 03:09:58
- Log: fix extra LEAVE when require fails
- Message-Id: <199802102321.SAA15346@aatma.engin.umich.edu>
- Date: Tue, 10 Feb 1998 18:21:37 EST
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: Re: evals and requires make seg-fault with bad require file
- Branch: win32/perl
- + t/comp/require.t
- ! MANIFEST pp_ctl.c scope.c scope.h toke.c
-____________________________________________________________________________
-[ 497] By: gsar on 1998/02/12 02:47:29
- Log: merge a maint patch
- Message-Id: <199802110515.AAA23700@aatma.engin.umich.edu>
- Date: Wed, 11 Feb 1998 00:15:51 EST
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: Re: "local" can crash perl-4.00[34] on Solaris-x86 & FreeBSD
- Branch: win32/perl
- ! pp_ctl.c t/op/local.t
-____________________________________________________________________________
-[ 496] By: mbeattie on 1998/02/11 13:04:50
- Log: Integrate win32 into mainline.
- Branch: perl
- !> embed.h ext/GDBM_File/typemap ext/NDBM_File/typemap
- !> ext/ODBM_File/typemap ext/SDBM_File/typemap global.sym gv.c
- !> lib/ExtUtils/typemap lib/ExtUtils/xsubpp op.c
- !> os2/OS2/PrfDB/typemap pod/perlguts.pod pod/perlobj.pod
- !> pod/perlxs.pod pod/perlxstut.pod proto.h sv.c sv.h t/op/ref.t
- !> win32/makedef.pl win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 495] By: mbeattie on 1998/02/11 13:03:59
- Log: Fix special constants in Xref.pm
- Branch: perlext
- ! Compiler/B/Xref.pm
-____________________________________________________________________________
-[ 494] By: gsar on 1998/02/10 18:26:28
- Log: fix opendir() problem on share names
- Message-Id: <199802101828.NAA10420@aatma.engin.umich.edu>
- Date: Tue, 10 Feb 1998 13:28:53 EST
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: Re: BUG: opendir and UNC names on NT
- Branch: win32/perl
- ! win32/win32.c
-____________________________________________________________________________
-[ 493] By: gsar on 1998/02/09 23:09:40
- Log: integrate win32 branch contents
- Branch: asperl
- +> ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl
- +> lib/Fatal.pm t/lib/ph.t
- ! hv.c
- !> (integrate 895 files)
-____________________________________________________________________________
-[ 492] By: gsar on 1998/02/09 07:30:19
- Log: enhancements to previous patch for XSUB OUTPUT args
- Message-Id: <199802090731.CAA04438@aatma.engin.umich.edu>
- Date: Mon, 09 Feb 1998 02:31:55 EST
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: Re: [PATCH] XSUB OUTPUT arguments and 'set' magic
- Branch: win32/perl
- ! embed.h ext/GDBM_File/typemap ext/NDBM_File/typemap
- ! ext/ODBM_File/typemap ext/SDBM_File/typemap global.sym
- ! lib/ExtUtils/typemap lib/ExtUtils/xsubpp os2/OS2/PrfDB/typemap
- ! pod/perlguts.pod pod/perlxs.pod pod/perlxstut.pod proto.h sv.c
- ! sv.h
-____________________________________________________________________________
-[ 491] By: gsar on 1998/02/09 03:00:52
- Log: don't share TARG unless -DUSE_BROKEN_PAD_RESET
- Message-Id: <199710300036.TAA01004@aatma.engin.umich.edu>
- Date: Wed, 29 Oct 1997 19:36:25 EST
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: [PATCH] Don't use broken pad_reset() (was Re: Perl bug in 5.004_03 )
- Branch: win32/perl
- ! op.c
-____________________________________________________________________________
-[ 490] By: gsar on 1998/02/09 02:30:43
- Log: fix for bugs in handling DESTROY (adjusted test numbers)
- Message-Id: <199801010030.TAA14274@aatma.engin.umich.edu>
- Subject: Re: [PERL] RFD: iterative DESTROYing of objects
- Date: Wed, 31 Dec 1997 19:30:46 -0500
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Branch: win32/perl
- ! pod/perlobj.pod sv.c t/op/ref.t
-____________________________________________________________________________
-[ 489] By: gsar on 1998/02/09 00:30:35
- Log: ansify prototype for my_safemalloc(), avoid warnings
- Branch: win32/perl
- ! sv.c
-____________________________________________________________________________
-[ 488] By: gsar on 1998/02/09 00:29:08
- Log: fix misapplied hunks in 5.004_58
- Message-Id: <199802080718.CAA18115@aatma.engin.umich.edu>
- Date: Sun, 08 Feb 1998 02:18:12 EST
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: [PATCH] fixes for test failures in 5.004_58
- Branch: win32/perl
- ! gv.c op.c
-____________________________________________________________________________
-[ 487] By: gsar on 1998/02/09 00:27:16
- Log: win32_utime() tweaks to avoid warnings
- Branch: win32/perl
- ! win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 486] By: gsar on 1998/02/07 23:45:22
- Log: integrate mainline, plus a few small win32 enhancements
- - remove Win32::GetCurrentDirectory()
- - add Win32::Sleep() for compat
- - add smarter utime() from Jan Dubois, and export it as win32_utime()
- Branch: win32/perl
- +> ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl
- +> lib/Fatal.pm t/lib/ph.t
- ! win32/makedef.pl win32/win32.c win32/win32iop.h
- !> (integrate 61 files)
-
-----------------
-Version 5.004_58
-----------------
-
-____________________________________________________________________________
-[ 485] By: mbeattie on 1998/02/06 18:11:47
- Log: Bump patchlevel to 58.
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 484] By: mbeattie on 1998/02/06 18:08:28
- Log: Fix up problem with gv.c from change 477.
- Fix up Config.pm use in t/lib/ph.t from change 478.
- Branch: perl
- ! gv.c t/lib/ph.t
-____________________________________________________________________________
-[ 483] By: mbeattie on 1998/02/06 17:34:34
- Log: Integrate win32 branch into mainline
- Branch: perl
- !> win32/win32sck.c
-____________________________________________________________________________
-[ 482] By: mbeattie on 1998/02/06 17:26:41
- Log: lib/Fatal.pm missing from repository
- Branch: perl
- + lib/Fatal.pm
-____________________________________________________________________________
-[ 481] By: mbeattie on 1998/02/06 17:24:57
- Log: Subject: [PATCH] Re: posix::strftime (core dumped)
- Date: Thu, 5 Feb 1998 13:55:23 -0500 (EST)
- From: Andy Dougherty <doughera@newton.phys.lafayette.edu>
- Branch: perl
- + ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl
- ! MANIFEST hints/linux.sh hints/sunos_4_1.sh t/lib/posix.t
-____________________________________________________________________________
-[ 480] By: mbeattie on 1998/02/06 17:19:52
- Log: x2p/str.c was missing from list of changed files in change 466
- Branch: perl
- ! x2p/str.c
-____________________________________________________________________________
-[ 479] By: mbeattie on 1998/02/06 17:16:54
- Log: Added t/lib/ph.t to MANIFEST
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 478] By: mbeattie on 1998/02/06 17:15:38
- Log: Subject: [PATCH] h2ph.PL
- Date: Thu, 5 Feb 1998 05:53:54 -0800 (EST)
- From: kstar@www.chapin.edu (Kurt D. Starsinic)
- Branch: perl
- + t/lib/ph.t
- ! utils/h2ph.PL
-____________________________________________________________________________
-[ 477] By: mbeattie on 1998/02/06 17:10:46
- Log: Subject: [PATCH] Faster gv_fetchpv() for nested packages
- Date: 04 Feb 1998 14:49:46 +0100
- From: Gisle Aas <gisle@aas.no>
- as modified by
- From: chip@atlantic.net
- Date: Wed, 4 Feb 1998 11:46:49 -0500 (EST)
- Branch: perl
- ! gv.c
-____________________________________________________________________________
-[ 476] By: mbeattie on 1998/02/06 16:47:03
- Log: From: Jarkko Hietaniemi <jhi@iki.fi>
- Subject: [PATCH] almost OK: perl 5.00457 on i386-freebsd-thread 3.0
- Date: Wed, 4 Feb 1998 12:59:47 +0200 (EET)
- Subject: Re: [PATCH] 5.004_04 and 5.004_57: Complex.pm and complex.t
- Date: Thu, 5 Feb 1998 18:08:20 +0200 (EET)
- Branch: perl
- ! hints/freebsd.sh lib/Math/Complex.pm t/lib/complex.t
-____________________________________________________________________________
-[ 475] By: mbeattie on 1998/02/06 16:44:57
- Log: Subject: [PATCH] nomemok
- Date: Mon, 2 Feb 1998 15:06:50 +0100
- From: Gisle Aas <gisle@aas.no>
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 474] By: mbeattie on 1998/02/06 16:43:46
- Log: Subject: [PATCH] Benchmark.pm: timethese corrupts $_
- Date: Sun, 1 Feb 1998 06:46:08 -0500 (EST)
- From: abigail@fnx.com
- Branch: perl
- ! lib/Benchmark.pm
-____________________________________________________________________________
-[ 473] By: mbeattie on 1998/02/06 16:42:53
- Log: Subject: [PATCH] adding the newSVpvn API function
- Date: Sat, 31 Jan 1998 06:32:42 +0100
- From: Matthias Ulrich Neeracher <neeri@iis.ee.ethz.ch>
- Branch: perl
- ! embed.h embedvar.h global.sym pod/perlguts.pod pod/perltoc.pod
- ! proto.h sv.c
-____________________________________________________________________________
-[ 472] By: mbeattie on 1998/02/06 16:35:41
- Log: Subject: Re: [PATCH] new hints/solaris2.sh (was Re: make check fails 17% of it's tests on Solaris...)
- Date: 28 Jan 1998 17:40:37 -0800
- From: Stephen Zander <srz@mckesson.com>
- Branch: perl
- ! hints/solaris_2.sh
-____________________________________________________________________________
-[ 471] By: mbeattie on 1998/02/06 16:02:57
- Log: Subject: [PATCH] Re: 5.004_04 vec() fails with 32-bit values
- Date: Thu, 15 Jan 1998 11:53:06 +0000
- From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
- Branch: perl
- ! pod/perlguts.pod pp.c t/op/vec.t
-____________________________________________________________________________
-[ 470] By: mbeattie on 1998/02/06 16:01:36
- Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Subject: 5.004_56: Patch to Tie::Hash and docs
- Date: Sun, 11 Jan 1998 20:34:05 -0500 (EST)
- Subject: 5.004_56: Patch to (?{}) quoting + cosmetic
- Date: Mon, 2 Feb 1998 01:28:46 -0500 (EST)
- Branch: perl
- ! lib/Tie/Hash.pm pod/perlfunc.pod pod/perlre.pod regcomp.c
- ! t/op/misc.t t/op/pat.t toke.c
-____________________________________________________________________________
-[ 469] By: mbeattie on 1998/02/06 15:58:31
- Log: Subject: Another Array.pm patch
- Date: Wed, 4 Feb 1998 20:37:03 +0000 (GMT)
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Branch: perl
- ! lib/Tie/Array.pm
-____________________________________________________________________________
-[ 468] By: mbeattie on 1998/02/06 15:56:28
- Log: Subject: documentation patch for 5.004_57
- Date: Wed, 4 Feb 1998 14:54:13 +0000 (GMT)
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Branch: perl
- ! lib/Tie/Array.pm
-____________________________________________________________________________
-[ 467] By: mbeattie on 1998/02/06 15:55:34
- Log: Subject: 5.004_56: patch for `use Fatal' again
- Date: Thu, 29 Jan 1998 17:04:28 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! MANIFEST pod/perldiag.pod pod/perlfunc.pod pod/perlmodlib.pod
- ! pp.c t/comp/proto.t toke.c
-____________________________________________________________________________
-[ 466] By: mbeattie on 1998/02/06 15:53:53
- Log: Subject: Newer -DLEAKTEST patch
- Date: Fri, 9 Jan 1998 17:55:09 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! ext/DB_File/DB_File.xs ext/DynaLoader/dl_next.xs
- ! ext/DynaLoader/dl_vms.xs ext/Opcode/Opcode.xs handy.h hv.c
- ! perl.c perly.c perly.c.diff perly.fixer pod/perlembed.pod
- ! pod/perlguts.pod pod/perlrun.pod pod/perltoc.pod pp_hot.c sv.c
- ! toke.c util.c vms/perly_c.vms x2p/hash.c
-____________________________________________________________________________
-[ 465] By: mbeattie on 1998/02/06 15:46:35
- Log: More Chip patches (tweaked for _5x). The final one mentioned here
- (@ARGV with -i) actually went in at change 462 but I failed to
- add it to the change description:
- Subject: [PATCH] Fix typo: "FORM{,AT}LINE"
- Date: Sun, 11 Jan 1998 19:37:17 -0500 (EST)
- Subject: [PATCH] Fix for C<@x = my @y>
- Date: Sun, 11 Jan 1998 18:12:16 -0500 (EST)
- Subject: [PATCH] Fix SEGV on C<*glob{SCALAR,ARRAY}>
- Date: Thu, 5 Feb 1998 21:30:13 -0500 (EST)
- Subject: [PATCH] Allow last() to mean last
- Date: Thu, 5 Feb 1998 21:42:57 -0500 (EST)
- Subject: [PATCH] Consider @ARGV to be plain files if inplace (-i)
- Date: Wed, 4 Feb 1998 16:04:47 -0500 (EST)
- Branch: perl
- ! op.c perly.c perly.h perly.y sv.c t/op/my.t vms/perly_c.vms
- ! vms/perly_h.vms
-____________________________________________________________________________
-[ 464] By: mbeattie on 1998/02/06 15:06:18
- Log: More Chip patches:
- Subject: [PATCH] Fix SEGV from combining caller and C<package;>
- Date: Thu, 5 Feb 1998 21:47:50 -0500 (EST)
- Subject: [PATCH] Fix line numbers after here documents in eval STRING
- Date: Thu, 5 Feb 1998 21:50:08 -0500 (EST)
- Subject: [PATCH] Make recursive lexical analysis more robust
- Date: Thu, 5 Feb 1998 21:57:02 -0500 (EST)
- Branch: perl
- ! pp_ctl.c sv.c toke.c
-____________________________________________________________________________
-[ 463] By: mbeattie on 1998/02/06 15:04:17
- Log: Some more Chip patches (tweaked to match _5x):
- Subject: [PATCH] Fix empty BLOCK
- Date: Wed, 4 Feb 1998 16:52:28 -0500 (EST)
- Subject: [PATCH] fix (\@@) proto
- Date: Thu, 5 Feb 1998 10:24:29 -0500 (EST)
- Subject: [PATCH] Cope with lack of args in Fcntl::AUTOLOAD
- Date: Thu, 5 Feb 1998 21:26:55 -0500 (EST)
- Subject: [PATCH] Don't fold string comparison under C<use locale>
- Date: Thu, 5 Feb 1998 21:46:25 -0500 (EST)
- Branch: perl
- ! ext/Fcntl/Fcntl.pm op.c t/comp/proto.t toke.c
-____________________________________________________________________________
-[ 462] By: mbeattie on 1998/02/06 14:56:30
- Log: Some Chip patches (some tweaked to match _5x source):
- From: Chip Salzenberg <salzench@nielsenmedia.com>
- Subject: [PATCH] local leakage
- Date: Tue, 3 Feb 1998 09:16:50 -0500 (EST)
- Subject: [PATCH] NULs in patterns
- Date: Wed, 4 Feb 1998 01:33:51 -0500 (EST)
- Subject: [PATCH] Configure on PerlIO
- Date: Wed, 4 Feb 1998 01:38:43 -0500 (EST)
- Subject: [PATCH] Avoid core dump on package alias
- Date: Wed, 4 Feb 1998 15:38:42 -0500 (EST)
- Subject: [PATCH] Fix name of $Foo::{'Bar::'}
- Date: Wed, 4 Feb 1998 16:37:51 -0500 (EST)
- Branch: perl
- ! Configure doio.c gv.c op.c pp_ctl.c sv.c t/op/gv.t
- ! t/op/local.t
-____________________________________________________________________________
-[ 461] By: gsar on 1998/02/04 03:34:36
- Log: support win32_select(0,0,0,msec) (winsock doesn't)
- Branch: win32/perl
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 460] By: gsar on 1998/02/04 00:44:47
- Log: bug: win32_select() must StartSockets()
- Branch: win32/perl
- ! win32/win32sck.c
-
-----------------
-Version 5.004_57
-----------------
-
-____________________________________________________________________________
-[ 459] By: mbeattie on 1998/02/03 16:00:07
- Log: Replaced two occurrences of THREADSV(find_thread_sv(...)) (order
- of execution causes core dump if threadsvp is moved). Replaced
- lvalue occurrence of AvARRAY(av) with SvPVX(av) (former does cast).
- Branch: perl
- ! av.c perl.c
-____________________________________________________________________________
-[ 458] By: mbeattie on 1998/02/03 14:40:02
- Log: Fix up MANIFEST.
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 457] By: mbeattie on 1998/02/03 13:50:23
- Log: Integrate win32 into mainline. My last integration from ansiperl
- to the mainline was a dismal failure: I did -ay but meant -at.
- This should fix things now since win32 has already integrated
- all the necessary changes from ansiperl.
- Branch: perl
- !> (integrate 111 files)
-____________________________________________________________________________
-[ 456] By: gsar on 1998/02/03 04:48:08
- Log: Fix minor problems with non USE_THREADS build. win32 branch
- now looks 5.004_57-ready.
- Branch: win32/perl
- ! thread.h win32/makedef.pl
-____________________________________________________________________________
-[ 455] By: gsar on 1998/02/03 03:45:09
- Log: integrate mainline
- Branch: win32/perl
- !> (integrate 887 files)
-____________________________________________________________________________
-[ 454] By: mbeattie on 1998/02/02 16:44:24
- Log: The new dec_osf.sh didn't work so the new glibpth and useshrplib
- defaults have been commented out for now.
- Branch: perl
- ! hints/dec_osf.sh
-____________________________________________________________________________
-[ 453] By: mbeattie on 1998/02/02 15:51:39
- Log: Introduced thr->threadsvp and THREADSV() for faster per-thread
- variables. Moved threadnum to a per-interpreter variable and
- made dTHR and lock/unlock of sv_mutex bypass the get/lock unless
- more than one thread may be running. Minor tweaks to Thread.xs.
- Branch: perl
- ! dosish.h embedvar.h ext/Thread/Thread.xs interp.sym intrpvar.h
- ! op.c perl.c perl.h pp.c pp_ctl.c scope.c sv.c thrdvar.h
- ! thread.h util.c
-____________________________________________________________________________
-[ 452] By: gsar on 1998/02/02 04:56:50
- Log: remove totally egregious s/\\dir// in File::Find
- Branch: win32/perl
- ! lib/File/Find.pm
-____________________________________________________________________________
-[ 451] By: gsar on 1998/02/01 22:20:20
- Log: added AS patch#3
- Message-Id: <01BD2EF2.53433A40.dougl@ActiveState.com>
- Date: Sun, 01 Feb 1998 09:18:13 PST
- From: Douglas Lankshear <dougl@ActiveState.com>
- To: "'Gurusamy Sarathy'" <gsar@umich.edu>
-
- Here's an additional diff against //depot/asperl
-
- The field name mg_length was changed back to mg_len
- The function name mg_len was change to mg_length
-
- The need for sort_mutex removed thanks to the code derived
- from Tom Horsley's work.
-
- -- Doug
- Branch: asperl
- + XSLock.h
- ! ObjXSub.h XSUB.h av.c embedvar.h ext/DynaLoader/dlutils.c
- ! globals.c ipstdio.h mg.c mg.h objpp.h perl.c perl.h perlio.h
- ! perlvars.h perly.c pp.c pp_ctl.c pp_hot.c proto.h regexec.c
- ! scope.c scope.h sv.c toke.c universal.c util.c
- ! win32/dl_win32.xs win32/iplio.c win32/ipstdio.c
- ! win32/perlobj.def win32/runperl.c
-____________________________________________________________________________
-[ 450] By: gsar on 1998/01/30 23:43:57
- Log: various tweaks
- - add new functions to proto.h
- - fix up makefile.mk for $(OBJECT)
- Branch: asperl
- ! pp_ctl.c proto.h win32/makefile.mk
-____________________________________________________________________________
-[ 449] By: gsar on 1998/01/30 21:23:15
- Log: fix up missing patches from AS patch#2
- Branch: asperl
- ! perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h
- ! pp_ctl.c proto.h
-____________________________________________________________________________
-[ 448] By: gsar on 1998/01/30 18:23:17
- Log: fix htonlx typo
- Branch: win32/perl
- ! perlsock.h
-____________________________________________________________________________
-[ 447] By: mbeattie on 1998/01/30 16:03:49
- Log: Fix up MANIFEST to add missing files
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 446] By: mbeattie on 1998/01/30 12:34:55
- Log: Bump patchlevel to 57.
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 445] By: gsar on 1998/01/30 10:44:38
- Log: initial merge of latest win32 branch into ASPerl
- Branch: asperl
- +> lib/Tie/Array.pm pod/perlhist.pod t/lib/tie-push.t
- +> t/lib/tie-stdarray.t t/lib/tie-stdpush.t t/op/tiearray.t
- +> win32/bin/perlglob.pl
- !> (integrate 141 files)
-____________________________________________________________________________
-[ 444] By: gsar on 1998/01/30 09:25:58
- Log: goofed branching, redo asperl branch
- Branch: asperl
- ! perl.h
-____________________________________________________________________________
-[ 443] By: gsar on 1998/01/30 09:23:36
- Log: added AS patch#2
- Branch: asperl
- + ObjXSub.h ipdir.h ipenv.h iplio.h ipmem.h ipproc.h ipsock.h
- + ipstdio.h objpp.h win32/ipdir.c win32/ipenv.c win32/iplio.c
- + win32/ipmem.c win32/ipproc.c win32/ipsock.c win32/ipstdio.c
- + win32/ipstdiowin.h win32/perlobj.def
- ! EXTERN.h XSUB.h cv.h doio.c dosish.h dump.c embedvar.h
- ! globals.c gv.c hv.c intrpvar.h malloc.c mg.c mg.h op.c op.h
- ! opcode.h perl.c perl.h perldir.h perlenv.h perlio.h perllio.h
- ! perlmem.h perlproc.h perlsock.h perlvars.h perly.c pp.c pp.h
- ! pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c regcomp.h
- ! regexec.c run.c scope.c scope.h sv.c sv.h thread.h toke.c
- ! universal.c util.c vms/vms.c win32/Makefile win32/config_H.bc
- ! win32/config_H.vc win32/dl_win32.xs win32/include/sys/socket.h
- ! win32/makedef.pl win32/runperl.c win32/win32iop.h
-____________________________________________________________________________
-[ 441] By: gsar on 1998/01/30 08:54:19
- Log: Created new branch from win32@396, added AS patch#1
- Branch: asperl
- + doio.c malloc.c perl.c perl.h perldir.h perlenv.h perllio.h
- + perlmem.h perlproc.h perlsock.h pp.c pp_hot.c pp_sys.c
- + regcomp.c scope.h sv.c toke.c util.c
- +> (branch 915 files)
-____________________________________________________________________________
-[ 440] By: gsar on 1998/01/30 04:43:23
- Log: integrate winansi
- Branch: win32/perl
- +> pod/perlhist.pod
- !> MANIFEST av.c hv.c op.c perlsock.h pp_ctl.c pp_sys.c scope.c
- !> util.c
-____________________________________________________________________________
-[ 439] By: mbeattie on 1998/01/27 15:31:53
- Log: Integrate ansi branch into mainline (resolve -ay).
- Branch: perl
- +> lib/Tie/Array.pm perldir.h perlenv.h perllio.h perlmem.h
- +> perlproc.h perlsock.h pod/perlhist.pod t/lib/tie-push.t
- +> t/lib/tie-stdarray.t t/lib/tie-stdpush.t t/op/tiearray.t
- +> win32/bin/perlglob.pl
- ! op.c
- !> (integrate 868 files)
-____________________________________________________________________________
-[ 438] By: nick on 1998/01/24 12:02:34
- Log: Gisle's av_unshift tweak, two small patches from chip
- and check for NULL in hv_delete in case '~' and tie magic
- are present
- Branch: ansiperl
- ! av.c hv.c op.c pp_ctl.c scope.c
-____________________________________________________________________________
-[ 437] By: nick on 1998/01/24 10:37:56
- Log: Get PerlXxx_yyyy() macro stuff to _compile_ on Solaris.
- Ugh! ...
- Macros were unsuitable for declaring the functions, extra () round
- parameters removed - non-function forms of PerlXxx_yyyy() need to
- add () themselves.
- Need to include perlmem.h in util.c (at least) if not using Perl's malloc.
- Branch: ansiperl
- ! perlsock.h pp_sys.c util.c
-____________________________________________________________________________
-[ 436] By: nick on 1998/01/24 10:03:03
- Log: Integrate win32 into ansiperl
- Branch: ansiperl
- +> perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h
- +> win32/bin/perlglob.pl
- !> (integrate 38 files)
-____________________________________________________________________________
-[ 435] By: nick on 1998/01/24 09:47:49
- Log: Add perlhist.pod
- Branch: ansiperl
- + pod/perlhist.pod
- ! MANIFEST
-____________________________________________________________________________
-[ 434] By: gsar on 1998/01/19 05:01:47
- Log: s/PerlENV/PerlEnv/ just to be consistent
- Branch: win32/perl
- ! malloc.c perl.c perlenv.h regcomp.c toke.c util.c
-____________________________________________________________________________
-[ 433] By: gsar on 1998/01/19 04:52:18
- Log: foo() -> PerlGroup_foo() patch from ActiveState
- Branch: win32/perl
- + perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h
- ! doio.c malloc.c perl.c perl.h pp.c pp_hot.c pp_sys.c regcomp.c
- ! scope.h sv.c toke.c util.c
-____________________________________________________________________________
-[ 432] By: gsar on 1998/01/19 04:42:26
- Log: integrate mainline
- Branch: win32/perl
- !> pod/perlfunc.pod
-____________________________________________________________________________
-[ 431] By: gsar on 1998/01/19 04:40:04
- Log: integrate changes in winansi
- Branch: win32/perl
- +> lib/Tie/Array.pm t/lib/tie-push.t t/lib/tie-stdarray.t
- +> t/lib/tie-stdpush.t t/op/tiearray.t
- !> (integrate 98 files)
-____________________________________________________________________________
-[ 430] By: gsar on 1998/01/19 04:10:43
- Log: Fix autovivification problems with XSUB OUTPUT args
- Message-Id: <199801190409.XAA26710@aatma.engin.umich.edu>
- Date: Sun, 18 Jan 1998 23:09:07 EST
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Subject: [PATCH] XSUB OUTPUT arguments and 'set' magic
- Branch: win32/perl
- ! ext/GDBM_File/typemap ext/NDBM_File/typemap
- ! ext/ODBM_File/typemap ext/SDBM_File/typemap
- ! lib/ExtUtils/typemap os2/OS2/PrfDB/typemap pod/perlguts.pod
- ! pod/perlxs.pod pod/perlxstut.pod sv.c sv.h win32/win32.h
-____________________________________________________________________________
-[ 429] By: nick on 1998/01/17 21:01:50
- Log: Subject: [PATCH] 5.004_56 threaded and "CONFIG key 'exe_ext' does not exist in Config.pm"
- Date: Thu, 25 Dec 1997 13:39:15 -0500
- From: Spider Boardman <spider@Orb.Nashua.NH.US>
- To: perl5-porters@perl.org
-
- It turns out that the potential for the "CONFIG key 'exe_ext'
- does not exist in Config.pm" problem has been around for a while,
- in the definition of SvTRUE(). It's just that non-gcc compilers
- are more or less being built as CRIPPLED_CC when USE_THREADS is
- defined (even if they can inline things). The inline macro for
- SvTRUE works with tied hashes and the EXISTS method, and the
- functional version (sv_true in 5.004_56, or SvTRUE in 5.004_04)
- does not, because it adds an excess mg_get() which replaces the
- EXISTS result with a FETCH result.
- Branch: ansiperl
- ! sv.c
-____________________________________________________________________________
-[ 428] By: nick on 1998/01/17 20:59:11
- Log: From: Robin Barker <rmb1@cise.npl.co.uk>
- Date: Fri, 19 Dec 97 17:19:09 GMT
- Message-Id: <26260.9712191719@lightning.cise.npl.co.uk>
- Branch: ansiperl
- ! doio.c sv.c toke.c util.c
-____________________________________________________________________________
-[ 427] By: nick on 1998/01/17 12:01:53
- Log: Permit tie ?foo,$object
- tidy up dead #ifdef ORIGINAL_TIE)
- Remove 'P' magic from hash, before adding new one in dbm_open like tie does.
- Branch: ansiperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 426] By: nick on 1998/01/15 18:06:36
- Log: First working TIEARRAY and other misc tie fixes
- Branch: ansiperl
- ! MANIFEST pp.c pp_hot.c t/op/tiearray.t
-____________________________________________________________________________
-[ 425] By: nick on 1998/01/14 21:56:40
- Log: Not working yet - split problems ...
- Branch: ansiperl
- ! pp.c t/lib/thread.t t/op/tiearray.t
-____________________________________________________________________________
-[ 424] By: nick on 1998/01/14 18:49:25
- Log: TIEARRAY updates - almost works ...
- Branch: ansiperl
- + t/lib/tie-push.t t/lib/tie-stdarray.t t/lib/tie-stdpush.t
- ! MANIFEST av.c av.h ext/DB_File/DB_File.pm lib/Tie/Array.pm
- ! mg.c pod/perltie.pod pp.c pp_hot.c pp_sys.c scope.c
- ! t/op/avhv.t t/op/push.t t/op/tiearray.t
-____________________________________________________________________________
-[ 423] By: gsar on 1998/01/14 00:13:16
- Log: fix MakeMaker installbin problem
- Message-Id: <199801070016.TAA17766@aatma.engin.umich.edu>
- Subject: Re: can't modify message with HTML-Stream, v.1.42
- Date: Tue, 06 Jan 1998 19:16:35 -0500
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Branch: win32/perl
- ! lib/ExtUtils/MM_Unix.pm
-____________________________________________________________________________
-[ 422] By: gsar on 1998/01/13 23:53:02
- Log: add archname to *sitearch in config.{b,g,v}c
- Branch: win32/perl
- ! win32/config.bc win32/config.gc win32/config.vc
-____________________________________________________________________________
-[ 421] By: gsar on 1998/01/13 23:15:14
- Log: set $ENV{PERL5LIB} in t/harness (so child perlglob.bat sees it)
- Branch: win32/perl
- ! t/harness
-____________________________________________________________________________
-[ 420] By: nick on 1998/01/13 22:55:02
- Log: tiearray tweaks
- Branch: ansiperl
- ! av.c pp_sys.c t/op/nothread.t t/op/tiearray.t
-____________________________________________________________________________
-[ 419] By: nick on 1998/01/13 21:27:33
- Log: Skeleton Tie::Array
- Branch: ansiperl
- + lib/Tie/Array.pm
-____________________________________________________________________________
-[ 418] By: nick on 1998/01/13 20:52:38
- Log: tie array changes to core and tests
- Branch: ansiperl
- + t/op/tiearray.t
- ! MANIFEST av.c av.h deb.c embed.h ext/DB_File/DB_File.pm
- ! global.sym gv.c mg.c op.c perl.c perl.h pp.c pp.h pp_ctl.c
- ! pp_hot.c proto.h sv.c toke.c universal.c util.c
-____________________________________________________________________________
-[ 417] By: gsar on 1998/01/13 20:49:52
- Log: fix perlglob.bat warnings by splitting it from File::DosGlob
- Branch: win32/perl
- + win32/bin/perlglob.pl
- ! MANIFEST README.win32 lib/File/DosGlob.pm win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 416] By: gsar on 1998/01/13 02:46:53
- Log: various tweaks to build support (NOTE: meant for 5.004_57)
- - build and install x2p
- - fix installperl warnings on win32
- - `make install` now does puts the archlibs in right places
- - makefiles don't default to USE_THREADS anymore
- - sync config.{b,g,v}c
- - sync makefile.mk -> Makefile
- Branch: win32/perl
- ! installperl win32/Makefile win32/config.bc win32/config.gc
- ! win32/config.vc win32/config_sh.PL win32/makefile.mk x2p/a2p.h
- ! x2p/a2py.c
-____________________________________________________________________________
-[ 415] By: nick on 1998/01/11 16:54:26
- Log: Integrate win32 into ansiperl
- Branch: ansiperl
- !> Configure hints/dec_osf.sh hv.c lib/Getopt/Long.pm lib/blib.pm
- !> lib/newgetopt.pl perl.h perl_exp.SH pp_ctl.c pp_hot.c pp_sys.c
- !> proto.h regcomp.h regexec.c t/op/re_tests t/pragma/locale.t
- !> utils/perldoc.PL vms/config.vms vms/descrip.mms
- !> vms/gen_shrfls.pl vms/genconfig.pl vms/perly_c.vms vms/vms.c
- !> vms/vmsish.h x2p/s2p.PL
-____________________________________________________________________________
-[ 414] By: nick on 1998/01/11 15:13:49
- Log: Integratye mainline -> ansiperl
- Branch: ansiperl
- !> (integrate 64 files)
-____________________________________________________________________________
-[ 413] By: mbeattie on 1998/01/09 12:57:58
- Log: Add missing blank line in pod/perlfunc.pod.
- Branch: perl
- ! pod/perlfunc.pod
-____________________________________________________________________________
-[ 412] By: gsar on 1998/01/08 20:54:31
- Log: change#398 breaks ENV_IS_CASELESS, fix it
- Branch: win32/perl
- ! hv.c
-____________________________________________________________________________
-[ 411] By: gsar on 1998/01/08 18:33:58
- Log: Integrate mainline
- Branch: win32/perl
- !> Configure hints/dec_osf.sh hv.c lib/Getopt/Long.pm lib/blib.pm
- !> lib/newgetopt.pl perl.h perl_exp.SH pp_ctl.c pp_hot.c pp_sys.c
- !> proto.h regcomp.h regexec.c t/op/re_tests t/pragma/locale.t
- !> utils/perldoc.PL vms/config.vms vms/descrip.mms
- !> vms/gen_shrfls.pl vms/genconfig.pl vms/perly_c.vms vms/vms.c
- !> vms/vmsish.h x2p/s2p.PL
-____________________________________________________________________________
-[ 410] By: mbeattie on 1998/01/08 16:06:22
- Log: Fix thinko in t/pragma/locale.t:
- Subject: [PATCH] _04 or _56: locale.t
- Date: Sun, 4 Jan 1998 23:48:44 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! t/pragma/locale.t
-____________________________________________________________________________
-[ 409] By: mbeattie on 1998/01/08 16:05:09
- Log: Use Tom Horley's qsort for sorting:
- Subject: Re: [PATCH for 5.004_56] Re: op/sort.t hangs under Solaris 2.5
- Date: Fri, 02 Jan 1998 19:33:24 -0500 (EST)
- From: Hans Mulder <hansm@icgned.nl>
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 408] By: mbeattie on 1998/01/08 16:01:57
- Log: Make s2p not use cpp:
- Subject: [PATCH for 5.004_56] s2p shouldn't use cpp
- Date: Mon, 29 Dec 1997 19:38:18 -0500 (EST)
- From: Hans Mulder <hansm@icgned.nl>
- Branch: perl
- ! x2p/s2p.PL
-____________________________________________________________________________
-[ 407] By: mbeattie on 1998/01/08 15:57:31
- Log: DG/UX tweaks to perl.h:
- Subject: [PATCH] _56 on dgux without threads
- Date: Sat, 20 Dec 1997 23:01:40 -0500
- From: Roderick Schertler <roderick@argon.org>
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 406] By: mbeattie on 1998/01/08 15:56:02
- Log: Configure and hints/dec_osf.sh changes for Digital UNIX:
- Subject: [PATCH] perl5.004_56 NOT OK on alpha-dec_osf-thread (Digital UNIX X5.0-13)
- Date: Sat, 20 Dec 1997 02:30:01 -0500
- From: Spider Boardman <spider@web.zk3.dec.com>
- Branch: perl
- ! Configure hints/dec_osf.sh
-____________________________________________________________________________
-[ 405] By: mbeattie on 1998/01/08 15:53:40
- Log: Missing "" in Configure echo for gethbadd_addr_type.
- Branch: perl
- ! Configure
-____________________________________________________________________________
-[ 404] By: mbeattie on 1998/01/08 13:04:48
- Log: print/printf/... over-eager mg_find for glob magic:
- Subject: [PATCH] fix inefficient checks for TIEHANDLE
- Date: Wed, 07 Jan 1998 20:06:05 -0500
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Branch: perl
- ! pp_hot.c pp_sys.c
-____________________________________________________________________________
-[ 403] By: mbeattie on 1998/01/08 12:56:31
- Log: Assorted VMS patches (mostly VMS makefile update for new headers):
- Subject: [PATCH] VMS update for 5.004_56
- Date: Sat, 03 Jan 1998 03:54:29 -0500 (EST)
- From: Charles Bailey <bailey@newman.upenn.edu>
- Branch: perl
- ! lib/blib.pm proto.h regcomp.h vms/config.vms vms/descrip.mms
- ! vms/gen_shrfls.pl vms/genconfig.pl vms/perly_c.vms vms/vms.c
- ! vms/vmsish.h
-____________________________________________________________________________
-[ 402] By: mbeattie on 1998/01/08 12:46:15
- Log: Fix utils/perldoc.PL for dos-djgpp:
- Subject: 5.004_56: perldoc.PL dos-djgpp patches
- Date: Tue, 6 Jan 1998 18:14:59 +0100
- From: Molnar Laszlo <molnarl@cdata.tvnet.hu>
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 401] By: mbeattie on 1998/01/08 12:40:14
- Log: Version 2.13 of GetoptLong:
- Subject: Re: ANNOUNCE: perl 5.004_56 is available
- Date: 06 Jan 1998 16:21:45 +0100
- From: JVromans@Squirrel.nl (Johan Vromans)
- Branch: perl
- ! lib/Getopt/Long.pm lib/newgetopt.pl
-____________________________________________________________________________
-[ 400] By: mbeattie on 1998/01/08 12:28:08
- Log: Fix variable export and threading configuration for AIX:
- Subject: [PATCH] 5.004_56: AIX 4.1.5.0: sans et avec threads
- Date: Tue, 23 Dec 1997 15:39:12 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! Configure perl_exp.SH
-____________________________________________________________________________
-[ 399] By: mbeattie on 1998/01/08 12:25:38
- Log: Regexp fix: (?>a+)b doesn't match aaab:
- Subject: Re: Regexp [PATCH] 5.004_56 (?>...)
- Date: Fri, 19 Dec 1997 16:02:50 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! regexec.c t/op/re_tests
-____________________________________________________________________________
-[ 398] By: mbeattie on 1998/01/08 12:23:41
- Log: Fix hv_delete for 'm'-magic. Based on following patch, modified
- to cope with ENV_IS_CASELESS:
- Subject: [perl5.004_56] [PATCH] hv_delete and 'm' magic
- Date: Fri, 19 Dec 1997 11:31:36 -0500
- From: Owen Taylor <owt1@cornell.edu>
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 397] By: mbeattie on 1998/01/08 12:10:29
- Log: Integrate win32 branch into mainline.
- Branch: perl
- !> (integrate 41 files)
-____________________________________________________________________________
-[ 396] By: gsar on 1998/01/07 19:12:27
- Log: tweak case-insensitive ENV implementation
- Branch: win32/perl
- ! hv.c
-____________________________________________________________________________
-[ 395] By: nick on 1998/01/07 18:40:55
- Log: Integrate win32 branch
- Branch: ansiperl
- !> (integrate 31 files)
-____________________________________________________________________________
-[ 394] By: gsar on 1998/01/05 19:17:40
- Log: Allow $ENV{PERL5SHELL} to contain switches etc., and document
- the fact
- Branch: win32/perl
- ! pod/perlrun.pod win32/win32.c
-____________________________________________________________________________
-[ 393] By: gsar on 1998/01/05 05:43:33
- Log: Support case-tolerant %ENV
- - underlying system calls see the case-as-supplied by user
- - added tests to verify addition/deletion/enumeration case-tolerance
- - hv.c touched, but changes are fully conditional on -DENV_IS_CASELESS,
- which is default on win32 now
- Branch: win32/perl
- ! hv.c t/op/magic.t win32/win32.h
-____________________________________________________________________________
-[ 392] By: gsar on 1998/01/04 17:55:19
- Log: Add a tweaked version of:
- Message-Id: <199801040630.AA29298@metronet.com>
- Date: Sun, 04 Jan 1998 00:30:57 CST
- From: Tye McQueen <tye@metronet.com>
- Subject: New patch for $^E==GetLastError() under Win32
- Branch: win32/perl
- ! doio.c lib/dumpvar.pl lib/perl5db.pl mg.c perl.h
- ! pod/perlfunc.pod pod/perlvar.pod util.c win32/makedef.pl
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 391] By: gsar on 1998/01/04 07:59:44
- Log: Various win32 fixes
- - support spawn via system(&P_NOWAIT,...) like OS2
- - support wait() and waitpid()
- - s/GetCurrentDirectory/GetCwd/, long-named XS to be removed
- - support -lfoo properly in ExtUtils::Liblist
- - fix outdated info about Win32 support in perlfaq2
- - fix win32 bug in perldoc that causes spurious warnings
- - regularize global function/variable names yet more
- - fix bug in do_aspawn() (it was always invoking shell, instead of
- almost never)
- - implement and export win32_wait()
- - stub version of USE_RTL_THREAD_API
- Branch: win32/perl
- ! README.win32 dosish.h lib/Cwd.pm lib/ExtUtils/Liblist.pm
- ! pod/perlfaq2.pod pp_sys.c util.c utils/perldoc.PL
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/config_h.PL win32/perllib.c win32/win32.c win32/win32.h
- ! win32/win32iop.h win32/win32sck.c win32/win32thread.c
- ! win32/win32thread.h
-____________________________________________________________________________
-[ 390] By: gsar on 1997/12/30 21:00:28
- Log: Fix $ENV{Path} in FindBin.pm
- Branch: win32/perl
- ! lib/FindBin.pm
-____________________________________________________________________________
-[ 389] By: nick on 1997/12/29 10:33:23
- Log: Resolve ansiperl against win32
- Branch: ansiperl
- !> (integrate 105 files)
-____________________________________________________________________________
-[ 388] By: gsar on 1997/12/24 04:59:28
- Log: make $? Unix (and ActiveWare) compatible
- Branch: win32/perl
- ! README.win32 win32/win32.c
-____________________________________________________________________________
-[ 387] By: gsar on 1997/12/24 04:21:30
- Log: support ioctl() on sockets (does what ioctlsocket() does) to make
- non-blocking IO on sockets possible
- Branch: win32/perl
- ! README.win32 dosish.h win32/makedef.pl win32/win32.c
- ! win32/win32iop.h win32/win32sck.c
-____________________________________________________________________________
-[ 386] By: gsar on 1997/12/24 03:10:55
- Log: support getlogin()
- Branch: win32/perl
- ! README.win32 win32/config.bc win32/config.gc win32/config.vc
- ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 385] By: gsar on 1997/12/24 02:24:59
- Log: add support for crypt() via user-supplied des_fcrypt() source or library.
- Update README.win32.
- Branch: win32/perl
- ! README.win32 perl.h win32/Makefile win32/makedef.pl
- ! win32/makefile.mk win32/win32.c win32/win32.h win32/win32iop.h
-____________________________________________________________________________
-[ 384] By: gsar on 1997/12/24 02:22:42
- Log: tweak op.c to avoid warning
- Branch: win32/perl
- ! op.c
-____________________________________________________________________________
-[ 383] By: gsar on 1997/12/23 21:12:42
- Log: Trivial bugfix#3 from local repository
- Message-Id: <199712061100.GAA14864@aatma.engin.umich.edu>
- Subject: Re: Assigning result of pop scrambles unrelated reference
- Date: Sat, 06 Dec 1997 06:00:45 -0500
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Branch: win32/perl
- ! sv.c
-____________________________________________________________________________
-[ 382] By: gsar on 1997/12/23 21:09:32
- Log: Trivial bugfix#2 from local repository
- Message-Id: <199712061025.FAA14396@aatma.engin.umich.edu>
- Subject: Re: eval of sub gives spurious "uninitialised" warning
- Date: Sat, 06 Dec 1997 05:25:07 -0500
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Branch: win32/perl
- ! op.c pod/perldelta.pod pod/perlfunc.pod t/op/eval.t
-____________________________________________________________________________
-[ 381] By: gsar on 1997/12/23 21:01:04
- Log: Trivial bugfix#1 from local repository
- Message-Id: <199711282326.SAA15090@aatma.engin.umich.edu>
- Subject: [PATCH] Re: [5.004_04 BUG] bless broke scoping?
- Date: Fri, 28 Nov 1997 18:26:52 -0500
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Branch: win32/perl
- ! scope.c
-____________________________________________________________________________
-[ 380] By: gsar on 1997/12/18 15:10:23
- Log: Integrate mainline
- Branch: win32/perl
- +> README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c
- +> djgpp/djgppsed.sh djgpp/fixpmain hints/dos_djgpp.sh
- +> os2/os2.sym os2/os2thread.h
- !> (integrate 77 files)
-
-----------------
-Version 5.004_56
-----------------
-
-____________________________________________________________________________
-[ 379] By: mbeattie on 1997/12/18 13:28:35
- Log: Integrate ansi @364,@366 into mainline.
- Branch: perl
- !> lib/ExtUtils/MakeMaker.pm miniperlmain.c perl.h
-____________________________________________________________________________
-[ 378] By: mbeattie on 1997/12/18 13:20:15
- Log: Add a few missing files to MANIFEST
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 377] By: mbeattie on 1997/12/18 13:00:16
- Log: Bump patchlevel to 56.
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 376] By: nick on 1997/12/18 01:32:12
- Log: Resolve against mainline
- Branch: ansiperl
- +> README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c
- +> djgpp/djgppsed.sh djgpp/fixpmain hints/dos_djgpp.sh
- +> os2/os2.sym os2/os2thread.h
- !> (integrate 74 files)
-____________________________________________________________________________
-[ 375] By: nick on 1997/12/18 01:06:15
- Log: Resolve against Win32
- Branch: ansiperl
- !> Configure README.threads config_h.SH doop.c embed.h
- !> ext/DynaLoader/dl_aix.xs global.sym hints/aix.sh
- !> hints/irix_6.sh op.c op.h perl.h perlvars.h pp_hot.c pp_sys.c
- !> sv.c sv.h thread.h util.c
-____________________________________________________________________________
-[ 374] By: mbeattie on 1997/12/17 14:44:26
- Log: Lots of VMS changes. vms/gen_shrfls.pl (which parses header files)
- needs rewriting now that we use perlvars.h and foovar.h:
- Subject: [PATCH] 5.004_54 under VMS (fwd)
- Date: Wed, 26 Nov 1997 12:32:09 -0400 (EDT)
- From: Charles Bailey <BAILEY@newman.upenn.edu>
- Branch: perl
- ! dosish.h handy.h intrpvar.h os2/os2ish.h perl.c perl.h
- ! plan9/plan9ish.h pp.c proto.h sv.c t/lib/thread.t
- ! t/lib/timelocal.t t/op/nothread.t taint.c thrdvar.h toke.c
- ! unixish.h vms/config.vms vms/descrip.mms vms/fndvers.com
- ! vms/gen_shrfls.pl vms/genconfig.pl vms/perly_c.vms
- ! vms/test.com vms/vms.c vms/vms_yfix.pl vms/vmsish.h
-____________________________________________________________________________
-[ 373] By: mbeattie on 1997/12/17 14:10:50
- Log: Major changes to the DOS/djgpp port (including threading):
- Subject: Re: dos-djgpp port not in perl 5.004_54
- Date: Fri, 21 Nov 1997 10:58:26 +0100
- From: Molnar Laszlo <molnarl@cdata.tvnet.hu>
- Branch: perl
- + README.dos djgpp/config.over djgpp/configure.bat djgpp/djgpp.c
- + djgpp/djgppsed.sh djgpp/fixpmain hints/dos_djgpp.sh
- ! Configure MANIFEST Makefile.SH doio.c dosish.h
- ! ext/POSIX/POSIX.xs installhtml installperl lib/AutoSplit.pm
- ! lib/Cwd.pm lib/ExtUtils/Install.pm lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/Manifest.pm lib/File/Basename.pm lib/File/Find.pm
- ! lib/File/Path.pm lib/FindBin.pm lib/Pod/Html.pm
- ! lib/Pod/Text.pm lib/Term/Cap.pm lib/perl5db.pl makedepend.SH
- ! mg.c perl.c pod/pod2man.PL pp_hot.c t/io/fs.t t/lib/anydbm.t
- ! t/lib/filehand.t t/lib/gdbm.t t/lib/io_sel.t t/lib/io_tell.t
- ! t/lib/sdbm.t t/lib/thread.t t/op/magic.t t/op/stat.t
- ! t/op/sysio.t t/op/taint.t utils/perldoc.PL
-____________________________________________________________________________
-[ 372] By: mbeattie on 1997/12/17 13:18:34
- Log: Upgrade DB_File to 1.56:
- Subject: DB_File-1.56 for _55
- Date: Tue, 16 Dec 1997 22:25:29 +0000 (GMT)
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Branch: perl
- ! Configure ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
- ! ext/DB_File/Makefile.PL ext/DB_File/typemap t/lib/db-btree.t
-____________________________________________________________________________
-[ 371] By: mbeattie on 1997/12/17 12:02:03
- Log: Threading patches for OS/2 (missing files taken from previous patch):
- Subject: Re: 5.004_55: OS/2 patches again
- Date: Sat, 13 Dec 1997 18:09:15 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- + os2/os2.sym os2/os2thread.h
- ! MANIFEST hints/os2.sh os2/Changes os2/Makefile.SHs
- ! os2/OS2/PrfDB/PrfDB.xs os2/OS2/REXX/REXX.xs os2/os2.c
- ! os2/os2ish.h perl.h
-____________________________________________________________________________
-[ 370] By: mbeattie on 1997/12/17 11:01:34
- Log: Add OS2 to list for DONT_DECLARE_STD in perl.h:
- Subject: Re: 5.004_55: OS/2 patches again
- Date: Sat, 13 Dec 1997 18:05:55 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 369] By: mbeattie on 1997/12/17 10:59:40
- Log: Fix typo in compiler B/C.pm.
- Branch: perlext
- ! Compiler/B/C.pm
-____________________________________________________________________________
-[ 368] By: mbeattie on 1997/12/17 10:58:35
- Log: Allow "perldoc -F filename":
- Subject: 5.004_55: Patch to perldoc
- Date: Thu, 11 Dec 1997 19:37:00 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! utils/perldoc.PL
-____________________________________________________________________________
-[ 367] By: mbeattie on 1997/12/17 10:54:47
- Log: Fix not-reached warning for pp_threadsv.
- Branch: perl
- ! pp.c
-____________________________________________________________________________
-[ 366] By: nick on 1997/12/14 16:06:24
- Log: Fix typo in Ilya's patch :-(
- Branch: ansiperl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 365] By: nick on 1997/12/14 15:30:25
- Log: #undef new PERLVARIC macro in appropriate places
- Branch: ansiperl
- ! miniperlmain.c perl.h
-____________________________________________________________________________
-[ 364] By: nick on 1997/12/14 15:04:36
- Log: Ilya's MakeMaker (empty makefile) patch
- Branch: ansiperl
- ! lib/ExtUtils/MakeMaker.pm
-____________________________________________________________________________
-[ 363] By: gsar on 1997/12/13 05:57:13
- Log: Integrate mainline. Builds and passes (Borland).
- Branch: win32/perl
- !> Configure README.threads config_h.SH doop.c embed.h
- !> ext/DynaLoader/dl_aix.xs global.sym hints/aix.sh
- !> hints/irix_6.sh op.c op.h perl.h perlvars.h pp_hot.c pp_sys.c
- !> sv.c sv.h thread.h util.c
-____________________________________________________________________________
-[ 362] By: nick on 1997/12/13 02:53:03
- Log: Resolve ansiperl against mainline
- Branch: ansiperl
- !> (integrate 92 files)
-____________________________________________________________________________
-[ 361] By: mbeattie on 1997/12/12 16:20:38
- Log: pp_print and pp_prtf handling of tied file handles used EXTEND
- instead of MEXTEND leading to core dumps. This fix needs
- propagating back to the maintenance branch.
- Branch: perl
- ! pp_hot.c pp_sys.c
-____________________________________________________________________________
-[ 360] By: mbeattie on 1997/12/11 15:45:56
- Log: Add missing patch to op.c that didn't come across with win32 merge.
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 359] By: mbeattie on 1997/12/11 11:54:41
- Log: Stop tr/// from writing to target when only counting.
- Branch: perl
- ! doop.c op.c op.h
-____________________________________________________________________________
-[ 358] By: mbeattie on 1997/12/10 18:36:26
- Log: Fix char*/unsigned char* clashes in util.c:fbm_instr and remove
- a few extraneous trailing semicolons in perlvars.h.
- Branch: perl
- ! perlvars.h util.c
-____________________________________________________________________________
-[ 357] By: mbeattie on 1997/12/10 18:33:53
- Log: Start overhauling compiler. It was working at least minimally
- right up until the final tweak of B.xs to add threadsv_names
- at which point building it provokes a seg fault in perl while
- doing the xsubpp :-(.
- Branch: perl
- ! op.h util.c
- Branch: perlext
- ! Compiler/B.pm Compiler/B.xs Compiler/B/Asmdata.pm
- ! Compiler/B/C.pm Compiler/B/CC.pm Compiler/Makefile.PL
- ! Compiler/bytecode.pl Compiler/byteperl.c Compiler/byterun.c
- ! Compiler/byterun.h Compiler/cc_harness Compiler/cc_runtime.h
- ! Compiler/ccop.c Compiler/ccop.h Compiler/test_harness
- ! Compiler/test_harness_cc
-____________________________________________________________________________
-[ 356] By: mbeattie on 1997/12/10 13:43:32
- Log: Fix perl_os_thread typedef for pthreads. Tweak SvTAINT so that
- sv_setfoo functions go back to not needing dTHR. Fix Configure
- to check for already-existing -thread on archname and to check
- better for d_pthread_created_joinable.
- Branch: perl
- ! Configure perl.h sv.c sv.h thread.h
-____________________________________________________________________________
-[ 355] By: mbeattie on 1997/12/10 10:53:58
- Log: Minor fix/speedup to util.c:fbm_instr:
- Subject: 5.004_55: Minor regexp patch
- Date: Fri, 5 Dec 1997 05:09:54 -0500 (EST)
- From: Ilya Zakharevich <ilya@MATH.OHIO-STATE.EDU>
- Branch: perl
- ! util.c
-____________________________________________________________________________
-[ 354] By: mbeattie on 1997/12/10 10:41:25
- Log: Patches for IRIX, AIX and some generic stuff:
- Subject: [PATCH] _55: Mostly AIX stuff but also IRIX and generic
- Date: Sat, 29 Nov 1997 08:35:30 -0800 (PST)
- From: Jarkko Hietaniemi <jarkko.hietaniemi@research.nokia.com>
- (checked/ignored a few rejects; tweaked wording).
- Branch: perl
- ! Configure README.threads config_h.SH embed.h
- ! ext/DynaLoader/dl_aix.xs global.sym hints/aix.sh
- ! hints/irix_6.sh
-____________________________________________________________________________
-[ 353] By: mbeattie on 1997/12/10 10:10:19
- Log: Integrate win32 back into mainline (trivial).
- Branch: perl
- +> embedvar.h intrpvar.h perlvars.h thrdvar.h win32/config.gc
- +> win32/config_H.gc
- !> (integrate 36 files)
-____________________________________________________________________________
-[ 352] By: nick on 1997/12/09 17:36:45
- Log: Resolve win32 - Sarathy's tweak.
- Branch: ansiperl
- !> win32/makedef.pl
-____________________________________________________________________________
-[ 351] By: gsar on 1997/12/08 06:13:04
- Log: re-add PERLVARI?C? change that somehow went missing in makedef.pl
- Branch: win32/perl
- ! win32/makedef.pl
-____________________________________________________________________________
-[ 350] By: nick on 1997/12/05 00:56:03
- Log: Resolve ansiperl against win32
- Branch: ansiperl
- - win32/makegcc.mk
- !> embed.h embed.pl embedvar.h global.sym miniperlmain.c perl.h
- !> perlvars.h win32/Makefile win32/config.gc win32/makedef.pl
- !> win32/makefile.mk win32/perllib.c win32/win32.h
-____________________________________________________________________________
-[ 349] By: gsar on 1997/12/02 07:28:23
- Log: Revert to keeping (some) constant strings as globals
- Branch: win32/perl
- ! embed.h embed.pl embedvar.h global.sym miniperlmain.c perl.h
- ! perlvars.h win32/makedef.pl win32/perllib.c
-____________________________________________________________________________
-[ 348] By: gsar on 1997/12/02 05:38:06
- Log: makegcc.mk merged into makefile.mk, so makegcc.mk is gone.
- Other minor fixes. Now is a good time to get the changes in win32 branch.
- Branch: win32/perl
- - win32/makegcc.mk
- ! win32/Makefile win32/config.gc win32/makefile.mk win32/win32.h
-____________________________________________________________________________
-[ 347] By: gsar on 1997/12/02 03:32:55
- Log: Integrate winansi again. Result builds and passes all tests on all
- three compilers.
- Branch: win32/perl
- !> lib/ExtUtils/MM_Win32.pm win32/config.gc win32/makefile.mk
- !> win32/makegcc.mk win32/win32.h
-____________________________________________________________________________
-[ 346] By: gsar on 1997/12/02 03:28:23
- Log: various hacks to get mingw32 to build. Sync Makefile with makefile.mk.
- makegcc.mk to be merged into makefile.mk soon.
- Branch: win32/perl
- ! lib/ExtUtils/MM_Win32.pm win32/Makefile win32/config.gc
- ! win32/makedef.pl win32/makefile.mk win32/makegcc.mk
- ! win32/win32.h
-____________________________________________________________________________
-[ 345] By: nick on 1997/12/02 01:57:17
- Log: Add a 4th step (yes FOUR) to dll build process for gcc.
- Now runs again...
- Branch: ansiperl
- ! lib/ExtUtils/MM_Win32.pm
-____________________________________________________________________________
-[ 344] By: nick on 1997/12/02 01:11:16
- Log: Sarathy's patch
- Branch: ansiperl
- ! lib/ExtUtils/MM_Win32.pm win32/config.gc win32/makefile.mk
- ! win32/makegcc.mk win32/win32.h
-____________________________________________________________________________
-[ 343] By: gsar on 1997/12/01 04:37:06
- Log: Reverse integrate to get all of Nick's changes over at winansi (win32/perl/*
- is identical to ansiperl/* now)
- Branch: win32/perl
- +> embedvar.h intrpvar.h perlvars.h thrdvar.h
- !> (integrate 34 files)
-____________________________________________________________________________
-[ 342] By: nick on 1997/12/01 04:01:57
- Log: Builds and passes all tests with gcc on Win32 - phew!
- Branch: ansiperl
- ! embed.h embedvar.h ext/Opcode/Opcode.xs global.sym perl.h
- ! proto.h util.c win32/makedef.pl
-____________________________________________________________________________
-[ 341] By: nick on 1997/12/01 02:54:29
- Log: Create a struct for all perls globals (as an option)
- Mainly for Mingw32 which cannot import data.
- Now only Opcode tests fail (op_desc/op_name not
- handled yet stuff)
- Branch: ansiperl
- ! EXTERN.h embed.h embed.pl embedvar.h ext/Thread/Thread.xs
- ! global.sym miniperlmain.c perl.c perl.h perlvars.h pp_hot.c
- ! proto.h run.c util.c win32/Makefile win32/makedef.pl
- ! win32/makegcc.mk win32/perllib.c win32/win32.c win32/win32.h
- ! win32/win32iop.h win32/win32thread.c
-____________________________________________________________________________
-[ 340] By: nick on 1997/11/30 20:21:10
- Log: Fixup exports in non -DDEBUGGING case
- Branch: ansiperl
- ! win32/makedef.pl
-____________________________________________________________________________
-[ 339] By: nick on 1997/11/30 20:10:04
- Log: Disable hard-coded -DDEBUGGING
- Branch: ansiperl
- ! win32/config_h.PL
-____________________________________________________________________________
-[ 338] By: nick on 1997/11/30 20:00:19
- Log: embed.pl now reads *var*.h to do its stuff.
- Split generated embed.h into two - new embedvar.h
- is #included when 'op' etc. will not mess up proto.h etc.
- Removed #define foo (thr->Tfoo) from thread.h
- Added some 'missing' symbols to global.sym, removed
- those in the *var*.h files
- Has build all MULTIPLICITY/USE_THREADS options on win32
- with VC++ (and passed tests), but not with exactly this set
- of files.
- Branch: ansiperl
- + embedvar.h
- ! embed.h embed.pl global.sym interp.sym intrpvar.h perl.h
- ! perlvars.h regcomp.c thrdvar.h thread.h win32/Makefile
- ! win32/makedef.pl
-____________________________________________________________________________
-[ 337] By: nick on 1997/11/29 23:55:31
- Log: Globals and structs via macros - part 1 of N
- - introduce perlvars.h intrpvar.h and thrdvar.h
- - change perl.h and thread.h to include them with
- appropriate macros defined
- - result is status-quo but with macros
- - next step is to tweak embed.* to capitalize on
- new easy-to-find info.
- Branch: ansiperl
- + intrpvar.h perlvars.h thrdvar.h
- ! perl.h thread.h win32/Makefile
-____________________________________________________________________________
-[ 336] By: nick on 1997/11/29 19:13:55
- Log: VC++ default to threaded
- Branch: ansiperl
- ! win32/Makefile
-____________________________________________________________________________
-[ 335] By: nick on 1997/11/29 18:38:26
- Log: Avoid __declspec(thread) by default, for both scratch
- return areas and THR stuff. Use struct thread intern instead.
- Branch: ansiperl
- ! win32/win32.c win32/win32.h win32/win32sck.c
- ! win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 334] By: nick on 1997/11/29 17:49:04
- Log: Non-threaded build fix
- Branch: ansiperl
- ! win32/win32thread.c
-____________________________________________________________________________
-[ 333] By: nick on 1997/11/29 17:29:07
- Log: Sort out malloc_mutex for perl's malloc
- Remove BINCOMPAT3 from embed.pl
- Add dependancy to CORE_H for PERL95_OBJ
- Branch: ansiperl
- ! dosish.h embed.h embed.pl global.sym perl.h win32/Makefile
- ! win32/win32.c
-____________________________________________________________________________
-[ 332] By: nick on 1997/11/29 16:21:01
- Log: Integrate win32 into ansiperl
- Branch: ansiperl
- !> README.threads hints/irix_6.sh lib/Test/Harness.pm
- !> lib/perl5db.pl malloc.c miniperlmain.c perl.h sv.c t/TEST
- !> t/lib/anydbm.t t/lib/db-btree.t t/lib/db-hash.t
- !> t/lib/db-recno.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t
- !> t/lib/safe2.t t/lib/sdbm.t t/op/pat.t t/op/taint.t
- !> win32/perllib.c
-____________________________________________________________________________
-[ 331] By: nick on 1997/11/29 01:35:45
- Log: GCC + Threads on Win32 - best gcc results yet
- Branch: ansiperl
- ! XSUB.h perl.h thread.h win32/makedef.pl win32/makegcc.mk
- ! win32/win32.h win32/win32iop.h win32/win32thread.c
- ! win32/win32thread.h
-____________________________________________________________________________
-[ 330] By: nick on 1997/11/28 23:05:08
- Log: Un-botch gcc workround
- Branch: ansiperl
- ! XSUB.h
-____________________________________________________________________________
-[ 329] By: nick on 1997/11/28 22:39:39
- Log: Builds completely with Mingw32, dynamic loaded extensions
- don't work yet - suspect __declspec() non-implemented issues.
- Branch: ansiperl
- ! XSUB.h lib/ExtUtils/Command.pm lib/ExtUtils/MM_Win32.pm
- ! lib/ExtUtils/Mksymlists.pm win32/config.gc win32/makegcc.mk
- ! win32/runperl.c win32/win32.c win32/win32iop.h
-____________________________________________________________________________
-[ 328] By: gsar on 1997/11/28 05:48:15
- Log: integrate winansi.
- Branch: win32/perl
- +> win32/config.gc win32/config_H.gc win32/makegcc.mk
- ! perl.h
- !> dosish.h hv.c win32/dl_win32.xs win32/include/sys/socket.h
- !> win32/makedef.pl win32/makefile.mk win32/runperl.c
- !> win32/win32.c win32/win32.h win32/win32iop.h win32/win32sck.c
-____________________________________________________________________________
-[ 327] By: gsar on 1997/11/28 05:38:48
- Log: Integrate mainline.
- Branch: win32/perl
- !> README.threads hints/irix_6.sh lib/Test/Harness.pm
- !> lib/perl5db.pl malloc.c miniperlmain.c sv.c t/TEST
- !> t/lib/anydbm.t t/lib/db-btree.t t/lib/db-hash.t
- !> t/lib/db-recno.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t
- !> t/lib/safe2.t t/lib/sdbm.t t/op/pat.t t/op/taint.t
- !> win32/perllib.c
-____________________________________________________________________________
-[ 326] By: nick on 1997/11/27 19:13:36
- Log: GCC builds perl.dll and perl.exe on Win32
- Branch: ansiperl
- ! win32/makedef.pl win32/makegcc.mk
-____________________________________________________________________________
-[ 325] By: nick on 1997/11/27 17:46:30
- Log: Add files and tweak others to get 'native' Mingw32 gcc port as
- far as building miniperl and perl.dll (but not import lib yet)
- Seems to lack popen()/pclose() and fcloseall() and fflushall().
- Also only CRTDLL not MCRTDLL so threading is probably not
- possible yet.
- Had to mess with win32iop.h's placement as we need __attribute__
- to get STDCALL, and #define of printf messes up proto.h
- Branch: ansiperl
- + win32/config.gc win32/config_H.gc win32/makegcc.mk
- ! dosish.h perl.h win32/dl_win32.xs win32/include/sys/socket.h
- ! win32/makefile.mk win32/runperl.c win32/win32.c win32/win32.h
- ! win32/win32iop.h win32/win32sck.c
-____________________________________________________________________________
-[ 324] By: mbeattie on 1997/11/27 17:08:06
- Log: Give dire warnings about the IRIX 6.2 kernel panic.
- Branch: perl
- ! README.threads hints/irix_6.sh
-____________________________________________________________________________
-[ 323] By: mbeattie on 1997/11/27 16:57:33
- Log: Fix prototypes of sv_vsetpvfn and sv_vcatpvfn:
- Subject: Re: ANNOUNCE: perl 5.004_55 is available
- Date: 27 Nov 1997 17:18:53 +0100
- From: koenig@kulturbox.de (Andreas J. Koenig)
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 322] By: mbeattie on 1997/11/27 16:12:15
- Log: Integrate win32 branch back into mainline.
- Branch: perl
- !> (integrate 42 files)
-____________________________________________________________________________
-[ 321] By: mbeattie on 1997/11/27 15:06:36
- Log: Fix t/lib/safe2.t for SunOS 4.1.3:
- Subject: Re: ANNOUNCE: perl 5.004_55 is available
- Date: Thu, 27 Nov 1997 10:46:42 +0000 (GMT)
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Branch: perl
- ! t/lib/safe2.t
-____________________________________________________________________________
-[ 320] By: mbeattie on 1997/11/27 15:02:59
- Log: Fix MYMALLOC (wrong #define in malloc.c):
- Subject: 5.004_55: MYMALLOC completely busted
- Date: Thu, 27 Nov 1997 01:08:16 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! malloc.c
-____________________________________________________________________________
-[ 319] By: mbeattie on 1997/11/27 15:01:37
- Log: Fix newSVrv so sv_setref_foo work better:
- Subject: [PATCH] [5.004_55] newSVrv (again)
- Date: Thu, 27 Nov 1997 00:25:50 -0500
- From: Owen Taylor <owt1@cornell.edu>
- Branch: perl
- ! sv.c
-____________________________________________________________________________
-[ 318] By: mbeattie on 1997/11/27 14:59:03
- Log: Output skipped test information in test suite:
- Subject: 5.004_55: Making test harness platform_aware
- Date: Wed, 26 Nov 1997 17:16:55 -0500 (EST)
- Date: Wed, 26 Nov 1997 17:16:55 -0500 (EST)
- Branch: perl
- ! lib/Test/Harness.pm t/TEST t/lib/anydbm.t t/lib/db-btree.t
- ! t/lib/db-hash.t t/lib/db-recno.t t/lib/gdbm.t t/lib/ndbm.t
- ! t/lib/odbm.t t/lib/sdbm.t t/op/taint.t
-____________________________________________________________________________
-[ 317] By: mbeattie on 1997/11/27 14:55:15
- Log: Add 'W'atch command to debugger and improve help:
- Subject: 5.004_55: Debugger patch again
- Date: Wed, 26 Nov 1997 17:05:57 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! lib/perl5db.pl
-____________________________________________________________________________
-[ 316] By: mbeattie on 1997/11/27 14:52:44
- Log: Stop double initialisation of malloc_mutex:
- Subject: 5.004_55: Double initialiazation of malloc_mutex
- Date: Wed, 26 Nov 1997 16:51:43 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! miniperlmain.c win32/perllib.c
-____________________________________________________________________________
-[ 315] By: mbeattie on 1997/11/27 14:48:58
- Log: Fix PVLV case in sv_setsv (plus tests in op/pat.t).
- Branch: perl
- ! sv.c t/op/pat.t
-____________________________________________________________________________
-[ 314] By: nick on 1997/11/27 01:03:19
- Log: Merge win32 and ansiperl branches post _55 tweaks from Sarathy.
- Branch: ansiperl
- !> (integrate 897 files)
-____________________________________________________________________________
-[ 313] By: gsar on 1997/11/26 03:20:55
- Log: merge win32-aware installperl in ansiperl branch.
- Branch: win32/perl
- !> installperl
-____________________________________________________________________________
-[ 312] By: gsar on 1997/11/26 01:50:37
- Log: Fix for C<sort 'foo'...> bug:
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Message-Id: <199711011946.OAA18882@aatma.engin.umich.edu>
- Subject: [PATCH] Re: Sort grammar bug
- Date: Sat, 01 Nov 1997 14:46:35 -0500
- ------
- From: Hugo van der Sanden <hv@crypt.compulink.co.uk>
- Message-Id: <199711021247.MAA01743@crypt.compulink.co.uk>
- Subject: Re: Sort grammar bug
- Date: Sun, 02 Nov 1997 12:47:51 +0000
- Branch: win32/perl
- ! t/op/sort.t toke.c
-____________________________________________________________________________
-[ 311] By: nick on 1997/11/26 01:42:50
- Log: Win32-ize installperl
- Branch: ansiperl
- ! installperl
-____________________________________________________________________________
-[ 310] By: gsar on 1997/11/26 01:36:39
- Log: Another trivial patch:
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Message-Id: <199710300245.VAA04244@aatma.engin.umich.edu>
- Subject: [PATCH] Re: Why doesn't XSRETURN have STMT_START/STMT_END brackets?
- Date: Wed, 29 Oct 1997 21:45:26 -0500
- Branch: win32/perl
- ! XSUB.h
-____________________________________________________________________________
-[ 309] By: nick on 1997/11/26 01:33:32
- Log: Fixup _55 for Win32:
- Missed thread :-> perl_thread changes
- Two #define THR (not the same)
- K&R style func in hv.c
- Branch: ansiperl
- ! hv.c win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 308] By: gsar on 1997/11/26 01:30:21
- Log: Sync yet another patch (this one manually edited):
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Message-Id: <199710290251.VAA14362@aatma.engin.umich.edu>
- Subject: [PATCH] Re: local($@) gives core dump
- Date: Tue, 28 Oct 1997 21:51:25 -0500
- Branch: win32/perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 307] By: gsar on 1997/11/26 01:22:10
- Log: Sync another change from local repository.
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Message-Id: <199710290316.WAA15888@aatma.engin.umich.edu>
- Subject: Re: do_postponed breaks with multiple interpreters
- Date: Tue, 28 Oct 1997 22:16:13 -0500
- Branch: win32/perl
- ! op.c
-____________________________________________________________________________
-[ 306] By: gsar on 1997/11/26 01:17:46
- Log: Sync a change from local repository.
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Message-Id: <199710290106.UAA11485@aatma.engin.umich.edu>
- Subject: [PATCH] Re: Core dump from using sockets w/ system or open(pipe) or "`"
- Date: Tue, 28 Oct 1997 20:06:06 -0500
- Branch: win32/perl
- ! mg.c
-____________________________________________________________________________
-[ 305] By: nick on 1997/11/26 00:50:10
- Log: Integrate mainline as of _55
- Branch: ansiperl
- +> emacs/ptags
- !> (integrate 36 files)
-____________________________________________________________________________
-[ 304] By: gsar on 1997/11/26 00:27:57
- Log: Various changes to make it build cleanly and pass all tests:
- - needed to run `perl embed.pl`
- - use PERL_CORE instead of PERLDLL in places that do mean PERL_CORE
- - fix prototypes for a few declarations (Borland is finally quiet)
- - move declaration of Mymalloc etc to perl.h (since win32 and other
- ports may #define malloc themselves, to let extensions bind to
- the version that perl used)
- - move struct reg_data into a public header file, since it is
- referenced in a public datatype
- - win32 makefile fixes
- - fix remaining s/thread/perl_thread/
- Branch: win32/perl
- ! EXTERN.h embed.h ext/DynaLoader/dlutils.c
- ! ext/SDBM_File/sdbm/sdbm.h hv.c perl.h proto.h regcomp.h
- ! regexp.h win32/Makefile win32/dl_win32.xs win32/makefile.mk
- ! win32/win32.h win32/win32iop.h win32/win32thread.c
-____________________________________________________________________________
-[ 303] By: gsar on 1997/11/25 20:57:31
- Log: Fixup the places where the automatic merge got it wrong.
- Previous change (#302) was just a normal integration--ignore the
- "reverse" in there.
- Branch: win32/perl
- ! op.c perl.h
-____________________________________________________________________________
-[ 302] By: gsar on 1997/11/25 20:32:12
- Log: reverse integrate mainline
- Branch: win32/perl
- +> emacs/ptags
- !> (integrate 896 files)
-
-----------------
-Version 5.004_55
-----------------
-
-____________________________________________________________________________
-[ 301] By: mbeattie on 1997/11/25 17:59:53
- Log: Fix minor thinkos in hv.c and pp_ctl.c. This is 5.004_55.
- Branch: perl
- ! hv.c pp_ctl.c
-____________________________________________________________________________
-[ 300] By: mbeattie on 1997/11/25 16:29:36
- Log: Add t/avhv.t to MANIFEST and bump patchlevel.h to 55.
- Branch: perl
- ! MANIFEST patchlevel.h
-____________________________________________________________________________
-[ 299] By: mbeattie on 1997/11/25 15:59:16
- Log: Move malloc_mutex initialisation/destruction:
- Subject: patch to 5.004_54 for pthreads with Perl's malloc
- From: ilya@math.ohio-state.edu (Ilya Zakharevich)
- Branch: perl
- ! malloc.c os2/os2.c os2/os2ish.h perl.c perl.h plan9/plan9ish.h
- ! unixish.h vms/vmsish.h
-____________________________________________________________________________
-[ 298] By: mbeattie on 1997/11/25 15:49:22
- Log: Make hv_ functions cope better with 'm'-magic:
- Subject: [5.004_54] Another neglected patch
- Date: Fri, 21 Nov 1997 22:28:17 -0500
- From: Owen Taylor <owt1@cornell.edu>
- Branch: perl
- ! hv.c
-____________________________________________________________________________
-[ 297] By: mbeattie on 1997/11/25 15:47:36
- Log: Fix typo in Thread.xs.
- Branch: perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 296] By: mbeattie on 1997/11/25 15:42:07
- Log: Integrate from ansi branch to mainline.
- Branch: perl
- !> (integrate 890 files)
-____________________________________________________________________________
-[ 295] By: mbeattie on 1997/11/25 14:29:31
- Log: AIX patch for DynaLoader/dl_aix.xs and hints/aix.sh:
- Subject: Re: _54 on AIX
- Date: Tue, 25 Nov 1997 00:49:52 -0800 (PST)
- From: Jarkko Hietaniemi <jarkko.hietaniemi@research.nokia.com>
- Branch: perl
- ! ext/DynaLoader/dl_aix.xs
-____________________________________________________________________________
-[ 294] By: mbeattie on 1997/11/25 14:29:10
- Log: AIX patch for hints/aix.sh:
- Subject: Re: _54 on AIX
- Date: Tue, 25 Nov 1997 00:49:52 -0800 (PST)
- From: Jarkko Hietaniemi <jarkko.hietaniemi@research.nokia.com>
- Branch: perl
- ! hints/aix.sh
-____________________________________________________________________________
-[ 291] By: mbeattie on 1997/11/25 14:17:05
- Log: Fix scalar dereference of threadsv variables (e.g. $$_).
- Branch: perl
- ! op.c op.h
-____________________________________________________________________________
-[ 290] By: mbeattie on 1997/11/25 14:16:29
- Log: AIX patch (including Configure support for {sched,pthread}_yield,
- pthread initial detach state, renaming perl_thread to perl_os_thread
- and struct thread to struct perl_thread):
- Subject: Re: _54 on AIX
- Date: Thu, 20 Nov 1997 06:10:51 -0800 (PST)
- From: Jarkko Hietaniemi <jarkko.hietaniemi@research.nokia.com>
- Branch: perl
- ! Configure config_h.SH cv.h ext/DB_File/DB_File.xs
- ! ext/Thread/Makefile.PL ext/Thread/Thread.pm
- ! ext/Thread/Thread.xs fakethr.h hints/aix.sh perl.c perl.h pp.h
- ! proto.h sv.h thread.h util.c win32/win32thread.c
- ! win32/win32thread.h
-____________________________________________________________________________
-[ 289] By: mbeattie on 1997/11/25 12:33:02
- Log: Rename perl_thread to perl_os_thread.
- Branch: perl
- ! fakethr.h thread.h util.c win32/win32thread.h
-____________________________________________________________________________
-[ 288] By: mbeattie on 1997/11/25 12:27:35
- Log: Remove bincompat3 support:
- Subject: Re: ANNOUNCE: perl5.004_54 is available
- Date: Wed, 19 Nov 1997 08:07:10 -0800 (PST)
- From: Jarkko Hietaniemi <jarkko.hietaniemi@research.nokia.com>
- Branch: perl
- ! Configure INSTALL embed.h global.sym malloc.c
-____________________________________________________________________________
-[ 287] By: mbeattie on 1997/11/25 12:23:50
- Log: Emacs/tags update:
- Subject: Emacs/tags update for 5.004_54
- Date: Fri, 21 Nov 1997 15:02:09 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- + emacs/ptags
- ! MANIFEST Makefile.SH emacs/cperl-mode.el
-____________________________________________________________________________
-[ 286] By: nick on 1997/11/23 23:03:56
- Log: Add $$_ test
- Branch: ansiperl
- ! t/op/ref.t
-____________________________________________________________________________
-[ 285] By: gsar on 1997/11/23 08:26:00
- Log: Initial reverse integration of winansi branch.
- Branch: win32/perl
- !> (integrate 50 files)
-____________________________________________________________________________
-[ 284] By: gsar on 1997/11/23 07:32:24
- Log: Add to docs about the BEGIN { shift } feature. Make the change
- yet simpler using CvUNIQUE(compcv) instead of subline (Chip's idea).
- Branch: win32/perl
- ! op.c perly.c perly.y pod/perlfunc.pod vms/perly_c.vms
-____________________________________________________________________________
-[ 283] By: nick on 1997/11/22 21:29:30
- Log: Duplicate perl_threadsv
- Branch: ansiperl
- ! global.sym
-____________________________________________________________________________
-[ 282] By: nick on 1997/11/22 21:18:11
- Log: Munge pseudo-Configure stuff to add -thread to archname as
- Malcolm seems to think that is way to test for threads.
- Update @INC stuffing hackery to have traditional @INC
- search order archlib, privlib, sitearch, site.
- Branch: ansiperl
- ! t/lib/english.t win32/config.bc win32/config_H.bc
- ! win32/config_H.vc win32/config_h.PL win32/config_sh.PL
- ! win32/makefile.mk win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 281] By: nick on 1997/11/22 19:28:21
- Log: Builds and passes all but english.t on win32 VC++
- Branch: ansiperl
- ! global.sym pp_ctl.c win32/Makefile win32/config.vc
- ! win32/config_H.vc win32/win32thread.h
-____________________________________________________________________________
-[ 280] By: nick on 1997/11/22 18:10:50
- Log: ansiperl builds with Borland C++ again
- Branch: ansiperl
- ! pp_ctl.c regcomp.c regcomp.h regexec.c toke.c util.c
- ! win32/config.bc win32/config_H.bc win32/perlglob.c
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 279] By: nick on 1997/11/22 16:42:51
- Log: Resolve ansiperl against mainline
- Branch: ansiperl
- !> embed.h ext/Thread/Thread.xs global.sym op.c op.h perl.c
- !> perl.h pp.c pp_ctl.c pp_hot.c proto.h scope.c scope.h
- !> t/lib/english.t thread.h toke.c util.c
-____________________________________________________________________________
-[ 278] By: nick on 1997/11/22 16:30:27
- Log: Resolve ansiperl against win32
- Branch: ansiperl
- !> (integrate 55 files)
-____________________________________________________________________________
-[ 277] By: gsar on 1997/11/22 09:48:02
- Log: - shift() inside BEGIN|END|INIT now shifts @ARGV instead of @_
- - added a test for the above
- - fixed up perly.c.diff and vms/perl_c.vms for above and added the
- ansification hunks
- Branch: win32/perl
- ! op.c perly.c perly.c.diff perly.y t/op/misc.t vms/perly_c.vms
-____________________________________________________________________________
-[ 276] By: gsar on 1997/11/22 07:24:01
- Log: Generic change in win32 branch: don't just turn on CRIPPLED_CC
- when USE_THREADS. GCC for instance, can do without macros that use
- globals. Instead, selectively re#define only those macros
- that use globals to their functional equivalents. Tests 100% on
- Solaris/gcc (after `chmod +x t/op/nothread.t t/lib/thread.t` (hint,hint)).
- Branch: win32/perl
- ! perl.h sv.h
-____________________________________________________________________________
-[ 275] By: gsar on 1997/11/22 05:27:04
- Log: Integrate mainline.
- Branch: win32/perl
- +> ext/Thread/die.t ext/Thread/die2.t t/op/avhv.t
- - lib/Class/Fields.pm lib/ISA.pm
- !> (integrate 41 files)
-____________________________________________________________________________
-[ 274] By: mbeattie on 1997/11/21 18:28:22
- Log: $_ is now per-thread (rather a lot of changes). Only tested under
- *-linux-thread at the moment.
- Branch: perl
- ! embed.h ext/Thread/Thread.xs global.sym op.c op.h perl.c
- ! perl.h pp.c pp_ctl.c pp_hot.c proto.h scope.c scope.h
- ! t/lib/english.t thread.h toke.c util.c
-____________________________________________________________________________
-[ 273] By: mbeattie on 1997/11/21 10:31:29
- Log: Filter patch to toke.c:
- Subject: Tiny core patch for source filters
- Date: Thu, 20 Nov 1997 23:12:09 +0000 (GMT)
- From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
- Branch: perl
- ! toke.c
-____________________________________________________________________________
-[ 272] By: nick on 1997/11/21 00:54:43
- Log: Basic integrate of lastest perl into ansiperl
- Branch: ansiperl
- +> ext/Thread/die.t ext/Thread/die2.t t/op/avhv.t
- - lib/Class/Fields.pm lib/ISA.pm
- ! win32/win32.c win32/win32.h
- !> (integrate 57 files)
-____________________________________________________________________________
-[ 271] By: mbeattie on 1997/11/20 12:12:00
- Log: Initial stab at IRIX configuration support for threading. Manually
- applied parts of following patches:
- Subject: Perl 5.004_54 on IRIX
- Date: Wed, 19 Nov 1997 18:37:14 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Subject: Re: Perl 5.004_54 on IRIX
- Date: 19 Nov 1997 17:10:17 -0800
- From: Scott Henry <scotth@sgi.com>
- Branch: perl
- ! README.threads hints/irix_6.sh hints/irix_6_0.sh
- ! hints/irix_6_1.sh perl.h
-____________________________________________________________________________
-[ 270] By: mbeattie on 1997/11/19 17:45:37
- Log: The new jumbo regexp stuff did SSPUSHINT on a char* instead of
- SSPUSHPTR causing Alpha to core dump in pat.t. While fixing it,
- also fixed two instances of referring to SVs after destruction.
- Branch: perl
- ! regcomp.c regexec.c
-____________________________________________________________________________
-[ 269] By: mbeattie on 1997/11/19 15:33:23
- Log: avhv_keys under Digital UNIX made avhv.t fail because *keysp was
- changed by mg_get(*keysp) (!). Introducing a new local variable
- fixed it but I don't know if it's a compiler problem or some
- other corruption happening elsewhere.
- Branch: perl
- ! av.c
-____________________________________________________________________________
-[ 268] By: mbeattie on 1997/11/19 11:39:49
- Log: Let Configure sort out get{host,net}byaddr* prototypes:
- Subject: [PATCH] 5.004_54: little something for
- get{hos,ne}tbyaddr protos (Configure, config_h.SH, pp_sys.c)
- Date: Tue, 18 Nov 1997 19:08:19 +0200 (EET)
- From: Jarkko Hietaniemi <jhi@iki.fi>
- Branch: perl
- ! Configure config_h.SH pp_sys.c
-____________________________________________________________________________
-[ 267] By: mbeattie on 1997/11/19 11:04:15
- Log: Jumbo regexp patch applied (with minor fix-up tweaks):
- Subject: Version 7 of Jumbo RE patch available
- Date: Sun, 16 Nov 1997 00:29:39 -0500 (EST)
- From: Ilya Zakharevich <ilya@math.ohio-state.edu>
- Branch: perl
- ! MANIFEST dump.c embed.h global.sym mg.c op.c op.h perl.c
- ! perl.h pod/perlre.pod pp.c pp_ctl.c pp_hot.c proto.h regcomp.c
- ! regcomp.h regexec.c regexp.h sv.c t/op/misc.t t/op/pat.t
- ! t/op/re_tests t/op/regexp.t t/op/split.t t/op/subst.t toke.c
- ! util.c
-____________________________________________________________________________
-[ 266] By: mbeattie on 1997/11/18 17:26:09
- Log: Separate avhv_foo() key handling into avhv_keys(). Slightly tweaked
- version of patch:
- Subject: tie fake hash patch for 5.004_54
- Date: Sat, 15 Nov 1997 19:18:30 -0500
- From: Joshua Pritikin <pritikin@mindspring.com>
- Branch: perl
- + t/op/avhv.t
- ! av.c embed.h global.sym proto.h
-____________________________________________________________________________
-[ 265] By: mbeattie on 1997/11/18 16:51:04
- Log: Bring MANIFEST up to date. Add new thread tests.
- Branch: perl
- + ext/Thread/die.t ext/Thread/die2.t
- ! MANIFEST
-____________________________________________________________________________
-[ 264] By: mbeattie on 1997/11/18 16:41:27
- Log: magic_setisa enhanced to update %FIELDS automatically when @ISA
- is assigned to. Added tests to t/op/array.t. magic_setisa now
- warns about including non-existent packages in @ISA when -w is on.
- Branch: perl
- - lib/Class/Fields.pm lib/ISA.pm
- ! mg.c t/op/array.t
-____________________________________________________________________________
-[ 263] By: mbeattie on 1997/11/18 16:38:57
- Log: Fix typo in win32 -> mainline integration.
- Branch: perl
- ! perl.h
-____________________________________________________________________________
-[ 262] By: mbeattie on 1997/11/18 11:56:09
- Log: Integrate win32 branch back into mainline.
- Branch: perl
- - win32/win32io.c win32/win32io.h
- ! op.c
- !> (integrate 30 files)
-____________________________________________________________________________
-[ 261] By: gsar on 1997/11/18 00:14:02
- Log: Export our own FD_SET() et al to complete sockets-as-handles pretense.
- Branch: win32/perl
- ! win32/config.bc win32/config.vc win32/config_H.bc
- ! win32/config_H.vc win32/include/sys/socket.h win32/win32sck.c
-____________________________________________________________________________
-[ 260] By: nick on 1997/11/16 23:16:16
- Log: Generic file changes for MYMALLOC
- Branch: ansiperl
- ! miniperlmain.c perl.c
-____________________________________________________________________________
-[ 259] By: nick on 1997/11/16 23:14:36
- Log: MYMALLOC for Win32:
- 1. Initialize malloc_mutex before it is used (all platforms!)
- 2. Adjust #ifdef muddle to allow MYMALLOC and win32_ to coexist
- 3. Tweak win32/config*.* to define MYMALLOC
- 4. Provide sbrk() in terms of VirtualAlloc().
-
- Also fixup -MT (perl95) build to handle Perl_current_thread
- via call to DLL (as though an extension).
- Branch: ansiperl
- ! win32/Makefile win32/config.bc win32/config.vc
- ! win32/config_H.bc win32/config_H.vc win32/makedef.pl
- ! win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h
- ! win32/win32iop.h win32/win32thread.h
-____________________________________________________________________________
-[ 258] By: nick on 1997/11/15 20:42:28
- Log: Implement dTHR via __declspec(thread) - part 2
- Branch: ansiperl
- ! win32/makedef.pl win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 257] By: nick on 1997/11/15 19:52:53
- Log: Use __declspec(thread) var rather tha TslAlloc & co.
- Branch: ansiperl
- ! win32/makedef.pl win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 256] By: gsar on 1997/11/15 02:58:09
- Log: Add #include guard in Thread.xs so it will build even under
- no USE_THREADS (for win32). This was missed because of edit
- w/o checkout perforce kludge.
- Branch: win32/perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 255] By: nick on 1997/11/15 00:33:46
- Log: Integrate mainline (5.004_54?) into ansiperl
- Branch: ansiperl
- !> MANIFEST embed.h ext/Thread/Thread.pm ext/Thread/Thread.xs
- !> ext/Thread/Thread/Specific.pm ext/Thread/join.t
- !> ext/Thread/specific.t global.sym lib/fields.pm mg.c op.c
- !> perl.c perl.h pp_ctl.c pp_hot.c pp_sys.c proto.h scope.c
- !> t/io/pipe.t t/lib/io_pipe.t t/op/magic.t thread.h
-____________________________________________________________________________
-[ 254] By: nick on 1997/11/15 00:25:26
- Log: Interate win32 into ansiperl
- Branch: ansiperl
- +> ext/Thread/Thread/Specific.pm ext/Thread/specific.t
- +> lib/fields.pm
- !> MANIFEST embed.h ext/Thread/Thread.pm ext/Thread/Thread.xs
- !> ext/Thread/join.t global.sym mg.c op.c perl.c perl.h pp_ctl.c
- !> pp_hot.c pp_sys.c proto.h scope.c t/io/pipe.t t/lib/io_pipe.t
- !> t/op/magic.t thread.h win32/Makefile win32/config.bc
- !> win32/config.vc win32/config_sh.PL win32/makefile.mk
-____________________________________________________________________________
-[ 253] By: gsar on 1997/11/14 22:04:58
- Log: Integrate mainline changes into win32 branch. Now would be a good time
- to reverse integrate the win32 branch into mainline.
- Branch: win32/perl
- +> ext/Thread/Thread/Specific.pm ext/Thread/specific.t
- +> lib/fields.pm
- !> MANIFEST embed.h ext/Thread/Thread.pm ext/Thread/Thread.xs
- !> ext/Thread/join.t global.sym mg.c op.c perl.c perl.h pp_ctl.c
- !> pp_hot.c pp_sys.c proto.h scope.c t/io/pipe.t t/lib/io_pipe.t
- !> t/op/magic.t thread.h
-
-----------------
-Version 5.004_54
-----------------
-
-____________________________________________________________________________
-[ 252] By: mbeattie on 1997/11/14 15:07:19
- Log: Two more delays added to test suite to help *-solaris-thread.
- Branch: perl
- ! t/io/pipe.t t/lib/io_pipe.t
-____________________________________________________________________________
-[ 251] By: mbeattie on 1997/11/14 15:05:57
- Log: Remove stale code from Thread.xs.
- Branch: perl
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 250] By: mbeattie on 1997/11/14 10:12:40
- Log: Add delay to signal handling in t/op/magic.t. (Solaris with pthreads
- doesn't run handlers for self-sent signals until kill has returned.)
- Branch: perl
- ! t/op/magic.t
-____________________________________________________________________________
-[ 249] By: gsar on 1997/11/14 05:14:44
- Log: Fix various details in win32 makefiles and Config.pm setup.
- - ldflags is set for both compilers now
- - extensions list is now correct
- - delete perl95.exe on distclean
- - cf_time now gets updated (once)
- - ccdlflags is set for Borland
- - fix startperl so dprofpp works
- Branch: win32/perl
- ! win32/Makefile win32/config.bc win32/config.vc
- ! win32/config_sh.PL win32/makefile.mk
-____________________________________________________________________________
-[ 248] By: mbeattie on 1997/11/13 18:01:27
- Log: Rewrite thread return code to distinguish between ordinary return
- and die() and make join propagate the die. Add tiny method eval
- which just does "return eval { shift->join; }". Add Thread::Specific
- class for access to thread specific user data along with specific.t.
- Rename Class to classname throughout Thread.xs for consistency.
- Fix pp_specific to pp_threadsv in global.sym. Add support to
- pp_entersub in pp_hot.c to lock stash for static locked methods.
- Branch: perl
- + ext/Thread/Thread/Specific.pm ext/Thread/specific.t
- + lib/fields.pm
- ! MANIFEST embed.h ext/Thread/Thread.pm ext/Thread/Thread.xs
- ! ext/Thread/join.t global.sym mg.c pp_hot.c thread.h
-____________________________________________________________________________
-[ 247] By: mbeattie on 1997/11/13 14:13:30
- Log: Change CONTEXT to PERL_CONTEXT throughout source (since the #define
- to avoid the Digital UNIX clash no longer works). Changed the #ifdef
- in pp_sys.c for whether getnet* function get protoyped (since the
- default had a broken prototype for getnetbyaddr).
- Branch: perl
- ! mg.c op.c perl.c perl.h pp_ctl.c pp_hot.c pp_sys.c proto.h
- ! scope.c thread.h
-____________________________________________________________________________
-[ 246] By: nick on 1997/11/13 02:44:40
- Log: Integrate Win32 branch
- Branch: ansiperl
- - configure ext/util/extliblist win32/bin/pl2bat.bat
- - win32/bin/search.bat win32/bin/test.bat win32/bin/webget.bat
- - win32/config.H win32/config.w32 win32/win32io.c
- - win32/win32io.h
- !> (integrate 905 files)
-____________________________________________________________________________
-[ 245] By: nick on 1997/11/13 00:47:54
- Log: Integrate (-ay) win32 branch at its creation to
- establish and ancestor as per perkforce technote #9
- Branch: ansiperl
- +> configure ext/util/extliblist win32/bin/pl2bat.bat
- +> win32/bin/search.bat win32/bin/test.bat win32/bin/webget.bat
- +> win32/config.H win32/config.w32
- !> (integrate 859 files)
-____________________________________________________________________________
-[ 244] By: gsar on 1997/11/12 22:26:39
- Log: More cleanups of win32/win32*.[ch] files. win32/win32iop.h now
- contains the all the declarations and macros for the win32io layer.
- New std-ish functions are exported now. All win32-specific exported
- functions begin with "win32_" consistently. win32 version of
- init_os_extras() is now exported, so embedders can get the in-core
- xsubs.
- Branch: win32/perl
- ! dosish.h win32/makedef.pl win32/win32.c win32/win32.h
- ! win32/win32iop.h win32/win32sck.c
-____________________________________________________________________________
-[ 243] By: gsar on 1997/11/12 07:41:52
- Log: Really delete deleted files.
- Branch: win32/perl
- - win32/win32io.c win32/win32io.h
-____________________________________________________________________________
-[ 242] By: gsar on 1997/11/12 07:40:54
- Log: Egregious IOsubsystem code excised. Phew, what a relief! Two
- files (win32/win32io.[ch]) completely removed, as are all traces
- of them in makefiles and MANIFEST. RunPerl() retains the void* arg
- for later. Various myfoo() things regularized to my_foo(). CPP not
- required anymore to create a perl binary :)
- Branch: win32/perl
- ! MANIFEST win32/Makefile win32/makedef.pl win32/makefile.mk
- ! win32/perllib.c win32/runperl.c win32/win32.c win32/win32.h
- ! win32/win32io.c win32/win32io.h win32/win32iop.h
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 241] By: gsar on 1997/11/12 05:31:28
- Log: Fix various win32 code blemishes:
- - s/stolen/win32/g
- - s/(CROAK|WARN)/lc($1)/eg
- - remove deadcode from most places
- Branch: win32/perl
- ! win32/makedef.pl win32/win32.c win32/win32io.c
- ! win32/win32iop.h
-____________________________________________________________________________
-[ 240] By: gsar on 1997/11/12 04:36:29
- Log: Carry over changes in ansiperl branch. Win32 branch is now
- the leading edge.
- Branch: win32/perl
- ! embed.h global.sym perl.c win32/win32thread.c
- ! win32/win32thread.h
-____________________________________________________________________________
-[ 239] By: gsar on 1997/11/12 03:39:57
- Log: Add missing win32_closesocket() and export it (extension writers' complaint).
- Branch: win32/perl
- ! win32/include/sys/socket.h win32/makedef.pl win32/win32sck.c
-____________________________________________________________________________
-[ 238] By: gsar on 1997/11/12 03:25:17
- Log: Clean up win32/win32sck.c (runtime load of Winsock now gone, it can be
- done cleaner, if really needed (perhaps only for efficiency reasons?)).
- Redundant EXTERN_C definitions and related warnings fixed.
- Branch: win32/perl
- ! miniperlmain.c perl.h win32/perllib.c win32/win32io.c
- ! win32/win32iop.h win32/win32sck.c
-____________________________________________________________________________
-[ 237] By: nick on 1997/11/12 02:45:15
- Log: Fixup Win32
- - #undef start_env before re-#defining it
- - change pp_specific pp_threadsv in global.sym
- - re-build embed.h
- - avoid HAVE_THREAD_INTERN - we don't and empty struct
- is a pain. If we did have it it would contain cached
- values of things we can only get at _IN_ the thread
- so new_struct_thread is wrong place to call it.
- - add new macro SET_THREAD_SELF - we must (in main thread)
- define in win32thread.h, support in win32thread.c,
- test and call in perl.c
- Branch: ansiperl
- ! embed.h global.sym perl.c thread.h win32/win32thread.c
- ! win32/win32thread.h
-____________________________________________________________________________
-[ 236] By: nick on 1997/11/12 01:54:23
- Log: Integrate mainline after it integrated us.
- Accepted 'theirs' everywhere - so two branches should
- now point to same files again.
- Almost all of these were what was suggested, others were
- whitespace diffs. A few dubious spots which we will now
- go fix.
- Branch: ansiperl
- !> embed.h ext/DB_File/DB_File.xs ext/GDBM_File/GDBM_File.xs
- !> ext/Opcode/Opcode.pm ext/Thread/Thread.xs interp.sym mg.c op.c
- !> opcode.h opcode.pl perl.c perl.h pp.c pp_ctl.c pp_sys.c t/TEST
- !> t/lib/safe2.t t/lib/thread.t t/op/nothread.t thread.h toke.c
- !> util.c
-____________________________________________________________________________
-[ 235] By: gsar on 1997/11/12 01:22:26
- Log: Minor tweaks to add a thread_intern struct that should ultimately
- contain all the win32-specific statics.
- Win32 branch now passes all tests with or w/o USE_THREADS.
- Branch: win32/perl
- ! embed.h perl.c win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 234] By: gsar on 1997/11/11 23:08:54
- Log: Initial (untested) integration of mainline changes.
- Branch: win32/perl
- - configure
- !> (integrate 89 files)
-____________________________________________________________________________
-[ 233] By: mbeattie on 1997/11/11 18:07:30
- Log: Typo in thread.h: ADD_THREAD_INTERN should be HAVE_THREAD_INTERN
- Branch: perl
- ! thread.h
-____________________________________________________________________________
-[ 232] By: mbeattie on 1997/11/11 17:49:12
- Log: t/TEST (reverted to @229 version) should have been included in the
- previous change (231) but my way of recovering it didn't work
- properly. The change 231 comments about successful tests applies
- to this t/TEST (i.e. as of this change).
- Branch: perl
- ! t/TEST
-____________________________________________________________________________
-[ 231] By: mbeattie on 1997/11/11 17:46:59
- Log: Fix up ansiperl integration. Back to passing all expected tests
- with usethreads. Untested with non-threaded perl.
- Branch: perl
- ! embed.h ext/DB_File/DB_File.xs ext/GDBM_File/GDBM_File.xs
- ! perl.c perl.h pp.c t/lib/thread.t t/op/nothread.t util.c
-____________________________________________________________________________
-[ 230] By: mbeattie on 1997/11/11 16:36:22
- Log: Initial integration of ansi branch into mainline (untested).
- Branch: perl
- +> t/lib/thread.t t/op/nothread.t thread.sym
- - configure
- !> (integrate 84 files)
-____________________________________________________________________________
-[ 229] By: mbeattie on 1997/11/11 15:20:43
- Log: Change name of OP_SPECIFIC to OP_THREADSV. Fixed perl_get_sv when
- getting per-thread magicals. Fixed thr->errsv initialisation.
- Branch: perl
- ! ext/Opcode/Opcode.pm op.c opcode.h opcode.pl perl.c pp.c
- ! t/lib/safe2.t toke.c
-____________________________________________________________________________
-[ 228] By: mbeattie on 1997/11/11 12:48:26
- Log: Fix up $@ (ERRSV now refers to GvSV(errgv) for non-threaded perl and
- thr->errsv for threaded perl). Fix pp_tie and pp_dbmopen to use
- GvCV(gv) instead of gv so AUTOLOAD stuff works. All tests now pass
- again for non-threaded perl. Enhanced perl_get_sv to return
- per-thread magicals where necessary for threaded perl.
- Branch: perl
- ! embed.h ext/Thread/Thread.xs interp.sym mg.c op.c perl.c
- ! perl.h pp_ctl.c pp_sys.c thread.h toke.c util.c
-____________________________________________________________________________
-[ 227] By: mbeattie on 1997/11/11 11:00:02
- Log: hashlock bug.
-
- Jobs fixed ...
-
- hashlock fixed on 1997/11/11 by mbeattie@localhost
-
- Subject: [perl5.004_53; patch] Another hash-locking fix
- Date: 23 Oct 1997 14:13:55 -0400
- From: Owen Taylor <owt1@cornell.edu>
- Branch: bugs
- + hashlock
-____________________________________________________________________________
-[ 226] By: gsar on 1997/11/11 02:11:23
- Log: Slightly more refined lock() keyword recognition (using %INC).
- Branch: win32/perl
- ! toke.c
-____________________________________________________________________________
-[ 225] By: gsar on 1997/11/11 00:26:09
- Log: "weak" lock keyword (hardcoded initial implementation) now works.
- if not defined(&Thread::join) and defined(&__PACKAGE__::lock), 'lock'
- is recognized as a sub, a regular keyword otherwise. Could be
- generalized by storing a flag for every op in OP struct, and turning
- the flag off when Thread.xs loads.
- Branch: win32/perl
- ! toke.c
-____________________________________________________________________________
-[ 224] By: gsar on 1997/11/10 22:59:55
- Log: Merge a patch in preparation for "weak keywords":
- From: Gurusamy Sarathy <gsar@engin.umich.edu>
- Message-Id: <199710080618.CAA23899@aatma.engin.umich.edu>
- Subject: [PATCH] global overrides for keywords
- Date: Wed, 08 Oct 1997 02:18:23 -0400
- Branch: win32/perl
- ! embed.h interp.sym perl.c perl.h toke.c
-____________________________________________________________________________
-[ 223] By: gsar on 1997/11/10 22:41:31
- Log: Remove runlevel. It was used to count how many runops() calls
- we were in the process of executing, and longjmp() to the topmost
- one (if not already there). We use a null top_env->je_prev
- to distinguish that now.
- Branch: win32/perl
- ! embed.h interp.sym perl.h pp_ctl.c run.c thread.h util.c
-____________________________________________________________________________
-[ 222] By: gsar on 1997/11/10 04:47:48
- Log: Win32 branch now contains all non-ansification changes in ansiperl branch.
- USE_THREADS case builds and passes all tests using both compilers.
- Additional tweaks:
- - fixup win32/makedef.pl to skip more symbols for non-thread build.
- - sync win32/Makefile with win32/makefile.mk
- >>>Non-thread build fails a lot of tests.<<<
- Branch: win32/perl
- + thread.sym
- ! MANIFEST ext/Thread/Thread.xs perl.c perl.h pp_sys.c sv.c
- ! util.c win32/Makefile win32/config.bc win32/config_H.bc
- ! win32/makedef.pl win32/makefile.mk
-____________________________________________________________________________
-[ 221] By: gsar on 1997/11/10 00:57:53
- Log: Initial (untested) merge of all non-ansi changes on ansiperl branch
- into win32 branch.
- Branch: win32/perl
- + t/lib/thread.t t/op/nothread.t
- ! MANIFEST embed.h ext/Opcode/Opcode.pm global.sym interp.sym
- ! perl.c proto.h sv.h t/lib/english.t t/op/misc.t thread.h
- ! util.c win32/Makefile win32/config.bc win32/config.vc
- ! win32/config_H.bc win32/config_H.vc win32/makedef.pl
- ! win32/makefile.mk win32/win32.c win32/win32.h win32/win32io.c
- ! win32/win32io.h win32/win32iop.h win32/win32sck.c
- ! win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 220] By: gsar on 1997/11/09 22:44:41
- Log: Integrate latest mainline into win32 branch.
- Branch: win32/perl
- +> win32/win32thread.c win32/win32thread.h
- !> (integrate 39 files)
-____________________________________________________________________________
-[ 219] By: nick on 1997/11/09 21:46:06
- Log: Conditionalize english.t,
- Enhance times() for NT,
- (Failed) attempt to implement alarm(),
- Fixed config.h dependancy in makefile.mk
- Branch: ansiperl
- ! t/lib/english.t win32/config.bc win32/config_H.bc
- ! win32/makefile.mk win32/win32.c
-____________________________________________________________________________
-[ 218] By: nick on 1997/11/09 15:38:00
- Log: Dick Hardt's patch for build on Alpha
- Branch: ansiperl
- ! win32/Makefile
-____________________________________________________________________________
-[ 217] By: nick on 1997/11/09 03:31:20
- Log: MakeMaker not in vofig noise fix for dmake
- Branch: ansiperl
- ! win32/config.bc win32/makefile.mk
-____________________________________________________________________________
-[ 216] By: nick on 1997/11/09 03:15:06
- Log: Fix 'anydbm.t' - if the gv is passed 1st call to inherited
- TIEHASH works, but 2nd call (after db is closed, attempt
- to reopen) tries to AUTOLOAD TIEHASH rather than using
- cached value.
- Branch: ansiperl
- ! pp_sys.c
-____________________________________________________________________________
-[ 215] By: nick on 1997/11/08 16:41:24
- Log: Cleanup MakeMaker 'not in config' noise
- Branch: ansiperl
- ! win32/Makefile win32/config.vc
-____________________________________________________________________________
-[ 214] By: nick on 1997/11/08 15:07:24
- Log: Remove 'configure' leaving configure.gnu and Configure
- Win32 ignores case and keeps trying to update
- repository copy of 'configure' or 'Configure' with
- the other.
- Branch: ansiperl
- - configure
- ! MANIFEST
-____________________________________________________________________________
-[ 213] By: nick on 1997/11/08 15:03:39
- Log: Get threads working again on Win32
- Root cause of fail was init_thread_intern() in
- new_struct_thread() (which is called in parent thread)
- clobbering dTHR of parent thread.
- It is doubtfull if setting 'self' in new_struct_thread()
- is 'right' but left in for now.
- Branch: ansiperl
- ! ext/Thread/Thread.xs perl.c thread.h util.c win32/Makefile
- ! win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 212] By: nick on 1997/11/08 00:34:03
- Log: Add :base_thread to :default in Opcode.pm
- This allows lib/safe.t to pass when threaded.
- It is unclear if 'lock' should be safe as it allows
- denial of service attack, but could not figure out
- how to add just 'specific' (sic) to :default
- without triggering 'already tagged' warning noise.
- Branch: ansiperl
- ! ext/Opcode/Opcode.pm win32/makefile.mk
-____________________________________________________________________________
-[ 211] By: nick on 1997/11/07 23:59:31
- Log: Merge changes as of 18:00 CST
- Branch: ansiperl
- !> op.c pp.c pp_sys.c thread.h util.c
-____________________________________________________________________________
-[ 210] By: nick on 1997/11/07 23:52:35
- Log: Reverse integrate Malcolm's chanes into local
- repository, then import result back into my view
- of Malcolm's repository.
- Builds and passes (most) tests with GNU C++/Solaris
- and Borland C++, Win32.
- Branch: ansiperl
- ! doop.c embed.h ext/Thread/Thread.xs global.sym gv.c hv.c
- ! interp.sym mg.c op.c opcode.h opcode.pl patchlevel.h perl.c
- ! perl.h pp.c pp_ctl.c pp_sys.c proto.h sv.c sv.h taint.c
- ! thread.h toke.c util.c win32/makefile.mk
-____________________________________________________________________________
-[ 209] By: mbeattie on 1997/11/07 18:12:36
- Log: Change pp_tie and pp_dbmopen to use perl_call_sv instead of a
- DIY pp_entersub (in preparation for AUTOLOAD change). dbmopen
- not tested. ofslen now maps to thr->Tofslen in thread.h. Added
- missing #ifdef USE_THREADS around some DEBU_L statements in die().
- Building without USE_THREADS fails quite a lot of tests. It looks
- as though the move to per-thread magicals must be missing some
- #ifdef USE_THREADS.
- Branch: perl
- ! op.c pp.c pp_sys.c thread.h util.c
-____________________________________________________________________________
-[ 208] By: nick on 1997/11/07 01:37:28
- Log: Raw integrate of latest perl
- Branch: ansiperl
- ! t/TEST
- !> README.threads Todo.5.005 embed.h ext/Opcode/Opcode.pm
- !> ext/Thread/Thread.xs global.sym gv.c interp.sym op.c op.h
- !> perl.c perl.h pp.c pp_ctl.c pp_hot.c proto.h scope.h sv.h
- !> thread.h toke.c util.c
-____________________________________________________________________________
-[ 207] By: mbeattie on 1997/11/06 14:58:00
- Log: Update README.threads and Todo.5.005.
- Branch: perl
- ! README.threads Todo.5.005
-____________________________________________________________________________
-[ 206] By: mbeattie on 1997/11/06 14:37:37
- Log: Remove #ifdef DEPRECATED stuff: newXSUB, pp_entersubr, FREE_TMPS().
- Branch: perl
- ! op.c pp_ctl.c proto.h scope.h
-____________________________________________________________________________
-[ 205] By: mbeattie on 1997/11/06 14:31:38
- Log: Per-thread magicals now stored in their own thr->magicals and keyed
- more directly. cvcache and oursv become ordinary struct thread
- fields instead of #defined thr->Tfoo ones. SvREFCNT_inc now checks
- for 0 again. Main thread initialisation done by new function
- init_main_thread instead of (now fixed) new_struct_thread.
-
- Jobs fixed ...
-
- jmpenv fixed on 1997/11/06 by mbeattie@localhost
-
- Subject: [perl5.004_53; patch] eval's and threads
- Date: 23 Oct 1997 23:59:19 -0400
- From: Owen Taylor <owt1@cornell.edu>
- Branch: bugs
- + jmpenv
- Branch: perl
- ! embed.h ext/Thread/Thread.xs global.sym gv.c op.c perl.c
- ! pp_ctl.c pp_hot.c proto.h sv.h thread.h toke.c util.c
-____________________________________________________________________________
-[ 204] By: mbeattie on 1997/11/05 17:18:18
- Log: Per-thread magicals mostly working (and localisable). Now getting
- intermittent occasional "Use of uninitialized value" warnings
- which may be due to some op flag black magic I've broken.
- Branch: perl
- ! embed.h ext/Opcode/Opcode.pm ext/Thread/Thread.xs gv.c
- ! interp.sym op.c op.h perl.c perl.h pp.c thread.h toke.c util.c
-____________________________________________________________________________
-[ 203] By: nick on 1997/11/05 01:04:10
- Log: Builds C++ Borland, MSVC++ (Win32) and GCC++ (Solaris)
- Branch: ansiperl
- ! XSUB.h doio.c doop.c embed.h ext/SDBM_File/sdbm/sdbm.h
- ! ext/Thread/Thread.xs global.sym gv.c hv.c interp.sym mg.c
- ! miniperlmain.c op.c op.h opcode.h opcode.pl patchlevel.h
- ! perl.c perl.h pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h
- ! sv.c sv.h taint.c thread.h toke.c util.c win32/Makefile
- ! win32/config.vc win32/config_H.vc win32/makedef.pl
- ! win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h
- ! win32/win32io.c win32/win32io.h win32/win32iop.h
- ! win32/win32sck.c win32/win32thread.h
-____________________________________________________________________________
-[ 202] By: nick on 1997/11/05 00:50:27
- Log: Compile(d) at least once with threads on win32
- but did not work
- Branch: ansiperl
- ! embed.h perl.c thread.h
-____________________________________________________________________________
-[ 201] By: nick on 1997/11/05 00:32:13
- Log: Trivial integrate
- Branch: ansiperl
- !> patchlevel.h
-____________________________________________________________________________
-[ 200] By: mbeattie on 1997/11/04 12:06:09
- Log: Up patchlevel to 5.004_54 (I missed _53 for the last release).
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 199] By: nick on 1997/11/01 00:18:52
- Log: Integrate mainline @ 18:15 CST 31 Oct 1997
- Branch: ansiperl
- !> doop.c embed.h ext/Thread/Thread.xs global.sym gv.c hv.c
- !> interp.sym mg.c op.c opcode.h opcode.pl perl.c perl.h pp.c
- !> pp_ctl.c pp_sys.c proto.h sv.c sv.h taint.c thread.h toke.c
- !> util.c
-____________________________________________________________________________
-[ 198] By: nick on 1997/11/01 00:08:33
- Log: win32thread.* not in MANIFEST which has muddled moving
- back and forth between depots.
- Branch: ansiperl
- ! MANIFEST win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 197] By: nick on 1997/11/01 00:02:49
- Log: Test changes
- Branch: ansiperl
- + t/lib/thread.t t/op/nothread.t thread.sym
- ! MANIFEST
-____________________________________________________________________________
-[ 196] By: nick on 1997/10/31 23:54:01
- Log: Further ANSI changes now builds and passes (most) tests
- with gcc -x c++.
- Branch: ansiperl
- ! INTERN.h embed.h ext/DynaLoader/dl_dlopen.xs
- ! ext/Fcntl/Fcntl.xs ext/GDBM_File/GDBM_File.xs ext/IO/IO.xs
- ! ext/Opcode/Opcode.xs ext/POSIX/POSIX.xs
- ! ext/SDBM_File/sdbm/hash.c ext/SDBM_File/sdbm/pair.c
- ! ext/SDBM_File/sdbm/sdbm.c ext/SDBM_File/sdbm/sdbm.h
- ! ext/SDBM_File/sdbm/util.c ext/Socket/Socket.xs
- ! ext/Thread/Thread.xs ext/attrs/attrs.xs global.sym perl.h
- ! perly.c sv.c t/lib/english.t t/op/misc.t thread.h util.c
- ! win32/Makefile win32/makedef.pl win32/makefile.mk x2p/a2p.c
- ! x2p/a2p.h x2p/a2py.c x2p/hash.c x2p/str.c x2p/util.c
- ! x2p/walk.c
-____________________________________________________________________________
-[ 195] By: mbeattie on 1997/10/31 18:05:31
- Log: Half way through moving per-thread magicals into per-thread fields
- and the associated new OP_SPECIFIC and find_thread_magical stuff.
- perl will compile but plenty of the magicals are still broken.
- Branch: perl
- ! doop.c embed.h ext/Thread/Thread.xs global.sym gv.c hv.c
- ! interp.sym mg.c op.c opcode.h opcode.pl perl.c perl.h pp.c
- ! pp_ctl.c pp_sys.c proto.h sv.c sv.h taint.c thread.h toke.c
- ! util.c
-____________________________________________________________________________
-[ 194] By: nick on 1997/10/31 01:43:49
- Log: Convert miniperl sources to ANSI C. Several passes of
- GNU C's 'protoize' plus a few hand edits.
- Will compile miniperl with gcc -x c++ (i.e. treat .c a C++ files)
- Does not link seems gcc's C++ does not define a symbol for
- const char foo[] = "....";
- i.e. with empty [].
- Branch: ansiperl
- ! av.c deb.c doio.c doop.c dump.c gv.c hv.c malloc.c mg.c
- ! miniperlmain.c op.c perl.c perl.h perlio.c perly.y pp.c
- ! pp_ctl.c pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c
- ! sv.c taint.c toke.c universal.c util.c
-____________________________________________________________________________
-[ 193] By: nick on 1997/10/30 03:00:01
- Log: Make the ansi branch
- Branch: ansiperl
- +> (branch 907 files)
-____________________________________________________________________________
-[ 192] By: nick on 1997/10/30 02:48:17
- Log: Oneperl builds with THREADS/THISPTR Borland
- Manualy inserted Sarathy's new COND_XXXXX from his mail.
- Manual change if Tself -> self as was easier than resolve :-(
- Two aTHIS's in op.c
- Branch: oneperl
- ! embed.h op.c thread.h thread.sym win32/makefile.mk
- ! win32/win32thread.h
-____________________________________________________________________________
-[ 191] By: nick on 1997/10/30 01:54:50
- Log: Raw resolve of latest sources with oneperl
- Branch: oneperl
- !> Todo.5.005 ext/Thread/Thread.xs fakethr.h op.c op.h opcode.h
- !> opcode.pl perl.c thread.h win32/win32thread.c
- !> win32/win32thread.h
-____________________________________________________________________________
-[ 190] By: mbeattie on 1997/10/29 14:39:54
- Log: Remove global macro "self". Change thr->Tself to thr->self.
- Branch: perl
- ! ext/Thread/Thread.xs fakethr.h perl.c thread.h
- ! win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 189] By: mbeattie on 1997/10/29 12:49:01
- Log: Add to Todo: compiler with fake SvCUR in comppad_name entries.
- Branch: perl
- ! Todo.5.005
-____________________________________________________________________________
-[ 188] By: mbeattie on 1997/10/29 12:45:32
- Log: Add pp_lock knowledge to compiler
- Branch: perlext
- ! Compiler/ccop.c Compiler/ccop.h
-____________________________________________________________________________
-[ 187] By: mbeattie on 1997/10/29 12:45:02
- Log: Change peep() to optimise away unneeded rv2av in lval->[] and lval->{}
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 186] By: mbeattie on 1997/10/29 12:43:36
- Log: Move compiler OP class information into opcode.pl.
- Branch: perl
- ! op.h opcode.h opcode.pl
-____________________________________________________________________________
-[ 185] By: nick on 1997/10/26 22:52:05
- Log: Split failing test in op/misc.t into op/nothread.t
- so all tests can be passed where they apply.
- Cleanup other two cases of THREADS/THISPTR.
- Conditional compile option for CriticalSection's on Win32
- Branch: oneperl
- + t/op/nothread.t
- ! sv.h t/op/misc.t win32/Makefile win32/makedef.pl
- ! win32/win32thread.h
-____________________________________________________________________________
-[ 184] By: nick on 1997/10/26 19:42:00
- Log: USE_THISPTR fixes for CRIPPLED_CC (implied by threads)
- Branch: oneperl
- ! embed.h global.sym proto.h sv.c sv.h toke.c
-____________________________________________________________________________
-[ 183] By: nick on 1997/10/26 18:31:58
- Log: Make USE_THREADS imply CRIPPLED_CC.
- This avoids most of the uses of 'Sv' and hence many needs of
- dTHR in extension code.
- With this change Data::Dumper builds as-is
- and Tk only needs four tweaks:
- 1. Obscure dump-stack case which really needs dTHR
- 2. A curcop in error-message code
- 3. Two cases of SAVETMPS
- 4. A curcop == &compiling which is probably not required.
- IMHO the SAVETMPS case is only one which merits further automation.
- Branch: oneperl
- ! embed.h global.sym perl.h sv.c win32/Makefile win32/makedef.pl
-____________________________________________________________________________
-[ 182] By: nick on 1997/10/26 16:31:58
- Log: Change dSP to imply dTHR for extension source compatibility
- introduce djSP (Declare Just SP) for use in perl sources
- and thread-aware extensions. Use latter.
- Branch: oneperl
- ! XSUB.h doio.c doop.c ext/Thread/Thread.xs gv.c mg.c perl.c
- ! pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c sv.c
-____________________________________________________________________________
-[ 181] By: nick on 1997/10/26 00:39:57
- Log: More tests
- Branch: oneperl
- ! t/lib/thread.t
-____________________________________________________________________________
-[ 180] By: nick on 1997/10/25 22:18:27
- Log: Use return of THREAD_CREATE() - add basic thread test
- Branch: oneperl
- + t/lib/thread.t
- ! ext/Thread/Thread.xs
-____________________________________________________________________________
-[ 179] By: nick on 1997/10/25 21:25:23
- Log: Builds with no thread/this
- Branch: oneperl
- ! ext/Thread/Thread.xs t/lib/english.t win32/makedef.pl
- ! win32/win32thread.c
-____________________________________________________________________________
-[ 178] By: nick on 1997/10/25 18:28:03
- Log: Cleanup dead #ifdef branch introduced by scruffy merging.
- Branch: oneperl
- ! perl.c
-____________________________________________________________________________
-[ 177] By: nick on 1997/10/25 18:11:33
- Log: Basic integrate of oneperl with threads, passes
- tests THISPTR+THREADs - win32/win32thread.* needed
- changes (where did they come from)?
- Branch: oneperl
- ! embed.h ext/Thread/Thread.xs perl.h thread.h win32/Makefile
- ! win32/makedef.pl win32/win32thread.c win32/win32thread.h
-____________________________________________________________________________
-[ 176] By: nick on 1997/10/25 17:05:52
- Log: Onepel builds THISPTR no threads
- Branch: oneperl
- ! ext/Thread/Thread.xs thread.h win32/makedef.pl
-____________________________________________________________________________
-[ 175] By: nick on 1997/10/25 16:40:10
- Log: Integrate oneperl with new style JOIN etc. macros
- Branch: oneperl
- +> win32/win32thread.c win32/win32thread.h
- !> Todo.5.005 ext/POSIX/POSIX.xs ext/Thread/Thread.xs fakethr.h
- !> global.sym gv.c hv.c mg.c op.c opcode.h opcode.pl perl.c
- !> perl.h pp.c pp_hot.c sv.h thread.h vms/descrip.mms
- !> vms/gen_shrfls.pl vms/vms.c vms/vmsish.h win32/Makefile
- !> win32/makefile.mk
-____________________________________________________________________________
-[ 174] By: mbeattie on 1997/10/24 17:14:00
- Log: Remove xcv_condp CV field which is no longer used.
- Branch: perl
- ! sv.h
-____________________________________________________________________________
-[ 173] By: mbeattie on 1997/10/24 14:36:09
- Log: Patches for VMS [Dan Sugalski]
- Branch: bugs
- + vms2
- Branch: perl
- ! ext/POSIX/POSIX.xs vms/descrip.mms vms/gen_shrfls.pl vms/vms.c
- ! vms/vmsish.h
-____________________________________________________________________________
-[ 172] By: mbeattie on 1997/10/24 13:50:59
- Log: Improve internal threading API. Introduce win32/win32thread.[ch]
- to use new API and patch win32 makefile stuff a little.
- Branch: perl
- + win32/win32thread.c win32/win32thread.h
- ! Todo.5.005 ext/Thread/Thread.xs fakethr.h global.sym gv.c hv.c
- ! perl.c perl.h thread.h win32/Makefile win32/makefile.mk
-____________________________________________________________________________
-[ 171] By: mbeattie on 1997/10/23 14:00:27
- Log: Fix pp_hot.c:get_db_sub core dump when perl debugger used.
-
- Jobs fixed ...
-
- get_db_sub fixed on 1997/10/23 by mbeattie@squash
-
- Subject: [perl5.004_53] Debugger crash (patch)
- Date: Thu, 16 Oct 1997 22:03:09 -0400
- From: Owen Taylor <owt1@cornell.edu>
- Branch: bugs
- + get_db_sub
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 170] By: mbeattie on 1997/10/23 09:22:40
- Log: Fix refcounts for lock/magic_mutexfree. Make OP_LOCK auto-ref
- its argument using ck_rfun as OP_DEFINED. Make pp_lock return
- a ref to its argument for AV, HV, CV.
- Branch: perl
- ! mg.c op.c opcode.h opcode.pl pp.c pp_hot.c
-____________________________________________________________________________
-[ 169] By: gsar on 1997/10/21 03:49:25
- Log: With these fixes, oneperl builds THISPTR && THREADS under both win32 compilers:
- - Fixup static functions that were missing aTHIS.
- - s/extern/EXT/ in dTHR macro, or Borland CC croaks.
- - Removed static functions from global.sym.
- - Typo in perl.h.
- - Additions to makefile.mk.
- Branch: oneperl
- ! embed.h embed.pl global.sym op.c perl.h pp_ctl.c toke.c
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 168] By: nick on 1997/10/20 02:47:18
- Log: Passes expected tests with -DUSE_THREADS with/without -DUSE_THISPTR
- Branch: oneperl
- ! embed.h ext/Thread/Thread.xs mg.c pp.c pp_hot.c proto.h
- ! scope.h thread.h
-____________________________________________________________________________
-[ 167] By: nick on 1997/10/20 01:03:00
- Log: Add missing aTHIS in cast
- Branch: oneperl
- ! win32/dl_win32.xs
-____________________________________________________________________________
-[ 166] By: nick on 1997/10/20 00:44:42
- Log: Builds and passes test with -DUSE_THISPTR
- Branch: oneperl
- ! ext/Thread/Thread.xs win32/Makefile win32/makedef.pl
- ! win32/perllib.c
-____________________________________________________________________________
-[ 165] By: nick on 1997/10/19 21:45:36
- Log: Oneperl runs miniperl with THISPTR (Win32 threading patch included)
- Branch: oneperl
- ! embed.h ext/Thread/Thread.xs global.sym interp.sym perl.c
- ! perl.h t/TEST thread.h win32/Makefile win32/makedef.pl
- ! win32/makefile.mk win32/perllib.c
-____________________________________________________________________________
-[ 164] By: nick on 1997/10/19 20:09:13
- Log: oneperl compiles (but fails) with -DUSE_THISPTR
- Branch: oneperl
- ! av.c embed.h mg.c perl.c perl.h pp.c pp_ctl.c pp_hot.c
- ! pp_sys.c proto.h regexec.c sv.c thread.h thread.sym util.c
- ! win32/win32.c win32/win32.h
-____________________________________________________________________________
-[ 163] By: nick on 1997/10/19 16:46:09
- Log: Builds on NT4 without THISPTR or THREADS, passes all tests
- Branch: oneperl
- ! embed.h perl.h thread.h vars.h
-____________________________________________________________________________
-[ 162] By: nick on 1997/10/19 14:42:16
- Log: Dubious merge of oneperl's variable and struct thread
- Branch: oneperl
- !> perl.h thread.h
-____________________________________________________________________________
-[ 161] By: nick on 1997/10/18 18:05:13
- Log: integrate all but perl.h/thread.h
- Branch: oneperl
- +> Todo.5.005 perlio.sym
- !> (integrate 98 files)
-____________________________________________________________________________
-[ 160] By: nick on 1997/10/18 03:49:27
- Log: Integrate rest of sub-dirs into oneperl
- Branch: oneperl
- +> ext/Thread/Makefile.PL ext/Thread/Notes ext/Thread/README
- +> ext/Thread/Thread.pm ext/Thread/Thread.xs
- +> ext/Thread/Thread/Queue.pm ext/Thread/Thread/Semaphore.pm
- +> ext/Thread/create.t ext/Thread/io.t ext/Thread/join.t
- +> ext/Thread/join2.t ext/Thread/list.t ext/Thread/lock.t
- +> ext/Thread/queue.t ext/Thread/sync.t ext/Thread/sync2.t
- +> ext/Thread/typemap ext/Thread/unsync.t ext/Thread/unsync2.t
- +> ext/Thread/unsync3.t ext/Thread/unsync4.t hints/newsos4.sh
- +> hints/os390.sh
- - ext/util/extliblist
- !> (integrate 425 files)
-____________________________________________________________________________
-[ 159] By: nick on 1997/10/18 03:20:11
- Log: Integrate (accept) t and win32 into oneperl
- Branch: oneperl
- +> t/lib/dosglob.t win32/bin/pl2bat.pl win32/bin/runperl.pl
- +> win32/bin/search.pl win32/bin/webget.pl win32/config.bc
- +> win32/config.vc win32/config_H.bc win32/config_H.vc
- +> win32/makefile.mk
- !> (integrate 188 files)
-____________________________________________________________________________
-[ 158] By: nick on 1997/10/18 03:12:59
- Log: Integrate lib/... into oneperl
- Branch: oneperl
- +> lib/File/DosGlob.pm lib/base.pm lib/chat2.pl
- !> (integrate 138 files)
-____________________________________________________________________________
-[ 157] By: nick on 1997/10/18 02:55:53
- Log: Make lib/Bundle/CPAN.pm text in oneperl too.
- Branch: oneperl
- ! lib/Bundle/CPAN.pm
-____________________________________________________________________________
-[ 156] By: nick on 1997/10/18 02:52:44
- Log: Make lib/Bundle/CPAN.pm a text file
- Branch: perl
- ! lib/Bundle/CPAN.pm
-____________________________________________________________________________
-[ 155] By: nick on 1997/10/18 02:33:02
- Log: Some weirdness in the intgrate process
- Branch: oneperl
- - win32/bin/pl2bat.bat win32/bin/search.bat win32/bin/test.bat
- - win32/bin/webget.bat win32/config.H win32/config.w32
-____________________________________________________________________________
-[ 153] By: nick on 1997/10/18 02:29:16
- Log: Let us try all the pure integrate stuff
- Branch: oneperl
- !> (integrate 647 files)
-____________________________________________________________________________
-[ 152] By: nick on 1997/10/18 02:13:35
- Log: Get more sub directories out of the way.
- Branch: oneperl
- !> (integrate 92 files)
-____________________________________________________________________________
-[ 151] By: nick on 1997/10/18 02:05:41
- Log: Integrate hints
- Branch: oneperl
- !> (integrate 68 files)
-____________________________________________________________________________
-[ 150] By: nick on 1997/10/18 01:57:20
- Log: Try reopening some non-contravertial files
- Branch: oneperl
- !> x2p/EXTERN.h x2p/INTERN.h x2p/Makefile.SH x2p/a2p.c x2p/a2p.h
- !> x2p/a2p.pod x2p/a2p.y x2p/a2py.c x2p/cflags.SH
- !> x2p/find2perl.PL x2p/hash.c x2p/hash.h x2p/proto.h x2p/s2p.PL
- !> x2p/str.c x2p/str.h x2p/util.c x2p/util.h x2p/walk.c
-____________________________________________________________________________
-[ 144] By: gsar on 1997/10/16 22:26:07
- Log: Merge changes to Thread and add makefile fixups to accomodate Thread
- build. Once again, builds and runs all Thread tests using either
- compiler.
- Branch: win32/perl
- ! embed.h ext/Thread/Thread.xs interp.sym perl.c win32/Makefile
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 143] By: gsar on 1997/10/16 20:45:58
- Log: A quick merge of latest mainline.
- Branch: win32/perl
- +> ext/Thread/Makefile.PL ext/Thread/Notes ext/Thread/README
- +> ext/Thread/Thread.pm ext/Thread/Thread.xs
- +> ext/Thread/Thread/Queue.pm ext/Thread/Thread/Semaphore.pm
- +> ext/Thread/create.t ext/Thread/io.t ext/Thread/join.t
- +> ext/Thread/join2.t ext/Thread/list.t ext/Thread/lock.t
- +> ext/Thread/queue.t ext/Thread/sync.t ext/Thread/sync2.t
- +> ext/Thread/typemap ext/Thread/unsync.t ext/Thread/unsync2.t
- +> ext/Thread/unsync3.t ext/Thread/unsync4.t hints/os390.sh
- +> lib/base.pm t/lib/dosglob.t
- - ext/util/extliblist
- !> (integrate 134 files)
-
-----------------
-Version 5.004_53
-----------------
-
-____________________________________________________________________________
-[ 142] By: mbeattie on 1997/10/16 16:52:55
- Log: Add newly moved perl/ext/Thread/... files to MANIFEST.
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 141] By: mbeattie on 1997/10/16 16:42:13
- Log: Move perlext/Thread into perl/ext/Thread.
- Branch: perl
- +> ext/Thread/Makefile.PL ext/Thread/Notes ext/Thread/README
- +> ext/Thread/Thread.pm ext/Thread/Thread.xs
- +> ext/Thread/Thread/Queue.pm ext/Thread/Thread/Semaphore.pm
- +> ext/Thread/create.t ext/Thread/io.t ext/Thread/join.t
- +> ext/Thread/join2.t ext/Thread/list.t ext/Thread/lock.t
- +> ext/Thread/queue.t ext/Thread/sync.t ext/Thread/sync2.t
- +> ext/Thread/typemap ext/Thread/unsync.t ext/Thread/unsync2.t
- +> ext/Thread/unsync3.t ext/Thread/unsync4.t
- ! Configure
- Branch: perlext
- - Thread/Makefile.PL Thread/Notes Thread/README Thread/Thread.pm
- - Thread/Thread.xs Thread/Thread/Queue.pm
- - Thread/Thread/Semaphore.pm Thread/create.t Thread/io.t
- - Thread/join.t Thread/join2.t Thread/list.t Thread/lock.t
- - Thread/queue.t Thread/sync.t Thread/sync2.t Thread/typemap
- - Thread/unsync.t Thread/unsync2.t Thread/unsync3.t
- - Thread/unsync4.t
-____________________________________________________________________________
-[ 140] By: mbeattie on 1997/10/16 16:26:53
- Log: Correct threads_mutex locking in main thread destruction.
- Add per-interp thrsv to hold SV struct thread for main thread.
- Move Thread.xs MUTEX_DESTROY from end of threadstart to remove_thread.
- Add Thread/list.t test of Thread->list method.
- Let Thread::Semaphore methods up and down take an extra argument.
- Branch: perl
- ! embed.h interp.sym perl.c perl.h thread.h
- Branch: perlext
- + Thread/list.t
- ! Thread/Thread.xs Thread/Thread/Semaphore.pm
-____________________________________________________________________________
-[ 139] By: mbeattie on 1997/10/16 14:01:11
- Log: Fix up merge with 5.004_04.
- Branch: perl
- ! op.c perl.c t/lib/dosglob.t
-____________________________________________________________________________
-[ 138] By: TimBunce on 1997/10/16 12:58:22
- Log: Fix-up PerForce type for t/lib/dosglob.t from text to xtext
- Branch: maint-5.004/perl
- ! t/lib/dosglob.t
-____________________________________________________________________________
-[ 137] By: mbeattie on 1997/10/16 11:09:25
- Log: Merge maint-5.004 branch (5.004_04) with mainline.
- Branch: perl
- +> hints/os390.sh lib/base.pm t/lib/dosglob.t
- - ext/util/extliblist
- !> (integrate 132 files)
-____________________________________________________________________________
-[ 135] By: gsar on 1997/10/15 21:46:05
- Log: Win32 changes over 5.004_52:
- - rearranged MUTEX_LOCK()s in perl_destroy so that we don't call it
- on an already locked mutex.
- - other minor tweaks.
- Now builds and runs win32-version of Thread_52, passing all tests.
- Branch: win32/perl
- ! perl.c proto.h thread.h
-____________________________________________________________________________
-[ 134] By: gsar on 1997/10/15 18:19:31
- Log: fixup makefile.mk conflict.
- Branch: win32/perl
- ! win32/makefile.mk
-____________________________________________________________________________
-[ 133] By: gsar on 1997/10/15 18:02:46
- Log: Integrated latest changes from mainline into win32.
- Branch: win32/perl
- +> fakethr.h
- !> MANIFEST Porting/makerel Porting/patchls README.threads
- !> Todo.5.005 perl.c pp_hot.c thread.h util.c win32/config.bc
- !> win32/config.vc win32/config_H.bc win32/config_H.vc
- !> win32/makefile.mk
-
-----------------
-Version 5.004_52
-----------------
-
-____________________________________________________________________________
-[ 132] By: mbeattie on 1997/10/15 17:02:38
- Log: Remove out-of-date test Thread/cond.t.
- Branch: perlext
- - Thread/cond.t
-____________________________________________________________________________
-[ 131] By: mbeattie on 1997/10/15 16:57:45
- Log: Finish thread state machine: fixes global destruction of threads,
- detaching, joining etc. Alter FAKE_THREADS-specific fields to use
- new HAVE_THREAD_INTERN stuff. Updates docs. Various fixes to
- Thread.xs.
- Branch: perl
- ! MANIFEST README.threads Todo.5.005 perl.c util.c
- Branch: perlext
- ! Thread/Thread.xs Thread/queue.t
-____________________________________________________________________________
-[ 130] By: mbeattie on 1997/10/15 16:55:10
- Log: Add HAVE_THREAD_INTERN for platform-dependent struct thread additions.
- Fix ThrSETSTATE not to lock t->mutex itself.
- Branch: perl
- ! fakethr.h thread.h
-____________________________________________________________________________
-[ 129] By: mbeattie on 1997/10/15 16:53:35
- Log: Remove stale code from pp_entersub which breaks sub ownership locks.
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 128] By: TimBunce on 1997/10/15 15:55:26
- Log: Maintenance 5.004_04 changes
- Branch: maint-5.004/perl
- + hints/os390.sh lib/base.pm t/lib/dosglob.t
- - ext/util/extliblist
- ! Changes Configure INSTALL MANIFEST Makefile.SH Porting/makerel
- ! Porting/patchls Porting/pumpkin.pod README.vms av.c configpm
- ! doop.c eg/sysvipc/ipcsem emacs/cperl-mode.el embed.h
- ! ext/DynaLoader/DynaLoader.pm ext/IO/lib/IO/Socket.pm
- ! ext/util/make_ext global.sym gv.c hints/bsdos.sh
- ! hints/dec_osf.sh hints/dynixptx.sh hints/irix_6.sh
- ! hints/linux.sh hints/machten.sh hints/os2.sh hints/qnx.sh hv.c
- ! installperl lib/AutoLoader.pm lib/CPAN.pm
- ! lib/CPAN/FirstTime.pm lib/Carp.pm lib/Cwd.pm lib/English.pm
- ! lib/ExtUtils/Install.pm lib/ExtUtils/Liblist.pm
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/xsubpp
- ! lib/File/DosGlob.pm lib/File/Find.pm lib/FileHandle.pm
- ! lib/Getopt/Long.pm lib/Getopt/Std.pm lib/Math/Complex.pm
- ! lib/Sys/Hostname.pm lib/Sys/Syslog.pm lib/Test/Harness.pm
- ! lib/Time/Local.pm lib/autouse.pm lib/blib.pm
- ! lib/diagnostics.pm lib/getopt.pl lib/perl5db.pl lib/vars.pm
- ! makedepend.SH malloc.c mg.c miniperlmain.c myconfig op.c
- ! opcode.h os2/Changes os2/OS2/REXX/Makefile.PL
- ! os2/OS2/REXX/REXX.pm os2/os2.c patchlevel.h perl.c perl.h
- ! perly.c perly.fixer perly.y pod/perl.pod pod/perlapio.pod
- ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- ! pod/perlguts.pod pod/perlipc.pod pod/perlop.pod
- ! pod/perlrun.pod pod/perlsec.pod pod/perlsub.pod
- ! pod/perltrap.pod pod/perlvar.pod pod/perlxs.pod pp.c pp_ctl.c
- ! pp_hot.c pp_sys.c proto.h regcomp.c regexec.c scope.c sv.c
- ! t/TEST t/comp/proto.t t/lib/complex.t t/lib/io_sock.t
- ! t/lib/io_udp.t t/op/glob.t t/op/method.t t/op/misc.t
- ! t/op/ref.t t/op/runlevel.t t/op/split.t t/op/sprintf.t
- ! t/op/subst.t t/op/taint.t t/pragma/locale.t taint.c toke.c
- ! unixish.h util.c utils/h2ph.PL utils/h2xs.PL utils/perlbug.PL
- ! utils/perldoc.PL vms/perly_c.vms vms/vms.c vms/vmsish.h
- ! win32/Makefile win32/config_H.bc win32/config_H.vc
- ! win32/makefile.mk win32/pod.mak win32/win32.c win32/win32io.c
- ! win32/win32sck.c x2p/Makefile.SH x2p/util.c
-____________________________________________________________________________
-[ 127] By: mbeattie on 1997/10/15 10:00:18
- Log: Added fakethr.h.
- Branch: perl
- + fakethr.h
-____________________________________________________________________________
-[ 126] By: mbeattie on 1997/10/15 09:50:57
- Log: pthread_condattr_init in thread.h for OLD_PTHREADS_API.
- Branch: perl
- ! thread.h
-____________________________________________________________________________
-[ 125] By: mbeattie on 1997/10/15 09:09:24
- Log: Started rewriting thread state machine.
- Branch: perl
- ! perl.c thread.h
- Branch: perlext
- ! Thread/Thread.xs
-____________________________________________________________________________
-[ 124] By: gsar on 1997/10/14 00:23:15
- Log: Remove spurious extra MUTEX_LOCK in pp_entersub(). Now builds and passes
- tests in win32 version of latest perlext/Thread.
- Branch: win32/perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 123] By: gsar on 1997/10/13 23:18:38
- Log: Initial merge of win32 threads patch.
- Branch: win32/perl
- ! embed.h global.sym interp.sym perl.c perl.h pp_hot.c thread.h
- ! win32/Makefile win32/makedef.pl win32/makefile.mk
- ! win32/perllib.c win32/pod.mak win32/win32.h
-____________________________________________________________________________
-[ 122] By: gsar on 1997/10/10 20:58:40
- Log: Integrated changes on mainline into the win32 branch. Had to set
- P4USER=mbeattie for the resolve step (due to the presence of newly
- branched files that had not been submitted?)
- Branch: win32/perl
- +> Porting/makerel Porting/patchls README.threads Todo.5.005
- +> ext/attrs/Makefile.PL ext/attrs/attrs.pm ext/attrs/attrs.xs
- +> hints/newsos4.sh lib/File/DosGlob.pm lib/chat2.pl perlio.sym
- +> win32/bin/pl2bat.pl win32/bin/runperl.pl win32/bin/search.pl
- +> win32/bin/webget.pl win32/config.bc win32/config.vc
- +> win32/config_H.bc win32/config_H.vc win32/makefile.mk
- - win32/bin/pl2bat.bat win32/bin/search.bat win32/bin/test.bat
- - win32/bin/webget.bat win32/config.H win32/config.w32
- ! thread.h
- !> (integrate 858 files)
-____________________________________________________________________________
-[ 121] By: mbeattie on 1997/10/10 17:23:41
- Log: Tweak a few Thread tests.
- Branch: perlext
- + Thread/join2.t
- ! Thread/io.t Thread/sync2.t
-____________________________________________________________________________
-[ 120] By: mbeattie on 1997/10/10 17:22:46
- Log: Rewrite thread destruction system using linked list of threads.
- Still not completely done. Add methods self, equal, flags, list
- to Thread.xs. Add Thread_MAGIC_SIGNATURE check to typemap.
- Branch: perl
- ! perl.c perl.h thread.h
- Branch: perlext
- ! Thread/Thread.xs Thread/typemap
-____________________________________________________________________________
-[ 119] By: mbeattie on 1997/10/10 17:19:55
- Log: Fix up locking/synchronisation for pp_entersub.
- Branch: perl
- ! pp_hot.c
-____________________________________________________________________________
-[ 118] By: mbeattie on 1997/10/10 09:55:32
- Log: Put back entries in MANIFEST for the four now-returned win32/* files
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 117] By: mbeattie on 1997/10/10 08:12:23
- Log: Took out mystack_foo for good, fixed up interp.sym and win32/makedef.pl
- Branch: perl
- ! Todo.5.005 embed.h interp.sym perl.h win32/makedef.pl
-____________________________________________________________________________
-[ 116] By: mbeattie on 1997/10/08 15:41:08
- Log: Add missing sig_pipe definition to Thread.xs.
- Branch: perlext
- ! Thread/Thread.xs
-____________________________________________________________________________
-[ 115] By: mbeattie on 1997/10/08 15:40:46
- Log: Fix up 5.004_03 merge: remove missing win32 files from MANIFEST,
- add missing dTHR; to new function unwind_handler_stack() in mg.c
- and bump patchlevel.h to 5.004_52.
- Branch: perl
- ! MANIFEST mg.c patchlevel.h
-____________________________________________________________________________
-[ 114] By: mbeattie on 1997/10/08 10:19:27
- Log: Merge maint-5.004 branch (5.004_03) with mainline.
- MANIFEST is out of sync.
- Branch: perl
- +> win32/bin/pl2bat.pl win32/bin/runperl.pl win32/bin/search.pl
- +> win32/bin/webget.pl
- - win32/bin/pl2bat.bat win32/bin/search.bat win32/bin/test.bat
- - win32/bin/webget.bat
- !> (integrate 168 files)
-____________________________________________________________________________
-[ 113] By: mbeattie on 1997/10/05 17:52:49
- Log: Move init of global mutexes/cond vars earlier.
- Branch: perl
- ! perl.c
-____________________________________________________________________________
-[ 112] By: nick on 1997/10/04 15:25:28
- Log: Add perl.sym to MANIFEST
- Branch: oneperl
- ! MANIFEST
-____________________________________________________________________________
-[ 111] By: nick on 1997/10/04 15:23:37
- Log: Missing file
- Branch: oneperl
- + perl.sym
-____________________________________________________________________________
-[ 110] By: nick on 1997/10/04 13:04:26
- Log: Now builds the extensions as well
- Passes all tests
- Branch: oneperl
- ! XSUB.h embed.pl ext/DynaLoader/dlutils.c ext/Opcode/Opcode.xs
- ! mg.c op.c perl.c pp_ctl.c pp_hot.c pp_sys.c proto.h sv.c
- ! toke.c util.c writemain.SH
-____________________________________________________________________________
-[ 109] By: nick on 1997/10/04 12:02:14
- Log: Odd checkin issue
- Branch: oneperl
- ! dump.c global.sym gv.c hv.c malloc.c mg.c op.c opcode.h perl.c
- ! perly.c perly.c.diff perly.h perly.y pp.c pp_hot.c pp_sys.c
- ! proto.h scope.c sv.c toke.c universal.c util.c vms/perly_c.vms
- ! vms/perly_h.vms writemain.SH
-____________________________________________________________________________
-[ 108] By: nick on 1997/10/04 11:12:52
- Log: Added lots of (missing) prototypes (ckprotos is util to check)
- Fixed missing aTHIS flagged by above.
- -DUSE_THISPTR passes minitest!
- Branch: oneperl
- + ckprotos
- ! dump.c global.sym gv.c hv.c malloc.c mg.c op.c opcode.h perl.c
- ! perly.c perly.c.diff perly.h perly.y pp.c pp_hot.c pp_sys.c
- ! proto.h scope.c sv.c toke.c universal.c util.c vms/perly_c.vms
- ! vms/perly_h.vms
-____________________________________________________________________________
-[ 107] By: nick on 1997/10/03 22:36:52
- Log: .y muddle fixup - will get this sorted oneday ...
- Branch: oneperl
- ! miniperlmain.c perly.c perly.c.diff perly.h vms/perly_c.vms
- ! vms/perly_h.vms
-____________________________________________________________________________
-[ 106] By: mbeattie on 1997/10/03 17:12:33
- Log: Remove last traces of "tokenbuf as temp buffer" and removed it
- from struct thread. Added missing thr->Tfoo defines for statbuf
- and timesbuf and removed unused Tbuf field.
- Branch: perl
- ! doio.c mg.c perl.c pp_sys.c sv.c thread.h
-____________________________________________________________________________
-[ 105] By: nick on 1997/10/03 15:56:50
- Log: dTHIS -> hasTHIS, dTHR -> dTHR; builds without THISPTR with/without USE_THREADS
- Branch: oneperl
- ! XSUB.h av.c deb.c doio.c doop.c dump.c embed.pl global.sym
- ! gv.c hv.c mg.c op.c perl.c perl.h perlio.c perly.c pp.c pp.h
- ! pp_ctl.c pp_hot.c pp_sys.c regcomp.c regexec.c run.c scope.c
- ! sv.c taint.c thread.h toke.c universal.c util.c
-____________________________________________________________________________
-[ 104] By: mbeattie on 1997/10/03 15:23:25
- Log: Back out sv_bless3 change which made pp_bless zap '~'-magic.
- Branch: perl
- ! global.sym pp.c proto.h sv.c
-____________________________________________________________________________
-[ 103] By: mbeattie on 1997/10/03 15:17:39
- Log: Fixed sv_mutex locking for new_SV, del_SV and nice_chunks.
- Branch: perl
- ! av.c hv.c perl.h sv.c
-____________________________________________________________________________
-[ 102] By: mbeattie on 1997/10/03 11:53:51
- Log: Reliable thread signal handling.
- Branch: perl
- ! global.sym mg.c perl.c perl.h
- Branch: perlext
- ! Thread/Thread.xs
-____________________________________________________________________________
-[ 101] By: nick on 1997/10/02 20:43:17
- Log: Cleanup perly.y stuff
- Branch: oneperl
- ! embed.h perly.c perly.c.diff vms/perly_c.vms vms/perly_h.vms
-____________________________________________________________________________
-[ 100] By: nick on 1997/10/02 18:54:08
- Log: Compiles with less invasive aTHIS adding
- Branch: oneperl
- + nothis.sym
- ! MANIFEST XSUB.h av.c cop.h deb.c doio.c doop.c dump.c embed.h
- ! embed.pl global.sym gv.c gv.h handy.h hv.c hv.h mg.c op.c op.h
- ! opcode.h perl.c perl.h perlio.c perlsdio.h perly.c
- ! perly.c.diff perly.y pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c
- ! proto.h regcomp.c regcomp.h regexec.c run.c scope.c scope.h
- ! sv.c sv.h t/op/sort.t taint.c thread.h toke.c universal.c
- ! util.c vars.h
-
-----------------
-Version 5.004_51
-----------------
-
-____________________________________________________________________________
-[ 99] By: mbeattie on 1997/10/02 17:23:48
- Log: Added Thread/queue.t.
- Branch: perlext
- + Thread/queue.t
-____________________________________________________________________________
-[ 98] By: mbeattie on 1997/10/02 17:19:44
- Log: Bumped patchlevel to 51. Updated Todo.5.005.
- Branch: perl
- ! Todo.5.005 patchlevel.h
-____________________________________________________________________________
-[ 97] By: mbeattie on 1997/10/02 17:07:47
- Log: Update README.threads amd Thread/README
- Branch: perl
- ! README.threads
- Branch: perlext
- ! Thread/README
-____________________________________________________________________________
-[ 96] By: mbeattie on 1997/10/02 16:58:47
- Log: Configure -Dusethreads hints for dec_osf and solaris_2 and
- fix sv_bless3 prototype.
- Branch: perl
- ! hints/dec_osf.sh hints/solaris_2.sh sv.c
-____________________________________________________________________________
-[ 95] By: mbeattie on 1997/10/02 16:50:21
- Log: Fixed broken typemap for Thread.
- Branch: perlext
- ! Thread/typemap
-____________________________________________________________________________
-[ 94] By: mbeattie on 1997/10/02 16:34:03
- Log: Fix pod text in Lint.pm for private-names option.
- Branch: perlext
- ! Compiler/B/Lint.pm
-____________________________________________________________________________
-[ 93] By: mbeattie on 1997/10/02 13:44:46
- Log: Add Todo.5.005 to MANIFEST and submit remade embed.h.
- Branch: perl
- ! MANIFEST embed.h
-____________________________________________________________________________
-[ 92] By: mbeattie on 1997/10/02 13:27:10
- Log: Add Todo.5.005
- Branch: perl
- + Todo.5.005
-____________________________________________________________________________
-[ 91] By: nick on 1997/10/01 20:23:38
- Log: Raw _T# trial
- Branch: oneperl
- ! embed.h embed.pl proto.h sv.c
-____________________________________________________________________________
-[ 90] By: nick on 1997/10/01 18:22:03
- Log: THIS + new sort stuff
- Branch: oneperl
- ! miniperlmain.c perl.c pp_ctl.c proto.h util.c
-____________________________________________________________________________
-[ 89] By: nick on 1997/10/01 18:03:05
- Log: qsort cleanup - now tailored to perl's use and 'this' aware.
- Branch: oneperl
- ! pp_ctl.c proto.h util.c
-____________________________________________________________________________
-[ 88] By: mbeattie on 1997/10/01 17:04:12
- Log: Start of Configure support for -Dusethreads plus associated
- Linux hints.
- Branch: perl
- ! Configure hints/linux.sh
-____________________________________________________________________________
-[ 87] By: mbeattie on 1997/10/01 17:03:34
- Log: Move runops_foo prototypes from proto.h to early in perl.h.
- Branch: perl
- ! perl.h proto.h
-____________________________________________________________________________
-[ 86] By: nick on 1997/09/30 19:15:21
- Log: Debug hackery to thread.h - temporary
- Quick-fix qsort() replacement - more to come.
- Branch: oneperl
- ! thread.h util.c
-____________________________________________________________________________
-[ 85] By: mbeattie on 1997/09/30 15:50:27
- Log: Added Lint option regexp-variables.
- Branch: perlext
- ! Compiler/B/Lint.pm
-____________________________________________________________________________
-[ 84] By: mbeattie on 1997/09/30 15:11:07
- Log: Merge maint-5.004 branch (5.004_01) with mainline.
- Branch: perl
- +> Porting/makerel Porting/patchls hints/newsos4.sh
- +> lib/File/DosGlob.pm lib/chat2.pl perlio.sym win32/config.bc
- +> win32/config.vc win32/config_H.bc win32/config_H.vc
- +> win32/makefile.mk
- - win32/config.H win32/config.w32
- !> (integrate 109 files)
-____________________________________________________________________________
-[ 83] By: TimBunce on 1997/09/30 14:27:09
- Log: Maintenance 5.004_03 changes (addendum)
- Branch: maint-5.004/perl
- - win32/bin/search.bat
-____________________________________________________________________________
-[ 82] By: TimBunce on 1997/09/30 14:11:29
- Log: Maintenance 5.004_03 changes
- Branch: maint-5.004/perl
- + win32/bin/pl2bat.pl win32/bin/runperl.pl win32/bin/search.pl
- + win32/bin/webget.pl
- - win32/bin/pl2bat.bat win32/bin/runperl.bat win32/bin/test.bat
- - win32/bin/webget.bat
- ! Changes Configure MANIFEST Makefile.SH Porting/makerel
- ! ext/DynaLoader/DynaLoader.pm hints/hpux.sh hints/linux.sh
- ! hints/sco.sh hints/sunos_4_1.sh installhtml lib/CPAN.pm
- ! lib/ExtUtils/MM_Unix.pm lib/FileCache.pm lib/Math/Complex.pm
- ! lib/Math/Trig.pm lib/blib.pm os2/diff.configure patchlevel.h
- ! perl.c pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
- ! pod/perlop.pod pod/perlre.pod pod/perlrun.pod pod/pod2man.PL
- ! pp_ctl.c pp_sys.c t/lib/complex.t t/pragma/locale.t toke.c
- ! utils/perlbug.PL win32/Makefile win32/makefile.mk
- ! win32/win32.c
-____________________________________________________________________________
-[ 81] By: TimBunce on 1997/09/30 13:17:27
- Log: Maintenance 5.004_02 changes
- Branch: maint-5.004/perl
- + win32/bin/runperl.bat
- ! Changes Configure INSTALL MANIFEST Makefile.SH Porting/patchls
- ! README.os2 README.win32 Todo XSUB.h av.c configpm doio.c
- ! dosish.h embed.h ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
- ! ext/DB_File/typemap ext/GDBM_File/typemap ext/IO/IO.xs
- ! ext/IO/lib/IO/File.pm ext/IO/lib/IO/Handle.pm
- ! ext/IO/lib/IO/Socket.pm ext/NDBM_File/typemap
- ! ext/ODBM_File/ODBM_File.xs ext/POSIX/POSIX.xs
- ! ext/SDBM_File/typemap global.sym gv.c hints/cxux.sh
- ! hints/os2.sh hints/sunos_4_1.sh hints/svr4.sh installhtml
- ! lib/Bundle/CPAN.pm lib/CPAN.pm lib/CPAN/FirstTime.pm
- ! lib/CPAN/Nox.pm lib/Carp.pm lib/Class/Struct.pm
- ! lib/Exporter.pm lib/ExtUtils/Command.pm lib/ExtUtils/Embed.pm
- ! lib/ExtUtils/Install.pm lib/ExtUtils/Liblist.pm
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm
- ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm
- ! lib/ExtUtils/xsubpp lib/File/Compare.pm lib/File/Copy.pm
- ! lib/File/Find.pm lib/File/Path.pm lib/FileHandle.pm
- ! lib/I18N/Collate.pm lib/IPC/Open3.pm lib/Net/hostent.pm
- ! lib/Pod/Html.pm lib/Shell.pm lib/Sys/Hostname.pm
- ! lib/Sys/Syslog.pm lib/Term/ReadLine.pm lib/Time/Local.pm
- ! lib/UNIVERSAL.pm lib/dumpvar.pl lib/ftp.pl lib/perl5db.pl
- ! malloc.c mg.c op.c opcode.pl os2/Changes os2/Makefile.SHs
- ! os2/diff.configure os2/os2.c os2/os2ish.h patchlevel.h perl.c
- ! perl.h pod/perlapio.pod pod/perlbook.pod pod/perldebug.pod
- ! pod/perldelta.pod pod/perldiag.pod pod/perlembed.pod
- ! pod/perlfunc.pod pod/perlguts.pod pod/perlop.pod
- ! pod/perlre.pod pod/perlrun.pod pod/perltoc.pod
- ! pod/perltrap.pod pod/perlvar.pod pod/perlxstut.pod
- ! pod/pod2man.PL pod/splitpod pp.c pp_ctl.c pp_hot.c pp_sys.c
- ! proto.h regcomp.c regexec.c scope.c sv.c t/TEST t/base/lex.t
- ! t/comp/cmdopt.t t/comp/term.t t/lib/db-btree.t t/lib/db-hash.t
- ! t/lib/db-recno.t t/lib/filehand.t t/lib/gdbm.t t/lib/ndbm.t
- ! t/lib/odbm.t t/lib/sdbm.t t/op/local.t t/op/magic.t
- ! t/op/pack.t t/op/re_tests t/op/ref.t t/op/regexp.t t/op/stat.t
- ! t/op/substr.t t/op/universal.t toke.c universal.c util.c
- ! utils/Makefile utils/h2ph.PL utils/perlbug.PL utils/perldoc.PL
- ! vms/config.vms vms/descrip.mms vms/ext/filespec.t
- ! vms/sockadapt.c vms/sockadapt.h vms/test.com vms/vms.c
- ! vms/vmsish.h win32/Makefile win32/bin/pl2bat.bat
- ! win32/config.bc win32/config.vc win32/config_H.bc
- ! win32/config_H.vc win32/config_h.PL win32/makedef.pl
- ! win32/makefile.mk win32/perllib.c win32/win32.c win32/win32.h
- ! win32/win32io.c win32/win32io.h win32/win32iop.h
- ! win32/win32sck.c
-____________________________________________________________________________
-[ 80] By: nick on 1997/09/29 20:31:43
- Log: Add some prototypes in attempt to flush out errors
- Tidy up vars.h usage.
- Branch: oneperl
- ! av.c embed.h hv.c opcode.h perl.c perl.h perlio.c pp_sys.c
- ! proto.h util.c vars.h
-____________________________________________________________________________
-[ 79] By: nick on 1997/09/29 17:12:07
- Log: Builds and passes tests without THISPTR
- Branch: oneperl
- ! MANIFEST global.sym perl.c perl.h vars.h
-____________________________________________________________________________
-[ 78] By: mbeattie on 1997/09/29 16:57:23
- Log: Re-introduce the changes from change 68 (runops becomes a
- function pointer and sv_bless3 for '~'-magic) which got lost
- during the preparation for the maint-merge.
- Branch: perl
- ! global.sym perl.h pp.c proto.h run.c sv.c
-____________________________________________________________________________
-[ 77] By: mbeattie on 1997/09/29 16:44:16
- Log: Start merge with maint-5.004 branch by creating an ancestral
- branch point via a fake resolution with the maint-merge branch.
- See Perforce Tech Note 9 for details.
- Branch: perl
- !> (integrate 864 files)
-____________________________________________________________________________
-[ 76] By: nick on 1997/09/28 19:04:42
- Log: Code with this pointer compiles (but core dumps)
- Branch: oneperl
- ! EXTERN.h INTERN.h XSUB.h av.c av.h cop.h cv.h deb.c doio.c
- ! doop.c dosish.h dump.c form.h gv.c gv.h handy.h hv.c hv.h
- ! keywords.h mg.c mg.h miniperlmain.c nostdio.h op.c op.h
- ! opcode.h patchlevel.h perl.c perl.h perlio.c perlio.h
- ! perlsdio.h perlsfio.h perly.c perly.c.diff perly.h perly.y
- ! pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c
- ! regcomp.h regexec.c regexp.h run.c scope.c scope.h sv.c sv.h
- ! taint.c thread.h toke.c universal.c unixish.h util.c util.h
- ! vars.h
-____________________________________________________________________________
-[ 75] By: nick on 1997/09/28 15:45:35
- Log: Quasi sensible starting point for aTHIS addition.
- Branch: oneperl
- ! perl.c perl.h pp_ctl.c sv.c thread.h toke.c util.c
-____________________________________________________________________________
-[ 74] By: nick on 1997/09/28 11:23:32
- Log: Ooops - unwind perly.* stuff for now
- Branch: oneperl
- ! perly.c perly.h perly.y vms/perly_c.vms vms/perly_h.vms
-____________________________________________________________________________
-[ 73] By: nick on 1997/09/28 11:17:23
- Log: Builds and passes all tests again
- Branch: oneperl
- ! embed.pl ext/DB_File/DB_File.xs gv.c perl.c perl.h perly.y
- ! pp.h proto.h thread.sym vms/perly_c.vms vms/perly_h.vms
-____________________________________________________________________________
-[ 72] By: nick on 1997/09/28 10:47:01
- Log: Save "important things" before re-try
- Branch: oneperl
- + vars.h
- ! embed.pl thread.h thread.sym
-____________________________________________________________________________
-[ 71] By: nick on 1997/09/26 17:47:31
- Log: Basic hacks to build with USE_THISPTR, not yet useful
- but builds miniperl and passes minitest with all thread
- variables via a _GLOBAL_ thr variable rather than globals.
- Now for the local thr variable ...
- Branch: oneperl
- + thread.sym
- ! MANIFEST README.threads XSUB.h av.c cv.h deb.c doio.c doop.c
- ! dump.c embed.pl ext/DB_File/DB_File.xs gv.c hints/solaris_2.sh
- ! hv.c mg.c op.c perl.c perl.h pp.c pp_ctl.c pp_hot.c pp_sys.c
- ! proto.h regcomp.c regexec.c run.c scope.c sv.c thread.h toke.c
- ! util.c vms/vms.c
-____________________________________________________________________________
-[ 70] By: mbeattie on 1997/09/23 14:29:23
- Log: Branch oneperl from mainline.
- Branch: oneperl
- +> (branch 871 files)
-____________________________________________________________________________
-[ 69] By: mbeattie on 1997/09/22 16:02:37
- Log: struct thread now stored in an SV and uses '~'-magic for access.
- Branch: perl
- ! thread.h
- Branch: perlext
- ! Thread/Thread.xs Thread/typemap
-____________________________________________________________________________
-[ 68] By: mbeattie on 1997/09/22 16:01:48
- Log: runops becomes a funtion pointer and sv_bless3 created
- to avoid pointer forgery with '~'-magic.
- Branch: perl
- ! global.sym perl.c perl.h pp.c proto.h run.c sv.c
-____________________________________________________________________________
-[ 67] By: mbeattie on 1997/09/22 15:45:56
- Log: More fprintf -> PerlIO_printf changes.
- Branch: perl
- ! perl.c pp_hot.c util.c
-____________________________________________________________________________
-[ 66] By: mbeattie on 1997/09/22 15:10:40
- Log: Minor multi-threading patches for VMS.
- Branch: perl
- ! mg.c thread.h vms/vms.c
-____________________________________________________________________________
-[ 65] By: mbeattie on 1997/09/15 14:09:11
- Log: Add undefined-subs option to Lint.pm.
- Branch: perlext
- ! Compiler/B/Lint.pm
-____________________________________________________________________________
-[ 64] By: mbeattie on 1997/09/10 16:39:41
- Log: Debugging output for lock handling.
- Branch: perl
- ! mg.c pp.c pp_hot.c util.c
-____________________________________________________________________________
-[ 63] By: mbeattie on 1997/09/10 14:49:00
- Log: Move Thread/Semaphore.pm to Thread/Thread/Semaphore.pm
- Branch: perlext
- +> Thread/Thread/Semaphore.pm
- - Thread/Semaphore.pm
-____________________________________________________________________________
-[ 62] By: mbeattie on 1997/09/10 14:47:31
- Log: Move Thread/Queue.pm to Thread/Thread/Queue.pm
- Branch: perlext
- +> Thread/Thread/Queue.pm
- - Thread/Queue.pm
-____________________________________________________________________________
-[ 61] By: mbeattie on 1997/09/10 13:56:50
- Log: Solaris fixes: delete pad and padname from thread.h and remove
- MUTEX_* stuff when malloc.c gets copied to x2p/malloc.c.
- Branch: perl
- ! thread.h x2p/Makefile.SH
-
-----------------
-Version 5.004_50 First developer release towards 5.005
-----------------
-
-Maintenance of the 5.004 version of perl continues with the 5.004_xx
-series, where 'xx' is <= 49. Development of the next version, 5.005,
-starts with 5.004_50.
-
-____________________________________________________________________________
-[ 60] By: mbeattie on 1997/09/09 16:57:41
- Log: Update README.threads to mention -DL.
- Branch: perl
- ! README.threads
-____________________________________________________________________________
-[ 59] By: mbeattie on 1997/09/09 16:49:08
- Log: Add Thread modules Queue.pm and Semaphore.pm
- Branch: perlext
- + Thread/Queue.pm Thread/Semaphore.pm
-____________________________________________________________________________
-[ 58] By: mbeattie on 1997/09/09 16:33:45
- Log: Update README.threads
- Branch: perl
- ! README.threads
-____________________________________________________________________________
-[ 57] By: mbeattie on 1997/09/09 16:26:47
- Log: Add debug info to Thread typemap.
- Branch: perlext
- ! Thread/typemap
-____________________________________________________________________________
-[ 56] By: mbeattie on 1997/09/09 15:04:26
- Log: Rewrite synchronisation of subs/methods and add attrs
- extension for specifying 'locked' and 'method' attributes.
- Branch: perl
- + ext/attrs/Makefile.PL ext/attrs/attrs.pm ext/attrs/attrs.xs
- ! MANIFEST cv.h embed.h global.sym op.c perl.c pp.c pp_ctl.c
- ! pp_hot.c proto.h sv.c sv.h toke.c
- Branch: perlext
- ! Thread/Thread.pm Thread/Thread.xs Thread/sync.t Thread/sync2.t
-____________________________________________________________________________
-[ 55] By: mbeattie on 1997/09/03 16:34:47
- Log: Add new keyword "lock" to Opcode.pm
- Branch: perl
- ! ext/Opcode/Opcode.pm
-____________________________________________________________________________
-[ 54] By: mbeattie on 1997/09/03 14:44:44
- Log: Run embed.pl and keywords.pl to complete RESTART -> INIT change
- Branch: perl
- ! embed.h keywords.h
-____________________________________________________________________________
-[ 53] By: mbeattie on 1997/09/03 13:52:24
- Log: Add to MANIFEST: README.threads, lib/ISA.pm, lib/Class/Fields.pm
- Branch: perl
- ! MANIFEST
-____________________________________________________________________________
-[ 52] By: mbeattie on 1997/09/03 13:41:20
- Log: Let Lint private_names catch out-of-package _foo methods.
- Branch: perlext
- ! Compiler/B/Lint.pm
-____________________________________________________________________________
-[ 51] By: mbeattie on 1997/09/03 13:20:12
- Log: Bump patchlevel.h to 5.004_50
- Branch: perl
- ! patchlevel.h
-____________________________________________________________________________
-[ 50] By: mbeattie on 1997/09/03 12:31:48
- Log: Make compiler build/work with devel 5.005
- Branch: perlext
- ! Compiler/B.xs Compiler/B/Asmdata.pm Compiler/bytecode.h
- ! Compiler/bytecode.pl Compiler/byterun.c Compiler/byterun.h
-____________________________________________________________________________
-[ 49] By: mbeattie on 1997/09/03 12:28:05
- Log: Rename RESTART to INIT and associated changes
- Branch: perl
- ! interp.sym keywords.pl op.c perl.c perl.h perly.c perly.y
- ! toke.c vms/perly_c.vms
-____________________________________________________________________________
-[ 48] By: mbeattie on 1997/09/02 15:54:27
- Log: Added private-names option.
- Branch: perlext
- ! Compiler/B/Lint.pm
-____________________________________________________________________________
-[ 47] By: mbeattie on 1997/09/02 11:54:55
- Log: For compiler's CC, make PP_EVAL, PP_ENTERTRY work with JMPENV.
- Branch: perlext
- ! Compiler/cc_runtime.h
-____________________________________________________________________________
-[ 46] By: mbeattie on 1997/08/28 19:40:08
- Log: Missing sprintf in try_autoload.
- Branch: perlext
- ! Compiler/B/C.pm
-____________________________________________________________________________
-[ 45] By: mbeattie on 1997/08/13 16:15:25
- Log: Threading fixups for Digital UNIX.
- Branch: perl
- ! README.threads malloc.c perl.h toke.c
-____________________________________________________________________________
-[ 44] By: mbeattie on 1997/08/11 15:46:29
- Log: Assorted changes for multi-threading (now works rather more).
- Branch: perl
- + README.threads
- ! gv.c mg.c op.c perl.c perl.h pp_ctl.c pp_hot.c sv.c thread.h
- ! toke.c util.c
- Branch: perlext
- ! Thread/Makefile.PL Thread/Thread.xs Thread/lock.t
- ! Thread/unsync.t
-____________________________________________________________________________
-[ 43] By: mbeattie on 1997/08/08 14:11:00
- Log: Made Lint check subs (and -u packages).
- Added support for dollar_underscore and implicit $_ in foreach.
- Branch: perlext
- ! Compiler/B/Lint.pm
-____________________________________________________________________________
-[ 42] By: TimBunce on 1997/07/25 17:15:57
- Log: Maintenance 5.004_01 changes
- Branch: maint-5.004/perl
- + Porting/makerel Porting/patchls hints/newsos4.sh
- + lib/File/DosGlob.pm lib/chat2.pl perlio.sym win32/config.bc
- + win32/config.vc win32/config_H.bc win32/config_H.vc
- + win32/makefile.mk
- - win32/config.H win32/config.w32
- ! Changes Configure EXTERN.h INSTALL MANIFEST Makefile.SH
- ! Porting/pumpkin.pod README README.win32 doio.c embed.h
- ! ext/DynaLoader/dl_aix.xs ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
- ! ext/SDBM_File/Makefile.PL ext/SDBM_File/sdbm/Makefile.PL
- ! global.sym hints/next_3.sh hints/next_4.sh hints/svr4.sh
- ! installhtml installman lib/AutoLoader.pm lib/AutoSplit.pm
- ! lib/CGI/Push.pm lib/CPAN.pm lib/ExtUtils/Install.pm
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm
- ! lib/ExtUtils/MM_VMS.pm lib/ExtUtils/MM_Win32.pm
- ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm
- ! lib/ExtUtils/xsubpp lib/Pod/Html.pm lib/Pod/Text.pm
- ! lib/Sys/Syslog.pm lib/Term/ReadLine.pm lib/Test/Harness.pm
- ! lib/ftp.pl mg.c op.c patchlevel.h perl.c perl.h perl_exp.SH
- ! perlio.c pod/checkpods.PL pod/perlbook.pod pod/perldata.pod
- ! pod/perldebug.pod pod/perldelta.pod pod/perldiag.pod
- ! pod/perlembed.pod pod/perlfaq4.pod pod/perlfaq8.pod
- ! pod/perlfaq9.pod pod/perlfunc.pod pod/perlguts.pod
- ! pod/perllol.pod pod/perlop.pod pod/perlrun.pod pod/perlsub.pod
- ! pod/perltoc.pod pod/perltoot.pod pod/pod2man.PL pod/roffitall
- ! pod/splitpod pp.c pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c
- ! regcomp.h regexec.c sv.c t/lib/safe2.t t/op/flip.t
- ! t/op/groups.t t/op/magic.t t/op/mkdir.t t/op/re_tests
- ! t/op/regexp.t t/op/split.t t/op/stat.t t/op/subst.t
- ! t/op/taint.t util.c utils/Makefile utils/h2xs.PL
- ! utils/perlbug.PL vms/ext/DCLsym/DCLsym.pm
- ! vms/ext/Stdio/Stdio.pm vms/gen_shrfls.pl vms/perlvms.pod
- ! win32/Makefile win32/config_sh.PL win32/include/sys/socket.h
- ! win32/makedef.pl win32/makeperldef.pl win32/perlglob.c
- ! win32/perllib.c win32/win32.c win32/win32.h win32/win32io.c
- ! win32/win32io.h win32/win32iop.h win32/win32sck.c
-____________________________________________________________________________
-[ 41] By: mbeattie on 1997/07/24 14:57:53
- Log: Start support for fake threads.
- pp_lock now returns its argument.
- Branch: perl
- ! MANIFEST Makefile.SH cv.h op.c opcode.h opcode.pl perl.c
- ! perl.h pp.c pp_ctl.c pp_hot.c proto.h sv.h thread.h toke.c
- ! util.c
- Branch: perlext
- ! Thread/Thread.xs
-____________________________________________________________________________
-[ 40] By: mbeattie on 1997/07/24 14:55:07
- Log: Add missing reset of eval_owner if doeval() fails to parse.
- Branch: perl
- ! pp_ctl.c
-____________________________________________________________________________
-[ 39] By: mbeattie on 1997/07/17 13:35:51
- Log: Fix multiple problems with lexical @_.
- Branch: perl
- ! cop.h op.c perl.c pp.c pp_ctl.c pp_hot.c t/op/do.t thread.h
- ! toke.c
-____________________________________________________________________________
-[ 38] By: mbeattie on 1997/07/16 17:02:09
- Log: Change %lx to %x in B::CV::save to prevent some CV
- fields becoming 0 in the init section. Add missing
- write_back in B::Stackobj::Padsv::load_double to fix
- test 22 of op/my.t.
- Branch: perlext
- ! Compiler/B/C.pm Compiler/B/Stackobj.pm
-____________________________________________________________________________
-[ 37] By: mbeattie on 1997/07/10 11:28:16
- Log: Branch win32 developments from main perl branch.
- Branch: win32/perl
- +> (branch 867 files)
-____________________________________________________________________________
-[ 36] By: mbeattie on 1997/07/05 11:58:05
- Log: B::CC::pp_padsv must cope with vivify_ref (5.004)
- as well as provide_ref (5.003).
- Branch: perlext
- ! Compiler/B/C.pm Compiler/B/CC.pm Compiler/NOTES
-____________________________________________________________________________
-[ 35] By: mbeattie on 1997/07/05 11:55:18
- Log: Introduce pp_lock.
- Branch: perl
- ! embed.h global.sym keywords.h keywords.pl opcode.h opcode.pl
- ! pp.c pp_ctl.c toke.c
-____________________________________________________________________________
-[ 34] By: mbeattie on 1997/07/01 12:24:28
- Log: Support for op in global register (still buggy)
- Branch: perl
- ! embed.h global.sym gv.c op.c perl.c perl.h pp_ctl.c pp_sys.c
- ! proto.h scope.c scope.h thread.h
-____________________________________________________________________________
-[ 33] By: mbeattie on 1997/06/24 16:34:24
- Log: Branch lexical warnings from perl branch.
- Branch: lexwarn/perl
- +> (branch 867 files)
-____________________________________________________________________________
-[ 32] By: mbeattie on 1997/06/24 14:33:57
- Log: Branch integration of maint-5.004 from relperl.
- Branch: mainline/perl
- +> (branch 600 files)
- Branch: maint-5.004/perl
- +> (branch 864 files)
-____________________________________________________________________________
-[ 31] By: mbeattie on 1997/06/20 11:46:50
- Log: corrected bad_type() prototype.
- Branch: perl
- ! op.c
-____________________________________________________________________________
-[ 30] By: mbeattie on 1997/06/12 12:38:05
- Log: Tweak README.
- Branch: perlext
- ! Thread/README
-____________________________________________________________________________
-[ 29] By: mbeattie on 1997/06/12 12:34:59
- Log: Document -m option of CC backend.
- Branch: perlext
- ! Compiler/NOTES
-____________________________________________________________________________
-[ 28] By: mbeattie on 1997/06/12 12:25:05
- Log: Support sysseek introduced in 5.004.
- Branch: perlext
- ! Compiler/ccop.c Compiler/ccop.h
-____________________________________________________________________________
-[ 27] By: mbeattie on 1997/06/05 14:20:51
- Log: More fixups for thrperl integration.
- Branch: perl
- ! ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
- ! ext/Opcode/Makefile.PL ext/Opcode/Opcode.pm
- ! ext/Opcode/Opcode.xs gv.c hv.c mg.c op.c perl.c perly.c
- ! perly.y pp.c pp_ctl.c run.c scope.c sv.c sv.h thread.h toke.c
- ! util.c
-____________________________________________________________________________
-[ 25] By: mbeattie on 1997/05/28 15:11:24
- Log: Fixups for thrperl integration.
- Branch: perl
- ! embed.h keywords.h op.c opcode.h perl.c util.c
-____________________________________________________________________________
-[ 24] By: mbeattie on 1997/05/26 20:10:42
- Log: Integrate thrperl 5.003->5.004.
- Branch: perl
- +> thread.h
- !> (integrate 33 files)
-____________________________________________________________________________
-[ 23] By: mbeattie on 1997/05/26 11:45:39
- Log: Fix ppname when saving subs.
- Branch: perlext
- ! Compiler/B/C.pm
-____________________________________________________________________________
-[ 22] By: mbeattie on 1997/05/26 11:45:03
- Log: -mFoo option now forces -uFoo.
- Branch: perlext
- ! Compiler/B/CC.pm
-____________________________________________________________________________
-[ 21] By: mbeattie on 1997/05/26 11:43:37
- Log: Put back objsym/savesym (used by walkoptree_exec).
- Branch: perlext
- ! Compiler/B.pm
-____________________________________________________________________________
-[ 20] By: mbeattie on 1997/05/26 11:38:45
- Log: Add avhv_store_ent. Add missing avhv_* to global.sym.
- Branch: perl
- ! av.c global.sym
-____________________________________________________________________________
-[ 19] By: mbeattie on 1997/05/25 21:19:38
- Log: Fix up integration 5.003->5.004.
- Branch: perl
- + lib/Class/Fields.pm lib/ISA.pm
- ! av.c ext/DB_File/DB_File.xs perl.c pp.c pp_hot.c proto.h
- ! toke.c
-____________________________________________________________________________
-[ 18] By: mbeattie on 1997/05/25 10:31:21
- Log: First stab at 5.003 -> 5.004 integration.
- Branch: perl
- +> (branch 291 files)
- - Changes.Conf ext/DynaLoader/dl_os2.xs
- - ext/FileHandle/FileHandle.pm ext/FileHandle/FileHandle.xs
- - ext/FileHandle/Makefile.PL ext/SDBM_File/sdbm/readme.ps
- - ext/Safe/Makefile.PL ext/Safe/Safe.pm ext/Safe/Safe.xs
- - hints/aux.sh hints/dnix.sh hints/irix_6_2.sh lib/chat2.inter
- - lib/chat2.pl lib/splain os2/README os2/README.old
- - os2/diff.db_file os2/notes pod/perlovl.pod t/lib/safe.t
- - t/op/overload.t t/re_tests vms/Makefile x2p/a2p.man
- - x2p/handy.h x2p/s2p.man
- !> (integrate 392 files)
-____________________________________________________________________________
-[ 17] By: mbeattie on 1997/05/24 18:46:49
- Log: Wholesale update to 5.004.
- Branch: relperl
- + Changes5.000 Changes5.001 Changes5.002 Changes5.003
- + Porting/Glossary Porting/pumpkin.pod README.amiga
- + README.cygwin32 README.os2 README.plan9 README.qnx
- + README.win32 compat3.sym configure.gnu cygwin32/cw32imp.h
- + cygwin32/gcc2 cygwin32/ld2 cygwin32/perlgcc cygwin32/perlld
- + eg/cgi/RunMeFirst eg/cgi/clickable_image.cgi eg/cgi/cookie.cgi
- + eg/cgi/crash.cgi eg/cgi/customize.cgi eg/cgi/diff_upload.cgi
- + eg/cgi/file_upload.cgi eg/cgi/frameset.cgi eg/cgi/index.html
- + eg/cgi/internal_links.cgi eg/cgi/javascript.cgi
- + eg/cgi/monty.cgi eg/cgi/multiple_forms.cgi
- + eg/cgi/nph-clock.cgi eg/cgi/popup.cgi eg/cgi/save_state.cgi
- + eg/cgi/tryit.cgi eg/cgi/wilogo.gif.uu
- + ext/DynaLoader/dl_cygwin32.xs ext/IO/IO.pm ext/IO/IO.xs
- + ext/IO/Makefile.PL ext/IO/README ext/IO/lib/IO/File.pm
- + ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Pipe.pm
- + ext/IO/lib/IO/Seekable.pm ext/IO/lib/IO/Select.pm
- + ext/IO/lib/IO/Socket.pm ext/NDBM_File/hints/dec_osf.pl
- + ext/NDBM_File/hints/dynixptx.pl ext/ODBM_File/hints/hpux.pl
- + ext/ODBM_File/hints/ultrix.pl ext/Opcode/Makefile.PL
- + ext/Opcode/Opcode.pm ext/Opcode/Opcode.xs ext/Opcode/Safe.pm
- + ext/Opcode/ops.pm ext/POSIX/hints/next_3.pl hints/amigaos.sh
- + hints/aux_3.sh hints/broken-db.msg hints/cygwin32.sh
- + hints/dcosx.sh hints/irix_6_0.sh hints/irix_6_1.sh
- + hints/lynxos.sh hints/next_4.sh hints/qnx.sh hints/umips.sh
- + hints/unicosmk.sh installhtml lib/Bundle/CPAN.pm lib/CGI.pm
- + lib/CGI/Apache.pm lib/CGI/Carp.pm lib/CGI/Fast.pm
- + lib/CGI/Push.pm lib/CGI/Switch.pm lib/CPAN.pm
- + lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm lib/Class/Struct.pm
- + lib/ExtUtils/Command.pm lib/ExtUtils/Embed.pm
- + lib/ExtUtils/MM_Win32.pm lib/File/Compare.pm lib/File/stat.pm
- + lib/FileHandle.pm lib/FindBin.pm lib/Math/Trig.pm
- + lib/Net/hostent.pm lib/Net/netent.pm lib/Net/protoent.pm
- + lib/Net/servent.pm lib/Pod/Html.pm lib/Tie/RefHash.pm
- + lib/Time/gmtime.pm lib/Time/localtime.pm lib/Time/tm.pm
- + lib/UNIVERSAL.pm lib/User/grent.pm lib/User/pwent.pm
- + lib/autouse.pm lib/blib.pm lib/constant.pm lib/locale.pm
- + nostdio.h os2/Changes os2/OS2/ExtAttr/Changes
- + os2/OS2/ExtAttr/ExtAttr.pm os2/OS2/ExtAttr/ExtAttr.xs
- + os2/OS2/ExtAttr/MANIFEST os2/OS2/ExtAttr/Makefile.PL
- + os2/OS2/ExtAttr/myea.h os2/OS2/ExtAttr/t/os2_ea.t
- + os2/OS2/ExtAttr/typemap os2/OS2/PrfDB/Changes
- + os2/OS2/PrfDB/MANIFEST os2/OS2/PrfDB/Makefile.PL
- + os2/OS2/PrfDB/PrfDB.pm os2/OS2/PrfDB/PrfDB.xs
- + os2/OS2/PrfDB/t/os2_prfdb.t os2/OS2/PrfDB/typemap
- + os2/OS2/Process/MANIFEST os2/OS2/Process/Makefile.PL
- + os2/OS2/Process/Process.pm os2/OS2/Process/Process.xs
- + os2/OS2/REXX/Changes os2/OS2/REXX/MANIFEST
- + os2/OS2/REXX/Makefile.PL os2/OS2/REXX/REXX.pm
- + os2/OS2/REXX/REXX.xs os2/OS2/REXX/t/rx_cmprt.t
- + os2/OS2/REXX/t/rx_dllld.t os2/OS2/REXX/t/rx_objcall.t
- + os2/OS2/REXX/t/rx_sql.test os2/OS2/REXX/t/rx_tiesql.test
- + os2/OS2/REXX/t/rx_tievar.t os2/OS2/REXX/t/rx_tieydb.t
- + os2/OS2/REXX/t/rx_varset.t os2/OS2/REXX/t/rx_vrexx.t
- + os2/dl_os2.c os2/dlfcn.h perlio.c perlio.h perlsdio.h
- + perlsfio.h plan9/aperl plan9/arpa/inet.h plan9/buildinfo
- + plan9/config.plan9 plan9/exclude plan9/fndvers
- + plan9/genconfig.pl plan9/mkfile plan9/myconfig.plan9
- + plan9/perlplan9.doc plan9/perlplan9.pod plan9/plan9.c
- + plan9/plan9ish.h plan9/setup.rc plan9/versnum pod/checkpods.PL
- + pod/perlapio.pod pod/perldelta.pod pod/perlfaq.pod
- + pod/perlfaq1.pod pod/perlfaq2.pod pod/perlfaq3.pod
- + pod/perlfaq4.pod pod/perlfaq5.pod pod/perlfaq6.pod
- + pod/perlfaq7.pod pod/perlfaq8.pod pod/perlfaq9.pod
- + pod/perllocale.pod pod/perlmodlib.pod pod/perltoot.pod
- + pod/rofftoc qnx/ar qnx/cpp t/comp/colon.t t/comp/proto.t
- + t/comp/redef.t t/comp/use.t t/io/read.t t/lib/abbrev.t
- + t/lib/autoloader.t t/lib/basename.t t/lib/checktree.t
- + t/lib/complex.t t/lib/env.t t/lib/filecache.t t/lib/filecopy.t
- + t/lib/filefind.t t/lib/filepath.t t/lib/findbin.t
- + t/lib/getopt.t t/lib/hostname.t t/lib/io_dup.t t/lib/io_pipe.t
- + t/lib/io_sel.t t/lib/io_sock.t t/lib/io_taint.t
- + t/lib/io_tell.t t/lib/io_udp.t t/lib/io_xs.t t/lib/opcode.t
- + t/lib/open2.t t/lib/open3.t t/lib/ops.t t/lib/parsewords.t
- + t/lib/safe1.t t/lib/safe2.t t/lib/searchdict.t
- + t/lib/selectsaver.t t/lib/symbol.t t/lib/texttabs.t
- + t/lib/textwrap.t t/lib/timelocal.t t/lib/trig.t t/op/arith.t
- + t/op/assignwarn.t t/op/bop.t t/op/closure.t t/op/cmp.t
- + t/op/gv.t t/op/inc.t t/op/method.t t/op/recurse.t
- + t/op/runlevel.t t/op/sysio.t t/op/taint.t t/op/tie.t
- + t/op/universal.t t/pragma/constant.t t/pragma/locale.t
- + t/pragma/overload.t t/pragma/strict-refs t/pragma/strict-subs
- + t/pragma/strict-vars t/pragma/strict.t t/pragma/subs.t
- + t/pragma/warn-1global t/pragma/warning.t universal.c
- + utils/splain.PL vms/ext/DCLsym/0README.txt
- + vms/ext/DCLsym/DCLsym.pm vms/ext/DCLsym/DCLsym.xs
- + vms/ext/DCLsym/Makefile.PL vms/ext/DCLsym/test.pl
- + vms/ext/XSSymSet.pm vms/ext/filespec.t vms/ext/vmsish.pm
- + vms/ext/vmsish.t win32/Makefile win32/TEST win32/autosplit.pl
- + win32/bin/network.pl win32/bin/pl2bat.bat win32/bin/search.bat
- + win32/bin/test.bat win32/bin/webget.bat win32/bin/www.pl
- + win32/config.H win32/config.w32 win32/config_h.PL
- + win32/config_sh.PL win32/dl_win32.xs win32/genxsdef.pl
- + win32/include/arpa/inet.h win32/include/dirent.h
- + win32/include/netdb.h win32/include/sys/socket.h
- + win32/makedef.pl win32/makemain.pl win32/makeperldef.pl
- + win32/perlglob.c win32/perllib.c win32/pod.mak win32/runperl.c
- + win32/splittree.pl win32/win32.c win32/win32.h win32/win32io.c
- + win32/win32io.h win32/win32iop.h win32/win32sck.c x2p/a2p.pod
- + x2p/proto.h
- - Changes.Conf ext/DynaLoader/dl_os2.xs
- - ext/FileHandle/FileHandle.pm ext/FileHandle/FileHandle.xs
- - ext/FileHandle/Makefile.PL ext/SDBM_File/sdbm/readme.ps
- - ext/Safe/Makefile.PL ext/Safe/Safe.pm ext/Safe/Safe.xs
- - hints/aux.sh hints/dnix.sh hints/irix_6_2.sh lib/chat2.inter
- - lib/chat2.pl lib/splain os2/README os2/README.old
- - os2/diff.db_file os2/notes pod/perlovl.pod t/lib/safe.t
- - t/op/overload.t t/re_tests vms/Makefile x2p/a2p.man
- - x2p/handy.h x2p/s2p.man
- ! Artistic Changes Configure EXTERN.h INSTALL INTERN.h MANIFEST
- ! Makefile.SH README README.vms Todo XSUB.h av.c av.h cflags.SH
- ! config_H config_h.SH configpm configure cop.h cv.h deb.c
- ! doio.c doop.c dosish.h dump.c eg/README eg/nih
- ! eg/sysvipc/ipcmsg eg/sysvipc/ipcsem eg/sysvipc/ipcshm
- ! emacs/cperl-mode.el embed.h embed.pl ext/DB_File/DB_File.pm
- ! ext/DB_File/DB_File.xs ext/DB_File/Makefile.PL
- ! ext/DB_File/typemap ext/DynaLoader/DynaLoader.pm
- ! ext/DynaLoader/Makefile.PL ext/DynaLoader/dl_aix.xs
- ! ext/DynaLoader/dl_dld.xs ext/DynaLoader/dl_dlopen.xs
- ! ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_next.xs
- ! ext/DynaLoader/dl_vms.xs ext/DynaLoader/dlutils.c
- ! ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
- ! ext/GDBM_File/GDBM_File.pm ext/NDBM_File/NDBM_File.pm
- ! ext/ODBM_File/ODBM_File.pm ext/ODBM_File/ODBM_File.xs
- ! ext/ODBM_File/hints/dec_osf.pl ext/POSIX/POSIX.pm
- ! ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs
- ! ext/SDBM_File/Makefile.PL ext/SDBM_File/SDBM_File.pm
- ! ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/pair.c
- ! ext/SDBM_File/sdbm/pair.h ext/SDBM_File/sdbm/sdbm.3
- ! ext/SDBM_File/sdbm/sdbm.c ext/SDBM_File/sdbm/sdbm.h
- ! ext/Socket/Socket.pm ext/Socket/Socket.xs ext/util/make_ext
- ! form.h global.sym gv.c gv.h handy.h hints/3b1.sh
- ! hints/README.hints hints/aix.sh hints/apollo.sh hints/bsdos.sh
- ! hints/convexos.sh hints/cxux.sh hints/dec_osf.sh hints/dgux.sh
- ! hints/dynixptx.sh hints/epix.sh hints/esix4.sh
- ! hints/freebsd.sh hints/hpux.sh hints/irix_4.sh hints/irix_5.sh
- ! hints/irix_6.sh hints/isc.sh hints/linux.sh hints/machten.sh
- ! hints/machten_2.sh hints/mips.sh hints/mpeix.sh
- ! hints/netbsd.sh hints/next_3.sh hints/next_3_0.sh hints/os2.sh
- ! hints/powerux.sh hints/sco.sh hints/sco_2_3_3.sh
- ! hints/sco_2_3_4.sh hints/solaris_2.sh hints/sunos_4_0.sh
- ! hints/sunos_4_1.sh hints/svr4.sh hints/titanos.sh
- ! hints/ultrix_4.sh hints/unicos.sh hints/utekv.sh hv.c hv.h
- ! installman installperl interp.sym keywords.h keywords.pl
- ! lib/AnyDBM_File.pm lib/AutoLoader.pm lib/AutoSplit.pm
- ! lib/Benchmark.pm lib/Carp.pm lib/Cwd.pm
- ! lib/Devel/SelfStubber.pm lib/English.pm lib/Env.pm
- ! lib/Exporter.pm lib/ExtUtils/Install.pm
- ! lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_OS2.pm
- ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm
- ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm
- ! lib/ExtUtils/Mkbootstrap.pm lib/ExtUtils/Mksymlists.pm
- ! lib/ExtUtils/testlib.pm lib/ExtUtils/typemap
- ! lib/ExtUtils/xsubpp lib/File/Basename.pm lib/File/Copy.pm
- ! lib/File/Find.pm lib/File/Path.pm lib/FileCache.pm
- ! lib/Getopt/Long.pm lib/Getopt/Std.pm lib/I18N/Collate.pm
- ! lib/IPC/Open2.pm lib/IPC/Open3.pm lib/Math/BigInt.pm
- ! lib/Math/Complex.pm lib/Net/Ping.pm lib/Pod/Functions.pm
- ! lib/Pod/Text.pm lib/Search/Dict.pm lib/SelectSaver.pm
- ! lib/SelfLoader.pm lib/Symbol.pm lib/Sys/Hostname.pm
- ! lib/Sys/Syslog.pm lib/Term/Cap.pm lib/Term/Complete.pm
- ! lib/Term/ReadLine.pm lib/Test/Harness.pm lib/Text/Abbrev.pm
- ! lib/Text/ParseWords.pm lib/Text/Soundex.pm lib/Text/Tabs.pm
- ! lib/Text/Wrap.pm lib/Tie/Hash.pm lib/Tie/Scalar.pm
- ! lib/Tie/SubstrHash.pm lib/Time/Local.pm lib/abbrev.pl
- ! lib/bigfloat.pl lib/bigint.pl lib/cacheout.pl lib/complete.pl
- ! lib/diagnostics.pm lib/dotsh.pl lib/dumpvar.pl lib/find.pl
- ! lib/finddepth.pl lib/ftp.pl lib/getcwd.pl lib/getopts.pl
- ! lib/importenv.pl lib/lib.pm lib/look.pl lib/newgetopt.pl
- ! lib/open2.pl lib/open3.pl lib/overload.pm lib/perl5db.pl
- ! lib/sigtrap.pm lib/strict.pm lib/subs.pm lib/syslog.pl
- ! lib/termcap.pl lib/timelocal.pl lib/validate.pl lib/vars.pm
- ! makeaperl.SH makedepend.SH malloc.c mg.c mg.h minimod.pl
- ! miniperlmain.c myconfig op.c op.h opcode.h opcode.pl
- ! os2/Makefile.SHs os2/diff.configure os2/os2.c os2/os2ish.h
- ! os2/perl2cmd.pl patchlevel.h perl.c perl.h perl_exp.SH perlsh
- ! perly.c perly.c.diff perly.h perly.y pod/Makefile pod/buildtoc
- ! pod/perl.pod pod/perlbook.pod pod/perlbot.pod pod/perlcall.pod
- ! pod/perldata.pod pod/perldebug.pod pod/perldiag.pod
- ! pod/perldsc.pod pod/perlembed.pod pod/perlform.pod
- ! pod/perlfunc.pod pod/perlguts.pod pod/perlipc.pod
- ! pod/perllol.pod pod/perlmod.pod pod/perlobj.pod pod/perlop.pod
- ! pod/perlpod.pod pod/perlre.pod pod/perlref.pod pod/perlrun.pod
- ! pod/perlsec.pod pod/perlstyle.pod pod/perlsub.pod
- ! pod/perlsyn.pod pod/perltie.pod pod/perltoc.pod
- ! pod/perltrap.pod pod/perlvar.pod pod/perlxs.pod
- ! pod/perlxstut.pod pod/pod2html.PL pod/pod2latex.PL
- ! pod/pod2man.PL pod/pod2text.PL pod/roffitall pp.c pp.h
- ! pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c regcomp.h
- ! regexec.c regexp.h run.c scope.c scope.h sv.c sv.h t/README
- ! t/TEST t/base/lex.t t/base/term.t t/cmd/mod.t t/cmd/while.t
- ! t/comp/cpp.t t/comp/multiline.t t/comp/package.t
- ! t/comp/script.t t/harness t/io/argv.t t/io/dup.t t/io/fs.t
- ! t/io/inplace.t t/io/pipe.t t/io/tell.t t/lib/anydbm.t
- ! t/lib/bigintpm.t t/lib/db-btree.t t/lib/db-hash.t
- ! t/lib/db-recno.t t/lib/dirhand.t t/lib/filehand.t t/lib/gdbm.t
- ! t/lib/ndbm.t t/lib/odbm.t t/lib/posix.t t/lib/sdbm.t
- ! t/lib/socket.t t/op/chop.t t/op/delete.t t/op/each.t
- ! t/op/exec.t t/op/fork.t t/op/glob.t t/op/goto.t t/op/groups.t
- ! t/op/magic.t t/op/misc.t t/op/mkdir.t t/op/my.t t/op/oct.t
- ! t/op/pack.t t/op/pat.t t/op/quotemeta.t t/op/rand.t
- ! t/op/re_tests t/op/readdir.t t/op/ref.t t/op/regexp.t
- ! t/op/sleep.t t/op/sort.t t/op/split.t t/op/stat.t t/op/subst.t
- ! t/op/substr.t t/op/write.t taint.c toke.c unixish.h util.c
- ! util.h utils/Makefile utils/c2ph.PL utils/h2ph.PL
- ! utils/h2xs.PL utils/perlbug.PL utils/perldoc.PL utils/pl2pm.PL
- ! vms/config.vms vms/descrip.mms vms/ext/Filespec.pm
- ! vms/ext/Stdio/Stdio.pm vms/ext/Stdio/Stdio.xs
- ! vms/ext/Stdio/test.pl vms/fndvers.com vms/gen_shrfls.pl
- ! vms/genconfig.pl vms/genopt.com vms/myconfig.com
- ! vms/perlvms.pod vms/perly_c.vms vms/perly_h.vms
- ! vms/sockadapt.c vms/sockadapt.h vms/test.com vms/vms.c
- ! vms/vms_yfix.pl vms/vmsish.h vms/writemain.pl writemain.SH
- ! x2p/EXTERN.h x2p/INTERN.h x2p/Makefile.SH x2p/a2p.c x2p/a2p.h
- ! x2p/a2p.y x2p/a2py.c x2p/cflags.SH x2p/find2perl.PL x2p/hash.c
- ! x2p/hash.h x2p/s2p.PL x2p/str.c x2p/str.h x2p/util.c
- ! x2p/util.h x2p/walk.c
-____________________________________________________________________________
-[ 16] By: mbeattie on 1997/05/23 22:42:08
- Log: Initial integration of relperl from 5.003.
- Branch: relperl
- +> (branch 600 files)
-____________________________________________________________________________
-[ 14] By: mbeattie on 1997/05/12 20:22:56
- Log: Finish code generation rewrite. Clean up B::Section class and
- handle symbol table translation internally. Simple .pm modules
- now compile OK.
- Branch: perlext
- ! Compiler/B.pm Compiler/B/Bblock.pm Compiler/B/C.pm
- ! Compiler/B/CC.pm
-____________________________________________________________________________
-[ 13] By: mbeattie on 1997/05/05 19:41:18
- Log: Don't make pp_enter and pp_return trigger basic blocks.
- Branch: perlext
- ! Compiler/B/Bblock.pm
-____________________________________________________________________________
-[ 12] By: mbeattie on 1997/05/05 19:40:16
- Log: Rewrite code generation. Sections (de)multiplexed into a
- temporary file instead of stored in arrays.
- Branch: perlext
- ! Compiler/B.pm Compiler/B/C.pm Compiler/B/CC.pm
-____________________________________________________________________________
-[ 11] By: mbeattie on 1997/05/03 20:20:59
- Log: Development to pre-alpha4
- Branch: perlext
- + Compiler/B/Deparse.pm Compiler/B/Lint.pm Compiler/makeliblinks
- ! Compiler/B.pm Compiler/B.xs Compiler/B/Bblock.pm
- ! Compiler/B/Bytecode.pm Compiler/B/C.pm Compiler/B/CC.pm
- ! Compiler/B/Debug.pm Compiler/B/Terse.pm Compiler/B/Xref.pm
- ! Compiler/Makefile.PL Compiler/README Compiler/TESTS
- ! Compiler/assemble Compiler/bytecode.pl Compiler/byteperl.c
- ! Compiler/byterun.c Compiler/cc_runtime.h Compiler/disassemble
- ! Compiler/test_harness Compiler/test_harness_cc
-____________________________________________________________________________
-[ 10] By: mbeattie on 1997/05/03 14:47:06
- Log: Initial check-in of perl compiler.
- Branch: perlext
- + Compiler/Artistic Compiler/B.pm Compiler/B.xs
- + Compiler/B/Asmdata.pm Compiler/B/Assembler.pm
- + Compiler/B/Bblock.pm Compiler/B/Bytecode.pm Compiler/B/C.pm
- + Compiler/B/CC.pm Compiler/B/Debug.pm
- + Compiler/B/Disassembler.pm Compiler/B/Showlex.pm
- + Compiler/B/Stackobj.pm Compiler/B/Terse.pm Compiler/B/Xref.pm
- + Compiler/Copying Compiler/Makefile.PL Compiler/NOTES
- + Compiler/O.pm Compiler/README Compiler/TESTS
- + Compiler/TESTS.alpha2 Compiler/Todo Compiler/assemble
- + Compiler/bytecode.h Compiler/bytecode.pl Compiler/byteperl.c
- + Compiler/byterun.c Compiler/byterun.h Compiler/cc_harness
- + Compiler/cc_runtime.h Compiler/ccop.c Compiler/ccop.h
- + Compiler/disassemble Compiler/old/README.feb11
- + Compiler/old/TESTS.mar11 Compiler/old/TESTS.mar20
- + Compiler/old/TESTS.may11 Compiler/old/TESTS.pre-jul27
- + Compiler/op.patch Compiler/ramblings/cc.notes
- + Compiler/ramblings/curcop.runtime
- + Compiler/ramblings/dontparse.c Compiler/ramblings/flip-flop
- + Compiler/ramblings/foo.bench Compiler/ramblings/foo2.bench
- + Compiler/ramblings/foo3.bench Compiler/ramblings/magic
- + Compiler/ramblings/pp_i_add Compiler/ramblings/reg.alloc
- + Compiler/ramblings/runtime.porting
- + Compiler/ramblings/sort.notes Compiler/ramblings/sub.call
- + Compiler/ramblings/subst.notes Compiler/run_bytecode_test
- + Compiler/run_cc_test Compiler/run_test Compiler/test_harness
- + Compiler/test_harness_bytecode Compiler/test_harness_cc
- + Compiler/typemap
-____________________________________________________________________________
-[ 9] By: mbeattie on 1997/05/02 19:03:49
- Log: Don't require CvDEPTH == 0 when bombing out of subs.
- Branch: thrperl
- ! pp_hot.c
-____________________________________________________________________________
-[ 8] By: mbeattie on 1997/04/23 19:06:45
- Log: Added programmer-level condition variables via "condpair" magic.
- Added support for detached threads and tweaked a few things.
- Branch: thrperl
- ! embed.h global.sym keywords.h mg.c opcode.h perl.c perl.h
- ! pp_ctl.c pp_hot.c proto.h run.c scope.c sv.c sv.h thread.h
- ! util.c
-____________________________________________________________________________
-[ 7] By: mbeattie on 1997/04/23 19:04:18
- Log: Rewrote programmer-level condition variables from scratch. Added
- support for detaching threads. Fixed handling for arguments
- passed in to threads and return values for joined threads.
- Branch: perlext
- + Thread/lock.t
- ! Thread/README Thread/Thread.pm Thread/Thread.xs Thread/cond.t
- ! Thread/typemap
-____________________________________________________________________________
-[ 6] By: mbeattie on 1997/04/10 20:17:26
- Log: Initial check-in of Thread module.
- Branch: perlext
- + Thread/Makefile.PL Thread/Notes Thread/README Thread/Thread.pm
- + Thread/Thread.xs Thread/cond.t Thread/create.t Thread/io.t
- + Thread/join.t Thread/sync.t Thread/sync2.t Thread/typemap
- + Thread/unsync.t Thread/unsync2.t Thread/unsync3.t
- + Thread/unsync4.t
-____________________________________________________________________________
-[ 5] By: mbeattie on 1997/04/10 20:05:52
- Log: Tweaks to allow compilation without -DUSE_THREADS and fix
- missing parens (pad allocation) in the tokener.
- Branch: thrperl
- ! op.c pp_ctl.c toke.c
-____________________________________________________________________________
-[ 4] By: mbeattie on 1997/03/28 18:40:44
- Log: Initial 3-way merge from (5.001m, thr1m, 5.003) plus fixups.
- Branch: thrperl
- + thread.h
- ! XSUB.h av.c cv.h deb.c doio.c doop.c dump.c global.sym gv.c
- ! hv.c malloc.c mg.c op.c op.h opcode.h opcode.pl perl.c perl.h
- ! pp.h pp_ctl.c pp_hot.c pp_sys.c proto.h regcomp.c regexec.c
- ! run.c scope.c sv.c sv.h toke.c util.c
-____________________________________________________________________________
-[ 3] By: mbeattie on 1997/03/28 13:36:23
- Log: Branch 5.003 -> thrperl
- Branch: thrperl
- +> (branch 600 files)
-____________________________________________________________________________
-[ 2] By: mbeattie on 1997/03/28 13:32:21
- Log: Initial devel changes.
- Pseudo-hashes. Optional strong typing. RESTART {}.
- Branch: perl
- ! av.c doop.c embed.h ext/DB_File/DB_File.xs global.sym
- ! interp.sym keywords.h keywords.pl lib/ExtUtils/xsubpp op.c
- ! perl.c perl.h pp.c pp_hot.c proto.h t/op/groups.t toke.c
-____________________________________________________________________________
-[ 1] By: mbeattie on 1997/03/28 13:17:33
- Log: Perl 5.003 check-in
- Branch: perl
- + Artistic Changes Changes.Conf Configure Copying EXTERN.h
- + INSTALL INTERN.h MANIFEST Makefile.SH README README.vms Todo
- + XSUB.h av.c av.h cflags.SH config_H config_h.SH configpm
- + configure cop.h cv.h deb.c doio.c doop.c dosish.h dump.c
- + eg/ADB eg/README eg/changes eg/client eg/down eg/dus eg/findcp
- + eg/findtar eg/g/gcp eg/g/gcp.man eg/g/ged eg/g/ghosts eg/g/gsh
- + eg/g/gsh.man eg/muck eg/muck.man eg/myrup eg/nih eg/relink
- + eg/rename eg/rmfrom eg/scan/scan_df eg/scan/scan_last
- + eg/scan/scan_messages eg/scan/scan_passwd eg/scan/scan_ps
- + eg/scan/scan_sudo eg/scan/scan_suid eg/scan/scanner eg/server
- + eg/shmkill eg/sysvipc/README eg/sysvipc/ipcmsg
- + eg/sysvipc/ipcsem eg/sysvipc/ipcshm eg/travesty eg/unuc
- + eg/uudecode eg/van/empty eg/van/unvanish eg/van/vanexp
- + eg/van/vanish eg/who eg/wrapsuid emacs/cperl-mode.el embed.h
- + embed.pl ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
- + ext/DB_File/DB_File_BS ext/DB_File/Makefile.PL
- + ext/DB_File/typemap ext/DynaLoader/DynaLoader.pm
- + ext/DynaLoader/Makefile.PL ext/DynaLoader/README
- + ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_dld.xs
- + ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dl_hpux.xs
- + ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_none.xs
- + ext/DynaLoader/dl_os2.xs ext/DynaLoader/dl_vms.xs
- + ext/DynaLoader/dlutils.c ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs
- + ext/Fcntl/Makefile.PL ext/FileHandle/FileHandle.pm
- + ext/FileHandle/FileHandle.xs ext/FileHandle/Makefile.PL
- + ext/GDBM_File/GDBM_File.pm ext/GDBM_File/GDBM_File.xs
- + ext/GDBM_File/Makefile.PL ext/GDBM_File/typemap
- + ext/NDBM_File/Makefile.PL ext/NDBM_File/NDBM_File.pm
- + ext/NDBM_File/NDBM_File.xs ext/NDBM_File/hints/solaris.pl
- + ext/NDBM_File/hints/svr4.pl ext/NDBM_File/typemap
- + ext/ODBM_File/Makefile.PL ext/ODBM_File/ODBM_File.pm
- + ext/ODBM_File/ODBM_File.xs ext/ODBM_File/hints/dec_osf.pl
- + ext/ODBM_File/hints/sco.pl ext/ODBM_File/hints/solaris.pl
- + ext/ODBM_File/hints/svr4.pl ext/ODBM_File/typemap
- + ext/POSIX/Makefile.PL ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod
- + ext/POSIX/POSIX.xs ext/POSIX/typemap ext/SDBM_File/Makefile.PL
- + ext/SDBM_File/SDBM_File.pm ext/SDBM_File/SDBM_File.xs
- + ext/SDBM_File/sdbm/CHANGES ext/SDBM_File/sdbm/COMPARE
- + ext/SDBM_File/sdbm/Makefile.PL ext/SDBM_File/sdbm/README
- + ext/SDBM_File/sdbm/README.too ext/SDBM_File/sdbm/biblio
- + ext/SDBM_File/sdbm/dba.c ext/SDBM_File/sdbm/dbd.c
- + ext/SDBM_File/sdbm/dbe.1 ext/SDBM_File/sdbm/dbe.c
- + ext/SDBM_File/sdbm/dbm.c ext/SDBM_File/sdbm/dbm.h
- + ext/SDBM_File/sdbm/dbu.c ext/SDBM_File/sdbm/grind
- + ext/SDBM_File/sdbm/hash.c ext/SDBM_File/sdbm/linux.patches
- + ext/SDBM_File/sdbm/makefile.sdbm ext/SDBM_File/sdbm/pair.c
- + ext/SDBM_File/sdbm/pair.h ext/SDBM_File/sdbm/readme.ms
- + ext/SDBM_File/sdbm/readme.ps ext/SDBM_File/sdbm/sdbm.3
- + ext/SDBM_File/sdbm/sdbm.c ext/SDBM_File/sdbm/sdbm.h
- + ext/SDBM_File/sdbm/tune.h ext/SDBM_File/sdbm/util.c
- + ext/SDBM_File/typemap ext/Safe/Makefile.PL ext/Safe/Safe.pm
- + ext/Safe/Safe.xs ext/Socket/Makefile.PL ext/Socket/Socket.pm
- + ext/Socket/Socket.xs ext/util/extliblist ext/util/make_ext
- + ext/util/mkbootstrap form.h global.sym globals.c gv.c gv.h
- + h2pl/README h2pl/cbreak.pl h2pl/cbreak2.pl h2pl/eg/sizeof.ph
- + h2pl/eg/sys/errno.pl h2pl/eg/sys/ioctl.pl h2pl/eg/sysexits.pl
- + h2pl/getioctlsizes h2pl/mksizes h2pl/mkvars h2pl/tcbreak
- + h2pl/tcbreak2 handy.h hints/3b1.sh hints/3b1cc
- + hints/README.hints hints/aix.sh hints/altos486.sh
- + hints/apollo.sh hints/aux.sh hints/bsdos.sh hints/convexos.sh
- + hints/cxux.sh hints/dec_osf.sh hints/dgux.sh hints/dnix.sh
- + hints/dynix.sh hints/dynixptx.sh hints/epix.sh hints/esix4.sh
- + hints/fps.sh hints/freebsd.sh hints/genix.sh
- + hints/greenhills.sh hints/hpux.sh hints/i386.sh
- + hints/irix_4.sh hints/irix_5.sh hints/irix_6.sh
- + hints/irix_6_2.sh hints/isc.sh hints/isc_2.sh hints/linux.sh
- + hints/machten.sh hints/machten_2.sh hints/mips.sh hints/mpc.sh
- + hints/mpeix.sh hints/ncr_tower.sh hints/netbsd.sh
- + hints/next_3.sh hints/next_3_0.sh hints/opus.sh hints/os2.sh
- + hints/powerux.sh hints/sco.sh hints/sco_2_3_0.sh
- + hints/sco_2_3_1.sh hints/sco_2_3_2.sh hints/sco_2_3_3.sh
- + hints/sco_2_3_4.sh hints/solaris_2.sh hints/stellar.sh
- + hints/sunos_4_0.sh hints/sunos_4_1.sh hints/svr4.sh
- + hints/ti1500.sh hints/titanos.sh hints/ultrix_4.sh
- + hints/unicos.sh hints/unisysdynix.sh hints/utekv.sh
- + hints/uts.sh hv.c hv.h installman installperl interp.sym
- + keywords.h keywords.pl lib/AnyDBM_File.pm lib/AutoLoader.pm
- + lib/AutoSplit.pm lib/Benchmark.pm lib/Carp.pm lib/Cwd.pm
- + lib/Devel/SelfStubber.pm lib/DirHandle.pm lib/English.pm
- + lib/Env.pm lib/Exporter.pm lib/ExtUtils/Install.pm
- + lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_OS2.pm
- + lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm
- + lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm
- + lib/ExtUtils/Mkbootstrap.pm lib/ExtUtils/Mksymlists.pm
- + lib/ExtUtils/testlib.pm lib/ExtUtils/typemap
- + lib/ExtUtils/xsubpp lib/File/Basename.pm lib/File/CheckTree.pm
- + lib/File/Copy.pm lib/File/Find.pm lib/File/Path.pm
- + lib/FileCache.pm lib/Getopt/Long.pm lib/Getopt/Std.pm
- + lib/I18N/Collate.pm lib/IPC/Open2.pm lib/IPC/Open3.pm
- + lib/Math/BigFloat.pm lib/Math/BigInt.pm lib/Math/Complex.pm
- + lib/Net/Ping.pm lib/Pod/Functions.pm lib/Pod/Text.pm
- + lib/Search/Dict.pm lib/SelectSaver.pm lib/SelfLoader.pm
- + lib/Shell.pm lib/Symbol.pm lib/Sys/Hostname.pm
- + lib/Sys/Syslog.pm lib/Term/Cap.pm lib/Term/Complete.pm
- + lib/Term/ReadLine.pm lib/Test/Harness.pm lib/Text/Abbrev.pm
- + lib/Text/ParseWords.pm lib/Text/Soundex.pm lib/Text/Tabs.pm
- + lib/Text/Wrap.pm lib/Tie/Hash.pm lib/Tie/Scalar.pm
- + lib/Tie/SubstrHash.pm lib/Time/Local.pm lib/abbrev.pl
- + lib/assert.pl lib/bigfloat.pl lib/bigint.pl lib/bigrat.pl
- + lib/cacheout.pl lib/chat2.inter lib/chat2.pl lib/complete.pl
- + lib/ctime.pl lib/diagnostics.pm lib/dotsh.pl lib/dumpvar.pl
- + lib/exceptions.pl lib/fastcwd.pl lib/find.pl lib/finddepth.pl
- + lib/flush.pl lib/ftp.pl lib/getcwd.pl lib/getopt.pl
- + lib/getopts.pl lib/hostname.pl lib/importenv.pl lib/integer.pm
- + lib/less.pm lib/lib.pm lib/look.pl lib/newgetopt.pl
- + lib/open2.pl lib/open3.pl lib/overload.pm lib/perl5db.pl
- + lib/pwd.pl lib/shellwords.pl lib/sigtrap.pm lib/splain
- + lib/stat.pl lib/strict.pm lib/subs.pm lib/syslog.pl
- + lib/tainted.pl lib/termcap.pl lib/timelocal.pl lib/validate.pl
- + lib/vars.pm makeaperl.SH makedepend.SH makedir.SH malloc.c
- + mg.c mg.h minimod.pl miniperlmain.c mv-if-diff myconfig op.c
- + op.h opcode.h opcode.pl os2/Makefile.SHs os2/POSIX.mkfifo
- + os2/README os2/README.old os2/diff.configure os2/diff.db_file
- + os2/notes os2/os2.c os2/os2ish.h os2/perl2cmd.pl patchlevel.h
- + perl.c perl.h perl_exp.SH perlsh perly.c perly.c.diff
- + perly.fixer perly.h perly.y pod/Makefile pod/buildtoc
- + pod/perl.pod pod/perlbook.pod pod/perlbot.pod pod/perlcall.pod
- + pod/perldata.pod pod/perldebug.pod pod/perldiag.pod
- + pod/perldsc.pod pod/perlembed.pod pod/perlform.pod
- + pod/perlfunc.pod pod/perlguts.pod pod/perlipc.pod
- + pod/perllol.pod pod/perlmod.pod pod/perlobj.pod pod/perlop.pod
- + pod/perlovl.pod pod/perlpod.pod pod/perlre.pod pod/perlref.pod
- + pod/perlrun.pod pod/perlsec.pod pod/perlstyle.pod
- + pod/perlsub.pod pod/perlsyn.pod pod/perltie.pod
- + pod/perltoc.pod pod/perltrap.pod pod/perlvar.pod
- + pod/perlxs.pod pod/perlxstut.pod pod/pod2html.PL
- + pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL pod/roffitall
- + pod/splitman pod/splitpod pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c
- + proto.h regcomp.c regcomp.h regexec.c regexp.h run.c scope.c
- + scope.h sv.c sv.h t/README t/TEST t/base/cond.t t/base/if.t
- + t/base/lex.t t/base/pat.t t/base/term.t t/cmd/elsif.t
- + t/cmd/for.t t/cmd/mod.t t/cmd/subval.t t/cmd/switch.t
- + t/cmd/while.t t/comp/cmdopt.t t/comp/cpp.aux t/comp/cpp.t
- + t/comp/decl.t t/comp/multiline.t t/comp/package.t
- + t/comp/script.t t/comp/term.t t/harness t/io/argv.t t/io/dup.t
- + t/io/fs.t t/io/inplace.t t/io/pipe.t t/io/print.t t/io/tell.t
- + t/lib/anydbm.t t/lib/bigint.t t/lib/bigintpm.t
- + t/lib/db-btree.t t/lib/db-hash.t t/lib/db-recno.t
- + t/lib/dirhand.t t/lib/english.t t/lib/filehand.t t/lib/gdbm.t
- + t/lib/ndbm.t t/lib/odbm.t t/lib/posix.t t/lib/safe.t
- + t/lib/sdbm.t t/lib/socket.t t/lib/soundex.t t/op/append.t
- + t/op/array.t t/op/auto.t t/op/chop.t t/op/cond.t t/op/delete.t
- + t/op/do.t t/op/each.t t/op/eval.t t/op/exec.t t/op/exp.t
- + t/op/flip.t t/op/fork.t t/op/glob.t t/op/goto.t t/op/groups.t
- + t/op/index.t t/op/int.t t/op/join.t t/op/list.t t/op/local.t
- + t/op/magic.t t/op/misc.t t/op/mkdir.t t/op/my.t t/op/oct.t
- + t/op/ord.t t/op/overload.t t/op/pack.t t/op/pat.t t/op/push.t
- + t/op/quotemeta.t t/op/rand.t t/op/range.t t/op/re_tests
- + t/op/read.t t/op/readdir.t t/op/ref.t t/op/regexp.t
- + t/op/repeat.t t/op/sleep.t t/op/sort.t t/op/split.t
- + t/op/sprintf.t t/op/stat.t t/op/study.t t/op/subst.t
- + t/op/substr.t t/op/time.t t/op/undef.t t/op/unshift.t
- + t/op/vec.t t/op/write.t t/re_tests taint.c toke.c unixish.h
- + util.c util.h utils/Makefile utils/c2ph.PL utils/h2ph.PL
- + utils/h2xs.PL utils/perlbug.PL utils/perldoc.PL utils/pl2pm.PL
- + vms/Makefile vms/config.vms vms/descrip.mms
- + vms/ext/Filespec.pm vms/ext/Stdio/0README.txt
- + vms/ext/Stdio/Makefile.PL vms/ext/Stdio/Stdio.pm
- + vms/ext/Stdio/Stdio.xs vms/ext/Stdio/test.pl vms/fndvers.com
- + vms/gen_shrfls.pl vms/genconfig.pl vms/genopt.com
- + vms/make_command.com vms/mms2make.pl vms/myconfig.com
- + vms/perlvms.pod vms/perly_c.vms vms/perly_h.vms
- + vms/sockadapt.c vms/sockadapt.h vms/test.com vms/vms.c
- + vms/vms_yfix.pl vms/vmsish.h vms/writemain.pl writemain.SH
- + x2p/EXTERN.h x2p/INTERN.h x2p/Makefile.SH x2p/a2p.c x2p/a2p.h
- + x2p/a2p.man x2p/a2p.y x2p/a2py.c x2p/cflags.SH
- + x2p/find2perl.PL x2p/handy.h x2p/hash.c x2p/hash.h x2p/s2p.PL
- + x2p/s2p.man x2p/str.c x2p/str.h x2p/util.c x2p/util.h
- + x2p/walk.c
diff --git a/contrib/perl5/Configure b/contrib/perl5/Configure
deleted file mode 100755
index 05ce5ea..0000000
--- a/contrib/perl5/Configure
+++ /dev/null
@@ -1,16540 +0,0 @@
-#! /bin/sh
-#
-# If these # comments don't work, trim them. Don't worry about any other
-# shell scripts, Configure will trim # comments from them for you.
-#
-# (If you are trying to port this package to a machine without sh,
-# I would suggest you have a look at the prototypical config_h.SH file
-# and edit it to reflect your system. Some packages may include samples
-# of config.h for certain machines, so you might look for one of those.)
-#
-# Yes, you may rip this off to use in other distribution packages. This
-# script belongs to the public domain and cannot be copyrighted.
-#
-# (Note: this Configure script was generated automatically. Rather than
-# working with this copy of Configure, you may wish to get metaconfig.
-# The dist-3.0 package (which contains metaconfig) was posted in
-# comp.sources.misc and is available on CPAN under authors/id/RAM so
-# you may fetch it yourself from your nearest archive site.)
-#
-
-# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
-#
-# Generated on Tue Mar 13 05:21:04 EET 2001 [metaconfig 3.0 PL70]
-# (with additional metaconfig patches by perlbug@perl.org)
-
-cat >c1$$ <<EOF
-ARGGGHHHH!!!!!
-
-SCO csh still thinks true is false. Write to SCO today and tell them that next
-year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
-
-(Actually, Configure ought to just patch csh in place. Hmm. Hmmmmm. All
-we'd have to do is go in and swap the && and || tokens, wherever they are.)
-
-[End of diatribe. We now return you to your regularly scheduled programming...]
-EOF
-cat >c2$$ <<EOF
-
-OOPS! You naughty creature! You didn't run Configure with sh!
-I will attempt to remedy the situation by running sh for you...
-EOF
-
-true || cat c1$$ c2$$
-true || exec sh $0 $argv:q
-
-(exit $?0) || cat c2$$
-(exit $?0) || exec sh $0 $argv:q
-rm -f c1$$ c2$$
-
-: compute my invocation name
-me=$0
-case "$0" in
-*/*)
- me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
- test "$me" || me=$0
- ;;
-esac
-
-: Proper separator for the PATH environment variable
-p_=:
-: On OS/2 this directory should exist if this is not floppy only system :-]
-if test -d c:/. ; then
- if test -n "$OS2_SHELL"; then
- p_=\;
- PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
- OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
- elif test -n "$DJGPP"; then
- p_=\;
- fi
-fi
-
-: Proper PATH setting
-paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
-paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
-paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
-paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
-paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
-paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
-paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
-paths="$paths /sbin /usr/sbin /usr/libexec"
-
-for p in $paths
-do
- case "$p_$PATH$p_" in
- *$p_$p$p_*) ;;
- *) test -d $p && PATH=$PATH$p_$p ;;
- esac
-done
-
-PATH=.$p_$PATH
-export PATH
-
-: shall we be using ksh?
-inksh=''
-needksh=''
-avoidksh=''
-newsh=/bin/ksh
-changesh=''
-if (PATH=.; alias -x) >/dev/null 2>&1; then
- inksh=true
-fi
-if test -f /hp-ux -a -f /bin/ksh; then
- needksh='to avoid sh bug in "here document" expansion'
-fi
-if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
- if test X`/usr/bin/uname -v` = X4; then
- avoidksh="to avoid AIX 4's /bin/sh"
- newsh=/usr/bin/bsh
- fi
-fi
-if test -f /osf_boot -a -f /usr/sbin/setld; then
- if test X`/usr/bin/uname -s` = XOSF1; then
- avoidksh="to avoid Digital UNIX' ksh"
- newsh=/bin/sh
- unset BIN_SH # if this is 'xpg4' sh will start up ksh
- fi
-fi
-case "$inksh/$needksh" in
-/[a-z]*)
- ENV=''
- changesh=true
- reason="$needksh"
- ;;
-esac
-case "$inksh/$avoidksh" in
-true/[a-z]*)
- changesh=true
- reason="$avoidksh"
- ;;
-esac
-case "$inksh/$needksh-$avoidksh-" in
-true/--)
- cat <<EOM
-(I see you are using the Korn shell. Some ksh's blow up on $me,
-mainly on older exotic systems. If yours does, try the Bourne shell instead.)
-EOM
- ;;
-esac
-case "$changesh" in
-true)
- echo "(Feeding myself to $newsh $reason.)"
- case "$0" in
- Configure|*/Configure) exec $newsh $0 "$@";;
- *) exec $newsh Configure "$@";;
- esac
- ;;
-esac
-
-: if needed set CDPATH to a harmless value that is not chatty
-: avoid bash 2.02 problems with empty CDPATH.
-case "$CDPATH" in
-'') ;;
-*) case "$SHELL" in
- *bash*) CDPATH='.' ;;
- *) CDPATH='' ;;
- esac
- ;;
-esac
-: Configure runs within the UU subdirectory
-test -d UU || mkdir UU
-cd UU && rm -f ./*
-
-ccname=''
-ccversion=''
-ccsymbols=''
-cppccsymbols=''
-cppsymbols=''
-perllibs=''
-dynamic_ext=''
-extensions=''
-known_extensions=''
-nonxs_ext=''
-static_ext=''
-useopcode=''
-useposix=''
-d_bsd=''
-d_eunice=''
-d_xenix=''
-eunicefix=''
-Mcc=''
-ar=''
-awk=''
-bash=''
-bison=''
-byacc=''
-cat=''
-chgrp=''
-chmod=''
-chown=''
-comm=''
-compress=''
-cp=''
-cpio=''
-cpp=''
-csh=''
-date=''
-echo=''
-egrep=''
-emacs=''
-expr=''
-find=''
-flex=''
-grep=''
-gzip=''
-inews=''
-ksh=''
-less=''
-line=''
-lint=''
-ln=''
-lp=''
-lpr=''
-ls=''
-mail=''
-mailx=''
-make=''
-mkdir=''
-more=''
-mv=''
-nm=''
-nroff=''
-perl=''
-pg=''
-pmake=''
-pr=''
-rm=''
-rmail=''
-sed=''
-sendmail=''
-shar=''
-sleep=''
-smail=''
-sort=''
-submit=''
-tail=''
-tar=''
-tbl=''
-tee=''
-test=''
-touch=''
-tr=''
-troff=''
-uname=''
-uniq=''
-uuname=''
-vi=''
-zcat=''
-zip=''
-full_ar=''
-full_sed=''
-libswanted=''
-hint=''
-myuname=''
-osname=''
-osvers=''
-Author=''
-Date=''
-Header=''
-Id=''
-Locker=''
-Log=''
-RCSfile=''
-Revision=''
-Source=''
-State=''
-_a=''
-_exe=''
-_o=''
-archobjs=''
-exe_ext=''
-firstmakefile=''
-lib_ext=''
-obj_ext=''
-path_sep=''
-afs=''
-alignbytes=''
-ansi2knr=''
-archlib=''
-archlibexp=''
-d_archlib=''
-installarchlib=''
-archname=''
-myarchname=''
-d_atolf=''
-d_atoll=''
-baserev=''
-bin=''
-binexp=''
-installbin=''
-bincompat5005=''
-d_bincompat5005=''
-byteorder=''
-cc=''
-ccflags=''
-cppflags=''
-ldflags=''
-lkflags=''
-locincpth=''
-optimize=''
-cf_email=''
-cf_by=''
-cf_time=''
-charsize=''
-contains=''
-cpp_stuff=''
-cpplast=''
-cppminus=''
-cpprun=''
-cppstdin=''
-crosscompile=''
-d__fwalk=''
-d_access=''
-d_accessx=''
-d_alarm=''
-d_attribut=''
-d_bcmp=''
-d_bcopy=''
-d_bzero=''
-d_casti32=''
-castflags=''
-d_castneg=''
-d_chown=''
-d_chroot=''
-d_chsize=''
-d_closedir=''
-d_void_closedir=''
-d_const=''
-cryptlib=''
-d_crypt=''
-d_csh=''
-full_csh=''
-d_cuserid=''
-d_dbl_dig=''
-d_difftime=''
-d_dlerror=''
-d_dlopen=''
-d_dlsymun=''
-d_dosuid=''
-d_suidsafe=''
-d_drand48proto=''
-d_dup2=''
-d_eaccess=''
-d_endgrent=''
-d_endhent=''
-d_endnent=''
-d_endpent=''
-d_endpwent=''
-d_endsent=''
-d_fchmod=''
-d_fchown=''
-d_fcntl=''
-d_fcntl_can_lock=''
-d_fd_macros=''
-d_fd_set=''
-d_fds_bits=''
-d_fgetpos=''
-d_flexfnam=''
-d_flock=''
-d_fork=''
-d_fpos64_t=''
-d_frexpl=''
-d_fs_data_s=''
-d_fseeko=''
-d_fsetpos=''
-d_fstatfs=''
-d_fsync=''
-d_ftello=''
-d_ftime=''
-d_gettimeod=''
-d_Gconvert=''
-d_getcwd=''
-d_getespwnam=''
-d_getfsstat=''
-d_getgrent=''
-d_getgrps=''
-d_gethbyaddr=''
-d_gethbyname=''
-d_gethent=''
-aphostname=''
-d_gethname=''
-d_phostname=''
-d_uname=''
-d_gethostprotos=''
-d_getlogin=''
-d_getmnt=''
-d_getmntent=''
-d_getnbyaddr=''
-d_getnbyname=''
-d_getnent=''
-d_getnetprotos=''
-d_getpagsz=''
-d_getpent=''
-d_getpgid=''
-d_getpgrp2=''
-d_bsdgetpgrp=''
-d_getpgrp=''
-d_getppid=''
-d_getprior=''
-d_getpbyname=''
-d_getpbynumber=''
-d_getprotoprotos=''
-d_getprpwnam=''
-d_getpwent=''
-d_getsent=''
-d_getservprotos=''
-d_getspnam=''
-d_getsbyname=''
-d_getsbyport=''
-d_gnulibc=''
-d_hasmntopt=''
-d_htonl=''
-d_iconv=''
-d_inetaton=''
-d_int64_t=''
-d_isascii=''
-d_isnan=''
-d_isnanl=''
-d_killpg=''
-d_lchown=''
-d_ldbl_dig=''
-d_link=''
-d_locconv=''
-d_lockf=''
-d_longdbl=''
-longdblsize=''
-d_longlong=''
-longlongsize=''
-d_lseekproto=''
-d_lstat=''
-d_madvise=''
-d_mblen=''
-d_mbstowcs=''
-d_mbtowc=''
-d_memchr=''
-d_memcmp=''
-d_memcpy=''
-d_memmove=''
-d_memset=''
-d_mkdir=''
-d_mkdtemp=''
-d_mkfifo=''
-d_mkstemp=''
-d_mkstemps=''
-d_mktime=''
-d_mmap=''
-mmaptype=''
-d_modfl=''
-d_mprotect=''
-d_msg=''
-d_msgctl=''
-d_msgget=''
-d_msgrcv=''
-d_msgsnd=''
-d_msync=''
-d_munmap=''
-d_nice=''
-d_off64_t=''
-d_open3=''
-d_fpathconf=''
-d_pathconf=''
-d_pause=''
-d_pipe=''
-d_poll=''
-d_portable=''
-d_old_pthread_create_joinable=''
-old_pthread_create_joinable=''
-d_pthread_yield=''
-d_sched_yield=''
-sched_yield=''
-d_qgcvt=''
-d_readdir=''
-d_rewinddir=''
-d_seekdir=''
-d_telldir=''
-d_readlink=''
-d_rename=''
-d_rmdir=''
-d_safebcpy=''
-d_safemcpy=''
-d_sanemcmp=''
-d_sbrkproto=''
-d_select=''
-d_sem=''
-d_semctl=''
-d_semget=''
-d_semop=''
-d_setegid=''
-d_seteuid=''
-d_setgrent=''
-d_setgrps=''
-d_sethent=''
-d_setlinebuf=''
-d_setlocale=''
-d_setnent=''
-d_setpent=''
-d_setpgid=''
-d_setpgrp2=''
-d_bsdsetpgrp=''
-d_setpgrp=''
-d_setprior=''
-d_setproctitle=''
-d_setpwent=''
-d_setregid=''
-d_setresgid=''
-d_setresuid=''
-d_setreuid=''
-d_setrgid=''
-d_setruid=''
-d_setsent=''
-d_setsid=''
-d_setvbuf=''
-d_sfio=''
-usesfio=''
-d_shm=''
-d_shmat=''
-d_shmatprototype=''
-shmattype=''
-d_shmctl=''
-d_shmdt=''
-d_shmget=''
-d_sigaction=''
-d_sigsetjmp=''
-d_msg_ctrunc=''
-d_msg_dontroute=''
-d_msg_oob=''
-d_msg_peek=''
-d_msg_proxy=''
-d_oldsock=''
-d_scm_rights=''
-d_socket=''
-d_sockpair=''
-sockethdr=''
-socketlib=''
-d_socklen_t=''
-d_socks5_init=''
-d_sqrtl=''
-d_statblks=''
-d_statfs_f_flags=''
-d_statfs_s=''
-d_fstatvfs=''
-d_statvfs=''
-d_stdio_cnt_lval=''
-d_stdio_ptr_lval=''
-d_stdio_ptr_lval_nochange_cnt=''
-d_stdio_ptr_lval_sets_cnt=''
-d_stdiobase=''
-d_stdstdio=''
-stdio_base=''
-stdio_bufsiz=''
-stdio_cnt=''
-stdio_filbuf=''
-stdio_ptr=''
-d_index=''
-d_strchr=''
-d_strcoll=''
-d_strctcpy=''
-d_strerrm=''
-d_strerror=''
-d_sysernlst=''
-d_syserrlst=''
-d_strtod=''
-d_strtol=''
-d_strtold=''
-d_strtoll=''
-d_strtoul=''
-d_strtoull=''
-d_strtouq=''
-d_strxfrm=''
-d_symlink=''
-d_syscall=''
-d_sysconf=''
-d_system=''
-d_tcgetpgrp=''
-d_tcsetpgrp=''
-d_telldirproto=''
-d_time=''
-timetype=''
-clocktype=''
-d_times=''
-d_truncate=''
-d_tzname=''
-d_umask=''
-d_semctl_semid_ds=''
-d_semctl_semun=''
-d_union_semun=''
-d_ustat=''
-d_vfork=''
-usevfork=''
-d_voidsig=''
-signal_t=''
-d_volatile=''
-d_charvspr=''
-d_vprintf=''
-d_wait4=''
-d_waitpid=''
-d_wcstombs=''
-d_wctomb=''
-dlext=''
-cccdlflags=''
-ccdlflags=''
-dlsrc=''
-ld=''
-lddlflags=''
-usedl=''
-doublesize=''
-ebcdic=''
-fflushNULL=''
-fflushall=''
-fpossize=''
-fpostype=''
-gccosandvers=''
-gccversion=''
-gidformat=''
-gidsign=''
-gidsize=''
-gidtype=''
-groupstype=''
-h_fcntl=''
-h_sysfile=''
-i_arpainet=''
-db_hashtype=''
-db_prefixtype=''
-i_db=''
-i_dbm=''
-i_rpcsvcdbm=''
-d_dirnamlen=''
-direntrytype=''
-i_dirent=''
-i_dld=''
-i_dlfcn=''
-i_fcntl=''
-i_float=''
-i_gdbm=''
-d_grpasswd=''
-i_grp=''
-i_iconv=''
-i_ieeefp=''
-i_inttypes=''
-i_libutil=''
-i_limits=''
-i_locale=''
-i_machcthr=''
-i_malloc=''
-i_math=''
-i_memory=''
-i_mntent=''
-i_ndbm=''
-i_netdb=''
-i_neterrno=''
-i_netinettcp=''
-i_niin=''
-i_sysin=''
-i_poll=''
-i_prot=''
-i_pthread=''
-d_pwage=''
-d_pwchange=''
-d_pwclass=''
-d_pwcomment=''
-d_pwexpire=''
-d_pwgecos=''
-d_pwpasswd=''
-d_pwquota=''
-i_pwd=''
-i_sfio=''
-i_shadow=''
-i_socks=''
-i_stddef=''
-i_stdlib=''
-i_string=''
-strings=''
-i_sunmath=''
-i_sysaccess=''
-i_sysdir=''
-i_sysfile=''
-d_voidtty=''
-i_bsdioctl=''
-i_sysfilio=''
-i_sysioctl=''
-i_syssockio=''
-i_syslog=''
-i_sysmman=''
-i_sysmode=''
-i_sysmount=''
-i_sysndir=''
-i_sysparam=''
-i_sysresrc=''
-i_syssecrt=''
-i_sysselct=''
-i_sysstat=''
-i_sysstatfs=''
-i_sysstatvfs=''
-i_systimes=''
-i_systypes=''
-i_sysuio=''
-i_sysun=''
-i_sysutsname=''
-i_sysvfs=''
-i_syswait=''
-i_sgtty=''
-i_termio=''
-i_termios=''
-i_systime=''
-i_systimek=''
-i_time=''
-timeincl=''
-i_unistd=''
-i_ustat=''
-i_utime=''
-i_values=''
-i_stdarg=''
-i_varargs=''
-i_varhdr=''
-i_vfork=''
-inc_version_list=''
-inc_version_list_init=''
-installprefix=''
-installprefixexp=''
-installstyle=''
-installusrbinperl=''
-intsize=''
-longsize=''
-shortsize=''
-issymlink=''
-libc=''
-ldlibpthname=''
-libperl=''
-shrpenv=''
-useshrplib=''
-glibpth=''
-libpth=''
-loclibpth=''
-plibpth=''
-xlibpth=''
-ignore_versioned_solibs=''
-libs=''
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=''
-lns=''
-d_PRIEUldbl=''
-d_PRIFUldbl=''
-d_PRIGUldbl=''
-d_PRIeldbl=''
-d_PRIfldbl=''
-d_PRIgldbl=''
-d_SCNfldbl=''
-sPRIEUldbl=''
-sPRIFUldbl=''
-sPRIGUldbl=''
-sPRIeldbl=''
-sPRIfldbl=''
-sPRIgldbl=''
-sSCNfldbl=''
-lseeksize=''
-lseektype=''
-make_set_make=''
-d_mymalloc=''
-freetype=''
-mallocobj=''
-mallocsrc=''
-malloctype=''
-usemymalloc=''
-installman1dir=''
-man1dir=''
-man1direxp=''
-man1ext=''
-installman3dir=''
-man3dir=''
-man3direxp=''
-man3ext=''
-modetype=''
-multiarch=''
-mydomain=''
-myhostname=''
-phostname=''
-c=''
-n=''
-d_eofnblk=''
-eagain=''
-o_nonblock=''
-rd_nodata=''
-netdb_hlen_type=''
-netdb_host_type=''
-netdb_name_type=''
-netdb_net_type=''
-groupcat=''
-hostcat=''
-passcat=''
-orderlib=''
-ranlib=''
-d_perl_otherlibdirs=''
-otherlibdirs=''
-package=''
-spackage=''
-pager=''
-api_revision=''
-api_subversion=''
-api_version=''
-api_versionstring=''
-patchlevel=''
-revision=''
-subversion=''
-version=''
-perl5=''
-perladmin=''
-perlpath=''
-d_nv_preserves_uv=''
-d_nv_preserves_uv_bits=''
-i16size=''
-i16type=''
-i32size=''
-i32type=''
-i64size=''
-i64type=''
-i8size=''
-i8type=''
-ivsize=''
-ivtype=''
-nvsize=''
-nvtype=''
-u16size=''
-u16type=''
-u32size=''
-u32type=''
-u64size=''
-u64type=''
-u8size=''
-u8type=''
-uvsize=''
-uvtype=''
-ivdformat=''
-nvEUformat=''
-nvFUformat=''
-nvGUformat=''
-nveformat=''
-nvfformat=''
-nvgformat=''
-uvXUformat=''
-uvoformat=''
-uvuformat=''
-uvxformat=''
-pidtype=''
-prefix=''
-prefixexp=''
-installprivlib=''
-privlib=''
-privlibexp=''
-prototype=''
-ptrsize=''
-d_PRIXU64=''
-d_PRId64=''
-d_PRIi64=''
-d_PRIo64=''
-d_PRIu64=''
-d_PRIx64=''
-sPRIXU64=''
-sPRId64=''
-sPRIi64=''
-sPRIo64=''
-sPRIu64=''
-sPRIx64=''
-d_quad=''
-quadkind=''
-quadtype=''
-uquadtype=''
-drand01=''
-randbits=''
-randfunc=''
-randseedtype=''
-seedfunc=''
-installscript=''
-scriptdir=''
-scriptdirexp=''
-selectminbits=''
-selecttype=''
-sh=''
-sig_count=''
-sig_name=''
-sig_name_init=''
-sig_num=''
-sig_num_init=''
-installsitearch=''
-sitearch=''
-sitearchexp=''
-installsitebin=''
-sitebin=''
-sitebinexp=''
-installsitelib=''
-sitelib=''
-sitelib_stem=''
-sitelibexp=''
-siteprefix=''
-siteprefixexp=''
-sizesize=''
-sizetype=''
-so=''
-socksizetype=''
-sharpbang=''
-shsharp=''
-spitshell=''
-src=''
-ssizetype=''
-startperl=''
-startsh=''
-stdchar=''
-d_stdio_stream_array=''
-stdio_stream_array=''
-sysman=''
-trnl=''
-uidformat=''
-uidsign=''
-uidsize=''
-uidtype=''
-archname64=''
-use64bitall=''
-use64bitint=''
-ccflags_uselargefiles=''
-ldflags_uselargefiles=''
-libswanted_uselargefiles=''
-uselargefiles=''
-uselongdouble=''
-usemorebits=''
-usemultiplicity=''
-nm_opt=''
-nm_so_opt=''
-runnm=''
-usenm=''
-useperlio=''
-usesocks=''
-d_oldpthreads=''
-use5005threads=''
-useithreads=''
-usethreads=''
-incpath=''
-mips_type=''
-usrinc=''
-d_vendorarch=''
-installvendorarch=''
-vendorarch=''
-vendorarchexp=''
-d_vendorbin=''
-installvendorbin=''
-vendorbin=''
-vendorbinexp=''
-d_vendorlib=''
-installvendorlib=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-usevendorprefix=''
-vendorprefix=''
-vendorprefixexp=''
-versiononly=''
-defvoidused=''
-voidflags=''
-pm_apiversion=''
-xs_apiversion=''
-yacc=''
-yaccflags=''
-CONFIG=''
-
-define='define'
-undef='undef'
-smallmach='pdp11 i8086 z8000 i80286 iAPX286'
-rmlist=''
-
-: We must find out about Eunice early
-eunicefix=':'
-if test -f /etc/unixtovms; then
- eunicefix=/etc/unixtovms
-fi
-if test -f /etc/unixtovms.exe; then
- eunicefix=/etc/unixtovms.exe
-fi
-
-i_whoami=''
-ccname=''
-ccversion=''
-perllibs=''
-: set useposix=false in your hint file to disable the POSIX extension.
-useposix=true
-: set useopcode=false in your hint file to disable the Opcode extension.
-useopcode=true
-: Trailing extension. Override this in a hint file, if needed.
-_exe=''
-: Extra object files, if any, needed on this platform.
-archobjs=''
-archname=''
-: Possible local include directories to search.
-: Set locincpth to "" in a hint file to defeat local include searches.
-locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
-locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
-:
-: no include file wanted by default
-inclwanted=''
-
-groupstype=''
-: change the next line if compiling for Xenix/286 on Xenix/386
-xlibpth='/usr/lib/386 /lib/386'
-: Possible local library directories to search.
-loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
-loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
-
-: general looking path for locating libraries
-glibpth="/lib /usr/lib $xlibpth"
-glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
-test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
-test -f /shlib/libc.so && glibpth="/shlib $glibpth"
-
-: Private path used by Configure to find libraries. Its value
-: is prepended to libpth. This variable takes care of special
-: machines, like the mips. Usually, it should be empty.
-plibpth=''
-
-: default library list
-libswanted=''
-: some systems want to use only the non-versioned libso:s
-ignore_versioned_solibs=''
-archname64=''
-ccflags_uselargefiles=''
-ldflags_uselargefiles=''
-libswanted_uselargefiles=''
-: set usemultiplicity on the Configure command line to enable multiplicity.
-: set usesocks on the Configure command line to enable socks.
-: set usethreads on the Configure command line to enable threads.
-: full support for void wanted by default
-defvoidused=15
-
-: List of libraries we want.
-: If anyone needs -lnet, put it in a hint file.
-libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
-libswanted="$libswanted dld ld sun m c cposix posix"
-libswanted="$libswanted ndir dir crypt sec"
-libswanted="$libswanted ucb bsd BSD PW x iconv util"
-: We probably want to search /usr/shlib before most other libraries.
-: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
-glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
-glibpth="/usr/shlib $glibpth"
-: Do not use vfork unless overridden by a hint file.
-usevfork=false
-
-: Find the basic shell for Bourne shell scripts
-case "$sh" in
-'')
- case "$SYSTYPE" in
- *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
- *) xxx='/bin/sh';;
- esac
- if test -f "$xxx"; then
- sh="$xxx"
- else
- : Build up a list and do a single loop so we can 'break' out.
- pth=`echo $PATH | sed -e "s/$p_/ /g"`
- for xxx in sh bash ksh pdksh ash; do
- for p in $pth; do
- try="$try ${p}/${xxx}"
- done
- done
- for xxx in $try; do
- if test -f "$xxx"; then
- sh="$xxx";
- break
- elif test -f "$xxx.exe"; then
- sh="$xxx";
- break
- fi
- done
- fi
- ;;
-esac
-
-case "$sh" in
-'') cat <<EOM >&2
-$me: Fatal Error: I can't find a Bourne Shell anywhere.
-
-Usually it's in /bin/sh. How did you even get this far?
-Please contact me (Perl Maintainers) at perlbug@perl.org and
-we'll try to straighten this all out.
-EOM
- exit 1
- ;;
-esac
-
-: see if sh knows # comments
-if `$sh -c '#' >/dev/null 2>&1`; then
- shsharp=true
- spitshell=cat
- xcat=/bin/cat
- test -f $xcat || xcat=/usr/bin/cat
- echo "#!$xcat" >try
- $eunicefix try
- chmod +x try
- ./try > today
- if test -s today; then
- sharpbang='#!'
- else
- echo "#! $xcat" > try
- $eunicefix try
- chmod +x try
- ./try > today
- if test -s today; then
- sharpbang='#! '
- else
- sharpbang=': use '
- fi
- fi
-else
- echo " "
- echo "Your $sh doesn't grok # comments--I will strip them later on."
- shsharp=false
- cd ..
- echo "exec grep -v '^[ ]*#'" >spitshell
- chmod +x spitshell
- $eunicefix spitshell
- spitshell=`pwd`/spitshell
- cd UU
- echo "I presume that if # doesn't work, #! won't work either!"
- sharpbang=': use '
-fi
-rm -f try today
-
-: figure out how to guarantee sh startup
-case "$startsh" in
-'') startsh=${sharpbang}${sh} ;;
-*)
-esac
-cat >try <<EOSS
-$startsh
-set abc
-test "$?abc" != 1
-EOSS
-
-chmod +x try
-$eunicefix try
-if ./try; then
- : echo "Yup, it does."
-else
- echo "Hmm... '$startsh' does not guarantee sh startup..."
- echo "You may have to fix up the shell scripts to make sure $sh runs them."
-fi
-rm -f try
-
-
-: Save command line options in file UU/cmdline.opt for later use in
-: generating config.sh.
-cat > cmdline.opt <<EOSH
-# Configure command line arguments.
-config_arg0='$0'
-config_args='$*'
-config_argc=$#
-EOSH
-argn=1
-for arg in "$@"; do
- cat >>cmdline.opt <<EOSH
-config_arg$argn='$arg'
-EOSH
- argn=`expr $argn + 1`
-done
-
-: produce awk script to parse command line options
-cat >options.awk <<'EOF'
-BEGIN {
- optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
-
- len = length(optstr);
- for (i = 1; i <= len; i++) {
- c = substr(optstr, i, 1);
- if (i < len) a = substr(optstr, i + 1, 1); else a = "";
- if (a == ":") {
- arg[c] = 1;
- i++;
- }
- opt[c] = 1;
- }
-}
-{
- expect = 0;
- str = $0;
- if (substr(str, 1, 1) != "-") {
- printf("'%s'\n", str);
- next;
- }
- len = length($0);
- for (i = 2; i <= len; i++) {
- c = substr(str, i, 1);
- if (!opt[c]) {
- printf("-%s\n", substr(str, i));
- next;
- }
- printf("-%s\n", c);
- if (arg[c]) {
- if (i < len)
- printf("'%s'\n", substr(str, i + 1));
- else
- expect = 1;
- next;
- }
- }
-}
-END {
- if (expect)
- print "?";
-}
-EOF
-
-: process the command line options
-set X `for arg in "$@"; do echo "X$arg"; done |
- sed -e s/X// | awk -f options.awk`
-eval "set $*"
-shift
-rm -f options.awk
-
-: set up default values
-fastread=''
-reuseval=false
-config_sh=''
-alldone=''
-error=''
-silent=''
-extractsh=''
-override=''
-knowitall=''
-rm -f optdef.sh posthint.sh
-cat >optdef.sh <<EOS
-$startsh
-EOS
-
-
-: option parsing
-while test $# -gt 0; do
- case "$1" in
- -d) shift; fastread=yes;;
- -e) shift; alldone=cont;;
- -f)
- shift
- cd ..
- if test -r "$1"; then
- config_sh="$1"
- else
- echo "$me: cannot read config file $1." >&2
- error=true
- fi
- cd UU
- shift;;
- -h) shift; error=true;;
- -r) shift; reuseval=true;;
- -s) shift; silent=true; realsilent=true;;
- -E) shift; alldone=exit;;
- -K) shift; knowitall=true;;
- -O) shift; override=true;;
- -S) shift; silent=true; extractsh=true;;
- -D)
- shift
- case "$1" in
- *=)
- echo "$me: use '-U symbol=', not '-D symbol='." >&2
- echo "$me: ignoring -D $1" >&2
- ;;
- *=*) echo "$1" | \
- sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
- *) echo "$1='define'" >> optdef.sh;;
- esac
- shift
- ;;
- -U)
- shift
- case "$1" in
- *=) echo "$1" >> optdef.sh;;
- *=*)
- echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
- echo "$me: ignoring -U $1" >&2
- ;;
- *) echo "$1='undef'" >> optdef.sh;;
- esac
- shift
- ;;
- -A)
- shift
- xxx=''
- yyy="$1"
- zzz=''
- uuu=undef
- case "$yyy" in
- *=*) zzz=`echo $yyy|sed 's!=.*!!'`
- case "$zzz" in
- *:*) zzz='' ;;
- *) xxx=append
- zzz=" "`echo $yyy|sed 's!^[^=]*=!!'`
- yyy=`echo $yyy|sed 's!=.*!!'` ;;
- esac
- ;;
- esac
- case "$xxx" in
- '') case "$yyy" in
- *:*) xxx=`echo $yyy|sed 's!:.*!!'`
- yyy=`echo $yyy|sed 's!^[^:]*:!!'`
- zzz=`echo $yyy|sed 's!^[^=]*=!!'`
- yyy=`echo $yyy|sed 's!=.*!!'` ;;
- *) xxx=`echo $yyy|sed 's!:.*!!'`
- yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
- esac
- ;;
- esac
- case "$xxx" in
- append)
- echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
- clear)
- echo "$yyy=''" >> posthint.sh ;;
- define)
- case "$zzz" in
- '') zzz=define ;;
- esac
- echo "$yyy='$zzz'" >> posthint.sh ;;
- eval)
- echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
- prepend)
- echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
- undef)
- case "$zzz" in
- '') zzz="$uuu" ;;
- esac
- echo "$yyy=$zzz" >> posthint.sh ;;
- *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
- esac
- shift
- ;;
- -V) echo "$me generated by metaconfig 3.0 PL70." >&2
- exit 0;;
- --) break;;
- -*) echo "$me: unknown option $1" >&2; shift; error=true;;
- *) break;;
- esac
-done
-
-case "$error" in
-true)
- cat >&2 <<EOM
-Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
- [-U symbol] [-U symbol=] [-A command:symbol...]
- -d : use defaults for all answers.
- -e : go on without questioning past the production of config.sh.
- -f : specify an alternate default configuration file.
- -h : print this help message and exit (with an error status).
- -r : reuse C symbols value if possible (skips costly nm extraction).
- -s : silent mode, only echoes questions and essential information.
- -D : define symbol to have some value:
- -D symbol symbol gets the value 'define'
- -D symbol=value symbol gets the value 'value'
- -E : stop at the end of questions, after having produced config.sh.
- -K : do not use unless you know what you are doing.
- -O : let -D and -U override definitions from loaded configuration file.
- -S : perform variable substitutions on all .SH files (can mix with -f)
- -U : undefine symbol:
- -U symbol symbol gets the value 'undef'
- -U symbol= symbol gets completely empty
- -A : manipulate symbol after the platform specific hints have been applied:
- -A symbol=value append " "value to symbol
- -A append:symbol=value append value to symbol
- -A define:symbol=value define symbol to have value
- -A clear:symbol define symbol to be ''
- -A define:symbol define symbol to be 'define'
- -A eval:symbol=value define symbol to be eval of value
- -A prepend:symbol=value prepend value to symbol
- -A undef:symbol define symbol to be 'undef'
- -A undef:symbol= define symbol to be ''
- -V : print version number and exit (with a zero status).
-EOM
- exit 1
- ;;
-esac
-
-: Sanity checks
-case "$fastread$alldone" in
-yescont|yesexit) ;;
-*)
- case "$extractsh" in
- true) ;;
- *)
- if test ! -t 0; then
- echo "Say 'sh Configure', not 'sh <Configure'"
- exit 1
- fi
- ;;
- esac
- ;;
-esac
-
-exec 4>&1
-case "$silent" in
-true) exec 1>/dev/null;;
-esac
-
-: run the defines and the undefines, if any, but leave the file out there...
-touch optdef.sh
-. ./optdef.sh
-: create the posthint manipulation script and leave the file out there...
-touch posthint.sh
-
-: set package name
-package=perl5
-first=`echo $package | sed -e 's/^\(.\).*/\1/'`
-last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
-case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
-ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
-*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
-esac
-
-: Some greps do not return status, grrr.
-echo "grimblepritz" >grimble
-if grep blurfldyick grimble >/dev/null 2>&1 ; then
- contains=contains
-elif grep grimblepritz grimble >/dev/null 2>&1 ; then
- contains=grep
-else
- contains=contains
-fi
-rm -f grimble
-: the following should work in any shell
-case "$contains" in
-contains*)
- echo " "
- echo "AGH! Grep doesn't return a status. Attempting remedial action."
- cat >contains <<'EOSS'
-grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
-EOSS
-chmod +x contains
-esac
-
-: Find the path to the source tree
-case "$src" in
-'') case "$0" in
- */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
- case "$src" in
- /*) ;;
- .) ;;
- *) src=`cd ../$src && pwd` ;;
- esac
- ;;
- *) src='.';;
- esac;;
-esac
-case "$src" in
-'') src=/
- rsrc=/
- ;;
-/*) rsrc="$src";;
-*) rsrc="../$src";;
-esac
-if test -f $rsrc/Configure && \
- $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
-then
- : found it, so we are ok.
-else
- rsrc=''
- for src in . .. ../.. ../../.. ../../../..; do
- if test -f ../$src/Configure && \
- $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
- then
- rsrc=../$src
- break
- fi
- done
-fi
-case "$rsrc" in
-'')
- cat <<EOM >&4
-
-Sorry, I can't seem to locate the source dir for $package. Please start
-Configure with an explicit path -- i.e. /some/path/Configure.
-
-EOM
- exit 1
- ;;
-../.) rsrc='..';;
-*)
- echo " "
- echo "Sources for $package found in \"$src\"." >&4
- ;;
-esac
-
-: script used to extract .SH files with variable substitutions
-cat >extract <<'EOS'
-CONFIGDOTSH=true
-echo "Doing variable substitutions on .SH files..."
-if test -f $src/MANIFEST; then
- set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
-else
- echo "(Looking for .SH files under the source directory.)"
- set x `(cd $src; find . -name "*.SH" -print)`
-fi
-shift
-case $# in
-0) set x `(cd $src; echo *.SH)`; shift;;
-esac
-if test ! -f $src/$1; then
- shift
-fi
-mkdir_p='
-name=$1;
-create="";
-while test $name; do
- if test ! -d "$name"; then
- create="$name $create";
- name=`echo $name | sed -e "s|^[^/]*$||"`;
- name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
- else
- name="";
- fi;
-done;
-for file in $create; do
- mkdir $file;
-done
-'
-for file in $*; do
- case "$src" in
- ".")
- case "$file" in
- */*)
- dir=`expr X$file : 'X\(.*\)/'`
- file=`expr X$file : 'X.*/\(.*\)'`
- (cd $dir && . ./$file)
- ;;
- *)
- . ./$file
- ;;
- esac
- ;;
- *)
- case "$file" in
- */*)
- dir=`expr X$file : 'X\(.*\)/'`
- file=`expr X$file : 'X.*/\(.*\)'`
- (set x $dir; shift; eval $mkdir_p)
- sh <$src/$dir/$file
- ;;
- *)
- sh <$src/$file
- ;;
- esac
- ;;
- esac
-done
-if test -f $src/config_h.SH; then
- if test ! -f config.h; then
- : oops, they left it out of MANIFEST, probably, so do it anyway.
- . $src/config_h.SH
- fi
-fi
-EOS
-
-: extract files and exit if asked to do so
-case "$extractsh" in
-true)
- case "$realsilent" in
- true) ;;
- *) exec 1>&4;;
- esac
- case "$config_sh" in
- '') config_sh='config.sh';;
- esac
- echo " "
- echo "Fetching answers from $config_sh..."
- cd ..
- . $config_sh
- test "$override" && . ./optdef.sh
- echo " "
- . UU/extract
- rm -rf UU
- echo "Done."
- exit 0
- ;;
-esac
-
-: Eunice requires " " instead of "", can you believe it
-echo " "
-: Here we go...
-echo "Beginning of configuration questions for $package."
-
-trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
-
-: first determine how to suppress newline on echo command
-echo " "
-echo "Checking echo to see how to suppress newlines..."
-(echo "hi there\c" ; echo " ") >.echotmp
-if $contains c .echotmp >/dev/null 2>&1 ; then
- echo "...using -n."
- n='-n'
- c=''
-else
- cat <<'EOM'
-...using \c
-EOM
- n=''
- c='\c'
-fi
-echo $n "The star should be here-->$c"
-echo '*'
-rm -f .echotmp
-
-: Now test for existence of everything in MANIFEST
-echo " "
-if test -f $rsrc/MANIFEST; then
- echo "First let's make sure your kit is complete. Checking..." >&4
- awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
- rm -f missing
- tmppwd=`pwd`
- for filelist in x??; do
- (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
- done
- if test -s missing; then
- cat missing >&4
- cat >&4 <<'EOM'
-
-THIS PACKAGE SEEMS TO BE INCOMPLETE.
-
-You have the option of continuing the configuration process, despite the
-distinct possibility that your kit is damaged, by typing 'y'es. If you
-do, don't blame me if something goes wrong. I advise you to type 'n'o
-and contact the author (perlbug@perl.org).
-
-EOM
- echo $n "Continue? [n] $c" >&4
- read ans
- case "$ans" in
- y*)
- echo "Continuing..." >&4
- rm -f missing
- ;;
- *)
- echo "ABORTING..." >&4
- kill $$
- ;;
- esac
- else
- echo "Looks good..."
- fi
-else
- echo "There is no MANIFEST file. I hope your kit is complete !"
-fi
-rm -f missing x??
-
-echo " "
-: Find the appropriate value for a newline for tr
-if test -n "$DJGPP"; then
- trnl='\012'
-fi
-if test X"$trnl" = X; then
- case "`echo foo|tr '\n' x 2>/dev/null`" in
- foox) trnl='\n' ;;
- esac
-fi
-if test X"$trnl" = X; then
- case "`echo foo|tr '\012' x 2>/dev/null`" in
- foox) trnl='\012' ;;
- esac
-fi
-if test X"$trnl" = X; then
- cat <<EOM >&2
-
-$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
-
-EOM
- exit 1
-fi
-
-: compute the number of columns on the terminal for proper question formatting
-case "$COLUMNS" in
-'') COLUMNS='80';;
-esac
-
-: set up the echo used in my read
-myecho="case \"\$xxxm\" in
-'') echo $n \"\$rp $c\" >&4;;
-*) case \"\$rp\" in
- '') echo $n \"[\$xxxm] $c\";;
- *)
- if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
- echo \"\$rp\" >&4
- echo $n \"[\$xxxm] $c\" >&4
- else
- echo $n \"\$rp [\$xxxm] $c\" >&4
- fi
- ;;
- esac;;
-esac"
-
-: now set up to do reads with possible shell escape and default assignment
-cat <<EOSC >myread
-$startsh
-xxxm=\$dflt
-$myecho
-ans='!'
-case "\$fastread" in
-yes) case "\$dflt" in
- '') ;;
- *) ans='';
- case "\$silent-\$rp" in
- true-) ;;
- *) echo " " >&4;;
- esac;;
- esac;;
-*) case "\$silent" in
- true) case "\$rp" in
- '') ans='';;
- esac;;
- esac;;
-esac
-while expr "X\$ans" : "X!" >/dev/null; do
- read answ
- set x \$xxxm
- shift
- aok=''; eval "ans=\\"\$answ\\"" && aok=y
- case "\$answ" in
- "!")
- sh 1>&4
- echo " "
- $myecho
- ;;
- !*)
- set x \`expr "X\$ans" : "X!\(.*\)\$"\`
- shift
- sh 1>&4 -c "\$*"
- echo " "
- $myecho
- ;;
- "\$ans")
- case "\$ans" in
- \\&*)
- set x \`expr "X\$ans" : "X&\(.*\)\$"\`
- shift
- case "\$1" in
- -d)
- fastread=yes
- echo "(OK, I'll run with -d after this question.)" >&4
- ;;
- -*)
- echo "*** Sorry, \$1 not supported yet." >&4
- ;;
- esac
- $myecho
- ans=!
- ;;
- esac;;
- *)
- case "\$aok" in
- y)
- echo "*** Substitution done -- please confirm."
- xxxm="\$ans"
- ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
- xxxm="\$ans"
- ans=!
- ;;
- *)
- echo "*** Error -- try again."
- ans=!
- ;;
- esac
- $myecho
- ;;
- esac
- case "\$ans\$xxxm\$nostick" in
- '')
- ans=!
- $myecho
- ;;
- esac
-done
-case "\$ans" in
-'') ans="\$xxxm";;
-esac
-EOSC
-
-: create .config dir to save info across Configure sessions
-test -d ../.config || mkdir ../.config
-cat >../.config/README <<EOF
-This directory created by Configure to save information that should
-persist across sessions for $package.
-
-You may safely delete it if you wish.
-EOF
-
-xversion=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
-case "$usedevel" in
-$define|true|[yY]*) ;;
-*) case "$xversion" in
- *[13579])
- cat >&4 <<EOH
-*** WHOA THERE!!! ***
-
- This is an UNSTABLE DEVELOPMENT release.
- The version of this $package distribution is $xversion, that is, odd,
- (as opposed to even) and that signifies a development release.
- If you want a maintenance release, you want an even-numbered version.
-
- Do ***NOT*** install this into production use.
- Data corruption and crashes are possible.
-
- It is most seriously suggested that you do not continue any further
- unless you want to help in developing and debugging Perl.
-
- If you *still* want to build perl, you can answer 'y' now,
- or pass -Dusedevel to Configure.
-
-EOH
- rp='Do you really want to continue?'
- dflt='n'
- . ./myread
- case "$ans" in
- [yY]) echo >&4 "Okay, continuing." ;;
- *) echo >&4 "Okay, bye."
- exit 1
- ;;
- esac
- ;;
- esac
- ;;
-esac
-
-: general instructions
-needman=true
-firsttime=true
-user=`(logname) 2>/dev/null`
-case "$user" in
-'') user=`whoami 2>&1`;;
-esac
-if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
- firsttime=false
- echo " "
- rp='Would you like to see the instructions?'
- dflt=n
- . ./myread
- case "$ans" in
- [yY]*) ;;
- *) needman=false;;
- esac
-fi
-if $needman; then
- cat <<EOH
-
-This installation shell script will examine your system and ask you questions
-to determine how the perl5 package should be installed. If you get
-stuck on a question, you may use a ! shell escape to start a subshell or
-execute a command. Many of the questions will have default answers in square
-brackets; typing carriage return will give you the default.
-
-On some of the questions which ask for file or directory names you are allowed
-to use the ~name construct to specify the login directory belonging to "name",
-even if you don't have a shell which knows about that. Questions where this is
-allowed will be marked "(~name ok)".
-
-EOH
- rp=''
- dflt='Type carriage return to continue'
- . ./myread
- cat <<'EOH'
-
-The prompter used in this script allows you to use shell variables and
-backticks in your answers. You may use $1, $2, etc... to refer to the words
-in the default answer, as if the default line was a set of arguments given to a
-script shell. This means you may also use $* to repeat the whole default line,
-so you do not have to re-type everything to add something to the default.
-
-Everytime there is a substitution, you will have to confirm. If there is an
-error (e.g. an unmatched backtick), the default answer will remain unchanged
-and you will be prompted again.
-
-If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
-the questions and use the computed defaults (or the previous answers if there
-was already a config.sh file). Type 'Configure -h' for a list of options.
-You may also start interactively and then answer '& -d' at any prompt to turn
-on the non-interactive behaviour for the remainder of the execution.
-
-EOH
- . ./myread
- cat <<EOH
-
-Much effort has been expended to ensure that this shell script will run on any
-Unix system. If despite that it blows up on yours, your best bet is to edit
-Configure and run it again. If you can't run Configure for some reason,
-you'll have to generate a config.sh file by hand. Whatever problems you
-have, let me (perlbug@perl.org) know how I blew it.
-
-This installation script affects things in two ways:
-
-1) it may do direct variable substitutions on some of the files included
- in this kit.
-2) it builds a config.h file for inclusion in C programs. You may edit
- any of these files as the need arises after running this script.
-
-If you make a mistake on a question, there is no easy way to back up to it
-currently. The easiest thing to do is to edit config.sh and rerun all the SH
-files. Configure will offer to let you do this before it runs the SH files.
-
-EOH
- dflt='Type carriage return to continue'
- . ./myread
- case "$firsttime" in
- true) echo $user >>../.config/instruct;;
- esac
-fi
-
-: find out where common programs are
-echo " "
-echo "Locating common programs..." >&4
-cat <<EOSC >loc
-$startsh
-case \$# in
-0) exit 1;;
-esac
-thing=\$1
-shift
-dflt=\$1
-shift
-for dir in \$*; do
- case "\$thing" in
- .)
- if test -d \$dir/\$thing; then
- echo \$dir
- exit 0
- fi
- ;;
- *)
- for thisthing in \$dir/\$thing; do
- : just loop through to pick last item
- done
- if test -f \$thisthing; then
- echo \$thisthing
- exit 0
- elif test -f \$dir/\$thing.exe; then
- if test -n "$DJGPP"; then
- echo \$dir/\$thing.exe
- else
- : on Eunice apparently
- echo \$dir/\$thing
- fi
- exit 0
- fi
- ;;
- esac
-done
-echo \$dflt
-exit 1
-EOSC
-chmod +x loc
-$eunicefix loc
-loclist="
-awk
-cat
-comm
-cp
-echo
-expr
-grep
-ls
-make
-mkdir
-rm
-sed
-sort
-touch
-tr
-uniq
-"
-trylist="
-Mcc
-ar
-bison
-byacc
-cpp
-csh
-date
-egrep
-gzip
-less
-ln
-more
-nm
-nroff
-pg
-test
-uname
-zip
-"
-pth=`echo $PATH | sed -e "s/$p_/ /g"`
-pth="$pth /lib /usr/lib"
-for file in $loclist; do
- eval xxx=\$$file
- case "$xxx" in
- /*|?:[\\/]*)
- if test -f "$xxx"; then
- : ok
- else
- echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
- xxx=`./loc $file $file $pth`
- fi
- ;;
- '') xxx=`./loc $file $file $pth`;;
- *) xxx=`./loc $xxx $xxx $pth`;;
- esac
- eval $file=$xxx
- eval _$file=$xxx
- case "$xxx" in
- /*)
- echo $file is in $xxx.
- ;;
- ?:[\\/]*)
- echo $file is in $xxx.
- ;;
- *)
- echo "I don't know where '$file' is, and my life depends on it." >&4
- echo "Go find a public domain implementation or fix your PATH setting!" >&4
- exit 1
- ;;
- esac
-done
-echo " "
-echo "Don't worry if any of the following aren't found..."
-say=offhand
-for file in $trylist; do
- eval xxx=\$$file
- case "$xxx" in
- /*|?:[\\/]*)
- if test -f "$xxx"; then
- : ok
- else
- echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
- xxx=`./loc $file $file $pth`
- fi
- ;;
- '') xxx=`./loc $file $file $pth`;;
- *) xxx=`./loc $xxx $xxx $pth`;;
- esac
- eval $file=$xxx
- eval _$file=$xxx
- case "$xxx" in
- /*)
- echo $file is in $xxx.
- ;;
- ?:[\\/]*)
- echo $file is in $xxx.
- ;;
- *)
- echo "I don't see $file out there, $say."
- say=either
- ;;
- esac
-done
-case "$egrep" in
-egrep)
- echo "Substituting grep for egrep."
- egrep=$grep
- ;;
-esac
-case "$ln" in
-ln)
- echo "Substituting cp for ln."
- ln=$cp
- ;;
-esac
-case "$test" in
-test)
- echo "Hopefully test is built into your sh."
- ;;
-*)
- if `sh -c "PATH= test true" >/dev/null 2>&1`; then
- echo "Using the test built into your sh."
- echo "Using the test built into your sh."
- test=test
- _test=test
- fi
- ;;
-esac
-case "$echo" in
-echo)
- echo "Hopefully echo is built into your sh."
- ;;
-'') ;;
-*)
- echo " "
-echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
- $echo $n "hi there$c" >foo1
- echo $n "hi there$c" >foo2
- if cmp foo1 foo2 >/dev/null 2>&1; then
- echo "They are compatible. In fact, they may be identical."
- else
- case "$n" in
- '-n') n='' c='\c';;
- *) n='-n' c='';;
- esac
- cat <<FOO
-They are not compatible! You are probably running ksh on a non-USG system.
-I'll have to use $echo instead of the builtin, since Bourne shell doesn't
-have echo built in and we may have to run some Bourne shell scripts. That
-means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
-
-FOO
- $echo $n "The star should be here-->$c"
- $echo "*"
- fi
- $rm -f foo1 foo2
- ;;
-esac
-
-cat <<EOS >checkcc
-$startsh
-EOS
-cat <<'EOSC' >>checkcc
-case "$cc" in
-'') ;;
-*) $rm -f try try.*
- $cat >try.c <<EOM
-int main(int argc, char *argv[]) {
- return 0;
-}
-EOM
- if $cc -o try $ccflags try.c; then
- :
- else
- echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
- despair=yes
- trygcc=yes
- case "$cc" in
- *gcc*) trygcc=no ;;
- esac
- case "`$cc -v -c try.c 2>&1`" in
- *gcc*) trygcc=no ;;
- esac
- if $test X"$trygcc" = Xyes; then
- if gcc -o try -c try.c; then
- echo " "
- echo "You seem to have a working gcc, though." >&4
- rp="Would you like to use it?"
- dflt=y
- if $test -f myread; then
- . ./myread
- else
- if $test -f UU/myread; then
- . ./UU/myread
- else
- echo "Cannot find myread, sorry. Aborting." >&2
- exit 1
- fi
- fi
- case "$ans" in
- [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
- esac
- fi
- fi
- if $test X"$despair" = Xyes; then
- $cat >&4 <<EOM
-You need to find a working C compiler.
-Either (purchase and) install the C compiler supplied by your OS vendor,
-or for a free C compiler try http://gcc.gnu.org/
-I cannot continue any further, aborting.
-EOM
- exit 1
- fi
- fi
- $rm -f try try.*
- ;;
-esac
-EOSC
-
-: determine whether symbolic links are supported
-echo " "
-$touch blurfl
-if $ln -s blurfl sym > /dev/null 2>&1 ; then
- echo "Symbolic links are supported." >&4
- lns="$ln -s"
-else
- echo "Symbolic links are NOT supported." >&4
- lns="$ln"
-fi
-$rm -f blurfl sym
-
-: determine whether symbolic links are supported
-echo " "
-case "$lns" in
-*"ln -s")
- echo "Checking how to test for symbolic links..." >&4
- $lns blurfl sym
- if $test "X$issymlink" = X; then
- sh -c "PATH= test -h sym" >/dev/null 2>&1
- if test $? = 0; then
- issymlink="test -h"
- fi
- fi
- if $test "X$issymlink" = X; then
- if $test -h >/dev/null 2>&1; then
- issymlink="$test -h"
- echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
- fi
- fi
- if $test "X$issymlink" = X; then
- if $test -L sym 2>/dev/null; then
- issymlink="$test -L"
- fi
- fi
- if $test "X$issymlink" != X; then
- echo "You can test for symbolic links with '$issymlink'." >&4
- else
- echo "I do not know how you can test for symbolic links." >&4
- fi
- $rm -f blurfl sym
- ;;
-*) echo "No symbolic links, so not testing for their testing..." >&4
- ;;
-esac
-echo " "
-
-
-case "$mksymlinks" in
-$define|true|[yY]*)
- case "$src" in
- ''|'.') echo "Cannot create symlinks in the original directory." >&4
- exit 1
- ;;
- *) case "$lns:$issymlink" in
- *"ln -s:"*"test -"?)
- echo "Creating the symbolic links..." >&4
- echo "(First creating the subdirectories...)" >&4
- cd ..
- awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
- read directory
- test -z "$directory" && break
- mkdir -p $directory
- done
- # Sanity check 1.
- if test ! -d t/base; then
- echo "Failed to create the subdirectories. Aborting." >&4
- exit 1
- fi
- echo "(Then creating the symlinks...)" >&4
- awk '{print $1}' $src/MANIFEST | while true; do
- read filename
- test -z "$filename" && break
- if test -f $filename; then
- if $issymlink $filename; then
- rm -f $filename
- fi
- fi
- if test -f $filename; then
- echo "$filename already exists, not symlinking."
- else
- ln -s $src/$filename $filename
- fi
- done
- # Sanity check 2.
- if test ! -f t/base/cond.t; then
- echo "Failed to create the symlinks. Aborting." >&4
- exit 1
- fi
- cd UU
- ;;
- *) echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
- ;;
- esac
- ;;
- esac
- ;;
-esac
-
-: see whether [:lower:] and [:upper:] are supported character classes
-echo " "
-case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
-ABYZ)
- echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
- up='[:upper:]'
- low='[:lower:]'
- ;;
-*) # There is a discontinuity in EBCDIC between 'I' and 'J'
- # (0xc9 and 0xd1), therefore that is a nice testing point.
- if test "X$up" = X -o "X$low" = X; then
- case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
- ij) up='[A-Z]'
- low='[a-z]'
- ;;
- esac
- fi
- if test "X$up" = X -o "X$low" = X; then
- case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
- ij) up='A-Z'
- low='a-z'
- ;;
- esac
- fi
- if test "X$up" = X -o "X$low" = X; then
- case "`echo IJ | od -x 2>/dev/null`" in
- *C9D1*|*c9d1*)
- echo "Hey, this might be EBCDIC." >&4
- if test "X$up" = X -o "X$low" = X; then
- case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
- ij) up='[A-IJ-RS-Z]'
- low='[a-ij-rs-z]'
- ;;
- esac
- fi
- if test "X$up" = X -o "X$low" = X; then
- case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
- ij) up='A-IJ-RS-Z'
- low='a-ij-rs-z'
- ;;
- esac
- fi
- ;;
- esac
- fi
-esac
-case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
-ij)
- echo "Using $up and $low to convert case." >&4
- ;;
-*)
- echo "I don't know how to translate letters from upper to lower case." >&4
- echo "Your tr is not acting any way I know of." >&4
- exit 1
- ;;
-esac
-: set up the translation script tr, must be called with ./tr of course
-cat >tr <<EOSC
-$startsh
-case "\$1\$2" in
-'[A-Z][a-z]') exec $tr '$up' '$low';;
-'[a-z][A-Z]') exec $tr '$low' '$up';;
-esac
-exec $tr "\$@"
-EOSC
-chmod +x tr
-$eunicefix tr
-
-: Try to determine whether config.sh was made on this system
-case "$config_sh" in
-'')
-myuname=`$uname -a 2>/dev/null`
-$test -z "$myuname" && myuname=`hostname 2>/dev/null`
-# tr '[A-Z]' '[a-z]' would not work in EBCDIC
-# because the A-Z/a-z are not consecutive.
-myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
- ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
-newmyuname="$myuname"
-dflt=n
-case "$knowitall" in
-'')
- if test -f ../config.sh; then
- if $contains myuname= ../config.sh >/dev/null 2>&1; then
- eval "`grep myuname= ../config.sh`"
- fi
- if test "X$myuname" = "X$newmyuname"; then
- dflt=y
- fi
- fi
- ;;
-*) dflt=y;;
-esac
-
-: Get old answers from old config file if Configure was run on the
-: same system, otherwise use the hints.
-hint=default
-cd ..
-if test -f config.sh; then
- echo " "
- rp="I see a config.sh file. Shall I use it to set the defaults?"
- . UU/myread
- case "$ans" in
- n*|N*) echo "OK, I'll ignore it."
- mv config.sh config.sh.old
- myuname="$newmyuname"
- ;;
- *) echo "Fetching default answers from your old config.sh file..." >&4
- tmp_n="$n"
- tmp_c="$c"
- tmp_sh="$sh"
- . ./config.sh
- cp config.sh UU
- n="$tmp_n"
- c="$tmp_c"
- : Older versions did not always set $sh. Catch re-use of such
- : an old config.sh.
- case "$sh" in
- '') sh="$tmp_sh" ;;
- esac
- hint=previous
- ;;
- esac
-fi
-. ./UU/checkcc
-if test ! -f config.sh; then
- $cat <<EOM
-
-First time through, eh? I have some defaults handy for some systems
-that need some extra help getting the Configure answers right:
-
-EOM
- (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
- dflt=''
- : Half the following guesses are probably wrong... If you have better
- : tests or hints, please send them to perlbug@perl.org
- : The metaconfig authors would also appreciate a copy...
- $test -f /irix && osname=irix
- $test -f /xenix && osname=sco_xenix
- $test -f /dynix && osname=dynix
- $test -f /dnix && osname=dnix
- $test -f /lynx.os && osname=lynxos
- $test -f /unicos && osname=unicos && osvers=`$uname -r`
- $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
- $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
- $test -f /bin/mips && /bin/mips && osname=mips
- $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
- $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
- $test -d /usr/apollo/bin && osname=apollo
- $test -f /etc/saf/_sactab && osname=svr4
- $test -d /usr/include/minix && osname=minix
- if $test -d /MachTen -o -d /MachTen_Folder; then
- osname=machten
- if $test -x /sbin/version; then
- osvers=`/sbin/version | $awk '{print $2}' |
- $sed -e 's/[A-Za-z]$//'`
- elif $test -x /usr/etc/version; then
- osvers=`/usr/etc/version | $awk '{print $2}' |
- $sed -e 's/[A-Za-z]$//'`
- else
- osvers="$2.$3"
- fi
- fi
-
- $test -f /sys/posix.dll &&
- $test -f /usr/bin/what &&
- set X `/usr/bin/what /sys/posix.dll` &&
- $test "$3" = UWIN &&
- osname=uwin &&
- osvers="$5"
-
- if $test -f $uname; then
- set X $myuname
- shift
-
- case "$5" in
- fps*) osname=fps ;;
- mips*)
- case "$4" in
- umips) osname=umips ;;
- *) osname=mips ;;
- esac;;
- [23]100) osname=mips ;;
- next*) osname=next ;;
- i386*)
- tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
- if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
- osname='sco'
- osvers=$tmp
- elif $test -f /etc/kconfig; then
- osname=isc
- if test "$lns" = "$ln -s"; then
- osvers=4
- elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
- osvers=3
- elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
- osvers=2
- fi
- fi
- tmp=''
- ;;
- pc*)
- if test -n "$DJGPP"; then
- osname=dos
- osvers=djgpp
- fi
- ;;
- esac
-
- case "$1" in
- aix) osname=aix
- tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
- case "$tmp" in
- 'not found') osvers="$4"."$3" ;;
- '<3240'|'<>3240') osvers=3.2.0 ;;
- '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
- '=3250'|'>3250') osvers=3.2.5 ;;
- *) osvers=$tmp;;
- esac
- ;;
- bsd386) osname=bsd386
- osvers=`$uname -r`
- ;;
- cygwin*) osname=cygwin
- osvers="$3"
- ;;
- *dc.osx) osname=dcosx
- osvers="$3"
- ;;
- dnix) osname=dnix
- osvers="$3"
- ;;
- domainos) osname=apollo
- osvers="$3"
- ;;
- dgux) osname=dgux
- osvers="$3"
- ;;
- dynixptx*) osname=dynixptx
- osvers=`echo "$4"|sed 's/^v//'`
- ;;
- freebsd) osname=freebsd
- osvers="$3" ;;
- genix) osname=genix ;;
- hp*) osname=hpux
- osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
- ;;
- irix*) osname=irix
- case "$3" in
- 4*) osvers=4 ;;
- 5*) osvers=5 ;;
- *) osvers="$3" ;;
- esac
- ;;
- linux) osname=linux
- case "$3" in
- *) osvers="$3" ;;
- esac
- ;;
- MiNT) osname=mint
- ;;
- netbsd*) osname=netbsd
- osvers="$3"
- ;;
- news-os) osvers="$3"
- case "$3" in
- 4*) osname=newsos4 ;;
- *) osname=newsos ;;
- esac
- ;;
- next*) osname=next ;;
- nonstop-ux) osname=nonstopux ;;
- POSIX-BC | posix-bc ) osname=posix-bc
- osvers="$3"
- ;;
- powerux | power_ux | powermax_os | powermaxos | \
- powerunix | power_unix) osname=powerux
- osvers="$3"
- ;;
- qnx) osname=qnx
- osvers="$4"
- ;;
- solaris) osname=solaris
- case "$3" in
- 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
- *) osvers="$3" ;;
- esac
- ;;
- sunos) osname=sunos
- case "$3" in
- 5*) osname=solaris
- osvers=`echo $3 | $sed 's/^5/2/g'` ;;
- *) osvers="$3" ;;
- esac
- ;;
- titanos) osname=titanos
- case "$3" in
- 1*) osvers=1 ;;
- 2*) osvers=2 ;;
- 3*) osvers=3 ;;
- 4*) osvers=4 ;;
- *) osvers="$3" ;;
- esac
- ;;
- ultrix) osname=ultrix
- osvers="$3"
- ;;
- osf1|mls+) case "$5" in
- alpha)
- osname=dec_osf
- osvers=`echo "$3" | sed 's/^[xvt]//'`
- ;;
- hp*) osname=hp_osf1 ;;
- mips) osname=mips_osf1 ;;
- esac
- ;;
- unixware) osname=svr5
- osvers="$4"
- ;;
- uts) osname=uts
- osvers="$3"
- ;;
- $2) case "$osname" in
- *isc*) ;;
- *freebsd*) ;;
- svr*)
- : svr4.x or possibly later
- case "svr$3" in
- ${osname}*)
- osname=svr$3
- osvers=$4
- ;;
- esac
- case "$osname" in
- svr4.0)
- : Check for ESIX
- if test -f /stand/boot ; then
- eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
- if test -n "$INITPROG" -a -f "$INITPROG"; then
- isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
- if test -n "$isesix"; then
- osname=esix4
- fi
- fi
- fi
- ;;
- esac
- ;;
- *) if test -f /etc/systemid; then
- osname=sco
- set `echo $3 | $sed 's/\./ /g'` $4
- if $test -f $src/hints/sco_$1_$2_$3.sh; then
- osvers=$1.$2.$3
- elif $test -f $src/hints/sco_$1_$2.sh; then
- osvers=$1.$2
- elif $test -f $src/hints/sco_$1.sh; then
- osvers=$1
- fi
- else
- case "$osname" in
- '') : Still unknown. Probably a generic Sys V.
- osname="sysv"
- osvers="$3"
- ;;
- esac
- fi
- ;;
- esac
- ;;
- *) case "$osname" in
- '') : Still unknown. Probably a generic BSD.
- osname="$1"
- osvers="$3"
- ;;
- esac
- ;;
- esac
- else
- if test -f /vmunix -a -f $src/hints/news_os.sh; then
- (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
- if $contains news-os UU/kernel.what >/dev/null 2>&1; then
- osname=news_os
- fi
- $rm -f UU/kernel.what
- elif test -d c:/.; then
- set X $myuname
- osname=os2
- osvers="$5"
- fi
- fi
-
- : Now look for a hint file osname_osvers, unless one has been
- : specified already.
- case "$hintfile" in
- ''|' ')
- file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
- : Also try without trailing minor version numbers.
- xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
- xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
- xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
- xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
- case "$file" in
- '') dflt=none ;;
- *) case "$osvers" in
- '') dflt=$file
- ;;
- *) if $test -f $src/hints/$file.sh ; then
- dflt=$file
- elif $test -f $src/hints/$xfile.sh ; then
- dflt=$xfile
- elif $test -f $src/hints/$xxfile.sh ; then
- dflt=$xxfile
- elif $test -f $src/hints/$xxxfile.sh ; then
- dflt=$xxxfile
- elif $test -f $src/hints/$xxxxfile.sh ; then
- dflt=$xxxxfile
- elif $test -f "$src/hints/${osname}.sh" ; then
- dflt="${osname}"
- else
- dflt=none
- fi
- ;;
- esac
- ;;
- esac
- if $test -f Policy.sh ; then
- case "$dflt" in
- *Policy*) ;;
- none) dflt="Policy" ;;
- *) dflt="Policy $dflt" ;;
- esac
- fi
- ;;
- *)
- dflt=`echo $hintfile | $sed 's/\.sh$//'`
- ;;
- esac
-
- if $test -f Policy.sh ; then
- $cat <<EOM
-
-There's also a Policy hint file available, which should make the
-site-specific (policy) questions easier to answer.
-EOM
-
- fi
-
- $cat <<EOM
-
-You may give one or more space-separated answers, or "none" if appropriate.
-A well-behaved OS will have no hints, so answering "none" or just "Policy"
-is a good thing. DO NOT give a wrong version or a wrong OS.
-
-EOM
-
- rp="Which of these apply, if any?"
- . UU/myread
- tans=$ans
- for file in $tans; do
- if $test X$file = XPolicy -a -f Policy.sh; then
- . Policy.sh
- $cat Policy.sh >> UU/config.sh
- elif $test -f $src/hints/$file.sh; then
- . $src/hints/$file.sh
- $cat $src/hints/$file.sh >> UU/config.sh
- elif $test X$tans = X -o X$tans = Xnone ; then
- : nothing
- else
- : Give one chance to correct a possible typo.
- echo "$file.sh does not exist"
- dflt=$file
- rp="hint to use instead?"
- . UU/myread
- for file in $ans; do
- if $test -f "$src/hints/$file.sh"; then
- . $src/hints/$file.sh
- $cat $src/hints/$file.sh >> UU/config.sh
- elif $test X$ans = X -o X$ans = Xnone ; then
- : nothing
- else
- echo "$file.sh does not exist -- ignored."
- fi
- done
- fi
- done
-
- hint=recommended
- : Remember our hint file for later.
- if $test -f "$src/hints/$file.sh" ; then
- hintfile="$file"
- else
- hintfile=''
- fi
-fi
-cd UU
-;;
-*)
- echo " "
- echo "Fetching default answers from $config_sh..." >&4
- tmp_n="$n"
- tmp_c="$c"
- cd ..
- cp $config_sh config.sh 2>/dev/null
- chmod +w config.sh
- . ./config.sh
- cd UU
- cp ../config.sh .
- n="$tmp_n"
- c="$tmp_c"
- hint=previous
- ;;
-esac
-test "$override" && . ./optdef.sh
-
-: Restore computed paths
-for file in $loclist $trylist; do
- eval $file="\$_$file"
-done
-
-cat << EOM
-
-Configure uses the operating system name and version to set some defaults.
-The default value is probably right if the name rings a bell. Otherwise,
-since spelling matters for me, either accept the default or answer "none"
-to leave it blank.
-
-EOM
-case "$osname" in
- ''|' ')
- case "$hintfile" in
- ''|' '|none) dflt=none ;;
- *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
- esac
- ;;
- *) dflt="$osname" ;;
-esac
-rp="Operating system name?"
-. ./myread
-case "$ans" in
-none) osname='' ;;
-*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
-esac
-echo " "
-case "$osvers" in
- ''|' ')
- case "$hintfile" in
- ''|' '|none) dflt=none ;;
- *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
- dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
- case "$dflt" in
- ''|' ') dflt=none ;;
- esac
- ;;
- esac
- ;;
- *) dflt="$osvers" ;;
-esac
-rp="Operating system version?"
-. ./myread
-case "$ans" in
-none) osvers='' ;;
-*) osvers="$ans" ;;
-esac
-
-
-. ./posthint.sh
-
-: who configured the system
-cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
-cf_by=`(logname) 2>/dev/null`
-case "$cf_by" in
-"")
- cf_by=`(whoami) 2>/dev/null`
- case "$cf_by" in
- "") cf_by=unknown ;;
- esac ;;
-esac
-
-: set up the script used to warn in case of inconsistency
-cat <<EOS >whoa
-$startsh
-EOS
-cat <<'EOSC' >>whoa
-dflt=y
-echo " "
-echo "*** WHOA THERE!!! ***" >&4
-echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
-rp=" Keep the $hint value?"
-. ./myread
-case "$ans" in
-y) td=$was; tu=$was;;
-esac
-EOSC
-
-: function used to set $1 to $val
-setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
-case "$val$was" in
-$define$undef) . ./whoa; eval "$var=\$td";;
-$undef$define) . ./whoa; eval "$var=\$tu";;
-*) eval "$var=$val";;
-esac'
-
-case "$usethreads" in
-$define|true|[yY]*) dflt='y';;
-*) dflt='n';;
-esac
-cat <<EOM
-
-Perl can be built to take advantage of threads on some systems.
-To do so, Configure can be run with -Dusethreads.
-
-Note that threading is a highly experimental feature, and
-some known race conditions still remain. If you choose to try
-it, be very sure to not actually deploy it for production
-purposes. README.threads has more details, and is required
-reading if you enable threads.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
-rp='Build a threading Perl?'
-. ./myread
-case "$ans" in
-y|Y) val="$define" ;;
-*) val="$undef" ;;
-esac
-set usethreads
-eval $setvar
-
-case "$usethreads" in
-$define)
- $cat <<EOM
-
-As of 5.5.640, Perl has two different internal threading implementations,
-the 5.005 version (5005threads) and an interpreter-based version
-(ithreads) that has one interpreter per thread. Both are very
-experimental. This arrangement exists to help developers work out
-which one is better.
-
-If you're a casual user, you probably don't want interpreter-threads
-at this time. There doesn't yet exist a way to create threads from
-within Perl in this model, i.e., "use Thread;" will NOT work.
-EOM
- : Default to ithreads unless overridden on command line or with
- : old config.sh
- dflt='y'
- case "$use5005threads" in
- $define|true|[yY]*) dflt='n';;
- esac
- case "$useithreads" in
- $undef|false|[nN]*) dflt='n';;
- esac
- rp='Use interpreter-based ithreads?'
- . ./myread
- case "$ans" in
- y|Y) val="$define" ;;
- *) val="$undef" ;;
- esac
- set useithreads
- eval $setvar
- : Now set use5005threads to the opposite value.
- case "$useithreads" in
- $define) val="$undef" ;;
- *) val="$define" ;;
- esac
- set use5005threads
- eval $setvar
- ;;
-*)
- useithreads="$undef"
- use5005threads="$undef"
- ;;
-esac
-
-case "$useithreads$use5005threads" in
-"$define$define")
- $cat >&4 <<EOM
-
-You cannot have both the ithreads and the 5.005 threads enabled
-at the same time. Disabling the 5.005 threads since they are
-much less stable than the ithreads.
-
-EOM
- use5005threads="$undef"
- ;;
-esac
-
-case "$d_oldpthreads" in
-'') : Configure tests would be welcome here. For now, assume undef.
- val="$undef" ;;
-*) val="$d_oldpthreads" ;;
-esac
-set d_oldpthreads
-eval $setvar
-
-
-case "$usethreads" in
-"$define"|true|[yY]*)
-: Look for a hint-file generated 'call-back-unit'. If the
-: user has specified that a threading perl is to be built,
-: we may need to set or change some other defaults.
- if $test -f usethreads.cbu; then
- echo "Your platform has some specific hints for threaded builds, using them..."
- . ./usethreads.cbu
- else
- $cat <<EOM
-(Your platform doesn't have any specific hints for threaded builds.
- Assuming POSIX threads, then.)
-EOM
- fi
- ;;
-esac
-
-cat <<EOM
-
-Perl can be built so that multiple Perl interpreters can coexist
-within the same Perl executable.
-EOM
-
-case "$useithreads" in
-$define)
- cat <<EOM
-This multiple interpreter support is required for interpreter-based threads.
-EOM
- val="$define"
- ;;
-*) case "$usemultiplicity" in
- $define|true|[yY]*) dflt='y';;
- *) dflt='n';;
- esac
- echo " "
- echo "If this doesn't make any sense to you, just accept the default '$dflt'."
- rp='Build Perl for multiplicity?'
- . ./myread
- case "$ans" in
- y|Y) val="$define" ;;
- *) val="$undef" ;;
- esac
- ;;
-esac
-set usemultiplicity
-eval $setvar
-
-: make some quick guesses about what we are up against
-echo " "
-$echo $n "Hmm... $c"
-echo exit 1 >bsd
-echo exit 1 >usg
-echo exit 1 >v7
-echo exit 1 >osf1
-echo exit 1 >eunice
-echo exit 1 >xenix
-echo exit 1 >venix
-echo exit 1 >os2
-d_bsd="$undef"
-$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
-if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
-then
- echo "Looks kind of like an OSF/1 system, but we'll see..."
- echo exit 0 >osf1
-elif test `echo abc | $tr a-z A-Z` = Abc ; then
- xxx=`./loc addbib blurfl $pth`
- if $test -f $xxx; then
- echo "Looks kind of like a USG system with BSD features, but we'll see..."
- echo exit 0 >bsd
- echo exit 0 >usg
- else
- if $contains SIGTSTP foo >/dev/null 2>&1 ; then
- echo "Looks kind of like an extended USG system, but we'll see..."
- else
- echo "Looks kind of like a USG system, but we'll see..."
- fi
- echo exit 0 >usg
- fi
-elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
- echo "Looks kind of like a BSD system, but we'll see..."
- d_bsd="$define"
- echo exit 0 >bsd
-else
- echo "Looks kind of like a Version 7 system, but we'll see..."
- echo exit 0 >v7
-fi
-case "$eunicefix" in
-*unixtovms*)
- $cat <<'EOI'
-There is, however, a strange, musty smell in the air that reminds me of
-something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
-EOI
- echo exit 0 >eunice
- d_eunice="$define"
-: it so happens the Eunice I know will not run shell scripts in Unix format
- ;;
-*)
- echo " "
- echo "Congratulations. You aren't running Eunice."
- d_eunice="$undef"
- ;;
-esac
-: Detect OS2. The p_ variable is set above in the Head.U unit.
-: Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
-: semicolon as a patch separator
-case "$p_" in
-:) ;;
-*)
- $cat <<'EOI'
-I have the feeling something is not exactly right, however...don't tell me...
-lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
-(Or you may be running DOS with DJGPP.)
-EOI
- echo exit 0 >os2
- ;;
-esac
-if test -f /xenix; then
- echo "Actually, this looks more like a XENIX system..."
- echo exit 0 >xenix
- d_xenix="$define"
-else
- echo " "
- echo "It's not Xenix..."
- d_xenix="$undef"
-fi
-chmod +x xenix
-$eunicefix xenix
-if test -f /venix; then
- echo "Actually, this looks more like a VENIX system..."
- echo exit 0 >venix
-else
- echo " "
- if ./xenix; then
- : null
- else
- echo "Nor is it Venix..."
- fi
-fi
-chmod +x bsd usg v7 osf1 eunice xenix venix os2
-$eunicefix bsd usg v7 osf1 eunice xenix venix os2
-$rm -f foo
-
-case "$cc" in
-'') dflt=cc;;
-*) dflt="$cc";;
-esac
-rp="Use which C compiler?"
-. ./myread
-cc="$ans"
-: Look for a hint-file generated 'call-back-unit'. Now that the
-: user has specified the compiler, we may need to set or change some
-: other defaults.
-if $test -f cc.cbu; then
- . ./cc.cbu
-fi
-. ./checkcc
-
-echo " "
-echo "Checking for GNU cc in disguise and/or its version number..." >&4
-$cat >gccvers.c <<EOM
-#include <stdio.h>
-int main() {
-#ifdef __GNUC__
-#ifdef __VERSION__
- printf("%s\n", __VERSION__);
-#else
- printf("%s\n", "1");
-#endif
-#endif
- exit(0);
-}
-EOM
-if $cc -o gccvers $ccflags $ldflags gccvers.c; then
- gccversion=`./gccvers`
- case "$gccversion" in
- '') echo "You are not using GNU cc." ;;
- *) echo "You are using GNU cc $gccversion."
- ccname=gcc
- ;;
- esac
-else
- echo " "
- echo "*** WHOA THERE!!! ***" >&4
- echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
- case "$knowitall" in
- '')
- echo " You'd better start hunting for one and let me know about it." >&4
- exit 1
- ;;
- esac
-fi
-$rm -f gccvers*
-case "$gccversion" in
-1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
-esac
-case "$gccversion" in
-'') gccosandvers='' ;;
-*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
- gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
- gccshortvers=''
- case "$gccosandvers" in
- $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
- $osname$osvers) ;; # looking good
- $osname*) cat <<EOM >&4
-
-*** WHOA THERE!!! ***
-
- Your gcc has not been compiled for the exact release of
- your operating system ($gccosandvers versus $osname$osvers).
-
- In general it is a good idea to keep gcc synchronized with
- the operating system because otherwise serious problems
- may ensue when trying to compile software, like Perl.
-
- I'm trying to be optimistic here, though, and will continue.
- If later during the configuration and build icky compilation
- problems appear (headerfile conflicts being the most common
- manifestation), I suggest reinstalling the gcc to match
- your operating system release.
-
-EOM
- ;;
- *) gccosandvers='' ;; # failed to parse, better be silent
- esac
- ;;
-esac
-case "$ccname" in
-'') ccname="$cc" ;;
-esac
-
-: see how we invoke the C preprocessor
-echo " "
-echo "Now, how can we feed standard input to your C preprocessor..." >&4
-cat <<'EOT' >testcpp.c
-#define ABC abc
-#define XYZ xyz
-ABC.XYZ
-EOT
-cd ..
-if test ! -f cppstdin; then
- if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
- # AIX cc -E doesn't show the absolute headerfile
- # locations but we'll cheat by using the -M flag.
- echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
- else
- echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
- fi
-else
- echo "Keeping your $hint cppstdin wrapper."
-fi
-chmod 755 cppstdin
-wrapper=`pwd`/cppstdin
-ok='false'
-cd UU
-
-if $test "X$cppstdin" != "X" && \
- $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-then
- echo "You used to use $cppstdin $cppminus so we'll use that again."
- case "$cpprun" in
- '') echo "But let's see if we can live without a wrapper..." ;;
- *)
- if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
- then
- echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
- ok='true'
- else
- echo "(However, $cpprun $cpplast does not work, let's see...)"
- fi
- ;;
- esac
-else
- case "$cppstdin" in
- '') ;;
- *)
- echo "Good old $cppstdin $cppminus does not seem to be of any help..."
- ;;
- esac
-fi
-
-if $ok; then
- : nothing
-elif echo 'Maybe "'"$cc"' -E" will work...'; \
- $cc -E <testcpp.c >testcpp.out 2>&1; \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
- echo "Yup, it does."
- x_cpp="$cc -E"
- x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
- $cc -E - <testcpp.c >testcpp.out 2>&1; \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
- echo "Yup, it does."
- x_cpp="$cc -E"
- x_minus='-';
-elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
- $cc -P <testcpp.c >testcpp.out 2>&1; \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
- echo "Yipee, that works!"
- x_cpp="$cc -P"
- x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
- $cc -P - <testcpp.c >testcpp.out 2>&1; \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
- echo "At long last!"
- x_cpp="$cc -P"
- x_minus='-';
-elif echo 'No such luck, maybe "'$cpp'" will work...'; \
- $cpp <testcpp.c >testcpp.out 2>&1; \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
- echo "It works!"
- x_cpp="$cpp"
- x_minus='';
-elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
- $cpp - <testcpp.c >testcpp.out 2>&1; \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
- echo "Hooray, it works! I was beginning to wonder."
- x_cpp="$cpp"
- x_minus='-';
-elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
- $wrapper <testcpp.c >testcpp.out 2>&1; \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
- x_cpp="$wrapper"
- x_minus=''
- echo "Eureka!"
-else
- dflt=''
- rp="No dice. I can't find a C preprocessor. Name one:"
- . ./myread
- x_cpp="$ans"
- x_minus=''
- $x_cpp <testcpp.c >testcpp.out 2>&1
- if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
- echo "OK, that will do." >&4
- else
-echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
- exit 1
- fi
-fi
-
-case "$ok" in
-false)
- cppstdin="$x_cpp"
- cppminus="$x_minus"
- cpprun="$x_cpp"
- cpplast="$x_minus"
- set X $x_cpp
- shift
- case "$1" in
- "$cpp")
- echo "Perhaps can we force $cc -E using a wrapper..."
- if $wrapper <testcpp.c >testcpp.out 2>&1; \
- $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
- then
- echo "Yup, we can."
- cppstdin="$wrapper"
- cppminus='';
- else
- echo "Nope, we'll have to live without it..."
- fi
- ;;
- esac
- case "$cpprun" in
- "$wrapper")
- cpprun=''
- cpplast=''
- ;;
- esac
- ;;
-esac
-
-case "$cppstdin" in
-"$wrapper"|'cppstdin') ;;
-*) $rm -f $wrapper;;
-esac
-$rm -f testcpp.c testcpp.out
-
-: decide how portable to be. Allow command line overrides.
-case "$d_portable" in
-"$undef") ;;
-*) d_portable="$define" ;;
-esac
-
-: set up shell script to do ~ expansion
-cat >filexp <<EOSS
-$startsh
-: expand filename
-case "\$1" in
- ~/*|~)
- echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
- ;;
- ~*)
- if $test -f /bin/csh; then
- /bin/csh -f -c "glob \$1"
- failed=\$?
- echo ""
- exit \$failed
- else
- name=\`$expr x\$1 : '..\([^/]*\)'\`
- dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
- if $test ! -d "\$dir"; then
- me=\`basename \$0\`
- echo "\$me: can't locate home directory for: \$name" >&2
- exit 1
- fi
- case "\$1" in
- */*)
- echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
- ;;
- *)
- echo \$dir
- ;;
- esac
- fi
- ;;
-*)
- echo \$1
- ;;
-esac
-EOSS
-chmod +x filexp
-$eunicefix filexp
-
-: now set up to get a file name
-cat <<EOS >getfile
-$startsh
-EOS
-cat <<'EOSC' >>getfile
-tilde=''
-fullpath=''
-already=''
-skip=''
-none_ok=''
-exp_file=''
-nopath_ok=''
-orig_rp="$rp"
-orig_dflt="$dflt"
-case "$gfpth" in
-'') gfpth='.' ;;
-esac
-
-case "$fn" in
-*\(*)
- expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
- fn=`echo $fn | sed 's/(.*)//'`
- ;;
-esac
-
-case "$fn" in
-*:*)
- loc_file=`expr $fn : '.*:\(.*\)'`
- fn=`expr $fn : '\(.*\):.*'`
- ;;
-esac
-
-case "$fn" in
-*~*) tilde=true;;
-esac
-case "$fn" in
-*/*) fullpath=true;;
-esac
-case "$fn" in
-*+*) skip=true;;
-esac
-case "$fn" in
-*n*) none_ok=true;;
-esac
-case "$fn" in
-*e*) exp_file=true;;
-esac
-case "$fn" in
-*p*) nopath_ok=true;;
-esac
-
-case "$fn" in
-*f*) type='File';;
-*d*) type='Directory';;
-*l*) type='Locate';;
-esac
-
-what="$type"
-case "$what" in
-Locate) what='File';;
-esac
-
-case "$exp_file" in
-'')
- case "$d_portable" in
- "$define") ;;
- *) exp_file=true;;
- esac
- ;;
-esac
-
-cd ..
-while test "$type"; do
- redo=''
- rp="$orig_rp"
- dflt="$orig_dflt"
- case "$tilde" in
- true) rp="$rp (~name ok)";;
- esac
- . UU/myread
- if test -f UU/getfile.ok && \
- $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
- then
- value="$ans"
- ansexp="$ans"
- break
- fi
- case "$ans" in
- none)
- value=''
- ansexp=''
- case "$none_ok" in
- true) type='';;
- esac
- ;;
- *)
- case "$tilde" in
- '') value="$ans"
- ansexp="$ans";;
- *)
- value=`UU/filexp $ans`
- case $? in
- 0)
- if test "$ans" != "$value"; then
- echo "(That expands to $value on this system.)"
- fi
- ;;
- *) value="$ans";;
- esac
- ansexp="$value"
- case "$exp_file" in
- '') value="$ans";;
- esac
- ;;
- esac
- case "$fullpath" in
- true)
- case "$ansexp" in
- /*) value="$ansexp" ;;
- [a-zA-Z]:/*) value="$ansexp" ;;
- *)
- redo=true
- case "$already" in
- true)
- echo "I shall only accept a full path name, as in /bin/ls." >&4
- echo "Use a ! shell escape if you wish to check pathnames." >&4
- ;;
- *)
- echo "Please give a full path name, starting with slash." >&4
- case "$tilde" in
- true)
- echo "Note that using ~name is ok provided it expands well." >&4
- already=true
- ;;
- esac
- esac
- ;;
- esac
- ;;
- esac
- case "$redo" in
- '')
- case "$type" in
- File)
- for fp in $gfpth; do
- if test "X$fp" = X.; then
- pf="$ansexp"
- else
- pf="$fp/$ansexp"
- fi
- if test -f "$pf"; then
- type=''
- elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
- then
- echo "($value is not a plain file, but that's ok.)"
- type=''
- fi
- if test X"$type" = X; then
- value="$pf"
- break
- fi
- done
- ;;
- Directory)
- for fp in $gfpth; do
- if test "X$fp" = X.; then
- dir="$ans"
- direxp="$ansexp"
- else
- dir="$fp/$ansexp"
- direxp="$fp/$ansexp"
- fi
- if test -d "$direxp"; then
- type=''
- value="$dir"
- break
- fi
- done
- ;;
- Locate)
- if test -d "$ansexp"; then
- echo "(Looking for $loc_file in directory $value.)"
- value="$value/$loc_file"
- ansexp="$ansexp/$loc_file"
- fi
- if test -f "$ansexp"; then
- type=''
- fi
- case "$nopath_ok" in
- true) case "$value" in
- */*) ;;
- *) echo "Assuming $value will be in people's path."
- type=''
- ;;
- esac
- ;;
- esac
- ;;
- esac
-
- case "$skip" in
- true) type='';
- esac
-
- case "$type" in
- '') ;;
- *)
- if test "$fastread" = yes; then
- dflt=y
- else
- dflt=n
- fi
- rp="$what $value doesn't exist. Use that name anyway?"
- . UU/myread
- dflt=''
- case "$ans" in
- y*) type='';;
- *) echo " ";;
- esac
- ;;
- esac
- ;;
- esac
- ;;
- esac
-done
-cd UU
-ans="$value"
-rp="$orig_rp"
-dflt="$orig_dflt"
-rm -f getfile.ok
-test "X$gfpthkeep" != Xy && gfpth=""
-EOSC
-
-: What should the include directory be ?
-echo " "
-$echo $n "Hmm... $c"
-dflt='/usr/include'
-incpath=''
-mips_type=''
-if $test -f /bin/mips && /bin/mips; then
- echo "Looks like a MIPS system..."
- $cat >usr.c <<'EOCP'
-#ifdef SYSTYPE_BSD43
-/bsd43
-#endif
-EOCP
- if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
- dflt='/bsd43/usr/include'
- incpath='/bsd43'
- mips_type='BSD 4.3'
- else
- mips_type='System V'
- fi
- $rm -f usr.c usr.out
- echo "and you're compiling with the $mips_type compiler and libraries."
- xxx_prompt=y
- echo "exit 0" >mips
-else
- echo "Doesn't look like a MIPS system."
- xxx_prompt=n
- echo "exit 1" >mips
-fi
-chmod +x mips
-$eunicefix mips
-case "$usrinc" in
-'') ;;
-*) dflt="$usrinc";;
-esac
-case "$xxx_prompt" in
-y) fn=d/
- echo " "
- rp='Where are the include files you want to use?'
- . ./getfile
- usrinc="$ans"
- ;;
-*) usrinc="$dflt"
- ;;
-esac
-
-: Set private lib path
-case "$plibpth" in
-'') if ./mips; then
- plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
- fi;;
-esac
-case "$libpth" in
-' ') dlist='';;
-'') dlist="$loclibpth $plibpth $glibpth";;
-*) dlist="$libpth";;
-esac
-
-: Now check and see which directories actually exist, avoiding duplicates
-libpth=''
-for xxx in $dlist
-do
- if $test -d $xxx; then
- case " $libpth " in
- *" $xxx "*) ;;
- *) libpth="$libpth $xxx";;
- esac
- fi
-done
-$cat <<'EOM'
-
-Some systems have incompatible or broken versions of libraries. Among
-the directories listed in the question below, please remove any you
-know not to be holding relevant libraries, and add any that are needed.
-Say "none" for none.
-
-EOM
-case "$libpth" in
-'') dflt='none';;
-*)
- set X $libpth
- shift
- dflt=${1+"$@"}
- ;;
-esac
-rp="Directories to use for library searches?"
-. ./myread
-case "$ans" in
-none) libpth=' ';;
-*) libpth="$ans";;
-esac
-
-: compute shared library extension
-case "$so" in
-'')
- if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
- dflt='sl'
- else
- dflt='so'
- fi
- ;;
-*) dflt="$so";;
-esac
-$cat <<EOM
-
-On some systems, shared libraries may be available. Answer 'none' if
-you want to suppress searching of shared libraries for the remainder
-of this configuration.
-
-EOM
-rp='What is the file extension used for shared libraries?'
-. ./myread
-so="$ans"
-
-: Define several unixisms.
-: Hints files or command line option can be used to override them.
-: The convoluted testing is in case hints files set either the old
-: or the new name.
-case "$_exe" in
-'') case "$exe_ext" in
- '') ;;
- *) _exe="$exe_ext" ;;
- esac
- ;;
-esac
-case "$_a" in
-'') case "$lib_ext" in
- '') _a='.a';;
- *) _a="$lib_ext" ;;
- esac
- ;;
-esac
-case "$_o" in
-'') case "$obj_ext" in
- '') _o='.o';;
- *) _o="$obj_ext";;
- esac
- ;;
-esac
-case "$p_" in
-'') case "$path_sep" in
- '') p_=':';;
- *) p_="$path_sep";;
- esac
- ;;
-esac
-exe_ext=$_exe
-lib_ext=$_a
-obj_ext=$_o
-path_sep=$p_
-
-: Which makefile gets called first. This is used by make depend.
-case "$firstmakefile" in
-'') firstmakefile='makefile';;
-esac
-
-case "$usesocks" in
-$define|true|[yY]*) dflt='y';;
-*) dflt='n';;
-esac
-cat <<EOM
-
-Perl can be built to use the SOCKS proxy protocol library. To do so,
-Configure must be run with -Dusesocks.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
-rp='Build Perl for SOCKS?'
-. ./myread
-case "$ans" in
-y|Y) val="$define" ;;
-*) val="$undef" ;;
-esac
-set usesocks
-eval $setvar
-
-: Looking for optional libraries
-echo " "
-echo "Checking for optional libraries..." >&4
-case "$libs" in
-' '|'') dflt='';;
-*) dflt="$libs";;
-esac
-case "$libswanted" in
-'') libswanted='c_s';;
-esac
-case "$usesocks" in
-"$define") libswanted="$libswanted socks5 socks5_sh" ;;
-esac
-libsfound=''
-libsfiles=''
-libsdirs=''
-libspath=''
-for thisdir in $libpth $xlibpth; do
- test -d $thisdir && libspath="$libspath $thisdir"
-done
-for thislib in $libswanted; do
- for thisdir in $libspath; do
- xxx=''
- if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
- xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
- $test -f "$xxx" && eval $libscheck
- $test -f "$xxx" && libstyle=shared
- fi
- if test ! -f "$xxx"; then
- xxx=$thisdir/lib$thislib.$so
- $test -f "$xxx" && eval $libscheck
- $test -f "$xxx" && libstyle=shared
- fi
- if test ! -f "$xxx"; then
- xxx=$thisdir/lib$thislib$_a
- $test -f "$xxx" && eval $libscheck
- $test -f "$xxx" && libstyle=static
- fi
- if test ! -f "$xxx"; then
- xxx=$thisdir/$thislib$_a
- $test -f "$xxx" && eval $libscheck
- $test -f "$xxx" && libstyle=static
- fi
- if test ! -f "$xxx"; then
- xxx=$thisdir/lib${thislib}_s$_a
- $test -f "$xxx" && eval $libscheck
- $test -f "$xxx" && libstyle=static
- $test -f "$xxx" && thislib=${thislib}_s
- fi
- if test ! -f "$xxx"; then
- xxx=$thisdir/Slib$thislib$_a
- $test -f "$xxx" && eval $libscheck
- $test -f "$xxx" && libstyle=static
- fi
- if $test -f "$xxx"; then
- case "$libstyle" in
- shared) echo "Found -l$thislib (shared)." ;;
- static) echo "Found -l$thislib." ;;
- *) echo "Found -l$thislib ($libstyle)." ;;
- esac
- case " $dflt " in
- *"-l$thislib "*);;
- *) dflt="$dflt -l$thislib"
- libsfound="$libsfound $xxx"
- yyy=`basename $xxx`
- libsfiles="$libsfiles $yyy"
- yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
- case " $libsdirs " in
- *" $yyy "*) ;;
- *) libsdirs="$libsdirs $yyy" ;;
- esac
- ;;
- esac
- break
- fi
- done
- if $test ! -f "$xxx"; then
- echo "No -l$thislib."
- fi
-done
-set X $dflt
-shift
-dflt="$*"
-case "$libs" in
-'') dflt="$dflt";;
-*) dflt="$libs";;
-esac
-case "$dflt" in
-' '|'') dflt='none';;
-esac
-
-$cat <<EOM
-
-In order to compile $package on your machine, a number of libraries
-are usually needed. Include any other special libraries here as well.
-Say "none" for none. The default list is almost always right.
-EOM
-
-echo " "
-rp="What libraries to use?"
-. ./myread
-case "$ans" in
-none) libs=' ';;
-*) libs="$ans";;
-esac
-
-: determine optimization, if desired, or use for debug flag also
-case "$optimize" in
-' '|$undef) dflt='none';;
-'') dflt='-O';;
-*) dflt="$optimize";;
-esac
-$cat <<EOH
-
-By default, $package compiles with the -O flag to use the optimizer.
-Alternately, you might want to use the symbolic debugger, which uses
-the -g flag (on traditional Unix systems). Either flag can be
-specified here. To use neither flag, specify the word "none".
-
-EOH
-rp="What optimizer/debugger flag should be used?"
-. ./myread
-optimize="$ans"
-case "$optimize" in
-'none') optimize=" ";;
-esac
-
-dflt=''
-: We will not override a previous value, but we might want to
-: augment a hint file
-case "$hint" in
-default|recommended)
- case "$gccversion" in
- 1*) dflt='-fpcc-struct-return' ;;
- esac
- case "$optimize" in
- *-g*) dflt="$dflt -DDEBUGGING";;
- esac
- case "$gccversion" in
- 2*) if test -d /etc/conf/kconfig.d &&
- $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
- then
- dflt="$dflt -posix"
- fi
- ;;
- esac
- case "$gccversion" in
- 1*) ;;
- 2.[0-8]*) ;;
- ?*) echo " "
- echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
- echo 'int main(void) { return 0; }' > gcctest.c
- if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
- echo "Yes, it does." 2>&1
- case "$ccflags" in
- *strict-aliasing*)
- echo "Leaving current flags $ccflags alone." 2>&1
- ;;
- *) dflt="$dflt -fno-strict-aliasing" ;;
- esac
- else
- echo "Nope, it doesn't, but that's ok." 2>&1
- fi
- ;;
- esac
- ;;
-esac
-
-case "$mips_type" in
-*BSD*|'') inclwanted="$locincpth $usrinc";;
-*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
-esac
-for thisincl in $inclwanted; do
- if $test -d $thisincl; then
- if $test x$thisincl != x$usrinc; then
- case "$dflt" in
- *" -I$thisincl "*);;
- *) dflt="$dflt -I$thisincl ";;
- esac
- fi
- fi
-done
-
-inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
- xxx=true;
-elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
- xxx=true;
-else
- xxx=false;
-fi;
-if $xxx; then
- case "$dflt" in
- *$2*);;
- *) dflt="$dflt -D$2";;
- esac;
-fi'
-
-set signal.h LANGUAGE_C; eval $inctest
-
-case "$usesocks" in
-$define)
- ccflags="$ccflags -DSOCKS"
- ;;
-esac
-
-case "$hint" in
-default|recommended) dflt="$ccflags $dflt" ;;
-*) dflt="$ccflags";;
-esac
-
-case "$dflt" in
-''|' ') dflt=none;;
-esac
-
-$cat <<EOH
-
-Your C compiler may want other flags. For this question you should include
--I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
-but you should NOT include libraries or ld flags like -lwhatever. If you
-want $package to honor its debug switch, you should include -DDEBUGGING here.
-Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
-
-To use no flags, specify the word "none".
-
-EOH
-set X $dflt
-shift
-dflt=${1+"$@"}
-rp="Any additional cc flags?"
-. ./myread
-case "$ans" in
-none) ccflags='';;
-*) ccflags="$ans";;
-esac
-
-: the following weeds options from ccflags that are of no interest to cpp
-cppflags="$ccflags"
-case "$gccversion" in
-1*) cppflags="$cppflags -D__GNUC__"
-esac
-case "$mips_type" in
-'');;
-*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
-esac
-case "$cppflags" in
-'');;
-*)
- echo " "
- echo "Let me guess what the preprocessor flags are..." >&4
- set X $cppflags
- shift
- cppflags=''
- $cat >cpp.c <<'EOM'
-#define BLURFL foo
-
-BLURFL xx LFRULB
-EOM
- previous=''
- for flag in $*
- do
- case "$flag" in
- -*) ftry="$flag";;
- *) ftry="$previous $flag";;
- esac
- if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
- >cpp1.out 2>/dev/null && \
- $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
- >cpp2.out 2>/dev/null && \
- $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
- $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
- then
- cppflags="$cppflags $ftry"
- previous=''
- else
- previous="$flag"
- fi
- done
- set X $cppflags
- shift
- cppflags=${1+"$@"}
- case "$cppflags" in
- *-*) echo "They appear to be: $cppflags";;
- esac
- $rm -f cpp.c cpp?.out
- ;;
-esac
-
-: flags used in final linking phase
-case "$ldflags" in
-'') if ./venix; then
- dflt='-i -z'
- else
- dflt=''
- fi
- case "$ccflags" in
- *-posix*) dflt="$dflt -posix" ;;
- esac
- ;;
-*) dflt="$ldflags";;
-esac
-
-: Try to guess additional flags to pick up local libraries.
-for thislibdir in $libpth; do
- case " $loclibpth " in
- *" $thislibdir "*)
- case "$dflt " in
- *"-L$thislibdir "*) ;;
- *) dflt="$dflt -L$thislibdir" ;;
- esac
- ;;
- esac
-done
-
-case "$dflt" in
-'') dflt='none' ;;
-esac
-
-$cat <<EOH
-
-Your C linker may need flags. For this question you should
-include -L/whatever and any other flags used by the C linker, but you
-should NOT include libraries like -lwhatever.
-
-Make sure you include the appropriate -L/path flags if your C linker
-does not normally search all of the directories you specified above,
-namely
- $libpth
-To use no flags, specify the word "none".
-
-EOH
-
-rp="Any additional ld flags (NOT including libraries)?"
-. ./myread
-case "$ans" in
-none) ldflags='';;
-*) ldflags="$ans";;
-esac
-rmlist="$rmlist pdp11"
-
-: coherency check
-echo " "
-echo "Checking your choice of C compiler and flags for coherency..." >&4
-$cat > try.c <<'EOF'
-#include <stdio.h>
-int main() { printf("Ok\n"); exit(0); }
-EOF
-set X $cc -o try $optimize $ccflags $ldflags try.c $libs
-shift
-$cat >try.msg <<'EOM'
-I've tried to compile and run the following simple program:
-
-EOM
-$cat try.c >> try.msg
-
-$cat >> try.msg <<EOM
-
-I used the command:
-
- $*
- ./try
-
-and I got the following output:
-
-EOM
-dflt=y
-if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
- if $sh -c './try' >>try.msg 2>&1; then
- xxx=`./try`
- case "$xxx" in
- "Ok") dflt=n ;;
- *) echo 'The program compiled OK, but produced no output.' >> try.msg
- case " $libs " in
- *" -lsfio "*)
- cat >> try.msg <<'EOQS'
-If $libs contains -lsfio, and sfio is mis-configured, then it
-sometimes (apparently) runs and exits with a 0 status, but with no
-output! It may have to do with sfio's use of _exit vs. exit.
-
-EOQS
- rp="You have a big problem. Shall I abort Configure"
- dflt=y
- ;;
- esac
- ;;
- esac
- else
- echo "The program compiled OK, but exited with status $?." >>try.msg
- rp="You have a problem. Shall I abort Configure"
- dflt=y
- fi
-else
- echo "I can't compile the test program." >>try.msg
- rp="You have a BIG problem. Shall I abort Configure"
- dflt=y
-fi
-case "$dflt" in
-y)
- $cat try.msg >&4
- case "$knowitall" in
- '')
- echo "(The supplied flags or libraries might be incorrect.)"
- ;;
- *) dflt=n;;
- esac
- echo " "
- . ./myread
- case "$ans" in
- n*|N*) ;;
- *) echo "Ok. Stopping Configure." >&4
- exit 1
- ;;
- esac
- ;;
-n) echo "OK, that should do.";;
-esac
-$rm -f try try.* core
-
-: define an is-a-typedef? function
-typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
-case "$inclist" in
-"") inclist="sys/types.h";;
-esac;
-eval "varval=\$$var";
-case "$varval" in
-"")
- $rm -f temp.c;
- for inc in $inclist; do
- echo "#include <$inc>" >>temp.c;
- done;
- echo "#ifdef $type" >> temp.c;
- echo "printf(\"We have $type\");" >> temp.c;
- echo "#endif" >> temp.c;
- $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
- if $contains $type temp.E >/dev/null 2>&1; then
- eval "$var=\$type";
- else
- eval "$var=\$def";
- fi;
- $rm -f temp.?;;
-*) eval "$var=\$varval";;
-esac'
-
-: define an is-a-typedef? function that prompts if the type is not available.
-typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
-case "$inclist" in
-"") inclist="sys/types.h";;
-esac;
-eval "varval=\$$var";
-case "$varval" in
-"")
- $rm -f temp.c;
- for inc in $inclist; do
- echo "#include <$inc>" >>temp.c;
- done;
- echo "#ifdef $type" >> temp.c;
- echo "printf(\"We have $type\");" >> temp.c;
- echo "#endif" >> temp.c;
- $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
- echo " " ;
- echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
- if $contains $type temp.E >/dev/null 2>&1; then
- echo "$type found." >&4;
- eval "$var=\$type";
- else
- echo "$type NOT found." >&4;
- dflt="$def";
- . ./myread ;
- eval "$var=\$ans";
- fi;
- $rm -f temp.?;;
-*) eval "$var=\$varval";;
-esac'
-
-: define a shorthand compile call
-compile='
-mc_file=$1;
-shift;
-$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
-: define a shorthand compile call for compilations that should be ok.
-compile_ok='
-mc_file=$1;
-shift;
-$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
-
-: check for lengths of integral types
-echo " "
-case "$intsize" in
-'')
- echo "Checking to see how big your integers are..." >&4
- $cat >intsize.c <<'EOCP'
-#include <stdio.h>
-int main()
-{
- printf("intsize=%d;\n", (int)sizeof(int));
- printf("longsize=%d;\n", (int)sizeof(long));
- printf("shortsize=%d;\n", (int)sizeof(short));
- exit(0);
-}
-EOCP
- set intsize
- if eval $compile_ok && ./intsize > /dev/null; then
- eval `./intsize`
- echo "Your integers are $intsize bytes long."
- echo "Your long integers are $longsize bytes long."
- echo "Your short integers are $shortsize bytes long."
- else
- $cat >&4 <<EOM
-!
-Help! I can't compile and run the intsize test program: please enlighten me!
-(This is probably a misconfiguration in your system or libraries, and
-you really ought to fix it. Still, I'll try anyway.)
-!
-EOM
- dflt=4
- rp="What is the size of an integer (in bytes)?"
- . ./myread
- intsize="$ans"
- dflt=$intsize
- rp="What is the size of a long integer (in bytes)?"
- . ./myread
- longsize="$ans"
- dflt=2
- rp="What is the size of a short integer (in bytes)?"
- . ./myread
- shortsize="$ans"
- fi
- ;;
-esac
-$rm -f intsize intsize.*
-
-: see what type lseek is declared as in the kernel
-rp="What is the type used for lseek's offset on this system?"
-set off_t lseektype long stdio.h sys/types.h
-eval $typedef_ask
-
-echo " "
-echo "Checking to see how big your file offsets are..." >&4
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main()
-{
- printf("%d\n", (int)sizeof($lseektype));
- return(0);
-}
-EOCP
-set try
-if eval $compile_ok; then
- lseeksize=`./try`
- echo "Your file offsets are $lseeksize bytes long."
-else
- dflt=$longsize
- echo " "
- echo "(I can't seem to compile the test program. Guessing...)"
- rp="What is the size of your file offsets (in bytes)?"
- . ./myread
- lseeksize="$ans"
-fi
-$rm -f try.c try
-
-: see what type file positions are declared as in the library
-rp="What is the type for file position used by fsetpos()?"
-set fpos_t fpostype long stdio.h sys/types.h
-eval $typedef_ask
-
-echo " "
-case "$fpostype" in
-*_t) zzz="$fpostype" ;;
-*) zzz="fpos_t" ;;
-esac
-echo "Checking the size of $zzz..." >&4
-cat > try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- printf("%d\n", (int)sizeof($fpostype));
- exit(0);
-}
-EOCP
-set try
-if eval $compile_ok; then
- yyy=`./try`
- case "$yyy" in
- '') fpossize=4
- echo "(I can't execute the test program--guessing $fpossize.)" >&4
- ;;
- *) fpossize=$yyy
- echo "Your $zzz is $fpossize bytes long."
- ;;
- esac
-else
- dflt="$longsize"
- echo " " >&4
- echo "(I can't compile the test program. Guessing...)" >&4
- rp="What is the size of your file positions (in bytes)?"
- . ./myread
- fpossize="$ans"
-fi
-
-
-
-# Backward compatibility (uselfs is deprecated).
-case "$uselfs" in
-"$define"|true|[yY]*)
- cat <<EOM >&4
-
-*** Configure -Duselfs is deprecated, using -Duselargefiles instead.
-EOM
- uselargefiles="$define"
- ;;
-esac
-
-case "$lseeksize:$fpossize" in
-8:8) cat <<EOM
-
-You can have files larger than 2 gigabytes.
-EOM
- val="$define" ;;
-*) case "$uselargefiles" in
- "$undef"|false|[nN]*) dflt='n' ;;
- *) dflt='y' ;;
- esac
- cat <<EOM
-
-Perl can be built to understand large files (files larger than 2 gigabytes)
-on some systems. To do so, Configure can be run with -Duselargefiles.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
- rp='Try to understand large files, if available?'
- . ./myread
- case "$ans" in
- y|Y) val="$define" ;;
- *) val="$undef" ;;
- esac
- ;;
-esac
-set uselargefiles
-eval $setvar
-case "$uselargefiles" in
-"$define")
-: Look for a hint-file generated 'call-back-unit'. If the
-: user has specified that a large files perl is to be built,
-: we may need to set or change some other defaults.
- if $test -f uselargefiles.cbu; then
- echo "Your platform has some specific hints for large file builds, using them..."
- . ./uselargefiles.cbu
- echo " "
- echo "Rechecking to see how big your file offsets are..." >&4
- $cat >try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main()
-{
- printf("%d\n", (int)sizeof($lseektype));
- return(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- lseeksize=`./try`
- $echo "Your file offsets are now $lseeksize bytes long."
- else
- dflt="$lseeksize"
- echo " "
- echo "(I can't seem to compile the test program. Guessing...)"
- rp="What is the size of your file offsets (in bytes)?"
- . ./myread
- lseeksize="$ans"
- fi
- case "$fpostype" in
- *_t) zzz="$fpostype" ;;
- *) zzz="fpos_t" ;;
- esac
- $echo $n "Rechecking the size of $zzz...$c" >&4
- $cat > try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- printf("%d\n", (int)sizeof($fpostype));
- exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- yyy=`./try`
- dflt="$lseeksize"
- case "$yyy" in
- '') echo " "
- echo "(I can't execute the test program--guessing $fpossize.)" >&4
- ;;
- *) fpossize=$yyy
- echo " $fpossize bytes." >&4
- ;;
- esac
- else
- dflt="$fpossize"
- echo " "
- echo "(I can't compile the test program. Guessing...)" >&4
- rp="What is the size of your file positions (in bytes)?"
- . ./myread
- fpossize="$ans"
- fi
- $rm -f try.c try
- fi
- ;;
-esac
-
-
-case "$usemorebits" in
-"$define"|true|[yY]*)
- use64bitint="$define"
- uselongdouble="$define"
- usemorebits="$define"
- ;;
-*) usemorebits="$undef"
- ;;
-esac
-
-
-case "$uselonglong" in
-"$define"|true|[yY]*)
- cat <<EOM >&4
-
-*** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
-EOM
- use64bitint="$define"
- ;;
-esac
-case "$use64bits" in
-"$define"|true|[yY]*)
- cat <<EOM >&4
-
-*** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
-EOM
- use64bitint="$define"
- ;;
-esac
-case "$use64bitints" in
-"$define"|true|[yY]*)
- cat <<EOM >&4
-
-*** There is no Configure -Duse64bitints, using -Duse64bitint instead.
-EOM
- use64bitint="$define"
- ;;
-esac
-case "$use64bitsint" in
-"$define"|true|[yY]*)
- cat <<EOM >&4
-
-*** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
-EOM
- use64bitint="$define"
- ;;
-esac
-case "$uselonglongs" in
-"$define"|true|[yY]*)
- cat <<EOM >&4
-
-*** There is no Configure -Duselonglongs, using -Duse64bitint instead.
-EOM
- use64bitint="$define"
- ;;
-esac
-case "$use64bitsall" in
-"$define"|true|[yY]*)
- cat <<EOM >&4
-
-*** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
-EOM
- use64bitall="$define"
- ;;
-esac
-
-case "$ccflags" in
-*-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
-esac
-case "$use64bitall" in
-"$define"|true|[yY]*) use64bitint="$define" ;;
-esac
-
-case "$longsize" in
-8) cat <<EOM
-
-You have natively 64-bit long integers.
-EOM
- val="$define"
- ;;
-*) case "$use64bitint" in
- "$define"|true|[yY]*) dflt='y';;
- *) dflt='n';;
- esac
- cat <<EOM
-
-Perl can be built to take advantage of 64-bit integer types
-on some systems. To do so, Configure can be run with -Duse64bitint.
-Choosing this option will most probably introduce binary incompatibilities.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
- rp='Try to use 64-bit integers, if available?'
- . ./myread
- case "$ans" in
- [yY]*) val="$define" ;;
- *) val="$undef" ;;
- esac
- ;;
-esac
-set use64bitint
-eval $setvar
-
-case "$use64bitall" in
-"$define"|true|[yY]*) dflt='y' ;;
-*) case "$longsize" in
- 8) dflt='y' ;;
- *) dflt='n' ;;
- esac
- ;;
-esac
-cat <<EOM
-
-You may also choose to try maximal 64-bitness. It means using as much
-64-bitness as possible on the platform. This in turn means even more
-binary incompatibilities. On the other hand, your platform may not
-have any more 64-bitness available than what you already have chosen.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
-rp='Try to use maximal 64-bit support, if available?'
-. ./myread
-case "$ans" in
-[yY]*) val="$define" ;;
-*) val="$undef" ;;
-esac
-set use64bitall
-eval $setvar
-case "$use64bitall" in
-"$define")
- case "$use64bitint" in
- "$undef")
- cat <<EOM
-
-Since you have chosen a maximally 64-bit build, I'm also turning on
-the use of 64-bit integers.
-EOM
- use64bitint="$define" ;;
- esac
- ;;
-esac
-
-case "$use64bitint" in
-"$define"|true|[yY]*)
-: Look for a hint-file generated 'call-back-unit'. If the
-: user has specified that a 64-bit perl is to be built,
-: we may need to set or change some other defaults.
- if $test -f use64bitint.cbu; then
- echo "Your platform has some specific hints for 64-bit integers, using them..."
- . ./use64bitint.cbu
- fi
- case "$longsize" in
- 4) case "$archname64" in
- '') archname64=64int ;;
- esac
- ;;
- esac
- ;;
-esac
-
-case "$use64bitall" in
-"$define"|true|[yY]*)
-: Look for a hint-file generated 'call-back-unit'. If the
-: user has specified that a maximally 64-bit perl is to be built,
-: we may need to set or change some other defaults.
- if $test -f use64bitall.cbu; then
- echo "Your platform has some specific hints for 64-bit builds, using them..."
- . ./use64bitall.cbu
- fi
- case "$longsize" in
- 4) case "$archname64" in
- ''|64int) archname64=64all ;;
- esac
- ;;
- esac
- ;;
-esac
-
-echo " "
-echo "Checking for GNU C Library..." >&4
-cat >gnulibc.c <<EOM
-#include <stdio.h>
-int main()
-{
-#ifdef __GLIBC__
- exit(0);
-#else
- exit(1);
-#endif
-}
-EOM
-set gnulibc
-if eval $compile_ok && ./gnulibc; then
- val="$define"
- echo "You are using the GNU C Library"
-else
- val="$undef"
- echo "You are not using the GNU C Library"
-fi
-$rm -f gnulibc*
-set d_gnulibc
-eval $setvar
-
-: see if nm is to be used to determine whether a symbol is defined or not
-case "$usenm" in
-'')
- dflt=''
- case "$d_gnulibc" in
- "$define")
- echo " "
- echo "nm probably won't work on the GNU C Library." >&4
- dflt=n
- ;;
- esac
- case "$dflt" in
- '')
- if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
- echo " "
- echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
- echo "'nm' won't be sufficient on this sytem." >&4
- dflt=n
- fi
- ;;
- esac
- case "$dflt" in
- '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
- if $test $dflt -gt 20; then
- dflt=y
- else
- dflt=n
- fi
- ;;
- esac
- ;;
-*)
- case "$usenm" in
- true|$define) dflt=y;;
- *) dflt=n;;
- esac
- ;;
-esac
-$cat <<EOM
-
-I can use $nm to extract the symbols from your C libraries. This
-is a time consuming task which may generate huge output on the disk (up
-to 3 megabytes) but that should make the symbols extraction faster. The
-alternative is to skip the 'nm' extraction part and to compile a small
-test program instead to determine whether each symbol is present. If
-you have a fast C compiler and/or if your 'nm' output cannot be parsed,
-this may be the best solution.
-
-You probably shouldn't let me use 'nm' if you are using the GNU C Library.
-
-EOM
-rp="Shall I use $nm to extract C symbols from the libraries?"
-. ./myread
-case "$ans" in
-[Nn]*) usenm=false;;
-*) usenm=true;;
-esac
-
-runnm=$usenm
-case "$reuseval" in
-true) runnm=false;;
-esac
-
-: nm options which may be necessary
-case "$nm_opt" in
-'') if $test -f /mach_boot; then
- nm_opt='' # Mach
- elif $test -d /usr/ccs/lib; then
- nm_opt='-p' # Solaris (and SunOS?)
- elif $test -f /dgux; then
- nm_opt='-p' # DG-UX
- elif $test -f /lib64/rld; then
- nm_opt='-p' # 64-bit Irix
- else
- nm_opt=''
- fi;;
-esac
-
-: nm options which may be necessary for shared libraries but illegal
-: for archive libraries. Thank you, Linux.
-case "$nm_so_opt" in
-'') case "$myuname" in
- *linux*)
- if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
- nm_so_opt='--dynamic'
- fi
- ;;
- esac
- ;;
-esac
-
-case "$runnm" in
-true)
-: get list of predefined functions in a handy place
-echo " "
-case "$libc" in
-'') libc=unknown
- case "$libs" in
- *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
- esac
- ;;
-esac
-libnames='';
-case "$libs" in
-'') ;;
-*) for thislib in $libs; do
- case "$thislib" in
- -lc|-lc_s)
- : Handle C library specially below.
- ;;
- -l*)
- thislib=`echo $thislib | $sed -e 's/^-l//'`
- if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
- :
- elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
- :
- elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
- :
- elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
- :
- elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
- :
- elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
- :
- elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
- :
- else
- try=''
- fi
- libnames="$libnames $try"
- ;;
- *) libnames="$libnames $thislib" ;;
- esac
- done
- ;;
-esac
-xxx=normal
-case "$libc" in
-unknown)
- set /lib/libc.$so
- for xxx in $libpth; do
- $test -r $1 || set $xxx/libc.$so
- : The messy sed command sorts on library version numbers.
- $test -r $1 || \
- set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
- tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
- h
- s/[0-9][0-9]*/0000&/g
- s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
- G
- s/\n/ /' | \
- $sort | $sed -e 's/^.* //'`
- eval set \$$#
- done
- $test -r $1 || set /usr/ccs/lib/libc.$so
- $test -r $1 || set /lib/libsys_s$_a
- ;;
-*)
- set blurfl
- ;;
-esac
-if $test -r "$1"; then
- echo "Your (shared) C library seems to be in $1."
- libc="$1"
-elif $test -r /lib/libc && $test -r /lib/clib; then
- echo "Your C library seems to be in both /lib/clib and /lib/libc."
- xxx=apollo
- libc='/lib/clib /lib/libc'
- if $test -r /lib/syslib; then
- echo "(Your math library is in /lib/syslib.)"
- libc="$libc /lib/syslib"
- fi
-elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
- echo "Your C library seems to be in $libc, as you said before."
-elif $test -r $incpath/usr/lib/libc$_a; then
- libc=$incpath/usr/lib/libc$_a;
- echo "Your C library seems to be in $libc. That's fine."
-elif $test -r /lib/libc$_a; then
- libc=/lib/libc$_a;
- echo "Your C library seems to be in $libc. You're normal."
-else
- if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
- :
- elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
- libnames="$libnames "`./loc clib blurfl/dyick $libpth`
- elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
- :
- elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
- :
- elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
- :
- else
- tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
- fi
- if $test -r "$tans"; then
- echo "Your C library seems to be in $tans, of all places."
- libc=$tans
- else
- libc='blurfl'
- fi
-fi
-if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
- dflt="$libc"
- cat <<EOM
-
-If the guess above is wrong (which it might be if you're using a strange
-compiler, or your machine supports multiple models), you can override it here.
-
-EOM
-else
- dflt=''
- echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
- cat >&4 <<EOM
-I can't seem to find your C library. I've looked in the following places:
-
-EOM
- $sed 's/^/ /' libpath
- cat <<EOM
-
-None of these seems to contain your C library. I need to get its name...
-
-EOM
-fi
-fn=f
-rp='Where is your C library?'
-. ./getfile
-libc="$ans"
-
-echo " "
-echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
-set X `cat libnames`
-shift
-xxx=files
-case $# in 1) xxx=file; esac
-echo "Extracting names from the following $xxx for later perusal:" >&4
-echo " "
-$sed 's/^/ /' libnames >&4
-echo " "
-$echo $n "This may take a while...$c" >&4
-
-for file in $*; do
- case $file in
- *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
- *) $nm $nm_opt $file 2>/dev/null;;
- esac
-done >libc.tmp
-
-$echo $n ".$c"
-$grep fprintf libc.tmp > libc.ptf
-xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
-xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
-xxx='[ADTSIW]'
-if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
- -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
- eval $xscan;\
- $contains '^fprintf$' libc.list >/dev/null 2>&1; then
- eval $xrun
-else
- $nm -p $* 2>/dev/null >libc.tmp
- $grep fprintf libc.tmp > libc.ptf
- if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
- eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
- then
- nm_opt='-p'
- eval $xrun
- else
- echo " "
- echo "$nm didn't seem to work right. Trying $ar instead..." >&4
- com=''
- if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
- for thisname in $libnames $libc; do
- $ar t $thisname >>libc.tmp
- done
- $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
- echo "Ok." >&4
- elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
- # Repeat libc to extract forwarders to DLL entries too
- for thisname in $libnames $libc; do
- $ar tv $thisname >>libc.tmp
- # Revision 50 of EMX has bug in $ar.
- # it will not extract forwarders to DLL entries
- # Use emximp which will extract exactly them.
- emximp -o tmp.imp $thisname \
- 2>/dev/null && \
- $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
- < tmp.imp >>libc.tmp
- $rm tmp.imp
- done
- $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
- echo "Ok." >&4
- else
- echo "$ar didn't seem to work right." >&4
- echo "Maybe this is a Cray...trying bld instead..." >&4
- if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
- then
- for thisname in $libnames; do
- bld t $libnames | \
- $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
- $ar t $thisname >>libc.tmp
- done
- echo "Ok." >&4
- else
- echo "That didn't work either. Giving up." >&4
- exit 1
- fi
- fi
- fi
-fi
-nm_extract="$com"
-if $test -f /lib/syscalls.exp; then
- echo " "
- echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
- $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
-fi
-;;
-esac
-$rm -f libnames libpath
-
-: is a C symbol defined?
-csym='tlook=$1;
-case "$3" in
--v) tf=libc.tmp; tc=""; tdc="";;
--a) tf=libc.tmp; tc="[0]"; tdc="[]";;
-*) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
-esac;
-tx=yes;
-case "$reuseval-$4" in
-true-) ;;
-true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
-esac;
-case "$tx" in
-yes)
- case "$runnm" in
- true)
- if $contains $tlook $tf >/dev/null 2>&1;
- then tval=true;
- else tval=false;
- fi;;
- *)
- echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
- if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
- then tval=true;
- else tval=false;
- fi;
- $rm -f t t.c;;
- esac;;
-*)
- case "$tval" in
- $define) tval=true;;
- *) tval=false;;
- esac;;
-esac;
-eval "$2=$tval"'
-
-: define an is-in-libc? function
-inlibc='echo " "; td=$define; tu=$undef;
-sym=$1; var=$2; eval "was=\$$2";
-tx=yes;
-case "$reuseval$was" in
-true) ;;
-true*) tx=no;;
-esac;
-case "$tx" in
-yes)
- set $sym tres -f;
- eval $csym;
- case "$tres" in
- true)
- echo "$sym() found." >&4;
- case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
- *)
- echo "$sym() NOT found." >&4;
- case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
- esac;;
-*)
- case "$was" in
- $define) echo "$sym() found." >&4;;
- *) echo "$sym() NOT found." >&4;;
- esac;;
-esac'
-
-: see if sqrtl exists
-set sqrtl d_sqrtl
-eval $inlibc
-
-case "$ccflags" in
-*-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
-esac
-
-case "$uselongdouble" in
-$define|true|[yY]*) dflt='y';;
-*) dflt='n';;
-esac
-cat <<EOM
-
-Perl can be built to take advantage of long doubles which
-(if available) may give more accuracy and range for floating point numbers.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
-rp='Try to use long doubles if available?'
-. ./myread
-case "$ans" in
-y|Y) val="$define" ;;
-*) val="$undef" ;;
-esac
-set uselongdouble
-eval $setvar
-
-case "$uselongdouble" in
-true|[yY]*) uselongdouble="$define" ;;
-esac
-
-case "$uselongdouble" in
-$define)
-: Look for a hint-file generated 'call-back-unit'. If the
-: user has specified that long doubles should be used,
-: we may need to set or change some other defaults.
- if $test -f uselongdouble.cbu; then
- echo "Your platform has some specific hints for long doubles, using them..."
- . ./uselongdouble.cbu
- else
- $cat <<EOM
-(Your platform doesn't have any specific hints for long doubles.)
-EOM
- fi
- ;;
-esac
-
-case "$uselongdouble:$d_sqrtl" in
-$define:$undef)
- $cat <<EOM >&4
-
-*** You requested the use of long doubles but you do not seem to have
-*** the mathematic functions for long doubles. I'm disabling the use
-*** of long doubles.
-
-EOM
- uselongdouble=$undef
- ;;
-esac
-
-: check for length of double
-echo " "
-case "$doublesize" in
-'')
- echo "Checking to see how big your double precision numbers are..." >&4
- $cat >try.c <<'EOCP'
-#include <stdio.h>
-int main()
-{
- printf("%d\n", (int)sizeof(double));
- exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- doublesize=`./try`
- echo "Your double is $doublesize bytes long."
- else
- dflt='8'
- echo "(I can't seem to compile the test program. Guessing...)"
- rp="What is the size of a double precision number (in bytes)?"
- . ./myread
- doublesize="$ans"
- fi
- ;;
-esac
-$rm -f try.c try
-
-: check for long doubles
-echo " "
-echo "Checking to see if you have long double..." >&4
-echo 'int main() { long double x = 7.0; }' > try.c
-set try
-if eval $compile; then
- val="$define"
- echo "You have long double."
-else
- val="$undef"
- echo "You do not have long double."
-fi
-$rm try.*
-set d_longdbl
-eval $setvar
-
-: check for length of long double
-case "${d_longdbl}${longdblsize}" in
-$define)
- echo " "
- echo "Checking to see how big your long doubles are..." >&4
- $cat >try.c <<'EOCP'
-#include <stdio.h>
-int main()
-{
- printf("%d\n", sizeof(long double));
-}
-EOCP
- set try
- set try
- if eval $compile; then
- longdblsize=`./try$exe_ext`
- echo "Your long doubles are $longdblsize bytes long."
- else
- dflt='8'
- echo " "
- echo "(I can't seem to compile the test program. Guessing...)" >&4
- rp="What is the size of a long double (in bytes)?"
- . ./myread
- longdblsize="$ans"
- fi
- if $test "X$doublesize" = "X$longdblsize"; then
- echo "(That isn't any different from an ordinary double.)"
- fi
- ;;
-esac
-$rm -f try.* try
-
-: determine the architecture name
-echo " "
-if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
- tarch=`arch`"-$osname"
-elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
- if uname -m > tmparch 2>&1 ; then
- tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
- -e 's/$/'"-$osname/" tmparch`
- else
- tarch="$osname"
- fi
- $rm -f tmparch
-else
- tarch="$osname"
-fi
-case "$myarchname" in
-''|"$tarch") ;;
-*)
- echo "(Your architecture name used to be $myarchname.)"
- archname=''
- ;;
-esac
-myarchname="$tarch"
-case "$archname" in
-'') dflt="$tarch";;
-*) dflt="$archname";;
-esac
-rp='What is your architecture name'
-. ./myread
-archname="$ans"
-case "$usethreads" in
-$define)
- echo "Threads selected." >&4
- case "$archname" in
- *-thread*) echo "...and architecture name already has -thread." >&4
- ;;
- *) archname="$archname-thread"
- echo "...setting architecture name to $archname." >&4
- ;;
- esac
- ;;
-esac
-case "$usemultiplicity" in
-$define)
- echo "Multiplicity selected." >&4
- case "$archname" in
- *-multi*) echo "...and architecture name already has -multi." >&4
- ;;
- *) archname="$archname-multi"
- echo "...setting architecture name to $archname." >&4
- ;;
- esac
- ;;
-esac
-case "$use64bitint$use64bitall" in
-*"$define"*)
- case "$archname64" in
- '')
- echo "This architecture is naturally 64-bit, not changing architecture name." >&4
- ;;
- *)
- case "$use64bitint" in
- "$define") echo "64 bit integers selected." >&4 ;;
- esac
- case "$use64bitall" in
- "$define") echo "Maximal 64 bitness selected." >&4 ;;
- esac
- case "$archname" in
- *-$archname64*) echo "...and architecture name already has $archname64." >&4
- ;;
- *) archname="$archname-$archname64"
- echo "...setting architecture name to $archname." >&4
- ;;
- esac
- ;;
- esac
-esac
-case "$uselongdouble" in
-$define)
- echo "Long doubles selected." >&4
- case "$longdblsize" in
- $doublesize)
- "...but long doubles are equal to doubles, not changing architecture name." >&4
- ;;
- *)
- case "$archname" in
- *-ld*) echo "...and architecture name already has -ld." >&4
- ;;
- *) archname="$archname-ld"
- echo "...setting architecture name to $archname." >&4
- ;;
- esac
- ;;
- esac
- ;;
-esac
-case "$useperlio" in
-$define)
- echo "Perlio selected." >&4
- case "$archname" in
- *-perlio*) echo "...and architecture name already has -perlio." >&4
- ;;
- *) archname="$archname-perlio"
- echo "...setting architecture name to $archname." >&4
- ;;
- esac
- ;;
-esac
-
-: determine root of directory hierarchy where package will be installed.
-case "$prefix" in
-'')
- dflt=`./loc . /usr/local /usr/local /local /opt /usr`
- ;;
-*)
- dflt="$prefix"
- ;;
-esac
-$cat <<EOM
-
-By default, $package will be installed in $dflt/bin, manual pages
-under $dflt/man, etc..., i.e. with $dflt as prefix for all
-installation directories. Typically this is something like /usr/local.
-If you wish to have binaries under /usr/bin but other parts of the
-installation under /usr/local, that's ok: you will be prompted
-separately for each of the installation directories, the prefix being
-only used to set the defaults.
-
-EOM
-fn=d~
-rp='Installation prefix to use?'
-. ./getfile
-oldprefix=''
-case "$prefix" in
-'') ;;
-*)
- case "$ans" in
- "$prefix") ;;
- *) oldprefix="$prefix";;
- esac
- ;;
-esac
-prefix="$ans"
-prefixexp="$ansexp"
-
-: is AFS running?
-echo " "
-case "$afs" in
-$define|true) afs=true ;;
-$undef|false) afs=false ;;
-*) if test -d /afs; then
- afs=true
- else
- afs=false
- fi
- ;;
-esac
-if $afs; then
- echo "AFS may be running... I'll be extra cautious then..." >&4
-else
- echo "AFS does not seem to be running..." >&4
-fi
-
-: determine installation prefix for where package is to be installed.
-if $afs; then
-$cat <<EOM
-
-Since you are running AFS, I need to distinguish the directory in which
-files will reside from the directory in which they are installed (and from
-which they are presumably copied to the former directory by occult means).
-
-EOM
- case "$installprefix" in
- '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
- *) dflt="$installprefix";;
- esac
-else
-$cat <<EOM
-
-In some special cases, particularly when building $package for distribution,
-it is convenient to distinguish between the directory in which files should
-be installed from the directory ($prefix) in which they
-will eventually reside. For most users, these two directories are the same.
-
-EOM
- case "$installprefix" in
- '') dflt=$prefix ;;
- *) dflt=$installprefix;;
- esac
-fi
-fn=d~
-rp='What installation prefix should I use for installing files?'
-. ./getfile
-installprefix="$ans"
-installprefixexp="$ansexp"
-
-: set the prefixit variable, to compute a suitable default value
-prefixit='case "$3" in
-""|none)
- case "$oldprefix" in
- "") eval "$1=\"\$$2\"";;
- *)
- case "$3" in
- "") eval "$1=";;
- none)
- eval "tp=\"\$$2\"";
- case "$tp" in
- ""|" ") eval "$1=\"\$$2\"";;
- *) eval "$1=";;
- esac;;
- esac;;
- esac;;
-*)
- eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
- case "$tp" in
- --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
- /*-$oldprefix/*|\~*-$oldprefix/*)
- eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
- *) eval "$1=\"\$$2\"";;
- esac;;
-esac'
-
-
-: get the patchlevel
-echo " "
-echo "Getting the current patchlevel..." >&4
-if $test -r $rsrc/patchlevel.h;then
- revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
- patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
- subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
- api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
- api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
- api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
-else
- revision=0
- patchlevel=0
- subversion=0
- api_revision=0
- api_version=0
- api_subversion=0
-fi
-$echo "(You have $package version $patchlevel subversion $subversion.)"
-case "$osname" in
-dos|vms)
- : XXX Should be a Configure test for double-dots in filenames.
- version=`echo $revision $patchlevel $subversion | \
- $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
- api_versionstring=`echo $api_revision $api_version $api_subversion | \
- $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
- ;;
-*)
- version=`echo $revision $patchlevel $subversion | \
- $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
- api_versionstring=`echo $api_revision $api_version $api_subversion | \
- $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
- ;;
-esac
-: Special case the 5.005_xx maintenance series, which used 5.005
-: without any subversion label as a subdirectory in $sitelib
-if test "${api_revision}${api_version}${api_subversion}" = "550"; then
- api_versionstring='5.005'
-fi
-
-: determine installation style
-: For now, try to deduce it from prefix unless it is already set.
-: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
-case "$installstyle" in
-'') case "$prefix" in
- *perl*) dflt='lib';;
- *) dflt='lib/perl5' ;;
- esac
- ;;
-*) dflt="$installstyle" ;;
-esac
-: Probably not worth prompting for this since we prompt for all
-: the directories individually, and the prompt would be too long and
-: confusing anyway.
-installstyle=$dflt
-
-: determine where private library files go
-: Usual default is /usr/local/lib/perl5/$version.
-: Also allow things like /opt/perl/lib/$version, since
-: /opt/perl/lib/perl5... would be redundant.
-: The default "style" setting is made in installstyle.U
-case "$installstyle" in
-*lib/perl5*) set dflt privlib lib/$package/$version ;;
-*) set dflt privlib lib/$version ;;
-esac
-eval $prefixit
-$cat <<EOM
-
-There are some auxiliary files for $package that need to be put into a
-private library directory that is accessible by everyone.
-
-EOM
-fn=d~+
-rp='Pathname where the private library files will reside?'
-. ./getfile
-privlib="$ans"
-privlibexp="$ansexp"
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
-else
- installprivlib="$privlibexp"
-fi
-
-: set the prefixup variable, to restore leading tilda escape
-prefixup='case "$prefixexp" in
-"$prefix") ;;
-*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
-esac'
-
-: determine where public architecture dependent libraries go
-set archlib archlib
-eval $prefixit
-: privlib default is /usr/local/lib/$package/$version
-: archlib default is /usr/local/lib/$package/$version/$archname
-: privlib may have an optional trailing /share.
-tdflt=`echo $privlib | $sed 's,/share$,,'`
-tdflt=$tdflt/$archname
-case "$archlib" in
-'') dflt=$tdflt
- ;;
-*) dflt="$archlib"
- ;;
-esac
-$cat <<EOM
-
-$spackage contains architecture-dependent library files. If you are
-sharing libraries in a heterogeneous environment, you might store
-these files in a separate location. Otherwise, you can just include
-them with the rest of the public library files.
-
-EOM
-fn=d+~
-rp='Where do you want to put the public architecture-dependent libraries?'
-. ./getfile
-archlib="$ans"
-archlibexp="$ansexp"
-if $test X"$archlib" = X"$privlib"; then
- d_archlib="$undef"
-else
- d_archlib="$define"
-fi
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
-else
- installarchlib="$archlibexp"
-fi
-
-
-: Binary compatibility with 5.005 is not possible for builds
-: with advanced features
-case "$usethreads$usemultiplicity" in
-*define*)
- bincompat5005="$undef"
- d_bincompat5005="$undef"
- ;;
-*) $cat <<EOM
-
-This version of Perl can be compiled for binary compatibility with 5.005.
-If you decide to do so, you will be able to continue using most of the
-extensions that were compiled for Perl 5.005.
-
-EOM
- case "$bincompat5005$d_bincompat5005" in
- *"$undef"*) dflt=n ;;
- *) dflt=y ;;
- esac
- rp='Binary compatibility with Perl 5.005?'
- . ./myread
- case "$ans" in
- y*) val="$define" ;;
- *) val="$undef" ;;
- esac
- set d_bincompat5005
- eval $setvar
- case "$d_bincompat5005" in
- "$define")
- bincompat5005="$define"
- ;;
- *) bincompat5005="$undef"
- d_bincompat5005="$undef"
- ;;
- esac
- ;;
-esac
-
-
-: see if setuid scripts can be secure
-$cat <<EOM
-
-Some kernels have a bug that prevents setuid #! scripts from being
-secure. Some sites have disabled setuid #! scripts because of this.
-
-First let's decide if your kernel supports secure setuid #! scripts.
-(If setuid #! scripts would be secure but have been disabled anyway,
-don't say that they are secure if asked.)
-
-EOM
-
-val="$undef"
-if $test -d /dev/fd; then
- echo "#!$ls" >reflect
- chmod +x,u+s reflect
- ./reflect >flect 2>&1
- if $contains "/dev/fd" flect >/dev/null; then
- echo "Congratulations, your kernel has secure setuid scripts!" >&4
- val="$define"
- else
- $cat <<EOM
-If you are not sure if they are secure, I can check but I'll need a
-username and password different from the one you are using right now.
-If you don't have such a username or don't want me to test, simply
-enter 'none'.
-
-EOM
- rp='Other username to test security of setuid scripts with?'
- dflt='none'
- . ./myread
- case "$ans" in
- n|none)
- case "$d_suidsafe" in
- '') echo "I'll assume setuid scripts are *not* secure." >&4
- dflt=n;;
- "$undef")
- echo "Well, the $hint value is *not* secure." >&4
- dflt=n;;
- *) echo "Well, the $hint value *is* secure." >&4
- dflt=y;;
- esac
- ;;
- *)
- $rm -f reflect flect
- echo "#!$ls" >reflect
- chmod +x,u+s reflect
- echo >flect
- chmod a+w flect
- echo '"su" will (probably) prompt you for '"$ans's password."
- su $ans -c './reflect >flect'
- if $contains "/dev/fd" flect >/dev/null; then
- echo "Okay, it looks like setuid scripts are secure." >&4
- dflt=y
- else
- echo "I don't think setuid scripts are secure." >&4
- dflt=n
- fi
- ;;
- esac
- rp='Does your kernel have *secure* setuid scripts?'
- . ./myread
- case "$ans" in
- [yY]*) val="$define";;
- *) val="$undef";;
- esac
- fi
-else
- echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
- echo "(That's for file descriptors, not floppy disks.)"
- val="$undef"
-fi
-set d_suidsafe
-eval $setvar
-
-$rm -f reflect flect
-
-: now see if they want to do setuid emulation
-echo " "
-val="$undef"
-case "$d_suidsafe" in
-"$define")
- val="$undef"
- echo "No need to emulate SUID scripts since they are secure here." >& 4
- ;;
-*)
- $cat <<EOM
-Some systems have disabled setuid scripts, especially systems where
-setuid scripts cannot be secure. On systems where setuid scripts have
-been disabled, the setuid/setgid bits on scripts are currently
-useless. It is possible for $package to detect those bits and emulate
-setuid/setgid in a secure fashion. This emulation will only work if
-setuid scripts have been disabled in your kernel.
-
-EOM
- case "$d_dosuid" in
- "$define") dflt=y ;;
- *) dflt=n ;;
- esac
- rp="Do you want to do setuid/setgid emulation?"
- . ./myread
- case "$ans" in
- [yY]*) val="$define";;
- *) val="$undef";;
- esac
- ;;
-esac
-set d_dosuid
-eval $setvar
-
-: determine filename position in cpp output
-echo " "
-echo "Computing filename position in cpp output for #include directives..." >&4
-echo '#include <stdio.h>' > foo.c
-$cat >fieldn <<EOF
-$startsh
-$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
-$grep '^[ ]*#.*stdio\.h' | \
-while read cline; do
- pos=1
- set \$cline
- while $test \$# -gt 0; do
- if $test -r \`echo \$1 | $tr -d '"'\`; then
- echo "\$pos"
- exit 0
- fi
- shift
- pos=\`expr \$pos + 1\`
- done
-done
-EOF
-chmod +x fieldn
-fieldn=`./fieldn`
-$rm -f foo.c fieldn
-case $fieldn in
-'') pos='???';;
-1) pos=first;;
-2) pos=second;;
-3) pos=third;;
-*) pos="${fieldn}th";;
-esac
-echo "Your cpp writes the filename in the $pos field of the line."
-
-: locate header file
-$cat >findhdr <<EOF
-$startsh
-wanted=\$1
-name=''
-for usrincdir in $usrinc
-do
- if test -f \$usrincdir/\$wanted; then
- echo "\$usrincdir/\$wanted"
- exit 0
- fi
-done
-awkprg='{ print \$$fieldn }'
-echo "#include <\$wanted>" > foo\$\$.c
-$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
-$grep "^[ ]*#.*\$wanted" | \
-while read cline; do
- name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
- case "\$name" in
- *[/\\\\]\$wanted) echo "\$name"; exit 1;;
- *[\\\\/]\$wanted) echo "\$name"; exit 1;;
- *) exit 2;;
- esac;
-done;
-#
-# status = 0: grep returned 0 lines, case statement not executed
-# status = 1: headerfile found
-# status = 2: while loop executed, no headerfile found
-#
-status=\$?
-$rm -f foo\$\$.c;
-if test \$status -eq 1; then
- exit 0;
-fi
-exit 1
-EOF
-chmod +x findhdr
-
-: define an alternate in-header-list? function
-inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
-cont=true; xxf="echo \"<\$1> found.\" >&4";
-case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
-*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
-esac;
-case $# in 4) instead=instead;; *) instead="at last";; esac;
-while $test "$cont"; do
- xxx=`./findhdr $1`
- var=$2; eval "was=\$$2";
- if $test "$xxx" && $test -r "$xxx";
- then eval $xxf;
- eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
- cont="";
- else eval $xxnf;
- eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
- set $yyy; shift; shift; yyy=$@;
- case $# in 0) cont="";;
- 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
- xxnf="echo \"and I did not find <\$1> either.\" >&4";;
- *) xxf="echo \"but I found <\$1\> instead.\" >&4";
- xxnf="echo \"there is no <\$1>, ...\" >&4";;
- esac;
-done;
-while $test "$yyy";
-do set $yyy; var=$2; eval "was=\$$2";
- eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
- set $yyy; shift; shift; yyy=$@;
-done'
-
-: see if this is a malloc.h system
-set malloc.h i_malloc
-eval $inhdr
-
-: see if stdlib is available
-set stdlib.h i_stdlib
-eval $inhdr
-
-: determine which malloc to compile in
-echo " "
-case "$usemymalloc" in
-''|[yY]*|true|$define) dflt='y' ;;
-*) dflt='n' ;;
-esac
-rp="Do you wish to attempt to use the malloc that comes with $package?"
-. ./myread
-usemymalloc="$ans"
-case "$ans" in
-y*|true)
- usemymalloc='y'
- mallocsrc='malloc.c'
- mallocobj="malloc$_o"
- d_mymalloc="$define"
- case "$libs" in
- *-lmalloc*)
- : Remove malloc from list of libraries to use
- echo "Removing unneeded -lmalloc from library list" >&4
- set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
- shift
- libs="$*"
- echo "libs = $libs" >&4
- ;;
- esac
- ;;
-*)
- usemymalloc='n'
- mallocsrc=''
- mallocobj=''
- d_mymalloc="$undef"
- ;;
-esac
-
-: compute the return types of malloc and free
-echo " "
-$cat >malloc.c <<END
-#$i_malloc I_MALLOC
-#$i_stdlib I_STDLIB
-#include <stdio.h>
-#include <sys/types.h>
-#ifdef I_MALLOC
-#include <malloc.h>
-#endif
-#ifdef I_STDLIB
-#include <stdlib.h>
-#endif
-#ifdef TRY_MALLOC
-void *malloc();
-#endif
-#ifdef TRY_FREE
-void free();
-#endif
-END
-case "$malloctype" in
-'')
- if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
- malloctype='void *'
- else
- malloctype='char *'
- fi
- ;;
-esac
-echo "Your system wants malloc to return '$malloctype', it would seem." >&4
-
-case "$freetype" in
-'')
- if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
- freetype='void'
- else
- freetype='int'
- fi
- ;;
-esac
-echo "Your system uses $freetype free(), it would seem." >&4
-$rm -f malloc.[co]
-$cat <<EOM
-
-After $package is installed, you may wish to install various
-add-on modules and utilities. Typically, these add-ons will
-be installed under $prefix with the rest
-of this package. However, you may wish to install such add-ons
-elsewhere under a different prefix.
-
-If you do not wish to put everything under a single prefix, that's
-ok. You will be prompted for the individual locations; this siteprefix
-is only used to suggest the defaults.
-
-The default should be fine for most people.
-
-EOM
-fn=d~+
-rp='Installation prefix to use for add-on modules and utilities?'
-: XXX Here might be another good place for an installstyle setting.
-case "$siteprefix" in
-'') dflt=$prefix ;;
-*) dflt=$siteprefix ;;
-esac
-. ./getfile
-: XXX Prefixit unit does not yet support siteprefix and vendorprefix
-oldsiteprefix=''
-case "$siteprefix" in
-'') ;;
-*) case "$ans" in
- "$prefix") ;;
- *) oldsiteprefix="$prefix";;
- esac
- ;;
-esac
-siteprefix="$ans"
-siteprefixexp="$ansexp"
-
-: determine where site specific libraries go.
-: Usual default is /usr/local/lib/perl5/site_perl/$version
-: The default "style" setting is made in installstyle.U
-: XXX No longer works with Prefixit stuff.
-prog=`echo $package | $sed 's/-*[0-9.]*$//'`
-case "$sitelib" in
-'') case "$installstyle" in
- *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
- *) dflt=$siteprefix/lib/site_$prog/$version ;;
- esac
- ;;
-*) dflt="$sitelib"
- ;;
-esac
-$cat <<EOM
-
-The installation process will create a directory for
-site-specific extensions and modules. Most users find it convenient
-to place all site-specific files in this directory rather than in the
-main distribution directory.
-
-EOM
-fn=d~+
-rp='Pathname for the site-specific library files?'
-. ./getfile
-sitelib="$ans"
-sitelibexp="$ansexp"
-sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
-else
- installsitelib="$sitelibexp"
-fi
-
-: determine where site specific architecture-dependent libraries go.
-: sitelib default is /usr/local/lib/perl5/site_perl/$version
-: sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
-: sitelib may have an optional trailing /share.
-case "$sitearch" in
-'') dflt=`echo $sitelib | $sed 's,/share$,,'`
- dflt="$dflt/$archname"
- ;;
-*) dflt="$sitearch"
- ;;
-esac
-set sitearch sitearch none
-eval $prefixit
-$cat <<EOM
-
-The installation process will also create a directory for
-architecture-dependent site-specific extensions and modules.
-
-EOM
-fn=d~+
-rp='Pathname for the site-specific architecture-dependent library files?'
-. ./getfile
-sitearch="$ans"
-sitearchexp="$ansexp"
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
-else
- installsitearch="$sitearchexp"
-fi
-
-$cat <<EOM
-
-The installation process will also create a directory for
-vendor-supplied add-ons. Vendors who supply perl with their system
-may find it convenient to place all vendor-supplied files in this
-directory rather than in the main distribution directory. This will
-ease upgrades between binary-compatible maintenance versions of perl.
-
-Of course you may also use these directories in whatever way you see
-fit. For example, you might use them to access modules shared over a
-company-wide network.
-
-The default answer should be fine for most people.
-This causes further questions about vendor add-ons to be skipped
-and no vendor-specific directories will be configured for perl.
-
-EOM
-rp='Do you want to configure vendor-specific add-on directories?'
-case "$usevendorprefix" in
-define|true|[yY]*) dflt=y ;;
-*) : User may have set vendorprefix directly on Configure command line.
- case "$vendorprefix" in
- ''|' ') dflt=n ;;
- *) dflt=y ;;
- esac
- ;;
-esac
-. ./myread
-case "$ans" in
-[yY]*) fn=d~+
- rp='Installation prefix to use for vendor-supplied add-ons?'
- case "$vendorprefix" in
- '') dflt='' ;;
- *) dflt=$vendorprefix ;;
- esac
- . ./getfile
- : XXX Prefixit unit does not yet support siteprefix and vendorprefix
- oldvendorprefix=''
- case "$vendorprefix" in
- '') ;;
- *) case "$ans" in
- "$prefix") ;;
- *) oldvendorprefix="$prefix";;
- esac
- ;;
- esac
- usevendorprefix="$define"
- vendorprefix="$ans"
- vendorprefixexp="$ansexp"
- ;;
-*) usevendorprefix="$undef"
- vendorprefix=''
- vendorprefixexp=''
- ;;
-esac
-
-case "$vendorprefix" in
-'') d_vendorlib="$undef"
- vendorlib=''
- vendorlibexp=''
- ;;
-*) d_vendorlib="$define"
- : determine where vendor-supplied modules go.
- : Usual default is /usr/local/lib/perl5/vendor_perl/$version
- case "$vendorlib" in
- '')
- prog=`echo $package | $sed 's/-*[0-9.]*$//'`
- case "$installstyle" in
- *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
- *) dflt=$vendorprefix/lib/vendor_$prog/$version ;;
- esac
- ;;
- *) dflt="$vendorlib"
- ;;
- esac
- fn=d~+
- rp='Pathname for the vendor-supplied library files?'
- . ./getfile
- vendorlib="$ans"
- vendorlibexp="$ansexp"
- ;;
-esac
-vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
-else
- installvendorlib="$vendorlibexp"
-fi
-
-case "$vendorprefix" in
-'') d_vendorarch="$undef"
- vendorarch=''
- vendorarchexp=''
- ;;
-*) d_vendorarch="$define"
- : determine where vendor-supplied architecture-dependent libraries go.
- : vendorlib default is /usr/local/lib/perl5/vendor_perl/$version
- : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
- : vendorlib may have an optional trailing /share.
- case "$vendorarch" in
- '') dflt=`echo $vendorlib | $sed 's,/share$,,'`
- dflt="$dflt/$archname"
- ;;
- *) dflt="$vendorarch" ;;
- esac
- fn=d~+
- rp='Pathname for vendor-supplied architecture-dependent files?'
- . ./getfile
- vendorarch="$ans"
- vendorarchexp="$ansexp"
- ;;
-esac
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
-else
- installvendorarch="$vendorarchexp"
-fi
-
-: Final catch-all directories to search
-$cat <<EOM
-
-Lastly, you can have perl look in other directories for extensions and
-modules in addition to those already specified.
-These directories will be searched after
- $sitearch
- $sitelib
-EOM
-test X"$vendorlib" != "X" && echo ' ' $vendorlib
-test X"$vendorarch" != "X" && echo ' ' $vendorarch
-echo ' '
-case "$otherlibdirs" in
-''|' ') dflt='none' ;;
-*) dflt="$otherlibdirs" ;;
-esac
-$cat <<EOM
-Enter a colon-separated set of extra paths to include in perl's @INC
-search path, or enter 'none' for no extra paths.
-
-EOM
-
-rp='Colon-separated list of additional directories for perl to search?'
-. ./myread
-case "$ans" in
-' '|''|none) otherlibdirs=' ' ;;
-*) otherlibdirs="$ans" ;;
-esac
-case "$otherlibdirs" in
-' ') val=$undef ;;
-*) val=$define ;;
-esac
-set d_perl_otherlibdirs
-eval $setvar
-
-: Cruising for prototypes
-echo " "
-echo "Checking out function prototypes..." >&4
-$cat >prototype.c <<'EOCP'
-int main(int argc, char *argv[]) {
- exit(0);}
-EOCP
-if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
- echo "Your C compiler appears to support function prototypes."
- val="$define"
-else
- echo "Your C compiler doesn't seem to understand function prototypes."
- val="$undef"
-fi
-set prototype
-eval $setvar
-$rm -f prototype*
-
-case "$prototype" in
-"$define") ;;
-*) ansi2knr='ansi2knr'
- echo " "
- cat <<EOM >&4
-
-$me: FATAL ERROR:
-This version of $package can only be compiled by a compiler that
-understands function prototypes. Unfortunately, your C compiler
- $cc $ccflags
-doesn't seem to understand them. Sorry about that.
-
-If GNU cc is available for your system, perhaps you could try that instead.
-
-Eventually, we hope to support building Perl with pre-ANSI compilers.
-If you would like to help in that effort, please contact <perlbug@perl.org>.
-
-Aborting Configure now.
-EOM
- exit 2
- ;;
-esac
-
-: determine where public executables go
-echo " "
-set dflt bin bin
-eval $prefixit
-fn=d~
-rp='Pathname where the public executables will reside?'
-. ./getfile
-if $test "X$ansexp" != "X$binexp"; then
- installbin=''
-fi
-bin="$ans"
-binexp="$ansexp"
-: Change installation prefix, if necessary.
-: XXX Bug? -- ignores Configure -Dinstallprefix setting.
-if $test X"$prefix" != X"$installprefix"; then
- installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
-else
- installbin="$binexp"
-fi
-
-: Find perl5.005 or later.
-echo "Looking for a previously installed perl5.005 or later... "
-case "$perl5" in
-'') for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
- : Check if this perl is recent and can load a simple module
- if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
- perl5=$tdir/perl
- break;
- elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
- perl5=$tdir/perl
- break;
- fi
- done
- ;;
-*) perl5="$perl5"
- ;;
-esac
-case "$perl5" in
-'') echo "None found. That's ok.";;
-*) echo "Using $perl5." ;;
-esac
-
-: Determine list of previous versions to include in @INC
-$cat > getverlist <<EOPL
-#!$perl5 -w
-use File::Basename;
-\$api_versionstring = "$api_versionstring";
-\$version = "$version";
-\$stem = "$sitelib_stem";
-\$archname = "$archname";
-EOPL
- $cat >> getverlist <<'EOPL'
-# Can't have leading @ because metaconfig interprets it as a command!
-;@inc_version_list=();
-# XXX Redo to do opendir/readdir?
-if (-d $stem) {
- chdir($stem);
- ;@candidates = glob("5.*");
-}
-else {
- ;@candidates = ();
-}
-
-# XXX ToDo: These comparisons must be reworked when two-digit
-# subversions come along, so that 5.7.10 compares as greater than
-# 5.7.3! By that time, hope that 5.6.x is sufficiently
-# widespread that we can use the built-in version vectors rather
-# than reinventing them here. For 5.6.0, however, we must
-# assume this script will likely be run by 5.005_0x. --AD 1/2000.
-foreach $d (@candidates) {
- if ($d lt $version) {
- if ($d ge $api_versionstring) {
- unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
- }
- elsif ($d ge "5.005") {
- unshift(@inc_version_list, grep { -d } $d);
- }
- }
- else {
- # Skip newer version. I.e. don't look in
- # 5.7.0 if we're installing 5.6.1.
- }
-}
-
-if (@inc_version_list) {
- print join(' ', @inc_version_list);
-}
-else {
- # Blank space to preserve value for next Configure run.
- print " ";
-}
-EOPL
-chmod +x getverlist
-case "$inc_version_list" in
-'') if test -x "$perl5"; then
- dflt=`$perl5 getverlist`
- else
- dflt='none'
- fi
- ;;
-$undef) dflt='none' ;;
-*) dflt="$inc_version_list" ;;
-esac
-case "$dflt" in
-''|' ') dflt=none ;;
-esac
-case "$dflt" in
-5.005) case "$bincompat5005" in
- $define|true|[yY]*) ;;
- *) dflt=none ;;
- esac
- ;;
-esac
-$cat <<'EOM'
-
-In order to ease the process of upgrading, this version of perl
-can be configured to use modules built and installed with earlier
-versions of perl that were installed under $prefix. Specify here
-the list of earlier versions that this version of perl should check.
-If Configure detected no earlier versions of perl installed under
-$prefix, then the list will be empty. Answer 'none' to tell perl
-to not search earlier versions.
-
-The default should almost always be sensible, so if you're not sure,
-just accept the default.
-EOM
-
-rp='List of earlier versions to include in @INC?'
-. ./myread
-case "$ans" in
-[Nn]one|''|' ') inc_version_list=' ' ;;
-*) inc_version_list="$ans" ;;
-esac
-case "$inc_version_list" in
-''|' ')
- inc_version_list_init='0';;
-*) inc_version_list_init=`echo $inc_version_list |
- $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
- ;;
-esac
-$rm -f getverlist
-
-: determine whether to install perl also as /usr/bin/perl
-
-echo " "
-if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
- $cat <<EOM
-Many scripts expect perl to be installed as /usr/bin/perl.
-I can install the perl you are about to compile also as /usr/bin/perl
-(in addition to $installbin/perl).
-EOM
- case "$installusrbinperl" in
- "$undef"|[nN]*) dflt='n';;
- *) dflt='y';;
- esac
- rp="Do you want to install perl as /usr/bin/perl?"
- . ./myread
- case "$ans" in
- [yY]*) val="$define";;
- *) val="$undef" ;;
- esac
-else
- val="$undef"
-fi
-set installusrbinperl
-eval $setvar
-
-: see if dld is available
-set dld.h i_dld
-eval $inhdr
-
-: see if dlopen exists
-xxx_runnm="$runnm"
-runnm=false
-set dlopen d_dlopen
-eval $inlibc
-runnm="$xxx_runnm"
-
-: determine which dynamic loading, if any, to compile in
-echo " "
-dldir="ext/DynaLoader"
-case "$usedl" in
-$define|y|true)
- dflt='y'
- usedl="$define"
- ;;
-$undef|n|false)
- dflt='n'
- usedl="$undef"
- ;;
-*)
- dflt='n'
- case "$d_dlopen" in
- $define) dflt='y' ;;
- esac
- case "$i_dld" in
- $define) dflt='y' ;;
- esac
- : Does a dl_xxx.xs file exist for this operating system
- $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
- ;;
-esac
-rp="Do you wish to use dynamic loading?"
-. ./myread
-usedl="$ans"
-case "$ans" in
-y*) usedl="$define"
- case "$dlsrc" in
- '')
- if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
- dflt="$dldir/dl_${osname}.xs"
- elif $test "$d_dlopen" = "$define" ; then
- dflt="$dldir/dl_dlopen.xs"
- elif $test "$i_dld" = "$define" ; then
- dflt="$dldir/dl_dld.xs"
- else
- dflt=''
- fi
- ;;
- *) dflt="$dldir/$dlsrc"
- ;;
- esac
- echo "The following dynamic loading files are available:"
- : Can not go over to $dldir because getfile has path hard-coded in.
- tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
- rp="Source file to use for dynamic loading"
- fn="fne"
- gfpth="$src"
- . ./getfile
- usedl="$define"
- : emulate basename
- dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
-
- $cat << EOM
-
-Some systems may require passing special flags to $cc -c to
-compile modules that will be used to create a shared library.
-To use no flags, say "none".
-
-EOM
- case "$cccdlflags" in
- '') case "$gccversion" in
- '') case "$osname" in
- hpux) dflt='+z' ;;
- next) dflt='none' ;;
- irix*) dflt='-KPIC' ;;
- svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
- sunos) dflt='-pic' ;;
- *) dflt='none' ;;
- esac
- ;;
- *) case "$osname" in
- svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
- *) dflt='-fpic' ;;
- esac ;;
- esac ;;
- ' ') dflt='none' ;;
- *) dflt="$cccdlflags" ;;
- esac
- rp="Any special flags to pass to $cc -c to compile shared library modules?"
- . ./myread
- case "$ans" in
- none) cccdlflags=' ' ;;
- *) cccdlflags="$ans" ;;
- esac
-
- cat << EOM
-
-Some systems use ld to create libraries that can be dynamically loaded,
-while other systems (such as those using ELF) use $cc.
-
-EOM
- case "$ld" in
- '') $cat >try.c <<'EOM'
-/* Test for whether ELF binaries are produced */
-#include <fcntl.h>
-#include <stdlib.h>
-int main() {
- char b[4];
- int i = open("a.out",O_RDONLY);
- if(i == -1)
- exit(1); /* fail */
- if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
- exit(0); /* succeed (yes, it's ELF) */
- else
- exit(1); /* fail */
-}
-EOM
- if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
- cat <<EOM
-You appear to have ELF support. I'll use $cc to build dynamic libraries.
-EOM
- dflt="$cc"
- else
- echo "I'll use ld to build dynamic libraries."
- dflt='ld'
- fi
- rm -f try.c a.out
- ;;
- *) dflt="$ld"
- ;;
- esac
-
- rp="What command should be used to create dynamic libraries?"
- . ./myread
- ld="$ans"
-
- cat << EOM
-
-Some systems may require passing special flags to $ld to create a
-library that can be dynamically loaded. If your ld flags include
--L/other/path options to locate libraries outside your loader's normal
-search path, you may need to specify those -L options here as well. To
-use no flags, say "none".
-
-EOM
- case "$lddlflags" in
- '') case "$osname" in
- beos) dflt='-nostart' ;;
- hpux) dflt='-b';
- case "$gccversion" in
- '') dflt="$dflt +vnocompatwarnings" ;;
- esac
- ;;
- linux|irix*) dflt='-shared' ;;
- next) dflt='none' ;;
- solaris) dflt='-G' ;;
- sunos) dflt='-assert nodefinitions' ;;
- svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
- *) dflt='none' ;;
- esac
- ;;
- *) dflt="$lddlflags" ;;
- esac
-
- : Try to guess additional flags to pick up local libraries.
- : Be careful not to append to a plain 'none'
- case "$dflt" in
- none) dflt='' ;;
- esac
- for thisflag in $ldflags; do
- case "$thisflag" in
- -L*|-R*)
- case " $dflt " in
- *" $thisflag "*) ;;
- *) dflt="$dflt $thisflag" ;;
- esac
- ;;
- esac
- done
-
- case "$dflt" in
- ''|' ') dflt='none' ;;
- esac
-
- rp="Any special flags to pass to $ld to create a dynamically loaded library?"
- . ./myread
- case "$ans" in
- none) lddlflags=' ' ;;
- *) lddlflags="$ans" ;;
- esac
-
- cat <<EOM
-
-Some systems may require passing special flags to $cc to indicate that
-the resulting executable will use dynamic linking. To use no flags,
-say "none".
-
-EOM
- case "$ccdlflags" in
- '') case "$osname" in
- hpux) dflt='-Wl,-E' ;;
- linux) dflt='-rdynamic' ;;
- next) dflt='none' ;;
- sunos) dflt='none' ;;
- *) dflt='none' ;;
- esac ;;
- ' ') dflt='none' ;;
- *) dflt="$ccdlflags" ;;
- esac
- rp="Any special flags to pass to $cc to use dynamic linking?"
- . ./myread
- case "$ans" in
- none) ccdlflags=' ' ;;
- *) ccdlflags="$ans" ;;
- esac
- ;;
-*) usedl="$undef"
- ld='ld'
- dlsrc='dl_none.xs'
- lddlflags=''
- ccdlflags=''
- ;;
-esac
-
-also=''
-case "$usedl" in
-$undef)
- # No dynamic loading being used, so don't bother even to prompt.
- useshrplib='false'
- ;;
-*) case "$useshrplib" in
- '') case "$osname" in
- svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
- dflt=y
- also='Building a shared libperl is required for dynamic loading to work on your system.'
- ;;
- next*)
- case "$osvers" in
- 4*) dflt=y
- also='Building a shared libperl is needed for MAB support.'
- ;;
- *) dflt=n
- ;;
- esac
- ;;
- *) dflt=n
- ;;
- esac
- ;;
- $define|true|[Yy]*)
- dflt=y
- ;;
- *) dflt=n
- ;;
- esac
- $cat << EOM
-
-The perl executable is normally obtained by linking perlmain.c with
-libperl${_a}, any static extensions (usually just DynaLoader), and
-any other libraries needed on this system (such as -lm, etc.). Since
-your system supports dynamic loading, it is probably possible to build
-a shared libperl.$so. If you will have more than one executable linked
-to libperl.$so, this will significantly reduce the size of each
-executable, but it may have a noticeable affect on performance. The
-default is probably sensible for your system.
-$also
-
-EOM
- rp="Build a shared libperl.$so (y/n)"
- . ./myread
- case "$ans" in
- true|$define|[Yy]*)
- useshrplib='true' ;;
- *) useshrplib='false' ;;
- esac
- ;;
-esac
-
-case "$useshrplib" in
-true)
- case "$libperl" in
- '')
- # Figure out a good name for libperl.so. Since it gets stored in
- # a version-specific architecture-dependent library, the version
- # number isn't really that important, except for making cc/ld happy.
- #
- # A name such as libperl.so.3.1
- majmin="libperl.$so.$patchlevel.$subversion"
- # A name such as libperl.so.301
- majonly=`echo $patchlevel $subversion |
- $awk '{printf "%d%02d", $1, $2}'`
- majonly=libperl.$so.$majonly
- # I'd prefer to keep the os-specific stuff here to a minimum, and
- # rely on figuring it out from the naming of libc.
- case "${osname}${osvers}" in
- next4*)
- dflt=libperl.5.$so
- # XXX How handle the --version stuff for MAB?
- ;;
- linux*) # ld won't link with a bare -lperl otherwise.
- dflt=libperl.$so
- ;;
- cygwin*) # include version
- dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
- ;;
- *) # Try to guess based on whether libc has major.minor.
- case "$libc" in
- *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
- *libc.$so.[0-9]*) dflt=$majonly ;;
- *) dflt=libperl.$so ;;
- esac
- ;;
- esac
- ;;
- *) dflt=$libperl
- ;;
- esac
- cat << EOM
-
-I need to select a good name for the shared libperl. If your system uses
-library names with major and minor numbers, then you might want something
-like $majmin. Alternatively, if your system uses a single version
-number for shared libraries, then you might want to use $majonly.
-Or, your system might be quite happy with a simple libperl.$so.
-
-Since the shared libperl will get installed into a version-specific
-architecture-dependent directory, the version number of the shared perl
-library probably isn't important, so the default should be o.k.
-
-EOM
- rp='What name do you want to give to the shared libperl?'
- . ./myread
- libperl=$ans
- echo "Ok, I'll use $libperl"
- ;;
-*)
- libperl="libperl${_a}"
- ;;
-esac
-
-# Detect old use of shrpdir via undocumented Configure -Dshrpdir
-case "$shrpdir" in
-'') ;;
-*) $cat >&4 <<EOM
-WARNING: Use of the shrpdir variable for the installation location of
-the shared $libperl is not supported. It was never documented and
-will not work in this version. Let me (perlbug@perl.org)
-know of any problems this may cause.
-
-EOM
- case "$shrpdir" in
- "$archlibexp/CORE")
- $cat >&4 <<EOM
-But your current setting of $shrpdir is
-the default anyway, so it's harmless.
-EOM
- ;;
- *)
- $cat >&4 <<EOM
-Further, your current attempted setting of $shrpdir
-conflicts with the value of $archlibexp/CORE
-that installperl will use.
-EOM
- ;;
- esac
- ;;
-esac
-
-# How will the perl executable find the installed shared $libperl?
-# Add $xxx to ccdlflags.
-# If we can't figure out a command-line option, use $shrpenv to
-# set env LD_RUN_PATH. The main perl makefile uses this.
-shrpdir=$archlibexp/CORE
-xxx=''
-tmp_shrpenv=''
-if "$useshrplib"; then
- case "$osname" in
- aix)
- # We'll set it in Makefile.SH...
- ;;
- solaris|netbsd)
- xxx="-R $shrpdir"
- ;;
- freebsd)
- xxx="-Wl,-R$shrpdir"
- ;;
- linux|irix*|dec_osf)
- xxx="-Wl,-rpath,$shrpdir"
- ;;
- next)
- # next doesn't like the default...
- ;;
- beos)
- # beos doesn't like the default, either.
- ;;
- hpux*)
- # hpux doesn't like the default, either.
- tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
- ;;
- *)
- tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
- ;;
- esac
- case "$xxx" in
- '') ;;
- *)
- # Only add $xxx if it isn't already in ccdlflags.
- case " $ccdlflags " in
- *" $xxx "*) ;;
- *) ccdlflags="$ccdlflags $xxx"
- cat <<EOM >&4
-
-Adding $xxx to the flags
-passed to $ld so that the perl executable will find the
-installed shared $libperl.
-
-EOM
- ;;
- esac
- ;;
- esac
-fi
-# Fix ccdlflags in AIX for building external extensions.
-# (For building Perl itself bare -bE:perl.exp is needed,
-# Makefile.SH takes care of this.)
-case "$osname" in
-aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
-esac
-# Respect a hint or command-line value.
-case "$shrpenv" in
-'') shrpenv="$tmp_shrpenv" ;;
-esac
-case "$ldlibpthname" in
-'') ldlibpthname=LD_LIBRARY_PATH ;;
-none) ldlibpthname='' ;;
-esac
-
-: determine where manual pages are on this system
-echo " "
-case "$sysman" in
-'')
- syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
- syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
- syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
- syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
- syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
- sysman=`./loc . /usr/man/man1 $syspath`
- ;;
-esac
-if $test -d "$sysman"; then
- echo "System manual is in $sysman." >&4
-else
- echo "Could not find manual pages in source form." >&4
-fi
-
-: determine where manual pages go
-set man1dir man1dir none
-eval $prefixit
-$cat <<EOM
-
-$spackage has manual pages available in source form.
-EOM
-case "$nroff" in
-nroff)
- echo "However, you don't have nroff, so they're probably useless to you."
- case "$man1dir" in
- '') man1dir="none";;
- esac;;
-esac
-echo "If you don't want the manual sources installed, answer 'none'."
-case "$man1dir" in
-' ') dflt=none
- ;;
-'')
- lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
- lookpath="$lookpath $prefixexp/man/p_man/man1"
- lookpath="$lookpath $prefixexp/man/u_man/man1"
- lookpath="$lookpath $prefixexp/man/man.1"
- case "$sysman" in
- */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
- *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
- esac
- set dflt
- eval $prefixup
- ;;
-*) dflt="$man1dir"
- ;;
-esac
-echo " "
-fn=dn+~
-rp="Where do the main $spackage manual pages (source) go?"
-. ./getfile
-if $test "X$man1direxp" != "X$ansexp"; then
- installman1dir=''
-fi
-man1dir="$ans"
-man1direxp="$ansexp"
-case "$man1dir" in
-'') man1dir=' '
- installman1dir='';;
-esac
-
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
-else
- installman1dir="$man1direxp"
-fi
-
-: What suffix to use on installed man pages
-
-case "$man1dir" in
-' ')
- man1ext='0'
- ;;
-*)
- rp="What suffix should be used for the main $spackage man pages?"
- case "$man1ext" in
- '') case "$man1dir" in
- *1) dflt=1 ;;
- *1p) dflt=1p ;;
- *1pm) dflt=1pm ;;
- *l) dflt=l;;
- *n) dflt=n;;
- *o) dflt=o;;
- *p) dflt=p;;
- *C) dflt=C;;
- *L) dflt=L;;
- *L1) dflt=L1;;
- *) dflt=1;;
- esac
- ;;
- *) dflt="$man1ext";;
- esac
- . ./myread
- man1ext="$ans"
- ;;
-esac
-
-: see if we can have long filenames
-echo " "
-first=123456789abcdef
-$rm -f $first
-if (echo hi >$first) 2>/dev/null; then
- if $test -f 123456789abcde; then
- echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
- val="$undef"
- else
- echo 'You can have filenames longer than 14 characters.'>&4
- val="$define"
- fi
-else
- $cat <<'EOM'
-You can't have filenames longer than 14 chars.
-You can't even think about them!
-EOM
- val="$undef"
-fi
-set d_flexfnam
-eval $setvar
-$rm -rf 123456789abcde*
-
-: determine where library module manual pages go
-set man3dir man3dir none
-eval $prefixit
-$cat <<EOM
-
-$spackage has manual pages for many of the library modules.
-EOM
-
-case "$nroff" in
-nroff)
- $cat <<'EOM'
-However, you don't have nroff, so they're probably useless to you.
-EOM
- case "$man3dir" in
- '') man3dir="none";;
- esac;;
-esac
-
-case "$d_flexfnam" in
-undef)
- $cat <<'EOM'
-However, your system can't handle the long file names like File::Basename.3.
-EOM
- case "$man3dir" in
- '') man3dir="none";;
- esac;;
-esac
-
-echo "If you don't want the manual sources installed, answer 'none'."
-prog=`echo $package | $sed 's/-*[0-9.]*$//'`
-case "$man3dir" in
-'') dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
- if $test -d "$privlib/man/man3"; then
- cat <<EOM >&4
-
-WARNING: Previous versions of perl installed man3 pages into
-$privlib/man/man3. This version will suggest a
-new default of $dflt.
-EOM
- tdflt=$dflt
- dflt='n'
- rp='Do you wish to preserve the old behavior?(y/n)'
- . ./myread
- case "$ans" in
- y*) dflt="$privlib/man/man3" ;;
- *) dflt=$tdflt ;;
- esac
- fi
- ;;
-*) dflt="$man3dir" ;;
-esac
-case "$dflt" in
-' ') dflt=none ;;
-esac
-echo " "
-fn=dn+~
-rp="Where do the $package library man pages (source) go?"
-. ./getfile
-man3dir="$ans"
-man3direxp="$ansexp"
-case "$man3dir" in
-'') man3dir=' '
- installman3dir='';;
-esac
-
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
-else
- installman3dir="$man3direxp"
-fi
-
-: What suffix to use on installed man pages
-case "$man3dir" in
-' ')
- man3ext='0'
- ;;
-*)
- rp="What suffix should be used for the $package library man pages?"
- case "$man3ext" in
- '') case "$man3dir" in
- *3) dflt=3 ;;
- *3p) dflt=3p ;;
- *3pm) dflt=3pm ;;
- *l) dflt=l;;
- *n) dflt=n;;
- *o) dflt=o;;
- *p) dflt=p;;
- *C) dflt=C;;
- *L) dflt=L;;
- *L3) dflt=L3;;
- *) dflt=3;;
- esac
- ;;
- *) dflt="$man3ext";;
- esac
- . ./myread
- man3ext="$ans"
- ;;
-esac
-
-: see if we have to deal with yellow pages, now NIS.
-if $test -d /usr/etc/yp || $test -d /etc/yp; then
- if $test -f /usr/etc/nibindd; then
- echo " "
- echo "I'm fairly confident you're on a NeXT."
- echo " "
- rp='Do you get the hosts file via NetInfo?'
- dflt=y
- case "$hostcat" in
- nidump*) ;;
- '') ;;
- *) dflt=n;;
- esac
- . ./myread
- case "$ans" in
- y*) hostcat='nidump hosts .';;
- *) case "$hostcat" in
- nidump*) hostcat='';;
- esac
- ;;
- esac
- fi
- case "$hostcat" in
- nidump*) ;;
- *)
- case "$hostcat" in
- *ypcat*) dflt=y;;
- '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
- dflt=y
- else
- dflt=n
- fi;;
- *) dflt=n;;
- esac
- echo " "
- rp='Are you getting the hosts file via yellow pages?'
- . ./myread
- case "$ans" in
- y*) hostcat='ypcat hosts';;
- *) hostcat='cat /etc/hosts';;
- esac
- ;;
- esac
-fi
-case "$hostcat" in
-'') test -f /etc/hosts && hostcat='cat /etc/hosts';;
-esac
-case "$groupcat" in
-'') test -f /etc/group && groupcat='cat /etc/group';;
-esac
-case "$passcat" in
-'') test -f /etc/passwd && passcat='cat /etc/passwd';;
-esac
-
-: now get the host name
-echo " "
-echo "Figuring out host name..." >&4
-case "$myhostname" in
-'') cont=true
- echo 'Maybe "hostname" will work...'
- if tans=`sh -c hostname 2>&1` ; then
- myhostname=$tans
- phostname=hostname
- cont=''
- fi
- ;;
-*) cont='';;
-esac
-if $test "$cont"; then
- if ./xenix; then
- echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
- if tans=`cat /etc/systemid 2>&1` ; then
- myhostname=$tans
- phostname='cat /etc/systemid'
- echo "Whadyaknow. Xenix always was a bit strange..."
- cont=''
- fi
- elif $test -r /etc/systemid; then
- echo "(What is a non-Xenix system doing with /etc/systemid?)"
- fi
-fi
-if $test "$cont"; then
- echo 'No, maybe "uuname -l" will work...'
- if tans=`sh -c 'uuname -l' 2>&1` ; then
- myhostname=$tans
- phostname='uuname -l'
- else
- echo 'Strange. Maybe "uname -n" will work...'
- if tans=`sh -c 'uname -n' 2>&1` ; then
- myhostname=$tans
- phostname='uname -n'
- else
- echo 'Oh well, maybe I can mine it out of whoami.h...'
- if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
- myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
- phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
- else
- case "$myhostname" in
- '') echo "Does this machine have an identity crisis or something?"
- phostname='';;
- *)
- echo "Well, you said $myhostname before..."
- phostname='echo $myhostname';;
- esac
- fi
- fi
- fi
-fi
-: you do not want to know about this
-set $myhostname
-myhostname=$1
-
-: verify guess
-if $test "$myhostname" ; then
- dflt=y
- rp='Your host name appears to be "'$myhostname'".'" Right?"
- . ./myread
- case "$ans" in
- y*) ;;
- *) myhostname='';;
- esac
-fi
-
-: bad guess or no guess
-while $test "X$myhostname" = X ; do
- dflt=''
- rp="Please type the (one word) name of your host:"
- . ./myread
- myhostname="$ans"
-done
-
-: translate upper to lower if necessary
-case "$myhostname" in
-*[A-Z]*)
- echo "(Normalizing case in your host name)"
- myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
- ;;
-esac
-
-case "$myhostname" in
-*.*)
- dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
- myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
- echo "(Trimming domain name from host name--host name is now $myhostname)"
- ;;
-*) case "$mydomain" in
- '')
- {
- test "X$hostcat" = "Xypcat hosts" &&
- ypmatch "$myhostname" hosts 2>/dev/null |\
- $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
- $test -s hosts
- } || {
- test "X$hostcat" != "X" &&
- $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
- /[ ]$myhostname[ . ]/p" > hosts
- }
- tmp_re="[ . ]"
- if $test -f hosts; then
- $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
- END { print sum }" hosts` = x1 || tmp_re="[ ]"
- dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
- hosts | $sort | $uniq | \
- $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
- case `$echo X$dflt` in
- X*\ *) echo "(Several hosts in the database matched hostname)"
- dflt=.
- ;;
- X.) echo "(You do not have fully-qualified names in the hosts database)"
- ;;
- esac
- else
- echo "(I cannot locate a hosts database anywhere)"
- dflt=.
- fi
- case "$dflt" in
- .)
- tans=`./loc resolv.conf X /etc /usr/etc`
- if $test -f "$tans"; then
- echo "(Attempting domain name extraction from $tans)"
- dflt=.`$sed -n -e 's/ / /g' \
- -e 's/^search *\([^ ]*\).*/\1/p' $tans \
- | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
- case "$dflt" in
- .) dflt=.`$sed -n -e 's/ / /g' \
- -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
- | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
- ;;
- esac
- fi
- ;;
- esac
- case "$dflt" in
- .) echo "(No help from resolv.conf either -- attempting clever guess)"
- dflt=.`sh -c domainname 2>/dev/null`
- case "$dflt" in
- '') dflt='.';;
- .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
- esac
- ;;
- esac
- case "$dflt$osname" in
- .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
- dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
- ;;
- esac
- case "$dflt" in
- .) echo "(Lost all hope -- silly guess then)"
- dflt='.uucp'
- ;;
- esac
- $rm -f hosts
- ;;
- *) dflt="$mydomain";;
- esac;;
-esac
-echo " "
-rp="What is your domain name?"
-. ./myread
-tans="$ans"
-case "$ans" in
-'') ;;
-.*) ;;
-*) tans=".$tans";;
-esac
-mydomain="$tans"
-
-: translate upper to lower if necessary
-case "$mydomain" in
-*[A-Z]*)
- echo "(Normalizing case in your domain name)"
- mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
- ;;
-esac
-
-: a little sanity check here
-case "$phostname" in
-'') ;;
-*)
- case `$phostname | ./tr '[A-Z]' '[a-z]'` in
- $myhostname$mydomain|$myhostname) ;;
- *)
- case "$phostname" in
- sed*)
- echo "(That doesn't agree with your whoami.h file, by the way.)"
- ;;
- *)
- echo "(That doesn't agree with your $phostname command, by the way.)"
- ;;
- esac
- ;;
- esac
- ;;
-esac
-
-$cat <<EOM
-
-I need to get your e-mail address in Internet format if possible, i.e.
-something like user@host.domain. Please answer accurately since I have
-no easy means to double check it. The default value provided below
-is most probably close to reality but may not be valid from outside
-your organization...
-
-EOM
-cont=x
-while test "$cont"; do
- case "$cf_email" in
- '') dflt="$cf_by@$myhostname$mydomain";;
- *) dflt="$cf_email";;
- esac
- rp='What is your e-mail address?'
- . ./myread
- cf_email="$ans"
- case "$cf_email" in
- *@*.*) cont='' ;;
- *)
- rp='Address does not look like an Internet one. Use it anyway?'
- case "$fastread" in
- yes) dflt=y ;;
- *) dflt=n ;;
- esac
- . ./myread
- case "$ans" in
- y*) cont='' ;;
- *) echo " " ;;
- esac
- ;;
- esac
-done
-
-$cat <<EOM
-
-If you or somebody else will be maintaining perl at your site, please
-fill in the correct e-mail address here so that they may be contacted
-if necessary. Currently, the "perlbug" program included with perl
-will send mail to this address in addition to perlbug@perl.org. You may
-enter "none" for no administrator.
-
-EOM
-case "$perladmin" in
-'') dflt="$cf_email";;
-*) dflt="$perladmin";;
-esac
-rp='Perl administrator e-mail address'
-. ./myread
-perladmin="$ans"
-
-: determine whether to only install version-specific parts.
-echo " "
-$cat <<EOM
-Do you want to install only the version-specific parts of the perl
-distribution? Usually you do *not* want to do this.
-EOM
-case "$versiononly" in
-"$define"|[Yy]*|true) dflt='y' ;;
-*) dflt='n';
-esac
-rp="Do you want to install only the version-specific parts of perl?"
-. ./myread
-case "$ans" in
-[yY]*) val="$define";;
-*) val="$undef" ;;
-esac
-set versiononly
-eval $setvar
-
-: figure out how to guarantee perl startup
-case "$startperl" in
-'')
- case "$sharpbang" in
- *!)
- $cat <<EOH
-
-I can use the #! construct to start perl on your system. This will
-make startup of perl scripts faster, but may cause problems if you
-want to share those scripts and perl is not in a standard place
-($binexp/perl) on all your platforms. The alternative is to force
-a shell by starting the script with a single ':' character.
-
-EOH
- case "$versiononly" in
- "$define") dflt="$binexp/perl$version";;
- *) dflt="$binexp/perl";;
- esac
- rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
- . ./myread
- case "$ans" in
- none) startperl=": # use perl";;
- *) startperl="#!$ans"
- if $test 30 -lt `echo "$ans" | wc -c`; then
- $cat >&4 <<EOM
-
-WARNING: Some systems limit the #! command to 32 characters.
-If you experience difficulty running Perl scripts with #!, try
-installing Perl in a directory with a shorter pathname.
-
-EOM
- fi ;;
- esac
- ;;
- *) startperl=": # use perl"
- ;;
- esac
- ;;
-esac
-echo "I'll use $startperl to start perl scripts."
-
-: figure best path for perl in scripts
-case "$perlpath" in
-'')
- perlpath="$binexp/perl"
- case "$startperl" in
- *!*) ;;
- *)
- $cat <<EOH
-
-I will use the "eval 'exec'" idiom to start Perl on your system.
-I can use the full path of your Perl binary for this purpose, but
-doing so may cause problems if you want to share those scripts and
-Perl is not always in a standard place ($binexp/perl).
-
-EOH
- dflt="$binexp/perl"
- rp="What path shall I use in \"eval 'exec'\"?"
- . ./myread
- perlpath="$ans"
- ;;
- esac
- ;;
-esac
-case "$startperl" in
-*!*) ;;
-*) echo "I'll use $perlpath in \"eval 'exec'\"" ;;
-esac
-
-: determine where public executable scripts go
-set scriptdir scriptdir
-eval $prefixit
-case "$scriptdir" in
-'')
- dflt="$bin"
- : guess some guesses
- $test -d /usr/share/scripts && dflt=/usr/share/scripts
- $test -d /usr/share/bin && dflt=/usr/share/bin
- $test -d /usr/local/script && dflt=/usr/local/script
- $test -d /usr/local/scripts && dflt=/usr/local/scripts
- $test -d $prefixexp/script && dflt=$prefixexp/script
- set dflt
- eval $prefixup
- ;;
-*) dflt="$scriptdir"
- ;;
-esac
-$cat <<EOM
-
-Some installations have a separate directory just for executable scripts so
-that they can mount it across multiple architectures but keep the scripts in
-one spot. You might, for example, have a subdirectory of /usr/share for this.
-Or you might just lump your scripts in with all your other executables.
-
-EOM
-fn=d~
-rp='Where do you keep publicly executable scripts?'
-. ./getfile
-if $test "X$ansexp" != "X$scriptdirexp"; then
- installscript=''
-fi
-scriptdir="$ans"
-scriptdirexp="$ansexp"
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
-else
- installscript="$scriptdirexp"
-fi
-
-: determine where add-on public executables go
-case "$sitebin" in
-'') dflt=$siteprefix/bin ;;
-*) dflt=$sitebin ;;
-esac
-fn=d~
-rp='Pathname where the add-on public executables should be installed?'
-. ./getfile
-sitebin="$ans"
-sitebinexp="$ansexp"
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
-else
- installsitebin="$sitebinexp"
-fi
-
-case "$useperlio" in
-$define|true|[yY]*) dflt='y';;
-*) dflt='n';;
-esac
-cat <<EOM
-
-Previous version of $package used the standard IO mechanisms as defined
-in <stdio.h>. Versions 5.003_02 and later of perl allow alternate IO
-mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
-the default. This abstraction layer can use AT&T's sfio (if you already
-have sfio installed) or regular stdio. Using PerlIO with sfio may cause
-problems with some extension modules. Using PerlIO with stdio is safe,
-but it is slower than plain stdio and therefore is not the default.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
-rp='Use the experimental PerlIO abstraction layer?'
-. ./myread
-case "$ans" in
-y|Y)
- val="$define"
- ;;
-*)
- echo "Ok, doing things the stdio way"
- val="$undef"
- ;;
-esac
-set useperlio
-eval $setvar
-
-case "$vendorprefix" in
-'') d_vendorbin="$undef"
- vendorbin=''
- vendorbinexp=''
- ;;
-*) d_vendorbin="$define"
- : determine where vendor-supplied executables go.
- case "$vendorbin" in
- '') dflt=$vendorprefix/bin ;;
- *) dflt="$vendorbin" ;;
- esac
- fn=d~+
- rp='Pathname for the vendor-supplied executables directory?'
- . ./getfile
- vendorbin="$ans"
- vendorbinexp="$ansexp"
- ;;
-esac
-: Change installation prefix, if necessary.
-if $test X"$prefix" != X"$installprefix"; then
- installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
-else
- installvendorbin="$vendorbinexp"
-fi
-
-: see if qgcvt exists
-set qgcvt d_qgcvt
-eval $inlibc
-
-echo " "
-
-if $test X"$d_longdbl" = X"$define"; then
-
-echo "Checking how to print long doubles..." >&4
-
-if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- double d = 123.456;
- printf("%.3f\n", d);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 123.456)
- sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
- sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
- echo "We will use %f."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRIfldbl" = X; then
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- long double d = 123.456;
- printf("%.3llf\n", d);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 123.456)
- sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
- sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
- echo "We will use %llf."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRIfldbl" = X; then
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- long double d = 123.456;
- printf("%.3Lf\n", d);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 123.456)
- sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
- sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
- echo "We will use %Lf."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRIfldbl" = X; then
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- long double d = 123.456;
- printf("%.3lf\n", d);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 123.456)
- sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
- sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
- echo "We will use %lf."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRIfldbl" = X; then
- echo "Cannot figure out how to print long doubles." >&4
-else
- sSCNfldbl=$sPRIfldbl # expect consistency
-fi
-
-$rm -f try try.*
-
-fi # d_longdbl
-
-case "$sPRIfldbl" in
-'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef";
- d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef";
- d_SCNfldbl="$undef";
- ;;
-*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define";
- d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define";
- d_SCNfldbl="$define";
- ;;
-esac
-
-: Check how to convert floats to strings.
-echo " "
-echo "Checking for an efficient way to convert floats to strings."
-echo " " > try.c
-case "$uselongdouble" in
-"$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
-esac
-case "$d_longdbl" in
-"$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
-esac
-case "$d_PRIgldbl" in
-"$define") echo "#define HAS_PRIgldbl" >>try.c ;;
-esac
-$cat >>try.c <<EOP
-#ifdef TRY_gconvert
-#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
-char *myname = "gconvert";
-#endif
-#ifdef TRY_gcvt
-#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
-char *myname = "gcvt";
-#endif
-#ifdef TRY_qgcvt
-#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
-char *myname = "qgcvt";
-#define DOUBLETYPE long double
-#endif
-#ifdef TRY_sprintf
-#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
-#define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
-#else
-#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
-#endif
-char *myname = "sprintf";
-#endif
-
-#ifndef DOUBLETYPE
-#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
-#define DOUBLETYPE long double
-#else
-#define DOUBLETYPE double
-#endif
-#endif
-
-#include <stdio.h>
-
-#define I_STDLIB $i_stdlib
-#ifdef I_STDLIB
-#include <stdlib.h>
-#endif
-
-int
-checkit(expect, got)
-char *expect;
-char *got;
-{
- if (strcmp(expect, got)) {
- printf("%s oddity: Expected %s, got %s\n",
- myname, expect, got);
- exit(1);
- }
-}
-
-int main()
-{
- char buf[64];
- buf[63] = '\0';
-
- /* This must be 1st test on (which?) platform */
- /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
- Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
- checkit("0.1", buf);
-
- Gconvert((DOUBLETYPE)1.0, 8, 0, buf);
- checkit("1", buf);
-
- Gconvert((DOUBLETYPE)1.1, 8, 0, buf);
- checkit("1.1", buf);
-
- Gconvert((DOUBLETYPE)1.01, 8, 0, buf);
- checkit("1.01", buf);
-
- Gconvert((DOUBLETYPE)1.001, 8, 0, buf);
- checkit("1.001", buf);
-
- Gconvert((DOUBLETYPE)1.0001, 8, 0, buf);
- checkit("1.0001", buf);
-
- Gconvert((DOUBLETYPE)1.00001, 8, 0, buf);
- checkit("1.00001", buf);
-
- Gconvert((DOUBLETYPE)1.000001, 8, 0, buf);
- checkit("1.000001", buf);
-
- Gconvert((DOUBLETYPE)0.0, 8, 0, buf);
- checkit("0", buf);
-
- Gconvert((DOUBLETYPE)-1.0, 8, 0, buf);
- checkit("-1", buf);
-
- /* Some Linux gcvt's give 1.e+5 here. */
- Gconvert((DOUBLETYPE)100000.0, 8, 0, buf);
- checkit("100000", buf);
-
- /* Some Linux gcvt's give -1.e+5 here. */
- Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf);
- checkit("-100000", buf);
-
- Gconvert((DOUBLETYPE)123.456, 8, 0, buf);
- checkit("123.456", buf);
-
- exit(0);
-}
-EOP
-case "$d_Gconvert" in
-gconvert*) xxx_list='gconvert gcvt sprintf' ;;
-gcvt*) xxx_list='gcvt gconvert sprintf' ;;
-sprintf*) xxx_list='sprintf gconvert gcvt' ;;
-*) xxx_list='gconvert gcvt sprintf' ;;
-esac
-
-case "$d_longdbl$uselongdouble$d_PRIgldbl" in
-"$define$define$define")
- # for long doubles prefer first qgcvt, then sprintf
- xxx_list="`echo $xxx_list|sed s/sprintf//`"
- xxx_list="sprintf $xxx_list"
- case "$d_qgcvt" in
- "$define") xxx_list="qgcvt $xxx_list" ;;
- esac
- ;;
-esac
-
-for xxx_convert in $xxx_list; do
- echo "Trying $xxx_convert..."
- $rm -f try try$_o
- set try -DTRY_$xxx_convert
- if eval $compile; then
- echo "$xxx_convert() found." >&4
- if ./try; then
- echo "I'll use $xxx_convert to convert floats into a string." >&4
- break;
- else
- echo "...But $xxx_convert didn't work as I expected."
- fi
- else
- echo "$xxx_convert NOT found." >&4
- fi
-done
-
-case "$xxx_convert" in
-gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
-gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
-qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
-*) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
- "$define$define$define")
- d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
- *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
- esac
- ;;
-esac
-
-: see if _fwalk exists
-set fwalk d__fwalk
-eval $inlibc
-
-: Initialize h_fcntl
-h_fcntl=false
-
-: Initialize h_sysfile
-h_sysfile=false
-
-: access call always available on UNIX
-set access d_access
-eval $inlibc
-
-: locate the flags for 'access()'
-case "$d_access" in
-"$define")
- echo " "
- $cat >access.c <<'EOCP'
-#include <sys/types.h>
-#ifdef I_FCNTL
-#include <fcntl.h>
-#endif
-#ifdef I_SYS_FILE
-#include <sys/file.h>
-#endif
-#ifdef I_UNISTD
-#include <unistd.h>
-#endif
-int main() {
- exit(R_OK);
-}
-EOCP
- : check sys/file.h first, no particular reason here
- if $test `./findhdr sys/file.h` && \
- $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
- h_sysfile=true;
- echo "<sys/file.h> defines the *_OK access constants." >&4
- elif $test `./findhdr fcntl.h` && \
- $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
- h_fcntl=true;
- echo "<fcntl.h> defines the *_OK access constants." >&4
- elif $test `./findhdr unistd.h` && \
- $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
- echo "<unistd.h> defines the *_OK access constants." >&4
- else
- echo "I can't find the four *_OK access constants--I'll use mine." >&4
- fi
- ;;
-esac
-$rm -f access*
-
-: see if accessx exists
-set accessx d_accessx
-eval $inlibc
-
-: see if alarm exists
-set alarm d_alarm
-eval $inlibc
-
-: see if atolf exists
-set atolf d_atolf
-eval $inlibc
-
-: see if atoll exists
-set atoll d_atoll
-eval $inlibc
-
-: Look for GNU-cc style attribute checking
-echo " "
-echo "Checking whether your compiler can handle __attribute__ ..." >&4
-$cat >attrib.c <<'EOCP'
-#include <stdio.h>
-void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
-EOCP
-if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
- if $contains 'warning' attrib.out >/dev/null 2>&1; then
- echo "Your C compiler doesn't fully support __attribute__."
- val="$undef"
- else
- echo "Your C compiler supports __attribute__."
- val="$define"
- fi
-else
- echo "Your C compiler doesn't seem to understand __attribute__ at all."
- val="$undef"
-fi
-set d_attribut
-eval $setvar
-$rm -f attrib*
-
-: see if bcmp exists
-set bcmp d_bcmp
-eval $inlibc
-
-: see if bcopy exists
-set bcopy d_bcopy
-eval $inlibc
-
-: see if this is a unistd.h system
-set unistd.h i_unistd
-eval $inhdr
-
-: see if getpgrp exists
-set getpgrp d_getpgrp
-eval $inlibc
-
-case "$d_getpgrp" in
-"$define")
- echo " "
- echo "Checking to see which flavor of getpgrp is in use..."
- $cat >set.c <<EOP
-#$i_unistd I_UNISTD
-#include <sys/types.h>
-#ifdef I_UNISTD
-# include <unistd.h>
-#endif
-int main()
-{
- if (getuid() == 0) {
- printf("(I see you are running Configure as super-user...)\n");
- setuid(1);
- }
-#ifdef TRY_BSD_PGRP
- if (getpgrp(1) == 0)
- exit(0);
-#else
- if (getpgrp() > 0)
- exit(0);
-#endif
- exit(1);
-}
-EOP
- if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
- echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
- val="$define"
- elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
- echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
- val="$undef"
- else
- echo "I can't seem to compile and run the test program."
- if ./usg; then
- xxx="a USG one, i.e. you use getpgrp()."
- else
- # SVR4 systems can appear rather BSD-ish.
- case "$i_unistd" in
- $undef)
- xxx="a BSD one, i.e. you use getpgrp(pid)."
- val="$define"
- ;;
- $define)
- xxx="probably a USG one, i.e. you use getpgrp()."
- val="$undef"
- ;;
- esac
- fi
- echo "Assuming your getpgrp is $xxx" >&4
- fi
- ;;
-*) val="$undef";;
-esac
-set d_bsdgetpgrp
-eval $setvar
-$rm -f set set.c
-
-: see if setpgrp exists
-set setpgrp d_setpgrp
-eval $inlibc
-
-case "$d_setpgrp" in
-"$define")
- echo " "
- echo "Checking to see which flavor of setpgrp is in use..."
- $cat >set.c <<EOP
-#$i_unistd I_UNISTD
-#include <sys/types.h>
-#ifdef I_UNISTD
-# include <unistd.h>
-#endif
-int main()
-{
- if (getuid() == 0) {
- printf("(I see you are running Configure as super-user...)\n");
- setuid(1);
- }
-#ifdef TRY_BSD_PGRP
- if (-1 == setpgrp(1, 1))
- exit(0);
-#else
- if (setpgrp() != -1)
- exit(0);
-#endif
- exit(1);
-}
-EOP
- if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
- echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
- val="$define"
- elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
- echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
- val="$undef"
- else
- echo "(I can't seem to compile and run the test program.)"
- if ./usg; then
- xxx="a USG one, i.e. you use setpgrp()."
- else
- # SVR4 systems can appear rather BSD-ish.
- case "$i_unistd" in
- $undef)
- xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
- val="$define"
- ;;
- $define)
- xxx="probably a USG one, i.e. you use setpgrp()."
- val="$undef"
- ;;
- esac
- fi
- echo "Assuming your setpgrp is $xxx" >&4
- fi
- ;;
-*) val="$undef";;
-esac
-set d_bsdsetpgrp
-eval $setvar
-$rm -f set set.c
-: see if bzero exists
-set bzero d_bzero
-eval $inlibc
-
-: see if signal is declared as pointer to function returning int or void
-echo " "
-xxx=`./findhdr signal.h`
-$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
-if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
- echo "You have int (*signal())() instead of void." >&4
- val="$undef"
-elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
- echo "You have void (*signal())()." >&4
- val="$define"
-elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
- echo "You have int (*signal())() instead of void." >&4
- val="$undef"
-elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
- echo "You have void (*signal())()." >&4
- val="$define"
-else
- case "$d_voidsig" in
- '')
- echo "I can't determine whether signal handler returns void or int..." >&4
- dflt=void
- rp="What type does your signal handler return?"
- . ./myread
- case "$ans" in
- v*) val="$define";;
- *) val="$undef";;
- esac;;
- "$define")
- echo "As you already told me, signal handler returns void." >&4
- val="$define"
- ;;
- *) echo "As you already told me, signal handler returns int." >&4
- val="$undef"
- ;;
- esac
-fi
-set d_voidsig
-eval $setvar
-case "$d_voidsig" in
-"$define") signal_t="void";;
-*) signal_t="int";;
-esac
-$rm -f $$.tmp
-
-: check for ability to cast large floats to 32-bit ints.
-echo " "
-echo 'Checking whether your C compiler can cast large floats to int32.' >&4
-if $test "$intsize" -ge 4; then
- xxx=int
-else
- xxx=long
-fi
-$cat >try.c <<EOCP
-#include <stdio.h>
-#include <sys/types.h>
-#include <signal.h>
-$signal_t blech(s) int s; { exit(3); }
-int main()
-{
- $xxx i32;
- double f, g;
- int result = 0;
- char str[16];
- signal(SIGFPE, blech);
-
- /* Don't let compiler optimize the test away. Store the number
- in a writable string for gcc to pass to sscanf under HP/UX.
- */
- sprintf(str, "2147483647");
- sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
- g = 10 * f;
- i32 = ($xxx) g;
-
- /* x86 processors will probably give 0x8000 0000, which is a
- sign change. We don't want that. We want to mimic SPARC
- behavior here, which is to preserve the sign and give
- back 0x7fff ffff.
- */
- if (i32 != ($xxx) f)
- result |= 1;
- exit(result);
-}
-EOCP
-set try
-if eval $compile_ok; then
- ./try
- yyy=$?
-else
- echo "(I can't seem to compile the test program--assuming it can't)"
- yyy=1
-fi
-case "$yyy" in
-0) val="$define"
- echo "Yup, it can."
- ;;
-*) val="$undef"
- echo "Nope, it can't."
- ;;
-esac
-set d_casti32
-eval $setvar
-$rm -f try try.*
-
-: check for ability to cast negative floats to unsigned
-echo " "
-echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
-$cat >try.c <<EOCP
-#include <stdio.h>
-#include <sys/types.h>
-#include <signal.h>
-$signal_t blech(s) int s; { exit(7); }
-$signal_t blech_in_list(s) int s; { exit(4); }
-unsigned long dummy_long(p) unsigned long p; { return p; }
-unsigned int dummy_int(p) unsigned int p; { return p; }
-unsigned short dummy_short(p) unsigned short p; { return p; }
-int main()
-{
- double f;
- unsigned long along;
- unsigned int aint;
- unsigned short ashort;
- int result = 0;
- char str[16];
-
- /* Frustrate gcc-2.7.2's optimizer which failed this test with
- a direct f = -123. assignment. gcc-2.8.0 reportedly
- optimized the whole file away
- */
- /* Store the number in a writable string for gcc to pass to
- sscanf under HP/UX.
- */
- sprintf(str, "-123");
- sscanf(str, "%lf", &f); /* f = -123.; */
-
- signal(SIGFPE, blech);
- along = (unsigned long)f;
- aint = (unsigned int)f;
- ashort = (unsigned short)f;
- if (along != (unsigned long)-123)
- result |= 1;
- if (aint != (unsigned int)-123)
- result |= 1;
- if (ashort != (unsigned short)-123)
- result |= 1;
- sprintf(str, "1073741824.");
- sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
- f = f + f;
- along = 0;
- along = (unsigned long)f;
- if (along != 0x80000000)
- result |= 2;
- f -= 1.;
- along = 0;
- along = (unsigned long)f;
- if (along != 0x7fffffff)
- result |= 1;
- f += 2.;
- along = 0;
- along = (unsigned long)f;
- if (along != 0x80000001)
- result |= 2;
- if (result)
- exit(result);
- signal(SIGFPE, blech_in_list);
- sprintf(str, "123.");
- sscanf(str, "%lf", &f); /* f = 123.; */
- along = dummy_long((unsigned long)f);
- aint = dummy_int((unsigned int)f);
- ashort = dummy_short((unsigned short)f);
- if (along != (unsigned long)123)
- result |= 4;
- if (aint != (unsigned int)123)
- result |= 4;
- if (ashort != (unsigned short)123)
- result |= 4;
- exit(result);
-
-}
-EOCP
-set try
-if eval $compile_ok; then
- ./try
- castflags=$?
-else
- echo "(I can't seem to compile the test program--assuming it can't)"
- castflags=7
-fi
-case "$castflags" in
-0) val="$define"
- echo "Yup, it can."
- ;;
-*) val="$undef"
- echo "Nope, it can't."
- ;;
-esac
-set d_castneg
-eval $setvar
-$rm -f try.*
-
-: see if vprintf exists
-echo " "
-if set vprintf val -f d_vprintf; eval $csym; $val; then
- echo 'vprintf() found.' >&4
- val="$define"
- $cat >vprintf.c <<'EOF'
-#include <varargs.h>
-
-int main() { xxx("foo"); }
-
-xxx(va_alist)
-va_dcl
-{
- va_list args;
- char buf[10];
-
- va_start(args);
- exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
-}
-EOF
- set vprintf
- if eval $compile && ./vprintf; then
- echo "Your vsprintf() returns (int)." >&4
- val2="$undef"
- else
- echo "Your vsprintf() returns (char*)." >&4
- val2="$define"
- fi
-else
- echo 'vprintf() NOT found.' >&4
- val="$undef"
- val2="$undef"
-fi
-set d_vprintf
-eval $setvar
-val=$val2
-set d_charvspr
-eval $setvar
-
-: see if chown exists
-set chown d_chown
-eval $inlibc
-
-: see if chroot exists
-set chroot d_chroot
-eval $inlibc
-
-: see if chsize exists
-set chsize d_chsize
-eval $inlibc
-
-: check for const keyword
-echo " "
-echo 'Checking to see if your C compiler knows about "const"...' >&4
-$cat >const.c <<'EOCP'
-typedef struct spug { int drokk; } spug;
-int main()
-{
- const char *foo;
- const spug y;
-}
-EOCP
-if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
- val="$define"
- echo "Yup, it does."
-else
- val="$undef"
- echo "Nope, it doesn't."
-fi
-set d_const
-eval $setvar
-
-: see if crypt exists
-echo " "
-if set crypt val -f d_crypt; eval $csym; $val; then
- echo 'crypt() found.' >&4
- val="$define"
- cryptlib=''
-else
- cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
- if $test -z "$cryptlib"; then
- cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
- else
- cryptlib=-lcrypt
- fi
- if $test -z "$cryptlib"; then
- cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
- else
- cryptlib=-lcrypt
- fi
- if $test -z "$cryptlib"; then
- cryptlib=`./loc libcrypt$_a "" $libpth`
- else
- cryptlib=-lcrypt
- fi
- if $test -z "$cryptlib"; then
- echo 'crypt() NOT found.' >&4
- val="$undef"
- else
- val="$define"
- fi
-fi
-set d_crypt
-eval $setvar
-
-: get csh whereabouts
-case "$csh" in
-'csh') val="$undef" ;;
-*) val="$define" ;;
-esac
-set d_csh
-eval $setvar
-: Respect a hint or command line value for full_csh.
-case "$full_csh" in
-'') full_csh=$csh ;;
-esac
-
-: see if cuserid exists
-set cuserid d_cuserid
-eval $inlibc
-
-: see if this is a limits.h system
-set limits.h i_limits
-eval $inhdr
-
-: see if this is a float.h system
-set float.h i_float
-eval $inhdr
-
-: See if number of significant digits in a double precision number is known
-echo " "
-$cat >dbl_dig.c <<EOM
-#$i_limits I_LIMITS
-#$i_float I_FLOAT
-#ifdef I_LIMITS
-#include <limits.h>
-#endif
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifdef DBL_DIG
-printf("Contains DBL_DIG");
-#endif
-EOM
-$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
-if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
- echo "DBL_DIG found." >&4
- val="$define"
-else
- echo "DBL_DIG NOT found." >&4
- val="$undef"
-fi
-$rm -f dbl_dig.?
-set d_dbl_dig
-eval $setvar
-
-: see if difftime exists
-set difftime d_difftime
-eval $inlibc
-
-: see if this is a dirent system
-echo " "
-if xinc=`./findhdr dirent.h`; $test "$xinc"; then
- val="$define"
- echo "<dirent.h> found." >&4
-else
- val="$undef"
- if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
- echo "<sys/dir.h> found." >&4
- echo " "
- else
- xinc=`./findhdr sys/ndir.h`
- fi
- echo "<dirent.h> NOT found." >&4
-fi
-set i_dirent
-eval $setvar
-
-: Look for type of directory structure.
-echo " "
-$cppstdin $cppflags $cppminus < "$xinc" > try.c
-
-case "$direntrytype" in
-''|' ')
- case "$i_dirent" in
- $define) guess1='struct dirent' ;;
- *) guess1='struct direct' ;;
- esac
- ;;
-*) guess1="$direntrytype"
- ;;
-esac
-
-case "$guess1" in
-'struct dirent') guess2='struct direct' ;;
-*) guess2='struct dirent' ;;
-esac
-
-if $contains "$guess1" try.c >/dev/null 2>&1; then
- direntrytype="$guess1"
- echo "Your directory entries are $direntrytype." >&4
-elif $contains "$guess2" try.c >/dev/null 2>&1; then
- direntrytype="$guess2"
- echo "Your directory entries seem to be $direntrytype." >&4
-else
- echo "I don't recognize your system's directory entries." >&4
- rp="What type is used for directory entries on this system?"
- dflt="$guess1"
- . ./myread
- direntrytype="$ans"
-fi
-$rm -f try.c
-
-
-: see if the directory entry stores field length
-echo " "
-$cppstdin $cppflags $cppminus < "$xinc" > try.c
-if $contains 'd_namlen' try.c >/dev/null 2>&1; then
- echo "Good, your directory entry keeps length information in d_namlen." >&4
- val="$define"
-else
- echo "Your directory entry does not know about the d_namlen field." >&4
- val="$undef"
-fi
-set d_dirnamlen
-eval $setvar
-$rm -f try.c
-
-: see if dlerror exists
-xxx_runnm="$runnm"
-runnm=false
-set dlerror d_dlerror
-eval $inlibc
-runnm="$xxx_runnm"
-
-: see if dlfcn is available
-set dlfcn.h i_dlfcn
-eval $inhdr
-
-case "$usedl" in
-$define|y|true)
- $cat << EOM
-
-On a few systems, the dynamically loaded modules that perl generates and uses
-will need a different extension than shared libs. The default will probably
-be appropriate.
-
-EOM
- case "$dlext" in
- '') dflt="$so" ;;
- *) dflt="$dlext" ;;
- esac
- rp='What is the extension of dynamically loaded modules'
- . ./myread
- dlext="$ans"
- ;;
-*)
- dlext="none"
- ;;
-esac
-
-: Check if dlsym need a leading underscore
-echo " "
-val="$undef"
-
-case "$dlsrc" in
-dl_dlopen.xs)
- echo "Checking whether your dlsym() needs a leading underscore ..." >&4
- $cat >dyna.c <<'EOM'
-fred () { }
-EOM
-
-$cat >fred.c<<EOM
-
-#include <stdio.h>
-#$i_dlfcn I_DLFCN
-#ifdef I_DLFCN
-#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
-#else
-#include <sys/types.h>
-#include <nlist.h>
-#include <link.h>
-#endif
-
-extern int fred() ;
-
-int main()
-{
- void * handle ;
- void * symbol ;
-#ifndef RTLD_LAZY
- int mode = 1 ;
-#else
- int mode = RTLD_LAZY ;
-#endif
- handle = dlopen("./dyna.$dlext", mode) ;
- if (handle == NULL) {
- printf ("1\n") ;
- fflush (stdout) ;
- exit(0);
- }
- symbol = dlsym(handle, "fred") ;
- if (symbol == NULL) {
- /* try putting a leading underscore */
- symbol = dlsym(handle, "_fred") ;
- if (symbol == NULL) {
- printf ("2\n") ;
- fflush (stdout) ;
- exit(0);
- }
- printf ("3\n") ;
- }
- else
- printf ("4\n") ;
- fflush (stdout) ;
- exit(0);
-}
-EOM
- : Call the object file tmp-dyna.o in case dlext=o.
- if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 &&
- mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 &&
- $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 &&
- $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
- xxx=`./fred`
- case $xxx in
- 1) echo "Test program failed using dlopen." >&4
- echo "Perhaps you should not use dynamic loading." >&4;;
- 2) echo "Test program failed using dlsym." >&4
- echo "Perhaps you should not use dynamic loading." >&4;;
- 3) echo "dlsym needs a leading underscore" >&4
- val="$define" ;;
- 4) echo "dlsym doesn't need a leading underscore." >&4;;
- esac
- else
- echo "I can't compile and run the test program." >&4
- echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
- fi
- ;;
-esac
-
-$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
-
-set d_dlsymun
-eval $setvar
-
-hasproto='varname=$1; func=$2; shift; shift;
-while $test $# -ge 2; do
- case "$1" in
- $define) echo "#include <$2>";;
- esac ;
- shift 2;
-done > try.c;
-$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
-if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
- echo "$func() prototype found.";
- val="$define";
-else
- echo "$func() prototype NOT found.";
- val="$undef";
-fi;
-set $varname;
-eval $setvar;
-$rm -f try.c tryout.c'
-
-: see if prototype for drand48 is available
-echo " "
-set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
-eval $hasproto
-
-: see if dup2 exists
-set dup2 d_dup2
-eval $inlibc
-
-: see if eaccess exists
-set eaccess d_eaccess
-eval $inlibc
-
-: see if endgrent exists
-set endgrent d_endgrent
-eval $inlibc
-
-: see if endhostent exists
-set endhostent d_endhent
-eval $inlibc
-
-: see if endnetent exists
-set endnetent d_endnent
-eval $inlibc
-
-: see if endprotoent exists
-set endprotoent d_endpent
-eval $inlibc
-
-: see if endpwent exists
-set endpwent d_endpwent
-eval $inlibc
-
-: see if endservent exists
-set endservent d_endsent
-eval $inlibc
-
-: Locate the flags for 'open()'
-echo " "
-$cat >open3.c <<'EOCP'
-#include <sys/types.h>
-#ifdef I_FCNTL
-#include <fcntl.h>
-#endif
-#ifdef I_SYS_FILE
-#include <sys/file.h>
-#endif
-int main() {
- if(O_RDONLY);
-#ifdef O_TRUNC
- exit(0);
-#else
- exit(1);
-#endif
-}
-EOCP
-: check sys/file.h first to get FREAD on Sun
-if $test `./findhdr sys/file.h` && \
- set open3 -DI_SYS_FILE && eval $compile; then
- h_sysfile=true;
- echo "<sys/file.h> defines the O_* constants..." >&4
- if ./open3; then
- echo "and you have the 3 argument form of open()." >&4
- val="$define"
- else
- echo "but not the 3 argument form of open(). Oh, well." >&4
- val="$undef"
- fi
-elif $test `./findhdr fcntl.h` && \
- set open3 -DI_FCNTL && eval $compile; then
- h_fcntl=true;
- echo "<fcntl.h> defines the O_* constants..." >&4
- if ./open3; then
- echo "and you have the 3 argument form of open()." >&4
- val="$define"
- else
- echo "but not the 3 argument form of open(). Oh, well." >&4
- val="$undef"
- fi
-else
- val="$undef"
- echo "I can't find the O_* constant definitions! You got problems." >&4
-fi
-set d_open3
-eval $setvar
-$rm -f open3*
-
-: see which of string.h or strings.h is needed
-echo " "
-strings=`./findhdr string.h`
-if $test "$strings" && $test -r "$strings"; then
- echo "Using <string.h> instead of <strings.h>." >&4
- val="$define"
-else
- val="$undef"
- strings=`./findhdr strings.h`
- if $test "$strings" && $test -r "$strings"; then
- echo "Using <strings.h> instead of <string.h>." >&4
- else
- echo "No string header found -- You'll surely have problems." >&4
- fi
-fi
-set i_string
-eval $setvar
-case "$i_string" in
-"$undef") strings=`./findhdr strings.h`;;
-*) strings=`./findhdr string.h`;;
-esac
-
-: check for non-blocking I/O stuff
-case "$h_sysfile" in
-true) echo "#include <sys/file.h>" > head.c;;
-*)
- case "$h_fcntl" in
- true) echo "#include <fcntl.h>" > head.c;;
- *) echo "#include <sys/fcntl.h>" > head.c;;
- esac
- ;;
-esac
-echo " "
-echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
-case "$o_nonblock" in
-'')
- $cat head.c > try.c
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-int main() {
-#ifdef O_NONBLOCK
- printf("O_NONBLOCK\n");
- exit(0);
-#endif
-#ifdef O_NDELAY
- printf("O_NDELAY\n");
- exit(0);
-#endif
-#ifdef FNDELAY
- printf("FNDELAY\n");
- exit(0);
-#endif
- exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- o_nonblock=`./try`
- case "$o_nonblock" in
- '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
- *) echo "Seems like we can use $o_nonblock.";;
- esac
- else
- echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
- fi
- ;;
-*) echo "Using $hint value $o_nonblock.";;
-esac
-$rm -f try try.* .out core
-
-echo " "
-echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
-case "$eagain" in
-'')
- $cat head.c > try.c
- $cat >>try.c <<EOCP
-#include <errno.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <stdio.h>
-#define MY_O_NONBLOCK $o_nonblock
-#ifndef errno /* XXX need better Configure test */
-extern int errno;
-#endif
-#$i_unistd I_UNISTD
-#ifdef I_UNISTD
-#include <unistd.h>
-#endif
-#$i_string I_STRING
-#ifdef I_STRING
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-$signal_t blech(x) int x; { exit(3); }
-EOCP
- $cat >> try.c <<'EOCP'
-int main()
-{
- int pd[2];
- int pu[2];
- char buf[1];
- char string[100];
-
- pipe(pd); /* Down: child -> parent */
- pipe(pu); /* Up: parent -> child */
- if (0 != fork()) {
- int ret;
- close(pd[1]); /* Parent reads from pd[0] */
- close(pu[0]); /* Parent writes (blocking) to pu[1] */
-#ifdef F_SETFL
- if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
- exit(1);
-#else
- exit(4);
-#endif
- signal(SIGALRM, blech);
- alarm(5);
- if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
- exit(2);
- sprintf(string, "%d\n", ret);
- write(2, string, strlen(string));
- alarm(0);
-#ifdef EAGAIN
- if (errno == EAGAIN) {
- printf("EAGAIN\n");
- goto ok;
- }
-#endif
-#ifdef EWOULDBLOCK
- if (errno == EWOULDBLOCK)
- printf("EWOULDBLOCK\n");
-#endif
- ok:
- write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
- sleep(2); /* Give it time to close our pipe */
- alarm(5);
- ret = read(pd[0], buf, 1); /* Should read EOF */
- alarm(0);
- sprintf(string, "%d\n", ret);
- write(3, string, strlen(string));
- exit(0);
- }
-
- close(pd[0]); /* We write to pd[1] */
- close(pu[1]); /* We read from pu[0] */
- read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
- close(pd[1]); /* Pipe pd is now fully closed! */
- exit(0); /* Bye bye, thank you for playing! */
-}
-EOCP
- set try
- if eval $compile_ok; then
- echo "$startsh" >mtry
- echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
- chmod +x mtry
- ./mtry >/dev/null 2>&1
- case $? in
- 0) eagain=`$cat try.out`;;
- 1) echo "Could not perform non-blocking setting!";;
- 2) echo "I did a successful read() for something that was not there!";;
- 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
- 4) echo "Could not find F_SETFL!";;
- *) echo "Something terribly wrong happened during testing.";;
- esac
- rd_nodata=`$cat try.ret`
- echo "A read() system call with no data present returns $rd_nodata."
- case "$rd_nodata" in
- 0|-1) ;;
- *)
- echo "(That's peculiar, fixing that to be -1.)"
- rd_nodata=-1
- ;;
- esac
- case "$eagain" in
- '')
- echo "Forcing errno EAGAIN on read() with no data available."
- eagain=EAGAIN
- ;;
- *)
- echo "Your read() sets errno to $eagain when no data is available."
- ;;
- esac
- status=`$cat try.err`
- case "$status" in
- 0) echo "And it correctly returns 0 to signal EOF.";;
- -1) echo "But it also returns -1 to signal EOF, so be careful!";;
- *) echo "However, your read() returns '$status' on EOF??";;
- esac
- val="$define"
- if test "$status" = "$rd_nodata"; then
- echo "WARNING: you can't distinguish between EOF and no data!"
- val="$undef"
- fi
- else
- echo "I can't compile the test program--assuming errno EAGAIN will do."
- eagain=EAGAIN
- fi
- set d_eofnblk
- eval $setvar
- ;;
-*)
- echo "Using $hint value $eagain."
- echo "Your read() returns $rd_nodata when no data is present."
- case "$d_eofnblk" in
- "$define") echo "And you can see EOF because read() returns 0.";;
- "$undef") echo "But you can't see EOF status from read() returned value.";;
- *)
- echo "(Assuming you can't see EOF status from read anyway.)"
- d_eofnblk=$undef
- ;;
- esac
- ;;
-esac
-$rm -f try try.* .out core head.c mtry
-
-: see if fchmod exists
-set fchmod d_fchmod
-eval $inlibc
-
-: see if fchown exists
-set fchown d_fchown
-eval $inlibc
-
-: see if this is an fcntl system
-set fcntl d_fcntl
-eval $inlibc
-
-echo " "
-: See if fcntl-based locking works.
-$cat >try.c <<'EOCP'
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-int main() {
-#if defined(F_SETLK) && defined(F_SETLKW)
- struct flock flock;
- int retval, fd;
- fd = open("try.c", O_RDONLY);
- flock.l_type = F_RDLCK;
- flock.l_whence = SEEK_SET;
- flock.l_start = flock.l_len = 0;
- retval = fcntl(fd, F_SETLK, &flock);
- close(fd);
- (retval < 0 ? exit(2) : exit(0));
-#else
- exit(2);
-#endif
-}
-EOCP
-echo "Checking if fcntl-based file locking works... "
-case "$d_fcntl" in
-"$define")
- set try
- if eval $compile_ok; then
- if ./try; then
- echo "Yes, it seems to work."
- val="$define"
- else
- echo "Nope, it didn't work."
- val="$undef"
- fi
- else
- echo "I'm unable to compile the test program, so I'll assume not."
- val="$undef"
- fi
- ;;
-*) val="$undef";
- echo "Nope, since you don't even have fcntl()."
- ;;
-esac
-set d_fcntl_can_lock
-eval $setvar
-$rm -f try*
-
-
-hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
-while $test $# -ge 2; do
- case "$1" in
- $define) echo "#include <$2>";;
- esac ;
- shift 2;
-done > try.c;
-echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
-set try;
-if eval $compile; then
- val="$define";
-else
- val="$undef";
-fi;
-set $varname;
-eval $setvar;
-$rm -f try.c try.o'
-
-socketlib=''
-sockethdr=''
-: see whether socket exists
-echo " "
-$echo $n "Hmm... $c" >&4
-if set socket val -f d_socket; eval $csym; $val; then
- echo "Looks like you have Berkeley networking support." >&4
- d_socket="$define"
- if set setsockopt val -f; eval $csym; $val; then
- d_oldsock="$undef"
- else
- echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
- d_oldsock="$define"
- fi
-else
- if $contains socklib libc.list >/dev/null 2>&1; then
- echo "Looks like you have Berkeley networking support." >&4
- d_socket="$define"
- : we will have to assume that it supports the 4.2 BSD interface
- d_oldsock="$undef"
- else
- echo "You don't have Berkeley networking in libc$_a..." >&4
- if test "X$d_socket" = "X$define"; then
- echo "...but you seem to believe that you have sockets." >&4
- else
- for net in net socket
- do
- if test -f /usr/lib/lib$net$_a; then
- ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) || \
- $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
- if $contains socket libc.list >/dev/null 2>&1; then
- d_socket="$define"
- socketlib="-l$net"
- case "$net" in
- net)
- echo "...but the Wollongong group seems to have hacked it in." >&4
- sockethdr="-I/usr/netinclude"
- ;;
- esac
- echo "Found Berkeley sockets interface in lib$net." >& 4
- if $contains setsockopt libc.list >/dev/null 2>&1; then
- d_oldsock="$undef"
- else
- echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
- d_oldsock="$define"
- fi
- break
- fi
- fi
- done
- if test "X$d_socket" != "X$define"; then
- echo "or anywhere else I see." >&4
- d_socket="$undef"
- d_oldsock="$undef"
- fi
- fi
- fi
-fi
-
-: see if socketpair exists
-set socketpair d_sockpair
-eval $inlibc
-
-
-echo " "
-echo "Checking the availability of certain socket constants..." >& 4
-for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
- enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
- $cat >try.c <<EOF
-#include <sys/types.h>
-#include <sys/socket.h>
-int main() {
- int i = $ENUM;
-}
-EOF
- val="$undef"
- set try; if eval $compile; then
- val="$define"
- fi
- set d_${enum}; eval $setvar
- $rm -f try.c try
-done
-
-: see if sys/select.h has to be included
-set sys/select.h i_sysselct
-eval $inhdr
-
-: see if we should include time.h, sys/time.h, or both
-echo " "
-if test "X$timeincl" = X; then
- echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
- $echo $n "I'm now running the test program...$c"
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#ifdef I_TIME
-#include <time.h>
-#endif
-#ifdef I_SYSTIME
-#ifdef SYSTIMEKERNEL
-#define KERNEL
-#endif
-#include <sys/time.h>
-#endif
-#ifdef I_SYSSELECT
-#include <sys/select.h>
-#endif
-int main()
-{
- struct tm foo;
-#ifdef S_TIMEVAL
- struct timeval bar;
-#endif
-#ifdef S_TIMEZONE
- struct timezone tzp;
-#endif
- if (foo.tm_sec == foo.tm_sec)
- exit(0);
-#ifdef S_TIMEVAL
- if (bar.tv_sec == bar.tv_sec)
- exit(0);
-#endif
- exit(1);
-}
-EOCP
- flags=''
- for s_timezone in '-DS_TIMEZONE' ''; do
- sysselect=''
- for s_timeval in '-DS_TIMEVAL' ''; do
- for i_systimek in '' '-DSYSTIMEKERNEL'; do
- for i_time in '' '-DI_TIME'; do
- for i_systime in '-DI_SYSTIME' ''; do
- case "$flags" in
- '') $echo $n ".$c"
- set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
- if eval $compile; then
- set X $i_time $i_systime $i_systimek $sysselect $s_timeval
- shift
- flags="$*"
- echo " "
- $echo $n "Succeeded with $flags$c"
- fi
- ;;
- esac
- done
- done
- done
- done
- done
- timeincl=''
- echo " "
- case "$flags" in
- *SYSTIMEKERNEL*) i_systimek="$define"
- timeincl=`./findhdr sys/time.h`
- echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
- *) i_systimek="$undef";;
- esac
- case "$flags" in
- *I_TIME*) i_time="$define"
- timeincl=`./findhdr time.h`" $timeincl"
- echo "We'll include <time.h>." >&4;;
- *) i_time="$undef";;
- esac
- case "$flags" in
- *I_SYSTIME*) i_systime="$define"
- timeincl=`./findhdr sys/time.h`" $timeincl"
- echo "We'll include <sys/time.h>." >&4;;
- *) i_systime="$undef";;
- esac
- $rm -f try.c try
-fi
-
-: check for fd_set items
-$cat <<EOM
-
-Checking to see how well your C compiler handles fd_set and friends ...
-EOM
-$cat >fd_set.c <<EOCP
-#$i_systime I_SYS_TIME
-#$i_sysselct I_SYS_SELECT
-#$d_socket HAS_SOCKET
-#include <sys/types.h>
-#ifdef HAS_SOCKET
-#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
-#endif
-#ifdef I_SYS_TIME
-#include <sys/time.h>
-#endif
-#ifdef I_SYS_SELECT
-#include <sys/select.h>
-#endif
-int main() {
- fd_set fds;
-
-#ifdef TRYBITS
- if(fds.fds_bits);
-#endif
-
-#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
- exit(0);
-#else
- exit(1);
-#endif
-}
-EOCP
-set fd_set -DTRYBITS
-if eval $compile; then
- d_fds_bits="$define"
- d_fd_set="$define"
- echo "Well, your system knows about the normal fd_set typedef..." >&4
- if ./fd_set; then
- echo "and you have the normal fd_set macros (just as I'd expect)." >&4
- d_fd_macros="$define"
- else
- $cat >&4 <<'EOM'
-but not the normal fd_set macros! Gaaack! I'll have to cover for you.
-EOM
- d_fd_macros="$undef"
- fi
-else
- $cat <<'EOM'
-Hmm, your compiler has some difficulty with fd_set. Checking further...
-EOM
- set fd_set
- if eval $compile; then
- d_fds_bits="$undef"
- d_fd_set="$define"
- echo "Well, your system has some sort of fd_set available..." >&4
- if ./fd_set; then
- echo "and you have the normal fd_set macros." >&4
- d_fd_macros="$define"
- else
- $cat <<'EOM'
-but not the normal fd_set macros! Gross! More work for me...
-EOM
- d_fd_macros="$undef"
- fi
- else
- echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
- d_fd_set="$undef"
- d_fds_bits="$undef"
- d_fd_macros="$undef"
- fi
-fi
-$rm -f fd_set*
-
-: see if fgetpos exists
-set fgetpos d_fgetpos
-eval $inlibc
-
-: see if flock exists
-set flock d_flock
-eval $inlibc
-
-: see if fork exists
-set fork d_fork
-eval $inlibc
-
-: see if pathconf exists
-set pathconf d_pathconf
-eval $inlibc
-
-: see if fpathconf exists
-set fpathconf d_fpathconf
-eval $inlibc
-
-
-: check for fpos64_t
-echo " "
-echo "Checking to see if you have fpos64_t..." >&4
-$cat >try.c <<EOCP
-#include <stdio.h>
-int main() { fpos64_t x = 7; }
-EOCP
-set try
-if eval $compile; then
- val="$define"
- echo "You have fpos64_t."
-else
- val="$undef"
- echo "You do not have fpos64_t."
- case "$fpossize" in
- 8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
- esac
-fi
-$rm -f try.* try
-set d_fpos64_t
-eval $setvar
-
-: see if frexpl exists
-set frexpl d_frexpl
-eval $inlibc
-
-hasstruct='varname=$1; struct=$2; shift; shift;
-while $test $# -ge 2; do
- case "$1" in
- $define) echo "#include <$2>";;
- esac ;
- shift 2;
-done > try.c;
-echo "int main () { struct $struct foo; }" >> try.c;
-set try;
-if eval $compile; then
- val="$define";
-else
- val="$undef";
-fi;
-set $varname;
-eval $setvar;
-$rm -f try.c try.o'
-
-: see if this is a sys/param system
-set sys/param.h i_sysparam
-eval $inhdr
-
-: see if this is a sys/mount.h system
-set sys/mount.h i_sysmount
-eval $inhdr
-
-: see if sys/types.h has to be included
-set sys/types.h i_systypes
-eval $inhdr
-
-
-echo " "
-echo "Checking to see if your system supports struct fs_data..." >&4
-set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
-eval $hasstruct
-case "$d_fs_data_s" in
-"$define") echo "Yes, it does." ;;
-*) echo "No, it doesn't." ;;
-esac
-
-: see if fseeko exists
-set fseeko d_fseeko
-eval $inlibc
-case "$longsize" in
-8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
-esac
-
-: see if fsetpos exists
-set fsetpos d_fsetpos
-eval $inlibc
-
-
-: see if fstatfs exists
-set fstatfs d_fstatfs
-eval $inlibc
-
-
-: see if statvfs exists
-set statvfs d_statvfs
-eval $inlibc
-
-: see if fstatvfs exists
-set fstatvfs d_fstatvfs
-eval $inlibc
-
-
-: see if fsync exists
-set fsync d_fsync
-eval $inlibc
-
-: see if ftello exists
-set ftello d_ftello
-eval $inlibc
-case "$longsize" in
-8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
-esac
-
-: see if getcwd exists
-set getcwd d_getcwd
-eval $inlibc
-
-: see if getespwnam exists
-set getespwnam d_getespwnam
-eval $inlibc
-
-
-: see if getfsstat exists
-set getfsstat d_getfsstat
-eval $inlibc
-
-: see if getgrent exists
-set getgrent d_getgrent
-eval $inlibc
-
-: see if gethostbyaddr exists
-set gethostbyaddr d_gethbyaddr
-eval $inlibc
-
-: see if gethostbyname exists
-set gethostbyname d_gethbyname
-eval $inlibc
-
-: see if gethostent exists
-set gethostent d_gethent
-eval $inlibc
-
-: see how we will look up host name
-echo " "
-call=''
-if set gethostname val -f d_gethname; eval $csym; $val; then
- echo 'gethostname() found.' >&4
- d_gethname="$define"
- call=gethostname
-fi
-if set uname val -f d_uname; eval $csym; $val; then
- if ./xenix; then
- $cat <<'EOM'
-uname() was found, but you're running xenix, and older versions of xenix
-have a broken uname(). If you don't really know whether your xenix is old
-enough to have a broken system call, use the default answer.
-
-EOM
- dflt=y
- case "$d_uname" in
- "$define") dflt=n;;
- esac
- rp='Is your uname() broken?'
- . ./myread
- case "$ans" in
- n*) d_uname="$define"; call=uname;;
- esac
- else
- echo 'uname() found.' >&4
- d_uname="$define"
- case "$call" in
- '') call=uname ;;
- esac
- fi
-fi
-case "$d_gethname" in
-'') d_gethname="$undef";;
-esac
-case "$d_uname" in
-'') d_uname="$undef";;
-esac
-case "$d_uname$d_gethname" in
-*define*)
- dflt=n
- cat <<EOM
-
-Every now and then someone has a $call() that lies about the hostname
-but can't be fixed for political or economic reasons. If you wish, I can
-pretend $call() isn't there and maybe compute hostname at run-time
-thanks to the '$phostname' command.
-
-EOM
- rp="Shall I ignore $call() from now on?"
- . ./myread
- case "$ans" in
- y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
- esac;;
-esac
-case "$phostname" in
-'') aphostname='';;
-*) case "$aphostname" in
- /*) ;;
- *) set X $phostname
- shift
- file=$1
- shift
- file=`./loc $file $file $pth`
- aphostname=`echo $file $*`
- ;;
- esac
- ;;
-esac
-case "$d_uname$d_gethname" in
-*define*) ;;
-*)
- case "$phostname" in
- '')
- echo "There will be no way for $package to get your hostname." >&4;;
- *)
- echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
- ;;
- esac;;
-esac
-case "$d_phostname" in
-'') d_phostname="$undef";;
-esac
-
-: see if this is a netdb.h system
-set netdb.h i_netdb
-eval $inhdr
-
-: see if prototypes for various gethostxxx netdb.h functions are available
-echo " "
-set d_gethostprotos gethostent $i_netdb netdb.h
-eval $hasproto
-
-: see if getlogin exists
-set getlogin d_getlogin
-eval $inlibc
-
-: see if getmnt exists
-set getmnt d_getmnt
-eval $inlibc
-
-: see if getmntent exists
-set getmntent d_getmntent
-eval $inlibc
-
-: see if getnetbyaddr exists
-set getnetbyaddr d_getnbyaddr
-eval $inlibc
-
-: see if getnetbyname exists
-set getnetbyname d_getnbyname
-eval $inlibc
-
-: see if getnetent exists
-set getnetent d_getnent
-eval $inlibc
-
-: see if prototypes for various getnetxxx netdb.h functions are available
-echo " "
-set d_getnetprotos getnetent $i_netdb netdb.h
-eval $hasproto
-
-: see if getpagesize exists
-set getpagesize d_getpagsz
-eval $inlibc
-
-
-: see if getprotobyname exists
-set getprotobyname d_getpbyname
-eval $inlibc
-
-: see if getprotobynumber exists
-set getprotobynumber d_getpbynumber
-eval $inlibc
-
-: see if getprotoent exists
-set getprotoent d_getpent
-eval $inlibc
-
-: see if getpgid exists
-set getpgid d_getpgid
-eval $inlibc
-
-: see if getpgrp2 exists
-set getpgrp2 d_getpgrp2
-eval $inlibc
-
-: see if getppid exists
-set getppid d_getppid
-eval $inlibc
-
-: see if getpriority exists
-set getpriority d_getprior
-eval $inlibc
-
-: see if prototypes for various getprotoxxx netdb.h functions are available
-echo " "
-set d_getprotoprotos getprotoent $i_netdb netdb.h
-eval $hasproto
-
-: see if getprpwnam exists
-set getprpwnam d_getprpwnam
-eval $inlibc
-
-: see if getpwent exists
-set getpwent d_getpwent
-eval $inlibc
-
-
-: see if getservbyname exists
-set getservbyname d_getsbyname
-eval $inlibc
-
-: see if getservbyport exists
-set getservbyport d_getsbyport
-eval $inlibc
-
-: see if getservent exists
-set getservent d_getsent
-eval $inlibc
-
-: see if prototypes for various getservxxx netdb.h functions are available
-echo " "
-set d_getservprotos getservent $i_netdb netdb.h
-eval $hasproto
-
-: see if getspnam exists
-set getspnam d_getspnam
-eval $inlibc
-
-: see if gettimeofday or ftime exists
-set gettimeofday d_gettimeod
-eval $inlibc
-case "$d_gettimeod" in
-"$undef")
- set ftime d_ftime
- eval $inlibc
- ;;
-*)
- val="$undef"; set d_ftime; eval $setvar
- ;;
-esac
-case "$d_gettimeod$d_ftime" in
-"$undef$undef")
- echo " "
- echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
- ;;
-esac
-
-: see if this is an grp system
-set grp.h i_grp
-eval $inhdr
-
-case "$i_grp" in
-$define)
- xxx=`./findhdr grp.h`
- $cppstdin $cppflags $cppminus < $xxx >$$.h
-
- if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_grpasswd
- eval $setvar
-
- $rm -f $$.h
- ;;
-*)
- val="$undef";
- set d_grpasswd; eval $setvar
- ;;
-esac
-
-: see if hasmntopt exists
-set hasmntopt d_hasmntopt
-eval $inlibc
-
-: see if this is a netinet/in.h or sys/in.h system
-set netinet/in.h i_niin sys/in.h i_sysin
-eval $inhdr
-
-: see if arpa/inet.h has to be included
-set arpa/inet.h i_arpainet
-eval $inhdr
-
-: see if htonl --and friends-- exists
-val=''
-set htonl val
-eval $inlibc
-
-: Maybe they are macros.
-case "$val" in
-$undef)
- $cat >htonl.c <<EOM
-#include <stdio.h>
-#include <sys/types.h>
-#$i_niin I_NETINET_IN
-#$i_sysin I_SYS_IN
-#$i_arpainet I_ARPA_INET
-#ifdef I_NETINET_IN
-#include <netinet/in.h>
-#endif
-#ifdef I_SYS_IN
-#include <sys/in.h>
-#endif
-#ifdef I_ARPA_INET
-#include <arpa/inet.h>
-#endif
-#ifdef htonl
-printf("Defined as a macro.");
-#endif
-EOM
- $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
- if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
- val="$define"
- echo "But it seems to be defined as a macro." >&4
- fi
- $rm -f htonl.?
- ;;
-esac
-set d_htonl
-eval $setvar
-
-: see if iconv exists
-set iconv d_iconv
-eval $inlibc
-
-: index or strchr
-echo " "
-if set index val -f; eval $csym; $val; then
- if set strchr val -f d_strchr; eval $csym; $val; then
- if $contains strchr "$strings" >/dev/null 2>&1 ; then
- val="$define"
- vali="$undef"
- echo "strchr() found." >&4
- else
- val="$undef"
- vali="$define"
- echo "index() found." >&4
- fi
- else
- val="$undef"
- vali="$define"
- echo "index() found." >&4
- fi
-else
- if set strchr val -f d_strchr; eval $csym; $val; then
- val="$define"
- vali="$undef"
- echo "strchr() found." >&4
- else
- echo "No index() or strchr() found!" >&4
- val="$undef"
- vali="$undef"
- fi
-fi
-set d_strchr; eval $setvar
-val="$vali"
-set d_index; eval $setvar
-
-: check whether inet_aton exists
-set inet_aton d_inetaton
-eval $inlibc
-
-: see if inttypes.h is available
-: we want a real compile instead of Inhdr because some systems
-: have an inttypes.h which includes non-existent headers
-echo " "
-$cat >try.c <<EOCP
-#include <inttypes.h>
-int main() {
- static int32_t foo32 = 0x12345678;
-}
-EOCP
-set try
-if eval $compile; then
- echo "<inttypes.h> found." >&4
- val="$define"
-else
- echo "<inttypes.h> NOT found." >&4
- val="$undef"
-fi
-$rm -f try.c try
-set i_inttypes
-eval $setvar
-
-: check for int64_t
-echo " "
-echo "Checking to see if you have int64_t..." >&4
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#$i_inttypes I_INTTYPES
-#ifdef I_INTTYPES
-#include <inttypes.h>
-#endif
-int main() { int64_t x = 7; }
-EOCP
-set try
-if eval $compile; then
- val="$define"
- echo "You have int64_t."
-else
- val="$undef"
- echo "You do not have int64_t."
-fi
-$rm -f try try.*
-set d_int64_t
-eval $setvar
-
-: Look for isascii
-echo " "
-$cat >isascii.c <<'EOCP'
-#include <stdio.h>
-#include <ctype.h>
-int main() {
- int c = 'A';
- if (isascii(c))
- exit(0);
- else
- exit(1);
-}
-EOCP
-set isascii
-if eval $compile; then
- echo "isascii() found." >&4
- val="$define"
-else
- echo "isascii() NOT found." >&4
- val="$undef"
-fi
-set d_isascii
-eval $setvar
-$rm -f isascii*
-
-: see if isnan exists
-set isnan d_isnan
-eval $inlibc
-
-: see if isnanl exists
-set isnanl d_isnanl
-eval $inlibc
-
-: see if killpg exists
-set killpg d_killpg
-eval $inlibc
-
-: see if lchown exists
-echo " "
-$cat > try.c <<'EOCP'
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char lchown(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char lchown();
-int main() {
- /* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_lchown) || defined (__stub___lchown)
-choke me
-#else
-lchown();
-#endif
-; return 0; }
-EOCP
-set try
-if eval $compile; then
- $echo "lchown() found." >&4
- val="$define"
-else
- $echo "lchown() NOT found." >&4
- val="$undef"
-fi
-set d_lchown
-eval $setvar
-
-: See if number of significant digits in a double precision number is known
-echo " "
-$cat >ldbl_dig.c <<EOM
-#$i_limits I_LIMITS
-#$i_float I_FLOAT
-#ifdef I_LIMITS
-#include <limits.h>
-#endif
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifdef LDBL_DIG
-printf("Contains LDBL_DIG");
-#endif
-EOM
-$cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
-if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
- echo "LDBL_DIG found." >&4
- val="$define"
-else
- echo "LDBL_DIG NOT found." >&4
- val="$undef"
-fi
-$rm -f ldbl_dig.?
-set d_ldbl_dig
-eval $setvar
-
-: see if link exists
-set link d_link
-eval $inlibc
-
-: see if localeconv exists
-set localeconv d_locconv
-eval $inlibc
-
-: see if lockf exists
-set lockf d_lockf
-eval $inlibc
-
-: check for long long
-echo " "
-echo "Checking to see if you have long long..." >&4
-echo 'int main() { long long x = 7; return 0; }' > try.c
-set try
-if eval $compile; then
- val="$define"
- echo "You have long long."
-else
- val="$undef"
- echo "You do not have long long."
-fi
-$rm try.*
-set d_longlong
-eval $setvar
-
-: check for length of long long
-case "${d_longlong}${longlongsize}" in
-$define)
- echo " "
- echo "Checking to see how big your long longs are..." >&4
- $cat >try.c <<'EOCP'
-#include <stdio.h>
-int main()
-{
- printf("%d\n", (int)sizeof(long long));
- return(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- longlongsize=`./try$exe_ext`
- echo "Your long longs are $longlongsize bytes long."
- else
- dflt='8'
- echo " "
- echo "(I can't seem to compile the test program. Guessing...)"
- rp="What is the size of a long long (in bytes)?"
- . ./myread
- longlongsize="$ans"
- fi
- if $test "X$longsize" = "X$longlongsize"; then
- echo "(That isn't any different from an ordinary long.)"
- fi
- ;;
-esac
-$rm -f try.* try
-
-: see if prototype for lseek is available
-echo " "
-set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
-eval $hasproto
-
-: see if lstat exists
-set lstat d_lstat
-eval $inlibc
-
-: see if madvise exists
-set madvise d_madvise
-eval $inlibc
-
-: see if mblen exists
-set mblen d_mblen
-eval $inlibc
-
-: see if mbstowcs exists
-set mbstowcs d_mbstowcs
-eval $inlibc
-
-: see if mbtowc exists
-set mbtowc d_mbtowc
-eval $inlibc
-
-: see if memchr exists
-set memchr d_memchr
-eval $inlibc
-
-: see if memcmp exists
-set memcmp d_memcmp
-eval $inlibc
-
-: see if memcpy exists
-set memcpy d_memcpy
-eval $inlibc
-
-: see if memmove exists
-set memmove d_memmove
-eval $inlibc
-
-: see if memset exists
-set memset d_memset
-eval $inlibc
-
-: see if mkdir exists
-set mkdir d_mkdir
-eval $inlibc
-
-: see if mkdtemp exists
-set mkdtemp d_mkdtemp
-eval $inlibc
-
-: see if mkfifo exists
-set mkfifo d_mkfifo
-eval $inlibc
-
-: see if mkstemp exists
-set mkstemp d_mkstemp
-eval $inlibc
-
-: see if mkstemps exists
-set mkstemps d_mkstemps
-eval $inlibc
-
-: see if mktime exists
-set mktime d_mktime
-eval $inlibc
-
-: see if this is a sys/mman.h system
-set sys/mman.h i_sysmman
-eval $inhdr
-
-: see if mmap exists
-set mmap d_mmap
-eval $inlibc
-: see what shmat returns
-: default to something harmless
-mmaptype='void *'
-case "$i_sysmman$d_mmap" in
-"$define$define")
- $cat >mmap.c <<'END'
-#include <sys/mman.h>
-void *mmap();
-END
- if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
- mmaptype='void *'
- else
- mmaptype='caddr_t'
- fi
- echo "and it returns ($mmaptype)." >&4
- ;;
-esac
-
-
-
-: see if modfl exists
-set modfl d_modfl
-eval $inlibc
-
-: see if mprotect exists
-set mprotect d_mprotect
-eval $inlibc
-
-: see if msgctl exists
-set msgctl d_msgctl
-eval $inlibc
-
-: see if msgget exists
-set msgget d_msgget
-eval $inlibc
-
-: see if msgsnd exists
-set msgsnd d_msgsnd
-eval $inlibc
-
-: see if msgrcv exists
-set msgrcv d_msgrcv
-eval $inlibc
-
-: see how much of the 'msg*(2)' library is present.
-h_msg=true
-echo " "
-case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
-*"$undef"*) h_msg=false;;
-esac
-case "$osname" in
-freebsd)
- case "`ipcs 2>&1`" in
- "SVID messages"*"not configured"*)
- echo "Your $osname does not have the msg*(2) configured." >&4
- h_msg=false
- val="$undef"
- set msgctl d_msgctl
- eval $setvar
- set msgget d_msgget
- eval $setvar
- set msgsnd d_msgsnd
- eval $setvar
- set msgrcv d_msgrcv
- eval $setvar
- ;;
- esac
- ;;
-esac
-: we could also check for sys/ipc.h ...
-if $h_msg && $test `./findhdr sys/msg.h`; then
- echo "You have the full msg*(2) library." >&4
- val="$define"
-else
- echo "You don't have the full msg*(2) library." >&4
- val="$undef"
-fi
-set d_msg
-eval $setvar
-
-: see if msync exists
-set msync d_msync
-eval $inlibc
-
-: see if munmap exists
-set munmap d_munmap
-eval $inlibc
-
-: see if nice exists
-set nice d_nice
-eval $inlibc
-
-
-echo " "
-echo "Checking which 64-bit integer type we could use..." >&4
-
-case "$intsize" in
-8) val=int
- set quadtype
- eval $setvar
- val='"unsigned int"'
- set uquadtype
- eval $setvar
- quadkind=1
- ;;
-*) case "$longsize" in
- 8) val=long
- set quadtype
- eval $setvar
- val='"unsigned long"'
- set uquadtype
- eval $setvar
- quadkind=2
- ;;
- *) case "$d_longlong:$longlongsize" in
- define:8)
- val='"long long"'
- set quadtype
- eval $setvar
- val='"unsigned long long"'
- set uquadtype
- eval $setvar
- quadkind=3
- ;;
- *) case "$d_int64_t" in
- define)
- val=int64_t
- set quadtype
- eval $setvar
- val=uint64_t
- set uquadtype
- eval $setvar
- quadkind=4
- ;;
- esac
- ;;
- esac
- ;;
- esac
- ;;
-esac
-
-case "$quadtype" in
-'') echo "Alas, no 64-bit integer types in sight." >&4
- d_quad="$undef"
- ;;
-*) if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
- verb="will"
- else
- verb="could"
- fi
- echo "We $verb use '$quadtype' for 64-bit integers." >&4
- d_quad="$define"
- ;;
-esac
-
-: check for length of character
-echo " "
-case "$charsize" in
-'')
- echo "Checking to see how big your characters are (hey, you never know)..." >&4
- $cat >try.c <<'EOCP'
-#include <stdio.h>
-int main()
-{
- printf("%d\n", (int)sizeof(char));
- exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- dflt=`./try`
- else
- dflt='1'
- echo "(I can't seem to compile the test program. Guessing...)"
- fi
- ;;
-*)
- dflt="$charsize"
- ;;
-esac
-rp="What is the size of a character (in bytes)?"
-. ./myread
-charsize="$ans"
-$rm -f try.c try
-
-: check for volatile keyword
-echo " "
-echo 'Checking to see if your C compiler knows about "volatile"...' >&4
-$cat >try.c <<'EOCP'
-int main()
-{
- typedef struct _goo_struct goo_struct;
- goo_struct * volatile goo = ((goo_struct *)0);
- struct _goo_struct {
- long long_int;
- int reg_int;
- char char_var;
- };
- typedef unsigned short foo_t;
- char *volatile foo;
- volatile int bar;
- volatile foo_t blech;
- foo = foo;
-}
-EOCP
-if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
- val="$define"
- echo "Yup, it does."
-else
- val="$undef"
- echo "Nope, it doesn't."
-fi
-set d_volatile
-eval $setvar
-$rm -f try.*
-
-
-echo " "
-$echo "Choosing the C types to be used for Perl's internal types..." >&4
-
-case "$use64bitint:$d_quad:$quadtype" in
-define:define:?*)
- ivtype="$quadtype"
- uvtype="$uquadtype"
- ivsize=8
- uvsize=8
- ;;
-*) ivtype="long"
- uvtype="unsigned long"
- ivsize=$longsize
- uvsize=$longsize
- ;;
-esac
-
-case "$uselongdouble:$d_longdbl" in
-define:define)
- nvtype="long double"
- nvsize=$longdblsize
- ;;
-*) nvtype=double
- nvsize=$doublesize
- ;;
-esac
-
-$echo "(IV will be "$ivtype", $ivsize bytes)"
-$echo "(UV will be "$uvtype", $uvsize bytes)"
-$echo "(NV will be "$nvtype", $nvsize bytes)"
-
-$cat >try.c <<EOCP
-#$i_inttypes I_INTTYPES
-#ifdef I_INTTYPES
-#include <inttypes.h>
-#endif
-#include <stdio.h>
-int main() {
-#ifdef INT8
- int8_t i = INT8_MAX;
- uint8_t u = UINT8_MAX;
- printf("int8_t\n");
-#endif
-#ifdef INT16
- int16_t i = INT16_MAX;
- uint16_t i = UINT16_MAX;
- printf("int16_t\n");
-#endif
-#ifdef INT32
- int32_t i = INT32_MAX;
- uint32_t u = UINT32_MAX;
- printf("int32_t\n");
-#endif
-}
-EOCP
-
-case "$i8type" in
-'') case "$charsize" in
- 1) i8type=char
- u8type="unsigned char"
- i8size=$charsize
- u8size=$charsize
- ;;
- esac
- ;;
-esac
-case "$i8type" in
-'') set try -DINT8
- if eval $compile; then
- case "`./try$exe_ext`" in
- int8_t) i8type=int8_t
- u8type=uint8_t
- i8size=1
- u8size=1
- ;;
- esac
- fi
- ;;
-esac
-case "$i8type" in
-'') if $test $charsize -ge 1; then
- i8type=char
- u8type="unsigned char"
- i8size=$charsize
- u8size=$charsize
- fi
- ;;
-esac
-
-case "$i16type" in
-'') case "$shortsize" in
- 2) i16type=short
- u16type="unsigned short"
- i16size=$shortsize
- u16size=$shortsize
- ;;
- esac
- ;;
-esac
-case "$i16type" in
-'') set try -DINT16
- if eval $compile; then
- case "`./try$exe_ext`" in
- int16_t)
- i16type=int16_t
- u16type=uint16_t
- i16size=2
- u16size=2
- ;;
- esac
- fi
- ;;
-esac
-case "$i16type" in
-'') if $test $shortsize -ge 2; then
- i16type=short
- u16type="unsigned short"
- i16size=$shortsize
- u16size=$shortsize
- fi
- ;;
-esac
-
-case "$i32type" in
-'') case "$longsize" in
- 4) i32type=long
- u32type="unsigned long"
- i32size=$longsize
- u32size=$longsize
- ;;
- *) case "$intsize" in
- 4) i32type=int
- u32type="unsigned int"
- i32size=$intsize
- u32size=$intsize
- ;;
- esac
- ;;
- esac
- ;;
-esac
-case "$i32type" in
-'') set try -DINT32
- if eval $compile; then
- case "`./try$exe_ext`" in
- int32_t)
- i32type=int32_t
- u32type=uint32_t
- i32size=4
- u32size=4
- ;;
- esac
- fi
- ;;
-esac
-case "$i32type" in
-'') if $test $intsize -ge 4; then
- i32type=int
- u32type="unsigned int"
- i32size=$intsize
- u32size=$intsize
- fi
- ;;
-esac
-
-case "$i64type" in
-'') case "$d_quad:$quadtype" in
- define:?*)
- i64type="$quadtype"
- u64type="$uquadtype"
- i64size=8
- u64size=8
- ;;
- esac
- ;;
-esac
-
-$echo "Checking how many bits of your UVs your NVs can preserve..." >&4
-: volatile so that the compiler has to store it out to memory.
-if test X"$d_volatile" = X"$define"; then
- volatile=volatile
-fi
-$cat <<EOP >try.c
-#include <stdio.h>
-#include <sys/types.h>
-#include <signal.h>
-#ifdef SIGFPE
-$volatile int bletched = 0;
-$signal_t blech(s) int s; { bletched = 1; }
-#endif
-int main() {
- $uvtype u = 0;
- $nvtype d;
- int n = 8 * $uvsize;
- int i;
-#ifdef SIGFPE
- signal(SIGFPE, blech);
-#endif
-
- for (i = 0; i < n; i++) {
- u = u << 1 | ($uvtype)1;
- d = ($nvtype)u;
- if (($uvtype)d != u)
- break;
- if (d <= 0)
- break;
- d = ($nvtype)(u - 1);
- if (($uvtype)d != (u - 1))
- break;
-#ifdef SIGFPE
- if (bletched) {
- break;
-#endif
- }
- }
- printf("%d\n", ((i == n) ? -n : i));
- exit(0);
-}
-EOP
-set try
-
-d_nv_preserves_uv="$undef"
-if eval $compile; then
- d_nv_preserves_uv_bits="`./try$exe_ext`"
-fi
-case "$d_nv_preserves_uv_bits" in
-\-[1-9]*)
- d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
- $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs." 2>&1
- d_nv_preserves_uv="$define"
- ;;
-[1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs." 2>&1
- d_nv_preserves_uv="$undef" ;;
-*) $echo "Can't figure out how many bits your NVs preserve." 2>&1
- d_nv_preserves_uv_bits="$undef" ;;
-esac
-
-$rm -f try.* try
-
-
-: check for off64_t
-echo " "
-echo "Checking to see if you have off64_t..." >&4
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#include <unistd.h>
-int main() { off64_t x = 7; }
-EOCP
-set try
-if eval $compile; then
- val="$define"
- echo "You have off64_t."
-else
- val="$undef"
- echo "You do not have off64_t."
- case "$lseeksize" in
- 8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
- esac
-fi
-$rm -f try.* try
-set d_off64_t
-eval $setvar
-
-: see if POSIX threads are available
-set pthread.h i_pthread
-eval $inhdr
-
-
-
-
-: how to create joinable pthreads
-if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
- echo " "
- echo "Checking what constant to use for creating joinable pthreads..." >&4
- $cat >try.c <<'EOCP'
-#include <pthread.h>
-int main() {
- int detachstate = JOINABLE;
-}
-EOCP
- set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
- if eval $compile; then
- echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
- val="$undef" # Yes, undef.
- set d_old_pthread_create_joinable
- eval $setvar
- val=""
- set old_pthread_create_joinable
- eval $setvar
- else
- set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
- if eval $compile; then
- echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
- val="$define"
- set d_old_pthread_create_joinable
- eval $setvar
- val=PTHREAD_CREATE_UNDETACHED
- set old_pthread_create_joinable
- eval $setvar
- else
- set try -DJOINABLE=__UNDETACHED
- if eval $compile; then
- echo "You seem to use __UNDETACHED." >&4
- val="$define"
- set d_old_pthread_create_joinable
- eval $setvar
- val=__UNDETACHED
- set old_pthread_create_joinable
- eval $setvar
- else
- echo "Egads, nothing obvious found. Guessing that you use 0." >&4
- val="$define"
- set d_old_pthread_create_joinable
- eval $setvar
- val=0
- set old_pthread_create_joinable
- eval $setvar
- fi
- fi
- fi
- $rm -f try try.*
-else
- d_old_pthread_create_joinable="$undef"
- old_pthread_create_joinable=""
-fi
-
-: see if pause exists
-set pause d_pause
-eval $inlibc
-
-: see if pipe exists
-set pipe d_pipe
-eval $inlibc
-
-: see if poll exists
-set poll d_poll
-eval $inlibc
-
-
-: see whether the various POSIXish _yields exist
-$cat >try.c <<EOP
-#include <pthread.h>
-#include <stdio.h>
-int main() {
-#ifdef SCHED_YIELD
- sched_yield();
-#else
-#ifdef PTHREAD_YIELD
- pthread_yield();
-#else
-#ifdef PTHREAD_YIELD_NULL
- pthread_yield(NULL);
-#endif
-#endif
-#endif
-}
-EOP
-: see if sched_yield exists
-set try -DSCHED_YIELD
-if eval $compile; then
- val="$define"
- sched_yield='sched_yield()'
-else
- val="$undef"
-fi
-case "$usethreads" in
-$define)
- case "$val" in
- $define) echo 'sched_yield() found.' >&4 ;;
- *) echo 'sched_yield() NOT found.' >&4 ;;
- esac
-esac
-set d_sched_yield
-eval $setvar
-
-: see if pthread_yield exists
-set try -DPTHREAD_YIELD
-if eval $compile; then
- val="$define"
- case "$sched_yield" in
- '') sched_yield='pthread_yield()' ;;
- esac
-else
- set try -DPTHREAD_YIELD_NULL
- if eval $compile; then
- val="$define"
- case "$sched_yield" in
- '') sched_yield='pthread_yield(NULL)' ;;
- esac
- else
- val="$undef"
- fi
-fi
-case "$usethreads" in
-$define)
- case "$val" in
- $define) echo 'pthread_yield() found.' >&4 ;;
- *) echo 'pthread_yield() NOT found.' >&4 ;;
- esac
- ;;
-esac
-set d_pthread_yield
-eval $setvar
-
-case "$sched_yield" in
-'') sched_yield=undef ;;
-esac
-
-$rm -f try try.*
-
-: see if this is a pwd.h system
-set pwd.h i_pwd
-eval $inhdr
-
-case "$i_pwd" in
-$define)
- xxx=`./findhdr pwd.h`
- $cppstdin $cppflags $cppminus < $xxx >$$.h
-
- if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_pwquota
- eval $setvar
-
- if $contains 'pw_age' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_pwage
- eval $setvar
-
- if $contains 'pw_change' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_pwchange
- eval $setvar
-
- if $contains 'pw_class' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_pwclass
- eval $setvar
-
- if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_pwexpire
- eval $setvar
-
- if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_pwcomment
- eval $setvar
-
- if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_pwgecos
- eval $setvar
-
- if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- set d_pwpasswd
- eval $setvar
-
- $rm -f $$.h
- ;;
-*)
- val="$undef";
- set d_pwquota; eval $setvar
- set d_pwage; eval $setvar
- set d_pwchange; eval $setvar
- set d_pwclass; eval $setvar
- set d_pwexpire; eval $setvar
- set d_pwcomment; eval $setvar
- set d_pwgecos; eval $setvar
- set d_pwpasswd; eval $setvar
- ;;
-esac
-
-: see if readdir and friends exist
-set readdir d_readdir
-eval $inlibc
-set seekdir d_seekdir
-eval $inlibc
-set telldir d_telldir
-eval $inlibc
-set rewinddir d_rewinddir
-eval $inlibc
-
-: see if readlink exists
-set readlink d_readlink
-eval $inlibc
-
-: see if rename exists
-set rename d_rename
-eval $inlibc
-
-: see if rmdir exists
-set rmdir d_rmdir
-eval $inlibc
-
-: see if memory.h is available.
-val=''
-set memory.h val
-eval $inhdr
-
-: See if it conflicts with string.h
-case "$val" in
-$define)
- case "$strings" in
- '') ;;
- *)
- $cppstdin $cppflags $cppminus < $strings > mem.h
- if $contains 'memcpy' mem.h >/dev/null 2>&1; then
- echo " "
- echo "We won't be including <memory.h>."
- val="$undef"
- fi
- $rm -f mem.h
- ;;
- esac
-esac
-set i_memory
-eval $setvar
-
-: can bcopy handle overlapping blocks?
-val="$undef"
-case "$d_bcopy" in
-"$define")
- echo " "
- echo "Checking to see if your bcopy() can do overlapping copies..." >&4
- $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-# include <memory.h>
-#endif
-#ifdef I_STDLIB
-# include <stdlib.h>
-#endif
-#ifdef I_STRING
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#ifdef I_UNISTD
-# include <unistd.h> /* Needed for NetBSD */
-#endif
-int main()
-{
-char buf[128], abc[128];
-char *b;
-int len;
-int off;
-int align;
-
-bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
-
-for (align = 7; align >= 0; align--) {
- for (len = 36; len; len--) {
- b = buf+align;
- bcopy(abc, b, len);
- for (off = 1; off <= len; off++) {
- bcopy(b, b+off, len);
- bcopy(b+off, b, len);
- if (bcmp(b, abc, len))
- exit(1);
- }
- }
-}
-exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- if ./try 2>/dev/null; then
- echo "Yes, it can."
- val="$define"
- else
- echo "It can't, sorry."
- case "$d_memmove" in
- "$define") echo "But that's Ok since you have memmove()." ;;
- esac
- fi
- else
- echo "(I can't compile the test program, so we'll assume not...)"
- case "$d_memmove" in
- "$define") echo "But that's Ok since you have memmove()." ;;
- esac
- fi
- ;;
-esac
-$rm -f try.* try core
-set d_safebcpy
-eval $setvar
-
-: can memcpy handle overlapping blocks?
-val="$undef"
-case "$d_memcpy" in
-"$define")
- echo " "
- echo "Checking to see if your memcpy() can do overlapping copies..." >&4
- $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-# include <memory.h>
-#endif
-#ifdef I_STDLIB
-# include <stdlib.h>
-#endif
-#ifdef I_STRING
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#ifdef I_UNISTD
-# include <unistd.h> /* Needed for NetBSD */
-#endif
-int main()
-{
-char buf[128], abc[128];
-char *b;
-int len;
-int off;
-int align;
-
-/* Copy "abcde..." string to char abc[] so that gcc doesn't
- try to store the string in read-only memory. */
-memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
-
-for (align = 7; align >= 0; align--) {
- for (len = 36; len; len--) {
- b = buf+align;
- memcpy(b, abc, len);
- for (off = 1; off <= len; off++) {
- memcpy(b+off, b, len);
- memcpy(b, b+off, len);
- if (memcmp(b, abc, len))
- exit(1);
- }
- }
-}
-exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- if ./try 2>/dev/null; then
- echo "Yes, it can."
- val="$define"
- else
- echo "It can't, sorry."
- case "$d_memmove" in
- "$define") echo "But that's Ok since you have memmove()." ;;
- esac
- fi
- else
- echo "(I can't compile the test program, so we'll assume not...)"
- case "$d_memmove" in
- "$define") echo "But that's Ok since you have memmove()." ;;
- esac
- fi
- ;;
-esac
-$rm -f try.* try core
-set d_safemcpy
-eval $setvar
-
-: can memcmp be trusted to compare relative magnitude?
-val="$undef"
-case "$d_memcmp" in
-"$define")
- echo " "
- echo "Checking if your memcmp() can compare relative magnitude..." >&4
- $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-# include <memory.h>
-#endif
-#ifdef I_STDLIB
-# include <stdlib.h>
-#endif
-#ifdef I_STRING
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-#ifdef I_UNISTD
-# include <unistd.h> /* Needed for NetBSD */
-#endif
-int main()
-{
-char a = -1;
-char b = 0;
-if ((a < b) && memcmp(&a, &b, 1) < 0)
- exit(1);
-exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- if ./try 2>/dev/null; then
- echo "Yes, it can."
- val="$define"
- else
- echo "No, it can't (it uses signed chars)."
- fi
- else
- echo "(I can't compile the test program, so we'll assume not...)"
- fi
- ;;
-esac
-$rm -f try.* try core
-set d_sanemcmp
-eval $setvar
-
-: see if prototype for sbrk is available
-echo " "
-set d_sbrkproto sbrk $i_unistd unistd.h
-eval $hasproto
-
-: see if select exists
-set select d_select
-eval $inlibc
-
-: see if semctl exists
-set semctl d_semctl
-eval $inlibc
-
-: see if semget exists
-set semget d_semget
-eval $inlibc
-
-: see if semop exists
-set semop d_semop
-eval $inlibc
-
-: see how much of the 'sem*(2)' library is present.
-h_sem=true
-echo " "
-case "$d_semctl$d_semget$d_semop" in
-*"$undef"*) h_sem=false;;
-esac
-case "$osname" in
-freebsd)
- case "`ipcs 2>&1`" in
- "SVID messages"*"not configured"*)
- echo "Your $osname does not have the sem*(2) configured." >&4
- h_sem=false
- val="$undef"
- set semctl d_semctl
- eval $setvar
- set semget d_semget
- eval $setvar
- set semop d_semop
- eval $setvar
- ;;
- esac
- ;;
-esac
-: we could also check for sys/ipc.h ...
-if $h_sem && $test `./findhdr sys/sem.h`; then
- echo "You have the full sem*(2) library." >&4
- val="$define"
-else
- echo "You don't have the full sem*(2) library." >&4
- val="$undef"
-fi
-set d_sem
-eval $setvar
-
-: see whether sys/sem.h defines union semun
-echo " "
-$cat > try.c <<'END'
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-int main () { union semun semun; semun.buf = 0; }
-END
-set try
-if eval $compile; then
- echo "You have union semun in <sys/sem.h>." >&4
- val="$define"
-else
- echo "You do not have union semun in <sys/sem.h>." >&4
- val="$undef"
-fi
-$rm -f try try.c try.h
-set d_union_semun
-eval $setvar
-
-: see how to do semctl IPC_STAT
-case "$d_sem" in
-$define)
- : see whether semctl IPC_STAT can use union semun
- echo " "
- $cat > try.h <<END
-#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_IRWXU
-# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
-# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
-# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
-#endif
-END
-
- $cat > try.c <<END
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <errno.h>
-#include "try.h"
-#ifndef errno
-extern int errno;
-#endif
-#$d_union_semun HAS_UNION_SEMUN
-int main() {
- union semun
-#ifndef HAS_UNION_SEMUN
- {
- int val;
- struct semid_ds *buf;
- unsigned short *array;
- }
-#endif
- arg;
- int sem, st;
-
-#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
- sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
- if (sem > -1) {
- struct semid_ds argbuf;
- arg.buf = &argbuf;
-# ifdef IPC_STAT
- st = semctl(sem, 0, IPC_STAT, arg);
- if (st == 0)
- printf("semun\n");
- else
-# endif /* IPC_STAT */
- printf("semctl IPC_STAT failed: errno = %d\n", errno);
-# ifdef IPC_RMID
- if (semctl(sem, 0, IPC_RMID, arg) != 0)
-# endif /* IPC_RMID */
- printf("semctl IPC_RMID failed: errno = %d\n", errno);
- } else
-#endif /* IPC_PRIVATE && ... */
- printf("semget failed: errno = %d\n", errno);
- return 0;
-}
-END
- val="$undef"
- set try
- if eval $compile; then
- xxx=`./try`
- case "$xxx" in
- semun) val="$define" ;;
- esac
- fi
- $rm -f try try.c
- set d_semctl_semun
- eval $setvar
- case "$d_semctl_semun" in
- $define)
- echo "You can use union semun for semctl IPC_STAT." >&4
- also='also'
- ;;
- *) echo "You cannot use union semun for semctl IPC_STAT." >&4
- also=''
- ;;
- esac
-
- : see whether semctl IPC_STAT can use struct semid_ds pointer
- $cat > try.c <<'END'
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <sys/stat.h>
-#include "try.h"
-#include <stdio.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-int main() {
- struct semid_ds arg;
- int sem, st;
-
-#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
- sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
- if (sem > -1) {
-# ifdef IPC_STAT
- st = semctl(sem, 0, IPC_STAT, &arg);
- if (st == 0)
- printf("semid_ds\n");
- else
-# endif /* IPC_STAT */
- printf("semctl IPC_STAT failed: errno = %d\n", errno);
-# ifdef IPC_RMID
- if (semctl(sem, 0, IPC_RMID, &arg) != 0)
-# endif /* IPC_RMID */
- printf("semctl IPC_RMID failed: errno = %d\n", errno);
- } else
-#endif /* IPC_PRIVATE && ... */
- printf("semget failed: errno = %d\n", errno);
-
- return 0;
-}
-END
- val="$undef"
- set try
- if eval $compile; then
- xxx=`./try`
- case "$xxx" in
- semid_ds) val="$define" ;;
- esac
- fi
- $rm -f try try.c
- set d_semctl_semid_ds
- eval $setvar
- case "$d_semctl_semid_ds" in
- $define)
- echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
- ;;
- *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
- ;;
- esac
- $rm -f try.h
- ;;
-*) val="$undef"
-
- # We do not have the full sem*(2) library, so assume we can not
- # use either.
-
- set d_semctl_semun
- eval $setvar
-
- set d_semctl_semid_ds
- eval $setvar
- ;;
-esac
-
-: see if setegid exists
-set setegid d_setegid
-eval $inlibc
-
-: see if seteuid exists
-set seteuid d_seteuid
-eval $inlibc
-
-: see if setgrent exists
-set setgrent d_setgrent
-eval $inlibc
-
-: see if sethostent exists
-set sethostent d_sethent
-eval $inlibc
-
-: see if setlinebuf exists
-set setlinebuf d_setlinebuf
-eval $inlibc
-
-: see if setlocale exists
-set setlocale d_setlocale
-eval $inlibc
-
-: see if setnetent exists
-set setnetent d_setnent
-eval $inlibc
-
-: see if setprotoent exists
-set setprotoent d_setpent
-eval $inlibc
-
-: see if setpgid exists
-set setpgid d_setpgid
-eval $inlibc
-
-: see if setpgrp2 exists
-set setpgrp2 d_setpgrp2
-eval $inlibc
-
-: see if setpriority exists
-set setpriority d_setprior
-eval $inlibc
-
-: see if setproctitle exists
-set setproctitle d_setproctitle
-eval $inlibc
-
-: see if setpwent exists
-set setpwent d_setpwent
-eval $inlibc
-
-: see if setregid exists
-set setregid d_setregid
-eval $inlibc
-set setresgid d_setresgid
-eval $inlibc
-
-: see if setreuid exists
-set setreuid d_setreuid
-eval $inlibc
-set setresuid d_setresuid
-eval $inlibc
-
-: see if setrgid exists
-set setrgid d_setrgid
-eval $inlibc
-
-: see if setruid exists
-set setruid d_setruid
-eval $inlibc
-
-: see if setservent exists
-set setservent d_setsent
-eval $inlibc
-
-: see if setsid exists
-set setsid d_setsid
-eval $inlibc
-
-: see if setvbuf exists
-set setvbuf d_setvbuf
-eval $inlibc
-
-: see if sfio.h is available
-set sfio.h i_sfio
-eval $inhdr
-
-
-: see if sfio library is available
-case "$i_sfio" in
-$define)
- val=''
- set sfreserve val
- eval $inlibc
- ;;
-*)
- val="$undef"
- ;;
-esac
-: Ok, but do we want to use it.
-case "$val" in
-$define)
- case "$usesfio" in
- true|$define|[yY]*) dflt='y';;
- *) dflt='n';;
- esac
- echo "$package can use the sfio library, but it is experimental."
- case "$useperlio" in
- "$undef")
- echo "For sfio also the PerlIO abstraction layer is needed."
- echo "Earlier you said you wouldn't want that."
- ;;
- esac
- rp="You seem to have sfio available, do you want to try using it?"
- . ./myread
- case "$ans" in
- y|Y) echo "Ok, turning on both sfio and PerlIO, then."
- useperlio="$define"
- val="$define"
- ;;
- *) echo "Ok, avoiding sfio this time. I'll use stdio instead."
- val="$undef"
- ;;
- esac
- ;;
-*) case "$usesfio" in
- true|$define|[yY]*)
- echo "Sorry, cannot find sfio on this machine." >&4
- echo "Ignoring your setting of usesfio=$usesfio." >&4
- val="$undef"
- ;;
- esac
- ;;
-esac
-set d_sfio
-eval $setvar
-case "$d_sfio" in
-$define) usesfio='true';;
-*) usesfio='false';;
-esac
-case "$d_sfio" in
-$define) ;;
-*) : Remove sfio from list of libraries to use
- set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
- shift
- libs="$*"
- echo "libs = $libs" >&4
-;;
-esac
-
-
-: see if shmctl exists
-set shmctl d_shmctl
-eval $inlibc
-
-: see if shmget exists
-set shmget d_shmget
-eval $inlibc
-
-: see if shmat exists
-set shmat d_shmat
-eval $inlibc
-: see what shmat returns
-case "$d_shmat" in
-"$define")
- $cat >shmat.c <<'END'
-#include <sys/shm.h>
-void *shmat();
-END
- if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
- shmattype='void *'
- else
- shmattype='char *'
- fi
- echo "and it returns ($shmattype)." >&4
- : see if a prototype for shmat is available
- xxx=`./findhdr sys/shm.h`
- $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
- if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
- val="$define"
- else
- val="$undef"
- fi
- $rm -f shmat.[co]
- ;;
-*)
- val="$undef"
- ;;
-esac
-set d_shmatprototype
-eval $setvar
-
-: see if shmdt exists
-set shmdt d_shmdt
-eval $inlibc
-
-: see how much of the 'shm*(2)' library is present.
-h_shm=true
-echo " "
-case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
-*"$undef"*) h_shm=false;;
-esac
-case "$osname" in
-freebsd)
- case "`ipcs 2>&1`" in
- "SVID shared memory"*"not configured"*)
- echo "Your $osname does not have the shm*(2) configured." >&4
- h_shm=false
- val="$undef"
- set shmctl d_shmctl
- evat $setvar
- set shmget d_shmget
- evat $setvar
- set shmat d_shmat
- evat $setvar
- set shmdt d_shmdt
- evat $setvar
- ;;
- esac
- ;;
-esac
-: we could also check for sys/ipc.h ...
-if $h_shm && $test `./findhdr sys/shm.h`; then
- echo "You have the full shm*(2) library." >&4
- val="$define"
-else
- echo "You don't have the full shm*(2) library." >&4
- val="$undef"
-fi
-set d_shm
-eval $setvar
-
-echo " "
-: see if we have sigaction
-if set sigaction val -f d_sigaction; eval $csym; $val; then
- echo 'sigaction() found.' >&4
- $cat > try.c <<'EOP'
-#include <stdio.h>
-#include <sys/types.h>
-#include <signal.h>
-int main()
-{
- struct sigaction act, oact;
- act.sa_flags = 0;
- oact.sa_handler = 0;
- /* so that act and oact are used */
- exit(act.sa_flags == 0 && oact.sa_handler == 0);
-}
-EOP
- set try
- if eval $compile_ok; then
- val="$define"
- else
- echo "But you don't seem to have a useable struct sigaction." >&4
- val="$undef"
- fi
-else
- echo 'sigaction NOT found.' >&4
- val="$undef"
-fi
-set d_sigaction; eval $setvar
-$rm -f try try$_o try.c
-
-: see if sigsetjmp exists
-echo " "
-case "$d_sigsetjmp" in
-'')
- $cat >try.c <<'EOP'
-#include <setjmp.h>
-sigjmp_buf env;
-int set = 1;
-int main()
-{
- if (sigsetjmp(env,1))
- exit(set);
- set = 0;
- siglongjmp(env, 1);
- exit(1);
-}
-EOP
- set try
- if eval $compile; then
- if ./try >/dev/null 2>&1; then
- echo "POSIX sigsetjmp found." >&4
- val="$define"
- else
- $cat >&4 <<EOM
-Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
-I'll ignore them.
-EOM
- val="$undef"
- fi
- else
- echo "sigsetjmp not found." >&4
- val="$undef"
- fi
- ;;
-*) val="$d_sigsetjmp"
- case "$d_sigsetjmp" in
- $define) echo "POSIX sigsetjmp found." >&4;;
- $undef) echo "sigsetjmp not found." >&4;;
- esac
- ;;
-esac
-set d_sigsetjmp
-eval $setvar
-$rm -f try.c try
-
-: see if socks5_init exists
-set socks5_init d_socks5_init
-eval $inlibc
-
-: see if sys/stat.h is available
-set sys/stat.h i_sysstat
-eval $inhdr
-
-
-: see if stat knows about block sizes
-echo " "
-echo "Checking to see if your struct stat has st_blocks field..." >&4
-set d_statblks stat st_blocks $i_sysstat sys/stat.h
-eval $hasfield
-
-
-: see if this is a sys/vfs.h system
-set sys/vfs.h i_sysvfs
-eval $inhdr
-
-
-: see if this is a sys/statfs.h system
-set sys/statfs.h i_sysstatfs
-eval $inhdr
-
-
-echo " "
-echo "Checking to see if your system supports struct statfs..." >&4
-set d_statfs_s statfs $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
-eval $hasstruct
-case "$d_statfs_s" in
-"$define") echo "Yes, it does." ;;
-*) echo "No, it doesn't." ;;
-esac
-
-
-
-: see if struct statfs knows about f_flags
-case "$d_statfs_s" in
-define)
- echo " "
- echo "Checking to see if your struct statfs has f_flags field..." >&4
- set d_statfs_f_flags statfs f_flags $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h
- eval $hasfield
- ;;
-*) val="$undef"
- set d_statfs_f_flags
- eval $setvar
- ;;
-esac
-case "$d_statfs_f_flags" in
-"$define") echo "Yes, it does." ;;
-*) echo "No, it doesn't." ;;
-esac
-
-: see if _ptr and _cnt from stdio act std
-echo " "
-
-if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
- echo "(Looks like you have stdio.h from BSD.)"
- case "$stdio_ptr" in
- '') stdio_ptr='((fp)->_p)'
- ptr_lval=$define
- ;;
- *) ptr_lval=$d_stdio_ptr_lval;;
- esac
- case "$stdio_cnt" in
- '') stdio_cnt='((fp)->_r)'
- cnt_lval=$define
- ;;
- *) cnt_lval=$d_stdio_cnt_lval;;
- esac
- case "$stdio_base" in
- '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
- esac
- case "$stdio_bufsiz" in
- '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
- esac
-elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
- echo "(Looks like you have stdio.h from Linux.)"
- case "$stdio_ptr" in
- '') stdio_ptr='((fp)->_IO_read_ptr)'
- ptr_lval=$define
- ;;
- *) ptr_lval=$d_stdio_ptr_lval;;
- esac
- case "$stdio_cnt" in
- '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
- cnt_lval=$undef
- ;;
- *) cnt_lval=$d_stdio_cnt_lval;;
- esac
- case "$stdio_base" in
- '') stdio_base='((fp)->_IO_read_base)';;
- esac
- case "$stdio_bufsiz" in
- '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
- esac
-else
- case "$stdio_ptr" in
- '') stdio_ptr='((fp)->_ptr)'
- ptr_lval=$define
- ;;
- *) ptr_lval=$d_stdio_ptr_lval;;
- esac
- case "$stdio_cnt" in
- '') stdio_cnt='((fp)->_cnt)'
- cnt_lval=$define
- ;;
- *) cnt_lval=$d_stdio_cnt_lval;;
- esac
- case "$stdio_base" in
- '') stdio_base='((fp)->_base)';;
- esac
- case "$stdio_bufsiz" in
- '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
- esac
-fi
-
-: test whether _ptr and _cnt really work
-echo "Checking how std your stdio is..." >&4
-$cat >try.c <<EOP
-#include <stdio.h>
-#define FILE_ptr(fp) $stdio_ptr
-#define FILE_cnt(fp) $stdio_cnt
-int main() {
- FILE *fp = fopen("try.c", "r");
- char c = getc(fp);
- if (
- 18 <= FILE_cnt(fp) &&
- strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
- )
- exit(0);
- exit(1);
-}
-EOP
-val="$undef"
-set try
-if eval $compile; then
- if ./try; then
- echo "Your stdio acts pretty std."
- val="$define"
- else
- echo "Your stdio isn't very std."
- fi
-else
- echo "Your stdio doesn't appear very std."
-fi
-$rm -f try.c try
-set d_stdstdio
-eval $setvar
-
-: Can _ptr be used as an lvalue?
-case "$d_stdstdio$ptr_lval" in
-$define$define) val=$define ;;
-*) val=$undef ;;
-esac
-set d_stdio_ptr_lval
-eval $setvar
-
-: Can _cnt be used as an lvalue?
-case "$d_stdstdio$cnt_lval" in
-$define$define) val=$define ;;
-*) val=$undef ;;
-esac
-set d_stdio_cnt_lval
-eval $setvar
-
-
-: test whether setting _ptr sets _cnt as a side effect
-d_stdio_ptr_lval_sets_cnt="$undef"
-d_stdio_ptr_lval_nochange_cnt="$undef"
-case "$d_stdio_ptr_lval$d_stdstdio" in
-$define$define)
- echo "Checking to see what happens if we set the stdio ptr..." >&4
-$cat >try.c <<EOP
-#include <stdio.h>
-/* Can we scream? */
-/* Eat dust sed :-) */
-/* In the buffer space, no one can hear you scream. */
-#define FILE_ptr(fp) $stdio_ptr
-#define FILE_cnt(fp) $stdio_cnt
-#include <sys/types.h>
-int main() {
- FILE *fp = fopen("try.c", "r");
- int c;
- char *ptr;
- size_t cnt;
- if (!fp) {
- puts("Fail even to read");
- exit(1);
- }
- c = getc(fp); /* Read away the first # */
- if (c == EOF) {
- puts("Fail even to read");
- exit(1);
- }
- if (!(
- 18 <= FILE_cnt(fp) &&
- strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
- )) {
- puts("Fail even to read");
- exit (1);
- }
- ptr = (char*) FILE_ptr(fp);
- cnt = (size_t)FILE_cnt(fp);
-
- FILE_ptr(fp) += 42;
-
- if ((char*)FILE_ptr(fp) != (ptr + 42)) {
- printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
- exit (1);
- }
- if (FILE_cnt(fp) <= 20) {
- printf ("Fail (<20 chars to test)");
- exit (1);
- }
- if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
- puts("Fail compare");
- exit (1);
- }
- if (cnt == FILE_cnt(fp)) {
- puts("Pass_unchanged");
- exit (0);
- }
- if (FILE_cnt(fp) == (cnt - 42)) {
- puts("Pass_changed");
- exit (0);
- }
- printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
- return 1;
-
-}
-EOP
- set try
- if eval $compile; then
- case `./try$exe_ext` in
- Pass_changed)
- echo "Increasing ptr in your stdio decreases cnt by the same amount. Good." >&4
- d_stdio_ptr_lval_sets_cnt="$define" ;;
- Pass_unchanged)
- echo "Increasing ptr in your stdio leaves cnt unchanged. Good." >&4
- d_stdio_ptr_lval_nochange_cnt="$define" ;;
- Fail*)
- echo "Increasing ptr in your stdio didn't do exactly what I expected. We'll not be doing that then." >&4 ;;
- *)
- echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
- esac
- else
- echo "It seems we can't set ptr in your stdio. Nevermind." >&4
- fi
- $rm -f try.c try
- ;;
-esac
-
-: see if _base is also standard
-val="$undef"
-case "$d_stdstdio" in
-$define)
- $cat >try.c <<EOP
-#include <stdio.h>
-#define FILE_base(fp) $stdio_base
-#define FILE_bufsiz(fp) $stdio_bufsiz
-int main() {
- FILE *fp = fopen("try.c", "r");
- char c = getc(fp);
- if (
- 19 <= FILE_bufsiz(fp) &&
- strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
- )
- exit(0);
- exit(1);
-}
-EOP
- set try
- if eval $compile; then
- if ./try; then
- echo "And its _base field acts std."
- val="$define"
- else
- echo "But its _base field isn't std."
- fi
- else
- echo "However, it seems to be lacking the _base field."
- fi
- $rm -f try.c try
- ;;
-esac
-set d_stdiobase
-eval $setvar
-
-$cat >&4 <<EOM
-Checking how to access stdio streams by file descriptor number...
-EOM
-case "$stdio_stream_array" in
-'') $cat >try.c <<EOCP
-#include <stdio.h>
-int main() {
- if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
- printf("yes\n");
-}
-EOCP
- for s in _iob __iob __sF
- do
- set try -DSTDIO_STREAM_ARRAY=$s
- if eval $compile; then
- case "`./try$exe_ext`" in
- yes) stdio_stream_array=$s; break ;;
- esac
- fi
- done
- $rm -f try.* try$exe_ext
-esac
-case "$stdio_stream_array" in
-'') $cat >&4 <<EOM
-I can't figure out how to access stdio streams by file descriptor number.
-EOM
- d_stdio_stream_array="$undef"
- ;;
-*) $cat >&4 <<EOM
-You can access stdio streams by file descriptor number by the $stdio_stream_array array.
-EOM
- d_stdio_stream_array="$define"
- ;;
-esac
-
-: see if strcoll exists
-set strcoll d_strcoll
-eval $inlibc
-
-: check for structure copying
-echo " "
-echo "Checking to see if your C compiler can copy structs..." >&4
-$cat >try.c <<'EOCP'
-int main()
-{
- struct blurfl {
- int dyick;
- } foo, bar;
-
- foo = bar;
-}
-EOCP
-if $cc -c try.c >/dev/null 2>&1 ; then
- val="$define"
- echo "Yup, it can."
-else
- val="$undef"
- echo "Nope, it can't."
-fi
-set d_strctcpy
-eval $setvar
-$rm -f try.*
-
-: see if strerror and/or sys_errlist[] exist
-echo " "
-if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
- if set strerror val -f d_strerror; eval $csym; $val; then
- echo 'strerror() found.' >&4
- d_strerror="$define"
- d_strerrm='strerror(e)'
- if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
- echo "(You also have sys_errlist[], so we could roll our own strerror.)"
- d_syserrlst="$define"
- else
- echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
- d_syserrlst="$undef"
- fi
- elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
- $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
- echo 'strerror() found in string header.' >&4
- d_strerror="$define"
- d_strerrm='strerror(e)'
- if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
- echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
- d_syserrlst="$define"
- else
- echo "(You don't appear to have any sys_errlist[], how can this be?)"
- d_syserrlst="$undef"
- fi
- elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
- echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
- d_strerror="$undef"
- d_syserrlst="$define"
- d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
- else
- echo 'strerror() and sys_errlist[] NOT found.' >&4
- d_strerror="$undef"
- d_syserrlst="$undef"
- d_strerrm='"unknown"'
- fi
-fi
-
-: see if strtod exists
-set strtod d_strtod
-eval $inlibc
-
-: see if strtol exists
-set strtol d_strtol
-eval $inlibc
-
-: see if strtold exists
-set strtold d_strtold
-eval $inlibc
-
-: see if strtoll exists
-set strtoll d_strtoll
-eval $inlibc
-
-case "$d_longlong-$d_strtoll" in
-"$define-$define")
- $cat <<EOM
-Checking whether your strtoll() works okay...
-EOM
- $cat >try.c <<'EOCP'
-#include <errno.h>
-#ifdef __hpux
-#define strtoll __strtoll
-#endif
-#ifdef __EMX__
-#define strtoll _strtoll
-#endif
-#include <stdio.h>
-extern long long int strtoll(char *s, char **, int);
-static int bad = 0;
-int check(char *s, long long ell, int een) {
- long long gll;
- errno = 0;
- gll = strtoll(s, 0, 10);
- if (!((gll == ell) && (errno == een)))
- bad++;
-}
-int main() {
- check(" 1", 1LL, 0);
- check(" 0", 0LL, 0);
- check("-1", -1LL, 0);
- check("-9223372036854775808", -9223372036854775808LL, 0);
- check("-9223372036854775808", -9223372036854775808LL, 0);
- check(" 9223372036854775807", 9223372036854775807LL, 0);
- check("-9223372036854775808", -9223372036854775808LL, 0);
- check(" 9223372036854775808", 9223372036854775807LL, ERANGE);
- check("-9223372036854775809", -9223372036854775808LL, ERANGE);
- if (!bad)
- printf("ok\n");
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try`
- case "$yyy" in
- ok) echo "Your strtoll() seems to be working okay." ;;
- *) cat <<EOM >&4
-Your strtoll() doesn't seem to be working okay.
-EOM
- d_strtoll="$undef"
- ;;
- esac
- else
- echo "(I can't seem to compile the test program--assuming it doesn't)"
- d_strtoll="$undef"
- fi
- ;;
-esac
-
-: see if strtoul exists
-set strtoul d_strtoul
-eval $inlibc
-
-: see if strtoull exists
-set strtoull d_strtoull
-eval $inlibc
-
-case "$d_longlong-$d_strtoull" in
-"$define-$define")
- $cat <<EOM
-Checking whether your strtoull() works okay...
-EOM
- $cat >try.c <<'EOCP'
-#include <errno.h>
-#ifdef __hpux
-#define strtoull __strtoull
-#endif
-#include <stdio.h>
-extern unsigned long long int strtoull(char *s, char **, int);
-static int bad = 0;
-int check(char *s, long long eull, int een) {
- long long gull;
- errno = 0;
- gull = strtoull(s, 0, 10);
- if (!((gull == eull) && (errno == een)))
- bad++;
-}
-int main() {
- check(" 1", 1LL, 0);
- check(" 0", 0LL, 0);
- check("18446744073709551615", 18446744073709551615ULL, 0);
- check("18446744073709551616", 18446744073709551615ULL, ERANGE);
- if (!bad)
- printf("ok\n");
-}
-EOCP
- set try
- if eval $compile; then
- case "`./try`" in
- ok) echo "Your strtoull() seems to be working okay." ;;
- *) cat <<EOM >&4
-Your strtoull() doesn't seem to be working okay.
-EOM
- d_strtoull="$undef"
- ;;
- esac
- fi
- ;;
-esac
-
-: see if strtouq exists
-set strtouq d_strtouq
-eval $inlibc
-
-: see if strxfrm exists
-set strxfrm d_strxfrm
-eval $inlibc
-
-: see if symlink exists
-set symlink d_symlink
-eval $inlibc
-
-: see if syscall exists
-set syscall d_syscall
-eval $inlibc
-
-: see if sysconf exists
-set sysconf d_sysconf
-eval $inlibc
-
-: see if system exists
-set system d_system
-eval $inlibc
-
-: see if tcgetpgrp exists
-set tcgetpgrp d_tcgetpgrp
-eval $inlibc
-
-: see if tcsetpgrp exists
-set tcsetpgrp d_tcsetpgrp
-eval $inlibc
-
-: see if prototype for telldir is available
-echo " "
-set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
-eval $hasproto
-
-: see if this is a sys/times.h system
-set sys/times.h i_systimes
-eval $inhdr
-
-: see if times exists
-echo " "
-if set times val -f d_times; eval $csym; $val; then
- echo 'times() found.' >&4
- d_times="$define"
- inc=''
- case "$i_systimes" in
- "$define") inc='sys/times.h';;
- esac
- rp="What is the type returned by times() on this system?"
- set clock_t clocktype long stdio.h sys/types.h $inc
- eval $typedef_ask
-else
- echo 'times() NOT found, hope that will do.' >&4
- d_times="$undef"
- clocktype='int'
-fi
-
-: see if truncate exists
-set truncate d_truncate
-eval $inlibc
-
-: see if tzname[] exists
-echo " "
-if set tzname val -a d_tzname; eval $csym; $val; then
- val="$define"
- echo 'tzname[] found.' >&4
-else
- val="$undef"
- echo 'tzname[] NOT found.' >&4
-fi
-set d_tzname
-eval $setvar
-
-: see if umask exists
-set umask d_umask
-eval $inlibc
-
-: see if ustat exists
-set ustat d_ustat
-eval $inlibc
-
-: backward compatibility for d_hvfork
-if test X$d_hvfork != X; then
- d_vfork="$d_hvfork"
- d_hvfork=''
-fi
-: see if there is a vfork
-val=''
-set vfork val
-eval $inlibc
-
-: Ok, but do we want to use it. vfork is reportedly unreliable in
-: perl on Solaris 2.x, and probably elsewhere.
-case "$val" in
-$define)
- echo " "
- case "$usevfork" in
- false) dflt='n';;
- *) dflt='y';;
- esac
- cat <<'EOM'
-
-Perl can only use a vfork() that doesn't suffer from strict
-restrictions on calling functions or modifying global data in
-the child. For example, glibc-2.1 contains such a vfork()
-that is unsuitable. If your system provides a proper fork()
-call, chances are that you do NOT want perl to use vfork().
-
-EOM
- rp="Do you still want to use vfork()?"
- . ./myread
- case "$ans" in
- y|Y) ;;
- *)
- echo "Ok, we won't use vfork()."
- val="$undef"
- ;;
- esac
- ;;
-esac
-set d_vfork
-eval $setvar
-case "$d_vfork" in
-$define) usevfork='true';;
-*) usevfork='false';;
-esac
-
-: see if this is an sysdir system
-set sys/dir.h i_sysdir
-eval $inhdr
-
-: see if this is an sysndir system
-set sys/ndir.h i_sysndir
-eval $inhdr
-
-: see if closedir exists
-set closedir d_closedir
-eval $inlibc
-
-case "$d_closedir" in
-"$define")
- echo " "
- echo "Checking whether closedir() returns a status..." >&4
- cat > closedir.c <<EOM
-#$i_dirent I_DIRENT /**/
-#$i_sysdir I_SYS_DIR /**/
-#$i_sysndir I_SYS_NDIR /**/
-#$i_systypes I_SYS_TYPES /**/
-
-#if defined(I_SYS_TYPES)
-#include <sys/types.h>
-#endif
-#if defined(I_DIRENT)
-#include <dirent.h>
-#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
-#include <sys/dir.h>
-#endif
-#else
-#ifdef I_SYS_NDIR
-#include <sys/ndir.h>
-#else
-#ifdef I_SYS_DIR
-#ifdef hp9000s500
-#include <ndir.h> /* may be wrong in the future */
-#else
-#include <sys/dir.h>
-#endif
-#endif
-#endif
-#endif
-int main() { return closedir(opendir(".")); }
-EOM
- set closedir
- if eval $compile_ok; then
- if ./closedir > /dev/null 2>&1 ; then
- echo "Yes, it does."
- val="$undef"
- else
- echo "No, it doesn't."
- val="$define"
- fi
- else
- echo "(I can't seem to compile the test program--assuming it doesn't)"
- val="$define"
- fi
- ;;
-*)
- val="$undef";
- ;;
-esac
-set d_void_closedir
-eval $setvar
-$rm -f closedir*
-: see if there is a wait4
-set wait4 d_wait4
-eval $inlibc
-
-: see if waitpid exists
-set waitpid d_waitpid
-eval $inlibc
-
-: see if wcstombs exists
-set wcstombs d_wcstombs
-eval $inlibc
-
-: see if wctomb exists
-set wctomb d_wctomb
-eval $inlibc
-
-: preserve RCS keywords in files with variable substitution, grrr
-Date='$Date'
-Id='$Id'
-Log='$Log'
-RCSfile='$RCSfile'
-Revision='$Revision'
-
-case "$crosscompile" in
-''|[nN]*) crosscompile="$undef" ;;
-esac
-
-case "$osname" in
-next|rhapsody|darwin) multiarch="$define" ;;
-esac
-case "$multiarch" in
-''|[nN]*) multiarch="$undef" ;;
-esac
-
-: check for alignment requirements
-echo " "
-case "$crosscompile$multiarch" in
-*$define*)
- $cat <<EOM
-You seem to be either cross-compiling or doing a multiarchitecture build,
-skipping the memory alignment check.
-
-EOM
- case "$alignbytes" in
- '') alignbytes=8 ;;
- esac
- ;;
-*)
- case "$alignbytes" in
- '') echo "Checking alignment constraints..." >&4
- if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
- $cat >try.c <<'EOCP'
-typedef long double NV;
-EOCP
- else
- $cat >try.c <<'EOCP'
-typedef double NV;
-EOCP
- fi
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-struct foobar {
- char foo;
- NV bar;
-} try_algn;
-int main()
-{
- printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
- return(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- dflt=`./try`
- else
- dflt='8'
- echo "(I can't seem to compile the test program...)"
- fi
- ;;
- *) dflt="$alignbytes"
- ;;
- esac
- rp="Doubles must be aligned on a how-many-byte boundary?"
- . ./myread
- alignbytes="$ans"
- $rm -f try.c try
- ;;
-esac
-
-
-: set the base revision
-baserev=5.0
-
-: check for ordering of bytes in a long
-echo " "
-case "$crosscompile$multiarch" in
-*$define*)
- $cat <<EOM
-You seem to be either cross-compiling or doing a multiarchitecture build,
-skipping the byteorder check.
-
-EOM
- byteorder='0xffff'
- ;;
-*)
- case "$byteorder" in
- '')
- $cat <<'EOM'
-In the following, larger digits indicate more significance. A big-endian
-machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
-little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
-machines may have weird orders like 3412. A Cray will report 87654321,
-an Alpha will report 12345678. If the test program works the default is
-probably right.
-I'm now running the test program...
-EOM
- $cat >try.c <<'EOCP'
-#include <stdio.h>
-int main()
-{
- int i;
- union {
- unsigned long l;
- char c[sizeof(long)];
- } u;
-
- if (sizeof(long) > 4)
- u.l = (0x08070605L << 32) | 0x04030201L;
- else
- u.l = 0x04030201L;
- for (i = 0; i < sizeof(long); i++)
- printf("%c", u.c[i]+'0');
- printf("\n");
- exit(0);
-}
-EOCP
- xxx_prompt=y
- set try
- if eval $compile && ./try > /dev/null; then
- dflt=`./try`
- case "$dflt" in
- [1-4][1-4][1-4][1-4]|12345678|87654321)
- echo "(The test program ran ok.)"
- echo "byteorder=$dflt"
- xxx_prompt=n
- ;;
- ????|????????) echo "(The test program ran ok.)" ;;
- *) echo "(The test program didn't run right for some reason.)" ;;
- esac
- else
- dflt='4321'
- cat <<'EOM'
-(I can't seem to compile the test program. Guessing big-endian...)
-EOM
- fi
- case "$xxx_prompt" in
- y)
- rp="What is the order of bytes in a long?"
- . ./myread
- byteorder="$ans"
- ;;
- *) byteorder=$dflt
- ;;
- esac
- ;;
- esac
- $rm -f try.c try
- ;;
-esac
-
-
-: how do we catenate cpp tokens here?
-echo " "
-echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
-$cat >cpp_stuff.c <<'EOCP'
-#define RCAT(a,b)a/**/b
-#define ACAT(a,b)a ## b
-RCAT(Rei,ser)
-ACAT(Cir,cus)
-EOCP
-$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
-if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
- echo "Oh! Smells like ANSI's been here." >&4
- echo "We can catify or stringify, separately or together!"
- cpp_stuff=42
-elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
- echo "Ah, yes! The good old days!" >&4
- echo "However, in the good old days we don't know how to stringify and"
- echo "catify at the same time."
- cpp_stuff=1
-else
- $cat >&4 <<EOM
-Hmm, I don't seem to be able to catenate tokens with your cpp. You're going
-to have to edit the values of CAT[2-5] in config.h...
-EOM
- cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
-fi
-$rm -f cpp_stuff.*
-
-: see if this is a db.h system
-set db.h i_db
-eval $inhdr
-
-case "$i_db" in
-$define)
- : Check db version.
- echo " "
- echo "Checking Berkeley DB version ..." >&4
- $cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
-#endif
-#include <sys/types.h>
-#include <stdio.h>
-#include <db.h>
-int main()
-{
-#ifdef DB_VERSION_MAJOR /* DB version >= 2 */
- int Major, Minor, Patch ;
- unsigned long Version ;
- (void)db_version(&Major, &Minor, &Patch) ;
- printf("You have Berkeley DB Version 2 or greater\n");
-
- printf("db.h is from Berkeley DB Version %d.%d.%d\n",
- DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
- printf("libdb is from Berkeley DB Version %d.%d.%d\n",
- Major, Minor, Patch) ;
-
- /* check that db.h & libdb are compatible */
- if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
- printf("db.h and libdb are incompatible\n") ;
- exit(3);
- }
-
- printf("db.h and libdb are compatible\n") ;
-
- Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
- + DB_VERSION_PATCH ;
-
- /* needs to be >= 2.3.4 */
- if (Version < 2003004) {
- /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
- printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
- exit(2);
- }
-
- exit(0);
-#else
-#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
- printf("You have Berkeley DB Version 1\n");
- exit(0); /* DB version < 2: the coast is clear. */
-#else
- exit(1); /* <db.h> not Berkeley DB? */
-#endif
-#endif
-}
-EOCP
- set try
- if eval $compile_ok && ./try; then
- echo 'Looks OK.' >&4
- else
- echo "I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB." >&4
- i_db=$undef
- case " $libs " in
- *"-ldb "*)
- : Remove db from list of libraries to use
- echo "Removing unusable -ldb from library list" >&4
- set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
- shift
- libs="$*"
- echo "libs = $libs" >&4
- ;;
- esac
- fi
- $rm -f try.*
- ;;
-esac
-
-case "$i_db" in
-define)
- : Check the return type needed for hash
- echo " "
- echo "Checking return type needed for hash for Berkeley DB ..." >&4
- $cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
-#endif
-#include <sys/types.h>
-#include <db.h>
-
-#ifndef DB_VERSION_MAJOR
-u_int32_t hash_cb (ptr, size)
-const void *ptr;
-size_t size;
-{
-}
-HASHINFO info;
-int main()
-{
- info.hash = hash_cb;
-}
-#endif
-EOCP
- if $cc $ccflags -c try.c >try.out 2>&1 ; then
- if $contains warning try.out >>/dev/null 2>&1 ; then
- db_hashtype='int'
- else
- db_hashtype='u_int32_t'
- fi
- else
- : XXX Maybe we should just give up here.
- db_hashtype=u_int32_t
- $cat try.out >&4
- echo "Help: I can't seem to compile the db test program." >&4
- echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
- fi
- $rm -f try.*
- echo "Your version of Berkeley DB uses $db_hashtype for hash."
- ;;
-*) db_hashtype=u_int32_t
- ;;
-esac
-case "$i_db" in
-define)
- : Check the return type needed for prefix
- echo " "
- echo "Checking return type needed for prefix for Berkeley DB ..." >&4
- cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
-#endif
-#include <sys/types.h>
-#include <db.h>
-
-#ifndef DB_VERSION_MAJOR
-size_t prefix_cb (key1, key2)
-const DBT *key1;
-const DBT *key2;
-{
-}
-BTREEINFO info;
-int main()
-{
- info.prefix = prefix_cb;
-}
-#endif
-EOCP
- if $cc $ccflags -c try.c >try.out 2>&1 ; then
- if $contains warning try.out >>/dev/null 2>&1 ; then
- db_prefixtype='int'
- else
- db_prefixtype='size_t'
- fi
- else
- db_prefixtype='size_t'
- : XXX Maybe we should just give up here.
- $cat try.out >&4
- echo "Help: I can't seem to compile the db test program." >&4
- echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
- fi
- $rm -f try.*
- echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
- ;;
-*) db_prefixtype='size_t'
- ;;
-esac
-
-: check for void type
-echo " "
-echo "Checking to see how well your C compiler groks the void type..." >&4
-case "$voidflags" in
-'')
- $cat >try.c <<'EOCP'
-#if TRY & 1
-void sub() {
-#else
-sub() {
-#endif
- extern void moo(); /* function returning void */
- void (*goo)(); /* ptr to func returning void */
-#if TRY & 8
- void *hue; /* generic ptr */
-#endif
-#if TRY & 2
- void (*foo[10])();
-#endif
-
-#if TRY & 4
- if(goo == moo) {
- exit(0);
- }
-#endif
- exit(0);
-}
-int main() { sub(); }
-EOCP
- if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
- voidflags=$defvoidused
- echo "Good. It appears to support void to the level $package wants.">&4
- if $contains warning .out >/dev/null 2>&1; then
- echo "However, you might get some warnings that look like this:"
- $cat .out
- fi
- else
-echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
- if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
- echo "It supports 1..."
- if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
- echo "It also supports 2..."
- if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
- voidflags=7
- echo "And it supports 4 but not 8 definitely."
- else
- echo "It doesn't support 4..."
- if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
- voidflags=11
- echo "But it supports 8."
- else
- voidflags=3
- echo "Neither does it support 8."
- fi
- fi
- else
- echo "It does not support 2..."
- if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
- voidflags=13
- echo "But it supports 4 and 8."
- else
- if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
- voidflags=5
- echo "And it supports 4 but has not heard about 8."
- else
- echo "However it supports 8 but not 4."
- fi
- fi
- fi
- else
- echo "There is no support at all for void."
- voidflags=0
- fi
- fi
-esac
-case "$voidflags" in
-"$defvoidused") ;;
-*) $cat >&4 <<'EOM'
- Support flag bits are:
- 1: basic void declarations.
- 2: arrays of pointers to functions returning void.
- 4: operations between pointers to and addresses of void functions.
- 8: generic void pointers.
-EOM
- dflt="$voidflags";
- rp="Your void support flags add up to what?"
- . ./myread
- voidflags="$ans"
- ;;
-esac
-$rm -f try.* .out
-
-
-: How can we generate normalized random numbers ?
-echo " "
-echo "Looking for a random number function..." >&4
-case "$randfunc" in
-'')
- if set drand48 val -f; eval $csym; $val; then
- dflt="drand48"
- echo "Good, found drand48()." >&4
- elif set random val -f; eval $csym; $val; then
- dflt="random"
- echo "OK, found random()." >&4
- else
- dflt="rand"
- echo "Yick, looks like I have to use rand()." >&4
- fi
- echo " "
- ;;
-*)
- dflt="$randfunc"
- ;;
-esac
-cont=true
-
-case "$ccflags" in
-*-Dmy_rand=*|*-Dmy_srand=*)
- echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
- ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
- ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
- ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
- ;;
-esac
-
-while $test "$cont"; do
- rp="Use which function to generate random numbers?"
- . ./myread
- if $test "$ans" = "$dflt"; then
- : null
- else
- randbits=''
- fi
- randfunc="$ans"
- if set $ans val -f; eval $csym; $val; then
- cont=''
- else
- dflt=y
- rp="I cannot find function $ans. Use that name anyway?"
- . ./myread
- dflt=rand
- case "$ans" in
- [yY]*) cont='';;
- esac
- fi
- case "$cont" in
- '')
- case "$randfunc" in
- drand48)
- drand01="drand48()"
- seedfunc="srand48"
- randbits=48
- randseedtype=long
- ;;
- rand|random)
- case "$randbits" in
- '')
-echo "Checking to see how many bits your $randfunc() function produces..." >&4
- $cat >try.c <<EOCP
-#$i_unistd I_UNISTD
-#$i_stdlib I_STDLIB
-#include <stdio.h>
-#ifdef I_UNISTD
-# include <unistd.h>
-#endif
-#ifdef I_STDLIB
-# include <stdlib.h>
-#endif
-int main()
-{
- register int i;
- register unsigned long tmp;
- register unsigned long max = 0L;
-
- for (i = 1000; i; i--) {
- tmp = (unsigned long) $randfunc();
- if (tmp > max) max = tmp;
- }
- for (i = 0; max; i++)
- max /= 2;
- printf("%d\n",i);
-}
-EOCP
- set try
- if eval $compile_ok; then
- dflt=`try`
- else
- dflt='?'
- echo "(I can't seem to compile the test program...)"
- fi
- ;;
- *)
- dflt="$randbits"
- ;;
- esac
- rp="How many bits does your $randfunc() function produce?"
- . ./myread
- randbits="$ans"
- $rm -f try.c try
- drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
- seedfunc="s$randfunc"
- randseedtype=unsigned
- ;;
- *)
- dflt="31"
- rp="How many bits does your $randfunc() function produce?"
- . ./myread
- randbits="$ans"
- seedfunc="s$randfunc"
- drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
- if set $seedfunc val -f; eval $csym; $val; then
- echo "(Using $seedfunc() to seed random generator)"
- else
- echo "(Warning: no $seedfunc() to seed random generator)"
- seedfunc=rand
- fi
- randseedtype=unsigned
- ;;
- esac
- ;;
- esac
-done
-
-echo " "
-echo "Determining whether or not we are on an EBCDIC system..." >&4
-$cat >tebcdic.c <<'EOM'
-int main()
-{
- if ('M'==0xd4) return 0;
- return 1;
-}
-EOM
-
-val=$undef
-set tebcdic
-if eval $compile_ok; then
- if ./tebcdic; then
- echo "You seem to speak EBCDIC." >&4
- val="$define"
- else
- echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
- fi
-else
- echo "I'm unable to compile the test program." >&4
- echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
-fi
-$rm -f tebcdic.c tebcdic
-set ebcdic
-eval $setvar
-
-echo " "
-$cat >&4 <<EOM
-Checking how to flush all pending stdio output...
-EOM
-# I only know how to find the first 32 possibly open files on SunOS.
-# See also hints/sunos_4_1.sh and util.c --AD
-case "$osname" in
-sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
-esac
-$cat >>try.c <<EOCP
-#include <stdio.h>
-#$i_unistd I_UNISTD
-#ifdef I_UNISTD
-# include <unistd.h>
-#endif
-#$d_sysconf HAS_SYSCONF
-#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
-#ifdef HAS_STDIO_STREAM_ARRAY
-# define STDIO_STREAM_ARRAY $stdio_stream_array
-#endif
-int main() {
- FILE* p = fopen("try.out", "w");
-#ifdef TRY_FPUTC
- fputc('x', p);
-#else
-# ifdef TRY_FPRINTF
- fprintf(p, "x");
-# endif
-#endif
-#ifdef TRY_FFLUSH_NULL
- fflush(NULL);
-#endif
-#ifdef TRY_FFLUSH_ALL
- {
- long open_max = -1;
-# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
- open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
-# else
-# if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
- open_max = sysconf(_SC_OPEN_MAX);
-# else
-# ifdef FOPEN_MAX
- open_max = FOPEN_MAX;
-# else
-# ifdef OPEN_MAX
- open_max = OPEN_MAX;
-# else
-# ifdef _NFILE
- open_max = _NFILE;
-# endif
-# endif
-# endif
-# endif
-# endif
-# ifdef HAS_STDIO_STREAM_ARRAY
- if (open_max > 0) {
- long i;
- for (i = 0; i < open_max; i++)
- if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
- STDIO_STREAM_ARRAY[i]._file < open_max &&
- STDIO_STREAM_ARRAY[i]._flag)
- fflush(&STDIO_STREAM_ARRAY[i]);
- }
- }
-# endif
-#endif
- _exit(42);
-}
-EOCP
-: first we have to find out how _not_ to flush
-if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
- output=''
- set try -DTRY_FPUTC
- if eval $compile; then
- $rm -f try.out
- ./try$exe_ext 2>/dev/null
- if $test ! -s try.out -a "X$?" = X42; then
- output=-DTRY_FPUTC
- fi
- fi
- case "$output" in
- '')
- set try -DTRY_FPRINTF
- $rm -f try.out
- if eval $compile; then
- $rm -f try.out
- ./try$exe_ext 2>/dev/null
- if $test ! -s try.out -a "X$?" = X42; then
- output=-DTRY_FPRINTF
- fi
- fi
- ;;
- esac
-fi
-: check for fflush NULL behaviour
-case "$fflushNULL" in
-'') set try -DTRY_FFLUSH_NULL $output
- if eval $compile; then
- $rm -f try.out
- ./try$exe_ext 2>/dev/null
- code="$?"
- if $test -s try.out -a "X$code" = X42; then
- fflushNULL="`$cat try.out`"
- else
- if $test "X$code" != X42; then
- $cat >&4 <<EOM
-(If this test failed, don't worry, we'll try another method shortly.)
-EOM
- fi
- fi
- fi
- $rm -f core try.core core.try.*
- case "$fflushNULL" in
- x) $cat >&4 <<EOM
-Your fflush(NULL) works okay for output streams.
-Let's see if it clobbers input pipes...
-EOM
-# As of mid-March 2000 all versions of Solaris appear to have a stdio
-# bug that improperly flushes the input end of pipes. So we avoid the
-# autoflush on fork/system/exec support for now. :-(
-$cat >tryp.c <<EOCP
-#include <stdio.h>
-int
-main(int argc, char **argv)
-{
- char buf[1024];
- int i;
- char *bp = buf;
- while (1) {
- while ((i = getc(stdin)) != -1
- && (*bp++ = i) != '\n'
- && bp < &buf[1024])
- /* DO NOTHING */ ;
- *bp = '\0';
- fprintf(stdout, "%s", buf);
- fflush(NULL);
- if (i == -1)
- return 0;
- bp = buf;
- }
-}
-EOCP
- fflushNULL="$define"
- set tryp
- if eval $compile; then
- $rm -f tryp.out
- $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
- if cmp tryp.c tryp.out >/dev/null 2>&1; then
- $cat >&4 <<EOM
-fflush(NULL) seems to behave okay with input streams.
-EOM
- fflushNULL="$define"
- else
- $cat >&4 <<EOM
-Ouch, fflush(NULL) clobbers input pipes! We will not use it.
-EOM
- fflushNULL="$undef"
- fi
- fi
- $rm -f core tryp.c tryp.core core.tryp.*
- ;;
- '') $cat >&4 <<EOM
-Your fflush(NULL) isn't working (contrary to ANSI C).
-EOM
- fflushNULL="$undef"
- ;;
- *) $cat >&4 <<EOM
-Cannot figure out whether your fflush(NULL) works or not.
-I'm assuming it doesn't (contrary to ANSI C).
-EOM
- fflushNULL="$undef"
- ;;
- esac
- ;;
-$define|true|[yY]*)
- fflushNULL="$define"
- ;;
-*)
- fflushNULL="$undef"
- ;;
-esac
-: check explicit looping only if NULL did not work, and if the pipe
-: bug does not show up on an explicit flush too
-case "$fflushNULL" in
-"$undef")
- $cat >tryp.c <<EOCP
-#include <stdio.h>
-int
-main(int argc, char **argv)
-{
- char buf[1024];
- int i;
- char *bp = buf;
- while (1) {
- while ((i = getc(stdin)) != -1
- && (*bp++ = i) != '\n'
- && bp < &buf[1024])
- /* DO NOTHING */ ;
- *bp = '\0';
- fprintf(stdout, "%s", buf);
- fflush(stdin);
- if (i == -1)
- return 0;
- bp = buf;
- }
-}
-EOCP
- set tryp
- if eval $compile; then
- $rm -f tryp.out
- $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
- if cmp tryp.c tryp.out >/dev/null 2>&1; then
- $cat >&4 <<EOM
-Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
-EOM
- : now check for fflushall behaviour
- case "$fflushall" in
- '') set try -DTRY_FFLUSH_ALL $output
- if eval $compile; then
- $cat >&4 <<EOM
-(Now testing the other method--but note that this also may fail.)
-EOM
- $rm -f try.out
- ./try$exe_ext 2>/dev/null
- if $test -s try.out -a "X$?" = X42; then
- fflushall="`$cat try.out`"
- fi
- fi
- $rm -f core try.core core.try.*
- case "$fflushall" in
- x) $cat >&4 <<EOM
-Whew. Flushing explicitly all the stdio streams works.
-EOM
- fflushall="$define"
- ;;
- '') $cat >&4 <<EOM
-Sigh. Flushing explicitly all the stdio streams doesn't work.
-EOM
- fflushall="$undef"
- ;;
- *) $cat >&4 <<EOM
-Cannot figure out whether flushing stdio streams explicitly works or not.
-I'm assuming it doesn't.
-EOM
- fflushall="$undef"
- ;;
- esac
- ;;
- "$define"|true|[yY]*)
- fflushall="$define"
- ;;
- *)
- fflushall="$undef"
- ;;
- esac
- else
- $cat >&4 <<EOM
-All is futile. Even fflush(stdin) clobbers input pipes!
-EOM
- fflushall="$undef"
- fi
- else
- fflushall="$undef"
- fi
- $rm -f core tryp.c tryp.core core.tryp.*
- ;;
-*) fflushall="$undef"
- ;;
-esac
-
-case "$fflushNULL$fflushall" in
-undefundef)
- $cat <<EOM
-OK, I give up. I cannot figure out how to flush pending stdio output.
-We won't be flushing handles at all before fork/exec/popen.
-EOM
- ;;
-esac
-$rm -f try.* try$exe_ext
-
-: Store the full pathname to the ar program for use in the C program
-: Respect a hint or command line value for full_ar.
-case "$full_ar" in
-'') full_ar=$ar ;;
-esac
-
-: Store the full pathname to the sed program for use in the C program
-full_sed=$sed
-
-: see what type gids are declared as in the kernel
-echo " "
-echo "Looking for the type for group ids returned by getgid()."
-set gid_t gidtype xxx stdio.h sys/types.h
-eval $typedef
-case "$gidtype" in
-xxx)
- xxx=`./findhdr sys/user.h`
- set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
- case $1 in
- unsigned) dflt="$1 $2" ;;
- *) dflt="$1" ;;
- esac
- ;;
-*) dflt="$gidtype";;
-esac
-case "$gidtype" in
-gid_t) echo "gid_t found." ;;
-*) rp="What is the type for group ids returned by getgid()?"
- . ./myread
- gidtype="$ans"
- ;;
-esac
-
-echo " "
-case "$gidtype" in
-*_t) zzz="$gidtype" ;;
-*) zzz="gid" ;;
-esac
-echo "Checking the size of $zzz..." >&4
-cat > try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- printf("%d\n", (int)sizeof($gidtype));
- exit(0);
-}
-EOCP
-set try
-if eval $compile_ok; then
- yyy=`./try`
- case "$yyy" in
- '') gidsize=4
- echo "(I can't execute the test program--guessing $gidsize.)" >&4
- ;;
- *) gidsize=$yyy
- echo "Your $zzz is $gidsize bytes long."
- ;;
- esac
-else
- gidsize=4
- echo "(I can't compile the test program--guessing $gidsize.)" >&4
-fi
-
-
-echo " "
-case "$gidtype" in
-*_t) zzz="$gidtype" ;;
-*) zzz="gid" ;;
-esac
-echo "Checking the sign of $zzz..." >&4
-cat > try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- $gidtype foo = -1;
- if (foo < 0)
- printf("-1\n");
- else
- printf("1\n");
-}
-EOCP
-set try
-if eval $compile; then
- yyy=`./try`
- case "$yyy" in
- '') gidsign=1
- echo "(I can't execute the test program--guessing unsigned.)" >&4
- ;;
- *) gidsign=$yyy
- case "$gidsign" in
- 1) echo "Your $zzz is unsigned." ;;
- -1) echo "Your $zzz is signed." ;;
- esac
- ;;
- esac
-else
- gidsign=1
- echo "(I can't compile the test program--guessing unsigned.)" >&4
-fi
-
-
-echo " "
-
-if $test X"$quadtype" != X; then
-
-echo "Checking how to print 64-bit integers..." >&4
-
-if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- int q = 12345678901;
- printf("%ld\n", q);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 12345678901)
- sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
- sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
- echo "We will use %d."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- long q = 12345678901;
- printf("%ld\n", q);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 12345678901)
- sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
- sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
- echo "We will use %ld."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#include <inttypes.h>
-#include <stdio.h>
-int main() {
- int64_t q = 12345678901;
- printf("%" PRId64 "\n", q);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 12345678901)
- sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
- sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
- echo "We will use the C9X style."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
- $cat >try.c <<'EOCP'
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
- printf("%lld\n", q);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 12345678901)
- sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
- sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
- echo "We will use the %lld style."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRId64" = X -a X"$quadtype" != X; then
- $cat >try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- $quadtype q = 12345678901;
- printf("%Ld\n", q);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 12345678901)
- sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
- sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
- echo "We will use %Ld."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRId64" = X -a X"$quadtype" != X; then
- $cat >try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- $quadtype q = 12345678901;
- printf("%qd\n", q);
-}
-EOCP
- set try
- if eval $compile; then
- yyy=`./try$exe_ext`
- case "$yyy" in
- 12345678901)
- sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
- sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
- echo "We will use %qd."
- ;;
- esac
- fi
-fi
-
-if $test X"$sPRId64" = X; then
- echo "Cannot figure out how to print 64-bit integers." >&4
-fi
-
-$rm -f try try.*
-
-fi
-
-case "$sPRId64" in
-'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef";
- d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef";
- ;;
-*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define";
- d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define";
- ;;
-esac
-
-
-echo " "
-$echo "Checking the format strings to be used for Perl's internal types..." >&4
-
-if $test X"$ivsize" = X8; then
- ivdformat="$sPRId64"
- uvuformat="$sPRIu64"
- uvoformat="$sPRIo64"
- uvxformat="$sPRIx64"
- uvXUformat="$sPRIXU64"
-else
- if $test X"$ivsize" = X"$longsize"; then
- ivdformat='"ld"'
- uvuformat='"lu"'
- uvoformat='"lo"'
- uvxformat='"lx"'
- uvXUformat='"lX"'
- else
- if $test X"$ivsize" = X"$intsize"; then
- ivdformat='"d"'
- uvuformat='"u"'
- uvoformat='"o"'
- uvxformat='"x"'
- uvXUformat='"X"'
- else
- : far out
- if $test X"$ivsize" = X"$shortsize"; then
- ivdformat='"hd"'
- uvuformat='"hu"'
- uvoformat='"ho"'
- uvxformat='"hx"'
- uvXUformat='"hX"'
- fi
- fi
- fi
-fi
-
-if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
- nveformat="$sPRIeldbl"
- nvfformat="$sPRIfldbl"
- nvgformat="$sPRIgldbl"
- nvEUformat="$sPRIEUldbl"
- nvFUformat="$sPRIFUldbl"
- nvGUformat="$sPRIGUldbl"
-else
- nveformat='"e"'
- nvfformat='"f"'
- nvgformat='"g"'
- nvEUformat='"E"'
- nvFUformat='"F"'
- nvGUformat='"G"'
-fi
-
-case "$ivdformat" in
-'') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
- exit 1
- ;;
-esac
-
-
-echo " "
-$echo "Checking the format string to be used for gids..." >&4
-
-case "$gidsign" in
--1) if $test X"$gidsize" = X"$ivsize"; then
- gidformat="$ivdformat"
- else
- if $test X"$gidsize" = X"$longsize"; then
- gidformat='"ld"'
- else
- if $test X"$gidsize" = X"$intsize"; then
- gidformat='"d"'
- else
- if $test X"$gidsize" = X"$shortsize"; then
- gidformat='"hd"'
- fi
- fi
- fi
- fi
- ;;
-*) if $test X"$gidsize" = X"$uvsize"; then
- gidformat="$uvuformat"
- else
- if $test X"$gidsize" = X"$longsize"; then
- gidformat='"lu"'
- else
- if $test X"$gidsize" = X"$intsize"; then
- gidformat='"u"'
- else
- if $test X"$gidsize" = X"$shortsize"; then
- gidformat='"hu"'
- fi
- fi
- fi
- fi
- ;;
-esac
-
-: see if getgroups exists
-set getgroups d_getgrps
-eval $inlibc
-
-: see if setgroups exists
-set setgroups d_setgrps
-eval $inlibc
-
-
-: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
-echo " "
-case "$d_getgrps$d_setgrps" in
-*define*)
- case "$groupstype" in
- '') dflt="$gidtype" ;;
- *) dflt="$groupstype" ;;
- esac
- $cat <<EOM
-What type of pointer is the second argument to getgroups() and setgroups()?
-Usually this is the same as group ids, $gidtype, but not always.
-
-EOM
- rp='What type pointer is the second argument to getgroups() and setgroups()?'
- . ./myread
- groupstype="$ans"
- ;;
-*) groupstype="$gidtype";;
-esac
-
-echo " "
-echo "Checking if your $make program sets \$(MAKE)..." >&4
-case "$make_set_make" in
-'')
- $sed 's/^X //' > testmake.mak << 'EOF'
-Xall:
-X @echo 'maketemp="$(MAKE)"'
-EOF
- case "`$make -f testmake.mak 2>/dev/null`" in
- *maketemp=*) make_set_make='#' ;;
- *) make_set_make="MAKE=$make" ;;
- esac
- $rm -f testmake.mak
- ;;
-esac
-case "$make_set_make" in
-'#') echo "Yup, it does.";;
-*) echo "Nope, it doesn't.";;
-esac
-
-: see what type is used for mode_t
-rp="What is the type used for file modes for system calls (e.g. fchmod())?"
-set mode_t modetype int stdio.h sys/types.h
-eval $typedef_ask
-
-: define a fucntion to check prototypes
-$cat > protochk <<EOSH
-$startsh
-cc="$cc"
-optimize="$optimize"
-ccflags="$ccflags"
-prototype="$prototype"
-define="$define"
-rm=$rm
-EOSH
-
-$cat >> protochk <<'EOSH'
-
-$rm -f try.c
-foo="$1"
-shift
-while test $# -ge 2; do
- case "$1" in
- $define) echo "#include <$2>" >> try.c ;;
- literal) echo "$2" >> try.c ;;
- esac
- shift 2
-done
-test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c
-cat >> try.c <<'EOCP'
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-EOCP
-echo "$foo" >> try.c
-echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
-$cc $optimize $ccflags -c try.c > /dev/null 2>&1
-status=$?
-$rm -f try.[co]
-exit $status
-EOSH
-chmod +x protochk
-$eunicefix protochk
-
-: see what type is used for size_t
-rp="What is the type used for the length parameter for string functions?"
-set size_t sizetype 'unsigned int' stdio.h sys/types.h
-eval $typedef_ask
-
-: check for type of arguments to gethostbyaddr.
-if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
- case "$d_gethbyaddr" in
- $define)
- $cat <<EOM
-
-Checking to see what type of arguments are accepted by gethostbyaddr().
-EOM
- hdrs="$define sys/types.h
- $d_socket sys/socket.h
- $i_niin netinet/in.h
- $i_netdb netdb.h
- $i_unistd unistd.h"
- : The first arg can 'char *' or 'void *'
- : The second arg is some of integral type
- for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
- for yyy in size_t long int; do
- case "$netdb_host_type" in
- '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
- if ./protochk "$try" $hdrs; then
- echo "Your system accepts $xxx for the first arg."
- echo "...and $yyy for the second arg."
- netdb_host_type="$xxx"
- netdb_hlen_type="$yyy"
- fi
- ;;
- esac
- done
- done
- : In case none of those worked, prompt the user.
- case "$netdb_host_type" in
- '') rp='What is the type for the 1st argument to gethostbyaddr?'
- dflt='char *'
- . ./myread
- netdb_host_type=$ans
- rp='What is the type for the 2nd argument to gethostbyaddr?'
- dflt="$sizetype"
- . ./myread
- netdb_hlen_type=$ans
- ;;
- esac
- ;;
- *) : no gethostbyaddr, so pick harmless defaults
- netdb_host_type='char *'
- netdb_hlen_type="$sizetype"
- ;;
- esac
- # Remove the "const" if needed. -- but then we'll have a
- # prototype clash!
- # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
-fi
-
-: check for type of argument to gethostbyname.
-if test "X$netdb_name_type" = X ; then
- case "$d_gethbyname" in
- $define)
- $cat <<EOM
-
-Checking to see what type of argument is accepted by gethostbyname().
-EOM
- hdrs="$define sys/types.h
- $d_socket sys/socket.h
- $i_niin netinet/in.h
- $i_netdb netdb.h
- $i_unistd unistd.h"
- for xxx in "const char *" "char *"; do
- case "$netdb_name_type" in
- '') try="extern struct hostent *gethostbyname($xxx);"
- if ./protochk "$try" $hdrs; then
- echo "Your system accepts $xxx."
- netdb_name_type="$xxx"
- fi
- ;;
- esac
- done
- : In case none of those worked, prompt the user.
- case "$netdb_name_type" in
- '') rp='What is the type for the 1st argument to gethostbyname?'
- dflt='char *'
- . ./myread
- netdb_name_type=$ans
- ;;
- esac
- ;;
- *) : no gethostbyname, so pick harmless default
- netdb_name_type='char *'
- ;;
- esac
-fi
-
-: check for type of 1st argument to getnetbyaddr.
-if test "X$netdb_net_type" = X ; then
- case "$d_getnbyaddr" in
- $define)
- $cat <<EOM
-
-Checking to see what type of 1st argument is accepted by getnetbyaddr().
-EOM
- hdrs="$define sys/types.h
- $d_socket sys/socket.h
- $i_niin netinet/in.h
- $i_netdb netdb.h
- $i_unistd unistd.h"
- for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
- case "$netdb_net_type" in
- '') try="extern struct netent *getnetbyaddr($xxx, int);"
- if ./protochk "$try" $hdrs; then
- echo "Your system accepts $xxx."
- netdb_net_type="$xxx"
- fi
- ;;
- esac
- done
- : In case none of those worked, prompt the user.
- case "$netdb_net_type" in
- '') rp='What is the type for the 1st argument to getnetbyaddr?'
- dflt='long'
- . ./myread
- netdb_net_type=$ans
- ;;
- esac
- ;;
- *) : no getnetbyaddr, so pick harmless default
- netdb_net_type='long'
- ;;
- esac
-fi
-: locate the preferred pager for this system
-case "$pager" in
-'')
- dflt=''
- case "$pg" in
- /*) dflt=$pg;;
- [a-zA-Z]:/*) dflt=$pg;;
- esac
- case "$more" in
- /*) dflt=$more;;
- [a-zA-Z]:/*) dflt=$more;;
- esac
- case "$less" in
- /*) dflt=$less;;
- [a-zA-Z]:/*) dflt=$less;;
- esac
- case "$dflt" in
- '') dflt=/usr/ucb/more;;
- esac
- ;;
-*) dflt="$pager";;
-esac
-echo " "
-fn=f/
-rp='What pager is used on your system?'
-. ./getfile
-pager="$ans"
-
-: see what type pids are declared as in the kernel
-rp="What is the type of process ids on this system?"
-set pid_t pidtype int stdio.h sys/types.h
-eval $typedef_ask
-
-: Find earliest binary compatible site_perl subdirectory perl can use.
-case "$bincompat5005" in
-"$define") xs_apiversion='5.005' ;;
-*) xs_apiversion=$version ;; # The current site_perl version.
-esac
-: Find earliest pure perl site_perl subdirectory perl can use.
-: The versioned directories started at 5.005.
-pm_apiversion='5.005'
-
-: check for length of pointer
-echo " "
-case "$ptrsize" in
-'')
- echo "Checking to see how big your pointers are..." >&4
- if test "$voidflags" -gt 7; then
- echo '#define VOID_PTR char *' > try.c
- else
- echo '#define VOID_PTR void *' > try.c
- fi
- $cat >>try.c <<'EOCP'
-#include <stdio.h>
-int main()
-{
- printf("%d\n", (int)sizeof(VOID_PTR));
- exit(0);
-}
-EOCP
- set try
- if eval $compile_ok; then
- ptrsize=`./try`
- echo "Your pointers are $ptrsize bytes long."
- else
- dflt='4'
- echo "(I can't seem to compile the test program. Guessing...)" >&4
- rp="What is the size of a pointer (in bytes)?"
- . ./myread
- ptrsize="$ans"
- fi
- ;;
-esac
-$rm -f try.c try
-
-: see if ar generates random libraries by itself
-echo " "
-echo "Checking how to generate random libraries on your machine..." >&4
-echo 'int bar1() { return bar2(); }' > bar1.c
-echo 'int bar2() { return 2; }' > bar2.c
-$cat > foo.c <<'EOP'
-int main() { printf("%d\n", bar1()); exit(0); }
-EOP
-$cc $ccflags -c bar1.c >/dev/null 2>&1
-$cc $ccflags -c bar2.c >/dev/null 2>&1
-$cc $ccflags -c foo.c >/dev/null 2>&1
-$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
-if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
- ./foobar >/dev/null 2>&1; then
- echo "$ar appears to generate random libraries itself."
- orderlib=false
- ranlib=":"
-elif $ar ts bar$_a >/dev/null 2>&1 &&
- $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
- ./foobar >/dev/null 2>&1; then
- echo "a table of contents needs to be added with '$ar ts'."
- orderlib=false
- ranlib="$ar ts"
-else
- case "$ranlib" in
- :) ranlib='';;
- '')
- ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
- $test -f $ranlib || ranlib=''
- ;;
- esac
- if $test -n "$ranlib"; then
- echo "your system has '$ranlib'; we'll use that."
- orderlib=false
- else
- echo "your system doesn't seem to support random libraries"
- echo "so we'll use lorder and tsort to order the libraries."
- orderlib=true
- ranlib=":"
- fi
-fi
-$rm -f foo* bar*
-
-: check for type of arguments to select.
-case "$selecttype" in
-'') case "$d_select" in
- $define)
- echo " "
- $cat <<EOM
-Checking to see what type of arguments are accepted by select().
-EOM
- hdrs="$define sys/types.h
- $i_systime sys/time.h
- $i_sysselct sys/select.h
- $d_socket sys/socket.h"
- : The first arg can be int, unsigned, or size_t
- : The last arg may or may not be 'const'
- val=''
- : void pointer has been seen but using that
- : breaks the selectminbits test
- for xxx in 'fd_set *' 'int *'; do
- for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
- for tmo in 'struct timeval *' 'const struct timeval *'; do
- case "$val" in
- '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
- if ./protochk "$try" $hdrs; then
- echo "Your system accepts $xxx."
- val="$xxx"
- fi
- ;;
- esac
- done
- done
- done
- case "$val" in
- '') rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
- case "$d_fd_set" in
- $define) dflt="fd_set *" ;;
- *) dflt="int *" ;;
- esac
- . ./myread
- val=$ans
- ;;
- esac
- selecttype="$val"
- ;;
- *) : no select, so pick a harmless default
- selecttype='int *'
- ;;
- esac
- ;;
-esac
-
-: check for the select 'width'
-case "$selectminbits" in
-'') case "$d_select" in
- $define)
- $cat <<EOM
-
-Checking to see on how many bits at a time your select() operates...
-EOM
- $cat >try.c <<EOCP
-#include <sys/types.h>
-#$i_time I_TIME
-#$i_systime I_SYS_TIME
-#$i_systimek I_SYS_TIME_KERNEL
-#ifdef I_TIME
-# include <time.h>
-#endif
-#ifdef I_SYS_TIME
-# ifdef I_SYS_TIME_KERNEL
-# define KERNEL
-# endif
-# include <sys/time.h>
-# ifdef I_SYS_TIME_KERNEL
-# undef KERNEL
-# endif
-#endif
-#$i_sysselct I_SYS_SELECT
-#ifdef I_SYS_SELECT
-#include <sys/select.h>
-#endif
-#$d_socket HAS_SOCKET
-#ifdef HAS_SOCKET
-# include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
-#endif
-#include <stdio.h>
-$selecttype b;
-#define S sizeof(*(b))
-#define MINBITS 64
-#define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
-#define NBITS (NBYTES * 8)
-int main() {
- char s[NBYTES];
- struct timeval t;
- int i;
- FILE* fp;
- int fd;
-
- fclose(stdin);
- fp = fopen("try.c", "r");
- if (fp == 0)
- exit(1);
- fd = fileno(fp);
- if (fd < 0)
- exit(2);
- b = ($selecttype)s;
- for (i = 0; i < NBITS; i++)
- FD_SET(i, b);
- t.tv_sec = 0;
- t.tv_usec = 0;
- select(fd + 1, b, 0, 0, &t);
- for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
- printf("%d\n", i + 1);
- return 0;
-}
-EOCP
- set try
- if eval $compile_ok; then
- selectminbits=`./try`
- case "$selectminbits" in
- '') cat >&4 <<EOM
-Cannot figure out on how many bits at a time your select() operates.
-I'll play safe and guess it is 32 bits.
-EOM
- selectminbits=32
- bits="32 bits"
- ;;
- 1) bits="1 bit" ;;
- *) bits="$selectminbits bits" ;;
- esac
- echo "Your select() operates on $bits at a time." >&4
- else
- rp='What is the minimum number of bits your select() operates on?'
- case "$byteorder" in
- 1234|12345678) dflt=32 ;;
- *) dflt=1 ;;
- esac
- . ./myread
- val=$ans
- selectminbits="$val"
- fi
- $rm -f try.* try
- ;;
- *) : no select, so pick a harmless default
- selectminbits='32'
- ;;
- esac
- ;;
-esac
-
-: Trace out the files included by signal.h, then look for SIGxxx names.
-: Remove SIGARRAYSIZE used by HPUX.
-: Remove SIGSTKSIZE used by Linux.
-: Remove SIGSTKSZ used by Posix.
-: Remove SIGTYP void lines used by OS2.
-: Some cpps, like os390, dont give the file name anywhere
-if [ "X$fieldn" = X ]; then
- : Just make some guesses. We check them later.
- xxx='/usr/include/signal.h /usr/include/sys/signal.h'
-else
- xxx=`echo '#include <signal.h>' |
- $cppstdin $cppminus $cppflags 2>/dev/null |
- $grep '^[ ]*#.*include' |
- $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
-fi
-: Check this list of files to be sure we have parsed the cpp output ok.
-: This will also avoid potentially non-existent files, such
-: as ../foo/bar.h
-xxxfiles=''
-for xx in $xxx /dev/null ; do
- $test -f "$xx" && xxxfiles="$xxxfiles $xx"
-done
-: If we have found no files, at least try signal.h
-case "$xxxfiles" in
-'') xxxfiles=`./findhdr signal.h` ;;
-esac
-xxx=`awk '
-$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
- print substr($2, 4, 20)
-}
-$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
- print substr($3, 4, 20)
-}' $xxxfiles`
-: Append some common names just in case the awk scan failed.
-xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
-xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
-xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
-xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
-xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
-
-: generate a few handy files for later
-$cat > signal.c <<'EOCP'
-#include <sys/types.h>
-#include <signal.h>
-#include <stdio.h>
-int main() {
-
-/* Strange style to avoid deeply-nested #if/#else/#endif */
-#ifndef NSIG
-# ifdef _NSIG
-# define NSIG (_NSIG)
-# endif
-#endif
-
-#ifndef NSIG
-# ifdef SIGMAX
-# define NSIG (SIGMAX+1)
-# endif
-#endif
-
-#ifndef NSIG
-# ifdef SIG_MAX
-# define NSIG (SIG_MAX+1)
-# endif
-#endif
-
-#ifndef NSIG
-# ifdef MAXSIG
-# define NSIG (MAXSIG+1)
-# endif
-#endif
-
-#ifndef NSIG
-# ifdef MAX_SIG
-# define NSIG (MAX_SIG+1)
-# endif
-#endif
-
-#ifndef NSIG
-# ifdef SIGARRAYSIZE
-# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
-# endif
-#endif
-
-#ifndef NSIG
-# ifdef _sys_nsig
-# define NSIG (_sys_nsig) /* Solaris 2.5 */
-# endif
-#endif
-
-/* Default to some arbitrary number that's big enough to get most
- of the common signals.
-*/
-#ifndef NSIG
-# define NSIG 50
-#endif
-
-printf("NSIG %d\n", NSIG);
-
-#ifndef JUST_NSIG
-
-EOCP
-
-echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
-{
- printf "#ifdef SIG"; printf $1; printf "\n"
- printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
- printf $1; printf ");\n"
- printf "#endif\n"
-}
-END {
- printf "#endif /* JUST_NSIG */\n";
- printf "exit(0);\n}\n";
-}
-' >>signal.c
-$cat >signal.awk <<'EOP'
-BEGIN { ndups = 0 }
-$1 ~ /^NSIG$/ { nsig = $2 }
-($1 !~ /^NSIG$/) && (NF == 2) {
- if ($2 > maxsig) { maxsig = $2 }
- if (sig_name[$2]) {
- dup_name[ndups] = $1
- dup_num[ndups] = $2
- ndups++
- }
- else {
- sig_name[$2] = $1
- sig_num[$2] = $2
- }
-}
-END {
- if (nsig == 0) {
- nsig = maxsig + 1
- }
- printf("NSIG %d\n", nsig);
- for (n = 1; n < nsig; n++) {
- if (sig_name[n]) {
- printf("%s %d\n", sig_name[n], sig_num[n])
- }
- else {
- printf("NUM%d %d\n", n, n)
- }
- }
- for (n = 0; n < ndups; n++) {
- printf("%s %d\n", dup_name[n], dup_num[n])
- }
-}
-EOP
-$cat >signal_cmd <<EOS
-$startsh
-if $test -s signal.lst; then
- echo "Using your existing signal.lst file"
- exit 0
-fi
-xxx="$xxx"
-EOS
-$cat >>signal_cmd <<'EOS'
-
-set signal
-if eval $compile_ok; then
- ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
-else
- echo "(I can't seem be able to compile the whole test program)" >&4
- echo "(I'll try it in little pieces.)" >&4
- set signal -DJUST_NSIG
- if eval $compile_ok; then
- ./signal$_exe > signal.nsg
- $cat signal.nsg
- else
- echo "I can't seem to figure out how many signals you have." >&4
- echo "Guessing 50." >&4
- echo 'NSIG 50' > signal.nsg
- fi
- : Now look at all the signal names, one at a time.
- for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
- $cat > signal.c <<EOCP
-#include <sys/types.h>
-#include <signal.h>
-#include <stdio.h>
-int main() {
-printf("$xx %d\n", SIG${xx});
-return 0;
-}
-EOCP
- set signal
- if eval $compile; then
- echo "SIG${xx} found."
- ./signal$_exe >> signal.ls1
- else
- echo "SIG${xx} NOT found."
- fi
- done
- if $test -s signal.ls1; then
- $cat signal.nsg signal.ls1 |
- $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
- fi
-
-fi
-if $test -s signal.lst; then
- :
-else
- echo "(AAK! I can't compile the test programs -- Guessing)" >&4
- echo 'kill -l' >signal
- set X `csh -f <signal`
- $rm -f signal
- shift
- case $# in
- 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
- esac
- echo $@ | $tr ' ' $trnl | \
- $awk '{ printf "%s %d\n", $1, ++s; }
- END { printf "NSIG %d\n", ++s }' >signal.lst
-fi
-$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
-EOS
-chmod a+x signal_cmd
-$eunicefix signal_cmd
-
-: generate list of signal names
-echo " "
-case "$sig_name_init" in
-'') doinit=yes ;;
-*) case "$sig_num_init" in
- ''|*,*) doinit=yes ;;
- esac ;;
-esac
-case "$doinit" in
-yes)
- echo "Generating a list of signal names and numbers..." >&4
- . ./signal_cmd
- sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
- sig_name=`$awk 'BEGIN { printf "ZERO " }
- !/^NSIG/ { printf "%s ", $1 }' signal.lst`
- sig_num=`$awk 'BEGIN { printf "0 " }
- !/^NSIG/ { printf "%d ", $2 }' signal.lst`
- sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
- !/^NSIG/ { printf "\"%s\", ", $1 }
- END { printf "0\n" }' signal.lst`
- sig_num_init=`$awk 'BEGIN { printf "0, " }
- !/^NSIG/ { printf "%d, ", $2}
- END { printf "0\n"}' signal.lst`
- ;;
-esac
-echo "The following $sig_count signals are available:"
-echo " "
-echo $sig_name | $awk \
-'BEGIN { linelen = 0 }
-{
- for (i = 1; i <= NF; i++) {
- name = "SIG" $i " "
- linelen = linelen + length(name)
- if (linelen > 70) {
- printf "\n"
- linelen = length(name)
- }
- printf "%s", name
- }
- printf "\n"
-}'
-$rm -f signal signal.c signal.awk signal.lst signal_cmd
-
-echo " "
-case "$sizetype" in
-*_t) zzz="$sizetype" ;;
-*) zzz="filesize" ;;
-esac
-echo "Checking the size of $zzz..." >&4
-cat > try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- printf("%d\n", (int)sizeof($sizetype));
- exit(0);
-}
-EOCP
-set try
-if eval $compile_ok; then
- yyy=`./try`
- case "$yyy" in
- '') sizesize=4
- echo "(I can't execute the test program--guessing $sizesize.)" >&4
- ;;
- *) sizesize=$yyy
- echo "Your $zzz size is $sizesize bytes."
- ;;
- esac
-else
- sizesize=4
- echo "(I can't compile the test program--guessing $sizesize.)" >&4
-fi
-
-
-: check for socklen_t
-echo " "
-echo "Checking to see if you have socklen_t..." >&4
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#$d_socket HAS_SOCKET
-#ifdef HAS_SOCKET
-#include <sys/socket.h>
-#endif
-int main() { socklen_t x = 16; }
-EOCP
-set try
-if eval $compile; then
- val="$define"
- echo "You have socklen_t."
-else
- val="$undef"
- echo "You do not have socklen_t."
- case "$sizetype" in
- size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
- esac
-fi
-$rm -f try try.*
-set d_socklen_t
-eval $setvar
-
-: see if this is a socks.h system
-set socks.h i_socks
-eval $inhdr
-
-: check for type of the size argument to socket calls
-case "$d_socket" in
-"$define")
- $cat <<EOM
-
-Checking to see what type is the last argument of accept().
-EOM
- yyy=''
- case "$d_socklen_t" in
- "$define") yyy="$yyy socklen_t"
- esac
- yyy="$yyy $sizetype int long unsigned"
- for xxx in $yyy; do
- case "$socksizetype" in
- '') try="extern int accept(int, struct sockaddr *, $xxx *);"
- case "$usesocks" in
- "$define")
- if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
- echo "Your system accepts '$xxx *' for the last argument of accept()."
- socksizetype="$xxx"
- fi
- ;;
- *) if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h; then
- echo "Your system accepts '$xxx *' for the last argument of accept()."
- socksizetype="$xxx"
- fi
- ;;
- esac
- ;;
- esac
- done
-: In case none of those worked, prompt the user.
- case "$socksizetype" in
- '') rp='What is the type for socket address structure sizes?'
- dflt='int'
- . ./myread
- socksizetype=$ans
- ;;
- esac
- ;;
-*) : no sockets, so pick relatively harmless default
- socksizetype='int'
- ;;
-esac
-
-: see what type is used for signed size_t
-set ssize_t ssizetype int stdio.h sys/types.h
-eval $typedef
-dflt="$ssizetype"
-$cat > ssize.c <<EOM
-#include <stdio.h>
-#include <sys/types.h>
-#define Size_t $sizetype
-#define SSize_t $dflt
-int main()
-{
- if (sizeof(Size_t) == sizeof(SSize_t))
- printf("$dflt\n");
- else if (sizeof(Size_t) == sizeof(int))
- printf("int\n");
- else
- printf("long\n");
- exit(0);
-}
-EOM
-echo " "
-set ssize
-if eval $compile_ok && ./ssize > /dev/null; then
- ssizetype=`./ssize`
- echo "I'll be using $ssizetype for functions returning a byte count." >&4
-else
- $cat >&4 <<EOM
-Help! I can't compile and run the ssize_t test program: please enlighten me!
-(This is probably a misconfiguration in your system or libraries, and
-you really ought to fix it. Still, I'll try anyway.)
-
-I need a type that is the same size as $sizetype, but is guaranteed to
-be signed. Common values are ssize_t, int and long.
-
-EOM
- rp="What signed type is the same size as $sizetype?"
- . ./myread
- ssizetype="$ans"
-fi
-$rm -f ssize ssize.*
-
-: see what type of char stdio uses.
-echo " "
-echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
-if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
- echo "Your stdio uses unsigned chars." >&4
- stdchar="unsigned char"
-else
- echo "Your stdio uses signed chars." >&4
- stdchar="char"
-fi
-$rm -f stdioh
-
-: see if time exists
-echo " "
-if test "X$d_time" = X -o X"$timetype" = X; then
- if set time val -f d_time; eval $csym; $val; then
- echo 'time() found.' >&4
- val="$define"
- rp="What is the type returned by time() on this system?"
- set time_t timetype long stdio.h sys/types.h
- eval $typedef_ask
- else
- echo 'time() not found, hope that will do.' >&4
- val="$undef"
- timetype='int';
- fi
- set d_time
- eval $setvar
-fi
-
-: see what type uids are declared as in the kernel
-echo " "
-echo "Looking for the type for user ids returned by getuid()."
-set uid_t uidtype xxx stdio.h sys/types.h
-eval $typedef
-case "$uidtype" in
-xxx)
- xxx=`./findhdr sys/user.h`
- set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
- case $1 in
- unsigned) dflt="$1 $2" ;;
- *) dflt="$1" ;;
- esac
- ;;
-*) dflt="$uidtype";;
-esac
-case "$uidtype" in
-uid_t) echo "uid_t found." ;;
-*) rp="What is the type for user ids returned by getuid()?"
- . ./myread
- uidtype="$ans"
- ;;
-esac
-
-echo " "
-case "$uidtype" in
-*_t) zzz="$uidtype" ;;
-*) zzz="uid" ;;
-esac
-echo "Checking the size of $zzz..." >&4
-cat > try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- printf("%d\n", (int)sizeof($uidtype));
- exit(0);
-}
-EOCP
-set try
-if eval $compile_ok; then
- yyy=`./try`
- case "$yyy" in
- '') uidsize=4
- echo "(I can't execute the test program--guessing $uidsize.)" >&4
- ;;
- *) uidsize=$yyy
- echo "Your $zzz is $uidsize bytes long."
- ;;
- esac
-else
- uidsize=4
- echo "(I can't compile the test program--guessing $uidsize.)" >&4
-fi
-
-echo " "
-case "$uidtype" in
-*_t) zzz="$uidtype" ;;
-*) zzz="uid" ;;
-esac
-echo "Checking the sign of $zzz..." >&4
-cat > try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-int main() {
- $uidtype foo = -1;
- if (foo < 0)
- printf("-1\n");
- else
- printf("1\n");
-}
-EOCP
-set try
-if eval $compile; then
- yyy=`./try`
- case "$yyy" in
- '') uidsign=1
- echo "(I can't execute the test program--guessing unsigned.)" >&4
- ;;
- *) uidsign=$yyy
- case "$uidsign" in
- 1) echo "Your $zzz is unsigned." ;;
- -1) echo "Your $zzz is signed." ;;
- esac
- ;;
- esac
-else
- uidsign=1
- echo "(I can't compile the test program--guessing unsigned.)" >&4
-fi
-
-
-
-echo " "
-$echo "Checking the format string to be used for uids..." >&4
-
-case "$uidsign" in
--1) if $test X"$uidsize" = X"$ivsize"; then
- uidformat="$ivdformat"
- else
- if $test X"$uidsize" = X"$longsize"; then
- uidformat='"ld"'
- else
- if $test X"$uidsize" = X"$intsize"; then
- uidformat='"d"'
- else
- if $test X"$uidsize" = X"$shortsize"; then
- uidformat='"hd"'
- fi
- fi
- fi
- fi
- ;;
-*) if $test X"$uidsize" = X"$uvsize"; then
- uidformat="$uvuformat"
- else
- if $test X"$uidsize" = X"$longsize"; then
- uidformat='"lu"'
- else
- if $test X"$uidsize" = X"$intsize"; then
- uidformat='"u"'
- else
- if $test X"$uidsize" = X"$shortsize"; then
- uidformat='"hu"'
- fi
- fi
- fi
- fi
- ;;
-esac
-
-: determine compiler compiler
-case "$yacc" in
-'')
- dflt=yacc;;
-*)
- dflt="$yacc";;
-esac
-echo " "
-comp='yacc'
-if $test -f "$byacc"; then
- dflt="$byacc"
- comp="byacc or $comp"
-fi
-if $test -f "$bison"; then
- comp="$comp or bison -y"
-fi
-rp="Which compiler compiler ($comp) shall I use?"
-. ./myread
-yacc="$ans"
-case "$yacc" in
-*bis*)
- case "$yacc" in
- *-y*) ;;
- *)
- yacc="$yacc -y"
- echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
- ;;
- esac
- ;;
-esac
-
-: see if dbm.h is available
-: see if dbmclose exists
-set dbmclose d_dbmclose
-eval $inlibc
-
-case "$d_dbmclose" in
-$define)
- set dbm.h i_dbm
- eval $inhdr
- case "$i_dbm" in
- $define)
- val="$undef"
- set i_rpcsvcdbm
- eval $setvar
- ;;
- *) set rpcsvc/dbm.h i_rpcsvcdbm
- eval $inhdr
- ;;
- esac
- ;;
-*) echo "We won't be including <dbm.h>"
- val="$undef"
- set i_dbm
- eval $setvar
- val="$undef"
- set i_rpcsvcdbm
- eval $setvar
- ;;
-esac
-
-: see if this is a sys/file.h system
-val=''
-set sys/file.h val
-eval $inhdr
-
-: do we need to include sys/file.h ?
-case "$val" in
-"$define")
- echo " "
- if $h_sysfile; then
- val="$define"
- echo "We'll be including <sys/file.h>." >&4
- else
- val="$undef"
- echo "We won't be including <sys/file.h>." >&4
- fi
- ;;
-*)
- h_sysfile=false
- ;;
-esac
-set i_sysfile
-eval $setvar
-
-: see if fcntl.h is there
-val=''
-set fcntl.h val
-eval $inhdr
-
-: see if we can include fcntl.h
-case "$val" in
-"$define")
- echo " "
- if $h_fcntl; then
- val="$define"
- echo "We'll be including <fcntl.h>." >&4
- else
- val="$undef"
- if $h_sysfile; then
- echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
- else
- echo "We won't be including <fcntl.h>." >&4
- fi
- fi
- ;;
-*)
- h_fcntl=false
- val="$undef"
- ;;
-esac
-set i_fcntl
-eval $setvar
-
-: see if this is a iconv.h system
-set iconv.h i_iconv
-eval $inhdr
-
-: see if this is a ieeefp.h system
-set ieeefp.h i_ieeefp
-eval $inhdr
-
-: see if this is a libutil.h system
-set libutil.h i_libutil
-eval $inhdr
-
-: see if locale.h is available
-set locale.h i_locale
-eval $inhdr
-
-: see if mach cthreads are available
-if test "X$usethreads" = "X$define"; then
- set mach/cthreads.h i_machcthr
- eval $inhdr
-else
- i_machcthr="$undef"
-fi
-
-
-
-: see if this is a math.h system
-set math.h i_math
-eval $inhdr
-
-: see if this is a mntent.h system
-set mntent.h i_mntent
-eval $inhdr
-
-: see if ndbm.h is available
-set ndbm.h t_ndbm
-eval $inhdr
-case "$t_ndbm" in
-$define)
- : see if dbm_open exists
- set dbm_open d_dbm_open
- eval $inlibc
- case "$d_dbm_open" in
- $undef)
- t_ndbm="$undef"
- echo "We won't be including <ndbm.h>"
- ;;
- esac
- ;;
-esac
-val="$t_ndbm"
-set i_ndbm
-eval $setvar
-
-: see if net/errno.h is available
-val=''
-set net/errno.h val
-eval $inhdr
-
-: Unfortunately, it causes problems on some systems. Arrgh.
-case "$val" in
-$define)
- cat > try.c <<'EOM'
-#include <stdio.h>
-#include <errno.h>
-#include <net/errno.h>
-int func()
-{
- return ENOTSOCK;
-}
-EOM
- if $cc $ccflags -c try.c >/dev/null 2>&1; then
- echo "We'll be including <net/errno.h>." >&4
- else
- echo "We won't be including <net/errno.h>." >&4
- val="$undef"
- fi
- $rm -f try.* try
- ;;
-esac
-set i_neterrno
-eval $setvar
-
-: see if netinet/tcp.h is available
-set netinet/tcp.h i_netinettcp
-eval $inhdr
-
-: see if this is a poll.h system
-set poll.h i_poll
-eval $inhdr
-
-: see if this is a prot.h system
-set prot.h i_prot
-eval $inhdr
-
-echo " "
-$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
-$cat <<'EOSH' > Cppsym.know
-a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
-AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
-alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
-ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
-BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
-BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
-bull c cadmus clipper CMU COFF COMPILER_VERSION
-concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
-CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
-Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
-FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
-GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
-H3050R H3050RX hbullx20 hcx host_mips
-hp200 hp300 hp700 HP700 hp800 hp9000
-hp9000s200 hp9000s300 hp9000s400 hp9000s500
-hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
-i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
-IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
-INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
-LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
-LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
-Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
-LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
-M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
-M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
-M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
-MATH_HAS_NO_SIDE_EFFECTS
-mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
-mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
-mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
-MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
-mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
-NetBSD news1500 news1700 news1800 news1900 news3700
-news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
-ns32016 ns32332 ns32k nsc32000
-OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
-pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
-pc532 pdp11 PGC PIC plexus PORTAR posix
-POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
-POSIX_C_SOURCE POSIX_SOURCE POWER
-PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
-riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
-SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
-sony sony_news sonyrisc sparc sparclite spectrum
-stardent stdc STDC_EXT stratos sun sun3 sun386
-Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
-SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
-SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
-sysV68 sysV88 Tek4132 Tek4300 titan
-TM3200 TM5400 TM5600
-tower tower32 tower32_200 tower32_600 tower32_700
-tower32_800 tower32_850 tss
-u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
-ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
-unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
-Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
-XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
-XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
-z8000
-EOSH
-# Maybe put other stuff here too.
-cat <<EOSH >>Cppsym.know
-$osname
-EOSH
-./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
-./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
-$cat Cppsym.know > Cppsym.c
-$cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
-$rm -f Cppsym.a Cppsym.b Cppsym.c
-cat <<EOSH > Cppsym
-$startsh
-if $test \$# -gt 0; then
- echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
- if $test -s Cppsym.got; then
- $rm -f Cppsym.got
- exit 0
- fi
- $rm -f Cppsym.got
- exit 1
-else
- $tr " " "$trnl" | ./Cppsym.try
- exit 0
-fi
-EOSH
-chmod +x Cppsym
-$eunicefix Cppsym
-cat <<EOSH > Cppsym.try
-$startsh
-cat <<'EOCP' > try.c
-#include <stdio.h>
-int main() {
-EOCP
-$awk \\
-EOSH
-cat <<'EOSH' >> Cppsym.try
-'length($1) > 0 {
- printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
- printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
- printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
- printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
-}' >> try.c
-echo '}' >> try.c
-EOSH
-cat <<EOSH >> Cppsym.try
-ccflags="$ccflags"
-case "$osname-$gccversion" in
-irix-) ccflags="\$ccflags -woff 1178" ;;
-os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
-esac
-$cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext
-EOSH
-chmod +x Cppsym.try
-$eunicefix Cppsym.try
-./Cppsym < Cppsym.know > Cppsym.true
-: now check the C compiler for additional symbols
-postprocess_cc_v=''
-case "$osname" in
-aix) postprocess_cc_v="|$tr , ' '" ;;
-esac
-$cat >ccsym <<EOS
-$startsh
-$cat >tmp.c <<EOF
-extern int foo;
-EOF
-for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
-do
- case "\$i" in
- -D*) echo "\$i" | $sed 's/^-D//';;
- -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
- esac
-done
-$rm -f try.c
-EOS
-postprocess_cc_v=''
-chmod +x ccsym
-$eunicefix ccsym
-./ccsym > ccsym1.raw
-if $test -s ccsym1.raw; then
- $sort ccsym1.raw | $uniq >ccsym.raw
-else
- mv ccsym1.raw ccsym.raw
-fi
-
-$awk '/\=/ { print $0; next }
- { print $0"=1" }' ccsym.raw >ccsym.list
-$awk '/\=/ { print $0; next }
- { print $0"=1" }' Cppsym.true >ccsym.true
-$comm -13 ccsym.true ccsym.list >ccsym.own
-$comm -12 ccsym.true ccsym.list >ccsym.com
-$comm -23 ccsym.true ccsym.list >ccsym.cpp
-also=''
-if $test -z ccsym.raw; then
- echo "Your C compiler doesn't seem to define any symbols!" >&4
- echo " "
- echo "However, your C preprocessor defines the following symbols:"
- $cat Cppsym.true
- ccsymbols=''
- cppsymbols=`$cat Cppsym.true`
- cppsymbols=`echo $cppsymbols`
- cppccsymbols="$cppsymbols"
-else
- if $test -s ccsym.com; then
- echo "Your C compiler and pre-processor define these symbols:"
- $sed -e 's/\(..*\)=.*/\1/' ccsym.com
- also='also '
- symbols='ones'
- cppccsymbols=`$cat ccsym.com`
- cppccsymbols=`echo $cppccsymbols`
- $test "$silent" || sleep 1
- fi
- if $test -s ccsym.cpp; then
- $test "$also" && echo " "
- echo "Your C pre-processor ${also}defines the following symbols:"
- $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
- also='further '
- cppsymbols=`$cat ccsym.cpp`
- cppsymbols=`echo $cppsymbols`
- $test "$silent" || sleep 1
- fi
- if $test -s ccsym.own; then
- $test "$also" && echo " "
- echo "Your C compiler ${also}defines the following cpp symbols:"
- $sed -e 's/\(..*\)=1/\1/' ccsym.own
- $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
- ccsymbols=`$cat ccsym.own`
- ccsymbols=`echo $ccsymbols`
- $test "$silent" || sleep 1
- fi
-fi
-$rm -f ccsym* Cppsym.*
-
-: see if this is a termio system
-val="$undef"
-val2="$undef"
-val3="$undef"
-if $test `./findhdr termios.h`; then
- set tcsetattr i_termios
- eval $inlibc
- val3="$i_termios"
-fi
-echo " "
-case "$val3" in
-"$define") echo "You have POSIX termios.h... good!" >&4;;
-*) if ./Cppsym pyr; then
- case "`/bin/universe`" in
- ucb) if $test `./findhdr sgtty.h`; then
- val2="$define"
- echo "<sgtty.h> found." >&4
- else
- echo "System is pyramid with BSD universe."
- echo "<sgtty.h> not found--you could have problems." >&4
- fi;;
- *) if $test `./findhdr termio.h`; then
- val="$define"
- echo "<termio.h> found." >&4
- else
- echo "System is pyramid with USG universe."
- echo "<termio.h> not found--you could have problems." >&4
- fi;;
- esac
- elif ./usg; then
- if $test `./findhdr termio.h`; then
- echo "<termio.h> found." >&4
- val="$define"
- elif $test `./findhdr sgtty.h`; then
- echo "<sgtty.h> found." >&4
- val2="$define"
- else
-echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
- fi
- else
- if $test `./findhdr sgtty.h`; then
- echo "<sgtty.h> found." >&4
- val2="$define"
- elif $test `./findhdr termio.h`; then
- echo "<termio.h> found." >&4
- val="$define"
- else
-echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
- fi
- fi;;
-esac
-set i_termio; eval $setvar
-val=$val2; set i_sgtty; eval $setvar
-val=$val3; set i_termios; eval $setvar
-
-: see if this is a shadow.h system
-set shadow.h i_shadow
-eval $inhdr
-
-: see if stdarg is available
-echo " "
-if $test `./findhdr stdarg.h`; then
- echo "<stdarg.h> found." >&4
- valstd="$define"
-else
- echo "<stdarg.h> NOT found." >&4
- valstd="$undef"
-fi
-
-: see if varags is available
-echo " "
-if $test `./findhdr varargs.h`; then
- echo "<varargs.h> found." >&4
-else
- echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
-fi
-
-: set up the varargs testing programs
-$cat > varargs.c <<EOP
-#ifdef I_STDARG
-#include <stdarg.h>
-#endif
-#ifdef I_VARARGS
-#include <varargs.h>
-#endif
-
-#ifdef I_STDARG
-int f(char *p, ...)
-#else
-int f(va_alist)
-va_dcl
-#endif
-{
- va_list ap;
-#ifndef I_STDARG
- char *p;
-#endif
-#ifdef I_STDARG
- va_start(ap,p);
-#else
- va_start(ap);
- p = va_arg(ap, char *);
-#endif
- va_end(ap);
-}
-EOP
-$cat > varargs <<EOP
-$startsh
-if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
- echo "true"
-else
- echo "false"
-fi
-$rm -f varargs$_o
-EOP
-chmod +x varargs
-
-: now check which varargs header should be included
-echo " "
-i_varhdr=''
-case "$valstd" in
-"$define")
- if `./varargs I_STDARG`; then
- val='stdarg.h'
- elif `./varargs I_VARARGS`; then
- val='varargs.h'
- fi
- ;;
-*)
- if `./varargs I_VARARGS`; then
- val='varargs.h'
- fi
- ;;
-esac
-case "$val" in
-'')
-echo "I could not find the definition for va_dcl... You have problems..." >&4
- val="$undef"; set i_stdarg; eval $setvar
- val="$undef"; set i_varargs; eval $setvar
- ;;
-*)
- set i_varhdr
- eval $setvar
- case "$i_varhdr" in
- stdarg.h)
- val="$define"; set i_stdarg; eval $setvar
- val="$undef"; set i_varargs; eval $setvar
- ;;
- varargs.h)
- val="$undef"; set i_stdarg; eval $setvar
- val="$define"; set i_varargs; eval $setvar
- ;;
- esac
- echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
-esac
-$rm -f varargs*
-
-: see if stddef is available
-set stddef.h i_stddef
-eval $inhdr
-
-: see if this is a sunmath.h system
-set sunmath.h i_sunmath
-eval $inhdr
-
-: see if sys/access.h is available
-set sys/access.h i_sysaccess
-eval $inhdr
-
-: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
-set sys/filio.h i_sysfilio
-eval $inhdr
-echo " "
-if $test `./findhdr sys/ioctl.h`; then
- val="$define"
- echo '<sys/ioctl.h> found.' >&4
-else
- val="$undef"
- if $test $i_sysfilio = "$define"; then
- echo '<sys/ioctl.h> NOT found.' >&4
- else
- $test $i_sgtty = "$define" && xxx="sgtty.h"
- $test $i_termio = "$define" && xxx="termio.h"
- $test $i_termios = "$define" && xxx="termios.h"
-echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
- fi
-fi
-set i_sysioctl
-eval $setvar
-
-
-: see if this is a syslog.h system
-set syslog.h i_syslog
-eval $inhdr
-
-
-: see if this is a sys/mode.h system
-set sys/mode.h i_sysmode
-eval $inhdr
-
-: see if sys/resource.h has to be included
-set sys/resource.h i_sysresrc
-eval $inhdr
-
-: see if sys/security.h is available
-set sys/security.h i_syssecrt
-eval $inhdr
-
-: see if this is a sys/statvfs.h system
-set sys/statvfs.h i_sysstatvfs
-eval $inhdr
-
-: see if this is a sys/uio.h system
-set sys/uio.h i_sysuio
-eval $inhdr
-
-: see if this is a sys/un.h system
-set sys/un.h i_sysun
-eval $inhdr
-
-
-: see if this is a sys/utsname.h system
-set sys/utsname.h i_sysutsname
-eval $inhdr
-
-: see if this is a syswait system
-set sys/wait.h i_syswait
-eval $inhdr
-
-: see if this is a ustat.h system
-set ustat.h i_ustat
-eval $inhdr
-
-: see if this is an utime system
-set utime.h i_utime
-eval $inhdr
-
-: see if this is a values.h system
-set values.h i_values
-eval $inhdr
-
-: see if this is a vfork system
-case "$d_vfork" in
-"$define")
- set vfork.h i_vfork
- eval $inhdr
- ;;
-*)
- i_vfork="$undef"
- ;;
-esac
-
-: see if gdbm.h is available
-set gdbm.h t_gdbm
-eval $inhdr
-case "$t_gdbm" in
-$define)
- : see if gdbm_open exists
- set gdbm_open d_gdbm_open
- eval $inlibc
- case "$d_gdbm_open" in
- $undef)
- t_gdbm="$undef"
- echo "We won't be including <gdbm.h>"
- ;;
- esac
- ;;
-esac
-val="$t_gdbm"
-set i_gdbm
-eval $setvar
-
-echo " "
-echo "Looking for extensions..." >&4
-: If we are using the old config.sh, known_extensions may contain
-: old or inaccurate or duplicate values.
-known_extensions=''
-nonxs_extensions=''
-: We do not use find because it might not be available.
-: We do not just use MANIFEST because the user may have dropped
-: some additional extensions into the source tree and expect them
-: to be built.
-
-: Function to recursively find available extensions, ignoring DynaLoader
-: NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
-find_extensions='
- for xxx in *; do
- case "$xxx" in
- DynaLoader|dynaload) ;;
- *)
- if $test -f $xxx/$xxx.xs; then
- known_extensions="$known_extensions $1$xxx";
- elif $test -f $xxx/Makefile.PL; then
- nonxs_extensions="$nonxs_extensions $1$xxx";
- else
- if $test -d $xxx -a $# -lt 10; then
- set $1$xxx/ $*;
- cd $xxx;
- eval $find_extensions;
- cd ..;
- shift;
- fi;
- fi
- ;;
- esac;
- done'
-tdir=`pwd`
-cd $rsrc/ext
-set X
-shift
-eval $find_extensions
-set X $nonxs_extensions
-shift
-nonxs_extensions="$*"
-set X $known_extensions
-shift
-known_extensions="$*"
-cd $tdir
-
-: Now see which are supported on this system.
-avail_ext=''
-for xxx in $known_extensions ; do
- case "$xxx" in
- DB_File|db_file)
- case "$i_db" in
- $define) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- GDBM_File|gdbm_fil)
- case "$i_gdbm" in
- $define) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- NDBM_File|ndbm_fil)
- case "$i_ndbm" in
- $define)
- case "$osname-$use64bitint" in
- hpux-define)
- case "$libs" in
- *-lndbm*) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- *) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- esac
- ;;
- ODBM_File|odbm_fil)
- case "${i_dbm}${i_rpcsvcdbm}" in
- *"${define}"*)
- case "$osname-$use64bitint" in
- hpux-define)
- case "$libs" in
- *-ldbm*) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- *) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- esac
- ;;
- POSIX|posix)
- case "$useposix" in
- true|define|y) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- Opcode|opcode)
- case "$useopcode" in
- true|define|y) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- Socket|socket)
- case "$d_socket" in
- true|$define|y) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- Sys/Syslog|sys/syslog)
- : XXX syslog requires socket
- case "$d_socket" in
- true|$define|y) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- Thread|thread)
- case "$usethreads" in
- true|$define|y) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- IPC/SysV|ipc/sysv)
- : XXX Do we need a useipcsysv variable here
- case "${d_msg}${d_sem}${d_shm}" in
- *"${define}"*) avail_ext="$avail_ext $xxx" ;;
- esac
- ;;
- *) avail_ext="$avail_ext $xxx"
- ;;
- esac
-done
-
-set X $avail_ext
-shift
-avail_ext="$*"
-
-: Now see which nonxs extensions are supported on this system.
-: For now assume all are.
-nonxs_ext=''
-for xxx in $nonxs_extensions ; do
- case "$xxx" in
- *) nonxs_ext="$nonxs_ext $xxx"
- ;;
- esac
-done
-
-set X $nonxs_ext
-shift
-nonxs_ext="$*"
-
-case $usedl in
-$define)
- $cat <<EOM
-A number of extensions are supplied with $package. You may choose to
-compile these extensions for dynamic loading (the default), compile
-them into the $package executable (static loading), or not include
-them at all. Answer "none" to include no extensions.
-Note that DynaLoader is always built and need not be mentioned here.
-
-EOM
- case "$dynamic_ext" in
- '') dflt="$avail_ext" ;;
- *) dflt="$dynamic_ext"
- # Perhaps we are reusing an old out-of-date config.sh.
- case "$hint" in
- previous)
- if test X"$dynamic_ext" != X"$avail_ext"; then
- $cat <<EOM
-NOTICE: Your previous config.sh list may be incorrect.
-The extensions now available to you are
- ${avail_ext}
-but the default list from your previous config.sh is
- ${dynamic_ext}
-
-EOM
- fi
- ;;
- esac
- ;;
- esac
- case "$dflt" in
- '') dflt=none;;
- esac
- rp="What extensions do you wish to load dynamically?"
- . ./myread
- case "$ans" in
- none) dynamic_ext=' ' ;;
- *) dynamic_ext="$ans" ;;
- esac
-
- case "$static_ext" in
- '')
- : Exclude those already listed in dynamic linking
- dflt=''
- for xxx in $avail_ext; do
- case " $dynamic_ext " in
- *" $xxx "*) ;;
- *) dflt="$dflt $xxx" ;;
- esac
- done
- set X $dflt
- shift
- dflt="$*"
- ;;
- *) dflt="$static_ext"
- ;;
- esac
-
- case "$dflt" in
- '') dflt=none;;
- esac
- rp="What extensions do you wish to load statically?"
- . ./myread
- case "$ans" in
- none) static_ext=' ' ;;
- *) static_ext="$ans" ;;
- esac
- ;;
-*)
- $cat <<EOM
-A number of extensions are supplied with $package. Answer "none"
-to include no extensions.
-Note that DynaLoader is always built and need not be mentioned here.
-
-EOM
- case "$static_ext" in
- '') dflt="$avail_ext" ;;
- *) dflt="$static_ext"
- # Perhaps we are reusing an old out-of-date config.sh.
- case "$hint" in
- previous)
- if test X"$static_ext" != X"$avail_ext"; then
- $cat <<EOM
-NOTICE: Your previous config.sh list may be incorrect.
-The extensions now available to you are
- ${avail_ext}
-but the default list from your previous config.sh is
- ${static_ext}
-
-EOM
- fi
- ;;
- esac
- ;;
- esac
- : Exclude those that are not xs extensions
- case "$dflt" in
- '') dflt=none;;
- esac
- rp="What extensions do you wish to include?"
- . ./myread
- case "$ans" in
- none) static_ext=' ' ;;
- *) static_ext="$ans" ;;
- esac
- ;;
-esac
-
-set X $dynamic_ext $static_ext $nonxs_ext
-shift
-extensions="$*"
-
-: Remove libraries needed only for extensions
-: The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
-: The exception is SunOS 4.x, which needs them.
-case "${osname}X${osvers}" in
-sunos*X4*)
- perllibs="$libs"
- ;;
-*) case "$usedl" in
- $define|true|[yY]*)
- set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
- shift
- perllibs="$*"
- ;;
- *) perllibs="$libs"
- ;;
- esac
- ;;
-esac
-
-: Remove build directory name from cppstdin so it can be used from
-: either the present location or the final installed location.
-echo " "
-: Get out of the UU directory to get correct path name.
-cd ..
-case "$cppstdin" in
-`pwd`/cppstdin)
- echo "Stripping down cppstdin path name"
- cppstdin=cppstdin
- ;;
-esac
-cd UU
-
-: end of configuration questions
-echo " "
-echo "End of configuration questions."
-echo " "
-
-: back to where it started
-if test -d ../UU; then
- cd ..
-fi
-
-: configuration may be patched via a 'config.over' file
-if $test -f config.over; then
- echo " "
- dflt=y
- rp='I see a config.over file. Do you wish to load it?'
- . UU/myread
- case "$ans" in
- n*) echo "OK, I'll ignore it.";;
- *) . ./config.over
- echo "Configuration override changes have been loaded."
- ;;
- esac
-fi
-
-: in case they want portability, strip down executable paths
-case "$d_portable" in
-"$define")
- echo " "
- echo "Stripping down executable paths..." >&4
- for file in $loclist $trylist; do
- eval temp=\$$file
- eval $file=`basename $temp`
- done
- ;;
-esac
-
-: create config.sh file
-echo " "
-echo "Creating config.sh..." >&4
-$spitshell <<EOT >config.sh
-$startsh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : $package
-# Source directory : $src
-# Configuration time: $cf_time
-# Configured by : $cf_by
-# Target system : $myuname
-
-Author='$Author'
-Date='$Date'
-Header='$Header'
-Id='$Id'
-Locker='$Locker'
-Log='$Log'
-Mcc='$Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source='$Source'
-State='$State'
-_a='$_a'
-_exe='$_exe'
-_o='$_o'
-afs='$afs'
-alignbytes='$alignbytes'
-ansi2knr='$ansi2knr'
-aphostname='$aphostname'
-api_revision='$api_revision'
-api_subversion='$api_subversion'
-api_version='$api_version'
-api_versionstring='$api_versionstring'
-ar='$ar'
-archlib='$archlib'
-archlibexp='$archlibexp'
-archname64='$archname64'
-archname='$archname'
-archobjs='$archobjs'
-awk='$awk'
-baserev='$baserev'
-bash='$bash'
-bin='$bin'
-bincompat5005='$bincompat5005'
-binexp='$binexp'
-bison='$bison'
-byacc='$byacc'
-byteorder='$byteorder'
-c='$c'
-castflags='$castflags'
-cat='$cat'
-cc='$cc'
-cccdlflags='$cccdlflags'
-ccdlflags='$ccdlflags'
-ccflags='$ccflags'
-ccflags_uselargefiles='$ccflags_uselargefiles'
-ccname='$ccname'
-ccsymbols='$ccsymbols'
-ccversion='$ccversion'
-cf_by='$cf_by'
-cf_email='$cf_email'
-cf_time='$cf_time'
-charsize='$charsize'
-chgrp='$chgrp'
-chmod='$chmod'
-chown='$chown'
-clocktype='$clocktype'
-comm='$comm'
-compress='$compress'
-contains='$contains'
-cp='$cp'
-cpio='$cpio'
-cpp='$cpp'
-cpp_stuff='$cpp_stuff'
-cppccsymbols='$cppccsymbols'
-cppflags='$cppflags'
-cpplast='$cpplast'
-cppminus='$cppminus'
-cpprun='$cpprun'
-cppstdin='$cppstdin'
-cppsymbols='$cppsymbols'
-crosscompile='$crosscompile'
-cryptlib='$cryptlib'
-csh='$csh'
-d_Gconvert='$d_Gconvert'
-d_PRIEUldbl='$d_PRIEUldbl'
-d_PRIFUldbl='$d_PRIFUldbl'
-d_PRIGUldbl='$d_PRIGUldbl'
-d_PRIXU64='$d_PRIXU64'
-d_PRId64='$d_PRId64'
-d_PRIeldbl='$d_PRIeldbl'
-d_PRIfldbl='$d_PRIfldbl'
-d_PRIgldbl='$d_PRIgldbl'
-d_PRIi64='$d_PRIi64'
-d_PRIo64='$d_PRIo64'
-d_PRIu64='$d_PRIu64'
-d_PRIx64='$d_PRIx64'
-d_SCNfldbl='$d_SCNfldbl'
-d__fwalk='$d__fwalk'
-d_access='$d_access'
-d_accessx='$d_accessx'
-d_alarm='$d_alarm'
-d_archlib='$d_archlib'
-d_atolf='$d_atolf'
-d_atoll='$d_atoll'
-d_attribut='$d_attribut'
-d_bcmp='$d_bcmp'
-d_bcopy='$d_bcopy'
-d_bincompat5005='$d_bincompat5005'
-d_bsd='$d_bsd'
-d_bsdgetpgrp='$d_bsdgetpgrp'
-d_bsdsetpgrp='$d_bsdsetpgrp'
-d_bzero='$d_bzero'
-d_casti32='$d_casti32'
-d_castneg='$d_castneg'
-d_charvspr='$d_charvspr'
-d_chown='$d_chown'
-d_chroot='$d_chroot'
-d_chsize='$d_chsize'
-d_closedir='$d_closedir'
-d_const='$d_const'
-d_crypt='$d_crypt'
-d_csh='$d_csh'
-d_cuserid='$d_cuserid'
-d_dbl_dig='$d_dbl_dig'
-d_difftime='$d_difftime'
-d_dirnamlen='$d_dirnamlen'
-d_dlerror='$d_dlerror'
-d_dlopen='$d_dlopen'
-d_dlsymun='$d_dlsymun'
-d_dosuid='$d_dosuid'
-d_drand48proto='$d_drand48proto'
-d_dup2='$d_dup2'
-d_eaccess='$d_eaccess'
-d_endgrent='$d_endgrent'
-d_endhent='$d_endhent'
-d_endnent='$d_endnent'
-d_endpent='$d_endpent'
-d_endpwent='$d_endpwent'
-d_endsent='$d_endsent'
-d_eofnblk='$d_eofnblk'
-d_eunice='$d_eunice'
-d_fchmod='$d_fchmod'
-d_fchown='$d_fchown'
-d_fcntl='$d_fcntl'
-d_fcntl_can_lock='$d_fcntl_can_lock'
-d_fd_macros='$d_fd_macros'
-d_fd_set='$d_fd_set'
-d_fds_bits='$d_fds_bits'
-d_fgetpos='$d_fgetpos'
-d_flexfnam='$d_flexfnam'
-d_flock='$d_flock'
-d_fork='$d_fork'
-d_fpathconf='$d_fpathconf'
-d_fpos64_t='$d_fpos64_t'
-d_frexpl='$d_frexpl'
-d_fs_data_s='$d_fs_data_s'
-d_fseeko='$d_fseeko'
-d_fsetpos='$d_fsetpos'
-d_fstatfs='$d_fstatfs'
-d_fstatvfs='$d_fstatvfs'
-d_fsync='$d_fsync'
-d_ftello='$d_ftello'
-d_ftime='$d_ftime'
-d_getcwd='$d_getcwd'
-d_getespwnam='$d_getespwnam'
-d_getfsstat='$d_getfsstat'
-d_getgrent='$d_getgrent'
-d_getgrps='$d_getgrps'
-d_gethbyaddr='$d_gethbyaddr'
-d_gethbyname='$d_gethbyname'
-d_gethent='$d_gethent'
-d_gethname='$d_gethname'
-d_gethostprotos='$d_gethostprotos'
-d_getlogin='$d_getlogin'
-d_getmnt='$d_getmnt'
-d_getmntent='$d_getmntent'
-d_getnbyaddr='$d_getnbyaddr'
-d_getnbyname='$d_getnbyname'
-d_getnent='$d_getnent'
-d_getnetprotos='$d_getnetprotos'
-d_getpagsz='$d_getpagsz'
-d_getpbyname='$d_getpbyname'
-d_getpbynumber='$d_getpbynumber'
-d_getpent='$d_getpent'
-d_getpgid='$d_getpgid'
-d_getpgrp2='$d_getpgrp2'
-d_getpgrp='$d_getpgrp'
-d_getppid='$d_getppid'
-d_getprior='$d_getprior'
-d_getprotoprotos='$d_getprotoprotos'
-d_getprpwnam='$d_getprpwnam'
-d_getpwent='$d_getpwent'
-d_getsbyname='$d_getsbyname'
-d_getsbyport='$d_getsbyport'
-d_getsent='$d_getsent'
-d_getservprotos='$d_getservprotos'
-d_getspnam='$d_getspnam'
-d_gettimeod='$d_gettimeod'
-d_gnulibc='$d_gnulibc'
-d_grpasswd='$d_grpasswd'
-d_hasmntopt='$d_hasmntopt'
-d_htonl='$d_htonl'
-d_iconv='$d_iconv'
-d_index='$d_index'
-d_inetaton='$d_inetaton'
-d_int64_t='$d_int64_t'
-d_isascii='$d_isascii'
-d_isnan='$d_isnan'
-d_isnanl='$d_isnanl'
-d_killpg='$d_killpg'
-d_lchown='$d_lchown'
-d_ldbl_dig='$d_ldbl_dig'
-d_link='$d_link'
-d_locconv='$d_locconv'
-d_lockf='$d_lockf'
-d_longdbl='$d_longdbl'
-d_longlong='$d_longlong'
-d_lseekproto='$d_lseekproto'
-d_lstat='$d_lstat'
-d_madvise='$d_madvise'
-d_mblen='$d_mblen'
-d_mbstowcs='$d_mbstowcs'
-d_mbtowc='$d_mbtowc'
-d_memchr='$d_memchr'
-d_memcmp='$d_memcmp'
-d_memcpy='$d_memcpy'
-d_memmove='$d_memmove'
-d_memset='$d_memset'
-d_mkdir='$d_mkdir'
-d_mkdtemp='$d_mkdtemp'
-d_mkfifo='$d_mkfifo'
-d_mkstemp='$d_mkstemp'
-d_mkstemps='$d_mkstemps'
-d_mktime='$d_mktime'
-d_mmap='$d_mmap'
-d_modfl='$d_modfl'
-d_mprotect='$d_mprotect'
-d_msg='$d_msg'
-d_msg_ctrunc='$d_msg_ctrunc'
-d_msg_dontroute='$d_msg_dontroute'
-d_msg_oob='$d_msg_oob'
-d_msg_peek='$d_msg_peek'
-d_msg_proxy='$d_msg_proxy'
-d_msgctl='$d_msgctl'
-d_msgget='$d_msgget'
-d_msgrcv='$d_msgrcv'
-d_msgsnd='$d_msgsnd'
-d_msync='$d_msync'
-d_munmap='$d_munmap'
-d_mymalloc='$d_mymalloc'
-d_nice='$d_nice'
-d_nv_preserves_uv='$d_nv_preserves_uv'
-d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
-d_off64_t='$d_off64_t'
-d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
-d_oldpthreads='$d_oldpthreads'
-d_oldsock='$d_oldsock'
-d_open3='$d_open3'
-d_pathconf='$d_pathconf'
-d_pause='$d_pause'
-d_perl_otherlibdirs='$d_perl_otherlibdirs'
-d_phostname='$d_phostname'
-d_pipe='$d_pipe'
-d_poll='$d_poll'
-d_portable='$d_portable'
-d_pthread_yield='$d_pthread_yield'
-d_pwage='$d_pwage'
-d_pwchange='$d_pwchange'
-d_pwclass='$d_pwclass'
-d_pwcomment='$d_pwcomment'
-d_pwexpire='$d_pwexpire'
-d_pwgecos='$d_pwgecos'
-d_pwpasswd='$d_pwpasswd'
-d_pwquota='$d_pwquota'
-d_qgcvt='$d_qgcvt'
-d_quad='$d_quad'
-d_readdir='$d_readdir'
-d_readlink='$d_readlink'
-d_rename='$d_rename'
-d_rewinddir='$d_rewinddir'
-d_rmdir='$d_rmdir'
-d_safebcpy='$d_safebcpy'
-d_safemcpy='$d_safemcpy'
-d_sanemcmp='$d_sanemcmp'
-d_sbrkproto='$d_sbrkproto'
-d_sched_yield='$d_sched_yield'
-d_scm_rights='$d_scm_rights'
-d_seekdir='$d_seekdir'
-d_select='$d_select'
-d_sem='$d_sem'
-d_semctl='$d_semctl'
-d_semctl_semid_ds='$d_semctl_semid_ds'
-d_semctl_semun='$d_semctl_semun'
-d_semget='$d_semget'
-d_semop='$d_semop'
-d_setegid='$d_setegid'
-d_seteuid='$d_seteuid'
-d_setgrent='$d_setgrent'
-d_setgrps='$d_setgrps'
-d_sethent='$d_sethent'
-d_setlinebuf='$d_setlinebuf'
-d_setlocale='$d_setlocale'
-d_setnent='$d_setnent'
-d_setpent='$d_setpent'
-d_setpgid='$d_setpgid'
-d_setpgrp2='$d_setpgrp2'
-d_setpgrp='$d_setpgrp'
-d_setprior='$d_setprior'
-d_setproctitle='$d_setproctitle'
-d_setpwent='$d_setpwent'
-d_setregid='$d_setregid'
-d_setresgid='$d_setresgid'
-d_setresuid='$d_setresuid'
-d_setreuid='$d_setreuid'
-d_setrgid='$d_setrgid'
-d_setruid='$d_setruid'
-d_setsent='$d_setsent'
-d_setsid='$d_setsid'
-d_setvbuf='$d_setvbuf'
-d_sfio='$d_sfio'
-d_shm='$d_shm'
-d_shmat='$d_shmat'
-d_shmatprototype='$d_shmatprototype'
-d_shmctl='$d_shmctl'
-d_shmdt='$d_shmdt'
-d_shmget='$d_shmget'
-d_sigaction='$d_sigaction'
-d_sigsetjmp='$d_sigsetjmp'
-d_socket='$d_socket'
-d_socklen_t='$d_socklen_t'
-d_sockpair='$d_sockpair'
-d_socks5_init='$d_socks5_init'
-d_sqrtl='$d_sqrtl'
-d_statblks='$d_statblks'
-d_statfs_f_flags='$d_statfs_f_flags'
-d_statfs_s='$d_statfs_s'
-d_statvfs='$d_statvfs'
-d_stdio_cnt_lval='$d_stdio_cnt_lval'
-d_stdio_ptr_lval='$d_stdio_ptr_lval'
-d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
-d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
-d_stdio_stream_array='$d_stdio_stream_array'
-d_stdiobase='$d_stdiobase'
-d_stdstdio='$d_stdstdio'
-d_strchr='$d_strchr'
-d_strcoll='$d_strcoll'
-d_strctcpy='$d_strctcpy'
-d_strerrm='$d_strerrm'
-d_strerror='$d_strerror'
-d_strtod='$d_strtod'
-d_strtol='$d_strtol'
-d_strtold='$d_strtold'
-d_strtoll='$d_strtoll'
-d_strtoul='$d_strtoul'
-d_strtoull='$d_strtoull'
-d_strtouq='$d_strtouq'
-d_strxfrm='$d_strxfrm'
-d_suidsafe='$d_suidsafe'
-d_symlink='$d_symlink'
-d_syscall='$d_syscall'
-d_sysconf='$d_sysconf'
-d_sysernlst='$d_sysernlst'
-d_syserrlst='$d_syserrlst'
-d_system='$d_system'
-d_tcgetpgrp='$d_tcgetpgrp'
-d_tcsetpgrp='$d_tcsetpgrp'
-d_telldir='$d_telldir'
-d_telldirproto='$d_telldirproto'
-d_time='$d_time'
-d_times='$d_times'
-d_truncate='$d_truncate'
-d_tzname='$d_tzname'
-d_umask='$d_umask'
-d_uname='$d_uname'
-d_union_semun='$d_union_semun'
-d_ustat='$d_ustat'
-d_vendorarch='$d_vendorarch'
-d_vendorbin='$d_vendorbin'
-d_vendorlib='$d_vendorlib'
-d_vfork='$d_vfork'
-d_void_closedir='$d_void_closedir'
-d_voidsig='$d_voidsig'
-d_voidtty='$d_voidtty'
-d_volatile='$d_volatile'
-d_vprintf='$d_vprintf'
-d_wait4='$d_wait4'
-d_waitpid='$d_waitpid'
-d_wcstombs='$d_wcstombs'
-d_wctomb='$d_wctomb'
-d_xenix='$d_xenix'
-date='$date'
-db_hashtype='$db_hashtype'
-db_prefixtype='$db_prefixtype'
-defvoidused='$defvoidused'
-direntrytype='$direntrytype'
-dlext='$dlext'
-dlsrc='$dlsrc'
-doublesize='$doublesize'
-drand01='$drand01'
-dynamic_ext='$dynamic_ext'
-eagain='$eagain'
-ebcdic='$ebcdic'
-echo='$echo'
-egrep='$egrep'
-emacs='$emacs'
-eunicefix='$eunicefix'
-exe_ext='$exe_ext'
-expr='$expr'
-extensions='$extensions'
-fflushNULL='$fflushNULL'
-fflushall='$fflushall'
-find='$find'
-firstmakefile='$firstmakefile'
-flex='$flex'
-fpossize='$fpossize'
-fpostype='$fpostype'
-freetype='$freetype'
-full_ar='$full_ar'
-full_csh='$full_csh'
-full_sed='$full_sed'
-gccosandvers='$gccosandvers'
-gccversion='$gccversion'
-gidformat='$gidformat'
-gidsign='$gidsign'
-gidsize='$gidsize'
-gidtype='$gidtype'
-glibpth='$glibpth'
-grep='$grep'
-groupcat='$groupcat'
-groupstype='$groupstype'
-gzip='$gzip'
-h_fcntl='$h_fcntl'
-h_sysfile='$h_sysfile'
-hint='$hint'
-hostcat='$hostcat'
-i16size='$i16size'
-i16type='$i16type'
-i32size='$i32size'
-i32type='$i32type'
-i64size='$i64size'
-i64type='$i64type'
-i8size='$i8size'
-i8type='$i8type'
-i_arpainet='$i_arpainet'
-i_bsdioctl='$i_bsdioctl'
-i_db='$i_db'
-i_dbm='$i_dbm'
-i_dirent='$i_dirent'
-i_dld='$i_dld'
-i_dlfcn='$i_dlfcn'
-i_fcntl='$i_fcntl'
-i_float='$i_float'
-i_gdbm='$i_gdbm'
-i_grp='$i_grp'
-i_iconv='$i_iconv'
-i_ieeefp='$i_ieeefp'
-i_inttypes='$i_inttypes'
-i_libutil='$i_libutil'
-i_limits='$i_limits'
-i_locale='$i_locale'
-i_machcthr='$i_machcthr'
-i_malloc='$i_malloc'
-i_math='$i_math'
-i_memory='$i_memory'
-i_mntent='$i_mntent'
-i_ndbm='$i_ndbm'
-i_netdb='$i_netdb'
-i_neterrno='$i_neterrno'
-i_netinettcp='$i_netinettcp'
-i_niin='$i_niin'
-i_poll='$i_poll'
-i_prot='$i_prot'
-i_pthread='$i_pthread'
-i_pwd='$i_pwd'
-i_rpcsvcdbm='$i_rpcsvcdbm'
-i_sfio='$i_sfio'
-i_sgtty='$i_sgtty'
-i_shadow='$i_shadow'
-i_socks='$i_socks'
-i_stdarg='$i_stdarg'
-i_stddef='$i_stddef'
-i_stdlib='$i_stdlib'
-i_string='$i_string'
-i_sunmath='$i_sunmath'
-i_sysaccess='$i_sysaccess'
-i_sysdir='$i_sysdir'
-i_sysfile='$i_sysfile'
-i_sysfilio='$i_sysfilio'
-i_sysin='$i_sysin'
-i_sysioctl='$i_sysioctl'
-i_syslog='$i_syslog'
-i_sysmman='$i_sysmman'
-i_sysmode='$i_sysmode'
-i_sysmount='$i_sysmount'
-i_sysndir='$i_sysndir'
-i_sysparam='$i_sysparam'
-i_sysresrc='$i_sysresrc'
-i_syssecrt='$i_syssecrt'
-i_sysselct='$i_sysselct'
-i_syssockio='$i_syssockio'
-i_sysstat='$i_sysstat'
-i_sysstatfs='$i_sysstatfs'
-i_sysstatvfs='$i_sysstatvfs'
-i_systime='$i_systime'
-i_systimek='$i_systimek'
-i_systimes='$i_systimes'
-i_systypes='$i_systypes'
-i_sysuio='$i_sysuio'
-i_sysun='$i_sysun'
-i_sysutsname='$i_sysutsname'
-i_sysvfs='$i_sysvfs'
-i_syswait='$i_syswait'
-i_termio='$i_termio'
-i_termios='$i_termios'
-i_time='$i_time'
-i_unistd='$i_unistd'
-i_ustat='$i_ustat'
-i_utime='$i_utime'
-i_values='$i_values'
-i_varargs='$i_varargs'
-i_varhdr='$i_varhdr'
-i_vfork='$i_vfork'
-ignore_versioned_solibs='$ignore_versioned_solibs'
-inc_version_list='$inc_version_list'
-inc_version_list_init='$inc_version_list_init'
-incpath='$incpath'
-inews='$inews'
-installarchlib='$installarchlib'
-installbin='$installbin'
-installman1dir='$installman1dir'
-installman3dir='$installman3dir'
-installprefix='$installprefix'
-installprefixexp='$installprefixexp'
-installprivlib='$installprivlib'
-installscript='$installscript'
-installsitearch='$installsitearch'
-installsitebin='$installsitebin'
-installsitelib='$installsitelib'
-installstyle='$installstyle'
-installusrbinperl='$installusrbinperl'
-installvendorarch='$installvendorarch'
-installvendorbin='$installvendorbin'
-installvendorlib='$installvendorlib'
-intsize='$intsize'
-issymlink='$issymlink'
-ivdformat='$ivdformat'
-ivsize='$ivsize'
-ivtype='$ivtype'
-known_extensions='$known_extensions'
-ksh='$ksh'
-ld='$ld'
-lddlflags='$lddlflags'
-ldflags='$ldflags'
-ldflags_uselargefiles='$ldflags_uselargefiles'
-ldlibpthname='$ldlibpthname'
-less='$less'
-lib_ext='$lib_ext'
-libc='$libc'
-libperl='$libperl'
-libpth='$libpth'
-libs='$libs'
-libsdirs='$libsdirs'
-libsfiles='$libsfiles'
-libsfound='$libsfound'
-libspath='$libspath'
-libswanted='$libswanted'
-libswanted_uselargefiles='$libswanted_uselargefiles'
-line='$line'
-lint='$lint'
-lkflags='$lkflags'
-ln='$ln'
-lns='$lns'
-locincpth='$locincpth'
-loclibpth='$loclibpth'
-longdblsize='$longdblsize'
-longlongsize='$longlongsize'
-longsize='$longsize'
-lp='$lp'
-lpr='$lpr'
-ls='$ls'
-lseeksize='$lseeksize'
-lseektype='$lseektype'
-mail='$mail'
-mailx='$mailx'
-make='$make'
-make_set_make='$make_set_make'
-mallocobj='$mallocobj'
-mallocsrc='$mallocsrc'
-malloctype='$malloctype'
-man1dir='$man1dir'
-man1direxp='$man1direxp'
-man1ext='$man1ext'
-man3dir='$man3dir'
-man3direxp='$man3direxp'
-man3ext='$man3ext'
-mips_type='$mips_type'
-mkdir='$mkdir'
-mmaptype='$mmaptype'
-modetype='$modetype'
-more='$more'
-multiarch='$multiarch'
-mv='$mv'
-myarchname='$myarchname'
-mydomain='$mydomain'
-myhostname='$myhostname'
-myuname='$myuname'
-n='$n'
-netdb_hlen_type='$netdb_hlen_type'
-netdb_host_type='$netdb_host_type'
-netdb_name_type='$netdb_name_type'
-netdb_net_type='$netdb_net_type'
-nm='$nm'
-nm_opt='$nm_opt'
-nm_so_opt='$nm_so_opt'
-nonxs_ext='$nonxs_ext'
-nroff='$nroff'
-nvEUformat='$nvEUformat'
-nvFUformat='$nvFUformat'
-nvGUformat='$nvGUformat'
-nveformat='$nveformat'
-nvfformat='$nvfformat'
-nvgformat='$nvgformat'
-nvsize='$nvsize'
-nvtype='$nvtype'
-o_nonblock='$o_nonblock'
-obj_ext='$obj_ext'
-old_pthread_create_joinable='$old_pthread_create_joinable'
-optimize='$optimize'
-orderlib='$orderlib'
-osname='$osname'
-osvers='$osvers'
-otherlibdirs='$otherlibdirs'
-package='$package'
-pager='$pager'
-passcat='$passcat'
-patchlevel='$patchlevel'
-path_sep='$path_sep'
-perl5='$perl5'
-perl='$perl'
-perladmin='$perladmin'
-perllibs='$perllibs'
-perlpath='$perlpath'
-pg='$pg'
-phostname='$phostname'
-pidtype='$pidtype'
-plibpth='$plibpth'
-pm_apiversion='$pm_apiversion'
-pmake='$pmake'
-pr='$pr'
-prefix='$prefix'
-prefixexp='$prefixexp'
-privlib='$privlib'
-privlibexp='$privlibexp'
-prototype='$prototype'
-ptrsize='$ptrsize'
-quadkind='$quadkind'
-quadtype='$quadtype'
-randbits='$randbits'
-randfunc='$randfunc'
-randseedtype='$randseedtype'
-ranlib='$ranlib'
-rd_nodata='$rd_nodata'
-revision='$revision'
-rm='$rm'
-rmail='$rmail'
-runnm='$runnm'
-sPRIEUldbl='$sPRIEUldbl'
-sPRIFUldbl='$sPRIFUldbl'
-sPRIGUldbl='$sPRIGUldbl'
-sPRIXU64='$sPRIXU64'
-sPRId64='$sPRId64'
-sPRIeldbl='$sPRIeldbl'
-sPRIfldbl='$sPRIfldbl'
-sPRIgldbl='$sPRIgldbl'
-sPRIi64='$sPRIi64'
-sPRIo64='$sPRIo64'
-sPRIu64='$sPRIu64'
-sPRIx64='$sPRIx64'
-sSCNfldbl='$sSCNfldbl'
-sched_yield='$sched_yield'
-scriptdir='$scriptdir'
-scriptdirexp='$scriptdirexp'
-sed='$sed'
-seedfunc='$seedfunc'
-selectminbits='$selectminbits'
-selecttype='$selecttype'
-sendmail='$sendmail'
-sh='$sh'
-shar='$shar'
-sharpbang='$sharpbang'
-shmattype='$shmattype'
-shortsize='$shortsize'
-shrpenv='$shrpenv'
-shsharp='$shsharp'
-sig_count='$sig_count'
-sig_name='$sig_name'
-sig_name_init='$sig_name_init'
-sig_num='$sig_num'
-sig_num_init='$sig_num_init'
-signal_t='$signal_t'
-sitearch='$sitearch'
-sitearchexp='$sitearchexp'
-sitebin='$sitebin'
-sitebinexp='$sitebinexp'
-sitelib='$sitelib'
-sitelib_stem='$sitelib_stem'
-sitelibexp='$sitelibexp'
-siteprefix='$siteprefix'
-siteprefixexp='$siteprefixexp'
-sizesize='$sizesize'
-sizetype='$sizetype'
-sleep='$sleep'
-smail='$smail'
-so='$so'
-sockethdr='$sockethdr'
-socketlib='$socketlib'
-socksizetype='$socksizetype'
-sort='$sort'
-spackage='$spackage'
-spitshell='$spitshell'
-src='$src'
-ssizetype='$ssizetype'
-startperl='$startperl'
-startsh='$startsh'
-static_ext='$static_ext'
-stdchar='$stdchar'
-stdio_base='$stdio_base'
-stdio_bufsiz='$stdio_bufsiz'
-stdio_cnt='$stdio_cnt'
-stdio_filbuf='$stdio_filbuf'
-stdio_ptr='$stdio_ptr'
-stdio_stream_array='$stdio_stream_array'
-strings='$strings'
-submit='$submit'
-subversion='$subversion'
-sysman='$sysman'
-tail='$tail'
-tar='$tar'
-tbl='$tbl'
-tee='$tee'
-test='$test'
-timeincl='$timeincl'
-timetype='$timetype'
-touch='$touch'
-tr='$tr'
-trnl='$trnl'
-troff='$troff'
-u16size='$u16size'
-u16type='$u16type'
-u32size='$u32size'
-u32type='$u32type'
-u64size='$u64size'
-u64type='$u64type'
-u8size='$u8size'
-u8type='$u8type'
-uidformat='$uidformat'
-uidsign='$uidsign'
-uidsize='$uidsize'
-uidtype='$uidtype'
-uname='$uname'
-uniq='$uniq'
-uquadtype='$uquadtype'
-use5005threads='$use5005threads'
-use64bitall='$use64bitall'
-use64bitint='$use64bitint'
-usedl='$usedl'
-useithreads='$useithreads'
-uselargefiles='$uselargefiles'
-uselongdouble='$uselongdouble'
-usemorebits='$usemorebits'
-usemultiplicity='$usemultiplicity'
-usemymalloc='$usemymalloc'
-usenm='$usenm'
-useopcode='$useopcode'
-useperlio='$useperlio'
-useposix='$useposix'
-usesfio='$usesfio'
-useshrplib='$useshrplib'
-usesocks='$usesocks'
-usethreads='$usethreads'
-usevendorprefix='$usevendorprefix'
-usevfork='$usevfork'
-usrinc='$usrinc'
-uuname='$uuname'
-uvXUformat='$uvXUformat'
-uvoformat='$uvoformat'
-uvsize='$uvsize'
-uvtype='$uvtype'
-uvuformat='$uvuformat'
-uvxformat='$uvxformat'
-vendorarch='$vendorarch'
-vendorarchexp='$vendorarchexp'
-vendorbin='$vendorbin'
-vendorbinexp='$vendorbinexp'
-vendorlib='$vendorlib'
-vendorlib_stem='$vendorlib_stem'
-vendorlibexp='$vendorlibexp'
-vendorprefix='$vendorprefix'
-vendorprefixexp='$vendorprefixexp'
-version='$version'
-versiononly='$versiononly'
-vi='$vi'
-voidflags='$voidflags'
-xlibpth='$xlibpth'
-xs_apiversion='$xs_apiversion'
-yacc='$yacc'
-yaccflags='$yaccflags'
-zcat='$zcat'
-zip='$zip'
-EOT
-
-: Add in command line options if available
-$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
-
-: add special variables
-$test -f $src/patchlevel.h && \
-awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
-echo "CONFIGDOTSH=true" >>config.sh
-
-: propagate old symbols
-if $test -f UU/config.sh; then
- <UU/config.sh $sort | $uniq >UU/oldconfig.sh
- sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
- $sort | $uniq -u >UU/oldsyms
- set X `cat UU/oldsyms`
- shift
- case $# in
- 0) ;;
- *)
- cat <<EOM
-Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
-EOM
- echo "# Variables propagated from previous config.sh file." >>config.sh
- for sym in `cat UU/oldsyms`; do
- echo " Propagating $hint variable "'$'"$sym..."
- eval 'tmp="$'"${sym}"'"'
- echo "$tmp" | \
- sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
- done
- ;;
- esac
-fi
-
-: Finish up by extracting the .SH files
-case "$alldone" in
-exit)
- $rm -rf UU
- echo "Done."
- exit 0
- ;;
-cont)
- ;;
-'')
- dflt=''
- nostick=true
- $cat <<EOM
-
-If you'd like to make any changes to the config.sh file before I begin
-to configure things, do it as a shell escape now (e.g. !vi config.sh).
-
-EOM
- rp="Press return or use a shell escape to edit config.sh:"
- . UU/myread
- nostick=''
- case "$ans" in
- '') ;;
- *) : in case they cannot read
- sh 1>&4 -c "$ans";;
- esac
- ;;
-esac
-
-: if this fails, just run all the .SH files by hand
-. ./config.sh
-
-echo " "
-exec 1>&4
-. ./UU/extract
-
-if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
- dflt=y
- case "$silent" in
- true) ;;
- *)
- $cat <<EOM
-
-Now you need to generate make dependencies by running "$make depend".
-You might prefer to run it in background: "$make depend > makedepend.out &"
-It can take a while, so you might not want to run it right now.
-
-EOM
- ;;
- esac
- rp="Run $make depend now?"
- . UU/myread
- case "$ans" in
- y*)
- $make depend && echo "Now you must run '$make'."
- ;;
- *)
- echo "You must run '$make depend' then '$make'."
- ;;
- esac
-elif test -f [Mm]akefile; then
- echo " "
- echo "Now you must run a $make."
-else
- echo "Done."
-fi
-
-if $test -f Policy.sh; then
- $cat <<EOM
-
-If you compile $package on a different machine or from a different object
-directory, copy the Policy.sh file from this object directory to the
-new one before you run Configure -- this will help you with most of
-the policy defaults.
-
-EOM
-fi
-if $test -f config.msg; then
- echo "Hmm. I also noted the following information while running:"
- echo " "
- $cat config.msg >&4
- $rm -f config.msg
-fi
-$rm -f kit*isdone ark*isdone
-$rm -rf UU
-
-: End of Configure
-
diff --git a/contrib/perl5/Copying b/contrib/perl5/Copying
deleted file mode 100644
index 43cd72c..0000000
--- a/contrib/perl5/Copying
+++ /dev/null
@@ -1,248 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 1, February 1989
-
- Copyright (C) 1989 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The license agreements of most software companies try to keep users
-at the mercy of those companies. By contrast, our General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. The
-General Public License applies to the Free Software Foundation's
-software and to any other program whose authors commit to using it.
-You can use it for your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Specifically, the General Public License is designed to make
-sure that you have the freedom to give away or sell copies of free
-software, that you receive source code or can get it if you want it,
-that you can change the software or use pieces of it in new free
-programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of a such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must tell them their rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any program or other work which
-contains a notice placed by the copyright holder saying it may be
-distributed under the terms of this General Public License. The
-"Program", below, refers to any such program or work, and a "work based
-on the Program" means either the Program or any work containing the
-Program or a portion of it, either verbatim or with modifications. Each
-licensee is addressed as "you".
-
- 1. You may copy and distribute verbatim copies of the Program's source
-code as you receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this
-General Public License and to the absence of any warranty; and give any
-other recipients of the Program a copy of this General Public License
-along with the Program. You may charge a fee for the physical act of
-transferring a copy.
-
- 2. You may modify your copy or copies of the Program or any portion of
-it, and copy and distribute such modifications under the terms of Paragraph
-1 above, provided that you also do the following:
-
- a) cause the modified files to carry prominent notices stating that
- you changed the files and the date of any change; and
-
- b) cause the whole of any work that you distribute or publish, that
- in whole or in part contains the Program or any part thereof, either
- with or without modifications, to be licensed at no charge to all
- third parties under the terms of this General Public License (except
- that you may choose to grant warranty protection to some or all
- third parties, at your option).
-
- c) If the modified program normally reads commands interactively when
- run, you must cause it, when started running for such interactive use
- in the simplest and most usual way, to print or display an
- announcement including an appropriate copyright notice and a notice
- that there is no warranty (or else, saying that you provide a
- warranty) and that users may redistribute the program under these
- conditions, and telling the user how to view a copy of this General
- Public License.
-
- d) You may charge a fee for the physical act of transferring a
- copy, and you may at your option offer warranty protection in
- exchange for a fee.
-
-Mere aggregation of another independent work with the Program (or its
-derivative) on a volume of a storage or distribution medium does not bring
-the other work under the scope of these terms.
-
- 3. You may copy and distribute the Program (or a portion or derivative of
-it, under Paragraph 2) in object code or executable form under the terms of
-Paragraphs 1 and 2 above provided that you also do one of the following:
-
- a) accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Paragraphs 1 and 2 above; or,
-
- b) accompany it with a written offer, valid for at least three
- years, to give any third party free (except for a nominal charge
- for the cost of distribution) a complete machine-readable copy of the
- corresponding source code, to be distributed under the terms of
- Paragraphs 1 and 2 above; or,
-
- c) accompany it with the information you received as to where the
- corresponding source code may be obtained. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form alone.)
-
-Source code for a work means the preferred form of the work for making
-modifications to it. For an executable file, complete source code means
-all the source code for all modules it contains; but, as a special
-exception, it need not include source code for modules which are standard
-libraries that accompany the operating system on which the executable
-file runs, or for standard header files or definitions files that
-accompany that operating system.
-
- 4. You may not copy, modify, sublicense, distribute or transfer the
-Program except as expressly provided under this General Public License.
-Any attempt otherwise to copy, modify, sublicense, distribute or transfer
-the Program is void, and will automatically terminate your rights to use
-the Program under this License. However, parties who have received
-copies, or rights to use copies, from you under this General Public
-License will not have their licenses terminated so long as such parties
-remain in full compliance.
-
- 5. By copying, distributing or modifying the Program (or any work based
-on the Program) you indicate your acceptance of this license to do so,
-and all its terms and conditions.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the original
-licensor to copy, distribute or modify the Program subject to these
-terms and conditions. You may not impose any further restrictions on the
-recipients' exercise of the rights granted herein.
-
- 7. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of the license which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-the license, you may choose any version ever published by the Free Software
-Foundation.
-
- 8. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to humanity, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest to
-attach them to the start of each source file to most effectively convey
-the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19xx name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- program `Gnomovision' (a program to direct compilers to make passes
- at assemblers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/contrib/perl5/EXTERN.h b/contrib/perl5/EXTERN.h
deleted file mode 100644
index 1480551..0000000
--- a/contrib/perl5/EXTERN.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* EXTERN.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * EXT designates a global var which is defined in perl.h
- * dEXT designates a global var which is defined in another
- * file, so we can't count on finding it in perl.h
- * (this practice should be avoided).
- */
-#undef EXT
-#undef dEXT
-#undef EXTCONST
-#undef dEXTCONST
-#if defined(VMS) && !defined(__GNUC__)
- /* Suppress portability warnings from DECC for VMS-specific extensions */
-# ifdef __DECC
-# pragma message disable (GLOBALEXT,NOSHAREEXT,READONLYEXT)
-# endif
-# define EXT globalref
-# define dEXT globaldef {"$GLOBAL_RW_VARS"} noshare
-# define EXTCONST globalref
-# define dEXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly
-#else
-# if defined(WIN32) && !defined(PERL_STATIC_SYMS) && !defined(PERL_OBJECT)
-# ifdef PERLDLL
-# define EXT extern __declspec(dllexport)
-# define dEXT
-# define EXTCONST extern __declspec(dllexport) const
-# define dEXTCONST const
-# else
-# define EXT extern __declspec(dllimport)
-# define dEXT
-# define EXTCONST extern __declspec(dllimport) const
-# define dEXTCONST const
-# endif
-# else
-# if defined(__CYGWIN__) && defined(USEIMPORTLIB)
-# define EXT extern __declspec(dllimport)
-# define dEXT
-# define EXTCONST extern __declspec(dllimport) const
-# define dEXTCONST const
-# else
-# define EXT extern
-# define dEXT
-# define EXTCONST extern const
-# define dEXTCONST const
-# endif
-# endif
-#endif
-
-#undef INIT
-#define INIT(x)
-
-#undef DOINIT
diff --git a/contrib/perl5/INSTALL b/contrib/perl5/INSTALL
deleted file mode 100644
index dbf6cb5..0000000
--- a/contrib/perl5/INSTALL
+++ /dev/null
@@ -1,2167 +0,0 @@
-=head1 NAME
-
-Install - Build and Installation guide for perl5.
-
-=head1 SYNOPSIS
-
-First, make sure you are installing an up-to-date version of Perl. If
-you didn't get your Perl source from CPAN, check the latest version at
-<URL:http://www.cpan.org/src/>.
-
-The basic steps to build and install perl5 on a Unix system
-with all the defaults are:
-
- rm -f config.sh Policy.sh
- sh Configure -de
- make
- make test
- make install
-
- # You may also wish to add these:
- (cd /usr/include && h2ph *.h sys/*.h)
- (installhtml --help)
- (cd pod && make tex && <process the latex files>)
-
-Each of these is explained in further detail below.
-
-B<NOTE>: starting from the release 5.6.0 Perl will use a version
-scheme where even-numbered subreleases (like 5.6) are stable
-maintenance releases and odd-numbered subreleases (like 5.7) are
-unstable development releases. Development releases should not be
-used in production environments. Fixes and new features are first
-carefully tested in development releases and only if they prove
-themselves to be worthy will they be migrated to the maintenance
-releases.
-
-The above commands will install Perl to /usr/local or /opt, depending
-on the platform. If that's not okay with you, use
-
- rm -f config.sh Policy.sh
- sh Configure
- make
- make test
- make install
-
-For information on non-Unix systems, see the section on
-L<"Porting information"> below.
-
-If you have problems, corrections, or questions, please see
-L<"Reporting Problems"> below.
-
-For information on what's new in this release, see the
-pod/perldelta.pod file. For more detailed information about specific
-changes, see the Changes file.
-
-=head1 DESCRIPTION
-
-This document is written in pod format as an easy way to indicate its
-structure. The pod format is described in pod/perlpod.pod, but you can
-read it as is with any pager or editor. Headings and items are marked
-by lines beginning with '='. The other mark-up used is
-
- B<text> embolden text, used for switches, programs or commands
- C<code> literal code
- L<name> A link (cross reference) to name
-
-Although most of the defaults are probably fine for most users,
-you should probably at least skim through this entire document before
-proceeding.
-
-If you're building Perl on a non-Unix system, you should also read
-the README file specific to your operating system, since this may
-provide additional or different instructions for building Perl.
-
-If there is a hint file for your system (in the hints/ directory) you
-should also read that hint file for specific information for your
-system. (Unixware users should use the svr4.sh hint file.) If
-there is a README file for your platform, then you should read
-that too. Additional information is in the Porting/ directory.
-
-=head1 WARNING: This version requires an extra step to build old extensions.
-
-5.005_53 and later releases do not export unadorned
-global symbols anymore. This means you may need to build older
-extensions that have not been updated for the new naming convention
-with:
-
- perl Makefile.PL POLLUTE=1
-
-Alternatively, you can enable CPP symbol pollution wholesale by
-building perl itself with:
-
- sh Configure -Accflags=-DPERL_POLLUTE
-
-pod/perldelta.pod contains more details about this.
-
-=head1 WARNING: This version may not be binary compatible with Perl 5.005.
-
-Using the default Configure options for building perl should get you
-a perl that will be binary compatible with the 5.005 release.
-
-However, if you run Configure with any custom options, such as
--Dusethreads, -Dusemultiplicity, -Dusemymalloc, -Ubincompat5005 etc.,
-the resulting perl will not be binary compatible. Under these
-circumstances, if you have dynamically loaded extensions that were
-built under perl 5.005, you will need to rebuild and reinstall all
-those extensions to use them with 5.6.
-
-Pure perl modules without XS or C code should continue to work fine
-without reinstallation. See the discussions below on
-L<"Coexistence with earlier versions of perl5"> and
-L<"Upgrading from 5.005 to 5.6"> for more details.
-
-The standard extensions supplied with Perl will be handled automatically.
-
-On a related issue, old modules may possibly be affected by the
-changes in the Perl language in the current release. Please see
-pod/perldelta.pod (and pod/perl500Xdelta.pod) for a description of
-what's changed. See your installed copy of the perllocal.pod
-file for a (possibly incomplete) list of locally installed modules.
-Also see CPAN::autobundle for one way to make a "bundle" of your
-currently installed modules.
-
-=head1 WARNING: This version requires a compiler that supports ANSI C.
-
-Most C compilers are now ANSI-compliant. However, a few current
-computers are delivered with an older C compiler expressly for
-rebuilding the system kernel, or for some other historical reason.
-Alternatively, you may have an old machine which was shipped before
-ANSI compliance became widespread. Such compilers are not suitable
-for building Perl.
-
-If you find that your default C compiler is not ANSI-capable, but you
-know that an ANSI-capable compiler is installed on your system, you
-can tell F<Configure> to use the correct compiler by means of the
-C<-Dcc=> command-line option -- see L<"gcc">.
-
-If do not have an ANSI-capable compiler there are several avenues open
-to you:
-
-=over 4
-
-=item *
-
-You may try obtaining GCC, available from GNU mirrors worldwide,
-listed at <URL:http://www.gnu.org/order/ftp.html>. If, rather than
-building gcc from source code, you locate a binary version configured
-for your platform, be sure that it is compiled for the version of the
-operating system that you are using.
-
-=item *
-
-You may purchase a commercial ANSI C compiler from your system
-supplier or elsewhere. (Or your organization may already have
-licensed such software -- ask your colleagues to find out how to
-access it.) If there is a README file for your system in the Perl
-distribution (for example, F<README.hpux>), it may contain advice on
-suitable compilers.
-
-=item *
-
-Another alternative may be to use a tool like ansi2knr to convert the
-sources back to K&R style, but there is no guarantee this route will get
-you anywhere, since the prototypes are not the only ANSI features used
-in the Perl sources. ansi2knr is usually found as part of the freely
-available Ghostscript distribution. Another similar tool is
-unprotoize, distributed with GCC. Since unprotoize requires GCC to
-run, you may have to run it on a platform where GCC is available, and move
-the sources back to the platform without GCC.
-
-If you succeed in automatically converting the sources to a K&R compatible
-form, be sure to email perlbug@perl.org to let us know the steps you
-followed. This will enable us to officially support this option.
-
-=back
-
-Although Perl can be compiled using a C++ compiler, the Configure script
-does not work with some C++ compilers.
-
-=head1 Space Requirements
-
-The complete perl5 source tree takes up about 20 MB of disk space.
-After completing make, it takes up roughly 30 MB, though the actual
-total is likely to be quite system-dependent. The installation
-directories need something on the order of 20 MB, though again that
-value is system-dependent.
-
-=head1 Start with a Fresh Distribution
-
-If you have built perl before, you should clean out the build directory
-with the command
-
- make distclean
-
-or
-
- make realclean
-
-The only difference between the two is that make distclean also removes
-your old config.sh and Policy.sh files.
-
-The results of a Configure run are stored in the config.sh and Policy.sh
-files. If you are upgrading from a previous version of perl, or if you
-change systems or compilers or make other significant changes, or if
-you are experiencing difficulties building perl, you should probably
-not re-use your old config.sh. Simply remove it
-
- rm -f config.sh
-
-If you wish to use your old config.sh, be especially attentive to the
-version and architecture-specific questions and answers. For example,
-the default directory for architecture-dependent library modules
-includes the version name. By default, Configure will reuse your old
-name (e.g. /opt/perl/lib/i86pc-solaris/5.003) even if you're running
-Configure for a different version, e.g. 5.004. Yes, Configure should
-probably check and correct for this, but it doesn't, presently.
-Similarly, if you used a shared libperl.so (see below) with version
-numbers, you will probably want to adjust them as well.
-
-Also, be careful to check your architecture name. For example, some
-Linux distributions use i386, while others may use i486. If you build
-it yourself, Configure uses the output of the arch command, which
-might be i586 or i686 instead. If you pick up a precompiled binary, or
-compile extensions on different systems, they might not all agree on
-the architecture name.
-
-In short, if you wish to use your old config.sh, I recommend running
-Configure interactively rather than blindly accepting the defaults.
-
-If your reason to reuse your old config.sh is to save your particular
-installation choices, then you can probably achieve the same effect by
-using the Policy.sh file. See the section on L<"Site-wide Policy
-settings"> below. If you wish to start with a fresh distribution, you
-also need to remove any old Policy.sh files you may have with
-
- rm -f Policy.sh
-
-=head1 Run Configure
-
-Configure will figure out various things about your system. Some
-things Configure will figure out for itself, other things it will ask
-you about. To accept the default, just press RETURN. The default is
-almost always okay. It is normal for some things to be "NOT found",
-since Configure often searches for many different ways of performing
-the same function.
-
-At any Configure prompt, you can type &-d and Configure will use the
-defaults from then on.
-
-After it runs, Configure will perform variable substitution on all the
-*.SH files and offer to run make depend.
-
-=head2 Altering config.sh variables for C compiler switches etc.
-
-For most users, all of the Configure defaults are fine. Configure
-also has several convenient options which are all described below.
-However, if Configure doesn't have an option to do what you want,
-you can change Configure variables after the platform hints have been
-run, by using Configure's -A switch. For example, here's how to add
-a couple of extra flags to C compiler invocations:
-
- sh Configure -Accflags="-DPERL_Y2KWARN -DPERL_POLLUTE_MALLOC"
-
-For more help on Configure switches, run:
-
- sh Configure -h
-
-=head2 Building Perl outside of the source directory
-
-Sometimes it is desirable to build Perl in a directory different from
-where the sources are, for example if you want to keep your sources
-read-only, or if you want to share the sources between different binary
-architectures.
-
-Starting from Perl 5.6.1 you can do this (if your file system supports
-symbolic links) by
-
- mkdir /tmp/perl/build/directory
- cd /tmp/perl/build/directory
- sh /path/to/perl/source/Configure -Dmksymlinks ...
-
-This will create in /tmp/perl/build/directory a tree of symbolic links
-pointing to files in /path/to/perl/source. The original files are left
-unaffected. After Configure has finished you can just say
-
- make all test
-
-and Perl will be built and tested, all in /tmp/perl/build/directory.
-
-=head2 Common Configure options
-
-Configure supports a number of useful options. Run B<Configure -h> to
-get a listing. See the Porting/Glossary file for a complete list of
-Configure variables you can set and their definitions.
-
-=over 4
-
-=item gcc
-
-To compile with gcc you should run
-
- sh Configure -Dcc=gcc
-
-This is the preferred way to specify gcc (or another alternative
-compiler) so that the hints files can set appropriate defaults.
-
-=item Installation prefix
-
-By default, for most systems, perl will be installed in
-/usr/local/{bin, lib, man}. (See L<"Installation Directories">
-and L<"Coexistence with earlier versions of perl5"> below for
-further details.)
-
-You can specify a different 'prefix' for the default installation
-directory, when Configure prompts you or by using the Configure command
-line option -Dprefix='/some/directory', e.g.
-
- sh Configure -Dprefix=/opt/perl
-
-If your prefix contains the string "perl", then the suggested
-directory structure is simplified. For example, if you use
-prefix=/opt/perl, then Configure will suggest /opt/perl/lib instead of
-/opt/perl/lib/perl5/. Again, see L<"Installation Directories"> below
-for more details.
-
-NOTE: You must not specify an installation directory that is the same
-as or below your perl source directory. If you do, installperl will
-attempt infinite recursion.
-
-=item /usr/bin/perl
-
-It may seem obvious, but Perl is useful only when users can easily
-find it. It's often a good idea to have both /usr/bin/perl and
-/usr/local/bin/perl be symlinks to the actual binary. Be especially
-careful, however, not to overwrite a version of perl supplied by your
-vendor unless you are sure you know what you are doing.
-
-By default, Configure will arrange for /usr/bin/perl to be linked to
-the current version of perl. You can turn off that behavior by running
-
- Configure -Uinstallusrbinperl
-
-or by answering 'no' to the appropriate Configure prompt.
-
-In any case, system administrators are strongly encouraged to
-put (symlinks to) perl and its accompanying utilities, such as perldoc,
-into a directory typically found along a user's PATH, or in another
-obvious and convenient place.
-
-=item Overriding an old config.sh
-
-If you want to use your old config.sh but override some of the items
-with command line options, you need to use B<Configure -O>.
-
-=back
-
-If you are willing to accept all the defaults, and you want terse
-output, you can run
-
- sh Configure -des
-
-Note: for development releases (odd subreleases, like 5.7, as opposed
-to maintenance releases which have even subreleases, like 5.6)
-if you want to use Configure -d, you will also need to supply -Dusedevel
-to Configure, because the default answer to the question "do you really
-want to Configure a development version?" is "no". The -Dusedevel
-skips that sanity check.
-
-For example for my Solaris system, I usually use
-
- sh Configure -Dprefix=/opt/perl -Doptimize='-xpentium -xO4' -des
-
-=head2 GNU-style configure
-
-If you prefer the GNU-style configure command line interface, you can
-use the supplied configure.gnu command, e.g.
-
- CC=gcc ./configure.gnu
-
-The configure.gnu script emulates a few of the more common configure
-options. Try
-
- ./configure.gnu --help
-
-for a listing.
-
-Cross compiling and compiling in a different directory are not supported.
-
-(The file is called configure.gnu to avoid problems on systems
-that would not distinguish the files "Configure" and "configure".)
-
-=head2 Installation Directories
-
-The installation directories can all be changed by answering the
-appropriate questions in Configure. For convenience, all the
-installation questions are near the beginning of Configure.
-Further, there are a number of additions to the installation
-directories since 5.005, so reusing your old config.sh may not
-be sufficient to put everything where you want it.
-
-I highly recommend running Configure interactively to be sure it puts
-everything where you want it. At any point during the Configure
-process, you can answer a question with &-d and Configure will use
-the defaults from then on.
-
-The defaults are intended to be reasonable and sensible for most
-people building from sources. Those who build and distribute binary
-distributions or who export perl to a range of systems will probably
-need to alter them. If you are content to just accept the defaults,
-you can safely skip the next section.
-
-The directories set up by Configure fall into three broad categories.
-
-=over 4
-
-=item Directories for the perl distribution
-
-By default, Configure will use the following directories for 5.6.0.
-$version is the full perl version number, including subversion, e.g.
-5.6.0 or 5.6.1, and $archname is a string like sun4-sunos,
-determined by Configure. The full definitions of all Configure
-variables are in the file Porting/Glossary.
-
- Configure variable Default value
- $prefix /usr/local
- $bin $prefix/bin
- $scriptdir $prefix/bin
- $privlib $prefix/lib/perl5/$version
- $archlib $prefix/lib/perl5/$version/$archname
- $man1dir $prefix/man/man1
- $man3dir $prefix/man/man3
- $html1dir (none)
- $html3dir (none)
-
-Actually, Configure recognizes the SVR3-style
-/usr/local/man/l_man/man1 directories, if present, and uses those
-instead. Also, if $prefix contains the string "perl", the library
-directories are simplified as described below. For simplicity, only
-the common style is shown here.
-
-=item Directories for site-specific add-on files
-
-After perl is installed, you may later wish to add modules (e.g. from
-CPAN) or scripts. Configure will set up the following directories to
-be used for installing those add-on modules and scripts.
-
- Configure variable Default value
- $siteprefix $prefix
- $sitebin $siteprefix/bin
- $sitescript $siteprefix/bin
- $sitelib $siteprefix/lib/perl5/site_perl/$version
- $sitearch $siteprefix/lib/perl5/site_perl/$version/$archname
- $siteman1 $siteprefix/man/man1
- $siteman3 $siteprefix/man/man3
- $sitehtml1 (none)
- $sitehtml3 (none)
-
-By default, ExtUtils::MakeMaker will install architecture-independent
-modules into $sitelib and architecture-dependent modules into $sitearch.
-
-NOTE: As of 5.6.0, ExtUtils::MakeMaker will use $sitelib and $sitearch,
-but will not use the other site-specific directories. Volunteers to
-fix this are needed.
-
-=item Directories for vendor-supplied add-on files
-
-Lastly, if you are building a binary distribution of perl for
-distribution, Configure can optionally set up the following directories
-for you to use to distribute add-on modules.
-
- Configure variable Default value
- $vendorprefix (none)
- (The next ones are set only if vendorprefix is set.)
- $vendorbin $vendorprefix/bin
- $vendorscript $vendorprefix/bin
- $vendorlib $vendorprefix/lib/perl5/vendor_perl/$version
- $vendorarch $vendorprefix/lib/perl5/vendor_perl/$version/$archname
- $vendorman1 $vendorprefix/man/man1
- $vendorman3 $vendorprefix/man/man3
- $vendorhtml1 (none)
- $vendorhtml3 (none)
-
-These are normally empty, but may be set as needed. For example,
-a vendor might choose the following settings:
-
- $prefix /usr/bin
- $siteprefix /usr/local/bin
- $vendorprefix /usr/bin
-
-This would have the effect of setting the following:
-
- $bin /usr/bin
- $scriptdir /usr/bin
- $privlib /usr/lib/perl5/$version
- $archlib /usr/lib/perl5/$version/$archname
- $man1dir /usr/man/man1
- $man3dir /usr/man/man3
-
- $sitebin /usr/local/bin
- $sitescript /usr/local/bin
- $sitelib /usr/local/lib/perl5/site_perl/$version
- $sitearch /usr/local/lib/perl5/site_perl/$version/$archname
- $siteman1 /usr/local/man/man1
- $siteman3 /usr/local/man/man3
-
- $vendorbin /usr/bin
- $vendorscript /usr/bin
- $vendorlib /usr/lib/perl5/vendor_perl/$version
- $vendorarch /usr/lib/perl5/vendor_perl/$version/$archname
- $vendorman1 /usr/man/man1
- $vendorman3 /usr/man/man3
-
-Note how in this example, the vendor-supplied directories are in the
-/usr hierarchy, while the directories reserved for the end-user are in
-the /usr/local hierarchy.
-
-NOTE: As of 5.6.0, ExtUtils::MakeMaker does not use these directories.
-Volunteers to fix this are needed.
-
-The entire installed library hierarchy is installed in locations with
-version numbers, keeping the installations of different versions distinct.
-However, later installations of Perl can still be configured to search the
-installed libraries corresponding to compatible earlier versions.
-See L<"Coexistence with earlier versions of perl5"> below for more details
-on how Perl can be made to search older version directories.
-
-Of course you may use these directories however you see fit. For
-example, you may wish to use $siteprefix for site-specific files that
-are stored locally on your own disk and use $vendorprefix for
-site-specific files that are stored elsewhere on your organization's
-network. One way to do that would be something like
-
- sh Configure -Dsiteprefix=/usr/local -Dvendorprefix=/usr/share/perl
-
-=item otherlibdirs
-
-As a final catch-all, Configure also offers an $otherlibdirs
-variable. This variable contains a colon-separated list of additional
-directories to add to @INC. By default, it will be empty.
-Perl will search these directories (including architecture and
-version-specific subdirectories) for add-on modules and extensions.
-
-=item APPLLIB_EXP
-
-There is one other way of adding paths to @INC at perl build time, and
-that is by setting the APPLLIB_EXP C pre-processor token to a colon-
-separated list of directories, like this
-
- sh Configure -Accflags='-DAPPLLIB_EXP=\"/usr/libperl\"'
-
-The directories defined by APPLLIB_EXP get added to @INC I<first>,
-ahead of any others, and so provide a way to override the standard perl
-modules should you, for example, want to distribute fixes without
-touching the perl distribution proper. And, like otherlib dirs,
-version and architecture specific subdirectories are also searched, if
-present, at run time. Of course, you can still search other @INC
-directories ahead of those in APPLLIB_EXP by using any of the standard
-run-time methods: $PERLLIB, $PERL5LIB, -I, use lib, etc.
-
-=item Man Pages
-
-In versions 5.005_57 and earlier, the default was to store module man
-pages in a version-specific directory, such as
-/usr/local/lib/perl5/$version/man/man3. The default for 5.005_58 and
-after is /usr/local/man/man3 so that most users can find the man pages
-without resetting MANPATH.
-
-You can continue to use the old default from the command line with
-
- sh Configure -Dman3dir=/usr/local/lib/perl5/5.6.0/man/man3
-
-Some users also prefer to use a .3pm suffix. You can do that with
-
- sh Configure -Dman3ext=3pm
-
-Again, these are just the defaults, and can be changed as you run
-Configure.
-
-=item HTML pages
-
-As of perl5.005_57, the standard perl installation does not do
-anything with HTML documentation, but that may change in the future.
-Further, some add-on modules may wish to install HTML documents. The
-html Configure variables listed above are provided if you wish to
-specify where such documents should be placed. The default is "none",
-but will likely eventually change to something useful based on user
-feedback.
-
-=back
-
-Some users prefer to append a "/share" to $privlib and $sitelib
-to emphasize that those directories can be shared among different
-architectures.
-
-Note that these are just the defaults. You can actually structure the
-directories any way you like. They don't even have to be on the same
-filesystem.
-
-Further details about the installation directories, maintenance and
-development subversions, and about supporting multiple versions are
-discussed in L<"Coexistence with earlier versions of perl5"> below.
-
-If you specify a prefix that contains the string "perl", then the
-library directory structure is slightly simplified. Instead of
-suggesting $prefix/lib/perl5/, Configure will suggest $prefix/lib.
-
-Thus, for example, if you Configure with
--Dprefix=/opt/perl, then the default library directories for 5.6.0 are
-
- Configure variable Default value
- $privlib /opt/perl/lib/5.6.0
- $archlib /opt/perl/lib/5.6.0/$archname
- $sitelib /opt/perl/lib/site_perl/5.6.0
- $sitearch /opt/perl/lib/site_perl/5.6.0/$archname
-
-=head2 Changing the installation directory
-
-Configure distinguishes between the directory in which perl (and its
-associated files) should be installed and the directory in which it
-will eventually reside. For most sites, these two are the same; for
-sites that use AFS, this distinction is handled automatically.
-However, sites that use software such as depot to manage software
-packages, or users building binary packages for distribution may also
-wish to install perl into a different directory and use that
-management software to move perl to its final destination. This
-section describes how to do that.
-
-Suppose you want to install perl under the /tmp/perl5 directory. You
-could edit config.sh and change all the install* variables to point to
-/tmp/perl5 instead of /usr/local, or you could simply use the
-following command line:
-
- sh Configure -Dinstallprefix=/tmp/perl5
-
-(replace /tmp/perl5 by a directory of your choice).
-
-Beware, though, that if you go to try to install new add-on
-modules, they too will get installed in under '/tmp/perl5' if you
-follow this example. The next section shows one way of dealing with
-that problem.
-
-=head2 Creating an installable tar archive
-
-If you need to install perl on many identical systems, it is
-convenient to compile it once and create an archive that can be
-installed on multiple systems. Suppose, for example, that you want to
-create an archive that can be installed in /opt/perl.
-Here's one way to do that:
-
- # Set up to install perl into a different directory,
- # e.g. /tmp/perl5 (see previous part).
- sh Configure -Dinstallprefix=/tmp/perl5 -Dprefix=/opt/perl -des
- make
- make test
- make install # This will install everything into /tmp/perl5.
- cd /tmp/perl5
- # Edit $archlib/Config.pm and $archlib/.packlist to change all the
- # install* variables back to reflect where everything will
- # really be installed. (That is, change /tmp/perl5 to /opt/perl
- # everywhere in those files.)
- # Check the scripts in $scriptdir to make sure they have the correct
- # #!/wherever/perl line.
- tar cvf ../perl5-archive.tar .
- # Then, on each machine where you want to install perl,
- cd /opt/perl # Or wherever you specified as $prefix
- tar xvf perl5-archive.tar
-
-=head2 Site-wide Policy settings
-
-After Configure runs, it stores a number of common site-wide "policy"
-answers (such as installation directories and the local perl contact
-person) in the Policy.sh file. If you want to build perl on another
-system using the same policy defaults, simply copy the Policy.sh file
-to the new system and Configure will use it along with the appropriate
-hint file for your system.
-
-Alternatively, if you wish to change some or all of those policy
-answers, you should
-
- rm -f Policy.sh
-
-to ensure that Configure doesn't re-use them.
-
-Further information is in the Policy_sh.SH file itself.
-
-If the generated Policy.sh file is unsuitable, you may freely edit it
-to contain any valid shell commands. It will be run just after the
-platform-specific hints files.
-
-Note: Since the directory hierarchy for 5.6.0 contains a number of
-new vendor* and site* entries, your Policy.sh file will probably not
-set them to your desired values. I encourage you to run Configure
-interactively to be sure it puts things where you want them.
-
-=head2 Configure-time Options
-
-There are several different ways to Configure and build perl for your
-system. For most users, the defaults are sensible and will work.
-Some users, however, may wish to further customize perl. Here are
-some of the main things you can change.
-
-=head2 Threads
-
-On some platforms, perl5.005 and later can be compiled with
-experimental support for threads. To enable this, read the file
-README.threads, and then try:
-
- sh Configure -Dusethreads
-
-Currently, you need to specify -Dusethreads on the Configure command
-line so that the hint files can make appropriate adjustments.
-
-The default is to compile without thread support.
-
-As of v5.5.64, perl has two different internal threads implementations.
-The 5.005 version (5005threads) and an interpreter-based implementation
-(ithreads) with one interpreter per thread. By default, Configure selects
-ithreads if -Dusethreads is specified. However, you can select the old
-5005threads behavior instead by either
-
- sh Configure -Dusethreads -Duse5005threads
-
-or by
- sh Configure -Dusethreads -Uuseithreads
-
-Eventually (by perl v5.6.0) this internal confusion ought to disappear,
-and these options may disappear as well.
-
-=head2 64 bit support.
-
-If your platform does not have 64 bits natively, but can simulate them with
-compiler flags and/or C<long long> or C<int64_t>, you can build a perl that
-uses 64 bits.
-
-There are actually two modes of 64-bitness: the first one is achieved
-using Configure -Duse64bitint and the second one using Configure
--Duse64bitall. The difference is that the first one is minimal and
-the second one maximal. The first works in more places than the second.
-
-The C<use64bitint> does only as much as is required to get 64-bit
-integers into Perl (this may mean, for example, using "long longs")
-while your memory may still be limited to 2 gigabytes (because your
-pointers could still be 32-bit). Note that the name C<64bitint> does
-not imply that your C compiler will be using 64-bit C<int>s (it might,
-but it doesn't have to): the C<use64bitint> means that you will be
-able to have 64 bits wide scalar values.
-
-The C<use64bitall> goes all the way by attempting to switch also
-integers (if it can), longs (and pointers) to being 64-bit. This may
-create an even more binary incompatible Perl than -Duse64bitint: the
-resulting executable may not run at all in a 32-bit box, or you may
-have to reboot/reconfigure/rebuild your operating system to be 64-bit
-aware.
-
-Natively 64-bit systems like Alpha and Cray need neither -Duse64bitint
-nor -Duse64bitall.
-
- NOTE: 64-bit support is still experimental on most platforms.
- Existing support only covers the LP64 data model. In particular, the
- LLP64 data model is not yet supported. 64-bit libraries and system
- APIs on many platforms have not stabilized--your mileage may vary.
-
-=head2 Long doubles
-
-In some systems you may be able to use long doubles to enhance the
-range and precision of your double precision floating point numbers
-(that is, Perl's numbers). Use Configure -Duselongdouble to enable
-this support (if it is available).
-
-=head2 "more bits"
-
-You can "Configure -Dusemorebits" to turn on both the 64-bit support
-and the long double support.
-
-=head2 Selecting File IO mechanisms
-
-Previous versions of perl used the standard IO mechanisms as defined in
-stdio.h. Versions 5.003_02 and later of perl allow alternate IO
-mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
-the default and is the only supported mechanism.
-
-This PerlIO abstraction can be enabled either on the Configure command
-line with
-
- sh Configure -Duseperlio
-
-or interactively at the appropriate Configure prompt.
-
-If you choose to use the PerlIO abstraction layer, there are two
-(experimental) possibilities for the underlying IO calls. These have been
-tested to some extent on some platforms, but are not guaranteed to work
-everywhere.
-
-=over 4
-
-=item 1.
-
-AT&T's "sfio". This has superior performance to stdio.h in many
-cases, and is extensible by the use of "discipline" modules. Sfio
-currently only builds on a subset of the UNIX platforms perl supports.
-Because the data structures are completely different from stdio, perl
-extension modules or external libraries may not work. This
-configuration exists to allow these issues to be worked on.
-
-This option requires the 'sfio' package to have been built and installed.
-The latest sfio is available from http://www.research.att.com/sw/tools/sfio/
-
-You select this option by
-
- sh Configure -Duseperlio -Dusesfio
-
-If you have already selected -Duseperlio, and if Configure detects
-that you have sfio, then sfio will be the default suggested by
-Configure.
-
-Note: On some systems, sfio's iffe configuration script fails to
-detect that you have an atexit function (or equivalent). Apparently,
-this is a problem at least for some versions of Linux and SunOS 4.
-Configure should detect this problem and warn you about problems with
-_exit vs. exit. If you have this problem, the fix is to go back to
-your sfio sources and correct iffe's guess about atexit.
-
-=item 2.
-
-Normal stdio IO, but with all IO going through calls to the PerlIO
-abstraction layer. This configuration can be used to check that perl and
-extension modules have been correctly converted to use the PerlIO
-abstraction.
-
-This configuration should work on all platforms (but might not).
-
-You select this option via:
-
- sh Configure -Duseperlio -Uusesfio
-
-If you have already selected -Duseperlio, and if Configure does not
-detect sfio, then this will be the default suggested by Configure.
-
-=back
-
-=head2 SOCKS
-
-Perl can be configured to be 'socksified', that is, to use the SOCKS
-TCP/IP proxy protocol library. SOCKS is used to give applications
-access to transport layer network proxies. Perl supports only SOCKS
-Version 5. You can find more about SOCKS from http://www.socks.nec.com/
-
-=head2 Dynamic Loading
-
-By default, Configure will compile perl to use dynamic loading if
-your system supports it. If you want to force perl to be compiled
-statically, you can either choose this when Configure prompts you or
-you can use the Configure command line option -Uusedl.
-
-=head2 Building a shared libperl.so Perl library
-
-Currently, for most systems, the main perl executable is built by
-linking the "perl library" libperl.a with perlmain.o, your static
-extensions (usually just DynaLoader.a) and various extra libraries,
-such as -lm.
-
-On some systems that support dynamic loading, it may be possible to
-replace libperl.a with a shared libperl.so. If you anticipate building
-several different perl binaries (e.g. by embedding libperl into
-different programs, or by using the optional compiler extension), then
-you might wish to build a shared libperl.so so that all your binaries
-can share the same library.
-
-The disadvantages are that there may be a significant performance
-penalty associated with the shared libperl.so, and that the overall
-mechanism is still rather fragile with respect to different versions
-and upgrades.
-
-In terms of performance, on my test system (Solaris 2.5_x86) the perl
-test suite took roughly 15% longer to run with the shared libperl.so.
-Your system and typical applications may well give quite different
-results.
-
-The default name for the shared library is typically something like
-libperl.so.3.2 (for Perl 5.003_02) or libperl.so.302 or simply
-libperl.so. Configure tries to guess a sensible naming convention
-based on your C library name. Since the library gets installed in a
-version-specific architecture-dependent directory, the exact name
-isn't very important anyway, as long as your linker is happy.
-
-For some systems (mostly SVR4), building a shared libperl is required
-for dynamic loading to work, and hence is already the default.
-
-You can elect to build a shared libperl by
-
- sh Configure -Duseshrplib
-
-To build a shared libperl, the environment variable controlling shared
-library search (LD_LIBRARY_PATH in most systems, DYLD_LIBRARY_PATH for
-NeXTSTEP/OPENSTEP/Darwin, LIBRARY_PATH for BeOS, SHLIB_PATH for
-HP-UX, LIBPATH for AIX, PATH for Cygwin) must be set up to include
-the Perl build directory because that's where the shared libperl will
-be created. Configure arranges makefile to have the correct shared
-library search settings.
-
-However, there are some special cases where manually setting the
-shared library path might be required. For example, if you want to run
-something like the following with the newly-built but not-yet-installed
-./perl:
-
- cd t; ./perl misc/failing_test.t
-or
- ./perl -Ilib ~/my_mission_critical_test
-
-then you need to set up the shared library path explicitly.
-You can do this with
-
- LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
-
-for Bourne-style shells, or
-
- setenv LD_LIBRARY_PATH `pwd`
-
-for Csh-style shells. (This procedure may also be needed if for some
-unexpected reason Configure fails to set up makefile correctly.)
-
-You can often recognize failures to build/use a shared libperl from error
-messages complaining about a missing libperl.so (or libperl.sl in HP-UX),
-for example:
-18126:./miniperl: /sbin/loader: Fatal Error: cannot map libperl.so
-
-There is also an potential problem with the shared perl library if you
-want to have more than one "flavor" of the same version of perl (e.g.
-with and without -DDEBUGGING). For example, suppose you build and
-install a standard Perl 5.004 with a shared library. Then, suppose you
-try to build Perl 5.004 with -DDEBUGGING enabled, but everything else
-the same, including all the installation directories. How can you
-ensure that your newly built perl will link with your newly built
-libperl.so.4 rather with the installed libperl.so.4? The answer is
-that you might not be able to. The installation directory is encoded
-in the perl binary with the LD_RUN_PATH environment variable (or
-equivalent ld command-line option). On Solaris, you can override that
-with LD_LIBRARY_PATH; on Linux you can't. On Digital Unix, you can
-override LD_LIBRARY_PATH by setting the _RLD_ROOT environment variable
-to point to the perl build directory.
-
-The only reliable answer is that you should specify a different
-directory for the architecture-dependent library for your -DDEBUGGING
-version of perl. You can do this by changing all the *archlib*
-variables in config.sh to point to your new architecture-dependent library.
-
-=head2 Malloc Issues
-
-Perl relies heavily on malloc(3) to grow data structures as needed,
-so perl's performance can be noticeably affected by the performance of
-the malloc function on your system. The perl source is shipped with a
-version of malloc that has been optimized for the typical requests from
-perl, so there's a chance that it may be both faster and use less memory
-than your system malloc.
-
-However, if your system already has an excellent malloc, or if you are
-experiencing difficulties with extensions that use third-party libraries
-that call malloc, then you should probably use your system's malloc.
-(Or, you might wish to explore the malloc flags discussed below.)
-
-=over 4
-
-=item Using the system malloc
-
-To build without perl's malloc, you can use the Configure command
-
- sh Configure -Uusemymalloc
-
-or you can answer 'n' at the appropriate interactive Configure prompt.
-
-=item -DPERL_POLLUTE_MALLOC
-
-NOTE: This flag is enabled automatically on some platforms if you
-asked for binary compatibility with version 5.005, or if you just
-run Configure to accept all the defaults on those platforms. You
-can refuse the automatic binary compatibility flags wholesale by
-running:
-
- sh Configure -Ubincompat5005
-
-or by answering 'n' at the appropriate prompt.
-
-Perl's malloc family of functions are called Perl_malloc(),
-Perl_realloc(), Perl_calloc() and Perl_mfree(). When this flag is
-not enabled, the names do not clash with the system versions of
-these functions.
-
-If enabled, Perl's malloc family of functions will have the same
-names as the system versions. This may be sometimes required when you
-have libraries that like to free() data that may have been allocated
-by Perl_malloc() and vice versa.
-
-Note that enabling this option may sometimes lead to duplicate symbols
-from the linker for malloc et al. In such cases, the system probably
-does not allow its malloc functions to be fully replaced with custom
-versions.
-
-=back
-
-=head2 Building a debugging perl
-
-You can run perl scripts under the perl debugger at any time with
-B<perl -d your_script>. If, however, you want to debug perl itself,
-you probably want to do
-
- sh Configure -Doptimize='-g'
-
-This will do two independent things: First, it will force compilation
-to use cc -g so that you can use your system's debugger on the
-executable. (Note: Your system may actually require something like
-cc -g2. Check your man pages for cc(1) and also any hint file for
-your system.) Second, it will add -DDEBUGGING to your ccflags
-variable in config.sh so that you can use B<perl -D> to access perl's
-internal state. (Note: Configure will only add -DDEBUGGING by default
-if you are not reusing your old config.sh. If you want to reuse your
-old config.sh, then you can just edit it and change the optimize and
-ccflags variables by hand and then propagate your changes as shown in
-L<"Propagating your changes to config.sh"> below.)
-
-You can actually specify -g and -DDEBUGGING independently, but usually
-it's convenient to have both.
-
-If you are using a shared libperl, see the warnings about multiple
-versions of perl under L<Building a shared libperl.so Perl library>.
-
-=head2 Extensions
-
-By default, Configure will offer to build every extension which appears
-to be supported. For example, Configure will offer to build GDBM_File
-only if it is able to find the gdbm library. (See examples below.)
-B, DynaLoader, Fcntl, IO, and attrs are always built by default.
-Configure does not contain code to test for POSIX compliance, so POSIX
-is always built by default as well. If you wish to skip POSIX, you can
-set the Configure variable useposix=false either in a hint file or from
-the Configure command line. Similarly, the Opcode extension is always
-built by default, but you can skip it by setting the Configure variable
-useopcode=false either in a hint file for from the command line.
-
-If you unpack any additional extensions in the ext/ directory before
-running Configure, then Configure will offer to build those additional
-extensions as well. Most users probably shouldn't have to do this --
-it is usually easier to build additional extensions later after perl
-has been installed. However, if you wish to have those additional
-extensions statically linked into the perl binary, then this offers a
-convenient way to do that in one step. (It is not necessary, however;
-you can build and install extensions just fine even if you don't have
-dynamic loading. See lib/ExtUtils/MakeMaker.pm for more details.)
-
-You can learn more about each of the supplied extensions by consulting the
-documentation in the individual .pm modules, located under the
-ext/ subdirectory.
-
-Even if you do not have dynamic loading, you must still build the
-DynaLoader extension; you should just build the stub dl_none.xs
-version. (Configure will suggest this as the default.)
-
-In summary, here are the Configure command-line variables you can set
-to turn off each extension:
-
- B (Always included by default)
- DB_File i_db
- DynaLoader (Must always be included as a static extension)
- Fcntl (Always included by default)
- GDBM_File i_gdbm
- IO (Always included by default)
- NDBM_File i_ndbm
- ODBM_File i_dbm
- POSIX useposix
- SDBM_File (Always included by default)
- Opcode useopcode
- Socket d_socket
- Threads use5005threads
- attrs (Always included by default)
-
-Thus to skip the NDBM_File extension, you can use
-
- sh Configure -Ui_ndbm
-
-Again, this is taken care of automatically if you don't have the ndbm
-library.
-
-Of course, you may always run Configure interactively and select only
-the extensions you want.
-
-Note: The DB_File module will only work with version 1.x of Berkeley
-DB or newer releases of version 2. Configure will automatically detect
-this for you and refuse to try to build DB_File with earlier
-releases of version 2.
-
-If you re-use your old config.sh but change your system (e.g. by
-adding libgdbm) Configure will still offer your old choices of extensions
-for the default answer, but it will also point out the discrepancy to
-you.
-
-Finally, if you have dynamic loading (most modern Unix systems do)
-remember that these extensions do not increase the size of your perl
-executable, nor do they impact start-up time, so you probably might as
-well build all the ones that will work on your system.
-
-=head2 Including locally-installed libraries
-
-Perl5 comes with interfaces to number of database extensions, including
-dbm, ndbm, gdbm, and Berkeley db. For each extension, if
-Configure can find the appropriate header files and libraries, it will
-automatically include that extension. The gdbm and db libraries
-are not included with perl. See the library documentation for
-how to obtain the libraries.
-
-If your database header (.h) files are not in a directory normally
-searched by your C compiler, then you will need to include the
-appropriate -I/your/directory option when prompted by Configure. If
-your database library (.a) files are not in a directory normally
-searched by your C compiler and linker, then you will need to include
-the appropriate -L/your/directory option when prompted by Configure.
-See the examples below.
-
-=head2 Examples
-
-=over 4
-
-=item gdbm in /usr/local
-
-Suppose you have gdbm and want Configure to find it and build the
-GDBM_File extension. This example assumes you have gdbm.h
-installed in /usr/local/include/gdbm.h and libgdbm.a installed in
-/usr/local/lib/libgdbm.a. Configure should figure all the
-necessary steps out automatically.
-
-Specifically, when Configure prompts you for flags for
-your C compiler, you should include -I/usr/local/include.
-
-When Configure prompts you for linker flags, you should include
--L/usr/local/lib.
-
-If you are using dynamic loading, then when Configure prompts you for
-linker flags for dynamic loading, you should again include
--L/usr/local/lib.
-
-Again, this should all happen automatically. This should also work if
-you have gdbm installed in any of (/usr/local, /opt/local, /usr/gnu,
-/opt/gnu, /usr/GNU, or /opt/GNU).
-
-=item gdbm in /usr/you
-
-Suppose you have gdbm installed in some place other than /usr/local/,
-but you still want Configure to find it. To be specific, assume you
-have /usr/you/include/gdbm.h and /usr/you/lib/libgdbm.a. You
-still have to add -I/usr/you/include to cc flags, but you have to take
-an extra step to help Configure find libgdbm.a. Specifically, when
-Configure prompts you for library directories, you have to add
-/usr/you/lib to the list.
-
-It is possible to specify this from the command line too (all on one
-line):
-
- sh Configure -de \
- -Dlocincpth="/usr/you/include" \
- -Dloclibpth="/usr/you/lib"
-
-locincpth is a space-separated list of include directories to search.
-Configure will automatically add the appropriate -I directives.
-
-loclibpth is a space-separated list of library directories to search.
-Configure will automatically add the appropriate -L directives. If
-you have some libraries under /usr/local/ and others under
-/usr/you, then you have to include both, namely
-
- sh Configure -de \
- -Dlocincpth="/usr/you/include /usr/local/include" \
- -Dloclibpth="/usr/you/lib /usr/local/lib"
-
-=back
-
-=head2 Building DB, NDBM, and ODBM interfaces with Berkeley DB 3
-
-Perl interface for DB3 is part of Berkeley DB, but if you want to
-compile standard Perl DB/ODBM/NDBM interfaces, you must follow
-following instructions.
-
-Berkeley DB3 from Sleepycat Software is by default installed without
-DB1 compatibility code (needed for DB_File interface) and without
-links to compatibility files. So if you want to use packages written
-for DB/ODBM/NDBM interfaces, you need to configure DB3 with
---enable-compat185 (and optionally with --enable-dump185) and create
-additional references (suppose you are installing DB3 with
---prefix=/usr):
-
- ln -s libdb-3.so /usr/lib/libdbm.so
- ln -s libdb-3.so /usr/lib/libndbm.so
- echo '#define DB_DBM_HSEARCH 1' >dbm.h
- echo '#include <db.h>' >>dbm.h
- install -m 0644 dbm.h /usr/include/dbm.h
- install -m 0644 dbm.h /usr/include/ndbm.h
-
-Optionally, if you have compiled with --enable-compat185 (not needed
-for ODBM/NDBM):
-
- ln -s libdb-3.so /usr/lib/libdb1.so
- ln -s libdb-3.so /usr/lib/libdb.so
-
-ODBM emulation seems not to be perfect, but is quite usable,
-using DB 3.1.17:
-
- lib/odbm.............FAILED at test 9
- Failed 1/64 tests, 98.44% okay
-
-=head2 What if it doesn't work?
-
-If you run into problems, try some of the following ideas.
-If none of them help, then see L<"Reporting Problems"> below.
-
-=over 4
-
-=item Running Configure Interactively
-
-If Configure runs into trouble, remember that you can always run
-Configure interactively so that you can check (and correct) its
-guesses.
-
-All the installation questions have been moved to the top, so you don't
-have to wait for them. Once you've handled them (and your C compiler and
-flags) you can type &-d at the next Configure prompt and Configure
-will use the defaults from then on.
-
-If you find yourself trying obscure command line incantations and
-config.over tricks, I recommend you run Configure interactively
-instead. You'll probably save yourself time in the long run.
-
-=item Hint files
-
-The perl distribution includes a number of system-specific hints files
-in the hints/ directory. If one of them matches your system, Configure
-will offer to use that hint file.
-
-Several of the hint files contain additional important information.
-If you have any problems, it is a good idea to read the relevant hint file
-for further information. See hints/solaris_2.sh for an extensive example.
-More information about writing good hints is in the hints/README.hints
-file.
-
-=item *** WHOA THERE!!! ***
-
-Occasionally, Configure makes a wrong guess. For example, on SunOS
-4.1.3, Configure incorrectly concludes that tzname[] is in the
-standard C library. The hint file is set up to correct for this. You
-will see a message:
-
- *** WHOA THERE!!! ***
- The recommended value for $d_tzname on this machine was "undef"!
- Keep the recommended value? [y]
-
-You should always keep the recommended value unless, after reading the
-relevant section of the hint file, you are sure you want to try
-overriding it.
-
-If you are re-using an old config.sh, the word "previous" will be
-used instead of "recommended". Again, you will almost always want
-to keep the previous value, unless you have changed something on your
-system.
-
-For example, suppose you have added libgdbm.a to your system
-and you decide to reconfigure perl to use GDBM_File. When you run
-Configure again, you will need to add -lgdbm to the list of libraries.
-Now, Configure will find your gdbm include file and library and will
-issue a message:
-
- *** WHOA THERE!!! ***
- The previous value for $i_gdbm on this machine was "undef"!
- Keep the previous value? [y]
-
-In this case, you do not want to keep the previous value, so you
-should answer 'n'. (You'll also have to manually add GDBM_File to
-the list of dynamic extensions to build.)
-
-=item Changing Compilers
-
-If you change compilers or make other significant changes, you should
-probably not re-use your old config.sh. Simply remove it or
-rename it, e.g. mv config.sh config.sh.old. Then rerun Configure
-with the options you want to use.
-
-This is a common source of problems. If you change from cc to
-gcc, you should almost always remove your old config.sh.
-
-=item Propagating your changes to config.sh
-
-If you make any changes to config.sh, you should propagate
-them to all the .SH files by running
-
- sh Configure -S
-
-You will then have to rebuild by running
-
- make depend
- make
-
-=item config.over
-
-You can also supply a shell script config.over to over-ride Configure's
-guesses. It will get loaded up at the very end, just before config.sh
-is created. You have to be careful with this, however, as Configure
-does no checking that your changes make sense.
-
-=item config.h
-
-Many of the system dependencies are contained in config.h.
-Configure builds config.h by running the config_h.SH script.
-The values for the variables are taken from config.sh.
-
-If there are any problems, you can edit config.h directly. Beware,
-though, that the next time you run Configure, your changes will be
-lost.
-
-=item cflags
-
-If you have any additional changes to make to the C compiler command
-line, they can be made in cflags.SH. For instance, to turn off the
-optimizer on toke.c, find the line in the switch structure for
-toke.c and put the command optimize='-g' before the ;; . You
-can also edit cflags directly, but beware that your changes will be
-lost the next time you run Configure.
-
-To explore various ways of changing ccflags from within a hint file,
-see the file hints/README.hints.
-
-To change the C flags for all the files, edit config.sh and change either
-$ccflags or $optimize, and then re-run
-
- sh Configure -S
- make depend
-
-=item No sh
-
-If you don't have sh, you'll have to copy the sample file
-Porting/config.sh to config.sh and edit your config.sh to reflect your
-system's peculiarities. See Porting/pumpkin.pod for more information.
-You'll probably also have to extensively modify the extension building
-mechanism.
-
-=item Environment variable clashes
-
-Configure uses a CONFIG variable that is reported to cause trouble on
-ReliantUnix 5.44. If your system sets this variable, you can try
-unsetting it before you run Configure. Configure should eventually
-be fixed to avoid polluting the namespace of the environment.
-
-=item Digital UNIX/Tru64 UNIX and BIN_SH
-
-In Digital UNIX/Tru64 UNIX, Configure might abort with
-
-Build a threading Perl? [n]
-Configure[2437]: Syntax error at line 1 : `config.sh' is not expected.
-
-This indicates that Configure is being run with a broken Korn shell
-(even though you think you are using a Bourne shell by using
-"sh Configure" or "./Configure"). The Korn shell bug has been reported
-to Compaq as of February 1999 but in the meanwhile, the reason ksh is
-being used is that you have the environment variable BIN_SH set to
-'xpg4'. This causes /bin/sh to delegate its duties to /bin/posix/sh
-(a ksh). Unset the environment variable and rerun Configure.
-
-=item HP-UX 11, pthreads, and libgdbm
-
-If you are running Configure with -Dusethreads in HP-UX 11, be warned
-that POSIX threads and libgdbm (the GNU dbm library) compiled before
-HP-UX 11 do not mix. This will cause a basic test run by Configure to
-fail
-
-Pthread internal error: message: __libc_reinit() failed, file: ../pthreads/pthread.c, line: 1096
-Return Pointer is 0xc082bf33
-sh: 5345 Quit(coredump)
-
-and Configure will give up. The cure is to recompile and install
-libgdbm under HP-UX 11.
-
-=item Porting information
-
-Specific information for the OS/2, Plan9, VMS and Win32 ports is in the
-corresponding README files and subdirectories. Additional information,
-including a glossary of all those config.sh variables, is in the Porting
-subdirectory. Especially Porting/Glossary should come in handy.
-
-Ports for other systems may also be available. You should check out
-http://www.perl.com/CPAN/ports for current information on ports to
-various other operating systems.
-
-If you plan to port Perl to a new architecture study carefully the
-section titled "Philosophical Issues in Patching and Porting Perl"
-in the file Porting/pumpkin.pod and the file Porting/patching.pod.
-Study also how other non-UNIX ports have solved problems.
-
-=back
-
-=head1 make depend
-
-This will look for all the includes. The output is stored in makefile.
-The only difference between Makefile and makefile is the dependencies at
-the bottom of makefile. If you have to make any changes, you should edit
-makefile, not Makefile since the Unix make command reads makefile first.
-(On non-Unix systems, the output may be stored in a different file.
-Check the value of $firstmakefile in your config.sh if in doubt.)
-
-Configure will offer to do this step for you, so it isn't listed
-explicitly above.
-
-=head1 make
-
-This will attempt to make perl in the current directory.
-
-=head2 What if it doesn't work?
-
-If you can't compile successfully, try some of the following ideas.
-If none of them help, and careful reading of the error message and
-the relevant manual pages on your system doesn't help,
-then see L<"Reporting Problems"> below.
-
-=over 4
-
-=item hints
-
-If you used a hint file, try reading the comments in the hint file
-for further tips and information.
-
-=item extensions
-
-If you can successfully build miniperl, but the process crashes
-during the building of extensions, you should run
-
- make minitest
-
-to test your version of miniperl.
-
-=item locale
-
-If you have any locale-related environment variables set, try unsetting
-them. I have some reports that some versions of IRIX hang while
-running B<./miniperl configpm> with locales other than the C locale.
-See the discussion under L<"make test"> below about locales and the
-whole L<"Locale problems"> section in the file pod/perllocale.pod.
-The latter is especially useful if you see something like this
-
- perl: warning: Setting locale failed.
- perl: warning: Please check that your locale settings:
- LC_ALL = "En_US",
- LANG = (unset)
- are supported and installed on your system.
- perl: warning: Falling back to the standard locale ("C").
-
-at Perl startup.
-
-=item varargs
-
-If you get varargs problems with gcc, be sure that gcc is installed
-correctly and that you are not passing -I/usr/include to gcc. When using
-gcc, you should probably have i_stdarg='define' and i_varargs='undef'
-in config.sh. The problem is usually solved by running fixincludes
-correctly. If you do change config.sh, don't forget to propagate
-your changes (see L<"Propagating your changes to config.sh"> below).
-See also the L<"vsprintf"> item below.
-
-=item util.c
-
-If you get error messages such as the following (the exact line
-numbers and function name may vary in different versions of perl):
-
- util.c: In function `Perl_form':
- util.c:1107: number of arguments doesn't match prototype
- proto.h:125: prototype declaration
-
-it might well be a symptom of the gcc "varargs problem". See the
-previous L<"varargs"> item.
-
-=item LD_LIBRARY_PATH
-
-If you run into dynamic loading problems, check your setting of
-the LD_LIBRARY_PATH environment variable. If you're creating a static
-Perl library (libperl.a rather than libperl.so) it should build
-fine with LD_LIBRARY_PATH unset, though that may depend on details
-of your local set-up.
-
-=item nm extraction
-
-If Configure seems to be having trouble finding library functions,
-try not using nm extraction. You can do this from the command line
-with
-
- sh Configure -Uusenm
-
-or by answering the nm extraction question interactively.
-If you have previously run Configure, you should not reuse your old
-config.sh.
-
-=item umask not found
-
-If the build processes encounters errors relating to umask(), the problem
-is probably that Configure couldn't find your umask() system call.
-Check your config.sh. You should have d_umask='define'. If you don't,
-this is probably the L<"nm extraction"> problem discussed above. Also,
-try reading the hints file for your system for further information.
-
-=item vsprintf
-
-If you run into problems with vsprintf in compiling util.c, the
-problem is probably that Configure failed to detect your system's
-version of vsprintf(). Check whether your system has vprintf().
-(Virtually all modern Unix systems do.) Then, check the variable
-d_vprintf in config.sh. If your system has vprintf, it should be:
-
- d_vprintf='define'
-
-If Configure guessed wrong, it is likely that Configure guessed wrong
-on a number of other common functions too. This is probably
-the L<"nm extraction"> problem discussed above.
-
-=item do_aspawn
-
-If you run into problems relating to do_aspawn or do_spawn, the
-problem is probably that Configure failed to detect your system's
-fork() function. Follow the procedure in the previous item
-on L<"nm extraction">.
-
-=item __inet_* errors
-
-If you receive unresolved symbol errors during Perl build and/or test
-referring to __inet_* symbols, check to see whether BIND 8.1 is
-installed. It installs a /usr/local/include/arpa/inet.h that refers to
-these symbols. Versions of BIND later than 8.1 do not install inet.h
-in that location and avoid the errors. You should probably update to a
-newer version of BIND. If you can't, you can either link with the
-updated resolver library provided with BIND 8.1 or rename
-/usr/local/bin/arpa/inet.h during the Perl build and test process to
-avoid the problem.
-
-=item #error "No DATAMODEL_NATIVE specified"
-
-This is a common error when trying to build perl on Solaris 2.6 with a
-gcc installation from Solaris 2.5 or 2.5.1. The Solaris header files
-changed, so you need to update your gcc installation. You can either
-rerun the fixincludes script from gcc or take the opportunity to
-update your gcc installation.
-
-=item Optimizer
-
-If you can't compile successfully, try turning off your compiler's
-optimizer. Edit config.sh and change the line
-
- optimize='-O'
-
-to
-
- optimize=' '
-
-then propagate your changes with B<sh Configure -S> and rebuild
-with B<make depend; make>.
-
-=item CRIPPLED_CC
-
-If you still can't compile successfully, try:
-
- sh Configure -Accflags=-DCRIPPLED_CC
-
-This flag simplifies some complicated expressions for compilers that get
-indigestion easily. (Just because you get no errors doesn't mean it
-compiled right!)
-
-=item Missing functions
-
-If you have missing routines, you probably need to add some library or
-other, or you need to undefine some feature that Configure thought was
-there but is defective or incomplete. Look through config.h for
-likely suspects. If Configure guessed wrong on a number of functions,
-you might have the L<"nm extraction"> problem discussed above.
-
-=item toke.c
-
-Some compilers will not compile or optimize the larger files (such as
-toke.c) without some extra switches to use larger jump offsets or
-allocate larger internal tables. You can customize the switches for
-each file in cflags. It's okay to insert rules for specific files into
-makefile since a default rule only takes effect in the absence of a
-specific rule.
-
-=item Missing dbmclose
-
-SCO prior to 3.2.4 may be missing dbmclose(). An upgrade to 3.2.4
-that includes libdbm.nfs (which includes dbmclose()) may be available.
-
-=item Note (probably harmless): No library found for -lsomething
-
-If you see such a message during the building of an extension, but
-the extension passes its tests anyway (see L<"make test"> below),
-then don't worry about the warning message. The extension
-Makefile.PL goes looking for various libraries needed on various
-systems; few systems will need all the possible libraries listed.
-For example, a system may have -lcposix or -lposix, but it's
-unlikely to have both, so most users will see warnings for the one
-they don't have. The phrase 'probably harmless' is intended to
-reassure you that nothing unusual is happening, and the build
-process is continuing.
-
-On the other hand, if you are building GDBM_File and you get the
-message
-
- Note (probably harmless): No library found for -lgdbm
-
-then it's likely you're going to run into trouble somewhere along
-the line, since it's hard to see how you can use the GDBM_File
-extension without the -lgdbm library.
-
-It is true that, in principle, Configure could have figured all of
-this out, but Configure and the extension building process are not
-quite that tightly coordinated.
-
-=item sh: ar: not found
-
-This is a message from your shell telling you that the command 'ar'
-was not found. You need to check your PATH environment variable to
-make sure that it includes the directory with the 'ar' command. This
-is a common problem on Solaris, where 'ar' is in the /usr/ccs/bin
-directory.
-
-=item db-recno failure on tests 51, 53 and 55
-
-Old versions of the DB library (including the DB library which comes
-with FreeBSD 2.1) had broken handling of recno databases with modified
-bval settings. Upgrade your DB library or OS.
-
-=item Bad arg length for semctl, is XX, should be ZZZ
-
-If you get this error message from the lib/ipc_sysv test, your System
-V IPC may be broken. The XX typically is 20, and that is what ZZZ
-also should be. Consider upgrading your OS, or reconfiguring your OS
-to include the System V semaphores.
-
-=item lib/ipc_sysv........semget: No space left on device
-
-Either your account or the whole system has run out of semaphores. Or
-both. Either list the semaphores with "ipcs" and remove the unneeded
-ones (which ones these are depends on your system and applications)
-with "ipcrm -s SEMAPHORE_ID_HERE" or configure more semaphores to your
-system.
-
-=item GNU binutils
-
-If you mix GNU binutils (nm, ld, ar) with equivalent vendor-supplied
-tools you may be in for some trouble. For example creating archives
-with an old GNU 'ar' and then using a new current vendor-supplied 'ld'
-may lead into linking problems. Either recompile your GNU binutils
-under your current operating system release, or modify your PATH not
-to include the GNU utils before running Configure, or specify the
-vendor-supplied utilities explicitly to Configure, for example by
-Configure -Dar=/bin/ar.
-
-=item THIS PACKAGE SEEMS TO BE INCOMPLETE
-
-The F<Configure> program has not been able to find all the files which
-make up the complete Perl distribution. You may have a damaged source
-archive file (in which case you may also have seen messages such as
-C<gzip: stdin: unexpected end of file> and C<tar: Unexpected EOF on
-archive file>), or you may have obtained a structurally-sound but
-incomplete archive. In either case, try downloading again from the
-official site named at the start of this document. If you do find
-that any site is carrying a corrupted or incomplete source code
-archive, please report it to the site's maintainer.
-
-=item invalid token: ##
-
-You are using a non-ANSI-compliant C compiler. See L<WARNING: This
-version requires a compiler that supports ANSI C>.
-
-=item Miscellaneous
-
-Some additional things that have been reported for either perl4 or perl5:
-
-Genix may need to use libc rather than libc_s, or #undef VARARGS.
-
-NCR Tower 32 (OS 2.01.01) may need -W2,-Sl,2000 and #undef MKDIR.
-
-UTS may need one or more of -DCRIPPLED_CC, -K or -g, and undef LSTAT.
-
-FreeBSD can fail the lib/ipc_sysv.t test if SysV IPC has not been
-configured to the kernel. Perl tries to detect this, though, and
-you will get a message telling what to do.
-
-If you get syntax errors on '(', try -DCRIPPLED_CC.
-
-Machines with half-implemented dbm routines will need to #undef I_ODBM
-
-HP-UX 11 Y2K patch "Y2K-1100 B.11.00.B0125 HP-UX Core OS Year 2000
-Patch Bundle" has been reported to break the io/fs test #18 which
-tests whether utime() can change timestamps. The Y2K patch seems to
-break utime() so that over NFS the timestamps do not get changed
-(on local filesystems utime() still works).
-
-=back
-
-=head1 make test
-
-This will run the regression tests on the perl you just made. If
-'make test' doesn't say "All tests successful" then something went
-wrong. See the file t/README in the t subdirectory.
-
-Note that you can't run the tests in background if this disables
-opening of /dev/tty. You can use 'make test-notty' in that case but
-a few tty tests will be skipped.
-
-=head2 What if make test doesn't work?
-
-If make test bombs out, just cd to the t directory and run ./TEST
-by hand to see if it makes any difference. If individual tests
-bomb, you can run them by hand, e.g.,
-
- ./perl op/groups.t
-
-Another way to get more detailed information about failed tests and
-individual subtests is to cd to the t directory and run
-
- ./perl harness
-
-(this assumes that most basic tests succeed, since harness uses
-complicated constructs).
-
-You should also read the individual tests to see if there are any helpful
-comments that apply to your system.
-
-=over 4
-
-=item locale
-
-Note: One possible reason for errors is that some external programs
-may be broken due to the combination of your environment and the way
-B<make test> exercises them. For example, this may happen if you have
-one or more of these environment variables set: LC_ALL LC_CTYPE
-LC_COLLATE LANG. In some versions of UNIX, the non-English locales
-are known to cause programs to exhibit mysterious errors.
-
-If you have any of the above environment variables set, please try
-
- setenv LC_ALL C
-
-(for C shell) or
-
- LC_ALL=C;export LC_ALL
-
-for Bourne or Korn shell) from the command line and then retry
-make test. If the tests then succeed, you may have a broken program that
-is confusing the testing. Please run the troublesome test by hand as
-shown above and see whether you can locate the program. Look for
-things like: exec, `backquoted command`, system, open("|...") or
-open("...|"). All these mean that Perl is trying to run some
-external program.
-
-=item Out of memory
-
-On some systems, particularly those with smaller amounts of RAM, some
-of the tests in t/op/pat.t may fail with an "Out of memory" message.
-For example, on my SparcStation IPC with 12 MB of RAM, in perl5.5.670,
-test 85 will fail if run under either t/TEST or t/harness.
-
-Try stopping other jobs on the system and then running the test by itself:
-
- cd t; ./perl op/pat.t
-
-to see if you have any better luck. If your perl still fails this
-test, it does not necessarily mean you have a broken perl. This test
-tries to exercise the regular expression subsystem quite thoroughly,
-and may well be far more demanding than your normal usage.
-
-=item Test failures from lib/ftmp-security saying "system possibly insecure"
-
-Firstly, test failures from the ftmp-security are not necessarily
-serious or indicative of a real security threat. That being said,
-they bear investigating.
-
-The tests may fail for the following reasons. Note that each of the
-tests is run both in the building directory and the temporary
-directory, as returned by File::Spec->tmpdir().
-
-(1) If the directory the tests are being run is owned by somebody else
-than the user running the tests, or root (uid 0). This failure can
-happen if the Perl source code distribution is unpacked in a way that
-the user ids in the distribution package are used as-is. Some tar
-programs do this.
-
-(2) If the directory the test are being run in is writable by group
-or by other (remember: with UNIX/POSIX semantics, write access to
-a directory means the right to add/remove files in that directory),
-and there is no sticky bit set in the directory. 'Sticky bit' is
-a feature used in some UNIXes to give extra protection to files: if
-the bit is on a directory, no one but the owner (or the root) can remove
-that file even if the permissions of the directory would allow file
-removal by others. This failure can happen if the permissions in the
-directory simply are a bit too liberal for the tests' liking. This
-may or may not be a real problem: it depends on the permissions policy
-used on this particular directory/project/system/site. This failure
-can also happen if the system either doesn't support the sticky bit
-(this is the case with many non-UNIX platforms: in principle the
-File::Temp should know about these platforms and skip the tests), or
-if the system supports the sticky bit but for some reason or reasons
-it is not being used. This is for example the case with HP-UX: as of
-HP-UX release 11.00, the sticky bit is very much supported, but HP-UX
-doesn't use it on its /tmp directory as shipped. Also as with the
-permissions, some local policy might dictate that the stickiness is
-not used.
-
-(3) If the system supports the POSIX 'chown giveaway' feature and if
-any of the parent directories of the temporary file back to the root
-directory are 'unsafe', using the definitions given above in (1) and
-(2).
-
-See the documentation for the File::Temp module for more information
-about the various security aspects.
-
-=back
-
-=head1 make install
-
-This will put perl into the public directory you specified to
-Configure; by default this is /usr/local/bin. It will also try
-to put the man pages in a reasonable place. It will not nroff the man
-pages, however. You may need to be root to run B<make install>. If you
-are not root, you must own the directories in question and you should
-ignore any messages about chown not working.
-
-=head2 Installing perl under different names
-
-If you want to install perl under a name other than "perl" (for example,
-when installing perl with special features enabled, such as debugging),
-indicate the alternate name on the "make install" line, such as:
-
- make install PERLNAME=myperl
-
-You can separately change the base used for versioned names (like
-"perl5.005") by setting PERLNAME_VERBASE, like
-
- make install PERLNAME=perl5 PERLNAME_VERBASE=perl
-
-This can be useful if you have to install perl as "perl5" (due to an
-ancient version in /usr/bin supplied by your vendor, eg). Without this
-the versioned binary would be called "perl55.005".
-
-=head2 Installed files
-
-If you want to see exactly what will happen without installing
-anything, you can run
-
- ./perl installperl -n
- ./perl installman -n
-
-make install will install the following:
-
- binaries
-
- perl,
- perl5.nnn where nnn is the current release number. This
- will be a link to perl.
- suidperl,
- sperl5.nnn If you requested setuid emulation.
- a2p awk-to-perl translator
-
- scripts
-
- cppstdin This is used by perl -P, if your cc -E can't
- read from stdin.
- c2ph, pstruct Scripts for handling C structures in header files.
- s2p sed-to-perl translator
- find2perl find-to-perl translator
- h2ph Extract constants and simple macros from C headers
- h2xs Converts C .h header files to Perl extensions.
- perlbug Tool to report bugs in Perl.
- perldoc Tool to read perl's pod documentation.
- pl2pm Convert Perl 4 .pl files to Perl 5 .pm modules
- pod2html, Converters from perl's pod documentation format
- pod2latex, to other useful formats.
- pod2man,
- pod2text,
- pod2checker,
- pod2select,
- pod2usage
- splain Describe Perl warnings and errors
- dprofpp Perl code profile post-processor
-
- library files
-
- in $privlib and $archlib specified to
- Configure, usually under /usr/local/lib/perl5/.
-
- documentation
-
- man pages in $man1dir, usually /usr/local/man/man1.
- module man
- pages in $man3dir, usually /usr/local/man/man3.
- pod/*.pod in $privlib/pod/.
-
-Installperl will also create the directories listed above
-in L<"Installation Directories">.
-
-Perl's *.h header files and the libperl library are also installed
-under $archlib so that any user may later build new modules, run the
-optional Perl compiler, or embed the perl interpreter into another
-program even if the Perl source is no longer available.
-
-Sometimes you only want to install the version-specific parts of the perl
-installation. For example, you may wish to install a newer version of
-perl alongside an already installed production version of perl without
-disabling installation of new modules for the production version.
-To only install the version-specific parts of the perl installation, run
-
- Configure -Dversiononly
-
-or answer 'y' to the appropriate Configure prompt. Alternatively,
-you can just manually run
-
- ./perl installperl -v
-
-and skip installman altogether.
-See also L<"Maintaining completely separate versions"> for another
-approach.
-
-=head1 Coexistence with earlier versions of perl5
-
-In general, you can usually safely upgrade from one version of Perl (e.g.
-5.004_04) to another similar version (e.g. 5.004_05) without re-compiling
-all of your add-on extensions. You can also safely leave the old version
-around in case the new version causes you problems for some reason.
-For example, if you want to be sure that your script continues to run
-with 5.004_04, simply replace the '#!/usr/local/bin/perl' line at the
-top of the script with the particular version you want to run, e.g.
-#!/usr/local/bin/perl5.00404.
-
-Most extensions will probably not need to be recompiled to use
-with a newer version of perl. Here is how it is supposed to work.
-(These examples assume you accept all the Configure defaults.)
-
-Suppose you already have version 5.005_03 installed. The directories
-searched by 5.005_03 are
-
- /usr/local/lib/perl5/5.00503/$archname
- /usr/local/lib/perl5/5.00503
- /usr/local/lib/perl5/site_perl/5.005/$archname
- /usr/local/lib/perl5/site_perl/5.005
-
-Beginning with 5.6.0 the version number in the site libraries are
-fully versioned. Now, suppose you install version 5.6.0. The directories
-searched by version 5.6.0 will be
-
- /usr/local/lib/perl5/5.6.0/$archname
- /usr/local/lib/perl5/5.6.0
- /usr/local/lib/perl5/site_perl/5.6.0/$archname
- /usr/local/lib/perl5/site_perl/5.6.0
-
- /usr/local/lib/perl5/site_perl/5.005/$archname
- /usr/local/lib/perl5/site_perl/5.005
- /usr/local/lib/perl5/site_perl/
-
-Notice the last three entries -- Perl understands the default structure
-of the $sitelib directories and will look back in older, compatible
-directories. This way, modules installed under 5.005_03 will continue
-to be usable by 5.005_03 but will also accessible to 5.6.0. Further,
-suppose that you upgrade a module to one which requires features
-present only in 5.6.0. That new module will get installed into
-/usr/local/lib/perl5/site_perl/5.6.0 and will be available to 5.6.0,
-but will not interfere with the 5.005_03 version.
-
-The last entry, /usr/local/lib/perl5/site_perl/, is there so that
-5.6.0 will look for 5.004-era pure perl modules.
-
-Lastly, suppose you now install version 5.6.1, which we'll assume is
-binary compatible with 5.6.0 and 5.005. The directories searched
-by 5.6.1 (if you don't change the Configure defaults) will be:
-
- /usr/local/lib/perl5/5.6.1/$archname
- /usr/local/lib/perl5/5.6.1
- /usr/local/lib/perl5/site_perl/5.6.1/$archname
- /usr/local/lib/perl5/site_perl/5.6.1
-
- /usr/local/lib/perl5/site_perl/5.6.0/$archname
- /usr/local/lib/perl5/site_perl/5.6.0
-
- /usr/local/lib/perl5/site_perl/5.005/$archname
- /usr/local/lib/perl5/site_perl/5.005
- /usr/local/lib/perl5/site_perl/
-
-Assuming the users in your site are still actively using perl 5.6.0 and
-5.005 after you installed 5.6.1, you can continue to install add-on
-extensions using any of perl 5.6.1, 5.6.0, or 5.005. The installations
-of these different versions remain distinct, but remember that the newer
-versions of perl are automatically set up to search the site libraries of
-the older ones. This means that installing a new extension with 5.005
-will make it visible to all three versions. Later, if you install the
-same extension using, say, perl 5.6.1, it will override the 5.005-installed
-version, but only for perl 5.6.1.
-
-This way, you can choose to share compatible extensions, but also upgrade
-to a newer version of an extension that may be incompatible with earlier
-versions, without breaking the earlier versions' installations.
-
-=head2 Maintaining completely separate versions
-
-Many users prefer to keep all versions of perl in completely
-separate directories. This guarantees that an update to one version
-won't interfere with another version. (The defaults guarantee this for
-libraries after 5.6.0, but not for executables. TODO?) One convenient
-way to do this is by using a separate prefix for each version, such as
-
- sh Configure -Dprefix=/opt/perl5.004
-
-and adding /opt/perl5.004/bin to the shell PATH variable. Such users
-may also wish to add a symbolic link /usr/local/bin/perl so that
-scripts can still start with #!/usr/local/bin/perl.
-
-Others might share a common directory for maintenance sub-versions
-(e.g. 5.004 for all 5.004_0x versions), but change directory with
-each major version.
-
-If you are installing a development subversion, you probably ought to
-seriously consider using a separate directory, since development
-subversions may not have all the compatibility wrinkles ironed out
-yet.
-
-=head2 Upgrading from 5.005 to 5.6.0
-
-Most extensions built and installed with versions of perl
-prior to 5.005_50 will not need to be recompiled to be used with
-5.6.0. If you find you do need to rebuild an extension with 5.6.0,
-you may safely do so without disturbing the 5.005 installation.
-(See L<"Coexistence with earlier versions of perl5"> above.)
-
-See your installed copy of the perllocal.pod file for a (possibly
-incomplete) list of locally installed modules. Note that you want
-perllocal.pod not perllocale.pod for installed module information.
-
-=head1 Coexistence with perl4
-
-You can safely install perl5 even if you want to keep perl4 around.
-
-By default, the perl5 libraries go into /usr/local/lib/perl5/, so
-they don't override the perl4 libraries in /usr/local/lib/perl/.
-
-In your /usr/local/bin directory, you should have a binary named
-perl4.036. That will not be touched by the perl5 installation
-process. Most perl4 scripts should run just fine under perl5.
-However, if you have any scripts that require perl4, you can replace
-the #! line at the top of them by #!/usr/local/bin/perl4.036 (or
-whatever the appropriate pathname is). See pod/perltrap.pod for
-possible problems running perl4 scripts under perl5.
-
-=head1 cd /usr/include; h2ph *.h sys/*.h
-
-Some perl scripts need to be able to obtain information from the
-system header files. This command will convert the most commonly used
-header files in /usr/include into files that can be easily interpreted
-by perl. These files will be placed in the architecture-dependent
-library ($archlib) directory you specified to Configure.
-
-Note: Due to differences in the C and perl languages, the conversion
-of the header files is not perfect. You will probably have to
-hand-edit some of the converted files to get them to parse correctly.
-For example, h2ph breaks spectacularly on type casting and certain
-structures.
-
-=head1 installhtml --help
-
-Some sites may wish to make perl documentation available in HTML
-format. The installhtml utility can be used to convert pod
-documentation into linked HTML files and install them.
-
-Currently, the supplied ./installhtml script does not make use of the
-html Configure variables. This should be fixed in a future release.
-
-The following command-line is an example of one used to convert
-perl documentation:
-
- ./installhtml \
- --podroot=. \
- --podpath=lib:ext:pod:vms \
- --recurse \
- --htmldir=/perl/nmanual \
- --htmlroot=/perl/nmanual \
- --splithead=pod/perlipc \
- --splititem=pod/perlfunc \
- --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \
- --verbose
-
-See the documentation in installhtml for more details. It can take
-many minutes to execute a large installation and you should expect to
-see warnings like "no title", "unexpected directive" and "cannot
-resolve" as the files are processed. We are aware of these problems
-(and would welcome patches for them).
-
-You may find it helpful to run installhtml twice. That should reduce
-the number of "cannot resolve" warnings.
-
-=head1 cd pod && make tex && (process the latex files)
-
-Some sites may also wish to make the documentation in the pod/ directory
-available in TeX format. Type
-
- (cd pod && make tex && <process the latex files>)
-
-=head1 Reporting Problems
-
-If you have difficulty building perl, and none of the advice in this file
-helps, and careful reading of the error message and the relevant manual
-pages on your system doesn't help either, then you should send a message
-to either the comp.lang.perl.misc newsgroup or to perlbug@perl.org with
-an accurate description of your problem.
-
-Please include the output of the ./myconfig shell script that comes with
-the distribution. Alternatively, you can use the perlbug program that
-comes with the perl distribution, but you need to have perl compiled
-before you can use it. (If you have not installed it yet, you need to
-run C<./perl -Ilib utils/perlbug> instead of a plain C<perlbug>.)
-
-Please try to make your message brief but clear. Trim out unnecessary
-information. Do not include large files (such as config.sh or a complete
-Configure or make log) unless absolutely necessary. Do not include a
-complete transcript of your build session. Just include the failing
-commands, the relevant error messages, and whatever preceding commands
-are necessary to give the appropriate context. Plain text should
-usually be sufficient--fancy attachments or encodings may actually
-reduce the number of people who read your message. Your message
-will get relayed to over 400 subscribers around the world so please
-try to keep it brief but clear.
-
-=head1 DOCUMENTATION
-
-Read the manual entries before running perl. The main documentation
-is in the pod/ subdirectory and should have been installed during the
-build process. Type B<man perl> to get started. Alternatively, you
-can type B<perldoc perl> to use the supplied perldoc script. This is
-sometimes useful for finding things in the library modules.
-
-Under UNIX, you can produce a documentation book in postscript form,
-along with its table of contents, by going to the pod/ subdirectory and
-running (either):
-
- ./roffitall -groff # If you have GNU groff installed
- ./roffitall -psroff # If you have psroff
-
-This will leave you with two postscript files ready to be printed.
-(You may need to fix the roffitall command to use your local troff
-set-up.)
-
-Note that you must have performed the installation already before running
-the above, since the script collects the installed files to generate
-the documentation.
-
-=head1 AUTHOR
-
-Original author: Andy Dougherty doughera@lafayette.edu , borrowing very
-heavily from the original README by Larry Wall, with lots of helpful
-feedback and additions from the perl5-porters@perl.org folks.
-
-If you have problems, corrections, or questions, please see
-L<"Reporting Problems"> above.
-
-=head1 REDISTRIBUTION
-
-This document is part of the Perl package and may be distributed under
-the same terms as perl itself, with the following additional request:
-If you are distributing a modified version of perl (perhaps as part of
-a larger package) please B<do> modify these installation instructions
-and the contact information to match your distribution.
-
-=head1 LAST MODIFIED
-
-$Id: INSTALL,v 1.58 1999/07/23 14:43:00 doughera Exp $
diff --git a/contrib/perl5/INTERN.h b/contrib/perl5/INTERN.h
deleted file mode 100644
index 1b35c13..0000000
--- a/contrib/perl5/INTERN.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* INTERN.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * EXT designates a global var which is defined in perl.h
- * dEXT designates a global var which is defined in another
- * file, so we can't count on finding it in perl.h
- * (this practice should be avoided).
- */
-#undef EXT
-#undef dEXT
-#undef EXTCONST
-#undef dEXTCONST
-#if defined(VMS) && !defined(__GNUC__)
- /* Suppress portability warnings from DECC for VMS-specific extensions */
-# ifdef __DECC
-# pragma message disable (GLOBALEXT,NOSHAREEXT,READONLYEXT)
-# endif
-# define EXT globaldef {"$GLOBAL_RW_VARS"} noshare
-# define dEXT globaldef {"$GLOBAL_RW_VARS"} noshare
-# define EXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly
-# define dEXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly
-#else
-#if defined(WIN32) && defined(__MINGW32__)
-# define EXT __declspec(dllexport)
-# define dEXT
-# define EXTCONST __declspec(dllexport) const
-# define dEXTCONST const
-#else
-#ifdef __cplusplus
-# define EXT
-# define dEXT
-# define EXTCONST extern const
-# define dEXTCONST const
-#else
-# define EXT
-# define dEXT
-# define EXTCONST const
-# define dEXTCONST const
-#endif
-#endif
-#endif
-
-#undef INIT
-#define INIT(x) = x
-
-#define DOINIT
diff --git a/contrib/perl5/MANIFEST b/contrib/perl5/MANIFEST
deleted file mode 100644
index 05e3cbc..0000000
--- a/contrib/perl5/MANIFEST
+++ /dev/null
@@ -1,1728 +0,0 @@
-AUTHORS Contact info for contributors
-Artistic The "Artistic License"
-Changes Differences from previous version
-Changes5.000 Differences between 4.x and 5.000
-Changes5.001 Differences between 5.000 and 5.001
-Changes5.002 Differences between 5.001 and 5.002
-Changes5.003 Differences between 5.002 and 5.003
-Changes5.004 Differences between 5.003 and 5.004
-Changes5.005 Differences between 5.004 and 5.005
-Configure Portability tool
-Copying The GNU General Public License
-EXTERN.h Included before foreign .h files
-INSTALL Detailed installation instructions
-INTERN.h Included before domestic .h files
-MANIFEST This list of files
-Makefile.SH A script that generates Makefile
-Policy_sh.SH Hold site-wide preferences between Configure runs.
-Porting/Contract Social contract for contributed modules in Perl core
-Porting/Glossary Glossary of config.sh variables
-Porting/config.sh Sample config.sh
-Porting/config_H Sample config.h
-Porting/findvars Find occurrences of words
-Porting/fixCORE Find and fix modules that generate warnings
-Porting/fixvars Find undeclared variables with C compiler and fix em
-Porting/genlog Generate formatted changelogs by querying p4d
-Porting/makerel Release making utility
-Porting/p4d2p Generate standard patches from p4 diffs
-Porting/p4desc Smarter 'p4 describe', outputs diffs for new files
-Porting/patching.pod How to report changes made to Perl
-Porting/patchls Flexible patch file listing utility
-Porting/pumpkin.pod Guidelines and hints for Perl maintainers
-Porting/repository.pod How to use the Perl repository
-README The Instructions
-README.Y2K Notes about Year 2000 concerns
-README.aix Notes about AIX port
-README.amiga Notes about AmigaOS port
-README.apollo Notes about Apollo DomainOS port
-README.beos Notes about BeOS port
-README.bs2000 Notes about BS2000 POSIX port
-README.cygwin Notes about Cygwin port
-README.dos Notes about dos/djgpp port
-README.epoc Notes about EPOC port
-README.hpux Notes about HP-UX port
-README.hurd Notes about GNU/Hurd port
-README.machten Notes about Power MachTen port
-README.macos Notes about Mac OS (Classic)
-README.mint Notes about Atari MiNT port
-README.mpeix Notes about MPE/iX port
-README.os2 Notes about OS/2 port
-README.os390 Notes about OS/390 (nee MVS) port
-README.plan9 Notes about Plan9 port
-README.qnx Notes about QNX port
-README.solaris Notes about Solaris port
-README.threads Notes about multithreading
-README.vmesa Notes about VM/ESA port
-README.vms Notes about installing the VMS port
-README.vos Notes about Stratus VOS port
-README.win32 Notes about Win32 port
-Todo The Wishlist
-Todo-5.6 What needs doing before/during the 5.6.x release cycle
-XSUB.h Include file for extension subroutines
-apollo/netinet/in.h Apollo DomainOS port: C header file frontend
-av.c Array value code
-av.h Array value header
-beos/nm.c BeOS port
-bytecode.pl Produces ext/ByteLoader/byterun.h, ext/ByteLoader/byterun.c and ext/B/Asmdata.pm
-cc_runtime.h Macros need by runtime of compiler-generated code
-cflags.SH A script that emits C compilation flags per file
-config_h.SH Produces config.h
-configpm Produces lib/Config.pm
-configure.com Configure-equivalent for VMS
-configure.gnu Crude emulation of GNU configure
-cop.h Control operator header
-cv.h Code value header
-cygwin/Makefile.SHs Shared library generation for Cygwin port
-cygwin/cygwin.c Additional code for Cygwin port
-cygwin/ld2.in ld wrapper template for Cygwin port
-cygwin/perlld.in dll generator template for Cygwin port
-deb.c Debugging routines
-djgpp/config.over DOS/DJGPP port
-djgpp/configure.bat DOS/DJGPP port
-djgpp/djgpp.c DOS/DJGPP port
-djgpp/djgppsed.sh DOS/DJGPP port
-djgpp/fixpmain DOS/DJGPP port
-doio.c I/O operations
-doop.c Support code for various operations
-dosish.h Some defines for MS/DOSish machines
-dump.c Debugging output
-eg/ADB An adb wrapper to put in your crash dir
-eg/README Intro to example perl scripts
-eg/cgi/RunMeFirst Setup script for CGI examples
-eg/cgi/caution.xbm CGI example
-eg/cgi/clickable_image.cgi CGI example
-eg/cgi/cookie.cgi CGI example
-eg/cgi/crash.cgi CGI example
-eg/cgi/customize.cgi CGI example
-eg/cgi/diff_upload.cgi CGI example
-eg/cgi/dna_small_gif.uu Small image for CGI examples
-eg/cgi/file_upload.cgi CGI example
-eg/cgi/frameset.cgi CGI example
-eg/cgi/index.html Index page for CGI examples
-eg/cgi/internal_links.cgi CGI example
-eg/cgi/javascript.cgi CGI example
-eg/cgi/monty.cgi CGI example
-eg/cgi/multiple_forms.cgi CGI example
-eg/cgi/nph-clock.cgi CGI example
-eg/cgi/nph-multipart.cgi CGI example
-eg/cgi/popup.cgi CGI example
-eg/cgi/save_state.cgi CGI example
-eg/cgi/tryit.cgi CGI example
-eg/cgi/wilogo_gif.uu Small image for CGI examples
-eg/changes A program to list recently changed files
-eg/client A sample client
-eg/down A program to do things to subdirectories
-eg/dus A program to do du -s on non-mounted dirs
-eg/findcp A find wrapper that implements a -cp switch
-eg/findtar A find wrapper that pumps out a tar file
-eg/g/gcp A program to do a global rcp
-eg/g/gcp.man Manual page for gcp
-eg/g/ged A program to do a global edit
-eg/g/ghosts A sample /etc/ghosts file
-eg/g/gsh A program to do a global rsh
-eg/g/gsh.man Manual page for gsh
-eg/muck A program to find missing make dependencies
-eg/muck.man Manual page for muck
-eg/myrup A program to find lightly loaded machines
-eg/nih Script to insert #! workaround
-eg/relink A program to change symbolic links
-eg/rename A program to rename files
-eg/rmfrom A program to feed doomed filenames to
-eg/scan/scan_df Scan for filesystem anomalies
-eg/scan/scan_last Scan for login anomalies
-eg/scan/scan_messages Scan for console message anomalies
-eg/scan/scan_passwd Scan for passwd file anomalies
-eg/scan/scan_ps Scan for process anomalies
-eg/scan/scan_sudo Scan for sudo anomalies
-eg/scan/scan_suid Scan for setuid anomalies
-eg/scan/scanner An anomaly reporter
-eg/server A sample server
-eg/shmkill A program to remove unused shared memory
-eg/sysvipc/README Intro to Sys V IPC examples
-eg/sysvipc/ipcmsg Example of SYS V IPC message queues
-eg/sysvipc/ipcsem Example of Sys V IPC semaphores
-eg/sysvipc/ipcshm Example of Sys V IPC shared memory
-eg/travesty A program to print travesties of its input text
-eg/unuc Un-uppercases an all-uppercase text
-eg/uudecode A version of uudecode
-eg/van/empty A program to empty the trashcan
-eg/van/unvanish A program to undo what vanish does
-eg/van/vanexp A program to expire vanished files
-eg/van/vanish A program to put files in a trashcan
-eg/who A sample who program
-eg/wrapsuid A setuid script wrapper generator
-emacs/cperl-mode.el An alternate perl-mode
-emacs/e2ctags.pl etags to ctags converter
-emacs/ptags Creates smart TAGS file
-embed.h Maps symbols to safer names
-embed.pl Produces {embed,embedvar,objXSUB,proto}.h, global.sym
-embedvar.h C namespace management
-epoc/config.sh EPOC port config.sh template
-epoc/createpkg.pl EPOC port generate PKG file
-epoc/epoc.c EPOC port
-epoc/epoc_stubs.c EPOC port
-epoc/epocish.c EPOC port
-epoc/epocish.h EPOC port
-epoc/link.pl EPOC port link a exe
-ext/B/B.pm Compiler backend support functions and methods
-ext/B/B.xs Compiler backend external subroutines
-ext/B/B/Asmdata.pm Compiler backend data for assembler
-ext/B/B/Assembler.pm Compiler backend assembler support functions
-ext/B/B/Bblock.pm Compiler basic block analysis support
-ext/B/B/Bytecode.pm Compiler Bytecode backend
-ext/B/B/C.pm Compiler C backend
-ext/B/B/CC.pm Compiler CC backend
-ext/B/B/Concise.pm Compiler Concise backend
-ext/B/B/Debug.pm Compiler Debug backend
-ext/B/B/Deparse.pm Compiler Deparse backend
-ext/B/B/Disassembler.pm Compiler Disassembler backend
-ext/B/B/Lint.pm Compiler Lint backend
-ext/B/B/Showlex.pm Compiler Showlex backend
-ext/B/B/Stackobj.pm Compiler stack objects support functions
-ext/B/B/Stash.pm Compiler module to identify stashes
-ext/B/B/Terse.pm Compiler Terse backend
-ext/B/B/Xref.pm Compiler Xref backend
-ext/B/B/assemble Assemble compiler bytecode
-ext/B/B/cc_harness Simplistic wrapper for using -MO=CC compiler
-ext/B/B/disassemble Disassemble compiler bytecode output
-ext/B/B/makeliblinks Make a simplistic XSUB .so symlink tree for compiler
-ext/B/Makefile.PL Compiler backend makefile writer
-ext/B/NOTES Compiler backend notes
-ext/B/O.pm Compiler front-end module (-MO=...)
-ext/B/README Compiler backend README
-ext/B/TESTS Compiler backend test data
-ext/B/Todo Compiler backend Todo list
-ext/B/defsubs_h.PL Generator for constant subroutines
-ext/B/ramblings/cc.notes Compiler ramblings: notes on CC backend
-ext/B/ramblings/curcop.runtime Compiler ramblings: notes on curcop use
-ext/B/ramblings/flip-flop Compiler ramblings: notes on flip-flop
-ext/B/ramblings/magic Compiler ramblings: notes on magic
-ext/B/ramblings/reg.alloc Compiler ramblings: register allocation
-ext/B/ramblings/runtime.porting Compiler ramblings: porting PP enging
-ext/B/typemap Compiler backend interface types
-ext/ByteLoader/ByteLoader.pm Bytecode loader Perl module
-ext/ByteLoader/ByteLoader.xs Bytecode loader external subroutines
-ext/ByteLoader/Makefile.PL Bytecode loader makefile writer
-ext/ByteLoader/bytecode.h Bytecode header for bytecode loader
-ext/ByteLoader/byterun.c Runtime support for bytecode loader
-ext/ByteLoader/byterun.h Header for byterun.c
-ext/ByteLoader/hints/sunos.pl Hints for named architecture
-ext/DB_File/Changes Berkeley DB extension change log
-ext/DB_File/DB_File.pm Berkeley DB extension Perl module
-ext/DB_File/DB_File.xs Berkeley DB extension external subroutines
-ext/DB_File/DB_File_BS Berkeley DB extension mkbootstrap fodder
-ext/DB_File/Makefile.PL Berkeley DB extension makefile writer
-ext/DB_File/dbinfo Berkeley DB database version checker
-ext/DB_File/hints/dynixptx.pl Hint for DB_File for named architecture
-ext/DB_File/hints/sco.pl Hint for DB_File for named architecture
-ext/DB_File/typemap Berkeley DB extension interface types
-ext/DB_File/version.c Berkeley DB extension interface version check
-ext/Data/Dumper/Changes Data pretty printer, changelog
-ext/Data/Dumper/Dumper.pm Data pretty printer, module
-ext/Data/Dumper/Dumper.xs Data pretty printer, externals
-ext/Data/Dumper/Makefile.PL Data pretty printer, makefile writer
-ext/Data/Dumper/Todo Data pretty printer, futures
-ext/Devel/DProf/Changes Perl code profiler changelog
-ext/Devel/DProf/DProf.pm Perl code profiler
-ext/Devel/DProf/DProf.xs Perl code profiler
-ext/Devel/DProf/Makefile.PL Perl code profiler makefile writer
-ext/Devel/DProf/Todo Perl code profiler todo list
-ext/Devel/Peek/Changes Data debugging tool, changelog
-ext/Devel/Peek/Makefile.PL Data debugging tool, makefile writer
-ext/Devel/Peek/Peek.pm Data debugging tool, module and pod
-ext/Devel/Peek/Peek.xs Data debugging tool, externals
-ext/DynaLoader/DynaLoader_pm.PL Dynamic Loader perl module
-ext/DynaLoader/Makefile.PL Dynamic Loader makefile writer
-ext/DynaLoader/README Dynamic Loader notes and intro
-ext/DynaLoader/XSLoader_pm.PL Simple XS Loader perl module
-ext/DynaLoader/dl_aix.xs AIX implementation
-ext/DynaLoader/dl_beos.xs BeOS implementation
-ext/DynaLoader/dl_dld.xs GNU dld style implementation
-ext/DynaLoader/dl_dllload.xs S/390 dllload() style implementation
-ext/DynaLoader/dl_dlopen.xs BSD/SunOS4&5 dlopen() style implementation
-ext/DynaLoader/dl_dyld.xs NeXT/Apple dyld implementation
-ext/DynaLoader/dl_hpux.xs HP-UX implementation
-ext/DynaLoader/dl_mac.xs MacOS implementation
-ext/DynaLoader/dl_mpeix.xs MPE/iX implementation
-ext/DynaLoader/dl_next.xs NeXT implementation
-ext/DynaLoader/dl_none.xs Stub implementation
-ext/DynaLoader/dl_vmesa.xs VM/ESA implementation
-ext/DynaLoader/dl_vms.xs VMS implementation
-ext/DynaLoader/dlutils.c Dynamic loader utilities for dl_*.xs files
-ext/DynaLoader/hints/aix.pl Hint for DynaLoader for named architecture
-ext/DynaLoader/hints/linux.pl Hint for DynaLoader for named architecture
-ext/DynaLoader/hints/netbsd.pl Hint for DynaLoader for named architecture
-ext/DynaLoader/hints/openbsd.pl Hint for DynaLoader for named architecture
-ext/Errno/ChangeLog Errno perl module change log
-ext/Errno/Errno_pm.PL Errno perl module create script
-ext/Errno/Makefile.PL Errno extension makefile writer
-ext/Fcntl/Fcntl.pm Fcntl extension Perl module
-ext/Fcntl/Fcntl.xs Fcntl extension external subroutines
-ext/Fcntl/Makefile.PL Fcntl extension makefile writer
-ext/File/Glob/Changes File::Glob extension changelog
-ext/File/Glob/Glob.pm File::Glob extension module
-ext/File/Glob/Glob.xs File::Glob extension external subroutines
-ext/File/Glob/Makefile.PL File::Glob extension makefile writer
-ext/File/Glob/TODO File::Glob extension todo list
-ext/File/Glob/bsd_glob.c File::Glob extension run time code
-ext/File/Glob/bsd_glob.h File::Glob extension header file
-ext/GDBM_File/GDBM_File.pm GDBM extension Perl module
-ext/GDBM_File/GDBM_File.xs GDBM extension external subroutines
-ext/GDBM_File/Makefile.PL GDBM extension makefile writer
-ext/GDBM_File/hints/sco.pl Hint for GDBM_File for named architecture
-ext/GDBM_File/typemap GDBM extension interface types
-ext/IO/ChangeLog IO perl module change log
-ext/IO/IO.pm Top-level interface to IO::* classes
-ext/IO/IO.xs IO extension external subroutines
-ext/IO/Makefile.PL IO extension makefile writer
-ext/IO/README IO extension maintenance notice
-ext/IO/lib/IO/Dir.pm IO directory reading package
-ext/IO/lib/IO/File.pm IO file handle package
-ext/IO/lib/IO/Handle.pm IO base handle package
-ext/IO/lib/IO/Pipe.pm IO pipe package
-ext/IO/lib/IO/Poll.pm IO system poll() interface
-ext/IO/lib/IO/Seekable.pm IO methods for seekable handles
-ext/IO/lib/IO/Select.pm IO system select() interface
-ext/IO/lib/IO/Socket.pm IO socket handle package
-ext/IO/lib/IO/Socket/INET.pm IO INET specific socket methods
-ext/IO/lib/IO/Socket/UNIX.pm IO UNIX specific socket methods
-ext/IO/poll.c IO poll() emulation using select()
-ext/IO/poll.h IO poll() emulation using select()
-ext/IPC/SysV/ChangeLog IPC::SysV extension Perl module
-ext/IPC/SysV/MANIFEST IPC::SysV extension Perl module
-ext/IPC/SysV/Makefile.PL IPC::SysV extension Perl module
-ext/IPC/SysV/Msg.pm IPC::SysV extension Perl module
-ext/IPC/SysV/README IPC::SysV extension Perl module
-ext/IPC/SysV/Semaphore.pm IPC::SysV extension Perl module
-ext/IPC/SysV/SysV.pm IPC::SysV extension Perl module
-ext/IPC/SysV/SysV.xs IPC::SysV extension Perl module
-ext/IPC/SysV/hints/cygwin.pl Hint for IPC::SysV for named architecture
-ext/IPC/SysV/hints/next_3.pl Hint for IPC::SysV for named architecture
-ext/IPC/SysV/t/msg.t IPC::SysV extension Perl module
-ext/IPC/SysV/t/sem.t IPC::SysV extension Perl module
-ext/NDBM_File/Makefile.PL NDBM extension makefile writer
-ext/NDBM_File/NDBM_File.pm NDBM extension Perl module
-ext/NDBM_File/NDBM_File.xs NDBM extension external subroutines
-ext/NDBM_File/hints/cygwin.pl Hint for NDBM_File for named architecture
-ext/NDBM_File/hints/dec_osf.pl Hint for NDBM_File for named architecture
-ext/NDBM_File/hints/dynixptx.pl Hint for NDBM_File for named architecture
-ext/NDBM_File/hints/sco.pl Hint for NDBM_File for named architecture
-ext/NDBM_File/hints/solaris.pl Hint for NDBM_File for named architecture
-ext/NDBM_File/hints/svr4.pl Hint for NDBM_File for named architecture
-ext/NDBM_File/typemap NDBM extension interface types
-ext/ODBM_File/Makefile.PL ODBM extension makefile writer
-ext/ODBM_File/ODBM_File.pm ODBM extension Perl module
-ext/ODBM_File/ODBM_File.xs ODBM extension external subroutines
-ext/ODBM_File/hints/cygwin.pl Hint for ODBM_File for named architecture
-ext/ODBM_File/hints/dec_osf.pl Hint for ODBM_File for named architecture
-ext/ODBM_File/hints/hpux.pl Hint for ODBM_File for named architecture
-ext/ODBM_File/hints/sco.pl Hint for ODBM_File for named architecture
-ext/ODBM_File/hints/solaris.pl Hint for ODBM_File for named architecture
-ext/ODBM_File/hints/svr4.pl Hint for ODBM_File for named architecture
-ext/ODBM_File/hints/ultrix.pl Hint for ODBM_File for named architecture
-ext/ODBM_File/typemap ODBM extension interface types
-ext/Opcode/Makefile.PL Opcode extension makefile writer
-ext/Opcode/Opcode.pm Opcode extension Perl module
-ext/Opcode/Opcode.xs Opcode extension external subroutines
-ext/Opcode/Safe.pm Safe extension Perl module
-ext/Opcode/ops.pm "Pragma" form of Opcode extension Perl module
-ext/POSIX/Makefile.PL POSIX extension makefile writer
-ext/POSIX/POSIX.pm POSIX extension Perl module
-ext/POSIX/POSIX.pod POSIX extension documentation
-ext/POSIX/POSIX.xs POSIX extension external subroutines
-ext/POSIX/hints/bsdos.pl Hint for POSIX for named architecture
-ext/POSIX/hints/dynixptx.pl Hint for POSIX for named architecture
-ext/POSIX/hints/freebsd.pl Hint for POSIX for named architecture
-ext/POSIX/hints/linux.pl Hint for POSIX for named architecture
-ext/POSIX/hints/mint.pl Hint for POSIX for named architecture
-ext/POSIX/hints/netbsd.pl Hint for POSIX for named architecture
-ext/POSIX/hints/next_3.pl Hint for POSIX for named architecture
-ext/POSIX/hints/openbsd.pl Hint for POSIX for named architecture
-ext/POSIX/hints/sunos_4.pl Hint for POSIX for named architecture
-ext/POSIX/hints/svr4.pl Hint for POSIX for named architecture
-ext/POSIX/typemap POSIX extension interface types
-ext/SDBM_File/Makefile.PL SDBM extension makefile writer
-ext/SDBM_File/SDBM_File.pm SDBM extension Perl module
-ext/SDBM_File/SDBM_File.xs SDBM extension external subroutines
-ext/SDBM_File/sdbm/CHANGES SDBM kit
-ext/SDBM_File/sdbm/COMPARE SDBM kit
-ext/SDBM_File/sdbm/Makefile.PL SDBM kit
-ext/SDBM_File/sdbm/README SDBM kit
-ext/SDBM_File/sdbm/README.too SDBM kit
-ext/SDBM_File/sdbm/biblio SDBM kit
-ext/SDBM_File/sdbm/dba.c SDBM kit
-ext/SDBM_File/sdbm/dbd.c SDBM kit
-ext/SDBM_File/sdbm/dbe.1 SDBM kit
-ext/SDBM_File/sdbm/dbe.c SDBM kit
-ext/SDBM_File/sdbm/dbm.c SDBM kit
-ext/SDBM_File/sdbm/dbm.h SDBM kit
-ext/SDBM_File/sdbm/dbu.c SDBM kit
-ext/SDBM_File/sdbm/grind SDBM kit
-ext/SDBM_File/sdbm/hash.c SDBM kit
-ext/SDBM_File/sdbm/linux.patches SDBM kit
-ext/SDBM_File/sdbm/makefile.sdbm SDBM kit
-ext/SDBM_File/sdbm/pair.c SDBM kit
-ext/SDBM_File/sdbm/pair.h SDBM kit
-ext/SDBM_File/sdbm/readme.ms SDBM kit
-ext/SDBM_File/sdbm/sdbm.3 SDBM kit
-ext/SDBM_File/sdbm/sdbm.c SDBM kit
-ext/SDBM_File/sdbm/sdbm.h SDBM kit
-ext/SDBM_File/sdbm/tune.h SDBM kit
-ext/SDBM_File/sdbm/util.c SDBM kit
-ext/SDBM_File/typemap SDBM extension interface types
-ext/Socket/Makefile.PL Socket extension makefile writer
-ext/Socket/Socket.pm Socket extension Perl module
-ext/Socket/Socket.xs Socket extension external subroutines
-ext/Sys/Hostname/Hostname.pm Sys::Hostname extension Perl module
-ext/Sys/Hostname/Hostname.xs Sys::Hostname extension external subroutines
-ext/Sys/Hostname/Makefile.PL Sys::Hostname extension makefile writer
-ext/Sys/Syslog/Makefile.PL Sys::Syslog extension makefile writer
-ext/Sys/Syslog/Syslog.pm Sys::Syslog extension Perl module
-ext/Sys/Syslog/Syslog.xs Sys::Syslog extension external subroutines
-ext/Thread/Makefile.PL Thread extension makefile writer
-ext/Thread/Notes Thread notes
-ext/Thread/README Thread README
-ext/Thread/Thread.pm Thread extension Perl module
-ext/Thread/Thread.xs Thread extension external subroutines
-ext/Thread/Thread/Queue.pm Thread synchronised queue objects
-ext/Thread/Thread/Semaphore.pm Thread semaphore objects
-ext/Thread/Thread/Signal.pm Start a thread to run signal handlers
-ext/Thread/Thread/Specific.pm Thread specific data access
-ext/Thread/create.t Test thread creation
-ext/Thread/die.t Test thread die()
-ext/Thread/die2.t Test thread die() differently
-ext/Thread/io.t Test threads doing simple I/O
-ext/Thread/join.t Test thread joining
-ext/Thread/join2.t Test thread joining differently
-ext/Thread/list.t Test getting list of all threads
-ext/Thread/lock.t Test lock primitive
-ext/Thread/queue.t Test Thread::Queue module
-ext/Thread/specific.t Test thread-specific user data
-ext/Thread/sync.t Test thread synchronisation
-ext/Thread/sync2.t Test thread synchronisation
-ext/Thread/typemap Thread extension interface types
-ext/Thread/unsync.t Test thread implicit synchronisation
-ext/Thread/unsync2.t Test thread implicit synchronisation
-ext/Thread/unsync3.t Test thread implicit synchronisation
-ext/Thread/unsync4.t Test thread implicit synchronisation
-ext/attrs/Makefile.PL attrs extension makefile writer
-ext/attrs/attrs.pm attrs extension Perl module
-ext/attrs/attrs.xs attrs extension external subroutines
-ext/re/Makefile.PL re extension makefile writer
-ext/re/hints/aix.pl Hints for re for named architecture
-ext/re/hints/mpeix.pl Hints for re for named architecture
-ext/re/re.pm re extension Perl module
-ext/re/re.xs re extension external subroutines
-ext/util/make_ext Used by Makefile to execute extension Makefiles
-ext/util/mkbootstrap Turns ext/*/*_BS into bootstrap info
-fakethr.h Fake threads header
-form.h Public declarations for the above
-global.sym Symbols that need hiding when embedded
-globals.c File to declare global symbols (for shared library)
-globvar.sym Global variables that need hiding when embedded
-gv.c Glob value code
-gv.h Glob value header
-h2pl/README How to turn .ph files into .pl files
-h2pl/cbreak.pl cbreak routines using .ph
-h2pl/cbreak2.pl cbreak routines using .pl
-h2pl/eg/sizeof.ph Sample sizeof array initialization
-h2pl/eg/sys/errno.pl Sample translated errno.pl
-h2pl/eg/sys/ioctl.pl Sample translated ioctl.pl
-h2pl/eg/sysexits.pl Sample translated sysexits.pl
-h2pl/getioctlsizes Program to extract types from ioctl.h
-h2pl/mksizes Program to make %sizeof array
-h2pl/mkvars Program to make .pl from .ph files
-h2pl/tcbreak cbreak test routine using .ph
-h2pl/tcbreak2 cbreak test routine using .pl
-handy.h Handy definitions
-hints/3b1.sh Hints for named architecture
-hints/3b1cc Hints for named architecture
-hints/README.hints Notes about hints
-hints/aix.sh Hints for named architecture
-hints/altos486.sh Hints for named architecture
-hints/amigaos.sh Hints for named architecture
-hints/apollo.sh Hints for named architecture
-hints/aux_3.sh Hints for named architecture
-hints/beos.sh Hints for named architecture
-hints/broken-db.msg Warning message for systems with broken DB library
-hints/bsdos.sh Hints for named architecture
-hints/convexos.sh Hints for named architecture
-hints/cxux.sh Hints for named architecture
-hints/cygwin.sh Hints for named architecture
-hints/darwin.sh Hints for named architecture
-hints/dcosx.sh Hints for named architecture
-hints/dec_osf.sh Hints for named architecture
-hints/dgux.sh Hints for named architecture
-hints/dos_djgpp.sh Hints for named architecture
-hints/dynix.sh Hints for named architecture
-hints/dynixptx.sh Hints for named architecture
-hints/epix.sh Hints for named architecture
-hints/esix4.sh Hints for named architecture
-hints/fps.sh Hints for named architecture
-hints/freebsd.sh Hints for named architecture
-hints/genix.sh Hints for named architecture
-hints/gnu.sh Hints for named architecture
-hints/greenhills.sh Hints for named architecture
-hints/hpux.sh Hints for named architecture
-hints/i386.sh Hints for named architecture
-hints/irix_4.sh Hints for named architecture
-hints/irix_5.sh Hints for named architecture
-hints/irix_6.sh Hints for named architecture
-hints/irix_6_0.sh Hints for named architecture
-hints/irix_6_1.sh Hints for named architecture
-hints/isc.sh Hints for named architecture
-hints/isc_2.sh Hints for named architecture
-hints/linux.sh Hints for named architecture
-hints/lynxos.sh Hints for named architecture
-hints/machten.sh Hints for named architecture
-hints/machten_2.sh Hints for named architecture
-hints/mint.sh Hints for named architecture
-hints/mips.sh Hints for named architecture
-hints/mpc.sh Hints for named architecture
-hints/mpeix.sh Hints for named architecture
-hints/ncr_tower.sh Hints for named architecture
-hints/netbsd.sh Hints for named architecture
-hints/newsos4.sh Hints for named architecture
-hints/next_3.sh Hints for named architecture
-hints/next_3_0.sh Hints for named architecture
-hints/next_4.sh Hints for named architecture
-hints/nonstopux.sh Hints for named architecture
-hints/openbsd.sh Hints for named architecture
-hints/opus.sh Hints for named architecture
-hints/os2.sh Hints for named architecture
-hints/os390.sh Hints for named architecture
-hints/posix-bc.sh Hints for named architecture
-hints/powerux.sh Hints for named architecture
-hints/qnx.sh Hints for named architecture
-hints/rhapsody.sh Hints for named architecture
-hints/sco.sh Hints for named architecture
-hints/sco_2_3_0.sh Hints for named architecture
-hints/sco_2_3_1.sh Hints for named architecture
-hints/sco_2_3_2.sh Hints for named architecture
-hints/sco_2_3_3.sh Hints for named architecture
-hints/sco_2_3_4.sh Hints for named architecture
-hints/solaris_2.sh Hints for named architecture
-hints/stellar.sh Hints for named architecture
-hints/sunos_4_0.sh Hints for named architecture
-hints/sunos_4_1.sh Hints for named architecture
-hints/svr4.sh Hints for named architecture
-hints/svr5.sh Hints for named architecture
-hints/ti1500.sh Hints for named architecture
-hints/titanos.sh Hints for named architecture
-hints/ultrix_4.sh Hints for named architecture
-hints/umips.sh Hints for named architecture
-hints/unicos.sh Hints for named architecture
-hints/unicosmk.sh Hints for named architecture
-hints/unisysdynix.sh Hints for named architecture
-hints/utekv.sh Hints for named architecture
-hints/uts.sh Hints for named architecture
-hints/uwin.sh Hints for named architecture
-hints/vmesa.sh Hints for named architecture
-hv.c Hash value code
-hv.h Hash value header
-installhtml Perl script to install html files for pods
-installman Perl script to install man pages for pods
-installperl Perl script to do "make install" dirty work
-intrpvar.h Variables held in each interpreter instance
-iperlsys.h Perl's interface to the system
-jpl/ChangeLog Java/Perl Lingo change log
-jpl/JNI/Changes Java Native Interface changes
-jpl/JNI/Closer.java Java Native Interface example
-jpl/JNI/JNI.pm Java Native Interface module
-jpl/JNI/JNI.xs Java Native Interface module
-jpl/JNI/JNIConfig Java Native Interface config
-jpl/JNI/JNIConfig.Win32 Java Native Interface config
-jpl/JNI/JNIConfig.kaffe Java Native Interface config
-jpl/JNI/JNIConfig.noembed Java Native Interface config
-jpl/JNI/JNIConfig.standard Java Native Interface config
-jpl/JNI/Makefile.PL Java Native Interface makefile generator
-jpl/JNI/test.pl Java Native Interface tests
-jpl/JNI/typemap Java/Perl interface typemap
-jpl/JNI/typemap.gcc Java/Perl interface typemap
-jpl/JNI/typemap.win32 Java/Perl interface typemap
-jpl/JPL/AutoLoader.pm Java/Perl compiler module
-jpl/JPL/Class.pm Java/Perl compiler module
-jpl/JPL/Compile.pm Java/Perl compiler module
-jpl/JPL/Makefile.PL Java/Perl makefile generator
-jpl/JPL_Rolo/JPL_Rolo.jpl Rolodex sample application
-jpl/JPL_Rolo/Makefile.PL Makefile generator
-jpl/JPL_Rolo/README Instructions
-jpl/JPL_Rolo/cardfile Rolodex sample application
-jpl/PerlInterpreter/Makefile.PL Makefile generator
-jpl/PerlInterpreter/PerlInterpreter.c Perl interpreter abstraction
-jpl/PerlInterpreter/PerlInterpreter.h Perl interpreter abstraction
-jpl/PerlInterpreter/PerlInterpreter.java Perl interpreter abstraction
-jpl/README JPL instructions
-jpl/README.JUST-JNI JPL instructions
-jpl/SETVARS.PL JPL setup
-jpl/Sample/Makefile.PL JPL sample makefile generator
-jpl/Sample/Sample.jpl JPL sample
-jpl/Test/Makefile.PL JPL tests makefile generator
-jpl/Test/Test.jpl JPL tests
-jpl/bin/jpl JPL compiler
-jpl/docs/Tutorial.pod Perl and Java Tutorial
-jpl/get_jdk/README Instructions for using get_jdk.pl
-jpl/get_jdk/get_jdk.pl JDK download tool
-jpl/get_jdk/jdk_hosts JDK availability list
-jpl/install-jpl JPL install utility
-keywords.h The keyword numbers
-keywords.pl Program to write keywords.h
-lib/AnyDBM_File.pm Perl module to emulate dbmopen
-lib/AutoLoader.pm Autoloader base class
-lib/AutoSplit.pm Split up autoload functions
-lib/Benchmark.pm Measure execution time
-lib/CGI.pm Web server interface ("Common Gateway Interface")
-lib/CGI/Apache.pm Support for Apache's Perl module
-lib/CGI/Carp.pm Log server errors with helpful context
-lib/CGI/Cookie.pm Interface to Netscape Cookies
-lib/CGI/Fast.pm Support for FastCGI (persistent server process)
-lib/CGI/Pretty.pm Output nicely formatted HTML
-lib/CGI/Push.pm Support for server push
-lib/CGI/Switch.pm Simple interface for multiple server types
-lib/CGI/Util.pm Utility functions
-lib/CPAN.pm Interface to Comprehensive Perl Archive Network
-lib/CPAN/FirstTime.pm Utility for creating CPAN config files
-lib/CPAN/Nox.pm Runs CPAN while avoiding compiled extensions
-lib/Carp.pm Error message base class
-lib/Carp/Heavy.pm Error message workhorse
-lib/Class/Struct.pm Declare struct-like datatypes as Perl classes
-lib/Cwd.pm Various cwd routines (getcwd, fastcwd, chdir)
-lib/DB.pm Debugger API (draft)
-lib/Devel/SelfStubber.pm Generate stubs for SelfLoader.pm
-lib/DirHandle.pm like FileHandle only for directories
-lib/Dumpvalue.pm Screen dump of perl values
-lib/English.pm Readable aliases for short variables
-lib/Env.pm Map environment into ordinary variables
-lib/Exporter.pm Exporter base class
-lib/Exporter/Heavy.pm Complicated routines for Exporter
-lib/ExtUtils/Command.pm Utilities for Make on non-UNIX platforms
-lib/ExtUtils/Embed.pm Utilities for embedding Perl in C programs
-lib/ExtUtils/Install.pm Handles 'make install' on extensions
-lib/ExtUtils/Installed.pm Information on installed extensions
-lib/ExtUtils/Liblist.pm Locates libraries
-lib/ExtUtils/MM_Cygwin.pm MakeMaker methods for Cygwin
-lib/ExtUtils/MM_OS2.pm MakeMaker methods for OS/2
-lib/ExtUtils/MM_Unix.pm MakeMaker base class for Unix
-lib/ExtUtils/MM_VMS.pm MakeMaker methods for VMS
-lib/ExtUtils/MM_Win32.pm MakeMaker methods for Win32
-lib/ExtUtils/MakeMaker.pm Write Makefiles for extensions
-lib/ExtUtils/Manifest.pm Utilities to write MANIFEST files
-lib/ExtUtils/Mkbootstrap.pm Writes a bootstrap file (see MakeMaker)
-lib/ExtUtils/Mksymlists.pm Writes a linker options file for extensions
-lib/ExtUtils/Packlist.pm Manipulates .packlist files
-lib/ExtUtils/inst Give information about installed extensions
-lib/ExtUtils/testlib.pm Fixes up @INC to use just-built extension
-lib/ExtUtils/typemap Extension interface types
-lib/ExtUtils/xsubpp External subroutine preprocessor
-lib/Fatal.pm Make errors in functions/builtins fatal
-lib/File/Basename.pm Emulate the basename program
-lib/File/CheckTree.pm Perl module supporting wholesale file mode validation
-lib/File/Compare.pm Emulation of cmp command
-lib/File/Copy.pm Emulation of cp command
-lib/File/DosGlob.pm Win32 DOS-globbing module
-lib/File/Find.pm Routines to do a find
-lib/File/Path.pm Do things like `mkdir -p' and `rm -r'
-lib/File/Spec.pm portable operations on file names
-lib/File/Spec/Epoc.pm portable operations on EPOC file names
-lib/File/Spec/Functions.pm Function interface to File::Spec object methods
-lib/File/Spec/Mac.pm portable operations on Mac file names
-lib/File/Spec/OS2.pm portable operations on OS2 file names
-lib/File/Spec/Unix.pm portable operations on Unix file names
-lib/File/Spec/VMS.pm portable operations on VMS file names
-lib/File/Spec/Win32.pm portable operations on Win32 file names
-lib/File/Temp.pm create safe temporary files and file handles
-lib/File/stat.pm By-name interface to Perl's builtin stat
-lib/FileCache.pm Keep more files open than the system permits
-lib/FileHandle.pm Backward-compatible front end to IO extension
-lib/FindBin.pm Find name of currently executing program
-lib/Getopt/Long.pm Fetch command options (GetOptions)
-lib/Getopt/Std.pm Fetch command options (getopt, getopts)
-lib/I18N/Collate.pm Routines to do strxfrm-based collation
-lib/IPC/Open2.pm Open a two-ended pipe
-lib/IPC/Open3.pm Open a three-ended pipe!
-lib/Math/BigFloat.pm An arbitrary precision floating-point arithmetic package
-lib/Math/BigInt.pm An arbitrary precision integer arithmetic package
-lib/Math/Complex.pm A Complex package
-lib/Math/Trig.pm A simple interface to complex trigonometry
-lib/Net/Ping.pm Hello, anybody home?
-lib/Net/hostent.pm By-name interface to Perl's builtin gethost*
-lib/Net/netent.pm By-name interface to Perl's builtin getnet*
-lib/Net/protoent.pm By-name interface to Perl's builtin getproto*
-lib/Net/servent.pm By-name interface to Perl's builtin getserv*
-lib/Pod/Checker.pm Pod-Parser - check POD documents for syntax errors
-lib/Pod/Find.pm used by pod/splitpod
-lib/Pod/Functions.pm used by pod/splitpod
-lib/Pod/Html.pm Convert POD data to HTML
-lib/Pod/InputObjects.pm Pod-Parser - define objects for input streams
-lib/Pod/LaTeX.pm Convert POD data to LaTeX
-lib/Pod/Man.pm Convert POD data to *roff
-lib/Pod/ParseUtils.pm Pod-Parser - pod utility functions
-lib/Pod/Parser.pm Pod-Parser - define base class for parsing POD
-lib/Pod/Plainer.pm Pod migration utility module
-lib/Pod/Select.pm Pod-Parser - select portions of POD docs
-lib/Pod/Text.pm Pod-Parser - convert POD data to formatted ASCII text
-lib/Pod/Text/Color.pm Convert POD data to color ASCII text
-lib/Pod/Text/Overstrike.pm Convert POD data to formatted overstrike text
-lib/Pod/Text/Termcap.pm Convert POD data to ASCII text with format escapes
-lib/Pod/Usage.pm Pod-Parser - print usage messages
-lib/Search/Dict.pm Perform binary search on dictionaries
-lib/SelectSaver.pm Enforce proper select scoping
-lib/SelfLoader.pm Load functions only on demand
-lib/Shell.pm Make AUTOLOADed system() calls
-lib/Symbol.pm Symbol table manipulation routines
-lib/Term/ANSIColor.pm Perl module supporting termcap usage
-lib/Term/Cap.pm Perl module supporting termcap usage
-lib/Term/Complete.pm A command completion subroutine
-lib/Term/ReadLine.pm Stub readline library
-lib/Test.pm A simple framework for writing test scripts
-lib/Test/Harness.pm A test harness
-lib/Text/Abbrev.pm An abbreviation table builder
-lib/Text/ParseWords.pm Perl module to split words on arbitrary delimiter
-lib/Text/Soundex.pm Perl module to implement Soundex
-lib/Text/Tabs.pm Do expand and unexpand
-lib/Text/Wrap.pm Paragraph formatter
-lib/Tie/Array.pm Base class for tied arrays
-lib/Tie/Handle.pm Base class for tied handles
-lib/Tie/Hash.pm Base class for tied hashes
-lib/Tie/RefHash.pm Base class for tied hashes with references as keys
-lib/Tie/Scalar.pm Base class for tied scalars
-lib/Tie/SubstrHash.pm Compact hash for known key, value and table size
-lib/Time/Local.pm Reverse translation of localtime, gmtime
-lib/Time/gmtime.pm By-name interface to Perl's builtin gmtime
-lib/Time/localtime.pm By-name interface to Perl's builtin localtime
-lib/Time/tm.pm Internal object for Time::{gm,local}time
-lib/UNIVERSAL.pm Base class for ALL classes
-lib/User/grent.pm By-name interface to Perl's builtin getgr*
-lib/User/pwent.pm By-name interface to Perl's builtin getpw*
-lib/Win32.pod Documentation for Win32 extras
-lib/abbrev.pl An abbreviation table builder
-lib/assert.pl assertion and panic with stack trace
-lib/attributes.pm For "sub foo : attrlist"
-lib/autouse.pm Load and call a function only when it's used
-lib/base.pm Establish IS-A relationship at compile time
-lib/bigfloat.pl An arbitrary precision floating point package
-lib/bigint.pl An arbitrary precision integer arithmetic package
-lib/bigrat.pl An arbitrary precision rational arithmetic package
-lib/blib.pm For "use blib"
-lib/bytes.pm Pragma to enable byte operations
-lib/bytes_heavy.pl Support routines for byte pragma
-lib/cacheout.pl Manages output filehandles when you need too many
-lib/charnames.pm Character names
-lib/chat2.pl Obsolete ipc library (use Comm.pm etc instead)
-lib/complete.pl A command completion subroutine
-lib/constant.pm For "use constant"
-lib/ctime.pl A ctime workalike
-lib/diagnostics.pm Print verbose diagnostics
-lib/dotsh.pl Code to "dot" in a shell script
-lib/dumpvar.pl A variable dumper
-lib/exceptions.pl catch and throw routines
-lib/fastcwd.pl a faster but more dangerous getcwd
-lib/fields.pm Set up object field names for pseudo-hash-using classes
-lib/filetest.pm For "use filetest"
-lib/find.pl A find emulator--used by find2perl
-lib/finddepth.pl A depth-first find emulator--used by find2perl
-lib/flush.pl Routines to do single flush
-lib/ftp.pl FTP code (obsolete, use Net::FTP instead)
-lib/getcwd.pl A getcwd() emulator
-lib/getopt.pl Perl library supporting option parsing
-lib/getopts.pl Perl library supporting option parsing
-lib/hostname.pl Old hostname code
-lib/importenv.pl Perl routine to get environment into variables
-lib/integer.pm For "use integer"
-lib/less.pm For "use less"
-lib/lib.pm For "use lib"
-lib/locale.pm For "use locale"
-lib/look.pl A "look" equivalent
-lib/newgetopt.pl A perl library supporting long option parsing
-lib/open.pm Pragma to specify default I/O disciplines
-lib/open2.pl Open a two-ended pipe (uses IPC::Open2)
-lib/open3.pl Open a three-ended pipe (uses IPC::Open3)
-lib/overload.pm Module for overloading perl operators
-lib/perl5db.pl Perl debugging routines
-lib/pwd.pl Routines to keep track of PWD environment variable
-lib/shellwords.pl Perl library to split into words with shell quoting
-lib/sigtrap.pm For trapping an abort and giving traceback
-lib/stat.pl Perl library supporting stat function
-lib/strict.pm For "use strict"
-lib/subs.pm Declare overriding subs
-lib/syslog.pl Perl library supporting syslogging
-lib/tainted.pl Old code for tainting
-lib/termcap.pl Perl library supporting termcap usage
-lib/timelocal.pl Perl library supporting inverse of localtime, gmtime
-lib/unicode/ArabLink.pl Unicode character database
-lib/unicode/ArabLnkGrp.pl Unicode character database
-lib/unicode/ArabShap.txt Unicode character database
-lib/unicode/BidiMirr.txt Unicode character database
-lib/unicode/Bidirectional.pl Unicode character database
-lib/unicode/Block.pl Unicode character database
-lib/unicode/Blocks.txt Unicode character database
-lib/unicode/CaseFold.txt Unicode character database
-lib/unicode/Category.pl Unicode character database
-lib/unicode/CombiningClass.pl Unicode character database
-lib/unicode/CompExcl.txt Unicode character database
-lib/unicode/Decomposition.pl Unicode character database
-lib/unicode/EAWidth.txt Unicode character database
-lib/unicode/In/AlphabeticPresentationForms.pl Unicode character database
-lib/unicode/In/Arabic.pl Unicode character database
-lib/unicode/In/ArabicPresentationForms-A.pl Unicode character database
-lib/unicode/In/ArabicPresentationForms-B.pl Unicode character database
-lib/unicode/In/Armenian.pl Unicode character database
-lib/unicode/In/Arrows.pl Unicode character database
-lib/unicode/In/BasicLatin.pl Unicode character database
-lib/unicode/In/Bengali.pl Unicode character database
-lib/unicode/In/BlockElements.pl Unicode character database
-lib/unicode/In/Bopomofo.pl Unicode character database
-lib/unicode/In/BopomofoExtended.pl Unicode character database
-lib/unicode/In/BoxDrawing.pl Unicode character database
-lib/unicode/In/BraillePatterns.pl Unicode character database
-lib/unicode/In/CJKCompatibility.pl Unicode character database
-lib/unicode/In/CJKCompatibilityForms.pl Unicode character database
-lib/unicode/In/CJKCompatibilityIdeographs.pl Unicode character database
-lib/unicode/In/CJKRadicalsSupplement.pl Unicode character database
-lib/unicode/In/CJKSymbolsandPunctuation.pl Unicode character database
-lib/unicode/In/CJKUnifiedIdeographs.pl Unicode character database
-lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl Unicode character database
-lib/unicode/In/Cherokee.pl Unicode character database
-lib/unicode/In/CombiningDiacriticalMarks.pl Unicode character database
-lib/unicode/In/CombiningHalfMarks.pl Unicode character database
-lib/unicode/In/CombiningMarksforSymbols.pl Unicode character database
-lib/unicode/In/ControlPictures.pl Unicode character database
-lib/unicode/In/CurrencySymbols.pl Unicode character database
-lib/unicode/In/Cyrillic.pl Unicode character database
-lib/unicode/In/Devanagari.pl Unicode character database
-lib/unicode/In/Dingbats.pl Unicode character database
-lib/unicode/In/EnclosedAlphanumerics.pl Unicode character database
-lib/unicode/In/EnclosedCJKLettersandMonths.pl Unicode character database
-lib/unicode/In/Ethiopic.pl Unicode character database
-lib/unicode/In/GeneralPunctuation.pl Unicode character database
-lib/unicode/In/GeometricShapes.pl Unicode character database
-lib/unicode/In/Georgian.pl Unicode character database
-lib/unicode/In/Greek.pl Unicode character database
-lib/unicode/In/GreekExtended.pl Unicode character database
-lib/unicode/In/Gujarati.pl Unicode character database
-lib/unicode/In/Gurmukhi.pl Unicode character database
-lib/unicode/In/HalfwidthandFullwidthForms.pl Unicode character database
-lib/unicode/In/HangulCompatibilityJamo.pl Unicode character database
-lib/unicode/In/HangulJamo.pl Unicode character database
-lib/unicode/In/HangulSyllables.pl Unicode character database
-lib/unicode/In/Hebrew.pl Unicode character database
-lib/unicode/In/HighPrivateUseSurrogates.pl Unicode character database
-lib/unicode/In/HighSurrogates.pl Unicode character database
-lib/unicode/In/Hiragana.pl Unicode character database
-lib/unicode/In/IPAExtensions.pl Unicode character database
-lib/unicode/In/IdeographicDescriptionCharacters.pl Unicode character database
-lib/unicode/In/Kanbun.pl Unicode character database
-lib/unicode/In/KangxiRadicals.pl Unicode character database
-lib/unicode/In/Kannada.pl Unicode character database
-lib/unicode/In/Katakana.pl Unicode character database
-lib/unicode/In/Khmer.pl Unicode character database
-lib/unicode/In/Lao.pl Unicode character database
-lib/unicode/In/Latin-1Supplement.pl Unicode character database
-lib/unicode/In/LatinExtended-A.pl Unicode character database
-lib/unicode/In/LatinExtended-B.pl Unicode character database
-lib/unicode/In/LatinExtendedAdditional.pl Unicode character database
-lib/unicode/In/LetterlikeSymbols.pl Unicode character database
-lib/unicode/In/LowSurrogates.pl Unicode character database
-lib/unicode/In/Malayalam.pl Unicode character database
-lib/unicode/In/MathematicalOperators.pl Unicode character database
-lib/unicode/In/MiscellaneousSymbols.pl Unicode character database
-lib/unicode/In/MiscellaneousTechnical.pl Unicode character database
-lib/unicode/In/Mongolian.pl Unicode character database
-lib/unicode/In/Myanmar.pl Unicode character database
-lib/unicode/In/NumberForms.pl Unicode character database
-lib/unicode/In/Ogham.pl Unicode character database
-lib/unicode/In/OpticalCharacterRecognition.pl Unicode character database
-lib/unicode/In/Oriya.pl Unicode character database
-lib/unicode/In/PrivateUse.pl Unicode character database
-lib/unicode/In/Runic.pl Unicode character database
-lib/unicode/In/Sinhala.pl Unicode character database
-lib/unicode/In/SmallFormVariants.pl Unicode character database
-lib/unicode/In/SpacingModifierLetters.pl Unicode character database
-lib/unicode/In/Specials.pl Unicode character database
-lib/unicode/In/SuperscriptsandSubscripts.pl Unicode character database
-lib/unicode/In/Syriac.pl Unicode character database
-lib/unicode/In/Tamil.pl Unicode character database
-lib/unicode/In/Telugu.pl Unicode character database
-lib/unicode/In/Thaana.pl Unicode character database
-lib/unicode/In/Thai.pl Unicode character database
-lib/unicode/In/Tibetan.pl Unicode character database
-lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl Unicode character database
-lib/unicode/In/YiRadicals.pl Unicode character database
-lib/unicode/In/YiSyllables.pl Unicode character database
-lib/unicode/Index.txt Unicode character database
-lib/unicode/Is/ASCII.pl Unicode character database
-lib/unicode/Is/Alnum.pl Unicode character database
-lib/unicode/Is/Alpha.pl Unicode character database
-lib/unicode/Is/BidiAL.pl Unicode character database
-lib/unicode/Is/BidiAN.pl Unicode character database
-lib/unicode/Is/BidiB.pl Unicode character database
-lib/unicode/Is/BidiBN.pl Unicode character database
-lib/unicode/Is/BidiCS.pl Unicode character database
-lib/unicode/Is/BidiEN.pl Unicode character database
-lib/unicode/Is/BidiES.pl Unicode character database
-lib/unicode/Is/BidiET.pl Unicode character database
-lib/unicode/Is/BidiL.pl Unicode character database
-lib/unicode/Is/BidiLRE.pl Unicode character database
-lib/unicode/Is/BidiLRO.pl Unicode character database
-lib/unicode/Is/BidiNSM.pl Unicode character database
-lib/unicode/Is/BidiON.pl Unicode character database
-lib/unicode/Is/BidiPDF.pl Unicode character database
-lib/unicode/Is/BidiR.pl Unicode character database
-lib/unicode/Is/BidiRLE.pl Unicode character database
-lib/unicode/Is/BidiRLO.pl Unicode character database
-lib/unicode/Is/BidiS.pl Unicode character database
-lib/unicode/Is/BidiWS.pl Unicode character database
-lib/unicode/Is/Blank.pl Unicode character database
-lib/unicode/Is/C.pl Unicode character database
-lib/unicode/Is/Cc.pl Unicode character database
-lib/unicode/Is/Cf.pl Unicode character database
-lib/unicode/Is/Cn.pl Unicode character database
-lib/unicode/Is/Cntrl.pl Unicode character database
-lib/unicode/Is/Co.pl Unicode character database
-lib/unicode/Is/Cs.pl Unicode character database
-lib/unicode/Is/DCcircle.pl Unicode character database
-lib/unicode/Is/DCcompat.pl Unicode character database
-lib/unicode/Is/DCfinal.pl Unicode character database
-lib/unicode/Is/DCfont.pl Unicode character database
-lib/unicode/Is/DCfraction.pl Unicode character database
-lib/unicode/Is/DCinitial.pl Unicode character database
-lib/unicode/Is/DCisolated.pl Unicode character database
-lib/unicode/Is/DCmedial.pl Unicode character database
-lib/unicode/Is/DCnarrow.pl Unicode character database
-lib/unicode/Is/DCnoBreak.pl Unicode character database
-lib/unicode/Is/DCsmall.pl Unicode character database
-lib/unicode/Is/DCsquare.pl Unicode character database
-lib/unicode/Is/DCsub.pl Unicode character database
-lib/unicode/Is/DCsuper.pl Unicode character database
-lib/unicode/Is/DCvertical.pl Unicode character database
-lib/unicode/Is/DCwide.pl Unicode character database
-lib/unicode/Is/DecoCanon.pl Unicode character database
-lib/unicode/Is/DecoCompat.pl Unicode character database
-lib/unicode/Is/Digit.pl Unicode character database
-lib/unicode/Is/Graph.pl Unicode character database
-lib/unicode/Is/L.pl Unicode character database
-lib/unicode/Is/LbrkAI.pl Unicode character database
-lib/unicode/Is/LbrkAL.pl Unicode character database
-lib/unicode/Is/LbrkB2.pl Unicode character database
-lib/unicode/Is/LbrkBA.pl Unicode character database
-lib/unicode/Is/LbrkBB.pl Unicode character database
-lib/unicode/Is/LbrkBK.pl Unicode character database
-lib/unicode/Is/LbrkCB.pl Unicode character database
-lib/unicode/Is/LbrkCL.pl Unicode character database
-lib/unicode/Is/LbrkCM.pl Unicode character database
-lib/unicode/Is/LbrkCR.pl Unicode character database
-lib/unicode/Is/LbrkEX.pl Unicode character database
-lib/unicode/Is/LbrkGL.pl Unicode character database
-lib/unicode/Is/LbrkHY.pl Unicode character database
-lib/unicode/Is/LbrkID.pl Unicode character database
-lib/unicode/Is/LbrkIN.pl Unicode character database
-lib/unicode/Is/LbrkIS.pl Unicode character database
-lib/unicode/Is/LbrkLF.pl Unicode character database
-lib/unicode/Is/LbrkNS.pl Unicode character database
-lib/unicode/Is/LbrkNU.pl Unicode character database
-lib/unicode/Is/LbrkOP.pl Unicode character database
-lib/unicode/Is/LbrkPO.pl Unicode character database
-lib/unicode/Is/LbrkPR.pl Unicode character database
-lib/unicode/Is/LbrkQU.pl Unicode character database
-lib/unicode/Is/LbrkSA.pl Unicode character database
-lib/unicode/Is/LbrkSG.pl Unicode character database
-lib/unicode/Is/LbrkSP.pl Unicode character database
-lib/unicode/Is/LbrkSY.pl Unicode character database
-lib/unicode/Is/LbrkXX.pl Unicode character database
-lib/unicode/Is/LbrkZW.pl Unicode character database
-lib/unicode/Is/Ll.pl Unicode character database
-lib/unicode/Is/Lm.pl Unicode character database
-lib/unicode/Is/Lo.pl Unicode character database
-lib/unicode/Is/Lower.pl Unicode character database
-lib/unicode/Is/Lt.pl Unicode character database
-lib/unicode/Is/Lu.pl Unicode character database
-lib/unicode/Is/M.pl Unicode character database
-lib/unicode/Is/Mc.pl Unicode character database
-lib/unicode/Is/Me.pl Unicode character database
-lib/unicode/Is/Mirrored.pl Unicode character database
-lib/unicode/Is/Mn.pl Unicode character database
-lib/unicode/Is/N.pl Unicode character database
-lib/unicode/Is/Nd.pl Unicode character database
-lib/unicode/Is/Nl.pl Unicode character database
-lib/unicode/Is/No.pl Unicode character database
-lib/unicode/Is/P.pl Unicode character database
-lib/unicode/Is/Pc.pl Unicode character database
-lib/unicode/Is/Pd.pl Unicode character database
-lib/unicode/Is/Pe.pl Unicode character database
-lib/unicode/Is/Pf.pl Unicode character database
-lib/unicode/Is/Pi.pl Unicode character database
-lib/unicode/Is/Po.pl Unicode character database
-lib/unicode/Is/Print.pl Unicode character database
-lib/unicode/Is/Ps.pl Unicode character database
-lib/unicode/Is/Punct.pl Unicode character database
-lib/unicode/Is/S.pl Unicode character database
-lib/unicode/Is/Sc.pl Unicode character database
-lib/unicode/Is/Sk.pl Unicode character database
-lib/unicode/Is/Sm.pl Unicode character database
-lib/unicode/Is/So.pl Unicode character database
-lib/unicode/Is/Space.pl Unicode character database
-lib/unicode/Is/SpacePerl.pl Unicode character database
-lib/unicode/Is/SylA.pl Unicode character database
-lib/unicode/Is/SylAA.pl Unicode character database
-lib/unicode/Is/SylAAI.pl Unicode character database
-lib/unicode/Is/SylAI.pl Unicode character database
-lib/unicode/Is/SylC.pl Unicode character database
-lib/unicode/Is/SylE.pl Unicode character database
-lib/unicode/Is/SylEE.pl Unicode character database
-lib/unicode/Is/SylI.pl Unicode character database
-lib/unicode/Is/SylII.pl Unicode character database
-lib/unicode/Is/SylN.pl Unicode character database
-lib/unicode/Is/SylO.pl Unicode character database
-lib/unicode/Is/SylOO.pl Unicode character database
-lib/unicode/Is/SylU.pl Unicode character database
-lib/unicode/Is/SylV.pl Unicode character database
-lib/unicode/Is/SylWA.pl Unicode character database
-lib/unicode/Is/SylWAA.pl Unicode character database
-lib/unicode/Is/SylWC.pl Unicode character database
-lib/unicode/Is/SylWE.pl Unicode character database
-lib/unicode/Is/SylWEE.pl Unicode character database
-lib/unicode/Is/SylWI.pl Unicode character database
-lib/unicode/Is/SylWII.pl Unicode character database
-lib/unicode/Is/SylWO.pl Unicode character database
-lib/unicode/Is/SylWOO.pl Unicode character database
-lib/unicode/Is/SylWU.pl Unicode character database
-lib/unicode/Is/SylWV.pl Unicode character database
-lib/unicode/Is/Syllable.pl Unicode character database
-lib/unicode/Is/Upper.pl Unicode character database
-lib/unicode/Is/Word.pl Unicode character database
-lib/unicode/Is/XDigit.pl Unicode character database
-lib/unicode/Is/Z.pl Unicode character database
-lib/unicode/Is/Zl.pl Unicode character database
-lib/unicode/Is/Zp.pl Unicode character database
-lib/unicode/Is/Zs.pl Unicode character database
-lib/unicode/Jamo.txt Unicode character database
-lib/unicode/JamoShort.pl Unicode character database
-lib/unicode/LineBrk.txt Unicode character database
-lib/unicode/Makefile Unicode character database
-lib/unicode/Name.pl Unicode character database
-lib/unicode/Names.txt Unicode character database
-lib/unicode/NamesList.html Unicode character database
-lib/unicode/Number.pl Unicode character database
-lib/unicode/PropList.txt Unicode character database
-lib/unicode/README.Ethiopic Unicode character database
-lib/unicode/README.perl Unicode character database
-lib/unicode/ReadMe.txt Unicode character database info
-lib/unicode/SpecCase.txt Unicode character database
-lib/unicode/To/Digit.pl Unicode character database
-lib/unicode/To/Lower.pl Unicode character database
-lib/unicode/To/Title.pl Unicode character database
-lib/unicode/To/Upper.pl Unicode character database
-lib/unicode/UCD301.html Unicode character database
-lib/unicode/UCDFF301.html Unicode character database
-lib/unicode/Unicode.301 Unicode character database
-lib/unicode/mktables.PL Unicode character database generator
-lib/unicode/syllables.txt Unicode character database
-lib/utf8.pm Pragma to control Unicode support
-lib/utf8_heavy.pl Support routines for utf8 pragma
-lib/validate.pl Perl library supporting wholesale file mode validation
-lib/vars.pm Declare pseudo-imported global variables
-lib/warnings.pm For "use warnings"
-lib/warnings/register.pm For "use warnings::register"
-makeaperl.SH perl script that produces a new perl binary
-makedef.pl Create symbol export lists for linking
-makedepend.SH Precursor to makedepend
-makedir.SH Precursor to makedir
-malloc.c A version of malloc you might not want
-mg.c Magic code
-mg.h Magic header
-minimod.pl Writes lib/ExtUtils/Miniperl.pm
-miniperlmain.c Basic perl w/o dynamic loading or extensions
-mint/Makefile MiNT port
-mint/README MiNT port
-mint/errno.h MiNT port
-mint/pwd.c MiNT port
-mint/stdio.h MiNT port
-mint/sys/time.h MiNT port
-mint/time.h MiNT port
-mpeix/mpeixish.h MPE/iX port
-mpeix/nm MPE/iX port
-mpeix/relink MPE/iX port
-mv-if-diff Script to mv a file if it changed
-myconfig.SH Prints summary of the current configuration
-nostdio.h Cause compile error on stdio calls
-objXSUB.h Scoping macros for Perl Object in extensions
-op.c Opcode syntax tree code
-op.h Opcode syntax tree header
-opcode.h Automatically generated opcode header
-opcode.pl Opcode header generatore
-opnames.h Automatically generated opcode header
-os2/Changes Changelog for OS/2 port
-os2/Makefile.SHs Shared library generation for OS/2
-os2/OS2/ExtAttr/Changes EA access module
-os2/OS2/ExtAttr/ExtAttr.pm EA access module
-os2/OS2/ExtAttr/ExtAttr.xs EA access module
-os2/OS2/ExtAttr/MANIFEST EA access module
-os2/OS2/ExtAttr/Makefile.PL EA access module
-os2/OS2/ExtAttr/myea.h EA access module
-os2/OS2/ExtAttr/t/os2_ea.t EA access module
-os2/OS2/ExtAttr/typemap EA access module
-os2/OS2/PrfDB/Changes System database access module
-os2/OS2/PrfDB/MANIFEST System database access module
-os2/OS2/PrfDB/Makefile.PL System database access module
-os2/OS2/PrfDB/PrfDB.pm System database access module
-os2/OS2/PrfDB/PrfDB.xs System database access module
-os2/OS2/PrfDB/t/os2_prfdb.t System database access module
-os2/OS2/PrfDB/typemap System database access module
-os2/OS2/Process/MANIFEST system() constants in a module
-os2/OS2/Process/Makefile.PL system() constants in a module
-os2/OS2/Process/Process.pm system() constants in a module
-os2/OS2/Process/Process.xs system() constants in a module
-os2/OS2/REXX/Changes DLL access module
-os2/OS2/REXX/DLL/Changes DLL access module
-os2/OS2/REXX/DLL/DLL.pm DLL access module
-os2/OS2/REXX/DLL/DLL.xs DLL access module
-os2/OS2/REXX/DLL/MANIFEST DLL access module
-os2/OS2/REXX/DLL/Makefile.PL DLL access module
-os2/OS2/REXX/MANIFEST DLL access module
-os2/OS2/REXX/Makefile.PL DLL access module
-os2/OS2/REXX/REXX.pm DLL access module
-os2/OS2/REXX/REXX.xs DLL access module
-os2/OS2/REXX/t/rx_cmprt.t DLL access module
-os2/OS2/REXX/t/rx_dllld.t DLL access module
-os2/OS2/REXX/t/rx_emxrv.t DLL access module
-os2/OS2/REXX/t/rx_objcall.t DLL access module
-os2/OS2/REXX/t/rx_sql.test DLL access module
-os2/OS2/REXX/t/rx_tiesql.test DLL access module
-os2/OS2/REXX/t/rx_tievar.t DLL access module
-os2/OS2/REXX/t/rx_tieydb.t DLL access module
-os2/OS2/REXX/t/rx_varset.t DLL access module
-os2/OS2/REXX/t/rx_vrexx.t DLL access module
-os2/diff.configure Patches to Configure
-os2/dl_os2.c Addon for dl_open
-os2/dlfcn.h Addon for dl_open
-os2/os2.c Additional code for OS/2
-os2/os2.sym Additional symbols to export
-os2/os2add.sym Overriding symbols to export
-os2/os2ish.h Header for OS/2
-os2/os2thread.h pthread-like typedefs
-os2/perl2cmd.pl Corrects installed binaries under OS/2
-patchlevel.h The current patch level of perl
-perl.c main()
-perl.h Global declarations
-perlapi.c Perl API functions
-perlapi.h Perl API function declarations
-perlio.c C code for PerlIO abstraction
-perlio.h compatibility stub
-perlio.sym Symbols for PerlIO abstraction
-perlsdio.h Fake stdio using perlio
-perlsfio.h Prototype sfio mapping for PerlIO
-perlsh A poor man's perl shell
-perlvars.h Global variables
-perly.c A byacc'ed perly.y
-perly.fixer A program to remove yacc stack limitations
-perly.h The header file for perly.c
-perly.y Yacc grammar for perl
-perly_c.diff Fixup perly.c to allow recursion
-plan9/aperl Shell to make Perl error messages Acme-friendly
-plan9/arpa/inet.h Plan9 port: replacement C header file
-plan9/buildinfo Plan9 port: configuration information
-plan9/config.plan9 Plan9 port: config.h template
-plan9/exclude Plan9 port: tests to skip
-plan9/fndvers Plan9 port: update Perl version in config.plan9
-plan9/genconfig.pl Plan9 port: generate config.sh
-plan9/mkfile Plan9 port: Mk driver for build
-plan9/myconfig.plan9 Plan9 port: script to print config summary
-plan9/perlplan9.doc Plan9 port: Plan9-specific formatted documentation
-plan9/perlplan9.pod Plan9 port: Plan9-specific pod documentation
-plan9/plan9.c Plan9 port: Plan9-specific C routines
-plan9/plan9ish.h Plan9 port: Plan9-specific C header file
-plan9/setup.rc Plan9 port: script for easy build+install
-plan9/versnum Plan9 port: script to print version number
-pod/Makefile.SH generate Makefile whichs makes pods into something else
-pod/buildtoc.PL generate buildtoc which generates perltoc.pod
-pod/checkpods.PL Tool to check for common errors in pods
-pod/perl.pod Top level perl documentation
-pod/perl5004delta.pod Changes from 5.003 to 5.004
-pod/perl5005delta.pod Changes from 5.004 to 5.005
-pod/perlapi.pod Perl API documentation (autogenerated)
-pod/perlapio.pod IO API info
-pod/perlbook.pod Perl book information
-pod/perlboot.pod Beginner's Object-oriented Tutorial
-pod/perlbot.pod Object-oriented Bag o' Tricks
-pod/perlcall.pod Callback info
-pod/perlclib.pod Internal replacements for standard C library functions
-pod/perlcompile.pod Info on using the Compiler suite
-pod/perldata.pod Data structure info
-pod/perldbmfilter.pod Info about DBM Filters
-pod/perldebguts.pod Debugger guts info
-pod/perldebtut.pod Perl debugging tutorial
-pod/perldebug.pod Debugger info
-pod/perldelta.pod Changes since last version
-pod/perldiag.pod Diagnostic info
-pod/perldsc.pod Data Structures Cookbook
-pod/perlebcdic.pod Considerations for running Perl on EBCDIC platforms
-pod/perlembed.pod Embedding info
-pod/perlfaq.pod Frequently Asked Questions, Top Level
-pod/perlfaq1.pod Frequently Asked Questions, Part 1
-pod/perlfaq2.pod Frequently Asked Questions, Part 2
-pod/perlfaq3.pod Frequently Asked Questions, Part 3
-pod/perlfaq4.pod Frequently Asked Questions, Part 4
-pod/perlfaq5.pod Frequently Asked Questions, Part 5
-pod/perlfaq6.pod Frequently Asked Questions, Part 6
-pod/perlfaq7.pod Frequently Asked Questions, Part 7
-pod/perlfaq8.pod Frequently Asked Questions, Part 8
-pod/perlfaq9.pod Frequently Asked Questions, Part 9
-pod/perlfilter.pod Source filters info
-pod/perlfork.pod Info about fork()
-pod/perlform.pod Format info
-pod/perlfunc.pod Function info
-pod/perlguts.pod Internals info
-pod/perlhack.pod Perl hackers guide
-pod/perlhist.pod Perl history info
-pod/perlintern.pod Perl internal function docs (autogenrated)
-pod/perlipc.pod IPC info
-pod/perllexwarn.pod Lexical Warnings info
-pod/perllocale.pod Locale support info
-pod/perllol.pod How to use lists of lists
-pod/perlmod.pod Module mechanism info
-pod/perlmodinstall.pod Installing CPAN Modules
-pod/perlmodlib.PL Generate pod/perlmodlib.pod
-pod/perlmodlib.pod Module policy info
-pod/perlnewmod.pod Preparing a new module for distribution
-pod/perlnumber.pod Semantics of numbers and numeric operations
-pod/perlobj.pod Object info
-pod/perlop.pod Operator info
-pod/perlopentut.pod open() tutorial
-pod/perlpod.pod Pod info
-pod/perlport.pod Portability guide
-pod/perlre.pod Regular expression info
-pod/perlref.pod References info
-pod/perlreftut.pod Mark's references tutorial
-pod/perlrequick.pod Quick start guide for Perl regular expressions
-pod/perlretut.pod Tutorial for Perl regular expressions
-pod/perlrun.pod Execution info
-pod/perlsec.pod Security info
-pod/perlstyle.pod Style info
-pod/perlsub.pod Subroutine info
-pod/perlsyn.pod Syntax info
-pod/perlthrtut.pod Threads tutorial
-pod/perltie.pod Tieing an object class into a simple variable
-pod/perltoc.pod Table of Contents info
-pod/perltodo.pod Todo list explained
-pod/perltoot.pod Tom's object-oriented tutorial
-pod/perltootc.pod Tom's object-oriented tutorial (more on class data)
-pod/perltrap.pod Trap info
-pod/perlunicode.pod Unicode support info
-pod/perlutil.pod Accompanying utilities explained
-pod/perlvar.pod Variable info
-pod/perlxs.pod XS api info
-pod/perlxstut.pod XS tutorial
-pod/pod2html.PL Precursor for translator to turn pod into HTML
-pod/pod2latex.PL Precursor for translator to turn pod into LaTeX
-pod/pod2man.PL Precursor for translator to turn pod into manpage
-pod/pod2text.PL Precursor for translator to turn pod into text
-pod/pod2usage.PL Pod-Parser - print usage messages from POD docs
-pod/podchecker.PL Pod-Parser - Pod::Checker::podchecker() CLI
-pod/podselect.PL Pod-Parser - Pod::Select::podselect() CLI
-pod/roffitall troff the whole man page set
-pod/rofftoc Generate a table of contents in troff format
-pod/splitman Splits perlfunc into multiple man pages
-pod/splitpod Splits perlfunc into multiple pod pages
-pp.c Push/Pop code
-pp.h Push/Pop code defs
-pp.sym Push/Pop code symbols
-pp_ctl.c Push/Pop code for control flow
-pp_hot.c Push/Pop code for heavily used opcodes
-pp_proto.h C++ definitions for Push/Pop code
-pp_sys.c Push/Pop code for system interaction
-proto.h Prototypes
-qnx/ar QNX implementation of "ar" utility
-qnx/cpp QNX implementation of preprocessor filter
-regcomp.c Regular expression compiler
-regcomp.h Private declarations for above
-regcomp.pl Builder of regnodes.h
-regcomp.sym Data for regnodes.h
-regexec.c Regular expression evaluator
-regexp.h Public declarations for the above
-regnodes.h Description of nodes of RE engine
-run.c The interpreter loop
-scope.c Scope entry and exit code
-scope.h Scope entry and exit header
-sv.c Scalar value code
-sv.h Scalar value header
-t/README Instructions for regression tests
-t/TEST The regression tester
-t/UTEST Run regression tests with -Mutf8
-t/base/cond.t See if conditionals work
-t/base/if.t See if if works
-t/base/lex.t See if lexical items work
-t/base/pat.t See if pattern matching works
-t/base/rs.t See if record-read works
-t/base/term.t See if various terms work
-t/cmd/elsif.t See if else-if works
-t/cmd/for.t See if for loops work
-t/cmd/mod.t See if statement modifiers work
-t/cmd/subval.t See if subroutine values work
-t/cmd/switch.t See if switch optimizations work
-t/cmd/while.t See if while loops work
-t/comp/bproto.t See if builtins conform to their prototypes
-t/comp/cmdopt.t See if command optimization works
-t/comp/colon.t See if colons are parsed correctly
-t/comp/cpp.aux main file for cpp.t
-t/comp/cpp.t See if C preprocessor works
-t/comp/decl.t See if declarations work
-t/comp/multiline.t See if multiline strings work
-t/comp/package.t See if packages work
-t/comp/proto.t See if function prototypes work
-t/comp/redef.t See if we get correct warnings on redefined subs
-t/comp/require.t See if require works
-t/comp/script.t See if script invokation works
-t/comp/term.t See if more terms work
-t/comp/use.t See if pragmas work
-t/harness Finer diagnostics from test suite
-t/io/argv.t See if ARGV stuff works
-t/io/dup.t See if >& works right
-t/io/fs.t See if directory manipulations work
-t/io/inplace.t See if inplace editing works
-t/io/iprefix.t See if inplace editing works with prefixes
-t/io/nargv.t See if nested ARGV stuff works
-t/io/open.t See if open works
-t/io/openpid.t See if open works for subprocesses
-t/io/pipe.t See if secure pipes work
-t/io/print.t See if print commands work
-t/io/read.t See if read works
-t/io/tell.t See if file seeking works
-t/lib/abbrev.t See if Text::Abbrev works
-t/lib/ansicolor.t See if Term::ANSIColor works
-t/lib/anydbm.t See if AnyDBM_File works
-t/lib/attrs.t See if attrs works with C<sub : attrs>
-t/lib/autoloader.t See if AutoLoader works
-t/lib/b.t See if B backends work
-t/lib/basename.t See if File::Basename works
-t/lib/bigfloat.t See if bigfloat.pl works
-t/lib/bigfltpm.t See if BigFloat.pm works
-t/lib/bigint.t See if bigint.pl works
-t/lib/bigintpm.t See if BigInt.pm works
-t/lib/cgi-esc.t See if CGI.pm works
-t/lib/cgi-form.t See if CGI.pm works
-t/lib/cgi-function.t See if CGI.pm works
-t/lib/cgi-html.t See if CGI.pm works
-t/lib/cgi-pretty.t See if CGI.pm works
-t/lib/cgi-request.t See if CGI.pm works
-t/lib/charnames.t See if character names work
-t/lib/checktree.t See if File::CheckTree works
-t/lib/class-struct.t See if Class::Struct works
-t/lib/complex.t See if Math::Complex works
-t/lib/db-btree.t See if DB_File works
-t/lib/db-hash.t See if DB_File works
-t/lib/db-recno.t See if DB_File works
-t/lib/dirhand.t See if DirHandle works
-t/lib/dosglob.t See if File::DosGlob works
-t/lib/dprof.t Perl code profiler testsuite driver
-t/lib/dprof/V.pm Perl code profiler tests
-t/lib/dprof/test1_t Perl code profiler tests
-t/lib/dprof/test1_v Perl code profiler tests
-t/lib/dprof/test2_t Perl code profiler tests
-t/lib/dprof/test2_v Perl code profiler tests
-t/lib/dprof/test3_t Perl code profiler tests
-t/lib/dprof/test3_v Perl code profiler tests
-t/lib/dprof/test4_t Perl code profiler tests
-t/lib/dprof/test4_v Perl code profiler tests
-t/lib/dprof/test5_t Perl code profiler tests
-t/lib/dprof/test5_v Perl code profiler tests
-t/lib/dprof/test6_t Perl code profiler tests
-t/lib/dprof/test6_v Perl code profiler tests
-t/lib/dumper-ovl.t See if Data::Dumper works for overloaded data
-t/lib/dumper.t See if Data::Dumper works
-t/lib/english.t See if English works
-t/lib/env-array.t See if Env works for arrays
-t/lib/env.t See if Env works
-t/lib/errno.t See if Errno works
-t/lib/fatal.t See if Fatal works
-t/lib/fields.t See if base/fields works
-t/lib/filecache.t See if FileCache works
-t/lib/filecopy.t See if File::Copy works
-t/lib/filefind.t See if File::Find works
-t/lib/filefunc.t See if File::Spec::Functions works
-t/lib/filehand.t See if FileHandle works
-t/lib/filepath.t See if File::Path works
-t/lib/filespec.t See if File::Spec works
-t/lib/findbin.t See if FindBin works
-t/lib/ftmp-mktemp.t See if File::Temp works
-t/lib/ftmp-posix.t See if File::Temp works
-t/lib/ftmp-security.t See if File::Temp works
-t/lib/ftmp-tempfile.t See if File::Temp works
-t/lib/gdbm.t See if GDBM_File works
-t/lib/getopt.t See if Getopt::Std and Getopt::Long work
-t/lib/glob-basic.t See if File::Glob works
-t/lib/glob-case.t See if File::Glob works
-t/lib/glob-global.t See if File::Glob works
-t/lib/glob-taint.t See if File::Glob works
-t/lib/gol-basic.t See if Getopt::Long works
-t/lib/gol-compat.t See if Getopt::Long works
-t/lib/gol-linkage.t See if Getopt::Long works
-t/lib/gol-oo.t See if Getopt::Long works
-t/lib/h2ph.h Test header file for h2ph
-t/lib/h2ph.pht Generated output from h2ph.h by h2ph, for comparison
-t/lib/h2ph.t See if h2ph works like it should
-t/lib/hostname.t See if Sys::Hostname works
-t/lib/io_const.t See if constants from IO work
-t/lib/io_dir.t See if directory-related methods from IO work
-t/lib/io_dup.t See if dup()-related methods from IO work
-t/lib/io_linenum.t See if I/O line numbers are tracked correctly
-t/lib/io_multihomed.t See if INET sockets work with multi-homed hosts
-t/lib/io_pipe.t See if pipe()-related methods from IO work
-t/lib/io_poll.t See if poll()-related methods from IO work
-t/lib/io_sel.t See if select()-related methods from IO work
-t/lib/io_sock.t See if INET socket-related methods from IO work
-t/lib/io_taint.t See if the untaint method from IO works
-t/lib/io_tell.t See if seek()/tell()-related methods from IO work
-t/lib/io_udp.t See if UDP socket-related methods from IO work
-t/lib/io_unix.t See if UNIX socket-related methods from IO work
-t/lib/io_xs.t See if XSUB methods from IO work
-t/lib/ipc_sysv.t See if IPC::SysV works
-t/lib/ndbm.t See if NDBM_File works
-t/lib/odbm.t See if ODBM_File works
-t/lib/opcode.t See if Opcode works
-t/lib/open2.t See if IPC::Open2 works
-t/lib/open3.t See if IPC::Open3 works
-t/lib/ops.t See if Opcode works
-t/lib/parsewords.t See if Text::ParseWords works
-t/lib/peek.t See if Devel::Peek works
-t/lib/ph.t See if h2ph works
-t/lib/posix.t See if POSIX works
-t/lib/safe1.t See if Safe works
-t/lib/safe2.t See if Safe works
-t/lib/sdbm.t See if SDBM_File works
-t/lib/searchdict.t See if Search::Dict works
-t/lib/selectsaver.t See if SelectSaver works
-t/lib/selfloader.t See if SelfLoader works
-t/lib/socket.t See if Socket works
-t/lib/soundex.t See if Soundex works
-t/lib/symbol.t See if Symbol works
-t/lib/syslfs.t See if large files work for sysio
-t/lib/syslog.t See if Sys::Syslog works
-t/lib/textfill.t See if Text::Wrap::fill works
-t/lib/texttabs.t See if Text::Tabs works
-t/lib/textwrap.t See if Text::Wrap::wrap works
-t/lib/thr5005.t Test 5.005-style threading (skipped if no use5005threads)
-t/lib/tie-push.t Test for Tie::Array
-t/lib/tie-refhash.t Test for Tie::RefHash and Tie::RefHash::Nestable
-t/lib/tie-splice.t Test for Tie::Array::SPLICE
-t/lib/tie-stdarray.t Test for Tie::StdArray
-t/lib/tie-stdhandle.t Test for Tie::StdHandle
-t/lib/tie-stdpush.t Test for Tie::StdArray
-t/lib/tie-substrhash.t Test for Tie::SubstrHash
-t/lib/timelocal.t See if Time::Local works
-t/lib/trig.t See if Math::Trig works
-t/op/64bitint.t See if 64 bit integers work
-t/op/anonsub.t See if anonymous subroutines work
-t/op/append.t See if . works
-t/op/args.t See if operations on @_ work
-t/op/arith.t See if arithmetic works
-t/op/array.t See if array operations work
-t/op/assignwarn.t See if OP= operators warn correctly for undef targets
-t/op/attrs.t See if attributes on declarations work
-t/op/auto.t See if autoincrement et all work
-t/op/avhv.t See if pseudo-hashes work
-t/op/bop.t See if bitops work
-t/op/chars.t See if character escapes work
-t/op/chop.t See if chop works
-t/op/closure.t See if closures work
-t/op/cmp.t See if the various string and numeric compare work
-t/op/concat.t See if string concatenation works
-t/op/cond.t See if conditional expressions work
-t/op/context.t See if context propagation works
-t/op/defins.t See if auto-insert of defined() works
-t/op/delete.t See if delete works
-t/op/die.t See if die works
-t/op/die_exit.t See if die and exit status interaction works
-t/op/do.t See if subroutines work
-t/op/each.t See if hash iterators work
-t/op/eval.t See if eval operator works
-t/op/exec.t See if exec and system work
-t/op/exists_sub.t See if exists(&sub) works
-t/op/exp.t See if math functions work
-t/op/fh.t See if filehandles work
-t/op/filetest.t See if file tests work
-t/op/flip.t See if range operator works
-t/op/fork.t See if fork works
-t/op/glob.t See if <*> works
-t/op/goto.t See if goto works
-t/op/goto_xs.t See if "goto &sub" works on XSUBs
-t/op/grent.t See if getgr*() functions work
-t/op/grep.t See if grep() and map() work
-t/op/groups.t See if $( works
-t/op/gv.t See if typeglobs work
-t/op/hashwarn.t See if warnings for bad hash assignments work
-t/op/inc.t See if inc/dec of integers near 32 bit limit work
-t/op/index.t See if index works
-t/op/int.t See if int works
-t/op/join.t See if join works
-t/op/length.t See if length works
-t/op/lex_assign.t See if ops involving lexicals or pad temps work
-t/op/lfs.t See if large files work for perlio
-t/op/list.t See if array lists work
-t/op/local.t See if local works
-t/op/lop.t See if logical operators work
-t/op/magic.t See if magic variables work
-t/op/method.t See if method calls work
-t/op/misc.t See if miscellaneous bugs have been fixed
-t/op/mkdir.t See if mkdir works
-t/op/my.t See if lexical scoping works
-t/op/my_stash.t See if my Package works
-t/op/nothr5005.t local @_ test which does not work under use5005threads
-t/op/numconvert.t See if accessing fields does not change numeric values
-t/op/oct.t See if oct and hex work
-t/op/ord.t See if ord works
-t/op/pack.t See if pack and unpack work
-t/op/pat.t See if esoteric patterns work
-t/op/pos.t See if pos works
-t/op/push.t See if push and pop work
-t/op/pwent.t See if getpw*() functions work
-t/op/quotemeta.t See if quotemeta works
-t/op/rand.t See if rand works
-t/op/range.t See if .. works
-t/op/re_tests Regular expressions for regexp.t
-t/op/read.t See if read() works
-t/op/readdir.t See if readdir() works
-t/op/recurse.t See if deep recursion works
-t/op/ref.t See if refs and objects work
-t/op/regexp.t See if regular expressions work
-t/op/regexp_noamp.t See if regular expressions work with optimizations
-t/op/regmesg.t See if one can get regular expression errors
-t/op/repeat.t See if x operator works
-t/op/reverse.t See if reverse operator works
-t/op/runlevel.t See if die() works from perl_call_*()
-t/op/sleep.t See if sleep works
-t/op/sort.t See if sort works
-t/op/splice.t See if splice works
-t/op/split.t See if split works
-t/op/sprintf.t See if sprintf works
-t/op/stat.t See if stat works
-t/op/study.t See if study works
-t/op/subst.t See if substitution works
-t/op/subst_amp.t See if $&-related substitution works
-t/op/subst_wamp.t See if substitution works with $& present
-t/op/substr.t See if substr works
-t/op/sysio.t See if sysread and syswrite work
-t/op/taint.t See if tainting works
-t/op/tie.t See if tie/untie functions work
-t/op/tiearray.t See if tie for arrays works
-t/op/tiehandle.t See if tie for handles works
-t/op/time.t See if time functions work
-t/op/tr.t See if tr works
-t/op/undef.t See if undef works
-t/op/universal.t See if UNIVERSAL class works
-t/op/unshift.t See if unshift works
-t/op/utf8decode.t See if UTF-8 decoding works
-t/op/vec.t See if vectors work
-t/op/ver.t See if v-strings and the %v format flag work
-t/op/wantarray.t See if wantarray works
-t/op/write.t See if write works
-t/pod/emptycmd.t Test empty pod directives
-t/pod/emptycmd.xr Expected results for emptycmd.t
-t/pod/find.t See if Pod::Find works
-t/pod/for.t Test =for directive
-t/pod/for.xr Expected results for for.t
-t/pod/headings.t Test =head directives
-t/pod/headings.xr Expected results for headings.t
-t/pod/include.t Test =include directive
-t/pod/include.xr Expected results for include.t
-t/pod/included.t Test =include directive
-t/pod/included.xr Expected results for included.t
-t/pod/lref.t Test L<...> sequences
-t/pod/lref.xr Expected results for lref.t
-t/pod/multiline_items.t Test multiline =items
-t/pod/multiline_items.xr Test multiline =items
-t/pod/nested_items.t Test nested =items
-t/pod/nested_items.xr Expected results for nested_items.t
-t/pod/nested_seqs.t Test nested interior sequences
-t/pod/nested_seqs.xr Expected results for nested_seqs.t
-t/pod/oneline_cmds.t Test single paragraph ==cmds
-t/pod/oneline_cmds.xr Expected results for oneline_cmds.t
-t/pod/pod2usage.t Test Pod::Usage
-t/pod/pod2usage.xr Expected results for pod2usage.t
-t/pod/poderrs.t Test POD errors
-t/pod/poderrs.xr Expected results for emptycmd.t
-t/pod/podselect.t Test Pod::Select
-t/pod/podselect.xr Expected results for podselect.t
-t/pod/special_seqs.t Test "special" interior sequences
-t/pod/special_seqs.xr Expected results for emptycmd.t
-t/pod/testcmp.pl Module to compare output against expected results
-t/pod/testp2pt.pl Module to test Pod::Text for a given file
-t/pod/testpchk.pl Module to test Pod::Checker for a given file
-t/pragma/constant.t See if compile-time constants work
-t/pragma/diagnostics.t See if diagnostics.pm works
-t/pragma/locale.t See if locale support works
-t/pragma/locale/latin1 Part of locale.t in Latin 1
-t/pragma/locale/utf8 Part of locale.t in UTF8
-t/pragma/overload.t See if operator overloading works
-t/pragma/strict-refs Tests of "use strict 'refs'" for strict.t
-t/pragma/strict-subs Tests of "use strict 'subs'" for strict.t
-t/pragma/strict-vars Tests of "use strict 'vars'" for strict.t
-t/pragma/strict.t See if strictures work
-t/pragma/sub_lval.t See if lvalue subroutines work
-t/pragma/subs.t See if subroutine pseudo-importation works
-t/pragma/utf8.t See if utf8 operations work
-t/pragma/warn/1global Tests of global warnings for warnings.t
-t/pragma/warn/2use Tests for "use warnings" for warnings.t
-t/pragma/warn/3both Tests for interaction of $^W and "use warnings"
-t/pragma/warn/4lint Tests for -W switch
-t/pragma/warn/5nolint Tests for -X switch
-t/pragma/warn/6default Tests default warnings
-t/pragma/warn/7fatal Tests fatal warnings
-t/pragma/warn/8signal Tests warnings + __WARN__ and __DIE__
-t/pragma/warn/9enabled Tests warnings
-t/pragma/warn/av Tests for av.c for warnings.t
-t/pragma/warn/doio Tests for doio.c for warnings.t
-t/pragma/warn/doop Tests for doop.c for warnings.t
-t/pragma/warn/gv Tests for gv.c for warnings.t
-t/pragma/warn/hv Tests for hv.c for warnings.t
-t/pragma/warn/malloc Tests for malloc.c for warnings.t
-t/pragma/warn/mg Tests for mg.c for warnings.t
-t/pragma/warn/op Tests for op.c for warnings.t
-t/pragma/warn/perl Tests for perl.c for warnings.t
-t/pragma/warn/perlio Tests for perlio.c for warnings.t
-t/pragma/warn/perly Tests for perly.y for warnings.t
-t/pragma/warn/pp Tests for pp.c for warnings.t
-t/pragma/warn/pp_ctl Tests for pp_ctl.c for warnings.t
-t/pragma/warn/pp_hot Tests for pp_hot.c for warnings.t
-t/pragma/warn/pp_sys Tests for pp_sys.c for warnings.t
-t/pragma/warn/regcomp Tests for regcomp.c for warnings.t
-t/pragma/warn/regexec Tests for regexec.c for warnings.t
-t/pragma/warn/run Tests for run.c for warnings.t
-t/pragma/warn/sv Tests for sv.c for warnings.t
-t/pragma/warn/taint Tests for taint.c for warnings.t
-t/pragma/warn/toke Tests for toke.c for warnings.t
-t/pragma/warn/universal Tests for universal.c for warnings.t
-t/pragma/warn/utf8 Tests for utf8.c for warnings.t
-t/pragma/warn/util Tests for util.c for warnings.t
-t/pragma/warnings.t See if warning controls work
-t/run/runenv.t Test if perl honors its environment variables.
-taint.c Tainting code
-thrdvar.h Per-thread variables
-thread.h Threading header
-toke.c The tokener
-universal.c The default UNIVERSAL package methods
-unixish.h Defines that are assumed on Unix
-utf8.c Unicode routines
-utf8.h Unicode header
-util.c Utility routines
-util.h Dummy header
-utils/Makefile Extract the utility scripts
-utils/c2ph.PL program to translate dbx stabs to perl
-utils/dprofpp.PL Perl code profile post-processor
-utils/h2ph.PL A thing to turn C .h files into perl .ph files
-utils/h2xs.PL Program to make .xs files from C header files
-utils/perlbug.PL A simple tool to submit a bug report
-utils/perlcc.PL Front-end for compiler
-utils/perldoc.PL A simple tool to find & display perl's documentation
-utils/pl2pm.PL A pl to pm translator
-utils/splain.PL Stand-alone version of diagnostics.pm
-vmesa/Makefile VM/ESA Makefile
-vmesa/vmesa.c VM/ESA-specific C code for Perl core
-vmesa/vmesaish.h VM/ESA-specific C header for Perl core
-vms/descrip_mms.template Template MM[SK] description file for build
-vms/ext/DCLsym/0README.txt ReadMe file for VMS::DCLsym
-vms/ext/DCLsym/DCLsym.pm Perl access to CLI symbols
-vms/ext/DCLsym/DCLsym.xs Perl access to CLI symbols
-vms/ext/DCLsym/Makefile.PL MakeMaker driver for VMS::DCLsym
-vms/ext/DCLsym/test.pl regression tests for VMS::DCLsym
-vms/ext/Filespec.pm VMS-Unix file syntax interconversion
-vms/ext/Stdio/0README.txt ReadMe file for VMS::Stdio
-vms/ext/Stdio/Makefile.PL MakeMaker driver for VMS::Stdio
-vms/ext/Stdio/Stdio.pm VMS options to stdio routines
-vms/ext/Stdio/Stdio.xs VMS options to stdio routines
-vms/ext/Stdio/test.pl regression tests for VMS::Stdio
-vms/ext/XSSymSet.pm manage linker symbols when building extensions
-vms/ext/filespec.t See if VMS::Filespec funtions work
-vms/ext/vmsish.pm Control VMS-specific behavior of Perl core
-vms/ext/vmsish.t Tests for vmsish.pm
-vms/gen_shrfls.pl generate options files and glue for shareable image
-vms/genconfig.pl retcon config.sh from config.h
-vms/genopt.com hack to write options files in case of broken makes
-vms/make_command.com record MM[SK] command used to build Perl
-vms/mms2make.pl convert descrip.mms to make syntax
-vms/munchconfig.c performs shell $var substitution for VMS
-vms/myconfig.com record local configuration info for bug report
-vms/perlvms.pod VMS-specific additions to Perl documentation
-vms/perly_c.vms perly.c with fixed declarations for global syms
-vms/perly_h.vms perly.h with fixed declarations for global syms
-vms/sockadapt.c glue for SockshShr socket support
-vms/sockadapt.h glue for SockshShr socket support
-vms/test.com DCL driver for regression tests
-vms/vms.c VMS-specific C code for Perl core
-vms/vms_yfix.pl convert Unix perly.[ch] to VMS perly_[ch].vms
-vms/vmsish.h VMS-specific C header for Perl core
-vms/vmspipe.com VMS-specific piped command helper script
-vms/writemain.pl Generate perlmain.c from miniperlmain.c+extensions
-vos/Changes Changes made to port Perl to the VOS operating system
-vos/build.cm VOS command macro to build Perl
-vos/compile_perl.cm VOS command macro to build multiple version of Perl
-vos/config.alpha.def definitions used by config.pl
-vos/config.alpha.h config.h for use with alpha VOS POSIX.1 support
-vos/config.ga.def definitions used by config.pl
-vos/config.ga.h config.h for use with generally-available VOS POSIX.1 support
-vos/config.pl script to convert a config_h.SH to a config.h
-vos/configure_perl.cm VOS command macro to configure perl before building
-vos/install_perl.cm VOS command macro to install perl after building
-vos/perl.bind VOS bind control file
-vos/test_vos_dummies.c Test program for "vos_dummies.c"
-vos/vos_dummies.c Wrappers to soak up undefined functions
-vos/vosish.h VOS-specific header file
-warnings.h The warning numbers
-warnings.pl Program to write warnings.h and lib/warnings.pm
-win32/Makefile Win32 makefile for NMAKE (Visual C++ build)
-win32/bin/exetype.pl Set executable type to CONSOLE or WINDOWS
-win32/bin/perlglob.pl Win32 globbing
-win32/bin/pl2bat.pl wrap perl scripts into batch files
-win32/bin/runperl.pl run perl script via batch file namesake
-win32/bin/search.pl Win32 port
-win32/config.bc Win32 base line config.sh (Borland C++ build)
-win32/config.gc Win32 base line config.sh (mingw32/gcc build)
-win32/config.vc Win32 base line config.sh (Visual C++ build)
-win32/config_H.bc Win32 config header (Borland C++ build)
-win32/config_H.gc Win32 config header (GNU build)?
-win32/config_H.vc Win32 config header (Visual C++ build)
-win32/config_h.PL Perl code to convert Win32 config.sh to config.h
-win32/config_sh.PL Perl code to update Win32 config.sh from Makefile
-win32/des_fcrypt.patch Win32 port
-win32/dl_win32.xs Win32 port
-win32/genmk95.pl Perl code to generate command.com-usable makefile.95
-win32/include/arpa/inet.h Win32 port
-win32/include/dirent.h Win32 port
-win32/include/netdb.h Win32 port
-win32/include/sys/socket.h Win32 port
-win32/makefile.mk Win32 makefile for DMAKE (BC++, VC++ builds)
-win32/perlglob.c Win32 port
-win32/perlhost.h Perl "host" implementation
-win32/perllib.c Win32 port
-win32/pod.mak Win32 port
-win32/runperl.c Win32 port
-win32/sncfnmcs.pl Win32 port
-win32/splittree.pl Win32 port
-win32/vdir.h Perl "host" virtual directory manager
-win32/vmem.h Perl "host" memory manager
-win32/win32.c Win32 port
-win32/win32.h Win32 port
-win32/win32iop.h Win32 port
-win32/win32sck.c Win32 port
-win32/win32thread.c Win32 functions for threads
-win32/win32thread.h Win32 port mapping to threads
-writemain.SH Generate perlmain.c from miniperlmain.c+extensions
-x2p/EXTERN.h Same as above
-x2p/INTERN.h Same as above
-x2p/Makefile.SH Precursor to Makefile
-x2p/a2p.c Output of a2p.y run through byacc
-x2p/a2p.h Global declarations
-x2p/a2p.pod Pod for awk to perl translator
-x2p/a2p.y A yacc grammer for awk
-x2p/a2py.c Awk compiler, sort of
-x2p/cflags.SH A script that emits C compilation flags per file
-x2p/find2perl.PL A find to perl translator
-x2p/hash.c Hashes again
-x2p/hash.h Public declarations for the above
-x2p/proto.h Dummy header
-x2p/s2p.PL Sed to perl translator
-x2p/str.c String handling package
-x2p/str.h Public declarations for the above
-x2p/util.c Utility routines
-x2p/util.h Public declarations for the above
-x2p/walk.c Parse tree walker
-xsutils.c Additional bundled package methods not in UNIVERSAL::
diff --git a/contrib/perl5/Makefile.SH b/contrib/perl5/Makefile.SH
deleted file mode 100755
index ac5ade4..0000000
--- a/contrib/perl5/Makefile.SH
+++ /dev/null
@@ -1,1009 +0,0 @@
-#! /bin/sh
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-
-case "$d_dosuid" in
-*define*) suidperl='suidperl' ;;
-*) suidperl='';;
-esac
-
-linklibperl='$(LIBPERL)'
-shrpldflags='$(LDDLFLAGS)'
-ldlibpth=''
-DPERL_EXTERNAL_GLOB='-DPERL_EXTERNAL_GLOB'
-case "$useshrplib" in
-true)
- # Prefix all runs of 'miniperl' and 'perl' with
- # $ldlibpth so that ./perl finds *this* shared libperl.
- case "$LD_LIBRARY_PATH" in
- '')
- ldlibpth="LD_LIBRARY_PATH=`pwd`";;
- *)
- ldlibpth="LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}";;
- esac
-
- pldlflags="$cccdlflags"
- case "${osname}${osvers}" in
- next4*)
- ld=libtool
- lddlflags="-dynamic -undefined warning -framework System \
- -compatibility_version 1 -current_version $patchlevel \
- -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@"
- ;;
- rhapsody*|darwin*)
- shrpldflags="${ldflags} -dynamiclib \
- -compatibility_version 1 \
- -current_version \
- ${api_version}.${api_subversion} \
- -image_base 0x4be00000 \
- -install_name \$(shrpdir)/\$@"
- ;;
- cygwin*)
- linklibperl="-lperl"
- ;;
- sunos*)
- linklibperl="-lperl"
- ;;
- netbsd*|freebsd[234]*|openbsd*)
- linklibperl="-L. -lperl"
- ;;
- aix*)
- shrpldflags="-H512 -T512 -bhalt:4 -bM:SRE -bE:perl.exp"
- case "$osvers" in
- 3*) shrpldflags="$shrpldflags -e _nostart"
- ;;
- *) shrpldflags="$shrpldflags -b noentry"
- ;;
- esac
- shrpldflags="$shrpldflags $ldflags $perllibs $cryptlib"
- linklibperl="-L $archlibexp/CORE -L `pwd | sed 's/\/UU$//'` -lperl"
- ;;
- hpux*)
- linklibperl="-L `pwd | sed 's/\/UU$//'` -Wl,+s -Wl,+b$archlibexp/CORE -lperl"
- ;;
- os390*)
- shrpldflags='-W l,dll'
- linklibperl='libperl.x'
- DPERL_EXTERNAL_GLOB=''
- ;;
- esac
- case "$ldlibpthname" in
- '') ;;
- *)
- case "$osname" in
- os2)
- ldlibpth=''
- ;;
- *)
- eval "ldlibpth=\"$ldlibpthname=`pwd`:\$$ldlibpthname\""
- ;;
- esac
- # Strip off any trailing :'s
- ldlibpth=`echo $ldlibpth | sed 's/:*$//'`
- ;;
- esac
- ;;
-*) pldlflags=''
- ;;
-esac
-
-: Prepare dependency lists for Makefile.
-dynamic_list=' '
-for f in $dynamic_ext; do
- : the dependency named here will never exist
- base=`echo "$f" | sed 's/.*\///'`
- dynamic_list="$dynamic_list lib/auto/$f/$base.$dlext"
-done
-
-static_list=' '
-for f in $static_ext; do
- base=`echo "$f" | sed 's/.*\///'`
- static_list="$static_list lib/auto/$f/$base\$(LIB_EXT)"
-done
-
-nonxs_list=' '
-for f in $nonxs_ext; do
- base=`echo "$f" | sed 's/.*\///'`
- nonxs_list="$nonxs_list ext/$f/pm_to_blib"
-done
-
-# Handle the usage of different yaccs in posix-bc (During Configure we
-# us yacc for perly.y and byacc for a2p.y. The makefiles must use the
-# same configuration for run_byacc!):
-case "$osname" in
- posix-bc)
- byacc=$yacc
- ;;
-esac
-
-# Handle the usage of different yaccs in posix-bc (During Configure we
-# us yacc for perly.y and byacc for a2p.y. The makefiles must use the
-# same configuration for run_byacc!):
-case "$osname" in
- posix-bc)
- byacc=$yacc
- ;;
-esac
-
-echo "Extracting Makefile (with variable substitutions)"
-$spitshell >Makefile <<!GROK!THIS!
-# Makefile.SH
-# This file is derived from Makefile.SH. Any changes made here will
-# be lost the next time you run Configure.
-# Makefile is used to generate $firstmakefile. The only difference
-# is that $firstmakefile has the dependencies filled in at the end.
-#
-#
-# I now supply perly.c with the kits, so don't remake perly.c without byacc
-BYACC = $byacc
-CC = $cc
-LD = $ld
-
-LDFLAGS = $ldflags
-CLDFLAGS = $ldflags
-
-mallocsrc = $mallocsrc
-mallocobj = $mallocobj
-LNS = $lns
-# NOTE: some systems don't grok "cp -f". XXX Configure test needed?
-CPS = $cp
-RMS = rm -f
-ranlib = $ranlib
-
-# The following are mentioned only to make metaconfig include the
-# appropriate questions in Configure. If you want to change these,
-# edit config.sh instead, or specify --man1dir=/wherever on
-# installman commandline.
-bin = $installbin
-scriptdir = $scriptdir
-shrpdir = $archlibexp/CORE
-privlib = $installprivlib
-man1dir = $man1dir
-man1ext = $man1ext
-man3dir = $man3dir
-man3ext = $man3ext
-
-# The following are used to build and install shared libraries for
-# dynamic loading.
-LDDLFLAGS = $lddlflags
-SHRPLDFLAGS = $shrpldflags
-CCDLFLAGS = $ccdlflags
-DLSUFFIX = .$dlext
-PLDLFLAGS = $pldlflags
-LIBPERL = $libperl
-LLIBPERL= $linklibperl
-SHRPENV = $shrpenv
-
-# The following is used to include the current directory in
-# the dynamic loader path you are building a shared libperl.
-LDLIBPTH = $ldlibpth
-
-dynamic_ext = $dynamic_list
-static_ext = $static_list
-nonxs_ext = $nonxs_list
-ext = \$(dynamic_ext) \$(static_ext) \$(nonxs_ext)
-DYNALOADER = lib/auto/DynaLoader/DynaLoader\$(LIB_EXT)
-
-libs = $perllibs $cryptlib
-
-public = perl $suidperl utilities translators
-
-shellflags = $shellflags
-
-# This is set to MAKE=$make if your $make command doesn't
-# do it for you.
-$make_set_make
-
-# These variables may need to be manually set for non-Unix systems.
-AR = $full_ar
-EXE_EXT = $_exe
-LIB_EXT = $_a
-OBJ_EXT = $_o
-PATH_SEP = $p_
-
-FIRSTMAKEFILE = $firstmakefile
-
-# Any special object files needed by this architecture, e.g. os2/os2.obj
-ARCHOBJS = $archobjs
-
-.SUFFIXES: .c \$(OBJ_EXT)
-
-# grrr
-SHELL = $sh
-
-# how to tr(anslate) newlines
-TRNL = '$trnl'
-
-!GROK!THIS!
-# not used by Makefile but by installperl;
-# mentioned here so that metaconfig picks these up
-# $installusrbinperl
-# $versiononly
-
-
-## In the following dollars and backticks do not need the extra backslash.
-$spitshell >>Makefile <<'!NO!SUBS!'
-
-CCCMD = `sh $(shellflags) cflags $(LIBPERL) $@`
-
-private = preplibrary lib/ExtUtils/Miniperl.pm lib/Config.pm
-
-# Files to be built with variable substitution before miniperl
-# is available.
-sh = Makefile.SH cflags.SH config_h.SH makeaperl.SH makedepend.SH \
- makedir.SH myconfig.SH writemain.SH pod/Makefile.SH
-
-shextract = Makefile cflags config.h makeaperl makedepend \
- makedir myconfig writemain pod/Makefile
-
-# Files to be built with variable substitution after miniperl is
-# available. Dependencies handled manually below (for now).
-
-pl = pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL \
- pod/pod2usage.PL pod/podchecker.PL pod/podselect.PL \
- pod/buildtoc.PL
-
-plextract = pod/pod2html pod/pod2latex pod/pod2man pod/pod2text \
- pod/pod2usage pod/podchecker pod/podselect \
- pod/buildtoc
-
-addedbyconf = UU $(shextract) $(plextract) pstruct
-
-h1 = EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h dosish.h
-h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h
-h3 = opcode.h patchlevel.h perl.h perlapi.h perly.h pp.h proto.h regcomp.h
-h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h
-h5 = utf8.h warnings.h
-h = $(h1) $(h2) $(h3) $(h4) $(h5)
-
-c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c
-c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c
-c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c
-c4 = globals.c perlio.c perlapi.c
-
-c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c
-
-obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT)
-obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
-obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT)
-
-obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
-
-# Once perl has been Configure'd and built ok you build different
-# perl variants (Debugging, Embedded, Multiplicity etc) by saying:
-# make clean; make LIBPERL=libperl<type>.a
-# where <type> is some combination of 'd' and(or) 'e' or 'm'.
-# See cflags to understand how this works.
-#
-# This mechanism is getting clunky and might not even work any more.
-# EMBEDDING is on by default, and MULTIPLICITY doesn't work.
-#
-
-lintflags = -hbvxac
-
-.c$(OBJ_EXT):
- $(CCCMD) $(PLDLFLAGS) $*.c
-
-all: $(FIRSTMAKEFILE) miniperl extra.pods $(private) $(public) $(dynamic_ext) $(nonxs_ext)
- @echo " ";
- @echo " Everything is up to date. 'make test' to run test suite."
-
-compile: all
- echo "testing compilation" > testcompile;
- cd utils; $(MAKE) compile;
- cd x2p; $(MAKE) compile;
- cd pod; $(MAKE) compile;
-
-translators: miniperl lib/Config.pm FORCE
- @echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all
-
-utilities: miniperl lib/Config.pm $(plextract) FORCE
- @echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all
-
-
-# This is now done by installman only if you actually want the man pages.
-# @echo " "; echo " Making docs"; cd pod; $(MAKE) all;
-
-# Phony target to force checking subdirectories.
-# Apparently some makes require an action for the FORCE target.
-FORCE:
- @sh -c true
-!NO!SUBS!
-
-$spitshell >>Makefile <<!GROK!THIS!
-opmini\$(OBJ_EXT): op.c config.h
- \$(RMS) opmini.c
- \$(CPS) op.c opmini.c
- \$(CCCMD) \$(PLDLFLAGS) $DPERL_EXTERNAL_GLOB opmini.c
- \$(RMS) opmini.c
-
-!GROK!THIS!
-$spitshell >>Makefile <<'!NO!SUBS!'
-miniperlmain$(OBJ_EXT): miniperlmain.c patchlevel.h
- $(CCCMD) $(PLDLFLAGS) $*.c
-
-perlmain.c: miniperlmain.c config.sh $(FIRSTMAKEFILE)
- sh writemain $(DYNALOADER) $(static_ext) > writemain.tmp
- sh mv-if-diff writemain.tmp perlmain.c
-
-perlmain$(OBJ_EXT): perlmain.c
- $(CCCMD) $(PLDLFLAGS) $*.c
-
-# The file ext.libs is a list of libraries that must be linked in
-# for static extensions, e.g. -lm -lgdbm, etc. The individual
-# static extension Makefile's add to it.
-ext.libs: $(static_ext)
- -@test -f ext.libs || touch ext.libs
-
-!NO!SUBS!
-
-# How to build libperl. This is still rather convoluted.
-# Load up custom Makefile.SH fragment for shared loading and executables:
-case "$osname" in
-*)
- Makefile_s="$osname/Makefile.SHs"
- ;;
-esac
-
-case "$osname" in
-aix)
- $spitshell >>Makefile <<!GROK!THIS!
-LIBS = $perllibs
-# In AIX we need to change this for building Perl itself from
-# its earlier definition (which is for building external
-# extensions *after* Perl has been built and installed)
-CCDLFLAGS = `echo $ccdlflags|sed -e 's@-bE:.*/perl\.exp@-bE:perl.exp@'`
-
-!GROK!THIS!
- case "$useshrplib" in
- define|true|[yY]*)
- $spitshell >>Makefile <<'!NO!SUBS!'
-
-LIBPERL_NONSHR = libperl_nonshr$(LIB_EXT)
-MINIPERL_NONSHR = miniperl_nonshr$(EXE_EXT)
-
-$(LIBPERL_NONSHR): perl$(OBJ_EXT) $(obj)
- $(RMS) $(LIBPERL_NONSHR)
- $(AR) rcu $(LIBPERL_NONSHR) perl$(OBJ_EXT) $(obj)
-
-$(MINIPERL_NONSHR): $(LIBPERL_NONSHR) miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT)
- $(CC) $(LDFLAGS) -o $(MINIPERL_NONSHR) miniperlmain$(OBJ_EXT) \
- opmini$(OBJ_EXT) $(LIBPERL_NONSHR) $(LIBS)
-
-MINIPERLEXP = $(MINIPERL_NONSHR)
-
-LIBPERLEXPORT = perl.exp
-
-!NO!SUBS!
-
- ;;
- *)
- $spitshell >>Makefile <<'!NO!SUBS!'
-MINIPERLEXP = miniperl$(EXE_EXT)
-
-PERLEXPORT = perl.exp
-
-!NO!SUBS!
- ;;
- esac
- $spitshell >>Makefile <<'!NO!SUBS!'
-perl.exp: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH)
- ./$(MINIPERLEXP) makedef.pl PLATFORM=aix | sort -u | sort -f > perl.exp.tmp
- sh mv-if-diff perl.exp.tmp perl.exp
-
-!NO!SUBS!
- ;;
-os2)
- $spitshell >>Makefile <<'!NO!SUBS!'
-MINIPERLEXP = miniperl
-
-perl5.def: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH) miniperl.map
- ./$(MINIPERLEXP) makedef.pl PLATFORM=os2 -DPERL_DLL=$(PERL_DLL) > perl.exp.tmp
- sh mv-if-diff perl.exp.tmp perl5.def
-
-!NO!SUBS!
- ;;
-esac
-
-if test -r $Makefile_s ; then
- . $Makefile_s
- $spitshell >>Makefile <<!GROK!THIS!
-
-Makefile: $Makefile_s
-!GROK!THIS!
-else
- $spitshell >>Makefile <<'!NO!SUBS!'
-$(LIBPERL): $& perl$(OBJ_EXT) $(obj) $(LIBPERLEXPORT)
-!NO!SUBS!
- case "$useshrplib" in
- true)
- $spitshell >>Makefile <<'!NO!SUBS!'
- $(LD) -o $@ $(SHRPLDFLAGS) perl$(OBJ_EXT) $(obj)
-!NO!SUBS!
- case "$osname" in
- aix)
- $spitshell >>Makefile <<'!NO!SUBS!'
- rm -f libperl$(OBJ_EXT)
- mv $@ libperl$(OBJ_EXT)
- $(AR) qv $(LIBPERL) libperl$(OBJ_EXT)
-!NO!SUBS!
- ;;
- esac
- ;;
- *)
- $spitshell >>Makefile <<'!NO!SUBS!'
- rm -f $(LIBPERL)
- $(AR) rcu $(LIBPERL) perl$(OBJ_EXT) $(obj)
- @$(ranlib) $(LIBPERL)
-!NO!SUBS!
- ;;
- esac
- $spitshell >>Makefile <<'!NO!SUBS!'
-
-# How to build executables.
-
-# The $& notation tells Sequent machines that it can do a parallel make,
-# and is harmless otherwise.
-# The miniperl -w -MExporter line is a basic cheap test to catch errors
-# before make goes on to run preplibrary and then MakeMaker on extensions.
-# This is very handy because later errors are often caused by miniperl
-# build problems but that's not obvious to the novice.
-# The Module used here must not depend on Config or any extensions.
-
-!NO!SUBS!
-
- case "${osname}${osvers}" in
- next4*)
- $spitshell >>Makefile <<'!NO!SUBS!'
-miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
- $(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
-!NO!SUBS!
- ;;
- aix*)
- $spitshell >>Makefile <<'!NO!SUBS!'
-miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
- $(CC) -o miniperl $(CLDFLAGS) \
- `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
-!NO!SUBS!
- ;;
- *)
- $spitshell >>Makefile <<'!NO!SUBS!'
-miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
- $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl \
- miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs)
- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
-!NO!SUBS!
- ;;
- esac
-
- $spitshell >>Makefile <<'!NO!SUBS!'
-
-perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
- $(SHRPENV) $(LDLIBPTH) $(CC) -o perl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
-
-pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
- $(SHRPENV) $(LDLIBPTH) purify $(CC) -o pureperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
-
-purecovperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
- $(SHRPENV) $(LDLIBPTH) purecov $(CC) -o purecovperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
-
-quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
- $(SHRPENV) $(LDLIBPTH) quantify $(CC) -o quantperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
-
-# This version, if specified in Configure, does ONLY those scripts which need
-# set-id emulation. Suidperl must be setuid root. It contains the "taint"
-# checks as well as the special code to validate that the script in question
-# has been invoked correctly.
-
-suidperl: $& sperl$(OBJ_EXT) perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
- $(SHRPENV) $(LDLIBPTH) $(CC) -o suidperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
-
-!NO!SUBS!
-
-fi
-
-$spitshell >>Makefile <<'!NO!SUBS!'
-
-sperl$(OBJ_EXT): perl.c $(h)
- $(RMS) sperl.c
- $(LNS) perl.c sperl.c
- $(CCCMD) -DIAMSUID sperl.c
- $(RMS) sperl.c
-
-# We have to call our ./makedir because Ultrix 4.3 make can't handle the line
-# test -d lib/auto || mkdir lib/auto
-#
-preplibrary: miniperl lib/Config.pm
- @sh ./makedir lib/auto
- @echo " AutoSplitting perl library"
- $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
- autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm
-
-# Take care to avoid modifying lib/Config.pm without reason
-# (If trying to create a new port and having problems with the configpm script,
-# try 'make minitest' and/or commenting out the tests at the end of configpm.)
-lib/Config.pm: config.sh miniperl configpm lib/re.pm
- $(LDLIBPTH) ./miniperl configpm configpm.tmp
- sh mv-if-diff configpm.tmp $@
-
-lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl minimod.pl lib/Config.pm
- $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp
- sh mv-if-diff minimod.tmp $@
-
-lib/re.pm: ext/re/re.pm
- rm -f $@
- cat ext/re/re.pm > $@
-
-$(plextract): miniperl lib/Config.pm
- $(LDLIBPTH) ./miniperl -Ilib $@.PL
-
-extra.pods: miniperl
- -@test -f extra.pods && rm -f `cat extra.pods`
- -@rm -f extra.pods
- -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \
- nx=`echo $$x | sed -e "s/README\.//"`; \
- cd pod ; $(LNS) ../$$x "perl"$$nx".pod" ; cd .. ; \
- echo "pod/perl"$$nx".pod" >> extra.pods ; \
- done
- -@test -f vms/perlvms.pod && cd pod && $(LNS) ../vms/perlvms.pod perlvms.pod && cd .. && echo "pod/perlvms.pod" >> extra.pods
-
-install-strip:
- $(MAKE) STRIPFLAGS=-s install
-
-install:
- $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS)
-
-install-verbose:
- $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-V
-
-install-silent:
- $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-S
-
-no-install:
- $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-n
-
-install.perl: all installperl
- if [ -n "$(COMPILE)" ]; \
- then \
- cd utils; $(MAKE) compile; \
- cd ../x2p; $(MAKE) compile; \
- cd ../pod; $(MAKE) compile; \
- else :; \
- fi
- $(LDLIBPTH) ./perl installperl $(INSTALLFLAGS) $(STRIPFLAGS)
-
-install.man: all installman
- $(LDLIBPTH) ./perl installman $(INSTALLFLAGS)
-
-# XXX Experimental. Hardwired values, but useful for testing.
-# Eventually Configure could ask for some of these values.
-install.html: all installhtml
- -@test -f README.vms && cd vms && $(LNS) ../README.vms README_vms.pod && cd ..
- $(LDLIBPTH) ./perl installhtml \
- --podroot=. --podpath=. --recurse \
- --htmldir=$(privlib)/html \
- --htmlroot=$(privlib)/html \
- --splithead=pod/perlipc \
- --splititem=pod/perlfunc \
- --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \
- --verbose
-
-
-# I now supply perly.c with the kits, so the following section is
-# used only if you force byacc to run by saying
-# make run_byacc
-# Since we patch up the byacc output, the perly.fixer script needs
-# to run with precisely the same version of byacc as I use. You
-# normally shouldn't remake perly.[ch].
-
-run_byacc: FORCE
- $(BYACC) -d perly.y
- -chmod 664 perly.c perly.h
- sh $(shellflags) ./perly.fixer y.tab.c perly.c
- sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
- -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
- sed -e '/^extern YYSTYPE yy/D' y.tab.h >yh.tmp && mv yh.tmp y.tab.h
- cmp -s y.tab.h perly.h && rm -f y.tab.h || mv y.tab.h perly.h
- chmod 664 vms/perly_c.vms vms/perly_h.vms
- perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
-
-# We don't want to regenerate perly.c and perly.h, but they might
-# appear out-of-date after a patch is applied or a new distribution is
-# made.
-perly.c: perly.y
- -@sh -c true
-
-perly.h: perly.y
- -@sh -c true
-
-# No compat3.sym here since and including the 5.004_50.
-# No interp.sym since 5.005_03.
-SYM = global.sym globvar.sym perlio.sym pp.sym
-
-SYMH = perlvars.h intrpvar.h thrdvar.h
-
-CHMOD_W = chmod +w
-
-# The following files are generated automatically
-# keywords.pl: keywords.h
-# opcode.pl: opcode.h opnames.h pp_proto.h pp.sym
-# [* embed.pl needs pp.sym generated by opcode.pl! *]
-# embed.pl: proto.h embed.h embedvar.h global.sym objXSUB.h
-# perlapi.h perlapi.c pod/perlintern.pod
-# pod/perlapi.pod
-# bytecode.pl: ext/ByteLoader/byterun.h ext/ByteLoader/byterun.c
-# ext/B/B/Asmdata.pm
-# regcomp.pl: regnodes.h
-# warnings.pl: warnings.h lib/warnings.pm
-# The correct versions should be already supplied with the perl kit,
-# in case you don't have perl available.
-# To force them to be regenerated, type
-# make regen_headers
-
-AUTOGEN_FILES = keywords.h opcode.h opnames.h pp_proto.h pp.sym proto.h \
- embed.h embedvar.h global.sym \
- pod/perlintern.pod pod/perlapi.pod \
- objXSUB.h perlapi.h perlapi.c ext/ByteLoader/byterun.h \
- ext/ByteLoader/byterun.c ext/B/B/Asmdata.pm regnodes.h \
- warnings.h lib/warnings.pm \
- vms/perly_c.vms vms/perly_h.vms
-
-regen_headers: FORCE
- -$(CHMOD_W) $(AUTOGEN_FILES)
- -perl keywords.pl
- -perl opcode.pl
- -perl embed.pl
- -perl bytecode.pl
- -perl regcomp.pl
- -perl warnings.pl
-
-regen_pods: FORCE
- -cd pod; $(LDLIBPTH) make regen_pods
-
-regen_vms: FORCE
- -perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
-
-regen_all: regen_headers regen_pods regen_vms
-
-# Extensions:
-# Names added to $(dynamic_ext) or $(static_ext) or $(nonxs_ext) will
-# automatically get built. There should ordinarily be no need to change
-# any of this part of makefile.
-#
-# The dummy dependency is a place holder in case $(dynamic_ext) or
-# $(static_ext) is empty.
-#
-# DynaLoader may be needed for extensions that use Makefile.PL.
-
-$(DYNALOADER): miniperl preplibrary FORCE
- @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-d_dummy $(dynamic_ext): miniperl preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-s_dummy $(static_ext): miniperl preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-n_dummy $(nonxs_ext): miniperl preplibrary $(DYNALOADER) FORCE
- @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-
-clean: _tidy _mopup
-
-realclean: _realcleaner _mopup
- @echo "Note that make realclean does not delete config.sh or Policy.sh"
-
-_clobber:
- rm -f config.sh cppstdin Policy.sh
-
-clobber: _realcleaner _mopup _clobber
-
-distclean: clobber
-
-# Like distclean but also removes emacs backups and *.orig.
-veryclean: _verycleaner _mopup _clobber
- -@rm -f Obsolete Wanted
-
-# Do not 'make _mopup' directly.
-_mopup:
- rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c
- -@test -f extra.pods && rm -f `cat extra.pods`
- -@test -f vms/README_vms.pod && rm -f vms/README_vms.pod
- -rm -f perl.exp ext.libs extra.pods opmini.o
- -rm -f perl.export perl.dll perl.libexp perl.map perl.def
- -rm -f perl.loadmap miniperl.loadmap perl.prelmap miniperl.prelmap
- rm -f perl suidperl miniperl $(LIBPERL) libperl.* microperl
-
-# Do not 'make _tidy' directly.
-_tidy:
- -cd pod; $(LDLIBPTH) $(MAKE) clean
- -cd utils; $(LDLIBPTH) $(MAKE) clean
- -cd x2p; $(LDLIBPTH) $(MAKE) clean
- -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \
- $(LDLIBPTH) sh ext/util/make_ext clean $$x MAKE=$(MAKE) ; \
- done
- rm -f testcompile compilelog
-
-_cleaner1:
- -cd os2; rm -f Makefile
- -cd pod; $(LDLIBPTH) $(MAKE) $(CLEAN)
- -cd utils; $(LDLIBPTH) $(MAKE) $(CLEAN)
- -cd x2p; $(LDLIBPTH) $(MAKE) $(CLEAN)
- -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \
- $(LDLIBPTH) sh ext/util/make_ext $(CLEAN) $$x MAKE=$(MAKE) ; \
- done
-
-_cleaner2:
- rm -f core core.*perl.*.? *perl.core t/core t/core.perl.*.? t/*perl.core t/misctmp* t/forktmp* t/tmp* t/c t/perl t/rantests .?*.c so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR)
- rm -rf $(addedbyconf)
- rm -f $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old
- rm -f $(private)
- rm -rf lib/auto
- rm -f lib/.exists lib/*/.exists
- rm -f h2ph.man pstruct
- rm -rf .config
- rm -f testcompile compilelog
- -rmdir lib/B lib/Data lib/IO/Socket lib/IO lib/Sys lib/Thread
-
-_realcleaner:
- @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=realclean
- @$(LDLIBPTH) $(MAKE) _cleaner2
-
-_verycleaner:
- @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=veryclean
- @$(LDLIBPTH) $(MAKE) _cleaner2
- -rm -f *~ *.orig */*~ */*.orig */*/*~ */*/*.orig
-
-# The following lint has practically everything turned on. Unfortunately,
-# you have to wade through a lot of mumbo jumbo that can't be suppressed.
-# If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message
-# for that spot.
-
-lint: $(c)
- lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz
-
-# Need to unset during recursion to go out of loop.
-# The README below ensures that the dependency list is never empty and
-# that when MAKEDEPEND is empty $(FIRSTMAKEFILE) doesn't need rebuilding.
-
-MAKEDEPEND = Makefile makedepend
-
-$(FIRSTMAKEFILE): README $(MAKEDEPEND)
- $(MAKE) depend MAKEDEPEND=
-
-config.h: config_h.SH config.sh
- $(SHELL) config_h.SH
-
-# When done, touch perlmain.c so that it doesn't get remade each time.
-depend: makedepend
- sh ./makedepend MAKE=$(MAKE)
- - test -s perlmain.c && touch perlmain.c
- cd x2p; $(MAKE) depend
-
-# Cannot postpone this until $firstmakefile is ready ;-)
-makedepend: makedepend.SH config.sh
- sh ./makedepend.SH
-
-# Cannot delegate rebuilding of t/perl to make to allow interlaced
-# test and minitest
-test-prep: miniperl perl preplibrary utilities $(dynamic_ext) $(nonxs_ext) $(TEST_PERL_DLL)
- cd t && (rm -f perl$(EXE_EXT); $(LNS) ../perl$(EXE_EXT) perl$(EXE_EXT))
-
-# Second branch is for testing without a tty or controling terminal.
-# See t/op/stat.t
-test check: test-prep
- if (true </dev/tty) >/dev/null 2>&1; then \
- cd t && $(LDLIBPTH) ./perl TEST </dev/tty; \
- else \
- cd t && PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) ./perl TEST; \
- fi
- @echo "Ran tests" > t/rantests
-
-utest ucheck: test-prep
- if (true </dev/tty) >/dev/null 2>&1; then \
- cd t && $(LDLIBPTH) ./perl UTEST </dev/tty; \
- else \
- cd t && PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) ./perl UTEST; \
- fi
-
-# For testing without a tty or controling terminal. See t/op/stat.t
-test-notty: test-prep
- cd t && PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) ./perl TEST
-
-# Can't depend on lib/Config.pm because that might be where miniperl
-# is crashing.
-minitest: miniperl lib/re.pm
- @echo "You may see some irrelevant test failures if you have been unable"
- @echo "to build lib/Config.pm."
- - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \
- && $(LDLIBPTH) ./perl TEST base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t pragma/*.t </dev/tty
-
-# Handy way to run perlbug -ok without having to install and run the
-# installed perlbug. We don't re-run the tests here - we trust the user.
-# Please *don't* use this unless all tests pass.
-# If you want to report test failures, use "make nok" instead.
-ok: utilities
- $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)'
-
-okfile: utilities
- $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F perl.ok
-
-oknack: utilities
- $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -A
-
-okfilenack: utilities
- $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F perl.ok -A
-
-nok: utilities
- $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)'
-
-nokfile: utilities
- $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -F perl.nok
-
-noknack: utilities
- $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -A
-
-nokfilenack: utilities
- $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -F perl.nok -A
-
-clist: $(c)
- echo $(c) | tr ' ' $(TRNL) >.clist
-
-hlist: $(h)
- echo $(h) | tr ' ' $(TRNL) >.hlist
-
-shlist: $(sh)
- echo $(sh) | tr ' ' $(TRNL) >.shlist
-
-pllist: $(pl)
- echo $(pl) | tr ' ' $(TRNL) >.pllist
-
-Makefile: Makefile.SH ./config.sh
- $(SHELL) Makefile.SH
-
-distcheck: FORCE
- perl '-MExtUtils::Manifest=&fullcheck' -e 'fullcheck()'
-
-elc: emacs/cperl-mode.elc
-
-emacs/cperl-mode.elc: emacs/cperl-mode.el
- -cd emacs; emacs -batch -q -no-site-file -f batch-byte-compile cperl-mode.el
-
-etags: TAGS
-
-TAGS: emacs/cperl-mode.elc
- sh emacs/ptags
-
-ctags: tags
-
-# Let's hope make will not go into an infinite loop on case-unsensitive systems
-# This may also fail if . is in the head of the path, since perl will
-# require -Ilib
-tags: TAGS
- perl emacs/e2ctags.pl TAGS > tags
-
-# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
-# If this runs make out of memory, delete /usr/include lines.
-!NO!SUBS!
-
-$eunicefix Makefile
-case `pwd` in
-*SH)
- $rm -f ../Makefile
- $ln Makefile ../Makefile
- ;;
-esac
-$rm -f $firstmakefile
-
-# Now do any special processing required before building.
-
-case "$ebcdic" in
-$define)
- xxx=''
- echo "This is an EBCDIC system, checking if any parser files need regenerating." >&4
-case "$osname" in
-os390|posix-bc)
- rm -f y.tab.c y.tab.h
- # yacc must be a reentrant ("pure") Bison in BS2000 Posix!
- yacc -d perly.y >/dev/null 2>&1
- if cmp -s y.tab.c perly.c; then
- rm -f y.tab.c
- else
- echo "perly.y -> perly.c" >&2
- mv -f y.tab.c perly.c
- chmod u+w perly.c
- sed -e '/^#include "perl\.h"/a\
-\
-#define yydebug PL_yydebug\
-#define yynerrs PL_yynerrs\
-#define yyerrflag PL_yyerrflag\
-#define yychar PL_yychar\
-#define yyval PL_yyval\
-#define yylval PL_yylval' \
- -e '/YYSTYPE *yyval;/D' \
- -e '/YYSTYPE *yylval;/D' \
- -e '/int yychar,/,/yynerrs;/D' \
- -e 's/int yydebug = 0;/yydebug = 0;/' \
- -e 's/[^_]realloc(/PerlMem_realloc(/g' \
- -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
- -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
- xxx="$xxx perly.c"
- fi
- if cmp -s y.tab.h perly.h; then
- rm -f y.tab.h
- else
- echo "perly.y -> perly.h" >&2
- mv -f y.tab.h perly.h
- xxx="$xxx perly.h"
- fi
- if cd x2p
- then
- rm -f y.tab.c y.tab.h
- case "$osname" in
- posix-bc)
- # we are using two different yaccs in BS2000 Posix!
- byacc a2p.y >/dev/null 2>&1
- ;;
- *) # e.g. os390
- yacc a2p.y >/dev/null 2>&1
- ;;
- esac
- if cmp -s y.tab.c a2p.c
- then
- rm -f y.tab.c
- else
- echo "a2p.y -> a2p.c" >&2
- mv -f y.tab.c a2p.c
- chmod u+w a2p.c
- sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
- -e 's|^static void __YY_YACC_MAIN.*BS2000.*|/*static main deleted*/|' \
- -e 's/y\.tab/a2p/g' a2p.c >a2p.tmp && mv a2p.tmp a2p.c
- xxx="$xxx a2p.c"
- fi
- # In case somebody yacc -d:ed the a2p.y.
- if test -f y.tab.h
- then
- if cmp -s y.tab.h a2p.h
- then
- rm -f y.tab.h
- else
- echo "a2p.h -> a2p.h" >&2
- mv -f y.tab.h a2p.h
- xxx="$xxx a2p.h"
- fi
- fi
- cd ..
- fi
- ;;
-vmesa)
- # Do nothing in VM/ESA.
- ;;
-*)
- echo "'$osname' is an EBCDIC system I don't know that well." >&4
- ;;
-esac
- case "$xxx" in
- '') echo "No parser files were regenerated. That's okay." >&2 ;;
- esac
- ;;
-esac
-
diff --git a/contrib/perl5/Policy_sh.SH b/contrib/perl5/Policy_sh.SH
deleted file mode 100755
index fec18b9..0000000
--- a/contrib/perl5/Policy_sh.SH
+++ /dev/null
@@ -1,246 +0,0 @@
-case $CONFIGDOTSH in
-'') . ./config.sh ;;
-esac
-echo "Extracting Policy.sh (with variable substitutions)"
-$spitshell <<!GROK!THIS! >Policy.sh
-$startsh
-#
-# This file was produced by running the Policy_sh.SH script, which
-# gets its values from config.sh, which is generally produced by
-# running Configure.
-#
-# The idea here is to distill in one place the common site-wide
-# "policy" answers (such as installation directories) that are
-# to be "sticky". If you keep the file Policy.sh around in
-# the same directory as you are building Perl, then Configure will
-# (by default) load up the Policy.sh file just before the
-# platform-specific hints file and rewrite it at the end.
-#
-# The sequence of events is as follows:
-# A: If you are NOT re-using an old config.sh:
-# 1. At start-up, Configure loads up the defaults from the
-# os-specific hints/osname_osvers.sh file and any previous
-# Policy.sh file.
-# 2. At the end, Configure runs Policy_sh.SH, which creates
-# Policy.sh, overwriting a previous Policy.sh if necessary.
-#
-# B: If you are re-using an old config.sh:
-# 1. At start-up, Configure loads up the defaults from config.sh,
-# ignoring any previous Policy.sh file.
-# 2. At the end, Configure runs Policy_sh.SH, which creates
-# Policy.sh, overwriting a previous Policy.sh if necessary.
-#
-# Thus the Policy.sh file gets overwritten each time
-# Configure is run. Any variables you add to Policy.sh will be lost
-# unless you copy Policy.sh somewhere else before running Configure.
-#
-# Allow Configure command-line overrides; usually these won't be
-# needed, but something like -Dprefix=/test/location can be quite
-# useful for testing out new versions.
-
-#Site-specific values:
-
-case "\$perladmin" in
-'') perladmin='$perladmin' ;;
-esac
-
-# Installation prefixes. Allow a Configure -D override. You
-# may wish to reinstall perl under a different prefix, perhaps
-# in order to test a different configuration.
-# For an explanation of the installation directories, see the
-# INSTALL file section on "Installation Directories".
-case "\$prefix" in
-'') prefix='$prefix' ;;
-esac
-
-# By default, the next three are the same as \$prefix.
-# If the user changes \$prefix, and previously \$siteprefix was the
-# same as \$prefix, then change \$siteprefix as well.
-# Use similar logic for \$vendorprefix and \$installprefix.
-
-case "\$siteprefix" in
-'') if test "$siteprefix" = "$prefix"; then
- siteprefix="\$prefix"
- else
- siteprefix='$siteprefix'
- fi
- ;;
-esac
-case "\$vendorprefix" in
-'') if test "$vendorprefix" = "$prefix"; then
- vendorprefix="\$prefix"
- else
- vendorprefix='$vendorprefix'
- fi
- ;;
-esac
-
-# Where installperl puts things.
-case "\$installprefix" in
-'') if test "$installprefix" = "$prefix"; then
- installprefix="\$prefix"
- else
- installprefix='$installprefix'
- fi
- ;;
-esac
-
-# Installation directives. Note that each one comes in three flavors.
-# For example, we have privlib, privlibexp, and installprivlib.
-# privlib is for private (to perl) library files.
-# privlibexp is the same, except any '~' the user gave to Configure
-# is expanded to the user's home directory. This is figured
-# out automatically by Configure, so you don't have to include it here.
-# installprivlib is for systems (such as those running AFS) that
-# need to distinguish between the place where things
-# get installed and where they finally will reside. As of 5.005_6x,
-# this too is handled automatically by Configure based on
-# $installprefix, so it isn't included here either.
-#
-# Note also that there are three broad hierarchies of installation
-# directories, as discussed in the INSTALL file under
-# "Installation Directories":
-#
-# =item Directories for the perl distribution
-#
-# =item Directories for site-specific add-on files
-#
-# =item Directories for vendor-supplied add-on files
-#
-# See Porting/Glossary for the definitions of these names, and see the
-# INSTALL file for further explanation and some examples.
-#
-# In each case, if your previous value was the default, leave it commented
-# out. That way, if you override prefix, all of these will be
-# automatically adjusted.
-#
-# WARNING: Be especially careful about architecture-dependent and
-# version-dependent names, particularly if you reuse this file for
-# different versions of perl.
-
-!GROK!THIS!
-
-for var in \
- bin scriptdir privlib archlib man1dir man3dir html1dir html3dir \
- sitebin sitescript sitelib sitearch \
- siteman1 siteman3 sitehtml1 sitehtml3 \
- vendorbin vendorscript vendorlib vendorarch \
- vendorman1 vendorman3 vendorhtml1 vendorhtml3
-do
-
- case "$var" in
-
- # Directories for the core perl components
- bin) dflt=$prefix/bin ;;
- # The scriptdir test is more complex, but this is probably usually ok.
- scriptdir)
- if $test -d $prefix/script; then
- dflt=$prefix/script
- else
- dflt=$bin
- fi
- ;;
- privlib)
- case "$prefix" in
- *perl*) dflt=$prefix/lib/$version ;;
- *) dflt=$prefix/lib/$package/$version ;;
- esac
- ;;
- archlib) dflt="$privlib/$archname" ;;
-
- man1dir) dflt="$prefix/man/man1" ;;
- man3dir) dflt="$prefix/man/man3" ;;
- # Can we assume all sed's have greedy matching?
- man1ext) dflt=`echo $man1dir | sed -e 's!.*man!!' -e 's!^\.!!'` ;;
- man3ext) dflt=`echo $man3dir | sed -e 's!.*man!!' -e 's!^\.!!'` ;;
-
- # We don't know what to do with these yet.
- html1dir) dflt='' ;;
- htm31dir) dflt='' ;;
-
- # Directories for site-specific add-on files
- sitebin) dflt=$siteprefix/bin ;;
- sitescript)
- if $test -d $siteprefix/script; then
- dflt=$siteprefix/script
- else
- dflt=$sitebin
- fi
- ;;
- sitelib)
- case "$siteprefix" in
- *perl*) dflt=$prefix/lib/site_perl/$version ;;
- *) dflt=$prefix/lib/$package/site_perl/$version ;;
- esac
- ;;
- sitearch) dflt="$sitelib/$archname" ;;
-
- siteman1) dflt="$siteprefix/man/man1" ;;
- siteman3) dflt="$siteprefix/man/man3" ;;
- # We don't know what to do with these yet.
- sitehtml1) dflt='' ;;
- sitehtm31dir) dflt='' ;;
-
- # Directories for vendor-supplied add-on files
- # These are all usually empty.
- vendor*)
- if test X"$vendorprefix" = X""; then
- dflt=''
- else
- case "$var" in
- vendorbin) dflt=$vendorprefix/bin ;;
- vendorscript)
- if $test -d $vendorprefix/script; then
- dflt=$vendorprefix/script
- else
- dflt=$vendorbin
- fi
- ;;
- vendorlib)
- case "$vendorprefix" in
- *perl*) dflt=$prefix/lib/vendor_perl/$version ;;
- *) dflt=$prefix/lib/$package/vendor_perl/$version ;;
- esac
- ;;
- vendorarch) dflt="$vendorlib/$archname" ;;
-
- vendorman1) dflt="$vendorprefix/man/man1" ;;
- vendorman3) dflt="$vendorprefix/man/man3" ;;
- # We don't know what to do with these yet.
- vendorhtml1) dflt='' ;;
- vendorhtm3) dflt='' ;;
-
- esac # End of vendorprefix != ''
- fi
- ;;
- esac
-
- eval val="\$$var"
- if test X"$val" = X"$dflt"; then
- echo "# $var='$dflt'"
- else
- echo "# Preserving custom $var"
- echo "$var='$val'"
- fi
-
-done >> Policy.sh
-
-$spitshell <<!GROK!THIS! >>Policy.sh
-
-# Lastly, you may add additional items here. For example, to set the
-# pager to your local favorite value, uncomment the following line in
-# the original Policy_sh.SH file and re-run sh Policy_sh.SH.
-#
-# pager='$pager'
-#
-# A full Glossary of all the config.sh variables is in the file
-# Porting/Glossary.
-
-!GROK!THIS!
-
-#Credits:
-# The original design for this Policy.sh file came from Wayne Davison,
-# maintainer of trn.
-# This version for Perl5.004_61 originally written by
-# Andy Dougherty <doughera@lafayette.edu>.
-# This file may be distributed under the same terms as Perl itself.
diff --git a/contrib/perl5/Porting/Contract b/contrib/perl5/Porting/Contract
deleted file mode 100644
index 2b619fd..0000000
--- a/contrib/perl5/Porting/Contract
+++ /dev/null
@@ -1,108 +0,0 @@
-
- Contributed Modules in Perl Core
- A Social Contract about Artistic Control
-
-What follows is a statement about artistic control, defined as the ability
-of authors of packages to guide the future of their code and maintain
-control over their work. It is a recognition that authors should have
-control over their work, and that it is a responsibility of the rest of
-the Perl community to ensure that they retain this control. It is an
-attempt to document the standards to which we, as Perl developers, intend
-to hold ourselves. It is an attempt to write down rough guidelines about
-the respect we owe each other as Perl developers.
-
-This statement is not a legal contract. This statement is not a legal
-document in any way, shape, or form. Perl is distributed under the GNU
-Public License and under the Artistic License; those are the precise legal
-terms. This statement isn't about the law or licenses. It's about
-community, mutual respect, trust, and good-faith cooperation.
-
-We recognize that the Perl core, defined as the software distributed with
-the heart of Perl itself, is a joint project on the part of all of us.
-From time to time, a script, module, or set of modules (hereafter referred
-to simply as a "module") will prove so widely useful and/or so integral to
-the correct functioning of Perl itself that it should be distributed with
-Perl core. This should never be done without the author's explicit
-consent, and a clear recognition on all parts that this means the module
-is being distributed under the same terms as Perl itself. A module author
-should realize that inclusion of a module into the Perl core will
-necessarily mean some loss of control over it, since changes may
-occasionally have to be made on short notice or for consistency with the
-rest of Perl.
-
-Once a module has been included in the Perl core, however, everyone
-involved in maintaining Perl should be aware that the module is still the
-property of the original author unless the original author explicitly
-gives up their ownership of it. In particular:
-
- 1) The version of the module in the core should still be considered the
- work of the original author. All patches, bug reports, and so forth
- should be fed back to them. Their development directions should be
- respected whenever possible.
-
- 2) Patches may be applied by the pumpkin holder without the explicit
- cooperation of the module author if and only if they are very minor,
- time-critical in some fashion (such as urgent security fixes), or if
- the module author cannot be reached. Those patches must still be
- given back to the author when possible, and if the author decides on
- an alternate fix in their version, that fix should be strongly
- preferred unless there is a serious problem with it. Any changes not
- endorsed by the author should be marked as such, and the contributor
- of the change acknowledged.
-
- 3) The version of the module distributed with Perl should, whenever
- possible, be the latest version of the module as distributed by the
- author (the latest non-beta version in the case of public Perl
- releases), although the pumpkin holder may hold off on upgrading the
- version of the module distributed with Perl to the latest version
- until the latest version has had sufficient testing.
-
-In other words, the author of a module should be considered to have final
-say on modifications to their module whenever possible (bearing in mind
-that it's expected that everyone involved will work together and arrive at
-reasonable compromises when there are disagreements).
-
-As a last resort, however:
-
- 4) If the author's vision of the future of their module is sufficiently
- different from the vision of the pumpkin holder and perl5-porters as a
- whole so as to cause serious problems for Perl, the pumpkin holder may
- choose to formally fork the version of the module in the core from the
- one maintained by the author. This should not be done lightly and
- should *always* if at all possible be done only after direct input
- from Larry. If this is done, it must then be made explicit in the
- module as distributed with Perl core that it is a forked version and
- that while it is based on the original author's work, it is no longer
- maintained by them. This must be noted in both the documentation and
- in the comments in the source of the module.
-
-Again, this should be a last resort only. Ideally, this should never
-happen, and every possible effort at cooperation and compromise should be
-made before doing this. If it does prove necessary to fork a module for
-the overall health of Perl, proper credit must be given to the original
-author in perpetuity and the decision should be constantly re-evaluated to
-see if a remerging of the two branches is possible down the road.
-
-In all dealings with contributed modules, everyone maintaining Perl should
-keep in mind that the code belongs to the original author, that they may
-not be on perl5-porters at any given time, and that a patch is not
-official unless it has been integrated into the author's copy of the
-module. To aid with this, and with points #1, #2, and #3 above, contact
-information for the authors of all contributed modules should be kept with
-the Perl distribution.
-
-Finally, the Perl community as a whole recognizes that respect for
-ownership of code, respect for artistic control, proper credit, and active
-effort to prevent unintentional code skew or communication gaps is vital
-to the health of the community and Perl itself. Members of a community
-should not normally have to resort to rules and laws to deal with each
-other, and this document, although it contains rules so as to be clear, is
-about an attitude and general approach. The first step in any dispute
-should be open communication, respect for opposing views, and an attempt
-at a compromise. In nearly every circumstance nothing more will be
-necessary, and certainly no more drastic measure should be used until
-every avenue of communication and discussion has failed.
-
---
-Version 1.2. By Russ Allbery (rra@stanford.edu) and the perl5-porters.
-
diff --git a/contrib/perl5/Porting/Glossary b/contrib/perl5/Porting/Glossary
deleted file mode 100644
index d32c0a6..0000000
--- a/contrib/perl5/Porting/Glossary
+++ /dev/null
@@ -1,3798 +0,0 @@
-This file contains a description of all the shell variables whose value is
-determined by the Configure script. Variables intended for use in C
-programs (e.g. I_UNISTD) are already described in config_h.SH. [`configpm'
-generates pod documentation for Config.pm from this file--please try to keep
-the formatting regular.]
-
-_a (Unix.U):
- This variable defines the extension used for ordinary libraries.
- For unix, it is '.a'. The '.' is included. Other possible
- values include '.lib'.
-
-_exe (Unix.U):
- This variable defines the extension used for executable files.
- For unix it is empty. Other possible values include '.exe'.
-
-_o (Unix.U):
- This variable defines the extension used for object files.
- For unix, it is '.o'. The '.' is included. Other possible
- values include '.obj'.
-
-afs (afs.U):
- This variable is set to 'true' if AFS (Andrew File System) is used
- on the system, 'false' otherwise. It is possible to override this
- with a hint value or command line option, but you'd better know
- what you are doing.
-
-alignbytes (alignbytes.U):
- This variable holds the number of bytes required to align a
- double-- or a long double when applicable. Usual values are
- 2, 4 and 8. The default is eight, for safety.
-
-ansi2knr (ansi2knr.U):
- This variable is set if the user needs to run ansi2knr.
- Currently, this is not supported, so we just abort.
-
-aphostname (d_gethname.U):
- This variable contains the command which can be used to compute the
- host name. The command is fully qualified by its absolute path, to make
- it safe when used by a process with super-user privileges.
-
-api_revision (patchlevel.U):
- The three variables, api_revision, api_version, and
- api_subversion, specify the version of the oldest perl binary
- compatible with the present perl. In a full version string
- such as '5.6.1', api_revision is the '5'.
- Prior to 5.5.640, the format was a floating point number,
- like 5.00563.
- perl.c:incpush() and lib/lib.pm will automatically search in
- $sitelib/.. for older directories back to the limit specified
- by these api_ variables. This is only useful if you have a
- perl library directory tree structured like the default one.
- See INSTALL for how this works. The versioned site_perl
- directory was introduced in 5.005, so that is the lowest
- possible value. The version list appropriate for the current
- system is determined in inc_version_list.U.
- XXX To do: Since compatibility can depend on compile time
- options (such as bincompat, longlong, etc.) it should
- (perhaps) be set by Configure, but currently it isn't.
- Currently, we read a hard-wired value from patchlevel.h.
- Perhaps what we ought to do is take the hard-wired value from
- patchlevel.h but then modify it if the current Configure
- options warrant. patchlevel.h then would use an #ifdef guard.
-
-api_subversion (patchlevel.U):
- The three variables, api_revision, api_version, and
- api_subversion, specify the version of the oldest perl binary
- compatible with the present perl. In a full version string
- such as '5.6.1', api_subversion is the '1'. See api_revision for
- full details.
-
-api_version (patchlevel.U):
- The three variables, api_revision, api_version, and
- api_subversion, specify the version of the oldest perl binary
- compatible with the present perl. In a full version string
- such as '5.6.1', api_version is the '6'. See api_revision for
- full details. As a special case, 5.5.0 is rendered in the
- old-style as 5.005. (In the 5.005_0x maintenance series,
- this was the only versioned directory in $sitelib.)
-
-api_versionstring (patchlevel.U):
- This variable combines api_revision, api_version, and
- api_subversion in a format such as 5.6.1 (or 5_6_1) suitable
- for use as a directory name. This is filesystem dependent.
-
-ar (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the ar program. After Configure runs,
- the value is reset to a plain "ar" and is not useful.
-
-archlib (archlib.U):
- This variable holds the name of the directory in which the user wants
- to put architecture-dependent public library files for $package.
- It is most often a local directory such as /usr/local/lib.
- Programs using this variable must be prepared to deal
- with filename expansion.
-
-archlibexp (archlib.U):
- This variable is the same as the archlib variable, but is
- filename expanded at configuration time, for convenient use.
-
-archname64 (use64bits.U):
- This variable is used for the 64-bitness part of $archname.
-
-archname (archname.U):
- This variable is a short name to characterize the current
- architecture. It is used mainly to construct the default archlib.
-
-archobjs (Unix.U):
- This variable defines any additional objects that must be linked
- in with the program on this architecture. On unix, it is usually
- empty. It is typically used to include emulations of unix calls
- or other facilities. For perl on OS/2, for example, this would
- include os2/os2.obj.
-
-awk (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the awk program. After Configure runs,
- the value is reset to a plain "awk" and is not useful.
-
-baserev (baserev.U):
- The base revision level of this package, from the .package file.
-
-bash (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-bin (bin.U):
- This variable holds the name of the directory in which the user wants
- to put publicly executable images for the package in question. It
- is most often a local directory such as /usr/local/bin. Programs using
- this variable must be prepared to deal with ~name substitution.
-
-bincompat5005 (bincompat5005.U):
- This variable contains y if this version of Perl should be
- binary-compatible with Perl 5.005.
-
-binexp (bin.U):
- This is the same as the bin variable, but is filename expanded at
- configuration time, for use in your makefiles.
-
-bison (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-byacc (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the byacc program. After Configure runs,
- the value is reset to a plain "byacc" and is not useful.
-
-byteorder (byteorder.U):
- This variable holds the byte order. In the following, larger digits
- indicate more significance. The variable byteorder is either 4321
- on a big-endian machine, or 1234 on a little-endian, or 87654321
- on a Cray ... or 3412 with weird order !
-
-c (n.U):
- This variable contains the \c string if that is what causes the echo
- command to suppress newline. Otherwise it is null. Correct usage is
- $echo $n "prompt for a question: $c".
-
-castflags (d_castneg.U):
- This variable contains a flag that precise difficulties the
- compiler has casting odd floating values to unsigned long:
- 0 = ok
- 1 = couldn't cast < 0
- 2 = couldn't cast >= 0x80000000
- 4 = couldn't cast in argument expression list
-
-cat (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the cat program. After Configure runs,
- the value is reset to a plain "cat" and is not useful.
-
-cc (cc.U):
- This variable holds the name of a command to execute a C compiler which
- can resolve multiple global references that happen to have the same
- name. Usual values are 'cc' and 'gcc'.
- Fervent ANSI compilers may be called 'c89'. AIX has xlc.
-
-cccdlflags (dlsrc.U):
- This variable contains any special flags that might need to be
- passed with 'cc -c' to compile modules to be used to create a shared
- library that will be used for dynamic loading. For hpux, this
- should be +z. It is up to the makefile to use it.
-
-ccdlflags (dlsrc.U):
- This variable contains any special flags that might need to be
- passed to cc to link with a shared library for dynamic loading.
- It is up to the makefile to use it. For sunos 4.1, it should
- be empty.
-
-ccflags (ccflags.U):
- This variable contains any additional C compiler flags desired by
- the user. It is up to the Makefile to use this.
-
-ccflags_uselargefiles (uselfs.U):
- This variable contains the compiler flags needed by large file builds
- and added to ccflags by hints files.
-
-ccname (Checkcc.U):
- This can set either by hints files or by Configure. If using
- gcc, this is gcc, and if not, usually equal to cc, unimpressive, no?
- Some platforms, however, make good use of this by storing the
- flavor of the C compiler being used here. For example if using
- the Sun WorkShop suite, ccname will be 'workshop'.
-
-ccsymbols (Cppsym.U):
- The variable contains the symbols defined by the C compiler alone.
- The symbols defined by cpp or by cc when it calls cpp are not in
- this list, see cppsymbols and cppccsymbols.
- The list is a space-separated list of symbol=value tokens.
-
-ccversion (Checkcc.U):
- This can set either by hints files or by Configure. If using
- a (non-gcc) vendor cc, this variable may contain a version for
- the compiler.
-
-cf_by (cf_who.U):
- Login name of the person who ran the Configure script and answered the
- questions. This is used to tag both config.sh and config_h.SH.
-
-cf_email (cf_email.U):
- Electronic mail address of the person who ran Configure. This can be
- used by units that require the user's e-mail, like MailList.U.
-
-cf_time (cf_who.U):
- Holds the output of the "date" command when the configuration file was
- produced. This is used to tag both config.sh and config_h.SH.
-
-charsize (charsize.U):
- This variable contains the value of the CHARSIZE symbol, which
- indicates to the C program how many bytes there are in a character.
-
-chgrp (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-chmod (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-chown (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-clocktype (d_times.U):
- This variable holds the type returned by times(). It can be long,
- or clock_t on BSD sites (in which case <sys/types.h> should be
- included).
-
-comm (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the comm program. After Configure runs,
- the value is reset to a plain "comm" and is not useful.
-
-compress (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-CONFIGDOTSH (Oldsyms.U):
- This is set to 'true' in config.sh so that a shell script
- sourcing config.sh can tell if it has been sourced already.
-
-contains (contains.U):
- This variable holds the command to do a grep with a proper return
- status. On most sane systems it is simply "grep". On insane systems
- it is a grep followed by a cat followed by a test. This variable
- is primarily for the use of other Configure units.
-
-cp (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the cp program. After Configure runs,
- the value is reset to a plain "cp" and is not useful.
-
-cpio (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-cpp (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the cpp program. After Configure runs,
- the value is reset to a plain "cpp" and is not useful.
-
-cpp_stuff (cpp_stuff.U):
- This variable contains an identification of the catenation mechanism
- used by the C preprocessor.
-
-cppccsymbols (Cppsym.U):
- The variable contains the symbols defined by the C compiler
- when it calls cpp. The symbols defined by the cc alone or cpp
- alone are not in this list, see ccsymbols and cppsymbols.
- The list is a space-separated list of symbol=value tokens.
-
-cppflags (ccflags.U):
- This variable holds the flags that will be passed to the C pre-
- processor. It is up to the Makefile to use it.
-
-cpplast (cppstdin.U):
- This variable has the same functionality as cppminus, only it applies
- to cpprun and not cppstdin.
-
-cppminus (cppstdin.U):
- This variable contains the second part of the string which will invoke
- the C preprocessor on the standard input and produce to standard
- output. This variable will have the value "-" if cppstdin needs
- a minus to specify standard input, otherwise the value is "".
-
-cpprun (cppstdin.U):
- This variable contains the command which will invoke a C preprocessor
- on standard input and put the output to stdout. It is guaranteed not
- to be a wrapper and may be a null string if no preprocessor can be
- made directly available. This preprocessor might be different from the
- one used by the C compiler. Don't forget to append cpplast after the
- preprocessor options.
-
-cppstdin (cppstdin.U):
- This variable contains the command which will invoke the C
- preprocessor on standard input and put the output to stdout.
- It is primarily used by other Configure units that ask about
- preprocessor symbols.
-
-cppsymbols (Cppsym.U):
- The variable contains the symbols defined by the C preprocessor
- alone. The symbols defined by cc or by cc when it calls cpp are
- not in this list, see ccsymbols and cppccsymbols.
- The list is a space-separated list of symbol=value tokens.
-
-crosscompile (crosscompile.U):
- This variable conditionally defines the CROSSCOMPILE symbol
- which signifies that the build process is be a cross-compilation.
- This is normally set by hints files or from Configure command line.
-
-cryptlib (d_crypt.U):
- This variable holds -lcrypt or the path to a libcrypt.a archive if
- the crypt() function is not defined in the standard C library. It is
- up to the Makefile to use this.
-
-csh (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the csh program. After Configure runs,
- the value is reset to a plain "csh" and is not useful.
-
-d__fwalk (d__fwalk.U):
- This variable conditionally defines HAS__FWALK if _fwalk() is
- available to apply a function to all the file handles.
-
-d_access (d_access.U):
- This variable conditionally defines HAS_ACCESS if the access() system
- call is available to check for access permissions using real IDs.
-
-d_accessx (d_accessx.U):
- This variable conditionally defines the HAS_ACCESSX symbol, which
- indicates to the C program that the accessx() routine is available.
-
-d_alarm (d_alarm.U):
- This variable conditionally defines the HAS_ALARM symbol, which
- indicates to the C program that the alarm() routine is available.
-
-d_archlib (archlib.U):
- This variable conditionally defines ARCHLIB to hold the pathname
- of architecture-dependent library files for $package. If
- $archlib is the same as $privlib, then this is set to undef.
-
-d_atolf (atolf.U):
- This variable conditionally defines the HAS_ATOLF symbol, which
- indicates to the C program that the atolf() routine is available.
-
-d_atoll (atoll.U):
- This variable conditionally defines the HAS_ATOLL symbol, which
- indicates to the C program that the atoll() routine is available.
-
-d_attribut (d_attribut.U):
- This variable conditionally defines HASATTRIBUTE, which
- indicates the C compiler can check for function attributes,
- such as printf formats.
-
-d_bcmp (d_bcmp.U):
- This variable conditionally defines the HAS_BCMP symbol if
- the bcmp() routine is available to compare strings.
-
-d_bcopy (d_bcopy.U):
- This variable conditionally defines the HAS_BCOPY symbol if
- the bcopy() routine is available to copy strings.
-
-d_bincompat5005 (bincompat5005.U):
- This variable conditionally defines BINCOMPAT5005 so that embed.h
- can take special action if this version of Perl should be
- binary-compatible with Perl 5.005. This is impossible for builds
- that use features like threads and multiplicity it is always $undef
- for those versions.
-
-d_bsd (Guess.U):
- This symbol conditionally defines the symbol BSD when running on a
- BSD system.
-
-d_bsdgetpgrp (d_getpgrp.U):
- This variable conditionally defines USE_BSD_GETPGRP if
- getpgrp needs one arguments whereas USG one needs none.
-
-d_bsdsetpgrp (d_setpgrp.U):
- This variable conditionally defines USE_BSD_SETPGRP if
- setpgrp needs two arguments whereas USG one needs none.
- See also d_setpgid for a POSIX interface.
-
-d_bzero (d_bzero.U):
- This variable conditionally defines the HAS_BZERO symbol if
- the bzero() routine is available to set memory to 0.
-
-d_casti32 (d_casti32.U):
- This variable conditionally defines CASTI32, which indicates
- whether the C compiler can cast large floats to 32-bit ints.
-
-d_castneg (d_castneg.U):
- This variable conditionally defines CASTNEG, which indicates
- wether the C compiler can cast negative float to unsigned.
-
-d_charvspr (d_vprintf.U):
- This variable conditionally defines CHARVSPRINTF if this system
- has vsprintf returning type (char*). The trend seems to be to
- declare it as "int vsprintf()".
-
-d_chown (d_chown.U):
- This variable conditionally defines the HAS_CHOWN symbol, which
- indicates to the C program that the chown() routine is available.
-
-d_chroot (d_chroot.U):
- This variable conditionally defines the HAS_CHROOT symbol, which
- indicates to the C program that the chroot() routine is available.
-
-d_chsize (d_chsize.U):
- This variable conditionally defines the CHSIZE symbol, which
- indicates to the C program that the chsize() routine is available
- to truncate files. You might need a -lx to get this routine.
-
-d_closedir (d_closedir.U):
- This variable conditionally defines HAS_CLOSEDIR if closedir() is
- available.
-
-d_const (d_const.U):
- This variable conditionally defines the HASCONST symbol, which
- indicates to the C program that this C compiler knows about the
- const type.
-
-d_crypt (d_crypt.U):
- This variable conditionally defines the CRYPT symbol, which
- indicates to the C program that the crypt() routine is available
- to encrypt passwords and the like.
-
-d_csh (d_csh.U):
- This variable conditionally defines the CSH symbol, which
- indicates to the C program that the C-shell exists.
-
-d_cuserid (d_cuserid.U):
- This variable conditionally defines the HAS_CUSERID symbol, which
- indicates to the C program that the cuserid() routine is available
- to get character login names.
-
-d_dbl_dig (d_dbl_dig.U):
- This variable conditionally defines d_dbl_dig if this system's
- header files provide DBL_DIG, which is the number of significant
- digits in a double precision number.
-
-d_difftime (d_difftime.U):
- This variable conditionally defines the HAS_DIFFTIME symbol, which
- indicates to the C program that the difftime() routine is available.
-
-d_dirnamlen (i_dirent.U):
- This variable conditionally defines DIRNAMLEN, which indicates
- to the C program that the length of directory entry names is
- provided by a d_namelen field.
-
-d_dlerror (d_dlerror.U):
- This variable conditionally defines the HAS_DLERROR symbol, which
- indicates to the C program that the dlerror() routine is available.
-
-d_dlopen (d_dlopen.U):
- This variable conditionally defines the HAS_DLOPEN symbol, which
- indicates to the C program that the dlopen() routine is available.
-
-d_dlsymun (d_dlsymun.U):
- This variable conditionally defines DLSYM_NEEDS_UNDERSCORE, which
- indicates that we need to prepend an underscore to the symbol
- name before calling dlsym().
-
-d_dosuid (d_dosuid.U):
- This variable conditionally defines the symbol DOSUID, which
- tells the C program that it should insert setuid emulation code
- on hosts which have setuid #! scripts disabled.
-
-d_drand48proto (d_drand48proto.U):
- This variable conditionally defines the HAS_DRAND48_PROTO symbol,
- which indicates to the C program that the system provides
- a prototype for the drand48() function. Otherwise, it is
- up to the program to supply one.
-
-d_dup2 (d_dup2.U):
- This variable conditionally defines HAS_DUP2 if dup2() is
- available to duplicate file descriptors.
-
-d_eaccess (d_eaccess.U):
- This variable conditionally defines the HAS_EACCESS symbol, which
- indicates to the C program that the eaccess() routine is available.
-
-d_endgrent (d_endgrent.U):
- This variable conditionally defines the HAS_ENDGRENT symbol, which
- indicates to the C program that the endgrent() routine is available
- for sequential access of the group database.
-
-d_endhent (d_endhent.U):
- This variable conditionally defines HAS_ENDHOSTENT if endhostent() is
- available to close whatever was being used for host queries.
-
-d_endnent (d_endnent.U):
- This variable conditionally defines HAS_ENDNETENT if endnetent() is
- available to close whatever was being used for network queries.
-
-d_endpent (d_endpent.U):
- This variable conditionally defines HAS_ENDPROTOENT if endprotoent() is
- available to close whatever was being used for protocol queries.
-
-d_endpwent (d_endpwent.U):
- This variable conditionally defines the HAS_ENDPWENT symbol, which
- indicates to the C program that the endpwent() routine is available
- for sequential access of the passwd database.
-
-d_endsent (d_endsent.U):
- This variable conditionally defines HAS_ENDSERVENT if endservent() is
- available to close whatever was being used for service queries.
-
-d_eofnblk (nblock_io.U):
- This variable conditionally defines EOF_NONBLOCK if EOF can be seen
- when reading from a non-blocking I/O source.
-
-d_eunice (Guess.U):
- This variable conditionally defines the symbols EUNICE and VAX, which
- alerts the C program that it must deal with ideosyncracies of VMS.
-
-d_fchmod (d_fchmod.U):
- This variable conditionally defines the HAS_FCHMOD symbol, which
- indicates to the C program that the fchmod() routine is available
- to change mode of opened files.
-
-d_fchown (d_fchown.U):
- This variable conditionally defines the HAS_FCHOWN symbol, which
- indicates to the C program that the fchown() routine is available
- to change ownership of opened files.
-
-d_fcntl (d_fcntl.U):
- This variable conditionally defines the HAS_FCNTL symbol, and indicates
- whether the fcntl() function exists
-
-d_fcntl_can_lock (d_fcntl_can_lock.U):
- This variable conditionally defines the FCNTL_CAN_LOCK symbol
- and indicates whether file locking with fcntl() works.
-
-d_fd_macros (d_fd_set.U):
- This variable contains the eventual value of the HAS_FD_MACROS symbol,
- which indicates if your C compiler knows about the macros which
- manipulate an fd_set.
-
-d_fd_set (d_fd_set.U):
- This variable contains the eventual value of the HAS_FD_SET symbol,
- which indicates if your C compiler knows about the fd_set typedef.
-
-d_fds_bits (d_fd_set.U):
- This variable contains the eventual value of the HAS_FDS_BITS symbol,
- which indicates if your fd_set typedef contains the fds_bits member.
- If you have an fd_set typedef, but the dweebs who installed it did
- a half-fast job and neglected to provide the macros to manipulate
- an fd_set, HAS_FDS_BITS will let us know how to fix the gaffe.
-
-d_fgetpos (d_fgetpos.U):
- This variable conditionally defines HAS_FGETPOS if fgetpos() is
- available to get the file position indicator.
-
-d_flexfnam (d_flexfnam.U):
- This variable conditionally defines the FLEXFILENAMES symbol, which
- indicates that the system supports filenames longer than 14 characters.
-
-d_flock (d_flock.U):
- This variable conditionally defines HAS_FLOCK if flock() is
- available to do file locking.
-
-d_fork (d_fork.U):
- This variable conditionally defines the HAS_FORK symbol, which
- indicates to the C program that the fork() routine is available.
-
-d_fpathconf (d_pathconf.U):
- This variable conditionally defines the HAS_FPATHCONF symbol, which
- indicates to the C program that the pathconf() routine is available
- to determine file-system related limits and options associated
- with a given open file descriptor.
-
-d_fpos64_t (d_fpos64_t.U):
- This symbol will be defined if the C compiler supports fpos64_t.
-
-d_frexpl (d_frexpl.U):
- This variable conditionally defines the HAS_FREXPL symbol, which
- indicates to the C program that the frexpl() routine is available.
-
-d_fs_data_s (d_fs_data_s.U):
- This variable conditionally defines the HAS_STRUCT_FS_DATA symbol,
- which indicates that the struct fs_data is supported.
-
-d_fseeko (d_fseeko.U):
- This variable conditionally defines the HAS_FSEEKO symbol, which
- indicates to the C program that the fseeko() routine is available.
-
-d_fsetpos (d_fsetpos.U):
- This variable conditionally defines HAS_FSETPOS if fsetpos() is
- available to set the file position indicator.
-
-d_fstatfs (d_fstatfs.U):
- This variable conditionally defines the HAS_FSTATFS symbol, which
- indicates to the C program that the fstatfs() routine is available.
-
-d_fstatvfs (d_statvfs.U):
- This variable conditionally defines the HAS_FSTATVFS symbol, which
- indicates to the C program that the fstatvfs() routine is available.
-
-d_fsync (d_fsync.U):
- This variable conditionally defines the HAS_FSYNC symbol, which
- indicates to the C program that the fsync() routine is available.
-
-d_ftello (d_ftello.U):
- This variable conditionally defines the HAS_FTELLO symbol, which
- indicates to the C program that the ftello() routine is available.
-
-d_ftime (d_ftime.U):
- This variable conditionally defines the HAS_FTIME symbol, which indicates
- that the ftime() routine exists. The ftime() routine is basically
- a sub-second accuracy clock.
-
-d_Gconvert (d_gconvert.U):
- This variable holds what Gconvert is defined as to convert
- floating point numbers into strings. It could be 'gconvert'
- or a more complex macro emulating gconvert with gcvt() or sprintf.
- Possible values are:
- d_Gconvert='gconvert((x),(n),(t),(b))'
- d_Gconvert='gcvt((x),(n),(b))'
- d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-
-d_getcwd (d_getcwd.U):
- This variable conditionally defines the HAS_GETCWD symbol, which
- indicates to the C program that the getcwd() routine is available
- to get the current working directory.
-
-d_getespwnam (d_getespwnam.U):
- This variable conditionally defines HAS_GETESPWNAM if getespwnam() is
- available to retrieve enchanced (shadow) password entries by name.
-
-d_getfsstat (d_getfsstat.U):
- This variable conditionally defines the HAS_GETFSSTAT symbol, which
- indicates to the C program that the getfsstat() routine is available.
-
-d_getgrent (d_getgrent.U):
- This variable conditionally defines the HAS_GETGRENT symbol, which
- indicates to the C program that the getgrent() routine is available
- for sequential access of the group database.
-
-d_getgrps (d_getgrps.U):
- This variable conditionally defines the HAS_GETGROUPS symbol, which
- indicates to the C program that the getgroups() routine is available
- to get the list of process groups.
-
-d_gethbyaddr (d_gethbyad.U):
- This variable conditionally defines the HAS_GETHOSTBYADDR symbol, which
- indicates to the C program that the gethostbyaddr() routine is available
- to look up hosts by their IP addresses.
-
-d_gethbyname (d_gethbynm.U):
- This variable conditionally defines the HAS_GETHOSTBYNAME symbol, which
- indicates to the C program that the gethostbyname() routine is available
- to look up host names in some data base or other.
-
-d_gethent (d_gethent.U):
- This variable conditionally defines HAS_GETHOSTENT if gethostent() is
- available to look up host names in some data base or another.
-
-d_gethname (d_gethname.U):
- This variable conditionally defines the HAS_GETHOSTNAME symbol, which
- indicates to the C program that the gethostname() routine may be
- used to derive the host name.
-
-d_gethostprotos (d_gethostprotos.U):
- This variable conditionally defines the HAS_GETHOST_PROTOS symbol,
- which indicates to the C program that <netdb.h> supplies
- prototypes for the various gethost*() functions.
- See also netdbtype.U for probing for various netdb types.
-
-d_getlogin (d_getlogin.U):
- This variable conditionally defines the HAS_GETLOGIN symbol, which
- indicates to the C program that the getlogin() routine is available
- to get the login name.
-
-d_getmnt (d_getmnt.U):
- This variable conditionally defines the HAS_GETMNT symbol, which
- indicates to the C program that the getmnt() routine is available
- to retrieve one or more mount info blocks by filename.
-
-d_getmntent (d_getmntent.U):
- This variable conditionally defines the HAS_GETMNTENT symbol, which
- indicates to the C program that the getmntent() routine is available
- to iterate through mounted files to get their mount info.
-
-d_getnbyaddr (d_getnbyad.U):
- This variable conditionally defines the HAS_GETNETBYADDR symbol, which
- indicates to the C program that the getnetbyaddr() routine is available
- to look up networks by their IP addresses.
-
-d_getnbyname (d_getnbynm.U):
- This variable conditionally defines the HAS_GETNETBYNAME symbol, which
- indicates to the C program that the getnetbyname() routine is available
- to look up networks by their names.
-
-d_getnent (d_getnent.U):
- This variable conditionally defines HAS_GETNETENT if getnetent() is
- available to look up network names in some data base or another.
-
-d_getnetprotos (d_getnetprotos.U):
- This variable conditionally defines the HAS_GETNET_PROTOS symbol,
- which indicates to the C program that <netdb.h> supplies
- prototypes for the various getnet*() functions.
- See also netdbtype.U for probing for various netdb types.
-
-d_getpagsz (d_getpagsz.U):
- This variable conditionally defines HAS_GETPAGESIZE if getpagesize()
- is available to get the system page size.
-
-d_getpbyname (d_getprotby.U):
- This variable conditionally defines the HAS_GETPROTOBYNAME
- symbol, which indicates to the C program that the
- getprotobyname() routine is available to look up protocols
- by their name.
-
-d_getpbynumber (d_getprotby.U):
- This variable conditionally defines the HAS_GETPROTOBYNUMBER
- symbol, which indicates to the C program that the
- getprotobynumber() routine is available to look up protocols
- by their number.
-
-d_getpent (d_getpent.U):
- This variable conditionally defines HAS_GETPROTOENT if getprotoent() is
- available to look up protocols in some data base or another.
-
-d_getpgid (d_getpgid.U):
- This variable conditionally defines the HAS_GETPGID symbol, which
- indicates to the C program that the getpgid(pid) function
- is available to get the process group id.
-
-d_getpgrp2 (d_getpgrp2.U):
- This variable conditionally defines the HAS_GETPGRP2 symbol, which
- indicates to the C program that the getpgrp2() (as in DG/UX) routine
- is available to get the current process group.
-
-d_getpgrp (d_getpgrp.U):
- This variable conditionally defines HAS_GETPGRP if getpgrp() is
- available to get the current process group.
-
-d_getppid (d_getppid.U):
- This variable conditionally defines the HAS_GETPPID symbol, which
- indicates to the C program that the getppid() routine is available
- to get the parent process ID.
-
-d_getprior (d_getprior.U):
- This variable conditionally defines HAS_GETPRIORITY if getpriority()
- is available to get a process's priority.
-
-d_getprotoprotos (d_getprotoprotos.U):
- This variable conditionally defines the HAS_GETPROTO_PROTOS symbol,
- which indicates to the C program that <netdb.h> supplies
- prototypes for the various getproto*() functions.
- See also netdbtype.U for probing for various netdb types.
-
-d_getprpwnam (d_getprpwnam.U):
- This variable conditionally defines HAS_GETPRPWNAM if getprpwnam() is
- available to retrieve protected (shadow) password entries by name.
-
-d_getpwent (d_getpwent.U):
- This variable conditionally defines the HAS_GETPWENT symbol, which
- indicates to the C program that the getpwent() routine is available
- for sequential access of the passwd database.
-
-d_getsbyname (d_getsrvby.U):
- This variable conditionally defines the HAS_GETSERVBYNAME
- symbol, which indicates to the C program that the
- getservbyname() routine is available to look up services
- by their name.
-
-d_getsbyport (d_getsrvby.U):
- This variable conditionally defines the HAS_GETSERVBYPORT
- symbol, which indicates to the C program that the
- getservbyport() routine is available to look up services
- by their port.
-
-d_getsent (d_getsent.U):
- This variable conditionally defines HAS_GETSERVENT if getservent() is
- available to look up network services in some data base or another.
-
-d_getservprotos (d_getservprotos.U):
- This variable conditionally defines the HAS_GETSERV_PROTOS symbol,
- which indicates to the C program that <netdb.h> supplies
- prototypes for the various getserv*() functions.
- See also netdbtype.U for probing for various netdb types.
-
-d_getspnam (d_getspnam.U):
- This variable conditionally defines HAS_GETSPNAM if getspnam() is
- available to retrieve SysV shadow password entries by name.
-
-d_gettimeod (d_ftime.U):
- This variable conditionally defines the HAS_GETTIMEOFDAY symbol, which
- indicates that the gettimeofday() system call exists (to obtain a
- sub-second accuracy clock). You should probably include <sys/resource.h>.
-
-d_gnulibc (d_gnulibc.U):
- Defined if we're dealing with the GNU C Library.
-
-d_grpasswd (i_grp.U):
- This variable conditionally defines GRPASSWD, which indicates
- that struct group in <grp.h> contains gr_passwd.
-
-d_hasmntopt (d_hasmntopt.U):
- This variable conditionally defines the HAS_HASMNTOPT symbol, which
- indicates to the C program that the hasmntopt() routine is available
- to query the mount options of file systems.
-
-d_htonl (d_htonl.U):
- This variable conditionally defines HAS_HTONL if htonl() and its
- friends are available to do network order byte swapping.
-
-d_iconv (d_iconv.U):
- This variable conditionally defines the HAS_ICONV symbol, which
- indicates to the C program that the iconv() routine is available.
-
-d_index (d_strchr.U):
- This variable conditionally defines HAS_INDEX if index() and
- rindex() are available for string searching.
-
-d_inetaton (d_inetaton.U):
- This variable conditionally defines the HAS_INET_ATON symbol, which
- indicates to the C program that the inet_aton() function is available
- to parse IP address "dotted-quad" strings.
-
-d_int64_t (d_int64_t.U):
- This symbol will be defined if the C compiler supports int64_t.
-
-d_isascii (d_isascii.U):
- This variable conditionally defines the HAS_ISASCII constant,
- which indicates to the C program that isascii() is available.
-
-d_isnan (d_isnan.U):
- This variable conditionally defines the HAS_ISNAN symbol, which
- indicates to the C program that the isnan() routine is available.
-
-d_isnanl (d_isnanl.U):
- This variable conditionally defines the HAS_ISNANL symbol, which
- indicates to the C program that the isnanl() routine is available.
-
-d_killpg (d_killpg.U):
- This variable conditionally defines the HAS_KILLPG symbol, which
- indicates to the C program that the killpg() routine is available
- to kill process groups.
-
-d_lchown (d_lchown.U):
- This variable conditionally defines the HAS_LCHOWN symbol, which
- indicates to the C program that the lchown() routine is available
- to operate on a symbolic link (instead of following the link).
-
-d_ldbl_dig (d_ldbl_dig.U):
- This variable conditionally defines d_ldbl_dig if this system's
- header files provide LDBL_DIG, which is the number of significant
- digits in a long double precision number.
-
-d_link (d_link.U):
- This variable conditionally defines HAS_LINK if link() is
- available to create hard links.
-
-d_locconv (d_locconv.U):
- This variable conditionally defines HAS_LOCALECONV if localeconv() is
- available for numeric and monetary formatting conventions.
-
-d_lockf (d_lockf.U):
- This variable conditionally defines HAS_LOCKF if lockf() is
- available to do file locking.
-
-d_longdbl (d_longdbl.U):
- This variable conditionally defines HAS_LONG_DOUBLE if
- the long double type is supported.
-
-d_longlong (d_longlong.U):
- This variable conditionally defines HAS_LONG_LONG if
- the long long type is supported.
-
-d_lseekproto (d_lseekproto.U):
- This variable conditionally defines the HAS_LSEEK_PROTO symbol,
- which indicates to the C program that the system provides
- a prototype for the lseek() function. Otherwise, it is
- up to the program to supply one.
-
-d_lstat (d_lstat.U):
- This variable conditionally defines HAS_LSTAT if lstat() is
- available to do file stats on symbolic links.
-
-d_madvise (d_madvise.U):
- This variable conditionally defines HAS_MADVISE if madvise() is
- available to map a file into memory.
-
-d_mblen (d_mblen.U):
- This variable conditionally defines the HAS_MBLEN symbol, which
- indicates to the C program that the mblen() routine is available
- to find the number of bytes in a multibye character.
-
-d_mbstowcs (d_mbstowcs.U):
- This variable conditionally defines the HAS_MBSTOWCS symbol, which
- indicates to the C program that the mbstowcs() routine is available
- to convert a multibyte string into a wide character string.
-
-d_mbtowc (d_mbtowc.U):
- This variable conditionally defines the HAS_MBTOWC symbol, which
- indicates to the C program that the mbtowc() routine is available
- to convert multibyte to a wide character.
-
-d_memchr (d_memchr.U):
- This variable conditionally defines the HAS_MEMCHR symbol, which
- indicates to the C program that the memchr() routine is available
- to locate characters within a C string.
-
-d_memcmp (d_memcmp.U):
- This variable conditionally defines the HAS_MEMCMP symbol, which
- indicates to the C program that the memcmp() routine is available
- to compare blocks of memory.
-
-d_memcpy (d_memcpy.U):
- This variable conditionally defines the HAS_MEMCPY symbol, which
- indicates to the C program that the memcpy() routine is available
- to copy blocks of memory.
-
-d_memmove (d_memmove.U):
- This variable conditionally defines the HAS_MEMMOVE symbol, which
- indicates to the C program that the memmove() routine is available
- to copy potentatially overlapping blocks of memory.
-
-d_memset (d_memset.U):
- This variable conditionally defines the HAS_MEMSET symbol, which
- indicates to the C program that the memset() routine is available
- to set blocks of memory.
-
-d_mkdir (d_mkdir.U):
- This variable conditionally defines the HAS_MKDIR symbol, which
- indicates to the C program that the mkdir() routine is available
- to create directories..
-
-d_mkdtemp (d_mkdtemp.U):
- This variable conditionally defines the HAS_MKDTEMP symbol, which
- indicates to the C program that the mkdtemp() routine is available
- to exclusively create a uniquely named temporary directory.
-
-d_mkfifo (d_mkfifo.U):
- This variable conditionally defines the HAS_MKFIFO symbol, which
- indicates to the C program that the mkfifo() routine is available.
-
-d_mkstemp (d_mkstemp.U):
- This variable conditionally defines the HAS_MKSTEMP symbol, which
- indicates to the C program that the mkstemp() routine is available
- to exclusively create and open a uniquely named temporary file.
-
-d_mkstemps (d_mkstemps.U):
- This variable conditionally defines the HAS_MKSTEMPS symbol, which
- indicates to the C program that the mkstemps() routine is available
- to exclusively create and open a uniquely named (with a suffix)
- temporary file.
-
-d_mktime (d_mktime.U):
- This variable conditionally defines the HAS_MKTIME symbol, which
- indicates to the C program that the mktime() routine is available.
-
-d_mmap (d_mmap.U):
- This variable conditionally defines HAS_MMAP if mmap() is
- available to map a file into memory.
-
-d_modfl (d_modfl.U):
- This variable conditionally defines the HAS_MODFL symbol, which
- indicates to the C program that the modfl() routine is available.
-
-d_mprotect (d_mprotect.U):
- This variable conditionally defines HAS_MPROTECT if mprotect() is
- available to modify the access protection of a memory mapped file.
-
-d_msg (d_msg.U):
- This variable conditionally defines the HAS_MSG symbol, which
- indicates that the entire msg*(2) library is present.
-
-d_msg_ctrunc (d_socket.U):
- This variable conditionally defines the HAS_MSG_CTRUNC symbol,
- which indicates that the MSG_CTRUNC is available. #ifdef is
- not enough because it may be an enum, glibc has been known to do this.
-
-d_msg_dontroute (d_socket.U):
- This variable conditionally defines the HAS_MSG_DONTROUTE symbol,
- which indicates that the MSG_DONTROUTE is available. #ifdef is
- not enough because it may be an enum, glibc has been known to do this.
-
-d_msg_oob (d_socket.U):
- This variable conditionally defines the HAS_MSG_OOB symbol,
- which indicates that the MSG_OOB is available. #ifdef is
- not enough because it may be an enum, glibc has been known to do this.
-
-d_msg_peek (d_socket.U):
- This variable conditionally defines the HAS_MSG_PEEK symbol,
- which indicates that the MSG_PEEK is available. #ifdef is
- not enough because it may be an enum, glibc has been known to do this.
-
-d_msg_proxy (d_socket.U):
- This variable conditionally defines the HAS_MSG_PROXY symbol,
- which indicates that the MSG_PROXY is available. #ifdef is
- not enough because it may be an enum, glibc has been known to do this.
-
-d_msgctl (d_msgctl.U):
- This variable conditionally defines the HAS_MSGCTL symbol, which
- indicates to the C program that the msgctl() routine is available.
-
-d_msgget (d_msgget.U):
- This variable conditionally defines the HAS_MSGGET symbol, which
- indicates to the C program that the msgget() routine is available.
-
-d_msgrcv (d_msgrcv.U):
- This variable conditionally defines the HAS_MSGRCV symbol, which
- indicates to the C program that the msgrcv() routine is available.
-
-d_msgsnd (d_msgsnd.U):
- This variable conditionally defines the HAS_MSGSND symbol, which
- indicates to the C program that the msgsnd() routine is available.
-
-d_msync (d_msync.U):
- This variable conditionally defines HAS_MSYNC if msync() is
- available to synchronize a mapped file.
-
-d_munmap (d_munmap.U):
- This variable conditionally defines HAS_MUNMAP if munmap() is
- available to unmap a region mapped by mmap().
-
-d_mymalloc (mallocsrc.U):
- This variable conditionally defines MYMALLOC in case other parts
- of the source want to take special action if MYMALLOC is used.
- This may include different sorts of profiling or error detection.
-
-d_nice (d_nice.U):
- This variable conditionally defines the HAS_NICE symbol, which
- indicates to the C program that the nice() routine is available.
-
-d_nv_preserves_uv (perlxv.U):
- This variable indicates whether a variable of type nvtype
- can preserve all the bits a variable of type uvtype.
-
-d_nv_preserves_uv_bits (perlxv.U):
- This variable indicates how many of bits type uvtype
- a variable nvtype can preserve.
-
-d_off64_t (d_off64_t.U):
- This symbol will be defined if the C compiler supports off64_t.
-
-d_old_pthread_create_joinable (d_pthrattrj.U):
- This variable conditionally defines pthread_create_joinable.
- undef if pthread.h defines PTHREAD_CREATE_JOINABLE.
-
-d_oldpthreads (usethreads.U):
- This variable conditionally defines the OLD_PTHREADS_API symbol,
- and indicates that Perl should be built to use the old
- draft POSIX threads API. This is only potentially meaningful if
- usethreads is set.
-
-d_oldsock (d_socket.U):
- This variable conditionally defines the OLDSOCKET symbol, which
- indicates that the BSD socket interface is based on 4.1c and not 4.2.
-
-d_open3 (d_open3.U):
- This variable conditionally defines the HAS_OPEN3 manifest constant,
- which indicates to the C program that the 3 argument version of
- the open(2) function is available.
-
-d_pathconf (d_pathconf.U):
- This variable conditionally defines the HAS_PATHCONF symbol, which
- indicates to the C program that the pathconf() routine is available
- to determine file-system related limits and options associated
- with a given filename.
-
-d_pause (d_pause.U):
- This variable conditionally defines the HAS_PAUSE symbol, which
- indicates to the C program that the pause() routine is available
- to suspend a process until a signal is received.
-
-d_perl_otherlibdirs (otherlibdirs.U):
- This variable conditionally defines PERL_OTHERLIBDIRS, which
- contains a colon-separated set of paths for the perl binary to
- include in @INC. See also otherlibdirs.
-
-d_phostname (d_gethname.U):
- This variable conditionally defines the HAS_PHOSTNAME symbol, which
- contains the shell command which, when fed to popen(), may be
- used to derive the host name.
-
-d_pipe (d_pipe.U):
- This variable conditionally defines the HAS_PIPE symbol, which
- indicates to the C program that the pipe() routine is available
- to create an inter-process channel.
-
-d_poll (d_poll.U):
- This variable conditionally defines the HAS_POLL symbol, which
- indicates to the C program that the poll() routine is available
- to poll active file descriptors.
-
-d_portable (d_portable.U):
- This variable conditionally defines the PORTABLE symbol, which
- indicates to the C program that it should not assume that it is
- running on the machine it was compiled on.
-
-d_PRId64 (quadfio.U):
- This variable conditionally defines the PERL_PRId64 symbol, which
- indiciates that stdio has a symbol to print 64-bit decimal numbers.
-
-d_PRIeldbl (longdblfio.U):
- This variable conditionally defines the PERL_PRIfldbl symbol, which
- indiciates that stdio has a symbol to print long doubles.
-
-d_PRIEUldbl (longdblfio.U):
- This variable conditionally defines the PERL_PRIfldbl symbol, which
- indiciates that stdio has a symbol to print long doubles.
- The 'U' in the name is to separate this from d_PRIeldbl so that even
- case-blind systems can see the difference.
-
-d_PRIfldbl (longdblfio.U):
- This variable conditionally defines the PERL_PRIfldbl symbol, which
- indiciates that stdio has a symbol to print long doubles.
-
-d_PRIFUldbl (longdblfio.U):
- This variable conditionally defines the PERL_PRIfldbl symbol, which
- indiciates that stdio has a symbol to print long doubles.
- The 'U' in the name is to separate this from d_PRIfldbl so that even
- case-blind systems can see the difference.
-
-d_PRIgldbl (longdblfio.U):
- This variable conditionally defines the PERL_PRIfldbl symbol, which
- indiciates that stdio has a symbol to print long doubles.
-
-d_PRIGUldbl (longdblfio.U):
- This variable conditionally defines the PERL_PRIfldbl symbol, which
- indiciates that stdio has a symbol to print long doubles.
- The 'U' in the name is to separate this from d_PRIgldbl so that even
- case-blind systems can see the difference.
-
-d_PRIi64 (quadfio.U):
- This variable conditionally defines the PERL_PRIi64 symbol, which
- indiciates that stdio has a symbol to print 64-bit decimal numbers.
-
-d_PRIo64 (quadfio.U):
- This variable conditionally defines the PERL_PRIo64 symbol, which
- indiciates that stdio has a symbol to print 64-bit octal numbers.
-
-d_PRIu64 (quadfio.U):
- This variable conditionally defines the PERL_PRIu64 symbol, which
- indiciates that stdio has a symbol to print 64-bit unsigned decimal
- numbers.
-
-d_PRIx64 (quadfio.U):
- This variable conditionally defines the PERL_PRIx64 symbol, which
- indiciates that stdio has a symbol to print 64-bit hexadecimal numbers.
-
-d_PRIXU64 (quadfio.U):
- This variable conditionally defines the PERL_PRIXU64 symbol, which
- indiciates that stdio has a symbol to print 64-bit hExADECimAl numbers.
- The 'U' in the name is to separate this from d_PRIx64 so that even
- case-blind systems can see the difference.
-
-d_pthread_yield (d_pthread_y.U):
- This variable conditionally defines the HAS_PTHREAD_YIELD
- symbol if the pthread_yield routine is available to yield
- the execution of the current thread.
-
-d_pwage (i_pwd.U):
- This variable conditionally defines PWAGE, which indicates
- that struct passwd contains pw_age.
-
-d_pwchange (i_pwd.U):
- This variable conditionally defines PWCHANGE, which indicates
- that struct passwd contains pw_change.
-
-d_pwclass (i_pwd.U):
- This variable conditionally defines PWCLASS, which indicates
- that struct passwd contains pw_class.
-
-d_pwcomment (i_pwd.U):
- This variable conditionally defines PWCOMMENT, which indicates
- that struct passwd contains pw_comment.
-
-d_pwexpire (i_pwd.U):
- This variable conditionally defines PWEXPIRE, which indicates
- that struct passwd contains pw_expire.
-
-d_pwgecos (i_pwd.U):
- This variable conditionally defines PWGECOS, which indicates
- that struct passwd contains pw_gecos.
-
-d_pwpasswd (i_pwd.U):
- This variable conditionally defines PWPASSWD, which indicates
- that struct passwd contains pw_passwd.
-
-d_pwquota (i_pwd.U):
- This variable conditionally defines PWQUOTA, which indicates
- that struct passwd contains pw_quota.
-
-d_qgcvt (d_qgcvt.U):
- This variable conditionally defines the HAS_QGCVT symbol, which
- indicates to the C program that the qgcvt() routine is available.
-
-d_quad (quadtype.U):
- This variable, if defined, tells that there's a 64-bit integer type,
- quadtype.
-
-d_readdir (d_readdir.U):
- This variable conditionally defines HAS_READDIR if readdir() is
- available to read directory entries.
-
-d_readlink (d_readlink.U):
- This variable conditionally defines the HAS_READLINK symbol, which
- indicates to the C program that the readlink() routine is available
- to read the value of a symbolic link.
-
-d_rename (d_rename.U):
- This variable conditionally defines the HAS_RENAME symbol, which
- indicates to the C program that the rename() routine is available
- to rename files.
-
-d_rewinddir (d_readdir.U):
- This variable conditionally defines HAS_REWINDDIR if rewinddir() is
- available.
-
-d_rmdir (d_rmdir.U):
- This variable conditionally defines HAS_RMDIR if rmdir() is
- available to remove directories.
-
-d_safebcpy (d_safebcpy.U):
- This variable conditionally defines the HAS_SAFE_BCOPY symbol if
- the bcopy() routine can do overlapping copies.
-
-d_safemcpy (d_safemcpy.U):
- This variable conditionally defines the HAS_SAFE_MEMCPY symbol if
- the memcpy() routine can do overlapping copies.
-
-d_sanemcmp (d_sanemcmp.U):
- This variable conditionally defines the HAS_SANE_MEMCMP symbol if
- the memcpy() routine is available and can be used to compare relative
- magnitudes of chars with their high bits set.
-
-d_sbrkproto (d_sbrkproto.U):
- This variable conditionally defines the HAS_SBRK_PROTO symbol,
- which indicates to the C program that the system provides
- a prototype for the sbrk() function. Otherwise, it is
- up to the program to supply one.
-
-d_sched_yield (d_pthread_y.U):
- This variable conditionally defines the HAS_SCHED_YIELD
- symbol if the sched_yield routine is available to yield
- the execution of the current thread.
-
-d_scm_rights (d_socket.U):
- This variable conditionally defines the HAS_SCM_RIGHTS symbol,
- which indicates that the SCM_RIGHTS is available. #ifdef is
- not enough because it may be an enum, glibc has been known to do this.
-
-d_SCNfldbl (longdblfio.U):
- This variable conditionally defines the PERL_PRIfldbl symbol, which
- indiciates that stdio has a symbol to scan long doubles.
-
-d_seekdir (d_readdir.U):
- This variable conditionally defines HAS_SEEKDIR if seekdir() is
- available.
-
-d_select (d_select.U):
- This variable conditionally defines HAS_SELECT if select() is
- available to select active file descriptors. A <sys/time.h>
- inclusion may be necessary for the timeout field.
-
-d_sem (d_sem.U):
- This variable conditionally defines the HAS_SEM symbol, which
- indicates that the entire sem*(2) library is present.
-
-d_semctl (d_semctl.U):
- This variable conditionally defines the HAS_SEMCTL symbol, which
- indicates to the C program that the semctl() routine is available.
-
-d_semctl_semid_ds (d_union_semun.U):
- This variable conditionally defines USE_SEMCTL_SEMID_DS, which
- indicates that struct semid_ds * is to be used for semctl IPC_STAT.
-
-d_semctl_semun (d_union_semun.U):
- This variable conditionally defines USE_SEMCTL_SEMUN, which
- indicates that union semun is to be used for semctl IPC_STAT.
-
-d_semget (d_semget.U):
- This variable conditionally defines the HAS_SEMGET symbol, which
- indicates to the C program that the semget() routine is available.
-
-d_semop (d_semop.U):
- This variable conditionally defines the HAS_SEMOP symbol, which
- indicates to the C program that the semop() routine is available.
-
-d_setegid (d_setegid.U):
- This variable conditionally defines the HAS_SETEGID symbol, which
- indicates to the C program that the setegid() routine is available
- to change the effective gid of the current program.
-
-d_seteuid (d_seteuid.U):
- This variable conditionally defines the HAS_SETEUID symbol, which
- indicates to the C program that the seteuid() routine is available
- to change the effective uid of the current program.
-
-d_setgrent (d_setgrent.U):
- This variable conditionally defines the HAS_SETGRENT symbol, which
- indicates to the C program that the setgrent() routine is available
- for initializing sequential access to the group database.
-
-d_setgrps (d_setgrps.U):
- This variable conditionally defines the HAS_SETGROUPS symbol, which
- indicates to the C program that the setgroups() routine is available
- to set the list of process groups.
-
-d_sethent (d_sethent.U):
- This variable conditionally defines HAS_SETHOSTENT if sethostent() is
- available.
-
-d_setlinebuf (d_setlnbuf.U):
- This variable conditionally defines the HAS_SETLINEBUF symbol, which
- indicates to the C program that the setlinebuf() routine is available
- to change stderr or stdout from block-buffered or unbuffered to a
- line-buffered mode.
-
-d_setlocale (d_setlocale.U):
- This variable conditionally defines HAS_SETLOCALE if setlocale() is
- available to handle locale-specific ctype implementations.
-
-d_setnent (d_setnent.U):
- This variable conditionally defines HAS_SETNETENT if setnetent() is
- available.
-
-d_setpent (d_setpent.U):
- This variable conditionally defines HAS_SETPROTOENT if setprotoent() is
- available.
-
-d_setpgid (d_setpgid.U):
- This variable conditionally defines the HAS_SETPGID symbol if the
- setpgid(pid, gpid) function is available to set process group ID.
-
-d_setpgrp2 (d_setpgrp2.U):
- This variable conditionally defines the HAS_SETPGRP2 symbol, which
- indicates to the C program that the setpgrp2() (as in DG/UX) routine
- is available to set the current process group.
-
-d_setpgrp (d_setpgrp.U):
- This variable conditionally defines HAS_SETPGRP if setpgrp() is
- available to set the current process group.
-
-d_setprior (d_setprior.U):
- This variable conditionally defines HAS_SETPRIORITY if setpriority()
- is available to set a process's priority.
-
-d_setproctitle (d_setproctitle.U):
- This variable conditionally defines the HAS_SETPROCTITLE symbol,
- which indicates to the C program that the setproctitle() routine
- is available.
-
-d_setpwent (d_setpwent.U):
- This variable conditionally defines the HAS_SETPWENT symbol, which
- indicates to the C program that the setpwent() routine is available
- for initializing sequential access to the passwd database.
-
-d_setregid (d_setregid.U):
- This variable conditionally defines HAS_SETREGID if setregid() is
- available to change the real and effective gid of the current
- process.
-
-d_setresgid (d_setregid.U):
- This variable conditionally defines HAS_SETRESGID if setresgid() is
- available to change the real, effective and saved gid of the current
- process.
-
-d_setresuid (d_setreuid.U):
- This variable conditionally defines HAS_SETREUID if setresuid() is
- available to change the real, effective and saved uid of the current
- process.
-
-d_setreuid (d_setreuid.U):
- This variable conditionally defines HAS_SETREUID if setreuid() is
- available to change the real and effective uid of the current
- process.
-
-d_setrgid (d_setrgid.U):
- This variable conditionally defines the HAS_SETRGID symbol, which
- indicates to the C program that the setrgid() routine is available
- to change the real gid of the current program.
-
-d_setruid (d_setruid.U):
- This variable conditionally defines the HAS_SETRUID symbol, which
- indicates to the C program that the setruid() routine is available
- to change the real uid of the current program.
-
-d_setsent (d_setsent.U):
- This variable conditionally defines HAS_SETSERVENT if setservent() is
- available.
-
-d_setsid (d_setsid.U):
- This variable conditionally defines HAS_SETSID if setsid() is
- available to set the process group ID.
-
-d_setvbuf (d_setvbuf.U):
- This variable conditionally defines the HAS_SETVBUF symbol, which
- indicates to the C program that the setvbuf() routine is available
- to change buffering on an open stdio stream.
-
-d_sfio (d_sfio.U):
- This variable conditionally defines the USE_SFIO symbol,
- and indicates whether sfio is available (and should be used).
-
-d_shm (d_shm.U):
- This variable conditionally defines the HAS_SHM symbol, which
- indicates that the entire shm*(2) library is present.
-
-d_shmat (d_shmat.U):
- This variable conditionally defines the HAS_SHMAT symbol, which
- indicates to the C program that the shmat() routine is available.
-
-d_shmatprototype (d_shmat.U):
- This variable conditionally defines the HAS_SHMAT_PROTOTYPE
- symbol, which indicates that sys/shm.h has a prototype for
- shmat.
-
-d_shmctl (d_shmctl.U):
- This variable conditionally defines the HAS_SHMCTL symbol, which
- indicates to the C program that the shmctl() routine is available.
-
-d_shmdt (d_shmdt.U):
- This variable conditionally defines the HAS_SHMDT symbol, which
- indicates to the C program that the shmdt() routine is available.
-
-d_shmget (d_shmget.U):
- This variable conditionally defines the HAS_SHMGET symbol, which
- indicates to the C program that the shmget() routine is available.
-
-d_sigaction (d_sigaction.U):
- This variable conditionally defines the HAS_SIGACTION symbol, which
- indicates that the Vr4 sigaction() routine is available.
-
-d_sigprocmask (d_sigprocmask.U):
- This variable conditionally defines HAS_SIGPROCMASK
- if sigprocmask() is available to examine or change the signal mask
- of the calling process.
-
-d_sigsetjmp (d_sigsetjmp.U):
- This variable conditionally defines the HAS_SIGSETJMP symbol,
- which indicates that the sigsetjmp() routine is available to
- call setjmp() and optionally save the process's signal mask.
-
-d_socket (d_socket.U):
- This variable conditionally defines HAS_SOCKET, which indicates
- that the BSD socket interface is supported.
-
-d_socklen_t (d_socklen_t.U):
- This symbol will be defined if the C compiler supports socklen_t.
-
-d_sockpair (d_socket.U):
- This variable conditionally defines the HAS_SOCKETPAIR symbol, which
- indicates that the BSD socketpair() is supported.
-
-d_socks5_init (d_socks5_init.U):
- This variable conditionally defines the HAS_SOCKS5_INIT symbol, which
- indicates to the C program that the socks5_init() routine is available.
-
-d_sqrtl (d_sqrtl.U):
- This variable conditionally defines the HAS_SQRTL symbol, which
- indicates to the C program that the sqrtl() routine is available.
-
-d_statblks (d_statblks.U):
- This variable conditionally defines USE_STAT_BLOCKS
- if this system has a stat structure declaring
- st_blksize and st_blocks.
-
-d_statfs_f_flags (d_statfs_f_flags.U):
- This variable conditionally defines the HAS_STRUCT_STATFS_F_FLAGS
- symbol, which indicates to struct statfs from has f_flags member.
- This kind of struct statfs is coming from sys/mount.h (BSD),
- not from sys/statfs.h (SYSV).
-
-d_statfs_s (d_statfs_s.U):
- This variable conditionally defines the HAS_STRUCT_STATFS symbol,
- which indicates that the struct statfs is supported.
-
-d_statvfs (d_statvfs.U):
- This variable conditionally defines the HAS_STATVFS symbol, which
- indicates to the C program that the statvfs() routine is available.
-
-d_stdio_cnt_lval (d_stdstdio.U):
- This variable conditionally defines STDIO_CNT_LVALUE if the
- FILE_cnt macro can be used as an lvalue.
-
-d_stdio_ptr_lval (d_stdstdio.U):
- This variable conditionally defines STDIO_PTR_LVALUE if the
- FILE_ptr macro can be used as an lvalue.
-
-d_stdio_ptr_lval_nochange_cnt (d_stdstdio.U):
- This symbol is defined if using the FILE_ptr macro as an lvalue
- to increase the pointer by n leaves File_cnt(fp) unchanged.
-
-d_stdio_ptr_lval_sets_cnt (d_stdstdio.U):
- This symbol is defined if using the FILE_ptr macro as an lvalue
- to increase the pointer by n has the side effect of decreasing the
- value of File_cnt(fp) by n.
-
-d_stdio_stream_array (stdio_streams.U):
- This variable tells whether there is an array holding
- the stdio streams.
-
-d_stdiobase (d_stdstdio.U):
- This variable conditionally defines USE_STDIO_BASE if this system
- has a FILE structure declaring a usable _base field (or equivalent)
- in stdio.h.
-
-d_stdstdio (d_stdstdio.U):
- This variable conditionally defines USE_STDIO_PTR if this system
- has a FILE structure declaring usable _ptr and _cnt fields (or
- equivalent) in stdio.h.
-
-d_strchr (d_strchr.U):
- This variable conditionally defines HAS_STRCHR if strchr() and
- strrchr() are available for string searching.
-
-d_strcoll (d_strcoll.U):
- This variable conditionally defines HAS_STRCOLL if strcoll() is
- available to compare strings using collating information.
-
-d_strctcpy (d_strctcpy.U):
- This variable conditionally defines the USE_STRUCT_COPY symbol, which
- indicates to the C program that this C compiler knows how to copy
- structures.
-
-d_strerrm (d_strerror.U):
- This variable holds what Strerrr is defined as to translate an error
- code condition into an error message string. It could be 'strerror'
- or a more complex macro emulating strrror with sys_errlist[], or the
- "unknown" string when both strerror and sys_errlist are missing.
-
-d_strerror (d_strerror.U):
- This variable conditionally defines HAS_STRERROR if strerror() is
- available to translate error numbers to strings.
-
-d_strtod (d_strtod.U):
- This variable conditionally defines the HAS_STRTOD symbol, which
- indicates to the C program that the strtod() routine is available
- to provide better numeric string conversion than atof().
-
-d_strtol (d_strtol.U):
- This variable conditionally defines the HAS_STRTOL symbol, which
- indicates to the C program that the strtol() routine is available
- to provide better numeric string conversion than atoi() and friends.
-
-d_strtold (d_strtold.U):
- This variable conditionally defines the HAS_STRTOLD symbol, which
- indicates to the C program that the strtold() routine is available.
-
-d_strtoll (d_strtoll.U):
- This variable conditionally defines the HAS_STRTOLL symbol, which
- indicates to the C program that the strtoll() routine is available.
-
-d_strtoq (d_strtoq.U):
- This variable conditionally defines the HAS_STRTOQ symbol, which
- indicates to the C program that the strtoq() routine is available.
-
-d_strtoul (d_strtoul.U):
- This variable conditionally defines the HAS_STRTOUL symbol, which
- indicates to the C program that the strtoul() routine is available
- to provide conversion of strings to unsigned long.
-
-d_strtoull (d_strtoull.U):
- This variable conditionally defines the HAS_STRTOULL symbol, which
- indicates to the C program that the strtoull() routine is available.
-
-d_strtouq (d_strtouq.U):
- This variable conditionally defines the HAS_STRTOUQ symbol, which
- indicates to the C program that the strtouq() routine is available.
-
-d_strxfrm (d_strxfrm.U):
- This variable conditionally defines HAS_STRXFRM if strxfrm() is
- available to transform strings.
-
-d_suidsafe (d_dosuid.U):
- This variable conditionally defines SETUID_SCRIPTS_ARE_SECURE_NOW
- if setuid scripts can be secure. This test looks in /dev/fd/.
-
-d_symlink (d_symlink.U):
- This variable conditionally defines the HAS_SYMLINK symbol, which
- indicates to the C program that the symlink() routine is available
- to create symbolic links.
-
-d_syscall (d_syscall.U):
- This variable conditionally defines HAS_SYSCALL if syscall() is
- available call arbitrary system calls.
-
-d_sysconf (d_sysconf.U):
- This variable conditionally defines the HAS_SYSCONF symbol, which
- indicates to the C program that the sysconf() routine is available
- to determine system related limits and options.
-
-d_sysernlst (d_strerror.U):
- This variable conditionally defines HAS_SYS_ERRNOLIST if sys_errnolist[]
- is available to translate error numbers to the symbolic name.
-
-d_syserrlst (d_strerror.U):
- This variable conditionally defines HAS_SYS_ERRLIST if sys_errlist[] is
- available to translate error numbers to strings.
-
-d_system (d_system.U):
- This variable conditionally defines HAS_SYSTEM if system() is
- available to issue a shell command.
-
-d_tcgetpgrp (d_tcgtpgrp.U):
- This variable conditionally defines the HAS_TCGETPGRP symbol, which
- indicates to the C program that the tcgetpgrp() routine is available.
- to get foreground process group ID.
-
-d_tcsetpgrp (d_tcstpgrp.U):
- This variable conditionally defines the HAS_TCSETPGRP symbol, which
- indicates to the C program that the tcsetpgrp() routine is available
- to set foreground process group ID.
-
-d_telldir (d_readdir.U):
- This variable conditionally defines HAS_TELLDIR if telldir() is
- available.
-
-d_telldirproto (d_telldirproto.U):
- This variable conditionally defines the HAS_TELLDIR_PROTO symbol,
- which indicates to the C program that the system provides
- a prototype for the telldir() function. Otherwise, it is
- up to the program to supply one.
-
-d_time (d_time.U):
- This variable conditionally defines the HAS_TIME symbol, which indicates
- that the time() routine exists. The time() routine is normaly
- provided on UNIX systems.
-
-d_times (d_times.U):
- This variable conditionally defines the HAS_TIMES symbol, which indicates
- that the times() routine exists. The times() routine is normaly
- provided on UNIX systems. You may have to include <sys/times.h>.
-
-d_truncate (d_truncate.U):
- This variable conditionally defines HAS_TRUNCATE if truncate() is
- available to truncate files.
-
-d_tzname (d_tzname.U):
- This variable conditionally defines HAS_TZNAME if tzname[] is
- available to access timezone names.
-
-d_umask (d_umask.U):
- This variable conditionally defines the HAS_UMASK symbol, which
- indicates to the C program that the umask() routine is available.
- to set and get the value of the file creation mask.
-
-d_uname (d_gethname.U):
- This variable conditionally defines the HAS_UNAME symbol, which
- indicates to the C program that the uname() routine may be
- used to derive the host name.
-
-d_union_semun (d_union_semun.U):
- This variable conditionally defines HAS_UNION_SEMUN if the
- union semun is defined by including <sys/sem.h>.
-
-d_ustat (d_ustat.U):
- This variable conditionally defines HAS_USTAT if ustat() is
- available to query file system statistics by dev_t.
-
-d_vendorarch (vendorarch.U):
- This variable conditionally defined PERL_VENDORARCH.
-
-d_vendorbin (vendorbin.U):
- This variable conditionally defines PERL_VENDORBIN.
-
-d_vendorlib (vendorlib.U):
- This variable conditionally defines PERL_VENDORLIB.
-
-d_vfork (d_vfork.U):
- This variable conditionally defines the HAS_VFORK symbol, which
- indicates the vfork() routine is available.
-
-d_void_closedir (d_closedir.U):
- This variable conditionally defines VOID_CLOSEDIR if closedir()
- does not return a value.
-
-d_voidsig (d_voidsig.U):
- This variable conditionally defines VOIDSIG if this system
- declares "void (*signal(...))()" in signal.h. The old way was to
- declare it as "int (*signal(...))()".
-
-d_voidtty (i_sysioctl.U):
- This variable conditionally defines USE_IOCNOTTY to indicate that the
- ioctl() call with TIOCNOTTY should be used to void tty association.
- Otherwise (on USG probably), it is enough to close the standard file
- decriptors and do a setpgrp().
-
-d_volatile (d_volatile.U):
- This variable conditionally defines the HASVOLATILE symbol, which
- indicates to the C program that this C compiler knows about the
- volatile declaration.
-
-d_vprintf (d_vprintf.U):
- This variable conditionally defines the HAS_VPRINTF symbol, which
- indicates to the C program that the vprintf() routine is available
- to printf with a pointer to an argument list.
-
-d_wait4 (d_wait4.U):
- This variable conditionally defines the HAS_WAIT4 symbol, which
- indicates the wait4() routine is available.
-
-d_waitpid (d_waitpid.U):
- This variable conditionally defines HAS_WAITPID if waitpid() is
- available to wait for child process.
-
-d_wcstombs (d_wcstombs.U):
- This variable conditionally defines the HAS_WCSTOMBS symbol, which
- indicates to the C program that the wcstombs() routine is available
- to convert wide character strings to multibyte strings.
-
-d_wctomb (d_wctomb.U):
- This variable conditionally defines the HAS_WCTOMB symbol, which
- indicates to the C program that the wctomb() routine is available
- to convert a wide character to a multibyte.
-
-d_xenix (Guess.U):
- This variable conditionally defines the symbol XENIX, which alerts
- the C program that it runs under Xenix.
-
-date (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the date program. After Configure runs,
- the value is reset to a plain "date" and is not useful.
-
-db_hashtype (i_db.U):
- This variable contains the type of the hash structure element
- in the <db.h> header file. In older versions of DB, it was
- int, while in newer ones it is u_int32_t.
-
-db_prefixtype (i_db.U):
- This variable contains the type of the prefix structure element
- in the <db.h> header file. In older versions of DB, it was
- int, while in newer ones it is size_t.
-
-defvoidused (voidflags.U):
- This variable contains the default value of the VOIDUSED symbol (15).
-
-direntrytype (i_dirent.U):
- This symbol is set to 'struct direct' or 'struct dirent' depending on
- whether dirent is available or not. You should use this pseudo type to
- portably declare your directory entries.
-
-dlext (dlext.U):
- This variable contains the extension that is to be used for the
- dynamically loaded modules that perl generaties.
-
-dlsrc (dlsrc.U):
- This variable contains the name of the dynamic loading file that
- will be used with the package.
-
-doublesize (doublesize.U):
- This variable contains the value of the DOUBLESIZE symbol, which
- indicates to the C program how many bytes there are in a double.
-
-drand01 (randfunc.U):
- Indicates the macro to be used to generate normalized
- random numbers. Uses randfunc, often divided by
- (double) (((unsigned long) 1 << randbits)) in order to
- normalize the result.
- In C programs, the macro 'Drand01' is mapped to drand01.
-
-dynamic_ext (Extensions.U):
- This variable holds a list of XS extension files we want to
- link dynamically into the package. It is used by Makefile.
-
-eagain (nblock_io.U):
- This variable bears the symbolic errno code set by read() when no
- data is present on the file and non-blocking I/O was enabled (otherwise,
- read() blocks naturally).
-
-ebcdic (ebcdic.U):
- This variable conditionally defines EBCDIC if this
- system uses EBCDIC encoding. Among other things, this
- means that the character ranges are not contiguous.
- See trnl.U
-
-echo (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the echo program. After Configure runs,
- the value is reset to a plain "echo" and is not useful.
-
-egrep (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the egrep program. After Configure runs,
- the value is reset to a plain "egrep" and is not useful.
-
-emacs (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-eunicefix (Init.U):
- When running under Eunice this variable contains a command which will
- convert a shell script to the proper form of text file for it to be
- executable by the shell. On other systems it is a no-op.
-
-exe_ext (Unix.U):
- This is an old synonym for _exe.
-
-expr (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the expr program. After Configure runs,
- the value is reset to a plain "expr" and is not useful.
-
-extensions (Extensions.U):
- This variable holds a list of all extension files (both XS and
- non-xs linked into the package. It is propagated to Config.pm
- and is typically used to test whether a particular extesion
- is available.
-
-fflushall (fflushall.U):
- This symbol, if defined, tells that to flush
- all pending stdio output one must loop through all
- the stdio file handles stored in an array and fflush them.
- Note that if fflushNULL is defined, fflushall will not
- even be probed for and will be left undefined.
-
-fflushNULL (fflushall.U):
- This symbol, if defined, tells that fflush(NULL) does flush
- all pending stdio output.
-
-find (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-firstmakefile (Unix.U):
- This variable defines the first file searched by make. On unix,
- it is makefile (then Makefile). On case-insensitive systems,
- it might be something else. This is only used to deal with
- convoluted make depend tricks.
-
-flex (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-fpossize (fpossize.U):
- This variable contains the size of a fpostype in bytes.
-
-fpostype (fpostype.U):
- This variable defines Fpos_t to be something like fpos_t, long,
- uint, or whatever type is used to declare file positions in libc.
-
-freetype (mallocsrc.U):
- This variable contains the return type of free(). It is usually
- void, but occasionally int.
-
-full_ar (Loc_ar.U):
- This variable contains the full pathname to 'ar', whether or
- not the user has specified 'portability'. This is only used
- in the Makefile.SH.
-
-full_csh (d_csh.U):
- This variable contains the full pathname to 'csh', whether or
- not the user has specified 'portability'. This is only used
- in the compiled C program, and we assume that all systems which
- can share this executable will have the same full pathname to
- 'csh.'
-
-full_sed (Loc_sed.U):
- This variable contains the full pathname to 'sed', whether or
- not the user has specified 'portability'. This is only used
- in the compiled C program, and we assume that all systems which
- can share this executable will have the same full pathname to
- 'sed.'
-
-gccosandvers (gccvers.U):
- If GNU cc (gcc) is used, this variable the operating system and
- version used to compile the gcc. It is set to '' if not gcc,
- or if nothing useful can be parsed as the os version.
-
-gccversion (gccvers.U):
- If GNU cc (gcc) is used, this variable holds '1' or '2' to
- indicate whether the compiler is version 1 or 2. This is used in
- setting some of the default cflags. It is set to '' if not gcc.
-
-gidformat (gidf.U):
- This variable contains the format string used for printing a Gid_t.
-
-gidsign (gidsign.U):
- This variable contains the signedness of a gidtype.
- 1 for unsigned, -1 for signed.
-
-gidsize (gidsize.U):
- This variable contains the size of a gidtype in bytes.
-
-gidtype (gidtype.U):
- This variable defines Gid_t to be something like gid_t, int,
- ushort, or whatever type is used to declare the return type
- of getgid(). Typically, it is the type of group ids in the kernel.
-
-glibpth (libpth.U):
- This variable holds the general path (space-separated) used to
- find libraries. It may contain directories that do not exist on
- this platform, libpth is the cleaned-up version.
-
-grep (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the grep program. After Configure runs,
- the value is reset to a plain "grep" and is not useful.
-
-groupcat (nis.U):
- This variable contains a command that produces the text of the
- /etc/group file. This is normally "cat /etc/group", but can be
- "ypcat group" when NIS is used.
- On some systems, such as os390, there may be no equivalent
- command, in which case this variable is unset.
-
-groupstype (groupstype.U):
- This variable defines Groups_t to be something like gid_t, int,
- ushort, or whatever type is used for the second argument to
- getgroups() and setgroups(). Usually, this is the same as
- gidtype (gid_t), but sometimes it isn't.
-
-gzip (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the gzip program. After Configure runs,
- the value is reset to a plain "gzip" and is not useful.
-
-h_fcntl (h_fcntl.U):
- This is variable gets set in various places to tell i_fcntl that
- <fcntl.h> should be included.
-
-h_sysfile (h_sysfile.U):
- This is variable gets set in various places to tell i_sys_file that
- <sys/file.h> should be included.
-
-hint (Oldconfig.U):
- Gives the type of hints used for previous answers. May be one of
- "default", "recommended" or "previous".
-
-hostcat (nis.U):
- This variable contains a command that produces the text of the
- /etc/hosts file. This is normally "cat /etc/hosts", but can be
- "ypcat hosts" when NIS is used.
- On some systems, such as os390, there may be no equivalent
- command, in which case this variable is unset.
-
-i16size (perlxv.U):
- This variable is the size of an I16 in bytes.
-
-i16type (perlxv.U):
- This variable contains the C type used for Perl's I16.
-
-i32size (perlxv.U):
- This variable is the size of an I32 in bytes.
-
-i32type (perlxv.U):
- This variable contains the C type used for Perl's I32.
-
-i64size (perlxv.U):
- This variable is the size of an I64 in bytes.
-
-i64type (perlxv.U):
- This variable contains the C type used for Perl's I64.
-
-i8size (perlxv.U):
- This variable is the size of an I8 in bytes.
-
-i8type (perlxv.U):
- This variable contains the C type used for Perl's I8.
-
-i_arpainet (i_arpainet.U):
- This variable conditionally defines the I_ARPA_INET symbol,
- and indicates whether a C program should include <arpa/inet.h>.
-
-i_bsdioctl (i_sysioctl.U):
- This variable conditionally defines the I_SYS_BSDIOCTL symbol, which
- indicates to the C program that <sys/bsdioctl.h> exists and should
- be included.
-
-i_db (i_db.U):
- This variable conditionally defines the I_DB symbol, and indicates
- whether a C program may include Berkeley's DB include file <db.h>.
-
-i_dbm (i_dbm.U):
- This variable conditionally defines the I_DBM symbol, which
- indicates to the C program that <dbm.h> exists and should
- be included.
-
-i_dirent (i_dirent.U):
- This variable conditionally defines I_DIRENT, which indicates
- to the C program that it should include <dirent.h>.
-
-i_dld (i_dld.U):
- This variable conditionally defines the I_DLD symbol, which
- indicates to the C program that <dld.h> (GNU dynamic loading)
- exists and should be included.
-
-i_dlfcn (i_dlfcn.U):
- This variable conditionally defines the I_DLFCN symbol, which
- indicates to the C program that <dlfcn.h> exists and should
- be included.
-
-i_fcntl (i_fcntl.U):
- This variable controls the value of I_FCNTL (which tells
- the C program to include <fcntl.h>).
-
-i_float (i_float.U):
- This variable conditionally defines the I_FLOAT symbol, and indicates
- whether a C program may include <float.h> to get symbols like DBL_MAX
- or DBL_MIN, i.e. machine dependent floating point values.
-
-i_gdbm (i_gdbm.U):
- This variable conditionally defines the I_GDBM symbol, which
- indicates to the C program that <gdbm.h> exists and should
- be included.
-
-i_grp (i_grp.U):
- This variable conditionally defines the I_GRP symbol, and indicates
- whether a C program should include <grp.h>.
-
-i_iconv (i_iconv.U):
- This variable conditionally defines the I_ICONV symbol, and indicates
- whether a C program should include <iconv.h>.
-
-i_ieeefp (i_ieeefp.U):
- This variable conditionally defines the I_IEEEFP symbol, and indicates
- whether a C program should include <ieeefp.h>.
-
-i_inttypes (i_inttypes.U):
- This variable conditionally defines the I_INTTYPES symbol,
- and indicates whether a C program should include <inttypes.h>.
-
-i_libutil (i_libutil.U):
- This variable conditionally defines the I_LIBUTIL symbol, and indicates
- whether a C program should include <libutil.h>.
-
-i_limits (i_limits.U):
- This variable conditionally defines the I_LIMITS symbol, and indicates
- whether a C program may include <limits.h> to get symbols like WORD_BIT
- and friends.
-
-i_locale (i_locale.U):
- This variable conditionally defines the I_LOCALE symbol,
- and indicates whether a C program should include <locale.h>.
-
-i_machcthr (i_machcthr.U):
- This variable conditionally defines the I_MACH_CTHREADS symbol,
- and indicates whether a C program should include <mach/cthreads.h>.
-
-i_malloc (i_malloc.U):
- This variable conditionally defines the I_MALLOC symbol, and indicates
- whether a C program should include <malloc.h>.
-
-i_math (i_math.U):
- This variable conditionally defines the I_MATH symbol, and indicates
- whether a C program may include <math.h>.
-
-i_memory (i_memory.U):
- This variable conditionally defines the I_MEMORY symbol, and indicates
- whether a C program should include <memory.h>.
-
-i_mntent (i_mntent.U):
- This variable conditionally defines the I_MNTENT symbol, and indicates
- whether a C program should include <mntent.h>.
-
-i_ndbm (i_ndbm.U):
- This variable conditionally defines the I_NDBM symbol, which
- indicates to the C program that <ndbm.h> exists and should
- be included.
-
-i_netdb (i_netdb.U):
- This variable conditionally defines the I_NETDB symbol, and indicates
- whether a C program should include <netdb.h>.
-
-i_neterrno (i_neterrno.U):
- This variable conditionally defines the I_NET_ERRNO symbol, which
- indicates to the C program that <net/errno.h> exists and should
- be included.
-
-i_netinettcp (i_netinettcp.U):
- This variable conditionally defines the I_NETINET_TCP symbol,
- and indicates whether a C program should include <netinet/tcp.h>.
-
-i_niin (i_niin.U):
- This variable conditionally defines I_NETINET_IN, which indicates
- to the C program that it should include <netinet/in.h>. Otherwise,
- you may try <sys/in.h>.
-
-i_poll (i_poll.U):
- This variable conditionally defines the I_POLL symbol, and indicates
- whether a C program should include <poll.h>.
-
-i_prot (i_prot.U):
- This variable conditionally defines the I_PROT symbol, and indicates
- whether a C program should include <prot.h>.
-
-i_pthread (i_pthread.U):
- This variable conditionally defines the I_PTHREAD symbol,
- and indicates whether a C program should include <pthread.h>.
-
-i_pwd (i_pwd.U):
- This variable conditionally defines I_PWD, which indicates
- to the C program that it should include <pwd.h>.
-
-i_rpcsvcdbm (i_dbm.U):
- This variable conditionally defines the I_RPCSVC_DBM symbol, which
- indicates to the C program that <rpcsvc/dbm.h> exists and should
- be included. Some System V systems might need this instead of <dbm.h>.
-
-i_sfio (i_sfio.U):
- This variable conditionally defines the I_SFIO symbol,
- and indicates whether a C program should include <sfio.h>.
-
-i_sgtty (i_termio.U):
- This variable conditionally defines the I_SGTTY symbol, which
- indicates to the C program that it should include <sgtty.h> rather
- than <termio.h>.
-
-i_shadow (i_shadow.U):
- This variable conditionally defines the I_SHADOW symbol, and indicates
- whether a C program should include <shadow.h>.
-
-i_socks (i_socks.U):
- This variable conditionally defines the I_SOCKS symbol, and indicates
- whether a C program should include <socks.h>.
-
-i_stdarg (i_varhdr.U):
- This variable conditionally defines the I_STDARG symbol, which
- indicates to the C program that <stdarg.h> exists and should
- be included.
-
-i_stddef (i_stddef.U):
- This variable conditionally defines the I_STDDEF symbol, which
- indicates to the C program that <stddef.h> exists and should
- be included.
-
-i_stdlib (i_stdlib.U):
- This variable conditionally defines the I_STDLIB symbol, which
- indicates to the C program that <stdlib.h> exists and should
- be included.
-
-i_string (i_string.U):
- This variable conditionally defines the I_STRING symbol, which
- indicates that <string.h> should be included rather than <strings.h>.
-
-i_sunmath (i_sunmath.U):
- This variable conditionally defines the I_SUNMATH symbol, and indicates
- whether a C program should include <sunmath.h>.
-
-i_sysaccess (i_sysaccess.U):
- This variable conditionally defines the I_SYS_ACCESS symbol,
- and indicates whether a C program should include <sys/access.h>.
-
-i_sysdir (i_sysdir.U):
- This variable conditionally defines the I_SYS_DIR symbol, and indicates
- whether a C program should include <sys/dir.h>.
-
-i_sysfile (i_sysfile.U):
- This variable conditionally defines the I_SYS_FILE symbol, and indicates
- whether a C program should include <sys/file.h> to get R_OK and friends.
-
-i_sysfilio (i_sysioctl.U):
- This variable conditionally defines the I_SYS_FILIO symbol, which
- indicates to the C program that <sys/filio.h> exists and should
- be included in preference to <sys/ioctl.h>.
-
-i_sysin (i_niin.U):
- This variable conditionally defines I_SYS_IN, which indicates
- to the C program that it should include <sys/in.h> instead of
- <netinet/in.h>.
-
-i_sysioctl (i_sysioctl.U):
- This variable conditionally defines the I_SYS_IOCTL symbol, which
- indicates to the C program that <sys/ioctl.h> exists and should
- be included.
-
-i_syslog (i_syslog.U):
- This variable conditionally defines the I_SYSLOG symbol,
- and indicates whether a C program should include <syslog.h>.
-
-i_sysmman (i_sysmman.U):
- This variable conditionally defines the I_SYS_MMAN symbol, and
- indicates whether a C program should include <sys/mman.h>.
-
-i_sysmode (i_sysmode.U):
- This variable conditionally defines the I_SYSMODE symbol,
- and indicates whether a C program should include <sys/mode.h>.
-
-i_sysmount (i_sysmount.U):
- This variable conditionally defines the I_SYSMOUNT symbol,
- and indicates whether a C program should include <sys/mount.h>.
-
-i_sysndir (i_sysndir.U):
- This variable conditionally defines the I_SYS_NDIR symbol, and indicates
- whether a C program should include <sys/ndir.h>.
-
-i_sysparam (i_sysparam.U):
- This variable conditionally defines the I_SYS_PARAM symbol, and indicates
- whether a C program should include <sys/param.h>.
-
-i_sysresrc (i_sysresrc.U):
- This variable conditionally defines the I_SYS_RESOURCE symbol,
- and indicates whether a C program should include <sys/resource.h>.
-
-i_syssecrt (i_syssecrt.U):
- This variable conditionally defines the I_SYS_SECURITY symbol,
- and indicates whether a C program should include <sys/security.h>.
-
-i_sysselct (i_sysselct.U):
- This variable conditionally defines I_SYS_SELECT, which indicates
- to the C program that it should include <sys/select.h> in order to
- get the definition of struct timeval.
-
-i_syssockio (i_sysioctl.U):
- This variable conditionally defines I_SYS_SOCKIO to indicate to the
- C program that socket ioctl codes may be found in <sys/sockio.h>
- instead of <sys/ioctl.h>.
-
-i_sysstat (i_sysstat.U):
- This variable conditionally defines the I_SYS_STAT symbol,
- and indicates whether a C program should include <sys/stat.h>.
-
-i_sysstatfs (i_sysstatfs.U):
- This variable conditionally defines the I_SYSSTATFS symbol,
- and indicates whether a C program should include <sys/statfs.h>.
-
-i_sysstatvfs (i_sysstatvfs.U):
- This variable conditionally defines the I_SYSSTATVFS symbol,
- and indicates whether a C program should include <sys/statvfs.h>.
-
-i_systime (i_time.U):
- This variable conditionally defines I_SYS_TIME, which indicates
- to the C program that it should include <sys/time.h>.
-
-i_systimek (i_time.U):
- This variable conditionally defines I_SYS_TIME_KERNEL, which
- indicates to the C program that it should include <sys/time.h>
- with KERNEL defined.
-
-i_systimes (i_systimes.U):
- This variable conditionally defines the I_SYS_TIMES symbol, and indicates
- whether a C program should include <sys/times.h>.
-
-i_systypes (i_systypes.U):
- This variable conditionally defines the I_SYS_TYPES symbol,
- and indicates whether a C program should include <sys/types.h>.
-
-i_sysuio (i_sysuio.U):
- This variable conditionally defines the I_SYSUIO symbol, and indicates
- whether a C program should include <sys/uio.h>.
-
-i_sysun (i_sysun.U):
- This variable conditionally defines I_SYS_UN, which indicates
- to the C program that it should include <sys/un.h> to get UNIX
- domain socket definitions.
-
-i_sysutsname (i_sysutsname.U):
- This variable conditionally defines the I_SYSUTSNAME symbol,
- and indicates whether a C program should include <sys/utsname.h>.
-
-i_sysvfs (i_sysvfs.U):
- This variable conditionally defines the I_SYSVFS symbol,
- and indicates whether a C program should include <sys/vfs.h>.
-
-i_syswait (i_syswait.U):
- This variable conditionally defines I_SYS_WAIT, which indicates
- to the C program that it should include <sys/wait.h>.
-
-i_termio (i_termio.U):
- This variable conditionally defines the I_TERMIO symbol, which
- indicates to the C program that it should include <termio.h> rather
- than <sgtty.h>.
-
-i_termios (i_termio.U):
- This variable conditionally defines the I_TERMIOS symbol, which
- indicates to the C program that the POSIX <termios.h> file is
- to be included.
-
-i_time (i_time.U):
- This variable conditionally defines I_TIME, which indicates
- to the C program that it should include <time.h>.
-
-i_unistd (i_unistd.U):
- This variable conditionally defines the I_UNISTD symbol, and indicates
- whether a C program should include <unistd.h>.
-
-i_ustat (i_ustat.U):
- This variable conditionally defines the I_USTAT symbol, and indicates
- whether a C program should include <ustat.h>.
-
-i_utime (i_utime.U):
- This variable conditionally defines the I_UTIME symbol, and indicates
- whether a C program should include <utime.h>.
-
-i_values (i_values.U):
- This variable conditionally defines the I_VALUES symbol, and indicates
- whether a C program may include <values.h> to get symbols like MAXLONG
- and friends.
-
-i_varargs (i_varhdr.U):
- This variable conditionally defines I_VARARGS, which indicates
- to the C program that it should include <varargs.h>.
-
-i_varhdr (i_varhdr.U):
- Contains the name of the header to be included to get va_dcl definition.
- Typically one of varargs.h or stdarg.h.
-
-i_vfork (i_vfork.U):
- This variable conditionally defines the I_VFORK symbol, and indicates
- whether a C program should include vfork.h.
-
-ignore_versioned_solibs (libs.U):
- This variable should be non-empty if non-versioned shared
- libraries (libfoo.so.x.y) are to be ignored (because they
- cannot be linked against).
-
-inc_version_list (inc_version_list.U):
- This variable specifies the list of subdirectories in over
- which perl.c:incpush() and lib/lib.pm will automatically
- search when adding directories to @INC. The elements in
- the list are separated by spaces. This is only useful
- if you have a perl library directory tree structured like the
- default one. See INSTALL for how this works. The versioned
- site_perl directory was introduced in 5.005, so that is the
- lowest possible value.
-
-inc_version_list_init (inc_version_list.U):
- This variable holds the same list as inc_version_list, but
- each item is enclosed in double quotes and separated by commas,
- suitable for use in the PERL_INC_VERSION_LIST initialization.
-
-incpath (usrinc.U):
- This variable must preceed the normal include path to get hte
- right one, as in "$incpath/usr/include" or "$incpath/usr/lib".
- Value can be "" or "/bsd43" on mips.
-
-inews (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-installarchlib (archlib.U):
- This variable is really the same as archlibexp but may differ on
- those systems using AFS. For extra portability, only this variable
- should be used in makefiles.
-
-installbin (bin.U):
- This variable is the same as binexp unless AFS is running in which case
- the user is explicitely prompted for it. This variable should always
- be used in your makefiles for maximum portability.
-
-installman1dir (man1dir.U):
- This variable is really the same as man1direxp, unless you are using
- AFS in which case it points to the read/write location whereas
- man1direxp only points to the read-only access location. For extra
- portability, you should only use this variable within your makefiles.
-
-installman3dir (man3dir.U):
- This variable is really the same as man3direxp, unless you are using
- AFS in which case it points to the read/write location whereas
- man3direxp only points to the read-only access location. For extra
- portability, you should only use this variable within your makefiles.
-
-installprefix (installprefix.U):
- This variable holds the name of the directory below which
- "make install" will install the package. For most users, this
- is the same as prefix. However, it is useful for
- installing the software into a different (usually temporary)
- location after which it can be bundled up and moved somehow
- to the final location specified by prefix.
-
-installprefixexp (installprefix.U):
- This variable holds the full absolute path of installprefix
- with all ~-expansion done.
-
-installprivlib (privlib.U):
- This variable is really the same as privlibexp but may differ on
- those systems using AFS. For extra portability, only this variable
- should be used in makefiles.
-
-installscript (scriptdir.U):
- This variable is usually the same as scriptdirexp, unless you are on
- a system running AFS, in which case they may differ slightly. You
- should always use this variable within your makefiles for portability.
-
-installsitearch (sitearch.U):
- This variable is really the same as sitearchexp but may differ on
- those systems using AFS. For extra portability, only this variable
- should be used in makefiles.
-
-installsitebin (sitebin.U):
- This variable is usually the same as sitebinexp, unless you are on
- a system running AFS, in which case they may differ slightly. You
- should always use this variable within your makefiles for portability.
-
-installsitelib (sitelib.U):
- This variable is really the same as sitelibexp but may differ on
- those systems using AFS. For extra portability, only this variable
- should be used in makefiles.
-
-installstyle (installstyle.U):
- This variable describes the "style" of the perl installation.
- This is intended to be useful for tools that need to
- manipulate entire perl distributions. Perl itself doesn't use
- this to find its libraries -- the library directories are
- stored directly in Config.pm. Currently, there are only two
- styles: "lib" and "lib/perl5". The default library locations
- (e.g. privlib, sitelib) are either $prefix/lib or
- $prefix/lib/perl5. The former is useful if $prefix is a
- directory dedicated to perl (e.g. /opt/perl), while the latter
- is useful if $prefix is shared by many packages, e.g. if
- $prefix=/usr/local.
- This may later be extended to include other information, so
- be careful with pattern-matching on the results.
- For compatibility with perl5.005 and earlier, the default
- setting is based on whether or not $prefix contains the string
- "perl".
-
-installusrbinperl (instubperl.U):
- This variable tells whether Perl should be installed also as
- /usr/bin/perl in addition to
- $installbin/perl
-
-installvendorarch (vendorarch.U):
- This variable is really the same as vendorarchexp but may differ on
- those systems using AFS. For extra portability, only this variable
- should be used in makefiles.
-
-installvendorbin (vendorbin.U):
- This variable is really the same as vendorbinexp but may differ on
- those systems using AFS. For extra portability, only this variable
- should be used in makefiles.
-
-installvendorlib (vendorlib.U):
- This variable is really the same as vendorlibexp but may differ on
- those systems using AFS. For extra portability, only this variable
- should be used in makefiles.
-
-intsize (intsize.U):
- This variable contains the value of the INTSIZE symbol, which
- indicates to the C program how many bytes there are in an int.
-
-issymlink (issymlink.U):
- This variable holds the test command to test for a symbolic link
- (if they are supported). Typical values include 'test -h' and
- 'test -L'.
-
-ivdformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl IV as a signed decimal integer.
-
-ivsize (perlxv.U):
- This variable is the size of an IV in bytes.
-
-ivtype (perlxv.U):
- This variable contains the C type used for Perl's IV.
-
-known_extensions (Extensions.U):
- This variable holds a list of all XS extensions included in
- the package.
-
-ksh (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-ld (dlsrc.U):
- This variable indicates the program to be used to link
- libraries for dynamic loading. On some systems, it is 'ld'.
- On ELF systems, it should be $cc. Mostly, we'll try to respect
- the hint file setting.
-
-lddlflags (dlsrc.U):
- This variable contains any special flags that might need to be
- passed to $ld to create a shared library suitable for dynamic
- loading. It is up to the makefile to use it. For hpux, it
- should be '-b'. For sunos 4.1, it is empty.
-
-ldflags (ccflags.U):
- This variable contains any additional C loader flags desired by
- the user. It is up to the Makefile to use this.
-
-ldflags_uselargefiles (uselfs.U):
- This variable contains the loader flags needed by large file builds
- and added to ldflags by hints files.
-
-ldlibpthname (libperl.U):
- This variable holds the name of the shared library
- search path, often LD_LIBRARY_PATH. To get an empty
- string, the hints file must set this to 'none'.
-
-less (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the less program. After Configure runs,
- the value is reset to a plain "less" and is not useful.
-
-lib_ext (Unix.U):
- This is an old synonym for _a.
-
-libc (libc.U):
- This variable contains the location of the C library.
-
-libperl (libperl.U):
- The perl executable is obtained by linking perlmain.c with
- libperl, any static extensions (usually just DynaLoader),
- and any other libraries needed on this system. libperl
- is usually libperl.a, but can also be libperl.so.xxx if
- the user wishes to build a perl executable with a shared
- library.
-
-libpth (libpth.U):
- This variable holds the general path (space-separated) used to find
- libraries. It is intended to be used by other units.
-
-libs (libs.U):
- This variable holds the additional libraries we want to use.
- It is up to the Makefile to deal with it.
-
-libsdirs (libs.U):
- This variable holds the directory names aka dirnames of the libraries
- we found and accepted, duplicates are removed.
-
-libsfiles (libs.U):
- This variable holds the filenames aka basenames of the libraries
- we found and accepted.
-
-libsfound (libs.U):
- This variable holds the full pathnames of the libraries
- we found and accepted.
-
-libspath (libs.U):
- This variable holds the directory names probed for libraries.
-
-libswanted (Myinit.U):
- This variable holds a list of all the libraries we want to
- search. The order is chosen to pick up the c library
- ahead of ucb or bsd libraries for SVR4.
-
-libswanted_uselargefiles (uselfs.U):
- This variable contains the libraries needed by large file builds
- and added to ldflags by hints files. It is a space separated list
- of the library names without the "lib" prefix or any suffix, just
- like libswanted..
-
-line (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-lint (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-lkflags (ccflags.U):
- This variable contains any additional C partial linker flags desired by
- the user. It is up to the Makefile to use this.
-
-ln (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the ln program. After Configure runs,
- the value is reset to a plain "ln" and is not useful.
-
-lns (lns.U):
- This variable holds the name of the command to make
- symbolic links (if they are supported). It can be used
- in the Makefile. It is either 'ln -s' or 'ln'
-
-locincpth (ccflags.U):
- This variable contains a list of additional directories to be
- searched by the compiler. The appropriate '-I' directives will
- be added to ccflags. This is intended to simplify setting
- local directories from the Configure command line.
- It's not much, but it parallels the loclibpth stuff in libpth.U.
-
-loclibpth (libpth.U):
- This variable holds the paths (space-separated) used to find local
- libraries. It is prepended to libpth, and is intended to be easily
- set from the command line.
-
-longdblsize (d_longdbl.U):
- This variable contains the value of the LONG_DOUBLESIZE symbol, which
- indicates to the C program how many bytes there are in a long double,
- if this system supports long doubles.
-
-longlongsize (d_longlong.U):
- This variable contains the value of the LONGLONGSIZE symbol, which
- indicates to the C program how many bytes there are in a long long,
- if this system supports long long.
-
-longsize (intsize.U):
- This variable contains the value of the LONGSIZE symbol, which
- indicates to the C program how many bytes there are in a long.
-
-lp (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-lpr (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-ls (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the ls program. After Configure runs,
- the value is reset to a plain "ls" and is not useful.
-
-lseeksize (lseektype.U):
- This variable defines lseektype to be something like off_t, long,
- or whatever type is used to declare lseek offset's type in the
- kernel (which also appears to be lseek's return type).
-
-lseektype (lseektype.U):
- This variable defines lseektype to be something like off_t, long,
- or whatever type is used to declare lseek offset's type in the
- kernel (which also appears to be lseek's return type).
-
-mail (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-mailx (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-make (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the make program. After Configure runs,
- the value is reset to a plain "make" and is not useful.
-
-make_set_make (make.U):
- Some versions of 'make' set the variable MAKE. Others do not.
- This variable contains the string to be included in Makefile.SH
- so that MAKE is set if needed, and not if not needed.
- Possible values are:
- make_set_make='#' # If your make program handles this for you,
- make_set_make="MAKE=$make" # if it doesn't.
- I used a comment character so that we can distinguish a
- 'set' value (from a previous config.sh or Configure '-D' option)
- from an uncomputed value.
-
-mallocobj (mallocsrc.U):
- This variable contains the name of the malloc.o that this package
- generates, if that malloc.o is preferred over the system malloc.
- Otherwise the value is null. This variable is intended for generating
- Makefiles. See mallocsrc.
-
-mallocsrc (mallocsrc.U):
- This variable contains the name of the malloc.c that comes with
- the package, if that malloc.c is preferred over the system malloc.
- Otherwise the value is null. This variable is intended for generating
- Makefiles.
-
-malloctype (mallocsrc.U):
- This variable contains the kind of ptr returned by malloc and realloc.
-
-man1dir (man1dir.U):
- This variable contains the name of the directory in which manual
- source pages are to be put. It is the responsibility of the
- Makefile.SH to get the value of this into the proper command.
- You must be prepared to do the ~name expansion yourself.
-
-man1direxp (man1dir.U):
- This variable is the same as the man1dir variable, but is filename
- expanded at configuration time, for convenient use in makefiles.
-
-man1ext (man1dir.U):
- This variable contains the extension that the manual page should
- have: one of 'n', 'l', or '1'. The Makefile must supply the '.'.
- See man1dir.
-
-man3dir (man3dir.U):
- This variable contains the name of the directory in which manual
- source pages are to be put. It is the responsibility of the
- Makefile.SH to get the value of this into the proper command.
- You must be prepared to do the ~name expansion yourself.
-
-man3direxp (man3dir.U):
- This variable is the same as the man3dir variable, but is filename
- expanded at configuration time, for convenient use in makefiles.
-
-man3ext (man3dir.U):
- This variable contains the extension that the manual page should
- have: one of 'n', 'l', or '3'. The Makefile must supply the '.'.
- See man3dir.
-
-Mcc (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the Mcc program. After Configure runs,
- the value is reset to a plain "Mcc" and is not useful.
-
-mips_type (usrinc.U):
- This variable holds the environment type for the mips system.
- Possible values are "BSD 4.3" and "System V".
-
-mkdir (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the mkdir program. After Configure runs,
- the value is reset to a plain "mkdir" and is not useful.
-
-mmaptype (d_mmap.U):
- This symbol contains the type of pointer returned by mmap()
- (and simultaneously the type of the first argument).
- It can be 'void *' or 'caddr_t'.
-
-modetype (modetype.U):
- This variable defines modetype to be something like mode_t,
- int, unsigned short, or whatever type is used to declare file
- modes for system calls.
-
-more (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the more program. After Configure runs,
- the value is reset to a plain "more" and is not useful.
-
-multiarch (multiarch.U):
- This variable conditionally defines the MULTIARCH symbol
- which signifies the presence of multiplatform files.
- This is normally set by hints files.
-
-mv (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-myarchname (archname.U):
- This variable holds the architecture name computed by Configure in
- a previous run. It is not intended to be perused by any user and
- should never be set in a hint file.
-
-mydomain (myhostname.U):
- This variable contains the eventual value of the MYDOMAIN symbol,
- which is the domain of the host the program is going to run on.
- The domain must be appended to myhostname to form a complete host name.
- The dot comes with mydomain, and need not be supplied by the program.
-
-myhostname (myhostname.U):
- This variable contains the eventual value of the MYHOSTNAME symbol,
- which is the name of the host the program is going to run on.
- The domain is not kept with hostname, but must be gotten from mydomain.
- The dot comes with mydomain, and need not be supplied by the program.
-
-myuname (Oldconfig.U):
- The output of 'uname -a' if available, otherwise the hostname. On Xenix,
- pseudo variables assignments in the output are stripped, thank you. The
- whole thing is then lower-cased.
-
-n (n.U):
- This variable contains the '-n' flag if that is what causes the echo
- command to suppress newline. Otherwise it is null. Correct usage is
- $echo $n "prompt for a question: $c".
-
-need_va_copy (need_va_copy.U):
- This symbol, if defined, indicates that the system stores
- the variable argument list datatype, va_list, in a format
- that cannot be copied by simple assignment, so that some
- other means must be used when copying is required.
- As such systems vary in their provision (or non-provision)
- of copying mechanisms, handy.h defines a platform-
- independent macro, Perl_va_copy(src, dst), to do the job.
-
-netdb_hlen_type (netdbtype.U):
- This variable holds the type used for the 2nd argument to
- gethostbyaddr(). Usually, this is int or size_t or unsigned.
- This is only useful if you have gethostbyaddr(), naturally.
-
-netdb_host_type (netdbtype.U):
- This variable holds the type used for the 1st argument to
- gethostbyaddr(). Usually, this is char * or void *, possibly
- with or without a const prefix.
- This is only useful if you have gethostbyaddr(), naturally.
-
-netdb_name_type (netdbtype.U):
- This variable holds the type used for the argument to
- gethostbyname(). Usually, this is char * or const char *.
- This is only useful if you have gethostbyname(), naturally.
-
-netdb_net_type (netdbtype.U):
- This variable holds the type used for the 1st argument to
- getnetbyaddr(). Usually, this is int or long.
- This is only useful if you have getnetbyaddr(), naturally.
-
-nm (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the nm program. After Configure runs,
- the value is reset to a plain "nm" and is not useful.
-
-nm_opt (usenm.U):
- This variable holds the options that may be necessary for nm.
-
-nm_so_opt (usenm.U):
- This variable holds the options that may be necessary for nm
- to work on a shared library but that can not be used on an
- archive library. Currently, this is only used by Linux, where
- nm --dynamic is *required* to get symbols from an ELF library which
- has been stripped, but nm --dynamic is *fatal* on an archive library.
- Maybe Linux should just always set usenm=false.
-
-nonxs_ext (Extensions.U):
- This variable holds a list of all non-xs extensions included
- in the package. All of them will be built.
-
-nroff (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the nroff program. After Configure runs,
- the value is reset to a plain "nroff" and is not useful.
-
-nveformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl NV using %e-ish floating point format.
-
-nvEUformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl NV using %E-ish floating point format.
-
-nvfformat (perlxvf.U):
- This variable confains the format string used for printing
- a Perl NV using %f-ish floating point format.
-
-nvFUformat (perlxvf.U):
- This variable confains the format string used for printing
- a Perl NV using %F-ish floating point format.
-
-nvgformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl NV using %g-ish floating point format.
-
-nvGUformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl NV using %G-ish floating point format.
-
-nvsize (perlxv.U):
- This variable is the size of an NV in bytes.
-
-nvtype (perlxv.U):
- This variable contains the C type used for Perl's NV.
-
-o_nonblock (nblock_io.U):
- This variable bears the symbol value to be used during open() or fcntl()
- to turn on non-blocking I/O for a file descriptor. If you wish to switch
- between blocking and non-blocking, you may try ioctl(FIOSNBIO) instead,
- but that is only supported by some devices.
-
-obj_ext (Unix.U):
- This is an old synonym for _o.
-
-old_pthread_create_joinable (d_pthrattrj.U):
- This variable defines the constant to use for creating joinable
- (aka undetached) pthreads. Unused if pthread.h defines
- PTHREAD_CREATE_JOINABLE. If used, possible values are
- PTHREAD_CREATE_UNDETACHED and __UNDETACHED.
-
-optimize (ccflags.U):
- This variable contains any optimizer/debugger flag that should be used.
- It is up to the Makefile to use it.
-
-orderlib (orderlib.U):
- This variable is "true" if the components of libraries must be ordered
- (with `lorder $* | tsort`) before placing them in an archive. Set to
- "false" if ranlib or ar can generate random libraries.
-
-osname (Oldconfig.U):
- This variable contains the operating system name (e.g. sunos,
- solaris, hpux, etc.). It can be useful later on for setting
- defaults. Any spaces are replaced with underscores. It is set
- to a null string if we can't figure it out.
-
-osvers (Oldconfig.U):
- This variable contains the operating system version (e.g.
- 4.1.3, 5.2, etc.). It is primarily used for helping select
- an appropriate hints file, but might be useful elsewhere for
- setting defaults. It is set to '' if we can't figure it out.
- We try to be flexible about how much of the version number
- to keep, e.g. if 4.1.1, 4.1.2, and 4.1.3 are essentially the
- same for this package, hints files might just be os_4.0 or
- os_4.1, etc., not keeping separate files for each little release.
-
-otherlibdirs (otherlibdirs.U):
- This variable contains a colon-separated set of paths for the perl
- binary to search for additional library files or modules.
- These directories will be tacked to the end of @INC.
- Perl will automatically search below each path for version-
- and architecture-specific directories. See inc_version_list
- for more details.
- A value of ' ' means 'none' and is used to preserve this value
- for the next run through Configure.
-
-package (package.U):
- This variable contains the name of the package being constructed.
- It is primarily intended for the use of later Configure units.
-
-pager (pager.U):
- This variable contains the name of the preferred pager on the system.
- Usual values are (the full pathnames of) more, less, pg, or cat.
-
-passcat (nis.U):
- This variable contains a command that produces the text of the
- /etc/passwd file. This is normally "cat /etc/passwd", but can be
- "ypcat passwd" when NIS is used.
- On some systems, such as os390, there may be no equivalent
- command, in which case this variable is unset.
-
-patchlevel (patchlevel.U):
- The patchlevel level of this package.
- The value of patchlevel comes from the patchlevel.h file.
- In a version number such as 5.6.1, this is the "6".
- In patchlevel.h, this is referred to as "PERL_VERSION".
-
-path_sep (Unix.U):
- This is an old synonym for p_ in Head.U, the character
- used to separate elements in the command shell search PATH.
-
-perl5 (perl5.U):
- This variable contains the full path (if any) to a previously
- installed perl5.005 or later suitable for running the script
- to determine inc_version_list.
-
-perl (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-PERL_REVISION (Oldsyms.U):
- In a Perl version number such as 5.6.2, this is the 5.
- This value is manually set in patchlevel.h
-
-PERL_SUBVERSION (Oldsyms.U):
- In a Perl version number such as 5.6.2, this is the 2.
- Values greater than 50 represent potentially unstable
- development subversions.
- This value is manually set in patchlevel.h
-
-PERL_VERSION (Oldsyms.U):
- In a Perl version number such as 5.6.2, this is the 6.
- This value is manually set in patchlevel.h
-
-perladmin (perladmin.U):
- Electronic mail address of the perl5 administrator.
-
-perllibs (End.U):
- The list of libraries needed by Perl only (any libraries needed
- by extensions only will by dropped, if using dynamic loading).
-
-perlpath (perlpath.U):
- This variable contains the eventual value of the PERLPATH symbol,
- which contains the name of the perl interpreter to be used in
- shell scripts and in the "eval 'exec'" idiom.
-
-pg (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the pg program. After Configure runs,
- the value is reset to a plain "pg" and is not useful.
-
-phostname (myhostname.U):
- This variable contains the eventual value of the PHOSTNAME symbol,
- which is a command that can be fed to popen() to get the host name.
- The program should probably not presume that the domain is or isn't
- there already.
-
-pidtype (pidtype.U):
- This variable defines PIDTYPE to be something like pid_t, int,
- ushort, or whatever type is used to declare process ids in the kernel.
-
-plibpth (libpth.U):
- Holds the private path used by Configure to find out the libraries.
- Its value is prepend to libpth. This variable takes care of special
- machines, like the mips. Usually, it should be empty.
-
-pm_apiversion (xs_apiversion.U):
- This variable contains the version of the oldest perl
- compatible with the present perl. (That is, pure perl modules
- written for $pm_apiversion will still work for the current
- version). perl.c:incpush() and lib/lib.pm will automatically
- search in $sitelib for older directories across major versions
- back to pm_apiversion. This is only useful if you have a perl
- library directory tree structured like the default one. The
- versioned site_perl library was introduced in 5.005, so that's
- the default setting for this variable. It's hard to imagine
- it changing before Perl6. It is included here for symmetry
- with xs_apiveprsion -- the searching algorithms will
- (presumably) be similar.
- See the INSTALL file for how this works.
-
-pmake (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-pr (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-prefix (prefix.U):
- This variable holds the name of the directory below which the
- user will install the package. Usually, this is /usr/local, and
- executables go in /usr/local/bin, library stuff in /usr/local/lib,
- man pages in /usr/local/man, etc. It is only used to set defaults
- for things in bin.U, mansrc.U, privlib.U, or scriptdir.U.
-
-prefixexp (prefix.U):
- This variable holds the full absolute path of the directory below
- which the user will install the package. Derived from prefix.
-
-privlib (privlib.U):
- This variable contains the eventual value of the PRIVLIB symbol,
- which is the name of the private library for this package. It may
- have a ~ on the front. It is up to the makefile to eventually create
- this directory while performing installation (with ~ substitution).
-
-privlibexp (privlib.U):
- This variable is the ~name expanded version of privlib, so that you
- may use it directly in Makefiles or shell scripts.
-
-prototype (prototype.U):
- This variable holds the eventual value of CAN_PROTOTYPE, which
- indicates the C compiler can handle funciton prototypes.
-
-ptrsize (ptrsize.U):
- This variable contains the value of the PTRSIZE symbol, which
- indicates to the C program how many bytes there are in a pointer.
-
-quadkind (quadtype.U):
- This variable, if defined, encodes the type of a quad:
- 1 = int, 2 = long, 3 = long long, 4 = int64_t.
-
-quadtype (quadtype.U):
- This variable defines Quad_t to be something like long, int,
- long long, int64_t, or whatever type is used for 64-bit integers.
-
-randbits (randfunc.U):
- Indicates how many bits are produced by the function used to
- generate normalized random numbers.
-
-randfunc (randfunc.U):
- Indicates the name of the random number function to use.
- Values include drand48, random, and rand. In C programs,
- the 'Drand01' macro is defined to generate uniformly distributed
- random numbers over the range [0., 1.[ (see drand01 and nrand).
-
-randseedtype (randfunc.U):
- Indicates the type of the argument of the seedfunc.
-
-ranlib (orderlib.U):
- This variable is set to the pathname of the ranlib program, if it is
- needed to generate random libraries. Set to ":" if ar can generate
- random libraries or if random libraries are not supported
-
-rd_nodata (nblock_io.U):
- This variable holds the return code from read() when no data is
- present. It should be -1, but some systems return 0 when O_NDELAY is
- used, which is a shame because you cannot make the difference between
- no data and an EOF.. Sigh!
-
-revision (patchlevel.U):
- The value of revision comes from the patchlevel.h file.
- In a version number such as 5.6.1, this is the "5".
- In patchlevel.h, this is referred to as "PERL_REVISION".
-
-rm (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the rm program. After Configure runs,
- the value is reset to a plain "rm" and is not useful.
-
-rmail (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-runnm (usenm.U):
- This variable contains 'true' or 'false' depending whether the
- nm extraction should be performed or not, according to the value
- of usenm and the flags on the Configure command line.
-
-sched_yield (d_pthread_y.U):
- This variable defines the way to yield the execution
- of the current thread.
-
-scriptdir (scriptdir.U):
- This variable holds the name of the directory in which the user wants
- to put publicly scripts for the package in question. It is either
- the same directory as for binaries, or a special one that can be
- mounted across different architectures, like /usr/share. Programs
- must be prepared to deal with ~name expansion.
-
-scriptdirexp (scriptdir.U):
- This variable is the same as scriptdir, but is filename expanded
- at configuration time, for programs not wanting to bother with it.
-
-sed (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the sed program. After Configure runs,
- the value is reset to a plain "sed" and is not useful.
-
-seedfunc (randfunc.U):
- Indicates the random number generating seed function.
- Values include srand48, srandom, and srand.
-
-selectminbits (selectminbits.U):
- This variable holds the minimum number of bits operated by select.
- That is, if you do select(n, ...), how many bits at least will be
- cleared in the masks if some activity is detected. Usually this
- is either n or 32*ceil(n/32), especially many little-endians do
- the latter. This is only useful if you have select(), naturally.
-
-selecttype (selecttype.U):
- This variable holds the type used for the 2nd, 3rd, and 4th
- arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
- is defined, and 'int *' otherwise. This is only useful if you
- have select(), naturally.
-
-sendmail (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-sh (sh.U):
- This variable contains the full pathname of the shell used
- on this system to execute Bourne shell scripts. Usually, this will be
- /bin/sh, though it's possible that some systems will have /bin/ksh,
- /bin/pdksh, /bin/ash, /bin/bash, or even something such as
- D:/bin/sh.exe.
- This unit comes before Options.U, so you can't set sh with a '-D'
- option, though you can override this (and startsh)
- with '-O -Dsh=/bin/whatever -Dstartsh=whatever'
-
-shar (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-sharpbang (spitshell.U):
- This variable contains the string #! if this system supports that
- construct.
-
-shmattype (d_shmat.U):
- This symbol contains the type of pointer returned by shmat().
- It can be 'void *' or 'char *'.
-
-shortsize (intsize.U):
- This variable contains the value of the SHORTSIZE symbol which
- indicates to the C program how many bytes there are in a short.
-
-shrpenv (libperl.U):
- If the user builds a shared libperl.so, then we need to tell the
- 'perl' executable where it will be able to find the installed libperl.so.
- One way to do this on some systems is to set the environment variable
- LD_RUN_PATH to the directory that will be the final location of the
- shared libperl.so. The makefile can use this with something like
- $shrpenv $(CC) -o perl perlmain.o $libperl $libs
- Typical values are
- shrpenv="env LD_RUN_PATH=$archlibexp/CORE"
- or
- shrpenv=''
- See the main perl Makefile.SH for actual working usage.
- Alternatively, we might be able to use a command line option such
- as -R $archlibexp/CORE (Solaris, NetBSD) or -Wl,-rpath
- $archlibexp/CORE (Linux).
-
-shsharp (spitshell.U):
- This variable tells further Configure units whether your sh can
- handle # comments.
-
-sig_count (sig_name.U):
- This variable holds a number larger than the largest valid
- signal number. This is usually the same as the NSIG macro.
-
-sig_name (sig_name.U):
- This variable holds the signal names, space separated. The leading
- SIG in signal name is removed. A ZERO is prepended to the
- list. This is currently not used.
-
-sig_name_init (sig_name.U):
- This variable holds the signal names, enclosed in double quotes and
- separated by commas, suitable for use in the SIG_NAME definition
- below. A "ZERO" is prepended to the list, and the list is
- terminated with a plain 0. The leading SIG in signal names
- is removed. See sig_num.
-
-sig_num (sig_name.U):
- This variable holds the signal numbers, space separated. A ZERO is
- prepended to the list (corresponding to the fake SIGZERO), and
- the list is terminated with a 0. Those numbers correspond to
- the value of the signal listed in the same place within the
- sig_name list.
-
-sig_num_init (sig_name.U):
- This variable holds the signal numbers, enclosed in double quotes and
- separated by commas, suitable for use in the SIG_NUM definition
- below. A "ZERO" is prepended to the list, and the list is
- terminated with a plain 0.
-
-sig_size (sig_name.U):
- This variable contains the number of elements of the sig_name
- and sig_num arrays, excluding the final NULL entry.
-
-signal_t (d_voidsig.U):
- This variable holds the type of the signal handler (void or int).
-
-sitearch (sitearch.U):
- This variable contains the eventual value of the SITEARCH symbol,
- which is the name of the private library for this package. It may
- have a ~ on the front. It is up to the makefile to eventually create
- this directory while performing installation (with ~ substitution).
- The standard distribution will put nothing in this directory.
- After perl has been installed, users may install their own local
- architecture-dependent modules in this directory with
- MakeMaker Makefile.PL
- or equivalent. See INSTALL for details.
-
-sitearchexp (sitearch.U):
- This variable is the ~name expanded version of sitearch, so that you
- may use it directly in Makefiles or shell scripts.
-
-sitebin (sitebin.U):
- This variable holds the name of the directory in which the user wants
- to put add-on publicly executable files for the package in question. It
- is most often a local directory such as /usr/local/bin. Programs using
- this variable must be prepared to deal with ~name substitution.
- The standard distribution will put nothing in this directory.
- After perl has been installed, users may install their own local
- executables in this directory with
- MakeMaker Makefile.PL
- or equivalent. See INSTALL for details.
-
-sitebinexp (sitebin.U):
- This is the same as the sitebin variable, but is filename expanded at
- configuration time, for use in your makefiles.
-
-sitelib (sitelib.U):
- This variable contains the eventual value of the SITELIB symbol,
- which is the name of the private library for this package. It may
- have a ~ on the front. It is up to the makefile to eventually create
- this directory while performing installation (with ~ substitution).
- The standard distribution will put nothing in this directory.
- After perl has been installed, users may install their own local
- architecture-independent modules in this directory with
- MakeMaker Makefile.PL
- or equivalent. See INSTALL for details.
-
-sitelib_stem (sitelib.U):
- This variable is $sitelibexp with any trailing version-specific component
- removed. The elements in inc_version_list (inc_version_list.U) can
- be tacked onto this variable to generate a list of directories to search.
-
-sitelibexp (sitelib.U):
- This variable is the ~name expanded version of sitelib, so that you
- may use it directly in Makefiles or shell scripts.
-
-siteprefix (siteprefix.U):
- This variable holds the full absolute path of the directory below
- which the user will install add-on packages.
- See INSTALL for usage and examples.
-
-siteprefixexp (siteprefix.U):
- This variable holds the full absolute path of the directory below
- which the user will install add-on packages. Derived from siteprefix.
-
-sizesize (sizesize.U):
- This variable contains the size of a sizetype in bytes.
-
-sizetype (sizetype.U):
- This variable defines sizetype to be something like size_t,
- unsigned long, or whatever type is used to declare length
- parameters for string functions.
-
-sleep (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-smail (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-so (so.U):
- This variable holds the extension used to identify shared libraries
- (also known as shared objects) on the system. Usually set to 'so'.
-
-sockethdr (d_socket.U):
- This variable has any cpp '-I' flags needed for socket support.
-
-socketlib (d_socket.U):
- This variable has the names of any libraries needed for socket support.
-
-socksizetype (socksizetype.U):
- This variable holds the type used for the size argument
- for various socket calls like accept. Usual values include
- socklen_t, size_t, and int.
-
-sort (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the sort program. After Configure runs,
- the value is reset to a plain "sort" and is not useful.
-
-spackage (package.U):
- This variable contains the name of the package being constructed,
- with the first letter uppercased, i.e. suitable for starting
- sentences.
-
-spitshell (spitshell.U):
- This variable contains the command necessary to spit out a runnable
- shell on this system. It is either cat or a grep '-v' for # comments.
-
-sPRId64 (quadfio.U):
- This variable, if defined, contains the string used by stdio to
- format 64-bit decimal numbers (format 'd') for output.
-
-sPRIeldbl (longdblfio.U):
- This variable, if defined, contains the string used by stdio to
- format long doubles (format 'e') for output.
-
-sPRIEUldbl (longdblfio.U):
- This variable, if defined, contains the string used by stdio to
- format long doubles (format 'E') for output.
- The 'U' in the name is to separate this from sPRIeldbl so that even
- case-blind systems can see the difference.
-
-sPRIfldbl (longdblfio.U):
- This variable, if defined, contains the string used by stdio to
- format long doubles (format 'f') for output.
-
-sPRIFUldbl (longdblfio.U):
- This variable, if defined, contains the string used by stdio to
- format long doubles (format 'F') for output.
- The 'U' in the name is to separate this from sPRIfldbl so that even
- case-blind systems can see the difference.
-
-sPRIgldbl (longdblfio.U):
- This variable, if defined, contains the string used by stdio to
- format long doubles (format 'g') for output.
-
-sPRIGUldbl (longdblfio.U):
- This variable, if defined, contains the string used by stdio to
- format long doubles (format 'G') for output.
- The 'U' in the name is to separate this from sPRIgldbl so that even
- case-blind systems can see the difference.
-
-sPRIi64 (quadfio.U):
- This variable, if defined, contains the string used by stdio to
- format 64-bit decimal numbers (format 'i') for output.
-
-sPRIo64 (quadfio.U):
- This variable, if defined, contains the string used by stdio to
- format 64-bit octal numbers (format 'o') for output.
-
-sPRIu64 (quadfio.U):
- This variable, if defined, contains the string used by stdio to
- format 64-bit unsigned decimal numbers (format 'u') for output.
-
-sPRIx64 (quadfio.U):
- This variable, if defined, contains the string used by stdio to
- format 64-bit hexadecimal numbers (format 'x') for output.
-
-sPRIXU64 (quadfio.U):
- This variable, if defined, contains the string used by stdio to
- format 64-bit hExADECimAl numbers (format 'X') for output.
- The 'U' in the name is to separate this from sPRIx64 so that even
- case-blind systems can see the difference.
-
-src (src.U):
- This variable holds the path to the package source. It is up to
- the Makefile to use this variable and set VPATH accordingly to
- find the sources remotely.
-
-sSCNfldbl (longdblfio.U):
- This variable, if defined, contains the string used by stdio to
- format long doubles (format 'f') for input.
-
-ssizetype (ssizetype.U):
- This variable defines ssizetype to be something like ssize_t,
- long or int. It is used by functions that return a count
- of bytes or an error condition. It must be a signed type.
- We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
-
-startperl (startperl.U):
- This variable contains the string to put on the front of a perl
- script to make sure (hopefully) that it runs with perl and not some
- shell. Of course, that leading line must be followed by the classical
- perl idiom:
- eval 'exec perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
- to guarantee perl startup should the shell execute the script. Note
- that this magic incatation is not understood by csh.
-
-startsh (startsh.U):
- This variable contains the string to put on the front of a shell
- script to make sure (hopefully) that it runs with sh and not some
- other shell.
-
-static_ext (Extensions.U):
- This variable holds a list of XS extension files we want to
- link statically into the package. It is used by Makefile.
-
-stdchar (stdchar.U):
- This variable conditionally defines STDCHAR to be the type of char
- used in stdio.h. It has the values "unsigned char" or "char".
-
-stdio_base (d_stdstdio.U):
- This variable defines how, given a FILE pointer, fp, to access the
- _base field (or equivalent) of stdio.h's FILE structure. This will
- be used to define the macro FILE_base(fp).
-
-stdio_bufsiz (d_stdstdio.U):
- This variable defines how, given a FILE pointer, fp, to determine
- the number of bytes store in the I/O buffer pointer to by the
- _base field (or equivalent) of stdio.h's FILE structure. This will
- be used to define the macro FILE_bufsiz(fp).
-
-stdio_cnt (d_stdstdio.U):
- This variable defines how, given a FILE pointer, fp, to access the
- _cnt field (or equivalent) of stdio.h's FILE structure. This will
- be used to define the macro FILE_cnt(fp).
-
-stdio_filbuf (d_stdstdio.U):
- This variable defines how, given a FILE pointer, fp, to tell
- stdio to refill it's internal buffers (?). This will
- be used to define the macro FILE_filbuf(fp).
-
-stdio_ptr (d_stdstdio.U):
- This variable defines how, given a FILE pointer, fp, to access the
- _ptr field (or equivalent) of stdio.h's FILE structure. This will
- be used to define the macro FILE_ptr(fp).
-
-stdio_stream_array (stdio_streams.U):
- This variable tells the name of the array holding the stdio streams.
- Usual values include _iob, __iob, and __sF.
-
-strings (i_string.U):
- This variable holds the full path of the string header that will be
- used. Typically /usr/include/string.h or /usr/include/strings.h.
-
-submit (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-subversion (patchlevel.U):
- The subversion level of this package.
- The value of subversion comes from the patchlevel.h file.
- In a version number such as 5.6.1, this is the "1".
- In patchlevel.h, this is referred to as "PERL_SUBVERSION".
- This is unique to perl.
-
-sysman (sysman.U):
- This variable holds the place where the manual is located on this
- system. It is not the place where the user wants to put his manual
- pages. Rather it is the place where Configure may look to find manual
- for unix commands (section 1 of the manual usually). See mansrc.
-
-tail (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-tar (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-tbl (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-tee (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-test (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the test program. After Configure runs,
- the value is reset to a plain "test" and is not useful.
-
-timeincl (i_time.U):
- This variable holds the full path of the included time header(s).
-
-timetype (d_time.U):
- This variable holds the type returned by time(). It can be long,
- or time_t on BSD sites (in which case <sys/types.h> should be
- included). Anyway, the type Time_t should be used.
-
-touch (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the touch program. After Configure runs,
- the value is reset to a plain "touch" and is not useful.
-
-tr (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the tr program. After Configure runs,
- the value is reset to a plain "tr" and is not useful.
-
-trnl (trnl.U):
- This variable contains the value to be passed to the tr(1)
- command to transliterate a newline. Typical values are
- '\012' and '\n'. This is needed for EBCDIC systems where
- newline is not necessarily '\012'.
-
-troff (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-u16size (perlxv.U):
- This variable is the size of an U16 in bytes.
-
-u16type (perlxv.U):
- This variable contains the C type used for Perl's U16.
-
-u32size (perlxv.U):
- This variable is the size of an U32 in bytes.
-
-u32type (perlxv.U):
- This variable contains the C type used for Perl's U32.
-
-u64size (perlxv.U):
- This variable is the size of an U64 in bytes.
-
-u64type (perlxv.U):
- This variable contains the C type used for Perl's U64.
-
-u8size (perlxv.U):
- This variable is the size of an U8 in bytes.
-
-u8type (perlxv.U):
- This variable contains the C type used for Perl's U8.
-
-uidformat (uidf.U):
- This variable contains the format string used for printing a Uid_t.
-
-uidsign (uidsign.U):
- This variable contains the signedness of a uidtype.
- 1 for unsigned, -1 for signed.
-
-uidsize (uidsize.U):
- This variable contains the size of a uidtype in bytes.
-
-uidtype (uidtype.U):
- This variable defines Uid_t to be something like uid_t, int,
- ushort, or whatever type is used to declare user ids in the kernel.
-
-uname (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the uname program. After Configure runs,
- the value is reset to a plain "uname" and is not useful.
-
-uniq (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the uniq program. After Configure runs,
- the value is reset to a plain "uniq" and is not useful.
-
-uquadtype (quadtype.U):
- This variable defines Uquad_t to be something like unsigned long,
- unsigned int, unsigned long long, uint64_t, or whatever type is
- used for 64-bit integers.
-
-use5005threads (usethreads.U):
- This variable conditionally defines the USE_5005THREADS symbol,
- and indicates that Perl should be built to use the 5.005-based
- threading implementation.
-
-use64bitall (use64bits.U):
- This variable conditionally defines the USE_64_BIT_ALL symbol,
- and indicates that 64-bit integer types should be used
- when available. The maximal possible
- 64-bitness is employed: LP64 or ILP64, meaning that you will
- be able to use more than 2 gigabytes of memory. This mode is
- even more binary incompatible than USE_64_BIT_INT. You may not
- be able to run the resulting executable in a 32-bit CPU at all or
- you may need at least to reboot your OS to 64-bit mode.
-
-use64bitint (use64bits.U):
- This variable conditionally defines the USE_64_BIT_INT symbol,
- and indicates that 64-bit integer types should be used
- when available. The minimal possible 64-bitness
- is employed, just enough to get 64-bit integers into Perl.
- This may mean using for example "long longs", while your memory
- may still be limited to 2 gigabytes.
-
-usedl (dlsrc.U):
- This variable indicates if the system supports dynamic
- loading of some sort. See also dlsrc and dlobj.
-
-useithreads (usethreads.U):
- This variable conditionally defines the USE_ITHREADS symbol,
- and indicates that Perl should be built to use the interpreter-based
- threading implementation.
-
-uselargefiles (uselfs.U):
- This variable conditionally defines the USE_LARGE_FILES symbol,
- and indicates that large file interfaces should be used when
- available.
-
-uselongdouble (uselongdbl.U):
- This variable conditionally defines the USE_LONG_DOUBLE symbol,
- and indicates that long doubles should be used when available.
-
-usemorebits (usemorebits.U):
- This variable conditionally defines the USE_MORE_BITS symbol,
- and indicates that explicit 64-bit interfaces and long doubles
- should be used when available.
-
-usemultiplicity (usemultiplicity.U):
- This variable conditionally defines the MULTIPLICITY symbol,
- and indicates that Perl should be built to use multiplicity.
-
-usemymalloc (mallocsrc.U):
- This variable contains y if the malloc that comes with this package
- is desired over the system's version of malloc. People often include
- special versions of malloc for effiency, but such versions are often
- less portable. See also mallocsrc and mallocobj.
- If this is 'y', then -lmalloc is removed from $libs.
-
-usenm (usenm.U):
- This variable contains 'true' or 'false' depending whether the
- nm extraction is wanted or not.
-
-useopcode (Extensions.U):
- This variable holds either 'true' or 'false' to indicate
- whether the Opcode extension should be used. The sole
- use for this currently is to allow an easy mechanism
- for users to skip the Opcode extension from the Configure
- command line.
-
-useperlio (useperlio.U):
- This variable conditionally defines the USE_PERLIO symbol,
- and indicates that the PerlIO abstraction should be
- used throughout.
-
-useposix (Extensions.U):
- This variable holds either 'true' or 'false' to indicate
- whether the POSIX extension should be used. The sole
- use for this currently is to allow an easy mechanism
- for hints files to indicate that POSIX will not compile
- on a particular system.
-
-usesfio (d_sfio.U):
- This variable is set to true when the user agrees to use sfio.
- It is set to false when sfio is not available or when the user
- explicitely requests not to use sfio. It is here primarily so
- that command-line settings can override the auto-detection of
- d_sfio without running into a "WHOA THERE".
-
-useshrplib (libperl.U):
- This variable is set to 'yes' if the user wishes
- to build a shared libperl, and 'no' otherwise.
-
-usesocks (usesocks.U):
- This variable conditionally defines the USE_SOCKS symbol,
- and indicates that Perl should be built to use SOCKS.
-
-usethreads (usethreads.U):
- This variable conditionally defines the USE_THREADS symbol,
- and indicates that Perl should be built to use threads.
-
-usevendorprefix (vendorprefix.U):
- This variable tells whether the vendorprefix
- and consequently other vendor* paths are in use.
-
-usevfork (d_vfork.U):
- This variable is set to true when the user accepts to use vfork.
- It is set to false when no vfork is available or when the user
- explicitely requests not to use vfork.
-
-usrinc (usrinc.U):
- This variable holds the path of the include files, which is
- usually /usr/include. It is mainly used by other Configure units.
-
-uuname (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-uvoformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl UV as an unsigned octal integer.
-
-uvsize (perlxv.U):
- This variable is the size of a UV in bytes.
-
-uvtype (perlxv.U):
- This variable contains the C type used for Perl's UV.
-
-uvuformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl UV as an unsigned decimal integer.
-
-uvxformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl UV as an unsigned hexadecimal integer in lowercase abcdef.
-
-uvXUformat (perlxvf.U):
- This variable contains the format string used for printing
- a Perl UV as an unsigned hexadecimal integer in uppercase ABCDEF.
-
-vendorarch (vendorarch.U):
- This variable contains the value of the PERL_VENDORARCH symbol.
- It may have a ~ on the front.
- The standard distribution will put nothing in this directory.
- Vendors who distribute perl may wish to place their own
- architecture-dependent modules and extensions in this directory with
- MakeMaker Makefile.PL INSTALLDIRS=vendor
- or equivalent. See INSTALL for details.
-
-vendorarchexp (vendorarch.U):
- This variable is the ~name expanded version of vendorarch, so that you
- may use it directly in Makefiles or shell scripts.
-
-vendorbin (vendorbin.U):
- This variable contains the eventual value of the VENDORBIN symbol.
- It may have a ~ on the front.
- The standard distribution will put nothing in this directory.
- Vendors who distribute perl may wish to place additional
- binaries in this directory with
- MakeMaker Makefile.PL INSTALLDIRS=vendor
- or equivalent. See INSTALL for details.
-
-vendorbinexp (vendorbin.U):
- This variable is the ~name expanded version of vendorbin, so that you
- may use it directly in Makefiles or shell scripts.
-
-vendorlib (vendorlib.U):
- This variable contains the eventual value of the VENDORLIB symbol,
- which is the name of the private library for this package.
- The standard distribution will put nothing in this directory.
- Vendors who distribute perl may wish to place their own
- modules in this directory with
- MakeMaker Makefile.PL INSTALLDIRS=vendor
- or equivalent. See INSTALL for details.
-
-vendorlib_stem (vendorlib.U):
- This variable is $vendorlibexp with any trailing version-specific component
- removed. The elements in inc_version_list (inc_version_list.U) can
- be tacked onto this variable to generate a list of directories to search.
-
-vendorlibexp (vendorlib.U):
- This variable is the ~name expanded version of vendorlib, so that you
- may use it directly in Makefiles or shell scripts.
-
-vendorprefix (vendorprefix.U):
- This variable holds the full absolute path of the directory below
- which the vendor will install add-on packages.
- See INSTALL for usage and examples.
-
-vendorprefixexp (vendorprefix.U):
- This variable holds the full absolute path of the directory below
- which the vendor will install add-on packages. Derived from vendorprefix.
-
-version (patchlevel.U):
- The full version number of this package, such as 5.6.1 (or 5_6_1).
- This combines revision, patchlevel, and subversion to get the
- full version number, including any possible subversions.
- This is suitable for use as a directory name, and hence is
- filesystem dependent.
-
-versiononly (versiononly.U):
- If set, this symbol indicates that only the version-specific
- components of a perl installation should be installed.
- This may be useful for making a test installation of a new
- version without disturbing the existing installation.
- Setting versiononly is equivalent to setting installperl's -v option.
- In particular, the non-versioned scripts and programs such as
- a2p, c2ph, h2xs, pod2*, and perldoc are not installed
- (see INSTALL for a more complete list). Nor are the man
- pages installed.
- Usually, this is undef.
-
-vi (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-voidflags (voidflags.U):
- This variable contains the eventual value of the VOIDFLAGS symbol,
- which indicates how much support of the void type is given by this
- compiler. See VOIDFLAGS for more info.
-
-xlibpth (libpth.U):
- This variable holds extra path (space-separated) used to find
- libraries on this platform, for example CPU-specific libraries
- (on multi-CPU platforms) may be listed here.
-
-xs_apiversion (xs_apiversion.U):
- This variable contains the version of the oldest perl binary
- compatible with the present perl. perl.c:incpush() and
- lib/lib.pm will automatically search in $sitearch for older
- directories across major versions back to xs_apiversion.
- This is only useful if you have a perl library directory tree
- structured like the default one.
- See INSTALL for how this works.
- The versioned site_perl directory was introduced in 5.005,
- so that is the lowest possible value.
- Since this can depend on compile time options (such as
- bincompat) it is set by Configure. Other non-default sources
- of potential incompatibility, such as multiplicity, threads,
- debugging, 64bits, sfio, etc., are not checked for currently,
- though in principle we could go snooping around in old
- Config.pm files.
-
-zcat (Loc.U):
- This variable is defined but not used by Configure.
- The value is a plain '' and is not useful.
-
-zip (Loc.U):
- This variable is used internally by Configure to determine the
- full pathname (if any) of the zip program. After Configure runs,
- the value is reset to a plain "zip" and is not useful.
-
diff --git a/contrib/perl5/Porting/config.sh b/contrib/perl5/Porting/config.sh
deleted file mode 100644
index 297a3e2..0000000
--- a/contrib/perl5/Porting/config.sh
+++ /dev/null
@@ -1,839 +0,0 @@
-#!/bin/sh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
-
-# Package name : perl5
-# Source directory : .
-# Configuration time: Sat Mar 3 01:13:55 EET 2001
-# Configured by : jhi
-# Target system : osf1 alpha.hut.fi v4.0 878 alpha
-
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.a'
-_exe=''
-_o='.o'
-afs='false'
-alignbytes='8'
-ansi2knr=''
-aphostname=''
-api_revision='5'
-api_subversion='0'
-api_version='5'
-api_versionstring='5.005'
-ar='ar'
-archlib='/opt/perl/lib/5.6.1/alpha-dec_osf-thread'
-archlibexp='/opt/perl/lib/5.6.1/alpha-dec_osf-thread'
-archname64=''
-archname='alpha-dec_osf-thread'
-archobjs=''
-awk='awk'
-baserev='5.0'
-bash=''
-bin='/opt/perl/bin'
-bincompat5005='undef'
-binexp='/opt/perl/bin'
-bison='bison'
-byacc='byacc'
-byteorder='12345678'
-c='\c'
-castflags='0'
-cat='cat'
-cc='cc'
-cccdlflags=' '
-ccdlflags=' -Wl,-rpath,/opt/perl/lib/5.6.1/alpha-dec_osf-thread/CORE'
-ccflags='-pthread -std -DLANGUAGE_C'
-ccflags_uselargefiles=''
-ccname='cc'
-ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_BSD=1 SYSTYPE_BSD=1 unix=1'
-ccversion='V5.6-082'
-cf_by='jhi'
-cf_email='yourname@yourhost.yourplace.com'
-cf_time='Sat Mar 3 01:13:55 EET 2001'
-charsize='1'
-chgrp=''
-chmod=''
-chown=''
-clocktype='clock_t'
-comm='comm'
-compress=''
-contains='grep'
-cp='cp'
-cpio=''
-cpp='cpp'
-cpp_stuff='42'
-cppccsymbols='LANGUAGE_C=1'
-cppflags='-pthread -std -DLANGUAGE_C'
-cpplast=''
-cppminus=''
-cpprun='/usr/bin/cpp'
-cppstdin='cppstdin'
-cppsymbols='_AES_SOURCE=1 __alpha=1 __ALPHA=1 _ANSI_C_SOURCE=1 __LANGUAGE_C__=1 _LONGLONG=1 __osf__=1 _OSF_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 _SYSTYPE_BSD=1 __unix__=1 _XOPEN_SOURCE=1'
-crosscompile='undef'
-cryptlib=''
-csh='csh'
-d_Gconvert='gcvt((x),(n),(b))'
-d_PRIEUldbl='define'
-d_PRIFUldbl='define'
-d_PRIGUldbl='define'
-d_PRIXU64='define'
-d_PRId64='define'
-d_PRIeldbl='define'
-d_PRIfldbl='define'
-d_PRIgldbl='define'
-d_PRIi64='define'
-d_PRIo64='define'
-d_PRIu64='define'
-d_PRIx64='define'
-d_SCNfldbl='define'
-d__fwalk='undef'
-d_access='define'
-d_accessx='undef'
-d_alarm='define'
-d_archlib='define'
-d_atolf='undef'
-d_atoll='undef'
-d_attribut='undef'
-d_bcmp='define'
-d_bcopy='define'
-d_bincompat5005='undef'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='define'
-d_bzero='define'
-d_casti32='undef'
-d_castneg='define'
-d_charvspr='undef'
-d_chown='define'
-d_chroot='define'
-d_chsize='undef'
-d_closedir='define'
-d_const='define'
-d_crypt='define'
-d_csh='define'
-d_cuserid='define'
-d_dbl_dig='define'
-d_difftime='define'
-d_dirnamlen='define'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_drand48proto='define'
-d_dup2='define'
-d_eaccess='undef'
-d_endgrent='define'
-d_endhent='define'
-d_endnent='define'
-d_endpent='define'
-d_endpwent='define'
-d_endsent='define'
-d_eofnblk='define'
-d_eunice='undef'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fcntl_can_lock='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_flexfnam='define'
-d_flock='define'
-d_fork='define'
-d_fpathconf='define'
-d_fpos64_t='undef'
-d_frexpl='define'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='define'
-d_fstatvfs='define'
-d_fsync='define'
-d_ftello='undef'
-d_ftime='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='define'
-d_getgrent='define'
-d_getgrps='define'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='define'
-d_gethname='define'
-d_gethostprotos='define'
-d_getlogin='define'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnbyaddr='define'
-d_getnbyname='define'
-d_getnent='define'
-d_getnetprotos='define'
-d_getpagsz='define'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='define'
-d_getpgid='define'
-d_getpgrp2='undef'
-d_getpgrp='define'
-d_getppid='define'
-d_getprior='define'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='define'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='define'
-d_getservprotos='define'
-d_getspnam='undef'
-d_gettimeod='define'
-d_gnulibc='undef'
-d_grpasswd='define'
-d_hasmntopt='undef'
-d_htonl='define'
-d_iconv='define'
-d_index='undef'
-d_inetaton='define'
-d_int64_t='undef'
-d_isascii='define'
-d_isnan='define'
-d_isnanl='define'
-d_killpg='define'
-d_lchown='define'
-d_ldbl_dig='define'
-d_link='define'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='define'
-d_longlong='define'
-d_lseekproto='define'
-d_lstat='define'
-d_madvise='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memchr='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='define'
-d_mkstemp='define'
-d_mkstemps='undef'
-d_mktime='define'
-d_mmap='define'
-d_modfl='define'
-d_mprotect='define'
-d_msg='define'
-d_msg_ctrunc='define'
-d_msg_dontroute='define'
-d_msg_oob='define'
-d_msg_peek='define'
-d_msg_proxy='undef'
-d_msgctl='define'
-d_msgget='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_msync='define'
-d_munmap='define'
-d_mymalloc='undef'
-d_nice='define'
-d_nv_preserves_uv='undef'
-d_nv_preserves_uv_bits='53'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe='define'
-d_poll='define'
-d_portable='define'
-d_pthread_yield='undef'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='define'
-d_pwexpire='undef'
-d_pwgecos='define'
-d_pwpasswd='define'
-d_pwquota='define'
-d_qgcvt='undef'
-d_quad='define'
-d_readdir='define'
-d_readlink='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='define'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sbrkproto='define'
-d_sched_yield='define'
-d_scm_rights='define'
-d_seekdir='define'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semctl_semun='define'
-d_semget='define'
-d_semop='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='define'
-d_setgrps='define'
-d_sethent='define'
-d_setlinebuf='define'
-d_setlocale='define'
-d_setnent='define'
-d_setpent='define'
-d_setpgid='define'
-d_setpgrp2='undef'
-d_setpgrp='define'
-d_setprior='define'
-d_setproctitle='undef'
-d_setpwent='define'
-d_setregid='define'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='define'
-d_setrgid='define'
-d_setruid='define'
-d_setsent='define'
-d_setsid='define'
-d_setvbuf='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigsetjmp='define'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='define'
-d_socks5_init='undef'
-d_sqrtl='define'
-d_statblks='define'
-d_statfs_f_flags='define'
-d_statfs_s='define'
-d_statvfs='define'
-d_stdio_cnt_lval='define'
-d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='define'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='define'
-d_stdiobase='define'
-d_stdstdio='define'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strtod='define'
-d_strtol='define'
-d_strtold='undef'
-d_strtoll='undef'
-d_strtoul='define'
-d_strtoull='undef'
-d_strtouq='undef'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='define'
-d_sysconf='define'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='define'
-d_telldirproto='define'
-d_time='define'
-d_times='define'
-d_truncate='define'
-d_tzname='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_ustat='define'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_volatile='define'
-d_vprintf='define'
-d_wait4='define'
-d_waitpid='define'
-d_wcstombs='define'
-d_wctomb='define'
-d_xenix='undef'
-date='date'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-defvoidused='15'
-direntrytype='struct dirent'
-dlext='so'
-dlsrc='dl_dlopen.xs'
-doublesize='8'
-drand01='drand48()'
-dynamic_ext='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Fcntl File/Glob IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Sys/Hostname Sys/Syslog Thread attrs re'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-eunicefix=':'
-exe_ext=''
-expr='expr'
-extensions='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Fcntl File/Glob IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Sys/Hostname Sys/Syslog Thread attrs re Errno'
-fflushNULL='define'
-fflushall='undef'
-find=''
-firstmakefile='makefile'
-flex=''
-fpossize='8'
-fpostype='fpos_t'
-freetype='void'
-full_ar='/usr/bin/ar'
-full_csh='/usr/bin/csh'
-full_sed='/usr/bin/sed'
-gccosandvers=''
-gccversion=''
-gidformat='"u"'
-gidsign='1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib'
-grep='grep'
-groupcat='cat /etc/group'
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-hostcat='cat /etc/hosts'
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='int'
-i64size='8'
-i64type='long'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bsdioctl=''
-i_db='define'
-i_dbm='define'
-i_dirent='define'
-i_dld='undef'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_gdbm='undef'
-i_grp='define'
-i_iconv='define'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_libutil='undef'
-i_limits='define'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_math='define'
-i_memory='undef'
-i_mntent='undef'
-i_ndbm='define'
-i_netdb='define'
-i_neterrno='undef'
-i_netinettcp='define'
-i_niin='define'
-i_poll='define'
-i_prot='define'
-i_pthread='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sunmath='undef'
-i_sysaccess='define'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_syslog='define'
-i_sysmman='define'
-i_sysmode='define'
-i_sysmount='define'
-i_sysndir='undef'
-i_sysparam='define'
-i_sysresrc='define'
-i_syssecrt='define'
-i_sysselct='define'
-i_syssockio=''
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysuio='define'
-i_sysun='define'
-i_sysutsname='define'
-i_sysvfs='undef'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='undef'
-i_unistd='define'
-i_ustat='define'
-i_utime='define'
-i_values='define'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ignore_versioned_solibs=''
-inc_version_list=' '
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='/opt/perl/lib/5.6.1/alpha-dec_osf-thread'
-installbin='/opt/perl/bin'
-installman1dir='/opt/perl/man/man1'
-installman3dir='/opt/perl/man/man3'
-installprefix='/opt/perl'
-installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.6.1'
-installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.6.1/alpha-dec_osf-thread'
-installsitebin='/opt/perl/bin'
-installsitelib='/opt/perl/lib/site_perl/5.6.1'
-installstyle='lib'
-installusrbinperl='define'
-installvendorarch=''
-installvendorbin=''
-installvendorlib=''
-intsize='4'
-issymlink='-h'
-ivdformat='"ld"'
-ivsize='8'
-ivtype='long'
-known_extensions='B ByteLoader DB_File Data/Dumper Devel/DProf Devel/Peek Fcntl File/Glob GDBM_File IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Sys/Hostname Sys/Syslog Thread attrs re'
-ksh=''
-ld='ld'
-lddlflags='-shared -expect_unresolved "*" -msym -std -s'
-ldflags=''
-ldflags_uselargefiles=''
-ldlibpthname='LD_LIBRARY_PATH'
-less='less'
-lib_ext='.a'
-libc='/usr/shlib/libc.so'
-libperl='libperl.so'
-libpth='/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib'
-libs='-lgdbm -ldbm -ldb -lm -liconv -lutil -lpthread -lexc'
-libsdirs=' /usr/shlib /usr/ccs/lib'
-libsfiles=' libgdbm.so libdbm.a libdb.so libm.so libiconv.so libutil.a libpthread.so libexc.so'
-libsfound=' /usr/shlib/libgdbm.so /usr/ccs/lib/libdbm.a /usr/shlib/libdb.so /usr/shlib/libm.so /usr/shlib/libiconv.so /usr/ccs/lib/libutil.a /usr/shlib/libpthread.so /usr/shlib/libexc.so'
-libspath=' /usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib'
-libswanted='sfio socket bind inet nsl nm gdbm dbm db malloc dld ld sun m cposix posix ndir dir crypt sec ucb BSD x iconv util pthread exc'
-libswanted_uselargefiles=''
-line=''
-lint=''
-lkflags=''
-ln='ln'
-lns='/usr/bin/ln -s'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblsize='8'
-longlongsize='8'
-longsize='8'
-lp=''
-lpr=''
-ls='ls'
-lseeksize='8'
-lseektype='off_t'
-mail=''
-mailx=''
-make='make'
-make_set_make='#'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-man1dir='/opt/perl/man/man1'
-man1direxp='/opt/perl/man/man1'
-man1ext='1'
-man3dir='/opt/perl/man/man3'
-man3direxp='/opt/perl/man/man3'
-man3ext='3'
-mips_type=''
-mkdir='mkdir'
-mmaptype='void *'
-modetype='mode_t'
-more='more'
-multiarch='undef'
-mv=''
-myarchname='alpha-dec_osf'
-mydomain='.yourplace.com'
-myhostname='yourhost'
-myuname='osf1 alpha.hut.fi v4.0 878 alpha '
-n=''
-netdb_hlen_type='int'
-netdb_host_type='const char *'
-netdb_name_type='const char *'
-netdb_net_type='int'
-nm='nm'
-nm_opt='-p'
-nm_so_opt=''
-nonxs_ext='Errno'
-nroff='nroff'
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-old_pthread_create_joinable=''
-optimize='-O'
-orderlib='false'
-osname='dec_osf'
-osvers='4.0'
-otherlibdirs=' '
-package='perl5'
-pager='/c/bin/less'
-passcat='cat /etc/passwd'
-patchlevel='6'
-path_sep=':'
-perl5='/u/vieraat/vieraat/jhi/Perl/bin/perl'
-perl=''
-perladmin='yourname@yourhost.yourplace.com'
-perllibs='-lm -liconv -lutil -lpthread -lexc'
-perlpath='/opt/perl/bin/perl'
-pg='pg'
-phostname=''
-pidtype='pid_t'
-plibpth=''
-pm_apiversion='5.005'
-pmake=''
-pr=''
-prefix='/opt/perl'
-prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.6.1'
-privlibexp='/opt/perl/lib/5.6.1'
-prototype='define'
-ptrsize='8'
-quadkind='2'
-quadtype='long'
-randbits='48'
-randfunc='drand48'
-randseedtype='long'
-ranlib=':'
-rd_nodata='-1'
-revision='5'
-rm='rm'
-rmail=''
-runnm='true'
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
-sPRIXU64='"lX"'
-sPRId64='"ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"li"'
-sPRIo64='"lo"'
-sPRIu64='"lu"'
-sPRIx64='"lx"'
-sSCNfldbl='"f"'
-sched_yield='sched_yield()'
-scriptdir='/opt/perl/bin'
-scriptdirexp='/opt/perl/bin'
-sed='sed'
-seedfunc='srand48'
-selectminbits='32'
-selecttype='fd_set *'
-sendmail=''
-sh='/bin/sh'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='49'
-sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM IOINT STOP TSTP CONT CHLD TTIN TTOU AIO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2 RESV RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 MAX IOT LOST URG CLD IO POLL PTY PWR RTMAX '
-sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "IOINT", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "AIO", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "INFO", "USR1", "USR2", "RESV", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "MAX", "IOT", "LOST", "URG", "CLD", "IO", "POLL", "PTY", "PWR", "RTMAX", 0'
-sig_num='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 6 6 16 20 23 23 23 29 48 '
-sig_num_init='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, 6, 6, 16, 20, 23, 23, 23, 29, 48, 0'
-signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.6.1/alpha-dec_osf-thread'
-sitearchexp='/opt/perl/lib/site_perl/5.6.1/alpha-dec_osf-thread'
-sitebin='/opt/perl/bin'
-sitebinexp='/opt/perl/bin'
-sitelib='/opt/perl/lib/site_perl/5.6.1'
-sitelib_stem='/opt/perl/lib/site_perl'
-sitelibexp='/opt/perl/lib/site_perl/5.6.1'
-siteprefix='/opt/perl'
-siteprefixexp='/opt/perl'
-sizesize='8'
-sizetype='size_t'
-sleep=''
-smail=''
-so='so'
-sockethdr=''
-socketlib=''
-socksizetype='int'
-sort='sort'
-spackage='Perl5'
-spitshell='cat'
-src='/m/fs/work/work/permanent/perl/pp4/maint-5.6/perl'
-ssizetype='ssize_t'
-startperl='#!/opt/perl/bin/perl'
-startsh='#!/bin/sh'
-static_ext=' '
-stdchar='unsigned char'
-stdio_base='((fp)->_base)'
-stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)'
-stdio_cnt='((fp)->_cnt)'
-stdio_filbuf=''
-stdio_ptr='((fp)->_ptr)'
-stdio_stream_array='_iob'
-strings='/usr/include/string.h'
-submit=''
-subversion='1'
-sysman='/usr/man/man1'
-tail=''
-tar=''
-tbl=''
-tee=''
-test='test'
-timeincl='/usr/include/sys/time.h '
-timetype='time_t'
-touch='touch'
-tr='tr'
-trnl='\n'
-troff=''
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned int'
-u64size='8'
-u64type='unsigned long'
-u8size='1'
-u8type='unsigned char'
-uidformat='"u"'
-uidsign='1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned long'
-use5005threads='define'
-use64bitall='define'
-use64bitint='define'
-usedl='define'
-useithreads='undef'
-uselargefiles='define'
-uselongdouble='undef'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='true'
-useopcode='true'
-useperlio='undef'
-useposix='true'
-usesfio='false'
-useshrplib='true'
-usesocks='undef'
-usethreads='define'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='8'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorprefix=''
-vendorprefixexp=''
-version='5.6.1'
-versiononly='undef'
-vi=''
-voidflags='15'
-xlibpth='/usr/lib/386 /lib/386'
-xs_apiversion='5.6.1'
-yacc='/u/vieraat/vieraat/jhi/Perl/bin/byacc'
-yaccflags=''
-zcat=''
-zip='zip'
-# Configure command line arguments.
-config_arg0='./Configure'
-config_args='-Dprefix=/opt/perl -Doptimize=-O -Dusethreads -Duse5005threads -Duse64bitint -Duselargefiles -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -dE -Dusedevel'
-config_argc=13
-config_arg1='-Dprefix=/opt/perl'
-config_arg2='-Doptimize=-O'
-config_arg3='-Dusethreads'
-config_arg4='-Duse5005threads'
-config_arg5='-Duse64bitint'
-config_arg6='-Duselargefiles'
-config_arg7='-Dcf_by=yourname'
-config_arg8='-Dcf_email=yourname@yourhost.yourplace.com'
-config_arg9='-Dperladmin=yourname@yourhost.yourplace.com'
-config_arg10='-Dmydomain=.yourplace.com'
-config_arg11='-Dmyhostname=yourhost'
-config_arg12='-dE'
-config_arg13='-Dusedevel'
-PERL_REVISION=5
-PERL_VERSION=6
-PERL_SUBVERSION=1
-PERL_API_REVISION=5
-PERL_API_VERSION=5
-PERL_API_SUBVERSION=0
-CONFIGDOTSH=true
-# Variables propagated from previous config.sh file.
-pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
diff --git a/contrib/perl5/Porting/config_H b/contrib/perl5/Porting/config_H
deleted file mode 100644
index 311fd91..0000000
--- a/contrib/perl5/Porting/config_H
+++ /dev/null
@@ -1,3223 +0,0 @@
-/* This file (config_H) is a sample config.h file. If you are unable
- to successfully run Configure, copy this file to config.h and
- edit it to suit your system.
-*/
-/*
- * 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.
- *
- * $Id: Config_h.U,v 3.0.1.5 1997/02/28 14:57:43 ram Exp $
- */
-
-/*
- * Package name : perl5
- * Source directory : .
- * Configuration time: Sat Mar 3 01:13:55 EET 2001
- * Configured by : jhi
- * Target system : osf1 alpha.hut.fi v4.0 878 alpha
- */
-
-#ifndef _config_h_
-#define _config_h_
-
-/* LOC_SED:
- * This symbol holds the complete pathname to the sed program.
- */
-#define LOC_SED "/usr/bin/sed" /**/
-
-/* HAS_ALARM:
- * This symbol, if defined, indicates that the alarm routine is
- * available.
- */
-#define HAS_ALARM /**/
-
-/* HASATTRIBUTE:
- * This symbol indicates the C compiler can check for function attributes,
- * such as printf formats. This is normally only supported by GNU cc.
- */
-/*#define HASATTRIBUTE / **/
-#ifndef HASATTRIBUTE
-#define __attribute__(_arg_)
-#endif
-
-/* HAS_BCMP:
- * This symbol is defined if the bcmp() routine is available to
- * compare blocks of memory.
- */
-#define HAS_BCMP /**/
-
-/* HAS_BCOPY:
- * This symbol is defined if the bcopy() routine is available to
- * copy blocks of memory.
- */
-#define HAS_BCOPY /**/
-
-/* HAS_BZERO:
- * This symbol is defined if the bzero() routine is available to
- * set a memory block to 0.
- */
-#define HAS_BZERO /**/
-
-/* HAS_CHOWN:
- * This symbol, if defined, indicates that the chown routine is
- * available.
- */
-#define HAS_CHOWN /**/
-
-/* HAS_CHROOT:
- * This symbol, if defined, indicates that the chroot routine is
- * available.
- */
-#define HAS_CHROOT /**/
-
-/* 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.
- */
-/*#define HAS_CHSIZE / **/
-
-/* HASCONST:
- * This symbol, if defined, indicates that this C compiler knows about
- * the const type. There is no need to actually test for that symbol
- * within your programs. The mere use of the "const" keyword will
- * trigger the necessary tests.
- */
-#define HASCONST /**/
-#ifndef HASCONST
-#define const
-#endif
-
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
-#define HAS_CRYPT /**/
-
-/* HAS_CUSERID:
- * This symbol, if defined, indicates that the cuserid routine is
- * available to get character login names.
- */
-#define HAS_CUSERID /**/
-
-/* HAS_DBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol DBL_DIG, which is the number
- * of significant digits in a double precision number. If this
- * symbol is not defined, a guess of 15 is usually pretty good.
- */
-#define HAS_DBL_DIG /* */
-
-/* HAS_DIFFTIME:
- * This symbol, if defined, indicates that the difftime routine is
- * available.
- */
-#define HAS_DIFFTIME /**/
-
-/* HAS_DLERROR:
- * This symbol, if defined, indicates that the dlerror routine is
- * available to return a string describing the last error that
- * occurred from a call to dlopen(), dlclose() or dlsym().
- */
-#define HAS_DLERROR /**/
-
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- * This symbol, if defined, indicates that the bug that prevents
- * setuid scripts from being secure is not present in this kernel.
- */
-/* 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.
- */
-/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/
-/*#define DOSUID / **/
-
-/* HAS_DUP2:
- * This symbol, if defined, indicates that the dup2 routine is
- * available to duplicate file descriptors.
- */
-#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 /**/
-
-/* HAS_FGETPOS:
- * This symbol, if defined, indicates that the fgetpos routine is
- * available to get the file position indicator, similar to ftell().
- */
-#define HAS_FGETPOS /**/
-
-/* HAS_FLOCK:
- * This symbol, if defined, indicates that the flock routine is
- * available to do file locking.
- */
-#define HAS_FLOCK /**/
-
-/* HAS_FORK:
- * This symbol, if defined, indicates that the fork routine is
- * available.
- */
-#define HAS_FORK /**/
-
-/* HAS_FSETPOS:
- * This symbol, if defined, indicates that the fsetpos routine is
- * available to set the file position indicator, similar to fseek().
- */
-#define HAS_FSETPOS /**/
-
-/* HAS_GETTIMEOFDAY:
- * This symbol, if defined, indicates that the gettimeofday() system
- * call is available for a sub-second accuracy clock. Usually, the file
- * <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
- * The type "Timeval" should be used to refer to "struct timeval".
- */
-#define HAS_GETTIMEOFDAY /**/
-#ifdef HAS_GETTIMEOFDAY
-#define Timeval struct timeval /* Structure used by gettimeofday() */
-#endif
-
-/* 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_GETLOGIN:
- * This symbol, if defined, indicates that the getlogin routine is
- * available to get the login name.
- */
-#define HAS_GETLOGIN /**/
-
-/* HAS_GETPGID:
- * This symbol, if defined, indicates to the C program that
- * the getpgid(pid) function is available to get the
- * process group id.
- */
-#define HAS_GETPGID /**/
-
-/* HAS_GETPGRP2:
- * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- * routine is available to get the current process group.
- */
-/*#define HAS_GETPGRP2 / **/
-
-/* HAS_GETPPID:
- * This symbol, if defined, indicates that the getppid routine is
- * available to get the parent process ID.
- */
-#define HAS_GETPPID /**/
-
-/* HAS_GETPRIORITY:
- * This symbol, if defined, indicates that the getpriority routine is
- * available to get a process's priority.
- */
-#define HAS_GETPRIORITY /**/
-
-/* HAS_INET_ATON:
- * This symbol, if defined, indicates to the C program that the
- * inet_aton() function is available to parse IP address "dotted-quad"
- * strings.
- */
-#define HAS_INET_ATON /**/
-
-/* 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_LINK:
- * This symbol, if defined, indicates that the link routine is
- * available to create hard links.
- */
-#define HAS_LINK /**/
-
-/* HAS_LOCALECONV:
- * This symbol, if defined, indicates that the localeconv routine is
- * available for numeric and monetary formatting conventions.
- */
-#define HAS_LOCALECONV /**/
-
-/* HAS_LOCKF:
- * This symbol, if defined, indicates that the lockf routine is
- * available to do file locking.
- */
-#define HAS_LOCKF /**/
-
-/* HAS_LSTAT:
- * This symbol, if defined, indicates that the lstat routine is
- * available to do file stats on symbolic links.
- */
-#define HAS_LSTAT /**/
-
-/* HAS_MBLEN:
- * This symbol, if defined, indicates that the mblen routine is available
- * to find the number of bytes in a multibye character.
- */
-#define HAS_MBLEN /**/
-
-/* HAS_MBSTOWCS:
- * This symbol, if defined, indicates that the mbstowcs routine is
- * available to covert a multibyte string into a wide character string.
- */
-#define HAS_MBSTOWCS /**/
-
-/* HAS_MBTOWC:
- * This symbol, if defined, indicates that the mbtowc routine is available
- * to covert a multibyte to a wide character.
- */
-#define HAS_MBTOWC /**/
-
-/* HAS_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * to compare blocks of memory.
- */
-#define HAS_MEMCMP /**/
-
-/* HAS_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy blocks of memory.
- */
-#define HAS_MEMCPY /**/
-
-/* HAS_MEMMOVE:
- * This symbol, if defined, indicates that the memmove routine is available
- * to copy potentially overlapping blocks of memory. This should be used
- * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
- * own version.
- */
-#define HAS_MEMMOVE /**/
-
-/* HAS_MEMSET:
- * This symbol, if defined, indicates that the memset routine is available
- * to set blocks of memory.
- */
-#define HAS_MEMSET /**/
-
-/* 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_MKFIFO:
- * This symbol, if defined, indicates that the mkfifo routine is
- * available to create FIFOs. Otherwise, mknod should be able to
- * do it for you. However, if mkfifo is there, mknod might require
- * super-user privileges which mkfifo will not.
- */
-#define HAS_MKFIFO /**/
-
-/* HAS_MKTIME:
- * This symbol, if defined, indicates that the mktime routine is
- * available.
- */
-#define HAS_MKTIME /**/
-
-/* HAS_MSYNC:
- * This symbol, if defined, indicates that the msync system call is
- * available to synchronize a mapped file.
- */
-#define HAS_MSYNC /**/
-
-/* HAS_MUNMAP:
- * This symbol, if defined, indicates that the munmap system call is
- * available to unmap a region, usually mapped by mmap().
- */
-#define HAS_MUNMAP /**/
-
-/* HAS_NICE:
- * This symbol, if defined, indicates that the nice routine is
- * available.
- */
-#define HAS_NICE /**/
-
-/* HAS_PATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given filename.
- */
-/* HAS_FPATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given open file descriptor.
- */
-#define HAS_PATHCONF /**/
-#define HAS_FPATHCONF /**/
-
-/* HAS_PAUSE:
- * This symbol, if defined, indicates that the pause routine is
- * available to suspend a process until a signal is received.
- */
-#define HAS_PAUSE /**/
-
-/* HAS_PIPE:
- * This symbol, if defined, indicates that the pipe routine is
- * available to create an inter-process channel.
- */
-#define HAS_PIPE /**/
-
-/* HAS_POLL:
- * This symbol, if defined, indicates that the poll routine is
- * available to poll active file descriptors. You may safely
- * include <poll.h> when this symbol is defined.
- */
-#define HAS_POLL /**/
-
-/* HAS_READDIR:
- * This symbol, if defined, indicates that the readdir routine is
- * available to read directory entries. You may have to include
- * <dirent.h>. See I_DIRENT.
- */
-#define HAS_READDIR /**/
-
-/* HAS_SEEKDIR:
- * This symbol, if defined, indicates that the seekdir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_SEEKDIR /**/
-
-/* HAS_TELLDIR:
- * This symbol, if defined, indicates that the telldir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_TELLDIR /**/
-
-/* HAS_REWINDDIR:
- * This symbol, if defined, indicates that the rewinddir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_REWINDDIR /**/
-
-/* HAS_READLINK:
- * This symbol, if defined, indicates that the readlink routine is
- * available to read the value of a symbolic link.
- */
-#define HAS_READLINK /**/
-
-/* 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 routine is
- * available to select active file descriptors. If the timeout field
- * is used, <sys/time.h> may need to be included.
- */
-#define HAS_SELECT /**/
-
-/* 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_SETLINEBUF:
- * This symbol, if defined, indicates that the setlinebuf routine is
- * available to change stderr or stdout from block-buffered or unbuffered
- * to a line-buffered mode.
- */
-#define HAS_SETLINEBUF /**/
-
-/* HAS_SETLOCALE:
- * This symbol, if defined, indicates that the setlocale routine is
- * available to handle locale-specific ctype implementations.
- */
-#define HAS_SETLOCALE /**/
-
-/* HAS_SETPGID:
- * This symbol, if defined, indicates that the setpgid(pid, gpid)
- * routine is available to set process group ID.
- */
-#define HAS_SETPGID /**/
-
-/* HAS_SETPGRP2:
- * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- * routine is available to set the current process group.
- */
-/*#define 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
- * process.
- */
-/* HAS_SETRESGID:
- * This symbol, if defined, indicates that the setresgid routine is
- * available to change the real, effective and saved gid of the current
- * process.
- */
-#define HAS_SETREGID /**/
-/*#define 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
- * process.
- */
-/* HAS_SETRESUID:
- * This symbol, if defined, indicates that the setresuid routine is
- * available to change the real, effective and saved uid of the current
- * process.
- */
-#define HAS_SETREUID /**/
-/*#define 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_SETSID:
- * This symbol, if defined, indicates that the setsid routine is
- * available to set the process group ID.
- */
-#define HAS_SETSID /**/
-
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
- */
-/* HAS_SHMAT_PROTOTYPE:
- * This symbol, if defined, indicates that the sys/shm.h includes
- * a prototype for shmat(). Otherwise, it is up to the program to
- * guess one. Shmat_t shmat _((int, Shmat_t, int)) is a good guess,
- * but not always right so it should be emitted by the program only
- * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
- */
-#define Shmat_t void * /**/
-#define HAS_SHMAT_PROTOTYPE /**/
-
-/* HAS_STRCHR:
- * This symbol is defined to indicate that the strchr()/strrchr()
- * functions are available for string searching. If not, try the
- * index()/rindex() pair.
- */
-/* HAS_INDEX:
- * This symbol is defined to indicate that the index()/rindex()
- * functions are available for string searching.
- */
-#define HAS_STRCHR /**/
-/*#define HAS_INDEX / **/
-
-/* HAS_STRCOLL:
- * This symbol, if defined, indicates that the strcoll routine is
- * available to compare strings using collating information.
- */
-#define HAS_STRCOLL /**/
-
-/* USE_STRUCT_COPY:
- * 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 USE_STRUCT_COPY /**/
-
-/* HAS_STRTOD:
- * This symbol, if defined, indicates that the strtod routine is
- * available to provide better numeric string conversion than atof().
- */
-#define HAS_STRTOD /**/
-
-/* HAS_STRTOL:
- * This symbol, if defined, indicates that the strtol routine is available
- * to provide better numeric string conversion than atoi() and friends.
- */
-#define HAS_STRTOL /**/
-
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
-/* HAS_STRXFRM:
- * This symbol, if defined, indicates that the strxfrm() routine is
- * available to transform strings.
- */
-#define HAS_STRXFRM /**/
-
-/* 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_SYSCONF:
- * This symbol, if defined, indicates that sysconf() is available
- * to determine system related limits and options.
- */
-#define HAS_SYSCONF /**/
-
-/* HAS_SYSTEM:
- * This symbol, if defined, indicates that the system routine is
- * available to issue a shell command.
- */
-#define HAS_SYSTEM /**/
-
-/* HAS_TCGETPGRP:
- * This symbol, if defined, indicates that the tcgetpgrp routine is
- * available to get foreground process group ID.
- */
-#define HAS_TCGETPGRP /**/
-
-/* HAS_TCSETPGRP:
- * This symbol, if defined, indicates that the tcsetpgrp routine is
- * available to set foreground process group ID.
- */
-#define HAS_TCSETPGRP /**/
-
-/* HAS_TRUNCATE:
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
-#define HAS_TRUNCATE /**/
-
-/* HAS_TZNAME:
- * This symbol, if defined, indicates that the tzname[] array is
- * available to access timezone names.
- */
-#define HAS_TZNAME /**/
-
-/* HAS_UMASK:
- * This symbol, if defined, indicates that the umask routine is
- * available to set and get the value of the file creation mask.
- */
-#define HAS_UMASK /**/
-
-/* HASVOLATILE:
- * This symbol, if defined, indicates that this C compiler knows about
- * the volatile declaration.
- */
-#define HASVOLATILE /**/
-#ifndef HASVOLATILE
-#define volatile
-#endif
-
-/* HAS_WAIT4:
- * This symbol, if defined, indicates that wait4() exists.
- */
-#define HAS_WAIT4 /**/
-
-/* HAS_WAITPID:
- * This symbol, if defined, indicates that the waitpid routine is
- * available to wait for child process.
- */
-#define HAS_WAITPID /**/
-
-/* HAS_WCSTOMBS:
- * This symbol, if defined, indicates that the wcstombs routine is
- * available to convert wide character strings to multibyte strings.
- */
-#define HAS_WCSTOMBS /**/
-
-/* HAS_WCTOMB:
- * This symbol, if defined, indicates that the wctomb routine is available
- * to covert a wide character to a multibyte.
- */
-#define HAS_WCTOMB /**/
-
-/* I_ARPA_INET:
- * This symbol, if defined, indicates to the C program that it should
- * include <arpa/inet.h> to get inet_addr and friends declarations.
- */
-#define I_ARPA_INET /**/
-
-/* I_DBM:
- * This symbol, if defined, indicates that <dbm.h> exists and should
- * be included.
- */
-/* I_RPCSVC_DBM:
- * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
- * should be included.
- */
-#define I_DBM /**/
-/*#define I_RPCSVC_DBM / **/
-
-/* I_DIRENT:
- * This symbol, if defined, indicates to the C program that it should
- * include <dirent.h>. Using this symbol also triggers the definition
- * of the Direntry_t define which ends up being 'struct dirent' or
- * 'struct direct' depending on the availability of <dirent.h>.
- */
-/* 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.
- */
-/* Direntry_t:
- * This symbol is set to 'struct direct' or 'struct dirent' depending on
- * whether dirent is available or not. You should use this pseudo type to
- * portably declare your directory entries.
- */
-#define I_DIRENT /**/
-#define DIRNAMLEN /**/
-#define Direntry_t struct dirent
-
-/* I_DLFCN:
- * This symbol, if defined, indicates that <dlfcn.h> exists and should
- * be included.
- */
-#define I_DLFCN /**/
-
-/* I_FCNTL:
- * This manifest constant tells the C program to include <fcntl.h>.
- */
-/*#define I_FCNTL / **/
-
-/* I_FLOAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <float.h> to get definition of symbols like DBL_MAX or
- * DBL_MIN, i.e. machine dependent floating point values.
- */
-#define I_FLOAT /**/
-
-/* I_LIMITS:
- * This symbol, if defined, indicates to the C program that it should
- * include <limits.h> to get definition of symbols like WORD_BIT or
- * LONG_MAX, i.e. machine dependant limitations.
- */
-#define I_LIMITS /**/
-
-/* I_LOCALE:
- * This symbol, if defined, indicates to the C program that it should
- * include <locale.h>.
- */
-#define I_LOCALE /**/
-
-/* I_MATH:
- * This symbol, if defined, indicates to the C program that it should
- * include <math.h>.
- */
-#define I_MATH /**/
-
-/* I_MEMORY:
- * This symbol, if defined, indicates to the C program that it should
- * include <memory.h>.
- */
-/*#define I_MEMORY / **/
-
-/* I_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-#define I_NDBM /**/
-
-/* I_NET_ERRNO:
- * This symbol, if defined, indicates that <net/errno.h> exists and
- * should be included.
- */
-/*#define I_NET_ERRNO / **/
-
-/* I_NETINET_IN:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
- */
-#define I_NETINET_IN /**/
-
-/* I_SFIO:
- * This symbol, if defined, indicates to the C program that it should
- * include <sfio.h>.
- */
-/*#define I_SFIO / **/
-
-/* I_STDDEF:
- * This symbol, if defined, indicates that <stddef.h> exists and should
- * be included.
- */
-#define I_STDDEF /**/
-
-/* I_STDLIB:
- * This symbol, if defined, indicates that <stdlib.h> exists and should
- * be included.
- */
-#define I_STDLIB /**/
-
-/* I_STRING:
- * This symbol, if defined, indicates to the C program that it should
- * include <string.h> (USG systems) instead of <strings.h> (BSD systems).
- */
-#define I_STRING /**/
-
-/* I_SYS_DIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/dir.h>.
- */
-#define I_SYS_DIR /**/
-
-/* I_SYS_FILE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/file.h> to get definition of R_OK and friends.
- */
-#define I_SYS_FILE /**/
-
-/* I_SYS_IOCTL:
- * This symbol, if defined, indicates that <sys/ioctl.h> exists and should
- * be included. Otherwise, include <sgtty.h> or <termio.h>.
- */
-#define I_SYS_IOCTL /**/
-
-/* I_SYS_NDIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/ndir.h>.
- */
-/*#define I_SYS_NDIR / **/
-
-/* I_SYS_PARAM:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/param.h>.
- */
-#define I_SYS_PARAM /**/
-
-/* I_SYS_RESOURCE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/resource.h>.
- */
-#define I_SYS_RESOURCE /**/
-
-/* I_SYS_SELECT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/select.h> in order to get definition of struct timeval.
- */
-#define I_SYS_SELECT /**/
-
-/* I_SYS_STAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/stat.h>.
- */
-#define I_SYS_STAT /**/
-
-/* I_SYS_TIMES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/times.h>.
- */
-#define I_SYS_TIMES /**/
-
-/* I_SYS_TYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/types.h>.
- */
-#define I_SYS_TYPES /**/
-
-/* I_SYS_UN:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/un.h> to get UNIX domain socket definitions.
- */
-#define I_SYS_UN /**/
-
-/* I_SYS_WAIT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/wait.h>.
- */
-#define I_SYS_WAIT /**/
-
-/* I_TERMIO:
- * This symbol, if defined, indicates that the program should include
- * <termio.h> rather than <sgtty.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/* I_TERMIOS:
- * This symbol, if defined, indicates that the program should include
- * the POSIX termios.h rather than sgtty.h or termio.h.
- * There are also differences in the ioctl() calls that depend on the
- * value of this symbol.
- */
-/* I_SGTTY:
- * This symbol, if defined, indicates that the program should include
- * <sgtty.h> rather than <termio.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/*#define I_TERMIO / **/
-#define I_TERMIOS /**/
-/*#define I_SGTTY / **/
-
-/* I_UNISTD:
- * This symbol, if defined, indicates to the C program that it should
- * include <unistd.h>.
- */
-#define I_UNISTD /**/
-
-/* I_UTIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <utime.h>.
- */
-#define I_UTIME /**/
-
-/* I_VALUES:
- * This symbol, if defined, indicates to the C program that it should
- * include <values.h> to get definition of symbols like MINFLOAT or
- * MAXLONG, i.e. machine dependant limitations. Probably, you
- * should use <limits.h> instead, if it is available.
- */
-#define I_VALUES /**/
-
-/* I_STDARG:
- * This symbol, if defined, indicates that <stdarg.h> exists and should
- * be included.
- */
-/* I_VARARGS:
- * This symbol, if defined, indicates to the C program that it should
- * include <varargs.h>.
- */
-#define I_STDARG /**/
-/*#define I_VARARGS / **/
-
-/* I_VFORK:
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
-/*#define I_VFORK / **/
-
-/* CAN_PROTOTYPE:
- * If defined, this macro indicates that the C compiler can handle
- * function prototypes.
- */
-/* _:
- * This macro is used to declare function parameters for folks who want
- * to make declarations with prototypes using a different style than
- * the above macros. Use double parentheses. For example:
- *
- * int main _((int argc, char *argv[]));
- */
-#define CAN_PROTOTYPE /**/
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-
-/* SH_PATH:
- * This symbol contains the full pathname to the shell used on this
- * on this system to execute Bourne shell scripts. Usually, this will be
- * /bin/sh, though it's possible that some systems will have /bin/ksh,
- * /bin/pdksh, /bin/ash, /bin/bash, or even something such as
- * D:/bin/sh.exe.
- */
-#define SH_PATH "/bin/sh" /**/
-
-/* CROSSCOMPILE:
- * This symbol, if defined, signifies that we our
- * build process is a cross-compilation.
- */
-/*#define CROSSCOMPILE / **/
-
-/* INTSIZE:
- * This symbol contains the value of sizeof(int) so that the C
- * preprocessor can make decisions based on it.
- */
-/* LONGSIZE:
- * This symbol contains the value of sizeof(long) so that the C
- * preprocessor can make decisions based on it.
- */
-/* SHORTSIZE:
- * This symbol contains the value of sizeof(short) so that the C
- * preprocessor can make decisions based on it.
- */
-#define INTSIZE 4 /**/
-#define LONGSIZE 8 /**/
-#define SHORTSIZE 2 /**/
-
-/* MULTIARCH:
- * This symbol, if defined, signifies that the build
- * process will produce some binary files that are going to be
- * used in a cross-platform environment. This is the case for
- * example with the NeXT "fat" binaries that contain executables
- * for several CPUs.
- */
-/*#define MULTIARCH / **/
-
-/* HAS_QUAD:
- * This symbol, if defined, tells that there's a 64-bit integer type,
- * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one
- * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T.
- */
-#define HAS_QUAD /**/
-#ifdef HAS_QUAD
-# define Quad_t long /**/
-# define Uquad_t unsigned long /**/
-# define QUADKIND 2 /**/
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-#endif
-
-/* HAS_ACCESSX:
- * This symbol, if defined, indicates that the accessx routine is
- * available to do extended access checks.
- */
-/*#define HAS_ACCESSX / **/
-
-/* HAS_EACCESS:
- * This symbol, if defined, indicates that the eaccess routine is
- * available to do extended access checks.
- */
-/*#define HAS_EACCESS / **/
-
-/* I_SYS_ACCESS:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/access.h>.
- */
-#define I_SYS_ACCESS /**/
-
-/* I_SYS_SECURITY:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/security.h>.
- */
-#define I_SYS_SECURITY /**/
-
-/* OSNAME:
- * This symbol contains the name of the operating system, as determined
- * by Configure. You shouldn't rely on it too much; the specific
- * feature tests from Configure are generally more reliable.
- */
-#define OSNAME "dec_osf" /**/
-
-/* MEM_ALIGNBYTES:
- * This symbol contains the number of bytes required to align a
- * double, or a long double when applicable. Usual values are 2,
- * 4 and 8. The default is eight, for safety.
- */
-#if defined(CROSSCOMPILE) || defined(MULTIARCH)
-# define MEM_ALIGNBYTES 8
-#else
-#define MEM_ALIGNBYTES 8
-#endif
-
-/* ARCHLIB:
- * This variable, if defined, holds the name of the directory in
- * which the user wants to put architecture-dependent public
- * library files for perl5. It is most often a local directory
- * such as /usr/local/lib. Programs using this variable must be
- * prepared to deal with filename expansion. If ARCHLIB is the
- * same as PRIVLIB, it is not defined, since presumably the
- * program already searches PRIVLIB.
- */
-/* ARCHLIB_EXP:
- * This symbol contains the ~name expanded version of ARCHLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define ARCHLIB "/opt/perl/lib/5.6.1/alpha-dec_osf-thread" /**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.6.1/alpha-dec_osf-thread" /**/
-
-/* ARCHNAME:
- * This symbol holds a string representing the architecture name.
- * It may be used to construct an architecture-dependant pathname
- * where library files may be held under a private library, for
- * instance.
- */
-#define ARCHNAME "alpha-dec_osf-thread" /**/
-
-/* HAS_ATOLF:
- * This symbol, if defined, indicates that the atolf routine is
- * available to convert strings into long doubles.
- */
-/*#define HAS_ATOLF / **/
-
-/* HAS_ATOLL:
- * This symbol, if defined, indicates that the atoll routine is
- * available to convert strings into long longs.
- */
-/*#define HAS_ATOLL / **/
-
-/* BIN:
- * This symbol holds the path of the bin directory where the package will
- * be installed. Program must be prepared to deal with ~name substitution.
- */
-/* BIN_EXP:
- * This symbol is the filename expanded version of the BIN symbol, for
- * programs that do not want to deal with that at run-time.
- */
-#define BIN "/opt/perl/bin" /**/
-#define BIN_EXP "/opt/perl/bin" /**/
-
-/* PERL_BINCOMPAT_5005:
- * This symbol, if defined, indicates that this version of Perl should be
- * binary-compatible with Perl 5.005. This is impossible for builds
- * that use features like threads and multiplicity it is always
- * for those versions.
- */
-/*#define PERL_BINCOMPAT_5005 / **/
-
-/* BYTEORDER:
- * This symbol holds the hexadecimal constant defined in byteorder,
- * i.e. 0x1234 or 0x4321, etc...
- * If the compiler supports cross-compiling or multiple-architecture
- * binaries (eg. on NeXT systems), use compiler-defined macros to
- * determine the byte order.
- * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture
- * Binaries (MAB) on either big endian or little endian machines.
- * The endian-ness is available at compile-time. This only matters
- * for perl, where the config.h can be generated and installed on
- * one system, and used by a different architecture to build an
- * extension. Older versions of NeXT that might not have
- * defined either *_ENDIAN__ were all on Motorola 680x0 series,
- * so the default case (for NeXT) is big endian to catch them.
- * This might matter for NeXT 3.0.
- */
-#if defined(CROSSCOMPILE) || defined(MULTIARCH)
-# ifdef __LITTLE_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x1234
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x12345678
-# endif
-# endif
-# else
-# ifdef __BIG_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x4321
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-# endif
-# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__))
-# define BYTEORDER 0x4321
-# endif
-#else
-#define BYTEORDER 0x12345678 /* large digits for MSB */
-#endif /* NeXT */
-
-/* CAT2:
- * This macro catenates 2 tokens together.
- */
-/* STRINGIFY:
- * This macro surrounds its token with double quotes.
- */
-#if 42 == 1
-#define CAT2(a,b) a/**/b
-#define STRINGIFY(a) "a"
- /* If you can get stringification with catify, tell me how! */
-#endif
-#if 42 == 42
-#define PeRl_CaTiFy(a, b) a ## b
-#define PeRl_StGiFy(a) #a
-/* the additional level of indirection enables these macros to be
- * used as arguments to other macros. See K&R 2nd ed., page 231. */
-#define CAT2(a,b) PeRl_CaTiFy(a,b)
-#define StGiFy(a) PeRl_StGiFy(a)
-#define STRINGIFY(a) PeRl_StGiFy(a)
-#endif
-#if 42 != 1 && 42 != 42
-# include "Bletch: How does this C preprocessor catenate tokens?"
-#endif
-
-/* 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", but it can also
- * call a wrapper. See CPPRUN.
- */
-/* 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 "".
- */
-/* CPPRUN:
- * This symbol contains the string which will invoke a C preprocessor on
- * the standard input and produce to standard output. It needs to end
- * with CPPLAST, after all other preprocessor flags have been specified.
- * The main difference with CPPSTDIN is that this program will never be a
- * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
- * available directly to the user. Note that it may well be different from
- * the preprocessor used to compile the C program.
- */
-/* CPPLAST:
- * This symbol is intended to be used along with CPPRUN in the same manner
- * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
- */
-#define CPPSTDIN "cppstdin"
-#define CPPMINUS ""
-#define CPPRUN "/usr/bin/cpp"
-#define CPPLAST ""
-
-/* HAS_ACCESS:
- * This manifest constant lets the C program know that the access()
- * system call is available to check for accessibility using real UID/GID.
- * (always present on UNIX.)
- */
-#define HAS_ACCESS /**/
-
-/* CASTI32:
- * This symbol is defined if the C compiler can cast negative
- * or large floating point numbers to 32-bit ints.
- */
-/*#define CASTI32 / **/
-
-/* CASTNEGFLOAT:
- * This symbol is defined if the C compiler can cast negative
- * 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:
- * 0 = ok
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- * 4 = couldn't cast in argument expression list
- */
-#define CASTNEGFLOAT /**/
-#define CASTFLAGS 0 /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-/*#define VOID_CLOSEDIR / **/
-
-/* HAS_CSH:
- * This symbol, if defined, indicates that the C-shell exists.
- */
-/* CSH:
- * This symbol, if defined, contains the full pathname of csh.
- */
-#define HAS_CSH /**/
-#ifdef HAS_CSH
-#define CSH "/usr/bin/csh" /**/
-#endif
-
-/* DLSYM_NEEDS_UNDERSCORE:
- * This symbol, if defined, indicates that we need to prepend an
- * underscore to the symbol name before calling dlsym(). This only
- * makes sense if you *have* dlsym, which we will presume is the
- * case if you're using dl_dlopen.xs.
- */
-/*#define DLSYM_NEEDS_UNDERSCORE / **/
-
-/* HAS_DRAND48_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern double drand48 _((void));
- */
-#define HAS_DRAND48_PROTO /**/
-
-/* HAS_ENDGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the group database.
- */
-#define HAS_ENDGRENT /**/
-
-/* HAS_ENDHOSTENT:
- * This symbol, if defined, indicates that the endhostent() routine is
- * available to close whatever was being used for host queries.
- */
-#define HAS_ENDHOSTENT /**/
-
-/* HAS_ENDNETENT:
- * This symbol, if defined, indicates that the endnetent() routine is
- * available to close whatever was being used for network queries.
- */
-#define HAS_ENDNETENT /**/
-
-/* HAS_ENDPROTOENT:
- * This symbol, if defined, indicates that the endprotoent() routine is
- * available to close whatever was being used for protocol queries.
- */
-#define HAS_ENDPROTOENT /**/
-
-/* HAS_ENDPWENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the passwd database.
- */
-#define HAS_ENDPWENT /**/
-
-/* HAS_ENDSERVENT:
- * This symbol, if defined, indicates that the endservent() routine is
- * available to close whatever was being used for service queries.
- */
-#define HAS_ENDSERVENT /**/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-#define HAS_FD_SET /**/
-
-/* FLEXFILENAMES:
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
-#define FLEXFILENAMES /**/
-
-/* HAS_FPOS64_T:
- * This symbol will be defined if the C compiler supports fpos64_t.
- */
-/*#define HAS_FPOS64_T / **/
-
-/* HAS_FREXPL:
- * This symbol, if defined, indicates that the frexpl routine is
- * available to break a long double floating-point number into
- * a normalized fraction and an integral power of 2.
- */
-#define HAS_FREXPL /**/
-
-/* HAS_STRUCT_FS_DATA:
- * This symbol, if defined, indicates that the struct fs_data
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_FS_DATA / **/
-
-/* HAS_FSEEKO:
- * This symbol, if defined, indicates that the fseeko routine is
- * available to fseek beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FSEEKO / **/
-
-/* HAS_FSTATFS:
- * This symbol, if defined, indicates that the fstatfs routine is
- * available to stat filesystems by file descriptors.
- */
-#define HAS_FSTATFS /**/
-
-/* HAS_FTELLO:
- * This symbol, if defined, indicates that the ftello routine is
- * available to ftell beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FTELLO / **/
-
-/* Gconvert:
- * This preprocessor macro is defined to convert a floating point
- * number to a string without a trailing decimal point. This
- * emulates the behavior of sprintf("%g"), but is sometimes much more
- * efficient. If gconvert() is not available, but gcvt() drops the
- * trailing decimal point, then gcvt() is used. If all else fails,
- * a macro using sprintf("%g") is used. Arguments for the Gconvert
- * macro are: value, number of digits, whether trailing zeros should
- * be retained, and the output buffer.
- * Possible values are:
- * d_Gconvert='gconvert((x),(n),(t),(b))'
- * d_Gconvert='gcvt((x),(n),(b))'
- * d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- * The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
-
-/* HAS_GETCWD:
- * This symbol, if defined, indicates that the getcwd routine is
- * available to get the current working directory.
- */
-#define HAS_GETCWD /**/
-
-/* HAS_GETESPWNAM:
- * This symbol, if defined, indicates that the getespwnam system call is
- * available to retrieve enchanced (shadow) password entries by name.
- */
-/*#define HAS_GETESPWNAM / **/
-
-/* HAS_GETFSSTAT:
- * This symbol, if defined, indicates that the getfsstat routine is
- * available to stat filesystems in bulk.
- */
-#define HAS_GETFSSTAT /**/
-
-/* HAS_GETGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for sequential access of the group database.
- */
-#define HAS_GETGRENT /**/
-
-/* HAS_GETHOSTBYADDR:
- * This symbol, if defined, indicates that the gethostbyaddr() routine is
- * available to look up hosts by their IP addresses.
- */
-#define HAS_GETHOSTBYADDR /**/
-
-/* HAS_GETHOSTBYNAME:
- * This symbol, if defined, indicates that the gethostbyname() routine is
- * available to look up host names in some data base or other.
- */
-#define HAS_GETHOSTBYNAME /**/
-
-/* HAS_GETHOSTENT:
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to look up host names in some data base or another.
- */
-#define HAS_GETHOSTENT /**/
-
-/* HAS_GETHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * gethostname() routine to derive the host name. See also HAS_UNAME
- * and PHOSTNAME.
- */
-/* HAS_UNAME:
- * This symbol, if defined, indicates that the C program may use the
- * uname() routine to derive the host name. See also HAS_GETHOSTNAME
- * and PHOSTNAME.
- */
-/* PHOSTNAME:
- * This symbol, if defined, indicates the command to feed to the
- * popen() routine to derive the host name. See also HAS_GETHOSTNAME
- * and HAS_UNAME. Note that the command uses a fully qualified path,
- * so that it is safe even if used by a process with super-user
- * privileges.
- */
-/* HAS_PHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * contents of PHOSTNAME as a command to feed to the popen() routine
- * to derive the host name.
- */
-#define HAS_GETHOSTNAME /**/
-#define HAS_UNAME /**/
-/*#define HAS_PHOSTNAME / **/
-#ifdef HAS_PHOSTNAME
-#define PHOSTNAME "" /* How to get the host name */
-#endif
-
-/* HAS_GETHOST_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for gethostent(), gethostbyname(), and
- * gethostbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETHOST_PROTOS /**/
-
-/* HAS_GETMNT:
- * This symbol, if defined, indicates that the getmnt routine is
- * available to get filesystem mount info by filename.
- */
-/*#define HAS_GETMNT / **/
-
-/* HAS_GETMNTENT:
- * This symbol, if defined, indicates that the getmntent routine is
- * available to iterate through mounted file systems to get their info.
- */
-/*#define HAS_GETMNTENT / **/
-
-/* HAS_GETNETBYADDR:
- * This symbol, if defined, indicates that the getnetbyaddr() routine is
- * available to look up networks by their IP addresses.
- */
-#define HAS_GETNETBYADDR /**/
-
-/* HAS_GETNETBYNAME:
- * This symbol, if defined, indicates that the getnetbyname() routine is
- * available to look up networks by their names.
- */
-#define HAS_GETNETBYNAME /**/
-
-/* HAS_GETNETENT:
- * This symbol, if defined, indicates that the getnetent() routine is
- * available to look up network names in some data base or another.
- */
-#define HAS_GETNETENT /**/
-
-/* HAS_GETNET_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getnetent(), getnetbyname(), and
- * getnetbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETNET_PROTOS /**/
-
-/* HAS_GETPAGESIZE:
- * This symbol, if defined, indicates that the getpagesize system call
- * is available to get system page size, which is the granularity of
- * many memory management calls.
- */
-#define HAS_GETPAGESIZE /**/
-
-/* HAS_GETPROTOENT:
- * This symbol, if defined, indicates that the getprotoent() routine is
- * available to look up protocols in some data base or another.
- */
-#define HAS_GETPROTOENT /**/
-
-/* HAS_GETPROTOBYNAME:
- * This symbol, if defined, indicates that the getprotobyname()
- * routine is available to look up protocols by their name.
- */
-/* HAS_GETPROTOBYNUMBER:
- * This symbol, if defined, indicates that the getprotobynumber()
- * routine is available to look up protocols by their number.
- */
-#define HAS_GETPROTOBYNAME /**/
-#define HAS_GETPROTOBYNUMBER /**/
-
-/* HAS_GETPROTO_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getprotoent(), getprotobyname(), and
- * getprotobyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETPROTO_PROTOS /**/
-
-/* HAS_GETPRPWNAM:
- * This symbol, if defined, indicates that the getprpwnam system call is
- * available to retrieve protected (shadow) password entries by name.
- */
-/*#define HAS_GETPRPWNAM / **/
-
-/* HAS_GETPWENT:
- * This symbol, if defined, indicates that the getpwent routine is
- * available for sequential access of the passwd database.
- * If this is not available, the older getpw() function may be available.
- */
-#define HAS_GETPWENT /**/
-
-/* HAS_GETSERVENT:
- * This symbol, if defined, indicates that the getservent() routine is
- * available to look up network services in some data base or another.
- */
-#define HAS_GETSERVENT /**/
-
-/* HAS_GETSERV_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getservent(), getservbyname(), and
- * getservbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETSERV_PROTOS /**/
-
-/* HAS_GETSPNAM:
- * This symbol, if defined, indicates that the getspnam system call is
- * available to retrieve SysV shadow password entries by name.
- */
-/*#define HAS_GETSPNAM / **/
-
-/* HAS_GETSERVBYNAME:
- * This symbol, if defined, indicates that the getservbyname()
- * routine is available to look up services by their name.
- */
-/* HAS_GETSERVBYPORT:
- * This symbol, if defined, indicates that the getservbyport()
- * routine is available to look up services by their port.
- */
-#define HAS_GETSERVBYNAME /**/
-#define HAS_GETSERVBYPORT /**/
-
-/* HAS_GNULIBC:
- * This symbol, if defined, indicates to the C program that
- * the GNU C library is being used.
- */
-/*#define HAS_GNULIBC / **/
-#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
-# define _GNU_SOURCE
-#endif
-/* HAS_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-/*#define HAS_HASMNTOPT / **/
-
-/* HAS_HTONL:
- * This symbol, if defined, indicates that the htonl() routine (and
- * friends htons() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_HTONS:
- * This symbol, if defined, indicates that the htons() routine (and
- * friends htonl() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHL:
- * This symbol, if defined, indicates that the ntohl() routine (and
- * friends htonl() htons() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHS:
- * This symbol, if defined, indicates that the ntohs() routine (and
- * friends htonl() htons() ntohl()) are available to do network
- * order byte swapping.
- */
-#define HAS_HTONL /**/
-#define HAS_HTONS /**/
-#define HAS_NTOHL /**/
-#define HAS_NTOHS /**/
-
-/* HAS_ICONV:
- * This symbol, if defined, indicates that the iconv routine is
- * available to do character set conversions.
- */
-#define HAS_ICONV /**/
-
-/* HAS_INT64_T:
- * This symbol will defined if the C compiler supports int64_t.
- * Usually the <inttypes.h> needs to be included, but sometimes
- * <sys/types.h> is enough.
- */
-/*#define HAS_INT64_T / **/
-
-/* HAS_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-#define HAS_ISASCII /**/
-
-/* HAS_ISNAN:
- * This symbol, if defined, indicates that the isnan routine is
- * available to check whether a double is a NaN.
- */
-#define HAS_ISNAN /**/
-
-/* HAS_ISNANL:
- * This symbol, if defined, indicates that the isnanl routine is
- * available to check whether a long double is a NaN.
- */
-#define HAS_ISNANL /**/
-
-/* HAS_LCHOWN:
- * This symbol, if defined, indicates that the lchown routine is
- * available to operate on a symbolic link (instead of following the
- * link).
- */
-#define HAS_LCHOWN /**/
-
-/* HAS_LDBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol LDBL_DIG, which is the number
- * of significant digits in a long double precision number. Unlike
- * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined.
- */
-#define HAS_LDBL_DIG /* */
-
-/* HAS_LONG_DOUBLE:
- * This symbol will be defined if the C compiler supports long
- * doubles.
- */
-/* LONG_DOUBLESIZE:
- * This symbol contains the size of a long double, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long doubles.
- */
-#define HAS_LONG_DOUBLE /**/
-#ifdef HAS_LONG_DOUBLE
-#define LONG_DOUBLESIZE 8 /**/
-#endif
-
-/* HAS_LONG_LONG:
- * This symbol will be defined if the C compiler supports long long.
- */
-/* LONGLONGSIZE:
- * This symbol contains the size of a long long, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long long.
- */
-#define HAS_LONG_LONG /**/
-#ifdef HAS_LONG_LONG
-#define LONGLONGSIZE 8 /**/
-#endif
-
-/* HAS_LSEEK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the lseek() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
- */
-#define HAS_LSEEK_PROTO /**/
-
-/* HAS_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-#define HAS_MADVISE /**/
-
-/* HAS_MEMCHR:
- * This symbol, if defined, indicates that the memchr routine is available
- * to locate characters within a C string.
- */
-#define HAS_MEMCHR /**/
-
-/* HAS_MKDTEMP:
- * This symbol, if defined, indicates that the mkdtemp routine is
- * available to exclusively create a uniquely named temporary directory.
- */
-/*#define HAS_MKDTEMP / **/
-
-/* HAS_MKSTEMP:
- * This symbol, if defined, indicates that the mkstemp routine is
- * available to exclusively create and open a uniquely named
- * temporary file.
- */
-#define HAS_MKSTEMP /**/
-
-/* HAS_MKSTEMPS:
- * This symbol, if defined, indicates that the mkstemps routine is
- * available to excluslvely create and open a uniquely named
- * (with a suffix) temporary file.
- */
-/*#define HAS_MKSTEMPS / **/
-
-/* HAS_MMAP:
- * This symbol, if defined, indicates that the mmap system call is
- * available to map a file into memory.
- */
-/* Mmap_t:
- * This symbol holds the return type of the mmap() system call
- * (and simultaneously the type of the first argument).
- * Usually set to 'void *' or 'cadd_t'.
- */
-#define HAS_MMAP /**/
-#define Mmap_t void * /**/
-
-/* HAS_MODFL:
- * This symbol, if defined, indicates that the modfl routine is
- * available to split a long double x into a fractional part f and
- * an integer part i such that |f| < 1.0 and (f + i) = x.
- */
-#define HAS_MODFL /**/
-
-/* HAS_MPROTECT:
- * This symbol, if defined, indicates that the mprotect system call is
- * available to modify the access protection of a memory mapped file.
- */
-#define HAS_MPROTECT /**/
-
-/* HAS_MSG:
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported (IPC mechanism based on message queues).
- */
-#define HAS_MSG /**/
-
-/* HAS_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-/*#define HAS_OFF64_T / **/
-
-/* HAS_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-#define HAS_OPEN3 /**/
-
-/* OLD_PTHREAD_CREATE_JOINABLE:
- * This symbol, if defined, indicates how to create pthread
- * in joinable (aka undetached) state. NOTE: not defined
- * if pthread.h already has defined PTHREAD_CREATE_JOINABLE
- * (the new version of the constant).
- * If defined, known values are PTHREAD_CREATE_UNDETACHED
- * and __UNDETACHED.
- */
-/*#define OLD_PTHREAD_CREATE_JOINABLE / **/
-
-/* HAS_PTHREAD_YIELD:
- * This symbol, if defined, indicates that the pthread_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/* SCHED_YIELD:
- * This symbol defines the way to yield the execution of
- * the current thread. Known ways are sched_yield,
- * pthread_yield, and pthread_yield with NULL.
- */
-/* HAS_SCHED_YIELD:
- * This symbol, if defined, indicates that the sched_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/*#define HAS_PTHREAD_YIELD / **/
-#define SCHED_YIELD sched_yield() /**/
-#define HAS_SCHED_YIELD /**/
-
-/* HAS_SAFE_BCOPY:
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping memory blocks. Otherwise you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-#define HAS_SAFE_BCOPY /**/
-
-/* HAS_SAFE_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping memory blocks. Otherwise you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-/*#define HAS_SAFE_MEMCPY / **/
-
-/* HAS_SANE_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * and can be used to compare relative magnitudes of chars with their high
- * bits set. If it is not defined, roll your own version.
- */
-#define HAS_SANE_MEMCMP /**/
-
-/* HAS_SEM:
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
-#define HAS_SEM /**/
-
-/* HAS_SETGRENT:
- * This symbol, if defined, indicates that the setgrent routine is
- * available for initializing sequential access of the group database.
- */
-#define HAS_SETGRENT /**/
-
-/* HAS_SETGROUPS:
- * This symbol, if defined, indicates that the setgroups() routine is
- * available to set the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-#define HAS_SETGROUPS /**/
-
-/* HAS_SETHOSTENT:
- * This symbol, if defined, indicates that the sethostent() routine is
- * available.
- */
-#define HAS_SETHOSTENT /**/
-
-/* HAS_SETNETENT:
- * This symbol, if defined, indicates that the setnetent() routine is
- * available.
- */
-#define HAS_SETNETENT /**/
-
-/* HAS_SETPROTOENT:
- * This symbol, if defined, indicates that the setprotoent() routine is
- * available.
- */
-#define HAS_SETPROTOENT /**/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-/*#define HAS_SETPROCTITLE / **/
-
-/* HAS_SETPWENT:
- * This symbol, if defined, indicates that the setpwent routine is
- * available for initializing sequential access of the passwd database.
- */
-#define HAS_SETPWENT /**/
-
-/* HAS_SETSERVENT:
- * This symbol, if defined, indicates that the setservent() routine is
- * available.
- */
-#define HAS_SETSERVENT /**/
-
-/* HAS_SETVBUF:
- * This symbol, if defined, indicates that the setvbuf routine is
- * available to change buffering on an open stdio stream.
- * to a line-buffered mode.
- */
-#define HAS_SETVBUF /**/
-
-/* USE_SFIO:
- * This symbol, if defined, indicates that sfio should
- * be used.
- */
-/*#define USE_SFIO / **/
-
-/* HAS_SHM:
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
-#define HAS_SHM /**/
-
-/* HAS_SIGACTION:
- * This symbol, if defined, indicates that Vr4's sigaction() routine
- * is available.
- */
-#define HAS_SIGACTION /**/
-
-/* HAS_SIGSETJMP:
- * This variable indicates to the C program that the sigsetjmp()
- * routine is available to save the calling process's registers
- * and stack environment for later use by siglongjmp(), and
- * to optionally save the process's signal mask. See
- * Sigjmp_buf, Sigsetjmp, and Siglongjmp.
- */
-/* Sigjmp_buf:
- * This is the buffer type to be used with Sigsetjmp and Siglongjmp.
- */
-/* Sigsetjmp:
- * This macro is used in the same way as sigsetjmp(), but will invoke
- * traditional setjmp() if sigsetjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/* Siglongjmp:
- * This macro is used in the same way as siglongjmp(), but will invoke
- * traditional longjmp() if siglongjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-#define HAS_SIGSETJMP /**/
-#ifdef HAS_SIGSETJMP
-#define Sigjmp_buf sigjmp_buf
-#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
-#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
-#else
-#define Sigjmp_buf jmp_buf
-#define Sigsetjmp(buf,save_mask) setjmp((buf))
-#define Siglongjmp(buf,retval) longjmp((buf),(retval))
-#endif
-
-/* 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.
- */
-/* HAS_MSG_CTRUNC:
- * This symbol, if defined, indicates that the MSG_CTRUNC is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_DONTROUTE:
- * This symbol, if defined, indicates that the MSG_DONTROUTE is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_OOB:
- * This symbol, if defined, indicates that the MSG_OOB is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PEEK:
- * This symbol, if defined, indicates that the MSG_PEEK is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PROXY:
- * This symbol, if defined, indicates that the MSG_PROXY is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_SCM_RIGHTS:
- * This symbol, if defined, indicates that the SCM_RIGHTS is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-#define HAS_SOCKET /**/
-#define HAS_SOCKETPAIR /**/
-#define HAS_MSG_CTRUNC /**/
-#define HAS_MSG_DONTROUTE /**/
-#define HAS_MSG_OOB /**/
-#define HAS_MSG_PEEK /**/
-/*#define HAS_MSG_PROXY / **/
-#define HAS_SCM_RIGHTS /**/
-
-/* HAS_SOCKS5_INIT:
- * This symbol, if defined, indicates that the socks5_init routine is
- * available to initialize SOCKS 5.
- */
-/*#define HAS_SOCKS5_INIT / **/
-
-/* HAS_SQRTL:
- * This symbol, if defined, indicates that the sqrtl routine is
- * available to do long double square roots.
- */
-#define HAS_SQRTL /**/
-
-/* USE_STAT_BLOCKS:
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
-#ifndef USE_STAT_BLOCKS
-#define USE_STAT_BLOCKS /**/
-#endif
-
-/* HAS_STRUCT_STATFS_F_FLAGS:
- * This symbol, if defined, indicates that the struct statfs
- * does have the f_flags member containing the mount flags of
- * the filesystem containing the file.
- * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3),
- * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not
- * have statfs() and struct statfs, they have ustat() and getmnt()
- * with struct ustat and struct fs_data.
- */
-#define HAS_STRUCT_STATFS_F_FLAGS /**/
-
-/* HAS_STRUCT_STATFS:
- * This symbol, if defined, indicates that the struct statfs
- * to do statfs() is supported.
- */
-#define HAS_STRUCT_STATFS /**/
-
-/* HAS_FSTATVFS:
- * This symbol, if defined, indicates that the fstatvfs routine is
- * available to stat filesystems by file descriptors.
- */
-#define HAS_FSTATVFS /**/
-
-/* USE_STDIO_PTR:
- * This symbol is defined if the _ptr and _cnt fields (or similar)
- * of the stdio FILE structure can be used to access the stdio buffer
- * for a file handle. If this is defined, then the FILE_ptr(fp)
- * and FILE_cnt(fp) macros will also be defined and should be used
- * to access these fields.
- */
-/* FILE_ptr:
- * This macro is used to access the _ptr field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_PTR_LVALUE:
- * This symbol is defined if the FILE_ptr macro can be used as an
- * lvalue.
- */
-/* FILE_cnt:
- * This macro is used to access the _cnt field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_CNT_LVALUE:
- * This symbol is defined if the FILE_cnt macro can be used as an
- * lvalue.
- */
-/* STDIO_PTR_LVAL_SETS_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n has the side effect of decreasing the
- * value of File_cnt(fp) by n.
- */
-/* STDIO_PTR_LVAL_NOCHANGE_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n leaves File_cnt(fp) unchanged.
- */
-#define USE_STDIO_PTR /**/
-#ifdef USE_STDIO_PTR
-#define FILE_ptr(fp) ((fp)->_ptr)
-#define STDIO_PTR_LVALUE /**/
-#define FILE_cnt(fp) ((fp)->_cnt)
-#define STDIO_CNT_LVALUE /**/
-/*#define STDIO_PTR_LVAL_SETS_CNT / **/
-#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/
-#endif
-
-/* USE_STDIO_BASE:
- * This symbol is defined if the _base field (or similar) of the
- * stdio FILE structure can be used to access the stdio buffer for
- * a file handle. If this is defined, then the FILE_base(fp) macro
- * will also be defined and should be used to access this field.
- * Also, the FILE_bufsiz(fp) macro will be defined and should be used
- * to determine the number of bytes in the buffer. USE_STDIO_BASE
- * will never be defined unless USE_STDIO_PTR is.
- */
-/* FILE_base:
- * This macro is used to access the _base field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_BASE is defined.
- */
-/* FILE_bufsiz:
- * This macro is used to determine the number of bytes in the I/O
- * buffer pointed to by _base field (or equivalent) of the FILE
- * structure pointed to its argument. This macro will always be defined
- * if USE_STDIO_BASE is defined.
- */
-#define USE_STDIO_BASE /**/
-#ifdef USE_STDIO_BASE
-#define FILE_base(fp) ((fp)->_base)
-#define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base)
-#endif
-
-/* HAS_STRERROR:
- * This symbol, if defined, indicates that the strerror routine is
- * available to translate error numbers to strings. See the writeup
- * of Strerror() in this file before you try to define your own.
- */
-/* HAS_SYS_ERRLIST:
- * This symbol, if defined, indicates that the sys_errlist array is
- * available to translate error numbers to strings. The extern int
- * sys_nerr gives the size of that table.
- */
-/* Strerror:
- * This preprocessor symbol is defined as a macro if strerror() is
- * not available to translate error numbers to strings but sys_errlist[]
- * array is there.
- */
-#define HAS_STRERROR /**/
-#define HAS_SYS_ERRLIST /**/
-#define Strerror(e) strerror(e)
-
-/* HAS_STRTOLD:
- * This symbol, if defined, indicates that the strtold routine is
- * available to convert strings to long doubles.
- */
-/*#define HAS_STRTOLD / **/
-
-/* HAS_STRTOLL:
- * This symbol, if defined, indicates that the strtoll routine is
- * available to convert strings to long longs.
- */
-/*#define HAS_STRTOLL / **/
-
-/* HAS_STRTOULL:
- * This symbol, if defined, indicates that the strtoull routine is
- * available to convert strings to unsigned long longs.
- */
-/*#define HAS_STRTOULL / **/
-
-/* HAS_STRTOUQ:
- * This symbol, if defined, indicates that the strtouq routine is
- * available to convert strings to unsigned long longs (quads).
- */
-/*#define HAS_STRTOUQ / **/
-
-/* HAS_TELLDIR_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the telldir() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern long telldir _((DIR*));
- */
-#define HAS_TELLDIR_PROTO /**/
-
-/* Time_t:
- * This symbol holds the type returned by time(). It can be long,
- * or time_t on BSD sites (in which case <sys/types.h> should be
- * included).
- */
-#define Time_t time_t /* Time type */
-
-/* HAS_TIMES:
- * This symbol, if defined, indicates that the times() routine exists.
- * Note that this became obsolete on some systems (SUNOS), which now
- * use getrusage(). It may be necessary to include <sys/times.h>.
- */
-#define HAS_TIMES /**/
-
-/* HAS_UNION_SEMUN:
- * This symbol, if defined, indicates that the union semun is
- * defined by including <sys/sem.h>. If not, the user code
- * probably needs to define it as:
- * union semun {
- * int val;
- * struct semid_ds *buf;
- * unsigned short *array;
- * }
- */
-/* USE_SEMCTL_SEMUN:
- * This symbol, if defined, indicates that union semun is
- * used for semctl IPC_STAT.
- */
-/* USE_SEMCTL_SEMID_DS:
- * This symbol, if defined, indicates that struct semid_ds * is
- * used for semctl IPC_STAT.
- */
-/*#define HAS_UNION_SEMUN / **/
-#define USE_SEMCTL_SEMUN /**/
-#define USE_SEMCTL_SEMID_DS /**/
-
-/* HAS_USTAT:
- * This symbol, if defined, indicates that the ustat system call is
- * available to query file system statistics by dev_t.
- */
-#define HAS_USTAT /**/
-
-/* HAS_VFORK:
- * This symbol, if defined, indicates that vfork() exists.
- */
-/*#define HAS_VFORK / **/
-
-/* Signal_t:
- * This symbol's value is either "void" or "int", corresponding to the
- * appropriate return type of a signal handler. Thus, you can declare
- * a signal handler using "Signal_t (*handler)()", and define the
- * handler using "Signal_t handler(sig)".
- */
-#define Signal_t void /* Signal handler's return type */
-
-/* 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().
- */
-/* USE_CHAR_VSPRINTF:
- * 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 USE_CHAR_VSPRINTF / **/
-
-/* USE_DYNAMIC_LOADING:
- * This symbol, if defined, indicates that dynamic loading of
- * some sort is available.
- */
-#define USE_DYNAMIC_LOADING /**/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE 8 /**/
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-/*#define EBCDIC / **/
-
-/* FFLUSH_NULL:
- * This symbol, if defined, tells that fflush(NULL) does flush
- * all pending stdio output.
- */
-/* FFLUSH_ALL:
- * This symbol, if defined, tells that to flush
- * all pending stdio output one must loop through all
- * the stdio file handles stored in an array and fflush them.
- * Note that if fflushNULL is defined, fflushall will not
- * even be probed for and will be left undefined.
- */
-#define FFLUSH_NULL /**/
-/*#define FFLUSH_ALL / **/
-
-/* Fpos_t:
- * This symbol holds the type used to declare file positions in libc.
- * It can be fpos_t, long, uint, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Fpos_t fpos_t /* File position type */
-
-/* Gid_t_f:
- * This symbol defines the format string used for printing a Gid_t.
- */
-#define Gid_t_f "u" /**/
-
-/* Gid_t_sign:
- * This symbol holds the signedess of a Gid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Gid_t_sign 1 /* GID sign */
-
-/* Gid_t_size:
- * This symbol holds the size of a Gid_t in bytes.
- */
-#define Gid_t_size 4 /* GID size */
-
-/* Gid_t:
- * This symbol holds the return type of getgid() and the type of
- * argument to setrgid() and related functions. Typically,
- * it is the type of group ids in the kernel. It can be int, ushort,
- * gid_t, etc... It may be necessary to include <sys/types.h> to get
- * any typedef'ed information.
- */
-#define Gid_t gid_t /* Type for getgid(), etc... */
-
-/* Groups_t:
- * This symbol holds the type used for the second argument to
- * getgroups() and setgroups(). Usually, this is the same as
- * gidtype (gid_t) , but sometimes it isn't.
- * It can be int, ushort, gid_t, etc...
- * It may be necessary to include <sys/types.h> to get any
- * typedef'ed information. This is only required if you have
- * getgroups() or setgroups()..
- */
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */
-#endif
-
-/* DB_Prefix_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is u_int32_t.
- */
-/* DB_Hash_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is size_t.
- */
-#define DB_Hash_t u_int32_t /**/
-#define DB_Prefix_t size_t /**/
-
-/* I_GRP:
- * This symbol, if defined, indicates to the C program that it should
- * include <grp.h>.
- */
-/* GRPASSWD:
- * This symbol, if defined, indicates to the C program that struct group
- * in <grp.h> contains gr_passwd.
- */
-#define I_GRP /**/
-#define GRPASSWD /**/
-
-/* I_ICONV:
- * This symbol, if defined, indicates that <iconv.h> exists and
- * should be included.
- */
-#define I_ICONV /**/
-
-/* I_IEEEFP:
- * This symbol, if defined, indicates that <ieeefp.h> exists and
- * should be included.
- */
-/*#define I_IEEEFP / **/
-
-/* I_INTTYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <inttypes.h>.
- */
-/*#define I_INTTYPES / **/
-
-/* I_LIBUTIL:
- * This symbol, if defined, indicates that <libutil.h> exists and
- * should be included.
- */
-/*#define I_LIBUTIL / **/
-
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-/*#define I_MACH_CTHREADS / **/
-
-/* I_MNTENT:
- * This symbol, if defined, indicates that <mntent.h> exists and
- * should be included.
- */
-/*#define I_MNTENT / **/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-#define I_NETDB /**/
-
-/* I_NETINET_TCP:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/tcp.h>.
- */
-#define I_NETINET_TCP /**/
-
-/* I_POLL:
- * This symbol, if defined, indicates that <poll.h> exists and
- * should be included.
- */
-#define I_POLL /**/
-
-/* I_PROT:
- * This symbol, if defined, indicates that <prot.h> exists and
- * should be included.
- */
-#define I_PROT /**/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-#define I_PTHREAD /**/
-
-/* 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.
- */
-/* PWGECOS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_gecos.
- */
-/* PWPASSWD:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_passwd.
- */
-#define I_PWD /**/
-#define PWQUOTA /**/
-/*#define PWAGE / **/
-/*#define PWCHANGE / **/
-/*#define PWCLASS / **/
-/*#define PWEXPIRE / **/
-#define PWCOMMENT /**/
-#define PWGECOS /**/
-#define PWPASSWD /**/
-
-/* I_SHADOW:
- * This symbol, if defined, indicates that <shadow.h> exists and
- * should be included.
- */
-/*#define I_SHADOW / **/
-
-/* I_SOCKS:
- * This symbol, if defined, indicates that <socks.h> exists and
- * should be included.
- */
-/*#define I_SOCKS / **/
-
-/* I_SUNMATH:
- * This symbol, if defined, indicates that <sunmath.h> exists and
- * should be included.
- */
-/*#define I_SUNMATH / **/
-
-/* I_SYSLOG:
- * This symbol, if defined, indicates that <syslog.h> exists and
- * should be included.
- */
-#define I_SYSLOG /**/
-
-/* I_SYSMODE:
- * This symbol, if defined, indicates that <sys/mode.h> exists and
- * should be included.
- */
-#define I_SYSMODE /**/
-
-/* I_SYS_MOUNT:
- * This symbol, if defined, indicates that <sys/mount.h> exists and
- * should be included.
- */
-#define I_SYS_MOUNT /**/
-
-/* I_SYS_STATFS:
- * This symbol, if defined, indicates that <sys/statfs.h> exists.
- */
-/*#define I_SYS_STATFS / **/
-
-/* I_SYS_STATVFS:
- * This symbol, if defined, indicates that <sys/statvfs.h> exists and
- * should be included.
- */
-#define I_SYS_STATVFS /**/
-
-/* I_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-#define I_SYSUIO /**/
-
-/* I_SYSUTSNAME:
- * This symbol, if defined, indicates that <sys/utsname.h> exists and
- * should be included.
- */
-#define I_SYSUTSNAME /**/
-
-/* I_SYS_VFS:
- * This symbol, if defined, indicates that <sys/vfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_VFS / **/
-
-/* I_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <time.h>.
- */
-/* I_SYS_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h>.
- */
-/* I_SYS_TIME_KERNEL:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h> with KERNEL defined.
- */
-/*#define I_TIME / **/
-#define I_SYS_TIME /**/
-/*#define I_SYS_TIME_KERNEL / **/
-
-/* I_USTAT:
- * This symbol, if defined, indicates that <ustat.h> exists and
- * should be included.
- */
-#define I_USTAT /**/
-
-/* PERL_INC_VERSION_LIST:
- * This variable specifies the list of subdirectories in over
- * which perl.c:incpush() and lib/lib.pm will automatically
- * search when adding directories to @INC, in a format suitable
- * for a C initialization string. See the inc_version_list entry
- * in Porting/Glossary for more details.
- */
-#define PERL_INC_VERSION_LIST 0 /**/
-
-/* INSTALL_USR_BIN_PERL:
- * This symbol, if defined, indicates that Perl is to be installed
- * also as /usr/bin/perl.
- */
-#define INSTALL_USR_BIN_PERL /**/
-
-/* PERL_PRIfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for output.
- */
-/* PERL_PRIgldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'g') for output.
- */
-/* PERL_PRIeldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'e') for output.
- */
-/* PERL_SCNfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for input.
- */
-#define PERL_PRIfldbl "f" /**/
-#define PERL_PRIgldbl "g" /**/
-#define PERL_PRIeldbl "e" /**/
-#define PERL_SCNfldbl "f" /**/
-
-/* Off_t:
- * This symbol holds the type used to declare offsets in the kernel.
- * It can be int, long, off_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-/* LSEEKSIZE:
- * This symbol holds the number of bytes used by the Off_t.
- */
-/* Off_t_size:
- * This symbol holds the number of bytes used by the Off_t.
- */
-#define Off_t off_t /* <offset> type */
-#define LSEEKSIZE 8 /* <offset> size */
-#define Off_t_size 8 /* <offset> size */
-
-/* Free_t:
- * This variable contains the return type of free(). It is usually
- * void, but occasionally int.
- */
-/* Malloc_t:
- * This symbol is the type of pointer returned by malloc and realloc.
- */
-#define Malloc_t void * /**/
-#define Free_t void /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-/*#define MYMALLOC / **/
-
-/* Mode_t:
- * This symbol holds the type used to declare file modes
- * for systems calls. It is usually mode_t, but may be
- * int or unsigned short. It may be necessary to include <sys/types.h>
- * to get any typedef'ed information.
- */
-#define Mode_t mode_t /* file mode parameter for system calls */
-
-/* VAL_O_NONBLOCK:
- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on
- * non-blocking I/O for the file descriptor. Note that there is no way
- * back, i.e. you cannot turn it blocking again this way. If you wish to
- * alternatively switch between blocking and non-blocking, use the
- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
- */
-/* VAL_EAGAIN:
- * This symbol holds the errno error code set by read() when no data was
- * present on the non-blocking file descriptor.
- */
-/* RD_NODATA:
- * This symbol holds the return code from read() when no data is present
- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
- * not defined, then you can't distinguish between no data and EOF by
- * issuing a read(). You'll have to find another way to tell for sure!
- */
-/* EOF_NONBLOCK:
- * This symbol, if defined, indicates to the C program that a read() on
- * a non-blocking file descriptor will return 0 on EOF, and not the value
- * held in RD_NODATA (-1 usually, in that case!).
- */
-#define VAL_O_NONBLOCK O_NONBLOCK
-#define VAL_EAGAIN EAGAIN
-#define RD_NODATA -1
-#define EOF_NONBLOCK
-
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
- */
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
- */
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
- */
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
- */
-#define Netdb_host_t const char * /**/
-#define Netdb_hlen_t int /**/
-#define Netdb_name_t const char * /**/
-#define Netdb_net_t int /**/
-
-/* PERL_OTHERLIBDIRS:
- * This variable contains a colon-separated set of paths for the perl
- * binary to search for additional library files or modules.
- * These directories will be tacked to the end of @INC.
- * Perl will automatically search below each path for version-
- * and architecture-specific directories. See PERL_INC_VERSION_LIST
- * for more details.
- */
-/*#define PERL_OTHERLIBDIRS " " / **/
-
-/* IVTYPE:
- * This symbol defines the C type used for Perl's IV.
- */
-/* UVTYPE:
- * This symbol defines the C type used for Perl's UV.
- */
-/* I8TYPE:
- * This symbol defines the C type used for Perl's I8.
- */
-/* U8TYPE:
- * This symbol defines the C type used for Perl's U8.
- */
-/* I16TYPE:
- * This symbol defines the C type used for Perl's I16.
- */
-/* U16TYPE:
- * This symbol defines the C type used for Perl's U16.
- */
-/* I32TYPE:
- * This symbol defines the C type used for Perl's I32.
- */
-/* U32TYPE:
- * This symbol defines the C type used for Perl's U32.
- */
-/* I64TYPE:
- * This symbol defines the C type used for Perl's I64.
- */
-/* U64TYPE:
- * This symbol defines the C type used for Perl's U64.
- */
-/* NVTYPE:
- * This symbol defines the C type used for Perl's NV.
- */
-/* IVSIZE:
- * This symbol contains the sizeof(IV).
- */
-/* UVSIZE:
- * This symbol contains the sizeof(UV).
- */
-/* I8SIZE:
- * This symbol contains the sizeof(I8).
- */
-/* U8SIZE:
- * This symbol contains the sizeof(U8).
- */
-/* I16SIZE:
- * This symbol contains the sizeof(I16).
- */
-/* U16SIZE:
- * This symbol contains the sizeof(U16).
- */
-/* I32SIZE:
- * This symbol contains the sizeof(I32).
- */
-/* U32SIZE:
- * This symbol contains the sizeof(U32).
- */
-/* I64SIZE:
- * This symbol contains the sizeof(I64).
- */
-/* U64SIZE:
- * This symbol contains the sizeof(U64).
- */
-/* NVSIZE:
- * This symbol contains the sizeof(NV).
- */
-/* NV_PRESERVES_UV:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * can preserve all the bits of a variable of type UVTYPE.
- */
-/* NV_PRESERVES_UV_BITS:
- * This symbol contains the number of bits a variable of type NVTYPE
- * can preserve of a variable of type UVTYPE.
- */
-#define IVTYPE long /**/
-#define UVTYPE unsigned long /**/
-#define I8TYPE char /**/
-#define U8TYPE unsigned char /**/
-#define I16TYPE short /**/
-#define U16TYPE unsigned short /**/
-#define I32TYPE int /**/
-#define U32TYPE unsigned int /**/
-#ifdef HAS_QUAD
-#define I64TYPE long /**/
-#define U64TYPE unsigned long /**/
-#endif
-#define NVTYPE double /**/
-#define IVSIZE 8 /**/
-#define UVSIZE 8 /**/
-#define I8SIZE 1 /**/
-#define U8SIZE 1 /**/
-#define I16SIZE 2 /**/
-#define U16SIZE 2 /**/
-#define I32SIZE 4 /**/
-#define U32SIZE 4 /**/
-#ifdef HAS_QUAD
-#define I64SIZE 8 /**/
-#define U64SIZE 8 /**/
-#endif
-#define NVSIZE 8 /**/
-#undef NV_PRESERVES_UV
-#define NV_PRESERVES_UV_BITS 53
-
-/* IVdf:
- * This symbol defines the format string used for printing a Perl IV
- * as a signed decimal integer.
- */
-/* UVuf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned decimal integer.
- */
-/* UVof:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned octal integer.
- */
-/* UVxf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in lowercase abcdef.
- */
-/* NVef:
- * This symbol defines the format string used for printing a Perl NV
- * using %e-ish floating point format.
- */
-/* NVff:
- * This symbol defines the format string used for printing a Perl NV
- * using %f-ish floating point format.
- */
-/* NVgf:
- * This symbol defines the format string used for printing a Perl NV
- * using %g-ish floating point format.
- */
-#define IVdf "ld" /**/
-#define UVuf "lu" /**/
-#define UVof "lo" /**/
-#define UVxf "lx" /**/
-#define NVef "e" /**/
-#define NVff "f" /**/
-#define NVgf "g" /**/
-
-/* Pid_t:
- * This symbol holds the type used to declare process ids in the kernel.
- * It can be int, uint, pid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Pid_t pid_t /* PID type */
-
-/* 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.
- */
-/* PRIVLIB_EXP:
- * This symbol contains the ~name expanded version of PRIVLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB "/opt/perl/lib/5.6.1" /**/
-#define PRIVLIB_EXP "/opt/perl/lib/5.6.1" /**/
-
-/* PTRSIZE:
- * This symbol contains the size of a pointer, so that the C preprocessor
- * can make decisions based on it. It will be sizeof(void *) if
- * the compiler supports (void *); otherwise it will be
- * sizeof(char *).
- */
-#define PTRSIZE 8 /**/
-
-/* Drand01:
- * This macro is to be used to generate uniformly distributed
- * random numbers over the range [0., 1.[. You may have to supply
- * an 'extern double drand48();' in your program since SunOS 4.1.3
- * doesn't provide you with anything relevant in it's headers.
- * See HAS_DRAND48_PROTO.
- */
-/* Rand_seed_t:
- * This symbol defines the type of the argument of the
- * random seed function.
- */
-/* seedDrand01:
- * This symbol defines the macro to be used in seeding the
- * random number generator (see Drand01).
- */
-/* RANDBITS:
- * This symbol indicates how many bits are produced by the
- * function used to generate normalized random numbers.
- * Values include 15, 16, 31, and 48.
- */
-#define Drand01() drand48() /**/
-#define Rand_seed_t long /**/
-#define seedDrand01(x) srand48((Rand_seed_t)x) /**/
-#define RANDBITS 48 /**/
-
-/* SELECT_MIN_BITS:
- * This symbol holds the minimum number of bits operated by select.
- * That is, if you do select(n, ...), how many bits at least will be
- * cleared in the masks if some activity is detected. Usually this
- * is either n or 32*ceil(n/32), especially many little-endians do
- * the latter. This is only useful if you have select(), naturally.
- */
-#define SELECT_MIN_BITS 32 /**/
-
-/* Select_fd_set_t:
- * This symbol holds the type used for the 2nd, 3rd, and 4th
- * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
- * is defined, and 'int *' otherwise. This is only useful if you
- * have select(), of course.
- */
-#define Select_fd_set_t fd_set * /**/
-
-/* SIG_NAME:
- * This symbol contains a list of signal names in order of
- * signal number. This is intended
- * to be used as a static array initialization, like this:
- * char *sig_name[] = { SIG_NAME };
- * The signals in the list are separated with commas, and each signal
- * is surrounded by double quotes. There is no leading SIG in the signal
- * name, i.e. SIGQUIT is known as "QUIT".
- * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
- * etc., where nn is the actual signal number (e.g. NUM37).
- * The signal number for sig_name[i] is stored in sig_num[i].
- * The last element is 0 to terminate the list with a NULL. This
- * corresponds to the 0 at the end of the sig_num list.
- */
-/* SIG_NUM:
- * This symbol contains a list of signal numbers, in the same order as the
- * SIG_NAME list. It is suitable for static array initialization, as in:
- * int sig_num[] = { SIG_NUM };
- * The signals in the list are separated with commas, and the indices
- * within that list and the SIG_NAME list match, so it's easy to compute
- * the signal name from a number or vice versa at the price of a small
- * dynamic linear lookup.
- * Duplicates are allowed, but are moved to the end of the list.
- * The signal number corresponding to sig_name[i] is sig_number[i].
- * if (i < NSIG) then sig_number[i] == i.
- * The last element is 0, corresponding to the 0 at the end of
- * the sig_name list.
- */
-#define SIG_NAME "ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "IOINT", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "AIO", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "INFO", "USR1", "USR2", "RESV", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "MAX", "IOT", "LOST", "URG", "CLD", "IO", "POLL", "PTY", "PWR", "RTMAX", 0 /**/
-#define SIG_NUM 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, 6, 6, 16, 20, 23, 23, 23, 29, 48, 0 /**/
-
-/* SITEARCH:
- * 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.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-dependent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITEARCH_EXP:
- * This symbol contains the ~name expanded version of SITEARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define SITEARCH "/opt/perl/lib/site_perl/5.6.1/alpha-dec_osf-thread" /**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.6.1/alpha-dec_osf-thread" /**/
-
-/* SITELIB:
- * 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.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-independent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITELIB_EXP:
- * This symbol contains the ~name expanded version of SITELIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* SITELIB_STEM:
- * This define is SITELIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-#define SITELIB "/opt/perl/lib/site_perl/5.6.1" /**/
-#define SITELIB_EXP "/opt/perl/lib/site_perl/5.6.1" /**/
-#define SITELIB_STEM "/opt/perl/lib/site_perl" /**/
-
-/* Size_t_size:
- * This symbol holds the size of a Size_t in bytes.
- */
-#define Size_t_size 8 /* */
-
-/* Size_t:
- * This symbol holds the type used to declare length parameters
- * for string functions. It is usually size_t, but may be
- * unsigned long, int, etc. It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Size_t size_t /* length paramater for string functions */
-
-/* Sock_size_t:
- * This symbol holds the type used for the size argument of
- * various socket calls (just the base type, not the pointer-to).
- */
-#define Sock_size_t int /**/
-
-/* SSize_t:
- * This symbol holds the type used by functions that return
- * a count of bytes or an error condition. It must be a signed type.
- * It is usually ssize_t, but may be long or int, etc.
- * It may be necessary to include <sys/types.h> or <unistd.h>
- * to get any typedef'ed information.
- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#define SSize_t ssize_t /* signed count of bytes */
-
-/* STARTPERL:
- * This variable contains the string to put in front of a perl
- * script to make sure (one hopes) that it runs with perl and not
- * some shell.
- */
-#define STARTPERL "#!/opt/perl/bin/perl" /**/
-
-/* HAS_STDIO_STREAM_ARRAY:
- * This symbol, if defined, tells that there is an array
- * holding the stdio streams.
- */
-/* STDIO_STREAM_ARRAY:
- * This symbol tells the name of the array holding the stdio streams.
- * Usual values include _iob, __iob, and __sF.
- */
-#define HAS_STDIO_STREAM_ARRAY /**/
-#define STDIO_STREAM_ARRAY _iob
-
-/* Uid_t_f:
- * This symbol defines the format string used for printing a Uid_t.
- */
-#define Uid_t_f "u" /**/
-
-/* Uid_t_sign:
- * This symbol holds the signedess of a Uid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Uid_t_sign 1 /* UID sign */
-
-/* Uid_t_size:
- * This symbol holds the size of a Uid_t in bytes.
- */
-#define Uid_t_size 4 /* UID size */
-
-/* Uid_t:
- * This symbol holds the type used to declare user ids in the kernel.
- * It can be int, ushort, uid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Uid_t uid_t /* UID type */
-
-/* USE_64_BIT_INT:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be employed (be they 32 or 64 bits). The minimal possible
- * 64-bitness is used, just enough to get 64-bit integers into Perl.
- * This may mean using for example "long longs", while your memory
- * may still be limited to 2 gigabytes.
- */
-/* USE_64_BIT_ALL:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be used (be they 32 or 64 bits). The maximal possible
- * 64-bitness is employed: LP64 or ILP64, meaning that you will
- * be able to use more than 2 gigabytes of memory. This mode is
- * even more binary incompatible than USE_64_BIT_INT. You may not
- * be able to run the resulting executable in a 32-bit CPU at all or
- * you may need at least to reboot your OS to 64-bit mode.
- */
-#ifndef USE_64_BIT_INT
-#define USE_64_BIT_INT /**/
-#endif
-
-#ifndef USE_64_BIT_ALL
-#define USE_64_BIT_ALL /**/
-#endif
-
-/* USE_LARGE_FILES:
- * This symbol, if defined, indicates that large file support
- * should be used when available.
- */
-#ifndef USE_LARGE_FILES
-#define USE_LARGE_FILES /**/
-#endif
-
-/* USE_LONG_DOUBLE:
- * This symbol, if defined, indicates that long doubles should
- * be used when available.
- */
-#ifndef USE_LONG_DOUBLE
-/*#define USE_LONG_DOUBLE / **/
-#endif
-
-/* USE_MORE_BITS:
- * This symbol, if defined, indicates that 64-bit interfaces and
- * long doubles should be used when available.
- */
-#ifndef USE_MORE_BITS
-/*#define USE_MORE_BITS / **/
-#endif
-
-/* MULTIPLICITY:
- * This symbol, if defined, indicates that Perl should
- * be built to use multiplicity.
- */
-#ifndef MULTIPLICITY
-/*#define MULTIPLICITY / **/
-#endif
-
-/* USE_PERLIO:
- * This symbol, if defined, indicates that the PerlIO abstraction should
- * be used throughout. If not defined, stdio should be
- * used in a fully backward compatible manner.
- */
-#ifndef USE_PERLIO
-/*#define USE_PERLIO / **/
-#endif
-
-/* USE_SOCKS:
- * This symbol, if defined, indicates that Perl should
- * be built to use socks.
- */
-#ifndef USE_SOCKS
-/*#define USE_SOCKS / **/
-#endif
-
-/* USE_ITHREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the interpreter-based threading implementation.
- */
-/* USE_5005THREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the 5.005-based threading implementation.
- */
-/* OLD_PTHREADS_API:
- * This symbol, if defined, indicates that Perl should
- * be built to use the old draft POSIX threads API.
- */
-#define USE_5005THREADS /**/
-/*#define USE_ITHREADS / **/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define USE_THREADS /* until src is revised*/
-#endif
-/*#define OLD_PTHREADS_API / **/
-
-/* PERL_VENDORARCH:
- * If defined, this symbol contains the name of a private library.
- * 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.
- * It may have a ~ on the front.
- * The standard distribution will put nothing in this directory.
- * Vendors who distribute perl may wish to place their own
- * architecture-dependent modules and extensions in this directory with
- * MakeMaker Makefile.PL INSTALLDIRS=vendor
- * or equivalent. See INSTALL for details.
- */
-/* PERL_VENDORARCH_EXP:
- * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/*#define PERL_VENDORARCH "" / **/
-/*#define PERL_VENDORARCH_EXP "" / **/
-
-/* PERL_VENDORLIB_EXP:
- * This symbol contains the ~name expanded version of VENDORLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* PERL_VENDORLIB_STEM:
- * This define is PERL_VENDORLIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-/*#define PERL_VENDORLIB_EXP "" / **/
-/*#define PERL_VENDORLIB_STEM "" / **/
-
-/* VOIDFLAGS:
- * 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
- * 8 = suports declaration of generic void pointers
- *
- * The package designer should define VOIDUSED to indicate the requirements
- * of the package. This can be done either by #defining VOIDUSED before
- * including config.h, or by defining defvoidused in Myinit.U. If the
- * latter approach is taken, only those flags will be tested. If the
- * level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 15
-#endif
-#define VOIDFLAGS 15
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int /* is void to be avoided? */
-#define M_VOID /* Xenix strikes again */
-#endif
-
-/* PERL_XS_APIVERSION:
- * This variable contains the version of the oldest perl binary
- * compatible with the present perl. perl.c:incpush() and
- * lib/lib.pm will automatically search in /opt/perl/lib/site_perl/5.6.1/alpha-dec_osf-thread for older
- * directories across major versions back to xs_apiversion.
- * This is only useful if you have a perl library directory tree
- * structured like the default one.
- * See INSTALL for how this works.
- * The versioned site_perl directory was introduced in 5.005,
- * so that is the lowest possible value.
- * Since this can depend on compile time options (such as
- * bincompat) it is set by Configure. Other non-default sources
- * of potential incompatibility, such as multiplicity, threads,
- * debugging, 64bits, sfio, etc., are not checked for currently,
- * though in principle we could go snooping around in old
- * Config.pm files.
- */
-/* PERL_PM_APIVERSION:
- * This variable contains the version of the oldest perl
- * compatible with the present perl. (That is, pure perl modules
- * written for pm_apiversion will still work for the current
- * version). perl.c:incpush() and lib/lib.pm will automatically
- * search in /opt/perl/lib/site_perl/5.6.1 for older directories across major versions
- * back to pm_apiversion. This is only useful if you have a perl
- * library directory tree structured like the default one. The
- * versioned site_perl library was introduced in 5.005, so that's
- * the default setting for this variable. It's hard to imagine
- * it changing before Perl6. It is included here for symmetry
- * with xs_apiveprsion -- the searching algorithms will
- * (presumably) be similar.
- * See the INSTALL file for how this works.
- */
-#define PERL_XS_APIVERSION "5.6.1"
-#define PERL_PM_APIVERSION "5.005"
-
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-#define HAS_GETPGRP /**/
-/*#define USE_BSD_GETPGRP / **/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-#define HAS_SETPGRP /**/
-#define USE_BSD_SETPGRP /**/
-
-/* 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 /**/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK / **/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-#define FCNTL_CAN_LOCK /**/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-#define HAS_FSYNC /**/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk _((int));
- * extern void* sbrk _((size_t));
- */
-#define HAS_SBRK_PROTO /**/
-
-#endif
diff --git a/contrib/perl5/Porting/findvars b/contrib/perl5/Porting/findvars
deleted file mode 100755
index 3cdb854..0000000
--- a/contrib/perl5/Porting/findvars
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/l/local/bin/perl -w
-
-$pat = '';
-# construct word list
-while (<DATA>) {
- chomp;
- next unless $_;
- $pat .= "$_|";
-}
-chop $pat if $pat =~ /\|$/;
-
-# grep
-while (<>) {
- print "$ARGV\:$.\:$_" if s/\b($pat)\b/#$1#/og;
-# this variant might useful if the transformation is more complicated
-# if (/^(.*?)\b($pat)\b(.*)$/o) {
-# my $head = "$1#$2#";
-# $_ = $3;
-# while (/^(.*?)\b($pat)\b(.*)$/o) {
-# $head .= "$1#$2#";
-# $_ = $3;
-# }
-# print "$ARGV\:$.\:$head$_\n";
-# }
-}
-continue {
- close ARGV if eof;
-}
-__END__
-Argv
-Cmd
-DBcv
-DBgv
-DBline
-DBsignal
-DBsingle
-DBsub
-DBtrace
-No
-Sv
-Xpv
-Yes
-amagic_generation
-ampergv
-an
-archpat_auto
-argvgv
-argvoutgv
-av_fetch_sv
-basetime
-beginav
-bodytarget
-bostr
-bufend
-bufptr
-cddir
-chopset
-collation_ix
-collation_name
-collation_standard
-collxfrm_base
-collxfrm_mult
-colors
-colorset
-compcv
-compiling
-comppad
-comppad_name
-comppad_name_fill
-comppad_name_floor
-cop_seqmax
-copline
-cryptseen
-cshlen
-cshname
-curcop
-curcopdb
-curinterp
-curpad
-curpm
-curstack
-curstackinfo
-curstash
-curstname
-curthr
-dbargs
-debdelim
-debname
-debstash
-debug
-defgv
-defoutgv
-defstash
-delaymagic
-diehook
-dirty
-dlevel
-dlmax
-do_undump
-doextract
-doswitches
-dowarn
-dumplvl
-e_script
-egid
-endav
-envgv
-errgv
-error_count
-euid
-eval_cond
-eval_mutex
-eval_owner
-eval_root
-eval_start
-evalseq
-exitlist
-exitlistlen
-expect
-extralen
-fdpid
-filemode
-firstgv
-forkprocess
-formfeed
-formtarget
-generation
-gensym
-gid
-globalstash
-he_root
-hexdigit
-hintgv
-hints
-hv_fetch_ent_mh
-hv_fetch_sv
-in_clean_all
-in_clean_objs
-in_eval
-in_my
-in_my_stash
-incgv
-initav
-inplace
-last_in_gv
-last_lop
-last_lop_op
-last_proto
-last_uni
-lastfd
-lastgotoprobe
-lastscream
-lastsize
-lastspbase
-laststatval
-laststype
-leftgv
-lex_brackets
-lex_brackstack
-lex_casemods
-lex_casestack
-lex_defer
-lex_dojoin
-lex_expect
-lex_fakebrack
-lex_formbrack
-lex_inpat
-lex_inwhat
-lex_op
-lex_repl
-lex_starts
-lex_state
-lex_stuff
-lineary
-linestart
-linestr
-localizing
-localpatches
-main_cv
-main_root
-main_start
-mainstack
-malloc_mutex
-markstack
-markstack_max
-markstack_ptr
-max_intro_pending
-maxo
-maxscream
-maxsysfd
-mess_sv
-min_intro_pending
-minus_F
-minus_a
-minus_c
-minus_l
-minus_n
-minus_p
-modcount
-modglobal
-multi_close
-multi_end
-multi_open
-multi_start
-multiline
-mystrk
-na
-nexttoke
-nexttype
-nextval
-nice_chunk
-nice_chunk_size
-ninterps
-nomemok
-nrs
-nthreads
-nthreads_cond
-numeric_local
-numeric_name
-numeric_standard
-ofmt
-ofs
-ofslen
-oldbufptr
-oldlastpm
-oldname
-oldoldbufptr
-op
-op_mask
-op_seqmax
-opsave
-origalen
-origargc
-origargv
-origenviron
-origfilename
-ors
-orslen
-osname
-pad_reset_pending
-padix
-padix_floor
-patchlevel
-patleave
-pending_ident
-perl_destruct_level
-perldb
-pidstatus
-preambleav
-preambled
-preprocess
-profiledata
-reg_eval_set
-reg_flags
-reg_start_tmp
-reg_start_tmpl
-regbol
-regcc
-regcode
-regcomp_parse
-regcomp_rx
-regcompp
-regdata
-regdummy
-regendp
-regeol
-regexecp
-regflags
-regindent
-reginput
-reginterp_cnt
-reglastparen
-regnarrate
-regnaughty
-regnpar
-regprecomp
-regprev
-regprogram
-regsawback
-regseen
-regsize
-regstartp
-regtill
-regxend
-replgv
-restartop
-retstack
-retstack_ix
-retstack_max
-rightgv
-rs
-rsfp
-rsfp_filters
-runops
-savestack
-savestack_ix
-savestack_max
-sawampersand
-sawstudy
-sawvec
-scopestack
-scopestack_ix
-scopestack_max
-screamfirst
-screamnext
-secondgv
-seen_evals
-seen_zerolen
-sh_path
-siggv
-sighandlerp
-sortcop
-sortcxix
-sortstash
-specialsv_list
-splitstr
-stack_base
-stack_max
-stack_sp
-start_env
-statbuf
-statcache
-statgv
-statname
-statusvalue
-statusvalue_vms
-stdingv
-strchop
-strtab
-sub_generation
-sublex_info
-subline
-subname
-sv_arenaroot
-sv_count
-sv_mutex
-sv_no
-sv_objcount
-sv_root
-sv_undef
-sv_yes
-svref_mutex
-sys_intern
-tainted
-tainting
-thisexpr
-thr_key
-threadnum
-threads_mutex
-threadsv_names
-thrsv
-timesbuf
-tmps_floor
-tmps_ix
-tmps_max
-tmps_stack
-tokenbuf
-top_env
-toptarget
-uid
-unsafe
-warnhook
-xiv_arenaroot
-xiv_root
-xnv_root
-xpv_root
-xrv_root
-piMem
-piENV
-piStdIO
-piLIO
-piDir
-piSock
-piProc
diff --git a/contrib/perl5/Porting/fixCORE b/contrib/perl5/Porting/fixCORE
deleted file mode 100755
index 4c586d8..0000000
--- a/contrib/perl5/Porting/fixCORE
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/local/bin/perl -w
-use Data::Dumper;
-
-my $targ = shift;
-my $inc = join(' ',map("-I$_",@INC));
-
-my $work = 1;
-while ($work)
- {
- open(PIPE,"$^X -w $inc -M$targ -e '' 2>&1 |") || die "Cannot open pipe to child:$!";
- my %fix;
- while (<PIPE>)
- {
- if (/^Ambiguous call resolved as CORE::(\w+)\(\), qualify as such or use \& at (\S+) line (\d+)/
- && -f $2 )
- {
- my ($var,$file,$line) = ($1,$2,$3);
- $fix{$file} = [] unless exists $fix{$file};
- push(@{$fix{$file}},[$line => $var]) unless ($var =~ /^PL_/ || $file =~ /\.h$/);
- }
- print;
- }
- close(PIPE);
-# warn "Make retured $?\n";
-# last unless $?;
- my $changed = 0;
- foreach my $file (keys %fix)
- {
- my @ar = sort( { $a->[0] <=> $b->[0] } @{delete $fix{$file}});
- my @miss;
- my $fixed = 0;
- @ARGV = ($file);
- $. = 0;
- local $^I = '.sav';
- while (<>)
- {
- while (@ar && $. == $ar[0][0])
- {
- my ($line,$var) = @{shift(@ar)};
- if (s/(?<!CORE::)\b$var\b(?=\s*\()/CORE::$var/)
- {
- warn "$file:$line: FIX $var\n";
- $fixed++;
- $changed++;
- }
- else
- {
- push(@miss,[$line,$var,$_]);
- }
- }
- print;
- }
- unless ($fixed)
- {
- rename("$file$^I",$file);
- if (@miss)
- {
- while (@miss)
- {
- my ($line,$var,$txt) = @{shift(@miss)};
- warn "$file:$line:$var | $txt";
- }
- }
- }
- }
- last unless $changed;
- }
-
diff --git a/contrib/perl5/Porting/fixvars b/contrib/perl5/Porting/fixvars
deleted file mode 100755
index a211e58..0000000
--- a/contrib/perl5/Porting/fixvars
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/local/bin/perl -w
-use Data::Dumper;
-
-my $targ = (@ARGV) ? join(' ',@ARGV) : 'miniperl' ;
-
-my $work = 1;
-while ($work)
- {
- open(PIPE,"make $targ 2>&1 |") || die "Cannot open pipe to make:$!";
- my %fix;
- while (<PIPE>)
- {
- if (/^(.*):(\d+):\s+\`(\w+)'\s+undeclared/ && -f $1 )
- {
- my ($file,$line,$var) = ($1,$2,$3);
- $fix{$file} = [] unless exists $fix{$file};
- push(@{$fix{$file}},[$line => $var]) unless ($var =~ /^PL_/ || $file =~ /\.h$/);
- }
- print;
- }
- close(PIPE);
- warn "Make retured $?\n";
- last unless $?;
- my $changed = 0;
- foreach my $file (keys %fix)
- {
- my @ar = sort( { $a->[0] <=> $b->[0] } @{delete $fix{$file}});
- my @miss;
- my $fixed = 0;
- unless (-w $file)
- {
- system("d4","edit",$file);
- }
- @ARGV = ($file);
- $. = 0;
- local $^I = '.sav';
- while (<>)
- {
- while (@ar && $. == $ar[0][0])
- {
- my ($line,$var) = @{shift(@ar)};
- if (s/\b$var\b/PL_$var/)
- {
- warn "$file:$line: FIX $var\n";
- $fixed++;
- $changed++;
- }
- else
- {
- push(@miss,[$line,$var,$_]);
- }
- }
- print;
- }
- unless ($fixed)
- {
- rename("$file$^I",$file);
- if (@miss)
- {
- while (@miss)
- {
- my ($line,$var,$txt) = @{shift(@miss)};
- warn "$file:$line:$var | $txt";
- }
- }
- }
- }
- last unless $changed;
- }
diff --git a/contrib/perl5/Porting/genlog b/contrib/perl5/Porting/genlog
deleted file mode 100755
index e040b9e..0000000
--- a/contrib/perl5/Porting/genlog
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/l/local/bin/perl -w
-#
-# Generate a nice changelist by querying perforce.
-#
-# Each change is described with the change number, description,
-# which branch the change happened in, files modified,
-# and who was responsible for entering the change.
-#
-# Can be called with a list of change numbers or a range of the
-# form "12..42". Changelog will be printed from highest number
-# to lowest.
-#
-# Outputs the changelist to stdout.
-#
-# Gurusamy Sarathy <gsar@activestate.com>
-#
-
-use Text::Wrap;
-
-$0 =~ s|^.*/||;
-unless (@ARGV) {
- die <<USAGE;
- $0 [-p \$P4PORT] [-bi branch_include] [-be branch_exclude] <change numbers or from..to>
-USAGE
-}
-
-my @changes;
-
-my %editkind;
-@editkind{ qw( add edit delete integrate branch )}
- = qw( + ! - !> +> );
-
-my $p4port = $ENV{P4PORT} || 'localhost:1666';
-
-my @branch_include;
-my @branch_exclude;
-my %branch_include;
-my %branch_exclude;
-
-while (@ARGV) {
- $_ = shift;
- if (/^(\d+)\.\.(\d+)$/) {
- push @changes, $1 .. $2;
- }
- elsif (/^\d+$/) {
- push @changes, $_;
- }
- elsif (/^-p(.*)$/) {
- $p4port = $1 || shift;
- }
- elsif (/^-bi(.*)$/) {
- push @branch_include, $1 || shift;
- }
- elsif (/^-be(.*)$/) {
- push @branch_exclude, $1 || shift;
- }
- else {
- warn "Arguments must be change numbers, ignoring `$_'\n";
- }
-}
-
-@changes = sort { $b <=> $a } @changes;
-
-@branch_include{@branch_include} = @branch_include if @branch_include;
-@branch_exclude{@branch_exclude} = @branch_exclude if @branch_exclude;
-
-my @desc = `p4 -p $p4port describe -s @changes`;
-if ($?) {
- die "$0: `p4 -p $p4port describe -s @changes` failed, status[$?]\n";
-}
-else {
- chomp @desc;
- while (@desc) {
- my ($change,$who,$date,$time,@log,$branch,$file,$type,%files);
- my $skip = 0;
- my $nbranch = 0;
- $_ = shift @desc;
- if (/^Change (\d+) by (\w+)\@.+ on (\S+) (\S+)\s*$/) {
- ($change, $who, $date, $time) = ($1,$2,$3,$4);
- $_ = shift @desc; # get rid of empty line
- while (@desc) {
- $_ = shift @desc;
- last if /^Affected/;
- push @log, $_;
- }
- if (/^Affected/) {
- $_ = shift @desc; # get rid of empty line
- while ($_ = shift @desc) {
- last unless /^\.\.\./;
- if (m{^\.\.\. //depot/(.*?perl|[^/]*)/([^#]+)#\d+ (\w+)\s*$}) {
- ($branch,$file,$type) = ($1,$2,$3);
- $nbranch++;
- if (exists $branch_exclude{$branch} or
- @branch_include and
- not exists $branch_include{$branch}) {
- $skip++;
- }
- $files{$branch} = {} unless exists $files{$branch};
- $files{$branch}{$type} = [] unless exists $files{$branch}{$type};
- push @{$files{$branch}{$type}}, $file;
- }
- else {
- warn "Unknown line [$_], ignoring\n";
- }
- }
- }
- }
- next if not $change or $skip == $nbranch;
- print "_" x 76, "\n";
- printf <<EOT, $change, $who, $date, $time;
-[%6s] By: %-25s on %9s %9s
-EOT
- print " Log: ";
- my $i = 0;
- while (@log) {
- $_ = shift @log;
- s/^\s*//;
- s/^\[.*\]\s*// unless $i ;
- # don't print last empty line
- if ($_ or @log) {
- print " " if $i++;
- print "$_\n";
- }
- }
- for my $branch (sort keys %files) {
- printf "%11s: $branch\n", 'Branch';
- for my $kind (sort keys %{$files{$branch}}) {
- warn("### $kind ###\n"), next unless exists $editkind{$kind};
- my $files = $files{$branch}{$kind};
- # don't show large branches and integrations
- $files = ["($kind " . scalar(@$files) . ' files)']
- if (@$files > 25 && ($kind eq 'integrate'
- || $kind eq 'branch'))
- || @$files > 100;
- print wrap(sprintf("%12s ", $editkind{$kind}),
- sprintf("%12s ", $editkind{$kind}),
- "@$files\n");
- }
- }
- }
-}
diff --git a/contrib/perl5/Porting/makerel b/contrib/perl5/Porting/makerel
deleted file mode 100755
index c519d5d..0000000
--- a/contrib/perl5/Porting/makerel
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/bin/env perl -w
-
-# A first attempt at some automated support for making a perl release.
-# Very basic but functional - if you're on a unix system.
-#
-# No matter how automated this gets, you'll always need to read
-# and re-read pumpkin.pod checking for things to be done at various
-# stages of the process.
-#
-# Tim Bunce, June 1997
-
-use ExtUtils::Manifest qw(fullcheck);
-
-$|=1;
-$relroot = ".."; # XXX make an option
-
-die "Must be in root of the perl source tree.\n"
- unless -f "./MANIFEST" and -f "patchlevel.h";
-
-open PATCHLEVEL,"<patchlevel.h" or die;
-my @patchlevel_h = <PATCHLEVEL>;
-close PATCHLEVEL;
-my $patchlevel_h = join "", grep { /^#\s*define/ } @patchlevel_h;
-print $patchlevel_h;
-$revision = $1 if $patchlevel_h =~ /PERL_REVISION\s+(\d+)/;
-$patchlevel = $1 if $patchlevel_h =~ /PERL_VERSION\s+(\d+)/;
-$subversion = $1 if $patchlevel_h =~ /PERL_SUBVERSION\s+(\d+)/;
-die "Unable to parse patchlevel.h" unless $subversion >= 0;
-$vers = sprintf("%d.%d.%d", $revision, $patchlevel, $subversion);
-$vms_vers = sprintf("%d_%d_%d", $revision, $patchlevel, $subversion);
-
-# fetch list of local patches
-my (@local_patches, @lpatch_tags, $lpatch_tags);
-@local_patches = grep { /^static.*local_patches/../^};/ } @patchlevel_h;
-@local_patches = grep { !/^\s*,?NULL/ } @local_patches;
-@lpatch_tags = map { /^\s*,"(\w+)/ } @local_patches;
-$lpatch_tags = join "-", @lpatch_tags;
-
-$perl = "perl-$vers";
-$reldir = "$perl";
-$reldir .= "-$lpatch_tags" if $lpatch_tags;
-
-print "\nMaking a release for $perl in $relroot/$reldir\n\n";
-
-print "Cross-checking the MANIFEST...\n";
-($missfile, $missentry) = fullcheck();
-warn "Can't make a release with MANIFEST files missing.\n" if @$missfile;
-warn "Can't make a release with files not listed in MANIFEST.\n" if @$missentry;
-if ("@$missentry" =~ m/\.orig\b/) {
- # Handy listing of find command and .orig files from patching work.
- # I tend to run 'xargs rm' and copy and paste the file list.
- my $cmd = "find . -name '*.orig' -print";
- print "$cmd\n";
- system($cmd);
-}
-die "Aborted.\n" if @$missentry or @$missfile;
-print "\n";
-
-# VMS no longer has hardcoded version numbers descrip.mms
-#print "Updating VMS version specific files with $vms_vers...\n";
-#system("perl -pi -e 's/^\QPERL_VERSION = \E\d\_\d+(\s*\#)/PERL_VERSION = $vms_vers$1/' vms/descrip.mms");
-
-
-
-print "Creating $relroot/$reldir release directory...\n";
-die "$relroot/$reldir release directory already exists\n" if -e "$relroot/$reldir";
-die "$relroot/$reldir.tar.gz release file already exists\n" if -e "$relroot/$reldir.tar.gz";
-mkdir("$relroot/$reldir", 0755) or die "mkdir $relroot/$reldir: $!\n";
-print "\n";
-
-
-print "Copying files to release directory...\n";
-# ExtUtils::Manifest maniread does not preserve the order
-$cmd = "awk '{print \$1}' MANIFEST | cpio -pdm $relroot/$reldir";
-system($cmd) == 0 or die "$cmd failed";
-print "\n";
-
-chdir "$relroot/$reldir" or die $!;
-
-print "Setting file permissions...\n";
-system("find . -type f -print | xargs chmod a-w");
-system("find . -type d -print | xargs chmod 0755");
-
-# the right files should already have the execute bit set
-# in the repository, but this is just insurance
-system("find t -name '*.t' -print | xargs chmod a+x");
-my @exe = qw(
- Configure
- configure.gnu
- configpm
- installperl
- installhtml
- installman
- embed.pl
- keywords.pl
- opcode.pl
- warnings.pl
- perly.fixer
- t/TEST
- t/*/*.t
- *.SH
- vms/ext/Stdio/test.pl
- vms/ext/*.t
- x2p/*.SH
- Porting/patchls
- Porting/makerel
-);
-system("chmod +x @exe");
-
-my @writables = qw(
- keywords.h
- opcode.h
- opnames.h
- pp_proto.h
- pp.sym
- proto.h
- embed.h
- embedvar.h
- global.sym
- pod/perlintern.pod
- pod/perlapi.pod
- objXSUB.h
- perlapi.h
- perlapi.c
- ext/ByteLoader/byterun.h
- ext/ByteLoader/byterun.c
- ext/B/B/Asmdata.pm
- regnodes.h
- warnings.h
- lib/warnings.pm
- vms/perly_c.vms
- vms/perly_h.vms
- win32/Makefile
- win32/makefile.mk
- win32/config_H.bc
- win32/config_H.bc
- win32/config_H.gc
- win32/config_H.vc
-);
-system("chmod +w @writables");
-
-print "Adding CRs to DOSish files...\n";
-my @crlf = qw(
- djgpp/configure.bat
- README.dos
- README.win32
- win32/Makefile
- win32/makefile.mk
-);
-system("perl -pi -e 's/\$/\\r/' @crlf");
-print "\n";
-
-chdir ".." or die $!;
-
-print "Creating and compressing the tar file...\n";
-my $src = (-e $perl) ? $perl : 'perl'; # 'perl' in maint branch
-$cmd = "tar cf - $reldir | gzip --best > $reldir.tar.gz";
-system($cmd) == 0 or die "$cmd failed";
-print "\n";
-
-system("ls -ld $perl*");
diff --git a/contrib/perl5/Porting/p4d2p b/contrib/perl5/Porting/p4d2p
deleted file mode 100755
index f645ef8..0000000
--- a/contrib/perl5/Porting/p4d2p
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/l/local/bin/perl -wspi.bak
-
-#
-# reads a perforce style diff on stdin and outputs appropriate headers
-# so the diff can be applied with the patch program
-#
-# Gurusamy Sarathy <gsar@activestate.com>
-#
-
-BEGIN {
- $0 =~ s|.*/||;
- if ($h or $help) {
- print STDERR <<USAGE;
-Usage: $0 [-v] [-h] files
-
- -h print this help
- -v output progress messages
-
-Does inplace edit of diff files output by the perforce commands
-"p4 describe", "p4 diff", and "p4 diff2". The result is suitable
-for feeding to the "patch" program.
-
-If no files are specified, reads from stdin and writes to stdout.
-
-WARNING: It only handles context or unified diffs.
-
-Example: p4 describe -du 123 | $0 > change-123.patch
-
-USAGE
- exit(0);
- }
- unless (@ARGV) { @ARGV = '-'; undef $^I; }
- use vars qw($thisfile $time $file $fnum $v $h $help);
- $thisfile = "";
- $time = localtime(time);
-}
-
-my ($cur, $match);
-$cur = m<^==== //depot/(.+?)\#\d+.* ====$> ... m<^(\@\@.+\@\@|\*+)$>;
-
-$match = $1;
-
-if ($ARGV ne $thisfile) {
- warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-';
- $thisfile = $ARGV;
-}
-
-# while we are within range
-if ($cur) {
- # set the file name after first line
- if ($cur == 1) {
- $file = $match;
- $fnum++;
- }
- # emit the diff header when we hit last line
- elsif ($cur =~ /E0$/) {
- my $f = $file;
-
- # special hack for perl so we can always use "patch -p1"
- $f =~ s<^.*?(perl.*?/)><$1>;
-
- # unified diff
- if ($match =~ /^\@/) {
- warn "emitting udiff header\n" if $v;
- $_ = "Index: $f\n--- $f.~1~\t$time\n+++ $f\t$time\n$_";
- }
- # context diff
- elsif ($match =~ /^\*/) {
- warn "emitting cdiff header\n" if $v;
- $_ = "Index: $f\n*** $f.~1~\t$time\n--- $f\t$time\n$_";
- }
- }
- # see if we hit another patch (i.e. previous patch was empty)
- elsif (m<^==== //depot/(.+?)\#\d+.* ====$>) {
- $file = $match = $1;
- }
- # suppress all other lines in the header
- else {
- $_ = "";
- }
- warn "file [$file] line [$cur] file# [$fnum]\n" if $v;
-}
-
-$_ .= "End of Patch.\n" if eof;
diff --git a/contrib/perl5/Porting/p4desc b/contrib/perl5/Porting/p4desc
deleted file mode 100755
index 2d1c9d8..0000000
--- a/contrib/perl5/Porting/p4desc
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/perl -wpi.bak
-
-#
-# Munge "p4 describe ..." output to include new files.
-#
-# Gurusamy Sarathy <gsar@activestate.com>
-#
-
-use vars qw($thisfile $change $file $fnum $h $v $p4port @addfiles
- $branches $skip);
-
-BEGIN {
- $0 =~ s|^.*/||;
- $p4port = $ENV{P4PORT} || 'localhost:1666';
- for (@ARGV) {
- if ($p4port =~ /^\s+$/) {
- $p4port = $_;
- }
- elsif (/^-p(.*)$/) {
- $p4port = $1 || ' ';
- }
- elsif (/^-b(.*)$/) {
- $branches = $1;
- }
- elsif (/^-v$/) {
- $v++;
- }
- elsif (/^-h/) {
- $h++;
- }
- else {
- push @files, $_;
- }
- }
- unless (@files) { @files = '-'; undef $^I; }
- @ARGV = @files;
- $branches = '//depot/perl/' unless defined $branches;
- if ($h) {
- print STDERR <<USAGE;
-Usage: $0 [-p \$P4PORT] [-v] [-h] [files]
-
- -phost:port p4 port (e.g. myhost:1666)
- -h print this help
- -v output progress messages
- -bbranch(es) which branches to include (regex)
- (default: //depot/perl/)
- -h show this help
-
-A smart 'cat'. When fed the spew from "p4 describe ..." on STDIN,
-spits it right out on STDOUT, followed by patches for any new files
-detected in the spew. Can also be used to edit insitu a bunch of
-files containing said spew.
-
-WARNING 1: Currently only emits unified diffs (diff -u).
-
-WARNING 2: By default only the changes in the //depot/perl branch
-are shown. To include all the branches, supply "-b." arguments
-to $0.
-
-Examples:
- p4 describe -du 123 | $0 > change-123.desc
- p4 describe -du 123 | $0 | p4d2p > change-123.patch
-
-USAGE
- exit(0);
- }
- $thisfile = "";
-}
-
-
-if ($ARGV ne $thisfile) {
- warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-';
- $thisfile = $ARGV;
-}
-
-my $cur = m|^Affected files| ... m|^Differences|;
-
-# while we are within range
-if ($cur) {
- if (m|^\.\.\. |) {
- if (m|$branches|) {
- if (m{^\.\.\. (//depot/.+?\#\d+) (add|branch)$}) {
- my $newfile = $1;
- push @addfiles, $newfile;
- warn "$newfile add, revision != 1!\n" unless $newfile =~ /#1$/;
- }
- } else {
- push @skipped, "# $_";
- $_ = '';
- }
- }
- warn "file [$file] line [$cur] file# [$fnum]\n" if $v;
-}
-
-if (m|^==== //depot/|) {
- $skip = !m|$branches|;
- print "# Skipped because not under branches: $branches\n" if $skip;
-}
-
-$_ = "# $_" if $skip;
-
-if (/^Change (\d+) by/) {
- $_ = "\n\n" . $_ if $change; # start of a new change list
- $change = $1;
- my $new = newfiles();
- if ($new) {
- $_ = $new . $_;
- }
-}
-
-if (eof) {
- $_ .= newfiles();
- $_ .= join('', "\n",
- "# Skipped because not under branches: $branches\n",
- @skipped, "\n") if @skipped;
-}
-
-sub newfiles {
- my $addfile;
- my $ret = "";
- for $addfile (@addfiles) {
- my $type = `p4 -p $p4port files '$addfile'`;
- if ($?) {
- warn "$0: `p4 -p $p4port print '$addfile'` failed, status[$?]\n";
- next;
- }
- $type =~ m|^//.*\((.+)\)$| or next;
- $type = $1;
- unless ($type =~ /text/) {
- $ret .= "\n==== $addfile ($type) ====\n\n";
- next;
- }
- my @new = `p4 -p $p4port print '$addfile'`;
- if ($?) {
- die "$0: `p4 -p $p4port print '$addfile'` failed, status[$?]\n";
- }
- my $desc = shift @new; # discard initial description
- $ret .= "\n==== $addfile ($type) ====\n\n";
- my $lines = "," . @new;
- $lines = "" if @new < 2;
- $ret .= "\@\@ -0,0 +1$lines \@\@\n";
- $ret .= join("+","",@new);
- $ret .= "\n\\ No newline at end of file\n" if $ret !~ /\n$/;
- }
- @addfiles = ();
- return $ret;
-}
diff --git a/contrib/perl5/Porting/patching.pod b/contrib/perl5/Porting/patching.pod
deleted file mode 100644
index 7fd376b..0000000
--- a/contrib/perl5/Porting/patching.pod
+++ /dev/null
@@ -1,391 +0,0 @@
-=head1 Name
-
-patching.pod - Appropriate format for patches to the perl source tree
-
-=head2 Where to get this document
-
-The latest version of this document is available from
- http://perrin.dimensional.com/perl/perlpatch.html
-
-=head2 How to contribute to this document
-
-You may mail corrections, additions, and suggestions to me
-at dgris@dimensional.com but the preferred method would be
-to follow the instructions set forth in this document and
-submit a patch 8-).
-
-=head1 Description
-
-=head2 Why this document exists
-
-As an open source project Perl relies on patches and contributions from
-its users to continue functioning properly and to root out the inevitable
-bugs. But, some users are unsure as to the I<right> way to prepare a patch
-and end up submitting seriously malformed patches. This makes it very
-difficult for the current maintainer to integrate said patches into their
-distribution. This document sets out usage guidelines for patches in an
-attempt to make everybody's life easier.
-
-=head2 Common problems
-
-The most common problems appear to be patches being mangled by certain
-mailers (I won't name names, but most of these seem to be originating on
-boxes running a certain popular commercial operating system). Other problems
-include patches not rooted in the appropriate place in the directory structure,
-and patches not produced using standard utilities (such as diff).
-
-=head1 Proper Patch Guidelines
-
-=head2 What to patch
-
-Generally speaking you should patch the latest development release
-of perl. The maintainers of the individual branches will see to it
-that patches are picked up and applied as appropriate.
-
-=head2 How to prepare your patch
-
-=over 4
-
-=item Creating your patch
-
-First, back up the original files. This can't be stressed enough,
-back everything up _first_.
-
-Also, please create patches against a clean distribution of the perl source.
-This ensures that everyone else can apply your patch without clobbering their
-source tree.
-
-=item diff
-
-While individual tastes vary (and are not the point here) patches should
-be created using either C<-u> or C<-c> arguments to diff. These produce,
-respectively, unified diffs (where the changed line appears immediately next
-to the original) and context diffs (where several lines surrounding the changes
-are included). See the manpage for diff for more details.
-
-The preferred method for creating a unified diff suitable for feeding
-to the patch program is:
-
- diff -u old-file new-file > patch-file
-
-Note the order of files. See below for how to create a patch from
-two directory trees.
-
-If your patch is for wider consumption, it may be better to create it as
-a context diff as some machines have broken patch utilities that choke on
-unified diffs. A context diff is made using C<diff -c> rather than
-C<diff -u>.
-
-GNU diff has many desirable features not provided by most vendor-supplied
-diffs. Some examples using GNU diff:
-
- # generate a patch for a newly added file
- % diff -u /dev/null new/file
-
- # generate a patch to remove a file (patch > v2.4 will remove it cleanly)
- % diff -u old/goner /dev/null
-
- # get additions, deletions along with everything else, recursively
- % diff -ruN olddir newdir
-
- # ignore whitespace
- % diff -bu a/file b/file
-
- # show function name in every hunk (safer, more informative)
- % diff -u -F '^[_a-zA-Z0-9]+ *(' old/file new/file
-
-=item Derived Files
-
-Many files in the distribution are derivative--avoid patching them.
-Patch the originals instead. Most utilities (like perldoc) are in
-this category, i.e. patch utils/perldoc.PL rather than utils/perldoc.
-Similarly, don't create patches for files under $src_root/ext from
-their copies found in $install_root/lib. If you are unsure about the
-proper location of a file that may have gotten copied while building
-the source distribution, consult the C<MANIFEST>.
-
-=item Filenames
-
-The most usual convention when submitting patches for a single file is to make
-your changes to a copy of the file with the same name as the original. Rename
-the original file in such a way that it is obvious what is being patched
-($file.dist or $file.old seem to be popular).
-
-If you are submitting patches that affect multiple files then you should
-backup the entire directory tree (to $source_root.old/ for example). This
-will allow C<diff -ruN old-dir new-dir> to create all the patches at once.
-
-=item Directories
-
-IMPORTANT: Patches should be generated from the source root directory, not
-from the directory that the patched file resides in. This ensures that the
-maintainer patches the proper file.
-
-For larger patches that are dealing with multiple files or
-directories, Johan Vromans has written a powerful utility: makepatch.
-See the JV directory on CPAN for the current version. If you have this
-program available, it is recommended to create a duplicate of the perl
-directory tree against which you are intending to provide a patch and
-let makepatch figure out all the changes you made to your copy of the
-sources. As perl comes with a MANIFEST file, you need not delete
-object files and other derivative files from the two directory trees,
-makepatch is smart about them.
-
-Say, you have created a directory perl-5.7.1@8685/ for the perl you
-are taking as the base and a directory perl-5.7.1@8685-withfoo/ where
-you have your changes, you would run makepatch as follows:
-
- makepatch -oldman perl-5.7.1@8685/MANIFEST \
- -newman perl-5.7.1@8685-withfoo/MANIFEST \
- -diff "diff -u" \
- perl-5.7.1@8685 perl-5.7.1@8685-withfoo
-
-=item Try it yourself
-
-Just to make sure your patch "works", be sure to apply it to the Perl
-distribution, rebuild everything, and make sure the testsuite runs
-without incident.
-
-=back
-
-=head2 What to include in your patch
-
-=over 4
-
-=item Description of problem
-
-The first thing you should include is a description of the problem that
-the patch corrects. If it is a code patch (rather than a documentation
-patch) you should also include a small test case that illustrates the
-bug.
-
-=item Directions for application
-
-You should include instructions on how to properly apply your patch.
-These should include the files affected, any shell scripts or commands
-that need to be run before or after application of the patch, and
-the command line necessary for application.
-
-=item If you have a code patch
-
-If you are submitting a code patch there are several other things that
-you need to do.
-
-=over 4
-
-=item Comments, Comments, Comments
-
-Be sure to adequately comment your code. While commenting every
-line is unnecessary, anything that takes advantage of side effects of
-operators, that creates changes that will be felt outside of the
-function being patched, or that others may find confusing should
-be documented. If you are going to err, it is better to err on the
-side of adding too many comments than too few.
-
-=item Style
-
-In general, please follow the particular style of the code you are patching.
-
-In particular, follow these general guidelines for patching Perl sources:
-
- 8-wide tabs (no exceptions!)
- 4-wide indents for code, 2-wide indents for nested CPP #defines
- try hard not to exceed 79-columns
- ANSI C prototypes
- uncuddled elses and "K&R" style for indenting control constructs
- no C++ style (//) comments, most C compilers will choke on them
- mark places that need to be revisited with XXX (and revisit often!)
- opening brace lines up with "if" when conditional spans multiple
- lines; should be at end-of-line otherwise
- in function definitions, name starts in column 0 (return value is on
- previous line)
- single space after keywords that are followed by parens, no space
- between function name and following paren
- avoid assignments in conditionals, but if they're unavoidable, use
- extra paren, e.g. "if (a && (b = c)) ..."
- "return foo;" rather than "return(foo);"
- "if (!foo) ..." rather than "if (foo == FALSE) ..." etc.
-
-
-=item Testsuite
-
-When submitting a patch you should make every effort to also include
-an addition to perl's regression tests to properly exercise your
-patch. Your testsuite additions should generally follow these
-guidelines (courtesy of Gurusamy Sarathy <gsar@activestate.com>):
-
- Know what you're testing. Read the docs, and the source.
- Tend to fail, not succeed.
- Interpret results strictly.
- Use unrelated features (this will flush out bizarre interactions).
- Use non-standard idioms (otherwise you are not testing TIMTOWTDI).
- Avoid using hardcoded test numbers whenever possible (the
- EXPECTED/GOT found in t/op/tie.t is much more maintainable,
- and gives better failure reports).
- Give meaningful error messages when a test fails.
- Avoid using qx// and system() unless you are testing for them. If you
- do use them, make sure that you cover _all_ perl platforms.
- Unlink any temporary files you create.
- Promote unforeseen warnings to errors with $SIG{__WARN__}.
- Be sure to use the libraries and modules shipped with the version
- being tested, not those that were already installed.
- Add comments to the code explaining what you are testing for.
- Make updating the '1..42' string unnecessary. Or make sure that
- you update it.
- Test _all_ behaviors of a given operator, library, or function:
- - All optional arguments
- - Return values in various contexts (boolean, scalar, list, lvalue)
- - Use both global and lexical variables
- - Don't forget the exceptional, pathological cases.
-
-=back
-
-=item Test your patch
-
-Apply your patch to a clean distribution, compile, and run the
-regression test suite (you did remember to add one for your
-patch, didn't you).
-
-=back
-
-=head2 An example patch creation
-
-This should work for most patches:
-
- cp MANIFEST MANIFEST.old
- emacs MANIFEST
- (make changes)
- cd ..
- diff -c perl5.008_42/MANIFEST.old perl5.008_42/MANIFEST > mypatch
- (testing the patch:)
- mv perl5.008_42/MANIFEST perl5.008_42/MANIFEST.new
- cp perl5.008_42/MANIFEST.old perl5.008_42/MANIFEST
- patch -p < mypatch
- (should succeed)
- diff perl5.008_42/MANIFEST perl5.008_42/MANIFEST.new
- (should produce no output)
-
-=head2 Submitting your patch
-
-=over 4
-
-=item Mailers
-
-Please, please, please (get the point? 8-) don't use a mailer that
-word wraps your patch or that MIME encodes it. Both of these leave
-the patch essentially worthless to the maintainer.
-
-If you have no choice in mailers and no way to get your hands on a
-better one there is, of course, a perl solution. Just do this:
-
- perl -ne 'print pack("u*",$_)' patch > patch.uue
-
-and post patch.uue with a note saying to unpack it using
-
- perl -ne 'print unpack("u*",$_)' patch.uue > patch
-
-=item Subject lines for patches
-
-The subject line on your patch should read
-
- [PATCH 5.xxx_xx AREA] Description
-
-where the x's are replaced by the appropriate version number.
-The description should be a very brief but accurate summary of the
-problem (don't forget this is an email header).
-
-Examples:
-
- [PATCH 5.004_04 DOC] fix minor typos
-
- [PATCH 5.004_99 CORE] New warning for foo() when frobbing
-
- [PATCH 5.005_42 CONFIG] Added support for fribnatz 1.5
-
-The name of the file being patched makes for a poor subject line if
-no other descriptive text accompanies it.
-
-=item Where to send your patch
-
-If your patch is for a specific bug in the Perl core, it should be sent
-using the perlbug utility. Don't forget to describe the problem and the
-fix adequately.
-
-If it is a patch to a module that you downloaded from CPAN you should
-submit your patch to that module's author.
-
-If your patch addresses one of the items described in perltodo.pod,
-please discuss your approach B<before> you make the patch at
-<perl5-porters@perl.org>. Be sure to browse the archives of past
-discussions (see perltodo.pod for archive locations).
-
-=back
-
-=head2 Applying a patch
-
-=over 4
-
-=item General notes on applying patches
-
-The following are some general notes on applying a patch
-to your perl distribution.
-
-=over 4
-
-=item patch C<-p>
-
-It is generally easier to apply patches with the C<-p N> argument to
-patch (where N is the number of path components to skip in the files
-found in the headers). This helps reconcile differing paths between
-the machine the patch was created on and the machine on which it is
-being applied.
-
-=item Cut and paste
-
-B<Never> cut and paste a patch into your editor. This usually clobbers
-the tabs and confuses patch.
-
-=item Hand editing patches
-
-Avoid hand editing patches as this almost always screws up the line
-numbers and offsets in the patch, making it useless.
-
-=back
-
-=back
-
-=head2 Final notes
-
-If you follow these guidelines it will make everybody's life a little
-easier. You'll have the satisfaction of having contributed to perl,
-others will have an easy time using your work, and it should be easier
-for the maintainers to coordinate the occasionally large numbers of
-patches received.
-
-Also, just because you're not a brilliant coder doesn't mean that you
-can't contribute. As valuable as code patches are there is always a
-need for better documentation (especially considering the general
-level of joy that most programmers feel when forced to sit down and
-write docs). If all you do is patch the documentation you have still
-contributed more than the person who sent in an amazing new feature
-that no one can use because no one understands the code (what I'm
-getting at is that documentation is both the hardest part to do
-(because everyone hates doing it) and the most valuable).
-
-Mostly, when contributing patches, imagine that it is B<you> receiving
-hundreds of patches and that it is B<your> responsibility to integrate
-them into the source. Obviously you'd want the patches to be as easy
-to apply as possible. Keep that in mind. 8-)
-
-=head1 Last Modified
-
-Last modified 21 January 1999
-Daniel Grisinger <dgris@dimensional.com>
-
-=head1 Author and Copyright Information
-
-Copyright (c) 1998 Daniel Grisinger
-
-Adapted from a posting to perl5-porters by Tim Bunce (Tim.Bunce@ig.co.uk).
-
-I'd like to thank the perl5-porters for their suggestions.
diff --git a/contrib/perl5/Porting/patchls b/contrib/perl5/Porting/patchls
deleted file mode 100755
index 4329f4c..0000000
--- a/contrib/perl5/Porting/patchls
+++ /dev/null
@@ -1,574 +0,0 @@
-#!/bin/perl -w
-#
-# patchls - patch listing utility
-#
-# Input is one or more patchfiles, output is a list of files to be patched.
-#
-# Copyright (c) 1997 Tim Bunce. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-#
-# With thanks to Tom Horsley for the seed code.
-
-
-use Getopt::Std;
-use Text::Wrap qw(wrap $columns);
-use Text::Tabs qw(expand unexpand);
-use strict;
-use vars qw($VERSION);
-
-$VERSION = 2.11;
-
-sub usage {
-die qq{
- patchls [options] patchfile [ ... ]
-
- -h no filename headers (like grep), only the listing.
- -l no listing (like grep), only the filename headers.
- -i Invert: for each patched file list which patch files patch it.
- -c Categorise the patch and sort by category (perl specific).
- -m print formatted Meta-information (Subject,From,Msg-ID etc).
- -p N strip N levels of directory Prefix (like patch), else automatic.
- -v more verbose (-d for noisy debugging).
- -n give a count of the number of patches applied to a file if >1.
- -f F only list patches which patch files matching regexp F
- (F has \$ appended unless it contains a /).
- -e Expect patched files to Exist (relative to current directory)
- Will print warnings for files which don't. Also affects -4 option.
- - Read patch from STDIN
- other options for special uses:
- -I just gather and display summary Information about the patches.
- -4 write to stdout the PerForce commands to prepare for patching.
- -5 like -4 but add "|| exit 1" after each command
- -M T Like -m but only output listed meta tags (eg -M 'Title From')
- -W N set wrap width to N (defaults to 70, use 0 for no wrap)
- -X list patchfiles that may clash (i.e. patch the same file)
-
- patchls version $VERSION by Tim Bunce
-}
-}
-
-$::opt_p = undef; # undef != 0
-$::opt_d = 0;
-$::opt_v = 0;
-$::opt_m = 0;
-$::opt_n = 0;
-$::opt_i = 0;
-$::opt_h = 0;
-$::opt_l = 0;
-$::opt_c = 0;
-$::opt_f = '';
-$::opt_e = 0;
-
-# special purpose options
-$::opt_I = 0;
-$::opt_4 = 0; # output PerForce commands to prepare for patching
-$::opt_5 = 0;
-$::opt_M = ''; # like -m but only output these meta items (-M Title)
-$::opt_W = 70; # set wrap width columns (see Text::Wrap module)
-$::opt_C = 0; # 'Chip' mode (handle from/tags/article/bug files) undocumented
-$::opt_X = 0; # list patchfiles that patch the same file
-
-usage unless @ARGV;
-
-getopts("dmnihlvecC45Xp:f:IM:W:") or usage;
-
-$columns = $::opt_W || 9999999;
-
-$::opt_m = 1 if $::opt_M;
-$::opt_4 = 1 if $::opt_5;
-$::opt_i = 1 if $::opt_X;
-
-# see get_meta_info()
-my @show_meta = split(' ', $::opt_M || 'Title From Msg-ID Files');
-my %show_meta = map { ($_,1) } @show_meta;
-
-my %cat_title = (
- 'BUILD' => 'BUILD PROCESS',
- 'CORE' => 'CORE LANGUAGE',
- 'DOC' => 'DOCUMENTATION',
- 'LIB' => 'LIBRARY',
- 'PORT1' => 'PORTABILITY - WIN32',
- 'PORT2' => 'PORTABILITY - GENERAL',
- 'TEST' => 'TESTS',
- 'UTIL' => 'UTILITIES',
- 'OTHER' => 'OTHER CHANGES',
- 'EXT' => 'EXTENSIONS',
- 'UNKNOWN' => 'UNKNOWN - NO FILES PATCHED',
-);
-
-
-sub get_meta_info {
- my $ls = shift;
- local($_) = shift;
- if (/^From:\s+(.*\S)/i) {;
- my $from = $1; # temporary measure for Chip Salzenberg
- $from =~ s/chip\@(atlantic\.net|perlsupport\.com)/chip\@pobox.com/;
- $from =~ s/\(Tim Bunce\) \(Tim Bunce\)/(Tim Bunce)/;
- $ls->{From}{$from} = 1
- }
- if (/^Subject:\s+(?:Re: )?(.*\S)/i) {
- my $title = $1;
- $title =~ s/\[(PATCH|PERL)[\w\. ]*\]:?//g;
- $title =~ s/\b(PATCH|PERL)[\w\.]*://g;
- $title =~ s/\bRe:\s+/ /g;
- $title =~ s/\s+/ /g;
- $title =~ s/^\s*(.*?)\s*$/$1/g;
- $ls->{Title}{$title} = 1;
- }
- $ls->{'Msg-ID'}{$1}=1 if /^Message-Id:\s+(.*\S)/i;
- $ls->{Date}{$1}=1 if /^Date:\s+(.*\S)/i;
- $ls->{$1}{$2}=1 if $::opt_M && /^([-\w]+):\s+(.*\S)/;
-}
-
-
-# Style 1:
-# *** perl-5.004/embed.h Sat May 10 03:39:32 1997
-# --- perl-5.004.fixed/embed.h Thu May 29 19:48:46 1997
-# ***************
-# *** 308,313 ****
-# --- 308,314 ----
-#
-# Style 2:
-# --- perl5.004001/mg.c Sun Jun 08 12:26:24 1997
-# +++ perl5.004-bc/mg.c Sun Jun 08 11:56:08 1997
-# @@ .. @@
-# or for deletions
-# --- perl5.004001/mg.c Sun Jun 08 12:26:24 1997
-# +++ /dev/null Sun Jun 08 11:56:08 1997
-# @@ ... @@
-# or (rcs, note the different date format)
-# --- 1.18 1997/05/23 19:22:04
-# +++ ./pod/perlembed.pod 1997/06/03 21:41:38
-#
-# Variation:
-# Index: embed.h
-
-my %ls;
-
-my $in;
-my $ls;
-my $prevline = '';
-my $prevtype = '';
-my (%removed, %added);
-my $prologue = 1; # assume prologue till patch or /^exit\b/ seen
-
-
-foreach my $argv (@ARGV) {
- $in = $argv;
- if (-d $in) {
- warn "Ignored directory $in\n";
- next;
- }
- if ($in eq "-") {
- *F = \*STDIN;
- } elsif (not open F, "<$in") {
- warn "Unable to open $in: $!\n";
- next;
- }
- print "Reading $in...\n" if $::opt_v and @ARGV > 1;
- $ls = $ls{$in} ||= { is_in => 1, in => $in };
- my $type;
- while (<F>) {
- unless (/^([-+*]{3}) / || /^(Index):/) {
- # not an interesting patch line
- # but possibly meta-information or prologue
- if ($prologue) {
- $added{$1} = 1 if /^touch\s+(\S+)/;
- $removed{$1} = 1 if /^rm\s+(?:-f)?\s*(\S+)/;
- $prologue = 0 if /^exit\b/;
- }
- get_meta_info($ls, $_) if $::opt_m;
- next;
- }
- $type = $1;
- next if /^--- [0-9,]+ ----$/ || /^\*\*\* [0-9,]+ \*\*\*\*$/;
- $prologue = 0;
-
- print "Last: $prevline","This: ${_}Got: $type\n\n" if $::opt_d;
-
- # Some patches have Index lines but not diff headers
- # Patch copes with this, so must we. It's also handy for
- # documenting manual changes by simply adding Index: lines
- # to the file which describes the problem being fixed.
- if (/^Index:\s+(.*)/) {
- my $f;
- foreach $f (split(/ /, $1)) { add_patched_file($ls, $f) }
- next;
- }
-
- if ( ($type eq '---' and $prevtype eq '***') # Style 1
- or ($type eq '+++' and $prevtype eq '---') # Style 2
- ) {
- if (/^[-+*]{3} (\S+)\s*(.*?\d\d:\d\d:\d\d)?/) { # double check
- if ($1 eq "/dev/null") {
- $prevline =~ /^[-+*]{3} (\S+)\s*/;
- add_deleted_file($ls, $1);
- }
- else {
- add_patched_file($ls, $1);
- }
- }
- else {
- warn "$in $.: parse error (prev $prevtype, type $type)\n$prevline$_";
- }
- }
- }
- continue {
- $prevline = $_;
- $prevtype = $type || '';
- $type = '';
- }
-
- # special mode for patch sets from Chip
- if ($in =~ m:[\\/]patch$:) {
- my $is_chip;
- my $chip;
- my $dir; ($dir = $in) =~ s:[\\/]patch$::;
- if (!$ls->{From} && (open(CHIP,"$dir/article") || open(CHIP,"$dir/bug"))) {
- get_meta_info($ls, $_) while (<CHIP>);
- $is_chip = 1;
- }
- if (open CHIP,"<$dir/from") {
- chop($chip = <CHIP>);
- $ls->{From} = { $chip => 1 };
- $is_chip = 1;
- }
- if (open CHIP,"<$dir/tag") {
- chop($chip = <CHIP>);
- $ls->{Title} = { $chip => 1 };
- $is_chip = 1;
- }
- $ls->{From} = { "Chip Salzenberg" => 1 } if $is_chip && !$ls->{From};
- }
-
- # if we don't have a title for -m then use the file name
- $ls->{Title}{"Untitled: $in"}=1 if $::opt_m
- and !$ls->{Title} and $ls->{out};
-
- $ls->{category} = $::opt_c
- ? categorize_files([keys %{ $ls->{out} }], $::opt_v) : '';
-}
-print scalar(@ARGV)." files read.\n" if $::opt_v and @ARGV > 1;
-
-
-# --- Firstly we filter and sort as needed ---
-
-my @ls = values %ls;
-
-if ($::opt_f) { # filter out patches based on -f <regexp>
- $::opt_f .= '$' unless $::opt_f =~ m:/:;
- @ls = grep {
- my $match = 0;
- if ($_->{is_in}) {
- my @out = keys %{ $_->{out} };
- $match=1 if grep { m/$::opt_f/o } @out;
- }
- else {
- $match=1 if $_->{in} =~ m/$::opt_f/o;
- }
- $match;
- } @ls;
-}
-
-@ls = sort {
- $a->{category} cmp $b->{category} || $a->{in} cmp $b->{in}
-} @ls;
-
-
-# --- Handle special modes ---
-
-if ($::opt_4) {
- my $tail = ($::opt_5) ? "|| exit 1" : "";
- print map { "p4 delete $_$tail\n" } sort keys %removed if %removed;
- print map { "p4 add $_$tail\n" } sort keys %added if %added;
- my @patches = sort grep { $_->{is_in} } @ls;
- my @no_outs = grep { keys %{$_->{out}} == 0 } @patches;
- warn "Warning: Some files contain no patches:",
- join("\n\t", '', map { $_->{in} } @no_outs), "\n" if @no_outs;
-
- my %patched = map { ($_, 1) } map { keys %{$_->{out}} } @patches;
- delete @patched{keys %added};
- my @patched = sort keys %patched;
- foreach(@patched) {
- next if $removed{$_};
- my $edit = ($::opt_e && !-f $_) ? "add " : "edit";
- print "p4 $edit $_$tail\n";
- }
- exit 0 unless $::opt_C;
-}
-
-
-if ($::opt_I) {
- my $n_patches = 0;
- my($in,$out);
- my %all_out;
- my @no_outs;
- foreach $in (@ls) {
- next unless $in->{is_in};
- ++$n_patches;
- my @outs = keys %{$in->{out}};
- push @no_outs, $in unless @outs;
- @all_out{@outs} = ($in->{in}) x @outs;
- }
- my @all_out = sort keys %all_out;
- my @missing = grep { ! -f $_ } @all_out;
- print "$n_patches patch files patch ".@all_out." files (".@missing." missing)\n";
- print @no_outs." patch files don't contain patches.\n" if @no_outs;
- print "(use -v to list patches which patch 'missing' files)\n"
- if (@missing || @no_outs) && !$::opt_v;
- if ($::opt_v and @no_outs) {
- print "Patch files which don't contain patches:\n";
- foreach $out (@no_outs) {
- printf " %-20s\n", $out->{in};
- }
- }
- if ($::opt_v and @missing) {
- print "Missing files:\n";
- foreach $out (@missing) {
- printf " %-20s\t", $out unless $::opt_h;
- print $all_out{$out} unless $::opt_l;
- print "\n";
- }
- }
- print "Added files: ".join(" ",sort keys %added )."\n" if %added;
- print "Removed files: ".join(" ",sort keys %removed)."\n" if %removed;
- exit 0+@missing;
-}
-
-unless ($::opt_c and $::opt_m) {
- foreach $ls (@ls) {
- next unless ($::opt_i) ? $ls->{is_out} : $ls->{is_in};
- next if $::opt_X and keys %{$ls->{out}} <= 1;
- list_files_by_patch($ls);
- }
-}
-else {
- my $c = '';
- foreach $ls (@ls) {
- next unless ($::opt_i) ? $ls->{is_out} : $ls->{is_in};
- print "\n ------ $cat_title{$ls->{category}} ------\n"
- if $ls->{category} ne $c;
- $c = $ls->{category};
- unless ($::opt_i) {
- list_files_by_patch($ls);
- }
- else {
- my $out = $ls->{in};
- print "\n$out patched by:\n";
- # find all the patches which patch $out and list them
- my @p = grep { $_->{out}->{$out} } values %ls;
- foreach $ls (@p) {
- list_files_by_patch($ls, '');
- }
- }
- }
- print "\n";
-}
-
-exit 0;
-
-
-# ---
-
-
-sub add_patched_file {
- my $ls = shift;
- my $raw_name = shift;
- my $action = shift || 1; # 1==patched, 2==deleted
-
- my $out = trim_name($raw_name);
- print "add_patched_file '$out' ($raw_name, $action)\n" if $::opt_d;
-
- $ls->{out}->{$out} = $action;
-
- warn "$out patched but not present\n" if $::opt_e && !-f $out;
-
- # do the -i inverse as well, even if we're not doing -i
- my $i = $ls{$out} ||= {
- is_out => 1,
- in => $out,
- category => $::opt_c ? categorize_files([ $out ], $::opt_v) : '',
- };
- $i->{out}->{$in} = 1;
-}
-
-sub add_deleted_file {
- my $ls = shift;
- my $raw_name = shift;
- my $out = trim_name($raw_name);
- print "add_deleted_file '$out' ($raw_name)\n" if $::opt_d;
- $removed{$out} = 1;
- #add_patched_file(@_[0,1], 2);
-}
-
-
-sub trim_name { # reduce/tidy file paths from diff lines
- my $name = shift;
- $name =~ s:\\:/:g; # adjust windows paths
- $name =~ s://:/:g; # simplify (and make win \\share into absolute path)
- if ($name eq "/dev/null") {
- # do nothing (XXX but we need a way to record deletions)
- }
- elsif (defined $::opt_p) {
- # strip on -p levels of directory prefix
- my $dc = $::opt_p;
- $name =~ s:^[^/]+/(.+)$:$1: while $dc-- > 0;
- }
- else { # try to strip off leading path to perl directory
- # if absolute path, strip down to any *perl* directory first
- $name =~ s:^/.*?perl.*?/::i;
- $name =~ s:.*(perl|maint)[-_]?5?[._]?[-_a-z0-9.+]*/::i;
- $name =~ s:^\./::;
- }
- return $name;
-}
-
-
-sub list_files_by_patch {
- my($ls, $name) = @_;
- $name = $ls->{in} unless defined $name;
- my @meta;
- if ($::opt_m) {
- my $meta;
- foreach $meta (@show_meta) {
- next unless $ls->{$meta};
- my @list = sort keys %{$ls->{$meta}};
- push @meta, sprintf "%7s: ", $meta;
- if ($meta eq 'Title') {
- @list = map { "\"$_\""; } @list;
- push @list, "#$1" if $::opt_C && $ls->{in} =~ m:\b(\w\d+)/patch$:;
- }
- elsif ($meta eq 'From') {
- # fix-up bizzare addresses from japan and ibm :-)
- foreach(@list) {
- s:\W+=?iso.*?<: <:;
- s/\d\d-\w\w\w-\d{4}\s+\d\d:\S+\s*//;
- }
- }
- elsif ($meta eq 'Msg-ID') {
- my %from; # limit long threads to one msg-id per site
- @list = map {
- $from{(/@(.*?)>/ ? $1 : $_)}++ ? () : ($_);
- } @list;
- }
- push @meta, my_wrap(""," ", join(", ",@list)."\n");
- }
- $name = "\n$name" if @meta and $name;
- }
- # don't print the header unless the file contains something interesting
- return if !@meta and !$ls->{out} and !$::opt_v;
- if ($::opt_l) { # -l = no listing, just names
- print "$ls->{in}";
- my $n = keys %{ $ls->{out} };
- print " ($n patches)" if $::opt_n and $n>1;
- print "\n";
- return;
- }
-
- # a twisty maze of little options
- my $cat = ($ls->{category} and !$::opt_m) ? "\t$ls->{category}" : "";
- print "$name$cat: " unless ($::opt_h and !$::opt_v) or !"$name$cat";
- my $sep = "\n";
- $sep = "" if @show_meta==1 && $::opt_c && $::opt_h;
- print join('', $sep, @meta) if @meta;
-
- return if $::opt_m && !$show_meta{Files};
- my @v = sort PATORDER keys %{ $ls->{out} };
- my $n = @v;
- my $v = "@v";
- print $::opt_m ? " Files: ".my_wrap(""," ",$v) : $v;
- print " ($n patches)" if $::opt_n and $n>1;
- print "\n";
-}
-
-
-sub my_wrap {
- my $txt = eval { expand(wrap(@_)) }; # die's on long lines!
- return $txt unless $@;
- return expand("@_");
-}
-
-
-
-sub categorize_files {
- my($files, $verb) = @_;
- my(%c, $refine);
-
- foreach (@$files) { # assign a score to a file path
- # the order of some of the tests is important
- $c{TEST} += 5,next if m:^t/:;
- $c{DOC} += 5,next if m:^pod/:;
- $c{UTIL} += 10,next if m:^(utils|x2p|h2pl)/:;
- $c{PORT1}+= 15,next if m:^win32:;
- $c{PORT2} += 15,next
- if m:^(cygwin|os2|plan9|qnx|vms)/:
- or m:^(hints|Porting|ext/DynaLoader)/:
- or m:^README\.:;
- $c{EXT} += 10,next
- if m:^(ext|lib/ExtUtils)/:;
- $c{LIB} += 10,next
- if m:^(lib)/:;
- $c{'CORE'} += 15,next
- if m:^[^/]+[\._]([chH]|sym|pl)$:;
- $c{BUILD} += 10,next
- if m:^[A-Z]+$: or m:^[^/]+\.SH$:
- or m:^(install|configure|configpm):i;
- print "Couldn't categorise $_\n" if $::opt_v;
- $c{OTHER} += 1;
- }
- if (keys %c > 1) { # sort to find category with highest score
- refine:
- ++$refine;
- my @c = sort { $c{$b} <=> $c{$a} || $a cmp $b } keys %c;
- my @v = map { $c{$_} } @c;
- if (@v > 1 and $refine <= 1 and "@v" =~ /^(\d) \1/
- and $c[0] =~ m/^(DOC|TESTS|OTHER)/) { # rare
- print "Tie, promoting $c[1] over $c[0]\n" if $::opt_d;
- ++$c{$c[1]};
- goto refine;
- }
- print " ".@$files." patches: ", join(", ", map { "$_: $c{$_}" } @c),".\n"
- if $verb;
- return $c[0] || 'OTHER';
- }
- else {
- my($c, $v) = %c;
- $c ||= 'UNKNOWN'; $v ||= 0;
- print " ".@$files." patches: $c: $v\n" if $verb;
- return $c;
- }
-}
-
-
-sub PATORDER { # PATORDER sort by Chip Salzenberg
- my ($i, $j);
-
- $i = ($a =~ m#^[A-Z]+$#);
- $j = ($b =~ m#^[A-Z]+$#);
- return $j - $i if $i != $j;
-
- $i = ($a =~ m#configure|hint#i) || ($a =~ m#[S_]H$#);
- $j = ($b =~ m#configure|hint#i) || ($b =~ m#[S_]H$#);
- return $j - $i if $i != $j;
-
- $i = ($a =~ m#\.pod$#);
- $j = ($b =~ m#\.pod$#);
- return $j - $i if $i != $j;
-
- $i = ($a =~ m#include/#);
- $j = ($b =~ m#include/#);
- return $j - $i if $i != $j;
-
- if ((($i = $a) =~ s#/+[^/]*$##)
- && (($j = $b) =~ s#/+[^/]*$##)) {
- return $i cmp $j if $i ne $j;
- }
-
- $i = ($a =~ m#\.h$#);
- $j = ($b =~ m#\.h$#);
- return $j - $i if $i != $j;
-
- return $a cmp $b;
-}
-
diff --git a/contrib/perl5/Porting/pumpkin.pod b/contrib/perl5/Porting/pumpkin.pod
deleted file mode 100644
index 3bc9d09..0000000
--- a/contrib/perl5/Porting/pumpkin.pod
+++ /dev/null
@@ -1,1385 +0,0 @@
-=head1 NAME
-
-Pumpkin - Notes on handling the Perl Patch Pumpkin
-
-=head1 SYNOPSIS
-
-There is no simple synopsis, yet.
-
-=head1 DESCRIPTION
-
-This document attempts to begin to describe some of the considerations
-involved in patching, porting, and maintaining perl.
-
-This document is still under construction, and still subject to
-significant changes. Still, I hope parts of it will be useful,
-so I'm releasing it even though it's not done.
-
-For the most part, it's a collection of anecdotal information that
-already assumes some familiarity with the Perl sources. I really need
-an introductory section that describes the organization of the sources
-and all the various auxiliary files that are part of the distribution.
-
-=head1 Where Do I Get Perl Sources and Related Material?
-
-The Comprehensive Perl Archive Network (or CPAN) is the place to go.
-There are many mirrors, but the easiest thing to use is probably
-http://www.perl.com/CPAN/README.html , which automatically points you to a
-mirror site "close" to you.
-
-=head2 Perl5-porters mailing list
-
-The mailing list perl5-porters@perl.org
-is the main group working with the development of perl. If you're
-interested in all the latest developments, you should definitely
-subscribe. The list is high volume, but generally has a
-fairly low noise level.
-
-Subscribe by sending the message (in the body of your letter)
-
- subscribe perl5-porters
-
-to perl5-porters-request@perl.org .
-
-Archives of the list are held at:
-
- http://www.rosat.mpe-garching.mpg.de/mailing-lists/perl-porters/
-
-=head1 How are Perl Releases Numbered?
-
-Beginning with v5.6.0, even versions will stand for maintenance releases
-and odd versions for development releases, i.e., v5.6.x for maintenance
-releases, and v5.7.x for development releases. Before v5.6.0, subversions
-_01 through _49 were reserved for bug-fix maintenance releases, and
-subversions _50 through _99 for unstable development versions.
-
-For example, in v5.6.1, the revision number is 5, the version is 6,
-and 1 is the subversion.
-
-For compatibility with the older numbering scheme the composite floating
-point version number continues to be available as the magic variable $],
-and amounts to C<$revision + $version/1000 + $subversion/100000>. This
-can still be used in comparisons.
-
- print "You've got an old perl\n" if $] < 5.005_03;
-
-In addition, the version is also available as a string in $^V.
-
- print "You've got a new perl\n" if $^V and $^V ge v5.6.0;
-
-You can also require particular version (or later) with:
-
- use 5.006;
-
-or using the new syntax available only from v5.6 onward:
-
- use v5.6.0;
-
-At some point in the future, we may need to decide what to call the
-next big revision. In the .package file used by metaconfig to
-generate Configure, there are two variables that might be relevant:
-$baserev=5 and $package=perl5.
-
-Perl releases produced by the members of perl5-porters are usually
-available on CPAN in the F<src/5.0/maint> and F<src/5.0/devel>
-directories.
-
-=head2 Maintenance and Development Subversions
-
-The first rule of maintenance work is "First, do no harm."
-
-Trial releases of bug-fix maintenance releases are announced on
-perl5-porters. Trial releases use the new subversion number (to avoid
-testers installing it over the previous release) and include a 'local
-patch' entry in patchlevel.h. The distribution file contains the
-string C<MAINT_TRIAL> to make clear that the file is not meant for
-public consumption.
-
-In general, the names of official distribution files for the public
-always match the regular expression:
-
- ^perl\d+\.(\d+)\.\d+(-MAINT_TRIAL_\d+)\.tar\.gz$
-
-C<$1> in the pattern is always an even number for maintenance
-versions, and odd for developer releases.
-
-In the past it has been observed that pumkings tend to invent new
-naming conventions on the fly. If you are a pumpking, before you
-invent a new name for any of the three types of perl distributions,
-please inform the guys from the CPAN who are doing indexing and
-provide the trees of symlinks and the like. They will have to know
-I<in advance> what you decide.
-
-=head2 Why is it called the patch pumpkin?
-
-Chip Salzenberg gets credit for that, with a nod to his cow orker,
-David Croy. We had passed around various names (baton, token, hot
-potato) but none caught on. Then, Chip asked:
-
-[begin quote]
-
- Who has the patch pumpkin?
-
-To explain: David Croy once told me once that at a previous job,
-there was one tape drive and multiple systems that used it for backups.
-But instead of some high-tech exclusion software, they used a low-tech
-method to prevent multiple simultaneous backups: a stuffed pumpkin.
-No one was allowed to make backups unless they had the "backup pumpkin".
-
-[end quote]
-
-The name has stuck.
-
-=head1 Philosophical Issues in Patching and Porting Perl
-
-There are no absolute rules, but there are some general guidelines I
-have tried to follow as I apply patches to the perl sources.
-(This section is still under construction.)
-
-=head2 Solve problems as generally as possible
-
-Never implement a specific restricted solution to a problem when you
-can solve the same problem in a more general, flexible way.
-
-For example, for dynamic loading to work on some SVR4 systems, we had
-to build a shared libperl.so library. In order to build "FAT" binaries
-on NeXT 4.0 systems, we had to build a special libperl library. Rather
-than continuing to build a contorted nest of special cases, I
-generalized the process of building libperl so that NeXT and SVR4 users
-could still get their work done, but others could build a shared
-libperl if they wanted to as well.
-
-Contain your changes carefully. Assume nothing about other operating
-systems, not even closely related ones. Your changes must not affect
-other platforms.
-
-Spy shamelessly on how similar patching or porting issues have been
-settled elsewhere.
-
-If feasible, try to keep filenames 8.3-compliant to humor those poor
-souls that get joy from running Perl under such dire limitations.
-
-=head2 Seek consensus on major changes
-
-If you are making big changes, don't do it in secret. Discuss the
-ideas in advance on perl5-porters.
-
-=head2 Keep the documentation up-to-date
-
-If your changes may affect how users use perl, then check to be sure
-that the documentation is in sync with your changes. Be sure to
-check all the files F<pod/*.pod> and also the F<INSTALL> document.
-
-Consider writing the appropriate documentation first and then
-implementing your change to correspond to the documentation.
-
-=head2 Avoid machine-specific #ifdef's
-
-To the extent reasonable, try to avoid machine-specific #ifdef's in
-the sources. Instead, use feature-specific #ifdef's. The reason is
-that the machine-specific #ifdef's may not be valid across major
-releases of the operating system. Further, the feature-specific tests
-may help out folks on another platform who have the same problem.
-
-=head2 Machine-specific files
-
-=over 4
-
-=item source code
-
-If you have many machine-specific #defines or #includes, consider
-creating an "osish.h" (os2ish.h, vmsish.h, and so on) and including
-that in perl.h. If you have several machine-specific files (function
-emulations, function stubs, build utility wrappers) you may create a
-separate subdirectory (djgpp, win32) and put the files in there.
-Remember to update C<MANIFEST> when you add files.
-
-If your system supports dynamic loading but none of the existing
-methods at F<ext/DynaLoader/dl_*.xs> work for you, you must write
-a new one. Study the existing ones to see what kind of interface
-you must supply.
-
-=item build hints
-
-There are two kinds of hints: hints for building Perl and hints for
-extensions. The former live in the C<hints> subdirectory, the latter
-in C<ext/*/hints> subdirectories.
-
-The top level hints are Bourne-shell scripts that set, modify and
-unset appropriate Configure variables, based on the Configure command
-line options and possibly existing config.sh and Policy.sh files from
-previous Configure runs.
-
-The extension hints are written in Perl (by the time they are used
-miniperl has been built) and control the building of their respective
-extensions. They can be used to for example manipulate compilation
-and linking flags.
-
-=item build and installation Makefiles, scripts, and so forth
-
-Sometimes you will also need to tweak the Perl build and installation
-procedure itself, like for example F<Makefile.SH> and F<installperl>.
-Tread very carefully, even more than usual. Contain your changes
-with utmost care.
-
-=item test suite
-
-Many of the tests in C<t> subdirectory assume machine-specific things
-like existence of certain functions, something about filesystem
-semantics, certain external utilities and their error messages. Use
-the C<$^O> and the C<Config> module (which contains the results of the
-Configure run, in effect the C<config.sh> converted to Perl) to either
-skip (preferably not) or customize (preferable) the tests for your
-platform.
-
-=item modules
-
-Certain standard modules may need updating if your operating system
-sports for example a native filesystem naming. You may want to update
-some or all of the modules File::Basename, File::Spec, File::Path, and
-File::Copy to become aware of your native filesystem syntax and
-peculiarities.
-
-=item documentation
-
-If your operating system comes from outside UNIX you almost certainly
-will have differences in the available operating system functionality
-(missing system calls, different semantics, whatever). Please
-document these at F<pod/perlport.pod>. If your operating system is
-the first B<not> to have a system call also update the list of
-"portability-bewares" at the beginning of F<pod/perlfunc.pod>.
-
-A file called F<README.youros> at the top level that explains things
-like how to install perl at this platform, where to get any possibly
-required additional software, and for example what test suite errors
-to expect, is nice too. Such files are in the process of being written
-in pod format and will eventually be renamed F<INSTALL.youros>.
-
-You may also want to write a separate F<.pod> file for your operating
-system to tell about existing mailing lists, os-specific modules,
-documentation, whatever. Please name these along the lines of
-F<perl>I<youros>.pod. [unfinished: where to put this file (the pod/
-subdirectory, of course: but more importantly, which/what index files
-should be updated?)]
-
-=back
-
-=head2 Allow for lots of testing
-
-We should never release a main version without testing it as a
-subversion first.
-
-=head2 Test popular applications and modules.
-
-We should never release a main version without testing whether or not
-it breaks various popular modules and applications. A partial list of
-such things would include majordomo, metaconfig, apache, Tk, CGI,
-libnet, and libwww, to name just a few. Of course it's quite possible
-that some of those things will be just plain broken and need to be fixed,
-but, in general, we ought to try to avoid breaking widely-installed
-things.
-
-=head2 Automated generation of derivative files
-
-The F<embed.h>, F<keywords.h>, F<opcode.h>, and F<perltoc.pod> files
-are all automatically generated by perl scripts. In general, don't
-patch these directly; patch the data files instead.
-
-F<Configure> and F<config_h.SH> are also automatically generated by
-B<metaconfig>. In general, you should patch the metaconfig units
-instead of patching these files directly. However, very minor changes
-to F<Configure> may be made in between major sync-ups with the
-metaconfig units, which tends to be complicated operations. But be
-careful, this can quickly spiral out of control. Running metaconfig
-is not really hard.
-
-Also F<Makefile> is automatically produced from F<Makefile.SH>.
-In general, look out for all F<*.SH> files.
-
-Finally, the sample files in the F<Porting/> subdirectory are
-generated automatically by the script F<U/mksample> included
-with the metaconfig units. See L<"run metaconfig"> below for
-information on obtaining the metaconfig units.
-
-=head1 How to Make a Distribution
-
-There really ought to be a 'make dist' target, but there isn't.
-The 'dist' suite of tools also contains a number of tools that I haven't
-learned how to use yet. Some of them may make this all a bit easier.
-
-Here are the steps I go through to prepare a patch & distribution.
-
-Lots of it could doubtless be automated but isn't. The Porting/makerel
-(make release) perl script does now help automate some parts of it.
-
-=head2 Announce your intentions
-
-First, you should volunteer out loud to take the patch pumpkin. It's
-generally counter-productive to have multiple people working in secret
-on the same thing.
-
-At the same time, announce what you plan to do with the patch pumpkin,
-to allow folks a chance to object or suggest alternatives, or do it for
-you. Naturally, the patch pumpkin holder ought to incorporate various
-bug fixes and documentation improvements that are posted while he or
-she has the pumpkin, but there might also be larger issues at stake.
-
-One of the precepts of the subversion idea is that we shouldn't give
-the patch pumpkin to anyone unless we have some idea what he or she
-is going to do with it.
-
-=head2 refresh pod/perltoc.pod
-
-Presumably, you have done a full C<make> in your working source
-directory. Before you C<make spotless> (if you do), and if you have
-changed any documentation in any module or pod file, change to the
-F<pod> directory and run C<make toc>.
-
-=head2 run installhtml to check the validity of the pod files
-
-=head2 update patchlevel.h
-
-Don't be shy about using the subversion number, even for a relatively
-modest patch. We've never even come close to using all 99 subversions,
-and it's better to have a distinctive number for your patch. If you
-need feedback on your patch, go ahead and issue it and promise to
-incorporate that feedback quickly (e.g. within 1 week) and send out a
-second patch.
-
-=head2 run metaconfig
-
-If you need to make changes to Configure or config_h.SH, it may be best to
-change the appropriate metaconfig units instead, and regenerate Configure.
-
- metaconfig -m
-
-will regenerate Configure and config_h.SH. Much more information
-on obtaining and running metaconfig is in the F<U/README> file
-that comes with Perl's metaconfig units. Perl's metaconfig units
-should be available on CPAN. A set of units that will work with
-perl5.005 is in the file F<mc_units-5.005_00-01.tar.gz> under
-http://www.perl.com/CPAN/authors/id/ANDYD/ . The mc_units tar file
-should be unpacked in your main perl source directory. Note: those
-units were for use with 5.005. There may have been changes since then.
-Check for later versions or contact perl5-porters@perl.org to obtain a
-pointer to the current version.
-
-Alternatively, do consider if the F<*ish.h> files might be a better
-place for your changes.
-
-=head2 MANIFEST
-
-Make sure the MANIFEST is up-to-date. You can use dist's B<manicheck>
-program for this. You can also use
-
- perl -w -MExtUtils::Manifest=fullcheck -e fullcheck
-
-Both commands will also list extra files in the directory that are not
-listed in MANIFEST.
-
-The MANIFEST is normally sorted.
-
-If you are using metaconfig to regenerate Configure, then you should note
-that metaconfig actually uses MANIFEST.new, so you want to be sure
-MANIFEST.new is up-to-date too. I haven't found the MANIFEST/MANIFEST.new
-distinction particularly useful, but that's probably because I still haven't
-learned how to use the full suite of tools in the dist distribution.
-
-=head2 Check permissions
-
-All the tests in the t/ directory ought to be executable. The
-main makefile used to do a 'chmod t/*/*.t', but that resulted in
-a self-modifying distribution--something some users would strongly
-prefer to avoid. The F<t/TEST> script will check for this
-and do the chmod if needed, but the tests still ought to be
-executable.
-
-In all, the following files should probably be executable:
-
- Configure
- configpm
- configure.gnu
- embed.pl
- installperl
- installman
- keywords.pl
- myconfig
- opcode.pl
- perly.fixer
- t/TEST
- t/*/*.t
- *.SH
- vms/ext/Stdio/test.pl
- vms/ext/filespec.t
- x2p/*.SH
-
-Other things ought to be readable, at least :-).
-
-Probably, the permissions for the files could be encoded in MANIFEST
-somehow, but I'm reluctant to change MANIFEST itself because that
-could break old scripts that use MANIFEST.
-
-I seem to recall that some SVR3 systems kept some sort of file that listed
-permissions for system files; something like that might be appropriate.
-
-=head2 Run Configure
-
-This will build a config.sh and config.h. You can skip this if you haven't
-changed Configure or config_h.SH at all. I use the following command
-
- sh Configure -Dprefix=/opt/perl -Doptimize=-O -Dusethreads \
- -Dcf_by='yourname' \
- -Dcf_email='yourname@yourhost.yourplace.com' \
- -Dperladmin='yourname@yourhost.yourplace.com' \
- -Dmydomain='.yourplace.com' \
- -Dmyhostname='yourhost' \
- -des
-
-=head2 Update Porting/config.sh and Porting/config_H
-
-[XXX
-This section needs revision. We're currently working on easing
-the task of keeping the vms, win32, and plan9 config.sh info
-up-to-date. The plan is to use keep up-to-date 'canned' config.sh
-files in the appropriate subdirectories and then generate 'canned'
-config.h files for vms, win32, etc. from the generic config.sh file.
-This is to ease maintenance. When Configure gets updated, the parts
-sometimes get scrambled around, and the changes in config_H can
-sometimes be very hard to follow. config.sh, on the other hand, can
-safely be sorted, so it's easy to track (typically very small) changes
-to config.sh and then propoagate them to a canned 'config.h' by any
-number of means, including a perl script in win32/ or carrying
-config.sh and config_h.SH to a Unix system and running sh
-config_h.SH.) Vms uses configure.com to generate its own config.sh
-and config.h. If you want to add a new variable to config.sh check
-with vms folk how to add it to configure.com too.
-XXX]
-
-The Porting/config.sh and Porting/config_H files are provided to
-help those folks who can't run Configure. It is important to keep
-them up-to-date. If you have changed config_h.SH, those changes must
-be reflected in config_H as well. (The name config_H was chosen to
-distinguish the file from config.h even on case-insensitive file systems.)
-Simply edit the existing config_H file; keep the first few explanatory
-lines and then copy your new config.h below.
-
-It may also be necessary to update win32/config.?c, and
-plan9/config.plan9, though you should be quite careful in doing so if
-you are not familiar with those systems. You might want to issue your
-patch with a promise to quickly issue a follow-up that handles those
-directories.
-
-=head2 make run_byacc
-
-If you have byacc-1.8.2 (available from CPAN), and if there have been
-changes to F<perly.y>, you can regenerate the F<perly.c> file. The
-run_byacc makefile target does this by running byacc and then applying
-some patches so that byacc dynamically allocates space, rather than
-having fixed limits. This patch is handled by the F<perly.fixer>
-script. Depending on the nature of the changes to F<perly.y>, you may
-or may not have to hand-edit the patch to apply correctly. If you do,
-you should include the edited patch in the new distribution. If you
-have byacc-1.9, the patch won't apply cleanly. Changes to the printf
-output statements mean the patch won't apply cleanly. Long ago I
-started to fix F<perly.fixer> to detect this, but I never completed the
-task.
-
-If C<perly.c> or C<perly.h> changes, make sure you run C<perl vms/vms_yfix.pl>
-to update the corresponding VMS files. This could be taken care of by
-the regen_all target in the Unix Makefile. See also
-L<VMS-specific updates>.
-
-Some additional notes from Larry on this:
-
-Don't forget to regenerate perly_c.diff.
-
- byacc -d perly.y
- mv y.tab.c perly.c
- patch perly.c <perly_c.diff
- # manually apply any failed hunks
- diff -c2 perly.c.orig perly.c >perly_c.diff
-
-One chunk of lines that often fails begins with
-
- #line 29 "perly.y"
-
-and ends one line before
-
- #define YYERRCODE 256
-
-This only happens when you add or remove a token type. I suppose this
-could be automated, but it doesn't happen very often nowadays.
-
-Larry
-
-=head2 make regen_all
-
-This target takes care of the PERLYVMS, regen_headers, and regen_pods
-targets.
-
-=head2 make regen_headers
-
-The F<embed.h>, F<keywords.h>, and F<opcode.h> files are all automatically
-generated by perl scripts. Since the user isn't guaranteed to have a
-working perl, we can't require the user to generate them. Hence you have
-to, if you're making a distribution.
-
-I used to include rules like the following in the makefile:
-
- # The following three header files are generated automatically
- # The correct versions should be already supplied with the perl kit,
- # in case you don't have perl or 'sh' available.
- # The - is to ignore error return codes in case you have the source
- # installed read-only or you don't have perl yet.
- keywords.h: keywords.pl
- @echo "Don't worry if this fails."
- - perl keywords.pl
-
-
-However, I got B<lots> of mail consisting of people worrying because the
-command failed. I eventually decided that I would save myself time
-and effort by manually running C<make regen_headers> myself rather
-than answering all the questions and complaints about the failing
-command.
-
-=head2 make regen_pods
-
-Will run `make regen_pods` in the pod directory for indexing.
-
-=head2 global.sym, interp.sym and perlio.sym
-
-Make sure these files are up-to-date. Read the comments in these
-files and in perl_exp.SH to see what to do.
-
-=head2 Binary compatibility
-
-If you do change F<global.sym> or F<interp.sym>, think carefully about
-what you are doing. To the extent reasonable, we'd like to maintain
-source and binary compatibility with older releases of perl. That way,
-extensions built under one version of perl will continue to work with
-new versions of perl.
-
-Of course, some incompatible changes may well be necessary. I'm just
-suggesting that we not make any such changes without thinking carefully
-about them first. If possible, we should provide
-backwards-compatibility stubs. There's a lot of XS code out there.
-Let's not force people to keep changing it.
-
-=head2 Changes
-
-Be sure to update the F<Changes> file. Try to include both an overall
-summary as well as detailed descriptions of the changes. Your
-audience will include other developers and users, so describe
-user-visible changes (if any) in terms they will understand, not in
-code like "initialize foo variable in bar function".
-
-There are differing opinions on whether the detailed descriptions
-ought to go in the Changes file or whether they ought to be available
-separately in the patch file (or both). There is no disagreement that
-detailed descriptions ought to be easily available somewhere.
-
-=head2 Todo
-
-The F<Todo> file contains a roughly-catgorized unordered list of
-aspects of Perl that could use enhancement, features that could be
-added, areas that could be cleaned up, and so on. During your term as
-pumpkin-holder, you will probably address some of these issues, and
-perhaps identify others which, while you decide not to address them
-this time around, may be tackled in the future. Update the file
-reflect the situation as it stands when you hand over the pumpkin.
-
-You might like, early in your pumpkin-holding career, to see if you
-can find champions for partiticular issues on the to-do list: an issue
-owned is an issue more likely to be resolved.
-
-There are also some more porting-specific L<Todo> items later in this
-file.
-
-=head2 OS/2-specific updates
-
-In the os2 directory is F<diff.configure>, a set of OS/2-specific
-diffs against B<Configure>. If you make changes to Configure, you may
-want to consider regenerating this diff file to save trouble for the
-OS/2 maintainer.
-
-You can also consider the OS/2 diffs as reminders of portability
-things that need to be fixed in Configure.
-
-=head2 VMS-specific updates
-
-If you have changed F<perly.y> or F<perly.c>, then you most probably want
-to update F<vms/perly_{h,c}.vms> by running C<perl vms/vms_yfix.pl>, or
-by running `make regen_all` which will run that script for you.
-
-The Perl revision number appears as "perl5" in configure.com.
-It is courteous to update that if necessary.
-
-=head2 Making the new distribution
-
-Suppose, for example, that you want to make version 5.004_08. Then you can
-do something like the following
-
- mkdir ../perl5.004_08
- awk '{print $1}' MANIFEST | cpio -pdm ../perl5.004_08
- cd ../
- tar cf perl5.004_08.tar perl5.004_08
- gzip --best perl5.004_08.tar
-
-These steps, with extra checks, are automated by the Porting/makerel
-script.
-
-=head2 Making a new patch
-
-I find the F<makepatch> utility quite handy for making patches.
-You can obtain it from any CPAN archive under
-http://www.perl.com/CPAN/authors/Johan_Vromans/ . There are a couple
-of differences between my version and the standard one. I have mine do
-a
-
- # Print a reassuring "End of Patch" note so people won't
- # wonder if their mailer truncated patches.
- print "\n\nEnd of Patch.\n";
-
-at the end. That's because I used to get questions from people asking
-if their mail was truncated.
-
-It also writes Index: lines which include the new directory prefix
-(change Index: print, approx line 294 or 310 depending on the version,
-to read: print PATCH ("Index: $newdir$new\n");). That helps patches
-work with more POSIX conformant patch programs.
-
-Here's how I generate a new patch. I'll use the hypothetical
-5.004_07 to 5.004_08 patch as an example.
-
- # unpack perl5.004_07/
- gzip -d -c perl5.004_07.tar.gz | tar -xof -
- # unpack perl5.004_08/
- gzip -d -c perl5.004_08.tar.gz | tar -xof -
- makepatch perl5.004_07 perl5.004_08 > perl5.004_08.pat
-
-Makepatch will automatically generate appropriate B<rm> commands to remove
-deleted files. Unfortunately, it will not correctly set permissions
-for newly created files, so you may have to do so manually. For example,
-patch 5.003_04 created a new test F<t/op/gv.t> which needs to be executable,
-so at the top of the patch, I inserted the following lines:
-
- # Make a new test
- touch t/op/gv.t
- chmod +x t/opt/gv.t
-
-Now, of course, my patch is now wrong because makepatch didn't know I
-was going to do that command, and it patched against /dev/null.
-
-So, what I do is sort out all such shell commands that need to be in the
-patch (including possible mv-ing of files, if needed) and put that in the
-shell commands at the top of the patch. Next, I delete all the patch parts
-of perl5.004_08.pat, leaving just the shell commands. Then, I do the
-following:
-
- cd perl5.004_07
- sh ../perl5.004_08.pat
- cd ..
- makepatch perl5.004_07 perl5.004_08 >> perl5.004_08.pat
-
-(Note the append to preserve my shell commands.)
-Now, my patch will line up with what the end users are going to do.
-
-=head2 Testing your patch
-
-It seems obvious, but be sure to test your patch. That is, verify that
-it produces exactly the same thing as your full distribution.
-
- rm -rf perl5.004_07
- gzip -d -c perl5.004_07.tar.gz | tar -xf -
- cd perl5.004_07
- sh ../perl5.004_08.pat
- patch -p1 -N < ../perl5.004_08.pat
- cd ..
- gdiff -r perl5.004_07 perl5.004_08
-
-where B<gdiff> is GNU diff. Other diff's may also do recursive checking.
-
-=head2 More testing
-
-Again, it's obvious, but you should test your new version as widely as you
-can. You can be sure you'll hear about it quickly if your version doesn't
-work on both ANSI and pre-ANSI compilers, and on common systems such as
-SunOS 4.1.[34], Solaris, and Linux.
-
-If your changes include conditional code, try to test the different
-branches as thoroughly as you can. For example, if your system
-supports dynamic loading, you can also test static loading with
-
- sh Configure -Uusedl
-
-You can also hand-tweak your config.h to try out different #ifdef
-branches.
-
-=head2 Other tests
-
-=over 4
-
-=item CHECK_FORMAT
-
-To test the correct use of printf-style arguments, C<Configure> with
-S<-Dccflags='-DCHECK_FORMAT -Wformat'> and run C<make>. The compiler
-will produce warning of incorrect use of format arguments. CHECK_FORMAT
-changes perl-defined formats to common formats, so DO NOT USE the executable
-produced by this process.
-
-A more accurate approach is the following commands:
-
- sh Configure -des -Dccflags=-Wformat ...
- make miniperl # without -DCHECK_FORMAT
- perl -i.orig -pwe 's/-Wformat/-DCHECK_FORMAT $&/' config.sh
- sh Configure -S
- make >& make.log # build from correct miniperl
- make clean
- make miniperl >& mini.log # build miniperl with -DCHECK_FORMAT
- perl -nwe 'print if /^\S+:/ and not /^make\b/' mini.log make.log
- make clean
-
-(-Wformat support by Robin Barker.)
-
-=back
-
-=head1 Running Purify
-
-Purify is a commercial tool that is helpful in identifying memory
-overruns, wild pointers, memory leaks and other such badness. Perl
-must be compiled in a specific way for optimal testing with Purify.
-
-Use the following commands to test perl with Purify:
-
- sh Configure -des -Doptimize=-g -Uusemymalloc -Dusemultiplicity \
- -Accflags=-DPURIFY
- setenv PURIFYOPTIONS "-chain-length=25"
- make all pureperl
- cd t
- ln -s ../pureperl perl
- setenv PERL_DESTRUCT_LEVEL 5
- ./perl TEST
-
-Disabling Perl's malloc allows Purify to monitor allocations and leaks
-more closely; using Perl's malloc will make Purify report most leaks
-in the "potential" leaks category. Enabling the multiplicity option
-allows perl to clean up thoroughly when the interpreter shuts down, which
-reduces the number of bogus leak reports from Purify. The -DPURIFY
-enables any Purify-specific debugging code in the sources.
-
-Purify outputs messages in "Viewer" windows by default. If you don't have
-a windowing environment or if you simply want the Purify output to
-unobtrusively go to a log file instead of to the interactive window,
-use the following options instead:
-
- setenv PURIFYOPTIONS "-chain-length=25 -windows=no -log-file=perl.log \
- -append-logfile=yes"
-
-The only currently known leaks happen when there are compile-time errors
-within eval or require. (Fixing these is non-trivial, unfortunately, but
-they must be fixed eventually.)
-
-=head1 Common Gotcha's
-
-=over 4
-
-=item #elif
-
-The '#elif' preprocessor directive is not understood on all systems.
-Specifically, I know that Pyramids don't understand it. Thus instead of the
-simple
-
- #if defined(I_FOO)
- # include <foo.h>
- #elif defined(I_BAR)
- # include <bar.h>
- #else
- # include <fubar.h>
- #endif
-
-You have to do the more Byzantine
-
- #if defined(I_FOO)
- # include <foo.h>
- #else
- # if defined(I_BAR)
- # include <bar.h>
- # else
- # include <fubar.h>
- # endif
- #endif
-
-Incidentally, whitespace between the leading '#' and the preprocessor
-command is not guaranteed, but is very portable and you may use it freely.
-I think it makes things a bit more readable, especially once things get
-rather deeply nested. I also think that things should almost never get
-too deeply nested, so it ought to be a moot point :-)
-
-=item Probably Prefer POSIX
-
-It's often the case that you'll need to choose whether to do
-something the BSD-ish way or the POSIX-ish way. It's usually not
-a big problem when the two systems use different names for similar
-functions, such as memcmp() and bcmp(). The perl.h header file
-handles these by appropriate #defines, selecting the POSIX mem*()
-functions if available, but falling back on the b*() functions, if
-need be.
-
-More serious is the case where some brilliant person decided to
-use the same function name but give it a different meaning or
-calling sequence :-). getpgrp() and setpgrp() come to mind.
-These are a real problem on systems that aim for conformance to
-one standard (e.g. POSIX), but still try to support the other way
-of doing things (e.g. BSD). My general advice (still not really
-implemented in the source) is to do something like the following.
-Suppose there are two alternative versions, fooPOSIX() and
-fooBSD().
-
- #ifdef HAS_FOOPOSIX
- /* use fooPOSIX(); */
- #else
- # ifdef HAS_FOOBSD
- /* try to emulate fooPOSIX() with fooBSD();
- perhaps with the following: */
- # define fooPOSIX fooBSD
- # else
- # /* Uh, oh. We have to supply our own. */
- # define fooPOSIX Perl_fooPOSIX
- # endif
- #endif
-
-=item Think positively
-
-If you need to add an #ifdef test, it is usually easier to follow if you
-think positively, e.g.
-
- #ifdef HAS_NEATO_FEATURE
- /* use neato feature */
- #else
- /* use some fallback mechanism */
- #endif
-
-rather than the more impenetrable
-
- #ifndef MISSING_NEATO_FEATURE
- /* Not missing it, so we must have it, so use it */
- #else
- /* Are missing it, so fall back on something else. */
- #endif
-
-Of course for this toy example, there's not much difference. But when
-the #ifdef's start spanning a couple of screen fulls, and the #else's
-are marked something like
-
- #else /* !MISSING_NEATO_FEATURE */
-
-I find it easy to get lost.
-
-=item Providing Missing Functions -- Problem
-
-Not all systems have all the neat functions you might want or need, so
-you might decide to be helpful and provide an emulation. This is
-sound in theory and very kind of you, but please be careful about what
-you name the function. Let me use the C<pause()> function as an
-illustration.
-
-Perl5.003 has the following in F<perl.h>
-
- #ifndef HAS_PAUSE
- #define pause() sleep((32767<<16)+32767)
- #endif
-
-Configure sets HAS_PAUSE if the system has the pause() function, so
-this #define only kicks in if the pause() function is missing.
-Nice idea, right?
-
-Unfortunately, some systems apparently have a prototype for pause()
-in F<unistd.h>, but don't actually have the function in the library.
-(Or maybe they do have it in a library we're not using.)
-
-Thus, the compiler sees something like
-
- extern int pause(void);
- /* . . . */
- #define pause() sleep((32767<<16)+32767)
-
-and dies with an error message. (Some compilers don't mind this;
-others apparently do.)
-
-To work around this, 5.003_03 and later have the following in perl.h:
-
- /* Some unistd.h's give a prototype for pause() even though
- HAS_PAUSE ends up undefined. This causes the #define
- below to be rejected by the compiler. Sigh.
- */
- #ifdef HAS_PAUSE
- # define Pause pause
- #else
- # define Pause() sleep((32767<<16)+32767)
- #endif
-
-This works.
-
-The curious reader may wonder why I didn't do the following in
-F<util.c> instead:
-
- #ifndef HAS_PAUSE
- void pause()
- {
- sleep((32767<<16)+32767);
- }
- #endif
-
-That is, since the function is missing, just provide it.
-Then things would probably be been alright, it would seem.
-
-Well, almost. It could be made to work. The problem arises from the
-conflicting needs of dynamic loading and namespace protection.
-
-For dynamic loading to work on AIX (and VMS) we need to provide a list
-of symbols to be exported. This is done by the script F<perl_exp.SH>,
-which reads F<global.sym> and F<interp.sym>. Thus, the C<pause>
-symbol would have to be added to F<global.sym> So far, so good.
-
-On the other hand, one of the goals of Perl5 is to make it easy to
-either extend or embed perl and link it with other libraries. This
-means we have to be careful to keep the visible namespace "clean".
-That is, we don't want perl's global variables to conflict with
-those in the other application library. Although this work is still
-in progress, the way it is currently done is via the F<embed.h> file.
-This file is built from the F<global.sym> and F<interp.sym> files,
-since those files already list the globally visible symbols. If we
-had added C<pause> to global.sym, then F<embed.h> would contain the
-line
-
- #define pause Perl_pause
-
-and calls to C<pause> in the perl sources would now point to
-C<Perl_pause>. Now, when B<ld> is run to build the F<perl> executable,
-it will go looking for C<perl_pause>, which probably won't exist in any
-of the standard libraries. Thus the build of perl will fail.
-
-Those systems where C<HAS_PAUSE> is not defined would be ok, however,
-since they would get a C<Perl_pause> function in util.c. The rest of
-the world would be in trouble.
-
-And yes, this scenario has happened. On SCO, the function C<chsize>
-is available. (I think it's in F<-lx>, the Xenix compatibility
-library.) Since the perl4 days (and possibly before), Perl has
-included a C<chsize> function that gets called something akin to
-
- #ifndef HAS_CHSIZE
- I32 chsize(fd, length)
- /* . . . */
- #endif
-
-When 5.003 added
-
- #define chsize Perl_chsize
-
-to F<embed.h>, the compile started failing on SCO systems.
-
-The "fix" is to give the function a different name. The one
-implemented in 5.003_05 isn't optimal, but here's what was done:
-
- #ifdef HAS_CHSIZE
- # ifdef my_chsize /* Probably #defined to Perl_my_chsize in embed.h */
- # undef my_chsize
- # endif
- # define my_chsize chsize
- #endif
-
-My explanatory comment in patch 5.003_05 said:
-
- Undef and then re-define my_chsize from Perl_my_chsize to
- just plain chsize if this system HAS_CHSIZE. This probably only
- applies to SCO. This shows the perils of having internal
- functions with the same name as external library functions :-).
-
-Now, we can safely put C<my_chsize> in F<global.sym>, export it, and
-hide it with F<embed.h>.
-
-To be consistent with what I did for C<pause>, I probably should have
-called the new function C<Chsize>, rather than C<my_chsize>.
-However, the perl sources are quite inconsistent on this (Consider
-New, Mymalloc, and Myremalloc, to name just a few.)
-
-There is a problem with this fix, however, in that C<Perl_chsize>
-was available as a F<libperl.a> library function in 5.003, but it
-isn't available any more (as of 5.003_07). This means that we've
-broken binary compatibility. This is not good.
-
-=item Providing missing functions -- some ideas
-
-We currently don't have a standard way of handling such missing
-function names. Right now, I'm effectively thinking aloud about a
-solution. Some day, I'll try to formally propose a solution.
-
-Part of the problem is that we want to have some functions listed as
-exported but not have their names mangled by embed.h or possibly
-conflict with names in standard system headers. We actually already
-have such a list at the end of F<perl_exp.SH> (though that list is
-out-of-date):
-
- # extra globals not included above.
- cat <<END >> perl.exp
- perl_init_ext
- perl_init_fold
- perl_init_i18nl14n
- perl_alloc
- perl_construct
- perl_destruct
- perl_free
- perl_parse
- perl_run
- perl_get_sv
- perl_get_av
- perl_get_hv
- perl_get_cv
- perl_call_argv
- perl_call_pv
- perl_call_method
- perl_call_sv
- perl_requirepv
- safecalloc
- safemalloc
- saferealloc
- safefree
-
-This still needs much thought, but I'm inclined to think that one
-possible solution is to prefix all such functions with C<perl_> in the
-source and list them along with the other C<perl_*> functions in
-F<perl_exp.SH>.
-
-Thus, for C<chsize>, we'd do something like the following:
-
- /* in perl.h */
- #ifdef HAS_CHSIZE
- # define perl_chsize chsize
- #endif
-
-then in some file (e.g. F<util.c> or F<doio.c>) do
-
- #ifndef HAS_CHSIZE
- I32 perl_chsize(fd, length)
- /* implement the function here . . . */
- #endif
-
-Alternatively, we could just always use C<chsize> everywhere and move
-C<chsize> from F<global.sym> to the end of F<perl_exp.SH>. That would
-probably be fine as long as our C<chsize> function agreed with all the
-C<chsize> function prototypes in the various systems we'll be using.
-As long as the prototypes in actual use don't vary that much, this is
-probably a good alternative. (As a counter-example, note how Configure
-and perl have to go through hoops to find and use get Malloc_t and
-Free_t for C<malloc> and C<free>.)
-
-At the moment, this latter option is what I tend to prefer.
-
-=item All the world's a VAX
-
-Sorry, showing my age:-). Still, all the world is not BSD 4.[34],
-SVR4, or POSIX. Be aware that SVR3-derived systems are still quite
-common (do you have any idea how many systems run SCO?) If you don't
-have a bunch of v7 manuals handy, the metaconfig units (by default
-installed in F</usr/local/lib/dist/U>) are a good resource to look at
-for portability.
-
-=back
-
-=head1 Miscellaneous Topics
-
-=head2 Autoconf
-
-Why does perl use a metaconfig-generated Configure script instead of an
-autoconf-generated configure script?
-
-Metaconfig and autoconf are two tools with very similar purposes.
-Metaconfig is actually the older of the two, and was originally written
-by Larry Wall, while autoconf is probably now used in a wider variety of
-packages. The autoconf info file discusses the history of autoconf and
-how it came to be. The curious reader is referred there for further
-information.
-
-Overall, both tools are quite good, I think, and the choice of which one
-to use could be argued either way. In March, 1994, when I was just
-starting to work on Configure support for Perl5, I considered both
-autoconf and metaconfig, and eventually decided to use metaconfig for the
-following reasons:
-
-=over 4
-
-=item Compatibility with Perl4
-
-Perl4 used metaconfig, so many of the #ifdef's were already set up for
-metaconfig. Of course metaconfig had evolved some since Perl4's days,
-but not so much that it posed any serious problems.
-
-=item Metaconfig worked for me
-
-My system at the time was Interactive 2.2, a SVR3.2/386 derivative that
-also had some POSIX support. Metaconfig-generated Configure scripts
-worked fine for me on that system. On the other hand, autoconf-generated
-scripts usually didn't. (They did come quite close, though, in some
-cases.) At the time, I actually fetched a large number of GNU packages
-and checked. Not a single one configured and compiled correctly
-out-of-the-box with the system's cc compiler.
-
-=item Configure can be interactive
-
-With both autoconf and metaconfig, if the script works, everything is
-fine. However, one of my main problems with autoconf-generated scripts
-was that if it guessed wrong about something, it could be B<very> hard to
-go back and fix it. For example, autoconf always insisted on passing the
--Xp flag to cc (to turn on POSIX behavior), even when that wasn't what I
-wanted or needed for that package. There was no way short of editing the
-configure script to turn this off. You couldn't just edit the resulting
-Makefile at the end because the -Xp flag influenced a number of other
-configure tests.
-
-Metaconfig's Configure scripts, on the other hand, can be interactive.
-Thus if Configure is guessing things incorrectly, you can go back and fix
-them. This isn't as important now as it was when we were actively
-developing Configure support for new features such as dynamic loading,
-but it's still useful occasionally.
-
-=item GPL
-
-At the time, autoconf-generated scripts were covered under the GNU Public
-License, and hence weren't suitable for inclusion with Perl, which has a
-different licensing policy. (Autoconf's licensing has since changed.)
-
-=item Modularity
-
-Metaconfig builds up Configure from a collection of discrete pieces
-called "units". You can override the standard behavior by supplying your
-own unit. With autoconf, you have to patch the standard files instead.
-I find the metaconfig "unit" method easier to work with. Others
-may find metaconfig's units clumsy to work with.
-
-=back
-
-=head2 Why isn't there a directory to override Perl's library?
-
-Mainly because no one's gotten around to making one. Note that
-"making one" involves changing perl.c, Configure, config_h.SH (and
-associated files, see above), and I<documenting> it all in the
-INSTALL file.
-
-Apparently, most folks who want to override one of the standard library
-files simply do it by overwriting the standard library files.
-
-=head2 APPLLIB
-
-In the perl.c sources, you'll find an undocumented APPLLIB_EXP
-variable, sort of like PRIVLIB_EXP and ARCHLIB_EXP (which are
-documented in config_h.SH). Here's what APPLLIB_EXP is for, from
-a mail message from Larry:
-
- The main intent of APPLLIB_EXP is for folks who want to send out a
- version of Perl embedded in their product. They would set the symbol
- to be the name of the library containing the files needed to run or to
- support their particular application. This works at the "override"
- level to make sure they get their own versions of any library code that
- they absolutely must have configuration control over.
-
- As such, I don't see any conflict with a sysadmin using it for a
- override-ish sort of thing, when installing a generic Perl. It should
- probably have been named something to do with overriding though. Since
- it's undocumented we could still change it... :-)
-
-Given that it's already there, you can use it to override
-distribution modules. If you do
-
- sh Configure -Dccflags='-DAPPLLIB_EXP=/my/override'
-
-then perl.c will put /my/override ahead of ARCHLIB and PRIVLIB.
-
-=head2 Shared libperl.so location
-
-Why isn't the shared libperl.so installed in /usr/lib/ along
-with "all the other" shared libraries? Instead, it is installed
-in $archlib, which is typically something like
-
- /usr/local/lib/perl5/archname/5.00404
-
-and is architecture- and version-specific.
-
-The basic reason why a shared libperl.so gets put in $archlib is so that
-you can have more than one version of perl on the system at the same time,
-and have each refer to its own libperl.so.
-
-Three examples might help. All of these work now; none would work if you
-put libperl.so in /usr/lib.
-
-=over
-
-=item 1.
-
-Suppose you want to have both threaded and non-threaded perl versions
-around. Configure will name both perl libraries "libperl.so" (so that
-you can link to them with -lperl). The perl binaries tell them apart
-by having looking in the appropriate $archlib directories.
-
-=item 2.
-
-Suppose you have perl5.004_04 installed and you want to try to compile
-it again, perhaps with different options or after applying a patch.
-If you already have libperl.so installed in /usr/lib/, then it may be
-either difficult or impossible to get ld.so to find the new libperl.so
-that you're trying to build. If, instead, libperl.so is tucked away in
-$archlib, then you can always just change $archlib in the current perl
-you're trying to build so that ld.so won't find your old libperl.so.
-(The INSTALL file suggests you do this when building a debugging perl.)
-
-=item 3.
-
-The shared perl library is not a "well-behaved" shared library with
-proper major and minor version numbers, so you can't necessarily
-have perl5.004_04 and perl5.004_05 installed simultaneously. Suppose
-perl5.004_04 were to install /usr/lib/libperl.so.4.4, and perl5.004_05
-were to install /usr/lib/libperl.so.4.5. Now, when you try to run
-perl5.004_04, ld.so might try to load libperl.so.4.5, since it has
-the right "major version" number. If this works at all, it almost
-certainly defeats the reason for keeping perl5.004_04 around. Worse,
-with development subversions, you certaily can't guarantee that
-libperl.so.4.4 and libperl.so.4.55 will be compatible.
-
-Anyway, all this leads to quite obscure failures that are sure to drive
-casual users crazy. Even experienced users will get confused :-). Upon
-reflection, I'd say leave libperl.so in $archlib.
-
-=back
-
-=head1 Upload Your Work to CPAN
-
-You can upload your work to CPAN if you have a CPAN id. Check out
-http://www.perl.com/CPAN/modules/04pause.html for information on
-_PAUSE_, the Perl Author's Upload Server.
-
-I typically upload both the patch file, e.g. F<perl5.004_08.pat.gz>
-and the full tar file, e.g. F<perl5.004_08.tar.gz>.
-
-If you want your patch to appear in the F<src/5.0/unsupported>
-directory on CPAN, send e-mail to the CPAN master librarian. (Check
-out http://www.perl.com/CPAN/CPAN.html ).
-
-=head1 Help Save the World
-
-You should definitely announce your patch on the perl5-porters list.
-You should also consider announcing your patch on
-comp.lang.perl.announce, though you should make it quite clear that a
-subversion is not a production release, and be prepared to deal with
-people who will not read your disclaimer.
-
-=head1 Todo
-
-Here, in no particular order, are some Configure and build-related
-items that merit consideration. This list isn't exhaustive, it's just
-what I came up with off the top of my head.
-
-=head2 Good ideas waiting for round tuits
-
-=over 4
-
-=item Configure -Dsrc=/blah/blah
-
-We should be able to emulate B<configure --srcdir>. Tom Tromey
-tromey@creche.cygnus.com has submitted some patches to
-the dist-users mailing list along these lines. They have been folded
-back into the main distribution, but various parts of the perl
-Configure/build/install process still assume src='.'.
-
-=item Hint file fixes
-
-Various hint files work around Configure problems. We ought to fix
-Configure so that most of them aren't needed.
-
-=item Hint file information
-
-Some of the hint file information (particularly dynamic loading stuff)
-ought to be fed back into the main metaconfig distribution.
-
-=back
-
-=head2 Probably good ideas waiting for round tuits
-
-=over 4
-
-=item GNU configure --options
-
-I've received sensible suggestions for --exec_prefix and other
-GNU configure --options. It's not always obvious exactly what is
-intended, but this merits investigation.
-
-=item make clean
-
-Currently, B<make clean> isn't all that useful, though
-B<make realclean> and B<make distclean> are. This needs a bit of
-thought and documentation before it gets cleaned up.
-
-=item Try gcc if cc fails
-
-Currently, we just give up.
-
-=item bypassing safe*alloc wrappers
-
-On some systems, it may be safe to call the system malloc directly
-without going through the util.c safe* layers. (Such systems would
-accept free(0), for example.) This might be a time-saver for systems
-that already have a good malloc. (Recent Linux libc's apparently have
-a nice malloc that is well-tuned for the system.)
-
-=back
-
-=head2 Vague possibilities
-
-=over 4
-
-=item MacPerl
-
-Get some of the Macintosh stuff folded back into the main distribution.
-
-=item gconvert replacement
-
-Maybe include a replacement function that doesn't lose data in rare
-cases of coercion between string and numerical values.
-
-=item Improve makedepend
-
-The current makedepend process is clunky and annoyingly slow, but it
-works for most folks. Alas, it assumes that there is a filename
-$firstmakefile that the B<make> command will try to use before it uses
-F<Makefile>. Such may not be the case for all B<make> commands,
-particularly those on non-Unix systems.
-
-Probably some variant of the BSD F<.depend> file will be useful.
-We ought to check how other packages do this, if they do it at all.
-We could probably pre-generate the dependencies (with the exception of
-malloc.o, which could probably be determined at F<Makefile.SH>
-extraction time.
-
-=item GNU Makefile standard targets
-
-GNU software generally has standardized Makefile targets. Unless we
-have good reason to do otherwise, I see no reason not to support them.
-
-=item File locking
-
-Somehow, straighten out, document, and implement lockf(), flock(),
-and/or fcntl() file locking. It's a mess. See $d_fcntl_can_lock
-in recent config.sh files though.
-
-=back
-
-=head1 AUTHORS
-
-Original author: Andy Dougherty doughera@lafcol.lafayette.edu .
-Additions by Chip Salzenberg chip@perl.com and
-Tim Bunce Tim.Bunce@ig.co.uk .
-
-All opinions expressed herein are those of the authorZ<>(s).
-
-=head1 LAST MODIFIED
-
-$Id: pumpkin.pod,v 1.23 2000/01/13 19:45:13 doughera Released $
diff --git a/contrib/perl5/Porting/repository.pod b/contrib/perl5/Porting/repository.pod
deleted file mode 100644
index 5f1338d..0000000
--- a/contrib/perl5/Porting/repository.pod
+++ /dev/null
@@ -1,327 +0,0 @@
-=head1 NAME
-
-repository - Using the Perl repository
-
-This document describes what a Perl Porter needs to do
-to start using the Perl repository.
-
-=head1 Prerequisites
-
-You'll need to get hold of the following software.
-
-=over 4
-
-=item Perforce
-
-Download a perforce client from:
-
- http://www.perforce.com/perforce/loadprog.html
-
-You'll probably also want to look at:
-
- http://www.perforce.com/perforce/technical.html
-
-where you can look at or download its documentation.
-
-=item ssh
-
-If you don't already have access to an ssh client, then look at its
-home site C<http://www.cs.hut.fi/ssh> which mentions ftp sites from
-which it's available. You only need to build the client parts (ssh
-and ssh-keygen should suffice).
-
-=back
-
-=head1 Creating an SSH Key Pair
-
-If you already use ssh and want to use the same key pair for perl
-repository access then you can skip the rest of this section.
-Otherwise, generate an ssh key pair for use with the repository
-by typing the command
-
- ssh-keygen
-
-After generating a key pair and testing it, ssh-keygen will ask you
-to enter a filename in which to save the key. The default it offers
-will be the file F<~/.ssh/identity> which is suitable unless you
-particularly want to keep separate ssh identities for some reason.
-If so, you could save the perl repository private key in the file
-F<~/.ssh/perl>, for example, but I will use the standard filename
-in the remainder of the examples of this document.
-
-After typing in the filename, it will prompt you to type in a
-passphrase. The private key will itself be encrypted so that it is
-usable only when that passphrase is typed. (When using ssh, you will
-be prompted when it requires a pass phrase to unlock a private key.)
-If you provide a blank passphrase then no passphrase will be needed
-to unlock the key and, as a consequence, anyone who gains access to
-the key file gains access to accounts protected with that key
-(barring additional configuration to restrict access by IP address).
-
-When you have typed the passphrase in twice, ssh-keygen will confirm
-where it has saved the private key (in the filename you gave and
-with permissions set to be only readable by you), what your public
-key is (don't worry: you don't need to memorise it) and where it
-has saved the corresponding public key. The public key is saved in
-a filename corresponding to your private key's filename but with
-".pub" appended, usually F<~/.ssh/identity.pub>. That public key
-can be (but need not be) world readable. It is not used by your
-own system at all.
-
-=head1 Notifying the Repository Keeper
-
-Mail the contents of that public key file to the keeper of the perl
-repository (see L</Contact Information> below).
-When the key is added to the repository host's configuration file,
-you will be able to connect to it with ssh by using the corresponding
-private key file (after unlocking it with your chosen passphrase).
-
-=head1 Connecting to the Repository
-
-Connections to the repository are made by using ssh to provide a
-TCP "tunnel" rather than by using ssh to login to or invoke any
-ordinary commands on the repository. When you want to start a
-session using the repository, use the command
-
- ssh -l perlrep -f -q -x -L 1666:127.0.0.1:1666 sickle.activestate.com
-foo
-
-If you are not using the default filename of F<~/.ssh/identity>
-to hold your perl repository private key then you'll need to add
-the option B<-i filename> to tell ssh where it is. Unless you chose
-a blank passphrase for that private key, ssh will prompt you for the
-passphrase to unlock that key. Then ssh will fork and put itself
-in the background, returning you (silently) to your shell prompt.
-The tunnel for repository access is now ready for use.
-
-For the sake of completeness (and for the case where the chosen
-port of 1666 is already in use on your machine), I'll briefly
-describe what all those ssh arguments are for.
-
-=over 4
-
-=item B<-l perl>
-
-Use a remote username of perl. The account on the repository which
-provides the end-point of the ssh tunnel is named "perl".
-
-=item B<-f>
-
-Tells ssh to fork and remain running in the background. Since ssh
-is only being used for its tunnelling capabilities, the command
-that ssh runs never does any I/O and can sit silently in the
-background.
-
-=item B<-q>
-
-Tells ssh to be quiet. Without this option, ssh will output a
-message each time you use a p4 command (since each p4 command
-tunnels over the ssh connection to reach the repository).
-
-=item B<-x>
-
-Tells ssh not to bother to set up a tunnel for X11 connections.
-The repository doesn't allow this anyway.
-
-=item B<-L 1666:127.0.0.1:1666>
-
-This is the important option. It tells ssh to listen out for
-connections made to port 1666 on your local machine. When such
-a connection is made, the ssh client tells the remote side
-(the corresponding ssh daemon on the repository) to make a
-connection to IP address 127.0.0.1, port 1666. Data flowing
-along that connection is tunnelled over the ssh connection
-(encrypted). The perforce daemon running on the repository
-only accepts connections from localhost and that is exactly
-where ssh-tunnelled connections appear to come from.
-
-If port 1666 is already in use on your machine then you can
-choose any non-privileged port (a number between 1024 and 65535)
-which happens to be free on your machine. It's the first of the
-three colon separated values that you should change. Picking
-port 2345 would mean changing the option to
-B<-L 2345:127.0.0.1:1666>. Whatever port number you choose should
-be used for the value of the P4PORT environment variable (q.v.).
-
-=item sickle.activestate.com
-
-This is the canonical IP name of the host on which the perl
-repository runs. Its IP number is 199.60.48.20.
-
-=item foo
-
-This is a dummy place holder argument. Without an argument
-here, ssh will try to perform an interactive login to the
-repository which is not allowed. Ordinarily, this argument
-is for the one-off command which is to be executed on the
-remote host. However, the repository's ssh configuration
-file uses the "command=" option to force a particular
-command to run so the actual value of the argument is
-ignored. The command that's actually run merely pauses and
-waits for the ssh connection to drop, then exits.
-
-=back
-
-=head1 Problems
-
-You should normally get a prompt that asks for the passphrase
-for your RSA key when you connect with the ssh command shown
-above. If you see a prompt that looks like:
-
- perlrep@sickle.activestate.com's password:
-
-Then you either don't have a ~/.ssh/identity file corresponding
-to your public key, or your ~/.ssh/identity file is not readable.
-Fix the problem and try again.
-
-=head1 Using the Perforce Client
-
-Remember to read the documentation for Perforce. You need
-to make sure that three environment variable are set
-correctly before using the p4 client with the perl repository.
-
-=over 4
-
-=item P4PORT
-
-Set this to localhost:1666 (the port for your ssh client to listen on)
-unless that port is already in use on your host. If it is, see
-the section above on the B<-L 1666:127.0.0.1:1666> option to ssh.
-
-=item P4CLIENT
-
-The value of this is the name by which Perforce knows your
-host's workspace. You need to pick a name (for example, your
-hostname unless that clashes with someone else's client name)
-when you first start using the perl repository and then
-stick with it. If you connect from multiple hosts (with
-different workspaces) then maybe you could have multiple
-clients. There is a licence limit on the number of perforce
-clients which can be created. Although we have been told that
-Perforce will raise our licence limits within reason, it's
-probably best not to use additional clients unless needed.
-
-Note that perforce only needs the client name so that it can
-find the directory under which your client files are stored.
-If you have multiple hosts sharing the same directory structure
-via NFS then only one client name is necessary.
-
-The C<p4 clients> command lists all currently known clients.
-
-=item P4USER
-
-This is the username by which perforce knows you. Use your
-username if you have a well known or obvious one or else pick
-a new one which other perl5-porters will recognise. There is
-a licence limit on the number of these usernames. Perforce
-doesn't enforce security between usernames. If you set P4USER
-to be somebody else's username then perforce will believe you
-completely with regard to access control, logging and so on.
-
-The C<p4 users> command lists all currently known users.
-
-=back
-
-Once these three environment variables are set, you can use the
-perforce p4 client exactly as described in its documentation.
-After setting these variables and connecting to the repository
-for the first time, you should use the C<p4 user> and
-C<p4 client> commands to tell perforce the details of your
-new username and your new client workspace specifications.
-
-=head1 Ending a Repository Session
-
-When you have finished a session using the repository, you
-should kill off the ssh client process to break the tunnel.
-Since ssh forked itself into the background, you'll need to use
-something like ps with the appropriate options to find the ssh
-process and then kill it manually. The default signal of
-SIGTERM is fine.
-
-=head1 Overview of the Repository
-
-Please read at least the introductory sections of the Perforce
-User Guide (and perhaps the Quick Start Guide as well) before
-reading this section.
-
-Every repository user typically "owns" a "branch" of the mainline
-code in the repository. They hold the "pumpkin" for things in this
-area, and are usually the only user who will modify files there.
-This is not strictly enforced in order to allow the flexibility
-of other users stealing the pumpkin for short periods with the
-owner's permission.
-
-Here is the current structure of the repository:
-
- /----+-----perl - Mainline development (bleadperl)
- +-----cfgperl - Configure Pumpkin's Perl
- +-----vmsperl - VMS Pumpkin's Perl
- +-----maint-5.004------perl - Maintainance branches
- +-----maint-5.005------perl
- +-----maint-5.6------perl
-
-Perforce uses a branching model that simply tracks relationships
-between files. It does not care about directories at all, so
-any file can be a branch of any other file--the fully qualified
-depot path name (of the form //depot/foo/bar.c) uniquely determines
-a file for the purpose of establishing branching relationships.
-Since a branch usually involves hundreds of files, such relationships
-are typically specified en masse using a branch map (try `p4 help branch`).
-`p4 branches` lists the existing branches that have been set up.
-`p4 branch -o branchname` can be used to view the map for a particular
-branch, if you want to determine the ancestor for a particular set of
-files.
-
-The mainline (aka "trunk") code in the Perl repository is under
-"//depot/perl/...". Most branches typically map its entire
-contents under a directory that goes by the same name as the branch
-name. Thus the contents of the cfgperl branch are to be found
-in //depot/cfgperl.
-
-Run `p4 client` to specify how the repository contents should map to
-your local disk. Most users will typically have a client map that
-includes at least their entire branch and the contents of the mainline.
-
-Run `p4 changes -l -m10` to check on the activity in the repository.
-//depot/perl/Porting/genlog is useful to get an annotated changelog
-that shows files and branches. You can use this listing to determine
-if there are any changes in the mainline that you need to merge into
-your own branch. A typical merging session looks like this:
-
- % cd ~/p4view/cfgperl
- % p4 integrate -b cfgperl # to bring parent changes into cfgperl
- % p4 resolve -a ./... # auto merge the changes
- % p4 resolve ./... # manual merge conflicting changes
- % p4 submit ./... # check in
-
-If the owner of the mainline wants to bring the changes in cfgperl
-back into the mainline, they do:
-
- % p4 integrate -r -b cfgperl
- ...
-
-Generating a patch for change#42 is done as follows:
-
- % p4 describe -du 42 | p4desc | p4d2p > change-42.patch
-
-p4desc and p4d2p are to be found in //depot/perl/Porting/.
-
-=head1 Contact Information
-
-The mail alias <perl-repository-keepers@perl.org> can be used to reach
-all current users of the repository.
-
-The repository keeper is currently Gurusamy Sarathy
-<gsar@activestate.com>.
-
-=head1 AUTHORS
-
-Malcolm Beattie, mbeattie@sable.ox.ac.uk, 24 June 1997.
-
-Gurusamy Sarathy, gsar@activestate.com, 8 May 1999.
-
-Slightly updated by Simon Cozens, simon@brecon.co.uk, 3 July 2000
-
-=cut
-
-
diff --git a/contrib/perl5/README b/contrib/perl5/README
deleted file mode 100644
index 28c5de8..0000000
--- a/contrib/perl5/README
+++ /dev/null
@@ -1,96 +0,0 @@
-
- Perl Kit, Version 5.0
-
- Copyright 1989-2001, Larry Wall
- All rights reserved.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- a) the GNU General Public License as published by the Free
- Software Foundation; either version 1, or (at your option) any
- later version, or
-
- b) the "Artistic License" which comes with this Kit.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either
- the GNU General Public License or the Artistic License for more details.
-
- You should have received a copy of the Artistic License with this
- Kit, in the file named "Artistic". If not, I'll be glad to provide one.
-
- You should also have received a copy of the GNU General Public License
- along with this program in the file named "Copying". If not, write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307, USA or visit their web page on the internet at
- http://www.gnu.org/copyleft/gpl.html.
-
- For those of you that choose to use the GNU General Public License,
- my interpretation of the GNU General Public License is that no Perl
- script falls under the terms of the GPL unless you explicitly put
- said script under the terms of the GPL yourself. Furthermore, any
- object code linked with perl does not automatically fall under the
- terms of the GPL, provided such object code only adds definitions
- of subroutines and variables, and does not otherwise impair the
- resulting interpreter from executing any standard Perl script. I
- consider linking in C subroutines in this manner to be the moral
- equivalent of defining subroutines in the Perl language itself. You
- may sell such an object file as proprietary provided that you provide
- or offer to provide the Perl source, as specified by the GNU General
- Public License. (This is merely an alternate way of specifying input
- to the program.) You may also sell a binary produced by the dumping of
- a running Perl script that belongs to you, provided that you provide or
- offer to provide the Perl source as specified by the GPL. (The
- fact that a Perl interpreter and your code are in the same binary file
- is, in this case, a form of mere aggregation.) This is my interpretation
- of the GPL. If you still have concerns or difficulties understanding
- my intent, feel free to contact me. Of course, the Artistic License
- spells all this out for your protection, so you may prefer to use that.
-
---------------------------------------------------------------------------
-
-Perl is a language that combines some of the features of C, sed, awk
-and shell. See the manual page for more hype. There are also many Perl
-books available, covering a wide variety of topics, from various publishers.
-See pod/perlbook.pod for more information.
-
-Please read all the directions below before you proceed any further, and
-then follow them carefully.
-
-After you have unpacked your kit, you should have all the files listed
-in MANIFEST.
-
-Installation
-
-1) Detailed instructions are in the file "INSTALL", which you should
-read if you are either installing on a system resembling Unix
-or porting perl to another platform. For non-Unix platforms, see the
-corresponding README.
-
-2) Read the manual entries before running perl.
-
-3) IMPORTANT! Help save the world! Communicate any problems and suggested
-patches to perlbug@perl.org so we can keep the world in sync.
-If you have a problem, there's someone else out there who either has had
-or will have the same problem. It's usually helpful if you send the
-output of the "myconfig" script in the main perl directory.
-
-If you've succeeded in compiling perl, the perlbug script in the "utils"
-subdirectory can be used to help mail in a bug report.
-
-If possible, send in patches such that the patch program will apply them.
-Context diffs are the best, then normal diffs. Don't send ed scripts--
-I've probably changed my copy since the version you have.
-
-The latest versions of perl are always available on the various CPAN
-(Comprehensive Perl Archive Network) sites around the world.
-See <URL:http://www.perl.com/CPAN/src/>.
-
-
-Just a personal note: I want you to know that I create nice things like this
-because it pleases the Author of my story. If this bothers you, then your
-notion of Authorship needs some revision. But you can use perl anyway. :-)
-
- The author.
diff --git a/contrib/perl5/README.Y2K b/contrib/perl5/README.Y2K
deleted file mode 100644
index be7ff51..0000000
--- a/contrib/perl5/README.Y2K
+++ /dev/null
@@ -1,47 +0,0 @@
-The following information about Perl and the year 2000 is a modified
-version of the information that can be found in the Frequently Asked
-Question (FAQ) documents.
-
-Does Perl have a year 2000 problem? Is Perl Y2K compliant?
-
-Short answer: No, Perl does not have a year 2000 problem. Yes,
- Perl is Y2K compliant (whatever that means). The
- programmers you've hired to use it, however, probably are
- not. If you want perl to complain when your programmers
- create programs with certain types of possible year 2000
- problems, a build option allows you to turn on warnings.
-
-Long answer: The question belies a true understanding of the
- issue. Perl is just as Y2K compliant as your pencil
- --no more, and no less. Can you use your pencil to write
- a non-Y2K-compliant memo? Of course you can. Is that
- the pencil's fault? Of course it isn't.
-
- The date and time functions supplied with perl (gmtime and
- localtime) supply adequate information to determine the
- year well beyond 2000 (2038 is when trouble strikes for
- 32-bit machines). The year returned by these functions
- when used in a list context is the year minus 1900. For
- years between 1910 and 1999 this happens to be a 2-digit
- decimal number. To avoid the year 2000 problem simply do
- not treat the year as a 2-digit number. It isn't.
-
- When gmtime() and localtime() are used in scalar context
- they return a timestamp string that contains a fully-
- expanded year. For example, $timestamp =
- gmtime(1005613200) sets $timestamp to "Tue Nov 13 01:00:00
- 2001". There's no year 2000 problem here.
-
- That doesn't mean that Perl can't be used to create non-
- Y2K compliant programs. It can. But so can your pencil.
- It's the fault of the user, not the language. At the risk
- of inflaming the NRA: ``Perl doesn't break Y2K, people
- do.'' See http://language.perl.com/news/y2k.html for a
- longer exposition.
-
- If you want perl to warn you when it sees a program which
- catenates a number with the string "19" -- a common
- indication of a year 2000 problem -- build perl using the
- Configure option "-Accflags=-DPERL_Y2KWARN".
- (See the file INSTALL for more information about building
- perl.)
diff --git a/contrib/perl5/README.threads b/contrib/perl5/README.threads
deleted file mode 100644
index 15d36de..0000000
--- a/contrib/perl5/README.threads
+++ /dev/null
@@ -1,336 +0,0 @@
-NOTE: This documentation describes the style of threading that was
-available in 5.005. Perl v5.6 also has the early beginnings of
-interpreter-based threads support (which is what will be enabled by
-default when you simply ask for -Dusethreads). However, be advised
-that interpreter threads cannot as yet be created from the Perl level
-yet. If you're looking to create threads from within Perl, chances
-are you _don't_ want interpreter threads, but want the older support
-for threads described below, enabled with:
-
- sh Configure -Dusethreads -Duse5005threads
-
-The rest of this document only applies to the use5005threads style of
-threads.
----------------------------------------------------------------------------
-
-Support for threading is still in the highly experimental stages. There
-are known race conditions that show up under high contention on SMP
-machines. Internal implementation is still subject to changes.
-It is not recommended for production use at this time.
-
----------------------------------------------------------------------------
-
-Building
-
-If your system is in the following list you should be able to just:
-
- ./Configure -Dusethreads -Duse5005threads -des
- make
-
-and ignore the rest of this "Building" section. If not, continue
-from the "Problems" section.
-
- * Linux 2.* (with the LinuxThreads library installed:
- that's the linuxthreads and linuxthreads-devel RPMs
- for RedHat)
-
- * Tru64 UNIX (formerly Digital UNIX formerly DEC OSF/1)
- (see additional note below)
-
- * Solaris 2.* for recentish x (2.5 is OK)
-
- * IRIX 6.2 or newer. 6.2 will require a few OS patches.
- IMPORTANT: Without patch 2401 (or its replacement),
- a kernel bug in IRIX 6.2 will cause your machine to
- panic and crash when running threaded perl.
- IRIX 6.3 and up should be OK. See lower down for patch details.
-
- * AIX 4.1.5 or newer.
-
- * FreeBSD 2.2.8 or newer.
-
- * OpenBSD
-
- * NeXTstep, OpenStep
-
- * OS/2
-
- * DOS DJGPP
-
- * VM/ESA
-
----------------------------------------------------------------------------
-
-Problems
-
-If the simple way doesn't work or you are using another platform which
-you believe supports POSIX.1c threads then read on. Additional
-information may be in a platform-specific "hints" file in the hints/
-subdirectory.
-
-On platforms that use Configure to build perl, omit the -d from your
-./Configure arguments. For example, use:
-
- ./Configure -Dusethreads -Duse5005threads
-
-When Configure prompts you for ccflags, insert any other arguments in
-there that your compiler needs to use POSIX threads (-D_REENTRANT,
--pthreads, -threads, -pthread, -thread, are good guesses). When
-Configure prompts you for linking flags, include any flags required
-for threading (usually nothing special is required here). Finally,
-when Configure prompts you for libraries, include any necessary
-libraries (e.g. -lpthread). Pay attention to the order of libraries.
-It is probably necessary to specify your threading library *before*
-your standard C library, e.g. it might be necessary to have -lpthread
--lc, instead of -lc -lpthread. You may also need to use -lc_r instead
-of -lc.
-
-Once you have specified all your compiler flags, you can have Configure
-accept all the defaults for the remainder of the session by typing &-d
-at any Configure prompt.
-
-Some additional notes (some of these may be obsolete now, other items
-may be handled automatically):
-
-For Digital Unix 4.x:
- Add -pthread to ccflags
- Add -pthread to ldflags
- Add -lpthread -lc_r to lddlflags
-
- For some reason, the extra includes for pthreads make Digital UNIX
- complain fatally about the sbrk() delcaration in perl's malloc.c
- so use the native malloc, e.g. sh Configure -Uusemymalloc, or
- manually edit your config.sh as follows:
- Change usemymalloc to n
- Zap mallocobj and mallocsrc (foo='')
- Change d_mymalloc to undef
-
-For Digital Unix 3.x (Formerly DEC OSF/1):
- Add -DOLD_PTHREADS_API to ccflags
- If compiling with the GNU cc compiler, remove -threads from ccflags
-
- (The following should be done automatically if you call Configure
- with the -Dusethreads option).
- Add -lpthread -lmach -lc_r to libs (in the order specified).
-
-For IRIX:
- (This should all be done automatically by the hint file).
- Add -lpthread to libs
- For IRIX 6.2, you have to have the following patches installed:
- 1404 Irix 6.2 Posix 1003.1b man pages
- 1645 IRIX 6.2 & 6.3 POSIX header file updates
- 2000 Irix 6.2 Posix 1003.1b support modules
- 2254 Pthread library fixes
- 2401 6.2 all platform kernel rollup
- IMPORTANT: Without patch 2401, a kernel bug in IRIX 6.2 will
- cause your machine to panic and crash when running threaded perl.
- IRIX 6.3 and up should be OK.
-
- For IRIX 6.3 and 6.4 the pthreads should work out of the box.
- Thanks to Hannu Napari <Hannu.Napari@hut.fi> for the IRIX
- pthreads patches information.
-
-For AIX:
- (This should all be done automatically by the hint file).
- Change cc to xlc_r or cc_r.
- Add -DNEED_PTHREAD_INIT to ccflags and cppflags
- Add -lc_r to libswanted
- Change -lc in lddflags to be -lpthread -lc_r -lc
-
-For Win32:
- See README.win32, and the notes at the beginning of win32/Makefile
- or win32/makefile.mk.
-
-Now you can do a
- make
-
-When you succeed in compiling and testing ("make test" after your
-build) a threaded Perl in a platform previosuly unknown to support
-threaded perl, please let perlbug@perl.com know about your victory.
-Explain what you did in painful detail.
-
----------------------------------------------------------------------------
-
-O/S specific bugs
-
-Irix 6.2: See the Irix warning above.
-
-LinuxThreads 0.5 has a bug which can cause file descriptor 0 to be
-closed after a fork() leading to many strange symptoms. Version 0.6
-has this fixed but the following patch can be applied to 0.5 for now:
-
------------------------------ cut here -----------------------------
---- linuxthreads-0.5/pthread.c.ORI Mon Oct 6 13:55:50 1997
-+++ linuxthreads-0.5/pthread.c Mon Oct 6 13:57:24 1997
-@@ -312,8 +312,10 @@
- free(pthread_manager_thread_bos);
- pthread_manager_thread_bos = pthread_manager_thread_tos = NULL;
- /* Close the two ends of the pipe */
-- close(pthread_manager_request);
-- close(pthread_manager_reader);
-+ if (pthread_manager_request >= 0) {
-+ close(pthread_manager_request);
-+ close(pthread_manager_reader);
-+ }
- pthread_manager_request = pthread_manager_reader = -1;
- /* Update the pid of the main thread */
- self->p_pid = getpid();
------------------------------ cut here -----------------------------
-
-
-Building the Thread extension
-
-The Thread extension is now part of the main perl distribution tree.
-If you did Configure -Dusethreads -Duse5005threads then it will have been
-added to the list of extensions automatically.
-
-You can try some of the tests with
- cd ext/Thread
- perl create.t
- perl join.t
- perl lock.t
- perl io.t
-etc.
-The io one leaves a thread reading from the keyboard on stdin so
-as the ping messages appear you can type lines and see them echoed.
-
-Try running the main perl test suite too. There are known
-failures for some of the DBM/DB extensions (if their underlying
-libraries were not compiled to be thread-aware).
-
----------------------------------------------------------------------------
-
-Bugs
-
-* FAKE_THREADS should produce a working perl but the Thread
-extension won't build with it yet. (FAKE_THREADS has not been
-tested at all in recent times.)
-
-* There may still be races where bugs show up under contention.
-
----------------------------------------------------------------------------
-
-Debugging
-
-Use the -DS command-line option to turn on debugging of the
-multi-threading code. Under Linux, that also turns on a quick
-hack I did to grab a bit of extra information from segfaults.
-If you have a fancier gdb/threads setup than I do then you'll
-have to delete the lines in perl.c which say
- #if defined(DEBUGGING) && defined(USE_THREADS) && defined(__linux__)
- DEBUG_S(signal(SIGSEGV, (void(*)(int))catch_sigsegv););
- #endif
-
----------------------------------------------------------------------------
-
-Background
-
-Some old globals (e.g. stack_sp, op) and some old per-interpreter
-variables (e.g. tmps_stack, cxstack) move into struct thread.
-All fields of struct thread which derived from original perl
-variables have names of the form Tfoo. For example, stack_sp becomes
-the field Tstack_sp of struct thread. For those fields which moved
-from original perl, thread.h does
- #define foo (thr->Tfoo)
-This means that all functions in perl which need to use one of these
-fields need an (automatic) variable thr which points at the current
-thread's struct thread. For pp_foo functions, it is passed around as
-an argument, for other functions they do
- dTHR;
-which declares and initialises thr from thread-specific data
-via pthread_getspecific. If a function fails to compile with an
-error about "no such variable thr", it probably just needs a dTHR
-at the top.
-
-
-Fake threads
-
-For FAKE_THREADS, thr is a global variable and perl schedules threads
-by altering thr in between appropriate ops. The next and prev fields
-of struct thread keep all fake threads on a doubly linked list and
-the next_run and prev_run fields keep all runnable threads on a
-doubly linked list. Mutexes are stubs for FAKE_THREADS. Condition
-variables are implemented as a list of waiting threads.
-
-
-Mutexes and condition variables
-
-The API is via macros MUTEX_{INIT,LOCK,UNLOCK,DESTROY} and
-COND_{INIT,WAIT,SIGNAL,BROADCAST,DESTROY}.
-
-A mutex is only required to be a simple, fast mutex (e.g. it does not
-have to be recursive). It is only ever held across very short pieces
-of code. Condition variables are only ever signalled/broadcast while
-their associated mutex is held. (This constraint simplifies the
-implementation of condition variables in certain porting situations.)
-For POSIX threads, perl mutexes and condition variables correspond to
-POSIX ones. For FAKE_THREADS, mutexes are stubs and condition variables
-are implmented as lists of waiting threads. For FAKE_THREADS, a thread
-waits on a condition variable by removing itself from the runnable
-list, calling SCHEDULE to change thr to the next appropriate
-runnable thread and returning op (i.e. the new threads next op).
-This means that fake threads can only block while in PP code.
-A PP function which contains a COND_WAIT must be prepared to
-handle such restarts and can use the field "private" of struct
-thread to record its state. For fake threads, COND_SIGNAL and
-COND_BROADCAST work by putting back all the threads on the
-condition variables list into the run queue. Note that a mutex
-must *not* be held while returning from a PP function.
-
-Perl locks and condition variables are both implemented as a
-condpair_t structure, containing a mutex, an "owner" condition
-variable, an owner thread field and another condition variable).
-The structure is attached by 'm' magic to any SV. pp_lock locks
-such an object by waiting on the ownercond condition variable until
-the owner field is zero and then setting the owner field to its own
-thread pointer. The lock is semantically recursive so if the owner
-field already matches the current thread then pp_lock returns
-straight away. If the owner field has to be filled in then
-unlock_condpair is queued as an end-of-block destructor and
-that function zeroes out the owner field and signals the ownercond
-condition variable, thus waking up any other thread that wants to
-lock it. When used as a condition variable, the condpair is locked
-(involving the above wait-for-ownership and setting the owner field)
-and the spare condition variable field is used for waiting on.
-
-
-Thread states
-
-
- $t->join
-R_JOINABLE ---------------------> R_JOINED >----\
- | \ pthread_join(t) | ^ |
- | \ | | join | pthread_join
- | \ | | |
- | \ | \------/
- | \ |
- | \ |
- | $t->detach\ pthread_detach |
- | _\| |
-ends| R_DETACHED ends | unlink
- | \ |
- | ends \ unlink |
- | \ |
- | \ |
- | \ |
- | \ |
- | \ |
- V join detach _\| V
-ZOMBIE ----------------------------> DEAD
- pthread_join pthread_detach
- and unlink and unlink
-
-
-
-Malcolm Beattie
-mbeattie@sable.ox.ac.uk
-Last updated: 27 November 1997
-
-Configure-related info updated 16 July 1998 by
-Andy Dougherty <doughera@lafayette.edu>
-
-Other minor updates 10 Feb 1999 by
-Gurusamy Sarathy
-
-More platforms added 26 Jul 1999 by
-Jarkko Hietaniemi
diff --git a/contrib/perl5/Todo b/contrib/perl5/Todo
deleted file mode 100644
index eb13f65..0000000
--- a/contrib/perl5/Todo
+++ /dev/null
@@ -1,88 +0,0 @@
-Always check out the latest perl5-porters discussions on these subjects
-before embarking on an implementation tour.
-
-Bugs
- remove recursion in regular expression engine
- fix memory leaks during compile failures
- make signal handling safe
-
-Tie Modules
- VecArray Implement array using vec()
- SubstrArray Implement array using substr()
- VirtualArray Implement array using a file
- ShiftSplice Defines shift et al in terms of splice method
-
-Would be nice to have
- pack "(stuff)*", "(stuff)?", "(stuff)+", "(stuff)4", ...
- contiguous bitfields in pack/unpack
- lexperl
- bundled perl preprocessor/macro facility
- this would solve many of the syntactic nice-to-haves
- use posix calls internally where possible
- gettimeofday (possibly best left for a module?)
- format BOTTOM
- -i rename file only when successfully changed
- all ARGV input should act like <>
- report HANDLE [formats].
- support in perlmain to rerun debugger
- regression tests using __DIE__ hook
- lexically scoped functions: my sub foo { ... }
- the basic concept is easy and sound,
- the difficulties begin with self-referential
- and mutually referential lexical subs: how to
- declare the subs?
- lexically scoped typeglobs? (lexical I/O handles work now)
- wantlvalue? more generalized want()/caller()?
- named prototypes: sub foo ($foo, @bar) { ... } ?
- regression/sanity tests for suidperl
- iterators/lazy evaluation/continuations/first/
- first_defined/short-circuiting grep/??
- This is a very thorny and hotly debated subject,
- tread carefully and do your homework first
- generalise Errno way of extracting cpp symbols and use that in
- Errno, Fcntl, POSIX (ExtUtils::CppSymbol?)
- the _r-problem: for all the {set,get,end}*() system database
- calls (and a couple more: readdir, *rand*, crypt, *time,
- tmpnam) there are in many systems the _r versions
- to be used in re-entrant (=multithreaded) code
- Icky things: the _r API is not standardized and
- the _r-forms require per-thread data to store their state
- cross-compilation support
- host vs target: compile in the host, get the executable to
- the target, get the possible input files to the target,
- execute in the target (and do not assume a UNIXish shell
- in the target! e.g. no command redirection can be assumed),
- get possible output files back to to host. this needs to work
- both during Configure and during the build. You cannot assume
- shared filesystems between the host and the target (you may need
- e.g. ftp), executing the target executable may involve e.g. rsh
- a way to make << and >> to shift bitvectors instead of numbers
-
-Possible pragmas
- debugger
- optimize (use less qw[memory cpu])
-
-Optimizations
- constant function cache
- switch structures
- foreach(reverse...)
- cache eval tree (unless lexical outer scope used (mark in &compiling?))
- rcatmaybe
- shrink opcode tables via multiple implementations selected in peep
- cache hash value? (Not a win, according to Guido)
- optimize away @_ where possible
- tail recursion removal
- "one pass" global destruction
- rewrite regexp parser for better integrated optimization
- LRU cache of regexp: foreach $pat (@pats) { foo() if /$pat/ }
-
-Vague possibilities
- ref function in list context?
- make tr/// return histogram in list context?
- loop control on do{} et al
- explicit switch statements
- built-in globbing
- compile to real threaded code
- structured types
- autocroak?
- modifiable $1 et al
diff --git a/contrib/perl5/Todo-5.6 b/contrib/perl5/Todo-5.6
deleted file mode 100644
index 71aca9c..0000000
--- a/contrib/perl5/Todo-5.6
+++ /dev/null
@@ -1,186 +0,0 @@
-Unicode support
- finish byte <-> utf8 and localencoding <-> utf8 conversions
- add Unicode::Map equivivalent to core
- add support for I/O disciplines
- - a way to specify disciplines when opening things:
- open(F, "<:crlf :utf16", $file)
- - a way to specify disciplines for an already opened handle:
- binmode(STDIN, ":slurp :raw")
- - a way to set default disciplines for all handle constructors:
- use open IN => ":any", OUT => ":utf8", SYS => ":utf16"
- eliminate need for "use utf8;"
- autoload byte.pm when byte:: is seen by the parser
- check uv_to_utf8() calls for buffer overflow
- make \uXXXX (and \u{XXXX}?) where XXXX are hex digits
- to work similarly to Unicode tech reports and Java
- notation \uXXXX (and already existing \x{XXXX))?
- more than four hexdigits? make also \U+XXXX work?
- overloadable regex assertions? e.g. in Thai \b cannot
- be deduced by any simple character class boundary rules,
- word boundaries must algorithmically computed
-
- see ext/Encode/Todo for notes and references about proper detection
- of malformed UTF-8
-
- SCSU? http://www.unicode.org/unicode/reports/tr6/
- Collation? http://www.unicode.org/unicode/reports/tr10/
- Normalization? http://www.unicode.org/unicode/reports/tr15/
- EBCDIC? http://www.unicode.org/unicode/reports/tr16/
- Regexes? http://www.unicode.org/unicode/reports/tr18/
- Case Mappings? http://www.unicode.org/unicode/reports/tr21/
-
- See also "Locales", "Regexen", and "Miscellaneous".
-
-Multi-threading
- support "use Thread;" under useithreads
- add mechanism to:
- - create new interpreter in a different thread
- - exchange data between interpreters/threads
- - share namespaces between interpreters/threads
- work out consistent semantics for exit/die in threads
- support for externally created threads?
- Thread::Pool?
-
-Compiler
- auto-produce executable
- typed lexicals should affect B::CC::load_pad
- workarounds to help Win32
- END blocks need saving in compiled output
- _AUTOLOAD prodding
- fix comppadlist (names in comppad_name can have fake SvCUR
- from where newASSIGNOP steals the field)
-
-Namespace cleanup
- CPP-space: restrict what we export from headers when !PERL_CORE
- header-space: move into CORE/perl/?
- API-space: complete the list of things that constitute public api
-
-Configure
- make configuring+building away from source directory work (VPATH et al)
- this is related to: cross-compilation configuring (see Todo)
- _r support (see Todo for mode detailed description)
- POSIX 1003.1 1996 Edition support--realtime stuff:
- POSIX semaphores, message queues, shared memory, realtime clocks,
- timers, signals (the metaconfig units mostly already exist for these)
- PREFERABLY AS AN EXTENSION
- UNIX98 support: reader-writer locks, realtime/asynchronous IO
- PREFERABLY AS AN EXTENSION
- IPv6 support: see RFC2292, RFC2553
- PREFERABLY AS AN EXTENSION
- there already is Socket6 in CPAN
-
-Long doubles
- figure out where the PV->NV->PV conversion gets it wrong at least
- in AIX and Tru64 (V5.0 and onwards) when using long doubles: see the
- regexp tricks we had to insert to t/comp/use.t and t/lib/bigfltpm.t,
- (?:9|8999\d+) and the like.
-
-64-bit support
- Configure probe for quad_t, uquad_t, and (argh) u_quad_t, they might
- be in some systems the only thing working as quadtype and uquadtype.
- more pain: long_long, u_long_long.
-
-Locales
- deprecate traditional/legacy locales?
- How do locales work across packages?
- figure out how to support Unicode locales
- suggestion: integrate the IBM Classes for Unicode (ICU)
- http://oss.software.ibm.com/developerworks/opensource/icu/project/
- ICU is "portable, open-source Unicode library with:
- charset-independent locales (with multiple locales
- simultaneously supported in same thread; character
- conversions; formatting/parsing for numbers, currencies,
- date/time and messages; message catalogs (resources);
- transliteration, collation, normalization, and text
- boundaries (grapheme, word, line-break))".
- Check out also the Locale Converter:
- http://alphaworks.ibm.com/tech/localeconverter
- There is also the iconv interface, either from XPG4 or GNU (glibc).
- iconv is about character set conversions.
- Either ICU or iconv would be valuable to get integrated
- into Perl, Configure already probes for libiconv and <iconv.h>.
-
-Regexen
- make RE engine thread-safe
- a way to do full character set arithmetics: now one can do
- addition, negate a whole class, and negate certain subclasses
- (e.g. \D, [:^digit:]), but a more generic way to add/subtract/
- intersect characters/classes, like described in the Unicode technical
- report on Regular Expression Guidelines,
- http://www.unicode.org/unicode/reports/tr18/
- (amusingly, the TR notes that difference and intersection
- can be done using "Perl-style look-ahead")
- difference syntax? maybe [[:alpha:][^abc]] meaning
- "all alphabetic expect a, b, and c"? or [[:alpha:]-[abc]]?
- (maybe bad, as we explicitly disallow such 'ranges')
- intersection syntax? maybe [[..]&[...]]?
- POSIX [=bar=] and [.zap.] would nice too but there's no API for them
- =bar= could be done with Unicode, though, see the Unicode TR #15 about
- normalization forms:
- http://www.unicode.org/unicode/reports/tr15/
- this is also a part of the Unicode 3.0:
- http://www.unicode.org/unicode/uni2book/u2.html
- executive summary: there are several different levels of 'equivalence'
- trie optimization: factor out common suffixes (and prefixes?)
- from |-alternating groups (both for exact strings and character
- classes, use lookaheads?)
- approximate matching
-
-Security
- use fchown, fchmod (and futimes?) internally when possible
- use fchdir(how portable?)
- create secure reliable portable temporary file modules
- audit the standard utilities for security problems and fix them
-
-Reliable Signals
- custom opcodes
- alternate runops() for signal despatch
- figure out how to die() in delayed sighandler
- make Thread::Signal work under useithreads
-
-Win32 stuff
- sort out the spawnvp() mess for system('a','b','c') compatibility
- work out DLL versioning
-
-Miscellaneous
- introduce @( and @) because group names can have spaces
- add new modules (Archive::Tar, Compress::Zlib, CPAN::FTP?)
- sub-second sleep()? alarm()? time()? (integrate Time::HiRes?
- Configure doesn't yet probe for usleep/nanosleep/ualarm but
- the units exist)
- floating point handling: nans, infinities, fp exception masks, etc.
- At least the following interfaces exist: fp_classify(), fp_class(),
- class(), isinf(), isfinite(), finite(), isnormal(), unordered(),
- <ieeefp.h>, <fp_class.h> (there are metaconfig units for all these),
- fp_setmask(), fp_getmask(), fp_setround(), fp_getround()
- (no metaconfig units yet for these).
- Don't forget finitel(), fp_classl(), fp_class_l(), (yes, both do,
- unfortunately, exist), and unorderedl().
- PREFERABLY AS AN EXTENSION.
- As of 5.6.1 there is cpp macro Perl_isnan().
- fix the basic arithmetics (+ - * / %) to preserve IVness/UVness if
- both arguments are IVs/UVs: it sucks that one cannot see
- the 'carry flag' (or equivalent) of the CPU from C,
- C is too high-level...
- replace pod2html with new PodtoHtml? (requires other modules from CPAN)
- automate testing with large parts of CPAN
- turn Cwd into an XS module? (Configure already probes for getcwd())
- mmap for speeding up input? (Configure already probes for the mmap family)
- sendmsg, recvmsg? (Configure doesn't probe for these but the units exist)
- setitimer, getitimer? (the metaconfig units exist)
-
-Ongoing
- keep filenames 8.3 friendly, where feasible
- upgrade to newer versions of all independently maintained modules
- comprehensive perldelta.pod
-
-Documentation
- describe new age patterns
- update perl{guts,call,embed,xs} with additions, changes to API
- convert more examples to use autovivified filehandles
- document Win32 choices
- spot-check all new modules for completeness
- better docs for pack()/unpack()
- reorg tutorials vs. reference sections
- make roffitall to be dynamical about its pods and libs
-
diff --git a/contrib/perl5/XSUB.h b/contrib/perl5/XSUB.h
deleted file mode 100644
index cfcad5d..0000000
--- a/contrib/perl5/XSUB.h
+++ /dev/null
@@ -1,400 +0,0 @@
-#ifndef _INC_PERL_XSUB_H
-#define _INC_PERL_XSUB_H 1
-
-/* first, some documentation for xsubpp-generated items */
-
-/*
-=for apidoc Amn|char*|CLASS
-Variable which is setup by C<xsubpp> to indicate the
-class name for a C++ XS constructor. This is always a C<char*>. See C<THIS>.
-
-=for apidoc Amn|(whatever)|RETVAL
-Variable which is setup by C<xsubpp> to hold the return value for an
-XSUB. This is always the proper type for the XSUB. See
-L<perlxs/"The RETVAL Variable">.
-
-=for apidoc Amn|(whatever)|THIS
-Variable which is setup by C<xsubpp> to designate the object in a C++
-XSUB. This is always the proper type for the C++ object. See C<CLASS> and
-L<perlxs/"Using XS With C++">.
-
-=for apidoc Amn|I32|items
-Variable which is setup by C<xsubpp> to indicate the number of
-items on the stack. See L<perlxs/"Variable-length Parameter Lists">.
-
-=for apidoc Amn|I32|ix
-Variable which is setup by C<xsubpp> to indicate which of an
-XSUB's aliases was used to invoke it. See L<perlxs/"The ALIAS: Keyword">.
-
-=for apidoc Am|SV*|ST|int ix
-Used to access elements on the XSUB's stack.
-
-=for apidoc AmU||XS
-Macro to declare an XSUB and its C parameter list. This is handled by
-C<xsubpp>.
-
-=for apidoc Ams||dXSARGS
-Sets up stack and mark pointers for an XSUB, calling dSP and dMARK. This
-is usually handled automatically by C<xsubpp>. Declares the C<items>
-variable to indicate the number of items on the stack.
-
-=for apidoc Ams||dXSI32
-Sets up the C<ix> variable for an XSUB which has aliases. This is usually
-handled automatically by C<xsubpp>.
-
-=cut
-*/
-
-#define ST(off) PL_stack_base[ax + (off)]
-
-#if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
-# define XS(name) __declspec(dllexport) void name(pTHXo_ CV* cv)
-#else
-# define XS(name) void name(pTHXo_ CV* cv)
-#endif
-
-#define dXSARGS \
- dSP; dMARK; \
- I32 ax = mark - PL_stack_base + 1; \
- I32 items = sp - mark
-
-#define dXSTARG SV * targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
- ? PAD_SV(PL_op->op_targ) : sv_newmortal())
-
-/* Should be used before final PUSHi etc. if not in PPCODE section. */
-#define XSprePUSH (sp = PL_stack_base + ax - 1)
-
-#define XSANY CvXSUBANY(cv)
-
-#define dXSI32 I32 ix = XSANY.any_i32
-
-#ifdef __cplusplus
-# define XSINTERFACE_CVT(ret,name) ret (*name)(...)
-#else
-# define XSINTERFACE_CVT(ret,name) ret (*name)()
-#endif
-#define dXSFUNCTION(ret) XSINTERFACE_CVT(ret,XSFUNCTION)
-#define XSINTERFACE_FUNC(ret,cv,f) ((XSINTERFACE_CVT(ret,cv))(f))
-#define XSINTERFACE_FUNC_SET(cv,f) \
- CvXSUBANY(cv).any_dptr = (void (*) (pTHXo_ void*))(f)
-
-/* Simple macros to put new mortal values onto the stack. */
-/* Typically used to return values from XS functions. */
-
-/*
-=for apidoc Am|void|XST_mIV|int pos|IV iv
-Place an integer into the specified position C<pos> on the stack. The
-value is stored in a new mortal SV.
-
-=for apidoc Am|void|XST_mNV|int pos|NV nv
-Place a double into the specified position C<pos> on the stack. The value
-is stored in a new mortal SV.
-
-=for apidoc Am|void|XST_mPV|int pos|char* str
-Place a copy of a string into the specified position C<pos> on the stack.
-The value is stored in a new mortal SV.
-
-=for apidoc Am|void|XST_mNO|int pos
-Place C<&PL_sv_no> into the specified position C<pos> on the
-stack.
-
-=for apidoc Am|void|XST_mYES|int pos
-Place C<&PL_sv_yes> into the specified position C<pos> on the
-stack.
-
-=for apidoc Am|void|XST_mUNDEF|int pos
-Place C<&PL_sv_undef> into the specified position C<pos> on the
-stack.
-
-=for apidoc Am|void|XSRETURN|int nitems
-Return from XSUB, indicating number of items on the stack. This is usually
-handled by C<xsubpp>.
-
-=for apidoc Am|void|XSRETURN_IV|IV iv
-Return an integer from an XSUB immediately. Uses C<XST_mIV>.
-
-=for apidoc Am|void|XSRETURN_NV|NV nv
-Return an double from an XSUB immediately. Uses C<XST_mNV>.
-
-=for apidoc Am|void|XSRETURN_PV|char* str
-Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>.
-
-=for apidoc Ams||XSRETURN_NO
-Return C<&PL_sv_no> from an XSUB immediately. Uses C<XST_mNO>.
-
-=for apidoc Ams||XSRETURN_YES
-Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>.
-
-=for apidoc Ams||XSRETURN_UNDEF
-Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>.
-
-=for apidoc Ams||XSRETURN_EMPTY
-Return an empty list from an XSUB immediately.
-
-=for apidoc AmU||newXSproto
-Used by C<xsubpp> to hook up XSUBs as Perl subs. Adds Perl prototypes to
-the subs.
-
-=for apidoc AmU||XS_VERSION
-The version identifier for an XS module. This is usually
-handled automatically by C<ExtUtils::MakeMaker>. See C<XS_VERSION_BOOTCHECK>.
-
-=for apidoc Ams||XS_VERSION_BOOTCHECK
-Macro to verify that a PM module's $VERSION variable matches the XS
-module's C<XS_VERSION> variable. This is usually handled automatically by
-C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">.
-
-=cut
-*/
-
-#define XST_mIV(i,v) (ST(i) = sv_2mortal(newSViv(v)) )
-#define XST_mNV(i,v) (ST(i) = sv_2mortal(newSVnv(v)) )
-#define XST_mPV(i,v) (ST(i) = sv_2mortal(newSVpv(v,0)))
-#define XST_mPVN(i,v,n) (ST(i) = sv_2mortal(newSVpvn(v,n)))
-#define XST_mNO(i) (ST(i) = &PL_sv_no )
-#define XST_mYES(i) (ST(i) = &PL_sv_yes )
-#define XST_mUNDEF(i) (ST(i) = &PL_sv_undef)
-
-#define XSRETURN(off) \
- STMT_START { \
- PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
- return; \
- } STMT_END
-
-#define XSRETURN_IV(v) STMT_START { XST_mIV(0,v); XSRETURN(1); } STMT_END
-#define XSRETURN_NV(v) STMT_START { XST_mNV(0,v); XSRETURN(1); } STMT_END
-#define XSRETURN_PV(v) STMT_START { XST_mPV(0,v); XSRETURN(1); } STMT_END
-#define XSRETURN_PVN(v,n) STMT_START { XST_mPVN(0,v,n); XSRETURN(1); } STMT_END
-#define XSRETURN_NO STMT_START { XST_mNO(0); XSRETURN(1); } STMT_END
-#define XSRETURN_YES STMT_START { XST_mYES(0); XSRETURN(1); } STMT_END
-#define XSRETURN_UNDEF STMT_START { XST_mUNDEF(0); XSRETURN(1); } STMT_END
-#define XSRETURN_EMPTY STMT_START { XSRETURN(0); } STMT_END
-
-#define newXSproto(a,b,c,d) sv_setpv((SV*)newXS(a,b,c), d)
-
-#ifdef XS_VERSION
-# define XS_VERSION_BOOTCHECK \
- STMT_START { \
- SV *tmpsv; STRLEN n_a; \
- char *vn = Nullch, *module = SvPV(ST(0),n_a); \
- if (items >= 2) /* version supplied as bootstrap arg */ \
- tmpsv = ST(1); \
- else { \
- /* XXX GV_ADDWARN */ \
- tmpsv = get_sv(Perl_form(aTHX_ "%s::%s", module, \
- vn = "XS_VERSION"), FALSE); \
- if (!tmpsv || !SvOK(tmpsv)) \
- tmpsv = get_sv(Perl_form(aTHX_ "%s::%s", module, \
- vn = "VERSION"), FALSE); \
- } \
- if (tmpsv && (!SvOK(tmpsv) || strNE(XS_VERSION, SvPV(tmpsv, n_a)))) \
- Perl_croak(aTHX_ "%s object version %s does not match %s%s%s%s %"SVf,\
- module, XS_VERSION, \
- vn ? "$" : "", vn ? module : "", vn ? "::" : "", \
- vn ? vn : "bootstrap parameter", tmpsv); \
- } STMT_END
-#else
-# define XS_VERSION_BOOTCHECK
-#endif
-
-#if 1 /* for compatibility */
-# define VTBL_sv &PL_vtbl_sv
-# define VTBL_env &PL_vtbl_env
-# define VTBL_envelem &PL_vtbl_envelem
-# define VTBL_sig &PL_vtbl_sig
-# define VTBL_sigelem &PL_vtbl_sigelem
-# define VTBL_pack &PL_vtbl_pack
-# define VTBL_packelem &PL_vtbl_packelem
-# define VTBL_dbline &PL_vtbl_dbline
-# define VTBL_isa &PL_vtbl_isa
-# define VTBL_isaelem &PL_vtbl_isaelem
-# define VTBL_arylen &PL_vtbl_arylen
-# define VTBL_glob &PL_vtbl_glob
-# define VTBL_mglob &PL_vtbl_mglob
-# define VTBL_nkeys &PL_vtbl_nkeys
-# define VTBL_taint &PL_vtbl_taint
-# define VTBL_substr &PL_vtbl_substr
-# define VTBL_vec &PL_vtbl_vec
-# define VTBL_pos &PL_vtbl_pos
-# define VTBL_bm &PL_vtbl_bm
-# define VTBL_fm &PL_vtbl_fm
-# define VTBL_uvar &PL_vtbl_uvar
-# define VTBL_defelem &PL_vtbl_defelem
-# define VTBL_regexp &PL_vtbl_regexp
-# define VTBL_regdata &PL_vtbl_regdata
-# define VTBL_regdatum &PL_vtbl_regdatum
-# ifdef USE_LOCALE_COLLATE
-# define VTBL_collxfrm &PL_vtbl_collxfrm
-# endif
-# define VTBL_amagic &PL_vtbl_amagic
-# define VTBL_amagicelem &PL_vtbl_amagicelem
-#endif
-
-#include "perlapi.h"
-#include "objXSUB.h"
-
-#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
-# undef aTHX
-# undef aTHX_
-# define aTHX PERL_GET_THX
-# define aTHX_ aTHX,
-#endif
-
-#if (defined(PERL_CAPI) || defined(PERL_IMPLICIT_SYS)) && !defined(PERL_CORE)
-# ifndef NO_XSLOCKS
-# undef closedir
-# undef opendir
-# undef stdin
-# undef stdout
-# undef stderr
-# undef feof
-# undef ferror
-# undef fgetpos
-# undef ioctl
-# undef getlogin
-# undef setjmp
-# undef getc
-# undef ungetc
-# undef fileno
-
-# define mkdir PerlDir_mkdir
-# define chdir PerlDir_chdir
-# define rmdir PerlDir_rmdir
-# define closedir PerlDir_close
-# define opendir PerlDir_open
-# define readdir PerlDir_read
-# define rewinddir PerlDir_rewind
-# define seekdir PerlDir_seek
-# define telldir PerlDir_tell
-# define putenv PerlEnv_putenv
-# define getenv PerlEnv_getenv
-# define uname PerlEnv_uname
-# define stdin PerlIO_stdin()
-# define stdout PerlIO_stdout()
-# define stderr PerlIO_stderr()
-# define fopen PerlIO_open
-# define fclose PerlIO_close
-# define feof PerlIO_eof
-# define ferror PerlIO_error
-# define fclearerr PerlIO_clearerr
-# define getc PerlIO_getc
-# define fputc(c, f) PerlIO_putc(f,c)
-# define fputs(s, f) PerlIO_puts(f,s)
-# define fflush PerlIO_flush
-# define ungetc(c, f) PerlIO_ungetc((f),(c))
-# define fileno PerlIO_fileno
-# define fdopen PerlIO_fdopen
-# define freopen PerlIO_reopen
-# define fread(b,s,c,f) PerlIO_read((f),(b),(s*c))
-# define fwrite(b,s,c,f) PerlIO_write((f),(b),(s*c))
-# define setbuf PerlIO_setbuf
-# define setvbuf PerlIO_setvbuf
-# define setlinebuf PerlIO_setlinebuf
-# define stdoutf PerlIO_stdoutf
-# define vfprintf PerlIO_vprintf
-# define ftell PerlIO_tell
-# define fseek PerlIO_seek
-# define fgetpos PerlIO_getpos
-# define fsetpos PerlIO_setpos
-# define frewind PerlIO_rewind
-# define tmpfile PerlIO_tmpfile
-# define access PerlLIO_access
-# define chmod PerlLIO_chmod
-# define chsize PerlLIO_chsize
-# define close PerlLIO_close
-# define dup PerlLIO_dup
-# define dup2 PerlLIO_dup2
-# define flock PerlLIO_flock
-# define fstat PerlLIO_fstat
-# define ioctl PerlLIO_ioctl
-# define isatty PerlLIO_isatty
-# define link PerlLIO_link
-# define lseek PerlLIO_lseek
-# define lstat PerlLIO_lstat
-# define mktemp PerlLIO_mktemp
-# define open PerlLIO_open
-# define read PerlLIO_read
-# define rename PerlLIO_rename
-# define setmode PerlLIO_setmode
-# define stat(buf,sb) PerlLIO_stat(buf,sb)
-# define tmpnam PerlLIO_tmpnam
-# define umask PerlLIO_umask
-# define unlink PerlLIO_unlink
-# define utime PerlLIO_utime
-# define write PerlLIO_write
-# define malloc PerlMem_malloc
-# define realloc PerlMem_realloc
-# define free PerlMem_free
-# define abort PerlProc_abort
-# define exit PerlProc_exit
-# define _exit PerlProc__exit
-# define execl PerlProc_execl
-# define execv PerlProc_execv
-# define execvp PerlProc_execvp
-# define getuid PerlProc_getuid
-# define geteuid PerlProc_geteuid
-# define getgid PerlProc_getgid
-# define getegid PerlProc_getegid
-# define getlogin PerlProc_getlogin
-# define kill PerlProc_kill
-# define killpg PerlProc_killpg
-# define pause PerlProc_pause
-# define popen PerlProc_popen
-# define pclose PerlProc_pclose
-# define pipe PerlProc_pipe
-# define setuid PerlProc_setuid
-# define setgid PerlProc_setgid
-# define sleep PerlProc_sleep
-# define times PerlProc_times
-# define wait PerlProc_wait
-# define setjmp PerlProc_setjmp
-# define longjmp PerlProc_longjmp
-# define signal PerlProc_signal
-# define getpid PerlProc_getpid
-# define htonl PerlSock_htonl
-# define htons PerlSock_htons
-# define ntohl PerlSock_ntohl
-# define ntohs PerlSock_ntohs
-# define accept PerlSock_accept
-# define bind PerlSock_bind
-# define connect PerlSock_connect
-# define endhostent PerlSock_endhostent
-# define endnetent PerlSock_endnetent
-# define endprotoent PerlSock_endprotoent
-# define endservent PerlSock_endservent
-# define gethostbyaddr PerlSock_gethostbyaddr
-# define gethostbyname PerlSock_gethostbyname
-# define gethostent PerlSock_gethostent
-# define gethostname PerlSock_gethostname
-# define getnetbyaddr PerlSock_getnetbyaddr
-# define getnetbyname PerlSock_getnetbyname
-# define getnetent PerlSock_getnetent
-# define getpeername PerlSock_getpeername
-# define getprotobyname PerlSock_getprotobyname
-# define getprotobynumber PerlSock_getprotobynumber
-# define getprotoent PerlSock_getprotoent
-# define getservbyname PerlSock_getservbyname
-# define getservbyport PerlSock_getservbyport
-# define getservent PerlSock_getservent
-# define getsockname PerlSock_getsockname
-# define getsockopt PerlSock_getsockopt
-# define inet_addr PerlSock_inet_addr
-# define inet_ntoa PerlSock_inet_ntoa
-# define listen PerlSock_listen
-# define recv PerlSock_recv
-# define recvfrom PerlSock_recvfrom
-# define select PerlSock_select
-# define send PerlSock_send
-# define sendto PerlSock_sendto
-# define sethostent PerlSock_sethostent
-# define setnetent PerlSock_setnetent
-# define setprotoent PerlSock_setprotoent
-# define setservent PerlSock_setservent
-# define setsockopt PerlSock_setsockopt
-# define shutdown PerlSock_shutdown
-# define socket PerlSock_socket
-# define socketpair PerlSock_socketpair
-# endif /* NO_XSLOCKS */
-#endif /* PERL_CAPI */
-
-#endif /* _INC_PERL_XSUB_H */ /* include guard */
diff --git a/contrib/perl5/av.c b/contrib/perl5/av.c
deleted file mode 100644
index 273fed9..0000000
--- a/contrib/perl5/av.c
+++ /dev/null
@@ -1,920 +0,0 @@
-/* av.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "...for the Entwives desired order, and plenty, and peace (by which they
- * meant that things should remain where they had set them)." --Treebeard
- */
-
-#include "EXTERN.h"
-#define PERL_IN_AV_C
-#include "perl.h"
-
-void
-Perl_av_reify(pTHX_ AV *av)
-{
- I32 key;
- SV* sv;
-
- if (AvREAL(av))
- return;
-#ifdef DEBUGGING
- if (SvTIED_mg((SV*)av, 'P') && ckWARN_d(WARN_DEBUGGING))
- Perl_warner(aTHX_ WARN_DEBUGGING, "av_reify called on tied array");
-#endif
- key = AvMAX(av) + 1;
- while (key > AvFILLp(av) + 1)
- AvARRAY(av)[--key] = &PL_sv_undef;
- while (key) {
- sv = AvARRAY(av)[--key];
- assert(sv);
- if (sv != &PL_sv_undef)
- (void)SvREFCNT_inc(sv);
- }
- key = AvARRAY(av) - AvALLOC(av);
- while (key)
- AvALLOC(av)[--key] = &PL_sv_undef;
- AvREIFY_off(av);
- AvREAL_on(av);
-}
-
-/*
-=for apidoc av_extend
-
-Pre-extend an array. The C<key> is the index to which the array should be
-extended.
-
-=cut
-*/
-
-void
-Perl_av_extend(pTHX_ AV *av, I32 key)
-{
- MAGIC *mg;
- if ((mg = SvTIED_mg((SV*)av, 'P'))) {
- dSP;
- ENTER;
- SAVETMPS;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,2);
- PUSHs(SvTIED_obj((SV*)av, mg));
- PUSHs(sv_2mortal(newSViv(key+1)));
- PUTBACK;
- call_method("EXTEND", G_SCALAR|G_DISCARD);
- POPSTACK;
- FREETMPS;
- LEAVE;
- return;
- }
- if (key > AvMAX(av)) {
- SV** ary;
- I32 tmp;
- I32 newmax;
-
- if (AvALLOC(av) != AvARRAY(av)) {
- ary = AvALLOC(av) + AvFILLp(av) + 1;
- tmp = AvARRAY(av) - AvALLOC(av);
- Move(AvARRAY(av), AvALLOC(av), AvFILLp(av)+1, SV*);
- AvMAX(av) += tmp;
- SvPVX(av) = (char*)AvALLOC(av);
- if (AvREAL(av)) {
- while (tmp)
- ary[--tmp] = &PL_sv_undef;
- }
-
- if (key > AvMAX(av) - 10) {
- newmax = key + AvMAX(av);
- goto resize;
- }
- }
- else {
- if (AvALLOC(av)) {
-#ifndef STRANGE_MALLOC
- MEM_SIZE bytes;
- IV itmp;
-#endif
-
-#if defined(MYMALLOC) && !defined(LEAKTEST)
- newmax = malloced_size((void*)AvALLOC(av))/sizeof(SV*) - 1;
-
- if (key <= newmax)
- goto resized;
-#endif
- newmax = key + AvMAX(av) / 5;
- resize:
-#if defined(STRANGE_MALLOC) || defined(MYMALLOC)
- Renew(AvALLOC(av),newmax+1, SV*);
-#else
- bytes = (newmax + 1) * sizeof(SV*);
-#define MALLOC_OVERHEAD 16
- itmp = MALLOC_OVERHEAD;
- while (itmp - MALLOC_OVERHEAD < bytes)
- itmp += itmp;
- itmp -= MALLOC_OVERHEAD;
- itmp /= sizeof(SV*);
- assert(itmp > newmax);
- newmax = itmp - 1;
- assert(newmax >= AvMAX(av));
- New(2,ary, newmax+1, SV*);
- Copy(AvALLOC(av), ary, AvMAX(av)+1, SV*);
- if (AvMAX(av) > 64)
- offer_nice_chunk(AvALLOC(av), (AvMAX(av)+1) * sizeof(SV*));
- else
- Safefree(AvALLOC(av));
- AvALLOC(av) = ary;
-#endif
- resized:
- ary = AvALLOC(av) + AvMAX(av) + 1;
- tmp = newmax - AvMAX(av);
- if (av == PL_curstack) { /* Oops, grew stack (via av_store()?) */
- PL_stack_sp = AvALLOC(av) + (PL_stack_sp - PL_stack_base);
- PL_stack_base = AvALLOC(av);
- PL_stack_max = PL_stack_base + newmax;
- }
- }
- else {
- newmax = key < 3 ? 3 : key;
- New(2,AvALLOC(av), newmax+1, SV*);
- ary = AvALLOC(av) + 1;
- tmp = newmax;
- AvALLOC(av)[0] = &PL_sv_undef; /* For the stacks */
- }
- if (AvREAL(av)) {
- while (tmp)
- ary[--tmp] = &PL_sv_undef;
- }
-
- SvPVX(av) = (char*)AvALLOC(av);
- AvMAX(av) = newmax;
- }
- }
-}
-
-/*
-=for apidoc av_fetch
-
-Returns the SV at the specified index in the array. The C<key> is the
-index. If C<lval> is set then the fetch will be part of a store. Check
-that the return value is non-null before dereferencing it to a C<SV*>.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
-more information on how to use this function on tied arrays.
-
-=cut
-*/
-
-SV**
-Perl_av_fetch(pTHX_ register AV *av, I32 key, I32 lval)
-{
- SV *sv;
-
- if (!av)
- return 0;
-
- if (key < 0) {
- key += AvFILL(av) + 1;
- if (key < 0)
- return 0;
- }
-
- if (SvRMAGICAL(av)) {
- if (mg_find((SV*)av,'P') || mg_find((SV*)av,'D')) {
- sv = sv_newmortal();
- mg_copy((SV*)av, sv, 0, key);
- PL_av_fetch_sv = sv;
- return &PL_av_fetch_sv;
- }
- }
-
- if (key > AvFILLp(av)) {
- if (!lval)
- return 0;
- sv = NEWSV(5,0);
- return av_store(av,key,sv);
- }
- if (AvARRAY(av)[key] == &PL_sv_undef) {
- emptyness:
- if (lval) {
- sv = NEWSV(6,0);
- return av_store(av,key,sv);
- }
- return 0;
- }
- else if (AvREIFY(av)
- && (!AvARRAY(av)[key] /* eg. @_ could have freed elts */
- || SvTYPE(AvARRAY(av)[key]) == SVTYPEMASK)) {
- AvARRAY(av)[key] = &PL_sv_undef; /* 1/2 reify */
- goto emptyness;
- }
- return &AvARRAY(av)[key];
-}
-
-/*
-=for apidoc av_store
-
-Stores an SV in an array. The array index is specified as C<key>. The
-return value will be NULL if the operation failed or if the value did not
-need to be actually stored within the array (as in the case of tied
-arrays). Otherwise it can be dereferenced to get the original C<SV*>. Note
-that the caller is responsible for suitably incrementing the reference
-count of C<val> before the call, and decrementing it if the function
-returned NULL.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
-more information on how to use this function on tied arrays.
-
-=cut
-*/
-
-SV**
-Perl_av_store(pTHX_ register AV *av, I32 key, SV *val)
-{
- SV** ary;
-
- if (!av)
- return 0;
- if (!val)
- val = &PL_sv_undef;
-
- if (key < 0) {
- key += AvFILL(av) + 1;
- if (key < 0)
- return 0;
- }
-
- if (SvREADONLY(av) && key >= AvFILL(av))
- Perl_croak(aTHX_ PL_no_modify);
-
- if (SvRMAGICAL(av)) {
- if (mg_find((SV*)av,'P')) {
- if (val != &PL_sv_undef) {
- mg_copy((SV*)av, val, 0, key);
- }
- return 0;
- }
- }
-
- if (!AvREAL(av) && AvREIFY(av))
- av_reify(av);
- if (key > AvMAX(av))
- av_extend(av,key);
- ary = AvARRAY(av);
- if (AvFILLp(av) < key) {
- if (!AvREAL(av)) {
- if (av == PL_curstack && key > PL_stack_sp - PL_stack_base)
- PL_stack_sp = PL_stack_base + key; /* XPUSH in disguise */
- do
- ary[++AvFILLp(av)] = &PL_sv_undef;
- while (AvFILLp(av) < key);
- }
- AvFILLp(av) = key;
- }
- else if (AvREAL(av))
- SvREFCNT_dec(ary[key]);
- ary[key] = val;
- if (SvSMAGICAL(av)) {
- if (val != &PL_sv_undef) {
- MAGIC* mg = SvMAGIC(av);
- sv_magic(val, (SV*)av, toLOWER(mg->mg_type), 0, key);
- }
- mg_set((SV*)av);
- }
- return &ary[key];
-}
-
-/*
-=for apidoc newAV
-
-Creates a new AV. The reference count is set to 1.
-
-=cut
-*/
-
-AV *
-Perl_newAV(pTHX)
-{
- register AV *av;
-
- av = (AV*)NEWSV(3,0);
- sv_upgrade((SV *)av, SVt_PVAV);
- AvREAL_on(av);
- AvALLOC(av) = 0;
- SvPVX(av) = 0;
- AvMAX(av) = AvFILLp(av) = -1;
- return av;
-}
-
-/*
-=for apidoc av_make
-
-Creates a new AV and populates it with a list of SVs. The SVs are copied
-into the array, so they may be freed after the call to av_make. The new AV
-will have a reference count of 1.
-
-=cut
-*/
-
-AV *
-Perl_av_make(pTHX_ register I32 size, register SV **strp)
-{
- register AV *av;
- register I32 i;
- register SV** ary;
-
- av = (AV*)NEWSV(8,0);
- sv_upgrade((SV *) av,SVt_PVAV);
- AvFLAGS(av) = AVf_REAL;
- if (size) { /* `defined' was returning undef for size==0 anyway. */
- New(4,ary,size,SV*);
- AvALLOC(av) = ary;
- SvPVX(av) = (char*)ary;
- AvFILLp(av) = size - 1;
- AvMAX(av) = size - 1;
- for (i = 0; i < size; i++) {
- assert (*strp);
- ary[i] = NEWSV(7,0);
- sv_setsv(ary[i], *strp);
- strp++;
- }
- }
- return av;
-}
-
-AV *
-Perl_av_fake(pTHX_ register I32 size, register SV **strp)
-{
- register AV *av;
- register SV** ary;
-
- av = (AV*)NEWSV(9,0);
- sv_upgrade((SV *)av, SVt_PVAV);
- New(4,ary,size+1,SV*);
- AvALLOC(av) = ary;
- Copy(strp,ary,size,SV*);
- AvFLAGS(av) = AVf_REIFY;
- SvPVX(av) = (char*)ary;
- AvFILLp(av) = size - 1;
- AvMAX(av) = size - 1;
- while (size--) {
- assert (*strp);
- SvTEMP_off(*strp);
- strp++;
- }
- return av;
-}
-
-/*
-=for apidoc av_clear
-
-Clears an array, making it empty. Does not free the memory used by the
-array itself.
-
-=cut
-*/
-
-void
-Perl_av_clear(pTHX_ register AV *av)
-{
- register I32 key;
- SV** ary;
-
-#ifdef DEBUGGING
- if (SvREFCNT(av) == 0 && ckWARN_d(WARN_DEBUGGING)) {
- Perl_warner(aTHX_ WARN_DEBUGGING, "Attempt to clear deleted array");
- }
-#endif
- if (!av)
- return;
- /*SUPPRESS 560*/
-
- if (SvREADONLY(av))
- Perl_croak(aTHX_ PL_no_modify);
-
- /* Give any tie a chance to cleanup first */
- if (SvRMAGICAL(av))
- mg_clear((SV*)av);
-
- if (AvMAX(av) < 0)
- return;
-
- if (AvREAL(av)) {
- ary = AvARRAY(av);
- key = AvFILLp(av) + 1;
- while (key) {
- SvREFCNT_dec(ary[--key]);
- ary[key] = &PL_sv_undef;
- }
- }
- if ((key = AvARRAY(av) - AvALLOC(av))) {
- AvMAX(av) += key;
- SvPVX(av) = (char*)AvALLOC(av);
- }
- AvFILLp(av) = -1;
-
-}
-
-/*
-=for apidoc av_undef
-
-Undefines the array. Frees the memory used by the array itself.
-
-=cut
-*/
-
-void
-Perl_av_undef(pTHX_ register AV *av)
-{
- register I32 key;
-
- if (!av)
- return;
- /*SUPPRESS 560*/
-
- /* Give any tie a chance to cleanup first */
- if (SvTIED_mg((SV*)av, 'P'))
- av_fill(av, -1); /* mg_clear() ? */
-
- if (AvREAL(av)) {
- key = AvFILLp(av) + 1;
- while (key)
- SvREFCNT_dec(AvARRAY(av)[--key]);
- }
- Safefree(AvALLOC(av));
- AvALLOC(av) = 0;
- SvPVX(av) = 0;
- AvMAX(av) = AvFILLp(av) = -1;
- if (AvARYLEN(av)) {
- SvREFCNT_dec(AvARYLEN(av));
- AvARYLEN(av) = 0;
- }
-}
-
-/*
-=for apidoc av_push
-
-Pushes an SV onto the end of the array. The array will grow automatically
-to accommodate the addition.
-
-=cut
-*/
-
-void
-Perl_av_push(pTHX_ register AV *av, SV *val)
-{
- MAGIC *mg;
- if (!av)
- return;
- if (SvREADONLY(av))
- Perl_croak(aTHX_ PL_no_modify);
-
- if ((mg = SvTIED_mg((SV*)av, 'P'))) {
- dSP;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,2);
- PUSHs(SvTIED_obj((SV*)av, mg));
- PUSHs(val);
- PUTBACK;
- ENTER;
- call_method("PUSH", G_SCALAR|G_DISCARD);
- LEAVE;
- POPSTACK;
- return;
- }
- av_store(av,AvFILLp(av)+1,val);
-}
-
-/*
-=for apidoc av_pop
-
-Pops an SV off the end of the array. Returns C<&PL_sv_undef> if the array
-is empty.
-
-=cut
-*/
-
-SV *
-Perl_av_pop(pTHX_ register AV *av)
-{
- SV *retval;
- MAGIC* mg;
-
- if (!av || AvFILL(av) < 0)
- return &PL_sv_undef;
- if (SvREADONLY(av))
- Perl_croak(aTHX_ PL_no_modify);
- if ((mg = SvTIED_mg((SV*)av, 'P'))) {
- dSP;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)av, mg));
- PUTBACK;
- ENTER;
- if (call_method("POP", G_SCALAR)) {
- retval = newSVsv(*PL_stack_sp--);
- } else {
- retval = &PL_sv_undef;
- }
- LEAVE;
- POPSTACK;
- return retval;
- }
- retval = AvARRAY(av)[AvFILLp(av)];
- AvARRAY(av)[AvFILLp(av)--] = &PL_sv_undef;
- if (SvSMAGICAL(av))
- mg_set((SV*)av);
- return retval;
-}
-
-/*
-=for apidoc av_unshift
-
-Unshift the given number of C<undef> values onto the beginning of the
-array. The array will grow automatically to accommodate the addition. You
-must then use C<av_store> to assign values to these new elements.
-
-=cut
-*/
-
-void
-Perl_av_unshift(pTHX_ register AV *av, register I32 num)
-{
- register I32 i;
- register SV **ary;
- MAGIC* mg;
- I32 slide;
-
- if (!av || num <= 0)
- return;
- if (SvREADONLY(av))
- Perl_croak(aTHX_ PL_no_modify);
-
- if ((mg = SvTIED_mg((SV*)av, 'P'))) {
- dSP;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,1+num);
- PUSHs(SvTIED_obj((SV*)av, mg));
- while (num-- > 0) {
- PUSHs(&PL_sv_undef);
- }
- PUTBACK;
- ENTER;
- call_method("UNSHIFT", G_SCALAR|G_DISCARD);
- LEAVE;
- POPSTACK;
- return;
- }
-
- if (!AvREAL(av) && AvREIFY(av))
- av_reify(av);
- i = AvARRAY(av) - AvALLOC(av);
- if (i) {
- if (i > num)
- i = num;
- num -= i;
-
- AvMAX(av) += i;
- AvFILLp(av) += i;
- SvPVX(av) = (char*)(AvARRAY(av) - i);
- }
- if (num) {
- i = AvFILLp(av);
- /* Create extra elements */
- slide = i > 0 ? i : 0;
- num += slide;
- av_extend(av, i + num);
- AvFILLp(av) += num;
- ary = AvARRAY(av);
- Move(ary, ary + num, i + 1, SV*);
- do {
- ary[--num] = &PL_sv_undef;
- } while (num);
- /* Make extra elements into a buffer */
- AvMAX(av) -= slide;
- AvFILLp(av) -= slide;
- SvPVX(av) = (char*)(AvARRAY(av) + slide);
- }
-}
-
-/*
-=for apidoc av_shift
-
-Shifts an SV off the beginning of the array.
-
-=cut
-*/
-
-SV *
-Perl_av_shift(pTHX_ register AV *av)
-{
- SV *retval;
- MAGIC* mg;
-
- if (!av || AvFILL(av) < 0)
- return &PL_sv_undef;
- if (SvREADONLY(av))
- Perl_croak(aTHX_ PL_no_modify);
- if ((mg = SvTIED_mg((SV*)av, 'P'))) {
- dSP;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)av, mg));
- PUTBACK;
- ENTER;
- if (call_method("SHIFT", G_SCALAR)) {
- retval = newSVsv(*PL_stack_sp--);
- } else {
- retval = &PL_sv_undef;
- }
- LEAVE;
- POPSTACK;
- return retval;
- }
- retval = *AvARRAY(av);
- if (AvREAL(av))
- *AvARRAY(av) = &PL_sv_undef;
- SvPVX(av) = (char*)(AvARRAY(av) + 1);
- AvMAX(av)--;
- AvFILLp(av)--;
- if (SvSMAGICAL(av))
- mg_set((SV*)av);
- return retval;
-}
-
-/*
-=for apidoc av_len
-
-Returns the highest index in the array. Returns -1 if the array is
-empty.
-
-=cut
-*/
-
-I32
-Perl_av_len(pTHX_ register AV *av)
-{
- return AvFILL(av);
-}
-
-/*
-=for apidoc av_fill
-
-Ensure than an array has a given number of elements, equivalent to
-Perl's C<$#array = $fill;>.
-
-=cut
-*/
-void
-Perl_av_fill(pTHX_ register AV *av, I32 fill)
-{
- MAGIC *mg;
- if (!av)
- Perl_croak(aTHX_ "panic: null array");
- if (fill < 0)
- fill = -1;
- if ((mg = SvTIED_mg((SV*)av, 'P'))) {
- dSP;
- ENTER;
- SAVETMPS;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,2);
- PUSHs(SvTIED_obj((SV*)av, mg));
- PUSHs(sv_2mortal(newSViv(fill+1)));
- PUTBACK;
- call_method("STORESIZE", G_SCALAR|G_DISCARD);
- POPSTACK;
- FREETMPS;
- LEAVE;
- return;
- }
- if (fill <= AvMAX(av)) {
- I32 key = AvFILLp(av);
- SV** ary = AvARRAY(av);
-
- if (AvREAL(av)) {
- while (key > fill) {
- SvREFCNT_dec(ary[key]);
- ary[key--] = &PL_sv_undef;
- }
- }
- else {
- while (key < fill)
- ary[++key] = &PL_sv_undef;
- }
-
- AvFILLp(av) = fill;
- if (SvSMAGICAL(av))
- mg_set((SV*)av);
- }
- else
- (void)av_store(av,fill,&PL_sv_undef);
-}
-
-/*
-=for apidoc av_delete
-
-Deletes the element indexed by C<key> from the array. Returns the
-deleted element. C<flags> is currently ignored.
-
-=cut
-*/
-SV *
-Perl_av_delete(pTHX_ AV *av, I32 key, I32 flags)
-{
- SV *sv;
-
- if (!av)
- return Nullsv;
- if (SvREADONLY(av))
- Perl_croak(aTHX_ PL_no_modify);
- if (key < 0) {
- key += AvFILL(av) + 1;
- if (key < 0)
- return Nullsv;
- }
- if (SvRMAGICAL(av)) {
- SV **svp;
- if ((mg_find((SV*)av,'P') || mg_find((SV*)av,'D'))
- && (svp = av_fetch(av, key, TRUE)))
- {
- sv = *svp;
- mg_clear(sv);
- if (mg_find(sv, 'p')) {
- sv_unmagic(sv, 'p'); /* No longer an element */
- return sv;
- }
- return Nullsv; /* element cannot be deleted */
- }
- }
- if (key > AvFILLp(av))
- return Nullsv;
- else {
- sv = AvARRAY(av)[key];
- if (key == AvFILLp(av)) {
- do {
- AvFILLp(av)--;
- } while (--key >= 0 && AvARRAY(av)[key] == &PL_sv_undef);
- }
- else
- AvARRAY(av)[key] = &PL_sv_undef;
- if (SvSMAGICAL(av))
- mg_set((SV*)av);
- }
- if (flags & G_DISCARD) {
- SvREFCNT_dec(sv);
- sv = Nullsv;
- }
- return sv;
-}
-
-/*
-=for apidoc av_exists
-
-Returns true if the element indexed by C<key> has been initialized.
-
-This relies on the fact that uninitialized array elements are set to
-C<&PL_sv_undef>.
-
-=cut
-*/
-bool
-Perl_av_exists(pTHX_ AV *av, I32 key)
-{
- if (!av)
- return FALSE;
- if (key < 0) {
- key += AvFILL(av) + 1;
- if (key < 0)
- return FALSE;
- }
- if (SvRMAGICAL(av)) {
- if (mg_find((SV*)av,'P') || mg_find((SV*)av,'D')) {
- SV *sv = sv_newmortal();
- MAGIC *mg;
-
- mg_copy((SV*)av, sv, 0, key);
- mg = mg_find(sv, 'p');
- if (mg) {
- magic_existspack(sv, mg);
- return SvTRUE(sv);
- }
- }
- }
- if (key <= AvFILLp(av) && AvARRAY(av)[key] != &PL_sv_undef
- && AvARRAY(av)[key])
- {
- return TRUE;
- }
- else
- return FALSE;
-}
-
-/* AVHV: Support for treating arrays as if they were hashes. The
- * first element of the array should be a hash reference that maps
- * hash keys to array indices.
- */
-
-STATIC I32
-S_avhv_index_sv(pTHX_ SV* sv)
-{
- I32 index = SvIV(sv);
- if (index < 1)
- Perl_croak(aTHX_ "Bad index while coercing array into hash");
- return index;
-}
-
-STATIC I32
-S_avhv_index(pTHX_ AV *av, SV *keysv, U32 hash)
-{
- HV *keys;
- HE *he;
- STRLEN n_a;
-
- keys = avhv_keys(av);
- he = hv_fetch_ent(keys, keysv, FALSE, hash);
- if (!he)
- Perl_croak(aTHX_ "No such pseudo-hash field \"%s\"", SvPV(keysv,n_a));
- return avhv_index_sv(HeVAL(he));
-}
-
-HV*
-Perl_avhv_keys(pTHX_ AV *av)
-{
- SV **keysp = av_fetch(av, 0, FALSE);
- if (keysp) {
- SV *sv = *keysp;
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvROK(sv)) {
- sv = SvRV(sv);
- if (SvTYPE(sv) == SVt_PVHV)
- return (HV*)sv;
- }
- }
- Perl_croak(aTHX_ "Can't coerce array into hash");
- return Nullhv;
-}
-
-SV**
-Perl_avhv_store_ent(pTHX_ AV *av, SV *keysv, SV *val, U32 hash)
-{
- return av_store(av, avhv_index(av, keysv, hash), val);
-}
-
-SV**
-Perl_avhv_fetch_ent(pTHX_ AV *av, SV *keysv, I32 lval, U32 hash)
-{
- return av_fetch(av, avhv_index(av, keysv, hash), lval);
-}
-
-SV *
-Perl_avhv_delete_ent(pTHX_ AV *av, SV *keysv, I32 flags, U32 hash)
-{
- HV *keys = avhv_keys(av);
- HE *he;
-
- he = hv_fetch_ent(keys, keysv, FALSE, hash);
- if (!he || !SvOK(HeVAL(he)))
- return Nullsv;
-
- return av_delete(av, avhv_index_sv(HeVAL(he)), flags);
-}
-
-/* Check for the existence of an element named by a given key.
- *
- */
-bool
-Perl_avhv_exists_ent(pTHX_ AV *av, SV *keysv, U32 hash)
-{
- HV *keys = avhv_keys(av);
- HE *he;
-
- he = hv_fetch_ent(keys, keysv, FALSE, hash);
- if (!he || !SvOK(HeVAL(he)))
- return FALSE;
-
- return av_exists(av, avhv_index_sv(HeVAL(he)));
-}
-
-HE *
-Perl_avhv_iternext(pTHX_ AV *av)
-{
- HV *keys = avhv_keys(av);
- return hv_iternext(keys);
-}
-
-SV *
-Perl_avhv_iterval(pTHX_ AV *av, register HE *entry)
-{
- SV *sv = hv_iterval(avhv_keys(av), entry);
- return *av_fetch(av, avhv_index_sv(sv), TRUE);
-}
diff --git a/contrib/perl5/av.h b/contrib/perl5/av.h
deleted file mode 100644
index 8f130d6..0000000
--- a/contrib/perl5/av.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* av.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-struct xpvav {
- char* xav_array; /* pointer to first array element */
- SSize_t xav_fill; /* Index of last element present */
- SSize_t xav_max; /* max index for which array has space */
- IV xof_off; /* ptr is incremented by offset */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* magic for scalar array */
- HV* xmg_stash; /* class package */
-
- SV** xav_alloc; /* pointer to malloced string */
- SV* xav_arylen;
- U8 xav_flags;
-};
-
-
-/* AVf_REAL is set for all AVs whose xav_array contents are refcounted.
- * Some things like "@_" and the scratchpad list do not set this, to
- * indicate that they are cheating (for efficiency) by not refcounting
- * the AV's contents.
- *
- * AVf_REIFY is only meaningful on such "fake" AVs (i.e. where AVf_REAL
- * is not set). It indicates that the fake AV is capable of becoming
- * real if the array needs to be modified in some way. Functions that
- * modify fake AVs check both flags to call av_reify() as appropriate.
- *
- * Note that the Perl stack and @DB::args have neither flag set. (Thus,
- * items that go on the stack are never refcounted.)
- *
- * These internal details are subject to change any time. AV
- * manipulations external to perl should not care about any of this.
- * GSAR 1999-09-10
- */
-#define AVf_REAL 1 /* free old entries */
-#define AVf_REIFY 2 /* can become real */
-
-/* XXX this is not used anywhere */
-#define AVf_REUSED 4 /* got undeffed--don't turn old memory into SVs now */
-
-/*
-=for apidoc AmU||Nullav
-Null AV pointer.
-
-=for apidoc Am|int|AvFILL|AV* av
-Same as C<av_len()>. Deprecated, use C<av_len()> instead.
-
-=cut
-*/
-
-#define Nullav Null(AV*)
-
-#define AvARRAY(av) ((SV**)((XPVAV*) SvANY(av))->xav_array)
-#define AvALLOC(av) ((XPVAV*) SvANY(av))->xav_alloc
-#define AvMAX(av) ((XPVAV*) SvANY(av))->xav_max
-#define AvFILLp(av) ((XPVAV*) SvANY(av))->xav_fill
-#define AvARYLEN(av) ((XPVAV*) SvANY(av))->xav_arylen
-#define AvFLAGS(av) ((XPVAV*) SvANY(av))->xav_flags
-
-#define AvREAL(av) (AvFLAGS(av) & AVf_REAL)
-#define AvREAL_on(av) (AvFLAGS(av) |= AVf_REAL)
-#define AvREAL_off(av) (AvFLAGS(av) &= ~AVf_REAL)
-#define AvREIFY(av) (AvFLAGS(av) & AVf_REIFY)
-#define AvREIFY_on(av) (AvFLAGS(av) |= AVf_REIFY)
-#define AvREIFY_off(av) (AvFLAGS(av) &= ~AVf_REIFY)
-#define AvREUSED(av) (AvFLAGS(av) & AVf_REUSED)
-#define AvREUSED_on(av) (AvFLAGS(av) |= AVf_REUSED)
-#define AvREUSED_off(av) (AvFLAGS(av) &= ~AVf_REUSED)
-
-#define AvREALISH(av) (AvFLAGS(av) & (AVf_REAL|AVf_REIFY))
-
-#define AvFILL(av) ((SvRMAGICAL((SV *) (av))) \
- ? mg_size((SV *) av) : AvFILLp(av))
-
diff --git a/contrib/perl5/bytecode.pl b/contrib/perl5/bytecode.pl
deleted file mode 100644
index 4b00e14..0000000
--- a/contrib/perl5/bytecode.pl
+++ /dev/null
@@ -1,408 +0,0 @@
-BEGIN {
- push @INC, './lib';
-}
-use strict;
-my %alias_to = (
- U32 => [qw(PADOFFSET STRLEN)],
- I32 => [qw(SSize_t long)],
- U16 => [qw(OPCODE line_t short)],
- U8 => [qw(char)],
-);
-
-my @optype= qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP);
-
-# Nullsv *must* come first in the following so that the condition
-# ($$sv == 0) can continue to be used to test (sv == Nullsv).
-my @specialsv = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no pWARN_ALL pWARN_NONE);
-
-my (%alias_from, $from, $tos);
-while (($from, $tos) = each %alias_to) {
- map { $alias_from{$_} = $from } @$tos;
-}
-
-my $c_header = <<'EOT';
-/*
- * Copyright (c) 1996-1999 Malcolm Beattie
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-/*
- * This file is autogenerated from bytecode.pl. Changes made here will be lost.
- */
-EOT
-
-my $perl_header;
-($perl_header = $c_header) =~ s{[/ ]?\*/?}{#}g;
-
-unlink "ext/ByteLoader/byterun.c", "ext/ByteLoader/byterun.h", "ext/B/B/Asmdata.pm";
-
-#
-# Start with boilerplate for Asmdata.pm
-#
-open(ASMDATA_PM, ">ext/B/B/Asmdata.pm") or die "ext/B/B/Asmdata.pm: $!";
-print ASMDATA_PM $perl_header, <<'EOT';
-package B::Asmdata;
-use Exporter;
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(%insn_data @insn_name @optype @specialsv_name);
-our(%insn_data, @insn_name, @optype, @specialsv_name);
-
-EOT
-print ASMDATA_PM <<"EOT";
-\@optype = qw(@optype);
-\@specialsv_name = qw(@specialsv);
-
-# XXX insn_data is initialised this way because with a large
-# %insn_data = (foo => [...], bar => [...], ...) initialiser
-# I get a hard-to-track-down stack underflow and segfault.
-EOT
-
-#
-# Boilerplate for byterun.c
-#
-open(BYTERUN_C, ">ext/ByteLoader/byterun.c") or die "ext/ByteLoader/byterun.c: $!";
-print BYTERUN_C $c_header, <<'EOT';
-
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#define NO_XSLOCKS
-#include "XSUB.h"
-
-#ifdef PERL_OBJECT
-#undef CALL_FPTR
-#define CALL_FPTR(fptr) (pPerl->*fptr)
-#undef PL_ppaddr
-#define PL_ppaddr (*get_ppaddr())
-#endif
-
-#include "byterun.h"
-#include "bytecode.h"
-
-
-static const int optype_size[] = {
-EOT
-my $i = 0;
-for ($i = 0; $i < @optype - 1; $i++) {
- printf BYTERUN_C " sizeof(%s),\n", $optype[$i], $i;
-}
-printf BYTERUN_C " sizeof(%s)\n", $optype[$i], $i;
-print BYTERUN_C <<'EOT';
-};
-
-void *
-bset_obj_store(pTHXo_ struct byteloader_state *bstate, void *obj, I32 ix)
-{
- if (ix > bstate->bs_obj_list_fill) {
- Renew(bstate->bs_obj_list, ix + 32, void*);
- bstate->bs_obj_list_fill = ix + 31;
- }
- bstate->bs_obj_list[ix] = obj;
- return obj;
-}
-
-void
-byterun(pTHXo_ register struct byteloader_state *bstate)
-{
- register int insn;
- U32 ix;
- SV *specialsv_list[6];
-
- BYTECODE_HEADER_CHECK; /* croak if incorrect platform */
- New(666, bstate->bs_obj_list, 32, void*); /* set op objlist */
- bstate->bs_obj_list_fill = 31;
-
-EOT
-
-for (my $i = 0; $i < @specialsv; $i++) {
- print BYTERUN_C " specialsv_list[$i] = $specialsv[$i];\n";
-}
-
-print BYTERUN_C <<'EOT';
-
- while ((insn = BGET_FGETC()) != EOF) {
- switch (insn) {
-EOT
-
-
-my (@insn_name, $insn_num, $insn, $lvalue, $argtype, $flags, $fundtype);
-
-while (<DATA>) {
- chop;
- s/#.*//; # remove comments
- next unless length;
- if (/^%number\s+(.*)/) {
- $insn_num = $1;
- next;
- } elsif (/%enum\s+(.*?)\s+(.*)/) {
- create_enum($1, $2); # must come before instructions
- next;
- }
- ($insn, $lvalue, $argtype, $flags) = split;
- $insn_name[$insn_num] = $insn;
- $fundtype = $alias_from{$argtype} || $argtype;
-
- #
- # Add the case statement and code for the bytecode interpreter in byterun.c
- #
- printf BYTERUN_C "\t case INSN_%s:\t\t/* %d */\n\t {\n",
- uc($insn), $insn_num;
- my $optarg = $argtype eq "none" ? "" : ", arg";
- if ($optarg) {
- printf BYTERUN_C "\t\t$argtype arg;\n\t\tBGET_%s(arg);\n", $fundtype;
- }
- if ($flags =~ /x/) {
- print BYTERUN_C "\t\tBSET_$insn($lvalue$optarg);\n";
- } elsif ($flags =~ /s/) {
- # Store instructions store to bytecode_obj_list[arg]. "lvalue" field is rvalue.
- print BYTERUN_C "\t\tBSET_OBJ_STORE($lvalue$optarg);\n";
- }
- elsif ($optarg && $lvalue ne "none") {
- print BYTERUN_C "\t\t$lvalue = arg;\n";
- }
- print BYTERUN_C "\t\tbreak;\n\t }\n";
-
- #
- # Add the initialiser line for %insn_data in Asmdata.pm
- #
- print ASMDATA_PM <<"EOT";
-\$insn_data{$insn} = [$insn_num, \\&PUT_$fundtype, "GET_$fundtype"];
-EOT
-
- # Find the next unused instruction number
- do { $insn_num++ } while $insn_name[$insn_num];
-}
-
-#
-# Finish off byterun.c
-#
-print BYTERUN_C <<'EOT';
- default:
- Perl_croak(aTHX_ "Illegal bytecode instruction %d\n", insn);
- /* NOTREACHED */
- }
- }
-}
-EOT
-
-#
-# Write the instruction and optype enum constants into byterun.h
-#
-open(BYTERUN_H, ">ext/ByteLoader/byterun.h") or die "ext/ByteLoader/byterun.h: $!";
-print BYTERUN_H $c_header, <<'EOT';
-struct byteloader_fdata {
- SV *datasv;
- int next_out;
- int idx;
-};
-
-struct byteloader_state {
- struct byteloader_fdata *bs_fdata;
- SV *bs_sv;
- void **bs_obj_list;
- int bs_obj_list_fill;
- XPV bs_pv;
- int bs_iv_overflows;
-};
-
-int bl_getc(struct byteloader_fdata *);
-int bl_read(struct byteloader_fdata *, char *, size_t, size_t);
-extern void byterun(pTHXo_ struct byteloader_state *);
-
-enum {
-EOT
-
-my $add_enum_value = 0;
-my $max_insn;
-for ($i = 0; $i < @insn_name; $i++) {
- $insn = uc($insn_name[$i]);
- if (defined($insn)) {
- $max_insn = $i;
- if ($add_enum_value) {
- print BYTERUN_H " INSN_$insn = $i,\t\t\t/* $i */\n";
- $add_enum_value = 0;
- } else {
- print BYTERUN_H " INSN_$insn,\t\t\t/* $i */\n";
- }
- } else {
- $add_enum_value = 1;
- }
-}
-
-print BYTERUN_H " MAX_INSN = $max_insn\n};\n";
-
-print BYTERUN_H "\nenum {\n";
-for ($i = 0; $i < @optype - 1; $i++) {
- printf BYTERUN_H " OPt_%s,\t\t/* %d */\n", $optype[$i], $i;
-}
-printf BYTERUN_H " OPt_%s\t\t/* %d */\n};\n\n", $optype[$i], $i;
-
-#
-# Finish off insn_data and create array initialisers in Asmdata.pm
-#
-print ASMDATA_PM <<'EOT';
-
-my ($insn_name, $insn_data);
-while (($insn_name, $insn_data) = each %insn_data) {
- $insn_name[$insn_data->[0]] = $insn_name;
-}
-# Fill in any gaps
-@insn_name = map($_ || "unused", @insn_name);
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Asmdata - Autogenerated data about Perl ops, used to generate bytecode
-
-=head1 SYNOPSIS
-
- use Asmdata;
-
-=head1 DESCRIPTION
-
-See F<ext/B/B/Asmdata.pm>.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
-EOT
-
-__END__
-# First set instruction ord("#") to read comment to end-of-line (sneaky)
-%number 35
-comment arg comment_t
-# Then make ord("\n") into a no-op
-%number 10
-nop none none
-# Now for the rest of the ordinary ones, beginning with \0 which is
-# ret so that \0-terminated strings can be read properly as bytecode.
-%number 0
-#
-#opcode lvalue argtype flags
-#
-ret none none x
-ldsv bstate->bs_sv svindex
-ldop PL_op opindex
-stsv bstate->bs_sv U32 s
-stop PL_op U32 s
-stpv bstate->bs_pv.xpv_pv U32 x
-ldspecsv bstate->bs_sv U8 x
-newsv bstate->bs_sv U8 x
-newop PL_op U8 x
-newopn PL_op U8 x
-newpv none PV
-pv_cur bstate->bs_pv.xpv_cur STRLEN
-pv_free bstate->bs_pv none x
-sv_upgrade bstate->bs_sv char x
-sv_refcnt SvREFCNT(bstate->bs_sv) U32
-sv_refcnt_add SvREFCNT(bstate->bs_sv) I32 x
-sv_flags SvFLAGS(bstate->bs_sv) U32
-xrv SvRV(bstate->bs_sv) svindex
-xpv bstate->bs_sv none x
-xiv32 SvIVX(bstate->bs_sv) I32
-xiv64 SvIVX(bstate->bs_sv) IV64
-xnv SvNVX(bstate->bs_sv) NV
-xlv_targoff LvTARGOFF(bstate->bs_sv) STRLEN
-xlv_targlen LvTARGLEN(bstate->bs_sv) STRLEN
-xlv_targ LvTARG(bstate->bs_sv) svindex
-xlv_type LvTYPE(bstate->bs_sv) char
-xbm_useful BmUSEFUL(bstate->bs_sv) I32
-xbm_previous BmPREVIOUS(bstate->bs_sv) U16
-xbm_rare BmRARE(bstate->bs_sv) U8
-xfm_lines FmLINES(bstate->bs_sv) I32
-xio_lines IoLINES(bstate->bs_sv) long
-xio_page IoPAGE(bstate->bs_sv) long
-xio_page_len IoPAGE_LEN(bstate->bs_sv) long
-xio_lines_left IoLINES_LEFT(bstate->bs_sv) long
-xio_top_name IoTOP_NAME(bstate->bs_sv) pvcontents
-xio_top_gv *(SV**)&IoTOP_GV(bstate->bs_sv) svindex
-xio_fmt_name IoFMT_NAME(bstate->bs_sv) pvcontents
-xio_fmt_gv *(SV**)&IoFMT_GV(bstate->bs_sv) svindex
-xio_bottom_name IoBOTTOM_NAME(bstate->bs_sv) pvcontents
-xio_bottom_gv *(SV**)&IoBOTTOM_GV(bstate->bs_sv) svindex
-xio_subprocess IoSUBPROCESS(bstate->bs_sv) short
-xio_type IoTYPE(bstate->bs_sv) char
-xio_flags IoFLAGS(bstate->bs_sv) char
-xcv_stash *(SV**)&CvSTASH(bstate->bs_sv) svindex
-xcv_start CvSTART(bstate->bs_sv) opindex
-xcv_root CvROOT(bstate->bs_sv) opindex
-xcv_gv *(SV**)&CvGV(bstate->bs_sv) svindex
-xcv_file CvFILE(bstate->bs_sv) pvindex
-xcv_depth CvDEPTH(bstate->bs_sv) long
-xcv_padlist *(SV**)&CvPADLIST(bstate->bs_sv) svindex
-xcv_outside *(SV**)&CvOUTSIDE(bstate->bs_sv) svindex
-xcv_flags CvFLAGS(bstate->bs_sv) U16
-av_extend bstate->bs_sv SSize_t x
-av_push bstate->bs_sv svindex x
-xav_fill AvFILLp(bstate->bs_sv) SSize_t
-xav_max AvMAX(bstate->bs_sv) SSize_t
-xav_flags AvFLAGS(bstate->bs_sv) U8
-xhv_riter HvRITER(bstate->bs_sv) I32
-xhv_name HvNAME(bstate->bs_sv) pvcontents
-hv_store bstate->bs_sv svindex x
-sv_magic bstate->bs_sv char x
-mg_obj SvMAGIC(bstate->bs_sv)->mg_obj svindex
-mg_private SvMAGIC(bstate->bs_sv)->mg_private U16
-mg_flags SvMAGIC(bstate->bs_sv)->mg_flags U8
-mg_pv SvMAGIC(bstate->bs_sv) pvcontents x
-xmg_stash *(SV**)&SvSTASH(bstate->bs_sv) svindex
-gv_fetchpv bstate->bs_sv strconst x
-gv_stashpv bstate->bs_sv strconst x
-gp_sv GvSV(bstate->bs_sv) svindex
-gp_refcnt GvREFCNT(bstate->bs_sv) U32
-gp_refcnt_add GvREFCNT(bstate->bs_sv) I32 x
-gp_av *(SV**)&GvAV(bstate->bs_sv) svindex
-gp_hv *(SV**)&GvHV(bstate->bs_sv) svindex
-gp_cv *(SV**)&GvCV(bstate->bs_sv) svindex
-gp_file GvFILE(bstate->bs_sv) pvindex
-gp_io *(SV**)&GvIOp(bstate->bs_sv) svindex
-gp_form *(SV**)&GvFORM(bstate->bs_sv) svindex
-gp_cvgen GvCVGEN(bstate->bs_sv) U32
-gp_line GvLINE(bstate->bs_sv) line_t
-gp_share bstate->bs_sv svindex x
-xgv_flags GvFLAGS(bstate->bs_sv) U8
-op_next PL_op->op_next opindex
-op_sibling PL_op->op_sibling opindex
-op_ppaddr PL_op->op_ppaddr strconst x
-op_targ PL_op->op_targ PADOFFSET
-op_type PL_op OPCODE x
-op_seq PL_op->op_seq U16
-op_flags PL_op->op_flags U8
-op_private PL_op->op_private U8
-op_first cUNOP->op_first opindex
-op_last cBINOP->op_last opindex
-op_other cLOGOP->op_other opindex
-op_pmreplroot cPMOP->op_pmreplroot opindex
-op_pmreplrootgv *(SV**)&cPMOP->op_pmreplroot svindex
-op_pmreplstart cPMOP->op_pmreplstart opindex
-op_pmnext *(OP**)&cPMOP->op_pmnext opindex
-pregcomp PL_op pvcontents x
-op_pmflags cPMOP->op_pmflags U16
-op_pmpermflags cPMOP->op_pmpermflags U16
-op_sv cSVOP->op_sv svindex
-op_padix cPADOP->op_padix PADOFFSET
-op_pv cPVOP->op_pv pvcontents
-op_pv_tr cPVOP->op_pv op_tr_array
-op_redoop cLOOP->op_redoop opindex
-op_nextop cLOOP->op_nextop opindex
-op_lastop cLOOP->op_lastop opindex
-cop_label cCOP->cop_label pvindex
-cop_stashpv cCOP pvindex x
-cop_file cCOP pvindex x
-cop_seq cCOP->cop_seq U32
-cop_arybase cCOP->cop_arybase I32
-cop_line cCOP line_t x
-cop_warnings cCOP->cop_warnings svindex
-main_start PL_main_start opindex
-main_root PL_main_root opindex
-curpad PL_curpad svindex x
-push_begin PL_beginav svindex x
-push_init PL_initav svindex x
-push_end PL_endav svindex x
diff --git a/contrib/perl5/cc_runtime.h b/contrib/perl5/cc_runtime.h
deleted file mode 100644
index dbc7475..0000000
--- a/contrib/perl5/cc_runtime.h
+++ /dev/null
@@ -1,75 +0,0 @@
-#define DOOP(ppname) PUTBACK; PL_op = ppname(aTHX); SPAGAIN
-#define CCPP(s) OP * s(pTHX)
-
-#define PP_LIST(g) do { \
- dMARK; \
- if (g != G_ARRAY) { \
- if (++MARK <= SP) \
- *MARK = *SP; \
- else \
- *MARK = &PL_sv_undef; \
- SP = MARK; \
- } \
- } while (0)
-
-#define MAYBE_TAINT_SASSIGN_SRC(sv) \
- if (PL_tainting && PL_tainted && (!SvGMAGICAL(left) || !SvSMAGICAL(left) || \
- !((mg=mg_find(left, 't')) && mg->mg_len & 1)))\
- TAINT_NOT
-
-#define PP_PREINC(sv) do { \
- if (SvIOK(sv)) { \
- ++SvIVX(sv); \
- SvFLAGS(sv) &= ~(SVf_NOK|SVf_POK|SVp_NOK|SVp_POK); \
- } \
- else \
- sv_inc(sv); \
- SvSETMAGIC(sv); \
- } while (0)
-
-#define PP_UNSTACK do { \
- TAINT_NOT; \
- PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp; \
- FREETMPS; \
- oldsave = PL_scopestack[PL_scopestack_ix - 1]; \
- LEAVE_SCOPE(oldsave); \
- SPAGAIN; \
- } while(0)
-
-/* Anyone using eval "" deserves this mess */
-#define PP_EVAL(ppaddr, nxt) do { \
- dJMPENV; \
- int ret; \
- PUTBACK; \
- JMPENV_PUSH(ret); \
- switch (ret) { \
- case 0: \
- PL_op = ppaddr(aTHX); \
- PL_retstack[PL_retstack_ix - 1] = Nullop; \
- if (PL_op != nxt) CALLRUNOPS(); \
- JMPENV_POP; \
- break; \
- case 1: JMPENV_POP; JMPENV_JUMP(1); \
- case 2: JMPENV_POP; JMPENV_JUMP(2); \
- case 3: \
- JMPENV_POP; \
- if (PL_restartop && PL_restartop != nxt) \
- JMPENV_JUMP(3); \
- } \
- PL_op = nxt; \
- SPAGAIN; \
- } while (0)
-
-
-#define PP_ENTERTRY(jmpbuf,label) \
- STMT_START { \
- int ret; \
- JMPENV_PUSH_ENV(jmpbuf,ret); \
- switch (ret) { \
- case 1: JMPENV_POP_ENV(jmpbuf); JMPENV_JUMP(1);\
- case 2: JMPENV_POP_ENV(jmpbuf); JMPENV_JUMP(2);\
- case 3: JMPENV_POP_ENV(jmpbuf); SPAGAIN; goto label;\
- } \
- } STMT_END
-#define PP_LEAVETRY \
- STMT_START{ PL_top_env=PL_top_env->je_prev; }STMT_END
diff --git a/contrib/perl5/cflags.SH b/contrib/perl5/cflags.SH
deleted file mode 100755
index d215255..0000000
--- a/contrib/perl5/cflags.SH
+++ /dev/null
@@ -1,140 +0,0 @@
-case $CONFIG in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-echo "Extracting cflags (with variable substitutions)"
-: This section of the file will have variable substitutions done on it.
-: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
-: Protect any dollar signs and backticks that you do not want interpreted
-: by putting a backslash in front. You may delete these comments.
-rm -f cflags
-$spitshell >cflags <<!GROK!THIS!
-$startsh
-!GROK!THIS!
-
-: In the following dollars and backticks do not need the extra backslash.
-$spitshell >>cflags <<'!NO!SUBS!'
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-
-perltype=''
-optdebug='' # ensure -g used if building a -DDEBUGGING libperl
-case $# in
-2) case $1 in
- *perl.*) perltype='';;
- *perld.*) perltype='-DDEBUGGING'; optdebug='-g' ;;
- *perle.*) perltype='-DEMBED';;
- *perlde.*) perltype='-DDEBUGGING -DEMBED'; optdebug='-g' ;;
- *perlm.*) perltype='-DEMBED -DMULTIPLICITY';;
- *perldm.*) perltype='-DDEBUGGING -DEMBED -DMULTIPLICITY'; optdebug='-g' ;;
- esac
- shift ;;
-esac
-
-also=': '
-case $# in
-1) also='echo 1>&2 " CCCMD = "'
-esac
-
-case $# in
-0) set *.c; echo "The current C flags are:" ;;
-esac
-
-set `echo "$* " | sed -e 's/\.[oc] / /g' -e 's/\.obj / /g' -e "s/\\$obj_ext / /g"`
-
-for file do
-
- case "$#" in
- 1) ;;
- *) echo $n " $file.c $c" ;;
- esac
-
- : allow variables like toke_cflags to be evaluated
-
- if echo $file | grep -v / >/dev/null
- then
- eval 'eval ${'"${file}_cflags"'-""}'
- fi
-
- : or customize here
-
- case "$file" in
- DB_File) ;;
- GDBM_File) ;;
- NDBM_File) ;;
- ODBM_File) ;;
- POSIX) ;;
- SDBM_File) ;;
- av) ;;
- byterun) ;;
- deb) ;;
- dl) ;;
- doio) ;;
- doop) ;;
- dump) ;;
- gv) ;;
- hv) ;;
- main) ;;
- malloc) ;;
- mg) ;;
- miniperlmain) ;;
- op) ;;
- perl) ;;
- perlapi) ;;
- perlmain) ;;
- perly) ;;
- pp) ;;
- pp_ctl) ;;
- pp_hot) ;;
- pp_sys) ;;
- regcomp) ;;
- regexec) ;;
- run) ;;
- scope) ;;
- sv) ;;
- taint) ;;
- toke) ;;
- usersub) ;;
- util) ;;
- *) ;;
- esac
-
- if test "X$optdebug" != "X"; then
- optimize="$optdebug"
- fi
-
- : Can we perhaps use $ansi2knr here
- echo "$cc -c -DPERL_CORE $ccflags $optimize $perltype"
- eval "$also "'"$cc -DPERL_CORE -c $ccflags $optimize $perltype"'
-
- . $TOP/config.sh
-
-done
-!NO!SUBS!
-chmod 755 cflags
-$eunicefix cflags
diff --git a/contrib/perl5/config_h.SH b/contrib/perl5/config_h.SH
deleted file mode 100755
index ae7f337..0000000
--- a/contrib/perl5/config_h.SH
+++ /dev/null
@@ -1,3238 +0,0 @@
-case $CONFIG in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-echo "Extracting config.h (with variable substitutions)"
-sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-def!#undef!'
-/*
- * 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.
- *
- * \$Id: Config_h.U,v 3.0.1.5 1997/02/28 14:57:43 ram Exp $
- */
-
-/*
- * Package name : $package
- * Source directory : $src
- * Configuration time: $cf_time
- * Configured by : $cf_by
- * Target system : $myuname
- */
-
-#ifndef _config_h_
-#define _config_h_
-
-/* LOC_SED:
- * This symbol holds the complete pathname to the sed program.
- */
-#define LOC_SED "$full_sed" /**/
-
-/* HAS_ALARM:
- * This symbol, if defined, indicates that the alarm routine is
- * available.
- */
-#$d_alarm HAS_ALARM /**/
-
-/* HASATTRIBUTE:
- * This symbol indicates the C compiler can check for function attributes,
- * such as printf formats. This is normally only supported by GNU cc.
- */
-#$d_attribut HASATTRIBUTE /**/
-#ifndef HASATTRIBUTE
-#define __attribute__(_arg_)
-#endif
-
-/* HAS_BCMP:
- * This symbol is defined if the bcmp() routine is available to
- * compare blocks of memory.
- */
-#$d_bcmp HAS_BCMP /**/
-
-/* HAS_BCOPY:
- * This symbol is defined if the bcopy() routine is available to
- * copy blocks of memory.
- */
-#$d_bcopy HAS_BCOPY /**/
-
-/* HAS_BZERO:
- * This symbol is defined if the bzero() routine is available to
- * set a memory block to 0.
- */
-#$d_bzero HAS_BZERO /**/
-
-/* HAS_CHOWN:
- * This symbol, if defined, indicates that the chown routine is
- * available.
- */
-#$d_chown HAS_CHOWN /**/
-
-/* HAS_CHROOT:
- * This symbol, if defined, indicates that the chroot routine is
- * available.
- */
-#$d_chroot HAS_CHROOT /**/
-
-/* 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.
- */
-#$d_chsize HAS_CHSIZE /**/
-
-/* HASCONST:
- * This symbol, if defined, indicates that this C compiler knows about
- * the const type. There is no need to actually test for that symbol
- * within your programs. The mere use of the "const" keyword will
- * trigger the necessary tests.
- */
-#$d_const HASCONST /**/
-#ifndef HASCONST
-#define const
-#endif
-
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
-#$d_crypt HAS_CRYPT /**/
-
-/* HAS_CUSERID:
- * This symbol, if defined, indicates that the cuserid routine is
- * available to get character login names.
- */
-#$d_cuserid HAS_CUSERID /**/
-
-/* HAS_DBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol DBL_DIG, which is the number
- * of significant digits in a double precision number. If this
- * symbol is not defined, a guess of 15 is usually pretty good.
- */
-#$d_dbl_dig HAS_DBL_DIG /* */
-
-/* HAS_DIFFTIME:
- * This symbol, if defined, indicates that the difftime routine is
- * available.
- */
-#$d_difftime HAS_DIFFTIME /**/
-
-/* HAS_DLERROR:
- * This symbol, if defined, indicates that the dlerror routine is
- * available to return a string describing the last error that
- * occurred from a call to dlopen(), dlclose() or dlsym().
- */
-#$d_dlerror HAS_DLERROR /**/
-
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- * This symbol, if defined, indicates that the bug that prevents
- * setuid scripts from being secure is not present in this kernel.
- */
-/* 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.
- */
-#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/
-#$d_dosuid DOSUID /**/
-
-/* HAS_DUP2:
- * This symbol, if defined, indicates that the dup2 routine is
- * available to duplicate file descriptors.
- */
-#$d_dup2 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().
- */
-#$d_fchmod 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().
- */
-#$d_fchown HAS_FCHOWN /**/
-
-/* HAS_FCNTL:
- * This symbol, if defined, indicates to the C program that
- * the fcntl() function exists.
- */
-#$d_fcntl HAS_FCNTL /**/
-
-/* HAS_FGETPOS:
- * This symbol, if defined, indicates that the fgetpos routine is
- * available to get the file position indicator, similar to ftell().
- */
-#$d_fgetpos HAS_FGETPOS /**/
-
-/* HAS_FLOCK:
- * This symbol, if defined, indicates that the flock routine is
- * available to do file locking.
- */
-#$d_flock HAS_FLOCK /**/
-
-/* HAS_FORK:
- * This symbol, if defined, indicates that the fork routine is
- * available.
- */
-#$d_fork HAS_FORK /**/
-
-/* HAS_FSETPOS:
- * This symbol, if defined, indicates that the fsetpos routine is
- * available to set the file position indicator, similar to fseek().
- */
-#$d_fsetpos HAS_FSETPOS /**/
-
-/* HAS_GETTIMEOFDAY:
- * This symbol, if defined, indicates that the gettimeofday() system
- * call is available for a sub-second accuracy clock. Usually, the file
- * <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
- * The type "Timeval" should be used to refer to "struct timeval".
- */
-#$d_gettimeod HAS_GETTIMEOFDAY /**/
-#ifdef HAS_GETTIMEOFDAY
-#define Timeval struct timeval /* Structure used by gettimeofday() */
-#endif
-
-/* 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.
- */
-#$d_getgrps HAS_GETGROUPS /**/
-
-/* HAS_GETLOGIN:
- * This symbol, if defined, indicates that the getlogin routine is
- * available to get the login name.
- */
-#$d_getlogin HAS_GETLOGIN /**/
-
-/* HAS_GETPGID:
- * This symbol, if defined, indicates to the C program that
- * the getpgid(pid) function is available to get the
- * process group id.
- */
-#$d_getpgid HAS_GETPGID /**/
-
-/* HAS_GETPGRP2:
- * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- * routine is available to get the current process group.
- */
-#$d_getpgrp2 HAS_GETPGRP2 /**/
-
-/* HAS_GETPPID:
- * This symbol, if defined, indicates that the getppid routine is
- * available to get the parent process ID.
- */
-#$d_getppid HAS_GETPPID /**/
-
-/* HAS_GETPRIORITY:
- * This symbol, if defined, indicates that the getpriority routine is
- * available to get a process's priority.
- */
-#$d_getprior HAS_GETPRIORITY /**/
-
-/* HAS_INET_ATON:
- * This symbol, if defined, indicates to the C program that the
- * inet_aton() function is available to parse IP address "dotted-quad"
- * strings.
- */
-#$d_inetaton HAS_INET_ATON /**/
-
-/* 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.
- */
-#$d_killpg HAS_KILLPG /**/
-
-/* HAS_LINK:
- * This symbol, if defined, indicates that the link routine is
- * available to create hard links.
- */
-#$d_link HAS_LINK /**/
-
-/* HAS_LOCALECONV:
- * This symbol, if defined, indicates that the localeconv routine is
- * available for numeric and monetary formatting conventions.
- */
-#$d_locconv HAS_LOCALECONV /**/
-
-/* HAS_LOCKF:
- * This symbol, if defined, indicates that the lockf routine is
- * available to do file locking.
- */
-#$d_lockf HAS_LOCKF /**/
-
-/* HAS_LSTAT:
- * This symbol, if defined, indicates that the lstat routine is
- * available to do file stats on symbolic links.
- */
-#$d_lstat HAS_LSTAT /**/
-
-/* HAS_MBLEN:
- * This symbol, if defined, indicates that the mblen routine is available
- * to find the number of bytes in a multibye character.
- */
-#$d_mblen HAS_MBLEN /**/
-
-/* HAS_MBSTOWCS:
- * This symbol, if defined, indicates that the mbstowcs routine is
- * available to covert a multibyte string into a wide character string.
- */
-#$d_mbstowcs HAS_MBSTOWCS /**/
-
-/* HAS_MBTOWC:
- * This symbol, if defined, indicates that the mbtowc routine is available
- * to covert a multibyte to a wide character.
- */
-#$d_mbtowc HAS_MBTOWC /**/
-
-/* HAS_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * to compare blocks of memory.
- */
-#$d_memcmp HAS_MEMCMP /**/
-
-/* HAS_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy blocks of memory.
- */
-#$d_memcpy HAS_MEMCPY /**/
-
-/* HAS_MEMMOVE:
- * This symbol, if defined, indicates that the memmove routine is available
- * to copy potentially overlapping blocks of memory. This should be used
- * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
- * own version.
- */
-#$d_memmove HAS_MEMMOVE /**/
-
-/* HAS_MEMSET:
- * This symbol, if defined, indicates that the memset routine is available
- * to set blocks of memory.
- */
-#$d_memset HAS_MEMSET /**/
-
-/* 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.
- */
-#$d_mkdir HAS_MKDIR /**/
-
-/* HAS_MKFIFO:
- * This symbol, if defined, indicates that the mkfifo routine is
- * available to create FIFOs. Otherwise, mknod should be able to
- * do it for you. However, if mkfifo is there, mknod might require
- * super-user privileges which mkfifo will not.
- */
-#$d_mkfifo HAS_MKFIFO /**/
-
-/* HAS_MKTIME:
- * This symbol, if defined, indicates that the mktime routine is
- * available.
- */
-#$d_mktime HAS_MKTIME /**/
-
-/* HAS_MSYNC:
- * This symbol, if defined, indicates that the msync system call is
- * available to synchronize a mapped file.
- */
-#$d_msync HAS_MSYNC /**/
-
-/* HAS_MUNMAP:
- * This symbol, if defined, indicates that the munmap system call is
- * available to unmap a region, usually mapped by mmap().
- */
-#$d_munmap HAS_MUNMAP /**/
-
-/* HAS_NICE:
- * This symbol, if defined, indicates that the nice routine is
- * available.
- */
-#$d_nice HAS_NICE /**/
-
-/* HAS_PATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given filename.
- */
-/* HAS_FPATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given open file descriptor.
- */
-#$d_pathconf HAS_PATHCONF /**/
-#$d_fpathconf HAS_FPATHCONF /**/
-
-/* HAS_PAUSE:
- * This symbol, if defined, indicates that the pause routine is
- * available to suspend a process until a signal is received.
- */
-#$d_pause HAS_PAUSE /**/
-
-/* HAS_PIPE:
- * This symbol, if defined, indicates that the pipe routine is
- * available to create an inter-process channel.
- */
-#$d_pipe HAS_PIPE /**/
-
-/* HAS_POLL:
- * This symbol, if defined, indicates that the poll routine is
- * available to poll active file descriptors. You may safely
- * include <poll.h> when this symbol is defined.
- */
-#$d_poll HAS_POLL /**/
-
-/* HAS_READDIR:
- * This symbol, if defined, indicates that the readdir routine is
- * available to read directory entries. You may have to include
- * <dirent.h>. See I_DIRENT.
- */
-#$d_readdir HAS_READDIR /**/
-
-/* HAS_SEEKDIR:
- * This symbol, if defined, indicates that the seekdir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#$d_seekdir HAS_SEEKDIR /**/
-
-/* HAS_TELLDIR:
- * This symbol, if defined, indicates that the telldir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#$d_telldir HAS_TELLDIR /**/
-
-/* HAS_REWINDDIR:
- * This symbol, if defined, indicates that the rewinddir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#$d_rewinddir HAS_REWINDDIR /**/
-
-/* HAS_READLINK:
- * This symbol, if defined, indicates that the readlink routine is
- * available to read the value of a symbolic link.
- */
-#$d_readlink HAS_READLINK /**/
-
-/* 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.
- */
-#$d_rename 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.
- */
-#$d_rmdir HAS_RMDIR /**/
-
-/* HAS_SELECT:
- * This symbol, if defined, indicates that the select routine is
- * available to select active file descriptors. If the timeout field
- * is used, <sys/time.h> may need to be included.
- */
-#$d_select HAS_SELECT /**/
-
-/* HAS_SETEGID:
- * This symbol, if defined, indicates that the setegid routine is available
- * to change the effective gid of the current program.
- */
-#$d_setegid HAS_SETEGID /**/
-
-/* HAS_SETEUID:
- * This symbol, if defined, indicates that the seteuid routine is available
- * to change the effective uid of the current program.
- */
-#$d_seteuid HAS_SETEUID /**/
-
-/* HAS_SETLINEBUF:
- * This symbol, if defined, indicates that the setlinebuf routine is
- * available to change stderr or stdout from block-buffered or unbuffered
- * to a line-buffered mode.
- */
-#$d_setlinebuf HAS_SETLINEBUF /**/
-
-/* HAS_SETLOCALE:
- * This symbol, if defined, indicates that the setlocale routine is
- * available to handle locale-specific ctype implementations.
- */
-#$d_setlocale HAS_SETLOCALE /**/
-
-/* HAS_SETPGID:
- * This symbol, if defined, indicates that the setpgid(pid, gpid)
- * routine is available to set process group ID.
- */
-#$d_setpgid HAS_SETPGID /**/
-
-/* HAS_SETPGRP2:
- * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- * routine is available to set the current process group.
- */
-#$d_setpgrp2 HAS_SETPGRP2 /**/
-
-/* HAS_SETPRIORITY:
- * This symbol, if defined, indicates that the setpriority routine is
- * available to set a process's priority.
- */
-#$d_setprior 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
- * process.
- */
-/* HAS_SETRESGID:
- * This symbol, if defined, indicates that the setresgid routine is
- * available to change the real, effective and saved gid of the current
- * process.
- */
-#$d_setregid HAS_SETREGID /**/
-#$d_setresgid 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
- * process.
- */
-/* HAS_SETRESUID:
- * This symbol, if defined, indicates that the setresuid routine is
- * available to change the real, effective and saved uid of the current
- * process.
- */
-#$d_setreuid HAS_SETREUID /**/
-#$d_setresuid HAS_SETRESUID /**/
-
-/* HAS_SETRGID:
- * This symbol, if defined, indicates that the setrgid routine is available
- * to change the real gid of the current program.
- */
-#$d_setrgid HAS_SETRGID /**/
-
-/* HAS_SETRUID:
- * This symbol, if defined, indicates that the setruid routine is available
- * to change the real uid of the current program.
- */
-#$d_setruid HAS_SETRUID /**/
-
-/* HAS_SETSID:
- * This symbol, if defined, indicates that the setsid routine is
- * available to set the process group ID.
- */
-#$d_setsid HAS_SETSID /**/
-
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
- */
-/* HAS_SHMAT_PROTOTYPE:
- * This symbol, if defined, indicates that the sys/shm.h includes
- * a prototype for shmat(). Otherwise, it is up to the program to
- * guess one. Shmat_t shmat _((int, Shmat_t, int)) is a good guess,
- * but not always right so it should be emitted by the program only
- * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
- */
-#define Shmat_t $shmattype /**/
-#$d_shmatprototype HAS_SHMAT_PROTOTYPE /**/
-
-/* HAS_STRCHR:
- * This symbol is defined to indicate that the strchr()/strrchr()
- * functions are available for string searching. If not, try the
- * index()/rindex() pair.
- */
-/* HAS_INDEX:
- * This symbol is defined to indicate that the index()/rindex()
- * functions are available for string searching.
- */
-#$d_strchr HAS_STRCHR /**/
-#$d_index HAS_INDEX /**/
-
-/* HAS_STRCOLL:
- * This symbol, if defined, indicates that the strcoll routine is
- * available to compare strings using collating information.
- */
-#$d_strcoll HAS_STRCOLL /**/
-
-/* USE_STRUCT_COPY:
- * 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.
- */
-#$d_strctcpy USE_STRUCT_COPY /**/
-
-/* HAS_STRTOD:
- * This symbol, if defined, indicates that the strtod routine is
- * available to provide better numeric string conversion than atof().
- */
-#$d_strtod HAS_STRTOD /**/
-
-/* HAS_STRTOL:
- * This symbol, if defined, indicates that the strtol routine is available
- * to provide better numeric string conversion than atoi() and friends.
- */
-#$d_strtol HAS_STRTOL /**/
-
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#$d_strtoul HAS_STRTOUL /**/
-
-/* HAS_STRXFRM:
- * This symbol, if defined, indicates that the strxfrm() routine is
- * available to transform strings.
- */
-#$d_strxfrm HAS_STRXFRM /**/
-
-/* HAS_SYMLINK:
- * This symbol, if defined, indicates that the symlink routine is available
- * to create symbolic links.
- */
-#$d_symlink 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.
- */
-#$d_syscall HAS_SYSCALL /**/
-
-/* HAS_SYSCONF:
- * This symbol, if defined, indicates that sysconf() is available
- * to determine system related limits and options.
- */
-#$d_sysconf HAS_SYSCONF /**/
-
-/* HAS_SYSTEM:
- * This symbol, if defined, indicates that the system routine is
- * available to issue a shell command.
- */
-#$d_system HAS_SYSTEM /**/
-
-/* HAS_TCGETPGRP:
- * This symbol, if defined, indicates that the tcgetpgrp routine is
- * available to get foreground process group ID.
- */
-#$d_tcgetpgrp HAS_TCGETPGRP /**/
-
-/* HAS_TCSETPGRP:
- * This symbol, if defined, indicates that the tcsetpgrp routine is
- * available to set foreground process group ID.
- */
-#$d_tcsetpgrp HAS_TCSETPGRP /**/
-
-/* HAS_TRUNCATE:
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
-#$d_truncate HAS_TRUNCATE /**/
-
-/* HAS_TZNAME:
- * This symbol, if defined, indicates that the tzname[] array is
- * available to access timezone names.
- */
-#$d_tzname HAS_TZNAME /**/
-
-/* HAS_UMASK:
- * This symbol, if defined, indicates that the umask routine is
- * available to set and get the value of the file creation mask.
- */
-#$d_umask HAS_UMASK /**/
-
-/* HASVOLATILE:
- * This symbol, if defined, indicates that this C compiler knows about
- * the volatile declaration.
- */
-#$d_volatile HASVOLATILE /**/
-#ifndef HASVOLATILE
-#define volatile
-#endif
-
-/* HAS_WAIT4:
- * This symbol, if defined, indicates that wait4() exists.
- */
-#$d_wait4 HAS_WAIT4 /**/
-
-/* HAS_WAITPID:
- * This symbol, if defined, indicates that the waitpid routine is
- * available to wait for child process.
- */
-#$d_waitpid HAS_WAITPID /**/
-
-/* HAS_WCSTOMBS:
- * This symbol, if defined, indicates that the wcstombs routine is
- * available to convert wide character strings to multibyte strings.
- */
-#$d_wcstombs HAS_WCSTOMBS /**/
-
-/* HAS_WCTOMB:
- * This symbol, if defined, indicates that the wctomb routine is available
- * to covert a wide character to a multibyte.
- */
-#$d_wctomb HAS_WCTOMB /**/
-
-/* I_ARPA_INET:
- * This symbol, if defined, indicates to the C program that it should
- * include <arpa/inet.h> to get inet_addr and friends declarations.
- */
-#$i_arpainet I_ARPA_INET /**/
-
-/* I_DBM:
- * This symbol, if defined, indicates that <dbm.h> exists and should
- * be included.
- */
-/* I_RPCSVC_DBM:
- * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
- * should be included.
- */
-#$i_dbm I_DBM /**/
-#$i_rpcsvcdbm I_RPCSVC_DBM /**/
-
-/* I_DIRENT:
- * This symbol, if defined, indicates to the C program that it should
- * include <dirent.h>. Using this symbol also triggers the definition
- * of the Direntry_t define which ends up being 'struct dirent' or
- * 'struct direct' depending on the availability of <dirent.h>.
- */
-/* 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.
- */
-/* Direntry_t:
- * This symbol is set to 'struct direct' or 'struct dirent' depending on
- * whether dirent is available or not. You should use this pseudo type to
- * portably declare your directory entries.
- */
-#$i_dirent I_DIRENT /**/
-#$d_dirnamlen DIRNAMLEN /**/
-#define Direntry_t $direntrytype
-
-/* I_DLFCN:
- * This symbol, if defined, indicates that <dlfcn.h> exists and should
- * be included.
- */
-#$i_dlfcn I_DLFCN /**/
-
-/* I_FCNTL:
- * This manifest constant tells the C program to include <fcntl.h>.
- */
-#$i_fcntl I_FCNTL /**/
-
-/* I_FLOAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <float.h> to get definition of symbols like DBL_MAX or
- * DBL_MIN, i.e. machine dependent floating point values.
- */
-#$i_float I_FLOAT /**/
-
-/* I_LIMITS:
- * This symbol, if defined, indicates to the C program that it should
- * include <limits.h> to get definition of symbols like WORD_BIT or
- * LONG_MAX, i.e. machine dependant limitations.
- */
-#$i_limits I_LIMITS /**/
-
-/* I_LOCALE:
- * This symbol, if defined, indicates to the C program that it should
- * include <locale.h>.
- */
-#$i_locale I_LOCALE /**/
-
-/* I_MATH:
- * This symbol, if defined, indicates to the C program that it should
- * include <math.h>.
- */
-#$i_math I_MATH /**/
-
-/* I_MEMORY:
- * This symbol, if defined, indicates to the C program that it should
- * include <memory.h>.
- */
-#$i_memory I_MEMORY /**/
-
-/* I_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-#$i_ndbm I_NDBM /**/
-
-/* I_NET_ERRNO:
- * This symbol, if defined, indicates that <net/errno.h> exists and
- * should be included.
- */
-#$i_neterrno I_NET_ERRNO /**/
-
-/* I_NETINET_IN:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
- */
-#$i_niin I_NETINET_IN /**/
-
-/* I_SFIO:
- * This symbol, if defined, indicates to the C program that it should
- * include <sfio.h>.
- */
-#$i_sfio I_SFIO /**/
-
-/* I_STDDEF:
- * This symbol, if defined, indicates that <stddef.h> exists and should
- * be included.
- */
-#$i_stddef I_STDDEF /**/
-
-/* I_STDLIB:
- * This symbol, if defined, indicates that <stdlib.h> exists and should
- * be included.
- */
-#$i_stdlib I_STDLIB /**/
-
-/* I_STRING:
- * This symbol, if defined, indicates to the C program that it should
- * include <string.h> (USG systems) instead of <strings.h> (BSD systems).
- */
-#$i_string I_STRING /**/
-
-/* I_SYS_DIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/dir.h>.
- */
-#$i_sysdir I_SYS_DIR /**/
-
-/* I_SYS_FILE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/file.h> to get definition of R_OK and friends.
- */
-#$i_sysfile I_SYS_FILE /**/
-
-/* I_SYS_IOCTL:
- * This symbol, if defined, indicates that <sys/ioctl.h> exists and should
- * be included. Otherwise, include <sgtty.h> or <termio.h>.
- */
-#$i_sysioctl I_SYS_IOCTL /**/
-
-/* I_SYS_NDIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/ndir.h>.
- */
-#$i_sysndir I_SYS_NDIR /**/
-
-/* I_SYS_PARAM:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/param.h>.
- */
-#$i_sysparam I_SYS_PARAM /**/
-
-/* I_SYS_RESOURCE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/resource.h>.
- */
-#$i_sysresrc I_SYS_RESOURCE /**/
-
-/* I_SYS_SELECT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/select.h> in order to get definition of struct timeval.
- */
-#$i_sysselct I_SYS_SELECT /**/
-
-/* I_SYS_STAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/stat.h>.
- */
-#$i_sysstat I_SYS_STAT /**/
-
-/* I_SYS_TIMES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/times.h>.
- */
-#$i_systimes I_SYS_TIMES /**/
-
-/* I_SYS_TYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/types.h>.
- */
-#$i_systypes I_SYS_TYPES /**/
-
-/* I_SYS_UN:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/un.h> to get UNIX domain socket definitions.
- */
-#$i_sysun I_SYS_UN /**/
-
-/* I_SYS_WAIT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/wait.h>.
- */
-#$i_syswait I_SYS_WAIT /**/
-
-/* I_TERMIO:
- * This symbol, if defined, indicates that the program should include
- * <termio.h> rather than <sgtty.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/* I_TERMIOS:
- * This symbol, if defined, indicates that the program should include
- * the POSIX termios.h rather than sgtty.h or termio.h.
- * There are also differences in the ioctl() calls that depend on the
- * value of this symbol.
- */
-/* I_SGTTY:
- * This symbol, if defined, indicates that the program should include
- * <sgtty.h> rather than <termio.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-#$i_termio I_TERMIO /**/
-#$i_termios I_TERMIOS /**/
-#$i_sgtty I_SGTTY /**/
-
-/* I_UNISTD:
- * This symbol, if defined, indicates to the C program that it should
- * include <unistd.h>.
- */
-#$i_unistd I_UNISTD /**/
-
-/* I_UTIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <utime.h>.
- */
-#$i_utime I_UTIME /**/
-
-/* I_VALUES:
- * This symbol, if defined, indicates to the C program that it should
- * include <values.h> to get definition of symbols like MINFLOAT or
- * MAXLONG, i.e. machine dependant limitations. Probably, you
- * should use <limits.h> instead, if it is available.
- */
-#$i_values I_VALUES /**/
-
-/* I_STDARG:
- * This symbol, if defined, indicates that <stdarg.h> exists and should
- * be included.
- */
-/* I_VARARGS:
- * This symbol, if defined, indicates to the C program that it should
- * include <varargs.h>.
- */
-#$i_stdarg I_STDARG /**/
-#$i_varargs I_VARARGS /**/
-
-/* I_VFORK:
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
-#$i_vfork I_VFORK /**/
-
-/* CAN_PROTOTYPE:
- * If defined, this macro indicates that the C compiler can handle
- * function prototypes.
- */
-/* _:
- * This macro is used to declare function parameters for folks who want
- * to make declarations with prototypes using a different style than
- * the above macros. Use double parentheses. For example:
- *
- * int main _((int argc, char *argv[]));
- */
-#$prototype CAN_PROTOTYPE /**/
-#ifdef CAN_PROTOTYPE
-#define _(args) args
-#else
-#define _(args) ()
-#endif
-
-/* SH_PATH:
- * This symbol contains the full pathname to the shell used on this
- * on this system to execute Bourne shell scripts. Usually, this will be
- * /bin/sh, though it's possible that some systems will have /bin/ksh,
- * /bin/pdksh, /bin/ash, /bin/bash, or even something such as
- * D:/bin/sh.exe.
- */
-#define SH_PATH "$sh" /**/
-
-/* CROSSCOMPILE:
- * This symbol, if defined, signifies that we our
- * build process is a cross-compilation.
- */
-#$crosscompile CROSSCOMPILE /**/
-
-/* INTSIZE:
- * This symbol contains the value of sizeof(int) so that the C
- * preprocessor can make decisions based on it.
- */
-/* LONGSIZE:
- * This symbol contains the value of sizeof(long) so that the C
- * preprocessor can make decisions based on it.
- */
-/* SHORTSIZE:
- * This symbol contains the value of sizeof(short) so that the C
- * preprocessor can make decisions based on it.
- */
-#define INTSIZE $intsize /**/
-#define LONGSIZE $longsize /**/
-#define SHORTSIZE $shortsize /**/
-
-/* MULTIARCH:
- * This symbol, if defined, signifies that the build
- * process will produce some binary files that are going to be
- * used in a cross-platform environment. This is the case for
- * example with the NeXT "fat" binaries that contain executables
- * for several CPUs.
- */
-#$multiarch MULTIARCH /**/
-
-/* HAS_QUAD:
- * This symbol, if defined, tells that there's a 64-bit integer type,
- * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one
- * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T.
- */
-#$d_quad HAS_QUAD /**/
-#ifdef HAS_QUAD
-# define Quad_t $quadtype /**/
-# define Uquad_t $uquadtype /**/
-# define QUADKIND $quadkind /**/
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-#endif
-
-/* HAS_ACCESSX:
- * This symbol, if defined, indicates that the accessx routine is
- * available to do extended access checks.
- */
-#$d_accessx HAS_ACCESSX /**/
-
-/* HAS_EACCESS:
- * This symbol, if defined, indicates that the eaccess routine is
- * available to do extended access checks.
- */
-#$d_eaccess HAS_EACCESS /**/
-
-/* I_SYS_ACCESS:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/access.h>.
- */
-#$i_sysaccess I_SYS_ACCESS /**/
-
-/* I_SYS_SECURITY:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/security.h>.
- */
-#$i_syssecrt I_SYS_SECURITY /**/
-
-/* OSNAME:
- * This symbol contains the name of the operating system, as determined
- * by Configure. You shouldn't rely on it too much; the specific
- * feature tests from Configure are generally more reliable.
- */
-#define OSNAME "$osname" /**/
-
-/* MEM_ALIGNBYTES:
- * This symbol contains the number of bytes required to align a
- * double, or a long double when applicable. Usual values are 2,
- * 4 and 8. The default is eight, for safety.
- */
-#if defined(CROSSCOMPILE) || defined(MULTIARCH)
-# define MEM_ALIGNBYTES 8
-#else
-#define MEM_ALIGNBYTES $alignbytes
-#endif
-
-/* ARCHLIB:
- * This variable, if defined, holds the name of the directory in
- * which the user wants to put architecture-dependent public
- * library files for $package. It is most often a local directory
- * such as /usr/local/lib. Programs using this variable must be
- * prepared to deal with filename expansion. If ARCHLIB is the
- * same as PRIVLIB, it is not defined, since presumably the
- * program already searches PRIVLIB.
- */
-/* ARCHLIB_EXP:
- * This symbol contains the ~name expanded version of ARCHLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#$d_archlib ARCHLIB "$archlib" /**/
-#$d_archlib ARCHLIB_EXP "$archlibexp" /**/
-
-/* ARCHNAME:
- * This symbol holds a string representing the architecture name.
- * It may be used to construct an architecture-dependant pathname
- * where library files may be held under a private library, for
- * instance.
- */
-#define ARCHNAME "$archname" /**/
-
-/* HAS_ATOLF:
- * This symbol, if defined, indicates that the atolf routine is
- * available to convert strings into long doubles.
- */
-#$d_atolf HAS_ATOLF /**/
-
-/* HAS_ATOLL:
- * This symbol, if defined, indicates that the atoll routine is
- * available to convert strings into long longs.
- */
-#$d_atoll HAS_ATOLL /**/
-
-/* BIN:
- * This symbol holds the path of the bin directory where the package will
- * be installed. Program must be prepared to deal with ~name substitution.
- */
-/* BIN_EXP:
- * This symbol is the filename expanded version of the BIN symbol, for
- * programs that do not want to deal with that at run-time.
- */
-#define BIN "$bin" /**/
-#define BIN_EXP "$binexp" /**/
-
-/* PERL_BINCOMPAT_5005:
- * This symbol, if defined, indicates that this version of Perl should be
- * binary-compatible with Perl 5.005. This is impossible for builds
- * that use features like threads and multiplicity it is always $undef
- * for those versions.
- */
-#$d_bincompat5005 PERL_BINCOMPAT_5005 /**/
-
-/* BYTEORDER:
- * This symbol holds the hexadecimal constant defined in byteorder,
- * i.e. 0x1234 or 0x4321, etc...
- * If the compiler supports cross-compiling or multiple-architecture
- * binaries (eg. on NeXT systems), use compiler-defined macros to
- * determine the byte order.
- * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture
- * Binaries (MAB) on either big endian or little endian machines.
- * The endian-ness is available at compile-time. This only matters
- * for perl, where the config.h can be generated and installed on
- * one system, and used by a different architecture to build an
- * extension. Older versions of NeXT that might not have
- * defined either *_ENDIAN__ were all on Motorola 680x0 series,
- * so the default case (for NeXT) is big endian to catch them.
- * This might matter for NeXT 3.0.
- */
-#if defined(CROSSCOMPILE) || defined(MULTIARCH)
-# ifdef __LITTLE_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x1234
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x12345678
-# endif
-# endif
-# else
-# ifdef __BIG_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x4321
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-# endif
-# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__))
-# define BYTEORDER 0x4321
-# endif
-#else
-#define BYTEORDER 0x$byteorder /* large digits for MSB */
-#endif /* NeXT */
-
-/* CAT2:
- * This macro catenates 2 tokens together.
- */
-/* STRINGIFY:
- * This macro surrounds its token with double quotes.
- */
-#if $cpp_stuff == 1
-#define CAT2(a,b) a/**/b
-#define STRINGIFY(a) "a"
- /* If you can get stringification with catify, tell me how! */
-#endif
-#if $cpp_stuff == 42
-#define PeRl_CaTiFy(a, b) a ## b
-#define PeRl_StGiFy(a) #a
-/* the additional level of indirection enables these macros to be
- * used as arguments to other macros. See K&R 2nd ed., page 231. */
-#define CAT2(a,b) PeRl_CaTiFy(a,b)
-#define StGiFy(a) PeRl_StGiFy(a)
-#define STRINGIFY(a) PeRl_StGiFy(a)
-#endif
-#if $cpp_stuff != 1 && $cpp_stuff != 42
-# include "Bletch: How does this C preprocessor catenate tokens?"
-#endif
-
-/* 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", but it can also
- * call a wrapper. See CPPRUN.
- */
-/* 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 "".
- */
-/* CPPRUN:
- * This symbol contains the string which will invoke a C preprocessor on
- * the standard input and produce to standard output. It needs to end
- * with CPPLAST, after all other preprocessor flags have been specified.
- * The main difference with CPPSTDIN is that this program will never be a
- * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
- * available directly to the user. Note that it may well be different from
- * the preprocessor used to compile the C program.
- */
-/* CPPLAST:
- * This symbol is intended to be used along with CPPRUN in the same manner
- * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
- */
-#define CPPSTDIN "$cppstdin"
-#define CPPMINUS "$cppminus"
-#define CPPRUN "$cpprun"
-#define CPPLAST "$cpplast"
-
-/* HAS_ACCESS:
- * This manifest constant lets the C program know that the access()
- * system call is available to check for accessibility using real UID/GID.
- * (always present on UNIX.)
- */
-#$d_access HAS_ACCESS /**/
-
-/* CASTI32:
- * This symbol is defined if the C compiler can cast negative
- * or large floating point numbers to 32-bit ints.
- */
-#$d_casti32 CASTI32 /**/
-
-/* CASTNEGFLOAT:
- * This symbol is defined if the C compiler can cast negative
- * 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:
- * 0 = ok
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- * 4 = couldn't cast in argument expression list
- */
-#$d_castneg CASTNEGFLOAT /**/
-#define CASTFLAGS $castflags /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-#$d_void_closedir VOID_CLOSEDIR /**/
-
-/* HAS_CSH:
- * This symbol, if defined, indicates that the C-shell exists.
- */
-/* CSH:
- * This symbol, if defined, contains the full pathname of csh.
- */
-#$d_csh HAS_CSH /**/
-#ifdef HAS_CSH
-#define CSH "$full_csh" /**/
-#endif
-
-/* DLSYM_NEEDS_UNDERSCORE:
- * This symbol, if defined, indicates that we need to prepend an
- * underscore to the symbol name before calling dlsym(). This only
- * makes sense if you *have* dlsym, which we will presume is the
- * case if you're using dl_dlopen.xs.
- */
-#$d_dlsymun DLSYM_NEEDS_UNDERSCORE /**/
-
-/* HAS_DRAND48_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern double drand48 _((void));
- */
-#$d_drand48proto HAS_DRAND48_PROTO /**/
-
-/* HAS_ENDGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the group database.
- */
-#$d_endgrent HAS_ENDGRENT /**/
-
-/* HAS_ENDHOSTENT:
- * This symbol, if defined, indicates that the endhostent() routine is
- * available to close whatever was being used for host queries.
- */
-#$d_endhent HAS_ENDHOSTENT /**/
-
-/* HAS_ENDNETENT:
- * This symbol, if defined, indicates that the endnetent() routine is
- * available to close whatever was being used for network queries.
- */
-#$d_endnent HAS_ENDNETENT /**/
-
-/* HAS_ENDPROTOENT:
- * This symbol, if defined, indicates that the endprotoent() routine is
- * available to close whatever was being used for protocol queries.
- */
-#$d_endpent HAS_ENDPROTOENT /**/
-
-/* HAS_ENDPWENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the passwd database.
- */
-#$d_endpwent HAS_ENDPWENT /**/
-
-/* HAS_ENDSERVENT:
- * This symbol, if defined, indicates that the endservent() routine is
- * available to close whatever was being used for service queries.
- */
-#$d_endsent HAS_ENDSERVENT /**/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-#$d_fd_set HAS_FD_SET /**/
-
-/* FLEXFILENAMES:
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
-#$d_flexfnam FLEXFILENAMES /**/
-
-/* HAS_FPOS64_T:
- * This symbol will be defined if the C compiler supports fpos64_t.
- */
-#$d_fpos64_t HAS_FPOS64_T /**/
-
-/* HAS_FREXPL:
- * This symbol, if defined, indicates that the frexpl routine is
- * available to break a long double floating-point number into
- * a normalized fraction and an integral power of 2.
- */
-#$d_frexpl HAS_FREXPL /**/
-
-/* HAS_STRUCT_FS_DATA:
- * This symbol, if defined, indicates that the struct fs_data
- * to do statfs() is supported.
- */
-#$d_fs_data_s HAS_STRUCT_FS_DATA /**/
-
-/* HAS_FSEEKO:
- * This symbol, if defined, indicates that the fseeko routine is
- * available to fseek beyond 32 bits (useful for ILP32 hosts).
- */
-#$d_fseeko HAS_FSEEKO /**/
-
-/* HAS_FSTATFS:
- * This symbol, if defined, indicates that the fstatfs routine is
- * available to stat filesystems by file descriptors.
- */
-#$d_fstatfs HAS_FSTATFS /**/
-
-/* HAS_FTELLO:
- * This symbol, if defined, indicates that the ftello routine is
- * available to ftell beyond 32 bits (useful for ILP32 hosts).
- */
-#$d_ftello HAS_FTELLO /**/
-
-/* Gconvert:
- * This preprocessor macro is defined to convert a floating point
- * number to a string without a trailing decimal point. This
- * emulates the behavior of sprintf("%g"), but is sometimes much more
- * efficient. If gconvert() is not available, but gcvt() drops the
- * trailing decimal point, then gcvt() is used. If all else fails,
- * a macro using sprintf("%g") is used. Arguments for the Gconvert
- * macro are: value, number of digits, whether trailing zeros should
- * be retained, and the output buffer.
- * Possible values are:
- * d_Gconvert='gconvert((x),(n),(t),(b))'
- * d_Gconvert='gcvt((x),(n),(b))'
- * d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- * The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) $d_Gconvert
-
-/* HAS_GETCWD:
- * This symbol, if defined, indicates that the getcwd routine is
- * available to get the current working directory.
- */
-#$d_getcwd HAS_GETCWD /**/
-
-/* HAS_GETESPWNAM:
- * This symbol, if defined, indicates that the getespwnam system call is
- * available to retrieve enchanced (shadow) password entries by name.
- */
-#$d_getespwnam HAS_GETESPWNAM /**/
-
-/* HAS_GETFSSTAT:
- * This symbol, if defined, indicates that the getfsstat routine is
- * available to stat filesystems in bulk.
- */
-#$d_getfsstat HAS_GETFSSTAT /**/
-
-/* HAS_GETGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for sequential access of the group database.
- */
-#$d_getgrent HAS_GETGRENT /**/
-
-/* HAS_GETHOSTBYADDR:
- * This symbol, if defined, indicates that the gethostbyaddr() routine is
- * available to look up hosts by their IP addresses.
- */
-#$d_gethbyaddr HAS_GETHOSTBYADDR /**/
-
-/* HAS_GETHOSTBYNAME:
- * This symbol, if defined, indicates that the gethostbyname() routine is
- * available to look up host names in some data base or other.
- */
-#$d_gethbyname HAS_GETHOSTBYNAME /**/
-
-/* HAS_GETHOSTENT:
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to look up host names in some data base or another.
- */
-#$d_gethent HAS_GETHOSTENT /**/
-
-/* HAS_GETHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * gethostname() routine to derive the host name. See also HAS_UNAME
- * and PHOSTNAME.
- */
-/* HAS_UNAME:
- * This symbol, if defined, indicates that the C program may use the
- * uname() routine to derive the host name. See also HAS_GETHOSTNAME
- * and PHOSTNAME.
- */
-/* PHOSTNAME:
- * This symbol, if defined, indicates the command to feed to the
- * popen() routine to derive the host name. See also HAS_GETHOSTNAME
- * and HAS_UNAME. Note that the command uses a fully qualified path,
- * so that it is safe even if used by a process with super-user
- * privileges.
- */
-/* HAS_PHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * contents of PHOSTNAME as a command to feed to the popen() routine
- * to derive the host name.
- */
-#$d_gethname HAS_GETHOSTNAME /**/
-#$d_uname HAS_UNAME /**/
-#$d_phostname HAS_PHOSTNAME /**/
-#ifdef HAS_PHOSTNAME
-#define PHOSTNAME "$aphostname" /* How to get the host name */
-#endif
-
-/* HAS_GETHOST_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for gethostent(), gethostbyname(), and
- * gethostbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#$d_gethostprotos HAS_GETHOST_PROTOS /**/
-
-/* HAS_GETMNT:
- * This symbol, if defined, indicates that the getmnt routine is
- * available to get filesystem mount info by filename.
- */
-#$d_getmnt HAS_GETMNT /**/
-
-/* HAS_GETMNTENT:
- * This symbol, if defined, indicates that the getmntent routine is
- * available to iterate through mounted file systems to get their info.
- */
-#$d_getmntent HAS_GETMNTENT /**/
-
-/* HAS_GETNETBYADDR:
- * This symbol, if defined, indicates that the getnetbyaddr() routine is
- * available to look up networks by their IP addresses.
- */
-#$d_getnbyaddr HAS_GETNETBYADDR /**/
-
-/* HAS_GETNETBYNAME:
- * This symbol, if defined, indicates that the getnetbyname() routine is
- * available to look up networks by their names.
- */
-#$d_getnbyname HAS_GETNETBYNAME /**/
-
-/* HAS_GETNETENT:
- * This symbol, if defined, indicates that the getnetent() routine is
- * available to look up network names in some data base or another.
- */
-#$d_getnent HAS_GETNETENT /**/
-
-/* HAS_GETNET_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getnetent(), getnetbyname(), and
- * getnetbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#$d_getnetprotos HAS_GETNET_PROTOS /**/
-
-/* HAS_GETPAGESIZE:
- * This symbol, if defined, indicates that the getpagesize system call
- * is available to get system page size, which is the granularity of
- * many memory management calls.
- */
-#$d_getpagsz HAS_GETPAGESIZE /**/
-
-/* HAS_GETPROTOENT:
- * This symbol, if defined, indicates that the getprotoent() routine is
- * available to look up protocols in some data base or another.
- */
-#$d_getpent HAS_GETPROTOENT /**/
-
-/* HAS_GETPROTOBYNAME:
- * This symbol, if defined, indicates that the getprotobyname()
- * routine is available to look up protocols by their name.
- */
-/* HAS_GETPROTOBYNUMBER:
- * This symbol, if defined, indicates that the getprotobynumber()
- * routine is available to look up protocols by their number.
- */
-#$d_getpbyname HAS_GETPROTOBYNAME /**/
-#$d_getpbynumber HAS_GETPROTOBYNUMBER /**/
-
-/* HAS_GETPROTO_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getprotoent(), getprotobyname(), and
- * getprotobyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#$d_getprotoprotos HAS_GETPROTO_PROTOS /**/
-
-/* HAS_GETPRPWNAM:
- * This symbol, if defined, indicates that the getprpwnam system call is
- * available to retrieve protected (shadow) password entries by name.
- */
-#$d_getprpwnam HAS_GETPRPWNAM /**/
-
-/* HAS_GETPWENT:
- * This symbol, if defined, indicates that the getpwent routine is
- * available for sequential access of the passwd database.
- * If this is not available, the older getpw() function may be available.
- */
-#$d_getpwent HAS_GETPWENT /**/
-
-/* HAS_GETSERVENT:
- * This symbol, if defined, indicates that the getservent() routine is
- * available to look up network services in some data base or another.
- */
-#$d_getsent HAS_GETSERVENT /**/
-
-/* HAS_GETSERV_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getservent(), getservbyname(), and
- * getservbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#$d_getservprotos HAS_GETSERV_PROTOS /**/
-
-/* HAS_GETSPNAM:
- * This symbol, if defined, indicates that the getspnam system call is
- * available to retrieve SysV shadow password entries by name.
- */
-#$d_getspnam HAS_GETSPNAM /**/
-
-/* HAS_GETSERVBYNAME:
- * This symbol, if defined, indicates that the getservbyname()
- * routine is available to look up services by their name.
- */
-/* HAS_GETSERVBYPORT:
- * This symbol, if defined, indicates that the getservbyport()
- * routine is available to look up services by their port.
- */
-#$d_getsbyname HAS_GETSERVBYNAME /**/
-#$d_getsbyport HAS_GETSERVBYPORT /**/
-
-/* HAS_GNULIBC:
- * This symbol, if defined, indicates to the C program that
- * the GNU C library is being used.
- */
-#$d_gnulibc HAS_GNULIBC /**/
-#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
-# define _GNU_SOURCE
-#endif
-/* HAS_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-#$d_hasmntopt HAS_HASMNTOPT /**/
-
-/* HAS_HTONL:
- * This symbol, if defined, indicates that the htonl() routine (and
- * friends htons() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_HTONS:
- * This symbol, if defined, indicates that the htons() routine (and
- * friends htonl() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHL:
- * This symbol, if defined, indicates that the ntohl() routine (and
- * friends htonl() htons() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHS:
- * This symbol, if defined, indicates that the ntohs() routine (and
- * friends htonl() htons() ntohl()) are available to do network
- * order byte swapping.
- */
-#$d_htonl HAS_HTONL /**/
-#$d_htonl HAS_HTONS /**/
-#$d_htonl HAS_NTOHL /**/
-#$d_htonl HAS_NTOHS /**/
-
-/* HAS_ICONV:
- * This symbol, if defined, indicates that the iconv routine is
- * available to do character set conversions.
- */
-#$d_iconv HAS_ICONV /**/
-
-/* HAS_INT64_T:
- * This symbol will defined if the C compiler supports int64_t.
- * Usually the <inttypes.h> needs to be included, but sometimes
- * <sys/types.h> is enough.
- */
-#$d_int64_t HAS_INT64_T /**/
-
-/* HAS_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-#$d_isascii HAS_ISASCII /**/
-
-/* HAS_ISNAN:
- * This symbol, if defined, indicates that the isnan routine is
- * available to check whether a double is a NaN.
- */
-#$d_isnan HAS_ISNAN /**/
-
-/* HAS_ISNANL:
- * This symbol, if defined, indicates that the isnanl routine is
- * available to check whether a long double is a NaN.
- */
-#$d_isnanl HAS_ISNANL /**/
-
-/* HAS_LCHOWN:
- * This symbol, if defined, indicates that the lchown routine is
- * available to operate on a symbolic link (instead of following the
- * link).
- */
-#$d_lchown HAS_LCHOWN /**/
-
-/* HAS_LDBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol LDBL_DIG, which is the number
- * of significant digits in a long double precision number. Unlike
- * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined.
- */
-#$d_ldbl_dig HAS_LDBL_DIG /* */
-
-/* HAS_LONG_DOUBLE:
- * This symbol will be defined if the C compiler supports long
- * doubles.
- */
-/* LONG_DOUBLESIZE:
- * This symbol contains the size of a long double, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long doubles.
- */
-#$d_longdbl HAS_LONG_DOUBLE /**/
-#ifdef HAS_LONG_DOUBLE
-#define LONG_DOUBLESIZE $longdblsize /**/
-#endif
-
-/* HAS_LONG_LONG:
- * This symbol will be defined if the C compiler supports long long.
- */
-/* LONGLONGSIZE:
- * This symbol contains the size of a long long, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long long.
- */
-#$d_longlong HAS_LONG_LONG /**/
-#ifdef HAS_LONG_LONG
-#define LONGLONGSIZE $longlongsize /**/
-#endif
-
-/* HAS_LSEEK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the lseek() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
- */
-#$d_lseekproto HAS_LSEEK_PROTO /**/
-
-/* HAS_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-#$d_madvise HAS_MADVISE /**/
-
-/* HAS_MEMCHR:
- * This symbol, if defined, indicates that the memchr routine is available
- * to locate characters within a C string.
- */
-#$d_memchr HAS_MEMCHR /**/
-
-/* HAS_MKDTEMP:
- * This symbol, if defined, indicates that the mkdtemp routine is
- * available to exclusively create a uniquely named temporary directory.
- */
-#$d_mkdtemp HAS_MKDTEMP /**/
-
-/* HAS_MKSTEMP:
- * This symbol, if defined, indicates that the mkstemp routine is
- * available to exclusively create and open a uniquely named
- * temporary file.
- */
-#$d_mkstemp HAS_MKSTEMP /**/
-
-/* HAS_MKSTEMPS:
- * This symbol, if defined, indicates that the mkstemps routine is
- * available to excluslvely create and open a uniquely named
- * (with a suffix) temporary file.
- */
-#$d_mkstemps HAS_MKSTEMPS /**/
-
-/* HAS_MMAP:
- * This symbol, if defined, indicates that the mmap system call is
- * available to map a file into memory.
- */
-/* Mmap_t:
- * This symbol holds the return type of the mmap() system call
- * (and simultaneously the type of the first argument).
- * Usually set to 'void *' or 'cadd_t'.
- */
-#$d_mmap HAS_MMAP /**/
-#define Mmap_t $mmaptype /**/
-
-/* HAS_MODFL:
- * This symbol, if defined, indicates that the modfl routine is
- * available to split a long double x into a fractional part f and
- * an integer part i such that |f| < 1.0 and (f + i) = x.
- */
-#$d_modfl HAS_MODFL /**/
-
-/* HAS_MPROTECT:
- * This symbol, if defined, indicates that the mprotect system call is
- * available to modify the access protection of a memory mapped file.
- */
-#$d_mprotect HAS_MPROTECT /**/
-
-/* HAS_MSG:
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported (IPC mechanism based on message queues).
- */
-#$d_msg HAS_MSG /**/
-
-/* HAS_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-#$d_off64_t HAS_OFF64_T /**/
-
-/* HAS_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-#$d_open3 HAS_OPEN3 /**/
-
-/* OLD_PTHREAD_CREATE_JOINABLE:
- * This symbol, if defined, indicates how to create pthread
- * in joinable (aka undetached) state. NOTE: not defined
- * if pthread.h already has defined PTHREAD_CREATE_JOINABLE
- * (the new version of the constant).
- * If defined, known values are PTHREAD_CREATE_UNDETACHED
- * and __UNDETACHED.
- */
-#$d_old_pthread_create_joinable OLD_PTHREAD_CREATE_JOINABLE $old_pthread_create_joinable /**/
-
-/* HAS_PTHREAD_YIELD:
- * This symbol, if defined, indicates that the pthread_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/* SCHED_YIELD:
- * This symbol defines the way to yield the execution of
- * the current thread. Known ways are sched_yield,
- * pthread_yield, and pthread_yield with NULL.
- */
-/* HAS_SCHED_YIELD:
- * This symbol, if defined, indicates that the sched_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-#$d_pthread_yield HAS_PTHREAD_YIELD /**/
-#define SCHED_YIELD $sched_yield /**/
-#$d_sched_yield HAS_SCHED_YIELD /**/
-
-/* HAS_SAFE_BCOPY:
- * This symbol, if defined, indicates that the bcopy routine is available
- * to copy potentially overlapping memory blocks. Otherwise you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-#$d_safebcpy HAS_SAFE_BCOPY /**/
-
-/* HAS_SAFE_MEMCPY:
- * This symbol, if defined, indicates that the memcpy routine is available
- * to copy potentially overlapping memory blocks. Otherwise you should
- * probably use memmove() or memcpy(). If neither is defined, roll your
- * own version.
- */
-#$d_safemcpy HAS_SAFE_MEMCPY /**/
-
-/* HAS_SANE_MEMCMP:
- * This symbol, if defined, indicates that the memcmp routine is available
- * and can be used to compare relative magnitudes of chars with their high
- * bits set. If it is not defined, roll your own version.
- */
-#$d_sanemcmp HAS_SANE_MEMCMP /**/
-
-/* HAS_SEM:
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
-#$d_sem HAS_SEM /**/
-
-/* HAS_SETGRENT:
- * This symbol, if defined, indicates that the setgrent routine is
- * available for initializing sequential access of the group database.
- */
-#$d_setgrent HAS_SETGRENT /**/
-
-/* HAS_SETGROUPS:
- * This symbol, if defined, indicates that the setgroups() routine is
- * available to set the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-#$d_setgrps HAS_SETGROUPS /**/
-
-/* HAS_SETHOSTENT:
- * This symbol, if defined, indicates that the sethostent() routine is
- * available.
- */
-#$d_sethent HAS_SETHOSTENT /**/
-
-/* HAS_SETNETENT:
- * This symbol, if defined, indicates that the setnetent() routine is
- * available.
- */
-#$d_setnent HAS_SETNETENT /**/
-
-/* HAS_SETPROTOENT:
- * This symbol, if defined, indicates that the setprotoent() routine is
- * available.
- */
-#$d_setpent HAS_SETPROTOENT /**/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-#$d_setproctitle HAS_SETPROCTITLE /**/
-
-/* HAS_SETPWENT:
- * This symbol, if defined, indicates that the setpwent routine is
- * available for initializing sequential access of the passwd database.
- */
-#$d_setpwent HAS_SETPWENT /**/
-
-/* HAS_SETSERVENT:
- * This symbol, if defined, indicates that the setservent() routine is
- * available.
- */
-#$d_setsent HAS_SETSERVENT /**/
-
-/* HAS_SETVBUF:
- * This symbol, if defined, indicates that the setvbuf routine is
- * available to change buffering on an open stdio stream.
- * to a line-buffered mode.
- */
-#$d_setvbuf HAS_SETVBUF /**/
-
-/* USE_SFIO:
- * This symbol, if defined, indicates that sfio should
- * be used.
- */
-#$d_sfio USE_SFIO /**/
-
-/* HAS_SHM:
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
-#$d_shm HAS_SHM /**/
-
-/* HAS_SIGACTION:
- * This symbol, if defined, indicates that Vr4's sigaction() routine
- * is available.
- */
-#$d_sigaction HAS_SIGACTION /**/
-
-/* HAS_SIGSETJMP:
- * This variable indicates to the C program that the sigsetjmp()
- * routine is available to save the calling process's registers
- * and stack environment for later use by siglongjmp(), and
- * to optionally save the process's signal mask. See
- * Sigjmp_buf, Sigsetjmp, and Siglongjmp.
- */
-/* Sigjmp_buf:
- * This is the buffer type to be used with Sigsetjmp and Siglongjmp.
- */
-/* Sigsetjmp:
- * This macro is used in the same way as sigsetjmp(), but will invoke
- * traditional setjmp() if sigsetjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/* Siglongjmp:
- * This macro is used in the same way as siglongjmp(), but will invoke
- * traditional longjmp() if siglongjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-#$d_sigsetjmp HAS_SIGSETJMP /**/
-#ifdef HAS_SIGSETJMP
-#define Sigjmp_buf sigjmp_buf
-#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
-#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
-#else
-#define Sigjmp_buf jmp_buf
-#define Sigsetjmp(buf,save_mask) setjmp((buf))
-#define Siglongjmp(buf,retval) longjmp((buf),(retval))
-#endif
-
-/* 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.
- */
-/* HAS_MSG_CTRUNC:
- * This symbol, if defined, indicates that the MSG_CTRUNC is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_DONTROUTE:
- * This symbol, if defined, indicates that the MSG_DONTROUTE is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_OOB:
- * This symbol, if defined, indicates that the MSG_OOB is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PEEK:
- * This symbol, if defined, indicates that the MSG_PEEK is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_MSG_PROXY:
- * This symbol, if defined, indicates that the MSG_PROXY is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-/* HAS_SCM_RIGHTS:
- * This symbol, if defined, indicates that the SCM_RIGHTS is supported.
- * Checking just with #ifdef might not be enough because this symbol
- * has been known to be an enum.
- */
-#$d_socket HAS_SOCKET /**/
-#$d_sockpair HAS_SOCKETPAIR /**/
-#$d_msg_ctrunc HAS_MSG_CTRUNC /**/
-#$d_msg_dontroute HAS_MSG_DONTROUTE /**/
-#$d_msg_oob HAS_MSG_OOB /**/
-#$d_msg_peek HAS_MSG_PEEK /**/
-#$d_msg_proxy HAS_MSG_PROXY /**/
-#$d_scm_rights HAS_SCM_RIGHTS /**/
-
-/* HAS_SOCKS5_INIT:
- * This symbol, if defined, indicates that the socks5_init routine is
- * available to initialize SOCKS 5.
- */
-#$d_socks5_init HAS_SOCKS5_INIT /**/
-
-/* HAS_SQRTL:
- * This symbol, if defined, indicates that the sqrtl routine is
- * available to do long double square roots.
- */
-#$d_sqrtl HAS_SQRTL /**/
-
-/* USE_STAT_BLOCKS:
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
-#ifndef USE_STAT_BLOCKS
-#$d_statblks USE_STAT_BLOCKS /**/
-#endif
-
-/* HAS_STRUCT_STATFS_F_FLAGS:
- * This symbol, if defined, indicates that the struct statfs
- * does have the f_flags member containing the mount flags of
- * the filesystem containing the file.
- * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3),
- * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not
- * have statfs() and struct statfs, they have ustat() and getmnt()
- * with struct ustat and struct fs_data.
- */
-#$d_statfs_f_flags HAS_STRUCT_STATFS_F_FLAGS /**/
-
-/* HAS_STRUCT_STATFS:
- * This symbol, if defined, indicates that the struct statfs
- * to do statfs() is supported.
- */
-#$d_statfs_s HAS_STRUCT_STATFS /**/
-
-/* HAS_FSTATVFS:
- * This symbol, if defined, indicates that the fstatvfs routine is
- * available to stat filesystems by file descriptors.
- */
-#$d_fstatvfs HAS_FSTATVFS /**/
-
-/* USE_STDIO_PTR:
- * This symbol is defined if the _ptr and _cnt fields (or similar)
- * of the stdio FILE structure can be used to access the stdio buffer
- * for a file handle. If this is defined, then the FILE_ptr(fp)
- * and FILE_cnt(fp) macros will also be defined and should be used
- * to access these fields.
- */
-/* FILE_ptr:
- * This macro is used to access the _ptr field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_PTR_LVALUE:
- * This symbol is defined if the FILE_ptr macro can be used as an
- * lvalue.
- */
-/* FILE_cnt:
- * This macro is used to access the _cnt field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_CNT_LVALUE:
- * This symbol is defined if the FILE_cnt macro can be used as an
- * lvalue.
- */
-/* STDIO_PTR_LVAL_SETS_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n has the side effect of decreasing the
- * value of File_cnt(fp) by n.
- */
-/* STDIO_PTR_LVAL_NOCHANGE_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n leaves File_cnt(fp) unchanged.
- */
-#$d_stdstdio USE_STDIO_PTR /**/
-#ifdef USE_STDIO_PTR
-#define FILE_ptr(fp) $stdio_ptr
-#$d_stdio_ptr_lval STDIO_PTR_LVALUE /**/
-#define FILE_cnt(fp) $stdio_cnt
-#$d_stdio_cnt_lval STDIO_CNT_LVALUE /**/
-#$d_stdio_ptr_lval_sets_cnt STDIO_PTR_LVAL_SETS_CNT /**/
-#$d_stdio_ptr_lval_nochange_cnt STDIO_PTR_LVAL_NOCHANGE_CNT /**/
-#endif
-
-/* USE_STDIO_BASE:
- * This symbol is defined if the _base field (or similar) of the
- * stdio FILE structure can be used to access the stdio buffer for
- * a file handle. If this is defined, then the FILE_base(fp) macro
- * will also be defined and should be used to access this field.
- * Also, the FILE_bufsiz(fp) macro will be defined and should be used
- * to determine the number of bytes in the buffer. USE_STDIO_BASE
- * will never be defined unless USE_STDIO_PTR is.
- */
-/* FILE_base:
- * This macro is used to access the _base field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_BASE is defined.
- */
-/* FILE_bufsiz:
- * This macro is used to determine the number of bytes in the I/O
- * buffer pointed to by _base field (or equivalent) of the FILE
- * structure pointed to its argument. This macro will always be defined
- * if USE_STDIO_BASE is defined.
- */
-#$d_stdiobase USE_STDIO_BASE /**/
-#ifdef USE_STDIO_BASE
-#define FILE_base(fp) $stdio_base
-#define FILE_bufsiz(fp) $stdio_bufsiz
-#endif
-
-/* HAS_STRERROR:
- * This symbol, if defined, indicates that the strerror routine is
- * available to translate error numbers to strings. See the writeup
- * of Strerror() in this file before you try to define your own.
- */
-/* HAS_SYS_ERRLIST:
- * This symbol, if defined, indicates that the sys_errlist array is
- * available to translate error numbers to strings. The extern int
- * sys_nerr gives the size of that table.
- */
-/* Strerror:
- * This preprocessor symbol is defined as a macro if strerror() is
- * not available to translate error numbers to strings but sys_errlist[]
- * array is there.
- */
-#$d_strerror HAS_STRERROR /**/
-#$d_syserrlst HAS_SYS_ERRLIST /**/
-#define Strerror(e) $d_strerrm
-
-/* HAS_STRTOLD:
- * This symbol, if defined, indicates that the strtold routine is
- * available to convert strings to long doubles.
- */
-#$d_strtold HAS_STRTOLD /**/
-
-/* HAS_STRTOLL:
- * This symbol, if defined, indicates that the strtoll routine is
- * available to convert strings to long longs.
- */
-#$d_strtoll HAS_STRTOLL /**/
-
-/* HAS_STRTOULL:
- * This symbol, if defined, indicates that the strtoull routine is
- * available to convert strings to unsigned long longs.
- */
-#$d_strtoull HAS_STRTOULL /**/
-
-/* HAS_STRTOUQ:
- * This symbol, if defined, indicates that the strtouq routine is
- * available to convert strings to unsigned long longs (quads).
- */
-#$d_strtouq HAS_STRTOUQ /**/
-
-/* HAS_TELLDIR_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the telldir() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern long telldir _((DIR*));
- */
-#$d_telldirproto HAS_TELLDIR_PROTO /**/
-
-/* Time_t:
- * This symbol holds the type returned by time(). It can be long,
- * or time_t on BSD sites (in which case <sys/types.h> should be
- * included).
- */
-#define Time_t $timetype /* Time type */
-
-/* HAS_TIMES:
- * This symbol, if defined, indicates that the times() routine exists.
- * Note that this became obsolete on some systems (SUNOS), which now
- * use getrusage(). It may be necessary to include <sys/times.h>.
- */
-#$d_times HAS_TIMES /**/
-
-/* HAS_UNION_SEMUN:
- * This symbol, if defined, indicates that the union semun is
- * defined by including <sys/sem.h>. If not, the user code
- * probably needs to define it as:
- * union semun {
- * int val;
- * struct semid_ds *buf;
- * unsigned short *array;
- * }
- */
-/* USE_SEMCTL_SEMUN:
- * This symbol, if defined, indicates that union semun is
- * used for semctl IPC_STAT.
- */
-/* USE_SEMCTL_SEMID_DS:
- * This symbol, if defined, indicates that struct semid_ds * is
- * used for semctl IPC_STAT.
- */
-#$d_union_semun HAS_UNION_SEMUN /**/
-#$d_semctl_semun USE_SEMCTL_SEMUN /**/
-#$d_semctl_semid_ds USE_SEMCTL_SEMID_DS /**/
-
-/* HAS_USTAT:
- * This symbol, if defined, indicates that the ustat system call is
- * available to query file system statistics by dev_t.
- */
-#$d_ustat HAS_USTAT /**/
-
-/* HAS_VFORK:
- * This symbol, if defined, indicates that vfork() exists.
- */
-#$d_vfork HAS_VFORK /**/
-
-/* Signal_t:
- * This symbol's value is either "void" or "int", corresponding to the
- * appropriate return type of a signal handler. Thus, you can declare
- * a signal handler using "Signal_t (*handler)()", and define the
- * handler using "Signal_t handler(sig)".
- */
-#define Signal_t $signal_t /* Signal handler's return type */
-
-/* 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().
- */
-/* USE_CHAR_VSPRINTF:
- * 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.
- */
-#$d_vprintf HAS_VPRINTF /**/
-#$d_charvspr USE_CHAR_VSPRINTF /**/
-
-/* USE_DYNAMIC_LOADING:
- * This symbol, if defined, indicates that dynamic loading of
- * some sort is available.
- */
-#$usedl USE_DYNAMIC_LOADING /**/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE $doublesize /**/
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-#$ebcdic EBCDIC /**/
-
-/* FFLUSH_NULL:
- * This symbol, if defined, tells that fflush(NULL) does flush
- * all pending stdio output.
- */
-/* FFLUSH_ALL:
- * This symbol, if defined, tells that to flush
- * all pending stdio output one must loop through all
- * the stdio file handles stored in an array and fflush them.
- * Note that if fflushNULL is defined, fflushall will not
- * even be probed for and will be left undefined.
- */
-#$fflushNULL FFLUSH_NULL /**/
-#$fflushall FFLUSH_ALL /**/
-
-/* Fpos_t:
- * This symbol holds the type used to declare file positions in libc.
- * It can be fpos_t, long, uint, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Fpos_t $fpostype /* File position type */
-
-/* Gid_t_f:
- * This symbol defines the format string used for printing a Gid_t.
- */
-#define Gid_t_f $gidformat /**/
-
-/* Gid_t_sign:
- * This symbol holds the signedess of a Gid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Gid_t_sign $gidsign /* GID sign */
-
-/* Gid_t_size:
- * This symbol holds the size of a Gid_t in bytes.
- */
-#define Gid_t_size $gidsize /* GID size */
-
-/* Gid_t:
- * This symbol holds the return type of getgid() and the type of
- * argument to setrgid() and related functions. Typically,
- * it is the type of group ids in the kernel. It can be int, ushort,
- * gid_t, etc... It may be necessary to include <sys/types.h> to get
- * any typedef'ed information.
- */
-#define Gid_t $gidtype /* Type for getgid(), etc... */
-
-/* Groups_t:
- * This symbol holds the type used for the second argument to
- * getgroups() and setgroups(). Usually, this is the same as
- * gidtype (gid_t) , but sometimes it isn't.
- * It can be int, ushort, gid_t, etc...
- * It may be necessary to include <sys/types.h> to get any
- * typedef'ed information. This is only required if you have
- * getgroups() or setgroups()..
- */
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-#define Groups_t $groupstype /* Type for 2nd arg to [sg]etgroups() */
-#endif
-
-/* DB_Prefix_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is u_int32_t.
- */
-/* DB_Hash_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is size_t.
- */
-#define DB_Hash_t $db_hashtype /**/
-#define DB_Prefix_t $db_prefixtype /**/
-
-/* I_GRP:
- * This symbol, if defined, indicates to the C program that it should
- * include <grp.h>.
- */
-/* GRPASSWD:
- * This symbol, if defined, indicates to the C program that struct group
- * in <grp.h> contains gr_passwd.
- */
-#$i_grp I_GRP /**/
-#$d_grpasswd GRPASSWD /**/
-
-/* I_ICONV:
- * This symbol, if defined, indicates that <iconv.h> exists and
- * should be included.
- */
-#$i_iconv I_ICONV /**/
-
-/* I_IEEEFP:
- * This symbol, if defined, indicates that <ieeefp.h> exists and
- * should be included.
- */
-#$i_ieeefp I_IEEEFP /**/
-
-/* I_INTTYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <inttypes.h>.
- */
-#$i_inttypes I_INTTYPES /**/
-
-/* I_LIBUTIL:
- * This symbol, if defined, indicates that <libutil.h> exists and
- * should be included.
- */
-#$i_libutil I_LIBUTIL /**/
-
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-#$i_machcthr I_MACH_CTHREADS /**/
-
-/* I_MNTENT:
- * This symbol, if defined, indicates that <mntent.h> exists and
- * should be included.
- */
-#$i_mntent I_MNTENT /**/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-#$i_netdb I_NETDB /**/
-
-/* I_NETINET_TCP:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/tcp.h>.
- */
-#$i_netinettcp I_NETINET_TCP /**/
-
-/* I_POLL:
- * This symbol, if defined, indicates that <poll.h> exists and
- * should be included.
- */
-#$i_poll I_POLL /**/
-
-/* I_PROT:
- * This symbol, if defined, indicates that <prot.h> exists and
- * should be included.
- */
-#$i_prot I_PROT /**/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-#$i_pthread I_PTHREAD /**/
-
-/* 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.
- */
-/* PWGECOS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_gecos.
- */
-/* PWPASSWD:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_passwd.
- */
-#$i_pwd I_PWD /**/
-#$d_pwquota PWQUOTA /**/
-#$d_pwage PWAGE /**/
-#$d_pwchange PWCHANGE /**/
-#$d_pwclass PWCLASS /**/
-#$d_pwexpire PWEXPIRE /**/
-#$d_pwcomment PWCOMMENT /**/
-#$d_pwgecos PWGECOS /**/
-#$d_pwpasswd PWPASSWD /**/
-
-/* I_SHADOW:
- * This symbol, if defined, indicates that <shadow.h> exists and
- * should be included.
- */
-#$i_shadow I_SHADOW /**/
-
-/* I_SOCKS:
- * This symbol, if defined, indicates that <socks.h> exists and
- * should be included.
- */
-#$i_socks I_SOCKS /**/
-
-/* I_SUNMATH:
- * This symbol, if defined, indicates that <sunmath.h> exists and
- * should be included.
- */
-#$i_sunmath I_SUNMATH /**/
-
-/* I_SYSLOG:
- * This symbol, if defined, indicates that <syslog.h> exists and
- * should be included.
- */
-#$i_syslog I_SYSLOG /**/
-
-/* I_SYSMODE:
- * This symbol, if defined, indicates that <sys/mode.h> exists and
- * should be included.
- */
-#$i_sysmode I_SYSMODE /**/
-
-/* I_SYS_MOUNT:
- * This symbol, if defined, indicates that <sys/mount.h> exists and
- * should be included.
- */
-#$i_sysmount I_SYS_MOUNT /**/
-
-/* I_SYS_STATFS:
- * This symbol, if defined, indicates that <sys/statfs.h> exists.
- */
-#$i_sysstatfs I_SYS_STATFS /**/
-
-/* I_SYS_STATVFS:
- * This symbol, if defined, indicates that <sys/statvfs.h> exists and
- * should be included.
- */
-#$i_sysstatvfs I_SYS_STATVFS /**/
-
-/* I_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-#$i_sysuio I_SYSUIO /**/
-
-/* I_SYSUTSNAME:
- * This symbol, if defined, indicates that <sys/utsname.h> exists and
- * should be included.
- */
-#$i_sysutsname I_SYSUTSNAME /**/
-
-/* I_SYS_VFS:
- * This symbol, if defined, indicates that <sys/vfs.h> exists and
- * should be included.
- */
-#$i_sysvfs I_SYS_VFS /**/
-
-/* I_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <time.h>.
- */
-/* I_SYS_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h>.
- */
-/* I_SYS_TIME_KERNEL:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h> with KERNEL defined.
- */
-#$i_time I_TIME /**/
-#$i_systime I_SYS_TIME /**/
-#$i_systimek I_SYS_TIME_KERNEL /**/
-
-/* I_USTAT:
- * This symbol, if defined, indicates that <ustat.h> exists and
- * should be included.
- */
-#$i_ustat I_USTAT /**/
-
-/* PERL_INC_VERSION_LIST:
- * This variable specifies the list of subdirectories in over
- * which perl.c:incpush() and lib/lib.pm will automatically
- * search when adding directories to @INC, in a format suitable
- * for a C initialization string. See the inc_version_list entry
- * in Porting/Glossary for more details.
- */
-#define PERL_INC_VERSION_LIST $inc_version_list_init /**/
-
-/* INSTALL_USR_BIN_PERL:
- * This symbol, if defined, indicates that Perl is to be installed
- * also as /usr/bin/perl.
- */
-#$installusrbinperl INSTALL_USR_BIN_PERL /**/
-
-/* PERL_PRIfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for output.
- */
-/* PERL_PRIgldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'g') for output.
- */
-/* PERL_PRIeldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'e') for output.
- */
-/* PERL_SCNfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for input.
- */
-#$d_PRIfldbl PERL_PRIfldbl $sPRIfldbl /**/
-#$d_PRIgldbl PERL_PRIgldbl $sPRIgldbl /**/
-#$d_PRIeldbl PERL_PRIeldbl $sPRIeldbl /**/
-#$d_SCNfldbl PERL_SCNfldbl $sSCNfldbl /**/
-
-/* Off_t:
- * This symbol holds the type used to declare offsets in the kernel.
- * It can be int, long, off_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-/* LSEEKSIZE:
- * This symbol holds the number of bytes used by the Off_t.
- */
-/* Off_t_size:
- * This symbol holds the number of bytes used by the Off_t.
- */
-#define Off_t $lseektype /* <offset> type */
-#define LSEEKSIZE $lseeksize /* <offset> size */
-#define Off_t_size $lseeksize /* <offset> size */
-
-/* Free_t:
- * This variable contains the return type of free(). It is usually
- * void, but occasionally int.
- */
-/* Malloc_t:
- * This symbol is the type of pointer returned by malloc and realloc.
- */
-#define Malloc_t $malloctype /**/
-#define Free_t $freetype /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-#$d_mymalloc MYMALLOC /**/
-
-/* Mode_t:
- * This symbol holds the type used to declare file modes
- * for systems calls. It is usually mode_t, but may be
- * int or unsigned short. It may be necessary to include <sys/types.h>
- * to get any typedef'ed information.
- */
-#define Mode_t $modetype /* file mode parameter for system calls */
-
-/* VAL_O_NONBLOCK:
- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on
- * non-blocking I/O for the file descriptor. Note that there is no way
- * back, i.e. you cannot turn it blocking again this way. If you wish to
- * alternatively switch between blocking and non-blocking, use the
- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
- */
-/* VAL_EAGAIN:
- * This symbol holds the errno error code set by read() when no data was
- * present on the non-blocking file descriptor.
- */
-/* RD_NODATA:
- * This symbol holds the return code from read() when no data is present
- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
- * not defined, then you can't distinguish between no data and EOF by
- * issuing a read(). You'll have to find another way to tell for sure!
- */
-/* EOF_NONBLOCK:
- * This symbol, if defined, indicates to the C program that a read() on
- * a non-blocking file descriptor will return 0 on EOF, and not the value
- * held in RD_NODATA (-1 usually, in that case!).
- */
-#define VAL_O_NONBLOCK $o_nonblock
-#define VAL_EAGAIN $eagain
-#define RD_NODATA $rd_nodata
-#$d_eofnblk EOF_NONBLOCK
-
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
- */
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
- */
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
- */
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
- */
-#define Netdb_host_t $netdb_host_type /**/
-#define Netdb_hlen_t $netdb_hlen_type /**/
-#define Netdb_name_t $netdb_name_type /**/
-#define Netdb_net_t $netdb_net_type /**/
-
-/* PERL_OTHERLIBDIRS:
- * This variable contains a colon-separated set of paths for the perl
- * binary to search for additional library files or modules.
- * These directories will be tacked to the end of @INC.
- * Perl will automatically search below each path for version-
- * and architecture-specific directories. See PERL_INC_VERSION_LIST
- * for more details.
- */
-#$d_perl_otherlibdirs PERL_OTHERLIBDIRS "$otherlibdirs" /**/
-
-/* IVTYPE:
- * This symbol defines the C type used for Perl's IV.
- */
-/* UVTYPE:
- * This symbol defines the C type used for Perl's UV.
- */
-/* I8TYPE:
- * This symbol defines the C type used for Perl's I8.
- */
-/* U8TYPE:
- * This symbol defines the C type used for Perl's U8.
- */
-/* I16TYPE:
- * This symbol defines the C type used for Perl's I16.
- */
-/* U16TYPE:
- * This symbol defines the C type used for Perl's U16.
- */
-/* I32TYPE:
- * This symbol defines the C type used for Perl's I32.
- */
-/* U32TYPE:
- * This symbol defines the C type used for Perl's U32.
- */
-/* I64TYPE:
- * This symbol defines the C type used for Perl's I64.
- */
-/* U64TYPE:
- * This symbol defines the C type used for Perl's U64.
- */
-/* NVTYPE:
- * This symbol defines the C type used for Perl's NV.
- */
-/* IVSIZE:
- * This symbol contains the sizeof(IV).
- */
-/* UVSIZE:
- * This symbol contains the sizeof(UV).
- */
-/* I8SIZE:
- * This symbol contains the sizeof(I8).
- */
-/* U8SIZE:
- * This symbol contains the sizeof(U8).
- */
-/* I16SIZE:
- * This symbol contains the sizeof(I16).
- */
-/* U16SIZE:
- * This symbol contains the sizeof(U16).
- */
-/* I32SIZE:
- * This symbol contains the sizeof(I32).
- */
-/* U32SIZE:
- * This symbol contains the sizeof(U32).
- */
-/* I64SIZE:
- * This symbol contains the sizeof(I64).
- */
-/* U64SIZE:
- * This symbol contains the sizeof(U64).
- */
-/* NVSIZE:
- * This symbol contains the sizeof(NV).
- */
-/* NV_PRESERVES_UV:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * can preserve all the bits of a variable of type UVTYPE.
- */
-/* NV_PRESERVES_UV_BITS:
- * This symbol contains the number of bits a variable of type NVTYPE
- * can preserve of a variable of type UVTYPE.
- */
-#define IVTYPE $ivtype /**/
-#define UVTYPE $uvtype /**/
-#define I8TYPE $i8type /**/
-#define U8TYPE $u8type /**/
-#define I16TYPE $i16type /**/
-#define U16TYPE $u16type /**/
-#define I32TYPE $i32type /**/
-#define U32TYPE $u32type /**/
-#ifdef HAS_QUAD
-#define I64TYPE $i64type /**/
-#define U64TYPE $u64type /**/
-#endif
-#define NVTYPE $nvtype /**/
-#define IVSIZE $ivsize /**/
-#define UVSIZE $uvsize /**/
-#define I8SIZE $i8size /**/
-#define U8SIZE $u8size /**/
-#define I16SIZE $i16size /**/
-#define U16SIZE $u16size /**/
-#define I32SIZE $i32size /**/
-#define U32SIZE $u32size /**/
-#ifdef HAS_QUAD
-#define I64SIZE $i64size /**/
-#define U64SIZE $u64size /**/
-#endif
-#define NVSIZE $nvsize /**/
-#$d_nv_preserves_uv NV_PRESERVES_UV
-#define NV_PRESERVES_UV_BITS $d_nv_preserves_uv_bits
-
-/* IVdf:
- * This symbol defines the format string used for printing a Perl IV
- * as a signed decimal integer.
- */
-/* UVuf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned decimal integer.
- */
-/* UVof:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned octal integer.
- */
-/* UVxf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in lowercase abcdef.
- */
-/* NVef:
- * This symbol defines the format string used for printing a Perl NV
- * using %e-ish floating point format.
- */
-/* NVff:
- * This symbol defines the format string used for printing a Perl NV
- * using %f-ish floating point format.
- */
-/* NVgf:
- * This symbol defines the format string used for printing a Perl NV
- * using %g-ish floating point format.
- */
-#define IVdf $ivdformat /**/
-#define UVuf $uvuformat /**/
-#define UVof $uvoformat /**/
-#define UVxf $uvxformat /**/
-#define NVef $nveformat /**/
-#define NVff $nvfformat /**/
-#define NVgf $nvgformat /**/
-
-/* Pid_t:
- * This symbol holds the type used to declare process ids in the kernel.
- * It can be int, uint, pid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Pid_t $pidtype /* PID type */
-
-/* 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.
- */
-/* PRIVLIB_EXP:
- * This symbol contains the ~name expanded version of PRIVLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB "$privlib" /**/
-#define PRIVLIB_EXP "$privlibexp" /**/
-
-/* PTRSIZE:
- * This symbol contains the size of a pointer, so that the C preprocessor
- * can make decisions based on it. It will be sizeof(void *) if
- * the compiler supports (void *); otherwise it will be
- * sizeof(char *).
- */
-#define PTRSIZE $ptrsize /**/
-
-/* Drand01:
- * This macro is to be used to generate uniformly distributed
- * random numbers over the range [0., 1.[. You may have to supply
- * an 'extern double drand48();' in your program since SunOS 4.1.3
- * doesn't provide you with anything relevant in it's headers.
- * See HAS_DRAND48_PROTO.
- */
-/* Rand_seed_t:
- * This symbol defines the type of the argument of the
- * random seed function.
- */
-/* seedDrand01:
- * This symbol defines the macro to be used in seeding the
- * random number generator (see Drand01).
- */
-/* RANDBITS:
- * This symbol indicates how many bits are produced by the
- * function used to generate normalized random numbers.
- * Values include 15, 16, 31, and 48.
- */
-#define Drand01() $drand01 /**/
-#define Rand_seed_t $randseedtype /**/
-#define seedDrand01(x) $seedfunc((Rand_seed_t)x) /**/
-#define RANDBITS $randbits /**/
-
-/* SELECT_MIN_BITS:
- * This symbol holds the minimum number of bits operated by select.
- * That is, if you do select(n, ...), how many bits at least will be
- * cleared in the masks if some activity is detected. Usually this
- * is either n or 32*ceil(n/32), especially many little-endians do
- * the latter. This is only useful if you have select(), naturally.
- */
-#define SELECT_MIN_BITS $selectminbits /**/
-
-/* Select_fd_set_t:
- * This symbol holds the type used for the 2nd, 3rd, and 4th
- * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
- * is defined, and 'int *' otherwise. This is only useful if you
- * have select(), of course.
- */
-#define Select_fd_set_t $selecttype /**/
-
-/* SIG_NAME:
- * This symbol contains a list of signal names in order of
- * signal number. This is intended
- * to be used as a static array initialization, like this:
- * char *sig_name[] = { SIG_NAME };
- * The signals in the list are separated with commas, and each signal
- * is surrounded by double quotes. There is no leading SIG in the signal
- * name, i.e. SIGQUIT is known as "QUIT".
- * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
- * etc., where nn is the actual signal number (e.g. NUM37).
- * The signal number for sig_name[i] is stored in sig_num[i].
- * The last element is 0 to terminate the list with a NULL. This
- * corresponds to the 0 at the end of the sig_num list.
- */
-/* SIG_NUM:
- * This symbol contains a list of signal numbers, in the same order as the
- * SIG_NAME list. It is suitable for static array initialization, as in:
- * int sig_num[] = { SIG_NUM };
- * The signals in the list are separated with commas, and the indices
- * within that list and the SIG_NAME list match, so it's easy to compute
- * the signal name from a number or vice versa at the price of a small
- * dynamic linear lookup.
- * Duplicates are allowed, but are moved to the end of the list.
- * The signal number corresponding to sig_name[i] is sig_number[i].
- * if (i < NSIG) then sig_number[i] == i.
- * The last element is 0, corresponding to the 0 at the end of
- * the sig_name list.
- */
-#define SIG_NAME $sig_name_init /**/
-#define SIG_NUM $sig_num_init /**/
-
-/* SITEARCH:
- * 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.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-dependent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITEARCH_EXP:
- * This symbol contains the ~name expanded version of SITEARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define SITEARCH "$sitearch" /**/
-#define SITEARCH_EXP "$sitearchexp" /**/
-
-/* SITELIB:
- * 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.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-independent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITELIB_EXP:
- * This symbol contains the ~name expanded version of SITELIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* SITELIB_STEM:
- * This define is SITELIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-#define SITELIB "$sitelib" /**/
-#define SITELIB_EXP "$sitelibexp" /**/
-#define SITELIB_STEM "$sitelib_stem" /**/
-
-/* Size_t_size:
- * This symbol holds the size of a Size_t in bytes.
- */
-#define Size_t_size $sizesize /* */
-
-/* Size_t:
- * This symbol holds the type used to declare length parameters
- * for string functions. It is usually size_t, but may be
- * unsigned long, int, etc. It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Size_t $sizetype /* length paramater for string functions */
-
-/* Sock_size_t:
- * This symbol holds the type used for the size argument of
- * various socket calls (just the base type, not the pointer-to).
- */
-#define Sock_size_t $socksizetype /**/
-
-/* SSize_t:
- * This symbol holds the type used by functions that return
- * a count of bytes or an error condition. It must be a signed type.
- * It is usually ssize_t, but may be long or int, etc.
- * It may be necessary to include <sys/types.h> or <unistd.h>
- * to get any typedef'ed information.
- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#define SSize_t $ssizetype /* signed count of bytes */
-
-/* STARTPERL:
- * This variable contains the string to put in front of a perl
- * script to make sure (one hopes) that it runs with perl and not
- * some shell.
- */
-#define STARTPERL "$startperl" /**/
-
-/* HAS_STDIO_STREAM_ARRAY:
- * This symbol, if defined, tells that there is an array
- * holding the stdio streams.
- */
-/* STDIO_STREAM_ARRAY:
- * This symbol tells the name of the array holding the stdio streams.
- * Usual values include _iob, __iob, and __sF.
- */
-#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY /**/
-#define STDIO_STREAM_ARRAY $stdio_stream_array
-
-/* Uid_t_f:
- * This symbol defines the format string used for printing a Uid_t.
- */
-#define Uid_t_f $uidformat /**/
-
-/* Uid_t_sign:
- * This symbol holds the signedess of a Uid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Uid_t_sign $uidsign /* UID sign */
-
-/* Uid_t_size:
- * This symbol holds the size of a Uid_t in bytes.
- */
-#define Uid_t_size $uidsize /* UID size */
-
-/* Uid_t:
- * This symbol holds the type used to declare user ids in the kernel.
- * It can be int, ushort, uid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Uid_t $uidtype /* UID type */
-
-/* USE_64_BIT_INT:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be employed (be they 32 or 64 bits). The minimal possible
- * 64-bitness is used, just enough to get 64-bit integers into Perl.
- * This may mean using for example "long longs", while your memory
- * may still be limited to 2 gigabytes.
- */
-/* USE_64_BIT_ALL:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be used (be they 32 or 64 bits). The maximal possible
- * 64-bitness is employed: LP64 or ILP64, meaning that you will
- * be able to use more than 2 gigabytes of memory. This mode is
- * even more binary incompatible than USE_64_BIT_INT. You may not
- * be able to run the resulting executable in a 32-bit CPU at all or
- * you may need at least to reboot your OS to 64-bit mode.
- */
-#ifndef USE_64_BIT_INT
-#$use64bitint USE_64_BIT_INT /**/
-#endif
-
-#ifndef USE_64_BIT_ALL
-#$use64bitall USE_64_BIT_ALL /**/
-#endif
-
-/* USE_LARGE_FILES:
- * This symbol, if defined, indicates that large file support
- * should be used when available.
- */
-#ifndef USE_LARGE_FILES
-#$uselargefiles USE_LARGE_FILES /**/
-#endif
-
-/* USE_LONG_DOUBLE:
- * This symbol, if defined, indicates that long doubles should
- * be used when available.
- */
-#ifndef USE_LONG_DOUBLE
-#$uselongdouble USE_LONG_DOUBLE /**/
-#endif
-
-/* USE_MORE_BITS:
- * This symbol, if defined, indicates that 64-bit interfaces and
- * long doubles should be used when available.
- */
-#ifndef USE_MORE_BITS
-#$usemorebits USE_MORE_BITS /**/
-#endif
-
-/* MULTIPLICITY:
- * This symbol, if defined, indicates that Perl should
- * be built to use multiplicity.
- */
-#ifndef MULTIPLICITY
-#$usemultiplicity MULTIPLICITY /**/
-#endif
-
-/* USE_PERLIO:
- * This symbol, if defined, indicates that the PerlIO abstraction should
- * be used throughout. If not defined, stdio should be
- * used in a fully backward compatible manner.
- */
-#ifndef USE_PERLIO
-#$useperlio USE_PERLIO /**/
-#endif
-
-/* USE_SOCKS:
- * This symbol, if defined, indicates that Perl should
- * be built to use socks.
- */
-#ifndef USE_SOCKS
-#$usesocks USE_SOCKS /**/
-#endif
-
-/* USE_ITHREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the interpreter-based threading implementation.
- */
-/* USE_5005THREADS:
- * This symbol, if defined, indicates that Perl should be built to
- * use the 5.005-based threading implementation.
- */
-/* OLD_PTHREADS_API:
- * This symbol, if defined, indicates that Perl should
- * be built to use the old draft POSIX threads API.
- */
-#$use5005threads USE_5005THREADS /**/
-#$useithreads USE_ITHREADS /**/
-#if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
-#define USE_THREADS /* until src is revised*/
-#endif
-#$d_oldpthreads OLD_PTHREADS_API /**/
-
-/* PERL_VENDORARCH:
- * If defined, this symbol contains the name of a private library.
- * 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.
- * It may have a ~ on the front.
- * The standard distribution will put nothing in this directory.
- * Vendors who distribute perl may wish to place their own
- * architecture-dependent modules and extensions in this directory with
- * MakeMaker Makefile.PL INSTALLDIRS=vendor
- * or equivalent. See INSTALL for details.
- */
-/* PERL_VENDORARCH_EXP:
- * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#$d_vendorarch PERL_VENDORARCH "$vendorarch" /**/
-#$d_vendorarch PERL_VENDORARCH_EXP "$vendorarchexp" /**/
-
-/* PERL_VENDORLIB_EXP:
- * This symbol contains the ~name expanded version of VENDORLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* PERL_VENDORLIB_STEM:
- * This define is PERL_VENDORLIB_EXP with any trailing version-specific component
- * removed. The elements in inc_version_list (inc_version_list.U) can
- * be tacked onto this variable to generate a list of directories to search.
- */
-#$d_vendorlib PERL_VENDORLIB_EXP "$vendorlibexp" /**/
-#$d_vendorlib PERL_VENDORLIB_STEM "$vendorlib_stem" /**/
-
-/* VOIDFLAGS:
- * 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
- * 8 = suports declaration of generic void pointers
- *
- * The package designer should define VOIDUSED to indicate the requirements
- * of the package. This can be done either by #defining VOIDUSED before
- * including config.h, or by defining defvoidused in Myinit.U. If the
- * latter approach is taken, only those flags will be tested. If the
- * level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED $defvoidused
-#endif
-#define VOIDFLAGS $voidflags
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int /* is void to be avoided? */
-#define M_VOID /* Xenix strikes again */
-#endif
-
-/* PERL_XS_APIVERSION:
- * This variable contains the version of the oldest perl binary
- * compatible with the present perl. perl.c:incpush() and
- * lib/lib.pm will automatically search in $sitearch for older
- * directories across major versions back to xs_apiversion.
- * This is only useful if you have a perl library directory tree
- * structured like the default one.
- * See INSTALL for how this works.
- * The versioned site_perl directory was introduced in 5.005,
- * so that is the lowest possible value.
- * Since this can depend on compile time options (such as
- * bincompat) it is set by Configure. Other non-default sources
- * of potential incompatibility, such as multiplicity, threads,
- * debugging, 64bits, sfio, etc., are not checked for currently,
- * though in principle we could go snooping around in old
- * Config.pm files.
- */
-/* PERL_PM_APIVERSION:
- * This variable contains the version of the oldest perl
- * compatible with the present perl. (That is, pure perl modules
- * written for pm_apiversion will still work for the current
- * version). perl.c:incpush() and lib/lib.pm will automatically
- * search in $sitelib for older directories across major versions
- * back to pm_apiversion. This is only useful if you have a perl
- * library directory tree structured like the default one. The
- * versioned site_perl library was introduced in 5.005, so that's
- * the default setting for this variable. It's hard to imagine
- * it changing before Perl6. It is included here for symmetry
- * with xs_apiveprsion -- the searching algorithms will
- * (presumably) be similar.
- * See the INSTALL file for how this works.
- */
-#define PERL_XS_APIVERSION "$xs_apiversion"
-#define PERL_PM_APIVERSION "$pm_apiversion"
-
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-#$d_getpgrp HAS_GETPGRP /**/
-#$d_bsdgetpgrp USE_BSD_GETPGRP /**/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-#$d_setpgrp HAS_SETPGRP /**/
-#$d_bsdsetpgrp USE_BSD_SETPGRP /**/
-
-/* 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 $stdchar /**/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-#$d__fwalk HAS__FWALK /**/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-#$d_fcntl_can_lock FCNTL_CAN_LOCK /**/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-#$d_fsync HAS_FSYNC /**/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk _((int));
- * extern void* sbrk _((size_t));
- */
-#$d_sbrkproto HAS_SBRK_PROTO /**/
-
-#endif
-!GROK!THIS!
diff --git a/contrib/perl5/configpm b/contrib/perl5/configpm
deleted file mode 100755
index 656e379..0000000
--- a/contrib/perl5/configpm
+++ /dev/null
@@ -1,491 +0,0 @@
-#!./miniperl -w
-# $FreeBSD$
-
-my $config_pm = $ARGV[0] || 'lib/Config.pm';
-my $glossary = $ARGV[1] || 'Porting/Glossary';
-@ARGV = "./config.sh";
-
-# list names to put first (and hence lookup fastest)
-@fast = qw(archname osname osvers prefix libs libpth
- dynamic_ext static_ext extensions dlsrc so
- sig_name sig_num cc ccflags cppflags
- privlibexp archlibexp installprivlib installarchlib
- sharpbang startsh shsharp
-);
-
-# names of things which may need to have slashes changed to double-colons
-@extensions = qw(dynamic_ext static_ext extensions known_extensions);
-
-
-open CONFIG, ">$config_pm" or die "Can't open $config_pm: $!\n";
-$myver = "v5.6.1"; # XXX - Yuck - allow bootstrapping. MarkM
-
-print CONFIG <<'ENDOFBEG_NOQ', <<"ENDOFBEG";
-package Config;
-use Exporter ();
-@EXPORT = qw(%Config);
-@EXPORT_OK = qw(myconfig config_sh config_vars);
-
-# Define our own import method to avoid pulling in the full Exporter:
-sub import {
- my $pkg = shift;
- @_ = @EXPORT unless @_;
- my @func = grep {$_ ne '%Config'} @_;
- local $Exporter::ExportLevel = 1;
- Exporter::import('Config', @func) if @func;
- return if @func == @_;
- my $callpkg = caller(0);
- *{"$callpkg\::Config"} = \%Config;
-}
-
-ENDOFBEG_NOQ
-die "Perl lib version ($myver) doesn't match executable version (\$])"
- unless \$^V;
-
-\$^V eq $myver
- or die "Perl lib version ($myver) doesn't match executable version (" .
- (sprintf "v%vd",\$^V) . ")";
-
-# This file was created by configpm when Perl was built. Any changes
-# made to this file will be lost the next time perl is built.
-
-ENDOFBEG
-
-
-@fast{@fast} = @fast;
-@extensions{@extensions} = @extensions;
-@non_v=();
-@v_fast=();
-@v_others=();
-$in_v = 0;
-
-while (<>) {
- next if m:^#!/bin/sh:;
- # Catch CONFIGDOTSH=true and PERL_VERSION=n line from Configure.
- s/^(\w+)=(true|\d+)\s*$/$1='$2'\n/;
- my ($k,$v) = ($1,$2);
- # grandfather PATCHLEVEL and SUBVERSION and CONFIG
- if ($k) {
- if ($k eq 'PERL_VERSION') {
- push @v_others, "PATCHLEVEL='$v'\n";
- }
- elsif ($k eq 'PERL_SUBVERSION') {
- push @v_others, "SUBVERSION='$v'\n";
- }
- elsif ($k eq 'CONFIGDOTSH') {
- push @v_others, "CONFIG='$v'\n";
- }
- }
- # We can delimit things in config.sh with either ' or ".
- unless ($in_v or m/^(\w+)=(['"])(.*\n)/){
- push(@non_v, "#$_"); # not a name='value' line
- next;
- }
- $quote = $2;
- if ($in_v) { $val .= $_; }
- else { ($name,$val) = ($1,$3); }
- $in_v = $val !~ /$quote\n/;
- next if $in_v;
- if ($extensions{$name}) { s,/,::,g }
- if (!$fast{$name}){ push(@v_others, "$name=$quote$val"); next; }
- push(@v_fast,"$name=$quote$val");
-}
-
-foreach(@non_v){ print CONFIG $_ }
-
-print CONFIG "\n",
- "my \$config_sh = <<'!END!';\n",
- join("", @v_fast, sort @v_others),
- "!END!\n\n";
-
-# copy config summary format from the myconfig.SH script
-
-print CONFIG "my \$summary = <<'!END!';\n";
-
-open(MYCONFIG,"<myconfig.SH") || die "open myconfig.SH failed: $!";
-1 while defined($_ = <MYCONFIG>) && !/^Summary of/;
-do { print CONFIG $_ } until !defined($_ = <MYCONFIG>) || /^\s*$/;
-close(MYCONFIG);
-
-print CONFIG "\n!END!\n", <<'EOT';
-my $summary_expanded = 0;
-
-sub myconfig {
- return $summary if $summary_expanded;
- $summary =~ s{\$(\w+)}
- { my $c = $Config{$1}; defined($c) ? $c : 'undef' }ge;
- $summary_expanded = 1;
- $summary;
-}
-EOT
-
-# ----
-
-print CONFIG <<'ENDOFEND';
-
-sub FETCH {
- # check for cached value (which may be undef so we use exists not defined)
- return $_[0]->{$_[1]} if (exists $_[0]->{$_[1]});
-
- # Search for it in the big string
- my($value, $start, $marker, $quote_type);
-
- $quote_type = "'";
- # Virtual entries.
- if ($_[1] eq 'byteorder') {
- # byteorder does exist on its own but we overlay a virtual
- # dynamically recomputed value.
- my $t = $Config{ivtype};
- my $s = $Config{ivsize};
- my $f = $t eq 'long' ? 'L!' : $s == 8 ? 'Q': 'I';
- if ($s == 4 || $s == 8) {
- my $i = 0;
- foreach my $c (reverse(2..$s)) { $i |= ord($c); $i <<= 8 }
- $i |= ord(1);
- $value = join('', unpack('a'x$s, pack($f, $i)));
- } else {
- $value = '?'x$s;
- }
- } elsif ($_[1] =~ /^((?:cc|ld)flags|libs(?:wanted)?)_nolargefiles/) {
- # These are purely virtual, they do not exist, but need to
- # be computed on demand for largefile-incapable extensions.
- my $key = "${1}_uselargefiles";
- $value = $Config{$1};
- my $withlargefiles = $Config{$key};
- if ($key =~ /^(?:cc|ld)flags_/) {
- $value =~ s/\Q$withlargefiles\E\b//;
- } elsif ($key =~ /^libs/) {
- my @lflibswanted = split(' ', $Config{libswanted_uselargefiles});
- if (@lflibswanted) {
- my %lflibswanted;
- @lflibswanted{@lflibswanted} = ();
- if ($key =~ /^libs_/) {
- my @libs = grep { /^-l(.+)/ &&
- not exists $lflibswanted{$1} }
- split(' ', $Config{libs});
- $Config{libs} = join(' ', @libs);
- } elsif ($key =~ /^libswanted_/) {
- my @libswanted = grep { not exists $lflibswanted{$_} }
- split(' ', $Config{libswanted});
- $Config{libswanted} = join(' ', @libswanted);
- }
- }
- }
- } else {
- $marker = "$_[1]=";
- # return undef unless (($value) = $config_sh =~ m/^$_[1]='(.*)'\s*$/m);
- # Check for the common case, ' delimeted
- $start = index($config_sh, "\n$marker$quote_type");
- # If that failed, check for " delimited
- if ($start == -1) {
- $quote_type = '"';
- $start = index($config_sh, "\n$marker$quote_type");
- }
- return undef if ( ($start == -1) && # in case it's first
- (substr($config_sh, 0, length($marker)) ne $marker) );
- if ($start == -1) {
- # It's the very first thing we found. Skip $start forward
- # and figure out the quote mark after the =.
- $start = length($marker) + 1;
- $quote_type = substr($config_sh, $start - 1, 1);
- }
- else {
- $start += length($marker) + 2;
- }
- $value = substr($config_sh, $start,
- index($config_sh, "$quote_type\n", $start) - $start);
- }
- # If we had a double-quote, we'd better eval it so escape
- # sequences and such can be interpolated. Since the incoming
- # value is supposed to follow shell rules and not perl rules,
- # we escape any perl variable markers
- if ($quote_type eq '"') {
- $value =~ s/\$/\\\$/g;
- $value =~ s/\@/\\\@/g;
- eval "\$value = \"$value\"";
- }
- #$value = sprintf($value) if $quote_type eq '"';
- # So we can say "if $Config{'foo'}".
- $value = undef if $value eq 'undef';
- $_[0]->{$_[1]} = $value; # cache it
- return $value;
-}
-
-my $prevpos = 0;
-
-sub FIRSTKEY {
- $prevpos = 0;
- # my($key) = $config_sh =~ m/^(.*?)=/;
- substr($config_sh, 0, index($config_sh, '=') );
- # $key;
-}
-
-sub NEXTKEY {
- # Find out how the current key's quoted so we can skip to its end.
- my $quote = substr($config_sh, index($config_sh, "=", $prevpos)+1, 1);
- my $pos = index($config_sh, qq($quote\n), $prevpos) + 2;
- my $len = index($config_sh, "=", $pos) - $pos;
- $prevpos = $pos;
- $len > 0 ? substr($config_sh, $pos, $len) : undef;
-}
-
-sub EXISTS {
- # exists($_[0]->{$_[1]}) or $config_sh =~ m/^$_[1]=/m;
- exists($_[0]->{$_[1]}) or
- index($config_sh, "\n$_[1]='") != -1 or
- substr($config_sh, 0, length($_[1])+2) eq "$_[1]='" or
- index($config_sh, "\n$_[1]=\"") != -1 or
- substr($config_sh, 0, length($_[1])+2) eq "$_[1]=\"" or
- $_[1] =~ /^(?:(?:cc|ld)flags|libs(?:wanted)?)_nolargefiles$/;
-}
-
-sub STORE { die "\%Config::Config is read-only\n" }
-sub DELETE { &STORE }
-sub CLEAR { &STORE }
-
-
-sub config_sh {
- $config_sh
-}
-
-sub config_re {
- my $re = shift;
- my @matches = ($config_sh =~ /^$re=.*\n/mg);
- @matches ? (print @matches) : print "$re: not found\n";
-}
-
-sub config_vars {
- foreach(@_){
- config_re($_), next if /\W/;
- my $v=(exists $Config{$_}) ? $Config{$_} : 'UNKNOWN';
- $v='undef' unless defined $v;
- print "$_='$v';\n";
- }
-}
-
-ENDOFEND
-
-if ($^O eq 'os2') {
- print CONFIG <<'ENDOFSET';
-my %preconfig;
-if ($OS2::is_aout) {
- my ($value, $v) = $config_sh =~ m/^used_aout='(.*)'\s*$/m;
- for (split ' ', $value) {
- ($v) = $config_sh =~ m/^aout_$_='(.*)'\s*$/m;
- $preconfig{$_} = $v eq 'undef' ? undef : $v;
- }
-}
-sub TIEHASH { bless {%preconfig} }
-ENDOFSET
-} else {
- print CONFIG <<'ENDOFSET';
-sub TIEHASH { bless {} }
-ENDOFSET
-}
-
-print CONFIG <<'ENDOFTAIL';
-
-# avoid Config..Exporter..UNIVERSAL search for DESTROY then AUTOLOAD
-sub DESTROY { }
-
-tie %Config, 'Config';
-
-1;
-__END__
-
-=head1 NAME
-
-Config - access Perl configuration information
-
-=head1 SYNOPSIS
-
- use Config;
- if ($Config{'cc'} =~ /gcc/) {
- print "built by gcc\n";
- }
-
- use Config qw(myconfig config_sh config_vars);
-
- print myconfig();
-
- print config_sh();
-
- config_vars(qw(osname archname));
-
-
-=head1 DESCRIPTION
-
-The Config module contains all the information that was available to
-the C<Configure> program at Perl build time (over 900 values).
-
-Shell variables from the F<config.sh> file (written by Configure) are
-stored in the readonly-variable C<%Config>, indexed by their names.
-
-Values stored in config.sh as 'undef' are returned as undefined
-values. The perl C<exists> function can be used to check if a
-named variable exists.
-
-=over 4
-
-=item myconfig()
-
-Returns a textual summary of the major perl configuration values.
-See also C<-V> in L<perlrun/Switches>.
-
-=item config_sh()
-
-Returns the entire perl configuration information in the form of the
-original config.sh shell variable assignment script.
-
-=item config_vars(@names)
-
-Prints to STDOUT the values of the named configuration variable. Each is
-printed on a separate line in the form:
-
- name='value';
-
-Names which are unknown are output as C<name='UNKNOWN';>.
-See also C<-V:name> in L<perlrun/Switches>.
-
-=back
-
-=head1 EXAMPLE
-
-Here's a more sophisticated example of using %Config:
-
- use Config;
- use strict;
-
- my %sig_num;
- my @sig_name;
- unless($Config{sig_name} && $Config{sig_num}) {
- die "No sigs?";
- } else {
- my @names = split ' ', $Config{sig_name};
- @sig_num{@names} = split ' ', $Config{sig_num};
- foreach (@names) {
- $sig_name[$sig_num{$_}] ||= $_;
- }
- }
-
- print "signal #17 = $sig_name[17]\n";
- if ($sig_num{ALRM}) {
- print "SIGALRM is $sig_num{ALRM}\n";
- }
-
-=head1 WARNING
-
-Because this information is not stored within the perl executable
-itself it is possible (but unlikely) that the information does not
-relate to the actual perl binary which is being used to access it.
-
-The Config module is installed into the architecture and version
-specific library directory ($Config{installarchlib}) and it checks the
-perl version number when loaded.
-
-The values stored in config.sh may be either single-quoted or
-double-quoted. Double-quoted strings are handy for those cases where you
-need to include escape sequences in the strings. To avoid runtime variable
-interpolation, any C<$> and C<@> characters are replaced by C<\$> and
-C<\@>, respectively. This isn't foolproof, of course, so don't embed C<\$>
-or C<\@> in double-quoted strings unless you're willing to deal with the
-consequences. (The slashes will end up escaped and the C<$> or C<@> will
-trigger variable interpolation)
-
-=head1 GLOSSARY
-
-Most C<Config> variables are determined by the C<Configure> script
-on platforms supported by it (which is most UNIX platforms). Some
-platforms have custom-made C<Config> variables, and may thus not have
-some of the variables described below, or may have extraneous variables
-specific to that particular port. See the port specific documentation
-in such cases.
-
-ENDOFTAIL
-
-open(GLOS, "<$glossary") or die "Can't open $glossary: $!";
-%seen = ();
-$text = 0;
-$/ = '';
-
-sub process {
- s/\A(\w*)\s+\(([\w.]+)\):\s*\n(\t?)/=item C<$1>\n\nFrom F<$2>:\n\n/m;
- my $c = substr $1, 0, 1;
- unless ($seen{$c}++) {
- print CONFIG <<EOF if $text;
-=back
-
-EOF
- print CONFIG <<EOF;
-=head2 $c
-
-=over
-
-EOF
- $text = 1;
- }
- s/n't/n\00t/g; # leave can't, won't etc untouched
- s/^\t\s+(.*)/\n\t$1\n/gm; # Indented lines ===> paragraphs
- s/^(?<!\n\n)\t(.*)/$1/gm; # Not indented lines ===> text
- s{([\'\"])(?=[^\'\"\s]*[./][^\'\"\s]*\1)([^\'\"\s]+)\1}(F<$2>)g; # '.o'
- s{([\'\"])([^\'\"\s]+)\1}(C<$2>)g; # "date" command
- s{\'([A-Za-z_\- *=/]+)\'}(C<$1>)g; # 'ln -s'
- s{
- (?<! [\w./<\'\"] ) # Only standalone file names
- (?! e \. g \. ) # Not e.g.
- (?! \. \. \. ) # Not ...
- (?! \d ) # Not 5.004
- ( [\w./]* [./] [\w./]* ) # Require . or / inside
- (?<! \. (?= \s ) ) # Do not include trailing dot
- (?! [\w/] ) # Include all of it
- }
- (F<$1>)xg; # /usr/local
- s/((?<=\s)~\w*)/F<$1>/g; # ~name
- s/(?<![.<\'\"])\b([A-Z_]{2,})\b(?![\'\"])/C<$1>/g; # UNISTD
- s/(?<![.<\'\"])\b(?!the\b)(\w+)\s+macro\b/C<$1> macro/g; # FILE_cnt macro
- s/n[\0]t/n't/g; # undo can't, won't damage
-}
-
-<GLOS>; # Skip the preamble
-while (<GLOS>) {
- process;
- print CONFIG;
-}
-
-print CONFIG <<'ENDOFTAIL';
-
-=back
-
-=head1 NOTE
-
-This module contains a good example of how to use tie to implement a
-cache and an example of how to make a tied variable readonly to those
-outside of it.
-
-=cut
-
-ENDOFTAIL
-
-close(CONFIG);
-close(GLOS);
-
-# Now do some simple tests on the Config.pm file we have created
-unshift(@INC,'lib');
-require $config_pm;
-import Config;
-
-die "$0: $config_pm not valid"
- unless $Config{'CONFIGDOTSH'} eq 'true';
-
-die "$0: error processing $config_pm"
- if defined($Config{'an impossible name'})
- or $Config{'CONFIGDOTSH'} ne 'true' # test cache
- ;
-
-die "$0: error processing $config_pm"
- if eval '$Config{"cc"} = 1'
- or eval 'delete $Config{"cc"}'
- ;
-
-
-exit 0;
diff --git a/contrib/perl5/configure.com b/contrib/perl5/configure.com
deleted file mode 100644
index 62ebacc..0000000
--- a/contrib/perl5/configure.com
+++ /dev/null
@@ -1,5896 +0,0 @@
-$ sav_ver = 'F$VERIFY(0)'
-$! SET VERIFY
-$!
-$! For example, if you unpacked perl into: [USER.PERL-5n...] then you will
-$! want to cd into the tree and execute Configure:
-$!
-$! $ SET DEFAULT [USER.PERL5_xxx]
-$! $ @Configure
-$!
-$! or
-$!
-$! $ SET DEFAULT [USER.PERL5_xxx]
-$! $ @Configure "-des"
-$!
-$! That's it. If you get into a bind trying to build perl on VMS then
-$! definitely read through the README.VMS file.
-$! Beyond that send email to vmsperl@perl.org
-$!
-$! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-$!
-$! send suggestions to:
-$! Dan Sugalski <dan@sidhe.org>
-$! Thank you!!!!
-$!
-$! Adapted and converted from Larry Wall & Andy Dougherty's
-$! "Configure generated by metaconfig 3.0 PL60." by Peter Prymmer
-$! (a Bourne sh[ell] script for configuring the installation of perl
-$! on non-VMS systems) in the perl5.002|3 epoch (spring/summer 1996)
-$! with much valuable help from Charles Bailey &
-$! the whole VMSPerl crew.
-$! Extended and messed about with by Dan Sugalski
-$!
-$! VMS-isms we will need:
-$ echo = "write sys$output "
-$ cat = "type"
-$ delete := delete ! local symbol overrides globals with qualifiers
-$ gcc_symbol = "gcc"
-$ ld = "Link"
-$ ans = ""
-$ macros = ""
-$ extra_flags = ""
-$ user_c_flags = ""
-$ use_ieee_math = "n"
-$ be_case_sensitive = "n"
-$ use_vmsdebug_perl = "n"
-$ use64bitall = "n"
-$ use64bitint = "n"
-$ C_Compiler_Replace = "CC="
-$ Thread_Live_Dangerously = "MT="
-$ use_two_pot_malloc = "N"
-$ use_pack_malloc = "N"
-$ use_debugmalloc = "N"
-$ ccflags = ""
-$ static_ext = ""
-$ vms_default_directory_name = F$ENVIRONMENT("DEFAULT")
-$ max_allowed_dir_depth = 3 ! e.g. [A.B.PERLxxx] not [A.B.C.PERLxxx]
-$! max_allowed_dir_depth = 2 ! e.g. [A.PERLxxx] not [A.B.PERLxxx]
-$!
-$! Sebastian Bazley's request: close the CONFIG handle with /NOLOG
-$! qualifier "just in case" (configure.com is re @ed in a bad state).
-$! This construct was tested to be not a problem as far back as
-$! VMS V5.5-2, hopefully earlier versions are OK as well.
-$!
-$ CLOSE/NOLOG CONFIG
-$!
-$! Now keep track of open files
-$!
-$ vms_filcnt = F$GETJPI ("","FILCNT")
-$!
-$!: compute my invocation name
-$ me = F$ENVIRONMENT("PROCEDURE")
-$!
-$! Many null statements (begin with colon ':') in the Bourne shell version of
-$! this script serve as comments/placeholders. I have retained some of the ones
-$! that will help you compare this .COM file to the sh version - as well as
-$! leave placeholders for future improvements to this .COM file.
-$! sfn = VMS "skipped for now"
-$!
-$!: Proper PATH separator !sfn
-$!: Proper PATH setting !sfn
-$!: Sanity checks !sfn "Say '@''$me''"
-$!: On HP-UX, large Configure scripts may exercise a bug in /bin/sh !sfn
-$!: Configure runs within the UU subdirectory !->after find MANIFEST
-$! <big long list of default values (mostly null)>
-$!: We must find out about Eunice early !(?)
-$!: list of known cpp symbols, sorted alphabetically !sfn
-$! al = al + "..."
-$!: default library list !sfn
-$! <no hints files in use (yet?)>
-$!: Extra object files, if any, needed on this platform. !sfn
-$!: Possible local include directories to search. !sfn
-$!: Set locincpth to "" in a hint file to defeat local include searches. !sfn
-$!locincpth="/usr/local/include /opt/local/include /usr/gnu/include" !sfn
-$!locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
-$!: no include file wanted by default !sfn
-$!inclwanted='' !sfn
-$!: Possible local library directories to search. !sfn
-$!loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib" !sfn
-$!loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib" !sfn
-$!: general looking path for locating libraries !sfn
-$!glibpth="/lib/pa1.1 /usr/shlib /usr/lib/large /lib /usr/lib" !sfn
-$!glibpth="$glibpth $xlibpth /lib/large /usr/lib/small /lib/small" !sfn
-$!glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/shlib" !sfn
-$!: Private path used by Configure to find libraries. Its value !sfn
-$!: is prepended to libpth. This variable takes care of special !sfn
-$!: machines, like the mips. Usually, it should be empty. !sfn
-$!plibpth='' !sfn
-$!: full support for void wanted by default !sfn
-$!defvoidused=15 !sfn
-$!: List of libraries we want. !sfn
-$!libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl' !sfn
-$!libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt" !sfn
-$!libswanted="$libswanted ucb bsd BSD PW x" !sfn
-$!: We probably want to search /usr/shlib before most other libraries. !sfn
-$!: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist. !sfn
-$!glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'` !sfn
-$!glibpth="/usr/shlib $glibpth" !sfn
-$!: Do not use vfork unless overridden by a hint file. !sfn
-$!usevfork=false !sfn
-$!: script used to extract .SH files with variable substitutions !sfn
-$!: produce awk script to parse command line options !sfn
-$!sfn (assume no sed awk) see below
-$!: process the command line options
-$!
-$!: set up default values
-$ fastread=""
-$ reuseval="false"
-$ maniskip = "false"
-$ IF F$TYPE(config_sh) .EQS. "" THEN config_sh=""
-$ alldone=""
-$ error=""
-$ silent=""
-$ extractsh=""
-$ override=""
-$ knowitall=""
-$ ccname="VAX"
-$ Dec_C_Version = ""
-$ cxxversion = ""
-$ use_threads = "F"
-$ use_5005_threads = "N"
-$ use_ithreads = "N"
-$!
-$!: option parsing
-$ config_args = ""
-$ IF (P1 .NES. "")
-$ THEN !one or more switches was thrown
-$ i = 1
-$ bang = 0
-$Param_loop:
-$ IF (P'i'.NES."")
-$ THEN
-$ bang = bang + 1
-$ config_args = config_args + F$FAO(" !AS",P'i')
-$ ENDIF
-$ i = i + 1
-$ IF (i.LT.9) THEN GOTO Param_loop !DCL allows P1..P8
-$!
-$ i = 1
-$Opt_loop:
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "-") THEN P'i' = P'i' - "-"
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "/") THEN P'i' = P'i' - "/"
-$Remove_quotation_mark:
-$ P'i' = P'i' - """"
-$ IF F$LOCATE("""",P'i') .LT. F$LENGTH(P'i') THEN GOTO Remove_quotation_mark
-$ gotopt = "f" !"alse"
-$ gotshortopt = "f" !"alse"
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "d")
-$ THEN
-$ fastread = "yes"
-$ gotopt = "t" !"rue"
-$ P'i' = P'i' - "d"
-$ gotshortopt = "t" !"rue"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "e")
-$ THEN
-$ alldone = "cont"
-$ gotopt = "t"
-$ P'i' = P'i' - "e"
-$ gotshortopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "f") ! "-f"
-$ THEN
-$ P'i' = P'i' - "f"
-$ config_sh = P'i'
-$ IF (F$SEARCH(config_sh).NES."")
-$ THEN
-$ test_config_sh = F$FILE_ATTRIBUTES(config_sh,"PRO")
-$ IF (F$LOCATE("R",test_config_sh).NE.F$LENGTH(test_config_sh))
-$ THEN
-$ config_dflt = "y"
-$ CONTINUE !at this point check UIC && if test allows...
-$ !to be continued ?
-$ ELSE
-$ echo "''me': cannot read config file ''config_sh'."
-$ error="true"
-$ ENDIF
-$ ELSE
-$ echo "''me': cannot read config file ''config_sh'."
-$ error="true"
-$ ENDIF
-$ gotopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "h") ! "-h"
-$ THEN
-$ error = "true"
-$ gotopt = "t"
-$ P'i' = P'i' - "h"
-$ gotshortopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "m") ! "-m"
-$ THEN
-$ maniskip = "true"
-$ gotopt = "t"
-$ P'i' = P'i' - "m"
-$ gotshortopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "r") ! "-r"
-$ THEN
-$ reuseval = "true"
-$ gotopt = "t"
-$ P'i' = P'i' - "r"
-$ gotshortopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "s") ! "-s"
-$ THEN
-$ silent = "true"
-$ gotopt = "t"
-$ P'i' = P'i' - "s"
-$ gotshortopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "E") ! "-E"
-$ THEN
-$ alldone = "exit"
-$ gotopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "K") ! "-K"
-$ THEN
-$ knowitall = "true"
-$ gotopt = "t"
-$ P'i' = P'i' - "K"
-$ gotshortopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "O") ! "-O"
-$ THEN
-$ override = "true"
-$ gotopt = "t"
-$ P'i' = P'i' - "O"
-$ gotshortopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "S") ! "-S"
-$ THEN
-$ extractsh = "true" !VMS? Yes with munchconfig
-$ gotopt = "t"
-$ P'i' = P'i' - "S"
-$ gotshortopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "D") ! "-D"
-$ THEN
-$ P'i' = P'i' - "D"
-$ IF (F$LOCATE("=",P'i') .EQ. F$LENGTH(P'i'))
-$ THEN
-$ tmp = P'i' + "=""define"""
-$ 'tmp'
-$ DELETE/SYMBOL tmp
-$ ELSE
-$ IF (F$LOCATE("=",P'i') .EQ. (F$LENGTH(P'i') - 1))
-$ THEN
-$ me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
-$ echo "''me': use ""-Usymbol=val"" not ""-Dsymbol=""."
-$ echo "''me': ignoring -D",P'i'
-$ ELSE
-$ tmp = F$EXTRACT(0,F$LOCATE("=",P'i'),P'i')
-$ tmp = tmp + "=""" + F$EXTRACT(F$LOCATE("=",P'i')+1,F$LENGTH(P'i'),P'i') + """"
-$ 'tmp'
-$ DELETE/SYMBOL tmp
-$ ENDIF
-$ ENDIF
-$ gotopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "U") ! "-U"
-$ THEN
-$ P'i' = P'i' - "U"
-$ IF (F$LOCATE("=",P'i') .EQ. F$LENGTH(P'i'))
-$ THEN
-$ tmp = P'i' + "="""""
-$ 'tmp'
-$ DELETE/SYMBOL tmp
-$ ELSE
-$ IF (F$LOCATE("=",P'i') .LT. (F$LENGTH(P'i') - 1))
-$ THEN
-$ me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
-$ echo "''me': use ""-Dsymbol=val"" not ""-Usymbol=val""."
-$ echo "''me': ignoring -U",P'i'
-$ ELSE
-$ tmp = P'i' + "=""undef"""
-$ 'tmp'
-$ DELETE/SYMBOL tmp
-$ ENDIF
-$ ENDIF
-$ gotopt = "t"
-$ ENDIF
-$ IF (F$EXTRACT(0,1,P'i') .EQS. "V")
-$ THEN
-$ me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
-$ echo "''me' generated by an unknown version of EDT."
-$ STOP
-$ EXIT
-$ ENDIF
-$ IF .NOT.gotopt
-$ THEN
-$ echo "''me': unknown option ",P'i'
-$ error = "true"
-$ ENDIF
-$ IF (F$LENGTH(P'i').GT.0).AND.(gotshortopt) THEN i = i - 1 !clustered switch
-$ i = i + 1
-$ IF (i .LT. (bang + 1)) THEN GOTO Opt_loop
-$!
-$ ENDIF ! (P1 .NES. "")
-$ config_args = F$EDIT(config_args,"TRIM")
-$!
-$ IF (error)
-$ THEN
-$ me = F$PARSE(me,,,"DIRECTORY")+ F$PARSE(me,,,"NAME")
-$ echo "Usage: @''me' [-dehmr""EKOSV""] [-fconfig.sh] [""-Dsymbol""] [""-Dsymbol=value""]"
-$ echo " [-Usymbol] [-Usymbol=]"
-$ TYPE SYS$INPUT:
-$ DECK
- "-d" : use defaults for all answers.
- "-e" : go on without questioning past the production of config.sh. *
- "-f" : specify an alternate default configuration file.
- "-h" : print this help message and exit (with an error status).
- "-m" : skip the MANIFEST check to see that all files are present
- "-r" : reuse C symbols value if possible (skips costly nm extraction).*
- "-s" : silent mode, only echoes questions and essential information.
- -"D" : define symbol to have some value: *
- -"Dsymbol" symbol gets the value 'define'
- -"Dsymbol=value" symbol gets the value 'value'
- -E : stop at the end of questions, after having produced config.sh. *
- -K : do not use unless you know what you are doing.
- -O : let -D and -U override definitions from loaded configuration file. *
- -S : perform variable substitutions on all .SH files (can mix with -f) *
- -"U" : undefine symbol: *
- -"Usymbol" symbol gets the value 'undef'
- -"Usymbol=" symbol gets completely empty
- -V : print version number and exit (with a zero status).
-$ EOD
-$ echo "%Config-I-VMS, lower case switches must be enclosed"
-$ echo "-Config-I-VMS, in double quotation marks, e.g.:"
-$ echo "-Config-I-VMS, @Configure ""-des"""
-$ echo "-Config-I-VMS, * indicates switch may not be fully implemented for VMS."
-$ SET DEFAULT 'vms_default_directory_name' !be kind rewind
-$ STOP
-$ EXIT 3 ! $STATUS = "%X00000003" (informational)
-$ ENDIF
-$!
-$ GOTO Check_silence
-$!
-$Shut_up:
-$ IF F$Mode() .eqs. "BATCH"
-$ THEN
-$ STDOUT = F$PARSE(F$GETQUI("DISPLAY_ENTRY", "JOB_NAME"), -
- F$GETQUI("DISPLAY_ENTRY", "LOG_SPECIFICATION"), ".LOG")
-$ WRITE SYS$OUTPUT "Warning: Executing in batch mode. To avoid file locking conflicts,"
-$ WRITE SYS$OUTPUT "output intended for SYS$OUTPUT will be sent to a new version"
-$ WRITE SYS$OUTPUT STDOUT
-$ ELSE
-$ STDOUT = F$TRNLNM("SYS$OUTPUT")
-$ ENDIF
-$ DEFINE SYS$OUTPUT "_NLA0:"
-$ echo4 = "write STDOUT "
-$ cat4 = "TYPE/OUTPUT=''STDOUT'"
-$ open/write/share=read STDOUT 'STDOUT'
-$ RETURN
-$!
-$Check_silence:
-$ IF (silent)
-$ THEN
-$ GOSUB Shut_up
-$ ELSE
-$ echo4 = "write SYS$OUTPUT "
-$ cat4 = "TYPE"
-$ ENDIF
-$!
-$!: run the defines and the undefines, if any, but leave the file out there...
-$! Unfortunately Configure.COM in DCL is not yet set up to do this -
-$! maybe someday
-$!
-$!: set package name
-$ package = "perl5"
-$ packageup = F$EDIT((package - "5"),"UPCASE")
-$!
-$!: Eunice requires " " instead of "", can you believe it
-$ echo ""
-$!: Here we go...
-$ echo "Beginning of configuration questions for ''package'."
-$ echo ""
-$!
-$!: Some greps do not return status, grrr.
-$ contains = "SEARCH"
-$!
-$!: first determine how to suppress newline on echo command !cant DCL is record oriented
-$! echo "Checking ''echo' to see how to suppress newlines..."
-$! echo "giving up..."
-$! echo "The star should be here-->*"
-$!
-$!: Now test for existence of everything in MANIFEST
-$ echo ""
-$ echo4 "First let's make sure your kit is complete. Checking..."
-$ manifestfound = ""
-$ miss_list = ""
-$! Here I assume we are in the [foo.PERLxxx...] tree
-$! because the search routine simply does set def [-] if necessary.
-$ file_2_find = "MANIFEST" !I hope this one is not in [foo.PERL5xxx.VMS...]
-$Research_manifest:
-$ manifestfound = F$SEARCH(file_2_find)
-$ IF (manifestfound .EQS. "")
-$ THEN
-$ IF F$PARSE(F$ENVIRONMENT("DEFAULT"),,,"DIRECTORY",).NES."[000000]"
-$ THEN
-$ SET DEFAULT [-]
-$ GOTO Research_manifest
-$ ELSE
-$ echo ""
-$ echo "There is no MANIFEST file. I hope your kit is complete !"
-$ miss_list = ""
-$ GOTO Beyond_manifest
-$ ENDIF
-$ ELSE
-$! MANIFEST. has been found and we have set def'ed there -
-$! time to bail out before it's too late.
-$ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
-$ IF (tmp .GES. "7.2") .AND. (F$GETSYI("HW_MODEL") .GE. 1024) THEN GOTO Beyond_depth_check
-$ IF (F$ELEMENT(max_allowed_dir_depth,".",F$ENVIRONMENT("Default")).nes.".")
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-%Config-E-VMS, ERROR:
- Sorry! It apears as though your perl build sub-directory is already too
- deep into the VMS file system. Please try moving stuff into a shallower
- directory (or altering the "max_allowed_dir_depth" parameter).
-$ EOD
-$ echo4 "ABORTING..."
-$ SET DEFAULT 'vms_default_directory_name' !be kind rewind
-$ STOP
-$ EXIT !2 !$STATUS = "%X00000002" (error)
-$ ENDIF
-$Beyond_depth_check:
-$!
-$! after finding MANIFEST let's create (but not yet enter) the UU subdirectory
-$!
-$ IF (manifestfound .NES. "")
-$ THEN
-$ IF ( F$SEARCH("UU.DIR").EQS."" )
-$ THEN
-$ CREATE/DIRECTORY [.UU]
-$ ELSE
-$ IF ( F$SEARCH("[.UU]*.*").NES."" ) THEN DELETE/NOLOG [.UU]*.*;*
-$ ENDIF
-$!: Configure runs within the UU subdirectory
-$ SET DEFAULT [.UU]
-$!
-$! a little redundancy never hurt anybody?
-$ file_2_find = "[-]" + file_2_find
-$ manifestfound = F$SEARCH(file_2_find)
-$!
-$ OPEN/WRITE MISSING MISSING.
-$!change to "FALSE" if you wish to skip the manifest search
-$!(which after all is rather slow in DCL :-)
-$ IF (maniskip)
-$ THEN
-$ echo "Skipping MANIFEST check as requested"
-$ ELSE
-$!
-$ OPEN/READ CONFIG 'manifestfound'
-$Read_loop_manifest:
-$ READ/END_OF_FILE = Done_manifest CONFIG line
-$! This algorithm turns "foo/bar/baz.c" into "[.foo.bar]baz.c"
-$! pvhp@lns62.lns.cornell.edu 10-JUN-1996 20:31:46
-$! 2-MAR-1998 15:46:11 Improved to turn "foo/bar/baz.c.buz"
-$! into "[.foo.bar]baz.c_buz as happens with vmstar and unzip
-$ line = F$EDIT(line,"TRIM, COMPRESS")
-$ file_2_find = F$EXTRACT(0,F$LOCATE(" ",line),line)
-$ IF F$LOCATE("/",file_2_find) .NE. F$LENGTH(file_2_find)
-$ THEN
-$Re_strip_line_manifest:
-$ loca = F$LOCATE("/",file_2_find)
-$ ante = F$EXTRACT(0,loca,file_2_find)
-$ post = F$EXTRACT(loca,F$LENGTH(file_2_find),file_2_find)
-$ test_this = ante + "." + (post - "/")
-$ IF F$LOCATE("/",test_this) .NE. F$LENGTH(test_this)
-$ THEN
-$ file_2_find = ante + "." + (post - "/")
-$ GOTO Re_strip_line_manifest
-$ ELSE
-$ file_2_find = ante + "]" + (post - "/")
-$ ENDIF
-$ file_2_find = "[-."+file_2_find
-$ ELSE
-$ file_2_find = "[-]" + file_2_find
-$ ENDIF
-$!
-$ dirname = F$EXTRACT(0,F$LOCATE("]",file_2_find),file_2_find) + "]"
-$ file_2_find = file_2_find - dirname
-$ dots = 0
-$Dot_loop:
-$ dot_ele = F$ELEMENT(dots,".",file_2_find)
-$ IF dot_ele .EQS. "." THEN GOTO Eo_dot_loop
-$ IF dots .eq. 0
-$ THEN basename = f$extract(0,f$locate(".",file_2_find),file_2_find) + "."
-$ ELSE basename = basename + dot_ele + "_"
-$ ENDIF
-$ dots = dots + 1
-$ GOTO dot_loop
-$Eo_dot_loop:
-$ IF (((f$length(file_2_find)+1) .eq. f$length(basename)) .and. -
- (f$extract(f$length(basename)-1,1,basename) .eqs. "_")) THEN -
- basename = f$extract(0,f$length(basename)-1,basename)
-$ file_2_find = dirname + basename
-$!
-$ found = F$SEARCH(file_2_find)
-$ IF (found .EQS. "" .AND. dots .GT. 2)
-$ THEN
-$! 17-DEC-1999 Improved to turn "[.foo.bar]baz.c_buz" into
-$! "[.foo.bar]baz_c.buz" to cover unzipped archives and put
-$! "[.foo.bar]baz.c_buz,baz_c.buz" into missing list if neither is found.
-$ basename[f$locate(".",basename),1] := _
-$ dot_ele = F$ELEMENT(dots - 1,"_",basename)
-$ basename = -
- f$extract(0,f$length(basename)-(f$length(dot_ele)+1),basename) -
- + "." + dot_ele
-$ found = F$SEARCH(dirname + basename)
-$ file_2_find = file_2_find + "," + basename
-$ ENDIF
-$ IF (found .EQS. "")
-$ THEN
-$ WRITE MISSING file_2_find
-$ IF ((F$LENGTH(miss_list)+F$LENGTH(file_2_find)).LT.250)
-$ THEN
-$ miss_list = miss_list + "," + file_2_find
-$ ENDIF
-$ ENDIF
-$ GOTO Read_loop_manifest
-$Done_manifest:
-$ CLOSE CONFIG
-$ ENDIF !"TRUE"
-$ CLOSE MISSING
-$ ENDIF ! (manifestfound .NES. "")
-$Beyond_manifest:
-$ IF (miss_list .NES. "")
-$ THEN
-$ echo "Some of the files not found include:"
-$ cat4 MISSING.
-$ ENDIF
-$ IF ((miss_list .NES. "").OR.(manifestfound .EQS. ""))
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-
-
-THIS PACKAGE SEEMS TO BE INCOMPLETE.
-
-You have the option of continuing the configuration process, despite the
-distinct possibility that your kit is damaged, by typing 'y'es. If you
-do, don't blame me if something goes wrong. I advise you to type 'n'o
-and contact the author (dan@sidhe.org)
-
-$ EOD
-$ READ SYS$COMMAND/PROMPT="Continue? [n] " ans
-$ IF ans
-$ THEN
-$ echo4 "Continuing..."
-$ ELSE
-$ echo4 "ABORTING..."
-$ GOTO Clean_up
-$ ENDIF
-$ ELSE
-$ echo4 "Looks good..."
-$ DELETE/NOLOG MISSING.;
-$ ENDIF ! (miss_list .NES. "")
-$ ENDIF ! (manifestfound .EQS. "") ELSE
-$!
-$! after finding MANIFEST (see above)
-$!: Configure runs within the UU subdirectory
-$!
-$!: compute the number of columns on the terminal for proper question formatting
-$! (sfn, will assume 80-ish)
-$!
-$!: set up the echo used in my read !sfn
-$!: now set up to do reads with possible shell escape and default assignment !sfn
-$ GOTO Beyond_myread
-$!
-$myread:
-$ ans = ""
-$ If (fastread)
-$ Then
-$ echo4 "''rp'"
-$ Else
-$ If (.NOT. silent) Then echo ""
-$ READ SYS$COMMAND/PROMPT="''rp'" ans
-$ IF (ans .EQS. "&-d")
-$ THEN
-$ echo4 "(OK, I will run with -d after this question.)"
-$ IF (.NOT. silent) THEN echo ""
-$ READ SYS$COMMAND/PROMPT="''rp'" ans
-$ fastread := yes
-$ ENDIF
-$ IF (ans .EQS. "&-s")
-$ THEN
-$ echo4 "(OK, I will run with -s after this question.)"
-$ echo ""
-$ READ SYS$COMMAND/PROMPT="''rp'" ans
-$ silent := true
-$ GOSUB Shut_up
-$ ENDIF
-$ Endif
-$ RETURN
-$!
-$Beyond_myread:
-$!
-$!: create .config dir to save info across Configure sessions
-$ IF ( F$SEARCH("[-]CONFIG.DIR").EQS."" )
-$ THEN
-$ CREATE/DIRECTORY [-.CONFIG]
-$ OPEN/WRITE CONFIG [-.CONFIG]README.
-$ WRITE CONFIG -
- "This directory created by Configure to save information that should"
-$ WRITE CONFIG -
- "persist across sessions."
-$ WRITE CONFIG ""
-$ WRITE CONFIG -
- "You may safely delete it if you wish."
-$ CLOSE CONFIG
-$ ENDIF
-$!
-$ IF F$TYPE(usedevel) .EQS. "" THEN usedevel := n
-$ patchlevel_h = F$SEARCH("[-]patchlevel.h")
-$ IF (patchlevel_h.NES."")
-$ THEN
-$ SEARCH 'patchlevel_h' "define","PERL_VERSION","epoch"/match=and/out=[]ver.out
-$ IF .NOT. usedevel .AND. usedevel .NES. "define"
-$ THEN
-$ OPEN/READ CONFIG []ver.out
-$ READ CONFIG line
-$ CLOSE CONFIG
-$ tmp = F$EDIT(line,"TRIM,COMPRESS")
-$ xpatchlevel = F$INTEGER(F$ELEMENT(2," ",tmp))
-$ line = xpatchlevel / 2
-$ tmp = xpatchlevel - ( line * 2 )
-$ IF tmp .NE. 0
-$ THEN
-$ echo4 "patchlevel is " + F$STRING(xpatchlevel)
-$ cat4 SYS$INPUT:
-$ DECK
-*** WHOA THERE!!! ***
-
- This is an UNSTABLE DEVELOPMENT release.
- (The patchlevel, is odd--as opposed to even,
- and that signifies a development release. If you want a
- maintenance release, you want an even-numbered release.)
-
- Do ***NOT*** install this into production use.
- Data corruption and crashes are possible.
-
- It is most seriously suggested that you do not continue any further
- unless you want to help in developing and debugging Perl.
-
-$ EOD
-$ dflt="n"
-$ rp="Do you really want to continue? [''dflt'] "
-$ IF (fastread) THEN fastread := FALSE
-$ GOSUB myread
-$ IF ans .EQS. "" THEN ans = dflt
-$ IF ans
-$ THEN
-$ echo4 "Okay, continuing."
-$ ELSE
-$ echo4 "Okay, bye."
-$ DELETE/NOLOG/NOCONFIRM []ver.out;
-$ GOTO Clean_up
-$ ENDIF
-$ ENDIF
-$ DELETE/SYMBOL line
-$ DELETE/SYMBOL tmp
-$ ENDIF
-$ DELETE/NOLOG/NOCONFIRM []ver.out;
-$ ENDIF
-$!: general instructions
-$ needman = "true"
-$ firsttime = "true"
-$ user = F$EDIT(F$GETJPI("","USERNAME"),"TRIM,COLLAPSE")
-$ IF .NOT.(F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."")
-$ THEN
-$ messages = F$ENVIRONMENT("MESSAGE")
-$ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT
-$ contains /NOOUTPUT [-.CONFIG]INSTRUCT. 'user'
-$ IF .NOT.($status.EQ.%X08D78053)
-$ THEN
-$ firsttime=""
-$ dflt = "n"
-$ rp = "Would you like to see the instructions? [''dflt'] "
-$ GOSUB myread
-$ if .NOT.ans THEN needman=""
-$ ENDIF
-$ SET MESSAGE 'messages'
-$ ENDIF
-$ if (fastread.AND.silent.AND.(alldone.eqs."cont")) THEN needman=""
-$!
-$ IF (needman)
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-
-This installation shell script will examine your system and ask you questions
-to determine how the perl5 package should be installed. If you get
-stuck on a question, you may use a ^C or ^Y shell escape to STOP this
-process, edit something, then restart this process as you just did.
-Many of the questions will have default answers in square
-brackets; typing carriage return will give you the default.
-
-$ EOD
-$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
-$ TYPE SYS$INPUT:
-$ DECK
-
-In a hurry? You may run '@Configure "-d"'. This will bypass nearly all
-the questions and use the computed defaults (or the previous answers provided
-there was already a config.sh file). Type '@Configure "-h"' for a list of
-options.
-
-$ EOD
-$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
-$ TYPE SYS$INPUT:
-$ DECK
-
-Much effort has been expended to ensure that this shell script will
-run on any VMS system. If despite that it blows up on yours, your
-best bet is to edit Configure.com and @ it again. Whatever problems
-you have with Configure.com, let me (dan@sidhe.org) know how I blew
-it.
-
-$ EOD
-$!This installation script affects things in two ways:
-$!
-$!1) it may do direct variable substitutions on some of the files included
-$! in this kit.
-$!2) it builds a config.h file for inclusion in C programs. You may edit
-$! any of these files as the need arises after running this script.
-$!
-$!If you make a mistake on a question, there is no easy way to back up to it
-$!currently.
-$!
-$ READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
-$ IF (F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."")
-$ THEN
-$ OPEN/WRITE CONFIG [-.CONFIG]INSTRUCT.
-$ WRITE CONFIG user
-$ CLOSE CONFIG
-$ ENDIF
-$ ENDIF !(needman .EQS. "true")
-$!
-$!: see if sh knows # comments !sfn
-$ sharpbang = "$ "
-$!: figure out how to guarantee sh startup !sfn
-$!: find out where common programs are !sfn
-$!loclist="awk/cat/comm/cp/echo/expr/find/grep/ln/ls/mkdir/rm/sed/sort/touch/tr/uniq"
-$!trylist="byacc/cpp/csh/date/egrep/less/line/more/nroff/perl/pg/sendmail/test/uname"
-$! echo "I don't know where '$file' is, and my life depends on it."
-$! echo "Go find a public domain implementation or fix your PATH setting!"
-$! echo ""
-$! echo "Don't worry if any of the following aren't found..."
-$!: determine whether symbolic links are supported !sfn
-$!: see whether [:lower:] and [:upper:] are supported character classes !sfn
-$!: set up the translation script tr, must be called with ./tr of course !sfn
-$!
-$!: Try to determine whether config.sh was made on this system
-$!: Get old answers from old config file if Configure was run on the
-$!: same system, otherwise use the hints.
-$ config_sh_es = "''config_sh'/[-]config.sh/[-.vms]config.vms/"
-$ i = 0
-$ max = 3
-$Config_sh_look:
-$ config_sh = F$ELEMENT(i,"/",config_sh_es)
-$ i = i + 1
-$ IF (config_sh.NES."/").AND.(config_sh.NES."")
-$ THEN
-$ configshfound = F$SEARCH(config_sh)
-$ IF (configshfound.NES."") THEN GOTO Config_sh_found
-$ ENDIF
-$ IF (i.LT.max) THEN GOTO Config_sh_look
-$! genconfig.pl has "osname='VMS'"
-$ osname = F$EDIT(F$GETSYI("NODE_SWTYPE"),"COLLAPSE")
-$ IF (configshfound.EQS."")
-$ THEN
-$ config_sh = "[-]config.sh" ! the fallback default
-$ GOTO Beyond_config_sh
-$ ENDIF
-$Config_sh_found:
-$ IF F$TYPE(osname) .EQS. "" THEN osname = F$EDIT(F$GETSYI("NODE_SWTYPE"),"COLLAPSE")
-$ IF F$TYPE(config_dflt) .EQS. "" THEN config_dflt = "n"
-$ rp = "Shall I @ ''config_sh' for default answers? [''config_dflt'] "
-$ GOSUB myread
-$ IF ans .EQS. "" THEN ans = config_dflt
-$ IF ans
-$ THEN
-$ echo ""
-$ echo "Fetching default answers from ''config_sh'..."
-$!
-$! This @ is why config_sh must employ DCL syntax. Note that for
-$! symbols to be returned to this procedure they must be global.
-$! Which implies that assignments must be of the :== or == variety.
-$! Note further that the [-]config.sh file written by this procedure
-$! employs shell syntax. In order to convert shell syntax to DCL
-$! you might try:
-$!
-$! perl -ni -e "s/^#/!#/;s/='/==""/;s/'$/""/;print ""\$ $_"";" config.sh
-$!
-$! However, watch out for sig_nam, sig_nam_init, sig_num, startperl
-$! and any of the lower case double quoted variables such as the *format
-$! variables in such a config."sh".
-$!
-$ @'config_sh'
-$!
-$ ENDIF
-$ DELETE/SYMBOL config_dflt
-$!
-$!we actually do not have "hints/" for VMS
-$! TYPE SYS$INPUT:
-$! DECK
-$!
-$!First time through, eh? I have some defaults handy for the following systems:
-$!
-$! EOD
-$! echo " ","VMS_VAX"
-$! echo " ","VMS_AXP"
-$! : Now look for a hint file osname_osvers, unless one has been
-$! : specified already.
-$! TYPE SYS$INPUT:
-$!
-$!You may give one or more space-separated answers, or "none" if appropriate.
-$!If your OS version has no hints, DO NOT give a wrong version -- say "none".
-$!
-$! READ SYS$COMMAND/PROMPT="Which of these apply, if any? " ans
-$!
-$Beyond_config_sh:
-$!
-$!: Restore computed paths !sfn
-$!
-$! %Config-I-VMS, a necessary error trap (could be PC running VCL)
-$!
-$ IF (osname .NES. "VMS")
-$ THEN
-$ echo4 "Hmm.. I wonder what ''osname' is (?)"
-$ TYPE SYS$INPUT:
-$ DECK
-
-%Config-E-VMS, ERROR:
-
- Err, you do not appear to be running VMS!
- This procedure is intended to Configure the building of Perl for VMS.
-
-$ EOD
-$ READ SYS$COMMAND/PROMPT="Continue anyway? [n] " ans
-$ IF ans
-$ THEN
-$ echo4 "Continuing..."
-$ ELSE
-$ echo4 "ABORTING..."
-$ SET DEFAULT 'vms_default_directory_name' !be kind rewind
-$ STOP
-$ EXIT 2 !$STATUS = "%X00000002" (error)
-$ ENDIF
-$ ELSE !we are on VMS huzzah!
-$ IF .NOT.silent
-$ THEN TYPE SYS$INPUT:
-$ DECK
-
-Configure uses the operating system name and version to set some defaults.
-The default value is probably right if the name rings a bell. Otherwise,
-since spelling matters for me, either accept the default or answer "none"
-to leave it blank.
-$ EOD
-$ ENDIF
-$ rp = "Operating system name? [''osname'] "
-$ GOSUB myread
-$ IF ans.nes.""
-$ THEN
-$ IF (ans.NES.osname) !.AND.knowitall
-$ THEN
-$ echo4 "I'll go with ''osname' anyway..."
-$ ENDIF
-$ ENDIF
-$ ENDIF !(osname .NES./.EQS. "VMS")
-$!
-$!: who configured the system
-$ cf_by = F$EDIT(user,"LOWERCASE")
-$ osvers = F$EDIT(F$GETSYI("VERSION"),"TRIM")
-$!
-$! Peter Prymmer has seen:
-$! "SYS$TIMEZONE_DIFFERENTIAL" = "-46800" (sic)
-$! "SYS$TIME_ZONE" = "EDT"
-$!
-$! Charles Lane recommended:
-$! "SYS$TIMEZONE_DIFFERENTIAL" = "-14400"
-$! "NEWS_TIMEZONE" = "-0500"
-$! "ST_TIMEZONE" = "EDT"
-$! "JAN_TIME_ZONE" = "EST "
-$! "MULTINET_TIMEZONE" = "EST"
-$! "DAYLIGHT_SAVINGS" = "1"
-$!
-$! Charles Bailey recommends (in ANU NEWS Doc Jan 1995):
-$! "PMDF_Timezone"
-$! "Multinet_Timezone"
-$! "TCPware_Timezone"
-$! "WIN$Time_Zone"
-$!
-$! This snippet o' DCL returns a string in default Unix `date` format,
-$! and it will prompt to set SYS$TIMEZONE_DIFFERENTIAL.
-$!
-$ MIN_TZO = -840 !units are minutes here
-$ MAX_TZO = 840
-$!
-$ wkday = F$EXTRACT(0,3,F$CVTIME(,,"WEEKDAY"))
-$ monn = F$CVTIME(,,"MONTH")
-$ mday = F$EXTRACT(8,2,F$CVTIME(,,"DATE"))
-$ hour = F$CVTIME(,,"HOUR")
-$ min = F$CVTIME(,,"MINUTE")
-$ sec = F$CVTIME(,,"SECOND")
-$ year = F$CVTIME(,,"YEAR")
-$!
-$ months = "/Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec/"
-$ i = 0
-$Mon_loop:
-$ i = i + 1
-$ mon = F$ELEMENT(i,"/",months)
-$ IF i.LT.monn THEN GOTO Mon_loop
-$!
-$ tzneedset = "t"
-$ systz = F$TRNLNM("SYS$TIMEZONE_DIFFERENTIAL")
-$ IF systz.NES.""
-$ THEN
-$ tzhour = F$INTEGER(systz)/3600
-$ tzmins = F$INTEGER(systz)/60
-$ tzminrem = tzmins - tzhour*60
-$ IF tzminrem.lt.0 THEN tzminrem = -1*tzminrem !keeps !2ZL happy
-$ IF tzhour.ge.0
-$ THEN signothetime = "+"
-$ IF tzhour.EQ.0.AND.tzminrem.EQ.0
-$ THEN direction = "on GMT/"
-$ ELSE direction = "east of "
-$ ENDIF
-$ ELSE signothetime = "-"
-$ tzhour = -1*tzhour !keeps !UL happy
-$ direction = "west of "
-$ ENDIF
-$ echo ""
-$ echo "According to the setting of your ""SYS$TIMEZONE_DIFFERENTIAL"" (= ''systz')"
-$ IF tzminrem.ne.0
-$ THEN
-$ tzspan = "''tzhour' hours & ''tzminrem' minutes"
-$ ELSE
-$ tzspan = "''tzhour' hours"
-$ ENDIF
-$ dflt = "y"
-$ echo "Your system is ''tzspan' ''direction'UTC in England."
-$ rp = "(''systz') Is this UTC Time Zone Offset correct? [''dflt'] "
-$ GOSUB myread
-$ IF ans.OR.(ans.EQS."")
-$ THEN
-$ tzneedset = "f"
-$ tzd = systz
-$ GOTO Beyond_TimeZone
-$ ENDIF
-$ ELSE
-$ echo ""
-$ echo4 """SYS$TIMEZONE_DIFFERENTIAL"" does not appear to be DEFINEd on your system"
-$ ENDIF
-$!
-$TZSet:
-$ echo ""
-$ echo "Please tell me in hh:mm form what time offset from GMT/UTC in England"
-$ echo "you are. As an example Eastern (US) Standard Time is -5:00 offset, but"
-$ echo "Eastern Daylight Time (summer) is -4:00 offset."
-$ dflt = "0:00"
-$ rp = "Enter the Time Zone offset: [''dflt'] "
-$ GOSUB myread
-$ ans = F$Edit(ans,"collapse,trim,uncomment,upcase")
-$ IF ans.EQS."" THEN ans = dflt
-$ tzhour = F$ELEMENT(0,":","''ans'") !first
-$ IF tzhour.EQS."" THEN tzhour = 0
-$ tzhour = F$INTEGER(tzhour)
-$ tzminrem = F$ELEMENT(1,":","''ans'") !second
-$ IF tzminrem.NES.""
-$ THEN
-$ tzminrem = F$INTEGER(tzminrem)
-$ IF F$EXTRACT(0,1,"''ans'") .EQS. "-" THEN tzminrem = tzminrem * -1
-$ ELSE
-$ tzminrem = 0
-$ ENDIF
-$ tzmins = tzhour*60 + tzminrem
-$ tzd = F$STRING(tzmins*60)
-$ IF tzhour .GE. 0
-$ THEN
-$ signothetime = "+"
-$ ELSE
-$ tzhour = -1*tzhour !keeps !UL happy
-$ signothetime = "-"
-$ ENDIF
-$ IF (tzmins.GT.MAX_TZO).OR.(tzmins.LT.MIN_TZO)
-$ THEN
-$ echo ""
-$ echo "%Config-W-VMS-TIMERANGE, Response must be in the range -14:00 to 14:00."
-$ goto TZSet
-$ ENDIF
-$!
-$Beyond_TimeZone:
-$ tz = f$fao("UTC!AS!UL:!2ZL",signothetime,tzhour,tzminrem)
-$ cf_time = "''wkday' ''mon' ''mday' ''hour':''min':''sec' ''tz' ''year'"
-$!
-$!: determine the architecture name
-$! genconfig.pl has either archname='VMS_AXP' or 'VMS_VAX'
-$! Note that DCL in VMS V5.4 does not have F$GETSYI("ARCH_NAME")
-$! but does have F$GETSYI("HW_MODEL").
-$!
-$ IF (F$GETSYI("HW_MODEL") .LT. 1024)
-$ THEN
-$ archname = "VMS_VAX"
-$ otherarch = "an Alpha"
-$ alignbytes="8"
-$ arch_type = "ARCH-TYPE=__VAX__"
-$ ELSE
-$ archname = "VMS_AXP"
-$ otherarch = "a VAX"
-$ alignbytes="8"
-$ arch_type = "ARCH-TYPE=__AXP__"
-$ ENDIF
-$ rp = "What is your architecture name? [''archname'] "
-$ GOSUB myread
-$ IF ans.NES.""
-$ THEN
-$ ans = F$EDIT(ans,"COLLAPSE, UPCASE")
-$ IF (ans.NES.archname) !.AND.knowitall
-$ THEN
-$ echo4 "I'll go with ''archname' anyway..."
-$ ENDIF
-$ ENDIF
-$ dflt = "n"
-$ vms_prefix = "perl_root"
-$ vms_prefixup = F$EDIT(vms_prefix,"UPCASE")
-$ rp = "Will you be sharing your ''vms_prefixup' with ''otherarch'? [''dflt'] "
-$ GOSUB myread
-$ if ans.NES.""
-$ THEN
-$ ans = F$EXTRACT(0,1,F$EDIT(ans,"COLLAPSE, UPCASE"))
-$ ENDIF
-$ IF (ans.NES."Y")
-$ THEN
-$ sharedperl = "N"
-$ ELSE
-$ sharedperl = "Y"
-$ IF (archname.EQS."VMS_AXP")
-$ THEN
-$ macros = macros + """AXE=1"","
-$ ENDIF
-$ ENDIF
-$!
-$!: is AFS running? !sfn
-$!: decide how portable to be. Allow command line overrides. !sfn
-$!: set up shell script to do ~ expansion !sfn
-$!: expand filename !sfn
-$!: now set up to get a file name !sfn
-$!
-$ IF F$TYPE(prefix) .EQS. ""
-$ THEN
-$ prefix = F$ENVIRONMENT("DEFAULT") - ".UU]" + "]"
-$ prefix = F$PARSE(prefix,,,,"NO_CONCEAL") - "][" - ".;"
-$ prefixbase = prefix - "]"
-$ prefix = prefixbase + ".]"
-$ ENDIF
-$ src = prefix
-$!: determine root of directory hierarchy where package will be installed.
-$ dflt = prefix
-$ IF .NOT.silent
-$ THEN
-$ echo ""
-$ echo "By default, ''package' will be installed in ''dflt', pod"
-$ echo "pages under ''prefixbase'.LIB.POD], etc..., i.e. with ''dflt' as prefix for"
-$ echo "all installation directories."
-$ echo "On ''osname' the prefix is used to DEFINE the ''vms_prefixup' prior to installation"
-$ echo "as well as during subsequent use of ''package' via ''packageup'_SETUP.COM."
-$ ENDIF
-$ rp = "Installation prefix to use (for ''vms_prefixup')? [ ''dflt' ] "
-$ GOSUB myread
-$ IF ans.NES.""
-$ THEN
-$ prefix = ans
-$ IF F$LOCATE(".]",ans) .EQ. F$LENGTH(ans) THEN prefix = prefix - "]" + ".]"
-$ ELSE
-$ prefix = dflt
-$ ENDIF
-$ perl_root = prefix
-$!
-$! Check here for pre-existing PERL_ROOT.
-$! -> ask if removal desired.
-$! Check here for writability of requested PERL_ROOT if it is not the default (cwd).
-$! -> recommend letting PERL_ROOT be PERL_SRC if requested PERL_ROOT is not writable.
-$!
-$ vms_skip_install = "true"
-$ dflt = "y"
-$! echo ""
-$ rp = "Skip the remaining """"where install"""" questions? [''dflt'] "
-$ GOSUB myread
-$ IF (.NOT.ans).AND.(ans.NES."") THEN vms_skip_install = "false"
-$ IF (.NOT.vms_skip_install)
-$ THEN
-$!
-$!: set the prefixit variable, to compute a suitable default value
-$!
-$!: determine where private library files go
-$!: Usual default is /usr/local/lib/perl5. Also allow things like
-$!: /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
-$ IF .NOT.silent
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-
-There are some auxiliary files for perl5 that need to be put into a
-private library directory that is accessible by everyone.
-$ EOD
-$ ENDIF
-$ IF F$TYPE(privlib) .NES. ""
-$ THEN dflt = privlib
-$ ELSE dflt = "''vms_prefix':[lib]"
-$ ENDIF
-$ rp = "Pathname where the private library files will reside? "
-$ rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
-$ GOSUB myread
-$ IF ans.NES.""
-$ THEN privlib = ans
-$ ELSE privlib = dflt
-$ ENDIF
-$!
-$ ENDIF !%Config-I-VMS, skip remaining "where install" questions
-$!
-$ perl_symbol = "true"
-$ perl_verb = ""
-$ dflt = "y"
-$ IF .NOT.silent
-$ THEN
-$ echo ""
-$ echo "You may choose to write ''packageup'_SETUP.COM to assign a foreign"
-$ echo "symbol to invoke ''package', which is the usual method."
-$ echO "If you do not do so then you would need a DCL command verb at the"
-$ echo "process or the system wide level."
-$ ENDIF
-$ rp = "Invoke perl as a global symbol foreign command? [''dflt'] "
-$ GOSUB myread
-$ IF (.NOT.ans).AND.(ans.NES."") THEN perl_symbol = "false"
-$!
-$ IF (.NOT.perl_symbol)
-$ THEN
-$ dflt = "y"
-$ IF .NOT.silent
-$ THEN
-$ echo ""
-$ echo "Since you won't be using a symbol you must choose to put the ''packageup'"
-$ echo "verb in a per-process table or in the system wide DCLTABLES (which"
-$ echo "would require write privilege)."
-$ ENDIF
-$ rp = "Invoke perl as a per process command verb? [ ''dflt' ] "
-$ GOSUB myread
-$ IF (.NOT.ans).AND.(ans.NES."")
-$ THEN perl_verb = "DCLTABLES"
-$ ELSE perl_verb = "PROCESS"
-$ ENDIF
-$ ENDIF ! (.NOT.perl_symbol)
-$!
-$!: set the base revision
-$ baserev="5.0"
-$ revision = baserev - ".0"
-$!: get the patchlevel
-$ echo ""
-$ echo4 "Getting the current patchlevel..."
-$ patchlevel_h = F$SEARCH("[-]patchlevel.h")
-$ IF (patchlevel_h.NES."")
-$ THEN
-$ got_patch = "false"
-$ got_sub = "false"
-$ got_api_revision = "false"
-$ got_api_version = "false"
-$ got_api_subversion = "false"
-$ OPEN/READONLY CONFIG 'patchlevel_h'
-$Patchlevel_h_loop:
-$ READ/END_Of_File=Close_patch/ERROR=Close_patch CONFIG line
-$ IF ((F$LOCATE("#define PERL_VERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_patch))
-$ THEN
-$ line = F$EDIT(line,"COMPRESS, TRIM")
-$ patchlevel = F$ELEMENT(2," ",line)
-$ got_patch = "true"
-$ ENDIF
-$ IF ((F$LOCATE("#define PERL_SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_sub))
-$ THEN
-$ line = F$EDIT(line,"COMPRESS, TRIM")
-$ subversion = F$ELEMENT(2," ",line)
-$ got_sub = "true"
-$ ENDIF
-$ IF ((F$LOCATE("#define PERL_API_REVISION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_revision))
-$ THEN
-$ line = F$EDIT(line,"COMPRESS, TRIM")
-$ api_revision = F$ELEMENT(2," ",line)
-$ got_api_revision = "true"
-$ ENDIF
-$ IF ((F$LOCATE("#define PERL_API_VERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_version))
-$ THEN
-$ line = F$EDIT(line,"COMPRESS, TRIM")
-$ api_version = F$ELEMENT(2," ",line)
-$ got_api_version = "true"
-$ ENDIF
-$ IF ((F$LOCATE("#define PERL_API_SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_subversion))
-$ THEN
-$ line = F$EDIT(line,"COMPRESS, TRIM")
-$ api_subversion = F$ELEMENT(2," ",line)
-$ got_api_subversion = "true"
-$ ENDIF
-$ IF (.NOT. got_patch) .OR. -
- (.NOT. got_sub) .OR. -
- (.NOT. got_api_revision) .OR. -
- (.NOT. got_api_version) .OR. -
- (.NOT. got_api_subversion) -
- THEN GOTO Patchlevel_h_loop
-$Close_patch:
-$ CLOSE CONFIG
-$ ELSE
-$ patchlevel="0"
-$ subversion="0"
-$ api_revision="0"
-$ api_version="0"
-$ api_subversion="0"
-$ ENDIF
-$ IF (F$STRING(subversion) .NES. "0")
-$ THEN
-$ echo "(You have ''package' revision ''revision' patchlevel ''patchlevel' subversion ''subversion'.)"
-$ ELSE
-$ echo "(You have ''package' revision ''revision' patchlevel ''patchlevel'.)"
-$ ENDIF
-$!
-$ version = revision + "_" + patchlevel + "_" + subversion
-$!
-$ IF (.NOT.vms_skip_install)
-$ THEN
-$!: set the prefixup variable, to restore leading tilde escape !sfn
-$!
-$!: determine where public architecture dependent libraries go
-$ IF (.NOT.silent)
-$ THEN
-$ echo ""
-$ echo "''package' contains architecture-dependent library files. If you are"
-$ ENDIF
-$ IF (.NOT.silent)
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-sharing libraries in a heterogeneous environment, you might store
-these files in a separate location. Otherwise, you can just include
-them with the rest of the public library files.
-$ EOD
-$ ENDIF
-$ IF F$TYPE(archlib) .NES. ""
-$ THEN dflt = archlib
-$ ELSE dflt = privlib - "]" + "." + archname + "." + version + "]"
-$ ENDIF
-$ rp = "Where do you want to put the public architecture-dependent libraries? "
-$ rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
-$ GOSUB myread
-$ IF ans.NES.""
-$ THEN archlib = ans
-$ ELSE archlib = dflt
-$ ENDIF
-$!
-$ ENDIF !%Config-I-VMS, skip "where install" questions
-$!
-$! This quotation from Configure has to be included on VMS:
-$!
-$ TYPE SYS$INPUT:
-$ DECK
-
-There is, however, a strange, musty smell in the air that reminds me of
-something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
-$ EOD
-$ IF (.NOT.vms_skip_install)
-$ THEN
-$!: it so happens the Eunice I know will not run shell scripts in Unix format
-$!
-$!: see if setuid scripts can be secure !sfn
-$!: now see if they want to do setuid emulation !sfn
-$!
-$!: determine where site specific libraries go.
-$ IF .NOT.silent
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-
-The installation process will also create a directory for
-site-specific extensions and modules. Some users find it convenient
-to place all local files in this directory rather than in the main
-distribution directory.
-$ EOD
-$ ENDIF
-$ IF F$TYPE(sitelib) .NES. ""
-$ THEN dflt = sitelib
-$ ELSE dflt = privlib - "]" + ".SITE_PERL]"
-$ ENDIF
-$ rp = "Pathname for the site-specific library files? "
-$ rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
-$ GOSUB myread
-$ IF ans.NES.""
-$ THEN sitelib = ans
-$ ELSE sitelib = dflt
-$ ENDIF
-$!
-$!: determine where site specific architecture-dependent libraries go.
-$ IF .NOT.silent
-$ THEN TYPE SYS$INPUT:
-$ DECK
-
-The installation process will also create a directory for
-architecture-dependent site-specific extensions and modules.
-$ EOD
-$ ENDIF
-$ IF F$TYPE(sitearch) .NES. ""
-$ THEN dflt = sitearch
-$ ELSE dflt = sitelib - "]" + "." + archname + "]"
-$ ENDIF
-$ rp = "Pathname for the site-specific architecture-dependent library files? "
-$ rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
-$ GOSUB myread
-$ IF ans.NES.""
-$ THEN sitearch = ans
-$ ELSE sitearch = dflt
-$ ENDIF
-$!
-$!: determine where old public architecture dependent libraries might be
-$!
-$!: determine where public executables go
-$ IF F$TYPE(bin) .NES. ""
-$ THEN dflt = bin
-$! ELSE dflt = prefix - ".]" + ".BIN]"
-$ ELSE dflt = "/''vms_prefix'/000000"
-$ ENDIF
-$ rp = "Pathname where the public executables will reside? "
-$ rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
-$ GOSUB myread
-$ IF ans.NES.""
-$ THEN bin = ans
-$ ELSE bin = dflt
-$ ENDIF
-$!
-$!: determine where manual pages are on this system
-$!: What suffix to use on installed man pages
-$!: see if we can have long filenames
-$!: determine where library module manual pages go
-$!: What suffix to use on installed man pages
-$!: see what memory models we can support
-$!
-$ ELSE ! skipping "where install" questions, we must set some symbols
-$ IF F$TYPE(archlib).EQS."" THEN -
- archlib="''vms_prefix':[lib.''archname'.''version']"
-$ IF F$TYPE(bin) .EQS. "" THEN -
- bin="/''vms_prefix'/000000"
-$ IF F$TYPE(privlib) .EQS. "" THEN -
- privlib ="''vms_prefix':[lib]"
-$ IF F$TYPE(sitearch) .EQS. "" THEN -
- sitearch="''vms_prefix':[lib.site_perl.''archname']"
-$ IF F$TYPE(sitelib) .EQS. "" THEN -
- sitelib ="''vms_prefix':[lib.site_perl]"
-$ ENDIF !%Config-I-VMS, skip "where install" questions
-$!
-$! These derived locations can be set whether we've opted to
-$! skip the where install questions or not.
-$!
-$ IF F$TYPE(archlibexp) .EQS. "" THEN -
- archlibexp="''vms_prefix':[lib.''archname'.''version']"
-$ IF F$TYPE(binexp) .EQS. "" THEN -
- binexp ="''vms_prefix':[000000]"
-$ IF F$TYPE(builddir) .EQS. "" THEN -
- builddir ="''vms_prefix':[000000]"
-$ IF F$TYPE(installarchlib) .EQS. "" THEN -
- installarchlib="''vms_prefix':[lib.''archname'.''version']"
-$ IF F$TYPE(installbin) .EQS. "" THEN -
- installbin ="''vms_prefix':[000000]"
-$ IF F$TYPE(installscript) .EQS. "" THEN -
- installscript ="''vms_prefix':[utils]"
-$ IF F$TYPE(installman1dir) .EQS. "" THEN -
- installman1dir ="''vms_prefix':[man.man1]"
-$ IF F$TYPE(installman3dir) .EQS. "" THEN -
- installman3dir ="''vms_prefix':[man.man3]"
-$ IF F$TYPE(installprivlib) .EQS. "" THEN -
- installprivlib ="''vms_prefix':[lib]"
-$ IF F$TYPE(installsitearch) .EQS. "" THEN -
- installsitearch="''vms_prefix':[lib.site_perl.''archname']"
-$ IF F$TYPE(installsitelib) .EQS. "" THEN -
- installsitelib ="''vms_prefix':[lib.site_perl]"
-$ IF F$TYPE(oldarchlib) .EQS. "" THEN -
- oldarchlib="''vms_prefix':[lib.''archname']"
-$ IF F$TYPE(oldarchlibexp) .EQS. "" THEN -
- oldarchlibexp="''vms_prefix':[lib.''archname']"
-$ IF F$TYPE(privlibexp) .EQS. "" THEN -
- privlibexp ="''vms_prefix':[lib]"
-$ IF F$TYPE(sitearchexp) .EQS. "" THEN -
- sitearchexp ="''vms_prefix':[lib.site_perl.''archname']"
-$ IF F$TYPE(sitelib_stem) .EQS. "" THEN -
- sitelib_stem ="''vms_prefix':[lib.site_perl]"
-$ IF F$TYPE(sitelibexp) .EQS. "" THEN -
- sitelibexp ="''vms_prefix':[lib.site_perl]"
-$!
-$!: see if we need a special compiler
-$! cc_list = "cc/decc|gcc" !%Config-I-VMS, compiler symbols/commands
-$!
-$ nocc = "f"
-$ vms_cc_dflt = ""
-$ vms_cc_available = ""
-$!
-$ OPEN/WRITE CONFIG ccvms.c
-$ WRITE CONFIG "#ifdef __DECC"
-$ WRITE CONFIG "#include <stdlib.h>" !DECC is sooo picky
-$ WRITE CONFIG "#endif"
-$ WRITE CONFIG "#include <stdio.h>"
-$ WRITE CONFIG "int main() {"
-$ WRITE CONFIG "#ifdef __DECC"
-$ WRITE CONFIG " printf(""/DECC\n"");"
-$ WRITE CONFIG "#else"
-$ WRITE CONFIG " printf(""/VAXC\n"");"
-$ WRITE CONFIG "#endif"
-$ WRITE CONFIG " exit(0);"
-$ WRITE CONFIG "}"
-$ CLOSE CONFIG
-$!
-$! DEFINE SYS$ERROR _NLA0:
-$! DEFINE SYS$OUTPUT _NLA0:
-$ cc/NoObj/list=ccvms.lis ccvms.c
-$ tmp = $status
-$! DEASSIGN SYS$OUTPUT
-$! DEASSIGN SYS$ERROR
-$ IF (silent) THEN GOSUB Shut_up
-$ IF tmp.NE.%X10B90001
-$ THEN
-$ IF tmp.NE.%X10000001
-$ THEN
-$ nocc = "t" !%X10000001 is return from gcc
-$ GOTO Gcc_initial_check
-$ ENDIF
-$ ENDIF
-$!
-$ GOSUB List_Parse
-$ IF .NOT.silent THEN echo ""
-$ echo "Default ""cc"" is ''line' ''archsufx' ''F$GETSYI("VERSION")'"
-$ IF F$LOCATE("VAX",line).NE.F$LENGTH(line)
-$ THEN
-$ IF .NOT.silent
-$ THEN
-$ echo "Will try cc/decc..."
-$ ENDIF
-$ DEFINE/USER_MODE SYS$ERROR NL:
-$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ SET NOON
-$ cc/decc/NoObj/list=ccvms.lis ccvms.c
-$ tmp = $status
-$ SET ON
-$ IF (silent) THEN GOSUB Shut_up
-$ IF tmp.NE.%X10B90001
-$ THEN
-$ echo "Apparently you don't have that one."
-$ ELSE
-$ GOSUB List_parse
-$ echo "You also have: ''line' ''archsufx' ''F$GETSYI("VERSION")'"
-$ vms_cc_available = vms_cc_available + "cc/decc "
-$ ENDIF
-$ ELSE
-$ IF (F$LOCATE("DEC",line).NE.F$LENGTH(line)).or.(F$LOCATE("Compaq",line).NE.F$LENGTH(line))
-$ THEN
-$ vms_cc_dflt = "/decc"
-$ vms_cc_available = vms_cc_available + "cc/decc "
-$ ENDIF
-$ ENDIF
-$!
-$Gcc_initial_check:
-$ echo "Checking for gcc"
-$ OPEN/WRITE CONFIG gccvers.lis
-$ DEFINE/USER_MODE SYS$ERROR CONFIG
-$ DEFINE/USER_MODE SYS$OUTPUT CONFIG
-$ 'gcc_symbol'/noobj/version _nla0:
-$ tmp = $status
-$ IF (silent) THEN GOSUB Shut_up
-$ CLOSE CONFIG
-$ IF (tmp.NE.%X10000001).and.(tmp.ne.%X00030001)
-$ THEN
-$ echo "Symbol ""''gcc_symbol'"" is not defined. I guess you do not have it."
-$ DELETE/NOLOG/NOCONFIRM gccvers.lis;
-$ GOTO Cxx_initial_check
-$ ENDIF
-$ OPEN/READ CONFIG gccvers.lis
-$GCC_List_Read:
-$ READ/END_OF_FILE=GCC_List_End CONFIG line
-$ GOTO GCC_List_Read
-$GCC_List_End:
-$ CLOSE CONFIG
-$ echo line
-$ vms_cc_available = vms_cc_available + "''gcc_symbol' "
-$ DELETE/NOLOG/NOCONFIRM gccvers.lis;
-$!
-$Cxx_initial_check:
-$!
-$! Do note that [vms]perl source files have a ways to go before they will
-$! compile under CXX.
-$! In order to test Configure.com with CXX invoke it with "-Dtry_cxx" on
-$! the command line.
-$!
-$ IF F$TYPE(try_cxx) .EQS. "" THEN try_cxx := n
-$ IF try_cxx .OR. try_cxx .EQS. "define"
-$!
-$ THEN
-$!
-$ echo "Checking for CXX..."
-$ OPEN/WRITE CONFIG ccvms.c
-$ WRITE CONFIG "#include <iostream>"
-$ WRITE CONFIG "int main() {"
-$ WRITE CONFIG "#ifdef __DECCXX"
-$ WRITE CONFIG " cout << __DECCXX, endl;"
-$ WRITE CONFIG "#else"
-$ WRITE CONFIG " cout << 0,endl;"
-$ WRITE CONFIG "#endif"
-$! Todo: add G++ identifier check ??
-$ WRITE CONFIG " return(0);"
-$ WRITE CONFIG "}"
-$ CLOSE CONFIG
-$ SET NOON
-$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ DEFINE/USER_MODE SYS$ERROR NL:
-$ cxx ccvms.c
-$ tmp = $status
-$ SET ON
-$! success $status with:
-$! DEC C++ V1.1-001 on VMS VAX V5.5-2
-$! DEC C++ V5.6-013 on OpenVMS VAX V7.1
-$! DEC C++ V6.1-003 on OpenVMS Alpha V7.1
-$! Compaq C++ V6.2-016 for OpenVMS Alpha V7.2-1
-$ IF tmp .eq. %X15F60001
-$ THEN
-$! Which linker?
-$ SET NOON
-$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ DEFINE/USER_MODE SYS$ERROR NL:
-$ link ccvms.obj
-$ tmp = $status
-$ SET ON
-$ ! success $status with:
-$ ! link && DEC C++ V1.1-001 on VMS VAX V5.5-2
-$ ! link && DEC C++ V5.6-013 on OpenVMS VAX V7.1
-$ IF tmp .eq. %X10000001
-$ THEN
-$ ld_try = "Link"
-$ vms_cc_available = vms_cc_available + "cxx "
-$ echo "CXX and LINK are available."
-$ ELSE
-$ IF F$SEARCH("ccvms.exe") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.exe;
-$ SET NOON
-$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ DEFINE/USER_MODE SYS$ERROR NL:
-$ cxxlink ccvms.obj
-$ tmp = $status
-$ SET ON
-$ ! success $status with:
-$ ! cxxlink && DEC C++ V6.1-003 on OpenVMS Alpha V7.1
-$ ! cxxlink && Compaq C++ V6.2-016 for OpenVMS Alpha V7.2-1
-$ IF tmp .eq. %X10000001
-$ THEN
-$ ld_try = "cxxlink"
-$ vms_cc_available = vms_cc_available + "cxx "
-$ echo "CXX and CXXLINK are available."
-$ ENDIF
-$ ENDIF
-$ IF F$SEARCH("ccvms.exe") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.exe;
-$ ELSE
-$ echo "Nope."
-$ ENDIF
-$ DELETE/NOLOG/NOCONFIRM ccvms.c;
-$ IF F$SEARCH("ccvms.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.obj;
-$ CALL Cxx_demangler_cleanup
-$!
-$ ENDIF ! 1 .eq. 0 or 1 .eq. 1
-$!
-$CC_Cleanup:
-$ DELETE/NOLOG/NOCONFIRM ccvms.*;
-$CC_Desired:
-$!: see if we need a special compiler
-$! echo ""
-$ echo "Available compiler(s):"
-$ echo "( ''vms_cc_available')"
-$ IF .NOT.nocc
-$ THEN
-$ dflt = "cc''vms_cc_dflt'" !-> "cc" in case first compile went OK
-$ ELSE
-$ dflt = gcc_symbol
-$ ENDIF
-$ rp = "Use which C compiler? [''dflt'] "
-$ GOSUB myread
-$ IF ans.NES.""
-$ THEN
-$ ans = F$EDIT(ans,"TRIM, COMPRESS, LOWERCASE")
-$ Mcc = ans
-$ IF (F$LOCATE("dec",ans).NE.F$LENGTH(ans)).or.(F$LOCATE("compaq",ans).NE.F$LENGTH(ans))
-$ THEN
-$ Mcc = "cc/decc"
-$! CPQ ?
-$ ccname := DEC
-$ C_COMPILER_Replace = "CC=cc=''Mcc'"
-$ ENDIF
-$ IF F$LOCATE("cxx",F$EDIT(ans,"COLLAPSE,LOWERCASE")) .NE. F$LENGTH(ans)
-$ THEN
-$ Mcc = "cxx"
-$ ccname := CXX
-$ ld = ld_try
-$ C_COMPILER_Replace = "CC=cc=''Mcc'"
-$ ELSE ! Not_cxx
-$ IF Mcc.NES.dflt
-$ THEN
-$ IF F$LOCATE("dec",dflt) .NE. F$LENGTH(dflt) .or. -
- F$LOCATE("compaq",dflt) .NE. F$LENGTH(dflt)
-$ THEN
-$ C_COMPILER_Replace = "CC=cc=''Mcc'"
-$ ELSE
-$ ccname := DEC
-$ ENDIF
-$ ELSE
-$ IF Mcc .EQS. "cc/decc"
-$ THEN
-$ ccname := DEC
-$ C_COMPILER_Replace = "CC=cc=''Mcc'"
-$ ENDIF
-$ ENDIF
-$ ENDIF
-$ ELSE
-$ Mcc = dflt
-$ IF Mcc .EQS. "cc/decc"
-$ THEN
-$ ccname := DEC
-$ C_COMPILER_Replace = "CC=cc=''Mcc'"
-$ ENDIF
-$ IF Mcc .EQS. "gcc"
-$ THEN
-$ ccname := GCC
-$ C_COMPILER_Replace = "CC=cc=''Mcc'"
-$ ENDIF
-$ ENDIF
-$Decc_Version_check:
-$ ccversion=""
-$ IF ccname .EQS. "DEC"
-$ THEN
-$ echo ""
-$ echo4 "Checking for the Dec C version number..."
-$ OPEN/WRITE CONFIG deccvers.c
-$ WRITE CONFIG "#include <stdlib.h>" !DECC is sooo picky
-$ WRITE CONFIG "#include <stdio.h>"
-$ WRITE CONFIG "int main() {"
-$ WRITE CONFIG "#ifdef __DECC"
-$ WRITE CONFIG "#ifdef __DECC_VER"
-$ WRITE CONFIG " printf(""%i\n"", __DECC_VER);"
-$ WRITE CONFIG "#else"
-$ WRITE CONFIG " printf(""%i\n"", ""1"");"
-$ WRITE CONFIG "#endif"
-$ WRITE CONFIG "#endif"
-$ WRITE CONFIG " exit(0);"
-$ WRITE CONFIG "}"
-$ CLOSE CONFIG
-$ SET NOON
-$ DEFINE/USER_MODE SYS$ERROR NL:
-$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ 'Mcc' deccvers.c
-$ tmp = $status
-$ IF (silent) THEN GOSUB Shut_up
-$ DEFINE/USER_MODE SYS$ERROR NL:
-$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ link deccvers.obj
-$ tmp = $status
-$ IF (silent) THEN GOSUB Shut_up
-$ OPEN/WRITE CONFIG deccvers.out
-$ DEFINE/USER_MODE SYS$ERROR CONFIG
-$ DEFINE/USER_MODE SYS$OUTPUT CONFIG
-$ mcr []deccvers.exe
-$ tmp = $status
-$ SET ON
-$ CLOSE CONFIG
-$ IF (silent) THEN GOSUB Shut_up
-$ OPEN/READ CONFIG deccvers.out
-$ READ/END_OF_FILE=Dec_c_cleanup CONFIG line
-$Dec_c_cleanup:
-$ CLOSE CONFIG
-$ echo "You are using Dec C ''line'"
-$ ccversion = line
-$ Dec_C_Version = F$INTEGER(line)
-$ IF Dec_C_Version .GE. 60200000
-$ THEN
-$ echo4 "adding /NOANSI_ALIAS qualifier to ccflags."
-$ ccflags = ccflags + "/NOANSI_ALIAS"
-$ ENDIF
-$ DELETE/NOLOG/NOCONFIRM deccvers.*;
-$ ENDIF
-$Gcc_check:
-$ gccversion = ""
-$ IF ccname .EQS. "GCC"
-$ THEN
-$ vaxcrtl_olb = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
-$ vaxcrtl_exe = F$SEARCH("SYS$SHARE:VAXCRTL.EXE")
-$ gcclib_olb = F$SEARCH("GNU_CC:[000000]GCCLIB.OLB")
-$ IF gcclib_olb .EQS. ""
-$ THEN
-$! These objects/libs come w/ gcc 2.7.2 for AXP:
-$ tmp = F$SEARCH("GNU_CC:[000000]libgcc2.olb")
-$ IF tmp .NES. "" then gcclib_olb = tmp
-$ tmp = F$SEARCH("GNU_CC:[000000]libgcclib.olb")
-$ IF tmp .NES. ""
-$ THEN
-$ IF gcclib_olb .EQS. ""
-$ THEN gcclib_olb = tmp
-$ ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
-$ ENDIF
-$ ENDIF
-$ tmp = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
-$ IF tmp .NES. ""
-$ THEN
-$ IF gcclib_olb .EQS. ""
-$ THEN gcclib_olb = tmp
-$ ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
-$ ENDIF
-$ ENDIF
-$ tmp = F$SEARCH("GNU_CC:[000000]crt0.obj")
-$ IF tmp .NES. ""
-$ THEN
-$ IF gcclib_olb .EQS. ""
-$ THEN gcclib_olb = tmp
-$ ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
-$ ENDIF
-$ ENDIF
-$ IF gcclib_olb .EQS. vaxcrtl_olb THEN gcclib_olb = "" !goofy order of axplibs
-$ ELSE
-$ gcclib_olb = gcclib_olb + "/lib"
-$ ENDIF
-$ IF gcclib_olb .NES. "" .AND. -
- (vaxcrtl_olb .NES. "" .OR. -
- vaxcrtl_exe .NES. "" )
-$ THEN
-$ echo ""
-$ echo4 "Checking for GNU cc in disguise and/or its version number..." !>&4
-$ OPEN/WRITE CONFIG gccvers.c
-$ WRITE CONFIG "#include <stdio.h>"
-$ WRITE CONFIG "int main() {"
-$ WRITE CONFIG "#ifdef __GNUC__"
-$ WRITE CONFIG "#ifdef __VERSION__"
-$ WRITE CONFIG " printf(""%s\n"", __VERSION__);"
-$ WRITE CONFIG "#else"
-$ WRITE CONFIG " printf(""%s\n"", ""1"");"
-$ WRITE CONFIG "#endif"
-$ WRITE CONFIG "#endif"
-$ WRITE CONFIG " exit(0);"
-$ WRITE CONFIG "}"
-$ CLOSE CONFIG
-$ DEFINE SYS$ERROR _NLA0:
-$ DEFINE SYS$OUTPUT _NLA0:
-$ 'Mcc' gccvers.c
-$ tmp = $status
-$ DEASSIGN SYS$ERROR _NLA0:
-$ DEASSIGN SYS$OUTPUT _NLA0:
-$ IF (silent) THEN GOSUB Shut_up
-$ DEFINE SYS$ERROR _NLA0:
-$ DEFINE SYS$OUTPUT _NLA0:
-$ IF vaxcrtl_exe .EQS. ""
-$ THEN
-$ IF F$LOCATE("VAXCRTL",gcclib_olb).NE.F$LENGTH(gcclib_olb)
-$ THEN
-$ link gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
-$ tmp = $status
-$ ELSE
-$ link gccvers.obj,'gcclib_olb'
-$ tmp = $status
-$ ENDIF
-$ ELSE
-$ OPEN/WRITE CONFIG GCCVERS.OPT
-$ WRITE CONFIG "SYS$SHARE:VAXCRTL/SHARE"
-$ CLOSE CONFIG
-$ link gccvers.obj,GCCVERS.OPT/OPT,'gcclib_olb'
-$ tmp = $status
-$ ENDIF
-$ DEASSIGN SYS$ERROR
-$ DEASSIGN SYS$OUTPUT
-$ IF (silent) THEN GOSUB Shut_up
-$ OPEN/WRITE CONFIG gccvers.out
-$ DEFINE SYS$ERROR CONFIG
-$ DEFINE SYS$OUTPUT CONFIG
-$ mcr []gccvers.exe
-$ tmp = $status
-$ CLOSE CONFIG
-$ DEASSIGN SYS$OUTPUT
-$ DEASSIGN SYS$ERROR
-$ IF (silent) THEN GOSUB Shut_up
-$ OPEN/READ CONFIG gccvers.out
-$ READ/END_OF_FILE=Gcc_cleanup CONFIG line
-$Gcc_cleanup:
-$ CLOSE CONFIG
-$ DELETE/NOLOG/NOCONFIRM gccvers.*;
-$ IF F$LOCATE("GNU C version ",line).NE.F$LENGTH(line)
-$ THEN
-$ echo "You are not using GNU cc."
-$ GOTO Host_name
-$ ELSE
-$ echo "You are using GNU cc ''line'"
-$ gccversion = line
-$ ccname := "GCC"
-$ C_COMPILER_Replace = "CC=cc=''Mcc'"
-$ GOTO Include_dirs
-$ ENDIF
-$ ENDIF
-$ ENDIF
-$Cxx_Version_check:
-$ IF ccname .EQS. "CXX"
-$ THEN
-$ OPEN/WRITE CONFIG cxxvers.c
-$ WRITE CONFIG "#include <stdio.h>"
-$ WRITE CONFIG "int main() {"
-$ WRITE CONFIG "#ifdef __DECCXX_VER"
-$ WRITE CONFIG " printf(""%i\n"", __DECCXX_VER);"
-$ WRITE CONFIG "#else"
-$ WRITE CONFIG " printf(""%i\n"", ""0"");"
-$ WRITE CONFIG "#endif"
-$ WRITE CONFIG " return(0);"
-$ WRITE CONFIG "}"
-$ CLOSE CONFIG
-$ SET NOON
-$ DEFINE/USER_MODE SYS$ERROR NL:
-$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ 'Mcc' cxxvers.c
-$ tmp = $status
-$ SET ON
-$ IF (silent) THEN GOSUB Shut_up
-$ SET NOON
-$ DEFINE/USER_MODE SYS$ERROR NL:
-$ DEFINE/USER_MODE SYS$OUTPUT NL:
-$ 'ld' cxxvers.obj
-$ tmp = $status
-$ SET ON
-$ IF (silent) THEN GOSUB Shut_up
-$ OPEN/WRITE CONFIG cxxvers.out
-$ SET NOON
-$ DEFINE/USER_MODE SYS$ERROR CONFIG
-$ DEFINE/USER_MODE SYS$OUTPUT CONFIG
-$ mcr []cxxvers.exe
-$ tmp = $status
-$ SET ON
-$ CLOSE CONFIG
-$ IF (silent) THEN GOSUB Shut_up
-$ OPEN/READ CONFIG cxxvers.out
-$ READ/END_OF_FILE=Cxx_cleanup CONFIG line
-$Cxx_cleanup:
-$ CLOSE CONFIG
-$ DELETE/NOLOG/NOCONFIRM cxxvers.*;
-$ echo "You are using CXX ''line'"
-$ cxxversion = line
-$ ccversion = line
-$ CALL Cxx_demangler_cleanup
-$ ENDIF
-$!
-$Cxx_demangler_cleanup: SUBROUTINE
-$!
-$! If we do build with CXX these demangler Dbs will be left all over.
-$! However, configure.com does try to remove the [.UU] sub directory.
-$! Be sure to set default to the correct place before calling this sub.
-$!
-$ SET NOON
-$ IF F$SEARCH("[.CXX_REPOSITORY]*.*") .NES. "" THEN DELETE/NOLOG/NOCONFIRM [.CXX_REPOSITORY]*.*;*
-$ IF F$SEARCH("CXX_REPOSITORY.DIR") .NES. ""
-$ THEN
-$ SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) CXX_REPOSITORY.DIR
-$ DELETE/NOLOG/NOCONFIRM CXX_REPOSITORY.DIR;
-$ ENDIF
-$ SET ON
-$ EXIT
-$ ENDSUBROUTINE ! Cxx_demangler_cleanup
-$!
-$ GOTO Host_name
-$!
-$List_Parse:
-$ OPEN/READ CONFIG ccvms.lis
-$ READ CONFIG line
-$ IF (F$GETSYI("HW_MODEL") .LT. 1024)
-$ THEN
-$ read CONFIG line
-$ archsufx = "VAX"
-$ ELSE
-$ archsufx = "AXP"
-$ ENDIF
-$ CLOSE CONFIG
-$ line = F$EDIT(line,"TRIM,COMPRESS")
-$ line = line - "Page 1" ! occurs at end all compilers
-$ line = line - "CCVMS " ! filename appears w/ VAXC
-$ line = line - "Source Listing " ! Seen w/ AXP DECC
-$ tmp = F$EXTRACT(0,20,line) !timestamp, e.g. "30-JUL-1996 21:12:54 "
-$ line = line - tmp
-$ line = F$EDIT(line,"TRIM") !bit redundant but we're in no big hurry
-$ DELETE/NOLOG/NOCONFIRM ccvms.lis;
-$ RETURN
-$!
-$Include_dirs:
-$!: What should the include directory be ? (.TLB text libraries)
-$ dflt = gcclib_olb
-$ rp = "Where are the include files you want to use? "
-$ IF f$length( rp + "[''dflt'] " ).gt.76
-$ THEN rp = F$FAO("!AS!/!AS",rp,"[''dflt'] ")
-$ ELSE rp = rp + "[''dflt'] "
-$ ENDIF
-$ GOSUB myread
-$ usrinc = ans
-$!
-$!: see if we have to deal with yellow pages, now NIS.
-$!: now get the host name
-$Host_name:
-$ echo ""
-$ echo4 "Figuring out host name..." !>&4
-$ myhostname = ""
-$ IF myhostname.eqs."" THEN myhostname = F$TRNLNM("ARPANET_HOST_NAME")
-$ IF myhostname.eqs."" THEN myhostname = F$TRNLNM("INTERNET_HOST_NAME")
-$ IF myhostname.eqs."" THEN myhostname = F$TRNLNM("MULTINET_HOST_NAME")
-$ IF myhostname.eqs."" THEN myhostname = F$TRNLNM("UCX$INET_HOST_NAME")
-$ IF myhostname.eqs."".and. -
- F$TRNLNM("UCX$INET_HOST") .nes. "" .and. -
- F$TRNLNM("UCX$INET_DOMAIN") .nes. "" THEN -
- myhostname = F$TRNLNM("UCX$INET_HOST") + "." + F$TRNLNM("UCX$INET_DOMAIN")
-$ IF myhostname.eqs."" THEN myhostname = F$TRNLNM("TCPWARE_DOMAINNAME")
-$ IF myhostname.eqs."" THEN myhostname = F$TRNLNM("NEWS_ADDRESS")
-$ IF myhostname.eqs."" THEN myhostname = F$TRNLNM("SYS$NODE") - "::"
-$ IF myhostname.eqs."" THEN myhostname = F$EDIT(F$GETSYI("SCSNODE"),"TRIM")
-$!: you do not want to know about this
-$!: verify guess
-$ rp = "Your host name appears to be """"''myhostname'"""". Right? "
-$ GOSUB myread
-$ IF (.not.ans).and.(ans.NES."")
-$ THEN
-$ READ SYS$COMMAND/PROMPT= -
- "Please type the (one word) name of your host: " ans
-$ myhostname = ans
-$ ENDIF
-$!: translate upper to lower if necessary
-$ myhostname = F$EDIT(myhostname,"COLLAPSE")
-$ mylowhostname = F$EDIT(myhostname," LOWERCASE")
-$ IF mylowhostname.NES.myhostname
-$ THEN
-$ echo "(Normalizing case in your host name)"
-$ myhostname = mylowhostname
-$ ENDIF
-$!
-$ fp = F$LOCATE(".",myhostname)
-$ mydomain = F$EXTRACT(fp,(F$LENGTH(myhostname)-fp)+1,myhostname)
-$ IF mydomain.NES."" !no periods in DECnet names like "MYDECNODE::"
-$ THEN
-$ rp = "What is your domain name? [''mydomain'] "
-$ GOSUB myread
-$ IF ans .nes. "" THEN mydomain = ans
-$!: translate upper to lower if necessary
-$ mydomain = F$EDIT(mydomain,"COLLAPSE")
-$ mylowdomain = F$EDIT(mydomain," LOWERCASE")
-$ IF mylowdomain.NES.mydomain
-$ THEN
-$ echo "(Normalizing case in your domain name)"
-$ mydomain = mylowdomain
-$ ENDIF
-$ ENDIF
-$ myhostname = myhostname - mydomain
-$ echo "(Trimming domain name from host name--host name is now ''myhostname')"
-$ IF .NOT.silent
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-
-I need to get your e-mail address in Internet format if possible, i.e.
-something like user@host.domain. Please answer accurately since I have
-no easy means to double check it. The default value provided below
-is most probably close to the reality but may not be valid from outside
-your organization...
-$ EOD
-$ ENDIF
-$ IF F$TYPE(cf_email) .EQS. ""
-$ THEN
-$ dflt = "''cf_by'@''myhostname'"+"''mydomain'"
-$ rp = "What is your e-mail address? [''dflt'] "
-$ GOSUB myread
-$ IF ans .nes. ""
-$ THEN cf_email = ans
-$ ELSE cf_email = dflt
-$ ENDIF
-$ ENDIF
-$!
-$ IF .NOT.silent
-$ THEN
-$ TYPE SYS$INPUT:
-$ DECK
-
-If you or somebody else will be maintaining perl at your site, please
-fill in the correct e-mail address here so that they may be contacted
-if necessary. Currently, the "perlbug" program included with perl
-will send mail to this address in addition to perlbug@perl.com. You may
-enter "none" for no administrator.
-$ EOD
-$ ENDIF
-$ dflt = "''cf_email'"
-$ rp = "Perl administrator e-mail address [''dflt'] "
-$ GOSUB myread
-$ IF ans .nes. ""
-$ THEN perladmin = ans
-$ ELSE perladmin = dflt
-$ ENDIF
-$!
-$!: determine where public executable scripts go
-$!: determine perl absolute location
-$!: figure out how to guarantee perl startup
-$!
-$!: see how we invoke the C preprocessor
-$! echo ""
-$! echo4 "Now, how can we feed standard input to your C preprocessor..." !>&4
-$!: Set private lib path
-$!: Now check and see which directories actually exist, avoiding duplicates
-$!: determine optimize, if desired, or use for debug flag also
-$!: We will not override a previous value, but we might want to
-$!: augment a hint file
-$!: the following weeds options from ccflags that are of no interest to cpp
-$!: flags used in final linking phase
-$!: Try to guess additional flags to pick up local libraries.
-$!: coherency check
-$! echo ""
-$! echo4 "Checking your choice of C compiler and flags for coherency..." !>&4
-$!: compute shared library extension
-$!: Looking for optional libraries
-$!: see if nm is to be used to determine whether a symbol is defined or not
-$!: get list of predefined functions in a handy place
-$!: see if we have sigaction
-$!: see whether socketshr exists
-$ IF (F$SEARCH(F$PARSE("SocketShr","Sys$Share:.Exe")).NES."")
-$ THEN
-$ Has_socketshr = "T"
-$ echo ""
-$ echo4 "Hmm... Looks like you have SOCKETSHR Berkeley networking support."
-$ ELSE
-$ Has_socketshr = "F"
-$ ENDIF
-$ IF (ccname .EQS. "DEC" .AND. Dec_C_Version .GE. 50200000) .OR. -
- (ccname .EQS. "CXX")
-$ THEN
-$ Has_Dec_C_Sockets = "T"
-$ echo ""
-$ echo4 "Hmm... Looks like you have Dec C Berkeley networking support."
-$ ELSE
-$ Has_Dec_C_Sockets = "F"
-$ ENDIF
-$ ! Hey, we've got both. Default to Dec C, then, since it's better
-$ IF Has_socketshr .OR. Has_Dec_C_Sockets
-$ THEN
-$ echo ""
-$ echo "You have sockets available. Which socket stack do you want to"
-$ echo "build into Perl?"
-$ IF Has_Dec_C_Sockets
-$ THEN
-$ dflt = "DECC"
-$ else
-$ dflt = "SOCKETSHR"
-$ endif
-$ rp = "Choose socket stack (NONE"
-$ IF Has_socketshr THEN rp = rp + ",SOCKETSHR"
-$ IF Has_Dec_C_Sockets THEN rp = rp + ",DECC"
-$ rp = rp + ") [''dflt'] "
-$ GOSUB myread
-$ IF ans .EQS. "" THEN ans = "''dflt'"
-$ Has_Dec_C_Sockets = "F"
-$ Has_socketshr = "F"
-$ ans = F$EDIT(ans,"TRIM,COMPRESS,LOWERCASE")
-$ IF ans.eqs."decc" then Has_Dec_C_Sockets = "T"
-$ IF ans.eqs."socketshr" then Has_socketshr = "T"
-$ ENDIF
-$ IF Has_Dec_C_Sockets .or. Has_socketshr
-$ THEN
-$ static_ext = f$edit(static_ext+" "+"Socket","trim,compress")
-$ ENDIF
-$!
-$!
-$! Ask if they want to build with VMS_DEBUG perl
-$ echo ""
-$ echo "Perl can be built to run under the VMS debugger."
-$ echo "You should only select this option if you are debugging"
-$ echo "perl itself. This can be a useful feature if you are "
-$ echo "embedding perl in a program."
-$ dflt = "n"
-$ rp = "Build a VMS-DEBUG version of Perl? [''dflt'] "
-$ GOSUB myread
-$ IF ans.eqs."" then ans = dflt
-$ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y"
-$ THEN
-$ use_vmsdebug_perl = "Y"
-$ macros = macros + """__DEBUG__=1"","
-$ ELSE
-$ use_vmsdebug_perl = "N"
-$ ENDIF
-$!
-$! Ask if they want to build with DEBUGGING
-$ echo ""
-$ echo "Perl can be built with extra runtime debugging enabled. This"
-$ echo "enables the -D switch, at the cost of some performance. It"
-$ echo "was mandatory on perl 5.005 and before on VMS, but is now"
-$ echo "optional. If you do not generally use it you should probably"
-$ echo "leave this off and gain a bit of extra speed."
-$ dflt = "y"
-$ rp = "Build a DEBUGGING version of Perl? [''dflt'] "
-$ GOSUB myread
-$ IF ans.eqs."" then ans = dflt
-$ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y"
-$ THEN
-$ use_debugging_perl = "Y"
-$ ELSE
-$ use_debugging_perl = "N"
-$ ENDIF
-$!
-$! Ask if they want to build with MULTIPLICITY
-$ echo ""
-$ echo "Perl can be built so that multiple Perl interpreters can coexist"
-$ echo "within the same Perl executable."
-$ echo "There is some performance overhead, however, so you"
-$ echo "probably do not want to choose this unless you are going to be"
-$ echo "doing things with embedded perl."
-$ dflt = "n"
-$ rp = "Build Perl for multiplicity? [''dflt'] "
-$ GOSUB myread
-$ IF ans.eqs."" then ans = dflt
-$ IF ans
-$ THEN
-$ usemultiplicity="define"
-$ ELSE
-$ usemultiplicity="undef"
-$ ENDIF
-$!
-$! Ask if they want to build with 64-bit support
-$ IF (archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
-$ THEN
-$ dflt = use64bitint
-$ echo ""
-$ echo "You can have native 64-bit long integers."
-$ echo ""
-$ echo "Perl can be built to take advantage of 64-bit integer types"
-$ echo "on some systems, which provide a much larger range for perl's"
-$ echo "mathematical operations. (Note that does *not* enable 64-bit"
-$ echo "fileops at the moment, as Dec C doesn't do that yet)."
-$ echo "Choosing this option will most probably introduce binary incompatibilities."
-$ echo ""
-$ echo "If this does not make any sense to you, just accept the default ''dflt'."
-$ rp = "Try to use 64-bit integers, if available? [''dflt'] "
-$ GOSUB myread
-$ IF ans .EQS. "" THEN ans = dflt
-$ IF ans
-$ THEN use64bitint="Y"
-$ ELSE use64bitint="N"
-$ ENDIF
-$ IF (use64bitint)
-$ THEN
-$ dflt = use64bitall
-$ echo ""
-$ echo "Since you chose 64-bitness you may want to try maximal 64-bitness."
-$ echo "What you have chosen is minimal 64-bitness which means just enough"
-$ echo "to get 64-bit integers. The maximal means using as much 64-bitness"
-$ echo "as is possible on the platform. This in turn means even more binary"
-$ echo "incompatibilities. On the other hand, your platform may not have"
-$ echo "any more maximal 64-bitness than what you already have chosen."
-$ echo ""
-$ echo "If this does not make any sense to you, just accept the default ''dflt'."
-$ rp = "Try to use full 64-bit support, if available? [''dflt'] "
-$ GOSUB myread
-$ IF ans .EQS. "" THEN ans = dflt
-$ IF ans
-$ THEN use64bitall="Y"
-$ ELSE use64bitall="N"
-$ ENDIF
-$ ENDIF
-$ ENDIF ! AXP && >= 7.1
-$!
-$! Ask about threads, if appropriate
-$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
-$ THEN
-$ echo ""
-$ echo "This version of Perl can be built with threads. While really nifty,"
-$ echo "they are a beta feature, and there is a speed penalty for perl"
-$ echo "programs if you build with threads *even if you do not use them*."
-$ dflt = "n"
-$ rp = "Build with threads? [''dflt'] "
-$ GOSUB myread
-$ if ans.eqs."" then ans = dflt
-$ if (f$extract(0, 1, "''ans'").eqs."Y").or.(f$extract(0, 1, "''ans'").eqs."y")
-$ THEN
-$ use_threads="T"
-$ ! Shall we do the 5.005-stype threads, or IThreads?
-$ echo "As of 5.5.640, Perl has two different internal threading"
-$ echo "implementations, the 5.005 version (5005threads) and an"
-$ echo "interpreter-based version (ithreads) that has one"
-$ echo "interpreter per thread. Both are very experimental. This"
-$ echo "arrangement exists to help developers work out which one"
-$ echo "is better."
-$ echo ""
-$ echo "If you are a casual user, you probably do not want"
-$ echo "interpreter-threads at this time. There doesn't yet exist"
-$ echo "a way to create threads from within Perl in this model,"
-$ echo "i.e., ""use Thread;"" will NOT work."
-$ echo ""
-$ dflt = "n"
-$ rp = "Build with Interpreter threads? [''dflt'] "
-$ GOSUB myread
-$ if ans.eqs."" then ans = dflt
-$ if (f$extract(0, 1, "''ans'").eqs."Y").or.(f$extract(0, 1, "''ans'").eqs."y")
-$ THEN
-$ use_ithreads="Y"
-$ use_5005_threads="N"
-$ ELSE
-$ use_ithreads="N"
-$ use_5005_threads="Y"
-$ ENDIF
-$ ! Are they on VMS 7.1 on an alpha?
-$ if (archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
-$ THEN
-$ echo ""
-$ echo "Threaded perl can be linked to use multiple kernel threads"
-$ echo "and system upcalls on VMS 7.1+ on Alpha systems. This feature"
-$ echo "allows multiple threads to execute simultaneously on an SMP"
-$ echo "system as well as preventing a single thread from blocking"
-$ echo "all the threads in a program, even on a single-processor"
-$ echo "machine. Unfortunately, this feature isn't safe on an"
-$ echo "unpatched 7.1 system (several OS patches were required when"
-$ echo "this procedure was written)."
-$ dflt = "n"
-$ rp = "Enable multiple kernel threads and upcalls? [''dflt'] "
-$ gosub myread
-$ if ans.eqs."" then ans="''dflt'"
-$ if f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE")).eqs."Y"
-$ THEN
-$ Thread_Live_Dangerously = "MT=MT=1"
-$ ENDIF
-$ ENDIF
-$ ENDIF
-$ ENDIF
-$ IF archname .EQS. "VMS_AXP"
-$ THEN
-$! Case sensitive?
-$ echo ""
-$ echo "By default, perl (and pretty much everything else on VMS) uses"
-$ echo "case-insensitive linker symbols. Which is to say, when the"
-$ echo "underlying C code makes a call to a routine called Perl_foo in"
-$ echo "the source, the name in the object modules or shareable images"
-$ echo "is really PERL_FOO. There are some packages that use an"
-$ echo "embedded perl interpreter that instead require case-sensitive"
-$ echo "linker symbols."
-$ echo ""
-$ echo "If you have no idea what this means, and do not have"
-$ echo "any program requiring anything, choose the default."
-$ dflt = be_case_sensitive
-$ rp = "Build with case-sensitive symbols? [''dflt'] "
-$ GOSUB myread
-$ IF ans .EQS. "" THEN ans="''dflt'"
-$ be_case_sensitive = "''ans'"
-$! IEEE math?
-$ echo ""
-$ echo "Perl normally uses G_FLOAT format floating point numbers"
-$ echo "internally, as do most things on VMS. You can, however, build"
-$ echo "with IEEE floating point numbers instead if you need to."
-$ dflt = use_ieee_math
-$ rp = "Use IEEE math? [''dflt'] "
-$ GOSUB myread
-$ IF ans .eqs. "" THEN ans = "''dflt'"
-$ use_ieee_math = "''ans'"
-$ ENDIF
-$! CC Flags
-$ echo ""
-$ echo "Your compiler may want other flags. For this question you should include"
-$ echo "/INCLUDE=(whatever) and /DEFINE=(whatever), flags and any other flags"
-$ echo "or qualifiers used by the compiler."
-$ echo ""
-$ echo "To use no flags, specify the word ""none""."
-$ dflt = user_c_flags
-$ rp = "Any additional cc flags? [''dflt'] "
-$ GOSUB myread
-$ IF ans .EQS. "" THEN ans = "''dflt'"
-$ IF ans .EQS. "none" THEN ans = ""
-$ user_c_flags = "''ans'"
-$!
-$! Ask whether they want to use secure logical translation when tainting
-$ echo ""
-$ echo "As Perl starts up, it checks several logical names, such as"
-$ echo "PERL5LIB and PERL_ENV_TABLES, which allow you to modify aspects"
-$ echo "of its behavior. For additional security, you may limit this"
-$ echo "process to executive- and kernel-mode translation when tainting"
-$ echo "is enabled. In this case, logical names normally skipped when"
-$ echo "tainting is enabled (e.g. PERL5OPTS) are translated as well."
-$ echo "If you do not choose to do this, the usual order of access modes"
-$ echo "is used for logical name translation."
-$ echo ""
-$ echo "This restriction does not apply to the %ENV hash or to implicit"
-$ echo "logical name translation during parsing of file specifications;"
-$ echo "these always use the normal sequence of access modes for logical"
-$ echo "name translation."
-$ dflt = "y"
-$ rp = "Use secure logical name translation? [''dflt'] "
-$ GOSUB myread
-$ IF ans .eqs. "" THEN ans = dflt
-$ IF ans
-$ THEN d_secintgenv := Y
-$ ELSE d_secintgenv := N
-$ ENDIF
-$!
-$! Ask whether they want to default filetypes
-$ echo ""
-$ echo "When you pass the name of a program to Perl on the command line,"
-$ echo "it generally doesn't supply any defaults unless the -S command"
-$ echo "line switch is specified. In keeping with the VMS tradition of"
-$ echo "default file types, however, you can configure Perl to try default"
-$ echo "file types of nothing, .pl, and .com, in that order (e.g. typing"
-$ echo """$ perl foo"" would cause Perl to look for foo., then foo.pl, and"
-$ echo "finally foo.com)."
-$ echo ""
-$ echo "This is currently broken in some configurations. Only enable it if"
-$ echo "you know what you are doing."
-$ dflt = "n"
-$ rp = "Always use default file types? [''dflt'] "
-$ GOSUB myread
-$ IF ans .EQS. "" THEN ans = dflt
-$ IF ans
-$ THEN d_alwdeftype := Y
-$ ELSE d_alwdeftype := N
-$ ENDIF
-$! Ask if they want to use perl's memory allocator
-$ echo ""
-$ echo "Perl has a built-in memory allocator that is tuned for normal"
-$ echo "memory usage. It is oftentimes better than the standard system"
-$ echo "memory allocator. It also has the advantage of providing memory"
-$ echo "allocation statistics, if you choose to enable them."
-$ dflt = "n"
-$ IF F$TYPE(usemymalloc) .EQS. "STRING"
-$ THEN
-$ IF usemymalloc THEN dflt = "y"
-$ ENDIF
-$ rp = "Do you wish to attempt to use the malloc that comes with ''package'? [''dflt'] "
-$ GOSUB myread
-$ IF ans .eqs. "" THEN ans = dflt
-$ IF ans
-$ THEN mymalloc := Y
-$ ELSE mymalloc := N
-$ ENDIF
-$ IF mymalloc
-$ THEN
-$ IF use_debugging_perl
-$ THEN
-$ echo ""
-$ echo "Perl can keep statistics on memory usage if you choose to use"
-$ echo "them. This is useful for debugging, but does have some"
-$ echo "performance overhead."
-$ dflt = "n"
-$ rp = "Do you want the debugging memory allocator? [''dflt'] "
-$ gosub myread
-$ IF ans .eqs. "" THEN ans = "''dflt'"
-$ use_debugmalloc = f$extract(0, 1, f$edit(ans, "COLLAPSE,UPCASE"))
-$ ENDIF
-$ ! Check which memory allocator we want
-$ echo ""
-$ echo "There are currently three different memory allocators: the"
-$ echo "default (which is a pretty good general-purpose memory manager),"
-$ echo "the TWO_POT allocator (which is optimized to save memory for"
-$ echo "larger allocations), and PACK_MALLOC (which is optimized to save"
-$ echo "memory for smaller allocations). They're all good, but if your"
-$ echo "usage tends towards larger chunks use TWO_POT, otherwise use"
-$ echo "PACK_MALLOC."
-$ dflt = "DEFAULT"
-$ rp = "Memory allocator (DEFAULT, TWO_POT, PACK_MALLOC) [''dflt'] "
-$ GOSUB myread
-$ if ans.eqs."" then ans = "''dflt'"
-$ if ans.eqs."TWO_POT" then use_two_pot_malloc = "Y"
-$ if ans.eqs."PACK_MALLOC" then use_pack_malloc = "Y"
-$ ENDIF
-$!
-$! Ask for their default list of extensions to build
-$ echo ""
-$ echo "It is time to specify which modules you want to build into"
-$ echo "perl. Most of these are standard and should be chosen, though"
-$ echo "you might, for example, want to build GDBM_File instead of"
-$ echo "SDBM_File if you have the GDBM library built on your machine."
-$ echo ""
-$ echo "Which modules do you want to build into perl?"
-$! dflt = "Fcntl Errno File::Glob IO Opcode Byteloader Devel::Peek Devel::DProf Data::Dumper attrs re VMS::Stdio VMS::DCLsym B SDBM_File"
-$ dflt = "re Fcntl Errno File::Glob IO Opcode Devel::Peek Devel::DProf Data::Dumper attrs VMS::Stdio VMS::DCLsym B SDBM_File Thread Sys::Hostname"
-$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
-$ THEN
-$ dflt = dflt + " POSIX"
-$ ENDIF
-$ rp = "[''dflt'] "
-$ GOSUB myread
-$ if ans.eqs."" then ans = "''dflt'"
-$ a = ""
-$ j = 0
-$ xloop1:
-$ x = f$elem(j," ",ans)
-$ j = j + 1
-$ if x .eqs. " " then goto exloop1
-$ xloop2:
-$ k = f$locate("::",x)
-$ if k .ge. f$len(x) then goto exloop2
-$ x = f$extract(0,k,x) + "/" + f$extract(k+2,f$len(x)-2,x)
-$ goto xloop2
-$ exloop2:
-$ a = a + " " + x
-$ goto xloop1
-$ exloop1:
-$ ans = f$edit(a,"trim")
-$!
-$ a = ""
-$ j = 0
-$ xloop3:
-$ x = f$elem(j," ",dflt)
-$ j = j + 1
-$ if x .eqs. " " then goto exloop3
-$ xloop4:
-$ k = f$locate("::",x)
-$ if k .ge. f$len(x) then goto exloop4
-$ x = f$extract(0,k,x) + "/" + f$extract(k+2,f$len(x)-2,x)
-$ goto xloop4
-$ exloop4:
-$ a = a + " " + x
-$ goto xloop3
-$ exloop3:
-$ dflt = f$edit(a,"trim")
-$!
-$ extensions = "''ans'"
-$ known_extensions = "''dflt'"
-$!
-$! %Config-I-VMS, determine build/make utility here (make gmake mmk mms)
-$ echo ""
-$ echo "Checking your ""make"" utilities..."
-$! If the 'build' that you use is not here add it and it's test
-$! switch to the _END_ of these strings (and increment max_build)
-$! (e.g. builders = builders + "/FOOMAKE"
-$! probers = probers + " -fooVersionSwitch"
-$! ) & please let me know about it.
-$ builders = "IMAKE/GNUMAKE/MGMAKE/GMAKE/MAKE/MMS/MMK"
-$ probers = "-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!/IDENT!/IDENT"
-$ max_build = 7
-$!
-$ orig_dflt = "MMK"
-$ default_set = ""
-$ ok_builders = ""
-$ OPEN/WRITE/ERROR=Open_error CONFIG Makefile.
-$ WRITE CONFIG "dont_make_anything_yet:"
-$ WRITE CONFIG F$FAO("!_")
-$ CLOSE CONFIG
-$ n = 0
-$ messages = F$ENVIRONMENT("MESSAGE")
-$Build_probe:
-$ build = F$ELEMENT(n,"/",builders)
-$ probe = F$ELEMENT(n,"!",probers)
-$ echo "Testing whether you have ''build' on your system..."
-$!
-$! Noted with GNU Make version 3.60 that the $status and $severity
-$! with the 'probe' Makefile appear to be: $STATUS == "%X1000000C"
-$! $SEVERITY == "4".
-$!
-$ SET NOON
-$ ON CONTROL_Y THEN GOTO Reenable_messages_build
-$ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT
-$ 'build' 'probe'
-$ IF ($SEVERITY .EQ. 1) ! not adequate?
-$ THEN
-$ echo "OK."
-$ IF (build .EQS. orig_dflt)
-$ THEN
-$ default_set = "TRUE"
-$ dflt = build
-$ ENDIF
-$ ok_builders = ok_builders + " " + build
-$ IF (.NOT. default_set) THEN dflt = build
-$ ELSE
-$ echo "Nope."
-$ ENDIF
-$Reenable_messages_build:
-$ SET MESSAGE 'messages'
-$ SET ON
-$ n = n + 1
-$ IF (n .LT. max_build) THEN GOTO Build_probe
-$!
-$ echo ""
-$ IF (ok_builders .NES. "")
-$ THEN
-$ echo "Here is the list of builders you can apparently use:"
-$ echo "(",ok_builders," )"
-$ rp = "Which """"make"""" utility do you wish to use? [''dflt'] "
-$ GOSUB myread
-$ ans = F$EDIT(ans,"TRIM, COMPRESS")
-$ ans = F$EXTRACT(0,F$LOCATE(" ",ans),ans) !throw out "-f Makefile." here
-$ IF (ans .EQS. "")
-$ THEN build = dflt
-$ ELSE build = ans
-$ ENDIF
-$ ELSE
-$ TYPE SYS$INPUT:
-$ DECK
-
-%Config-E-VMS, ERROR:
- Well this looks pretty serious. Perl5 cannot be compiled without a "make"
- utility of some sort and after checking my "builders" list I cannot find
- the symbol or command you use on your system to compile programs.
-
-$ EOD
-$ READ SYS$COMMAND/PROMPT="Which ""MMS"" do you use? " ans
-$ ans = F$EDIT(ans,"TRIM, COMPRESS")
-$ ans = F$EXTRACT(0,F$LOCATE(" ",ans),ans) !throw out "-f Makefile." here
-$ IF (ans .EQS. "")
-$ THEN build = dflt
-$ echo "I do not know where ""make"" is, and my life depends on it."
-$ echo "Go find a make program or fix your DCL$PATH setting!"
-$ echo "ABORTING..."
-$ SET DEFAULT 'vms_default_directory_name' !be kind rewind
-$ STOP
-$ EXIT 2 !$STATUS = "%X00000002" (error)
-$ ELSE
-$ build = ans
-$ ENDIF
-$ ENDIF
-$!
-$ DELETE/NOLOG Makefile.;
-$ GOTO Beyond_open
-$Open_error:
-$ TYPE SYS$INPUT:
-$ DECK
-
- There seems to be trouble. I just tried to create a file in
-$ EOD
-$ echo4 'F$ENVIRONMENT("DEFAULT")'
-$ TYPE SYS$INPUT:
-$ DECK
- but was unsuccessful. I am stopping now. Please check that directories'
- PROTECTION bits. I will leave you in the directory where you started
- Configure.com
-$ EOD
-$ echo4 "ABORTING..."
-$ GOTO Clean_up
-$ STOP
-$ EXIT
-$!
-$Beyond_open:
-$! echo " Very well I will proceed with ""''build'"""
-$ make = F$EDIT(build,"UPCASE")
-$!
-$!: locate the preferred pager for this system
-$!pagers = "most|more|less|type/page"
-$ dflt = "type/page"
-$! assume that the presence of a most symbol indicates the presence
-$! of the pager.
-$ IF F$TYPE(most) .EQS. "STRING" THEN dflt = "most"
-$ IF F$TYPE(pager) .EQS. "STRING" THEN dflt = pager
-$ rp="What pager is used on your system? [''dflt'] "
-$ GOSUB myread
-$ IF (ans .EQS. "")
-$ THEN pager = dflt
-$ ELSE pager = ans
-$ ENDIF
-$!
-$! update [.vms]config.vms here
-$!
-$! update makefile here
-$! echo4 "Updating makefile..."
-$!
-$ IF (make .EQS. "MMS").OR.(make .EQS. "MMK")
-$ THEN
-$ makefile = "" !wrt MANIFEST dir
-$ UUmakefile = "[-]DESCRIP.MMS" !wrt CWD dir
-$ DEFmakefile = "DESCRIP.MMS" !wrt DEF dir (?)
-$ Makefile_SH = "descrip_mms.template"
-$ ELSE
-$ makefile = " -f Makefile." !wrt MANIFEST dir
-$ UUmakefile = "[-]Makefile." !wrt CWD dir
-$ DEFmakefile = "Makefile." !wrt DEF dir (?)
-$ Makefile_SH = "Makefile.in"
-$ ENDIF
-$!
-$ IF macros .NES. ""
-$ THEN
-$ tmp = F$LENGTH(macros)
-$ macros = F$EXTRACT(0,(tmp-1),macros) !miss trailing comma
-$ macros = "/macro=(" + macros + ")"
-$ ENDIF
-$! Build up the extra C flags
-$!
-$ IF use_ieee_math
-$ THEN
-$ extra_flags = "''extra_flags'" + "/float=ieee/ieee=denorm_results"
-$ ENDIF
-$ IF be_case_sensitive
-$ THEN
-$ extra_flags = "''extra_flags'" + "/Names=As_Is"
-$ ENDIF
-$ extra_flags = "''extra_flags'" + "''user_c_flags'"
-$!
-$ min_pgflquota = "100000"
-$ pgflquota = F$STRING(F$GETJPI("","PGFLQUOTA"))
-$ IF pgflquota .LES. min_pgflquota
-$ THEN
-$ echo4 "Your PGFLQUOTA of ''pgflquota' appears too small to build ''package'."
-$ READ SYS$COMMAND/PROMPT="Continue? [n] " ans
-$ IF ans
-$ THEN
-$ echo4 "Continuing..."
-$ ELSE
-$ echo4 "ABORTING..."
-$ GOTO Clean_up
-$ ENDIF
-$ ENDIF
-$!
-$ echo ""
-$ echo4 "Checking the C run-time library."
-$!
-$! Former SUBCONFIGURE.COM
-$!
-$! - build a config.sh for VMS Perl.
-$! - use built config.sh to take config_h.SH -> config.h
-$! - also take vms/descrip_mms.template -> descrip.mms (VMS Makefile)
-$! vms/Makefile.in -> Makefile. (VMS GNU Makefile?)
-$! vms/Makefile.SH -> Makefile. (VMS GNU Makefile?)
-$! - build make_ext.com extension builder procedure.
-$!
-$! Note for folks from other platforms changing things in here:
-$!
-$! Fancy changes (based on compiler capabilities or VMS version or
-$! whatever) are tricky, so go ahead and punt on those.
-$!
-$! Simple changes, though (say, always setting something to 1, or undef,
-$! or something like that) are straightforward. Adding a new constant
-$! item for the ultimately created config.sh requires at least one
-$! (possibly more) line(s) to this file.
-$!
-$! Add a line in the format:
-$!
-$! $ WC "foo='undef'"
-$!
-$! somewhere between the line tagged '##BEGIN WRITE NEW CONSTANTS HERE##'
-$! and the one tagged '##END WRITE NEW CONSTANTS HERE##' (note the order
-$! is sorted ASCII and corresponds to the output of config.sh in the
-$! Bourne shell version of Configure).
-$! Be very careful with quoting, as it can be tricky.
-$! For example if instead of a constant string like 'undef' or 'define'
-$! you wanted to add something to VMS's config.sh that looks like:
-$!
-$! blank_string=''
-$!
-$! then add a line that looks like this before the
-$! '##END WRITE NEW CONSTANTS HERE##' tagged line:
-$!
-$! $ WC "blank_string='" + "'"
-$!
-$! (+ is the string concatenator and "''var'" has the effect
-$! of "${var}" in perl or sh, but "'const'" is not interpolated).
-$!
-$! Note that unitialized variables, such as a line like:
-$!
-$! $ WC "new_var='" + new_var + "'"
-$!
-$! should be avoided unless new_var has a value assigned prior
-$! to that line (think of perl's -w warnings).
-$!
-$! %DCL-W-UNDSYM, undefined symbol - check validity and spelling
-$! \NEW_VAR\
-$!
-$!
-$ vms_ver = F$EXTRACT(1,3, osvers)
-$ IF F$LENGTH(Mcc) .EQ. 0 THEN Mcc := "cc"
-$ MCC = f$edit(mcc, "UPCASE")
-$ C_Compiler_Replace := "CC=CC=''Mcc'''ccflags'"
-$ IF ccname .EQS. "DEC"
-$ THEN
-$ Checkcc := "''Mcc'/prefix=all"
-$ ELSE
-$ IF ccname .EQS. "CXX"
-$ THEN
-$ Checkcc := cxx
-$ ELSE
-$ Checkcc := "''Mcc'"
-$ ENDIF
-$ ENDIF
-$ ccflags = ccflags + extra_flags
-$ IF be_case_sensitive
-$ THEN
-$ d_vms_be_case_sensitive = "define"
-$ ELSE
-$ d_vms_be_case_sensitive = "undef"
-$ ENDIF
-$! Some constant defaults.
-$ hwname = f$getsyi("HW_NAME")
-$ myname = myhostname
-$ IF myname .EQS. "" THEN myname = F$TRNLNM("SYS$NODE")
-$!
-$ ccdlflags=""
-$ cccdlflags=""
-$!
-$ IF use64bitint .OR. use64bitint .EQS. "define"
-$ THEN
-$ use64bitint = "define"
-$ uselargefiles = "define"
-$ uselongdouble = "define"
-$ alignbytes="16"
-$ usemorebits = "define"
-$ ELSE
-$ use64bitint = "undef"
-$ uselargefiles = "undef"
-$ uselongdouble = "undef"
-$ usemorebits = "undef"
-$ ENDIF
-$ IF use64bitall .OR. use64bitall .EQS. "define"
-$ THEN
-$ use64bitall = "define"
-$ ELSE
-$ use64bitall = "undef"
-$ ENDIF
-$!
-$ usemymalloc=mymalloc
-$!
-$ perl_cc=Mcc
-$!
-$ IF (sharedperl .AND. F$GETSYI("HW_MODEL") .GE. 1024)
-$ THEN
-$ obj_ext=".abj"
-$ so="axe"
-$ dlext="axe"
-$ exe_ext=".axe"
-$ lib_ext=".alb"
-$ ELSE
-$ obj_ext=".obj"
-$ so="exe"
-$ dlext="exe"
-$ exe_ext=".exe"
-$ lib_ext=".olb"
-$ ENDIF
-$ dlobj="dl_vms''obj_ext'"
-$!
-$ cppstdin="''perl_cc'/noobj/preprocess=sys$output sys$input"
-$ cppminus=" "
-$ cpprun="''perl_cc'/noobj/preprocess=sys$output sys$input"
-$ cpplast=" "
-$!
-$ timetype="time_t"
-$ signal_t="void"
-$ stdchar="char"
-$!
-$ IF mymalloc
-$ THEN d_mymalloc="define"
-$ ELSE d_mymalloc="undef"
-$ ENDIF
-$!
-$ usedl="define"
-$ startperl="""$ perl 'f$env(\""procedure\"")' \""'"+"'p1'\"" \""'"+"'p2'\"" \""'"+"'p3'\"" \""'"+"'p4'\"" \""'"+"'p5'\"" \""'"+"'p6'\"" \""'"+"'p7'\"" \""'"+"'p8'\""!\n"
-$ startperl=startperl + "$ exit++ + ++$status!=0 and $exit=$status=undef; while($#ARGV != -1 and $ARGV[$#ARGV] eq '"+"'){pop @ARGV;}"""
-$!
-$ IF ((Use_Threads) .AND. (vms_ver .LES. "6.2"))
-$ THEN
-$ libs="SYS$SHARE:CMA$LIB_SHR.EXE/SHARE SYS$SHARE:CMA$RTL.EXE/SHARE SYS$SHARE:CMA$OPEN_LIB_SHR.exe/SHARE SYS$SHARE:CMA$OPEN_RTL.exe/SHARE"
-$ ELSE
-$ libs=" "
-$ ENDIF
-$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
-$ THEN
-$ libc="(DECCRTL)"
-$ ELSE
-$ libc=" "
-$ ENDIF
-$!
-$! perllibs should be libs with all non-core libs (such as gdbm) removed.
-$!
-$ perllibs=libs
-$!
-$! Are we 64 bit?
-$!
-$ IF use64bitint .OR. use64bitint .EQS. "define"
-$ THEN
-$ d_PRId64 = "define"
-$ d_PRIEUldbl = "define"
-$ d_PRIFUldbl = "define"
-$ d_PRIGUldbl = "define"
-$ d_PRIXU64 = "define"
-$ d_PRIeldbl = "define"
-$ d_PRIfldbl = "define"
-$ d_PRIgldbl = "define"
-$ d_PRIu64 = "define"
-$ d_PRIo64 = "define"
-$ d_PRIx64 = "define"
-$ sPRId64 = """Ld"""
-$ sPRIEUldbl = """LE"""
-$ sPRIFUldbl = """LF"""
-$ sPRIGUldbl = """LG"""
-$ sPRIXU64 = """LX"""
-$ sPRIeldbl = """Le"""
-$ sPRIfldbl = """Lf"""
-$ sPRIgldbl = """Lg"""
-$ sPRIi64 = """Li"""
-$ sPRIo64 = """Lo"""
-$ sPRIu64 = """Lu"""
-$ sPRIx64 = """Lx"""
-$ d_quad = "define"
-$ quadtype = "long long"
-$ uquadtype = "unsigned long long"
-$ quadkind = "QUAD_IS_LONG_LONG"
-$ d_frexpl = "define"
-$ d_isnan = "define"
-$ d_isnanl = "define"
-$ d_modfl = "define"
-$ ELSE
-$ d_PRId64 = "undef"
-$ d_PRIEUldbl = "define"
-$ d_PRIFUldbl = "define"
-$ d_PRIGUldbl = "define"
-$ d_PRIXU64 = "undef"
-$ d_PRIeldbl = "define"
-$ d_PRIfldbl = "undef"
-$ d_PRIgldbl = "undef"
-$ d_PRIu64 = "undef"
-$ d_PRIo64 = "undef"
-$ d_PRIx64 = "undef"
-$ sPRId64 = ""
-$ sPRIEUldbl = """E"""
-$ sPRIFUldbl = """F"""
-$ sPRIGUldbl = """G"""
-$ sPRIXU64 = """lX"""
-$ sPRIeldbl = """e"""
-$ sPRIfldbl = """f"""
-$ sPRIgldbl = """g"""
-$ sPRIi64 = ""
-$ sPRIo64 = ""
-$ sPRIu64 = ""
-$ sPRIx64 = ""
-$ d_quad = "undef"
-$ quadtype = "long"
-$ uquadtype = "unsigned long"
-$ quadkind = "QUAD_IS_LONG"
-$ d_frexpl = "undef"
-$ d_isnan = "undef"
-$ d_isnanl = "undef"
-$ d_modfl = "undef"
-$ ENDIF
-$ d_SCNfldbl = d_PRIfldbl
-$ sSCNfldbl = sPRIfldbl ! expect consistency
-$!
-$! Now some that we build up
-$!
-$ IF Use_Threads
-$ THEN
-$ IF use_5005_threads
-$ THEN
-$ arch = "''arch'-thread"
-$ archname = "''archname'-thread"
-$ d_old_pthread_create_joinable = "undef"
-$ old_pthread_create_joinable = " "
-$ use5005threads = "define"
-$ useithreads = "undef"
-$ ELSE
-$ arch = "''arch'-ithread"
-$ archname = "''archname'-ithread"
-$ d_old_pthread_create_joinable = "undef"
-$ old_pthread_create_joinable = " "
-$ use5005threads = "undef"
-$ useithreads = "define"
-$ ENDIF
-$ ELSE
-$ d_old_pthread_create_joinable = "undef"
-$ old_pthread_create_joinable = " "
-$ use5005threads = "undef"
-$ useithreads = "undef"
-$ ENDIF
-$!
-$! Some that we need to invoke the compiler for
-$!
-$!
-$! handy construction aliases/symbols
-$!
-$ OS := "open/write CONFIG []try.c"
-$ WS := "write CONFIG"
-$ CS := "close CONFIG"
-$ DS := "delete/nolog/noconfirm []try.*;*"
-$ Needs_Opt := N
-$ good_compile = %X10B90001
-$ IF ccname .EQS. "GCC"
-$ THEN
-$ open/write OPTCHAN []try.opt
-$ write OPTCHAN "Gnu_CC:[000000]gcclib.olb/library"
-$ write OPTCHAN "Sys$Share:VAXCRTL/Share"
-$ Close OPTCHAN
-$ Needs_Opt := Y
-$ good_compile = %X10000001
-$ ENDIF
-$ IF ccname .EQS. "CXX"
-$ THEN
-$ good_compile = %X15F60001
-$ ENDIF
-$ good_link = %X10000001
-$ tmp = "" ! null string default
-$!
-$ GOTO beyond_compile_ok
-$!
-$! Check for type sizes
-$!
-$type_size_check:
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "printf(""%d\n"", sizeof(''tmp'));"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile
-$ RETURN
-$!
-$!: locate header file
-$findhdr:
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <''tmp'>"
-$ WS "int main()"
-$ WS "{"
-$ WS "printf(""define\n"");"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB link_ok
-$ RETURN
-$!
-$!: define an alternate in-header-list? function
-$inhdr:
-$!
-$ GOSUB findhdr
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ echo4 "<''tmp'> found."
-$ tmp = "define"
-$ ELSE
-$ echo4 "<''tmp'> NOT found."
-$ tmp = "undef"
-$ ENDIF
-$ RETURN
-$!
-$!: define an is-in-libc? function
-$inlibc:
-$ GOSUB link_ok
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ echo4 "''tmp'() found."
-$ tmp = "define"
-$ ELSE
-$ echo4 "''tmp'() NOT found."
-$ tmp = "undef"
-$ ENDIF
-$ RETURN
-$!
-$!: define a shorthand compile call
-$compile:
-$ GOSUB link_ok
-$just_mcr_it:
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ OPEN/WRITE CONFIG []try.out
-$ DEFINE/USER_MODE SYS$ERROR CONFIG
-$ DEFINE/USER_MODE SYS$OUTPUT CONFIG
-$ MCR []try.exe
-$ CLOSE CONFIG
-$ OPEN/READ CONFIG []try.out
-$ READ CONFIG tmp
-$ CLOSE CONFIG
-$ DELETE/NOLOG/NOCONFIRM []try.out;
-$ DELETE/NOLOG/NOCONFIRM []try.exe;
-$ ELSE
-$ tmp = "" ! null string default
-$ ENDIF
-$ RETURN
-$!
-$link_ok:
-$ GOSUB compile_ok
-$ DEFINE/USER_MODE SYS$ERROR _NLA0:
-$ DEFINE/USER_MODE SYS$OUTPUT _NLA0:
-$ SET NOON
-$ IF Needs_Opt
-$ THEN
-$ 'ld' try.obj,try.opt/opt
-$ link_status = $status
-$ ELSE
-$ 'ld' try.obj
-$ link_status = $status
-$ ENDIF
-$ SET ON
-$ IF F$SEARCH("try.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM try.obj;
-$ RETURN
-$!
-$!: define a shorthand compile call for compilations that should be ok.
-$compile_ok:
-$ DEFINE/USER_MODE SYS$ERROR _NLA0:
-$ DEFINE/USER_MODE SYS$OUTPUT _NLA0:
-$ SET NOON
-$ 'Checkcc' try.c
-$ compile_status = $status
-$ SET ON
-$ DELETE/NOLOG/NOCONFIRM try.c;
-$ RETURN
-$!
-$beyond_compile_ok:
-$!
-$! Check for __STDC__
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "#ifdef __STDC__"
-$ WS "printf(""42\n"");"
-$ WS "#else"
-$ WS "printf(""1\n"");"
-$ WS "#endif"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile
-$ cpp_stuff=tmp
-$ IF F$INTEGER(tmp) .eq. 42
-$ THEN
-$ echo4 "Your C compiler and pre-processor defines the symbol:"
-$ echo4 "__STDC__"
-$ ENDIF
-$!
-$! Check for double size
-$!
-$ echo4 "Checking to see how big your double precision numbers are..."
-$ tmp="double"
-$ GOSUB type_size_check
-$ doublesize = tmp
-$ echo "Your double is ''doublesize' bytes long."
-$!
-$! Check for long double size
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "printf(""%d\n"", sizeof(long double));"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ echo4 "Checking to see if you have long double..."
-$ GOSUB link_ok
-$ IF link_status .NE. good_link
-$ THEN
-$ longdblsize="0"
-$ d_longdbl="undef"
-$ echo "You do not have long double."
-$ ELSE
-$ echo "You have long double."
-$ echo4 "Checking to see how big your long doubles are..."
-$ GOSUB just_mcr_it
-$ longdblsize = tmp
-$ d_longdbl = "define"
-$ echo "Your long doubles are ''longdblsize' bytes long."
-$ ENDIF
-$!
-$!: check for long long
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "printf(""%d\n"", sizeof(long long));"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ echo4 "Checking to see if you have long long..."
-$ GOSUB link_ok
-$ IF link_status .NE. good_link
-$ THEN
-$ longlongsize="0"
-$ d_longlong="undef"
-$ echo "You do not have long long."
-$ ELSE
-$ echo "You have long long."
-$ echo4 "Checking to see how big your long longs are..."
-$ GOSUB just_mcr_it
-$ longlongsize = tmp
-$ d_longlong = "define"
-$ echo "Your long longs are ''longlongsize' bytes long."
-$ ENDIF
-$!
-$! Check the prototype for getgid
-$!
-$ echo "Looking for the type for group ids returned by getgid()."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <types.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "gid_t foo;"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile_ok
-$ IF compile_status .NE. good_compile
-$ THEN
-$! Okay, gid_t failed. Must be unsigned int
-$ gidtype = "unsigned int"
-$ echo4 "assuming ""''gidtype'""."
-$ ELSE
-$ gidtype = "gid_t"
-$ echo4 "gid_t found."
-$ ENDIF
-$!
-$! Check to see if we've got dev_t
-$!
-$ echo "Looking for the type for dev."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <types.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "dev_t foo;"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile_ok
-$ IF compile_status .NE. good_compile
-$ THEN
-$! Okay, dev_t failed. Must be unsigned int
-$ devtype = "unsigned int"
-$ echo4 "assuming ""''devtype'""."
-$ ELSE
-$ devtype = "dev_t"
-$ echo4 "dev_t found."
-$ ENDIF
-$!
-$! Check to see if we've got unistd.h (which we ought to, but you never know)
-$!
-$ i_netdb = "undef"
-$ tmp = "unistd.h"
-$ GOSUB inhdr
-$ i_unistd = tmp
-$!
-$!: see if this is a libutil.h system
-$!
-$ tmp = "libutil.h"
-$ GOSUB inhdr
-$ i_libutil = tmp
-$!
-$! Check to see if we've got shadow.h (probably not, but...)
-$!
-$ tmp = "shadow.h"
-$ GOSUB inhdr
-$ i_shadow = tmp
-$!
-$! Check to see if we've got socks.h (probably not, but...)
-$!
-$ tmp = "socks.h"
-$ GOSUB inhdr
-$ i_socks = tmp
-$!
-$! Check the prototype for select
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <types.h>"
-$ IF i_unistd .EQS. "define" THEN WS "#include <unistd.h>"
-$ IF Has_Socketshr
-$ THEN
-$ WS "#include <socketshr.h>"
-$ ELSE
-$ WS "#include <time.h>"
-$ WS "#include <socket.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "fd_set *foo;"
-$ WS "int bar;"
-$ WS "foo = NULL;"
-$ WS "bar = select(2, foo, foo, foo, NULL);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile_ok
-$ IF compile_status .NE. good_compile
-$ THEN
-$! Okay, select failed. Must be an int *
-$ selecttype = "int *"
-$ echo4 "select() NOT found."
-$ ELSE
-$ selecttype="fd_set *"
-$ echo4 "select() found."
-$ ENDIF
-$ ELSE
-$ ! No sockets, so stick in an int * : no select, so pick a harmless default
-$ selecttype = "int *"
-$ ENDIF
-$!
-$! Check to see if fd_set exists
-$!
-$ echo "Checking to see how well your C compiler handles fd_set and friends ..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <types.h>"
-$ IF Has_Socketshr
-$ THEN
-$ WS "#include <socketshr.h>"
-$ ENDIF
-$ IF Has_Dec_C_Sockets
-$ THEN
-$ WS "#include <time.h>"
-$ WS "#include <socket.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "fd_set *foo;"
-$ WS "int bar;"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile_ok
-$ IF compile_status .ne. good_compile
-$ THEN
-$! Okay, fd_set failed. Must not exist
-$ d_fd_set = "undef"
-$ echo4 "Hmm, your compiler has some difficulty with fd_set."
-$ ELSE
-$ d_fd_set="define"
-$ echo4 "Well, your system knows about the normal fd_set typedef..."
-$ ENDIF
-$!
-$! Check for inttypes.h
-$!
-$ tmp = "inttypes.h"
-$ GOSUB inhdr
-$ i_inttypes = tmp
-$!
-$! Check to see if off64_t exists
-$!
-$ echo4 "Checking to see if you have off64_t..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <types.h>"
-$ WS "#''i_inttypes' IIH"
-$ WS "#ifdef IIH"
-$ WS "#include <inttypes.h>"
-$ WS "#endif"
-$ WS "int main()"
-$ WS "{"
-$ WS "off64_t bar;"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile_ok
-$ IF compile_status .EQ. good_compile
-$ THEN
-$ d_off64_t="define"
-$ echo "You have off64_t."
-$ ELSE
-$ d_off64_t = "undef"
-$ echo "You do not have off64_t."
-$ ENDIF
-$!
-$! Check to see if fpos64_t exists
-$!
-$ echo4 "Checking to see if you have fpos64_t..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <types.h>"
-$ WS "#''i_inttypes' IIH"
-$ WS "#ifdef IIH"
-$ WS "#include <inttypes.h>"
-$ WS "#endif"
-$ WS "int main()"
-$ WS "{"
-$ WS "fpos64_t bar;"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile_ok
-$ IF compile_status .EQ. good_compile
-$ THEN
-$ d_fpos64_t="define"
-$ echo "You have fpos64_t."
-$ ELSE
-$ d_fpos64_t = "undef"
-$ echo "You do not have fpos64_t."
-$ ENDIF
-$!
-$! Check to see if int64_t exists
-$!
-$ echo4 "Checking to see if you have int64_t..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <types.h>"
-$ WS "#''i_inttypes' IIH"
-$ WS "#ifdef IIH"
-$ WS "#include <inttypes.h>"
-$ WS "#endif"
-$ WS "int main()"
-$ WS "{"
-$ WS "int64_t bar;"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile_ok
-$ IF compile_status .EQ. good_compile
-$ THEN
-$ d_int64_t="define"
-$ echo "You have int64_t."
-$ ELSE
-$ d_int64_t = "undef"
-$ echo "You do not have int64_t."
-$ ENDIF
-$!
-$!: see if this is a netdb.h system
-$ IF Has_Dec_C_Sockets
-$ THEN
-$ tmp = "netdb.h"
-$ GOSUB inhdr
-$ i_netdb = tmp
-$ ENDIF
-$!
-$! Check for h_errno
-$!
-$ echo4 "Checking to see if you have h_errno..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF i_unistd .EQS. "define" THEN WS "#include <unistd.h>"
-$ IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "h_errno = 3;"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB link_ok
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ d_herrno="define"
-$ echo "You have h_errno."
-$ ELSE
-$ d_herrno="undef"
-$ echo "You do not have h_errno."
-$ ENDIF
-$!
-$! Check to see if gethostname exists
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <types.h>"
-$ IF Has_Socketshr
-$ THEN
-$ WS "#include <socketshr.h>"
-$ ELSE
-$ WS "#include <time.h>"
-$ WS "#include <socket.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "char name[100];"
-$ WS "int bar, baz;"
-$ WS "bar = 100;"
-$ WS "baz = gethostname(name, bar);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB link_ok
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ d_gethname="define"
-$ echo4 "gethostname() found."
-$ ELSE
-$ d_gethname="undef"
-$ ENDIF
-$ ELSE
-$ ! No sockets, so no gethname
-$ d_gethname = "undef"
-$ ENDIF
-$!
-$! Check for sys/file.h
-$!
-$ tmp = "sys/file.h"
-$ GOSUB inhdr
-$ i_sysfile = tmp
-$!
-$! Check for sys/utsname.h
-$!
-$ tmp = "sys/utsname.h"
-$ GOSUB inhdr
-$ i_sysutsname = tmp
-$!
-$! Check for syslog.h
-$!
-$ tmp = "syslog.h"
-$ GOSUB inhdr
-$ i_syslog = tmp
-$!
-$! Check for poll.h
-$!
-$ tmp = "poll.h"
-$ GOSUB inhdr
-$ i_poll = tmp
-$!
-$! Check for sys/uio.h
-$!
-$ tmp = "sys/uio.h"
-$ GOSUB inhdr
-$ i_sysuio = tmp
-$!
-$! Check for sys/mode.h
-$!
-$ tmp = "sys/mode.h"
-$ GOSUB inhdr
-$ i_sysmode = tmp
-$!
-$! Check for sys/access.h
-$!
-$ tmp = "sys/access.h"
-$ GOSUB inhdr
-$ i_sysaccess = tmp
-$!
-$! Check for sys/security.h
-$!
-$ tmp = "sys/security.h"
-$ GOSUB inhdr
-$ i_syssecrt = tmp
-$!
-$! Check for fcntl.h
-$!
-$ tmp = "fcntl.h"
-$ GOSUB inhdr
-$ i_fcntl = tmp
-$!
-$! Check for fcntl
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <fcntl.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "fcntl(1,2,3);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "fcntl"
-$ GOSUB inlibc
-$ d_fcntl = tmp
-$!
-$! Check for fcntl locking capability
-$!
-$ echo4 "Checking if fcntl-based file locking works... "
-$ tmp = "undef"
-$ IF d_fcntl .EQS. "define"
-$ THEN
-$ OS
-$ WS "#include <stdio.h>"
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <fcntl.h>"
-$ WS "#include <unistd.h>"
-$ WS "int main() {"
-$ WS "#if defined(F_SETLK) && defined(F_SETLKW)"
-$ WS " struct flock flock;"
-$ WS " int retval, fd;"
-$ WS " fd = open(""try.c"", O_RDONLY);"
-$ WS " flock.l_type = F_RDLCK;"
-$ WS " flock.l_whence = SEEK_SET;"
-$ WS " flock.l_start = flock.l_len = 0;"
-$ WS " retval = fcntl(fd, F_SETLK, &flock);"
-$ WS " close(fd);"
-$ WS " (retval < 0 ? printf(""undef\n"") : printf(""define\n""));"
-$ WS "#else"
-$ WS " printf(""undef\n"");"
-$ WS "#endif"
-$ WS "}"
-$ CS
-$ GOSUB link_ok
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ GOSUB just_mcr_it
-$ IF tmp .EQS. "define"
-$ THEN
-$ echo4 "Yes, it seems to work."
-$ ELSE
-$ echo4 "Nope, it didn't work."
-$ ENDIF
-$ ELSE
-$ echo4 "I'm unable to compile the test program, so I'll assume not."
-$ tmp = "undef"
-$ ENDIF
-$ ELSE
-$ echo4 "Nope, since you don't even have fcntl()."
-$ ENDIF
-$ d_fcntl_can_lock = tmp
-$!
-$! Check for memchr
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "char * place;"
-$ WS "place = memchr(""foo"", 47, 3)"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "memchr"
-$ GOSUB inlibc
-$ d_memchr = tmp
-$!
-$! Check for strtoull
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "unsigned __int64 result;"
-$ WS "result = strtoull(""123123"", NULL, 10);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "strtoull"
-$ GOSUB inlibc
-$ d_strtoull = tmp
-$!
-$! Check for strtouq
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "unsigned __int64 result;"
-$ WS "result = strtouq(""123123"", NULL, 10);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "strtouq"
-$ GOSUB inlibc
-$ d_strtouq = tmp
-$!
-$! Check for strtoll
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "__int64 result;"
-$ WS "result = strtoll(""123123"", NULL, 10);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "strtoll"
-$ GOSUB inlibc
-$ d_strtoll = tmp
-$!
-$! Check for strtold
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "long double result;"
-$ WS "result = strtold(""123123"", NULL, 10);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "strtold"
-$ GOSUB inlibc
-$ d_strtold = tmp
-$!
-$! Check for atoll
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS " __int64 result;"
-$ WS "result = atoll(""123123"");"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "atoll"
-$ GOSUB inlibc
-$ d_atoll = tmp
-$!
-$! Check for atolf
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <string.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "long double"
-$ WS "result = atolf(""123123"");"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "atolf"
-$ GOSUB inlibc
-$ d_atolf = tmp
-$!
-$! Check for access
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "access(""foo"", F_OK);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "acess"
-$ GOSUB inlibc
-$ d_access = tmp
-$!
-$! Check for bzero
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <strings.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "char foo[10];"
-$ WS "bzero(foo, 10);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "bzero"
-$ GOSUB inlibc
-$ d_bzero = tmp
-$!
-$! Check for bcopy
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <strings.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "char foo[10], bar[10];"
-$ WS "bcopy(""foo"", bar, 3);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "bcopy"
-$ GOSUB inlibc
-$ d_bcopy = tmp
-$!
-$! Check for mkstemp
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "mkstemp(""foo"");"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "mkstemp"
-$ GOSUB inlibc
-$ d_mkstemp = tmp
-$!
-$! Check for mkstemps
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "mkstemps(""foo"", 1);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "mkstemps"
-$ GOSUB inlibc
-$ d_mkstemps = tmp
-$!
-$! Check for iconv
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "#include <iconv.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS " iconv_t cd = (iconv_t)0;"
-$ WS " char *inbuf, *outbuf;"
-$ WS " size_t inleft, outleft;"
-$ WS " iconv(cd, &inbuf, &inleft, &outbuf, &outleft);"
-$ WS " exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB link_ok
-$ IF compile_status .ne. good_compile
-$ THEN
-$ d_iconv="undef"
-$ i_iconv="undef"
-$ ELSE
-$ IF link_status .ne. good_link
-$ THEN
-$ d_iconv="undef"
-$ i_iconv="undef"
-$ ELSE
-$ d_iconv="define"
-$ i_iconv="define"
-$ ENDIF
-$ ENDIF
-$ IF i_iconv .eqs. "define"
-$ THEN echo4 "<iconv.h> found."
-$ ELSE echo4 "<iconv.h> NOT found."
-$ ENDIF
-$!
-$! Check for mkdtemp
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "mkdtemp(""foo"");"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "mkdtemp"
-$ GOSUB inlibc
-$ d_mkdtemp = tmp
-$!
-$! Check for setvbuf
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "FILE *foo;"
-$ WS "char Buffer[99];"
-$ WS "foo = fopen(""foo"", ""r"");"
-$ WS "setvbuf(foo, Buffer, 0, 0);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "setvbuf"
-$ GOSUB inlibc
-$ d_setvbuf = tmp
-$!
-$! Check for setenv
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "setenv(""FOO"", ""BAR"", 0);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "setenv"
-$ GOSUB inlibc
-$ d_setenv = tmp
-$!
-$! Check for setproctitle
-$!
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "setproctitle(""%s"", ""FOO"");"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "setproctitle"
-$ GOSUB inlibc
-$ d_setproctitle = tmp
-$!
-$! Check for <netinet/in.h>
-$!
-$ IF Has_Dec_C_Sockets .or. Has_Socketshr
-$ THEN
-$ tmp = "netinet/in.h"
-$ GOSUB inhdr
-$ i_niin = tmp
-$ ELSE
-$ i_niin="undef"
-$ ENDIF
-$!
-$! Check for <netinet/tcp.h>
-$!
-$ IF Has_Dec_C_Sockets .or. Has_Socketshr
-$ THEN
-$ tmp = "netinet/tcp.h"
-$ GOSUB inhdr
-$ i_netinettcp = tmp
-$ ELSE
-$ i_netinettcp="undef"
-$ ENDIF
-$!
-$! Check for endhostent
-$!
-$ IF Has_Dec_C_Sockets .or. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "endhostent();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "endhostent"
-$ GOSUB inlibc
-$ d_endhent = tmp
-$ ELSE
-$ d_endhent="undef"
-$ ENDIF
-$!
-$! Check for endnetent
-$!
-$ IF Has_Dec_C_Sockets .or. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "endnetent();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "endnetent"
-$ GOSUB inlibc
-$ d_endnent = tmp
-$ ELSE
-$ d_endnent="undef"
-$ ENDIF
-$!
-$! Check for endprotoent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "endprotoent();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "endprotoent"
-$ GOSUB inlibc
-$ d_endpent = tmp
-$ ELSE
-$ d_endpent="undef"
-$ ENDIF
-$!
-$! Check for endservent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "endservent();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "endservent"
-$ GOSUB inlibc
-$ d_endsent = tmp
-$ ELSE
-$ d_endsent="undef"
-$ ENDIF
-$!
-$! Check for sethostent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "sethostent(1);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "sethostent"
-$ GOSUB inlibc
-$ d_sethent = tmp
-$ ELSE
-$ d_sethent="undef"
-$ ENDIF
-$!
-$! Check for setnetent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "setnetent(1);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "setnetent"
-$ GOSUB inlibc
-$ d_setnent = tmp
-$ ELSE
-$ d_setnent="undef"
-$ ENDIF
-$!
-$! Check for setprotoent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "setprotoent(1);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "setprotoent"
-$ GOSUB inlibc
-$ d_setpent = tmp
-$ ELSE
-$ d_setpent="undef"
-$ ENDIF
-$!
-$! Check for setservent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "setservent(1);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "setservent"
-$ GOSUB inlibc
-$ d_setsent = tmp
-$ ELSE
-$ d_setsent="undef"
-$ ENDIF
-$!
-$! Check for gethostent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "gethostent();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "gethostent"
-$ GOSUB inlibc
-$ d_gethent = tmp
-$ ELSE
-$ d_gethent="undef"
-$ ENDIF
-$!
-$! Check for getnetent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "getnetent();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "getnetent"
-$ GOSUB inlibc
-$ d_getnent = tmp
-$ ELSE
-$ d_getnent="undef"
-$ ENDIF
-$!
-$! Check for getprotoent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "getprotoent();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "getprotoent"
-$ GOSUB inlibc
-$ d_getpent = tmp
-$ ELSE
-$ d_getpent="undef"
-$ ENDIF
-$!
-$! Check for getservent
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "getservent();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "getservent"
-$ GOSUB inlibc
-$ d_getsent = tmp
-$ ELSE
-$ d_getsent="undef"
-$ ENDIF
-$!
-$! Check for socklen_t
-$!
-$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
-$ THEN
-$ echo4 "Checking to see if you have socklen_t..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ IF Has_Socketshr
-$ THEN WS "#include <socketshr.h>"
-$ ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>"
-$ ENDIF
-$ WS "int main()"
-$ WS "{"
-$ WS "socklen_t x = 16;"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB link_ok
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ d_socklen_t="define"
-$ echo "You have socklen_t."
-$ ELSE
-$ d_socklen_t="undef"
-$ echo "You do not have socklen_t."
-$ ENDIF
-$ ELSE
-$ d_socklen_t="undef"
-$ ENDIF
-$!
-$! Check for pthread_yield
-$!
-$ IF use_threads
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <pthread.h>"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "pthread_yield();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "pthread_yield"
-$ GOSUB inlibc
-$ d_pthread_yield = tmp
-$ ELSE
-$ d_pthread_yield="undef"
-$ ENDIF
-$!
-$! Check for sched_yield
-$!
-$ IF use_threads
-$ THEN
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <pthread.h>"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "sched_yield();"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "sched_yield"
-$ GOSUB inlibc
-$ d_sched_yield = tmp
-$ IF d_sched_yield .EQS. "define"
-$ THEN sched_yield = "sched_yield"
-$ ELSE sched_yield = " "
-$ ENDIF
-$ ELSE
-$ d_sched_yield="undef"
-$ sched_yield = " "
-$ ENDIF
-$!
-$! Check for generic pointer size
-$!
-$ echo4 "Checking to see how big your pointers are..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "int foo;"
-$ WS "foo = sizeof(char *);"
-$ WS "printf(""%d\n"", foo);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ tmp = "char *"
-$ GOSUB type_size_check
-$ ptrsize = tmp
-$ echo "Your pointers are ''ptrsize' bytes long."
-$!
-$! Check for size_t size
-$!
-$ tmp = "size_t"
-$ zzz = tmp
-$ echo4 "Checking the size of ''zzz'..."
-$ GOSUB type_size_check
-$ sizesize = tmp
-$ echo "Your ''zzz' size is ''sizesize' bytes."
-$!
-$! Check rand48 and its ilk
-$!
-$ echo4 "Looking for a random number function..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "srand48(12L);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB link_ok
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ drand01 = "drand48()"
-$ randseedtype = "long int"
-$ seedfunc = "srand48"
-$ echo4 "Good, found drand48()."
-$ d_drand48proto = "define"
-$ ELSE
-$ d_drand48proto = "undef"
-$ drand01="random()"
-$ randseedtype = "unsigned"
-$ seedfunc = "srandom"
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main()"
-$ WS "{"
-$ WS "srandom(12);"
-$ WS "exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB link_ok
-$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
-$ THEN
-$ echo4 "OK, found random()."
-$ ELSE
-$ drand01="(((float)rand())/((float)RAND_MAX))"
-$ randseedtype = "unsigned"
-$ seedfunc = "srand"
-$ echo4 "Yick, looks like I have to use rand()."
-$ ENDIF
-$ ENDIF
-$! Done with compiler checks. Clean up.
-$ IF F$SEARCH("try.c") .NES."" THEN DELETE/NOLOG/NOCONFIRM try.c;*
-$ IF F$SEARCH("try.obj").NES."" THEN DELETE/NOLOG/NOCONFIRM try.obj;*
-$ IF F$SEARCH("try.exe").NES."" THEN DELETE/NOLOG/NOCONFIRM try.exe;*
-$ IF F$SEARCH("try.opt").NES."" THEN DELETE/NOLOG/NOCONFIRM try.opt;*
-$ IF F$SEARCH("try.out").NES."" THEN DELETE/NOLOG/NOCONFIRM try.out;*
-$ IF ccname .EQS. "CXX"
-$ THEN
-$ CALL Cxx_demangler_cleanup
-$ ENDIF
-$!
-$! Some that are compiler or VMS version sensitive
-$!
-$! Gnu C stuff
-$ IF ccname .EQS. "GCC"
-$ THEN
-$ d_attribut="define"
-$ vms_cc_type="gcc"
-$ ELSE
-$ vms_cc_type="cc"
-$ d_attribut="undef"
-$ ENDIF
-$!
-$! Dec C >= 5.2 and VMS ver >= 7.0
-$ IF (ccname .EQS. "DEC") .AND. -
- (F$INTEGER(Dec_C_Version).GE.50200000) .AND. (vms_ver .GES. "7.0")
-$ THEN
-$ d_bcmp="define"
-$ d_gettimeod="define"
-$ d_uname="define"
-$ d_sigaction="define"
-$ d_truncate="define"
-$ d_wait4="define"
-$ d_index="define"
-$ pidtype="pid_t"
-$ sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2 SPARE18 SPARE19 CHLD CONT STOP TSTP TTIN TTOU DEBUG SPARE27 SPARE28 SPARE29 SPARE30 SPARE31 SPARE32 RTMIN RTMAX"",0"
-$ psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
-$ psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",""SPARE18"",""SPARE19"",""CHLD"",""CONT"",""STOP"",""TSTP"","
-$ psnwc3="""TTIN"",""TTOU"",""DEBUG"",""SPARE27"",""SPARE28"",""SPARE29"",""SPARE30"",""SPARE31"",""SPARE32"",""RTMIN"",""RTMAX"",0"
-$ sig_name_init = psnwc1 + psnwc2 + psnwc3
-$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 64"",0"
-$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,64,0"
-$! perl_sig_num_with_commas=sig_num_init
-$ uidtype="uid_t"
-$ d_pathconf="define"
-$ d_fpathconf="define"
-$ d_sysconf="define"
-$ d_sigsetjmp="define"
-$ ELSE
-$ pidtype="unsigned int"
-$ d_gettimeod="undef"
-$ d_bcmp="undef"
-$ d_uname="undef"
-$ d_sigaction="undef"
-$ d_truncate="undef"
-$ d_wait4="undef"
-$ d_index="undef"
-$ sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2"",0"
-$ psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
-$ psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",0"
-$ sig_name_init = psnwc1 + psnwc2
-$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17"",0"
-$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
-$! perl_sig_num_with_commas=sig_num_init
-$ uidtype="unsigned int"
-$ d_pathconf="undef"
-$ d_fpathconf="undef"
-$ d_sysconf="undef"
-$ d_sigsetjmp="undef"
-$ ENDIF
-$!
-$ IF d_gethname .EQS. "undef" .AND. d_uname .EQS. "undef"
-$ THEN
-$ d_phostname="define"
-$ ELSE
-$ d_phostname="undef"
-$ ENDIF
-$!
-$! Dec C alone
-$ IF ccname .EQS. "DEC"
-$ THEN
-$ d_mbstowcs="define"
-$ d_mbtowc="define"
-$ d_stdiobase="define"
-$ d_stdio_cnt_lval="define"
-$ d_stdio_ptr_lval="define"
-$ d_stdstdio="define"
-$ d_wcstombs="define"
-$ d_mblen="define"
-$ d_mktime="define"
-$ d_strcoll="define"
-$ d_strxfrm="define"
-$ d_wctomb="define"
-$ i_locale="define"
-$ d_locconv="define"
-$ d_setlocale="define"
-$ vms_cc_type="decc"
-$ ELSE
-$ d_mbstowcs="undef"
-$ d_mbtowc="undef"
-$ d_stdiobase="undef"
-$ d_stdio_cnt_lval="undef"
-$ d_stdio_ptr_lval="undef"
-$ d_stdstdio="undef"
-$ d_wcstombs="undef"
-$ d_mblen="undef"
-$ d_mktime="undef"
-$ d_strcoll="undef"
-$ d_strxfrm="undef"
-$ d_wctomb="undef"
-$ i_locale="undef"
-$ d_locconv="undef"
-$ d_setlocale="undef"
-$ ENDIF
-$ d_stdio_ptr_lval_sets_cnt="undef"
-$ d_stdio_ptr_lval_nochange_cnt="undef"
-$!
-$! Sockets?
-$ if Has_Socketshr .OR. Has_Dec_C_Sockets
-$ THEN
-$ d_vms_do_sockets="define"
-$ d_htonl="define"
-$ d_socket="define"
-$ d_select="define"
-$ netdb_hlen_type="int"
-$ netdb_host_type="char *"
-$ netdb_name_type="char *"
-$ netdb_net_type="long"
-$ d_gethbyaddr="define"
-$ d_gethbyname="define"
-$ d_getnbyaddr="define"
-$ d_getnbyname="define"
-$ d_getpbynumber="define"
-$ d_getpbyname="define"
-$ d_getsbyport="define"
-$ d_getsbyname="define"
-$ d_gethostprotos="define"
-$ d_getnetprotos="define"
-$ d_getprotoprotos="define"
-$ d_getservprotos="define"
-$ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX"
-$ THEN
-$ socksizetype="unsigned int"
-$ ELSE
-$ socksizetype="int *"
-$ ENDIF
-$ ELSE
-$ d_vms_do_sockets="undef"
-$ d_htonl="undef"
-$ d_socket="undef"
-$ d_select="undef"
-$ netdb_hlen_type="int"
-$ netdb_host_type="char *"
-$ netdb_name_type="char *"
-$ netdb_net_type="long"
-$ d_gethbyaddr="undef"
-$ d_gethbyname="undef"
-$ d_getnbyaddr="undef"
-$ d_getnbyname="undef"
-$ d_getpbynumber="undef"
-$ d_getpbyname="undef"
-$ d_getsbyport="undef"
-$ d_getsbyname="undef"
-$ d_gethostprotos="undef"
-$ d_getnetprotos="undef"
-$ d_getprotoprotos="undef"
-$ d_getservprotos="undef"
-$ socksizetype="undef"
-$ ENDIF
-$! Threads
-$ IF use_threads
-$ THEN
-$ usethreads="define"
-$ d_pthreads_created_joinable="define"
-$ if (vms_ver .GES. "7.0")
-$ THEN
-$ d_oldpthreads="undef"
-$ ELSE
-$ d_oldpthreads="define"
-$ ENDIF
-$ ELSE
-$ d_oldpthreads="undef"
-$ usethreads="undef"
-$ d_pthreads_created_joinable="undef"
-$ ENDIF
-$!
-$! new (5.005_62++) typedefs for primitives
-$!
-$ echo "Choosing the C types to be used for Perl's internal types..."
-$ ivtype="long"
-$ uvtype="unsigned long"
-$ i8type="char"
-$ u8type="unsigned char"
-$ i16type="short"
-$ u16type="unsigned short"
-$ i32type="int"
-$ u32type="unsigned int"
-$ i64type="long long"
-$ u64type="unsigned long long"
-$ nvtype="double"
-$!
-$ IF use64bitint .OR. use64bitint .EQS. "define"
-$ THEN
-$ ivtype = "''i64type'"
-$ uvtype = "''u64type'"
-$ nvtype="long double"
-$ ELSE
-$ i64size="undef"
-$ u64size="undef"
-$ ENDIF
-$!
-$ tmp = "''ivtype'"
-$ GOSUB type_size_check
-$ ivsize = tmp
-$ IF use64bitint .OR. use64bitint .EQS. "define" THEN i64size = tmp
-$ IF ivtype .eqs. "long"
-$ THEN longsize = tmp
-$ ELSE
-$ tmp = "long"
-$ GOSUB type_size_check
-$ longsize = tmp
-$ ENDIF
-$!
-$ tmp = "''uvtype'"
-$ GOSUB type_size_check
-$ uvsize = tmp
-$ IF use64bitint .OR. use64bitint .EQS. "define" THEN u64size = tmp
-$!
-$ tmp = "''i8type'"
-$ GOSUB type_size_check
-$ i8size = tmp
-$!
-$ tmp = "''u8type'"
-$ GOSUB type_size_check
-$ u8size = tmp
-$!
-$ tmp = "''i16type'"
-$ GOSUB type_size_check
-$ i16size = tmp
-$ IF i16type .eqs. "short"
-$ THEN shortsize = tmp
-$ ELSE
-$ tmp = "short"
-$ gosub type_size_check
-$ shortsize = tmp
-$ ENDIF
-$!
-$ tmp = "''u16type'"
-$ GOSUB type_size_check
-$ u16size = tmp
-$!
-$ tmp = "''i32type'"
-$ GOSUB type_size_check
-$ i32size = tmp
-$ IF i32type .eqs. "int"
-$ THEN intsize = tmp
-$ ELSE
-$ tmp = "int"
-$ gosub type_size_check
-$ intsize = tmp
-$ ENDIF
-$!
-$ tmp = "''u32type'"
-$ gosub type_size_check
-$ u32size = tmp
-$!
-$ tmp = "''nvtype'"
-$ GOSUB type_size_check
-$ nvsize = tmp
-$!
-$ echo "(IV will be ""''ivtype'"", ''ivsize' bytes)"
-$ echo "(UV will be ""''uvtype'"", ''uvsize' bytes)"
-$ echo "(NV will be ""''nvtype'"", ''nvsize' bytes)"
-$!
-$ echo4 "Checking whether your NVs can preserve your UVs..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main() {"
-$ WS " ''uvtype' k = (''uvtype')~0, l;"
-$ WS " ''nvtype' d;"
-$ WS " l = k;"
-$ WS " d = (''nvtype')l;"
-$ WS " l = (''uvtype')d;"
-$ WS " if (l == k)"
-$ WS " printf(""preserve\n"");"
-$ WS " exit(0);"
-$ WS "}"
-$ CS
-$ GOSUB compile
-$ IF tmp .EQS. "preserve"
-$ THEN
-$ d_nv_preserves_uv = "define"
-$ echo "Yes, they can."
-$ d_nv_preserves_uv_bits = F$STRING(F$INTEGER(uvsize) * 8)
-$ ELSE
-$ d_nv_preserves_uv = "undef"
-$ echo "No, they can't."
-$ echo4 "Checking how many bits of your UVs your NVs can preserve..."
-$ OS
-$ WS "#if defined(__DECC) || defined(__DECCXX)"
-$ WS "#include <stdlib.h>"
-$ WS "#endif"
-$ WS "#include <stdio.h>"
-$ WS "int main() {"
-$ WS " ''uvtype' u = 0;"
-$ WS " int n = 8 * ''uvsize';"
-$ WS " int i;"
-$ WS " for (i = 0; i < n; i++) {"
-$ WS " u = u << 1 | (''uvtype')1;"
-$ WS " if ((''uvtype')(''nvtype')u != u)"
-$ WS " break;"
-$ WS " }"
-$ WS " printf(""%d\n"", i);"
-$ WS " exit(0);"
-$ WS "}"
-$ GOSUB compile
-$ d_nv_preserves_uv_bits = tmp
-$ ENDIF
-$ DELETE/SYMBOL tmp
-$!
-$ ivdformat="""ld"""
-$ uvuformat="""lu"""
-$ uvoformat="""lo"""
-$ uvxformat="""lx"""
-$ uvXUformat="""lX"""
-$! uselongdouble?
-$ nveformat="""e"""
-$ nvfformat="""f"""
-$ nvgformat="""g"""
-$!
-$! Finally the composite ones. All config
-$!
-$ myuname="''osname' ''myname' ''osvers' ''F$EDIT(hwname, "TRIM")'"
-$!
-$ IF ccname .EQS. "DEC"
-$ THEN
-$ ccflags="/Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=''obj_ext'/NoList''ccflags'"
-$ ENDIF
-$ i_dirent = "undef"
-$ IF ccname .EQS. "CXX"
-$ THEN
-$ i_dirent = "define"
-$ ccflags="/Include=[]/Standard=ANSI/Prefix=All/Obj=''obj_ext'/NoList''ccflags'"
-$ ENDIF
-$ IF use_vmsdebug_perl
-$ THEN
-$ optimize="/Debug/NoOpt"
-$ ldflags="/Debug/Trace/Map"
-$ dbgprefix = "DBG"
-$ ELSE
-$ optimize= ""
-$ ldflags="/NoTrace/NoMap"
-$ dbgprefix = ""
-$ ENDIF
-$!
-$! Okay, we've got everything configured. Now go write out a config.sh.
-$ basename_config_sh = F$PARSE(config_sh,,,"NAME",)+F$PARSE(config_sh,,,"TYPE",)
-$ echo4 "Creating ''basename_config_sh'..."
-$ open/write CONFIG 'config_sh'
-$ WC := write CONFIG
-$!
-$! ##BEGIN WRITE NEW CONSTANTS HERE##
-$!
-$ WC "#!/bin/sh"
-$ WC "#"
-$ WC "# This file was produced by Configure.COM on a ''osname' system."
-$ WC "#"
-$ WC "# Package name : ''package'"
-$ WC "# Source directory : ''src'"
-$ WC "# Configuration time: " + cf_time
-$ WC "# Configuration by : " + cf_by
-$ WC "# Target system : " + myuname
-$ WC ""
-$ WC "CONFIG='true'"
-$ WC "Makefile_SH='" + Makefile_SH + "'"
-$ WC "Mcc='" + Mcc + "'"
-$ WC "PERL_REVISION='" + revision + "'"
-$ WC "PERL_VERSION='" + patchlevel + "'"
-$ WC "PERL_SUBVERSION='" + subversion + "'"
-$ WC "PERL_API_VERSION='" + api_version + "'"
-$ WC "PERL_API_SUBVERSION='" + api_subversion + "'"
-$ WC "alignbytes='" + alignbytes + "'"
-$ WC "aphostname='write sys$output f$edit(f$getsyi(\""SCSNODE\""),\""TRIM,LOWERCASE\"")'"
-$ WC "ar='" + "'"
-$ WC "archlib='" + archlib + "'"
-$ WC "archlibexp='" + archlibexp + "'"
-$ WC "archname='" + archname + "'"
-$ WC "baserev='" + baserev + "'"
-$ WC "bin='" + bin + "'"
-$ WC "binexp='" + binexp + "'"
-$ WC "builddir='" + builddir + "'"
-$ WC "byteorder='1234'"
-$ WC "castflags='0'"
-$ WC "cc='" + perl_cc + "'"
-$ WC "cccdlflags='" + cccdlflags + "'"
-$ WC "ccdlflags='" + ccdlflags + "'"
-$ WC "ccflags='" + ccflags + "'"
-$ WC "ccname='" + ccname + "'"
-$ WC "ccversion='" + ccversion + "'"
-$ WC "cf_by='" + cf_by + "'"
-$ WC "cf_email='" + cf_email + "'"
-$ WC "cf_time='" + cf_time + "'"
-$ WC "config_args='" + config_args + "'"
-$ WC "config_sh='" + config_sh + "'"
-$ WC "cpp_stuff='" + cpp_stuff + "'"
-$ WC "cpplast='" + cpplast + "'"
-$ WC "cppminus='" + cppminus + "'"
-$ WC "cpprun='" + cpprun + "'"
-$ WC "cppstdin='" + cppstdin + "'"
-$ WC "crosscompile='undef'"
-$ WC "d__fwalk='undef'"
-$ WC "d_Gconvert='my_gconvert(x,n,t,b)'"
-$ WC "d_PRId64='" + d_PRId64 + "'"
-$ WC "d_PRIEldbl='" + d_PRIEUldbl + "'"
-$ WC "d_PRIFldbl='" + d_PRIFUldbl + "'"
-$ WC "d_PRIGldbl='" + d_PRIGUldbl + "'"
-$ WC "d_PRIX64='" + d_PRIXU64 + "'"
-$ WC "d_PRIeldbl='" + d_PRIeldbl + "'"
-$ WC "d_PRIfldbl='" + d_PRIfldbl + "'"
-$ WC "d_PRIgldbl='" + d_PRIgldbl + "'"
-$ WC "d_PRIo64='" + d_PRIo64 + "'"
-$ WC "d_PRIu64='" + d_PRIu64 + "'"
-$ WC "d_PRIx64='" + d_PRIx64 + "'"
-$ WC "d_SCNfldbl='" + d_SCNfldbl + "'"
-$ WC "d_access='" + d_access + "'"
-$ WC "d_accessx='undef'"
-$ WC "d_alarm='define'"
-$ WC "d_archlib='define'"
-$ WC "d_atolf='" + d_atolf + "'"
-$ WC "d_atoll='" + d_atoll + "'"
-$ WC "d_attribut='" + d_attribut + "'"
-$ WC "d_bcmp='" + d_bcmp + "'"
-$ WC "d_bcopy='" + d_bcopy + "'"
-$ WC "d_bincompat3='undef'"
-$ WC "d_bincompat5005='undef'"
-$ WC "d_bsdgetpgrp='undef'"
-$! WC "d_bsdpgrp='undef'"
-$ WC "d_bsdsetpgrp='undef'"
-$ WC "d_bzero='" + d_bzero + "'"
-$ WC "d_casti32='define'"
-$ WC "d_castneg='define'"
-$ WC "d_charvspr='undef'"
-$ WC "d_chown='define'"
-$ WC "d_chroot='undef'"
-$ WC "d_chsize='undef'"
-$ WC "d_cmsghdr_s='undef'"
-$ WC "d_const='define'"
-$ WC "d_crypt='define'"
-$ WC "d_csh='undef'"
-$ WC "d_cuserid='define'"
-$ WC "d_dbl_dig='define'"
-$ WC "d_difftime='define'"
-$ WC "d_dirnamlen='define'"
-$ WC "d_dlerror='undef'"
-$ WC "d_dlsymun='undef'"
-$ WC "d_dosuid='undef'"
-$ WC "d_drand48proto='" + d_drand48proto + "'"
-$ WC "d_dup2='define'"
-$ WC "d_eaccess='undef'"
-$ WC "d_endgrent='define'"
-$ WC "d_endhent='" + d_endhent + "'"
-$ WC "d_endnent='" + d_endnent + "'"
-$ WC "d_endpent='" + d_endpent + "'"
-$ WC "d_endpwent='define'"
-$ WC "d_endsent='" + d_endsent + "'"
-$ WC "d_eofnblk='undef'"
-$ WC "d_eunice='undef'"
-$ WC "d_fchmod='undef'"
-$ WC "d_fchown='undef'"
-$ WC "d_fcntl='" + d_fcntl + "'"
-$ WC "d_fcntl_can_lock='" + d_fcntl_can_lock + "'"
-$ WC "d_fd_set='" + d_fd_set + "'"
-$ WC "d_fgetpos='define'"
-$ WC "d_flexfnam='define'"
-$ WC "d_flock='undef'"
-$ WC "d_fork='undef'"
-$ WC "d_fpathconf='" + d_fpathconf + "'"
-$ WC "d_fpos64_t='" + d_fpos64_t + "'"
-$ WC "d_frexpl='" + d_frexpl + "'"
-$ WC "d_fs_data_s='undef'"
-$ WC "d_fseeko='undef'"
-$ WC "d_fsetpos='define'"
-$ WC "d_fstatfs='undef'"
-$ WC "d_fstatvfs='undef'"
-$ WC "d_fsync='undef'"
-$ WC "d_ftello='undef'"
-$ WC "d_getcwd='undef'"
-$ WC "d_getespwnam='undef'"
-$ WC "d_getfsstat='undef'"
-$ WC "d_getgrent='define'"
-$ WC "d_getgrps='undef'"
-$ WC "d_gethbyaddr='" + d_gethbyaddr + "'"
-$ WC "d_gethbyname='" + d_gethbyname + "'"
-$ WC "d_gethent='" + d_gethent + "'"
-$ WC "d_gethname='" + d_gethname + "'"
-$ WC "d_gethostprotos='" + d_gethostprotos + "'"
-$ WC "d_getlogin='define'"
-$ WC "d_getmnt='undef'"
-$ WC "d_getmntent='undef'"
-$ WC "d_getnbyaddr='" + d_getnbyaddr + "'"
-$ WC "d_getnbyname='" + d_getnbyname + "'"
-$ WC "d_getnent='" + d_getnent + "'"
-$ WC "d_getnetprotos='" + d_getnetprotos + "'"
-$ WC "d_getpagsz='undef'"
-$ WC "d_getpbyname='" + d_getpbyname + "'"
-$ WC "d_getpbynumber='" + d_getpbynumber + "'"
-$ WC "d_getpent='" + d_getpent + "'"
-$ WC "d_getpgid='undef'"
-$ WC "d_getpgrp2='undef'"
-$ WC "d_getpgrp='undef'"
-$ WC "d_getppid='undef'"
-$ WC "d_getprior='undef'"
-$ WC "d_getprotoprotos='" + d_getprotoprotos + "'"
-$ WC "d_getprpwnam='undef'"
-$ WC "d_getpwent='define'"
-$ WC "d_getsbyname='" + d_getsbyname + "'"
-$ WC "d_getsbyport='" + d_getsbyport + "'"
-$ WC "d_getsent='" + d_getsent + "'"
-$ WC "d_getservprotos='" + d_getservprotos + "'"
-$ WC "d_getspnam='undef'"
-$ WC "d_gettimeod='" + d_gettimeod + "'"
-$ WC "d_gnulibc='undef'"
-$ WC "d_grpasswd='undef'"
-$ WC "d_hasmntopt='undef'"
-$ WC "d_htonl='" + d_htonl + "'"
-$ WC "d_iconv='" + d_iconv +"'"
-$ WC "d_index='" + d_index + "'"
-$ WC "d_inetaton='undef'"
-$ WC "d_int64_t='" + d_int64_t + "'"
-$ WC "d_isascii='define'"
-$ WC "d_isnan='" + d_isnan + "'"
-$ WC "d_isnanl='" + d_isnanl + "'"
-$ WC "d_killpg='undef'"
-$ WC "d_lchown='undef'"
-$ WC "d_ldbl_dig='define'"
-$ WC "d_link='undef'"
-$ WC "d_llseek='undef'"
-$ WC "d_locconv='" + d_locconv + "'"
-$ WC "d_lockf='undef'"
-$ WC "d_longdbl='" + d_longdbl + "'"
-$ WC "d_longlong='" + d_longlong + "'"
-$ WC "d_lseekproto='define'"
-$ WC "d_lstat='undef'"
-$ WC "d_madvise='undef'"
-$ WC "d_mblen='" + d_mblen + "'"
-$ WC "d_mbstowcs='" + d_mbstowcs + "'"
-$ WC "d_mbtowc='" + d_mbtowc + "'"
-$ WC "d_memchr='" + d_memchr + "'"
-$ WC "d_memcmp='define'"
-$ WC "d_memcpy='define'"
-$ WC "d_memmove='define'"
-$ WC "d_memset='define'"
-$ WC "d_mkdir='define'"
-$ WC "d_mkdtemp='" + d_mkdtemp + "'"
-$ WC "d_mkfifo='undef'"
-$ WC "d_mknod='undef'"
-$ WC "d_mkstemp='" + d_mkstemp + "'"
-$ WC "d_mkstemps='" + d_mkstemps + "'"
-$ WC "d_mktime='" + d_mktime + "'"
-$ WC "d_mmap='undef'"
-$ WC "d_modfl='" + d_modfl + "'"
-$ WC "d_mprotect='undef'"
-$ WC "d_msg='undef'"
-$ WC "d_msg_ctrunc='undef'"
-$ WC "d_msg_dontroute='undef'"
-$ WC "d_msg_oob='undef'"
-$ WC "d_msg_peek='undef'"
-$ WC "d_msg_proxy='undef'"
-$ WC "d_msghdr_s='undef'"
-$ WC "d_msync='undef'"
-$ WC "d_munmap='undef'"
-$ WC "d_mymalloc='" + d_mymalloc + "'"
-$ WC "d_nice='define'"
-$ WC "d_nv_preserves_uv='" + d_nv_preserves_uv + "'"
-$ WC "d_nv_preserves_uv_bits='" + d_nv_preserves_uv_bits + "'"
-$ WC "d_off64_t='" + d_off64_t + "'"
-$ WC "d_old_pthread_create_joinable='" + d_old_pthread_create_joinable + "'"
-$ WC "d_oldarchlib='define'"
-$ WC "d_oldpthreads='" + d_oldpthreads + "'"
-$ WC "d_open3='define'"
-$ WC "d_pathconf='" + d_pathconf + "'"
-$ WC "d_pause='define'"
-$ WC "d_perl_otherlibdirs='undef'"
-$ WC "d_phostname='" + d_phostname + "'"
-$ WC "d_pipe='define'"
-$ WC "d_poll='undef'"
-$ WC "d_pthread_yield='" + d_pthread_yield + "'"
-$ WC "d_pthreads_created_joinable='" + d_pthreads_created_joinable + "'"
-$ WC "d_pwage='undef'"
-$ WC "d_pwchange='undef'"
-$ WC "d_pwclass='undef'"
-$ WC "d_pwcomment='define'"
-$ WC "d_pwexpire='undef'"
-$ WC "d_pwgecos='define'"
-$ WC "d_pwpasswd='define'"
-$ WC "d_pwquota='undef'"
-$ WC "d_qgcvt='undef'"
-$ WC "d_quad='" + d_quad + "'"
-$ WC "d_readdir='define'"
-$ WC "d_readlink='undef'"
-$ WC "d_readv='undef'"
-$ WC "d_recvmsg='undef'"
-$ WC "d_rename='define'"
-$ WC "d_rewinddir='define'"
-$ WC "d_rmdir='define'"
-$ WC "d_safebcpy='undef'"
-$ WC "d_safemcpy='define'"
-$ WC "d_sanemcmp='define'"
-$ WC "d_sbrkproto='define'"
-$ WC "d_sched_yield='" + d_sched_yield + "'"
-$ WC "d_scm_rights='undef'"
-$ WC "d_seekdir='define'"
-$ WC "d_select='" + d_select + "'"
-$ WC "d_sem='undef'"
-$ WC "d_semctl_semid_ds='undef'"
-$ WC "d_semctl_semun='undef'"
-$ WC "d_sendmsg='undef'"
-$ WC "d_setegid='undef'"
-$ WC "d_setenv='" + d_setenv + "'"
-$ WC "d_seteuid='undef'"
-$ WC "d_setgrent='undef'"
-$ WC "d_setgrps='undef'"
-$ WC "d_sethent='" + d_sethent + "'"
-$ WC "d_setlinebuf='undef'"
-$ WC "d_setlocale='" + d_setlocale + "'"
-$ WC "d_setnent='" + d_setnent + "'"
-$ WC "d_setpent='" + d_setpent + "'"
-$ WC "d_setpgid='undef'"
-$ WC "d_setpgrp2='undef'"
-$ WC "d_setpgrp='undef'"
-$ WC "d_setprior='undef'"
-$ WC "d_setproctitle='" + d_setproctitle + "'"
-$ WC "d_setpwent='define'"
-$ WC "d_setregid='undef'"
-$ WC "d_setresgid='undef'"
-$ WC "d_setresuid='undef'"
-$ WC "d_setreuid='undef'"
-$ WC "d_setrgid='undef'"
-$ WC "d_setruid='undef'"
-$ WC "d_setsent='" + d_setsent + "'"
-$ WC "d_setsid='undef'"
-$ WC "d_setvbuf='" + d_setvbuf + "'"
-$ WC "d_sfio='undef'"
-$ WC "d_shm='undef'"
-$ WC "d_shmatprototype='undef'"
-$ WC "d_sigaction='" + d_sigaction + "'"
-$ WC "d_sigsetjmp='" + d_sigsetjmp + "'"
-$ WC "d_socket='" + d_socket + "'"
-$ WC "d_socklen_t='" + d_socklen_t + "'"
-$ WC "d_sockpair='undef'"
-$ WC "d_socks5_init='undef'"
-$ WC "d_sqrtl='define'"
-$ WC "d_statblks='undef'"
-$ WC "d_statfs_f_flags='undef'"
-$ WC "d_statfs_s='undef'"
-$ WC "d_statfsflags='undef'"
-$ WC "d_stdio_cnt_lval='" + d_stdio_cnt_lval + "'"
-$ WC "d_stdio_ptr_lval='" + d_stdio_ptr_lval + "'"
-$ WC "d_stdio_ptr_lval_sets_cnt='" + d_stdio_ptr_lval_sets_cnt + "'"
-$ WC "d_stdio_ptr_lval_nochange_cnt='" + d_stdio_ptr_lval_nochange_cnt + "'"
-$ WC "d_stdio_stream_array='undef'"
-$ WC "d_stdiobase='" + d_stdiobase + "'"
-$ WC "d_stdstdio='" + d_stdstdio + "'"
-$ WC "d_strchr='define'"
-$ WC "d_strcoll='" + d_strcoll + "'"
-$ WC "d_strctcpy='define'"
-$ WC "d_strerrm='strerror((e),vaxc$errno)'"
-$ WC "d_strerror='define'"
-$ WC "d_strtod='define'"
-$ WC "d_strtol='define'"
-$ WC "d_strtold='" + d_strtold + "'"
-$ WC "d_strtoll='" + d_strtoll + "'"
-$ WC "d_strtoul='define'"
-$ WC "d_strtoull='" + d_strtoull + "'"
-$ WC "d_strtouq='" + d_strtouq + "'"
-$ WC "d_strxfrm='" + d_strxfrm + "'"
-$ WC "d_suidsafe='undef'"
-$ WC "d_symlink='undef'"
-$ WC "d_syscall='undef'"
-$ WC "d_sysconf='" + d_sysconf + "'"
-$ WC "d_syserrlst='undef'"
-$ WC "d_system='define'"
-$ WC "d_tcgetpgrp='undef'"
-$ WC "d_tcsetpgrp='undef'"
-$ WC "d_telldir='define'"
-$ WC "d_telldirproto='define'"
-$ WC "d_times='define'"
-$ WC "d_truncate='" + d_truncate + "'"
-$ WC "d_tzname='undef'"
-$ WC "d_umask='define'"
-$ WC "d_uname='" + d_uname + "'"
-$ WC "d_union_semun='undef'"
-$ WC "d_unlink_all_versions='undef'"
-$ WC "d_ustat='undef'"
-$ WC "d_vendorarch='undef'"
-$ WC "d_vendorlib='undef'"
-$ WC "d_vfork='define'"
-$ WC "d_vms_case_sensitive_symbols='" + d_vms_be_case_sensitive + "'" ! VMS
-$ WC "d_vms_do_sockets='" + d_vms_do_sockets + "'" ! VMS
-$ WC "d_void_closedir='define'"
-$ WC "d_volatile='define'"
-$ WC "d_vprintf='define'"
-$ WC "d_wait4='" + d_wait4 + "'"
-$ WC "d_waitpid='define'"
-$ WC "d_wcstombs='" + d_wcstombs + "'"
-$ WC "d_wctomb='" + d_wctomb + "'"
-$ WC "d_writev='undef'"
-$ WC "db_hashtype=' '"
-$ WC "db_prefixtype=' '"
-$ WC "dbgprefix='" + dbgprefix + "'"
-$ WC "defvoidused='15'"
-$ WC "devtype='" + devtype + "'"
-$ WC "direntrytype='struct dirent'"
-$ WC "dlext='" + dlext + "'"
-$ WC "dlobj='" + dlobj + "'"
-$ WC "dlsrc='dl_vms.c'"
-$ WC "doublesize='" + doublesize + "'"
-$ WC "drand01='" + drand01 + "'"
-$ WC "dynamic_ext='" + extensions + "'"
-$ WC "eagain=' '"
-$ WC "ebcdic='undef'"
-$ WC "embedmymalloc='" + mymalloc + "'"
-$ WC "eunicefix=':'"
-$ WC "exe_ext='" + exe_ext + "'"
-$ WC "extensions='" + extensions + "'"
-$ WC "fflushNULL='define'"
-$ WC "fflushall='undef'"
-$ WC "fpostype='fpos_t'"
-$ WC "freetype='void'"
-$ WC "full_ar='" + "'"
-$ WC "full_csh='" + " '"
-$ WC "full_sed='_NLA0:'"
-$ WC "gccversion='" + gccversion + "'"
-$ WC "gidformat='lu'"
-$ WC "gidsign='1'"
-$ WC "gidsize='4'"
-$ WC "gidtype='" + gidtype + "'"
-$ WC "groupstype='Gid_t'"
-$ WC "hint='none'"
-$ WC "hintfile='" + "'"
-$ WC "i16size='" + i16size + "'"
-$ WC "i16type='" + i16type + "'"
-$ WC "i32size='" + i32size + "'"
-$ WC "i32type='" + i32type + "'"
-$ WC "i64size='" + i64size + "'"
-$ WC "i64type='" + i64type + "'"
-$ WC "i8size='" + i8size + "'"
-$ WC "i8type='" + i8type + "'"
-$ WC "i_arpainet='undef'"
-$ WC "i_dbm='undef'"
-$ WC "i_dirent='" + i_dirent + "'"
-$ WC "i_dlfcn='undef'"
-$ WC "i_fcntl='" + i_fcntl + "'"
-$ WC "i_float='define'"
-$ WC "i_grp='undef'"
-$ WC "i_iconv='" + i_iconv +"'"
-$ WC "i_ieeefp='undef'"
-$ WC "i_inttypes='" + i_inttypes + "'"
-$ WC "i_libutil='" + i_libutil + "'"
-$ WC "i_limits='define'"
-$ WC "i_locale='" + i_locale + "'"
-$ WC "i_machcthr='undef'"
-$ WC "i_machcthreads='undef'"
-$ WC "i_math='define'"
-$ WC "i_memory='undef'"
-$ WC "i_mntent='undef'"
-$ WC "i_ndbm='undef'"
-$ WC "i_netdb='" + i_netdb + "'"
-$ WC "i_neterrno='define'"
-$ WC "i_netinettcp='" + i_netinettcp + "'"
-$ WC "i_niin='" + i_niin + "'"
-$ WC "i_poll='" + i_poll + "'"
-$ WC "i_prot='undef'"
-$ WC "i_pthread='define'"
-$ WC "i_pwd='undef'"
-$ WC "i_rpcsvcdbm='undef'"
-$ WC "i_sfio='undef'"
-$ WC "i_sgtty='undef'"
-$ WC "i_shadow='" + i_shadow + "'"
-$ WC "i_socks='" + i_socks + "'"
-$ WC "i_stdarg='define'"
-$ WC "i_stddef='define'"
-$ WC "i_stdlib='define'"
-$ WC "i_string='define'"
-$ WC "i_sunmath='undef'"
-$ WC "i_sysaccess='" + i_sysaccess + "'"
-$ WC "i_sysdir='undef'"
-$ WC "i_sysfile='" + i_sysfile + "'"
-$ WC "i_sysioctl='undef'"
-$ WC "i_syslog='" + i_syslog + "'"
-$ WC "i_sysmman='undef'"
-$ WC "i_sysmode='" + i_sysmode + "'"
-$ WC "i_sysmount='undef'"
-$ WC "i_sysndir='undef'"
-$ WC "i_sysparam='undef'"
-$ WC "i_sysresrc='undef'"
-$ WC "i_syssecrt='" + i_syssecrt + "'"
-$ WC "i_sysselct='undef'"
-$ WC "i_sysstat='define'"
-$ WC "i_sysstatfs='undef'"
-$ WC "i_sysstatvfs='undef'"
-$ WC "i_systime='undef'"
-$ WC "i_systimek='undef'"
-$ WC "i_systimes='undef'"
-$ WC "i_systypes='define'"
-$ WC "i_sysuio='" + i_sysuio + "'"
-$ WC "i_sysun='undef'"
-$ WC "i_sysutsname='" + i_sysutsname + "'"
-$ WC "i_sysvfs='undef'"
-$ WC "i_syswait='undef'"
-$ WC "i_termio='undef'"
-$ WC "i_termios='undef'"
-$ WC "i_time='define'"
-$ WC "i_unistd='" + i_unistd + "'"
-$ WC "i_ustat='undef'"
-$ WC "i_utime='undef'"
-$ WC "i_values='undef'"
-$ WC "i_varargs='undef'"
-$ WC "i_vfork='undef'"
-$ WC "inc_version_list='0'"
-$ WC "inc_version_list_init='0'"
-$ WC "installarchlib='" + installarchlib + "'"
-$ WC "installbin='" + installbin + "'"
-$ WC "installman1dir='" + installman1dir + "'"
-$ WC "installman3dir='" + installman3dir + "'"
-$ WC "installprivlib='" + installprivlib + "'"
-$ WC "installscript='" + installscript + "'"
-$ WC "installsitearch='" + installsitearch + "'"
-$ WC "installsitelib='" + installsitelib + "'"
-$ WC "installusrbinperl='undef'"
-$ WC "intsize='" + intsize + "'"
-$ WC "ivdformat='" + ivdformat + "'"
-$ WC "ivsize='" + ivsize + "'"
-$ WC "ivtype='" + ivtype + "'"
-$ WC "known_extensions='" + known_extensions + "'"
-$ WC "ld='" + ld + "'"
-$ WC "lddlflags='/Share'"
-$ WC "ldflags='" + ldflags + "'"
-$ WC "lib_ext='" + lib_ext + "'"
-$ WC "libc='" + libc + "'"
-$ WC "libpth='/sys$share /sys$library'"
-$ WC "libs='" + libs + "'"
-$ WC "longdblsize='" + longdblsize + "'"
-$ WC "longlongsize='" + longlongsize + "'"
-$ WC "longsize='" + longsize + "'"
-$ WC "lseeksize='4'"
-$ WC "lseektype='int'"
-$ WC "mab='" + "'"
-$ WC "make='" + make + "'"
-$ WC "malloctype='void *'"
-$ WC "man1ext='rno'"
-$ WC "man3ext='rno'"
-$ WC "mmaptype=' " + "'"
-$ WC "modetype='unsigned int'"
-$ WC "multiarch='undef'"
-$ WC "mydomain='" + mydomain + "'"
-$ WC "myhostname='" + myhostname + "'"
-$ WC "myuname='" + myuname + "'"
-$ WC "netdb_hlen_type='" + netdb_hlen_type + "'"
-$ WC "netdb_host_type='" + netdb_host_type + "'"
-$ WC "netdb_name_type='" + netdb_name_type + "'"
-$ WC "netdb_net_type='" + netdb_net_type + "'"
-$ WC "nveformat='" + nveformat + "'"
-$ WC "nvfformat='" + nvfformat + "'"
-$ WC "nvgformat='" + nvgformat + "'"
-$ WC "nvsize='" + nvsize + "'"
-$ WC "nvtype='" + nvtype + "'"
-$ WC "o_nonblock=' '"
-$ WC "obj_ext='" + obj_ext + "'"
-$ WC "old_pthread_create_joinable='" + old_pthread_create_joinable + "'"
-$ WC "oldarchlib='" + oldarchlib + "'"
-$ WC "oldarchlibexp='" + oldarchlibexp + "'"
-$ WC "optimize='" + optimize + "'"
-$ WC "osname='" + osname + "'"
-$ WC "osvers='" + osvers + "'"
-$ WC "otherlibdirs='" + "'"
-$ WC "package='" + package + "'"
-$ WC "pager='" + pager + "'"
-$ WC "patchlevel='" + patchlevel + "'"
-$ WC "path_sep='|'"
-$ WC "perl_root='" + perl_root + "'" ! VMS specific $trnlnm()
-$ WC "perladmin='" + perladmin + "'"
-$ WC "perllibs='" + perllibs + "'"
-$ WC "pgflquota='" + pgflquota + "'"
-$ WC "pidtype='" + pidtype + "'"
-$ WC "pm_apiversion='" + version + "'"
-$! WC "prefix='" + vms_prefix + "'"
-$ WC "prefix='" + prefix + "'"
-$ WC "privlib='" + privlib + "'"
-$ WC "privlibexp='" + privlibexp + "'"
-$ WC "prototype='define'"
-$ WC "ptrsize='" + ptrsize + "'"
-$ WC "quadkind='" + quadkind + "'"
-$ WC "quadtype='" + quadtype + "'"
-$ WC "randbits='31'"
-$ WC "randseedtype='" + randseedtype + "'"
-$ WC "ranlib='" + "'"
-$ WC "rd_nodata=' '"
-$ WC "revision='" + revision + "'"
-$ WC "sPRId64='" + sPRId64 + "'"
-$ WC "sPRIEldbl='" + sPRIEUldbl + "'"
-$ WC "sPRIFldbl='" + sPRIFUldbl + "'"
-$ WC "sPRIGldbl='" + sPRIGUldbl + "'"
-$ WC "sPRIX64='" + sPRIXU64 + "'"
-$ WC "sPRIeldbl='" + sPRIeldbl + "'"
-$ WC "sPRIfldbl='" + sPRIfldbl + "'"
-$ WC "sPRIgldbl='" + sPRIgldbl + "'"
-$! WC "sPRIi64='" + sPRIi64 + "'"
-$ WC "sPRIo64='" + sPRIo64 + "'"
-$ WC "sPRIu64='" + sPRIu64 + "'"
-$ WC "sPRIx64='" + sPRIx64 + "'"
-$ WC "sSCNfldbl='" + sSCNfldbl + "'"
-$ WC "sched_yield='" + sched_yield + "'"
-$ WC "seedfunc='" + seedfunc + "'"
-$ WC "selectminbits='32'"
-$ WC "selecttype='" + selecttype + "'"
-$ WC "sh='MCR'"
-$ WC "shmattype='" + " '"
-$ WC "shortsize='" + shortsize + "'"
-$ WC "shrplib='define'"
-$ WC "sig_name='" + sig_name + "'"
-$ tmp = "sig_name_init='" + sig_name_init + "'"
-$ WC/symbol tmp
-$ DELETE/SYMBOL tmp
-$ WC "sig_num='" + sig_num + "'"
-$ WC "sig_num_init='" + sig_num_init + "'"
-$ WC "signal_t='" + signal_t + "'"
-$ WC "sitearch='" + sitearch + "'"
-$ WC "sitearchexp='" + sitearchexp + "'"
-$ WC "sitelib='" + sitelib + "'"
-$ WC "sitelib_stem='" + sitelib_stem + "'"
-$ WC "sitelibexp='" + sitelibexp + "'"
-$ WC "sizesize='" + sizesize + "'"
-$ WC "sizetype='size_t'"
-$ WC "so='" + so + "'"
-$ WC "socksizetype='" + socksizetype + "'"
-$ WC "spitshell='write sys$output '"
-$ WC "src='" + src + "'"
-$ WC "ssizetype='int'"
-$ WC "startperl=" + startperl ! This one's special--no enclosing single quotes
-$ WC "static_ext='" + static_ext + "'"
-$ WC "stdchar='" + stdchar + "'"
-$ WC "stdio_base='((*fp)->_base)'"
-$ WC "stdio_bufsiz='((*fp)->_cnt + (*fp)->_ptr - (*fp)->_base)'"
-$ WC "stdio_cnt='((*fp)->_cnt)'"
-$ WC "stdio_ptr='((*fp)->_ptr)'"
-$ WC "stdio_stream_array=' " + "'"
-$ WC "subversion='" + subversion + "'"
-$ WC "timetype='" + timetype + "'"
-$ WC "u16size='" + u16size + "'"
-$ WC "u16type='" + u16type + "'"
-$ WC "u32size='" + u32size + "'"
-$ WC "u32type='" + u32type + "'"
-$ WC "u64size='" + u64size + "'"
-$ WC "u64type='" + u64type + "'"
-$ WC "u8size='" + u8size + "'"
-$ WC "u8type='" + u8type + "'"
-$ WC "uidformat='lu'"
-$ WC "uidsign='1'"
-$ WC "uidsize='4'"
-$ WC "uidtype='" + uidtype + "'"
-$ WC "uquadtype='" + uquadtype + "'"
-$ WC "use5005threads='" + use5005threads + "'"
-$ WC "use64bitall='" + use64bitall + "'"
-$ WC "use64bitint='" + use64bitint + "'"
-$ WC "usedebugging_perl='" + use_debugging_perl + "'"
-$ WC "usedl='" + usedl + "'"
-$ WC "useithreads='" + useithreads + "'"
-$ WC "uselargefiles='" + uselargefiles + "'"
-$ WC "uselongdouble='" + uselongdouble + "'"
-$ WC "usemorebits='" + usemorebits + "'"
-$ WC "usemultiplicity='" + usemultiplicity + "'"
-$ WC "usemymalloc='" + usemymalloc + "'"
-$ WC "useperlio='undef'"
-$ WC "useposix='false'"
-$ WC "usesocks='undef'"
-$ WC "usethreads='" + usethreads + "'"
-$ WC "usevfork='true'"
-$ WC "uvoformat='" + uvoformat + "'"
-$ WC "uvsize='" + uvsize + "'"
-$ WC "uvtype='" + uvtype + "'"
-$ WC "uvuformat='" + uvuformat + "'"
-$ WC "uvxformat='" + uvxformat + "'"
-$ WC "uvXUformat='" + uvXUformat + "'"
-$ WC "vendorarchexp='" + "'"
-$ WC "vendorlib_stem='" + "'"
-$ WC "vendorlibexp='" + "'"
-$ WC "version='" + version + "'"
-$ WC "vms_cc_type='" + vms_cc_type + "'" ! VMS specific
-$ WC "vms_prefix='" + vms_prefix + "'" ! VMS specific
-$ WC "vms_ver='" + vms_ver + "'" ! VMS specific
-$ WC "voidflags='15'"
-$ WC "xs_apiversion='" + version + "'"
-$ WC "CONFIGDOTSH='true'"
-$!
-$! ##END WRITE NEW CONSTANTS HERE##
-$!
-$ CLOSE CONFIG
-$!
-$! Okay, we've gotten here. Build munchconfig.exe
-$ COPY/NOLOG [-.vms]munchconfig.c []
-$ COPY/NOLOG [-.vms]'Makefile_SH' []
-$ 'Perl_CC' munchconfig.c
-$ IF Needs_Opt
-$ THEN
-$ OPEN/WRITE CONFIG []munchconfig.opt
-$ IF ccname .EQS. "GCC"
-$ THEN
-$ WRITE CONFIG "Gnu_CC:[000000]gcclib.olb/library"
-$ ENDIF
-$ WRITE CONFIG "Sys$Share:VAXCRTL/Share"
-$ CLOSE CONFIG
-$ 'ld' munchconfig.obj,munchconfig.opt/opt
-$ DELETE/NOLOG/NOCONFIRM munchconfig.opt;
-$ ELSE
-$ 'ld' munchconfig.obj
-$ ENDIF
-$ IF F$SEARCH("munchconfig.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM munchconfig.obj;
-$ IF F$SEARCH("munchconfig.c") .NES. "" THEN DELETE/NOLOG/NOCONFIRM munchconfig.c;
-$ IF ccname .EQS. "CXX"
-$ THEN
-$ CALL Cxx_demangler_cleanup
-$ ENDIF
-$!
-$ IF alldone .EQS. ""
-$ THEN
-$ cat4 SYS$INPUT:
-$ DECK
-
-If you'd like to make any changes to the config.sh file before I begin
-to configure things, answer yes to the following question.
-
-$ EOD
-$ dflt="n"
-$ rp="Do you wish to edit ''basename_config_sh'? [''dflt'] "
-$ GOSUB myread
-$ IF ans .EQS. "" then ans = dflt
-$ IF ans
-$ THEN
-$ echo4 ""
-$ echo4 "Be sure to type LOGOUT after you have edited the file,"
-$ echo4 "then this procedure will resume."
-$ echo4 ""
-$ default = F$ENVIRONMENT("DEFAULT")
-$ DIRECTORY 'config_sh'
-$ SET DEFAULT [-]
-$ SPAWN/WAIT
-$ SET DEFAULT 'default'
-$ ENDIF
-$ ENDIF
-$!
-$ echo ""
-$ echo4 "Adding ''osname' specific preprocessor commands."
-$ !
-$ ! we need an fdl file
-$ CREATE [-]CONFIG.FDL
-$ DECK
-RECORD
- FORMAT STREAM_LF
-$ EOD
-$ CREATE /FDL=[-]CONFIG.FDL [-]CONFIG.LOCAL
-$ ! First spit out the header info with the local defines (to get
-$ ! around the 255 character command line limit)
-$ OPEN/APPEND CONFIG [-]config.local
-$ IF use_debugging_perl THEN WC "#define DEBUGGING"
-$ IF use_two_pot_malloc THEN WC "#define TWO_POT_OPTIMIZE"
-$ IF mymalloc THEN WC "#define EMBEDMYMALLOC"
-$ IF use_pack_malloc THEN WC "#define PACK_MALLOC"
-$ IF use_debugmalloc THEN WC "#define DEBUGGING_MSTATS"
-$ IF ccname .EQS. "GCC" THEN WC "#define GNUC_ATTRIBUTE_CHECK"
-$ IF (Has_Dec_C_Sockets)
-$ THEN
-$ WC "#define VMS_DO_SOCKETS"
-$ WC "#define DECCRTL_SOCKETS"
-$ ELSE
-$ IF Has_Socketshr THEN WC "#define VMS_DO_SOCKETS"
-$ ENDIF
-$! This is VMS-specific for now
-$ WC "#''d_setenv' HAS_SETENV"
-$ IF d_secintgenv THEN WC "#define SECURE_INTERNAL_GETENV"
-$ IF d_alwdeftype THEN WC "#define ALWAYS_DEFTYPES"
-$ IF use64bitint .OR. use64bitint .EQS. "define"
-$ THEN
-$ WC "#define USE_64_BIT_INT"
-$ WC "#define USE_LONG_DOUBLE"
-$ ENDIF
-$ IF use64bitall .OR. use64bitall .EQS. "define" THEN -
- WC "#define USE_64_BIT_ALL"
-$ IF be_case_sensitive THEN WC "#define VMS_WE_ARE_CASE_SENSITIVE"
-$ IF d_herrno .EQS. "undef" THEN WC "#define NEED_AN_H_ERRNO"
-$ WC "#define HAS_ENVGETENV"
-$ WC "#define PERL_EXTERNAL_GLOB"
-$ CLOSE CONFIG
-$!
-$ echo4 "Doing variable substitutions on .SH files..."
-$ echo4 "Extracting config.h (with variable substitutions)"
-$!
-$! Now build the normal config.h
-$ DEFINE/USER_MODE sys$output [-]config.main
-$ mcr []munchconfig 'config_sh' [-]config_h.sh
-$ ! Concatenate them together
-$ copy [-]config.local,[-]config.main [-]config.h
-$! Clean up
-$ DELETE/NOLOG [-]CONFIG.MAIN;*
-$ DELETE/NOLOG [-]CONFIG.LOCAL;*
-$ DELETE/NOLOG [-]CONFIG.FDL;*
-$!
-$ IF ccname .EQS. "DEC"
-$ THEN
-$ DECC_REPLACE = "DECC=decc=1"
-$ ELSE
-$ DECC_REPLACE = "DECC="
-$ ENDIF
-$ IF ccname .EQS. "CXX"
-$ THEN
-$ DECCXX_REPLACE = "DECCXX=DECCXX=1"
-$ ELSE
-$ DECCXX_REPLACE = "DECCXX="
-$ ENDIF
-$ IF ccname .EQS. "GCC"
-$ THEN
-$ GNUC_REPLACE = "GNUC=gnuc=1"
-$ ELSE
-$ GNUC_REPLACE = "GNUC="
-$ ENDIF
-$ IF Has_Dec_C_Sockets
-$ THEN
-$ SOCKET_REPLACE = "SOCKET=DECC_SOCKETS=1"
-$ ELSE
-$ IF Has_Socketshr
-$ THEN
-$ SOCKET_REPLACE = "SOCKET=SOCKETSHR_SOCKETS=1"
-$ ELSE
-$ SOCKET_REPLACE = "SOCKET="
-$ ENDIF
-$ ENDIF
-$ IF Use_Threads
-$ THEN
-$ IF (vms_ver .LES. "6.2")
-$ THEN
-$ THREAD_REPLACE = "THREAD=OLDTHREADED=1"
-$ ELSE
-$ THREAD_REPLACE = "THREAD=THREADED=1"
-$ ENDIF
-$ ELSE
-$ THREAD_REPLACE = "THREAD="
-$ ENDIF
-$ IF mymalloc
-$ THEN
-$ MALLOC_REPLACE = "MALLOC=MALLOC=1"
-$ ELSE
-$ MALLOC_REPLACE = "MALLOC="
-$ ENDIF
-$ echo4 "Extracting ''defmakefile' (with variable substitutions)"
-$ DEFINE/USER_MODE sys$output 'UUmakefile'
-$ mcr []munchconfig 'config_sh' 'Makefile_SH' "''DECC_REPLACE'" -
- "''DECCXX_REPLACE'" "''ARCH_TYPE'" "''GNUC_REPLACE'" "''SOCKET_REPLACE'" -
- "''THREAD_REPLACE'" "''C_Compiler_Replace'" "''MALLOC_REPLACE'" -
- "''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'"
-$! Clean up after ourselves
-$ DELETE/NOLOG/NOCONFIRM []munchconfig.exe;
-$ echo4 "Extracting make_ext.com (without variable substitutions)"
-$ Create Sys$Disk:[-]make_ext.com
-$ Deck/Dollar="$EndOfTpl$"
-$!++ make_ext.com
-$! NOTE: This file is extracted as part of the VMS configuration process.
-$! Any changes made to it directly will be lost. If you need to make any
-$! changes, please edit the template in Configure.Com instead.
-$ def = F$Environment("Default")
-$ exts1 = F$Edit(p1,"Compress")
-$ p2 = F$Edit(p2,"Upcase,Compress,Trim")
-$ If F$Locate("MCR ",p2).eq.0 Then p2 = F$Extract(3,255,p2)
-$ miniperl = "$" + F$Search(F$Parse(p2,".Exe"))
-$ makeutil = p3
-$ if f$type('p3') .nes. "" then makeutil = 'p3'
-$ targ = F$Edit(p4,"Lowercase")
-$ i = 0
-$ next_ext:
-$ ext = F$Element(i," ",p1)
-$ If ext .eqs. " " Then Goto done
-$ Define/User_mode Perl_Env_Tables CLISYM_LOCAL
-$ miniperl
-$ deck
- ($extdir = $ENV{'ext'}) =~ s/::/./g;
- $extdir =~ s#/#.#g;
- if ($extdir =~ /^vms/i) { $extdir =~ s/vms/.vms.ext/i; }
- else { $extdir = ".ext.$extdir"; }
- ($ENV{'extdir'} = "[$extdir]");
- ($ENV{'up'} = ('-') x ($extdir =~ tr/././));
-$ eod
-$ Set Default &extdir
-$ redesc = 0
-$ If F$Locate("clean",targ) .eqs. F$Length(targ)
-$ Then
-$ Write Sys$Output ""
-$ Write Sys$Output " Making ''ext' (dynamic)"
-$ On Error Then Goto done
-$ If F$Search("Descrip.MMS") .eqs. ""
-$ Then
-$ redesc = 1
-$ Else
-$ If F$CvTime(F$File("Descrip.MMS","rdt")) .lts. -
- F$CvTime(F$File("Makefile.PL","rdt")) Then redesc = 1
-$ EndIf
-$ Else
-$ Write Sys$Output "''targ'ing ''ext' . . ."
-$ On Error Then Continue
-$ EndIf
-$ If redesc Then -
- miniperl "-I[''up'.lib]" Makefile.PL "INST_LIB=[''up'.lib]" "INST_ARCHLIB=[''up'.lib]"
-$ makeutil 'targ'
-$ i = i + 1
-$ Set Def &def
-$ Goto next_ext
-$ done:
-$ sts = $Status
-$ Set Def &def
-$ Exit sts
-$!-- make_ext.com
-$EndOfTpl$
-$!
-$! Note that the /key qualifier to search, as in:
-$! search README.* "=head"/key=(position=1)/window=0/output=extra.pods
-$! is not supported on VMS V5.5-2, hence not used in extra_pods.com.
-$!
-$ echo4 "Extracting extra_pods.com (without variable substitutions)"
-$ Create Sys$Disk:[-]extra_pods.com
-$ Deck/Dollar="$EOExtra_Pods$"
-$!++ extra_pods.com
-$! NOTE: This file is extracted as part of the VMS configuration process.
-$! Any changes made to it directly will be lost. If you need to make any
-$! changes, please edit the template in Configure.Com instead.
-$! Use FORCE if you've just podified a README.* file on VMS.
-$ if f$search("extra.pods") .eqs. "" .or. P1 .eqs. "FORCE" then -
- search README.* "=head"/window=0/output=extra.pods
-$ open/read/error=extra_close EXTRA extra.pods
-$extra_loop:
-$ read/error=extra_close/END_OF_FILE=extra_close EXTRA file
-$ file_type = f$parse(file,,,"TYPE",) - "."
-$ if file_type .nes. "VMS" .and. file_type .nes. "vms"
-$ then
-$ pod_file = "[.pod]perl''file_type'.pod"
-$ file = file - "''f$parse(file,,,"VERSION",)'"
-$ if p1 .eqs. "CLEAN"
-$ then if f$search(pod_file) .nes. "" then delete/log 'pod_file';*
-$ else
-$ do_copy := false
-$ if f$search(pod_file) .eqs. ""
-$ then do_copy := true
-$ else
-$ file_rdt = f$cvtime(f$file_attributes(file,"RDT"))
-$ pod_file_rdt = f$cvtime(f$file_attributes(pod_file,"RDT"))
-$ if file_rdt .GTS. pod_file_rdt then do_copy := true
-$ endif
-$ if do_copy then copy/log/noconfirm 'file' 'pod_file'
-$ endif
-$ endif
-$ goto extra_loop
-$extra_close:
-$ close EXTRA
-$ if p1 .eqs. "CLEAN" .and. f$search("extra.pods;-1") .nes. "" then -
- purge/nolog extra.pods
-$!-- extra_pods.com
-$EOExtra_Pods$
-$!
-$! Warn of dangerous symbols or logical names
-$!
-$Bad_environment: SUBROUTINE
-$ Bad_env = ""
-$ IF p2 .eqs. "SYMBOL"
-$ THEN
-$ IF f$type('p1') .nes. "" THEN Bad_env := SYMBOL
-$ ELSE
-$ IF f$trnlnm(p1) .nes. "" THEN Bad_env := LOGICAL
-$ ENDIF
-$ IF Bad_env .eqs. "SYMBOL" .or. Bad_env .eqs. "LOGICAL"
-$ THEN
-$ IF f$search("config.msg") .nes. ""
-$ THEN
-$ OPEN/APPEND CONFIG config.msg
-$ ELSE
-$ OPEN/WRITE CONFIG config.msg
-$ ENDIF
-$ IF Bad_env .eqs. "SYMBOL"
-$ THEN
-$ WRITE CONFIG ""
-$ WRITE CONFIG "Symbol name ''p1' found in environment as " + &p1
-$ WRITE CONFIG " delete before building ''package' via:"
-$ WRITE CONFIG " $ DELETE/SYMBOL/GLOBAL ''p1'"
-$ IF f$locate("""",&p1) .ge. f$length(&p1)
-$ THEN
-$ WRITE CONFIG " after building, testing, and installing ''package'"
-$ WRITE CONFIG " restore the symbol with:"
-$ WRITE CONFIG " $ ''p1' == """ + &p1 + """"
-$ ENDIF
-$ ENDIF
-$ IF Bad_env .eqs. "LOGICAL"
-$ THEN
-$ WRITE CONFIG ""
-$ WRITE CONFIG "Logical name ''p1' found in environment as " + f$trnlnm(p1)
-$ WRITE CONFIG " deassign before building ''package'"
-$ ENDIF
-$ CLOSE CONFIG
-$ Bad_env = ""
-$ ENDIF
-$ EXIT
-$ ENDSUBROUTINE ! Bad_environment
-$ echo ""
-$ echo4 "Checking for dangerous pre-existing global symbols and logical names."
-$ CALL Bad_environment "TMP"
-$ CALL Bad_environment "LIB"
-$ CALL Bad_environment "T"
-$ CALL Bad_environment "FOO"
-$ CALL Bad_environment "EXT"
-$ CALL Bad_environment "TEST" "SYMBOL"
-$ IF f$search("config.msg") .eqs. "" THEN echo "OK."
-$!
-$! %Config-I-VMS, write perl_setup.com here
-$!
-$ IF (.NOT.perl_symbol)
-$ THEN
-$ file_2_find = "[-]''packageup'.cld"
-$ echo ""
-$ echo4 "The perl.cld file is now being written..."
-$ OPEN/WRITE CONFIG 'file_2_find'
-$ ext = ".exe"
-$ IF ((sharedperl) .AND. (F$GETSYI("HW_MODEL") .GE. 1024)) THEN ext := .AXE
-$ IF (use_vmsdebug_perl)
-$ THEN
-$ WRITE CONFIG "define verb dbgperl"
-$ WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]dbgperl''ext'")
-$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
-$ WRITE CONFIG ""
-$ WRITE CONFIG "define verb perl"
-$ WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]ndbgPerl''ext'")
-$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
-$ ELSE
-$ WRITE CONFIG "define verb perl"
-$ WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]perl''ext'")
-$ WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
-$ ENDIF
-$ CLOSE CONFIG
-$ ENDIF ! (.NOT.perl_symbol)
-$ echo ""
-$ echo4 "The perl_setup.com file is now being written..."
-$ file_2_find = "[-]perl_setup.com"
-$ OPEN/WRITE CONFIG 'file_2_find'
-$ WRITE CONFIG "$!"
-$ WRITE CONFIG "$! Perl_Setup.com ''cf_time'"
-$ IF cf_email.NES.perladmin
-$ THEN
-$ WRITE CONFIG "$! perl configured by ''cf_email'"
-$ ELSE
-$ WRITE CONFIG "$! This perl configured & administered by ''perladmin'"
-$ ENDIF
-$ WRITE CONFIG "$!"
-$ prefix = prefix - "000000."
-$ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN -
- prefix = prefix - "]" + ".]"
-$ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' ''prefix'"
-$ WRITE CONFIG "$ ext = "".exe"""
-$ IF sharedperl
-$ THEN
-$ write config "$ if f$getsyi(""HW_MODEL"") .ge. 1024 then ext = "".AXE"""
-$ ENDIF
-$ IF (perl_symbol)
-$ THEN
-$ IF (use_vmsdebug_perl)
-$ THEN
-$ WRITE CONFIG "$ dbgperl :== $''vms_prefix':[000000]dbgPerl'ext'"
-$ WRITE CONFIG "$ perl :== $''vms_prefix':[000000]ndbgPerl'ext'"
-$ WRITE CONFIG "$ define dbgPerlShr ''vms_prefix':[000000]dbgPerlShr'ext'"
-$ ELSE
-$ WRITE CONFIG "$ perl :== $''vms_prefix':[000000]Perl'ext'"
-$ WRITE CONFIG "$ define PerlShr ''vms_prefix':[000000]PerlShr'ext'"
-$ ENDIF
-$ ELSE ! .NOT.perl_symbol
-$ IF (use_vmsdebug_perl)
-$ THEN
-$ WRITE CONFIG "$ define dbgPerlShr ''vms_prefix':[000000]dbgPerlShr'ext'"
-$ ELSE
-$ WRITE CONFIG "$ define PerlShr ''vms_prefix':[000000]PerlShr'ext'"
-$ ENDIF
-$ IF perl_verb .EQS. "PROCESS"
-$ THEN
-$ WRITE CONFIG "$ set command ''vms_prefix':[000000]''packageup'.CLD"
-$ ENDIF
-$ ENDIF ! perl_symbol
-$ WRITE CONFIG "$ define/nolog pod2text ''vms_prefix':[lib.pod]pod2text.com"
-$ WRITE CONFIG "$ define/nolog pod2html ''vms_prefix':[lib.pod]pod2html.com"
-$ WRITE CONFIG "$ define/nolog pod2man ''vms_prefix':[lib.pod]pod2man.com"
-$!
-$ IF (tzneedset)
-$ THEN
-$ WRITE CONFIG "$ define SYS$TIMEZONE_DIFFERENTIAL ''tzd'"
-$ ELSE !leave in but commented out (in case setting was from perl :-)
-$ WRITE CONFIG "$! define SYS$TIMEZONE_DIFFERENTIAL ''tzd'"
-$ ENDIF
-$ WRITE CONFIG "$!"
-$ WRITE CONFIG "$! Symbols for commonly used scripts:"
-$ WRITE CONFIG "$!"
-$ IF (perl_symbol)
-$ THEN
-$ WRITE CONFIG "$ Perldoc == ""'"+"'Perl' ''vms_prefix':[lib.pod]Perldoc.com -t"""
-$ WRITE CONFIG "$ pod2text == ""'"+"'Perl' pod2text"""
-$ WRITE CONFIG "$ pod2html == ""'"+"'Perl' pod2html"""
-$ WRITE CONFIG "$ pod2latex == ""'"+"'Perl' ''vms_prefix':[lib.pod]pod2latex.com"""
-$ WRITE CONFIG "$!pod2man == ""'"+"'Perl' pod2man"""
-$ WRITE CONFIG "$!Perlbug == ""'"+"'Perl' ''vms_prefix':[lib]Perlbug.com"""
-$ WRITE CONFIG "$ c2ph == ""'"+"'Perl' ''vms_prefix':[utils]c2ph.com"""
-$ IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
-$ THEN
-$ WRITE CONFIG "$ dprofpp == ""'"+"'Perl' ''vms_prefix':[utils]dprofpp.com"""
-$ ENDIF
-$ WRITE CONFIG "$ h2ph == ""'"+"'Perl' ''vms_prefix':[utils]h2ph.com"""
-$ WRITE CONFIG "$ h2xs == ""'"+"'Perl' ''vms_prefix':[utils]h2xs.com"""
-$ WRITE CONFIG "$!perlcc == ""'"+"'Perl' ''vms_prefix':[utils]perlcc.com"""
-$ WRITE CONFIG "$ splain == ""'"+"'Perl' ''vms_prefix':[utils]splain.com"""
-$ ELSE
-$ WRITE CONFIG "$ Perldoc == ""Perl ''vms_prefix':[lib.pod]Perldoc.com -t"""
-$ WRITE CONFIG "$ pod2text == ""Perl pod2text"""
-$ WRITE CONFIG "$ pod2html == ""Perl pod2html"""
-$ WRITE CONFIG "$ pod2latex == ""Perl ''vms_prefix':[lib.pod]pod2latex.com"""
-$ WRITE CONFIG "$!pod2man == ""Perl pod2man"""
-$ WRITE CONFIG "$!Perlbug == ""Perl ''vms_prefix':[lib]Perlbug.com"""
-$ WRITE CONFIG "$ c2ph == ""Perl ''vms_prefix':[utils]c2ph.com"""
-$ IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
-$ THEN
-$ WRITE CONFIG "$ dprofpp == ""Perl ''vms_prefix':[utils]dprofpp.com"""
-$ ENDIF
-$ WRITE CONFIG "$ h2ph == ""Perl ''vms_prefix':[utils]h2ph.com"""
-$ WRITE CONFIG "$ h2xs == ""Perl ''vms_prefix':[utils]h2xs.com"""
-$ WRITE CONFIG "$!perlcc == ""Perl ''vms_prefix':[utils]perlcc.com"""
-$ WRITE CONFIG "$ splain == ""Perl ''vms_prefix':[utils]splain.com"""
-$ ENDIF
-$ CLOSE CONFIG
-$!
-$ echo ""
-$ echo "The file can be found at:"
-$ echo4 " ''F$SEARCH(file_2_find)'"
-$ echo "Add that file (or an @ call to it) to your [SY]LOGIN.COM"
-$ echo "when you are satisfied with a successful compilation,"
-$ echo "testing, and installation of your perl."
-$ echo ""
-$ IF ((.NOT.perl_symbol) .AND. (perl_verb .EQS. "DCLTABLES"))
-$ THEN
-$ file_2_find = "[-]''packageup'_install.com"
-$ OPEN/WRITE CONFIG 'file_2_find'
-$ WRITE CONFIG "$ set command perl /table=sys$common:[syslib]dcltables.exe -"
-$ WRITE CONFIG " /output=sys$common:[syslib]dcltables.exe"
-$ WRITE CONFIG "$ install replace sys$common:[syslib]dcltables.exe"
-$ CLOSE CONFIG
-$ echo4 ""
-$ echo4 "In order to install the ''packageup' verb into DCLTABLES run:"
-$ echo4 " @ ''F$SEARCH(file_2_find)'"
-$ echo4 "after a successful build, test, and install. Do so with CMKRNL privilege."
-$ echo4 ""
-$ ENDIF
-$!
-$!figure out where we "are" by parsing 'vms_default_directory_name'
-$!
-$ set_def_command = ""
-$ dflt = F$ENVIRONMENT("DEFAULT") - ".UU]"
-$ tmp = vms_default_directory_name - dflt - "]"
-$ i = 0
-$ IF tmp .EQS. "" THEN GOTO Beyond_set_def_loop
-$Set_def_loop:
-$ tmp1 = F$ELEMENT(i,".",tmp)
-$ IF tmp1 .EQS. "." THEN GOTO Beyond_set_def_loop
-$ IF i .EQ. 0
-$ THEN set_def_command = "set default [-"
-$ ELSE set_def_command = set_def_command + "-"
-$ ENDIF
-$ i = i + 1
-$ GOTO Set_def_loop
-$Beyond_set_def_loop:
-$ IF set_def_command.NES.""
-$ THEN
-$ set_def_command = set_def_command - "-" + "]"
-$ echo4 ""
-$ echo4 "In order to build ''package' you must now issue the commands:"
-$ echo4 ""
-$ echo4 " ''set_def_command'"
-$ ELSE
-$ echo4 ""
-$ echo4 "In order to build ''package' you must now issue the command:"
-$ echo4 ""
-$ ENDIF
-$ echo4 " ''make'''makefile'", macros
-$ echo4 ""
-$!
-$ IF ( F$SEARCH("config.msg").NES."" )
-$ THEN
-$ echo "Hmm. I also noted the following information while running:"
-$ echo ""
-$ type config.msg
-$ SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) config.msg
-$ DELETE/NOLOG/NOCONFIRM config.msg;
-$ ENDIF
-$!
-$Clean_up:
-$ IF (silent)
-$ THEN
-$ DEASSIGN SYS$OUTPUT
-$! DEASSIGN SYS$ERROR
-$ ENDIF
-$ IF F$GETJPI("","FILCNT").GT.vms_filcnt THEN CLOSE CONFIG
-$ IF F$GETJPI("","FILCNT").GT.vms_filcnt
-$ THEN WRITE SYS$ERROR "%Config-W-VMS, WARNING: There is a file still open"
-$ ENDIF
-$ dflt = F$ENVIRONMENT("DEFAULT")
-$ IF F$LOCATE("UU]",dflt).EQS.(F$LENGTH(dflt)-3)
-$ THEN
-$ IF ( F$SEARCH("[]*.*").NES."" ) THEN DELETE/NOLOG/NOCONFIRM []*.*;*
-$ SET DEFAULT [-]
-$ SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) UU.DIR
-$ DELETE/NOLOG/NOCONFIRM UU.DIR;
-$ ENDIF
-$ SET DEFAULT 'vms_default_directory_name' !be kind rewind
-$ EXIT
-$!: End of Configure
diff --git a/contrib/perl5/configure.gnu b/contrib/perl5/configure.gnu
deleted file mode 100755
index f98eb76..0000000
--- a/contrib/perl5/configure.gnu
+++ /dev/null
@@ -1,132 +0,0 @@
-#! /bin/sh
-#
-# $Id: configure,v 3.0.1.1 1995/07/25 14:16:21 ram Exp $
-#
-# GNU configure-like front end to metaconfig's Configure.
-#
-# Written by Andy Dougherty <doughera@lafcol.lafayette.edu>
-# and Matthew Green <mrg@mame.mu.oz.au>.
-#
-# Reformatted and modified for inclusion in the dist-3.0 package by
-# Raphael Manfredi <ram@hptnos02.grenoble.hp.com>.
-#
-# This script belongs to the public domain and may be freely redistributed.
-#
-# The remaining of this leading shell comment may be removed if you
-# include this script in your own package.
-#
-# $Log: configure,v $
-# Revision 3.0.1.1 1995/07/25 14:16:21 ram
-# patch56: created
-#
-
-(exit $?0) || exec sh $0 $argv:q
-
-case "$0" in
-*configure)
- if cmp $0 `echo $0 | sed -e s/configure/Configure/` >/dev/null; then
- echo "Your configure and Configure scripts seem to be identical."
- echo "This can happen on filesystems that aren't fully case sensitive."
- echo "You'll have to explicitly extract Configure and run that."
- exit 1
- fi
- ;;
-esac
-
-opts=''
-verbose=''
-create='-e'
-while test $# -gt 0; do
- case $1 in
- --help)
- cat <<EOM
-Usage: configure.gnu [options]
-This is GNU configure-like front end for a metaconfig-generated Configure.
-It emulates the following GNU configure options (must be fully spelled out):
- --help
- --no-create
- --prefix=PREFIX
- --cache-file (ignored)
- --quiet
- --silent
- --verbose
- --version
-
-And it honours these environment variables: CC, CFLAGS and DEFS.
-EOM
- exit 0
- ;;
- --no-create)
- create='-E'
- shift
- ;;
- --prefix=*)
- arg=`echo $1 | sed 's/--prefix=/-Dprefix=/'`
- opts="$opts $arg"
- shift
- ;;
- --cache-file=*)
- shift # Just ignore it.
- ;;
- --quiet|--silent)
- exec >/dev/null 2>&1
- shift
- ;;
- --verbose)
- verbose=true
- shift
- ;;
- --version)
- copt="$copt -V"
- shift
- ;;
- --*)
- opt=`echo $1 | sed 's/=.*//'`
- echo "This GNU configure front end does not understand $opt"
- exit 1
- ;;
- *)
- opts="$opts '$1'"
- shift
- ;;
- esac
-done
-
-case "$CC" in
-'') ;;
-*) opts="$opts -Dcc='$CC'";;
-esac
-
-# Join DEFS and CFLAGS together.
-ccflags=''
-case "$DEFS" in
-'') ;;
-*) ccflags=$DEFS;;
-esac
-case "$CFLAGS" in
-'') ;;
-*) ccflags="$ccflags $CFLAGS";;
-esac
-case "$ccflags" in
-'') ;;
-*) opts="$opts -Dccflags='$ccflags'";;
-esac
-case "$LDFLAGS" in
-'') ;;
-*) ldflags="$ldflags $LDFLAGS";;
-esac
-case "$ldflags" in
-'') ;;
-*) opts="$opts -Dldflags='$ldflags'";;
-esac
-
-# Don't use -s if they want verbose mode
-case "$verbose" in
-'') copt="$copt -ds";;
-*) copt="$copt -d";;
-esac
-
-eval "set X sh Configure $copt $create $opts"
-shift
-echo "$@"
-exec "$@"
diff --git a/contrib/perl5/cop.h b/contrib/perl5/cop.h
deleted file mode 100644
index ec32c35..0000000
--- a/contrib/perl5/cop.h
+++ /dev/null
@@ -1,519 +0,0 @@
-/* cop.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-struct cop {
- BASEOP
- char * cop_label; /* label for this construct */
-#ifdef USE_ITHREADS
- char * cop_stashpv; /* package line was compiled in */
- char * cop_file; /* file name the following line # is from */
-#else
- HV * cop_stash; /* package line was compiled in */
- GV * cop_filegv; /* file the following line # is from */
-#endif
- U32 cop_seq; /* parse sequence number */
- I32 cop_arybase; /* array base this line was compiled with */
- line_t cop_line; /* line # of this command */
- SV * cop_warnings; /* lexical warnings bitmask */
-};
-
-#define Nullcop Null(COP*)
-
-#ifdef USE_ITHREADS
-# define CopFILE(c) ((c)->cop_file)
-# define CopFILEGV(c) (CopFILE(c) \
- ? gv_fetchfile(CopFILE(c)) : Nullgv)
-# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv))
-# define CopFILESV(c) (CopFILE(c) \
- ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
-# define CopFILEAV(c) (CopFILE(c) \
- ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
-# define CopSTASHPV(c) ((c)->cop_stashpv)
-# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
-# define CopSTASH(c) (CopSTASHPV(c) \
- ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
-# define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
-# define CopSTASH_eq(c,hv) ((hv) \
- && (CopSTASHPV(c) == HvNAME(hv) \
- || (CopSTASHPV(c) && HvNAME(hv) \
- && strEQ(CopSTASHPV(c), HvNAME(hv)))))
-#else
-# define CopFILEGV(c) ((c)->cop_filegv)
-# define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
-# define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv))
-# define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
-# define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
-# define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
-# define CopSTASH(c) ((c)->cop_stash)
-# define CopSTASH_set(c,hv) ((c)->cop_stash = (hv))
-# define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
- /* cop_stash is not refcounted */
-# define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
-# define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv))
-#endif /* USE_ITHREADS */
-
-#define CopSTASH_ne(c,hv) (!CopSTASH_eq(c,hv))
-#define CopLINE(c) ((c)->cop_line)
-#define CopLINE_inc(c) (++CopLINE(c))
-#define CopLINE_dec(c) (--CopLINE(c))
-#define CopLINE_set(c,l) (CopLINE(c) = (l))
-
-/*
- * Here we have some enormously heavy (or at least ponderous) wizardry.
- */
-
-/* subroutine context */
-struct block_sub {
- CV * cv;
- GV * gv;
- GV * dfoutgv;
-#ifndef USE_THREADS
- AV * savearray;
-#endif /* USE_THREADS */
- AV * argarray;
- U16 olddepth;
- U8 hasargs;
- U8 lval; /* XXX merge lval and hasargs? */
- SV ** oldcurpad;
-};
-
-#define PUSHSUB(cx) \
- cx->blk_sub.cv = cv; \
- cx->blk_sub.olddepth = CvDEPTH(cv); \
- cx->blk_sub.hasargs = hasargs; \
- cx->blk_sub.lval = PL_op->op_private & \
- (OPpLVAL_INTRO|OPpENTERSUB_INARGS);
-
-#define PUSHFORMAT(cx) \
- cx->blk_sub.cv = cv; \
- cx->blk_sub.gv = gv; \
- cx->blk_sub.hasargs = 0; \
- cx->blk_sub.dfoutgv = PL_defoutgv; \
- (void)SvREFCNT_inc(cx->blk_sub.dfoutgv)
-
-#ifdef USE_THREADS
-# define POP_SAVEARRAY() NOOP
-#else
-# define POP_SAVEARRAY() \
- STMT_START { \
- SvREFCNT_dec(GvAV(PL_defgv)); \
- GvAV(PL_defgv) = cx->blk_sub.savearray; \
- } STMT_END
-#endif /* USE_THREADS */
-
-/* junk in @_ spells trouble when cloning CVs and in pp_caller(), so don't
- * leave any (a fast av_clear(ary), basically) */
-#define CLEAR_ARGARRAY(ary) \
- STMT_START { \
- AvMAX(ary) += AvARRAY(ary) - AvALLOC(ary); \
- SvPVX(ary) = (char*)AvALLOC(ary); \
- AvFILLp(ary) = -1; \
- } STMT_END
-
-#define POPSUB(cx,sv) \
- STMT_START { \
- if (cx->blk_sub.hasargs) { \
- POP_SAVEARRAY(); \
- /* abandon @_ if it got reified */ \
- if (AvREAL(cx->blk_sub.argarray)) { \
- SSize_t fill = AvFILLp(cx->blk_sub.argarray); \
- SvREFCNT_dec(cx->blk_sub.argarray); \
- cx->blk_sub.argarray = newAV(); \
- av_extend(cx->blk_sub.argarray, fill); \
- AvFLAGS(cx->blk_sub.argarray) = AVf_REIFY; \
- cx->blk_sub.oldcurpad[0] = (SV*)cx->blk_sub.argarray; \
- } \
- else { \
- CLEAR_ARGARRAY(cx->blk_sub.argarray); \
- } \
- } \
- sv = (SV*)cx->blk_sub.cv; \
- if (sv && (CvDEPTH((CV*)sv) = cx->blk_sub.olddepth)) \
- sv = Nullsv; \
- } STMT_END
-
-#define LEAVESUB(sv) \
- STMT_START { \
- if (sv) \
- SvREFCNT_dec(sv); \
- } STMT_END
-
-#define POPFORMAT(cx) \
- setdefout(cx->blk_sub.dfoutgv); \
- SvREFCNT_dec(cx->blk_sub.dfoutgv);
-
-/* eval context */
-struct block_eval {
- I32 old_in_eval;
- I32 old_op_type;
- SV * old_namesv;
- OP * old_eval_root;
- SV * cur_text;
-};
-
-#define PUSHEVAL(cx,n,fgv) \
- STMT_START { \
- cx->blk_eval.old_in_eval = PL_in_eval; \
- cx->blk_eval.old_op_type = PL_op->op_type; \
- cx->blk_eval.old_namesv = (n ? newSVpv(n,0) : Nullsv); \
- cx->blk_eval.old_eval_root = PL_eval_root; \
- cx->blk_eval.cur_text = PL_linestr; \
- } STMT_END
-
-#define POPEVAL(cx) \
- STMT_START { \
- PL_in_eval = cx->blk_eval.old_in_eval; \
- optype = cx->blk_eval.old_op_type; \
- PL_eval_root = cx->blk_eval.old_eval_root; \
- if (cx->blk_eval.old_namesv) \
- sv_2mortal(cx->blk_eval.old_namesv); \
- } STMT_END
-
-/* loop context */
-struct block_loop {
- char * label;
- I32 resetsp;
- OP * redo_op;
- OP * next_op;
- OP * last_op;
-#ifdef USE_ITHREADS
- void * iterdata;
- SV ** oldcurpad;
-#else
- SV ** itervar;
-#endif
- SV * itersave;
- SV * iterlval;
- AV * iterary;
- IV iterix;
- IV itermax;
-};
-
-#ifdef USE_ITHREADS
-# define CxITERVAR(c) \
- ((c)->blk_loop.iterdata \
- ? (CxPADLOOP(cx) \
- ? &((c)->blk_loop.oldcurpad)[(PADOFFSET)(c)->blk_loop.iterdata] \
- : &GvSV((GV*)(c)->blk_loop.iterdata)) \
- : (SV**)NULL)
-# define CX_ITERDATA_SET(cx,idata) \
- cx->blk_loop.oldcurpad = PL_curpad; \
- if ((cx->blk_loop.iterdata = (idata))) \
- cx->blk_loop.itersave = SvREFCNT_inc(*CxITERVAR(cx));
-#else
-# define CxITERVAR(c) ((c)->blk_loop.itervar)
-# define CX_ITERDATA_SET(cx,ivar) \
- if ((cx->blk_loop.itervar = (SV**)(ivar))) \
- cx->blk_loop.itersave = SvREFCNT_inc(*CxITERVAR(cx));
-#endif
-
-#define PUSHLOOP(cx, dat, s) \
- cx->blk_loop.label = PL_curcop->cop_label; \
- cx->blk_loop.resetsp = s - PL_stack_base; \
- cx->blk_loop.redo_op = cLOOP->op_redoop; \
- cx->blk_loop.next_op = cLOOP->op_nextop; \
- cx->blk_loop.last_op = cLOOP->op_lastop; \
- cx->blk_loop.iterlval = Nullsv; \
- cx->blk_loop.iterary = Nullav; \
- cx->blk_loop.iterix = -1; \
- CX_ITERDATA_SET(cx,dat);
-
-#define POPLOOP(cx) \
- SvREFCNT_dec(cx->blk_loop.iterlval); \
- if (CxITERVAR(cx)) { \
- SV **s_v_p = CxITERVAR(cx); \
- sv_2mortal(*s_v_p); \
- *s_v_p = cx->blk_loop.itersave; \
- } \
- if (cx->blk_loop.iterary && cx->blk_loop.iterary != PL_curstack)\
- SvREFCNT_dec(cx->blk_loop.iterary);
-
-/* context common to subroutines, evals and loops */
-struct block {
- I32 blku_oldsp; /* stack pointer to copy stuff down to */
- COP * blku_oldcop; /* old curcop pointer */
- I32 blku_oldretsp; /* return stack index */
- I32 blku_oldmarksp; /* mark stack index */
- I32 blku_oldscopesp; /* scope stack index */
- PMOP * blku_oldpm; /* values of pattern match vars */
- U8 blku_gimme; /* is this block running in list context? */
-
- union {
- struct block_sub blku_sub;
- struct block_eval blku_eval;
- struct block_loop blku_loop;
- } blk_u;
-};
-#define blk_oldsp cx_u.cx_blk.blku_oldsp
-#define blk_oldcop cx_u.cx_blk.blku_oldcop
-#define blk_oldretsp cx_u.cx_blk.blku_oldretsp
-#define blk_oldmarksp cx_u.cx_blk.blku_oldmarksp
-#define blk_oldscopesp cx_u.cx_blk.blku_oldscopesp
-#define blk_oldpm cx_u.cx_blk.blku_oldpm
-#define blk_gimme cx_u.cx_blk.blku_gimme
-#define blk_sub cx_u.cx_blk.blk_u.blku_sub
-#define blk_eval cx_u.cx_blk.blk_u.blku_eval
-#define blk_loop cx_u.cx_blk.blk_u.blku_loop
-
-/* Enter a block. */
-#define PUSHBLOCK(cx,t,sp) CXINC, cx = &cxstack[cxstack_ix], \
- cx->cx_type = t, \
- cx->blk_oldsp = sp - PL_stack_base, \
- cx->blk_oldcop = PL_curcop, \
- cx->blk_oldmarksp = PL_markstack_ptr - PL_markstack, \
- cx->blk_oldscopesp = PL_scopestack_ix, \
- cx->blk_oldretsp = PL_retstack_ix, \
- cx->blk_oldpm = PL_curpm, \
- cx->blk_gimme = gimme; \
- DEBUG_l( PerlIO_printf(Perl_debug_log, "Entering block %ld, type %s\n", \
- (long)cxstack_ix, PL_block_type[CxTYPE(cx)]); )
-
-/* Exit a block (RETURN and LAST). */
-#define POPBLOCK(cx,pm) cx = &cxstack[cxstack_ix--], \
- newsp = PL_stack_base + cx->blk_oldsp, \
- PL_curcop = cx->blk_oldcop, \
- PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp, \
- PL_scopestack_ix = cx->blk_oldscopesp, \
- PL_retstack_ix = cx->blk_oldretsp, \
- pm = cx->blk_oldpm, \
- gimme = cx->blk_gimme; \
- DEBUG_l( PerlIO_printf(Perl_debug_log, "Leaving block %ld, type %s\n", \
- (long)cxstack_ix+1,PL_block_type[CxTYPE(cx)]); )
-
-/* Continue a block elsewhere (NEXT and REDO). */
-#define TOPBLOCK(cx) cx = &cxstack[cxstack_ix], \
- PL_stack_sp = PL_stack_base + cx->blk_oldsp, \
- PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp, \
- PL_scopestack_ix = cx->blk_oldscopesp, \
- PL_retstack_ix = cx->blk_oldretsp, \
- PL_curpm = cx->blk_oldpm
-
-/* substitution context */
-struct subst {
- I32 sbu_iters;
- I32 sbu_maxiters;
- I32 sbu_rflags;
- I32 sbu_oldsave;
- bool sbu_once;
- bool sbu_rxtainted;
- char * sbu_orig;
- SV * sbu_dstr;
- SV * sbu_targ;
- char * sbu_s;
- char * sbu_m;
- char * sbu_strend;
- void * sbu_rxres;
- REGEXP * sbu_rx;
-};
-#define sb_iters cx_u.cx_subst.sbu_iters
-#define sb_maxiters cx_u.cx_subst.sbu_maxiters
-#define sb_rflags cx_u.cx_subst.sbu_rflags
-#define sb_oldsave cx_u.cx_subst.sbu_oldsave
-#define sb_once cx_u.cx_subst.sbu_once
-#define sb_rxtainted cx_u.cx_subst.sbu_rxtainted
-#define sb_orig cx_u.cx_subst.sbu_orig
-#define sb_dstr cx_u.cx_subst.sbu_dstr
-#define sb_targ cx_u.cx_subst.sbu_targ
-#define sb_s cx_u.cx_subst.sbu_s
-#define sb_m cx_u.cx_subst.sbu_m
-#define sb_strend cx_u.cx_subst.sbu_strend
-#define sb_rxres cx_u.cx_subst.sbu_rxres
-#define sb_rx cx_u.cx_subst.sbu_rx
-
-#define PUSHSUBST(cx) CXINC, cx = &cxstack[cxstack_ix], \
- cx->sb_iters = iters, \
- cx->sb_maxiters = maxiters, \
- cx->sb_rflags = r_flags, \
- cx->sb_oldsave = oldsave, \
- cx->sb_once = once, \
- cx->sb_rxtainted = rxtainted, \
- cx->sb_orig = orig, \
- cx->sb_dstr = dstr, \
- cx->sb_targ = targ, \
- cx->sb_s = s, \
- cx->sb_m = m, \
- cx->sb_strend = strend, \
- cx->sb_rxres = Null(void*), \
- cx->sb_rx = rx, \
- cx->cx_type = CXt_SUBST; \
- rxres_save(&cx->sb_rxres, rx)
-
-#define POPSUBST(cx) cx = &cxstack[cxstack_ix--]; \
- rxres_free(&cx->sb_rxres)
-
-struct context {
- U32 cx_type; /* what kind of context this is */
- union {
- struct block cx_blk;
- struct subst cx_subst;
- } cx_u;
-};
-
-#define CXTYPEMASK 0xff
-#define CXt_NULL 0
-#define CXt_SUB 1
-#define CXt_EVAL 2
-#define CXt_LOOP 3
-#define CXt_SUBST 4
-#define CXt_BLOCK 5
-#define CXt_FORMAT 6
-
-/* private flags for CXt_EVAL */
-#define CXp_REAL 0x00000100 /* truly eval'', not a lookalike */
-#define CXp_TRYBLOCK 0x00000200 /* eval{}, not eval'' or similar */
-
-#ifdef USE_ITHREADS
-/* private flags for CXt_LOOP */
-# define CXp_PADVAR 0x00000100 /* itervar lives on pad, iterdata
- has pad offset; if not set,
- iterdata holds GV* */
-# define CxPADLOOP(c) (((c)->cx_type & (CXt_LOOP|CXp_PADVAR)) \
- == (CXt_LOOP|CXp_PADVAR))
-#endif
-
-#define CxTYPE(c) ((c)->cx_type & CXTYPEMASK)
-#define CxREALEVAL(c) (((c)->cx_type & (CXt_EVAL|CXp_REAL)) \
- == (CXt_EVAL|CXp_REAL))
-#define CxTRYBLOCK(c) (((c)->cx_type & (CXt_EVAL|CXp_TRYBLOCK)) \
- == (CXt_EVAL|CXp_TRYBLOCK))
-
-#define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc()))
-
-/* "gimme" values */
-
-/*
-=for apidoc AmU||G_SCALAR
-Used to indicate scalar context. See C<GIMME_V>, C<GIMME>, and
-L<perlcall>.
-
-=for apidoc AmU||G_ARRAY
-Used to indicate list context. See C<GIMME_V>, C<GIMME> and
-L<perlcall>.
-
-=for apidoc AmU||G_VOID
-Used to indicate void context. See C<GIMME_V> and L<perlcall>.
-
-=for apidoc AmU||G_DISCARD
-Indicates that arguments returned from a callback should be discarded. See
-L<perlcall>.
-
-=for apidoc AmU||G_EVAL
-
-Used to force a Perl C<eval> wrapper around a callback. See
-L<perlcall>.
-
-=for apidoc AmU||G_NOARGS
-
-Indicates that no arguments are being sent to a callback. See
-L<perlcall>.
-
-=cut
-*/
-
-#define G_SCALAR 0
-#define G_ARRAY 1
-#define G_VOID 128 /* skip this bit when adding flags below */
-
-/* extra flags for Perl_call_* routines */
-#define G_DISCARD 2 /* Call FREETMPS. */
-#define G_EVAL 4 /* Assume eval {} around subroutine call. */
-#define G_NOARGS 8 /* Don't construct a @_ array. */
-#define G_KEEPERR 16 /* Append errors to $@, don't overwrite it */
-#define G_NODEBUG 32 /* Disable debugging at toplevel. */
-#define G_METHOD 64 /* Calling method. */
-
-/* flag bits for PL_in_eval */
-#define EVAL_NULL 0 /* not in an eval */
-#define EVAL_INEVAL 1 /* some enclosing scope is an eval */
-#define EVAL_WARNONLY 2 /* used by yywarn() when calling yyerror() */
-#define EVAL_KEEPERR 4 /* set by Perl_call_sv if G_KEEPERR */
-#define EVAL_INREQUIRE 8 /* The code is being required. */
-
-/* Support for switching (stack and block) contexts.
- * This ensures magic doesn't invalidate local stack and cx pointers.
- */
-
-#define PERLSI_UNKNOWN -1
-#define PERLSI_UNDEF 0
-#define PERLSI_MAIN 1
-#define PERLSI_MAGIC 2
-#define PERLSI_SORT 3
-#define PERLSI_SIGNAL 4
-#define PERLSI_OVERLOAD 5
-#define PERLSI_DESTROY 6
-#define PERLSI_WARNHOOK 7
-#define PERLSI_DIEHOOK 8
-#define PERLSI_REQUIRE 9
-
-struct stackinfo {
- AV * si_stack; /* stack for current runlevel */
- PERL_CONTEXT * si_cxstack; /* context stack for runlevel */
- I32 si_cxix; /* current context index */
- I32 si_cxmax; /* maximum allocated index */
- I32 si_type; /* type of runlevel */
- struct stackinfo * si_prev;
- struct stackinfo * si_next;
- I32 si_markoff; /* offset where markstack begins for us.
- * currently used only with DEBUGGING,
- * but not #ifdef-ed for bincompat */
-};
-
-typedef struct stackinfo PERL_SI;
-
-#define cxstack (PL_curstackinfo->si_cxstack)
-#define cxstack_ix (PL_curstackinfo->si_cxix)
-#define cxstack_max (PL_curstackinfo->si_cxmax)
-
-#ifdef DEBUGGING
-# define SET_MARK_OFFSET \
- PL_curstackinfo->si_markoff = PL_markstack_ptr - PL_markstack
-#else
-# define SET_MARK_OFFSET NOOP
-#endif
-
-#define PUSHSTACKi(type) \
- STMT_START { \
- PERL_SI *next = PL_curstackinfo->si_next; \
- if (!next) { \
- next = new_stackinfo(32, 2048/sizeof(PERL_CONTEXT) - 1); \
- next->si_prev = PL_curstackinfo; \
- PL_curstackinfo->si_next = next; \
- } \
- next->si_type = type; \
- next->si_cxix = -1; \
- AvFILLp(next->si_stack) = 0; \
- SWITCHSTACK(PL_curstack,next->si_stack); \
- PL_curstackinfo = next; \
- SET_MARK_OFFSET; \
- } STMT_END
-
-#define PUSHSTACK PUSHSTACKi(PERLSI_UNKNOWN)
-
-/* POPSTACK works with PL_stack_sp, so it may need to be bracketed by
- * PUTBACK/SPAGAIN to flush/refresh any local SP that may be active */
-#define POPSTACK \
- STMT_START { \
- dSP; \
- PERL_SI *prev = PL_curstackinfo->si_prev; \
- if (!prev) { \
- PerlIO_printf(Perl_error_log, "panic: POPSTACK\n"); \
- my_exit(1); \
- } \
- SWITCHSTACK(PL_curstack,prev->si_stack); \
- /* don't free prev here, free them all at the END{} */ \
- PL_curstackinfo = prev; \
- } STMT_END
-
-#define POPSTACK_TO(s) \
- STMT_START { \
- while (PL_curstack != s) { \
- dounwind(-1); \
- POPSTACK; \
- } \
- } STMT_END
diff --git a/contrib/perl5/cv.h b/contrib/perl5/cv.h
deleted file mode 100644
index 2bce8b2..0000000
--- a/contrib/perl5/cv.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/* cv.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/* This structure much match XPVCV in B/C.pm and the beginning of XPVFM
- * in sv.h */
-
-struct xpvcv {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xp_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xof_off; /* integer value */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* magic for scalar array */
- HV* xmg_stash; /* class package */
-
- HV * xcv_stash;
- OP * xcv_start;
- OP * xcv_root;
- void (*xcv_xsub) (pTHXo_ CV*);
- ANY xcv_xsubany;
- GV * xcv_gv;
- char * xcv_file;
- long xcv_depth; /* >= 2 indicates recursive call */
- AV * xcv_padlist;
- CV * xcv_outside;
-#ifdef USE_THREADS
- perl_mutex *xcv_mutexp;
- struct perl_thread *xcv_owner; /* current owner thread */
-#endif /* USE_THREADS */
- cv_flags_t xcv_flags;
-};
-
-/*
-=for apidoc AmU||Nullcv
-Null CV pointer.
-
-=for apidoc Am|HV*|CvSTASH|CV* cv
-Returns the stash of the CV.
-
-=cut
-*/
-
-#define Nullcv Null(CV*)
-
-#define CvSTASH(sv) ((XPVCV*)SvANY(sv))->xcv_stash
-#define CvSTART(sv) ((XPVCV*)SvANY(sv))->xcv_start
-#define CvROOT(sv) ((XPVCV*)SvANY(sv))->xcv_root
-#define CvXSUB(sv) ((XPVCV*)SvANY(sv))->xcv_xsub
-#define CvXSUBANY(sv) ((XPVCV*)SvANY(sv))->xcv_xsubany
-#define CvGV(sv) ((XPVCV*)SvANY(sv))->xcv_gv
-#define CvFILE(sv) ((XPVCV*)SvANY(sv))->xcv_file
-#define CvFILEGV(sv) (gv_fetchfile(CvFILE(sv))
-#define CvDEPTH(sv) ((XPVCV*)SvANY(sv))->xcv_depth
-#define CvPADLIST(sv) ((XPVCV*)SvANY(sv))->xcv_padlist
-#define CvOUTSIDE(sv) ((XPVCV*)SvANY(sv))->xcv_outside
-#ifdef USE_THREADS
-#define CvMUTEXP(sv) ((XPVCV*)SvANY(sv))->xcv_mutexp
-#define CvOWNER(sv) ((XPVCV*)SvANY(sv))->xcv_owner
-#endif /* USE_THREADS */
-#define CvFLAGS(sv) ((XPVCV*)SvANY(sv))->xcv_flags
-
-#define CVf_CLONE 0x0001 /* anon CV uses external lexicals */
-#define CVf_CLONED 0x0002 /* a clone of one of those */
-#define CVf_ANON 0x0004 /* CvGV() can't be trusted */
-#define CVf_OLDSTYLE 0x0008
-#define CVf_UNIQUE 0x0010 /* can't be cloned */
-#define CVf_NODEBUG 0x0020 /* no DB::sub indirection for this CV
- (esp. useful for special XSUBs) */
-#define CVf_METHOD 0x0040 /* CV is explicitly marked as a method */
-#define CVf_LOCKED 0x0080 /* CV locks itself or first arg on entry */
-#define CVf_LVALUE 0x0100 /* CV return value can be used as lvalue */
-
-#define CvCLONE(cv) (CvFLAGS(cv) & CVf_CLONE)
-#define CvCLONE_on(cv) (CvFLAGS(cv) |= CVf_CLONE)
-#define CvCLONE_off(cv) (CvFLAGS(cv) &= ~CVf_CLONE)
-
-#define CvCLONED(cv) (CvFLAGS(cv) & CVf_CLONED)
-#define CvCLONED_on(cv) (CvFLAGS(cv) |= CVf_CLONED)
-#define CvCLONED_off(cv) (CvFLAGS(cv) &= ~CVf_CLONED)
-
-#define CvANON(cv) (CvFLAGS(cv) & CVf_ANON)
-#define CvANON_on(cv) (CvFLAGS(cv) |= CVf_ANON)
-#define CvANON_off(cv) (CvFLAGS(cv) &= ~CVf_ANON)
-
-#ifdef PERL_XSUB_OLDSTYLE
-#define CvOLDSTYLE(cv) (CvFLAGS(cv) & CVf_OLDSTYLE)
-#define CvOLDSTYLE_on(cv) (CvFLAGS(cv) |= CVf_OLDSTYLE)
-#define CvOLDSTYLE_off(cv) (CvFLAGS(cv) &= ~CVf_OLDSTYLE)
-#endif
-
-#define CvUNIQUE(cv) (CvFLAGS(cv) & CVf_UNIQUE)
-#define CvUNIQUE_on(cv) (CvFLAGS(cv) |= CVf_UNIQUE)
-#define CvUNIQUE_off(cv) (CvFLAGS(cv) &= ~CVf_UNIQUE)
-
-#define CvNODEBUG(cv) (CvFLAGS(cv) & CVf_NODEBUG)
-#define CvNODEBUG_on(cv) (CvFLAGS(cv) |= CVf_NODEBUG)
-#define CvNODEBUG_off(cv) (CvFLAGS(cv) &= ~CVf_NODEBUG)
-
-#define CvMETHOD(cv) (CvFLAGS(cv) & CVf_METHOD)
-#define CvMETHOD_on(cv) (CvFLAGS(cv) |= CVf_METHOD)
-#define CvMETHOD_off(cv) (CvFLAGS(cv) &= ~CVf_METHOD)
-
-#define CvLOCKED(cv) (CvFLAGS(cv) & CVf_LOCKED)
-#define CvLOCKED_on(cv) (CvFLAGS(cv) |= CVf_LOCKED)
-#define CvLOCKED_off(cv) (CvFLAGS(cv) &= ~CVf_LOCKED)
-
-#define CvLVALUE(cv) (CvFLAGS(cv) & CVf_LVALUE)
-#define CvLVALUE_on(cv) (CvFLAGS(cv) |= CVf_LVALUE)
-#define CvLVALUE_off(cv) (CvFLAGS(cv) &= ~CVf_LVALUE)
-
-#define CvEVAL(cv) (CvUNIQUE(cv) && !SvFAKE(cv))
-#define CvEVAL_on(cv) (CvUNIQUE_on(cv),SvFAKE_off(cv))
-#define CvEVAL_off(cv) CvUNIQUE_off(cv)
-
-/* BEGIN|INIT|END */
-#define CvSPECIAL(cv) (CvUNIQUE(cv) && SvFAKE(cv))
-#define CvSPECIAL_on(cv) (CvUNIQUE_on(cv),SvFAKE_on(cv))
-#define CvSPECIAL_off(cv) (CvUNIQUE_off(cv),SvFAKE_off(cv))
diff --git a/contrib/perl5/deb.c b/contrib/perl5/deb.c
deleted file mode 100644
index dec5c06..0000000
--- a/contrib/perl5/deb.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* deb.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "Didst thou think that the eyes of the White Tower were blind? Nay, I
- * have seen more than thou knowest, Gray Fool." --Denethor
- */
-
-#include "EXTERN.h"
-#define PERL_IN_DEB_C
-#include "perl.h"
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-void
-Perl_deb_nocontext(const char *pat, ...)
-{
-#ifdef DEBUGGING
- dTHX;
- va_list args;
- va_start(args, pat);
- vdeb(pat, &args);
- va_end(args);
-#endif /* DEBUGGING */
-}
-#endif
-
-void
-Perl_deb(pTHX_ const char *pat, ...)
-{
-#ifdef DEBUGGING
- va_list args;
- va_start(args, pat);
- vdeb(pat, &args);
- va_end(args);
-#endif /* DEBUGGING */
-}
-
-void
-Perl_vdeb(pTHX_ const char *pat, va_list *args)
-{
-#ifdef DEBUGGING
- char* file = CopFILE(PL_curcop);
-
-#ifdef USE_THREADS
- PerlIO_printf(Perl_debug_log, "0x%"UVxf" (%s:%ld)\t",
- PTR2UV(thr),
- (file ? file : "<free>"),
- (long)CopLINE(PL_curcop));
-#else
- PerlIO_printf(Perl_debug_log, "(%s:%ld)\t", (file ? file : "<free>"),
- (long)CopLINE(PL_curcop));
-#endif /* USE_THREADS */
- (void) PerlIO_vprintf(Perl_debug_log, pat, *args);
-#endif /* DEBUGGING */
-}
-
-I32
-Perl_debstackptrs(pTHX)
-{
-#ifdef DEBUGGING
- PerlIO_printf(Perl_debug_log,
- "%8"UVxf" %8"UVxf" %8"IVdf" %8"IVdf" %8"IVdf"\n",
- PTR2UV(PL_curstack), PTR2UV(PL_stack_base),
- (IV)*PL_markstack_ptr, (IV)(PL_stack_sp-PL_stack_base),
- (IV)(PL_stack_max-PL_stack_base));
- PerlIO_printf(Perl_debug_log,
- "%8"UVxf" %8"UVxf" %8"UVuf" %8"UVuf" %8"UVuf"\n",
- PTR2UV(PL_mainstack), PTR2UV(AvARRAY(PL_curstack)),
- PTR2UV(PL_mainstack), PTR2UV(AvFILLp(PL_curstack)),
- PTR2UV(AvMAX(PL_curstack)));
-#endif /* DEBUGGING */
- return 0;
-}
-
-I32
-Perl_debstack(pTHX)
-{
-#ifdef DEBUGGING
- I32 top = PL_stack_sp - PL_stack_base;
- register I32 i = top - 30;
- I32 *markscan = PL_markstack + PL_curstackinfo->si_markoff;
-
- if (i < 0)
- i = 0;
-
- while (++markscan <= PL_markstack_ptr)
- if (*markscan >= i)
- break;
-
-#ifdef USE_THREADS
- PerlIO_printf(Perl_debug_log,
- i ? "0x%"UVxf" => ... " : "0x%lx => ",
- PTR2UV(thr));
-#else
- PerlIO_printf(Perl_debug_log, i ? " => ... " : " => ");
-#endif /* USE_THREADS */
- if (PL_stack_base[0] != &PL_sv_undef || PL_stack_sp < PL_stack_base)
- PerlIO_printf(Perl_debug_log, " [STACK UNDERFLOW!!!]\n");
- do {
- ++i;
- if (markscan <= PL_markstack_ptr && *markscan < i) {
- do {
- ++markscan;
- PerlIO_putc(Perl_debug_log, '*');
- }
- while (markscan <= PL_markstack_ptr && *markscan < i);
- PerlIO_printf(Perl_debug_log, " ");
- }
- if (i > top)
- break;
- PerlIO_printf(Perl_debug_log, "%-4s ", SvPEEK(PL_stack_base[i]));
- }
- while (1);
- PerlIO_printf(Perl_debug_log, "\n");
-#endif /* DEBUGGING */
- return 0;
-}
diff --git a/contrib/perl5/doio.c b/contrib/perl5/doio.c
deleted file mode 100644
index 95690f4..0000000
--- a/contrib/perl5/doio.c
+++ /dev/null
@@ -1,2013 +0,0 @@
-/* doio.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "Far below them they saw the white waters pour into a foaming bowl, and
- * then swirl darkly about a deep oval basin in the rocks, until they found
- * their way out again through a narrow gate, and flowed away, fuming and
- * chattering, into calmer and more level reaches."
- */
-
-#include "EXTERN.h"
-#define PERL_IN_DOIO_C
-#include "perl.h"
-
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-#ifndef HAS_SEM
-#include <sys/ipc.h>
-#endif
-#ifdef HAS_MSG
-#include <sys/msg.h>
-#endif
-#ifdef HAS_SHM
-#include <sys/shm.h>
-# ifndef HAS_SHMAT_PROTOTYPE
- extern Shmat_t shmat (int, char *, int);
-# endif
-#endif
-#endif
-
-#ifdef I_UTIME
-# if defined(_MSC_VER) || defined(__MINGW32__)
-# include <sys/utime.h>
-# else
-# include <utime.h>
-# endif
-#endif
-
-#ifdef O_EXCL
-# define OPEN_EXCL O_EXCL
-#else
-# define OPEN_EXCL 0
-#endif
-
-#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
-#include <signal.h>
-#endif
-
-bool
-Perl_do_open(pTHX_ GV *gv, register char *name, I32 len, int as_raw,
- int rawmode, int rawperm, PerlIO *supplied_fp)
-{
- return do_open9(gv, name, len, as_raw, rawmode, rawperm,
- supplied_fp, Nullsv, 0);
-}
-
-bool
-Perl_do_open9(pTHX_ GV *gv, register char *name, I32 len, int as_raw,
- int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs,
- I32 num_svs)
-{
- register IO *io = GvIOn(gv);
- PerlIO *saveifp = Nullfp;
- PerlIO *saveofp = Nullfp;
- char savetype = IoTYPE_CLOSED;
- int writing = 0;
- PerlIO *fp;
- int fd;
- int result;
- bool was_fdopen = FALSE;
- bool in_raw = 0, in_crlf = 0, out_raw = 0, out_crlf = 0;
-
- PL_forkprocess = 1; /* assume true if no fork */
-
- if (PL_op && PL_op->op_type == OP_OPEN) {
- /* set up disciplines */
- U8 flags = PL_op->op_private;
- in_raw = (flags & OPpOPEN_IN_RAW);
- in_crlf = (flags & OPpOPEN_IN_CRLF);
- out_raw = (flags & OPpOPEN_OUT_RAW);
- out_crlf = (flags & OPpOPEN_OUT_CRLF);
- }
-
- if (IoIFP(io)) {
- fd = PerlIO_fileno(IoIFP(io));
- if (IoTYPE(io) == IoTYPE_STD)
- result = 0;
- else if (fd <= PL_maxsysfd) {
- saveifp = IoIFP(io);
- saveofp = IoOFP(io);
- savetype = IoTYPE(io);
- result = 0;
- }
- else if (IoTYPE(io) == IoTYPE_PIPE)
- result = PerlProc_pclose(IoIFP(io));
- else if (IoIFP(io) != IoOFP(io)) {
- if (IoOFP(io)) {
- result = PerlIO_close(IoOFP(io));
- PerlIO_close(IoIFP(io)); /* clear stdio, fd already closed */
- }
- else
- result = PerlIO_close(IoIFP(io));
- }
- else
- result = PerlIO_close(IoIFP(io));
- if (result == EOF && fd > PL_maxsysfd)
- PerlIO_printf(Perl_error_log,
- "Warning: unable to close filehandle %s properly.\n",
- GvENAME(gv));
- IoOFP(io) = IoIFP(io) = Nullfp;
- }
-
- if (as_raw) {
-#if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE)
- rawmode |= O_LARGEFILE;
-#endif
-
-#ifndef O_ACCMODE
-#define O_ACCMODE 3 /* Assume traditional implementation */
-#endif
-
- switch (result = rawmode & O_ACCMODE) {
- case O_RDONLY:
- IoTYPE(io) = IoTYPE_RDONLY;
- break;
- case O_WRONLY:
- IoTYPE(io) = IoTYPE_WRONLY;
- break;
- case O_RDWR:
- default:
- IoTYPE(io) = IoTYPE_RDWR;
- break;
- }
-
- writing = (result > 0);
- fd = PerlLIO_open3(name, rawmode, rawperm);
-
- if (fd == -1)
- fp = NULL;
- else {
- char fpmode[4];
- STRLEN ix = 0;
- if (result == O_RDONLY)
- fpmode[ix++] = 'r';
-#ifdef O_APPEND
- else if (rawmode & O_APPEND) {
- fpmode[ix++] = 'a';
- if (result != O_WRONLY)
- fpmode[ix++] = '+';
- }
-#endif
- else {
- if (result == O_WRONLY)
- fpmode[ix++] = 'w';
- else {
- fpmode[ix++] = 'r';
- fpmode[ix++] = '+';
- }
- }
- if (rawmode & O_BINARY)
- fpmode[ix++] = 'b';
- fpmode[ix] = '\0';
- fp = PerlIO_fdopen(fd, fpmode);
- if (!fp)
- PerlLIO_close(fd);
- }
- }
- else {
- char *type;
- char *oname = name;
- STRLEN tlen;
- STRLEN olen = len;
- char mode[4]; /* stdio file mode ("r\0", "rb\0", "r+b\0" etc.) */
- int dodup;
-
- type = savepvn(name, len);
- tlen = len;
- SAVEFREEPV(type);
- if (num_svs) {
- STRLEN l;
- name = SvPV(svs, l) ;
- len = (I32)l;
- name = savepvn(name, len);
- SAVEFREEPV(name);
- }
- else {
- while (tlen && isSPACE(type[tlen-1]))
- type[--tlen] = '\0';
- name = type;
- len = tlen;
- }
- mode[0] = mode[1] = mode[2] = mode[3] = '\0';
- IoTYPE(io) = *type;
- if (*type == IoTYPE_RDWR && tlen > 1 && type[tlen-1] != IoTYPE_PIPE) { /* scary */
- mode[1] = *type++;
- --tlen;
- writing = 1;
- }
-
- if (*type == IoTYPE_PIPE) {
- if (num_svs && (tlen != 2 || type[1] != IoTYPE_STD)) {
- unknown_desr:
- Perl_croak(aTHX_ "Unknown open() mode '%.*s'", (int)olen, oname);
- }
- /*SUPPRESS 530*/
- for (type++, tlen--; isSPACE(*type); type++, tlen--) ;
- if (!num_svs) {
- name = type;
- len = tlen;
- }
- if (*name == '\0') { /* command is missing 19990114 */
- if (ckWARN(WARN_PIPE))
- Perl_warner(aTHX_ WARN_PIPE, "Missing command in piped open");
- errno = EPIPE;
- goto say_false;
- }
- if (strNE(name,"-") || num_svs)
- TAINT_ENV();
- TAINT_PROPER("piped open");
- if (name[len-1] == '|') {
- name[--len] = '\0' ;
- if (ckWARN(WARN_PIPE))
- Perl_warner(aTHX_ WARN_PIPE, "Can't open bidirectional pipe");
- }
- {
- char *mode;
- if (out_raw)
- mode = "wb";
- else if (out_crlf)
- mode = "wt";
- else
- mode = "w";
- fp = PerlProc_popen(name,mode);
- }
- writing = 1;
- }
- else if (*type == IoTYPE_WRONLY) {
- TAINT_PROPER("open");
- type++;
- if (*type == IoTYPE_WRONLY) {
- /* Two IoTYPE_WRONLYs in a row make for an IoTYPE_APPEND. */
- mode[0] = IoTYPE(io) = IoTYPE_APPEND;
- type++;
- tlen--;
- }
- else
- mode[0] = 'w';
- writing = 1;
-
- if (out_raw)
- strcat(mode, "b");
- else if (out_crlf)
- strcat(mode, "t");
-
- if (num_svs && tlen != 1)
- goto unknown_desr;
- if (*type == '&') {
- name = type;
- duplicity:
- dodup = 1;
- name++;
- if (*name == '=') {
- dodup = 0;
- name++;
- }
- if (!*name && supplied_fp)
- fp = supplied_fp;
- else {
- /*SUPPRESS 530*/
- for (; isSPACE(*name); name++) ;
- if (isDIGIT(*name))
- fd = atoi(name);
- else {
- IO* thatio;
- gv = gv_fetchpv(name,FALSE,SVt_PVIO);
- thatio = GvIO(gv);
- if (!thatio) {
-#ifdef EINVAL
- SETERRNO(EINVAL,SS$_IVCHAN);
-#endif
- goto say_false;
- }
- if (IoIFP(thatio)) {
- PerlIO *fp = IoIFP(thatio);
- /* Flush stdio buffer before dup. --mjd
- * Unfortunately SEEK_CURing 0 seems to
- * be optimized away on most platforms;
- * only Solaris and Linux seem to flush
- * on that. --jhi */
-#ifdef USE_SFIO
- /* sfio fails to clear error on next
- sfwrite, contrary to documentation.
- -- Nick Clark */
- if (PerlIO_seek(fp, 0, SEEK_CUR) == -1)
- PerlIO_clearerr(fp);
-#endif
- /* On the other hand, do all platforms
- * take gracefully to flushing a read-only
- * filehandle? Perhaps we should do
- * fsetpos(src)+fgetpos(dst)? --nik */
- PerlIO_flush(fp);
- fd = PerlIO_fileno(fp);
- /* When dup()ing STDIN, STDOUT or STDERR
- * explicitly set appropriate access mode */
- if (IoIFP(thatio) == PerlIO_stdout()
- || IoIFP(thatio) == PerlIO_stderr())
- IoTYPE(io) = IoTYPE_WRONLY;
- else if (IoIFP(thatio) == PerlIO_stdin())
- IoTYPE(io) = IoTYPE_RDONLY;
- /* When dup()ing a socket, say result is
- * one as well */
- else if (IoTYPE(thatio) == IoTYPE_SOCKET)
- IoTYPE(io) = IoTYPE_SOCKET;
- }
- else
- fd = -1;
- }
- if (dodup)
- fd = PerlLIO_dup(fd);
- else
- was_fdopen = TRUE;
- if (!(fp = PerlIO_fdopen(fd,mode))) {
- if (dodup)
- PerlLIO_close(fd);
- }
- }
- }
- else {
- /*SUPPRESS 530*/
- for (; isSPACE(*type); type++) ;
- if (*type == IoTYPE_STD && !type[1]) {
- fp = PerlIO_stdout();
- IoTYPE(io) = IoTYPE_STD;
- }
- else {
- fp = PerlIO_open((num_svs ? name : type), mode);
- }
- }
- }
- else if (*type == IoTYPE_RDONLY) {
- if (num_svs && tlen != 1)
- goto unknown_desr;
- /*SUPPRESS 530*/
- for (type++; isSPACE(*type); type++) ;
- mode[0] = 'r';
- if (in_raw)
- strcat(mode, "b");
- else if (in_crlf)
- strcat(mode, "t");
-
- if (*type == '&') {
- name = type;
- goto duplicity;
- }
- if (*type == IoTYPE_STD && !type[1]) {
- fp = PerlIO_stdin();
- IoTYPE(io) = IoTYPE_STD;
- }
- else
- fp = PerlIO_open((num_svs ? name : type), mode);
- }
- else if (tlen > 1 && type[tlen-1] == IoTYPE_PIPE) {
- if (num_svs) {
- if (tlen != 2 || type[0] != IoTYPE_STD)
- goto unknown_desr;
- }
- else {
- type[--tlen] = '\0';
- while (tlen && isSPACE(type[tlen-1]))
- type[--tlen] = '\0';
- /*SUPPRESS 530*/
- for (; isSPACE(*type); type++) ;
- name = type;
- }
- if (*name == '\0') { /* command is missing 19990114 */
- if (ckWARN(WARN_PIPE))
- Perl_warner(aTHX_ WARN_PIPE, "Missing command in piped open");
- errno = EPIPE;
- goto say_false;
- }
- if (strNE(name,"-") || num_svs)
- TAINT_ENV();
- TAINT_PROPER("piped open");
- {
- char *mode;
- if (in_raw)
- mode = "rb";
- else if (in_crlf)
- mode = "rt";
- else
- mode = "r";
- fp = PerlProc_popen(name,mode);
- }
- IoTYPE(io) = IoTYPE_PIPE;
- }
- else {
- if (num_svs)
- goto unknown_desr;
- name = type;
- IoTYPE(io) = IoTYPE_RDONLY;
- /*SUPPRESS 530*/
- for (; isSPACE(*name); name++) ;
- if (strEQ(name,"-")) {
- fp = PerlIO_stdin();
- IoTYPE(io) = IoTYPE_STD;
- }
- else {
- char *mode;
- if (in_raw)
- mode = "rb";
- else if (in_crlf)
- mode = "rt";
- else
- mode = "r";
- fp = PerlIO_open(name,mode);
- }
- }
- }
- if (!fp) {
- if (ckWARN(WARN_NEWLINE) && IoTYPE(io) == IoTYPE_RDONLY && strchr(name, '\n'))
- Perl_warner(aTHX_ WARN_NEWLINE, PL_warn_nl, "open");
- goto say_false;
- }
- if (IoTYPE(io) && IoTYPE(io) != IoTYPE_PIPE && IoTYPE(io) != IoTYPE_STD) {
- if (PerlLIO_fstat(PerlIO_fileno(fp),&PL_statbuf) < 0) {
- (void)PerlIO_close(fp);
- goto say_false;
- }
- if (S_ISSOCK(PL_statbuf.st_mode))
- IoTYPE(io) = IoTYPE_SOCKET; /* in case a socket was passed in to us */
-#ifdef HAS_SOCKET
- else if (
-#ifdef S_IFMT
- !(PL_statbuf.st_mode & S_IFMT)
-#else
- !PL_statbuf.st_mode
-#endif
- && IoTYPE(io) != IoTYPE_WRONLY /* Dups of STD* filehandles already have */
- && IoTYPE(io) != IoTYPE_RDONLY /* type so they aren't marked as sockets */
- ) { /* on OS's that return 0 on fstat()ed pipe */
- char tmpbuf[256];
- Sock_size_t buflen = sizeof tmpbuf;
- if (PerlSock_getsockname(PerlIO_fileno(fp), (struct sockaddr *)tmpbuf,
- &buflen) >= 0
- || errno != ENOTSOCK)
- IoTYPE(io) = IoTYPE_SOCKET; /* some OS's return 0 on fstat()ed socket */
- /* but some return 0 for streams too, sigh */
- }
-#endif
- }
- if (saveifp) { /* must use old fp? */
- fd = PerlIO_fileno(saveifp);
- if (saveofp) {
- PerlIO_flush(saveofp); /* emulate PerlIO_close() */
- if (saveofp != saveifp) { /* was a socket? */
- PerlIO_close(saveofp);
- if (fd > 2)
- Safefree(saveofp);
- }
- }
- if (fd != PerlIO_fileno(fp)) {
- Pid_t pid;
- SV *sv;
-
- PerlLIO_dup2(PerlIO_fileno(fp), fd);
-#ifdef VMS
- if (fd != PerlIO_fileno(PerlIO_stdin())) {
- char newname[FILENAME_MAX+1];
- if (fgetname(fp, newname)) {
- if (fd == PerlIO_fileno(PerlIO_stdout())) Perl_vmssetuserlnm("SYS$OUTPUT", newname);
- if (fd == PerlIO_fileno(PerlIO_stderr())) Perl_vmssetuserlnm("SYS$ERROR", newname);
- }
- }
-#endif
- LOCK_FDPID_MUTEX;
- sv = *av_fetch(PL_fdpid,PerlIO_fileno(fp),TRUE);
- (void)SvUPGRADE(sv, SVt_IV);
- pid = SvIVX(sv);
- SvIVX(sv) = 0;
- sv = *av_fetch(PL_fdpid,fd,TRUE);
- UNLOCK_FDPID_MUTEX;
- (void)SvUPGRADE(sv, SVt_IV);
- SvIVX(sv) = pid;
- if (!was_fdopen)
- PerlIO_close(fp);
-
- }
- fp = saveifp;
- PerlIO_clearerr(fp);
- }
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- {
- int save_errno = errno;
- fd = PerlIO_fileno(fp);
- fcntl(fd,F_SETFD,fd > PL_maxsysfd); /* can change errno */
- errno = save_errno;
- }
-#endif
- IoIFP(io) = fp;
- IoFLAGS(io) &= ~IOf_NOLINE;
- if (writing) {
- if (IoTYPE(io) == IoTYPE_SOCKET
- || (IoTYPE(io) == IoTYPE_WRONLY && S_ISCHR(PL_statbuf.st_mode)) )
- {
- char *mode;
- if (out_raw)
- mode = "wb";
- else if (out_crlf)
- mode = "wt";
- else
- mode = "w";
-
- if (!(IoOFP(io) = PerlIO_fdopen(PerlIO_fileno(fp),mode))) {
- PerlIO_close(fp);
- IoIFP(io) = Nullfp;
- goto say_false;
- }
- }
- else
- IoOFP(io) = fp;
- }
- return TRUE;
-
-say_false:
- IoIFP(io) = saveifp;
- IoOFP(io) = saveofp;
- IoTYPE(io) = savetype;
- return FALSE;
-}
-
-PerlIO *
-Perl_nextargv(pTHX_ register GV *gv)
-{
- register SV *sv;
-#ifndef FLEXFILENAMES
- int filedev;
- int fileino;
-#endif
- Uid_t fileuid;
- Gid_t filegid;
- IO *io = GvIOp(gv);
-
- if (!PL_argvoutgv)
- PL_argvoutgv = gv_fetchpv("ARGVOUT",TRUE,SVt_PVIO);
- if (io && (IoFLAGS(io) & IOf_ARGV) && (IoFLAGS(io) & IOf_START)) {
- IoFLAGS(io) &= ~IOf_START;
- if (PL_inplace) {
- if (!PL_argvout_stack)
- PL_argvout_stack = newAV();
- av_push(PL_argvout_stack, SvREFCNT_inc(PL_defoutgv));
- }
- }
- if (PL_filemode & (S_ISUID|S_ISGID)) {
- PerlIO_flush(IoIFP(GvIOn(PL_argvoutgv))); /* chmod must follow last write */
-#ifdef HAS_FCHMOD
- (void)fchmod(PL_lastfd,PL_filemode);
-#else
- (void)PerlLIO_chmod(PL_oldname,PL_filemode);
-#endif
- }
- PL_filemode = 0;
- while (av_len(GvAV(gv)) >= 0) {
- STRLEN oldlen;
- sv = av_shift(GvAV(gv));
- SAVEFREESV(sv);
- sv_setsv(GvSV(gv),sv);
- SvSETMAGIC(GvSV(gv));
- PL_oldname = SvPVx(GvSV(gv), oldlen);
- if (do_open(gv,PL_oldname,oldlen,PL_inplace!=0,O_RDONLY,0,Nullfp)) {
- if (PL_inplace) {
- TAINT_PROPER("inplace open");
- if (oldlen == 1 && *PL_oldname == '-') {
- setdefout(gv_fetchpv("STDOUT",TRUE,SVt_PVIO));
- return IoIFP(GvIOp(gv));
- }
-#ifndef FLEXFILENAMES
- filedev = PL_statbuf.st_dev;
- fileino = PL_statbuf.st_ino;
-#endif
- PL_filemode = PL_statbuf.st_mode;
- fileuid = PL_statbuf.st_uid;
- filegid = PL_statbuf.st_gid;
- if (!S_ISREG(PL_filemode)) {
- if (ckWARN_d(WARN_INPLACE))
- Perl_warner(aTHX_ WARN_INPLACE,
- "Can't do inplace edit: %s is not a regular file",
- PL_oldname );
- do_close(gv,FALSE);
- continue;
- }
- if (*PL_inplace) {
- char *star = strchr(PL_inplace, '*');
- if (star) {
- char *begin = PL_inplace;
- sv_setpvn(sv, "", 0);
- do {
- sv_catpvn(sv, begin, star - begin);
- sv_catpvn(sv, PL_oldname, oldlen);
- begin = ++star;
- } while ((star = strchr(begin, '*')));
- if (*begin)
- sv_catpv(sv,begin);
- }
- else {
- sv_catpv(sv,PL_inplace);
- }
-#ifndef FLEXFILENAMES
- if (PerlLIO_stat(SvPVX(sv),&PL_statbuf) >= 0
- && PL_statbuf.st_dev == filedev
- && PL_statbuf.st_ino == fileino
-#ifdef DJGPP
- || (_djstat_fail_bits & _STFAIL_TRUENAME)!=0
-#endif
- )
- {
- if (ckWARN_d(WARN_INPLACE))
- Perl_warner(aTHX_ WARN_INPLACE,
- "Can't do inplace edit: %s would not be unique",
- SvPVX(sv));
- do_close(gv,FALSE);
- continue;
- }
-#endif
-#ifdef HAS_RENAME
-#if !defined(DOSISH) && !defined(__CYGWIN__)
- if (PerlLIO_rename(PL_oldname,SvPVX(sv)) < 0) {
- if (ckWARN_d(WARN_INPLACE))
- Perl_warner(aTHX_ WARN_INPLACE,
- "Can't rename %s to %s: %s, skipping file",
- PL_oldname, SvPVX(sv), Strerror(errno) );
- do_close(gv,FALSE);
- continue;
- }
-#else
- do_close(gv,FALSE);
- (void)PerlLIO_unlink(SvPVX(sv));
- (void)PerlLIO_rename(PL_oldname,SvPVX(sv));
- do_open(gv,SvPVX(sv),SvCUR(sv),PL_inplace!=0,O_RDONLY,0,Nullfp);
-#endif /* DOSISH */
-#else
- (void)UNLINK(SvPVX(sv));
- if (link(PL_oldname,SvPVX(sv)) < 0) {
- if (ckWARN_d(WARN_INPLACE))
- Perl_warner(aTHX_ WARN_INPLACE,
- "Can't rename %s to %s: %s, skipping file",
- PL_oldname, SvPVX(sv), Strerror(errno) );
- do_close(gv,FALSE);
- continue;
- }
- (void)UNLINK(PL_oldname);
-#endif
- }
- else {
-#if !defined(DOSISH) && !defined(AMIGAOS)
-# ifndef VMS /* Don't delete; use automatic file versioning */
- if (UNLINK(PL_oldname) < 0) {
- if (ckWARN_d(WARN_INPLACE))
- Perl_warner(aTHX_ WARN_INPLACE,
- "Can't remove %s: %s, skipping file",
- PL_oldname, Strerror(errno) );
- do_close(gv,FALSE);
- continue;
- }
-# endif
-#else
- Perl_croak(aTHX_ "Can't do inplace edit without backup");
-#endif
- }
-
- sv_setpvn(sv,">",!PL_inplace);
- sv_catpvn(sv,PL_oldname,oldlen);
- SETERRNO(0,0); /* in case sprintf set errno */
-#ifdef VMS
- if (!do_open(PL_argvoutgv,SvPVX(sv),SvCUR(sv),PL_inplace!=0,
- O_WRONLY|O_CREAT|O_TRUNC,0,Nullfp))
-#else
- if (!do_open(PL_argvoutgv,SvPVX(sv),SvCUR(sv),PL_inplace!=0,
- O_WRONLY|O_CREAT|OPEN_EXCL,0666,Nullfp))
-#endif
- {
- if (ckWARN_d(WARN_INPLACE))
- Perl_warner(aTHX_ WARN_INPLACE, "Can't do inplace edit on %s: %s",
- PL_oldname, Strerror(errno) );
- do_close(gv,FALSE);
- continue;
- }
- setdefout(PL_argvoutgv);
- PL_lastfd = PerlIO_fileno(IoIFP(GvIOp(PL_argvoutgv)));
- (void)PerlLIO_fstat(PL_lastfd,&PL_statbuf);
-#ifdef HAS_FCHMOD
- (void)fchmod(PL_lastfd,PL_filemode);
-#else
-# if !(defined(WIN32) && defined(__BORLANDC__))
- /* Borland runtime creates a readonly file! */
- (void)PerlLIO_chmod(PL_oldname,PL_filemode);
-# endif
-#endif
- if (fileuid != PL_statbuf.st_uid || filegid != PL_statbuf.st_gid) {
-#ifdef HAS_FCHOWN
- (void)fchown(PL_lastfd,fileuid,filegid);
-#else
-#ifdef HAS_CHOWN
- (void)PerlLIO_chown(PL_oldname,fileuid,filegid);
-#endif
-#endif
- }
- }
- return IoIFP(GvIOp(gv));
- }
- else {
- if (ckWARN_d(WARN_INPLACE)) {
- int eno = errno;
- if (PerlLIO_stat(PL_oldname, &PL_statbuf) >= 0
- && !S_ISREG(PL_statbuf.st_mode))
- {
- Perl_warner(aTHX_ WARN_INPLACE,
- "Can't do inplace edit: %s is not a regular file",
- PL_oldname);
- }
- else
- Perl_warner(aTHX_ WARN_INPLACE, "Can't open %s: %s",
- PL_oldname, Strerror(eno));
- }
- }
- }
- if (io && (IoFLAGS(io) & IOf_ARGV))
- IoFLAGS(io) |= IOf_START;
- if (PL_inplace) {
- (void)do_close(PL_argvoutgv,FALSE);
- if (io && (IoFLAGS(io) & IOf_ARGV)
- && PL_argvout_stack && AvFILLp(PL_argvout_stack) >= 0)
- {
- GV *oldout = (GV*)av_pop(PL_argvout_stack);
- setdefout(oldout);
- SvREFCNT_dec(oldout);
- return Nullfp;
- }
- setdefout(gv_fetchpv("STDOUT",TRUE,SVt_PVIO));
- }
- return Nullfp;
-}
-
-#ifdef HAS_PIPE
-void
-Perl_do_pipe(pTHX_ SV *sv, GV *rgv, GV *wgv)
-{
- register IO *rstio;
- register IO *wstio;
- int fd[2];
-
- if (!rgv)
- goto badexit;
- if (!wgv)
- goto badexit;
-
- rstio = GvIOn(rgv);
- wstio = GvIOn(wgv);
-
- if (IoIFP(rstio))
- do_close(rgv,FALSE);
- if (IoIFP(wstio))
- do_close(wgv,FALSE);
-
- if (PerlProc_pipe(fd) < 0)
- goto badexit;
- IoIFP(rstio) = PerlIO_fdopen(fd[0], "r");
- IoOFP(wstio) = PerlIO_fdopen(fd[1], "w");
- IoIFP(wstio) = IoOFP(wstio);
- IoTYPE(rstio) = IoTYPE_RDONLY;
- IoTYPE(wstio) = IoTYPE_WRONLY;
- if (!IoIFP(rstio) || !IoOFP(wstio)) {
- if (IoIFP(rstio)) PerlIO_close(IoIFP(rstio));
- else PerlLIO_close(fd[0]);
- if (IoOFP(wstio)) PerlIO_close(IoOFP(wstio));
- else PerlLIO_close(fd[1]);
- goto badexit;
- }
-
- sv_setsv(sv,&PL_sv_yes);
- return;
-
-badexit:
- sv_setsv(sv,&PL_sv_undef);
- return;
-}
-#endif
-
-/* explicit renamed to avoid C++ conflict -- kja */
-bool
-Perl_do_close(pTHX_ GV *gv, bool not_implicit)
-{
- bool retval;
- IO *io;
-
- if (!gv)
- gv = PL_argvgv;
- if (!gv || SvTYPE(gv) != SVt_PVGV) {
- if (not_implicit)
- SETERRNO(EBADF,SS$_IVCHAN);
- return FALSE;
- }
- io = GvIO(gv);
- if (!io) { /* never opened */
- if (not_implicit) {
- if (ckWARN(WARN_UNOPENED)) /* no check for closed here */
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,SS$_IVCHAN);
- }
- return FALSE;
- }
- retval = io_close(io, not_implicit);
- if (not_implicit) {
- IoLINES(io) = 0;
- IoPAGE(io) = 0;
- IoLINES_LEFT(io) = IoPAGE_LEN(io);
- }
- IoTYPE(io) = IoTYPE_CLOSED;
- return retval;
-}
-
-bool
-Perl_io_close(pTHX_ IO *io, bool not_implicit)
-{
- bool retval = FALSE;
- int status;
-
- if (IoIFP(io)) {
- if (IoTYPE(io) == IoTYPE_PIPE) {
- status = PerlProc_pclose(IoIFP(io));
- if (not_implicit) {
- STATUS_NATIVE_SET(status);
- retval = (STATUS_POSIX == 0);
- }
- else {
- retval = (status != -1);
- }
- }
- else if (IoTYPE(io) == IoTYPE_STD)
- retval = TRUE;
- else {
- if (IoOFP(io) && IoOFP(io) != IoIFP(io)) { /* a socket */
- retval = (PerlIO_close(IoOFP(io)) != EOF);
- PerlIO_close(IoIFP(io)); /* clear stdio, fd already closed */
- }
- else
- retval = (PerlIO_close(IoIFP(io)) != EOF);
- }
- IoOFP(io) = IoIFP(io) = Nullfp;
- }
- else if (not_implicit) {
- SETERRNO(EBADF,SS$_IVCHAN);
- }
-
- return retval;
-}
-
-bool
-Perl_do_eof(pTHX_ GV *gv)
-{
- register IO *io;
- int ch;
-
- io = GvIO(gv);
-
- if (!io)
- return TRUE;
- else if (ckWARN(WARN_IO)
- && (IoTYPE(io) == IoTYPE_WRONLY || IoIFP(io) == PerlIO_stdout()
- || IoIFP(io) == PerlIO_stderr()))
- {
- /* integrate to report_evil_fh()? */
- char *name = NULL;
- if (isGV(gv)) {
- SV* sv = sv_newmortal();
- gv_efullname4(sv, gv, Nullch, FALSE);
- name = SvPV_nolen(sv);
- }
- if (name && *name)
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle %s opened only for output", name);
- else
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle opened only for output");
- }
-
- while (IoIFP(io)) {
-
- if (PerlIO_has_cntptr(IoIFP(io))) { /* (the code works without this) */
- if (PerlIO_get_cnt(IoIFP(io)) > 0) /* cheat a little, since */
- return FALSE; /* this is the most usual case */
- }
-
- ch = PerlIO_getc(IoIFP(io));
- if (ch != EOF) {
- (void)PerlIO_ungetc(IoIFP(io),ch);
- return FALSE;
- }
- if (PerlIO_has_cntptr(IoIFP(io)) && PerlIO_canset_cnt(IoIFP(io))) {
- if (PerlIO_get_cnt(IoIFP(io)) < -1)
- PerlIO_set_cnt(IoIFP(io),-1);
- }
- if (PL_op->op_flags & OPf_SPECIAL) { /* not necessarily a real EOF yet? */
- if (!nextargv(PL_argvgv)) /* get another fp handy */
- return TRUE;
- }
- else
- return TRUE; /* normal fp, definitely end of file */
- }
- return TRUE;
-}
-
-Off_t
-Perl_do_tell(pTHX_ GV *gv)
-{
- register IO *io;
- register PerlIO *fp;
-
- if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) {
-#ifdef ULTRIX_STDIO_BOTCH
- if (PerlIO_eof(fp))
- (void)PerlIO_seek(fp, 0L, 2); /* ultrix 1.2 workaround */
-#endif
- return PerlIO_tell(fp);
- }
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,RMS$_IFI);
- return (Off_t)-1;
-}
-
-bool
-Perl_do_seek(pTHX_ GV *gv, Off_t pos, int whence)
-{
- register IO *io;
- register PerlIO *fp;
-
- if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) {
-#ifdef ULTRIX_STDIO_BOTCH
- if (PerlIO_eof(fp))
- (void)PerlIO_seek(fp, 0L, 2); /* ultrix 1.2 workaround */
-#endif
- return PerlIO_seek(fp, pos, whence) >= 0;
- }
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,RMS$_IFI);
- return FALSE;
-}
-
-Off_t
-Perl_do_sysseek(pTHX_ GV *gv, Off_t pos, int whence)
-{
- register IO *io;
- register PerlIO *fp;
-
- if (gv && (io = GvIO(gv)) && (fp = IoIFP(io)))
- return PerlLIO_lseek(PerlIO_fileno(fp), pos, whence);
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,RMS$_IFI);
- return (Off_t)-1;
-}
-
-int
-Perl_mode_from_discipline(pTHX_ SV *discp)
-{
- int mode = O_BINARY;
- if (discp) {
- STRLEN len;
- char *s = SvPV(discp,len);
- while (*s) {
- if (*s == ':') {
- switch (s[1]) {
- case 'r':
- if (len > 3 && strnEQ(s+1, "raw", 3)
- && (!s[4] || s[4] == ':' || isSPACE(s[4])))
- {
- mode = O_BINARY;
- s += 4;
- len -= 4;
- break;
- }
- /* FALL THROUGH */
- case 'c':
- if (len > 4 && strnEQ(s+1, "crlf", 4)
- && (!s[5] || s[5] == ':' || isSPACE(s[5])))
- {
- mode = O_TEXT;
- s += 5;
- len -= 5;
- break;
- }
- /* FALL THROUGH */
- default:
- goto fail_discipline;
- }
- }
- else if (isSPACE(*s)) {
- ++s;
- --len;
- }
- else {
- char *end;
-fail_discipline:
- end = strchr(s+1, ':');
- if (!end)
- end = s+len;
- Perl_croak(aTHX_ "Unknown discipline '%.*s'", end-s, s);
- }
- }
- }
- return mode;
-}
-
-int
-Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode)
-{
-#ifdef DOSISH
-# if defined(atarist) || defined(__MINT__)
- if (!PerlIO_flush(fp)) {
- if (mode & O_BINARY)
- ((FILE*)fp)->_flag |= _IOBIN;
- else
- ((FILE*)fp)->_flag &= ~ _IOBIN;
- return 1;
- }
- return 0;
-# else
- if (PerlLIO_setmode(PerlIO_fileno(fp), mode) != -1) {
-# if defined(WIN32) && defined(__BORLANDC__)
- /* The translation mode of the stream is maintained independent
- * of the translation mode of the fd in the Borland RTL (heavy
- * digging through their runtime sources reveal). User has to
- * set the mode explicitly for the stream (though they don't
- * document this anywhere). GSAR 97-5-24
- */
- PerlIO_seek(fp,0L,0);
- if (mode & O_BINARY)
- ((FILE*)fp)->flags |= _F_BIN;
- else
- ((FILE*)fp)->flags &= ~ _F_BIN;
-# endif
- return 1;
- }
- else
- return 0;
-# endif
-#else
-# if defined(USEMYBINMODE)
- if (my_binmode(fp, iotype, mode) != FALSE)
- return 1;
- else
- return 0;
-# else
- return 1;
-# endif
-#endif
-}
-
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
- /* code courtesy of William Kucharski */
-#define HAS_CHSIZE
-
-I32 my_chsize(fd, length)
-I32 fd; /* file descriptor */
-Off_t length; /* length to set file to */
-{
- struct flock fl;
- struct stat filebuf;
-
- if (PerlLIO_fstat(fd, &filebuf) < 0)
- return -1;
-
- if (filebuf.st_size < length) {
-
- /* extend file length */
-
- if ((PerlLIO_lseek(fd, (length - 1), 0)) < 0)
- return -1;
-
- /* write a "0" byte */
-
- if ((PerlLIO_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 */
-
-bool
-Perl_do_print(pTHX_ register SV *sv, PerlIO *fp)
-{
- register char *tmps;
- STRLEN len;
-
- /* assuming fp is checked earlier */
- if (!sv)
- return TRUE;
- if (PL_ofmt) {
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvIOK(sv) && SvIVX(sv) != 0) {
- PerlIO_printf(fp, PL_ofmt, (NV)SvIVX(sv));
- return !PerlIO_error(fp);
- }
- if ( (SvNOK(sv) && SvNVX(sv) != 0.0)
- || (looks_like_number(sv) && sv_2nv(sv) != 0.0) ) {
- PerlIO_printf(fp, PL_ofmt, SvNVX(sv));
- return !PerlIO_error(fp);
- }
- }
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- return TRUE;
- case SVt_IV:
- if (SvIOK(sv)) {
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvIsUV(sv))
- PerlIO_printf(fp, "%"UVuf, (UV)SvUVX(sv));
- else
- PerlIO_printf(fp, "%"IVdf, (IV)SvIVX(sv));
- return !PerlIO_error(fp);
- }
- /* FALL THROUGH */
- default:
- tmps = SvPV(sv, len);
- break;
- }
- /* To detect whether the process is about to overstep its
- * filesize limit we would need getrlimit(). We could then
- * also transparently raise the limit with setrlimit() --
- * but only until the system hard limit/the filesystem limit,
- * at which we would get EPERM. Note that when using buffered
- * io the write failure can be delayed until the flush/close. --jhi */
- if (len && (PerlIO_write(fp,tmps,len) == 0))
- return FALSE;
- return !PerlIO_error(fp);
-}
-
-I32
-Perl_my_stat(pTHX)
-{
- dSP;
- IO *io;
- GV* gv;
-
- if (PL_op->op_flags & OPf_REF) {
- EXTEND(SP,1);
- gv = cGVOP_gv;
- do_fstat:
- io = GvIO(gv);
- if (io && IoIFP(io)) {
- PL_statgv = gv;
- sv_setpv(PL_statname,"");
- PL_laststype = OP_STAT;
- return (PL_laststatval = PerlLIO_fstat(PerlIO_fileno(IoIFP(io)), &PL_statcache));
- }
- else {
- if (gv == PL_defgv)
- return PL_laststatval;
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- PL_statgv = Nullgv;
- sv_setpv(PL_statname,"");
- return (PL_laststatval = -1);
- }
- }
- else {
- SV* sv = POPs;
- char *s;
- STRLEN n_a;
- PUTBACK;
- if (SvTYPE(sv) == SVt_PVGV) {
- gv = (GV*)sv;
- goto do_fstat;
- }
- else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVGV) {
- gv = (GV*)SvRV(sv);
- goto do_fstat;
- }
-
- s = SvPV(sv, n_a);
- PL_statgv = Nullgv;
- sv_setpv(PL_statname, s);
- PL_laststype = OP_STAT;
- PL_laststatval = PerlLIO_stat(s, &PL_statcache);
- if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && strchr(s, '\n'))
- Perl_warner(aTHX_ WARN_NEWLINE, PL_warn_nl, "stat");
- return PL_laststatval;
- }
-}
-
-I32
-Perl_my_lstat(pTHX)
-{
- dSP;
- SV *sv;
- STRLEN n_a;
- if (PL_op->op_flags & OPf_REF) {
- EXTEND(SP,1);
- if (cGVOP_gv == PL_defgv) {
- if (PL_laststype != OP_LSTAT)
- Perl_croak(aTHX_ "The stat preceding -l _ wasn't an lstat");
- return PL_laststatval;
- }
- Perl_croak(aTHX_ "You can't use -l on a filehandle");
- }
-
- PL_laststype = OP_LSTAT;
- PL_statgv = Nullgv;
- sv = POPs;
- PUTBACK;
- sv_setpv(PL_statname,SvPV(sv, n_a));
- PL_laststatval = PerlLIO_lstat(SvPV(sv, n_a),&PL_statcache);
- if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && strchr(SvPV(sv, n_a), '\n'))
- Perl_warner(aTHX_ WARN_NEWLINE, PL_warn_nl, "lstat");
- return PL_laststatval;
-}
-
-bool
-Perl_do_aexec(pTHX_ SV *really, register SV **mark, register SV **sp)
-{
- return do_aexec5(really, mark, sp, 0, 0);
-}
-
-bool
-Perl_do_aexec5(pTHX_ SV *really, register SV **mark, register SV **sp,
- int fd, int do_report)
-{
-#ifdef MACOS_TRADITIONAL
- Perl_croak(aTHX_ "exec? I'm not *that* kind of operating system");
-#else
- register char **a;
- char *tmps;
- STRLEN n_a;
-
- if (sp > mark) {
- New(401,PL_Argv, sp - mark + 1, char*);
- a = PL_Argv;
- while (++mark <= sp) {
- if (*mark)
- *a++ = SvPVx(*mark, n_a);
- else
- *a++ = "";
- }
- *a = Nullch;
- if (really)
- tmps = SvPV(really, n_a);
- if ((!really && *PL_Argv[0] != '/') ||
- (really && *tmps != '/')) /* will execvp use PATH? */
- TAINT_ENV(); /* testing IFS here is overkill, probably */
- if (really && *tmps)
- PerlProc_execvp(tmps,EXEC_ARGV_CAST(PL_Argv));
- else
- PerlProc_execvp(PL_Argv[0],EXEC_ARGV_CAST(PL_Argv));
- if (ckWARN(WARN_EXEC))
- Perl_warner(aTHX_ WARN_EXEC, "Can't exec \"%s\": %s",
- (really ? tmps : PL_Argv[0]), Strerror(errno));
- if (do_report) {
- int e = errno;
-
- PerlLIO_write(fd, (void*)&e, sizeof(int));
- PerlLIO_close(fd);
- }
- }
- do_execfree();
-#endif
- return FALSE;
-}
-
-void
-Perl_do_execfree(pTHX)
-{
- if (PL_Argv) {
- Safefree(PL_Argv);
- PL_Argv = Null(char **);
- }
- if (PL_Cmd) {
- Safefree(PL_Cmd);
- PL_Cmd = Nullch;
- }
-}
-
-#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP) && !defined(EPOC) && !defined(MACOS_TRADITIONAL)
-
-bool
-Perl_do_exec(pTHX_ char *cmd)
-{
- return do_exec3(cmd,0,0);
-}
-
-bool
-Perl_do_exec3(pTHX_ char *cmd, int fd, int do_report)
-{
- register char **a;
- register char *s;
- char flags[10];
-
- while (*cmd && isSPACE(*cmd))
- cmd++;
-
- /* save an extra exec if possible */
-
-#ifdef CSH
- if (strnEQ(cmd,PL_cshname,PL_cshlen) && strnEQ(cmd+PL_cshlen," -c",3)) {
- strcpy(flags,"-c");
- s = cmd+PL_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';
- PerlProc_execl(PL_cshname,"csh", flags,ncmd,(char*)0);
- *s = '\'';
- return FALSE;
- }
- }
- }
-#endif /* CSH */
-
- /* see if there are shell metacharacters in it */
-
- if (*cmd == '.' && isSPACE(cmd[1]))
- goto doshell;
-
- if (strnEQ(cmd,"exec",4) && isSPACE(cmd[4]))
- goto doshell;
-
- for (s = cmd; *s && isALNUM(*s); s++) ; /* catch VAR=val gizmo */
- if (*s == '=')
- goto doshell;
-
- for (s = cmd; *s; s++) {
- if (*s != ' ' && !isALPHA(*s) && strchr("$&*(){}[]'\";\\|?<>~`\n",*s)) {
- if (*s == '\n' && !s[1]) {
- *s = '\0';
- break;
- }
- /* handle the 2>&1 construct at the end */
- if (*s == '>' && s[1] == '&' && s[2] == '1'
- && s > cmd + 1 && s[-1] == '2' && isSPACE(s[-2])
- && (!s[3] || isSPACE(s[3])))
- {
- char *t = s + 3;
-
- while (*t && isSPACE(*t))
- ++t;
- if (!*t && (dup2(1,2) != -1)) {
- s[-2] = '\0';
- break;
- }
- }
- doshell:
- PerlProc_execl(PL_sh_path, "sh", "-c", cmd, (char*)0);
- return FALSE;
- }
- }
-
- New(402,PL_Argv, (s - cmd) / 2 + 2, char*);
- PL_Cmd = savepvn(cmd, s-cmd);
- a = PL_Argv;
- for (s = PL_Cmd; *s;) {
- while (*s && isSPACE(*s)) s++;
- if (*s)
- *(a++) = s;
- while (*s && !isSPACE(*s)) s++;
- if (*s)
- *s++ = '\0';
- }
- *a = Nullch;
- if (PL_Argv[0]) {
- PerlProc_execvp(PL_Argv[0],PL_Argv);
- if (errno == ENOEXEC) { /* for system V NIH syndrome */
- do_execfree();
- goto doshell;
- }
- {
- int e = errno;
-
- if (ckWARN(WARN_EXEC))
- Perl_warner(aTHX_ WARN_EXEC, "Can't exec \"%s\": %s",
- PL_Argv[0], Strerror(errno));
- if (do_report) {
- PerlLIO_write(fd, (void*)&e, sizeof(int));
- PerlLIO_close(fd);
- }
- }
- }
- do_execfree();
- return FALSE;
-}
-
-#endif /* OS2 || WIN32 */
-
-I32
-Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
-{
- register I32 val;
- register I32 val2;
- register I32 tot = 0;
- char *what;
- char *s;
- SV **oldmark = mark;
- STRLEN n_a;
-
-#define APPLY_TAINT_PROPER() \
- STMT_START { \
- if (PL_tainted) { TAINT_PROPER(what); } \
- } STMT_END
-
- /* This is a first heuristic; it doesn't catch tainting magic. */
- if (PL_tainting) {
- while (++mark <= sp) {
- if (SvTAINTED(*mark)) {
- TAINT;
- break;
- }
- }
- mark = oldmark;
- }
- switch (type) {
- case OP_CHMOD:
- what = "chmod";
- APPLY_TAINT_PROPER();
- if (++mark <= sp) {
- val = SvIVx(*mark);
- APPLY_TAINT_PROPER();
- tot = sp - mark;
- while (++mark <= sp) {
- char *name = SvPVx(*mark, n_a);
- APPLY_TAINT_PROPER();
- if (PerlLIO_chmod(name, val))
- tot--;
- }
- }
- break;
-#ifdef HAS_CHOWN
- case OP_CHOWN:
- what = "chown";
- APPLY_TAINT_PROPER();
- if (sp - mark > 2) {
- val = SvIVx(*++mark);
- val2 = SvIVx(*++mark);
- APPLY_TAINT_PROPER();
- tot = sp - mark;
- while (++mark <= sp) {
- char *name = SvPVx(*mark, n_a);
- APPLY_TAINT_PROPER();
- if (PerlLIO_chown(name, val, val2))
- tot--;
- }
- }
- break;
-#endif
-/*
-XXX Should we make lchown() directly available from perl?
-For now, we'll let Configure test for HAS_LCHOWN, but do
-nothing in the core.
- --AD 5/1998
-*/
-#ifdef HAS_KILL
- case OP_KILL:
- what = "kill";
- APPLY_TAINT_PROPER();
- if (mark == sp)
- break;
- s = SvPVx(*++mark, n_a);
- if (isUPPER(*s)) {
- if (*s == 'S' && s[1] == 'I' && s[2] == 'G')
- s += 3;
- if (!(val = whichsig(s)))
- Perl_croak(aTHX_ "Unrecognized signal name \"%s\"",s);
- }
- else
- val = SvIVx(*mark);
- APPLY_TAINT_PROPER();
- tot = sp - mark;
-#ifdef VMS
- /* kill() doesn't do process groups (job trees?) under VMS */
- if (val < 0) val = -val;
- if (val == SIGKILL) {
-# include <starlet.h>
- /* Use native sys$delprc() to insure that target process is
- * deleted; supervisor-mode images don't pay attention to
- * CRTL's emulation of Unix-style signals and kill()
- */
- while (++mark <= sp) {
- I32 proc = SvIVx(*mark);
- register unsigned long int __vmssts;
- APPLY_TAINT_PROPER();
- if (!((__vmssts = sys$delprc(&proc,0)) & 1)) {
- tot--;
- switch (__vmssts) {
- case SS$_NONEXPR:
- case SS$_NOSUCHNODE:
- SETERRNO(ESRCH,__vmssts);
- break;
- case SS$_NOPRIV:
- SETERRNO(EPERM,__vmssts);
- break;
- default:
- SETERRNO(EVMSERR,__vmssts);
- }
- }
- }
- break;
- }
-#endif
- if (val < 0) {
- val = -val;
- while (++mark <= sp) {
- I32 proc = SvIVx(*mark);
- APPLY_TAINT_PROPER();
-#ifdef HAS_KILLPG
- if (PerlProc_killpg(proc,val)) /* BSD */
-#else
- if (PerlProc_kill(-proc,val)) /* SYSV */
-#endif
- tot--;
- }
- }
- else {
- while (++mark <= sp) {
- I32 proc = SvIVx(*mark);
- APPLY_TAINT_PROPER();
- if (PerlProc_kill(proc, val))
- tot--;
- }
- }
- break;
-#endif
- case OP_UNLINK:
- what = "unlink";
- APPLY_TAINT_PROPER();
- tot = sp - mark;
- while (++mark <= sp) {
- s = SvPVx(*mark, n_a);
- APPLY_TAINT_PROPER();
- if (PL_euid || PL_unsafe) {
- if (UNLINK(s))
- tot--;
- }
- else { /* don't let root wipe out directories without -U */
- if (PerlLIO_lstat(s,&PL_statbuf) < 0 || S_ISDIR(PL_statbuf.st_mode))
- tot--;
- else {
- if (UNLINK(s))
- tot--;
- }
- }
- }
- break;
-#ifdef HAS_UTIME
- case OP_UTIME:
- what = "utime";
- APPLY_TAINT_PROPER();
- if (sp - mark > 2) {
-#if defined(I_UTIME) || defined(VMS)
- struct utimbuf utbuf;
-#else
- struct {
- Time_t actime;
- Time_t modtime;
- } utbuf;
-#endif
-
- Zero(&utbuf, sizeof utbuf, char);
-#ifdef BIG_TIME
- utbuf.actime = (Time_t)SvNVx(*++mark); /* time accessed */
- utbuf.modtime = (Time_t)SvNVx(*++mark); /* time modified */
-#else
- utbuf.actime = (Time_t)SvIVx(*++mark); /* time accessed */
- utbuf.modtime = (Time_t)SvIVx(*++mark); /* time modified */
-#endif
- APPLY_TAINT_PROPER();
- tot = sp - mark;
- while (++mark <= sp) {
- char *name = SvPVx(*mark, n_a);
- APPLY_TAINT_PROPER();
- if (PerlLIO_utime(name, &utbuf))
- tot--;
- }
- }
- else
- tot = 0;
- break;
-#endif
- }
- return tot;
-
-#undef APPLY_TAINT_PROPER
-}
-
-/* Do the permissions allow some operation? Assumes statcache already set. */
-#ifndef VMS /* VMS' cando is in vms.c */
-bool
-Perl_cando(pTHX_ Mode_t mode, Uid_t effective, register Stat_t *statbufp)
-/* Note: we use `effective' both for uids and gids.
- * Here we are betting on Uid_t being equal or wider than Gid_t. */
-{
-#ifdef DOSISH
- /* [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.]
- */
-
- /* Atari stat() does pretty much the same thing. we set x_bit_set_in_stat
- * too so it will actually look into the files for magic numbers
- */
- return (mode & statbufp->st_mode) ? TRUE : FALSE;
-
-#else /* ! DOSISH */
- if ((effective ? PL_euid : PL_uid) == 0) { /* root is special */
- if (mode == 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 ? PL_euid : PL_uid) ) {
- if (statbufp->st_mode & mode)
- return TRUE; /* ok as "user" */
- }
- else if (ingroup(statbufp->st_gid,effective)) {
- if (statbufp->st_mode & mode >> 3)
- return TRUE; /* ok as "group" */
- }
- else if (statbufp->st_mode & mode >> 6)
- return TRUE; /* ok as "other" */
- return FALSE;
-#endif /* ! DOSISH */
-}
-#endif /* ! VMS */
-
-bool
-Perl_ingroup(pTHX_ Gid_t testgid, Uid_t effective)
-{
-#ifdef MACOS_TRADITIONAL
- /* This is simply not correct for AppleShare, but fix it yerself. */
- return TRUE;
-#else
- if (testgid == (effective ? PL_egid : PL_gid))
- return TRUE;
-#ifdef HAS_GETGROUPS
-#ifndef NGROUPS
-#define NGROUPS 32
-#endif
- {
- Groups_t gary[NGROUPS];
- I32 anum;
-
- anum = getgroups(NGROUPS,gary);
- while (--anum >= 0)
- if (gary[anum] == testgid)
- return TRUE;
- }
-#endif
- return FALSE;
-#endif
-}
-
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-
-I32
-Perl_do_ipcget(pTHX_ I32 optype, SV **mark, SV **sp)
-{
- key_t key;
- I32 n, flags;
-
- key = (key_t)SvNVx(*++mark);
- n = (optype == OP_MSGGET) ? 0 : SvIVx(*++mark);
- flags = SvIVx(*++mark);
- SETERRNO(0,0);
- switch (optype)
- {
-#ifdef HAS_MSG
- case OP_MSGGET:
- return msgget(key, flags);
-#endif
-#ifdef HAS_SEM
- case OP_SEMGET:
- return semget(key, n, flags);
-#endif
-#ifdef HAS_SHM
- case OP_SHMGET:
- return shmget(key, n, flags);
-#endif
-#if !defined(HAS_MSG) || !defined(HAS_SEM) || !defined(HAS_SHM)
- default:
- Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
-#endif
- }
- return -1; /* should never happen */
-}
-
-I32
-Perl_do_ipcctl(pTHX_ I32 optype, SV **mark, SV **sp)
-{
- SV *astr;
- char *a;
- I32 id, n, cmd, infosize, getinfo;
- I32 ret = -1;
-
- id = SvIVx(*++mark);
- n = (optype == OP_SEMCTL) ? SvIVx(*++mark) : 0;
- cmd = SvIVx(*++mark);
- astr = *++mark;
- infosize = 0;
- getinfo = (cmd == IPC_STAT);
-
- switch (optype)
- {
-#ifdef HAS_MSG
- case OP_MSGCTL:
- if (cmd == IPC_STAT || cmd == IPC_SET)
- infosize = sizeof(struct msqid_ds);
- break;
-#endif
-#ifdef HAS_SHM
- case OP_SHMCTL:
- if (cmd == IPC_STAT || cmd == IPC_SET)
- infosize = sizeof(struct shmid_ds);
- break;
-#endif
-#ifdef HAS_SEM
- case OP_SEMCTL:
-#ifdef Semctl
- if (cmd == IPC_STAT || cmd == IPC_SET)
- infosize = sizeof(struct semid_ds);
- else if (cmd == GETALL || cmd == SETALL)
- {
- struct semid_ds semds;
- union semun semun;
-#ifdef EXTRA_F_IN_SEMUN_BUF
- semun.buff = &semds;
-#else
- semun.buf = &semds;
-#endif
- getinfo = (cmd == GETALL);
- if (Semctl(id, 0, IPC_STAT, semun) == -1)
- return -1;
- infosize = semds.sem_nsems * sizeof(short);
- /* "short" is technically wrong but much more portable
- than guessing about u_?short(_t)? */
- }
-#else
- Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
-#endif
- break;
-#endif
-#if !defined(HAS_MSG) || !defined(HAS_SEM) || !defined(HAS_SHM)
- default:
- Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
-#endif
- }
-
- if (infosize)
- {
- STRLEN len;
- if (getinfo)
- {
- SvPV_force(astr, len);
- a = SvGROW(astr, infosize+1);
- }
- else
- {
- a = SvPV(astr, len);
- if (len != infosize)
- Perl_croak(aTHX_ "Bad arg length for %s, is %lu, should be %ld",
- PL_op_desc[optype],
- (unsigned long)len,
- (long)infosize);
- }
- }
- else
- {
- IV i = SvIV(astr);
- a = INT2PTR(char *,i); /* ouch */
- }
- SETERRNO(0,0);
- switch (optype)
- {
-#ifdef HAS_MSG
- case OP_MSGCTL:
- ret = msgctl(id, cmd, (struct msqid_ds *)a);
- break;
-#endif
-#ifdef HAS_SEM
- case OP_SEMCTL: {
-#ifdef Semctl
- union semun unsemds;
-
-#ifdef EXTRA_F_IN_SEMUN_BUF
- unsemds.buff = (struct semid_ds *)a;
-#else
- unsemds.buf = (struct semid_ds *)a;
-#endif
- ret = Semctl(id, n, cmd, unsemds);
-#else
- Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
-#endif
- }
- break;
-#endif
-#ifdef HAS_SHM
- case OP_SHMCTL:
- ret = shmctl(id, cmd, (struct shmid_ds *)a);
- break;
-#endif
- }
- if (getinfo && ret >= 0) {
- SvCUR_set(astr, infosize);
- *SvEND(astr) = '\0';
- SvSETMAGIC(astr);
- }
- return ret;
-}
-
-I32
-Perl_do_msgsnd(pTHX_ SV **mark, SV **sp)
-{
-#ifdef HAS_MSG
- SV *mstr;
- char *mbuf;
- I32 id, msize, flags;
- STRLEN len;
-
- id = SvIVx(*++mark);
- mstr = *++mark;
- flags = SvIVx(*++mark);
- mbuf = SvPV(mstr, len);
- if ((msize = len - sizeof(long)) < 0)
- Perl_croak(aTHX_ "Arg too short for msgsnd");
- SETERRNO(0,0);
- return msgsnd(id, (struct msgbuf *)mbuf, msize, flags);
-#else
- Perl_croak(aTHX_ "msgsnd not implemented");
-#endif
-}
-
-I32
-Perl_do_msgrcv(pTHX_ SV **mark, SV **sp)
-{
-#ifdef HAS_MSG
- SV *mstr;
- char *mbuf;
- long mtype;
- I32 id, msize, flags, ret;
- STRLEN len;
-
- id = SvIVx(*++mark);
- mstr = *++mark;
- /* suppress warning when reading into undef var --jhi */
- if (! SvOK(mstr))
- sv_setpvn(mstr, "", 0);
- msize = SvIVx(*++mark);
- mtype = (long)SvIVx(*++mark);
- flags = SvIVx(*++mark);
- SvPV_force(mstr, len);
- mbuf = SvGROW(mstr, sizeof(long)+msize+1);
-
- SETERRNO(0,0);
- ret = msgrcv(id, (struct msgbuf *)mbuf, msize, mtype, flags);
- if (ret >= 0) {
- SvCUR_set(mstr, sizeof(long)+ret);
- *SvEND(mstr) = '\0';
-#ifndef INCOMPLETE_TAINTS
- /* who knows who has been playing with this message? */
- SvTAINTED_on(mstr);
-#endif
- }
- return ret;
-#else
- Perl_croak(aTHX_ "msgrcv not implemented");
-#endif
-}
-
-I32
-Perl_do_semop(pTHX_ SV **mark, SV **sp)
-{
-#ifdef HAS_SEM
- SV *opstr;
- char *opbuf;
- I32 id;
- STRLEN opsize;
-
- id = SvIVx(*++mark);
- opstr = *++mark;
- opbuf = SvPV(opstr, opsize);
- if (opsize < sizeof(struct sembuf)
- || (opsize % sizeof(struct sembuf)) != 0) {
- SETERRNO(EINVAL,LIB$_INVARG);
- return -1;
- }
- SETERRNO(0,0);
- return semop(id, (struct sembuf *)opbuf, opsize/sizeof(struct sembuf));
-#else
- Perl_croak(aTHX_ "semop not implemented");
-#endif
-}
-
-I32
-Perl_do_shmio(pTHX_ I32 optype, SV **mark, SV **sp)
-{
-#ifdef HAS_SHM
- SV *mstr;
- char *mbuf, *shm;
- I32 id, mpos, msize;
- STRLEN len;
- struct shmid_ds shmds;
-
- id = SvIVx(*++mark);
- mstr = *++mark;
- mpos = SvIVx(*++mark);
- msize = SvIVx(*++mark);
- SETERRNO(0,0);
- if (shmctl(id, IPC_STAT, &shmds) == -1)
- return -1;
- if (mpos < 0 || msize < 0 || mpos + msize > shmds.shm_segsz) {
- SETERRNO(EFAULT,SS$_ACCVIO); /* can't do as caller requested */
- return -1;
- }
- shm = (char *)shmat(id, (char*)NULL, (optype == OP_SHMREAD) ? SHM_RDONLY : 0);
- if (shm == (char *)-1) /* I hate System V IPC, I really do */
- return -1;
- if (optype == OP_SHMREAD) {
- /* suppress warning when reading into undef var (tchrist 3/Mar/00) */
- if (! SvOK(mstr))
- sv_setpvn(mstr, "", 0);
- SvPV_force(mstr, len);
- mbuf = SvGROW(mstr, msize+1);
-
- Copy(shm + mpos, mbuf, msize, char);
- SvCUR_set(mstr, msize);
- *SvEND(mstr) = '\0';
- SvSETMAGIC(mstr);
-#ifndef INCOMPLETE_TAINTS
- /* who knows who has been playing with this shared memory? */
- SvTAINTED_on(mstr);
-#endif
- }
- else {
- I32 n;
-
- mbuf = SvPV(mstr, len);
- if ((n = len) > msize)
- n = msize;
- Copy(mbuf, shm + mpos, n, char);
- if (n < msize)
- memzero(shm + mpos + n, msize - n);
- }
- return shmdt(shm);
-#else
- Perl_croak(aTHX_ "shm I/O not implemented");
-#endif
-}
-
-#endif /* SYSV IPC */
-
diff --git a/contrib/perl5/doop.c b/contrib/perl5/doop.c
deleted file mode 100644
index 7c0e732..0000000
--- a/contrib/perl5/doop.c
+++ /dev/null
@@ -1,1282 +0,0 @@
-/* doop.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "'So that was the job I felt I had to do when I started,' thought Sam."
- */
-
-#include "EXTERN.h"
-#define PERL_IN_DOOP_C
-#include "perl.h"
-
-#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
-#include <signal.h>
-#endif
-
-STATIC I32
-S_do_trans_simple(pTHX_ SV *sv)
-{
- U8 *s;
- U8 *d;
- U8 *send;
- U8 *dstart;
- I32 matches = 0;
- I32 grows = PL_op->op_private & OPpTRANS_GROWS;
- STRLEN len;
- short *tbl;
- I32 ch;
-
- tbl = (short*)cPVOP->op_pv;
- if (!tbl)
- Perl_croak(aTHX_ "panic: do_trans_simple");
-
- s = (U8*)SvPV(sv, len);
- send = s + len;
-
- /* First, take care of non-UTF8 input strings, because they're easy */
- if (!SvUTF8(sv)) {
- while (s < send) {
- if ((ch = tbl[*s]) >= 0) {
- matches++;
- *s++ = ch;
- }
- else
- s++;
- }
- SvSETMAGIC(sv);
- return matches;
- }
-
- /* Allow for expansion: $_="a".chr(400); tr/a/\xFE/, FE needs encoding */
- if (grows)
- New(0, d, len*2+1, U8);
- else
- d = s;
- dstart = d;
- while (s < send) {
- STRLEN ulen;
- UV c;
-
- /* Need to check this, otherwise 128..255 won't match */
- c = utf8_to_uv(s, send - s, &ulen, 0);
- if (c < 0x100 && (ch = tbl[c]) >= 0) {
- matches++;
- if (UTF8_IS_ASCII(ch))
- *d++ = ch;
- else
- d = uv_to_utf8(d,ch);
- s += ulen;
- }
- else { /* No match -> copy */
- Copy(s, d, ulen, U8);
- d += ulen;
- s += ulen;
- }
- }
- if (grows) {
- sv_setpvn(sv, (char*)dstart, d - dstart);
- Safefree(dstart);
- }
- else {
- *d = '\0';
- SvCUR_set(sv, d - dstart);
- }
- SvUTF8_on(sv);
- SvSETMAGIC(sv);
- return matches;
-}
-
-STATIC I32
-S_do_trans_count(pTHX_ SV *sv)/* SPC - OK */
-{
- U8 *s;
- U8 *send;
- I32 matches = 0;
- STRLEN len;
- short *tbl;
-
- tbl = (short*)cPVOP->op_pv;
- if (!tbl)
- Perl_croak(aTHX_ "panic: do_trans_count");
-
- s = (U8*)SvPV(sv, len);
- send = s + len;
-
- if (!SvUTF8(sv))
- while (s < send) {
- if (tbl[*s++] >= 0)
- matches++;
- }
- else
- while (s < send) {
- UV c;
- STRLEN ulen;
- c = utf8_to_uv(s, send - s, &ulen, 0);
- if (c < 0x100 && tbl[c] >= 0)
- matches++;
- s += ulen;
- }
-
- return matches;
-}
-
-STATIC I32
-S_do_trans_complex(pTHX_ SV *sv)/* SPC - NOT OK */
-{
- U8 *s;
- U8 *send;
- U8 *d;
- U8 *dstart;
- I32 isutf8;
- I32 matches = 0;
- I32 grows = PL_op->op_private & OPpTRANS_GROWS;
- STRLEN len;
- short *tbl;
- I32 ch;
-
- tbl = (short*)cPVOP->op_pv;
- if (!tbl)
- Perl_croak(aTHX_ "panic: do_trans_complex");
-
- s = (U8*)SvPV(sv, len);
- isutf8 = SvUTF8(sv);
- send = s + len;
-
- if (!isutf8) {
- dstart = d = s;
- if (PL_op->op_private & OPpTRANS_SQUASH) {
- U8* p = send;
- while (s < send) {
- if ((ch = tbl[*s]) >= 0) {
- *d = ch;
- matches++;
- if (p != d - 1 || *p != *d)
- p = d++;
- }
- else if (ch == -1) /* -1 is unmapped character */
- *d++ = *s;
- else if (ch == -2) /* -2 is delete character */
- matches++;
- s++;
- }
- }
- else {
- while (s < send) {
- if ((ch = tbl[*s]) >= 0) {
- matches++;
- *d++ = ch;
- }
- else if (ch == -1) /* -1 is unmapped character */
- *d++ = *s;
- else if (ch == -2) /* -2 is delete character */
- matches++;
- s++;
- }
- }
- *d = '\0';
- SvCUR_set(sv, d - dstart);
- }
- else { /* isutf8 */
- if (grows)
- New(0, d, len*2+1, U8);
- else
- d = s;
- dstart = d;
-
-#ifdef MACOS_TRADITIONAL
-#define comp CoMP /* "comp" is a keyword in some compilers ... */
-#endif
-
- if (PL_op->op_private & OPpTRANS_SQUASH) {
- U8* p = send;
- UV pch = 0xfeedface;
- while (s < send) {
- STRLEN len;
- UV comp = utf8_to_uv_simple(s, &len);
-
- if (comp > 0xff) { /* always unmapped */
- Copy(s, d, len, U8);
- d += len;
- }
- else if ((ch = tbl[comp]) >= 0) {
- matches++;
- if (ch != pch) {
- d = uv_to_utf8(d, ch);
- pch = ch;
- }
- s += len;
- continue;
- }
- else if (ch == -1) { /* -1 is unmapped character */
- Copy(s, d, len, U8);
- d += len;
- }
- else if (ch == -2) /* -2 is delete character */
- matches++;
- s += len;
- pch = 0xfeedface;
- }
- }
- else {
- while (s < send) {
- STRLEN len;
- UV comp = utf8_to_uv_simple(s, &len);
- if (comp > 0xff) { /* always unmapped */
- Copy(s, d, len, U8);
- d += len;
- }
- else if ((ch = tbl[comp]) >= 0) {
- d = uv_to_utf8(d, ch);
- matches++;
- }
- else if (ch == -1) { /* -1 is unmapped character */
- Copy(s, d, len, U8);
- d += len;
- }
- else if (ch == -2) /* -2 is delete character */
- matches++;
- s += len;
- }
- }
- if (grows) {
- sv_setpvn(sv, (char*)dstart, d - dstart);
- Safefree(dstart);
- }
- else {
- *d = '\0';
- SvCUR_set(sv, d - dstart);
- }
- SvUTF8_on(sv);
- }
- SvSETMAGIC(sv);
- return matches;
-}
-
-STATIC I32
-S_do_trans_simple_utf8(pTHX_ SV *sv)/* SPC - OK */
-{
- U8 *s;
- U8 *send;
- U8 *d;
- U8 *start;
- U8 *dstart, *dend;
- I32 matches = 0;
- I32 grows = PL_op->op_private & OPpTRANS_GROWS;
- STRLEN len;
-
- SV* rv = (SV*)cSVOP->op_sv;
- HV* hv = (HV*)SvRV(rv);
- SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
- UV none = svp ? SvUV(*svp) : 0x7fffffff;
- UV extra = none + 1;
- UV final;
- UV uv;
- I32 isutf8;
- U8 hibit = 0;
-
- s = (U8*)SvPV(sv, len);
- isutf8 = SvUTF8(sv);
- if (!isutf8) {
- U8 *t = s, *e = s + len;
- while (t < e)
- if ((hibit = UTF8_IS_CONTINUED(*t++)))
- break;
- if (hibit)
- s = bytes_to_utf8(s, &len);
- }
- send = s + len;
- start = s;
-
- svp = hv_fetch(hv, "FINAL", 5, FALSE);
- if (svp)
- final = SvUV(*svp);
-
- if (grows) {
- /* d needs to be bigger than s, in case e.g. upgrading is required */
- New(0, d, len*3+UTF8_MAXLEN, U8);
- dend = d + len * 3;
- dstart = d;
- }
- else {
- dstart = d = s;
- dend = d + len;
- }
-
- while (s < send) {
- if ((uv = swash_fetch(rv, s)) < none) {
- s += UTF8SKIP(s);
- matches++;
- d = uv_to_utf8(d, uv);
- }
- else if (uv == none) {
- int i = UTF8SKIP(s);
- Copy(s, d, i, U8);
- d += i;
- s += i;
- }
- else if (uv == extra) {
- int i = UTF8SKIP(s);
- s += i;
- matches++;
- d = uv_to_utf8(d, final);
- }
- else
- s += UTF8SKIP(s);
-
- if (d > dend) {
- STRLEN clen = d - dstart;
- STRLEN nlen = dend - dstart + len + UTF8_MAXLEN;
- if (!grows)
- Perl_croak(aTHX_ "panic: do_trans_complex_utf8");
- Renew(dstart, nlen+UTF8_MAXLEN, U8);
- d = dstart + clen;
- dend = dstart + nlen;
- }
- }
- if (grows || hibit) {
- sv_setpvn(sv, (char*)dstart, d - dstart);
- Safefree(dstart);
- if (grows && hibit)
- Safefree(start);
- }
- else {
- *d = '\0';
- SvCUR_set(sv, d - dstart);
- }
- SvSETMAGIC(sv);
- SvUTF8_on(sv);
- if (!isutf8 && !(PL_hints & HINT_UTF8))
- sv_utf8_downgrade(sv, TRUE);
-
- return matches;
-}
-
-STATIC I32
-S_do_trans_count_utf8(pTHX_ SV *sv)/* SPC - OK */
-{
- U8 *s;
- U8 *start, *send;
- I32 matches = 0;
- STRLEN len;
-
- SV* rv = (SV*)cSVOP->op_sv;
- HV* hv = (HV*)SvRV(rv);
- SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
- UV none = svp ? SvUV(*svp) : 0x7fffffff;
- UV uv;
- U8 hibit = 0;
-
- s = (U8*)SvPV(sv, len);
- if (!SvUTF8(sv)) {
- U8 *t = s, *e = s + len;
- while (t < e)
- if ((hibit = !UTF8_IS_ASCII(*t++)))
- break;
- if (hibit)
- start = s = bytes_to_utf8(s, &len);
- }
- send = s + len;
-
- while (s < send) {
- if ((uv = swash_fetch(rv, s)) < none)
- matches++;
- s += UTF8SKIP(s);
- }
- if (hibit)
- Safefree(start);
-
- return matches;
-}
-
-STATIC I32
-S_do_trans_complex_utf8(pTHX_ SV *sv) /* SPC - NOT OK */
-{
- U8 *s;
- U8 *start, *send;
- U8 *d;
- I32 matches = 0;
- I32 squash = PL_op->op_private & OPpTRANS_SQUASH;
- I32 del = PL_op->op_private & OPpTRANS_DELETE;
- I32 grows = PL_op->op_private & OPpTRANS_GROWS;
- SV* rv = (SV*)cSVOP->op_sv;
- HV* hv = (HV*)SvRV(rv);
- SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
- UV none = svp ? SvUV(*svp) : 0x7fffffff;
- UV extra = none + 1;
- UV final;
- UV uv;
- STRLEN len;
- U8 *dstart, *dend;
- I32 isutf8;
- U8 hibit = 0;
-
- s = (U8*)SvPV(sv, len);
- isutf8 = SvUTF8(sv);
- if (!isutf8) {
- U8 *t = s, *e = s + len;
- while (t < e)
- if ((hibit = !UTF8_IS_ASCII(*t++)))
- break;
- if (hibit)
- s = bytes_to_utf8(s, &len);
- }
- send = s + len;
- start = s;
-
- svp = hv_fetch(hv, "FINAL", 5, FALSE);
- if (svp)
- final = SvUV(*svp);
-
- if (grows) {
- /* d needs to be bigger than s, in case e.g. upgrading is required */
- New(0, d, len*3+UTF8_MAXLEN, U8);
- dend = d + len * 3;
- dstart = d;
- }
- else {
- dstart = d = s;
- dend = d + len;
- }
-
- if (squash) {
- UV puv = 0xfeedface;
- while (s < send) {
- uv = swash_fetch(rv, s);
-
- if (d > dend) {
- STRLEN clen = d - dstart;
- STRLEN nlen = dend - dstart + len + UTF8_MAXLEN;
- if (!grows)
- Perl_croak(aTHX_ "panic: do_trans_complex_utf8");
- Renew(dstart, nlen+UTF8_MAXLEN, U8);
- d = dstart + clen;
- dend = dstart + nlen;
- }
- if (uv < none) {
- matches++;
- if (uv != puv) {
- d = uv_to_utf8(d, uv);
- puv = uv;
- }
- s += UTF8SKIP(s);
- continue;
- }
- else if (uv == none) { /* "none" is unmapped character */
- int i = UTF8SKIP(s);
- Copy(s, d, i, U8);
- d += i;
- s += i;
- puv = 0xfeedface;
- continue;
- }
- else if (uv == extra && !del) {
- matches++;
- if (uv != puv) {
- d = uv_to_utf8(d, final);
- puv = final;
- }
- s += UTF8SKIP(s);
- continue;
- }
- matches++; /* "none+1" is delete character */
- s += UTF8SKIP(s);
- }
- }
- else {
- while (s < send) {
- uv = swash_fetch(rv, s);
- if (d > dend) {
- STRLEN clen = d - dstart;
- STRLEN nlen = dend - dstart + len + UTF8_MAXLEN;
- if (!grows)
- Perl_croak(aTHX_ "panic: do_trans_complex_utf8");
- Renew(dstart, nlen+UTF8_MAXLEN, U8);
- d = dstart + clen;
- dend = dstart + nlen;
- }
- if (uv < none) {
- matches++;
- d = uv_to_utf8(d, uv);
- s += UTF8SKIP(s);
- continue;
- }
- else if (uv == none) { /* "none" is unmapped character */
- int i = UTF8SKIP(s);
- Copy(s, d, i, U8);
- d += i;
- s += i;
- continue;
- }
- else if (uv == extra && !del) {
- matches++;
- d = uv_to_utf8(d, final);
- s += UTF8SKIP(s);
- continue;
- }
- matches++; /* "none+1" is delete character */
- s += UTF8SKIP(s);
- }
- }
- if (grows || hibit) {
- sv_setpvn(sv, (char*)dstart, d - dstart);
- Safefree(dstart);
- if (grows && hibit)
- Safefree(start);
- }
- else {
- *d = '\0';
- SvCUR_set(sv, d - dstart);
- }
- SvUTF8_on(sv);
- if (!isutf8 && !(PL_hints & HINT_UTF8))
- sv_utf8_downgrade(sv, TRUE);
- SvSETMAGIC(sv);
-
- return matches;
-}
-
-I32
-Perl_do_trans(pTHX_ SV *sv)
-{
- STRLEN len;
- I32 hasutf = (PL_op->op_private &
- (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF));
-
- if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL))
- Perl_croak(aTHX_ PL_no_modify);
-
- (void)SvPV(sv, len);
- if (!len)
- return 0;
- if (!SvPOKp(sv))
- (void)SvPV_force(sv, len);
- if (!(PL_op->op_private & OPpTRANS_IDENTICAL))
- (void)SvPOK_only_UTF8(sv);
-
- DEBUG_t( Perl_deb(aTHX_ "2.TBL\n"));
-
- switch (PL_op->op_private & ~hasutf & 63) {
- case 0:
- if (hasutf)
- return do_trans_simple_utf8(sv);
- else
- return do_trans_simple(sv);
-
- case OPpTRANS_IDENTICAL:
- if (hasutf)
- return do_trans_count_utf8(sv);
- else
- return do_trans_count(sv);
-
- default:
- if (hasutf)
- return do_trans_complex_utf8(sv);
- else
- return do_trans_complex(sv);
- }
-}
-
-void
-Perl_do_join(pTHX_ register SV *sv, SV *del, register SV **mark, register SV **sp)
-{
- SV **oldmark = mark;
- register I32 items = sp - mark;
- register STRLEN len;
- STRLEN delimlen;
- register char *delim = SvPV(del, delimlen);
- STRLEN tmplen;
-
- mark++;
- len = (items > 0 ? (delimlen * (items - 1) ) : 0);
- (void)SvUPGRADE(sv, SVt_PV);
- if (SvLEN(sv) < len + items) { /* current length is way too short */
- while (items-- > 0) {
- if (*mark && !SvGAMAGIC(*mark) && SvOK(*mark)) {
- SvPV(*mark, tmplen);
- len += tmplen;
- }
- mark++;
- }
- SvGROW(sv, len + 1); /* so try to pre-extend */
-
- mark = oldmark;
- items = sp - mark;
- ++mark;
- }
-
- if (items-- > 0) {
- sv_setpv(sv, "");
- if (*mark)
- sv_catsv(sv, *mark);
- mark++;
- }
- else
- sv_setpv(sv,"");
- if (delimlen) {
- for (; items > 0; items--,mark++) {
- sv_catsv(sv,del);
- sv_catsv(sv,*mark);
- }
- }
- else {
- for (; items > 0; items--,mark++)
- sv_catsv(sv,*mark);
- }
- SvSETMAGIC(sv);
-}
-
-void
-Perl_do_sprintf(pTHX_ SV *sv, I32 len, SV **sarg)
-{
- STRLEN patlen;
- char *pat = SvPV(*sarg, patlen);
- bool do_taint = FALSE;
-
- sv_vsetpvfn(sv, pat, patlen, Null(va_list*), sarg + 1, len - 1, &do_taint);
- SvSETMAGIC(sv);
- if (do_taint)
- SvTAINTED_on(sv);
-}
-
-/* currently converts input to bytes if possible, but doesn't sweat failure */
-UV
-Perl_do_vecget(pTHX_ SV *sv, I32 offset, I32 size)
-{
- STRLEN srclen, len;
- unsigned char *s = (unsigned char *) SvPV(sv, srclen);
- UV retnum = 0;
-
- if (offset < 0)
- return retnum;
- if (size < 1 || (size & (size-1))) /* size < 1 or not a power of two */
- Perl_croak(aTHX_ "Illegal number of bits in vec");
-
- if (SvUTF8(sv))
- (void) Perl_sv_utf8_downgrade(aTHX_ sv, TRUE);
-
- offset *= size; /* turn into bit offset */
- len = (offset + size + 7) / 8; /* required number of bytes */
- if (len > srclen) {
- if (size <= 8)
- retnum = 0;
- else {
- offset >>= 3; /* turn into byte offset */
- if (size == 16) {
- if (offset >= srclen)
- retnum = 0;
- else
- retnum = (UV) s[offset] << 8;
- }
- else if (size == 32) {
- if (offset >= srclen)
- retnum = 0;
- else if (offset + 1 >= srclen)
- retnum =
- ((UV) s[offset ] << 24);
- else if (offset + 2 >= srclen)
- retnum =
- ((UV) s[offset ] << 24) +
- ((UV) s[offset + 1] << 16);
- else
- retnum =
- ((UV) s[offset ] << 24) +
- ((UV) s[offset + 1] << 16) +
- ( s[offset + 2] << 8);
- }
-#ifdef UV_IS_QUAD
- else if (size == 64) {
- if (ckWARN(WARN_PORTABLE))
- Perl_warner(aTHX_ WARN_PORTABLE,
- "Bit vector size > 32 non-portable");
- if (offset >= srclen)
- retnum = 0;
- else if (offset + 1 >= srclen)
- retnum =
- (UV) s[offset ] << 56;
- else if (offset + 2 >= srclen)
- retnum =
- ((UV) s[offset ] << 56) +
- ((UV) s[offset + 1] << 48);
- else if (offset + 3 >= srclen)
- retnum =
- ((UV) s[offset ] << 56) +
- ((UV) s[offset + 1] << 48) +
- ((UV) s[offset + 2] << 40);
- else if (offset + 4 >= srclen)
- retnum =
- ((UV) s[offset ] << 56) +
- ((UV) s[offset + 1] << 48) +
- ((UV) s[offset + 2] << 40) +
- ((UV) s[offset + 3] << 32);
- else if (offset + 5 >= srclen)
- retnum =
- ((UV) s[offset ] << 56) +
- ((UV) s[offset + 1] << 48) +
- ((UV) s[offset + 2] << 40) +
- ((UV) s[offset + 3] << 32) +
- ( s[offset + 4] << 24);
- else if (offset + 6 >= srclen)
- retnum =
- ((UV) s[offset ] << 56) +
- ((UV) s[offset + 1] << 48) +
- ((UV) s[offset + 2] << 40) +
- ((UV) s[offset + 3] << 32) +
- ((UV) s[offset + 4] << 24) +
- ((UV) s[offset + 5] << 16);
- else
- retnum =
- ((UV) s[offset ] << 56) +
- ((UV) s[offset + 1] << 48) +
- ((UV) s[offset + 2] << 40) +
- ((UV) s[offset + 3] << 32) +
- ((UV) s[offset + 4] << 24) +
- ((UV) s[offset + 5] << 16) +
- ( s[offset + 6] << 8);
- }
-#endif
- }
- }
- else if (size < 8)
- retnum = (s[offset >> 3] >> (offset & 7)) & ((1 << size) - 1);
- else {
- offset >>= 3; /* turn into byte offset */
- if (size == 8)
- retnum = s[offset];
- else if (size == 16)
- retnum =
- ((UV) s[offset] << 8) +
- s[offset + 1];
- else if (size == 32)
- retnum =
- ((UV) s[offset ] << 24) +
- ((UV) s[offset + 1] << 16) +
- ( s[offset + 2] << 8) +
- s[offset + 3];
-#ifdef UV_IS_QUAD
- else if (size == 64) {
- if (ckWARN(WARN_PORTABLE))
- Perl_warner(aTHX_ WARN_PORTABLE,
- "Bit vector size > 32 non-portable");
- retnum =
- ((UV) s[offset ] << 56) +
- ((UV) s[offset + 1] << 48) +
- ((UV) s[offset + 2] << 40) +
- ((UV) s[offset + 3] << 32) +
- ((UV) s[offset + 4] << 24) +
- ((UV) s[offset + 5] << 16) +
- ( s[offset + 6] << 8) +
- s[offset + 7];
- }
-#endif
- }
-
- return retnum;
-}
-
-/* currently converts input to bytes if possible but doesn't sweat failures,
- * although it does ensure that the string it clobbers is not marked as
- * utf8-valid any more
- */
-void
-Perl_do_vecset(pTHX_ SV *sv)
-{
- SV *targ = LvTARG(sv);
- register I32 offset;
- register I32 size;
- register unsigned char *s;
- register UV lval;
- I32 mask;
- STRLEN targlen;
- STRLEN len;
-
- if (!targ)
- return;
- s = (unsigned char*)SvPV_force(targ, targlen);
- if (SvUTF8(targ)) {
- /* This is handled by the SvPOK_only below...
- if (!Perl_sv_utf8_downgrade(aTHX_ targ, TRUE))
- SvUTF8_off(targ);
- */
- (void) Perl_sv_utf8_downgrade(aTHX_ targ, TRUE);
- }
-
- (void)SvPOK_only(targ);
- lval = SvUV(sv);
- offset = LvTARGOFF(sv);
- if (offset < 0)
- Perl_croak(aTHX_ "Assigning to negative offset in vec");
- size = LvTARGLEN(sv);
- if (size < 1 || (size & (size-1))) /* size < 1 or not a power of two */
- Perl_croak(aTHX_ "Illegal number of bits in vec");
-
- offset *= size; /* turn into bit offset */
- len = (offset + size + 7) / 8; /* required number of bytes */
- if (len > targlen) {
- s = (unsigned char*)SvGROW(targ, len + 1);
- (void)memzero(s + targlen, len - targlen + 1);
- SvCUR_set(targ, len);
- }
-
- if (size < 8) {
- mask = (1 << size) - 1;
- size = offset & 7;
- lval &= mask;
- offset >>= 3; /* turn into byte offset */
- s[offset] &= ~(mask << size);
- s[offset] |= lval << size;
- }
- else {
- offset >>= 3; /* turn into byte offset */
- if (size == 8)
- s[offset ] = lval & 0xff;
- else if (size == 16) {
- s[offset ] = (lval >> 8) & 0xff;
- s[offset+1] = lval & 0xff;
- }
- else if (size == 32) {
- s[offset ] = (lval >> 24) & 0xff;
- s[offset+1] = (lval >> 16) & 0xff;
- s[offset+2] = (lval >> 8) & 0xff;
- s[offset+3] = lval & 0xff;
- }
-#ifdef UV_IS_QUAD
- else if (size == 64) {
- if (ckWARN(WARN_PORTABLE))
- Perl_warner(aTHX_ WARN_PORTABLE,
- "Bit vector size > 32 non-portable");
- s[offset ] = (lval >> 56) & 0xff;
- s[offset+1] = (lval >> 48) & 0xff;
- s[offset+2] = (lval >> 40) & 0xff;
- s[offset+3] = (lval >> 32) & 0xff;
- s[offset+4] = (lval >> 24) & 0xff;
- s[offset+5] = (lval >> 16) & 0xff;
- s[offset+6] = (lval >> 8) & 0xff;
- s[offset+7] = lval & 0xff;
- }
-#endif
- }
- SvSETMAGIC(targ);
-}
-
-void
-Perl_do_chop(pTHX_ register SV *astr, register SV *sv)
-{
- STRLEN len;
- char *s;
-
- if (SvTYPE(sv) == SVt_PVAV) {
- register I32 i;
- I32 max;
- AV* av = (AV*)sv;
- max = AvFILL(av);
- for (i = 0; i <= max; i++) {
- sv = (SV*)av_fetch(av, i, FALSE);
- if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
- do_chop(astr, sv);
- }
- return;
- }
- else if (SvTYPE(sv) == SVt_PVHV) {
- HV* hv = (HV*)sv;
- HE* entry;
- (void)hv_iterinit(hv);
- /*SUPPRESS 560*/
- while ((entry = hv_iternext(hv)))
- do_chop(astr,hv_iterval(hv,entry));
- return;
- }
- else if (SvREADONLY(sv))
- Perl_croak(aTHX_ PL_no_modify);
- s = SvPV(sv, len);
- if (len && !SvPOK(sv))
- s = SvPV_force(sv, len);
- if (DO_UTF8(sv)) {
- if (s && len) {
- char *send = s + len;
- char *start = s;
- s = send - 1;
- while (s > start && UTF8_IS_CONTINUATION(*s))
- s--;
- if (utf8_to_uv_simple((U8*)s, 0)) {
- sv_setpvn(astr, s, send - s);
- *s = '\0';
- SvCUR_set(sv, s - start);
- SvNIOK_off(sv);
- SvUTF8_on(astr);
- }
- }
- else
- sv_setpvn(astr, "", 0);
- }
- else if (s && len) {
- s += --len;
- sv_setpvn(astr, s, 1);
- *s = '\0';
- SvCUR_set(sv, len);
- SvUTF8_off(sv);
- SvNIOK_off(sv);
- }
- else
- sv_setpvn(astr, "", 0);
- SvSETMAGIC(sv);
-}
-
-I32
-Perl_do_chomp(pTHX_ register SV *sv)
-{
- register I32 count;
- STRLEN len;
- char *s;
-
- if (RsSNARF(PL_rs))
- return 0;
- if (RsRECORD(PL_rs))
- return 0;
- count = 0;
- if (SvTYPE(sv) == SVt_PVAV) {
- register I32 i;
- I32 max;
- AV* av = (AV*)sv;
- max = AvFILL(av);
- for (i = 0; i <= max; i++) {
- sv = (SV*)av_fetch(av, i, FALSE);
- if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
- count += do_chomp(sv);
- }
- return count;
- }
- else if (SvTYPE(sv) == SVt_PVHV) {
- HV* hv = (HV*)sv;
- HE* entry;
- (void)hv_iterinit(hv);
- /*SUPPRESS 560*/
- while ((entry = hv_iternext(hv)))
- count += do_chomp(hv_iterval(hv,entry));
- return count;
- }
- else if (SvREADONLY(sv))
- Perl_croak(aTHX_ PL_no_modify);
- s = SvPV(sv, len);
- if (len && !SvPOKp(sv))
- s = SvPV_force(sv, len);
- if (s && len) {
- s += --len;
- if (RsPARA(PL_rs)) {
- if (*s != '\n')
- goto nope;
- ++count;
- while (len && s[-1] == '\n') {
- --len;
- --s;
- ++count;
- }
- }
- else {
- STRLEN rslen;
- char *rsptr = SvPV(PL_rs, rslen);
- if (rslen == 1) {
- if (*s != *rsptr)
- goto nope;
- ++count;
- }
- else {
- if (len < rslen - 1)
- goto nope;
- len -= rslen - 1;
- s -= rslen - 1;
- if (memNE(s, rsptr, rslen))
- goto nope;
- count += rslen;
- }
- }
- *s = '\0';
- SvCUR_set(sv, len);
- SvNIOK_off(sv);
- }
- nope:
- SvSETMAGIC(sv);
- return count;
-}
-
-void
-Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
-{
-#ifdef LIBERAL
- register long *dl;
- register long *ll;
- register long *rl;
-#endif
- register char *dc;
- STRLEN leftlen;
- STRLEN rightlen;
- register char *lc;
- register char *rc;
- register I32 len;
- I32 lensave;
- char *lsave;
- char *rsave;
- bool left_utf = DO_UTF8(left);
- bool right_utf = DO_UTF8(right);
- I32 needlen;
-
- if (left_utf && !right_utf)
- sv_utf8_upgrade(right);
- else if (!left_utf && right_utf)
- sv_utf8_upgrade(left);
-
- if (sv != left || (optype != OP_BIT_AND && !SvOK(sv) && !SvGMAGICAL(sv)))
- sv_setpvn(sv, "", 0); /* avoid undef warning on |= and ^= */
- lsave = lc = SvPV(left, leftlen);
- rsave = rc = SvPV(right, rightlen);
- len = leftlen < rightlen ? leftlen : rightlen;
- lensave = len;
- if ((left_utf || right_utf) && (sv == left || sv == right)) {
- needlen = optype == OP_BIT_AND ? len : leftlen + rightlen;
- Newz(801, dc, needlen + 1, char);
- }
- else if (SvOK(sv) || SvTYPE(sv) > SVt_PVMG) {
- STRLEN n_a;
- dc = SvPV_force(sv, n_a);
- if (SvCUR(sv) < len) {
- dc = SvGROW(sv, len + 1);
- (void)memzero(dc + SvCUR(sv), len - SvCUR(sv) + 1);
- }
- if (optype != OP_BIT_AND && (left_utf || right_utf))
- dc = SvGROW(sv, leftlen + rightlen + 1);
- }
- else {
- needlen = ((optype == OP_BIT_AND)
- ? len : (leftlen > rightlen ? leftlen : rightlen));
- Newz(801, dc, needlen + 1, char);
- (void)sv_usepvn(sv, dc, needlen);
- dc = SvPVX(sv); /* sv_usepvn() calls Renew() */
- }
- SvCUR_set(sv, len);
- (void)SvPOK_only(sv);
- if (left_utf || right_utf) {
- UV duc, luc, ruc;
- char *dcsave = dc;
- STRLEN lulen = leftlen;
- STRLEN rulen = rightlen;
- STRLEN ulen;
-
- switch (optype) {
- case OP_BIT_AND:
- while (lulen && rulen) {
- luc = utf8_to_uv((U8*)lc, lulen, &ulen, UTF8_ALLOW_ANYUV);
- lc += ulen;
- lulen -= ulen;
- ruc = utf8_to_uv((U8*)rc, rulen, &ulen, UTF8_ALLOW_ANYUV);
- rc += ulen;
- rulen -= ulen;
- duc = luc & ruc;
- dc = (char*)uv_to_utf8((U8*)dc, duc);
- }
- if (sv == left || sv == right)
- (void)sv_usepvn(sv, dcsave, needlen);
- SvCUR_set(sv, dc - dcsave);
- break;
- case OP_BIT_XOR:
- while (lulen && rulen) {
- luc = utf8_to_uv((U8*)lc, lulen, &ulen, UTF8_ALLOW_ANYUV);
- lc += ulen;
- lulen -= ulen;
- ruc = utf8_to_uv((U8*)rc, rulen, &ulen, UTF8_ALLOW_ANYUV);
- rc += ulen;
- rulen -= ulen;
- duc = luc ^ ruc;
- dc = (char*)uv_to_utf8((U8*)dc, duc);
- }
- goto mop_up_utf;
- case OP_BIT_OR:
- while (lulen && rulen) {
- luc = utf8_to_uv((U8*)lc, lulen, &ulen, UTF8_ALLOW_ANYUV);
- lc += ulen;
- lulen -= ulen;
- ruc = utf8_to_uv((U8*)rc, rulen, &ulen, UTF8_ALLOW_ANYUV);
- rc += ulen;
- rulen -= ulen;
- duc = luc | ruc;
- dc = (char*)uv_to_utf8((U8*)dc, duc);
- }
- mop_up_utf:
- if (sv == left || sv == right)
- (void)sv_usepvn(sv, dcsave, needlen);
- SvCUR_set(sv, dc - dcsave);
- if (rulen)
- sv_catpvn(sv, rc, rulen);
- else if (lulen)
- sv_catpvn(sv, lc, lulen);
- else
- *SvEND(sv) = '\0';
- break;
- }
- SvUTF8_on(sv);
- goto finish;
- }
- else
-#ifdef LIBERAL
- if (len >= sizeof(long)*4 &&
- !((long)dc % sizeof(long)) &&
- !((long)lc % sizeof(long)) &&
- !((long)rc % sizeof(long))) /* It's almost always aligned... */
- {
- I32 remainder = len % (sizeof(long)*4);
- len /= (sizeof(long)*4);
-
- dl = (long*)dc;
- ll = (long*)lc;
- rl = (long*)rc;
-
- switch (optype) {
- case OP_BIT_AND:
- while (len--) {
- *dl++ = *ll++ & *rl++;
- *dl++ = *ll++ & *rl++;
- *dl++ = *ll++ & *rl++;
- *dl++ = *ll++ & *rl++;
- }
- break;
- case OP_BIT_XOR:
- while (len--) {
- *dl++ = *ll++ ^ *rl++;
- *dl++ = *ll++ ^ *rl++;
- *dl++ = *ll++ ^ *rl++;
- *dl++ = *ll++ ^ *rl++;
- }
- break;
- case OP_BIT_OR:
- while (len--) {
- *dl++ = *ll++ | *rl++;
- *dl++ = *ll++ | *rl++;
- *dl++ = *ll++ | *rl++;
- *dl++ = *ll++ | *rl++;
- }
- }
-
- dc = (char*)dl;
- lc = (char*)ll;
- rc = (char*)rl;
-
- len = remainder;
- }
-#endif
- {
- switch (optype) {
- case OP_BIT_AND:
- while (len--)
- *dc++ = *lc++ & *rc++;
- break;
- case OP_BIT_XOR:
- while (len--)
- *dc++ = *lc++ ^ *rc++;
- goto mop_up;
- case OP_BIT_OR:
- while (len--)
- *dc++ = *lc++ | *rc++;
- mop_up:
- len = lensave;
- if (rightlen > len)
- sv_catpvn(sv, rsave + len, rightlen - len);
- else if (leftlen > len)
- sv_catpvn(sv, lsave + len, leftlen - len);
- else
- *SvEND(sv) = '\0';
- break;
- }
- }
-finish:
- SvTAINT(sv);
-}
-
-OP *
-Perl_do_kv(pTHX)
-{
- dSP;
- HV *hv = (HV*)POPs;
- HV *keys;
- register HE *entry;
- SV *tmpstr;
- I32 gimme = GIMME_V;
- I32 dokeys = (PL_op->op_type == OP_KEYS);
- I32 dovalues = (PL_op->op_type == OP_VALUES);
- I32 realhv = (SvTYPE(hv) == SVt_PVHV);
-
- if (PL_op->op_type == OP_RV2HV || PL_op->op_type == OP_PADHV)
- dokeys = dovalues = TRUE;
-
- if (!hv) {
- if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */
- dTARGET; /* make sure to clear its target here */
- if (SvTYPE(TARG) == SVt_PVLV)
- LvTARG(TARG) = Nullsv;
- PUSHs(TARG);
- }
- RETURN;
- }
-
- keys = realhv ? hv : avhv_keys((AV*)hv);
- (void)hv_iterinit(keys); /* always reset iterator regardless */
-
- if (gimme == G_VOID)
- RETURN;
-
- if (gimme == G_SCALAR) {
- IV i;
- dTARGET;
-
- if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */
- if (SvTYPE(TARG) < SVt_PVLV) {
- sv_upgrade(TARG, SVt_PVLV);
- sv_magic(TARG, Nullsv, 'k', Nullch, 0);
- }
- LvTYPE(TARG) = 'k';
- if (LvTARG(TARG) != (SV*)keys) {
- if (LvTARG(TARG))
- SvREFCNT_dec(LvTARG(TARG));
- LvTARG(TARG) = SvREFCNT_inc(keys);
- }
- PUSHs(TARG);
- RETURN;
- }
-
- if (! SvTIED_mg((SV*)keys, 'P'))
- i = HvKEYS(keys);
- else {
- i = 0;
- /*SUPPRESS 560*/
- while (hv_iternext(keys)) i++;
- }
- PUSHi( i );
- RETURN;
- }
-
- EXTEND(SP, HvKEYS(keys) * (dokeys + dovalues));
-
- PUTBACK; /* hv_iternext and hv_iterval might clobber stack_sp */
- while ((entry = hv_iternext(keys))) {
- SPAGAIN;
- if (dokeys)
- XPUSHs(hv_iterkeysv(entry)); /* won't clobber stack_sp */
- if (dovalues) {
- PUTBACK;
- tmpstr = realhv ?
- hv_iterval(hv,entry) : avhv_iterval((AV*)hv,entry);
- DEBUG_H(Perl_sv_setpvf(aTHX_ tmpstr, "%lu%%%d=%lu",
- (unsigned long)HeHASH(entry),
- HvMAX(keys)+1,
- (unsigned long)(HeHASH(entry) & HvMAX(keys))));
- SPAGAIN;
- XPUSHs(tmpstr);
- }
- PUTBACK;
- }
- return NORMAL;
-}
-
diff --git a/contrib/perl5/dosish.h b/contrib/perl5/dosish.h
deleted file mode 100644
index 5f12b9d..0000000
--- a/contrib/perl5/dosish.h
+++ /dev/null
@@ -1,118 +0,0 @@
-#define ABORT() abort();
-
-#ifndef SH_PATH
-#define SH_PATH "/bin/sh"
-#endif
-
-#ifdef DJGPP
-# define BIT_BUCKET "nul"
-# define OP_BINARY O_BINARY
-# define PERL_SYS_INIT(c,v) Perl_DJGPP_init(c,v)
-# define init_os_extras Perl_init_os_extras
-# include <signal.h>
-# define HAS_UTIME
-# define HAS_KILL
- char *djgpp_pathexp (const char*);
-# if (DJGPP==2 && DJGPP_MINOR < 2)
-# define NO_LOCALECONV_MON_THOUSANDS_SEP
-# endif
-# ifdef USE_THREADS
-# define OLD_PTHREADS_API
-# endif
-# define PERL_FS_VER_FMT "%d_%d_%d"
-#else /* DJGPP */
-# ifdef WIN32
-# define PERL_SYS_INIT(c,v) Perl_win32_init(c,v)
-# define BIT_BUCKET "nul"
-# else
-# define PERL_SYS_INIT(c,v)
-# define BIT_BUCKET "\\dev\\nul" /* "wanna be like, umm, Newlined, or somethin?" */
-# endif
-#endif /* DJGPP */
-
-#define PERL_SYS_TERM() OP_REFCNT_TERM; MALLOC_TERM
-#define dXSUB_SYS
-
-/*
- * 5.003_07 and earlier keyed on #ifdef MSDOS for determining if we were
- * running on DOS, *and* if we had to cope with 16 bit memory addressing
- * constraints, *and* we need to have memory allocated as unsigned long.
- *
- * with the advent of *real* compilers for DOS, they are not locked together.
- * MSDOS means "I am running on MSDOS". HAS_64K_LIMIT means "I have
- * 16 bit memory addressing constraints".
- *
- * if you need the last, try #DEFINE MEM_SIZE unsigned long.
- */
-#ifdef MSDOS
- #ifndef DJGPP
- #define HAS_64K_LIMIT
- #endif
-#endif
-
-/* USEMYBINMODE
- * This symbol, if defined, indicates that the program should
- * use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
- * that a file is in "binary" mode -- that is, that no translation
- * of bytes occurs on read or write operations.
- */
-#undef USEMYBINMODE
-
-/* Stat_t:
- * This symbol holds the type used to declare buffers for information
- * returned by stat(). It's usually just struct stat. It may be necessary
- * to include <sys/stat.h> and <sys/types.h> to get any typedef'ed
- * information.
- */
-#define Stat_t struct stat
-
-/* USE_STAT_RDEV:
- * This symbol is defined if this system has a stat structure declaring
- * st_rdev
- */
-#define USE_STAT_RDEV /**/
-
-/* ACME_MESS:
- * This symbol, if defined, indicates that error messages should be
- * should be generated in a format that allows the use of the Acme
- * GUI/editor's autofind feature.
- */
-#undef ACME_MESS /**/
-
-/* ALTERNATE_SHEBANG:
- * This symbol, if defined, contains a "magic" string which may be used
- * as the first line of a Perl program designed to be executed directly
- * by name, instead of the standard Unix #!. If ALTERNATE_SHEBANG
- * begins with a character other then #, then Perl will only treat
- * it as a command line if if finds the string "perl" in the first
- * word; otherwise it's treated as the first line of code in the script.
- * (IOW, Perl won't hand off to another interpreter via an alternate
- * shebang sequence that might be legal Perl code.)
- */
-/* #define ALTERNATE_SHEBANG "#!" / **/
-
-/*
- * fwrite1() should be a routine with the same calling sequence as fwrite(),
- * but which outputs all of the bytes requested as a single stream (unlike
- * fwrite() itself, which on some systems outputs several distinct records
- * if the number_of_items parameter is >1).
- */
-#define fwrite1 fwrite
-
-#define Fstat(fd,bufptr) fstat((fd),(bufptr))
-#ifdef DJGPP
-# define Fflush(fp) djgpp_fflush(fp)
-#else
-# define Fflush(fp) fflush(fp)
-#endif
-#define Mkdir(path,mode) mkdir((path),(mode))
-
-#ifndef WIN32
-# define Stat(fname,bufptr) stat((fname),(bufptr))
-#else
-# define HAS_IOCTL
-# define HAS_UTIME
-# define HAS_KILL
-# define HAS_WAIT
-# define HAS_CHOWN
-#endif /* WIN32 */
diff --git a/contrib/perl5/dump.c b/contrib/perl5/dump.c
deleted file mode 100644
index c9a788c..0000000
--- a/contrib/perl5/dump.c
+++ /dev/null
@@ -1,1192 +0,0 @@
-/* dump.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "'You have talked long in your sleep, Frodo,' said Gandalf gently, 'and
- * it has not been hard for me to read your mind and memory.'"
- */
-
-#include "EXTERN.h"
-#define PERL_IN_DUMP_C
-#include "perl.h"
-#include "regcomp.h"
-
-void
-Perl_dump_indent(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- dump_vindent(level, file, pat, &args);
- va_end(args);
-}
-
-void
-Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args)
-{
- PerlIO_printf(file, "%*s", (int)(level*PL_dumpindent), "");
- PerlIO_vprintf(file, pat, *args);
-}
-
-void
-Perl_dump_all(pTHX)
-{
- PerlIO_setlinebuf(Perl_debug_log);
- if (PL_main_root)
- op_dump(PL_main_root);
- dump_packsubs(PL_defstash);
-}
-
-void
-Perl_dump_packsubs(pTHX_ HV *stash)
-{
- I32 i;
- HE *entry;
-
- if (!HvARRAY(stash))
- return;
- for (i = 0; i <= (I32) HvMAX(stash); i++) {
- for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
- GV *gv = (GV*)HeVAL(entry);
- HV *hv;
- if (SvTYPE(gv) != SVt_PVGV || !GvGP(gv))
- continue;
- if (GvCVu(gv))
- dump_sub(gv);
- if (GvFORM(gv))
- dump_form(gv);
- if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
- (hv = GvHV(gv)) && HvNAME(hv) && hv != PL_defstash)
- dump_packsubs(hv); /* nested package */
- }
- }
-}
-
-void
-Perl_dump_sub(pTHX_ GV *gv)
-{
- SV *sv = sv_newmortal();
-
- gv_fullname3(sv, gv, Nullch);
- Perl_dump_indent(aTHX_ 0, Perl_debug_log, "\nSUB %s = ", SvPVX(sv));
- if (CvXSUB(GvCV(gv)))
- Perl_dump_indent(aTHX_ 0, Perl_debug_log, "(xsub 0x%lx %d)\n",
- (long)CvXSUB(GvCV(gv)),
- (int)CvXSUBANY(GvCV(gv)).any_i32);
- else if (CvROOT(GvCV(gv)))
- op_dump(CvROOT(GvCV(gv)));
- else
- Perl_dump_indent(aTHX_ 0, Perl_debug_log, "<undef>\n");
-}
-
-void
-Perl_dump_form(pTHX_ GV *gv)
-{
- SV *sv = sv_newmortal();
-
- gv_fullname3(sv, gv, Nullch);
- Perl_dump_indent(aTHX_ 0, Perl_debug_log, "\nFORMAT %s = ", SvPVX(sv));
- if (CvROOT(GvFORM(gv)))
- op_dump(CvROOT(GvFORM(gv)));
- else
- Perl_dump_indent(aTHX_ 0, Perl_debug_log, "<undef>\n");
-}
-
-void
-Perl_dump_eval(pTHX)
-{
- op_dump(PL_eval_root);
-}
-
-char *
-Perl_pv_display(pTHX_ SV *sv, char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
-{
- int truncated = 0;
- int nul_terminated = len > cur && pv[cur] == '\0';
-
- sv_setpvn(sv, "\"", 1);
- for (; cur--; pv++) {
- if (pvlim && SvCUR(sv) >= pvlim) {
- truncated++;
- break;
- }
- if (isPRINT(*pv)) {
- switch (*pv) {
- case '\t': sv_catpvn(sv, "\\t", 2); break;
- case '\n': sv_catpvn(sv, "\\n", 2); break;
- case '\r': sv_catpvn(sv, "\\r", 2); break;
- case '\f': sv_catpvn(sv, "\\f", 2); break;
- case '"': sv_catpvn(sv, "\\\"", 2); break;
- case '\\': sv_catpvn(sv, "\\\\", 2); break;
- default: sv_catpvn(sv, pv, 1); break;
- }
- }
- else {
- if (cur && isDIGIT(*(pv+1)))
- Perl_sv_catpvf(aTHX_ sv, "\\%03o", (U8)*pv);
- else
- Perl_sv_catpvf(aTHX_ sv, "\\%o", (U8)*pv);
- }
- }
- sv_catpvn(sv, "\"", 1);
- if (truncated)
- sv_catpvn(sv, "...", 3);
- if (nul_terminated)
- sv_catpvn(sv, "\\0", 2);
-
- return SvPVX(sv);
-}
-
-char *
-Perl_sv_peek(pTHX_ SV *sv)
-{
- SV *t = sv_newmortal();
- STRLEN n_a;
- int unref = 0;
-
- sv_setpvn(t, "", 0);
- retry:
- if (!sv) {
- sv_catpv(t, "VOID");
- goto finish;
- }
- else if (sv == (SV*)0x55555555 || SvTYPE(sv) == 'U') {
- sv_catpv(t, "WILD");
- goto finish;
- }
- else if (sv == &PL_sv_undef || sv == &PL_sv_no || sv == &PL_sv_yes) {
- if (sv == &PL_sv_undef) {
- sv_catpv(t, "SV_UNDEF");
- if (!(SvFLAGS(sv) & (SVf_OK|SVf_OOK|SVs_OBJECT|
- SVs_GMG|SVs_SMG|SVs_RMG)) &&
- SvREADONLY(sv))
- goto finish;
- }
- else if (sv == &PL_sv_no) {
- sv_catpv(t, "SV_NO");
- if (!(SvFLAGS(sv) & (SVf_ROK|SVf_OOK|SVs_OBJECT|
- SVs_GMG|SVs_SMG|SVs_RMG)) &&
- !(~SvFLAGS(sv) & (SVf_POK|SVf_NOK|SVf_READONLY|
- SVp_POK|SVp_NOK)) &&
- SvCUR(sv) == 0 &&
- SvNVX(sv) == 0.0)
- goto finish;
- }
- else {
- sv_catpv(t, "SV_YES");
- if (!(SvFLAGS(sv) & (SVf_ROK|SVf_OOK|SVs_OBJECT|
- SVs_GMG|SVs_SMG|SVs_RMG)) &&
- !(~SvFLAGS(sv) & (SVf_POK|SVf_NOK|SVf_READONLY|
- SVp_POK|SVp_NOK)) &&
- SvCUR(sv) == 1 &&
- SvPVX(sv) && *SvPVX(sv) == '1' &&
- SvNVX(sv) == 1.0)
- goto finish;
- }
- sv_catpv(t, ":");
- }
- else if (SvREFCNT(sv) == 0) {
- sv_catpv(t, "(");
- unref++;
- }
- if (SvROK(sv)) {
- sv_catpv(t, "\\");
- if (SvCUR(t) + unref > 10) {
- SvCUR(t) = unref + 3;
- *SvEND(t) = '\0';
- sv_catpv(t, "...");
- goto finish;
- }
- sv = (SV*)SvRV(sv);
- goto retry;
- }
- switch (SvTYPE(sv)) {
- default:
- sv_catpv(t, "FREED");
- goto finish;
-
- case SVt_NULL:
- sv_catpv(t, "UNDEF");
- goto finish;
- case SVt_IV:
- sv_catpv(t, "IV");
- break;
- case SVt_NV:
- sv_catpv(t, "NV");
- break;
- case SVt_RV:
- sv_catpv(t, "RV");
- break;
- case SVt_PV:
- sv_catpv(t, "PV");
- break;
- case SVt_PVIV:
- sv_catpv(t, "PVIV");
- break;
- case SVt_PVNV:
- sv_catpv(t, "PVNV");
- break;
- case SVt_PVMG:
- sv_catpv(t, "PVMG");
- break;
- case SVt_PVLV:
- sv_catpv(t, "PVLV");
- break;
- case SVt_PVAV:
- sv_catpv(t, "AV");
- break;
- case SVt_PVHV:
- sv_catpv(t, "HV");
- break;
- case SVt_PVCV:
- if (CvGV(sv))
- Perl_sv_catpvf(aTHX_ t, "CV(%s)", GvNAME(CvGV(sv)));
- else
- sv_catpv(t, "CV()");
- goto finish;
- case SVt_PVGV:
- sv_catpv(t, "GV");
- break;
- case SVt_PVBM:
- sv_catpv(t, "BM");
- break;
- case SVt_PVFM:
- sv_catpv(t, "FM");
- break;
- case SVt_PVIO:
- sv_catpv(t, "IO");
- break;
- }
-
- if (SvPOKp(sv)) {
- if (!SvPVX(sv))
- sv_catpv(t, "(null)");
- else {
- SV *tmp = newSVpvn("", 0);
- sv_catpv(t, "(");
- if (SvOOK(sv))
- Perl_sv_catpvf(aTHX_ t, "[%s]", pv_display(tmp, SvPVX(sv)-SvIVX(sv), SvIVX(sv), 0, 127));
- Perl_sv_catpvf(aTHX_ t, "%s)", pv_display(tmp, SvPVX(sv), SvCUR(sv), SvLEN(sv), 127));
- SvREFCNT_dec(tmp);
- }
- }
- else if (SvNOKp(sv)) {
- STORE_NUMERIC_LOCAL_SET_STANDARD();
- Perl_sv_catpvf(aTHX_ t, "(%g)",SvNVX(sv));
- RESTORE_NUMERIC_LOCAL();
- }
- else if (SvIOKp(sv)) {
- if (SvIsUV(sv))
- Perl_sv_catpvf(aTHX_ t, "(%"UVuf")", (UV)SvUVX(sv));
- else
- Perl_sv_catpvf(aTHX_ t, "(%"IVdf")", (IV)SvIVX(sv));
- }
- else
- sv_catpv(t, "()");
-
- finish:
- if (unref) {
- while (unref--)
- sv_catpv(t, ")");
- }
- return SvPV(t, n_a);
-}
-
-void
-Perl_do_pmop_dump(pTHX_ I32 level, PerlIO *file, PMOP *pm)
-{
- char ch;
-
- if (!pm) {
- Perl_dump_indent(aTHX_ level, file, "{}\n");
- return;
- }
- Perl_dump_indent(aTHX_ level, file, "{\n");
- level++;
- if (pm->op_pmflags & PMf_ONCE)
- ch = '?';
- else
- ch = '/';
- if (pm->op_pmregexp)
- Perl_dump_indent(aTHX_ level, file, "PMf_PRE %c%s%c%s\n",
- ch, pm->op_pmregexp->precomp, ch,
- (pm->op_private & OPpRUNTIME) ? " (RUNTIME)" : "");
- else
- Perl_dump_indent(aTHX_ level, file, "PMf_PRE (RUNTIME)\n");
- if (pm->op_type != OP_PUSHRE && pm->op_pmreplroot) {
- Perl_dump_indent(aTHX_ level, file, "PMf_REPL = ");
- op_dump(pm->op_pmreplroot);
- }
- if (pm->op_pmflags || (pm->op_pmregexp && pm->op_pmregexp->check_substr)) {
- SV *tmpsv = newSVpvn("", 0);
- if (pm->op_pmdynflags & PMdf_USED)
- sv_catpv(tmpsv, ",USED");
- if (pm->op_pmdynflags & PMdf_TAINTED)
- sv_catpv(tmpsv, ",TAINTED");
- if (pm->op_pmflags & PMf_ONCE)
- sv_catpv(tmpsv, ",ONCE");
- if (pm->op_pmregexp && pm->op_pmregexp->check_substr
- && !(pm->op_pmregexp->reganch & ROPT_NOSCAN))
- sv_catpv(tmpsv, ",SCANFIRST");
- if (pm->op_pmregexp && pm->op_pmregexp->check_substr
- && pm->op_pmregexp->reganch & ROPT_CHECK_ALL)
- sv_catpv(tmpsv, ",ALL");
- if (pm->op_pmflags & PMf_SKIPWHITE)
- sv_catpv(tmpsv, ",SKIPWHITE");
- if (pm->op_pmflags & PMf_CONST)
- sv_catpv(tmpsv, ",CONST");
- if (pm->op_pmflags & PMf_KEEP)
- sv_catpv(tmpsv, ",KEEP");
- if (pm->op_pmflags & PMf_GLOBAL)
- sv_catpv(tmpsv, ",GLOBAL");
- if (pm->op_pmflags & PMf_CONTINUE)
- sv_catpv(tmpsv, ",CONTINUE");
- if (pm->op_pmflags & PMf_RETAINT)
- sv_catpv(tmpsv, ",RETAINT");
- if (pm->op_pmflags & PMf_EVAL)
- sv_catpv(tmpsv, ",EVAL");
- Perl_dump_indent(aTHX_ level, file, "PMFLAGS = (%s)\n", SvCUR(tmpsv) ? SvPVX(tmpsv) + 1 : "");
- SvREFCNT_dec(tmpsv);
- }
-
- Perl_dump_indent(aTHX_ level-1, file, "}\n");
-}
-
-void
-Perl_pmop_dump(pTHX_ PMOP *pm)
-{
- do_pmop_dump(0, Perl_debug_log, pm);
-}
-
-void
-Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o)
-{
- Perl_dump_indent(aTHX_ level, file, "{\n");
- level++;
- if (o->op_seq)
- PerlIO_printf(file, "%-4d", o->op_seq);
- else
- PerlIO_printf(file, " ");
- PerlIO_printf(file,
- "%*sTYPE = %s ===> ",
- (int)(PL_dumpindent*level-4), "", PL_op_name[o->op_type]);
- if (o->op_next) {
- if (o->op_seq)
- PerlIO_printf(file, "%d\n", o->op_next->op_seq);
- else
- PerlIO_printf(file, "(%d)\n", o->op_next->op_seq);
- }
- else
- PerlIO_printf(file, "DONE\n");
- if (o->op_targ) {
- if (o->op_type == OP_NULL)
- Perl_dump_indent(aTHX_ level, file, " (was %s)\n", PL_op_name[o->op_targ]);
- else
- Perl_dump_indent(aTHX_ level, file, "TARG = %ld\n", (long)o->op_targ);
- }
-#ifdef DUMPADDR
- Perl_dump_indent(aTHX_ level, file, "ADDR = 0x%"UVxf" => 0x%"UVxf"\n", (UV)o, (UV)o->op_next);
-#endif
- if (o->op_flags) {
- SV *tmpsv = newSVpvn("", 0);
- switch (o->op_flags & OPf_WANT) {
- case OPf_WANT_VOID:
- sv_catpv(tmpsv, ",VOID");
- break;
- case OPf_WANT_SCALAR:
- sv_catpv(tmpsv, ",SCALAR");
- break;
- case OPf_WANT_LIST:
- sv_catpv(tmpsv, ",LIST");
- break;
- default:
- sv_catpv(tmpsv, ",UNKNOWN");
- break;
- }
- if (o->op_flags & OPf_KIDS)
- sv_catpv(tmpsv, ",KIDS");
- if (o->op_flags & OPf_PARENS)
- sv_catpv(tmpsv, ",PARENS");
- if (o->op_flags & OPf_STACKED)
- sv_catpv(tmpsv, ",STACKED");
- if (o->op_flags & OPf_REF)
- sv_catpv(tmpsv, ",REF");
- if (o->op_flags & OPf_MOD)
- sv_catpv(tmpsv, ",MOD");
- if (o->op_flags & OPf_SPECIAL)
- sv_catpv(tmpsv, ",SPECIAL");
- Perl_dump_indent(aTHX_ level, file, "FLAGS = (%s)\n", SvCUR(tmpsv) ? SvPVX(tmpsv) + 1 : "");
- SvREFCNT_dec(tmpsv);
- }
- if (o->op_private) {
- SV *tmpsv = newSVpvn("", 0);
- if (PL_opargs[o->op_type] & OA_TARGLEX) {
- if (o->op_private & OPpTARGET_MY)
- sv_catpv(tmpsv, ",TARGET_MY");
- }
- if (o->op_type == OP_AASSIGN) {
- if (o->op_private & OPpASSIGN_COMMON)
- sv_catpv(tmpsv, ",COMMON");
- if (o->op_private & OPpASSIGN_HASH)
- sv_catpv(tmpsv, ",HASH");
- }
- else if (o->op_type == OP_SASSIGN) {
- if (o->op_private & OPpASSIGN_BACKWARDS)
- sv_catpv(tmpsv, ",BACKWARDS");
- }
- else if (o->op_type == OP_TRANS) {
- if (o->op_private & OPpTRANS_SQUASH)
- sv_catpv(tmpsv, ",SQUASH");
- if (o->op_private & OPpTRANS_DELETE)
- sv_catpv(tmpsv, ",DELETE");
- if (o->op_private & OPpTRANS_COMPLEMENT)
- sv_catpv(tmpsv, ",COMPLEMENT");
- }
- else if (o->op_type == OP_REPEAT) {
- if (o->op_private & OPpREPEAT_DOLIST)
- sv_catpv(tmpsv, ",DOLIST");
- }
- else if (o->op_type == OP_ENTERSUB ||
- o->op_type == OP_RV2SV ||
- o->op_type == OP_GVSV ||
- o->op_type == OP_RV2AV ||
- o->op_type == OP_RV2HV ||
- o->op_type == OP_RV2GV ||
- o->op_type == OP_AELEM ||
- o->op_type == OP_HELEM )
- {
- if (o->op_type == OP_ENTERSUB) {
- if (o->op_private & OPpENTERSUB_AMPER)
- sv_catpv(tmpsv, ",AMPER");
- if (o->op_private & OPpENTERSUB_DB)
- sv_catpv(tmpsv, ",DB");
- if (o->op_private & OPpENTERSUB_HASTARG)
- sv_catpv(tmpsv, ",HASTARG");
- }
- else
- switch (o->op_private & OPpDEREF) {
- case OPpDEREF_SV:
- sv_catpv(tmpsv, ",SV");
- break;
- case OPpDEREF_AV:
- sv_catpv(tmpsv, ",AV");
- break;
- case OPpDEREF_HV:
- sv_catpv(tmpsv, ",HV");
- break;
- }
- if (o->op_type == OP_AELEM || o->op_type == OP_HELEM) {
- if (o->op_private & OPpLVAL_DEFER)
- sv_catpv(tmpsv, ",LVAL_DEFER");
- }
- else {
- if (o->op_private & HINT_STRICT_REFS)
- sv_catpv(tmpsv, ",STRICT_REFS");
- if (o->op_private & OPpOUR_INTRO)
- sv_catpv(tmpsv, ",OUR_INTRO");
- }
- }
- else if (o->op_type == OP_CONST) {
- if (o->op_private & OPpCONST_BARE)
- sv_catpv(tmpsv, ",BARE");
- if (o->op_private & OPpCONST_STRICT)
- sv_catpv(tmpsv, ",STRICT");
- }
- else if (o->op_type == OP_FLIP) {
- if (o->op_private & OPpFLIP_LINENUM)
- sv_catpv(tmpsv, ",LINENUM");
- }
- else if (o->op_type == OP_FLOP) {
- if (o->op_private & OPpFLIP_LINENUM)
- sv_catpv(tmpsv, ",LINENUM");
- } else if (o->op_type == OP_RV2CV) {
- if (o->op_private & OPpLVAL_INTRO)
- sv_catpv(tmpsv, ",INTRO");
- }
- if (o->op_flags & OPf_MOD && o->op_private & OPpLVAL_INTRO)
- sv_catpv(tmpsv, ",INTRO");
- if (SvCUR(tmpsv))
- Perl_dump_indent(aTHX_ level, file, "PRIVATE = (%s)\n", SvPVX(tmpsv) + 1);
- SvREFCNT_dec(tmpsv);
- }
-
- switch (o->op_type) {
- case OP_AELEMFAST:
- case OP_GVSV:
- case OP_GV:
-#ifdef USE_ITHREADS
- Perl_dump_indent(aTHX_ level, file, "PADIX = %d\n", cPADOPo->op_padix);
-#else
- if (cSVOPo->op_sv) {
- SV *tmpsv = NEWSV(0,0);
- STRLEN n_a;
- ENTER;
- SAVEFREESV(tmpsv);
- gv_fullname3(tmpsv, (GV*)cSVOPo->op_sv, Nullch);
- Perl_dump_indent(aTHX_ level, file, "GV = %s\n", SvPV(tmpsv, n_a));
- LEAVE;
- }
- else
- Perl_dump_indent(aTHX_ level, file, "GV = NULL\n");
-#endif
- break;
- case OP_CONST:
- case OP_METHOD_NAMED:
- Perl_dump_indent(aTHX_ level, file, "SV = %s\n", SvPEEK(cSVOPo->op_sv));
- break;
- case OP_SETSTATE:
- case OP_NEXTSTATE:
- case OP_DBSTATE:
- if (CopLINE(cCOPo))
- Perl_dump_indent(aTHX_ level, file, "LINE = %d\n",CopLINE(cCOPo));
- if (CopSTASHPV(cCOPo))
- Perl_dump_indent(aTHX_ level, file, "PACKAGE = \"%s\"\n",
- CopSTASHPV(cCOPo));
- if (cCOPo->cop_label)
- Perl_dump_indent(aTHX_ level, file, "LABEL = \"%s\"\n",
- cCOPo->cop_label);
- break;
- case OP_ENTERLOOP:
- Perl_dump_indent(aTHX_ level, file, "REDO ===> ");
- if (cLOOPo->op_redoop)
- PerlIO_printf(file, "%d\n", cLOOPo->op_redoop->op_seq);
- else
- PerlIO_printf(file, "DONE\n");
- Perl_dump_indent(aTHX_ level, file, "NEXT ===> ");
- if (cLOOPo->op_nextop)
- PerlIO_printf(file, "%d\n", cLOOPo->op_nextop->op_seq);
- else
- PerlIO_printf(file, "DONE\n");
- Perl_dump_indent(aTHX_ level, file, "LAST ===> ");
- if (cLOOPo->op_lastop)
- PerlIO_printf(file, "%d\n", cLOOPo->op_lastop->op_seq);
- else
- PerlIO_printf(file, "DONE\n");
- break;
- case OP_COND_EXPR:
- case OP_RANGE:
- case OP_MAPWHILE:
- case OP_GREPWHILE:
- case OP_OR:
- case OP_AND:
- Perl_dump_indent(aTHX_ level, file, "OTHER ===> ");
- if (cLOGOPo->op_other)
- PerlIO_printf(file, "%d\n", cLOGOPo->op_other->op_seq);
- else
- PerlIO_printf(file, "DONE\n");
- break;
- case OP_PUSHRE:
- case OP_MATCH:
- case OP_QR:
- case OP_SUBST:
- do_pmop_dump(level, file, cPMOPo);
- break;
- case OP_LEAVE:
- case OP_LEAVEEVAL:
- case OP_LEAVESUB:
- case OP_LEAVESUBLV:
- case OP_LEAVEWRITE:
- case OP_SCOPE:
- if (o->op_private & OPpREFCOUNTED)
- Perl_dump_indent(aTHX_ level, file, "REFCNT = %"UVuf"\n", (UV)o->op_targ);
- break;
- default:
- break;
- }
- if (o->op_flags & OPf_KIDS) {
- OP *kid;
- for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
- do_op_dump(level, file, kid);
- }
- Perl_dump_indent(aTHX_ level-1, file, "}\n");
-}
-
-void
-Perl_op_dump(pTHX_ OP *o)
-{
- do_op_dump(0, Perl_debug_log, o);
-}
-
-void
-Perl_gv_dump(pTHX_ GV *gv)
-{
- SV *sv;
-
- if (!gv) {
- PerlIO_printf(Perl_debug_log, "{}\n");
- return;
- }
- sv = sv_newmortal();
- PerlIO_printf(Perl_debug_log, "{\n");
- gv_fullname3(sv, gv, Nullch);
- Perl_dump_indent(aTHX_ 1, Perl_debug_log, "GV_NAME = %s", SvPVX(sv));
- if (gv != GvEGV(gv)) {
- gv_efullname3(sv, GvEGV(gv), Nullch);
- Perl_dump_indent(aTHX_ 1, Perl_debug_log, "-> %s", SvPVX(sv));
- }
- PerlIO_putc(Perl_debug_log, '\n');
- Perl_dump_indent(aTHX_ 0, Perl_debug_log, "}\n");
-}
-
-void
-Perl_do_magic_dump(pTHX_ I32 level, PerlIO *file, MAGIC *mg, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
-{
- for (; mg; mg = mg->mg_moremagic) {
- Perl_dump_indent(aTHX_ level, file,
- " MAGIC = 0x%"UVxf"\n", PTR2UV(mg));
- if (mg->mg_virtual) {
- MGVTBL *v = mg->mg_virtual;
- char *s = 0;
- if (v == &PL_vtbl_sv) s = "sv";
- else if (v == &PL_vtbl_env) s = "env";
- else if (v == &PL_vtbl_envelem) s = "envelem";
- else if (v == &PL_vtbl_sig) s = "sig";
- else if (v == &PL_vtbl_sigelem) s = "sigelem";
- else if (v == &PL_vtbl_pack) s = "pack";
- else if (v == &PL_vtbl_packelem) s = "packelem";
- else if (v == &PL_vtbl_dbline) s = "dbline";
- else if (v == &PL_vtbl_isa) s = "isa";
- else if (v == &PL_vtbl_arylen) s = "arylen";
- else if (v == &PL_vtbl_glob) s = "glob";
- else if (v == &PL_vtbl_mglob) s = "mglob";
- else if (v == &PL_vtbl_nkeys) s = "nkeys";
- else if (v == &PL_vtbl_taint) s = "taint";
- else if (v == &PL_vtbl_substr) s = "substr";
- else if (v == &PL_vtbl_vec) s = "vec";
- else if (v == &PL_vtbl_pos) s = "pos";
- else if (v == &PL_vtbl_bm) s = "bm";
- else if (v == &PL_vtbl_fm) s = "fm";
- else if (v == &PL_vtbl_uvar) s = "uvar";
- else if (v == &PL_vtbl_defelem) s = "defelem";
-#ifdef USE_LOCALE_COLLATE
- else if (v == &PL_vtbl_collxfrm) s = "collxfrm";
-#endif
- else if (v == &PL_vtbl_amagic) s = "amagic";
- else if (v == &PL_vtbl_amagicelem) s = "amagicelem";
- else if (v == &PL_vtbl_backref) s = "backref";
- if (s)
- Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = &PL_vtbl_%s\n", s);
- else
- Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = 0x%"UVxf"\n", PTR2UV(v));
- }
- else
- Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = 0\n");
-
- if (mg->mg_private)
- Perl_dump_indent(aTHX_ level, file, " MG_PRIVATE = %d\n", mg->mg_private);
-
- if (isPRINT(mg->mg_type))
- Perl_dump_indent(aTHX_ level, file, " MG_TYPE = '%c'\n", mg->mg_type);
- else
- Perl_dump_indent(aTHX_ level, file, " MG_TYPE = '\\%o'\n", mg->mg_type);
-
- if (mg->mg_flags) {
- Perl_dump_indent(aTHX_ level, file, " MG_FLAGS = 0x%02X\n", mg->mg_flags);
- if (mg->mg_flags & MGf_TAINTEDDIR)
- Perl_dump_indent(aTHX_ level, file, " TAINTEDDIR\n");
- if (mg->mg_flags & MGf_REFCOUNTED)
- Perl_dump_indent(aTHX_ level, file, " REFCOUNTED\n");
- if (mg->mg_flags & MGf_GSKIP)
- Perl_dump_indent(aTHX_ level, file, " GSKIP\n");
- if (mg->mg_flags & MGf_MINMATCH)
- Perl_dump_indent(aTHX_ level, file, " MINMATCH\n");
- }
- if (mg->mg_obj) {
- Perl_dump_indent(aTHX_ level, file, " MG_OBJ = 0x%"UVxf"\n", PTR2UV(mg->mg_obj));
- if (mg->mg_flags & MGf_REFCOUNTED)
- do_sv_dump(level+2, file, mg->mg_obj, nest+1, maxnest, dumpops, pvlim); /* MG is already +1 */
- }
- if (mg->mg_len)
- Perl_dump_indent(aTHX_ level, file, " MG_LEN = %ld\n", (long)mg->mg_len);
- if (mg->mg_ptr) {
- Perl_dump_indent(aTHX_ level, file, " MG_PTR = 0x%"UVxf, PTR2UV(mg->mg_ptr));
- if (mg->mg_len >= 0) {
- SV *sv = newSVpvn("", 0);
- PerlIO_printf(file, " %s", pv_display(sv, mg->mg_ptr, mg->mg_len, 0, pvlim));
- SvREFCNT_dec(sv);
- }
- else if (mg->mg_len == HEf_SVKEY) {
- PerlIO_puts(file, " => HEf_SVKEY\n");
- do_sv_dump(level+2, file, (SV*)((mg)->mg_ptr), nest+1, maxnest, dumpops, pvlim); /* MG is already +1 */
- continue;
- }
- else
- PerlIO_puts(file, " ???? - please notify IZ");
- PerlIO_putc(file, '\n');
- }
- }
-}
-
-void
-Perl_magic_dump(pTHX_ MAGIC *mg)
-{
- do_magic_dump(0, Perl_debug_log, mg, 0, 0, 0, 0);
-}
-
-void
-Perl_do_hv_dump(pTHX_ I32 level, PerlIO *file, char *name, HV *sv)
-{
- Perl_dump_indent(aTHX_ level, file, "%s = 0x%"UVxf, name, PTR2UV(sv));
- if (sv && HvNAME(sv))
- PerlIO_printf(file, "\t\"%s\"\n", HvNAME(sv));
- else
- PerlIO_putc(file, '\n');
-}
-
-void
-Perl_do_gv_dump(pTHX_ I32 level, PerlIO *file, char *name, GV *sv)
-{
- Perl_dump_indent(aTHX_ level, file, "%s = 0x%"UVxf, name, PTR2UV(sv));
- if (sv && GvNAME(sv))
- PerlIO_printf(file, "\t\"%s\"\n", GvNAME(sv));
- else
- PerlIO_putc(file, '\n');
-}
-
-void
-Perl_do_gvgv_dump(pTHX_ I32 level, PerlIO *file, char *name, GV *sv)
-{
- Perl_dump_indent(aTHX_ level, file, "%s = 0x%"UVxf, name, PTR2UV(sv));
- if (sv && GvNAME(sv)) {
- PerlIO_printf(file, "\t\"");
- if (GvSTASH(sv) && HvNAME(GvSTASH(sv)))
- PerlIO_printf(file, "%s\" :: \"", HvNAME(GvSTASH(sv)));
- PerlIO_printf(file, "%s\"\n", GvNAME(sv));
- }
- else
- PerlIO_putc(file, '\n');
-}
-
-void
-Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
-{
- SV *d;
- char *s;
- U32 flags;
- U32 type;
- STRLEN n_a;
-
- if (!sv) {
- Perl_dump_indent(aTHX_ level, file, "SV = 0\n");
- return;
- }
-
- flags = SvFLAGS(sv);
- type = SvTYPE(sv);
-
- d = Perl_newSVpvf(aTHX_
- "(0x%"UVxf") at 0x%"UVxf"\n%*s REFCNT = %"IVdf"\n%*s FLAGS = (",
- PTR2UV(SvANY(sv)), PTR2UV(sv),
- (int)(PL_dumpindent*level), "", (IV)SvREFCNT(sv),
- (int)(PL_dumpindent*level), "");
-
- if (flags & SVs_PADBUSY) sv_catpv(d, "PADBUSY,");
- if (flags & SVs_PADTMP) sv_catpv(d, "PADTMP,");
- if (flags & SVs_PADMY) sv_catpv(d, "PADMY,");
- if (flags & SVs_TEMP) sv_catpv(d, "TEMP,");
- if (flags & SVs_OBJECT) sv_catpv(d, "OBJECT,");
- if (flags & SVs_GMG) sv_catpv(d, "GMG,");
- if (flags & SVs_SMG) sv_catpv(d, "SMG,");
- if (flags & SVs_RMG) sv_catpv(d, "RMG,");
-
- if (flags & SVf_IOK) sv_catpv(d, "IOK,");
- if (flags & SVf_NOK) sv_catpv(d, "NOK,");
- if (flags & SVf_POK) sv_catpv(d, "POK,");
- if (flags & SVf_ROK) {
- sv_catpv(d, "ROK,");
- if (SvWEAKREF(sv)) sv_catpv(d, "WEAKREF,");
- }
- if (flags & SVf_OOK) sv_catpv(d, "OOK,");
- if (flags & SVf_FAKE) sv_catpv(d, "FAKE,");
- if (flags & SVf_READONLY) sv_catpv(d, "READONLY,");
-
- if (flags & SVf_AMAGIC) sv_catpv(d, "OVERLOAD,");
- if (flags & SVp_IOK) sv_catpv(d, "pIOK,");
- if (flags & SVp_NOK) sv_catpv(d, "pNOK,");
- if (flags & SVp_POK) sv_catpv(d, "pPOK,");
- if (flags & SVp_SCREAM) sv_catpv(d, "SCREAM,");
-
- switch (type) {
- case SVt_PVCV:
- case SVt_PVFM:
- if (CvANON(sv)) sv_catpv(d, "ANON,");
- if (CvUNIQUE(sv)) sv_catpv(d, "UNIQUE,");
- if (CvCLONE(sv)) sv_catpv(d, "CLONE,");
- if (CvCLONED(sv)) sv_catpv(d, "CLONED,");
- if (CvNODEBUG(sv)) sv_catpv(d, "NODEBUG,");
- if (SvCOMPILED(sv)) sv_catpv(d, "COMPILED,");
- if (CvLVALUE(sv)) sv_catpv(d, "LVALUE,");
- if (CvMETHOD(sv)) sv_catpv(d, "METHOD,");
- break;
- case SVt_PVHV:
- if (HvSHAREKEYS(sv)) sv_catpv(d, "SHAREKEYS,");
- if (HvLAZYDEL(sv)) sv_catpv(d, "LAZYDEL,");
- break;
- case SVt_PVGV:
- if (GvINTRO(sv)) sv_catpv(d, "INTRO,");
- if (GvMULTI(sv)) sv_catpv(d, "MULTI,");
- if (GvASSUMECV(sv)) sv_catpv(d, "ASSUMECV,");
- if (GvIN_PAD(sv)) sv_catpv(d, "IN_PAD,");
- if (GvIMPORTED(sv)) {
- sv_catpv(d, "IMPORT");
- if (GvIMPORTED(sv) == GVf_IMPORTED)
- sv_catpv(d, "ALL,");
- else {
- sv_catpv(d, "(");
- if (GvIMPORTED_SV(sv)) sv_catpv(d, " SV");
- if (GvIMPORTED_AV(sv)) sv_catpv(d, " AV");
- if (GvIMPORTED_HV(sv)) sv_catpv(d, " HV");
- if (GvIMPORTED_CV(sv)) sv_catpv(d, " CV");
- sv_catpv(d, " ),");
- }
- }
- /* FALL THROGH */
- default:
- if (SvEVALED(sv)) sv_catpv(d, "EVALED,");
- if (SvIsUV(sv)) sv_catpv(d, "IsUV,");
- if (SvUTF8(sv)) sv_catpv(d, "UTF8");
- break;
- case SVt_PVBM:
- if (SvTAIL(sv)) sv_catpv(d, "TAIL,");
- if (SvVALID(sv)) sv_catpv(d, "VALID,");
- break;
- }
-
- if (*(SvEND(d) - 1) == ',')
- SvPVX(d)[--SvCUR(d)] = '\0';
- sv_catpv(d, ")");
- s = SvPVX(d);
-
- Perl_dump_indent(aTHX_ level, file, "SV = ");
- switch (type) {
- case SVt_NULL:
- PerlIO_printf(file, "NULL%s\n", s);
- SvREFCNT_dec(d);
- return;
- case SVt_IV:
- PerlIO_printf(file, "IV%s\n", s);
- break;
- case SVt_NV:
- PerlIO_printf(file, "NV%s\n", s);
- break;
- case SVt_RV:
- PerlIO_printf(file, "RV%s\n", s);
- break;
- case SVt_PV:
- PerlIO_printf(file, "PV%s\n", s);
- break;
- case SVt_PVIV:
- PerlIO_printf(file, "PVIV%s\n", s);
- break;
- case SVt_PVNV:
- PerlIO_printf(file, "PVNV%s\n", s);
- break;
- case SVt_PVBM:
- PerlIO_printf(file, "PVBM%s\n", s);
- break;
- case SVt_PVMG:
- PerlIO_printf(file, "PVMG%s\n", s);
- break;
- case SVt_PVLV:
- PerlIO_printf(file, "PVLV%s\n", s);
- break;
- case SVt_PVAV:
- PerlIO_printf(file, "PVAV%s\n", s);
- break;
- case SVt_PVHV:
- PerlIO_printf(file, "PVHV%s\n", s);
- break;
- case SVt_PVCV:
- PerlIO_printf(file, "PVCV%s\n", s);
- break;
- case SVt_PVGV:
- PerlIO_printf(file, "PVGV%s\n", s);
- break;
- case SVt_PVFM:
- PerlIO_printf(file, "PVFM%s\n", s);
- break;
- case SVt_PVIO:
- PerlIO_printf(file, "PVIO%s\n", s);
- break;
- default:
- PerlIO_printf(file, "UNKNOWN(0x%"UVxf") %s\n", (UV)type, s);
- SvREFCNT_dec(d);
- return;
- }
- if (type >= SVt_PVIV || type == SVt_IV) {
- if (SvIsUV(sv))
- Perl_dump_indent(aTHX_ level, file, " UV = %"UVuf, (UV)SvUVX(sv));
- else
- Perl_dump_indent(aTHX_ level, file, " IV = %"IVdf, (IV)SvIVX(sv));
- if (SvOOK(sv))
- PerlIO_printf(file, " (OFFSET)");
- PerlIO_putc(file, '\n');
- }
- if (type >= SVt_PVNV || type == SVt_NV) {
- STORE_NUMERIC_LOCAL_SET_STANDARD();
- /* %Vg doesn't work? --jhi */
-#ifdef USE_LONG_DOUBLE
- Perl_dump_indent(aTHX_ level, file, " NV = %.*" PERL_PRIgldbl "\n", LDBL_DIG, SvNVX(sv));
-#else
- Perl_dump_indent(aTHX_ level, file, " NV = %.*g\n", DBL_DIG, SvNVX(sv));
-#endif
- RESTORE_NUMERIC_LOCAL();
- }
- if (SvROK(sv)) {
- Perl_dump_indent(aTHX_ level, file, " RV = 0x%"UVxf"\n", PTR2UV(SvRV(sv)));
- if (nest < maxnest)
- do_sv_dump(level+1, file, SvRV(sv), nest+1, maxnest, dumpops, pvlim);
- SvREFCNT_dec(d);
- return;
- }
- if (type < SVt_PV) {
- SvREFCNT_dec(d);
- return;
- }
- if (type <= SVt_PVLV) {
- if (SvPVX(sv)) {
- Perl_dump_indent(aTHX_ level, file," PV = 0x%"UVxf" ", PTR2UV(SvPVX(sv)));
- if (SvOOK(sv))
- PerlIO_printf(file, "( %s . ) ", pv_display(d, SvPVX(sv)-SvIVX(sv), SvIVX(sv), 0, pvlim));
- PerlIO_printf(file, "%s\n", pv_display(d, SvPVX(sv), SvCUR(sv), SvLEN(sv), pvlim));
- Perl_dump_indent(aTHX_ level, file, " CUR = %"IVdf"\n", (IV)SvCUR(sv));
- Perl_dump_indent(aTHX_ level, file, " LEN = %"IVdf"\n", (IV)SvLEN(sv));
- }
- else
- Perl_dump_indent(aTHX_ level, file, " PV = 0\n");
- }
- if (type >= SVt_PVMG) {
- if (SvMAGIC(sv))
- do_magic_dump(level, file, SvMAGIC(sv), nest, maxnest, dumpops, pvlim);
- if (SvSTASH(sv))
- do_hv_dump(level, file, " STASH", SvSTASH(sv));
- }
- switch (type) {
- case SVt_PVLV:
- Perl_dump_indent(aTHX_ level, file, " TYPE = %c\n", LvTYPE(sv));
- Perl_dump_indent(aTHX_ level, file, " TARGOFF = %"IVdf"\n", (IV)LvTARGOFF(sv));
- Perl_dump_indent(aTHX_ level, file, " TARGLEN = %"IVdf"\n", (IV)LvTARGLEN(sv));
- Perl_dump_indent(aTHX_ level, file, " TARG = 0x%"UVxf"\n", PTR2UV(LvTARG(sv)));
- /* XXX level+1 ??? */
- do_sv_dump(level, file, LvTARG(sv), nest+1, maxnest, dumpops, pvlim);
- break;
- case SVt_PVAV:
- Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%"UVxf, PTR2UV(AvARRAY(sv)));
- if (AvARRAY(sv) != AvALLOC(sv)) {
- PerlIO_printf(file, " (offset=%"IVdf")\n", (IV)(AvARRAY(sv) - AvALLOC(sv)));
- Perl_dump_indent(aTHX_ level, file, " ALLOC = 0x%"UVxf"\n", PTR2UV(AvALLOC(sv)));
- }
- else
- PerlIO_putc(file, '\n');
- Perl_dump_indent(aTHX_ level, file, " FILL = %"IVdf"\n", (IV)AvFILLp(sv));
- Perl_dump_indent(aTHX_ level, file, " MAX = %"IVdf"\n", (IV)AvMAX(sv));
- Perl_dump_indent(aTHX_ level, file, " ARYLEN = 0x%"UVxf"\n", PTR2UV(AvARYLEN(sv)));
- flags = AvFLAGS(sv);
- sv_setpv(d, "");
- if (flags & AVf_REAL) sv_catpv(d, ",REAL");
- if (flags & AVf_REIFY) sv_catpv(d, ",REIFY");
- if (flags & AVf_REUSED) sv_catpv(d, ",REUSED");
- Perl_dump_indent(aTHX_ level, file, " FLAGS = (%s)\n", SvCUR(d) ? SvPVX(d) + 1 : "");
- if (nest < maxnest && av_len((AV*)sv) >= 0) {
- int count;
- for (count = 0; count <= av_len((AV*)sv) && count < maxnest; count++) {
- SV** elt = av_fetch((AV*)sv,count,0);
-
- Perl_dump_indent(aTHX_ level + 1, file, "Elt No. %"IVdf"\n", (IV)count);
- if (elt)
- do_sv_dump(level+1, file, *elt, nest+1, maxnest, dumpops, pvlim);
- }
- }
- break;
- case SVt_PVHV:
- Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%"UVxf, PTR2UV(HvARRAY(sv)));
- if (HvARRAY(sv) && HvKEYS(sv)) {
- /* Show distribution of HEs in the ARRAY */
- int freq[200];
-#define FREQ_MAX (sizeof freq / sizeof freq[0] - 1)
- int i;
- int max = 0;
- U32 pow2 = 2, keys = HvKEYS(sv);
- NV theoret, sum = 0;
-
- PerlIO_printf(file, " (");
- Zero(freq, FREQ_MAX + 1, int);
- for (i = 0; i <= HvMAX(sv); i++) {
- HE* h; int count = 0;
- for (h = HvARRAY(sv)[i]; h; h = HeNEXT(h))
- count++;
- if (count > FREQ_MAX)
- count = FREQ_MAX;
- freq[count]++;
- if (max < count)
- max = count;
- }
- for (i = 0; i <= max; i++) {
- if (freq[i]) {
- PerlIO_printf(file, "%d%s:%d", i,
- (i == FREQ_MAX) ? "+" : "",
- freq[i]);
- if (i != max)
- PerlIO_printf(file, ", ");
- }
- }
- PerlIO_putc(file, ')');
- /* Now calculate quality wrt theoretical value */
- for (i = max; i > 0; i--) { /* Precision: count down. */
- sum += freq[i] * i * i;
- }
- while ((keys = keys >> 1))
- pow2 = pow2 << 1;
- /* Approximate by Poisson distribution */
- theoret = HvKEYS(sv);
- theoret += theoret * theoret/pow2;
- PerlIO_putc(file, '\n');
- Perl_dump_indent(aTHX_ level, file, " hash quality = %.1"NVff"%%", theoret/sum*100);
- }
- PerlIO_putc(file, '\n');
- Perl_dump_indent(aTHX_ level, file, " KEYS = %"IVdf"\n", (IV)HvKEYS(sv));
- Perl_dump_indent(aTHX_ level, file, " FILL = %"IVdf"\n", (IV)HvFILL(sv));
- Perl_dump_indent(aTHX_ level, file, " MAX = %"IVdf"\n", (IV)HvMAX(sv));
- Perl_dump_indent(aTHX_ level, file, " RITER = %"IVdf"\n", (IV)HvRITER(sv));
- Perl_dump_indent(aTHX_ level, file, " EITER = 0x%"UVxf"\n", PTR2UV(HvEITER(sv)));
- if (HvPMROOT(sv))
- Perl_dump_indent(aTHX_ level, file, " PMROOT = 0x%"UVxf"\n", PTR2UV(HvPMROOT(sv)));
- if (HvNAME(sv))
- Perl_dump_indent(aTHX_ level, file, " NAME = \"%s\"\n", HvNAME(sv));
- if (nest < maxnest && !HvEITER(sv)) { /* Try to preserve iterator */
- HE *he;
- HV *hv = (HV*)sv;
- int count = maxnest - nest;
-
- hv_iterinit(hv);
- while ((he = hv_iternext(hv)) && count--) {
- SV *elt;
- char *key;
- I32 len;
- U32 hash = HeHASH(he);
-
- key = hv_iterkey(he, &len);
- elt = hv_iterval(hv, he);
- Perl_dump_indent(aTHX_ level+1, file, "Elt %s HASH = 0x%"UVxf"\n", pv_display(d, key, len, 0, pvlim), (UV)hash);
- do_sv_dump(level+1, file, elt, nest+1, maxnest, dumpops, pvlim);
- }
- hv_iterinit(hv); /* Return to status quo */
- }
- break;
- case SVt_PVCV:
- if (SvPOK(sv))
- Perl_dump_indent(aTHX_ level, file, " PROTOTYPE = \"%s\"\n", SvPV(sv,n_a));
- /* FALL THROUGH */
- case SVt_PVFM:
- do_hv_dump(level, file, " COMP_STASH", CvSTASH(sv));
- if (CvSTART(sv))
- Perl_dump_indent(aTHX_ level, file, " START = 0x%"UVxf" ===> %"IVdf"\n", PTR2UV(CvSTART(sv)), (IV)CvSTART(sv)->op_seq);
- Perl_dump_indent(aTHX_ level, file, " ROOT = 0x%"UVxf"\n", PTR2UV(CvROOT(sv)));
- if (CvROOT(sv) && dumpops)
- do_op_dump(level+1, file, CvROOT(sv));
- Perl_dump_indent(aTHX_ level, file, " XSUB = 0x%"UVxf"\n", PTR2UV(CvXSUB(sv)));
- Perl_dump_indent(aTHX_ level, file, " XSUBANY = %"IVdf"\n", (IV)CvXSUBANY(sv).any_i32);
- do_gvgv_dump(level, file, " GVGV::GV", CvGV(sv));
- Perl_dump_indent(aTHX_ level, file, " FILE = \"%s\"\n", CvFILE(sv));
- Perl_dump_indent(aTHX_ level, file, " DEPTH = %"IVdf"\n", (IV)CvDEPTH(sv));
-#ifdef USE_THREADS
- Perl_dump_indent(aTHX_ level, file, " MUTEXP = 0x%"UVxf"\n", PTR2UV(CvMUTEXP(sv)));
- Perl_dump_indent(aTHX_ level, file, " OWNER = 0x%"UVxf"\n", PTR2UV(CvOWNER(sv)));
-#endif /* USE_THREADS */
- Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%"UVxf"\n", (UV)CvFLAGS(sv));
- if (type == SVt_PVFM)
- Perl_dump_indent(aTHX_ level, file, " LINES = %"IVdf"\n", (IV)FmLINES(sv));
- Perl_dump_indent(aTHX_ level, file, " PADLIST = 0x%"UVxf"\n", PTR2UV(CvPADLIST(sv)));
- if (nest < maxnest && CvPADLIST(sv)) {
- AV* padlist = CvPADLIST(sv);
- AV* pad_name = (AV*)*av_fetch(padlist, 0, FALSE);
- AV* pad = (AV*)*av_fetch(padlist, 1, FALSE);
- SV** pname = AvARRAY(pad_name);
- SV** ppad = AvARRAY(pad);
- I32 ix;
-
- for (ix = 1; ix <= AvFILL(pad_name); ix++) {
- if (SvPOK(pname[ix]))
- Perl_dump_indent(aTHX_ level,
- /* %5d below is enough whitespace. */
- file,
- "%5d. 0x%"UVxf" (%s\"%s\" %"IVdf"-%"IVdf")\n",
- (int)ix, PTR2UV(ppad[ix]),
- SvFAKE(pname[ix]) ? "FAKE " : "",
- SvPVX(pname[ix]),
- (IV)SvNVX(pname[ix]),
- (IV)SvIVX(pname[ix]));
- }
- }
- {
- CV *outside = CvOUTSIDE(sv);
- Perl_dump_indent(aTHX_ level, file, " OUTSIDE = 0x%"UVxf" (%s)\n",
- PTR2UV(outside),
- (!outside ? "null"
- : CvANON(outside) ? "ANON"
- : (outside == PL_main_cv) ? "MAIN"
- : CvUNIQUE(outside) ? "UNIQUE"
- : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED"));
- }
- if (nest < maxnest && (CvCLONE(sv) || CvCLONED(sv)))
- do_sv_dump(level+1, file, (SV*)CvOUTSIDE(sv), nest+1, maxnest, dumpops, pvlim);
- break;
- case SVt_PVGV:
- Perl_dump_indent(aTHX_ level, file, " NAME = \"%s\"\n", GvNAME(sv));
- Perl_dump_indent(aTHX_ level, file, " NAMELEN = %"IVdf"\n", (IV)GvNAMELEN(sv));
- do_hv_dump (level, file, " GvSTASH", GvSTASH(sv));
- Perl_dump_indent(aTHX_ level, file, " GP = 0x%"UVxf"\n", PTR2UV(GvGP(sv)));
- if (!GvGP(sv))
- break;
- Perl_dump_indent(aTHX_ level, file, " SV = 0x%"UVxf"\n", PTR2UV(GvSV(sv)));
- Perl_dump_indent(aTHX_ level, file, " REFCNT = %"IVdf"\n", (IV)GvREFCNT(sv));
- Perl_dump_indent(aTHX_ level, file, " IO = 0x%"UVxf"\n", PTR2UV(GvIOp(sv)));
- Perl_dump_indent(aTHX_ level, file, " FORM = 0x%"UVxf" \n", PTR2UV(GvFORM(sv)));
- Perl_dump_indent(aTHX_ level, file, " AV = 0x%"UVxf"\n", PTR2UV(GvAV(sv)));
- Perl_dump_indent(aTHX_ level, file, " HV = 0x%"UVxf"\n", PTR2UV(GvHV(sv)));
- Perl_dump_indent(aTHX_ level, file, " CV = 0x%"UVxf"\n", PTR2UV(GvCV(sv)));
- Perl_dump_indent(aTHX_ level, file, " CVGEN = 0x%"UVxf"\n", (UV)GvCVGEN(sv));
- Perl_dump_indent(aTHX_ level, file, " GPFLAGS = 0x%"UVxf"\n", (UV)GvGPFLAGS(sv));
- Perl_dump_indent(aTHX_ level, file, " LINE = %"IVdf"\n", (IV)GvLINE(sv));
- Perl_dump_indent(aTHX_ level, file, " FILE = \"%s\"\n", GvFILE(sv));
- Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%"UVxf"\n", (UV)GvFLAGS(sv));
- do_gv_dump (level, file, " EGV", GvEGV(sv));
- break;
- case SVt_PVIO:
- Perl_dump_indent(aTHX_ level, file, " IFP = 0x%"UVxf"\n", PTR2UV(IoIFP(sv)));
- Perl_dump_indent(aTHX_ level, file, " OFP = 0x%"UVxf"\n", PTR2UV(IoOFP(sv)));
- Perl_dump_indent(aTHX_ level, file, " DIRP = 0x%"UVxf"\n", PTR2UV(IoDIRP(sv)));
- Perl_dump_indent(aTHX_ level, file, " LINES = %"IVdf"\n", (IV)IoLINES(sv));
- Perl_dump_indent(aTHX_ level, file, " PAGE = %"IVdf"\n", (IV)IoPAGE(sv));
- Perl_dump_indent(aTHX_ level, file, " PAGE_LEN = %"IVdf"\n", (IV)IoPAGE_LEN(sv));
- Perl_dump_indent(aTHX_ level, file, " LINES_LEFT = %"IVdf"\n", (IV)IoLINES_LEFT(sv));
- if (IoTOP_NAME(sv))
- Perl_dump_indent(aTHX_ level, file, " TOP_NAME = \"%s\"\n", IoTOP_NAME(sv));
- do_gv_dump (level, file, " TOP_GV", IoTOP_GV(sv));
- if (IoFMT_NAME(sv))
- Perl_dump_indent(aTHX_ level, file, " FMT_NAME = \"%s\"\n", IoFMT_NAME(sv));
- do_gv_dump (level, file, " FMT_GV", IoFMT_GV(sv));
- if (IoBOTTOM_NAME(sv))
- Perl_dump_indent(aTHX_ level, file, " BOTTOM_NAME = \"%s\"\n", IoBOTTOM_NAME(sv));
- do_gv_dump (level, file, " BOTTOM_GV", IoBOTTOM_GV(sv));
- Perl_dump_indent(aTHX_ level, file, " SUBPROCESS = %"IVdf"\n", (IV)IoSUBPROCESS(sv));
- if (isPRINT(IoTYPE(sv)))
- Perl_dump_indent(aTHX_ level, file, " TYPE = '%c'\n", IoTYPE(sv));
- else
- Perl_dump_indent(aTHX_ level, file, " TYPE = '\\%o'\n", IoTYPE(sv));
- Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%"UVxf"\n", (UV)IoFLAGS(sv));
- break;
- }
- SvREFCNT_dec(d);
-}
-
-void
-Perl_sv_dump(pTHX_ SV *sv)
-{
- do_sv_dump(0, Perl_debug_log, sv, 0, 0, 0, 0);
-}
diff --git a/contrib/perl5/eg/ADB b/contrib/perl5/eg/ADB
deleted file mode 100644
index e8130e1..0000000
--- a/contrib/perl5/eg/ADB
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: ADB,v $$Revision: 4.1 $$Date: 92/08/07 17:20:06 $
-
-# This script is only useful when used in your crash directory.
-
-$num = shift;
-exec 'adb', '-k', "vmunix.$num", "vmcore.$num";
diff --git a/contrib/perl5/eg/README b/contrib/perl5/eg/README
deleted file mode 100644
index 15eb655..0000000
--- a/contrib/perl5/eg/README
+++ /dev/null
@@ -1,22 +0,0 @@
-Although supplied with the perl package, the perl scripts in this eg
-directory and its subdirectories are placed in the public domain, and
-you may do anything with them that you wish.
-
-This stuff is supplied on an as-is basis--little attempt has been made to make
-any of it portable. It's mostly here to give you an idea of what perl code
-looks like, and what tricks and idioms are used.
-
-System administrators responsible for many computers will enjoy the items
-down in the g directory very much. The scan directory contains the beginnings
-of a system to check on and report various kinds of anomalies.
-
-If you machine doesn't support #!, the first thing you'll want to do is
-replace the #! with a couple of lines that look like this:
-
- eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-being sure to include any flags that were on the #! line. A supplied script
-called "nih" will translate perl scripts in place for you:
-
- nih g/g??
diff --git a/contrib/perl5/eg/cgi/RunMeFirst b/contrib/perl5/eg/cgi/RunMeFirst
deleted file mode 100755
index 018b11b..0000000
--- a/contrib/perl5/eg/cgi/RunMeFirst
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/local/bin/perl
-
-# Make a world-writeable directory for saving state.
-$ww = 'WORLD_WRITABLE';
-unless (-w $ww) {
- $u = umask 0;
- mkdir $ww, 0777;
- umask $u;
-}
-
-# Decode the sample image.
-for $uu (<*.uu>) {
- unless (open UU, "<$uu") { warn "Can't open $uu: $!\n"; next }
- while (<UU>) {
- chomp;
- if (/^begin\s+\d+\s+(.+)$/) {
- $bin = $1;
- last;
- }
- }
- unless (open BIN, "> $bin") { warn "Can't create $bin: $!\n"; next }
- binmode BIN;
- while (<UU>) {
- chomp;
- last if /^end/;
- print BIN unpack "u", $_;
- }
- close BIN;
- close UU;
-}
-
-# Create symlinks from *.txt to *.cgi for documentation purposes.
-foreach (<*.cgi>) {
- ($target = $_) =~ s/cgi$/txt/i;
- symlink $_, $target unless -e $target;
-}
diff --git a/contrib/perl5/eg/cgi/caution.xbm b/contrib/perl5/eg/cgi/caution.xbm
deleted file mode 100644
index 87fcdbe..0000000
--- a/contrib/perl5/eg/cgi/caution.xbm
+++ /dev/null
@@ -1,12 +0,0 @@
-#define caution_width 32
-#define caution_height 32
-static char caution_bits[] = {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x10,0x01,
- 0x00,0x00,0x08,0x07,0x00,0x00,0x08,0x0e,0x00,0x00,0x04,0x0e,0x00,0x00,0x04,
- 0x1c,0x00,0x00,0x02,0x1c,0x00,0x00,0xe2,0x38,0x00,0x00,0xf1,0x39,0x00,0x00,
- 0xf1,0x71,0x00,0x80,0xf0,0x71,0x00,0x80,0xf0,0xe1,0x00,0x40,0xf0,0xe1,0x00,
- 0x40,0xf0,0xc1,0x01,0x20,0xf0,0xc1,0x01,0x20,0xf0,0x81,0x03,0x10,0xe0,0x80,
- 0x03,0x10,0xe0,0x00,0x07,0x08,0xe0,0x00,0x07,0x08,0xe0,0x00,0x0e,0x04,0x00,
- 0x00,0x0e,0x04,0xe0,0x00,0x1c,0x02,0xf0,0x01,0x1c,0x02,0xf0,0x01,0x38,0x01,
- 0xe0,0x00,0x38,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x70,0xff,0xff,0xff,0x7f,
- 0xf8,0xff,0xff,0x3f,0x00,0x00,0x00,0x00};
diff --git a/contrib/perl5/eg/cgi/clickable_image.cgi b/contrib/perl5/eg/cgi/clickable_image.cgi
deleted file mode 100644
index 81daf09..0000000
--- a/contrib/perl5/eg/cgi/clickable_image.cgi
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI;
-$query = new CGI;
-print $query->header;
-print $query->start_html("A Clickable Image");
-print <<END;
-<H1>A Clickable Image</H1>
-</A>
-END
-print "Sorry, this isn't very exciting!\n";
-
-print $query->startform;
-print $query->image_button('picture',"./wilogo.gif");
-print "Give me a: ",$query->popup_menu('letter',['A','B','C','D','E','W']),"\n"; #
-print "<P>Magnification: ",$query->radio_group('magnification',['1X','2X','4X','20X']),"\n";
-print "<HR>\n";
-
-if ($query->param) {
- print "<P>Magnification, <EM>",$query->param('magnification'),"</EM>\n";
- print "<P>Selected Letter, <EM>",$query->param('letter'),"</EM>\n";
- ($x,$y) = ($query->param('picture.x'),$query->param('picture.y'));
- print "<P>Selected Position <EM>($x,$y)</EM>\n";
-}
-
-print $query->end_html;
diff --git a/contrib/perl5/eg/cgi/cookie.cgi b/contrib/perl5/eg/cgi/cookie.cgi
deleted file mode 100644
index 98adda1..0000000
--- a/contrib/perl5/eg/cgi/cookie.cgi
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI qw(:standard);
-
-@ANIMALS=sort qw/lion tiger bear pig porcupine ferret zebra gnu ostrich
- emu moa goat weasel yak chicken sheep hyena dodo lounge-lizard
- squirrel rat mouse hedgehog racoon baboon kangaroo hippopotamus
- giraffe/;
-
-# Recover the previous animals from the magic cookie.
-# The cookie has been formatted as an associative array
-# mapping animal name to the number of animals.
-%zoo = cookie('animals');
-
-# Recover the new animal(s) from the parameter 'new_animal'
-@new = param('new_animals');
-
-# If the action is 'add', then add new animals to the zoo. Otherwise
-# delete them.
-foreach (@new) {
- if (param('action') eq 'Add') {
- $zoo{$_}++;
- } elsif (param('action') eq 'Delete') {
- $zoo{$_}-- if $zoo{$_};
- delete $zoo{$_} unless $zoo{$_};
- }
-}
-
-# Add new animals to old, and put them in a cookie
-$the_cookie = cookie(-name=>'animals',
- -value=>\%zoo,
- -expires=>'+1h');
-
-# Print the header, incorporating the cookie and the expiration date...
-print header(-cookie=>$the_cookie);
-
-# Now we're ready to create our HTML page.
-print start_html('Animal crackers');
-
-print <<EOF;
-<h1>Animal Crackers</h1>
-Choose the animals you want to add to the zoo, and click "add".
-Come back to this page any time within the next hour and the list of
-animals in the zoo will be resurrected. You can even quit Netscape
-completely!
-<p>
-Try adding the same animal several times to the list. Does this
-remind you vaguely of a shopping cart?
-<p>
-<em>This script only works with Netscape browsers</em>
-<p>
-<center>
-<table border>
-<tr><th>Add/Delete<th>Current Contents
-EOF
- ;
-
-print "<tr><td>",start_form;
-print scrolling_list(-name=>'new_animals',
- -values=>[@ANIMALS],
- -multiple=>1,
- -override=>1,
- -size=>10),"<br>";
-print submit(-name=>'action',-value=>'Delete'),
- submit(-name=>'action',-value=>'Add');
-print end_form;
-
-print "<td>";
-if (%zoo) { # make a table
- print "<ul>\n";
- foreach (sort keys %zoo) {
- print "<li>$zoo{$_} $_\n";
- }
- print "</ul>\n";
-} else {
- print "<strong>The zoo is empty.</strong>\n";
-}
-print "</table></center>";
-
-print <<EOF;
-<hr>
-<ADDRESS>Lincoln D. Stein</ADDRESS><BR>
-<A HREF="./">More Examples</A>
-EOF
- ;
-print end_html;
-
-
diff --git a/contrib/perl5/eg/cgi/crash.cgi b/contrib/perl5/eg/cgi/crash.cgi
deleted file mode 100644
index 64f03c7..0000000
--- a/contrib/perl5/eg/cgi/crash.cgi
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI::Carp qw(fatalsToBrowser);
-
-# This line invokes a fatal error message at compile time.
-foo bar baz;
diff --git a/contrib/perl5/eg/cgi/customize.cgi b/contrib/perl5/eg/cgi/customize.cgi
deleted file mode 100644
index c1c8187..0000000
--- a/contrib/perl5/eg/cgi/customize.cgi
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI qw(:standard :html3);
-
-# Some constants to use in our form.
-@colors=qw/aqua black blue fuschia gray green lime maroon navy olive
- purple red silver teal white yellow/;
-@sizes=("<default>",1..7);
-
-# recover the "preferences" cookie.
-%preferences = cookie('preferences');
-
-# If the user wants to change the background color or her
-# name, they will appear among our CGI parameters.
-foreach ('text','background','name','size') {
- $preferences{$_} = param($_) || $preferences{$_};
-}
-
-# Set some defaults
-$preferences{'background'} = $preferences{'background'} || 'silver';
-$preferences{'text'} = $preferences{'text'} || 'black';
-
-# Refresh the cookie so that it doesn't expire. This also
-# makes any changes the user made permanent.
-$the_cookie = cookie(-name=>'preferences',
- -value=>\%preferences,
- -expires=>'+30d');
-print header(-cookie=>$the_cookie);
-
-# Adjust the title to incorporate the user's name, if provided.
-$title = $preferences{'name'} ?
- "Welcome back, $preferences{name}!" : "Customizable Page";
-
-# Create the HTML page. We use several of Netscape's
-# extended tags to control the background color and the
-# font size. It's safe to use Netscape features here because
-# cookies don't work anywhere else anyway.
-print start_html(-title=>$title,
- -bgcolor=>$preferences{'background'},
- -text=>$preferences{'text'}
- );
-
-print basefont({SIZE=>$preferences{size}}) if $preferences{'size'} > 0;
-
-print h1($title),<<END;
-You can change the appearance of this page by submitting
-the fill-out form below. If you return to this page any time
-within 30 days, your preferences will be restored.
-END
- ;
-
-# Create the form
-print hr(),
- start_form,
-
- "Your first name: ",
- textfield(-name=>'name',
- -default=>$preferences{'name'},
- -size=>30),br,
-
- table(
- TR(
- td("Preferred"),
- td("Page color:"),
- td(popup_menu(-name=>'background',
- -values=>\@colors,
- -default=>$preferences{'background'})
- ),
- ),
- TR(
- td(''),
- td("Text color:"),
- td(popup_menu(-name=>'text',
- -values=>\@colors,
- -default=>$preferences{'text'})
- )
- ),
- TR(
- td(''),
- td("Font size:"),
- td(popup_menu(-name=>'size',
- -values=>\@sizes,
- -default=>$preferences{'size'})
- )
- )
- ),
-
- submit(-label=>'Set preferences'),
- hr;
-
-print a({HREF=>"/"},'Go to the home page');
-print end_html;
diff --git a/contrib/perl5/eg/cgi/diff_upload.cgi b/contrib/perl5/eg/cgi/diff_upload.cgi
deleted file mode 100644
index 913f9ca..0000000
--- a/contrib/perl5/eg/cgi/diff_upload.cgi
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/local/bin/perl
-
-$DIFF = "/usr/bin/diff";
-$PERL = "/usr/bin/perl";
-
-use CGI qw(:standard);
-use CGI::Carp;
-
-print header;
-print start_html("File Diff Example");
-print "<strong>Version </strong>$CGI::VERSION<p>";
-
-print <<EOF;
-<H1>File Diff Example</H1>
-Enter two files. When you press "submit" their diff will be
-produced.
-EOF
- ;
-
-# Start a multipart form.
-print start_multipart_form;
-print "File #1:",filefield(-name=>'file1',-size=>45),"<BR>\n";
-print "File #2:",filefield(-name=>'file2',-size=>45),"<BR>\n";
-print "Diff type: ",radio_group(-name=>'type',
- -value=>['context','normal']),"<br>\n";
-print reset,submit(-name=>'submit',-value=>'Do Diff');
-print endform;
-
-# Process the form if there is a file name entered
-$file1 = param('file1');
-$file2 = param('file2');
-
-$|=1; # for buffering
-if ($file1 && $file2) {
- $realfile1 = tmpFileName($file1);
- $realfile2 = tmpFileName($file2);
- print "<HR>\n";
- print "<H2>$file1 vs $file2</H2>\n";
-
- print "<PRE>\n";
- $options = "-c" if param('type') eq 'context';
- system "$DIFF $options $realfile1 $realfile2 | $PERL -pe 's/>/&gt;/g; s/</&lt;/g;'";
- close $file1;
- close $file2;
- print "</PRE>\n";
-}
-
-print <<EOF;
-<HR>
-<A HREF="../cgi_docs.html">CGI documentation</A>
-<HR>
-<ADDRESS>
-<A HREF="/~lstein">Lincoln D. Stein</A>
-</ADDRESS><BR>
-Last modified 17 July 1996
-EOF
- ;
-print end_html;
-
-sub sanitize {
- my $name = shift;
- my($safe) = $name=~/([a-zA-Z0-9._~#,]+)/;
- unless ($safe) {
- print "<strong>$name is not a valid Unix filename -- sorry</strong>";
- exit 0;
- }
- return $safe;
-}
diff --git a/contrib/perl5/eg/cgi/dna_small_gif.uu b/contrib/perl5/eg/cgi/dna_small_gif.uu
deleted file mode 100644
index 1745c73..0000000
--- a/contrib/perl5/eg/cgi/dna_small_gif.uu
+++ /dev/null
@@ -1,63 +0,0 @@
-begin 444 dna_small.gif
-M1TE&.#=A)0`J`.<``+9%&Y<R0M<F'ID\,!<07%<G1:P<0Q`A2Q`P;"L9/L$:
-M,"480N5"&RL7:4LD0T,G144[7BHL2B4?3\0I+"</)BQ.9KD0/S878\96$Z\@
-M(:\1*RL:3L0W&QL?2#4?9>@_&A$_5<I"&C`A3*,3-A`//9X<)\@Q(L`@.#\E
-M7K,R*R\T6)H++1L72T8=4207:T`G=JX..MD^&!$_;^)2$#T=7S`79AL7.A$3
-M1-=%#^,Q&QT_:C8=1!L86]\R#4M":4H76R,515HZ4"477G@T,J\;(X(@/$\7
-M."4A2N9;$"DZ6RL34-8I$34A73P86I84/\87%1`0/V,B2"0<0N!(%QPH91<6
-M2=!5$3(=73(E23`/,!L4.=$Z'-MH%>`Y#3$=2"=#59M((H88,GP\/]X^&+$R
-M$"(79"DF33(93"$86=%;&"T4/=Y"&\\A$Q4Z4!`62*T4-Q4B9+X1*BH96SP?
-M1<0D/3(F<-TM$!`=5:H.(!<64C$W?#8J3*`S(S<@3=8V%K$](QT.6Q`43AL4
-M1:$D,;<0,\X9&,8])\@=$A(U244S5U,D6Q<V;]\I&&<K/8!*.R044>=/#YH>
-M08$I1B,09S$35R(:4C0?<19$7<D^#Q`>5!()-;4702M`=;56)A`25,0K%"X<
-M83`N>K`H'HDS*1`40,M&%!<@7M,_$A<N2L)%%18E4^<M$A@=5=0Q$Q`E311*
-M2L8E&2D<7Q\A7P\80B48,%E/8[1-'J4/-"H<3"PA1$,T?Q<15R44,R,A4AL/
-M,^M4%2,07!L+,[\[&!P4520I:C(9.=54$[,2/M-)&RP?7M=(%1$J8<-,%2H@
-M4B,=51436^]2"!X<1A<44RD</>E+#%0>0S0/:4PJ9I,F-6DG420Y<"@09R,0
-M-V$R/R4M<:\H0!(H410Z:AT27&4Q9"L@;=1%(MA-$M5+#RL4+M8Z&AT<7[<:
-M(-QA&2,36R$++B(84!0:5ALO:K$A.]X?&!$84V@;/SX<6Q`;2$(B2QD21W4J
-M1=TW&@```````````````"P`````)0`J```(_@!]:(N'18\W%15T$1N'C)V?
-M0_HH,<$G9YBX!C6<3;+T@AZ-)K@\O*"!KP^$>"KVA`L3*8P3)^5ZA)@B:AH+
-M9];F7.$Q+!`!0=*<E3'5K(:EHS2N%"AP*Y(\&##H6(!A:!XU99B*H?%4IDF?
-M!8'<"-F%9I*TH8A83:*TXYD!J83D$0ICI-NE(:O8I6&FJ$64$M5$M%!3PU,F
-M2UJD"9I41E824WT2G?BV-!$(!`=,+<IF!P>.%",&P7J"9XB82L5,48F5K,:"
-M'94FU='6;!*R3T->E"%&95DR"`/6P,I0PDF)0SG8($$RJN0R`FI(H7$A2]VD
-M*^^L_6(T3U*V%XH"_AB:HDS8H$AO5@R:P,8.I%^.:*AC(>Z!'":6RC`1L@W-
-M%1Q/,%(.'5+1`<D^74R@P2#?T*'/$"%@\(L5Y?RAB!SO3#*,-6CL44\4]C1#
-MR0Q3C&&"!AH08@(#:Y2C@`&1---,.#)\T84=R##`0",H++8#)34,@X80R:"`
-M0A<]?'#.!";`TDH.8QBB0354A!,*)WI0\<D\YJRQ3PE[V",(.D#48$T9GO22
-MA0.BC,)'*]3TP,`^\_#QA0P@>`/"*]=<HX\3"C!BAQV%5",$+Z0,0X,UL3SB
-M#B[NN$'/,A&,$L,Y[-BASR(@<**("E^,0(<&;[QA0@^,3%",#2S8H,01_LX0
-M`(0:W%`@13#TN+'#&LK@0$T0VER##50*Q/%-%%&H$`0#K7"`!B^X/`),()F0
-M0PNT[K#BRBS1-!("`^=,$8`D="B`QRW?1**+-I?(X$@(L(R2AQ8+Y,*#-*YX
-MH(00'1Q!CSI,U'!%)^_%4(X&FUB@01$.@*!#$I?4D48I&1BA!2*HD%))(.+T
-MYTEOT3B#PB/U4(,$%QD0(<\QX^CRBC=)@%`!&+:<<TH&M*C1"RJX'-'.'`YX
-M<H0@<)#"0CX+I%`*-%:4L@XFS`#[11M?U-))"&RP84LWZL!A1A^YH.*)!)3<
-MHXX6L]P3"!I`H/!`*>90`PD.F'3SR@-AG)`&_A=3'"**#[J(P<<I@YCA2@32
-M!,*+Q9H`(XT2'O2RS"CGS.U9!K>0^C0&S/#1""(ZI)'&*6,,$842N%Q!@3NK
-M"R'%%4KP0D(Q?"`S!3)<I#!!".68$T(IMHP#>BVE(/$+)#-80<PTLBRP^@$>
-M<+,`-[QH$LP+0_P!1C>=S("!,N>8XP<8H6131!B;3`#&#)"DTH(L5#P0S#W+
-MQ)*`$K1HHD4^;E!2QP%:B``&4H$,/Y2C$Y*(1%0(00A)@```77B"*$0@#3>P
-MP&PU4`,^H!","P!!$')0P^H6((I5L"$'.;``';[Q!@-\PP"<B$<]EG"(#*C"
-M%-(@0":\L0U?D&`#_L50@33.(`4M4``=&4@'+-9!!P9JP`#9T$4H=*$+!#1B
-M'3A(`SYH`81'B.,(XJ@"":0(CDRPH@/<"$88V+"%$N#A&)MPX0N2H`L]C&,<
-MEW"$%6:0BCV@XPIH>$0?)M$`<92!%OG8Q3#@(`U2C*)%9-!`&`K`!!EP0@80
-M2,0M;I$.:"C#"D.@P#UJ``]GT"*,K%B&*0+!@TFH8VV*0$(:_/`)?7@#'.'0
-M@R[H8``\:&`,=NC"*"B@!2TTHP5]N((TEH&`<)B"!PU`0RQ(P8MNS``9K6@%
-M'W31AG%$(BZ2&((PA-&#'I"A&`F8!DD\\`H6-,.,X'B'%,+R#FX4`PS&_L!$
-M.4R0#7W<0@%O2,07$($#9@C3"%C8P!5H88\]J$,"-E!;(.X@C5T<`!65V,40
-M,'&(0C!"`1JP@"3TH`T9=&,5JRC$-]+1`U%TP@@[^,$>Z$&*0%1A%XFK`BFD
-MX0L6Y"(#A_A$#[JPC@%\@1@02`(SJ#&&.`A@'\&$!AALX(4Y="`/TA"",UA!
-M@%W<8!*\$`$@C%""+G1A"9AP!"<>9@ME*)$0F\C!$I8`B3\TP@%'@$(QH$`"
-M)8@#'(B0ACB`P`,@%&,'9"##)S`1!&)\`0)^&,,^+$`("QC"#D\X!":HX0!<
-ML(`&-O!%,&H@BS#F0AI'`!LO^"`,/OS!%KJ0_H0HEA`E27Q#%T%X0"%"@`1E
-M2,`!:F!%+Q#A!G)40A!HP`4OFK`#-13#`?I(QCW38(Q/9&``%0#!);01BE>$
-M@!TZNL81$G`!-]2!&&5@A1N&T0Q<,$$$%*!``BR1A5$PPPH<74$%]*`#$.RA
-M`(VP@#`X$(`7``(%T=@`.5Q`C@:0`P[)D$4'$H`."MB#"908Q=X@,01B9$(7
-MG'A%`#8!"QSL@PUAL,0==M"")CQCP4)0QQUDP806H&,!T]A!`EH@AC2P`P,^
-MT`,*NN%-&&T!&L@X!!Y^<(4.D(,%E>A`,T20C#IXL`6-:,`5F+"#!W"@'%OH
-MA`IJ$5(#;`(;AV/'FA103(EV+(,>GHB&&ZJ`!D'<X0[-N$(N@)$+4$C@`<(`
-M$(&/<8Q;7$,1UT"``+>P!57`X1F9D`4<W$`"4MP@$ZYX\B-"004Y2$`.HT@%
-M)@IAB#><0!]FB(<I.(&`(7P"%GPPQ3)F`0YB0"$0@8"")L!Q!RH`8A&AL,8L
-BR!$$,@@#&5OX!1V.\85XA.,.,A##!T2!AP@LXP#;"`@`.P``
-end
diff --git a/contrib/perl5/eg/cgi/file_upload.cgi b/contrib/perl5/eg/cgi/file_upload.cgi
deleted file mode 100644
index 3037de7..0000000
--- a/contrib/perl5/eg/cgi/file_upload.cgi
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/local/bin/perl -w
-
-use strict 'refs';
-use lib '..';
-use CGI qw(:standard);
-use CGI::Carp qw/fatalsToBrowser/;
-
-print header();
-print start_html("File Upload Example");
-print strong("Version "),$CGI::VERSION,p;
-
-print h1("File Upload Example"),
- 'This example demonstrates how to prompt the remote user to
- select a remote file for uploading. ',
- strong("This feature only works with Netscape 2.0 or greater, or IE 4.0 or greater."),
- p,
- 'Select the ',cite('browser'),' button to choose a text file
- to upload. When you press the submit button, this script
- will count the number of lines, words, and characters in
- the file.';
-
-my @types = ('count lines','count words','count characters');
-
-# Start a multipart form.
-print start_multipart_form(),
- "Enter the file to process:",
- filefield('filename','',45),
- br,
- checkbox_group('count',\@types,\@types),
- p,
- reset,submit('submit','Process File'),
- endform;
-
-# Process the form if there is a file name entered
-if (my $file = param('filename')) {
- my %stats;
- my $tmpfile=tmpFileName($file);
- my $mimetype = uploadInfo($file)->{'Content-Type'} || '';
- print hr(),
- h2($file),
- h3($tmpfile),
- h4("MIME Type:",em($mimetype));
-
- my($lines,$words,$characters,@words) = (0,0,0,0);
- while (<$file>) {
- $lines++;
- $words += @words=split(/\s+/);
- $characters += length($_);
- }
- close $file;
- grep($stats{$_}++,param('count'));
- if (%stats) {
- print strong("Lines: "),$lines,br if $stats{'count lines'};
- print strong("Words: "),$words,br if $stats{'count words'};
- print strong("Characters: "),$characters,br if $stats{'count characters'};
- } else {
- print strong("No statistics selected.");
- }
-}
-
-# print cite("URL parameters: "),url_param();
-
-print hr(),
- a({href=>"../cgi_docs.html"},"CGI documentation"),
- hr,
- address(
- a({href=>'/~lstein'},"Lincoln D. Stein")),
- br,
- 'Last modified July 17, 1996',
- end_html;
-
diff --git a/contrib/perl5/eg/cgi/frameset.cgi b/contrib/perl5/eg/cgi/frameset.cgi
deleted file mode 100644
index fc86e92..0000000
--- a/contrib/perl5/eg/cgi/frameset.cgi
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI;
-$query = new CGI;
-print $query->header;
-$TITLE="Frameset Example";
-
-# We use the path information to distinguish between calls
-# to the script to:
-# (1) create the frameset
-# (2) create the query form
-# (3) create the query response
-
-$path_info = $query->path_info;
-
-# If no path information is provided, then we create
-# a side-by-side frame set
-if (!$path_info) {
- &print_frameset;
- exit 0;
-}
-
-# If we get here, then we either create the query form
-# or we create the response.
-&print_html_header;
-&print_query if $path_info=~/query/;
-&print_response if $path_info=~/response/;
-&print_end;
-
-
-# Create the frameset
-sub print_frameset {
- $script_name = $query->script_name;
- print <<EOF;
-<html><head><title>$TITLE</title></head>
-<frameset cols="50,50">
-<frame src="$script_name/query" name="query">
-<frame src="$script_name/response" name="response">
-</frameset>
-EOF
- ;
- exit 0;
-}
-
-sub print_html_header {
- print $query->start_html($TITLE);
-}
-
-sub print_end {
- print qq{<P><hr><A HREF="../index.html" TARGET="_top">More Examples</A>};
- print $query->end_html;
-}
-
-sub print_query {
- $script_name = $query->script_name;
- print "<H1>Frameset Query</H1>\n";
- print $query->startform(-action=>"$script_name/response",-TARGET=>"response");
- print "What's your name? ",$query->textfield('name');
- print "<P>What's the combination?<P>",
- $query->checkbox_group(-name=>'words',
- -values=>['eenie','meenie','minie','moe']);
-
- print "<P>What's your favorite color? ",
- $query->popup_menu(-name=>'color',
- -values=>['red','green','blue','chartreuse']),
- "<P>";
- print $query->submit;
- print $query->endform;
-}
-
-sub print_response {
- print "<H1>Frameset Result</H1>\n";
- unless ($query->param) {
- print "<b>No query submitted yet.</b>";
- return;
- }
- print "Your name is <EM>",$query->param(name),"</EM>\n";
- print "<P>The keywords are: <EM>",join(", ",$query->param(words)),"</EM>\n";
- print "<P>Your favorite color is <EM>",$query->param(color),"</EM>\n";
-}
-
diff --git a/contrib/perl5/eg/cgi/index.html b/contrib/perl5/eg/cgi/index.html
deleted file mode 100644
index 133ecc4..0000000
--- a/contrib/perl5/eg/cgi/index.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<HTML> <HEAD>
-<TITLE>More Examples of Scripts Created with CGI.pm</TITLE>
-</HEAD>
-
-<BODY>
-<H1>More Examples of Scripts Created with CGI.pm</H1>
-
-<H2> Basic Non Sequitur Questionnaire</H2>
-<UL>
- <LI> <A HREF="tryit.cgi">Try the script</A>
- <LI> <A HREF="tryit.txt">Look at its source code</A>
-</UL>
-
-<H2> Advanced Non Sequitur Questionnaire</H2>
-<UL>
- <LI> <A HREF="monty.cgi">Try the script</A>
- <LI> <A HREF="monty.txt">Look at its source code</A>
-</UL>
-
-<H2> Save and restore the state of a form to a file</H2>
-<UL>
- <LI> <A HREF="save_state.cgi">Try the script</A>
- <LI> <A HREF="save_state.txt">Look at its source code</A>
-</UL>
-
-<H2> Server Push</H2>
-<ul>
- <li><a href="nph-multipart.cgi">Try the script</a>
- <li><a href="nph-multipart.txt">Look at its source code</a>
-</ul>
-
-<H2> Read the coordinates from a clickable image map</H2>
-<UL>
- <LI> <A HREF="clickable_image.cgi">Try the script</A>
- <LI> <A HREF="clickable_image.txt">Look at its source code</A>
-</UL>
-
-<H2> Multiple independent forms on the same page</H2>
-<UL>
- <LI> <A HREF="multiple_forms.cgi">Try the script</A>
- <LI> <A HREF="multiple_forms.txt">Look at its source code</A>
-</UL>
-
-<H2> How to maintain state on a page with internal links</H2>
-<UL>
- <LI> <A HREF="internal_links.cgi">Try the script</A>
- <LI> <A HREF="internal_links.txt">Look at its source code</A>
-</UL>
-
-<h2>Echo fatal script errors to the browser</h2>
-<em>This script deliberately generates a compile-time error.</em>
-<ul>
- <li><a href="crash.cgi">Try the script</a>
- <li><a href="crash.txt">Look at its source code</a>
-</ul>
-
-<EM>The Following Scripts Work with Netscape Navigator 2.0 and higher,
-or Internet Explorer 3.0 and higher</EM>
-
-<H2> Prompt for a file to upload and process it</H2>
-<UL>
- <LI> <A HREF="file_upload.cgi">Try the script</A>
- <LI> <A HREF="file_upload.txt">Look at its source code</A>
-</UL>
-
-<h2> A Continuously-Updated Page using Server Push</h2>
-<ul>
- <li><a href="nph-clock.cgi">Try the script</a>
- <li><a href="nph-clock.txt">Look at its source code</a>
-</ul>
-
-<h2>Compute the "diff" between two uploaded files</h2>
-<ul>
- <li><a href="diff_upload.cgi">Try the script</a>
- <li><a href="diff_upload.txt">Look at its source code</a>
-</ul>
-
-<h2>Maintain state over a long period with a cookie</h2>
-<ul>
- <li><a href="cookie.cgi">Try the script</a>
- <li><a href="cookie.txt">Look at its source code</a>
-</ul>
-
-<h2>Permanently customize the appearance of a page with a cookie</h2>
-<ul>
- <li><a href="customize.cgi">Try the script</a>
- <li><a href="customize.txt">Look at its source code</a>
-</ul>
-
-<h2> Popup the response in a new window</h2>
-<ul>
- <li><a href="popup.cgi">Try the script</a>
- <li><a href="popup.txt">Look at its source code</a>
-</ul>
-
-<h2> Side-by-side form and response using frames</h2>
-<ul>
- <li><a href="frameset.cgi">Try the script</a>
- <li><a href="frameset.txt">Look at its source code</a>
-</ul>
-
-<h2>Verify the Contents of a fill-out form with JavaScript</h2>
-<ul>
- <li><a href="javascript.cgi">Try the script</a>
- <li><a href="javascript.txt">Look at its source code</a>
-</ul>
-
-<HR>
-<MENU>
- <LI> <A HREF="../cgi_docs.html">CGI.pm documentation</A>
- <LI> <A HREF="../CGI.pm.tar.gz">Download the CGI.pm distribution</A>
-</MENU>
-<HR>
-<ADDRESS>Lincoln D. Stein, lstein@genome.wi.mit.edu<br>
-<a href="/">Whitehead Institute/MIT Center for Genome Research</a></ADDRESS>
-<!-- hhmts start -->
-Last modified: Wed Jun 23 15:31:47 EDT 1999
-<!-- hhmts end -->
-</BODY> </HTML>
diff --git a/contrib/perl5/eg/cgi/internal_links.cgi b/contrib/perl5/eg/cgi/internal_links.cgi
deleted file mode 100644
index 4806966..0000000
--- a/contrib/perl5/eg/cgi/internal_links.cgi
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI;
-$query = new CGI;
-
-# We generate a regular HTML file containing a very long list
-# and a popup menu that does nothing except to show that we
-# don't lose the state information.
-print $query->header;
-print $query->start_html("Internal Links Example");
-print "<H1>Internal Links Example</H1>\n";
-print "Click <cite>Submit Query</cite> to create a state. Then scroll down and",
- " click on any of the <cite>Jump to top</cite> links. This is not very exciting.";
-
-print "<A NAME=\"start\"></A>\n"; # an anchor point at the top
-
-# pick a default starting value;
-$query->param('amenu','FOO1') unless $query->param('amenu');
-
-print $query->startform;
-print $query->popup_menu('amenu',[('FOO1'..'FOO9')]);
-print $query->submit,$query->endform;
-
-# We create a long boring list for the purposes of illustration.
-$myself = $query->self_url;
-print "<OL>\n";
-for (1..100) {
- print qq{<LI>List item #$_ <A HREF="$myself#start">Jump to top</A>\n};
-}
-print "</OL>\n";
-
-print $query->end_html;
-
diff --git a/contrib/perl5/eg/cgi/javascript.cgi b/contrib/perl5/eg/cgi/javascript.cgi
deleted file mode 100644
index 91c2b9e..0000000
--- a/contrib/perl5/eg/cgi/javascript.cgi
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/local/bin/perl
-
-# This script illustrates how to use JavaScript to validate fill-out
-# forms.
-use CGI qw(:standard);
-
-# Here's the javascript code that we include in the document.
-$JSCRIPT=<<EOF;
- // validate that the user is the right age. Return
- // false to prevent the form from being submitted.
- function validateForm() {
- var today = new Date();
- var birthday = validateDate(document.form1.birthdate);
- if (birthday == 0) {
- document.form1.birthdate.focus()
- document.form1.birthdate.select();
- return false;
- }
- var milliseconds = today.getTime()-birthday;
- var years = milliseconds/(1000 * 60 * 60 * 24 * 365.25);
- if ((years > 20) || (years < 5)) {
- alert("You must be between the ages of 5 and 20 to submit this form");
- document.form1.birthdate.focus();
- document.form1.birthdate.select();
- return false;
- }
- // Since we've calculated the age in years already,
- // we might as well send it up to our CGI script.
- document.form1.age.value=Math.floor(years);
- return true;
- }
-
- // make sure that the contents of the supplied
- // field contain a valid date.
- function validateDate(element) {
- var date = Date.parse(element.value);
- if (0 == date) {
- alert("Please enter date in format MMM DD, YY");
- element.focus();
- element.select();
- }
- return date;
- }
-
- // Compliments, compliments
- function doPraise(element) {
- if (element.checked) {
- self.status=element.value + " is an excellent choice!";
- return true;
- } else {
- return false;
- }
- }
-
- function checkColor(element) {
- var color = element.options[element.selectedIndex].text;
- if (color == "blonde") {
- if (confirm("Is it true that blondes have more fun?"))
- alert("Darn. That leaves me out.");
- } else
- alert(color + " is a fine choice!");
- }
-EOF
- ;
-
-# here's where the execution begins
-print header;
-print start_html(-title=>'Personal Profile',-script=>$JSCRIPT);
-
-print h1("Big Brother Wants to Know All About You"),
- strong("Note: "),"This page uses JavaScript and requires ",
- "Netscape 2.0 or higher to do anything special.";
-
-&print_prompt();
-print hr;
-&print_response() if param;
-print end_html;
-
-sub print_prompt {
- print start_form(-name=>'form1',
- -onSubmit=>"return validateForm()"),"\n";
- print "Birthdate (e.g. Jan 3, 1972): ",
- textfield(-name=>'birthdate',
- -onBlur=>"validateDate(this)"),"<p>\n";
- print "Sex: ",radio_group(-name=>'gender',
- -value=>[qw/male female/],
- -onClick=>"doPraise(this)"),"<p>\n";
- print "Hair color: ",popup_menu(-name=>'color',
- -value=>[qw/brunette blonde red gray/],
- -default=>'red',
- -onChange=>"checkColor(this)"),"<p>\n";
- print hidden(-name=>'age',-value=>0);
- print submit();
- print end_form;
-}
-
-sub print_response {
- import_names('Q');
- print h2("Your profile"),
- "You claim to be a ",b($Q::age)," year old ",b($Q::color,$Q::gender),".",
- "You should be ashamed of yourself for lying so ",
- "blatantly to big brother!",
- hr;
-}
-
diff --git a/contrib/perl5/eg/cgi/monty.cgi b/contrib/perl5/eg/cgi/monty.cgi
deleted file mode 100644
index 693c258..0000000
--- a/contrib/perl5/eg/cgi/monty.cgi
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI;
-use CGI::Carp qw/fatalsToBrowser/;
-
-$query = new CGI;
-
-print $query->header;
-print $query->start_html("Example CGI.pm Form");
-print "<H1> Example CGI.pm Form</H1>\n";
-&print_prompt($query);
-&do_work($query);
-&print_tail;
-print $query->end_html;
-
-sub print_prompt {
- my($query) = @_;
-
- print $query->start_form;
- print "<EM>What's your name?</EM><BR>";
- print $query->textfield('name');
- print $query->checkbox('Not my real name');
-
- print "<P><EM>Where can you find English Sparrows?</EM><BR>";
- print $query->checkbox_group(
- -name=>'Sparrow locations',
- -Values=>[England,France,Spain,Asia,Hoboken],
- -linebreak=>'yes',
- -defaults=>[England,Asia]);
-
- print "<P><EM>How far can they fly?</EM><BR>",
- $query->radio_group(
- -name=>'how far',
- -Values=>['10 ft','1 mile','10 miles','real far'],
- -default=>'1 mile');
-
- print "<P><EM>What's your favorite color?</EM> ";
- print $query->popup_menu(-name=>'Color',
- -Values=>['black','brown','red','yellow'],
- -default=>'red');
-
- print $query->hidden('Reference','Monty Python and the Holy Grail');
-
- print "<P><EM>What have you got there?</EM><BR>";
- print $query->scrolling_list(
- -name=>'possessions',
- -Values=>['A Coconut','A Grail','An Icon',
- 'A Sword','A Ticket'],
- -size=>5,
- -multiple=>'true');
-
- print "<P><EM>Any parting comments?</EM><BR>";
- print $query->textarea(-name=>'Comments',
- -rows=>10,
- -columns=>50);
-
- print "<P>",$query->reset;
- print $query->submit('Action','Shout');
- print $query->submit('Action','Scream');
- print $query->endform;
- print "<HR>\n";
- }
-
-sub do_work {
- my($query) = @_;
- my(@values,$key);
-
- print "<H2>Here are the current settings in this form</H2>";
-
- foreach $key ($query->param) {
- print "<STRONG>$key</STRONG> -> ";
- @values = $query->param($key);
- print join(", ",@values),"<BR>\n";
- }
-}
-
-sub print_tail {
- print <<END;
-<HR>
-<ADDRESS>Lincoln D. Stein</ADDRESS><BR>
-<A HREF="/">Home Page</A>
-END
- ;
-}
diff --git a/contrib/perl5/eg/cgi/multiple_forms.cgi b/contrib/perl5/eg/cgi/multiple_forms.cgi
deleted file mode 100644
index b38bf93..0000000
--- a/contrib/perl5/eg/cgi/multiple_forms.cgi
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI;
-
-$query = new CGI;
-print $query->header;
-print $query->start_html('Multiple Forms');
-print "<H1>Multiple Forms</H1>\n";
-
-# Print the first form
-print $query->startform;
-$name = $query->remote_user || 'anonymous@' . $query->remote_host;
-
-print "What's your name? ",$query->textfield('name',$name,50);
-print "<P>What's the combination?<P>",
- $query->checkbox_group('words',['eenie','meenie','minie','moe']);
-print "<P>What's your favorite color? ",
- $query->popup_menu('color',['red','green','blue','chartreuse']),
- "<P>";
-print $query->submit('form_1','Send Form 1');
-print $query->endform;
-
-# Print the second form
-print "<HR>\n";
-print $query->startform;
-print "Some radio buttons: ",$query->radio_group('radio buttons',
- [qw{one two three four five}],'three'),"\n";
-print "<P>What's the password? ",$query->password_field('pass','secret');
-print $query->defaults,$query->submit('form_2','Send Form 2'),"\n";
-print $query->endform;
-
-print "<HR>\n";
-
-$query->import_names('Q');
-if ($Q::form_1) {
- print "<H2>Form 1 Submitted</H2>\n";
- print "Your name is <EM>$Q::name</EM>\n";
- print "<P>The combination is: <EM>{",join(",",@Q::words),"}</EM>\n";
- print "<P>Your favorite color is <EM>$Q::color</EM>\n";
-} elsif ($Q::form_2) {
- print <<EOF;
-<H2>Form 2 Submitted</H2>
-<P>The value of the radio buttons is <EM>$Q::radio_buttons</EM>
-<P>The secret password is <EM>$Q::pass</EM>
-EOF
- ;
-}
-print qq{<P><A HREF="./">Other examples</A>};
-print qq{<P><A HREF="../cgi_docs.html">Go to the documentation</A>};
-
-print $query->end_html;
-
-
-
diff --git a/contrib/perl5/eg/cgi/nph-clock.cgi b/contrib/perl5/eg/cgi/nph-clock.cgi
deleted file mode 100644
index 55a2fbe..0000000
--- a/contrib/perl5/eg/cgi/nph-clock.cgi
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/local/bin/perl -w
-
-use CGI::Push qw(:standard :html3);
-
-do_push(-next_page=>\&draw_time,-delay=>1);
-
-sub draw_time {
- my $time = `/bin/date`;
- return start_html('Tick Tock'),
- div({-align=>CENTER},
- h1('Virtual Clock'),
- h2($time)
- ),
- hr,
- a({-href=>'index.html'},'More examples'),
- end_html();
-}
-
diff --git a/contrib/perl5/eg/cgi/nph-multipart.cgi b/contrib/perl5/eg/cgi/nph-multipart.cgi
deleted file mode 100755
index f8cea59..0000000
--- a/contrib/perl5/eg/cgi/nph-multipart.cgi
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/local/bin/perl
-use CGI qw/:push -nph/;
-$| = 1;
-print multipart_init(-boundary=>'----------------here we go!');
-while (1) {
- print multipart_start(-type=>'text/plain'),
- "The current time is ",scalar(localtime),"\n",
- multipart_end;
- sleep 1;
-}
diff --git a/contrib/perl5/eg/cgi/popup.cgi b/contrib/perl5/eg/cgi/popup.cgi
deleted file mode 100644
index 88cea1d..0000000
--- a/contrib/perl5/eg/cgi/popup.cgi
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI;
-$query = new CGI;
-print $query->header;
-print $query->start_html('Popup Window');
-
-
-if (!$query->param) {
- print "<H1>Ask your Question</H1>\n";
- print $query->startform(-target=>'_new');
- print "What's your name? ",$query->textfield('name');
- print "<P>What's the combination?<P>",
- $query->checkbox_group(-name=>'words',
- -values=>['eenie','meenie','minie','moe'],
- -defaults=>['eenie','moe']);
-
- print "<P>What's your favorite color? ",
- $query->popup_menu(-name=>'color',
- -values=>['red','green','blue','chartreuse']),
- "<P>";
- print $query->submit;
- print $query->endform;
-
-} else {
- print "<H1>And the Answer is...</H1>\n";
- print "Your name is <EM>",$query->param(name),"</EM>\n";
- print "<P>The keywords are: <EM>",join(", ",$query->param(words)),"</EM>\n";
- print "<P>Your favorite color is <EM>",$query->param(color),"</EM>\n";
-}
-print qq{<P><A HREF="cgi_docs.html">Go to the documentation</A>};
-print $query->end_html;
diff --git a/contrib/perl5/eg/cgi/save_state.cgi b/contrib/perl5/eg/cgi/save_state.cgi
deleted file mode 100644
index 85bacaf..0000000
--- a/contrib/perl5/eg/cgi/save_state.cgi
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI;
-$query = new CGI;
-
-print $query->header;
-print $query->start_html("Save and Restore Example");
-print "<H1>Save and Restore Example</H1>\n";
-
-# Here's where we take action on the previous request
-&save_parameters($query) if $query->param('action') eq 'SAVE';
-$query = &restore_parameters($query) if $query->param('action') eq 'RESTORE';
-
-# Here's where we create the form
-print $query->start_multipart_form;
-print "Popup 1: ",$query->popup_menu('popup1',[qw{red green purple magenta orange chartreuse brown}]),"\n";
-print "Popup 2: ",$query->popup_menu('popup2',[qw{lion tiger bear zebra potto wildebeest frog emu gazelle}]),"\n";
-print "<P>";
-$default_name = $query->remote_addr . '.sav';
-print "Save/restore state from file: ",$query->textfield('savefile',$default_name),"\n";
-print "<P>";
-print $query->submit('action','SAVE'),$query->submit('action','RESTORE');
-print "<P>",$query->defaults;
-print $query->endform;
-
-# Here we print out a bit at the end
-print $query->end_html;
-
-sub save_parameters {
- local($query) = @_;
- local($filename) = &clean_name($query->param('savefile'));
- if (open(FILE,">$filename")) {
- $query->save(FILE);
- close FILE;
- print "<STRONG>State has been saved to file $filename</STRONG>\n";
- print "<P>If you remember this name you can restore the state later.\n";
- } else {
- print "<STRONG>Error:</STRONG> couldn't write to file $filename: $!\n";
- }
-}
-
-sub restore_parameters {
- local($query) = @_;
- local($filename) = &clean_name($query->param('savefile'));
- if (open(FILE,$filename)) {
- $query = new CGI(FILE); # Throw out the old query, replace it with a new one
- close FILE;
- print "<STRONG>State has been restored from file $filename</STRONG>\n";
- } else {
- print "<STRONG>Error:</STRONG> couldn't restore file $filename: $!\n";
- }
- return $query;
-}
-
-
-# Very important subroutine -- get rid of all the naughty
-# metacharacters from the file name. If there are, we
-# complain bitterly and die.
-sub clean_name {
- local($name) = @_;
- unless ($name=~/^[\w\._\-]+$/) {
- print "<STRONG>$name has naughty characters. Only ";
- print "alphanumerics are allowed. You can't use absolute names.</STRONG>";
- die "Attempt to use naughty characters";
- }
- return "WORLD_WRITABLE/$name";
-}
diff --git a/contrib/perl5/eg/cgi/tryit.cgi b/contrib/perl5/eg/cgi/tryit.cgi
deleted file mode 100644
index 83c620c..0000000
--- a/contrib/perl5/eg/cgi/tryit.cgi
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/local/bin/perl
-
-use CGI ':standard';
-
-print header;
-print start_html('A Simple Example'),
- h1('A Simple Example'),
- start_form,
- "What's your name? ",textfield('name'),
- p,
- "What's the combination?",
- p,
- checkbox_group(-name=>'words',
- -values=>['eenie','meenie','minie','moe'],
- -defaults=>['eenie','minie']),
- p,
- "What's your favorite color? ",
- popup_menu(-name=>'color',
- -values=>['red','green','blue','chartreuse']),
- p,
- submit,
- end_form,
- hr;
-
-if (param()) {
- print
- "Your name is: ",em(param('name')),
- p,
- "The keywords are: ",em(join(", ",param('words'))),
- p,
- "Your favorite color is: ",em(param('color')),
- hr;
-}
-print a({href=>'../cgi_docs.html'},'Go to the documentation');
-print end_html;
-
-
diff --git a/contrib/perl5/eg/cgi/wilogo_gif.uu b/contrib/perl5/eg/cgi/wilogo_gif.uu
deleted file mode 100644
index c5d1042..0000000
--- a/contrib/perl5/eg/cgi/wilogo_gif.uu
+++ /dev/null
@@ -1,13 +0,0 @@
-begin 444 wilogo.gif
-M1TE&.#=A7@!$`(```'X2F?___RP`````7@!$```"_D2.J<#MKF)ZU,A3,[OO
-M(IUY']A%9"6AW$F)+#2]Y:BNLF6_\;WMH<?#I72^VP+D"@*)F&"O25KRDM&B
-M[%C-7;4_J)*6'4ZE&O`W8"1OQ5UGPWRBIKDPM!MW9J]-[;LUKL;$5W.'YQ3(
-M(O<&-^>F*(A55\BX%UEI^;<VB0BH1RFX2=<IELE4^*0'N?-I>OJ8N%(*Z^4G
-M.OJJ>8HZ.(>;JRMD><E[!KQHB^3;:APL6Z8\RKPK/)O:*-WLW&7]*\UYR]J)
-M?<P=1MR-_6VN76,WGAV^32W^3CZ_SCY3;W__C-R^CU^\%M#T!9PVL(ZZ&>X"
-M%A1XSM]!A?T8/C0T$1XMJG\B&G+,"-&C/(VS0(842;`)M'S>_OE8F#"=2S#*
-M8LHLAS'D1Y,42UGY9O,F-T:X@@JEE@D1RW>/D@8R.DZ-+*E0CQ:9JJ5JU!SQ
-MR&BU2D.;E*4'ER0TNY%G2A/Y.G[=VG%81+5K_UG$21<A6;=YP9'5B++O7:@7
-M\]J5]]?DX7:)%<]5%=B/55>-GQW55;$8L\RW6J8-9>QM7<^A/SMZK!ESY$,+
-(KPA.EJ```#L`
-end
diff --git a/contrib/perl5/eg/changes b/contrib/perl5/eg/changes
deleted file mode 100644
index 901e1ed..0000000
--- a/contrib/perl5/eg/changes
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/perl -P
-
-# $RCSfile: changes,v $$Revision: 4.1 $$Date: 92/08/07 17:20:08 $
-
-($dir, $days) = @ARGV;
-$dir = '/' if $dir eq '';
-$days = '14' if $days eq '';
-
-# Masscomps do things differently from Suns
-
-#if defined(mc300) || defined(mc500) || defined(mc700)
-open(Find, "find $dir -mtime -$days -print |") ||
- die "changes: can't run find";
-#else
-open(Find, "find $dir \\( -fstype nfs -prune \\) -o -mtime -$days -ls |") ||
- die "changes: can't run find";
-#endif
-
-while (<Find>) {
-
-#if defined(mc300) || defined(mc500) || defined(mc700)
- $x = `/bin/ls -ild $_`;
- $_ = $x;
- ($inode,$perm,$links,$owner,$group,$size,$month,$day,$time,$name)
- = split(' ');
-#else
- ($inode,$blocks,$perm,$links,$owner,$group,$size,$month,$day,$time,$name)
- = split(' ');
-#endif
-
- printf("%10s%3s %-8s %-8s%9s %3s %2s %s\n",
- $perm,$links,$owner,$group,$size,$month,$day,$name);
-}
-
diff --git a/contrib/perl5/eg/client b/contrib/perl5/eg/client
deleted file mode 100755
index 5900c90..0000000
--- a/contrib/perl5/eg/client
+++ /dev/null
@@ -1,34 +0,0 @@
-#!./perl
-
-$pat = 'S n C4 x8';
-$inet = 2;
-$echo = 7;
-$smtp = 25;
-$nntp = 119;
-$test = 2345;
-
-$SIG{'INT'} = 'dokill';
-
-$this = pack($pat,$inet,0, 128,149,13,43);
-$that = pack($pat,$inet,$test,127,0,0,1);
-
-if (socket(S,2,1,6)) { print "socket ok\n"; } else { die $!; }
-if (bind(S,$this)) { print "bind ok\n"; } else { die $!; }
-if (connect(S,$that)) { print "connect ok\n"; } else { die $!; }
-
-select(S); $| = 1; select(stdout);
-
-if ($child = fork) {
- while (<STDIN>) {
- print S;
- }
- sleep 3;
- do dokill();
-}
-else {
- while (<S>) {
- print;
- }
-}
-
-sub dokill { kill 9,$child if $child; }
diff --git a/contrib/perl5/eg/down b/contrib/perl5/eg/down
deleted file mode 100755
index bbb0d06..0000000
--- a/contrib/perl5/eg/down
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/perl
-
-$| = 1;
-if ($#ARGV >= 0) {
- $cmd = join(' ',@ARGV);
-}
-else {
- print "Command: ";
- $cmd = <stdin>;
- chop($cmd);
- while ($cmd =~ s/\\$//) {
- print "+ ";
- $cmd .= <stdin>;
- chop($cmd);
- }
-}
-$cwd = `pwd`; chop($cwd);
-
-open(FIND,'find . -type d -print|') || die "Can't run find";
-
-while (<FIND>) {
- chop;
- unless (chdir $_) {
- print stderr "Can't cd to $_\n";
- next;
- }
- print "\t--> ",$_,"\n";
- system $cmd;
- chdir $cwd;
-}
diff --git a/contrib/perl5/eg/dus b/contrib/perl5/eg/dus
deleted file mode 100644
index 3025e2b..0000000
--- a/contrib/perl5/eg/dus
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: dus,v $$Revision: 4.1 $$Date: 92/08/07 17:20:11 $
-
-# This script does a du -s on any directories in the current directory that
-# are not mount points for another filesystem.
-
-($mydev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('.');
-
-open(ls,'ls -F1|');
-
-while (<ls>) {
- chop;
- next unless s|/$||;
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($_);
- next unless $dev == $mydev;
- push(@ary,$_);
-}
-
-exec 'du', '-s', @ary;
diff --git a/contrib/perl5/eg/findcp b/contrib/perl5/eg/findcp
deleted file mode 100644
index 5dba040..0000000
--- a/contrib/perl5/eg/findcp
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: findcp,v $$Revision: 4.1 $$Date: 92/08/07 17:20:12 $
-
-# This is a wrapper around the find command that pretends find has a switch
-# of the form -cp host:destination. It presumes your find implements -ls.
-# It uses tar to do the actual copy. If your tar knows about the I switch
-# you may prefer to use findtar, since this one has to do the tar in batches.
-
-sub copy {
- `tar cf - $list | rsh $desthost cd $destdir '&&' tar xBpf -`;
-}
-
-$sourcedir = $ARGV[0];
-if ($sourcedir =~ /^\//) {
- $ARGV[0] = '.';
- unless (chdir($sourcedir)) { die "Can't find directory $sourcedir: $!"; }
-}
-
-$args = join(' ',@ARGV);
-if ($args =~ s/-cp *([^ ]+)/-ls/) {
- $dest = $1;
- if ($dest =~ /(.*):(.*)/) {
- $desthost = $1;
- $destdir = $2;
- }
- else {
- die "Malformed destination--should be host:directory";
- }
-}
-else {
- die("No destination specified");
-}
-
-open(find,"find $args |") || die "Can't run find for you: $!";
-
-while (<find>) {
- @x = split(' ');
- if ($x[2] =~ /^d/) { next;}
- chop($filename = $x[10]);
- if (length($list) > 5000) {
- do copy();
- $list = '';
- }
- else {
- $list .= ' ';
- }
- $list .= $filename;
-}
-
-if ($list) {
- do copy();
-}
diff --git a/contrib/perl5/eg/findtar b/contrib/perl5/eg/findtar
deleted file mode 100644
index 6462f66..0000000
--- a/contrib/perl5/eg/findtar
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: findtar,v $$Revision: 4.1 $$Date: 92/08/07 17:20:13 $
-
-# findtar takes find-style arguments and spits out a tarfile on stdout.
-# It won't work unless your find supports -ls and your tar the I flag.
-
-$args = join(' ',@ARGV);
-open(find,"/usr/bin/find $args -ls |") || die "Can't run find for you.";
-
-open(tar,"| /bin/tar cIf - -") || die "Can't run tar for you: $!";
-
-while (<find>) {
- @x = split(' ');
- if ($x[2] =~ /^d/) { print tar '-d ';}
- print tar $x[10],"\n";
-}
diff --git a/contrib/perl5/eg/g/gcp b/contrib/perl5/eg/g/gcp
deleted file mode 100644
index d18b6f6..0000000
--- a/contrib/perl5/eg/g/gcp
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: gcp,v $$Revision: 4.1 $$Date: 92/08/07 17:20:15 $
-
-# Here is a script to do global rcps. See man page.
-
-$#ARGV >= 1 || die "Not enough arguments.\n";
-
-if ($ARGV[0] eq '-r') {
- $rcp = 'rcp -r';
- shift;
-} else {
- $rcp = 'rcp';
-}
-$args = $rcp;
-$dest = $ARGV[$#ARGV];
-
-$SIG{'QUIT'} = 'CLEANUP';
-$SIG{'INT'} = 'CONT';
-
-while ($arg = shift) {
- if ($arg =~ /^([-a-zA-Z0-9_+]+):/) {
- if ($systype && $systype ne $1) {
- die "Can't mix system type specifers ($systype vs $1).\n";
- }
- $#ARGV < 0 || $arg !~ /:$/ || die "No source file specified.\n";
- $systype = $1;
- $args .= " $arg";
- } else {
- if ($#ARGV >= 0) {
- if ($arg =~ /^[\/~]/) {
- $arg =~ /^(.*)\// && ($dir = $1);
- } else {
- if (!$pwd) {
- chop($pwd = `pwd`);
- }
- $dir = $pwd;
- }
- }
- if ($olddir && $dir ne $olddir && $dest =~ /:$/) {
- $args .= " $dest$olddir; $rcp";
- }
- $olddir = $dir;
- $args .= " $arg";
- }
-}
-
-die "No system type specified.\n" unless $systype;
-
-$args =~ s/:$/:$olddir/;
-
-chop($thishost = `hostname`);
-
-$one_of_these = ":$systype:";
-if ($systype =~ s/\+/[+]/g) {
- $one_of_these =~ s/\+/:/g;
-}
-$one_of_these =~ s/-/:-/g;
-
-@ARGV = ();
-push(@ARGV,'.grem') if -f '.grem';
-push(@ARGV,'.ghosts') if -f '.ghosts';
-push(@ARGV,'/etc/ghosts');
-
-$remainder = '';
-
-line: while (<>) {
- s/[ \t]*\n//;
- if (!$_ || /^#/) {
- next line;
- }
- if (/^([a-zA-Z_0-9]+)=(.+)/) {
- $name = $1; $repl = $2;
- $repl =~ s/\+/:/g;
- $repl =~ s/-/:-/g;
- $one_of_these =~ s/:$name:/:$repl:/;
- $repl =~ s/:/:-/g;
- $one_of_these =~ s/:-$name:/:-$repl:/g;
- next line;
- }
- @gh = split(' ');
- $host = $gh[0];
- next line if $host eq $thishost; # should handle aliases too
- $wanted = 0;
- foreach $class (@gh) {
- $wanted++ if index($one_of_these,":$class:") >= 0;
- $wanted = -9999 if index($one_of_these,":-$class:") >= 0;
- }
- if ($wanted > 0) {
- ($cmd = $args) =~ s/[ \t]$systype:/ $host:/g;
- print "$cmd\n";
- $result = `$cmd 2>&1`;
- $remainder .= "$host+" if
- $result =~ /Connection timed out|Permission denied/;
- print $result;
- }
-}
-
-if ($remainder) {
- chop($remainder);
- open(grem,">.grem") || (printf stderr "Can't create .grem: $!\n");
- print grem 'rem=', $remainder, "\n";
- close(grem);
- print 'rem=', $remainder, "\n";
-}
-
-sub CLEANUP {
- exit;
-}
-
-sub CONT {
- print "Continuing...\n"; # Just ignore the signal that kills rcp
- $remainder .= "$host+";
-}
diff --git a/contrib/perl5/eg/g/gcp.man b/contrib/perl5/eg/g/gcp.man
deleted file mode 100644
index 1198554..0000000
--- a/contrib/perl5/eg/g/gcp.man
+++ /dev/null
@@ -1,77 +0,0 @@
-.\" $RCSfile: gcp.man,v $$Revision: 4.1 $$Date: 92/08/07 17:20:17 $
-.TH GCP 1C "13 May 1988"
-.SH NAME
-gcp \- global file copy
-.SH SYNOPSIS
-.B gcp
-file1 file2
-.br
-.B gcp
-[
-.B \-r
-] file ... directory
-.SH DESCRIPTION
-.I gcp
-works just like rcp(1C) except that you may specify a set of hosts to copy files
-from or to.
-The host sets are defined in the file /etc/ghosts.
-(An individual host name can be used as a set containing one member.)
-You can give a command like
-
- gcp /etc/motd sun:
-
-to copy your /etc/motd file to /etc/motd on all the Suns.
-If, on the other hand, you say
-
- gcp /a/foo /b/bar sun:/tmp
-
-then your files will be copied to /tmp on all the Suns.
-The general rule is that if you don't specify the destination directory,
-files go to the same directory they are in currently.
-.P
-You may specify the union of two or more sets by using + as follows:
-
- gcp /a/foo /b/bar 750+mc:
-
-which will copy /a/foo to /a/foo on all 750's and Masscomps, and then copy
-/b/bar to /b/bar on all 750's and Masscomps.
-.P
-Commonly used sets should be defined in /etc/ghosts.
-For example, you could add a line that says
-
- pep=manny+moe+jack
-
-Another way to do that would be to add the word "pep" after each of the host
-entries:
-
- manny sun3 pep
-.br
- moe sun3 pep
-.br
- jack sun3 pep
-
-Hosts and sets of host can also be excluded:
-
- foo=sun-sun2
-
-Any host so excluded will never be included, even if a subsequent set on the
-line includes it:
-
- foo=abc+def
-.br
- bar=xyz-abc+foo
-
-comes out to xyz+def.
-
-You can define private host sets by creating .ghosts in your current directory
-with entries just like /etc/ghosts.
-Also, if there is a file .grem, it defines "rem" to be the remaining hosts
-from the last gsh or gcp that didn't succeed everywhere.
-.PP
-Interrupting with a SIGINT will cause the rcp to the current host to be skipped
-and execution resumed with the next host.
-To stop completely, send a SIGQUIT.
-.SH SEE ALSO
-rcp(1C)
-.SH BUGS
-All the bugs of rcp, since it calls rcp.
diff --git a/contrib/perl5/eg/g/ged b/contrib/perl5/eg/g/ged
deleted file mode 100644
index 07ac88f..0000000
--- a/contrib/perl5/eg/g/ged
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: ged,v $$Revision: 4.1 $$Date: 92/08/07 17:20:18 $
-
-# Does inplace edits on a set of files on a set of machines.
-#
-# Typical invokation:
-#
-# ged vax+sun /etc/passwd
-# s/Freddy/Freddie/;
-# ^D
-#
-
-$class = shift;
-$files = join(' ',@ARGV);
-
-die "Usage: ged class files <perlcmds\n" unless $files;
-
-exec "gsh", $class, "-d", "perl -pi.bak - $files";
-
-die "Couldn't execute gsh for some reason, stopped";
diff --git a/contrib/perl5/eg/g/ghosts b/contrib/perl5/eg/g/ghosts
deleted file mode 100644
index 96ec771..0000000
--- a/contrib/perl5/eg/g/ghosts
+++ /dev/null
@@ -1,33 +0,0 @@
-# This first section gives alternate sets defined in terms of the sets given
-# by the second section. The order is important--all references must be
-# forward references.
-
-Nnd=sun-nd
-all=sun+mc+vax
-baseline=sun+mc
-sun=sun2+sun3
-vax=750+8600
-pep=manny+moe+jack
-
-# This second section defines the basic sets. Each host should have a line
-# that specifies which sets it is a member of. Extra sets should be separated
-# by white space. (The first section isn't strictly necessary, since all sets
-# could be defined in the second section, but then it wouldn't be so readable.)
-
-basvax 8600 src
-cdb0 sun3 sys
-cdb1 sun3 sys
-cdb2 sun3 sys
-chief sun3 src
-tis0 sun3
-manny sun3 sys
-moe sun3 sys
-jack sun3 sys
-disney sun3 sys
-huey sun3 nd
-dewey sun3 nd
-louie sun3 nd
-bizet sun2 src sys
-gif0 mc src
-mc0 mc
-dtv0 mc
diff --git a/contrib/perl5/eg/g/gsh b/contrib/perl5/eg/g/gsh
deleted file mode 100644
index 4bc5d87..0000000
--- a/contrib/perl5/eg/g/gsh
+++ /dev/null
@@ -1,117 +0,0 @@
-#! /usr/bin/perl
-
-# $RCSfile: gsh,v $$Revision: 4.1 $$Date: 92/08/07 17:20:20 $
-
-# Do rsh globally--see man page
-
-$SIG{'QUIT'} = 'quit'; # install signal handler for SIGQUIT
-
-sub getswitches {
- while ($ARGV[0] =~ /^-/) { # parse switches
- $ARGV[0] =~ /^-h/ && ($showhost++,$silent++,shift(@ARGV),next);
- $ARGV[0] =~ /^-s/ && ($silent++,shift(@ARGV),next);
- $ARGV[0] =~ /^-d/ && ($dodist++,shift(@ARGV),next);
- $ARGV[0] =~ /^-n/ && ($n=' -n',shift(@ARGV),next);
- $ARGV[0] =~ /^-l/ && ($l=' -l ' . $ARGV[1],shift(@ARGV),shift(@ARGV),
- next);
- last;
- }
-}
-
-do getswitches(); # get any switches before class
-$systype = shift; # get name representing set of hosts
-do getswitches(); # same switches allowed after class
-
-if ($dodist) { # distribute input over all rshes?
- `cat >/tmp/gsh$$`; # get input into a handy place
- $dist = " </tmp/gsh$$"; # each rsh takes input from there
-}
-
-$cmd = join(' ',@ARGV); # remaining args constitute the command
-$cmd =~ s/'/'"'"'/g; # quote any embedded single quotes
-
-$one_of_these = ":$systype:"; # prepare to expand "macros"
-$one_of_these =~ s/\+/:/g; # we hope to end up with list of
-$one_of_these =~ s/-/:-/g; # colon separated attributes
-
-@ARGV = ();
-push(@ARGV,'.grem') if -f '.grem';
-push(@ARGV,'.ghosts') if -f '.ghosts';
-push(@ARGV,'/etc/ghosts');
-
-$remainder = '';
-
-line: while (<>) { # for each line of ghosts
-
- s/[ \t]*\n//; # trim trailing whitespace
- if (!$_ || /^#/) { # skip blank line or comment
- next line;
- }
-
- if (/^(\w+)=(.+)/) { # a macro line?
- $name = $1; $repl = $2;
- $repl =~ s/\+/:/g;
- $repl =~ s/-/:-/g;
- $one_of_these =~ s/:$name:/:$repl:/; # do expansion in "wanted" list
- $repl =~ s/:/:-/g;
- $one_of_these =~ s/:-$name:/:-$repl:/;
- next line;
- }
-
- # we have a normal line
-
- @attr = split(' '); # a list of attributes to match against
- # which we put into an array
- $host = $attr[0]; # the first attribute is the host name
- if ($showhost) {
- $showhost = "$host:\t";
- }
-
- $wanted = 0;
- foreach $attr (@attr) { # iterate over attribute array
- $wanted++ if index($one_of_these,":$attr:") >= 0;
- $wanted = -9999 if index($one_of_these,":-$attr:") >= 0;
- }
- if ($wanted > 0) {
- print "rsh $host$l$n '$cmd'\n" unless $silent;
- $SIG{'INT'} = 'DEFAULT';
- if (open(PIPE,"rsh $host$l$n '$cmd'$dist 2>&1|")) { # start an rsh
- $SIG{'INT'} = 'cont';
- for ($iter=0; <PIPE>; $iter++) {
- unless ($iter) {
- $remainder .= "$host+"
- if /Connection timed out|Permission denied/;
- }
- print $showhost,$_;
- }
- close(PIPE);
- } else {
- print "(Can't execute rsh: $!)\n";
- $SIG{'INT'} = 'cont';
- }
- }
-}
-
-unlink "/tmp/gsh$$" if $dodist;
-
-if ($remainder) {
- chop($remainder);
- open(grem,">.grem") || (printf stderr "Can't make a .grem file: $!\n");
- print grem 'rem=', $remainder, "\n";
- close(grem);
- print 'rem=', $remainder, "\n";
-}
-
-# here are a couple of subroutines that serve as signal handlers
-
-sub cont {
- print "\rContinuing...\n";
- $remainder .= "$host+";
-}
-
-sub quit {
- $| = 1;
- print "\r";
- $SIG{'INT'} = '';
- kill 2, $$;
-}
diff --git a/contrib/perl5/eg/g/gsh.man b/contrib/perl5/eg/g/gsh.man
deleted file mode 100644
index 2958707..0000000
--- a/contrib/perl5/eg/g/gsh.man
+++ /dev/null
@@ -1,80 +0,0 @@
-.\" $RCSfile: gsh.man,v $$Revision: 4.1 $$Date: 92/08/07 17:20:22 $
-.TH GSH 8 "13 May 1988"
-.SH NAME
-gsh \- global shell
-.SH SYNOPSIS
-.B gsh
-[options]
-.I host
-[options]
-.I command
-.SH DESCRIPTION
-.I gsh
-works just like rsh(1C) except that you may specify a set of hosts to execute
-the command on.
-The host sets are defined in the file /etc/ghosts.
-(An individual host name can be used as a set containing one member.)
-You can give a command like
-
- gsh sun /etc/mungmotd
-
-to run /etc/mungmotd on all your Suns.
-.P
-You may specify the union of two or more sets by using + as follows:
-
- gsh 750+mc /etc/mungmotd
-
-which will run mungmotd on all 750's and Masscomps.
-.P
-Commonly used sets should be defined in /etc/ghosts.
-For example, you could add a line that says
-
- pep=manny+moe+jack
-
-Another way to do that would be to add the word "pep" after each of the host
-entries:
-
- manny sun3 pep
-.br
- moe sun3 pep
-.br
- jack sun3 pep
-
-Hosts and sets of host can also be excluded:
-
- foo=sun-sun2
-
-Any host so excluded will never be included, even if a subsequent set on the
-line includes it:
-
- foo=abc+def
- bar=xyz-abc+foo
-
-comes out to xyz+def.
-
-You can define private host sets by creating .ghosts in your current directory
-with entries just like /etc/ghosts.
-Also, if there is a file .grem, it defines "rem" to be the remaining hosts
-from the last gsh or gcp that didn't succeed everywhere.
-
-Options include all those defined by rsh, as well as
-
-.IP "\-d" 8
-Causes gsh to collect input till end of file, and then distribute that input
-to each invokation of rsh.
-.IP "\-h" 8
-Rather than print out the command followed by the output, merely prepends the
-host name to each line of output.
-.IP "\-s" 8
-Do work silently.
-.PP
-Interrupting with a SIGINT will cause the rsh to the current host to be skipped
-and execution resumed with the next host.
-To stop completely, send a SIGQUIT.
-.SH SEE ALSO
-rsh(1C)
-.SH BUGS
-All the bugs of rsh, since it calls rsh.
-
-Also, will not properly return data from the remote execution that contains
-null characters.
diff --git a/contrib/perl5/eg/muck b/contrib/perl5/eg/muck
deleted file mode 100644
index 873539b..0000000
--- a/contrib/perl5/eg/muck
+++ /dev/null
@@ -1,141 +0,0 @@
-#!../perl
-
-$M = '-M';
-$M = '-m' if -d '/usr/uts' && -f '/etc/master';
-
-do 'getopt.pl';
-do Getopt('f');
-
-if ($opt_f) {
- $makefile = $opt_f;
-}
-elsif (-f 'makefile') {
- $makefile = 'makefile';
-}
-elsif (-f 'Makefile') {
- $makefile = 'Makefile';
-}
-else {
- die "No makefile\n";
-}
-
-$MF = 'mf00';
-
-while(($key,$val) = each(ENV)) {
- $mac{$key} = $val;
-}
-
-do scan($makefile);
-
-$co = $action{'.c.o'};
-$co = ' ' unless $co;
-
-$missing = "Missing dependencies:\n";
-foreach $key (sort keys(o)) {
- if ($oc{$key}) {
- $src = $oc{$key};
- $action = $action{$key};
- }
- else {
- $action = '';
- }
- if (!$action) {
- if ($co && ($c = $key) =~ s/\.o$/.c/ && -f $c) {
- $src = $c;
- $action = $co;
- }
- else {
- print "No source found for $key $c\n";
- next;
- }
- }
- $I = '';
- $D = '';
- $I .= $1 while $action =~ s/(-I\S+\s*)//;
- $D .= $1 . ' ' while $action =~ s/(-D\w+)//;
- if ($opt_v) {
- $cmd = "Checking $key: cc $M $D $I $src";
- $cmd =~ s/\s\s+/ /g;
- print stderr $cmd,"\n";
- }
- open(CPP,"cc $M $D $I $src|") || die "Can't run C preprocessor: $!";
- while (<CPP>) {
- ($name,$dep) = split;
- $dep =~ s|^\./||;
- (print $missing,"$key: $dep\n"),($missing='')
- unless ($dep{"$key: $dep"} += 2) > 2;
- }
-}
-
-$extra = "\nExtraneous dependencies:\n";
-foreach $key (sort keys(dep)) {
- if ($key =~ /\.o: .*\.h$/ && $dep{$key} == 1) {
- print $extra,$key,"\n";
- $extra = '';
- }
-}
-
-sub scan {
- local($makefile) = @_;
- local($MF) = $MF;
- print stderr "Analyzing $makefile.\n" if $opt_v;
- $MF++;
- open($MF,$makefile) || die "Can't open $makefile: $!";
- while (<$MF>) {
- chop;
- chop($_ = $_ . <$MF>) while s/\\$//;
- next if /^#/;
- next if /^$/;
- s/\$\((\w+):([^=)]*)=([^)]*)\)/do subst("$1","$2","$3")/eg;
- s/\$\((\w+)\)/$mac{$1}/eg;
- $mac{$1} = $2, next if /^(\w+)\s*=\s*(.*)/;
- if (/^include\s+(.*)/) {
- do scan($1);
- print stderr "Continuing $makefile.\n" if $opt_v;
- next;
- }
- if (/^([^:]+):\s*(.*)/) {
- $left = $1;
- $right = $2;
- if ($right =~ /^([^;]*);(.*)/) {
- $right = $1;
- $action = $2;
- }
- else {
- $action = '';
- }
- while (<$MF>) {
- last unless /^\t/;
- chop;
- chop($_ = $_ . <$MF>) while s/\\$//;
- next if /^#/;
- last if /^$/;
- s/\$\((\w+):([^=)]*)=([^)]*)\)/do subst("$1","$2","$3")/eg;
- s/\$\((\w+)\)/$mac{$1}/eg;
- $action .= $_;
- }
- foreach $targ (split(' ',$left)) {
- $targ =~ s|^\./||;
- foreach $src (split(' ',$right)) {
- $src =~ s|^\./||;
- $deplist{$targ} .= ' ' . $src;
- $dep{"$targ: $src"} = 1;
- $o{$src} = 1 if $src =~ /\.o$/;
- $oc{$targ} = $src if $targ =~ /\.o$/ && $src =~ /\.[yc]$/;
- }
- $action{$targ} .= $action;
- }
- redo if $_;
- }
- }
- close($MF);
-}
-
-sub subst {
- local($foo,$from,$to) = @_;
- $foo = $mac{$foo};
- $from =~ s/\./[.]/;
- y/a/a/;
- $foo =~ s/\b$from\b/$to/g;
- $foo;
-}
diff --git a/contrib/perl5/eg/muck.man b/contrib/perl5/eg/muck.man
deleted file mode 100644
index 02ae428..0000000
--- a/contrib/perl5/eg/muck.man
+++ /dev/null
@@ -1,21 +0,0 @@
-.\" $RCSfile: muck.man,v $$Revision: 4.1 $$Date: 92/08/07 17:20:23 $
-.TH MUCK 1 "10 Jan 1989"
-.SH NAME
-muck \- make usage checker
-.SH SYNOPSIS
-.B muck
-[options]
-.SH DESCRIPTION
-.I muck
-looks at your current makefile and complains if you've left out any dependencies
-between .o and .h files.
-It also complains about extraneous dependencies.
-.PP
-You can use the -f FILENAME option to specify an alternate name for your
-makefile.
-The -v option is a little more verbose about what muck is mucking around
-with at the moment.
-.SH SEE ALSO
-make(1)
-.SH BUGS
-Only knows about .h, .c and .o files.
diff --git a/contrib/perl5/eg/myrup b/contrib/perl5/eg/myrup
deleted file mode 100644
index 2cbdf75..0000000
--- a/contrib/perl5/eg/myrup
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: myrup,v $$Revision: 4.1 $$Date: 92/08/07 17:20:26 $
-
-# This was a customization of ruptime requested by someone here who wanted
-# to be able to find the least loaded machine easily. It uses the
-# /etc/ghosts file that's defined for gsh and gcp to prune down the
-# number of entries to those hosts we have administrative control over.
-
-print "node load (u)\n------- --------\n";
-
-open(ghosts,'/etc/ghosts') || die "Can't open /etc/ghosts: $!";
-line: while (<ghosts>) {
- next line if /^#/;
- next line if /^$/;
- next line if /=/;
- ($host) = split;
- $wanted{$host} = 1;
-}
-
-open(ruptime,'ruptime|') || die "Can't run ruptime: $!";
-open(sort,'|sort +1n');
-
-while (<ruptime>) {
- ($host,$upness,$foo,$users,$foo,$foo,$load) = split(/[\s,]+/);
- if ($wanted{$host} && $upness eq 'up') {
- printf sort "%s\t%s (%d)\n", $host, $load, $users;
- }
-}
diff --git a/contrib/perl5/eg/nih b/contrib/perl5/eg/nih
deleted file mode 100644
index 4475c49..0000000
--- a/contrib/perl5/eg/nih
+++ /dev/null
@@ -1,11 +0,0 @@
-eval 'exec /usr/bin/perl -Spi.bak $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-# $RCSfile: nih,v $$Revision: 4.1 $$Date: 92/08/07 17:20:27 $
-
-# This script makes #! scripts directly executable on machines that don't
-# support #!. It edits in place any scripts mentioned on the command line.
-
-s[^#!(.*)]
- [#!$1\neval 'exec $1 -S \$0 \${1+"\$@"}'\n\tif \$running_under_some_shell;]
- if $. == 1;
diff --git a/contrib/perl5/eg/relink b/contrib/perl5/eg/relink
deleted file mode 100644
index 2c5793f..0000000
--- a/contrib/perl5/eg/relink
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/perl
-'di';
-'ig00';
-#
-# $RCSfile: relink,v $$Revision: 4.1 $$Date: 92/08/07 17:20:29 $
-#
-# $Log: relink,v $
-
-($op = shift) || die "Usage: relink perlexpr [filenames]\n";
-if (!@ARGV) {
- @ARGV = <STDIN>;
- chop(@ARGV);
-}
-for (@ARGV) {
- next unless -l; # symbolic link?
- $name = $_;
- $_ = readlink($_);
- $was = $_;
- eval $op;
- die $@ if $@;
- if ($was ne $_) {
- unlink($name);
- symlink($_, $name);
- }
-}
-##############################################################################
-
- # These next few lines are legal in both Perl and nroff.
-
-.00; # finish .ig
-
-'di \" finish diversion--previous line must be blank
-.nr nl 0-1 \" fake up transition to first page again
-.nr % 0 \" start at page 1
-';<<'.ex'; #__END__ ############# From here on it's a standard manual page ############
-.TH RELINK 1 "July 30, 1990"
-.AT 3
-.SH LINK
-relink \- relinks multiple symbolic links
-.SH SYNOPSIS
-.B relink perlexpr [symlinknames]
-.SH DESCRIPTION
-.I Relink
-relinks the symbolic links given according to the rule specified as the
-first argument.
-The argument is a Perl expression which is expected to modify the $_
-string in Perl for at least some of the names specified.
-For each symbolic link named on the command line, the Perl expression
-will be executed on the contents of the symbolic link with that name.
-If a given symbolic link's contents is not modified by the expression,
-it will not be changed.
-If a name given on the command line is not a symbolic link, it will be ignored.
-If no names are given on the command line, names will be read
-via standard input.
-.PP
-For example, to relink all symbolic links in the current directory
-pointing to somewhere in X11R3 so that they point to X11R4, you might say
-.nf
-
- relink 's/X11R3/X11R4/' *
-
-.fi
-To change all occurences of links in the system from /usr/spool to /var/spool,
-you'd say
-.nf
-
- find / -type l -print | relink 's#/usr/spool#/var/spool#'
-
-.fi
-.SH ENVIRONMENT
-No environment variables are used.
-.SH FILES
-.SH AUTHOR
-Larry Wall
-.SH "SEE ALSO"
-ln(1)
-.br
-perl(1)
-.SH DIAGNOSTICS
-If you give an invalid Perl expression you'll get a syntax error.
-.SH BUGS
-.ex
diff --git a/contrib/perl5/eg/rename b/contrib/perl5/eg/rename
deleted file mode 100755
index 10e97f7..0000000
--- a/contrib/perl5/eg/rename
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/perl
-'di';
-'ig00';
-#
-# $RCSfile: rename,v $$Revision: 4.1 $$Date: 92/08/07 17:20:30 $
-#
-# $Log: rename,v $
-
-($op = shift) || die "Usage: rename perlexpr [filenames]\n";
-if (!@ARGV) {
- @ARGV = <STDIN>;
- chop(@ARGV);
-}
-for (@ARGV) {
- $was = $_;
- eval $op;
- die $@ if $@;
- rename($was,$_) unless $was eq $_;
-}
-##############################################################################
-
- # These next few lines are legal in both Perl and nroff.
-
-.00; # finish .ig
-
-'di \" finish diversion--previous line must be blank
-.nr nl 0-1 \" fake up transition to first page again
-.nr % 0 \" start at page 1
-';<<'.ex'; #__END__ ############# From here on it's a standard manual page ############
-.TH RENAME 1 "July 30, 1990"
-.AT 3
-.SH NAME
-rename \- renames multiple files
-.SH SYNOPSIS
-.B rename perlexpr [files]
-.SH DESCRIPTION
-.I Rename
-renames the filenames supplied according to the rule specified as the
-first argument.
-The argument is a Perl expression which is expected to modify the $_
-string in Perl for at least some of the filenames specified.
-If a given filename is not modified by the expression, it will not be
-renamed.
-If no filenames are given on the command line, filenames will be read
-via standard input.
-.PP
-For example, to rename all files matching *.bak to strip the extension,
-you might say
-.nf
-
- rename 's/\e.bak$//' *.bak
-
-.fi
-To translate uppercase names to lower, you'd use
-.nf
-
- rename 'y/A-Z/a-z/' *
-
-.fi
-.SH ENVIRONMENT
-No environment variables are used.
-.SH FILES
-.SH AUTHOR
-Larry Wall
-.SH "SEE ALSO"
-mv(1)
-.br
-perl(1)
-.SH DIAGNOSTICS
-If you give an invalid Perl expression you'll get a syntax error.
-.SH BUGS
-.I Rename
-does not check for the existence of target filenames, so use with care.
-.ex
diff --git a/contrib/perl5/eg/rmfrom b/contrib/perl5/eg/rmfrom
deleted file mode 100644
index 7178e77..0000000
--- a/contrib/perl5/eg/rmfrom
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/perl -n
-
-# $RCSfile: rmfrom,v $$Revision: 4.1 $$Date: 92/08/07 17:20:31 $
-
-# A handy (but dangerous) script to put after a find ... -print.
-
-chop; unlink;
diff --git a/contrib/perl5/eg/scan/scan_df b/contrib/perl5/eg/scan/scan_df
deleted file mode 100644
index c221cdc..0000000
--- a/contrib/perl5/eg/scan/scan_df
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/perl -P
-
-# $RCSfile: scan_df,v $$Revision: 4.1 $$Date: 92/08/07 17:20:33 $
-
-# This report points out filesystems that are in danger of overflowing.
-
-(chdir '/usr/adm/private/memories') || die "Can't cd to memories: $!\n";
-`df >newdf`;
-open(Df, 'olddf');
-
-while (<Df>) {
- ($fs,$kbytes,$used,$avail,$capacity,$mounted_on) = split;
- next if $fs =~ /:/;
- next if $fs eq '';
- $oldused{$fs} = $used;
-}
-
-open(Df, 'newdf') || die "scan_df: can't open newdf";
-
-while (<Df>) {
- ($fs,$kbytes,$used,$avail,$capacity,$mounted_on) = split;
- next if $fs =~ /:/;
- next if $fs eq '';
- $oldused = $oldused{$fs};
- next if ($oldused == $used && $capacity < 99); # inactive filesystem
- if ($capacity >= 90) {
-#if defined(mc300) || defined(mc500) || defined(mc700)
- $_ = substr($_,0,13) . ' ' . substr($_,13,1000);
- $kbytes /= 2; # translate blocks to K
- $used /= 2;
- $oldused /= 2;
- $avail /= 2;
-#endif
- $diff = int($used - $oldused);
- if ($avail < $diff * 2) { # mark specially if in danger
- $mounted_on .= ' *';
- }
- next if $diff < 50 && $mounted_on eq '/';
- $fs =~ s|/dev/||;
- if ($diff >= 0) {
- $diff = '(+' . $diff . ')';
- }
- else {
- $diff = '(' . $diff . ')';
- }
- printf "%-8s%8d%8d %-8s%8d%7s %s\n",
- $fs,$kbytes,$used,$diff,$avail,$capacity,$mounted_on;
- }
-}
-
-rename('newdf','olddf');
diff --git a/contrib/perl5/eg/scan/scan_last b/contrib/perl5/eg/scan/scan_last
deleted file mode 100644
index 4d15ca0..0000000
--- a/contrib/perl5/eg/scan/scan_last
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/perl -P
-
-# $RCSfile: scan_last,v $$Revision: 4.1 $$Date: 92/08/07 17:20:35 $
-
-# This reports who was logged on at weird hours
-
-($dy, $mo, $lastdt) = split(/ +/,`date`);
-
-open(Last, 'exec last 2>&1 |') || die "scan_last: can't run last";
-
-while (<Last>) {
-#if defined(mc300) || defined(mc500) || defined(mc700)
- $_ = substr($_,0,19) . substr($_,23,100);
-#endif
- next if /^$/;
- (print),next if m|^/|;
- $login = substr($_,0,8);
- $tty = substr($_,10,7);
- $from = substr($_,19,15);
- $day = substr($_,36,3);
- $mo = substr($_,40,3);
- $dt = substr($_,44,2);
- $hr = substr($_,47,2);
- $min = substr($_,50,2);
- $dash = substr($_,53,1);
- $tohr = substr($_,55,2);
- $tomin = substr($_,58,2);
- $durhr = substr($_,63,2);
- $durmin = substr($_,66,2);
-
- next unless $hr;
- next if $login eq 'reboot ';
- next if $login eq 'shutdown';
-
- if ($dt != $lastdt) {
- if ($lastdt < $dt) {
- $seen += $dt - $lastdt;
- }
- else {
- $seen++;
- }
- $lastdt = $dt;
- }
-
- $inat = $hr + $min / 60;
- if ($tohr =~ /^[a-z]/) {
- $outat = 12; # something innocuous
- } else {
- $outat = $tohr + $tomin / 60;
- }
-
- last if $seen + ($inat < 8) > 1;
-
- if ($inat < 5 || $inat > 21 || $outat < 6 || $outat > 23) {
- print;
- }
-}
diff --git a/contrib/perl5/eg/scan/scan_messages b/contrib/perl5/eg/scan/scan_messages
deleted file mode 100644
index 6cf0997..0000000
--- a/contrib/perl5/eg/scan/scan_messages
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/usr/bin/perl -P
-
-# $RCSfile: scan_messages,v $$Revision: 4.1 $$Date: 92/08/07 17:20:37 $
-
-# This prints out extraordinary console messages. You'll need to customize.
-
-chdir('/usr/adm/private/memories') || die "Can't cd to memories: $!\n";
-
-$maxpos = `cat oldmsgs 2>&1`;
-
-#if defined(mc300) || defined(mc500) || defined(mc700)
-open(Msgs, '/dev/null') || die "scan_messages: can't open messages";
-#else
-open(Msgs, '/usr/adm/messages') || die "scan_messages: can't open messages";
-#endif
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat(Msgs);
-
-if ($size < $maxpos) { # Did somebody truncate messages file?
- $maxpos = 0;
-}
-
-seek(Msgs,$maxpos,0); # Start where we left off last time.
-
-while (<Msgs>) {
- s/\[(\d+)\]/#/ && s/$1/#/g;
-#ifdef vax
- $_ =~ s/[A-Z][a-z][a-z] +\w+ +[0-9:]+ +\w+ +//;
- next if /root@.*:/;
- next if /^vmunix: 4.3 BSD UNIX/;
- next if /^vmunix: Copyright/;
- next if /^vmunix: avail mem =/;
- next if /^vmunix: SBIA0 at /;
- next if /^vmunix: disk ra81 is/;
- next if /^vmunix: dmf. at uba/;
- next if /^vmunix: dmf.:.*asynch/;
- next if /^vmunix: ex. at uba/;
- next if /^vmunix: ex.: HW/;
- next if /^vmunix: il. at uba/;
- next if /^vmunix: il.: hardware/;
- next if /^vmunix: ra. at uba/;
- next if /^vmunix: ra.: media/;
- next if /^vmunix: real mem/;
- next if /^vmunix: syncing disks/;
- next if /^vmunix: tms/;
- next if /^vmunix: tmscp. at uba/;
- next if /^vmunix: uba. at /;
- next if /^vmunix: uda. at /;
- next if /^vmunix: uda.: unit . ONLIN/;
- next if /^vmunix: .*buffers containing/;
- next if /^syslogd: .*newslog/;
-#endif
- next if /unknown service/;
- next if /^\.\.\.$/;
- if (/^[A-Z][a-z][a-z] [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]/) {
- $pfx = '';
- next;
- }
- next if /^[ \t]*$/;
- next if /^[ 0-9]*done$/;
- if (/^A/) {
- next if /^Accounting [sr]/;
- }
- elsif (/^C/) {
- next if /^Called from/;
- next if /^Copyright/;
- }
- elsif (/^E/) {
- next if /^End traceback/;
- next if /^Ethernet address =/;
- }
- elsif (/^K/) {
- next if /^KERNEL MODE/;
- }
- elsif (/^R/) {
- next if /^Rebooting Unix/;
- }
- elsif (/^S/) {
- next if /^Sun UNIX 4\.2 Release/;
- }
- elsif (/^W/) {
- next if /^WARNING: clock gained/;
- }
- elsif (/^a/) {
- next if /^arg /;
- next if /^avail mem =/;
- }
- elsif (/^b/) {
- next if /^bwtwo[0-9] at /;
- }
- elsif (/^c/) {
- next if /^cgone[0-9] at /;
- next if /^cdp[0-9] at /;
- next if /^csr /;
- }
- elsif (/^d/) {
- next if /^dcpa: init/;
- next if /^done$/;
- next if /^dts/;
- next if /^dump i\/o error/;
- next if /^dumping to dev/;
- next if /^dump succeeded/;
- $pfx = '*' if /^dev = /;
- }
- elsif (/^e/) {
- next if /^end \*\*/;
- next if /^error in copy/;
- }
- elsif (/^f/) {
- next if /^found /;
- }
- elsif (/^i/) {
- next if /^ib[0-9] at /;
- next if /^ie[0-9] at /;
- }
- elsif (/^l/) {
- next if /^le[0-9] at /;
- }
- elsif (/^m/) {
- next if /^mem = /;
- next if /^mt[0-9] at /;
- next if /^mti[0-9] at /;
- $pfx = '*' if /^mode = /;
- }
- elsif (/^n/) {
- next if /^not found /;
- }
- elsif (/^p/) {
- next if /^page map /;
- next if /^pi[0-9] at /;
- $pfx = '*' if /^panic/;
- }
- elsif (/^q/) {
- next if /^qqq /;
- }
- elsif (/^r/) {
- next if /^read /;
- next if /^revarp: Requesting/;
- next if /^root [od]/;
- }
- elsif (/^s/) {
- next if /^sc[0-9] at /;
- next if /^sd[0-9] at /;
- next if /^sd[0-9]: </;
- next if /^si[0-9] at /;
- next if /^si_getstatus/;
- next if /^sk[0-9] at /;
- next if /^skioctl/;
- next if /^skopen/;
- next if /^skprobe/;
- next if /^skread/;
- next if /^skwrite/;
- next if /^sky[0-9] at /;
- next if /^st[0-9] at /;
- next if /^st0:.*load/;
- next if /^stat1 = /;
- next if /^syncing disks/;
- next if /^syslogd: going down on signal 15/;
- }
- elsif (/^t/) {
- next if /^timeout [0-9]/;
- next if /^tm[0-9] at /;
- next if /^tod[0-9] at /;
- next if /^tv [0-9]/;
- $pfx = '*' if /^trap address/;
- }
- elsif (/^u/) {
- next if /^unit nsk/;
- next if /^use one of/;
- $pfx = '' if /^using/;
- next if /^using [0-9]+ buffers/;
- }
- elsif (/^x/) {
- next if /^xy[0-9] at /;
- next if /^write [0-9]/;
- next if /^xy[0-9]: </;
- next if /^xyc[0-9] at /;
- }
- elsif (/^y/) {
- next if /^yyy [0-9]/;
- }
- elsif (/^z/) {
- next if /^zs[0-9] at /;
- }
- $pfx = '*' if /^[a-z]+:$/;
- s/pid [0-9]+: //;
- if (/last message repeated ([0-9]+) time/) {
- $seen{$last} += $1;
- next;
- }
- s/^/$pfx/ if $pfx;
- unless ($seen{$_}++) {
- push(@seen,$_);
- }
- $last = $_;
-}
-$max = tell(Msgs);
-
-open(tmp,'|sort >oldmsgs.tmp') || die "Can't create tmp file: $!\n";
-while ($_ = pop(@seen)) {
- print tmp $_;
-}
-close(tmp);
-open(tmp,'oldmsgs.tmp') || die "Can't reopen tmp file: $!\n";
-while (<tmp>) {
- if (/^nd:/) {
- next if $seen{$_} < 20;
- }
- if (/NFS/) {
- next if $seen{$_} < 20;
- }
- if (/no carrier/) {
- next if $seen{$_} < 20;
- }
- if (/silo overflow/) {
- next if $seen{$_} < 20;
- }
- print $seen{$_},":\t",$_;
-}
-
-print `rm -f oldmsgs.tmp 2>&1; echo $max > oldmsgs 2>&1`;
diff --git a/contrib/perl5/eg/scan/scan_passwd b/contrib/perl5/eg/scan/scan_passwd
deleted file mode 100644
index 50f6fc8..0000000
--- a/contrib/perl5/eg/scan/scan_passwd
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: scan_passwd,v $$Revision: 4.1 $$Date: 92/08/07 17:20:38 $
-
-# This scans passwd file for security holes.
-
-open(Pass,'/etc/passwd') || die "Can't open passwd file: $!\n";
-# $dotriv = (`date` =~ /^Mon/);
-$dotriv = 1;
-
-while (<Pass>) {
- ($login,$pass,$uid,$gid,$gcos,$home,$shell) = split(/:/);
- if ($shell eq '') {
- print "Short: $_";
- }
- next if /^[+]/;
- if ($pass eq '') {
- if (index(":sync:lpq:+:", ":$login:") < 0) {
- print "No pass: $login\t$gcos\n";
- }
- }
- elsif ($dotriv && crypt($login,substr($pass,0,2)) eq $pass) {
- print "Trivial: $login\t$gcos\n";
- }
- if ($uid == 0) {
- if ($login !~ /^.?root$/ && $pass ne '*') {
- print "Extra root: $_";
- }
- }
-}
diff --git a/contrib/perl5/eg/scan/scan_ps b/contrib/perl5/eg/scan/scan_ps
deleted file mode 100644
index 18b5cb2..0000000
--- a/contrib/perl5/eg/scan/scan_ps
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/perl -P
-
-# $RCSfile: scan_ps,v $$Revision: 4.1 $$Date: 92/08/07 17:20:40 $
-
-# This looks for looping processes.
-
-#if defined(mc300) || defined(mc500) || defined(mc700)
-open(Ps, '/bin/ps -el|') || die "scan_ps: can't run ps";
-
-while (<Ps>) {
- next if /rwhod/;
- print if index(' T', substr($_,62,1)) < 0;
-}
-#else
-open(Ps, '/bin/ps auxww|') || die "scan_ps: can't run ps";
-
-while (<Ps>) {
- next if /dataserver/;
- next if /nfsd/;
- next if /update/;
- next if /ypserv/;
- next if /rwhod/;
- next if /routed/;
- next if /pagedaemon/;
-#ifdef vax
- ($user,$pid,$cpu,$mem,$sz,$rss,$tt,$stat,$start,$time) = split;
-#else
- ($user,$pid,$cpu,$mem,$sz,$rss,$tt,$stat,$time) = split;
-#endif
- print if length($time) > 4;
-}
-#endif
diff --git a/contrib/perl5/eg/scan/scan_sudo b/contrib/perl5/eg/scan/scan_sudo
deleted file mode 100644
index 5b143e9..0000000
--- a/contrib/perl5/eg/scan/scan_sudo
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/perl -P
-
-# $RCSfile: scan_sudo,v $$Revision: 4.1 $$Date: 92/08/07 17:20:42 $
-
-# Analyze the sudo log.
-
-chdir('/usr/adm/private/memories') || die "Can't cd to memories: $!\n";
-
-if (open(Oldsudo,'oldsudo')) {
- $maxpos = <Oldsudo>;
- close Oldsudo;
-}
-else {
- $maxpos = 0;
- `echo 0 >oldsudo`;
-}
-
-unless (open(Sudo, '/usr/adm/sudo.log')) {
- print "Somebody removed sudo.log!!!\n" if $maxpos;
- exit 0;
-}
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat(Sudo);
-
-if ($size < $maxpos) {
- $maxpos = 0;
- print "Somebody reset sudo.log!!!\n";
-}
-
-seek(Sudo,$maxpos,0);
-
-while (<Sudo>) {
- s/^.* :[ \t]+//;
- s/ipcrm.*/ipcrm/;
- s/kill.*/kill/;
- unless ($seen{$_}++) {
- push(@seen,$_);
- }
- $last = $_;
-}
-$max = tell(Sudo);
-
-open(tmp,'|sort >oldsudo.tmp') || die "Can't create tmp file: $!\n";
-while ($_ = pop(@seen)) {
- print tmp $_;
-}
-close(tmp);
-open(tmp,'oldsudo.tmp') || die "Can't reopen tmp file: $!\n";
-while (<tmp>) {
- print $seen{$_},":\t",$_;
-}
-
-print `(rm -f oldsudo.tmp; echo $max > oldsudo) 2>&1`;
diff --git a/contrib/perl5/eg/scan/scan_suid b/contrib/perl5/eg/scan/scan_suid
deleted file mode 100644
index c10aa58..0000000
--- a/contrib/perl5/eg/scan/scan_suid
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/perl -P
-
-# $RCSfile: scan_suid,v $$Revision: 4.1 $$Date: 92/08/07 17:20:43 $
-
-# Look for new setuid root files.
-
-chdir '/usr/adm/private/memories' || die "Can't cd to memories: $!\n";
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('oldsuid');
-if ($nlink) {
- $lasttime = $mtime;
- $tmp = $ctime - $atime;
- if ($tmp <= 0 || $tmp >= 10) {
- print "WARNING: somebody has read oldsuid!\n";
- }
- $tmp = $ctime - $mtime;
- if ($tmp <= 0 || $tmp >= 10) {
- print "WARNING: somebody has modified oldsuid!!!\n";
- }
-} else {
- $lasttime = time - 60 * 60 * 24; # one day ago
-}
-$thistime = time;
-
-#if defined(mc300) || defined(mc500) || defined(mc700)
-open(Find, 'find / -perm -04000 -print |') ||
- die "scan_find: can't run find";
-#else
-open(Find, 'find / \( -fstype nfs -prune \) -o -perm -04000 -ls |') ||
- die "scan_find: can't run find";
-#endif
-
-open(suid, '>newsuid.tmp');
-
-while (<Find>) {
-
-#if defined(mc300) || defined(mc500) || defined(mc700)
- $x = `/bin/ls -il $_`;
- $_ = $x;
- s/^ *//;
- ($inode,$perm,$links,$owner,$group,$size,$month,$day,$time,$name)
- = split;
-#else
- s/^ *//;
- ($inode,$blocks,$perm,$links,$owner,$group,$size,$month,$day,$time,$name)
- = split;
-#endif
-
- if ($perm =~ /[sS]/ && $owner eq 'root') {
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($name);
- $foo = sprintf("%10s%3s %-8s %-8s%9s %3s %2s %s %s\n",
- $perm,$links,$owner,$group,$size,$month,$day,$name,$inode);
- print suid $foo;
- if ($ctime > $lasttime) {
- if ($ctime > $thistime) {
- print "Future file: $foo";
- }
- else {
- $ct .= $foo;
- }
- }
- }
-}
-close(suid);
-
-print `sort +7 -8 newsuid.tmp >newsuid 2>&1`;
-$foo = `/bin/diff oldsuid newsuid 2>&1`;
-print "Differences in suid info:\n",$foo if $foo;
-print `mv oldsuid oldoldsuid 2>&1; mv newsuid oldsuid 2>&1`;
-print `touch oldsuid 2>&1;sleep 2 2>&1;chmod o+w oldsuid 2>&1`;
-print `rm -f newsuid.tmp 2>&1`;
-
-@ct = split(/\n/,$ct);
-$ct = '';
-$* = 1;
-while ($#ct >= 0) {
- $tmp = shift(@ct);
- unless ($foo =~ "^>.*$tmp\n") { $ct .= "$tmp\n"; }
-}
-
-print "Inode changed since last time:\n",$ct if $ct;
-
diff --git a/contrib/perl5/eg/scan/scanner b/contrib/perl5/eg/scan/scanner
deleted file mode 100644
index e73cdc8..0000000
--- a/contrib/perl5/eg/scan/scanner
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: scanner,v $$Revision: 4.1 $$Date: 92/08/07 17:20:44 $
-
-# This runs all the scan_* routines on all the machines in /etc/ghosts.
-# We run this every morning at about 6 am:
-
-# !/bin/sh
-# cd /usr/adm/private
-# decrypt scanner | perl >scan.out 2>&1
-# mail admin <scan.out
-
-# Note that the scan_* files should be encrypted with the key "-inquire", and
-# scanner should be encrypted somehow so that people can't find that key.
-# I leave it up to you to figure out how to unencrypt it before executing.
-
-$ENV{'PATH'} = '/bin:/usr/bin:/usr/local/bin:/usr/ucb:.';
-
-$| = 1; # command buffering on stdout
-
-print "Subject: bizarre happenings\n\n";
-
-(chdir '/usr/adm/private') || die "Can't cd to /usr/adm/private: $!\n";
-
-if ($#ARGV >= 0) {
- @scanlist = @ARGV;
-} else {
- @scanlist = split(/[ \t\n]+/,`echo scan_*`);
-}
-
-scan: while ($scan = shift(@scanlist)) {
- print "\n********** $scan **********\n";
- $showhost++;
-
- $systype = 'all';
-
- open(ghosts, '/etc/ghosts') || die 'No /etc/ghosts file';
-
- $one_of_these = ":$systype:";
- if ($systype =~ s/\+/[+]/g) {
- $one_of_these =~ s/\+/:/g;
- }
-
- line: while (<ghosts>) {
- s/[ \t]*\n//;
- if (!$_ || /^#/) {
- next line;
- }
- if (/^([a-zA-Z_0-9]+)=(.+)/) {
- $name = $1; $repl = $2;
- $repl =~ s/\+/:/g;
- $one_of_these =~ s/:$name:/:$repl:/;
- next line;
- }
- @gh = split;
- $host = $gh[0];
- if ($showhost) { $showhost = "$host:\t"; }
- class: while ($class = pop(gh)) {
- if (index($one_of_these,":$class:") >=0) {
- $iter = 0;
- `exec crypt -inquire <$scan >.x 2>/dev/null`;
- unless (open(scan,'.x')) {
- print "Can't run $scan: $!\n";
- next scan;
- }
- $cmd = <scan>;
- unless ($cmd =~ s/#!(.*)\n/$1/) {
- $cmd = '/usr/bin/perl';
- }
- close(scan);
- if (open(PIPE,"exec rsh $host '$cmd' <.x|")) {
- sleep(5);
- unlink '.x';
- while (<PIPE>) {
- last if $iter++ > 1000; # must be looping
- next if /^[0-9.]+u [0-9.]+s/;
- print $showhost,$_;
- }
- close(PIPE);
- } else {
- print "(Can't execute rsh: $!)\n";
- }
- last class;
- }
- }
- }
-}
diff --git a/contrib/perl5/eg/server b/contrib/perl5/eg/server
deleted file mode 100755
index 49a140a..0000000
--- a/contrib/perl5/eg/server
+++ /dev/null
@@ -1,27 +0,0 @@
-#!./perl
-
-$pat = 'S n C4 x8';
-$inet = 2;
-$echo = 7;
-$smtp = 25;
-$nntp = 119;
-
-$this = pack($pat,$inet,2345, 0,0,0,0);
-select(NS); $| = 1; select(stdout);
-
-if (socket(S,2,1,6)) { print "socket ok\n"; } else { die $!; }
-if (bind(S,$this)) { print "bind ok\n"; } else { die $!; }
-if (listen(S,5)) { print "listen ok\n"; } else { die $!; }
-for (;;) {
- print "Listening again\n";
- if ($addr = accept(NS,S)) { print "accept ok\n"; } else { die $!; }
-
- @ary = unpack($pat,$addr);
- $, = ' ';
- print @ary; print "\n";
-
- while (<NS>) {
- print;
- print NS;
- }
-}
diff --git a/contrib/perl5/eg/shmkill b/contrib/perl5/eg/shmkill
deleted file mode 100644
index b91ee6f..0000000
--- a/contrib/perl5/eg/shmkill
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: shmkill,v $$Revision: 4.1 $$Date: 92/08/07 17:20:45 $
-
-# A script to call from crontab periodically when people are leaving shared
-# memory sitting around unattached.
-
-open(ipcs,'ipcs -m -o|') || die "Can't run ipcs: $!";
-
-while (<ipcs>) {
- $tmp = index($_,'NATTCH');
- $pos = $tmp if $tmp >= 0;
- if (/^m/) {
- ($m,$id,$key,$mode,$owner,$group,$attach) = split;
- if ($attach != substr($_,$pos,6)) {
- die "Different ipcs format--can't parse!\n";
- }
- if ($attach == 0) {
- push(@goners,'-m',$id);
- }
- }
-}
-
-exec 'ipcrm', @goners if $#goners >= 0;
diff --git a/contrib/perl5/eg/sysvipc/README b/contrib/perl5/eg/sysvipc/README
deleted file mode 100644
index 54094f1..0000000
--- a/contrib/perl5/eg/sysvipc/README
+++ /dev/null
@@ -1,9 +0,0 @@
-FYEnjoyment, here are the test scripts I used while implementing SysV
-IPC in Perl. Each of them must be run with the parameter "s" for
-"send" or "r" for "receive"; in each case, the receiver is the server
-and the sender is the client.
-
---
-Chip Salzenberg at ComDev/TCT <chip@tct.uucp>, <uunet!ateng!tct!chip>
-
-
diff --git a/contrib/perl5/eg/sysvipc/ipcmsg b/contrib/perl5/eg/sysvipc/ipcmsg
deleted file mode 100644
index 646d8b6..0000000
--- a/contrib/perl5/eg/sysvipc/ipcmsg
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/perl
-eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-require 'sys/ipc.ph';
-require 'sys/msg.ph';
-
-$| = 1;
-
-$mode = shift;
-die "usage: ipcmsg {r|s}\n" unless $mode =~ /^[rs]$/;
-$send = ($mode eq "s");
-
-$id = msgget(0x1234, ($send ? 0 : &IPC_CREAT) | 0644);
-die "Can't get message queue: $!\n" unless defined($id);
-print "message queue id: $id\n";
-
-if ($send) {
- while (<STDIN>) {
- chop;
- unless (msgsnd($id, pack("LA*", $., $_), 0)) {
- die "Can't send message: $!\n";
- }
- }
-}
-else {
- $SIG{'INT'} = $SIG{'QUIT'} = "leave";
- for (;;) {
- unless (msgrcv($id, $_, 512, 0, 0)) {
- die "Can't receive message: $!\n";
- }
- ($type, $message) = unpack("La*", $_);
- printf "[%d] %s\n", $type, $message;
- }
-}
-
-&leave;
-
-sub leave {
- if (!$send) {
- $x = msgctl($id, &IPC_RMID, 0);
- if (!defined($x) || $x < 0) {
- die "Can't remove message queue: $!\n";
- }
- }
- exit;
-}
diff --git a/contrib/perl5/eg/sysvipc/ipcsem b/contrib/perl5/eg/sysvipc/ipcsem
deleted file mode 100644
index e0dc551..0000000
--- a/contrib/perl5/eg/sysvipc/ipcsem
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-require 'sys/ipc.ph';
-require 'sys/msg.ph';
-
-$| = 1;
-
-$mode = shift;
-die "usage: ipcmsg {r|s}\n" unless $mode =~ /^[rs]$/;
-$signal = ($mode eq "s");
-
-$id = semget(0x1234, 1, ($signal ? 0 : &IPC_CREAT) | 0644);
-die "Can't get semaphore: $!\n" unless defined($id);
-print "semaphore id: $id\n";
-
-if ($signal) {
- while (<STDIN>) {
- print "Signalling\n";
- unless (semop($id, pack("sss", 0, 1, 0))) {
- die "Can't signal semaphore: $!\n";
- }
- }
-}
-else {
- $SIG{'INT'} = $SIG{'QUIT'} = "leave";
- for (;;) {
- unless (semop($id, pack("sss", 0, -1, 0))) {
- die "Can't wait for semaphore: $!\n";
- }
- print "Unblocked\n";
- }
-}
-
-&leave;
-
-sub leave {
- if (!$signal) {
- $x = semctl($id, 0, &IPC_RMID, 0);
- if (!defined($x) || $x < 0) {
- die "Can't remove semaphore: $!\n";
- }
- }
- exit;
-}
diff --git a/contrib/perl5/eg/sysvipc/ipcshm b/contrib/perl5/eg/sysvipc/ipcshm
deleted file mode 100644
index ecc1ba4..0000000
--- a/contrib/perl5/eg/sysvipc/ipcshm
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/perl
-eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-require 'sys/ipc.ph';
-require 'sys/shm.ph';
-
-$| = 1;
-
-$mode = shift;
-die "usage: ipcshm {r|s}\n" unless $mode =~ /^[rs]$/;
-$send = ($mode eq "s");
-
-$SIZE = 32;
-$id = shmget(0x1234, $SIZE, ($send ? 0 : &IPC_CREAT) | 0644);
-die "Can't get shared memory: $!\n" unless defined($id);
-print "shared memory id: $id\n";
-
-if ($send) {
- while (<STDIN>) {
- chop;
- unless (shmwrite($id, pack("La*", length($_), $_), 0, $SIZE)) {
- die "Can't write to shared memory: $!\n";
- }
- }
-}
-else {
- $SIG{'INT'} = $SIG{'QUIT'} = "leave";
- for (;;) {
- $_ = <STDIN>;
- unless (shmread($id, $_, 0, $SIZE)) {
- die "Can't read shared memory: $!\n";
- }
- $len = unpack("L", $_);
- $message = substr($_, length(pack("L",0)), $len);
- printf "[%d] %s\n", $len, $message;
- }
-}
-
-&leave;
-
-sub leave {
- if (!$send) {
- $x = shmctl($id, &IPC_RMID, 0);
- if (!defined($x) || $x < 0) {
- die "Can't remove shared memory: $!\n";
- }
- }
- exit;
-}
diff --git a/contrib/perl5/eg/travesty b/contrib/perl5/eg/travesty
deleted file mode 100644
index 7e6f983..0000000
--- a/contrib/perl5/eg/travesty
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-
-while (<>) {
- next if /^\./;
- next if /^From / .. /^$/;
- next if /^Path: / .. /^$/;
- s/^\W+//;
- push(@ary,split(' '));
- while ($#ary > 1) {
- $a = $p;
- $p = $n;
- $w = shift(@ary);
- $n = $num{$w};
- if ($n eq '') {
- push(@word,$w);
- $n = pack('S',$#word);
- $num{$w} = $n;
- }
- $lookup{$a . $p} .= $n;
- }
-}
-
-for (;;) {
- $n = $lookup{$a . $p};
- ($foo,$n) = each(lookup) if $n eq '';
- $n = substr($n,int(rand(length($n))) & 0177776,2);
- $a = $p;
- $p = $n;
- ($w) = unpack('S',$n);
- $w = $word[$w];
- $col += length($w) + 1;
- if ($col >= 65) {
- $col = 0;
- print "\n";
- }
- else {
- print ' ';
- }
- print $w;
- if ($w =~ /\.$/) {
- if (rand() < .1) {
- print "\n";
- $col = 80;
- }
- }
-}
diff --git a/contrib/perl5/eg/unuc b/contrib/perl5/eg/unuc
deleted file mode 100755
index ae5c652..0000000
--- a/contrib/perl5/eg/unuc
+++ /dev/null
@@ -1,186 +0,0 @@
-#!/usr/bin/perl
-
-print STDERR "Loading proper nouns...\n";
-open(DICT,"/usr/dict/words") || die "Can't find /usr/dict/words: $!\n";
-while (<DICT>) {
- if (/^[A-Z]/) {
- chop;
- ($lower = $_) =~ y/A-Z/a-z/;
- $proper{$lower} = $_;
- }
-}
-close DICT;
-print STDERR "Loading exceptions...\n";
-
-$prog = <<'EOT';
-while (<>) {
- next if /[a-z]/;
- y/A-Z/a-z/;
- s/(\w+)/$proper{$1} ? $proper{$1} : $1/eg;
- s/^(\s*)([a-z])/$1 . (($tmp = $2) =~ y:a-z:A-Z:,$tmp)/e;
- s/([-.?!]["']?(\n\s*| \s*)["']?)([a-z])/$1 . (($tmp = $3) =~ y:a-z:A-Z:,$tmp)/eg;
- s/\b([b-df-hj-np-tv-xz]+)\b/(($tmp = $1) =~ y:a-z:A-Z:,$tmp)/eg;
- s/([a-z])'([SDT])\b/$1 . "'" . (($tmp = $2) =~ y:A-Z:a-z:,$tmp)/eg;
-EOT
-while (<DATA>) {
- chop;
- next if /^$/;
- next if /^#/;
- if (! /;$/) {
- $foo = $_;
- $foo =~ y/A-Z/a-z/;
- print STDERR "Dup $_\n" if $proper{$foo};
- $foo =~ s/([^\w ])/\\$1/g;
- $foo =~ s/ /(\\s+)/g;
- $foo = "\\b" . $foo if $foo =~ /^\w/; # XXX till patch 9
- $foo .= "\\b" if $foo =~ /\w$/;
- $i = 0;
- ($bar = $_) =~ s/ /'$' . ++$i/eg;
- $_ = "s/$foo/$bar/gi;";
- }
- $prog .= ' ' . $_ . "\n";
-}
-$prog .= "}\ncontinue {\n print;\n}\n";
-
-$/ = '';
-#print $prog;
-eval $prog; die $@ if $@;
-__END__
-A.M.
-Air Force
-Air Force Base
-Air Force Station
-American
-Apr.
-Ariane
-Aug.
-August
-Bureau of Labor Statistics
-CIT
-Caltech
-Cape Canaveral
-Challenger
-China
-Corporation
-Crippen
-Daily News in Brief
-Daniel Quayle
-Dec.
-Discovery
-Edwards
-Endeavour
-Feb.
-Ford Aerospace
-Fri.
-General Dynamics
-George Bush
-Headline News
-HOTOL
-I
-II
-III
-IV
-IX
-Institute of Technology
-JPL
-Jan.
-Jul.
-Jun.
-Kennedy Space Center
-LDEF
-Long Duration Exposure Facility
-Long March
-Mar.
-March
-Martin
-Martin Marietta
-Mercury
-Mon.
-in May
-s/\bmay (\d)/May $1/g;
-s/\boffice of (\w)/'Office of ' . (($tmp = $1) =~ y:a-z:A-Z:,$tmp)/eg;
-National Science Foundation
-NASA Select
-New Mexico
-Nov.
-OMB
-Oct.
-Office of Management and Budget
-President
-President Bush
-Richard Truly
-Rocketdyne
-Russian
-Russians
-Sat.
-Sep.
-Soviet
-Soviet Union
-Soviets
-Space Shuttle
-Sun.
-Thu.
-Tue.
-U.S.
-Union of Soviet Socialist Republics
-United States
-VI
-VII
-VIII
-Vice President
-Vice President Quayle
-Wed.
-White Sands
-Kaman Aerospace
-Aerospace Daily
-Aviation Week
-Space Technology
-Washington Post
-Los Angeles Times
-New York Times
-Aerospace Industries Association
-president of
-Johnson Space Center
-Space Services
-Inc.
-Co.
-Hughes Aircraft
-Company
-Orbital Sciences
-Swedish Space
-Arnauld
-Nicogosian
-Magellan
-Galileo
-Mir
-Jet Propulsion Laboratory
-University
-Department of Defense
-Orbital Science
-OMS
-United Press International
-United Press
-UPI
-Associated Press
-AP
-Cable News Network
-Cape York
-Zenit
-SYNCOM
-Eastern
-Western
-Test Range
-Jcsat
-Japanese Satellite Communications
-Defence Ministry
-Defense Ministry
-Skynet
-Fixed Service Structure
-Launch Processing System
-Asiasat
-Launch Control Center
-Earth
-CNES
-Glavkosmos
-Pacific
-Atlantic
diff --git a/contrib/perl5/eg/uudecode b/contrib/perl5/eg/uudecode
deleted file mode 100644
index 3b3cb60..0000000
--- a/contrib/perl5/eg/uudecode
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/perl
-while (<>) {
- next unless ($mode,$file) = /^begin\s*(\d*)\s*(\S*)/;
- open(OUT,"> $file") || die "Can't create $file: $!\n";
- while (<>) {
- last if /^end/;
- next if /[a-z]/;
- next unless int((((ord() - 32) & 077) + 2) / 3) ==
- int(length() / 4);
- print OUT unpack("u", $_);
- }
- chmod oct($mode), $file;
- eof() && die "Missing end: $file may be truncated.\n";
-}
-
diff --git a/contrib/perl5/eg/van/empty b/contrib/perl5/eg/van/empty
deleted file mode 100644
index d699319..0000000
--- a/contrib/perl5/eg/van/empty
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: empty,v $$Revision: 4.1 $$Date: 92/08/07 17:20:50 $
-
-# This script empties a trashcan.
-
-$recursive = shift if $ARGV[0] eq '-r';
-
-@ARGV = '.' if $#ARGV < 0;
-
-chop($pwd = `pwd`);
-
-dir: foreach $dir (@ARGV) {
- unless (chdir $dir) {
- print stderr "Can't find directory $dir: $!\n";
- next dir;
- }
- if ($recursive) {
- do cmd('find . -name .deleted -exec /bin/rm -rf {} ;');
- }
- else {
- if (-d '.deleted') {
- do cmd('rm -rf .deleted');
- }
- else {
- if ($dir eq '.' && $pwd =~ m|/\.deleted$|) {
- chdir '..';
- do cmd('rm -rf .deleted');
- }
- else {
- print stderr "No trashcan found in directory $dir\n";
- }
- }
- }
-}
-continue {
- chdir $pwd;
-}
-
-# force direct execution with no shell
-
-sub cmd {
- system split(' ',join(' ',@_));
-}
-
diff --git a/contrib/perl5/eg/van/unvanish b/contrib/perl5/eg/van/unvanish
deleted file mode 100644
index acb1603..0000000
--- a/contrib/perl5/eg/van/unvanish
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: unvanish,v $$Revision: 4.1 $$Date: 92/08/07 17:20:52 $
-
-sub it {
- if ($olddir ne '.') {
- chop($pwd = `pwd`) if $pwd eq '';
- (chdir $olddir) || die "Directory $olddir is not accesible";
- }
- unless ($olddir eq '.deleted') {
- if (-d '.deleted') {
- chdir '.deleted' || die "Directory .deleted is not accesible";
- }
- else {
- chop($pwd = `pwd`) if $pwd eq '';
- die "Directory .deleted does not exist" unless $pwd =~ /\.deleted$/;
- }
- }
- print `mv $startfiles$filelist..$force`;
- if ($olddir ne '.') {
- (chdir $pwd) || die "Can't get back to original directory $pwd: $!\n";
- }
-}
-
-if ($#ARGV < 0) {
- open(lastcmd,'.deleted/.lastcmd') ||
- open(lastcmd,'.lastcmd') ||
- die "No previous vanish in this dir";
- $ARGV = <lastcmd>;
- close(lastcmd);
- @ARGV = split(/[\n ]+/,$ARGV);
-}
-
-while ($ARGV[0] =~ /^-/) {
- $_ = shift;
- /^-f/ && ($force = ' >/dev/null 2>&1');
- /^-i/ && ($interactive = 1);
- if (/^-+$/) {
- $startfiles = '- ';
- last;
- }
-}
-
-while ($file = shift) {
- if ($file =~ s|^(.*)/||) {
- $dir = $1;
- }
- else {
- $dir = '.';
- }
-
- if ($dir ne $olddir) {
- do it() if $olddir;
- $olddir = $dir;
- }
-
- if ($interactive) {
- print "unvanish: restore $dir/$file? ";
- next unless <stdin> =~ /^y/i;
- }
-
- $filelist .= $file; $filelist .= ' ';
-
-}
-
-do it() if $olddir;
diff --git a/contrib/perl5/eg/van/vanexp b/contrib/perl5/eg/van/vanexp
deleted file mode 100644
index 415b73b..0000000
--- a/contrib/perl5/eg/van/vanexp
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: vanexp,v $$Revision: 4.1 $$Date: 92/08/07 17:20:53 $
-
-# This is for running from a find at night to expire old .deleteds
-
-$can = $ARGV[0];
-
-exit 1 unless $can =~ /.deleted$/;
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($can);
-
-exit 0 unless $size;
-
-if (time - $mtime > 2 * 24 * 60 * 60) {
- `/bin/rm -rf $can`;
-}
-else {
- `find $can -ctime +2 -exec rm -f {} \;`;
-}
diff --git a/contrib/perl5/eg/van/vanish b/contrib/perl5/eg/van/vanish
deleted file mode 100644
index 09b9679..0000000
--- a/contrib/perl5/eg/van/vanish
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/perl
-
-# $RCSfile: vanish,v $$Revision: 4.1 $$Date: 92/08/07 17:20:54 $
-
-sub it {
- if ($olddir ne '.') {
- chop($pwd = `pwd`) if $pwd eq '';
- (chdir $olddir) || die "Directory $olddir is not accesible";
- }
- if (!-d .deleted) {
- print `mkdir .deleted; chmod 775 .deleted`;
- die "You can't remove files from $olddir" if $?;
- }
- $filelist =~ s/ $//;
- $filelist =~ s/#/\\#/g;
- if ($filelist !~ /^[ \t]*$/) {
- open(lastcmd,'>.deleted/.lastcmd');
- print lastcmd $filelist,"\n";
- close(lastcmd);
- print `/bin/mv $startfiles$filelist .deleted$force`;
- }
- if ($olddir ne '.') {
- (chdir $pwd) || die "Can't get back to original directory $pwd: $!\n";
- }
-}
-
-while ($ARGV[0] =~ /^-/) {
- $_ = shift;
- /^-f/ && ($force = ' >/dev/null 2>&1');
- /^-i/ && ($interactive = 1);
- if (/^-+$/) {
- $startfiles = '- ';
- last;
- }
-}
-
-chop($pwd = `pwd`);
-
-while ($file = shift) {
- if ($file =~ s|^(.*)/||) {
- $dir = $1;
- }
- else {
- $dir = '.';
- }
-
- if ($interactive) {
- print "vanish: remove $dir/$file? ";
- next unless <stdin> =~ /^y/i;
- }
-
- if ($file eq '.deleted') {
- print stderr "To delete .deleted (the trashcan) use the 'empty' command.\n";
- next;
- }
-
- if ($dir ne $olddir) {
- do it() if $olddir;
- $olddir = $dir;
- }
-
- $filelist .= $file; $filelist .= ' ';
-}
-
-do it() if $olddir;
diff --git a/contrib/perl5/eg/who b/contrib/perl5/eg/who
deleted file mode 100644
index ac15246..0000000
--- a/contrib/perl5/eg/who
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/perl
-# This assumes your /etc/utmp file looks like ours
-open(UTMP,'/etc/utmp');
-@mo = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
-while (read(UTMP,$utmp,36)) {
- ($line,$name,$host,$time) = unpack('A8A8A16l',$utmp);
- if ($name) {
- $host = "($host)" if ord($host);
- ($sec,$min,$hour,$mday,$mon) = localtime($time);
- printf "%-9s%-8s%s %2d %02d:%02d %s\n",
- $name,$line,$mo[$mon],$mday,$hour,$min,$host;
- }
-}
diff --git a/contrib/perl5/eg/wrapsuid b/contrib/perl5/eg/wrapsuid
deleted file mode 100755
index 3b1fc6e..0000000
--- a/contrib/perl5/eg/wrapsuid
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/perl
-'di';
-'ig00';
-#
-# $Header: wrapsuid,v 1.1 90/08/11 13:51:29 lwall Locked $
-#
-# $Log: wrapsuid,v $
-# Revision 1.1 90/08/11 13:51:29 lwall
-# Initial revision
-#
-
-$xdev = '-xdev' unless -d '/dev/iop';
-
-if ($#ARGV >= 0) {
- @list = @ARGV;
- foreach $name (@ARGV) {
- die "You must use absolute pathnames.\n" unless $name =~ m|^/|;
- }
-}
-else {
- open(DF,"/etc/mount|") || die "Can't run /etc/mount";
-
- while (<DF>) {
- chop;
- $_ .= <DF> if length($_) < 50;
- @ary = split;
- push(@list,$ary[2]) if ($ary[0] =~ m|^/dev|);
- }
-}
-$fslist = join(' ',@list);
-
-die "Can't find local filesystems" unless $fslist;
-
-open(FIND,
- "find $fslist $xdev -type f \\( -perm -04000 -o -perm -02000 \\) -print|");
-
-while (<FIND>) {
- chop;
- next unless -T;
- print "Fixing ", $_, "\n";
- ($dir,$file) = m|(.*)/(.*)|;
- chdir $dir || die "Can't chdir to $dir";
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($file);
- die "Can't stat $_" unless $ino;
- chmod $mode & 01777, $file; # wipe out set[ug]id bits
- rename($file,".$file");
- open(C,">.tmp$$.c") || die "Can't write C program for $_";
- $real = "$dir/.$file";
- print C '
-main(argc,argv)
-int argc;
-char **argv;
-{
- execv("' . $real . '",argv);
-}
-';
- close C;
- system '/bin/cc', ".tmp$$.c", '-o', $file;
- die "Can't compile new $_" if $?;
- chmod $mode, $file;
- chown $uid, $gid, $file;
- unlink ".tmp$$.c";
- chdir '/';
-}
-##############################################################################
-
- # These next few lines are legal in both Perl and nroff.
-
-.00; # finish .ig
-
-'di \" finish diversion--previous line must be blank
-.nr nl 0-1 \" fake up transition to first page again
-.nr % 0 \" start at page 1
-'; __END__ ############# From here on it's a standard manual page ############
-.TH SUIDSCRIPT 1 "July 30, 1990"
-.AT 3
-.SH NAME
-wrapsuid \- puts a compiled C wrapper around a setuid or setgid script
-.SH SYNOPSIS
-.B wrapsuid [dirlist]
-.SH DESCRIPTION
-.I Wrapsuid
-creates a small C program to execute a script with setuid or setgid privileges
-without having to set the setuid or setgid bit on the script, which is
-a security problem on many machines.
-Specify the list of directories or files that you wish to process.
-The names must be absolute pathnames.
-With no arguments it will attempt to process all the local directories
-for this machine.
-The scripts to be processed must have the setuid or setgid bit set.
-The wrapsuid program will delete the bits and set them on the wrapper.
-.PP
-Non-superusers may only process their own files.
-.SH ENVIRONMENT
-No environment variables are used.
-.SH FILES
-None.
-.SH AUTHOR
-Larry Wall
-.SH "SEE ALSO"
-.SH DIAGNOSTICS
-.SH BUGS
-.ex
diff --git a/contrib/perl5/embed.h b/contrib/perl5/embed.h
deleted file mode 100644
index 78fa089..0000000
--- a/contrib/perl5/embed.h
+++ /dev/null
@@ -1,5912 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-/* (Doing namespace management portably in C is really gross.) */
-
-/* NO_EMBED is no longer supported. i.e. EMBED is always active. */
-
-/* provide binary compatible (but inconsistent) names */
-#if defined(PERL_BINCOMPAT_5005)
-# define Perl_call_atexit perl_atexit
-# define Perl_eval_sv perl_eval_sv
-# define Perl_eval_pv perl_eval_pv
-# define Perl_call_argv perl_call_argv
-# define Perl_call_method perl_call_method
-# define Perl_call_pv perl_call_pv
-# define Perl_call_sv perl_call_sv
-# define Perl_get_av perl_get_av
-# define Perl_get_cv perl_get_cv
-# define Perl_get_hv perl_get_hv
-# define Perl_get_sv perl_get_sv
-# define Perl_init_i18nl10n perl_init_i18nl10n
-# define Perl_init_i18nl14n perl_init_i18nl14n
-# define Perl_new_collate perl_new_collate
-# define Perl_new_ctype perl_new_ctype
-# define Perl_new_numeric perl_new_numeric
-# define Perl_require_pv perl_require_pv
-# define Perl_safesyscalloc Perl_safecalloc
-# define Perl_safesysfree Perl_safefree
-# define Perl_safesysmalloc Perl_safemalloc
-# define Perl_safesysrealloc Perl_saferealloc
-# define Perl_set_numeric_local perl_set_numeric_local
-# define Perl_set_numeric_standard perl_set_numeric_standard
-/* malloc() pollution was the default in earlier versions, so enable
- * it for bincompat; but not for systems that used to do prevent that,
- * or when they ask for {HIDE,EMBED}MYMALLOC */
-# if !defined(EMBEDMYMALLOC) && !defined(HIDEMYMALLOC)
-# if !defined(NeXT) && !defined(__NeXT) && !defined(__MACHTEN__) && \
- !defined(__QNX__)
-# define PERL_POLLUTE_MALLOC
-# endif
-# endif
-#endif
-
-/* Hide global symbols */
-
-#if !defined(PERL_OBJECT)
-#if !defined(PERL_IMPLICIT_CONTEXT)
-
-#if defined(PERL_IMPLICIT_SYS)
-#endif
-#if defined(USE_ITHREADS)
-# if defined(PERL_IMPLICIT_SYS)
-# endif
-#endif
-#if defined(MYMALLOC)
-#define malloced_size Perl_malloced_size
-#endif
-#define get_context Perl_get_context
-#define set_context Perl_set_context
-#if defined(PERL_OBJECT)
-#ifndef __BORLANDC__
-#endif
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#define amagic_call Perl_amagic_call
-#define Gv_AMupdate Perl_Gv_AMupdate
-#define append_elem Perl_append_elem
-#define append_list Perl_append_list
-#define apply Perl_apply
-#define apply_attrs_string Perl_apply_attrs_string
-#define avhv_delete_ent Perl_avhv_delete_ent
-#define avhv_exists_ent Perl_avhv_exists_ent
-#define avhv_fetch_ent Perl_avhv_fetch_ent
-#define avhv_store_ent Perl_avhv_store_ent
-#define avhv_iternext Perl_avhv_iternext
-#define avhv_iterval Perl_avhv_iterval
-#define avhv_keys Perl_avhv_keys
-#define av_clear Perl_av_clear
-#define av_delete Perl_av_delete
-#define av_exists Perl_av_exists
-#define av_extend Perl_av_extend
-#define av_fake Perl_av_fake
-#define av_fetch Perl_av_fetch
-#define av_fill Perl_av_fill
-#define av_len Perl_av_len
-#define av_make Perl_av_make
-#define av_pop Perl_av_pop
-#define av_push Perl_av_push
-#define av_reify Perl_av_reify
-#define av_shift Perl_av_shift
-#define av_store Perl_av_store
-#define av_undef Perl_av_undef
-#define av_unshift Perl_av_unshift
-#define bind_match Perl_bind_match
-#define block_end Perl_block_end
-#define block_gimme Perl_block_gimme
-#define block_start Perl_block_start
-#define boot_core_UNIVERSAL Perl_boot_core_UNIVERSAL
-#define call_list Perl_call_list
-#define cando Perl_cando
-#define cast_ulong Perl_cast_ulong
-#define cast_i32 Perl_cast_i32
-#define cast_iv Perl_cast_iv
-#define cast_uv Perl_cast_uv
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-#define my_chsize Perl_my_chsize
-#endif
-#if defined(USE_THREADS)
-#define condpair_magic Perl_condpair_magic
-#endif
-#define convert Perl_convert
-#define croak Perl_croak
-#define vcroak Perl_vcroak
-#if defined(PERL_IMPLICIT_CONTEXT)
-#define croak_nocontext Perl_croak_nocontext
-#define die_nocontext Perl_die_nocontext
-#define deb_nocontext Perl_deb_nocontext
-#define form_nocontext Perl_form_nocontext
-#define load_module_nocontext Perl_load_module_nocontext
-#define mess_nocontext Perl_mess_nocontext
-#define warn_nocontext Perl_warn_nocontext
-#define warner_nocontext Perl_warner_nocontext
-#define newSVpvf_nocontext Perl_newSVpvf_nocontext
-#define sv_catpvf_nocontext Perl_sv_catpvf_nocontext
-#define sv_setpvf_nocontext Perl_sv_setpvf_nocontext
-#define sv_catpvf_mg_nocontext Perl_sv_catpvf_mg_nocontext
-#define sv_setpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext
-#define fprintf_nocontext Perl_fprintf_nocontext
-#define printf_nocontext Perl_printf_nocontext
-#endif
-#define cv_ckproto Perl_cv_ckproto
-#define cv_clone Perl_cv_clone
-#define cv_const_sv Perl_cv_const_sv
-#define op_const_sv Perl_op_const_sv
-#define cv_undef Perl_cv_undef
-#define cx_dump Perl_cx_dump
-#define filter_add Perl_filter_add
-#define filter_del Perl_filter_del
-#define filter_read Perl_filter_read
-#define get_op_descs Perl_get_op_descs
-#define get_op_names Perl_get_op_names
-#define get_no_modify Perl_get_no_modify
-#define get_opargs Perl_get_opargs
-#define get_ppaddr Perl_get_ppaddr
-#define cxinc Perl_cxinc
-#define deb Perl_deb
-#define vdeb Perl_vdeb
-#define debprofdump Perl_debprofdump
-#define debop Perl_debop
-#define debstack Perl_debstack
-#define debstackptrs Perl_debstackptrs
-#define delimcpy Perl_delimcpy
-#define deprecate Perl_deprecate
-#define die Perl_die
-#define vdie Perl_vdie
-#define die_where Perl_die_where
-#define dounwind Perl_dounwind
-#define do_aexec Perl_do_aexec
-#define do_aexec5 Perl_do_aexec5
-#define do_binmode Perl_do_binmode
-#define do_chop Perl_do_chop
-#define do_close Perl_do_close
-#define do_eof Perl_do_eof
-#define do_exec Perl_do_exec
-#if !defined(WIN32)
-#define do_exec3 Perl_do_exec3
-#endif
-#define do_execfree Perl_do_execfree
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-#define do_ipcctl Perl_do_ipcctl
-#define do_ipcget Perl_do_ipcget
-#define do_msgrcv Perl_do_msgrcv
-#define do_msgsnd Perl_do_msgsnd
-#define do_semop Perl_do_semop
-#define do_shmio Perl_do_shmio
-#endif
-#define do_join Perl_do_join
-#define do_kv Perl_do_kv
-#define do_open Perl_do_open
-#define do_open9 Perl_do_open9
-#define do_pipe Perl_do_pipe
-#define do_print Perl_do_print
-#define do_readline Perl_do_readline
-#define do_chomp Perl_do_chomp
-#define do_seek Perl_do_seek
-#define do_sprintf Perl_do_sprintf
-#define do_sysseek Perl_do_sysseek
-#define do_tell Perl_do_tell
-#define do_trans Perl_do_trans
-#define do_vecget Perl_do_vecget
-#define do_vecset Perl_do_vecset
-#define do_vop Perl_do_vop
-#define dofile Perl_dofile
-#define dowantarray Perl_dowantarray
-#define dump_all Perl_dump_all
-#define dump_eval Perl_dump_eval
-#if defined(DUMP_FDS)
-#define dump_fds Perl_dump_fds
-#endif
-#define dump_form Perl_dump_form
-#define gv_dump Perl_gv_dump
-#define op_dump Perl_op_dump
-#define pmop_dump Perl_pmop_dump
-#define dump_packsubs Perl_dump_packsubs
-#define dump_sub Perl_dump_sub
-#define fbm_compile Perl_fbm_compile
-#define fbm_instr Perl_fbm_instr
-#define find_script Perl_find_script
-#if defined(USE_THREADS)
-#define find_threadsv Perl_find_threadsv
-#endif
-#define force_list Perl_force_list
-#define fold_constants Perl_fold_constants
-#define form Perl_form
-#define vform Perl_vform
-#define free_tmps Perl_free_tmps
-#define gen_constant_list Perl_gen_constant_list
-#if !defined(HAS_GETENV_LEN)
-#define getenv_len Perl_getenv_len
-#endif
-#define gp_free Perl_gp_free
-#define gp_ref Perl_gp_ref
-#define gv_AVadd Perl_gv_AVadd
-#define gv_HVadd Perl_gv_HVadd
-#define gv_IOadd Perl_gv_IOadd
-#define gv_autoload4 Perl_gv_autoload4
-#define gv_check Perl_gv_check
-#define gv_efullname Perl_gv_efullname
-#define gv_efullname3 Perl_gv_efullname3
-#define gv_efullname4 Perl_gv_efullname4
-#define gv_fetchfile Perl_gv_fetchfile
-#define gv_fetchmeth Perl_gv_fetchmeth
-#define gv_fetchmethod Perl_gv_fetchmethod
-#define gv_fetchmethod_autoload Perl_gv_fetchmethod_autoload
-#define gv_fetchpv Perl_gv_fetchpv
-#define gv_fullname Perl_gv_fullname
-#define gv_fullname3 Perl_gv_fullname3
-#define gv_fullname4 Perl_gv_fullname4
-#define gv_init Perl_gv_init
-#define gv_stashpv Perl_gv_stashpv
-#define gv_stashpvn Perl_gv_stashpvn
-#define gv_stashsv Perl_gv_stashsv
-#define hv_clear Perl_hv_clear
-#define hv_delayfree_ent Perl_hv_delayfree_ent
-#define hv_delete Perl_hv_delete
-#define hv_delete_ent Perl_hv_delete_ent
-#define hv_exists Perl_hv_exists
-#define hv_exists_ent Perl_hv_exists_ent
-#define hv_fetch Perl_hv_fetch
-#define hv_fetch_ent Perl_hv_fetch_ent
-#define hv_free_ent Perl_hv_free_ent
-#define hv_iterinit Perl_hv_iterinit
-#define hv_iterkey Perl_hv_iterkey
-#define hv_iterkeysv Perl_hv_iterkeysv
-#define hv_iternext Perl_hv_iternext
-#define hv_iternextsv Perl_hv_iternextsv
-#define hv_iterval Perl_hv_iterval
-#define hv_ksplit Perl_hv_ksplit
-#define hv_magic Perl_hv_magic
-#define hv_store Perl_hv_store
-#define hv_store_ent Perl_hv_store_ent
-#define hv_undef Perl_hv_undef
-#define ibcmp Perl_ibcmp
-#define ibcmp_locale Perl_ibcmp_locale
-#define ingroup Perl_ingroup
-#define init_debugger Perl_init_debugger
-#define init_stacks Perl_init_stacks
-#define intro_my Perl_intro_my
-#define instr Perl_instr
-#define io_close Perl_io_close
-#define invert Perl_invert
-#define is_gv_magical Perl_is_gv_magical
-#define is_lvalue_sub Perl_is_lvalue_sub
-#define is_uni_alnum Perl_is_uni_alnum
-#define is_uni_alnumc Perl_is_uni_alnumc
-#define is_uni_idfirst Perl_is_uni_idfirst
-#define is_uni_alpha Perl_is_uni_alpha
-#define is_uni_ascii Perl_is_uni_ascii
-#define is_uni_space Perl_is_uni_space
-#define is_uni_cntrl Perl_is_uni_cntrl
-#define is_uni_graph Perl_is_uni_graph
-#define is_uni_digit Perl_is_uni_digit
-#define is_uni_upper Perl_is_uni_upper
-#define is_uni_lower Perl_is_uni_lower
-#define is_uni_print Perl_is_uni_print
-#define is_uni_punct Perl_is_uni_punct
-#define is_uni_xdigit Perl_is_uni_xdigit
-#define to_uni_upper Perl_to_uni_upper
-#define to_uni_title Perl_to_uni_title
-#define to_uni_lower Perl_to_uni_lower
-#define is_uni_alnum_lc Perl_is_uni_alnum_lc
-#define is_uni_alnumc_lc Perl_is_uni_alnumc_lc
-#define is_uni_idfirst_lc Perl_is_uni_idfirst_lc
-#define is_uni_alpha_lc Perl_is_uni_alpha_lc
-#define is_uni_ascii_lc Perl_is_uni_ascii_lc
-#define is_uni_space_lc Perl_is_uni_space_lc
-#define is_uni_cntrl_lc Perl_is_uni_cntrl_lc
-#define is_uni_graph_lc Perl_is_uni_graph_lc
-#define is_uni_digit_lc Perl_is_uni_digit_lc
-#define is_uni_upper_lc Perl_is_uni_upper_lc
-#define is_uni_lower_lc Perl_is_uni_lower_lc
-#define is_uni_print_lc Perl_is_uni_print_lc
-#define is_uni_punct_lc Perl_is_uni_punct_lc
-#define is_uni_xdigit_lc Perl_is_uni_xdigit_lc
-#define to_uni_upper_lc Perl_to_uni_upper_lc
-#define to_uni_title_lc Perl_to_uni_title_lc
-#define to_uni_lower_lc Perl_to_uni_lower_lc
-#define is_utf8_char Perl_is_utf8_char
-#define is_utf8_string Perl_is_utf8_string
-#define is_utf8_alnum Perl_is_utf8_alnum
-#define is_utf8_alnumc Perl_is_utf8_alnumc
-#define is_utf8_idfirst Perl_is_utf8_idfirst
-#define is_utf8_alpha Perl_is_utf8_alpha
-#define is_utf8_ascii Perl_is_utf8_ascii
-#define is_utf8_space Perl_is_utf8_space
-#define is_utf8_cntrl Perl_is_utf8_cntrl
-#define is_utf8_digit Perl_is_utf8_digit
-#define is_utf8_graph Perl_is_utf8_graph
-#define is_utf8_upper Perl_is_utf8_upper
-#define is_utf8_lower Perl_is_utf8_lower
-#define is_utf8_print Perl_is_utf8_print
-#define is_utf8_punct Perl_is_utf8_punct
-#define is_utf8_xdigit Perl_is_utf8_xdigit
-#define is_utf8_mark Perl_is_utf8_mark
-#define jmaybe Perl_jmaybe
-#define keyword Perl_keyword
-#define leave_scope Perl_leave_scope
-#define lex_end Perl_lex_end
-#define lex_start Perl_lex_start
-#define linklist Perl_linklist
-#define list Perl_list
-#define listkids Perl_listkids
-#define load_module Perl_load_module
-#define vload_module Perl_vload_module
-#define localize Perl_localize
-#define looks_like_number Perl_looks_like_number
-#define magic_clearenv Perl_magic_clearenv
-#define magic_clear_all_env Perl_magic_clear_all_env
-#define magic_clearpack Perl_magic_clearpack
-#define magic_clearsig Perl_magic_clearsig
-#define magic_existspack Perl_magic_existspack
-#define magic_freeregexp Perl_magic_freeregexp
-#define magic_get Perl_magic_get
-#define magic_getarylen Perl_magic_getarylen
-#define magic_getdefelem Perl_magic_getdefelem
-#define magic_getglob Perl_magic_getglob
-#define magic_getnkeys Perl_magic_getnkeys
-#define magic_getpack Perl_magic_getpack
-#define magic_getpos Perl_magic_getpos
-#define magic_getsig Perl_magic_getsig
-#define magic_getsubstr Perl_magic_getsubstr
-#define magic_gettaint Perl_magic_gettaint
-#define magic_getuvar Perl_magic_getuvar
-#define magic_getvec Perl_magic_getvec
-#define magic_len Perl_magic_len
-#if defined(USE_THREADS)
-#define magic_mutexfree Perl_magic_mutexfree
-#endif
-#define magic_nextpack Perl_magic_nextpack
-#define magic_regdata_cnt Perl_magic_regdata_cnt
-#define magic_regdatum_get Perl_magic_regdatum_get
-#define magic_regdatum_set Perl_magic_regdatum_set
-#define magic_set Perl_magic_set
-#define magic_setamagic Perl_magic_setamagic
-#define magic_setarylen Perl_magic_setarylen
-#define magic_setbm Perl_magic_setbm
-#define magic_setdbline Perl_magic_setdbline
-#if defined(USE_LOCALE_COLLATE)
-#define magic_setcollxfrm Perl_magic_setcollxfrm
-#endif
-#define magic_setdefelem Perl_magic_setdefelem
-#define magic_setenv Perl_magic_setenv
-#define magic_setfm Perl_magic_setfm
-#define magic_setisa Perl_magic_setisa
-#define magic_setglob Perl_magic_setglob
-#define magic_setmglob Perl_magic_setmglob
-#define magic_setnkeys Perl_magic_setnkeys
-#define magic_setpack Perl_magic_setpack
-#define magic_setpos Perl_magic_setpos
-#define magic_setsig Perl_magic_setsig
-#define magic_setsubstr Perl_magic_setsubstr
-#define magic_settaint Perl_magic_settaint
-#define magic_setuvar Perl_magic_setuvar
-#define magic_setvec Perl_magic_setvec
-#define magic_set_all_env Perl_magic_set_all_env
-#define magic_sizepack Perl_magic_sizepack
-#define magic_wipepack Perl_magic_wipepack
-#define magicname Perl_magicname
-#define markstack_grow Perl_markstack_grow
-#if defined(USE_LOCALE_COLLATE)
-#define mem_collxfrm Perl_mem_collxfrm
-#endif
-#define mess Perl_mess
-#define vmess Perl_vmess
-#define qerror Perl_qerror
-#define mg_clear Perl_mg_clear
-#define mg_copy Perl_mg_copy
-#define mg_find Perl_mg_find
-#define mg_free Perl_mg_free
-#define mg_get Perl_mg_get
-#define mg_length Perl_mg_length
-#define mg_magical Perl_mg_magical
-#define mg_set Perl_mg_set
-#define mg_size Perl_mg_size
-#define mod Perl_mod
-#define mode_from_discipline Perl_mode_from_discipline
-#define moreswitches Perl_moreswitches
-#define my Perl_my
-#define my_atof Perl_my_atof
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
-#define my_bcopy Perl_my_bcopy
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-#define my_bzero Perl_my_bzero
-#endif
-#define my_exit Perl_my_exit
-#define my_failure_exit Perl_my_failure_exit
-#define my_fflush_all Perl_my_fflush_all
-#define my_lstat Perl_my_lstat
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-#define my_memcmp Perl_my_memcmp
-#endif
-#if !defined(HAS_MEMSET)
-#define my_memset Perl_my_memset
-#endif
-#if !defined(PERL_OBJECT)
-#define my_pclose Perl_my_pclose
-#define my_popen Perl_my_popen
-#endif
-#define my_setenv Perl_my_setenv
-#define my_stat Perl_my_stat
-#if defined(MYSWAP)
-#define my_swap Perl_my_swap
-#define my_htonl Perl_my_htonl
-#define my_ntohl Perl_my_ntohl
-#endif
-#define my_unexec Perl_my_unexec
-#define newANONLIST Perl_newANONLIST
-#define newANONHASH Perl_newANONHASH
-#define newANONSUB Perl_newANONSUB
-#define newASSIGNOP Perl_newASSIGNOP
-#define newCONDOP Perl_newCONDOP
-#define newCONSTSUB Perl_newCONSTSUB
-#define newFORM Perl_newFORM
-#define newFOROP Perl_newFOROP
-#define newLOGOP Perl_newLOGOP
-#define newLOOPEX Perl_newLOOPEX
-#define newLOOPOP Perl_newLOOPOP
-#define newNULLLIST Perl_newNULLLIST
-#define newOP Perl_newOP
-#define newPROG Perl_newPROG
-#define newRANGE Perl_newRANGE
-#define newSLICEOP Perl_newSLICEOP
-#define newSTATEOP Perl_newSTATEOP
-#define newSUB Perl_newSUB
-#define newXS Perl_newXS
-#define newAV Perl_newAV
-#define newAVREF Perl_newAVREF
-#define newBINOP Perl_newBINOP
-#define newCVREF Perl_newCVREF
-#define newGVOP Perl_newGVOP
-#define newGVgen Perl_newGVgen
-#define newGVREF Perl_newGVREF
-#define newHVREF Perl_newHVREF
-#define newHV Perl_newHV
-#define newHVhv Perl_newHVhv
-#define newIO Perl_newIO
-#define newLISTOP Perl_newLISTOP
-#define newPADOP Perl_newPADOP
-#define newPMOP Perl_newPMOP
-#define newPVOP Perl_newPVOP
-#define newRV Perl_newRV
-#define newRV_noinc Perl_newRV_noinc
-#define newSV Perl_newSV
-#define newSVREF Perl_newSVREF
-#define newSVOP Perl_newSVOP
-#define newSViv Perl_newSViv
-#define newSVuv Perl_newSVuv
-#define newSVnv Perl_newSVnv
-#define newSVpv Perl_newSVpv
-#define newSVpvn Perl_newSVpvn
-#define newSVpvf Perl_newSVpvf
-#define vnewSVpvf Perl_vnewSVpvf
-#define newSVrv Perl_newSVrv
-#define newSVsv Perl_newSVsv
-#define newUNOP Perl_newUNOP
-#define newWHILEOP Perl_newWHILEOP
-#define new_stackinfo Perl_new_stackinfo
-#define nextargv Perl_nextargv
-#define ninstr Perl_ninstr
-#define oopsCV Perl_oopsCV
-#define op_free Perl_op_free
-#define package Perl_package
-#define pad_alloc Perl_pad_alloc
-#define pad_allocmy Perl_pad_allocmy
-#define pad_findmy Perl_pad_findmy
-#define oopsAV Perl_oopsAV
-#define oopsHV Perl_oopsHV
-#define pad_leavemy Perl_pad_leavemy
-#define pad_sv Perl_pad_sv
-#define pad_free Perl_pad_free
-#define pad_reset Perl_pad_reset
-#define pad_swipe Perl_pad_swipe
-#define peep Perl_peep
-#if defined(PERL_OBJECT)
-#endif
-#if defined(USE_THREADS)
-#define new_struct_thread Perl_new_struct_thread
-#endif
-#define call_atexit Perl_call_atexit
-#define call_argv Perl_call_argv
-#define call_method Perl_call_method
-#define call_pv Perl_call_pv
-#define call_sv Perl_call_sv
-#define eval_pv Perl_eval_pv
-#define eval_sv Perl_eval_sv
-#define get_sv Perl_get_sv
-#define get_av Perl_get_av
-#define get_hv Perl_get_hv
-#define get_cv Perl_get_cv
-#define init_i18nl10n Perl_init_i18nl10n
-#define init_i18nl14n Perl_init_i18nl14n
-#define new_collate Perl_new_collate
-#define new_ctype Perl_new_ctype
-#define new_numeric Perl_new_numeric
-#define set_numeric_local Perl_set_numeric_local
-#define set_numeric_radix Perl_set_numeric_radix
-#define set_numeric_standard Perl_set_numeric_standard
-#define require_pv Perl_require_pv
-#define pidgone Perl_pidgone
-#define pmflag Perl_pmflag
-#define pmruntime Perl_pmruntime
-#define pmtrans Perl_pmtrans
-#define pop_return Perl_pop_return
-#define pop_scope Perl_pop_scope
-#define prepend_elem Perl_prepend_elem
-#define push_return Perl_push_return
-#define push_scope Perl_push_scope
-#define ref Perl_ref
-#define refkids Perl_refkids
-#define regdump Perl_regdump
-#define pregexec Perl_pregexec
-#define pregfree Perl_pregfree
-#define pregcomp Perl_pregcomp
-#define re_intuit_start Perl_re_intuit_start
-#define re_intuit_string Perl_re_intuit_string
-#define regexec_flags Perl_regexec_flags
-#define regnext Perl_regnext
-#define regprop Perl_regprop
-#define repeatcpy Perl_repeatcpy
-#define rninstr Perl_rninstr
-#define rsignal Perl_rsignal
-#define rsignal_restore Perl_rsignal_restore
-#define rsignal_save Perl_rsignal_save
-#define rsignal_state Perl_rsignal_state
-#define rxres_free Perl_rxres_free
-#define rxres_restore Perl_rxres_restore
-#define rxres_save Perl_rxres_save
-#if !defined(HAS_RENAME)
-#define same_dirent Perl_same_dirent
-#endif
-#define savepv Perl_savepv
-#define savepvn Perl_savepvn
-#define savestack_grow Perl_savestack_grow
-#define save_aelem Perl_save_aelem
-#define save_alloc Perl_save_alloc
-#define save_aptr Perl_save_aptr
-#define save_ary Perl_save_ary
-#define save_clearsv Perl_save_clearsv
-#define save_delete Perl_save_delete
-#define save_destructor Perl_save_destructor
-#define save_destructor_x Perl_save_destructor_x
-#define save_freesv Perl_save_freesv
-#define save_freeop Perl_save_freeop
-#define save_freepv Perl_save_freepv
-#define save_generic_svref Perl_save_generic_svref
-#define save_generic_pvref Perl_save_generic_pvref
-#define save_gp Perl_save_gp
-#define save_hash Perl_save_hash
-#define save_helem Perl_save_helem
-#define save_hints Perl_save_hints
-#define save_hptr Perl_save_hptr
-#define save_I16 Perl_save_I16
-#define save_I32 Perl_save_I32
-#define save_I8 Perl_save_I8
-#define save_int Perl_save_int
-#define save_item Perl_save_item
-#define save_iv Perl_save_iv
-#define save_list Perl_save_list
-#define save_long Perl_save_long
-#define save_mortalizesv Perl_save_mortalizesv
-#define save_nogv Perl_save_nogv
-#define save_op Perl_save_op
-#define save_scalar Perl_save_scalar
-#define save_pptr Perl_save_pptr
-#define save_vptr Perl_save_vptr
-#define save_re_context Perl_save_re_context
-#define save_padsv Perl_save_padsv
-#define save_sptr Perl_save_sptr
-#define save_svref Perl_save_svref
-#define save_threadsv Perl_save_threadsv
-#define sawparens Perl_sawparens
-#define scalar Perl_scalar
-#define scalarkids Perl_scalarkids
-#define scalarseq Perl_scalarseq
-#define scalarvoid Perl_scalarvoid
-#define scan_bin Perl_scan_bin
-#define scan_hex Perl_scan_hex
-#define scan_num Perl_scan_num
-#define scan_oct Perl_scan_oct
-#define scope Perl_scope
-#define screaminstr Perl_screaminstr
-#if !defined(VMS)
-#define setenv_getix Perl_setenv_getix
-#endif
-#define setdefout Perl_setdefout
-#define sharepvn Perl_sharepvn
-#define share_hek Perl_share_hek
-#define sighandler Perl_sighandler
-#define stack_grow Perl_stack_grow
-#define start_subparse Perl_start_subparse
-#define sub_crush_depth Perl_sub_crush_depth
-#define sv_2bool Perl_sv_2bool
-#define sv_2cv Perl_sv_2cv
-#define sv_2io Perl_sv_2io
-#define sv_2iv Perl_sv_2iv
-#define sv_2mortal Perl_sv_2mortal
-#define sv_2nv Perl_sv_2nv
-#define sv_2pv Perl_sv_2pv
-#define sv_2pvutf8 Perl_sv_2pvutf8
-#define sv_2pvbyte Perl_sv_2pvbyte
-#define sv_2uv Perl_sv_2uv
-#define sv_iv Perl_sv_iv
-#define sv_uv Perl_sv_uv
-#define sv_nv Perl_sv_nv
-#define sv_pvn Perl_sv_pvn
-#define sv_pvutf8n Perl_sv_pvutf8n
-#define sv_pvbyten Perl_sv_pvbyten
-#define sv_true Perl_sv_true
-#define sv_add_arena Perl_sv_add_arena
-#define sv_backoff Perl_sv_backoff
-#define sv_bless Perl_sv_bless
-#define sv_catpvf Perl_sv_catpvf
-#define sv_vcatpvf Perl_sv_vcatpvf
-#define sv_catpv Perl_sv_catpv
-#define sv_catpvn Perl_sv_catpvn
-#define sv_catsv Perl_sv_catsv
-#define sv_chop Perl_sv_chop
-#define sv_clean_all Perl_sv_clean_all
-#define sv_clean_objs Perl_sv_clean_objs
-#define sv_clear Perl_sv_clear
-#define sv_cmp Perl_sv_cmp
-#define sv_cmp_locale Perl_sv_cmp_locale
-#if defined(USE_LOCALE_COLLATE)
-#define sv_collxfrm Perl_sv_collxfrm
-#endif
-#define sv_compile_2op Perl_sv_compile_2op
-#define sv_dec Perl_sv_dec
-#define sv_dump Perl_sv_dump
-#define sv_derived_from Perl_sv_derived_from
-#define sv_eq Perl_sv_eq
-#define sv_free Perl_sv_free
-#define sv_free_arenas Perl_sv_free_arenas
-#define sv_gets Perl_sv_gets
-#define sv_grow Perl_sv_grow
-#define sv_inc Perl_sv_inc
-#define sv_insert Perl_sv_insert
-#define sv_isa Perl_sv_isa
-#define sv_isobject Perl_sv_isobject
-#define sv_len Perl_sv_len
-#define sv_len_utf8 Perl_sv_len_utf8
-#define sv_magic Perl_sv_magic
-#define sv_mortalcopy Perl_sv_mortalcopy
-#define sv_newmortal Perl_sv_newmortal
-#define sv_newref Perl_sv_newref
-#define sv_peek Perl_sv_peek
-#define sv_pos_u2b Perl_sv_pos_u2b
-#define sv_pos_b2u Perl_sv_pos_b2u
-#define sv_pvn_force Perl_sv_pvn_force
-#define sv_pvutf8n_force Perl_sv_pvutf8n_force
-#define sv_pvbyten_force Perl_sv_pvbyten_force
-#define sv_reftype Perl_sv_reftype
-#define sv_replace Perl_sv_replace
-#define sv_report_used Perl_sv_report_used
-#define sv_reset Perl_sv_reset
-#define sv_setpvf Perl_sv_setpvf
-#define sv_vsetpvf Perl_sv_vsetpvf
-#define sv_setiv Perl_sv_setiv
-#define sv_setpviv Perl_sv_setpviv
-#define sv_setuv Perl_sv_setuv
-#define sv_setnv Perl_sv_setnv
-#define sv_setref_iv Perl_sv_setref_iv
-#define sv_setref_nv Perl_sv_setref_nv
-#define sv_setref_pv Perl_sv_setref_pv
-#define sv_setref_pvn Perl_sv_setref_pvn
-#define sv_setpv Perl_sv_setpv
-#define sv_setpvn Perl_sv_setpvn
-#define sv_setsv Perl_sv_setsv
-#define sv_taint Perl_sv_taint
-#define sv_tainted Perl_sv_tainted
-#define sv_unmagic Perl_sv_unmagic
-#define sv_unref Perl_sv_unref
-#define sv_untaint Perl_sv_untaint
-#define sv_upgrade Perl_sv_upgrade
-#define sv_usepvn Perl_sv_usepvn
-#define sv_vcatpvfn Perl_sv_vcatpvfn
-#define sv_vsetpvfn Perl_sv_vsetpvfn
-#define str_to_version Perl_str_to_version
-#define swash_init Perl_swash_init
-#define swash_fetch Perl_swash_fetch
-#define taint_env Perl_taint_env
-#define taint_proper Perl_taint_proper
-#define to_utf8_lower Perl_to_utf8_lower
-#define to_utf8_upper Perl_to_utf8_upper
-#define to_utf8_title Perl_to_utf8_title
-#if defined(UNLINK_ALL_VERSIONS)
-#define unlnk Perl_unlnk
-#endif
-#if defined(USE_THREADS)
-#define unlock_condpair Perl_unlock_condpair
-#endif
-#define unsharepvn Perl_unsharepvn
-#define unshare_hek Perl_unshare_hek
-#define utilize Perl_utilize
-#define utf16_to_utf8 Perl_utf16_to_utf8
-#define utf16_to_utf8_reversed Perl_utf16_to_utf8_reversed
-#define utf8_length Perl_utf8_length
-#define utf8_distance Perl_utf8_distance
-#define utf8_hop Perl_utf8_hop
-#define utf8_to_bytes Perl_utf8_to_bytes
-#define bytes_from_utf8 Perl_bytes_from_utf8
-#define bytes_to_utf8 Perl_bytes_to_utf8
-#define utf8_to_uv_simple Perl_utf8_to_uv_simple
-#define utf8_to_uv Perl_utf8_to_uv
-#define uv_to_utf8 Perl_uv_to_utf8
-#define vivify_defelem Perl_vivify_defelem
-#define vivify_ref Perl_vivify_ref
-#define wait4pid Perl_wait4pid
-#define report_evil_fh Perl_report_evil_fh
-#define report_uninit Perl_report_uninit
-#define warn Perl_warn
-#define vwarn Perl_vwarn
-#define warner Perl_warner
-#define vwarner Perl_vwarner
-#define watch Perl_watch
-#define whichsig Perl_whichsig
-#define yyerror Perl_yyerror
-#ifdef USE_PURE_BISON
-#define yylex_r Perl_yylex_r
-#endif
-#define yylex Perl_yylex
-#define yyparse Perl_yyparse
-#define yywarn Perl_yywarn
-#if defined(MYMALLOC)
-#define dump_mstats Perl_dump_mstats
-#define get_mstats Perl_get_mstats
-#endif
-#define safesysmalloc Perl_safesysmalloc
-#define safesyscalloc Perl_safesyscalloc
-#define safesysrealloc Perl_safesysrealloc
-#define safesysfree Perl_safesysfree
-#if defined(LEAKTEST)
-#define safexmalloc Perl_safexmalloc
-#define safexcalloc Perl_safexcalloc
-#define safexrealloc Perl_safexrealloc
-#define safexfree Perl_safexfree
-#endif
-#if defined(PERL_GLOBAL_STRUCT)
-#define GetVars Perl_GetVars
-#endif
-#define runops_standard Perl_runops_standard
-#define runops_debug Perl_runops_debug
-#if defined(USE_THREADS)
-#define sv_lock Perl_sv_lock
-#endif
-#define sv_catpvf_mg Perl_sv_catpvf_mg
-#define sv_vcatpvf_mg Perl_sv_vcatpvf_mg
-#define sv_catpv_mg Perl_sv_catpv_mg
-#define sv_catpvn_mg Perl_sv_catpvn_mg
-#define sv_catsv_mg Perl_sv_catsv_mg
-#define sv_setpvf_mg Perl_sv_setpvf_mg
-#define sv_vsetpvf_mg Perl_sv_vsetpvf_mg
-#define sv_setiv_mg Perl_sv_setiv_mg
-#define sv_setpviv_mg Perl_sv_setpviv_mg
-#define sv_setuv_mg Perl_sv_setuv_mg
-#define sv_setnv_mg Perl_sv_setnv_mg
-#define sv_setpv_mg Perl_sv_setpv_mg
-#define sv_setpvn_mg Perl_sv_setpvn_mg
-#define sv_setsv_mg Perl_sv_setsv_mg
-#define sv_usepvn_mg Perl_sv_usepvn_mg
-#define get_vtbl Perl_get_vtbl
-#define pv_display Perl_pv_display
-#define dump_indent Perl_dump_indent
-#define dump_vindent Perl_dump_vindent
-#define do_gv_dump Perl_do_gv_dump
-#define do_gvgv_dump Perl_do_gvgv_dump
-#define do_hv_dump Perl_do_hv_dump
-#define do_magic_dump Perl_do_magic_dump
-#define do_op_dump Perl_do_op_dump
-#define do_pmop_dump Perl_do_pmop_dump
-#define do_sv_dump Perl_do_sv_dump
-#define magic_dump Perl_magic_dump
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define default_protect Perl_default_protect
-#define vdefault_protect Perl_vdefault_protect
-#endif
-#define reginitcolors Perl_reginitcolors
-#define sv_2pv_nolen Perl_sv_2pv_nolen
-#define sv_2pvutf8_nolen Perl_sv_2pvutf8_nolen
-#define sv_2pvbyte_nolen Perl_sv_2pvbyte_nolen
-#define sv_pv Perl_sv_pv
-#define sv_pvutf8 Perl_sv_pvutf8
-#define sv_pvbyte Perl_sv_pvbyte
-#define sv_utf8_upgrade Perl_sv_utf8_upgrade
-#define sv_utf8_downgrade Perl_sv_utf8_downgrade
-#define sv_utf8_encode Perl_sv_utf8_encode
-#define sv_utf8_decode Perl_sv_utf8_decode
-#define sv_force_normal Perl_sv_force_normal
-#define sv_add_backref Perl_sv_add_backref
-#define sv_del_backref Perl_sv_del_backref
-#define tmps_grow Perl_tmps_grow
-#define sv_rvweaken Perl_sv_rvweaken
-#define magic_killbackrefs Perl_magic_killbackrefs
-#define newANONATTRSUB Perl_newANONATTRSUB
-#define newATTRSUB Perl_newATTRSUB
-#define newMYSUB Perl_newMYSUB
-#define my_attrs Perl_my_attrs
-#define boot_core_xsutils Perl_boot_core_xsutils
-#if defined(USE_ITHREADS)
-#define cx_dup Perl_cx_dup
-#define si_dup Perl_si_dup
-#define ss_dup Perl_ss_dup
-#define any_dup Perl_any_dup
-#define he_dup Perl_he_dup
-#define re_dup Perl_re_dup
-#define fp_dup Perl_fp_dup
-#define dirp_dup Perl_dirp_dup
-#define gp_dup Perl_gp_dup
-#define mg_dup Perl_mg_dup
-#define sv_dup Perl_sv_dup
-#if defined(HAVE_INTERP_INTERN)
-#define sys_intern_dup Perl_sys_intern_dup
-#endif
-#define ptr_table_new Perl_ptr_table_new
-#define ptr_table_fetch Perl_ptr_table_fetch
-#define ptr_table_store Perl_ptr_table_store
-#define ptr_table_split Perl_ptr_table_split
-#define ptr_table_clear Perl_ptr_table_clear
-#define ptr_table_free Perl_ptr_table_free
-#endif
-#if defined(HAVE_INTERP_INTERN)
-#define sys_intern_clear Perl_sys_intern_clear
-#define sys_intern_init Perl_sys_intern_init
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-#define avhv_index_sv S_avhv_index_sv
-#define avhv_index S_avhv_index
-#endif
-#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-#define do_trans_simple S_do_trans_simple
-#define do_trans_count S_do_trans_count
-#define do_trans_complex S_do_trans_complex
-#define do_trans_simple_utf8 S_do_trans_simple_utf8
-#define do_trans_count_utf8 S_do_trans_count_utf8
-#define do_trans_complex_utf8 S_do_trans_complex_utf8
-#endif
-#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-#define gv_init_sv S_gv_init_sv
-#endif
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-#define hsplit S_hsplit
-#define hfreeentries S_hfreeentries
-#define more_he S_more_he
-#define new_he S_new_he
-#define del_he S_del_he
-#define save_hek S_save_hek
-#define hv_magic_check S_hv_magic_check
-#endif
-#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-#define save_magic S_save_magic
-#define magic_methpack S_magic_methpack
-#define magic_methcall S_magic_methcall
-#endif
-#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-#define list_assignment S_list_assignment
-#define bad_type S_bad_type
-#define cop_free S_cop_free
-#define modkids S_modkids
-#define no_bareword_allowed S_no_bareword_allowed
-#define no_fh_allowed S_no_fh_allowed
-#define scalarboolean S_scalarboolean
-#define too_few_arguments S_too_few_arguments
-#define too_many_arguments S_too_many_arguments
-#define trlist_upgrade S_trlist_upgrade
-#define op_clear S_op_clear
-#define null S_null
-#define pad_addlex S_pad_addlex
-#define pad_findlex S_pad_findlex
-#define newDEFSVOP S_newDEFSVOP
-#define new_logop S_new_logop
-#define simplify_sort S_simplify_sort
-#define is_handle_constructor S_is_handle_constructor
-#define gv_ename S_gv_ename
-#define cv_dump S_cv_dump
-#define cv_clone2 S_cv_clone2
-#define scalar_mod_type S_scalar_mod_type
-#define my_kid S_my_kid
-#define dup_attrlist S_dup_attrlist
-#define apply_attrs S_apply_attrs
-# if defined(PL_OP_SLAB_ALLOC)
-#define Slab_Alloc S_Slab_Alloc
-# endif
-#endif
-#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
-#define find_beginning S_find_beginning
-#define forbid_setid S_forbid_setid
-#define incpush S_incpush
-#define init_interp S_init_interp
-#define init_ids S_init_ids
-#define init_lexer S_init_lexer
-#define init_main_stash S_init_main_stash
-#define init_perllib S_init_perllib
-#define init_postdump_symbols S_init_postdump_symbols
-#define init_predump_symbols S_init_predump_symbols
-#define my_exit_jump S_my_exit_jump
-#define nuke_stacks S_nuke_stacks
-#define open_script S_open_script
-#define usage S_usage
-#define validate_suid S_validate_suid
-# if defined(IAMSUID)
-#define fd_on_nosuid_fs S_fd_on_nosuid_fs
-# endif
-#define parse_body S_parse_body
-#define run_body S_run_body
-#define call_body S_call_body
-#define call_list_body S_call_list_body
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define vparse_body S_vparse_body
-#define vrun_body S_vrun_body
-#define vcall_body S_vcall_body
-#define vcall_list_body S_vcall_list_body
-#endif
-# if defined(USE_THREADS)
-#define init_main_thread S_init_main_thread
-# endif
-#endif
-#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-#define doencodes S_doencodes
-#define refto S_refto
-#define seed S_seed
-#define mul128 S_mul128
-#define is_an_int S_is_an_int
-#define div128 S_div128
-#endif
-#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-#define docatch S_docatch
-#define docatch_body S_docatch_body
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define vdocatch_body S_vdocatch_body
-#endif
-#define dofindlabel S_dofindlabel
-#define doparseform S_doparseform
-#define dopoptoeval S_dopoptoeval
-#define dopoptolabel S_dopoptolabel
-#define dopoptoloop S_dopoptoloop
-#define dopoptosub S_dopoptosub
-#define dopoptosub_at S_dopoptosub_at
-#define save_lines S_save_lines
-#define doeval S_doeval
-#define doopen_pmc S_doopen_pmc
-#define qsortsv S_qsortsv
-#endif
-#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-#define do_maybe_phash S_do_maybe_phash
-#define do_oddball S_do_oddball
-#define get_db_sub S_get_db_sub
-#define method_common S_method_common
-#endif
-#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-#define doform S_doform
-#define emulate_eaccess S_emulate_eaccess
-# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-#define dooneliner S_dooneliner
-# endif
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-#define reg S_reg
-#define reganode S_reganode
-#define regatom S_regatom
-#define regbranch S_regbranch
-#define reguni S_reguni
-#define regclass S_regclass
-#define regclassutf8 S_regclassutf8
-#define regcurly S_regcurly
-#define reg_node S_reg_node
-#define regpiece S_regpiece
-#define reginsert S_reginsert
-#define regoptail S_regoptail
-#define regtail S_regtail
-#define regwhite S_regwhite
-#define nextchar S_nextchar
-#define dumpuntil S_dumpuntil
-#define put_byte S_put_byte
-#define scan_commit S_scan_commit
-#define cl_anything S_cl_anything
-#define cl_is_anything S_cl_is_anything
-#define cl_init S_cl_init
-#define cl_init_zero S_cl_init_zero
-#define cl_and S_cl_and
-#define cl_or S_cl_or
-#define study_chunk S_study_chunk
-#define add_data S_add_data
-#define re_croak2 S_re_croak2
-#define regpposixcc S_regpposixcc
-#define checkposixcc S_checkposixcc
-#endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-#define regmatch S_regmatch
-#define regrepeat S_regrepeat
-#define regrepeat_hard S_regrepeat_hard
-#define regtry S_regtry
-#define reginclass S_reginclass
-#define reginclassutf8 S_reginclassutf8
-#define regcppush S_regcppush
-#define regcppop S_regcppop
-#define regcp_set_to S_regcp_set_to
-#define cache_re S_cache_re
-#define reghop S_reghop
-#define reghopmaybe S_reghopmaybe
-#define find_byclass S_find_byclass
-#endif
-#if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
-#define debprof S_debprof
-#endif
-#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-#define save_scalar_at S_save_scalar_at
-#endif
-#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-#define asIV S_asIV
-#define asUV S_asUV
-#define more_sv S_more_sv
-#define more_xiv S_more_xiv
-#define more_xnv S_more_xnv
-#define more_xpv S_more_xpv
-#define more_xpviv S_more_xpviv
-#define more_xpvnv S_more_xpvnv
-#define more_xpvcv S_more_xpvcv
-#define more_xpvav S_more_xpvav
-#define more_xpvhv S_more_xpvhv
-#define more_xpvmg S_more_xpvmg
-#define more_xpvlv S_more_xpvlv
-#define more_xpvbm S_more_xpvbm
-#define more_xrv S_more_xrv
-#define new_xiv S_new_xiv
-#define new_xnv S_new_xnv
-#define new_xpv S_new_xpv
-#define new_xpviv S_new_xpviv
-#define new_xpvnv S_new_xpvnv
-#define new_xpvcv S_new_xpvcv
-#define new_xpvav S_new_xpvav
-#define new_xpvhv S_new_xpvhv
-#define new_xpvmg S_new_xpvmg
-#define new_xpvlv S_new_xpvlv
-#define new_xpvbm S_new_xpvbm
-#define new_xrv S_new_xrv
-#define del_xiv S_del_xiv
-#define del_xnv S_del_xnv
-#define del_xpv S_del_xpv
-#define del_xpviv S_del_xpviv
-#define del_xpvnv S_del_xpvnv
-#define del_xpvcv S_del_xpvcv
-#define del_xpvav S_del_xpvav
-#define del_xpvhv S_del_xpvhv
-#define del_xpvmg S_del_xpvmg
-#define del_xpvlv S_del_xpvlv
-#define del_xpvbm S_del_xpvbm
-#define del_xrv S_del_xrv
-#define sv_unglob S_sv_unglob
-#define not_a_number S_not_a_number
-#define visit S_visit
-# if defined(DEBUGGING)
-#define del_sv S_del_sv
-# endif
-#endif
-#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
-#define check_uni S_check_uni
-#define force_next S_force_next
-#define force_version S_force_version
-#define force_word S_force_word
-#define tokeq S_tokeq
-#define scan_const S_scan_const
-#define scan_formline S_scan_formline
-#define scan_heredoc S_scan_heredoc
-#define scan_ident S_scan_ident
-#define scan_inputsymbol S_scan_inputsymbol
-#define scan_pat S_scan_pat
-#define scan_str S_scan_str
-#define scan_subst S_scan_subst
-#define scan_trans S_scan_trans
-#define scan_word S_scan_word
-#define skipspace S_skipspace
-#define swallow_bom S_swallow_bom
-#define checkcomma S_checkcomma
-#define force_ident S_force_ident
-#define incline S_incline
-#define intuit_method S_intuit_method
-#define intuit_more S_intuit_more
-#define lop S_lop
-#define missingterm S_missingterm
-#define no_op S_no_op
-#define set_csh S_set_csh
-#define sublex_done S_sublex_done
-#define sublex_push S_sublex_push
-#define sublex_start S_sublex_start
-#define filter_gets S_filter_gets
-#define find_in_my_stash S_find_in_my_stash
-#define new_constant S_new_constant
-#define ao S_ao
-#define depcom S_depcom
-#define incl_perldb S_incl_perldb
-#if 0
-#define utf16_textfilter S_utf16_textfilter
-#define utf16rev_textfilter S_utf16rev_textfilter
-#endif
-# if defined(CRIPPLED_CC)
-#define uni S_uni
-# endif
-# if defined(PERL_CR_FILTER)
-#define cr_textfilter S_cr_textfilter
-# endif
-#endif
-#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-#define isa_lookup S_isa_lookup
-#endif
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-#define stdize_locale S_stdize_locale
-#define mess_alloc S_mess_alloc
-# if defined(LEAKTEST)
-#define xstat S_xstat
-# endif
-#endif
-#if defined(PERL_OBJECT)
-#endif
-#define ck_anoncode Perl_ck_anoncode
-#define ck_bitop Perl_ck_bitop
-#define ck_concat Perl_ck_concat
-#define ck_defined Perl_ck_defined
-#define ck_delete Perl_ck_delete
-#define ck_eof Perl_ck_eof
-#define ck_eval Perl_ck_eval
-#define ck_exec Perl_ck_exec
-#define ck_exists Perl_ck_exists
-#define ck_exit Perl_ck_exit
-#define ck_ftst Perl_ck_ftst
-#define ck_fun Perl_ck_fun
-#define ck_fun_locale Perl_ck_fun_locale
-#define ck_glob Perl_ck_glob
-#define ck_grep Perl_ck_grep
-#define ck_index Perl_ck_index
-#define ck_join Perl_ck_join
-#define ck_lengthconst Perl_ck_lengthconst
-#define ck_lfun Perl_ck_lfun
-#define ck_listiob Perl_ck_listiob
-#define ck_match Perl_ck_match
-#define ck_method Perl_ck_method
-#define ck_null Perl_ck_null
-#define ck_open Perl_ck_open
-#define ck_repeat Perl_ck_repeat
-#define ck_require Perl_ck_require
-#define ck_return Perl_ck_return
-#define ck_rfun Perl_ck_rfun
-#define ck_rvconst Perl_ck_rvconst
-#define ck_sassign Perl_ck_sassign
-#define ck_scmp Perl_ck_scmp
-#define ck_select Perl_ck_select
-#define ck_shift Perl_ck_shift
-#define ck_sort Perl_ck_sort
-#define ck_spair Perl_ck_spair
-#define ck_split Perl_ck_split
-#define ck_subr Perl_ck_subr
-#define ck_substr Perl_ck_substr
-#define ck_svconst Perl_ck_svconst
-#define ck_trunc Perl_ck_trunc
-#define pp_aassign Perl_pp_aassign
-#define pp_abs Perl_pp_abs
-#define pp_accept Perl_pp_accept
-#define pp_add Perl_pp_add
-#define pp_aelem Perl_pp_aelem
-#define pp_aelemfast Perl_pp_aelemfast
-#define pp_alarm Perl_pp_alarm
-#define pp_and Perl_pp_and
-#define pp_andassign Perl_pp_andassign
-#define pp_anoncode Perl_pp_anoncode
-#define pp_anonhash Perl_pp_anonhash
-#define pp_anonlist Perl_pp_anonlist
-#define pp_aslice Perl_pp_aslice
-#define pp_atan2 Perl_pp_atan2
-#define pp_av2arylen Perl_pp_av2arylen
-#define pp_backtick Perl_pp_backtick
-#define pp_bind Perl_pp_bind
-#define pp_binmode Perl_pp_binmode
-#define pp_bit_and Perl_pp_bit_and
-#define pp_bit_or Perl_pp_bit_or
-#define pp_bit_xor Perl_pp_bit_xor
-#define pp_bless Perl_pp_bless
-#define pp_caller Perl_pp_caller
-#define pp_chdir Perl_pp_chdir
-#define pp_chmod Perl_pp_chmod
-#define pp_chomp Perl_pp_chomp
-#define pp_chop Perl_pp_chop
-#define pp_chown Perl_pp_chown
-#define pp_chr Perl_pp_chr
-#define pp_chroot Perl_pp_chroot
-#define pp_close Perl_pp_close
-#define pp_closedir Perl_pp_closedir
-#define pp_complement Perl_pp_complement
-#define pp_concat Perl_pp_concat
-#define pp_cond_expr Perl_pp_cond_expr
-#define pp_connect Perl_pp_connect
-#define pp_const Perl_pp_const
-#define pp_cos Perl_pp_cos
-#define pp_crypt Perl_pp_crypt
-#define pp_dbmclose Perl_pp_dbmclose
-#define pp_dbmopen Perl_pp_dbmopen
-#define pp_dbstate Perl_pp_dbstate
-#define pp_defined Perl_pp_defined
-#define pp_delete Perl_pp_delete
-#define pp_die Perl_pp_die
-#define pp_divide Perl_pp_divide
-#define pp_dofile Perl_pp_dofile
-#define pp_dump Perl_pp_dump
-#define pp_each Perl_pp_each
-#define pp_egrent Perl_pp_egrent
-#define pp_ehostent Perl_pp_ehostent
-#define pp_enetent Perl_pp_enetent
-#define pp_enter Perl_pp_enter
-#define pp_entereval Perl_pp_entereval
-#define pp_enteriter Perl_pp_enteriter
-#define pp_enterloop Perl_pp_enterloop
-#define pp_entersub Perl_pp_entersub
-#define pp_entertry Perl_pp_entertry
-#define pp_enterwrite Perl_pp_enterwrite
-#define pp_eof Perl_pp_eof
-#define pp_eprotoent Perl_pp_eprotoent
-#define pp_epwent Perl_pp_epwent
-#define pp_eq Perl_pp_eq
-#define pp_eservent Perl_pp_eservent
-#define pp_exec Perl_pp_exec
-#define pp_exists Perl_pp_exists
-#define pp_exit Perl_pp_exit
-#define pp_exp Perl_pp_exp
-#define pp_fcntl Perl_pp_fcntl
-#define pp_fileno Perl_pp_fileno
-#define pp_flip Perl_pp_flip
-#define pp_flock Perl_pp_flock
-#define pp_flop Perl_pp_flop
-#define pp_fork Perl_pp_fork
-#define pp_formline Perl_pp_formline
-#define pp_ftatime Perl_pp_ftatime
-#define pp_ftbinary Perl_pp_ftbinary
-#define pp_ftblk Perl_pp_ftblk
-#define pp_ftchr Perl_pp_ftchr
-#define pp_ftctime Perl_pp_ftctime
-#define pp_ftdir Perl_pp_ftdir
-#define pp_fteexec Perl_pp_fteexec
-#define pp_fteowned Perl_pp_fteowned
-#define pp_fteread Perl_pp_fteread
-#define pp_ftewrite Perl_pp_ftewrite
-#define pp_ftfile Perl_pp_ftfile
-#define pp_ftis Perl_pp_ftis
-#define pp_ftlink Perl_pp_ftlink
-#define pp_ftmtime Perl_pp_ftmtime
-#define pp_ftpipe Perl_pp_ftpipe
-#define pp_ftrexec Perl_pp_ftrexec
-#define pp_ftrowned Perl_pp_ftrowned
-#define pp_ftrread Perl_pp_ftrread
-#define pp_ftrwrite Perl_pp_ftrwrite
-#define pp_ftsgid Perl_pp_ftsgid
-#define pp_ftsize Perl_pp_ftsize
-#define pp_ftsock Perl_pp_ftsock
-#define pp_ftsuid Perl_pp_ftsuid
-#define pp_ftsvtx Perl_pp_ftsvtx
-#define pp_fttext Perl_pp_fttext
-#define pp_fttty Perl_pp_fttty
-#define pp_ftzero Perl_pp_ftzero
-#define pp_ge Perl_pp_ge
-#define pp_gelem Perl_pp_gelem
-#define pp_getc Perl_pp_getc
-#define pp_getlogin Perl_pp_getlogin
-#define pp_getpeername Perl_pp_getpeername
-#define pp_getpgrp Perl_pp_getpgrp
-#define pp_getppid Perl_pp_getppid
-#define pp_getpriority Perl_pp_getpriority
-#define pp_getsockname Perl_pp_getsockname
-#define pp_ggrent Perl_pp_ggrent
-#define pp_ggrgid Perl_pp_ggrgid
-#define pp_ggrnam Perl_pp_ggrnam
-#define pp_ghbyaddr Perl_pp_ghbyaddr
-#define pp_ghbyname Perl_pp_ghbyname
-#define pp_ghostent Perl_pp_ghostent
-#define pp_glob Perl_pp_glob
-#define pp_gmtime Perl_pp_gmtime
-#define pp_gnbyaddr Perl_pp_gnbyaddr
-#define pp_gnbyname Perl_pp_gnbyname
-#define pp_gnetent Perl_pp_gnetent
-#define pp_goto Perl_pp_goto
-#define pp_gpbyname Perl_pp_gpbyname
-#define pp_gpbynumber Perl_pp_gpbynumber
-#define pp_gprotoent Perl_pp_gprotoent
-#define pp_gpwent Perl_pp_gpwent
-#define pp_gpwnam Perl_pp_gpwnam
-#define pp_gpwuid Perl_pp_gpwuid
-#define pp_grepstart Perl_pp_grepstart
-#define pp_grepwhile Perl_pp_grepwhile
-#define pp_gsbyname Perl_pp_gsbyname
-#define pp_gsbyport Perl_pp_gsbyport
-#define pp_gservent Perl_pp_gservent
-#define pp_gsockopt Perl_pp_gsockopt
-#define pp_gt Perl_pp_gt
-#define pp_gv Perl_pp_gv
-#define pp_gvsv Perl_pp_gvsv
-#define pp_helem Perl_pp_helem
-#define pp_hex Perl_pp_hex
-#define pp_hslice Perl_pp_hslice
-#define pp_i_add Perl_pp_i_add
-#define pp_i_divide Perl_pp_i_divide
-#define pp_i_eq Perl_pp_i_eq
-#define pp_i_ge Perl_pp_i_ge
-#define pp_i_gt Perl_pp_i_gt
-#define pp_i_le Perl_pp_i_le
-#define pp_i_lt Perl_pp_i_lt
-#define pp_i_modulo Perl_pp_i_modulo
-#define pp_i_multiply Perl_pp_i_multiply
-#define pp_i_ncmp Perl_pp_i_ncmp
-#define pp_i_ne Perl_pp_i_ne
-#define pp_i_negate Perl_pp_i_negate
-#define pp_i_subtract Perl_pp_i_subtract
-#define pp_index Perl_pp_index
-#define pp_int Perl_pp_int
-#define pp_ioctl Perl_pp_ioctl
-#define pp_iter Perl_pp_iter
-#define pp_join Perl_pp_join
-#define pp_keys Perl_pp_keys
-#define pp_kill Perl_pp_kill
-#define pp_last Perl_pp_last
-#define pp_lc Perl_pp_lc
-#define pp_lcfirst Perl_pp_lcfirst
-#define pp_le Perl_pp_le
-#define pp_leave Perl_pp_leave
-#define pp_leaveeval Perl_pp_leaveeval
-#define pp_leaveloop Perl_pp_leaveloop
-#define pp_leavesub Perl_pp_leavesub
-#define pp_leavesublv Perl_pp_leavesublv
-#define pp_leavetry Perl_pp_leavetry
-#define pp_leavewrite Perl_pp_leavewrite
-#define pp_left_shift Perl_pp_left_shift
-#define pp_length Perl_pp_length
-#define pp_lineseq Perl_pp_lineseq
-#define pp_link Perl_pp_link
-#define pp_list Perl_pp_list
-#define pp_listen Perl_pp_listen
-#define pp_localtime Perl_pp_localtime
-#define pp_lock Perl_pp_lock
-#define pp_log Perl_pp_log
-#define pp_lslice Perl_pp_lslice
-#define pp_lstat Perl_pp_lstat
-#define pp_lt Perl_pp_lt
-#define pp_mapstart Perl_pp_mapstart
-#define pp_mapwhile Perl_pp_mapwhile
-#define pp_match Perl_pp_match
-#define pp_method Perl_pp_method
-#define pp_method_named Perl_pp_method_named
-#define pp_mkdir Perl_pp_mkdir
-#define pp_modulo Perl_pp_modulo
-#define pp_msgctl Perl_pp_msgctl
-#define pp_msgget Perl_pp_msgget
-#define pp_msgrcv Perl_pp_msgrcv
-#define pp_msgsnd Perl_pp_msgsnd
-#define pp_multiply Perl_pp_multiply
-#define pp_ncmp Perl_pp_ncmp
-#define pp_ne Perl_pp_ne
-#define pp_negate Perl_pp_negate
-#define pp_next Perl_pp_next
-#define pp_nextstate Perl_pp_nextstate
-#define pp_not Perl_pp_not
-#define pp_null Perl_pp_null
-#define pp_oct Perl_pp_oct
-#define pp_open Perl_pp_open
-#define pp_open_dir Perl_pp_open_dir
-#define pp_or Perl_pp_or
-#define pp_orassign Perl_pp_orassign
-#define pp_ord Perl_pp_ord
-#define pp_pack Perl_pp_pack
-#define pp_padany Perl_pp_padany
-#define pp_padav Perl_pp_padav
-#define pp_padhv Perl_pp_padhv
-#define pp_padsv Perl_pp_padsv
-#define pp_pipe_op Perl_pp_pipe_op
-#define pp_pop Perl_pp_pop
-#define pp_pos Perl_pp_pos
-#define pp_postdec Perl_pp_postdec
-#define pp_postinc Perl_pp_postinc
-#define pp_pow Perl_pp_pow
-#define pp_predec Perl_pp_predec
-#define pp_preinc Perl_pp_preinc
-#define pp_print Perl_pp_print
-#define pp_prototype Perl_pp_prototype
-#define pp_prtf Perl_pp_prtf
-#define pp_push Perl_pp_push
-#define pp_pushmark Perl_pp_pushmark
-#define pp_pushre Perl_pp_pushre
-#define pp_qr Perl_pp_qr
-#define pp_quotemeta Perl_pp_quotemeta
-#define pp_rand Perl_pp_rand
-#define pp_range Perl_pp_range
-#define pp_rcatline Perl_pp_rcatline
-#define pp_read Perl_pp_read
-#define pp_readdir Perl_pp_readdir
-#define pp_readline Perl_pp_readline
-#define pp_readlink Perl_pp_readlink
-#define pp_recv Perl_pp_recv
-#define pp_redo Perl_pp_redo
-#define pp_ref Perl_pp_ref
-#define pp_refgen Perl_pp_refgen
-#define pp_regcmaybe Perl_pp_regcmaybe
-#define pp_regcomp Perl_pp_regcomp
-#define pp_regcreset Perl_pp_regcreset
-#define pp_rename Perl_pp_rename
-#define pp_repeat Perl_pp_repeat
-#define pp_require Perl_pp_require
-#define pp_reset Perl_pp_reset
-#define pp_return Perl_pp_return
-#define pp_reverse Perl_pp_reverse
-#define pp_rewinddir Perl_pp_rewinddir
-#define pp_right_shift Perl_pp_right_shift
-#define pp_rindex Perl_pp_rindex
-#define pp_rmdir Perl_pp_rmdir
-#define pp_rv2av Perl_pp_rv2av
-#define pp_rv2cv Perl_pp_rv2cv
-#define pp_rv2gv Perl_pp_rv2gv
-#define pp_rv2hv Perl_pp_rv2hv
-#define pp_rv2sv Perl_pp_rv2sv
-#define pp_sassign Perl_pp_sassign
-#define pp_scalar Perl_pp_scalar
-#define pp_schomp Perl_pp_schomp
-#define pp_schop Perl_pp_schop
-#define pp_scmp Perl_pp_scmp
-#define pp_scope Perl_pp_scope
-#define pp_seek Perl_pp_seek
-#define pp_seekdir Perl_pp_seekdir
-#define pp_select Perl_pp_select
-#define pp_semctl Perl_pp_semctl
-#define pp_semget Perl_pp_semget
-#define pp_semop Perl_pp_semop
-#define pp_send Perl_pp_send
-#define pp_seq Perl_pp_seq
-#define pp_setpgrp Perl_pp_setpgrp
-#define pp_setpriority Perl_pp_setpriority
-#define pp_setstate Perl_pp_setstate
-#define pp_sge Perl_pp_sge
-#define pp_sgrent Perl_pp_sgrent
-#define pp_sgt Perl_pp_sgt
-#define pp_shift Perl_pp_shift
-#define pp_shmctl Perl_pp_shmctl
-#define pp_shmget Perl_pp_shmget
-#define pp_shmread Perl_pp_shmread
-#define pp_shmwrite Perl_pp_shmwrite
-#define pp_shostent Perl_pp_shostent
-#define pp_shutdown Perl_pp_shutdown
-#define pp_sin Perl_pp_sin
-#define pp_sle Perl_pp_sle
-#define pp_sleep Perl_pp_sleep
-#define pp_slt Perl_pp_slt
-#define pp_sne Perl_pp_sne
-#define pp_snetent Perl_pp_snetent
-#define pp_socket Perl_pp_socket
-#define pp_sockpair Perl_pp_sockpair
-#define pp_sort Perl_pp_sort
-#define pp_splice Perl_pp_splice
-#define pp_split Perl_pp_split
-#define pp_sprintf Perl_pp_sprintf
-#define pp_sprotoent Perl_pp_sprotoent
-#define pp_spwent Perl_pp_spwent
-#define pp_sqrt Perl_pp_sqrt
-#define pp_srand Perl_pp_srand
-#define pp_srefgen Perl_pp_srefgen
-#define pp_sselect Perl_pp_sselect
-#define pp_sservent Perl_pp_sservent
-#define pp_ssockopt Perl_pp_ssockopt
-#define pp_stat Perl_pp_stat
-#define pp_stringify Perl_pp_stringify
-#define pp_stub Perl_pp_stub
-#define pp_study Perl_pp_study
-#define pp_subst Perl_pp_subst
-#define pp_substcont Perl_pp_substcont
-#define pp_substr Perl_pp_substr
-#define pp_subtract Perl_pp_subtract
-#define pp_symlink Perl_pp_symlink
-#define pp_syscall Perl_pp_syscall
-#define pp_sysopen Perl_pp_sysopen
-#define pp_sysread Perl_pp_sysread
-#define pp_sysseek Perl_pp_sysseek
-#define pp_system Perl_pp_system
-#define pp_syswrite Perl_pp_syswrite
-#define pp_tell Perl_pp_tell
-#define pp_telldir Perl_pp_telldir
-#define pp_threadsv Perl_pp_threadsv
-#define pp_tie Perl_pp_tie
-#define pp_tied Perl_pp_tied
-#define pp_time Perl_pp_time
-#define pp_tms Perl_pp_tms
-#define pp_trans Perl_pp_trans
-#define pp_truncate Perl_pp_truncate
-#define pp_uc Perl_pp_uc
-#define pp_ucfirst Perl_pp_ucfirst
-#define pp_umask Perl_pp_umask
-#define pp_undef Perl_pp_undef
-#define pp_unlink Perl_pp_unlink
-#define pp_unpack Perl_pp_unpack
-#define pp_unshift Perl_pp_unshift
-#define pp_unstack Perl_pp_unstack
-#define pp_untie Perl_pp_untie
-#define pp_utime Perl_pp_utime
-#define pp_values Perl_pp_values
-#define pp_vec Perl_pp_vec
-#define pp_wait Perl_pp_wait
-#define pp_waitpid Perl_pp_waitpid
-#define pp_wantarray Perl_pp_wantarray
-#define pp_warn Perl_pp_warn
-#define pp_xor Perl_pp_xor
-
-#else /* PERL_IMPLICIT_CONTEXT */
-
-#if defined(PERL_IMPLICIT_SYS)
-#endif
-#if defined(USE_ITHREADS)
-# if defined(PERL_IMPLICIT_SYS)
-# endif
-#endif
-#if defined(MYMALLOC)
-#define malloced_size Perl_malloced_size
-#endif
-#define get_context Perl_get_context
-#define set_context Perl_set_context
-#if defined(PERL_OBJECT)
-#ifndef __BORLANDC__
-#endif
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#define amagic_call(a,b,c,d) Perl_amagic_call(aTHX_ a,b,c,d)
-#define Gv_AMupdate(a) Perl_Gv_AMupdate(aTHX_ a)
-#define append_elem(a,b,c) Perl_append_elem(aTHX_ a,b,c)
-#define append_list(a,b,c) Perl_append_list(aTHX_ a,b,c)
-#define apply(a,b,c) Perl_apply(aTHX_ a,b,c)
-#define apply_attrs_string(a,b,c,d) Perl_apply_attrs_string(aTHX_ a,b,c,d)
-#define avhv_delete_ent(a,b,c,d) Perl_avhv_delete_ent(aTHX_ a,b,c,d)
-#define avhv_exists_ent(a,b,c) Perl_avhv_exists_ent(aTHX_ a,b,c)
-#define avhv_fetch_ent(a,b,c,d) Perl_avhv_fetch_ent(aTHX_ a,b,c,d)
-#define avhv_store_ent(a,b,c,d) Perl_avhv_store_ent(aTHX_ a,b,c,d)
-#define avhv_iternext(a) Perl_avhv_iternext(aTHX_ a)
-#define avhv_iterval(a,b) Perl_avhv_iterval(aTHX_ a,b)
-#define avhv_keys(a) Perl_avhv_keys(aTHX_ a)
-#define av_clear(a) Perl_av_clear(aTHX_ a)
-#define av_delete(a,b,c) Perl_av_delete(aTHX_ a,b,c)
-#define av_exists(a,b) Perl_av_exists(aTHX_ a,b)
-#define av_extend(a,b) Perl_av_extend(aTHX_ a,b)
-#define av_fake(a,b) Perl_av_fake(aTHX_ a,b)
-#define av_fetch(a,b,c) Perl_av_fetch(aTHX_ a,b,c)
-#define av_fill(a,b) Perl_av_fill(aTHX_ a,b)
-#define av_len(a) Perl_av_len(aTHX_ a)
-#define av_make(a,b) Perl_av_make(aTHX_ a,b)
-#define av_pop(a) Perl_av_pop(aTHX_ a)
-#define av_push(a,b) Perl_av_push(aTHX_ a,b)
-#define av_reify(a) Perl_av_reify(aTHX_ a)
-#define av_shift(a) Perl_av_shift(aTHX_ a)
-#define av_store(a,b,c) Perl_av_store(aTHX_ a,b,c)
-#define av_undef(a) Perl_av_undef(aTHX_ a)
-#define av_unshift(a,b) Perl_av_unshift(aTHX_ a,b)
-#define bind_match(a,b,c) Perl_bind_match(aTHX_ a,b,c)
-#define block_end(a,b) Perl_block_end(aTHX_ a,b)
-#define block_gimme() Perl_block_gimme(aTHX)
-#define block_start(a) Perl_block_start(aTHX_ a)
-#define boot_core_UNIVERSAL() Perl_boot_core_UNIVERSAL(aTHX)
-#define call_list(a,b) Perl_call_list(aTHX_ a,b)
-#define cando(a,b,c) Perl_cando(aTHX_ a,b,c)
-#define cast_ulong(a) Perl_cast_ulong(aTHX_ a)
-#define cast_i32(a) Perl_cast_i32(aTHX_ a)
-#define cast_iv(a) Perl_cast_iv(aTHX_ a)
-#define cast_uv(a) Perl_cast_uv(aTHX_ a)
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-#define my_chsize(a,b) Perl_my_chsize(aTHX_ a,b)
-#endif
-#if defined(USE_THREADS)
-#define condpair_magic(a) Perl_condpair_magic(aTHX_ a)
-#endif
-#define convert(a,b,c) Perl_convert(aTHX_ a,b,c)
-#define vcroak(a,b) Perl_vcroak(aTHX_ a,b)
-#if defined(PERL_IMPLICIT_CONTEXT)
-#endif
-#define cv_ckproto(a,b,c) Perl_cv_ckproto(aTHX_ a,b,c)
-#define cv_clone(a) Perl_cv_clone(aTHX_ a)
-#define cv_const_sv(a) Perl_cv_const_sv(aTHX_ a)
-#define op_const_sv(a,b) Perl_op_const_sv(aTHX_ a,b)
-#define cv_undef(a) Perl_cv_undef(aTHX_ a)
-#define cx_dump(a) Perl_cx_dump(aTHX_ a)
-#define filter_add(a,b) Perl_filter_add(aTHX_ a,b)
-#define filter_del(a) Perl_filter_del(aTHX_ a)
-#define filter_read(a,b,c) Perl_filter_read(aTHX_ a,b,c)
-#define get_op_descs() Perl_get_op_descs(aTHX)
-#define get_op_names() Perl_get_op_names(aTHX)
-#define get_no_modify() Perl_get_no_modify(aTHX)
-#define get_opargs() Perl_get_opargs(aTHX)
-#define get_ppaddr() Perl_get_ppaddr(aTHX)
-#define cxinc() Perl_cxinc(aTHX)
-#define vdeb(a,b) Perl_vdeb(aTHX_ a,b)
-#define debprofdump() Perl_debprofdump(aTHX)
-#define debop(a) Perl_debop(aTHX_ a)
-#define debstack() Perl_debstack(aTHX)
-#define debstackptrs() Perl_debstackptrs(aTHX)
-#define delimcpy(a,b,c,d,e,f) Perl_delimcpy(aTHX_ a,b,c,d,e,f)
-#define deprecate(a) Perl_deprecate(aTHX_ a)
-#define vdie(a,b) Perl_vdie(aTHX_ a,b)
-#define die_where(a,b) Perl_die_where(aTHX_ a,b)
-#define dounwind(a) Perl_dounwind(aTHX_ a)
-#define do_aexec(a,b,c) Perl_do_aexec(aTHX_ a,b,c)
-#define do_aexec5(a,b,c,d,e) Perl_do_aexec5(aTHX_ a,b,c,d,e)
-#define do_binmode(a,b,c) Perl_do_binmode(aTHX_ a,b,c)
-#define do_chop(a,b) Perl_do_chop(aTHX_ a,b)
-#define do_close(a,b) Perl_do_close(aTHX_ a,b)
-#define do_eof(a) Perl_do_eof(aTHX_ a)
-#define do_exec(a) Perl_do_exec(aTHX_ a)
-#if !defined(WIN32)
-#define do_exec3(a,b,c) Perl_do_exec3(aTHX_ a,b,c)
-#endif
-#define do_execfree() Perl_do_execfree(aTHX)
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-#define do_ipcctl(a,b,c) Perl_do_ipcctl(aTHX_ a,b,c)
-#define do_ipcget(a,b,c) Perl_do_ipcget(aTHX_ a,b,c)
-#define do_msgrcv(a,b) Perl_do_msgrcv(aTHX_ a,b)
-#define do_msgsnd(a,b) Perl_do_msgsnd(aTHX_ a,b)
-#define do_semop(a,b) Perl_do_semop(aTHX_ a,b)
-#define do_shmio(a,b,c) Perl_do_shmio(aTHX_ a,b,c)
-#endif
-#define do_join(a,b,c,d) Perl_do_join(aTHX_ a,b,c,d)
-#define do_kv() Perl_do_kv(aTHX)
-#define do_open(a,b,c,d,e,f,g) Perl_do_open(aTHX_ a,b,c,d,e,f,g)
-#define do_open9(a,b,c,d,e,f,g,h,i) Perl_do_open9(aTHX_ a,b,c,d,e,f,g,h,i)
-#define do_pipe(a,b,c) Perl_do_pipe(aTHX_ a,b,c)
-#define do_print(a,b) Perl_do_print(aTHX_ a,b)
-#define do_readline() Perl_do_readline(aTHX)
-#define do_chomp(a) Perl_do_chomp(aTHX_ a)
-#define do_seek(a,b,c) Perl_do_seek(aTHX_ a,b,c)
-#define do_sprintf(a,b,c) Perl_do_sprintf(aTHX_ a,b,c)
-#define do_sysseek(a,b,c) Perl_do_sysseek(aTHX_ a,b,c)
-#define do_tell(a) Perl_do_tell(aTHX_ a)
-#define do_trans(a) Perl_do_trans(aTHX_ a)
-#define do_vecget(a,b,c) Perl_do_vecget(aTHX_ a,b,c)
-#define do_vecset(a) Perl_do_vecset(aTHX_ a)
-#define do_vop(a,b,c,d) Perl_do_vop(aTHX_ a,b,c,d)
-#define dofile(a) Perl_dofile(aTHX_ a)
-#define dowantarray() Perl_dowantarray(aTHX)
-#define dump_all() Perl_dump_all(aTHX)
-#define dump_eval() Perl_dump_eval(aTHX)
-#if defined(DUMP_FDS)
-#define dump_fds(a) Perl_dump_fds(aTHX_ a)
-#endif
-#define dump_form(a) Perl_dump_form(aTHX_ a)
-#define gv_dump(a) Perl_gv_dump(aTHX_ a)
-#define op_dump(a) Perl_op_dump(aTHX_ a)
-#define pmop_dump(a) Perl_pmop_dump(aTHX_ a)
-#define dump_packsubs(a) Perl_dump_packsubs(aTHX_ a)
-#define dump_sub(a) Perl_dump_sub(aTHX_ a)
-#define fbm_compile(a,b) Perl_fbm_compile(aTHX_ a,b)
-#define fbm_instr(a,b,c,d) Perl_fbm_instr(aTHX_ a,b,c,d)
-#define find_script(a,b,c,d) Perl_find_script(aTHX_ a,b,c,d)
-#if defined(USE_THREADS)
-#define find_threadsv(a) Perl_find_threadsv(aTHX_ a)
-#endif
-#define force_list(a) Perl_force_list(aTHX_ a)
-#define fold_constants(a) Perl_fold_constants(aTHX_ a)
-#define vform(a,b) Perl_vform(aTHX_ a,b)
-#define free_tmps() Perl_free_tmps(aTHX)
-#define gen_constant_list(a) Perl_gen_constant_list(aTHX_ a)
-#if !defined(HAS_GETENV_LEN)
-#define getenv_len(a,b) Perl_getenv_len(aTHX_ a,b)
-#endif
-#define gp_free(a) Perl_gp_free(aTHX_ a)
-#define gp_ref(a) Perl_gp_ref(aTHX_ a)
-#define gv_AVadd(a) Perl_gv_AVadd(aTHX_ a)
-#define gv_HVadd(a) Perl_gv_HVadd(aTHX_ a)
-#define gv_IOadd(a) Perl_gv_IOadd(aTHX_ a)
-#define gv_autoload4(a,b,c,d) Perl_gv_autoload4(aTHX_ a,b,c,d)
-#define gv_check(a) Perl_gv_check(aTHX_ a)
-#define gv_efullname(a,b) Perl_gv_efullname(aTHX_ a,b)
-#define gv_efullname3(a,b,c) Perl_gv_efullname3(aTHX_ a,b,c)
-#define gv_efullname4(a,b,c,d) Perl_gv_efullname4(aTHX_ a,b,c,d)
-#define gv_fetchfile(a) Perl_gv_fetchfile(aTHX_ a)
-#define gv_fetchmeth(a,b,c,d) Perl_gv_fetchmeth(aTHX_ a,b,c,d)
-#define gv_fetchmethod(a,b) Perl_gv_fetchmethod(aTHX_ a,b)
-#define gv_fetchmethod_autoload(a,b,c) Perl_gv_fetchmethod_autoload(aTHX_ a,b,c)
-#define gv_fetchpv(a,b,c) Perl_gv_fetchpv(aTHX_ a,b,c)
-#define gv_fullname(a,b) Perl_gv_fullname(aTHX_ a,b)
-#define gv_fullname3(a,b,c) Perl_gv_fullname3(aTHX_ a,b,c)
-#define gv_fullname4(a,b,c,d) Perl_gv_fullname4(aTHX_ a,b,c,d)
-#define gv_init(a,b,c,d,e) Perl_gv_init(aTHX_ a,b,c,d,e)
-#define gv_stashpv(a,b) Perl_gv_stashpv(aTHX_ a,b)
-#define gv_stashpvn(a,b,c) Perl_gv_stashpvn(aTHX_ a,b,c)
-#define gv_stashsv(a,b) Perl_gv_stashsv(aTHX_ a,b)
-#define hv_clear(a) Perl_hv_clear(aTHX_ a)
-#define hv_delayfree_ent(a,b) Perl_hv_delayfree_ent(aTHX_ a,b)
-#define hv_delete(a,b,c,d) Perl_hv_delete(aTHX_ a,b,c,d)
-#define hv_delete_ent(a,b,c,d) Perl_hv_delete_ent(aTHX_ a,b,c,d)
-#define hv_exists(a,b,c) Perl_hv_exists(aTHX_ a,b,c)
-#define hv_exists_ent(a,b,c) Perl_hv_exists_ent(aTHX_ a,b,c)
-#define hv_fetch(a,b,c,d) Perl_hv_fetch(aTHX_ a,b,c,d)
-#define hv_fetch_ent(a,b,c,d) Perl_hv_fetch_ent(aTHX_ a,b,c,d)
-#define hv_free_ent(a,b) Perl_hv_free_ent(aTHX_ a,b)
-#define hv_iterinit(a) Perl_hv_iterinit(aTHX_ a)
-#define hv_iterkey(a,b) Perl_hv_iterkey(aTHX_ a,b)
-#define hv_iterkeysv(a) Perl_hv_iterkeysv(aTHX_ a)
-#define hv_iternext(a) Perl_hv_iternext(aTHX_ a)
-#define hv_iternextsv(a,b,c) Perl_hv_iternextsv(aTHX_ a,b,c)
-#define hv_iterval(a,b) Perl_hv_iterval(aTHX_ a,b)
-#define hv_ksplit(a,b) Perl_hv_ksplit(aTHX_ a,b)
-#define hv_magic(a,b,c) Perl_hv_magic(aTHX_ a,b,c)
-#define hv_store(a,b,c,d,e) Perl_hv_store(aTHX_ a,b,c,d,e)
-#define hv_store_ent(a,b,c,d) Perl_hv_store_ent(aTHX_ a,b,c,d)
-#define hv_undef(a) Perl_hv_undef(aTHX_ a)
-#define ibcmp(a,b,c) Perl_ibcmp(aTHX_ a,b,c)
-#define ibcmp_locale(a,b,c) Perl_ibcmp_locale(aTHX_ a,b,c)
-#define ingroup(a,b) Perl_ingroup(aTHX_ a,b)
-#define init_debugger() Perl_init_debugger(aTHX)
-#define init_stacks() Perl_init_stacks(aTHX)
-#define intro_my() Perl_intro_my(aTHX)
-#define instr(a,b) Perl_instr(aTHX_ a,b)
-#define io_close(a,b) Perl_io_close(aTHX_ a,b)
-#define invert(a) Perl_invert(aTHX_ a)
-#define is_gv_magical(a,b,c) Perl_is_gv_magical(aTHX_ a,b,c)
-#define is_lvalue_sub() Perl_is_lvalue_sub(aTHX)
-#define is_uni_alnum(a) Perl_is_uni_alnum(aTHX_ a)
-#define is_uni_alnumc(a) Perl_is_uni_alnumc(aTHX_ a)
-#define is_uni_idfirst(a) Perl_is_uni_idfirst(aTHX_ a)
-#define is_uni_alpha(a) Perl_is_uni_alpha(aTHX_ a)
-#define is_uni_ascii(a) Perl_is_uni_ascii(aTHX_ a)
-#define is_uni_space(a) Perl_is_uni_space(aTHX_ a)
-#define is_uni_cntrl(a) Perl_is_uni_cntrl(aTHX_ a)
-#define is_uni_graph(a) Perl_is_uni_graph(aTHX_ a)
-#define is_uni_digit(a) Perl_is_uni_digit(aTHX_ a)
-#define is_uni_upper(a) Perl_is_uni_upper(aTHX_ a)
-#define is_uni_lower(a) Perl_is_uni_lower(aTHX_ a)
-#define is_uni_print(a) Perl_is_uni_print(aTHX_ a)
-#define is_uni_punct(a) Perl_is_uni_punct(aTHX_ a)
-#define is_uni_xdigit(a) Perl_is_uni_xdigit(aTHX_ a)
-#define to_uni_upper(a) Perl_to_uni_upper(aTHX_ a)
-#define to_uni_title(a) Perl_to_uni_title(aTHX_ a)
-#define to_uni_lower(a) Perl_to_uni_lower(aTHX_ a)
-#define is_uni_alnum_lc(a) Perl_is_uni_alnum_lc(aTHX_ a)
-#define is_uni_alnumc_lc(a) Perl_is_uni_alnumc_lc(aTHX_ a)
-#define is_uni_idfirst_lc(a) Perl_is_uni_idfirst_lc(aTHX_ a)
-#define is_uni_alpha_lc(a) Perl_is_uni_alpha_lc(aTHX_ a)
-#define is_uni_ascii_lc(a) Perl_is_uni_ascii_lc(aTHX_ a)
-#define is_uni_space_lc(a) Perl_is_uni_space_lc(aTHX_ a)
-#define is_uni_cntrl_lc(a) Perl_is_uni_cntrl_lc(aTHX_ a)
-#define is_uni_graph_lc(a) Perl_is_uni_graph_lc(aTHX_ a)
-#define is_uni_digit_lc(a) Perl_is_uni_digit_lc(aTHX_ a)
-#define is_uni_upper_lc(a) Perl_is_uni_upper_lc(aTHX_ a)
-#define is_uni_lower_lc(a) Perl_is_uni_lower_lc(aTHX_ a)
-#define is_uni_print_lc(a) Perl_is_uni_print_lc(aTHX_ a)
-#define is_uni_punct_lc(a) Perl_is_uni_punct_lc(aTHX_ a)
-#define is_uni_xdigit_lc(a) Perl_is_uni_xdigit_lc(aTHX_ a)
-#define to_uni_upper_lc(a) Perl_to_uni_upper_lc(aTHX_ a)
-#define to_uni_title_lc(a) Perl_to_uni_title_lc(aTHX_ a)
-#define to_uni_lower_lc(a) Perl_to_uni_lower_lc(aTHX_ a)
-#define is_utf8_char(a) Perl_is_utf8_char(aTHX_ a)
-#define is_utf8_string(a,b) Perl_is_utf8_string(aTHX_ a,b)
-#define is_utf8_alnum(a) Perl_is_utf8_alnum(aTHX_ a)
-#define is_utf8_alnumc(a) Perl_is_utf8_alnumc(aTHX_ a)
-#define is_utf8_idfirst(a) Perl_is_utf8_idfirst(aTHX_ a)
-#define is_utf8_alpha(a) Perl_is_utf8_alpha(aTHX_ a)
-#define is_utf8_ascii(a) Perl_is_utf8_ascii(aTHX_ a)
-#define is_utf8_space(a) Perl_is_utf8_space(aTHX_ a)
-#define is_utf8_cntrl(a) Perl_is_utf8_cntrl(aTHX_ a)
-#define is_utf8_digit(a) Perl_is_utf8_digit(aTHX_ a)
-#define is_utf8_graph(a) Perl_is_utf8_graph(aTHX_ a)
-#define is_utf8_upper(a) Perl_is_utf8_upper(aTHX_ a)
-#define is_utf8_lower(a) Perl_is_utf8_lower(aTHX_ a)
-#define is_utf8_print(a) Perl_is_utf8_print(aTHX_ a)
-#define is_utf8_punct(a) Perl_is_utf8_punct(aTHX_ a)
-#define is_utf8_xdigit(a) Perl_is_utf8_xdigit(aTHX_ a)
-#define is_utf8_mark(a) Perl_is_utf8_mark(aTHX_ a)
-#define jmaybe(a) Perl_jmaybe(aTHX_ a)
-#define keyword(a,b) Perl_keyword(aTHX_ a,b)
-#define leave_scope(a) Perl_leave_scope(aTHX_ a)
-#define lex_end() Perl_lex_end(aTHX)
-#define lex_start(a) Perl_lex_start(aTHX_ a)
-#define linklist(a) Perl_linklist(aTHX_ a)
-#define list(a) Perl_list(aTHX_ a)
-#define listkids(a) Perl_listkids(aTHX_ a)
-#define vload_module(a,b,c,d) Perl_vload_module(aTHX_ a,b,c,d)
-#define localize(a,b) Perl_localize(aTHX_ a,b)
-#define looks_like_number(a) Perl_looks_like_number(aTHX_ a)
-#define magic_clearenv(a,b) Perl_magic_clearenv(aTHX_ a,b)
-#define magic_clear_all_env(a,b) Perl_magic_clear_all_env(aTHX_ a,b)
-#define magic_clearpack(a,b) Perl_magic_clearpack(aTHX_ a,b)
-#define magic_clearsig(a,b) Perl_magic_clearsig(aTHX_ a,b)
-#define magic_existspack(a,b) Perl_magic_existspack(aTHX_ a,b)
-#define magic_freeregexp(a,b) Perl_magic_freeregexp(aTHX_ a,b)
-#define magic_get(a,b) Perl_magic_get(aTHX_ a,b)
-#define magic_getarylen(a,b) Perl_magic_getarylen(aTHX_ a,b)
-#define magic_getdefelem(a,b) Perl_magic_getdefelem(aTHX_ a,b)
-#define magic_getglob(a,b) Perl_magic_getglob(aTHX_ a,b)
-#define magic_getnkeys(a,b) Perl_magic_getnkeys(aTHX_ a,b)
-#define magic_getpack(a,b) Perl_magic_getpack(aTHX_ a,b)
-#define magic_getpos(a,b) Perl_magic_getpos(aTHX_ a,b)
-#define magic_getsig(a,b) Perl_magic_getsig(aTHX_ a,b)
-#define magic_getsubstr(a,b) Perl_magic_getsubstr(aTHX_ a,b)
-#define magic_gettaint(a,b) Perl_magic_gettaint(aTHX_ a,b)
-#define magic_getuvar(a,b) Perl_magic_getuvar(aTHX_ a,b)
-#define magic_getvec(a,b) Perl_magic_getvec(aTHX_ a,b)
-#define magic_len(a,b) Perl_magic_len(aTHX_ a,b)
-#if defined(USE_THREADS)
-#define magic_mutexfree(a,b) Perl_magic_mutexfree(aTHX_ a,b)
-#endif
-#define magic_nextpack(a,b,c) Perl_magic_nextpack(aTHX_ a,b,c)
-#define magic_regdata_cnt(a,b) Perl_magic_regdata_cnt(aTHX_ a,b)
-#define magic_regdatum_get(a,b) Perl_magic_regdatum_get(aTHX_ a,b)
-#define magic_regdatum_set(a,b) Perl_magic_regdatum_set(aTHX_ a,b)
-#define magic_set(a,b) Perl_magic_set(aTHX_ a,b)
-#define magic_setamagic(a,b) Perl_magic_setamagic(aTHX_ a,b)
-#define magic_setarylen(a,b) Perl_magic_setarylen(aTHX_ a,b)
-#define magic_setbm(a,b) Perl_magic_setbm(aTHX_ a,b)
-#define magic_setdbline(a,b) Perl_magic_setdbline(aTHX_ a,b)
-#if defined(USE_LOCALE_COLLATE)
-#define magic_setcollxfrm(a,b) Perl_magic_setcollxfrm(aTHX_ a,b)
-#endif
-#define magic_setdefelem(a,b) Perl_magic_setdefelem(aTHX_ a,b)
-#define magic_setenv(a,b) Perl_magic_setenv(aTHX_ a,b)
-#define magic_setfm(a,b) Perl_magic_setfm(aTHX_ a,b)
-#define magic_setisa(a,b) Perl_magic_setisa(aTHX_ a,b)
-#define magic_setglob(a,b) Perl_magic_setglob(aTHX_ a,b)
-#define magic_setmglob(a,b) Perl_magic_setmglob(aTHX_ a,b)
-#define magic_setnkeys(a,b) Perl_magic_setnkeys(aTHX_ a,b)
-#define magic_setpack(a,b) Perl_magic_setpack(aTHX_ a,b)
-#define magic_setpos(a,b) Perl_magic_setpos(aTHX_ a,b)
-#define magic_setsig(a,b) Perl_magic_setsig(aTHX_ a,b)
-#define magic_setsubstr(a,b) Perl_magic_setsubstr(aTHX_ a,b)
-#define magic_settaint(a,b) Perl_magic_settaint(aTHX_ a,b)
-#define magic_setuvar(a,b) Perl_magic_setuvar(aTHX_ a,b)
-#define magic_setvec(a,b) Perl_magic_setvec(aTHX_ a,b)
-#define magic_set_all_env(a,b) Perl_magic_set_all_env(aTHX_ a,b)
-#define magic_sizepack(a,b) Perl_magic_sizepack(aTHX_ a,b)
-#define magic_wipepack(a,b) Perl_magic_wipepack(aTHX_ a,b)
-#define magicname(a,b,c) Perl_magicname(aTHX_ a,b,c)
-#define markstack_grow() Perl_markstack_grow(aTHX)
-#if defined(USE_LOCALE_COLLATE)
-#define mem_collxfrm(a,b,c) Perl_mem_collxfrm(aTHX_ a,b,c)
-#endif
-#define vmess(a,b) Perl_vmess(aTHX_ a,b)
-#define qerror(a) Perl_qerror(aTHX_ a)
-#define mg_clear(a) Perl_mg_clear(aTHX_ a)
-#define mg_copy(a,b,c,d) Perl_mg_copy(aTHX_ a,b,c,d)
-#define mg_find(a,b) Perl_mg_find(aTHX_ a,b)
-#define mg_free(a) Perl_mg_free(aTHX_ a)
-#define mg_get(a) Perl_mg_get(aTHX_ a)
-#define mg_length(a) Perl_mg_length(aTHX_ a)
-#define mg_magical(a) Perl_mg_magical(aTHX_ a)
-#define mg_set(a) Perl_mg_set(aTHX_ a)
-#define mg_size(a) Perl_mg_size(aTHX_ a)
-#define mod(a,b) Perl_mod(aTHX_ a,b)
-#define mode_from_discipline(a) Perl_mode_from_discipline(aTHX_ a)
-#define moreswitches(a) Perl_moreswitches(aTHX_ a)
-#define my(a) Perl_my(aTHX_ a)
-#define my_atof(a) Perl_my_atof(aTHX_ a)
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
-#define my_bcopy Perl_my_bcopy
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-#define my_bzero Perl_my_bzero
-#endif
-#define my_exit(a) Perl_my_exit(aTHX_ a)
-#define my_failure_exit() Perl_my_failure_exit(aTHX)
-#define my_fflush_all() Perl_my_fflush_all(aTHX)
-#define my_lstat() Perl_my_lstat(aTHX)
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-#define my_memcmp Perl_my_memcmp
-#endif
-#if !defined(HAS_MEMSET)
-#define my_memset Perl_my_memset
-#endif
-#if !defined(PERL_OBJECT)
-#define my_pclose(a) Perl_my_pclose(aTHX_ a)
-#define my_popen(a,b) Perl_my_popen(aTHX_ a,b)
-#endif
-#define my_setenv(a,b) Perl_my_setenv(aTHX_ a,b)
-#define my_stat() Perl_my_stat(aTHX)
-#if defined(MYSWAP)
-#define my_swap(a) Perl_my_swap(aTHX_ a)
-#define my_htonl(a) Perl_my_htonl(aTHX_ a)
-#define my_ntohl(a) Perl_my_ntohl(aTHX_ a)
-#endif
-#define my_unexec() Perl_my_unexec(aTHX)
-#define newANONLIST(a) Perl_newANONLIST(aTHX_ a)
-#define newANONHASH(a) Perl_newANONHASH(aTHX_ a)
-#define newANONSUB(a,b,c) Perl_newANONSUB(aTHX_ a,b,c)
-#define newASSIGNOP(a,b,c,d) Perl_newASSIGNOP(aTHX_ a,b,c,d)
-#define newCONDOP(a,b,c,d) Perl_newCONDOP(aTHX_ a,b,c,d)
-#define newCONSTSUB(a,b,c) Perl_newCONSTSUB(aTHX_ a,b,c)
-#define newFORM(a,b,c) Perl_newFORM(aTHX_ a,b,c)
-#define newFOROP(a,b,c,d,e,f,g) Perl_newFOROP(aTHX_ a,b,c,d,e,f,g)
-#define newLOGOP(a,b,c,d) Perl_newLOGOP(aTHX_ a,b,c,d)
-#define newLOOPEX(a,b) Perl_newLOOPEX(aTHX_ a,b)
-#define newLOOPOP(a,b,c,d) Perl_newLOOPOP(aTHX_ a,b,c,d)
-#define newNULLLIST() Perl_newNULLLIST(aTHX)
-#define newOP(a,b) Perl_newOP(aTHX_ a,b)
-#define newPROG(a) Perl_newPROG(aTHX_ a)
-#define newRANGE(a,b,c) Perl_newRANGE(aTHX_ a,b,c)
-#define newSLICEOP(a,b,c) Perl_newSLICEOP(aTHX_ a,b,c)
-#define newSTATEOP(a,b,c) Perl_newSTATEOP(aTHX_ a,b,c)
-#define newSUB(a,b,c,d) Perl_newSUB(aTHX_ a,b,c,d)
-#define newXS(a,b,c) Perl_newXS(aTHX_ a,b,c)
-#define newAV() Perl_newAV(aTHX)
-#define newAVREF(a) Perl_newAVREF(aTHX_ a)
-#define newBINOP(a,b,c,d) Perl_newBINOP(aTHX_ a,b,c,d)
-#define newCVREF(a,b) Perl_newCVREF(aTHX_ a,b)
-#define newGVOP(a,b,c) Perl_newGVOP(aTHX_ a,b,c)
-#define newGVgen(a) Perl_newGVgen(aTHX_ a)
-#define newGVREF(a,b) Perl_newGVREF(aTHX_ a,b)
-#define newHVREF(a) Perl_newHVREF(aTHX_ a)
-#define newHV() Perl_newHV(aTHX)
-#define newHVhv(a) Perl_newHVhv(aTHX_ a)
-#define newIO() Perl_newIO(aTHX)
-#define newLISTOP(a,b,c,d) Perl_newLISTOP(aTHX_ a,b,c,d)
-#define newPADOP(a,b,c) Perl_newPADOP(aTHX_ a,b,c)
-#define newPMOP(a,b) Perl_newPMOP(aTHX_ a,b)
-#define newPVOP(a,b,c) Perl_newPVOP(aTHX_ a,b,c)
-#define newRV(a) Perl_newRV(aTHX_ a)
-#define newRV_noinc(a) Perl_newRV_noinc(aTHX_ a)
-#define newSV(a) Perl_newSV(aTHX_ a)
-#define newSVREF(a) Perl_newSVREF(aTHX_ a)
-#define newSVOP(a,b,c) Perl_newSVOP(aTHX_ a,b,c)
-#define newSViv(a) Perl_newSViv(aTHX_ a)
-#define newSVuv(a) Perl_newSVuv(aTHX_ a)
-#define newSVnv(a) Perl_newSVnv(aTHX_ a)
-#define newSVpv(a,b) Perl_newSVpv(aTHX_ a,b)
-#define newSVpvn(a,b) Perl_newSVpvn(aTHX_ a,b)
-#define vnewSVpvf(a,b) Perl_vnewSVpvf(aTHX_ a,b)
-#define newSVrv(a,b) Perl_newSVrv(aTHX_ a,b)
-#define newSVsv(a) Perl_newSVsv(aTHX_ a)
-#define newUNOP(a,b,c) Perl_newUNOP(aTHX_ a,b,c)
-#define newWHILEOP(a,b,c,d,e,f,g) Perl_newWHILEOP(aTHX_ a,b,c,d,e,f,g)
-#define new_stackinfo(a,b) Perl_new_stackinfo(aTHX_ a,b)
-#define nextargv(a) Perl_nextargv(aTHX_ a)
-#define ninstr(a,b,c,d) Perl_ninstr(aTHX_ a,b,c,d)
-#define oopsCV(a) Perl_oopsCV(aTHX_ a)
-#define op_free(a) Perl_op_free(aTHX_ a)
-#define package(a) Perl_package(aTHX_ a)
-#define pad_alloc(a,b) Perl_pad_alloc(aTHX_ a,b)
-#define pad_allocmy(a) Perl_pad_allocmy(aTHX_ a)
-#define pad_findmy(a) Perl_pad_findmy(aTHX_ a)
-#define oopsAV(a) Perl_oopsAV(aTHX_ a)
-#define oopsHV(a) Perl_oopsHV(aTHX_ a)
-#define pad_leavemy(a) Perl_pad_leavemy(aTHX_ a)
-#define pad_sv(a) Perl_pad_sv(aTHX_ a)
-#define pad_free(a) Perl_pad_free(aTHX_ a)
-#define pad_reset() Perl_pad_reset(aTHX)
-#define pad_swipe(a) Perl_pad_swipe(aTHX_ a)
-#define peep(a) Perl_peep(aTHX_ a)
-#if defined(PERL_OBJECT)
-#endif
-#if defined(USE_THREADS)
-#define new_struct_thread(a) Perl_new_struct_thread(aTHX_ a)
-#endif
-#define call_atexit(a,b) Perl_call_atexit(aTHX_ a,b)
-#define call_argv(a,b,c) Perl_call_argv(aTHX_ a,b,c)
-#define call_method(a,b) Perl_call_method(aTHX_ a,b)
-#define call_pv(a,b) Perl_call_pv(aTHX_ a,b)
-#define call_sv(a,b) Perl_call_sv(aTHX_ a,b)
-#define eval_pv(a,b) Perl_eval_pv(aTHX_ a,b)
-#define eval_sv(a,b) Perl_eval_sv(aTHX_ a,b)
-#define get_sv(a,b) Perl_get_sv(aTHX_ a,b)
-#define get_av(a,b) Perl_get_av(aTHX_ a,b)
-#define get_hv(a,b) Perl_get_hv(aTHX_ a,b)
-#define get_cv(a,b) Perl_get_cv(aTHX_ a,b)
-#define init_i18nl10n(a) Perl_init_i18nl10n(aTHX_ a)
-#define init_i18nl14n(a) Perl_init_i18nl14n(aTHX_ a)
-#define new_collate(a) Perl_new_collate(aTHX_ a)
-#define new_ctype(a) Perl_new_ctype(aTHX_ a)
-#define new_numeric(a) Perl_new_numeric(aTHX_ a)
-#define set_numeric_local() Perl_set_numeric_local(aTHX)
-#define set_numeric_radix() Perl_set_numeric_radix(aTHX)
-#define set_numeric_standard() Perl_set_numeric_standard(aTHX)
-#define require_pv(a) Perl_require_pv(aTHX_ a)
-#define pidgone(a,b) Perl_pidgone(aTHX_ a,b)
-#define pmflag(a,b) Perl_pmflag(aTHX_ a,b)
-#define pmruntime(a,b,c) Perl_pmruntime(aTHX_ a,b,c)
-#define pmtrans(a,b,c) Perl_pmtrans(aTHX_ a,b,c)
-#define pop_return() Perl_pop_return(aTHX)
-#define pop_scope() Perl_pop_scope(aTHX)
-#define prepend_elem(a,b,c) Perl_prepend_elem(aTHX_ a,b,c)
-#define push_return(a) Perl_push_return(aTHX_ a)
-#define push_scope() Perl_push_scope(aTHX)
-#define ref(a,b) Perl_ref(aTHX_ a,b)
-#define refkids(a,b) Perl_refkids(aTHX_ a,b)
-#define regdump(a) Perl_regdump(aTHX_ a)
-#define pregexec(a,b,c,d,e,f,g) Perl_pregexec(aTHX_ a,b,c,d,e,f,g)
-#define pregfree(a) Perl_pregfree(aTHX_ a)
-#define pregcomp(a,b,c) Perl_pregcomp(aTHX_ a,b,c)
-#define re_intuit_start(a,b,c,d,e,f) Perl_re_intuit_start(aTHX_ a,b,c,d,e,f)
-#define re_intuit_string(a) Perl_re_intuit_string(aTHX_ a)
-#define regexec_flags(a,b,c,d,e,f,g,h) Perl_regexec_flags(aTHX_ a,b,c,d,e,f,g,h)
-#define regnext(a) Perl_regnext(aTHX_ a)
-#define regprop(a,b) Perl_regprop(aTHX_ a,b)
-#define repeatcpy(a,b,c,d) Perl_repeatcpy(aTHX_ a,b,c,d)
-#define rninstr(a,b,c,d) Perl_rninstr(aTHX_ a,b,c,d)
-#define rsignal(a,b) Perl_rsignal(aTHX_ a,b)
-#define rsignal_restore(a,b) Perl_rsignal_restore(aTHX_ a,b)
-#define rsignal_save(a,b,c) Perl_rsignal_save(aTHX_ a,b,c)
-#define rsignal_state(a) Perl_rsignal_state(aTHX_ a)
-#define rxres_free(a) Perl_rxres_free(aTHX_ a)
-#define rxres_restore(a,b) Perl_rxres_restore(aTHX_ a,b)
-#define rxres_save(a,b) Perl_rxres_save(aTHX_ a,b)
-#if !defined(HAS_RENAME)
-#define same_dirent(a,b) Perl_same_dirent(aTHX_ a,b)
-#endif
-#define savepv(a) Perl_savepv(aTHX_ a)
-#define savepvn(a,b) Perl_savepvn(aTHX_ a,b)
-#define savestack_grow() Perl_savestack_grow(aTHX)
-#define save_aelem(a,b,c) Perl_save_aelem(aTHX_ a,b,c)
-#define save_alloc(a,b) Perl_save_alloc(aTHX_ a,b)
-#define save_aptr(a) Perl_save_aptr(aTHX_ a)
-#define save_ary(a) Perl_save_ary(aTHX_ a)
-#define save_clearsv(a) Perl_save_clearsv(aTHX_ a)
-#define save_delete(a,b,c) Perl_save_delete(aTHX_ a,b,c)
-#define save_destructor(a,b) Perl_save_destructor(aTHX_ a,b)
-#define save_destructor_x(a,b) Perl_save_destructor_x(aTHX_ a,b)
-#define save_freesv(a) Perl_save_freesv(aTHX_ a)
-#define save_freeop(a) Perl_save_freeop(aTHX_ a)
-#define save_freepv(a) Perl_save_freepv(aTHX_ a)
-#define save_generic_svref(a) Perl_save_generic_svref(aTHX_ a)
-#define save_generic_pvref(a) Perl_save_generic_pvref(aTHX_ a)
-#define save_gp(a,b) Perl_save_gp(aTHX_ a,b)
-#define save_hash(a) Perl_save_hash(aTHX_ a)
-#define save_helem(a,b,c) Perl_save_helem(aTHX_ a,b,c)
-#define save_hints() Perl_save_hints(aTHX)
-#define save_hptr(a) Perl_save_hptr(aTHX_ a)
-#define save_I16(a) Perl_save_I16(aTHX_ a)
-#define save_I32(a) Perl_save_I32(aTHX_ a)
-#define save_I8(a) Perl_save_I8(aTHX_ a)
-#define save_int(a) Perl_save_int(aTHX_ a)
-#define save_item(a) Perl_save_item(aTHX_ a)
-#define save_iv(a) Perl_save_iv(aTHX_ a)
-#define save_list(a,b) Perl_save_list(aTHX_ a,b)
-#define save_long(a) Perl_save_long(aTHX_ a)
-#define save_mortalizesv(a) Perl_save_mortalizesv(aTHX_ a)
-#define save_nogv(a) Perl_save_nogv(aTHX_ a)
-#define save_op() Perl_save_op(aTHX)
-#define save_scalar(a) Perl_save_scalar(aTHX_ a)
-#define save_pptr(a) Perl_save_pptr(aTHX_ a)
-#define save_vptr(a) Perl_save_vptr(aTHX_ a)
-#define save_re_context() Perl_save_re_context(aTHX)
-#define save_padsv(a) Perl_save_padsv(aTHX_ a)
-#define save_sptr(a) Perl_save_sptr(aTHX_ a)
-#define save_svref(a) Perl_save_svref(aTHX_ a)
-#define save_threadsv(a) Perl_save_threadsv(aTHX_ a)
-#define sawparens(a) Perl_sawparens(aTHX_ a)
-#define scalar(a) Perl_scalar(aTHX_ a)
-#define scalarkids(a) Perl_scalarkids(aTHX_ a)
-#define scalarseq(a) Perl_scalarseq(aTHX_ a)
-#define scalarvoid(a) Perl_scalarvoid(aTHX_ a)
-#define scan_bin(a,b,c) Perl_scan_bin(aTHX_ a,b,c)
-#define scan_hex(a,b,c) Perl_scan_hex(aTHX_ a,b,c)
-#define scan_num(a,b) Perl_scan_num(aTHX_ a,b)
-#define scan_oct(a,b,c) Perl_scan_oct(aTHX_ a,b,c)
-#define scope(a) Perl_scope(aTHX_ a)
-#define screaminstr(a,b,c,d,e,f) Perl_screaminstr(aTHX_ a,b,c,d,e,f)
-#if !defined(VMS)
-#define setenv_getix(a) Perl_setenv_getix(aTHX_ a)
-#endif
-#define setdefout(a) Perl_setdefout(aTHX_ a)
-#define sharepvn(a,b,c) Perl_sharepvn(aTHX_ a,b,c)
-#define share_hek(a,b,c) Perl_share_hek(aTHX_ a,b,c)
-#define sighandler Perl_sighandler
-#define stack_grow(a,b,c) Perl_stack_grow(aTHX_ a,b,c)
-#define start_subparse(a,b) Perl_start_subparse(aTHX_ a,b)
-#define sub_crush_depth(a) Perl_sub_crush_depth(aTHX_ a)
-#define sv_2bool(a) Perl_sv_2bool(aTHX_ a)
-#define sv_2cv(a,b,c,d) Perl_sv_2cv(aTHX_ a,b,c,d)
-#define sv_2io(a) Perl_sv_2io(aTHX_ a)
-#define sv_2iv(a) Perl_sv_2iv(aTHX_ a)
-#define sv_2mortal(a) Perl_sv_2mortal(aTHX_ a)
-#define sv_2nv(a) Perl_sv_2nv(aTHX_ a)
-#define sv_2pv(a,b) Perl_sv_2pv(aTHX_ a,b)
-#define sv_2pvutf8(a,b) Perl_sv_2pvutf8(aTHX_ a,b)
-#define sv_2pvbyte(a,b) Perl_sv_2pvbyte(aTHX_ a,b)
-#define sv_2uv(a) Perl_sv_2uv(aTHX_ a)
-#define sv_iv(a) Perl_sv_iv(aTHX_ a)
-#define sv_uv(a) Perl_sv_uv(aTHX_ a)
-#define sv_nv(a) Perl_sv_nv(aTHX_ a)
-#define sv_pvn(a,b) Perl_sv_pvn(aTHX_ a,b)
-#define sv_pvutf8n(a,b) Perl_sv_pvutf8n(aTHX_ a,b)
-#define sv_pvbyten(a,b) Perl_sv_pvbyten(aTHX_ a,b)
-#define sv_true(a) Perl_sv_true(aTHX_ a)
-#define sv_add_arena(a,b,c) Perl_sv_add_arena(aTHX_ a,b,c)
-#define sv_backoff(a) Perl_sv_backoff(aTHX_ a)
-#define sv_bless(a,b) Perl_sv_bless(aTHX_ a,b)
-#define sv_vcatpvf(a,b,c) Perl_sv_vcatpvf(aTHX_ a,b,c)
-#define sv_catpv(a,b) Perl_sv_catpv(aTHX_ a,b)
-#define sv_catpvn(a,b,c) Perl_sv_catpvn(aTHX_ a,b,c)
-#define sv_catsv(a,b) Perl_sv_catsv(aTHX_ a,b)
-#define sv_chop(a,b) Perl_sv_chop(aTHX_ a,b)
-#define sv_clean_all() Perl_sv_clean_all(aTHX)
-#define sv_clean_objs() Perl_sv_clean_objs(aTHX)
-#define sv_clear(a) Perl_sv_clear(aTHX_ a)
-#define sv_cmp(a,b) Perl_sv_cmp(aTHX_ a,b)
-#define sv_cmp_locale(a,b) Perl_sv_cmp_locale(aTHX_ a,b)
-#if defined(USE_LOCALE_COLLATE)
-#define sv_collxfrm(a,b) Perl_sv_collxfrm(aTHX_ a,b)
-#endif
-#define sv_compile_2op(a,b,c,d) Perl_sv_compile_2op(aTHX_ a,b,c,d)
-#define sv_dec(a) Perl_sv_dec(aTHX_ a)
-#define sv_dump(a) Perl_sv_dump(aTHX_ a)
-#define sv_derived_from(a,b) Perl_sv_derived_from(aTHX_ a,b)
-#define sv_eq(a,b) Perl_sv_eq(aTHX_ a,b)
-#define sv_free(a) Perl_sv_free(aTHX_ a)
-#define sv_free_arenas() Perl_sv_free_arenas(aTHX)
-#define sv_gets(a,b,c) Perl_sv_gets(aTHX_ a,b,c)
-#define sv_grow(a,b) Perl_sv_grow(aTHX_ a,b)
-#define sv_inc(a) Perl_sv_inc(aTHX_ a)
-#define sv_insert(a,b,c,d,e) Perl_sv_insert(aTHX_ a,b,c,d,e)
-#define sv_isa(a,b) Perl_sv_isa(aTHX_ a,b)
-#define sv_isobject(a) Perl_sv_isobject(aTHX_ a)
-#define sv_len(a) Perl_sv_len(aTHX_ a)
-#define sv_len_utf8(a) Perl_sv_len_utf8(aTHX_ a)
-#define sv_magic(a,b,c,d,e) Perl_sv_magic(aTHX_ a,b,c,d,e)
-#define sv_mortalcopy(a) Perl_sv_mortalcopy(aTHX_ a)
-#define sv_newmortal() Perl_sv_newmortal(aTHX)
-#define sv_newref(a) Perl_sv_newref(aTHX_ a)
-#define sv_peek(a) Perl_sv_peek(aTHX_ a)
-#define sv_pos_u2b(a,b,c) Perl_sv_pos_u2b(aTHX_ a,b,c)
-#define sv_pos_b2u(a,b) Perl_sv_pos_b2u(aTHX_ a,b)
-#define sv_pvn_force(a,b) Perl_sv_pvn_force(aTHX_ a,b)
-#define sv_pvutf8n_force(a,b) Perl_sv_pvutf8n_force(aTHX_ a,b)
-#define sv_pvbyten_force(a,b) Perl_sv_pvbyten_force(aTHX_ a,b)
-#define sv_reftype(a,b) Perl_sv_reftype(aTHX_ a,b)
-#define sv_replace(a,b) Perl_sv_replace(aTHX_ a,b)
-#define sv_report_used() Perl_sv_report_used(aTHX)
-#define sv_reset(a,b) Perl_sv_reset(aTHX_ a,b)
-#define sv_vsetpvf(a,b,c) Perl_sv_vsetpvf(aTHX_ a,b,c)
-#define sv_setiv(a,b) Perl_sv_setiv(aTHX_ a,b)
-#define sv_setpviv(a,b) Perl_sv_setpviv(aTHX_ a,b)
-#define sv_setuv(a,b) Perl_sv_setuv(aTHX_ a,b)
-#define sv_setnv(a,b) Perl_sv_setnv(aTHX_ a,b)
-#define sv_setref_iv(a,b,c) Perl_sv_setref_iv(aTHX_ a,b,c)
-#define sv_setref_nv(a,b,c) Perl_sv_setref_nv(aTHX_ a,b,c)
-#define sv_setref_pv(a,b,c) Perl_sv_setref_pv(aTHX_ a,b,c)
-#define sv_setref_pvn(a,b,c,d) Perl_sv_setref_pvn(aTHX_ a,b,c,d)
-#define sv_setpv(a,b) Perl_sv_setpv(aTHX_ a,b)
-#define sv_setpvn(a,b,c) Perl_sv_setpvn(aTHX_ a,b,c)
-#define sv_setsv(a,b) Perl_sv_setsv(aTHX_ a,b)
-#define sv_taint(a) Perl_sv_taint(aTHX_ a)
-#define sv_tainted(a) Perl_sv_tainted(aTHX_ a)
-#define sv_unmagic(a,b) Perl_sv_unmagic(aTHX_ a,b)
-#define sv_unref(a) Perl_sv_unref(aTHX_ a)
-#define sv_untaint(a) Perl_sv_untaint(aTHX_ a)
-#define sv_upgrade(a,b) Perl_sv_upgrade(aTHX_ a,b)
-#define sv_usepvn(a,b,c) Perl_sv_usepvn(aTHX_ a,b,c)
-#define sv_vcatpvfn(a,b,c,d,e,f,g) Perl_sv_vcatpvfn(aTHX_ a,b,c,d,e,f,g)
-#define sv_vsetpvfn(a,b,c,d,e,f,g) Perl_sv_vsetpvfn(aTHX_ a,b,c,d,e,f,g)
-#define str_to_version(a) Perl_str_to_version(aTHX_ a)
-#define swash_init(a,b,c,d,e) Perl_swash_init(aTHX_ a,b,c,d,e)
-#define swash_fetch(a,b) Perl_swash_fetch(aTHX_ a,b)
-#define taint_env() Perl_taint_env(aTHX)
-#define taint_proper(a,b) Perl_taint_proper(aTHX_ a,b)
-#define to_utf8_lower(a) Perl_to_utf8_lower(aTHX_ a)
-#define to_utf8_upper(a) Perl_to_utf8_upper(aTHX_ a)
-#define to_utf8_title(a) Perl_to_utf8_title(aTHX_ a)
-#if defined(UNLINK_ALL_VERSIONS)
-#define unlnk(a) Perl_unlnk(aTHX_ a)
-#endif
-#if defined(USE_THREADS)
-#define unlock_condpair(a) Perl_unlock_condpair(aTHX_ a)
-#endif
-#define unsharepvn(a,b,c) Perl_unsharepvn(aTHX_ a,b,c)
-#define unshare_hek(a) Perl_unshare_hek(aTHX_ a)
-#define utilize(a,b,c,d,e) Perl_utilize(aTHX_ a,b,c,d,e)
-#define utf16_to_utf8(a,b,c,d) Perl_utf16_to_utf8(aTHX_ a,b,c,d)
-#define utf16_to_utf8_reversed(a,b,c,d) Perl_utf16_to_utf8_reversed(aTHX_ a,b,c,d)
-#define utf8_length(a,b) Perl_utf8_length(aTHX_ a,b)
-#define utf8_distance(a,b) Perl_utf8_distance(aTHX_ a,b)
-#define utf8_hop(a,b) Perl_utf8_hop(aTHX_ a,b)
-#define utf8_to_bytes(a,b) Perl_utf8_to_bytes(aTHX_ a,b)
-#define bytes_from_utf8(a,b,c) Perl_bytes_from_utf8(aTHX_ a,b,c)
-#define bytes_to_utf8(a,b) Perl_bytes_to_utf8(aTHX_ a,b)
-#define utf8_to_uv_simple(a,b) Perl_utf8_to_uv_simple(aTHX_ a,b)
-#define utf8_to_uv(a,b,c,d) Perl_utf8_to_uv(aTHX_ a,b,c,d)
-#define uv_to_utf8(a,b) Perl_uv_to_utf8(aTHX_ a,b)
-#define vivify_defelem(a) Perl_vivify_defelem(aTHX_ a)
-#define vivify_ref(a,b) Perl_vivify_ref(aTHX_ a,b)
-#define wait4pid(a,b,c) Perl_wait4pid(aTHX_ a,b,c)
-#define report_evil_fh(a,b,c) Perl_report_evil_fh(aTHX_ a,b,c)
-#define report_uninit() Perl_report_uninit(aTHX)
-#define vwarn(a,b) Perl_vwarn(aTHX_ a,b)
-#define vwarner(a,b,c) Perl_vwarner(aTHX_ a,b,c)
-#define watch(a) Perl_watch(aTHX_ a)
-#define whichsig(a) Perl_whichsig(aTHX_ a)
-#define yyerror(a) Perl_yyerror(aTHX_ a)
-#ifdef USE_PURE_BISON
-#define yylex_r(a,b) Perl_yylex_r(aTHX_ a,b)
-#endif
-#define yylex() Perl_yylex(aTHX)
-#define yyparse() Perl_yyparse(aTHX)
-#define yywarn(a) Perl_yywarn(aTHX_ a)
-#if defined(MYMALLOC)
-#define dump_mstats(a) Perl_dump_mstats(aTHX_ a)
-#define get_mstats(a,b,c) Perl_get_mstats(aTHX_ a,b,c)
-#endif
-#define safesysmalloc Perl_safesysmalloc
-#define safesyscalloc Perl_safesyscalloc
-#define safesysrealloc Perl_safesysrealloc
-#define safesysfree Perl_safesysfree
-#if defined(LEAKTEST)
-#define safexmalloc Perl_safexmalloc
-#define safexcalloc Perl_safexcalloc
-#define safexrealloc Perl_safexrealloc
-#define safexfree Perl_safexfree
-#endif
-#if defined(PERL_GLOBAL_STRUCT)
-#define GetVars() Perl_GetVars(aTHX)
-#endif
-#define runops_standard() Perl_runops_standard(aTHX)
-#define runops_debug() Perl_runops_debug(aTHX)
-#if defined(USE_THREADS)
-#define sv_lock(a) Perl_sv_lock(aTHX_ a)
-#endif
-#define sv_vcatpvf_mg(a,b,c) Perl_sv_vcatpvf_mg(aTHX_ a,b,c)
-#define sv_catpv_mg(a,b) Perl_sv_catpv_mg(aTHX_ a,b)
-#define sv_catpvn_mg(a,b,c) Perl_sv_catpvn_mg(aTHX_ a,b,c)
-#define sv_catsv_mg(a,b) Perl_sv_catsv_mg(aTHX_ a,b)
-#define sv_vsetpvf_mg(a,b,c) Perl_sv_vsetpvf_mg(aTHX_ a,b,c)
-#define sv_setiv_mg(a,b) Perl_sv_setiv_mg(aTHX_ a,b)
-#define sv_setpviv_mg(a,b) Perl_sv_setpviv_mg(aTHX_ a,b)
-#define sv_setuv_mg(a,b) Perl_sv_setuv_mg(aTHX_ a,b)
-#define sv_setnv_mg(a,b) Perl_sv_setnv_mg(aTHX_ a,b)
-#define sv_setpv_mg(a,b) Perl_sv_setpv_mg(aTHX_ a,b)
-#define sv_setpvn_mg(a,b,c) Perl_sv_setpvn_mg(aTHX_ a,b,c)
-#define sv_setsv_mg(a,b) Perl_sv_setsv_mg(aTHX_ a,b)
-#define sv_usepvn_mg(a,b,c) Perl_sv_usepvn_mg(aTHX_ a,b,c)
-#define get_vtbl(a) Perl_get_vtbl(aTHX_ a)
-#define pv_display(a,b,c,d,e) Perl_pv_display(aTHX_ a,b,c,d,e)
-#define dump_vindent(a,b,c,d) Perl_dump_vindent(aTHX_ a,b,c,d)
-#define do_gv_dump(a,b,c,d) Perl_do_gv_dump(aTHX_ a,b,c,d)
-#define do_gvgv_dump(a,b,c,d) Perl_do_gvgv_dump(aTHX_ a,b,c,d)
-#define do_hv_dump(a,b,c,d) Perl_do_hv_dump(aTHX_ a,b,c,d)
-#define do_magic_dump(a,b,c,d,e,f,g) Perl_do_magic_dump(aTHX_ a,b,c,d,e,f,g)
-#define do_op_dump(a,b,c) Perl_do_op_dump(aTHX_ a,b,c)
-#define do_pmop_dump(a,b,c) Perl_do_pmop_dump(aTHX_ a,b,c)
-#define do_sv_dump(a,b,c,d,e,f,g) Perl_do_sv_dump(aTHX_ a,b,c,d,e,f,g)
-#define magic_dump(a) Perl_magic_dump(aTHX_ a)
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define vdefault_protect(a,b,c,d) Perl_vdefault_protect(aTHX_ a,b,c,d)
-#endif
-#define reginitcolors() Perl_reginitcolors(aTHX)
-#define sv_2pv_nolen(a) Perl_sv_2pv_nolen(aTHX_ a)
-#define sv_2pvutf8_nolen(a) Perl_sv_2pvutf8_nolen(aTHX_ a)
-#define sv_2pvbyte_nolen(a) Perl_sv_2pvbyte_nolen(aTHX_ a)
-#define sv_pv(a) Perl_sv_pv(aTHX_ a)
-#define sv_pvutf8(a) Perl_sv_pvutf8(aTHX_ a)
-#define sv_pvbyte(a) Perl_sv_pvbyte(aTHX_ a)
-#define sv_utf8_upgrade(a) Perl_sv_utf8_upgrade(aTHX_ a)
-#define sv_utf8_downgrade(a,b) Perl_sv_utf8_downgrade(aTHX_ a,b)
-#define sv_utf8_encode(a) Perl_sv_utf8_encode(aTHX_ a)
-#define sv_utf8_decode(a) Perl_sv_utf8_decode(aTHX_ a)
-#define sv_force_normal(a) Perl_sv_force_normal(aTHX_ a)
-#define sv_add_backref(a,b) Perl_sv_add_backref(aTHX_ a,b)
-#define sv_del_backref(a) Perl_sv_del_backref(aTHX_ a)
-#define tmps_grow(a) Perl_tmps_grow(aTHX_ a)
-#define sv_rvweaken(a) Perl_sv_rvweaken(aTHX_ a)
-#define magic_killbackrefs(a,b) Perl_magic_killbackrefs(aTHX_ a,b)
-#define newANONATTRSUB(a,b,c,d) Perl_newANONATTRSUB(aTHX_ a,b,c,d)
-#define newATTRSUB(a,b,c,d,e) Perl_newATTRSUB(aTHX_ a,b,c,d,e)
-#define newMYSUB(a,b,c,d,e) Perl_newMYSUB(aTHX_ a,b,c,d,e)
-#define my_attrs(a,b) Perl_my_attrs(aTHX_ a,b)
-#define boot_core_xsutils() Perl_boot_core_xsutils(aTHX)
-#if defined(USE_ITHREADS)
-#define cx_dup(a,b,c) Perl_cx_dup(aTHX_ a,b,c)
-#define si_dup(a) Perl_si_dup(aTHX_ a)
-#define ss_dup(a) Perl_ss_dup(aTHX_ a)
-#define any_dup(a,b) Perl_any_dup(aTHX_ a,b)
-#define he_dup(a,b) Perl_he_dup(aTHX_ a,b)
-#define re_dup(a) Perl_re_dup(aTHX_ a)
-#define fp_dup(a,b) Perl_fp_dup(aTHX_ a,b)
-#define dirp_dup(a) Perl_dirp_dup(aTHX_ a)
-#define gp_dup(a) Perl_gp_dup(aTHX_ a)
-#define mg_dup(a) Perl_mg_dup(aTHX_ a)
-#define sv_dup(a) Perl_sv_dup(aTHX_ a)
-#if defined(HAVE_INTERP_INTERN)
-#define sys_intern_dup(a,b) Perl_sys_intern_dup(aTHX_ a,b)
-#endif
-#define ptr_table_new() Perl_ptr_table_new(aTHX)
-#define ptr_table_fetch(a,b) Perl_ptr_table_fetch(aTHX_ a,b)
-#define ptr_table_store(a,b,c) Perl_ptr_table_store(aTHX_ a,b,c)
-#define ptr_table_split(a) Perl_ptr_table_split(aTHX_ a)
-#define ptr_table_clear(a) Perl_ptr_table_clear(aTHX_ a)
-#define ptr_table_free(a) Perl_ptr_table_free(aTHX_ a)
-#endif
-#if defined(HAVE_INTERP_INTERN)
-#define sys_intern_clear() Perl_sys_intern_clear(aTHX)
-#define sys_intern_init() Perl_sys_intern_init(aTHX)
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-#define avhv_index_sv(a) S_avhv_index_sv(aTHX_ a)
-#define avhv_index(a,b,c) S_avhv_index(aTHX_ a,b,c)
-#endif
-#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-#define do_trans_simple(a) S_do_trans_simple(aTHX_ a)
-#define do_trans_count(a) S_do_trans_count(aTHX_ a)
-#define do_trans_complex(a) S_do_trans_complex(aTHX_ a)
-#define do_trans_simple_utf8(a) S_do_trans_simple_utf8(aTHX_ a)
-#define do_trans_count_utf8(a) S_do_trans_count_utf8(aTHX_ a)
-#define do_trans_complex_utf8(a) S_do_trans_complex_utf8(aTHX_ a)
-#endif
-#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-#define gv_init_sv(a,b) S_gv_init_sv(aTHX_ a,b)
-#endif
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-#define hsplit(a) S_hsplit(aTHX_ a)
-#define hfreeentries(a) S_hfreeentries(aTHX_ a)
-#define more_he() S_more_he(aTHX)
-#define new_he() S_new_he(aTHX)
-#define del_he(a) S_del_he(aTHX_ a)
-#define save_hek(a,b,c) S_save_hek(aTHX_ a,b,c)
-#define hv_magic_check(a,b,c) S_hv_magic_check(aTHX_ a,b,c)
-#endif
-#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-#define save_magic(a,b) S_save_magic(aTHX_ a,b)
-#define magic_methpack(a,b,c) S_magic_methpack(aTHX_ a,b,c)
-#define magic_methcall(a,b,c,d,e,f) S_magic_methcall(aTHX_ a,b,c,d,e,f)
-#endif
-#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-#define list_assignment(a) S_list_assignment(aTHX_ a)
-#define bad_type(a,b,c,d) S_bad_type(aTHX_ a,b,c,d)
-#define cop_free(a) S_cop_free(aTHX_ a)
-#define modkids(a,b) S_modkids(aTHX_ a,b)
-#define no_bareword_allowed(a) S_no_bareword_allowed(aTHX_ a)
-#define no_fh_allowed(a) S_no_fh_allowed(aTHX_ a)
-#define scalarboolean(a) S_scalarboolean(aTHX_ a)
-#define too_few_arguments(a,b) S_too_few_arguments(aTHX_ a,b)
-#define too_many_arguments(a,b) S_too_many_arguments(aTHX_ a,b)
-#define trlist_upgrade(a,b) S_trlist_upgrade(aTHX_ a,b)
-#define op_clear(a) S_op_clear(aTHX_ a)
-#define null(a) S_null(aTHX_ a)
-#define pad_addlex(a) S_pad_addlex(aTHX_ a)
-#define pad_findlex(a,b,c,d,e,f,g) S_pad_findlex(aTHX_ a,b,c,d,e,f,g)
-#define newDEFSVOP() S_newDEFSVOP(aTHX)
-#define new_logop(a,b,c,d) S_new_logop(aTHX_ a,b,c,d)
-#define simplify_sort(a) S_simplify_sort(aTHX_ a)
-#define is_handle_constructor(a,b) S_is_handle_constructor(aTHX_ a,b)
-#define gv_ename(a) S_gv_ename(aTHX_ a)
-#define cv_dump(a) S_cv_dump(aTHX_ a)
-#define cv_clone2(a,b) S_cv_clone2(aTHX_ a,b)
-#define scalar_mod_type(a,b) S_scalar_mod_type(aTHX_ a,b)
-#define my_kid(a,b) S_my_kid(aTHX_ a,b)
-#define dup_attrlist(a) S_dup_attrlist(aTHX_ a)
-#define apply_attrs(a,b,c) S_apply_attrs(aTHX_ a,b,c)
-# if defined(PL_OP_SLAB_ALLOC)
-#define Slab_Alloc(a,b) S_Slab_Alloc(aTHX_ a,b)
-# endif
-#endif
-#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
-#define find_beginning() S_find_beginning(aTHX)
-#define forbid_setid(a) S_forbid_setid(aTHX_ a)
-#define incpush(a,b,c) S_incpush(aTHX_ a,b,c)
-#define init_interp() S_init_interp(aTHX)
-#define init_ids() S_init_ids(aTHX)
-#define init_lexer() S_init_lexer(aTHX)
-#define init_main_stash() S_init_main_stash(aTHX)
-#define init_perllib() S_init_perllib(aTHX)
-#define init_postdump_symbols(a,b,c) S_init_postdump_symbols(aTHX_ a,b,c)
-#define init_predump_symbols() S_init_predump_symbols(aTHX)
-#define my_exit_jump() S_my_exit_jump(aTHX)
-#define nuke_stacks() S_nuke_stacks(aTHX)
-#define open_script(a,b,c,d) S_open_script(aTHX_ a,b,c,d)
-#define usage(a) S_usage(aTHX_ a)
-#define validate_suid(a,b,c) S_validate_suid(aTHX_ a,b,c)
-# if defined(IAMSUID)
-#define fd_on_nosuid_fs(a) S_fd_on_nosuid_fs(aTHX_ a)
-# endif
-#define parse_body(a,b) S_parse_body(aTHX_ a,b)
-#define run_body(a) S_run_body(aTHX_ a)
-#define call_body(a,b) S_call_body(aTHX_ a,b)
-#define call_list_body(a) S_call_list_body(aTHX_ a)
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define vparse_body(a) S_vparse_body(aTHX_ a)
-#define vrun_body(a) S_vrun_body(aTHX_ a)
-#define vcall_body(a) S_vcall_body(aTHX_ a)
-#define vcall_list_body(a) S_vcall_list_body(aTHX_ a)
-#endif
-# if defined(USE_THREADS)
-#define init_main_thread() S_init_main_thread(aTHX)
-# endif
-#endif
-#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-#define doencodes(a,b,c) S_doencodes(aTHX_ a,b,c)
-#define refto(a) S_refto(aTHX_ a)
-#define seed() S_seed(aTHX)
-#define mul128(a,b) S_mul128(aTHX_ a,b)
-#define is_an_int(a,b) S_is_an_int(aTHX_ a,b)
-#define div128(a,b) S_div128(aTHX_ a,b)
-#endif
-#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-#define docatch(a) S_docatch(aTHX_ a)
-#define docatch_body() S_docatch_body(aTHX)
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define vdocatch_body(a) S_vdocatch_body(aTHX_ a)
-#endif
-#define dofindlabel(a,b,c,d) S_dofindlabel(aTHX_ a,b,c,d)
-#define doparseform(a) S_doparseform(aTHX_ a)
-#define dopoptoeval(a) S_dopoptoeval(aTHX_ a)
-#define dopoptolabel(a) S_dopoptolabel(aTHX_ a)
-#define dopoptoloop(a) S_dopoptoloop(aTHX_ a)
-#define dopoptosub(a) S_dopoptosub(aTHX_ a)
-#define dopoptosub_at(a,b) S_dopoptosub_at(aTHX_ a,b)
-#define save_lines(a,b) S_save_lines(aTHX_ a,b)
-#define doeval(a,b) S_doeval(aTHX_ a,b)
-#define doopen_pmc(a,b) S_doopen_pmc(aTHX_ a,b)
-#define qsortsv(a,b,c) S_qsortsv(aTHX_ a,b,c)
-#endif
-#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-#define do_maybe_phash(a,b,c,d,e) S_do_maybe_phash(aTHX_ a,b,c,d,e)
-#define do_oddball(a,b,c) S_do_oddball(aTHX_ a,b,c)
-#define get_db_sub(a,b) S_get_db_sub(aTHX_ a,b)
-#define method_common(a,b) S_method_common(aTHX_ a,b)
-#endif
-#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-#define doform(a,b,c) S_doform(aTHX_ a,b,c)
-#define emulate_eaccess(a,b) S_emulate_eaccess(aTHX_ a,b)
-# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-#define dooneliner(a,b) S_dooneliner(aTHX_ a,b)
-# endif
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-#define reg(a,b) S_reg(aTHX_ a,b)
-#define reganode(a,b) S_reganode(aTHX_ a,b)
-#define regatom(a) S_regatom(aTHX_ a)
-#define regbranch(a,b) S_regbranch(aTHX_ a,b)
-#define reguni(a,b,c) S_reguni(aTHX_ a,b,c)
-#define regclass() S_regclass(aTHX)
-#define regclassutf8() S_regclassutf8(aTHX)
-#define regcurly(a) S_regcurly(aTHX_ a)
-#define reg_node(a) S_reg_node(aTHX_ a)
-#define regpiece(a) S_regpiece(aTHX_ a)
-#define reginsert(a,b) S_reginsert(aTHX_ a,b)
-#define regoptail(a,b) S_regoptail(aTHX_ a,b)
-#define regtail(a,b) S_regtail(aTHX_ a,b)
-#define regwhite(a,b) S_regwhite(aTHX_ a,b)
-#define nextchar() S_nextchar(aTHX)
-#define dumpuntil(a,b,c,d,e) S_dumpuntil(aTHX_ a,b,c,d,e)
-#define put_byte(a,b) S_put_byte(aTHX_ a,b)
-#define scan_commit(a) S_scan_commit(aTHX_ a)
-#define cl_anything(a) S_cl_anything(aTHX_ a)
-#define cl_is_anything(a) S_cl_is_anything(aTHX_ a)
-#define cl_init(a) S_cl_init(aTHX_ a)
-#define cl_init_zero(a) S_cl_init_zero(aTHX_ a)
-#define cl_and(a,b) S_cl_and(aTHX_ a,b)
-#define cl_or(a,b) S_cl_or(aTHX_ a,b)
-#define study_chunk(a,b,c,d,e) S_study_chunk(aTHX_ a,b,c,d,e)
-#define add_data(a,b) S_add_data(aTHX_ a,b)
-#define regpposixcc(a) S_regpposixcc(aTHX_ a)
-#define checkposixcc() S_checkposixcc(aTHX)
-#endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-#define regmatch(a) S_regmatch(aTHX_ a)
-#define regrepeat(a,b) S_regrepeat(aTHX_ a,b)
-#define regrepeat_hard(a,b,c) S_regrepeat_hard(aTHX_ a,b,c)
-#define regtry(a,b) S_regtry(aTHX_ a,b)
-#define reginclass(a,b) S_reginclass(aTHX_ a,b)
-#define reginclassutf8(a,b) S_reginclassutf8(aTHX_ a,b)
-#define regcppush(a) S_regcppush(aTHX_ a)
-#define regcppop() S_regcppop(aTHX)
-#define regcp_set_to(a) S_regcp_set_to(aTHX_ a)
-#define cache_re(a) S_cache_re(aTHX_ a)
-#define reghop(a,b) S_reghop(aTHX_ a,b)
-#define reghopmaybe(a,b) S_reghopmaybe(aTHX_ a,b)
-#define find_byclass(a,b,c,d,e,f) S_find_byclass(aTHX_ a,b,c,d,e,f)
-#endif
-#if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
-#define debprof(a) S_debprof(aTHX_ a)
-#endif
-#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-#define save_scalar_at(a) S_save_scalar_at(aTHX_ a)
-#endif
-#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-#define asIV(a) S_asIV(aTHX_ a)
-#define asUV(a) S_asUV(aTHX_ a)
-#define more_sv() S_more_sv(aTHX)
-#define more_xiv() S_more_xiv(aTHX)
-#define more_xnv() S_more_xnv(aTHX)
-#define more_xpv() S_more_xpv(aTHX)
-#define more_xpviv() S_more_xpviv(aTHX)
-#define more_xpvnv() S_more_xpvnv(aTHX)
-#define more_xpvcv() S_more_xpvcv(aTHX)
-#define more_xpvav() S_more_xpvav(aTHX)
-#define more_xpvhv() S_more_xpvhv(aTHX)
-#define more_xpvmg() S_more_xpvmg(aTHX)
-#define more_xpvlv() S_more_xpvlv(aTHX)
-#define more_xpvbm() S_more_xpvbm(aTHX)
-#define more_xrv() S_more_xrv(aTHX)
-#define new_xiv() S_new_xiv(aTHX)
-#define new_xnv() S_new_xnv(aTHX)
-#define new_xpv() S_new_xpv(aTHX)
-#define new_xpviv() S_new_xpviv(aTHX)
-#define new_xpvnv() S_new_xpvnv(aTHX)
-#define new_xpvcv() S_new_xpvcv(aTHX)
-#define new_xpvav() S_new_xpvav(aTHX)
-#define new_xpvhv() S_new_xpvhv(aTHX)
-#define new_xpvmg() S_new_xpvmg(aTHX)
-#define new_xpvlv() S_new_xpvlv(aTHX)
-#define new_xpvbm() S_new_xpvbm(aTHX)
-#define new_xrv() S_new_xrv(aTHX)
-#define del_xiv(a) S_del_xiv(aTHX_ a)
-#define del_xnv(a) S_del_xnv(aTHX_ a)
-#define del_xpv(a) S_del_xpv(aTHX_ a)
-#define del_xpviv(a) S_del_xpviv(aTHX_ a)
-#define del_xpvnv(a) S_del_xpvnv(aTHX_ a)
-#define del_xpvcv(a) S_del_xpvcv(aTHX_ a)
-#define del_xpvav(a) S_del_xpvav(aTHX_ a)
-#define del_xpvhv(a) S_del_xpvhv(aTHX_ a)
-#define del_xpvmg(a) S_del_xpvmg(aTHX_ a)
-#define del_xpvlv(a) S_del_xpvlv(aTHX_ a)
-#define del_xpvbm(a) S_del_xpvbm(aTHX_ a)
-#define del_xrv(a) S_del_xrv(aTHX_ a)
-#define sv_unglob(a) S_sv_unglob(aTHX_ a)
-#define not_a_number(a) S_not_a_number(aTHX_ a)
-#define visit(a) S_visit(aTHX_ a)
-# if defined(DEBUGGING)
-#define del_sv(a) S_del_sv(aTHX_ a)
-# endif
-#endif
-#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
-#define check_uni() S_check_uni(aTHX)
-#define force_next(a) S_force_next(aTHX_ a)
-#define force_version(a) S_force_version(aTHX_ a)
-#define force_word(a,b,c,d,e) S_force_word(aTHX_ a,b,c,d,e)
-#define tokeq(a) S_tokeq(aTHX_ a)
-#define scan_const(a) S_scan_const(aTHX_ a)
-#define scan_formline(a) S_scan_formline(aTHX_ a)
-#define scan_heredoc(a) S_scan_heredoc(aTHX_ a)
-#define scan_ident(a,b,c,d,e) S_scan_ident(aTHX_ a,b,c,d,e)
-#define scan_inputsymbol(a) S_scan_inputsymbol(aTHX_ a)
-#define scan_pat(a,b) S_scan_pat(aTHX_ a,b)
-#define scan_str(a,b,c) S_scan_str(aTHX_ a,b,c)
-#define scan_subst(a) S_scan_subst(aTHX_ a)
-#define scan_trans(a) S_scan_trans(aTHX_ a)
-#define scan_word(a,b,c,d,e) S_scan_word(aTHX_ a,b,c,d,e)
-#define skipspace(a) S_skipspace(aTHX_ a)
-#define swallow_bom(a) S_swallow_bom(aTHX_ a)
-#define checkcomma(a,b,c) S_checkcomma(aTHX_ a,b,c)
-#define force_ident(a,b) S_force_ident(aTHX_ a,b)
-#define incline(a) S_incline(aTHX_ a)
-#define intuit_method(a,b) S_intuit_method(aTHX_ a,b)
-#define intuit_more(a) S_intuit_more(aTHX_ a)
-#define lop(a,b,c) S_lop(aTHX_ a,b,c)
-#define missingterm(a) S_missingterm(aTHX_ a)
-#define no_op(a,b) S_no_op(aTHX_ a,b)
-#define set_csh() S_set_csh(aTHX)
-#define sublex_done() S_sublex_done(aTHX)
-#define sublex_push() S_sublex_push(aTHX)
-#define sublex_start() S_sublex_start(aTHX)
-#define filter_gets(a,b,c) S_filter_gets(aTHX_ a,b,c)
-#define find_in_my_stash(a,b) S_find_in_my_stash(aTHX_ a,b)
-#define new_constant(a,b,c,d,e,f) S_new_constant(aTHX_ a,b,c,d,e,f)
-#define ao(a) S_ao(aTHX_ a)
-#define depcom() S_depcom(aTHX)
-#define incl_perldb() S_incl_perldb(aTHX)
-#if 0
-#define utf16_textfilter(a,b,c) S_utf16_textfilter(aTHX_ a,b,c)
-#define utf16rev_textfilter(a,b,c) S_utf16rev_textfilter(aTHX_ a,b,c)
-#endif
-# if defined(CRIPPLED_CC)
-#define uni(a,b) S_uni(aTHX_ a,b)
-# endif
-# if defined(PERL_CR_FILTER)
-#define cr_textfilter(a,b,c) S_cr_textfilter(aTHX_ a,b,c)
-# endif
-#endif
-#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-#define isa_lookup(a,b,c,d) S_isa_lookup(aTHX_ a,b,c,d)
-#endif
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-#define stdize_locale(a) S_stdize_locale(aTHX_ a)
-#define mess_alloc() S_mess_alloc(aTHX)
-# if defined(LEAKTEST)
-#define xstat(a) S_xstat(aTHX_ a)
-# endif
-#endif
-#if defined(PERL_OBJECT)
-#endif
-#define ck_anoncode(a) Perl_ck_anoncode(aTHX_ a)
-#define ck_bitop(a) Perl_ck_bitop(aTHX_ a)
-#define ck_concat(a) Perl_ck_concat(aTHX_ a)
-#define ck_defined(a) Perl_ck_defined(aTHX_ a)
-#define ck_delete(a) Perl_ck_delete(aTHX_ a)
-#define ck_eof(a) Perl_ck_eof(aTHX_ a)
-#define ck_eval(a) Perl_ck_eval(aTHX_ a)
-#define ck_exec(a) Perl_ck_exec(aTHX_ a)
-#define ck_exists(a) Perl_ck_exists(aTHX_ a)
-#define ck_exit(a) Perl_ck_exit(aTHX_ a)
-#define ck_ftst(a) Perl_ck_ftst(aTHX_ a)
-#define ck_fun(a) Perl_ck_fun(aTHX_ a)
-#define ck_fun_locale(a) Perl_ck_fun_locale(aTHX_ a)
-#define ck_glob(a) Perl_ck_glob(aTHX_ a)
-#define ck_grep(a) Perl_ck_grep(aTHX_ a)
-#define ck_index(a) Perl_ck_index(aTHX_ a)
-#define ck_join(a) Perl_ck_join(aTHX_ a)
-#define ck_lengthconst(a) Perl_ck_lengthconst(aTHX_ a)
-#define ck_lfun(a) Perl_ck_lfun(aTHX_ a)
-#define ck_listiob(a) Perl_ck_listiob(aTHX_ a)
-#define ck_match(a) Perl_ck_match(aTHX_ a)
-#define ck_method(a) Perl_ck_method(aTHX_ a)
-#define ck_null(a) Perl_ck_null(aTHX_ a)
-#define ck_open(a) Perl_ck_open(aTHX_ a)
-#define ck_repeat(a) Perl_ck_repeat(aTHX_ a)
-#define ck_require(a) Perl_ck_require(aTHX_ a)
-#define ck_return(a) Perl_ck_return(aTHX_ a)
-#define ck_rfun(a) Perl_ck_rfun(aTHX_ a)
-#define ck_rvconst(a) Perl_ck_rvconst(aTHX_ a)
-#define ck_sassign(a) Perl_ck_sassign(aTHX_ a)
-#define ck_scmp(a) Perl_ck_scmp(aTHX_ a)
-#define ck_select(a) Perl_ck_select(aTHX_ a)
-#define ck_shift(a) Perl_ck_shift(aTHX_ a)
-#define ck_sort(a) Perl_ck_sort(aTHX_ a)
-#define ck_spair(a) Perl_ck_spair(aTHX_ a)
-#define ck_split(a) Perl_ck_split(aTHX_ a)
-#define ck_subr(a) Perl_ck_subr(aTHX_ a)
-#define ck_substr(a) Perl_ck_substr(aTHX_ a)
-#define ck_svconst(a) Perl_ck_svconst(aTHX_ a)
-#define ck_trunc(a) Perl_ck_trunc(aTHX_ a)
-#define pp_aassign() Perl_pp_aassign(aTHX)
-#define pp_abs() Perl_pp_abs(aTHX)
-#define pp_accept() Perl_pp_accept(aTHX)
-#define pp_add() Perl_pp_add(aTHX)
-#define pp_aelem() Perl_pp_aelem(aTHX)
-#define pp_aelemfast() Perl_pp_aelemfast(aTHX)
-#define pp_alarm() Perl_pp_alarm(aTHX)
-#define pp_and() Perl_pp_and(aTHX)
-#define pp_andassign() Perl_pp_andassign(aTHX)
-#define pp_anoncode() Perl_pp_anoncode(aTHX)
-#define pp_anonhash() Perl_pp_anonhash(aTHX)
-#define pp_anonlist() Perl_pp_anonlist(aTHX)
-#define pp_aslice() Perl_pp_aslice(aTHX)
-#define pp_atan2() Perl_pp_atan2(aTHX)
-#define pp_av2arylen() Perl_pp_av2arylen(aTHX)
-#define pp_backtick() Perl_pp_backtick(aTHX)
-#define pp_bind() Perl_pp_bind(aTHX)
-#define pp_binmode() Perl_pp_binmode(aTHX)
-#define pp_bit_and() Perl_pp_bit_and(aTHX)
-#define pp_bit_or() Perl_pp_bit_or(aTHX)
-#define pp_bit_xor() Perl_pp_bit_xor(aTHX)
-#define pp_bless() Perl_pp_bless(aTHX)
-#define pp_caller() Perl_pp_caller(aTHX)
-#define pp_chdir() Perl_pp_chdir(aTHX)
-#define pp_chmod() Perl_pp_chmod(aTHX)
-#define pp_chomp() Perl_pp_chomp(aTHX)
-#define pp_chop() Perl_pp_chop(aTHX)
-#define pp_chown() Perl_pp_chown(aTHX)
-#define pp_chr() Perl_pp_chr(aTHX)
-#define pp_chroot() Perl_pp_chroot(aTHX)
-#define pp_close() Perl_pp_close(aTHX)
-#define pp_closedir() Perl_pp_closedir(aTHX)
-#define pp_complement() Perl_pp_complement(aTHX)
-#define pp_concat() Perl_pp_concat(aTHX)
-#define pp_cond_expr() Perl_pp_cond_expr(aTHX)
-#define pp_connect() Perl_pp_connect(aTHX)
-#define pp_const() Perl_pp_const(aTHX)
-#define pp_cos() Perl_pp_cos(aTHX)
-#define pp_crypt() Perl_pp_crypt(aTHX)
-#define pp_dbmclose() Perl_pp_dbmclose(aTHX)
-#define pp_dbmopen() Perl_pp_dbmopen(aTHX)
-#define pp_dbstate() Perl_pp_dbstate(aTHX)
-#define pp_defined() Perl_pp_defined(aTHX)
-#define pp_delete() Perl_pp_delete(aTHX)
-#define pp_die() Perl_pp_die(aTHX)
-#define pp_divide() Perl_pp_divide(aTHX)
-#define pp_dofile() Perl_pp_dofile(aTHX)
-#define pp_dump() Perl_pp_dump(aTHX)
-#define pp_each() Perl_pp_each(aTHX)
-#define pp_egrent() Perl_pp_egrent(aTHX)
-#define pp_ehostent() Perl_pp_ehostent(aTHX)
-#define pp_enetent() Perl_pp_enetent(aTHX)
-#define pp_enter() Perl_pp_enter(aTHX)
-#define pp_entereval() Perl_pp_entereval(aTHX)
-#define pp_enteriter() Perl_pp_enteriter(aTHX)
-#define pp_enterloop() Perl_pp_enterloop(aTHX)
-#define pp_entersub() Perl_pp_entersub(aTHX)
-#define pp_entertry() Perl_pp_entertry(aTHX)
-#define pp_enterwrite() Perl_pp_enterwrite(aTHX)
-#define pp_eof() Perl_pp_eof(aTHX)
-#define pp_eprotoent() Perl_pp_eprotoent(aTHX)
-#define pp_epwent() Perl_pp_epwent(aTHX)
-#define pp_eq() Perl_pp_eq(aTHX)
-#define pp_eservent() Perl_pp_eservent(aTHX)
-#define pp_exec() Perl_pp_exec(aTHX)
-#define pp_exists() Perl_pp_exists(aTHX)
-#define pp_exit() Perl_pp_exit(aTHX)
-#define pp_exp() Perl_pp_exp(aTHX)
-#define pp_fcntl() Perl_pp_fcntl(aTHX)
-#define pp_fileno() Perl_pp_fileno(aTHX)
-#define pp_flip() Perl_pp_flip(aTHX)
-#define pp_flock() Perl_pp_flock(aTHX)
-#define pp_flop() Perl_pp_flop(aTHX)
-#define pp_fork() Perl_pp_fork(aTHX)
-#define pp_formline() Perl_pp_formline(aTHX)
-#define pp_ftatime() Perl_pp_ftatime(aTHX)
-#define pp_ftbinary() Perl_pp_ftbinary(aTHX)
-#define pp_ftblk() Perl_pp_ftblk(aTHX)
-#define pp_ftchr() Perl_pp_ftchr(aTHX)
-#define pp_ftctime() Perl_pp_ftctime(aTHX)
-#define pp_ftdir() Perl_pp_ftdir(aTHX)
-#define pp_fteexec() Perl_pp_fteexec(aTHX)
-#define pp_fteowned() Perl_pp_fteowned(aTHX)
-#define pp_fteread() Perl_pp_fteread(aTHX)
-#define pp_ftewrite() Perl_pp_ftewrite(aTHX)
-#define pp_ftfile() Perl_pp_ftfile(aTHX)
-#define pp_ftis() Perl_pp_ftis(aTHX)
-#define pp_ftlink() Perl_pp_ftlink(aTHX)
-#define pp_ftmtime() Perl_pp_ftmtime(aTHX)
-#define pp_ftpipe() Perl_pp_ftpipe(aTHX)
-#define pp_ftrexec() Perl_pp_ftrexec(aTHX)
-#define pp_ftrowned() Perl_pp_ftrowned(aTHX)
-#define pp_ftrread() Perl_pp_ftrread(aTHX)
-#define pp_ftrwrite() Perl_pp_ftrwrite(aTHX)
-#define pp_ftsgid() Perl_pp_ftsgid(aTHX)
-#define pp_ftsize() Perl_pp_ftsize(aTHX)
-#define pp_ftsock() Perl_pp_ftsock(aTHX)
-#define pp_ftsuid() Perl_pp_ftsuid(aTHX)
-#define pp_ftsvtx() Perl_pp_ftsvtx(aTHX)
-#define pp_fttext() Perl_pp_fttext(aTHX)
-#define pp_fttty() Perl_pp_fttty(aTHX)
-#define pp_ftzero() Perl_pp_ftzero(aTHX)
-#define pp_ge() Perl_pp_ge(aTHX)
-#define pp_gelem() Perl_pp_gelem(aTHX)
-#define pp_getc() Perl_pp_getc(aTHX)
-#define pp_getlogin() Perl_pp_getlogin(aTHX)
-#define pp_getpeername() Perl_pp_getpeername(aTHX)
-#define pp_getpgrp() Perl_pp_getpgrp(aTHX)
-#define pp_getppid() Perl_pp_getppid(aTHX)
-#define pp_getpriority() Perl_pp_getpriority(aTHX)
-#define pp_getsockname() Perl_pp_getsockname(aTHX)
-#define pp_ggrent() Perl_pp_ggrent(aTHX)
-#define pp_ggrgid() Perl_pp_ggrgid(aTHX)
-#define pp_ggrnam() Perl_pp_ggrnam(aTHX)
-#define pp_ghbyaddr() Perl_pp_ghbyaddr(aTHX)
-#define pp_ghbyname() Perl_pp_ghbyname(aTHX)
-#define pp_ghostent() Perl_pp_ghostent(aTHX)
-#define pp_glob() Perl_pp_glob(aTHX)
-#define pp_gmtime() Perl_pp_gmtime(aTHX)
-#define pp_gnbyaddr() Perl_pp_gnbyaddr(aTHX)
-#define pp_gnbyname() Perl_pp_gnbyname(aTHX)
-#define pp_gnetent() Perl_pp_gnetent(aTHX)
-#define pp_goto() Perl_pp_goto(aTHX)
-#define pp_gpbyname() Perl_pp_gpbyname(aTHX)
-#define pp_gpbynumber() Perl_pp_gpbynumber(aTHX)
-#define pp_gprotoent() Perl_pp_gprotoent(aTHX)
-#define pp_gpwent() Perl_pp_gpwent(aTHX)
-#define pp_gpwnam() Perl_pp_gpwnam(aTHX)
-#define pp_gpwuid() Perl_pp_gpwuid(aTHX)
-#define pp_grepstart() Perl_pp_grepstart(aTHX)
-#define pp_grepwhile() Perl_pp_grepwhile(aTHX)
-#define pp_gsbyname() Perl_pp_gsbyname(aTHX)
-#define pp_gsbyport() Perl_pp_gsbyport(aTHX)
-#define pp_gservent() Perl_pp_gservent(aTHX)
-#define pp_gsockopt() Perl_pp_gsockopt(aTHX)
-#define pp_gt() Perl_pp_gt(aTHX)
-#define pp_gv() Perl_pp_gv(aTHX)
-#define pp_gvsv() Perl_pp_gvsv(aTHX)
-#define pp_helem() Perl_pp_helem(aTHX)
-#define pp_hex() Perl_pp_hex(aTHX)
-#define pp_hslice() Perl_pp_hslice(aTHX)
-#define pp_i_add() Perl_pp_i_add(aTHX)
-#define pp_i_divide() Perl_pp_i_divide(aTHX)
-#define pp_i_eq() Perl_pp_i_eq(aTHX)
-#define pp_i_ge() Perl_pp_i_ge(aTHX)
-#define pp_i_gt() Perl_pp_i_gt(aTHX)
-#define pp_i_le() Perl_pp_i_le(aTHX)
-#define pp_i_lt() Perl_pp_i_lt(aTHX)
-#define pp_i_modulo() Perl_pp_i_modulo(aTHX)
-#define pp_i_multiply() Perl_pp_i_multiply(aTHX)
-#define pp_i_ncmp() Perl_pp_i_ncmp(aTHX)
-#define pp_i_ne() Perl_pp_i_ne(aTHX)
-#define pp_i_negate() Perl_pp_i_negate(aTHX)
-#define pp_i_subtract() Perl_pp_i_subtract(aTHX)
-#define pp_index() Perl_pp_index(aTHX)
-#define pp_int() Perl_pp_int(aTHX)
-#define pp_ioctl() Perl_pp_ioctl(aTHX)
-#define pp_iter() Perl_pp_iter(aTHX)
-#define pp_join() Perl_pp_join(aTHX)
-#define pp_keys() Perl_pp_keys(aTHX)
-#define pp_kill() Perl_pp_kill(aTHX)
-#define pp_last() Perl_pp_last(aTHX)
-#define pp_lc() Perl_pp_lc(aTHX)
-#define pp_lcfirst() Perl_pp_lcfirst(aTHX)
-#define pp_le() Perl_pp_le(aTHX)
-#define pp_leave() Perl_pp_leave(aTHX)
-#define pp_leaveeval() Perl_pp_leaveeval(aTHX)
-#define pp_leaveloop() Perl_pp_leaveloop(aTHX)
-#define pp_leavesub() Perl_pp_leavesub(aTHX)
-#define pp_leavesublv() Perl_pp_leavesublv(aTHX)
-#define pp_leavetry() Perl_pp_leavetry(aTHX)
-#define pp_leavewrite() Perl_pp_leavewrite(aTHX)
-#define pp_left_shift() Perl_pp_left_shift(aTHX)
-#define pp_length() Perl_pp_length(aTHX)
-#define pp_lineseq() Perl_pp_lineseq(aTHX)
-#define pp_link() Perl_pp_link(aTHX)
-#define pp_list() Perl_pp_list(aTHX)
-#define pp_listen() Perl_pp_listen(aTHX)
-#define pp_localtime() Perl_pp_localtime(aTHX)
-#define pp_lock() Perl_pp_lock(aTHX)
-#define pp_log() Perl_pp_log(aTHX)
-#define pp_lslice() Perl_pp_lslice(aTHX)
-#define pp_lstat() Perl_pp_lstat(aTHX)
-#define pp_lt() Perl_pp_lt(aTHX)
-#define pp_mapstart() Perl_pp_mapstart(aTHX)
-#define pp_mapwhile() Perl_pp_mapwhile(aTHX)
-#define pp_match() Perl_pp_match(aTHX)
-#define pp_method() Perl_pp_method(aTHX)
-#define pp_method_named() Perl_pp_method_named(aTHX)
-#define pp_mkdir() Perl_pp_mkdir(aTHX)
-#define pp_modulo() Perl_pp_modulo(aTHX)
-#define pp_msgctl() Perl_pp_msgctl(aTHX)
-#define pp_msgget() Perl_pp_msgget(aTHX)
-#define pp_msgrcv() Perl_pp_msgrcv(aTHX)
-#define pp_msgsnd() Perl_pp_msgsnd(aTHX)
-#define pp_multiply() Perl_pp_multiply(aTHX)
-#define pp_ncmp() Perl_pp_ncmp(aTHX)
-#define pp_ne() Perl_pp_ne(aTHX)
-#define pp_negate() Perl_pp_negate(aTHX)
-#define pp_next() Perl_pp_next(aTHX)
-#define pp_nextstate() Perl_pp_nextstate(aTHX)
-#define pp_not() Perl_pp_not(aTHX)
-#define pp_null() Perl_pp_null(aTHX)
-#define pp_oct() Perl_pp_oct(aTHX)
-#define pp_open() Perl_pp_open(aTHX)
-#define pp_open_dir() Perl_pp_open_dir(aTHX)
-#define pp_or() Perl_pp_or(aTHX)
-#define pp_orassign() Perl_pp_orassign(aTHX)
-#define pp_ord() Perl_pp_ord(aTHX)
-#define pp_pack() Perl_pp_pack(aTHX)
-#define pp_padany() Perl_pp_padany(aTHX)
-#define pp_padav() Perl_pp_padav(aTHX)
-#define pp_padhv() Perl_pp_padhv(aTHX)
-#define pp_padsv() Perl_pp_padsv(aTHX)
-#define pp_pipe_op() Perl_pp_pipe_op(aTHX)
-#define pp_pop() Perl_pp_pop(aTHX)
-#define pp_pos() Perl_pp_pos(aTHX)
-#define pp_postdec() Perl_pp_postdec(aTHX)
-#define pp_postinc() Perl_pp_postinc(aTHX)
-#define pp_pow() Perl_pp_pow(aTHX)
-#define pp_predec() Perl_pp_predec(aTHX)
-#define pp_preinc() Perl_pp_preinc(aTHX)
-#define pp_print() Perl_pp_print(aTHX)
-#define pp_prototype() Perl_pp_prototype(aTHX)
-#define pp_prtf() Perl_pp_prtf(aTHX)
-#define pp_push() Perl_pp_push(aTHX)
-#define pp_pushmark() Perl_pp_pushmark(aTHX)
-#define pp_pushre() Perl_pp_pushre(aTHX)
-#define pp_qr() Perl_pp_qr(aTHX)
-#define pp_quotemeta() Perl_pp_quotemeta(aTHX)
-#define pp_rand() Perl_pp_rand(aTHX)
-#define pp_range() Perl_pp_range(aTHX)
-#define pp_rcatline() Perl_pp_rcatline(aTHX)
-#define pp_read() Perl_pp_read(aTHX)
-#define pp_readdir() Perl_pp_readdir(aTHX)
-#define pp_readline() Perl_pp_readline(aTHX)
-#define pp_readlink() Perl_pp_readlink(aTHX)
-#define pp_recv() Perl_pp_recv(aTHX)
-#define pp_redo() Perl_pp_redo(aTHX)
-#define pp_ref() Perl_pp_ref(aTHX)
-#define pp_refgen() Perl_pp_refgen(aTHX)
-#define pp_regcmaybe() Perl_pp_regcmaybe(aTHX)
-#define pp_regcomp() Perl_pp_regcomp(aTHX)
-#define pp_regcreset() Perl_pp_regcreset(aTHX)
-#define pp_rename() Perl_pp_rename(aTHX)
-#define pp_repeat() Perl_pp_repeat(aTHX)
-#define pp_require() Perl_pp_require(aTHX)
-#define pp_reset() Perl_pp_reset(aTHX)
-#define pp_return() Perl_pp_return(aTHX)
-#define pp_reverse() Perl_pp_reverse(aTHX)
-#define pp_rewinddir() Perl_pp_rewinddir(aTHX)
-#define pp_right_shift() Perl_pp_right_shift(aTHX)
-#define pp_rindex() Perl_pp_rindex(aTHX)
-#define pp_rmdir() Perl_pp_rmdir(aTHX)
-#define pp_rv2av() Perl_pp_rv2av(aTHX)
-#define pp_rv2cv() Perl_pp_rv2cv(aTHX)
-#define pp_rv2gv() Perl_pp_rv2gv(aTHX)
-#define pp_rv2hv() Perl_pp_rv2hv(aTHX)
-#define pp_rv2sv() Perl_pp_rv2sv(aTHX)
-#define pp_sassign() Perl_pp_sassign(aTHX)
-#define pp_scalar() Perl_pp_scalar(aTHX)
-#define pp_schomp() Perl_pp_schomp(aTHX)
-#define pp_schop() Perl_pp_schop(aTHX)
-#define pp_scmp() Perl_pp_scmp(aTHX)
-#define pp_scope() Perl_pp_scope(aTHX)
-#define pp_seek() Perl_pp_seek(aTHX)
-#define pp_seekdir() Perl_pp_seekdir(aTHX)
-#define pp_select() Perl_pp_select(aTHX)
-#define pp_semctl() Perl_pp_semctl(aTHX)
-#define pp_semget() Perl_pp_semget(aTHX)
-#define pp_semop() Perl_pp_semop(aTHX)
-#define pp_send() Perl_pp_send(aTHX)
-#define pp_seq() Perl_pp_seq(aTHX)
-#define pp_setpgrp() Perl_pp_setpgrp(aTHX)
-#define pp_setpriority() Perl_pp_setpriority(aTHX)
-#define pp_setstate() Perl_pp_setstate(aTHX)
-#define pp_sge() Perl_pp_sge(aTHX)
-#define pp_sgrent() Perl_pp_sgrent(aTHX)
-#define pp_sgt() Perl_pp_sgt(aTHX)
-#define pp_shift() Perl_pp_shift(aTHX)
-#define pp_shmctl() Perl_pp_shmctl(aTHX)
-#define pp_shmget() Perl_pp_shmget(aTHX)
-#define pp_shmread() Perl_pp_shmread(aTHX)
-#define pp_shmwrite() Perl_pp_shmwrite(aTHX)
-#define pp_shostent() Perl_pp_shostent(aTHX)
-#define pp_shutdown() Perl_pp_shutdown(aTHX)
-#define pp_sin() Perl_pp_sin(aTHX)
-#define pp_sle() Perl_pp_sle(aTHX)
-#define pp_sleep() Perl_pp_sleep(aTHX)
-#define pp_slt() Perl_pp_slt(aTHX)
-#define pp_sne() Perl_pp_sne(aTHX)
-#define pp_snetent() Perl_pp_snetent(aTHX)
-#define pp_socket() Perl_pp_socket(aTHX)
-#define pp_sockpair() Perl_pp_sockpair(aTHX)
-#define pp_sort() Perl_pp_sort(aTHX)
-#define pp_splice() Perl_pp_splice(aTHX)
-#define pp_split() Perl_pp_split(aTHX)
-#define pp_sprintf() Perl_pp_sprintf(aTHX)
-#define pp_sprotoent() Perl_pp_sprotoent(aTHX)
-#define pp_spwent() Perl_pp_spwent(aTHX)
-#define pp_sqrt() Perl_pp_sqrt(aTHX)
-#define pp_srand() Perl_pp_srand(aTHX)
-#define pp_srefgen() Perl_pp_srefgen(aTHX)
-#define pp_sselect() Perl_pp_sselect(aTHX)
-#define pp_sservent() Perl_pp_sservent(aTHX)
-#define pp_ssockopt() Perl_pp_ssockopt(aTHX)
-#define pp_stat() Perl_pp_stat(aTHX)
-#define pp_stringify() Perl_pp_stringify(aTHX)
-#define pp_stub() Perl_pp_stub(aTHX)
-#define pp_study() Perl_pp_study(aTHX)
-#define pp_subst() Perl_pp_subst(aTHX)
-#define pp_substcont() Perl_pp_substcont(aTHX)
-#define pp_substr() Perl_pp_substr(aTHX)
-#define pp_subtract() Perl_pp_subtract(aTHX)
-#define pp_symlink() Perl_pp_symlink(aTHX)
-#define pp_syscall() Perl_pp_syscall(aTHX)
-#define pp_sysopen() Perl_pp_sysopen(aTHX)
-#define pp_sysread() Perl_pp_sysread(aTHX)
-#define pp_sysseek() Perl_pp_sysseek(aTHX)
-#define pp_system() Perl_pp_system(aTHX)
-#define pp_syswrite() Perl_pp_syswrite(aTHX)
-#define pp_tell() Perl_pp_tell(aTHX)
-#define pp_telldir() Perl_pp_telldir(aTHX)
-#define pp_threadsv() Perl_pp_threadsv(aTHX)
-#define pp_tie() Perl_pp_tie(aTHX)
-#define pp_tied() Perl_pp_tied(aTHX)
-#define pp_time() Perl_pp_time(aTHX)
-#define pp_tms() Perl_pp_tms(aTHX)
-#define pp_trans() Perl_pp_trans(aTHX)
-#define pp_truncate() Perl_pp_truncate(aTHX)
-#define pp_uc() Perl_pp_uc(aTHX)
-#define pp_ucfirst() Perl_pp_ucfirst(aTHX)
-#define pp_umask() Perl_pp_umask(aTHX)
-#define pp_undef() Perl_pp_undef(aTHX)
-#define pp_unlink() Perl_pp_unlink(aTHX)
-#define pp_unpack() Perl_pp_unpack(aTHX)
-#define pp_unshift() Perl_pp_unshift(aTHX)
-#define pp_unstack() Perl_pp_unstack(aTHX)
-#define pp_untie() Perl_pp_untie(aTHX)
-#define pp_utime() Perl_pp_utime(aTHX)
-#define pp_values() Perl_pp_values(aTHX)
-#define pp_vec() Perl_pp_vec(aTHX)
-#define pp_wait() Perl_pp_wait(aTHX)
-#define pp_waitpid() Perl_pp_waitpid(aTHX)
-#define pp_wantarray() Perl_pp_wantarray(aTHX)
-#define pp_warn() Perl_pp_warn(aTHX)
-#define pp_xor() Perl_pp_xor(aTHX)
-
-#endif /* PERL_IMPLICIT_CONTEXT */
-#else /* PERL_OBJECT */
-
-#if defined(PERL_IMPLICIT_SYS)
-#endif
-#if defined(USE_ITHREADS)
-# if defined(PERL_IMPLICIT_SYS)
-# endif
-#endif
-#if defined(MYMALLOC)
-#define malloc Perl_malloc
-#define calloc Perl_calloc
-#define realloc Perl_realloc
-#define mfree Perl_mfree
-#define malloced_size Perl_malloced_size
-#endif
-#define get_context Perl_get_context
-#define set_context Perl_set_context
-#if defined(PERL_OBJECT)
-#ifndef __BORLANDC__
-#endif
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#define Perl_amagic_call CPerlObj::Perl_amagic_call
-#define amagic_call Perl_amagic_call
-#define Perl_Gv_AMupdate CPerlObj::Perl_Gv_AMupdate
-#define Gv_AMupdate Perl_Gv_AMupdate
-#define Perl_append_elem CPerlObj::Perl_append_elem
-#define append_elem Perl_append_elem
-#define Perl_append_list CPerlObj::Perl_append_list
-#define append_list Perl_append_list
-#define Perl_apply CPerlObj::Perl_apply
-#define apply Perl_apply
-#define Perl_apply_attrs_string CPerlObj::Perl_apply_attrs_string
-#define apply_attrs_string Perl_apply_attrs_string
-#define Perl_avhv_delete_ent CPerlObj::Perl_avhv_delete_ent
-#define avhv_delete_ent Perl_avhv_delete_ent
-#define Perl_avhv_exists_ent CPerlObj::Perl_avhv_exists_ent
-#define avhv_exists_ent Perl_avhv_exists_ent
-#define Perl_avhv_fetch_ent CPerlObj::Perl_avhv_fetch_ent
-#define avhv_fetch_ent Perl_avhv_fetch_ent
-#define Perl_avhv_store_ent CPerlObj::Perl_avhv_store_ent
-#define avhv_store_ent Perl_avhv_store_ent
-#define Perl_avhv_iternext CPerlObj::Perl_avhv_iternext
-#define avhv_iternext Perl_avhv_iternext
-#define Perl_avhv_iterval CPerlObj::Perl_avhv_iterval
-#define avhv_iterval Perl_avhv_iterval
-#define Perl_avhv_keys CPerlObj::Perl_avhv_keys
-#define avhv_keys Perl_avhv_keys
-#define Perl_av_clear CPerlObj::Perl_av_clear
-#define av_clear Perl_av_clear
-#define Perl_av_delete CPerlObj::Perl_av_delete
-#define av_delete Perl_av_delete
-#define Perl_av_exists CPerlObj::Perl_av_exists
-#define av_exists Perl_av_exists
-#define Perl_av_extend CPerlObj::Perl_av_extend
-#define av_extend Perl_av_extend
-#define Perl_av_fake CPerlObj::Perl_av_fake
-#define av_fake Perl_av_fake
-#define Perl_av_fetch CPerlObj::Perl_av_fetch
-#define av_fetch Perl_av_fetch
-#define Perl_av_fill CPerlObj::Perl_av_fill
-#define av_fill Perl_av_fill
-#define Perl_av_len CPerlObj::Perl_av_len
-#define av_len Perl_av_len
-#define Perl_av_make CPerlObj::Perl_av_make
-#define av_make Perl_av_make
-#define Perl_av_pop CPerlObj::Perl_av_pop
-#define av_pop Perl_av_pop
-#define Perl_av_push CPerlObj::Perl_av_push
-#define av_push Perl_av_push
-#define Perl_av_reify CPerlObj::Perl_av_reify
-#define av_reify Perl_av_reify
-#define Perl_av_shift CPerlObj::Perl_av_shift
-#define av_shift Perl_av_shift
-#define Perl_av_store CPerlObj::Perl_av_store
-#define av_store Perl_av_store
-#define Perl_av_undef CPerlObj::Perl_av_undef
-#define av_undef Perl_av_undef
-#define Perl_av_unshift CPerlObj::Perl_av_unshift
-#define av_unshift Perl_av_unshift
-#define Perl_bind_match CPerlObj::Perl_bind_match
-#define bind_match Perl_bind_match
-#define Perl_block_end CPerlObj::Perl_block_end
-#define block_end Perl_block_end
-#define Perl_block_gimme CPerlObj::Perl_block_gimme
-#define block_gimme Perl_block_gimme
-#define Perl_block_start CPerlObj::Perl_block_start
-#define block_start Perl_block_start
-#define Perl_boot_core_UNIVERSAL CPerlObj::Perl_boot_core_UNIVERSAL
-#define boot_core_UNIVERSAL Perl_boot_core_UNIVERSAL
-#define Perl_call_list CPerlObj::Perl_call_list
-#define call_list Perl_call_list
-#define Perl_cando CPerlObj::Perl_cando
-#define cando Perl_cando
-#define Perl_cast_ulong CPerlObj::Perl_cast_ulong
-#define cast_ulong Perl_cast_ulong
-#define Perl_cast_i32 CPerlObj::Perl_cast_i32
-#define cast_i32 Perl_cast_i32
-#define Perl_cast_iv CPerlObj::Perl_cast_iv
-#define cast_iv Perl_cast_iv
-#define Perl_cast_uv CPerlObj::Perl_cast_uv
-#define cast_uv Perl_cast_uv
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-#define Perl_my_chsize CPerlObj::Perl_my_chsize
-#define my_chsize Perl_my_chsize
-#endif
-#if defined(USE_THREADS)
-#define Perl_condpair_magic CPerlObj::Perl_condpair_magic
-#define condpair_magic Perl_condpair_magic
-#endif
-#define Perl_convert CPerlObj::Perl_convert
-#define convert Perl_convert
-#define Perl_croak CPerlObj::Perl_croak
-#define croak Perl_croak
-#define Perl_vcroak CPerlObj::Perl_vcroak
-#define vcroak Perl_vcroak
-#if defined(PERL_IMPLICIT_CONTEXT)
-#define Perl_croak_nocontext CPerlObj::Perl_croak_nocontext
-#define croak_nocontext Perl_croak_nocontext
-#define Perl_die_nocontext CPerlObj::Perl_die_nocontext
-#define die_nocontext Perl_die_nocontext
-#define Perl_deb_nocontext CPerlObj::Perl_deb_nocontext
-#define deb_nocontext Perl_deb_nocontext
-#define Perl_form_nocontext CPerlObj::Perl_form_nocontext
-#define form_nocontext Perl_form_nocontext
-#define Perl_load_module_nocontext CPerlObj::Perl_load_module_nocontext
-#define load_module_nocontext Perl_load_module_nocontext
-#define Perl_mess_nocontext CPerlObj::Perl_mess_nocontext
-#define mess_nocontext Perl_mess_nocontext
-#define Perl_warn_nocontext CPerlObj::Perl_warn_nocontext
-#define warn_nocontext Perl_warn_nocontext
-#define Perl_warner_nocontext CPerlObj::Perl_warner_nocontext
-#define warner_nocontext Perl_warner_nocontext
-#define Perl_newSVpvf_nocontext CPerlObj::Perl_newSVpvf_nocontext
-#define newSVpvf_nocontext Perl_newSVpvf_nocontext
-#define Perl_sv_catpvf_nocontext CPerlObj::Perl_sv_catpvf_nocontext
-#define sv_catpvf_nocontext Perl_sv_catpvf_nocontext
-#define Perl_sv_setpvf_nocontext CPerlObj::Perl_sv_setpvf_nocontext
-#define sv_setpvf_nocontext Perl_sv_setpvf_nocontext
-#define Perl_sv_catpvf_mg_nocontext CPerlObj::Perl_sv_catpvf_mg_nocontext
-#define sv_catpvf_mg_nocontext Perl_sv_catpvf_mg_nocontext
-#define Perl_sv_setpvf_mg_nocontext CPerlObj::Perl_sv_setpvf_mg_nocontext
-#define sv_setpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext
-#define Perl_fprintf_nocontext CPerlObj::Perl_fprintf_nocontext
-#define fprintf_nocontext Perl_fprintf_nocontext
-#define Perl_printf_nocontext CPerlObj::Perl_printf_nocontext
-#define printf_nocontext Perl_printf_nocontext
-#endif
-#define Perl_cv_ckproto CPerlObj::Perl_cv_ckproto
-#define cv_ckproto Perl_cv_ckproto
-#define Perl_cv_clone CPerlObj::Perl_cv_clone
-#define cv_clone Perl_cv_clone
-#define Perl_cv_const_sv CPerlObj::Perl_cv_const_sv
-#define cv_const_sv Perl_cv_const_sv
-#define Perl_op_const_sv CPerlObj::Perl_op_const_sv
-#define op_const_sv Perl_op_const_sv
-#define Perl_cv_undef CPerlObj::Perl_cv_undef
-#define cv_undef Perl_cv_undef
-#define Perl_cx_dump CPerlObj::Perl_cx_dump
-#define cx_dump Perl_cx_dump
-#define Perl_filter_add CPerlObj::Perl_filter_add
-#define filter_add Perl_filter_add
-#define Perl_filter_del CPerlObj::Perl_filter_del
-#define filter_del Perl_filter_del
-#define Perl_filter_read CPerlObj::Perl_filter_read
-#define filter_read Perl_filter_read
-#define Perl_get_op_descs CPerlObj::Perl_get_op_descs
-#define get_op_descs Perl_get_op_descs
-#define Perl_get_op_names CPerlObj::Perl_get_op_names
-#define get_op_names Perl_get_op_names
-#define Perl_get_no_modify CPerlObj::Perl_get_no_modify
-#define get_no_modify Perl_get_no_modify
-#define Perl_get_opargs CPerlObj::Perl_get_opargs
-#define get_opargs Perl_get_opargs
-#define Perl_get_ppaddr CPerlObj::Perl_get_ppaddr
-#define get_ppaddr Perl_get_ppaddr
-#define Perl_cxinc CPerlObj::Perl_cxinc
-#define cxinc Perl_cxinc
-#define Perl_deb CPerlObj::Perl_deb
-#define deb Perl_deb
-#define Perl_vdeb CPerlObj::Perl_vdeb
-#define vdeb Perl_vdeb
-#define Perl_debprofdump CPerlObj::Perl_debprofdump
-#define debprofdump Perl_debprofdump
-#define Perl_debop CPerlObj::Perl_debop
-#define debop Perl_debop
-#define Perl_debstack CPerlObj::Perl_debstack
-#define debstack Perl_debstack
-#define Perl_debstackptrs CPerlObj::Perl_debstackptrs
-#define debstackptrs Perl_debstackptrs
-#define Perl_delimcpy CPerlObj::Perl_delimcpy
-#define delimcpy Perl_delimcpy
-#define Perl_deprecate CPerlObj::Perl_deprecate
-#define deprecate Perl_deprecate
-#define Perl_die CPerlObj::Perl_die
-#define die Perl_die
-#define Perl_vdie CPerlObj::Perl_vdie
-#define vdie Perl_vdie
-#define Perl_die_where CPerlObj::Perl_die_where
-#define die_where Perl_die_where
-#define Perl_dounwind CPerlObj::Perl_dounwind
-#define dounwind Perl_dounwind
-#define Perl_do_aexec CPerlObj::Perl_do_aexec
-#define do_aexec Perl_do_aexec
-#define Perl_do_aexec5 CPerlObj::Perl_do_aexec5
-#define do_aexec5 Perl_do_aexec5
-#define Perl_do_binmode CPerlObj::Perl_do_binmode
-#define do_binmode Perl_do_binmode
-#define Perl_do_chop CPerlObj::Perl_do_chop
-#define do_chop Perl_do_chop
-#define Perl_do_close CPerlObj::Perl_do_close
-#define do_close Perl_do_close
-#define Perl_do_eof CPerlObj::Perl_do_eof
-#define do_eof Perl_do_eof
-#define Perl_do_exec CPerlObj::Perl_do_exec
-#define do_exec Perl_do_exec
-#if !defined(WIN32)
-#define Perl_do_exec3 CPerlObj::Perl_do_exec3
-#define do_exec3 Perl_do_exec3
-#endif
-#define Perl_do_execfree CPerlObj::Perl_do_execfree
-#define do_execfree Perl_do_execfree
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-#define Perl_do_ipcctl CPerlObj::Perl_do_ipcctl
-#define do_ipcctl Perl_do_ipcctl
-#define Perl_do_ipcget CPerlObj::Perl_do_ipcget
-#define do_ipcget Perl_do_ipcget
-#define Perl_do_msgrcv CPerlObj::Perl_do_msgrcv
-#define do_msgrcv Perl_do_msgrcv
-#define Perl_do_msgsnd CPerlObj::Perl_do_msgsnd
-#define do_msgsnd Perl_do_msgsnd
-#define Perl_do_semop CPerlObj::Perl_do_semop
-#define do_semop Perl_do_semop
-#define Perl_do_shmio CPerlObj::Perl_do_shmio
-#define do_shmio Perl_do_shmio
-#endif
-#define Perl_do_join CPerlObj::Perl_do_join
-#define do_join Perl_do_join
-#define Perl_do_kv CPerlObj::Perl_do_kv
-#define do_kv Perl_do_kv
-#define Perl_do_open CPerlObj::Perl_do_open
-#define do_open Perl_do_open
-#define Perl_do_open9 CPerlObj::Perl_do_open9
-#define do_open9 Perl_do_open9
-#define Perl_do_pipe CPerlObj::Perl_do_pipe
-#define do_pipe Perl_do_pipe
-#define Perl_do_print CPerlObj::Perl_do_print
-#define do_print Perl_do_print
-#define Perl_do_readline CPerlObj::Perl_do_readline
-#define do_readline Perl_do_readline
-#define Perl_do_chomp CPerlObj::Perl_do_chomp
-#define do_chomp Perl_do_chomp
-#define Perl_do_seek CPerlObj::Perl_do_seek
-#define do_seek Perl_do_seek
-#define Perl_do_sprintf CPerlObj::Perl_do_sprintf
-#define do_sprintf Perl_do_sprintf
-#define Perl_do_sysseek CPerlObj::Perl_do_sysseek
-#define do_sysseek Perl_do_sysseek
-#define Perl_do_tell CPerlObj::Perl_do_tell
-#define do_tell Perl_do_tell
-#define Perl_do_trans CPerlObj::Perl_do_trans
-#define do_trans Perl_do_trans
-#define Perl_do_vecget CPerlObj::Perl_do_vecget
-#define do_vecget Perl_do_vecget
-#define Perl_do_vecset CPerlObj::Perl_do_vecset
-#define do_vecset Perl_do_vecset
-#define Perl_do_vop CPerlObj::Perl_do_vop
-#define do_vop Perl_do_vop
-#define Perl_dofile CPerlObj::Perl_dofile
-#define dofile Perl_dofile
-#define Perl_dowantarray CPerlObj::Perl_dowantarray
-#define dowantarray Perl_dowantarray
-#define Perl_dump_all CPerlObj::Perl_dump_all
-#define dump_all Perl_dump_all
-#define Perl_dump_eval CPerlObj::Perl_dump_eval
-#define dump_eval Perl_dump_eval
-#if defined(DUMP_FDS)
-#define Perl_dump_fds CPerlObj::Perl_dump_fds
-#define dump_fds Perl_dump_fds
-#endif
-#define Perl_dump_form CPerlObj::Perl_dump_form
-#define dump_form Perl_dump_form
-#define Perl_gv_dump CPerlObj::Perl_gv_dump
-#define gv_dump Perl_gv_dump
-#define Perl_op_dump CPerlObj::Perl_op_dump
-#define op_dump Perl_op_dump
-#define Perl_pmop_dump CPerlObj::Perl_pmop_dump
-#define pmop_dump Perl_pmop_dump
-#define Perl_dump_packsubs CPerlObj::Perl_dump_packsubs
-#define dump_packsubs Perl_dump_packsubs
-#define Perl_dump_sub CPerlObj::Perl_dump_sub
-#define dump_sub Perl_dump_sub
-#define Perl_fbm_compile CPerlObj::Perl_fbm_compile
-#define fbm_compile Perl_fbm_compile
-#define Perl_fbm_instr CPerlObj::Perl_fbm_instr
-#define fbm_instr Perl_fbm_instr
-#define Perl_find_script CPerlObj::Perl_find_script
-#define find_script Perl_find_script
-#if defined(USE_THREADS)
-#define Perl_find_threadsv CPerlObj::Perl_find_threadsv
-#define find_threadsv Perl_find_threadsv
-#endif
-#define Perl_force_list CPerlObj::Perl_force_list
-#define force_list Perl_force_list
-#define Perl_fold_constants CPerlObj::Perl_fold_constants
-#define fold_constants Perl_fold_constants
-#define Perl_form CPerlObj::Perl_form
-#define form Perl_form
-#define Perl_vform CPerlObj::Perl_vform
-#define vform Perl_vform
-#define Perl_free_tmps CPerlObj::Perl_free_tmps
-#define free_tmps Perl_free_tmps
-#define Perl_gen_constant_list CPerlObj::Perl_gen_constant_list
-#define gen_constant_list Perl_gen_constant_list
-#if !defined(HAS_GETENV_LEN)
-#define Perl_getenv_len CPerlObj::Perl_getenv_len
-#define getenv_len Perl_getenv_len
-#endif
-#define Perl_gp_free CPerlObj::Perl_gp_free
-#define gp_free Perl_gp_free
-#define Perl_gp_ref CPerlObj::Perl_gp_ref
-#define gp_ref Perl_gp_ref
-#define Perl_gv_AVadd CPerlObj::Perl_gv_AVadd
-#define gv_AVadd Perl_gv_AVadd
-#define Perl_gv_HVadd CPerlObj::Perl_gv_HVadd
-#define gv_HVadd Perl_gv_HVadd
-#define Perl_gv_IOadd CPerlObj::Perl_gv_IOadd
-#define gv_IOadd Perl_gv_IOadd
-#define Perl_gv_autoload4 CPerlObj::Perl_gv_autoload4
-#define gv_autoload4 Perl_gv_autoload4
-#define Perl_gv_check CPerlObj::Perl_gv_check
-#define gv_check Perl_gv_check
-#define Perl_gv_efullname CPerlObj::Perl_gv_efullname
-#define gv_efullname Perl_gv_efullname
-#define Perl_gv_efullname3 CPerlObj::Perl_gv_efullname3
-#define gv_efullname3 Perl_gv_efullname3
-#define Perl_gv_efullname4 CPerlObj::Perl_gv_efullname4
-#define gv_efullname4 Perl_gv_efullname4
-#define Perl_gv_fetchfile CPerlObj::Perl_gv_fetchfile
-#define gv_fetchfile Perl_gv_fetchfile
-#define Perl_gv_fetchmeth CPerlObj::Perl_gv_fetchmeth
-#define gv_fetchmeth Perl_gv_fetchmeth
-#define Perl_gv_fetchmethod CPerlObj::Perl_gv_fetchmethod
-#define gv_fetchmethod Perl_gv_fetchmethod
-#define Perl_gv_fetchmethod_autoload CPerlObj::Perl_gv_fetchmethod_autoload
-#define gv_fetchmethod_autoload Perl_gv_fetchmethod_autoload
-#define Perl_gv_fetchpv CPerlObj::Perl_gv_fetchpv
-#define gv_fetchpv Perl_gv_fetchpv
-#define Perl_gv_fullname CPerlObj::Perl_gv_fullname
-#define gv_fullname Perl_gv_fullname
-#define Perl_gv_fullname3 CPerlObj::Perl_gv_fullname3
-#define gv_fullname3 Perl_gv_fullname3
-#define Perl_gv_fullname4 CPerlObj::Perl_gv_fullname4
-#define gv_fullname4 Perl_gv_fullname4
-#define Perl_gv_init CPerlObj::Perl_gv_init
-#define gv_init Perl_gv_init
-#define Perl_gv_stashpv CPerlObj::Perl_gv_stashpv
-#define gv_stashpv Perl_gv_stashpv
-#define Perl_gv_stashpvn CPerlObj::Perl_gv_stashpvn
-#define gv_stashpvn Perl_gv_stashpvn
-#define Perl_gv_stashsv CPerlObj::Perl_gv_stashsv
-#define gv_stashsv Perl_gv_stashsv
-#define Perl_hv_clear CPerlObj::Perl_hv_clear
-#define hv_clear Perl_hv_clear
-#define Perl_hv_delayfree_ent CPerlObj::Perl_hv_delayfree_ent
-#define hv_delayfree_ent Perl_hv_delayfree_ent
-#define Perl_hv_delete CPerlObj::Perl_hv_delete
-#define hv_delete Perl_hv_delete
-#define Perl_hv_delete_ent CPerlObj::Perl_hv_delete_ent
-#define hv_delete_ent Perl_hv_delete_ent
-#define Perl_hv_exists CPerlObj::Perl_hv_exists
-#define hv_exists Perl_hv_exists
-#define Perl_hv_exists_ent CPerlObj::Perl_hv_exists_ent
-#define hv_exists_ent Perl_hv_exists_ent
-#define Perl_hv_fetch CPerlObj::Perl_hv_fetch
-#define hv_fetch Perl_hv_fetch
-#define Perl_hv_fetch_ent CPerlObj::Perl_hv_fetch_ent
-#define hv_fetch_ent Perl_hv_fetch_ent
-#define Perl_hv_free_ent CPerlObj::Perl_hv_free_ent
-#define hv_free_ent Perl_hv_free_ent
-#define Perl_hv_iterinit CPerlObj::Perl_hv_iterinit
-#define hv_iterinit Perl_hv_iterinit
-#define Perl_hv_iterkey CPerlObj::Perl_hv_iterkey
-#define hv_iterkey Perl_hv_iterkey
-#define Perl_hv_iterkeysv CPerlObj::Perl_hv_iterkeysv
-#define hv_iterkeysv Perl_hv_iterkeysv
-#define Perl_hv_iternext CPerlObj::Perl_hv_iternext
-#define hv_iternext Perl_hv_iternext
-#define Perl_hv_iternextsv CPerlObj::Perl_hv_iternextsv
-#define hv_iternextsv Perl_hv_iternextsv
-#define Perl_hv_iterval CPerlObj::Perl_hv_iterval
-#define hv_iterval Perl_hv_iterval
-#define Perl_hv_ksplit CPerlObj::Perl_hv_ksplit
-#define hv_ksplit Perl_hv_ksplit
-#define Perl_hv_magic CPerlObj::Perl_hv_magic
-#define hv_magic Perl_hv_magic
-#define Perl_hv_store CPerlObj::Perl_hv_store
-#define hv_store Perl_hv_store
-#define Perl_hv_store_ent CPerlObj::Perl_hv_store_ent
-#define hv_store_ent Perl_hv_store_ent
-#define Perl_hv_undef CPerlObj::Perl_hv_undef
-#define hv_undef Perl_hv_undef
-#define Perl_ibcmp CPerlObj::Perl_ibcmp
-#define ibcmp Perl_ibcmp
-#define Perl_ibcmp_locale CPerlObj::Perl_ibcmp_locale
-#define ibcmp_locale Perl_ibcmp_locale
-#define Perl_ingroup CPerlObj::Perl_ingroup
-#define ingroup Perl_ingroup
-#define Perl_init_debugger CPerlObj::Perl_init_debugger
-#define init_debugger Perl_init_debugger
-#define Perl_init_stacks CPerlObj::Perl_init_stacks
-#define init_stacks Perl_init_stacks
-#define Perl_intro_my CPerlObj::Perl_intro_my
-#define intro_my Perl_intro_my
-#define Perl_instr CPerlObj::Perl_instr
-#define instr Perl_instr
-#define Perl_io_close CPerlObj::Perl_io_close
-#define io_close Perl_io_close
-#define Perl_invert CPerlObj::Perl_invert
-#define invert Perl_invert
-#define Perl_is_gv_magical CPerlObj::Perl_is_gv_magical
-#define is_gv_magical Perl_is_gv_magical
-#define Perl_is_lvalue_sub CPerlObj::Perl_is_lvalue_sub
-#define is_lvalue_sub Perl_is_lvalue_sub
-#define Perl_is_uni_alnum CPerlObj::Perl_is_uni_alnum
-#define is_uni_alnum Perl_is_uni_alnum
-#define Perl_is_uni_alnumc CPerlObj::Perl_is_uni_alnumc
-#define is_uni_alnumc Perl_is_uni_alnumc
-#define Perl_is_uni_idfirst CPerlObj::Perl_is_uni_idfirst
-#define is_uni_idfirst Perl_is_uni_idfirst
-#define Perl_is_uni_alpha CPerlObj::Perl_is_uni_alpha
-#define is_uni_alpha Perl_is_uni_alpha
-#define Perl_is_uni_ascii CPerlObj::Perl_is_uni_ascii
-#define is_uni_ascii Perl_is_uni_ascii
-#define Perl_is_uni_space CPerlObj::Perl_is_uni_space
-#define is_uni_space Perl_is_uni_space
-#define Perl_is_uni_cntrl CPerlObj::Perl_is_uni_cntrl
-#define is_uni_cntrl Perl_is_uni_cntrl
-#define Perl_is_uni_graph CPerlObj::Perl_is_uni_graph
-#define is_uni_graph Perl_is_uni_graph
-#define Perl_is_uni_digit CPerlObj::Perl_is_uni_digit
-#define is_uni_digit Perl_is_uni_digit
-#define Perl_is_uni_upper CPerlObj::Perl_is_uni_upper
-#define is_uni_upper Perl_is_uni_upper
-#define Perl_is_uni_lower CPerlObj::Perl_is_uni_lower
-#define is_uni_lower Perl_is_uni_lower
-#define Perl_is_uni_print CPerlObj::Perl_is_uni_print
-#define is_uni_print Perl_is_uni_print
-#define Perl_is_uni_punct CPerlObj::Perl_is_uni_punct
-#define is_uni_punct Perl_is_uni_punct
-#define Perl_is_uni_xdigit CPerlObj::Perl_is_uni_xdigit
-#define is_uni_xdigit Perl_is_uni_xdigit
-#define Perl_to_uni_upper CPerlObj::Perl_to_uni_upper
-#define to_uni_upper Perl_to_uni_upper
-#define Perl_to_uni_title CPerlObj::Perl_to_uni_title
-#define to_uni_title Perl_to_uni_title
-#define Perl_to_uni_lower CPerlObj::Perl_to_uni_lower
-#define to_uni_lower Perl_to_uni_lower
-#define Perl_is_uni_alnum_lc CPerlObj::Perl_is_uni_alnum_lc
-#define is_uni_alnum_lc Perl_is_uni_alnum_lc
-#define Perl_is_uni_alnumc_lc CPerlObj::Perl_is_uni_alnumc_lc
-#define is_uni_alnumc_lc Perl_is_uni_alnumc_lc
-#define Perl_is_uni_idfirst_lc CPerlObj::Perl_is_uni_idfirst_lc
-#define is_uni_idfirst_lc Perl_is_uni_idfirst_lc
-#define Perl_is_uni_alpha_lc CPerlObj::Perl_is_uni_alpha_lc
-#define is_uni_alpha_lc Perl_is_uni_alpha_lc
-#define Perl_is_uni_ascii_lc CPerlObj::Perl_is_uni_ascii_lc
-#define is_uni_ascii_lc Perl_is_uni_ascii_lc
-#define Perl_is_uni_space_lc CPerlObj::Perl_is_uni_space_lc
-#define is_uni_space_lc Perl_is_uni_space_lc
-#define Perl_is_uni_cntrl_lc CPerlObj::Perl_is_uni_cntrl_lc
-#define is_uni_cntrl_lc Perl_is_uni_cntrl_lc
-#define Perl_is_uni_graph_lc CPerlObj::Perl_is_uni_graph_lc
-#define is_uni_graph_lc Perl_is_uni_graph_lc
-#define Perl_is_uni_digit_lc CPerlObj::Perl_is_uni_digit_lc
-#define is_uni_digit_lc Perl_is_uni_digit_lc
-#define Perl_is_uni_upper_lc CPerlObj::Perl_is_uni_upper_lc
-#define is_uni_upper_lc Perl_is_uni_upper_lc
-#define Perl_is_uni_lower_lc CPerlObj::Perl_is_uni_lower_lc
-#define is_uni_lower_lc Perl_is_uni_lower_lc
-#define Perl_is_uni_print_lc CPerlObj::Perl_is_uni_print_lc
-#define is_uni_print_lc Perl_is_uni_print_lc
-#define Perl_is_uni_punct_lc CPerlObj::Perl_is_uni_punct_lc
-#define is_uni_punct_lc Perl_is_uni_punct_lc
-#define Perl_is_uni_xdigit_lc CPerlObj::Perl_is_uni_xdigit_lc
-#define is_uni_xdigit_lc Perl_is_uni_xdigit_lc
-#define Perl_to_uni_upper_lc CPerlObj::Perl_to_uni_upper_lc
-#define to_uni_upper_lc Perl_to_uni_upper_lc
-#define Perl_to_uni_title_lc CPerlObj::Perl_to_uni_title_lc
-#define to_uni_title_lc Perl_to_uni_title_lc
-#define Perl_to_uni_lower_lc CPerlObj::Perl_to_uni_lower_lc
-#define to_uni_lower_lc Perl_to_uni_lower_lc
-#define Perl_is_utf8_char CPerlObj::Perl_is_utf8_char
-#define is_utf8_char Perl_is_utf8_char
-#define Perl_is_utf8_string CPerlObj::Perl_is_utf8_string
-#define is_utf8_string Perl_is_utf8_string
-#define Perl_is_utf8_alnum CPerlObj::Perl_is_utf8_alnum
-#define is_utf8_alnum Perl_is_utf8_alnum
-#define Perl_is_utf8_alnumc CPerlObj::Perl_is_utf8_alnumc
-#define is_utf8_alnumc Perl_is_utf8_alnumc
-#define Perl_is_utf8_idfirst CPerlObj::Perl_is_utf8_idfirst
-#define is_utf8_idfirst Perl_is_utf8_idfirst
-#define Perl_is_utf8_alpha CPerlObj::Perl_is_utf8_alpha
-#define is_utf8_alpha Perl_is_utf8_alpha
-#define Perl_is_utf8_ascii CPerlObj::Perl_is_utf8_ascii
-#define is_utf8_ascii Perl_is_utf8_ascii
-#define Perl_is_utf8_space CPerlObj::Perl_is_utf8_space
-#define is_utf8_space Perl_is_utf8_space
-#define Perl_is_utf8_cntrl CPerlObj::Perl_is_utf8_cntrl
-#define is_utf8_cntrl Perl_is_utf8_cntrl
-#define Perl_is_utf8_digit CPerlObj::Perl_is_utf8_digit
-#define is_utf8_digit Perl_is_utf8_digit
-#define Perl_is_utf8_graph CPerlObj::Perl_is_utf8_graph
-#define is_utf8_graph Perl_is_utf8_graph
-#define Perl_is_utf8_upper CPerlObj::Perl_is_utf8_upper
-#define is_utf8_upper Perl_is_utf8_upper
-#define Perl_is_utf8_lower CPerlObj::Perl_is_utf8_lower
-#define is_utf8_lower Perl_is_utf8_lower
-#define Perl_is_utf8_print CPerlObj::Perl_is_utf8_print
-#define is_utf8_print Perl_is_utf8_print
-#define Perl_is_utf8_punct CPerlObj::Perl_is_utf8_punct
-#define is_utf8_punct Perl_is_utf8_punct
-#define Perl_is_utf8_xdigit CPerlObj::Perl_is_utf8_xdigit
-#define is_utf8_xdigit Perl_is_utf8_xdigit
-#define Perl_is_utf8_mark CPerlObj::Perl_is_utf8_mark
-#define is_utf8_mark Perl_is_utf8_mark
-#define Perl_jmaybe CPerlObj::Perl_jmaybe
-#define jmaybe Perl_jmaybe
-#define Perl_keyword CPerlObj::Perl_keyword
-#define keyword Perl_keyword
-#define Perl_leave_scope CPerlObj::Perl_leave_scope
-#define leave_scope Perl_leave_scope
-#define Perl_lex_end CPerlObj::Perl_lex_end
-#define lex_end Perl_lex_end
-#define Perl_lex_start CPerlObj::Perl_lex_start
-#define lex_start Perl_lex_start
-#define Perl_linklist CPerlObj::Perl_linklist
-#define linklist Perl_linklist
-#define Perl_list CPerlObj::Perl_list
-#define list Perl_list
-#define Perl_listkids CPerlObj::Perl_listkids
-#define listkids Perl_listkids
-#define Perl_load_module CPerlObj::Perl_load_module
-#define load_module Perl_load_module
-#define Perl_vload_module CPerlObj::Perl_vload_module
-#define vload_module Perl_vload_module
-#define Perl_localize CPerlObj::Perl_localize
-#define localize Perl_localize
-#define Perl_looks_like_number CPerlObj::Perl_looks_like_number
-#define looks_like_number Perl_looks_like_number
-#define Perl_magic_clearenv CPerlObj::Perl_magic_clearenv
-#define magic_clearenv Perl_magic_clearenv
-#define Perl_magic_clear_all_env CPerlObj::Perl_magic_clear_all_env
-#define magic_clear_all_env Perl_magic_clear_all_env
-#define Perl_magic_clearpack CPerlObj::Perl_magic_clearpack
-#define magic_clearpack Perl_magic_clearpack
-#define Perl_magic_clearsig CPerlObj::Perl_magic_clearsig
-#define magic_clearsig Perl_magic_clearsig
-#define Perl_magic_existspack CPerlObj::Perl_magic_existspack
-#define magic_existspack Perl_magic_existspack
-#define Perl_magic_freeregexp CPerlObj::Perl_magic_freeregexp
-#define magic_freeregexp Perl_magic_freeregexp
-#define Perl_magic_get CPerlObj::Perl_magic_get
-#define magic_get Perl_magic_get
-#define Perl_magic_getarylen CPerlObj::Perl_magic_getarylen
-#define magic_getarylen Perl_magic_getarylen
-#define Perl_magic_getdefelem CPerlObj::Perl_magic_getdefelem
-#define magic_getdefelem Perl_magic_getdefelem
-#define Perl_magic_getglob CPerlObj::Perl_magic_getglob
-#define magic_getglob Perl_magic_getglob
-#define Perl_magic_getnkeys CPerlObj::Perl_magic_getnkeys
-#define magic_getnkeys Perl_magic_getnkeys
-#define Perl_magic_getpack CPerlObj::Perl_magic_getpack
-#define magic_getpack Perl_magic_getpack
-#define Perl_magic_getpos CPerlObj::Perl_magic_getpos
-#define magic_getpos Perl_magic_getpos
-#define Perl_magic_getsig CPerlObj::Perl_magic_getsig
-#define magic_getsig Perl_magic_getsig
-#define Perl_magic_getsubstr CPerlObj::Perl_magic_getsubstr
-#define magic_getsubstr Perl_magic_getsubstr
-#define Perl_magic_gettaint CPerlObj::Perl_magic_gettaint
-#define magic_gettaint Perl_magic_gettaint
-#define Perl_magic_getuvar CPerlObj::Perl_magic_getuvar
-#define magic_getuvar Perl_magic_getuvar
-#define Perl_magic_getvec CPerlObj::Perl_magic_getvec
-#define magic_getvec Perl_magic_getvec
-#define Perl_magic_len CPerlObj::Perl_magic_len
-#define magic_len Perl_magic_len
-#if defined(USE_THREADS)
-#define Perl_magic_mutexfree CPerlObj::Perl_magic_mutexfree
-#define magic_mutexfree Perl_magic_mutexfree
-#endif
-#define Perl_magic_nextpack CPerlObj::Perl_magic_nextpack
-#define magic_nextpack Perl_magic_nextpack
-#define Perl_magic_regdata_cnt CPerlObj::Perl_magic_regdata_cnt
-#define magic_regdata_cnt Perl_magic_regdata_cnt
-#define Perl_magic_regdatum_get CPerlObj::Perl_magic_regdatum_get
-#define magic_regdatum_get Perl_magic_regdatum_get
-#define Perl_magic_regdatum_set CPerlObj::Perl_magic_regdatum_set
-#define magic_regdatum_set Perl_magic_regdatum_set
-#define Perl_magic_set CPerlObj::Perl_magic_set
-#define magic_set Perl_magic_set
-#define Perl_magic_setamagic CPerlObj::Perl_magic_setamagic
-#define magic_setamagic Perl_magic_setamagic
-#define Perl_magic_setarylen CPerlObj::Perl_magic_setarylen
-#define magic_setarylen Perl_magic_setarylen
-#define Perl_magic_setbm CPerlObj::Perl_magic_setbm
-#define magic_setbm Perl_magic_setbm
-#define Perl_magic_setdbline CPerlObj::Perl_magic_setdbline
-#define magic_setdbline Perl_magic_setdbline
-#if defined(USE_LOCALE_COLLATE)
-#define Perl_magic_setcollxfrm CPerlObj::Perl_magic_setcollxfrm
-#define magic_setcollxfrm Perl_magic_setcollxfrm
-#endif
-#define Perl_magic_setdefelem CPerlObj::Perl_magic_setdefelem
-#define magic_setdefelem Perl_magic_setdefelem
-#define Perl_magic_setenv CPerlObj::Perl_magic_setenv
-#define magic_setenv Perl_magic_setenv
-#define Perl_magic_setfm CPerlObj::Perl_magic_setfm
-#define magic_setfm Perl_magic_setfm
-#define Perl_magic_setisa CPerlObj::Perl_magic_setisa
-#define magic_setisa Perl_magic_setisa
-#define Perl_magic_setglob CPerlObj::Perl_magic_setglob
-#define magic_setglob Perl_magic_setglob
-#define Perl_magic_setmglob CPerlObj::Perl_magic_setmglob
-#define magic_setmglob Perl_magic_setmglob
-#define Perl_magic_setnkeys CPerlObj::Perl_magic_setnkeys
-#define magic_setnkeys Perl_magic_setnkeys
-#define Perl_magic_setpack CPerlObj::Perl_magic_setpack
-#define magic_setpack Perl_magic_setpack
-#define Perl_magic_setpos CPerlObj::Perl_magic_setpos
-#define magic_setpos Perl_magic_setpos
-#define Perl_magic_setsig CPerlObj::Perl_magic_setsig
-#define magic_setsig Perl_magic_setsig
-#define Perl_magic_setsubstr CPerlObj::Perl_magic_setsubstr
-#define magic_setsubstr Perl_magic_setsubstr
-#define Perl_magic_settaint CPerlObj::Perl_magic_settaint
-#define magic_settaint Perl_magic_settaint
-#define Perl_magic_setuvar CPerlObj::Perl_magic_setuvar
-#define magic_setuvar Perl_magic_setuvar
-#define Perl_magic_setvec CPerlObj::Perl_magic_setvec
-#define magic_setvec Perl_magic_setvec
-#define Perl_magic_set_all_env CPerlObj::Perl_magic_set_all_env
-#define magic_set_all_env Perl_magic_set_all_env
-#define Perl_magic_sizepack CPerlObj::Perl_magic_sizepack
-#define magic_sizepack Perl_magic_sizepack
-#define Perl_magic_wipepack CPerlObj::Perl_magic_wipepack
-#define magic_wipepack Perl_magic_wipepack
-#define Perl_magicname CPerlObj::Perl_magicname
-#define magicname Perl_magicname
-#define Perl_markstack_grow CPerlObj::Perl_markstack_grow
-#define markstack_grow Perl_markstack_grow
-#if defined(USE_LOCALE_COLLATE)
-#define Perl_mem_collxfrm CPerlObj::Perl_mem_collxfrm
-#define mem_collxfrm Perl_mem_collxfrm
-#endif
-#define Perl_mess CPerlObj::Perl_mess
-#define mess Perl_mess
-#define Perl_vmess CPerlObj::Perl_vmess
-#define vmess Perl_vmess
-#define Perl_qerror CPerlObj::Perl_qerror
-#define qerror Perl_qerror
-#define Perl_mg_clear CPerlObj::Perl_mg_clear
-#define mg_clear Perl_mg_clear
-#define Perl_mg_copy CPerlObj::Perl_mg_copy
-#define mg_copy Perl_mg_copy
-#define Perl_mg_find CPerlObj::Perl_mg_find
-#define mg_find Perl_mg_find
-#define Perl_mg_free CPerlObj::Perl_mg_free
-#define mg_free Perl_mg_free
-#define Perl_mg_get CPerlObj::Perl_mg_get
-#define mg_get Perl_mg_get
-#define Perl_mg_length CPerlObj::Perl_mg_length
-#define mg_length Perl_mg_length
-#define Perl_mg_magical CPerlObj::Perl_mg_magical
-#define mg_magical Perl_mg_magical
-#define Perl_mg_set CPerlObj::Perl_mg_set
-#define mg_set Perl_mg_set
-#define Perl_mg_size CPerlObj::Perl_mg_size
-#define mg_size Perl_mg_size
-#define Perl_mod CPerlObj::Perl_mod
-#define mod Perl_mod
-#define Perl_mode_from_discipline CPerlObj::Perl_mode_from_discipline
-#define mode_from_discipline Perl_mode_from_discipline
-#define Perl_moreswitches CPerlObj::Perl_moreswitches
-#define moreswitches Perl_moreswitches
-#define Perl_my CPerlObj::Perl_my
-#define my Perl_my
-#define Perl_my_atof CPerlObj::Perl_my_atof
-#define my_atof Perl_my_atof
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
-#define Perl_my_bcopy CPerlObj::Perl_my_bcopy
-#define my_bcopy Perl_my_bcopy
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-#define Perl_my_bzero CPerlObj::Perl_my_bzero
-#define my_bzero Perl_my_bzero
-#endif
-#define Perl_my_exit CPerlObj::Perl_my_exit
-#define my_exit Perl_my_exit
-#define Perl_my_failure_exit CPerlObj::Perl_my_failure_exit
-#define my_failure_exit Perl_my_failure_exit
-#define Perl_my_fflush_all CPerlObj::Perl_my_fflush_all
-#define my_fflush_all Perl_my_fflush_all
-#define Perl_my_lstat CPerlObj::Perl_my_lstat
-#define my_lstat Perl_my_lstat
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-#define Perl_my_memcmp CPerlObj::Perl_my_memcmp
-#define my_memcmp Perl_my_memcmp
-#endif
-#if !defined(HAS_MEMSET)
-#define Perl_my_memset CPerlObj::Perl_my_memset
-#define my_memset Perl_my_memset
-#endif
-#if !defined(PERL_OBJECT)
-#define Perl_my_pclose CPerlObj::Perl_my_pclose
-#define my_pclose Perl_my_pclose
-#define Perl_my_popen CPerlObj::Perl_my_popen
-#define my_popen Perl_my_popen
-#endif
-#define Perl_my_setenv CPerlObj::Perl_my_setenv
-#define my_setenv Perl_my_setenv
-#define Perl_my_stat CPerlObj::Perl_my_stat
-#define my_stat Perl_my_stat
-#if defined(MYSWAP)
-#define Perl_my_swap CPerlObj::Perl_my_swap
-#define my_swap Perl_my_swap
-#define Perl_my_htonl CPerlObj::Perl_my_htonl
-#define my_htonl Perl_my_htonl
-#define Perl_my_ntohl CPerlObj::Perl_my_ntohl
-#define my_ntohl Perl_my_ntohl
-#endif
-#define Perl_my_unexec CPerlObj::Perl_my_unexec
-#define my_unexec Perl_my_unexec
-#define Perl_newANONLIST CPerlObj::Perl_newANONLIST
-#define newANONLIST Perl_newANONLIST
-#define Perl_newANONHASH CPerlObj::Perl_newANONHASH
-#define newANONHASH Perl_newANONHASH
-#define Perl_newANONSUB CPerlObj::Perl_newANONSUB
-#define newANONSUB Perl_newANONSUB
-#define Perl_newASSIGNOP CPerlObj::Perl_newASSIGNOP
-#define newASSIGNOP Perl_newASSIGNOP
-#define Perl_newCONDOP CPerlObj::Perl_newCONDOP
-#define newCONDOP Perl_newCONDOP
-#define Perl_newCONSTSUB CPerlObj::Perl_newCONSTSUB
-#define newCONSTSUB Perl_newCONSTSUB
-#define Perl_newFORM CPerlObj::Perl_newFORM
-#define newFORM Perl_newFORM
-#define Perl_newFOROP CPerlObj::Perl_newFOROP
-#define newFOROP Perl_newFOROP
-#define Perl_newLOGOP CPerlObj::Perl_newLOGOP
-#define newLOGOP Perl_newLOGOP
-#define Perl_newLOOPEX CPerlObj::Perl_newLOOPEX
-#define newLOOPEX Perl_newLOOPEX
-#define Perl_newLOOPOP CPerlObj::Perl_newLOOPOP
-#define newLOOPOP Perl_newLOOPOP
-#define Perl_newNULLLIST CPerlObj::Perl_newNULLLIST
-#define newNULLLIST Perl_newNULLLIST
-#define Perl_newOP CPerlObj::Perl_newOP
-#define newOP Perl_newOP
-#define Perl_newPROG CPerlObj::Perl_newPROG
-#define newPROG Perl_newPROG
-#define Perl_newRANGE CPerlObj::Perl_newRANGE
-#define newRANGE Perl_newRANGE
-#define Perl_newSLICEOP CPerlObj::Perl_newSLICEOP
-#define newSLICEOP Perl_newSLICEOP
-#define Perl_newSTATEOP CPerlObj::Perl_newSTATEOP
-#define newSTATEOP Perl_newSTATEOP
-#define Perl_newSUB CPerlObj::Perl_newSUB
-#define newSUB Perl_newSUB
-#define Perl_newXS CPerlObj::Perl_newXS
-#define newXS Perl_newXS
-#define Perl_newAV CPerlObj::Perl_newAV
-#define newAV Perl_newAV
-#define Perl_newAVREF CPerlObj::Perl_newAVREF
-#define newAVREF Perl_newAVREF
-#define Perl_newBINOP CPerlObj::Perl_newBINOP
-#define newBINOP Perl_newBINOP
-#define Perl_newCVREF CPerlObj::Perl_newCVREF
-#define newCVREF Perl_newCVREF
-#define Perl_newGVOP CPerlObj::Perl_newGVOP
-#define newGVOP Perl_newGVOP
-#define Perl_newGVgen CPerlObj::Perl_newGVgen
-#define newGVgen Perl_newGVgen
-#define Perl_newGVREF CPerlObj::Perl_newGVREF
-#define newGVREF Perl_newGVREF
-#define Perl_newHVREF CPerlObj::Perl_newHVREF
-#define newHVREF Perl_newHVREF
-#define Perl_newHV CPerlObj::Perl_newHV
-#define newHV Perl_newHV
-#define Perl_newHVhv CPerlObj::Perl_newHVhv
-#define newHVhv Perl_newHVhv
-#define Perl_newIO CPerlObj::Perl_newIO
-#define newIO Perl_newIO
-#define Perl_newLISTOP CPerlObj::Perl_newLISTOP
-#define newLISTOP Perl_newLISTOP
-#define Perl_newPADOP CPerlObj::Perl_newPADOP
-#define newPADOP Perl_newPADOP
-#define Perl_newPMOP CPerlObj::Perl_newPMOP
-#define newPMOP Perl_newPMOP
-#define Perl_newPVOP CPerlObj::Perl_newPVOP
-#define newPVOP Perl_newPVOP
-#define Perl_newRV CPerlObj::Perl_newRV
-#define newRV Perl_newRV
-#define Perl_newRV_noinc CPerlObj::Perl_newRV_noinc
-#define newRV_noinc Perl_newRV_noinc
-#define Perl_newSV CPerlObj::Perl_newSV
-#define newSV Perl_newSV
-#define Perl_newSVREF CPerlObj::Perl_newSVREF
-#define newSVREF Perl_newSVREF
-#define Perl_newSVOP CPerlObj::Perl_newSVOP
-#define newSVOP Perl_newSVOP
-#define Perl_newSViv CPerlObj::Perl_newSViv
-#define newSViv Perl_newSViv
-#define Perl_newSVuv CPerlObj::Perl_newSVuv
-#define newSVuv Perl_newSVuv
-#define Perl_newSVnv CPerlObj::Perl_newSVnv
-#define newSVnv Perl_newSVnv
-#define Perl_newSVpv CPerlObj::Perl_newSVpv
-#define newSVpv Perl_newSVpv
-#define Perl_newSVpvn CPerlObj::Perl_newSVpvn
-#define newSVpvn Perl_newSVpvn
-#define Perl_newSVpvf CPerlObj::Perl_newSVpvf
-#define newSVpvf Perl_newSVpvf
-#define Perl_vnewSVpvf CPerlObj::Perl_vnewSVpvf
-#define vnewSVpvf Perl_vnewSVpvf
-#define Perl_newSVrv CPerlObj::Perl_newSVrv
-#define newSVrv Perl_newSVrv
-#define Perl_newSVsv CPerlObj::Perl_newSVsv
-#define newSVsv Perl_newSVsv
-#define Perl_newUNOP CPerlObj::Perl_newUNOP
-#define newUNOP Perl_newUNOP
-#define Perl_newWHILEOP CPerlObj::Perl_newWHILEOP
-#define newWHILEOP Perl_newWHILEOP
-#define Perl_new_stackinfo CPerlObj::Perl_new_stackinfo
-#define new_stackinfo Perl_new_stackinfo
-#define Perl_nextargv CPerlObj::Perl_nextargv
-#define nextargv Perl_nextargv
-#define Perl_ninstr CPerlObj::Perl_ninstr
-#define ninstr Perl_ninstr
-#define Perl_oopsCV CPerlObj::Perl_oopsCV
-#define oopsCV Perl_oopsCV
-#define Perl_op_free CPerlObj::Perl_op_free
-#define op_free Perl_op_free
-#define Perl_package CPerlObj::Perl_package
-#define package Perl_package
-#define Perl_pad_alloc CPerlObj::Perl_pad_alloc
-#define pad_alloc Perl_pad_alloc
-#define Perl_pad_allocmy CPerlObj::Perl_pad_allocmy
-#define pad_allocmy Perl_pad_allocmy
-#define Perl_pad_findmy CPerlObj::Perl_pad_findmy
-#define pad_findmy Perl_pad_findmy
-#define Perl_oopsAV CPerlObj::Perl_oopsAV
-#define oopsAV Perl_oopsAV
-#define Perl_oopsHV CPerlObj::Perl_oopsHV
-#define oopsHV Perl_oopsHV
-#define Perl_pad_leavemy CPerlObj::Perl_pad_leavemy
-#define pad_leavemy Perl_pad_leavemy
-#define Perl_pad_sv CPerlObj::Perl_pad_sv
-#define pad_sv Perl_pad_sv
-#define Perl_pad_free CPerlObj::Perl_pad_free
-#define pad_free Perl_pad_free
-#define Perl_pad_reset CPerlObj::Perl_pad_reset
-#define pad_reset Perl_pad_reset
-#define Perl_pad_swipe CPerlObj::Perl_pad_swipe
-#define pad_swipe Perl_pad_swipe
-#define Perl_peep CPerlObj::Perl_peep
-#define peep Perl_peep
-#if defined(PERL_OBJECT)
-#define Perl_construct CPerlObj::Perl_construct
-#define Perl_destruct CPerlObj::Perl_destruct
-#define Perl_free CPerlObj::Perl_free
-#define Perl_run CPerlObj::Perl_run
-#define Perl_parse CPerlObj::Perl_parse
-#endif
-#if defined(USE_THREADS)
-#define Perl_new_struct_thread CPerlObj::Perl_new_struct_thread
-#define new_struct_thread Perl_new_struct_thread
-#endif
-#define Perl_call_atexit CPerlObj::Perl_call_atexit
-#define call_atexit Perl_call_atexit
-#define Perl_call_argv CPerlObj::Perl_call_argv
-#define call_argv Perl_call_argv
-#define Perl_call_method CPerlObj::Perl_call_method
-#define call_method Perl_call_method
-#define Perl_call_pv CPerlObj::Perl_call_pv
-#define call_pv Perl_call_pv
-#define Perl_call_sv CPerlObj::Perl_call_sv
-#define call_sv Perl_call_sv
-#define Perl_eval_pv CPerlObj::Perl_eval_pv
-#define eval_pv Perl_eval_pv
-#define Perl_eval_sv CPerlObj::Perl_eval_sv
-#define eval_sv Perl_eval_sv
-#define Perl_get_sv CPerlObj::Perl_get_sv
-#define get_sv Perl_get_sv
-#define Perl_get_av CPerlObj::Perl_get_av
-#define get_av Perl_get_av
-#define Perl_get_hv CPerlObj::Perl_get_hv
-#define get_hv Perl_get_hv
-#define Perl_get_cv CPerlObj::Perl_get_cv
-#define get_cv Perl_get_cv
-#define Perl_init_i18nl10n CPerlObj::Perl_init_i18nl10n
-#define init_i18nl10n Perl_init_i18nl10n
-#define Perl_init_i18nl14n CPerlObj::Perl_init_i18nl14n
-#define init_i18nl14n Perl_init_i18nl14n
-#define Perl_new_collate CPerlObj::Perl_new_collate
-#define new_collate Perl_new_collate
-#define Perl_new_ctype CPerlObj::Perl_new_ctype
-#define new_ctype Perl_new_ctype
-#define Perl_new_numeric CPerlObj::Perl_new_numeric
-#define new_numeric Perl_new_numeric
-#define Perl_set_numeric_local CPerlObj::Perl_set_numeric_local
-#define set_numeric_local Perl_set_numeric_local
-#define Perl_set_numeric_radix CPerlObj::Perl_set_numeric_radix
-#define set_numeric_radix Perl_set_numeric_radix
-#define Perl_set_numeric_standard CPerlObj::Perl_set_numeric_standard
-#define set_numeric_standard Perl_set_numeric_standard
-#define Perl_require_pv CPerlObj::Perl_require_pv
-#define require_pv Perl_require_pv
-#define Perl_pidgone CPerlObj::Perl_pidgone
-#define pidgone Perl_pidgone
-#define Perl_pmflag CPerlObj::Perl_pmflag
-#define pmflag Perl_pmflag
-#define Perl_pmruntime CPerlObj::Perl_pmruntime
-#define pmruntime Perl_pmruntime
-#define Perl_pmtrans CPerlObj::Perl_pmtrans
-#define pmtrans Perl_pmtrans
-#define Perl_pop_return CPerlObj::Perl_pop_return
-#define pop_return Perl_pop_return
-#define Perl_pop_scope CPerlObj::Perl_pop_scope
-#define pop_scope Perl_pop_scope
-#define Perl_prepend_elem CPerlObj::Perl_prepend_elem
-#define prepend_elem Perl_prepend_elem
-#define Perl_push_return CPerlObj::Perl_push_return
-#define push_return Perl_push_return
-#define Perl_push_scope CPerlObj::Perl_push_scope
-#define push_scope Perl_push_scope
-#define Perl_ref CPerlObj::Perl_ref
-#define ref Perl_ref
-#define Perl_refkids CPerlObj::Perl_refkids
-#define refkids Perl_refkids
-#define Perl_regdump CPerlObj::Perl_regdump
-#define regdump Perl_regdump
-#define Perl_pregexec CPerlObj::Perl_pregexec
-#define pregexec Perl_pregexec
-#define Perl_pregfree CPerlObj::Perl_pregfree
-#define pregfree Perl_pregfree
-#define Perl_pregcomp CPerlObj::Perl_pregcomp
-#define pregcomp Perl_pregcomp
-#define Perl_re_intuit_start CPerlObj::Perl_re_intuit_start
-#define re_intuit_start Perl_re_intuit_start
-#define Perl_re_intuit_string CPerlObj::Perl_re_intuit_string
-#define re_intuit_string Perl_re_intuit_string
-#define Perl_regexec_flags CPerlObj::Perl_regexec_flags
-#define regexec_flags Perl_regexec_flags
-#define Perl_regnext CPerlObj::Perl_regnext
-#define regnext Perl_regnext
-#define Perl_regprop CPerlObj::Perl_regprop
-#define regprop Perl_regprop
-#define Perl_repeatcpy CPerlObj::Perl_repeatcpy
-#define repeatcpy Perl_repeatcpy
-#define Perl_rninstr CPerlObj::Perl_rninstr
-#define rninstr Perl_rninstr
-#define Perl_rsignal CPerlObj::Perl_rsignal
-#define rsignal Perl_rsignal
-#define Perl_rsignal_restore CPerlObj::Perl_rsignal_restore
-#define rsignal_restore Perl_rsignal_restore
-#define Perl_rsignal_save CPerlObj::Perl_rsignal_save
-#define rsignal_save Perl_rsignal_save
-#define Perl_rsignal_state CPerlObj::Perl_rsignal_state
-#define rsignal_state Perl_rsignal_state
-#define Perl_rxres_free CPerlObj::Perl_rxres_free
-#define rxres_free Perl_rxres_free
-#define Perl_rxres_restore CPerlObj::Perl_rxres_restore
-#define rxres_restore Perl_rxres_restore
-#define Perl_rxres_save CPerlObj::Perl_rxres_save
-#define rxres_save Perl_rxres_save
-#if !defined(HAS_RENAME)
-#define Perl_same_dirent CPerlObj::Perl_same_dirent
-#define same_dirent Perl_same_dirent
-#endif
-#define Perl_savepv CPerlObj::Perl_savepv
-#define savepv Perl_savepv
-#define Perl_savepvn CPerlObj::Perl_savepvn
-#define savepvn Perl_savepvn
-#define Perl_savestack_grow CPerlObj::Perl_savestack_grow
-#define savestack_grow Perl_savestack_grow
-#define Perl_save_aelem CPerlObj::Perl_save_aelem
-#define save_aelem Perl_save_aelem
-#define Perl_save_alloc CPerlObj::Perl_save_alloc
-#define save_alloc Perl_save_alloc
-#define Perl_save_aptr CPerlObj::Perl_save_aptr
-#define save_aptr Perl_save_aptr
-#define Perl_save_ary CPerlObj::Perl_save_ary
-#define save_ary Perl_save_ary
-#define Perl_save_clearsv CPerlObj::Perl_save_clearsv
-#define save_clearsv Perl_save_clearsv
-#define Perl_save_delete CPerlObj::Perl_save_delete
-#define save_delete Perl_save_delete
-#define Perl_save_destructor CPerlObj::Perl_save_destructor
-#define save_destructor Perl_save_destructor
-#define Perl_save_destructor_x CPerlObj::Perl_save_destructor_x
-#define save_destructor_x Perl_save_destructor_x
-#define Perl_save_freesv CPerlObj::Perl_save_freesv
-#define save_freesv Perl_save_freesv
-#define Perl_save_freeop CPerlObj::Perl_save_freeop
-#define save_freeop Perl_save_freeop
-#define Perl_save_freepv CPerlObj::Perl_save_freepv
-#define save_freepv Perl_save_freepv
-#define Perl_save_generic_svref CPerlObj::Perl_save_generic_svref
-#define save_generic_svref Perl_save_generic_svref
-#define Perl_save_generic_pvref CPerlObj::Perl_save_generic_pvref
-#define save_generic_pvref Perl_save_generic_pvref
-#define Perl_save_gp CPerlObj::Perl_save_gp
-#define save_gp Perl_save_gp
-#define Perl_save_hash CPerlObj::Perl_save_hash
-#define save_hash Perl_save_hash
-#define Perl_save_helem CPerlObj::Perl_save_helem
-#define save_helem Perl_save_helem
-#define Perl_save_hints CPerlObj::Perl_save_hints
-#define save_hints Perl_save_hints
-#define Perl_save_hptr CPerlObj::Perl_save_hptr
-#define save_hptr Perl_save_hptr
-#define Perl_save_I16 CPerlObj::Perl_save_I16
-#define save_I16 Perl_save_I16
-#define Perl_save_I32 CPerlObj::Perl_save_I32
-#define save_I32 Perl_save_I32
-#define Perl_save_I8 CPerlObj::Perl_save_I8
-#define save_I8 Perl_save_I8
-#define Perl_save_int CPerlObj::Perl_save_int
-#define save_int Perl_save_int
-#define Perl_save_item CPerlObj::Perl_save_item
-#define save_item Perl_save_item
-#define Perl_save_iv CPerlObj::Perl_save_iv
-#define save_iv Perl_save_iv
-#define Perl_save_list CPerlObj::Perl_save_list
-#define save_list Perl_save_list
-#define Perl_save_long CPerlObj::Perl_save_long
-#define save_long Perl_save_long
-#define Perl_save_mortalizesv CPerlObj::Perl_save_mortalizesv
-#define save_mortalizesv Perl_save_mortalizesv
-#define Perl_save_nogv CPerlObj::Perl_save_nogv
-#define save_nogv Perl_save_nogv
-#define Perl_save_op CPerlObj::Perl_save_op
-#define save_op Perl_save_op
-#define Perl_save_scalar CPerlObj::Perl_save_scalar
-#define save_scalar Perl_save_scalar
-#define Perl_save_pptr CPerlObj::Perl_save_pptr
-#define save_pptr Perl_save_pptr
-#define Perl_save_vptr CPerlObj::Perl_save_vptr
-#define save_vptr Perl_save_vptr
-#define Perl_save_re_context CPerlObj::Perl_save_re_context
-#define save_re_context Perl_save_re_context
-#define Perl_save_padsv CPerlObj::Perl_save_padsv
-#define save_padsv Perl_save_padsv
-#define Perl_save_sptr CPerlObj::Perl_save_sptr
-#define save_sptr Perl_save_sptr
-#define Perl_save_svref CPerlObj::Perl_save_svref
-#define save_svref Perl_save_svref
-#define Perl_save_threadsv CPerlObj::Perl_save_threadsv
-#define save_threadsv Perl_save_threadsv
-#define Perl_sawparens CPerlObj::Perl_sawparens
-#define sawparens Perl_sawparens
-#define Perl_scalar CPerlObj::Perl_scalar
-#define scalar Perl_scalar
-#define Perl_scalarkids CPerlObj::Perl_scalarkids
-#define scalarkids Perl_scalarkids
-#define Perl_scalarseq CPerlObj::Perl_scalarseq
-#define scalarseq Perl_scalarseq
-#define Perl_scalarvoid CPerlObj::Perl_scalarvoid
-#define scalarvoid Perl_scalarvoid
-#define Perl_scan_bin CPerlObj::Perl_scan_bin
-#define scan_bin Perl_scan_bin
-#define Perl_scan_hex CPerlObj::Perl_scan_hex
-#define scan_hex Perl_scan_hex
-#define Perl_scan_num CPerlObj::Perl_scan_num
-#define scan_num Perl_scan_num
-#define Perl_scan_oct CPerlObj::Perl_scan_oct
-#define scan_oct Perl_scan_oct
-#define Perl_scope CPerlObj::Perl_scope
-#define scope Perl_scope
-#define Perl_screaminstr CPerlObj::Perl_screaminstr
-#define screaminstr Perl_screaminstr
-#if !defined(VMS)
-#define Perl_setenv_getix CPerlObj::Perl_setenv_getix
-#define setenv_getix Perl_setenv_getix
-#endif
-#define Perl_setdefout CPerlObj::Perl_setdefout
-#define setdefout Perl_setdefout
-#define Perl_sharepvn CPerlObj::Perl_sharepvn
-#define sharepvn Perl_sharepvn
-#define Perl_share_hek CPerlObj::Perl_share_hek
-#define share_hek Perl_share_hek
-#define Perl_sighandler CPerlObj::Perl_sighandler
-#define sighandler Perl_sighandler
-#define Perl_stack_grow CPerlObj::Perl_stack_grow
-#define stack_grow Perl_stack_grow
-#define Perl_start_subparse CPerlObj::Perl_start_subparse
-#define start_subparse Perl_start_subparse
-#define Perl_sub_crush_depth CPerlObj::Perl_sub_crush_depth
-#define sub_crush_depth Perl_sub_crush_depth
-#define Perl_sv_2bool CPerlObj::Perl_sv_2bool
-#define sv_2bool Perl_sv_2bool
-#define Perl_sv_2cv CPerlObj::Perl_sv_2cv
-#define sv_2cv Perl_sv_2cv
-#define Perl_sv_2io CPerlObj::Perl_sv_2io
-#define sv_2io Perl_sv_2io
-#define Perl_sv_2iv CPerlObj::Perl_sv_2iv
-#define sv_2iv Perl_sv_2iv
-#define Perl_sv_2mortal CPerlObj::Perl_sv_2mortal
-#define sv_2mortal Perl_sv_2mortal
-#define Perl_sv_2nv CPerlObj::Perl_sv_2nv
-#define sv_2nv Perl_sv_2nv
-#define Perl_sv_2pv CPerlObj::Perl_sv_2pv
-#define sv_2pv Perl_sv_2pv
-#define Perl_sv_2pvutf8 CPerlObj::Perl_sv_2pvutf8
-#define sv_2pvutf8 Perl_sv_2pvutf8
-#define Perl_sv_2pvbyte CPerlObj::Perl_sv_2pvbyte
-#define sv_2pvbyte Perl_sv_2pvbyte
-#define Perl_sv_2uv CPerlObj::Perl_sv_2uv
-#define sv_2uv Perl_sv_2uv
-#define Perl_sv_iv CPerlObj::Perl_sv_iv
-#define sv_iv Perl_sv_iv
-#define Perl_sv_uv CPerlObj::Perl_sv_uv
-#define sv_uv Perl_sv_uv
-#define Perl_sv_nv CPerlObj::Perl_sv_nv
-#define sv_nv Perl_sv_nv
-#define Perl_sv_pvn CPerlObj::Perl_sv_pvn
-#define sv_pvn Perl_sv_pvn
-#define Perl_sv_pvutf8n CPerlObj::Perl_sv_pvutf8n
-#define sv_pvutf8n Perl_sv_pvutf8n
-#define Perl_sv_pvbyten CPerlObj::Perl_sv_pvbyten
-#define sv_pvbyten Perl_sv_pvbyten
-#define Perl_sv_true CPerlObj::Perl_sv_true
-#define sv_true Perl_sv_true
-#define Perl_sv_add_arena CPerlObj::Perl_sv_add_arena
-#define sv_add_arena Perl_sv_add_arena
-#define Perl_sv_backoff CPerlObj::Perl_sv_backoff
-#define sv_backoff Perl_sv_backoff
-#define Perl_sv_bless CPerlObj::Perl_sv_bless
-#define sv_bless Perl_sv_bless
-#define Perl_sv_catpvf CPerlObj::Perl_sv_catpvf
-#define sv_catpvf Perl_sv_catpvf
-#define Perl_sv_vcatpvf CPerlObj::Perl_sv_vcatpvf
-#define sv_vcatpvf Perl_sv_vcatpvf
-#define Perl_sv_catpv CPerlObj::Perl_sv_catpv
-#define sv_catpv Perl_sv_catpv
-#define Perl_sv_catpvn CPerlObj::Perl_sv_catpvn
-#define sv_catpvn Perl_sv_catpvn
-#define Perl_sv_catsv CPerlObj::Perl_sv_catsv
-#define sv_catsv Perl_sv_catsv
-#define Perl_sv_chop CPerlObj::Perl_sv_chop
-#define sv_chop Perl_sv_chop
-#define Perl_sv_clean_all CPerlObj::Perl_sv_clean_all
-#define sv_clean_all Perl_sv_clean_all
-#define Perl_sv_clean_objs CPerlObj::Perl_sv_clean_objs
-#define sv_clean_objs Perl_sv_clean_objs
-#define Perl_sv_clear CPerlObj::Perl_sv_clear
-#define sv_clear Perl_sv_clear
-#define Perl_sv_cmp CPerlObj::Perl_sv_cmp
-#define sv_cmp Perl_sv_cmp
-#define Perl_sv_cmp_locale CPerlObj::Perl_sv_cmp_locale
-#define sv_cmp_locale Perl_sv_cmp_locale
-#if defined(USE_LOCALE_COLLATE)
-#define Perl_sv_collxfrm CPerlObj::Perl_sv_collxfrm
-#define sv_collxfrm Perl_sv_collxfrm
-#endif
-#define Perl_sv_compile_2op CPerlObj::Perl_sv_compile_2op
-#define sv_compile_2op Perl_sv_compile_2op
-#define Perl_sv_dec CPerlObj::Perl_sv_dec
-#define sv_dec Perl_sv_dec
-#define Perl_sv_dump CPerlObj::Perl_sv_dump
-#define sv_dump Perl_sv_dump
-#define Perl_sv_derived_from CPerlObj::Perl_sv_derived_from
-#define sv_derived_from Perl_sv_derived_from
-#define Perl_sv_eq CPerlObj::Perl_sv_eq
-#define sv_eq Perl_sv_eq
-#define Perl_sv_free CPerlObj::Perl_sv_free
-#define sv_free Perl_sv_free
-#define Perl_sv_free_arenas CPerlObj::Perl_sv_free_arenas
-#define sv_free_arenas Perl_sv_free_arenas
-#define Perl_sv_gets CPerlObj::Perl_sv_gets
-#define sv_gets Perl_sv_gets
-#define Perl_sv_grow CPerlObj::Perl_sv_grow
-#define sv_grow Perl_sv_grow
-#define Perl_sv_inc CPerlObj::Perl_sv_inc
-#define sv_inc Perl_sv_inc
-#define Perl_sv_insert CPerlObj::Perl_sv_insert
-#define sv_insert Perl_sv_insert
-#define Perl_sv_isa CPerlObj::Perl_sv_isa
-#define sv_isa Perl_sv_isa
-#define Perl_sv_isobject CPerlObj::Perl_sv_isobject
-#define sv_isobject Perl_sv_isobject
-#define Perl_sv_len CPerlObj::Perl_sv_len
-#define sv_len Perl_sv_len
-#define Perl_sv_len_utf8 CPerlObj::Perl_sv_len_utf8
-#define sv_len_utf8 Perl_sv_len_utf8
-#define Perl_sv_magic CPerlObj::Perl_sv_magic
-#define sv_magic Perl_sv_magic
-#define Perl_sv_mortalcopy CPerlObj::Perl_sv_mortalcopy
-#define sv_mortalcopy Perl_sv_mortalcopy
-#define Perl_sv_newmortal CPerlObj::Perl_sv_newmortal
-#define sv_newmortal Perl_sv_newmortal
-#define Perl_sv_newref CPerlObj::Perl_sv_newref
-#define sv_newref Perl_sv_newref
-#define Perl_sv_peek CPerlObj::Perl_sv_peek
-#define sv_peek Perl_sv_peek
-#define Perl_sv_pos_u2b CPerlObj::Perl_sv_pos_u2b
-#define sv_pos_u2b Perl_sv_pos_u2b
-#define Perl_sv_pos_b2u CPerlObj::Perl_sv_pos_b2u
-#define sv_pos_b2u Perl_sv_pos_b2u
-#define Perl_sv_pvn_force CPerlObj::Perl_sv_pvn_force
-#define sv_pvn_force Perl_sv_pvn_force
-#define Perl_sv_pvutf8n_force CPerlObj::Perl_sv_pvutf8n_force
-#define sv_pvutf8n_force Perl_sv_pvutf8n_force
-#define Perl_sv_pvbyten_force CPerlObj::Perl_sv_pvbyten_force
-#define sv_pvbyten_force Perl_sv_pvbyten_force
-#define Perl_sv_reftype CPerlObj::Perl_sv_reftype
-#define sv_reftype Perl_sv_reftype
-#define Perl_sv_replace CPerlObj::Perl_sv_replace
-#define sv_replace Perl_sv_replace
-#define Perl_sv_report_used CPerlObj::Perl_sv_report_used
-#define sv_report_used Perl_sv_report_used
-#define Perl_sv_reset CPerlObj::Perl_sv_reset
-#define sv_reset Perl_sv_reset
-#define Perl_sv_setpvf CPerlObj::Perl_sv_setpvf
-#define sv_setpvf Perl_sv_setpvf
-#define Perl_sv_vsetpvf CPerlObj::Perl_sv_vsetpvf
-#define sv_vsetpvf Perl_sv_vsetpvf
-#define Perl_sv_setiv CPerlObj::Perl_sv_setiv
-#define sv_setiv Perl_sv_setiv
-#define Perl_sv_setpviv CPerlObj::Perl_sv_setpviv
-#define sv_setpviv Perl_sv_setpviv
-#define Perl_sv_setuv CPerlObj::Perl_sv_setuv
-#define sv_setuv Perl_sv_setuv
-#define Perl_sv_setnv CPerlObj::Perl_sv_setnv
-#define sv_setnv Perl_sv_setnv
-#define Perl_sv_setref_iv CPerlObj::Perl_sv_setref_iv
-#define sv_setref_iv Perl_sv_setref_iv
-#define Perl_sv_setref_nv CPerlObj::Perl_sv_setref_nv
-#define sv_setref_nv Perl_sv_setref_nv
-#define Perl_sv_setref_pv CPerlObj::Perl_sv_setref_pv
-#define sv_setref_pv Perl_sv_setref_pv
-#define Perl_sv_setref_pvn CPerlObj::Perl_sv_setref_pvn
-#define sv_setref_pvn Perl_sv_setref_pvn
-#define Perl_sv_setpv CPerlObj::Perl_sv_setpv
-#define sv_setpv Perl_sv_setpv
-#define Perl_sv_setpvn CPerlObj::Perl_sv_setpvn
-#define sv_setpvn Perl_sv_setpvn
-#define Perl_sv_setsv CPerlObj::Perl_sv_setsv
-#define sv_setsv Perl_sv_setsv
-#define Perl_sv_taint CPerlObj::Perl_sv_taint
-#define sv_taint Perl_sv_taint
-#define Perl_sv_tainted CPerlObj::Perl_sv_tainted
-#define sv_tainted Perl_sv_tainted
-#define Perl_sv_unmagic CPerlObj::Perl_sv_unmagic
-#define sv_unmagic Perl_sv_unmagic
-#define Perl_sv_unref CPerlObj::Perl_sv_unref
-#define sv_unref Perl_sv_unref
-#define Perl_sv_untaint CPerlObj::Perl_sv_untaint
-#define sv_untaint Perl_sv_untaint
-#define Perl_sv_upgrade CPerlObj::Perl_sv_upgrade
-#define sv_upgrade Perl_sv_upgrade
-#define Perl_sv_usepvn CPerlObj::Perl_sv_usepvn
-#define sv_usepvn Perl_sv_usepvn
-#define Perl_sv_vcatpvfn CPerlObj::Perl_sv_vcatpvfn
-#define sv_vcatpvfn Perl_sv_vcatpvfn
-#define Perl_sv_vsetpvfn CPerlObj::Perl_sv_vsetpvfn
-#define sv_vsetpvfn Perl_sv_vsetpvfn
-#define Perl_str_to_version CPerlObj::Perl_str_to_version
-#define str_to_version Perl_str_to_version
-#define Perl_swash_init CPerlObj::Perl_swash_init
-#define swash_init Perl_swash_init
-#define Perl_swash_fetch CPerlObj::Perl_swash_fetch
-#define swash_fetch Perl_swash_fetch
-#define Perl_taint_env CPerlObj::Perl_taint_env
-#define taint_env Perl_taint_env
-#define Perl_taint_proper CPerlObj::Perl_taint_proper
-#define taint_proper Perl_taint_proper
-#define Perl_to_utf8_lower CPerlObj::Perl_to_utf8_lower
-#define to_utf8_lower Perl_to_utf8_lower
-#define Perl_to_utf8_upper CPerlObj::Perl_to_utf8_upper
-#define to_utf8_upper Perl_to_utf8_upper
-#define Perl_to_utf8_title CPerlObj::Perl_to_utf8_title
-#define to_utf8_title Perl_to_utf8_title
-#if defined(UNLINK_ALL_VERSIONS)
-#define Perl_unlnk CPerlObj::Perl_unlnk
-#define unlnk Perl_unlnk
-#endif
-#if defined(USE_THREADS)
-#define Perl_unlock_condpair CPerlObj::Perl_unlock_condpair
-#define unlock_condpair Perl_unlock_condpair
-#endif
-#define Perl_unsharepvn CPerlObj::Perl_unsharepvn
-#define unsharepvn Perl_unsharepvn
-#define Perl_unshare_hek CPerlObj::Perl_unshare_hek
-#define unshare_hek Perl_unshare_hek
-#define Perl_utilize CPerlObj::Perl_utilize
-#define utilize Perl_utilize
-#define Perl_utf16_to_utf8 CPerlObj::Perl_utf16_to_utf8
-#define utf16_to_utf8 Perl_utf16_to_utf8
-#define Perl_utf16_to_utf8_reversed CPerlObj::Perl_utf16_to_utf8_reversed
-#define utf16_to_utf8_reversed Perl_utf16_to_utf8_reversed
-#define Perl_utf8_length CPerlObj::Perl_utf8_length
-#define utf8_length Perl_utf8_length
-#define Perl_utf8_distance CPerlObj::Perl_utf8_distance
-#define utf8_distance Perl_utf8_distance
-#define Perl_utf8_hop CPerlObj::Perl_utf8_hop
-#define utf8_hop Perl_utf8_hop
-#define Perl_utf8_to_bytes CPerlObj::Perl_utf8_to_bytes
-#define utf8_to_bytes Perl_utf8_to_bytes
-#define Perl_bytes_from_utf8 CPerlObj::Perl_bytes_from_utf8
-#define bytes_from_utf8 Perl_bytes_from_utf8
-#define Perl_bytes_to_utf8 CPerlObj::Perl_bytes_to_utf8
-#define bytes_to_utf8 Perl_bytes_to_utf8
-#define Perl_utf8_to_uv_simple CPerlObj::Perl_utf8_to_uv_simple
-#define utf8_to_uv_simple Perl_utf8_to_uv_simple
-#define Perl_utf8_to_uv CPerlObj::Perl_utf8_to_uv
-#define utf8_to_uv Perl_utf8_to_uv
-#define Perl_uv_to_utf8 CPerlObj::Perl_uv_to_utf8
-#define uv_to_utf8 Perl_uv_to_utf8
-#define Perl_vivify_defelem CPerlObj::Perl_vivify_defelem
-#define vivify_defelem Perl_vivify_defelem
-#define Perl_vivify_ref CPerlObj::Perl_vivify_ref
-#define vivify_ref Perl_vivify_ref
-#define Perl_wait4pid CPerlObj::Perl_wait4pid
-#define wait4pid Perl_wait4pid
-#define Perl_report_evil_fh CPerlObj::Perl_report_evil_fh
-#define report_evil_fh Perl_report_evil_fh
-#define Perl_report_uninit CPerlObj::Perl_report_uninit
-#define report_uninit Perl_report_uninit
-#define Perl_warn CPerlObj::Perl_warn
-#define warn Perl_warn
-#define Perl_vwarn CPerlObj::Perl_vwarn
-#define vwarn Perl_vwarn
-#define Perl_warner CPerlObj::Perl_warner
-#define warner Perl_warner
-#define Perl_vwarner CPerlObj::Perl_vwarner
-#define vwarner Perl_vwarner
-#define Perl_watch CPerlObj::Perl_watch
-#define watch Perl_watch
-#define Perl_whichsig CPerlObj::Perl_whichsig
-#define whichsig Perl_whichsig
-#define Perl_yyerror CPerlObj::Perl_yyerror
-#define yyerror Perl_yyerror
-#ifdef USE_PURE_BISON
-#define Perl_yylex_r CPerlObj::Perl_yylex_r
-#define yylex_r Perl_yylex_r
-#endif
-#define Perl_yylex CPerlObj::Perl_yylex
-#define yylex Perl_yylex
-#define Perl_yyparse CPerlObj::Perl_yyparse
-#define yyparse Perl_yyparse
-#define Perl_yywarn CPerlObj::Perl_yywarn
-#define yywarn Perl_yywarn
-#if defined(MYMALLOC)
-#define Perl_dump_mstats CPerlObj::Perl_dump_mstats
-#define dump_mstats Perl_dump_mstats
-#define Perl_get_mstats CPerlObj::Perl_get_mstats
-#define get_mstats Perl_get_mstats
-#endif
-#define Perl_safesysmalloc CPerlObj::Perl_safesysmalloc
-#define safesysmalloc Perl_safesysmalloc
-#define Perl_safesyscalloc CPerlObj::Perl_safesyscalloc
-#define safesyscalloc Perl_safesyscalloc
-#define Perl_safesysrealloc CPerlObj::Perl_safesysrealloc
-#define safesysrealloc Perl_safesysrealloc
-#define Perl_safesysfree CPerlObj::Perl_safesysfree
-#define safesysfree Perl_safesysfree
-#if defined(LEAKTEST)
-#define Perl_safexmalloc CPerlObj::Perl_safexmalloc
-#define safexmalloc Perl_safexmalloc
-#define Perl_safexcalloc CPerlObj::Perl_safexcalloc
-#define safexcalloc Perl_safexcalloc
-#define Perl_safexrealloc CPerlObj::Perl_safexrealloc
-#define safexrealloc Perl_safexrealloc
-#define Perl_safexfree CPerlObj::Perl_safexfree
-#define safexfree Perl_safexfree
-#endif
-#if defined(PERL_GLOBAL_STRUCT)
-#define Perl_GetVars CPerlObj::Perl_GetVars
-#define GetVars Perl_GetVars
-#endif
-#define Perl_runops_standard CPerlObj::Perl_runops_standard
-#define runops_standard Perl_runops_standard
-#define Perl_runops_debug CPerlObj::Perl_runops_debug
-#define runops_debug Perl_runops_debug
-#if defined(USE_THREADS)
-#define Perl_sv_lock CPerlObj::Perl_sv_lock
-#define sv_lock Perl_sv_lock
-#endif
-#define Perl_sv_catpvf_mg CPerlObj::Perl_sv_catpvf_mg
-#define sv_catpvf_mg Perl_sv_catpvf_mg
-#define Perl_sv_vcatpvf_mg CPerlObj::Perl_sv_vcatpvf_mg
-#define sv_vcatpvf_mg Perl_sv_vcatpvf_mg
-#define Perl_sv_catpv_mg CPerlObj::Perl_sv_catpv_mg
-#define sv_catpv_mg Perl_sv_catpv_mg
-#define Perl_sv_catpvn_mg CPerlObj::Perl_sv_catpvn_mg
-#define sv_catpvn_mg Perl_sv_catpvn_mg
-#define Perl_sv_catsv_mg CPerlObj::Perl_sv_catsv_mg
-#define sv_catsv_mg Perl_sv_catsv_mg
-#define Perl_sv_setpvf_mg CPerlObj::Perl_sv_setpvf_mg
-#define sv_setpvf_mg Perl_sv_setpvf_mg
-#define Perl_sv_vsetpvf_mg CPerlObj::Perl_sv_vsetpvf_mg
-#define sv_vsetpvf_mg Perl_sv_vsetpvf_mg
-#define Perl_sv_setiv_mg CPerlObj::Perl_sv_setiv_mg
-#define sv_setiv_mg Perl_sv_setiv_mg
-#define Perl_sv_setpviv_mg CPerlObj::Perl_sv_setpviv_mg
-#define sv_setpviv_mg Perl_sv_setpviv_mg
-#define Perl_sv_setuv_mg CPerlObj::Perl_sv_setuv_mg
-#define sv_setuv_mg Perl_sv_setuv_mg
-#define Perl_sv_setnv_mg CPerlObj::Perl_sv_setnv_mg
-#define sv_setnv_mg Perl_sv_setnv_mg
-#define Perl_sv_setpv_mg CPerlObj::Perl_sv_setpv_mg
-#define sv_setpv_mg Perl_sv_setpv_mg
-#define Perl_sv_setpvn_mg CPerlObj::Perl_sv_setpvn_mg
-#define sv_setpvn_mg Perl_sv_setpvn_mg
-#define Perl_sv_setsv_mg CPerlObj::Perl_sv_setsv_mg
-#define sv_setsv_mg Perl_sv_setsv_mg
-#define Perl_sv_usepvn_mg CPerlObj::Perl_sv_usepvn_mg
-#define sv_usepvn_mg Perl_sv_usepvn_mg
-#define Perl_get_vtbl CPerlObj::Perl_get_vtbl
-#define get_vtbl Perl_get_vtbl
-#define Perl_pv_display CPerlObj::Perl_pv_display
-#define pv_display Perl_pv_display
-#define Perl_dump_indent CPerlObj::Perl_dump_indent
-#define dump_indent Perl_dump_indent
-#define Perl_dump_vindent CPerlObj::Perl_dump_vindent
-#define dump_vindent Perl_dump_vindent
-#define Perl_do_gv_dump CPerlObj::Perl_do_gv_dump
-#define do_gv_dump Perl_do_gv_dump
-#define Perl_do_gvgv_dump CPerlObj::Perl_do_gvgv_dump
-#define do_gvgv_dump Perl_do_gvgv_dump
-#define Perl_do_hv_dump CPerlObj::Perl_do_hv_dump
-#define do_hv_dump Perl_do_hv_dump
-#define Perl_do_magic_dump CPerlObj::Perl_do_magic_dump
-#define do_magic_dump Perl_do_magic_dump
-#define Perl_do_op_dump CPerlObj::Perl_do_op_dump
-#define do_op_dump Perl_do_op_dump
-#define Perl_do_pmop_dump CPerlObj::Perl_do_pmop_dump
-#define do_pmop_dump Perl_do_pmop_dump
-#define Perl_do_sv_dump CPerlObj::Perl_do_sv_dump
-#define do_sv_dump Perl_do_sv_dump
-#define Perl_magic_dump CPerlObj::Perl_magic_dump
-#define magic_dump Perl_magic_dump
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define Perl_default_protect CPerlObj::Perl_default_protect
-#define default_protect Perl_default_protect
-#define Perl_vdefault_protect CPerlObj::Perl_vdefault_protect
-#define vdefault_protect Perl_vdefault_protect
-#endif
-#define Perl_reginitcolors CPerlObj::Perl_reginitcolors
-#define reginitcolors Perl_reginitcolors
-#define Perl_sv_2pv_nolen CPerlObj::Perl_sv_2pv_nolen
-#define sv_2pv_nolen Perl_sv_2pv_nolen
-#define Perl_sv_2pvutf8_nolen CPerlObj::Perl_sv_2pvutf8_nolen
-#define sv_2pvutf8_nolen Perl_sv_2pvutf8_nolen
-#define Perl_sv_2pvbyte_nolen CPerlObj::Perl_sv_2pvbyte_nolen
-#define sv_2pvbyte_nolen Perl_sv_2pvbyte_nolen
-#define Perl_sv_pv CPerlObj::Perl_sv_pv
-#define sv_pv Perl_sv_pv
-#define Perl_sv_pvutf8 CPerlObj::Perl_sv_pvutf8
-#define sv_pvutf8 Perl_sv_pvutf8
-#define Perl_sv_pvbyte CPerlObj::Perl_sv_pvbyte
-#define sv_pvbyte Perl_sv_pvbyte
-#define Perl_sv_utf8_upgrade CPerlObj::Perl_sv_utf8_upgrade
-#define sv_utf8_upgrade Perl_sv_utf8_upgrade
-#define Perl_sv_utf8_downgrade CPerlObj::Perl_sv_utf8_downgrade
-#define sv_utf8_downgrade Perl_sv_utf8_downgrade
-#define Perl_sv_utf8_encode CPerlObj::Perl_sv_utf8_encode
-#define sv_utf8_encode Perl_sv_utf8_encode
-#define Perl_sv_utf8_decode CPerlObj::Perl_sv_utf8_decode
-#define sv_utf8_decode Perl_sv_utf8_decode
-#define Perl_sv_force_normal CPerlObj::Perl_sv_force_normal
-#define sv_force_normal Perl_sv_force_normal
-#define Perl_sv_add_backref CPerlObj::Perl_sv_add_backref
-#define sv_add_backref Perl_sv_add_backref
-#define Perl_sv_del_backref CPerlObj::Perl_sv_del_backref
-#define sv_del_backref Perl_sv_del_backref
-#define Perl_tmps_grow CPerlObj::Perl_tmps_grow
-#define tmps_grow Perl_tmps_grow
-#define Perl_sv_rvweaken CPerlObj::Perl_sv_rvweaken
-#define sv_rvweaken Perl_sv_rvweaken
-#define Perl_magic_killbackrefs CPerlObj::Perl_magic_killbackrefs
-#define magic_killbackrefs Perl_magic_killbackrefs
-#define Perl_newANONATTRSUB CPerlObj::Perl_newANONATTRSUB
-#define newANONATTRSUB Perl_newANONATTRSUB
-#define Perl_newATTRSUB CPerlObj::Perl_newATTRSUB
-#define newATTRSUB Perl_newATTRSUB
-#define Perl_newMYSUB CPerlObj::Perl_newMYSUB
-#define newMYSUB Perl_newMYSUB
-#define Perl_my_attrs CPerlObj::Perl_my_attrs
-#define my_attrs Perl_my_attrs
-#define Perl_boot_core_xsutils CPerlObj::Perl_boot_core_xsutils
-#define boot_core_xsutils Perl_boot_core_xsutils
-#if defined(USE_ITHREADS)
-#define Perl_cx_dup CPerlObj::Perl_cx_dup
-#define cx_dup Perl_cx_dup
-#define Perl_si_dup CPerlObj::Perl_si_dup
-#define si_dup Perl_si_dup
-#define Perl_ss_dup CPerlObj::Perl_ss_dup
-#define ss_dup Perl_ss_dup
-#define Perl_any_dup CPerlObj::Perl_any_dup
-#define any_dup Perl_any_dup
-#define Perl_he_dup CPerlObj::Perl_he_dup
-#define he_dup Perl_he_dup
-#define Perl_re_dup CPerlObj::Perl_re_dup
-#define re_dup Perl_re_dup
-#define Perl_fp_dup CPerlObj::Perl_fp_dup
-#define fp_dup Perl_fp_dup
-#define Perl_dirp_dup CPerlObj::Perl_dirp_dup
-#define dirp_dup Perl_dirp_dup
-#define Perl_gp_dup CPerlObj::Perl_gp_dup
-#define gp_dup Perl_gp_dup
-#define Perl_mg_dup CPerlObj::Perl_mg_dup
-#define mg_dup Perl_mg_dup
-#define Perl_sv_dup CPerlObj::Perl_sv_dup
-#define sv_dup Perl_sv_dup
-#if defined(HAVE_INTERP_INTERN)
-#define Perl_sys_intern_dup CPerlObj::Perl_sys_intern_dup
-#define sys_intern_dup Perl_sys_intern_dup
-#endif
-#define Perl_ptr_table_new CPerlObj::Perl_ptr_table_new
-#define ptr_table_new Perl_ptr_table_new
-#define Perl_ptr_table_fetch CPerlObj::Perl_ptr_table_fetch
-#define ptr_table_fetch Perl_ptr_table_fetch
-#define Perl_ptr_table_store CPerlObj::Perl_ptr_table_store
-#define ptr_table_store Perl_ptr_table_store
-#define Perl_ptr_table_split CPerlObj::Perl_ptr_table_split
-#define ptr_table_split Perl_ptr_table_split
-#define Perl_ptr_table_clear CPerlObj::Perl_ptr_table_clear
-#define ptr_table_clear Perl_ptr_table_clear
-#define Perl_ptr_table_free CPerlObj::Perl_ptr_table_free
-#define ptr_table_free Perl_ptr_table_free
-#endif
-#if defined(HAVE_INTERP_INTERN)
-#define Perl_sys_intern_clear CPerlObj::Perl_sys_intern_clear
-#define sys_intern_clear Perl_sys_intern_clear
-#define Perl_sys_intern_init CPerlObj::Perl_sys_intern_init
-#define sys_intern_init Perl_sys_intern_init
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-#define S_avhv_index_sv CPerlObj::S_avhv_index_sv
-#define avhv_index_sv S_avhv_index_sv
-#define S_avhv_index CPerlObj::S_avhv_index
-#define avhv_index S_avhv_index
-#endif
-#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-#define S_do_trans_simple CPerlObj::S_do_trans_simple
-#define do_trans_simple S_do_trans_simple
-#define S_do_trans_count CPerlObj::S_do_trans_count
-#define do_trans_count S_do_trans_count
-#define S_do_trans_complex CPerlObj::S_do_trans_complex
-#define do_trans_complex S_do_trans_complex
-#define S_do_trans_simple_utf8 CPerlObj::S_do_trans_simple_utf8
-#define do_trans_simple_utf8 S_do_trans_simple_utf8
-#define S_do_trans_count_utf8 CPerlObj::S_do_trans_count_utf8
-#define do_trans_count_utf8 S_do_trans_count_utf8
-#define S_do_trans_complex_utf8 CPerlObj::S_do_trans_complex_utf8
-#define do_trans_complex_utf8 S_do_trans_complex_utf8
-#endif
-#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-#define S_gv_init_sv CPerlObj::S_gv_init_sv
-#define gv_init_sv S_gv_init_sv
-#endif
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-#define S_hsplit CPerlObj::S_hsplit
-#define hsplit S_hsplit
-#define S_hfreeentries CPerlObj::S_hfreeentries
-#define hfreeentries S_hfreeentries
-#define S_more_he CPerlObj::S_more_he
-#define more_he S_more_he
-#define S_new_he CPerlObj::S_new_he
-#define new_he S_new_he
-#define S_del_he CPerlObj::S_del_he
-#define del_he S_del_he
-#define S_save_hek CPerlObj::S_save_hek
-#define save_hek S_save_hek
-#define S_hv_magic_check CPerlObj::S_hv_magic_check
-#define hv_magic_check S_hv_magic_check
-#endif
-#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-#define S_save_magic CPerlObj::S_save_magic
-#define save_magic S_save_magic
-#define S_magic_methpack CPerlObj::S_magic_methpack
-#define magic_methpack S_magic_methpack
-#define S_magic_methcall CPerlObj::S_magic_methcall
-#define magic_methcall S_magic_methcall
-#endif
-#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-#define S_list_assignment CPerlObj::S_list_assignment
-#define list_assignment S_list_assignment
-#define S_bad_type CPerlObj::S_bad_type
-#define bad_type S_bad_type
-#define S_cop_free CPerlObj::S_cop_free
-#define cop_free S_cop_free
-#define S_modkids CPerlObj::S_modkids
-#define modkids S_modkids
-#define S_no_bareword_allowed CPerlObj::S_no_bareword_allowed
-#define no_bareword_allowed S_no_bareword_allowed
-#define S_no_fh_allowed CPerlObj::S_no_fh_allowed
-#define no_fh_allowed S_no_fh_allowed
-#define S_scalarboolean CPerlObj::S_scalarboolean
-#define scalarboolean S_scalarboolean
-#define S_too_few_arguments CPerlObj::S_too_few_arguments
-#define too_few_arguments S_too_few_arguments
-#define S_too_many_arguments CPerlObj::S_too_many_arguments
-#define too_many_arguments S_too_many_arguments
-#define S_trlist_upgrade CPerlObj::S_trlist_upgrade
-#define trlist_upgrade S_trlist_upgrade
-#define S_op_clear CPerlObj::S_op_clear
-#define op_clear S_op_clear
-#define S_null CPerlObj::S_null
-#define null S_null
-#define S_pad_addlex CPerlObj::S_pad_addlex
-#define pad_addlex S_pad_addlex
-#define S_pad_findlex CPerlObj::S_pad_findlex
-#define pad_findlex S_pad_findlex
-#define S_newDEFSVOP CPerlObj::S_newDEFSVOP
-#define newDEFSVOP S_newDEFSVOP
-#define S_new_logop CPerlObj::S_new_logop
-#define new_logop S_new_logop
-#define S_simplify_sort CPerlObj::S_simplify_sort
-#define simplify_sort S_simplify_sort
-#define S_is_handle_constructor CPerlObj::S_is_handle_constructor
-#define is_handle_constructor S_is_handle_constructor
-#define S_gv_ename CPerlObj::S_gv_ename
-#define gv_ename S_gv_ename
-#define S_cv_dump CPerlObj::S_cv_dump
-#define cv_dump S_cv_dump
-#define S_cv_clone2 CPerlObj::S_cv_clone2
-#define cv_clone2 S_cv_clone2
-#define S_scalar_mod_type CPerlObj::S_scalar_mod_type
-#define scalar_mod_type S_scalar_mod_type
-#define S_my_kid CPerlObj::S_my_kid
-#define my_kid S_my_kid
-#define S_dup_attrlist CPerlObj::S_dup_attrlist
-#define dup_attrlist S_dup_attrlist
-#define S_apply_attrs CPerlObj::S_apply_attrs
-#define apply_attrs S_apply_attrs
-# if defined(PL_OP_SLAB_ALLOC)
-#define S_Slab_Alloc CPerlObj::S_Slab_Alloc
-#define Slab_Alloc S_Slab_Alloc
-# endif
-#endif
-#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
-#define S_find_beginning CPerlObj::S_find_beginning
-#define find_beginning S_find_beginning
-#define S_forbid_setid CPerlObj::S_forbid_setid
-#define forbid_setid S_forbid_setid
-#define S_incpush CPerlObj::S_incpush
-#define incpush S_incpush
-#define S_init_interp CPerlObj::S_init_interp
-#define init_interp S_init_interp
-#define S_init_ids CPerlObj::S_init_ids
-#define init_ids S_init_ids
-#define S_init_lexer CPerlObj::S_init_lexer
-#define init_lexer S_init_lexer
-#define S_init_main_stash CPerlObj::S_init_main_stash
-#define init_main_stash S_init_main_stash
-#define S_init_perllib CPerlObj::S_init_perllib
-#define init_perllib S_init_perllib
-#define S_init_postdump_symbols CPerlObj::S_init_postdump_symbols
-#define init_postdump_symbols S_init_postdump_symbols
-#define S_init_predump_symbols CPerlObj::S_init_predump_symbols
-#define init_predump_symbols S_init_predump_symbols
-#define S_my_exit_jump CPerlObj::S_my_exit_jump
-#define my_exit_jump S_my_exit_jump
-#define S_nuke_stacks CPerlObj::S_nuke_stacks
-#define nuke_stacks S_nuke_stacks
-#define S_open_script CPerlObj::S_open_script
-#define open_script S_open_script
-#define S_usage CPerlObj::S_usage
-#define usage S_usage
-#define S_validate_suid CPerlObj::S_validate_suid
-#define validate_suid S_validate_suid
-# if defined(IAMSUID)
-#define S_fd_on_nosuid_fs CPerlObj::S_fd_on_nosuid_fs
-#define fd_on_nosuid_fs S_fd_on_nosuid_fs
-# endif
-#define S_parse_body CPerlObj::S_parse_body
-#define parse_body S_parse_body
-#define S_run_body CPerlObj::S_run_body
-#define run_body S_run_body
-#define S_call_body CPerlObj::S_call_body
-#define call_body S_call_body
-#define S_call_list_body CPerlObj::S_call_list_body
-#define call_list_body S_call_list_body
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define S_vparse_body CPerlObj::S_vparse_body
-#define vparse_body S_vparse_body
-#define S_vrun_body CPerlObj::S_vrun_body
-#define vrun_body S_vrun_body
-#define S_vcall_body CPerlObj::S_vcall_body
-#define vcall_body S_vcall_body
-#define S_vcall_list_body CPerlObj::S_vcall_list_body
-#define vcall_list_body S_vcall_list_body
-#endif
-# if defined(USE_THREADS)
-#define S_init_main_thread CPerlObj::S_init_main_thread
-#define init_main_thread S_init_main_thread
-# endif
-#endif
-#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-#define S_doencodes CPerlObj::S_doencodes
-#define doencodes S_doencodes
-#define S_refto CPerlObj::S_refto
-#define refto S_refto
-#define S_seed CPerlObj::S_seed
-#define seed S_seed
-#define S_mul128 CPerlObj::S_mul128
-#define mul128 S_mul128
-#define S_is_an_int CPerlObj::S_is_an_int
-#define is_an_int S_is_an_int
-#define S_div128 CPerlObj::S_div128
-#define div128 S_div128
-#endif
-#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-#define S_docatch CPerlObj::S_docatch
-#define docatch S_docatch
-#define S_docatch_body CPerlObj::S_docatch_body
-#define docatch_body S_docatch_body
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#define S_vdocatch_body CPerlObj::S_vdocatch_body
-#define vdocatch_body S_vdocatch_body
-#endif
-#define S_dofindlabel CPerlObj::S_dofindlabel
-#define dofindlabel S_dofindlabel
-#define S_doparseform CPerlObj::S_doparseform
-#define doparseform S_doparseform
-#define S_dopoptoeval CPerlObj::S_dopoptoeval
-#define dopoptoeval S_dopoptoeval
-#define S_dopoptolabel CPerlObj::S_dopoptolabel
-#define dopoptolabel S_dopoptolabel
-#define S_dopoptoloop CPerlObj::S_dopoptoloop
-#define dopoptoloop S_dopoptoloop
-#define S_dopoptosub CPerlObj::S_dopoptosub
-#define dopoptosub S_dopoptosub
-#define S_dopoptosub_at CPerlObj::S_dopoptosub_at
-#define dopoptosub_at S_dopoptosub_at
-#define S_save_lines CPerlObj::S_save_lines
-#define save_lines S_save_lines
-#define S_doeval CPerlObj::S_doeval
-#define doeval S_doeval
-#define S_doopen_pmc CPerlObj::S_doopen_pmc
-#define doopen_pmc S_doopen_pmc
-#define S_qsortsv CPerlObj::S_qsortsv
-#define qsortsv S_qsortsv
-#endif
-#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-#define S_do_maybe_phash CPerlObj::S_do_maybe_phash
-#define do_maybe_phash S_do_maybe_phash
-#define S_do_oddball CPerlObj::S_do_oddball
-#define do_oddball S_do_oddball
-#define S_get_db_sub CPerlObj::S_get_db_sub
-#define get_db_sub S_get_db_sub
-#define S_method_common CPerlObj::S_method_common
-#define method_common S_method_common
-#endif
-#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-#define S_doform CPerlObj::S_doform
-#define doform S_doform
-#define S_emulate_eaccess CPerlObj::S_emulate_eaccess
-#define emulate_eaccess S_emulate_eaccess
-# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-#define S_dooneliner CPerlObj::S_dooneliner
-#define dooneliner S_dooneliner
-# endif
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-#define S_reg CPerlObj::S_reg
-#define reg S_reg
-#define S_reganode CPerlObj::S_reganode
-#define reganode S_reganode
-#define S_regatom CPerlObj::S_regatom
-#define regatom S_regatom
-#define S_regbranch CPerlObj::S_regbranch
-#define regbranch S_regbranch
-#define S_reguni CPerlObj::S_reguni
-#define reguni S_reguni
-#define S_regclass CPerlObj::S_regclass
-#define regclass S_regclass
-#define S_regclassutf8 CPerlObj::S_regclassutf8
-#define regclassutf8 S_regclassutf8
-#define S_regcurly CPerlObj::S_regcurly
-#define regcurly S_regcurly
-#define S_reg_node CPerlObj::S_reg_node
-#define reg_node S_reg_node
-#define S_regpiece CPerlObj::S_regpiece
-#define regpiece S_regpiece
-#define S_reginsert CPerlObj::S_reginsert
-#define reginsert S_reginsert
-#define S_regoptail CPerlObj::S_regoptail
-#define regoptail S_regoptail
-#define S_regtail CPerlObj::S_regtail
-#define regtail S_regtail
-#define S_regwhite CPerlObj::S_regwhite
-#define regwhite S_regwhite
-#define S_nextchar CPerlObj::S_nextchar
-#define nextchar S_nextchar
-#define S_dumpuntil CPerlObj::S_dumpuntil
-#define dumpuntil S_dumpuntil
-#define S_put_byte CPerlObj::S_put_byte
-#define put_byte S_put_byte
-#define S_scan_commit CPerlObj::S_scan_commit
-#define scan_commit S_scan_commit
-#define S_cl_anything CPerlObj::S_cl_anything
-#define cl_anything S_cl_anything
-#define S_cl_is_anything CPerlObj::S_cl_is_anything
-#define cl_is_anything S_cl_is_anything
-#define S_cl_init CPerlObj::S_cl_init
-#define cl_init S_cl_init
-#define S_cl_init_zero CPerlObj::S_cl_init_zero
-#define cl_init_zero S_cl_init_zero
-#define S_cl_and CPerlObj::S_cl_and
-#define cl_and S_cl_and
-#define S_cl_or CPerlObj::S_cl_or
-#define cl_or S_cl_or
-#define S_study_chunk CPerlObj::S_study_chunk
-#define study_chunk S_study_chunk
-#define S_add_data CPerlObj::S_add_data
-#define add_data S_add_data
-#define S_re_croak2 CPerlObj::S_re_croak2
-#define re_croak2 S_re_croak2
-#define S_regpposixcc CPerlObj::S_regpposixcc
-#define regpposixcc S_regpposixcc
-#define S_checkposixcc CPerlObj::S_checkposixcc
-#define checkposixcc S_checkposixcc
-#endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-#define S_regmatch CPerlObj::S_regmatch
-#define regmatch S_regmatch
-#define S_regrepeat CPerlObj::S_regrepeat
-#define regrepeat S_regrepeat
-#define S_regrepeat_hard CPerlObj::S_regrepeat_hard
-#define regrepeat_hard S_regrepeat_hard
-#define S_regtry CPerlObj::S_regtry
-#define regtry S_regtry
-#define S_reginclass CPerlObj::S_reginclass
-#define reginclass S_reginclass
-#define S_reginclassutf8 CPerlObj::S_reginclassutf8
-#define reginclassutf8 S_reginclassutf8
-#define S_regcppush CPerlObj::S_regcppush
-#define regcppush S_regcppush
-#define S_regcppop CPerlObj::S_regcppop
-#define regcppop S_regcppop
-#define S_regcp_set_to CPerlObj::S_regcp_set_to
-#define regcp_set_to S_regcp_set_to
-#define S_cache_re CPerlObj::S_cache_re
-#define cache_re S_cache_re
-#define S_reghop CPerlObj::S_reghop
-#define reghop S_reghop
-#define S_reghopmaybe CPerlObj::S_reghopmaybe
-#define reghopmaybe S_reghopmaybe
-#define S_find_byclass CPerlObj::S_find_byclass
-#define find_byclass S_find_byclass
-#endif
-#if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
-#define S_debprof CPerlObj::S_debprof
-#define debprof S_debprof
-#endif
-#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-#define S_save_scalar_at CPerlObj::S_save_scalar_at
-#define save_scalar_at S_save_scalar_at
-#endif
-#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-#define S_asIV CPerlObj::S_asIV
-#define asIV S_asIV
-#define S_asUV CPerlObj::S_asUV
-#define asUV S_asUV
-#define S_more_sv CPerlObj::S_more_sv
-#define more_sv S_more_sv
-#define S_more_xiv CPerlObj::S_more_xiv
-#define more_xiv S_more_xiv
-#define S_more_xnv CPerlObj::S_more_xnv
-#define more_xnv S_more_xnv
-#define S_more_xpv CPerlObj::S_more_xpv
-#define more_xpv S_more_xpv
-#define S_more_xpviv CPerlObj::S_more_xpviv
-#define more_xpviv S_more_xpviv
-#define S_more_xpvnv CPerlObj::S_more_xpvnv
-#define more_xpvnv S_more_xpvnv
-#define S_more_xpvcv CPerlObj::S_more_xpvcv
-#define more_xpvcv S_more_xpvcv
-#define S_more_xpvav CPerlObj::S_more_xpvav
-#define more_xpvav S_more_xpvav
-#define S_more_xpvhv CPerlObj::S_more_xpvhv
-#define more_xpvhv S_more_xpvhv
-#define S_more_xpvmg CPerlObj::S_more_xpvmg
-#define more_xpvmg S_more_xpvmg
-#define S_more_xpvlv CPerlObj::S_more_xpvlv
-#define more_xpvlv S_more_xpvlv
-#define S_more_xpvbm CPerlObj::S_more_xpvbm
-#define more_xpvbm S_more_xpvbm
-#define S_more_xrv CPerlObj::S_more_xrv
-#define more_xrv S_more_xrv
-#define S_new_xiv CPerlObj::S_new_xiv
-#define new_xiv S_new_xiv
-#define S_new_xnv CPerlObj::S_new_xnv
-#define new_xnv S_new_xnv
-#define S_new_xpv CPerlObj::S_new_xpv
-#define new_xpv S_new_xpv
-#define S_new_xpviv CPerlObj::S_new_xpviv
-#define new_xpviv S_new_xpviv
-#define S_new_xpvnv CPerlObj::S_new_xpvnv
-#define new_xpvnv S_new_xpvnv
-#define S_new_xpvcv CPerlObj::S_new_xpvcv
-#define new_xpvcv S_new_xpvcv
-#define S_new_xpvav CPerlObj::S_new_xpvav
-#define new_xpvav S_new_xpvav
-#define S_new_xpvhv CPerlObj::S_new_xpvhv
-#define new_xpvhv S_new_xpvhv
-#define S_new_xpvmg CPerlObj::S_new_xpvmg
-#define new_xpvmg S_new_xpvmg
-#define S_new_xpvlv CPerlObj::S_new_xpvlv
-#define new_xpvlv S_new_xpvlv
-#define S_new_xpvbm CPerlObj::S_new_xpvbm
-#define new_xpvbm S_new_xpvbm
-#define S_new_xrv CPerlObj::S_new_xrv
-#define new_xrv S_new_xrv
-#define S_del_xiv CPerlObj::S_del_xiv
-#define del_xiv S_del_xiv
-#define S_del_xnv CPerlObj::S_del_xnv
-#define del_xnv S_del_xnv
-#define S_del_xpv CPerlObj::S_del_xpv
-#define del_xpv S_del_xpv
-#define S_del_xpviv CPerlObj::S_del_xpviv
-#define del_xpviv S_del_xpviv
-#define S_del_xpvnv CPerlObj::S_del_xpvnv
-#define del_xpvnv S_del_xpvnv
-#define S_del_xpvcv CPerlObj::S_del_xpvcv
-#define del_xpvcv S_del_xpvcv
-#define S_del_xpvav CPerlObj::S_del_xpvav
-#define del_xpvav S_del_xpvav
-#define S_del_xpvhv CPerlObj::S_del_xpvhv
-#define del_xpvhv S_del_xpvhv
-#define S_del_xpvmg CPerlObj::S_del_xpvmg
-#define del_xpvmg S_del_xpvmg
-#define S_del_xpvlv CPerlObj::S_del_xpvlv
-#define del_xpvlv S_del_xpvlv
-#define S_del_xpvbm CPerlObj::S_del_xpvbm
-#define del_xpvbm S_del_xpvbm
-#define S_del_xrv CPerlObj::S_del_xrv
-#define del_xrv S_del_xrv
-#define S_sv_unglob CPerlObj::S_sv_unglob
-#define sv_unglob S_sv_unglob
-#define S_not_a_number CPerlObj::S_not_a_number
-#define not_a_number S_not_a_number
-#define S_visit CPerlObj::S_visit
-#define visit S_visit
-# if defined(DEBUGGING)
-#define S_del_sv CPerlObj::S_del_sv
-#define del_sv S_del_sv
-# endif
-#endif
-#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
-#define S_check_uni CPerlObj::S_check_uni
-#define check_uni S_check_uni
-#define S_force_next CPerlObj::S_force_next
-#define force_next S_force_next
-#define S_force_version CPerlObj::S_force_version
-#define force_version S_force_version
-#define S_force_word CPerlObj::S_force_word
-#define force_word S_force_word
-#define S_tokeq CPerlObj::S_tokeq
-#define tokeq S_tokeq
-#define S_scan_const CPerlObj::S_scan_const
-#define scan_const S_scan_const
-#define S_scan_formline CPerlObj::S_scan_formline
-#define scan_formline S_scan_formline
-#define S_scan_heredoc CPerlObj::S_scan_heredoc
-#define scan_heredoc S_scan_heredoc
-#define S_scan_ident CPerlObj::S_scan_ident
-#define scan_ident S_scan_ident
-#define S_scan_inputsymbol CPerlObj::S_scan_inputsymbol
-#define scan_inputsymbol S_scan_inputsymbol
-#define S_scan_pat CPerlObj::S_scan_pat
-#define scan_pat S_scan_pat
-#define S_scan_str CPerlObj::S_scan_str
-#define scan_str S_scan_str
-#define S_scan_subst CPerlObj::S_scan_subst
-#define scan_subst S_scan_subst
-#define S_scan_trans CPerlObj::S_scan_trans
-#define scan_trans S_scan_trans
-#define S_scan_word CPerlObj::S_scan_word
-#define scan_word S_scan_word
-#define S_skipspace CPerlObj::S_skipspace
-#define skipspace S_skipspace
-#define S_swallow_bom CPerlObj::S_swallow_bom
-#define swallow_bom S_swallow_bom
-#define S_checkcomma CPerlObj::S_checkcomma
-#define checkcomma S_checkcomma
-#define S_force_ident CPerlObj::S_force_ident
-#define force_ident S_force_ident
-#define S_incline CPerlObj::S_incline
-#define incline S_incline
-#define S_intuit_method CPerlObj::S_intuit_method
-#define intuit_method S_intuit_method
-#define S_intuit_more CPerlObj::S_intuit_more
-#define intuit_more S_intuit_more
-#define S_lop CPerlObj::S_lop
-#define lop S_lop
-#define S_missingterm CPerlObj::S_missingterm
-#define missingterm S_missingterm
-#define S_no_op CPerlObj::S_no_op
-#define no_op S_no_op
-#define S_set_csh CPerlObj::S_set_csh
-#define set_csh S_set_csh
-#define S_sublex_done CPerlObj::S_sublex_done
-#define sublex_done S_sublex_done
-#define S_sublex_push CPerlObj::S_sublex_push
-#define sublex_push S_sublex_push
-#define S_sublex_start CPerlObj::S_sublex_start
-#define sublex_start S_sublex_start
-#define S_filter_gets CPerlObj::S_filter_gets
-#define filter_gets S_filter_gets
-#define S_find_in_my_stash CPerlObj::S_find_in_my_stash
-#define find_in_my_stash S_find_in_my_stash
-#define S_new_constant CPerlObj::S_new_constant
-#define new_constant S_new_constant
-#define S_ao CPerlObj::S_ao
-#define ao S_ao
-#define S_depcom CPerlObj::S_depcom
-#define depcom S_depcom
-#define S_incl_perldb CPerlObj::S_incl_perldb
-#define incl_perldb S_incl_perldb
-#if 0
-#define S_utf16_textfilter CPerlObj::S_utf16_textfilter
-#define utf16_textfilter S_utf16_textfilter
-#define S_utf16rev_textfilter CPerlObj::S_utf16rev_textfilter
-#define utf16rev_textfilter S_utf16rev_textfilter
-#endif
-# if defined(CRIPPLED_CC)
-#define S_uni CPerlObj::S_uni
-#define uni S_uni
-# endif
-# if defined(PERL_CR_FILTER)
-#define S_cr_textfilter CPerlObj::S_cr_textfilter
-#define cr_textfilter S_cr_textfilter
-# endif
-#endif
-#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-#define S_isa_lookup CPerlObj::S_isa_lookup
-#define isa_lookup S_isa_lookup
-#endif
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-#define S_stdize_locale CPerlObj::S_stdize_locale
-#define stdize_locale S_stdize_locale
-#define S_mess_alloc CPerlObj::S_mess_alloc
-#define mess_alloc S_mess_alloc
-# if defined(LEAKTEST)
-#define S_xstat CPerlObj::S_xstat
-#define xstat S_xstat
-# endif
-#endif
-#if defined(PERL_OBJECT)
-#endif
-#define Perl_ck_anoncode CPerlObj::Perl_ck_anoncode
-#define ck_anoncode Perl_ck_anoncode
-#define Perl_ck_bitop CPerlObj::Perl_ck_bitop
-#define ck_bitop Perl_ck_bitop
-#define Perl_ck_concat CPerlObj::Perl_ck_concat
-#define ck_concat Perl_ck_concat
-#define Perl_ck_defined CPerlObj::Perl_ck_defined
-#define ck_defined Perl_ck_defined
-#define Perl_ck_delete CPerlObj::Perl_ck_delete
-#define ck_delete Perl_ck_delete
-#define Perl_ck_eof CPerlObj::Perl_ck_eof
-#define ck_eof Perl_ck_eof
-#define Perl_ck_eval CPerlObj::Perl_ck_eval
-#define ck_eval Perl_ck_eval
-#define Perl_ck_exec CPerlObj::Perl_ck_exec
-#define ck_exec Perl_ck_exec
-#define Perl_ck_exists CPerlObj::Perl_ck_exists
-#define ck_exists Perl_ck_exists
-#define Perl_ck_exit CPerlObj::Perl_ck_exit
-#define ck_exit Perl_ck_exit
-#define Perl_ck_ftst CPerlObj::Perl_ck_ftst
-#define ck_ftst Perl_ck_ftst
-#define Perl_ck_fun CPerlObj::Perl_ck_fun
-#define ck_fun Perl_ck_fun
-#define Perl_ck_fun_locale CPerlObj::Perl_ck_fun_locale
-#define ck_fun_locale Perl_ck_fun_locale
-#define Perl_ck_glob CPerlObj::Perl_ck_glob
-#define ck_glob Perl_ck_glob
-#define Perl_ck_grep CPerlObj::Perl_ck_grep
-#define ck_grep Perl_ck_grep
-#define Perl_ck_index CPerlObj::Perl_ck_index
-#define ck_index Perl_ck_index
-#define Perl_ck_join CPerlObj::Perl_ck_join
-#define ck_join Perl_ck_join
-#define Perl_ck_lengthconst CPerlObj::Perl_ck_lengthconst
-#define ck_lengthconst Perl_ck_lengthconst
-#define Perl_ck_lfun CPerlObj::Perl_ck_lfun
-#define ck_lfun Perl_ck_lfun
-#define Perl_ck_listiob CPerlObj::Perl_ck_listiob
-#define ck_listiob Perl_ck_listiob
-#define Perl_ck_match CPerlObj::Perl_ck_match
-#define ck_match Perl_ck_match
-#define Perl_ck_method CPerlObj::Perl_ck_method
-#define ck_method Perl_ck_method
-#define Perl_ck_null CPerlObj::Perl_ck_null
-#define ck_null Perl_ck_null
-#define Perl_ck_open CPerlObj::Perl_ck_open
-#define ck_open Perl_ck_open
-#define Perl_ck_repeat CPerlObj::Perl_ck_repeat
-#define ck_repeat Perl_ck_repeat
-#define Perl_ck_require CPerlObj::Perl_ck_require
-#define ck_require Perl_ck_require
-#define Perl_ck_return CPerlObj::Perl_ck_return
-#define ck_return Perl_ck_return
-#define Perl_ck_rfun CPerlObj::Perl_ck_rfun
-#define ck_rfun Perl_ck_rfun
-#define Perl_ck_rvconst CPerlObj::Perl_ck_rvconst
-#define ck_rvconst Perl_ck_rvconst
-#define Perl_ck_sassign CPerlObj::Perl_ck_sassign
-#define ck_sassign Perl_ck_sassign
-#define Perl_ck_scmp CPerlObj::Perl_ck_scmp
-#define ck_scmp Perl_ck_scmp
-#define Perl_ck_select CPerlObj::Perl_ck_select
-#define ck_select Perl_ck_select
-#define Perl_ck_shift CPerlObj::Perl_ck_shift
-#define ck_shift Perl_ck_shift
-#define Perl_ck_sort CPerlObj::Perl_ck_sort
-#define ck_sort Perl_ck_sort
-#define Perl_ck_spair CPerlObj::Perl_ck_spair
-#define ck_spair Perl_ck_spair
-#define Perl_ck_split CPerlObj::Perl_ck_split
-#define ck_split Perl_ck_split
-#define Perl_ck_subr CPerlObj::Perl_ck_subr
-#define ck_subr Perl_ck_subr
-#define Perl_ck_substr CPerlObj::Perl_ck_substr
-#define ck_substr Perl_ck_substr
-#define Perl_ck_svconst CPerlObj::Perl_ck_svconst
-#define ck_svconst Perl_ck_svconst
-#define Perl_ck_trunc CPerlObj::Perl_ck_trunc
-#define ck_trunc Perl_ck_trunc
-#define Perl_pp_aassign CPerlObj::Perl_pp_aassign
-#define pp_aassign Perl_pp_aassign
-#define Perl_pp_abs CPerlObj::Perl_pp_abs
-#define pp_abs Perl_pp_abs
-#define Perl_pp_accept CPerlObj::Perl_pp_accept
-#define pp_accept Perl_pp_accept
-#define Perl_pp_add CPerlObj::Perl_pp_add
-#define pp_add Perl_pp_add
-#define Perl_pp_aelem CPerlObj::Perl_pp_aelem
-#define pp_aelem Perl_pp_aelem
-#define Perl_pp_aelemfast CPerlObj::Perl_pp_aelemfast
-#define pp_aelemfast Perl_pp_aelemfast
-#define Perl_pp_alarm CPerlObj::Perl_pp_alarm
-#define pp_alarm Perl_pp_alarm
-#define Perl_pp_and CPerlObj::Perl_pp_and
-#define pp_and Perl_pp_and
-#define Perl_pp_andassign CPerlObj::Perl_pp_andassign
-#define pp_andassign Perl_pp_andassign
-#define Perl_pp_anoncode CPerlObj::Perl_pp_anoncode
-#define pp_anoncode Perl_pp_anoncode
-#define Perl_pp_anonhash CPerlObj::Perl_pp_anonhash
-#define pp_anonhash Perl_pp_anonhash
-#define Perl_pp_anonlist CPerlObj::Perl_pp_anonlist
-#define pp_anonlist Perl_pp_anonlist
-#define Perl_pp_aslice CPerlObj::Perl_pp_aslice
-#define pp_aslice Perl_pp_aslice
-#define Perl_pp_atan2 CPerlObj::Perl_pp_atan2
-#define pp_atan2 Perl_pp_atan2
-#define Perl_pp_av2arylen CPerlObj::Perl_pp_av2arylen
-#define pp_av2arylen Perl_pp_av2arylen
-#define Perl_pp_backtick CPerlObj::Perl_pp_backtick
-#define pp_backtick Perl_pp_backtick
-#define Perl_pp_bind CPerlObj::Perl_pp_bind
-#define pp_bind Perl_pp_bind
-#define Perl_pp_binmode CPerlObj::Perl_pp_binmode
-#define pp_binmode Perl_pp_binmode
-#define Perl_pp_bit_and CPerlObj::Perl_pp_bit_and
-#define pp_bit_and Perl_pp_bit_and
-#define Perl_pp_bit_or CPerlObj::Perl_pp_bit_or
-#define pp_bit_or Perl_pp_bit_or
-#define Perl_pp_bit_xor CPerlObj::Perl_pp_bit_xor
-#define pp_bit_xor Perl_pp_bit_xor
-#define Perl_pp_bless CPerlObj::Perl_pp_bless
-#define pp_bless Perl_pp_bless
-#define Perl_pp_caller CPerlObj::Perl_pp_caller
-#define pp_caller Perl_pp_caller
-#define Perl_pp_chdir CPerlObj::Perl_pp_chdir
-#define pp_chdir Perl_pp_chdir
-#define Perl_pp_chmod CPerlObj::Perl_pp_chmod
-#define pp_chmod Perl_pp_chmod
-#define Perl_pp_chomp CPerlObj::Perl_pp_chomp
-#define pp_chomp Perl_pp_chomp
-#define Perl_pp_chop CPerlObj::Perl_pp_chop
-#define pp_chop Perl_pp_chop
-#define Perl_pp_chown CPerlObj::Perl_pp_chown
-#define pp_chown Perl_pp_chown
-#define Perl_pp_chr CPerlObj::Perl_pp_chr
-#define pp_chr Perl_pp_chr
-#define Perl_pp_chroot CPerlObj::Perl_pp_chroot
-#define pp_chroot Perl_pp_chroot
-#define Perl_pp_close CPerlObj::Perl_pp_close
-#define pp_close Perl_pp_close
-#define Perl_pp_closedir CPerlObj::Perl_pp_closedir
-#define pp_closedir Perl_pp_closedir
-#define Perl_pp_complement CPerlObj::Perl_pp_complement
-#define pp_complement Perl_pp_complement
-#define Perl_pp_concat CPerlObj::Perl_pp_concat
-#define pp_concat Perl_pp_concat
-#define Perl_pp_cond_expr CPerlObj::Perl_pp_cond_expr
-#define pp_cond_expr Perl_pp_cond_expr
-#define Perl_pp_connect CPerlObj::Perl_pp_connect
-#define pp_connect Perl_pp_connect
-#define Perl_pp_const CPerlObj::Perl_pp_const
-#define pp_const Perl_pp_const
-#define Perl_pp_cos CPerlObj::Perl_pp_cos
-#define pp_cos Perl_pp_cos
-#define Perl_pp_crypt CPerlObj::Perl_pp_crypt
-#define pp_crypt Perl_pp_crypt
-#define Perl_pp_dbmclose CPerlObj::Perl_pp_dbmclose
-#define pp_dbmclose Perl_pp_dbmclose
-#define Perl_pp_dbmopen CPerlObj::Perl_pp_dbmopen
-#define pp_dbmopen Perl_pp_dbmopen
-#define Perl_pp_dbstate CPerlObj::Perl_pp_dbstate
-#define pp_dbstate Perl_pp_dbstate
-#define Perl_pp_defined CPerlObj::Perl_pp_defined
-#define pp_defined Perl_pp_defined
-#define Perl_pp_delete CPerlObj::Perl_pp_delete
-#define pp_delete Perl_pp_delete
-#define Perl_pp_die CPerlObj::Perl_pp_die
-#define pp_die Perl_pp_die
-#define Perl_pp_divide CPerlObj::Perl_pp_divide
-#define pp_divide Perl_pp_divide
-#define Perl_pp_dofile CPerlObj::Perl_pp_dofile
-#define pp_dofile Perl_pp_dofile
-#define Perl_pp_dump CPerlObj::Perl_pp_dump
-#define pp_dump Perl_pp_dump
-#define Perl_pp_each CPerlObj::Perl_pp_each
-#define pp_each Perl_pp_each
-#define Perl_pp_egrent CPerlObj::Perl_pp_egrent
-#define pp_egrent Perl_pp_egrent
-#define Perl_pp_ehostent CPerlObj::Perl_pp_ehostent
-#define pp_ehostent Perl_pp_ehostent
-#define Perl_pp_enetent CPerlObj::Perl_pp_enetent
-#define pp_enetent Perl_pp_enetent
-#define Perl_pp_enter CPerlObj::Perl_pp_enter
-#define pp_enter Perl_pp_enter
-#define Perl_pp_entereval CPerlObj::Perl_pp_entereval
-#define pp_entereval Perl_pp_entereval
-#define Perl_pp_enteriter CPerlObj::Perl_pp_enteriter
-#define pp_enteriter Perl_pp_enteriter
-#define Perl_pp_enterloop CPerlObj::Perl_pp_enterloop
-#define pp_enterloop Perl_pp_enterloop
-#define Perl_pp_entersub CPerlObj::Perl_pp_entersub
-#define pp_entersub Perl_pp_entersub
-#define Perl_pp_entertry CPerlObj::Perl_pp_entertry
-#define pp_entertry Perl_pp_entertry
-#define Perl_pp_enterwrite CPerlObj::Perl_pp_enterwrite
-#define pp_enterwrite Perl_pp_enterwrite
-#define Perl_pp_eof CPerlObj::Perl_pp_eof
-#define pp_eof Perl_pp_eof
-#define Perl_pp_eprotoent CPerlObj::Perl_pp_eprotoent
-#define pp_eprotoent Perl_pp_eprotoent
-#define Perl_pp_epwent CPerlObj::Perl_pp_epwent
-#define pp_epwent Perl_pp_epwent
-#define Perl_pp_eq CPerlObj::Perl_pp_eq
-#define pp_eq Perl_pp_eq
-#define Perl_pp_eservent CPerlObj::Perl_pp_eservent
-#define pp_eservent Perl_pp_eservent
-#define Perl_pp_exec CPerlObj::Perl_pp_exec
-#define pp_exec Perl_pp_exec
-#define Perl_pp_exists CPerlObj::Perl_pp_exists
-#define pp_exists Perl_pp_exists
-#define Perl_pp_exit CPerlObj::Perl_pp_exit
-#define pp_exit Perl_pp_exit
-#define Perl_pp_exp CPerlObj::Perl_pp_exp
-#define pp_exp Perl_pp_exp
-#define Perl_pp_fcntl CPerlObj::Perl_pp_fcntl
-#define pp_fcntl Perl_pp_fcntl
-#define Perl_pp_fileno CPerlObj::Perl_pp_fileno
-#define pp_fileno Perl_pp_fileno
-#define Perl_pp_flip CPerlObj::Perl_pp_flip
-#define pp_flip Perl_pp_flip
-#define Perl_pp_flock CPerlObj::Perl_pp_flock
-#define pp_flock Perl_pp_flock
-#define Perl_pp_flop CPerlObj::Perl_pp_flop
-#define pp_flop Perl_pp_flop
-#define Perl_pp_fork CPerlObj::Perl_pp_fork
-#define pp_fork Perl_pp_fork
-#define Perl_pp_formline CPerlObj::Perl_pp_formline
-#define pp_formline Perl_pp_formline
-#define Perl_pp_ftatime CPerlObj::Perl_pp_ftatime
-#define pp_ftatime Perl_pp_ftatime
-#define Perl_pp_ftbinary CPerlObj::Perl_pp_ftbinary
-#define pp_ftbinary Perl_pp_ftbinary
-#define Perl_pp_ftblk CPerlObj::Perl_pp_ftblk
-#define pp_ftblk Perl_pp_ftblk
-#define Perl_pp_ftchr CPerlObj::Perl_pp_ftchr
-#define pp_ftchr Perl_pp_ftchr
-#define Perl_pp_ftctime CPerlObj::Perl_pp_ftctime
-#define pp_ftctime Perl_pp_ftctime
-#define Perl_pp_ftdir CPerlObj::Perl_pp_ftdir
-#define pp_ftdir Perl_pp_ftdir
-#define Perl_pp_fteexec CPerlObj::Perl_pp_fteexec
-#define pp_fteexec Perl_pp_fteexec
-#define Perl_pp_fteowned CPerlObj::Perl_pp_fteowned
-#define pp_fteowned Perl_pp_fteowned
-#define Perl_pp_fteread CPerlObj::Perl_pp_fteread
-#define pp_fteread Perl_pp_fteread
-#define Perl_pp_ftewrite CPerlObj::Perl_pp_ftewrite
-#define pp_ftewrite Perl_pp_ftewrite
-#define Perl_pp_ftfile CPerlObj::Perl_pp_ftfile
-#define pp_ftfile Perl_pp_ftfile
-#define Perl_pp_ftis CPerlObj::Perl_pp_ftis
-#define pp_ftis Perl_pp_ftis
-#define Perl_pp_ftlink CPerlObj::Perl_pp_ftlink
-#define pp_ftlink Perl_pp_ftlink
-#define Perl_pp_ftmtime CPerlObj::Perl_pp_ftmtime
-#define pp_ftmtime Perl_pp_ftmtime
-#define Perl_pp_ftpipe CPerlObj::Perl_pp_ftpipe
-#define pp_ftpipe Perl_pp_ftpipe
-#define Perl_pp_ftrexec CPerlObj::Perl_pp_ftrexec
-#define pp_ftrexec Perl_pp_ftrexec
-#define Perl_pp_ftrowned CPerlObj::Perl_pp_ftrowned
-#define pp_ftrowned Perl_pp_ftrowned
-#define Perl_pp_ftrread CPerlObj::Perl_pp_ftrread
-#define pp_ftrread Perl_pp_ftrread
-#define Perl_pp_ftrwrite CPerlObj::Perl_pp_ftrwrite
-#define pp_ftrwrite Perl_pp_ftrwrite
-#define Perl_pp_ftsgid CPerlObj::Perl_pp_ftsgid
-#define pp_ftsgid Perl_pp_ftsgid
-#define Perl_pp_ftsize CPerlObj::Perl_pp_ftsize
-#define pp_ftsize Perl_pp_ftsize
-#define Perl_pp_ftsock CPerlObj::Perl_pp_ftsock
-#define pp_ftsock Perl_pp_ftsock
-#define Perl_pp_ftsuid CPerlObj::Perl_pp_ftsuid
-#define pp_ftsuid Perl_pp_ftsuid
-#define Perl_pp_ftsvtx CPerlObj::Perl_pp_ftsvtx
-#define pp_ftsvtx Perl_pp_ftsvtx
-#define Perl_pp_fttext CPerlObj::Perl_pp_fttext
-#define pp_fttext Perl_pp_fttext
-#define Perl_pp_fttty CPerlObj::Perl_pp_fttty
-#define pp_fttty Perl_pp_fttty
-#define Perl_pp_ftzero CPerlObj::Perl_pp_ftzero
-#define pp_ftzero Perl_pp_ftzero
-#define Perl_pp_ge CPerlObj::Perl_pp_ge
-#define pp_ge Perl_pp_ge
-#define Perl_pp_gelem CPerlObj::Perl_pp_gelem
-#define pp_gelem Perl_pp_gelem
-#define Perl_pp_getc CPerlObj::Perl_pp_getc
-#define pp_getc Perl_pp_getc
-#define Perl_pp_getlogin CPerlObj::Perl_pp_getlogin
-#define pp_getlogin Perl_pp_getlogin
-#define Perl_pp_getpeername CPerlObj::Perl_pp_getpeername
-#define pp_getpeername Perl_pp_getpeername
-#define Perl_pp_getpgrp CPerlObj::Perl_pp_getpgrp
-#define pp_getpgrp Perl_pp_getpgrp
-#define Perl_pp_getppid CPerlObj::Perl_pp_getppid
-#define pp_getppid Perl_pp_getppid
-#define Perl_pp_getpriority CPerlObj::Perl_pp_getpriority
-#define pp_getpriority Perl_pp_getpriority
-#define Perl_pp_getsockname CPerlObj::Perl_pp_getsockname
-#define pp_getsockname Perl_pp_getsockname
-#define Perl_pp_ggrent CPerlObj::Perl_pp_ggrent
-#define pp_ggrent Perl_pp_ggrent
-#define Perl_pp_ggrgid CPerlObj::Perl_pp_ggrgid
-#define pp_ggrgid Perl_pp_ggrgid
-#define Perl_pp_ggrnam CPerlObj::Perl_pp_ggrnam
-#define pp_ggrnam Perl_pp_ggrnam
-#define Perl_pp_ghbyaddr CPerlObj::Perl_pp_ghbyaddr
-#define pp_ghbyaddr Perl_pp_ghbyaddr
-#define Perl_pp_ghbyname CPerlObj::Perl_pp_ghbyname
-#define pp_ghbyname Perl_pp_ghbyname
-#define Perl_pp_ghostent CPerlObj::Perl_pp_ghostent
-#define pp_ghostent Perl_pp_ghostent
-#define Perl_pp_glob CPerlObj::Perl_pp_glob
-#define pp_glob Perl_pp_glob
-#define Perl_pp_gmtime CPerlObj::Perl_pp_gmtime
-#define pp_gmtime Perl_pp_gmtime
-#define Perl_pp_gnbyaddr CPerlObj::Perl_pp_gnbyaddr
-#define pp_gnbyaddr Perl_pp_gnbyaddr
-#define Perl_pp_gnbyname CPerlObj::Perl_pp_gnbyname
-#define pp_gnbyname Perl_pp_gnbyname
-#define Perl_pp_gnetent CPerlObj::Perl_pp_gnetent
-#define pp_gnetent Perl_pp_gnetent
-#define Perl_pp_goto CPerlObj::Perl_pp_goto
-#define pp_goto Perl_pp_goto
-#define Perl_pp_gpbyname CPerlObj::Perl_pp_gpbyname
-#define pp_gpbyname Perl_pp_gpbyname
-#define Perl_pp_gpbynumber CPerlObj::Perl_pp_gpbynumber
-#define pp_gpbynumber Perl_pp_gpbynumber
-#define Perl_pp_gprotoent CPerlObj::Perl_pp_gprotoent
-#define pp_gprotoent Perl_pp_gprotoent
-#define Perl_pp_gpwent CPerlObj::Perl_pp_gpwent
-#define pp_gpwent Perl_pp_gpwent
-#define Perl_pp_gpwnam CPerlObj::Perl_pp_gpwnam
-#define pp_gpwnam Perl_pp_gpwnam
-#define Perl_pp_gpwuid CPerlObj::Perl_pp_gpwuid
-#define pp_gpwuid Perl_pp_gpwuid
-#define Perl_pp_grepstart CPerlObj::Perl_pp_grepstart
-#define pp_grepstart Perl_pp_grepstart
-#define Perl_pp_grepwhile CPerlObj::Perl_pp_grepwhile
-#define pp_grepwhile Perl_pp_grepwhile
-#define Perl_pp_gsbyname CPerlObj::Perl_pp_gsbyname
-#define pp_gsbyname Perl_pp_gsbyname
-#define Perl_pp_gsbyport CPerlObj::Perl_pp_gsbyport
-#define pp_gsbyport Perl_pp_gsbyport
-#define Perl_pp_gservent CPerlObj::Perl_pp_gservent
-#define pp_gservent Perl_pp_gservent
-#define Perl_pp_gsockopt CPerlObj::Perl_pp_gsockopt
-#define pp_gsockopt Perl_pp_gsockopt
-#define Perl_pp_gt CPerlObj::Perl_pp_gt
-#define pp_gt Perl_pp_gt
-#define Perl_pp_gv CPerlObj::Perl_pp_gv
-#define pp_gv Perl_pp_gv
-#define Perl_pp_gvsv CPerlObj::Perl_pp_gvsv
-#define pp_gvsv Perl_pp_gvsv
-#define Perl_pp_helem CPerlObj::Perl_pp_helem
-#define pp_helem Perl_pp_helem
-#define Perl_pp_hex CPerlObj::Perl_pp_hex
-#define pp_hex Perl_pp_hex
-#define Perl_pp_hslice CPerlObj::Perl_pp_hslice
-#define pp_hslice Perl_pp_hslice
-#define Perl_pp_i_add CPerlObj::Perl_pp_i_add
-#define pp_i_add Perl_pp_i_add
-#define Perl_pp_i_divide CPerlObj::Perl_pp_i_divide
-#define pp_i_divide Perl_pp_i_divide
-#define Perl_pp_i_eq CPerlObj::Perl_pp_i_eq
-#define pp_i_eq Perl_pp_i_eq
-#define Perl_pp_i_ge CPerlObj::Perl_pp_i_ge
-#define pp_i_ge Perl_pp_i_ge
-#define Perl_pp_i_gt CPerlObj::Perl_pp_i_gt
-#define pp_i_gt Perl_pp_i_gt
-#define Perl_pp_i_le CPerlObj::Perl_pp_i_le
-#define pp_i_le Perl_pp_i_le
-#define Perl_pp_i_lt CPerlObj::Perl_pp_i_lt
-#define pp_i_lt Perl_pp_i_lt
-#define Perl_pp_i_modulo CPerlObj::Perl_pp_i_modulo
-#define pp_i_modulo Perl_pp_i_modulo
-#define Perl_pp_i_multiply CPerlObj::Perl_pp_i_multiply
-#define pp_i_multiply Perl_pp_i_multiply
-#define Perl_pp_i_ncmp CPerlObj::Perl_pp_i_ncmp
-#define pp_i_ncmp Perl_pp_i_ncmp
-#define Perl_pp_i_ne CPerlObj::Perl_pp_i_ne
-#define pp_i_ne Perl_pp_i_ne
-#define Perl_pp_i_negate CPerlObj::Perl_pp_i_negate
-#define pp_i_negate Perl_pp_i_negate
-#define Perl_pp_i_subtract CPerlObj::Perl_pp_i_subtract
-#define pp_i_subtract Perl_pp_i_subtract
-#define Perl_pp_index CPerlObj::Perl_pp_index
-#define pp_index Perl_pp_index
-#define Perl_pp_int CPerlObj::Perl_pp_int
-#define pp_int Perl_pp_int
-#define Perl_pp_ioctl CPerlObj::Perl_pp_ioctl
-#define pp_ioctl Perl_pp_ioctl
-#define Perl_pp_iter CPerlObj::Perl_pp_iter
-#define pp_iter Perl_pp_iter
-#define Perl_pp_join CPerlObj::Perl_pp_join
-#define pp_join Perl_pp_join
-#define Perl_pp_keys CPerlObj::Perl_pp_keys
-#define pp_keys Perl_pp_keys
-#define Perl_pp_kill CPerlObj::Perl_pp_kill
-#define pp_kill Perl_pp_kill
-#define Perl_pp_last CPerlObj::Perl_pp_last
-#define pp_last Perl_pp_last
-#define Perl_pp_lc CPerlObj::Perl_pp_lc
-#define pp_lc Perl_pp_lc
-#define Perl_pp_lcfirst CPerlObj::Perl_pp_lcfirst
-#define pp_lcfirst Perl_pp_lcfirst
-#define Perl_pp_le CPerlObj::Perl_pp_le
-#define pp_le Perl_pp_le
-#define Perl_pp_leave CPerlObj::Perl_pp_leave
-#define pp_leave Perl_pp_leave
-#define Perl_pp_leaveeval CPerlObj::Perl_pp_leaveeval
-#define pp_leaveeval Perl_pp_leaveeval
-#define Perl_pp_leaveloop CPerlObj::Perl_pp_leaveloop
-#define pp_leaveloop Perl_pp_leaveloop
-#define Perl_pp_leavesub CPerlObj::Perl_pp_leavesub
-#define pp_leavesub Perl_pp_leavesub
-#define Perl_pp_leavesublv CPerlObj::Perl_pp_leavesublv
-#define pp_leavesublv Perl_pp_leavesublv
-#define Perl_pp_leavetry CPerlObj::Perl_pp_leavetry
-#define pp_leavetry Perl_pp_leavetry
-#define Perl_pp_leavewrite CPerlObj::Perl_pp_leavewrite
-#define pp_leavewrite Perl_pp_leavewrite
-#define Perl_pp_left_shift CPerlObj::Perl_pp_left_shift
-#define pp_left_shift Perl_pp_left_shift
-#define Perl_pp_length CPerlObj::Perl_pp_length
-#define pp_length Perl_pp_length
-#define Perl_pp_lineseq CPerlObj::Perl_pp_lineseq
-#define pp_lineseq Perl_pp_lineseq
-#define Perl_pp_link CPerlObj::Perl_pp_link
-#define pp_link Perl_pp_link
-#define Perl_pp_list CPerlObj::Perl_pp_list
-#define pp_list Perl_pp_list
-#define Perl_pp_listen CPerlObj::Perl_pp_listen
-#define pp_listen Perl_pp_listen
-#define Perl_pp_localtime CPerlObj::Perl_pp_localtime
-#define pp_localtime Perl_pp_localtime
-#define Perl_pp_lock CPerlObj::Perl_pp_lock
-#define pp_lock Perl_pp_lock
-#define Perl_pp_log CPerlObj::Perl_pp_log
-#define pp_log Perl_pp_log
-#define Perl_pp_lslice CPerlObj::Perl_pp_lslice
-#define pp_lslice Perl_pp_lslice
-#define Perl_pp_lstat CPerlObj::Perl_pp_lstat
-#define pp_lstat Perl_pp_lstat
-#define Perl_pp_lt CPerlObj::Perl_pp_lt
-#define pp_lt Perl_pp_lt
-#define Perl_pp_mapstart CPerlObj::Perl_pp_mapstart
-#define pp_mapstart Perl_pp_mapstart
-#define Perl_pp_mapwhile CPerlObj::Perl_pp_mapwhile
-#define pp_mapwhile Perl_pp_mapwhile
-#define Perl_pp_match CPerlObj::Perl_pp_match
-#define pp_match Perl_pp_match
-#define Perl_pp_method CPerlObj::Perl_pp_method
-#define pp_method Perl_pp_method
-#define Perl_pp_method_named CPerlObj::Perl_pp_method_named
-#define pp_method_named Perl_pp_method_named
-#define Perl_pp_mkdir CPerlObj::Perl_pp_mkdir
-#define pp_mkdir Perl_pp_mkdir
-#define Perl_pp_modulo CPerlObj::Perl_pp_modulo
-#define pp_modulo Perl_pp_modulo
-#define Perl_pp_msgctl CPerlObj::Perl_pp_msgctl
-#define pp_msgctl Perl_pp_msgctl
-#define Perl_pp_msgget CPerlObj::Perl_pp_msgget
-#define pp_msgget Perl_pp_msgget
-#define Perl_pp_msgrcv CPerlObj::Perl_pp_msgrcv
-#define pp_msgrcv Perl_pp_msgrcv
-#define Perl_pp_msgsnd CPerlObj::Perl_pp_msgsnd
-#define pp_msgsnd Perl_pp_msgsnd
-#define Perl_pp_multiply CPerlObj::Perl_pp_multiply
-#define pp_multiply Perl_pp_multiply
-#define Perl_pp_ncmp CPerlObj::Perl_pp_ncmp
-#define pp_ncmp Perl_pp_ncmp
-#define Perl_pp_ne CPerlObj::Perl_pp_ne
-#define pp_ne Perl_pp_ne
-#define Perl_pp_negate CPerlObj::Perl_pp_negate
-#define pp_negate Perl_pp_negate
-#define Perl_pp_next CPerlObj::Perl_pp_next
-#define pp_next Perl_pp_next
-#define Perl_pp_nextstate CPerlObj::Perl_pp_nextstate
-#define pp_nextstate Perl_pp_nextstate
-#define Perl_pp_not CPerlObj::Perl_pp_not
-#define pp_not Perl_pp_not
-#define Perl_pp_null CPerlObj::Perl_pp_null
-#define pp_null Perl_pp_null
-#define Perl_pp_oct CPerlObj::Perl_pp_oct
-#define pp_oct Perl_pp_oct
-#define Perl_pp_open CPerlObj::Perl_pp_open
-#define pp_open Perl_pp_open
-#define Perl_pp_open_dir CPerlObj::Perl_pp_open_dir
-#define pp_open_dir Perl_pp_open_dir
-#define Perl_pp_or CPerlObj::Perl_pp_or
-#define pp_or Perl_pp_or
-#define Perl_pp_orassign CPerlObj::Perl_pp_orassign
-#define pp_orassign Perl_pp_orassign
-#define Perl_pp_ord CPerlObj::Perl_pp_ord
-#define pp_ord Perl_pp_ord
-#define Perl_pp_pack CPerlObj::Perl_pp_pack
-#define pp_pack Perl_pp_pack
-#define Perl_pp_padany CPerlObj::Perl_pp_padany
-#define pp_padany Perl_pp_padany
-#define Perl_pp_padav CPerlObj::Perl_pp_padav
-#define pp_padav Perl_pp_padav
-#define Perl_pp_padhv CPerlObj::Perl_pp_padhv
-#define pp_padhv Perl_pp_padhv
-#define Perl_pp_padsv CPerlObj::Perl_pp_padsv
-#define pp_padsv Perl_pp_padsv
-#define Perl_pp_pipe_op CPerlObj::Perl_pp_pipe_op
-#define pp_pipe_op Perl_pp_pipe_op
-#define Perl_pp_pop CPerlObj::Perl_pp_pop
-#define pp_pop Perl_pp_pop
-#define Perl_pp_pos CPerlObj::Perl_pp_pos
-#define pp_pos Perl_pp_pos
-#define Perl_pp_postdec CPerlObj::Perl_pp_postdec
-#define pp_postdec Perl_pp_postdec
-#define Perl_pp_postinc CPerlObj::Perl_pp_postinc
-#define pp_postinc Perl_pp_postinc
-#define Perl_pp_pow CPerlObj::Perl_pp_pow
-#define pp_pow Perl_pp_pow
-#define Perl_pp_predec CPerlObj::Perl_pp_predec
-#define pp_predec Perl_pp_predec
-#define Perl_pp_preinc CPerlObj::Perl_pp_preinc
-#define pp_preinc Perl_pp_preinc
-#define Perl_pp_print CPerlObj::Perl_pp_print
-#define pp_print Perl_pp_print
-#define Perl_pp_prototype CPerlObj::Perl_pp_prototype
-#define pp_prototype Perl_pp_prototype
-#define Perl_pp_prtf CPerlObj::Perl_pp_prtf
-#define pp_prtf Perl_pp_prtf
-#define Perl_pp_push CPerlObj::Perl_pp_push
-#define pp_push Perl_pp_push
-#define Perl_pp_pushmark CPerlObj::Perl_pp_pushmark
-#define pp_pushmark Perl_pp_pushmark
-#define Perl_pp_pushre CPerlObj::Perl_pp_pushre
-#define pp_pushre Perl_pp_pushre
-#define Perl_pp_qr CPerlObj::Perl_pp_qr
-#define pp_qr Perl_pp_qr
-#define Perl_pp_quotemeta CPerlObj::Perl_pp_quotemeta
-#define pp_quotemeta Perl_pp_quotemeta
-#define Perl_pp_rand CPerlObj::Perl_pp_rand
-#define pp_rand Perl_pp_rand
-#define Perl_pp_range CPerlObj::Perl_pp_range
-#define pp_range Perl_pp_range
-#define Perl_pp_rcatline CPerlObj::Perl_pp_rcatline
-#define pp_rcatline Perl_pp_rcatline
-#define Perl_pp_read CPerlObj::Perl_pp_read
-#define pp_read Perl_pp_read
-#define Perl_pp_readdir CPerlObj::Perl_pp_readdir
-#define pp_readdir Perl_pp_readdir
-#define Perl_pp_readline CPerlObj::Perl_pp_readline
-#define pp_readline Perl_pp_readline
-#define Perl_pp_readlink CPerlObj::Perl_pp_readlink
-#define pp_readlink Perl_pp_readlink
-#define Perl_pp_recv CPerlObj::Perl_pp_recv
-#define pp_recv Perl_pp_recv
-#define Perl_pp_redo CPerlObj::Perl_pp_redo
-#define pp_redo Perl_pp_redo
-#define Perl_pp_ref CPerlObj::Perl_pp_ref
-#define pp_ref Perl_pp_ref
-#define Perl_pp_refgen CPerlObj::Perl_pp_refgen
-#define pp_refgen Perl_pp_refgen
-#define Perl_pp_regcmaybe CPerlObj::Perl_pp_regcmaybe
-#define pp_regcmaybe Perl_pp_regcmaybe
-#define Perl_pp_regcomp CPerlObj::Perl_pp_regcomp
-#define pp_regcomp Perl_pp_regcomp
-#define Perl_pp_regcreset CPerlObj::Perl_pp_regcreset
-#define pp_regcreset Perl_pp_regcreset
-#define Perl_pp_rename CPerlObj::Perl_pp_rename
-#define pp_rename Perl_pp_rename
-#define Perl_pp_repeat CPerlObj::Perl_pp_repeat
-#define pp_repeat Perl_pp_repeat
-#define Perl_pp_require CPerlObj::Perl_pp_require
-#define pp_require Perl_pp_require
-#define Perl_pp_reset CPerlObj::Perl_pp_reset
-#define pp_reset Perl_pp_reset
-#define Perl_pp_return CPerlObj::Perl_pp_return
-#define pp_return Perl_pp_return
-#define Perl_pp_reverse CPerlObj::Perl_pp_reverse
-#define pp_reverse Perl_pp_reverse
-#define Perl_pp_rewinddir CPerlObj::Perl_pp_rewinddir
-#define pp_rewinddir Perl_pp_rewinddir
-#define Perl_pp_right_shift CPerlObj::Perl_pp_right_shift
-#define pp_right_shift Perl_pp_right_shift
-#define Perl_pp_rindex CPerlObj::Perl_pp_rindex
-#define pp_rindex Perl_pp_rindex
-#define Perl_pp_rmdir CPerlObj::Perl_pp_rmdir
-#define pp_rmdir Perl_pp_rmdir
-#define Perl_pp_rv2av CPerlObj::Perl_pp_rv2av
-#define pp_rv2av Perl_pp_rv2av
-#define Perl_pp_rv2cv CPerlObj::Perl_pp_rv2cv
-#define pp_rv2cv Perl_pp_rv2cv
-#define Perl_pp_rv2gv CPerlObj::Perl_pp_rv2gv
-#define pp_rv2gv Perl_pp_rv2gv
-#define Perl_pp_rv2hv CPerlObj::Perl_pp_rv2hv
-#define pp_rv2hv Perl_pp_rv2hv
-#define Perl_pp_rv2sv CPerlObj::Perl_pp_rv2sv
-#define pp_rv2sv Perl_pp_rv2sv
-#define Perl_pp_sassign CPerlObj::Perl_pp_sassign
-#define pp_sassign Perl_pp_sassign
-#define Perl_pp_scalar CPerlObj::Perl_pp_scalar
-#define pp_scalar Perl_pp_scalar
-#define Perl_pp_schomp CPerlObj::Perl_pp_schomp
-#define pp_schomp Perl_pp_schomp
-#define Perl_pp_schop CPerlObj::Perl_pp_schop
-#define pp_schop Perl_pp_schop
-#define Perl_pp_scmp CPerlObj::Perl_pp_scmp
-#define pp_scmp Perl_pp_scmp
-#define Perl_pp_scope CPerlObj::Perl_pp_scope
-#define pp_scope Perl_pp_scope
-#define Perl_pp_seek CPerlObj::Perl_pp_seek
-#define pp_seek Perl_pp_seek
-#define Perl_pp_seekdir CPerlObj::Perl_pp_seekdir
-#define pp_seekdir Perl_pp_seekdir
-#define Perl_pp_select CPerlObj::Perl_pp_select
-#define pp_select Perl_pp_select
-#define Perl_pp_semctl CPerlObj::Perl_pp_semctl
-#define pp_semctl Perl_pp_semctl
-#define Perl_pp_semget CPerlObj::Perl_pp_semget
-#define pp_semget Perl_pp_semget
-#define Perl_pp_semop CPerlObj::Perl_pp_semop
-#define pp_semop Perl_pp_semop
-#define Perl_pp_send CPerlObj::Perl_pp_send
-#define pp_send Perl_pp_send
-#define Perl_pp_seq CPerlObj::Perl_pp_seq
-#define pp_seq Perl_pp_seq
-#define Perl_pp_setpgrp CPerlObj::Perl_pp_setpgrp
-#define pp_setpgrp Perl_pp_setpgrp
-#define Perl_pp_setpriority CPerlObj::Perl_pp_setpriority
-#define pp_setpriority Perl_pp_setpriority
-#define Perl_pp_setstate CPerlObj::Perl_pp_setstate
-#define pp_setstate Perl_pp_setstate
-#define Perl_pp_sge CPerlObj::Perl_pp_sge
-#define pp_sge Perl_pp_sge
-#define Perl_pp_sgrent CPerlObj::Perl_pp_sgrent
-#define pp_sgrent Perl_pp_sgrent
-#define Perl_pp_sgt CPerlObj::Perl_pp_sgt
-#define pp_sgt Perl_pp_sgt
-#define Perl_pp_shift CPerlObj::Perl_pp_shift
-#define pp_shift Perl_pp_shift
-#define Perl_pp_shmctl CPerlObj::Perl_pp_shmctl
-#define pp_shmctl Perl_pp_shmctl
-#define Perl_pp_shmget CPerlObj::Perl_pp_shmget
-#define pp_shmget Perl_pp_shmget
-#define Perl_pp_shmread CPerlObj::Perl_pp_shmread
-#define pp_shmread Perl_pp_shmread
-#define Perl_pp_shmwrite CPerlObj::Perl_pp_shmwrite
-#define pp_shmwrite Perl_pp_shmwrite
-#define Perl_pp_shostent CPerlObj::Perl_pp_shostent
-#define pp_shostent Perl_pp_shostent
-#define Perl_pp_shutdown CPerlObj::Perl_pp_shutdown
-#define pp_shutdown Perl_pp_shutdown
-#define Perl_pp_sin CPerlObj::Perl_pp_sin
-#define pp_sin Perl_pp_sin
-#define Perl_pp_sle CPerlObj::Perl_pp_sle
-#define pp_sle Perl_pp_sle
-#define Perl_pp_sleep CPerlObj::Perl_pp_sleep
-#define pp_sleep Perl_pp_sleep
-#define Perl_pp_slt CPerlObj::Perl_pp_slt
-#define pp_slt Perl_pp_slt
-#define Perl_pp_sne CPerlObj::Perl_pp_sne
-#define pp_sne Perl_pp_sne
-#define Perl_pp_snetent CPerlObj::Perl_pp_snetent
-#define pp_snetent Perl_pp_snetent
-#define Perl_pp_socket CPerlObj::Perl_pp_socket
-#define pp_socket Perl_pp_socket
-#define Perl_pp_sockpair CPerlObj::Perl_pp_sockpair
-#define pp_sockpair Perl_pp_sockpair
-#define Perl_pp_sort CPerlObj::Perl_pp_sort
-#define pp_sort Perl_pp_sort
-#define Perl_pp_splice CPerlObj::Perl_pp_splice
-#define pp_splice Perl_pp_splice
-#define Perl_pp_split CPerlObj::Perl_pp_split
-#define pp_split Perl_pp_split
-#define Perl_pp_sprintf CPerlObj::Perl_pp_sprintf
-#define pp_sprintf Perl_pp_sprintf
-#define Perl_pp_sprotoent CPerlObj::Perl_pp_sprotoent
-#define pp_sprotoent Perl_pp_sprotoent
-#define Perl_pp_spwent CPerlObj::Perl_pp_spwent
-#define pp_spwent Perl_pp_spwent
-#define Perl_pp_sqrt CPerlObj::Perl_pp_sqrt
-#define pp_sqrt Perl_pp_sqrt
-#define Perl_pp_srand CPerlObj::Perl_pp_srand
-#define pp_srand Perl_pp_srand
-#define Perl_pp_srefgen CPerlObj::Perl_pp_srefgen
-#define pp_srefgen Perl_pp_srefgen
-#define Perl_pp_sselect CPerlObj::Perl_pp_sselect
-#define pp_sselect Perl_pp_sselect
-#define Perl_pp_sservent CPerlObj::Perl_pp_sservent
-#define pp_sservent Perl_pp_sservent
-#define Perl_pp_ssockopt CPerlObj::Perl_pp_ssockopt
-#define pp_ssockopt Perl_pp_ssockopt
-#define Perl_pp_stat CPerlObj::Perl_pp_stat
-#define pp_stat Perl_pp_stat
-#define Perl_pp_stringify CPerlObj::Perl_pp_stringify
-#define pp_stringify Perl_pp_stringify
-#define Perl_pp_stub CPerlObj::Perl_pp_stub
-#define pp_stub Perl_pp_stub
-#define Perl_pp_study CPerlObj::Perl_pp_study
-#define pp_study Perl_pp_study
-#define Perl_pp_subst CPerlObj::Perl_pp_subst
-#define pp_subst Perl_pp_subst
-#define Perl_pp_substcont CPerlObj::Perl_pp_substcont
-#define pp_substcont Perl_pp_substcont
-#define Perl_pp_substr CPerlObj::Perl_pp_substr
-#define pp_substr Perl_pp_substr
-#define Perl_pp_subtract CPerlObj::Perl_pp_subtract
-#define pp_subtract Perl_pp_subtract
-#define Perl_pp_symlink CPerlObj::Perl_pp_symlink
-#define pp_symlink Perl_pp_symlink
-#define Perl_pp_syscall CPerlObj::Perl_pp_syscall
-#define pp_syscall Perl_pp_syscall
-#define Perl_pp_sysopen CPerlObj::Perl_pp_sysopen
-#define pp_sysopen Perl_pp_sysopen
-#define Perl_pp_sysread CPerlObj::Perl_pp_sysread
-#define pp_sysread Perl_pp_sysread
-#define Perl_pp_sysseek CPerlObj::Perl_pp_sysseek
-#define pp_sysseek Perl_pp_sysseek
-#define Perl_pp_system CPerlObj::Perl_pp_system
-#define pp_system Perl_pp_system
-#define Perl_pp_syswrite CPerlObj::Perl_pp_syswrite
-#define pp_syswrite Perl_pp_syswrite
-#define Perl_pp_tell CPerlObj::Perl_pp_tell
-#define pp_tell Perl_pp_tell
-#define Perl_pp_telldir CPerlObj::Perl_pp_telldir
-#define pp_telldir Perl_pp_telldir
-#define Perl_pp_threadsv CPerlObj::Perl_pp_threadsv
-#define pp_threadsv Perl_pp_threadsv
-#define Perl_pp_tie CPerlObj::Perl_pp_tie
-#define pp_tie Perl_pp_tie
-#define Perl_pp_tied CPerlObj::Perl_pp_tied
-#define pp_tied Perl_pp_tied
-#define Perl_pp_time CPerlObj::Perl_pp_time
-#define pp_time Perl_pp_time
-#define Perl_pp_tms CPerlObj::Perl_pp_tms
-#define pp_tms Perl_pp_tms
-#define Perl_pp_trans CPerlObj::Perl_pp_trans
-#define pp_trans Perl_pp_trans
-#define Perl_pp_truncate CPerlObj::Perl_pp_truncate
-#define pp_truncate Perl_pp_truncate
-#define Perl_pp_uc CPerlObj::Perl_pp_uc
-#define pp_uc Perl_pp_uc
-#define Perl_pp_ucfirst CPerlObj::Perl_pp_ucfirst
-#define pp_ucfirst Perl_pp_ucfirst
-#define Perl_pp_umask CPerlObj::Perl_pp_umask
-#define pp_umask Perl_pp_umask
-#define Perl_pp_undef CPerlObj::Perl_pp_undef
-#define pp_undef Perl_pp_undef
-#define Perl_pp_unlink CPerlObj::Perl_pp_unlink
-#define pp_unlink Perl_pp_unlink
-#define Perl_pp_unpack CPerlObj::Perl_pp_unpack
-#define pp_unpack Perl_pp_unpack
-#define Perl_pp_unshift CPerlObj::Perl_pp_unshift
-#define pp_unshift Perl_pp_unshift
-#define Perl_pp_unstack CPerlObj::Perl_pp_unstack
-#define pp_unstack Perl_pp_unstack
-#define Perl_pp_untie CPerlObj::Perl_pp_untie
-#define pp_untie Perl_pp_untie
-#define Perl_pp_utime CPerlObj::Perl_pp_utime
-#define pp_utime Perl_pp_utime
-#define Perl_pp_values CPerlObj::Perl_pp_values
-#define pp_values Perl_pp_values
-#define Perl_pp_vec CPerlObj::Perl_pp_vec
-#define pp_vec Perl_pp_vec
-#define Perl_pp_wait CPerlObj::Perl_pp_wait
-#define pp_wait Perl_pp_wait
-#define Perl_pp_waitpid CPerlObj::Perl_pp_waitpid
-#define pp_waitpid Perl_pp_waitpid
-#define Perl_pp_wantarray CPerlObj::Perl_pp_wantarray
-#define pp_wantarray Perl_pp_wantarray
-#define Perl_pp_warn CPerlObj::Perl_pp_warn
-#define pp_warn Perl_pp_warn
-#define Perl_pp_xor CPerlObj::Perl_pp_xor
-#define pp_xor Perl_pp_xor
-
-#endif /* PERL_OBJECT */
-
-/* Compatibility stubs. Compile extensions with -DPERL_NOCOMPAT to
- disable them.
- */
-
-#if !defined(PERL_CORE)
-# define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,PTR2IV(ptr))
-# define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,PTR2IV(ptr))
-#endif
-
-#if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) && !defined(PERL_BINCOMPAT_5005)
-
-/* Compatibility for various misnamed functions. All functions
- in the API that begin with "perl_" (not "Perl_") take an explicit
- interpreter context pointer.
- The following are not like that, but since they had a "perl_"
- prefix in previous versions, we provide compatibility macros.
- */
-# define perl_atexit(a,b) call_atexit(a,b)
-# define perl_call_argv(a,b,c) call_argv(a,b,c)
-# define perl_call_pv(a,b) call_pv(a,b)
-# define perl_call_method(a,b) call_method(a,b)
-# define perl_call_sv(a,b) call_sv(a,b)
-# define perl_eval_sv(a,b) eval_sv(a,b)
-# define perl_eval_pv(a,b) eval_pv(a,b)
-# define perl_require_pv(a) require_pv(a)
-# define perl_get_sv(a,b) get_sv(a,b)
-# define perl_get_av(a,b) get_av(a,b)
-# define perl_get_hv(a,b) get_hv(a,b)
-# define perl_get_cv(a,b) get_cv(a,b)
-# define perl_init_i18nl10n(a) init_i18nl10n(a)
-# define perl_init_i18nl14n(a) init_i18nl14n(a)
-# define perl_new_ctype(a) new_ctype(a)
-# define perl_new_collate(a) new_collate(a)
-# define perl_new_numeric(a) new_numeric(a)
-
-/* varargs functions can't be handled with CPP macros. :-(
- This provides a set of compatibility functions that don't take
- an extra argument but grab the context pointer using the macro
- dTHX.
- */
-#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_OBJECT)
-# define croak Perl_croak_nocontext
-# define deb Perl_deb_nocontext
-# define die Perl_die_nocontext
-# define form Perl_form_nocontext
-# define load_module Perl_load_module_nocontext
-# define mess Perl_mess_nocontext
-# define newSVpvf Perl_newSVpvf_nocontext
-# define sv_catpvf Perl_sv_catpvf_nocontext
-# define sv_setpvf Perl_sv_setpvf_nocontext
-# define warn Perl_warn_nocontext
-# define warner Perl_warner_nocontext
-# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
-# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
-#endif
-
-#endif /* !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) */
-
-#if !defined(PERL_IMPLICIT_CONTEXT)
-/* undefined symbols, point them back at the usual ones */
-# define Perl_croak_nocontext Perl_croak
-# define Perl_die_nocontext Perl_die
-# define Perl_deb_nocontext Perl_deb
-# define Perl_form_nocontext Perl_form
-# define Perl_load_module_nocontext Perl_load_module
-# define Perl_mess_nocontext Perl_mess
-# define Perl_newSVpvf_nocontext Perl_newSVpvf
-# define Perl_sv_catpvf_nocontext Perl_sv_catpvf
-# define Perl_sv_setpvf_nocontext Perl_sv_setpvf
-# define Perl_warn_nocontext Perl_warn
-# define Perl_warner_nocontext Perl_warner
-# define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg
-# define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg
-#endif
-
diff --git a/contrib/perl5/embed.pl b/contrib/perl5/embed.pl
deleted file mode 100755
index 2b0f2aa..0000000
--- a/contrib/perl5/embed.pl
+++ /dev/null
@@ -1,2550 +0,0 @@
-#!/usr/bin/perl -w
-
-require 5.003; # keep this compatible, an old perl is all we may have before
- # we build the new one
-
-#
-# See database of global and static function prototypes at the __END__.
-# This is used to generate prototype headers under various configurations,
-# export symbols lists for different platforms, and macros to provide an
-# implicit interpreter context argument.
-#
-
-my $END = tell DATA;
-
-# walk table providing an array of components in each line to
-# subroutine, printing the result
-sub walk_table (&@) {
- my $function = shift;
- my $filename = shift || '-';
- my $leader = shift;
- my $trailer = shift;
- my $F;
- local *F;
- if (ref $filename) { # filehandle
- $F = $filename;
- }
- else {
- unlink $filename;
- open F, ">$filename" or die "Can't open $filename: $!";
- $F = \*F;
- }
- print $F $leader if $leader;
- seek DATA, $END, 0; # so we may restart
- while (<DATA>) {
- chomp;
- next if /^:/;
- while (s|\\$||) {
- $_ .= <DATA>;
- chomp;
- }
- my @args;
- if (/^\s*(#|$)/) {
- @args = $_;
- }
- else {
- @args = split /\s*\|\s*/, $_;
- }
- print $F $function->(@args);
- }
- print $F $trailer if $trailer;
- close $F unless ref $filename;
-}
-
-sub munge_c_files () {
- my $functions = {};
- unless (@ARGV) {
- warn "\@ARGV empty, nothing to do\n";
- return;
- }
- walk_table {
- if (@_ > 1) {
- $functions->{$_[2]} = \@_ if $_[@_-1] =~ /\.\.\./;
- }
- } '/dev/null';
- local $^I = '.bak';
- while (<>) {
-# if (/^#\s*include\s+"perl.h"/) {
-# my $file = uc $ARGV;
-# $file =~ s/\./_/g;
-# print "#define PERL_IN_$file\n";
-# }
-# s{^(\w+)\s*\(}
-# {
-# my $f = $1;
-# my $repl = "$f(";
-# if (exists $functions->{$f}) {
-# my $flags = $functions->{$f}[0];
-# $repl = "Perl_$repl" if $flags =~ /p/;
-# unless ($flags =~ /n/) {
-# $repl .= "pTHX";
-# $repl .= "_ " if @{$functions->{$f}} > 3;
-# }
-# warn("$ARGV:$.:$repl\n");
-# }
-# $repl;
-# }e;
- s{(\b(\w+)[ \t]*\([ \t]*(?!aTHX))}
- {
- my $repl = $1;
- my $f = $2;
- if (exists $functions->{$f}) {
- $repl .= "aTHX_ ";
- warn("$ARGV:$.:$`#$repl#$'");
- }
- $repl;
- }eg;
- print;
- close ARGV if eof; # restart $.
- }
- exit;
-}
-
-#munge_c_files();
-
-# generate proto.h
-my $wrote_protected = 0;
-
-sub write_protos {
- my $ret = "";
- if (@_ == 1) {
- my $arg = shift;
- $ret .= "$arg\n";
- }
- else {
- my ($flags,$retval,$func,@args) = @_;
- if ($flags =~ /s/) {
- $retval = "STATIC $retval";
- $func = "S_$func";
- }
- else {
- $retval = "PERL_CALLCONV $retval";
- if ($flags =~ /p/) {
- $func = "Perl_$func";
- }
- }
- $ret .= "$retval\t$func(";
- unless ($flags =~ /n/) {
- $ret .= "pTHX";
- $ret .= "_ " if @args;
- }
- if (@args) {
- $ret .= join ", ", @args;
- }
- else {
- $ret .= "void" if $flags =~ /n/;
- }
- $ret .= ")";
- $ret .= " __attribute__((noreturn))" if $flags =~ /r/;
- if( $flags =~ /f/ ) {
- my $prefix = $flags =~ /n/ ? '' : 'pTHX_';
- my $args = scalar @args;
- $ret .= "\n#ifdef CHECK_FORMAT\n";
- $ret .= sprintf " __attribute__((format(printf,%s%d,%s%d)))",
- $prefix, $args - 1, $prefix, $args;
- $ret .= "\n#endif\n";
- }
- $ret .= ";\n";
- }
- $ret;
-}
-
-# generates global.sym (API export list), and populates %global with global symbols
-sub write_global_sym {
- my $ret = "";
- if (@_ > 1) {
- my ($flags,$retval,$func,@args) = @_;
- if ($flags =~ /A/ && $flags !~ /x/) { # public API, so export
- $func = "Perl_$func" if $flags =~ /p/;
- $ret = "$func\n";
- }
- }
- $ret;
-}
-
-
-walk_table(\&write_protos, 'proto.h', <<'EOT');
-/*
- * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- * This file is autogenerated from data in embed.pl. Edit that file
- * and run 'make regen_headers' to effect changes.
- */
-
-EOT
-
-walk_table(\&write_global_sym, 'global.sym', <<'EOT');
-#
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is autogenerated from data in embed.pl. Edit that file
-# and run 'make regen_headers' to effect changes.
-#
-
-EOT
-
-# XXX others that may need adding
-# warnhook
-# hints
-# copline
-my @extvars = qw(sv_undef sv_yes sv_no na dowarn
- curcop compiling
- tainting tainted stack_base stack_sp sv_arenaroot
- no_modify
- curstash DBsub DBsingle debstash
- rsfp
- stdingv
- defgv
- errgv
- rsfp_filters
- perldb
- diehook
- dirty
- perl_destruct_level
- ppaddr
- );
-
-sub readsyms (\%$) {
- my ($syms, $file) = @_;
- local (*FILE, $_);
- open(FILE, "< $file")
- or die "embed.pl: Can't open $file: $!\n";
- while (<FILE>) {
- s/[ \t]*#.*//; # Delete comments.
- if (/^\s*(\S+)\s*$/) {
- my $sym = $1;
- warn "duplicate symbol $sym while processing $file\n"
- if exists $$syms{$sym};
- $$syms{$sym} = 1;
- }
- }
- close(FILE);
-}
-
-# Perl_pp_* and Perl_ck_* are in pp.sym
-readsyms my %ppsym, 'pp.sym';
-
-sub readvars(\%$$@) {
- my ($syms, $file,$pre,$keep_pre) = @_;
- local (*FILE, $_);
- open(FILE, "< $file")
- or die "embed.pl: Can't open $file: $!\n";
- while (<FILE>) {
- s/[ \t]*#.*//; # Delete comments.
- if (/PERLVARA?I?C?\($pre(\w+)/) {
- my $sym = $1;
- $sym = $pre . $sym if $keep_pre;
- warn "duplicate symbol $sym while processing $file\n"
- if exists $$syms{$sym};
- $$syms{$sym} = $pre || 1;
- }
- }
- close(FILE);
-}
-
-my %intrp;
-my %thread;
-
-readvars %intrp, 'intrpvar.h','I';
-readvars %thread, 'thrdvar.h','T';
-readvars %globvar, 'perlvars.h','G';
-
-foreach my $sym (sort keys %thread) {
- warn "$sym in intrpvar.h as well as thrdvar.h\n" if exists $intrp{$sym};
-}
-
-sub undefine ($) {
- my ($sym) = @_;
- "#undef $sym\n";
-}
-
-sub hide ($$) {
- my ($from, $to) = @_;
- my $t = int(length($from) / 8);
- "#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
-}
-
-sub bincompat_var ($$) {
- my ($pfx, $sym) = @_;
- my $arg = ($pfx eq 'G' ? 'NULL' : 'aTHXo');
- undefine("PL_$sym") . hide("PL_$sym", "(*Perl_${pfx}${sym}_ptr($arg))");
-}
-
-sub multon ($$$) {
- my ($sym,$pre,$ptr) = @_;
- hide("PL_$sym", "($ptr$pre$sym)");
-}
-
-sub multoff ($$) {
- my ($sym,$pre) = @_;
- return hide("PL_$pre$sym", "PL_$sym");
-}
-
-unlink 'embed.h';
-open(EM, '> embed.h') or die "Can't create embed.h: $!\n";
-
-print EM <<'END';
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-/* (Doing namespace management portably in C is really gross.) */
-
-/* NO_EMBED is no longer supported. i.e. EMBED is always active. */
-
-/* provide binary compatible (but inconsistent) names */
-#if defined(PERL_BINCOMPAT_5005)
-# define Perl_call_atexit perl_atexit
-# define Perl_eval_sv perl_eval_sv
-# define Perl_eval_pv perl_eval_pv
-# define Perl_call_argv perl_call_argv
-# define Perl_call_method perl_call_method
-# define Perl_call_pv perl_call_pv
-# define Perl_call_sv perl_call_sv
-# define Perl_get_av perl_get_av
-# define Perl_get_cv perl_get_cv
-# define Perl_get_hv perl_get_hv
-# define Perl_get_sv perl_get_sv
-# define Perl_init_i18nl10n perl_init_i18nl10n
-# define Perl_init_i18nl14n perl_init_i18nl14n
-# define Perl_new_collate perl_new_collate
-# define Perl_new_ctype perl_new_ctype
-# define Perl_new_numeric perl_new_numeric
-# define Perl_require_pv perl_require_pv
-# define Perl_safesyscalloc Perl_safecalloc
-# define Perl_safesysfree Perl_safefree
-# define Perl_safesysmalloc Perl_safemalloc
-# define Perl_safesysrealloc Perl_saferealloc
-# define Perl_set_numeric_local perl_set_numeric_local
-# define Perl_set_numeric_standard perl_set_numeric_standard
-/* malloc() pollution was the default in earlier versions, so enable
- * it for bincompat; but not for systems that used to do prevent that,
- * or when they ask for {HIDE,EMBED}MYMALLOC */
-# if !defined(EMBEDMYMALLOC) && !defined(HIDEMYMALLOC)
-# if !defined(NeXT) && !defined(__NeXT) && !defined(__MACHTEN__) && \
- !defined(__QNX__)
-# define PERL_POLLUTE_MALLOC
-# endif
-# endif
-#endif
-
-/* Hide global symbols */
-
-#if !defined(PERL_OBJECT)
-#if !defined(PERL_IMPLICIT_CONTEXT)
-
-END
-
-walk_table {
- my $ret = "";
- if (@_ == 1) {
- my $arg = shift;
- $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
- }
- else {
- my ($flags,$retval,$func,@args) = @_;
- unless ($flags =~ /o/) {
- if ($flags =~ /s/) {
- $ret .= hide($func,"S_$func");
- }
- elsif ($flags =~ /p/) {
- $ret .= hide($func,"Perl_$func");
- }
- }
- }
- $ret;
-} \*EM;
-
-for $sym (sort keys %ppsym) {
- $sym =~ s/^Perl_//;
- print EM hide($sym, "Perl_$sym");
-}
-
-print EM <<'END';
-
-#else /* PERL_IMPLICIT_CONTEXT */
-
-END
-
-my @az = ('a'..'z');
-
-walk_table {
- my $ret = "";
- if (@_ == 1) {
- my $arg = shift;
- $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
- }
- else {
- my ($flags,$retval,$func,@args) = @_;
- unless ($flags =~ /o/) {
- my $args = scalar @args;
- if ($args and $args[$args-1] =~ /\.\.\./) {
- # we're out of luck for varargs functions under CPP
- }
- elsif ($flags =~ /n/) {
- if ($flags =~ /s/) {
- $ret .= hide($func,"S_$func");
- }
- elsif ($flags =~ /p/) {
- $ret .= hide($func,"Perl_$func");
- }
- }
- else {
- my $alist = join(",", @az[0..$args-1]);
- $ret = "#define $func($alist)";
- my $t = int(length($ret) / 8);
- $ret .= "\t" x ($t < 4 ? 4 - $t : 1);
- if ($flags =~ /s/) {
- $ret .= "S_$func(aTHX";
- }
- elsif ($flags =~ /p/) {
- $ret .= "Perl_$func(aTHX";
- }
- $ret .= "_ " if $alist;
- $ret .= $alist . ")\n";
- }
- }
- }
- $ret;
-} \*EM;
-
-for $sym (sort keys %ppsym) {
- $sym =~ s/^Perl_//;
- if ($sym =~ /^ck_/) {
- print EM hide("$sym(a)", "Perl_$sym(aTHX_ a)");
- }
- elsif ($sym =~ /^pp_/) {
- print EM hide("$sym()", "Perl_$sym(aTHX)");
- }
- else {
- warn "Illegal symbol '$sym' in pp.sym";
- }
-}
-
-print EM <<'END';
-
-#endif /* PERL_IMPLICIT_CONTEXT */
-#else /* PERL_OBJECT */
-
-END
-
-walk_table {
- my $ret = "";
- if (@_ == 1) {
- my $arg = shift;
- $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
- }
- else {
- my ($flags,$retval,$func,@args) = @_;
- if ($flags =~ /s/) {
- $ret .= hide("S_$func","CPerlObj::S_$func") if $flags !~ /j/;
- $ret .= hide($func,"S_$func");
- }
- elsif ($flags =~ /p/) {
- $ret .= hide("Perl_$func","CPerlObj::Perl_$func") if $flags !~ /j/;
- $ret .= hide($func,"Perl_$func");
- }
- else {
- $ret .= hide($func,"CPerlObj::$func") if $flags !~ /j/;
- }
- }
- $ret;
-} \*EM;
-
-for $sym (sort keys %ppsym) {
- $sym =~ s/^Perl_//;
- print EM hide("Perl_$sym", "CPerlObj::Perl_$sym");
- print EM hide($sym, "Perl_$sym");
-}
-
-print EM <<'END';
-
-#endif /* PERL_OBJECT */
-
-/* Compatibility stubs. Compile extensions with -DPERL_NOCOMPAT to
- disable them.
- */
-
-#if !defined(PERL_CORE)
-# define sv_setptrobj(rv,ptr,name) sv_setref_iv(rv,name,PTR2IV(ptr))
-# define sv_setptrref(rv,ptr) sv_setref_iv(rv,Nullch,PTR2IV(ptr))
-#endif
-
-#if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) && !defined(PERL_BINCOMPAT_5005)
-
-/* Compatibility for various misnamed functions. All functions
- in the API that begin with "perl_" (not "Perl_") take an explicit
- interpreter context pointer.
- The following are not like that, but since they had a "perl_"
- prefix in previous versions, we provide compatibility macros.
- */
-# define perl_atexit(a,b) call_atexit(a,b)
-# define perl_call_argv(a,b,c) call_argv(a,b,c)
-# define perl_call_pv(a,b) call_pv(a,b)
-# define perl_call_method(a,b) call_method(a,b)
-# define perl_call_sv(a,b) call_sv(a,b)
-# define perl_eval_sv(a,b) eval_sv(a,b)
-# define perl_eval_pv(a,b) eval_pv(a,b)
-# define perl_require_pv(a) require_pv(a)
-# define perl_get_sv(a,b) get_sv(a,b)
-# define perl_get_av(a,b) get_av(a,b)
-# define perl_get_hv(a,b) get_hv(a,b)
-# define perl_get_cv(a,b) get_cv(a,b)
-# define perl_init_i18nl10n(a) init_i18nl10n(a)
-# define perl_init_i18nl14n(a) init_i18nl14n(a)
-# define perl_new_ctype(a) new_ctype(a)
-# define perl_new_collate(a) new_collate(a)
-# define perl_new_numeric(a) new_numeric(a)
-
-/* varargs functions can't be handled with CPP macros. :-(
- This provides a set of compatibility functions that don't take
- an extra argument but grab the context pointer using the macro
- dTHX.
- */
-#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_OBJECT)
-# define croak Perl_croak_nocontext
-# define deb Perl_deb_nocontext
-# define die Perl_die_nocontext
-# define form Perl_form_nocontext
-# define load_module Perl_load_module_nocontext
-# define mess Perl_mess_nocontext
-# define newSVpvf Perl_newSVpvf_nocontext
-# define sv_catpvf Perl_sv_catpvf_nocontext
-# define sv_setpvf Perl_sv_setpvf_nocontext
-# define warn Perl_warn_nocontext
-# define warner Perl_warner_nocontext
-# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
-# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
-#endif
-
-#endif /* !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) */
-
-#if !defined(PERL_IMPLICIT_CONTEXT)
-/* undefined symbols, point them back at the usual ones */
-# define Perl_croak_nocontext Perl_croak
-# define Perl_die_nocontext Perl_die
-# define Perl_deb_nocontext Perl_deb
-# define Perl_form_nocontext Perl_form
-# define Perl_load_module_nocontext Perl_load_module
-# define Perl_mess_nocontext Perl_mess
-# define Perl_newSVpvf_nocontext Perl_newSVpvf
-# define Perl_sv_catpvf_nocontext Perl_sv_catpvf
-# define Perl_sv_setpvf_nocontext Perl_sv_setpvf
-# define Perl_warn_nocontext Perl_warn
-# define Perl_warner_nocontext Perl_warner
-# define Perl_sv_catpvf_mg_nocontext Perl_sv_catpvf_mg
-# define Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_mg
-#endif
-
-END
-
-close(EM);
-
-unlink 'embedvar.h';
-open(EM, '> embedvar.h')
- or die "Can't create embedvar.h: $!\n";
-
-print EM <<'END';
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-/* (Doing namespace management portably in C is really gross.) */
-
-/*
- The following combinations of MULTIPLICITY, USE_THREADS, PERL_OBJECT
- and PERL_IMPLICIT_CONTEXT are supported:
- 1) none
- 2) MULTIPLICITY # supported for compatibility
- 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
- 4) USE_THREADS && PERL_IMPLICIT_CONTEXT
- 5) MULTIPLICITY && USE_THREADS && PERL_IMPLICIT_CONTEXT
- 6) PERL_OBJECT && PERL_IMPLICIT_CONTEXT
-
- All other combinations of these flags are errors.
-
- #3, #4, #5, and #6 are supported directly, while #2 is a special
- case of #3 (supported by redefining vTHX appropriately).
-*/
-
-#if defined(MULTIPLICITY)
-/* cases 2, 3 and 5 above */
-
-# if defined(PERL_IMPLICIT_CONTEXT)
-# define vTHX aTHX
-# else
-# define vTHX PERL_GET_INTERP
-# endif
-
-END
-
-for $sym (sort keys %thread) {
- print EM multon($sym,'T','vTHX->');
-}
-
-print EM <<'END';
-
-# if defined(PERL_OBJECT)
-# include "error: PERL_OBJECT + MULTIPLICITY don't go together"
-# endif
-
-# if defined(USE_THREADS)
-/* case 5 above */
-
-END
-
-for $sym (sort keys %intrp) {
- print EM multon($sym,'I','PERL_GET_INTERP->');
-}
-
-print EM <<'END';
-
-# else /* !USE_THREADS */
-/* cases 2 and 3 above */
-
-END
-
-for $sym (sort keys %intrp) {
- print EM multon($sym,'I','vTHX->');
-}
-
-print EM <<'END';
-
-# endif /* USE_THREADS */
-
-#else /* !MULTIPLICITY */
-
-# if defined(PERL_OBJECT)
-/* case 6 above */
-
-END
-
-for $sym (sort keys %thread) {
- print EM multon($sym,'T','aTHXo->interp.');
-}
-
-
-for $sym (sort keys %intrp) {
- print EM multon($sym,'I','aTHXo->interp.');
-}
-
-print EM <<'END';
-
-# else /* !PERL_OBJECT */
-
-/* cases 1 and 4 above */
-
-END
-
-for $sym (sort keys %intrp) {
- print EM multoff($sym,'I');
-}
-
-print EM <<'END';
-
-# if defined(USE_THREADS)
-/* case 4 above */
-
-END
-
-for $sym (sort keys %thread) {
- print EM multon($sym,'T','aTHX->');
-}
-
-print EM <<'END';
-
-# else /* !USE_THREADS */
-/* case 1 above */
-
-END
-
-for $sym (sort keys %thread) {
- print EM multoff($sym,'T');
-}
-
-print EM <<'END';
-
-# endif /* USE_THREADS */
-# endif /* PERL_OBJECT */
-#endif /* MULTIPLICITY */
-
-#if defined(PERL_GLOBAL_STRUCT)
-
-END
-
-for $sym (sort keys %globvar) {
- print EM multon($sym,'G','PL_Vars.');
-}
-
-print EM <<'END';
-
-#else /* !PERL_GLOBAL_STRUCT */
-
-END
-
-for $sym (sort keys %globvar) {
- print EM multoff($sym,'G');
-}
-
-print EM <<'END';
-
-#endif /* PERL_GLOBAL_STRUCT */
-
-#ifdef PERL_POLLUTE /* disabled by default in 5.6.0 */
-
-END
-
-for $sym (sort @extvars) {
- print EM hide($sym,"PL_$sym");
-}
-
-print EM <<'END';
-
-#endif /* PERL_POLLUTE */
-END
-
-close(EM);
-
-unlink 'objXSUB.h';
-open(OBX, '> objXSUB.h')
- or die "Can't create objXSUB.h: $!\n";
-
-print OBX <<'EOT';
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-#ifndef __objXSUB_h__
-#define __objXSUB_h__
-
-/* method calls via pPerl (static functions without a "this" pointer need these) */
-
-#if defined(PERL_CORE) && defined(PERL_OBJECT)
-
-/* XXX soon to be eliminated, only a few things in PERLCORE need these now */
-
-EOT
-
-walk_table {
- my $ret = "";
- if (@_ == 1) {
- my $arg = shift;
- $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
- }
- else {
- my ($flags,$retval,$func,@args) = @_;
- if ($flags =~ /A/ && $flags !~ /j/) { # API function needing macros
- if ($flags =~ /p/) {
- $ret .= undefine("Perl_$func") . hide("Perl_$func","pPerl->Perl_$func");
- $ret .= undefine($func) . hide($func,"Perl_$func");
- }
- else {
- $ret .= undefine($func) . hide($func,"pPerl->$func");
- }
- }
- }
- $ret;
-} \*OBX;
-
-# NOTE: not part of API
-#for $sym (sort keys %ppsym) {
-# $sym =~ s/^Perl_//;
-# print OBX undefine("Perl_$sym") . hide("Perl_$sym", "pPerl->Perl_$sym");
-# print OBX undefine($sym) . hide($sym, "Perl_$sym");
-#}
-
-print OBX <<'EOT';
-
-#endif /* PERL_CORE && PERL_OBJECT */
-#endif /* __objXSUB_h__ */
-EOT
-
-close(OBX);
-
-unlink 'perlapi.h';
-unlink 'perlapi.c';
-open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n";
-open(CAPIH, '> perlapi.h') or die "Can't create perlapi.h: $!\n";
-
-print CAPIH <<'EOT';
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-/* declare accessor functions for Perl variables */
-#ifndef __perlapi_h__
-#define __perlapi_h__
-
-#if defined(PERL_OBJECT) || defined (MULTIPLICITY)
-
-#if defined(PERL_OBJECT)
-# undef aTHXo
-# define aTHXo pPerl
-# undef aTHXo_
-# define aTHXo_ aTHXo,
-#endif /* PERL_OBJECT */
-
-START_EXTERN_C
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHXo);
-#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
- EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHXo);
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v, const t)
-
-#include "thrdvar.h"
-#include "intrpvar.h"
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-END_EXTERN_C
-
-#if defined(PERL_CORE)
-
-/* accessor functions for Perl variables (provide binary compatibility) */
-
-/* these need to be mentioned here, or most linkers won't put them in
- the perl executable */
-
-#ifndef PERL_NO_FORCE_LINK
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXT void *PL_force_link_funcs[];
-#else
-EXT void *PL_force_link_funcs[] = {
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(v,t) (void*)Perl_##v##_ptr,
-#define PERLVARA(v,n,t) PERLVAR(v,t)
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v,t)
-
-#include "thrdvar.h"
-#include "intrpvar.h"
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-};
-#endif /* DOINIT */
-
-START_EXTERN_C
-
-#endif /* PERL_NO_FORCE_LINK */
-
-#else /* !PERL_CORE */
-
-EOT
-
-foreach my $sym (sort keys %intrp) {
- print CAPIH bincompat_var('I',$sym);
-}
-
-foreach my $sym (sort keys %thread) {
- print CAPIH bincompat_var('T',$sym);
-}
-
-foreach my $sym (sort keys %globvar) {
- print CAPIH bincompat_var('G',$sym);
-}
-
-print CAPIH <<'EOT';
-
-#endif /* !PERL_CORE */
-#endif /* PERL_OBJECT || MULTIPLICITY */
-
-#endif /* __perlapi_h__ */
-
-EOT
-close CAPIH;
-
-print CAPI <<'EOT';
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "perlapi.h"
-
-#if defined(PERL_OBJECT) || defined (MULTIPLICITY)
-
-/* accessor functions for Perl variables (provides binary compatibility) */
-START_EXTERN_C
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-#if defined(PERL_OBJECT)
-#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \
- { return &(aTHXo->interp.v); }
-#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \
- { return &(aTHXo->interp.v); }
-#else /* MULTIPLICITY */
-#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
- { return &(aTHX->v); }
-#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
- { return &(aTHX->v); }
-#endif
-
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v, const t)
-
-#include "thrdvar.h"
-#include "intrpvar.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \
- { return &(PL_##v); }
-#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \
- { return &(PL_##v); }
-#undef PERLVARIC
-#define PERLVARIC(v,t,i) const t* Perl_##v##_ptr(pTHXo) \
- { return (const t *)&(PL_##v); }
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-#if defined(PERL_OBJECT)
-
-/* C-API layer for PERL_OBJECT */
-
-EOT
-
-# functions that take va_list* for implementing vararg functions
-# NOTE: makedef.pl must be updated if you add symbols to %vfuncs
-my %vfuncs = qw(
- Perl_croak Perl_vcroak
- Perl_warn Perl_vwarn
- Perl_warner Perl_vwarner
- Perl_die Perl_vdie
- Perl_form Perl_vform
- Perl_load_module Perl_vload_module
- Perl_mess Perl_vmess
- Perl_deb Perl_vdeb
- Perl_newSVpvf Perl_vnewSVpvf
- Perl_sv_setpvf Perl_sv_vsetpvf
- Perl_sv_setpvf_mg Perl_sv_vsetpvf_mg
- Perl_sv_catpvf Perl_sv_vcatpvf
- Perl_sv_catpvf_mg Perl_sv_vcatpvf_mg
- Perl_dump_indent Perl_dump_vindent
- Perl_default_protect Perl_vdefault_protect
-);
-
-sub emit_func {
- my ($addcontext, $rettype,$func,@args) = @_;
- my @aargs = @args;
- my $a;
- for $a (@aargs) { $a =~ s/^.*\b(\w+)$/$1/ }
- my $ctxarg = '';
- if (not $addcontext) {
- $ctxarg = 'pTHXo';
- $ctxarg .= '_ ' if @args;
- }
- my $decl = '';
- if ($addcontext) {
- $decl .= " dTHXo;\n";
- }
- local $" = ', ';
- my $return = ($rettype =~ /^\s*(void|Free_t|Signal_t)\s*$/
- ? '' : 'return ');
- my $emitval = '';
- if (@args and $args[$#args] =~ /\.\.\./) {
- pop @aargs;
- my $retarg = '';
- my $ctxfunc = $func;
- $ctxfunc =~ s/_nocontext$//;
- return $emitval unless exists $vfuncs{$ctxfunc};
- if (length $return) {
- $decl .= " $rettype retval;\n";
- $retarg .= "retval = ";
- $return = "\n ${return}retval;\n";
- }
- $emitval .= <<EOT
-$rettype
-$func($ctxarg@args)
-{
-$decl va_list args;
- va_start(args, $aargs[$#aargs]);
- $retarg((CPerlObj*)pPerl)->$vfuncs{$ctxfunc}(@aargs, &args);
- va_end(args);$return
-}
-EOT
- }
- else {
- $emitval .= <<EOT
-$rettype
-$func($ctxarg@args)
-{
-$decl $return((CPerlObj*)pPerl)->$func(@aargs);
-}
-EOT
- }
- $emitval;
-}
-
-# XXXX temporary hack
-my $sym;
-for $sym (qw(
- perl_construct
- perl_destruct
- perl_free
- perl_run
- perl_parse
- ))
-{
- $skipapi_funcs{$sym}++;
-}
-
-walk_table {
- my $ret = "";
- if (@_ == 1) {
- my $arg = shift;
- $ret .= "$arg\n" if $arg =~ /^#\s*(if|ifn?def|else|endif)\b/;
- }
- else {
- my ($flags,$retval,$func,@args) = @_;
- return $ret if exists $skipapi_funcs{$func};
- if ($flags =~ /A/ && $flags !~ /j/) { # in public API, needed for XSUBS
- $ret .= "\n";
- my $addctx = 1 if $flags =~ /n/;
- if ($flags =~ /p/) {
- $ret .= undefine("Perl_$func");
- $ret .= emit_func($addctx,$retval,"Perl_$func",@args);
- }
- else {
- $ret .= undefine($func);
- $ret .= emit_func($addctx,$retval,$func,@args);
- }
- }
- }
- $ret;
-} \*CAPI;
-
-# NOTE: not part of the API
-#for $sym (sort keys %ppsym) {
-# $sym =~ s/^Perl_//;
-# print CAPI "\n";
-# print CAPI undefine("Perl_$sym");
-# if ($sym =~ /^ck_/) {
-# print CAPI emit_func(0, 'OP *',"Perl_$sym",'OP *o');
-# }
-# else { # pp_foo
-# print CAPI emit_func(0, 'OP *',"Perl_$sym");
-# }
-#}
-
-print CAPI <<'EOT';
-
-#undef Perl_fprintf_nocontext
-int
-Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
-{
- dTHXo;
- va_list(arglist);
- va_start(arglist, format);
- return (*PL_StdIO->pVprintf)(PL_StdIO, stream, format, arglist);
-}
-
-#undef Perl_printf_nocontext
-int
-Perl_printf_nocontext(const char *format, ...)
-{
- dTHXo;
- va_list(arglist);
- va_start(arglist, format);
- return (*PL_StdIO->pVprintf)(PL_StdIO, PerlIO_stdout(), format, arglist);
-}
-
-END_EXTERN_C
-
-#endif /* PERL_OBJECT */
-#endif /* PERL_OBJECT || MULTIPLICITY */
-EOT
-
-close(CAPI);
-
-# autogenerate documentation from comments in source files
-
-my %apidocs;
-my %gutsdocs;
-my %docfuncs;
-
-sub autodoc ($$) { # parse a file and extract documentation info
- my($fh,$file) = @_;
- my($in, $doc, $line);
-FUNC:
- while (defined($in = <$fh>)) {
- $line++;
- if ($in =~ /^=for\s+apidoc\s+(.*)\n/) {
- my $proto = $1;
- $proto = "||$proto" unless $proto =~ /\|/;
- my($flags, $ret, $name, @args) = split /\|/, $proto;
- my $docs = "";
-DOC:
- while (defined($doc = <$fh>)) {
- $line++;
- last DOC if $doc =~ /^=\w+/;
- if ($doc =~ m:^\*/$:) {
- warn "=cut missing? $file:$line:$doc";;
- last DOC;
- }
- $docs .= $doc;
- }
- $docs = "\n$docs" if $docs and $docs !~ /^\n/;
- if ($flags =~ /m/) {
- if ($flags =~ /A/) {
- $apidocs{$name} = [$flags, $docs, $ret, $file, @args];
- }
- else {
- $gutsdocs{$name} = [$flags, $docs, $ret, $file, @args];
- }
- }
- else {
- $docfuncs{$name} = [$flags, $docs, $ret, $file, @args];
- }
- if (defined $doc) {
- if ($doc =~ /^=for/) {
- $in = $doc;
- redo FUNC;
- }
- } else {
- warn "$file:$line:$in";
- }
- }
- }
-}
-
-sub docout ($$$) { # output the docs for one function
- my($fh, $name, $docref) = @_;
- my($flags, $docs, $ret, $file, @args) = @$docref;
-
- $docs .= "NOTE: this function is experimental and may change or be
-removed without notice.\n\n" if $flags =~ /x/;
- $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n"
- if $flags =~ /p/;
-
- print $fh "=item $name\n$docs";
-
- if ($flags =~ /U/) { # no usage
- # nothing
- } elsif ($flags =~ /s/) { # semicolon ("dTHR;")
- print $fh "\t\t$name;\n\n";
- } elsif ($flags =~ /n/) { # no args
- print $fh "\t$ret\t$name\n\n";
- } else { # full usage
- print $fh "\t$ret\t$name";
- print $fh "(" . join(", ", @args) . ")";
- print $fh "\n\n";
- }
- print $fh "=for hackers\nFound in file $file\n\n";
-}
-
-my $file;
-for $file (glob('*.c'), glob('*.h')) {
- open F, "< $file" or die "Cannot open $file for docs: $!\n";
- autodoc(\*F,$file);
- close F or die "Error closing $file: $!\n";
-}
-
-unlink "pod/perlapi.pod";
-open (DOC, ">pod/perlapi.pod") or
- die "Can't create pod/perlapi.pod: $!\n";
-
-walk_table { # load documented functions into approriate hash
- if (@_ > 1) {
- my($flags, $retval, $func, @args) = @_;
- return "" unless $flags =~ /d/;
- $func =~ s/\t//g; $flags =~ s/p//; # clean up fields from embed.pl
- $retval =~ s/\t//;
- if ($flags =~ /A/) {
- my $docref = delete $docfuncs{$func};
- warn "no docs for $func\n" unless $docref and @$docref;
- $docref->[0].="x" if $flags =~ /M/;
- $apidocs{$func} = [$docref->[0] . 'A', $docref->[1], $retval,
- $docref->[3], @args];
- } else {
- my $docref = delete $docfuncs{$func};
- $gutsdocs{$func} = [$docref->[0], $docref->[1], $retval,
- $docref->[3], @args];
- }
- }
- return "";
-} \*DOC;
-
-for (sort keys %docfuncs) {
- # Have you used a full for apidoc or just a func name?
- # Have you used Ap instead of Am in the for apidoc?
- warn "Unable to place $_!\n";
-}
-
-print DOC <<'_EOB_';
-=head1 NAME
-
-perlapi - autogenerated documentation for the perl public API
-
-=head1 DESCRIPTION
-
-This file contains the documentation of the perl public API generated by
-embed.pl, specifically a listing of functions, macros, flags, and variables
-that may be used by extension writers. The interfaces of any functions that
-are not listed here are subject to change without notice. For this reason,
-blindly using functions listed in proto.h is to be avoided when writing
-extensions.
-
-Note that all Perl API global variables must be referenced with the C<PL_>
-prefix. Some macros are provided for compatibility with the older,
-unadorned names, but this support may be disabled in a future release.
-
-The listing is alphabetical, case insensitive.
-
-=over 8
-
-_EOB_
-
-my $key;
-for $key (sort { uc($a) cmp uc($b); } keys %apidocs) { # case insensitive sort
- docout(\*DOC, $key, $apidocs{$key});
-}
-
-print DOC <<'_EOE_';
-=back
-
-=head1 AUTHORS
-
-Until May 1997, this document was maintained by Jeff Okamoto
-<okamoto@corp.hp.com>. It is now maintained as part of Perl itself.
-
-With lots of help and suggestions from Dean Roehrich, Malcolm Beattie,
-Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil
-Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer,
-Stephen McCamant, and Gurusamy Sarathy.
-
-API Listing originally by Dean Roehrich <roehrich@cray.com>.
-
-Updated to be autogenerated from comments in the source by Benjamin Stuhl.
-
-=head1 SEE ALSO
-
-perlguts(1), perlxs(1), perlxstut(1), perlintern(1)
-
-_EOE_
-
-
-close(DOC);
-
-open(GUTS, ">pod/perlintern.pod") or
- die "Unable to create pod/perlintern.pod: $!\n";
-print GUTS <<'END';
-=head1 NAME
-
-perlintern - autogenerated documentation of purely B<internal>
- Perl functions
-
-=head1 DESCRIPTION
-
-This file is the autogenerated documentation of functions in the
-Perl interpreter that are documented using Perl's internal documentation
-format but are not marked as part of the Perl API. In other words,
-B<they are not for use in extensions>!
-
-=over 8
-
-END
-
-for $key (sort { uc($a) cmp uc($b); } keys %gutsdocs) {
- docout(\*GUTS, $key, $gutsdocs{$key});
-}
-
-print GUTS <<'END';
-=back
-
-=head1 AUTHORS
-
-The autodocumentation system was originally added to the Perl core by
-Benjamin Stuhl. Documentation is by whoever was kind enough to
-document their functions.
-
-=head1 SEE ALSO
-
-perlguts(1), perlapi(1)
-
-END
-
-close GUTS;
-
-
-__END__
-
-: Lines are of the form:
-: flags|return_type|function_name|arg1|arg2|...|argN
-:
-: A line may be continued on another by ending it with a backslash.
-: Leading and trailing whitespace will be ignored in each component.
-:
-: flags are single letters with following meanings:
-: A member of public API
-: d function has documentation with its source
-: s static function, should have an S_ prefix in source
-: file
-: n has no implicit interpreter/thread context argument
-: p function has a Perl_ prefix
-: f function takes printf style format string, varargs
-: r function never returns
-: o has no compatibility macro (#define foo Perl_foo)
-: j not a member of CPerlObj
-: x not exported
-: M may change
-:
-: Individual flags may be separated by whitespace.
-:
-: New global functions should be added at the end for binary compatibility
-: in some configurations.
-
-START_EXTERN_C
-
-#if defined(PERL_IMPLICIT_SYS)
-Ajno |PerlInterpreter* |perl_alloc_using \
- |struct IPerlMem* m|struct IPerlMem* ms \
- |struct IPerlMem* mp|struct IPerlEnv* e \
- |struct IPerlStdIO* io|struct IPerlLIO* lio \
- |struct IPerlDir* d|struct IPerlSock* s \
- |struct IPerlProc* p
-#endif
-Ajnod |PerlInterpreter* |perl_alloc
-Ajnod |void |perl_construct |PerlInterpreter* interp
-Ajnod |void |perl_destruct |PerlInterpreter* interp
-Ajnod |void |perl_free |PerlInterpreter* interp
-Ajnod |int |perl_run |PerlInterpreter* interp
-Ajnod |int |perl_parse |PerlInterpreter* interp|XSINIT_t xsinit \
- |int argc|char** argv|char** env
-#if defined(USE_ITHREADS)
-: XXX: perl_clone needs docs
-Ajno |PerlInterpreter*|perl_clone|PerlInterpreter* interp, UV flags
-# if defined(PERL_IMPLICIT_SYS)
-Ajno |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \
- |struct IPerlMem* m|struct IPerlMem* ms \
- |struct IPerlMem* mp|struct IPerlEnv* e \
- |struct IPerlStdIO* io|struct IPerlLIO* lio \
- |struct IPerlDir* d|struct IPerlSock* s \
- |struct IPerlProc* p
-# endif
-#endif
-
-#if defined(MYMALLOC)
-Ajnop |Malloc_t|malloc |MEM_SIZE nbytes
-Ajnop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size
-Ajnop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
-Ajnop |Free_t |mfree |Malloc_t where
-jnp |MEM_SIZE|malloced_size |void *p
-#endif
-
-Ajnp |void* |get_context
-Ajnp |void |set_context |void *thx
-
-END_EXTERN_C
-
-/* functions with flag 'n' should come before here */
-#if defined(PERL_OBJECT)
-class CPerlObj {
-public:
- struct interpreter interp;
- CPerlObj(IPerlMem*, IPerlMem*, IPerlMem*, IPerlEnv*, IPerlStdIO*,
- IPerlLIO*, IPerlDir*, IPerlSock*, IPerlProc*);
- void* operator new(size_t nSize, IPerlMem *pvtbl);
-#ifndef __BORLANDC__
- static void operator delete(void* pPerl, IPerlMem *pvtbl);
-#endif
- int do_aspawn (void *vreally, void **vmark, void **vsp);
-#endif
-#if defined(PERL_OBJECT)
-public:
-#else
-START_EXTERN_C
-#endif
-# include "pp_proto.h"
-Ap |SV* |amagic_call |SV* left|SV* right|int method|int dir
-Ap |bool |Gv_AMupdate |HV* stash
-p |OP* |append_elem |I32 optype|OP* head|OP* tail
-p |OP* |append_list |I32 optype|LISTOP* first|LISTOP* last
-p |I32 |apply |I32 type|SV** mark|SV** sp
-Ap |void |apply_attrs_string|char *stashpv|CV *cv|char *attrstr|STRLEN len
-Ap |SV* |avhv_delete_ent|AV *ar|SV* keysv|I32 flags|U32 hash
-Ap |bool |avhv_exists_ent|AV *ar|SV* keysv|U32 hash
-Ap |SV** |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash
-Ap |SV** |avhv_store_ent |AV *ar|SV* keysv|SV* val|U32 hash
-Ap |HE* |avhv_iternext |AV *ar
-Ap |SV* |avhv_iterval |AV *ar|HE* entry
-Ap |HV* |avhv_keys |AV *ar
-Apd |void |av_clear |AV* ar
-Apd |SV* |av_delete |AV* ar|I32 key|I32 flags
-Apd |bool |av_exists |AV* ar|I32 key
-Apd |void |av_extend |AV* ar|I32 key
-p |AV* |av_fake |I32 size|SV** svp
-Apd |SV** |av_fetch |AV* ar|I32 key|I32 lval
-Apd |void |av_fill |AV* ar|I32 fill
-Apd |I32 |av_len |AV* ar
-Apd |AV* |av_make |I32 size|SV** svp
-Apd |SV* |av_pop |AV* ar
-Apd |void |av_push |AV* ar|SV* val
-ApM |void |av_reify |AV* ar
-Apd |SV* |av_shift |AV* ar
-Apd |SV** |av_store |AV* ar|I32 key|SV* val
-Apd |void |av_undef |AV* ar
-Apd |void |av_unshift |AV* ar|I32 num
-p |OP* |bind_match |I32 type|OP* left|OP* pat
-p |OP* |block_end |I32 floor|OP* seq
-Ap |I32 |block_gimme
-p |int |block_start |int full
-p |void |boot_core_UNIVERSAL
-Ap |void |call_list |I32 oldscope|AV* av_list
-p |bool |cando |Mode_t mode|Uid_t effective|Stat_t* statbufp
-Ap |U32 |cast_ulong |NV f
-Ap |I32 |cast_i32 |NV f
-Ap |IV |cast_iv |NV f
-Ap |UV |cast_uv |NV f
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-Ap |I32 |my_chsize |int fd|Off_t length
-#endif
-#if defined(USE_THREADS)
-Ap |MAGIC* |condpair_magic |SV *sv
-#endif
-p |OP* |convert |I32 optype|I32 flags|OP* o
-Afprd |void |croak |const char* pat|...
-Apr |void |vcroak |const char* pat|va_list* args
-#if defined(PERL_IMPLICIT_CONTEXT)
-Afnrp |void |croak_nocontext|const char* pat|...
-Afnp |OP* |die_nocontext |const char* pat|...
-Afnp |void |deb_nocontext |const char* pat|...
-Afnp |char* |form_nocontext |const char* pat|...
-Anp |void |load_module_nocontext|U32 flags|SV* name|SV* ver|...
-Afnp |SV* |mess_nocontext |const char* pat|...
-Afnp |void |warn_nocontext |const char* pat|...
-Afnp |void |warner_nocontext|U32 err|const char* pat|...
-Afnp |SV* |newSVpvf_nocontext|const char* pat|...
-Afnp |void |sv_catpvf_nocontext|SV* sv|const char* pat|...
-Afnp |void |sv_setpvf_nocontext|SV* sv|const char* pat|...
-Afnp |void |sv_catpvf_mg_nocontext|SV* sv|const char* pat|...
-Afnp |void |sv_setpvf_mg_nocontext|SV* sv|const char* pat|...
-Afnp |int |fprintf_nocontext|PerlIO* stream|const char* fmt|...
-Afnp |int |printf_nocontext|const char* fmt|...
-#endif
-p |void |cv_ckproto |CV* cv|GV* gv|char* p
-p |CV* |cv_clone |CV* proto
-Ap |SV* |cv_const_sv |CV* cv
-p |SV* |op_const_sv |OP* o|CV* cv
-Ap |void |cv_undef |CV* cv
-Ap |void |cx_dump |PERL_CONTEXT* cs
-Ap |SV* |filter_add |filter_t funcp|SV* datasv
-Ap |void |filter_del |filter_t funcp
-Ap |I32 |filter_read |int idx|SV* buffer|int maxlen
-Ap |char** |get_op_descs
-Ap |char** |get_op_names
-p |char* |get_no_modify
-p |U32* |get_opargs
-Ap |PPADDR_t*|get_ppaddr
-p |I32 |cxinc
-Afp |void |deb |const char* pat|...
-Ap |void |vdeb |const char* pat|va_list* args
-Ap |void |debprofdump
-Ap |I32 |debop |OP* o
-Ap |I32 |debstack
-Ap |I32 |debstackptrs
-Ap |char* |delimcpy |char* to|char* toend|char* from \
- |char* fromend|int delim|I32* retlen
-p |void |deprecate |char* s
-Afp |OP* |die |const char* pat|...
-p |OP* |vdie |const char* pat|va_list* args
-p |OP* |die_where |char* message|STRLEN msglen
-Ap |void |dounwind |I32 cxix
-p |bool |do_aexec |SV* really|SV** mark|SV** sp
-p |bool |do_aexec5 |SV* really|SV** mark|SV** sp|int fd|int flag
-Ap |int |do_binmode |PerlIO *fp|int iotype|int mode
-p |void |do_chop |SV* asv|SV* sv
-Ap |bool |do_close |GV* gv|bool not_implicit
-p |bool |do_eof |GV* gv
-p |bool |do_exec |char* cmd
-#if !defined(WIN32)
-p |bool |do_exec3 |char* cmd|int fd|int flag
-#endif
-p |void |do_execfree
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-p |I32 |do_ipcctl |I32 optype|SV** mark|SV** sp
-p |I32 |do_ipcget |I32 optype|SV** mark|SV** sp
-p |I32 |do_msgrcv |SV** mark|SV** sp
-p |I32 |do_msgsnd |SV** mark|SV** sp
-p |I32 |do_semop |SV** mark|SV** sp
-p |I32 |do_shmio |I32 optype|SV** mark|SV** sp
-#endif
-Ap |void |do_join |SV* sv|SV* del|SV** mark|SV** sp
-p |OP* |do_kv
-Ap |bool |do_open |GV* gv|char* name|I32 len|int as_raw \
- |int rawmode|int rawperm|PerlIO* supplied_fp
-Ap |bool |do_open9 |GV *gv|char *name|I32 len|int as_raw \
- |int rawmode|int rawperm|PerlIO *supplied_fp \
- |SV *svs|I32 num
-p |void |do_pipe |SV* sv|GV* rgv|GV* wgv
-p |bool |do_print |SV* sv|PerlIO* fp
-p |OP* |do_readline
-p |I32 |do_chomp |SV* sv
-p |bool |do_seek |GV* gv|Off_t pos|int whence
-p |void |do_sprintf |SV* sv|I32 len|SV** sarg
-p |Off_t |do_sysseek |GV* gv|Off_t pos|int whence
-p |Off_t |do_tell |GV* gv
-p |I32 |do_trans |SV* sv
-p |UV |do_vecget |SV* sv|I32 offset|I32 size
-p |void |do_vecset |SV* sv
-p |void |do_vop |I32 optype|SV* sv|SV* left|SV* right
-p |OP* |dofile |OP* term
-Ap |I32 |dowantarray
-Ap |void |dump_all
-Ap |void |dump_eval
-#if defined(DUMP_FDS)
-Ap |void |dump_fds |char* s
-#endif
-Ap |void |dump_form |GV* gv
-Ap |void |gv_dump |GV* gv
-Ap |void |op_dump |OP* arg
-Ap |void |pmop_dump |PMOP* pm
-Ap |void |dump_packsubs |HV* stash
-Ap |void |dump_sub |GV* gv
-Apd |void |fbm_compile |SV* sv|U32 flags
-Apd |char* |fbm_instr |unsigned char* big|unsigned char* bigend \
- |SV* littlesv|U32 flags
-p |char* |find_script |char *scriptname|bool dosearch \
- |char **search_ext|I32 flags
-#if defined(USE_THREADS)
-p |PADOFFSET|find_threadsv|const char *name
-#endif
-p |OP* |force_list |OP* arg
-p |OP* |fold_constants |OP* arg
-Afp |char* |form |const char* pat|...
-Ap |char* |vform |const char* pat|va_list* args
-Ap |void |free_tmps
-p |OP* |gen_constant_list|OP* o
-#if !defined(HAS_GETENV_LEN)
-p |char* |getenv_len |const char* key|unsigned long *len
-#endif
-Ap |void |gp_free |GV* gv
-Ap |GP* |gp_ref |GP* gp
-Ap |GV* |gv_AVadd |GV* gv
-Ap |GV* |gv_HVadd |GV* gv
-Ap |GV* |gv_IOadd |GV* gv
-Ap |GV* |gv_autoload4 |HV* stash|const char* name|STRLEN len \
- |I32 method
-Ap |void |gv_check |HV* stash
-Ap |void |gv_efullname |SV* sv|GV* gv
-Ap |void |gv_efullname3 |SV* sv|GV* gv|const char* prefix
-Ap |void |gv_efullname4 |SV* sv|GV* gv|const char* prefix|bool keepmain
-Ap |GV* |gv_fetchfile |const char* name
-Apd |GV* |gv_fetchmeth |HV* stash|const char* name|STRLEN len \
- |I32 level
-Apd |GV* |gv_fetchmethod |HV* stash|const char* name
-Apd |GV* |gv_fetchmethod_autoload|HV* stash|const char* name \
- |I32 autoload
-Ap |GV* |gv_fetchpv |const char* name|I32 add|I32 sv_type
-Ap |void |gv_fullname |SV* sv|GV* gv
-Ap |void |gv_fullname3 |SV* sv|GV* gv|const char* prefix
-Ap |void |gv_fullname4 |SV* sv|GV* gv|const char* prefix|bool keepmain
-Ap |void |gv_init |GV* gv|HV* stash|const char* name \
- |STRLEN len|int multi
-Apd |HV* |gv_stashpv |const char* name|I32 create
-Ap |HV* |gv_stashpvn |const char* name|U32 namelen|I32 create
-Apd |HV* |gv_stashsv |SV* sv|I32 create
-Apd |void |hv_clear |HV* tb
-Ap |void |hv_delayfree_ent|HV* hv|HE* entry
-Apd |SV* |hv_delete |HV* tb|const char* key|U32 klen|I32 flags
-Apd |SV* |hv_delete_ent |HV* tb|SV* key|I32 flags|U32 hash
-Apd |bool |hv_exists |HV* tb|const char* key|U32 klen
-Apd |bool |hv_exists_ent |HV* tb|SV* key|U32 hash
-Apd |SV** |hv_fetch |HV* tb|const char* key|U32 klen|I32 lval
-Apd |HE* |hv_fetch_ent |HV* tb|SV* key|I32 lval|U32 hash
-Ap |void |hv_free_ent |HV* hv|HE* entry
-Apd |I32 |hv_iterinit |HV* tb
-Apd |char* |hv_iterkey |HE* entry|I32* retlen
-Apd |SV* |hv_iterkeysv |HE* entry
-Apd |HE* |hv_iternext |HV* tb
-Apd |SV* |hv_iternextsv |HV* hv|char** key|I32* retlen
-Apd |SV* |hv_iterval |HV* tb|HE* entry
-Ap |void |hv_ksplit |HV* hv|IV newmax
-Apd |void |hv_magic |HV* hv|GV* gv|int how
-Apd |SV** |hv_store |HV* tb|const char* key|U32 klen|SV* val \
- |U32 hash
-Apd |HE* |hv_store_ent |HV* tb|SV* key|SV* val|U32 hash
-Apd |void |hv_undef |HV* tb
-Ap |I32 |ibcmp |const char* a|const char* b|I32 len
-Ap |I32 |ibcmp_locale |const char* a|const char* b|I32 len
-p |bool |ingroup |Gid_t testgid|Uid_t effective
-p |void |init_debugger
-Ap |void |init_stacks
-p |U32 |intro_my
-Ap |char* |instr |const char* big|const char* little
-p |bool |io_close |IO* io|bool not_implicit
-p |OP* |invert |OP* cmd
-dp |bool |is_gv_magical |char *name|STRLEN len|U32 flags
-p |I32 |is_lvalue_sub
-Ap |bool |is_uni_alnum |U32 c
-Ap |bool |is_uni_alnumc |U32 c
-Ap |bool |is_uni_idfirst |U32 c
-Ap |bool |is_uni_alpha |U32 c
-Ap |bool |is_uni_ascii |U32 c
-Ap |bool |is_uni_space |U32 c
-Ap |bool |is_uni_cntrl |U32 c
-Ap |bool |is_uni_graph |U32 c
-Ap |bool |is_uni_digit |U32 c
-Ap |bool |is_uni_upper |U32 c
-Ap |bool |is_uni_lower |U32 c
-Ap |bool |is_uni_print |U32 c
-Ap |bool |is_uni_punct |U32 c
-Ap |bool |is_uni_xdigit |U32 c
-Ap |U32 |to_uni_upper |U32 c
-Ap |U32 |to_uni_title |U32 c
-Ap |U32 |to_uni_lower |U32 c
-Ap |bool |is_uni_alnum_lc|U32 c
-Ap |bool |is_uni_alnumc_lc|U32 c
-Ap |bool |is_uni_idfirst_lc|U32 c
-Ap |bool |is_uni_alpha_lc|U32 c
-Ap |bool |is_uni_ascii_lc|U32 c
-Ap |bool |is_uni_space_lc|U32 c
-Ap |bool |is_uni_cntrl_lc|U32 c
-Ap |bool |is_uni_graph_lc|U32 c
-Ap |bool |is_uni_digit_lc|U32 c
-Ap |bool |is_uni_upper_lc|U32 c
-Ap |bool |is_uni_lower_lc|U32 c
-Ap |bool |is_uni_print_lc|U32 c
-Ap |bool |is_uni_punct_lc|U32 c
-Ap |bool |is_uni_xdigit_lc|U32 c
-Ap |U32 |to_uni_upper_lc|U32 c
-Ap |U32 |to_uni_title_lc|U32 c
-Ap |U32 |to_uni_lower_lc|U32 c
-Apd |STRLEN |is_utf8_char |U8 *p
-Apd |bool |is_utf8_string |U8 *s|STRLEN len
-Ap |bool |is_utf8_alnum |U8 *p
-Ap |bool |is_utf8_alnumc |U8 *p
-Ap |bool |is_utf8_idfirst|U8 *p
-Ap |bool |is_utf8_alpha |U8 *p
-Ap |bool |is_utf8_ascii |U8 *p
-Ap |bool |is_utf8_space |U8 *p
-Ap |bool |is_utf8_cntrl |U8 *p
-Ap |bool |is_utf8_digit |U8 *p
-Ap |bool |is_utf8_graph |U8 *p
-Ap |bool |is_utf8_upper |U8 *p
-Ap |bool |is_utf8_lower |U8 *p
-Ap |bool |is_utf8_print |U8 *p
-Ap |bool |is_utf8_punct |U8 *p
-Ap |bool |is_utf8_xdigit |U8 *p
-Ap |bool |is_utf8_mark |U8 *p
-p |OP* |jmaybe |OP* arg
-p |I32 |keyword |char* d|I32 len
-Ap |void |leave_scope |I32 base
-p |void |lex_end
-p |void |lex_start |SV* line
-p |OP* |linklist |OP* o
-p |OP* |list |OP* o
-p |OP* |listkids |OP* o
-Ap |void |load_module|U32 flags|SV* name|SV* ver|...
-Ap |void |vload_module|U32 flags|SV* name|SV* ver|va_list* args
-p |OP* |localize |OP* arg|I32 lexical
-Apd |I32 |looks_like_number|SV* sv
-p |int |magic_clearenv |SV* sv|MAGIC* mg
-p |int |magic_clear_all_env|SV* sv|MAGIC* mg
-p |int |magic_clearpack|SV* sv|MAGIC* mg
-p |int |magic_clearsig |SV* sv|MAGIC* mg
-p |int |magic_existspack|SV* sv|MAGIC* mg
-p |int |magic_freeregexp|SV* sv|MAGIC* mg
-p |int |magic_get |SV* sv|MAGIC* mg
-p |int |magic_getarylen|SV* sv|MAGIC* mg
-p |int |magic_getdefelem|SV* sv|MAGIC* mg
-p |int |magic_getglob |SV* sv|MAGIC* mg
-p |int |magic_getnkeys |SV* sv|MAGIC* mg
-p |int |magic_getpack |SV* sv|MAGIC* mg
-p |int |magic_getpos |SV* sv|MAGIC* mg
-p |int |magic_getsig |SV* sv|MAGIC* mg
-p |int |magic_getsubstr|SV* sv|MAGIC* mg
-p |int |magic_gettaint |SV* sv|MAGIC* mg
-p |int |magic_getuvar |SV* sv|MAGIC* mg
-p |int |magic_getvec |SV* sv|MAGIC* mg
-p |U32 |magic_len |SV* sv|MAGIC* mg
-#if defined(USE_THREADS)
-p |int |magic_mutexfree|SV* sv|MAGIC* mg
-#endif
-p |int |magic_nextpack |SV* sv|MAGIC* mg|SV* key
-p |U32 |magic_regdata_cnt|SV* sv|MAGIC* mg
-p |int |magic_regdatum_get|SV* sv|MAGIC* mg
-p |int |magic_regdatum_set|SV* sv|MAGIC* mg
-p |int |magic_set |SV* sv|MAGIC* mg
-p |int |magic_setamagic|SV* sv|MAGIC* mg
-p |int |magic_setarylen|SV* sv|MAGIC* mg
-p |int |magic_setbm |SV* sv|MAGIC* mg
-p |int |magic_setdbline|SV* sv|MAGIC* mg
-#if defined(USE_LOCALE_COLLATE)
-p |int |magic_setcollxfrm|SV* sv|MAGIC* mg
-#endif
-p |int |magic_setdefelem|SV* sv|MAGIC* mg
-p |int |magic_setenv |SV* sv|MAGIC* mg
-p |int |magic_setfm |SV* sv|MAGIC* mg
-p |int |magic_setisa |SV* sv|MAGIC* mg
-p |int |magic_setglob |SV* sv|MAGIC* mg
-p |int |magic_setmglob |SV* sv|MAGIC* mg
-p |int |magic_setnkeys |SV* sv|MAGIC* mg
-p |int |magic_setpack |SV* sv|MAGIC* mg
-p |int |magic_setpos |SV* sv|MAGIC* mg
-p |int |magic_setsig |SV* sv|MAGIC* mg
-p |int |magic_setsubstr|SV* sv|MAGIC* mg
-p |int |magic_settaint |SV* sv|MAGIC* mg
-p |int |magic_setuvar |SV* sv|MAGIC* mg
-p |int |magic_setvec |SV* sv|MAGIC* mg
-p |int |magic_set_all_env|SV* sv|MAGIC* mg
-p |U32 |magic_sizepack |SV* sv|MAGIC* mg
-p |int |magic_wipepack |SV* sv|MAGIC* mg
-p |void |magicname |char* sym|char* name|I32 namlen
-Ap |void |markstack_grow
-#if defined(USE_LOCALE_COLLATE)
-p |char* |mem_collxfrm |const char* s|STRLEN len|STRLEN* xlen
-#endif
-Afp |SV* |mess |const char* pat|...
-Ap |SV* |vmess |const char* pat|va_list* args
-p |void |qerror |SV* err
-Apd |int |mg_clear |SV* sv
-Apd |int |mg_copy |SV* sv|SV* nsv|const char* key|I32 klen
-Apd |MAGIC* |mg_find |SV* sv|int type
-Apd |int |mg_free |SV* sv
-Apd |int |mg_get |SV* sv
-Apd |U32 |mg_length |SV* sv
-Apd |void |mg_magical |SV* sv
-Apd |int |mg_set |SV* sv
-Ap |I32 |mg_size |SV* sv
-p |OP* |mod |OP* o|I32 type
-p |int |mode_from_discipline|SV* discp
-Ap |char* |moreswitches |char* s
-p |OP* |my |OP* o
-Ap |NV |my_atof |const char *s
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
-Anp |char* |my_bcopy |const char* from|char* to|I32 len
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-Anp |char* |my_bzero |char* loc|I32 len
-#endif
-Apr |void |my_exit |U32 status
-Apr |void |my_failure_exit
-Ap |I32 |my_fflush_all
-Ap |I32 |my_lstat
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-Anp |I32 |my_memcmp |const char* s1|const char* s2|I32 len
-#endif
-#if !defined(HAS_MEMSET)
-Anp |void* |my_memset |char* loc|I32 ch|I32 len
-#endif
-#if !defined(PERL_OBJECT)
-Ap |I32 |my_pclose |PerlIO* ptr
-Ap |PerlIO*|my_popen |char* cmd|char* mode
-#endif
-Ap |void |my_setenv |char* nam|char* val
-Ap |I32 |my_stat
-#if defined(MYSWAP)
-Ap |short |my_swap |short s
-Ap |long |my_htonl |long l
-Ap |long |my_ntohl |long l
-#endif
-p |void |my_unexec
-Ap |OP* |newANONLIST |OP* o
-Ap |OP* |newANONHASH |OP* o
-Ap |OP* |newANONSUB |I32 floor|OP* proto|OP* block
-Ap |OP* |newASSIGNOP |I32 flags|OP* left|I32 optype|OP* right
-Ap |OP* |newCONDOP |I32 flags|OP* expr|OP* trueop|OP* falseop
-Apd |void |newCONSTSUB |HV* stash|char* name|SV* sv
-Ap |void |newFORM |I32 floor|OP* o|OP* block
-Ap |OP* |newFOROP |I32 flags|char* label|line_t forline \
- |OP* sclr|OP* expr|OP*block|OP*cont
-Ap |OP* |newLOGOP |I32 optype|I32 flags|OP* left|OP* right
-Ap |OP* |newLOOPEX |I32 type|OP* label
-Ap |OP* |newLOOPOP |I32 flags|I32 debuggable|OP* expr|OP* block
-Ap |OP* |newNULLLIST
-Ap |OP* |newOP |I32 optype|I32 flags
-Ap |void |newPROG |OP* o
-Ap |OP* |newRANGE |I32 flags|OP* left|OP* right
-Ap |OP* |newSLICEOP |I32 flags|OP* subscript|OP* listop
-Ap |OP* |newSTATEOP |I32 flags|char* label|OP* o
-Ap |CV* |newSUB |I32 floor|OP* o|OP* proto|OP* block
-Apd |CV* |newXS |char* name|XSUBADDR_t f|char* filename
-Apd |AV* |newAV
-Ap |OP* |newAVREF |OP* o
-Ap |OP* |newBINOP |I32 type|I32 flags|OP* first|OP* last
-Ap |OP* |newCVREF |I32 flags|OP* o
-Ap |OP* |newGVOP |I32 type|I32 flags|GV* gv
-Ap |GV* |newGVgen |char* pack
-Ap |OP* |newGVREF |I32 type|OP* o
-Ap |OP* |newHVREF |OP* o
-Apd |HV* |newHV
-Ap |HV* |newHVhv |HV* hv
-Ap |IO* |newIO
-Ap |OP* |newLISTOP |I32 type|I32 flags|OP* first|OP* last
-Ap |OP* |newPADOP |I32 type|I32 flags|SV* sv
-Ap |OP* |newPMOP |I32 type|I32 flags
-Ap |OP* |newPVOP |I32 type|I32 flags|char* pv
-Ap |SV* |newRV |SV* pref
-Apd |SV* |newRV_noinc |SV *sv
-Ap |SV* |newSV |STRLEN len
-Ap |OP* |newSVREF |OP* o
-Ap |OP* |newSVOP |I32 type|I32 flags|SV* sv
-Apd |SV* |newSViv |IV i
-Apd |SV* |newSVuv |UV u
-Apd |SV* |newSVnv |NV n
-Apd |SV* |newSVpv |const char* s|STRLEN len
-Apd |SV* |newSVpvn |const char* s|STRLEN len
-Afpd |SV* |newSVpvf |const char* pat|...
-Ap |SV* |vnewSVpvf |const char* pat|va_list* args
-Apd |SV* |newSVrv |SV* rv|const char* classname
-Apd |SV* |newSVsv |SV* old
-Ap |OP* |newUNOP |I32 type|I32 flags|OP* first
-Ap |OP* |newWHILEOP |I32 flags|I32 debuggable|LOOP* loop \
- |I32 whileline|OP* expr|OP* block|OP* cont
-
-Ap |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
-p |PerlIO*|nextargv |GV* gv
-Ap |char* |ninstr |const char* big|const char* bigend \
- |const char* little|const char* lend
-p |OP* |oopsCV |OP* o
-Ap |void |op_free |OP* arg
-p |void |package |OP* o
-p |PADOFFSET|pad_alloc |I32 optype|U32 tmptype
-p |PADOFFSET|pad_allocmy |char* name
-p |PADOFFSET|pad_findmy |char* name
-p |OP* |oopsAV |OP* o
-p |OP* |oopsHV |OP* o
-p |void |pad_leavemy |I32 fill
-Ap |SV* |pad_sv |PADOFFSET po
-p |void |pad_free |PADOFFSET po
-p |void |pad_reset
-p |void |pad_swipe |PADOFFSET po
-p |void |peep |OP* o
-#if defined(PERL_OBJECT)
-Aox |void |Perl_construct
-Aox |void |Perl_destruct
-Aox |void |Perl_free
-Aox |int |Perl_run
-Aox |int |Perl_parse |XSINIT_t xsinit \
- |int argc|char** argv|char** env
-#endif
-#if defined(USE_THREADS)
-Ap |struct perl_thread* |new_struct_thread|struct perl_thread *t
-#endif
-Ap |void |call_atexit |ATEXIT_t fn|void *ptr
-Apd |I32 |call_argv |const char* sub_name|I32 flags|char** argv
-Apd |I32 |call_method |const char* methname|I32 flags
-Apd |I32 |call_pv |const char* sub_name|I32 flags
-Apd |I32 |call_sv |SV* sv|I32 flags
-Apd |SV* |eval_pv |const char* p|I32 croak_on_error
-Apd |I32 |eval_sv |SV* sv|I32 flags
-Apd |SV* |get_sv |const char* name|I32 create
-Apd |AV* |get_av |const char* name|I32 create
-Apd |HV* |get_hv |const char* name|I32 create
-Apd |CV* |get_cv |const char* name|I32 create
-Ap |int |init_i18nl10n |int printwarn
-Ap |int |init_i18nl14n |int printwarn
-Ap |void |new_collate |char* newcoll
-Ap |void |new_ctype |char* newctype
-Ap |void |new_numeric |char* newcoll
-Ap |void |set_numeric_local
-Ap |void |set_numeric_radix
-Ap |void |set_numeric_standard
-Apd |void |require_pv |const char* pv
-p |void |pidgone |Pid_t pid|int status
-Ap |void |pmflag |U16* pmfl|int ch
-p |OP* |pmruntime |OP* pm|OP* expr|OP* repl
-p |OP* |pmtrans |OP* o|OP* expr|OP* repl
-p |OP* |pop_return
-Ap |void |pop_scope
-p |OP* |prepend_elem |I32 optype|OP* head|OP* tail
-p |void |push_return |OP* o
-Ap |void |push_scope
-p |OP* |ref |OP* o|I32 type
-p |OP* |refkids |OP* o|I32 type
-Ap |void |regdump |regexp* r
-Ap |I32 |pregexec |regexp* prog|char* stringarg \
- |char* strend|char* strbeg|I32 minend \
- |SV* screamer|U32 nosave
-Ap |void |pregfree |struct regexp* r
-Ap |regexp*|pregcomp |char* exp|char* xend|PMOP* pm
-Ap |char* |re_intuit_start|regexp* prog|SV* sv|char* strpos \
- |char* strend|U32 flags \
- |struct re_scream_pos_data_s *data
-Ap |SV* |re_intuit_string|regexp* prog
-Ap |I32 |regexec_flags |regexp* prog|char* stringarg \
- |char* strend|char* strbeg|I32 minend \
- |SV* screamer|void* data|U32 flags
-Ap |regnode*|regnext |regnode* p
-p |void |regprop |SV* sv|regnode* o
-Ap |void |repeatcpy |char* to|const char* from|I32 len|I32 count
-Ap |char* |rninstr |const char* big|const char* bigend \
- |const char* little|const char* lend
-Ap |Sighandler_t|rsignal |int i|Sighandler_t t
-p |int |rsignal_restore|int i|Sigsave_t* t
-p |int |rsignal_save |int i|Sighandler_t t1|Sigsave_t* t2
-p |Sighandler_t|rsignal_state|int i
-p |void |rxres_free |void** rsp
-p |void |rxres_restore |void** rsp|REGEXP* prx
-p |void |rxres_save |void** rsp|REGEXP* prx
-#if !defined(HAS_RENAME)
-p |I32 |same_dirent |char* a|char* b
-#endif
-Apd |char* |savepv |const char* sv
-Apd |char* |savepvn |const char* sv|I32 len
-Ap |void |savestack_grow
-Ap |void |save_aelem |AV* av|I32 idx|SV **sptr
-Ap |I32 |save_alloc |I32 size|I32 pad
-Ap |void |save_aptr |AV** aptr
-Ap |AV* |save_ary |GV* gv
-Ap |void |save_clearsv |SV** svp
-Ap |void |save_delete |HV* hv|char* key|I32 klen
-Ap |void |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|void* p
-Ap |void |save_destructor_x|DESTRUCTORFUNC_t f|void* p
-Ap |void |save_freesv |SV* sv
-p |void |save_freeop |OP* o
-Ap |void |save_freepv |char* pv
-Ap |void |save_generic_svref|SV** sptr
-Ap |void |save_generic_pvref|char** str
-Ap |void |save_gp |GV* gv|I32 empty
-Ap |HV* |save_hash |GV* gv
-Ap |void |save_helem |HV* hv|SV *key|SV **sptr
-Ap |void |save_hints
-Ap |void |save_hptr |HV** hptr
-Ap |void |save_I16 |I16* intp
-Ap |void |save_I32 |I32* intp
-Ap |void |save_I8 |I8* bytep
-Ap |void |save_int |int* intp
-Ap |void |save_item |SV* item
-Ap |void |save_iv |IV* iv
-Ap |void |save_list |SV** sarg|I32 maxsarg
-Ap |void |save_long |long* longp
-Ap |void |save_mortalizesv|SV* sv
-Ap |void |save_nogv |GV* gv
-p |void |save_op
-Ap |SV* |save_scalar |GV* gv
-Ap |void |save_pptr |char** pptr
-Ap |void |save_vptr |void* pptr
-Ap |void |save_re_context
-Ap |void |save_padsv |PADOFFSET off
-Ap |void |save_sptr |SV** sptr
-Ap |SV* |save_svref |SV** sptr
-Ap |SV** |save_threadsv |PADOFFSET i
-p |OP* |sawparens |OP* o
-p |OP* |scalar |OP* o
-p |OP* |scalarkids |OP* o
-p |OP* |scalarseq |OP* o
-p |OP* |scalarvoid |OP* o
-Ap |NV |scan_bin |char* start|STRLEN len|STRLEN* retlen
-Ap |NV |scan_hex |char* start|STRLEN len|STRLEN* retlen
-Ap |char* |scan_num |char* s|YYSTYPE *lvalp
-Ap |NV |scan_oct |char* start|STRLEN len|STRLEN* retlen
-p |OP* |scope |OP* o
-Ap |char* |screaminstr |SV* bigsv|SV* littlesv|I32 start_shift \
- |I32 end_shift|I32 *state|I32 last
-#if !defined(VMS)
-p |I32 |setenv_getix |char* nam
-#endif
-p |void |setdefout |GV* gv
-Ap |char* |sharepvn |const char* sv|I32 len|U32 hash
-p |HEK* |share_hek |const char* sv|I32 len|U32 hash
-np |Signal_t |sighandler |int sig
-Ap |SV** |stack_grow |SV** sp|SV**p|int n
-Ap |I32 |start_subparse |I32 is_format|U32 flags
-p |void |sub_crush_depth|CV* cv
-Ap |bool |sv_2bool |SV* sv
-Ap |CV* |sv_2cv |SV* sv|HV** st|GV** gvp|I32 lref
-Ap |IO* |sv_2io |SV* sv
-Ap |IV |sv_2iv |SV* sv
-Apd |SV* |sv_2mortal |SV* sv
-Ap |NV |sv_2nv |SV* sv
-Ap |char* |sv_2pv |SV* sv|STRLEN* lp
-Ap |char* |sv_2pvutf8 |SV* sv|STRLEN* lp
-Ap |char* |sv_2pvbyte |SV* sv|STRLEN* lp
-Ap |UV |sv_2uv |SV* sv
-Ap |IV |sv_iv |SV* sv
-Ap |UV |sv_uv |SV* sv
-Ap |NV |sv_nv |SV* sv
-Ap |char* |sv_pvn |SV *sv|STRLEN *len
-Ap |char* |sv_pvutf8n |SV *sv|STRLEN *len
-Ap |char* |sv_pvbyten |SV *sv|STRLEN *len
-Apd |I32 |sv_true |SV *sv
-p |void |sv_add_arena |char* ptr|U32 size|U32 flags
-Ap |int |sv_backoff |SV* sv
-Apd |SV* |sv_bless |SV* sv|HV* stash
-Afpd |void |sv_catpvf |SV* sv|const char* pat|...
-Ap |void |sv_vcatpvf |SV* sv|const char* pat|va_list* args
-Apd |void |sv_catpv |SV* sv|const char* ptr
-Apd |void |sv_catpvn |SV* sv|const char* ptr|STRLEN len
-Apd |void |sv_catsv |SV* dsv|SV* ssv
-Apd |void |sv_chop |SV* sv|char* ptr
-p |I32 |sv_clean_all
-p |void |sv_clean_objs
-Apd |void |sv_clear |SV* sv
-Apd |I32 |sv_cmp |SV* sv1|SV* sv2
-Apd |I32 |sv_cmp_locale |SV* sv1|SV* sv2
-#if defined(USE_LOCALE_COLLATE)
-Ap |char* |sv_collxfrm |SV* sv|STRLEN* nxp
-#endif
-Ap |OP* |sv_compile_2op |SV* sv|OP** startp|char* code|AV** avp
-Apd |void |sv_dec |SV* sv
-Ap |void |sv_dump |SV* sv
-Apd |bool |sv_derived_from|SV* sv|const char* name
-Apd |I32 |sv_eq |SV* sv1|SV* sv2
-Apd |void |sv_free |SV* sv
-p |void |sv_free_arenas
-Apd |char* |sv_gets |SV* sv|PerlIO* fp|I32 append
-Apd |char* |sv_grow |SV* sv|STRLEN newlen
-Apd |void |sv_inc |SV* sv
-Apd |void |sv_insert |SV* bigsv|STRLEN offset|STRLEN len \
- |char* little|STRLEN littlelen
-Apd |int |sv_isa |SV* sv|const char* name
-Apd |int |sv_isobject |SV* sv
-Apd |STRLEN |sv_len |SV* sv
-Apd |STRLEN |sv_len_utf8 |SV* sv
-Apd |void |sv_magic |SV* sv|SV* obj|int how|const char* name \
- |I32 namlen
-Apd |SV* |sv_mortalcopy |SV* oldsv
-Apd |SV* |sv_newmortal
-Ap |SV* |sv_newref |SV* sv
-Ap |char* |sv_peek |SV* sv
-Ap |void |sv_pos_u2b |SV* sv|I32* offsetp|I32* lenp
-Ap |void |sv_pos_b2u |SV* sv|I32* offsetp
-Apd |char* |sv_pvn_force |SV* sv|STRLEN* lp
-Apd |char* |sv_pvutf8n_force|SV* sv|STRLEN* lp
-Ap |char* |sv_pvbyten_force|SV* sv|STRLEN* lp
-Apd |char* |sv_reftype |SV* sv|int ob
-Apd |void |sv_replace |SV* sv|SV* nsv
-Ap |void |sv_report_used
-Ap |void |sv_reset |char* s|HV* stash
-Afpd |void |sv_setpvf |SV* sv|const char* pat|...
-Ap |void |sv_vsetpvf |SV* sv|const char* pat|va_list* args
-Apd |void |sv_setiv |SV* sv|IV num
-Apd |void |sv_setpviv |SV* sv|IV num
-Apd |void |sv_setuv |SV* sv|UV num
-Apd |void |sv_setnv |SV* sv|NV num
-Apd |SV* |sv_setref_iv |SV* rv|const char* classname|IV iv
-Apd |SV* |sv_setref_nv |SV* rv|const char* classname|NV nv
-Apd |SV* |sv_setref_pv |SV* rv|const char* classname|void* pv
-Apd |SV* |sv_setref_pvn |SV* rv|const char* classname|char* pv \
- |STRLEN n
-Apd |void |sv_setpv |SV* sv|const char* ptr
-Apd |void |sv_setpvn |SV* sv|const char* ptr|STRLEN len
-Apd |void |sv_setsv |SV* dsv|SV* ssv
-Ap |void |sv_taint |SV* sv
-Ap |bool |sv_tainted |SV* sv
-Apd |int |sv_unmagic |SV* sv|int type
-Apd |void |sv_unref |SV* sv
-Ap |void |sv_untaint |SV* sv
-Apd |bool |sv_upgrade |SV* sv|U32 mt
-Apd |void |sv_usepvn |SV* sv|char* ptr|STRLEN len
-Apd |void |sv_vcatpvfn |SV* sv|const char* pat|STRLEN patlen \
- |va_list* args|SV** svargs|I32 svmax \
- |bool *maybe_tainted
-Apd |void |sv_vsetpvfn |SV* sv|const char* pat|STRLEN patlen \
- |va_list* args|SV** svargs|I32 svmax \
- |bool *maybe_tainted
-Ap |NV |str_to_version |SV *sv
-Ap |SV* |swash_init |char* pkg|char* name|SV* listsv \
- |I32 minbits|I32 none
-Ap |UV |swash_fetch |SV *sv|U8 *ptr
-Ap |void |taint_env
-Ap |void |taint_proper |const char* f|const char* s
-Ap |UV |to_utf8_lower |U8 *p
-Ap |UV |to_utf8_upper |U8 *p
-Ap |UV |to_utf8_title |U8 *p
-#if defined(UNLINK_ALL_VERSIONS)
-Ap |I32 |unlnk |char* f
-#endif
-#if defined(USE_THREADS)
-Ap |void |unlock_condpair|void* svv
-#endif
-Ap |void |unsharepvn |const char* sv|I32 len|U32 hash
-p |void |unshare_hek |HEK* hek
-p |void |utilize |int aver|I32 floor|OP* version|OP* id|OP* arg
-ApM |U8* |utf16_to_utf8 |U8* p|U8 *d|I32 bytelen|I32 *newlen
-ApM |U8* |utf16_to_utf8_reversed|U8* p|U8 *d|I32 bytelen|I32 *newlen
-ApMd |STRLEN |utf8_length |U8* s|U8 *e
-ApMd |IV |utf8_distance |U8 *a|U8 *b
-ApMd |U8* |utf8_hop |U8 *s|I32 off
-ApMd |U8* |utf8_to_bytes |U8 *s|STRLEN *len
-ApMd |U8* |bytes_from_utf8|U8 *s|STRLEN *len|bool *is_utf8
-ApMd |U8* |bytes_to_utf8 |U8 *s|STRLEN *len
-ApMd |UV |utf8_to_uv_simple|U8 *s|STRLEN* retlen
-ApMd |UV |utf8_to_uv |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
-ApMd |U8* |uv_to_utf8 |U8 *d|UV uv
-p |void |vivify_defelem |SV* sv
-p |void |vivify_ref |SV* sv|U32 to_what
-p |I32 |wait4pid |Pid_t pid|int* statusp|int flags
-p |void |report_evil_fh |GV *gv|IO *io|I32 op
-p |void |report_uninit
-Afpd |void |warn |const char* pat|...
-Ap |void |vwarn |const char* pat|va_list* args
-Afp |void |warner |U32 err|const char* pat|...
-Ap |void |vwarner |U32 err|const char* pat|va_list* args
-p |void |watch |char** addr
-Ap |I32 |whichsig |char* sig
-p |int |yyerror |char* s
-#ifdef USE_PURE_BISON
-p |int |yylex_r |YYSTYPE *lvalp|int *lcharp
-#endif
-p |int |yylex
-p |int |yyparse
-p |int |yywarn |char* s
-#if defined(MYMALLOC)
-Ap |void |dump_mstats |char* s
-Ap |int |get_mstats |perl_mstats_t *buf|int buflen|int level
-#endif
-Anp |Malloc_t|safesysmalloc |MEM_SIZE nbytes
-Anp |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
-Anp |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
-Anp |Free_t |safesysfree |Malloc_t where
-#if defined(LEAKTEST)
-Anp |Malloc_t|safexmalloc |I32 x|MEM_SIZE size
-Anp |Malloc_t|safexcalloc |I32 x|MEM_SIZE elements|MEM_SIZE size
-Anp |Malloc_t|safexrealloc |Malloc_t where|MEM_SIZE size
-Anp |void |safexfree |Malloc_t where
-#endif
-#if defined(PERL_GLOBAL_STRUCT)
-Ap |struct perl_vars *|GetVars
-#endif
-Ap |int |runops_standard
-Ap |int |runops_debug
-#if defined(USE_THREADS)
-Ap |SV* |sv_lock |SV *sv
-#endif
-Afpd |void |sv_catpvf_mg |SV *sv|const char* pat|...
-Ap |void |sv_vcatpvf_mg |SV* sv|const char* pat|va_list* args
-Apd |void |sv_catpv_mg |SV *sv|const char *ptr
-Apd |void |sv_catpvn_mg |SV *sv|const char *ptr|STRLEN len
-Apd |void |sv_catsv_mg |SV *dstr|SV *sstr
-Afpd |void |sv_setpvf_mg |SV *sv|const char* pat|...
-Ap |void |sv_vsetpvf_mg |SV* sv|const char* pat|va_list* args
-Apd |void |sv_setiv_mg |SV *sv|IV i
-Apd |void |sv_setpviv_mg |SV *sv|IV iv
-Apd |void |sv_setuv_mg |SV *sv|UV u
-Apd |void |sv_setnv_mg |SV *sv|NV num
-Apd |void |sv_setpv_mg |SV *sv|const char *ptr
-Apd |void |sv_setpvn_mg |SV *sv|const char *ptr|STRLEN len
-Apd |void |sv_setsv_mg |SV *dstr|SV *sstr
-Apd |void |sv_usepvn_mg |SV *sv|char *ptr|STRLEN len
-Ap |MGVTBL*|get_vtbl |int vtbl_id
-p |char* |pv_display |SV *sv|char *pv|STRLEN cur|STRLEN len \
- |STRLEN pvlim
-Afp |void |dump_indent |I32 level|PerlIO *file|const char* pat|...
-Ap |void |dump_vindent |I32 level|PerlIO *file|const char* pat \
- |va_list *args
-Ap |void |do_gv_dump |I32 level|PerlIO *file|char *name|GV *sv
-Ap |void |do_gvgv_dump |I32 level|PerlIO *file|char *name|GV *sv
-Ap |void |do_hv_dump |I32 level|PerlIO *file|char *name|HV *sv
-Ap |void |do_magic_dump |I32 level|PerlIO *file|MAGIC *mg|I32 nest \
- |I32 maxnest|bool dumpops|STRLEN pvlim
-Ap |void |do_op_dump |I32 level|PerlIO *file|OP *o
-Ap |void |do_pmop_dump |I32 level|PerlIO *file|PMOP *pm
-Ap |void |do_sv_dump |I32 level|PerlIO *file|SV *sv|I32 nest \
- |I32 maxnest|bool dumpops|STRLEN pvlim
-Ap |void |magic_dump |MAGIC *mg
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-Ap |void* |default_protect|volatile JMPENV *je|int *excpt \
- |protect_body_t body|...
-Ap |void* |vdefault_protect|volatile JMPENV *je|int *excpt \
- |protect_body_t body|va_list *args
-#endif
-Ap |void |reginitcolors
-Ap |char* |sv_2pv_nolen |SV* sv
-Ap |char* |sv_2pvutf8_nolen|SV* sv
-Ap |char* |sv_2pvbyte_nolen|SV* sv
-Ap |char* |sv_pv |SV *sv
-Ap |char* |sv_pvutf8 |SV *sv
-Ap |char* |sv_pvbyte |SV *sv
-ApMd |void |sv_utf8_upgrade|SV *sv
-ApMd |bool |sv_utf8_downgrade|SV *sv|bool fail_ok
-ApMd |void |sv_utf8_encode |SV *sv
-ApM |bool |sv_utf8_decode |SV *sv
-Ap |void |sv_force_normal|SV *sv
-Ap |void |sv_add_backref |SV *tsv|SV *sv
-Ap |void |sv_del_backref |SV *sv
-Ap |void |tmps_grow |I32 n
-Apd |SV* |sv_rvweaken |SV *sv
-p |int |magic_killbackrefs|SV *sv|MAGIC *mg
-Ap |OP* |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block
-Ap |CV* |newATTRSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
-Ap |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
-p |OP * |my_attrs |OP *o|OP *attrs
-p |void |boot_core_xsutils
-#if defined(USE_ITHREADS)
-Ap |PERL_CONTEXT*|cx_dup |PERL_CONTEXT* cx|I32 ix|I32 max
-Ap |PERL_SI*|si_dup |PERL_SI* si
-Ap |ANY* |ss_dup |PerlInterpreter* proto_perl
-Ap |void* |any_dup |void* v|PerlInterpreter* proto_perl
-Ap |HE* |he_dup |HE* e|bool shared
-Ap |REGEXP*|re_dup |REGEXP* r
-Ap |PerlIO*|fp_dup |PerlIO* fp|char type
-Ap |DIR* |dirp_dup |DIR* dp
-Ap |GP* |gp_dup |GP* gp
-Ap |MAGIC* |mg_dup |MAGIC* mg
-Ap |SV* |sv_dup |SV* sstr
-#if defined(HAVE_INTERP_INTERN)
-Ap |void |sys_intern_dup |struct interp_intern* src \
- |struct interp_intern* dst
-#endif
-Ap |PTR_TBL_t*|ptr_table_new
-Ap |void* |ptr_table_fetch|PTR_TBL_t *tbl|void *sv
-Ap |void |ptr_table_store|PTR_TBL_t *tbl|void *oldsv|void *newsv
-Ap |void |ptr_table_split|PTR_TBL_t *tbl
-Ap |void |ptr_table_clear|PTR_TBL_t *tbl
-Ap |void |ptr_table_free|PTR_TBL_t *tbl
-#endif
-#if defined(HAVE_INTERP_INTERN)
-Ap |void |sys_intern_clear
-Ap |void |sys_intern_init
-#endif
-
-#if defined(PERL_OBJECT)
-protected:
-#else
-END_EXTERN_C
-#endif
-
-#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-s |I32 |avhv_index_sv |SV* sv
-s |I32 |avhv_index |AV* av|SV* sv|U32 hash
-#endif
-
-#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-s |I32 |do_trans_simple |SV *sv
-s |I32 |do_trans_count |SV *sv
-s |I32 |do_trans_complex |SV *sv
-s |I32 |do_trans_simple_utf8 |SV *sv
-s |I32 |do_trans_count_utf8 |SV *sv
-s |I32 |do_trans_complex_utf8 |SV *sv
-#endif
-
-#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-s |void |gv_init_sv |GV *gv|I32 sv_type
-#endif
-
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-s |void |hsplit |HV *hv
-s |void |hfreeentries |HV *hv
-s |void |more_he
-s |HE* |new_he
-s |void |del_he |HE *p
-s |HEK* |save_hek |const char *str|I32 len|U32 hash
-s |void |hv_magic_check |HV *hv|bool *needs_copy|bool *needs_store
-#endif
-
-#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-s |void |save_magic |I32 mgs_ix|SV *sv
-s |int |magic_methpack |SV *sv|MAGIC *mg|char *meth
-s |int |magic_methcall |SV *sv|MAGIC *mg|char *meth|I32 f \
- |int n|SV *val
-#endif
-
-#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-s |I32 |list_assignment|OP *o
-s |void |bad_type |I32 n|char *t|char *name|OP *kid
-s |void |cop_free |COP *cop
-s |OP* |modkids |OP *o|I32 type
-s |void |no_bareword_allowed|OP *o
-s |OP* |no_fh_allowed |OP *o
-s |OP* |scalarboolean |OP *o
-s |OP* |too_few_arguments|OP *o|char* name
-s |OP* |too_many_arguments|OP *o|char* name
-s |U8* |trlist_upgrade |U8** sp|U8** ep
-s |void |op_clear |OP* o
-s |void |null |OP* o
-s |PADOFFSET|pad_addlex |SV* name
-s |PADOFFSET|pad_findlex |char* name|PADOFFSET newoff|U32 seq \
- |CV* startcv|I32 cx_ix|I32 saweval|U32 flags
-s |OP* |newDEFSVOP
-s |OP* |new_logop |I32 type|I32 flags|OP **firstp|OP **otherp
-s |void |simplify_sort |OP *o
-s |bool |is_handle_constructor |OP *o|I32 argnum
-s |char* |gv_ename |GV *gv
-s |void |cv_dump |CV *cv
-s |CV* |cv_clone2 |CV *proto|CV *outside
-s |bool |scalar_mod_type|OP *o|I32 type
-s |OP * |my_kid |OP *o|OP *attrs
-s |OP * |dup_attrlist |OP *o
-s |void |apply_attrs |HV *stash|SV *target|OP *attrs
-# if defined(PL_OP_SLAB_ALLOC)
-s |void* |Slab_Alloc |int m|size_t sz
-# endif
-#endif
-
-#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
-s |void |find_beginning
-s |void |forbid_setid |char *
-s |void |incpush |char *|int|int
-s |void |init_interp
-s |void |init_ids
-s |void |init_lexer
-s |void |init_main_stash
-s |void |init_perllib
-s |void |init_postdump_symbols|int|char **|char **
-s |void |init_predump_symbols
-rs |void |my_exit_jump
-s |void |nuke_stacks
-s |void |open_script |char *|bool|SV *|int *fd
-s |void |usage |char *
-s |void |validate_suid |char *|char*|int
-# if defined(IAMSUID)
-s |int |fd_on_nosuid_fs|int fd
-# endif
-s |void* |parse_body |char **env|XSINIT_t xsinit
-s |void* |run_body |I32 oldscope
-s |void |call_body |OP *myop|int is_eval
-s |void* |call_list_body |CV *cv
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-s |void* |vparse_body |va_list args
-s |void* |vrun_body |va_list args
-s |void* |vcall_body |va_list args
-s |void* |vcall_list_body|va_list args
-#endif
-# if defined(USE_THREADS)
-s |struct perl_thread * |init_main_thread
-# endif
-#endif
-
-#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-s |void |doencodes |SV* sv|char* s|I32 len
-s |SV* |refto |SV* sv
-s |U32 |seed
-s |SV* |mul128 |SV *sv|U8 m
-s |SV* |is_an_int |char *s|STRLEN l
-s |int |div128 |SV *pnum|bool *done
-#endif
-
-#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-s |OP* |docatch |OP *o
-s |void* |docatch_body
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-s |void* |vdocatch_body |va_list args
-#endif
-s |OP* |dofindlabel |OP *o|char *label|OP **opstack|OP **oplimit
-s |void |doparseform |SV *sv
-s |I32 |dopoptoeval |I32 startingblock
-s |I32 |dopoptolabel |char *label
-s |I32 |dopoptoloop |I32 startingblock
-s |I32 |dopoptosub |I32 startingblock
-s |I32 |dopoptosub_at |PERL_CONTEXT* cxstk|I32 startingblock
-s |void |save_lines |AV *array|SV *sv
-s |OP* |doeval |int gimme|OP** startop
-s |PerlIO *|doopen_pmc |const char *name|const char *mode
-s |void |qsortsv |SV ** array|size_t num_elts|SVCOMPARE_t f
-#endif
-
-#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-s |int |do_maybe_phash |AV *ary|SV **lelem|SV **firstlelem \
- |SV **relem|SV **lastrelem
-s |void |do_oddball |HV *hash|SV **relem|SV **firstrelem
-s |CV* |get_db_sub |SV **svp|CV *cv
-s |SV* |method_common |SV* meth|U32* hashp
-#endif
-
-#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-s |OP* |doform |CV *cv|GV *gv|OP *retop
-s |int |emulate_eaccess|const char* path|Mode_t mode
-# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-s |int |dooneliner |char *cmd|char *filename
-# endif
-#endif
-
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-s |regnode*|reg |I32|I32 *
-s |regnode*|reganode |U8|U32
-s |regnode*|regatom |I32 *
-s |regnode*|regbranch |I32 *|I32
-s |void |reguni |UV|char *|STRLEN*
-s |regnode*|regclass
-s |regnode*|regclassutf8
-s |I32 |regcurly |char *
-s |regnode*|reg_node |U8
-s |regnode*|regpiece |I32 *
-s |void |reginsert |U8|regnode *
-s |void |regoptail |regnode *|regnode *
-s |void |regtail |regnode *|regnode *
-s |char*|regwhite |char *|char *
-s |char*|nextchar
-s |regnode*|dumpuntil |regnode *start|regnode *node \
- |regnode *last|SV* sv|I32 l
-s |void |put_byte |SV* sv|int c
-s |void |scan_commit |struct scan_data_t *data
-s |void |cl_anything |struct regnode_charclass_class *cl
-s |int |cl_is_anything |struct regnode_charclass_class *cl
-s |void |cl_init |struct regnode_charclass_class *cl
-s |void |cl_init_zero |struct regnode_charclass_class *cl
-s |void |cl_and |struct regnode_charclass_class *cl \
- |struct regnode_charclass_class *and_with
-s |void |cl_or |struct regnode_charclass_class *cl \
- |struct regnode_charclass_class *or_with
-s |I32 |study_chunk |regnode **scanp|I32 *deltap \
- |regnode *last|struct scan_data_t *data \
- |U32 flags
-s |I32 |add_data |I32 n|char *s
-rs |void|re_croak2 |const char* pat1|const char* pat2|...
-s |I32 |regpposixcc |I32 value
-s |void |checkposixcc
-#endif
-
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-s |I32 |regmatch |regnode *prog
-s |I32 |regrepeat |regnode *p|I32 max
-s |I32 |regrepeat_hard |regnode *p|I32 max|I32 *lp
-s |I32 |regtry |regexp *prog|char *startpos
-s |bool |reginclass |regnode *p|I32 c
-s |bool |reginclassutf8 |regnode *f|U8* p
-s |CHECKPOINT|regcppush |I32 parenfloor
-s |char*|regcppop
-s |char*|regcp_set_to |I32 ss
-s |void |cache_re |regexp *prog
-s |U8* |reghop |U8 *pos|I32 off
-s |U8* |reghopmaybe |U8 *pos|I32 off
-s |char* |find_byclass |regexp * prog|regnode *c|char *s|char *strend|char *startpos|I32 norun
-#endif
-
-#if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
-s |void |debprof |OP *o
-#endif
-
-#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-s |SV* |save_scalar_at |SV **sptr
-#endif
-
-#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-s |IV |asIV |SV* sv
-s |UV |asUV |SV* sv
-s |SV* |more_sv
-s |void |more_xiv
-s |void |more_xnv
-s |void |more_xpv
-s |void |more_xpviv
-s |void |more_xpvnv
-s |void |more_xpvcv
-s |void |more_xpvav
-s |void |more_xpvhv
-s |void |more_xpvmg
-s |void |more_xpvlv
-s |void |more_xpvbm
-s |void |more_xrv
-s |XPVIV* |new_xiv
-s |XPVNV* |new_xnv
-s |XPV* |new_xpv
-s |XPVIV* |new_xpviv
-s |XPVNV* |new_xpvnv
-s |XPVCV* |new_xpvcv
-s |XPVAV* |new_xpvav
-s |XPVHV* |new_xpvhv
-s |XPVMG* |new_xpvmg
-s |XPVLV* |new_xpvlv
-s |XPVBM* |new_xpvbm
-s |XRV* |new_xrv
-s |void |del_xiv |XPVIV* p
-s |void |del_xnv |XPVNV* p
-s |void |del_xpv |XPV* p
-s |void |del_xpviv |XPVIV* p
-s |void |del_xpvnv |XPVNV* p
-s |void |del_xpvcv |XPVCV* p
-s |void |del_xpvav |XPVAV* p
-s |void |del_xpvhv |XPVHV* p
-s |void |del_xpvmg |XPVMG* p
-s |void |del_xpvlv |XPVLV* p
-s |void |del_xpvbm |XPVBM* p
-s |void |del_xrv |XRV* p
-s |void |sv_unglob |SV* sv
-s |void |not_a_number |SV *sv
-s |I32 |visit |SVFUNC_t f
-# if defined(DEBUGGING)
-s |void |del_sv |SV *p
-# endif
-#endif
-
-#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
-s |void |check_uni
-s |void |force_next |I32 type
-s |char* |force_version |char *start
-s |char* |force_word |char *start|int token|int check_keyword \
- |int allow_pack|int allow_tick
-s |SV* |tokeq |SV *sv
-s |char* |scan_const |char *start
-s |char* |scan_formline |char *s
-s |char* |scan_heredoc |char *s
-s |char* |scan_ident |char *s|char *send|char *dest \
- |STRLEN destlen|I32 ck_uni
-s |char* |scan_inputsymbol|char *start
-s |char* |scan_pat |char *start|I32 type
-s |char* |scan_str |char *start|int keep_quoted|int keep_delims
-s |char* |scan_subst |char *start
-s |char* |scan_trans |char *start
-s |char* |scan_word |char *s|char *dest|STRLEN destlen \
- |int allow_package|STRLEN *slp
-s |char* |skipspace |char *s
-s |char* |swallow_bom |U8 *s
-s |void |checkcomma |char *s|char *name|char *what
-s |void |force_ident |char *s|int kind
-s |void |incline |char *s
-s |int |intuit_method |char *s|GV *gv
-s |int |intuit_more |char *s
-s |I32 |lop |I32 f|int x|char *s
-s |void |missingterm |char *s
-s |void |no_op |char *what|char *s
-s |void |set_csh
-s |I32 |sublex_done
-s |I32 |sublex_push
-s |I32 |sublex_start
-s |char * |filter_gets |SV *sv|PerlIO *fp|STRLEN append
-s |HV * |find_in_my_stash|char *pkgname|I32 len
-s |SV* |new_constant |char *s|STRLEN len|const char *key|SV *sv \
- |SV *pv|const char *type
-s |int |ao |int toketype
-s |void |depcom
-s |char* |incl_perldb
-#if 0
-s |I32 |utf16_textfilter|int idx|SV *sv|int maxlen
-s |I32 |utf16rev_textfilter|int idx|SV *sv|int maxlen
-#endif
-# if defined(CRIPPLED_CC)
-s |int |uni |I32 f|char *s
-# endif
-# if defined(PERL_CR_FILTER)
-s |I32 |cr_textfilter |int idx|SV *sv|int maxlen
-# endif
-#endif
-
-#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-s |SV*|isa_lookup |HV *stash|const char *name|int len|int level
-#endif
-
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-s |char* |stdize_locale |char* locs
-s |SV* |mess_alloc
-# if defined(LEAKTEST)
-s |void |xstat |int
-# endif
-#endif
-
-#if defined(PERL_OBJECT)
-};
-#endif
diff --git a/contrib/perl5/embedvar.h b/contrib/perl5/embedvar.h
deleted file mode 100644
index f4ebaa9..0000000
--- a/contrib/perl5/embedvar.h
+++ /dev/null
@@ -1,1767 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-/* (Doing namespace management portably in C is really gross.) */
-
-/*
- The following combinations of MULTIPLICITY, USE_THREADS, PERL_OBJECT
- and PERL_IMPLICIT_CONTEXT are supported:
- 1) none
- 2) MULTIPLICITY # supported for compatibility
- 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
- 4) USE_THREADS && PERL_IMPLICIT_CONTEXT
- 5) MULTIPLICITY && USE_THREADS && PERL_IMPLICIT_CONTEXT
- 6) PERL_OBJECT && PERL_IMPLICIT_CONTEXT
-
- All other combinations of these flags are errors.
-
- #3, #4, #5, and #6 are supported directly, while #2 is a special
- case of #3 (supported by redefining vTHX appropriately).
-*/
-
-#if defined(MULTIPLICITY)
-/* cases 2, 3 and 5 above */
-
-# if defined(PERL_IMPLICIT_CONTEXT)
-# define vTHX aTHX
-# else
-# define vTHX PERL_GET_INTERP
-# endif
-
-#define PL_Sv (vTHX->TSv)
-#define PL_Xpv (vTHX->TXpv)
-#define PL_av_fetch_sv (vTHX->Tav_fetch_sv)
-#define PL_bodytarget (vTHX->Tbodytarget)
-#define PL_bostr (vTHX->Tbostr)
-#define PL_chopset (vTHX->Tchopset)
-#define PL_colors (vTHX->Tcolors)
-#define PL_colorset (vTHX->Tcolorset)
-#define PL_curcop (vTHX->Tcurcop)
-#define PL_curpad (vTHX->Tcurpad)
-#define PL_curpm (vTHX->Tcurpm)
-#define PL_curstack (vTHX->Tcurstack)
-#define PL_curstackinfo (vTHX->Tcurstackinfo)
-#define PL_curstash (vTHX->Tcurstash)
-#define PL_defoutgv (vTHX->Tdefoutgv)
-#define PL_defstash (vTHX->Tdefstash)
-#define PL_delaymagic (vTHX->Tdelaymagic)
-#define PL_dirty (vTHX->Tdirty)
-#define PL_dumpindent (vTHX->Tdumpindent)
-#define PL_efloatbuf (vTHX->Tefloatbuf)
-#define PL_efloatsize (vTHX->Tefloatsize)
-#define PL_errors (vTHX->Terrors)
-#define PL_extralen (vTHX->Textralen)
-#define PL_firstgv (vTHX->Tfirstgv)
-#define PL_formtarget (vTHX->Tformtarget)
-#define PL_hv_fetch_ent_mh (vTHX->Thv_fetch_ent_mh)
-#define PL_hv_fetch_sv (vTHX->Thv_fetch_sv)
-#define PL_in_eval (vTHX->Tin_eval)
-#define PL_last_in_gv (vTHX->Tlast_in_gv)
-#define PL_lastgotoprobe (vTHX->Tlastgotoprobe)
-#define PL_lastscream (vTHX->Tlastscream)
-#define PL_localizing (vTHX->Tlocalizing)
-#define PL_mainstack (vTHX->Tmainstack)
-#define PL_markstack (vTHX->Tmarkstack)
-#define PL_markstack_max (vTHX->Tmarkstack_max)
-#define PL_markstack_ptr (vTHX->Tmarkstack_ptr)
-#define PL_maxscream (vTHX->Tmaxscream)
-#define PL_modcount (vTHX->Tmodcount)
-#define PL_na (vTHX->Tna)
-#define PL_nrs (vTHX->Tnrs)
-#define PL_ofs (vTHX->Tofs)
-#define PL_ofslen (vTHX->Tofslen)
-#define PL_op (vTHX->Top)
-#define PL_opsave (vTHX->Topsave)
-#define PL_protect (vTHX->Tprotect)
-#define PL_reg_call_cc (vTHX->Treg_call_cc)
-#define PL_reg_curpm (vTHX->Treg_curpm)
-#define PL_reg_eval_set (vTHX->Treg_eval_set)
-#define PL_reg_flags (vTHX->Treg_flags)
-#define PL_reg_ganch (vTHX->Treg_ganch)
-#define PL_reg_leftiter (vTHX->Treg_leftiter)
-#define PL_reg_magic (vTHX->Treg_magic)
-#define PL_reg_maxiter (vTHX->Treg_maxiter)
-#define PL_reg_oldcurpm (vTHX->Treg_oldcurpm)
-#define PL_reg_oldpos (vTHX->Treg_oldpos)
-#define PL_reg_oldsaved (vTHX->Treg_oldsaved)
-#define PL_reg_oldsavedlen (vTHX->Treg_oldsavedlen)
-#define PL_reg_poscache (vTHX->Treg_poscache)
-#define PL_reg_poscache_size (vTHX->Treg_poscache_size)
-#define PL_reg_re (vTHX->Treg_re)
-#define PL_reg_start_tmp (vTHX->Treg_start_tmp)
-#define PL_reg_start_tmpl (vTHX->Treg_start_tmpl)
-#define PL_reg_starttry (vTHX->Treg_starttry)
-#define PL_reg_sv (vTHX->Treg_sv)
-#define PL_reg_whilem_seen (vTHX->Treg_whilem_seen)
-#define PL_regbol (vTHX->Tregbol)
-#define PL_regcc (vTHX->Tregcc)
-#define PL_regcode (vTHX->Tregcode)
-#define PL_regcomp_parse (vTHX->Tregcomp_parse)
-#define PL_regcomp_rx (vTHX->Tregcomp_rx)
-#define PL_regcompp (vTHX->Tregcompp)
-#define PL_regdata (vTHX->Tregdata)
-#define PL_regdummy (vTHX->Tregdummy)
-#define PL_regendp (vTHX->Tregendp)
-#define PL_regeol (vTHX->Tregeol)
-#define PL_regexecp (vTHX->Tregexecp)
-#define PL_regflags (vTHX->Tregflags)
-#define PL_regfree (vTHX->Tregfree)
-#define PL_regindent (vTHX->Tregindent)
-#define PL_reginput (vTHX->Treginput)
-#define PL_regint_start (vTHX->Tregint_start)
-#define PL_regint_string (vTHX->Tregint_string)
-#define PL_reginterp_cnt (vTHX->Treginterp_cnt)
-#define PL_reglastparen (vTHX->Treglastparen)
-#define PL_regnarrate (vTHX->Tregnarrate)
-#define PL_regnaughty (vTHX->Tregnaughty)
-#define PL_regnpar (vTHX->Tregnpar)
-#define PL_regprecomp (vTHX->Tregprecomp)
-#define PL_regprev (vTHX->Tregprev)
-#define PL_regprogram (vTHX->Tregprogram)
-#define PL_regsawback (vTHX->Tregsawback)
-#define PL_regseen (vTHX->Tregseen)
-#define PL_regsize (vTHX->Tregsize)
-#define PL_regstartp (vTHX->Tregstartp)
-#define PL_regtill (vTHX->Tregtill)
-#define PL_regxend (vTHX->Tregxend)
-#define PL_restartop (vTHX->Trestartop)
-#define PL_retstack (vTHX->Tretstack)
-#define PL_retstack_ix (vTHX->Tretstack_ix)
-#define PL_retstack_max (vTHX->Tretstack_max)
-#define PL_rs (vTHX->Trs)
-#define PL_savestack (vTHX->Tsavestack)
-#define PL_savestack_ix (vTHX->Tsavestack_ix)
-#define PL_savestack_max (vTHX->Tsavestack_max)
-#define PL_scopestack (vTHX->Tscopestack)
-#define PL_scopestack_ix (vTHX->Tscopestack_ix)
-#define PL_scopestack_max (vTHX->Tscopestack_max)
-#define PL_screamfirst (vTHX->Tscreamfirst)
-#define PL_screamnext (vTHX->Tscreamnext)
-#define PL_secondgv (vTHX->Tsecondgv)
-#define PL_seen_evals (vTHX->Tseen_evals)
-#define PL_seen_zerolen (vTHX->Tseen_zerolen)
-#define PL_sortcop (vTHX->Tsortcop)
-#define PL_sortcxix (vTHX->Tsortcxix)
-#define PL_sortstash (vTHX->Tsortstash)
-#define PL_stack_base (vTHX->Tstack_base)
-#define PL_stack_max (vTHX->Tstack_max)
-#define PL_stack_sp (vTHX->Tstack_sp)
-#define PL_start_env (vTHX->Tstart_env)
-#define PL_statbuf (vTHX->Tstatbuf)
-#define PL_statcache (vTHX->Tstatcache)
-#define PL_statgv (vTHX->Tstatgv)
-#define PL_statname (vTHX->Tstatname)
-#define PL_tainted (vTHX->Ttainted)
-#define PL_timesbuf (vTHX->Ttimesbuf)
-#define PL_tmps_floor (vTHX->Ttmps_floor)
-#define PL_tmps_ix (vTHX->Ttmps_ix)
-#define PL_tmps_max (vTHX->Ttmps_max)
-#define PL_tmps_stack (vTHX->Ttmps_stack)
-#define PL_top_env (vTHX->Ttop_env)
-#define PL_toptarget (vTHX->Ttoptarget)
-#define PL_watchaddr (vTHX->Twatchaddr)
-#define PL_watchok (vTHX->Twatchok)
-
-# if defined(PERL_OBJECT)
-# include "error: PERL_OBJECT + MULTIPLICITY don't go together"
-# endif
-
-# if defined(USE_THREADS)
-/* case 5 above */
-
-#define PL_Argv (PERL_GET_INTERP->IArgv)
-#define PL_Cmd (PERL_GET_INTERP->ICmd)
-#define PL_DBcv (PERL_GET_INTERP->IDBcv)
-#define PL_DBgv (PERL_GET_INTERP->IDBgv)
-#define PL_DBline (PERL_GET_INTERP->IDBline)
-#define PL_DBsignal (PERL_GET_INTERP->IDBsignal)
-#define PL_DBsingle (PERL_GET_INTERP->IDBsingle)
-#define PL_DBsub (PERL_GET_INTERP->IDBsub)
-#define PL_DBtrace (PERL_GET_INTERP->IDBtrace)
-#define PL_Dir (PERL_GET_INTERP->IDir)
-#define PL_Env (PERL_GET_INTERP->IEnv)
-#define PL_LIO (PERL_GET_INTERP->ILIO)
-#define PL_Mem (PERL_GET_INTERP->IMem)
-#define PL_MemParse (PERL_GET_INTERP->IMemParse)
-#define PL_MemShared (PERL_GET_INTERP->IMemShared)
-#define PL_Proc (PERL_GET_INTERP->IProc)
-#define PL_Sock (PERL_GET_INTERP->ISock)
-#define PL_StdIO (PERL_GET_INTERP->IStdIO)
-#define PL_amagic_generation (PERL_GET_INTERP->Iamagic_generation)
-#define PL_an (PERL_GET_INTERP->Ian)
-#define PL_argvgv (PERL_GET_INTERP->Iargvgv)
-#define PL_argvout_stack (PERL_GET_INTERP->Iargvout_stack)
-#define PL_argvoutgv (PERL_GET_INTERP->Iargvoutgv)
-#define PL_basetime (PERL_GET_INTERP->Ibasetime)
-#define PL_beginav (PERL_GET_INTERP->Ibeginav)
-#define PL_beginav_save (PERL_GET_INTERP->Ibeginav_save)
-#define PL_bitcount (PERL_GET_INTERP->Ibitcount)
-#define PL_bufend (PERL_GET_INTERP->Ibufend)
-#define PL_bufptr (PERL_GET_INTERP->Ibufptr)
-#define PL_checkav (PERL_GET_INTERP->Icheckav)
-#define PL_collation_ix (PERL_GET_INTERP->Icollation_ix)
-#define PL_collation_name (PERL_GET_INTERP->Icollation_name)
-#define PL_collation_standard (PERL_GET_INTERP->Icollation_standard)
-#define PL_collxfrm_base (PERL_GET_INTERP->Icollxfrm_base)
-#define PL_collxfrm_mult (PERL_GET_INTERP->Icollxfrm_mult)
-#define PL_compcv (PERL_GET_INTERP->Icompcv)
-#define PL_compiling (PERL_GET_INTERP->Icompiling)
-#define PL_comppad (PERL_GET_INTERP->Icomppad)
-#define PL_comppad_name (PERL_GET_INTERP->Icomppad_name)
-#define PL_comppad_name_fill (PERL_GET_INTERP->Icomppad_name_fill)
-#define PL_comppad_name_floor (PERL_GET_INTERP->Icomppad_name_floor)
-#define PL_cop_seqmax (PERL_GET_INTERP->Icop_seqmax)
-#define PL_copline (PERL_GET_INTERP->Icopline)
-#define PL_cred_mutex (PERL_GET_INTERP->Icred_mutex)
-#define PL_cryptseen (PERL_GET_INTERP->Icryptseen)
-#define PL_cshlen (PERL_GET_INTERP->Icshlen)
-#define PL_cshname (PERL_GET_INTERP->Icshname)
-#define PL_curcopdb (PERL_GET_INTERP->Icurcopdb)
-#define PL_curstname (PERL_GET_INTERP->Icurstname)
-#define PL_curthr (PERL_GET_INTERP->Icurthr)
-#define PL_dbargs (PERL_GET_INTERP->Idbargs)
-#define PL_debstash (PERL_GET_INTERP->Idebstash)
-#define PL_debug (PERL_GET_INTERP->Idebug)
-#define PL_defgv (PERL_GET_INTERP->Idefgv)
-#define PL_diehook (PERL_GET_INTERP->Idiehook)
-#define PL_doextract (PERL_GET_INTERP->Idoextract)
-#define PL_doswitches (PERL_GET_INTERP->Idoswitches)
-#define PL_dowarn (PERL_GET_INTERP->Idowarn)
-#define PL_dummy1_bincompat (PERL_GET_INTERP->Idummy1_bincompat)
-#define PL_e_script (PERL_GET_INTERP->Ie_script)
-#define PL_egid (PERL_GET_INTERP->Iegid)
-#define PL_endav (PERL_GET_INTERP->Iendav)
-#define PL_envgv (PERL_GET_INTERP->Ienvgv)
-#define PL_errgv (PERL_GET_INTERP->Ierrgv)
-#define PL_error_count (PERL_GET_INTERP->Ierror_count)
-#define PL_euid (PERL_GET_INTERP->Ieuid)
-#define PL_eval_cond (PERL_GET_INTERP->Ieval_cond)
-#define PL_eval_mutex (PERL_GET_INTERP->Ieval_mutex)
-#define PL_eval_owner (PERL_GET_INTERP->Ieval_owner)
-#define PL_eval_root (PERL_GET_INTERP->Ieval_root)
-#define PL_eval_start (PERL_GET_INTERP->Ieval_start)
-#define PL_evalseq (PERL_GET_INTERP->Ievalseq)
-#define PL_exit_flags (PERL_GET_INTERP->Iexit_flags)
-#define PL_exitlist (PERL_GET_INTERP->Iexitlist)
-#define PL_exitlistlen (PERL_GET_INTERP->Iexitlistlen)
-#define PL_expect (PERL_GET_INTERP->Iexpect)
-#define PL_fdpid (PERL_GET_INTERP->Ifdpid)
-#define PL_fdpid_mutex (PERL_GET_INTERP->Ifdpid_mutex)
-#define PL_filemode (PERL_GET_INTERP->Ifilemode)
-#define PL_forkprocess (PERL_GET_INTERP->Iforkprocess)
-#define PL_formfeed (PERL_GET_INTERP->Iformfeed)
-#define PL_generation (PERL_GET_INTERP->Igeneration)
-#define PL_gensym (PERL_GET_INTERP->Igensym)
-#define PL_gid (PERL_GET_INTERP->Igid)
-#define PL_glob_index (PERL_GET_INTERP->Iglob_index)
-#define PL_globalstash (PERL_GET_INTERP->Iglobalstash)
-#define PL_he_arenaroot (PERL_GET_INTERP->Ihe_arenaroot)
-#define PL_he_root (PERL_GET_INTERP->Ihe_root)
-#define PL_hintgv (PERL_GET_INTERP->Ihintgv)
-#define PL_hints (PERL_GET_INTERP->Ihints)
-#define PL_in_clean_all (PERL_GET_INTERP->Iin_clean_all)
-#define PL_in_clean_objs (PERL_GET_INTERP->Iin_clean_objs)
-#define PL_in_my (PERL_GET_INTERP->Iin_my)
-#define PL_in_my_stash (PERL_GET_INTERP->Iin_my_stash)
-#define PL_incgv (PERL_GET_INTERP->Iincgv)
-#define PL_initav (PERL_GET_INTERP->Iinitav)
-#define PL_inplace (PERL_GET_INTERP->Iinplace)
-#define PL_last_lop (PERL_GET_INTERP->Ilast_lop)
-#define PL_last_lop_op (PERL_GET_INTERP->Ilast_lop_op)
-#define PL_last_swash_hv (PERL_GET_INTERP->Ilast_swash_hv)
-#define PL_last_swash_key (PERL_GET_INTERP->Ilast_swash_key)
-#define PL_last_swash_klen (PERL_GET_INTERP->Ilast_swash_klen)
-#define PL_last_swash_slen (PERL_GET_INTERP->Ilast_swash_slen)
-#define PL_last_swash_tmps (PERL_GET_INTERP->Ilast_swash_tmps)
-#define PL_last_uni (PERL_GET_INTERP->Ilast_uni)
-#define PL_lastfd (PERL_GET_INTERP->Ilastfd)
-#define PL_laststatval (PERL_GET_INTERP->Ilaststatval)
-#define PL_laststype (PERL_GET_INTERP->Ilaststype)
-#define PL_lex_brackets (PERL_GET_INTERP->Ilex_brackets)
-#define PL_lex_brackstack (PERL_GET_INTERP->Ilex_brackstack)
-#define PL_lex_casemods (PERL_GET_INTERP->Ilex_casemods)
-#define PL_lex_casestack (PERL_GET_INTERP->Ilex_casestack)
-#define PL_lex_defer (PERL_GET_INTERP->Ilex_defer)
-#define PL_lex_dojoin (PERL_GET_INTERP->Ilex_dojoin)
-#define PL_lex_expect (PERL_GET_INTERP->Ilex_expect)
-#define PL_lex_formbrack (PERL_GET_INTERP->Ilex_formbrack)
-#define PL_lex_inpat (PERL_GET_INTERP->Ilex_inpat)
-#define PL_lex_inwhat (PERL_GET_INTERP->Ilex_inwhat)
-#define PL_lex_op (PERL_GET_INTERP->Ilex_op)
-#define PL_lex_repl (PERL_GET_INTERP->Ilex_repl)
-#define PL_lex_starts (PERL_GET_INTERP->Ilex_starts)
-#define PL_lex_state (PERL_GET_INTERP->Ilex_state)
-#define PL_lex_stuff (PERL_GET_INTERP->Ilex_stuff)
-#define PL_lineary (PERL_GET_INTERP->Ilineary)
-#define PL_linestart (PERL_GET_INTERP->Ilinestart)
-#define PL_linestr (PERL_GET_INTERP->Ilinestr)
-#define PL_localpatches (PERL_GET_INTERP->Ilocalpatches)
-#define PL_main_cv (PERL_GET_INTERP->Imain_cv)
-#define PL_main_root (PERL_GET_INTERP->Imain_root)
-#define PL_main_start (PERL_GET_INTERP->Imain_start)
-#define PL_max_intro_pending (PERL_GET_INTERP->Imax_intro_pending)
-#define PL_maxo (PERL_GET_INTERP->Imaxo)
-#define PL_maxsysfd (PERL_GET_INTERP->Imaxsysfd)
-#define PL_mess_sv (PERL_GET_INTERP->Imess_sv)
-#define PL_min_intro_pending (PERL_GET_INTERP->Imin_intro_pending)
-#define PL_minus_F (PERL_GET_INTERP->Iminus_F)
-#define PL_minus_a (PERL_GET_INTERP->Iminus_a)
-#define PL_minus_c (PERL_GET_INTERP->Iminus_c)
-#define PL_minus_l (PERL_GET_INTERP->Iminus_l)
-#define PL_minus_n (PERL_GET_INTERP->Iminus_n)
-#define PL_minus_p (PERL_GET_INTERP->Iminus_p)
-#define PL_modglobal (PERL_GET_INTERP->Imodglobal)
-#define PL_multi_close (PERL_GET_INTERP->Imulti_close)
-#define PL_multi_end (PERL_GET_INTERP->Imulti_end)
-#define PL_multi_open (PERL_GET_INTERP->Imulti_open)
-#define PL_multi_start (PERL_GET_INTERP->Imulti_start)
-#define PL_multiline (PERL_GET_INTERP->Imultiline)
-#define PL_nexttoke (PERL_GET_INTERP->Inexttoke)
-#define PL_nexttype (PERL_GET_INTERP->Inexttype)
-#define PL_nextval (PERL_GET_INTERP->Inextval)
-#define PL_nice_chunk (PERL_GET_INTERP->Inice_chunk)
-#define PL_nice_chunk_size (PERL_GET_INTERP->Inice_chunk_size)
-#define PL_nomemok (PERL_GET_INTERP->Inomemok)
-#define PL_nthreads (PERL_GET_INTERP->Inthreads)
-#define PL_nthreads_cond (PERL_GET_INTERP->Inthreads_cond)
-#define PL_nullstash (PERL_GET_INTERP->Inullstash)
-#define PL_numeric_local (PERL_GET_INTERP->Inumeric_local)
-#define PL_numeric_name (PERL_GET_INTERP->Inumeric_name)
-#define PL_numeric_radix_sv (PERL_GET_INTERP->Inumeric_radix_sv)
-#define PL_numeric_standard (PERL_GET_INTERP->Inumeric_standard)
-#define PL_ofmt (PERL_GET_INTERP->Iofmt)
-#define PL_oldbufptr (PERL_GET_INTERP->Ioldbufptr)
-#define PL_oldname (PERL_GET_INTERP->Ioldname)
-#define PL_oldoldbufptr (PERL_GET_INTERP->Ioldoldbufptr)
-#define PL_op_mask (PERL_GET_INTERP->Iop_mask)
-#define PL_op_seqmax (PERL_GET_INTERP->Iop_seqmax)
-#define PL_origalen (PERL_GET_INTERP->Iorigalen)
-#define PL_origargc (PERL_GET_INTERP->Iorigargc)
-#define PL_origargv (PERL_GET_INTERP->Iorigargv)
-#define PL_origenviron (PERL_GET_INTERP->Iorigenviron)
-#define PL_origfilename (PERL_GET_INTERP->Iorigfilename)
-#define PL_ors (PERL_GET_INTERP->Iors)
-#define PL_orslen (PERL_GET_INTERP->Iorslen)
-#define PL_osname (PERL_GET_INTERP->Iosname)
-#define PL_pad_reset_pending (PERL_GET_INTERP->Ipad_reset_pending)
-#define PL_padix (PERL_GET_INTERP->Ipadix)
-#define PL_padix_floor (PERL_GET_INTERP->Ipadix_floor)
-#define PL_patchlevel (PERL_GET_INTERP->Ipatchlevel)
-#define PL_pending_ident (PERL_GET_INTERP->Ipending_ident)
-#define PL_perl_destruct_level (PERL_GET_INTERP->Iperl_destruct_level)
-#define PL_perldb (PERL_GET_INTERP->Iperldb)
-#define PL_pidstatus (PERL_GET_INTERP->Ipidstatus)
-#define PL_preambleav (PERL_GET_INTERP->Ipreambleav)
-#define PL_preambled (PERL_GET_INTERP->Ipreambled)
-#define PL_preprocess (PERL_GET_INTERP->Ipreprocess)
-#define PL_profiledata (PERL_GET_INTERP->Iprofiledata)
-#define PL_psig_name (PERL_GET_INTERP->Ipsig_name)
-#define PL_psig_ptr (PERL_GET_INTERP->Ipsig_ptr)
-#define PL_ptr_table (PERL_GET_INTERP->Iptr_table)
-#define PL_replgv (PERL_GET_INTERP->Ireplgv)
-#define PL_rsfp (PERL_GET_INTERP->Irsfp)
-#define PL_rsfp_filters (PERL_GET_INTERP->Irsfp_filters)
-#define PL_runops (PERL_GET_INTERP->Irunops)
-#define PL_sawampersand (PERL_GET_INTERP->Isawampersand)
-#define PL_sh_path (PERL_GET_INTERP->Ish_path)
-#define PL_sighandlerp (PERL_GET_INTERP->Isighandlerp)
-#define PL_splitstr (PERL_GET_INTERP->Isplitstr)
-#define PL_srand_called (PERL_GET_INTERP->Isrand_called)
-#define PL_statusvalue (PERL_GET_INTERP->Istatusvalue)
-#define PL_statusvalue_vms (PERL_GET_INTERP->Istatusvalue_vms)
-#define PL_stderrgv (PERL_GET_INTERP->Istderrgv)
-#define PL_stdingv (PERL_GET_INTERP->Istdingv)
-#define PL_strtab (PERL_GET_INTERP->Istrtab)
-#define PL_strtab_mutex (PERL_GET_INTERP->Istrtab_mutex)
-#define PL_sub_generation (PERL_GET_INTERP->Isub_generation)
-#define PL_sublex_info (PERL_GET_INTERP->Isublex_info)
-#define PL_subline (PERL_GET_INTERP->Isubline)
-#define PL_subname (PERL_GET_INTERP->Isubname)
-#define PL_sv_arenaroot (PERL_GET_INTERP->Isv_arenaroot)
-#define PL_sv_count (PERL_GET_INTERP->Isv_count)
-#define PL_sv_lock_mutex (PERL_GET_INTERP->Isv_lock_mutex)
-#define PL_sv_mutex (PERL_GET_INTERP->Isv_mutex)
-#define PL_sv_no (PERL_GET_INTERP->Isv_no)
-#define PL_sv_objcount (PERL_GET_INTERP->Isv_objcount)
-#define PL_sv_root (PERL_GET_INTERP->Isv_root)
-#define PL_sv_undef (PERL_GET_INTERP->Isv_undef)
-#define PL_sv_yes (PERL_GET_INTERP->Isv_yes)
-#define PL_svref_mutex (PERL_GET_INTERP->Isvref_mutex)
-#define PL_sys_intern (PERL_GET_INTERP->Isys_intern)
-#define PL_tainting (PERL_GET_INTERP->Itainting)
-#define PL_threadnum (PERL_GET_INTERP->Ithreadnum)
-#define PL_threads_mutex (PERL_GET_INTERP->Ithreads_mutex)
-#define PL_threadsv_names (PERL_GET_INTERP->Ithreadsv_names)
-#define PL_thrsv (PERL_GET_INTERP->Ithrsv)
-#define PL_tokenbuf (PERL_GET_INTERP->Itokenbuf)
-#define PL_uid (PERL_GET_INTERP->Iuid)
-#define PL_unsafe (PERL_GET_INTERP->Iunsafe)
-#define PL_utf8_alnum (PERL_GET_INTERP->Iutf8_alnum)
-#define PL_utf8_alnumc (PERL_GET_INTERP->Iutf8_alnumc)
-#define PL_utf8_alpha (PERL_GET_INTERP->Iutf8_alpha)
-#define PL_utf8_ascii (PERL_GET_INTERP->Iutf8_ascii)
-#define PL_utf8_cntrl (PERL_GET_INTERP->Iutf8_cntrl)
-#define PL_utf8_digit (PERL_GET_INTERP->Iutf8_digit)
-#define PL_utf8_graph (PERL_GET_INTERP->Iutf8_graph)
-#define PL_utf8_lower (PERL_GET_INTERP->Iutf8_lower)
-#define PL_utf8_mark (PERL_GET_INTERP->Iutf8_mark)
-#define PL_utf8_print (PERL_GET_INTERP->Iutf8_print)
-#define PL_utf8_punct (PERL_GET_INTERP->Iutf8_punct)
-#define PL_utf8_space (PERL_GET_INTERP->Iutf8_space)
-#define PL_utf8_tolower (PERL_GET_INTERP->Iutf8_tolower)
-#define PL_utf8_totitle (PERL_GET_INTERP->Iutf8_totitle)
-#define PL_utf8_toupper (PERL_GET_INTERP->Iutf8_toupper)
-#define PL_utf8_upper (PERL_GET_INTERP->Iutf8_upper)
-#define PL_utf8_xdigit (PERL_GET_INTERP->Iutf8_xdigit)
-#define PL_uudmap (PERL_GET_INTERP->Iuudmap)
-#define PL_warnhook (PERL_GET_INTERP->Iwarnhook)
-#define PL_widesyscalls (PERL_GET_INTERP->Iwidesyscalls)
-#define PL_xiv_arenaroot (PERL_GET_INTERP->Ixiv_arenaroot)
-#define PL_xiv_root (PERL_GET_INTERP->Ixiv_root)
-#define PL_xnv_arenaroot (PERL_GET_INTERP->Ixnv_arenaroot)
-#define PL_xnv_root (PERL_GET_INTERP->Ixnv_root)
-#define PL_xpv_arenaroot (PERL_GET_INTERP->Ixpv_arenaroot)
-#define PL_xpv_root (PERL_GET_INTERP->Ixpv_root)
-#define PL_xpvav_arenaroot (PERL_GET_INTERP->Ixpvav_arenaroot)
-#define PL_xpvav_root (PERL_GET_INTERP->Ixpvav_root)
-#define PL_xpvbm_arenaroot (PERL_GET_INTERP->Ixpvbm_arenaroot)
-#define PL_xpvbm_root (PERL_GET_INTERP->Ixpvbm_root)
-#define PL_xpvcv_arenaroot (PERL_GET_INTERP->Ixpvcv_arenaroot)
-#define PL_xpvcv_root (PERL_GET_INTERP->Ixpvcv_root)
-#define PL_xpvhv_arenaroot (PERL_GET_INTERP->Ixpvhv_arenaroot)
-#define PL_xpvhv_root (PERL_GET_INTERP->Ixpvhv_root)
-#define PL_xpviv_arenaroot (PERL_GET_INTERP->Ixpviv_arenaroot)
-#define PL_xpviv_root (PERL_GET_INTERP->Ixpviv_root)
-#define PL_xpvlv_arenaroot (PERL_GET_INTERP->Ixpvlv_arenaroot)
-#define PL_xpvlv_root (PERL_GET_INTERP->Ixpvlv_root)
-#define PL_xpvmg_arenaroot (PERL_GET_INTERP->Ixpvmg_arenaroot)
-#define PL_xpvmg_root (PERL_GET_INTERP->Ixpvmg_root)
-#define PL_xpvnv_arenaroot (PERL_GET_INTERP->Ixpvnv_arenaroot)
-#define PL_xpvnv_root (PERL_GET_INTERP->Ixpvnv_root)
-#define PL_xrv_arenaroot (PERL_GET_INTERP->Ixrv_arenaroot)
-#define PL_xrv_root (PERL_GET_INTERP->Ixrv_root)
-#define PL_yychar (PERL_GET_INTERP->Iyychar)
-#define PL_yydebug (PERL_GET_INTERP->Iyydebug)
-#define PL_yyerrflag (PERL_GET_INTERP->Iyyerrflag)
-#define PL_yylval (PERL_GET_INTERP->Iyylval)
-#define PL_yynerrs (PERL_GET_INTERP->Iyynerrs)
-#define PL_yyval (PERL_GET_INTERP->Iyyval)
-
-# else /* !USE_THREADS */
-/* cases 2 and 3 above */
-
-#define PL_Argv (vTHX->IArgv)
-#define PL_Cmd (vTHX->ICmd)
-#define PL_DBcv (vTHX->IDBcv)
-#define PL_DBgv (vTHX->IDBgv)
-#define PL_DBline (vTHX->IDBline)
-#define PL_DBsignal (vTHX->IDBsignal)
-#define PL_DBsingle (vTHX->IDBsingle)
-#define PL_DBsub (vTHX->IDBsub)
-#define PL_DBtrace (vTHX->IDBtrace)
-#define PL_Dir (vTHX->IDir)
-#define PL_Env (vTHX->IEnv)
-#define PL_LIO (vTHX->ILIO)
-#define PL_Mem (vTHX->IMem)
-#define PL_MemParse (vTHX->IMemParse)
-#define PL_MemShared (vTHX->IMemShared)
-#define PL_Proc (vTHX->IProc)
-#define PL_Sock (vTHX->ISock)
-#define PL_StdIO (vTHX->IStdIO)
-#define PL_amagic_generation (vTHX->Iamagic_generation)
-#define PL_an (vTHX->Ian)
-#define PL_argvgv (vTHX->Iargvgv)
-#define PL_argvout_stack (vTHX->Iargvout_stack)
-#define PL_argvoutgv (vTHX->Iargvoutgv)
-#define PL_basetime (vTHX->Ibasetime)
-#define PL_beginav (vTHX->Ibeginav)
-#define PL_beginav_save (vTHX->Ibeginav_save)
-#define PL_bitcount (vTHX->Ibitcount)
-#define PL_bufend (vTHX->Ibufend)
-#define PL_bufptr (vTHX->Ibufptr)
-#define PL_checkav (vTHX->Icheckav)
-#define PL_collation_ix (vTHX->Icollation_ix)
-#define PL_collation_name (vTHX->Icollation_name)
-#define PL_collation_standard (vTHX->Icollation_standard)
-#define PL_collxfrm_base (vTHX->Icollxfrm_base)
-#define PL_collxfrm_mult (vTHX->Icollxfrm_mult)
-#define PL_compcv (vTHX->Icompcv)
-#define PL_compiling (vTHX->Icompiling)
-#define PL_comppad (vTHX->Icomppad)
-#define PL_comppad_name (vTHX->Icomppad_name)
-#define PL_comppad_name_fill (vTHX->Icomppad_name_fill)
-#define PL_comppad_name_floor (vTHX->Icomppad_name_floor)
-#define PL_cop_seqmax (vTHX->Icop_seqmax)
-#define PL_copline (vTHX->Icopline)
-#define PL_cred_mutex (vTHX->Icred_mutex)
-#define PL_cryptseen (vTHX->Icryptseen)
-#define PL_cshlen (vTHX->Icshlen)
-#define PL_cshname (vTHX->Icshname)
-#define PL_curcopdb (vTHX->Icurcopdb)
-#define PL_curstname (vTHX->Icurstname)
-#define PL_curthr (vTHX->Icurthr)
-#define PL_dbargs (vTHX->Idbargs)
-#define PL_debstash (vTHX->Idebstash)
-#define PL_debug (vTHX->Idebug)
-#define PL_defgv (vTHX->Idefgv)
-#define PL_diehook (vTHX->Idiehook)
-#define PL_doextract (vTHX->Idoextract)
-#define PL_doswitches (vTHX->Idoswitches)
-#define PL_dowarn (vTHX->Idowarn)
-#define PL_dummy1_bincompat (vTHX->Idummy1_bincompat)
-#define PL_e_script (vTHX->Ie_script)
-#define PL_egid (vTHX->Iegid)
-#define PL_endav (vTHX->Iendav)
-#define PL_envgv (vTHX->Ienvgv)
-#define PL_errgv (vTHX->Ierrgv)
-#define PL_error_count (vTHX->Ierror_count)
-#define PL_euid (vTHX->Ieuid)
-#define PL_eval_cond (vTHX->Ieval_cond)
-#define PL_eval_mutex (vTHX->Ieval_mutex)
-#define PL_eval_owner (vTHX->Ieval_owner)
-#define PL_eval_root (vTHX->Ieval_root)
-#define PL_eval_start (vTHX->Ieval_start)
-#define PL_evalseq (vTHX->Ievalseq)
-#define PL_exit_flags (vTHX->Iexit_flags)
-#define PL_exitlist (vTHX->Iexitlist)
-#define PL_exitlistlen (vTHX->Iexitlistlen)
-#define PL_expect (vTHX->Iexpect)
-#define PL_fdpid (vTHX->Ifdpid)
-#define PL_fdpid_mutex (vTHX->Ifdpid_mutex)
-#define PL_filemode (vTHX->Ifilemode)
-#define PL_forkprocess (vTHX->Iforkprocess)
-#define PL_formfeed (vTHX->Iformfeed)
-#define PL_generation (vTHX->Igeneration)
-#define PL_gensym (vTHX->Igensym)
-#define PL_gid (vTHX->Igid)
-#define PL_glob_index (vTHX->Iglob_index)
-#define PL_globalstash (vTHX->Iglobalstash)
-#define PL_he_arenaroot (vTHX->Ihe_arenaroot)
-#define PL_he_root (vTHX->Ihe_root)
-#define PL_hintgv (vTHX->Ihintgv)
-#define PL_hints (vTHX->Ihints)
-#define PL_in_clean_all (vTHX->Iin_clean_all)
-#define PL_in_clean_objs (vTHX->Iin_clean_objs)
-#define PL_in_my (vTHX->Iin_my)
-#define PL_in_my_stash (vTHX->Iin_my_stash)
-#define PL_incgv (vTHX->Iincgv)
-#define PL_initav (vTHX->Iinitav)
-#define PL_inplace (vTHX->Iinplace)
-#define PL_last_lop (vTHX->Ilast_lop)
-#define PL_last_lop_op (vTHX->Ilast_lop_op)
-#define PL_last_swash_hv (vTHX->Ilast_swash_hv)
-#define PL_last_swash_key (vTHX->Ilast_swash_key)
-#define PL_last_swash_klen (vTHX->Ilast_swash_klen)
-#define PL_last_swash_slen (vTHX->Ilast_swash_slen)
-#define PL_last_swash_tmps (vTHX->Ilast_swash_tmps)
-#define PL_last_uni (vTHX->Ilast_uni)
-#define PL_lastfd (vTHX->Ilastfd)
-#define PL_laststatval (vTHX->Ilaststatval)
-#define PL_laststype (vTHX->Ilaststype)
-#define PL_lex_brackets (vTHX->Ilex_brackets)
-#define PL_lex_brackstack (vTHX->Ilex_brackstack)
-#define PL_lex_casemods (vTHX->Ilex_casemods)
-#define PL_lex_casestack (vTHX->Ilex_casestack)
-#define PL_lex_defer (vTHX->Ilex_defer)
-#define PL_lex_dojoin (vTHX->Ilex_dojoin)
-#define PL_lex_expect (vTHX->Ilex_expect)
-#define PL_lex_formbrack (vTHX->Ilex_formbrack)
-#define PL_lex_inpat (vTHX->Ilex_inpat)
-#define PL_lex_inwhat (vTHX->Ilex_inwhat)
-#define PL_lex_op (vTHX->Ilex_op)
-#define PL_lex_repl (vTHX->Ilex_repl)
-#define PL_lex_starts (vTHX->Ilex_starts)
-#define PL_lex_state (vTHX->Ilex_state)
-#define PL_lex_stuff (vTHX->Ilex_stuff)
-#define PL_lineary (vTHX->Ilineary)
-#define PL_linestart (vTHX->Ilinestart)
-#define PL_linestr (vTHX->Ilinestr)
-#define PL_localpatches (vTHX->Ilocalpatches)
-#define PL_main_cv (vTHX->Imain_cv)
-#define PL_main_root (vTHX->Imain_root)
-#define PL_main_start (vTHX->Imain_start)
-#define PL_max_intro_pending (vTHX->Imax_intro_pending)
-#define PL_maxo (vTHX->Imaxo)
-#define PL_maxsysfd (vTHX->Imaxsysfd)
-#define PL_mess_sv (vTHX->Imess_sv)
-#define PL_min_intro_pending (vTHX->Imin_intro_pending)
-#define PL_minus_F (vTHX->Iminus_F)
-#define PL_minus_a (vTHX->Iminus_a)
-#define PL_minus_c (vTHX->Iminus_c)
-#define PL_minus_l (vTHX->Iminus_l)
-#define PL_minus_n (vTHX->Iminus_n)
-#define PL_minus_p (vTHX->Iminus_p)
-#define PL_modglobal (vTHX->Imodglobal)
-#define PL_multi_close (vTHX->Imulti_close)
-#define PL_multi_end (vTHX->Imulti_end)
-#define PL_multi_open (vTHX->Imulti_open)
-#define PL_multi_start (vTHX->Imulti_start)
-#define PL_multiline (vTHX->Imultiline)
-#define PL_nexttoke (vTHX->Inexttoke)
-#define PL_nexttype (vTHX->Inexttype)
-#define PL_nextval (vTHX->Inextval)
-#define PL_nice_chunk (vTHX->Inice_chunk)
-#define PL_nice_chunk_size (vTHX->Inice_chunk_size)
-#define PL_nomemok (vTHX->Inomemok)
-#define PL_nthreads (vTHX->Inthreads)
-#define PL_nthreads_cond (vTHX->Inthreads_cond)
-#define PL_nullstash (vTHX->Inullstash)
-#define PL_numeric_local (vTHX->Inumeric_local)
-#define PL_numeric_name (vTHX->Inumeric_name)
-#define PL_numeric_radix_sv (vTHX->Inumeric_radix_sv)
-#define PL_numeric_standard (vTHX->Inumeric_standard)
-#define PL_ofmt (vTHX->Iofmt)
-#define PL_oldbufptr (vTHX->Ioldbufptr)
-#define PL_oldname (vTHX->Ioldname)
-#define PL_oldoldbufptr (vTHX->Ioldoldbufptr)
-#define PL_op_mask (vTHX->Iop_mask)
-#define PL_op_seqmax (vTHX->Iop_seqmax)
-#define PL_origalen (vTHX->Iorigalen)
-#define PL_origargc (vTHX->Iorigargc)
-#define PL_origargv (vTHX->Iorigargv)
-#define PL_origenviron (vTHX->Iorigenviron)
-#define PL_origfilename (vTHX->Iorigfilename)
-#define PL_ors (vTHX->Iors)
-#define PL_orslen (vTHX->Iorslen)
-#define PL_osname (vTHX->Iosname)
-#define PL_pad_reset_pending (vTHX->Ipad_reset_pending)
-#define PL_padix (vTHX->Ipadix)
-#define PL_padix_floor (vTHX->Ipadix_floor)
-#define PL_patchlevel (vTHX->Ipatchlevel)
-#define PL_pending_ident (vTHX->Ipending_ident)
-#define PL_perl_destruct_level (vTHX->Iperl_destruct_level)
-#define PL_perldb (vTHX->Iperldb)
-#define PL_pidstatus (vTHX->Ipidstatus)
-#define PL_preambleav (vTHX->Ipreambleav)
-#define PL_preambled (vTHX->Ipreambled)
-#define PL_preprocess (vTHX->Ipreprocess)
-#define PL_profiledata (vTHX->Iprofiledata)
-#define PL_psig_name (vTHX->Ipsig_name)
-#define PL_psig_ptr (vTHX->Ipsig_ptr)
-#define PL_ptr_table (vTHX->Iptr_table)
-#define PL_replgv (vTHX->Ireplgv)
-#define PL_rsfp (vTHX->Irsfp)
-#define PL_rsfp_filters (vTHX->Irsfp_filters)
-#define PL_runops (vTHX->Irunops)
-#define PL_sawampersand (vTHX->Isawampersand)
-#define PL_sh_path (vTHX->Ish_path)
-#define PL_sighandlerp (vTHX->Isighandlerp)
-#define PL_splitstr (vTHX->Isplitstr)
-#define PL_srand_called (vTHX->Isrand_called)
-#define PL_statusvalue (vTHX->Istatusvalue)
-#define PL_statusvalue_vms (vTHX->Istatusvalue_vms)
-#define PL_stderrgv (vTHX->Istderrgv)
-#define PL_stdingv (vTHX->Istdingv)
-#define PL_strtab (vTHX->Istrtab)
-#define PL_strtab_mutex (vTHX->Istrtab_mutex)
-#define PL_sub_generation (vTHX->Isub_generation)
-#define PL_sublex_info (vTHX->Isublex_info)
-#define PL_subline (vTHX->Isubline)
-#define PL_subname (vTHX->Isubname)
-#define PL_sv_arenaroot (vTHX->Isv_arenaroot)
-#define PL_sv_count (vTHX->Isv_count)
-#define PL_sv_lock_mutex (vTHX->Isv_lock_mutex)
-#define PL_sv_mutex (vTHX->Isv_mutex)
-#define PL_sv_no (vTHX->Isv_no)
-#define PL_sv_objcount (vTHX->Isv_objcount)
-#define PL_sv_root (vTHX->Isv_root)
-#define PL_sv_undef (vTHX->Isv_undef)
-#define PL_sv_yes (vTHX->Isv_yes)
-#define PL_svref_mutex (vTHX->Isvref_mutex)
-#define PL_sys_intern (vTHX->Isys_intern)
-#define PL_tainting (vTHX->Itainting)
-#define PL_threadnum (vTHX->Ithreadnum)
-#define PL_threads_mutex (vTHX->Ithreads_mutex)
-#define PL_threadsv_names (vTHX->Ithreadsv_names)
-#define PL_thrsv (vTHX->Ithrsv)
-#define PL_tokenbuf (vTHX->Itokenbuf)
-#define PL_uid (vTHX->Iuid)
-#define PL_unsafe (vTHX->Iunsafe)
-#define PL_utf8_alnum (vTHX->Iutf8_alnum)
-#define PL_utf8_alnumc (vTHX->Iutf8_alnumc)
-#define PL_utf8_alpha (vTHX->Iutf8_alpha)
-#define PL_utf8_ascii (vTHX->Iutf8_ascii)
-#define PL_utf8_cntrl (vTHX->Iutf8_cntrl)
-#define PL_utf8_digit (vTHX->Iutf8_digit)
-#define PL_utf8_graph (vTHX->Iutf8_graph)
-#define PL_utf8_lower (vTHX->Iutf8_lower)
-#define PL_utf8_mark (vTHX->Iutf8_mark)
-#define PL_utf8_print (vTHX->Iutf8_print)
-#define PL_utf8_punct (vTHX->Iutf8_punct)
-#define PL_utf8_space (vTHX->Iutf8_space)
-#define PL_utf8_tolower (vTHX->Iutf8_tolower)
-#define PL_utf8_totitle (vTHX->Iutf8_totitle)
-#define PL_utf8_toupper (vTHX->Iutf8_toupper)
-#define PL_utf8_upper (vTHX->Iutf8_upper)
-#define PL_utf8_xdigit (vTHX->Iutf8_xdigit)
-#define PL_uudmap (vTHX->Iuudmap)
-#define PL_warnhook (vTHX->Iwarnhook)
-#define PL_widesyscalls (vTHX->Iwidesyscalls)
-#define PL_xiv_arenaroot (vTHX->Ixiv_arenaroot)
-#define PL_xiv_root (vTHX->Ixiv_root)
-#define PL_xnv_arenaroot (vTHX->Ixnv_arenaroot)
-#define PL_xnv_root (vTHX->Ixnv_root)
-#define PL_xpv_arenaroot (vTHX->Ixpv_arenaroot)
-#define PL_xpv_root (vTHX->Ixpv_root)
-#define PL_xpvav_arenaroot (vTHX->Ixpvav_arenaroot)
-#define PL_xpvav_root (vTHX->Ixpvav_root)
-#define PL_xpvbm_arenaroot (vTHX->Ixpvbm_arenaroot)
-#define PL_xpvbm_root (vTHX->Ixpvbm_root)
-#define PL_xpvcv_arenaroot (vTHX->Ixpvcv_arenaroot)
-#define PL_xpvcv_root (vTHX->Ixpvcv_root)
-#define PL_xpvhv_arenaroot (vTHX->Ixpvhv_arenaroot)
-#define PL_xpvhv_root (vTHX->Ixpvhv_root)
-#define PL_xpviv_arenaroot (vTHX->Ixpviv_arenaroot)
-#define PL_xpviv_root (vTHX->Ixpviv_root)
-#define PL_xpvlv_arenaroot (vTHX->Ixpvlv_arenaroot)
-#define PL_xpvlv_root (vTHX->Ixpvlv_root)
-#define PL_xpvmg_arenaroot (vTHX->Ixpvmg_arenaroot)
-#define PL_xpvmg_root (vTHX->Ixpvmg_root)
-#define PL_xpvnv_arenaroot (vTHX->Ixpvnv_arenaroot)
-#define PL_xpvnv_root (vTHX->Ixpvnv_root)
-#define PL_xrv_arenaroot (vTHX->Ixrv_arenaroot)
-#define PL_xrv_root (vTHX->Ixrv_root)
-#define PL_yychar (vTHX->Iyychar)
-#define PL_yydebug (vTHX->Iyydebug)
-#define PL_yyerrflag (vTHX->Iyyerrflag)
-#define PL_yylval (vTHX->Iyylval)
-#define PL_yynerrs (vTHX->Iyynerrs)
-#define PL_yyval (vTHX->Iyyval)
-
-# endif /* USE_THREADS */
-
-#else /* !MULTIPLICITY */
-
-# if defined(PERL_OBJECT)
-/* case 6 above */
-
-#define PL_Sv (aTHXo->interp.TSv)
-#define PL_Xpv (aTHXo->interp.TXpv)
-#define PL_av_fetch_sv (aTHXo->interp.Tav_fetch_sv)
-#define PL_bodytarget (aTHXo->interp.Tbodytarget)
-#define PL_bostr (aTHXo->interp.Tbostr)
-#define PL_chopset (aTHXo->interp.Tchopset)
-#define PL_colors (aTHXo->interp.Tcolors)
-#define PL_colorset (aTHXo->interp.Tcolorset)
-#define PL_curcop (aTHXo->interp.Tcurcop)
-#define PL_curpad (aTHXo->interp.Tcurpad)
-#define PL_curpm (aTHXo->interp.Tcurpm)
-#define PL_curstack (aTHXo->interp.Tcurstack)
-#define PL_curstackinfo (aTHXo->interp.Tcurstackinfo)
-#define PL_curstash (aTHXo->interp.Tcurstash)
-#define PL_defoutgv (aTHXo->interp.Tdefoutgv)
-#define PL_defstash (aTHXo->interp.Tdefstash)
-#define PL_delaymagic (aTHXo->interp.Tdelaymagic)
-#define PL_dirty (aTHXo->interp.Tdirty)
-#define PL_dumpindent (aTHXo->interp.Tdumpindent)
-#define PL_efloatbuf (aTHXo->interp.Tefloatbuf)
-#define PL_efloatsize (aTHXo->interp.Tefloatsize)
-#define PL_errors (aTHXo->interp.Terrors)
-#define PL_extralen (aTHXo->interp.Textralen)
-#define PL_firstgv (aTHXo->interp.Tfirstgv)
-#define PL_formtarget (aTHXo->interp.Tformtarget)
-#define PL_hv_fetch_ent_mh (aTHXo->interp.Thv_fetch_ent_mh)
-#define PL_hv_fetch_sv (aTHXo->interp.Thv_fetch_sv)
-#define PL_in_eval (aTHXo->interp.Tin_eval)
-#define PL_last_in_gv (aTHXo->interp.Tlast_in_gv)
-#define PL_lastgotoprobe (aTHXo->interp.Tlastgotoprobe)
-#define PL_lastscream (aTHXo->interp.Tlastscream)
-#define PL_localizing (aTHXo->interp.Tlocalizing)
-#define PL_mainstack (aTHXo->interp.Tmainstack)
-#define PL_markstack (aTHXo->interp.Tmarkstack)
-#define PL_markstack_max (aTHXo->interp.Tmarkstack_max)
-#define PL_markstack_ptr (aTHXo->interp.Tmarkstack_ptr)
-#define PL_maxscream (aTHXo->interp.Tmaxscream)
-#define PL_modcount (aTHXo->interp.Tmodcount)
-#define PL_na (aTHXo->interp.Tna)
-#define PL_nrs (aTHXo->interp.Tnrs)
-#define PL_ofs (aTHXo->interp.Tofs)
-#define PL_ofslen (aTHXo->interp.Tofslen)
-#define PL_op (aTHXo->interp.Top)
-#define PL_opsave (aTHXo->interp.Topsave)
-#define PL_protect (aTHXo->interp.Tprotect)
-#define PL_reg_call_cc (aTHXo->interp.Treg_call_cc)
-#define PL_reg_curpm (aTHXo->interp.Treg_curpm)
-#define PL_reg_eval_set (aTHXo->interp.Treg_eval_set)
-#define PL_reg_flags (aTHXo->interp.Treg_flags)
-#define PL_reg_ganch (aTHXo->interp.Treg_ganch)
-#define PL_reg_leftiter (aTHXo->interp.Treg_leftiter)
-#define PL_reg_magic (aTHXo->interp.Treg_magic)
-#define PL_reg_maxiter (aTHXo->interp.Treg_maxiter)
-#define PL_reg_oldcurpm (aTHXo->interp.Treg_oldcurpm)
-#define PL_reg_oldpos (aTHXo->interp.Treg_oldpos)
-#define PL_reg_oldsaved (aTHXo->interp.Treg_oldsaved)
-#define PL_reg_oldsavedlen (aTHXo->interp.Treg_oldsavedlen)
-#define PL_reg_poscache (aTHXo->interp.Treg_poscache)
-#define PL_reg_poscache_size (aTHXo->interp.Treg_poscache_size)
-#define PL_reg_re (aTHXo->interp.Treg_re)
-#define PL_reg_start_tmp (aTHXo->interp.Treg_start_tmp)
-#define PL_reg_start_tmpl (aTHXo->interp.Treg_start_tmpl)
-#define PL_reg_starttry (aTHXo->interp.Treg_starttry)
-#define PL_reg_sv (aTHXo->interp.Treg_sv)
-#define PL_reg_whilem_seen (aTHXo->interp.Treg_whilem_seen)
-#define PL_regbol (aTHXo->interp.Tregbol)
-#define PL_regcc (aTHXo->interp.Tregcc)
-#define PL_regcode (aTHXo->interp.Tregcode)
-#define PL_regcomp_parse (aTHXo->interp.Tregcomp_parse)
-#define PL_regcomp_rx (aTHXo->interp.Tregcomp_rx)
-#define PL_regcompp (aTHXo->interp.Tregcompp)
-#define PL_regdata (aTHXo->interp.Tregdata)
-#define PL_regdummy (aTHXo->interp.Tregdummy)
-#define PL_regendp (aTHXo->interp.Tregendp)
-#define PL_regeol (aTHXo->interp.Tregeol)
-#define PL_regexecp (aTHXo->interp.Tregexecp)
-#define PL_regflags (aTHXo->interp.Tregflags)
-#define PL_regfree (aTHXo->interp.Tregfree)
-#define PL_regindent (aTHXo->interp.Tregindent)
-#define PL_reginput (aTHXo->interp.Treginput)
-#define PL_regint_start (aTHXo->interp.Tregint_start)
-#define PL_regint_string (aTHXo->interp.Tregint_string)
-#define PL_reginterp_cnt (aTHXo->interp.Treginterp_cnt)
-#define PL_reglastparen (aTHXo->interp.Treglastparen)
-#define PL_regnarrate (aTHXo->interp.Tregnarrate)
-#define PL_regnaughty (aTHXo->interp.Tregnaughty)
-#define PL_regnpar (aTHXo->interp.Tregnpar)
-#define PL_regprecomp (aTHXo->interp.Tregprecomp)
-#define PL_regprev (aTHXo->interp.Tregprev)
-#define PL_regprogram (aTHXo->interp.Tregprogram)
-#define PL_regsawback (aTHXo->interp.Tregsawback)
-#define PL_regseen (aTHXo->interp.Tregseen)
-#define PL_regsize (aTHXo->interp.Tregsize)
-#define PL_regstartp (aTHXo->interp.Tregstartp)
-#define PL_regtill (aTHXo->interp.Tregtill)
-#define PL_regxend (aTHXo->interp.Tregxend)
-#define PL_restartop (aTHXo->interp.Trestartop)
-#define PL_retstack (aTHXo->interp.Tretstack)
-#define PL_retstack_ix (aTHXo->interp.Tretstack_ix)
-#define PL_retstack_max (aTHXo->interp.Tretstack_max)
-#define PL_rs (aTHXo->interp.Trs)
-#define PL_savestack (aTHXo->interp.Tsavestack)
-#define PL_savestack_ix (aTHXo->interp.Tsavestack_ix)
-#define PL_savestack_max (aTHXo->interp.Tsavestack_max)
-#define PL_scopestack (aTHXo->interp.Tscopestack)
-#define PL_scopestack_ix (aTHXo->interp.Tscopestack_ix)
-#define PL_scopestack_max (aTHXo->interp.Tscopestack_max)
-#define PL_screamfirst (aTHXo->interp.Tscreamfirst)
-#define PL_screamnext (aTHXo->interp.Tscreamnext)
-#define PL_secondgv (aTHXo->interp.Tsecondgv)
-#define PL_seen_evals (aTHXo->interp.Tseen_evals)
-#define PL_seen_zerolen (aTHXo->interp.Tseen_zerolen)
-#define PL_sortcop (aTHXo->interp.Tsortcop)
-#define PL_sortcxix (aTHXo->interp.Tsortcxix)
-#define PL_sortstash (aTHXo->interp.Tsortstash)
-#define PL_stack_base (aTHXo->interp.Tstack_base)
-#define PL_stack_max (aTHXo->interp.Tstack_max)
-#define PL_stack_sp (aTHXo->interp.Tstack_sp)
-#define PL_start_env (aTHXo->interp.Tstart_env)
-#define PL_statbuf (aTHXo->interp.Tstatbuf)
-#define PL_statcache (aTHXo->interp.Tstatcache)
-#define PL_statgv (aTHXo->interp.Tstatgv)
-#define PL_statname (aTHXo->interp.Tstatname)
-#define PL_tainted (aTHXo->interp.Ttainted)
-#define PL_timesbuf (aTHXo->interp.Ttimesbuf)
-#define PL_tmps_floor (aTHXo->interp.Ttmps_floor)
-#define PL_tmps_ix (aTHXo->interp.Ttmps_ix)
-#define PL_tmps_max (aTHXo->interp.Ttmps_max)
-#define PL_tmps_stack (aTHXo->interp.Ttmps_stack)
-#define PL_top_env (aTHXo->interp.Ttop_env)
-#define PL_toptarget (aTHXo->interp.Ttoptarget)
-#define PL_watchaddr (aTHXo->interp.Twatchaddr)
-#define PL_watchok (aTHXo->interp.Twatchok)
-#define PL_Argv (aTHXo->interp.IArgv)
-#define PL_Cmd (aTHXo->interp.ICmd)
-#define PL_DBcv (aTHXo->interp.IDBcv)
-#define PL_DBgv (aTHXo->interp.IDBgv)
-#define PL_DBline (aTHXo->interp.IDBline)
-#define PL_DBsignal (aTHXo->interp.IDBsignal)
-#define PL_DBsingle (aTHXo->interp.IDBsingle)
-#define PL_DBsub (aTHXo->interp.IDBsub)
-#define PL_DBtrace (aTHXo->interp.IDBtrace)
-#define PL_Dir (aTHXo->interp.IDir)
-#define PL_Env (aTHXo->interp.IEnv)
-#define PL_LIO (aTHXo->interp.ILIO)
-#define PL_Mem (aTHXo->interp.IMem)
-#define PL_MemParse (aTHXo->interp.IMemParse)
-#define PL_MemShared (aTHXo->interp.IMemShared)
-#define PL_Proc (aTHXo->interp.IProc)
-#define PL_Sock (aTHXo->interp.ISock)
-#define PL_StdIO (aTHXo->interp.IStdIO)
-#define PL_amagic_generation (aTHXo->interp.Iamagic_generation)
-#define PL_an (aTHXo->interp.Ian)
-#define PL_argvgv (aTHXo->interp.Iargvgv)
-#define PL_argvout_stack (aTHXo->interp.Iargvout_stack)
-#define PL_argvoutgv (aTHXo->interp.Iargvoutgv)
-#define PL_basetime (aTHXo->interp.Ibasetime)
-#define PL_beginav (aTHXo->interp.Ibeginav)
-#define PL_beginav_save (aTHXo->interp.Ibeginav_save)
-#define PL_bitcount (aTHXo->interp.Ibitcount)
-#define PL_bufend (aTHXo->interp.Ibufend)
-#define PL_bufptr (aTHXo->interp.Ibufptr)
-#define PL_checkav (aTHXo->interp.Icheckav)
-#define PL_collation_ix (aTHXo->interp.Icollation_ix)
-#define PL_collation_name (aTHXo->interp.Icollation_name)
-#define PL_collation_standard (aTHXo->interp.Icollation_standard)
-#define PL_collxfrm_base (aTHXo->interp.Icollxfrm_base)
-#define PL_collxfrm_mult (aTHXo->interp.Icollxfrm_mult)
-#define PL_compcv (aTHXo->interp.Icompcv)
-#define PL_compiling (aTHXo->interp.Icompiling)
-#define PL_comppad (aTHXo->interp.Icomppad)
-#define PL_comppad_name (aTHXo->interp.Icomppad_name)
-#define PL_comppad_name_fill (aTHXo->interp.Icomppad_name_fill)
-#define PL_comppad_name_floor (aTHXo->interp.Icomppad_name_floor)
-#define PL_cop_seqmax (aTHXo->interp.Icop_seqmax)
-#define PL_copline (aTHXo->interp.Icopline)
-#define PL_cred_mutex (aTHXo->interp.Icred_mutex)
-#define PL_cryptseen (aTHXo->interp.Icryptseen)
-#define PL_cshlen (aTHXo->interp.Icshlen)
-#define PL_cshname (aTHXo->interp.Icshname)
-#define PL_curcopdb (aTHXo->interp.Icurcopdb)
-#define PL_curstname (aTHXo->interp.Icurstname)
-#define PL_curthr (aTHXo->interp.Icurthr)
-#define PL_dbargs (aTHXo->interp.Idbargs)
-#define PL_debstash (aTHXo->interp.Idebstash)
-#define PL_debug (aTHXo->interp.Idebug)
-#define PL_defgv (aTHXo->interp.Idefgv)
-#define PL_diehook (aTHXo->interp.Idiehook)
-#define PL_doextract (aTHXo->interp.Idoextract)
-#define PL_doswitches (aTHXo->interp.Idoswitches)
-#define PL_dowarn (aTHXo->interp.Idowarn)
-#define PL_dummy1_bincompat (aTHXo->interp.Idummy1_bincompat)
-#define PL_e_script (aTHXo->interp.Ie_script)
-#define PL_egid (aTHXo->interp.Iegid)
-#define PL_endav (aTHXo->interp.Iendav)
-#define PL_envgv (aTHXo->interp.Ienvgv)
-#define PL_errgv (aTHXo->interp.Ierrgv)
-#define PL_error_count (aTHXo->interp.Ierror_count)
-#define PL_euid (aTHXo->interp.Ieuid)
-#define PL_eval_cond (aTHXo->interp.Ieval_cond)
-#define PL_eval_mutex (aTHXo->interp.Ieval_mutex)
-#define PL_eval_owner (aTHXo->interp.Ieval_owner)
-#define PL_eval_root (aTHXo->interp.Ieval_root)
-#define PL_eval_start (aTHXo->interp.Ieval_start)
-#define PL_evalseq (aTHXo->interp.Ievalseq)
-#define PL_exit_flags (aTHXo->interp.Iexit_flags)
-#define PL_exitlist (aTHXo->interp.Iexitlist)
-#define PL_exitlistlen (aTHXo->interp.Iexitlistlen)
-#define PL_expect (aTHXo->interp.Iexpect)
-#define PL_fdpid (aTHXo->interp.Ifdpid)
-#define PL_fdpid_mutex (aTHXo->interp.Ifdpid_mutex)
-#define PL_filemode (aTHXo->interp.Ifilemode)
-#define PL_forkprocess (aTHXo->interp.Iforkprocess)
-#define PL_formfeed (aTHXo->interp.Iformfeed)
-#define PL_generation (aTHXo->interp.Igeneration)
-#define PL_gensym (aTHXo->interp.Igensym)
-#define PL_gid (aTHXo->interp.Igid)
-#define PL_glob_index (aTHXo->interp.Iglob_index)
-#define PL_globalstash (aTHXo->interp.Iglobalstash)
-#define PL_he_arenaroot (aTHXo->interp.Ihe_arenaroot)
-#define PL_he_root (aTHXo->interp.Ihe_root)
-#define PL_hintgv (aTHXo->interp.Ihintgv)
-#define PL_hints (aTHXo->interp.Ihints)
-#define PL_in_clean_all (aTHXo->interp.Iin_clean_all)
-#define PL_in_clean_objs (aTHXo->interp.Iin_clean_objs)
-#define PL_in_my (aTHXo->interp.Iin_my)
-#define PL_in_my_stash (aTHXo->interp.Iin_my_stash)
-#define PL_incgv (aTHXo->interp.Iincgv)
-#define PL_initav (aTHXo->interp.Iinitav)
-#define PL_inplace (aTHXo->interp.Iinplace)
-#define PL_last_lop (aTHXo->interp.Ilast_lop)
-#define PL_last_lop_op (aTHXo->interp.Ilast_lop_op)
-#define PL_last_swash_hv (aTHXo->interp.Ilast_swash_hv)
-#define PL_last_swash_key (aTHXo->interp.Ilast_swash_key)
-#define PL_last_swash_klen (aTHXo->interp.Ilast_swash_klen)
-#define PL_last_swash_slen (aTHXo->interp.Ilast_swash_slen)
-#define PL_last_swash_tmps (aTHXo->interp.Ilast_swash_tmps)
-#define PL_last_uni (aTHXo->interp.Ilast_uni)
-#define PL_lastfd (aTHXo->interp.Ilastfd)
-#define PL_laststatval (aTHXo->interp.Ilaststatval)
-#define PL_laststype (aTHXo->interp.Ilaststype)
-#define PL_lex_brackets (aTHXo->interp.Ilex_brackets)
-#define PL_lex_brackstack (aTHXo->interp.Ilex_brackstack)
-#define PL_lex_casemods (aTHXo->interp.Ilex_casemods)
-#define PL_lex_casestack (aTHXo->interp.Ilex_casestack)
-#define PL_lex_defer (aTHXo->interp.Ilex_defer)
-#define PL_lex_dojoin (aTHXo->interp.Ilex_dojoin)
-#define PL_lex_expect (aTHXo->interp.Ilex_expect)
-#define PL_lex_formbrack (aTHXo->interp.Ilex_formbrack)
-#define PL_lex_inpat (aTHXo->interp.Ilex_inpat)
-#define PL_lex_inwhat (aTHXo->interp.Ilex_inwhat)
-#define PL_lex_op (aTHXo->interp.Ilex_op)
-#define PL_lex_repl (aTHXo->interp.Ilex_repl)
-#define PL_lex_starts (aTHXo->interp.Ilex_starts)
-#define PL_lex_state (aTHXo->interp.Ilex_state)
-#define PL_lex_stuff (aTHXo->interp.Ilex_stuff)
-#define PL_lineary (aTHXo->interp.Ilineary)
-#define PL_linestart (aTHXo->interp.Ilinestart)
-#define PL_linestr (aTHXo->interp.Ilinestr)
-#define PL_localpatches (aTHXo->interp.Ilocalpatches)
-#define PL_main_cv (aTHXo->interp.Imain_cv)
-#define PL_main_root (aTHXo->interp.Imain_root)
-#define PL_main_start (aTHXo->interp.Imain_start)
-#define PL_max_intro_pending (aTHXo->interp.Imax_intro_pending)
-#define PL_maxo (aTHXo->interp.Imaxo)
-#define PL_maxsysfd (aTHXo->interp.Imaxsysfd)
-#define PL_mess_sv (aTHXo->interp.Imess_sv)
-#define PL_min_intro_pending (aTHXo->interp.Imin_intro_pending)
-#define PL_minus_F (aTHXo->interp.Iminus_F)
-#define PL_minus_a (aTHXo->interp.Iminus_a)
-#define PL_minus_c (aTHXo->interp.Iminus_c)
-#define PL_minus_l (aTHXo->interp.Iminus_l)
-#define PL_minus_n (aTHXo->interp.Iminus_n)
-#define PL_minus_p (aTHXo->interp.Iminus_p)
-#define PL_modglobal (aTHXo->interp.Imodglobal)
-#define PL_multi_close (aTHXo->interp.Imulti_close)
-#define PL_multi_end (aTHXo->interp.Imulti_end)
-#define PL_multi_open (aTHXo->interp.Imulti_open)
-#define PL_multi_start (aTHXo->interp.Imulti_start)
-#define PL_multiline (aTHXo->interp.Imultiline)
-#define PL_nexttoke (aTHXo->interp.Inexttoke)
-#define PL_nexttype (aTHXo->interp.Inexttype)
-#define PL_nextval (aTHXo->interp.Inextval)
-#define PL_nice_chunk (aTHXo->interp.Inice_chunk)
-#define PL_nice_chunk_size (aTHXo->interp.Inice_chunk_size)
-#define PL_nomemok (aTHXo->interp.Inomemok)
-#define PL_nthreads (aTHXo->interp.Inthreads)
-#define PL_nthreads_cond (aTHXo->interp.Inthreads_cond)
-#define PL_nullstash (aTHXo->interp.Inullstash)
-#define PL_numeric_local (aTHXo->interp.Inumeric_local)
-#define PL_numeric_name (aTHXo->interp.Inumeric_name)
-#define PL_numeric_radix_sv (aTHXo->interp.Inumeric_radix_sv)
-#define PL_numeric_standard (aTHXo->interp.Inumeric_standard)
-#define PL_ofmt (aTHXo->interp.Iofmt)
-#define PL_oldbufptr (aTHXo->interp.Ioldbufptr)
-#define PL_oldname (aTHXo->interp.Ioldname)
-#define PL_oldoldbufptr (aTHXo->interp.Ioldoldbufptr)
-#define PL_op_mask (aTHXo->interp.Iop_mask)
-#define PL_op_seqmax (aTHXo->interp.Iop_seqmax)
-#define PL_origalen (aTHXo->interp.Iorigalen)
-#define PL_origargc (aTHXo->interp.Iorigargc)
-#define PL_origargv (aTHXo->interp.Iorigargv)
-#define PL_origenviron (aTHXo->interp.Iorigenviron)
-#define PL_origfilename (aTHXo->interp.Iorigfilename)
-#define PL_ors (aTHXo->interp.Iors)
-#define PL_orslen (aTHXo->interp.Iorslen)
-#define PL_osname (aTHXo->interp.Iosname)
-#define PL_pad_reset_pending (aTHXo->interp.Ipad_reset_pending)
-#define PL_padix (aTHXo->interp.Ipadix)
-#define PL_padix_floor (aTHXo->interp.Ipadix_floor)
-#define PL_patchlevel (aTHXo->interp.Ipatchlevel)
-#define PL_pending_ident (aTHXo->interp.Ipending_ident)
-#define PL_perl_destruct_level (aTHXo->interp.Iperl_destruct_level)
-#define PL_perldb (aTHXo->interp.Iperldb)
-#define PL_pidstatus (aTHXo->interp.Ipidstatus)
-#define PL_preambleav (aTHXo->interp.Ipreambleav)
-#define PL_preambled (aTHXo->interp.Ipreambled)
-#define PL_preprocess (aTHXo->interp.Ipreprocess)
-#define PL_profiledata (aTHXo->interp.Iprofiledata)
-#define PL_psig_name (aTHXo->interp.Ipsig_name)
-#define PL_psig_ptr (aTHXo->interp.Ipsig_ptr)
-#define PL_ptr_table (aTHXo->interp.Iptr_table)
-#define PL_replgv (aTHXo->interp.Ireplgv)
-#define PL_rsfp (aTHXo->interp.Irsfp)
-#define PL_rsfp_filters (aTHXo->interp.Irsfp_filters)
-#define PL_runops (aTHXo->interp.Irunops)
-#define PL_sawampersand (aTHXo->interp.Isawampersand)
-#define PL_sh_path (aTHXo->interp.Ish_path)
-#define PL_sighandlerp (aTHXo->interp.Isighandlerp)
-#define PL_splitstr (aTHXo->interp.Isplitstr)
-#define PL_srand_called (aTHXo->interp.Isrand_called)
-#define PL_statusvalue (aTHXo->interp.Istatusvalue)
-#define PL_statusvalue_vms (aTHXo->interp.Istatusvalue_vms)
-#define PL_stderrgv (aTHXo->interp.Istderrgv)
-#define PL_stdingv (aTHXo->interp.Istdingv)
-#define PL_strtab (aTHXo->interp.Istrtab)
-#define PL_strtab_mutex (aTHXo->interp.Istrtab_mutex)
-#define PL_sub_generation (aTHXo->interp.Isub_generation)
-#define PL_sublex_info (aTHXo->interp.Isublex_info)
-#define PL_subline (aTHXo->interp.Isubline)
-#define PL_subname (aTHXo->interp.Isubname)
-#define PL_sv_arenaroot (aTHXo->interp.Isv_arenaroot)
-#define PL_sv_count (aTHXo->interp.Isv_count)
-#define PL_sv_lock_mutex (aTHXo->interp.Isv_lock_mutex)
-#define PL_sv_mutex (aTHXo->interp.Isv_mutex)
-#define PL_sv_no (aTHXo->interp.Isv_no)
-#define PL_sv_objcount (aTHXo->interp.Isv_objcount)
-#define PL_sv_root (aTHXo->interp.Isv_root)
-#define PL_sv_undef (aTHXo->interp.Isv_undef)
-#define PL_sv_yes (aTHXo->interp.Isv_yes)
-#define PL_svref_mutex (aTHXo->interp.Isvref_mutex)
-#define PL_sys_intern (aTHXo->interp.Isys_intern)
-#define PL_tainting (aTHXo->interp.Itainting)
-#define PL_threadnum (aTHXo->interp.Ithreadnum)
-#define PL_threads_mutex (aTHXo->interp.Ithreads_mutex)
-#define PL_threadsv_names (aTHXo->interp.Ithreadsv_names)
-#define PL_thrsv (aTHXo->interp.Ithrsv)
-#define PL_tokenbuf (aTHXo->interp.Itokenbuf)
-#define PL_uid (aTHXo->interp.Iuid)
-#define PL_unsafe (aTHXo->interp.Iunsafe)
-#define PL_utf8_alnum (aTHXo->interp.Iutf8_alnum)
-#define PL_utf8_alnumc (aTHXo->interp.Iutf8_alnumc)
-#define PL_utf8_alpha (aTHXo->interp.Iutf8_alpha)
-#define PL_utf8_ascii (aTHXo->interp.Iutf8_ascii)
-#define PL_utf8_cntrl (aTHXo->interp.Iutf8_cntrl)
-#define PL_utf8_digit (aTHXo->interp.Iutf8_digit)
-#define PL_utf8_graph (aTHXo->interp.Iutf8_graph)
-#define PL_utf8_lower (aTHXo->interp.Iutf8_lower)
-#define PL_utf8_mark (aTHXo->interp.Iutf8_mark)
-#define PL_utf8_print (aTHXo->interp.Iutf8_print)
-#define PL_utf8_punct (aTHXo->interp.Iutf8_punct)
-#define PL_utf8_space (aTHXo->interp.Iutf8_space)
-#define PL_utf8_tolower (aTHXo->interp.Iutf8_tolower)
-#define PL_utf8_totitle (aTHXo->interp.Iutf8_totitle)
-#define PL_utf8_toupper (aTHXo->interp.Iutf8_toupper)
-#define PL_utf8_upper (aTHXo->interp.Iutf8_upper)
-#define PL_utf8_xdigit (aTHXo->interp.Iutf8_xdigit)
-#define PL_uudmap (aTHXo->interp.Iuudmap)
-#define PL_warnhook (aTHXo->interp.Iwarnhook)
-#define PL_widesyscalls (aTHXo->interp.Iwidesyscalls)
-#define PL_xiv_arenaroot (aTHXo->interp.Ixiv_arenaroot)
-#define PL_xiv_root (aTHXo->interp.Ixiv_root)
-#define PL_xnv_arenaroot (aTHXo->interp.Ixnv_arenaroot)
-#define PL_xnv_root (aTHXo->interp.Ixnv_root)
-#define PL_xpv_arenaroot (aTHXo->interp.Ixpv_arenaroot)
-#define PL_xpv_root (aTHXo->interp.Ixpv_root)
-#define PL_xpvav_arenaroot (aTHXo->interp.Ixpvav_arenaroot)
-#define PL_xpvav_root (aTHXo->interp.Ixpvav_root)
-#define PL_xpvbm_arenaroot (aTHXo->interp.Ixpvbm_arenaroot)
-#define PL_xpvbm_root (aTHXo->interp.Ixpvbm_root)
-#define PL_xpvcv_arenaroot (aTHXo->interp.Ixpvcv_arenaroot)
-#define PL_xpvcv_root (aTHXo->interp.Ixpvcv_root)
-#define PL_xpvhv_arenaroot (aTHXo->interp.Ixpvhv_arenaroot)
-#define PL_xpvhv_root (aTHXo->interp.Ixpvhv_root)
-#define PL_xpviv_arenaroot (aTHXo->interp.Ixpviv_arenaroot)
-#define PL_xpviv_root (aTHXo->interp.Ixpviv_root)
-#define PL_xpvlv_arenaroot (aTHXo->interp.Ixpvlv_arenaroot)
-#define PL_xpvlv_root (aTHXo->interp.Ixpvlv_root)
-#define PL_xpvmg_arenaroot (aTHXo->interp.Ixpvmg_arenaroot)
-#define PL_xpvmg_root (aTHXo->interp.Ixpvmg_root)
-#define PL_xpvnv_arenaroot (aTHXo->interp.Ixpvnv_arenaroot)
-#define PL_xpvnv_root (aTHXo->interp.Ixpvnv_root)
-#define PL_xrv_arenaroot (aTHXo->interp.Ixrv_arenaroot)
-#define PL_xrv_root (aTHXo->interp.Ixrv_root)
-#define PL_yychar (aTHXo->interp.Iyychar)
-#define PL_yydebug (aTHXo->interp.Iyydebug)
-#define PL_yyerrflag (aTHXo->interp.Iyyerrflag)
-#define PL_yylval (aTHXo->interp.Iyylval)
-#define PL_yynerrs (aTHXo->interp.Iyynerrs)
-#define PL_yyval (aTHXo->interp.Iyyval)
-
-# else /* !PERL_OBJECT */
-
-/* cases 1 and 4 above */
-
-#define PL_IArgv PL_Argv
-#define PL_ICmd PL_Cmd
-#define PL_IDBcv PL_DBcv
-#define PL_IDBgv PL_DBgv
-#define PL_IDBline PL_DBline
-#define PL_IDBsignal PL_DBsignal
-#define PL_IDBsingle PL_DBsingle
-#define PL_IDBsub PL_DBsub
-#define PL_IDBtrace PL_DBtrace
-#define PL_IDir PL_Dir
-#define PL_IEnv PL_Env
-#define PL_ILIO PL_LIO
-#define PL_IMem PL_Mem
-#define PL_IMemParse PL_MemParse
-#define PL_IMemShared PL_MemShared
-#define PL_IProc PL_Proc
-#define PL_ISock PL_Sock
-#define PL_IStdIO PL_StdIO
-#define PL_Iamagic_generation PL_amagic_generation
-#define PL_Ian PL_an
-#define PL_Iargvgv PL_argvgv
-#define PL_Iargvout_stack PL_argvout_stack
-#define PL_Iargvoutgv PL_argvoutgv
-#define PL_Ibasetime PL_basetime
-#define PL_Ibeginav PL_beginav
-#define PL_Ibeginav_save PL_beginav_save
-#define PL_Ibitcount PL_bitcount
-#define PL_Ibufend PL_bufend
-#define PL_Ibufptr PL_bufptr
-#define PL_Icheckav PL_checkav
-#define PL_Icollation_ix PL_collation_ix
-#define PL_Icollation_name PL_collation_name
-#define PL_Icollation_standard PL_collation_standard
-#define PL_Icollxfrm_base PL_collxfrm_base
-#define PL_Icollxfrm_mult PL_collxfrm_mult
-#define PL_Icompcv PL_compcv
-#define PL_Icompiling PL_compiling
-#define PL_Icomppad PL_comppad
-#define PL_Icomppad_name PL_comppad_name
-#define PL_Icomppad_name_fill PL_comppad_name_fill
-#define PL_Icomppad_name_floor PL_comppad_name_floor
-#define PL_Icop_seqmax PL_cop_seqmax
-#define PL_Icopline PL_copline
-#define PL_Icred_mutex PL_cred_mutex
-#define PL_Icryptseen PL_cryptseen
-#define PL_Icshlen PL_cshlen
-#define PL_Icshname PL_cshname
-#define PL_Icurcopdb PL_curcopdb
-#define PL_Icurstname PL_curstname
-#define PL_Icurthr PL_curthr
-#define PL_Idbargs PL_dbargs
-#define PL_Idebstash PL_debstash
-#define PL_Idebug PL_debug
-#define PL_Idefgv PL_defgv
-#define PL_Idiehook PL_diehook
-#define PL_Idoextract PL_doextract
-#define PL_Idoswitches PL_doswitches
-#define PL_Idowarn PL_dowarn
-#define PL_Idummy1_bincompat PL_dummy1_bincompat
-#define PL_Ie_script PL_e_script
-#define PL_Iegid PL_egid
-#define PL_Iendav PL_endav
-#define PL_Ienvgv PL_envgv
-#define PL_Ierrgv PL_errgv
-#define PL_Ierror_count PL_error_count
-#define PL_Ieuid PL_euid
-#define PL_Ieval_cond PL_eval_cond
-#define PL_Ieval_mutex PL_eval_mutex
-#define PL_Ieval_owner PL_eval_owner
-#define PL_Ieval_root PL_eval_root
-#define PL_Ieval_start PL_eval_start
-#define PL_Ievalseq PL_evalseq
-#define PL_Iexit_flags PL_exit_flags
-#define PL_Iexitlist PL_exitlist
-#define PL_Iexitlistlen PL_exitlistlen
-#define PL_Iexpect PL_expect
-#define PL_Ifdpid PL_fdpid
-#define PL_Ifdpid_mutex PL_fdpid_mutex
-#define PL_Ifilemode PL_filemode
-#define PL_Iforkprocess PL_forkprocess
-#define PL_Iformfeed PL_formfeed
-#define PL_Igeneration PL_generation
-#define PL_Igensym PL_gensym
-#define PL_Igid PL_gid
-#define PL_Iglob_index PL_glob_index
-#define PL_Iglobalstash PL_globalstash
-#define PL_Ihe_arenaroot PL_he_arenaroot
-#define PL_Ihe_root PL_he_root
-#define PL_Ihintgv PL_hintgv
-#define PL_Ihints PL_hints
-#define PL_Iin_clean_all PL_in_clean_all
-#define PL_Iin_clean_objs PL_in_clean_objs
-#define PL_Iin_my PL_in_my
-#define PL_Iin_my_stash PL_in_my_stash
-#define PL_Iincgv PL_incgv
-#define PL_Iinitav PL_initav
-#define PL_Iinplace PL_inplace
-#define PL_Ilast_lop PL_last_lop
-#define PL_Ilast_lop_op PL_last_lop_op
-#define PL_Ilast_swash_hv PL_last_swash_hv
-#define PL_Ilast_swash_key PL_last_swash_key
-#define PL_Ilast_swash_klen PL_last_swash_klen
-#define PL_Ilast_swash_slen PL_last_swash_slen
-#define PL_Ilast_swash_tmps PL_last_swash_tmps
-#define PL_Ilast_uni PL_last_uni
-#define PL_Ilastfd PL_lastfd
-#define PL_Ilaststatval PL_laststatval
-#define PL_Ilaststype PL_laststype
-#define PL_Ilex_brackets PL_lex_brackets
-#define PL_Ilex_brackstack PL_lex_brackstack
-#define PL_Ilex_casemods PL_lex_casemods
-#define PL_Ilex_casestack PL_lex_casestack
-#define PL_Ilex_defer PL_lex_defer
-#define PL_Ilex_dojoin PL_lex_dojoin
-#define PL_Ilex_expect PL_lex_expect
-#define PL_Ilex_formbrack PL_lex_formbrack
-#define PL_Ilex_inpat PL_lex_inpat
-#define PL_Ilex_inwhat PL_lex_inwhat
-#define PL_Ilex_op PL_lex_op
-#define PL_Ilex_repl PL_lex_repl
-#define PL_Ilex_starts PL_lex_starts
-#define PL_Ilex_state PL_lex_state
-#define PL_Ilex_stuff PL_lex_stuff
-#define PL_Ilineary PL_lineary
-#define PL_Ilinestart PL_linestart
-#define PL_Ilinestr PL_linestr
-#define PL_Ilocalpatches PL_localpatches
-#define PL_Imain_cv PL_main_cv
-#define PL_Imain_root PL_main_root
-#define PL_Imain_start PL_main_start
-#define PL_Imax_intro_pending PL_max_intro_pending
-#define PL_Imaxo PL_maxo
-#define PL_Imaxsysfd PL_maxsysfd
-#define PL_Imess_sv PL_mess_sv
-#define PL_Imin_intro_pending PL_min_intro_pending
-#define PL_Iminus_F PL_minus_F
-#define PL_Iminus_a PL_minus_a
-#define PL_Iminus_c PL_minus_c
-#define PL_Iminus_l PL_minus_l
-#define PL_Iminus_n PL_minus_n
-#define PL_Iminus_p PL_minus_p
-#define PL_Imodglobal PL_modglobal
-#define PL_Imulti_close PL_multi_close
-#define PL_Imulti_end PL_multi_end
-#define PL_Imulti_open PL_multi_open
-#define PL_Imulti_start PL_multi_start
-#define PL_Imultiline PL_multiline
-#define PL_Inexttoke PL_nexttoke
-#define PL_Inexttype PL_nexttype
-#define PL_Inextval PL_nextval
-#define PL_Inice_chunk PL_nice_chunk
-#define PL_Inice_chunk_size PL_nice_chunk_size
-#define PL_Inomemok PL_nomemok
-#define PL_Inthreads PL_nthreads
-#define PL_Inthreads_cond PL_nthreads_cond
-#define PL_Inullstash PL_nullstash
-#define PL_Inumeric_local PL_numeric_local
-#define PL_Inumeric_name PL_numeric_name
-#define PL_Inumeric_radix_sv PL_numeric_radix_sv
-#define PL_Inumeric_standard PL_numeric_standard
-#define PL_Iofmt PL_ofmt
-#define PL_Ioldbufptr PL_oldbufptr
-#define PL_Ioldname PL_oldname
-#define PL_Ioldoldbufptr PL_oldoldbufptr
-#define PL_Iop_mask PL_op_mask
-#define PL_Iop_seqmax PL_op_seqmax
-#define PL_Iorigalen PL_origalen
-#define PL_Iorigargc PL_origargc
-#define PL_Iorigargv PL_origargv
-#define PL_Iorigenviron PL_origenviron
-#define PL_Iorigfilename PL_origfilename
-#define PL_Iors PL_ors
-#define PL_Iorslen PL_orslen
-#define PL_Iosname PL_osname
-#define PL_Ipad_reset_pending PL_pad_reset_pending
-#define PL_Ipadix PL_padix
-#define PL_Ipadix_floor PL_padix_floor
-#define PL_Ipatchlevel PL_patchlevel
-#define PL_Ipending_ident PL_pending_ident
-#define PL_Iperl_destruct_level PL_perl_destruct_level
-#define PL_Iperldb PL_perldb
-#define PL_Ipidstatus PL_pidstatus
-#define PL_Ipreambleav PL_preambleav
-#define PL_Ipreambled PL_preambled
-#define PL_Ipreprocess PL_preprocess
-#define PL_Iprofiledata PL_profiledata
-#define PL_Ipsig_name PL_psig_name
-#define PL_Ipsig_ptr PL_psig_ptr
-#define PL_Iptr_table PL_ptr_table
-#define PL_Ireplgv PL_replgv
-#define PL_Irsfp PL_rsfp
-#define PL_Irsfp_filters PL_rsfp_filters
-#define PL_Irunops PL_runops
-#define PL_Isawampersand PL_sawampersand
-#define PL_Ish_path PL_sh_path
-#define PL_Isighandlerp PL_sighandlerp
-#define PL_Isplitstr PL_splitstr
-#define PL_Isrand_called PL_srand_called
-#define PL_Istatusvalue PL_statusvalue
-#define PL_Istatusvalue_vms PL_statusvalue_vms
-#define PL_Istderrgv PL_stderrgv
-#define PL_Istdingv PL_stdingv
-#define PL_Istrtab PL_strtab
-#define PL_Istrtab_mutex PL_strtab_mutex
-#define PL_Isub_generation PL_sub_generation
-#define PL_Isublex_info PL_sublex_info
-#define PL_Isubline PL_subline
-#define PL_Isubname PL_subname
-#define PL_Isv_arenaroot PL_sv_arenaroot
-#define PL_Isv_count PL_sv_count
-#define PL_Isv_lock_mutex PL_sv_lock_mutex
-#define PL_Isv_mutex PL_sv_mutex
-#define PL_Isv_no PL_sv_no
-#define PL_Isv_objcount PL_sv_objcount
-#define PL_Isv_root PL_sv_root
-#define PL_Isv_undef PL_sv_undef
-#define PL_Isv_yes PL_sv_yes
-#define PL_Isvref_mutex PL_svref_mutex
-#define PL_Isys_intern PL_sys_intern
-#define PL_Itainting PL_tainting
-#define PL_Ithreadnum PL_threadnum
-#define PL_Ithreads_mutex PL_threads_mutex
-#define PL_Ithreadsv_names PL_threadsv_names
-#define PL_Ithrsv PL_thrsv
-#define PL_Itokenbuf PL_tokenbuf
-#define PL_Iuid PL_uid
-#define PL_Iunsafe PL_unsafe
-#define PL_Iutf8_alnum PL_utf8_alnum
-#define PL_Iutf8_alnumc PL_utf8_alnumc
-#define PL_Iutf8_alpha PL_utf8_alpha
-#define PL_Iutf8_ascii PL_utf8_ascii
-#define PL_Iutf8_cntrl PL_utf8_cntrl
-#define PL_Iutf8_digit PL_utf8_digit
-#define PL_Iutf8_graph PL_utf8_graph
-#define PL_Iutf8_lower PL_utf8_lower
-#define PL_Iutf8_mark PL_utf8_mark
-#define PL_Iutf8_print PL_utf8_print
-#define PL_Iutf8_punct PL_utf8_punct
-#define PL_Iutf8_space PL_utf8_space
-#define PL_Iutf8_tolower PL_utf8_tolower
-#define PL_Iutf8_totitle PL_utf8_totitle
-#define PL_Iutf8_toupper PL_utf8_toupper
-#define PL_Iutf8_upper PL_utf8_upper
-#define PL_Iutf8_xdigit PL_utf8_xdigit
-#define PL_Iuudmap PL_uudmap
-#define PL_Iwarnhook PL_warnhook
-#define PL_Iwidesyscalls PL_widesyscalls
-#define PL_Ixiv_arenaroot PL_xiv_arenaroot
-#define PL_Ixiv_root PL_xiv_root
-#define PL_Ixnv_arenaroot PL_xnv_arenaroot
-#define PL_Ixnv_root PL_xnv_root
-#define PL_Ixpv_arenaroot PL_xpv_arenaroot
-#define PL_Ixpv_root PL_xpv_root
-#define PL_Ixpvav_arenaroot PL_xpvav_arenaroot
-#define PL_Ixpvav_root PL_xpvav_root
-#define PL_Ixpvbm_arenaroot PL_xpvbm_arenaroot
-#define PL_Ixpvbm_root PL_xpvbm_root
-#define PL_Ixpvcv_arenaroot PL_xpvcv_arenaroot
-#define PL_Ixpvcv_root PL_xpvcv_root
-#define PL_Ixpvhv_arenaroot PL_xpvhv_arenaroot
-#define PL_Ixpvhv_root PL_xpvhv_root
-#define PL_Ixpviv_arenaroot PL_xpviv_arenaroot
-#define PL_Ixpviv_root PL_xpviv_root
-#define PL_Ixpvlv_arenaroot PL_xpvlv_arenaroot
-#define PL_Ixpvlv_root PL_xpvlv_root
-#define PL_Ixpvmg_arenaroot PL_xpvmg_arenaroot
-#define PL_Ixpvmg_root PL_xpvmg_root
-#define PL_Ixpvnv_arenaroot PL_xpvnv_arenaroot
-#define PL_Ixpvnv_root PL_xpvnv_root
-#define PL_Ixrv_arenaroot PL_xrv_arenaroot
-#define PL_Ixrv_root PL_xrv_root
-#define PL_Iyychar PL_yychar
-#define PL_Iyydebug PL_yydebug
-#define PL_Iyyerrflag PL_yyerrflag
-#define PL_Iyylval PL_yylval
-#define PL_Iyynerrs PL_yynerrs
-#define PL_Iyyval PL_yyval
-
-# if defined(USE_THREADS)
-/* case 4 above */
-
-#define PL_Sv (aTHX->TSv)
-#define PL_Xpv (aTHX->TXpv)
-#define PL_av_fetch_sv (aTHX->Tav_fetch_sv)
-#define PL_bodytarget (aTHX->Tbodytarget)
-#define PL_bostr (aTHX->Tbostr)
-#define PL_chopset (aTHX->Tchopset)
-#define PL_colors (aTHX->Tcolors)
-#define PL_colorset (aTHX->Tcolorset)
-#define PL_curcop (aTHX->Tcurcop)
-#define PL_curpad (aTHX->Tcurpad)
-#define PL_curpm (aTHX->Tcurpm)
-#define PL_curstack (aTHX->Tcurstack)
-#define PL_curstackinfo (aTHX->Tcurstackinfo)
-#define PL_curstash (aTHX->Tcurstash)
-#define PL_defoutgv (aTHX->Tdefoutgv)
-#define PL_defstash (aTHX->Tdefstash)
-#define PL_delaymagic (aTHX->Tdelaymagic)
-#define PL_dirty (aTHX->Tdirty)
-#define PL_dumpindent (aTHX->Tdumpindent)
-#define PL_efloatbuf (aTHX->Tefloatbuf)
-#define PL_efloatsize (aTHX->Tefloatsize)
-#define PL_errors (aTHX->Terrors)
-#define PL_extralen (aTHX->Textralen)
-#define PL_firstgv (aTHX->Tfirstgv)
-#define PL_formtarget (aTHX->Tformtarget)
-#define PL_hv_fetch_ent_mh (aTHX->Thv_fetch_ent_mh)
-#define PL_hv_fetch_sv (aTHX->Thv_fetch_sv)
-#define PL_in_eval (aTHX->Tin_eval)
-#define PL_last_in_gv (aTHX->Tlast_in_gv)
-#define PL_lastgotoprobe (aTHX->Tlastgotoprobe)
-#define PL_lastscream (aTHX->Tlastscream)
-#define PL_localizing (aTHX->Tlocalizing)
-#define PL_mainstack (aTHX->Tmainstack)
-#define PL_markstack (aTHX->Tmarkstack)
-#define PL_markstack_max (aTHX->Tmarkstack_max)
-#define PL_markstack_ptr (aTHX->Tmarkstack_ptr)
-#define PL_maxscream (aTHX->Tmaxscream)
-#define PL_modcount (aTHX->Tmodcount)
-#define PL_na (aTHX->Tna)
-#define PL_nrs (aTHX->Tnrs)
-#define PL_ofs (aTHX->Tofs)
-#define PL_ofslen (aTHX->Tofslen)
-#define PL_op (aTHX->Top)
-#define PL_opsave (aTHX->Topsave)
-#define PL_protect (aTHX->Tprotect)
-#define PL_reg_call_cc (aTHX->Treg_call_cc)
-#define PL_reg_curpm (aTHX->Treg_curpm)
-#define PL_reg_eval_set (aTHX->Treg_eval_set)
-#define PL_reg_flags (aTHX->Treg_flags)
-#define PL_reg_ganch (aTHX->Treg_ganch)
-#define PL_reg_leftiter (aTHX->Treg_leftiter)
-#define PL_reg_magic (aTHX->Treg_magic)
-#define PL_reg_maxiter (aTHX->Treg_maxiter)
-#define PL_reg_oldcurpm (aTHX->Treg_oldcurpm)
-#define PL_reg_oldpos (aTHX->Treg_oldpos)
-#define PL_reg_oldsaved (aTHX->Treg_oldsaved)
-#define PL_reg_oldsavedlen (aTHX->Treg_oldsavedlen)
-#define PL_reg_poscache (aTHX->Treg_poscache)
-#define PL_reg_poscache_size (aTHX->Treg_poscache_size)
-#define PL_reg_re (aTHX->Treg_re)
-#define PL_reg_start_tmp (aTHX->Treg_start_tmp)
-#define PL_reg_start_tmpl (aTHX->Treg_start_tmpl)
-#define PL_reg_starttry (aTHX->Treg_starttry)
-#define PL_reg_sv (aTHX->Treg_sv)
-#define PL_reg_whilem_seen (aTHX->Treg_whilem_seen)
-#define PL_regbol (aTHX->Tregbol)
-#define PL_regcc (aTHX->Tregcc)
-#define PL_regcode (aTHX->Tregcode)
-#define PL_regcomp_parse (aTHX->Tregcomp_parse)
-#define PL_regcomp_rx (aTHX->Tregcomp_rx)
-#define PL_regcompp (aTHX->Tregcompp)
-#define PL_regdata (aTHX->Tregdata)
-#define PL_regdummy (aTHX->Tregdummy)
-#define PL_regendp (aTHX->Tregendp)
-#define PL_regeol (aTHX->Tregeol)
-#define PL_regexecp (aTHX->Tregexecp)
-#define PL_regflags (aTHX->Tregflags)
-#define PL_regfree (aTHX->Tregfree)
-#define PL_regindent (aTHX->Tregindent)
-#define PL_reginput (aTHX->Treginput)
-#define PL_regint_start (aTHX->Tregint_start)
-#define PL_regint_string (aTHX->Tregint_string)
-#define PL_reginterp_cnt (aTHX->Treginterp_cnt)
-#define PL_reglastparen (aTHX->Treglastparen)
-#define PL_regnarrate (aTHX->Tregnarrate)
-#define PL_regnaughty (aTHX->Tregnaughty)
-#define PL_regnpar (aTHX->Tregnpar)
-#define PL_regprecomp (aTHX->Tregprecomp)
-#define PL_regprev (aTHX->Tregprev)
-#define PL_regprogram (aTHX->Tregprogram)
-#define PL_regsawback (aTHX->Tregsawback)
-#define PL_regseen (aTHX->Tregseen)
-#define PL_regsize (aTHX->Tregsize)
-#define PL_regstartp (aTHX->Tregstartp)
-#define PL_regtill (aTHX->Tregtill)
-#define PL_regxend (aTHX->Tregxend)
-#define PL_restartop (aTHX->Trestartop)
-#define PL_retstack (aTHX->Tretstack)
-#define PL_retstack_ix (aTHX->Tretstack_ix)
-#define PL_retstack_max (aTHX->Tretstack_max)
-#define PL_rs (aTHX->Trs)
-#define PL_savestack (aTHX->Tsavestack)
-#define PL_savestack_ix (aTHX->Tsavestack_ix)
-#define PL_savestack_max (aTHX->Tsavestack_max)
-#define PL_scopestack (aTHX->Tscopestack)
-#define PL_scopestack_ix (aTHX->Tscopestack_ix)
-#define PL_scopestack_max (aTHX->Tscopestack_max)
-#define PL_screamfirst (aTHX->Tscreamfirst)
-#define PL_screamnext (aTHX->Tscreamnext)
-#define PL_secondgv (aTHX->Tsecondgv)
-#define PL_seen_evals (aTHX->Tseen_evals)
-#define PL_seen_zerolen (aTHX->Tseen_zerolen)
-#define PL_sortcop (aTHX->Tsortcop)
-#define PL_sortcxix (aTHX->Tsortcxix)
-#define PL_sortstash (aTHX->Tsortstash)
-#define PL_stack_base (aTHX->Tstack_base)
-#define PL_stack_max (aTHX->Tstack_max)
-#define PL_stack_sp (aTHX->Tstack_sp)
-#define PL_start_env (aTHX->Tstart_env)
-#define PL_statbuf (aTHX->Tstatbuf)
-#define PL_statcache (aTHX->Tstatcache)
-#define PL_statgv (aTHX->Tstatgv)
-#define PL_statname (aTHX->Tstatname)
-#define PL_tainted (aTHX->Ttainted)
-#define PL_timesbuf (aTHX->Ttimesbuf)
-#define PL_tmps_floor (aTHX->Ttmps_floor)
-#define PL_tmps_ix (aTHX->Ttmps_ix)
-#define PL_tmps_max (aTHX->Ttmps_max)
-#define PL_tmps_stack (aTHX->Ttmps_stack)
-#define PL_top_env (aTHX->Ttop_env)
-#define PL_toptarget (aTHX->Ttoptarget)
-#define PL_watchaddr (aTHX->Twatchaddr)
-#define PL_watchok (aTHX->Twatchok)
-
-# else /* !USE_THREADS */
-/* case 1 above */
-
-#define PL_TSv PL_Sv
-#define PL_TXpv PL_Xpv
-#define PL_Tav_fetch_sv PL_av_fetch_sv
-#define PL_Tbodytarget PL_bodytarget
-#define PL_Tbostr PL_bostr
-#define PL_Tchopset PL_chopset
-#define PL_Tcolors PL_colors
-#define PL_Tcolorset PL_colorset
-#define PL_Tcurcop PL_curcop
-#define PL_Tcurpad PL_curpad
-#define PL_Tcurpm PL_curpm
-#define PL_Tcurstack PL_curstack
-#define PL_Tcurstackinfo PL_curstackinfo
-#define PL_Tcurstash PL_curstash
-#define PL_Tdefoutgv PL_defoutgv
-#define PL_Tdefstash PL_defstash
-#define PL_Tdelaymagic PL_delaymagic
-#define PL_Tdirty PL_dirty
-#define PL_Tdumpindent PL_dumpindent
-#define PL_Tefloatbuf PL_efloatbuf
-#define PL_Tefloatsize PL_efloatsize
-#define PL_Terrors PL_errors
-#define PL_Textralen PL_extralen
-#define PL_Tfirstgv PL_firstgv
-#define PL_Tformtarget PL_formtarget
-#define PL_Thv_fetch_ent_mh PL_hv_fetch_ent_mh
-#define PL_Thv_fetch_sv PL_hv_fetch_sv
-#define PL_Tin_eval PL_in_eval
-#define PL_Tlast_in_gv PL_last_in_gv
-#define PL_Tlastgotoprobe PL_lastgotoprobe
-#define PL_Tlastscream PL_lastscream
-#define PL_Tlocalizing PL_localizing
-#define PL_Tmainstack PL_mainstack
-#define PL_Tmarkstack PL_markstack
-#define PL_Tmarkstack_max PL_markstack_max
-#define PL_Tmarkstack_ptr PL_markstack_ptr
-#define PL_Tmaxscream PL_maxscream
-#define PL_Tmodcount PL_modcount
-#define PL_Tna PL_na
-#define PL_Tnrs PL_nrs
-#define PL_Tofs PL_ofs
-#define PL_Tofslen PL_ofslen
-#define PL_Top PL_op
-#define PL_Topsave PL_opsave
-#define PL_Tprotect PL_protect
-#define PL_Treg_call_cc PL_reg_call_cc
-#define PL_Treg_curpm PL_reg_curpm
-#define PL_Treg_eval_set PL_reg_eval_set
-#define PL_Treg_flags PL_reg_flags
-#define PL_Treg_ganch PL_reg_ganch
-#define PL_Treg_leftiter PL_reg_leftiter
-#define PL_Treg_magic PL_reg_magic
-#define PL_Treg_maxiter PL_reg_maxiter
-#define PL_Treg_oldcurpm PL_reg_oldcurpm
-#define PL_Treg_oldpos PL_reg_oldpos
-#define PL_Treg_oldsaved PL_reg_oldsaved
-#define PL_Treg_oldsavedlen PL_reg_oldsavedlen
-#define PL_Treg_poscache PL_reg_poscache
-#define PL_Treg_poscache_size PL_reg_poscache_size
-#define PL_Treg_re PL_reg_re
-#define PL_Treg_start_tmp PL_reg_start_tmp
-#define PL_Treg_start_tmpl PL_reg_start_tmpl
-#define PL_Treg_starttry PL_reg_starttry
-#define PL_Treg_sv PL_reg_sv
-#define PL_Treg_whilem_seen PL_reg_whilem_seen
-#define PL_Tregbol PL_regbol
-#define PL_Tregcc PL_regcc
-#define PL_Tregcode PL_regcode
-#define PL_Tregcomp_parse PL_regcomp_parse
-#define PL_Tregcomp_rx PL_regcomp_rx
-#define PL_Tregcompp PL_regcompp
-#define PL_Tregdata PL_regdata
-#define PL_Tregdummy PL_regdummy
-#define PL_Tregendp PL_regendp
-#define PL_Tregeol PL_regeol
-#define PL_Tregexecp PL_regexecp
-#define PL_Tregflags PL_regflags
-#define PL_Tregfree PL_regfree
-#define PL_Tregindent PL_regindent
-#define PL_Treginput PL_reginput
-#define PL_Tregint_start PL_regint_start
-#define PL_Tregint_string PL_regint_string
-#define PL_Treginterp_cnt PL_reginterp_cnt
-#define PL_Treglastparen PL_reglastparen
-#define PL_Tregnarrate PL_regnarrate
-#define PL_Tregnaughty PL_regnaughty
-#define PL_Tregnpar PL_regnpar
-#define PL_Tregprecomp PL_regprecomp
-#define PL_Tregprev PL_regprev
-#define PL_Tregprogram PL_regprogram
-#define PL_Tregsawback PL_regsawback
-#define PL_Tregseen PL_regseen
-#define PL_Tregsize PL_regsize
-#define PL_Tregstartp PL_regstartp
-#define PL_Tregtill PL_regtill
-#define PL_Tregxend PL_regxend
-#define PL_Trestartop PL_restartop
-#define PL_Tretstack PL_retstack
-#define PL_Tretstack_ix PL_retstack_ix
-#define PL_Tretstack_max PL_retstack_max
-#define PL_Trs PL_rs
-#define PL_Tsavestack PL_savestack
-#define PL_Tsavestack_ix PL_savestack_ix
-#define PL_Tsavestack_max PL_savestack_max
-#define PL_Tscopestack PL_scopestack
-#define PL_Tscopestack_ix PL_scopestack_ix
-#define PL_Tscopestack_max PL_scopestack_max
-#define PL_Tscreamfirst PL_screamfirst
-#define PL_Tscreamnext PL_screamnext
-#define PL_Tsecondgv PL_secondgv
-#define PL_Tseen_evals PL_seen_evals
-#define PL_Tseen_zerolen PL_seen_zerolen
-#define PL_Tsortcop PL_sortcop
-#define PL_Tsortcxix PL_sortcxix
-#define PL_Tsortstash PL_sortstash
-#define PL_Tstack_base PL_stack_base
-#define PL_Tstack_max PL_stack_max
-#define PL_Tstack_sp PL_stack_sp
-#define PL_Tstart_env PL_start_env
-#define PL_Tstatbuf PL_statbuf
-#define PL_Tstatcache PL_statcache
-#define PL_Tstatgv PL_statgv
-#define PL_Tstatname PL_statname
-#define PL_Ttainted PL_tainted
-#define PL_Ttimesbuf PL_timesbuf
-#define PL_Ttmps_floor PL_tmps_floor
-#define PL_Ttmps_ix PL_tmps_ix
-#define PL_Ttmps_max PL_tmps_max
-#define PL_Ttmps_stack PL_tmps_stack
-#define PL_Ttop_env PL_top_env
-#define PL_Ttoptarget PL_toptarget
-#define PL_Twatchaddr PL_watchaddr
-#define PL_Twatchok PL_watchok
-
-# endif /* USE_THREADS */
-# endif /* PERL_OBJECT */
-#endif /* MULTIPLICITY */
-
-#if defined(PERL_GLOBAL_STRUCT)
-
-#define PL_No (PL_Vars.GNo)
-#define PL_Yes (PL_Vars.GYes)
-#define PL_curinterp (PL_Vars.Gcurinterp)
-#define PL_do_undump (PL_Vars.Gdo_undump)
-#define PL_hexdigit (PL_Vars.Ghexdigit)
-#define PL_malloc_mutex (PL_Vars.Gmalloc_mutex)
-#define PL_op_mutex (PL_Vars.Gop_mutex)
-#define PL_patleave (PL_Vars.Gpatleave)
-#define PL_thr_key (PL_Vars.Gthr_key)
-
-#else /* !PERL_GLOBAL_STRUCT */
-
-#define PL_GNo PL_No
-#define PL_GYes PL_Yes
-#define PL_Gcurinterp PL_curinterp
-#define PL_Gdo_undump PL_do_undump
-#define PL_Ghexdigit PL_hexdigit
-#define PL_Gmalloc_mutex PL_malloc_mutex
-#define PL_Gop_mutex PL_op_mutex
-#define PL_Gpatleave PL_patleave
-#define PL_Gthr_key PL_thr_key
-
-#endif /* PERL_GLOBAL_STRUCT */
-
-#ifdef PERL_POLLUTE /* disabled by default in 5.6.0 */
-
-#define DBsingle PL_DBsingle
-#define DBsub PL_DBsub
-#define compiling PL_compiling
-#define curcop PL_curcop
-#define curstash PL_curstash
-#define debstash PL_debstash
-#define defgv PL_defgv
-#define diehook PL_diehook
-#define dirty PL_dirty
-#define dowarn PL_dowarn
-#define errgv PL_errgv
-#define na PL_na
-#define no_modify PL_no_modify
-#define perl_destruct_level PL_perl_destruct_level
-#define perldb PL_perldb
-#define ppaddr PL_ppaddr
-#define rsfp PL_rsfp
-#define rsfp_filters PL_rsfp_filters
-#define stack_base PL_stack_base
-#define stack_sp PL_stack_sp
-#define stdingv PL_stdingv
-#define sv_arenaroot PL_sv_arenaroot
-#define sv_no PL_sv_no
-#define sv_undef PL_sv_undef
-#define sv_yes PL_sv_yes
-#define tainted PL_tainted
-#define tainting PL_tainting
-
-#endif /* PERL_POLLUTE */
diff --git a/contrib/perl5/ext/B/B.pm b/contrib/perl5/ext/B/B.pm
deleted file mode 100644
index c58e769..0000000
--- a/contrib/perl5/ext/B/B.pm
+++ /dev/null
@@ -1,892 +0,0 @@
-# B.pm
-#
-# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-package B;
-use XSLoader ();
-require Exporter;
-@ISA = qw(Exporter);
-
-# walkoptree_slow comes from B.pm (you are there),
-# walkoptree comes from B.xs
-@EXPORT_OK = qw(minus_c ppname save_BEGINs
- class peekop cast_I32 cstring cchar hash threadsv_names
- main_root main_start main_cv svref_2object opnumber
- amagic_generation
- walkoptree_slow walkoptree walkoptree_exec walksymtable
- parents comppadlist sv_undef compile_stats timing_info
- begin_av init_av end_av);
-
-sub OPf_KIDS ();
-use strict;
-@B::SV::ISA = 'B::OBJECT';
-@B::NULL::ISA = 'B::SV';
-@B::PV::ISA = 'B::SV';
-@B::IV::ISA = 'B::SV';
-@B::NV::ISA = 'B::IV';
-@B::RV::ISA = 'B::SV';
-@B::PVIV::ISA = qw(B::PV B::IV);
-@B::PVNV::ISA = qw(B::PV B::NV);
-@B::PVMG::ISA = 'B::PVNV';
-@B::PVLV::ISA = 'B::PVMG';
-@B::BM::ISA = 'B::PVMG';
-@B::AV::ISA = 'B::PVMG';
-@B::GV::ISA = 'B::PVMG';
-@B::HV::ISA = 'B::PVMG';
-@B::CV::ISA = 'B::PVMG';
-@B::IO::ISA = 'B::PVMG';
-@B::FM::ISA = 'B::CV';
-
-@B::OP::ISA = 'B::OBJECT';
-@B::UNOP::ISA = 'B::OP';
-@B::BINOP::ISA = 'B::UNOP';
-@B::LOGOP::ISA = 'B::UNOP';
-@B::LISTOP::ISA = 'B::BINOP';
-@B::SVOP::ISA = 'B::OP';
-@B::PADOP::ISA = 'B::OP';
-@B::PVOP::ISA = 'B::OP';
-@B::CVOP::ISA = 'B::OP';
-@B::LOOP::ISA = 'B::LISTOP';
-@B::PMOP::ISA = 'B::LISTOP';
-@B::COP::ISA = 'B::OP';
-
-@B::SPECIAL::ISA = 'B::OBJECT';
-
-{
- # Stop "-w" from complaining about the lack of a real B::OBJECT class
- package B::OBJECT;
-}
-
-sub B::GV::SAFENAME {
- my $name = (shift())->NAME;
-
- # The regex below corresponds to the isCONTROLVAR macro
- # from toke.c
-
- $name =~ s/^([\cA-\cZ\c\\c[\c]\c?\c_\c^])/"^".chr(64 ^ ord($1))/e;
- return $name;
-}
-
-sub B::IV::int_value {
- my ($self) = @_;
- return (($self->FLAGS() & SVf_IVisUV()) ? $self->UVX : $self->IV);
-}
-
-my $debug;
-my $op_count = 0;
-my @parents = ();
-
-sub debug {
- my ($class, $value) = @_;
- $debug = $value;
- walkoptree_debug($value);
-}
-
-sub class {
- my $obj = shift;
- my $name = ref $obj;
- $name =~ s/^.*:://;
- return $name;
-}
-
-sub parents { \@parents }
-
-# For debugging
-sub peekop {
- my $op = shift;
- return sprintf("%s (0x%x) %s", class($op), $$op, $op->name);
-}
-
-sub walkoptree_slow {
- my($op, $method, $level) = @_;
- $op_count++; # just for statistics
- $level ||= 0;
- warn(sprintf("walkoptree: %d. %s\n", $level, peekop($op))) if $debug;
- $op->$method($level);
- if ($$op && ($op->flags & OPf_KIDS)) {
- my $kid;
- unshift(@parents, $op);
- for ($kid = $op->first; $$kid; $kid = $kid->sibling) {
- walkoptree_slow($kid, $method, $level + 1);
- }
- shift @parents;
- }
-}
-
-sub compile_stats {
- return "Total number of OPs processed: $op_count\n";
-}
-
-sub timing_info {
- my ($sec, $min, $hr) = localtime;
- my ($user, $sys) = times;
- sprintf("%02d:%02d:%02d user=$user sys=$sys",
- $hr, $min, $sec, $user, $sys);
-}
-
-my %symtable;
-
-sub clearsym {
- %symtable = ();
-}
-
-sub savesym {
- my ($obj, $value) = @_;
-# warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
- $symtable{sprintf("sym_%x", $$obj)} = $value;
-}
-
-sub objsym {
- my $obj = shift;
- return $symtable{sprintf("sym_%x", $$obj)};
-}
-
-sub walkoptree_exec {
- my ($op, $method, $level) = @_;
- $level ||= 0;
- my ($sym, $ppname);
- my $prefix = " " x $level;
- for (; $$op; $op = $op->next) {
- $sym = objsym($op);
- if (defined($sym)) {
- print $prefix, "goto $sym\n";
- return;
- }
- savesym($op, sprintf("%s (0x%lx)", class($op), $$op));
- $op->$method($level);
- $ppname = $op->name;
- if ($ppname =~
- /^(or|and|mapwhile|grepwhile|entertry|range|cond_expr)$/)
- {
- print $prefix, uc($1), " => {\n";
- walkoptree_exec($op->other, $method, $level + 1);
- print $prefix, "}\n";
- } elsif ($ppname eq "match" || $ppname eq "subst") {
- my $pmreplstart = $op->pmreplstart;
- if ($$pmreplstart) {
- print $prefix, "PMREPLSTART => {\n";
- walkoptree_exec($pmreplstart, $method, $level + 1);
- print $prefix, "}\n";
- }
- } elsif ($ppname eq "substcont") {
- print $prefix, "SUBSTCONT => {\n";
- walkoptree_exec($op->other->pmreplstart, $method, $level + 1);
- print $prefix, "}\n";
- $op = $op->other;
- } elsif ($ppname eq "enterloop") {
- print $prefix, "REDO => {\n";
- walkoptree_exec($op->redoop, $method, $level + 1);
- print $prefix, "}\n", $prefix, "NEXT => {\n";
- walkoptree_exec($op->nextop, $method, $level + 1);
- print $prefix, "}\n", $prefix, "LAST => {\n";
- walkoptree_exec($op->lastop, $method, $level + 1);
- print $prefix, "}\n";
- } elsif ($ppname eq "subst") {
- my $replstart = $op->pmreplstart;
- if ($$replstart) {
- print $prefix, "SUBST => {\n";
- walkoptree_exec($replstart, $method, $level + 1);
- print $prefix, "}\n";
- }
- }
- }
-}
-
-sub walksymtable {
- my ($symref, $method, $recurse, $prefix) = @_;
- my $sym;
- my $ref;
- no strict 'vars';
- local(*glob);
- $prefix = '' unless defined $prefix;
- while (($sym, $ref) = each %$symref) {
- *glob = "*main::".$prefix.$sym;
- if ($sym =~ /::$/) {
- $sym = $prefix . $sym;
- if ($sym ne "main::" && $sym ne "<none>::" && &$recurse($sym)) {
- walksymtable(\%glob, $method, $recurse, $sym);
- }
- } else {
- svref_2object(\*glob)->EGV->$method();
- }
- }
-}
-
-{
- package B::Section;
- my $output_fh;
- my %sections;
-
- sub new {
- my ($class, $section, $symtable, $default) = @_;
- $output_fh ||= FileHandle->new_tmpfile;
- my $obj = bless [-1, $section, $symtable, $default], $class;
- $sections{$section} = $obj;
- return $obj;
- }
-
- sub get {
- my ($class, $section) = @_;
- return $sections{$section};
- }
-
- sub add {
- my $section = shift;
- while (defined($_ = shift)) {
- print $output_fh "$section->[1]\t$_\n";
- $section->[0]++;
- }
- }
-
- sub index {
- my $section = shift;
- return $section->[0];
- }
-
- sub name {
- my $section = shift;
- return $section->[1];
- }
-
- sub symtable {
- my $section = shift;
- return $section->[2];
- }
-
- sub default {
- my $section = shift;
- return $section->[3];
- }
-
- sub output {
- my ($section, $fh, $format) = @_;
- my $name = $section->name;
- my $sym = $section->symtable || {};
- my $default = $section->default;
-
- seek($output_fh, 0, 0);
- while (<$output_fh>) {
- chomp;
- s/^(.*?)\t//;
- if ($1 eq $name) {
- s{(s\\_[0-9a-f]+)} {
- exists($sym->{$1}) ? $sym->{$1} : $default;
- }ge;
- printf $fh $format, $_;
- }
- }
- }
-}
-
-XSLoader::load 'B';
-
-1;
-
-__END__
-
-=head1 NAME
-
-B - The Perl Compiler
-
-=head1 SYNOPSIS
-
- use B;
-
-=head1 DESCRIPTION
-
-The C<B> module supplies classes which allow a Perl program to delve
-into its own innards. It is the module used to implement the
-"backends" of the Perl compiler. Usage of the compiler does not
-require knowledge of this module: see the F<O> module for the
-user-visible part. The C<B> module is of use to those who want to
-write new compiler backends. This documentation assumes that the
-reader knows a fair amount about perl's internals including such
-things as SVs, OPs and the internal symbol table and syntax tree
-of a program.
-
-=head1 OVERVIEW OF CLASSES
-
-The C structures used by Perl's internals to hold SV and OP
-information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a
-class hierarchy and the C<B> module gives access to them via a true
-object hierarchy. Structure fields which point to other objects
-(whether types of SV or types of OP) are represented by the C<B>
-module as Perl objects of the appropriate class. The bulk of the C<B>
-module is the methods for accessing fields of these structures. Note
-that all access is read-only: you cannot modify the internals by
-using this module.
-
-=head2 SV-RELATED CLASSES
-
-B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM, B::PVLV,
-B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes correspond in
-the obvious way to the underlying C structures of similar names. The
-inheritance hierarchy mimics the underlying C "inheritance". Access
-methods correspond to the underlying C macros for field access,
-usually with the leading "class indication" prefix removed (Sv, Av,
-Hv, ...). The leading prefix is only left in cases where its removal
-would cause a clash in method name. For example, C<GvREFCNT> stays
-as-is since its abbreviation would clash with the "superclass" method
-C<REFCNT> (corresponding to the C function C<SvREFCNT>).
-
-=head2 B::SV METHODS
-
-=over 4
-
-=item REFCNT
-
-=item FLAGS
-
-=back
-
-=head2 B::IV METHODS
-
-=over 4
-
-=item IV
-
-Returns the value of the IV, I<interpreted as
-a signed integer>. This will be misleading
-if C<FLAGS & SVf_IVisUV>. Perhaps you want the
-C<int_value> method instead?
-
-=item IVX
-
-=item UVX
-
-=item int_value
-
-This method returns the value of the IV as an integer.
-It differs from C<IV> in that it returns the correct
-value regardless of whether it's stored signed or
-unsigned.
-
-=item needs64bits
-
-=item packiv
-
-=back
-
-=head2 B::NV METHODS
-
-=over 4
-
-=item NV
-
-=item NVX
-
-=back
-
-=head2 B::RV METHODS
-
-=over 4
-
-=item RV
-
-=back
-
-=head2 B::PV METHODS
-
-=over 4
-
-=item PV
-
-This method is the one you usually want. It constructs a
-string using the length and offset information in the struct:
-for ordinary scalars it will return the string that you'd see
-from Perl, even if it contains null characters.
-
-=item PVX
-
-This method is less often useful. It assumes that the string
-stored in the struct is null-terminated, and disregards the
-length information.
-
-It is the appropriate method to use if you need to get the name
-of a lexical variable from a padname array. Lexical variable names
-are always stored with a null terminator, and the length field
-(SvCUR) is overloaded for other purposes and can't be relied on here.
-
-=back
-
-=head2 B::PVMG METHODS
-
-=over 4
-
-=item MAGIC
-
-=item SvSTASH
-
-=back
-
-=head2 B::MAGIC METHODS
-
-=over 4
-
-=item MOREMAGIC
-
-=item PRIVATE
-
-=item TYPE
-
-=item FLAGS
-
-=item OBJ
-
-=item PTR
-
-=back
-
-=head2 B::PVLV METHODS
-
-=over 4
-
-=item TARGOFF
-
-=item TARGLEN
-
-=item TYPE
-
-=item TARG
-
-=back
-
-=head2 B::BM METHODS
-
-=over 4
-
-=item USEFUL
-
-=item PREVIOUS
-
-=item RARE
-
-=item TABLE
-
-=back
-
-=head2 B::GV METHODS
-
-=over 4
-
-=item is_empty
-
-This method returns TRUE if the GP field of the GV is NULL.
-
-=item NAME
-
-=item SAFENAME
-
-This method returns the name of the glob, but if the first
-character of the name is a control character, then it converts
-it to ^X first, so that *^G would return "^G" rather than "\cG".
-
-It's useful if you want to print out the name of a variable.
-If you restrict yourself to globs which exist at compile-time
-then the result ought to be unambiguous, because code like
-C<${"^G"} = 1> is compiled as two ops - a constant string and
-a dereference (rv2gv) - so that the glob is created at runtime.
-
-If you're working with globs at runtime, and need to disambiguate
-*^G from *{"^G"}, then you should use the raw NAME method.
-
-=item STASH
-
-=item SV
-
-=item IO
-
-=item FORM
-
-=item AV
-
-=item HV
-
-=item EGV
-
-=item CV
-
-=item CVGEN
-
-=item LINE
-
-=item FILE
-
-=item FILEGV
-
-=item GvREFCNT
-
-=item FLAGS
-
-=back
-
-=head2 B::IO METHODS
-
-=over 4
-
-=item LINES
-
-=item PAGE
-
-=item PAGE_LEN
-
-=item LINES_LEFT
-
-=item TOP_NAME
-
-=item TOP_GV
-
-=item FMT_NAME
-
-=item FMT_GV
-
-=item BOTTOM_NAME
-
-=item BOTTOM_GV
-
-=item SUBPROCESS
-
-=item IoTYPE
-
-=item IoFLAGS
-
-=back
-
-=head2 B::AV METHODS
-
-=over 4
-
-=item FILL
-
-=item MAX
-
-=item OFF
-
-=item ARRAY
-
-=item AvFLAGS
-
-=back
-
-=head2 B::CV METHODS
-
-=over 4
-
-=item STASH
-
-=item START
-
-=item ROOT
-
-=item GV
-
-=item FILE
-
-=item DEPTH
-
-=item PADLIST
-
-=item OUTSIDE
-
-=item XSUB
-
-=item XSUBANY
-
-=item CvFLAGS
-
-=back
-
-=head2 B::HV METHODS
-
-=over 4
-
-=item FILL
-
-=item MAX
-
-=item KEYS
-
-=item RITER
-
-=item NAME
-
-=item PMROOT
-
-=item ARRAY
-
-=back
-
-=head2 OP-RELATED CLASSES
-
-B::OP, B::UNOP, B::BINOP, B::LOGOP, B::LISTOP, B::PMOP,
-B::SVOP, B::PADOP, B::PVOP, B::CVOP, B::LOOP, B::COP.
-These classes correspond in
-the obvious way to the underlying C structures of similar names. The
-inheritance hierarchy mimics the underlying C "inheritance". Access
-methods correspond to the underlying C structre field names, with the
-leading "class indication" prefix removed (op_).
-
-=head2 B::OP METHODS
-
-=over 4
-
-=item next
-
-=item sibling
-
-=item name
-
-This returns the op name as a string (e.g. "add", "rv2av").
-
-=item ppaddr
-
-This returns the function name as a string (e.g. "PL_ppaddr[OP_ADD]",
-"PL_ppaddr[OP_RV2AV]").
-
-=item desc
-
-This returns the op description from the global C PL_op_desc array
-(e.g. "addition" "array deref").
-
-=item targ
-
-=item type
-
-=item seq
-
-=item flags
-
-=item private
-
-=back
-
-=head2 B::UNOP METHOD
-
-=over 4
-
-=item first
-
-=back
-
-=head2 B::BINOP METHOD
-
-=over 4
-
-=item last
-
-=back
-
-=head2 B::LOGOP METHOD
-
-=over 4
-
-=item other
-
-=back
-
-=head2 B::LISTOP METHOD
-
-=over 4
-
-=item children
-
-=back
-
-=head2 B::PMOP METHODS
-
-=over 4
-
-=item pmreplroot
-
-=item pmreplstart
-
-=item pmnext
-
-=item pmregexp
-
-=item pmflags
-
-=item pmpermflags
-
-=item precomp
-
-=back
-
-=head2 B::SVOP METHOD
-
-=over 4
-
-=item sv
-
-=item gv
-
-=back
-
-=head2 B::PADOP METHOD
-
-=over 4
-
-=item padix
-
-=back
-
-=head2 B::PVOP METHOD
-
-=over 4
-
-=item pv
-
-=back
-
-=head2 B::LOOP METHODS
-
-=over 4
-
-=item redoop
-
-=item nextop
-
-=item lastop
-
-=back
-
-=head2 B::COP METHODS
-
-=over 4
-
-=item label
-
-=item stash
-
-=item file
-
-=item cop_seq
-
-=item arybase
-
-=item line
-
-=back
-
-=head1 FUNCTIONS EXPORTED BY C<B>
-
-The C<B> module exports a variety of functions: some are simple
-utility functions, others provide a Perl program with a way to
-get an initial "handle" on an internal object.
-
-=over 4
-
-=item main_cv
-
-Return the (faked) CV corresponding to the main part of the Perl
-program.
-
-=item init_av
-
-Returns the AV object (i.e. in class B::AV) representing INIT blocks.
-
-=item main_root
-
-Returns the root op (i.e. an object in the appropriate B::OP-derived
-class) of the main part of the Perl program.
-
-=item main_start
-
-Returns the starting op of the main part of the Perl program.
-
-=item comppadlist
-
-Returns the AV object (i.e. in class B::AV) of the global comppadlist.
-
-=item sv_undef
-
-Returns the SV object corresponding to the C variable C<sv_undef>.
-
-=item sv_yes
-
-Returns the SV object corresponding to the C variable C<sv_yes>.
-
-=item sv_no
-
-Returns the SV object corresponding to the C variable C<sv_no>.
-
-=item amagic_generation
-
-Returns the SV object corresponding to the C variable C<amagic_generation>.
-
-=item walkoptree(OP, METHOD)
-
-Does a tree-walk of the syntax tree based at OP and calls METHOD on
-each op it visits. Each node is visited before its children. If
-C<walkoptree_debug> (q.v.) has been called to turn debugging on then
-the method C<walkoptree_debug> is called on each op before METHOD is
-called.
-
-=item walkoptree_debug(DEBUG)
-
-Returns the current debugging flag for C<walkoptree>. If the optional
-DEBUG argument is non-zero, it sets the debugging flag to that. See
-the description of C<walkoptree> above for what the debugging flag
-does.
-
-=item walksymtable(SYMREF, METHOD, RECURSE)
-
-Walk the symbol table starting at SYMREF and call METHOD on each
-symbol visited. When the walk reached package symbols "Foo::" it
-invokes RECURSE and only recurses into the package if that sub
-returns true.
-
-=item svref_2object(SV)
-
-Takes any Perl variable and turns it into an object in the
-appropriate B::OP-derived or B::SV-derived class. Apart from functions
-such as C<main_root>, this is the primary way to get an initial
-"handle" on a internal perl data structure which can then be followed
-with the other access methods.
-
-=item ppname(OPNUM)
-
-Return the PP function name (e.g. "pp_add") of op number OPNUM.
-
-=item hash(STR)
-
-Returns a string in the form "0x..." representing the value of the
-internal hash function used by perl on string STR.
-
-=item cast_I32(I)
-
-Casts I to the internal I32 type used by that perl.
-
-
-=item minus_c
-
-Does the equivalent of the C<-c> command-line option. Obviously, this
-is only useful in a BEGIN block or else the flag is set too late.
-
-
-=item cstring(STR)
-
-Returns a double-quote-surrounded escaped version of STR which can
-be used as a string in C source code.
-
-=item class(OBJ)
-
-Returns the class of an object without the part of the classname
-preceding the first "::". This is used to turn "B::UNOP" into
-"UNOP" for example.
-
-=item threadsv_names
-
-In a perl compiled for threads, this returns a list of the special
-per-thread threadsv variables.
-
-=back
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B.xs b/contrib/perl5/ext/B/B.xs
deleted file mode 100644
index 1005747..0000000
--- a/contrib/perl5/ext/B/B.xs
+++ /dev/null
@@ -1,1285 +0,0 @@
-/* B.xs
- *
- * Copyright (c) 1996 Malcolm Beattie
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifdef PERL_OBJECT
-#undef PL_op_name
-#undef PL_opargs
-#undef PL_op_desc
-#define PL_op_name (get_op_names())
-#define PL_opargs (get_opargs())
-#define PL_op_desc (get_op_descs())
-#endif
-
-#ifdef PerlIO
-typedef PerlIO * InputStream;
-#else
-typedef FILE * InputStream;
-#endif
-
-
-static char *svclassnames[] = {
- "B::NULL",
- "B::IV",
- "B::NV",
- "B::RV",
- "B::PV",
- "B::PVIV",
- "B::PVNV",
- "B::PVMG",
- "B::BM",
- "B::PVLV",
- "B::AV",
- "B::HV",
- "B::CV",
- "B::GV",
- "B::FM",
- "B::IO",
-};
-
-typedef enum {
- OPc_NULL, /* 0 */
- OPc_BASEOP, /* 1 */
- OPc_UNOP, /* 2 */
- OPc_BINOP, /* 3 */
- OPc_LOGOP, /* 4 */
- OPc_LISTOP, /* 5 */
- OPc_PMOP, /* 6 */
- OPc_SVOP, /* 7 */
- OPc_PADOP, /* 8 */
- OPc_PVOP, /* 9 */
- OPc_CVOP, /* 10 */
- OPc_LOOP, /* 11 */
- OPc_COP /* 12 */
-} opclass;
-
-static char *opclassnames[] = {
- "B::NULL",
- "B::OP",
- "B::UNOP",
- "B::BINOP",
- "B::LOGOP",
- "B::LISTOP",
- "B::PMOP",
- "B::SVOP",
- "B::PADOP",
- "B::PVOP",
- "B::CVOP",
- "B::LOOP",
- "B::COP"
-};
-
-static int walkoptree_debug = 0; /* Flag for walkoptree debug hook */
-
-static SV *specialsv_list[6];
-
-static opclass
-cc_opclass(pTHX_ OP *o)
-{
- if (!o)
- return OPc_NULL;
-
- if (o->op_type == 0)
- return (o->op_flags & OPf_KIDS) ? OPc_UNOP : OPc_BASEOP;
-
- if (o->op_type == OP_SASSIGN)
- return ((o->op_private & OPpASSIGN_BACKWARDS) ? OPc_UNOP : OPc_BINOP);
-
-#ifdef USE_ITHREADS
- if (o->op_type == OP_GV || o->op_type == OP_GVSV || o->op_type == OP_AELEMFAST)
- return OPc_PADOP;
-#endif
-
- switch (PL_opargs[o->op_type] & OA_CLASS_MASK) {
- case OA_BASEOP:
- return OPc_BASEOP;
-
- case OA_UNOP:
- return OPc_UNOP;
-
- case OA_BINOP:
- return OPc_BINOP;
-
- case OA_LOGOP:
- return OPc_LOGOP;
-
- case OA_LISTOP:
- return OPc_LISTOP;
-
- case OA_PMOP:
- return OPc_PMOP;
-
- case OA_SVOP:
- return OPc_SVOP;
-
- case OA_PADOP:
- return OPc_PADOP;
-
- case OA_PVOP_OR_SVOP:
- /*
- * Character translations (tr///) are usually a PVOP, keeping a
- * pointer to a table of shorts used to look up translations.
- * Under utf8, however, a simple table isn't practical; instead,
- * the OP is an SVOP, and the SV is a reference to a swash
- * (i.e., an RV pointing to an HV).
- */
- return (o->op_private & (OPpTRANS_TO_UTF|OPpTRANS_FROM_UTF))
- ? OPc_SVOP : OPc_PVOP;
-
- case OA_LOOP:
- return OPc_LOOP;
-
- case OA_COP:
- return OPc_COP;
-
- case OA_BASEOP_OR_UNOP:
- /*
- * UNI(OP_foo) in toke.c returns token UNI or FUNC1 depending on
- * whether parens were seen. perly.y uses OPf_SPECIAL to
- * signal whether a BASEOP had empty parens or none.
- * Some other UNOPs are created later, though, so the best
- * test is OPf_KIDS, which is set in newUNOP.
- */
- return (o->op_flags & OPf_KIDS) ? OPc_UNOP : OPc_BASEOP;
-
- case OA_FILESTATOP:
- /*
- * The file stat OPs are created via UNI(OP_foo) in toke.c but use
- * the OPf_REF flag to distinguish between OP types instead of the
- * usual OPf_SPECIAL flag. As usual, if OPf_KIDS is set, then we
- * return OPc_UNOP so that walkoptree can find our children. If
- * OPf_KIDS is not set then we check OPf_REF. Without OPf_REF set
- * (no argument to the operator) it's an OP; with OPf_REF set it's
- * an SVOP (and op_sv is the GV for the filehandle argument).
- */
- return ((o->op_flags & OPf_KIDS) ? OPc_UNOP :
-#ifdef USE_ITHREADS
- (o->op_flags & OPf_REF) ? OPc_PADOP : OPc_BASEOP);
-#else
- (o->op_flags & OPf_REF) ? OPc_SVOP : OPc_BASEOP);
-#endif
- case OA_LOOPEXOP:
- /*
- * next, last, redo, dump and goto use OPf_SPECIAL to indicate that a
- * label was omitted (in which case it's a BASEOP) or else a term was
- * seen. In this last case, all except goto are definitely PVOP but
- * goto is either a PVOP (with an ordinary constant label), an UNOP
- * with OPf_STACKED (with a non-constant non-sub) or an UNOP for
- * OP_REFGEN (with goto &sub) in which case OPf_STACKED also seems to
- * get set.
- */
- if (o->op_flags & OPf_STACKED)
- return OPc_UNOP;
- else if (o->op_flags & OPf_SPECIAL)
- return OPc_BASEOP;
- else
- return OPc_PVOP;
- }
- warn("can't determine class of operator %s, assuming BASEOP\n",
- PL_op_name[o->op_type]);
- return OPc_BASEOP;
-}
-
-static char *
-cc_opclassname(pTHX_ OP *o)
-{
- return opclassnames[cc_opclass(aTHX_ o)];
-}
-
-static SV *
-make_sv_object(pTHX_ SV *arg, SV *sv)
-{
- char *type = 0;
- IV iv;
-
- for (iv = 0; iv < sizeof(specialsv_list)/sizeof(SV*); iv++) {
- if (sv == specialsv_list[iv]) {
- type = "B::SPECIAL";
- break;
- }
- }
- if (!type) {
- type = svclassnames[SvTYPE(sv)];
- iv = PTR2IV(sv);
- }
- sv_setiv(newSVrv(arg, type), iv);
- return arg;
-}
-
-static SV *
-make_mg_object(pTHX_ SV *arg, MAGIC *mg)
-{
- sv_setiv(newSVrv(arg, "B::MAGIC"), PTR2IV(mg));
- return arg;
-}
-
-static SV *
-cstring(pTHX_ SV *sv)
-{
- SV *sstr = newSVpvn("", 0);
- STRLEN len;
- char *s;
-
- if (!SvOK(sv))
- sv_setpvn(sstr, "0", 1);
- else
- {
- /* XXX Optimise? */
- s = SvPV(sv, len);
- sv_catpv(sstr, "\"");
- for (; len; len--, s++)
- {
- /* At least try a little for readability */
- if (*s == '"')
- sv_catpv(sstr, "\\\"");
- else if (*s == '\\')
- sv_catpv(sstr, "\\\\");
- else if (*s >= ' ' && *s < 127) /* XXX not portable */
- sv_catpvn(sstr, s, 1);
- else if (*s == '\n')
- sv_catpv(sstr, "\\n");
- else if (*s == '\r')
- sv_catpv(sstr, "\\r");
- else if (*s == '\t')
- sv_catpv(sstr, "\\t");
- else if (*s == '\a')
- sv_catpv(sstr, "\\a");
- else if (*s == '\b')
- sv_catpv(sstr, "\\b");
- else if (*s == '\f')
- sv_catpv(sstr, "\\f");
- else if (*s == '\v')
- sv_catpv(sstr, "\\v");
- else
- {
- /* no trigraph support */
- char escbuff[5]; /* to fit backslash, 3 octals + trailing \0 */
- /* Don't want promotion of a signed -1 char in sprintf args */
- unsigned char c = (unsigned char) *s;
- sprintf(escbuff, "\\%03o", c);
- sv_catpv(sstr, escbuff);
- }
- /* XXX Add line breaks if string is long */
- }
- sv_catpv(sstr, "\"");
- }
- return sstr;
-}
-
-static SV *
-cchar(pTHX_ SV *sv)
-{
- SV *sstr = newSVpvn("'", 1);
- STRLEN n_a;
- char *s = SvPV(sv, n_a);
-
- if (*s == '\'')
- sv_catpv(sstr, "\\'");
- else if (*s == '\\')
- sv_catpv(sstr, "\\\\");
- else if (*s >= ' ' && *s < 127) /* XXX not portable */
- sv_catpvn(sstr, s, 1);
- else if (*s == '\n')
- sv_catpv(sstr, "\\n");
- else if (*s == '\r')
- sv_catpv(sstr, "\\r");
- else if (*s == '\t')
- sv_catpv(sstr, "\\t");
- else if (*s == '\a')
- sv_catpv(sstr, "\\a");
- else if (*s == '\b')
- sv_catpv(sstr, "\\b");
- else if (*s == '\f')
- sv_catpv(sstr, "\\f");
- else if (*s == '\v')
- sv_catpv(sstr, "\\v");
- else
- {
- /* no trigraph support */
- char escbuff[5]; /* to fit backslash, 3 octals + trailing \0 */
- /* Don't want promotion of a signed -1 char in sprintf args */
- unsigned char c = (unsigned char) *s;
- sprintf(escbuff, "\\%03o", c);
- sv_catpv(sstr, escbuff);
- }
- sv_catpv(sstr, "'");
- return sstr;
-}
-
-void
-walkoptree(pTHX_ SV *opsv, char *method)
-{
- dSP;
- OP *o;
-
- if (!SvROK(opsv))
- croak("opsv is not a reference");
- opsv = sv_mortalcopy(opsv);
- o = INT2PTR(OP*,SvIV((SV*)SvRV(opsv)));
- if (walkoptree_debug) {
- PUSHMARK(sp);
- XPUSHs(opsv);
- PUTBACK;
- perl_call_method("walkoptree_debug", G_DISCARD);
- }
- PUSHMARK(sp);
- XPUSHs(opsv);
- PUTBACK;
- perl_call_method(method, G_DISCARD);
- if (o && (o->op_flags & OPf_KIDS)) {
- OP *kid;
- for (kid = ((UNOP*)o)->op_first; kid; kid = kid->op_sibling) {
- /* Use the same opsv. Rely on methods not to mess it up. */
- sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), PTR2IV(kid));
- walkoptree(aTHX_ opsv, method);
- }
- }
-}
-
-typedef OP *B__OP;
-typedef UNOP *B__UNOP;
-typedef BINOP *B__BINOP;
-typedef LOGOP *B__LOGOP;
-typedef LISTOP *B__LISTOP;
-typedef PMOP *B__PMOP;
-typedef SVOP *B__SVOP;
-typedef PADOP *B__PADOP;
-typedef PVOP *B__PVOP;
-typedef LOOP *B__LOOP;
-typedef COP *B__COP;
-
-typedef SV *B__SV;
-typedef SV *B__IV;
-typedef SV *B__PV;
-typedef SV *B__NV;
-typedef SV *B__PVMG;
-typedef SV *B__PVLV;
-typedef SV *B__BM;
-typedef SV *B__RV;
-typedef AV *B__AV;
-typedef HV *B__HV;
-typedef CV *B__CV;
-typedef GV *B__GV;
-typedef IO *B__IO;
-
-typedef MAGIC *B__MAGIC;
-
-MODULE = B PACKAGE = B PREFIX = B_
-
-PROTOTYPES: DISABLE
-
-BOOT:
-{
- HV *stash = gv_stashpvn("B", 1, TRUE);
- AV *export_ok = perl_get_av("B::EXPORT_OK",TRUE);
- specialsv_list[0] = Nullsv;
- specialsv_list[1] = &PL_sv_undef;
- specialsv_list[2] = &PL_sv_yes;
- specialsv_list[3] = &PL_sv_no;
- specialsv_list[4] = pWARN_ALL;
- specialsv_list[5] = pWARN_NONE;
-#include "defsubs.h"
-}
-
-#define B_main_cv() PL_main_cv
-#define B_init_av() PL_initav
-#define B_begin_av() PL_beginav_save
-#define B_end_av() PL_endav
-#define B_main_root() PL_main_root
-#define B_main_start() PL_main_start
-#define B_amagic_generation() PL_amagic_generation
-#define B_comppadlist() (PL_main_cv ? CvPADLIST(PL_main_cv) : CvPADLIST(PL_compcv))
-#define B_sv_undef() &PL_sv_undef
-#define B_sv_yes() &PL_sv_yes
-#define B_sv_no() &PL_sv_no
-
-B::AV
-B_init_av()
-
-B::AV
-B_begin_av()
-
-B::AV
-B_end_av()
-
-B::CV
-B_main_cv()
-
-B::OP
-B_main_root()
-
-B::OP
-B_main_start()
-
-long
-B_amagic_generation()
-
-B::AV
-B_comppadlist()
-
-B::SV
-B_sv_undef()
-
-B::SV
-B_sv_yes()
-
-B::SV
-B_sv_no()
-
-MODULE = B PACKAGE = B
-
-
-void
-walkoptree(opsv, method)
- SV * opsv
- char * method
- CODE:
- walkoptree(aTHX_ opsv, method);
-
-int
-walkoptree_debug(...)
- CODE:
- RETVAL = walkoptree_debug;
- if (items > 0 && SvTRUE(ST(1)))
- walkoptree_debug = 1;
- OUTPUT:
- RETVAL
-
-#define address(sv) PTR2IV(sv)
-
-IV
-address(sv)
- SV * sv
-
-B::SV
-svref_2object(sv)
- SV * sv
- CODE:
- if (!SvROK(sv))
- croak("argument is not a reference");
- RETVAL = (SV*)SvRV(sv);
- OUTPUT:
- RETVAL
-
-void
-opnumber(name)
-char * name
-CODE:
-{
- int i;
- IV result = -1;
- ST(0) = sv_newmortal();
- if (strncmp(name,"pp_",3) == 0)
- name += 3;
- for (i = 0; i < PL_maxo; i++)
- {
- if (strcmp(name, PL_op_name[i]) == 0)
- {
- result = i;
- break;
- }
- }
- sv_setiv(ST(0),result);
-}
-
-void
-ppname(opnum)
- int opnum
- CODE:
- ST(0) = sv_newmortal();
- if (opnum >= 0 && opnum < PL_maxo) {
- sv_setpvn(ST(0), "pp_", 3);
- sv_catpv(ST(0), PL_op_name[opnum]);
- }
-
-void
-hash(sv)
- SV * sv
- CODE:
- char *s;
- STRLEN len;
- U32 hash = 0;
- char hexhash[19]; /* must fit "0xffffffffffffffff" plus trailing \0 */
- s = SvPV(sv, len);
- PERL_HASH(hash, s, len);
- sprintf(hexhash, "0x%"UVxf, (UV)hash);
- ST(0) = sv_2mortal(newSVpv(hexhash, 0));
-
-#define cast_I32(foo) (I32)foo
-IV
-cast_I32(i)
- IV i
-
-void
-minus_c()
- CODE:
- PL_minus_c = TRUE;
-
-void
-save_BEGINs()
- CODE:
- PL_minus_c |= 0x10;
-
-SV *
-cstring(sv)
- SV * sv
- CODE:
- RETVAL = cstring(aTHX_ sv);
- OUTPUT:
- RETVAL
-
-SV *
-cchar(sv)
- SV * sv
- CODE:
- RETVAL = cchar(aTHX_ sv);
- OUTPUT:
- RETVAL
-
-void
-threadsv_names()
- PPCODE:
-#ifdef USE_THREADS
- int i;
- STRLEN len = strlen(PL_threadsv_names);
-
- EXTEND(sp, len);
- for (i = 0; i < len; i++)
- PUSHs(sv_2mortal(newSVpvn(&PL_threadsv_names[i], 1)));
-#endif
-
-
-#define OP_next(o) o->op_next
-#define OP_sibling(o) o->op_sibling
-#define OP_desc(o) PL_op_desc[o->op_type]
-#define OP_targ(o) o->op_targ
-#define OP_type(o) o->op_type
-#define OP_seq(o) o->op_seq
-#define OP_flags(o) o->op_flags
-#define OP_private(o) o->op_private
-
-MODULE = B PACKAGE = B::OP PREFIX = OP_
-
-B::OP
-OP_next(o)
- B::OP o
-
-B::OP
-OP_sibling(o)
- B::OP o
-
-char *
-OP_name(o)
- B::OP o
- CODE:
- RETVAL = PL_op_name[o->op_type];
- OUTPUT:
- RETVAL
-
-
-void
-OP_ppaddr(o)
- B::OP o
- PREINIT:
- int i;
- SV *sv = sv_newmortal();
- CODE:
- sv_setpvn(sv, "PL_ppaddr[OP_", 13);
- sv_catpv(sv, PL_op_name[o->op_type]);
- for (i=13; i<SvCUR(sv); ++i)
- SvPVX(sv)[i] = toUPPER(SvPVX(sv)[i]);
- sv_catpv(sv, "]");
- ST(0) = sv;
-
-char *
-OP_desc(o)
- B::OP o
-
-PADOFFSET
-OP_targ(o)
- B::OP o
-
-U16
-OP_type(o)
- B::OP o
-
-U16
-OP_seq(o)
- B::OP o
-
-U8
-OP_flags(o)
- B::OP o
-
-U8
-OP_private(o)
- B::OP o
-
-#define UNOP_first(o) o->op_first
-
-MODULE = B PACKAGE = B::UNOP PREFIX = UNOP_
-
-B::OP
-UNOP_first(o)
- B::UNOP o
-
-#define BINOP_last(o) o->op_last
-
-MODULE = B PACKAGE = B::BINOP PREFIX = BINOP_
-
-B::OP
-BINOP_last(o)
- B::BINOP o
-
-#define LOGOP_other(o) o->op_other
-
-MODULE = B PACKAGE = B::LOGOP PREFIX = LOGOP_
-
-B::OP
-LOGOP_other(o)
- B::LOGOP o
-
-MODULE = B PACKAGE = B::LISTOP PREFIX = LISTOP_
-
-U32
-LISTOP_children(o)
- B::LISTOP o
- OP * kid = NO_INIT
- int i = NO_INIT
- CODE:
- i = 0;
- for (kid = o->op_first; kid; kid = kid->op_sibling)
- i++;
- RETVAL = i;
- OUTPUT:
- RETVAL
-
-#define PMOP_pmreplroot(o) o->op_pmreplroot
-#define PMOP_pmreplstart(o) o->op_pmreplstart
-#define PMOP_pmnext(o) o->op_pmnext
-#define PMOP_pmregexp(o) o->op_pmregexp
-#define PMOP_pmflags(o) o->op_pmflags
-#define PMOP_pmpermflags(o) o->op_pmpermflags
-
-MODULE = B PACKAGE = B::PMOP PREFIX = PMOP_
-
-void
-PMOP_pmreplroot(o)
- B::PMOP o
- OP * root = NO_INIT
- CODE:
- ST(0) = sv_newmortal();
- root = o->op_pmreplroot;
- /* OP_PUSHRE stores an SV* instead of an OP* in op_pmreplroot */
- if (o->op_type == OP_PUSHRE) {
- sv_setiv(newSVrv(ST(0), root ?
- svclassnames[SvTYPE((SV*)root)] : "B::SV"),
- PTR2IV(root));
- }
- else {
- sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), PTR2IV(root));
- }
-
-B::OP
-PMOP_pmreplstart(o)
- B::PMOP o
-
-B::PMOP
-PMOP_pmnext(o)
- B::PMOP o
-
-U16
-PMOP_pmflags(o)
- B::PMOP o
-
-U16
-PMOP_pmpermflags(o)
- B::PMOP o
-
-void
-PMOP_precomp(o)
- B::PMOP o
- REGEXP * rx = NO_INIT
- CODE:
- ST(0) = sv_newmortal();
- rx = o->op_pmregexp;
- if (rx)
- sv_setpvn(ST(0), rx->precomp, rx->prelen);
-
-#define SVOP_sv(o) cSVOPo->op_sv
-#define SVOP_gv(o) ((GV*)cSVOPo->op_sv)
-
-MODULE = B PACKAGE = B::SVOP PREFIX = SVOP_
-
-B::SV
-SVOP_sv(o)
- B::SVOP o
-
-B::GV
-SVOP_gv(o)
- B::SVOP o
-
-#define PADOP_padix(o) o->op_padix
-#define PADOP_sv(o) (o->op_padix ? PL_curpad[o->op_padix] : Nullsv)
-#define PADOP_gv(o) ((o->op_padix \
- && SvTYPE(PL_curpad[o->op_padix]) == SVt_PVGV) \
- ? (GV*)PL_curpad[o->op_padix] : Nullgv)
-
-MODULE = B PACKAGE = B::PADOP PREFIX = PADOP_
-
-PADOFFSET
-PADOP_padix(o)
- B::PADOP o
-
-B::SV
-PADOP_sv(o)
- B::PADOP o
-
-B::GV
-PADOP_gv(o)
- B::PADOP o
-
-MODULE = B PACKAGE = B::PVOP PREFIX = PVOP_
-
-void
-PVOP_pv(o)
- B::PVOP o
- CODE:
- /*
- * OP_TRANS uses op_pv to point to a table of 256 shorts
- * whereas other PVOPs point to a null terminated string.
- */
- ST(0) = sv_2mortal(newSVpv(o->op_pv, (o->op_type == OP_TRANS) ?
- 256 * sizeof(short) : 0));
-
-#define LOOP_redoop(o) o->op_redoop
-#define LOOP_nextop(o) o->op_nextop
-#define LOOP_lastop(o) o->op_lastop
-
-MODULE = B PACKAGE = B::LOOP PREFIX = LOOP_
-
-
-B::OP
-LOOP_redoop(o)
- B::LOOP o
-
-B::OP
-LOOP_nextop(o)
- B::LOOP o
-
-B::OP
-LOOP_lastop(o)
- B::LOOP o
-
-#define COP_label(o) o->cop_label
-#define COP_stashpv(o) CopSTASHPV(o)
-#define COP_stash(o) CopSTASH(o)
-#define COP_file(o) CopFILE(o)
-#define COP_cop_seq(o) o->cop_seq
-#define COP_arybase(o) o->cop_arybase
-#define COP_line(o) CopLINE(o)
-#define COP_warnings(o) o->cop_warnings
-
-MODULE = B PACKAGE = B::COP PREFIX = COP_
-
-char *
-COP_label(o)
- B::COP o
-
-char *
-COP_stashpv(o)
- B::COP o
-
-B::HV
-COP_stash(o)
- B::COP o
-
-char *
-COP_file(o)
- B::COP o
-
-U32
-COP_cop_seq(o)
- B::COP o
-
-I32
-COP_arybase(o)
- B::COP o
-
-U16
-COP_line(o)
- B::COP o
-
-B::SV
-COP_warnings(o)
- B::COP o
-
-MODULE = B PACKAGE = B::SV PREFIX = Sv
-
-U32
-SvREFCNT(sv)
- B::SV sv
-
-U32
-SvFLAGS(sv)
- B::SV sv
-
-MODULE = B PACKAGE = B::IV PREFIX = Sv
-
-IV
-SvIV(sv)
- B::IV sv
-
-IV
-SvIVX(sv)
- B::IV sv
-
-UV
-SvUVX(sv)
- B::IV sv
-
-
-MODULE = B PACKAGE = B::IV
-
-#define needs64bits(sv) ((I32)SvIVX(sv) != SvIVX(sv))
-
-int
-needs64bits(sv)
- B::IV sv
-
-void
-packiv(sv)
- B::IV sv
- CODE:
- if (sizeof(IV) == 8) {
- U32 wp[2];
- IV iv = SvIVX(sv);
- /*
- * The following way of spelling 32 is to stop compilers on
- * 32-bit architectures from moaning about the shift count
- * being >= the width of the type. Such architectures don't
- * reach this code anyway (unless sizeof(IV) > 8 but then
- * everything else breaks too so I'm not fussed at the moment).
- */
-#ifdef UV_IS_QUAD
- wp[0] = htonl(((UV)iv) >> (sizeof(UV)*4));
-#else
- wp[0] = htonl(((U32)iv) >> (sizeof(UV)*4));
-#endif
- wp[1] = htonl(iv & 0xffffffff);
- ST(0) = sv_2mortal(newSVpvn((char *)wp, 8));
- } else {
- U32 w = htonl((U32)SvIVX(sv));
- ST(0) = sv_2mortal(newSVpvn((char *)&w, 4));
- }
-
-MODULE = B PACKAGE = B::NV PREFIX = Sv
-
-NV
-SvNV(sv)
- B::NV sv
-
-NV
-SvNVX(sv)
- B::NV sv
-
-MODULE = B PACKAGE = B::RV PREFIX = Sv
-
-B::SV
-SvRV(sv)
- B::RV sv
-
-MODULE = B PACKAGE = B::PV PREFIX = Sv
-
-char*
-SvPVX(sv)
- B::PV sv
-
-void
-SvPV(sv)
- B::PV sv
- CODE:
- ST(0) = sv_newmortal();
- sv_setpvn(ST(0), SvPVX(sv), SvCUR(sv));
-
-STRLEN
-SvLEN(sv)
- B::PV sv
-
-STRLEN
-SvCUR(sv)
- B::PV sv
-
-MODULE = B PACKAGE = B::PVMG PREFIX = Sv
-
-void
-SvMAGIC(sv)
- B::PVMG sv
- MAGIC * mg = NO_INIT
- PPCODE:
- for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic)
- XPUSHs(make_mg_object(aTHX_ sv_newmortal(), mg));
-
-MODULE = B PACKAGE = B::PVMG
-
-B::HV
-SvSTASH(sv)
- B::PVMG sv
-
-#define MgMOREMAGIC(mg) mg->mg_moremagic
-#define MgPRIVATE(mg) mg->mg_private
-#define MgTYPE(mg) mg->mg_type
-#define MgFLAGS(mg) mg->mg_flags
-#define MgOBJ(mg) mg->mg_obj
-#define MgLENGTH(mg) mg->mg_len
-
-MODULE = B PACKAGE = B::MAGIC PREFIX = Mg
-
-B::MAGIC
-MgMOREMAGIC(mg)
- B::MAGIC mg
-
-U16
-MgPRIVATE(mg)
- B::MAGIC mg
-
-char
-MgTYPE(mg)
- B::MAGIC mg
-
-U8
-MgFLAGS(mg)
- B::MAGIC mg
-
-B::SV
-MgOBJ(mg)
- B::MAGIC mg
-
-I32
-MgLENGTH(mg)
- B::MAGIC mg
-
-void
-MgPTR(mg)
- B::MAGIC mg
- CODE:
- ST(0) = sv_newmortal();
- if (mg->mg_ptr){
- if (mg->mg_len >= 0){
- sv_setpvn(ST(0), mg->mg_ptr, mg->mg_len);
- } else {
- if (mg->mg_len == HEf_SVKEY)
- sv_setsv(ST(0),newRV((SV*)mg->mg_ptr));
- }
- }
-
-MODULE = B PACKAGE = B::PVLV PREFIX = Lv
-
-U32
-LvTARGOFF(sv)
- B::PVLV sv
-
-U32
-LvTARGLEN(sv)
- B::PVLV sv
-
-char
-LvTYPE(sv)
- B::PVLV sv
-
-B::SV
-LvTARG(sv)
- B::PVLV sv
-
-MODULE = B PACKAGE = B::BM PREFIX = Bm
-
-I32
-BmUSEFUL(sv)
- B::BM sv
-
-U16
-BmPREVIOUS(sv)
- B::BM sv
-
-U8
-BmRARE(sv)
- B::BM sv
-
-void
-BmTABLE(sv)
- B::BM sv
- STRLEN len = NO_INIT
- char * str = NO_INIT
- CODE:
- str = SvPV(sv, len);
- /* Boyer-Moore table is just after string and its safety-margin \0 */
- ST(0) = sv_2mortal(newSVpvn(str + len + 1, 256));
-
-MODULE = B PACKAGE = B::GV PREFIX = Gv
-
-void
-GvNAME(gv)
- B::GV gv
- CODE:
- ST(0) = sv_2mortal(newSVpvn(GvNAME(gv), GvNAMELEN(gv)));
-
-bool
-is_empty(gv)
- B::GV gv
- CODE:
- RETVAL = GvGP(gv) == Null(GP*);
- OUTPUT:
- RETVAL
-
-B::HV
-GvSTASH(gv)
- B::GV gv
-
-B::SV
-GvSV(gv)
- B::GV gv
-
-B::IO
-GvIO(gv)
- B::GV gv
-
-B::CV
-GvFORM(gv)
- B::GV gv
-
-B::AV
-GvAV(gv)
- B::GV gv
-
-B::HV
-GvHV(gv)
- B::GV gv
-
-B::GV
-GvEGV(gv)
- B::GV gv
-
-B::CV
-GvCV(gv)
- B::GV gv
-
-U32
-GvCVGEN(gv)
- B::GV gv
-
-U16
-GvLINE(gv)
- B::GV gv
-
-char *
-GvFILE(gv)
- B::GV gv
-
-B::GV
-GvFILEGV(gv)
- B::GV gv
-
-MODULE = B PACKAGE = B::GV
-
-U32
-GvREFCNT(gv)
- B::GV gv
-
-U8
-GvFLAGS(gv)
- B::GV gv
-
-MODULE = B PACKAGE = B::IO PREFIX = Io
-
-long
-IoLINES(io)
- B::IO io
-
-long
-IoPAGE(io)
- B::IO io
-
-long
-IoPAGE_LEN(io)
- B::IO io
-
-long
-IoLINES_LEFT(io)
- B::IO io
-
-char *
-IoTOP_NAME(io)
- B::IO io
-
-B::GV
-IoTOP_GV(io)
- B::IO io
-
-char *
-IoFMT_NAME(io)
- B::IO io
-
-B::GV
-IoFMT_GV(io)
- B::IO io
-
-char *
-IoBOTTOM_NAME(io)
- B::IO io
-
-B::GV
-IoBOTTOM_GV(io)
- B::IO io
-
-short
-IoSUBPROCESS(io)
- B::IO io
-
-MODULE = B PACKAGE = B::IO
-
-char
-IoTYPE(io)
- B::IO io
-
-U8
-IoFLAGS(io)
- B::IO io
-
-MODULE = B PACKAGE = B::AV PREFIX = Av
-
-SSize_t
-AvFILL(av)
- B::AV av
-
-SSize_t
-AvMAX(av)
- B::AV av
-
-#define AvOFF(av) ((XPVAV*)SvANY(av))->xof_off
-
-IV
-AvOFF(av)
- B::AV av
-
-void
-AvARRAY(av)
- B::AV av
- PPCODE:
- if (AvFILL(av) >= 0) {
- SV **svp = AvARRAY(av);
- I32 i;
- for (i = 0; i <= AvFILL(av); i++)
- XPUSHs(make_sv_object(aTHX_ sv_newmortal(), svp[i]));
- }
-
-MODULE = B PACKAGE = B::AV
-
-U8
-AvFLAGS(av)
- B::AV av
-
-MODULE = B PACKAGE = B::CV PREFIX = Cv
-
-B::HV
-CvSTASH(cv)
- B::CV cv
-
-B::OP
-CvSTART(cv)
- B::CV cv
-
-B::OP
-CvROOT(cv)
- B::CV cv
-
-B::GV
-CvGV(cv)
- B::CV cv
-
-char *
-CvFILE(cv)
- B::CV cv
-
-long
-CvDEPTH(cv)
- B::CV cv
-
-B::AV
-CvPADLIST(cv)
- B::CV cv
-
-B::CV
-CvOUTSIDE(cv)
- B::CV cv
-
-void
-CvXSUB(cv)
- B::CV cv
- CODE:
- ST(0) = sv_2mortal(newSViv(PTR2IV(CvXSUB(cv))));
-
-
-void
-CvXSUBANY(cv)
- B::CV cv
- CODE:
- ST(0) = sv_2mortal(newSViv(CvXSUBANY(cv).any_iv));
-
-MODULE = B PACKAGE = B::CV
-
-U16
-CvFLAGS(cv)
- B::CV cv
-
-
-MODULE = B PACKAGE = B::HV PREFIX = Hv
-
-STRLEN
-HvFILL(hv)
- B::HV hv
-
-STRLEN
-HvMAX(hv)
- B::HV hv
-
-I32
-HvKEYS(hv)
- B::HV hv
-
-I32
-HvRITER(hv)
- B::HV hv
-
-char *
-HvNAME(hv)
- B::HV hv
-
-B::PMOP
-HvPMROOT(hv)
- B::HV hv
-
-void
-HvARRAY(hv)
- B::HV hv
- PPCODE:
- if (HvKEYS(hv) > 0) {
- SV *sv;
- char *key;
- I32 len;
- (void)hv_iterinit(hv);
- EXTEND(sp, HvKEYS(hv) * 2);
- while ((sv = hv_iternextsv(hv, &key, &len))) {
- PUSHs(newSVpvn(key, len));
- PUSHs(make_sv_object(aTHX_ sv_newmortal(), sv));
- }
- }
diff --git a/contrib/perl5/ext/B/B/Asmdata.pm b/contrib/perl5/ext/B/B/Asmdata.pm
deleted file mode 100644
index dc176be..0000000
--- a/contrib/perl5/ext/B/B/Asmdata.pm
+++ /dev/null
@@ -1,172 +0,0 @@
-#
-# Copyright (c) 1996-1999 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-#
-#
-# This file is autogenerated from bytecode.pl. Changes made here will be lost.
-#
-package B::Asmdata;
-use Exporter;
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(%insn_data @insn_name @optype @specialsv_name);
-our(%insn_data, @insn_name, @optype, @specialsv_name);
-
-@optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP);
-@specialsv_name = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no pWARN_ALL pWARN_NONE);
-
-# XXX insn_data is initialised this way because with a large
-# %insn_data = (foo => [...], bar => [...], ...) initialiser
-# I get a hard-to-track-down stack underflow and segfault.
-$insn_data{comment} = [35, \&PUT_comment_t, "GET_comment_t"];
-$insn_data{nop} = [10, \&PUT_none, "GET_none"];
-$insn_data{ret} = [0, \&PUT_none, "GET_none"];
-$insn_data{ldsv} = [1, \&PUT_svindex, "GET_svindex"];
-$insn_data{ldop} = [2, \&PUT_opindex, "GET_opindex"];
-$insn_data{stsv} = [3, \&PUT_U32, "GET_U32"];
-$insn_data{stop} = [4, \&PUT_U32, "GET_U32"];
-$insn_data{stpv} = [5, \&PUT_U32, "GET_U32"];
-$insn_data{ldspecsv} = [6, \&PUT_U8, "GET_U8"];
-$insn_data{newsv} = [7, \&PUT_U8, "GET_U8"];
-$insn_data{newop} = [8, \&PUT_U8, "GET_U8"];
-$insn_data{newopn} = [9, \&PUT_U8, "GET_U8"];
-$insn_data{newpv} = [11, \&PUT_PV, "GET_PV"];
-$insn_data{pv_cur} = [12, \&PUT_U32, "GET_U32"];
-$insn_data{pv_free} = [13, \&PUT_none, "GET_none"];
-$insn_data{sv_upgrade} = [14, \&PUT_U8, "GET_U8"];
-$insn_data{sv_refcnt} = [15, \&PUT_U32, "GET_U32"];
-$insn_data{sv_refcnt_add} = [16, \&PUT_I32, "GET_I32"];
-$insn_data{sv_flags} = [17, \&PUT_U32, "GET_U32"];
-$insn_data{xrv} = [18, \&PUT_svindex, "GET_svindex"];
-$insn_data{xpv} = [19, \&PUT_none, "GET_none"];
-$insn_data{xiv32} = [20, \&PUT_I32, "GET_I32"];
-$insn_data{xiv64} = [21, \&PUT_IV64, "GET_IV64"];
-$insn_data{xnv} = [22, \&PUT_NV, "GET_NV"];
-$insn_data{xlv_targoff} = [23, \&PUT_U32, "GET_U32"];
-$insn_data{xlv_targlen} = [24, \&PUT_U32, "GET_U32"];
-$insn_data{xlv_targ} = [25, \&PUT_svindex, "GET_svindex"];
-$insn_data{xlv_type} = [26, \&PUT_U8, "GET_U8"];
-$insn_data{xbm_useful} = [27, \&PUT_I32, "GET_I32"];
-$insn_data{xbm_previous} = [28, \&PUT_U16, "GET_U16"];
-$insn_data{xbm_rare} = [29, \&PUT_U8, "GET_U8"];
-$insn_data{xfm_lines} = [30, \&PUT_I32, "GET_I32"];
-$insn_data{xio_lines} = [31, \&PUT_I32, "GET_I32"];
-$insn_data{xio_page} = [32, \&PUT_I32, "GET_I32"];
-$insn_data{xio_page_len} = [33, \&PUT_I32, "GET_I32"];
-$insn_data{xio_lines_left} = [34, \&PUT_I32, "GET_I32"];
-$insn_data{xio_top_name} = [36, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{xio_top_gv} = [37, \&PUT_svindex, "GET_svindex"];
-$insn_data{xio_fmt_name} = [38, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{xio_fmt_gv} = [39, \&PUT_svindex, "GET_svindex"];
-$insn_data{xio_bottom_name} = [40, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{xio_bottom_gv} = [41, \&PUT_svindex, "GET_svindex"];
-$insn_data{xio_subprocess} = [42, \&PUT_U16, "GET_U16"];
-$insn_data{xio_type} = [43, \&PUT_U8, "GET_U8"];
-$insn_data{xio_flags} = [44, \&PUT_U8, "GET_U8"];
-$insn_data{xcv_stash} = [45, \&PUT_svindex, "GET_svindex"];
-$insn_data{xcv_start} = [46, \&PUT_opindex, "GET_opindex"];
-$insn_data{xcv_root} = [47, \&PUT_opindex, "GET_opindex"];
-$insn_data{xcv_gv} = [48, \&PUT_svindex, "GET_svindex"];
-$insn_data{xcv_file} = [49, \&PUT_pvindex, "GET_pvindex"];
-$insn_data{xcv_depth} = [50, \&PUT_I32, "GET_I32"];
-$insn_data{xcv_padlist} = [51, \&PUT_svindex, "GET_svindex"];
-$insn_data{xcv_outside} = [52, \&PUT_svindex, "GET_svindex"];
-$insn_data{xcv_flags} = [53, \&PUT_U16, "GET_U16"];
-$insn_data{av_extend} = [54, \&PUT_I32, "GET_I32"];
-$insn_data{av_push} = [55, \&PUT_svindex, "GET_svindex"];
-$insn_data{xav_fill} = [56, \&PUT_I32, "GET_I32"];
-$insn_data{xav_max} = [57, \&PUT_I32, "GET_I32"];
-$insn_data{xav_flags} = [58, \&PUT_U8, "GET_U8"];
-$insn_data{xhv_riter} = [59, \&PUT_I32, "GET_I32"];
-$insn_data{xhv_name} = [60, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{hv_store} = [61, \&PUT_svindex, "GET_svindex"];
-$insn_data{sv_magic} = [62, \&PUT_U8, "GET_U8"];
-$insn_data{mg_obj} = [63, \&PUT_svindex, "GET_svindex"];
-$insn_data{mg_private} = [64, \&PUT_U16, "GET_U16"];
-$insn_data{mg_flags} = [65, \&PUT_U8, "GET_U8"];
-$insn_data{mg_pv} = [66, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{xmg_stash} = [67, \&PUT_svindex, "GET_svindex"];
-$insn_data{gv_fetchpv} = [68, \&PUT_strconst, "GET_strconst"];
-$insn_data{gv_stashpv} = [69, \&PUT_strconst, "GET_strconst"];
-$insn_data{gp_sv} = [70, \&PUT_svindex, "GET_svindex"];
-$insn_data{gp_refcnt} = [71, \&PUT_U32, "GET_U32"];
-$insn_data{gp_refcnt_add} = [72, \&PUT_I32, "GET_I32"];
-$insn_data{gp_av} = [73, \&PUT_svindex, "GET_svindex"];
-$insn_data{gp_hv} = [74, \&PUT_svindex, "GET_svindex"];
-$insn_data{gp_cv} = [75, \&PUT_svindex, "GET_svindex"];
-$insn_data{gp_file} = [76, \&PUT_pvindex, "GET_pvindex"];
-$insn_data{gp_io} = [77, \&PUT_svindex, "GET_svindex"];
-$insn_data{gp_form} = [78, \&PUT_svindex, "GET_svindex"];
-$insn_data{gp_cvgen} = [79, \&PUT_U32, "GET_U32"];
-$insn_data{gp_line} = [80, \&PUT_U16, "GET_U16"];
-$insn_data{gp_share} = [81, \&PUT_svindex, "GET_svindex"];
-$insn_data{xgv_flags} = [82, \&PUT_U8, "GET_U8"];
-$insn_data{op_next} = [83, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_sibling} = [84, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_ppaddr} = [85, \&PUT_strconst, "GET_strconst"];
-$insn_data{op_targ} = [86, \&PUT_U32, "GET_U32"];
-$insn_data{op_type} = [87, \&PUT_U16, "GET_U16"];
-$insn_data{op_seq} = [88, \&PUT_U16, "GET_U16"];
-$insn_data{op_flags} = [89, \&PUT_U8, "GET_U8"];
-$insn_data{op_private} = [90, \&PUT_U8, "GET_U8"];
-$insn_data{op_first} = [91, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_last} = [92, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_other} = [93, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_pmreplroot} = [94, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_pmreplrootgv} = [95, \&PUT_svindex, "GET_svindex"];
-$insn_data{op_pmreplstart} = [96, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_pmnext} = [97, \&PUT_opindex, "GET_opindex"];
-$insn_data{pregcomp} = [98, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{op_pmflags} = [99, \&PUT_U16, "GET_U16"];
-$insn_data{op_pmpermflags} = [100, \&PUT_U16, "GET_U16"];
-$insn_data{op_sv} = [101, \&PUT_svindex, "GET_svindex"];
-$insn_data{op_padix} = [102, \&PUT_U32, "GET_U32"];
-$insn_data{op_pv} = [103, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{op_pv_tr} = [104, \&PUT_op_tr_array, "GET_op_tr_array"];
-$insn_data{op_redoop} = [105, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_nextop} = [106, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_lastop} = [107, \&PUT_opindex, "GET_opindex"];
-$insn_data{cop_label} = [108, \&PUT_pvindex, "GET_pvindex"];
-$insn_data{cop_stashpv} = [109, \&PUT_pvindex, "GET_pvindex"];
-$insn_data{cop_file} = [110, \&PUT_pvindex, "GET_pvindex"];
-$insn_data{cop_seq} = [111, \&PUT_U32, "GET_U32"];
-$insn_data{cop_arybase} = [112, \&PUT_I32, "GET_I32"];
-$insn_data{cop_line} = [113, \&PUT_U16, "GET_U16"];
-$insn_data{cop_warnings} = [114, \&PUT_svindex, "GET_svindex"];
-$insn_data{main_start} = [115, \&PUT_opindex, "GET_opindex"];
-$insn_data{main_root} = [116, \&PUT_opindex, "GET_opindex"];
-$insn_data{curpad} = [117, \&PUT_svindex, "GET_svindex"];
-$insn_data{push_begin} = [118, \&PUT_svindex, "GET_svindex"];
-$insn_data{push_init} = [119, \&PUT_svindex, "GET_svindex"];
-$insn_data{push_end} = [120, \&PUT_svindex, "GET_svindex"];
-
-my ($insn_name, $insn_data);
-while (($insn_name, $insn_data) = each %insn_data) {
- $insn_name[$insn_data->[0]] = $insn_name;
-}
-# Fill in any gaps
-@insn_name = map($_ || "unused", @insn_name);
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Asmdata - Autogenerated data about Perl ops, used to generate bytecode
-
-=head1 SYNOPSIS
-
- use Asmdata;
-
-=head1 DESCRIPTION
-
-See F<ext/B/B/Asmdata.pm>.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Assembler.pm b/contrib/perl5/ext/B/B/Assembler.pm
deleted file mode 100644
index 5e798ce..0000000
--- a/contrib/perl5/ext/B/B/Assembler.pm
+++ /dev/null
@@ -1,285 +0,0 @@
-# Assembler.pm
-#
-# Copyright (c) 1996 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-
-package B::Assembler;
-use Exporter;
-use B qw(ppname);
-use B::Asmdata qw(%insn_data @insn_name);
-use Config qw(%Config);
-require ByteLoader; # we just need its $VERSIOM
-
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(assemble_fh newasm endasm assemble);
-$VERSION = 0.02;
-
-use strict;
-my %opnumber;
-my ($i, $opname);
-for ($i = 0; defined($opname = ppname($i)); $i++) {
- $opnumber{$opname} = $i;
-}
-
-my($linenum, $errors, $out); # global state, set up by newasm
-
-sub error {
- my $str = shift;
- warn "$linenum: $str\n";
- $errors++;
-}
-
-my $debug = 0;
-sub debug { $debug = shift }
-
-#
-# First define all the data conversion subs to which Asmdata will refer
-#
-
-sub B::Asmdata::PUT_U8 {
- my $arg = shift;
- my $c = uncstring($arg);
- if (defined($c)) {
- if (length($c) != 1) {
- error "argument for U8 is too long: $c";
- $c = substr($c, 0, 1);
- }
- } else {
- $c = chr($arg);
- }
- return $c;
-}
-
-sub B::Asmdata::PUT_U16 { pack("S", $_[0]) }
-sub B::Asmdata::PUT_U32 { pack("L", $_[0]) }
-sub B::Asmdata::PUT_I32 { pack("L", $_[0]) }
-sub B::Asmdata::PUT_NV { sprintf("%s\0", $_[0]) } # "%lf" looses precision and pack('d',...)
- # may not even be portable between compilers
-sub B::Asmdata::PUT_objindex { pack("L", $_[0]) } # could allow names here
-sub B::Asmdata::PUT_svindex { &B::Asmdata::PUT_objindex }
-sub B::Asmdata::PUT_opindex { &B::Asmdata::PUT_objindex }
-sub B::Asmdata::PUT_pvindex { &B::Asmdata::PUT_objindex }
-
-sub B::Asmdata::PUT_strconst {
- my $arg = shift;
- $arg = uncstring($arg);
- if (!defined($arg)) {
- error "bad string constant: $arg";
- return "";
- }
- if ($arg =~ s/\0//g) {
- error "string constant argument contains NUL: $arg";
- }
- return $arg . "\0";
-}
-
-sub B::Asmdata::PUT_pvcontents {
- my $arg = shift;
- error "extraneous argument: $arg" if defined $arg;
- return "";
-}
-sub B::Asmdata::PUT_PV {
- my $arg = shift;
- $arg = uncstring($arg);
- error "bad string argument: $arg" unless defined($arg);
- return pack("L", length($arg)) . $arg;
-}
-sub B::Asmdata::PUT_comment_t {
- my $arg = shift;
- $arg = uncstring($arg);
- error "bad string argument: $arg" unless defined($arg);
- if ($arg =~ s/\n//g) {
- error "comment argument contains linefeed: $arg";
- }
- return $arg . "\n";
-}
-sub B::Asmdata::PUT_double { sprintf("%s\0", $_[0]) } # see PUT_NV above
-sub B::Asmdata::PUT_none {
- my $arg = shift;
- error "extraneous argument: $arg" if defined $arg;
- return "";
-}
-sub B::Asmdata::PUT_op_tr_array {
- my $arg = shift;
- my @ary = split(/\s*,\s*/, $arg);
- if (@ary != 256) {
- error "wrong number of arguments to op_tr_array";
- @ary = (0) x 256;
- }
- return pack("S256", @ary);
-}
-# XXX Check this works
-sub B::Asmdata::PUT_IV64 {
- my $arg = shift;
- return pack("LL", $arg >> 32, $arg & 0xffffffff);
-}
-
-my %unesc = (n => "\n", r => "\r", t => "\t", a => "\a",
- b => "\b", f => "\f", v => "\013");
-
-sub uncstring {
- my $s = shift;
- $s =~ s/^"// and $s =~ s/"$// or return undef;
- $s =~ s/\\(\d\d\d|.)/length($1) == 3 ? chr(oct($1)) : ($unesc{$1}||$1)/eg;
- return $s;
-}
-
-sub strip_comments {
- my $stmt = shift;
- # Comments only allowed in instructions which don't take string arguments
- $stmt =~ s{
- (?sx) # Snazzy extended regexp coming up. Also, treat
- # string as a single line so .* eats \n characters.
- ^\s* # Ignore leading whitespace
- (
- [^"]* # A double quote '"' indicates a string argument. If we
- # find a double quote, the match fails and we strip nothing.
- )
- \s*\# # Any amount of whitespace plus the comment marker...
- .*$ # ...which carries on to end-of-string.
- }{$1}; # Keep only the instruction and optional argument.
- return $stmt;
-}
-
-# create the ByteCode header: magic, archname, ByteLoader $VERSION, ivsize,
-# ptrsize, byteorder
-# nvtype is irrelevant (floats are stored as strings)
-# byteorder is strconst not U32 because of varying size issues
-
-sub gen_header {
- my $header = "";
-
- $header .= B::Asmdata::PUT_U32(0x43424c50); # 'PLBC'
- $header .= B::Asmdata::PUT_strconst('"' . $Config{archname}. '"');
- $header .= B::Asmdata::PUT_strconst(qq["$ByteLoader::VERSION"]);
- $header .= B::Asmdata::PUT_U32($Config{ivsize});
- $header .= B::Asmdata::PUT_U32($Config{ptrsize});
- $header .= B::Asmdata::PUT_strconst(sprintf(qq["0x%s"], $Config{byteorder}));
-
- $header;
-}
-
-sub parse_statement {
- my $stmt = shift;
- my ($insn, $arg) = $stmt =~ m{
- (?sx)
- ^\s* # allow (but ignore) leading whitespace
- (.*?) # Instruction continues up until...
- (?: # ...an optional whitespace+argument group
- \s+ # first whitespace.
- (.*) # The argument is all the rest (newlines included).
- )?$ # anchor at end-of-line
- };
- if (defined($arg)) {
- if ($arg =~ s/^0x(?=[0-9a-fA-F]+$)//) {
- $arg = hex($arg);
- } elsif ($arg =~ s/^0(?=[0-7]+$)//) {
- $arg = oct($arg);
- } elsif ($arg =~ /^pp_/) {
- $arg =~ s/\s*$//; # strip trailing whitespace
- my $opnum = $opnumber{$arg};
- if (defined($opnum)) {
- $arg = $opnum;
- } else {
- error qq(No such op type "$arg");
- $arg = 0;
- }
- }
- }
- return ($insn, $arg);
-}
-
-sub assemble_insn {
- my ($insn, $arg) = @_;
- my $data = $insn_data{$insn};
- if (defined($data)) {
- my ($bytecode, $putsub) = @{$data}[0, 1];
- my $argcode = &$putsub($arg);
- return chr($bytecode).$argcode;
- } else {
- error qq(no such instruction "$insn");
- return "";
- }
-}
-
-sub assemble_fh {
- my ($fh, $out) = @_;
- my $line;
- my $asm = newasm($out);
- while ($line = <$fh>) {
- assemble($line);
- }
- endasm();
-}
-
-sub newasm {
- my($outsub) = @_;
-
- die "Invalid printing routine for B::Assembler\n" unless ref $outsub eq 'CODE';
- die <<EOD if ref $out;
-Can't have multiple byteassembly sessions at once!
- (perhaps you forgot an endasm()?)
-EOD
-
- $linenum = $errors = 0;
- $out = $outsub;
-
- $out->(gen_header());
-}
-
-sub endasm {
- if ($errors) {
- die "There were $errors assembly errors\n";
- }
- $linenum = $errors = $out = 0;
-}
-
-sub assemble {
- my($line) = @_;
- my ($insn, $arg);
- $linenum++;
- chomp $line;
- if ($debug) {
- my $quotedline = $line;
- $quotedline =~ s/\\/\\\\/g;
- $quotedline =~ s/"/\\"/g;
- $out->(assemble_insn("comment", qq("$quotedline")));
- }
- $line = strip_comments($line) or next;
- ($insn, $arg) = parse_statement($line);
- $out->(assemble_insn($insn, $arg));
- if ($debug) {
- $out->(assemble_insn("nop", undef));
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Assembler - Assemble Perl bytecode
-
-=head1 SYNOPSIS
-
- use B::Assembler qw(newasm endasm assemble);
- newasm(\&printsub); # sets up for assembly
- assemble($buf); # assembles one line
- endasm(); # closes down
-
- use B::Assembler qw(assemble_fh);
- assemble_fh($fh, \&printsub); # assemble everything in $fh
-
-=head1 DESCRIPTION
-
-See F<ext/B/B/Assembler.pm>.
-
-=head1 AUTHORS
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-Per-statement interface by Benjamin Stuhl, C<sho_pi@hotmail.com>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Bblock.pm b/contrib/perl5/ext/B/B/Bblock.pm
deleted file mode 100644
index fe7fc52..0000000
--- a/contrib/perl5/ext/B/B/Bblock.pm
+++ /dev/null
@@ -1,180 +0,0 @@
-package B::Bblock;
-use Exporter ();
-@ISA = "Exporter";
-@EXPORT_OK = qw(find_leaders);
-
-use B qw(peekop walkoptree walkoptree_exec
- main_root main_start svref_2object
- OPf_SPECIAL OPf_STACKED );
-
-use B::Terse;
-use strict;
-
-my $bblock;
-my @bblock_ends;
-
-sub mark_leader {
- my $op = shift;
- if ($$op) {
- $bblock->{$$op} = $op;
- }
-}
-
-sub remove_sortblock{
- foreach (keys %$bblock){
- my $leader=$$bblock{$_};
- delete $$bblock{$_} if( $leader == 0);
- }
-}
-sub find_leaders {
- my ($root, $start) = @_;
- $bblock = {};
- mark_leader($start) if ( ref $start ne "B::NULL" );
- walkoptree($root, "mark_if_leader") if ((ref $root) ne "B::NULL") ;
- remove_sortblock();
- return $bblock;
-}
-
-# Debugging
-sub walk_bblocks {
- my ($root, $start) = @_;
- my ($op, $lastop, $leader, $bb);
- $bblock = {};
- mark_leader($start);
- walkoptree($root, "mark_if_leader");
- my @leaders = values %$bblock;
- while ($leader = shift @leaders) {
- $lastop = $leader;
- $op = $leader->next;
- while ($$op && !exists($bblock->{$$op})) {
- $bblock->{$$op} = $leader;
- $lastop = $op;
- $op = $op->next;
- }
- push(@bblock_ends, [$leader, $lastop]);
- }
- foreach $bb (@bblock_ends) {
- ($leader, $lastop) = @$bb;
- printf "%s .. %s\n", peekop($leader), peekop($lastop);
- for ($op = $leader; $$op != $$lastop; $op = $op->next) {
- printf " %s\n", peekop($op);
- }
- printf " %s\n", peekop($lastop);
- }
- print "-------\n";
- walkoptree_exec($start, "terse");
-}
-
-sub walk_bblocks_obj {
- my $cvref = shift;
- my $cv = svref_2object($cvref);
- walk_bblocks($cv->ROOT, $cv->START);
-}
-
-sub B::OP::mark_if_leader {}
-
-sub B::COP::mark_if_leader {
- my $op = shift;
- if ($op->label) {
- mark_leader($op);
- }
-}
-
-sub B::LOOP::mark_if_leader {
- my $op = shift;
- mark_leader($op->next);
- mark_leader($op->nextop);
- mark_leader($op->redoop);
- mark_leader($op->lastop->next);
-}
-
-sub B::LOGOP::mark_if_leader {
- my $op = shift;
- my $opname = $op->name;
- mark_leader($op->next);
- if ($opname eq "entertry") {
- mark_leader($op->other->next);
- } else {
- mark_leader($op->other);
- }
-}
-
-sub B::LISTOP::mark_if_leader {
- my $op = shift;
- my $first=$op->first;
- $first=$first->next while ($first->name eq "null");
- mark_leader($op->first) unless (exists( $bblock->{$$first}));
- mark_leader($op->next);
- if ($op->name eq "sort" and $op->flags & OPf_SPECIAL
- and $op->flags & OPf_STACKED){
- my $root=$op->first->sibling->first;
- my $leader=$root->first;
- $bblock->{$$leader} = 0;
- }
-}
-
-sub B::PMOP::mark_if_leader {
- my $op = shift;
- if ($op->name ne "pushre") {
- my $replroot = $op->pmreplroot;
- if ($$replroot) {
- mark_leader($replroot);
- mark_leader($op->next);
- mark_leader($op->pmreplstart);
- }
- }
-}
-
-# PMOP stuff omitted
-
-sub compile {
- my @options = @_;
- B::clearsym();
- if (@options) {
- return sub {
- my $objname;
- foreach $objname (@options) {
- $objname = "main::$objname" unless $objname =~ /::/;
- eval "walk_bblocks_obj(\\&$objname)";
- die "walk_bblocks_obj(\\&$objname) failed: $@" if $@;
- }
- }
- } else {
- return sub { walk_bblocks(main_root, main_start) };
- }
-}
-
-# Basic block leaders:
-# Any COP (pp_nextstate) with a non-NULL label
-# [The op after a pp_enter] Omit
-# [The op after a pp_entersub. Don't count this one.]
-# The ops pointed at by nextop, redoop and lastop->op_next of a LOOP
-# The ops pointed at by op_next and op_other of a LOGOP, except
-# for pp_entertry which has op_next and op_other->op_next
-# The op pointed at by op_pmreplstart of a PMOP
-# The op pointed at by op_other->op_pmreplstart of pp_substcont?
-# [The op after a pp_return] Omit
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Bblock - Walk basic blocks
-
-=head1 SYNOPSIS
-
- perl -MO=Bblock[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-This module is used by the B::CC back end. It walks "basic blocks".
-A basic block is a series of operations which is known to execute from
-start to finish, with no possiblity of branching or halting.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Bytecode.pm b/contrib/perl5/ext/B/B/Bytecode.pm
deleted file mode 100644
index 54d7c53..0000000
--- a/contrib/perl5/ext/B/B/Bytecode.pm
+++ /dev/null
@@ -1,998 +0,0 @@
-# Bytecode.pm
-#
-# Copyright (c) 1996-1998 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-package B::Bytecode;
-
-use strict;
-use Carp;
-use B qw(main_cv main_root main_start comppadlist
- class peekop walkoptree svref_2object cstring walksymtable
- init_av begin_av end_av
- SVf_POK SVp_POK SVf_IOK SVp_IOK SVf_NOK SVp_NOK
- SVf_READONLY GVf_IMPORTED_AV GVf_IMPORTED_CV GVf_IMPORTED_HV
- GVf_IMPORTED_SV SVTYPEMASK
- );
-use B::Asmdata qw(@optype @specialsv_name);
-use B::Assembler qw(newasm endasm assemble);
-
-my %optype_enum;
-my $i;
-for ($i = 0; $i < @optype; $i++) {
- $optype_enum{$optype[$i]} = $i;
-}
-
-# Following is SVf_POK|SVp_POK
-# XXX Shouldn't be hardwired
-sub POK () { SVf_POK|SVp_POK }
-
-# Following is SVf_IOK|SVp_IOK
-# XXX Shouldn't be hardwired
-sub IOK () { SVf_IOK|SVp_IOK }
-
-# Following is SVf_NOK|SVp_NOK
-# XXX Shouldn't be hardwired
-sub NOK () { SVf_NOK|SVp_NOK }
-
-# nonexistant flags (see B::GV::bytecode for usage)
-sub GVf_IMPORTED_IO () { 0; }
-sub GVf_IMPORTED_FORM () { 0; }
-
-my ($verbose, $no_assemble, $debug_bc, $debug_cv);
-my @packages; # list of packages to compile
-
-sub asm (@) { # print replacement that knows about assembling
- if ($no_assemble) {
- print @_;
- } else {
- my $buf = join '', @_;
- assemble($_) for (split /\n/, $buf);
- }
-}
-
-sub asmf (@) { # printf replacement that knows about assembling
- if ($no_assemble) {
- printf shift(), @_;
- } else {
- my $format = shift;
- my $buf = sprintf $format, @_;
- assemble($_) for (split /\n/, $buf);
- }
-}
-
-# Optimisation options. On the command line, use hyphens instead of
-# underscores for compatibility with gcc-style options. We use
-# underscores here because they are OK in (strict) barewords.
-my ($compress_nullops, $omit_seq, $bypass_nullops);
-my %optimise = (compress_nullops => \$compress_nullops,
- omit_sequence_numbers => \$omit_seq,
- bypass_nullops => \$bypass_nullops);
-
-my $strip_syntree; # this is left here in case stripping the
- # syntree ever becomes safe again
- # -- BKS, June 2000
-
-my $nextix = 0;
-my %symtable; # maps object addresses to object indices.
- # Filled in at allocation (newsv/newop) time.
-
-my %saved; # maps object addresses (for SVish classes) to "saved yet?"
- # flag. Set at FOO::bytecode time usually by SV::bytecode.
- # Manipulated via saved(), mark_saved(), unmark_saved().
-
-my %strtable; # maps shared strings to object indices
- # Filled in at allocation (pvix) time
-
-my $svix = -1; # we keep track of when the sv register contains an element
- # of the object table to avoid unnecessary repeated
- # consecutive ldsv instructions.
-
-my $opix = -1; # Ditto for the op register.
-
-sub ldsv {
- my $ix = shift;
- if ($ix != $svix) {
- asm "ldsv $ix\n";
- $svix = $ix;
- }
-}
-
-sub stsv {
- my $ix = shift;
- asm "stsv $ix\n";
- $svix = $ix;
-}
-
-sub set_svix {
- $svix = shift;
-}
-
-sub ldop {
- my $ix = shift;
- if ($ix != $opix) {
- asm "ldop $ix\n";
- $opix = $ix;
- }
-}
-
-sub stop {
- my $ix = shift;
- asm "stop $ix\n";
- $opix = $ix;
-}
-
-sub set_opix {
- $opix = shift;
-}
-
-sub pvstring {
- my $str = shift;
- if (defined($str)) {
- return cstring($str . "\0");
- } else {
- return '""';
- }
-}
-
-sub nv {
- # print full precision
- my $str = sprintf "%.40f", $_[0];
- $str =~ s/0+$//; # remove trailing zeros
- $str =~ s/\.$/.0/;
- return $str;
-}
-
-sub saved { $saved{${$_[0]}} }
-sub mark_saved { $saved{${$_[0]}} = 1 }
-sub unmark_saved { $saved{${$_[0]}} = 0 }
-
-sub debug { $debug_bc = shift }
-
-sub pvix { # save a shared PV (mainly for COPs)
- return $strtable{$_[0]} if defined($strtable{$_[0]});
- asmf "newpv %s\n", pvstring($_[0]);
- my $ix = $nextix++;
- $strtable{$_[0]} = $ix;
- asmf "stpv %d\n", $ix;
- return $ix;
-}
-
-sub B::OBJECT::nyi {
- my $obj = shift;
- warn sprintf("bytecode save method for %s (0x%x) not yet implemented\n",
- class($obj), $$obj);
-}
-
-#
-# objix may stomp on the op register (for op objects)
-# or the sv register (for SV objects)
-#
-sub B::OBJECT::objix {
- my $obj = shift;
- my $ix = $symtable{$$obj};
- if (defined($ix)) {
- return $ix;
- } else {
- $obj->newix($nextix);
- return $symtable{$$obj} = $nextix++;
- }
-}
-
-sub B::SV::newix {
- my ($sv, $ix) = @_;
- asmf "newsv %d\t# %s\n", $sv->FLAGS & SVTYPEMASK, class($sv);
- stsv($ix);
-}
-
-sub B::GV::newix {
- my ($gv, $ix) = @_;
- my $gvname = $gv->NAME;
- my $name = cstring($gv->STASH->NAME . "::" . $gvname);
- asm "gv_fetchpv $name\n";
- stsv($ix);
-}
-
-sub B::HV::newix {
- my ($hv, $ix) = @_;
- my $name = $hv->NAME;
- if ($name) {
- # It's a stash
- asmf "gv_stashpv %s\n", cstring($name);
- stsv($ix);
- } else {
- # It's an ordinary HV. Fall back to ordinary newix method
- $hv->B::SV::newix($ix);
- }
-}
-
-sub B::SPECIAL::newix {
- my ($sv, $ix) = @_;
- # Special case. $$sv is not the address of the SV but an
- # index into svspecialsv_list.
- asmf "ldspecsv $$sv\t# %s\n", $specialsv_name[$$sv];
- stsv($ix);
-}
-
-sub B::OP::newix {
- my ($op, $ix) = @_;
- my $class = class($op);
- my $typenum = $optype_enum{$class};
- croak("OP::newix: can't understand class $class") unless defined($typenum);
- asm "newop $typenum\t# $class\n";
- stop($ix);
-}
-
-sub B::OP::walkoptree_debug {
- my $op = shift;
- warn(sprintf("walkoptree: %s\n", peekop($op)));
-}
-
-sub B::OP::bytecode {
- my $op = shift;
- my $next = $op->next;
- my $nextix;
- my $sibix = $op->sibling->objix unless $strip_syntree;
- my $ix = $op->objix;
- my $type = $op->type;
-
- if ($bypass_nullops) {
- $next = $next->next while $$next && $next->type == 0;
- }
- $nextix = $next->objix;
-
- asmf "# %s\n", peekop($op) if $debug_bc;
- ldop($ix);
- asm "op_next $nextix\n";
- asm "op_sibling $sibix\n" unless $strip_syntree;
- asmf "op_type %s\t# %d\n", "pp_" . $op->name, $type;
- asmf("op_seq %d\n", $op->seq) unless $omit_seq;
- if ($type || !$compress_nullops) {
- asmf "op_targ %d\nop_flags 0x%x\nop_private 0x%x\n",
- $op->targ, $op->flags, $op->private;
- }
-}
-
-sub B::UNOP::bytecode {
- my $op = shift;
- my $firstix = $op->first->objix unless $strip_syntree;
- $op->B::OP::bytecode;
- if (($op->type || !$compress_nullops) && !$strip_syntree) {
- asm "op_first $firstix\n";
- }
-}
-
-sub B::LOGOP::bytecode {
- my $op = shift;
- my $otherix = $op->other->objix;
- $op->B::UNOP::bytecode;
- asm "op_other $otherix\n";
-}
-
-sub B::SVOP::bytecode {
- my $op = shift;
- my $sv = $op->sv;
- my $svix = $sv->objix;
- $op->B::OP::bytecode;
- asm "op_sv $svix\n";
- $sv->bytecode;
-}
-
-sub B::PADOP::bytecode {
- my $op = shift;
- my $padix = $op->padix;
- $op->B::OP::bytecode;
- asm "op_padix $padix\n";
-}
-
-sub B::PVOP::bytecode {
- my $op = shift;
- my $pv = $op->pv;
- $op->B::OP::bytecode;
- #
- # This would be easy except that OP_TRANS uses a PVOP to store an
- # endian-dependent array of 256 shorts instead of a plain string.
- #
- if ($op->name eq "trans") {
- my @shorts = unpack("s256", $pv); # assembler handles endianness
- asm "op_pv_tr ", join(",", @shorts), "\n";
- } else {
- asmf "newpv %s\nop_pv\n", pvstring($pv);
- }
-}
-
-sub B::BINOP::bytecode {
- my $op = shift;
- my $lastix = $op->last->objix unless $strip_syntree;
- $op->B::UNOP::bytecode;
- if (($op->type || !$compress_nullops) && !$strip_syntree) {
- asm "op_last $lastix\n";
- }
-}
-
-sub B::LOOP::bytecode {
- my $op = shift;
- my $redoopix = $op->redoop->objix;
- my $nextopix = $op->nextop->objix;
- my $lastopix = $op->lastop->objix;
- $op->B::LISTOP::bytecode;
- asm "op_redoop $redoopix\nop_nextop $nextopix\nop_lastop $lastopix\n";
-}
-
-sub B::COP::bytecode {
- my $op = shift;
- my $file = $op->file;
- my $line = $op->line;
- if ($debug_bc) { # do this early to aid debugging
- asmf "# line %s:%d\n", $file, $line;
- }
- my $stashpv = $op->stashpv;
- my $warnings = $op->warnings;
- my $warningsix = $warnings->objix;
- my $labelix = pvix($op->label);
- my $stashix = pvix($stashpv);
- my $fileix = pvix($file);
- $warnings->bytecode;
- $op->B::OP::bytecode;
- asmf <<"EOT", $labelix, $stashix, $op->cop_seq, $fileix, $op->arybase;
-cop_label %d
-cop_stashpv %d
-cop_seq %d
-cop_file %d
-cop_arybase %d
-cop_line $line
-cop_warnings $warningsix
-EOT
-}
-
-sub B::PMOP::bytecode {
- my $op = shift;
- my $replroot = $op->pmreplroot;
- my $replrootix = $replroot->objix;
- my $replstartix = $op->pmreplstart->objix;
- my $opname = $op->name;
- # pmnext is corrupt in some PMOPs (see misc.t for example)
- #my $pmnextix = $op->pmnext->objix;
-
- if ($$replroot) {
- # OP_PUSHRE (a mutated version of OP_MATCH for the regexp
- # argument to a split) stores a GV in op_pmreplroot instead
- # of a substitution syntax tree. We don't want to walk that...
- if ($opname eq "pushre") {
- $replroot->bytecode;
- } else {
- walkoptree($replroot, "bytecode");
- }
- }
- $op->B::LISTOP::bytecode;
- if ($opname eq "pushre") {
- asmf "op_pmreplrootgv $replrootix\n";
- } else {
- asm "op_pmreplroot $replrootix\nop_pmreplstart $replstartix\n";
- }
- my $re = pvstring($op->precomp);
- # op_pmnext omitted since a perl bug means it's sometime corrupt
- asmf <<"EOT", $op->pmflags, $op->pmpermflags;
-op_pmflags 0x%x
-op_pmpermflags 0x%x
-newpv $re
-pregcomp
-EOT
-}
-
-sub B::SV::bytecode {
- my $sv = shift;
- return if saved($sv);
- my $ix = $sv->objix;
- my $refcnt = $sv->REFCNT;
- my $flags = sprintf("0x%x", $sv->FLAGS);
- ldsv($ix);
- asm "sv_refcnt $refcnt\nsv_flags $flags\n";
- mark_saved($sv);
-}
-
-sub B::PV::bytecode {
- my $sv = shift;
- return if saved($sv);
- $sv->B::SV::bytecode;
- asmf("newpv %s\nxpv\n", pvstring($sv->PV)) if $sv->FLAGS & POK;
-}
-
-sub B::IV::bytecode {
- my $sv = shift;
- return if saved($sv);
- my $iv = $sv->IVX;
- $sv->B::SV::bytecode;
- asmf "%s $iv\n", $sv->needs64bits ? "xiv64" : "xiv32" if $sv->FLAGS & IOK; # could be PVNV
-}
-
-sub B::NV::bytecode {
- my $sv = shift;
- return if saved($sv);
- $sv->B::SV::bytecode;
- asmf "xnv %s\n", nv($sv->NVX);
-}
-
-sub B::RV::bytecode {
- my $sv = shift;
- return if saved($sv);
- my $rv = $sv->RV;
- my $rvix = $rv->objix;
- $rv->bytecode;
- $sv->B::SV::bytecode;
- asm "xrv $rvix\n";
-}
-
-sub B::PVIV::bytecode {
- my $sv = shift;
- return if saved($sv);
- my $iv = $sv->IVX;
- $sv->B::PV::bytecode;
- asmf "%s $iv\n", $sv->needs64bits ? "xiv64" : "xiv32";
-}
-
-sub B::PVNV::bytecode {
- my $sv = shift;
- my $flag = shift || 0;
- # The $flag argument is passed through PVMG::bytecode by BM::bytecode
- # and AV::bytecode and indicates special handling. $flag = 1 is used by
- # BM::bytecode and means that we should ensure we save the whole B-M
- # table. It consists of 257 bytes (256 char array plus a final \0)
- # which follow the ordinary PV+\0 and the 257 bytes are *not* reflected
- # in SvCUR. $flag = 2 is used by AV::bytecode and means that we only
- # call SV::bytecode instead of saving PV and calling NV::bytecode since
- # PV/NV/IV stuff is different for AVs.
- return if saved($sv);
- if ($flag == 2) {
- $sv->B::SV::bytecode;
- } else {
- my $pv = $sv->PV;
- $sv->B::IV::bytecode;
- asmf "xnv %s\n", nv($sv->NVX);
- if ($flag == 1) {
- $pv .= "\0" . $sv->TABLE;
- asmf "newpv %s\npv_cur %d\nxpv\n", pvstring($pv),length($pv)-257;
- } else {
- asmf("newpv %s\nxpv\n", pvstring($pv)) if $sv->FLAGS & POK;
- }
- }
-}
-
-sub B::PVMG::bytecode {
- my ($sv, $flag) = @_;
- # See B::PVNV::bytecode for an explanation of $flag.
- return if saved($sv);
- # XXX We assume SvSTASH is already saved and don't save it later ourselves
- my $stashix = $sv->SvSTASH->objix;
- my @mgchain = $sv->MAGIC;
- my (@mgobjix, $mg);
- #
- # We need to traverse the magic chain and get objix for each OBJ
- # field *before* we do B::PVNV::bytecode since objix overwrites
- # the sv register. However, we need to write the magic-saving
- # bytecode *after* B::PVNV::bytecode since sv isn't initialised
- # to refer to $sv until then.
- #
- @mgobjix = map($_->OBJ->objix, @mgchain);
- $sv->B::PVNV::bytecode($flag);
- asm "xmg_stash $stashix\n";
- foreach $mg (@mgchain) {
- asmf "sv_magic %s\nmg_obj %d\nnewpv %s\nmg_pv\n",
- cstring($mg->TYPE), shift(@mgobjix), pvstring($mg->PTR);
- }
-}
-
-sub B::PVLV::bytecode {
- my $sv = shift;
- return if saved($sv);
- $sv->B::PVMG::bytecode;
- asmf <<'EOT', $sv->TARGOFF, $sv->TARGLEN, cstring($sv->TYPE);
-xlv_targoff %d
-xlv_targlen %d
-xlv_type %s
-EOT
-}
-
-sub B::BM::bytecode {
- my $sv = shift;
- return if saved($sv);
- # See PVNV::bytecode for an explanation of what the argument does
- $sv->B::PVMG::bytecode(1);
- asmf "xbm_useful %d\nxbm_previous %d\nxbm_rare %d\n",
- $sv->USEFUL, $sv->PREVIOUS, $sv->RARE;
-}
-
-sub empty_gv { # is a GV empty except for imported stuff?
- my $gv = shift;
-
- return 0 if ($gv->SV->FLAGS & SVTYPEMASK); # sv not SVt_NULL
- my @subfield_names = qw(AV HV CV FORM IO);
- @subfield_names = grep {;
- no strict 'refs';
- !($gv->GvFLAGS & ${\"GVf_IMPORTED_$_"}->()) && ${$gv->$_()};
- } @subfield_names;
- return scalar @subfield_names;
-}
-
-sub B::GV::bytecode {
- my $gv = shift;
- return if saved($gv);
- return unless grep { $_ eq $gv->STASH->NAME; } @packages;
- return if $gv->NAME =~ m/^\(/; # ignore overloads - they'll be rebuilt
- my $ix = $gv->objix;
- mark_saved($gv);
- ldsv($ix);
- asmf <<"EOT", $gv->FLAGS, $gv->GvFLAGS;
-sv_flags 0x%x
-xgv_flags 0x%x
-EOT
- my $refcnt = $gv->REFCNT;
- asmf("sv_refcnt_add %d\n", $refcnt - 1) if $refcnt > 1;
- return if $gv->is_empty;
- asmf <<"EOT", $gv->LINE, pvix($gv->FILE);
-gp_line %d
-gp_file %d
-EOT
- my $gvname = $gv->NAME;
- my $name = cstring($gv->STASH->NAME . "::" . $gvname);
- my $egv = $gv->EGV;
- my $egvix = $egv->objix;
- my $gvrefcnt = $gv->GvREFCNT;
- asmf("gp_refcnt_add %d\n", $gvrefcnt - 1) if $gvrefcnt > 1;
- if ($gvrefcnt > 1 && $ix != $egvix) {
- asm "gp_share $egvix\n";
- } else {
- if ($gvname !~ /^([^A-Za-z]|STDIN|STDOUT|STDERR|ARGV|SIG|ENV)$/) {
- my $i;
- my @subfield_names = qw(SV AV HV CV FORM IO);
- @subfield_names = grep {;
- no strict 'refs';
- !($gv->GvFLAGS & ${\"GVf_IMPORTED_$_"}->());
- } @subfield_names;
- my @subfields = map($gv->$_(), @subfield_names);
- my @ixes = map($_->objix, @subfields);
- # Reset sv register for $gv
- ldsv($ix);
- for ($i = 0; $i < @ixes; $i++) {
- asmf "gp_%s %d\n", lc($subfield_names[$i]), $ixes[$i];
- }
- # Now save all the subfields
- my $sv;
- foreach $sv (@subfields) {
- $sv->bytecode;
- }
- }
- }
-}
-
-sub B::HV::bytecode {
- my $hv = shift;
- return if saved($hv);
- mark_saved($hv);
- my $name = $hv->NAME;
- my $ix = $hv->objix;
- if (!$name) {
- # It's an ordinary HV. Stashes have NAME set and need no further
- # saving beyond the gv_stashpv that $hv->objix already ensures.
- my @contents = $hv->ARRAY;
- my ($i, @ixes);
- for ($i = 1; $i < @contents; $i += 2) {
- push(@ixes, $contents[$i]->objix);
- }
- for ($i = 1; $i < @contents; $i += 2) {
- $contents[$i]->bytecode;
- }
- ldsv($ix);
- for ($i = 0; $i < @contents; $i += 2) {
- asmf("newpv %s\nhv_store %d\n",
- pvstring($contents[$i]), $ixes[$i / 2]);
- }
- asmf "sv_refcnt %d\nsv_flags 0x%x\n", $hv->REFCNT, $hv->FLAGS;
- }
-}
-
-sub B::AV::bytecode {
- my $av = shift;
- return if saved($av);
- my $ix = $av->objix;
- my $fill = $av->FILL;
- my $max = $av->MAX;
- my (@array, @ixes);
- if ($fill > -1) {
- @array = $av->ARRAY;
- @ixes = map($_->objix, @array);
- my $sv;
- foreach $sv (@array) {
- $sv->bytecode;
- }
- }
- # See PVNV::bytecode for the meaning of the flag argument of 2.
- $av->B::PVMG::bytecode(2);
- # Recover sv register and set AvMAX and AvFILL to -1 (since we
- # create an AV with NEWSV and SvUPGRADE rather than doing newAV
- # which is what sets AvMAX and AvFILL.
- ldsv($ix);
- asmf "sv_flags 0x%x\n", $av->FLAGS & ~SVf_READONLY; # SvREADONLY_off($av) in case PADCONST
- asmf "xav_flags 0x%x\nxav_max -1\nxav_fill -1\n", $av->AvFLAGS;
- if ($fill > -1) {
- my $elix;
- foreach $elix (@ixes) {
- asm "av_push $elix\n";
- }
- } else {
- if ($max > -1) {
- asm "av_extend $max\n";
- }
- }
- asmf "sv_flags 0x%x\n", $av->FLAGS; # restore flags from above
-}
-
-sub B::CV::bytecode {
- my $cv = shift;
- return if saved($cv);
- return if ${$cv->GV} && ($cv->GV->GvFLAGS & GVf_IMPORTED_CV);
- my $fileix = pvix($cv->FILE);
- my $ix = $cv->objix;
- $cv->B::PVMG::bytecode;
- my $i;
- my @subfield_names = qw(ROOT START STASH GV PADLIST OUTSIDE);
- my @subfields = map($cv->$_(), @subfield_names);
- my @ixes = map($_->objix, @subfields);
- # Save OP tree from CvROOT (first element of @subfields)
- my $root = shift @subfields;
- if ($$root) {
- walkoptree($root, "bytecode");
- }
- # Reset sv register for $cv (since above ->objix calls stomped on it)
- ldsv($ix);
- for ($i = 0; $i < @ixes; $i++) {
- asmf "xcv_%s %d\n", lc($subfield_names[$i]), $ixes[$i];
- }
- asmf "xcv_depth %d\nxcv_flags 0x%x\n", $cv->DEPTH, $cv->CvFLAGS;
- asmf "xcv_file %d\n", $fileix;
- # Now save all the subfields (except for CvROOT which was handled
- # above) and CvSTART (now the initial element of @subfields).
- shift @subfields; # bye-bye CvSTART
- my $sv;
- foreach $sv (@subfields) {
- $sv->bytecode;
- }
-}
-
-sub B::IO::bytecode {
- my $io = shift;
- return if saved($io);
- my $ix = $io->objix;
- my $top_gv = $io->TOP_GV;
- my $top_gvix = $top_gv->objix;
- my $fmt_gv = $io->FMT_GV;
- my $fmt_gvix = $fmt_gv->objix;
- my $bottom_gv = $io->BOTTOM_GV;
- my $bottom_gvix = $bottom_gv->objix;
-
- $io->B::PVMG::bytecode;
- ldsv($ix);
- asm "xio_top_gv $top_gvix\n";
- asm "xio_fmt_gv $fmt_gvix\n";
- asm "xio_bottom_gv $bottom_gvix\n";
- my $field;
- foreach $field (qw(TOP_NAME FMT_NAME BOTTOM_NAME)) {
- asmf "newpv %s\nxio_%s\n", pvstring($io->$field()), lc($field);
- }
- foreach $field (qw(LINES PAGE PAGE_LEN LINES_LEFT SUBPROCESS)) {
- asmf "xio_%s %d\n", lc($field), $io->$field();
- }
- asmf "xio_type %s\nxio_flags 0x%x\n", cstring($io->IoTYPE), $io->IoFLAGS;
- $top_gv->bytecode;
- $fmt_gv->bytecode;
- $bottom_gv->bytecode;
-}
-
-sub B::SPECIAL::bytecode {
- # nothing extra needs doing
-}
-
-sub bytecompile_object {
- for my $sv (@_) {
- svref_2object($sv)->bytecode;
- }
-}
-
-sub B::GV::bytecodecv {
- my $gv = shift;
- my $cv = $gv->CV;
- if ($$cv && !saved($cv) && !($gv->FLAGS & GVf_IMPORTED_CV)) {
- if ($debug_cv) {
- warn sprintf("saving extra CV &%s::%s (0x%x) from GV 0x%x\n",
- $gv->STASH->NAME, $gv->NAME, $$cv, $$gv);
- }
- $gv->bytecode;
- }
-}
-
-sub save_call_queues {
- if (begin_av()->isa("B::AV")) { # this is just to save 'use Foo;' calls
- for my $cv (begin_av()->ARRAY) {
- next unless grep { $_ eq $cv->STASH->NAME; } @packages;
- my $op = $cv->START;
-OPLOOP:
- while ($$op) {
- if ($op->name eq 'require') { # save any BEGIN that does a require
- $cv->bytecode;
- asmf "push_begin %d\n", $cv->objix;
- last OPLOOP;
- }
- $op = $op->next;
- }
- }
- }
- if (init_av()->isa("B::AV")) {
- for my $cv (init_av()->ARRAY) {
- next unless grep { $_ eq $cv->STASH->NAME; } @packages;
- $cv->bytecode;
- asmf "push_init %d\n", $cv->objix;
- }
- }
- if (end_av()->isa("B::AV")) {
- for my $cv (end_av()->ARRAY) {
- next unless grep { $_ eq $cv->STASH->NAME; } @packages;
- $cv->bytecode;
- asmf "push_end %d\n", $cv->objix;
- }
- }
-}
-
-sub symwalk {
- no strict 'refs';
- my $ok = 1 if grep { (my $name = $_[0]) =~ s/::$//; $_ eq $name;} @packages;
- if (grep { /^$_[0]/; } @packages) {
- walksymtable(\%{"$_[0]"}, "bytecodecv", \&symwalk, $_[0]);
- }
- warn "considering $_[0] ... " . ($ok ? "accepted\n" : "rejected\n")
- if $debug_bc;
- $ok;
-}
-
-sub bytecompile_main {
- my $curpad = (comppadlist->ARRAY)[1];
- my $curpadix = $curpad->objix;
- $curpad->bytecode;
- save_call_queues();
- walkoptree(main_root, "bytecode") unless ref(main_root) eq "B::NULL";
- warn "done main program, now walking symbol table\n" if $debug_bc;
- if (@packages) {
- no strict qw(refs);
- walksymtable(\%{"main::"}, "bytecodecv", \&symwalk);
- } else {
- die "No packages requested for compilation!\n";
- }
- asmf "main_root %d\n", main_root->objix;
- asmf "main_start %d\n", main_start->objix;
- asmf "curpad $curpadix\n";
- # XXX Do min_intro_pending and max_intro_pending matter?
-}
-
-sub compile {
- my @options = @_;
- my ($option, $opt, $arg);
- open(OUT, ">&STDOUT");
- binmode OUT;
- select OUT;
- OPTION:
- while ($option = shift @options) {
- if ($option =~ /^-(.)(.*)/) {
- $opt = $1;
- $arg = $2;
- } else {
- unshift @options, $option;
- last OPTION;
- }
- if ($opt eq "-" && $arg eq "-") {
- shift @options;
- last OPTION;
- } elsif ($opt eq "o") {
- $arg ||= shift @options;
- open(OUT, ">$arg") or return "$arg: $!\n";
- binmode OUT;
- } elsif ($opt eq "a") {
- $arg ||= shift @options;
- open(OUT, ">>$arg") or return "$arg: $!\n";
- binmode OUT;
- } elsif ($opt eq "D") {
- $arg ||= shift @options;
- foreach $arg (split(//, $arg)) {
- if ($arg eq "b") {
- $| = 1;
- debug(1);
- } elsif ($arg eq "o") {
- B->debug(1);
- } elsif ($arg eq "a") {
- B::Assembler::debug(1);
- } elsif ($arg eq "C") {
- $debug_cv = 1;
- }
- }
- } elsif ($opt eq "v") {
- $verbose = 1;
- } elsif ($opt eq "S") {
- $no_assemble = 1;
- } elsif ($opt eq "f") {
- $arg ||= shift @options;
- my $value = $arg !~ s/^no-//;
- $arg =~ s/-/_/g;
- my $ref = $optimise{$arg};
- if (defined($ref)) {
- $$ref = $value;
- } else {
- warn qq(ignoring unknown optimisation option "$arg"\n);
- }
- } elsif ($opt eq "O") {
- $arg = 1 if $arg eq "";
- my $ref;
- foreach $ref (values %optimise) {
- $$ref = 0;
- }
- if ($arg >= 2) {
- $bypass_nullops = 1;
- }
- if ($arg >= 1) {
- $compress_nullops = 1;
- $omit_seq = 1;
- }
- } elsif ($opt eq "u") {
- $arg ||= shift @options;
- push @packages, $arg;
- } else {
- warn qq(ignoring unknown option "$opt$arg"\n);
- }
- }
- if (! @packages) {
- warn "No package specified for compilation, assuming main::\n";
- @packages = qw(main);
- }
- if (@options) {
- die "Extraneous options left on B::Bytecode commandline: @options\n";
- } else {
- return sub {
- newasm(\&apr) unless $no_assemble;
- bytecompile_main();
- endasm() unless $no_assemble;
- };
- }
-}
-
-sub apr { print @_; }
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Bytecode - Perl compiler's bytecode backend
-
-=head1 SYNOPSIS
-
- perl -MO=Bytecode[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-This compiler backend takes Perl source and generates a
-platform-independent bytecode encapsulating code to load the
-internal structures perl uses to run your program. When the
-generated bytecode is loaded in, your program is ready to run,
-reducing the time which perl would have taken to load and parse
-your program into its internal semi-compiled form. That means that
-compiling with this backend will not help improve the runtime
-execution speed of your program but may improve the start-up time.
-Depending on the environment in which your program runs this may
-or may not be a help.
-
-The resulting bytecode can be run with a special byteperl executable
-or (for non-main programs) be loaded via the C<byteload_fh> function
-in the F<B> module.
-
-=head1 OPTIONS
-
-If there are any non-option arguments, they are taken to be names of
-objects to be saved (probably doesn't work properly yet). Without
-extra arguments, it saves the main program.
-
-=over 4
-
-=item B<-ofilename>
-
-Output to filename instead of STDOUT.
-
-=item B<-afilename>
-
-Append output to filename.
-
-=item B<-->
-
-Force end of options.
-
-=item B<-f>
-
-Force optimisations on or off one at a time. Each can be preceded
-by B<no-> to turn the option off (e.g. B<-fno-compress-nullops>).
-
-=item B<-fcompress-nullops>
-
-Only fills in the necessary fields of ops which have
-been optimised away by perl's internal compiler.
-
-=item B<-fomit-sequence-numbers>
-
-Leaves out code to fill in the op_seq field of all ops
-which is only used by perl's internal compiler.
-
-=item B<-fbypass-nullops>
-
-If op->op_next ever points to a NULLOP, replaces the op_next field
-with the first non-NULLOP in the path of execution.
-
-=item B<-On>
-
-Optimisation level (n = 0, 1, 2, ...). B<-O> means B<-O1>.
-B<-O1> sets B<-fcompress-nullops> B<-fomit-sequence numbers>.
-B<-O2> adds B<-fbypass-nullops>.
-
-=item B<-D>
-
-Debug options (concatenated or separate flags like C<perl -D>).
-
-=item B<-Do>
-
-Prints each OP as it's processed.
-
-=item B<-Db>
-
-Print debugging information about bytecompiler progress.
-
-=item B<-Da>
-
-Tells the (bytecode) assembler to include source assembler lines
-in its output as bytecode comments.
-
-=item B<-DC>
-
-Prints each CV taken from the final symbol tree walk.
-
-=item B<-S>
-
-Output (bytecode) assembler source rather than piping it
-through the assembler and outputting bytecode.
-
-=item B<-upackage>
-
-Stores package in the output.
-
-=back
-
-=head1 EXAMPLES
-
- perl -MO=Bytecode,-O6,-ofoo.plc,-umain foo.pl
-
- perl -MO=Bytecode,-S,-umain foo.pl > foo.S
- assemble foo.S > foo.plc
-
-Note that C<assemble> lives in the C<B> subdirectory of your perl
-library directory. The utility called perlcc may also be used to
-help make use of this compiler.
-
- perl -MO=Bytecode,-uFoo,-oFoo.pmc Foo.pm
-
-=head1 BUGS
-
-Output is still huge and there are still occasional crashes during
-either compilation or ByteLoading. Current status: experimental.
-
-=head1 AUTHORS
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-Benjamin Stuhl, C<sho_pi@hotmail.com>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/C.pm b/contrib/perl5/ext/B/B/C.pm
deleted file mode 100644
index 4befe79..0000000
--- a/contrib/perl5/ext/B/B/C.pm
+++ /dev/null
@@ -1,1657 +0,0 @@
-# C.pm
-#
-# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-package B::C::Section;
-use B ();
-use base B::Section;
-
-sub new
-{
- my $class = shift;
- my $o = $class->SUPER::new(@_);
- push(@$o,[]);
- return $o;
-}
-
-sub add
-{
- my $section = shift;
- push(@{$section->[-1]},@_);
-}
-
-sub index
-{
- my $section = shift;
- return scalar(@{$section->[-1]})-1;
-}
-
-sub output
-{
- my ($section, $fh, $format) = @_;
- my $sym = $section->symtable || {};
- my $default = $section->default;
- foreach (@{$section->[-1]})
- {
- s{(s\\_[0-9a-f]+)}{ exists($sym->{$1}) ? $sym->{$1} : $default; }ge;
- printf $fh $format, $_;
- }
-}
-
-package B::C;
-use Exporter ();
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(output_all output_boilerplate output_main mark_unused
- init_sections set_callback save_unused_subs objsym save_context);
-
-use B qw(minus_c sv_undef walkoptree walksymtable main_root main_start peekop
- class cstring cchar svref_2object compile_stats comppadlist hash
- threadsv_names main_cv init_av opnumber amagic_generation
- AVf_REAL HEf_SVKEY);
-use B::Asmdata qw(@specialsv_name);
-
-use FileHandle;
-use Carp;
-use strict;
-use Config;
-
-my $hv_index = 0;
-my $gv_index = 0;
-my $re_index = 0;
-my $pv_index = 0;
-my $anonsub_index = 0;
-my $initsub_index = 0;
-
-my %symtable;
-my %xsub;
-my $warn_undefined_syms;
-my $verbose;
-my %unused_sub_packages;
-my $nullop_count;
-my $pv_copy_on_grow = 0;
-my ($debug_cops, $debug_av, $debug_cv, $debug_mg);
-my $max_string_len;
-
-my @threadsv_names;
-BEGIN {
- @threadsv_names = threadsv_names();
-}
-
-# Code sections
-my ($init, $decl, $symsect, $binopsect, $condopsect, $copsect,
- $padopsect, $listopsect, $logopsect, $loopsect, $opsect, $pmopsect,
- $pvopsect, $svopsect, $unopsect, $svsect, $xpvsect, $xpvavsect,
- $xpvhvsect, $xpvcvsect, $xpvivsect, $xpvnvsect, $xpvmgsect, $xpvlvsect,
- $xrvsect, $xpvbmsect, $xpviosect );
-
-sub walk_and_save_optree;
-my $saveoptree_callback = \&walk_and_save_optree;
-sub set_callback { $saveoptree_callback = shift }
-sub saveoptree { &$saveoptree_callback(@_) }
-
-sub walk_and_save_optree {
- my ($name, $root, $start) = @_;
- walkoptree($root, "save");
- return objsym($start);
-}
-
-# Current workaround/fix for op_free() trying to free statically
-# defined OPs is to set op_seq = -1 and check for that in op_free().
-# Instead of hardwiring -1 in place of $op->seq, we use $op_seq
-# so that it can be changed back easily if necessary. In fact, to
-# stop compilers from moaning about a U16 being initialised with an
-# uncast -1 (the printf format is %d so we can't tweak it), we have
-# to "know" that op_seq is a U16 and use 65535. Ugh.
-my $op_seq = 65535;
-
-# Look this up here so we can do just a number compare
-# rather than looking up the name of every BASEOP in B::OP
-my $OP_THREADSV = opnumber('threadsv');
-
-sub savesym {
- my ($obj, $value) = @_;
- my $sym = sprintf("s\\_%x", $$obj);
- $symtable{$sym} = $value;
-}
-
-sub objsym {
- my $obj = shift;
- return $symtable{sprintf("s\\_%x", $$obj)};
-}
-
-sub getsym {
- my $sym = shift;
- my $value;
-
- return 0 if $sym eq "sym_0"; # special case
- $value = $symtable{$sym};
- if (defined($value)) {
- return $value;
- } else {
- warn "warning: undefined symbol $sym\n" if $warn_undefined_syms;
- return "UNUSED";
- }
-}
-
-sub savepv {
- my $pv = shift;
- $pv = '' unless defined $pv; # Is this sane ?
- my $pvsym = 0;
- my $pvmax = 0;
- if ($pv_copy_on_grow) {
- my $cstring = cstring($pv);
- if ($cstring ne "0") { # sic
- $pvsym = sprintf("pv%d", $pv_index++);
- $decl->add(sprintf("static char %s[] = %s;", $pvsym, $cstring));
- }
- } else {
- $pvmax = length($pv) + 1;
- }
- return ($pvsym, $pvmax);
-}
-
-sub B::OP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- my $type = $op->type;
- $nullop_count++ unless $type;
- if ($type == $OP_THREADSV) {
- # saves looking up ppaddr but it's a bit naughty to hard code this
- $init->add(sprintf("(void)find_threadsv(%s);",
- cstring($threadsv_names[$op->targ])));
- }
- $opsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x",
- ${$op->next}, ${$op->sibling}, $op->targ,
- $type, $op_seq, $op->flags, $op->private));
- my $ix = $opsect->index;
- $init->add(sprintf("op_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- savesym($op, "&op_list[$ix]");
-}
-
-sub B::FAKEOP::new {
- my ($class, %objdata) = @_;
- bless \%objdata, $class;
-}
-
-sub B::FAKEOP::save {
- my ($op, $level) = @_;
- $opsect->add(sprintf("%s, %s, NULL, %u, %u, %u, 0x%x, 0x%x",
- $op->next, $op->sibling, $op->targ,
- $op->type, $op_seq, $op->flags, $op->private));
- my $ix = $opsect->index;
- $init->add(sprintf("op_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- return "&op_list[$ix]";
-}
-
-sub B::FAKEOP::next { $_[0]->{"next"} || 0 }
-sub B::FAKEOP::type { $_[0]->{type} || 0}
-sub B::FAKEOP::sibling { $_[0]->{sibling} || 0 }
-sub B::FAKEOP::ppaddr { $_[0]->{ppaddr} || 0 }
-sub B::FAKEOP::targ { $_[0]->{targ} || 0 }
-sub B::FAKEOP::flags { $_[0]->{flags} || 0 }
-sub B::FAKEOP::private { $_[0]->{private} || 0 }
-
-sub B::UNOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- $unopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private, ${$op->first}));
- my $ix = $unopsect->index;
- $init->add(sprintf("unop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- savesym($op, "(OP*)&unop_list[$ix]");
-}
-
-sub B::BINOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- $binopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private, ${$op->first}, ${$op->last}));
- my $ix = $binopsect->index;
- $init->add(sprintf("binop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- savesym($op, "(OP*)&binop_list[$ix]");
-}
-
-sub B::LISTOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- $listopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private, ${$op->first}, ${$op->last}));
- my $ix = $listopsect->index;
- $init->add(sprintf("listop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- savesym($op, "(OP*)&listop_list[$ix]");
-}
-
-sub B::LOGOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- $logopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private, ${$op->first}, ${$op->other}));
- my $ix = $logopsect->index;
- $init->add(sprintf("logop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- savesym($op, "(OP*)&logop_list[$ix]");
-}
-
-sub B::LOOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- #warn sprintf("LOOP: redoop %s, nextop %s, lastop %s\n",
- # peekop($op->redoop), peekop($op->nextop),
- # peekop($op->lastop)); # debug
- $loopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, s\\_%x, s\\_%x, s\\_%x",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private, ${$op->first}, ${$op->last},
- ${$op->redoop}, ${$op->nextop},
- ${$op->lastop}));
- my $ix = $loopsect->index;
- $init->add(sprintf("loop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- savesym($op, "(OP*)&loop_list[$ix]");
-}
-
-sub B::PVOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- $pvopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, %s",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private, cstring($op->pv)));
- my $ix = $pvopsect->index;
- $init->add(sprintf("pvop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- savesym($op, "(OP*)&pvop_list[$ix]");
-}
-
-sub B::SVOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- my $svsym = $op->sv->save;
- $svopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, Nullsv",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private));
- my $ix = $svopsect->index;
- $init->add(sprintf("svop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- $init->add("svop_list[$ix].op_sv = (SV*)$svsym;");
- savesym($op, "(OP*)&svop_list[$ix]");
-}
-
-sub B::PADOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- $padopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, 0",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private));
- $init->add(sprintf("padop_list[%d].op_ppaddr = %s;", $padopsect->index, $op->ppaddr));
- my $ix = $padopsect->index;
- $init->add(sprintf("padop_list[$ix].op_padix = %ld;", $op->padix));
- savesym($op, "(OP*)&padop_list[$ix]");
-}
-
-sub B::COP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- warn sprintf("COP: line %d file %s\n", $op->line, $op->file)
- if $debug_cops;
- $copsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, %s, NULL, NULL, %u, %d, %u",
- ${$op->next}, ${$op->sibling},
- $op->targ, $op->type, $op_seq, $op->flags,
- $op->private, cstring($op->label), $op->cop_seq,
- $op->arybase, $op->line));
- my $ix = $copsect->index;
- $init->add(sprintf("cop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
- $init->add(sprintf("CopFILE_set(&cop_list[$ix], %s);", cstring($op->file)),
- sprintf("CopSTASHPV_set(&cop_list[$ix], %s);", cstring($op->stashpv)));
- savesym($op, "(OP*)&cop_list[$ix]");
-}
-
-sub B::PMOP::save {
- my ($op, $level) = @_;
- my $sym = objsym($op);
- return $sym if defined $sym;
- my $replroot = $op->pmreplroot;
- my $replstart = $op->pmreplstart;
- my $replrootfield = sprintf("s\\_%x", $$replroot);
- my $replstartfield = sprintf("s\\_%x", $$replstart);
- my $gvsym;
- my $ppaddr = $op->ppaddr;
- if ($$replroot) {
- # OP_PUSHRE (a mutated version of OP_MATCH for the regexp
- # argument to a split) stores a GV in op_pmreplroot instead
- # of a substitution syntax tree. We don't want to walk that...
- if ($op->name eq "pushre") {
- $gvsym = $replroot->save;
-# warn "PMOP::save saving a pp_pushre with GV $gvsym\n"; # debug
- $replrootfield = 0;
- } else {
- $replstartfield = saveoptree("*ignore*", $replroot, $replstart);
- }
- }
- # pmnext handling is broken in perl itself, I think. Bad op_pmnext
- # fields aren't noticed in perl's runtime (unless you try reset) but we
- # segfault when trying to dereference it to find op->op_pmnext->op_type
- $pmopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %s, %s, 0, 0, 0x%x, 0x%x",
- ${$op->next}, ${$op->sibling}, $op->targ,
- $op->type, $op_seq, $op->flags, $op->private,
- ${$op->first}, ${$op->last},
- $replrootfield, $replstartfield,
- $op->pmflags, $op->pmpermflags,));
- my $pm = sprintf("pmop_list[%d]", $pmopsect->index);
- $init->add(sprintf("$pm.op_ppaddr = %s;", $ppaddr));
- my $re = $op->precomp;
- if (defined($re)) {
- my $resym = sprintf("re%d", $re_index++);
- $decl->add(sprintf("static char *$resym = %s;", cstring($re)));
- $init->add(sprintf("$pm.op_pmregexp = pregcomp($resym, $resym + %u, &$pm);",
- length($re)));
- }
- if ($gvsym) {
- $init->add("$pm.op_pmreplroot = (OP*)$gvsym;");
- }
- savesym($op, "(OP*)&$pm");
-}
-
-sub B::SPECIAL::save {
- my ($sv) = @_;
- # special case: $$sv is not the address but an index into specialsv_list
-# warn "SPECIAL::save specialsv $$sv\n"; # debug
- my $sym = $specialsv_name[$$sv];
- if (!defined($sym)) {
- confess "unknown specialsv index $$sv passed to B::SPECIAL::save";
- }
- return $sym;
-}
-
-sub B::OBJECT::save {}
-
-sub B::NULL::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
-# warn "Saving SVt_NULL SV\n"; # debug
- # debug
- if ($$sv == 0) {
- warn "NULL::save for sv = 0 called from @{[(caller(1))[3]]}\n";
- return savesym($sv, "Nullsv /* XXX */");
- }
- $svsect->add(sprintf("0, %u, 0x%x", $sv->REFCNT , $sv->FLAGS));
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub B::IV::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- $xpvivsect->add(sprintf("0, 0, 0, %d", $sv->IVX));
- $svsect->add(sprintf("&xpviv_list[%d], %lu, 0x%x",
- $xpvivsect->index, $sv->REFCNT , $sv->FLAGS));
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub B::NV::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- my $val= $sv->NVX;
- $val .= '.00' if $val =~ /^-?\d+$/;
- $xpvnvsect->add(sprintf("0, 0, 0, %d, %s", $sv->IVX, $val));
- $svsect->add(sprintf("&xpvnv_list[%d], %lu, 0x%x",
- $xpvnvsect->index, $sv->REFCNT , $sv->FLAGS));
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub savepvn {
- my ($dest,$pv) = @_;
- my @res;
- if (defined $max_string_len && length($pv) > $max_string_len) {
- push @res, sprintf("New(0,%s,%u,char);", $dest, length($pv)+1);
- my $offset = 0;
- while (length $pv) {
- my $str = substr $pv, 0, $max_string_len, '';
- push @res, sprintf("Copy(%s,$dest+$offset,%u,char);",
- cstring($str), length($str));
- $offset += length $str;
- }
- push @res, sprintf("%s[%u] = '\\0';", $dest, $offset);
- }
- else {
- push @res, sprintf("%s = savepvn(%s, %u);", $dest,
- cstring($pv), length($pv));
- }
- return @res;
-}
-
-sub B::PVLV::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- my $pv = $sv->PV;
- my $len = length($pv);
- my ($pvsym, $pvmax) = savepv($pv);
- my ($lvtarg, $lvtarg_sym);
- $xpvlvsect->add(sprintf("%s, %u, %u, %d, %g, 0, 0, %u, %u, 0, %s",
- $pvsym, $len, $pvmax, $sv->IVX, $sv->NVX,
- $sv->TARGOFF, $sv->TARGLEN, cchar($sv->TYPE)));
- $svsect->add(sprintf("&xpvlv_list[%d], %lu, 0x%x",
- $xpvlvsect->index, $sv->REFCNT , $sv->FLAGS));
- if (!$pv_copy_on_grow) {
- $init->add(savepvn(sprintf("xpvlv_list[%d].xpv_pv",
- $xpvlvsect->index), $pv));
- }
- $sv->save_magic;
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub B::PVIV::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- my $pv = $sv->PV;
- my $len = length($pv);
- my ($pvsym, $pvmax) = savepv($pv);
- $xpvivsect->add(sprintf("%s, %u, %u, %d", $pvsym, $len, $pvmax, $sv->IVX));
- $svsect->add(sprintf("&xpviv_list[%d], %u, 0x%x",
- $xpvivsect->index, $sv->REFCNT , $sv->FLAGS));
- if (!$pv_copy_on_grow) {
- $init->add(savepvn(sprintf("xpviv_list[%d].xpv_pv",
- $xpvivsect->index), $pv));
- }
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub B::PVNV::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- my $pv = $sv->PV;
- $pv = '' unless defined $pv;
- my $len = length($pv);
- my ($pvsym, $pvmax) = savepv($pv);
- my $val= $sv->NVX;
- $val .= '.00' if $val =~ /^-?\d+$/;
- $xpvnvsect->add(sprintf("%s, %u, %u, %d, %s",
- $pvsym, $len, $pvmax, $sv->IVX, $val));
- $svsect->add(sprintf("&xpvnv_list[%d], %lu, 0x%x",
- $xpvnvsect->index, $sv->REFCNT , $sv->FLAGS));
- if (!$pv_copy_on_grow) {
- $init->add(savepvn(sprintf("xpvnv_list[%d].xpv_pv",
- $xpvnvsect->index), $pv));
- }
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub B::BM::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- my $pv = $sv->PV . "\0" . $sv->TABLE;
- my $len = length($pv);
- $xpvbmsect->add(sprintf("0, %u, %u, %d, %s, 0, 0, %d, %u, 0x%x",
- $len, $len + 258, $sv->IVX, $sv->NVX,
- $sv->USEFUL, $sv->PREVIOUS, $sv->RARE));
- $svsect->add(sprintf("&xpvbm_list[%d], %lu, 0x%x",
- $xpvbmsect->index, $sv->REFCNT , $sv->FLAGS));
- $sv->save_magic;
- $init->add(savepvn(sprintf("xpvbm_list[%d].xpv_pv",
- $xpvbmsect->index), $pv),
- sprintf("xpvbm_list[%d].xpv_cur = %u;",
- $xpvbmsect->index, $len - 257));
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub B::PV::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- my $pv = $sv->PV;
- my $len = length($pv);
- my ($pvsym, $pvmax) = savepv($pv);
- $xpvsect->add(sprintf("%s, %u, %u", $pvsym, $len, $pvmax));
- $svsect->add(sprintf("&xpv_list[%d], %lu, 0x%x",
- $xpvsect->index, $sv->REFCNT , $sv->FLAGS));
- if (!$pv_copy_on_grow) {
- $init->add(savepvn(sprintf("xpv_list[%d].xpv_pv",
- $xpvsect->index), $pv));
- }
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub B::PVMG::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- my $pv = $sv->PV;
- my $len = length($pv);
- my ($pvsym, $pvmax) = savepv($pv);
- $xpvmgsect->add(sprintf("%s, %u, %u, %d, %s, 0, 0",
- $pvsym, $len, $pvmax, $sv->IVX, $sv->NVX));
- $svsect->add(sprintf("&xpvmg_list[%d], %lu, 0x%x",
- $xpvmgsect->index, $sv->REFCNT , $sv->FLAGS));
- if (!$pv_copy_on_grow) {
- $init->add(savepvn(sprintf("xpvmg_list[%d].xpv_pv",
- $xpvmgsect->index), $pv));
- }
- $sym = savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
- $sv->save_magic;
- return $sym;
-}
-
-sub B::PVMG::save_magic {
- my ($sv) = @_;
- #warn sprintf("saving magic for %s (0x%x)\n", class($sv), $$sv); # debug
- my $stash = $sv->SvSTASH;
- $stash->save;
- if ($$stash) {
- warn sprintf("xmg_stash = %s (0x%x)\n", $stash->NAME, $$stash)
- if $debug_mg;
- # XXX Hope stash is already going to be saved.
- $init->add(sprintf("SvSTASH(s\\_%x) = s\\_%x;", $$sv, $$stash));
- }
- my @mgchain = $sv->MAGIC;
- my ($mg, $type, $obj, $ptr,$len,$ptrsv);
- foreach $mg (@mgchain) {
- $type = $mg->TYPE;
- $obj = $mg->OBJ;
- $ptr = $mg->PTR;
- $len=$mg->LENGTH;
- if ($debug_mg) {
- warn sprintf("magic %s (0x%x), obj %s (0x%x), type %s, ptr %s\n",
- class($sv), $$sv, class($obj), $$obj,
- cchar($type), cstring($ptr));
- }
- $obj->save;
- if ($len == HEf_SVKEY){
- #The pointer is an SV*
- $ptrsv=svref_2object($ptr)->save;
- $init->add(sprintf("sv_magic((SV*)s\\_%x, (SV*)s\\_%x, %s,(char *) %s, %d);",
- $$sv, $$obj, cchar($type),$ptrsv,$len));
- }else{
- $init->add(sprintf("sv_magic((SV*)s\\_%x, (SV*)s\\_%x, %s, %s, %d);",
- $$sv, $$obj, cchar($type),cstring($ptr),$len));
- }
- }
-}
-
-sub B::RV::save {
- my ($sv) = @_;
- my $sym = objsym($sv);
- return $sym if defined $sym;
- my $rv = $sv->RV->save;
- $rv =~ s/^\([AGHS]V\s*\*\)\s*(\&sv_list.*)$/$1/;
- $xrvsect->add($rv);
- $svsect->add(sprintf("&xrv_list[%d], %lu, 0x%x",
- $xrvsect->index, $sv->REFCNT , $sv->FLAGS));
- return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
-}
-
-sub try_autoload {
- my ($cvstashname, $cvname) = @_;
- warn sprintf("No definition for sub %s::%s\n", $cvstashname, $cvname);
- # Handle AutoLoader classes explicitly. Any more general AUTOLOAD
- # use should be handled by the class itself.
- no strict 'refs';
- my $isa = \@{"$cvstashname\::ISA"};
- if (grep($_ eq "AutoLoader", @$isa)) {
- warn "Forcing immediate load of sub derived from AutoLoader\n";
- # Tweaked version of AutoLoader::AUTOLOAD
- my $dir = $cvstashname;
- $dir =~ s(::)(/)g;
- eval { require "auto/$dir/$cvname.al" };
- if ($@) {
- warn qq(failed require "auto/$dir/$cvname.al": $@\n);
- return 0;
- } else {
- return 1;
- }
- }
-}
-sub Dummy_initxs{};
-sub B::CV::save {
- my ($cv) = @_;
- my $sym = objsym($cv);
- if (defined($sym)) {
-# warn sprintf("CV 0x%x already saved as $sym\n", $$cv); # debug
- return $sym;
- }
- # Reserve a place in svsect and xpvcvsect and record indices
- my $gv = $cv->GV;
- my ($cvname, $cvstashname);
- if ($$gv){
- $cvname = $gv->NAME;
- $cvstashname = $gv->STASH->NAME;
- }
- my $root = $cv->ROOT;
- my $cvxsub = $cv->XSUB;
- #INIT is removed from the symbol table, so this call must come
- # from PL_initav->save. Re-bootstrapping will push INIT back in
- # so nullop should be sent.
- if ($cvxsub && ($cvname ne "INIT")) {
- my $egv = $gv->EGV;
- my $stashname = $egv->STASH->NAME;
- if ($cvname eq "bootstrap")
- {
- my $file = $gv->FILE;
- $decl->add("/* bootstrap $file */");
- warn "Bootstrap $stashname $file\n";
- $xsub{$stashname}='Dynamic';
- # $xsub{$stashname}='Static' unless $xsub{$stashname};
- return qq/NULL/;
- }
- warn sprintf("stub for XSUB $cvstashname\:\:$cvname CV 0x%x\n", $$cv) if $debug_cv;
- return qq/(perl_get_cv("$stashname\:\:$cvname",TRUE))/;
- }
- if ($cvxsub && $cvname eq "INIT") {
- no strict 'refs';
- return svref_2object(\&Dummy_initxs)->save;
- }
- my $sv_ix = $svsect->index + 1;
- $svsect->add("svix$sv_ix");
- my $xpvcv_ix = $xpvcvsect->index + 1;
- $xpvcvsect->add("xpvcvix$xpvcv_ix");
- # Save symbol now so that GvCV() doesn't recurse back to us via CvGV()
- $sym = savesym($cv, "&sv_list[$sv_ix]");
- warn sprintf("saving $cvstashname\:\:$cvname CV 0x%x as $sym\n", $$cv) if $debug_cv;
- if (!$$root && !$cvxsub) {
- if (try_autoload($cvstashname, $cvname)) {
- # Recalculate root and xsub
- $root = $cv->ROOT;
- $cvxsub = $cv->XSUB;
- if ($$root || $cvxsub) {
- warn "Successful forced autoload\n";
- }
- }
- }
- my $startfield = 0;
- my $padlist = $cv->PADLIST;
- my $pv = $cv->PV;
- my $xsub = 0;
- my $xsubany = "Nullany";
- if ($$root) {
- warn sprintf("saving op tree for CV 0x%x, root = 0x%x\n",
- $$cv, $$root) if $debug_cv;
- my $ppname = "";
- if ($$gv) {
- my $stashname = $gv->STASH->NAME;
- my $gvname = $gv->NAME;
- if ($gvname ne "__ANON__") {
- $ppname = (${$gv->FORM} == $$cv) ? "pp_form_" : "pp_sub_";
- $ppname .= ($stashname eq "main") ?
- $gvname : "$stashname\::$gvname";
- $ppname =~ s/::/__/g;
- if ($gvname eq "INIT"){
- $ppname .= "_$initsub_index";
- $initsub_index++;
- }
- }
- }
- if (!$ppname) {
- $ppname = "pp_anonsub_$anonsub_index";
- $anonsub_index++;
- }
- $startfield = saveoptree($ppname, $root, $cv->START, $padlist->ARRAY);
- warn sprintf("done saving op tree for CV 0x%x, name %s, root 0x%x\n",
- $$cv, $ppname, $$root) if $debug_cv;
- if ($$padlist) {
- warn sprintf("saving PADLIST 0x%x for CV 0x%x\n",
- $$padlist, $$cv) if $debug_cv;
- $padlist->save;
- warn sprintf("done saving PADLIST 0x%x for CV 0x%x\n",
- $$padlist, $$cv) if $debug_cv;
- }
- }
- else {
- warn sprintf("No definition for sub %s::%s (unable to autoload)\n",
- $cvstashname, $cvname); # debug
- }
- $pv = '' unless defined $pv; # Avoid use of undef warnings
- $symsect->add(sprintf("xpvcvix%d\t%s, %u, 0, %d, %s, 0, Nullhv, Nullhv, %s, s\\_%x, $xsub, $xsubany, Nullgv, \"\", %d, s\\_%x, (CV*)s\\_%x, 0x%x",
- $xpvcv_ix, cstring($pv), length($pv), $cv->IVX,
- $cv->NVX, $startfield, ${$cv->ROOT}, $cv->DEPTH,
- $$padlist, ${$cv->OUTSIDE}, $cv->CvFLAGS));
-
- if (${$cv->OUTSIDE} == ${main_cv()}){
- $init->add(sprintf("CvOUTSIDE(s\\_%x)=PL_main_cv;",$$cv));
- $init->add(sprintf("SvREFCNT_inc(PL_main_cv);"));
- }
-
- if ($$gv) {
- $gv->save;
- $init->add(sprintf("CvGV(s\\_%x) = s\\_%x;",$$cv,$$gv));
- warn sprintf("done saving GV 0x%x for CV 0x%x\n",
- $$gv, $$cv) if $debug_cv;
- }
- $init->add(sprintf("CvFILE($sym) = %s;", cstring($cv->FILE)));
- my $stash = $cv->STASH;
- if ($$stash) {
- $stash->save;
- $init->add(sprintf("CvSTASH(s\\_%x) = s\\_%x;", $$cv, $$stash));
- warn sprintf("done saving STASH 0x%x for CV 0x%x\n",
- $$stash, $$cv) if $debug_cv;
- }
- $symsect->add(sprintf("svix%d\t(XPVCV*)&xpvcv_list[%u], %lu, 0x%x",
- $sv_ix, $xpvcv_ix, $cv->REFCNT +1 , $cv->FLAGS));
- return $sym;
-}
-
-sub B::GV::save {
- my ($gv) = @_;
- my $sym = objsym($gv);
- if (defined($sym)) {
- #warn sprintf("GV 0x%x already saved as $sym\n", $$gv); # debug
- return $sym;
- } else {
- my $ix = $gv_index++;
- $sym = savesym($gv, "gv_list[$ix]");
- #warn sprintf("Saving GV 0x%x as $sym\n", $$gv); # debug
- }
- my $is_empty = $gv->is_empty;
- my $gvname = $gv->NAME;
- my $name = cstring($gv->STASH->NAME . "::" . $gvname);
- #warn "GV name is $name\n"; # debug
- my $egvsym;
- unless ($is_empty) {
- my $egv = $gv->EGV;
- if ($$gv != $$egv) {
- #warn(sprintf("EGV name is %s, saving it now\n",
- # $egv->STASH->NAME . "::" . $egv->NAME)); # debug
- $egvsym = $egv->save;
- }
- }
- $init->add(qq[$sym = gv_fetchpv($name, TRUE, SVt_PV);],
- sprintf("SvFLAGS($sym) = 0x%x;", $gv->FLAGS),
- sprintf("GvFLAGS($sym) = 0x%x;", $gv->GvFLAGS));
- $init->add(sprintf("GvLINE($sym) = %u;", $gv->LINE)) unless $is_empty;
-
- # Shouldn't need to do save_magic since gv_fetchpv handles that
- #$gv->save_magic;
- my $refcnt = $gv->REFCNT + 1;
- $init->add(sprintf("SvREFCNT($sym) += %u;", $refcnt - 1)) if $refcnt > 1;
-
- return $sym if $is_empty;
-
- my $gvrefcnt = $gv->GvREFCNT;
- if ($gvrefcnt > 1) {
- $init->add(sprintf("GvREFCNT($sym) += %u;", $gvrefcnt - 1));
- }
- if (defined($egvsym)) {
- # Shared glob *foo = *bar
- $init->add("gp_free($sym);",
- "GvGP($sym) = GvGP($egvsym);");
- } elsif ($gvname !~ /^([^A-Za-z]|STDIN|STDOUT|STDERR|ARGV|SIG|ENV)$/) {
- # Don't save subfields of special GVs (*_, *1, *# and so on)
-# warn "GV::save saving subfields\n"; # debug
- my $gvsv = $gv->SV;
- if ($$gvsv) {
- $gvsv->save;
- $init->add(sprintf("GvSV($sym) = s\\_%x;", $$gvsv));
-# warn "GV::save \$$name\n"; # debug
- }
- my $gvav = $gv->AV;
- if ($$gvav) {
- $gvav->save;
- $init->add(sprintf("GvAV($sym) = s\\_%x;", $$gvav));
-# warn "GV::save \@$name\n"; # debug
- }
- my $gvhv = $gv->HV;
- if ($$gvhv) {
- $gvhv->save;
- $init->add(sprintf("GvHV($sym) = s\\_%x;", $$gvhv));
-# warn "GV::save \%$name\n"; # debug
- }
- my $gvcv = $gv->CV;
- if ($$gvcv) {
- my $origname=cstring($gvcv->GV->EGV->STASH->NAME .
- "::" . $gvcv->GV->EGV->NAME);
- if (0 && $gvcv->XSUB && $name ne $origname) { #XSUB alias
- # must save as a 'stub' so newXS() has a CV to populate
- $init->add("{ CV *cv;");
- $init->add("\tcv=perl_get_cv($origname,TRUE);");
- $init->add("\tGvCV($sym)=cv;");
- $init->add("\tSvREFCNT_inc((SV *)cv);");
- $init->add("}");
- } else {
- $init->add(sprintf("GvCV($sym) = (CV*)(%s);", $gvcv->save));
-# warn "GV::save &$name\n"; # debug
- }
- }
- $init->add(sprintf("GvFILE($sym) = %s;", cstring($gv->FILE)));
-# warn "GV::save GvFILE(*$name)\n"; # debug
- my $gvform = $gv->FORM;
- if ($$gvform) {
- $gvform->save;
- $init->add(sprintf("GvFORM($sym) = (CV*)s\\_%x;", $$gvform));
-# warn "GV::save GvFORM(*$name)\n"; # debug
- }
- my $gvio = $gv->IO;
- if ($$gvio) {
- $gvio->save;
- $init->add(sprintf("GvIOp($sym) = s\\_%x;", $$gvio));
-# warn "GV::save GvIO(*$name)\n"; # debug
- }
- }
- return $sym;
-}
-sub B::AV::save {
- my ($av) = @_;
- my $sym = objsym($av);
- return $sym if defined $sym;
- my $avflags = $av->AvFLAGS;
- $xpvavsect->add(sprintf("0, -1, -1, 0, 0.0, 0, Nullhv, 0, 0, 0x%x",
- $avflags));
- $svsect->add(sprintf("&xpvav_list[%d], %lu, 0x%x",
- $xpvavsect->index, $av->REFCNT , $av->FLAGS));
- my $sv_list_index = $svsect->index;
- my $fill = $av->FILL;
- $av->save_magic;
- warn sprintf("saving AV 0x%x FILL=$fill AvFLAGS=0x%x", $$av, $avflags)
- if $debug_av;
- # XXX AVf_REAL is wrong test: need to save comppadlist but not stack
- #if ($fill > -1 && ($avflags & AVf_REAL)) {
- if ($fill > -1) {
- my @array = $av->ARRAY;
- if ($debug_av) {
- my $el;
- my $i = 0;
- foreach $el (@array) {
- warn sprintf("AV 0x%x[%d] = %s 0x%x\n",
- $$av, $i++, class($el), $$el);
- }
- }
- my @names = map($_->save, @array);
- # XXX Better ways to write loop?
- # Perhaps svp[0] = ...; svp[1] = ...; svp[2] = ...;
- # Perhaps I32 i = 0; svp[i++] = ...; svp[i++] = ...; svp[i++] = ...;
- $init->add("{",
- "\tSV **svp;",
- "\tAV *av = (AV*)&sv_list[$sv_list_index];",
- "\tav_extend(av, $fill);",
- "\tsvp = AvARRAY(av);",
- map("\t*svp++ = (SV*)$_;", @names),
- "\tAvFILLp(av) = $fill;",
- "}");
- } else {
- my $max = $av->MAX;
- $init->add("av_extend((AV*)&sv_list[$sv_list_index], $max);")
- if $max > -1;
- }
- return savesym($av, "(AV*)&sv_list[$sv_list_index]");
-}
-
-sub B::HV::save {
- my ($hv) = @_;
- my $sym = objsym($hv);
- return $sym if defined $sym;
- my $name = $hv->NAME;
- if ($name) {
- # It's a stash
-
- # A perl bug means HvPMROOT isn't altered when a PMOP is freed. Usually
- # the only symptom is that sv_reset tries to reset the PMf_USED flag of
- # a trashed op but we look at the trashed op_type and segfault.
- #my $adpmroot = ${$hv->PMROOT};
- my $adpmroot = 0;
- $decl->add("static HV *hv$hv_index;");
- # XXX Beware of weird package names containing double-quotes, \n, ...?
- $init->add(qq[hv$hv_index = gv_stashpv("$name", TRUE);]);
- if ($adpmroot) {
- $init->add(sprintf("HvPMROOT(hv$hv_index) = (PMOP*)s\\_%x;",
- $adpmroot));
- }
- $sym = savesym($hv, "hv$hv_index");
- $hv_index++;
- return $sym;
- }
- # It's just an ordinary HV
- $xpvhvsect->add(sprintf("0, 0, %d, 0, 0.0, 0, Nullhv, %d, 0, 0, 0",
- $hv->MAX, $hv->RITER));
- $svsect->add(sprintf("&xpvhv_list[%d], %lu, 0x%x",
- $xpvhvsect->index, $hv->REFCNT , $hv->FLAGS));
- my $sv_list_index = $svsect->index;
- my @contents = $hv->ARRAY;
- if (@contents) {
- my $i;
- for ($i = 1; $i < @contents; $i += 2) {
- $contents[$i] = $contents[$i]->save;
- }
- $init->add("{", "\tHV *hv = (HV*)&sv_list[$sv_list_index];");
- while (@contents) {
- my ($key, $value) = splice(@contents, 0, 2);
- $init->add(sprintf("\thv_store(hv, %s, %u, %s, %s);",
- cstring($key),length($key),$value, hash($key)));
-# $init->add(sprintf("\thv_store(hv, %s, %u, %s, %s);",
-# cstring($key),length($key),$value, 0));
- }
- $init->add("}");
- }
- $hv->save_magic();
- return savesym($hv, "(HV*)&sv_list[$sv_list_index]");
-}
-
-sub B::IO::save {
- my ($io) = @_;
- my $sym = objsym($io);
- return $sym if defined $sym;
- my $pv = $io->PV;
- $pv = '' unless defined $pv;
- my $len = length($pv);
- $xpviosect->add(sprintf("0, %u, %u, %d, %s, 0, 0, 0, 0, 0, %d, %d, %d, %d, %s, Nullgv, %s, Nullgv, %s, Nullgv, %d, %s, 0x%x",
- $len, $len+1, $io->IVX, $io->NVX, $io->LINES,
- $io->PAGE, $io->PAGE_LEN, $io->LINES_LEFT,
- cstring($io->TOP_NAME), cstring($io->FMT_NAME),
- cstring($io->BOTTOM_NAME), $io->SUBPROCESS,
- cchar($io->IoTYPE), $io->IoFLAGS));
- $svsect->add(sprintf("&xpvio_list[%d], %lu, 0x%x",
- $xpviosect->index, $io->REFCNT , $io->FLAGS));
- $sym = savesym($io, sprintf("(IO*)&sv_list[%d]", $svsect->index));
- my ($field, $fsym);
- foreach $field (qw(TOP_GV FMT_GV BOTTOM_GV)) {
- $fsym = $io->$field();
- if ($$fsym) {
- $init->add(sprintf("Io$field($sym) = (GV*)s\\_%x;", $$fsym));
- $fsym->save;
- }
- }
- $io->save_magic;
- return $sym;
-}
-
-sub B::SV::save {
- my $sv = shift;
- # This is where we catch an honest-to-goodness Nullsv (which gets
- # blessed into B::SV explicitly) and any stray erroneous SVs.
- return 0 unless $$sv;
- confess sprintf("cannot save that type of SV: %s (0x%x)\n",
- class($sv), $$sv);
-}
-
-sub output_all {
- my $init_name = shift;
- my $section;
- my @sections = ($opsect, $unopsect, $binopsect, $logopsect, $condopsect,
- $listopsect, $pmopsect, $svopsect, $padopsect, $pvopsect,
- $loopsect, $copsect, $svsect, $xpvsect,
- $xpvavsect, $xpvhvsect, $xpvcvsect, $xpvivsect, $xpvnvsect,
- $xpvmgsect, $xpvlvsect, $xrvsect, $xpvbmsect, $xpviosect);
- $symsect->output(\*STDOUT, "#define %s\n");
- print "\n";
- output_declarations();
- foreach $section (@sections) {
- my $lines = $section->index + 1;
- if ($lines) {
- my $name = $section->name;
- my $typename = ($name eq "xpvcv") ? "XPVCV_or_similar" : uc($name);
- print "Static $typename ${name}_list[$lines];\n";
- }
- }
- $decl->output(\*STDOUT, "%s\n");
- print "\n";
- foreach $section (@sections) {
- my $lines = $section->index + 1;
- if ($lines) {
- my $name = $section->name;
- my $typename = ($name eq "xpvcv") ? "XPVCV_or_similar" : uc($name);
- printf "static %s %s_list[%u] = {\n", $typename, $name, $lines;
- $section->output(\*STDOUT, "\t{ %s },\n");
- print "};\n\n";
- }
- }
-
- print <<"EOT";
-static int $init_name()
-{
- dTARG;
- dSP;
-EOT
- $init->output(\*STDOUT, "\t%s\n");
- print "\treturn 0;\n}\n";
- if ($verbose) {
- warn compile_stats();
- warn "NULLOP count: $nullop_count\n";
- }
-}
-
-sub output_declarations {
- print <<'EOT';
-#ifdef BROKEN_STATIC_REDECL
-#define Static extern
-#else
-#define Static static
-#endif /* BROKEN_STATIC_REDECL */
-
-#ifdef BROKEN_UNION_INIT
-/*
- * Cribbed from cv.h with ANY (a union) replaced by void*.
- * Some pre-Standard compilers can't cope with initialising unions. Ho hum.
- */
-typedef struct {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xp_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xof_off; /* integer value */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* magic for scalar array */
- HV* xmg_stash; /* class package */
-
- HV * xcv_stash;
- OP * xcv_start;
- OP * xcv_root;
- void (*xcv_xsub) (pTHXo_ CV*);
- ANY xcv_xsubany;
- GV * xcv_gv;
- char * xcv_file;
- long xcv_depth; /* >= 2 indicates recursive call */
- AV * xcv_padlist;
- CV * xcv_outside;
-#ifdef USE_THREADS
- perl_mutex *xcv_mutexp;
- struct perl_thread *xcv_owner; /* current owner thread */
-#endif /* USE_THREADS */
- cv_flags_t xcv_flags;
-} XPVCV_or_similar;
-#define ANYINIT(i) i
-#else
-#define XPVCV_or_similar XPVCV
-#define ANYINIT(i) {i}
-#endif /* BROKEN_UNION_INIT */
-#define Nullany ANYINIT(0)
-
-#define UNUSED 0
-#define sym_0 0
-
-EOT
- print "static GV *gv_list[$gv_index];\n" if $gv_index;
- print "\n";
-}
-
-
-sub output_boilerplate {
- print <<'EOT';
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-/* Workaround for mapstart: the only op which needs a different ppaddr */
-#undef Perl_pp_mapstart
-#define Perl_pp_mapstart Perl_pp_grepstart
-#define XS_DynaLoader_boot_DynaLoader boot_DynaLoader
-EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
-
-static void xs_init (pTHX);
-static void dl_init (pTHX);
-static PerlInterpreter *my_perl;
-EOT
-}
-
-sub output_main {
- print <<'EOT';
-int
-main(int argc, char **argv, char **env)
-{
- int exitstatus;
- int i;
- char **fakeargv;
-
- PERL_SYS_INIT3(&argc,&argv,&env);
-
- if (!PL_do_undump) {
- my_perl = perl_alloc();
- if (!my_perl)
- exit(1);
- perl_construct( my_perl );
- PL_perl_destruct_level = 0;
- }
-
-#ifdef CSH
- if (!PL_cshlen)
- PL_cshlen = strlen(PL_cshname);
-#endif
-
-#ifdef ALLOW_PERL_OPTIONS
-#define EXTRA_OPTIONS 2
-#else
-#define EXTRA_OPTIONS 3
-#endif /* ALLOW_PERL_OPTIONS */
- New(666, fakeargv, argc + EXTRA_OPTIONS + 1, char *);
- fakeargv[0] = argv[0];
- fakeargv[1] = "-e";
- fakeargv[2] = "";
-#ifndef ALLOW_PERL_OPTIONS
- fakeargv[3] = "--";
-#endif /* ALLOW_PERL_OPTIONS */
- for (i = 1; i < argc; i++)
- fakeargv[i + EXTRA_OPTIONS] = argv[i];
- fakeargv[argc + EXTRA_OPTIONS] = 0;
-
- exitstatus = perl_parse(my_perl, xs_init, argc + EXTRA_OPTIONS,
- fakeargv, NULL);
- if (exitstatus)
- exit( exitstatus );
-
- sv_setpv(GvSV(gv_fetchpv("0", TRUE, SVt_PV)), argv[0]);
- PL_main_cv = PL_compcv;
- PL_compcv = 0;
-
- exitstatus = perl_init();
- if (exitstatus)
- exit( exitstatus );
- dl_init(aTHX);
-
- exitstatus = perl_run( my_perl );
-
- perl_destruct( my_perl );
- perl_free( my_perl );
-
- PERL_SYS_TERM();
-
- exit( exitstatus );
-}
-
-/* yanked from perl.c */
-static void
-xs_init(pTHX)
-{
- char *file = __FILE__;
- dTARG;
- dSP;
-EOT
- print "\n#ifdef USE_DYNAMIC_LOADING";
- print qq/\n\tnewXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);/;
- print "\n#endif\n" ;
- # delete $xsub{'DynaLoader'};
- delete $xsub{'UNIVERSAL'};
- print("/* bootstrapping code*/\n\tSAVETMPS;\n");
- print("\ttarg=sv_newmortal();\n");
- print "#ifdef DYNALOADER_BOOTSTRAP\n";
- print "\tPUSHMARK(sp);\n";
- print qq/\tXPUSHp("DynaLoader",strlen("DynaLoader"));\n/;
- print qq/\tPUTBACK;\n/;
- print "\tboot_DynaLoader(aTHX_ NULL);\n";
- print qq/\tSPAGAIN;\n/;
- print "#endif\n";
- foreach my $stashname (keys %xsub){
- if ($xsub{$stashname} ne 'Dynamic') {
- my $stashxsub=$stashname;
- $stashxsub =~ s/::/__/g;
- print "\tPUSHMARK(sp);\n";
- print qq/\tXPUSHp("$stashname",strlen("$stashname"));\n/;
- print qq/\tPUTBACK;\n/;
- print "\tboot_$stashxsub(aTHX_ NULL);\n";
- print qq/\tSPAGAIN;\n/;
- }
- }
- print("\tFREETMPS;\n/* end bootstrapping code */\n");
- print "}\n";
-
-print <<'EOT';
-static void
-dl_init(pTHX)
-{
- char *file = __FILE__;
- dTARG;
- dSP;
-EOT
- print("/* Dynamicboot strapping code*/\n\tSAVETMPS;\n");
- print("\ttarg=sv_newmortal();\n");
- foreach my $stashname (@DynaLoader::dl_modules) {
- warn "Loaded $stashname\n";
- if (exists($xsub{$stashname}) && $xsub{$stashname} eq 'Dynamic') {
- my $stashxsub=$stashname;
- $stashxsub =~ s/::/__/g;
- print "\tPUSHMARK(sp);\n";
- print qq/\tXPUSHp("$stashname",/,length($stashname),qq/);\n/;
- print qq/\tPUTBACK;\n/;
- print "#ifdef DYNALOADER_BOOTSTRAP\n";
- warn "bootstrapping $stashname added to xs_init\n";
- print qq/\tperl_call_method("bootstrap",G_DISCARD);\n/;
- print "\n#else\n";
- print "\tboot_$stashxsub(aTHX_ NULL);\n";
- print "#endif\n";
- print qq/\tSPAGAIN;\n/;
- }
- }
- print("\tFREETMPS;\n/* end Dynamic bootstrapping code */\n");
- print "}\n";
-}
-sub dump_symtable {
- # For debugging
- my ($sym, $val);
- warn "----Symbol table:\n";
- while (($sym, $val) = each %symtable) {
- warn "$sym => $val\n";
- }
- warn "---End of symbol table\n";
-}
-
-sub save_object {
- my $sv;
- foreach $sv (@_) {
- svref_2object($sv)->save;
- }
-}
-
-sub Dummy_BootStrap { }
-
-sub B::GV::savecv
-{
- my $gv = shift;
- my $package=$gv->STASH->NAME;
- my $name = $gv->NAME;
- my $cv = $gv->CV;
- my $sv = $gv->SV;
- my $av = $gv->AV;
- my $hv = $gv->HV;
-
- # We may be looking at this package just because it is a branch in the
- # symbol table which is on the path to a package which we need to save
- # e.g. this is 'Getopt' and we need to save 'Getopt::Long'
- #
- return unless ($unused_sub_packages{$package});
- return unless ($$cv || $$av || $$sv || $$hv);
- $gv->save;
-}
-
-sub mark_package
-{
- my $package = shift;
- unless ($unused_sub_packages{$package})
- {
- no strict 'refs';
- $unused_sub_packages{$package} = 1;
- if (defined @{$package.'::ISA'})
- {
- foreach my $isa (@{$package.'::ISA'})
- {
- if ($isa eq 'DynaLoader')
- {
- unless (defined(&{$package.'::bootstrap'}))
- {
- warn "Forcing bootstrap of $package\n";
- eval { $package->bootstrap };
- }
- }
-# else
- {
- unless ($unused_sub_packages{$isa})
- {
- warn "$isa saved (it is in $package\'s \@ISA)\n";
- mark_package($isa);
- }
- }
- }
- }
- }
- return 1;
-}
-
-sub should_save
-{
- no strict qw(vars refs);
- my $package = shift;
- $package =~ s/::$//;
- return $unused_sub_packages{$package} = 0 if ($package =~ /::::/); # skip ::::ISA::CACHE etc.
- # warn "Considering $package\n";#debug
- foreach my $u (grep($unused_sub_packages{$_},keys %unused_sub_packages))
- {
- # If this package is a prefix to something we are saving, traverse it
- # but do not mark it for saving if it is not already
- # e.g. to get to Getopt::Long we need to traverse Getopt but need
- # not save Getopt
- return 1 if ($u =~ /^$package\:\:/);
- }
- if (exists $unused_sub_packages{$package})
- {
- # warn "Cached $package is ".$unused_sub_packages{$package}."\n";
- delete_unsaved_hashINC($package) unless $unused_sub_packages{$package} ;
- return $unused_sub_packages{$package};
- }
- # Omit the packages which we use (and which cause grief
- # because of fancy "goto &$AUTOLOAD" stuff).
- # XXX Surely there must be a nicer way to do this.
- if ($package eq "FileHandle" || $package eq "Config" ||
- $package eq "SelectSaver" || $package =~/^(B|IO)::/)
- {
- delete_unsaved_hashINC($package);
- return $unused_sub_packages{$package} = 0;
- }
- # Now see if current package looks like an OO class this is probably too strong.
- foreach my $m (qw(new DESTROY TIESCALAR TIEARRAY TIEHASH TIEHANDLE))
- {
- if (UNIVERSAL::can($package, $m))
- {
- warn "$package has method $m: saving package\n";#debug
- return mark_package($package);
- }
- }
- delete_unsaved_hashINC($package);
- return $unused_sub_packages{$package} = 0;
-}
-sub delete_unsaved_hashINC{
- my $packname=shift;
- $packname =~ s/\:\:/\//g;
- $packname .= '.pm';
-# warn "deleting $packname" if $INC{$packname} ;# debug
- delete $INC{$packname};
-}
-sub walkpackages
-{
- my ($symref, $recurse, $prefix) = @_;
- my $sym;
- my $ref;
- no strict 'vars';
- local(*glob);
- $prefix = '' unless defined $prefix;
- while (($sym, $ref) = each %$symref)
- {
- *glob = $ref;
- if ($sym =~ /::$/)
- {
- $sym = $prefix . $sym;
- if ($sym ne "main::" && $sym ne "<none>::" && &$recurse($sym))
- {
- walkpackages(\%glob, $recurse, $sym);
- }
- }
- }
-}
-
-
-sub save_unused_subs
-{
- no strict qw(refs);
- &descend_marked_unused;
- warn "Prescan\n";
- walkpackages(\%{"main::"}, sub { should_save($_[0]); return 1 });
- warn "Saving methods\n";
- walksymtable(\%{"main::"}, "savecv", \&should_save);
-}
-
-sub save_context
-{
- my $curpad_nam = (comppadlist->ARRAY)[0]->save;
- my $curpad_sym = (comppadlist->ARRAY)[1]->save;
- my $inc_hv = svref_2object(\%INC)->save;
- my $inc_av = svref_2object(\@INC)->save;
- my $amagic_generate= amagic_generation;
- $init->add( "PL_curpad = AvARRAY($curpad_sym);",
- "GvHV(PL_incgv) = $inc_hv;",
- "GvAV(PL_incgv) = $inc_av;",
- "av_store(CvPADLIST(PL_main_cv),0,SvREFCNT_inc($curpad_nam));",
- "av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc($curpad_sym));",
- "PL_amagic_generation= $amagic_generate;" );
-}
-
-sub descend_marked_unused {
- foreach my $pack (keys %unused_sub_packages)
- {
- mark_package($pack);
- }
-}
-
-sub save_main {
- warn "Starting compile\n";
- warn "Walking tree\n";
- seek(STDOUT,0,0); #exclude print statements in BEGIN{} into output
- walkoptree(main_root, "save");
- warn "done main optree, walking symtable for extras\n" if $debug_cv;
- save_unused_subs();
- my $init_av = init_av->save;
- $init->add(sprintf("PL_main_root = s\\_%x;", ${main_root()}),
- sprintf("PL_main_start = s\\_%x;", ${main_start()}),
- "PL_initav = (AV *) $init_av;");
- save_context();
- warn "Writing output\n";
- output_boilerplate();
- print "\n";
- output_all("perl_init");
- print "\n";
- output_main();
-}
-
-sub init_sections {
- my @sections = (init => \$init, decl => \$decl, sym => \$symsect,
- binop => \$binopsect, condop => \$condopsect,
- cop => \$copsect, padop => \$padopsect,
- listop => \$listopsect, logop => \$logopsect,
- loop => \$loopsect, op => \$opsect, pmop => \$pmopsect,
- pvop => \$pvopsect, svop => \$svopsect, unop => \$unopsect,
- sv => \$svsect, xpv => \$xpvsect, xpvav => \$xpvavsect,
- xpvhv => \$xpvhvsect, xpvcv => \$xpvcvsect,
- xpviv => \$xpvivsect, xpvnv => \$xpvnvsect,
- xpvmg => \$xpvmgsect, xpvlv => \$xpvlvsect,
- xrv => \$xrvsect, xpvbm => \$xpvbmsect,
- xpvio => \$xpviosect);
- my ($name, $sectref);
- while (($name, $sectref) = splice(@sections, 0, 2)) {
- $$sectref = new B::C::Section $name, \%symtable, 0;
- }
-}
-
-sub mark_unused
-{
- my ($arg,$val) = @_;
- $unused_sub_packages{$arg} = $val;
-}
-
-sub compile {
- my @options = @_;
- my ($option, $opt, $arg);
- OPTION:
- while ($option = shift @options) {
- if ($option =~ /^-(.)(.*)/) {
- $opt = $1;
- $arg = $2;
- } else {
- unshift @options, $option;
- last OPTION;
- }
- if ($opt eq "-" && $arg eq "-") {
- shift @options;
- last OPTION;
- }
- if ($opt eq "w") {
- $warn_undefined_syms = 1;
- } elsif ($opt eq "D") {
- $arg ||= shift @options;
- foreach $arg (split(//, $arg)) {
- if ($arg eq "o") {
- B->debug(1);
- } elsif ($arg eq "c") {
- $debug_cops = 1;
- } elsif ($arg eq "A") {
- $debug_av = 1;
- } elsif ($arg eq "C") {
- $debug_cv = 1;
- } elsif ($arg eq "M") {
- $debug_mg = 1;
- } else {
- warn "ignoring unknown debug option: $arg\n";
- }
- }
- } elsif ($opt eq "o") {
- $arg ||= shift @options;
- open(STDOUT, ">$arg") or return "$arg: $!\n";
- } elsif ($opt eq "v") {
- $verbose = 1;
- } elsif ($opt eq "u") {
- $arg ||= shift @options;
- mark_unused($arg,undef);
- } elsif ($opt eq "f") {
- $arg ||= shift @options;
- if ($arg eq "cog") {
- $pv_copy_on_grow = 1;
- } elsif ($arg eq "no-cog") {
- $pv_copy_on_grow = 0;
- }
- } elsif ($opt eq "O") {
- $arg = 1 if $arg eq "";
- $pv_copy_on_grow = 0;
- if ($arg >= 1) {
- # Optimisations for -O1
- $pv_copy_on_grow = 1;
- }
- } elsif ($opt eq "l") {
- $max_string_len = $arg;
- }
- }
- init_sections();
- if (@options) {
- return sub {
- my $objname;
- foreach $objname (@options) {
- eval "save_object(\\$objname)";
- }
- output_all();
- }
- } else {
- return sub { save_main() };
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::C - Perl compiler's C backend
-
-=head1 SYNOPSIS
-
- perl -MO=C[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-This compiler backend takes Perl source and generates C source code
-corresponding to the internal structures that perl uses to run
-your program. When the generated C source is compiled and run, it
-cuts out the time which perl would have taken to load and parse
-your program into its internal semi-compiled form. That means that
-compiling with this backend will not help improve the runtime
-execution speed of your program but may improve the start-up time.
-Depending on the environment in which your program runs this may be
-either a help or a hindrance.
-
-=head1 OPTIONS
-
-If there are any non-option arguments, they are taken to be
-names of objects to be saved (probably doesn't work properly yet).
-Without extra arguments, it saves the main program.
-
-=over 4
-
-=item B<-ofilename>
-
-Output to filename instead of STDOUT
-
-=item B<-v>
-
-Verbose compilation (currently gives a few compilation statistics).
-
-=item B<-->
-
-Force end of options
-
-=item B<-uPackname>
-
-Force apparently unused subs from package Packname to be compiled.
-This allows programs to use eval "foo()" even when sub foo is never
-seen to be used at compile time. The down side is that any subs which
-really are never used also have code generated. This option is
-necessary, for example, if you have a signal handler foo which you
-initialise with C<$SIG{BAR} = "foo">. A better fix, though, is just
-to change it to C<$SIG{BAR} = \&foo>. You can have multiple B<-u>
-options. The compiler tries to figure out which packages may possibly
-have subs in which need compiling but the current version doesn't do
-it very well. In particular, it is confused by nested packages (i.e.
-of the form C<A::B>) where package C<A> does not contain any subs.
-
-=item B<-D>
-
-Debug options (concatenated or separate flags like C<perl -D>).
-
-=item B<-Do>
-
-OPs, prints each OP as it's processed
-
-=item B<-Dc>
-
-COPs, prints COPs as processed (incl. file & line num)
-
-=item B<-DA>
-
-prints AV information on saving
-
-=item B<-DC>
-
-prints CV information on saving
-
-=item B<-DM>
-
-prints MAGIC information on saving
-
-=item B<-f>
-
-Force optimisations on or off one at a time.
-
-=item B<-fcog>
-
-Copy-on-grow: PVs declared and initialised statically.
-
-=item B<-fno-cog>
-
-No copy-on-grow.
-
-=item B<-On>
-
-Optimisation level (n = 0, 1, 2, ...). B<-O> means B<-O1>. Currently,
-B<-O1> and higher set B<-fcog>.
-
-=item B<-llimit>
-
-Some C compilers impose an arbitrary limit on the length of string
-constants (e.g. 2048 characters for Microsoft Visual C++). The
-B<-llimit> options tells the C backend not to generate string literals
-exceeding that limit.
-
-=back
-
-=head1 EXAMPLES
-
- perl -MO=C,-ofoo.c foo.pl
- perl cc_harness -o foo foo.c
-
-Note that C<cc_harness> lives in the C<B> subdirectory of your perl
-library directory. The utility called C<perlcc> may also be used to
-help make use of this compiler.
-
- perl -MO=C,-v,-DcA,-l2048 bar.pl > /dev/null
-
-=head1 BUGS
-
-Plenty. Current status: experimental.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/CC.pm b/contrib/perl5/ext/B/B/CC.pm
deleted file mode 100644
index 51922ee..0000000
--- a/contrib/perl5/ext/B/B/CC.pm
+++ /dev/null
@@ -1,2002 +0,0 @@
-# CC.pm
-#
-# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-package B::CC;
-use Config;
-use strict;
-use B qw(main_start main_root class comppadlist peekop svref_2object
- timing_info init_av sv_undef amagic_generation
- OPf_WANT_LIST OPf_WANT OPf_MOD OPf_STACKED OPf_SPECIAL
- OPpASSIGN_BACKWARDS OPpLVAL_INTRO OPpDEREF_AV OPpDEREF_HV
- OPpDEREF OPpFLIP_LINENUM G_ARRAY G_SCALAR
- CXt_NULL CXt_SUB CXt_EVAL CXt_LOOP CXt_SUBST CXt_BLOCK
- );
-use B::C qw(save_unused_subs objsym init_sections mark_unused
- output_all output_boilerplate output_main);
-use B::Bblock qw(find_leaders);
-use B::Stackobj qw(:types :flags);
-
-# These should probably be elsewhere
-# Flags for $op->flags
-
-my $module; # module name (when compiled with -m)
-my %done; # hash keyed by $$op of leaders of basic blocks
- # which have already been done.
-my $leaders; # ref to hash of basic block leaders. Keys are $$op
- # addresses, values are the $op objects themselves.
-my @bblock_todo; # list of leaders of basic blocks that need visiting
- # sometime.
-my @cc_todo; # list of tuples defining what PP code needs to be
- # saved (e.g. CV, main or PMOP repl code). Each tuple
- # is [$name, $root, $start, @padlist]. PMOP repl code
- # tuples inherit padlist.
-my @stack; # shadows perl's stack when contents are known.
- # Values are objects derived from class B::Stackobj
-my @pad; # Lexicals in current pad as Stackobj-derived objects
-my @padlist; # Copy of current padlist so PMOP repl code can find it
-my @cxstack; # Shadows the (compile-time) cxstack for next,last,redo
-my $jmpbuf_ix = 0; # Next free index for dynamically allocated jmpbufs
-my %constobj; # OP_CONST constants as Stackobj-derived objects
- # keyed by $$sv.
-my $need_freetmps = 0; # We may postpone FREETMPS to the end of each basic
- # block or even to the end of each loop of blocks,
- # depending on optimisation options.
-my $know_op = 0; # Set when C variable op already holds the right op
- # (from an immediately preceding DOOP(ppname)).
-my $errors = 0; # Number of errors encountered
-my %skip_stack; # Hash of PP names which don't need write_back_stack
-my %skip_lexicals; # Hash of PP names which don't need write_back_lexicals
-my %skip_invalidate; # Hash of PP names which don't need invalidate_lexicals
-my %ignore_op; # Hash of ops which do nothing except returning op_next
-my %need_curcop; # Hash of ops which need PL_curcop
-
-my %lexstate; #state of padsvs at the start of a bblock
-
-BEGIN {
- foreach (qw(pp_scalar pp_regcmaybe pp_lineseq pp_scope pp_null)) {
- $ignore_op{$_} = 1;
- }
-}
-
-my ($module_name);
-my ($debug_op, $debug_stack, $debug_cxstack, $debug_pad, $debug_runtime,
- $debug_shadow, $debug_queue, $debug_lineno, $debug_timings);
-
-# Optimisation options. On the command line, use hyphens instead of
-# underscores for compatibility with gcc-style options. We use
-# underscores here because they are OK in (strict) barewords.
-my ($freetmps_each_bblock, $freetmps_each_loop, $omit_taint);
-my %optimise = (freetmps_each_bblock => \$freetmps_each_bblock,
- freetmps_each_loop => \$freetmps_each_loop,
- omit_taint => \$omit_taint);
-# perl patchlevel to generate code for (defaults to current patchlevel)
-my $patchlevel = int(0.5 + 1000 * ($] - 5));
-
-# Could rewrite push_runtime() and output_runtime() to use a
-# temporary file if memory is at a premium.
-my $ppname; # name of current fake PP function
-my $runtime_list_ref;
-my $declare_ref; # Hash ref keyed by C variable type of declarations.
-
-my @pp_list; # list of [$ppname, $runtime_list_ref, $declare_ref]
- # tuples to be written out.
-
-my ($init, $decl);
-
-sub init_hash { map { $_ => 1 } @_ }
-
-#
-# Initialise the hashes for the default PP functions where we can avoid
-# either write_back_stack, write_back_lexicals or invalidate_lexicals.
-#
-%skip_lexicals = init_hash qw(pp_enter pp_enterloop);
-%skip_invalidate = init_hash qw(pp_enter pp_enterloop);
-%need_curcop = init_hash qw(pp_rv2gv pp_bless pp_repeat pp_sort pp_caller
- pp_reset pp_rv2cv pp_entereval pp_require pp_dofile
- pp_entertry pp_enterloop pp_enteriter pp_entersub
- pp_enter pp_method);
-
-sub debug {
- if ($debug_runtime) {
- warn(@_);
- } else {
- my @tmp=@_;
- runtime(map { chomp; "/* $_ */"} @tmp);
- }
-}
-
-sub declare {
- my ($type, $var) = @_;
- push(@{$declare_ref->{$type}}, $var);
-}
-
-sub push_runtime {
- push(@$runtime_list_ref, @_);
- warn join("\n", @_) . "\n" if $debug_runtime;
-}
-
-sub save_runtime {
- push(@pp_list, [$ppname, $runtime_list_ref, $declare_ref]);
-}
-
-sub output_runtime {
- my $ppdata;
- print qq(#include "cc_runtime.h"\n);
- foreach $ppdata (@pp_list) {
- my ($name, $runtime, $declare) = @$ppdata;
- print "\nstatic\nCCPP($name)\n{\n";
- my ($type, $varlist, $line);
- while (($type, $varlist) = each %$declare) {
- print "\t$type ", join(", ", @$varlist), ";\n";
- }
- foreach $line (@$runtime) {
- print $line, "\n";
- }
- print "}\n";
- }
-}
-
-sub runtime {
- my $line;
- foreach $line (@_) {
- push_runtime("\t$line");
- }
-}
-
-sub init_pp {
- $ppname = shift;
- $runtime_list_ref = [];
- $declare_ref = {};
- runtime("dSP;");
- declare("I32", "oldsave");
- declare("SV", "**svp");
- map { declare("SV", "*$_") } qw(sv src dst left right);
- declare("MAGIC", "*mg");
- $decl->add("static OP * $ppname (pTHX);");
- debug "init_pp: $ppname\n" if $debug_queue;
-}
-
-# Initialise runtime_callback function for Stackobj class
-BEGIN { B::Stackobj::set_callback(\&runtime) }
-
-# Initialise saveoptree_callback for B::C class
-sub cc_queue {
- my ($name, $root, $start, @pl) = @_;
- debug "cc_queue: name $name, root $root, start $start, padlist (@pl)\n"
- if $debug_queue;
- if ($name eq "*ignore*") {
- $name = 0;
- } else {
- push(@cc_todo, [$name, $root, $start, (@pl ? @pl : @padlist)]);
- }
- my $fakeop = new B::FAKEOP ("next" => 0, sibling => 0, ppaddr => $name);
- $start = $fakeop->save;
- debug "cc_queue: name $name returns $start\n" if $debug_queue;
- return $start;
-}
-BEGIN { B::C::set_callback(\&cc_queue) }
-
-sub valid_int { $_[0]->{flags} & VALID_INT }
-sub valid_double { $_[0]->{flags} & VALID_DOUBLE }
-sub valid_numeric { $_[0]->{flags} & (VALID_INT | VALID_DOUBLE) }
-sub valid_sv { $_[0]->{flags} & VALID_SV }
-
-sub top_int { @stack ? $stack[-1]->as_int : "TOPi" }
-sub top_double { @stack ? $stack[-1]->as_double : "TOPn" }
-sub top_numeric { @stack ? $stack[-1]->as_numeric : "TOPn" }
-sub top_sv { @stack ? $stack[-1]->as_sv : "TOPs" }
-sub top_bool { @stack ? $stack[-1]->as_bool : "SvTRUE(TOPs)" }
-
-sub pop_int { @stack ? (pop @stack)->as_int : "POPi" }
-sub pop_double { @stack ? (pop @stack)->as_double : "POPn" }
-sub pop_numeric { @stack ? (pop @stack)->as_numeric : "POPn" }
-sub pop_sv { @stack ? (pop @stack)->as_sv : "POPs" }
-sub pop_bool {
- if (@stack) {
- return ((pop @stack)->as_bool);
- } else {
- # Careful: POPs has an auto-decrement and SvTRUE evaluates
- # its argument more than once.
- runtime("sv = POPs;");
- return "SvTRUE(sv)";
- }
-}
-
-sub write_back_lexicals {
- my $avoid = shift || 0;
- debug "write_back_lexicals($avoid) called from @{[(caller(1))[3]]}\n"
- if $debug_shadow;
- my $lex;
- foreach $lex (@pad) {
- next unless ref($lex);
- $lex->write_back unless $lex->{flags} & $avoid;
- }
-}
-
-sub save_or_restore_lexical_state {
- my $bblock=shift;
- unless( exists $lexstate{$bblock}){
- foreach my $lex (@pad) {
- next unless ref($lex);
- ${$lexstate{$bblock}}{$lex->{iv}} = $lex->{flags} ;
- }
- }
- else {
- foreach my $lex (@pad) {
- next unless ref($lex);
- my $old_flags=${$lexstate{$bblock}}{$lex->{iv}} ;
- next if ( $old_flags eq $lex->{flags});
- if (($old_flags & VALID_SV) && !($lex->{flags} & VALID_SV)){
- $lex->write_back;
- }
- if (($old_flags & VALID_DOUBLE) && !($lex->{flags} & VALID_DOUBLE)){
- $lex->load_double;
- }
- if (($old_flags & VALID_INT) && !($lex->{flags} & VALID_INT)){
- $lex->load_int;
- }
- }
- }
-}
-
-sub write_back_stack {
- my $obj;
- return unless @stack;
- runtime(sprintf("EXTEND(sp, %d);", scalar(@stack)));
- foreach $obj (@stack) {
- runtime(sprintf("PUSHs((SV*)%s);", $obj->as_sv));
- }
- @stack = ();
-}
-
-sub invalidate_lexicals {
- my $avoid = shift || 0;
- debug "invalidate_lexicals($avoid) called from @{[(caller(1))[3]]}\n"
- if $debug_shadow;
- my $lex;
- foreach $lex (@pad) {
- next unless ref($lex);
- $lex->invalidate unless $lex->{flags} & $avoid;
- }
-}
-
-sub reload_lexicals {
- my $lex;
- foreach $lex (@pad) {
- next unless ref($lex);
- my $type = $lex->{type};
- if ($type == T_INT) {
- $lex->as_int;
- } elsif ($type == T_DOUBLE) {
- $lex->as_double;
- } else {
- $lex->as_sv;
- }
- }
-}
-
-{
- package B::Pseudoreg;
- #
- # This class allocates pseudo-registers (OK, so they're C variables).
- #
- my %alloc; # Keyed by variable name. A value of 1 means the
- # variable has been declared. A value of 2 means
- # it's in use.
-
- sub new_scope { %alloc = () }
-
- sub new ($$$) {
- my ($class, $type, $prefix) = @_;
- my ($ptr, $i, $varname, $status, $obj);
- $prefix =~ s/^(\**)//;
- $ptr = $1;
- $i = 0;
- do {
- $varname = "$prefix$i";
- $status = $alloc{$varname};
- } while $status == 2;
- if ($status != 1) {
- # Not declared yet
- B::CC::declare($type, "$ptr$varname");
- $alloc{$varname} = 2; # declared and in use
- }
- $obj = bless \$varname, $class;
- return $obj;
- }
- sub DESTROY {
- my $obj = shift;
- $alloc{$$obj} = 1; # no longer in use but still declared
- }
-}
-{
- package B::Shadow;
- #
- # This class gives a standard API for a perl object to shadow a
- # C variable and only generate reloads/write-backs when necessary.
- #
- # Use $obj->load($foo) instead of runtime("shadowed_c_var = foo").
- # Use $obj->write_back whenever shadowed_c_var needs to be up to date.
- # Use $obj->invalidate whenever an unknown function may have
- # set shadow itself.
-
- sub new {
- my ($class, $write_back) = @_;
- # Object fields are perl shadow variable, validity flag
- # (for *C* variable) and callback sub for write_back
- # (passed perl shadow variable as argument).
- bless [undef, 1, $write_back], $class;
- }
- sub load {
- my ($obj, $newval) = @_;
- $obj->[1] = 0; # C variable no longer valid
- $obj->[0] = $newval;
- }
- sub write_back {
- my $obj = shift;
- if (!($obj->[1])) {
- $obj->[1] = 1; # C variable will now be valid
- &{$obj->[2]}($obj->[0]);
- }
- }
- sub invalidate { $_[0]->[1] = 0 } # force C variable to be invalid
-}
-my $curcop = new B::Shadow (sub {
- my $opsym = shift->save;
- runtime("PL_curcop = (COP*)$opsym;");
-});
-
-#
-# Context stack shadowing. Mimics stuff in pp_ctl.c, cop.h and so on.
-#
-sub dopoptoloop {
- my $cxix = $#cxstack;
- while ($cxix >= 0 && $cxstack[$cxix]->{type} != CXt_LOOP) {
- $cxix--;
- }
- debug "dopoptoloop: returning $cxix" if $debug_cxstack;
- return $cxix;
-}
-
-sub dopoptolabel {
- my $label = shift;
- my $cxix = $#cxstack;
- while ($cxix >= 0 &&
- ($cxstack[$cxix]->{type} != CXt_LOOP ||
- $cxstack[$cxix]->{label} ne $label)) {
- $cxix--;
- }
- debug "dopoptolabel: returning $cxix" if $debug_cxstack;
- return $cxix;
-}
-
-sub error {
- my $format = shift;
- my $file = $curcop->[0]->file;
- my $line = $curcop->[0]->line;
- $errors++;
- if (@_) {
- warn sprintf("%s:%d: $format\n", $file, $line, @_);
- } else {
- warn sprintf("%s:%d: %s\n", $file, $line, $format);
- }
-}
-
-#
-# Load pad takes (the elements of) a PADLIST as arguments and loads
-# up @pad with Stackobj-derived objects which represent those lexicals.
-# If/when perl itself can generate type information (my int $foo) then
-# we'll take advantage of that here. Until then, we'll use various hacks
-# to tell the compiler when we want a lexical to be a particular type
-# or to be a register.
-#
-sub load_pad {
- my ($namelistav, $valuelistav) = @_;
- @padlist = @_;
- my @namelist = $namelistav->ARRAY;
- my @valuelist = $valuelistav->ARRAY;
- my $ix;
- @pad = ();
- debug "load_pad: $#namelist names, $#valuelist values\n" if $debug_pad;
- # Temporary lexicals don't get named so it's possible for @valuelist
- # to be strictly longer than @namelist. We count $ix up to the end of
- # @valuelist but index into @namelist for the name. Any temporaries which
- # run off the end of @namelist will make $namesv undefined and we treat
- # that the same as having an explicit SPECIAL sv_undef object in @namelist.
- # [XXX If/when @_ becomes a lexical, we must start at 0 here.]
- for ($ix = 1; $ix < @valuelist; $ix++) {
- my $namesv = $namelist[$ix];
- my $type = T_UNKNOWN;
- my $flags = 0;
- my $name = "tmp$ix";
- my $class = class($namesv);
- if (!defined($namesv) || $class eq "SPECIAL") {
- # temporaries have &PL_sv_undef instead of a PVNV for a name
- $flags = VALID_SV|TEMPORARY|REGISTER;
- } else {
- if ($namesv->PV =~ /^\$(.*)_([di])(r?)$/) {
- $name = $1;
- if ($2 eq "i") {
- $type = T_INT;
- $flags = VALID_SV|VALID_INT;
- } elsif ($2 eq "d") {
- $type = T_DOUBLE;
- $flags = VALID_SV|VALID_DOUBLE;
- }
- $flags |= REGISTER if $3;
- }
- }
- $pad[$ix] = new B::Stackobj::Padsv ($type, $flags, $ix,
- "i_$name", "d_$name");
-
- debug sprintf("PL_curpad[$ix] = %s\n", $pad[$ix]->peek) if $debug_pad;
- }
-}
-
-sub declare_pad {
- my $ix;
- for ($ix = 1; $ix <= $#pad; $ix++) {
- my $type = $pad[$ix]->{type};
- declare("IV", $type == T_INT ?
- sprintf("%s=0",$pad[$ix]->{iv}):$pad[$ix]->{iv}) if $pad[$ix]->save_int;
- declare("double", $type == T_DOUBLE ?
- sprintf("%s = 0",$pad[$ix]->{nv}):$pad[$ix]->{nv} )if $pad[$ix]->save_double;
-
- }
-}
-#
-# Debugging stuff
-#
-sub peek_stack { sprintf "stack = %s\n", join(" ", map($_->minipeek, @stack)) }
-
-#
-# OP stuff
-#
-
-sub label {
- my $op = shift;
- # XXX Preserve original label name for "real" labels?
- return sprintf("lab_%x", $$op);
-}
-
-sub write_label {
- my $op = shift;
- push_runtime(sprintf(" %s:", label($op)));
-}
-
-sub loadop {
- my $op = shift;
- my $opsym = $op->save;
- runtime("PL_op = $opsym;") unless $know_op;
- return $opsym;
-}
-
-sub doop {
- my $op = shift;
- my $ppname = $op->ppaddr;
- my $sym = loadop($op);
- runtime("DOOP($ppname);");
- $know_op = 1;
- return $sym;
-}
-
-sub gimme {
- my $op = shift;
- my $flags = $op->flags;
- return (($flags & OPf_WANT) ? (($flags & OPf_WANT)== OPf_WANT_LIST? G_ARRAY:G_SCALAR) : "dowantarray()");
-}
-
-#
-# Code generation for PP code
-#
-
-sub pp_null {
- my $op = shift;
- return $op->next;
-}
-
-sub pp_stub {
- my $op = shift;
- my $gimme = gimme($op);
- if ($gimme != G_ARRAY) {
- my $obj= new B::Stackobj::Const(sv_undef);
- push(@stack, $obj);
- # XXX Change to push a constant sv_undef Stackobj onto @stack
- #write_back_stack();
- #runtime("if ($gimme != G_ARRAY) XPUSHs(&PL_sv_undef);");
- }
- return $op->next;
-}
-
-sub pp_unstack {
- my $op = shift;
- @stack = ();
- runtime("PP_UNSTACK;");
- return $op->next;
-}
-
-sub pp_and {
- my $op = shift;
- my $next = $op->next;
- reload_lexicals();
- unshift(@bblock_todo, $next);
- if (@stack >= 1) {
- my $bool = pop_bool();
- write_back_stack();
- save_or_restore_lexical_state($$next);
- runtime(sprintf("if (!$bool) {XPUSHs(&PL_sv_no); goto %s;}", label($next)));
- } else {
- save_or_restore_lexical_state($$next);
- runtime(sprintf("if (!%s) goto %s;", top_bool(), label($next)),
- "*sp--;");
- }
- return $op->other;
-}
-
-sub pp_or {
- my $op = shift;
- my $next = $op->next;
- reload_lexicals();
- unshift(@bblock_todo, $next);
- if (@stack >= 1) {
- my $bool = pop_bool @stack;
- write_back_stack();
- save_or_restore_lexical_state($$next);
- runtime(sprintf("if (%s) { XPUSHs(&PL_sv_yes); goto %s; }",
- $bool, label($next)));
- } else {
- save_or_restore_lexical_state($$next);
- runtime(sprintf("if (%s) goto %s;", top_bool(), label($next)),
- "*sp--;");
- }
- return $op->other;
-}
-
-sub pp_cond_expr {
- my $op = shift;
- my $false = $op->next;
- unshift(@bblock_todo, $false);
- reload_lexicals();
- my $bool = pop_bool();
- write_back_stack();
- save_or_restore_lexical_state($$false);
- runtime(sprintf("if (!$bool) goto %s;", label($false)));
- return $op->other;
-}
-
-sub pp_padsv {
- my $op = shift;
- my $ix = $op->targ;
- push(@stack, $pad[$ix]);
- if ($op->flags & OPf_MOD) {
- my $private = $op->private;
- if ($private & OPpLVAL_INTRO) {
- runtime("SAVECLEARSV(PL_curpad[$ix]);");
- } elsif ($private & OPpDEREF) {
- runtime(sprintf("vivify_ref(PL_curpad[%d], %d);",
- $ix, $private & OPpDEREF));
- $pad[$ix]->invalidate;
- }
- }
- return $op->next;
-}
-
-sub pp_const {
- my $op = shift;
- my $sv = $op->sv;
- my $obj;
- # constant could be in the pad (under useithreads)
- if ($$sv) {
- $obj = $constobj{$$sv};
- if (!defined($obj)) {
- $obj = $constobj{$$sv} = new B::Stackobj::Const ($sv);
- }
- }
- else {
- $obj = $pad[$op->targ];
- }
- push(@stack, $obj);
- return $op->next;
-}
-
-sub pp_nextstate {
- my $op = shift;
- $curcop->load($op);
- @stack = ();
- debug(sprintf("%s:%d\n", $op->file, $op->line)) if $debug_lineno;
- runtime("TAINT_NOT;") unless $omit_taint;
- runtime("sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;");
- if ($freetmps_each_bblock || $freetmps_each_loop) {
- $need_freetmps = 1;
- } else {
- runtime("FREETMPS;");
- }
- return $op->next;
-}
-
-sub pp_dbstate {
- my $op = shift;
- $curcop->invalidate; # XXX?
- return default_pp($op);
-}
-
-#default_pp will handle this:
-#sub pp_bless { $curcop->write_back; default_pp(@_) }
-#sub pp_repeat { $curcop->write_back; default_pp(@_) }
-# The following subs need $curcop->write_back if we decide to support arybase:
-# pp_pos, pp_substr, pp_index, pp_rindex, pp_aslice, pp_lslice, pp_splice
-#sub pp_caller { $curcop->write_back; default_pp(@_) }
-#sub pp_reset { $curcop->write_back; default_pp(@_) }
-
-sub pp_rv2gv{
- my $op =shift;
- $curcop->write_back;
- write_back_lexicals() unless $skip_lexicals{$ppname};
- write_back_stack() unless $skip_stack{$ppname};
- my $sym=doop($op);
- if ($op->private & OPpDEREF) {
- $init->add(sprintf("((UNOP *)$sym)->op_first = $sym;"));
- $init->add(sprintf("((UNOP *)$sym)->op_type = %d;",
- $op->first->type));
- }
- return $op->next;
-}
-sub pp_sort {
- my $op = shift;
- my $ppname = $op->ppaddr;
- if ( $op->flags & OPf_SPECIAL && $op->flags & OPf_STACKED){
- #this indicates the sort BLOCK Array case
- #ugly surgery required.
- my $root=$op->first->sibling->first;
- my $start=$root->first;
- $op->first->save;
- $op->first->sibling->save;
- $root->save;
- my $sym=$start->save;
- my $fakeop=cc_queue("pp_sort".$$op,$root,$start);
- $init->add(sprintf("(%s)->op_next=%s;",$sym,$fakeop));
- }
- $curcop->write_back;
- write_back_lexicals();
- write_back_stack();
- doop($op);
- return $op->next;
-}
-
-sub pp_gv {
- my $op = shift;
- my $gvsym;
- if ($Config{useithreads}) {
- $gvsym = $pad[$op->padix]->as_sv;
- }
- else {
- $gvsym = $op->gv->save;
- }
- write_back_stack();
- runtime("XPUSHs((SV*)$gvsym);");
- return $op->next;
-}
-
-sub pp_gvsv {
- my $op = shift;
- my $gvsym;
- if ($Config{useithreads}) {
- $gvsym = $pad[$op->padix]->as_sv;
- }
- else {
- $gvsym = $op->gv->save;
- }
- write_back_stack();
- if ($op->private & OPpLVAL_INTRO) {
- runtime("XPUSHs(save_scalar($gvsym));");
- } else {
- runtime("XPUSHs(GvSV($gvsym));");
- }
- return $op->next;
-}
-
-sub pp_aelemfast {
- my $op = shift;
- my $gvsym;
- if ($Config{useithreads}) {
- $gvsym = $pad[$op->padix]->as_sv;
- }
- else {
- $gvsym = $op->gv->save;
- }
- my $ix = $op->private;
- my $flag = $op->flags & OPf_MOD;
- write_back_stack();
- runtime("svp = av_fetch(GvAV($gvsym), $ix, $flag);",
- "PUSHs(svp ? *svp : &PL_sv_undef);");
- return $op->next;
-}
-
-sub int_binop {
- my ($op, $operator) = @_;
- if ($op->flags & OPf_STACKED) {
- my $right = pop_int();
- if (@stack >= 1) {
- my $left = top_int();
- $stack[-1]->set_int(&$operator($left, $right));
- } else {
- runtime(sprintf("sv_setiv(TOPs, %s);",&$operator("TOPi", $right)));
- }
- } else {
- my $targ = $pad[$op->targ];
- my $right = new B::Pseudoreg ("IV", "riv");
- my $left = new B::Pseudoreg ("IV", "liv");
- runtime(sprintf("$$right = %s; $$left = %s;", pop_int(), pop_int));
- $targ->set_int(&$operator($$left, $$right));
- push(@stack, $targ);
- }
- return $op->next;
-}
-
-sub INTS_CLOSED () { 0x1 }
-sub INT_RESULT () { 0x2 }
-sub NUMERIC_RESULT () { 0x4 }
-
-sub numeric_binop {
- my ($op, $operator, $flags) = @_;
- my $force_int = 0;
- $force_int ||= ($flags & INT_RESULT);
- $force_int ||= ($flags & INTS_CLOSED && @stack >= 2
- && valid_int($stack[-2]) && valid_int($stack[-1]));
- if ($op->flags & OPf_STACKED) {
- my $right = pop_numeric();
- if (@stack >= 1) {
- my $left = top_numeric();
- if ($force_int) {
- $stack[-1]->set_int(&$operator($left, $right));
- } else {
- $stack[-1]->set_numeric(&$operator($left, $right));
- }
- } else {
- if ($force_int) {
- my $rightruntime = new B::Pseudoreg ("IV", "riv");
- runtime(sprintf("$$rightruntime = %s;",$right));
- runtime(sprintf("sv_setiv(TOPs, %s);",
- &$operator("TOPi", $$rightruntime)));
- } else {
- my $rightruntime = new B::Pseudoreg ("double", "rnv");
- runtime(sprintf("$$rightruntime = %s;",$right));
- runtime(sprintf("sv_setnv(TOPs, %s);",
- &$operator("TOPn",$$rightruntime)));
- }
- }
- } else {
- my $targ = $pad[$op->targ];
- $force_int ||= ($targ->{type} == T_INT);
- if ($force_int) {
- my $right = new B::Pseudoreg ("IV", "riv");
- my $left = new B::Pseudoreg ("IV", "liv");
- runtime(sprintf("$$right = %s; $$left = %s;",
- pop_numeric(), pop_numeric));
- $targ->set_int(&$operator($$left, $$right));
- } else {
- my $right = new B::Pseudoreg ("double", "rnv");
- my $left = new B::Pseudoreg ("double", "lnv");
- runtime(sprintf("$$right = %s; $$left = %s;",
- pop_numeric(), pop_numeric));
- $targ->set_numeric(&$operator($$left, $$right));
- }
- push(@stack, $targ);
- }
- return $op->next;
-}
-
-sub pp_ncmp {
- my ($op) = @_;
- if ($op->flags & OPf_STACKED) {
- my $right = pop_numeric();
- if (@stack >= 1) {
- my $left = top_numeric();
- runtime sprintf("if (%s > %s){",$left,$right);
- $stack[-1]->set_int(1);
- $stack[-1]->write_back();
- runtime sprintf("}else if (%s < %s ) {",$left,$right);
- $stack[-1]->set_int(-1);
- $stack[-1]->write_back();
- runtime sprintf("}else if (%s == %s) {",$left,$right);
- $stack[-1]->set_int(0);
- $stack[-1]->write_back();
- runtime sprintf("}else {");
- $stack[-1]->set_sv("&PL_sv_undef");
- runtime "}";
- } else {
- my $rightruntime = new B::Pseudoreg ("double", "rnv");
- runtime(sprintf("$$rightruntime = %s;",$right));
- runtime sprintf(qq/if ("TOPn" > %s){/,$rightruntime);
- runtime sprintf("sv_setiv(TOPs,1);");
- runtime sprintf(qq/}else if ( "TOPn" < %s ) {/,$$rightruntime);
- runtime sprintf("sv_setiv(TOPs,-1);");
- runtime sprintf(qq/} else if ("TOPn" == %s) {/,$$rightruntime);
- runtime sprintf("sv_setiv(TOPs,0);");
- runtime sprintf(qq/}else {/);
- runtime sprintf("sv_setiv(TOPs,&PL_sv_undef;");
- runtime "}";
- }
- } else {
- my $targ = $pad[$op->targ];
- my $right = new B::Pseudoreg ("double", "rnv");
- my $left = new B::Pseudoreg ("double", "lnv");
- runtime(sprintf("$$right = %s; $$left = %s;",
- pop_numeric(), pop_numeric));
- runtime sprintf("if (%s > %s){",$$left,$$right);
- $targ->set_int(1);
- $targ->write_back();
- runtime sprintf("}else if (%s < %s ) {",$$left,$$right);
- $targ->set_int(-1);
- $targ->write_back();
- runtime sprintf("}else if (%s == %s) {",$$left,$$right);
- $targ->set_int(0);
- $targ->write_back();
- runtime sprintf("}else {");
- $targ->set_sv("&PL_sv_undef");
- runtime "}";
- push(@stack, $targ);
- }
- return $op->next;
-}
-
-sub sv_binop {
- my ($op, $operator, $flags) = @_;
- if ($op->flags & OPf_STACKED) {
- my $right = pop_sv();
- if (@stack >= 1) {
- my $left = top_sv();
- if ($flags & INT_RESULT) {
- $stack[-1]->set_int(&$operator($left, $right));
- } elsif ($flags & NUMERIC_RESULT) {
- $stack[-1]->set_numeric(&$operator($left, $right));
- } else {
- # XXX Does this work?
- runtime(sprintf("sv_setsv($left, %s);",
- &$operator($left, $right)));
- $stack[-1]->invalidate;
- }
- } else {
- my $f;
- if ($flags & INT_RESULT) {
- $f = "sv_setiv";
- } elsif ($flags & NUMERIC_RESULT) {
- $f = "sv_setnv";
- } else {
- $f = "sv_setsv";
- }
- runtime(sprintf("%s(TOPs, %s);", $f, &$operator("TOPs", $right)));
- }
- } else {
- my $targ = $pad[$op->targ];
- runtime(sprintf("right = %s; left = %s;", pop_sv(), pop_sv));
- if ($flags & INT_RESULT) {
- $targ->set_int(&$operator("left", "right"));
- } elsif ($flags & NUMERIC_RESULT) {
- $targ->set_numeric(&$operator("left", "right"));
- } else {
- # XXX Does this work?
- runtime(sprintf("sv_setsv(%s, %s);",
- $targ->as_sv, &$operator("left", "right")));
- $targ->invalidate;
- }
- push(@stack, $targ);
- }
- return $op->next;
-}
-
-sub bool_int_binop {
- my ($op, $operator) = @_;
- my $right = new B::Pseudoreg ("IV", "riv");
- my $left = new B::Pseudoreg ("IV", "liv");
- runtime(sprintf("$$right = %s; $$left = %s;", pop_int(), pop_int()));
- my $bool = new B::Stackobj::Bool (new B::Pseudoreg ("int", "b"));
- $bool->set_int(&$operator($$left, $$right));
- push(@stack, $bool);
- return $op->next;
-}
-
-sub bool_numeric_binop {
- my ($op, $operator) = @_;
- my $right = new B::Pseudoreg ("double", "rnv");
- my $left = new B::Pseudoreg ("double", "lnv");
- runtime(sprintf("$$right = %s; $$left = %s;",
- pop_numeric(), pop_numeric()));
- my $bool = new B::Stackobj::Bool (new B::Pseudoreg ("int", "b"));
- $bool->set_numeric(&$operator($$left, $$right));
- push(@stack, $bool);
- return $op->next;
-}
-
-sub bool_sv_binop {
- my ($op, $operator) = @_;
- runtime(sprintf("right = %s; left = %s;", pop_sv(), pop_sv()));
- my $bool = new B::Stackobj::Bool (new B::Pseudoreg ("int", "b"));
- $bool->set_numeric(&$operator("left", "right"));
- push(@stack, $bool);
- return $op->next;
-}
-
-sub infix_op {
- my $opname = shift;
- return sub { "$_[0] $opname $_[1]" }
-}
-
-sub prefix_op {
- my $opname = shift;
- return sub { sprintf("%s(%s)", $opname, join(", ", @_)) }
-}
-
-BEGIN {
- my $plus_op = infix_op("+");
- my $minus_op = infix_op("-");
- my $multiply_op = infix_op("*");
- my $divide_op = infix_op("/");
- my $modulo_op = infix_op("%");
- my $lshift_op = infix_op("<<");
- my $rshift_op = infix_op(">>");
- my $scmp_op = prefix_op("sv_cmp");
- my $seq_op = prefix_op("sv_eq");
- my $sne_op = prefix_op("!sv_eq");
- my $slt_op = sub { "sv_cmp($_[0], $_[1]) < 0" };
- my $sgt_op = sub { "sv_cmp($_[0], $_[1]) > 0" };
- my $sle_op = sub { "sv_cmp($_[0], $_[1]) <= 0" };
- my $sge_op = sub { "sv_cmp($_[0], $_[1]) >= 0" };
- my $eq_op = infix_op("==");
- my $ne_op = infix_op("!=");
- my $lt_op = infix_op("<");
- my $gt_op = infix_op(">");
- my $le_op = infix_op("<=");
- my $ge_op = infix_op(">=");
-
- #
- # XXX The standard perl PP code has extra handling for
- # some special case arguments of these operators.
- #
- sub pp_add { numeric_binop($_[0], $plus_op) }
- sub pp_subtract { numeric_binop($_[0], $minus_op) }
- sub pp_multiply { numeric_binop($_[0], $multiply_op) }
- sub pp_divide { numeric_binop($_[0], $divide_op) }
- sub pp_modulo { int_binop($_[0], $modulo_op) } # differs from perl's
-
- sub pp_left_shift { int_binop($_[0], $lshift_op) }
- sub pp_right_shift { int_binop($_[0], $rshift_op) }
- sub pp_i_add { int_binop($_[0], $plus_op) }
- sub pp_i_subtract { int_binop($_[0], $minus_op) }
- sub pp_i_multiply { int_binop($_[0], $multiply_op) }
- sub pp_i_divide { int_binop($_[0], $divide_op) }
- sub pp_i_modulo { int_binop($_[0], $modulo_op) }
-
- sub pp_eq { bool_numeric_binop($_[0], $eq_op) }
- sub pp_ne { bool_numeric_binop($_[0], $ne_op) }
- sub pp_lt { bool_numeric_binop($_[0], $lt_op) }
- sub pp_gt { bool_numeric_binop($_[0], $gt_op) }
- sub pp_le { bool_numeric_binop($_[0], $le_op) }
- sub pp_ge { bool_numeric_binop($_[0], $ge_op) }
-
- sub pp_i_eq { bool_int_binop($_[0], $eq_op) }
- sub pp_i_ne { bool_int_binop($_[0], $ne_op) }
- sub pp_i_lt { bool_int_binop($_[0], $lt_op) }
- sub pp_i_gt { bool_int_binop($_[0], $gt_op) }
- sub pp_i_le { bool_int_binop($_[0], $le_op) }
- sub pp_i_ge { bool_int_binop($_[0], $ge_op) }
-
- sub pp_scmp { sv_binop($_[0], $scmp_op, INT_RESULT) }
- sub pp_slt { bool_sv_binop($_[0], $slt_op) }
- sub pp_sgt { bool_sv_binop($_[0], $sgt_op) }
- sub pp_sle { bool_sv_binop($_[0], $sle_op) }
- sub pp_sge { bool_sv_binop($_[0], $sge_op) }
- sub pp_seq { bool_sv_binop($_[0], $seq_op) }
- sub pp_sne { bool_sv_binop($_[0], $sne_op) }
-}
-
-
-sub pp_sassign {
- my $op = shift;
- my $backwards = $op->private & OPpASSIGN_BACKWARDS;
- my ($dst, $src);
- if (@stack >= 2) {
- $dst = pop @stack;
- $src = pop @stack;
- ($src, $dst) = ($dst, $src) if $backwards;
- my $type = $src->{type};
- if ($type == T_INT) {
- $dst->set_int($src->as_int,$src->{flags} & VALID_UNSIGNED);
- } elsif ($type == T_DOUBLE) {
- $dst->set_numeric($src->as_numeric);
- } else {
- $dst->set_sv($src->as_sv);
- }
- push(@stack, $dst);
- } elsif (@stack == 1) {
- if ($backwards) {
- my $src = pop @stack;
- my $type = $src->{type};
- runtime("if (PL_tainting && PL_tainted) TAINT_NOT;");
- if ($type == T_INT) {
- if ($src->{flags} & VALID_UNSIGNED){
- runtime sprintf("sv_setuv(TOPs, %s);", $src->as_int);
- }else{
- runtime sprintf("sv_setiv(TOPs, %s);", $src->as_int);
- }
- } elsif ($type == T_DOUBLE) {
- runtime sprintf("sv_setnv(TOPs, %s);", $src->as_double);
- } else {
- runtime sprintf("sv_setsv(TOPs, %s);", $src->as_sv);
- }
- runtime("SvSETMAGIC(TOPs);");
- } else {
- my $dst = $stack[-1];
- my $type = $dst->{type};
- runtime("sv = POPs;");
- runtime("MAYBE_TAINT_SASSIGN_SRC(sv);");
- if ($type == T_INT) {
- $dst->set_int("SvIV(sv)");
- } elsif ($type == T_DOUBLE) {
- $dst->set_double("SvNV(sv)");
- } else {
- runtime("SvSetMagicSV($dst->{sv}, sv);");
- $dst->invalidate;
- }
- }
- } else {
- if ($backwards) {
- runtime("src = POPs; dst = TOPs;");
- } else {
- runtime("dst = POPs; src = TOPs;");
- }
- runtime("MAYBE_TAINT_SASSIGN_SRC(src);",
- "SvSetSV(dst, src);",
- "SvSETMAGIC(dst);",
- "SETs(dst);");
- }
- return $op->next;
-}
-
-sub pp_preinc {
- my $op = shift;
- if (@stack >= 1) {
- my $obj = $stack[-1];
- my $type = $obj->{type};
- if ($type == T_INT || $type == T_DOUBLE) {
- $obj->set_int($obj->as_int . " + 1");
- } else {
- runtime sprintf("PP_PREINC(%s);", $obj->as_sv);
- $obj->invalidate();
- }
- } else {
- runtime sprintf("PP_PREINC(TOPs);");
- }
- return $op->next;
-}
-
-
-sub pp_pushmark {
- my $op = shift;
- write_back_stack();
- runtime("PUSHMARK(sp);");
- return $op->next;
-}
-
-sub pp_list {
- my $op = shift;
- write_back_stack();
- my $gimme = gimme($op);
- if ($gimme == G_ARRAY) { # sic
- runtime("POPMARK;"); # need this even though not a "full" pp_list
- } else {
- runtime("PP_LIST($gimme);");
- }
- return $op->next;
-}
-
-sub pp_entersub {
- my $op = shift;
- $curcop->write_back;
- write_back_lexicals(REGISTER|TEMPORARY);
- write_back_stack();
- my $sym = doop($op);
- runtime("while (PL_op != ($sym)->op_next && PL_op != (OP*)0 ){");
- runtime("PL_op = (*PL_op->op_ppaddr)(aTHX);");
- runtime("SPAGAIN;}");
- $know_op = 0;
- invalidate_lexicals(REGISTER|TEMPORARY);
- return $op->next;
-}
-sub pp_formline {
- my $op = shift;
- my $ppname = $op->ppaddr;
- write_back_lexicals() unless $skip_lexicals{$ppname};
- write_back_stack() unless $skip_stack{$ppname};
- my $sym=doop($op);
- # See comment in pp_grepwhile to see why!
- $init->add("((LISTOP*)$sym)->op_first = $sym;");
- runtime("if (PL_op == ((LISTOP*)($sym))->op_first){");
- save_or_restore_lexical_state(${$op->first});
- runtime( sprintf("goto %s;",label($op->first)));
- runtime("}");
- return $op->next;
-}
-
-sub pp_goto{
-
- my $op = shift;
- my $ppname = $op->ppaddr;
- write_back_lexicals() unless $skip_lexicals{$ppname};
- write_back_stack() unless $skip_stack{$ppname};
- my $sym=doop($op);
- runtime("if (PL_op != ($sym)->op_next && PL_op != (OP*)0){return PL_op;}");
- invalidate_lexicals() unless $skip_invalidate{$ppname};
- return $op->next;
-}
-sub pp_enterwrite {
- my $op = shift;
- pp_entersub($op);
-}
-sub pp_leavesub{
- my $op = shift;
- write_back_lexicals() unless $skip_lexicals{$ppname};
- write_back_stack() unless $skip_stack{$ppname};
- runtime("if (PL_curstackinfo->si_type == PERLSI_SORT){");
- runtime("\tPUTBACK;return 0;");
- runtime("}");
- doop($op);
- return $op->next;
-}
-sub pp_leavewrite {
- my $op = shift;
- write_back_lexicals(REGISTER|TEMPORARY);
- write_back_stack();
- my $sym = doop($op);
- # XXX Is this the right way to distinguish between it returning
- # CvSTART(cv) (via doform) and pop_return()?
- #runtime("if (PL_op) PL_op = (*PL_op->op_ppaddr)(aTHX);");
- runtime("SPAGAIN;");
- $know_op = 0;
- invalidate_lexicals(REGISTER|TEMPORARY);
- return $op->next;
-}
-
-sub doeval {
- my $op = shift;
- $curcop->write_back;
- write_back_lexicals(REGISTER|TEMPORARY);
- write_back_stack();
- my $sym = loadop($op);
- my $ppaddr = $op->ppaddr;
- #runtime(qq/printf("$ppaddr type eval\n");/);
- runtime("PP_EVAL($ppaddr, ($sym)->op_next);");
- $know_op = 1;
- invalidate_lexicals(REGISTER|TEMPORARY);
- return $op->next;
-}
-
-sub pp_entereval { doeval(@_) }
-sub pp_dofile { doeval(@_) }
-
-#pp_require is protected by pp_entertry, so no protection for it.
-sub pp_require {
- my $op = shift;
- $curcop->write_back;
- write_back_lexicals(REGISTER|TEMPORARY);
- write_back_stack();
- my $sym = doop($op);
- runtime("while (PL_op != ($sym)->op_next && PL_op != (OP*)0 ){");
- runtime("PL_op = (*PL_op->op_ppaddr)(ARGS);");
- runtime("SPAGAIN;}");
- $know_op = 1;
- invalidate_lexicals(REGISTER|TEMPORARY);
- return $op->next;
-}
-
-
-sub pp_entertry {
- my $op = shift;
- $curcop->write_back;
- write_back_lexicals(REGISTER|TEMPORARY);
- write_back_stack();
- my $sym = doop($op);
- my $jmpbuf = sprintf("jmpbuf%d", $jmpbuf_ix++);
- declare("JMPENV", $jmpbuf);
- runtime(sprintf("PP_ENTERTRY(%s,%s);", $jmpbuf, label($op->other->next)));
- invalidate_lexicals(REGISTER|TEMPORARY);
- return $op->next;
-}
-
-sub pp_leavetry{
- my $op=shift;
- default_pp($op);
- runtime("PP_LEAVETRY;");
- return $op->next;
-}
-
-sub pp_grepstart {
- my $op = shift;
- if ($need_freetmps && $freetmps_each_loop) {
- runtime("FREETMPS;"); # otherwise the grepwhile loop messes things up
- $need_freetmps = 0;
- }
- write_back_stack();
- my $sym= doop($op);
- my $next=$op->next;
- $next->save;
- my $nexttonext=$next->next;
- $nexttonext->save;
- save_or_restore_lexical_state($$nexttonext);
- runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;",
- label($nexttonext)));
- return $op->next->other;
-}
-
-sub pp_mapstart {
- my $op = shift;
- if ($need_freetmps && $freetmps_each_loop) {
- runtime("FREETMPS;"); # otherwise the mapwhile loop messes things up
- $need_freetmps = 0;
- }
- write_back_stack();
- # pp_mapstart can return either op_next->op_next or op_next->op_other and
- # we need to be able to distinguish the two at runtime.
- my $sym= doop($op);
- my $next=$op->next;
- $next->save;
- my $nexttonext=$next->next;
- $nexttonext->save;
- save_or_restore_lexical_state($$nexttonext);
- runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;",
- label($nexttonext)));
- return $op->next->other;
-}
-
-sub pp_grepwhile {
- my $op = shift;
- my $next = $op->next;
- unshift(@bblock_todo, $next);
- write_back_lexicals();
- write_back_stack();
- my $sym = doop($op);
- # pp_grepwhile can return either op_next or op_other and we need to
- # be able to distinguish the two at runtime. Since it's possible for
- # both ops to be "inlined", the fields could both be zero. To get
- # around that, we hack op_next to be our own op (purely because we
- # know it's a non-NULL pointer and can't be the same as op_other).
- $init->add("((LOGOP*)$sym)->op_next = $sym;");
- save_or_restore_lexical_state($$next);
- runtime(sprintf("if (PL_op == ($sym)->op_next) goto %s;", label($next)));
- $know_op = 0;
- return $op->other;
-}
-
-sub pp_mapwhile {
- pp_grepwhile(@_);
-}
-
-sub pp_return {
- my $op = shift;
- write_back_lexicals(REGISTER|TEMPORARY);
- write_back_stack();
- doop($op);
- runtime("PUTBACK;", "return PL_op;");
- $know_op = 0;
- return $op->next;
-}
-
-sub nyi {
- my $op = shift;
- warn sprintf("%s not yet implemented properly\n", $op->ppaddr);
- return default_pp($op);
-}
-
-sub pp_range {
- my $op = shift;
- my $flags = $op->flags;
- if (!($flags & OPf_WANT)) {
- error("context of range unknown at compile-time");
- }
- write_back_lexicals();
- write_back_stack();
- unless (($flags & OPf_WANT)== OPf_WANT_LIST) {
- # We need to save our UNOP structure since pp_flop uses
- # it to find and adjust out targ. We don't need it ourselves.
- $op->save;
- save_or_restore_lexical_state(${$op->other});
- runtime sprintf("if (SvTRUE(PL_curpad[%d])) goto %s;",
- $op->targ, label($op->other));
- unshift(@bblock_todo, $op->other);
- }
- return $op->next;
-}
-
-sub pp_flip {
- my $op = shift;
- my $flags = $op->flags;
- if (!($flags & OPf_WANT)) {
- error("context of flip unknown at compile-time");
- }
- if (($flags & OPf_WANT)==OPf_WANT_LIST) {
- return $op->first->other;
- }
- write_back_lexicals();
- write_back_stack();
- # We need to save our UNOP structure since pp_flop uses
- # it to find and adjust out targ. We don't need it ourselves.
- $op->save;
- my $ix = $op->targ;
- my $rangeix = $op->first->targ;
- runtime(($op->private & OPpFLIP_LINENUM) ?
- "if (PL_last_in_gv && SvIV(TOPs) == IoLINES(GvIOp(PL_last_in_gv))) {"
- : "if (SvTRUE(TOPs)) {");
- runtime("\tsv_setiv(PL_curpad[$rangeix], 1);");
- if ($op->flags & OPf_SPECIAL) {
- runtime("sv_setiv(PL_curpad[$ix], 1);");
- } else {
- save_or_restore_lexical_state(${$op->first->other});
- runtime("\tsv_setiv(PL_curpad[$ix], 0);",
- "\tsp--;",
- sprintf("\tgoto %s;", label($op->first->other)));
- }
- runtime("}",
- qq{sv_setpv(PL_curpad[$ix], "");},
- "SETs(PL_curpad[$ix]);");
- $know_op = 0;
- return $op->next;
-}
-
-sub pp_flop {
- my $op = shift;
- default_pp($op);
- $know_op = 0;
- return $op->next;
-}
-
-sub enterloop {
- my $op = shift;
- my $nextop = $op->nextop;
- my $lastop = $op->lastop;
- my $redoop = $op->redoop;
- $curcop->write_back;
- debug "enterloop: pushing on cxstack" if $debug_cxstack;
- push(@cxstack, {
- type => CXt_LOOP,
- op => $op,
- "label" => $curcop->[0]->label,
- nextop => $nextop,
- lastop => $lastop,
- redoop => $redoop
- });
- $nextop->save;
- $lastop->save;
- $redoop->save;
- return default_pp($op);
-}
-
-sub pp_enterloop { enterloop(@_) }
-sub pp_enteriter { enterloop(@_) }
-
-sub pp_leaveloop {
- my $op = shift;
- if (!@cxstack) {
- die "panic: leaveloop";
- }
- debug "leaveloop: popping from cxstack" if $debug_cxstack;
- pop(@cxstack);
- return default_pp($op);
-}
-
-sub pp_next {
- my $op = shift;
- my $cxix;
- if ($op->flags & OPf_SPECIAL) {
- $cxix = dopoptoloop();
- if ($cxix < 0) {
- error('"next" used outside loop');
- return $op->next; # ignore the op
- }
- } else {
- $cxix = dopoptolabel($op->pv);
- if ($cxix < 0) {
- error('Label not found at compile time for "next %s"', $op->pv);
- return $op->next; # ignore the op
- }
- }
- default_pp($op);
- my $nextop = $cxstack[$cxix]->{nextop};
- push(@bblock_todo, $nextop);
- save_or_restore_lexical_state($$nextop);
- runtime(sprintf("goto %s;", label($nextop)));
- return $op->next;
-}
-
-sub pp_redo {
- my $op = shift;
- my $cxix;
- if ($op->flags & OPf_SPECIAL) {
- $cxix = dopoptoloop();
- if ($cxix < 0) {
- error('"redo" used outside loop');
- return $op->next; # ignore the op
- }
- } else {
- $cxix = dopoptolabel($op->pv);
- if ($cxix < 0) {
- error('Label not found at compile time for "redo %s"', $op->pv);
- return $op->next; # ignore the op
- }
- }
- default_pp($op);
- my $redoop = $cxstack[$cxix]->{redoop};
- push(@bblock_todo, $redoop);
- save_or_restore_lexical_state($$redoop);
- runtime(sprintf("goto %s;", label($redoop)));
- return $op->next;
-}
-
-sub pp_last {
- my $op = shift;
- my $cxix;
- if ($op->flags & OPf_SPECIAL) {
- $cxix = dopoptoloop();
- if ($cxix < 0) {
- error('"last" used outside loop');
- return $op->next; # ignore the op
- }
- } else {
- $cxix = dopoptolabel($op->pv);
- if ($cxix < 0) {
- error('Label not found at compile time for "last %s"', $op->pv);
- return $op->next; # ignore the op
- }
- # XXX Add support for "last" to leave non-loop blocks
- if ($cxstack[$cxix]->{type} != CXt_LOOP) {
- error('Use of "last" for non-loop blocks is not yet implemented');
- return $op->next; # ignore the op
- }
- }
- default_pp($op);
- my $lastop = $cxstack[$cxix]->{lastop}->next;
- push(@bblock_todo, $lastop);
- save_or_restore_lexical_state($$lastop);
- runtime(sprintf("goto %s;", label($lastop)));
- return $op->next;
-}
-
-sub pp_subst {
- my $op = shift;
- write_back_lexicals();
- write_back_stack();
- my $sym = doop($op);
- my $replroot = $op->pmreplroot;
- if ($$replroot) {
- save_or_restore_lexical_state($$replroot);
- runtime sprintf("if (PL_op == ((PMOP*)(%s))->op_pmreplroot) goto %s;",
- $sym, label($replroot));
- $op->pmreplstart->save;
- push(@bblock_todo, $replroot);
- }
- invalidate_lexicals();
- return $op->next;
-}
-
-sub pp_substcont {
- my $op = shift;
- write_back_lexicals();
- write_back_stack();
- doop($op);
- my $pmop = $op->other;
- # warn sprintf("substcont: op = %s, pmop = %s\n",
- # peekop($op), peekop($pmop));#debug
-# my $pmopsym = objsym($pmop);
- my $pmopsym = $pmop->save; # XXX can this recurse?
-# warn "pmopsym = $pmopsym\n";#debug
- save_or_restore_lexical_state(${$pmop->pmreplstart});
- runtime sprintf("if (PL_op == ((PMOP*)(%s))->op_pmreplstart) goto %s;",
- $pmopsym, label($pmop->pmreplstart));
- invalidate_lexicals();
- return $pmop->next;
-}
-
-sub default_pp {
- my $op = shift;
- my $ppname = "pp_" . $op->name;
- if ($curcop and $need_curcop{$ppname}){
- $curcop->write_back;
- }
- write_back_lexicals() unless $skip_lexicals{$ppname};
- write_back_stack() unless $skip_stack{$ppname};
- doop($op);
- # XXX If the only way that ops can write to a TEMPORARY lexical is
- # when it's named in $op->targ then we could call
- # invalidate_lexicals(TEMPORARY) and avoid having to write back all
- # the temporaries. For now, we'll play it safe and write back the lot.
- invalidate_lexicals() unless $skip_invalidate{$ppname};
- return $op->next;
-}
-
-sub compile_op {
- my $op = shift;
- my $ppname = "pp_" . $op->name;
- if (exists $ignore_op{$ppname}) {
- return $op->next;
- }
- debug peek_stack() if $debug_stack;
- if ($debug_op) {
- debug sprintf("%s [%s]\n",
- peekop($op),
- $op->flags & OPf_STACKED ? "OPf_STACKED" : $op->targ);
- }
- no strict 'refs';
- if (defined(&$ppname)) {
- $know_op = 0;
- return &$ppname($op);
- } else {
- return default_pp($op);
- }
-}
-
-sub compile_bblock {
- my $op = shift;
- #warn "compile_bblock: ", peekop($op), "\n"; # debug
- save_or_restore_lexical_state($$op);
- write_label($op);
- $know_op = 0;
- do {
- $op = compile_op($op);
- } while (defined($op) && $$op && !exists($leaders->{$$op}));
- write_back_stack(); # boo hoo: big loss
- reload_lexicals();
- return $op;
-}
-
-sub cc {
- my ($name, $root, $start, @padlist) = @_;
- my $op;
- if($done{$$start}){
- #warn "repeat=>".ref($start)."$name,\n";#debug
- $decl->add(sprintf("#define $name %s",$done{$$start}));
- return;
- }
- init_pp($name);
- load_pad(@padlist);
- %lexstate=();
- B::Pseudoreg->new_scope;
- @cxstack = ();
- if ($debug_timings) {
- warn sprintf("Basic block analysis at %s\n", timing_info);
- }
- $leaders = find_leaders($root, $start);
- my @leaders= keys %$leaders;
- if ($#leaders > -1) {
- @bblock_todo = ($start, values %$leaders) ;
- } else{
- runtime("return PL_op?PL_op->op_next:0;");
- }
- if ($debug_timings) {
- warn sprintf("Compilation at %s\n", timing_info);
- }
- while (@bblock_todo) {
- $op = shift @bblock_todo;
- #warn sprintf("Considering basic block %s\n", peekop($op)); # debug
- next if !defined($op) || !$$op || $done{$$op};
- #warn "...compiling it\n"; # debug
- do {
- $done{$$op} = $name;
- $op = compile_bblock($op);
- if ($need_freetmps && $freetmps_each_bblock) {
- runtime("FREETMPS;");
- $need_freetmps = 0;
- }
- } while defined($op) && $$op && !$done{$$op};
- if ($need_freetmps && $freetmps_each_loop) {
- runtime("FREETMPS;");
- $need_freetmps = 0;
- }
- if (!$$op) {
- runtime("PUTBACK;","return PL_op;");
- } elsif ($done{$$op}) {
- save_or_restore_lexical_state($$op);
- runtime(sprintf("goto %s;", label($op)));
- }
- }
- if ($debug_timings) {
- warn sprintf("Saving runtime at %s\n", timing_info);
- }
- declare_pad(@padlist) ;
- save_runtime();
-}
-
-sub cc_recurse {
- my $ccinfo;
- my $start;
- $start = cc_queue(@_) if @_;
- while ($ccinfo = shift @cc_todo) {
- cc(@$ccinfo);
- }
- return $start;
-}
-
-sub cc_obj {
- my ($name, $cvref) = @_;
- my $cv = svref_2object($cvref);
- my @padlist = $cv->PADLIST->ARRAY;
- my $curpad_sym = $padlist[1]->save;
- cc_recurse($name, $cv->ROOT, $cv->START, @padlist);
-}
-
-sub cc_main {
- my @comppadlist = comppadlist->ARRAY;
- my $curpad_nam = $comppadlist[0]->save;
- my $curpad_sym = $comppadlist[1]->save;
- my $init_av = init_av->save;
- my $start = cc_recurse("pp_main", main_root, main_start, @comppadlist);
- # Do save_unused_subs before saving inc_hv
- save_unused_subs();
- cc_recurse();
-
- my $inc_hv = svref_2object(\%INC)->save;
- my $inc_av = svref_2object(\@INC)->save;
- my $amagic_generate= amagic_generation;
- return if $errors;
- if (!defined($module)) {
- $init->add(sprintf("PL_main_root = s\\_%x;", ${main_root()}),
- "PL_main_start = $start;",
- "PL_curpad = AvARRAY($curpad_sym);",
- "PL_initav = (AV *) $init_av;",
- "GvHV(PL_incgv) = $inc_hv;",
- "GvAV(PL_incgv) = $inc_av;",
- "av_store(CvPADLIST(PL_main_cv),0,SvREFCNT_inc($curpad_nam));",
- "av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc($curpad_sym));",
- "PL_amagic_generation= $amagic_generate;",
- );
-
- }
- seek(STDOUT,0,0); #prevent print statements from BEGIN{} into the output
- output_boilerplate();
- print "\n";
- output_all("perl_init");
- output_runtime();
- print "\n";
- output_main();
- if (defined($module)) {
- my $cmodule = $module;
- $cmodule =~ s/::/__/g;
- print <<"EOT";
-
-#include "XSUB.h"
-XS(boot_$cmodule)
-{
- dXSARGS;
- perl_init();
- ENTER;
- SAVETMPS;
- SAVEVPTR(PL_curpad);
- SAVEVPTR(PL_op);
- PL_curpad = AvARRAY($curpad_sym);
- PL_op = $start;
- pp_main(aTHX);
- FREETMPS;
- LEAVE;
- ST(0) = &PL_sv_yes;
- XSRETURN(1);
-}
-EOT
- }
- if ($debug_timings) {
- warn sprintf("Done at %s\n", timing_info);
- }
-}
-
-sub compile {
- my @options = @_;
- my ($option, $opt, $arg);
- OPTION:
- while ($option = shift @options) {
- if ($option =~ /^-(.)(.*)/) {
- $opt = $1;
- $arg = $2;
- } else {
- unshift @options, $option;
- last OPTION;
- }
- if ($opt eq "-" && $arg eq "-") {
- shift @options;
- last OPTION;
- } elsif ($opt eq "o") {
- $arg ||= shift @options;
- open(STDOUT, ">$arg") or return "open '>$arg': $!\n";
- } elsif ($opt eq "n") {
- $arg ||= shift @options;
- $module_name = $arg;
- } elsif ($opt eq "u") {
- $arg ||= shift @options;
- mark_unused($arg,undef);
- } elsif ($opt eq "f") {
- $arg ||= shift @options;
- my $value = $arg !~ s/^no-//;
- $arg =~ s/-/_/g;
- my $ref = $optimise{$arg};
- if (defined($ref)) {
- $$ref = $value;
- } else {
- warn qq(ignoring unknown optimisation option "$arg"\n);
- }
- } elsif ($opt eq "O") {
- $arg = 1 if $arg eq "";
- my $ref;
- foreach $ref (values %optimise) {
- $$ref = 0;
- }
- if ($arg >= 2) {
- $freetmps_each_loop = 1;
- }
- if ($arg >= 1) {
- $freetmps_each_bblock = 1 unless $freetmps_each_loop;
- }
- } elsif ($opt eq "m") {
- $arg ||= shift @options;
- $module = $arg;
- mark_unused($arg,undef);
- } elsif ($opt eq "p") {
- $arg ||= shift @options;
- $patchlevel = $arg;
- } elsif ($opt eq "D") {
- $arg ||= shift @options;
- foreach $arg (split(//, $arg)) {
- if ($arg eq "o") {
- B->debug(1);
- } elsif ($arg eq "O") {
- $debug_op = 1;
- } elsif ($arg eq "s") {
- $debug_stack = 1;
- } elsif ($arg eq "c") {
- $debug_cxstack = 1;
- } elsif ($arg eq "p") {
- $debug_pad = 1;
- } elsif ($arg eq "r") {
- $debug_runtime = 1;
- } elsif ($arg eq "S") {
- $debug_shadow = 1;
- } elsif ($arg eq "q") {
- $debug_queue = 1;
- } elsif ($arg eq "l") {
- $debug_lineno = 1;
- } elsif ($arg eq "t") {
- $debug_timings = 1;
- }
- }
- }
- }
- init_sections();
- $init = B::Section->get("init");
- $decl = B::Section->get("decl");
-
- if (@options) {
- return sub {
- my ($objname, $ppname);
- foreach $objname (@options) {
- $objname = "main::$objname" unless $objname =~ /::/;
- ($ppname = $objname) =~ s/^.*?:://;
- eval "cc_obj(qq(pp_sub_$ppname), \\&$objname)";
- die "cc_obj(qq(pp_sub_$ppname, \\&$objname) failed: $@" if $@;
- return if $errors;
- }
- output_boilerplate();
- print "\n";
- output_all($module_name || "init_module");
- output_runtime();
- }
- } else {
- return sub { cc_main() };
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::CC - Perl compiler's optimized C translation backend
-
-=head1 SYNOPSIS
-
- perl -MO=CC[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-This compiler backend takes Perl source and generates C source code
-corresponding to the flow of your program. In other words, this
-backend is somewhat a "real" compiler in the sense that many people
-think about compilers. Note however that, currently, it is a very
-poor compiler in that although it generates (mostly, or at least
-sometimes) correct code, it performs relatively few optimisations.
-This will change as the compiler develops. The result is that
-running an executable compiled with this backend may start up more
-quickly than running the original Perl program (a feature shared
-by the B<C> compiler backend--see F<B::C>) and may also execute
-slightly faster. This is by no means a good optimising compiler--yet.
-
-=head1 OPTIONS
-
-If there are any non-option arguments, they are taken to be
-names of objects to be saved (probably doesn't work properly yet).
-Without extra arguments, it saves the main program.
-
-=over 4
-
-=item B<-ofilename>
-
-Output to filename instead of STDOUT
-
-=item B<-v>
-
-Verbose compilation (currently gives a few compilation statistics).
-
-=item B<-->
-
-Force end of options
-
-=item B<-uPackname>
-
-Force apparently unused subs from package Packname to be compiled.
-This allows programs to use eval "foo()" even when sub foo is never
-seen to be used at compile time. The down side is that any subs which
-really are never used also have code generated. This option is
-necessary, for example, if you have a signal handler foo which you
-initialise with C<$SIG{BAR} = "foo">. A better fix, though, is just
-to change it to C<$SIG{BAR} = \&foo>. You can have multiple B<-u>
-options. The compiler tries to figure out which packages may possibly
-have subs in which need compiling but the current version doesn't do
-it very well. In particular, it is confused by nested packages (i.e.
-of the form C<A::B>) where package C<A> does not contain any subs.
-
-=item B<-mModulename>
-
-Instead of generating source for a runnable executable, generate
-source for an XSUB module. The boot_Modulename function (which
-DynaLoader can look for) does the appropriate initialisation and runs
-the main part of the Perl source that is being compiled.
-
-
-=item B<-D>
-
-Debug options (concatenated or separate flags like C<perl -D>).
-
-=item B<-Dr>
-
-Writes debugging output to STDERR just as it's about to write to the
-program's runtime (otherwise writes debugging info as comments in
-its C output).
-
-=item B<-DO>
-
-Outputs each OP as it's compiled
-
-=item B<-Ds>
-
-Outputs the contents of the shadow stack at each OP
-
-=item B<-Dp>
-
-Outputs the contents of the shadow pad of lexicals as it's loaded for
-each sub or the main program.
-
-=item B<-Dq>
-
-Outputs the name of each fake PP function in the queue as it's about
-to process it.
-
-=item B<-Dl>
-
-Output the filename and line number of each original line of Perl
-code as it's processed (C<pp_nextstate>).
-
-=item B<-Dt>
-
-Outputs timing information of compilation stages.
-
-=item B<-f>
-
-Force optimisations on or off one at a time.
-
-=item B<-ffreetmps-each-bblock>
-
-Delays FREETMPS from the end of each statement to the end of the each
-basic block.
-
-=item B<-ffreetmps-each-loop>
-
-Delays FREETMPS from the end of each statement to the end of the group
-of basic blocks forming a loop. At most one of the freetmps-each-*
-options can be used.
-
-=item B<-fomit-taint>
-
-Omits generating code for handling perl's tainting mechanism.
-
-=item B<-On>
-
-Optimisation level (n = 0, 1, 2, ...). B<-O> means B<-O1>.
-Currently, B<-O1> sets B<-ffreetmps-each-bblock> and B<-O2>
-sets B<-ffreetmps-each-loop>.
-
-=back
-
-=head1 EXAMPLES
-
- perl -MO=CC,-O2,-ofoo.c foo.pl
- perl cc_harness -o foo foo.c
-
-Note that C<cc_harness> lives in the C<B> subdirectory of your perl
-library directory. The utility called C<perlcc> may also be used to
-help make use of this compiler.
-
- perl -MO=CC,-mFoo,-oFoo.c Foo.pm
- perl cc_harness -shared -c -o Foo.so Foo.c
-
-=head1 BUGS
-
-Plenty. Current status: experimental.
-
-=head1 DIFFERENCES
-
-These aren't really bugs but they are constructs which are heavily
-tied to perl's compile-and-go implementation and with which this
-compiler backend cannot cope.
-
-=head2 Loops
-
-Standard perl calculates the target of "next", "last", and "redo"
-at run-time. The compiler calculates the targets at compile-time.
-For example, the program
-
- sub skip_on_odd { next NUMBER if $_[0] % 2 }
- NUMBER: for ($i = 0; $i < 5; $i++) {
- skip_on_odd($i);
- print $i;
- }
-
-produces the output
-
- 024
-
-with standard perl but gives a compile-time error with the compiler.
-
-=head2 Context of ".."
-
-The context (scalar or array) of the ".." operator determines whether
-it behaves as a range or a flip/flop. Standard perl delays until
-runtime the decision of which context it is in but the compiler needs
-to know the context at compile-time. For example,
-
- @a = (4,6,1,0,0,1);
- sub range { (shift @a)..(shift @a) }
- print range();
- while (@a) { print scalar(range()) }
-
-generates the output
-
- 456123E0
-
-with standard Perl but gives a compile-time error with compiled Perl.
-
-=head2 Arithmetic
-
-Compiled Perl programs use native C arithemtic much more frequently
-than standard perl. Operations on large numbers or on boundary
-cases may produce different behaviour.
-
-=head2 Deprecated features
-
-Features of standard perl such as C<$[> which have been deprecated
-in standard perl since Perl5 was released have not been implemented
-in the compiler.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Concise.pm b/contrib/perl5/ext/B/B/Concise.pm
deleted file mode 100644
index cb352eb..0000000
--- a/contrib/perl5/ext/B/B/Concise.pm
+++ /dev/null
@@ -1,823 +0,0 @@
-package B::Concise;
-# Copyright (C) 2000, 2001 Stephen McCamant. All rights reserved.
-# This program is free software; you can redistribute and/or modify it
-# under the same terms as Perl itself.
-
-our $VERSION = "0.51";
-use strict;
-use B qw(class ppname main_start main_root main_cv cstring svref_2object
- SVf_IOK SVf_NOK SVf_POK OPf_KIDS);
-
-my %style =
- ("terse" =>
- ["(?(#label =>\n)?)(*( )*)#class (#addr) #name (?([#targ])?) "
- . "#svclass~(?((#svaddr))?)~#svval~(?(label \"#coplabel\")?)\n",
- "(*( )*)goto #class (#addr)\n",
- "#class pp_#name"],
- "concise" =>
- ["#hyphseq2 (*( (x( ;)x))*)<#classsym> "
- . "#exname#arg(?([#targarglife])?)~#flags(?(/#private)?)(x(;~->#next)x)\n",
- " (*( )*) goto #seq\n",
- "(?(<#seq>)?)#exname#arg(?([#targarglife])?)"],
- "linenoise" =>
- ["(x(;(*( )*))x)#noise#arg(?([#targarg])?)(x( ;\n)x)",
- "gt_#seq ",
- "(?(#seq)?)#noise#arg(?([#targarg])?)"],
- "debug" =>
- ["#class (#addr)\n\top_next\t\t#nextaddr\n\top_sibling\t#sibaddr\n\t"
- . "op_ppaddr\tPL_ppaddr[OP_#NAME]\n\top_type\t\t#typenum\n\top_seq\t\t"
- . "#seqnum\n\top_flags\t#flagval\n\top_private\t#privval\n"
- . "(?(\top_first\t#firstaddr\n)?)(?(\top_last\t\t#lastaddr\n)?)"
- . "(?(\top_sv\t\t#svaddr\n)?)",
- " GOTO #addr\n",
- "#addr"],
- "env" => [$ENV{B_CONCISE_FORMAT}, $ENV{B_CONCISE_GOTO_FORMAT},
- $ENV{B_CONCISE_TREE_FORMAT}],
- );
-
-my($format, $gotofmt, $treefmt);
-my $curcv;
-my($seq_base, $cop_seq_base);
-
-sub concise_cv {
- my ($order, $cvref) = @_;
- my $cv = svref_2object($cvref);
- $curcv = $cv;
- if ($order eq "exec") {
- walk_exec($cv->START);
- } elsif ($order eq "basic") {
- walk_topdown($cv->ROOT, sub { $_[0]->concise($_[1]) }, 0);
- } else {
- print tree($cv->ROOT, 0)
- }
-}
-
-my $start_sym = "\e(0"; # "\cN" sometimes also works
-my $end_sym = "\e(B"; # "\cO" respectively
-
-my @tree_decorations =
- ([" ", "--", "+-", "|-", "| ", "`-", "-", 1],
- [" ", "-", "+", "+", "|", "`", "", 0],
- [" ", map("$start_sym$_$end_sym", "qq", "wq", "tq", "x ", "mq", "q"), 1],
- [" ", map("$start_sym$_$end_sym", "q", "w", "t", "x", "m"), "", 0],
- );
-my $tree_style = 0;
-
-my $base = 36;
-my $big_endian = 1;
-
-my $order = "basic";
-
-sub compile {
- my @options = grep(/^-/, @_);
- my @args = grep(!/^-/, @_);
- my $do_main = 0;
- ($format, $gotofmt, $treefmt) = @{$style{"concise"}};
- for my $o (@options) {
- if ($o eq "-basic") {
- $order = "basic";
- } elsif ($o eq "-exec") {
- $order = "exec";
- } elsif ($o eq "-tree") {
- $order = "tree";
- } elsif ($o eq "-compact") {
- $tree_style |= 1;
- } elsif ($o eq "-loose") {
- $tree_style &= ~1;
- } elsif ($o eq "-vt") {
- $tree_style |= 2;
- } elsif ($o eq "-ascii") {
- $tree_style &= ~2;
- } elsif ($o eq "-main") {
- $do_main = 1;
- } elsif ($o =~ /^-base(\d+)$/) {
- $base = $1;
- } elsif ($o eq "-bigendian") {
- $big_endian = 1;
- } elsif ($o eq "-littleendian") {
- $big_endian = 0;
- } elsif (exists $style{substr($o, 1)}) {
- ($format, $gotofmt, $treefmt) = @{$style{substr($o, 1)}};
- } else {
- warn "Option $o unrecognized";
- }
- }
- if (@args) {
- return sub {
- for my $objname (@args) {
- $objname = "main::" . $objname unless $objname =~ /::/;
- eval "concise_cv(\$order, \\&$objname)";
- die "concise_cv($order, \\&$objname) failed: $@" if $@;
- }
- }
- }
- if (!@args or $do_main) {
- if ($order eq "exec") {
- return sub { return if class(main_start) eq "NULL";
- $curcv = main_cv;
- walk_exec(main_start) }
- } elsif ($order eq "tree") {
- return sub { return if class(main_root) eq "NULL";
- $curcv = main_cv;
- print tree(main_root, 0) }
- } elsif ($order eq "basic") {
- return sub { return if class(main_root) eq "NULL";
- $curcv = main_cv;
- walk_topdown(main_root,
- sub { $_[0]->concise($_[1]) }, 0); }
- }
- }
-}
-
-my %labels;
-my $lastnext;
-
-my %opclass = ('OP' => "0", 'UNOP' => "1", 'BINOP' => "2", 'LOGOP' => "|",
- 'LISTOP' => "@", 'PMOP' => "/", 'SVOP' => "\$", 'GVOP' => "*",
- 'PVOP' => '"', 'LOOP' => "{", 'COP' => ";");
-
-my @linenoise =
- qw'# () sc ( @? 1 $* gv *{ m$ m@ m% m? p/ *$ $ $# & a& pt \\ s\\ rf bl
- ` *? <> ?? ?/ r/ c/ // qr s/ /c y/ = @= C sC Cp sp df un BM po +1 +I
- -1 -I 1+ I+ 1- I- ** * i* / i/ %$ i% x + i+ - i- . " << >> < i<
- > i> <= i, >= i. == i= != i! <? i? s< s> s, s. s= s! s? b& b^ b| -0 -i
- ! ~ a2 si cs rd sr e^ lg sq in %x %o ab le ss ve ix ri sf FL od ch cy
- uf lf uc lc qm @ [f [ @[ eh vl ky dl ex % ${ @{ uk pk st jn ) )[ a@
- a% sl +] -] [- [+ so rv GS GW MS MW .. f. .f && || ^^ ?: &= |= -> s{ s}
- v} ca wa di rs ;; ; ;d }{ { } {} f{ it {l l} rt }l }n }r dm }g }e ^o
- ^c ^| ^# um bm t~ u~ ~d DB db ^s se ^g ^r {w }w pf pr ^O ^K ^R ^W ^d ^v
- ^e ^t ^k t. fc ic fl .s .p .b .c .l .a .h g1 s1 g2 s2 ?. l? -R -W -X -r
- -w -x -e -o -O -z -s -M -A -C -S -c -b -f -d -p -l -u -g -k -t -T -B cd
- co cr u. cm ut r. l@ s@ r@ mD uD oD rD tD sD wD cD f$ w$ p$ sh e$ k$ g3
- g4 s4 g5 s5 T@ C@ L@ G@ A@ S@ Hg Hc Hr Hw Mg Mc Ms Mr Sg Sc So rq do {e
- e} {t t} g6 G6 6e g7 G7 7e g8 G8 8e g9 G9 9e 6s 7s 8s 9s 6E 7E 8E 9E Pn
- Pu GP SP EP Gn Gg GG SG EG g0 c$ lk t$ ;s n>';
-
-my $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-sub op_flags {
- my($x) = @_;
- my(@v);
- push @v, "v" if ($x & 3) == 1;
- push @v, "s" if ($x & 3) == 2;
- push @v, "l" if ($x & 3) == 3;
- push @v, "K" if $x & 4;
- push @v, "P" if $x & 8;
- push @v, "R" if $x & 16;
- push @v, "M" if $x & 32;
- push @v, "S" if $x & 64;
- push @v, "*" if $x & 128;
- return join("", @v);
-}
-
-sub base_n {
- my $x = shift;
- return "-" . base_n(-$x) if $x < 0;
- my $str = "";
- do { $str .= substr($chars, $x % $base, 1) } while $x = int($x / $base);
- $str = reverse $str if $big_endian;
- return $str;
-}
-
-sub seq { return $_[0]->seq ? base_n($_[0]->seq - $seq_base) : "-" }
-
-sub walk_topdown {
- my($op, $sub, $level) = @_;
- $sub->($op, $level);
- if ($op->flags & OPf_KIDS) {
- for (my $kid = $op->first; $$kid; $kid = $kid->sibling) {
- walk_topdown($kid, $sub, $level + 1);
- }
- }
- if (class($op) eq "PMOP" and $ {$op->pmreplroot}
- and $op->pmreplroot->isa("B::OP")) {
- walk_topdown($op->pmreplroot, $sub, $level + 1);
- }
-}
-
-sub walklines {
- my($ar, $level) = @_;
- for my $l (@$ar) {
- if (ref($l) eq "ARRAY") {
- walklines($l, $level + 1);
- } else {
- $l->concise($level);
- }
- }
-}
-
-sub walk_exec {
- my($top, $level) = @_;
- my %opsseen;
- my @lines;
- my @todo = ([$top, \@lines]);
- while (@todo and my($op, $targ) = @{shift @todo}) {
- for (; $$op; $op = $op->next) {
- last if $opsseen{$$op}++;
- push @$targ, $op;
- my $name = $op->name;
- if ($name
- =~ /^(or|and|(map|grep)while|entertry|range|cond_expr)$/) {
- my $ar = [];
- push @$targ, $ar;
- push @todo, [$op->other, $ar];
- } elsif ($name eq "subst" and $ {$op->pmreplstart}) {
- my $ar = [];
- push @$targ, $ar;
- push @todo, [$op->pmreplstart, $ar];
- } elsif ($name =~ /^enter(loop|iter)$/) {
- $labels{$op->nextop->seq} = "NEXT";
- $labels{$op->lastop->seq} = "LAST";
- $labels{$op->redoop->seq} = "REDO";
- }
- }
- }
- walklines(\@lines, 0);
-}
-
-sub fmt_line {
- my($hr, $fmt, $level) = @_;
- my $text = $fmt;
- $text =~ s/\(\?\(([^\#]*?)\#(\w+)([^\#]*?)\)\?\)/
- $hr->{$2} ? $1.$hr->{$2}.$3 : ""/eg;
- $text =~ s/\(x\((.*?);(.*?)\)x\)/$order eq "exec" ? $1 : $2/egs;
- $text =~ s/\(\*\(([^;]*?)\)\*\)/$1 x $level/egs;
- $text =~ s/\(\*\((.*?);(.*?)\)\*\)/$1 x ($level - 1) . $2 x ($level>0)/egs;
- $text =~ s/#([a-zA-Z]+)(\d+)/sprintf("%-$2s", $hr->{$1})/eg;
- $text =~ s/#([a-zA-Z]+)/$hr->{$1}/eg;
- $text =~ s/[ \t]*~+[ \t]*/ /g;
- return $text;
-}
-
-my %priv;
-$priv{$_}{128} = "LVINTRO"
- for ("pos", "substr", "vec", "threadsv", "gvsv", "rv2sv", "rv2hv", "rv2gv",
- "rv2av", "rv2arylen", "aelem", "helem", "aslice", "hslice", "padsv",
- "padav", "padhv");
-$priv{$_}{64} = "REFC" for ("leave", "leavesub", "leavesublv", "leavewrite");
-$priv{"aassign"}{64} = "COMMON";
-$priv{"aassign"}{32} = "PHASH";
-$priv{"sassign"}{64} = "BKWARD";
-$priv{$_}{64} = "RTIME" for ("match", "subst", "substcont");
-@{$priv{"trans"}}{1,2,4,8,16,64} = ("<UTF", ">UTF", "IDENT", "SQUASH", "DEL",
- "COMPL", "GROWS");
-$priv{"repeat"}{64} = "DOLIST";
-$priv{"leaveloop"}{64} = "CONT";
-@{$priv{$_}}{32,64,96} = ("DREFAV", "DREFHV", "DREFSV")
- for ("entersub", map("rv2${_}v", "a", "s", "h", "g"), "aelem", "helem");
-$priv{"entersub"}{16} = "DBG";
-$priv{"entersub"}{32} = "TARG";
-@{$priv{$_}}{4,8,128} = ("INARGS","AMPER","NO()") for ("entersub", "rv2cv");
-$priv{"gv"}{32} = "EARLYCV";
-$priv{"aelem"}{16} = $priv{"helem"}{16} = "LVDEFER";
-$priv{$_}{16} = "OURINTR" for ("gvsv", "rv2sv", "rv2av", "rv2hv", "r2gv");
-$priv{$_}{16} = "TARGMY"
- for (map(($_,"s$_"),"chop", "chomp"),
- map(($_,"i_$_"), "postinc", "postdec", "multiply", "divide", "modulo",
- "add", "subtract", "negate"), "pow", "concat", "stringify",
- "left_shift", "right_shift", "bit_and", "bit_xor", "bit_or",
- "complement", "atan2", "sin", "cos", "rand", "exp", "log", "sqrt",
- "int", "hex", "oct", "abs", "length", "index", "rindex", "sprintf",
- "ord", "chr", "crypt", "quotemeta", "join", "push", "unshift", "flock",
- "chdir", "chown", "chroot", "unlink", "chmod", "utime", "rename",
- "link", "symlink", "mkdir", "rmdir", "wait", "waitpid", "system",
- "exec", "kill", "getppid", "getpgrp", "setpgrp", "getpriority",
- "setpriority", "time", "sleep");
-@{$priv{"const"}}{8,16,32,64,128} = ("STRICT","ENTERED", "$[", "BARE", "WARN");
-$priv{"flip"}{64} = $priv{"flop"}{64} = "LINENUM";
-$priv{"list"}{64} = "GUESSED";
-$priv{"delete"}{64} = "SLICE";
-$priv{"exists"}{64} = "SUB";
-$priv{$_}{64} = "LOCALE"
- for ("sort", "prtf", "sprintf", "slt", "sle", "seq", "sne", "sgt", "sge",
- "scmp", "lc", "uc", "lcfirst", "ucfirst");
-@{$priv{"sort"}}{1,2,4} = ("NUM", "INT", "REV");
-$priv{"threadsv"}{64} = "SVREFd";
-$priv{$_}{16} = "INBIN" for ("open", "backtick");
-$priv{$_}{32} = "INCR" for ("open", "backtick");
-$priv{$_}{64} = "OUTBIN" for ("open", "backtick");
-$priv{$_}{128} = "OUTCR" for ("open", "backtick");
-$priv{"exit"}{128} = "VMS";
-
-sub private_flags {
- my($name, $x) = @_;
- my @s;
- for my $flag (128, 96, 64, 32, 16, 8, 4, 2, 1) {
- if ($priv{$name}{$flag} and $x & $flag and $x >= $flag) {
- $x -= $flag;
- push @s, $priv{$name}{$flag};
- }
- }
- push @s, $x if $x;
- return join(",", @s);
-}
-
-sub concise_op {
- my ($op, $level, $format) = @_;
- my %h;
- $h{exname} = $h{name} = $op->name;
- $h{NAME} = uc $h{name};
- $h{class} = class($op);
- $h{extarg} = $h{targ} = $op->targ;
- $h{extarg} = "" unless $h{extarg};
- if ($h{name} eq "null" and $h{targ}) {
- $h{exname} = "ex-" . substr(ppname($h{targ}), 3);
- $h{extarg} = "";
- } elsif ($h{targ}) {
- my $padname = (($curcv->PADLIST->ARRAY)[0]->ARRAY)[$h{targ}];
- if (defined $padname and class($padname) ne "SPECIAL") {
- $h{targarg} = $padname->PVX;
- my $intro = $padname->NVX - $cop_seq_base;
- my $finish = int($padname->IVX) - $cop_seq_base;
- $finish = "end" if $finish == 999999999 - $cop_seq_base;
- $h{targarglife} = "$h{targarg}:$intro,$finish";
- } else {
- $h{targarglife} = $h{targarg} = "t" . $h{targ};
- }
- }
- $h{arg} = "";
- $h{svclass} = $h{svaddr} = $h{svval} = "";
- if ($h{class} eq "PMOP") {
- my $precomp = $op->precomp;
- $precomp = defined($precomp) ? "/$precomp/" : "";
- my $pmreplroot = $op->pmreplroot;
- my ($pmreplroot, $pmreplstart);
- if ($ {$pmreplroot = $op->pmreplroot} && $pmreplroot->isa("B::GV")) {
- # with C<@stash_array = split(/pat/, str);>,
- # *stash_array is stored in pmreplroot.
- $h{arg} = "($precomp => \@" . $pmreplroot->NAME . ")";
- } elsif ($ {$op->pmreplstart}) {
- undef $lastnext;
- $pmreplstart = "replstart->" . seq($op->pmreplstart);
- $h{arg} = "(" . join(" ", $precomp, $pmreplstart) . ")";
- } else {
- $h{arg} = "($precomp)";
- }
- } elsif ($h{class} eq "PVOP" and $h{name} ne "trans") {
- $h{arg} = '("' . $op->pv . '")';
- $h{svval} = '"' . $op->pv . '"';
- } elsif ($h{class} eq "COP") {
- my $label = $op->label;
- $h{coplabel} = $label;
- $label = $label ? "$label: " : "";
- my $loc = $op->file;
- $loc =~ s[.*/][];
- $loc .= ":" . $op->line;
- my($stash, $cseq) = ($op->stash->NAME, $op->cop_seq - $cop_seq_base);
- my $arybase = $op->arybase;
- $arybase = $arybase ? ' $[=' . $arybase : "";
- $h{arg} = "($label$stash $cseq $loc$arybase)";
- } elsif ($h{class} eq "LOOP") {
- $h{arg} = "(next->" . seq($op->nextop) . " last->" . seq($op->lastop)
- . " redo->" . seq($op->redoop) . ")";
- } elsif ($h{class} eq "LOGOP") {
- undef $lastnext;
- $h{arg} = "(other->" . seq($op->other) . ")";
- } elsif ($h{class} eq "SVOP") {
- my $sv = $op->sv;
- $h{svclass} = class($sv);
- $h{svaddr} = sprintf("%#x", $$sv);
- if ($h{svclass} eq "GV") {
- my $gv = $sv;
- my $stash = $gv->STASH->NAME;
- if ($stash eq "main") {
- $stash = "";
- } else {
- $stash = $stash . "::";
- }
- $h{arg} = "(*$stash" . $gv->SAFENAME . ")";
- $h{svval} = "*$stash" . $gv->SAFENAME;
- } else {
- while (class($sv) eq "RV") {
- $h{svval} .= "\\";
- $sv = $sv->RV;
- }
- if (class($sv) eq "SPECIAL") {
- $h{svval} = ["Null", "sv_undef", "sv_yes", "sv_no"]->[$$sv];
- } elsif ($sv->FLAGS & SVf_NOK) {
- $h{svval} = $sv->NV;
- } elsif ($sv->FLAGS & SVf_IOK) {
- $h{svval} = $sv->IV;
- } elsif ($sv->FLAGS & SVf_POK) {
- $h{svval} = cstring($sv->PV);
- }
- $h{arg} = "($h{svclass} $h{svval})";
- }
- }
- $h{seq} = $h{hyphseq} = seq($op);
- $h{seq} = "" if $h{seq} eq "-";
- $h{seqnum} = $op->seq;
- $h{next} = $op->next;
- $h{next} = (class($h{next}) eq "NULL") ? "(end)" : seq($h{next});
- $h{nextaddr} = sprintf("%#x", $ {$op->next});
- $h{sibaddr} = sprintf("%#x", $ {$op->sibling});
- $h{firstaddr} = sprintf("%#x", $ {$op->first}) if $op->can("first");
- $h{lastaddr} = sprintf("%#x", $ {$op->last}) if $op->can("last");
-
- $h{classsym} = $opclass{$h{class}};
- $h{flagval} = $op->flags;
- $h{flags} = op_flags($op->flags);
- $h{privval} = $op->private;
- $h{private} = private_flags($h{name}, $op->private);
- $h{addr} = sprintf("%#x", $$op);
- $h{label} = $labels{$op->seq};
- $h{typenum} = $op->type;
- $h{noise} = $linenoise[$op->type];
- return fmt_line(\%h, $format, $level);
-}
-
-sub B::OP::concise {
- my($op, $level) = @_;
- if ($order eq "exec" and $lastnext and $$lastnext != $$op) {
- my $h = {"seq" => seq($lastnext), "class" => class($lastnext),
- "addr" => sprintf("%#x", $$lastnext)};
- print fmt_line($h, $gotofmt, $level+1);
- }
- $lastnext = $op->next;
- print concise_op($op, $level, $format);
-}
-
-sub tree {
- my $op = shift;
- my $level = shift;
- my $style = $tree_decorations[$tree_style];
- my($space, $single, $kids, $kid, $nokid, $last, $lead, $size) = @$style;
- my $name = concise_op($op, $level, $treefmt);
- if (not $op->flags & OPf_KIDS) {
- return $name . "\n";
- }
- my @lines;
- for (my $kid = $op->first; $$kid; $kid = $kid->sibling) {
- push @lines, tree($kid, $level+1);
- }
- my $i;
- for ($i = $#lines; substr($lines[$i], 0, 1) eq " "; $i--) {
- $lines[$i] = $space . $lines[$i];
- }
- if ($i > 0) {
- $lines[$i] = $last . $lines[$i];
- while ($i-- > 1) {
- if (substr($lines[$i], 0, 1) eq " ") {
- $lines[$i] = $nokid . $lines[$i];
- } else {
- $lines[$i] = $kid . $lines[$i];
- }
- }
- $lines[$i] = $kids . $lines[$i];
- } else {
- $lines[0] = $single . $lines[0];
- }
- return("$name$lead" . shift @lines,
- map(" " x (length($name)+$size) . $_, @lines));
-}
-
-# This is a bit of a hack; the 2 and 15 were determined empirically.
-# These need to stay the last things in the module.
-$cop_seq_base = svref_2object(eval 'sub{0;}')->START->cop_seq + 2;
-$seq_base = svref_2object(eval 'sub{}')->START->seq + 15;
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Concise - Walk Perl syntax tree, printing concise info about ops
-
-=head1 SYNOPSIS
-
- perl -MO=Concise[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-This compiler backend prints the internal OPs of a Perl program's syntax
-tree in one of several space-efficient text formats suitable for debugging
-the inner workings of perl or other compiler backends. It can print OPs in
-the order they appear in the OP tree, in the order they will execute, or
-in a text approximation to their tree structure, and the format of the
-information displyed is customizable. Its function is similar to that of
-perl's B<-Dx> debugging flag or the B<B::Terse> module, but it is more
-sophisticated and flexible.
-
-=head1 OPTIONS
-
-Arguments that don't start with a hyphen are taken to be the names of
-subroutines to print the OPs of; if no such functions are specified, the
-main body of the program (outside any subroutines, and not including use'd
-or require'd files) is printed.
-
-=over 4
-
-=item B<-basic>
-
-Print OPs in the order they appear in the OP tree (a preorder
-traversal, starting at the root). The indentation of each OP shows its
-level in the tree. This mode is the default, so the flag is included
-simply for completeness.
-
-=item B<-exec>
-
-Print OPs in the order they would normally execute (for the majority
-of constructs this is a postorder traversal of the tree, ending at the
-root). In most cases the OP that usually follows a given OP will
-appear directly below it; alternate paths are shown by indentation. In
-cases like loops when control jumps out of a linear path, a 'goto'
-line is generated.
-
-=item B<-tree>
-
-Print OPs in a text approximation of a tree, with the root of the tree
-at the left and 'left-to-right' order of children transformed into
-'top-to-bottom'. Because this mode grows both to the right and down,
-it isn't suitable for large programs (unless you have a very wide
-terminal).
-
-=item B<-compact>
-
-Use a tree format in which the minimum amount of space is used for the
-lines connecting nodes (one character in most cases). This squeezes out
-a few precious columns of screen real estate.
-
-=item B<-loose>
-
-Use a tree format that uses longer edges to separate OP nodes. This format
-tends to look better than the compact one, especially in ASCII, and is
-the default.
-
-=item B<-vt>
-
-Use tree connecting characters drawn from the VT100 line-drawing set.
-This looks better if your terminal supports it.
-
-=item B<-ascii>
-
-Draw the tree with standard ASCII characters like C<+> and C<|>. These don't
-look as clean as the VT100 characters, but they'll work with almost any
-terminal (or the horizontal scrolling mode of less(1)) and are suitable
-for text documentation or email. This is the default.
-
-=item B<-main>
-
-Include the main program in the output, even if subroutines were also
-specified.
-
-=item B<-base>I<n>
-
-Print OP sequence numbers in base I<n>. If I<n> is greater than 10, the
-digit for 11 will be 'a', and so on. If I<n> is greater than 36, the digit
-for 37 will be 'A', and so on until 62. Values greater than 62 are not
-currently supported. The default is 36.
-
-=item B<-bigendian>
-
-Print sequence numbers with the most significant digit first. This is the
-usual convention for Arabic numerals, and the default.
-
-=item B<-littleendian>
-
-Print seqence numbers with the least significant digit first.
-
-=item B<-concise>
-
-Use the author's favorite set of formatting conventions. This is the
-default, of course.
-
-=item B<-terse>
-
-Use formatting conventions that emulate the ouput of B<B::Terse>. The
-basic mode is almost indistinguishable from the real B<B::Terse>, and the
-exec mode looks very similar, but is in a more logical order and lacks
-curly brackets. B<B::Terse> doesn't have a tree mode, so the tree mode
-is only vaguely reminiscient of B<B::Terse>.
-
-=item B<-linenoise>
-
-Use formatting conventions in which the name of each OP, rather than being
-written out in full, is represented by a one- or two-character abbreviation.
-This is mainly a joke.
-
-=item B<-debug>
-
-Use formatting conventions reminiscient of B<B::Debug>; these aren't
-very concise at all.
-
-=item B<-env>
-
-Use formatting conventions read from the environment variables
-C<B_CONCISE_FORMAT>, C<B_CONCISE_GOTO_FORMAT>, and C<B_CONCISE_TREE_FORMAT>.
-
-=back
-
-=head1 FORMATTING SPECIFICATIONS
-
-For each general style ('concise', 'terse', 'linenoise', etc.) there are
-three specifications: one of how OPs should appear in the basic or exec
-modes, one of how 'goto' lines should appear (these occur in the exec
-mode only), and one of how nodes should appear in tree mode. Each has the
-same format, described below. Any text that doesn't match a special
-pattern is copied verbatim.
-
-=over 4
-
-=item B<(x(>I<exec_text>B<;>I<basic_text>B<)x)>
-
-Generates I<exec_text> in exec mode, or I<basic_text> in basic mode.
-
-=item B<(*(>I<text>B<)*)>
-
-Generates one copy of I<text> for each indentation level.
-
-=item B<(*(>I<text1>B<;>I<text2>B<)*)>
-
-Generates one fewer copies of I<text1> than the indentation level, followed
-by one copy of I<text2> if the indentation level is more than 0.
-
-=item B<(?(>I<text1>B<#>I<var>I<Text2>B<)?)>
-
-If the value of I<var> is true (not empty or zero), generates the
-value of I<var> surrounded by I<text1> and I<Text2>, otherwise
-nothing.
-
-=item B<#>I<var>
-
-Generates the value of the variable I<var>.
-
-=item B<#>I<var>I<N>
-
-Generates the value of I<var>, left jutified to fill I<N> spaces.
-
-=item B<~>
-
-Any number of tildes and surrounding whitespace will be collapsed to
-a single space.
-
-=back
-
-The following variables are recognized:
-
-=over 4
-
-=item B<#addr>
-
-The address of the OP, in hexidecimal.
-
-=item B<#arg>
-
-The OP-specific information of the OP (such as the SV for an SVOP, the
-non-local exit pointers for a LOOP, etc.) enclosed in paretheses.
-
-=item B<#class>
-
-The B-determined class of the OP, in all caps.
-
-=item B<#classym>
-
-A single symbol abbreviating the class of the OP.
-
-=item B<#coplabel>
-
-The label of the statement or block the OP is the start of, if any.
-
-=item B<#exname>
-
-The name of the OP, or 'ex-foo' if the OP is a null that used to be a foo.
-
-=item B<#extarg>
-
-The target of the OP, or nothing for a nulled OP.
-
-=item B<#firstaddr>
-
-The address of the OP's first child, in hexidecimal.
-
-=item B<#flags>
-
-The OP's flags, abbreviated as a series of symbols.
-
-=item B<#flagval>
-
-The numeric value of the OP's flags.
-
-=item B<#hyphenseq>
-
-The sequence number of the OP, or a hyphen if it doesn't have one.
-
-=item B<#label>
-
-'NEXT', 'LAST', or 'REDO' if the OP is a target of one of those in exec
-mode, or empty otherwise.
-
-=item B<#lastaddr>
-
-The address of the OP's last child, in hexidecimal.
-
-=item B<#name>
-
-The OP's name.
-
-=item B<#NAME>
-
-The OP's name, in all caps.
-
-=item B<#next>
-
-The sequence number of the OP's next OP.
-
-=item B<#nextaddr>
-
-The address of the OP's next OP, in hexidecimal.
-
-=item B<#noise>
-
-The two-character abbreviation for the OP's name.
-
-=item B<#private>
-
-The OP's private flags, rendered with abbreviated names if possible.
-
-=item B<#privval>
-
-The numeric value of the OP's private flags.
-
-=item B<#seq>
-
-The sequence number of the OP.
-
-=item B<#seqnum>
-
-The real sequence number of the OP, as a regular number and not adjusted
-to be relative to the start of the real program. (This will generally be
-a fairly large number because all of B<B::Concise> is compiled before
-your program is).
-
-=item B<#sibaddr>
-
-The address of the OP's next youngest sibling, in hexidecimal.
-
-=item B<#svaddr>
-
-The address of the OP's SV, if it has an SV, in hexidecimal.
-
-=item B<#svclass>
-
-The class of the OP's SV, if it has one, in all caps (e.g., 'IV').
-
-=item B<#svval>
-
-The value of the OP's SV, if it has one, in a short human-readable format.
-
-=item B<#targ>
-
-The numeric value of the OP's targ.
-
-=item B<#targarg>
-
-The name of the variable the OP's targ refers to, if any, otherwise the
-letter t followed by the OP's targ in decimal.
-
-=item B<#targarglife>
-
-Same as B<#targarg>, but followed by the COP sequence numbers that delimit
-the variable's lifetime (or 'end' for a variable in an open scope) for a
-variable.
-
-=item B<#typenum>
-
-The numeric value of the OP's type, in decimal.
-
-=back
-
-=head1 ABBREVIATIONS
-
-=head2 OP flags abbreviations
-
- v OPf_WANT_VOID Want nothing (void context)
- s OPf_WANT_SCALAR Want single value (scalar context)
- l OPf_WANT_LIST Want list of any length (list context)
- K OPf_KIDS There is a firstborn child.
- P OPf_PARENS This operator was parenthesized.
- (Or block needs explicit scope entry.)
- R OPf_REF Certified reference.
- (Return container, not containee).
- M OPf_MOD Will modify (lvalue).
- S OPf_STACKED Some arg is arriving on the stack.
- * OPf_SPECIAL Do something weird for this op (see op.h)
-
-=head2 OP class abbreviations
-
- 0 OP (aka BASEOP) An OP with no children
- 1 UNOP An OP with one child
- 2 BINOP An OP with two children
- | LOGOP A control branch OP
- @ LISTOP An OP that could have lots of children
- / PMOP An OP with a regular expression
- $ SVOP An OP with an SV
- " PVOP An OP with a string
- { LOOP An OP that holds pointers for a loop
- ; COP An OP that marks the start of a statement
-
-=head1 AUTHOR
-
-Stephen McCamant, C<smcc@CSUA.Berkeley.EDU>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Debug.pm b/contrib/perl5/ext/B/B/Debug.pm
deleted file mode 100644
index 049195b..0000000
--- a/contrib/perl5/ext/B/B/Debug.pm
+++ /dev/null
@@ -1,283 +0,0 @@
-package B::Debug;
-use strict;
-use B qw(peekop class walkoptree walkoptree_exec
- main_start main_root cstring sv_undef);
-use B::Asmdata qw(@specialsv_name);
-
-my %done_gv;
-
-sub B::OP::debug {
- my ($op) = @_;
- printf <<'EOT', class($op), $$op, ${$op->next}, ${$op->sibling}, $op->ppaddr, $op->targ, $op->type, $op->seq, $op->flags, $op->private;
-%s (0x%lx)
- op_next 0x%x
- op_sibling 0x%x
- op_ppaddr %s
- op_targ %d
- op_type %d
- op_seq %d
- op_flags %d
- op_private %d
-EOT
-}
-
-sub B::UNOP::debug {
- my ($op) = @_;
- $op->B::OP::debug();
- printf "\top_first\t0x%x\n", ${$op->first};
-}
-
-sub B::BINOP::debug {
- my ($op) = @_;
- $op->B::UNOP::debug();
- printf "\top_last\t\t0x%x\n", ${$op->last};
-}
-
-sub B::LOOP::debug {
- my ($op) = @_;
- $op->B::BINOP::debug();
- printf <<'EOT', ${$op->redoop}, ${$op->nextop}, ${$op->lastop};
- op_redoop 0x%x
- op_nextop 0x%x
- op_lastop 0x%x
-EOT
-}
-
-sub B::LOGOP::debug {
- my ($op) = @_;
- $op->B::UNOP::debug();
- printf "\top_other\t0x%x\n", ${$op->other};
-}
-
-sub B::LISTOP::debug {
- my ($op) = @_;
- $op->B::BINOP::debug();
- printf "\top_children\t%d\n", $op->children;
-}
-
-sub B::PMOP::debug {
- my ($op) = @_;
- $op->B::LISTOP::debug();
- printf "\top_pmreplroot\t0x%x\n", ${$op->pmreplroot};
- printf "\top_pmreplstart\t0x%x\n", ${$op->pmreplstart};
- printf "\top_pmnext\t0x%x\n", ${$op->pmnext};
- printf "\top_pmregexp->precomp\t%s\n", cstring($op->precomp);
- printf "\top_pmflags\t0x%x\n", $op->pmflags;
- $op->pmreplroot->debug;
-}
-
-sub B::COP::debug {
- my ($op) = @_;
- $op->B::OP::debug();
- printf <<'EOT', $op->label, $op->stashpv, $op->file, $op->seq, $op->arybase, $op->line, ${$op->warnings};
- cop_label %s
- cop_stashpv %s
- cop_file %s
- cop_seq %d
- cop_arybase %d
- cop_line %d
- cop_warnings 0x%x
-EOT
-}
-
-sub B::SVOP::debug {
- my ($op) = @_;
- $op->B::OP::debug();
- printf "\top_sv\t\t0x%x\n", ${$op->sv};
- $op->sv->debug;
-}
-
-sub B::PVOP::debug {
- my ($op) = @_;
- $op->B::OP::debug();
- printf "\top_pv\t\t0x%x\n", $op->pv;
-}
-
-sub B::PADOP::debug {
- my ($op) = @_;
- $op->B::OP::debug();
- printf "\top_padix\t\t%ld\n", $op->padix;
-}
-
-sub B::CVOP::debug {
- my ($op) = @_;
- $op->B::OP::debug();
- printf "\top_cv\t\t0x%x\n", ${$op->cv};
-}
-
-sub B::NULL::debug {
- my ($sv) = @_;
- if ($$sv == ${sv_undef()}) {
- print "&sv_undef\n";
- } else {
- printf "NULL (0x%x)\n", $$sv;
- }
-}
-
-sub B::SV::debug {
- my ($sv) = @_;
- if (!$$sv) {
- print class($sv), " = NULL\n";
- return;
- }
- printf <<'EOT', class($sv), $$sv, $sv->REFCNT, $sv->FLAGS;
-%s (0x%x)
- REFCNT %d
- FLAGS 0x%x
-EOT
-}
-
-sub B::PV::debug {
- my ($sv) = @_;
- $sv->B::SV::debug();
- my $pv = $sv->PV();
- printf <<'EOT', cstring($pv), length($pv);
- xpv_pv %s
- xpv_cur %d
-EOT
-}
-
-sub B::IV::debug {
- my ($sv) = @_;
- $sv->B::SV::debug();
- printf "\txiv_iv\t\t%d\n", $sv->IV;
-}
-
-sub B::NV::debug {
- my ($sv) = @_;
- $sv->B::IV::debug();
- printf "\txnv_nv\t\t%s\n", $sv->NV;
-}
-
-sub B::PVIV::debug {
- my ($sv) = @_;
- $sv->B::PV::debug();
- printf "\txiv_iv\t\t%d\n", $sv->IV;
-}
-
-sub B::PVNV::debug {
- my ($sv) = @_;
- $sv->B::PVIV::debug();
- printf "\txnv_nv\t\t%s\n", $sv->NV;
-}
-
-sub B::PVLV::debug {
- my ($sv) = @_;
- $sv->B::PVNV::debug();
- printf "\txlv_targoff\t%d\n", $sv->TARGOFF;
- printf "\txlv_targlen\t%u\n", $sv->TARGLEN;
- printf "\txlv_type\t%s\n", cstring(chr($sv->TYPE));
-}
-
-sub B::BM::debug {
- my ($sv) = @_;
- $sv->B::PVNV::debug();
- printf "\txbm_useful\t%d\n", $sv->USEFUL;
- printf "\txbm_previous\t%u\n", $sv->PREVIOUS;
- printf "\txbm_rare\t%s\n", cstring(chr($sv->RARE));
-}
-
-sub B::CV::debug {
- my ($sv) = @_;
- $sv->B::PVNV::debug();
- my ($stash) = $sv->STASH;
- my ($start) = $sv->START;
- my ($root) = $sv->ROOT;
- my ($padlist) = $sv->PADLIST;
- my ($file) = $sv->FILE;
- my ($gv) = $sv->GV;
- printf <<'EOT', $$stash, $$start, $$root, $$gv, $file, $sv->DEPTH, $padlist, ${$sv->OUTSIDE};
- STASH 0x%x
- START 0x%x
- ROOT 0x%x
- GV 0x%x
- FILE %s
- DEPTH %d
- PADLIST 0x%x
- OUTSIDE 0x%x
-EOT
- $start->debug if $start;
- $root->debug if $root;
- $gv->debug if $gv;
- $padlist->debug if $padlist;
-}
-
-sub B::AV::debug {
- my ($av) = @_;
- $av->B::SV::debug;
- my(@array) = $av->ARRAY;
- print "\tARRAY\t\t(", join(", ", map("0x" . $$_, @array)), ")\n";
- printf <<'EOT', scalar(@array), $av->MAX, $av->OFF, $av->AvFLAGS;
- FILL %d
- MAX %d
- OFF %d
- AvFLAGS %d
-EOT
-}
-
-sub B::GV::debug {
- my ($gv) = @_;
- if ($done_gv{$$gv}++) {
- printf "GV %s::%s\n", $gv->STASH->NAME, $gv->SAFENAME;
- return;
- }
- my ($sv) = $gv->SV;
- my ($av) = $gv->AV;
- my ($cv) = $gv->CV;
- $gv->B::SV::debug;
- printf <<'EOT', $gv->SAFENAME, $gv->STASH->NAME, $gv->STASH, $$sv, $gv->GvREFCNT, $gv->FORM, $$av, ${$gv->HV}, ${$gv->EGV}, $$cv, $gv->CVGEN, $gv->LINE, $gv->FILE, $gv->GvFLAGS;
- NAME %s
- STASH %s (0x%x)
- SV 0x%x
- GvREFCNT %d
- FORM 0x%x
- AV 0x%x
- HV 0x%x
- EGV 0x%x
- CV 0x%x
- CVGEN %d
- LINE %d
- FILE %s
- GvFLAGS 0x%x
-EOT
- $sv->debug if $sv;
- $av->debug if $av;
- $cv->debug if $cv;
-}
-
-sub B::SPECIAL::debug {
- my $sv = shift;
- print $specialsv_name[$$sv], "\n";
-}
-
-sub compile {
- my $order = shift;
- B::clearsym();
- if ($order && $order eq "exec") {
- return sub { walkoptree_exec(main_start, "debug") }
- } else {
- return sub { walkoptree(main_root, "debug") }
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Debug - Walk Perl syntax tree, printing debug info about ops
-
-=head1 SYNOPSIS
-
- perl -MO=Debug[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-See F<ext/B/README>.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Deparse.pm b/contrib/perl5/ext/B/B/Deparse.pm
deleted file mode 100644
index ead02e1..0000000
--- a/contrib/perl5/ext/B/B/Deparse.pm
+++ /dev/null
@@ -1,3128 +0,0 @@
-# B::Deparse.pm
-# Copyright (c) 1998, 1999, 2000 Stephen McCamant. All rights reserved.
-# This module is free software; you can redistribute and/or modify
-# it under the same terms as Perl itself.
-
-# This is based on the module of the same name by Malcolm Beattie,
-# but essentially none of his code remains.
-
-package B::Deparse;
-use Carp 'cluck', 'croak';
-use B qw(class main_root main_start main_cv svref_2object opnumber
- OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST
- OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL
- OPpLVAL_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE
- OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY
- SVf_IOK SVf_NOK SVf_ROK SVf_POK
- CVf_METHOD CVf_LOCKED CVf_LVALUE
- PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE
- PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED);
-$VERSION = 0.60;
-use strict;
-
-# Changes between 0.50 and 0.51:
-# - fixed nulled leave with live enter in sort { }
-# - fixed reference constants (\"str")
-# - handle empty programs gracefully
-# - handle infinte loops (for (;;) {}, while (1) {})
-# - differentiate between `for my $x ...' and `my $x; for $x ...'
-# - various minor cleanups
-# - moved globals into an object
-# - added `-u', like B::C
-# - package declarations using cop_stash
-# - subs, formats and code sorted by cop_seq
-# Changes between 0.51 and 0.52:
-# - added pp_threadsv (special variables under USE_THREADS)
-# - added documentation
-# Changes between 0.52 and 0.53:
-# - many changes adding precedence contexts and associativity
-# - added `-p' and `-s' output style options
-# - various other minor fixes
-# Changes between 0.53 and 0.54:
-# - added support for new `for (1..100)' optimization,
-# thanks to Gisle Aas
-# Changes between 0.54 and 0.55:
-# - added support for new qr// construct
-# - added support for new pp_regcreset OP
-# Changes between 0.55 and 0.56:
-# - tested on base/*.t, cmd/*.t, comp/*.t, io/*.t
-# - fixed $# on non-lexicals broken in last big rewrite
-# - added temporary fix for change in opcode of OP_STRINGIFY
-# - fixed problem in 0.54's for() patch in `for (@ary)'
-# - fixed precedence in conditional of ?:
-# - tweaked list paren elimination in `my($x) = @_'
-# - made continue-block detection trickier wrt. null ops
-# - fixed various prototype problems in pp_entersub
-# - added support for sub prototypes that never get GVs
-# - added unquoting for special filehandle first arg in truncate
-# - print doubled rv2gv (a bug) as `*{*GV}' instead of illegal `**GV'
-# - added semicolons at the ends of blocks
-# - added -l `#line' declaration option -- fixes cmd/subval.t 27,28
-# Changes between 0.56 and 0.561:
-# - fixed multiply-declared my var in pp_truncate (thanks to Sarathy)
-# - used new B.pm symbolic constants (done by Nick Ing-Simmons)
-# Changes between 0.561 and 0.57:
-# - stylistic changes to symbolic constant stuff
-# - handled scope in s///e replacement code
-# - added unquote option for expanding "" into concats, etc.
-# - split method and proto parts of pp_entersub into separate functions
-# - various minor cleanups
-# Changes after 0.57:
-# - added parens in \&foo (patch by Albert Dvornik)
-# Changes between 0.57 and 0.58:
-# - fixed `0' statements that weren't being printed
-# - added methods for use from other programs
-# (based on patches from James Duncan and Hugo van der Sanden)
-# - added -si and -sT to control indenting (also based on a patch from Hugo)
-# - added -sv to print something else instead of '???'
-# - preliminary version of utf8 tr/// handling
-# Changes after 0.58:
-# - uses of $op->ppaddr changed to new $op->name (done by Sarathy)
-# - added support for Hugo's new OP_SETSTATE (like nextstate)
-# Changes between 0.58 and 0.59
-# - added support for Chip's OP_METHOD_NAMED
-# - added support for Ilya's OPpTARGET_MY optimization
-# - elided arrows before `()' subscripts when possible
-# Changes between 0.59 and 0.60
-# - support for method attribues was added
-# - some warnings fixed
-# - separate recognition of constant subs
-# - rewrote continue block handling, now recoginizing for loops
-# - added more control of expanding control structures
-
-# Todo:
-# - finish tr/// changes
-# - add option for even more parens (generalize \&foo change)
-# - {} around variables in strings ("${var}letters")
-# base/lex.t 25-27
-# comp/term.t 11
-# - left/right context
-# - recognize `use utf8', `use integer', etc
-# - treat top-level block specially for incremental output
-# - interpret high bit chars in string as utf8 \x{...} (when?)
-# - copy comments (look at real text with $^P?)
-# - avoid semis in one-statement blocks
-# - associativity of &&=, ||=, ?:
-# - ',' => '=>' (auto-unquote?)
-# - break long lines ("\r" as discretionary break?)
-# - configurable syntax highlighting: ANSI color, HTML, TeX, etc.
-# - more style options: brace style, hex vs. octal, quotes, ...
-# - print big ints as hex/octal instead of decimal (heuristic?)
-# - handle `my $x if 0'?
-# - include values of variables (e.g. set in BEGIN)
-# - coordinate with Data::Dumper (both directions? see previous)
-# - version using op_next instead of op_first/sibling?
-# - avoid string copies (pass arrays, one big join?)
-# - auto-apply `-u'?
-# - -uPackage:: descend recursively?
-# - here-docs?
-# - <DATA>?
-
-# Tests that will always fail:
-# comp/redef.t -- all (redefinition happens at compile time)
-
-# Object fields (were globals):
-#
-# avoid_local:
-# (local($a), local($b)) and local($a, $b) have the same internal
-# representation but the short form looks better. We notice we can
-# use a large-scale local when checking the list, but need to prevent
-# individual locals too. This hash holds the addresses of OPs that
-# have already had their local-ness accounted for. The same thing
-# is done with my().
-#
-# curcv:
-# CV for current sub (or main program) being deparsed
-#
-# curstash:
-# name of the current package for deparsed code
-#
-# subs_todo:
-# array of [cop_seq, GV, is_format?] for subs and formats we still
-# want to deparse
-#
-# protos_todo:
-# as above, but [name, prototype] for subs that never got a GV
-#
-# subs_done, forms_done:
-# keys are addresses of GVs for subs and formats we've already
-# deparsed (or at least put into subs_todo)
-#
-# parens: -p
-# linenums: -l
-# unquote: -q
-# cuddle: ` ' or `\n', depending on -sC
-# indent_size: -si
-# use_tabs: -sT
-# ex_const: -sv
-
-# A little explanation of how precedence contexts and associativity
-# work:
-#
-# deparse() calls each per-op subroutine with an argument $cx (short
-# for context, but not the same as the cx* in the perl core), which is
-# a number describing the op's parents in terms of precedence, whether
-# they're inside an expression or at statement level, etc. (see
-# chart below). When ops with children call deparse on them, they pass
-# along their precedence. Fractional values are used to implement
-# associativity (`($x + $y) + $z' => `$x + $y + $y') and related
-# parentheses hacks. The major disadvantage of this scheme is that
-# it doesn't know about right sides and left sides, so say if you
-# assign a listop to a variable, it can't tell it's allowed to leave
-# the parens off the listop.
-
-# Precedences:
-# 26 [TODO] inside interpolation context ("")
-# 25 left terms and list operators (leftward)
-# 24 left ->
-# 23 nonassoc ++ --
-# 22 right **
-# 21 right ! ~ \ and unary + and -
-# 20 left =~ !~
-# 19 left * / % x
-# 18 left + - .
-# 17 left << >>
-# 16 nonassoc named unary operators
-# 15 nonassoc < > <= >= lt gt le ge
-# 14 nonassoc == != <=> eq ne cmp
-# 13 left &
-# 12 left | ^
-# 11 left &&
-# 10 left ||
-# 9 nonassoc .. ...
-# 8 right ?:
-# 7 right = += -= *= etc.
-# 6 left , =>
-# 5 nonassoc list operators (rightward)
-# 4 right not
-# 3 left and
-# 2 left or xor
-# 1 statement modifiers
-# 0 statement level
-
-# Nonprinting characters with special meaning:
-# \cS - steal parens (see maybe_parens_unop)
-# \n - newline and indent
-# \t - increase indent
-# \b - decrease indent (`outdent')
-# \f - flush left (no indent)
-# \cK - kill following semicolon, if any
-
-sub null {
- my $op = shift;
- return class($op) eq "NULL";
-}
-
-sub todo {
- my $self = shift;
- my($gv, $cv, $is_form) = @_;
- my $seq;
- if (!null($cv->START) and is_state($cv->START)) {
- $seq = $cv->START->cop_seq;
- } else {
- $seq = 0;
- }
- push @{$self->{'subs_todo'}}, [$seq, $gv, $is_form];
-}
-
-sub next_todo {
- my $self = shift;
- my $ent = shift @{$self->{'subs_todo'}};
- my $name = $self->gv_name($ent->[1]);
- if ($ent->[2]) {
- return "format $name =\n"
- . $self->deparse_format($ent->[1]->FORM). "\n";
- } else {
- return "sub $name " . $self->deparse_sub($ent->[1]->CV);
- }
-}
-
-sub walk_tree {
- my($op, $sub) = @_;
- $sub->($op);
- if ($op->flags & OPf_KIDS) {
- my $kid;
- for ($kid = $op->first; not null $kid; $kid = $kid->sibling) {
- walk_tree($kid, $sub);
- }
- }
-}
-
-sub walk_sub {
- my $self = shift;
- my $cv = shift;
- my $op = $cv->ROOT;
- $op = shift if null $op;
- return if !$op or null $op;
- walk_tree($op, sub {
- my $op = shift;
- if ($op->name eq "gv") {
- my $gv = $self->gv_or_padgv($op);
- if ($op->next->name eq "entersub") {
- return if $self->{'subs_done'}{$$gv}++;
- return if class($gv->CV) eq "SPECIAL";
- $self->todo($gv, $gv->CV, 0);
- $self->walk_sub($gv->CV);
- } elsif ($op->next->name eq "enterwrite"
- or ($op->next->name eq "rv2gv"
- and $op->next->next->name eq "enterwrite")) {
- return if $self->{'forms_done'}{$$gv}++;
- return if class($gv->FORM) eq "SPECIAL";
- $self->todo($gv, $gv->FORM, 1);
- $self->walk_sub($gv->FORM);
- }
- }
- });
-}
-
-sub stash_subs {
- my $self = shift;
- my $pack = shift;
- my(%stash, @ret);
- { no strict 'refs'; %stash = svref_2object(\%{$pack . "::"})->ARRAY }
- if ($pack eq "main") {
- $pack = "";
- } else {
- $pack = $pack . "::";
- }
- my($key, $val);
- while (($key, $val) = each %stash) {
- my $class = class($val);
- if ($class eq "PV") {
- # Just a prototype
- push @{$self->{'protos_todo'}}, [$pack . $key, $val->PV];
- } elsif ($class eq "IV") {
- # Just a name
- push @{$self->{'protos_todo'}}, [$pack . $key, undef];
- } elsif ($class eq "GV") {
- if (class($val->CV) ne "SPECIAL") {
- next if $self->{'subs_done'}{$$val}++;
- $self->todo($val, $val->CV, 0);
- $self->walk_sub($val->CV);
- }
- if (class($val->FORM) ne "SPECIAL") {
- next if $self->{'forms_done'}{$$val}++;
- $self->todo($val, $val->FORM, 1);
- $self->walk_sub($val->FORM);
- }
- }
- }
-}
-
-sub print_protos {
- my $self = shift;
- my $ar;
- my @ret;
- foreach $ar (@{$self->{'protos_todo'}}) {
- my $proto = (defined $ar->[1] ? " (". $ar->[1] . ")" : "");
- push @ret, "sub " . $ar->[0] . "$proto;\n";
- }
- delete $self->{'protos_todo'};
- return @ret;
-}
-
-sub style_opts {
- my $self = shift;
- my $opts = shift;
- my $opt;
- while (length($opt = substr($opts, 0, 1))) {
- if ($opt eq "C") {
- $self->{'cuddle'} = " ";
- $opts = substr($opts, 1);
- } elsif ($opt eq "i") {
- $opts =~ s/^i(\d+)//;
- $self->{'indent_size'} = $1;
- } elsif ($opt eq "T") {
- $self->{'use_tabs'} = 1;
- $opts = substr($opts, 1);
- } elsif ($opt eq "v") {
- $opts =~ s/^v([^.]*)(.|$)//;
- $self->{'ex_const'} = $1;
- }
- }
-}
-
-sub new {
- my $class = shift;
- my $self = bless {}, $class;
- $self->{'subs_todo'} = [];
- $self->{'curstash'} = "main";
- $self->{'cuddle'} = "\n";
- $self->{'indent_size'} = 4;
- $self->{'use_tabs'} = 0;
- $self->{'expand'} = 0;
- $self->{'unquote'} = 0;
- $self->{'linenums'} = 0;
- $self->{'parens'} = 0;
- $self->{'ex_const'} = "'???'";
- while (my $arg = shift @_) {
- if (substr($arg, 0, 2) eq "-u") {
- $self->stash_subs(substr($arg, 2));
- } elsif ($arg eq "-p") {
- $self->{'parens'} = 1;
- } elsif ($arg eq "-l") {
- $self->{'linenums'} = 1;
- } elsif ($arg eq "-q") {
- $self->{'unquote'} = 1;
- } elsif (substr($arg, 0, 2) eq "-s") {
- $self->style_opts(substr $arg, 2);
- } elsif ($arg =~ /^-x(\d)$/) {
- $self->{'expand'} = $1;
- }
- }
- return $self;
-}
-
-sub compile {
- my(@args) = @_;
- return sub {
- my $self = B::Deparse->new(@args);
- $self->stash_subs("main");
- $self->{'curcv'} = main_cv;
- $self->walk_sub(main_cv, main_start);
- print $self->print_protos;
- @{$self->{'subs_todo'}} =
- sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}};
- print $self->indent($self->deparse(main_root, 0)), "\n"
- unless null main_root;
- my @text;
- while (scalar(@{$self->{'subs_todo'}})) {
- push @text, $self->next_todo;
- }
- print $self->indent(join("", @text)), "\n" if @text;
- }
-}
-
-sub coderef2text {
- my $self = shift;
- my $sub = shift;
- croak "Usage: ->coderef2text(CODEREF)" unless ref($sub) eq "CODE";
- return $self->indent($self->deparse_sub(svref_2object($sub)));
-}
-
-sub deparse {
- my $self = shift;
- my($op, $cx) = @_;
-# cluck if class($op) eq "NULL";
-# cluck unless $op;
-# return $self->$ {\("pp_" . $op->name)}($op, $cx);
- my $meth = "pp_" . $op->name;
- return $self->$meth($op, $cx);
-}
-
-sub indent {
- my $self = shift;
- my $txt = shift;
- my @lines = split(/\n/, $txt);
- my $leader = "";
- my $level = 0;
- my $line;
- for $line (@lines) {
- my $cmd = substr($line, 0, 1);
- if ($cmd eq "\t" or $cmd eq "\b") {
- $level += ($cmd eq "\t" ? 1 : -1) * $self->{'indent_size'};
- if ($self->{'use_tabs'}) {
- $leader = "\t" x ($level / 8) . " " x ($level % 8);
- } else {
- $leader = " " x $level;
- }
- $line = substr($line, 1);
- }
- if (substr($line, 0, 1) eq "\f") {
- $line = substr($line, 1); # no indent
- } else {
- $line = $leader . $line;
- }
- $line =~ s/\cK;?//g;
- }
- return join("\n", @lines);
-}
-
-sub deparse_sub {
- my $self = shift;
- my $cv = shift;
- my $proto = "";
- if ($cv->FLAGS & SVf_POK) {
- $proto = "(". $cv->PV . ") ";
- }
- if ($cv->CvFLAGS & (CVf_METHOD|CVf_LOCKED|CVf_LVALUE)) {
- $proto .= ": ";
- $proto .= "lvalue " if $cv->CvFLAGS & CVf_LVALUE;
- $proto .= "locked " if $cv->CvFLAGS & CVf_LOCKED;
- $proto .= "method " if $cv->CvFLAGS & CVf_METHOD;
- }
-
- local($self->{'curcv'}) = $cv;
- local($self->{'curstash'}) = $self->{'curstash'};
- if (not null $cv->ROOT) {
- # skip leavesub
- return $proto . "{\n\t" .
- $self->deparse($cv->ROOT->first, 0) . "\n\b}\n";
- } else { # XSUB?
- return $proto . "{}\n";
- }
-}
-
-sub deparse_format {
- my $self = shift;
- my $form = shift;
- my @text;
- local($self->{'curcv'}) = $form;
- local($self->{'curstash'}) = $self->{'curstash'};
- my $op = $form->ROOT;
- my $kid;
- $op = $op->first->first; # skip leavewrite, lineseq
- while (not null $op) {
- $op = $op->sibling; # skip nextstate
- my @exprs;
- $kid = $op->first->sibling; # skip pushmark
- push @text, $self->const_sv($kid)->PV;
- $kid = $kid->sibling;
- for (; not null $kid; $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 0);
- }
- push @text, join(", ", @exprs)."\n" if @exprs;
- $op = $op->sibling;
- }
- return join("", @text) . ".";
-}
-
-sub is_scope {
- my $op = shift;
- return $op->name eq "leave" || $op->name eq "scope"
- || $op->name eq "lineseq"
- || ($op->name eq "null" && class($op) eq "UNOP"
- && (is_scope($op->first) || $op->first->name eq "enter"));
-}
-
-sub is_state {
- my $name = $_[0]->name;
- return $name eq "nextstate" || $name eq "dbstate" || $name eq "setstate";
-}
-
-sub is_miniwhile { # check for one-line loop (`foo() while $y--')
- my $op = shift;
- return (!null($op) and null($op->sibling)
- and $op->name eq "null" and class($op) eq "UNOP"
- and (($op->first->name =~ /^(and|or)$/
- and $op->first->first->sibling->name eq "lineseq")
- or ($op->first->name eq "lineseq"
- and not null $op->first->first->sibling
- and $op->first->first->sibling->name eq "unstack")
- ));
-}
-
-sub is_scalar {
- my $op = shift;
- return ($op->name eq "rv2sv" or
- $op->name eq "padsv" or
- $op->name eq "gv" or # only in array/hash constructs
- $op->flags & OPf_KIDS && !null($op->first)
- && $op->first->name eq "gvsv");
-}
-
-sub maybe_parens {
- my $self = shift;
- my($text, $cx, $prec) = @_;
- if ($prec < $cx # unary ops nest just fine
- or $prec == $cx and $cx != 4 and $cx != 16 and $cx != 21
- or $self->{'parens'})
- {
- $text = "($text)";
- # In a unop, let parent reuse our parens; see maybe_parens_unop
- $text = "\cS" . $text if $cx == 16;
- return $text;
- } else {
- return $text;
- }
-}
-
-# same as above, but get around the `if it looks like a function' rule
-sub maybe_parens_unop {
- my $self = shift;
- my($name, $kid, $cx) = @_;
- if ($cx > 16 or $self->{'parens'}) {
- return "$name(" . $self->deparse($kid, 1) . ")";
- } else {
- $kid = $self->deparse($kid, 16);
- if (substr($kid, 0, 1) eq "\cS") {
- # use kid's parens
- return $name . substr($kid, 1);
- } elsif (substr($kid, 0, 1) eq "(") {
- # avoid looks-like-a-function trap with extra parens
- # (`+' can lead to ambiguities)
- return "$name(" . $kid . ")";
- } else {
- return "$name $kid";
- }
- }
-}
-
-sub maybe_parens_func {
- my $self = shift;
- my($func, $text, $cx, $prec) = @_;
- if ($prec <= $cx or substr($text, 0, 1) eq "(" or $self->{'parens'}) {
- return "$func($text)";
- } else {
- return "$func $text";
- }
-}
-
-sub maybe_local {
- my $self = shift;
- my($op, $cx, $text) = @_;
- if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) {
- if (want_scalar($op)) {
- return "local $text";
- } else {
- return $self->maybe_parens_func("local", $text, $cx, 16);
- }
- } else {
- return $text;
- }
-}
-
-sub maybe_targmy {
- my $self = shift;
- my($op, $cx, $func, @args) = @_;
- if ($op->private & OPpTARGET_MY) {
- my $var = $self->padname($op->targ);
- my $val = $func->($self, $op, 7, @args);
- return $self->maybe_parens("$var = $val", $cx, 7);
- } else {
- return $func->($self, $op, $cx, @args);
- }
-}
-
-sub padname_sv {
- my $self = shift;
- my $targ = shift;
- return (($self->{'curcv'}->PADLIST->ARRAY)[0]->ARRAY)[$targ];
-}
-
-sub maybe_my {
- my $self = shift;
- my($op, $cx, $text) = @_;
- if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) {
- if (want_scalar($op)) {
- return "my $text";
- } else {
- return $self->maybe_parens_func("my", $text, $cx, 16);
- }
- } else {
- return $text;
- }
-}
-
-# The following OPs don't have functions:
-
-# pp_padany -- does not exist after parsing
-# pp_rcatline -- does not exist
-
-sub pp_enter { # see also leave
- cluck "unexpected OP_ENTER";
- return "XXX";
-}
-
-sub pp_pushmark { # see also list
- cluck "unexpected OP_PUSHMARK";
- return "XXX";
-}
-
-sub pp_leavesub { # see also deparse_sub
- cluck "unexpected OP_LEAVESUB";
- return "XXX";
-}
-
-sub pp_leavewrite { # see also deparse_format
- cluck "unexpected OP_LEAVEWRITE";
- return "XXX";
-}
-
-sub pp_method { # see also entersub
- cluck "unexpected OP_METHOD";
- return "XXX";
-}
-
-sub pp_regcmaybe { # see also regcomp
- cluck "unexpected OP_REGCMAYBE";
- return "XXX";
-}
-
-sub pp_regcreset { # see also regcomp
- cluck "unexpected OP_REGCRESET";
- return "XXX";
-}
-
-sub pp_substcont { # see also subst
- cluck "unexpected OP_SUBSTCONT";
- return "XXX";
-}
-
-sub pp_grepstart { # see also grepwhile
- cluck "unexpected OP_GREPSTART";
- return "XXX";
-}
-
-sub pp_mapstart { # see also mapwhile
- cluck "unexpected OP_MAPSTART";
- return "XXX";
-}
-
-sub pp_flip { # see also flop
- cluck "unexpected OP_FLIP";
- return "XXX";
-}
-
-sub pp_iter { # see also leaveloop
- cluck "unexpected OP_ITER";
- return "XXX";
-}
-
-sub pp_enteriter { # see also leaveloop
- cluck "unexpected OP_ENTERITER";
- return "XXX";
-}
-
-sub pp_enterloop { # see also leaveloop
- cluck "unexpected OP_ENTERLOOP";
- return "XXX";
-}
-
-sub pp_leaveeval { # see also entereval
- cluck "unexpected OP_LEAVEEVAL";
- return "XXX";
-}
-
-sub pp_entertry { # see also leavetry
- cluck "unexpected OP_ENTERTRY";
- return "XXX";
-}
-
-sub lineseq {
- my $self = shift;
- my(@ops) = @_;
- my($expr, @exprs);
- for (my $i = 0; $i < @ops; $i++) {
- $expr = "";
- if (is_state $ops[$i]) {
- $expr = $self->deparse($ops[$i], 0);
- $i++;
- last if $i > $#ops;
- }
- if (!is_state $ops[$i] and $ops[$i+1] and !null($ops[$i+1]) and
- $ops[$i+1]->name eq "leaveloop" and $self->{'expand'} < 3)
- {
- push @exprs, $expr . $self->for_loop($ops[$i], 0);
- $i++;
- next;
- }
- $expr .= $self->deparse($ops[$i], 0);
- push @exprs, $expr if length $expr;
- }
- return join(";\n", @exprs);
-}
-
-sub scopeop {
- my($real_block, $self, $op, $cx) = @_;
- my $kid;
- my @kids;
- local($self->{'curstash'}) = $self->{'curstash'} if $real_block;
- if ($real_block) {
- $kid = $op->first->sibling; # skip enter
- if (is_miniwhile($kid)) {
- my $top = $kid->first;
- my $name = $top->name;
- if ($name eq "and") {
- $name = "while";
- } elsif ($name eq "or") {
- $name = "until";
- } else { # no conditional -> while 1 or until 0
- return $self->deparse($top->first, 1) . " while 1";
- }
- my $cond = $top->first;
- my $body = $cond->sibling->first; # skip lineseq
- $cond = $self->deparse($cond, 1);
- $body = $self->deparse($body, 1);
- return "$body $name $cond";
- }
- } else {
- $kid = $op->first;
- }
- for (; !null($kid); $kid = $kid->sibling) {
- push @kids, $kid;
- }
- if ($cx > 0) { # inside an expression, (a do {} while for lineseq)
- return "do { " . $self->lineseq(@kids) . " }";
- } else {
- return $self->lineseq(@kids) . ";";
- }
-}
-
-sub pp_scope { scopeop(0, @_); }
-sub pp_lineseq { scopeop(0, @_); }
-sub pp_leave { scopeop(1, @_); }
-
-# The BEGIN {} is used here because otherwise this code isn't executed
-# when you run B::Deparse on itself.
-my %globalnames;
-BEGIN { map($globalnames{$_}++, "SIG", "STDIN", "STDOUT", "STDERR", "INC",
- "ENV", "ARGV", "ARGVOUT", "_"); }
-
-sub gv_name {
- my $self = shift;
- my $gv = shift;
- my $stash = $gv->STASH->NAME;
- my $name = $gv->SAFENAME;
- if ($stash eq $self->{'curstash'} or $globalnames{$name}
- or $name =~ /^[^A-Za-z_]/)
- {
- $stash = "";
- } else {
- $stash = $stash . "::";
- }
- if ($name =~ /^\^../) {
- $name = "{$name}"; # ${^WARNING_BITS} etc
- }
- return $stash . $name;
-}
-
-# Notice how subs and formats are inserted between statements here
-sub pp_nextstate {
- my $self = shift;
- my($op, $cx) = @_;
- my @text;
- @text = $op->label . ": " if $op->label;
- my $seq = $op->cop_seq;
- while (scalar(@{$self->{'subs_todo'}})
- and $seq > $self->{'subs_todo'}[0][0]) {
- push @text, $self->next_todo;
- }
- my $stash = $op->stashpv;
- if ($stash ne $self->{'curstash'}) {
- push @text, "package $stash;\n";
- $self->{'curstash'} = $stash;
- }
- if ($self->{'linenums'}) {
- push @text, "\f#line " . $op->line .
- ' "' . $op->file, qq'"\n';
- }
- return join("", @text);
-}
-
-sub pp_dbstate { pp_nextstate(@_) }
-sub pp_setstate { pp_nextstate(@_) }
-
-sub pp_unstack { return "" } # see also leaveloop
-
-sub baseop {
- my $self = shift;
- my($op, $cx, $name) = @_;
- return $name;
-}
-
-sub pp_stub { baseop(@_, "()") }
-sub pp_wantarray { baseop(@_, "wantarray") }
-sub pp_fork { baseop(@_, "fork") }
-sub pp_wait { maybe_targmy(@_, \&baseop, "wait") }
-sub pp_getppid { maybe_targmy(@_, \&baseop, "getppid") }
-sub pp_time { maybe_targmy(@_, \&baseop, "time") }
-sub pp_tms { baseop(@_, "times") }
-sub pp_ghostent { baseop(@_, "gethostent") }
-sub pp_gnetent { baseop(@_, "getnetent") }
-sub pp_gprotoent { baseop(@_, "getprotoent") }
-sub pp_gservent { baseop(@_, "getservent") }
-sub pp_ehostent { baseop(@_, "endhostent") }
-sub pp_enetent { baseop(@_, "endnetent") }
-sub pp_eprotoent { baseop(@_, "endprotoent") }
-sub pp_eservent { baseop(@_, "endservent") }
-sub pp_gpwent { baseop(@_, "getpwent") }
-sub pp_spwent { baseop(@_, "setpwent") }
-sub pp_epwent { baseop(@_, "endpwent") }
-sub pp_ggrent { baseop(@_, "getgrent") }
-sub pp_sgrent { baseop(@_, "setgrent") }
-sub pp_egrent { baseop(@_, "endgrent") }
-sub pp_getlogin { baseop(@_, "getlogin") }
-
-sub POSTFIX () { 1 }
-
-# I couldn't think of a good short name, but this is the category of
-# symbolic unary operators with interesting precedence
-
-sub pfixop {
- my $self = shift;
- my($op, $cx, $name, $prec, $flags) = (@_, 0);
- my $kid = $op->first;
- $kid = $self->deparse($kid, $prec);
- return $self->maybe_parens(($flags & POSTFIX) ? "$kid$name" : "$name$kid",
- $cx, $prec);
-}
-
-sub pp_preinc { pfixop(@_, "++", 23) }
-sub pp_predec { pfixop(@_, "--", 23) }
-sub pp_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) }
-sub pp_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) }
-sub pp_i_preinc { pfixop(@_, "++", 23) }
-sub pp_i_predec { pfixop(@_, "--", 23) }
-sub pp_i_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) }
-sub pp_i_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) }
-sub pp_complement { maybe_targmy(@_, \&pfixop, "~", 21) }
-
-sub pp_negate { maybe_targmy(@_, \&real_negate) }
-sub real_negate {
- my $self = shift;
- my($op, $cx) = @_;
- if ($op->first->name =~ /^(i_)?negate$/) {
- # avoid --$x
- $self->pfixop($op, $cx, "-", 21.5);
- } else {
- $self->pfixop($op, $cx, "-", 21);
- }
-}
-sub pp_i_negate { pp_negate(@_) }
-
-sub pp_not {
- my $self = shift;
- my($op, $cx) = @_;
- if ($cx <= 4) {
- $self->pfixop($op, $cx, "not ", 4);
- } else {
- $self->pfixop($op, $cx, "!", 21);
- }
-}
-
-sub unop {
- my $self = shift;
- my($op, $cx, $name) = @_;
- my $kid;
- if ($op->flags & OPf_KIDS) {
- $kid = $op->first;
- return $self->maybe_parens_unop($name, $kid, $cx);
- } else {
- return $name . ($op->flags & OPf_SPECIAL ? "()" : "");
- }
-}
-
-sub pp_chop { maybe_targmy(@_, \&unop, "chop") }
-sub pp_chomp { maybe_targmy(@_, \&unop, "chomp") }
-sub pp_schop { maybe_targmy(@_, \&unop, "chop") }
-sub pp_schomp { maybe_targmy(@_, \&unop, "chomp") }
-sub pp_defined { unop(@_, "defined") }
-sub pp_undef { unop(@_, "undef") }
-sub pp_study { unop(@_, "study") }
-sub pp_ref { unop(@_, "ref") }
-sub pp_pos { maybe_local(@_, unop(@_, "pos")) }
-
-sub pp_sin { maybe_targmy(@_, \&unop, "sin") }
-sub pp_cos { maybe_targmy(@_, \&unop, "cos") }
-sub pp_rand { maybe_targmy(@_, \&unop, "rand") }
-sub pp_srand { unop(@_, "srand") }
-sub pp_exp { maybe_targmy(@_, \&unop, "exp") }
-sub pp_log { maybe_targmy(@_, \&unop, "log") }
-sub pp_sqrt { maybe_targmy(@_, \&unop, "sqrt") }
-sub pp_int { maybe_targmy(@_, \&unop, "int") }
-sub pp_hex { maybe_targmy(@_, \&unop, "hex") }
-sub pp_oct { maybe_targmy(@_, \&unop, "oct") }
-sub pp_abs { maybe_targmy(@_, \&unop, "abs") }
-
-sub pp_length { maybe_targmy(@_, \&unop, "length") }
-sub pp_ord { maybe_targmy(@_, \&unop, "ord") }
-sub pp_chr { maybe_targmy(@_, \&unop, "chr") }
-
-sub pp_each { unop(@_, "each") }
-sub pp_values { unop(@_, "values") }
-sub pp_keys { unop(@_, "keys") }
-sub pp_pop { unop(@_, "pop") }
-sub pp_shift { unop(@_, "shift") }
-
-sub pp_caller { unop(@_, "caller") }
-sub pp_reset { unop(@_, "reset") }
-sub pp_exit { unop(@_, "exit") }
-sub pp_prototype { unop(@_, "prototype") }
-
-sub pp_close { unop(@_, "close") }
-sub pp_fileno { unop(@_, "fileno") }
-sub pp_umask { unop(@_, "umask") }
-sub pp_untie { unop(@_, "untie") }
-sub pp_tied { unop(@_, "tied") }
-sub pp_dbmclose { unop(@_, "dbmclose") }
-sub pp_getc { unop(@_, "getc") }
-sub pp_eof { unop(@_, "eof") }
-sub pp_tell { unop(@_, "tell") }
-sub pp_getsockname { unop(@_, "getsockname") }
-sub pp_getpeername { unop(@_, "getpeername") }
-
-sub pp_chdir { maybe_targmy(@_, \&unop, "chdir") }
-sub pp_chroot { maybe_targmy(@_, \&unop, "chroot") }
-sub pp_readlink { unop(@_, "readlink") }
-sub pp_rmdir { maybe_targmy(@_, \&unop, "rmdir") }
-sub pp_readdir { unop(@_, "readdir") }
-sub pp_telldir { unop(@_, "telldir") }
-sub pp_rewinddir { unop(@_, "rewinddir") }
-sub pp_closedir { unop(@_, "closedir") }
-sub pp_getpgrp { maybe_targmy(@_, \&unop, "getpgrp") }
-sub pp_localtime { unop(@_, "localtime") }
-sub pp_gmtime { unop(@_, "gmtime") }
-sub pp_alarm { unop(@_, "alarm") }
-sub pp_sleep { maybe_targmy(@_, \&unop, "sleep") }
-
-sub pp_dofile { unop(@_, "do") }
-sub pp_entereval { unop(@_, "eval") }
-
-sub pp_ghbyname { unop(@_, "gethostbyname") }
-sub pp_gnbyname { unop(@_, "getnetbyname") }
-sub pp_gpbyname { unop(@_, "getprotobyname") }
-sub pp_shostent { unop(@_, "sethostent") }
-sub pp_snetent { unop(@_, "setnetent") }
-sub pp_sprotoent { unop(@_, "setprotoent") }
-sub pp_sservent { unop(@_, "setservent") }
-sub pp_gpwnam { unop(@_, "getpwnam") }
-sub pp_gpwuid { unop(@_, "getpwuid") }
-sub pp_ggrnam { unop(@_, "getgrnam") }
-sub pp_ggrgid { unop(@_, "getgrgid") }
-
-sub pp_lock { unop(@_, "lock") }
-
-sub pp_exists {
- my $self = shift;
- my($op, $cx) = @_;
- return $self->maybe_parens_func("exists", $self->pp_helem($op->first, 16),
- $cx, 16);
-}
-
-sub pp_delete {
- my $self = shift;
- my($op, $cx) = @_;
- my $arg;
- if ($op->private & OPpSLICE) {
- return $self->maybe_parens_func("delete",
- $self->pp_hslice($op->first, 16),
- $cx, 16);
- } else {
- return $self->maybe_parens_func("delete",
- $self->pp_helem($op->first, 16),
- $cx, 16);
- }
-}
-
-sub pp_require {
- my $self = shift;
- my($op, $cx) = @_;
- if (class($op) eq "UNOP" and $op->first->name eq "const"
- and $op->first->private & OPpCONST_BARE)
- {
- my $name = $self->const_sv($op->first)->PV;
- $name =~ s[/][::]g;
- $name =~ s/\.pm//g;
- return "require($name)";
- } else {
- $self->unop($op, $cx, "require");
- }
-}
-
-sub pp_scalar {
- my $self = shift;
- my($op, $cv) = @_;
- my $kid = $op->first;
- if (not null $kid->sibling) {
- # XXX Was a here-doc
- return $self->dquote($op);
- }
- $self->unop(@_, "scalar");
-}
-
-
-sub padval {
- my $self = shift;
- my $targ = shift;
- #cluck "curcv was undef" unless $self->{curcv};
- return (($self->{'curcv'}->PADLIST->ARRAY)[1]->ARRAY)[$targ];
-}
-
-sub pp_refgen {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- if ($kid->name eq "null") {
- $kid = $kid->first;
- if ($kid->name eq "anonlist" || $kid->name eq "anonhash") {
- my($pre, $post) = @{{"anonlist" => ["[","]"],
- "anonhash" => ["{","}"]}->{$kid->name}};
- my($expr, @exprs);
- $kid = $kid->first->sibling; # skip pushmark
- for (; !null($kid); $kid = $kid->sibling) {
- $expr = $self->deparse($kid, 6);
- push @exprs, $expr;
- }
- return $pre . join(", ", @exprs) . $post;
- } elsif (!null($kid->sibling) and
- $kid->sibling->name eq "anoncode") {
- return "sub " .
- $self->deparse_sub($self->padval($kid->sibling->targ));
- } elsif ($kid->name eq "pushmark") {
- my $sib_name = $kid->sibling->name;
- if ($sib_name =~ /^(pad|rv2)[ah]v$/
- and not $kid->sibling->flags & OPf_REF)
- {
- # The @a in \(@a) isn't in ref context, but only when the
- # parens are there.
- return "\\(" . $self->deparse($kid->sibling, 1) . ")";
- } elsif ($sib_name eq 'entersub') {
- my $text = $self->deparse($kid->sibling, 1);
- # Always show parens for \(&func()), but only with -p otherwise
- $text = "($text)" if $self->{'parens'}
- or $kid->sibling->private & OPpENTERSUB_AMPER;
- return "\\$text";
- }
- }
- }
- $self->pfixop($op, $cx, "\\", 20);
-}
-
-sub pp_srefgen { pp_refgen(@_) }
-
-sub pp_readline {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- $kid = $kid->first if $kid->name eq "rv2gv"; # <$fh>
- return "<" . $self->deparse($kid, 1) . ">";
-}
-
-# Unary operators that can occur as pseudo-listops inside double quotes
-sub dq_unop {
- my $self = shift;
- my($op, $cx, $name, $prec, $flags) = (@_, 0, 0);
- my $kid;
- if ($op->flags & OPf_KIDS) {
- $kid = $op->first;
- # If there's more than one kid, the first is an ex-pushmark.
- $kid = $kid->sibling if not null $kid->sibling;
- return $self->maybe_parens_unop($name, $kid, $cx);
- } else {
- return $name . ($op->flags & OPf_SPECIAL ? "()" : "");
- }
-}
-
-sub pp_ucfirst { dq_unop(@_, "ucfirst") }
-sub pp_lcfirst { dq_unop(@_, "lcfirst") }
-sub pp_uc { dq_unop(@_, "uc") }
-sub pp_lc { dq_unop(@_, "lc") }
-sub pp_quotemeta { maybe_targmy(@_, \&dq_unop, "quotemeta") }
-
-sub loopex {
- my $self = shift;
- my ($op, $cx, $name) = @_;
- if (class($op) eq "PVOP") {
- return "$name " . $op->pv;
- } elsif (class($op) eq "OP") {
- return $name;
- } elsif (class($op) eq "UNOP") {
- # Note -- loop exits are actually exempt from the
- # looks-like-a-func rule, but a few extra parens won't hurt
- return $self->maybe_parens_unop($name, $op->first, $cx);
- }
-}
-
-sub pp_last { loopex(@_, "last") }
-sub pp_next { loopex(@_, "next") }
-sub pp_redo { loopex(@_, "redo") }
-sub pp_goto { loopex(@_, "goto") }
-sub pp_dump { loopex(@_, "dump") }
-
-sub ftst {
- my $self = shift;
- my($op, $cx, $name) = @_;
- if (class($op) eq "UNOP") {
- # Genuine `-X' filetests are exempt from the LLAFR, but not
- # l?stat(); for the sake of clarity, give'em all parens
- return $self->maybe_parens_unop($name, $op->first, $cx);
- } elsif (class($op) eq "SVOP") {
- return $self->maybe_parens_func($name, $self->pp_gv($op, 1), $cx, 16);
- } else { # I don't think baseop filetests ever survive ck_ftst, but...
- return $name;
- }
-}
-
-sub pp_lstat { ftst(@_, "lstat") }
-sub pp_stat { ftst(@_, "stat") }
-sub pp_ftrread { ftst(@_, "-R") }
-sub pp_ftrwrite { ftst(@_, "-W") }
-sub pp_ftrexec { ftst(@_, "-X") }
-sub pp_fteread { ftst(@_, "-r") }
-sub pp_ftewrite { ftst(@_, "-r") }
-sub pp_fteexec { ftst(@_, "-r") }
-sub pp_ftis { ftst(@_, "-e") }
-sub pp_fteowned { ftst(@_, "-O") }
-sub pp_ftrowned { ftst(@_, "-o") }
-sub pp_ftzero { ftst(@_, "-z") }
-sub pp_ftsize { ftst(@_, "-s") }
-sub pp_ftmtime { ftst(@_, "-M") }
-sub pp_ftatime { ftst(@_, "-A") }
-sub pp_ftctime { ftst(@_, "-C") }
-sub pp_ftsock { ftst(@_, "-S") }
-sub pp_ftchr { ftst(@_, "-c") }
-sub pp_ftblk { ftst(@_, "-b") }
-sub pp_ftfile { ftst(@_, "-f") }
-sub pp_ftdir { ftst(@_, "-d") }
-sub pp_ftpipe { ftst(@_, "-p") }
-sub pp_ftlink { ftst(@_, "-l") }
-sub pp_ftsuid { ftst(@_, "-u") }
-sub pp_ftsgid { ftst(@_, "-g") }
-sub pp_ftsvtx { ftst(@_, "-k") }
-sub pp_fttty { ftst(@_, "-t") }
-sub pp_fttext { ftst(@_, "-T") }
-sub pp_ftbinary { ftst(@_, "-B") }
-
-sub SWAP_CHILDREN () { 1 }
-sub ASSIGN () { 2 } # has OP= variant
-
-my(%left, %right);
-
-sub assoc_class {
- my $op = shift;
- my $name = $op->name;
- if ($name eq "concat" and $op->first->name eq "concat") {
- # avoid spurious `=' -- see comment in pp_concat
- return "concat";
- }
- if ($name eq "null" and class($op) eq "UNOP"
- and $op->first->name =~ /^(and|x?or)$/
- and null $op->first->sibling)
- {
- # Like all conditional constructs, OP_ANDs and OP_ORs are topped
- # with a null that's used as the common end point of the two
- # flows of control. For precedence purposes, ignore it.
- # (COND_EXPRs have these too, but we don't bother with
- # their associativity).
- return assoc_class($op->first);
- }
- return $name . ($op->flags & OPf_STACKED ? "=" : "");
-}
-
-# Left associative operators, like `+', for which
-# $a + $b + $c is equivalent to ($a + $b) + $c
-
-BEGIN {
- %left = ('multiply' => 19, 'i_multiply' => 19,
- 'divide' => 19, 'i_divide' => 19,
- 'modulo' => 19, 'i_modulo' => 19,
- 'repeat' => 19,
- 'add' => 18, 'i_add' => 18,
- 'subtract' => 18, 'i_subtract' => 18,
- 'concat' => 18,
- 'left_shift' => 17, 'right_shift' => 17,
- 'bit_and' => 13,
- 'bit_or' => 12, 'bit_xor' => 12,
- 'and' => 3,
- 'or' => 2, 'xor' => 2,
- );
-}
-
-sub deparse_binop_left {
- my $self = shift;
- my($op, $left, $prec) = @_;
- if ($left{assoc_class($op)} && $left{assoc_class($left)}
- and $left{assoc_class($op)} == $left{assoc_class($left)})
- {
- return $self->deparse($left, $prec - .00001);
- } else {
- return $self->deparse($left, $prec);
- }
-}
-
-# Right associative operators, like `=', for which
-# $a = $b = $c is equivalent to $a = ($b = $c)
-
-BEGIN {
- %right = ('pow' => 22,
- 'sassign=' => 7, 'aassign=' => 7,
- 'multiply=' => 7, 'i_multiply=' => 7,
- 'divide=' => 7, 'i_divide=' => 7,
- 'modulo=' => 7, 'i_modulo=' => 7,
- 'repeat=' => 7,
- 'add=' => 7, 'i_add=' => 7,
- 'subtract=' => 7, 'i_subtract=' => 7,
- 'concat=' => 7,
- 'left_shift=' => 7, 'right_shift=' => 7,
- 'bit_and=' => 7,
- 'bit_or=' => 7, 'bit_xor=' => 7,
- 'andassign' => 7,
- 'orassign' => 7,
- );
-}
-
-sub deparse_binop_right {
- my $self = shift;
- my($op, $right, $prec) = @_;
- if ($right{assoc_class($op)} && $right{assoc_class($right)}
- and $right{assoc_class($op)} == $right{assoc_class($right)})
- {
- return $self->deparse($right, $prec - .00001);
- } else {
- return $self->deparse($right, $prec);
- }
-}
-
-sub binop {
- my $self = shift;
- my ($op, $cx, $opname, $prec, $flags) = (@_, 0);
- my $left = $op->first;
- my $right = $op->last;
- my $eq = "";
- if ($op->flags & OPf_STACKED && $flags & ASSIGN) {
- $eq = "=";
- $prec = 7;
- }
- if ($flags & SWAP_CHILDREN) {
- ($left, $right) = ($right, $left);
- }
- $left = $self->deparse_binop_left($op, $left, $prec);
- $right = $self->deparse_binop_right($op, $right, $prec);
- return $self->maybe_parens("$left $opname$eq $right", $cx, $prec);
-}
-
-sub pp_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) }
-sub pp_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) }
-sub pp_subtract { maybe_targmy(@_, \&binop, "-",18, ASSIGN) }
-sub pp_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) }
-sub pp_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) }
-sub pp_i_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) }
-sub pp_i_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) }
-sub pp_i_subtract { maybe_targmy(@_, \&binop, "-", 18, ASSIGN) }
-sub pp_i_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) }
-sub pp_i_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) }
-sub pp_pow { maybe_targmy(@_, \&binop, "**", 22, ASSIGN) }
-
-sub pp_left_shift { maybe_targmy(@_, \&binop, "<<", 17, ASSIGN) }
-sub pp_right_shift { maybe_targmy(@_, \&binop, ">>", 17, ASSIGN) }
-sub pp_bit_and { maybe_targmy(@_, \&binop, "&", 13, ASSIGN) }
-sub pp_bit_or { maybe_targmy(@_, \&binop, "|", 12, ASSIGN) }
-sub pp_bit_xor { maybe_targmy(@_, \&binop, "^", 12, ASSIGN) }
-
-sub pp_eq { binop(@_, "==", 14) }
-sub pp_ne { binop(@_, "!=", 14) }
-sub pp_lt { binop(@_, "<", 15) }
-sub pp_gt { binop(@_, ">", 15) }
-sub pp_ge { binop(@_, ">=", 15) }
-sub pp_le { binop(@_, "<=", 15) }
-sub pp_ncmp { binop(@_, "<=>", 14) }
-sub pp_i_eq { binop(@_, "==", 14) }
-sub pp_i_ne { binop(@_, "!=", 14) }
-sub pp_i_lt { binop(@_, "<", 15) }
-sub pp_i_gt { binop(@_, ">", 15) }
-sub pp_i_ge { binop(@_, ">=", 15) }
-sub pp_i_le { binop(@_, "<=", 15) }
-sub pp_i_ncmp { binop(@_, "<=>", 14) }
-
-sub pp_seq { binop(@_, "eq", 14) }
-sub pp_sne { binop(@_, "ne", 14) }
-sub pp_slt { binop(@_, "lt", 15) }
-sub pp_sgt { binop(@_, "gt", 15) }
-sub pp_sge { binop(@_, "ge", 15) }
-sub pp_sle { binop(@_, "le", 15) }
-sub pp_scmp { binop(@_, "cmp", 14) }
-
-sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) }
-sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN) }
-
-# `.' is special because concats-of-concats are optimized to save copying
-# by making all but the first concat stacked. The effect is as if the
-# programmer had written `($a . $b) .= $c', except legal.
-sub pp_concat { maybe_targmy(@_, \&real_concat) }
-sub real_concat {
- my $self = shift;
- my($op, $cx) = @_;
- my $left = $op->first;
- my $right = $op->last;
- my $eq = "";
- my $prec = 18;
- if ($op->flags & OPf_STACKED and $op->first->name ne "concat") {
- $eq = "=";
- $prec = 7;
- }
- $left = $self->deparse_binop_left($op, $left, $prec);
- $right = $self->deparse_binop_right($op, $right, $prec);
- return $self->maybe_parens("$left .$eq $right", $cx, $prec);
-}
-
-# `x' is weird when the left arg is a list
-sub pp_repeat {
- my $self = shift;
- my($op, $cx) = @_;
- my $left = $op->first;
- my $right = $op->last;
- my $eq = "";
- my $prec = 19;
- if ($op->flags & OPf_STACKED) {
- $eq = "=";
- $prec = 7;
- }
- if (null($right)) { # list repeat; count is inside left-side ex-list
- my $kid = $left->first->sibling; # skip pushmark
- my @exprs;
- for (; !null($kid->sibling); $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 6);
- }
- $right = $kid;
- $left = "(" . join(", ", @exprs). ")";
- } else {
- $left = $self->deparse_binop_left($op, $left, $prec);
- }
- $right = $self->deparse_binop_right($op, $right, $prec);
- return $self->maybe_parens("$left x$eq $right", $cx, $prec);
-}
-
-sub range {
- my $self = shift;
- my ($op, $cx, $type) = @_;
- my $left = $op->first;
- my $right = $left->sibling;
- $left = $self->deparse($left, 9);
- $right = $self->deparse($right, 9);
- return $self->maybe_parens("$left $type $right", $cx, 9);
-}
-
-sub pp_flop {
- my $self = shift;
- my($op, $cx) = @_;
- my $flip = $op->first;
- my $type = ($flip->flags & OPf_SPECIAL) ? "..." : "..";
- return $self->range($flip->first, $cx, $type);
-}
-
-# one-line while/until is handled in pp_leave
-
-sub logop {
- my $self = shift;
- my ($op, $cx, $lowop, $lowprec, $highop, $highprec, $blockname) = @_;
- my $left = $op->first;
- my $right = $op->first->sibling;
- if ($cx == 0 and is_scope($right) and $blockname
- and $self->{'expand'} < 7)
- { # if ($a) {$b}
- $left = $self->deparse($left, 1);
- $right = $self->deparse($right, 0);
- return "$blockname ($left) {\n\t$right\n\b}\cK";
- } elsif ($cx == 0 and $blockname and not $self->{'parens'}
- and $self->{'expand'} < 7) { # $b if $a
- $right = $self->deparse($right, 1);
- $left = $self->deparse($left, 1);
- return "$right $blockname $left";
- } elsif ($cx > $lowprec and $highop) { # $a && $b
- $left = $self->deparse_binop_left($op, $left, $highprec);
- $right = $self->deparse_binop_right($op, $right, $highprec);
- return $self->maybe_parens("$left $highop $right", $cx, $highprec);
- } else { # $a and $b
- $left = $self->deparse_binop_left($op, $left, $lowprec);
- $right = $self->deparse_binop_right($op, $right, $lowprec);
- return $self->maybe_parens("$left $lowop $right", $cx, $lowprec);
- }
-}
-
-sub pp_and { logop(@_, "and", 3, "&&", 11, "if") }
-sub pp_or { logop(@_, "or", 2, "||", 10, "unless") }
-
-# xor is syntactically a logop, but it's really a binop (contrary to
-# old versions of opcode.pl). Syntax is what matters here.
-sub pp_xor { logop(@_, "xor", 2, "", 0, "") }
-
-sub logassignop {
- my $self = shift;
- my ($op, $cx, $opname) = @_;
- my $left = $op->first;
- my $right = $op->first->sibling->first; # skip sassign
- $left = $self->deparse($left, 7);
- $right = $self->deparse($right, 7);
- return $self->maybe_parens("$left $opname $right", $cx, 7);
-}
-
-sub pp_andassign { logassignop(@_, "&&=") }
-sub pp_orassign { logassignop(@_, "||=") }
-
-sub listop {
- my $self = shift;
- my($op, $cx, $name) = @_;
- my(@exprs);
- my $parens = ($cx >= 5) || $self->{'parens'};
- my $kid = $op->first->sibling;
- return $name if null $kid;
- my $first = $self->deparse($kid, 6);
- $first = "+$first" if not $parens and substr($first, 0, 1) eq "(";
- push @exprs, $first;
- $kid = $kid->sibling;
- for (; !null($kid); $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 6);
- }
- if ($parens) {
- return "$name(" . join(", ", @exprs) . ")";
- } else {
- return "$name " . join(", ", @exprs);
- }
-}
-
-sub pp_bless { listop(@_, "bless") }
-sub pp_atan2 { maybe_targmy(@_, \&listop, "atan2") }
-sub pp_substr { maybe_local(@_, listop(@_, "substr")) }
-sub pp_vec { maybe_local(@_, listop(@_, "vec")) }
-sub pp_index { maybe_targmy(@_, \&listop, "index") }
-sub pp_rindex { maybe_targmy(@_, \&listop, "rindex") }
-sub pp_sprintf { maybe_targmy(@_, \&listop, "sprintf") }
-sub pp_formline { listop(@_, "formline") } # see also deparse_format
-sub pp_crypt { maybe_targmy(@_, \&listop, "crypt") }
-sub pp_unpack { listop(@_, "unpack") }
-sub pp_pack { listop(@_, "pack") }
-sub pp_join { maybe_targmy(@_, \&listop, "join") }
-sub pp_splice { listop(@_, "splice") }
-sub pp_push { maybe_targmy(@_, \&listop, "push") }
-sub pp_unshift { maybe_targmy(@_, \&listop, "unshift") }
-sub pp_reverse { listop(@_, "reverse") }
-sub pp_warn { listop(@_, "warn") }
-sub pp_die { listop(@_, "die") }
-# Actually, return is exempt from the LLAFR (see examples in this very
-# module!), but for consistency's sake, ignore that fact
-sub pp_return { listop(@_, "return") }
-sub pp_open { listop(@_, "open") }
-sub pp_pipe_op { listop(@_, "pipe") }
-sub pp_tie { listop(@_, "tie") }
-sub pp_binmode { listop(@_, "binmode") }
-sub pp_dbmopen { listop(@_, "dbmopen") }
-sub pp_sselect { listop(@_, "select") }
-sub pp_select { listop(@_, "select") }
-sub pp_read { listop(@_, "read") }
-sub pp_sysopen { listop(@_, "sysopen") }
-sub pp_sysseek { listop(@_, "sysseek") }
-sub pp_sysread { listop(@_, "sysread") }
-sub pp_syswrite { listop(@_, "syswrite") }
-sub pp_send { listop(@_, "send") }
-sub pp_recv { listop(@_, "recv") }
-sub pp_seek { listop(@_, "seek") }
-sub pp_fcntl { listop(@_, "fcntl") }
-sub pp_ioctl { listop(@_, "ioctl") }
-sub pp_flock { maybe_targmy(@_, \&listop, "flock") }
-sub pp_socket { listop(@_, "socket") }
-sub pp_sockpair { listop(@_, "sockpair") }
-sub pp_bind { listop(@_, "bind") }
-sub pp_connect { listop(@_, "connect") }
-sub pp_listen { listop(@_, "listen") }
-sub pp_accept { listop(@_, "accept") }
-sub pp_shutdown { listop(@_, "shutdown") }
-sub pp_gsockopt { listop(@_, "getsockopt") }
-sub pp_ssockopt { listop(@_, "setsockopt") }
-sub pp_chown { maybe_targmy(@_, \&listop, "chown") }
-sub pp_unlink { maybe_targmy(@_, \&listop, "unlink") }
-sub pp_chmod { maybe_targmy(@_, \&listop, "chmod") }
-sub pp_utime { maybe_targmy(@_, \&listop, "utime") }
-sub pp_rename { maybe_targmy(@_, \&listop, "rename") }
-sub pp_link { maybe_targmy(@_, \&listop, "link") }
-sub pp_symlink { maybe_targmy(@_, \&listop, "symlink") }
-sub pp_mkdir { maybe_targmy(@_, \&listop, "mkdir") }
-sub pp_open_dir { listop(@_, "opendir") }
-sub pp_seekdir { listop(@_, "seekdir") }
-sub pp_waitpid { maybe_targmy(@_, \&listop, "waitpid") }
-sub pp_system { maybe_targmy(@_, \&listop, "system") }
-sub pp_exec { maybe_targmy(@_, \&listop, "exec") }
-sub pp_kill { maybe_targmy(@_, \&listop, "kill") }
-sub pp_setpgrp { maybe_targmy(@_, \&listop, "setpgrp") }
-sub pp_getpriority { maybe_targmy(@_, \&listop, "getpriority") }
-sub pp_setpriority { maybe_targmy(@_, \&listop, "setpriority") }
-sub pp_shmget { listop(@_, "shmget") }
-sub pp_shmctl { listop(@_, "shmctl") }
-sub pp_shmread { listop(@_, "shmread") }
-sub pp_shmwrite { listop(@_, "shmwrite") }
-sub pp_msgget { listop(@_, "msgget") }
-sub pp_msgctl { listop(@_, "msgctl") }
-sub pp_msgsnd { listop(@_, "msgsnd") }
-sub pp_msgrcv { listop(@_, "msgrcv") }
-sub pp_semget { listop(@_, "semget") }
-sub pp_semctl { listop(@_, "semctl") }
-sub pp_semop { listop(@_, "semop") }
-sub pp_ghbyaddr { listop(@_, "gethostbyaddr") }
-sub pp_gnbyaddr { listop(@_, "getnetbyaddr") }
-sub pp_gpbynumber { listop(@_, "getprotobynumber") }
-sub pp_gsbyname { listop(@_, "getservbyname") }
-sub pp_gsbyport { listop(@_, "getservbyport") }
-sub pp_syscall { listop(@_, "syscall") }
-
-sub pp_glob {
- my $self = shift;
- my($op, $cx) = @_;
- my $text = $self->dq($op->first->sibling); # skip pushmark
- if ($text =~ /^\$?(\w|::|\`)+$/ # could look like a readline
- or $text =~ /[<>]/) {
- return 'glob(' . single_delim('qq', '"', $text) . ')';
- } else {
- return '<' . $text . '>';
- }
-}
-
-# Truncate is special because OPf_SPECIAL makes a bareword first arg
-# be a filehandle. This could probably be better fixed in the core
-# by moving the GV lookup into ck_truc.
-
-sub pp_truncate {
- my $self = shift;
- my($op, $cx) = @_;
- my(@exprs);
- my $parens = ($cx >= 5) || $self->{'parens'};
- my $kid = $op->first->sibling;
- my $fh;
- if ($op->flags & OPf_SPECIAL) {
- # $kid is an OP_CONST
- $fh = $self->const_sv($kid)->PV;
- } else {
- $fh = $self->deparse($kid, 6);
- $fh = "+$fh" if not $parens and substr($fh, 0, 1) eq "(";
- }
- my $len = $self->deparse($kid->sibling, 6);
- if ($parens) {
- return "truncate($fh, $len)";
- } else {
- return "truncate $fh, $len";
- }
-}
-
-sub indirop {
- my $self = shift;
- my($op, $cx, $name) = @_;
- my($expr, @exprs);
- my $kid = $op->first->sibling;
- my $indir = "";
- if ($op->flags & OPf_STACKED) {
- $indir = $kid;
- $indir = $indir->first; # skip rv2gv
- if (is_scope($indir)) {
- $indir = "{" . $self->deparse($indir, 0) . "}";
- } else {
- $indir = $self->deparse($indir, 24);
- }
- $indir = $indir . " ";
- $kid = $kid->sibling;
- }
- for (; !null($kid); $kid = $kid->sibling) {
- $expr = $self->deparse($kid, 6);
- push @exprs, $expr;
- }
- return $self->maybe_parens_func($name, $indir . join(", ", @exprs),
- $cx, 5);
-}
-
-sub pp_prtf { indirop(@_, "printf") }
-sub pp_print { indirop(@_, "print") }
-sub pp_sort { indirop(@_, "sort") }
-
-sub mapop {
- my $self = shift;
- my($op, $cx, $name) = @_;
- my($expr, @exprs);
- my $kid = $op->first; # this is the (map|grep)start
- $kid = $kid->first->sibling; # skip a pushmark
- my $code = $kid->first; # skip a null
- if (is_scope $code) {
- $code = "{" . $self->deparse($code, 0) . "} ";
- } else {
- $code = $self->deparse($code, 24) . ", ";
- }
- $kid = $kid->sibling;
- for (; !null($kid); $kid = $kid->sibling) {
- $expr = $self->deparse($kid, 6);
- push @exprs, $expr if $expr;
- }
- return $self->maybe_parens_func($name, $code . join(", ", @exprs), $cx, 5);
-}
-
-sub pp_mapwhile { mapop(@_, "map") }
-sub pp_grepwhile { mapop(@_, "grep") }
-
-sub pp_list {
- my $self = shift;
- my($op, $cx) = @_;
- my($expr, @exprs);
- my $kid = $op->first->sibling; # skip pushmark
- my $lop;
- my $local = "either"; # could be local(...) or my(...)
- for ($lop = $kid; !null($lop); $lop = $lop->sibling) {
- # This assumes that no other private flags equal 128, and that
- # OPs that store things other than flags in their op_private,
- # like OP_AELEMFAST, won't be immediate children of a list.
- unless ($lop->private & OPpLVAL_INTRO or $lop->name eq "undef")
- {
- $local = ""; # or not
- last;
- }
- if ($lop->name =~ /^pad[ash]v$/) { # my()
- ($local = "", last) if $local eq "local";
- $local = "my";
- } elsif ($lop->name ne "undef") { # local()
- ($local = "", last) if $local eq "my";
- $local = "local";
- }
- }
- $local = "" if $local eq "either"; # no point if it's all undefs
- return $self->deparse($kid, $cx) if null $kid->sibling and not $local;
- for (; !null($kid); $kid = $kid->sibling) {
- if ($local) {
- if (class($kid) eq "UNOP" and $kid->first->name eq "gvsv") {
- $lop = $kid->first;
- } else {
- $lop = $kid;
- }
- $self->{'avoid_local'}{$$lop}++;
- $expr = $self->deparse($kid, 6);
- delete $self->{'avoid_local'}{$$lop};
- } else {
- $expr = $self->deparse($kid, 6);
- }
- push @exprs, $expr;
- }
- if ($local) {
- return "$local(" . join(", ", @exprs) . ")";
- } else {
- return $self->maybe_parens( join(", ", @exprs), $cx, 6);
- }
-}
-
-sub is_ifelse_cont {
- my $op = shift;
- return ($op->name eq "null" and class($op) eq "UNOP"
- and $op->first->name =~ /^(and|cond_expr)$/
- and is_scope($op->first->first->sibling));
-}
-
-sub pp_cond_expr {
- my $self = shift;
- my($op, $cx) = @_;
- my $cond = $op->first;
- my $true = $cond->sibling;
- my $false = $true->sibling;
- my $cuddle = $self->{'cuddle'};
- unless ($cx == 0 and (is_scope($true) and $true->name ne "null") and
- (is_scope($false) || is_ifelse_cont($false))
- and $self->{'expand'} < 7) {
- $cond = $self->deparse($cond, 8);
- $true = $self->deparse($true, 8);
- $false = $self->deparse($false, 8);
- return $self->maybe_parens("$cond ? $true : $false", $cx, 8);
- }
-
- $cond = $self->deparse($cond, 1);
- $true = $self->deparse($true, 0);
- my $head = "if ($cond) {\n\t$true\n\b}";
- my @elsifs;
- while (!null($false) and is_ifelse_cont($false)) {
- my $newop = $false->first;
- my $newcond = $newop->first;
- my $newtrue = $newcond->sibling;
- $false = $newtrue->sibling; # last in chain is OP_AND => no else
- $newcond = $self->deparse($newcond, 1);
- $newtrue = $self->deparse($newtrue, 0);
- push @elsifs, "elsif ($newcond) {\n\t$newtrue\n\b}";
- }
- if (!null($false)) {
- $false = $cuddle . "else {\n\t" .
- $self->deparse($false, 0) . "\n\b}\cK";
- } else {
- $false = "\cK";
- }
- return $head . join($cuddle, "", @elsifs) . $false;
-}
-
-sub loop_common {
- my $self = shift;
- my($op, $cx, $init) = @_;
- my $enter = $op->first;
- my $kid = $enter->sibling;
- local($self->{'curstash'}) = $self->{'curstash'};
- my $head = "";
- my $bare = 0;
- my $body;
- my $cond = undef;
- if ($kid->name eq "lineseq") { # bare or infinite loop
- if (is_state $kid->last) { # infinite
- $head = "for (;;) "; # shorter than while (1)
- $cond = "";
- } else {
- $bare = 1;
- }
- $body = $kid;
- } elsif ($enter->name eq "enteriter") { # foreach
- my $ary = $enter->first->sibling; # first was pushmark
- my $var = $ary->sibling;
- if ($enter->flags & OPf_STACKED
- and not null $ary->first->sibling->sibling)
- {
- $ary = $self->deparse($ary->first->sibling, 9) . " .. " .
- $self->deparse($ary->first->sibling->sibling, 9);
- } else {
- $ary = $self->deparse($ary, 1);
- }
- if (null $var) {
- if ($enter->flags & OPf_SPECIAL) { # thread special var
- $var = $self->pp_threadsv($enter, 1);
- } else { # regular my() variable
- $var = $self->pp_padsv($enter, 1);
- if ($self->padname_sv($enter->targ)->IVX ==
- $kid->first->first->sibling->last->cop_seq)
- {
- # If the scope of this variable closes at the last
- # statement of the loop, it must have been
- # declared here.
- $var = "my " . $var;
- }
- }
- } elsif ($var->name eq "rv2gv") {
- $var = $self->pp_rv2sv($var, 1);
- } elsif ($var->name eq "gv") {
- $var = "\$" . $self->deparse($var, 1);
- }
- $head = "foreach $var ($ary) ";
- $body = $kid->first->first->sibling; # skip OP_AND and OP_ITER
- } elsif ($kid->name eq "null") { # while/until
- $kid = $kid->first;
- my $name = {"and" => "while", "or" => "until"}->{$kid->name};
- $cond = $self->deparse($kid->first, 1);
- $head = "$name ($cond) ";
- $body = $kid->first->sibling;
- } elsif ($kid->name eq "stub") { # bare and empty
- return "{;}"; # {} could be a hashref
- }
- # If there isn't a continue block, then the next pointer for the loop
- # will point to the unstack, which is kid's penultimate child, except
- # in a bare loop, when it will point to the leaveloop. When neither of
- # these conditions hold, then the third-to-last child in the continue
- # block (or the last in a bare loop).
- my $cont_start = $enter->nextop;
- my $cont;
- if ($$cont_start != $$op and $ {$cont_start->sibling} != $ {$body->last}) {
- if ($bare) {
- $cont = $body->last;
- } else {
- $cont = $body->first;
- while (!null($cont->sibling->sibling->sibling)) {
- $cont = $cont->sibling;
- }
- }
- my $state = $body->first;
- my $cuddle = $self->{'cuddle'};
- my @states;
- for (; $$state != $$cont; $state = $state->sibling) {
- push @states, $state;
- }
- $body = $self->lineseq(@states);
- if (defined $cond and not is_scope $cont and $self->{'expand'} < 3) {
- $head = "for ($init; $cond; " . $self->deparse($cont, 1) .") ";
- $cont = "\cK";
- } else {
- $cont = $cuddle . "continue {\n\t" .
- $self->deparse($cont, 0) . "\n\b}\cK";
- }
- } else {
- $cont = "\cK";
- $body = $self->deparse($body, 0);
- }
- return $head . "{\n\t" . $body . "\n\b}" . $cont;
-}
-
-sub pp_leaveloop { loop_common(@_, "") }
-
-sub for_loop {
- my $self = shift;
- my($op, $cx) = @_;
- my $init = $self->deparse($op, 1);
- return $self->loop_common($op->sibling, $cx, $init);
-}
-
-sub pp_leavetry {
- my $self = shift;
- return "eval {\n\t" . $self->pp_leave(@_) . "\n\b}";
-}
-
-BEGIN { eval "sub OP_CONST () {" . opnumber("const") . "}" }
-BEGIN { eval "sub OP_STRINGIFY () {" . opnumber("stringify") . "}" }
-
-sub pp_null {
- my $self = shift;
- my($op, $cx) = @_;
- if (class($op) eq "OP") {
- # old value is lost
- return $self->{'ex_const'} if $op->targ == OP_CONST;
- } elsif ($op->first->name eq "pushmark") {
- return $self->pp_list($op, $cx);
- } elsif ($op->first->name eq "enter") {
- return $self->pp_leave($op, $cx);
- } elsif ($op->targ == OP_STRINGIFY) {
- return $self->dquote($op, $cx);
- } elsif (!null($op->first->sibling) and
- $op->first->sibling->name eq "readline" and
- $op->first->sibling->flags & OPf_STACKED) {
- return $self->maybe_parens($self->deparse($op->first, 7) . " = "
- . $self->deparse($op->first->sibling, 7),
- $cx, 7);
- } elsif (!null($op->first->sibling) and
- $op->first->sibling->name eq "trans" and
- $op->first->sibling->flags & OPf_STACKED) {
- return $self->maybe_parens($self->deparse($op->first, 20) . " =~ "
- . $self->deparse($op->first->sibling, 20),
- $cx, 20);
- } else {
- return $self->deparse($op->first, $cx);
- }
-}
-
-sub padname {
- my $self = shift;
- my $targ = shift;
- return $self->padname_sv($targ)->PVX;
-}
-
-sub padany {
- my $self = shift;
- my $op = shift;
- return substr($self->padname($op->targ), 1); # skip $/@/%
-}
-
-sub pp_padsv {
- my $self = shift;
- my($op, $cx) = @_;
- return $self->maybe_my($op, $cx, $self->padname($op->targ));
-}
-
-sub pp_padav { pp_padsv(@_) }
-sub pp_padhv { pp_padsv(@_) }
-
-my @threadsv_names;
-
-BEGIN {
- @threadsv_names = ("_", "1", "2", "3", "4", "5", "6", "7", "8", "9",
- "&", "`", "'", "+", "/", ".", ",", "\\", '"', ";",
- "^", "-", "%", "=", "|", "~", ":", "^A", "^E",
- "!", "@");
-}
-
-sub pp_threadsv {
- my $self = shift;
- my($op, $cx) = @_;
- return $self->maybe_local($op, $cx, "\$" . $threadsv_names[$op->targ]);
-}
-
-sub gv_or_padgv {
- my $self = shift;
- my $op = shift;
- if (class($op) eq "PADOP") {
- return $self->padval($op->padix);
- } else { # class($op) eq "SVOP"
- return $op->gv;
- }
-}
-
-sub pp_gvsv {
- my $self = shift;
- my($op, $cx) = @_;
- my $gv = $self->gv_or_padgv($op);
- return $self->maybe_local($op, $cx, "\$" . $self->gv_name($gv));
-}
-
-sub pp_gv {
- my $self = shift;
- my($op, $cx) = @_;
- my $gv = $self->gv_or_padgv($op);
- return $self->gv_name($gv);
-}
-
-sub pp_aelemfast {
- my $self = shift;
- my($op, $cx) = @_;
- my $gv = $self->gv_or_padgv($op);
- return "\$" . $self->gv_name($gv) . "[" . $op->private . "]";
-}
-
-sub rv2x {
- my $self = shift;
- my($op, $cx, $type) = @_;
- my $kid = $op->first;
- my $str = $self->deparse($kid, 0);
- return $type . (is_scalar($kid) ? $str : "{$str}");
-}
-
-sub pp_rv2sv { maybe_local(@_, rv2x(@_, "\$")) }
-sub pp_rv2hv { maybe_local(@_, rv2x(@_, "%")) }
-sub pp_rv2gv { maybe_local(@_, rv2x(@_, "*")) }
-
-# skip rv2av
-sub pp_av2arylen {
- my $self = shift;
- my($op, $cx) = @_;
- if ($op->first->name eq "padav") {
- return $self->maybe_local($op, $cx, '$#' . $self->padany($op->first));
- } else {
- return $self->maybe_local($op, $cx,
- $self->rv2x($op->first, $cx, '$#'));
- }
-}
-
-# skip down to the old, ex-rv2cv
-sub pp_rv2cv { $_[0]->rv2x($_[1]->first->first->sibling, $_[2], "&") }
-
-sub pp_rv2av {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- if ($kid->name eq "const") { # constant list
- my $av = $self->const_sv($kid);
- return "(" . join(", ", map(const($_), $av->ARRAY)) . ")";
- } else {
- return $self->maybe_local($op, $cx, $self->rv2x($op, $cx, "\@"));
- }
- }
-
-sub is_subscriptable {
- my $op = shift;
- if ($op->name =~ /^[ahg]elem/) {
- return 1;
- } elsif ($op->name eq "entersub") {
- my $kid = $op->first;
- return 0 unless null $kid->sibling;
- $kid = $kid->first;
- $kid = $kid->sibling until null $kid->sibling;
- return 0 if is_scope($kid);
- $kid = $kid->first;
- return 0 if $kid->name eq "gv";
- return 0 if is_scalar($kid);
- return is_subscriptable($kid);
- } else {
- return 0;
- }
-}
-
-sub elem {
- my $self = shift;
- my ($op, $cx, $left, $right, $padname) = @_;
- my($array, $idx) = ($op->first, $op->first->sibling);
- unless ($array->name eq $padname) { # Maybe this has been fixed
- $array = $array->first; # skip rv2av (or ex-rv2av in _53+)
- }
- if ($array->name eq $padname) {
- $array = $self->padany($array);
- } elsif (is_scope($array)) { # ${expr}[0]
- $array = "{" . $self->deparse($array, 0) . "}";
- } elsif (is_scalar $array) { # $x[0], $$x[0], ...
- $array = $self->deparse($array, 24);
- } else {
- # $x[20][3]{hi} or expr->[20]
- my $arrow = is_subscriptable($array) ? "" : "->";
- return $self->deparse($array, 24) . $arrow .
- $left . $self->deparse($idx, 1) . $right;
- }
- $idx = $self->deparse($idx, 1);
- return "\$" . $array . $left . $idx . $right;
-}
-
-sub pp_aelem { maybe_local(@_, elem(@_, "[", "]", "padav")) }
-sub pp_helem { maybe_local(@_, elem(@_, "{", "}", "padhv")) }
-
-sub pp_gelem {
- my $self = shift;
- my($op, $cx) = @_;
- my($glob, $part) = ($op->first, $op->last);
- $glob = $glob->first; # skip rv2gv
- $glob = $glob->first if $glob->name eq "rv2gv"; # this one's a bug
- my $scope = is_scope($glob);
- $glob = $self->deparse($glob, 0);
- $part = $self->deparse($part, 1);
- return "*" . ($scope ? "{$glob}" : $glob) . "{$part}";
-}
-
-sub slice {
- my $self = shift;
- my ($op, $cx, $left, $right, $regname, $padname) = @_;
- my $last;
- my(@elems, $kid, $array, $list);
- if (class($op) eq "LISTOP") {
- $last = $op->last;
- } else { # ex-hslice inside delete()
- for ($kid = $op->first; !null $kid->sibling; $kid = $kid->sibling) {}
- $last = $kid;
- }
- $array = $last;
- $array = $array->first
- if $array->name eq $regname or $array->name eq "null";
- if (is_scope($array)) {
- $array = "{" . $self->deparse($array, 0) . "}";
- } elsif ($array->name eq $padname) {
- $array = $self->padany($array);
- } else {
- $array = $self->deparse($array, 24);
- }
- $kid = $op->first->sibling; # skip pushmark
- if ($kid->name eq "list") {
- $kid = $kid->first->sibling; # skip list, pushmark
- for (; !null $kid; $kid = $kid->sibling) {
- push @elems, $self->deparse($kid, 6);
- }
- $list = join(", ", @elems);
- } else {
- $list = $self->deparse($kid, 1);
- }
- return "\@" . $array . $left . $list . $right;
-}
-
-sub pp_aslice { maybe_local(@_, slice(@_, "[", "]", "rv2av", "padav")) }
-sub pp_hslice { maybe_local(@_, slice(@_, "{", "}", "rv2hv", "padhv")) }
-
-sub pp_lslice {
- my $self = shift;
- my($op, $cx) = @_;
- my $idx = $op->first;
- my $list = $op->last;
- my(@elems, $kid);
- $list = $self->deparse($list, 1);
- $idx = $self->deparse($idx, 1);
- return "($list)" . "[$idx]";
-}
-
-sub want_scalar {
- my $op = shift;
- return ($op->flags & OPf_WANT) == OPf_WANT_SCALAR;
-}
-
-sub want_list {
- my $op = shift;
- return ($op->flags & OPf_WANT) == OPf_WANT_LIST;
-}
-
-sub method {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first->sibling; # skip pushmark
- my($meth, $obj, @exprs);
- if ($kid->name eq "list" and want_list $kid) {
- # When an indirect object isn't a bareword but the args are in
- # parens, the parens aren't part of the method syntax (the LLAFR
- # doesn't apply), but they make a list with OPf_PARENS set that
- # doesn't get flattened by the append_elem that adds the method,
- # making a (object, arg1, arg2, ...) list where the object
- # usually is. This can be distinguished from
- # `($obj, $arg1, $arg2)->meth()' (which is legal if $arg2 is an
- # object) because in the later the list is in scalar context
- # as the left side of -> always is, while in the former
- # the list is in list context as method arguments always are.
- # (Good thing there aren't method prototypes!)
- $meth = $kid->sibling;
- $kid = $kid->first->sibling; # skip pushmark
- $obj = $kid;
- $kid = $kid->sibling;
- for (; not null $kid; $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 6);
- }
- } else {
- $obj = $kid;
- $kid = $kid->sibling;
- for (; not null $kid->sibling; $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 6);
- }
- $meth = $kid;
- }
- $obj = $self->deparse($obj, 24);
- if ($meth->name eq "method_named") {
- $meth = $self->const_sv($meth)->PV;
- } else {
- $meth = $meth->first;
- if ($meth->name eq "const") {
- # As of 5.005_58, this case is probably obsoleted by the
- # method_named case above
- $meth = $self->const_sv($meth)->PV; # needs to be bare
- } else {
- $meth = $self->deparse($meth, 1);
- }
- }
- my $args = join(", ", @exprs);
- $kid = $obj . "->" . $meth;
- if ($args) {
- return $kid . "(" . $args . ")"; # parens mandatory
- } else {
- return $kid;
- }
-}
-
-# returns "&" if the prototype doesn't match the args,
-# or ("", $args_after_prototype_demunging) if it does.
-sub check_proto {
- my $self = shift;
- my($proto, @args) = @_;
- my($arg, $real);
- my $doneok = 0;
- my @reals;
- # An unbackslashed @ or % gobbles up the rest of the args
- $proto =~ s/([^\\]|^)([@%])(.*)$/$1$2/;
- while ($proto) {
- $proto =~ s/^ *([\\]?[\$\@&%*]|;)//;
- my $chr = $1;
- if ($chr eq "") {
- return "&" if @args;
- } elsif ($chr eq ";") {
- $doneok = 1;
- } elsif ($chr eq "@" or $chr eq "%") {
- push @reals, map($self->deparse($_, 6), @args);
- @args = ();
- } else {
- $arg = shift @args;
- last unless $arg;
- if ($chr eq "\$") {
- if (want_scalar $arg) {
- push @reals, $self->deparse($arg, 6);
- } else {
- return "&";
- }
- } elsif ($chr eq "&") {
- if ($arg->name =~ /^(s?refgen|undef)$/) {
- push @reals, $self->deparse($arg, 6);
- } else {
- return "&";
- }
- } elsif ($chr eq "*") {
- if ($arg->name =~ /^s?refgen$/
- and $arg->first->first->name eq "rv2gv")
- {
- $real = $arg->first->first; # skip refgen, null
- if ($real->first->name eq "gv") {
- push @reals, $self->deparse($real, 6);
- } else {
- push @reals, $self->deparse($real->first, 6);
- }
- } else {
- return "&";
- }
- } elsif (substr($chr, 0, 1) eq "\\") {
- $chr = substr($chr, 1);
- if ($arg->name =~ /^s?refgen$/ and
- !null($real = $arg->first) and
- ($chr eq "\$" && is_scalar($real->first)
- or ($chr eq "\@"
- && $real->first->sibling->name
- =~ /^(rv2|pad)av$/)
- or ($chr eq "%"
- && $real->first->sibling->name
- =~ /^(rv2|pad)hv$/)
- #or ($chr eq "&" # This doesn't work
- # && $real->first->name eq "rv2cv")
- or ($chr eq "*"
- && $real->first->name eq "rv2gv")))
- {
- push @reals, $self->deparse($real, 6);
- } else {
- return "&";
- }
- }
- }
- }
- return "&" if $proto and !$doneok; # too few args and no `;'
- return "&" if @args; # too many args
- return ("", join ", ", @reals);
-}
-
-sub pp_entersub {
- my $self = shift;
- my($op, $cx) = @_;
- return $self->method($op, $cx) unless null $op->first->sibling;
- my $prefix = "";
- my $amper = "";
- my($kid, @exprs);
- if ($op->flags & OPf_SPECIAL) {
- $prefix = "do ";
- } elsif ($op->private & OPpENTERSUB_AMPER) {
- $amper = "&";
- }
- $kid = $op->first;
- $kid = $kid->first->sibling; # skip ex-list, pushmark
- for (; not null $kid->sibling; $kid = $kid->sibling) {
- push @exprs, $kid;
- }
- my $simple = 0;
- my $proto = undef;
- if (is_scope($kid)) {
- $amper = "&";
- $kid = "{" . $self->deparse($kid, 0) . "}";
- } elsif ($kid->first->name eq "gv") {
- my $gv = $self->gv_or_padgv($kid->first);
- if (class($gv->CV) ne "SPECIAL") {
- $proto = $gv->CV->PV if $gv->CV->FLAGS & SVf_POK;
- }
- $simple = 1; # only calls of named functions can be prototyped
- $kid = $self->deparse($kid, 24);
- } elsif (is_scalar $kid->first) {
- $amper = "&";
- $kid = $self->deparse($kid, 24);
- } else {
- $prefix = "";
- my $arrow = is_subscriptable($kid->first) ? "" : "->";
- $kid = $self->deparse($kid, 24) . $arrow;
- }
- my $args;
- if (defined $proto and not $amper) {
- ($amper, $args) = $self->check_proto($proto, @exprs);
- if ($amper eq "&") {
- $args = join(", ", map($self->deparse($_, 6), @exprs));
- }
- } else {
- $args = join(", ", map($self->deparse($_, 6), @exprs));
- }
- if ($prefix or $amper) {
- if ($op->flags & OPf_STACKED) {
- return $prefix . $amper . $kid . "(" . $args . ")";
- } else {
- return $prefix . $amper. $kid;
- }
- } else {
- if (defined $proto and $proto eq "") {
- return $kid;
- } elsif (defined $proto and $proto eq "\$") {
- return $self->maybe_parens_func($kid, $args, $cx, 16);
- } elsif (defined($proto) && $proto or $simple) {
- return $self->maybe_parens_func($kid, $args, $cx, 5);
- } else {
- return "$kid(" . $args . ")";
- }
- }
-}
-
-sub pp_enterwrite { unop(@_, "write") }
-
-# escape things that cause interpolation in double quotes,
-# but not character escapes
-sub uninterp {
- my($str) = @_;
- $str =~ s/(^|[^\\])([\$\@]|\\[uUlLQE])/$1\\$2/g;
- return $str;
-}
-
-# the same, but treat $|, $), and $ at the end of the string differently
-sub re_uninterp {
- my($str) = @_;
- $str =~ s/(^|[^\\])(\@|\\[uUlLQE])/$1\\$2/g;
- $str =~ s/(^|[^\\])(\$[^)|])/$1\\$2/g;
- return $str;
-}
-
-# character escapes, but not delimiters that might need to be escaped
-sub escape_str { # ASCII
- my($str) = @_;
- $str =~ s/\a/\\a/g;
-# $str =~ s/\cH/\\b/g; # \b means someting different in a regex
- $str =~ s/\t/\\t/g;
- $str =~ s/\n/\\n/g;
- $str =~ s/\e/\\e/g;
- $str =~ s/\f/\\f/g;
- $str =~ s/\r/\\r/g;
- $str =~ s/([\cA-\cZ])/'\\c' . chr(ord('@') + ord($1))/ge;
- $str =~ s/([\0\033-\037\177-\377])/'\\' . sprintf("%03o", ord($1))/ge;
- return $str;
-}
-
-# Don't do this for regexen
-sub unback {
- my($str) = @_;
- $str =~ s/\\/\\\\/g;
- return $str;
-}
-
-sub balanced_delim {
- my($str) = @_;
- my @str = split //, $str;
- my($ar, $open, $close, $fail, $c, $cnt);
- for $ar (['[',']'], ['(',')'], ['<','>'], ['{','}']) {
- ($open, $close) = @$ar;
- $fail = 0; $cnt = 0;
- for $c (@str) {
- if ($c eq $open) {
- $cnt++;
- } elsif ($c eq $close) {
- $cnt--;
- if ($cnt < 0) {
- # qq()() isn't ")("
- $fail = 1;
- last;
- }
- }
- }
- $fail = 1 if $cnt != 0;
- return ($open, "$open$str$close") if not $fail;
- }
- return ("", $str);
-}
-
-sub single_delim {
- my($q, $default, $str) = @_;
- return "$default$str$default" if $default and index($str, $default) == -1;
- my($succeed, $delim);
- ($succeed, $str) = balanced_delim($str);
- return "$q$str" if $succeed;
- for $delim ('/', '"', '#') {
- return "$q$delim" . $str . $delim if index($str, $delim) == -1;
- }
- if ($default) {
- $str =~ s/$default/\\$default/g;
- return "$default$str$default";
- } else {
- $str =~ s[/][\\/]g;
- return "$q/$str/";
- }
-}
-
-sub const {
- my $sv = shift;
- if (class($sv) eq "SPECIAL") {
- return ('undef', '1', '0')[$$sv-1]; # sv_undef, sv_yes, sv_no
- } elsif ($sv->FLAGS & SVf_IOK) {
- return $sv->int_value;
- } elsif ($sv->FLAGS & SVf_NOK) {
- return $sv->NV;
- } elsif ($sv->FLAGS & SVf_ROK) {
- return "\\(" . const($sv->RV) . ")"; # constant folded
- } else {
- my $str = $sv->PV;
- if ($str =~ /[^ -~]/) { # ASCII for non-printing
- return single_delim("qq", '"', uninterp escape_str unback $str);
- } else {
- return single_delim("q", "'", unback $str);
- }
- }
-}
-
-sub const_sv {
- my $self = shift;
- my $op = shift;
- my $sv = $op->sv;
- # the constant could be in the pad (under useithreads)
- $sv = $self->padval($op->targ) unless $$sv;
- return $sv;
-}
-
-sub pp_const {
- my $self = shift;
- my($op, $cx) = @_;
-# if ($op->private & OPpCONST_BARE) { # trouble with `=>' autoquoting
-# return $self->const_sv($op)->PV;
-# }
- my $sv = $self->const_sv($op);
-# return const($sv);
- my $c = const $sv;
- return $c =~ /^-\d/ ? $self->maybe_parens($c, $cx, 21) : $c;
-}
-
-sub dq {
- my $self = shift;
- my $op = shift;
- my $type = $op->name;
- if ($type eq "const") {
- return uninterp(escape_str(unback($self->const_sv($op)->PV)));
- } elsif ($type eq "concat") {
- my $first = $self->dq($op->first);
- my $last = $self->dq($op->last);
- # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]"
- if ($last =~ /^[{\[\w]/) {
- $first =~ s/([%\$@])([A-Za-z_]\w*)$/${1}{$2}/;
- }
- return $first . $last;
- } elsif ($type eq "uc") {
- return '\U' . $self->dq($op->first->sibling) . '\E';
- } elsif ($type eq "lc") {
- return '\L' . $self->dq($op->first->sibling) . '\E';
- } elsif ($type eq "ucfirst") {
- return '\u' . $self->dq($op->first->sibling);
- } elsif ($type eq "lcfirst") {
- return '\l' . $self->dq($op->first->sibling);
- } elsif ($type eq "quotemeta") {
- return '\Q' . $self->dq($op->first->sibling) . '\E';
- } elsif ($type eq "join") {
- return $self->deparse($op->last, 26); # was join($", @ary)
- } else {
- return $self->deparse($op, 26);
- }
-}
-
-sub pp_backtick {
- my $self = shift;
- my($op, $cx) = @_;
- # skip pushmark
- return single_delim("qx", '`', $self->dq($op->first->sibling));
-}
-
-sub dquote {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first->sibling; # skip ex-stringify, pushmark
- return $self->deparse($kid, $cx) if $self->{'unquote'};
- $self->maybe_targmy($kid, $cx,
- sub {single_delim("qq", '"', $self->dq($_[1]))});
-}
-
-# OP_STRINGIFY is a listop, but it only ever has one arg
-sub pp_stringify { maybe_targmy(@_, \&dquote) }
-
-# tr/// and s/// (and tr[][], tr[]//, tr###, etc)
-# note that tr(from)/to/ is OK, but not tr/from/(to)
-sub double_delim {
- my($from, $to) = @_;
- my($succeed, $delim);
- if ($from !~ m[/] and $to !~ m[/]) {
- return "/$from/$to/";
- } elsif (($succeed, $from) = balanced_delim($from) and $succeed) {
- if (($succeed, $to) = balanced_delim($to) and $succeed) {
- return "$from$to";
- } else {
- for $delim ('/', '"', '#') { # note no `'' -- s''' is special
- return "$from$delim$to$delim" if index($to, $delim) == -1;
- }
- $to =~ s[/][\\/]g;
- return "$from/$to/";
- }
- } else {
- for $delim ('/', '"', '#') { # note no '
- return "$delim$from$delim$to$delim"
- if index($to . $from, $delim) == -1;
- }
- $from =~ s[/][\\/]g;
- $to =~ s[/][\\/]g;
- return "/$from/$to/";
- }
-}
-
-sub pchr { # ASCII
- my($n) = @_;
- if ($n == ord '\\') {
- return '\\\\';
- } elsif ($n >= ord(' ') and $n <= ord('~')) {
- return chr($n);
- } elsif ($n == ord "\a") {
- return '\\a';
- } elsif ($n == ord "\b") {
- return '\\b';
- } elsif ($n == ord "\t") {
- return '\\t';
- } elsif ($n == ord "\n") {
- return '\\n';
- } elsif ($n == ord "\e") {
- return '\\e';
- } elsif ($n == ord "\f") {
- return '\\f';
- } elsif ($n == ord "\r") {
- return '\\r';
- } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) {
- return '\\c' . chr(ord("@") + $n);
- } else {
-# return '\x' . sprintf("%02x", $n);
- return '\\' . sprintf("%03o", $n);
- }
-}
-
-sub collapse {
- my(@chars) = @_;
- my($str, $c, $tr) = ("");
- for ($c = 0; $c < @chars; $c++) {
- $tr = $chars[$c];
- $str .= pchr($tr);
- if ($c <= $#chars - 2 and $chars[$c + 1] == $tr + 1 and
- $chars[$c + 2] == $tr + 2)
- {
- for (; $c <= $#chars-1 and $chars[$c + 1] == $chars[$c] + 1; $c++)
- {}
- $str .= "-";
- $str .= pchr($chars[$c]);
- }
- }
- return $str;
-}
-
-# XXX This has trouble with hyphens in the replacement (tr/bac/-AC/),
-# and backslashes.
-
-sub tr_decode_byte {
- my($table, $flags) = @_;
- my(@table) = unpack("s256", $table);
- my($c, $tr, @from, @to, @delfrom, $delhyphen);
- if ($table[ord "-"] != -1 and
- $table[ord("-") - 1] == -1 || $table[ord("-") + 1] == -1)
- {
- $tr = $table[ord "-"];
- $table[ord "-"] = -1;
- if ($tr >= 0) {
- @from = ord("-");
- @to = $tr;
- } else { # -2 ==> delete
- $delhyphen = 1;
- }
- }
- for ($c = 0; $c < 256; $c++) {
- $tr = $table[$c];
- if ($tr >= 0) {
- push @from, $c; push @to, $tr;
- } elsif ($tr == -2) {
- push @delfrom, $c;
- }
- }
- @from = (@from, @delfrom);
- if ($flags & OPpTRANS_COMPLEMENT) {
- my @newfrom = ();
- my %from;
- @from{@from} = (1) x @from;
- for ($c = 0; $c < 256; $c++) {
- push @newfrom, $c unless $from{$c};
- }
- @from = @newfrom;
- }
- unless ($flags & OPpTRANS_DELETE || !@to) {
- pop @to while $#to and $to[$#to] == $to[$#to -1];
- }
- my($from, $to);
- $from = collapse(@from);
- $to = collapse(@to);
- $from .= "-" if $delhyphen;
- return ($from, $to);
-}
-
-sub tr_chr {
- my $x = shift;
- if ($x == ord "-") {
- return "\\-";
- } else {
- return chr $x;
- }
-}
-
-# XXX This doesn't yet handle all cases correctly either
-
-sub tr_decode_utf8 {
- my($swash_hv, $flags) = @_;
- my %swash = $swash_hv->ARRAY;
- my $final = undef;
- $final = $swash{'FINAL'}->IV if exists $swash{'FINAL'};
- my $none = $swash{"NONE"}->IV;
- my $extra = $none + 1;
- my(@from, @delfrom, @to);
- my $line;
- foreach $line (split /\n/, $swash{'LIST'}->PV) {
- my($min, $max, $result) = split(/\t/, $line);
- $min = hex $min;
- if (length $max) {
- $max = hex $max;
- } else {
- $max = $min;
- }
- $result = hex $result;
- if ($result == $extra) {
- push @delfrom, [$min, $max];
- } else {
- push @from, [$min, $max];
- push @to, [$result, $result + $max - $min];
- }
- }
- for my $i (0 .. $#from) {
- if ($from[$i][0] == ord '-') {
- unshift @from, splice(@from, $i, 1);
- unshift @to, splice(@to, $i, 1);
- last;
- } elsif ($from[$i][1] == ord '-') {
- $from[$i][1]--;
- $to[$i][1]--;
- unshift @from, ord '-';
- unshift @to, ord '-';
- last;
- }
- }
- for my $i (0 .. $#delfrom) {
- if ($delfrom[$i][0] == ord '-') {
- push @delfrom, splice(@delfrom, $i, 1);
- last;
- } elsif ($delfrom[$i][1] == ord '-') {
- $delfrom[$i][1]--;
- push @delfrom, ord '-';
- last;
- }
- }
- if (defined $final and $to[$#to][1] != $final) {
- push @to, [$final, $final];
- }
- push @from, @delfrom;
- if ($flags & OPpTRANS_COMPLEMENT) {
- my @newfrom;
- my $next = 0;
- for my $i (0 .. $#from) {
- push @newfrom, [$next, $from[$i][0] - 1];
- $next = $from[$i][1] + 1;
- }
- @from = ();
- for my $range (@newfrom) {
- if ($range->[0] <= $range->[1]) {
- push @from, $range;
- }
- }
- }
- my($from, $to, $diff);
- for my $chunk (@from) {
- $diff = $chunk->[1] - $chunk->[0];
- if ($diff > 1) {
- $from .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
- } elsif ($diff == 1) {
- $from .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
- } else {
- $from .= tr_chr($chunk->[0]);
- }
- }
- for my $chunk (@to) {
- $diff = $chunk->[1] - $chunk->[0];
- if ($diff > 1) {
- $to .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
- } elsif ($diff == 1) {
- $to .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
- } else {
- $to .= tr_chr($chunk->[0]);
- }
- }
- #$final = sprintf("%04x", $final) if defined $final;
- #$none = sprintf("%04x", $none) if defined $none;
- #$extra = sprintf("%04x", $extra) if defined $extra;
- #print STDERR "final: $final\n none: $none\nextra: $extra\n";
- #print STDERR $swash{'LIST'}->PV;
- return (escape_str($from), escape_str($to));
-}
-
-sub pp_trans {
- my $self = shift;
- my($op, $cx) = @_;
- my($from, $to);
- if (class($op) eq "PVOP") {
- ($from, $to) = tr_decode_byte($op->pv, $op->private);
- } else { # class($op) eq "SVOP"
- ($from, $to) = tr_decode_utf8($op->sv->RV, $op->private);
- }
- my $flags = "";
- $flags .= "c" if $op->private & OPpTRANS_COMPLEMENT;
- $flags .= "d" if $op->private & OPpTRANS_DELETE;
- $to = "" if $from eq $to and $flags eq "";
- $flags .= "s" if $op->private & OPpTRANS_SQUASH;
- return "tr" . double_delim($from, $to) . $flags;
-}
-
-# Like dq(), but different
-sub re_dq {
- my $self = shift;
- my $op = shift;
- my $type = $op->name;
- if ($type eq "const") {
- return re_uninterp($self->const_sv($op)->PV);
- } elsif ($type eq "concat") {
- my $first = $self->re_dq($op->first);
- my $last = $self->re_dq($op->last);
- # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]"
- if ($last =~ /^[{\[\w]/) {
- $first =~ s/([%\$@])([A-Za-z_]\w*)$/${1}{$2}/;
- }
- return $first . $last;
- } elsif ($type eq "uc") {
- return '\U' . $self->re_dq($op->first->sibling) . '\E';
- } elsif ($type eq "lc") {
- return '\L' . $self->re_dq($op->first->sibling) . '\E';
- } elsif ($type eq "ucfirst") {
- return '\u' . $self->re_dq($op->first->sibling);
- } elsif ($type eq "lcfirst") {
- return '\l' . $self->re_dq($op->first->sibling);
- } elsif ($type eq "quotemeta") {
- return '\Q' . $self->re_dq($op->first->sibling) . '\E';
- } elsif ($type eq "join") {
- return $self->deparse($op->last, 26); # was join($", @ary)
- } else {
- return $self->deparse($op, 26);
- }
-}
-
-sub pp_regcomp {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- $kid = $kid->first if $kid->name eq "regcmaybe";
- $kid = $kid->first if $kid->name eq "regcreset";
- return $self->re_dq($kid);
-}
-
-# osmic acid -- see osmium tetroxide
-
-my %matchwords;
-map($matchwords{join "", sort split //, $_} = $_, 'cig', 'cog', 'cos', 'cogs',
- 'cox', 'go', 'is', 'ism', 'iso', 'mig', 'mix', 'osmic', 'ox', 'sic',
- 'sig', 'six', 'smog', 'so', 'soc', 'sog', 'xi');
-
-sub matchop {
- my $self = shift;
- my($op, $cx, $name, $delim) = @_;
- my $kid = $op->first;
- my ($binop, $var, $re) = ("", "", "");
- if ($op->flags & OPf_STACKED) {
- $binop = 1;
- $var = $self->deparse($kid, 20);
- $kid = $kid->sibling;
- }
- if (null $kid) {
- $re = re_uninterp(escape_str($op->precomp));
- } else {
- $re = $self->deparse($kid, 1);
- }
- my $flags = "";
- $flags .= "c" if $op->pmflags & PMf_CONTINUE;
- $flags .= "g" if $op->pmflags & PMf_GLOBAL;
- $flags .= "i" if $op->pmflags & PMf_FOLD;
- $flags .= "m" if $op->pmflags & PMf_MULTILINE;
- $flags .= "o" if $op->pmflags & PMf_KEEP;
- $flags .= "s" if $op->pmflags & PMf_SINGLELINE;
- $flags .= "x" if $op->pmflags & PMf_EXTENDED;
- $flags = $matchwords{$flags} if $matchwords{$flags};
- if ($op->pmflags & PMf_ONCE) { # only one kind of delimiter works here
- $re =~ s/\?/\\?/g;
- $re = "?$re?";
- } else {
- $re = single_delim($name, $delim, $re);
- }
- $re = $re . $flags;
- if ($binop) {
- return $self->maybe_parens("$var =~ $re", $cx, 20);
- } else {
- return $re;
- }
-}
-
-sub pp_match { matchop(@_, "m", "/") }
-sub pp_pushre { matchop(@_, "m", "/") }
-sub pp_qr { matchop(@_, "qr", "") }
-
-sub pp_split {
- my $self = shift;
- my($op, $cx) = @_;
- my($kid, @exprs, $ary, $expr);
- $kid = $op->first;
- if ($ {$kid->pmreplroot}) {
- $ary = '@' . $self->gv_name($kid->pmreplroot);
- }
- for (; !null($kid); $kid = $kid->sibling) {
- push @exprs, $self->deparse($kid, 6);
- }
- $expr = "split(" . join(", ", @exprs) . ")";
- if ($ary) {
- return $self->maybe_parens("$ary = $expr", $cx, 7);
- } else {
- return $expr;
- }
-}
-
-# oxime -- any of various compounds obtained chiefly by the action of
-# hydroxylamine on aldehydes and ketones and characterized by the
-# bivalent grouping C=NOH [Webster's Tenth]
-
-my %substwords;
-map($substwords{join "", sort split //, $_} = $_, 'ego', 'egoism', 'em',
- 'es', 'ex', 'exes', 'gee', 'go', 'goes', 'ie', 'ism', 'iso', 'me',
- 'meese', 'meso', 'mig', 'mix', 'os', 'ox', 'oxime', 'see', 'seem',
- 'seg', 'sex', 'sig', 'six', 'smog', 'sog', 'some', 'xi');
-
-sub pp_subst {
- my $self = shift;
- my($op, $cx) = @_;
- my $kid = $op->first;
- my($binop, $var, $re, $repl) = ("", "", "", "");
- if ($op->flags & OPf_STACKED) {
- $binop = 1;
- $var = $self->deparse($kid, 20);
- $kid = $kid->sibling;
- }
- my $flags = "";
- if (null($op->pmreplroot)) {
- $repl = $self->dq($kid);
- $kid = $kid->sibling;
- } else {
- $repl = $op->pmreplroot->first; # skip substcont
- while ($repl->name eq "entereval") {
- $repl = $repl->first;
- $flags .= "e";
- }
- if ($op->pmflags & PMf_EVAL) {
- $repl = $self->deparse($repl, 0);
- } else {
- $repl = $self->dq($repl);
- }
- }
- if (null $kid) {
- $re = re_uninterp(escape_str($op->precomp));
- } else {
- $re = $self->deparse($kid, 1);
- }
- $flags .= "e" if $op->pmflags & PMf_EVAL;
- $flags .= "g" if $op->pmflags & PMf_GLOBAL;
- $flags .= "i" if $op->pmflags & PMf_FOLD;
- $flags .= "m" if $op->pmflags & PMf_MULTILINE;
- $flags .= "o" if $op->pmflags & PMf_KEEP;
- $flags .= "s" if $op->pmflags & PMf_SINGLELINE;
- $flags .= "x" if $op->pmflags & PMf_EXTENDED;
- $flags = $substwords{$flags} if $substwords{$flags};
- if ($binop) {
- return $self->maybe_parens("$var =~ s"
- . double_delim($re, $repl) . $flags,
- $cx, 20);
- } else {
- return "s". double_delim($re, $repl) . $flags;
- }
-}
-
-1;
-__END__
-
-=head1 NAME
-
-B::Deparse - Perl compiler backend to produce perl code
-
-=head1 SYNOPSIS
-
-B<perl> B<-MO=Deparse>[B<,-u>I<PACKAGE>][B<,-p>][B<,-q>][B<,-l>]
- [B<,-s>I<LETTERS>][B<,-x>I<LEVEL>] I<prog.pl>
-
-=head1 DESCRIPTION
-
-B::Deparse is a backend module for the Perl compiler that generates
-perl source code, based on the internal compiled structure that perl
-itself creates after parsing a program. The output of B::Deparse won't
-be exactly the same as the original source, since perl doesn't keep
-track of comments or whitespace, and there isn't a one-to-one
-correspondence between perl's syntactical constructions and their
-compiled form, but it will often be close. When you use the B<-p>
-option, the output also includes parentheses even when they are not
-required by precedence, which can make it easy to see if perl is
-parsing your expressions the way you intended.
-
-Please note that this module is mainly new and untested code and is
-still under development, so it may change in the future.
-
-=head1 OPTIONS
-
-As with all compiler backend options, these must follow directly after
-the '-MO=Deparse', separated by a comma but not any white space.
-
-=over 4
-
-=item B<-l>
-
-Add '#line' declarations to the output based on the line and file
-locations of the original code.
-
-=item B<-p>
-
-Print extra parentheses. Without this option, B::Deparse includes
-parentheses in its output only when they are needed, based on the
-structure of your program. With B<-p>, it uses parentheses (almost)
-whenever they would be legal. This can be useful if you are used to
-LISP, or if you want to see how perl parses your input. If you say
-
- if ($var & 0x7f == 65) {print "Gimme an A!"}
- print ($which ? $a : $b), "\n";
- $name = $ENV{USER} or "Bob";
-
-C<B::Deparse,-p> will print
-
- if (($var & 0)) {
- print('Gimme an A!')
- };
- (print(($which ? $a : $b)), '???');
- (($name = $ENV{'USER'}) or '???')
-
-which probably isn't what you intended (the C<'???'> is a sign that
-perl optimized away a constant value).
-
-=item B<-q>
-
-Expand double-quoted strings into the corresponding combinations of
-concatenation, uc, ucfirst, lc, lcfirst, quotemeta, and join. For
-instance, print
-
- print "Hello, $world, @ladies, \u$gentlemen\E, \u\L$me!";
-
-as
-
- print 'Hello, ' . $world . ', ' . join($", @ladies) . ', '
- . ucfirst($gentlemen) . ', ' . ucfirst(lc $me . '!');
-
-Note that the expanded form represents the way perl handles such
-constructions internally -- this option actually turns off the reverse
-translation that B::Deparse usually does. On the other hand, note that
-C<$x = "$y"> is not the same as C<$x = $y>: the former makes the value
-of $y into a string before doing the assignment.
-
-=item B<-u>I<PACKAGE>
-
-Normally, B::Deparse deparses the main code of a program, all the subs
-called by the main program (and all the subs called by them,
-recursively), and any other subs in the main:: package. To include
-subs in other packages that aren't called directly, such as AUTOLOAD,
-DESTROY, other subs called automatically by perl, and methods (which
-aren't resolved to subs until runtime), use the B<-u> option. The
-argument to B<-u> is the name of a package, and should follow directly
-after the 'u'. Multiple B<-u> options may be given, separated by
-commas. Note that unlike some other backends, B::Deparse doesn't
-(yet) try to guess automatically when B<-u> is needed -- you must
-invoke it yourself.
-
-=item B<-s>I<LETTERS>
-
-Tweak the style of B::Deparse's output. The letters should follow
-directly after the 's', with no space or punctuation. The following
-options are available:
-
-=over 4
-
-=item B<C>
-
-Cuddle C<elsif>, C<else>, and C<continue> blocks. For example, print
-
- if (...) {
- ...
- } else {
- ...
- }
-
-instead of
-
- if (...) {
- ...
- }
- else {
- ...
- }
-
-The default is not to cuddle.
-
-=item B<i>I<NUMBER>
-
-Indent lines by multiples of I<NUMBER> columns. The default is 4 columns.
-
-=item B<T>
-
-Use tabs for each 8 columns of indent. The default is to use only spaces.
-For instance, if the style options are B<-si4T>, a line that's indented
-3 times will be preceded by one tab and four spaces; if the options were
-B<-si8T>, the same line would be preceded by three tabs.
-
-=item B<v>I<STRING>B<.>
-
-Print I<STRING> for the value of a constant that can't be determined
-because it was optimized away (mnemonic: this happens when a constant
-is used in B<v>oid context). The end of the string is marked by a period.
-The string should be a valid perl expression, generally a constant.
-Note that unless it's a number, it probably needs to be quoted, and on
-a command line quotes need to be protected from the shell. Some
-conventional values include 0, 1, 42, '', 'foo', and
-'Useless use of constant omitted' (which may need to be
-B<-sv"'Useless use of constant omitted'.">
-or something similar depending on your shell). The default is '???'.
-If you're using B::Deparse on a module or other file that's require'd,
-you shouldn't use a value that evaluates to false, since the customary
-true constant at the end of a module will be in void context when the
-file is compiled as a main program.
-
-=back
-
-=item B<-x>I<LEVEL>
-
-Expand conventional syntax constructions into equivalent ones that expose
-their internal operation. I<LEVEL> should be a digit, with higher values
-meaning more expansion. As with B<-q>, this actually involves turning off
-special cases in B::Deparse's normal operations.
-
-If I<LEVEL> is at least 3, for loops will be translated into equivalent
-while loops with continue blocks; for instance
-
- for ($i = 0; $i < 10; ++$i) {
- print $i;
- }
-
-turns into
-
- $i = 0;
- while ($i < 10) {
- print $i;
- } continue {
- ++$i
- }
-
-Note that in a few cases this translation can't be perfectly carried back
-into the source code -- if the loop's initializer declares a my variable,
-for instance, it won't have the correct scope outside of the loop.
-
-If I<LEVEL> is at least 7, if statements will be translated into equivalent
-expressions using C<&&>, C<?:> and C<do {}>; for instance
-
- print 'hi' if $nice;
- if ($nice) {
- print 'hi';
- }
- if ($nice) {
- print 'hi';
- } else {
- print 'bye';
- }
-
-turns into
-
- $nice and print 'hi';
- $nice and do { print 'hi' };
- $nice ? do { print 'hi' } : do { print 'bye' };
-
-Long sequences of elsifs will turn into nested ternary operators, which
-B::Deparse doesn't know how to indent nicely.
-
-=back
-
-=head1 USING B::Deparse AS A MODULE
-
-=head2 Synopsis
-
- use B::Deparse;
- $deparse = B::Deparse->new("-p", "-sC");
- $body = $deparse->coderef2text(\&func);
- eval "sub func $body"; # the inverse operation
-
-=head2 Description
-
-B::Deparse can also be used on a sub-by-sub basis from other perl
-programs.
-
-=head2 new
-
- $deparse = B::Deparse->new(OPTIONS)
-
-Create an object to store the state of a deparsing operation and any
-options. The options are the same as those that can be given on the
-command line (see L</OPTIONS>); options that are separated by commas
-after B<-MO=Deparse> should be given as separate strings. Some
-options, like B<-u>, don't make sense for a single subroutine, so
-don't pass them.
-
-=head2 coderef2text
-
- $body = $deparse->coderef2text(\&func)
- $body = $deparse->coderef2text(sub ($$) { ... })
-
-Return source code for the body of a subroutine (a block, optionally
-preceded by a prototype in parens), given a reference to the
-sub. Because a subroutine can have no names, or more than one name,
-this method doesn't return a complete subroutine definition -- if you
-want to eval the result, you should prepend "sub subname ", or "sub "
-for an anonymous function constructor. Unless the sub was defined in
-the main:: package, the code will include a package declaration.
-
-=head1 BUGS
-
-See the 'to do' list at the beginning of the module file.
-
-=head1 AUTHOR
-
-Stephen McCamant <smcc@CSUA.Berkeley.EDU>, based on an earlier
-version by Malcolm Beattie <mbeattie@sable.ox.ac.uk>, with
-contributions from Gisle Aas, James Duncan, Albert Dvornik, Hugo van
-der Sanden, Gurusamy Sarathy, and Nick Ing-Simmons.
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Disassembler.pm b/contrib/perl5/ext/B/B/Disassembler.pm
deleted file mode 100644
index 212532b..0000000
--- a/contrib/perl5/ext/B/B/Disassembler.pm
+++ /dev/null
@@ -1,185 +0,0 @@
-# Disassembler.pm
-#
-# Copyright (c) 1996 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-package B::Disassembler::BytecodeStream;
-use FileHandle;
-use Carp;
-use B qw(cstring cast_I32);
-@ISA = qw(FileHandle);
-sub readn {
- my ($fh, $len) = @_;
- my $data;
- read($fh, $data, $len);
- croak "reached EOF while reading $len bytes" unless length($data) == $len;
- return $data;
-}
-
-sub GET_U8 {
- my $fh = shift;
- my $c = $fh->getc;
- croak "reached EOF while reading U8" unless defined($c);
- return ord($c);
-}
-
-sub GET_U16 {
- my $fh = shift;
- my $str = $fh->readn(2);
- croak "reached EOF while reading U16" unless length($str) == 2;
- return unpack("n", $str);
-}
-
-sub GET_NV {
- my $fh = shift;
- my $str = $fh->readn(8);
- croak "reached EOF while reading NV" unless length($str) == 8;
- return unpack("N", $str);
-}
-
-sub GET_U32 {
- my $fh = shift;
- my $str = $fh->readn(4);
- croak "reached EOF while reading U32" unless length($str) == 4;
- return unpack("N", $str);
-}
-
-sub GET_I32 {
- my $fh = shift;
- my $str = $fh->readn(4);
- croak "reached EOF while reading I32" unless length($str) == 4;
- return cast_I32(unpack("N", $str));
-}
-
-sub GET_objindex {
- my $fh = shift;
- my $str = $fh->readn(4);
- croak "reached EOF while reading objindex" unless length($str) == 4;
- return unpack("N", $str);
-}
-
-sub GET_opindex {
- my $fh = shift;
- my $str = $fh->readn(4);
- croak "reached EOF while reading opindex" unless length($str) == 4;
- return unpack("N", $str);
-}
-
-sub GET_svindex {
- my $fh = shift;
- my $str = $fh->readn(4);
- croak "reached EOF while reading svindex" unless length($str) == 4;
- return unpack("N", $str);
-}
-
-sub GET_strconst {
- my $fh = shift;
- my ($str, $c);
- while (defined($c = $fh->getc) && $c ne "\0") {
- $str .= $c;
- }
- croak "reached EOF while reading strconst" unless defined($c);
- return cstring($str);
-}
-
-sub GET_pvcontents {}
-
-sub GET_PV {
- my $fh = shift;
- my $str;
- my $len = $fh->GET_U32;
- if ($len) {
- read($fh, $str, $len);
- croak "reached EOF while reading PV" unless length($str) == $len;
- return cstring($str);
- } else {
- return '""';
- }
-}
-
-sub GET_comment_t {
- my $fh = shift;
- my ($str, $c);
- while (defined($c = $fh->getc) && $c ne "\n") {
- $str .= $c;
- }
- croak "reached EOF while reading comment" unless defined($c);
- return cstring($str);
-}
-
-sub GET_double {
- my $fh = shift;
- my ($str, $c);
- while (defined($c = $fh->getc) && $c ne "\0") {
- $str .= $c;
- }
- croak "reached EOF while reading double" unless defined($c);
- return $str;
-}
-
-sub GET_none {}
-
-sub GET_op_tr_array {
- my $fh = shift;
- my @ary = unpack("n256", $fh->readn(256 * 2));
- return join(",", @ary);
-}
-
-sub GET_IV64 {
- my $fh = shift;
- my ($hi, $lo) = unpack("NN", $fh->readn(8));
- return sprintf("0x%4x%04x", $hi, $lo); # cheat
-}
-
-package B::Disassembler;
-use Exporter;
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(disassemble_fh);
-use Carp;
-use strict;
-
-use B::Asmdata qw(%insn_data @insn_name);
-
-sub disassemble_fh {
- my ($fh, $out) = @_;
- my ($c, $getmeth, $insn, $arg);
- bless $fh, "B::Disassembler::BytecodeStream";
- while (defined($c = $fh->getc)) {
- $c = ord($c);
- $insn = $insn_name[$c];
- if (!defined($insn) || $insn eq "unused") {
- my $pos = $fh->tell - 1;
- die "Illegal instruction code $c at stream offset $pos\n";
- }
- $getmeth = $insn_data{$insn}->[2];
- $arg = $fh->$getmeth();
- if (defined($arg)) {
- &$out($insn, $arg);
- } else {
- &$out($insn);
- }
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Disassembler - Disassemble Perl bytecode
-
-=head1 SYNOPSIS
-
- use Disassembler;
-
-=head1 DESCRIPTION
-
-See F<ext/B/B/Disassembler.pm>.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Lint.pm b/contrib/perl5/ext/B/B/Lint.pm
deleted file mode 100644
index 094b3cf..0000000
--- a/contrib/perl5/ext/B/B/Lint.pm
+++ /dev/null
@@ -1,362 +0,0 @@
-package B::Lint;
-
-=head1 NAME
-
-B::Lint - Perl lint
-
-=head1 SYNOPSIS
-
-perl -MO=Lint[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-The B::Lint module is equivalent to an extended version of the B<-w>
-option of B<perl>. It is named after the program B<lint> which carries
-out a similar process for C programs.
-
-=head1 OPTIONS AND LINT CHECKS
-
-Option words are separated by commas (not whitespace) and follow the
-usual conventions of compiler backend options. Following any options
-(indicated by a leading B<->) come lint check arguments. Each such
-argument (apart from the special B<all> and B<none> options) is a
-word representing one possible lint check (turning on that check) or
-is B<no-foo> (turning off that check). Before processing the check
-arguments, a standard list of checks is turned on. Later options
-override earlier ones. Available options are:
-
-=over 8
-
-=item B<context>
-
-Produces a warning whenever an array is used in an implicit scalar
-context. For example, both of the lines
-
- $foo = length(@bar);
- $foo = @bar;
-will elicit a warning. Using an explicit B<scalar()> silences the
-warning. For example,
-
- $foo = scalar(@bar);
-
-=item B<implicit-read> and B<implicit-write>
-
-These options produce a warning whenever an operation implicitly
-reads or (respectively) writes to one of Perl's special variables.
-For example, B<implicit-read> will warn about these:
-
- /foo/;
-
-and B<implicit-write> will warn about these:
-
- s/foo/bar/;
-
-Both B<implicit-read> and B<implicit-write> warn about this:
-
- for (@a) { ... }
-
-=item B<dollar-underscore>
-
-This option warns whenever $_ is used either explicitly anywhere or
-as the implicit argument of a B<print> statement.
-
-=item B<private-names>
-
-This option warns on each use of any variable, subroutine or
-method name that lives in a non-current package but begins with
-an underscore ("_"). Warnings aren't issued for the special case
-of the single character name "_" by itself (e.g. $_ and @_).
-
-=item B<undefined-subs>
-
-This option warns whenever an undefined subroutine is invoked.
-This option will only catch explicitly invoked subroutines such
-as C<foo()> and not indirect invocations such as C<&$subref()>
-or C<$obj-E<gt>meth()>. Note that some programs or modules delay
-definition of subs until runtime by means of the AUTOLOAD
-mechanism.
-
-=item B<regexp-variables>
-
-This option warns whenever one of the regexp variables $', $& or
-$' is used. Any occurrence of any of these variables in your
-program can slow your whole program down. See L<perlre> for
-details.
-
-=item B<all>
-
-Turn all warnings on.
-
-=item B<none>
-
-Turn all warnings off.
-
-=back
-
-=head1 NON LINT-CHECK OPTIONS
-
-=over 8
-
-=item B<-u Package>
-
-Normally, Lint only checks the main code of the program together
-with all subs defined in package main. The B<-u> option lets you
-include other package names whose subs are then checked by Lint.
-
-=back
-
-=head1 BUGS
-
-This is only a very preliminary version.
-
-=head1 AUTHOR
-
-Malcolm Beattie, mbeattie@sable.ox.ac.uk.
-
-=cut
-
-use strict;
-use B qw(walkoptree main_root walksymtable svref_2object parents
- OPf_WANT_LIST OPf_WANT OPf_STACKED G_ARRAY
- );
-
-my $file = "unknown"; # shadows current filename
-my $line = 0; # shadows current line number
-my $curstash = "main"; # shadows current stash
-
-# Lint checks
-my %check;
-my %implies_ok_context;
-BEGIN {
- map($implies_ok_context{$_}++,
- qw(scalar av2arylen aelem aslice helem hslice
- keys values hslice defined undef delete));
-}
-
-# Lint checks turned on by default
-my @default_checks = qw(context);
-
-my %valid_check;
-# All valid checks
-BEGIN {
- map($valid_check{$_}++,
- qw(context implicit_read implicit_write dollar_underscore
- private_names undefined_subs regexp_variables));
-}
-
-# Debugging options
-my ($debug_op);
-
-my %done_cv; # used to mark which subs have already been linted
-my @extra_packages; # Lint checks mainline code and all subs which are
- # in main:: or in one of these packages.
-
-sub warning {
- my $format = (@_ < 2) ? "%s" : shift;
- warn sprintf("$format at %s line %d\n", @_, $file, $line);
-}
-
-# This gimme can't cope with context that's only determined
-# at runtime via dowantarray().
-sub gimme {
- my $op = shift;
- my $flags = $op->flags;
- if ($flags & OPf_WANT) {
- return(($flags & OPf_WANT_LIST) ? 1 : 0);
- }
- return undef;
-}
-
-sub B::OP::lint {}
-
-sub B::COP::lint {
- my $op = shift;
- if ($op->name eq "nextstate") {
- $file = $op->file;
- $line = $op->line;
- $curstash = $op->stash->NAME;
- }
-}
-
-sub B::UNOP::lint {
- my $op = shift;
- my $opname = $op->name;
- if ($check{context} && ($opname eq "rv2av" || $opname eq "rv2hv")) {
- my $parent = parents->[0];
- my $pname = $parent->name;
- return if gimme($op) || $implies_ok_context{$pname};
- # Two special cases to deal with: "foreach (@foo)" and "delete $a{$b}"
- # null out the parent so we have to check for a parent of pp_null and
- # a grandparent of pp_enteriter or pp_delete
- if ($pname eq "null") {
- my $gpname = parents->[1]->name;
- return if $gpname eq "enteriter" || $gpname eq "delete";
- }
- warning("Implicit scalar context for %s in %s",
- $opname eq "rv2av" ? "array" : "hash", $parent->desc);
- }
- if ($check{private_names} && $opname eq "method") {
- my $methop = $op->first;
- if ($methop->name eq "const") {
- my $method = $methop->sv->PV;
- if ($method =~ /^_/ && !defined(&{"$curstash\::$method"})) {
- warning("Illegal reference to private method name $method");
- }
- }
- }
-}
-
-sub B::PMOP::lint {
- my $op = shift;
- if ($check{implicit_read}) {
- if ($op->name eq "match" && !($op->flags & OPf_STACKED)) {
- warning('Implicit match on $_');
- }
- }
- if ($check{implicit_write}) {
- if ($op->name eq "subst" && !($op->flags & OPf_STACKED)) {
- warning('Implicit substitution on $_');
- }
- }
-}
-
-sub B::LOOP::lint {
- my $op = shift;
- if ($check{implicit_read} || $check{implicit_write}) {
- if ($op->name eq "enteriter") {
- my $last = $op->last;
- if ($last->name eq "gv" && $last->gv->NAME eq "_") {
- warning('Implicit use of $_ in foreach');
- }
- }
- }
-}
-
-sub B::SVOP::lint {
- my $op = shift;
- if ($check{dollar_underscore} && $op->name eq "gvsv"
- && $op->gv->NAME eq "_")
- {
- warning('Use of $_');
- }
- if ($check{private_names}) {
- my $opname = $op->name;
- if ($opname eq "gv" || $opname eq "gvsv") {
- my $gv = $op->gv;
- if ($gv->NAME =~ /^_./ && $gv->STASH->NAME ne $curstash) {
- warning('Illegal reference to private name %s', $gv->NAME);
- }
- }
- }
- if ($check{undefined_subs}) {
- if ($op->name eq "gv"
- && $op->next->name eq "entersub")
- {
- my $gv = $op->gv;
- my $subname = $gv->STASH->NAME . "::" . $gv->NAME;
- no strict 'refs';
- if (!defined(&$subname)) {
- $subname =~ s/^main:://;
- warning('Undefined subroutine %s called', $subname);
- }
- }
- }
- if ($check{regexp_variables} && $op->name eq "gvsv") {
- my $name = $op->gv->NAME;
- if ($name =~ /^[&'`]$/) {
- warning('Use of regexp variable $%s', $name);
- }
- }
-}
-
-sub B::GV::lintcv {
- my $gv = shift;
- my $cv = $gv->CV;
- #warn sprintf("lintcv: %s::%s (done=%d)\n",
- # $gv->STASH->NAME, $gv->NAME, $done_cv{$$cv});#debug
- return if !$$cv || $done_cv{$$cv}++;
- my $root = $cv->ROOT;
- #warn " root = $root (0x$$root)\n";#debug
- walkoptree($root, "lint") if $$root;
-}
-
-sub do_lint {
- my %search_pack;
- walkoptree(main_root, "lint") if ${main_root()};
-
- # Now do subs in main
- no strict qw(vars refs);
- my $sym;
- local(*glob);
- while (($sym, *glob) = each %{"main::"}) {
- #warn "Trying $sym\n";#debug
- svref_2object(\*glob)->EGV->lintcv unless $sym =~ /::$/;
- }
-
- # Now do subs in non-main packages given by -u options
- map { $search_pack{$_} = 1 } @extra_packages;
- walksymtable(\%{"main::"}, "lintcv", sub {
- my $package = shift;
- $package =~ s/::$//;
- #warn "Considering $package\n";#debug
- return exists $search_pack{$package};
- });
-}
-
-sub compile {
- my @options = @_;
- my ($option, $opt, $arg);
- # Turn on default lint checks
- for $opt (@default_checks) {
- $check{$opt} = 1;
- }
- OPTION:
- while ($option = shift @options) {
- if ($option =~ /^-(.)(.*)/) {
- $opt = $1;
- $arg = $2;
- } else {
- unshift @options, $option;
- last OPTION;
- }
- if ($opt eq "-" && $arg eq "-") {
- shift @options;
- last OPTION;
- } elsif ($opt eq "D") {
- $arg ||= shift @options;
- foreach $arg (split(//, $arg)) {
- if ($arg eq "o") {
- B->debug(1);
- } elsif ($arg eq "O") {
- $debug_op = 1;
- }
- }
- } elsif ($opt eq "u") {
- $arg ||= shift @options;
- push(@extra_packages, $arg);
- }
- }
- foreach $opt (@default_checks, @options) {
- $opt =~ tr/-/_/;
- if ($opt eq "all") {
- %check = %valid_check;
- }
- elsif ($opt eq "none") {
- %check = ();
- }
- else {
- if ($opt =~ s/^no-//) {
- $check{$opt} = 0;
- }
- else {
- $check{$opt} = 1;
- }
- warn "No such check: $opt\n" unless defined $valid_check{$opt};
- }
- }
- # Remaining arguments are things to check
-
- return \&do_lint;
-}
-
-1;
diff --git a/contrib/perl5/ext/B/B/Showlex.pm b/contrib/perl5/ext/B/B/Showlex.pm
deleted file mode 100644
index 842ca3e..0000000
--- a/contrib/perl5/ext/B/B/Showlex.pm
+++ /dev/null
@@ -1,97 +0,0 @@
-package B::Showlex;
-use strict;
-use B qw(svref_2object comppadlist class);
-use B::Terse ();
-
-#
-# Invoke as
-# perl -MO=Showlex,foo bar.pl
-# to see the names of lexical variables used by &foo
-# or as
-# perl -MO=Showlex bar.pl
-# to see the names of file scope lexicals used by bar.pl
-#
-
-sub shownamearray {
- my ($name, $av) = @_;
- my @els = $av->ARRAY;
- my $count = @els;
- my $i;
- print "$name has $count entries\n";
- for ($i = 0; $i < $count; $i++) {
- print "$i: ";
- my $sv = $els[$i];
- if (class($sv) ne "SPECIAL") {
- printf "%s (0x%lx) %s\n", class($sv), $$sv, $sv->PVX;
- } else {
- $sv->terse;
- }
- }
-}
-
-sub showvaluearray {
- my ($name, $av) = @_;
- my @els = $av->ARRAY;
- my $count = @els;
- my $i;
- print "$name has $count entries\n";
- for ($i = 0; $i < $count; $i++) {
- print "$i: ";
- $els[$i]->terse;
- }
-}
-
-sub showlex {
- my ($objname, $namesav, $valsav) = @_;
- shownamearray("Pad of lexical names for $objname", $namesav);
- showvaluearray("Pad of lexical values for $objname", $valsav);
-}
-
-sub showlex_obj {
- my ($objname, $obj) = @_;
- $objname =~ s/^&main::/&/;
- showlex($objname, svref_2object($obj)->PADLIST->ARRAY);
-}
-
-sub showlex_main {
- showlex("comppadlist", comppadlist->ARRAY);
-}
-
-sub compile {
- my @options = @_;
- if (@options) {
- return sub {
- my $objname;
- foreach $objname (@options) {
- $objname = "main::$objname" unless $objname =~ /::/;
- eval "showlex_obj('&$objname', \\&$objname)";
- }
- }
- } else {
- return \&showlex_main;
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Showlex - Show lexical variables used in functions or files
-
-=head1 SYNOPSIS
-
- perl -MO=Showlex[,SUBROUTINE] foo.pl
-
-=head1 DESCRIPTION
-
-When a subroutine name is provided in OPTIONS, prints the lexical
-variables used in that subroutine. Otherwise, prints the file-scope
-lexicals in the file.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Stackobj.pm b/contrib/perl5/ext/B/B/Stackobj.pm
deleted file mode 100644
index 0db3e33..0000000
--- a/contrib/perl5/ext/B/B/Stackobj.pm
+++ /dev/null
@@ -1,346 +0,0 @@
-# Stackobj.pm
-#
-# Copyright (c) 1996 Malcolm Beattie
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-package B::Stackobj;
-use Exporter ();
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(set_callback T_UNKNOWN T_DOUBLE T_INT VALID_UNSIGNED
- VALID_INT VALID_DOUBLE VALID_SV REGISTER TEMPORARY);
-%EXPORT_TAGS = (types => [qw(T_UNKNOWN T_DOUBLE T_INT)],
- flags => [qw(VALID_INT VALID_DOUBLE VALID_SV
- VALID_UNSIGNED REGISTER TEMPORARY)]);
-
-use Carp qw(confess);
-use strict;
-use B qw(class SVf_IOK SVf_NOK SVf_IVisUV);
-
-# Types
-sub T_UNKNOWN () { 0 }
-sub T_DOUBLE () { 1 }
-sub T_INT () { 2 }
-sub T_SPECIAL () { 3 }
-
-# Flags
-sub VALID_INT () { 0x01 }
-sub VALID_UNSIGNED () { 0x02 }
-sub VALID_DOUBLE () { 0x04 }
-sub VALID_SV () { 0x08 }
-sub REGISTER () { 0x10 } # no implicit write-back when calling subs
-sub TEMPORARY () { 0x20 } # no implicit write-back needed at all
-sub SAVE_INT () { 0x40 } #if int part needs to be saved at all
-sub SAVE_DOUBLE () { 0x80 } #if double part needs to be saved at all
-
-
-#
-# Callback for runtime code generation
-#
-my $runtime_callback = sub { confess "set_callback not yet called" };
-sub set_callback (&) { $runtime_callback = shift }
-sub runtime { &$runtime_callback(@_) }
-
-#
-# Methods
-#
-
-sub write_back { confess "stack object does not implement write_back" }
-
-sub invalidate { shift->{flags} &= ~(VALID_INT |VALID_UNSIGNED | VALID_DOUBLE) }
-
-sub as_sv {
- my $obj = shift;
- if (!($obj->{flags} & VALID_SV)) {
- $obj->write_back;
- $obj->{flags} |= VALID_SV;
- }
- return $obj->{sv};
-}
-
-sub as_int {
- my $obj = shift;
- if (!($obj->{flags} & VALID_INT)) {
- $obj->load_int;
- $obj->{flags} |= VALID_INT|SAVE_INT;
- }
- return $obj->{iv};
-}
-
-sub as_double {
- my $obj = shift;
- if (!($obj->{flags} & VALID_DOUBLE)) {
- $obj->load_double;
- $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE;
- }
- return $obj->{nv};
-}
-
-sub as_numeric {
- my $obj = shift;
- return $obj->{type} == T_INT ? $obj->as_int : $obj->as_double;
-}
-
-sub as_bool {
- my $obj=shift;
- if ($obj->{flags} & VALID_INT ){
- return $obj->{iv};
- }
- if ($obj->{flags} & VALID_DOUBLE ){
- return $obj->{nv};
- }
- return sprintf("(SvTRUE(%s))", $obj->as_sv) ;
-}
-
-#
-# Debugging methods
-#
-sub peek {
- my $obj = shift;
- my $type = $obj->{type};
- my $flags = $obj->{flags};
- my @flags;
- if ($type == T_UNKNOWN) {
- $type = "T_UNKNOWN";
- } elsif ($type == T_INT) {
- $type = "T_INT";
- } elsif ($type == T_DOUBLE) {
- $type = "T_DOUBLE";
- } else {
- $type = "(illegal type $type)";
- }
- push(@flags, "VALID_INT") if $flags & VALID_INT;
- push(@flags, "VALID_DOUBLE") if $flags & VALID_DOUBLE;
- push(@flags, "VALID_SV") if $flags & VALID_SV;
- push(@flags, "REGISTER") if $flags & REGISTER;
- push(@flags, "TEMPORARY") if $flags & TEMPORARY;
- @flags = ("none") unless @flags;
- return sprintf("%s type=$type flags=%s sv=$obj->{sv}",
- class($obj), join("|", @flags));
-}
-
-sub minipeek {
- my $obj = shift;
- my $type = $obj->{type};
- my $flags = $obj->{flags};
- if ($type == T_INT || $flags & VALID_INT) {
- return $obj->{iv};
- } elsif ($type == T_DOUBLE || $flags & VALID_DOUBLE) {
- return $obj->{nv};
- } else {
- return $obj->{sv};
- }
-}
-
-#
-# Caller needs to ensure that set_int, set_double,
-# set_numeric and set_sv are only invoked on legal lvalues.
-#
-sub set_int {
- my ($obj, $expr,$unsigned) = @_;
- runtime("$obj->{iv} = $expr;");
- $obj->{flags} &= ~(VALID_SV | VALID_DOUBLE);
- $obj->{flags} |= VALID_INT|SAVE_INT;
- $obj->{flags} |= VALID_UNSIGNED if $unsigned;
-}
-
-sub set_double {
- my ($obj, $expr) = @_;
- runtime("$obj->{nv} = $expr;");
- $obj->{flags} &= ~(VALID_SV | VALID_INT);
- $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE;
-}
-
-sub set_numeric {
- my ($obj, $expr) = @_;
- if ($obj->{type} == T_INT) {
- $obj->set_int($expr);
- } else {
- $obj->set_double($expr);
- }
-}
-
-sub set_sv {
- my ($obj, $expr) = @_;
- runtime("SvSetSV($obj->{sv}, $expr);");
- $obj->invalidate;
- $obj->{flags} |= VALID_SV;
-}
-
-#
-# Stackobj::Padsv
-#
-
-@B::Stackobj::Padsv::ISA = 'B::Stackobj';
-sub B::Stackobj::Padsv::new {
- my ($class, $type, $extra_flags, $ix, $iname, $dname) = @_;
- $extra_flags |= SAVE_INT if $extra_flags & VALID_INT;
- $extra_flags |= SAVE_DOUBLE if $extra_flags & VALID_DOUBLE;
- bless {
- type => $type,
- flags => VALID_SV | $extra_flags,
- sv => "PL_curpad[$ix]",
- iv => "$iname",
- nv => "$dname"
- }, $class;
-}
-
-sub B::Stackobj::Padsv::load_int {
- my $obj = shift;
- if ($obj->{flags} & VALID_DOUBLE) {
- runtime("$obj->{iv} = $obj->{nv};");
- } else {
- runtime("$obj->{iv} = SvIV($obj->{sv});");
- }
- $obj->{flags} |= VALID_INT|SAVE_INT;
-}
-
-sub B::Stackobj::Padsv::load_double {
- my $obj = shift;
- $obj->write_back;
- runtime("$obj->{nv} = SvNV($obj->{sv});");
- $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE;
-}
-sub B::Stackobj::Padsv::save_int {
- my $obj = shift;
- return $obj->{flags} & SAVE_INT;
-}
-
-sub B::Stackobj::Padsv::save_double {
- my $obj = shift;
- return $obj->{flags} & SAVE_DOUBLE;
-}
-
-sub B::Stackobj::Padsv::write_back {
- my $obj = shift;
- my $flags = $obj->{flags};
- return if $flags & VALID_SV;
- if ($flags & VALID_INT) {
- if ($flags & VALID_UNSIGNED ){
- runtime("sv_setuv($obj->{sv}, $obj->{iv});");
- }else{
- runtime("sv_setiv($obj->{sv}, $obj->{iv});");
- }
- } elsif ($flags & VALID_DOUBLE) {
- runtime("sv_setnv($obj->{sv}, $obj->{nv});");
- } else {
- confess "write_back failed for lexical @{[$obj->peek]}\n";
- }
- $obj->{flags} |= VALID_SV;
-}
-
-#
-# Stackobj::Const
-#
-
-@B::Stackobj::Const::ISA = 'B::Stackobj';
-sub B::Stackobj::Const::new {
- my ($class, $sv) = @_;
- my $obj = bless {
- flags => 0,
- sv => $sv # holds the SV object until write_back happens
- }, $class;
- if ( ref($sv) eq "B::SPECIAL" ){
- $obj->{type}= T_SPECIAL;
- }else{
- my $svflags = $sv->FLAGS;
- if ($svflags & SVf_IOK) {
- $obj->{flags} = VALID_INT|VALID_DOUBLE;
- $obj->{type} = T_INT;
- if ($svflags & SVf_IVisUV){
- $obj->{flags} |= VALID_UNSIGNED;
- $obj->{nv} = $obj->{iv} = $sv->UVX;
- }else{
- $obj->{nv} = $obj->{iv} = $sv->IV;
- }
- } elsif ($svflags & SVf_NOK) {
- $obj->{flags} = VALID_INT|VALID_DOUBLE;
- $obj->{type} = T_DOUBLE;
- $obj->{iv} = $obj->{nv} = $sv->NV;
- } else {
- $obj->{type} = T_UNKNOWN;
- }
- }
- return $obj;
-}
-
-sub B::Stackobj::Const::write_back {
- my $obj = shift;
- return if $obj->{flags} & VALID_SV;
- # Save the SV object and replace $obj->{sv} by its C source code name
- $obj->{sv} = $obj->{sv}->save;
- $obj->{flags} |= VALID_SV|VALID_INT|VALID_DOUBLE;
-}
-
-sub B::Stackobj::Const::load_int {
- my $obj = shift;
- if (ref($obj->{sv}) eq "B::RV"){
- $obj->{iv} = int($obj->{sv}->RV->PV);
- }else{
- $obj->{iv} = int($obj->{sv}->PV);
- }
- $obj->{flags} |= VALID_INT;
-}
-
-sub B::Stackobj::Const::load_double {
- my $obj = shift;
- if (ref($obj->{sv}) eq "B::RV"){
- $obj->{nv} = $obj->{sv}->RV->PV + 0.0;
- }else{
- $obj->{nv} = $obj->{sv}->PV + 0.0;
- }
- $obj->{flags} |= VALID_DOUBLE;
-}
-
-sub B::Stackobj::Const::invalidate {}
-
-#
-# Stackobj::Bool
-#
-
-@B::Stackobj::Bool::ISA = 'B::Stackobj';
-sub B::Stackobj::Bool::new {
- my ($class, $preg) = @_;
- my $obj = bless {
- type => T_INT,
- flags => VALID_INT|VALID_DOUBLE,
- iv => $$preg,
- nv => $$preg,
- preg => $preg # this holds our ref to the pseudo-reg
- }, $class;
- return $obj;
-}
-
-sub B::Stackobj::Bool::write_back {
- my $obj = shift;
- return if $obj->{flags} & VALID_SV;
- $obj->{sv} = "($obj->{iv} ? &PL_sv_yes : &PL_sv_no)";
- $obj->{flags} |= VALID_SV;
-}
-
-# XXX Might want to handle as_double/set_double/load_double?
-
-sub B::Stackobj::Bool::invalidate {}
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Stackobj - Helper module for CC backend
-
-=head1 SYNOPSIS
-
- use B::Stackobj;
-
-=head1 DESCRIPTION
-
-See F<ext/B/README>.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Stash.pm b/contrib/perl5/ext/B/B/Stash.pm
deleted file mode 100644
index f3a8247..0000000
--- a/contrib/perl5/ext/B/B/Stash.pm
+++ /dev/null
@@ -1,50 +0,0 @@
-# Stash.pm -- show what stashes are loaded
-# vishalb@hotmail.com
-package B::Stash;
-
-=pod
-
-=head1 NAME
-
-B::Stash - show what stashes are loaded
-
-=cut
-
-BEGIN { %Seen = %INC }
-
-CHECK {
- my @arr=scan($main::{"main::"});
- @arr=map{s/\:\:$//;$_ eq "<none>"?():$_;} @arr;
- print "-umain,-u", join (",-u",@arr) ,"\n";
-}
-sub scan{
- my $start=shift;
- my $prefix=shift;
- $prefix = '' unless defined $prefix;
- my @return;
- foreach my $key ( keys %{$start}){
-# print $prefix,$key,"\n";
- if ($key =~ /::$/){
- unless ($start eq ${$start}{$key} or $key eq "B::" ){
- push @return, $key unless omit($prefix.$key);
- foreach my $subscan ( scan(${$start}{$key},$prefix.$key)){
- push @return, "$key".$subscan;
- }
- }
- }
- }
- return @return;
-}
-sub omit{
- my $module = shift;
- my %omit=("DynaLoader::" => 1 , "XSLoader::" => 1, "CORE::" => 1 ,
- "CORE::GLOBAL::" => 1, "UNIVERSAL::" => 1 );
- return 1 if $omit{$module};
- if ($module eq "IO::" or $module eq "IO::Handle::"){
- $module =~ s/::/\//g;
- return 1 unless $INC{$module};
- }
-
- return 0;
-}
-1;
diff --git a/contrib/perl5/ext/B/B/Terse.pm b/contrib/perl5/ext/B/B/Terse.pm
deleted file mode 100644
index 52f0549..0000000
--- a/contrib/perl5/ext/B/B/Terse.pm
+++ /dev/null
@@ -1,153 +0,0 @@
-package B::Terse;
-use strict;
-use B qw(peekop class walkoptree walkoptree_exec walkoptree_slow
- main_start main_root cstring svref_2object SVf_IVisUV);
-use B::Asmdata qw(@specialsv_name);
-
-sub terse {
- my ($order, $cvref) = @_;
- my $cv = svref_2object($cvref);
- if ($order eq "exec") {
- walkoptree_exec($cv->START, "terse");
- } else {
- walkoptree_slow($cv->ROOT, "terse");
- }
-}
-
-sub compile {
- my $order = @_ ? shift : "";
- my @options = @_;
- B::clearsym();
- if (@options) {
- return sub {
- my $objname;
- foreach $objname (@options) {
- $objname = "main::$objname" unless $objname =~ /::/;
- eval "terse(\$order, \\&$objname)";
- die "terse($order, \\&$objname) failed: $@" if $@;
- }
- }
- } else {
- if ($order eq "exec") {
- return sub { walkoptree_exec(main_start, "terse") }
- } else {
- return sub { walkoptree_slow(main_root, "terse") }
- }
- }
-}
-
-sub indent {
- my $level = @_ ? shift : 0;
- return " " x $level;
-}
-
-sub B::OP::terse {
- my ($op, $level) = @_;
- my $targ = $op->targ;
- $targ = ($targ > 0) ? " [$targ]" : "";
- print indent($level), peekop($op), $targ, "\n";
-}
-
-sub B::SVOP::terse {
- my ($op, $level) = @_;
- print indent($level), peekop($op), " ";
- $op->sv->terse(0);
-}
-
-sub B::PADOP::terse {
- my ($op, $level) = @_;
- print indent($level), peekop($op), " ", $op->padix, "\n";
-}
-
-sub B::PMOP::terse {
- my ($op, $level) = @_;
- my $precomp = $op->precomp;
- print indent($level), peekop($op),
- defined($precomp) ? " /$precomp/\n" : " (regexp not compiled)\n";
-
-}
-
-sub B::PVOP::terse {
- my ($op, $level) = @_;
- print indent($level), peekop($op), " ", cstring($op->pv), "\n";
-}
-
-sub B::COP::terse {
- my ($op, $level) = @_;
- my $label = $op->label;
- if ($label) {
- $label = " label ".cstring($label);
- }
- print indent($level), peekop($op), $label || "", "\n";
-}
-
-sub B::PV::terse {
- my ($sv, $level) = @_;
- print indent($level);
- printf "%s (0x%lx) %s\n", class($sv), $$sv, cstring($sv->PV);
-}
-
-sub B::AV::terse {
- my ($sv, $level) = @_;
- print indent($level);
- printf "%s (0x%lx) FILL %d\n", class($sv), $$sv, $sv->FILL;
-}
-
-sub B::GV::terse {
- my ($gv, $level) = @_;
- my $stash = $gv->STASH->NAME;
- if ($stash eq "main") {
- $stash = "";
- } else {
- $stash = $stash . "::";
- }
- print indent($level);
- printf "%s (0x%lx) *%s%s\n", class($gv), $$gv, $stash, $gv->SAFENAME;
-}
-
-sub B::IV::terse {
- my ($sv, $level) = @_;
- print indent($level);
- my $v = $sv->FLAGS & SVf_IVisUV ? "%u" : "%d";
- printf "%s (0x%lx) $v\n", class($sv), $$sv, $sv->int_value;
-}
-
-sub B::NV::terse {
- my ($sv, $level) = @_;
- print indent($level);
- printf "%s (0x%lx) %s\n", class($sv), $$sv, $sv->NV;
-}
-
-sub B::NULL::terse {
- my ($sv, $level) = @_;
- print indent($level);
- printf "%s (0x%lx)\n", class($sv), $$sv;
-}
-
-sub B::SPECIAL::terse {
- my ($sv, $level) = @_;
- print indent($level);
- printf "%s #%d %s\n", class($sv), $$sv, $specialsv_name[$$sv];
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-B::Terse - Walk Perl syntax tree, printing terse info about ops
-
-=head1 SYNOPSIS
-
- perl -MO=Terse[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-See F<ext/B/README>.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/B/Xref.pm b/contrib/perl5/ext/B/B/Xref.pm
deleted file mode 100644
index b4078b8..0000000
--- a/contrib/perl5/ext/B/B/Xref.pm
+++ /dev/null
@@ -1,420 +0,0 @@
-package B::Xref;
-
-=head1 NAME
-
-B::Xref - Generates cross reference reports for Perl programs
-
-=head1 SYNOPSIS
-
-perl -MO=Xref[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-The B::Xref module is used to generate a cross reference listing of all
-definitions and uses of variables, subroutines and formats in a Perl program.
-It is implemented as a backend for the Perl compiler.
-
-The report generated is in the following format:
-
- File filename1
- Subroutine subname1
- Package package1
- object1 C<line numbers>
- object2 C<line numbers>
- ...
- Package package2
- ...
-
-Each B<File> section reports on a single file. Each B<Subroutine> section
-reports on a single subroutine apart from the special cases
-"(definitions)" and "(main)". These report, respectively, on subroutine
-definitions found by the initial symbol table walk and on the main part of
-the program or module external to all subroutines.
-
-The report is then grouped by the B<Package> of each variable,
-subroutine or format with the special case "(lexicals)" meaning
-lexical variables. Each B<object> name (implicitly qualified by its
-containing B<Package>) includes its type character(s) at the beginning
-where possible. Lexical variables are easier to track and even
-included dereferencing information where possible.
-
-The C<line numbers> are a comma separated list of line numbers (some
-preceded by code letters) where that object is used in some way.
-Simple uses aren't preceded by a code letter. Introductions (such as
-where a lexical is first defined with C<my>) are indicated with the
-letter "i". Subroutine and method calls are indicated by the character
-"&". Subroutine definitions are indicated by "s" and format
-definitions by "f".
-
-=head1 OPTIONS
-
-Option words are separated by commas (not whitespace) and follow the
-usual conventions of compiler backend options.
-
-=over 8
-
-=item C<-oFILENAME>
-
-Directs output to C<FILENAME> instead of standard output.
-
-=item C<-r>
-
-Raw output. Instead of producing a human-readable report, outputs a line
-in machine-readable form for each definition/use of a variable/sub/format.
-
-=item C<-D[tO]>
-
-(Internal) debug options, probably only useful if C<-r> included.
-The C<t> option prints the object on the top of the stack as it's
-being tracked. The C<O> option prints each operator as it's being
-processed in the execution order of the program.
-
-=back
-
-=head1 BUGS
-
-Non-lexical variables are quite difficult to track through a program.
-Sometimes the type of a non-lexical variable's use is impossible to
-determine. Introductions of non-lexical non-scalars don't seem to be
-reported properly.
-
-=head1 AUTHOR
-
-Malcolm Beattie, mbeattie@sable.ox.ac.uk.
-
-=cut
-
-use strict;
-use Config;
-use B qw(peekop class comppadlist main_start svref_2object walksymtable
- OPpLVAL_INTRO SVf_POK
- );
-
-sub UNKNOWN { ["?", "?", "?"] }
-
-my @pad; # lexicals in current pad
- # as ["(lexical)", type, name]
-my %done; # keyed by $$op: set when each $op is done
-my $top = UNKNOWN; # shadows top element of stack as
- # [pack, type, name] (pack can be "(lexical)")
-my $file; # shadows current filename
-my $line; # shadows current line number
-my $subname; # shadows current sub name
-my %table; # Multi-level hash to record all uses etc.
-my @todo = (); # List of CVs that need processing
-
-my %code = (intro => "i", used => "",
- subdef => "s", subused => "&",
- formdef => "f", meth => "->");
-
-
-# Options
-my ($debug_op, $debug_top, $nodefs, $raw);
-
-sub process {
- my ($var, $event) = @_;
- my ($pack, $type, $name) = @$var;
- if ($type eq "*") {
- if ($event eq "used") {
- return;
- } elsif ($event eq "subused") {
- $type = "&";
- }
- }
- $type =~ s/(.)\*$/$1/g;
- if ($raw) {
- printf "%-16s %-12s %5d %-12s %4s %-16s %s\n",
- $file, $subname, $line, $pack, $type, $name, $event;
- } else {
- # Wheee
- push(@{$table{$file}->{$subname}->{$pack}->{$type.$name}->{$event}},
- $line);
- }
-}
-
-sub load_pad {
- my $padlist = shift;
- my ($namelistav, $vallistav, @namelist, $ix);
- @pad = ();
- return if class($padlist) eq "SPECIAL";
- ($namelistav,$vallistav) = $padlist->ARRAY;
- @namelist = $namelistav->ARRAY;
- for ($ix = 1; $ix < @namelist; $ix++) {
- my $namesv = $namelist[$ix];
- next if class($namesv) eq "SPECIAL";
- my ($type, $name) = $namesv->PV =~ /^(.)([^\0]*)(\0.*)?$/;
- $pad[$ix] = ["(lexical)", $type, $name];
- }
- if ($Config{useithreads}) {
- my (@vallist);
- @vallist = $vallistav->ARRAY;
- for ($ix = 1; $ix < @vallist; $ix++) {
- my $valsv = $vallist[$ix];
- next unless class($valsv) eq "GV";
- # these pad GVs don't have corresponding names, so same @pad
- # array can be used without collisions
- $pad[$ix] = [$valsv->STASH->NAME, "*", $valsv->NAME];
- }
- }
-}
-
-sub xref {
- my $start = shift;
- my $op;
- for ($op = $start; $$op; $op = $op->next) {
- last if $done{$$op}++;
- warn sprintf("top = [%s, %s, %s]\n", @$top) if $debug_top;
- warn peekop($op), "\n" if $debug_op;
- my $opname = $op->name;
- if ($opname =~ /^(or|and|mapwhile|grepwhile|range|cond_expr)$/) {
- xref($op->other);
- } elsif ($opname eq "match" || $opname eq "subst") {
- xref($op->pmreplstart);
- } elsif ($opname eq "substcont") {
- xref($op->other->pmreplstart);
- $op = $op->other;
- redo;
- } elsif ($opname eq "enterloop") {
- xref($op->redoop);
- xref($op->nextop);
- xref($op->lastop);
- } elsif ($opname eq "subst") {
- xref($op->pmreplstart);
- } else {
- no strict 'refs';
- my $ppname = "pp_$opname";
- &$ppname($op) if defined(&$ppname);
- }
- }
-}
-
-sub xref_cv {
- my $cv = shift;
- my $pack = $cv->GV->STASH->NAME;
- $subname = ($pack eq "main" ? "" : "$pack\::") . $cv->GV->NAME;
- load_pad($cv->PADLIST);
- xref($cv->START);
- $subname = "(main)";
-}
-
-sub xref_object {
- my $cvref = shift;
- xref_cv(svref_2object($cvref));
-}
-
-sub xref_main {
- $subname = "(main)";
- load_pad(comppadlist);
- xref(main_start);
- while (@todo) {
- xref_cv(shift @todo);
- }
-}
-
-sub pp_nextstate {
- my $op = shift;
- $file = $op->file;
- $line = $op->line;
- $top = UNKNOWN;
-}
-
-sub pp_padsv {
- my $op = shift;
- $top = $pad[$op->targ];
- process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used");
-}
-
-sub pp_padav { pp_padsv(@_) }
-sub pp_padhv { pp_padsv(@_) }
-
-sub deref {
- my ($var, $as) = @_;
- $var->[1] = $as . $var->[1];
- process($var, "used");
-}
-
-sub pp_rv2cv { deref($top, "&"); }
-sub pp_rv2hv { deref($top, "%"); }
-sub pp_rv2sv { deref($top, "\$"); }
-sub pp_rv2av { deref($top, "\@"); }
-sub pp_rv2gv { deref($top, "*"); }
-
-sub pp_gvsv {
- my $op = shift;
- my $gv;
- if ($Config{useithreads}) {
- $top = $pad[$op->padix];
- $top = UNKNOWN unless $top;
- $top->[1] = '$';
- }
- else {
- $gv = $op->gv;
- $top = [$gv->STASH->NAME, '$', $gv->NAME];
- }
- process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used");
-}
-
-sub pp_gv {
- my $op = shift;
- my $gv;
- if ($Config{useithreads}) {
- $top = $pad[$op->padix];
- $top = UNKNOWN unless $top;
- $top->[1] = '*';
- }
- else {
- $gv = $op->gv;
- $top = [$gv->STASH->NAME, "*", $gv->NAME];
- }
- process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used");
-}
-
-sub pp_const {
- my $op = shift;
- my $sv = $op->sv;
- # constant could be in the pad (under useithreads)
- if ($$sv) {
- $top = ["?", "",
- (class($sv) ne "SPECIAL" && $sv->FLAGS & SVf_POK) ? $sv->PV : "?"];
- }
- else {
- $top = $pad[$op->targ];
- }
-}
-
-sub pp_method {
- my $op = shift;
- $top = ["(method)", "->".$top->[1], $top->[2]];
-}
-
-sub pp_entersub {
- my $op = shift;
- if ($top->[1] eq "m") {
- process($top, "meth");
- } else {
- process($top, "subused");
- }
- $top = UNKNOWN;
-}
-
-#
-# Stuff for cross referencing definitions of variables and subs
-#
-
-sub B::GV::xref {
- my $gv = shift;
- my $cv = $gv->CV;
- if ($$cv) {
- #return if $done{$$cv}++;
- $file = $gv->FILE;
- $line = $gv->LINE;
- process([$gv->STASH->NAME, "&", $gv->NAME], "subdef");
- push(@todo, $cv);
- }
- my $form = $gv->FORM;
- if ($$form) {
- return if $done{$$form}++;
- $file = $gv->FILE;
- $line = $gv->LINE;
- process([$gv->STASH->NAME, "", $gv->NAME], "formdef");
- }
-}
-
-sub xref_definitions {
- my ($pack, %exclude);
- return if $nodefs;
- $subname = "(definitions)";
- foreach $pack (qw(B O AutoLoader DynaLoader XSLoader Config DB VMS
- strict vars FileHandle Exporter Carp)) {
- $exclude{$pack."::"} = 1;
- }
- no strict qw(vars refs);
- walksymtable(\%{"main::"}, "xref", sub { !defined($exclude{$_[0]}) });
-}
-
-sub output {
- return if $raw;
- my ($file, $subname, $pack, $name, $ev, $perfile, $persubname,
- $perpack, $pername, $perev);
- foreach $file (sort(keys(%table))) {
- $perfile = $table{$file};
- print "File $file\n";
- foreach $subname (sort(keys(%$perfile))) {
- $persubname = $perfile->{$subname};
- print " Subroutine $subname\n";
- foreach $pack (sort(keys(%$persubname))) {
- $perpack = $persubname->{$pack};
- print " Package $pack\n";
- foreach $name (sort(keys(%$perpack))) {
- $pername = $perpack->{$name};
- my @lines;
- foreach $ev (qw(intro formdef subdef meth subused used)) {
- $perev = $pername->{$ev};
- if (defined($perev) && @$perev) {
- my $code = $code{$ev};
- push(@lines, map("$code$_", @$perev));
- }
- }
- printf " %-16s %s\n", $name, join(", ", @lines);
- }
- }
- }
- }
-}
-
-sub compile {
- my @options = @_;
- my ($option, $opt, $arg);
- OPTION:
- while ($option = shift @options) {
- if ($option =~ /^-(.)(.*)/) {
- $opt = $1;
- $arg = $2;
- } else {
- unshift @options, $option;
- last OPTION;
- }
- if ($opt eq "-" && $arg eq "-") {
- shift @options;
- last OPTION;
- } elsif ($opt eq "o") {
- $arg ||= shift @options;
- open(STDOUT, ">$arg") or return "$arg: $!\n";
- } elsif ($opt eq "d") {
- $nodefs = 1;
- } elsif ($opt eq "r") {
- $raw = 1;
- } elsif ($opt eq "D") {
- $arg ||= shift @options;
- foreach $arg (split(//, $arg)) {
- if ($arg eq "o") {
- B->debug(1);
- } elsif ($arg eq "O") {
- $debug_op = 1;
- } elsif ($arg eq "t") {
- $debug_top = 1;
- }
- }
- }
- }
- if (@options) {
- return sub {
- my $objname;
- xref_definitions();
- foreach $objname (@options) {
- $objname = "main::$objname" unless $objname =~ /::/;
- eval "xref_object(\\&$objname)";
- die "xref_object(\\&$objname) failed: $@" if $@;
- }
- output();
- }
- } else {
- return sub {
- xref_definitions();
- xref_main();
- output();
- }
- }
-}
-
-1;
diff --git a/contrib/perl5/ext/B/B/assemble b/contrib/perl5/ext/B/B/assemble
deleted file mode 100755
index 43cc5bc..0000000
--- a/contrib/perl5/ext/B/B/assemble
+++ /dev/null
@@ -1,30 +0,0 @@
-use B::Assembler qw(assemble_fh);
-use FileHandle;
-
-my ($filename, $fh, $out);
-
-if ($ARGV[0] eq "-d") {
- B::Assembler::debug(1);
- shift;
-}
-
-$out = \*STDOUT;
-
-if (@ARGV == 0) {
- $fh = \*STDIN;
- $filename = "-";
-} elsif (@ARGV == 1) {
- $filename = $ARGV[0];
- $fh = new FileHandle "<$filename";
-} elsif (@ARGV == 2) {
- $filename = $ARGV[0];
- $fh = new FileHandle "<$filename";
- $out = new FileHandle ">$ARGV[1]";
-} else {
- die "Usage: assemble [filename] [outfilename]\n";
-}
-
-binmode $out;
-$SIG{__WARN__} = sub { warn "$filename:@_" };
-$SIG{__DIE__} = sub { die "$filename: @_" };
-assemble_fh($fh, sub { print $out @_ });
diff --git a/contrib/perl5/ext/B/B/cc_harness b/contrib/perl5/ext/B/B/cc_harness
deleted file mode 100644
index 79f8727..0000000
--- a/contrib/perl5/ext/B/B/cc_harness
+++ /dev/null
@@ -1,12 +0,0 @@
-use Config;
-
-$libdir = $ENV{PERL_SRC} || "$Config{installarchlib}/CORE";
-
-if (!grep(/^-[cS]$/, @ARGV)) {
- $linkargs = sprintf("%s $libdir/$Config{libperl} %s",
- @Config{qw(ldflags libs)});
-}
-
-$cccmd = "$Config{cc} $Config{ccflags} -I$libdir @ARGV $linkargs";
-print "$cccmd\n";
-exec $cccmd;
diff --git a/contrib/perl5/ext/B/B/disassemble b/contrib/perl5/ext/B/B/disassemble
deleted file mode 100755
index 6530b80..0000000
--- a/contrib/perl5/ext/B/B/disassemble
+++ /dev/null
@@ -1,22 +0,0 @@
-use B::Disassembler qw(disassemble_fh);
-use FileHandle;
-
-my $fh;
-if (@ARGV == 0) {
- $fh = \*STDIN;
-} elsif (@ARGV == 1) {
- $fh = new FileHandle "<$ARGV[0]";
-} else {
- die "Usage: disassemble [filename]\n";
-}
-
-sub print_insn {
- my ($insn, $arg) = @_;
- if (defined($arg)) {
- printf "%s %s\n", $insn, $arg;
- } else {
- print $insn, "\n";
- }
-}
-
-disassemble_fh($fh, \&print_insn);
diff --git a/contrib/perl5/ext/B/B/makeliblinks b/contrib/perl5/ext/B/B/makeliblinks
deleted file mode 100644
index 8256078..0000000
--- a/contrib/perl5/ext/B/B/makeliblinks
+++ /dev/null
@@ -1,54 +0,0 @@
-use File::Find;
-use Config;
-
-if (@ARGV != 2) {
- warn <<"EOT";
-Usage: makeliblinks libautodir targetdir
-where libautodir is the architecture-dependent auto directory
-(e.g. $Config::Config{archlib}/auto).
-EOT
- exit 2;
-}
-
-my ($libautodir, $targetdir) = @ARGV;
-
-# Calculate relative path prefix from $targetdir to $libautodir
-sub relprefix {
- my ($to, $from) = @_;
- my $up;
- for ($up = 0; substr($to, 0, length($from)) ne $from; $up++) {
- $from =~ s(
- [^/]+ (?# a group of non-slashes)
- /* (?# maybe with some trailing slashes)
- $ (?# at the end of the path)
- )()x;
- }
- return (("../" x $up) . substr($to, length($from)));
-}
-
-my $relprefix = relprefix($libautodir, $targetdir);
-
-my ($dlext, $lib_ext) = @Config::Config{qw(dlext lib_ext)};
-
-sub link_if_library {
- if (/\.($dlext|$lib_ext)$/o) {
- my $ext = $1;
- my $name = $File::Find::name;
- if (substr($name, 0, length($libautodir) + 1) ne "$libautodir/") {
- die "directory of $name doesn't match $libautodir\n";
- }
- substr($name, 0, length($libautodir) + 1) = '';
- my @parts = split(m(/), $name);
- if ($parts[-1] ne "$parts[-2].$ext") {
- die "module name $_ doesn't match its directory $libautodir\n";
- }
- pop @parts;
- my $libpath = "$targetdir/lib" . join("__", @parts) . ".$ext";
- print "$libpath -> $relprefix/$name\n";
- symlink("$relprefix/$name", $libpath)
- or warn "above link failed with error: $!\n";
- }
-}
-
-find(\&link_if_library, $libautodir);
-exit 0;
diff --git a/contrib/perl5/ext/B/Makefile.PL b/contrib/perl5/ext/B/Makefile.PL
deleted file mode 100644
index dcf6a1d..0000000
--- a/contrib/perl5/ext/B/Makefile.PL
+++ /dev/null
@@ -1,48 +0,0 @@
-use ExtUtils::MakeMaker;
-use Config;
-use File::Spec;
-
-my $e = $Config{'exe_ext'};
-my $o = $Config{'obj_ext'};
-my $exeout_flag = '-o ';
-if ($^O eq 'MSWin32') {
- if ($Config{'cc'} =~ /^cl/i) {
- $exeout_flag = '-Fe';
- }
- elsif ($Config{'cc'} =~ /^bcc/i) {
- $exeout_flag = '-e';
- }
-}
-
-WriteMakefile(
- NAME => "B",
- VERSION => "a5",
- PL_FILES => { 'defsubs_h.PL' => 'defsubs.h' },
- MAN3PODS => {},
- clean => {
- FILES => "perl$e *$o B.c defsubs.h *~"
- }
-);
-
-package MY;
-
-sub post_constants {
- "\nLIBS = $Config::Config{libs}\n"
-}
-
-sub upupfile {
- File::Spec->catfile(File::Spec->updir,
- File::Spec->updir, $_[0]);
-}
-
-sub MY::postamble {
- my $op_h = upupfile('op.h');
- my $cop_h = upupfile('cop.h');
- my $noecho = shift->{NOECHO};
-"
-B\$(OBJ_EXT) : defsubs.h
-
-defsubs.h :: $op_h $cop_h
- $noecho \$(NOOP)
-"
-}
diff --git a/contrib/perl5/ext/B/NOTES b/contrib/perl5/ext/B/NOTES
deleted file mode 100644
index 89d03ba..0000000
--- a/contrib/perl5/ext/B/NOTES
+++ /dev/null
@@ -1,168 +0,0 @@
-C backend invocation
- If there are any non-option arguments, they are taken to be
- names of objects to be saved (probably doesn't work properly yet).
- Without extra arguments, it saves the main program.
- -ofilename Output to filename instead of STDOUT
- -v Verbose (currently gives a few compilation statistics)
- -- Force end of options
- -uPackname Force apparently unused subs from package Packname to
- be compiled. This allows programs to use eval "foo()"
- even when sub foo is never seen to be used at compile
- time. The down side is that any subs which really are
- never used also have code generated. This option is
- necessary, for example, if you have a signal handler
- foo which you initialise with $SIG{BAR} = "foo".
- A better fix, though, is just to change it to
- $SIG{BAR} = \&foo. You can have multiple -u options.
- -D Debug options (concat or separate flags like perl -D)
- o OPs, prints each OP as it's processed
- c COPs, prints COPs as processed (incl. file & line num)
- A prints AV information on saving
- C prints CV information on saving
- M prints MAGIC information on saving
- -f Force optimisations on or off one at a time.
- cog Copy-on-grow: PVs declared and initialised statically
- no-cog No copy-on-grow
- -On Optimisation level (n = 0, 1, 2, ...). -O means -O1.
- Currently, -O1 and higher set -fcog.
-
-Examples
- perl -MO=C foo.pl > foo.c
- perl cc_harness -o foo foo.c
-
- perl -MO=C,-v,-DcA bar.pl > /dev/null
-
-CC backend invocation
- If there are any non-option arguments, they are taken to be names of
- subs to be saved. Without extra arguments, it saves the main program.
- -ofilename Output to filename instead of STDOUT
- -- Force end of options
- -uPackname Force apparently unused subs from package Packname to
- be compiled. This allows programs to use eval "foo()"
- even when sub foo is never seen to be used at compile
- time. The down side is that any subs which really are
- never used also have code generated. This option is
- necessary, for example, if you have a signal handler
- foo which you initialise with $SIG{BAR} = "foo".
- A better fix, though, is just to change it to
- $SIG{BAR} = \&foo. You can have multiple -u options.
- -mModulename Instead of generating source for a runnable executable,
- generate source for an XSUB module. The
- boot_Modulename function (which DynaLoader can look
- for) does the appropriate initialisation and runs the
- main part of the Perl source that is being compiled.
- -pn Generate code for perl patchlevel n (e.g. 3 or 4).
- The default is to generate C code which will link
- with the currently executing version of perl.
- running the perl compiler.
- -D Debug options (concat or separate flags like perl -D)
- r Writes debugging output to STDERR just as it's about
- to write to the program's runtime (otherwise writes
- debugging info as comments in its C output).
- O Outputs each OP as it's compiled
- s Outputs the contents of the shadow stack at each OP
- p Outputs the contents of the shadow pad of lexicals as
- it's loaded for each sub or the main program.
- q Outputs the name of each fake PP function in the queue
- as it's about to processes.
- l Output the filename and line number of each original
- line of Perl code as it's processed (pp_nextstate).
- t Outputs timing information of compilation stages
- -f Force optimisations on or off one at a time.
- [
- cog Copy-on-grow: PVs declared and initialised statically
- no-cog No copy-on-grow
- These two not in CC yet.
- ]
- freetmps-each-bblock Delays FREETMPS from the end of each
- statement to the end of the each basic
- block.
- freetmps-each-loop Delays FREETMPS from the end of each
- statement to the end of the group of
- basic blocks forming a loop. At most
- one of the freetmps-each-* options can
- be used.
- omit-taint Omits generating code for handling
- perl's tainting mechanism.
- -On Optimisation level (n = 0, 1, 2, ...). -O means -O1.
- Currently, -O1 sets -ffreetmps-each-bblock and -O2
- sets -ffreetmps-each-loop.
-
-Example
- perl -MO=CC,-O2,-ofoo.c foo.pl
- perl cc_harness -o foo foo.c
-
- perl -MO=CC,-mFoo,-oFoo.c Foo.pm
- perl cc_harness -shared -c -o Foo.so Foo.c
-
-
-Bytecode backend invocation
-
- If there are any non-option arguments, they are taken to be
- names of objects to be saved (probably doesn't work properly yet).
- Without extra arguments, it saves the main program.
- -ofilename Output to filename instead of STDOUT.
- -- Force end of options.
- -f Force optimisations on or off one at a time.
- Each can be preceded by no- to turn the option off.
- compress-nullops
- Only fills in the necessary fields of ops which have
- been optimised away by perl's internal compiler.
- omit-sequence-numbers
- Leaves out code to fill in the op_seq field of all ops
- which is only used by perl's internal compiler.
- bypass-nullops
- If op->op_next ever points to a NULLOP, replaces the
- op_next field with the first non-NULLOP in the path
- of execution.
- strip-syntax-tree
- Leaves out code to fill in the pointers which link the
- internal syntax tree together. They're not needed at
- run-time but leaving them out will make it impossible
- to recompile or disassemble the resulting program.
- It will also stop "goto label" statements from working.
- -On Optimisation level (n = 0, 1, 2, ...). -O means -O1.
- -O1 sets -fcompress-nullops -fomit-sequence numbers.
- -O6 adds -fstrip-syntax-tree.
- -D Debug options (concat or separate flags like perl -D)
- o OPs, prints each OP as it's processed.
- b print debugging information about bytecompiler progress
- a tells the assembler to include source assembler lines
- in its output as bytecode comments.
- C prints each CV taken from the final symbol tree walk.
- -S Output assembler source rather than piping it
- through the assembler and outputting bytecode.
- -m Compile as a module rather than a standalone program.
- Currently this just means that the bytecodes for
- initialising main_start, main_root and curpad are
- omitted.
-
-Example
- perl -MO=Bytecode,-O6,-o,foo.plc foo.pl
-
- perl -MO=Bytecode,-S foo.pl > foo.S
- assemble foo.S > foo.plc
- byteperl foo.plc
-
- perl -MO=Bytecode,-m,-oFoo.pmc Foo.pm
-
-Backends for debugging
- perl -MO=Terse,exec foo.pl
- perl -MO=Debug bar.pl
-
-O module
- Used with "perl -MO=Backend,foo,bar prog.pl" to invoke the backend
- B::Backend with options foo and bar. O invokes the sub
- B::Backend::compile() with arguments foo and bar at BEGIN time.
- That compile() sub must do any inital argument processing replied.
- If unsuccessful, it should return a string which O arranges to be
- printed as an error message followed by a clean error exit. In the
- normal case where any option processing in compile() is successful,
- it should return a sub ref (usually a closure) to perform the
- actual compilation. When O regains control, it ensures that the
- "-c" option is forced (so that the program being compiled doesn't
- end up running) and registers a CHECK block to call back the sub ref
- returned from the backend's compile(). Perl then continues by
- parsing prog.pl (just as it would with "perl -c prog.pl") and after
- doing so, assuming there are no parse-time errors, the CHECK block
- of O gets called and the actual backend compilation happens. Phew.
diff --git a/contrib/perl5/ext/B/O.pm b/contrib/perl5/ext/B/O.pm
deleted file mode 100644
index 2ef91ed..0000000
--- a/contrib/perl5/ext/B/O.pm
+++ /dev/null
@@ -1,86 +0,0 @@
-package O;
-use B qw(minus_c save_BEGINs);
-use Carp;
-
-sub import {
- my ($class, $backend, @options) = @_;
- eval "use B::$backend ()";
- if ($@) {
- croak "use of backend $backend failed: $@";
- }
- my $compilesub = &{"B::${backend}::compile"}(@options);
- if (ref($compilesub) eq "CODE") {
- minus_c;
- save_BEGINs;
- eval 'CHECK { &$compilesub() }';
- } else {
- die $compilesub;
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-O - Generic interface to Perl Compiler backends
-
-=head1 SYNOPSIS
-
- perl -MO=Backend[,OPTIONS] foo.pl
-
-=head1 DESCRIPTION
-
-This is the module that is used as a frontend to the Perl Compiler.
-
-=head1 CONVENTIONS
-
-Most compiler backends use the following conventions: OPTIONS
-consists of a comma-separated list of words (no white-space).
-The C<-v> option usually puts the backend into verbose mode.
-The C<-ofile> option generates output to B<file> instead of
-stdout. The C<-D> option followed by various letters turns on
-various internal debugging flags. See the documentation for the
-desired backend (named C<B::Backend> for the example above) to
-find out about that backend.
-
-=head1 IMPLEMENTATION
-
-This section is only necessary for those who want to write a
-compiler backend module that can be used via this module.
-
-The command-line mentioned in the SYNOPSIS section corresponds to
-the Perl code
-
- use O ("Backend", OPTIONS);
-
-The C<import> function which that calls loads in the appropriate
-C<B::Backend> module and calls the C<compile> function in that
-package, passing it OPTIONS. That function is expected to return
-a sub reference which we'll call CALLBACK. Next, the "compile-only"
-flag is switched on (equivalent to the command-line option C<-c>)
-and a CHECK block is registered which calls CALLBACK. Thus the main
-Perl program mentioned on the command-line is read in, parsed and
-compiled into internal syntax tree form. Since the C<-c> flag is
-set, the program does not start running (excepting BEGIN blocks of
-course) but the CALLBACK function registered by the compiler
-backend is called.
-
-In summary, a compiler backend module should be called "B::Foo"
-for some foo and live in the appropriate directory for that name.
-It should define a function called C<compile>. When the user types
-
- perl -MO=Foo,OPTIONS foo.pl
-
-that function is called and is passed those OPTIONS (split on
-commas). It should return a sub ref to the main compilation function.
-After the user's program is loaded and parsed, that returned sub ref
-is invoked which can then go ahead and do the compilation, usually by
-making use of the C<B> module's functionality.
-
-=head1 AUTHOR
-
-Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
-
-=cut
diff --git a/contrib/perl5/ext/B/README b/contrib/perl5/ext/B/README
deleted file mode 100644
index fa3f085..0000000
--- a/contrib/perl5/ext/B/README
+++ /dev/null
@@ -1,325 +0,0 @@
- Perl Compiler Kit, Version alpha4
-
- Copyright (c) 1996, 1997, Malcolm Beattie
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- a) the GNU General Public License as published by the Free
- Software Foundation; either version 1, or (at your option) any
- later version, or
-
- b) the "Artistic License" which comes with this kit.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either
- the GNU General Public License or the Artistic License for more details.
-
- You should have received a copy of the Artistic License with this kit,
- in the file named "Artistic". If not, you can get one from the Perl
- distribution. You should also have received a copy of the GNU General
- Public License, in the file named "Copying". If not, you can get one
- from the Perl distribution or else write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-
-CHANGES
-
-New since alpha3
- Anonymous subs work properly with C and CC.
- Heuristics for forcing compilation of apparently unused subs/methods.
- Subs which use the AutoLoader module are forcibly loaded at compile-time.
- Slightly faster compilation.
- Handles slightly more complex code within a BEGIN { }.
- Minor bug fixes.
-
-New since alpha2
- CC backend now supports ".." and s//e.
- Xref backend generates cross-reference reports
- Cleanups to fix benign but irritating "-w" warnings
- Minor cxstack fix
-New since alpha1
- Working CC backend
- Shared globs and pre-initialised hash support
- Some XSUB support
- Assorted bug fixes
-
-INSTALLATION
-
-(1) You need perl5.002 or later.
-
-(2) If you want to compile and run programs with the C or CC backends
-which undefine (or redefine) subroutines, then you need to apply a
-one-line patch to perl itself. One or two of the programs in perl's
-own test suite do this. The patch is in file op.patch. It prevents
-perl from calling free() on OPs with the magic sequence number (U16)-1.
-The compiler declares all OPs as static structures and uses that magic
-sequence number.
-
-(3) Type
- perl Makefile.PL
-to write a personalised Makefile for your system. If you want the
-bytecode modules to support reading bytecode from strings (instead of
-just from files) then add the option
- -DINDIRECT_BGET_MACROS
-into the middle of the definition of the CCCMD macro in the Makefile.
-Your C compiler may need to be able to cope with Standard C for this.
-I haven't tested this option yet with an old pre-Standard compiler.
-
-(4) If your platform supports dynamic loading then just type
- make
-and you can then use
- perl -Iblib/arch -MO=foo bar
-to use the compiler modules (see later for details).
-If you need/want instead to make a statically linked perl which
-contains the appropriate modules, then type
- make perl
- make byteperl
-and you can then use
- ./perl -MO=foo bar
-to use the compiler modules.
-In both cases, the byteperl executable is required for running standalone
-bytecode programs. It is *not* a standard perl+XSUB perl executable.
-
-USAGE
-
-As of the alpha3 release, the Bytecode, C and CC backends are now all
-functional enough to compile almost the whole of the main perl test
-suite. In the case of the CC backend, any failures are all due to
-differences and/or known bugs documented below. See the file TESTS.
-In the following examples, you'll need to replace "perl" by
- perl -Iblib/arch
-if you have built the extensions for a dynamic loading platform but
-haven't installed the extensions completely. You'll need to replace
-"perl" by
- ./perl
-if you have built the extensions into a statically linked perl binary.
-
-(1) To compile perl program foo.pl with the C backend, do
- perl -MO=C,-ofoo.c foo.pl
-Then use the cc_harness perl program to compile the resulting C source:
- perl cc_harness -O2 -o foo foo.c
-
-If you are using a non-ANSI pre-Standard C compiler that can't handle
-pre-declaring static arrays, then add -DBROKEN_STATIC_REDECL to the
-options you use:
- perl cc_harness -O2 -o foo -DBROKEN_STATIC_REDECL foo.c
-If you are using a non-ANSI pre-Standard C compiler that can't handle
-static initialisation of structures with union members then add
--DBROKEN_UNION_INIT to the options you use. If you want command line
-arguments passed to your executable to be interpreted by perl (e.g. -Dx)
-then compile foo.c with -DALLOW_PERL_OPTIONS. Otherwise, all command line
-arguments passed to foo will appear directly in @ARGV. The resulting
-executable foo is the compiled version of foo.pl. See the file NOTES for
-extra options you can pass to -MO=C.
-
-There are some constraints on the contents on foo.pl if you want to be
-able to compile it successfully. Some problems can be fixed fairly easily
-by altering foo.pl; some problems with the compiler are known to be
-straightforward to solve and I'll do so soon. The file Todo lists a
-number of known problems. See the XSUB section lower down for information
-about compiling programs which use XSUBs.
-
-(2) To compile foo.pl with the CC backend (which generates actual
-optimised C code for the execution path of your perl program), use
- perl -MO=CC,-ofoo.c foo.pl
-
-and proceed just as with the C backend. You should almost certainly
-use an option such as -O2 with the subsequent cc_harness invocation
-so that your C compiler uses optimisation. The C code generated by
-the Perl compiler's CC backend looks ugly to humans but is easily
-optimised by C compilers.
-
-To make the most of this compiler backend, you need to tell the
-compiler when you're using int or double variables so that it can
-optimise appropriately (although this part of the compiler is the most
-buggy). You currently do that by naming lexical variables ending in
-"_i" for ints, "_d" for doubles, "_ir" for int "register" variables or
-"_dr" for double "register" variables. Here "register" is a promise
-that you won't pass a reference to the variable into a sub which then
-modifies the variable. The compiler ought to catch attempts to use
-"\$i" just as C compilers catch attempts to do "&i" for a register int
-i but it doesn't at the moment. Bugs in the CC backend may make your
-program fail in mysterious ways and give wrong answers rather than just
-crash in boring ways. But, hey, this is an alpha release so you knew
-that anyway. See the XSUB section lower down for information about
-compiling programs which use XSUBs.
-
-If your program uses classes which define methods (or other subs which
-are not exported and not apparently used until runtime) then you'll
-need to use -u compile-time options (see the NOTES file) to force the
-subs to be compiled. Future releases will probably default the other
-way, do more auto-detection and provide more fine-grained control.
-
-Since compiled executables need linking with libperl, you may want
-to turn libperl.a into a shared library if your platform supports
-it. For example, with Digital UNIX, do something like
- ld -shared -o libperl.so -all libperl.a -none -lc
-and with Linux/ELF, rebuild the perl .c files with -fPIC (and I
-also suggest -fomit-frame-pointer for Linux on Intel architetcures),
-do "make libperl.a" and then do
- gcc -shared -Wl,-soname,libperl.so.5 -o libperl.so.5.3 `ar t libperl.a`
-and then
- # cp libperl.so.5.3 /usr/lib
- # cd /usr/lib
- # ln -s libperl.so.5.3 libperl.so.5
- # ln -s libperl.so.5 libperl.so
- # ldconfig
-When you compile perl executables with cc_harness, append -L/usr/lib
-otherwise the -L for the perl source directory will override it. For
-example,
- perl -Iblib/arch -MO=CC,-O2,-ofoo3.c foo3.bench
- perl cc_harness -o foo3 -O2 foo3.c -L/usr/lib
- ls -l foo3
- -rwxr-xr-x 1 mbeattie xzdg 11218 Jul 1 15:28 foo3
-You'll probably also want to link your main perl executable against
-libperl.so; it's nice having an 11K perl executable.
-
-(3) To compile foo.pl into bytecode do
- perl -MO=Bytecode,-ofoo foo.pl
-To run the resulting bytecode file foo as a standalone program, you
-use the program byteperl which should have been built along with the
-extensions.
- ./byteperl foo
-Any extra arguments are passed in as @ARGV; they are not interpreted
-as perl options. If you want to load chunks of bytecode into an already
-running perl program then use the -m option and investigate the
-byteload_fh and byteload_string functions exported by the B module.
-See the NOTES file for details of these and other options (including
-optimisation options and ways of getting at the intermediate "assembler"
-code that the Bytecode backend uses).
-
-(3) There are little Bourne shell scripts and perl programs to aid with
-some common operations: assemble, disassemble, run_bytecode_test,
-run_test, cc_harness, test_harness, test_harness_bytecode.
-
-(4) Walk the op tree in execution order printing terse info about each op
- perl -MO=Terse,exec foo.pl
-
-(5) Walk the op tree in syntax order printing lengthier debug info about
-each op. You can also append ",exec" to walk in execution order, but the
-formatting is designed to look nice with Terse rather than Debug.
- perl -MO=Debug foo.pl
-
-(6) Produce a cross-reference report of the line numbers at which all
-variables, subs and formats are defined and used.
- perl -MO=Xref foo.pl
-
-XSUBS
-
-The C and CC backends can successfully compile some perl programs which
-make use of XSUB extensions. [I'll add more detail to this section in a
-later release.] As a prerequisite, such extensions must not need to do
-anything in their BOOT: section which needs to be done at runtime rather
-than compile time. Normally, the only code in the boot_Foo() function is
-a list of newXS() calls which xsubpp puts there and the compiler handles
-saving those XS subs itself. For each XSUB used, the C and CC compiler
-will generate an initialiser in their C output which refers to the name
-of the relevant C function (XS_Foo_somesub). What is not yet automated
-is the necessary commands and cc command-line options (e.g. via
-"perl cc_harness") which link against the extension libraries. For now,
-you need the XSUB extension to have installed files in the right format
-for using as C libraries (e.g. Foo.a or Foo.so). As the Foo.so files (or
-your platform's version) aren't suitable for linking against, you will
-have to reget the extension source and rebuild it as a static extension
-to force the generation of a suitable Foo.a file. Then you need to make
-a symlink (or copy or rename) of that file into a libFoo.a suitable for
-cc linking. Then add the appropriate -L and -l options to your
-"perl cc_harness" command line to find and link against those libraries.
-You may also need to fix up some platform-dependent environment variable
-to ensure that linked-against .so files are found at runtime too.
-
-DIFFERENCES
-
-The result of running a compiled Perl program can sometimes be different
-from running the same program with standard perl. Think of the compiler
-as having a slightly different implementation of the language Perl.
-Unfortunately, since Perl has had a single implementation until now,
-there are no formal standards or documents defining what behaviour is
-guaranteed of Perl the language and what just "happens to work".
-Some of the differences below are almost impossible to change because of
-the way the compiler works. Others can be changed to produce "standard"
-perl behaviour if it's deemed proper and the resulting performance hit
-is accepted. I'll use "standard perl" to mean the result of running a
-Perl program using the perl executable from the perl distribution.
-I'll use "compiled Perl program" to mean running an executable produced
-by this compiler kit ("the compiler") with the CC backend.
-
-Loops
- Standard perl calculates the target of "next", "last", and "redo"
- at run-time. The compiler calculates the targets at compile-time.
- For example, the program
-
- sub skip_on_odd { next NUMBER if $_[0] % 2 }
- NUMBER: for ($i = 0; $i < 5; $i++) {
- skip_on_odd($i);
- print $i;
- }
-
- produces the output
- 024
- with standard perl but gives a compile-time error with the compiler.
-
-Context of ".."
- The context (scalar or array) of the ".." operator determines whether
- it behaves as a range or a flip/flop. Standard perl delays until
- runtime the decision of which context it is in but the compiler needs
- to know the context at compile-time. For example,
- @a = (4,6,1,0,0,1);
- sub range { (shift @a)..(shift @a) }
- print range();
- while (@a) { print scalar(range()) }
- generates the output
- 456123E0
- with standard Perl but gives a compile-time error with compiled Perl.
-
-Arithmetic
- Compiled Perl programs use native C arithemtic much more frequently
- than standard perl. Operations on large numbers or on boundary
- cases may produce different behaviour.
-
-Deprecated features
- Features of standard perl such as $[ which have been deprecated
- in standard perl since version 5 was released have not been
- implemented in the compiler.
-
-Others
- I'll add to this list as I remember what they are.
-
-BUGS
-
-Here are some things which may cause the compiler problems.
-
-The following render the compiler useless (without serious hacking):
-* Use of the DATA filehandle (via __END__ or __DATA__ tokens)
-* Operator overloading with %OVERLOAD
-* The (deprecated) magic array-offset variable $[ does not work
-* The following operators are not yet implemented for CC
- goto
- sort with a non-default comparison (i.e. a named sub or inline block)
-* You can't use "last" to exit from a non-loop block.
-
-The following may give significant problems:
-* BEGIN blocks containing complex initialisation code
-* Code which is only ever referred to at runtime (e.g. via eval "..." or
- via method calls): see the -u option for the C and CC backends.
-* Run-time lookups of lexical variables in "outside" closures
-
-The following may cause problems (not thoroughly tested):
-* Dependencies on whether values of some "magic" Perl variables are
- determined at compile-time or runtime.
-* For the C and CC backends: compile-time strings which are longer than
- your C compiler can cope with in a single line or definition.
-* Reliance on intimate details of global destruction
-* For the Bytecode backend: high -On optimisation numbers with code
- that has complex flow of control.
-* Any "-w" option in the first line of your perl program is seen and
- acted on by perl itself before the compiler starts. The compiler
- itself then runs with warnings turned on. This may cause perl to
- print out warnings about the compiler itself since I haven't tested
- it thoroughly with warnings turned on.
-
-There is a terser but more complete list in the Todo file.
-
-Malcolm Beattie
-2 September 1996
diff --git a/contrib/perl5/ext/B/TESTS b/contrib/perl5/ext/B/TESTS
deleted file mode 100644
index e050f6c..0000000
--- a/contrib/perl5/ext/B/TESTS
+++ /dev/null
@@ -1,78 +0,0 @@
-Test results from compiling t/*/*.t
- C Bytecode CC
-
-base/cond.t OK ok OK
-base/if.t OK ok OK
-base/lex.t OK ok OK
-base/pat.t OK ok OK
-base/term.t OK ok OK
-cmd/elsif.t OK ok OK
-cmd/for.t OK ok ok 1, 2, 3, panic: pp_iter
-cmd/mod.t OK ok ok
-cmd/subval.t OK ok 1..34, not ok 27,28 (simply
- because filename changes).
-cmd/switch.t OK ok ok
-cmd/while.t OK ok ok
-io/argv.t OK ok ok
-io/dup.t OK ok ok
-io/fs.t OK ok ok
-io/inplace.t OK ok ok
-io/pipe.t OK ok ok with -umain
-io/print.t OK ok ok
-io/tell.t OK ok ok
-op/append.t OK ok OK
-op/array.t OK ok 1..36, not ok 7,10 (no $[)
-op/auto.t OK ok OK
-op/chop.t OK ok OK
-op/cond.t OK ok OK
-op/delete.t OK ok OK
-op/do.t OK ok OK
-op/each.t OK ok OK
-op/eval.t OK ok ok 1-6 of 16 then exits
-op/exec.t OK ok OK
-op/exp.t OK ok OK
-op/flip.t OK ok OK
-op/fork.t OK ok OK
-op/glob.t OK ok OK
-op/goto.t OK ok 1..9, Can't find label label1.
-op/groups.t OK (s/ucb/bin/ under Linux) OK 1..0 for now.
-op/index.t OK ok OK
-op/int.t OK ok OK
-op/join.t OK ok OK
-op/list.t OK ok OK
-op/local.t OK ok OK
-op/magic.t OK ok OK
-op/misc.t no DATA filehandle so succeeds trivially with 1..0
-op/mkdir.t OK ok OK
-op/my.t OK ok OK
-op/oct.t OK ok OK (C large const warnings)
-op/ord.t OK ok OK
-op/overload.t Mostly not ok Mostly not ok C errors.
-op/pack.t OK ok OK
-op/pat.t omit 26 (reset) ok [lots of memory for compile]
-op/push.t OK ok OK
-op/quotemeta.t OK ok OK
-op/rand.t OK ok
-op/range.t OK ok OK
-op/read.t OK ok OK
-op/readdir.t OK ok OK (substcont works too)
-op/ref.t omits "ok 40" (lex destruction) ok (Bytecode)
- CC: need -u for OBJ,BASEOBJ,
- UNIVERSAL,WHATEVER,main.
- 1..41, ok1-33,36-38,
- then ok 41, ok 39.DESTROY probs
-op/regexp.t OK ok ok (trivially all eval'd)
-op/repeat.t OK ok ok
-op/sleep.t OK ok ok
-op/sort.t OK ok 1..10, ok 1, Out of memory!
-op/split.t OK ok ok
-op/sprintf.t OK ok ok
-op/stat.t OK ok ok
-op/study.t OK ok ok
-op/subst.t OK ok ok
-op/substr.t OK ok ok1-22 except 7-9,11 (all $[)
-op/time.t OK ok ok
-op/undef.t omit 21 ok ok
-op/unshift.t OK ok ok
-op/vec.t OK ok ok
-op/write.t not ok 3 (no CvOUTSIDE lex from runtime eval). CC: 1..3, hang
diff --git a/contrib/perl5/ext/B/Todo b/contrib/perl5/ext/B/Todo
deleted file mode 100644
index 495be2e..0000000
--- a/contrib/perl5/ext/B/Todo
+++ /dev/null
@@ -1,37 +0,0 @@
-* Fixes
-
-CC backend: goto, sort with non-default comparison. last for non-loop blocks.
-Version checking
-improve XSUB handling (both static and dynamic)
-sv_magic can do SvREFCNT_inc(obj) which messes up precalculated refcounts
-allocation of XPV[INAHC]V structures needs fixing: Perl tries to free
-them whereas the compiler expects them to be linked to a xpv[inahc]v_root
-list the same as X[IPR]V structures.
-ref counts
-perl_parse replacement
-fix cstring for long strings
-compile-time initialisation of AvARRAYs
-signed/unsigned problems with NV (and IV?) initialisation and elsewhere?
-CvOUTSIDE for ordinary subs
-DATA filehandle for standalone Bytecode program (easy)
-DATA filehandle for multiple bytecode-compiled modules (harder)
-DATA filehandle for C-compiled program (yet harder)
-
-* Features
-
-type checking
-compile time v. runtime initialisation
-save PMOPs in compiled form
-selection of what to dump
-options for cutting out line info etc.
-comment output
-shared constants
-module dependencies
-
-* Optimisations
-collapse LISTOPs to UNOPs or BASEOPs
-compile-time qw(), constant subs
-global analysis of variables, type hints etc.
-demand-loaded bytecode (leader of each basic block replaced by an op
-which loads in bytecode for its block)
-fast sub calls for CC backend
diff --git a/contrib/perl5/ext/B/defsubs_h.PL b/contrib/perl5/ext/B/defsubs_h.PL
deleted file mode 100644
index da6566b..0000000
--- a/contrib/perl5/ext/B/defsubs_h.PL
+++ /dev/null
@@ -1,42 +0,0 @@
-# Do not remove the following line; MakeMaker relies on it to identify
-# this file as a template for defsubs.h
-# Extracting defsubs.h (with variable substitutions)
-#!perl
-my ($out) = __FILE__ =~ /(^.*)\.PL/i;
-$out =~ s/_h$/.h/;
-open(OUT,">$out") || die "Cannot open $file:$!";
-print "Extracting $out...\n";
-foreach my $const (qw(
- AVf_REAL
- HEf_SVKEY
- SVf_READONLY SVTYPEMASK
- GVf_IMPORTED_AV GVf_IMPORTED_HV
- GVf_IMPORTED_SV GVf_IMPORTED_CV
- CVf_METHOD CVf_LOCKED CVf_LVALUE
- SVf_IOK SVf_IVisUV SVf_NOK SVf_POK
- SVf_ROK SVp_IOK SVp_POK SVp_NOK
- ))
- {
- doconst($const);
- }
-foreach my $file (qw(op.h cop.h))
- {
- my $path = $^O eq 'MacOS' ? ":::$file" : "../../$file";
- open(OPH,"$path") || die "Cannot open $path:$!";
- while (<OPH>)
- {
- doconst($1) if (/#define\s+(\w+)\s+([\(\)\|\dx]+)\s*(?:$|\/\*)/);
- }
- close(OPH);
- }
-close(OUT);
-
-sub doconst
-{
- my $sym = shift;
- my $l = length($sym);
- print OUT <<"END";
- newCONSTSUB(stash,"$sym",newSViv($sym));
- av_push(export_ok,newSVpvn("$sym",$l));
-END
-}
diff --git a/contrib/perl5/ext/B/ramblings/cc.notes b/contrib/perl5/ext/B/ramblings/cc.notes
deleted file mode 100644
index 47bd65a..0000000
--- a/contrib/perl5/ext/B/ramblings/cc.notes
+++ /dev/null
@@ -1,32 +0,0 @@
-At entry to each basic block, the following can be assumed (and hence
-must be forced where necessary at the end of each basic block):
-
-The shadow stack @stack is empty.
-For each lexical object in @pad, VALID_IV holds for each T_INT,
-VALID_DOUBLE holds for each T_DOUBLE and VALID_SV holds otherwise.
-The C shadow variable sp holds the stack pointer (not necessarily stack_sp).
-
-write_back_stack
- Writes the contents of the shadow stack @stack back to the real stack.
- A write-back of each object in the stack is forced so that its
- backing SV contains the right value and that SV is then pushed onto the
- real stack. On return, @stack is empty.
-
-write_back_lexicals
- Forces a write-back (i.e. achieves VALID_SV), where necessary, for each
- lexical object in @pad. Objects with the TEMPORARY flag are skipped. If
- write_back_lexicals is called with an (optional) argument, then it is
- taken to be a bitmask of more flags: any lexical object with one of those
- flags set is also skipped and not written back to its SV.
-
-invalidate_lexicals($avoid)
- The VALID_INT and VALID_DOUBLE flags are turned off for each lexical
- object in @pad whose flags field doesn't overlap with $avoid.
-
-reload_lexicals
- For each necessary lexical object in @pad, makes sure that VALID_IV
- holds for objects of type T_INT, VALID_DOUBLE holds for objects for
- type T_DOUBLE, and VALID_SV holds for other objects. An object is
- considered for reloading if its flags field does not overlap with the
- (optional) argument passed to reload_lexicals.
-
diff --git a/contrib/perl5/ext/B/ramblings/curcop.runtime b/contrib/perl5/ext/B/ramblings/curcop.runtime
deleted file mode 100644
index 9b8b7d5..0000000
--- a/contrib/perl5/ext/B/ramblings/curcop.runtime
+++ /dev/null
@@ -1,39 +0,0 @@
-PP code uses of curcop
-----------------------
-
-pp_rv2gv
- when a new glob is created for an OPpLVAL_INTRO,
- curcop->cop_line is stored as GvLINE() in the new GP.
-pp_bless
- curcop->cop_stash is used as the stash in the one-arg form of bless
-
-pp_repeat
- tests (curcop != &compiling) to warn "Can't x= to readonly value"
-
-pp_pos
-pp_substr
-pp_index
-pp_rindex
-pp_aslice
-pp_lslice
-pp_splice
- curcop->cop_arybase
-
-pp_sort
- curcop->cop_stash used to determine whether to gv_fetchpv $a and $b
-
-pp_caller
- tests (curcop->cop_stash == debstash) to determine whether
- to set DB::args
-
-pp_reset
- resets vars in curcop->cop_stash
-
-pp_dbstate
- sets curcop = (COP*)op
-
-doeval
- compiles into curcop->cop_stash
-
-pp_nextstate
- sets curcop = (COP*)op
diff --git a/contrib/perl5/ext/B/ramblings/flip-flop b/contrib/perl5/ext/B/ramblings/flip-flop
deleted file mode 100644
index e08333d..0000000
--- a/contrib/perl5/ext/B/ramblings/flip-flop
+++ /dev/null
@@ -1,54 +0,0 @@
-PP(pp_range)
-{
- if (GIMME == G_ARRAY)
- return NORMAL;
- if (SvTRUEx(PAD_SV(PL_op->op_targ)))
- return cLOGOP->op_other;
- else
- return NORMAL;
-}
-
-pp_range is a LOGOP.
-In list context, it just returns op_next.
-In scalar context it checks the truth of targ and returns
-op_other if true, op_next if false.
-
-flip is an UNOP.
-It "looks after" its child which is always a pp_range LOGOP.
-In list context, it just returns the child's op_other.
-In scalar context, there are three possible outcomes:
- (1) set child's targ to 1, our targ to 1 and return op_next.
- (2) set child's targ to 1, our targ to 0, sp-- and return child's op_other.
- (3) Blank targ and TOPs and return op_next.
-Case 1 happens for a "..." with a matching lineno... or true TOPs.
-Case 2 happens for a ".." with a matching lineno... or true TOPs.
-Case 3 happens for a non-matching lineno or false TOPs.
-
- $a = lhs..rhs;
-
- ,-------> range
- ^ / \
- | true/ \false
- | / \
- first| lhs rhs
- | \ first /
- ^--- flip <----- flop
- \ /
- \ /
- sassign
-
-
-/* range */
-if (SvTRUE(curpad[op->op_targ]))
- goto label(op_other);
-/* op_next */
-...
-/* flip */
-/* For "..." returns op_next. For ".." returns op_next or op_first->op_other */
-/* end of basic block */
-goto out;
-label(range op_other):
-...
-/* flop */
-out:
-...
diff --git a/contrib/perl5/ext/B/ramblings/magic b/contrib/perl5/ext/B/ramblings/magic
deleted file mode 100644
index e41930a..0000000
--- a/contrib/perl5/ext/B/ramblings/magic
+++ /dev/null
@@ -1,93 +0,0 @@
-sv_magic()
-----------
-av.c
-av_store()
- Storing a non-undef element into an SMAGICAL array, av,
- assigns the equivalent lowercase form of magic (of the first
- MAGIC in the chain) to the value (with obj = av, name = 0 and
- namlen = array index).
-
-gv.c
-gv_init()
- Initialising gv assigns '*' magic to it with obj = gv, name =
- GvNAME and namlen = GvNAMELEN.
-gv_fetchpv()
- @ISA gets 'I' magic with obj = gv, zero name and namlen.
- %OVERLOAD gets 'A' magic with obj = gv, zero name and namlen.
- $1 to $9, $&, $`, $', $+ get '\0' magic with obj = gv,
- name = GvNAME and namlen = len ( = 1 presumably).
-Gv_AMupdate()
- Stashes for overload magic seem to get 'c' magic with obj = 0,
- name = &amt and namlen = sizeof(amt).
-hv_magic(hv, gv, how)
- Gives magic how to hv with obj = gv and zero name and namlen.
-
-mg.c
-mg_copy(sv, nsv, key, klen)
- Traverses the magic chain of sv. Upper case forms of magic
- (only) are copied across to nsv, preserving obj but using
- name = key and namlen = klen.
-magic_setpos()
- LvTARG of a PVLV gets 'g' magic with obj = name = 0 and namlen = pos.
-
-op.c
-mod()
- PVLV operators give magic to their targs with
- obj = name = namlen = 0. OP_POS gives '.', OP_VEC gives 'v'
- and OP_SUBSTR gives 'x'.
-
-perl.c
-magicname(sym, name, namlen)
- Fetches/creates a GV with name sym and gives it '\0' magic
- with obj = gv, name and namlen as passed.
-init_postdump_symbols()
- Elements of the environment get given SVs with 'e' magic.
- obj = sv and name and namlen point to the actual string
- within env.
-
-pp.c
-pp_av2arylen()
- $#foo gives '#' magic to the new SV with obj = av and
- name = namlen = 0.
-pp_study()
- SV gets 'g' magic with obj = name = namlen = 0.
-pp_substr()
- PVLV gets 'x' magic with obj = name = namlen = 0.
-pp_vec()
- PVLV gets 'x' magic with obj = name = namlen = 0.
-
-pp_hot.c
-pp_match()
- m//g gets 'g' magic with obj = name = namlen = 0.
-
-pp_sys.c
-pp_tie()
- sv gets magic with obj = sv and name = namlen = 0.
- If an HV or an AV, it gets 'P' magic, otherwise 'q' magic.
-pp_dbmopen()
- 'P' magic for the HV just as with pp_tie().
-pp_sysread()
- If tainting, the buffer SV gets 't' magic with
- obj = name = namlen = 0.
-
-sv.c
-sv_setsv()
- Doing sv_setsv(dstr, gv) gives '*' magic to dstr with
- obj = dstr, name = GvNAME, namlen = GvNAMELEN.
-
-util.c
-fbm_compile()
- The PVBM gets 'B' magic with obj = name = namlen = 0 and SvVALID
- is set to indicate that the Boyer-Moore table is valid.
- magic_setbm() just clears the SvVALID flag.
-
-hv_magic()
-----------
-
-gv.c
-gv_fetchfile()
- With perldb, the HV of a gvfile gv gets 'L' magic with obj = gv.
-gv_fetchpv()
- %SIG gets 'S' magic with obj = siggv.
-init_postdump_symbols()
- %ENV gets 'E' magic with obj = envgv.
diff --git a/contrib/perl5/ext/B/ramblings/reg.alloc b/contrib/perl5/ext/B/ramblings/reg.alloc
deleted file mode 100644
index 7fd69f2..0000000
--- a/contrib/perl5/ext/B/ramblings/reg.alloc
+++ /dev/null
@@ -1,32 +0,0 @@
-while ($i--) {
- foo();
-}
-exit
-
- PP code if i an int register if i an int but not a
- (i.e. can't be register (i.e. can be
- implicitly invalidated) implicitly invalidated)
- nextstate
- enterloop
-
-
- loop:
- gvsv GV (0xe6078) *i validates i validates i
- postdec invalidates $i invalidates $i
- and if_false goto out;
- i valid; $i invalid i valid; $i invalid
-
- i valid; $i invalid i valid; $i invalid
- nextstate
- pushmark
- gv GV (0xe600c) *foo
- entersub validates $i; invals i
-
- unstack
- goto loop:
-
- i valid; $i invalid
- out:
- leaveloop
- nextstate
- exit
diff --git a/contrib/perl5/ext/B/ramblings/runtime.porting b/contrib/perl5/ext/B/ramblings/runtime.porting
deleted file mode 100644
index d58b011..0000000
--- a/contrib/perl5/ext/B/ramblings/runtime.porting
+++ /dev/null
@@ -1,357 +0,0 @@
-Notes on porting the perl runtime PP engine.
-Importance: 1 = who cares?, 10 = vital
-Difficulty: 1 = trivial, 10 = very difficult. Level assumes a
-reasonable implementation of the SV and OP API already ported.
-
-OP Import Diff Comments
-null 10 1
-stub 10 1
-scalar 10 1
-pushmark 10 1 PUSHMARK
-wantarray 7 3 cxstack, dopoptosub
-const 10 1
-gvsv 10 1 save_scalar
-gv 10 1
-gelem 3 3
-padsv 10 2 SAVECLEARSV, provide_ref
-padav 10 2
-padhv 10 2
-padany 1 1
-pushre 7 3 pushes an op. Blech.
-rv2gv 6 5
-rv2sv 10 4
-av2arylen 7 3 sv_magic
-rv2cv 8 5 sv_2cv
-anoncode 7 6 cv_clone
-prototype 4 4 sv_2cv
-refgen 8 3
-srefgen 8 2
-ref 8 3
-bless 7 3
-backtick 5 4
-glob 5 2 do_readline
-readline 8 2 do_readline
-rcatline 8 2
-regcmaybe 8 1
-regcreset 8 1
-regcomp 8 9 pregcomp
-match 8 10
-qr 8 1
-subst 8 10
-substcont 8 7
-trans 7 4 do_trans
-sassign 10 3 mg_find, SvSETMAGIC
-aassign 10 5
-chop 8 3 do_chop
-schop 8 3 do_chop
-chomp 8 3 do_chomp
-schomp 8 3 do_chomp
-defined 10 2
-undef 10 3
-study 4 5
-pos 8 3 PVLV, mg_find
-preinc 10 2 sv_inc, SvSETMAGIC
-i_preinc
-predec 10 2 sv_dec, SvSETMAGIC
-i_predec
-postinc 10 2 sv_dec, SvSETMAGIC
-i_postinc
-postdec 10 2 sv_dec, SvSETMAGIC
-i_postdec
-pow 10 1
-multiply 10 1
-i_multiply 10 1
-divide 10 2
-i_divide 10 1
-modulo 10 2
-i_modulo 10 1
-repeat 6 4
-add 10 1
-i_add 10 1
-subtract 10 1
-i_subtract 10 1
-concat 10 2 mg_get
-stringify 10 2 sv_setpvn
-left_shift 10 1
-right_shift 10 1
-lt 10 1
-i_lt 10 1
-gt 10 1
-i_gt 10 1
-le 10 1
-i_le 10 1
-ge 10 1
-i_ge 10 1
-eq 10 1
-i_eq 10 1
-ne 10 1
-i_ne 10 1
-ncmp 10 1
-i_ncmp 10 1
-slt 10 2
-sgt 10 2
-sle 10 2
-sge 10 2
-seq 10 2 sv_eq
-sne 10 2
-scmp 10 2
-bit_and 10 2
-bit_xor 10 2
-bit_or 10 2
-negate 10 3
-i_negate 10 1
-not 10 1
-complement 10 3
-atan2 6 1
-sin 6 1
-cos 6 1
-rand 5 2
-srand 5 2
-exp 6 1
-log 6 2
-sqrt 6 2
-int 10 2
-hex 9 2
-oct 9 2
-abs 10 1
-length 10 1
-substr 10 4 PVLV
-vec 5 4
-index 9 3
-rindex 9 3
-sprintf 9 4 do_sprintf
-formline 6 7
-ord 6 2
-chr 6 2
-crypt 3 2
-ucfirst 6 2
-lcfirst 6 2
-uc 6 2
-lc 6 2
-quotemeta 6 3
-rv2av 10 3 save_svref, mg_get, save_ary
-aelemfast 10 2 av_fetch
-aelem 10 3
-aslice 9 4
-each 10 3 hv_iternext
-values 10 3 do_kv
-keys 10 3 do_kv
-delete 10 3
-exists 10 3
-rv2hv 10 3 save_svref, mg_get, save_ary, do_kv
-helem 10 3 save_svref, provide_ref
-hslice 9 4
-unpack 9 6 lengthy
-pack 9 6 lengthy
-split 9 9
-join 10 4 do_join
-list 10 2
-lslice 9 4
-anonlist 10 2
-anonhash 10 3
-splice 9 6
-push 10 2
-pop 10 2
-shift 10 2
-unshift 10 2
-sort 6 7
-reverse 9 4
-grepstart 6 5 modifies flow of control
-grepwhile 6 5 modifies flow of control
-mapstart 1 1
-mapwhile 6 5 modifies flow of control
-range 7 3 modifies flow of control
-flip 7 4 modifies flow of control
-flop 7 4 modifies flow of control
-and 10 3 modifies flow of control
-or 10 3 modifies flow of control
-xor
-cond_expr 10 3 modifies flow of control
-andassign 7 3 modifies flow of control
-orassign 7 3 modifies flow of control
-method 8 5
-entersub 10 7
-leavesub 10 5
-leavesublv
-caller 2 8
-warn 9 3
-die 9 3
-reset 2 2
-lineseq 1 1
-nextstate 10 1 Update stack_sp from cxstack. FREETMPS.
-dbstate 3 7
-unstack
-enter 10 3 cxstack, ENTER, SAVETMPS, PUSHBLOCK
-leave 10 3 cxstack, SAVETMPS, LEAVE, POPBLOCK
-scope 1 1
-enteriter 9 4 cxstack
-iter 9 3 cxstack
-enterloop 10 4
-leaveloop 10 4
-return 10 5
-last 9 6
-next 9 6
-redo 9 6
-dump 1 9 pp_goto
-goto 6 9
-exit 9 2 my_exit
-open 9 5 do_open
-close 9 3 do_close
-pipe_op 7 4
-fileno 9 2
-umask 4 2
-binmode 4 2
-tie 5 5 pp_entersub
-untie 5 2 sv_unmagic
-tied 5 2
-dbmopen 4 5
-dbmclose 4 2
-sselect 4 4
-select 7 3
-getc 7 2
-read 8 2 pp_sysread
-enterwrite 4 4 doform
-leavewrite 4 5
-prtf 4 4 do_sprintf
-print 8 6
-sysopen 8 2
-sysseek 8 2
-sysread 8 4
-syswrite 8 4 pp_send
-send 8 4
-recv 8 4 pp_sysread
-eof 9 2
-tell 9 3
-seek 9 2
-truncate 8 3
-fcntl 8 4 pp_ioctl
-ioctl 8 4
-flock 8 2
-socket 5 3
-sockpair 5 3
-bind 5 3
-connect 5 3
-listen 5 3
-accept 5 3
-shutdown 5 2
-gsockopt 5 3 pp_ssockopt
-ssockopt 5 3
-getsockname 5 3 pp_getpeername
-getpeername 5 3
-lstat 5 4 pp_stat
-stat 5 4 lengthy
-ftrread 5 2 cando
-ftrwrite 5 2 cando
-ftrexec 5 2 cando
-fteread 5 2 cando
-ftewrite 5 2 cando
-fteexec 5 2 cando
-ftis 5 2 cando
-fteowned 5 2 cando
-ftrowned 5 2 cando
-ftzero 5 2 cando
-ftsize 5 2 cando
-ftmtime 5 2 cando
-ftatime 5 2 cando
-ftctime 5 2 cando
-ftsock 5 2 cando
-ftchr 5 2 cando
-ftblk 5 2 cando
-ftfile 5 2 cando
-ftdir 5 2 cando
-ftpipe 5 2 cando
-ftlink 5 2 cando
-ftsuid 5 2 cando
-ftsgid 5 2 cando
-ftsvtx 5 2 cando
-fttty 5 2 cando
-fttext 5 4
-ftbinary 5 4 fttext
-chdir
-chown
-chroot
-unlink
-chmod
-utime
-rename
-link
-symlink
-readlink
-mkdir
-rmdir
-open_dir
-readdir
-telldir
-seekdir
-rewinddir
-closedir
-fork
-wait
-waitpid
-system
-exec
-kill
-getppid
-getpgrp
-setpgrp
-getpriority
-setpriority
-time
-tms
-localtime
-gmtime
-alarm
-sleep
-shmget
-shmctl
-shmread
-shmwrite
-msgget
-msgctl
-msgsnd
-msgrcv
-semget
-semctl
-semop
-require 6 9 doeval
-dofile 6 9 doeval
-entereval 6 9 doeval
-leaveeval 6 5
-entertry 7 4 modifies flow of control
-leavetry 7 3
-ghbyname
-ghbyaddr
-ghostent
-gnbyname
-gnbyaddr
-gnetent
-gpbyname
-gpbynumber
-gprotoent
-gsbyname
-gsbyport
-gservent
-shostent
-snetent
-sprotoent
-sservent
-ehostent
-enetent
-eprotoent
-eservent
-gpwnam
-gpwuid
-gpwent
-spwent
-epwent
-ggrnam
-ggrgid
-ggrent
-sgrent
-egrent
-getlogin
-syscall
-lock 6 1
-threadsv 6 2 unused if not USE_THREADS
-setstate 1 1 currently unused anywhere
-method_named 10 2
diff --git a/contrib/perl5/ext/B/typemap b/contrib/perl5/ext/B/typemap
deleted file mode 100644
index bafba1c..0000000
--- a/contrib/perl5/ext/B/typemap
+++ /dev/null
@@ -1,69 +0,0 @@
-TYPEMAP
-
-B::OP T_OP_OBJ
-B::UNOP T_OP_OBJ
-B::BINOP T_OP_OBJ
-B::LOGOP T_OP_OBJ
-B::LISTOP T_OP_OBJ
-B::PMOP T_OP_OBJ
-B::SVOP T_OP_OBJ
-B::PADOP T_OP_OBJ
-B::PVOP T_OP_OBJ
-B::CVOP T_OP_OBJ
-B::LOOP T_OP_OBJ
-B::COP T_OP_OBJ
-
-B::SV T_SV_OBJ
-B::PV T_SV_OBJ
-B::IV T_SV_OBJ
-B::NV T_SV_OBJ
-B::PVMG T_SV_OBJ
-B::PVLV T_SV_OBJ
-B::BM T_SV_OBJ
-B::RV T_SV_OBJ
-B::GV T_SV_OBJ
-B::CV T_SV_OBJ
-B::HV T_SV_OBJ
-B::AV T_SV_OBJ
-B::IO T_SV_OBJ
-
-B::MAGIC T_MG_OBJ
-SSize_t T_IV
-STRLEN T_IV
-PADOFFSET T_UV
-
-INPUT
-T_OP_OBJ
- if (SvROK($arg)) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type,tmp);
- }
- else
- croak(\"$var is not a reference\")
-
-T_SV_OBJ
- if (SvROK($arg)) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type,tmp);
- }
- else
- croak(\"$var is not a reference\")
-
-T_MG_OBJ
- if (SvROK($arg)) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type,tmp);
- }
- else
- croak(\"$var is not a reference\")
-
-OUTPUT
-T_OP_OBJ
- sv_setiv(newSVrv($arg, cc_opclassname(aTHX_ (OP*)$var)), PTR2IV($var));
-
-T_SV_OBJ
- make_sv_object(aTHX_ ($arg), (SV*)($var));
-
-
-T_MG_OBJ
- sv_setiv(newSVrv($arg, "B::MAGIC"), PTR2IV($var));
diff --git a/contrib/perl5/ext/ByteLoader/ByteLoader.pm b/contrib/perl5/ext/ByteLoader/ByteLoader.pm
deleted file mode 100644
index 9c8c84d..0000000
--- a/contrib/perl5/ext/ByteLoader/ByteLoader.pm
+++ /dev/null
@@ -1,40 +0,0 @@
-package ByteLoader;
-
-use XSLoader ();
-
-$VERSION = 0.04;
-
-XSLoader::load 'ByteLoader', $VERSION;
-
-# Preloaded methods go here.
-
-1;
-__END__
-
-=head1 NAME
-
-ByteLoader - load byte compiled perl code
-
-=head1 SYNOPSIS
-
- use ByteLoader 0.04;
- <byte code>
-
- use ByteLoader 0.04;
- <byte code>
-
-=head1 DESCRIPTION
-
-This module is used to load byte compiled perl code. It uses the source
-filter mechanism to read the byte code and insert it into the compiled
-code at the appropriate point.
-
-=head1 AUTHOR
-
-Tom Hughes <tom@compton.nu> based on the ideas of Tim Bunce and others.
-
-=head1 SEE ALSO
-
-perl(1).
-
-=cut
diff --git a/contrib/perl5/ext/ByteLoader/ByteLoader.xs b/contrib/perl5/ext/ByteLoader/ByteLoader.xs
deleted file mode 100644
index 05b795c..0000000
--- a/contrib/perl5/ext/ByteLoader/ByteLoader.xs
+++ /dev/null
@@ -1,131 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#include "byterun.h"
-
-/* Something arbitary for a buffer size */
-#define BYTELOADER_BUFFER 8096
-
-int
-bl_getc(struct byteloader_fdata *data)
-{
- dTHX;
- if (SvCUR(data->datasv) <= data->next_out) {
- int result;
- /* Run out of buffered data, so attempt to read some more */
- *(SvPV_nolen (data->datasv)) = '\0';
- SvCUR_set (data->datasv, 0);
- data->next_out = 0;
- result = FILTER_READ (data->idx + 1, data->datasv, BYTELOADER_BUFFER);
-
- /* Filter returned error, or we got EOF and no data, then return EOF.
- Not sure if filter is allowed to return EOF and add data simultaneously
- Think not, but will bullet proof against it. */
- if (result < 0 || SvCUR(data->datasv) == 0)
- return EOF;
- /* Else there must be at least one byte present, which is good enough */
- }
-
- return *((char *) SvPV_nolen (data->datasv) + data->next_out++);
-}
-
-int
-bl_read(struct byteloader_fdata *data, char *buf, size_t size, size_t n)
-{
- dTHX;
- char *start;
- STRLEN len;
- size_t wanted = size * n;
-
- start = SvPV (data->datasv, len);
- if (len < (data->next_out + wanted)) {
- int result;
-
- /* Shuffle data to start of buffer */
- len -= data->next_out;
- if (len) {
- memmove (start, start + data->next_out, len + 1);
- SvCUR_set (data->datasv, len);
- } else {
- *start = '\0'; /* Avoid call to memmove. */
- SvCUR_set (data->datasv, 0);
- }
- data->next_out = 0;
-
- /* Attempt to read more data. */
- do {
- result = FILTER_READ (data->idx + 1, data->datasv, BYTELOADER_BUFFER);
-
- start = SvPV (data->datasv, len);
- } while (result > 0 && len < wanted);
- /* Loop while not (EOF || error) and short reads */
-
- /* If not enough data read, truncate copy */
- if (wanted > len)
- wanted = len;
- }
-
- if (wanted > 0) {
- memcpy (buf, start + data->next_out, wanted);
- data->next_out += wanted;
- wanted /= size;
- }
- return (int) wanted;
-}
-
-static I32
-byteloader_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
-{
- OP *saveroot = PL_main_root;
- OP *savestart = PL_main_start;
- struct byteloader_state bstate;
- struct byteloader_fdata data;
-
- data.next_out = 0;
- data.datasv = FILTER_DATA(idx);
- data.idx = idx;
-
- bstate.bs_fdata = &data;
- bstate.bs_obj_list = Null(void**);
- bstate.bs_obj_list_fill = -1;
- bstate.bs_sv = Nullsv;
- bstate.bs_iv_overflows = 0;
-
- byterun(aTHXo_ &bstate);
-
- if (PL_in_eval) {
- OP *o;
-
- PL_eval_start = PL_main_start;
-
- o = newSVOP(OP_CONST, 0, newSViv(1));
- PL_eval_root = newLISTOP(OP_LINESEQ, 0, PL_main_root, o);
- PL_main_root->op_next = o;
- PL_eval_root = newUNOP(OP_LEAVEEVAL, 0, PL_eval_root);
- o->op_next = PL_eval_root;
-
- PL_main_root = saveroot;
- PL_main_start = savestart;
- }
-
- return 0;
-}
-
-MODULE = ByteLoader PACKAGE = ByteLoader
-
-PROTOTYPES: ENABLE
-
-void
-import(...)
- PREINIT:
- SV *sv = newSVpvn ("", 0);
- PPCODE:
- if (!sv)
- croak ("Could not allocate ByteLoader buffers");
- filter_add(byteloader_filter, sv);
-
-void
-unimport(...)
- PPCODE:
- filter_del(byteloader_filter);
diff --git a/contrib/perl5/ext/ByteLoader/Makefile.PL b/contrib/perl5/ext/ByteLoader/Makefile.PL
deleted file mode 100644
index c3cfcc7..0000000
--- a/contrib/perl5/ext/ByteLoader/Makefile.PL
+++ /dev/null
@@ -1,9 +0,0 @@
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
- NAME => 'ByteLoader',
- VERSION_FROM => 'ByteLoader.pm',
- XSPROTOARG => '-noprototypes',
- MAN3PODS => {}, # Pods will be built by installman.
- OBJECT => 'byterun$(OBJ_EXT) ByteLoader$(OBJ_EXT)',
-);
diff --git a/contrib/perl5/ext/ByteLoader/bytecode.h b/contrib/perl5/ext/ByteLoader/bytecode.h
deleted file mode 100644
index c6acd28..0000000
--- a/contrib/perl5/ext/ByteLoader/bytecode.h
+++ /dev/null
@@ -1,257 +0,0 @@
-typedef char *pvcontents;
-typedef char *strconst;
-typedef U32 PV;
-typedef char *op_tr_array;
-typedef int comment_t;
-typedef SV *svindex;
-typedef OP *opindex;
-typedef char *pvindex;
-typedef IV IV64;
-
-#define BGET_FREAD(argp, len, nelem) \
- bl_read(bstate->bs_fdata,(char*)(argp),(len),(nelem))
-#define BGET_FGETC() bl_getc(bstate->bs_fdata)
-
-#define BGET_U32(arg) \
- BGET_FREAD(&arg, sizeof(U32), 1)
-#define BGET_I32(arg) \
- BGET_FREAD(&arg, sizeof(I32), 1)
-#define BGET_U16(arg) \
- BGET_FREAD(&arg, sizeof(U16), 1)
-#define BGET_U8(arg) arg = BGET_FGETC()
-
-#define BGET_PV(arg) STMT_START { \
- BGET_U32(arg); \
- if (arg) { \
- New(666, bstate->bs_pv.xpv_pv, arg, char); \
- bl_read(bstate->bs_fdata, (void*)bstate->bs_pv.xpv_pv, arg, 1); \
- bstate->bs_pv.xpv_len = arg; \
- bstate->bs_pv.xpv_cur = arg - 1; \
- } else { \
- bstate->bs_pv.xpv_pv = 0; \
- bstate->bs_pv.xpv_len = 0; \
- bstate->bs_pv.xpv_cur = 0; \
- } \
- } STMT_END
-
-#ifdef BYTELOADER_LOG_COMMENTS
-# define BGET_comment_t(arg) \
- STMT_START { \
- char buf[1024]; \
- int i = 0; \
- do { \
- arg = BGET_FGETC(); \
- buf[i++] = (char)arg; \
- } while (arg != '\n' && arg != EOF); \
- buf[i] = '\0'; \
- PerlIO_printf(PerlIO_stderr(), "%s", buf); \
- } STMT_END
-#else
-# define BGET_comment_t(arg) \
- do { arg = BGET_FGETC(); } while (arg != '\n' && arg != EOF)
-#endif
-
-/*
- * In the following, sizeof(IV)*4 is just a way of encoding 32 on 64-bit-IV
- * machines such that 32-bit machine compilers don't whine about the shift
- * count being too high even though the code is never reached there.
- */
-#define BGET_IV64(arg) STMT_START { \
- U32 hi, lo; \
- BGET_U32(hi); \
- BGET_U32(lo); \
- if (sizeof(IV) == 8) \
- arg = ((IV)hi << (sizeof(IV)*4) | (IV)lo); \
- else if (((I32)hi == -1 && (I32)lo < 0) \
- || ((I32)hi == 0 && (I32)lo >= 0)) { \
- arg = (I32)lo; \
- } \
- else { \
- bstate->bs_iv_overflows++; \
- arg = 0; \
- } \
- } STMT_END
-
-#define BGET_op_tr_array(arg) do { \
- unsigned short *ary; \
- int i; \
- New(666, ary, 256, unsigned short); \
- BGET_FREAD(ary, sizeof(unsigned short), 256); \
- arg = (char *) ary; \
- } while (0)
-
-#define BGET_pvcontents(arg) arg = bstate->bs_pv.xpv_pv
-#define BGET_strconst(arg) STMT_START { \
- for (arg = PL_tokenbuf; (*arg = BGET_FGETC()); arg++) /* nothing */; \
- arg = PL_tokenbuf; \
- } STMT_END
-
-#define BGET_NV(arg) STMT_START { \
- char *str; \
- BGET_strconst(str); \
- arg = Atof(str); \
- } STMT_END
-
-#define BGET_objindex(arg, type) STMT_START { \
- BGET_U32(ix); \
- arg = (type)bstate->bs_obj_list[ix]; \
- } STMT_END
-#define BGET_svindex(arg) BGET_objindex(arg, svindex)
-#define BGET_opindex(arg) BGET_objindex(arg, opindex)
-#define BGET_pvindex(arg) STMT_START { \
- BGET_objindex(arg, pvindex); \
- arg = arg ? savepv(arg) : arg; \
- } STMT_END
-
-#define BSET_ldspecsv(sv, arg) sv = specialsv_list[arg]
-#define BSET_stpv(pv, arg) STMT_START { \
- BSET_OBJ_STORE(pv, arg); \
- SAVEFREEPV(pv); \
- } STMT_END
-
-#define BSET_sv_refcnt_add(svrefcnt, arg) svrefcnt += arg
-#define BSET_gp_refcnt_add(gprefcnt, arg) gprefcnt += arg
-#define BSET_gp_share(sv, arg) STMT_START { \
- gp_free((GV*)sv); \
- GvGP(sv) = GvGP(arg); \
- } STMT_END
-
-#define BSET_gv_fetchpv(sv, arg) sv = (SV*)gv_fetchpv(arg, TRUE, SVt_PV)
-#define BSET_gv_stashpv(sv, arg) sv = (SV*)gv_stashpv(arg, TRUE)
-#define BSET_sv_magic(sv, arg) sv_magic(sv, Nullsv, arg, 0, 0)
-#define BSET_mg_pv(mg, arg) mg->mg_ptr = arg; mg->mg_len = bstate->bs_pv.xpv_cur
-#define BSET_sv_upgrade(sv, arg) (void)SvUPGRADE(sv, arg)
-#define BSET_xpv(sv) do { \
- SvPV_set(sv, bstate->bs_pv.xpv_pv); \
- SvCUR_set(sv, bstate->bs_pv.xpv_cur); \
- SvLEN_set(sv, bstate->bs_pv.xpv_len); \
- } while (0)
-#define BSET_av_extend(sv, arg) av_extend((AV*)sv, arg)
-
-#define BSET_av_push(sv, arg) av_push((AV*)sv, arg)
-#define BSET_hv_store(sv, arg) \
- hv_store((HV*)sv, bstate->bs_pv.xpv_pv, bstate->bs_pv.xpv_cur, arg, 0)
-#define BSET_pv_free(pv) Safefree(pv.xpv_pv)
-#define BSET_pregcomp(o, arg) \
- ((PMOP*)o)->op_pmregexp = arg ? \
- CALLREGCOMP(aTHX_ arg, arg + bstate->bs_pv.xpv_cur, ((PMOP*)o)) : 0
-#define BSET_newsv(sv, arg) \
- STMT_START { \
- sv = (arg == SVt_PVAV ? (SV*)newAV() : \
- arg == SVt_PVHV ? (SV*)newHV() : \
- NEWSV(666,0)); \
- SvUPGRADE(sv, arg); \
- } STMT_END
-#define BSET_newop(o, arg) ((o = (OP*)safemalloc(optype_size[arg])), \
- memzero((char*)o,optype_size[arg]))
-#define BSET_newopn(o, arg) STMT_START { \
- OP *oldop = o; \
- BSET_newop(o, arg); \
- oldop->op_next = o; \
- } STMT_END
-
-#define BSET_ret(foo) STMT_START { \
- Safefree(bstate->bs_obj_list); \
- return; \
- } STMT_END
-
-/*
- * Kludge special-case workaround for OP_MAPSTART
- * which needs the ppaddr for OP_GREPSTART. Blech.
- */
-#define BSET_op_type(o, arg) STMT_START { \
- o->op_type = arg; \
- if (arg == OP_MAPSTART) \
- arg = OP_GREPSTART; \
- o->op_ppaddr = PL_ppaddr[arg]; \
- } STMT_END
-#define BSET_op_ppaddr(o, arg) Perl_croak(aTHX_ "op_ppaddr not yet implemented")
-#define BSET_curpad(pad, arg) STMT_START { \
- PL_comppad = (AV *)arg; \
- pad = AvARRAY(arg); \
- } STMT_END
-/* this works now that Sarathy's changed the CopFILE_set macro to do the SvREFCNT_inc()
- -- BKS 6-2-2000 */
-#define BSET_cop_file(cop, arg) CopFILE_set(cop,arg)
-#define BSET_cop_line(cop, arg) CopLINE_set(cop,arg)
-#define BSET_cop_stashpv(cop, arg) CopSTASHPV_set(cop,arg)
-
-/* this is simply stolen from the code in newATTRSUB() */
-#define BSET_push_begin(ary,cv) \
- STMT_START { \
- I32 oldscope = PL_scopestack_ix; \
- ENTER; \
- SAVECOPFILE(&PL_compiling); \
- SAVECOPLINE(&PL_compiling); \
- save_svref(&PL_rs); \
- sv_setsv(PL_rs, PL_nrs); \
- if (!PL_beginav) \
- PL_beginav = newAV(); \
- av_push(PL_beginav, cv); \
- call_list(oldscope, PL_beginav); \
- PL_curcop = &PL_compiling; \
- PL_compiling.op_private = PL_hints; \
- LEAVE; \
- } STMT_END
-#define BSET_push_init(ary,cv) \
- STMT_START { \
- av_unshift((PL_initav ? PL_initav : (PL_initav = newAV(), PL_initav)), 1); \
- av_store(PL_initav, 0, cv); \
- } STMT_END
-#define BSET_push_end(ary,cv) \
- STMT_START { \
- av_unshift((PL_endav ? PL_endav : (PL_endav = newAV(), PL_endav)), 1); \
- av_store(PL_endav, 0, cv); \
- } STMT_END
-#define BSET_OBJ_STORE(obj, ix) \
- (I32)ix > bstate->bs_obj_list_fill ? \
- bset_obj_store(aTHXo_ bstate, obj, (I32)ix) : (bstate->bs_obj_list[ix] = obj)
-
-/* NOTE: the bytecode header only sanity-checks the bytecode. If a script cares about
- * what version of Perl it's being called under, it should do a 'require 5.6.0' or
- * equivalent. However, since the header includes checks requiring an exact match in
- * ByteLoader versions (we can't guarantee forward compatibility), you don't
- * need to specify one:
- * use ByteLoader;
- * is all you need.
- * -- BKS, June 2000
-*/
-
-#define HEADER_FAIL(f) \
- Perl_croak(aTHX_ "Invalid bytecode for this architecture: " f)
-#define HEADER_FAIL1(f, arg1) \
- Perl_croak(aTHX_ "Invalid bytecode for this architecture: " f, arg1)
-#define HEADER_FAIL2(f, arg1, arg2) \
- Perl_croak(aTHX_ "Invalid bytecode for this architecture: " f, arg1, arg2)
-
-#define BYTECODE_HEADER_CHECK \
- STMT_START { \
- U32 sz = 0; \
- strconst str; \
- \
- BGET_U32(sz); /* Magic: 'PLBC' */ \
- if (sz != 0x43424c50) { \
- HEADER_FAIL1("bad magic (want 0x43424c50, got %#x)", (int)sz); \
- } \
- BGET_strconst(str); /* archname */ \
- if (strNE(str, ARCHNAME)) { \
- HEADER_FAIL2("wrong architecture (want %s, you have %s)",str,ARCHNAME); \
- } \
- BGET_strconst(str); /* ByteLoader version */ \
- if (strNE(str, VERSION)) { \
- HEADER_FAIL2("mismatched ByteLoader versions (want %s, you have %s)", \
- str, VERSION); \
- } \
- BGET_U32(sz); /* ivsize */ \
- if (sz != IVSIZE) { \
- HEADER_FAIL("different IVSIZE"); \
- } \
- BGET_U32(sz); /* ptrsize */ \
- if (sz != PTRSIZE) { \
- HEADER_FAIL("different PTRSIZE"); \
- } \
- BGET_strconst(str); /* byteorder */ \
- if (strNE(str, STRINGIFY(BYTEORDER))) { \
- HEADER_FAIL("different byteorder"); \
- } \
- } STMT_END
diff --git a/contrib/perl5/ext/ByteLoader/byterun.c b/contrib/perl5/ext/ByteLoader/byterun.c
deleted file mode 100644
index 71cd8aa..0000000
--- a/contrib/perl5/ext/ByteLoader/byterun.c
+++ /dev/null
@@ -1,916 +0,0 @@
-/*
- * Copyright (c) 1996-1999 Malcolm Beattie
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-/*
- * This file is autogenerated from bytecode.pl. Changes made here will be lost.
- */
-
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#define NO_XSLOCKS
-#include "XSUB.h"
-
-#ifdef PERL_OBJECT
-#undef CALL_FPTR
-#define CALL_FPTR(fptr) (pPerl->*fptr)
-#undef PL_ppaddr
-#define PL_ppaddr (*get_ppaddr())
-#endif
-
-#include "byterun.h"
-#include "bytecode.h"
-
-
-static const int optype_size[] = {
- sizeof(OP),
- sizeof(UNOP),
- sizeof(BINOP),
- sizeof(LOGOP),
- sizeof(LISTOP),
- sizeof(PMOP),
- sizeof(SVOP),
- sizeof(PADOP),
- sizeof(PVOP),
- sizeof(LOOP),
- sizeof(COP)
-};
-
-void *
-bset_obj_store(pTHXo_ struct byteloader_state *bstate, void *obj, I32 ix)
-{
- if (ix > bstate->bs_obj_list_fill) {
- Renew(bstate->bs_obj_list, ix + 32, void*);
- bstate->bs_obj_list_fill = ix + 31;
- }
- bstate->bs_obj_list[ix] = obj;
- return obj;
-}
-
-void
-byterun(pTHXo_ register struct byteloader_state *bstate)
-{
- register int insn;
- U32 ix;
- SV *specialsv_list[6];
-
- BYTECODE_HEADER_CHECK; /* croak if incorrect platform */
- New(666, bstate->bs_obj_list, 32, void*); /* set op objlist */
- bstate->bs_obj_list_fill = 31;
-
- specialsv_list[0] = Nullsv;
- specialsv_list[1] = &PL_sv_undef;
- specialsv_list[2] = &PL_sv_yes;
- specialsv_list[3] = &PL_sv_no;
- specialsv_list[4] = pWARN_ALL;
- specialsv_list[5] = pWARN_NONE;
-
- while ((insn = BGET_FGETC()) != EOF) {
- switch (insn) {
- case INSN_COMMENT: /* 35 */
- {
- comment_t arg;
- BGET_comment_t(arg);
- arg = arg;
- break;
- }
- case INSN_NOP: /* 10 */
- {
- break;
- }
- case INSN_RET: /* 0 */
- {
- BSET_ret(none);
- break;
- }
- case INSN_LDSV: /* 1 */
- {
- svindex arg;
- BGET_svindex(arg);
- bstate->bs_sv = arg;
- break;
- }
- case INSN_LDOP: /* 2 */
- {
- opindex arg;
- BGET_opindex(arg);
- PL_op = arg;
- break;
- }
- case INSN_STSV: /* 3 */
- {
- U32 arg;
- BGET_U32(arg);
- BSET_OBJ_STORE(bstate->bs_sv, arg);
- break;
- }
- case INSN_STOP: /* 4 */
- {
- U32 arg;
- BGET_U32(arg);
- BSET_OBJ_STORE(PL_op, arg);
- break;
- }
- case INSN_STPV: /* 5 */
- {
- U32 arg;
- BGET_U32(arg);
- BSET_stpv(bstate->bs_pv.xpv_pv, arg);
- break;
- }
- case INSN_LDSPECSV: /* 6 */
- {
- U8 arg;
- BGET_U8(arg);
- BSET_ldspecsv(bstate->bs_sv, arg);
- break;
- }
- case INSN_NEWSV: /* 7 */
- {
- U8 arg;
- BGET_U8(arg);
- BSET_newsv(bstate->bs_sv, arg);
- break;
- }
- case INSN_NEWOP: /* 8 */
- {
- U8 arg;
- BGET_U8(arg);
- BSET_newop(PL_op, arg);
- break;
- }
- case INSN_NEWOPN: /* 9 */
- {
- U8 arg;
- BGET_U8(arg);
- BSET_newopn(PL_op, arg);
- break;
- }
- case INSN_NEWPV: /* 11 */
- {
- PV arg;
- BGET_PV(arg);
- break;
- }
- case INSN_PV_CUR: /* 12 */
- {
- STRLEN arg;
- BGET_U32(arg);
- bstate->bs_pv.xpv_cur = arg;
- break;
- }
- case INSN_PV_FREE: /* 13 */
- {
- BSET_pv_free(bstate->bs_pv);
- break;
- }
- case INSN_SV_UPGRADE: /* 14 */
- {
- char arg;
- BGET_U8(arg);
- BSET_sv_upgrade(bstate->bs_sv, arg);
- break;
- }
- case INSN_SV_REFCNT: /* 15 */
- {
- U32 arg;
- BGET_U32(arg);
- SvREFCNT(bstate->bs_sv) = arg;
- break;
- }
- case INSN_SV_REFCNT_ADD: /* 16 */
- {
- I32 arg;
- BGET_I32(arg);
- BSET_sv_refcnt_add(SvREFCNT(bstate->bs_sv), arg);
- break;
- }
- case INSN_SV_FLAGS: /* 17 */
- {
- U32 arg;
- BGET_U32(arg);
- SvFLAGS(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XRV: /* 18 */
- {
- svindex arg;
- BGET_svindex(arg);
- SvRV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XPV: /* 19 */
- {
- BSET_xpv(bstate->bs_sv);
- break;
- }
- case INSN_XIV32: /* 20 */
- {
- I32 arg;
- BGET_I32(arg);
- SvIVX(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIV64: /* 21 */
- {
- IV64 arg;
- BGET_IV64(arg);
- SvIVX(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XNV: /* 22 */
- {
- NV arg;
- BGET_NV(arg);
- SvNVX(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XLV_TARGOFF: /* 23 */
- {
- STRLEN arg;
- BGET_U32(arg);
- LvTARGOFF(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XLV_TARGLEN: /* 24 */
- {
- STRLEN arg;
- BGET_U32(arg);
- LvTARGLEN(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XLV_TARG: /* 25 */
- {
- svindex arg;
- BGET_svindex(arg);
- LvTARG(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XLV_TYPE: /* 26 */
- {
- char arg;
- BGET_U8(arg);
- LvTYPE(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XBM_USEFUL: /* 27 */
- {
- I32 arg;
- BGET_I32(arg);
- BmUSEFUL(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XBM_PREVIOUS: /* 28 */
- {
- U16 arg;
- BGET_U16(arg);
- BmPREVIOUS(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XBM_RARE: /* 29 */
- {
- U8 arg;
- BGET_U8(arg);
- BmRARE(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XFM_LINES: /* 30 */
- {
- I32 arg;
- BGET_I32(arg);
- FmLINES(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_LINES: /* 31 */
- {
- long arg;
- BGET_I32(arg);
- IoLINES(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_PAGE: /* 32 */
- {
- long arg;
- BGET_I32(arg);
- IoPAGE(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_PAGE_LEN: /* 33 */
- {
- long arg;
- BGET_I32(arg);
- IoPAGE_LEN(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_LINES_LEFT: /* 34 */
- {
- long arg;
- BGET_I32(arg);
- IoLINES_LEFT(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_TOP_NAME: /* 36 */
- {
- pvcontents arg;
- BGET_pvcontents(arg);
- IoTOP_NAME(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_TOP_GV: /* 37 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&IoTOP_GV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_FMT_NAME: /* 38 */
- {
- pvcontents arg;
- BGET_pvcontents(arg);
- IoFMT_NAME(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_FMT_GV: /* 39 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&IoFMT_GV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_BOTTOM_NAME: /* 40 */
- {
- pvcontents arg;
- BGET_pvcontents(arg);
- IoBOTTOM_NAME(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_BOTTOM_GV: /* 41 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&IoBOTTOM_GV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_SUBPROCESS: /* 42 */
- {
- short arg;
- BGET_U16(arg);
- IoSUBPROCESS(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_TYPE: /* 43 */
- {
- char arg;
- BGET_U8(arg);
- IoTYPE(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XIO_FLAGS: /* 44 */
- {
- char arg;
- BGET_U8(arg);
- IoFLAGS(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_STASH: /* 45 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&CvSTASH(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_START: /* 46 */
- {
- opindex arg;
- BGET_opindex(arg);
- CvSTART(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_ROOT: /* 47 */
- {
- opindex arg;
- BGET_opindex(arg);
- CvROOT(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_GV: /* 48 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&CvGV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_FILE: /* 49 */
- {
- pvindex arg;
- BGET_pvindex(arg);
- CvFILE(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_DEPTH: /* 50 */
- {
- long arg;
- BGET_I32(arg);
- CvDEPTH(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_PADLIST: /* 51 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&CvPADLIST(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_OUTSIDE: /* 52 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&CvOUTSIDE(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XCV_FLAGS: /* 53 */
- {
- U16 arg;
- BGET_U16(arg);
- CvFLAGS(bstate->bs_sv) = arg;
- break;
- }
- case INSN_AV_EXTEND: /* 54 */
- {
- SSize_t arg;
- BGET_I32(arg);
- BSET_av_extend(bstate->bs_sv, arg);
- break;
- }
- case INSN_AV_PUSH: /* 55 */
- {
- svindex arg;
- BGET_svindex(arg);
- BSET_av_push(bstate->bs_sv, arg);
- break;
- }
- case INSN_XAV_FILL: /* 56 */
- {
- SSize_t arg;
- BGET_I32(arg);
- AvFILLp(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XAV_MAX: /* 57 */
- {
- SSize_t arg;
- BGET_I32(arg);
- AvMAX(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XAV_FLAGS: /* 58 */
- {
- U8 arg;
- BGET_U8(arg);
- AvFLAGS(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XHV_RITER: /* 59 */
- {
- I32 arg;
- BGET_I32(arg);
- HvRITER(bstate->bs_sv) = arg;
- break;
- }
- case INSN_XHV_NAME: /* 60 */
- {
- pvcontents arg;
- BGET_pvcontents(arg);
- HvNAME(bstate->bs_sv) = arg;
- break;
- }
- case INSN_HV_STORE: /* 61 */
- {
- svindex arg;
- BGET_svindex(arg);
- BSET_hv_store(bstate->bs_sv, arg);
- break;
- }
- case INSN_SV_MAGIC: /* 62 */
- {
- char arg;
- BGET_U8(arg);
- BSET_sv_magic(bstate->bs_sv, arg);
- break;
- }
- case INSN_MG_OBJ: /* 63 */
- {
- svindex arg;
- BGET_svindex(arg);
- SvMAGIC(bstate->bs_sv)->mg_obj = arg;
- break;
- }
- case INSN_MG_PRIVATE: /* 64 */
- {
- U16 arg;
- BGET_U16(arg);
- SvMAGIC(bstate->bs_sv)->mg_private = arg;
- break;
- }
- case INSN_MG_FLAGS: /* 65 */
- {
- U8 arg;
- BGET_U8(arg);
- SvMAGIC(bstate->bs_sv)->mg_flags = arg;
- break;
- }
- case INSN_MG_PV: /* 66 */
- {
- pvcontents arg;
- BGET_pvcontents(arg);
- BSET_mg_pv(SvMAGIC(bstate->bs_sv), arg);
- break;
- }
- case INSN_XMG_STASH: /* 67 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&SvSTASH(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GV_FETCHPV: /* 68 */
- {
- strconst arg;
- BGET_strconst(arg);
- BSET_gv_fetchpv(bstate->bs_sv, arg);
- break;
- }
- case INSN_GV_STASHPV: /* 69 */
- {
- strconst arg;
- BGET_strconst(arg);
- BSET_gv_stashpv(bstate->bs_sv, arg);
- break;
- }
- case INSN_GP_SV: /* 70 */
- {
- svindex arg;
- BGET_svindex(arg);
- GvSV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_REFCNT: /* 71 */
- {
- U32 arg;
- BGET_U32(arg);
- GvREFCNT(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_REFCNT_ADD: /* 72 */
- {
- I32 arg;
- BGET_I32(arg);
- BSET_gp_refcnt_add(GvREFCNT(bstate->bs_sv), arg);
- break;
- }
- case INSN_GP_AV: /* 73 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&GvAV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_HV: /* 74 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&GvHV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_CV: /* 75 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&GvCV(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_FILE: /* 76 */
- {
- pvindex arg;
- BGET_pvindex(arg);
- GvFILE(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_IO: /* 77 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&GvIOp(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_FORM: /* 78 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&GvFORM(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_CVGEN: /* 79 */
- {
- U32 arg;
- BGET_U32(arg);
- GvCVGEN(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_LINE: /* 80 */
- {
- line_t arg;
- BGET_U16(arg);
- GvLINE(bstate->bs_sv) = arg;
- break;
- }
- case INSN_GP_SHARE: /* 81 */
- {
- svindex arg;
- BGET_svindex(arg);
- BSET_gp_share(bstate->bs_sv, arg);
- break;
- }
- case INSN_XGV_FLAGS: /* 82 */
- {
- U8 arg;
- BGET_U8(arg);
- GvFLAGS(bstate->bs_sv) = arg;
- break;
- }
- case INSN_OP_NEXT: /* 83 */
- {
- opindex arg;
- BGET_opindex(arg);
- PL_op->op_next = arg;
- break;
- }
- case INSN_OP_SIBLING: /* 84 */
- {
- opindex arg;
- BGET_opindex(arg);
- PL_op->op_sibling = arg;
- break;
- }
- case INSN_OP_PPADDR: /* 85 */
- {
- strconst arg;
- BGET_strconst(arg);
- BSET_op_ppaddr(PL_op->op_ppaddr, arg);
- break;
- }
- case INSN_OP_TARG: /* 86 */
- {
- PADOFFSET arg;
- BGET_U32(arg);
- PL_op->op_targ = arg;
- break;
- }
- case INSN_OP_TYPE: /* 87 */
- {
- OPCODE arg;
- BGET_U16(arg);
- BSET_op_type(PL_op, arg);
- break;
- }
- case INSN_OP_SEQ: /* 88 */
- {
- U16 arg;
- BGET_U16(arg);
- PL_op->op_seq = arg;
- break;
- }
- case INSN_OP_FLAGS: /* 89 */
- {
- U8 arg;
- BGET_U8(arg);
- PL_op->op_flags = arg;
- break;
- }
- case INSN_OP_PRIVATE: /* 90 */
- {
- U8 arg;
- BGET_U8(arg);
- PL_op->op_private = arg;
- break;
- }
- case INSN_OP_FIRST: /* 91 */
- {
- opindex arg;
- BGET_opindex(arg);
- cUNOP->op_first = arg;
- break;
- }
- case INSN_OP_LAST: /* 92 */
- {
- opindex arg;
- BGET_opindex(arg);
- cBINOP->op_last = arg;
- break;
- }
- case INSN_OP_OTHER: /* 93 */
- {
- opindex arg;
- BGET_opindex(arg);
- cLOGOP->op_other = arg;
- break;
- }
- case INSN_OP_PMREPLROOT: /* 94 */
- {
- opindex arg;
- BGET_opindex(arg);
- cPMOP->op_pmreplroot = arg;
- break;
- }
- case INSN_OP_PMREPLROOTGV: /* 95 */
- {
- svindex arg;
- BGET_svindex(arg);
- *(SV**)&cPMOP->op_pmreplroot = arg;
- break;
- }
- case INSN_OP_PMREPLSTART: /* 96 */
- {
- opindex arg;
- BGET_opindex(arg);
- cPMOP->op_pmreplstart = arg;
- break;
- }
- case INSN_OP_PMNEXT: /* 97 */
- {
- opindex arg;
- BGET_opindex(arg);
- *(OP**)&cPMOP->op_pmnext = arg;
- break;
- }
- case INSN_PREGCOMP: /* 98 */
- {
- pvcontents arg;
- BGET_pvcontents(arg);
- BSET_pregcomp(PL_op, arg);
- break;
- }
- case INSN_OP_PMFLAGS: /* 99 */
- {
- U16 arg;
- BGET_U16(arg);
- cPMOP->op_pmflags = arg;
- break;
- }
- case INSN_OP_PMPERMFLAGS: /* 100 */
- {
- U16 arg;
- BGET_U16(arg);
- cPMOP->op_pmpermflags = arg;
- break;
- }
- case INSN_OP_SV: /* 101 */
- {
- svindex arg;
- BGET_svindex(arg);
- cSVOP->op_sv = arg;
- break;
- }
- case INSN_OP_PADIX: /* 102 */
- {
- PADOFFSET arg;
- BGET_U32(arg);
- cPADOP->op_padix = arg;
- break;
- }
- case INSN_OP_PV: /* 103 */
- {
- pvcontents arg;
- BGET_pvcontents(arg);
- cPVOP->op_pv = arg;
- break;
- }
- case INSN_OP_PV_TR: /* 104 */
- {
- op_tr_array arg;
- BGET_op_tr_array(arg);
- cPVOP->op_pv = arg;
- break;
- }
- case INSN_OP_REDOOP: /* 105 */
- {
- opindex arg;
- BGET_opindex(arg);
- cLOOP->op_redoop = arg;
- break;
- }
- case INSN_OP_NEXTOP: /* 106 */
- {
- opindex arg;
- BGET_opindex(arg);
- cLOOP->op_nextop = arg;
- break;
- }
- case INSN_OP_LASTOP: /* 107 */
- {
- opindex arg;
- BGET_opindex(arg);
- cLOOP->op_lastop = arg;
- break;
- }
- case INSN_COP_LABEL: /* 108 */
- {
- pvindex arg;
- BGET_pvindex(arg);
- cCOP->cop_label = arg;
- break;
- }
- case INSN_COP_STASHPV: /* 109 */
- {
- pvindex arg;
- BGET_pvindex(arg);
- BSET_cop_stashpv(cCOP, arg);
- break;
- }
- case INSN_COP_FILE: /* 110 */
- {
- pvindex arg;
- BGET_pvindex(arg);
- BSET_cop_file(cCOP, arg);
- break;
- }
- case INSN_COP_SEQ: /* 111 */
- {
- U32 arg;
- BGET_U32(arg);
- cCOP->cop_seq = arg;
- break;
- }
- case INSN_COP_ARYBASE: /* 112 */
- {
- I32 arg;
- BGET_I32(arg);
- cCOP->cop_arybase = arg;
- break;
- }
- case INSN_COP_LINE: /* 113 */
- {
- line_t arg;
- BGET_U16(arg);
- BSET_cop_line(cCOP, arg);
- break;
- }
- case INSN_COP_WARNINGS: /* 114 */
- {
- svindex arg;
- BGET_svindex(arg);
- cCOP->cop_warnings = arg;
- break;
- }
- case INSN_MAIN_START: /* 115 */
- {
- opindex arg;
- BGET_opindex(arg);
- PL_main_start = arg;
- break;
- }
- case INSN_MAIN_ROOT: /* 116 */
- {
- opindex arg;
- BGET_opindex(arg);
- PL_main_root = arg;
- break;
- }
- case INSN_CURPAD: /* 117 */
- {
- svindex arg;
- BGET_svindex(arg);
- BSET_curpad(PL_curpad, arg);
- break;
- }
- case INSN_PUSH_BEGIN: /* 118 */
- {
- svindex arg;
- BGET_svindex(arg);
- BSET_push_begin(PL_beginav, arg);
- break;
- }
- case INSN_PUSH_INIT: /* 119 */
- {
- svindex arg;
- BGET_svindex(arg);
- BSET_push_init(PL_initav, arg);
- break;
- }
- case INSN_PUSH_END: /* 120 */
- {
- svindex arg;
- BGET_svindex(arg);
- BSET_push_end(PL_endav, arg);
- break;
- }
- default:
- Perl_croak(aTHX_ "Illegal bytecode instruction %d\n", insn);
- /* NOTREACHED */
- }
- }
-}
diff --git a/contrib/perl5/ext/ByteLoader/byterun.h b/contrib/perl5/ext/ByteLoader/byterun.h
deleted file mode 100644
index f074f2d..0000000
--- a/contrib/perl5/ext/ByteLoader/byterun.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 1996-1999 Malcolm Beattie
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-/*
- * This file is autogenerated from bytecode.pl. Changes made here will be lost.
- */
-struct byteloader_fdata {
- SV *datasv;
- int next_out;
- int idx;
-};
-
-struct byteloader_state {
- struct byteloader_fdata *bs_fdata;
- SV *bs_sv;
- void **bs_obj_list;
- int bs_obj_list_fill;
- XPV bs_pv;
- int bs_iv_overflows;
-};
-
-int bl_getc(struct byteloader_fdata *);
-int bl_read(struct byteloader_fdata *, char *, size_t, size_t);
-extern void byterun(pTHXo_ struct byteloader_state *);
-
-enum {
- INSN_RET, /* 0 */
- INSN_LDSV, /* 1 */
- INSN_LDOP, /* 2 */
- INSN_STSV, /* 3 */
- INSN_STOP, /* 4 */
- INSN_STPV, /* 5 */
- INSN_LDSPECSV, /* 6 */
- INSN_NEWSV, /* 7 */
- INSN_NEWOP, /* 8 */
- INSN_NEWOPN, /* 9 */
- INSN_NOP, /* 10 */
- INSN_NEWPV, /* 11 */
- INSN_PV_CUR, /* 12 */
- INSN_PV_FREE, /* 13 */
- INSN_SV_UPGRADE, /* 14 */
- INSN_SV_REFCNT, /* 15 */
- INSN_SV_REFCNT_ADD, /* 16 */
- INSN_SV_FLAGS, /* 17 */
- INSN_XRV, /* 18 */
- INSN_XPV, /* 19 */
- INSN_XIV32, /* 20 */
- INSN_XIV64, /* 21 */
- INSN_XNV, /* 22 */
- INSN_XLV_TARGOFF, /* 23 */
- INSN_XLV_TARGLEN, /* 24 */
- INSN_XLV_TARG, /* 25 */
- INSN_XLV_TYPE, /* 26 */
- INSN_XBM_USEFUL, /* 27 */
- INSN_XBM_PREVIOUS, /* 28 */
- INSN_XBM_RARE, /* 29 */
- INSN_XFM_LINES, /* 30 */
- INSN_XIO_LINES, /* 31 */
- INSN_XIO_PAGE, /* 32 */
- INSN_XIO_PAGE_LEN, /* 33 */
- INSN_XIO_LINES_LEFT, /* 34 */
- INSN_COMMENT, /* 35 */
- INSN_XIO_TOP_NAME, /* 36 */
- INSN_XIO_TOP_GV, /* 37 */
- INSN_XIO_FMT_NAME, /* 38 */
- INSN_XIO_FMT_GV, /* 39 */
- INSN_XIO_BOTTOM_NAME, /* 40 */
- INSN_XIO_BOTTOM_GV, /* 41 */
- INSN_XIO_SUBPROCESS, /* 42 */
- INSN_XIO_TYPE, /* 43 */
- INSN_XIO_FLAGS, /* 44 */
- INSN_XCV_STASH, /* 45 */
- INSN_XCV_START, /* 46 */
- INSN_XCV_ROOT, /* 47 */
- INSN_XCV_GV, /* 48 */
- INSN_XCV_FILE, /* 49 */
- INSN_XCV_DEPTH, /* 50 */
- INSN_XCV_PADLIST, /* 51 */
- INSN_XCV_OUTSIDE, /* 52 */
- INSN_XCV_FLAGS, /* 53 */
- INSN_AV_EXTEND, /* 54 */
- INSN_AV_PUSH, /* 55 */
- INSN_XAV_FILL, /* 56 */
- INSN_XAV_MAX, /* 57 */
- INSN_XAV_FLAGS, /* 58 */
- INSN_XHV_RITER, /* 59 */
- INSN_XHV_NAME, /* 60 */
- INSN_HV_STORE, /* 61 */
- INSN_SV_MAGIC, /* 62 */
- INSN_MG_OBJ, /* 63 */
- INSN_MG_PRIVATE, /* 64 */
- INSN_MG_FLAGS, /* 65 */
- INSN_MG_PV, /* 66 */
- INSN_XMG_STASH, /* 67 */
- INSN_GV_FETCHPV, /* 68 */
- INSN_GV_STASHPV, /* 69 */
- INSN_GP_SV, /* 70 */
- INSN_GP_REFCNT, /* 71 */
- INSN_GP_REFCNT_ADD, /* 72 */
- INSN_GP_AV, /* 73 */
- INSN_GP_HV, /* 74 */
- INSN_GP_CV, /* 75 */
- INSN_GP_FILE, /* 76 */
- INSN_GP_IO, /* 77 */
- INSN_GP_FORM, /* 78 */
- INSN_GP_CVGEN, /* 79 */
- INSN_GP_LINE, /* 80 */
- INSN_GP_SHARE, /* 81 */
- INSN_XGV_FLAGS, /* 82 */
- INSN_OP_NEXT, /* 83 */
- INSN_OP_SIBLING, /* 84 */
- INSN_OP_PPADDR, /* 85 */
- INSN_OP_TARG, /* 86 */
- INSN_OP_TYPE, /* 87 */
- INSN_OP_SEQ, /* 88 */
- INSN_OP_FLAGS, /* 89 */
- INSN_OP_PRIVATE, /* 90 */
- INSN_OP_FIRST, /* 91 */
- INSN_OP_LAST, /* 92 */
- INSN_OP_OTHER, /* 93 */
- INSN_OP_PMREPLROOT, /* 94 */
- INSN_OP_PMREPLROOTGV, /* 95 */
- INSN_OP_PMREPLSTART, /* 96 */
- INSN_OP_PMNEXT, /* 97 */
- INSN_PREGCOMP, /* 98 */
- INSN_OP_PMFLAGS, /* 99 */
- INSN_OP_PMPERMFLAGS, /* 100 */
- INSN_OP_SV, /* 101 */
- INSN_OP_PADIX, /* 102 */
- INSN_OP_PV, /* 103 */
- INSN_OP_PV_TR, /* 104 */
- INSN_OP_REDOOP, /* 105 */
- INSN_OP_NEXTOP, /* 106 */
- INSN_OP_LASTOP, /* 107 */
- INSN_COP_LABEL, /* 108 */
- INSN_COP_STASHPV, /* 109 */
- INSN_COP_FILE, /* 110 */
- INSN_COP_SEQ, /* 111 */
- INSN_COP_ARYBASE, /* 112 */
- INSN_COP_LINE, /* 113 */
- INSN_COP_WARNINGS, /* 114 */
- INSN_MAIN_START, /* 115 */
- INSN_MAIN_ROOT, /* 116 */
- INSN_CURPAD, /* 117 */
- INSN_PUSH_BEGIN, /* 118 */
- INSN_PUSH_INIT, /* 119 */
- INSN_PUSH_END, /* 120 */
- MAX_INSN = 120
-};
-
-enum {
- OPt_OP, /* 0 */
- OPt_UNOP, /* 1 */
- OPt_BINOP, /* 2 */
- OPt_LOGOP, /* 3 */
- OPt_LISTOP, /* 4 */
- OPt_PMOP, /* 5 */
- OPt_SVOP, /* 6 */
- OPt_PADOP, /* 7 */
- OPt_PVOP, /* 8 */
- OPt_LOOP, /* 9 */
- OPt_COP /* 10 */
-};
-
diff --git a/contrib/perl5/ext/ByteLoader/hints/sunos.pl b/contrib/perl5/ext/ByteLoader/hints/sunos.pl
deleted file mode 100644
index 3faf498..0000000
--- a/contrib/perl5/ext/ByteLoader/hints/sunos.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-$self->{CCFLAGS} = $Config{ccflags} . ' -DNEED_FGETC_PROTOTYPE -DNEED_FREAD_PROTOTYPE';
-
diff --git a/contrib/perl5/ext/DB_File/Changes b/contrib/perl5/ext/DB_File/Changes
deleted file mode 100644
index eda270d..0000000
--- a/contrib/perl5/ext/DB_File/Changes
+++ /dev/null
@@ -1,336 +0,0 @@
-
-0.1
-
- First Release.
-
-0.2
-
- When DB_File is opening a database file it no longer terminates the
- process if dbopen returned an error. This allows file protection
- errors to be caught at run time. Thanks to Judith Grass
- <grass@cybercash.com> for spotting the bug.
-
-0.3
-
- Added prototype support for multiple btree compare callbacks.
-
-1.0
-
- DB_File has been in use for over a year. To reflect that, the
- version number has been incremented to 1.0.
-
- Added complete support for multiple concurrent callbacks.
-
- Using the push method on an empty list didn't work properly. This
- has been fixed.
-
-1.01
-
- Fixed a core dump problem with SunOS.
-
- The return value from TIEHASH wasn't set to NULL when dbopen
- returned an error.
-
-1.02
-
- Merged OS/2 specific code into DB_File.xs
-
- Removed some redundant code in DB_File.xs.
-
- Documentation update.
-
- Allow negative subscripts with RECNO interface.
-
- Changed the default flags from O_RDWR to O_CREAT|O_RDWR.
-
- The example code which showed how to lock a database needed a call
- to sync added. Without it the resultant database file was empty.
-
- Added get_dup method.
-
-1.03
-
- Documentation update.
-
- DB_File now imports the constants (O_RDWR, O_CREAT etc.) from Fcntl
- automatically.
-
- The standard hash function exists is now supported.
-
- Modified the behavior of get_dup. When it returns an associative
- array, the value is the count of the number of matching BTREE
- values.
-
-1.04
-
- Minor documentation changes.
-
- Fixed a bug in hash_cb. Patches supplied by Dave Hammen,
- <hammen@gothamcity.jsc.nasa.govt>.
-
- Fixed a bug with the constructors for DB_File::HASHINFO,
- DB_File::BTREEINFO and DB_File::RECNOINFO. Also tidied up the
- constructors to make them -w clean.
-
- Reworked part of the test harness to be more locale friendly.
-
-1.05
-
- Made all scripts in the documentation strict and -w clean.
-
- Added logic to DB_File.xs to allow the module to be built after
- Perl is installed.
-
-1.06
-
- Minor namespace cleanup: Localized PrintBtree.
-
-1.07
-
- Fixed bug with RECNO, where bval wasn't defaulting to "\n".
-
-1.08
-
- Documented operation of bval.
-
-1.09
-
- Minor bug fix in DB_File::HASHINFO, DB_File::RECNOINFO and
- DB_File::BTREEINFO.
-
- Changed default mode to 0666.
-
-1.10
-
- Fixed fd method so that it still returns -1 for in-memory files
- when db 1.86 is used.
-
-1.11
-
- Documented the untie gotcha.
-
-1.12
-
- Documented the incompatibility with version 2 of Berkeley DB.
-
-1.13
-
- Minor changes to DB_FIle.xs and DB_File.pm
-
-1.14
-
- Made it illegal to tie an associative array to a RECNO database and
- an ordinary array to a HASH or BTREE database.
-
-1.15
-
- Patch from Gisle Aas <gisle@aas.no> to suppress "use of undefined
- value" warning with db_get and db_seq.
-
- Patch from Gisle Aas <gisle@aas.no> to make DB_File export only the
- O_* constants from Fcntl.
-
- Removed the DESTROY method from the DB_File::HASHINFO module.
-
- Previously DB_File hard-wired the class name of any object that it
- created to "DB_File". This makes sub-classing difficult. Now
- DB_File creats objects in the namespace of the package it has been
- inherited into.
-
-
-1.16
-
- A harmless looking tab was causing Makefile.PL to fail on AIX 3.2.5
-
- Small fix for the AIX strict C compiler XLC which doesn't like
- __attribute__ being defined via proto.h and redefined via db.h. Fix
- courtesy of Jarkko Hietaniemi.
-
-1.50
-
- DB_File can now build with either DB 1.x or 2.x, but not both at
- the same time.
-
-1.51
-
- Fixed the test harness so that it doesn't expect DB_File to have
- been installed by the main Perl build.
-
-
- Fixed a bug in mapping 1.x O_RDONLY flag to 2.x DB_RDONLY equivalent
-
-1.52
-
- Patch from Nick Ing-Simmons now allows DB_File to build on NT.
- Merged 1.15 patch.
-
-1.53
-
- Added DB_RENUMBER to flags for recno.
-
-1.54
-
- Fixed a small bug in the test harness when run under win32
- The emulation of fd when useing DB 2.x was busted.
-
-1.55
- Merged 1.16 changes.
-
-1.56
- Documented the Solaris 2.5 mutex bug
-
-1.57
- If Perl has been compiled with Threads support,the symbol op will be
- defined. This clashes with a field name in db.h, so it needs to be
- #undef'ed before db.h is included.
-
-1.58
- Tied Array support was enhanced in Perl 5.004_57. DB_File now
- supports PUSH,POP,SHIFT,UNSHIFT & STORESIZE.
-
- Fixed a problem with the use of sv_setpvn. When the size is
- specified as 0, it does a strlen on the data. This was ok for DB
- 1.x, but isn't for DB 2.x.
-
-1.59
- Updated the license section.
-
- Berkeley DB 2.4.10 disallows zero length keys. Tests 32 & 42 in
- db-btree.t and test 27 in db-hash.t failed because of this change.
- Those tests have been zapped.
-
- Added dbinfo to the distribution.
-
-1.60
- Changed the test to check for full tied array support
-
-1.61 19th November 1998
-
- Added a note to README about how to build Berkeley DB 2.x when
- using HP-UX.
- Minor modifications to get the module to build with DB 2.5.x
- Fixed a typo in the definition of O_RDONLY, courtesy of Mark Kettenis.
-
-1.62 30th November 1998
-
- Added hints/dynixptx.pl.
- Fixed typemap -- 1.61 used PL_na instead of na
-
-1.63 19th December 1998
-
- * Fix to allow DB 2.6.x to build with DB_File
- * Documentation updated to use push,pop etc in the RECNO example &
- to include the find_dup & del_dup methods.
-
-1.64 21st February 1999
-
- * Tidied the 1.x to 2.x flag mapping code.
- * Added a patch from Mark Kettenis <kettenis@wins.uva.nl> to fix a flag
- mapping problem with O_RDONLY on the Hurd
- * Updated the message that db-recno.t prints when tests 51, 53 or 55 fail.
-
-1.65 6th March 1999
-
- * Fixed a bug in the recno PUSH logic.
- * The BOOT version check now needs 2.3.4 when using Berkeley DB version 2
-
-1.66 15th March 1999
-
- * Added DBM Filter code
-
-1.67 6th June 1999
-
- * Added DBM Filter documentation to DB_File.pm
-
- * Fixed DBM Filter code to work with 5.004
-
- * A few instances of newSVpvn were used in 1.66. This isn't available in
- Perl 5.004_04 or earlier. Replaced with newSVpv.
-
-1.68 22nd July 1999
-
- * Merged changes from 5.005_58
-
- * Fixed a bug in R_IBEFORE & R_IAFTER procesing in Berkeley DB
- 2 databases.
-
- * Added some of the examples in the POD into the test harness.
-
-1.69 3rd August 1999
-
- * fixed a bug in push -- DB_APPEND wasn't working properly.
-
- * Fixed the R_SETCURSOR bug introduced in 1.68
-
- * Added a new Perl variable $DB_File::db_ver
-
-1.70 4th August 1999
-
- * Initialise $DB_File::db_ver and $DB_File::db_version with
- GV_ADD|GV_ADDMULT -- bug spotted by Nick Ing-Simmons.
-
- * Added a BOOT check to test for equivalent versions of db.h &
- libdb.a/so.
-
-1.71 7th September 1999
-
- * Fixed a bug that prevented 1.70 from compiling under win32
-
- * Updated to support Berkeley DB 3.x
-
- * Updated dbinfo for Berkeley DB 3.x file formats.
-
-1.72 16th January 2000
-
- * Added hints/sco.pl
-
- * The module will now use XSLoader when it is available. When it
- isn't it will use DynaLoader.
-
- * The locking section in DB_File.pm has been discredited. Many thanks
- to David Harris for spotting the underlying problem, contributing
- the updates to the documentation and writing DB_File::Lock (available
- on CPAN).
-
-1.73 31st May 2000
-
- * Added support in version.c for building with threaded Perl.
-
- * Berkeley DB 3.1 has reenabled support for null keys. The test
- harness has been updated to reflect this.
-
-1.74 10th December 2000
-
- * A "close" call in DB_File.xs needed parenthesised to stop win32 from
- thinking it was one of its macros.
-
- * Updated dbinfo to support Berkeley DB 3.1 file format changes.
-
- * DB_File.pm & the test hasness now use the warnings pragma (when
- available).
-
- * Included Perl core patch 7703 -- size argument for hash_cb is different
- for Berkeley DB 3.x
-
- * Included Perl core patch 7801 -- Give __getBerkeleyDBInfo the ANSI C
- treatment.
-
- * @a = () produced the warning 'Argument "" isn't numeric in entersub'
- This has been fixed. Thanks to Edward Avis for spotting this bug.
-
- * Added note about building under Linux. Included patches.
-
- * Included Perl core patch 8068 -- fix for bug 20001013.009
- When run with warnings enabled "$hash{XX} = undef " produced an
- "Uninitialized value" warning. This has been fixed.
-
-1.75 17th December 2000
-
- * Fixed perl core patch 7703
-
- * Added suppport to allow DB_File to be built with Berkeley DB 3.2 --
- btree_compare, btree_prefix and hash_cb needed to be changed.
-
- * Updated dbinfo to support Berkeley DB 3.2 file format changes.
-
-
diff --git a/contrib/perl5/ext/DB_File/DB_File.pm b/contrib/perl5/ext/DB_File/DB_File.pm
deleted file mode 100644
index c830216..0000000
--- a/contrib/perl5/ext/DB_File/DB_File.pm
+++ /dev/null
@@ -1,2072 +0,0 @@
-# DB_File.pm -- Perl 5 interface to Berkeley DB
-#
-# written by Paul Marquess (Paul.Marquess@btinternet.com)
-# last modified 17th December 2000
-# version 1.75
-#
-# Copyright (c) 1995-2000 Paul Marquess. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-
-package DB_File::HASHINFO ;
-
-require 5.003 ;
-
-use warnings;
-use strict;
-use Carp;
-require Tie::Hash;
-@DB_File::HASHINFO::ISA = qw(Tie::Hash);
-
-sub new
-{
- my $pkg = shift ;
- my %x ;
- tie %x, $pkg ;
- bless \%x, $pkg ;
-}
-
-
-sub TIEHASH
-{
- my $pkg = shift ;
-
- bless { VALID => { map {$_, 1}
- qw( bsize ffactor nelem cachesize hash lorder)
- },
- GOT => {}
- }, $pkg ;
-}
-
-
-sub FETCH
-{
- my $self = shift ;
- my $key = shift ;
-
- return $self->{GOT}{$key} if exists $self->{VALID}{$key} ;
-
- my $pkg = ref $self ;
- croak "${pkg}::FETCH - Unknown element '$key'" ;
-}
-
-
-sub STORE
-{
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
-
- if ( exists $self->{VALID}{$key} )
- {
- $self->{GOT}{$key} = $value ;
- return ;
- }
-
- my $pkg = ref $self ;
- croak "${pkg}::STORE - Unknown element '$key'" ;
-}
-
-sub DELETE
-{
- my $self = shift ;
- my $key = shift ;
-
- if ( exists $self->{VALID}{$key} )
- {
- delete $self->{GOT}{$key} ;
- return ;
- }
-
- my $pkg = ref $self ;
- croak "DB_File::HASHINFO::DELETE - Unknown element '$key'" ;
-}
-
-sub EXISTS
-{
- my $self = shift ;
- my $key = shift ;
-
- exists $self->{VALID}{$key} ;
-}
-
-sub NotHere
-{
- my $self = shift ;
- my $method = shift ;
-
- croak ref($self) . " does not define the method ${method}" ;
-}
-
-sub FIRSTKEY { my $self = shift ; $self->NotHere("FIRSTKEY") }
-sub NEXTKEY { my $self = shift ; $self->NotHere("NEXTKEY") }
-sub CLEAR { my $self = shift ; $self->NotHere("CLEAR") }
-
-package DB_File::RECNOINFO ;
-
-use warnings;
-use strict ;
-
-@DB_File::RECNOINFO::ISA = qw(DB_File::HASHINFO) ;
-
-sub TIEHASH
-{
- my $pkg = shift ;
-
- bless { VALID => { map {$_, 1}
- qw( bval cachesize psize flags lorder reclen bfname )
- },
- GOT => {},
- }, $pkg ;
-}
-
-package DB_File::BTREEINFO ;
-
-use warnings;
-use strict ;
-
-@DB_File::BTREEINFO::ISA = qw(DB_File::HASHINFO) ;
-
-sub TIEHASH
-{
- my $pkg = shift ;
-
- bless { VALID => { map {$_, 1}
- qw( flags cachesize maxkeypage minkeypage psize
- compare prefix lorder )
- },
- GOT => {},
- }, $pkg ;
-}
-
-
-package DB_File ;
-
-use warnings;
-use strict;
-use vars qw($VERSION @ISA @EXPORT $AUTOLOAD $DB_BTREE $DB_HASH $DB_RECNO
- $db_version $use_XSLoader
- ) ;
-use Carp;
-
-
-$VERSION = "1.75" ;
-
-#typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
-$DB_BTREE = new DB_File::BTREEINFO ;
-$DB_HASH = new DB_File::HASHINFO ;
-$DB_RECNO = new DB_File::RECNOINFO ;
-
-require Tie::Hash;
-require Exporter;
-use AutoLoader;
-BEGIN {
- $use_XSLoader = 1 ;
- eval { require XSLoader } ;
-
- if ($@) {
- $use_XSLoader = 0 ;
- require DynaLoader;
- @ISA = qw(DynaLoader);
- }
-}
-
-push @ISA, qw(Tie::Hash Exporter);
-@EXPORT = qw(
- $DB_BTREE $DB_HASH $DB_RECNO
-
- BTREEMAGIC
- BTREEVERSION
- DB_LOCK
- DB_SHMEM
- DB_TXN
- HASHMAGIC
- HASHVERSION
- MAX_PAGE_NUMBER
- MAX_PAGE_OFFSET
- MAX_REC_NUMBER
- RET_ERROR
- RET_SPECIAL
- RET_SUCCESS
- R_CURSOR
- R_DUP
- R_FIRST
- R_FIXEDLEN
- R_IAFTER
- R_IBEFORE
- R_LAST
- R_NEXT
- R_NOKEY
- R_NOOVERWRITE
- R_PREV
- R_RECNOSYNC
- R_SETCURSOR
- R_SNAPSHOT
- __R_UNUSED
-
-);
-
-sub AUTOLOAD {
- my($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my $val = constant($constname, @_ ? $_[0] : 0);
- if ($! != 0) {
- if ($! =~ /Invalid/ || $!{EINVAL}) {
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- my($pack,$file,$line) = caller;
- croak "Your vendor has not defined DB macro $constname, used at $file line $line.
-";
- }
- }
- eval "sub $AUTOLOAD { $val }";
- goto &$AUTOLOAD;
-}
-
-
-eval {
- # Make all Fcntl O_XXX constants available for importing
- require Fcntl;
- my @O = grep /^O_/, @Fcntl::EXPORT;
- Fcntl->import(@O); # first we import what we want to export
- push(@EXPORT, @O);
-};
-
-if ($use_XSLoader)
- { XSLoader::load("DB_File", $VERSION)}
-else
- { bootstrap DB_File $VERSION }
-
-# Preloaded methods go here. Autoload methods go after __END__, and are
-# processed by the autosplit program.
-
-sub tie_hash_or_array
-{
- my (@arg) = @_ ;
- my $tieHASH = ( (caller(1))[3] =~ /TIEHASH/ ) ;
-
- $arg[4] = tied %{ $arg[4] }
- if @arg >= 5 && ref $arg[4] && $arg[4] =~ /=HASH/ && tied %{ $arg[4] } ;
-
- # make recno in Berkeley DB version 2 work like recno in version 1.
- if ($db_version > 1 and defined $arg[4] and $arg[4] =~ /RECNO/ and
- $arg[1] and ! -e $arg[1]) {
- open(FH, ">$arg[1]") or return undef ;
- close FH ;
- chmod $arg[3] ? $arg[3] : 0666 , $arg[1] ;
- }
-
- DoTie_($tieHASH, @arg) ;
-}
-
-sub TIEHASH
-{
- tie_hash_or_array(@_) ;
-}
-
-sub TIEARRAY
-{
- tie_hash_or_array(@_) ;
-}
-
-sub CLEAR
-{
- my $self = shift;
- my $key = 0 ;
- my $value = "" ;
- my $status = $self->seq($key, $value, R_FIRST());
- my @keys;
-
- while ($status == 0) {
- push @keys, $key;
- $status = $self->seq($key, $value, R_NEXT());
- }
- foreach $key (reverse @keys) {
- my $s = $self->del($key);
- }
-}
-
-sub EXTEND { }
-
-sub STORESIZE
-{
- my $self = shift;
- my $length = shift ;
- my $current_length = $self->length() ;
-
- if ($length < $current_length) {
- my $key ;
- for ($key = $current_length - 1 ; $key >= $length ; -- $key)
- { $self->del($key) }
- }
- elsif ($length > $current_length) {
- $self->put($length-1, "") ;
- }
-}
-
-sub find_dup
-{
- croak "Usage: \$db->find_dup(key,value)\n"
- unless @_ == 3 ;
-
- my $db = shift ;
- my ($origkey, $value_wanted) = @_ ;
- my ($key, $value) = ($origkey, 0);
- my ($status) = 0 ;
-
- for ($status = $db->seq($key, $value, R_CURSOR() ) ;
- $status == 0 ;
- $status = $db->seq($key, $value, R_NEXT() ) ) {
-
- return 0 if $key eq $origkey and $value eq $value_wanted ;
- }
-
- return $status ;
-}
-
-sub del_dup
-{
- croak "Usage: \$db->del_dup(key,value)\n"
- unless @_ == 3 ;
-
- my $db = shift ;
- my ($key, $value) = @_ ;
- my ($status) = $db->find_dup($key, $value) ;
- return $status if $status != 0 ;
-
- $status = $db->del($key, R_CURSOR() ) ;
- return $status ;
-}
-
-sub get_dup
-{
- croak "Usage: \$db->get_dup(key [,flag])\n"
- unless @_ == 2 or @_ == 3 ;
-
- my $db = shift ;
- my $key = shift ;
- my $flag = shift ;
- my $value = 0 ;
- my $origkey = $key ;
- my $wantarray = wantarray ;
- my %values = () ;
- my @values = () ;
- my $counter = 0 ;
- my $status = 0 ;
-
- # iterate through the database until either EOF ($status == 0)
- # or a different key is encountered ($key ne $origkey).
- for ($status = $db->seq($key, $value, R_CURSOR()) ;
- $status == 0 and $key eq $origkey ;
- $status = $db->seq($key, $value, R_NEXT()) ) {
-
- # save the value or count number of matches
- if ($wantarray) {
- if ($flag)
- { ++ $values{$value} }
- else
- { push (@values, $value) }
- }
- else
- { ++ $counter }
-
- }
-
- return ($wantarray ? ($flag ? %values : @values) : $counter) ;
-}
-
-
-1;
-__END__
-
-=head1 NAME
-
-DB_File - Perl5 access to Berkeley DB version 1.x
-
-=head1 SYNOPSIS
-
- use DB_File ;
-
- [$X =] tie %hash, 'DB_File', [$filename, $flags, $mode, $DB_HASH] ;
- [$X =] tie %hash, 'DB_File', $filename, $flags, $mode, $DB_BTREE ;
- [$X =] tie @array, 'DB_File', $filename, $flags, $mode, $DB_RECNO ;
-
- $status = $X->del($key [, $flags]) ;
- $status = $X->put($key, $value [, $flags]) ;
- $status = $X->get($key, $value [, $flags]) ;
- $status = $X->seq($key, $value, $flags) ;
- $status = $X->sync([$flags]) ;
- $status = $X->fd ;
-
- # BTREE only
- $count = $X->get_dup($key) ;
- @list = $X->get_dup($key) ;
- %list = $X->get_dup($key, 1) ;
- $status = $X->find_dup($key, $value) ;
- $status = $X->del_dup($key, $value) ;
-
- # RECNO only
- $a = $X->length;
- $a = $X->pop ;
- $X->push(list);
- $a = $X->shift;
- $X->unshift(list);
-
- # DBM Filters
- $old_filter = $db->filter_store_key ( sub { ... } ) ;
- $old_filter = $db->filter_store_value( sub { ... } ) ;
- $old_filter = $db->filter_fetch_key ( sub { ... } ) ;
- $old_filter = $db->filter_fetch_value( sub { ... } ) ;
-
- untie %hash ;
- untie @array ;
-
-=head1 DESCRIPTION
-
-B<DB_File> is a module which allows Perl programs to make use of the
-facilities provided by Berkeley DB version 1.x (if you have a newer
-version of DB, see L<Using DB_File with Berkeley DB version 2 or 3>).
-It is assumed that you have a copy of the Berkeley DB manual pages at
-hand when reading this documentation. The interface defined here
-mirrors the Berkeley DB interface closely.
-
-Berkeley DB is a C library which provides a consistent interface to a
-number of database formats. B<DB_File> provides an interface to all
-three of the database types currently supported by Berkeley DB.
-
-The file types are:
-
-=over 5
-
-=item B<DB_HASH>
-
-This database type allows arbitrary key/value pairs to be stored in data
-files. This is equivalent to the functionality provided by other
-hashing packages like DBM, NDBM, ODBM, GDBM, and SDBM. Remember though,
-the files created using DB_HASH are not compatible with any of the
-other packages mentioned.
-
-A default hashing algorithm, which will be adequate for most
-applications, is built into Berkeley DB. If you do need to use your own
-hashing algorithm it is possible to write your own in Perl and have
-B<DB_File> use it instead.
-
-=item B<DB_BTREE>
-
-The btree format allows arbitrary key/value pairs to be stored in a
-sorted, balanced binary tree.
-
-As with the DB_HASH format, it is possible to provide a user defined
-Perl routine to perform the comparison of keys. By default, though, the
-keys are stored in lexical order.
-
-=item B<DB_RECNO>
-
-DB_RECNO allows both fixed-length and variable-length flat text files
-to be manipulated using the same key/value pair interface as in DB_HASH
-and DB_BTREE. In this case the key will consist of a record (line)
-number.
-
-=back
-
-=head2 Using DB_File with Berkeley DB version 2 or 3
-
-Although B<DB_File> is intended to be used with Berkeley DB version 1,
-it can also be used with version 2.or 3 In this case the interface is
-limited to the functionality provided by Berkeley DB 1.x. Anywhere the
-version 2 or 3 interface differs, B<DB_File> arranges for it to work
-like version 1. This feature allows B<DB_File> scripts that were built
-with version 1 to be migrated to version 2 or 3 without any changes.
-
-If you want to make use of the new features available in Berkeley DB
-2.x or greater, use the Perl module B<BerkeleyDB> instead.
-
-B<Note:> The database file format has changed in both Berkeley DB
-version 2 and 3. If you cannot recreate your databases, you must dump
-any existing databases with the C<db_dump185> utility that comes with
-Berkeley DB.
-Once you have rebuilt DB_File to use Berkeley DB version 2 or 3, your
-databases can be recreated using C<db_load>. Refer to the Berkeley DB
-documentation for further details.
-
-Please read L<"COPYRIGHT"> before using version 2.x or 3.x of Berkeley
-DB with DB_File.
-
-=head2 Interface to Berkeley DB
-
-B<DB_File> allows access to Berkeley DB files using the tie() mechanism
-in Perl 5 (for full details, see L<perlfunc/tie()>). This facility
-allows B<DB_File> to access Berkeley DB files using either an
-associative array (for DB_HASH & DB_BTREE file types) or an ordinary
-array (for the DB_RECNO file type).
-
-In addition to the tie() interface, it is also possible to access most
-of the functions provided in the Berkeley DB API directly.
-See L<THE API INTERFACE>.
-
-=head2 Opening a Berkeley DB Database File
-
-Berkeley DB uses the function dbopen() to open or create a database.
-Here is the C prototype for dbopen():
-
- DB*
- dbopen (const char * file, int flags, int mode,
- DBTYPE type, const void * openinfo)
-
-The parameter C<type> is an enumeration which specifies which of the 3
-interface methods (DB_HASH, DB_BTREE or DB_RECNO) is to be used.
-Depending on which of these is actually chosen, the final parameter,
-I<openinfo> points to a data structure which allows tailoring of the
-specific interface method.
-
-This interface is handled slightly differently in B<DB_File>. Here is
-an equivalent call using B<DB_File>:
-
- tie %array, 'DB_File', $filename, $flags, $mode, $DB_HASH ;
-
-The C<filename>, C<flags> and C<mode> parameters are the direct
-equivalent of their dbopen() counterparts. The final parameter $DB_HASH
-performs the function of both the C<type> and C<openinfo> parameters in
-dbopen().
-
-In the example above $DB_HASH is actually a pre-defined reference to a
-hash object. B<DB_File> has three of these pre-defined references.
-Apart from $DB_HASH, there is also $DB_BTREE and $DB_RECNO.
-
-The keys allowed in each of these pre-defined references is limited to
-the names used in the equivalent C structure. So, for example, the
-$DB_HASH reference will only allow keys called C<bsize>, C<cachesize>,
-C<ffactor>, C<hash>, C<lorder> and C<nelem>.
-
-To change one of these elements, just assign to it like this:
-
- $DB_HASH->{'cachesize'} = 10000 ;
-
-The three predefined variables $DB_HASH, $DB_BTREE and $DB_RECNO are
-usually adequate for most applications. If you do need to create extra
-instances of these objects, constructors are available for each file
-type.
-
-Here are examples of the constructors and the valid options available
-for DB_HASH, DB_BTREE and DB_RECNO respectively.
-
- $a = new DB_File::HASHINFO ;
- $a->{'bsize'} ;
- $a->{'cachesize'} ;
- $a->{'ffactor'};
- $a->{'hash'} ;
- $a->{'lorder'} ;
- $a->{'nelem'} ;
-
- $b = new DB_File::BTREEINFO ;
- $b->{'flags'} ;
- $b->{'cachesize'} ;
- $b->{'maxkeypage'} ;
- $b->{'minkeypage'} ;
- $b->{'psize'} ;
- $b->{'compare'} ;
- $b->{'prefix'} ;
- $b->{'lorder'} ;
-
- $c = new DB_File::RECNOINFO ;
- $c->{'bval'} ;
- $c->{'cachesize'} ;
- $c->{'psize'} ;
- $c->{'flags'} ;
- $c->{'lorder'} ;
- $c->{'reclen'} ;
- $c->{'bfname'} ;
-
-The values stored in the hashes above are mostly the direct equivalent
-of their C counterpart. Like their C counterparts, all are set to a
-default values - that means you don't have to set I<all> of the
-values when you only want to change one. Here is an example:
-
- $a = new DB_File::HASHINFO ;
- $a->{'cachesize'} = 12345 ;
- tie %y, 'DB_File', "filename", $flags, 0777, $a ;
-
-A few of the options need extra discussion here. When used, the C
-equivalent of the keys C<hash>, C<compare> and C<prefix> store pointers
-to C functions. In B<DB_File> these keys are used to store references
-to Perl subs. Below are templates for each of the subs:
-
- sub hash
- {
- my ($data) = @_ ;
- ...
- # return the hash value for $data
- return $hash ;
- }
-
- sub compare
- {
- my ($key, $key2) = @_ ;
- ...
- # return 0 if $key1 eq $key2
- # -1 if $key1 lt $key2
- # 1 if $key1 gt $key2
- return (-1 , 0 or 1) ;
- }
-
- sub prefix
- {
- my ($key, $key2) = @_ ;
- ...
- # return number of bytes of $key2 which are
- # necessary to determine that it is greater than $key1
- return $bytes ;
- }
-
-See L<Changing the BTREE sort order> for an example of using the
-C<compare> template.
-
-If you are using the DB_RECNO interface and you intend making use of
-C<bval>, you should check out L<The 'bval' Option>.
-
-=head2 Default Parameters
-
-It is possible to omit some or all of the final 4 parameters in the
-call to C<tie> and let them take default values. As DB_HASH is the most
-common file format used, the call:
-
- tie %A, "DB_File", "filename" ;
-
-is equivalent to:
-
- tie %A, "DB_File", "filename", O_CREAT|O_RDWR, 0666, $DB_HASH ;
-
-It is also possible to omit the filename parameter as well, so the
-call:
-
- tie %A, "DB_File" ;
-
-is equivalent to:
-
- tie %A, "DB_File", undef, O_CREAT|O_RDWR, 0666, $DB_HASH ;
-
-See L<In Memory Databases> for a discussion on the use of C<undef>
-in place of a filename.
-
-=head2 In Memory Databases
-
-Berkeley DB allows the creation of in-memory databases by using NULL
-(that is, a C<(char *)0> in C) in place of the filename. B<DB_File>
-uses C<undef> instead of NULL to provide this functionality.
-
-=head1 DB_HASH
-
-The DB_HASH file format is probably the most commonly used of the three
-file formats that B<DB_File> supports. It is also very straightforward
-to use.
-
-=head2 A Simple Example
-
-This example shows how to create a database, add key/value pairs to the
-database, delete keys/value pairs and finally how to enumerate the
-contents of the database.
-
- use warnings ;
- use strict ;
- use DB_File ;
- use vars qw( %h $k $v ) ;
-
- unlink "fruit" ;
- tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0640, $DB_HASH
- or die "Cannot open file 'fruit': $!\n";
-
- # Add a few key/value pairs to the file
- $h{"apple"} = "red" ;
- $h{"orange"} = "orange" ;
- $h{"banana"} = "yellow" ;
- $h{"tomato"} = "red" ;
-
- # Check for existence of a key
- print "Banana Exists\n\n" if $h{"banana"} ;
-
- # Delete a key/value pair.
- delete $h{"apple"} ;
-
- # print the contents of the file
- while (($k, $v) = each %h)
- { print "$k -> $v\n" }
-
- untie %h ;
-
-here is the output:
-
- Banana Exists
-
- orange -> orange
- tomato -> red
- banana -> yellow
-
-Note that the like ordinary associative arrays, the order of the keys
-retrieved is in an apparently random order.
-
-=head1 DB_BTREE
-
-The DB_BTREE format is useful when you want to store data in a given
-order. By default the keys will be stored in lexical order, but as you
-will see from the example shown in the next section, it is very easy to
-define your own sorting function.
-
-=head2 Changing the BTREE sort order
-
-This script shows how to override the default sorting algorithm that
-BTREE uses. Instead of using the normal lexical ordering, a case
-insensitive compare function will be used.
-
- use warnings ;
- use strict ;
- use DB_File ;
-
- my %h ;
-
- sub Compare
- {
- my ($key1, $key2) = @_ ;
- "\L$key1" cmp "\L$key2" ;
- }
-
- # specify the Perl sub that will do the comparison
- $DB_BTREE->{'compare'} = \&Compare ;
-
- unlink "tree" ;
- tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open file 'tree': $!\n" ;
-
- # Add a key/value pair to the file
- $h{'Wall'} = 'Larry' ;
- $h{'Smith'} = 'John' ;
- $h{'mouse'} = 'mickey' ;
- $h{'duck'} = 'donald' ;
-
- # Delete
- delete $h{"duck"} ;
-
- # Cycle through the keys printing them in order.
- # Note it is not necessary to sort the keys as
- # the btree will have kept them in order automatically.
- foreach (keys %h)
- { print "$_\n" }
-
- untie %h ;
-
-Here is the output from the code above.
-
- mouse
- Smith
- Wall
-
-There are a few point to bear in mind if you want to change the
-ordering in a BTREE database:
-
-=over 5
-
-=item 1.
-
-The new compare function must be specified when you create the database.
-
-=item 2.
-
-You cannot change the ordering once the database has been created. Thus
-you must use the same compare function every time you access the
-database.
-
-=back
-
-=head2 Handling Duplicate Keys
-
-The BTREE file type optionally allows a single key to be associated
-with an arbitrary number of values. This option is enabled by setting
-the flags element of C<$DB_BTREE> to R_DUP when creating the database.
-
-There are some difficulties in using the tied hash interface if you
-want to manipulate a BTREE database with duplicate keys. Consider this
-code:
-
- use warnings ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename %h ) ;
-
- $filename = "tree" ;
- unlink $filename ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- # Add some key/value pairs to the file
- $h{'Wall'} = 'Larry' ;
- $h{'Wall'} = 'Brick' ; # Note the duplicate key
- $h{'Wall'} = 'Brick' ; # Note the duplicate key and value
- $h{'Smith'} = 'John' ;
- $h{'mouse'} = 'mickey' ;
-
- # iterate through the associative array
- # and print each key/value pair.
- foreach (sort keys %h)
- { print "$_ -> $h{$_}\n" }
-
- untie %h ;
-
-Here is the output:
-
- Smith -> John
- Wall -> Larry
- Wall -> Larry
- Wall -> Larry
- mouse -> mickey
-
-As you can see 3 records have been successfully created with key C<Wall>
-- the only thing is, when they are retrieved from the database they
-I<seem> to have the same value, namely C<Larry>. The problem is caused
-by the way that the associative array interface works. Basically, when
-the associative array interface is used to fetch the value associated
-with a given key, it will only ever retrieve the first value.
-
-Although it may not be immediately obvious from the code above, the
-associative array interface can be used to write values with duplicate
-keys, but it cannot be used to read them back from the database.
-
-The way to get around this problem is to use the Berkeley DB API method
-called C<seq>. This method allows sequential access to key/value
-pairs. See L<THE API INTERFACE> for details of both the C<seq> method
-and the API in general.
-
-Here is the script above rewritten using the C<seq> API method.
-
- use warnings ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename $x %h $status $key $value) ;
-
- $filename = "tree" ;
- unlink $filename ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- # Add some key/value pairs to the file
- $h{'Wall'} = 'Larry' ;
- $h{'Wall'} = 'Brick' ; # Note the duplicate key
- $h{'Wall'} = 'Brick' ; # Note the duplicate key and value
- $h{'Smith'} = 'John' ;
- $h{'mouse'} = 'mickey' ;
-
- # iterate through the btree using seq
- # and print each key/value pair.
- $key = $value = 0 ;
- for ($status = $x->seq($key, $value, R_FIRST) ;
- $status == 0 ;
- $status = $x->seq($key, $value, R_NEXT) )
- { print "$key -> $value\n" }
-
- undef $x ;
- untie %h ;
-
-that prints:
-
- Smith -> John
- Wall -> Brick
- Wall -> Brick
- Wall -> Larry
- mouse -> mickey
-
-This time we have got all the key/value pairs, including the multiple
-values associated with the key C<Wall>.
-
-To make life easier when dealing with duplicate keys, B<DB_File> comes with
-a few utility methods.
-
-=head2 The get_dup() Method
-
-The C<get_dup> method assists in
-reading duplicate values from BTREE databases. The method can take the
-following forms:
-
- $count = $x->get_dup($key) ;
- @list = $x->get_dup($key) ;
- %list = $x->get_dup($key, 1) ;
-
-In a scalar context the method returns the number of values associated
-with the key, C<$key>.
-
-In list context, it returns all the values which match C<$key>. Note
-that the values will be returned in an apparently random order.
-
-In list context, if the second parameter is present and evaluates
-TRUE, the method returns an associative array. The keys of the
-associative array correspond to the values that matched in the BTREE
-and the values of the array are a count of the number of times that
-particular value occurred in the BTREE.
-
-So assuming the database created above, we can use C<get_dup> like
-this:
-
- use warnings ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename $x %h ) ;
-
- $filename = "tree" ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- my $cnt = $x->get_dup("Wall") ;
- print "Wall occurred $cnt times\n" ;
-
- my %hash = $x->get_dup("Wall", 1) ;
- print "Larry is there\n" if $hash{'Larry'} ;
- print "There are $hash{'Brick'} Brick Walls\n" ;
-
- my @list = sort $x->get_dup("Wall") ;
- print "Wall => [@list]\n" ;
-
- @list = $x->get_dup("Smith") ;
- print "Smith => [@list]\n" ;
-
- @list = $x->get_dup("Dog") ;
- print "Dog => [@list]\n" ;
-
-
-and it will print:
-
- Wall occurred 3 times
- Larry is there
- There are 2 Brick Walls
- Wall => [Brick Brick Larry]
- Smith => [John]
- Dog => []
-
-=head2 The find_dup() Method
-
- $status = $X->find_dup($key, $value) ;
-
-This method checks for the existence of a specific key/value pair. If the
-pair exists, the cursor is left pointing to the pair and the method
-returns 0. Otherwise the method returns a non-zero value.
-
-Assuming the database from the previous example:
-
- use warnings ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename $x %h $found) ;
-
- my $filename = "tree" ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ;
- print "Larry Wall is $found there\n" ;
-
- $found = ( $x->find_dup("Wall", "Harry") == 0 ? "" : "not") ;
- print "Harry Wall is $found there\n" ;
-
- undef $x ;
- untie %h ;
-
-prints this
-
- Larry Wall is there
- Harry Wall is not there
-
-
-=head2 The del_dup() Method
-
- $status = $X->del_dup($key, $value) ;
-
-This method deletes a specific key/value pair. It returns
-0 if they exist and have been deleted successfully.
-Otherwise the method returns a non-zero value.
-
-Again assuming the existence of the C<tree> database
-
- use warnings ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename $x %h $found) ;
-
- my $filename = "tree" ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- $x->del_dup("Wall", "Larry") ;
-
- $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ;
- print "Larry Wall is $found there\n" ;
-
- undef $x ;
- untie %h ;
-
-prints this
-
- Larry Wall is not there
-
-=head2 Matching Partial Keys
-
-The BTREE interface has a feature which allows partial keys to be
-matched. This functionality is I<only> available when the C<seq> method
-is used along with the R_CURSOR flag.
-
- $x->seq($key, $value, R_CURSOR) ;
-
-Here is the relevant quote from the dbopen man page where it defines
-the use of the R_CURSOR flag with seq:
-
- Note, for the DB_BTREE access method, the returned key is not
- necessarily an exact match for the specified key. The returned key
- is the smallest key greater than or equal to the specified key,
- permitting partial key matches and range searches.
-
-In the example script below, the C<match> sub uses this feature to find
-and print the first matching key/value pair given a partial key.
-
- use warnings ;
- use strict ;
- use DB_File ;
- use Fcntl ;
-
- use vars qw($filename $x %h $st $key $value) ;
-
- sub match
- {
- my $key = shift ;
- my $value = 0;
- my $orig_key = $key ;
- $x->seq($key, $value, R_CURSOR) ;
- print "$orig_key\t-> $key\t-> $value\n" ;
- }
-
- $filename = "tree" ;
- unlink $filename ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- # Add some key/value pairs to the file
- $h{'mouse'} = 'mickey' ;
- $h{'Wall'} = 'Larry' ;
- $h{'Walls'} = 'Brick' ;
- $h{'Smith'} = 'John' ;
-
-
- $key = $value = 0 ;
- print "IN ORDER\n" ;
- for ($st = $x->seq($key, $value, R_FIRST) ;
- $st == 0 ;
- $st = $x->seq($key, $value, R_NEXT) )
-
- { print "$key -> $value\n" }
-
- print "\nPARTIAL MATCH\n" ;
-
- match "Wa" ;
- match "A" ;
- match "a" ;
-
- undef $x ;
- untie %h ;
-
-Here is the output:
-
- IN ORDER
- Smith -> John
- Wall -> Larry
- Walls -> Brick
- mouse -> mickey
-
- PARTIAL MATCH
- Wa -> Wall -> Larry
- A -> Smith -> John
- a -> mouse -> mickey
-
-=head1 DB_RECNO
-
-DB_RECNO provides an interface to flat text files. Both variable and
-fixed length records are supported.
-
-In order to make RECNO more compatible with Perl, the array offset for
-all RECNO arrays begins at 0 rather than 1 as in Berkeley DB.
-
-As with normal Perl arrays, a RECNO array can be accessed using
-negative indexes. The index -1 refers to the last element of the array,
--2 the second last, and so on. Attempting to access an element before
-the start of the array will raise a fatal run-time error.
-
-=head2 The 'bval' Option
-
-The operation of the bval option warrants some discussion. Here is the
-definition of bval from the Berkeley DB 1.85 recno manual page:
-
- The delimiting byte to be used to mark the end of a
- record for variable-length records, and the pad charac-
- ter for fixed-length records. If no value is speci-
- fied, newlines (``\n'') are used to mark the end of
- variable-length records and fixed-length records are
- padded with spaces.
-
-The second sentence is wrong. In actual fact bval will only default to
-C<"\n"> when the openinfo parameter in dbopen is NULL. If a non-NULL
-openinfo parameter is used at all, the value that happens to be in bval
-will be used. That means you always have to specify bval when making
-use of any of the options in the openinfo parameter. This documentation
-error will be fixed in the next release of Berkeley DB.
-
-That clarifies the situation with regards Berkeley DB itself. What
-about B<DB_File>? Well, the behavior defined in the quote above is
-quite useful, so B<DB_File> conforms to it.
-
-That means that you can specify other options (e.g. cachesize) and
-still have bval default to C<"\n"> for variable length records, and
-space for fixed length records.
-
-=head2 A Simple Example
-
-Here is a simple example that uses RECNO (if you are using a version
-of Perl earlier than 5.004_57 this example won't work -- see
-L<Extra RECNO Methods> for a workaround).
-
- use warnings ;
- use strict ;
- use DB_File ;
-
- my $filename = "text" ;
- unlink $filename ;
-
- my @h ;
- tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_RECNO
- or die "Cannot open file 'text': $!\n" ;
-
- # Add a few key/value pairs to the file
- $h[0] = "orange" ;
- $h[1] = "blue" ;
- $h[2] = "yellow" ;
-
- push @h, "green", "black" ;
-
- my $elements = scalar @h ;
- print "The array contains $elements entries\n" ;
-
- my $last = pop @h ;
- print "popped $last\n" ;
-
- unshift @h, "white" ;
- my $first = shift @h ;
- print "shifted $first\n" ;
-
- # Check for existence of a key
- print "Element 1 Exists with value $h[1]\n" if $h[1] ;
-
- # use a negative index
- print "The last element is $h[-1]\n" ;
- print "The 2nd last element is $h[-2]\n" ;
-
- untie @h ;
-
-Here is the output from the script:
-
- The array contains 5 entries
- popped black
- shifted white
- Element 1 Exists with value blue
- The last element is green
- The 2nd last element is yellow
-
-=head2 Extra RECNO Methods
-
-If you are using a version of Perl earlier than 5.004_57, the tied
-array interface is quite limited. In the example script above
-C<push>, C<pop>, C<shift>, C<unshift>
-or determining the array length will not work with a tied array.
-
-To make the interface more useful for older versions of Perl, a number
-of methods are supplied with B<DB_File> to simulate the missing array
-operations. All these methods are accessed via the object returned from
-the tie call.
-
-Here are the methods:
-
-=over 5
-
-=item B<$X-E<gt>push(list) ;>
-
-Pushes the elements of C<list> to the end of the array.
-
-=item B<$value = $X-E<gt>pop ;>
-
-Removes and returns the last element of the array.
-
-=item B<$X-E<gt>shift>
-
-Removes and returns the first element of the array.
-
-=item B<$X-E<gt>unshift(list) ;>
-
-Pushes the elements of C<list> to the start of the array.
-
-=item B<$X-E<gt>length>
-
-Returns the number of elements in the array.
-
-=back
-
-=head2 Another Example
-
-Here is a more complete example that makes use of some of the methods
-described above. It also makes use of the API interface directly (see
-L<THE API INTERFACE>).
-
- use warnings ;
- use strict ;
- use vars qw(@h $H $file $i) ;
- use DB_File ;
- use Fcntl ;
-
- $file = "text" ;
-
- unlink $file ;
-
- $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0640, $DB_RECNO
- or die "Cannot open file $file: $!\n" ;
-
- # first create a text file to play with
- $h[0] = "zero" ;
- $h[1] = "one" ;
- $h[2] = "two" ;
- $h[3] = "three" ;
- $h[4] = "four" ;
-
-
- # Print the records in order.
- #
- # The length method is needed here because evaluating a tied
- # array in a scalar context does not return the number of
- # elements in the array.
-
- print "\nORIGINAL\n" ;
- foreach $i (0 .. $H->length - 1) {
- print "$i: $h[$i]\n" ;
- }
-
- # use the push & pop methods
- $a = $H->pop ;
- $H->push("last") ;
- print "\nThe last record was [$a]\n" ;
-
- # and the shift & unshift methods
- $a = $H->shift ;
- $H->unshift("first") ;
- print "The first record was [$a]\n" ;
-
- # Use the API to add a new record after record 2.
- $i = 2 ;
- $H->put($i, "Newbie", R_IAFTER) ;
-
- # and a new record before record 1.
- $i = 1 ;
- $H->put($i, "New One", R_IBEFORE) ;
-
- # delete record 3
- $H->del(3) ;
-
- # now print the records in reverse order
- print "\nREVERSE\n" ;
- for ($i = $H->length - 1 ; $i >= 0 ; -- $i)
- { print "$i: $h[$i]\n" }
-
- # same again, but use the API functions instead
- print "\nREVERSE again\n" ;
- my ($s, $k, $v) = (0, 0, 0) ;
- for ($s = $H->seq($k, $v, R_LAST) ;
- $s == 0 ;
- $s = $H->seq($k, $v, R_PREV))
- { print "$k: $v\n" }
-
- undef $H ;
- untie @h ;
-
-and this is what it outputs:
-
- ORIGINAL
- 0: zero
- 1: one
- 2: two
- 3: three
- 4: four
-
- The last record was [four]
- The first record was [zero]
-
- REVERSE
- 5: last
- 4: three
- 3: Newbie
- 2: one
- 1: New One
- 0: first
-
- REVERSE again
- 5: last
- 4: three
- 3: Newbie
- 2: one
- 1: New One
- 0: first
-
-Notes:
-
-=over 5
-
-=item 1.
-
-Rather than iterating through the array, C<@h> like this:
-
- foreach $i (@h)
-
-it is necessary to use either this:
-
- foreach $i (0 .. $H->length - 1)
-
-or this:
-
- for ($a = $H->get($k, $v, R_FIRST) ;
- $a == 0 ;
- $a = $H->get($k, $v, R_NEXT) )
-
-=item 2.
-
-Notice that both times the C<put> method was used the record index was
-specified using a variable, C<$i>, rather than the literal value
-itself. This is because C<put> will return the record number of the
-inserted line via that parameter.
-
-=back
-
-=head1 THE API INTERFACE
-
-As well as accessing Berkeley DB using a tied hash or array, it is also
-possible to make direct use of most of the API functions defined in the
-Berkeley DB documentation.
-
-To do this you need to store a copy of the object returned from the tie.
-
- $db = tie %hash, "DB_File", "filename" ;
-
-Once you have done that, you can access the Berkeley DB API functions
-as B<DB_File> methods directly like this:
-
- $db->put($key, $value, R_NOOVERWRITE) ;
-
-B<Important:> If you have saved a copy of the object returned from
-C<tie>, the underlying database file will I<not> be closed until both
-the tied variable is untied and all copies of the saved object are
-destroyed.
-
- use DB_File ;
- $db = tie %hash, "DB_File", "filename"
- or die "Cannot tie filename: $!" ;
- ...
- undef $db ;
- untie %hash ;
-
-See L<The untie() Gotcha> for more details.
-
-All the functions defined in L<dbopen> are available except for
-close() and dbopen() itself. The B<DB_File> method interface to the
-supported functions have been implemented to mirror the way Berkeley DB
-works whenever possible. In particular note that:
-
-=over 5
-
-=item *
-
-The methods return a status value. All return 0 on success.
-All return -1 to signify an error and set C<$!> to the exact
-error code. The return code 1 generally (but not always) means that the
-key specified did not exist in the database.
-
-Other return codes are defined. See below and in the Berkeley DB
-documentation for details. The Berkeley DB documentation should be used
-as the definitive source.
-
-=item *
-
-Whenever a Berkeley DB function returns data via one of its parameters,
-the equivalent B<DB_File> method does exactly the same.
-
-=item *
-
-If you are careful, it is possible to mix API calls with the tied
-hash/array interface in the same piece of code. Although only a few of
-the methods used to implement the tied interface currently make use of
-the cursor, you should always assume that the cursor has been changed
-any time the tied hash/array interface is used. As an example, this
-code will probably not do what you expect:
-
- $X = tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0777, $DB_BTREE
- or die "Cannot tie $filename: $!" ;
-
- # Get the first key/value pair and set the cursor
- $X->seq($key, $value, R_FIRST) ;
-
- # this line will modify the cursor
- $count = scalar keys %x ;
-
- # Get the second key/value pair.
- # oops, it didn't, it got the last key/value pair!
- $X->seq($key, $value, R_NEXT) ;
-
-The code above can be rearranged to get around the problem, like this:
-
- $X = tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0777, $DB_BTREE
- or die "Cannot tie $filename: $!" ;
-
- # this line will modify the cursor
- $count = scalar keys %x ;
-
- # Get the first key/value pair and set the cursor
- $X->seq($key, $value, R_FIRST) ;
-
- # Get the second key/value pair.
- # worked this time.
- $X->seq($key, $value, R_NEXT) ;
-
-=back
-
-All the constants defined in L<dbopen> for use in the flags parameters
-in the methods defined below are also available. Refer to the Berkeley
-DB documentation for the precise meaning of the flags values.
-
-Below is a list of the methods available.
-
-=over 5
-
-=item B<$status = $X-E<gt>get($key, $value [, $flags]) ;>
-
-Given a key (C<$key>) this method reads the value associated with it
-from the database. The value read from the database is returned in the
-C<$value> parameter.
-
-If the key does not exist the method returns 1.
-
-No flags are currently defined for this method.
-
-=item B<$status = $X-E<gt>put($key, $value [, $flags]) ;>
-
-Stores the key/value pair in the database.
-
-If you use either the R_IAFTER or R_IBEFORE flags, the C<$key> parameter
-will have the record number of the inserted key/value pair set.
-
-Valid flags are R_CURSOR, R_IAFTER, R_IBEFORE, R_NOOVERWRITE and
-R_SETCURSOR.
-
-=item B<$status = $X-E<gt>del($key [, $flags]) ;>
-
-Removes all key/value pairs with key C<$key> from the database.
-
-A return code of 1 means that the requested key was not in the
-database.
-
-R_CURSOR is the only valid flag at present.
-
-=item B<$status = $X-E<gt>fd ;>
-
-Returns the file descriptor for the underlying database.
-
-See L<Locking: The Trouble with fd> for an explanation for why you should
-not use C<fd> to lock your database.
-
-=item B<$status = $X-E<gt>seq($key, $value, $flags) ;>
-
-This interface allows sequential retrieval from the database. See
-L<dbopen> for full details.
-
-Both the C<$key> and C<$value> parameters will be set to the key/value
-pair read from the database.
-
-The flags parameter is mandatory. The valid flag values are R_CURSOR,
-R_FIRST, R_LAST, R_NEXT and R_PREV.
-
-=item B<$status = $X-E<gt>sync([$flags]) ;>
-
-Flushes any cached buffers to disk.
-
-R_RECNOSYNC is the only valid flag at present.
-
-=back
-
-=head1 DBM FILTERS
-
-A DBM Filter is a piece of code that is be used when you I<always>
-want to make the same transformation to all keys and/or values in a
-DBM database.
-
-There are four methods associated with DBM Filters. All work identically,
-and each is used to install (or uninstall) a single DBM Filter. Each
-expects a single parameter, namely a reference to a sub. The only
-difference between them is the place that the filter is installed.
-
-To summarise:
-
-=over 5
-
-=item B<filter_store_key>
-
-If a filter has been installed with this method, it will be invoked
-every time you write a key to a DBM database.
-
-=item B<filter_store_value>
-
-If a filter has been installed with this method, it will be invoked
-every time you write a value to a DBM database.
-
-
-=item B<filter_fetch_key>
-
-If a filter has been installed with this method, it will be invoked
-every time you read a key from a DBM database.
-
-=item B<filter_fetch_value>
-
-If a filter has been installed with this method, it will be invoked
-every time you read a value from a DBM database.
-
-=back
-
-You can use any combination of the methods, from none, to all four.
-
-All filter methods return the existing filter, if present, or C<undef>
-in not.
-
-To delete a filter pass C<undef> to it.
-
-=head2 The Filter
-
-When each filter is called by Perl, a local copy of C<$_> will contain
-the key or value to be filtered. Filtering is achieved by modifying
-the contents of C<$_>. The return code from the filter is ignored.
-
-=head2 An Example -- the NULL termination problem.
-
-Consider the following scenario. You have a DBM database
-that you need to share with a third-party C application. The C application
-assumes that I<all> keys and values are NULL terminated. Unfortunately
-when Perl writes to DBM databases it doesn't use NULL termination, so
-your Perl application will have to manage NULL termination itself. When
-you write to the database you will have to use something like this:
-
- $hash{"$key\0"} = "$value\0" ;
-
-Similarly the NULL needs to be taken into account when you are considering
-the length of existing keys/values.
-
-It would be much better if you could ignore the NULL terminations issue
-in the main application code and have a mechanism that automatically
-added the terminating NULL to all keys and values whenever you write to
-the database and have them removed when you read from the database. As I'm
-sure you have already guessed, this is a problem that DBM Filters can
-fix very easily.
-
- use warnings ;
- use strict ;
- use DB_File ;
-
- my %hash ;
- my $filename = "/tmp/filt" ;
- unlink $filename ;
-
- my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH
- or die "Cannot open $filename: $!\n" ;
-
- # Install DBM Filters
- $db->filter_fetch_key ( sub { s/\0$// } ) ;
- $db->filter_store_key ( sub { $_ .= "\0" } ) ;
- $db->filter_fetch_value( sub { s/\0$// } ) ;
- $db->filter_store_value( sub { $_ .= "\0" } ) ;
-
- $hash{"abc"} = "def" ;
- my $a = $hash{"ABC"} ;
- # ...
- undef $db ;
- untie %hash ;
-
-Hopefully the contents of each of the filters should be
-self-explanatory. Both "fetch" filters remove the terminating NULL,
-and both "store" filters add a terminating NULL.
-
-
-=head2 Another Example -- Key is a C int.
-
-Here is another real-life example. By default, whenever Perl writes to
-a DBM database it always writes the key and value as strings. So when
-you use this:
-
- $hash{12345} = "soemthing" ;
-
-the key 12345 will get stored in the DBM database as the 5 byte string
-"12345". If you actually want the key to be stored in the DBM database
-as a C int, you will have to use C<pack> when writing, and C<unpack>
-when reading.
-
-Here is a DBM Filter that does it:
-
- use warnings ;
- use strict ;
- use DB_File ;
- my %hash ;
- my $filename = "/tmp/filt" ;
- unlink $filename ;
-
-
- my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH
- or die "Cannot open $filename: $!\n" ;
-
- $db->filter_fetch_key ( sub { $_ = unpack("i", $_) } ) ;
- $db->filter_store_key ( sub { $_ = pack ("i", $_) } ) ;
- $hash{123} = "def" ;
- # ...
- undef $db ;
- untie %hash ;
-
-This time only two filters have been used -- we only need to manipulate
-the contents of the key, so it wasn't necessary to install any value
-filters.
-
-=head1 HINTS AND TIPS
-
-
-=head2 Locking: The Trouble with fd
-
-Until version 1.72 of this module, the recommended technique for locking
-B<DB_File> databases was to flock the filehandle returned from the "fd"
-function. Unfortunately this technique has been shown to be fundamentally
-flawed (Kudos to David Harris for tracking this down). Use it at your own
-peril!
-
-The locking technique went like this.
-
- $db = tie(%db, 'DB_File', '/tmp/foo.db', O_CREAT|O_RDWR, 0644)
- || die "dbcreat /tmp/foo.db $!";
- $fd = $db->fd;
- open(DB_FH, "+<&=$fd") || die "dup $!";
- flock (DB_FH, LOCK_EX) || die "flock: $!";
- ...
- $db{"Tom"} = "Jerry" ;
- ...
- flock(DB_FH, LOCK_UN);
- undef $db;
- untie %db;
- close(DB_FH);
-
-In simple terms, this is what happens:
-
-=over 5
-
-=item 1.
-
-Use "tie" to open the database.
-
-=item 2.
-
-Lock the database with fd & flock.
-
-=item 3.
-
-Read & Write to the database.
-
-=item 4.
-
-Unlock and close the database.
-
-=back
-
-Here is the crux of the problem. A side-effect of opening the B<DB_File>
-database in step 2 is that an initial block from the database will get
-read from disk and cached in memory.
-
-To see why this is a problem, consider what can happen when two processes,
-say "A" and "B", both want to update the same B<DB_File> database
-using the locking steps outlined above. Assume process "A" has already
-opened the database and has a write lock, but it hasn't actually updated
-the database yet (it has finished step 2, but not started step 3 yet). Now
-process "B" tries to open the same database - step 1 will succeed,
-but it will block on step 2 until process "A" releases the lock. The
-important thing to notice here is that at this point in time both
-processes will have cached identical initial blocks from the database.
-
-Now process "A" updates the database and happens to change some of the
-data held in the initial buffer. Process "A" terminates, flushing
-all cached data to disk and releasing the database lock. At this point
-the database on disk will correctly reflect the changes made by process
-"A".
-
-With the lock released, process "B" can now continue. It also updates the
-database and unfortunately it too modifies the data that was in its
-initial buffer. Once that data gets flushed to disk it will overwrite
-some/all of the changes process "A" made to the database.
-
-The result of this scenario is at best a database that doesn't contain
-what you expect. At worst the database will corrupt.
-
-The above won't happen every time competing process update the same
-B<DB_File> database, but it does illustrate why the technique should
-not be used.
-
-=head2 Safe ways to lock a database
-
-Starting with version 2.x, Berkeley DB has internal support for locking.
-The companion module to this one, B<BerkeleyDB>, provides an interface
-to this locking functionality. If you are serious about locking
-Berkeley DB databases, I strongly recommend using B<BerkeleyDB>.
-
-If using B<BerkeleyDB> isn't an option, there are a number of modules
-available on CPAN that can be used to implement locking. Each one
-implements locking differently and has different goals in mind. It is
-therefore worth knowing the difference, so that you can pick the right
-one for your application. Here are the three locking wrappers:
-
-=over 5
-
-=item B<Tie::DB_Lock>
-
-A B<DB_File> wrapper which creates copies of the database file for
-read access, so that you have a kind of a multiversioning concurrent read
-system. However, updates are still serial. Use for databases where reads
-may be lengthy and consistency problems may occur.
-
-=item B<Tie::DB_LockFile>
-
-A B<DB_File> wrapper that has the ability to lock and unlock the database
-while it is being used. Avoids the tie-before-flock problem by simply
-re-tie-ing the database when you get or drop a lock. Because of the
-flexibility in dropping and re-acquiring the lock in the middle of a
-session, this can be massaged into a system that will work with long
-updates and/or reads if the application follows the hints in the POD
-documentation.
-
-=item B<DB_File::Lock>
-
-An extremely lightweight B<DB_File> wrapper that simply flocks a lockfile
-before tie-ing the database and drops the lock after the untie. Allows
-one to use the same lockfile for multiple databases to avoid deadlock
-problems, if desired. Use for databases where updates are reads are
-quick and simple flock locking semantics are enough.
-
-=back
-
-=head2 Sharing Databases With C Applications
-
-There is no technical reason why a Berkeley DB database cannot be
-shared by both a Perl and a C application.
-
-The vast majority of problems that are reported in this area boil down
-to the fact that C strings are NULL terminated, whilst Perl strings are
-not. See L<DBM FILTERS> for a generic way to work around this problem.
-
-Here is a real example. Netscape 2.0 keeps a record of the locations you
-visit along with the time you last visited them in a DB_HASH database.
-This is usually stored in the file F<~/.netscape/history.db>. The key
-field in the database is the location string and the value field is the
-time the location was last visited stored as a 4 byte binary value.
-
-If you haven't already guessed, the location string is stored with a
-terminating NULL. This means you need to be careful when accessing the
-database.
-
-Here is a snippet of code that is loosely based on Tom Christiansen's
-I<ggh> script (available from your nearest CPAN archive in
-F<authors/id/TOMC/scripts/nshist.gz>).
-
- use warnings ;
- use strict ;
- use DB_File ;
- use Fcntl ;
-
- use vars qw( $dotdir $HISTORY %hist_db $href $binary_time $date ) ;
- $dotdir = $ENV{HOME} || $ENV{LOGNAME};
-
- $HISTORY = "$dotdir/.netscape/history.db";
-
- tie %hist_db, 'DB_File', $HISTORY
- or die "Cannot open $HISTORY: $!\n" ;;
-
- # Dump the complete database
- while ( ($href, $binary_time) = each %hist_db ) {
-
- # remove the terminating NULL
- $href =~ s/\x00$// ;
-
- # convert the binary time into a user friendly string
- $date = localtime unpack("V", $binary_time);
- print "$date $href\n" ;
- }
-
- # check for the existence of a specific key
- # remember to add the NULL
- if ( $binary_time = $hist_db{"http://mox.perl.com/\x00"} ) {
- $date = localtime unpack("V", $binary_time) ;
- print "Last visited mox.perl.com on $date\n" ;
- }
- else {
- print "Never visited mox.perl.com\n"
- }
-
- untie %hist_db ;
-
-=head2 The untie() Gotcha
-
-If you make use of the Berkeley DB API, it is I<very> strongly
-recommended that you read L<perltie/The untie Gotcha>.
-
-Even if you don't currently make use of the API interface, it is still
-worth reading it.
-
-Here is an example which illustrates the problem from a B<DB_File>
-perspective:
-
- use DB_File ;
- use Fcntl ;
-
- my %x ;
- my $X ;
-
- $X = tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_TRUNC
- or die "Cannot tie first time: $!" ;
-
- $x{123} = 456 ;
-
- untie %x ;
-
- tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_CREAT
- or die "Cannot tie second time: $!" ;
-
- untie %x ;
-
-When run, the script will produce this error message:
-
- Cannot tie second time: Invalid argument at bad.file line 14.
-
-Although the error message above refers to the second tie() statement
-in the script, the source of the problem is really with the untie()
-statement that precedes it.
-
-Having read L<perltie> you will probably have already guessed that the
-error is caused by the extra copy of the tied object stored in C<$X>.
-If you haven't, then the problem boils down to the fact that the
-B<DB_File> destructor, DESTROY, will not be called until I<all>
-references to the tied object are destroyed. Both the tied variable,
-C<%x>, and C<$X> above hold a reference to the object. The call to
-untie() will destroy the first, but C<$X> still holds a valid
-reference, so the destructor will not get called and the database file
-F<tst.fil> will remain open. The fact that Berkeley DB then reports the
-attempt to open a database that is already open via the catch-all
-"Invalid argument" doesn't help.
-
-If you run the script with the C<-w> flag the error message becomes:
-
- untie attempted while 1 inner references still exist at bad.file line 12.
- Cannot tie second time: Invalid argument at bad.file line 14.
-
-which pinpoints the real problem. Finally the script can now be
-modified to fix the original problem by destroying the API object
-before the untie:
-
- ...
- $x{123} = 456 ;
-
- undef $X ;
- untie %x ;
-
- $X = tie %x, 'DB_File', 'tst.fil' , O_RDWR|O_CREAT
- ...
-
-
-=head1 COMMON QUESTIONS
-
-=head2 Why is there Perl source in my database?
-
-If you look at the contents of a database file created by DB_File,
-there can sometimes be part of a Perl script included in it.
-
-This happens because Berkeley DB uses dynamic memory to allocate
-buffers which will subsequently be written to the database file. Being
-dynamic, the memory could have been used for anything before DB
-malloced it. As Berkeley DB doesn't clear the memory once it has been
-allocated, the unused portions will contain random junk. In the case
-where a Perl script gets written to the database, the random junk will
-correspond to an area of dynamic memory that happened to be used during
-the compilation of the script.
-
-Unless you don't like the possibility of there being part of your Perl
-scripts embedded in a database file, this is nothing to worry about.
-
-=head2 How do I store complex data structures with DB_File?
-
-Although B<DB_File> cannot do this directly, there is a module which
-can layer transparently over B<DB_File> to accomplish this feat.
-
-Check out the MLDBM module, available on CPAN in the directory
-F<modules/by-module/MLDBM>.
-
-=head2 What does "Invalid Argument" mean?
-
-You will get this error message when one of the parameters in the
-C<tie> call is wrong. Unfortunately there are quite a few parameters to
-get wrong, so it can be difficult to figure out which one it is.
-
-Here are a couple of possibilities:
-
-=over 5
-
-=item 1.
-
-Attempting to reopen a database without closing it.
-
-=item 2.
-
-Using the O_WRONLY flag.
-
-=back
-
-=head2 What does "Bareword 'DB_File' not allowed" mean?
-
-You will encounter this particular error message when you have the
-C<strict 'subs'> pragma (or the full strict pragma) in your script.
-Consider this script:
-
- use warnings ;
- use strict ;
- use DB_File ;
- use vars qw(%x) ;
- tie %x, DB_File, "filename" ;
-
-Running it produces the error in question:
-
- Bareword "DB_File" not allowed while "strict subs" in use
-
-To get around the error, place the word C<DB_File> in either single or
-double quotes, like this:
-
- tie %x, "DB_File", "filename" ;
-
-Although it might seem like a real pain, it is really worth the effort
-of having a C<use strict> in all your scripts.
-
-=head1 REFERENCES
-
-Articles that are either about B<DB_File> or make use of it.
-
-=over 5
-
-=item 1.
-
-I<Full-Text Searching in Perl>, Tim Kientzle (tkientzle@ddj.com),
-Dr. Dobb's Journal, Issue 295, January 1999, pp 34-41
-
-=back
-
-=head1 HISTORY
-
-Moved to the Changes file.
-
-=head1 BUGS
-
-Some older versions of Berkeley DB had problems with fixed length
-records using the RECNO file format. This problem has been fixed since
-version 1.85 of Berkeley DB.
-
-I am sure there are bugs in the code. If you do find any, or can
-suggest any enhancements, I would welcome your comments.
-
-=head1 AVAILABILITY
-
-B<DB_File> comes with the standard Perl source distribution. Look in
-the directory F<ext/DB_File>. Given the amount of time between releases
-of Perl the version that ships with Perl is quite likely to be out of
-date, so the most recent version can always be found on CPAN (see
-L<perlmod/CPAN> for details), in the directory
-F<modules/by-module/DB_File>.
-
-This version of B<DB_File> will work with either version 1.x, 2.x or
-3.x of Berkeley DB, but is limited to the functionality provided by
-version 1.
-
-The official web site for Berkeley DB is F<http://www.sleepycat.com>.
-All versions of Berkeley DB are available there.
-
-Alternatively, Berkeley DB version 1 is available at your nearest CPAN
-archive in F<src/misc/db.1.85.tar.gz>.
-
-If you are running IRIX, then get Berkeley DB version 1 from
-F<http://reality.sgi.com/ariel>. It has the patches necessary to
-compile properly on IRIX 5.3.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1995-1999 Paul Marquess. All rights reserved. This program
-is free software; you can redistribute it and/or modify it under the
-same terms as Perl itself.
-
-Although B<DB_File> is covered by the Perl license, the library it
-makes use of, namely Berkeley DB, is not. Berkeley DB has its own
-copyright and its own license. Please take the time to read it.
-
-Here are are few words taken from the Berkeley DB FAQ (at
-F<http://www.sleepycat.com>) regarding the license:
-
- Do I have to license DB to use it in Perl scripts?
-
- No. The Berkeley DB license requires that software that uses
- Berkeley DB be freely redistributable. In the case of Perl, that
- software is Perl, and not your scripts. Any Perl scripts that you
- write are your property, including scripts that make use of
- Berkeley DB. Neither the Perl license nor the Berkeley DB license
- place any restriction on what you may do with them.
-
-If you are in any doubt about the license situation, contact either the
-Berkeley DB authors or the author of DB_File. See L<"AUTHOR"> for details.
-
-
-=head1 SEE ALSO
-
-L<perl(1)>, L<dbopen(3)>, L<hash(3)>, L<recno(3)>, L<btree(3)>,
-L<dbmfilter>
-
-=head1 AUTHOR
-
-The DB_File interface was written by Paul Marquess
-E<lt>Paul.Marquess@btinternet.comE<gt>.
-Questions about the DB system itself may be addressed to
-E<lt>db@sleepycat.com<gt>.
-
-=cut
diff --git a/contrib/perl5/ext/DB_File/DB_File.xs b/contrib/perl5/ext/DB_File/DB_File.xs
deleted file mode 100644
index fa3bb33..0000000
--- a/contrib/perl5/ext/DB_File/DB_File.xs
+++ /dev/null
@@ -1,2071 +0,0 @@
-/*
-
- DB_File.xs -- Perl 5 interface to Berkeley DB
-
- written by Paul Marquess <Paul.Marquess@btinternet.com>
- last modified 17 December 2000
- version 1.75
-
- All comments/suggestions/problems are welcome
-
- Copyright (c) 1995-2000 Paul Marquess. All rights reserved.
- This program is free software; you can redistribute it and/or
- modify it under the same terms as Perl itself.
-
- Changes:
- 0.1 - Initial Release
- 0.2 - No longer bombs out if dbopen returns an error.
- 0.3 - Added some support for multiple btree compares
- 1.0 - Complete support for multiple callbacks added.
- Fixed a problem with pushing a value onto an empty list.
- 1.01 - Fixed a SunOS core dump problem.
- The return value from TIEHASH wasn't set to NULL when
- dbopen returned an error.
- 1.02 - Use ALIAS to define TIEARRAY.
- Removed some redundant commented code.
- Merged OS2 code into the main distribution.
- Allow negative subscripts with RECNO interface.
- Changed the default flags to O_CREAT|O_RDWR
- 1.03 - Added EXISTS
- 1.04 - fixed a couple of bugs in hash_cb. Patches supplied by
- Dave Hammen, hammen@gothamcity.jsc.nasa.gov
- 1.05 - Added logic to allow prefix & hash types to be specified via
- Makefile.PL
- 1.06 - Minor namespace cleanup: Localized PrintBtree.
- 1.07 - Fixed bug with RECNO, where bval wasn't defaulting to "\n".
- 1.08 - No change to DB_File.xs
- 1.09 - Default mode for dbopen changed to 0666
- 1.10 - Fixed fd method so that it still returns -1 for
- in-memory files when db 1.86 is used.
- 1.11 - No change to DB_File.xs
- 1.12 - No change to DB_File.xs
- 1.13 - Tidied up a few casts.
- 1.14 - Made it illegal to tie an associative array to a RECNO
- database and an ordinary array to a HASH or BTREE database.
- 1.50 - Make work with both DB 1.x or DB 2.x
- 1.51 - Fixed a bug in mapping 1.x O_RDONLY flag to 2.x DB_RDONLY equivalent
- 1.52 - Patch from Gisle Aas <gisle@aas.no> to suppress "use of
- undefined value" warning with db_get and db_seq.
- 1.53 - Added DB_RENUMBER to flags for recno.
- 1.54 - Fixed bug in the fd method
- 1.55 - Fix for AIX from Jarkko Hietaniemi
- 1.56 - No change to DB_File.xs
- 1.57 - added the #undef op to allow building with Threads support.
- 1.58 - Fixed a problem with the use of sv_setpvn. When the
- size is specified as 0, it does a strlen on the data.
- This was ok for DB 1.x, but isn't for DB 2.x.
- 1.59 - No change to DB_File.xs
- 1.60 - Some code tidy up
- 1.61 - added flagSet macro for DB 2.5.x
- fixed typo in O_RDONLY test.
- 1.62 - No change to DB_File.xs
- 1.63 - Fix to alllow DB 2.6.x to build.
- 1.64 - Tidied up the 1.x to 2.x flags mapping code.
- Added a patch from Mark Kettenis <kettenis@wins.uva.nl>
- to fix a flag mapping problem with O_RDONLY on the Hurd
- 1.65 - Fixed a bug in the PUSH logic.
- Added BOOT check that using 2.3.4 or greater
- 1.66 - Added DBM filter code
- 1.67 - Backed off the use of newSVpvn.
- Fixed DBM Filter code for Perl 5.004.
- Fixed a small memory leak in the filter code.
- 1.68 - fixed backward compatability bug with R_IAFTER & R_IBEFORE
- merged in the 5.005_58 changes
- 1.69 - fixed a bug in push -- DB_APPEND wasn't working properly.
- Fixed the R_SETCURSOR bug introduced in 1.68
- Added a new Perl variable $DB_File::db_ver
- 1.70 - Initialise $DB_File::db_ver and $DB_File::db_version with
- GV_ADD|GV_ADDMULT -- bug spotted by Nick Ing-Simmons.
- Added a BOOT check to test for equivalent versions of db.h &
- libdb.a/so.
- 1.71 - Support for Berkeley DB version 3.
- Support for Berkeley DB 2/3's backward compatability mode.
- Rewrote push
- 1.72 - No change to DB_File.xs
- 1.73 - No change to DB_File.xs
- 1.74 - A call to open needed parenthesised to stop it clashing
- with a win32 macro.
- Added Perl core patches 7703 & 7801.
- 1.75 - Fixed Perl core patch 7703.
- Added suppport to allow DB_File to be built with
- Berkeley DB 3.2 -- btree_compare, btree_prefix and hash_cb
- needed to be changed.
-
-*/
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifndef PERL_VERSION
-# include "patchlevel.h"
-# define PERL_REVISION 5
-# define PERL_VERSION PATCHLEVEL
-# define PERL_SUBVERSION SUBVERSION
-#endif
-
-#if PERL_REVISION == 5 && (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION <= 75 ))
-
-# define PL_sv_undef sv_undef
-# define PL_na na
-
-#endif
-
-/* DEFSV appears first in 5.004_56 */
-#ifndef DEFSV
-# define DEFSV GvSV(defgv)
-#endif
-
-/* Being the Berkeley DB we prefer the <sys/cdefs.h> (which will be
- * shortly #included by the <db.h>) __attribute__ to the possibly
- * already defined __attribute__, for example by GNUC or by Perl. */
-
-#undef __attribute__
-
-/* If Perl has been compiled with Threads support,the symbol op will
- be defined here. This clashes with a field name in db.h, so get rid of it.
- */
-#ifdef op
-# undef op
-#endif
-
-#ifdef COMPAT185
-# include <db_185.h>
-#else
-# include <db.h>
-#endif
-
-#ifdef CAN_PROTOTYPE
-extern void __getBerkeleyDBInfo(void);
-#endif
-
-#ifndef pTHX
-# define pTHX
-# define pTHX_
-# define aTHX
-# define aTHX_
-#endif
-
-#ifndef newSVpvn
-# define newSVpvn(a,b) newSVpv(a,b)
-#endif
-
-#include <fcntl.h>
-
-/* #define TRACE */
-#define DBM_FILTERING
-
-#ifdef TRACE
-# define Trace(x) printf x
-#else
-# define Trace(x)
-#endif
-
-
-#define DBT_clear(x) Zero(&x, 1, DBT) ;
-
-#ifdef DB_VERSION_MAJOR
-
-#if DB_VERSION_MAJOR == 2
-# define BERKELEY_DB_1_OR_2
-#endif
-
-#if DB_VERSION_MAJOR > 3 || (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR >= 2)
-# define AT_LEAST_DB_3_2
-#endif
-
-/* map version 2 features & constants onto their version 1 equivalent */
-
-#ifdef DB_Prefix_t
-# undef DB_Prefix_t
-#endif
-#define DB_Prefix_t size_t
-
-#ifdef DB_Hash_t
-# undef DB_Hash_t
-#endif
-#define DB_Hash_t u_int32_t
-
-/* DBTYPE stays the same */
-/* HASHINFO, RECNOINFO and BTREEINFO map to DB_INFO */
-#if DB_VERSION_MAJOR == 2
- typedef DB_INFO INFO ;
-#else /* DB_VERSION_MAJOR > 2 */
-# define DB_FIXEDLEN (0x8000)
-#endif /* DB_VERSION_MAJOR == 2 */
-
-/* version 2 has db_recno_t in place of recno_t */
-typedef db_recno_t recno_t;
-
-
-#define R_CURSOR DB_SET_RANGE
-#define R_FIRST DB_FIRST
-#define R_IAFTER DB_AFTER
-#define R_IBEFORE DB_BEFORE
-#define R_LAST DB_LAST
-#define R_NEXT DB_NEXT
-#define R_NOOVERWRITE DB_NOOVERWRITE
-#define R_PREV DB_PREV
-
-#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5
-# define R_SETCURSOR 0x800000
-#else
-# define R_SETCURSOR (-100)
-#endif
-
-#define R_RECNOSYNC 0
-#define R_FIXEDLEN DB_FIXEDLEN
-#define R_DUP DB_DUP
-
-
-#define db_HA_hash h_hash
-#define db_HA_ffactor h_ffactor
-#define db_HA_nelem h_nelem
-#define db_HA_bsize db_pagesize
-#define db_HA_cachesize db_cachesize
-#define db_HA_lorder db_lorder
-
-#define db_BT_compare bt_compare
-#define db_BT_prefix bt_prefix
-#define db_BT_flags flags
-#define db_BT_psize db_pagesize
-#define db_BT_cachesize db_cachesize
-#define db_BT_lorder db_lorder
-#define db_BT_maxkeypage
-#define db_BT_minkeypage
-
-
-#define db_RE_reclen re_len
-#define db_RE_flags flags
-#define db_RE_bval re_pad
-#define db_RE_bfname re_source
-#define db_RE_psize db_pagesize
-#define db_RE_cachesize db_cachesize
-#define db_RE_lorder db_lorder
-
-#define TXN NULL,
-
-#define do_SEQ(db, key, value, flag) (db->cursor->c_get)(db->cursor, &key, &value, flag)
-
-
-#define DBT_flags(x) x.flags = 0
-#define DB_flags(x, v) x |= v
-
-#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5
-# define flagSet(flags, bitmask) ((flags) & (bitmask))
-#else
-# define flagSet(flags, bitmask) (((flags) & DB_OPFLAGS_MASK) == (bitmask))
-#endif
-
-#else /* db version 1.x */
-
-#define BERKELEY_DB_1
-#define BERKELEY_DB_1_OR_2
-
-typedef union INFO {
- HASHINFO hash ;
- RECNOINFO recno ;
- BTREEINFO btree ;
- } INFO ;
-
-
-#ifdef mDB_Prefix_t
-# ifdef DB_Prefix_t
-# undef DB_Prefix_t
-# endif
-# define DB_Prefix_t mDB_Prefix_t
-#endif
-
-#ifdef mDB_Hash_t
-# ifdef DB_Hash_t
-# undef DB_Hash_t
-# endif
-# define DB_Hash_t mDB_Hash_t
-#endif
-
-#define db_HA_hash hash.hash
-#define db_HA_ffactor hash.ffactor
-#define db_HA_nelem hash.nelem
-#define db_HA_bsize hash.bsize
-#define db_HA_cachesize hash.cachesize
-#define db_HA_lorder hash.lorder
-
-#define db_BT_compare btree.compare
-#define db_BT_prefix btree.prefix
-#define db_BT_flags btree.flags
-#define db_BT_psize btree.psize
-#define db_BT_cachesize btree.cachesize
-#define db_BT_lorder btree.lorder
-#define db_BT_maxkeypage btree.maxkeypage
-#define db_BT_minkeypage btree.minkeypage
-
-#define db_RE_reclen recno.reclen
-#define db_RE_flags recno.flags
-#define db_RE_bval recno.bval
-#define db_RE_bfname recno.bfname
-#define db_RE_psize recno.psize
-#define db_RE_cachesize recno.cachesize
-#define db_RE_lorder recno.lorder
-
-#define TXN
-
-#define do_SEQ(db, key, value, flag) (db->dbp->seq)(db->dbp, &key, &value, flag)
-#define DBT_flags(x)
-#define DB_flags(x, v)
-#define flagSet(flags, bitmask) ((flags) & (bitmask))
-
-#endif /* db version 1 */
-
-
-
-#define db_DELETE(db, key, flags) ((db->dbp)->del)(db->dbp, TXN &key, flags)
-#define db_STORE(db, key, value, flags) ((db->dbp)->put)(db->dbp, TXN &key, &value, flags)
-#define db_FETCH(db, key, flags) ((db->dbp)->get)(db->dbp, TXN &key, &value, flags)
-
-#define db_sync(db, flags) ((db->dbp)->sync)(db->dbp, flags)
-#define db_get(db, key, value, flags) ((db->dbp)->get)(db->dbp, TXN &key, &value, flags)
-
-#ifdef DB_VERSION_MAJOR
-#define db_DESTROY(db) ( db->cursor->c_close(db->cursor),\
- (db->dbp->close)(db->dbp, 0) )
-#define db_close(db) ((db->dbp)->close)(db->dbp, 0)
-#define db_del(db, key, flags) (flagSet(flags, R_CURSOR) \
- ? ((db->cursor)->c_del)(db->cursor, 0) \
- : ((db->dbp)->del)(db->dbp, NULL, &key, flags) )
-
-#else /* ! DB_VERSION_MAJOR */
-
-#define db_DESTROY(db) ((db->dbp)->close)(db->dbp)
-#define db_close(db) ((db->dbp)->close)(db->dbp)
-#define db_del(db, key, flags) ((db->dbp)->del)(db->dbp, &key, flags)
-#define db_put(db, key, value, flags) ((db->dbp)->put)(db->dbp, &key, &value, flags)
-
-#endif /* ! DB_VERSION_MAJOR */
-
-
-#define db_seq(db, key, value, flags) do_SEQ(db, key, value, flags)
-
-typedef struct {
- DBTYPE type ;
- DB * dbp ;
- SV * compare ;
- SV * prefix ;
- SV * hash ;
- int in_memory ;
-#ifdef BERKELEY_DB_1_OR_2
- INFO info ;
-#endif
-#ifdef DB_VERSION_MAJOR
- DBC * cursor ;
-#endif
-#ifdef DBM_FILTERING
- SV * filter_fetch_key ;
- SV * filter_store_key ;
- SV * filter_fetch_value ;
- SV * filter_store_value ;
- int filtering ;
-#endif /* DBM_FILTERING */
-
- } DB_File_type;
-
-typedef DB_File_type * DB_File ;
-typedef DBT DBTKEY ;
-
-#ifdef DBM_FILTERING
-
-#define ckFilter(arg,type,name) \
- if (db->type) { \
- SV * save_defsv ; \
- /* printf("filtering %s\n", name) ;*/ \
- if (db->filtering) \
- croak("recursion detected in %s", name) ; \
- db->filtering = TRUE ; \
- save_defsv = newSVsv(DEFSV) ; \
- sv_setsv(DEFSV, arg) ; \
- PUSHMARK(sp) ; \
- (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \
- sv_setsv(arg, DEFSV) ; \
- sv_setsv(DEFSV, save_defsv) ; \
- SvREFCNT_dec(save_defsv) ; \
- db->filtering = FALSE ; \
- /*printf("end of filtering %s\n", name) ;*/ \
- }
-
-#else
-
-#define ckFilter(arg,type, name)
-
-#endif /* DBM_FILTERING */
-
-#define my_sv_setpvn(sv, d, s) sv_setpvn(sv, (s ? d : (void*)""), s)
-
-#define OutputValue(arg, name) \
- { if (RETVAL == 0) { \
- my_sv_setpvn(arg, name.data, name.size) ; \
- ckFilter(arg, filter_fetch_value,"filter_fetch_value") ; \
- } \
- }
-
-#define OutputKey(arg, name) \
- { if (RETVAL == 0) \
- { \
- if (db->type != DB_RECNO) { \
- my_sv_setpvn(arg, name.data, name.size); \
- } \
- else \
- sv_setiv(arg, (I32)*(I32*)name.data - 1); \
- ckFilter(arg, filter_fetch_key,"filter_fetch_key") ; \
- } \
- }
-
-
-/* Internal Global Data */
-static recno_t Value ;
-static recno_t zero = 0 ;
-static DB_File CurrentDB ;
-static DBTKEY empty ;
-
-#ifdef DB_VERSION_MAJOR
-
-static int
-#ifdef CAN_PROTOTYPE
-db_put(DB_File db, DBTKEY key, DBT value, u_int flags)
-#else
-db_put(db, key, value, flags)
-DB_File db ;
-DBTKEY key ;
-DBT value ;
-u_int flags ;
-#endif
-{
- int status ;
-
- if (flagSet(flags, R_IAFTER) || flagSet(flags, R_IBEFORE)) {
- DBC * temp_cursor ;
- DBT l_key, l_value;
-
-#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 6
- if (((db->dbp)->cursor)(db->dbp, NULL, &temp_cursor) != 0)
-#else
- if (((db->dbp)->cursor)(db->dbp, NULL, &temp_cursor, 0) != 0)
-#endif
- return (-1) ;
-
- memset(&l_key, 0, sizeof(l_key));
- l_key.data = key.data;
- l_key.size = key.size;
- memset(&l_value, 0, sizeof(l_value));
- l_value.data = value.data;
- l_value.size = value.size;
-
- if ( temp_cursor->c_get(temp_cursor, &l_key, &l_value, DB_SET) != 0) {
- (void)temp_cursor->c_close(temp_cursor);
- return (-1);
- }
-
- status = temp_cursor->c_put(temp_cursor, &key, &value, flags);
- (void)temp_cursor->c_close(temp_cursor);
-
- return (status) ;
- }
-
-
- if (flagSet(flags, R_CURSOR)) {
- return ((db->cursor)->c_put)(db->cursor, &key, &value, DB_CURRENT);
- }
-
- if (flagSet(flags, R_SETCURSOR)) {
- if ((db->dbp)->put(db->dbp, NULL, &key, &value, 0) != 0)
- return -1 ;
- return ((db->cursor)->c_get)(db->cursor, &key, &value, DB_SET_RANGE);
-
- }
-
- return ((db->dbp)->put)(db->dbp, NULL, &key, &value, flags) ;
-
-}
-
-#endif /* DB_VERSION_MAJOR */
-
-
-static int
-#ifdef AT_LEAST_DB_3_2
-
-#ifdef CAN_PROTOTYPE
-btree_compare(DB * db, const DBT *key1, const DBT *key2)
-#else
-btree_compare(db, key1, key2)
-DB * db ;
-const DBT * key1 ;
-const DBT * key2 ;
-#endif /* CAN_PROTOTYPE */
-
-#else /* Berkeley DB < 3.2 */
-
-#ifdef CAN_PROTOTYPE
-btree_compare(const DBT *key1, const DBT *key2)
-#else
-btree_compare(key1, key2)
-const DBT * key1 ;
-const DBT * key2 ;
-#endif
-
-#endif
-
-{
-#ifdef dTHX
- dTHX;
-#endif
- dSP ;
- void * data1, * data2 ;
- int retval ;
- int count ;
-
- data1 = key1->data ;
- data2 = key2->data ;
-
-#ifndef newSVpvn
- /* As newSVpv will assume that the data pointer is a null terminated C
- string if the size parameter is 0, make sure that data points to an
- empty string if the length is 0
- */
- if (key1->size == 0)
- data1 = "" ;
- if (key2->size == 0)
- data2 = "" ;
-#endif
-
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
- EXTEND(SP,2) ;
- PUSHs(sv_2mortal(newSVpvn(data1,key1->size)));
- PUSHs(sv_2mortal(newSVpvn(data2,key2->size)));
- PUTBACK ;
-
- count = perl_call_sv(CurrentDB->compare, G_SCALAR);
-
- SPAGAIN ;
-
- if (count != 1)
- croak ("DB_File btree_compare: expected 1 return value from compare sub, got %d\n", count) ;
-
- retval = POPi ;
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
- return (retval) ;
-
-}
-
-static DB_Prefix_t
-#ifdef AT_LEAST_DB_3_2
-
-#ifdef CAN_PROTOTYPE
-btree_prefix(DB * db, const DBT *key1, const DBT *key2)
-#else
-btree_prefix(db, key1, key2)
-Db * db ;
-const DBT * key1 ;
-const DBT * key2 ;
-#endif
-
-#else /* Berkeley DB < 3.2 */
-
-#ifdef CAN_PROTOTYPE
-btree_prefix(const DBT *key1, const DBT *key2)
-#else
-btree_prefix(key1, key2)
-const DBT * key1 ;
-const DBT * key2 ;
-#endif
-
-#endif
-{
-#ifdef dTHX
- dTHX;
-#endif
- dSP ;
- void * data1, * data2 ;
- int retval ;
- int count ;
-
- data1 = key1->data ;
- data2 = key2->data ;
-
-#ifndef newSVpvn
- /* As newSVpv will assume that the data pointer is a null terminated C
- string if the size parameter is 0, make sure that data points to an
- empty string if the length is 0
- */
- if (key1->size == 0)
- data1 = "" ;
- if (key2->size == 0)
- data2 = "" ;
-#endif
-
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
- EXTEND(SP,2) ;
- PUSHs(sv_2mortal(newSVpvn(data1,key1->size)));
- PUSHs(sv_2mortal(newSVpvn(data2,key2->size)));
- PUTBACK ;
-
- count = perl_call_sv(CurrentDB->prefix, G_SCALAR);
-
- SPAGAIN ;
-
- if (count != 1)
- croak ("DB_File btree_prefix: expected 1 return value from prefix sub, got %d\n", count) ;
-
- retval = POPi ;
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
-
- return (retval) ;
-}
-
-
-#ifdef BERKELEY_DB_1
-# define HASH_CB_SIZE_TYPE size_t
-#else
-# define HASH_CB_SIZE_TYPE u_int32_t
-#endif
-
-static DB_Hash_t
-#ifdef AT_LEAST_DB_3_2
-
-#ifdef CAN_PROTOTYPE
-hash_cb(DB * db, const void *data, u_int32_t size)
-#else
-hash_cb(db, data, size)
-DB * db ;
-const void * data ;
-HASH_CB_SIZE_TYPE size ;
-#endif
-
-#else /* Berkeley DB < 3.2 */
-
-#ifdef CAN_PROTOTYPE
-hash_cb(const void *data, HASH_CB_SIZE_TYPE size)
-#else
-hash_cb(data, size)
-const void * data ;
-HASH_CB_SIZE_TYPE size ;
-#endif
-
-#endif
-{
-#ifdef dTHX
- dTHX;
-#endif
- dSP ;
- int retval ;
- int count ;
-
-#ifndef newSVpvn
- if (size == 0)
- data = "" ;
-#endif
-
- /* DGH - Next two lines added to fix corrupted stack problem */
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
-
- XPUSHs(sv_2mortal(newSVpvn((char*)data,size)));
- PUTBACK ;
-
- count = perl_call_sv(CurrentDB->hash, G_SCALAR);
-
- SPAGAIN ;
-
- if (count != 1)
- croak ("DB_File hash_cb: expected 1 return value from hash sub, got %d\n", count) ;
-
- retval = POPi ;
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
-
- return (retval) ;
-}
-
-
-#if defined(TRACE) && defined(BERKELEY_DB_1_OR_2)
-
-static void
-#ifdef CAN_PROTOTYPE
-PrintHash(INFO *hash)
-#else
-PrintHash(hash)
-INFO * hash ;
-#endif
-{
- printf ("HASH Info\n") ;
- printf (" hash = %s\n",
- (hash->db_HA_hash != NULL ? "redefined" : "default")) ;
- printf (" bsize = %d\n", hash->db_HA_bsize) ;
- printf (" ffactor = %d\n", hash->db_HA_ffactor) ;
- printf (" nelem = %d\n", hash->db_HA_nelem) ;
- printf (" cachesize = %d\n", hash->db_HA_cachesize) ;
- printf (" lorder = %d\n", hash->db_HA_lorder) ;
-
-}
-
-static void
-#ifdef CAN_PROTOTYPE
-PrintRecno(INFO *recno)
-#else
-PrintRecno(recno)
-INFO * recno ;
-#endif
-{
- printf ("RECNO Info\n") ;
- printf (" flags = %d\n", recno->db_RE_flags) ;
- printf (" cachesize = %d\n", recno->db_RE_cachesize) ;
- printf (" psize = %d\n", recno->db_RE_psize) ;
- printf (" lorder = %d\n", recno->db_RE_lorder) ;
- printf (" reclen = %ul\n", (unsigned long)recno->db_RE_reclen) ;
- printf (" bval = %d 0x%x\n", recno->db_RE_bval, recno->db_RE_bval) ;
- printf (" bfname = %d [%s]\n", recno->db_RE_bfname, recno->db_RE_bfname) ;
-}
-
-static void
-#ifdef CAN_PROTOTYPE
-PrintBtree(INFO *btree)
-#else
-PrintBtree(btree)
-INFO * btree ;
-#endif
-{
- printf ("BTREE Info\n") ;
- printf (" compare = %s\n",
- (btree->db_BT_compare ? "redefined" : "default")) ;
- printf (" prefix = %s\n",
- (btree->db_BT_prefix ? "redefined" : "default")) ;
- printf (" flags = %d\n", btree->db_BT_flags) ;
- printf (" cachesize = %d\n", btree->db_BT_cachesize) ;
- printf (" psize = %d\n", btree->db_BT_psize) ;
-#ifndef DB_VERSION_MAJOR
- printf (" maxkeypage = %d\n", btree->db_BT_maxkeypage) ;
- printf (" minkeypage = %d\n", btree->db_BT_minkeypage) ;
-#endif
- printf (" lorder = %d\n", btree->db_BT_lorder) ;
-}
-
-#else
-
-#define PrintRecno(recno)
-#define PrintHash(hash)
-#define PrintBtree(btree)
-
-#endif /* TRACE */
-
-
-static I32
-#ifdef CAN_PROTOTYPE
-GetArrayLength(pTHX_ DB_File db)
-#else
-GetArrayLength(db)
-DB_File db ;
-#endif
-{
- DBT key ;
- DBT value ;
- int RETVAL ;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- RETVAL = do_SEQ(db, key, value, R_LAST) ;
- if (RETVAL == 0)
- RETVAL = *(I32 *)key.data ;
- else /* No key means empty file */
- RETVAL = 0 ;
-
- return ((I32)RETVAL) ;
-}
-
-static recno_t
-#ifdef CAN_PROTOTYPE
-GetRecnoKey(pTHX_ DB_File db, I32 value)
-#else
-GetRecnoKey(db, value)
-DB_File db ;
-I32 value ;
-#endif
-{
- if (value < 0) {
- /* Get the length of the array */
- I32 length = GetArrayLength(aTHX_ db) ;
-
- /* check for attempt to write before start of array */
- if (length + value + 1 <= 0)
- croak("Modification of non-creatable array value attempted, subscript %ld", (long)value) ;
-
- value = length + value + 1 ;
- }
- else
- ++ value ;
-
- return value ;
-}
-
-
-static DB_File
-#ifdef CAN_PROTOTYPE
-ParseOpenInfo(pTHX_ int isHASH, char *name, int flags, int mode, SV *sv)
-#else
-ParseOpenInfo(isHASH, name, flags, mode, sv)
-int isHASH ;
-char * name ;
-int flags ;
-int mode ;
-SV * sv ;
-#endif
-{
-
-#ifdef BERKELEY_DB_1_OR_2 /* Berkeley DB Version 1 or 2 */
-
- SV ** svp;
- HV * action ;
- DB_File RETVAL = (DB_File)safemalloc(sizeof(DB_File_type)) ;
- void * openinfo = NULL ;
- INFO * info = &RETVAL->info ;
- STRLEN n_a;
-
-/* printf("In ParseOpenInfo name=[%s] flags=[%d] mode = [%d]\n", name, flags, mode) ; */
- Zero(RETVAL, 1, DB_File_type) ;
-
- /* Default to HASH */
-#ifdef DBM_FILTERING
- RETVAL->filtering = 0 ;
- RETVAL->filter_fetch_key = RETVAL->filter_store_key =
- RETVAL->filter_fetch_value = RETVAL->filter_store_value =
-#endif /* DBM_FILTERING */
- RETVAL->hash = RETVAL->compare = RETVAL->prefix = NULL ;
- RETVAL->type = DB_HASH ;
-
- /* DGH - Next line added to avoid SEGV on existing hash DB */
- CurrentDB = RETVAL;
-
- /* fd for 1.86 hash in memory files doesn't return -1 like 1.85 */
- RETVAL->in_memory = (name == NULL) ;
-
- if (sv)
- {
- if (! SvROK(sv) )
- croak ("type parameter is not a reference") ;
-
- svp = hv_fetch( (HV*)SvRV(sv), "GOT", 3, FALSE) ;
- if (svp && SvOK(*svp))
- action = (HV*) SvRV(*svp) ;
- else
- croak("internal error") ;
-
- if (sv_isa(sv, "DB_File::HASHINFO"))
- {
-
- if (!isHASH)
- croak("DB_File can only tie an associative array to a DB_HASH database") ;
-
- RETVAL->type = DB_HASH ;
- openinfo = (void*)info ;
-
- svp = hv_fetch(action, "hash", 4, FALSE);
-
- if (svp && SvOK(*svp))
- {
- info->db_HA_hash = hash_cb ;
- RETVAL->hash = newSVsv(*svp) ;
- }
- else
- info->db_HA_hash = NULL ;
-
- svp = hv_fetch(action, "ffactor", 7, FALSE);
- info->db_HA_ffactor = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "nelem", 5, FALSE);
- info->db_HA_nelem = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "bsize", 5, FALSE);
- info->db_HA_bsize = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "cachesize", 9, FALSE);
- info->db_HA_cachesize = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "lorder", 6, FALSE);
- info->db_HA_lorder = svp ? SvIV(*svp) : 0;
-
- PrintHash(info) ;
- }
- else if (sv_isa(sv, "DB_File::BTREEINFO"))
- {
- if (!isHASH)
- croak("DB_File can only tie an associative array to a DB_BTREE database");
-
- RETVAL->type = DB_BTREE ;
- openinfo = (void*)info ;
-
- svp = hv_fetch(action, "compare", 7, FALSE);
- if (svp && SvOK(*svp))
- {
- info->db_BT_compare = btree_compare ;
- RETVAL->compare = newSVsv(*svp) ;
- }
- else
- info->db_BT_compare = NULL ;
-
- svp = hv_fetch(action, "prefix", 6, FALSE);
- if (svp && SvOK(*svp))
- {
- info->db_BT_prefix = btree_prefix ;
- RETVAL->prefix = newSVsv(*svp) ;
- }
- else
- info->db_BT_prefix = NULL ;
-
- svp = hv_fetch(action, "flags", 5, FALSE);
- info->db_BT_flags = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "cachesize", 9, FALSE);
- info->db_BT_cachesize = svp ? SvIV(*svp) : 0;
-
-#ifndef DB_VERSION_MAJOR
- svp = hv_fetch(action, "minkeypage", 10, FALSE);
- info->btree.minkeypage = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "maxkeypage", 10, FALSE);
- info->btree.maxkeypage = svp ? SvIV(*svp) : 0;
-#endif
-
- svp = hv_fetch(action, "psize", 5, FALSE);
- info->db_BT_psize = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "lorder", 6, FALSE);
- info->db_BT_lorder = svp ? SvIV(*svp) : 0;
-
- PrintBtree(info) ;
-
- }
- else if (sv_isa(sv, "DB_File::RECNOINFO"))
- {
- if (isHASH)
- croak("DB_File can only tie an array to a DB_RECNO database");
-
- RETVAL->type = DB_RECNO ;
- openinfo = (void *)info ;
-
- info->db_RE_flags = 0 ;
-
- svp = hv_fetch(action, "flags", 5, FALSE);
- info->db_RE_flags = (u_long) (svp ? SvIV(*svp) : 0);
-
- svp = hv_fetch(action, "reclen", 6, FALSE);
- info->db_RE_reclen = (size_t) (svp ? SvIV(*svp) : 0);
-
- svp = hv_fetch(action, "cachesize", 9, FALSE);
- info->db_RE_cachesize = (u_int) (svp ? SvIV(*svp) : 0);
-
- svp = hv_fetch(action, "psize", 5, FALSE);
- info->db_RE_psize = (u_int) (svp ? SvIV(*svp) : 0);
-
- svp = hv_fetch(action, "lorder", 6, FALSE);
- info->db_RE_lorder = (int) (svp ? SvIV(*svp) : 0);
-
-#ifdef DB_VERSION_MAJOR
- info->re_source = name ;
- name = NULL ;
-#endif
- svp = hv_fetch(action, "bfname", 6, FALSE);
- if (svp && SvOK(*svp)) {
- char * ptr = SvPV(*svp,n_a) ;
-#ifdef DB_VERSION_MAJOR
- name = (char*) n_a ? ptr : NULL ;
-#else
- info->db_RE_bfname = (char*) (n_a ? ptr : NULL) ;
-#endif
- }
- else
-#ifdef DB_VERSION_MAJOR
- name = NULL ;
-#else
- info->db_RE_bfname = NULL ;
-#endif
-
- svp = hv_fetch(action, "bval", 4, FALSE);
-#ifdef DB_VERSION_MAJOR
- if (svp && SvOK(*svp))
- {
- int value ;
- if (SvPOK(*svp))
- value = (int)*SvPV(*svp, n_a) ;
- else
- value = SvIV(*svp) ;
-
- if (info->flags & DB_FIXEDLEN) {
- info->re_pad = value ;
- info->flags |= DB_PAD ;
- }
- else {
- info->re_delim = value ;
- info->flags |= DB_DELIMITER ;
- }
-
- }
-#else
- if (svp && SvOK(*svp))
- {
- if (SvPOK(*svp))
- info->db_RE_bval = (u_char)*SvPV(*svp, n_a) ;
- else
- info->db_RE_bval = (u_char)(unsigned long) SvIV(*svp) ;
- DB_flags(info->flags, DB_DELIMITER) ;
-
- }
- else
- {
- if (info->db_RE_flags & R_FIXEDLEN)
- info->db_RE_bval = (u_char) ' ' ;
- else
- info->db_RE_bval = (u_char) '\n' ;
- DB_flags(info->flags, DB_DELIMITER) ;
- }
-#endif
-
-#ifdef DB_RENUMBER
- info->flags |= DB_RENUMBER ;
-#endif
-
- PrintRecno(info) ;
- }
- else
- croak("type is not of type DB_File::HASHINFO, DB_File::BTREEINFO or DB_File::RECNOINFO");
- }
-
-
- /* OS2 Specific Code */
-#ifdef OS2
-#ifdef __EMX__
- flags |= O_BINARY;
-#endif /* __EMX__ */
-#endif /* OS2 */
-
-#ifdef DB_VERSION_MAJOR
-
- {
- int Flags = 0 ;
- int status ;
-
- /* Map 1.x flags to 2.x flags */
- if ((flags & O_CREAT) == O_CREAT)
- Flags |= DB_CREATE ;
-
-#if O_RDONLY == 0
- if (flags == O_RDONLY)
-#else
- if ((flags & O_RDONLY) == O_RDONLY && (flags & O_RDWR) != O_RDWR)
-#endif
- Flags |= DB_RDONLY ;
-
-#ifdef O_TRUNC
- if ((flags & O_TRUNC) == O_TRUNC)
- Flags |= DB_TRUNCATE ;
-#endif
-
- status = db_open(name, RETVAL->type, Flags, mode, NULL, openinfo, &RETVAL->dbp) ;
- if (status == 0)
-#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 6
- status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor) ;
-#else
- status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor,
- 0) ;
-#endif
-
- if (status)
- RETVAL->dbp = NULL ;
-
- }
-#else
-
-#if defined(DB_LIBRARY_COMPATIBILITY_API) && DB_VERSION_MAJOR > 2
- RETVAL->dbp = __db185_open(name, flags, mode, RETVAL->type, openinfo) ;
-#else
- RETVAL->dbp = dbopen(name, flags, mode, RETVAL->type, openinfo) ;
-#endif /* DB_LIBRARY_COMPATIBILITY_API */
-
-#endif
-
- return (RETVAL) ;
-
-#else /* Berkeley DB Version > 2 */
-
- SV ** svp;
- HV * action ;
- DB_File RETVAL = (DB_File)safemalloc(sizeof(DB_File_type)) ;
- DB * dbp ;
- STRLEN n_a;
- int status ;
-
-/* printf("In ParseOpenInfo name=[%s] flags=[%d] mode = [%d]\n", name, flags, mode) ; */
- Zero(RETVAL, 1, DB_File_type) ;
-
- /* Default to HASH */
-#ifdef DBM_FILTERING
- RETVAL->filtering = 0 ;
- RETVAL->filter_fetch_key = RETVAL->filter_store_key =
- RETVAL->filter_fetch_value = RETVAL->filter_store_value =
-#endif /* DBM_FILTERING */
- RETVAL->hash = RETVAL->compare = RETVAL->prefix = NULL ;
- RETVAL->type = DB_HASH ;
-
- /* DGH - Next line added to avoid SEGV on existing hash DB */
- CurrentDB = RETVAL;
-
- /* fd for 1.86 hash in memory files doesn't return -1 like 1.85 */
- RETVAL->in_memory = (name == NULL) ;
-
- status = db_create(&RETVAL->dbp, NULL,0) ;
- /* printf("db_create returned %d %s\n", status, db_strerror(status)) ; */
- if (status) {
- RETVAL->dbp = NULL ;
- return (RETVAL) ;
- }
- dbp = RETVAL->dbp ;
-
- if (sv)
- {
- if (! SvROK(sv) )
- croak ("type parameter is not a reference") ;
-
- svp = hv_fetch( (HV*)SvRV(sv), "GOT", 3, FALSE) ;
- if (svp && SvOK(*svp))
- action = (HV*) SvRV(*svp) ;
- else
- croak("internal error") ;
-
- if (sv_isa(sv, "DB_File::HASHINFO"))
- {
-
- if (!isHASH)
- croak("DB_File can only tie an associative array to a DB_HASH database") ;
-
- RETVAL->type = DB_HASH ;
-
- svp = hv_fetch(action, "hash", 4, FALSE);
-
- if (svp && SvOK(*svp))
- {
- (void)dbp->set_h_hash(dbp, hash_cb) ;
- RETVAL->hash = newSVsv(*svp) ;
- }
-
- svp = hv_fetch(action, "ffactor", 7, FALSE);
- if (svp)
- (void)dbp->set_h_ffactor(dbp, SvIV(*svp)) ;
-
- svp = hv_fetch(action, "nelem", 5, FALSE);
- if (svp)
- (void)dbp->set_h_nelem(dbp, SvIV(*svp)) ;
-
- svp = hv_fetch(action, "bsize", 5, FALSE);
- if (svp)
- (void)dbp->set_pagesize(dbp, SvIV(*svp));
-
- svp = hv_fetch(action, "cachesize", 9, FALSE);
- if (svp)
- (void)dbp->set_cachesize(dbp, 0, SvIV(*svp), 0) ;
-
- svp = hv_fetch(action, "lorder", 6, FALSE);
- if (svp)
- (void)dbp->set_lorder(dbp, SvIV(*svp)) ;
-
- PrintHash(info) ;
- }
- else if (sv_isa(sv, "DB_File::BTREEINFO"))
- {
- if (!isHASH)
- croak("DB_File can only tie an associative array to a DB_BTREE database");
-
- RETVAL->type = DB_BTREE ;
-
- svp = hv_fetch(action, "compare", 7, FALSE);
- if (svp && SvOK(*svp))
- {
- (void)dbp->set_bt_compare(dbp, btree_compare) ;
- RETVAL->compare = newSVsv(*svp) ;
- }
-
- svp = hv_fetch(action, "prefix", 6, FALSE);
- if (svp && SvOK(*svp))
- {
- (void)dbp->set_bt_prefix(dbp, btree_prefix) ;
- RETVAL->prefix = newSVsv(*svp) ;
- }
-
- svp = hv_fetch(action, "flags", 5, FALSE);
- if (svp)
- (void)dbp->set_flags(dbp, SvIV(*svp)) ;
-
- svp = hv_fetch(action, "cachesize", 9, FALSE);
- if (svp)
- (void)dbp->set_cachesize(dbp, 0, SvIV(*svp), 0) ;
-
- svp = hv_fetch(action, "psize", 5, FALSE);
- if (svp)
- (void)dbp->set_pagesize(dbp, SvIV(*svp)) ;
-
- svp = hv_fetch(action, "lorder", 6, FALSE);
- if (svp)
- (void)dbp->set_lorder(dbp, SvIV(*svp)) ;
-
- PrintBtree(info) ;
-
- }
- else if (sv_isa(sv, "DB_File::RECNOINFO"))
- {
- int fixed = FALSE ;
-
- if (isHASH)
- croak("DB_File can only tie an array to a DB_RECNO database");
-
- RETVAL->type = DB_RECNO ;
-
- svp = hv_fetch(action, "flags", 5, FALSE);
- if (svp) {
- int flags = SvIV(*svp) ;
- /* remove FIXDLEN, if present */
- if (flags & DB_FIXEDLEN) {
- fixed = TRUE ;
- flags &= ~DB_FIXEDLEN ;
- }
- }
-
- svp = hv_fetch(action, "cachesize", 9, FALSE);
- if (svp) {
- status = dbp->set_cachesize(dbp, 0, SvIV(*svp), 0) ;
- }
-
- svp = hv_fetch(action, "psize", 5, FALSE);
- if (svp) {
- status = dbp->set_pagesize(dbp, SvIV(*svp)) ;
- }
-
- svp = hv_fetch(action, "lorder", 6, FALSE);
- if (svp) {
- status = dbp->set_lorder(dbp, SvIV(*svp)) ;
- }
-
- svp = hv_fetch(action, "bval", 4, FALSE);
- if (svp && SvOK(*svp))
- {
- int value ;
- if (SvPOK(*svp))
- value = (int)*SvPV(*svp, n_a) ;
- else
- value = SvIV(*svp) ;
-
- if (fixed) {
- status = dbp->set_re_pad(dbp, value) ;
- }
- else {
- status = dbp->set_re_delim(dbp, value) ;
- }
-
- }
-
- if (fixed) {
- svp = hv_fetch(action, "reclen", 6, FALSE);
- if (svp) {
- u_int32_t len = (u_int32_t)SvIV(*svp) ;
- status = dbp->set_re_len(dbp, len) ;
- }
- }
-
- if (name != NULL) {
- status = dbp->set_re_source(dbp, name) ;
- name = NULL ;
- }
-
- svp = hv_fetch(action, "bfname", 6, FALSE);
- if (svp && SvOK(*svp)) {
- char * ptr = SvPV(*svp,n_a) ;
- name = (char*) n_a ? ptr : NULL ;
- }
- else
- name = NULL ;
-
-
- status = dbp->set_flags(dbp, DB_RENUMBER) ;
-
- if (flags){
- (void)dbp->set_flags(dbp, flags) ;
- }
- PrintRecno(info) ;
- }
- else
- croak("type is not of type DB_File::HASHINFO, DB_File::BTREEINFO or DB_File::RECNOINFO");
- }
-
- {
- int Flags = 0 ;
- int status ;
-
- /* Map 1.x flags to 3.x flags */
- if ((flags & O_CREAT) == O_CREAT)
- Flags |= DB_CREATE ;
-
-#if O_RDONLY == 0
- if (flags == O_RDONLY)
-#else
- if ((flags & O_RDONLY) == O_RDONLY && (flags & O_RDWR) != O_RDWR)
-#endif
- Flags |= DB_RDONLY ;
-
-#ifdef O_TRUNC
- if ((flags & O_TRUNC) == O_TRUNC)
- Flags |= DB_TRUNCATE ;
-#endif
-
- status = (RETVAL->dbp->open)(RETVAL->dbp, name, NULL, RETVAL->type,
- Flags, mode) ;
- /* printf("open returned %d %s\n", status, db_strerror(status)) ; */
-
- if (status == 0)
- status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor,
- 0) ;
- /* printf("cursor returned %d %s\n", status, db_strerror(status)) ; */
-
- if (status)
- RETVAL->dbp = NULL ;
-
- }
-
- return (RETVAL) ;
-
-#endif /* Berkeley DB Version > 2 */
-
-} /* ParseOpenInfo */
-
-
-static double
-#ifdef CAN_PROTOTYPE
-constant(char *name, int arg)
-#else
-constant(name, arg)
-char *name;
-int arg;
-#endif
-{
- errno = 0;
- switch (*name) {
- case 'A':
- break;
- case 'B':
- if (strEQ(name, "BTREEMAGIC"))
-#ifdef BTREEMAGIC
- return BTREEMAGIC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "BTREEVERSION"))
-#ifdef BTREEVERSION
- return BTREEVERSION;
-#else
- goto not_there;
-#endif
- break;
- case 'C':
- break;
- case 'D':
- if (strEQ(name, "DB_LOCK"))
-#ifdef DB_LOCK
- return DB_LOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DB_SHMEM"))
-#ifdef DB_SHMEM
- return DB_SHMEM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DB_TXN"))
-#ifdef DB_TXN
- return (U32)DB_TXN;
-#else
- goto not_there;
-#endif
- break;
- case 'E':
- break;
- case 'F':
- break;
- case 'G':
- break;
- case 'H':
- if (strEQ(name, "HASHMAGIC"))
-#ifdef HASHMAGIC
- return HASHMAGIC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "HASHVERSION"))
-#ifdef HASHVERSION
- return HASHVERSION;
-#else
- goto not_there;
-#endif
- break;
- case 'I':
- break;
- case 'J':
- break;
- case 'K':
- break;
- case 'L':
- break;
- case 'M':
- if (strEQ(name, "MAX_PAGE_NUMBER"))
-#ifdef MAX_PAGE_NUMBER
- return (U32)MAX_PAGE_NUMBER;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MAX_PAGE_OFFSET"))
-#ifdef MAX_PAGE_OFFSET
- return MAX_PAGE_OFFSET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MAX_REC_NUMBER"))
-#ifdef MAX_REC_NUMBER
- return (U32)MAX_REC_NUMBER;
-#else
- goto not_there;
-#endif
- break;
- case 'N':
- break;
- case 'O':
- break;
- case 'P':
- break;
- case 'Q':
- break;
- case 'R':
- if (strEQ(name, "RET_ERROR"))
-#ifdef RET_ERROR
- return RET_ERROR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "RET_SPECIAL"))
-#ifdef RET_SPECIAL
- return RET_SPECIAL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "RET_SUCCESS"))
-#ifdef RET_SUCCESS
- return RET_SUCCESS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_CURSOR"))
-#ifdef R_CURSOR
- return R_CURSOR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_DUP"))
-#ifdef R_DUP
- return R_DUP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_FIRST"))
-#ifdef R_FIRST
- return R_FIRST;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_FIXEDLEN"))
-#ifdef R_FIXEDLEN
- return R_FIXEDLEN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_IAFTER"))
-#ifdef R_IAFTER
- return R_IAFTER;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_IBEFORE"))
-#ifdef R_IBEFORE
- return R_IBEFORE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_LAST"))
-#ifdef R_LAST
- return R_LAST;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_NEXT"))
-#ifdef R_NEXT
- return R_NEXT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_NOKEY"))
-#ifdef R_NOKEY
- return R_NOKEY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_NOOVERWRITE"))
-#ifdef R_NOOVERWRITE
- return R_NOOVERWRITE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_PREV"))
-#ifdef R_PREV
- return R_PREV;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_RECNOSYNC"))
-#ifdef R_RECNOSYNC
- return R_RECNOSYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_SETCURSOR"))
-#ifdef R_SETCURSOR
- return R_SETCURSOR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_SNAPSHOT"))
-#ifdef R_SNAPSHOT
- return R_SNAPSHOT;
-#else
- goto not_there;
-#endif
- break;
- case 'S':
- break;
- case 'T':
- break;
- case 'U':
- break;
- case 'V':
- break;
- case 'W':
- break;
- case 'X':
- break;
- case 'Y':
- break;
- case 'Z':
- break;
- case '_':
- break;
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-MODULE = DB_File PACKAGE = DB_File PREFIX = db_
-
-BOOT:
- {
- __getBerkeleyDBInfo() ;
-
- DBT_clear(empty) ;
- empty.data = &zero ;
- empty.size = sizeof(recno_t) ;
- }
-
-double
-constant(name,arg)
- char * name
- int arg
-
-
-DB_File
-db_DoTie_(isHASH, dbtype, name=undef, flags=O_CREAT|O_RDWR, mode=0666, type=DB_HASH)
- int isHASH
- char * dbtype
- int flags
- int mode
- CODE:
- {
- char * name = (char *) NULL ;
- SV * sv = (SV *) NULL ;
- STRLEN n_a;
-
- if (items >= 3 && SvOK(ST(2)))
- name = (char*) SvPV(ST(2), n_a) ;
-
- if (items == 6)
- sv = ST(5) ;
-
- RETVAL = ParseOpenInfo(aTHX_ isHASH, name, flags, mode, sv) ;
- if (RETVAL->dbp == NULL)
- RETVAL = NULL ;
- }
- OUTPUT:
- RETVAL
-
-int
-db_DESTROY(db)
- DB_File db
- INIT:
- CurrentDB = db ;
- CLEANUP:
- if (db->hash)
- SvREFCNT_dec(db->hash) ;
- if (db->compare)
- SvREFCNT_dec(db->compare) ;
- if (db->prefix)
- SvREFCNT_dec(db->prefix) ;
-#ifdef DBM_FILTERING
- if (db->filter_fetch_key)
- SvREFCNT_dec(db->filter_fetch_key) ;
- if (db->filter_store_key)
- SvREFCNT_dec(db->filter_store_key) ;
- if (db->filter_fetch_value)
- SvREFCNT_dec(db->filter_fetch_value) ;
- if (db->filter_store_value)
- SvREFCNT_dec(db->filter_store_value) ;
-#endif /* DBM_FILTERING */
- safefree(db) ;
-#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
-#endif
-
-
-int
-db_DELETE(db, key, flags=0)
- DB_File db
- DBTKEY key
- u_int flags
- INIT:
- CurrentDB = db ;
-
-
-int
-db_EXISTS(db, key)
- DB_File db
- DBTKEY key
- CODE:
- {
- DBT value ;
-
- DBT_clear(value) ;
- CurrentDB = db ;
- RETVAL = (((db->dbp)->get)(db->dbp, TXN &key, &value, 0) == 0) ;
- }
- OUTPUT:
- RETVAL
-
-int
-db_FETCH(db, key, flags=0)
- DB_File db
- DBTKEY key
- u_int flags
- CODE:
- {
- DBT value ;
-
- DBT_clear(value) ;
- CurrentDB = db ;
- /* RETVAL = ((db->dbp)->get)(db->dbp, TXN &key, &value, flags) ; */
- RETVAL = db_get(db, key, value, flags) ;
- ST(0) = sv_newmortal();
- OutputValue(ST(0), value)
- }
-
-int
-db_STORE(db, key, value, flags=0)
- DB_File db
- DBTKEY key
- DBT value
- u_int flags
- INIT:
- CurrentDB = db ;
-
-
-int
-db_FIRSTKEY(db)
- DB_File db
- CODE:
- {
- DBTKEY key ;
- DBT value ;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
- RETVAL = do_SEQ(db, key, value, R_FIRST) ;
- ST(0) = sv_newmortal();
- OutputKey(ST(0), key) ;
- }
-
-int
-db_NEXTKEY(db, key)
- DB_File db
- DBTKEY key
- CODE:
- {
- DBT value ;
-
- DBT_clear(value) ;
- CurrentDB = db ;
- RETVAL = do_SEQ(db, key, value, R_NEXT) ;
- ST(0) = sv_newmortal();
- OutputKey(ST(0), key) ;
- }
-
-#
-# These would be nice for RECNO
-#
-
-int
-unshift(db, ...)
- DB_File db
- ALIAS: UNSHIFT = 1
- CODE:
- {
- DBTKEY key ;
- DBT value ;
- int i ;
- int One ;
- DB * Db = db->dbp ;
- STRLEN n_a;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
-#ifdef DB_VERSION_MAJOR
- /* get the first value */
- RETVAL = do_SEQ(db, key, value, DB_FIRST) ;
- RETVAL = 0 ;
-#else
- RETVAL = -1 ;
-#endif
- for (i = items-1 ; i > 0 ; --i)
- {
- value.data = SvPV(ST(i), n_a) ;
- value.size = n_a ;
- One = 1 ;
- key.data = &One ;
- key.size = sizeof(int) ;
-#ifdef DB_VERSION_MAJOR
- RETVAL = (db->cursor->c_put)(db->cursor, &key, &value, DB_BEFORE) ;
-#else
- RETVAL = (Db->put)(Db, &key, &value, R_IBEFORE) ;
-#endif
- if (RETVAL != 0)
- break;
- }
- }
- OUTPUT:
- RETVAL
-
-I32
-pop(db)
- DB_File db
- ALIAS: POP = 1
- CODE:
- {
- DBTKEY key ;
- DBT value ;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
-
- /* First get the final value */
- RETVAL = do_SEQ(db, key, value, R_LAST) ;
- ST(0) = sv_newmortal();
- /* Now delete it */
- if (RETVAL == 0)
- {
- /* the call to del will trash value, so take a copy now */
- OutputValue(ST(0), value) ;
- RETVAL = db_del(db, key, R_CURSOR) ;
- if (RETVAL != 0)
- sv_setsv(ST(0), &PL_sv_undef);
- }
- }
-
-I32
-shift(db)
- DB_File db
- ALIAS: SHIFT = 1
- CODE:
- {
- DBT value ;
- DBTKEY key ;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
- /* get the first value */
- RETVAL = do_SEQ(db, key, value, R_FIRST) ;
- ST(0) = sv_newmortal();
- /* Now delete it */
- if (RETVAL == 0)
- {
- /* the call to del will trash value, so take a copy now */
- OutputValue(ST(0), value) ;
- RETVAL = db_del(db, key, R_CURSOR) ;
- if (RETVAL != 0)
- sv_setsv (ST(0), &PL_sv_undef) ;
- }
- }
-
-
-I32
-push(db, ...)
- DB_File db
- ALIAS: PUSH = 1
- CODE:
- {
- DBTKEY key ;
- DBT value ;
- DB * Db = db->dbp ;
- int i ;
- STRLEN n_a;
- int keyval ;
-
- DBT_flags(key) ;
- DBT_flags(value) ;
- CurrentDB = db ;
- /* Set the Cursor to the Last element */
- RETVAL = do_SEQ(db, key, value, R_LAST) ;
-#ifndef DB_VERSION_MAJOR
- if (RETVAL >= 0)
-#endif
- {
- if (RETVAL == 0)
- keyval = *(int*)key.data ;
- else
- keyval = 0 ;
- for (i = 1 ; i < items ; ++i)
- {
- value.data = SvPV(ST(i), n_a) ;
- value.size = n_a ;
- ++ keyval ;
- key.data = &keyval ;
- key.size = sizeof(int) ;
- RETVAL = (Db->put)(Db, TXN &key, &value, 0) ;
- if (RETVAL != 0)
- break;
- }
- }
- }
- OUTPUT:
- RETVAL
-
-I32
-length(db)
- DB_File db
- ALIAS: FETCHSIZE = 1
- CODE:
- CurrentDB = db ;
- RETVAL = GetArrayLength(aTHX_ db) ;
- OUTPUT:
- RETVAL
-
-
-#
-# Now provide an interface to the rest of the DB functionality
-#
-
-int
-db_del(db, key, flags=0)
- DB_File db
- DBTKEY key
- u_int flags
- CODE:
- CurrentDB = db ;
- RETVAL = db_del(db, key, flags) ;
-#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
- else if (RETVAL == DB_NOTFOUND)
- RETVAL = 1 ;
-#endif
- OUTPUT:
- RETVAL
-
-
-int
-db_get(db, key, value, flags=0)
- DB_File db
- DBTKEY key
- DBT value = NO_INIT
- u_int flags
- CODE:
- CurrentDB = db ;
- DBT_clear(value) ;
- RETVAL = db_get(db, key, value, flags) ;
-#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
- else if (RETVAL == DB_NOTFOUND)
- RETVAL = 1 ;
-#endif
- OUTPUT:
- RETVAL
- value
-
-int
-db_put(db, key, value, flags=0)
- DB_File db
- DBTKEY key
- DBT value
- u_int flags
- CODE:
- CurrentDB = db ;
- RETVAL = db_put(db, key, value, flags) ;
-#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
- else if (RETVAL == DB_KEYEXIST)
- RETVAL = 1 ;
-#endif
- OUTPUT:
- RETVAL
- key if (flagSet(flags, R_IAFTER) || flagSet(flags, R_IBEFORE)) OutputKey(ST(1), key);
-
-int
-db_fd(db)
- DB_File db
- int status = 0 ;
- CODE:
- CurrentDB = db ;
-#ifdef DB_VERSION_MAJOR
- RETVAL = -1 ;
- status = (db->in_memory
- ? -1
- : ((db->dbp)->fd)(db->dbp, &RETVAL) ) ;
- if (status != 0)
- RETVAL = -1 ;
-#else
- RETVAL = (db->in_memory
- ? -1
- : ((db->dbp)->fd)(db->dbp) ) ;
-#endif
- OUTPUT:
- RETVAL
-
-int
-db_sync(db, flags=0)
- DB_File db
- u_int flags
- CODE:
- CurrentDB = db ;
- RETVAL = db_sync(db, flags) ;
-#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
-#endif
- OUTPUT:
- RETVAL
-
-
-int
-db_seq(db, key, value, flags)
- DB_File db
- DBTKEY key
- DBT value = NO_INIT
- u_int flags
- CODE:
- CurrentDB = db ;
- DBT_clear(value) ;
- RETVAL = db_seq(db, key, value, flags);
-#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
- else if (RETVAL == DB_NOTFOUND)
- RETVAL = 1 ;
-#endif
- OUTPUT:
- RETVAL
- key
- value
-
-#ifdef DBM_FILTERING
-
-#define setFilter(type) \
- { \
- if (db->type) \
- RETVAL = sv_mortalcopy(db->type) ; \
- ST(0) = RETVAL ; \
- if (db->type && (code == &PL_sv_undef)) { \
- SvREFCNT_dec(db->type) ; \
- db->type = NULL ; \
- } \
- else if (code) { \
- if (db->type) \
- sv_setsv(db->type, code) ; \
- else \
- db->type = newSVsv(code) ; \
- } \
- }
-
-
-SV *
-filter_fetch_key(db, code)
- DB_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_key) ;
-
-SV *
-filter_store_key(db, code)
- DB_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_key) ;
-
-SV *
-filter_fetch_value(db, code)
- DB_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_value) ;
-
-SV *
-filter_store_value(db, code)
- DB_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_value) ;
-
-#endif /* DBM_FILTERING */
diff --git a/contrib/perl5/ext/DB_File/DB_File_BS b/contrib/perl5/ext/DB_File/DB_File_BS
deleted file mode 100644
index 9282c49..0000000
--- a/contrib/perl5/ext/DB_File/DB_File_BS
+++ /dev/null
@@ -1,6 +0,0 @@
-# NeXT needs /usr/lib/libposix.a to load along with DB_File.so
-if ( $dlsrc eq "dl_next.xs" ) {
- @DynaLoader::dl_resolve_using = ( '/usr/lib/libposix.a' );
-}
-
-1;
diff --git a/contrib/perl5/ext/DB_File/Makefile.PL b/contrib/perl5/ext/DB_File/Makefile.PL
deleted file mode 100644
index 0414160..0000000
--- a/contrib/perl5/ext/DB_File/Makefile.PL
+++ /dev/null
@@ -1,29 +0,0 @@
-use ExtUtils::MakeMaker 5.16 ;
-use Config ;
-
-# OS2 is a special case, so check for it now.
-my $OS2 = "-DOS2" if $Config{'osname'} eq 'os2' ;
-
-my $LIB = "-ldb" ;
-# so is win32
-$LIB = "-llibdb" if $^O eq 'MSWin32' ;
-
-WriteMakefile(
- NAME => 'DB_File',
- LIBS => ["-L/usr/local/lib $LIB"],
- MAN3PODS => {}, # Pods will be built by installman.
- #INC => '-I/usr/local/include',
- VERSION_FROM => 'DB_File.pm',
- OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',
- XSPROTOARG => '-noprototypes',
- DEFINE => $OS2 || "",
- INC => ($^O eq "MacOS" ? "-i ::::db:include" : "")
- );
-
-sub MY::postamble {
- '
-version$(OBJ_EXT): version.c
-
-' ;
-}
-
diff --git a/contrib/perl5/ext/DB_File/dbinfo b/contrib/perl5/ext/DB_File/dbinfo
deleted file mode 100644
index 5a4df15..0000000
--- a/contrib/perl5/ext/DB_File/dbinfo
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/local/bin/perl
-
-# Name: dbinfo -- identify berkeley DB version used to create
-# a database file
-#
-# Author: Paul Marquess <Paul.Marquess@btinternet.com>
-# Version: 1.03
-# Date 17th September 2000
-#
-# Copyright (c) 1998-2000 Paul Marquess. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-# Todo: Print more stats on a db file, e.g. no of records
-# add log/txn/lock files
-
-use strict ;
-
-my %Data =
- (
- 0x053162 => {
- Type => "Btree",
- Versions =>
- {
- 1 => "Unknown (older than 1.71)",
- 2 => "Unknown (older than 1.71)",
- 3 => "1.71 -> 1.85, 1.86",
- 4 => "Unknown",
- 5 => "2.0.0 -> 2.3.0",
- 6 => "2.3.1 -> 2.7.7",
- 7 => "3.0.x",
- 8 => "3.1.x or greater",
- }
- },
- 0x061561 => {
- Type => "Hash",
- Versions =>
- {
- 1 => "Unknown (older than 1.71)",
- 2 => "1.71 -> 1.85",
- 3 => "1.86",
- 4 => "2.0.0 -> 2.1.0",
- 5 => "2.2.6 -> 2.7.7",
- 6 => "3.0.x",
- 7 => "3.1.x or greater",
- }
- },
- 0x042253 => {
- Type => "Queue",
- Versions =>
- {
- 1 => "3.0.x",
- 2 => "3.1.x",
- 3 => "3.2.x or greater",
- }
- },
- ) ;
-
-die "Usage: dbinfo file\n" unless @ARGV == 1 ;
-
-print "testing file $ARGV[0]...\n\n" ;
-open (F, "<$ARGV[0]") or die "Cannot open file $ARGV[0]: $!\n" ;
-
-my $buff ;
-read F, $buff, 20 ;
-
-my (@info) = unpack("NNNNN", $buff) ;
-my (@info1) = unpack("VVVVV", $buff) ;
-my ($magic, $version, $endian) ;
-
-if ($Data{$info[0]}) # first try DB 1.x format
-{
- $magic = $info[0] ;
- $version = $info[1] ;
- $endian = "Unknown" ;
-}
-elsif ($Data{$info[3]}) # next DB 2.x big endian
-{
- $magic = $info[3] ;
- $version = $info[4] ;
- $endian = "Big Endian" ;
-}
-elsif ($Data{$info1[3]}) # next DB 2.x little endian
-{
- $magic = $info1[3] ;
- $version = $info1[4] ;
- $endian = "Little Endian" ;
-}
-else
- { die "not a Berkeley DB database file.\n" }
-
-my $type = $Data{$magic} ;
-$magic = sprintf "%06X", $magic ;
-
-my $ver_string = "Unknown" ;
-$ver_string = $type->{Versions}{$version}
- if defined $type->{Versions}{$version} ;
-
-print <<EOM ;
-File Type: Berkeley DB $type->{Type} file.
-File Version ID: $version
-Built with Berkeley DB: $ver_string
-Byte Order: $endian
-Magic: $magic
-EOM
-
-close F ;
-
-exit ;
diff --git a/contrib/perl5/ext/DB_File/hints/dynixptx.pl b/contrib/perl5/ext/DB_File/hints/dynixptx.pl
deleted file mode 100644
index bb5ffa5..0000000
--- a/contrib/perl5/ext/DB_File/hints/dynixptx.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# Need to add an extra '-lc' to the end to work around a DYNIX/ptx bug
-
-$self->{LIBS} = ['-lm -lc'];
diff --git a/contrib/perl5/ext/DB_File/hints/sco.pl b/contrib/perl5/ext/DB_File/hints/sco.pl
deleted file mode 100644
index ff60440..0000000
--- a/contrib/perl5/ext/DB_File/hints/sco.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-# osr5 needs to explicitly link against libc to pull in some static symbols
-$self->{LIBS} = ['-ldb -lc'] if $Config{'osvers'} =~ '3\.2v5\.0\..' ;
diff --git a/contrib/perl5/ext/DB_File/typemap b/contrib/perl5/ext/DB_File/typemap
deleted file mode 100644
index 55439ee..0000000
--- a/contrib/perl5/ext/DB_File/typemap
+++ /dev/null
@@ -1,44 +0,0 @@
-# typemap for Perl 5 interface to Berkeley
-#
-# written by Paul Marquess <Paul.Marquess@btinternet.com>
-# last modified 10th December 2000
-# version 1.74
-#
-#################################### DB SECTION
-#
-#
-
-u_int T_U_INT
-DB_File T_PTROBJ
-DBT T_dbtdatum
-DBTKEY T_dbtkeydatum
-
-INPUT
-T_dbtkeydatum
- ckFilter($arg, filter_store_key, \"filter_store_key\");
- DBT_clear($var) ;
- if (db->type != DB_RECNO) {
- $var.data = SvPV($arg, PL_na);
- $var.size = (int)PL_na;
- }
- else {
- Value = GetRecnoKey(aTHX_ db, SvIV($arg)) ;
- $var.data = & Value;
- $var.size = (int)sizeof(recno_t);
- }
-T_dbtdatum
- ckFilter($arg, filter_store_value, \"filter_store_value\");
- DBT_clear($var) ;
- if (SvOK($arg)) {
- $var.data = SvPV($arg, PL_na);
- $var.size = (int)PL_na;
- }
-
-OUTPUT
-
-T_dbtkeydatum
- OutputKey($arg, $var)
-T_dbtdatum
- OutputValue($arg, $var)
-T_PTROBJ
- sv_setref_pv($arg, dbtype, (void*)$var);
diff --git a/contrib/perl5/ext/DB_File/version.c b/contrib/perl5/ext/DB_File/version.c
deleted file mode 100644
index 6e55b2e..0000000
--- a/contrib/perl5/ext/DB_File/version.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-
- version.c -- Perl 5 interface to Berkeley DB
-
- written by Paul Marquess <Paul.Marquess@btinternet.com>
- last modified 16th January 2000
- version 1.73
-
- All comments/suggestions/problems are welcome
-
- Copyright (c) 1995-2000 Paul Marquess. All rights reserved.
- This program is free software; you can redistribute it and/or
- modify it under the same terms as Perl itself.
-
- Changes:
- 1.71 - Support for Berkeley DB version 3.
- Support for Berkeley DB 2/3's backward compatability mode.
- 1.72 - No change.
- 1.73 - Added support for threading
- 1.74 - Added Perl core patch 7801.
-
-
-*/
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include <db.h>
-
-void
-#ifdef CAN_PROTOTYPE
-__getBerkeleyDBInfo(void)
-#else
-__getBerkeleyDBInfo()
-#endif
-{
-#ifdef dTHX
- dTHX;
-#endif
- SV * version_sv = perl_get_sv("DB_File::db_version", GV_ADD|GV_ADDMULTI) ;
- SV * ver_sv = perl_get_sv("DB_File::db_ver", GV_ADD|GV_ADDMULTI) ;
- SV * compat_sv = perl_get_sv("DB_File::db_185_compat", GV_ADD|GV_ADDMULTI) ;
-
-#ifdef DB_VERSION_MAJOR
- int Major, Minor, Patch ;
-
- (void)db_version(&Major, &Minor, &Patch) ;
-
- /* Check that the versions of db.h and libdb.a are the same */
- if (Major != DB_VERSION_MAJOR || Minor != DB_VERSION_MINOR
- || Patch != DB_VERSION_PATCH)
- croak("\nDB_File needs compatible versions of libdb & db.h\n\tyou have db.h version %d.%d.%d and libdb version %d.%d.%d\n",
- DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
- Major, Minor, Patch) ;
-
- /* check that libdb is recent enough -- we need 2.3.4 or greater */
- if (Major == 2 && (Minor < 3 || (Minor == 3 && Patch < 4)))
- croak("DB_File needs Berkeley DB 2.3.4 or greater, you have %d.%d.%d\n",
- Major, Minor, Patch) ;
-
- {
- char buffer[40] ;
- sprintf(buffer, "%d.%d", Major, Minor) ;
- sv_setpv(version_sv, buffer) ;
- sprintf(buffer, "%d.%03d%03d", Major, Minor, Patch) ;
- sv_setpv(ver_sv, buffer) ;
- }
-
-#else /* ! DB_VERSION_MAJOR */
- sv_setiv(version_sv, 1) ;
- sv_setiv(ver_sv, 1) ;
-#endif /* ! DB_VERSION_MAJOR */
-
-#ifdef COMPAT185
- sv_setiv(compat_sv, 1) ;
-#else /* ! COMPAT185 */
- sv_setiv(compat_sv, 0) ;
-#endif /* ! COMPAT185 */
-
-}
diff --git a/contrib/perl5/ext/Data/Dumper/Changes b/contrib/perl5/ext/Data/Dumper/Changes
deleted file mode 100644
index 161aba9..0000000
--- a/contrib/perl5/ext/Data/Dumper/Changes
+++ /dev/null
@@ -1,193 +0,0 @@
-=head1 NAME
-
-HISTORY - public release history for Data::Dumper
-
-=head1 DESCRIPTION
-
-=over 8
-
-=item 2.11 (unreleased)
-
-C<0> is now dumped as such, not as C<'0'>.
-
-qr// objects are now dumped correctly (provided a post-5.005_58)
-overload.pm exists).
-
-Implemented $Data::Dumper::Maxdepth, which was on the Todo list.
-Thanks to John Nolan <jpnolan@Op.Net>.
-
-=item 2.101 (30 Apr 1999)
-
-Minor release to sync with version in 5.005_03. Fixes dump of
-dummy coderefs.
-
-=item 2.10 (31 Oct 1998)
-
-Bugfixes for dumping related undef values, globs, and better double
-quoting: three patches suggested by Gisle Aas <gisle@aas.no>.
-
-Escaping of single quotes in the XS version could get tripped up
-by the presence of nulls in the string. Fix suggested by
-Slaven Rezic <eserte@cs.tu-berlin.de>.
-
-Rather large scale reworking of the logic in how seen values
-are stashed. Anonymous scalars that may be encountered while
-traversing the structure are properly tracked, in case they become
-used in data dumped in a later pass. There used to be a problem
-with the previous logic that prevented such structures from being
-dumped correctly.
-
-Various additions to the testsuite.
-
-=item 2.09 (9 July 1998)
-
-Implement $Data::Dumper::Bless, suggested by Mark Daku <daku@nortel.ca>.
-
-=item 2.081 (15 January 1998)
-
-Minor release to fix Makefile.PL not accepting MakeMaker args.
-
-=item 2.08 (7 December 1997)
-
-Glob dumps don't output superflous 'undef' anymore.
-
-Fixes from Gisle Aas <gisle@aas.no> to make Dumper() work with
-overloaded strings in recent perls, and his new testsuite.
-
-require 5.004.
-
-A separate flag to always quote hash keys (on by default).
-
-Recreating known CODE refs is now better supported.
-
-Changed flawed constant SCALAR bless workaround.
-
-=item 2.07 (7 December 1996)
-
-Dumpxs output is now exactly the same as Dump. It still doesn't
-honor C<Useqq> though.
-
-Regression tests test for identical output and C<eval>-ability.
-
-Bug in *GLOB{THING} output fixed.
-
-Other small enhancements.
-
-=item 2.06 (2 December 1996)
-
-Bugfix that was serious enough for new release--the bug cripples
-MLDBM. Problem was "Attempt to modify readonly value..." failures
-that stemmed for a misguided SvPV_force() instead of a SvPV().)
-
-=item 2.05 (2 December 1996)
-
-Fixed the type mismatch that was causing Dumpxs test to fail
-on 64-bit platforms.
-
-GLOB elements are dumped now when C<Purity> is set (using the
-*GLOB{THING} syntax).
-
-The C<Freezer> option can be set to a method name to call
-before probing objects for dumping. Some applications: objects with
-external data, can re-bless themselves into a transitional package;
-Objects the maintain ephemeral state (like open files) can put
-additional information in the object to facilitate persistence.
-
-The corresponding C<Toaster> option, if set, specifies
-the method call that will revive the frozen object.
-
-The C<Deepcopy> flag has been added to do just that.
-
-Dumper does more aggressive cataloging of SCALARs encountered
-within ARRAY/HASH structures. Thanks to Norman Gaywood
-<norm@godel.une.edu.au> for reporting the problem.
-
-Objects that C<overload> the '""' operator are now handled
-properly by the C<Dump> method.
-
-Significant additions to the testsuite.
-
-More documentation.
-
-=item 2.04beta (28 August 1996)
-
-Made dump of glob names respect C<Useqq> setting.
-
-[@$%] are now escaped now when in double quotes.
-
-=item 2.03beta (26 August 1996)
-
-Fixed Dumpxs. It was appending trailing nulls to globnames.
-(reported by Randal Schwartz <merlyn@teleport.com>).
-
-Calling the C<Indent()> method on a dumper object now correctly
-resets the internal separator (reported by Curt Tilmes
-<curt@ltpmail.gsfc.nasa.gov>).
-
-New C<Terse> option to suppress the 'C<VARI<n> = >' prefix
-introduced. If the option is set, they are output only when
-absolutely essential.
-
-The C<Useqq> flag is supported (but not by the XSUB version
-yet).
-
-Embedded nulls in keys are now handled properly by Dumpxs.
-
-Dumper.xs now use various integer types in perl.h (should
-make it compile without noises on 64 bit platforms, although
-I haven't been able to test this).
-
-All the dump methods now return a list of strings in a list
-context.
-
-
-=item 2.02beta (13 April 1996)
-
-Non portable sprintf usage in XS code fixed (thanks to
-Ulrich Pfeifer <pfeifer@charly.informatik.uni-dortmund.de>).
-
-
-=item 2.01beta (10 April 1996)
-
-Minor bugfix (single digit numbers were always getting quoted).
-
-
-=item 2.00beta (9 April 1996)
-
-C<Dumpxs> is now the exact XSUB equivalent of C<Dump>. The XS version
-is 4-5 times faster.
-
-C<require 5.002>.
-
-MLDBM example removed (as its own module, it has a separate CPAN
-reality now).
-
-Fixed bugs in handling keys with wierd characters. Perl can be
-tripped up in its implicit quoting of the word before '=>'. The
-fix: C<Data::Dumper::Purity>, when set, always triggers quotes
-around hash keys.
-
-Andreas Koenig <k@anna.in-berlin.de> pointed out that handling octals
-is busted. His patch added.
-
-Dead code removed, other minor documentation fixes.
-
-
-=item 1.23 (3 Dec 1995)
-
-MLDBM example added.
-
-Several folks pointed out that quoting of ticks and backslashes
-in strings is missing. Added.
-
-Ian Phillips <ian@pipex.net> pointed out that numerics may lose
-precision without quotes. Fixed.
-
-
-=item 1.21 (20 Nov 1995)
-
-Last stable version I can remember.
-
-=back
-
-=cut
diff --git a/contrib/perl5/ext/Data/Dumper/Dumper.pm b/contrib/perl5/ext/Data/Dumper/Dumper.pm
deleted file mode 100644
index a8e59ab..0000000
--- a/contrib/perl5/ext/Data/Dumper/Dumper.pm
+++ /dev/null
@@ -1,1048 +0,0 @@
-#
-# Data/Dumper.pm
-#
-# convert perl data structures into perl syntax suitable for both printing
-# and eval
-#
-# Documentation at the __END__
-#
-
-package Data::Dumper;
-
-$VERSION = '2.102';
-
-#$| = 1;
-
-require 5.005_64;
-require Exporter;
-use XSLoader ();
-require overload;
-
-use Carp;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(Dumper);
-@EXPORT_OK = qw(DumperX);
-
-XSLoader::load 'Data::Dumper';
-
-# module vars and their defaults
-$Indent = 2 unless defined $Indent;
-$Purity = 0 unless defined $Purity;
-$Pad = "" unless defined $Pad;
-$Varname = "VAR" unless defined $Varname;
-$Useqq = 0 unless defined $Useqq;
-$Terse = 0 unless defined $Terse;
-$Freezer = "" unless defined $Freezer;
-$Toaster = "" unless defined $Toaster;
-$Deepcopy = 0 unless defined $Deepcopy;
-$Quotekeys = 1 unless defined $Quotekeys;
-$Bless = "bless" unless defined $Bless;
-#$Expdepth = 0 unless defined $Expdepth;
-$Maxdepth = 0 unless defined $Maxdepth;
-
-#
-# expects an arrayref of values to be dumped.
-# can optionally pass an arrayref of names for the values.
-# names must have leading $ sign stripped. begin the name with *
-# to cause output of arrays and hashes rather than refs.
-#
-sub new {
- my($c, $v, $n) = @_;
-
- croak "Usage: PACKAGE->new(ARRAYREF, [ARRAYREF])"
- unless (defined($v) && (ref($v) eq 'ARRAY'));
- $n = [] unless (defined($n) && (ref($v) eq 'ARRAY'));
-
- my($s) = {
- level => 0, # current recursive depth
- indent => $Indent, # various styles of indenting
- pad => $Pad, # all lines prefixed by this string
- xpad => "", # padding-per-level
- apad => "", # added padding for hash keys n such
- sep => "", # list separator
- seen => {}, # local (nested) refs (id => [name, val])
- todump => $v, # values to dump []
- names => $n, # optional names for values []
- varname => $Varname, # prefix to use for tagging nameless ones
- purity => $Purity, # degree to which output is evalable
- useqq => $Useqq, # use "" for strings (backslashitis ensues)
- terse => $Terse, # avoid name output (where feasible)
- freezer => $Freezer, # name of Freezer method for objects
- toaster => $Toaster, # name of method to revive objects
- deepcopy => $Deepcopy, # dont cross-ref, except to stop recursion
- quotekeys => $Quotekeys, # quote hash keys
- 'bless' => $Bless, # keyword to use for "bless"
-# expdepth => $Expdepth, # cutoff depth for explicit dumping
- maxdepth => $Maxdepth, # depth beyond which we give up
- };
-
- if ($Indent > 0) {
- $s->{xpad} = " ";
- $s->{sep} = "\n";
- }
- return bless($s, $c);
-}
-
-#
-# add-to or query the table of already seen references
-#
-sub Seen {
- my($s, $g) = @_;
- if (defined($g) && (ref($g) eq 'HASH')) {
- my($k, $v, $id);
- while (($k, $v) = each %$g) {
- if (defined $v and ref $v) {
- ($id) = (overload::StrVal($v) =~ /\((.*)\)$/);
- if ($k =~ /^[*](.*)$/) {
- $k = (ref $v eq 'ARRAY') ? ( "\\\@" . $1 ) :
- (ref $v eq 'HASH') ? ( "\\\%" . $1 ) :
- (ref $v eq 'CODE') ? ( "\\\&" . $1 ) :
- ( "\$" . $1 ) ;
- }
- elsif ($k !~ /^\$/) {
- $k = "\$" . $k;
- }
- $s->{seen}{$id} = [$k, $v];
- }
- else {
- carp "Only refs supported, ignoring non-ref item \$$k";
- }
- }
- return $s;
- }
- else {
- return map { @$_ } values %{$s->{seen}};
- }
-}
-
-#
-# set or query the values to be dumped
-#
-sub Values {
- my($s, $v) = @_;
- if (defined($v) && (ref($v) eq 'ARRAY')) {
- $s->{todump} = [@$v]; # make a copy
- return $s;
- }
- else {
- return @{$s->{todump}};
- }
-}
-
-#
-# set or query the names of the values to be dumped
-#
-sub Names {
- my($s, $n) = @_;
- if (defined($n) && (ref($n) eq 'ARRAY')) {
- $s->{names} = [@$n]; # make a copy
- return $s;
- }
- else {
- return @{$s->{names}};
- }
-}
-
-sub DESTROY {}
-
-sub Dump {
- return &Dumpxs
- unless $Data::Dumper::Useqq || (ref($_[0]) && $_[0]->{useqq});
- return &Dumpperl;
-}
-
-#
-# dump the refs in the current dumper object.
-# expects same args as new() if called via package name.
-#
-sub Dumpperl {
- my($s) = shift;
- my(@out, $val, $name);
- my($i) = 0;
- local(@post);
-
- $s = $s->new(@_) unless ref $s;
-
- for $val (@{$s->{todump}}) {
- my $out = "";
- @post = ();
- $name = $s->{names}[$i++];
- if (defined $name) {
- if ($name =~ /^[*](.*)$/) {
- if (defined $val) {
- $name = (ref $val eq 'ARRAY') ? ( "\@" . $1 ) :
- (ref $val eq 'HASH') ? ( "\%" . $1 ) :
- (ref $val eq 'CODE') ? ( "\*" . $1 ) :
- ( "\$" . $1 ) ;
- }
- else {
- $name = "\$" . $1;
- }
- }
- elsif ($name !~ /^\$/) {
- $name = "\$" . $name;
- }
- }
- else {
- $name = "\$" . $s->{varname} . $i;
- }
-
- my $valstr;
- {
- local($s->{apad}) = $s->{apad};
- $s->{apad} .= ' ' x (length($name) + 3) if $s->{indent} >= 2;
- $valstr = $s->_dump($val, $name);
- }
-
- $valstr = "$name = " . $valstr . ';' if @post or !$s->{terse};
- $out .= $s->{pad} . $valstr . $s->{sep};
- $out .= $s->{pad} . join(';' . $s->{sep} . $s->{pad}, @post)
- . ';' . $s->{sep} if @post;
-
- push @out, $out;
- }
- return wantarray ? @out : join('', @out);
-}
-
-#
-# twist, toil and turn;
-# and recurse, of course.
-#
-sub _dump {
- my($s, $val, $name) = @_;
- my($sname);
- my($out, $realpack, $realtype, $type, $ipad, $id, $blesspad);
-
- $type = ref $val;
- $out = "";
-
- if ($type) {
-
- # prep it, if it looks like an object
- if (my $freezer = $s->{freezer}) {
- $val->$freezer() if UNIVERSAL::can($val, $freezer);
- }
-
- ($realpack, $realtype, $id) =
- (overload::StrVal($val) =~ /^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$/);
-
- # if it has a name, we need to either look it up, or keep a tab
- # on it so we know when we hit it later
- if (defined($name) and length($name)) {
- # keep a tab on it so that we dont fall into recursive pit
- if (exists $s->{seen}{$id}) {
-# if ($s->{expdepth} < $s->{level}) {
- if ($s->{purity} and $s->{level} > 0) {
- $out = ($realtype eq 'HASH') ? '{}' :
- ($realtype eq 'ARRAY') ? '[]' :
- 'do{my $o}' ;
- push @post, $name . " = " . $s->{seen}{$id}[0];
- }
- else {
- $out = $s->{seen}{$id}[0];
- if ($name =~ /^([\@\%])/) {
- my $start = $1;
- if ($out =~ /^\\$start/) {
- $out = substr($out, 1);
- }
- else {
- $out = $start . '{' . $out . '}';
- }
- }
- }
- return $out;
-# }
- }
- else {
- # store our name
- $s->{seen}{$id} = [ (($name =~ /^[@%]/) ? ('\\' . $name ) :
- ($realtype eq 'CODE' and
- $name =~ /^[*](.*)$/) ? ('\\&' . $1 ) :
- $name ),
- $val ];
- }
- }
-
- if ($realpack and $realpack eq 'Regexp') {
- $out = "$val";
- $out =~ s,/,\\/,g;
- return "qr/$out/";
- }
-
- # If purity is not set and maxdepth is set, then check depth:
- # if we have reached maximum depth, return the string
- # representation of the thing we are currently examining
- # at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)').
- if (!$s->{purity}
- and $s->{maxdepth} > 0
- and $s->{level} >= $s->{maxdepth})
- {
- return qq['$val'];
- }
-
- # we have a blessed ref
- if ($realpack) {
- $out = $s->{'bless'} . '( ';
- $blesspad = $s->{apad};
- $s->{apad} .= ' ' if ($s->{indent} >= 2);
- }
-
- $s->{level}++;
- $ipad = $s->{xpad} x $s->{level};
-
- if ($realtype eq 'SCALAR' || $realtype eq 'REF') {
- if ($realpack) {
- $out .= 'do{\\(my $o = ' . $s->_dump($$val, "\${$name}") . ')}';
- }
- else {
- $out .= '\\' . $s->_dump($$val, "\${$name}");
- }
- }
- elsif ($realtype eq 'GLOB') {
- $out .= '\\' . $s->_dump($$val, "*{$name}");
- }
- elsif ($realtype eq 'ARRAY') {
- my($v, $pad, $mname);
- my($i) = 0;
- $out .= ($name =~ /^\@/) ? '(' : '[';
- $pad = $s->{sep} . $s->{pad} . $s->{apad};
- ($name =~ /^\@(.*)$/) ? ($mname = "\$" . $1) :
- # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
- ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
- ($mname = $name . '->');
- $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
- for $v (@$val) {
- $sname = $mname . '[' . $i . ']';
- $out .= $pad . $ipad . '#' . $i if $s->{indent} >= 3;
- $out .= $pad . $ipad . $s->_dump($v, $sname);
- $out .= "," if $i++ < $#$val;
- }
- $out .= $pad . ($s->{xpad} x ($s->{level} - 1)) if $i;
- $out .= ($name =~ /^\@/) ? ')' : ']';
- }
- elsif ($realtype eq 'HASH') {
- my($k, $v, $pad, $lpad, $mname);
- $out .= ($name =~ /^\%/) ? '(' : '{';
- $pad = $s->{sep} . $s->{pad} . $s->{apad};
- $lpad = $s->{apad};
- ($name =~ /^\%(.*)$/) ? ($mname = "\$" . $1) :
- # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
- ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
- ($mname = $name . '->');
- $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
- while (($k, $v) = each %$val) {
- my $nk = $s->_dump($k, "");
- $nk = $1 if !$s->{quotekeys} and $nk =~ /^[\"\']([A-Za-z_]\w*)[\"\']$/;
- $sname = $mname . '{' . $nk . '}';
- $out .= $pad . $ipad . $nk . " => ";
-
- # temporarily alter apad
- $s->{apad} .= (" " x (length($nk) + 4)) if $s->{indent} >= 2;
- $out .= $s->_dump($val->{$k}, $sname) . ",";
- $s->{apad} = $lpad if $s->{indent} >= 2;
- }
- if (substr($out, -1) eq ',') {
- chop $out;
- $out .= $pad . ($s->{xpad} x ($s->{level} - 1));
- }
- $out .= ($name =~ /^\%/) ? ')' : '}';
- }
- elsif ($realtype eq 'CODE') {
- $out .= 'sub { "DUMMY" }';
- carp "Encountered CODE ref, using dummy placeholder" if $s->{purity};
- }
- else {
- croak "Can\'t handle $realtype type.";
- }
-
- if ($realpack) { # we have a blessed ref
- $out .= ', \'' . $realpack . '\'' . ' )';
- $out .= '->' . $s->{toaster} . '()' if $s->{toaster} ne '';
- $s->{apad} = $blesspad;
- }
- $s->{level}--;
-
- }
- else { # simple scalar
-
- my $ref = \$_[1];
- # first, catalog the scalar
- if ($name ne '') {
- ($id) = ("$ref" =~ /\(([^\(]*)\)$/);
- if (exists $s->{seen}{$id}) {
- if ($s->{seen}{$id}[2]) {
- $out = $s->{seen}{$id}[0];
- #warn "[<$out]\n";
- return "\${$out}";
- }
- }
- else {
- #warn "[>\\$name]\n";
- $s->{seen}{$id} = ["\\$name", $ref];
- }
- }
- if (ref($ref) eq 'GLOB' or "$ref" =~ /=GLOB\([^()]+\)$/) { # glob
- my $name = substr($val, 1);
- if ($name =~ /^[A-Za-z_][\w:]*$/) {
- $name =~ s/^main::/::/;
- $sname = $name;
- }
- else {
- $sname = $s->_dump($name, "");
- $sname = '{' . $sname . '}';
- }
- if ($s->{purity}) {
- my $k;
- local ($s->{level}) = 0;
- for $k (qw(SCALAR ARRAY HASH)) {
- my $gval = *$val{$k};
- next unless defined $gval;
- next if $k eq "SCALAR" && ! defined $$gval; # always there
-
- # _dump can push into @post, so we hold our place using $postlen
- my $postlen = scalar @post;
- $post[$postlen] = "\*$sname = ";
- local ($s->{apad}) = " " x length($post[$postlen]) if $s->{indent} >= 2;
- $post[$postlen] .= $s->_dump($gval, "\*$sname\{$k\}");
- }
- }
- $out .= '*' . $sname;
- }
- elsif (!defined($val)) {
- $out .= "undef";
- }
- elsif ($val =~ /^(?:0|-?[1-9]\d{0,8})$/) { # safe decimal number
- $out .= $val;
- }
- else { # string
- if ($s->{useqq}) {
- $out .= qquote($val, $s->{useqq});
- }
- else {
- $val =~ s/([\\\'])/\\$1/g;
- $out .= '\'' . $val . '\'';
- }
- }
- }
- if ($id) {
- # if we made it this far, $id was added to seen list at current
- # level, so remove it to get deep copies
- if ($s->{deepcopy}) {
- delete($s->{seen}{$id});
- }
- elsif ($name) {
- $s->{seen}{$id}[2] = 1;
- }
- }
- return $out;
-}
-
-#
-# non-OO style of earlier version
-#
-sub Dumper {
- return Data::Dumper->Dump([@_]);
-}
-
-# compat stub
-sub DumperX {
- return Data::Dumper->Dumpxs([@_], []);
-}
-
-sub Dumpf { return Data::Dumper->Dump(@_) }
-
-sub Dumpp { print Data::Dumper->Dump(@_) }
-
-#
-# reset the "seen" cache
-#
-sub Reset {
- my($s) = shift;
- $s->{seen} = {};
- return $s;
-}
-
-sub Indent {
- my($s, $v) = @_;
- if (defined($v)) {
- if ($v == 0) {
- $s->{xpad} = "";
- $s->{sep} = "";
- }
- else {
- $s->{xpad} = " ";
- $s->{sep} = "\n";
- }
- $s->{indent} = $v;
- return $s;
- }
- else {
- return $s->{indent};
- }
-}
-
-sub Pad {
- my($s, $v) = @_;
- defined($v) ? (($s->{pad} = $v), return $s) : $s->{pad};
-}
-
-sub Varname {
- my($s, $v) = @_;
- defined($v) ? (($s->{varname} = $v), return $s) : $s->{varname};
-}
-
-sub Purity {
- my($s, $v) = @_;
- defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
-}
-
-sub Useqq {
- my($s, $v) = @_;
- defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
-}
-
-sub Terse {
- my($s, $v) = @_;
- defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
-}
-
-sub Freezer {
- my($s, $v) = @_;
- defined($v) ? (($s->{freezer} = $v), return $s) : $s->{freezer};
-}
-
-sub Toaster {
- my($s, $v) = @_;
- defined($v) ? (($s->{toaster} = $v), return $s) : $s->{toaster};
-}
-
-sub Deepcopy {
- my($s, $v) = @_;
- defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
-}
-
-sub Quotekeys {
- my($s, $v) = @_;
- defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
-}
-
-sub Bless {
- my($s, $v) = @_;
- defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'};
-}
-
-sub Maxdepth {
- my($s, $v) = @_;
- defined($v) ? (($s->{'maxdepth'} = $v), return $s) : $s->{'maxdepth'};
-}
-
-
-# used by qquote below
-my %esc = (
- "\a" => "\\a",
- "\b" => "\\b",
- "\t" => "\\t",
- "\n" => "\\n",
- "\f" => "\\f",
- "\r" => "\\r",
- "\e" => "\\e",
-);
-
-# put a string value in double quotes
-sub qquote {
- local($_) = shift;
- s/([\\\"\@\$])/\\$1/g;
- return qq("$_") unless
- /[^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~]/; # fast exit
-
- my $high = shift || "";
- s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
-
- if (ord('^')==94) { # ascii
- # no need for 3 digits in escape for these
- s/([\0-\037])(?!\d)/'\\'.sprintf('%o',ord($1))/eg;
- s/([\0-\037\177])/'\\'.sprintf('%03o',ord($1))/eg;
- # all but last branch below not supported --BEHAVIOR SUBJECT TO CHANGE--
- if ($high eq "iso8859") {
- s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg;
- } elsif ($high eq "utf8") {
-# use utf8;
-# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
- } elsif ($high eq "8bit") {
- # leave it as it is
- } else {
- s/([\200-\377])/'\\'.sprintf('%03o',ord($1))/eg;
- }
- }
- else { # ebcdic
- s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])(?!\d)}
- {my $v = ord($1); '\\'.sprintf(($v <= 037 ? '%o' : '%03o'), $v)}eg;
- s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])}
- {'\\'.sprintf('%03o',ord($1))}eg;
- }
-
- return qq("$_");
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Data::Dumper - stringified perl data structures, suitable for both printing and C<eval>
-
-
-=head1 SYNOPSIS
-
- use Data::Dumper;
-
- # simple procedural interface
- print Dumper($foo, $bar);
-
- # extended usage with names
- print Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
-
- # configuration variables
- {
- local $Data::Dump::Purity = 1;
- eval Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
- }
-
- # OO usage
- $d = Data::Dumper->new([$foo, $bar], [qw(foo *ary)]);
- ...
- print $d->Dump;
- ...
- $d->Purity(1)->Terse(1)->Deepcopy(1);
- eval $d->Dump;
-
-
-=head1 DESCRIPTION
-
-Given a list of scalars or reference variables, writes out their contents in
-perl syntax. The references can also be objects. The contents of each
-variable is output in a single Perl statement. Handles self-referential
-structures correctly.
-
-The return value can be C<eval>ed to get back an identical copy of the
-original reference structure.
-
-Any references that are the same as one of those passed in will be named
-C<$VAR>I<n> (where I<n> is a numeric suffix), and other duplicate references
-to substructures within C<$VAR>I<n> will be appropriately labeled using arrow
-notation. You can specify names for individual values to be dumped if you
-use the C<Dump()> method, or you can change the default C<$VAR> prefix to
-something else. See C<$Data::Dumper::Varname> and C<$Data::Dumper::Terse>
-below.
-
-The default output of self-referential structures can be C<eval>ed, but the
-nested references to C<$VAR>I<n> will be undefined, since a recursive
-structure cannot be constructed using one Perl statement. You should set the
-C<Purity> flag to 1 to get additional statements that will correctly fill in
-these references.
-
-In the extended usage form, the references to be dumped can be given
-user-specified names. If a name begins with a C<*>, the output will
-describe the dereferenced type of the supplied reference for hashes and
-arrays, and coderefs. Output of names will be avoided where possible if
-the C<Terse> flag is set.
-
-In many cases, methods that are used to set the internal state of the
-object will return the object itself, so method calls can be conveniently
-chained together.
-
-Several styles of output are possible, all controlled by setting
-the C<Indent> flag. See L<Configuration Variables or Methods> below
-for details.
-
-
-=head2 Methods
-
-=over 4
-
-=item I<PACKAGE>->new(I<ARRAYREF [>, I<ARRAYREF]>)
-
-Returns a newly created C<Data::Dumper> object. The first argument is an
-anonymous array of values to be dumped. The optional second argument is an
-anonymous array of names for the values. The names need not have a leading
-C<$> sign, and must be comprised of alphanumeric characters. You can begin
-a name with a C<*> to specify that the dereferenced type must be dumped
-instead of the reference itself, for ARRAY and HASH references.
-
-The prefix specified by C<$Data::Dumper::Varname> will be used with a
-numeric suffix if the name for a value is undefined.
-
-Data::Dumper will catalog all references encountered while dumping the
-values. Cross-references (in the form of names of substructures in perl
-syntax) will be inserted at all possible points, preserving any structural
-interdependencies in the original set of values. Structure traversal is
-depth-first, and proceeds in order from the first supplied value to
-the last.
-
-=item I<$OBJ>->Dump I<or> I<PACKAGE>->Dump(I<ARRAYREF [>, I<ARRAYREF]>)
-
-Returns the stringified form of the values stored in the object (preserving
-the order in which they were supplied to C<new>), subject to the
-configuration options below. In a list context, it returns a list
-of strings corresponding to the supplied values.
-
-The second form, for convenience, simply calls the C<new> method on its
-arguments before dumping the object immediately.
-
-=item I<$OBJ>->Seen(I<[HASHREF]>)
-
-Queries or adds to the internal table of already encountered references.
-You must use C<Reset> to explicitly clear the table if needed. Such
-references are not dumped; instead, their names are inserted wherever they
-are encountered subsequently. This is useful especially for properly
-dumping subroutine references.
-
-Expects a anonymous hash of name => value pairs. Same rules apply for names
-as in C<new>. If no argument is supplied, will return the "seen" list of
-name => value pairs, in a list context. Otherwise, returns the object
-itself.
-
-=item I<$OBJ>->Values(I<[ARRAYREF]>)
-
-Queries or replaces the internal array of values that will be dumped.
-When called without arguments, returns the values. Otherwise, returns the
-object itself.
-
-=item I<$OBJ>->Names(I<[ARRAYREF]>)
-
-Queries or replaces the internal array of user supplied names for the values
-that will be dumped. When called without arguments, returns the names.
-Otherwise, returns the object itself.
-
-=item I<$OBJ>->Reset
-
-Clears the internal table of "seen" references and returns the object
-itself.
-
-=back
-
-=head2 Functions
-
-=over 4
-
-=item Dumper(I<LIST>)
-
-Returns the stringified form of the values in the list, subject to the
-configuration options below. The values will be named C<$VAR>I<n> in the
-output, where I<n> is a numeric suffix. Will return a list of strings
-in a list context.
-
-=back
-
-=head2 Configuration Variables or Methods
-
-Several configuration variables can be used to control the kind of output
-generated when using the procedural interface. These variables are usually
-C<local>ized in a block so that other parts of the code are not affected by
-the change.
-
-These variables determine the default state of the object created by calling
-the C<new> method, but cannot be used to alter the state of the object
-thereafter. The equivalent method names should be used instead to query
-or set the internal state of the object.
-
-The method forms return the object itself when called with arguments,
-so that they can be chained together nicely.
-
-=over 4
-
-=item $Data::Dumper::Indent I<or> I<$OBJ>->Indent(I<[NEWVAL]>)
-
-Controls the style of indentation. It can be set to 0, 1, 2 or 3. Style 0
-spews output without any newlines, indentation, or spaces between list
-items. It is the most compact format possible that can still be called
-valid perl. Style 1 outputs a readable form with newlines but no fancy
-indentation (each level in the structure is simply indented by a fixed
-amount of whitespace). Style 2 (the default) outputs a very readable form
-which takes into account the length of hash keys (so the hash value lines
-up). Style 3 is like style 2, but also annotates the elements of arrays
-with their index (but the comment is on its own line, so array output
-consumes twice the number of lines). Style 2 is the default.
-
-=item $Data::Dumper::Purity I<or> I<$OBJ>->Purity(I<[NEWVAL]>)
-
-Controls the degree to which the output can be C<eval>ed to recreate the
-supplied reference structures. Setting it to 1 will output additional perl
-statements that will correctly recreate nested references. The default is
-0.
-
-=item $Data::Dumper::Pad I<or> I<$OBJ>->Pad(I<[NEWVAL]>)
-
-Specifies the string that will be prefixed to every line of the output.
-Empty string by default.
-
-=item $Data::Dumper::Varname I<or> I<$OBJ>->Varname(I<[NEWVAL]>)
-
-Contains the prefix to use for tagging variable names in the output. The
-default is "VAR".
-
-=item $Data::Dumper::Useqq I<or> I<$OBJ>->Useqq(I<[NEWVAL]>)
-
-When set, enables the use of double quotes for representing string values.
-Whitespace other than space will be represented as C<[\n\t\r]>, "unsafe"
-characters will be backslashed, and unprintable characters will be output as
-quoted octal integers. Since setting this variable imposes a performance
-penalty, the default is 0. C<Dump()> will run slower if this flag is set,
-since the fast XSUB implementation doesn't support it yet.
-
-=item $Data::Dumper::Terse I<or> I<$OBJ>->Terse(I<[NEWVAL]>)
-
-When set, Data::Dumper will emit single, non-self-referential values as
-atoms/terms rather than statements. This means that the C<$VAR>I<n> names
-will be avoided where possible, but be advised that such output may not
-always be parseable by C<eval>.
-
-=item $Data::Dumper::Freezer I<or> $I<OBJ>->Freezer(I<[NEWVAL]>)
-
-Can be set to a method name, or to an empty string to disable the feature.
-Data::Dumper will invoke that method via the object before attempting to
-stringify it. This method can alter the contents of the object (if, for
-instance, it contains data allocated from C), and even rebless it in a
-different package. The client is responsible for making sure the specified
-method can be called via the object, and that the object ends up containing
-only perl data types after the method has been called. Defaults to an empty
-string.
-
-=item $Data::Dumper::Toaster I<or> $I<OBJ>->Toaster(I<[NEWVAL]>)
-
-Can be set to a method name, or to an empty string to disable the feature.
-Data::Dumper will emit a method call for any objects that are to be dumped
-using the syntax C<bless(DATA, CLASS)->METHOD()>. Note that this means that
-the method specified will have to perform any modifications required on the
-object (like creating new state within it, and/or reblessing it in a
-different package) and then return it. The client is responsible for making
-sure the method can be called via the object, and that it returns a valid
-object. Defaults to an empty string.
-
-=item $Data::Dumper::Deepcopy I<or> $I<OBJ>->Deepcopy(I<[NEWVAL]>)
-
-Can be set to a boolean value to enable deep copies of structures.
-Cross-referencing will then only be done when absolutely essential
-(i.e., to break reference cycles). Default is 0.
-
-=item $Data::Dumper::Quotekeys I<or> $I<OBJ>->Quotekeys(I<[NEWVAL]>)
-
-Can be set to a boolean value to control whether hash keys are quoted.
-A false value will avoid quoting hash keys when it looks like a simple
-string. Default is 1, which will always enclose hash keys in quotes.
-
-=item $Data::Dumper::Bless I<or> $I<OBJ>->Bless(I<[NEWVAL]>)
-
-Can be set to a string that specifies an alternative to the C<bless>
-builtin operator used to create objects. A function with the specified
-name should exist, and should accept the same arguments as the builtin.
-Default is C<bless>.
-
-=item $Data::Dumper::Maxdepth I<or> $I<OBJ>->Maxdepth(I<[NEWVAL]>)
-
-Can be set to a positive integer that specifies the depth beyond which
-which we don't venture into a structure. Has no effect when
-C<Data::Dumper::Purity> is set. (Useful in debugger when we often don't
-want to see more than enough). Default is 0, which means there is
-no maximum depth.
-
-=back
-
-=head2 Exports
-
-=over 4
-
-=item Dumper
-
-=back
-
-=head1 EXAMPLES
-
-Run these code snippets to get a quick feel for the behavior of this
-module. When you are through with these examples, you may want to
-add or change the various configuration variables described above,
-to see their behavior. (See the testsuite in the Data::Dumper
-distribution for more examples.)
-
-
- use Data::Dumper;
-
- package Foo;
- sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};
-
- package Fuz; # a weird REF-REF-SCALAR object
- sub new {bless \($_ = \ 'fu\'z'), $_[0]};
-
- package main;
- $foo = Foo->new;
- $fuz = Fuz->new;
- $boo = [ 1, [], "abcd", \*foo,
- {1 => 'a', 023 => 'b', 0x45 => 'c'},
- \\"p\q\'r", $foo, $fuz];
-
- ########
- # simple usage
- ########
-
- $bar = eval(Dumper($boo));
- print($@) if $@;
- print Dumper($boo), Dumper($bar); # pretty print (no array indices)
-
- $Data::Dumper::Terse = 1; # don't output names where feasible
- $Data::Dumper::Indent = 0; # turn off all pretty print
- print Dumper($boo), "\n";
-
- $Data::Dumper::Indent = 1; # mild pretty print
- print Dumper($boo);
-
- $Data::Dumper::Indent = 3; # pretty print with array indices
- print Dumper($boo);
-
- $Data::Dumper::Useqq = 1; # print strings in double quotes
- print Dumper($boo);
-
-
- ########
- # recursive structures
- ########
-
- @c = ('c');
- $c = \@c;
- $b = {};
- $a = [1, $b, $c];
- $b->{a} = $a;
- $b->{b} = $a->[1];
- $b->{c} = $a->[2];
- print Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]);
-
-
- $Data::Dumper::Purity = 1; # fill in the holes for eval
- print Data::Dumper->Dump([$a, $b], [qw(*a b)]); # print as @a
- print Data::Dumper->Dump([$b, $a], [qw(*b a)]); # print as %b
-
-
- $Data::Dumper::Deepcopy = 1; # avoid cross-refs
- print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
-
-
- $Data::Dumper::Purity = 0; # avoid cross-refs
- print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
-
- ########
- # deep structures
- ########
-
- $a = "pearl";
- $b = [ $a ];
- $c = { 'b' => $b };
- $d = [ $c ];
- $e = { 'd' => $d };
- $f = { 'e' => $e };
- print Data::Dumper->Dump([$f], [qw(f)]);
-
- $Data::Dumper::Maxdepth = 3; # no deeper than 3 refs down
- print Data::Dumper->Dump([$f], [qw(f)]);
-
-
- ########
- # object-oriented usage
- ########
-
- $d = Data::Dumper->new([$a,$b], [qw(a b)]);
- $d->Seen({'*c' => $c}); # stash a ref without printing it
- $d->Indent(3);
- print $d->Dump;
- $d->Reset->Purity(0); # empty the seen cache
- print join "----\n", $d->Dump;
-
-
- ########
- # persistence
- ########
-
- package Foo;
- sub new { bless { state => 'awake' }, shift }
- sub Freeze {
- my $s = shift;
- print STDERR "preparing to sleep\n";
- $s->{state} = 'asleep';
- return bless $s, 'Foo::ZZZ';
- }
-
- package Foo::ZZZ;
- sub Thaw {
- my $s = shift;
- print STDERR "waking up\n";
- $s->{state} = 'awake';
- return bless $s, 'Foo';
- }
-
- package Foo;
- use Data::Dumper;
- $a = Foo->new;
- $b = Data::Dumper->new([$a], ['c']);
- $b->Freezer('Freeze');
- $b->Toaster('Thaw');
- $c = $b->Dump;
- print $c;
- $d = eval $c;
- print Data::Dumper->Dump([$d], ['d']);
-
-
- ########
- # symbol substitution (useful for recreating CODE refs)
- ########
-
- sub foo { print "foo speaking\n" }
- *other = \&foo;
- $bar = [ \&other ];
- $d = Data::Dumper->new([\&other,$bar],['*other','bar']);
- $d->Seen({ '*foo' => \&foo });
- print $d->Dump;
-
-
-=head1 BUGS
-
-Due to limitations of Perl subroutine call semantics, you cannot pass an
-array or hash. Prepend it with a C<\> to pass its reference instead. This
-will be remedied in time, with the arrival of prototypes in later versions
-of Perl. For now, you need to use the extended usage form, and prepend the
-name with a C<*> to output it as a hash or array.
-
-C<Data::Dumper> cheats with CODE references. If a code reference is
-encountered in the structure being processed, an anonymous subroutine that
-contains the string '"DUMMY"' will be inserted in its place, and a warning
-will be printed if C<Purity> is set. You can C<eval> the result, but bear
-in mind that the anonymous sub that gets created is just a placeholder.
-Someday, perl will have a switch to cache-on-demand the string
-representation of a compiled piece of code, I hope. If you have prior
-knowledge of all the code refs that your data structures are likely
-to have, you can use the C<Seen> method to pre-seed the internal reference
-table and make the dumped output point to them, instead. See L<EXAMPLES>
-above.
-
-The C<Useqq> flag makes Dump() run slower, since the XSUB implementation
-does not support it.
-
-SCALAR objects have the weirdest looking C<bless> workaround.
-
-
-=head1 AUTHOR
-
-Gurusamy Sarathy gsar@activestate.com
-
-Copyright (c) 1996-98 Gurusamy Sarathy. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-Version 2.11 (unreleased)
-
-=head1 SEE ALSO
-
-perl(1)
-
-=cut
diff --git a/contrib/perl5/ext/Data/Dumper/Dumper.xs b/contrib/perl5/ext/Data/Dumper/Dumper.xs
deleted file mode 100644
index 25e72b1..0000000
--- a/contrib/perl5/ext/Data/Dumper/Dumper.xs
+++ /dev/null
@@ -1,901 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifndef PERL_VERSION
-#include "patchlevel.h"
-#define PERL_VERSION PATCHLEVEL
-#endif
-
-#if PERL_VERSION < 5
-# ifndef PL_sv_undef
-# define PL_sv_undef sv_undef
-# endif
-# ifndef ERRSV
-# define ERRSV GvSV(errgv)
-# endif
-# ifndef newSVpvn
-# define newSVpvn newSVpv
-# endif
-#endif
-
-static I32 num_q (char *s, STRLEN slen);
-static I32 esc_q (char *dest, char *src, STRLEN slen);
-static SV *sv_x (pTHX_ SV *sv, char *str, STRLEN len, I32 n);
-static I32 DD_dump (pTHX_ SV *val, char *name, STRLEN namelen, SV *retval,
- HV *seenhv, AV *postav, I32 *levelp, I32 indent,
- SV *pad, SV *xpad, SV *apad, SV *sep,
- SV *freezer, SV *toaster,
- I32 purity, I32 deepcopy, I32 quotekeys, SV *bless,
- I32 maxdepth);
-
-/* does a string need to be protected? */
-static I32
-needs_quote(register char *s)
-{
-TOP:
- if (s[0] == ':') {
- if (*++s) {
- if (*s++ != ':')
- return 1;
- }
- else
- return 1;
- }
- if (isIDFIRST(*s)) {
- while (*++s)
- if (!isALNUM(*s)) {
- if (*s == ':')
- goto TOP;
- else
- return 1;
- }
- }
- else
- return 1;
- return 0;
-}
-
-/* count the number of "'"s and "\"s in string */
-static I32
-num_q(register char *s, register STRLEN slen)
-{
- register I32 ret = 0;
-
- while (slen > 0) {
- if (*s == '\'' || *s == '\\')
- ++ret;
- ++s;
- --slen;
- }
- return ret;
-}
-
-
-/* returns number of chars added to escape "'"s and "\"s in s */
-/* slen number of characters in s will be escaped */
-/* destination must be long enough for additional chars */
-static I32
-esc_q(register char *d, register char *s, register STRLEN slen)
-{
- register I32 ret = 0;
-
- while (slen > 0) {
- switch (*s) {
- case '\'':
- case '\\':
- *d = '\\';
- ++d; ++ret;
- default:
- *d = *s;
- ++d; ++s; --slen;
- break;
- }
- }
- return ret;
-}
-
-/* append a repeated string to an SV */
-static SV *
-sv_x(pTHX_ SV *sv, register char *str, STRLEN len, I32 n)
-{
- if (sv == Nullsv)
- sv = newSVpvn("", 0);
- else
- assert(SvTYPE(sv) >= SVt_PV);
-
- if (n > 0) {
- SvGROW(sv, len*n + SvCUR(sv) + 1);
- if (len == 1) {
- char *start = SvPVX(sv) + SvCUR(sv);
- SvCUR(sv) += n;
- start[n] = '\0';
- while (n > 0)
- start[--n] = str[0];
- }
- else
- while (n > 0) {
- sv_catpvn(sv, str, len);
- --n;
- }
- }
- return sv;
-}
-
-/*
- * This ought to be split into smaller functions. (it is one long function since
- * it exactly parallels the perl version, which was one long thing for
- * efficiency raisins.) Ugggh!
- */
-static I32
-DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
- AV *postav, I32 *levelp, I32 indent, SV *pad, SV *xpad,
- SV *apad, SV *sep, SV *freezer, SV *toaster, I32 purity,
- I32 deepcopy, I32 quotekeys, SV *bless, I32 maxdepth)
-{
- char tmpbuf[128];
- U32 i;
- char *c, *r, *realpack, id[128];
- SV **svp;
- SV *sv, *ipad, *ival;
- SV *blesspad = Nullsv;
- AV *seenentry = Nullav;
- char *iname;
- STRLEN inamelen, idlen = 0;
- U32 flags;
- U32 realtype;
-
- if (!val)
- return 0;
-
- flags = SvFLAGS(val);
- realtype = SvTYPE(val);
-
- if (SvGMAGICAL(val))
- mg_get(val);
- if (SvROK(val)) {
-
- if (SvOBJECT(SvRV(val)) && freezer &&
- SvPOK(freezer) && SvCUR(freezer))
- {
- dSP; ENTER; SAVETMPS; PUSHMARK(sp);
- XPUSHs(val); PUTBACK;
- i = perl_call_method(SvPVX(freezer), G_EVAL|G_SCALAR);
- SPAGAIN;
- if (SvTRUE(ERRSV))
- warn("WARNING(Freezer method call failed): %s",
- SvPVX(ERRSV));
- else if (i)
- val = newSVsv(POPs);
- PUTBACK; FREETMPS; LEAVE;
- if (i)
- (void)sv_2mortal(val);
- }
-
- ival = SvRV(val);
- flags = SvFLAGS(ival);
- realtype = SvTYPE(ival);
- (void) sprintf(id, "0x%lx", (unsigned long)ival);
- idlen = strlen(id);
- if (SvOBJECT(ival))
- realpack = HvNAME(SvSTASH(ival));
- else
- realpack = Nullch;
-
- /* if it has a name, we need to either look it up, or keep a tab
- * on it so we know when we hit it later
- */
- if (namelen) {
- if ((svp = hv_fetch(seenhv, id, idlen, FALSE))
- && (sv = *svp) && SvROK(sv) && (seenentry = (AV*)SvRV(sv)))
- {
- SV *othername;
- if ((svp = av_fetch(seenentry, 0, FALSE))
- && (othername = *svp))
- {
- if (purity && *levelp > 0) {
- SV *postentry;
-
- if (realtype == SVt_PVHV)
- sv_catpvn(retval, "{}", 2);
- else if (realtype == SVt_PVAV)
- sv_catpvn(retval, "[]", 2);
- else
- sv_catpvn(retval, "do{my $o}", 9);
- postentry = newSVpvn(name, namelen);
- sv_catpvn(postentry, " = ", 3);
- sv_catsv(postentry, othername);
- av_push(postav, postentry);
- }
- else {
- if (name[0] == '@' || name[0] == '%') {
- if ((SvPVX(othername))[0] == '\\' &&
- (SvPVX(othername))[1] == name[0]) {
- sv_catpvn(retval, SvPVX(othername)+1,
- SvCUR(othername)-1);
- }
- else {
- sv_catpvn(retval, name, 1);
- sv_catpvn(retval, "{", 1);
- sv_catsv(retval, othername);
- sv_catpvn(retval, "}", 1);
- }
- }
- else
- sv_catsv(retval, othername);
- }
- return 1;
- }
- else {
- warn("ref name not found for %s", id);
- return 0;
- }
- }
- else { /* store our name and continue */
- SV *namesv;
- if (name[0] == '@' || name[0] == '%') {
- namesv = newSVpvn("\\", 1);
- sv_catpvn(namesv, name, namelen);
- }
- else if (realtype == SVt_PVCV && name[0] == '*') {
- namesv = newSVpvn("\\", 2);
- sv_catpvn(namesv, name, namelen);
- (SvPVX(namesv))[1] = '&';
- }
- else
- namesv = newSVpvn(name, namelen);
- seenentry = newAV();
- av_push(seenentry, namesv);
- (void)SvREFCNT_inc(val);
- av_push(seenentry, val);
- (void)hv_store(seenhv, id, strlen(id),
- newRV((SV*)seenentry), 0);
- SvREFCNT_dec(seenentry);
- }
- }
-
- if (realpack && *realpack == 'R' && strEQ(realpack, "Regexp")) {
- STRLEN rlen;
- char *rval = SvPV(val, rlen);
- char *slash = strchr(rval, '/');
- sv_catpvn(retval, "qr/", 3);
- while (slash) {
- sv_catpvn(retval, rval, slash-rval);
- sv_catpvn(retval, "\\/", 2);
- rlen -= slash-rval+1;
- rval = slash+1;
- slash = strchr(rval, '/');
- }
- sv_catpvn(retval, rval, rlen);
- sv_catpvn(retval, "/", 1);
- return 1;
- }
-
- /* If purity is not set and maxdepth is set, then check depth:
- * if we have reached maximum depth, return the string
- * representation of the thing we are currently examining
- * at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)').
- */
- if (!purity && maxdepth > 0 && *levelp >= maxdepth) {
- STRLEN vallen;
- char *valstr = SvPV(val,vallen);
- sv_catpvn(retval, "'", 1);
- sv_catpvn(retval, valstr, vallen);
- sv_catpvn(retval, "'", 1);
- return 1;
- }
-
- if (realpack) { /* we have a blessed ref */
- STRLEN blesslen;
- char *blessstr = SvPV(bless, blesslen);
- sv_catpvn(retval, blessstr, blesslen);
- sv_catpvn(retval, "( ", 2);
- if (indent >= 2) {
- blesspad = apad;
- apad = newSVsv(apad);
- sv_x(aTHX_ apad, " ", 1, blesslen+2);
- }
- }
-
- (*levelp)++;
- ipad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), *levelp);
-
- if (realtype <= SVt_PVBM) { /* scalar ref */
- SV *namesv = newSVpvn("${", 2);
- sv_catpvn(namesv, name, namelen);
- sv_catpvn(namesv, "}", 1);
- if (realpack) { /* blessed */
- sv_catpvn(retval, "do{\\(my $o = ", 13);
- DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv,
- postav, levelp, indent, pad, xpad, apad, sep,
- freezer, toaster, purity, deepcopy, quotekeys, bless,
- maxdepth);
- sv_catpvn(retval, ")}", 2);
- } /* plain */
- else {
- sv_catpvn(retval, "\\", 1);
- DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv,
- postav, levelp, indent, pad, xpad, apad, sep,
- freezer, toaster, purity, deepcopy, quotekeys, bless,
- maxdepth);
- }
- SvREFCNT_dec(namesv);
- }
- else if (realtype == SVt_PVGV) { /* glob ref */
- SV *namesv = newSVpvn("*{", 2);
- sv_catpvn(namesv, name, namelen);
- sv_catpvn(namesv, "}", 1);
- sv_catpvn(retval, "\\", 1);
- DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv,
- postav, levelp, indent, pad, xpad, apad, sep,
- freezer, toaster, purity, deepcopy, quotekeys, bless,
- maxdepth);
- SvREFCNT_dec(namesv);
- }
- else if (realtype == SVt_PVAV) {
- SV *totpad;
- I32 ix = 0;
- I32 ixmax = av_len((AV *)ival);
-
- SV *ixsv = newSViv(0);
- /* allowing for a 24 char wide array index */
- New(0, iname, namelen+28, char);
- (void)strcpy(iname, name);
- inamelen = namelen;
- if (name[0] == '@') {
- sv_catpvn(retval, "(", 1);
- iname[0] = '$';
- }
- else {
- sv_catpvn(retval, "[", 1);
- /* omit "->" in $foo{bar}->[0], but not in ${$foo}->[0] */
- /*if (namelen > 0
- && name[namelen-1] != ']' && name[namelen-1] != '}'
- && (namelen < 4 || (name[1] != '{' && name[2] != '{')))*/
- if ((namelen > 0
- && name[namelen-1] != ']' && name[namelen-1] != '}')
- || (namelen > 4
- && (name[1] == '{'
- || (name[0] == '\\' && name[2] == '{'))))
- {
- iname[inamelen++] = '-'; iname[inamelen++] = '>';
- iname[inamelen] = '\0';
- }
- }
- if (iname[0] == '*' && iname[inamelen-1] == '}' && inamelen >= 8 &&
- (instr(iname+inamelen-8, "{SCALAR}") ||
- instr(iname+inamelen-7, "{ARRAY}") ||
- instr(iname+inamelen-6, "{HASH}"))) {
- iname[inamelen++] = '-'; iname[inamelen++] = '>';
- }
- iname[inamelen++] = '['; iname[inamelen] = '\0';
- totpad = newSVsv(sep);
- sv_catsv(totpad, pad);
- sv_catsv(totpad, apad);
-
- for (ix = 0; ix <= ixmax; ++ix) {
- STRLEN ilen;
- SV *elem;
- svp = av_fetch((AV*)ival, ix, FALSE);
- if (svp)
- elem = *svp;
- else
- elem = &PL_sv_undef;
-
- ilen = inamelen;
- sv_setiv(ixsv, ix);
- (void) sprintf(iname+ilen, "%"IVdf, (IV)ix);
- ilen = strlen(iname);
- iname[ilen++] = ']'; iname[ilen] = '\0';
- if (indent >= 3) {
- sv_catsv(retval, totpad);
- sv_catsv(retval, ipad);
- sv_catpvn(retval, "#", 1);
- sv_catsv(retval, ixsv);
- }
- sv_catsv(retval, totpad);
- sv_catsv(retval, ipad);
- DD_dump(aTHX_ elem, iname, ilen, retval, seenhv, postav,
- levelp, indent, pad, xpad, apad, sep,
- freezer, toaster, purity, deepcopy, quotekeys, bless,
- maxdepth);
- if (ix < ixmax)
- sv_catpvn(retval, ",", 1);
- }
- if (ixmax >= 0) {
- SV *opad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), (*levelp)-1);
- sv_catsv(retval, totpad);
- sv_catsv(retval, opad);
- SvREFCNT_dec(opad);
- }
- if (name[0] == '@')
- sv_catpvn(retval, ")", 1);
- else
- sv_catpvn(retval, "]", 1);
- SvREFCNT_dec(ixsv);
- SvREFCNT_dec(totpad);
- Safefree(iname);
- }
- else if (realtype == SVt_PVHV) {
- SV *totpad, *newapad;
- SV *iname, *sname;
- HE *entry;
- char *key;
- I32 klen;
- SV *hval;
-
- iname = newSVpvn(name, namelen);
- if (name[0] == '%') {
- sv_catpvn(retval, "(", 1);
- (SvPVX(iname))[0] = '$';
- }
- else {
- sv_catpvn(retval, "{", 1);
- /* omit "->" in $foo[0]->{bar}, but not in ${$foo}->{bar} */
- if ((namelen > 0
- && name[namelen-1] != ']' && name[namelen-1] != '}')
- || (namelen > 4
- && (name[1] == '{'
- || (name[0] == '\\' && name[2] == '{'))))
- {
- sv_catpvn(iname, "->", 2);
- }
- }
- if (name[0] == '*' && name[namelen-1] == '}' && namelen >= 8 &&
- (instr(name+namelen-8, "{SCALAR}") ||
- instr(name+namelen-7, "{ARRAY}") ||
- instr(name+namelen-6, "{HASH}"))) {
- sv_catpvn(iname, "->", 2);
- }
- sv_catpvn(iname, "{", 1);
- totpad = newSVsv(sep);
- sv_catsv(totpad, pad);
- sv_catsv(totpad, apad);
-
- (void)hv_iterinit((HV*)ival);
- i = 0;
- while ((entry = hv_iternext((HV*)ival))) {
- char *nkey;
- I32 nticks = 0;
-
- if (i)
- sv_catpvn(retval, ",", 1);
- i++;
- key = hv_iterkey(entry, &klen);
- hval = hv_iterval((HV*)ival, entry);
-
- if (quotekeys || needs_quote(key)) {
- nticks = num_q(key, klen);
- New(0, nkey, klen+nticks+3, char);
- nkey[0] = '\'';
- if (nticks)
- klen += esc_q(nkey+1, key, klen);
- else
- (void)Copy(key, nkey+1, klen, char);
- nkey[++klen] = '\'';
- nkey[++klen] = '\0';
- }
- else {
- New(0, nkey, klen, char);
- (void)Copy(key, nkey, klen, char);
- }
-
- sname = newSVsv(iname);
- sv_catpvn(sname, nkey, klen);
- sv_catpvn(sname, "}", 1);
-
- sv_catsv(retval, totpad);
- sv_catsv(retval, ipad);
- sv_catpvn(retval, nkey, klen);
- sv_catpvn(retval, " => ", 4);
- if (indent >= 2) {
- char *extra;
- I32 elen = 0;
- newapad = newSVsv(apad);
- New(0, extra, klen+4+1, char);
- while (elen < (klen+4))
- extra[elen++] = ' ';
- extra[elen] = '\0';
- sv_catpvn(newapad, extra, elen);
- Safefree(extra);
- }
- else
- newapad = apad;
-
- DD_dump(aTHX_ hval, SvPVX(sname), SvCUR(sname), retval, seenhv,
- postav, levelp, indent, pad, xpad, newapad, sep,
- freezer, toaster, purity, deepcopy, quotekeys, bless,
- maxdepth);
- SvREFCNT_dec(sname);
- Safefree(nkey);
- if (indent >= 2)
- SvREFCNT_dec(newapad);
- }
- if (i) {
- SV *opad = sv_x(aTHX_ Nullsv, SvPVX(xpad), SvCUR(xpad), *levelp-1);
- sv_catsv(retval, totpad);
- sv_catsv(retval, opad);
- SvREFCNT_dec(opad);
- }
- if (name[0] == '%')
- sv_catpvn(retval, ")", 1);
- else
- sv_catpvn(retval, "}", 1);
- SvREFCNT_dec(iname);
- SvREFCNT_dec(totpad);
- }
- else if (realtype == SVt_PVCV) {
- sv_catpvn(retval, "sub { \"DUMMY\" }", 15);
- if (purity)
- warn("Encountered CODE ref, using dummy placeholder");
- }
- else {
- warn("cannot handle ref type %ld", realtype);
- }
-
- if (realpack) { /* free blessed allocs */
- if (indent >= 2) {
- SvREFCNT_dec(apad);
- apad = blesspad;
- }
- sv_catpvn(retval, ", '", 3);
- sv_catpvn(retval, realpack, strlen(realpack));
- sv_catpvn(retval, "' )", 3);
- if (toaster && SvPOK(toaster) && SvCUR(toaster)) {
- sv_catpvn(retval, "->", 2);
- sv_catsv(retval, toaster);
- sv_catpvn(retval, "()", 2);
- }
- }
- SvREFCNT_dec(ipad);
- (*levelp)--;
- }
- else {
- STRLEN i;
-
- if (namelen) {
- (void) sprintf(id, "0x%lx", (unsigned long)val);
- if ((svp = hv_fetch(seenhv, id, (idlen = strlen(id)), FALSE)) &&
- (sv = *svp) && SvROK(sv) &&
- (seenentry = (AV*)SvRV(sv)))
- {
- SV *othername;
- if ((svp = av_fetch(seenentry, 0, FALSE)) && (othername = *svp)
- && (svp = av_fetch(seenentry, 2, FALSE)) && *svp && SvIV(*svp) > 0)
- {
- sv_catpvn(retval, "${", 2);
- sv_catsv(retval, othername);
- sv_catpvn(retval, "}", 1);
- return 1;
- }
- }
- else {
- SV *namesv;
- namesv = newSVpvn("\\", 1);
- sv_catpvn(namesv, name, namelen);
- seenentry = newAV();
- av_push(seenentry, namesv);
- av_push(seenentry, newRV(val));
- (void)hv_store(seenhv, id, strlen(id), newRV((SV*)seenentry), 0);
- SvREFCNT_dec(seenentry);
- }
- }
-
- if (SvIOK(val)) {
- STRLEN len;
- if (SvIsUV(val))
- (void) sprintf(tmpbuf, "%"UVuf, SvUV(val));
- else
- (void) sprintf(tmpbuf, "%"IVdf, SvIV(val));
- len = strlen(tmpbuf);
- sv_catpvn(retval, tmpbuf, len);
- }
- else if (realtype == SVt_PVGV) {/* GLOBs can end up with scribbly names */
- c = SvPV(val, i);
- ++c; --i; /* just get the name */
- if (i >= 6 && strncmp(c, "main::", 6) == 0) {
- c += 4;
- i -= 4;
- }
- if (needs_quote(c)) {
- sv_grow(retval, SvCUR(retval)+6+2*i);
- r = SvPVX(retval)+SvCUR(retval);
- r[0] = '*'; r[1] = '{'; r[2] = '\'';
- i += esc_q(r+3, c, i);
- i += 3;
- r[i++] = '\''; r[i++] = '}';
- r[i] = '\0';
- }
- else {
- sv_grow(retval, SvCUR(retval)+i+2);
- r = SvPVX(retval)+SvCUR(retval);
- r[0] = '*'; strcpy(r+1, c);
- i++;
- }
- SvCUR_set(retval, SvCUR(retval)+i);
-
- if (purity) {
- static char *entries[] = { "{SCALAR}", "{ARRAY}", "{HASH}" };
- static STRLEN sizes[] = { 8, 7, 6 };
- SV *e;
- SV *nname = newSVpvn("", 0);
- SV *newapad = newSVpvn("", 0);
- GV *gv = (GV*)val;
- I32 j;
-
- for (j=0; j<3; j++) {
- e = ((j == 0) ? GvSV(gv) : (j == 1) ? (SV*)GvAV(gv) : (SV*)GvHV(gv));
- if (!e)
- continue;
- if (j == 0 && !SvOK(e))
- continue;
-
- {
- I32 nlevel = 0;
- SV *postentry = newSVpvn(r,i);
-
- sv_setsv(nname, postentry);
- sv_catpvn(nname, entries[j], sizes[j]);
- sv_catpvn(postentry, " = ", 3);
- av_push(postav, postentry);
- e = newRV(e);
-
- SvCUR(newapad) = 0;
- if (indent >= 2)
- (void)sv_x(aTHX_ newapad, " ", 1, SvCUR(postentry));
-
- DD_dump(aTHX_ e, SvPVX(nname), SvCUR(nname), postentry,
- seenhv, postav, &nlevel, indent, pad, xpad,
- newapad, sep, freezer, toaster, purity,
- deepcopy, quotekeys, bless, maxdepth);
- SvREFCNT_dec(e);
- }
- }
-
- SvREFCNT_dec(newapad);
- SvREFCNT_dec(nname);
- }
- }
- else if (val == &PL_sv_undef || !SvOK(val)) {
- sv_catpvn(retval, "undef", 5);
- }
- else {
- c = SvPV(val, i);
- sv_grow(retval, SvCUR(retval)+3+2*i);
- r = SvPVX(retval)+SvCUR(retval);
- r[0] = '\'';
- i += esc_q(r+1, c, i);
- ++i;
- r[i++] = '\'';
- r[i] = '\0';
- SvCUR_set(retval, SvCUR(retval)+i);
- }
- }
-
- if (idlen) {
- if (deepcopy)
- (void)hv_delete(seenhv, id, idlen, G_DISCARD);
- else if (namelen && seenentry) {
- SV *mark = *av_fetch(seenentry, 2, TRUE);
- sv_setiv(mark,1);
- }
- }
- return 1;
-}
-
-
-MODULE = Data::Dumper PACKAGE = Data::Dumper PREFIX = Data_Dumper_
-
-#
-# This is the exact equivalent of Dump. Well, almost. The things that are
-# different as of now (due to Laziness):
-# * doesnt do double-quotes yet.
-#
-
-void
-Data_Dumper_Dumpxs(href, ...)
- SV *href;
- PROTOTYPE: $;$$
- PPCODE:
- {
- HV *hv;
- SV *retval, *valstr;
- HV *seenhv = Nullhv;
- AV *postav, *todumpav, *namesav;
- I32 level = 0;
- I32 indent, terse, useqq, i, imax, postlen;
- SV **svp;
- SV *val, *name, *pad, *xpad, *apad, *sep, *tmp, *varname;
- SV *freezer, *toaster, *bless;
- I32 purity, deepcopy, quotekeys, maxdepth = 0;
- char tmpbuf[1024];
- I32 gimme = GIMME;
-
- if (!SvROK(href)) { /* call new to get an object first */
- if (items < 2)
- croak("Usage: Data::Dumper::Dumpxs(PACKAGE, VAL_ARY_REF, [NAME_ARY_REF])");
-
- ENTER;
- SAVETMPS;
-
- PUSHMARK(sp);
- XPUSHs(href);
- XPUSHs(sv_2mortal(newSVsv(ST(1))));
- if (items >= 3)
- XPUSHs(sv_2mortal(newSVsv(ST(2))));
- PUTBACK;
- i = perl_call_method("new", G_SCALAR);
- SPAGAIN;
- if (i)
- href = newSVsv(POPs);
-
- PUTBACK;
- FREETMPS;
- LEAVE;
- if (i)
- (void)sv_2mortal(href);
- }
-
- todumpav = namesav = Nullav;
- seenhv = Nullhv;
- val = pad = xpad = apad = sep = tmp = varname
- = freezer = toaster = bless = &PL_sv_undef;
- name = sv_newmortal();
- indent = 2;
- terse = useqq = purity = deepcopy = 0;
- quotekeys = 1;
-
- retval = newSVpvn("", 0);
- if (SvROK(href)
- && (hv = (HV*)SvRV((SV*)href))
- && SvTYPE(hv) == SVt_PVHV) {
-
- if ((svp = hv_fetch(hv, "seen", 4, FALSE)) && SvROK(*svp))
- seenhv = (HV*)SvRV(*svp);
- if ((svp = hv_fetch(hv, "todump", 6, FALSE)) && SvROK(*svp))
- todumpav = (AV*)SvRV(*svp);
- if ((svp = hv_fetch(hv, "names", 5, FALSE)) && SvROK(*svp))
- namesav = (AV*)SvRV(*svp);
- if ((svp = hv_fetch(hv, "indent", 6, FALSE)))
- indent = SvIV(*svp);
- if ((svp = hv_fetch(hv, "purity", 6, FALSE)))
- purity = SvIV(*svp);
- if ((svp = hv_fetch(hv, "terse", 5, FALSE)))
- terse = SvTRUE(*svp);
- if ((svp = hv_fetch(hv, "useqq", 5, FALSE)))
- useqq = SvTRUE(*svp);
- if ((svp = hv_fetch(hv, "pad", 3, FALSE)))
- pad = *svp;
- if ((svp = hv_fetch(hv, "xpad", 4, FALSE)))
- xpad = *svp;
- if ((svp = hv_fetch(hv, "apad", 4, FALSE)))
- apad = *svp;
- if ((svp = hv_fetch(hv, "sep", 3, FALSE)))
- sep = *svp;
- if ((svp = hv_fetch(hv, "varname", 7, FALSE)))
- varname = *svp;
- if ((svp = hv_fetch(hv, "freezer", 7, FALSE)))
- freezer = *svp;
- if ((svp = hv_fetch(hv, "toaster", 7, FALSE)))
- toaster = *svp;
- if ((svp = hv_fetch(hv, "deepcopy", 8, FALSE)))
- deepcopy = SvTRUE(*svp);
- if ((svp = hv_fetch(hv, "quotekeys", 9, FALSE)))
- quotekeys = SvTRUE(*svp);
- if ((svp = hv_fetch(hv, "bless", 5, FALSE)))
- bless = *svp;
- if ((svp = hv_fetch(hv, "maxdepth", 8, FALSE)))
- maxdepth = SvIV(*svp);
- postav = newAV();
-
- if (todumpav)
- imax = av_len(todumpav);
- else
- imax = -1;
- valstr = newSVpvn("",0);
- for (i = 0; i <= imax; ++i) {
- SV *newapad;
-
- av_clear(postav);
- if ((svp = av_fetch(todumpav, i, FALSE)))
- val = *svp;
- else
- val = &PL_sv_undef;
- if ((svp = av_fetch(namesav, i, TRUE)))
- sv_setsv(name, *svp);
- else
- (void)SvOK_off(name);
-
- if (SvOK(name)) {
- if ((SvPVX(name))[0] == '*') {
- if (SvROK(val)) {
- switch (SvTYPE(SvRV(val))) {
- case SVt_PVAV:
- (SvPVX(name))[0] = '@';
- break;
- case SVt_PVHV:
- (SvPVX(name))[0] = '%';
- break;
- case SVt_PVCV:
- (SvPVX(name))[0] = '*';
- break;
- default:
- (SvPVX(name))[0] = '$';
- break;
- }
- }
- else
- (SvPVX(name))[0] = '$';
- }
- else if ((SvPVX(name))[0] != '$')
- sv_insert(name, 0, 0, "$", 1);
- }
- else {
- STRLEN nchars = 0;
- sv_setpvn(name, "$", 1);
- sv_catsv(name, varname);
- (void) sprintf(tmpbuf, "%"IVdf, (IV)(i+1));
- nchars = strlen(tmpbuf);
- sv_catpvn(name, tmpbuf, nchars);
- }
-
- if (indent >= 2) {
- SV *tmpsv = sv_x(aTHX_ Nullsv, " ", 1, SvCUR(name)+3);
- newapad = newSVsv(apad);
- sv_catsv(newapad, tmpsv);
- SvREFCNT_dec(tmpsv);
- }
- else
- newapad = apad;
-
- DD_dump(aTHX_ val, SvPVX(name), SvCUR(name), valstr, seenhv,
- postav, &level, indent, pad, xpad, newapad, sep,
- freezer, toaster, purity, deepcopy, quotekeys,
- bless, maxdepth);
-
- if (indent >= 2)
- SvREFCNT_dec(newapad);
-
- postlen = av_len(postav);
- if (postlen >= 0 || !terse) {
- sv_insert(valstr, 0, 0, " = ", 3);
- sv_insert(valstr, 0, 0, SvPVX(name), SvCUR(name));
- sv_catpvn(valstr, ";", 1);
- }
- sv_catsv(retval, pad);
- sv_catsv(retval, valstr);
- sv_catsv(retval, sep);
- if (postlen >= 0) {
- I32 i;
- sv_catsv(retval, pad);
- for (i = 0; i <= postlen; ++i) {
- SV *elem;
- svp = av_fetch(postav, i, FALSE);
- if (svp && (elem = *svp)) {
- sv_catsv(retval, elem);
- if (i < postlen) {
- sv_catpvn(retval, ";", 1);
- sv_catsv(retval, sep);
- sv_catsv(retval, pad);
- }
- }
- }
- sv_catpvn(retval, ";", 1);
- sv_catsv(retval, sep);
- }
- sv_setpvn(valstr, "", 0);
- if (gimme == G_ARRAY) {
- XPUSHs(sv_2mortal(retval));
- if (i < imax) /* not the last time thro ? */
- retval = newSVpvn("",0);
- }
- }
- SvREFCNT_dec(postav);
- SvREFCNT_dec(valstr);
- }
- else
- croak("Call to new() method failed to return HASH ref");
- if (gimme == G_SCALAR)
- XPUSHs(sv_2mortal(retval));
- }
diff --git a/contrib/perl5/ext/Data/Dumper/Makefile.PL b/contrib/perl5/ext/Data/Dumper/Makefile.PL
deleted file mode 100644
index 12930c5..0000000
--- a/contrib/perl5/ext/Data/Dumper/Makefile.PL
+++ /dev/null
@@ -1,11 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => "Data::Dumper",
- VERSION_FROM => 'Dumper.pm',
- 'dist' => {
- COMPRESS => 'gzip -9f',
- SUFFIX => 'gz',
- DIST_DEFAULT => 'all tardist',
- },
- MAN3PODS => {},
-);
diff --git a/contrib/perl5/ext/Data/Dumper/Todo b/contrib/perl5/ext/Data/Dumper/Todo
deleted file mode 100644
index bd76e65..0000000
--- a/contrib/perl5/ext/Data/Dumper/Todo
+++ /dev/null
@@ -1,28 +0,0 @@
-=head1 NAME
-
-TODO - seeds germane, yet not germinated
-
-=head1 DESCRIPTION
-
-The following functionality will be supported in the next few releases.
-
-=over 4
-
-=item $Data::Dumper::Expdepth I<or> $I<OBJ>->Expdepth(I<NEWVAL>)
-
-Dump contents explicitly up to a certain depth and then use names for
-cross-referencing identical references. (useful in debugger, in situations
-where we don't care so much for cross-references).
-
-=item Make C<Dumpxs()> honor C<$Useqq>
-
-=item Fix formatting when Terse is set and Indent >= 2
-
-=item Output space after '\' (ref constructor) for high enough Indent
-
-=item Implement redesign that allows various backends (Perl, Lisp,
-some-binary-data-format, graph-description-languages, etc.)
-
-=item Dump traversal in breadth-first order
-
-=back
diff --git a/contrib/perl5/ext/Devel/DProf/Changes b/contrib/perl5/ext/Devel/DProf/Changes
deleted file mode 100644
index 216498b..0000000
--- a/contrib/perl5/ext/Devel/DProf/Changes
+++ /dev/null
@@ -1,176 +0,0 @@
-1999 Jan 8
-
- Ilya Zakharevich:
- Newer perls: Add PERL_POLLUTE and dTHR.
-
-1998 Nov 10
-This version of DProf should work with older Perls too, but to get
-full benefits some patches to 5.004_55 are needed. Patches take effect
-after new version of Perl is installed, and DProf recompiled.
-
-Without these patches the overhead of DProf is too big, thus the statistic
-may be very skewed.
-
-Oct 98:
- Ilya Zakharevich:
- DProf.xs
- - correct defstash to PL_defstash
- - nonlocal exits work
- dprofpp
- - nonlocal exits work
- DProf.pm
- - documentation updated
- t/test6.*
- - added
-
-Nov-Dec 97:
- Jason E. Holt and Ilya Zakharevich:
- DProf.xs
- - will not wait until completion to write the output, size of buffer
- regulated by PERL_DPROF_BUFFER, default 2**14 words;
-
- Ilya Zakharevich:
- dprofpp
- - smarter in fixing garbled profiles;
- - subtracts DProf output overhead, and suggested profiler overhead;
- - new options -A, -R, -g subroutine, -S;
- - handles 'goto' too;
- DProf.xs
- - 7x denser output (time separated from name, ids for subs);
- - outputs report-write overhead;
- - optional higher-resolution (currently OS/2 only, cannot grok VMS code);
- - outputs suggested profiler overhead;
- - handles 'goto' too;
- - handles PERL_DPROF_TICKS (on OS/2, VMS may be easily modified too)
-
-Jun 14, 97 andreas koenig adds the compatibility notes to the README
-and lets the Makefile.PL die on $] < 5.004.
-
-Jun 06, 97 andreas koenig applies a patch by gurusamy sarathy because
-Dean is not available for comments at that time. The patch is available
-from CPAN in the authors/id/GSAR directory for inspection.
-
-Sep 30, 96 dmr
- DProf.xs
- - added Ilya's patches to fix "&bar as &bar(@_)" bug. This also fixes
- the coredumps people have seen when using this with 5.003+.
- DProf.pm
- - updated manpage
- t/bug.t
- - moved to test5
- Makefile.PL
- - remove special case for bug.t
-
-Jun 26, 96 dmr
- dprofpp.PL
- - smarter r.e. to find VERSION in Makefile (for MM5.27).
- DProf.pm
- - updated manpage
- DProf.xs
- - keep pid of profiled process, if process forks then only the
- parent is profiled. Added test4 for this.
-
-Mar 2, 96 dmr
- README
- - updated
- dprofpp
- - updated manpage, point to DProf for raw profile description.
- DProf.pm
- - update manpage, update raw profile description with XS_VERSION.
- - update manpage for AUTOLOAD changes.
- DProf.xs
- - smart handling of &AUTOLOAD--looks in $AUTOLOAD for the sub name.
- this fixes one problem with corrupt profiles.
-
-Feb 5, 96 dmr
- dprofpp
- - updated manpage
- - added -E/-I for exclusive/inclusive times
- - added DPROFPP_OPTS -- lazily
- - added -p/-Q for profile-then-analyze
- - added version check
- dprofpp.PL
- - pull dprofpp's version id from the makefile
- DProf.pm
- - added version to bootstrap
- - updated doc
- - updated doc, DProf and -w are now friendly to each other
- DProf.xs
- - using savepv
- - added Tim's patch to check for DBsub, avoids -MDevel::DProf coredump
- - turn off warnings during newXS("DB::sub")
- tests
- - added Tim's patch to ignore Loader::import in results
- - added Tim's patch to aid readability of test?.v output
-
-
--- from those days when I kept a unique changelog for each module --
-
-# Devel::DProf - a Perl code profiler
-# 31oct95
-#
-# changes/bugs fixed since 5apr95 version -dmr:
-# -added VMS patches from CharlesB.
-# -now open ./tmon.out in BOOT.
-# changes/bugs fixed since 2apr95 version -dmr:
-# -now mallocing an extra byte for the \0 :)
-# changes/bugs fixed since 01mar95 version -dmr:
-# -stringified code ref is used for name of anonymous sub.
-# -include stash name with stringified code ref.
-# -use perl.c's DBsingle and DBsub.
-# -now using croak() and warn().
-# -print "timer is on" before turning timer on.
-# -use safefree() instead of free().
-# -rely on PM to provide full path name to tmon.out.
-# -print errno if unable to write tmon.out.
-# changes/bugs fixed since 03feb95 version -dmr:
-# -comments
-# changes/bugs fixed since 31dec94 version -dmr:
-# -added patches from AndyD.
-#
-
-# Devel::DProf - a Perl code profiler
-# 31oct95
-#
-# changes/bugs fixed since 05apr95 version -dmr:
-# - VMS-related prob; now let tmon.out name be handled in XS.
-# changes/bugs fixed since 01mar95 version -dmr:
-# - record $pwd and build pathname for tmon.out
-# changes/bugs fixed since 03feb95 version -dmr:
-# - fixed some doc bugs
-# - added require 5.000
-# - added -w note to bugs section of pod
-# changes/bugs fixed since 31dec94 version -dmr:
-# - podified
-#
-
-
-# dprofpp - display perl profile data
-# 31oct95
-#
-# changes/bugs fixed since 7oct95 version -dmr:
-# - PL'd
-# changes/bugs fixed since 5apr95 version -dmr:
-# - touch up handling of exit timestamps.
-# - suggests -F when exit timestamps are missing.
-# - added compressed execution tree patches from AchimB, put under -t.
-# now -z is the default action; user+system time.
-# - doc changes.
-# changes/bugs fixed since 10feb95 version -dmr:
-# - summary info is printed by default, opt_c is gone.
-# - fixed some doc bugs
-# - changed name to dprofpp
-# changes/bugs fixed since 03feb95 version -dmr:
-# - fixed division by zero.
-# - replace many local()s with my().
-# - now prints user+system times by default
-# now -u prints user time, -U prints unsorted.
-# - fixed documentation
-# - fixed output, to clarify that times are given in seconds.
-# - can now fake exit timestamps if the profile is garbled.
-# changes/bugs fixed since 17jun94 version -dmr:
-# - podified.
-# - correct old documentation flaws.
-# - added AndyD's patches.
-#
-
diff --git a/contrib/perl5/ext/Devel/DProf/DProf.pm b/contrib/perl5/ext/Devel/DProf/DProf.pm
deleted file mode 100644
index 38082fc..0000000
--- a/contrib/perl5/ext/Devel/DProf/DProf.pm
+++ /dev/null
@@ -1,196 +0,0 @@
-require 5.005_64;
-
-=head1 NAME
-
-Devel::DProf - a Perl code profiler
-
-=head1 SYNOPSIS
-
- perl5 -d:DProf test.pl
-
-=head1 DESCRIPTION
-
-The Devel::DProf package is a Perl code profiler. This will collect
-information on the execution time of a Perl script and of the subs in that
-script. This information can be used to determine which subroutines are
-using the most time and which subroutines are being called most often. This
-information can also be used to create an execution graph of the script,
-showing subroutine relationships.
-
-To profile a Perl script run the perl interpreter with the B<-d> debugging
-switch. The profiler uses the debugging hooks. So to profile script
-F<test.pl> the following command should be used:
-
- perl5 -d:DProf test.pl
-
-When the script terminates (or when the output buffer is filled) the
-profiler will dump the profile information to a file called
-F<tmon.out>. A tool like I<dprofpp> can be used to interpret the
-information which is in that profile. The following command will
-print the top 15 subroutines which used the most time:
-
- dprofpp
-
-To print an execution graph of the subroutines in the script use the
-following command:
-
- dprofpp -T
-
-Consult L<dprofpp> for other options.
-
-=head1 PROFILE FORMAT
-
-The old profile is a text file which looks like this:
-
- #fOrTyTwO
- $hz=100;
- $XS_VERSION='DProf 19970606';
- # All values are given in HZ
- $rrun_utime=2; $rrun_stime=0; $rrun_rtime=7
- PART2
- + 26 28 566822884 DynaLoader::import
- - 26 28 566822884 DynaLoader::import
- + 27 28 566822885 main::bar
- - 27 28 566822886 main::bar
- + 27 28 566822886 main::baz
- + 27 28 566822887 main::bar
- - 27 28 566822888 main::bar
- [....]
-
-The first line is the magic number. The second line is the hertz value, or
-clock ticks, of the machine where the profile was collected. The third line
-is the name and version identifier of the tool which created the profile.
-The fourth line is a comment. The fifth line contains three variables
-holding the user time, system time, and realtime of the process while it was
-being profiled. The sixth line indicates the beginning of the sub
-entry/exit profile section.
-
-The columns in B<PART2> are:
-
- sub entry(+)/exit(-) mark
- app's user time at sub entry/exit mark, in ticks
- app's system time at sub entry/exit mark, in ticks
- app's realtime at sub entry/exit mark, in ticks
- fully-qualified sub name, when possible
-
-With newer perls another format is used, which may look like this:
-
- #fOrTyTwO
- $hz=10000;
- $XS_VERSION='DProf 19971213';
- # All values are given in HZ
- $over_utime=5917; $over_stime=0; $over_rtime=5917;
- $over_tests=10000;
- $rrun_utime=1284; $rrun_stime=0; $rrun_rtime=1284;
- $total_marks=6;
-
- PART2
- @ 406 0 406
- & 2 main bar
- + 2
- @ 456 0 456
- - 2
- @ 1 0 1
- & 3 main baz
- + 3
- @ 141 0 141
- + 2
- @ 141 0 141
- - 2
- @ 1 0 1
- & 4 main foo
- + 4
- @ 142 0 142
- + & Devel::DProf::write
- @ 5 0 5
- - & Devel::DProf::write
-
-(with high value of $ENV{PERL_DPROF_TICKS}).
-
-New C<$over_*> values show the measured overhead of making $over_tests
-calls to the profiler These values are used by the profiler to
-subtract the overhead from the runtimes.
-
-The lines starting with C<@> mark time passed from the previous C<@>
-line. The lines starting with C<&> introduce new subroutine I<id> and
-show the package and the subroutine name of this id. Lines starting
-with C<+>, C<-> and C<*> mark entering and exit of subroutines by
-I<id>s, and C<goto &subr>.
-
-The I<old-style> C<+>- and C<->-lines are used to mark the overhead
-related to writing to profiler-output file.
-
-=head1 AUTOLOAD
-
-When Devel::DProf finds a call to an C<&AUTOLOAD> subroutine it looks at the
-C<$AUTOLOAD> variable to find the real name of the sub being called. See
-L<perlsub/"Autoloading">.
-
-=head1 ENVIRONMENT
-
-C<PERL_DPROF_BUFFER> sets size of output buffer in words. Defaults to 2**14.
-
-C<PERL_DPROF_TICKS> sets number of ticks per second on some systems where
-a replacement for times() is used. Defaults to the value of C<HZ> macro.
-
-C<PERL_DPROF_OUT_FILE_NAME> sets the name of the output file. If not set,
-defaults to tmon.out.
-
-=head1 BUGS
-
-Builtin functions cannot be measured by Devel::DProf.
-
-With a newer Perl DProf relies on the fact that the numeric slot of
-$DB::sub contains an address of a subroutine. Excessive manipulation
-of this variable may overwrite this slot, as in
-
- $DB::sub = 'current_sub';
- ...
- $addr = $DB::sub + 0;
-
-will set this numeric slot to numeric value of the string
-C<current_sub>, i.e., to C<0>. This will cause a segfault on the exit
-from this subroutine. Note that the first assignment above does not
-change the numeric slot (it will I<mark> it as invalid, but will not
-write over it).
-
-Mail bug reports and feature requests to the perl5-porters mailing list at
-F<E<lt>perl5-porters@perl.orgE<gt>>.
-
-=head1 SEE ALSO
-
-L<perl>, L<dprofpp>, times(2)
-
-=cut
-
-# This sub is needed for calibration.
-package Devel::DProf;
-
-sub NONESUCH_noxs {
- return $Devel::DProf::VERSION;
-}
-
-package DB;
-
-#
-# As of perl5.003_20, &DB::sub stub is not needed (some versions
-# even had problems if stub was redefined with XS version).
-#
-
-# disable DB single-stepping
-BEGIN { $single = 0; }
-
-# This sub is needed during startup.
-sub DB {
-# print "nonXS DBDB\n";
-}
-
-use XSLoader ();
-
-# Underscore to allow older Perls to access older version from CPAN
-$Devel::DProf::VERSION = '20000000.00_00'; # this version not authorized by
- # Dean Roehrich. See "Changes" file.
-
-XSLoader::load 'Devel::DProf', $Devel::DProf::VERSION;
-
-1;
diff --git a/contrib/perl5/ext/Devel/DProf/DProf.xs b/contrib/perl5/ext/Devel/DProf/DProf.xs
deleted file mode 100644
index aba6de9..0000000
--- a/contrib/perl5/ext/Devel/DProf/DProf.xs
+++ /dev/null
@@ -1,679 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-/*#define DBG_SUB 1 */
-/*#define DBG_TIMER 1 */
-
-#ifdef DBG_SUB
-# define DBG_SUB_NOTIFY(A,B) warn(A, B)
-#else
-# define DBG_SUB_NOTIFY(A,B) /* nothing */
-#endif
-
-#ifdef DBG_TIMER
-# define DBG_TIMER_NOTIFY(A) warn(A)
-#else
-# define DBG_TIMER_NOTIFY(A) /* nothing */
-#endif
-
-/* HZ == clock ticks per second */
-#ifdef VMS
-# define HZ ((I32)CLK_TCK)
-# define DPROF_HZ HZ
-# include <starlet.h> /* prototype for sys$gettim() */
-# include <lib$routines.h>
-# define Times(ptr) (dprof_times(aTHX_ ptr))
-#else
-# ifndef HZ
-# ifdef CLK_TCK
-# define HZ ((I32)CLK_TCK)
-# else
-# define HZ 60
-# endif
-# endif
-# ifdef OS2 /* times() has significant overhead */
-# define Times(ptr) (dprof_times(aTHX_ ptr))
-# define INCL_DOSPROFILE
-# define INCL_DOSERRORS
-# include <os2.h>
-# define toLongLong(arg) (*(long long*)&(arg))
-# define DPROF_HZ g_dprof_ticks
-# else
-# define Times(ptr) (times(ptr))
-# define DPROF_HZ HZ
-# endif
-#endif
-
-XS(XS_Devel__DProf_END); /* used by prof_mark() */
-
-/* Everything is built on times(2). See its manpage for a description
- * of the timings.
- */
-
-union prof_any {
- clock_t tms_utime; /* cpu time spent in user space */
- clock_t tms_stime; /* cpu time spent in system */
- clock_t realtime; /* elapsed real time, in ticks */
- char *name;
- U32 id;
- opcode ptype;
-};
-
-typedef union prof_any PROFANY;
-
-typedef struct {
- U32 dprof_ticks;
- char* out_file_name; /* output file (defaults to tmon.out) */
- PerlIO* fp; /* pointer to tmon.out file */
- long TIMES_LOCATION; /* Where in the file to store the time totals */
- int SAVE_STACK; /* How much data to buffer until end of run */
- int prof_pid; /* pid of profiled process */
- struct tms prof_start;
- struct tms prof_end;
- clock_t rprof_start; /* elapsed real time ticks */
- clock_t rprof_end;
- clock_t wprof_u;
- clock_t wprof_s;
- clock_t wprof_r;
- clock_t otms_utime;
- clock_t otms_stime;
- clock_t orealtime;
- PROFANY* profstack;
- int profstack_max;
- int profstack_ix;
- HV* cv_hash;
- U32 total;
- U32 lastid;
- U32 default_perldb;
- U32 depth;
-#ifdef OS2
- ULONG frequ;
- long long start_cnt;
-#endif
-#ifdef PERL_IMPLICIT_CONTEXT
-# define register
- pTHX;
-# undef register
-#endif
-} prof_state_t;
-
-prof_state_t g_prof_state;
-
-#define g_dprof_ticks g_prof_state.dprof_ticks
-#define g_out_file_name g_prof_state.out_file_name
-#define g_fp g_prof_state.fp
-#define g_TIMES_LOCATION g_prof_state.TIMES_LOCATION
-#define g_SAVE_STACK g_prof_state.SAVE_STACK
-#define g_prof_pid g_prof_state.prof_pid
-#define g_prof_start g_prof_state.prof_start
-#define g_prof_end g_prof_state.prof_end
-#define g_rprof_start g_prof_state.rprof_start
-#define g_rprof_end g_prof_state.rprof_end
-#define g_wprof_u g_prof_state.wprof_u
-#define g_wprof_s g_prof_state.wprof_s
-#define g_wprof_r g_prof_state.wprof_r
-#define g_otms_utime g_prof_state.otms_utime
-#define g_otms_stime g_prof_state.otms_stime
-#define g_orealtime g_prof_state.orealtime
-#define g_profstack g_prof_state.profstack
-#define g_profstack_max g_prof_state.profstack_max
-#define g_profstack_ix g_prof_state.profstack_ix
-#define g_cv_hash g_prof_state.cv_hash
-#define g_total g_prof_state.total
-#define g_lastid g_prof_state.lastid
-#define g_default_perldb g_prof_state.default_perldb
-#define g_depth g_prof_state.depth
-#ifdef PERL_IMPLICIT_CONTEXT
-# define g_THX g_prof_state.aTHX
-#endif
-#ifdef OS2
-# define g_frequ g_prof_state.frequ
-# define g_start_cnt g_prof_state.start_cnt
-#endif
-
-clock_t
-dprof_times(pTHX_ struct tms *t)
-{
-#ifdef OS2
- ULONG rc;
- QWORD cnt;
- STRLEN n_a;
-
- if (!g_frequ) {
- if (CheckOSError(DosTmrQueryFreq(&g_frequ)))
- croak("DosTmrQueryFreq: %s", SvPV(perl_get_sv("!",TRUE),n_a));
- else
- g_frequ = g_frequ/DPROF_HZ; /* count per tick */
- if (CheckOSError(DosTmrQueryTime(&cnt)))
- croak("DosTmrQueryTime: %s",
- SvPV(perl_get_sv("!",TRUE), n_a));
- g_start_cnt = toLongLong(cnt);
- }
-
- if (CheckOSError(DosTmrQueryTime(&cnt)))
- croak("DosTmrQueryTime: %s", SvPV(perl_get_sv("!",TRUE), n_a));
- t->tms_stime = 0;
- return (t->tms_utime = (toLongLong(cnt) - g_start_cnt)/g_frequ);
-#else /* !OS2 */
-# ifdef VMS
- clock_t retval;
- /* Get wall time and convert to 10 ms intervals to
- * produce the return value dprof expects */
-# if defined(__DECC) && defined (__ALPHA)
-# include <ints.h>
- uint64 vmstime;
- _ckvmssts(sys$gettim(&vmstime));
- vmstime /= 100000;
- retval = vmstime & 0x7fffffff;
-# else
- /* (Older hw or ccs don't have an atomic 64-bit type, so we
- * juggle 32-bit ints (and a float) to produce a time_t result
- * with minimal loss of information.) */
- long int vmstime[2],remainder,divisor = 100000;
- _ckvmssts(sys$gettim((unsigned long int *)vmstime));
- vmstime[1] &= 0x7fff; /* prevent overflow in EDIV */
- _ckvmssts(lib$ediv(&divisor,vmstime,(long int *)&retval,&remainder));
-# endif
- /* Fill in the struct tms using the CRTL routine . . .*/
- times((tbuffer_t *)t);
- return (clock_t) retval;
-# else /* !VMS && !OS2 */
- return times(t);
-# endif
-#endif
-}
-
-static void
-prof_dumpa(pTHX_ opcode ptype, U32 id)
-{
- if (ptype == OP_LEAVESUB) {
- PerlIO_printf(g_fp,"- %"UVxf"\n", (UV)id);
- }
- else if(ptype == OP_ENTERSUB) {
- PerlIO_printf(g_fp,"+ %"UVxf"\n", (UV)id);
- }
- else if(ptype == OP_GOTO) {
- PerlIO_printf(g_fp,"* %"UVxf"\n", (UV)id);
- }
- else if(ptype == OP_DIE) {
- PerlIO_printf(g_fp,"/ %"UVxf"\n", (UV)id);
- }
- else {
- PerlIO_printf(g_fp,"Profiler unknown prof code %d\n", ptype);
- }
-}
-
-static void
-prof_dumps(pTHX_ U32 id, char *pname, char *gname)
-{
- PerlIO_printf(g_fp,"& %"UVxf" %s %s\n", (UV)id, pname, gname);
-}
-
-static void
-prof_dumpt(pTHX_ long tms_utime, long tms_stime, long realtime)
-{
- PerlIO_printf(g_fp,"@ %ld %ld %ld\n", tms_utime, tms_stime, realtime);
-}
-
-static void
-prof_dump_until(pTHX_ long ix)
-{
- long base = 0;
- struct tms t1, t2;
- clock_t realtime1, realtime2;
-
- realtime1 = Times(&t1);
-
- while (base < ix) {
- opcode ptype = g_profstack[base++].ptype;
- if (ptype == OP_TIME) {
- long tms_utime = g_profstack[base++].tms_utime;
- long tms_stime = g_profstack[base++].tms_stime;
- long realtime = g_profstack[base++].realtime;
-
- prof_dumpt(aTHX_ tms_utime, tms_stime, realtime);
- }
- else if (ptype == OP_GV) {
- U32 id = g_profstack[base++].id;
- char *pname = g_profstack[base++].name;
- char *gname = g_profstack[base++].name;
-
- prof_dumps(aTHX_ id, pname, gname);
- }
- else {
- U32 id = g_profstack[base++].id;
- prof_dumpa(aTHX_ ptype, id);
- }
- }
- PerlIO_flush(g_fp);
- realtime2 = Times(&t2);
- if (realtime2 != realtime1 || t1.tms_utime != t2.tms_utime
- || t1.tms_stime != t2.tms_stime) {
- g_wprof_r += realtime2 - realtime1;
- g_wprof_u += t2.tms_utime - t1.tms_utime;
- g_wprof_s += t2.tms_stime - t1.tms_stime;
-
- PerlIO_printf(g_fp,"+ & Devel::DProf::write\n");
- PerlIO_printf(g_fp,"@ %"IVdf" %"IVdf" %"IVdf"\n",
- /* The (IV) casts are one possibility:
- * the Painfully Correct Way would be to
- * have Clock_t_f. */
- (IV)(t2.tms_utime - t1.tms_utime),
- (IV)(t2.tms_stime - t1.tms_stime),
- (IV)(realtime2 - realtime1));
- PerlIO_printf(g_fp,"- & Devel::DProf::write\n");
- g_otms_utime = t2.tms_utime;
- g_otms_stime = t2.tms_stime;
- g_orealtime = realtime2;
- PerlIO_flush(g_fp);
- }
-}
-
-static void
-prof_mark(pTHX_ opcode ptype)
-{
- struct tms t;
- clock_t realtime, rdelta, udelta, sdelta;
- U32 id;
- SV *Sub = GvSV(PL_DBsub); /* name of current sub */
-
- if (g_SAVE_STACK) {
- if (g_profstack_ix + 5 > g_profstack_max) {
- g_profstack_max = g_profstack_max * 3 / 2;
- Renew(g_profstack, g_profstack_max, PROFANY);
- }
- }
-
- realtime = Times(&t);
- rdelta = realtime - g_orealtime;
- udelta = t.tms_utime - g_otms_utime;
- sdelta = t.tms_stime - g_otms_stime;
- if (rdelta || udelta || sdelta) {
- if (g_SAVE_STACK) {
- g_profstack[g_profstack_ix++].ptype = OP_TIME;
- g_profstack[g_profstack_ix++].tms_utime = udelta;
- g_profstack[g_profstack_ix++].tms_stime = sdelta;
- g_profstack[g_profstack_ix++].realtime = rdelta;
- }
- else { /* Write it to disk now so's not to eat up core */
- if (g_prof_pid == (int)getpid()) {
- prof_dumpt(aTHX_ udelta, sdelta, rdelta);
- PerlIO_flush(g_fp);
- }
- }
- g_orealtime = realtime;
- g_otms_stime = t.tms_stime;
- g_otms_utime = t.tms_utime;
- }
-
- {
- SV **svp;
- char *gname, *pname;
- CV *cv;
-
- cv = INT2PTR(CV*,SvIVX(Sub));
- svp = hv_fetch(g_cv_hash, (char*)&cv, sizeof(CV*), TRUE);
- if (!SvOK(*svp)) {
- GV *gv = CvGV(cv);
-
- sv_setiv(*svp, id = ++g_lastid);
- pname = ((GvSTASH(gv) && HvNAME(GvSTASH(gv)))
- ? HvNAME(GvSTASH(gv))
- : "(null)");
- gname = GvNAME(gv);
- if (CvXSUB(cv) == XS_Devel__DProf_END)
- return;
- if (g_SAVE_STACK) { /* Store it for later recording -JH */
- g_profstack[g_profstack_ix++].ptype = OP_GV;
- g_profstack[g_profstack_ix++].id = id;
- g_profstack[g_profstack_ix++].name = pname;
- g_profstack[g_profstack_ix++].name = gname;
- }
- else { /* Write it to disk now so's not to eat up core */
- /* Only record the parent's info */
- if (g_prof_pid == (int)getpid()) {
- prof_dumps(aTHX_ id, pname, gname);
- PerlIO_flush(g_fp);
- }
- else
- PL_perldb = 0; /* Do not debug the kid. */
- }
- }
- else {
- id = SvIV(*svp);
- }
- }
-
- g_total++;
- if (g_SAVE_STACK) { /* Store it for later recording -JH */
- g_profstack[g_profstack_ix++].ptype = ptype;
- g_profstack[g_profstack_ix++].id = id;
-
- /* Only record the parent's info */
- if (g_SAVE_STACK < g_profstack_ix) {
- if (g_prof_pid == (int)getpid())
- prof_dump_until(aTHX_ g_profstack_ix);
- else
- PL_perldb = 0; /* Do not debug the kid. */
- g_profstack_ix = 0;
- }
- }
- else { /* Write it to disk now so's not to eat up core */
-
- /* Only record the parent's info */
- if (g_prof_pid == (int)getpid()) {
- prof_dumpa(aTHX_ ptype, id);
- PerlIO_flush(g_fp);
- }
- else
- PL_perldb = 0; /* Do not debug the kid. */
- }
-}
-
-#ifdef PL_NEEDED
-# define defstash PL_defstash
-#endif
-
-/* Counts overhead of prof_mark and extra XS call. */
-static void
-test_time(pTHX_ clock_t *r, clock_t *u, clock_t *s)
-{
- CV *cv = perl_get_cv("Devel::DProf::NONESUCH_noxs", FALSE);
- int i, j, k = 0;
- HV *oldstash = PL_curstash;
- struct tms t1, t2;
- clock_t realtime1, realtime2;
- U32 ototal = g_total;
- U32 ostack = g_SAVE_STACK;
- U32 operldb = PL_perldb;
-
- g_SAVE_STACK = 1000000;
- realtime1 = Times(&t1);
-
- while (k < 2) {
- i = 0;
- /* Disable debugging of perl_call_sv on second pass: */
- PL_curstash = (k == 0 ? PL_defstash : PL_debstash);
- PL_perldb = g_default_perldb;
- while (++i <= 100) {
- j = 0;
- g_profstack_ix = 0; /* Do not let the stack grow */
- while (++j <= 100) {
-/* prof_mark(aTHX_ OP_ENTERSUB); */
-
- PUSHMARK(PL_stack_sp);
- perl_call_sv((SV*)cv, G_SCALAR);
- PL_stack_sp--;
-/* prof_mark(aTHX_ OP_LEAVESUB); */
- }
- }
- PL_curstash = oldstash;
- if (k == 0) { /* Put time with debugging */
- realtime2 = Times(&t2);
- *r = realtime2 - realtime1;
- *u = t2.tms_utime - t1.tms_utime;
- *s = t2.tms_stime - t1.tms_stime;
- }
- else { /* Subtract time without debug */
- realtime1 = Times(&t1);
- *r -= realtime1 - realtime2;
- *u -= t1.tms_utime - t2.tms_utime;
- *s -= t1.tms_stime - t2.tms_stime;
- }
- k++;
- }
- g_total = ototal;
- g_SAVE_STACK = ostack;
- PL_perldb = operldb;
-}
-
-static void
-prof_recordheader(pTHX)
-{
- clock_t r, u, s;
-
- /* g_fp is opened in the BOOT section */
- PerlIO_printf(g_fp, "#fOrTyTwO\n");
- PerlIO_printf(g_fp, "$hz=%"IVdf";\n", (IV)DPROF_HZ);
- PerlIO_printf(g_fp, "$XS_VERSION='DProf %s';\n", XS_VERSION);
- PerlIO_printf(g_fp, "# All values are given in HZ\n");
- test_time(aTHX_ &r, &u, &s);
- PerlIO_printf(g_fp,
- "$over_utime=%"IVdf"; $over_stime=%"IVdf"; $over_rtime=%"IVdf";\n",
- /* The (IV) casts are one possibility:
- * the Painfully Correct Way would be to
- * have Clock_t_f. */
- (IV)u, (IV)s, (IV)r);
- PerlIO_printf(g_fp, "$over_tests=10000;\n");
-
- g_TIMES_LOCATION = PerlIO_tell(g_fp);
-
- /* Pad with whitespace. */
- /* This should be enough even for very large numbers. */
- PerlIO_printf(g_fp, "%*s\n", 240 , "");
-
- PerlIO_printf(g_fp, "\n");
- PerlIO_printf(g_fp, "PART2\n");
-
- PerlIO_flush(g_fp);
-}
-
-static void
-prof_record(pTHX)
-{
- /* g_fp is opened in the BOOT section */
-
- /* Now that we know the runtimes, fill them in at the recorded
- location -JH */
-
- if (g_SAVE_STACK) {
- prof_dump_until(aTHX_ g_profstack_ix);
- }
- PerlIO_seek(g_fp, g_TIMES_LOCATION, SEEK_SET);
- /* Write into reserved 240 bytes: */
- PerlIO_printf(g_fp,
- "$rrun_utime=%"IVdf"; $rrun_stime=%"IVdf"; $rrun_rtime=%"IVdf";",
- /* The (IV) casts are one possibility:
- * the Painfully Correct Way would be to
- * have Clock_t_f. */
- (IV)(g_prof_end.tms_utime-g_prof_start.tms_utime-g_wprof_u),
- (IV)(g_prof_end.tms_stime-g_prof_start.tms_stime-g_wprof_s),
- (IV)(g_rprof_end-g_rprof_start-g_wprof_r));
- PerlIO_printf(g_fp, "\n$total_marks=%"IVdf, (IV)g_total);
-
- PerlIO_close(g_fp);
-}
-
-#define NONESUCH()
-
-static void
-check_depth(pTHX_ void *foo)
-{
- U32 need_depth = PTR2UV(foo);
- if (need_depth != g_depth) {
- if (need_depth > g_depth) {
- warn("garbled call depth when profiling");
- }
- else {
- I32 marks = g_depth - need_depth;
-
-/* warn("Check_depth: got %d, expected %d\n", g_depth, need_depth); */
- while (marks--) {
- prof_mark(aTHX_ OP_DIE);
- }
- g_depth = need_depth;
- }
- }
-}
-
-#define for_real
-#ifdef for_real
-
-XS(XS_DB_sub)
-{
- dXSARGS;
- dORIGMARK;
- SV *Sub = GvSV(PL_DBsub); /* name of current sub */
-
-#ifdef PERL_IMPLICIT_CONTEXT
- /* profile only the interpreter that loaded us */
- if (g_THX != aTHX) {
- PUSHMARK(ORIGMARK);
- perl_call_sv(INT2PTR(SV*,SvIV(Sub)), GIMME | G_NODEBUG);
- }
- else
-#endif
- {
- HV *oldstash = PL_curstash;
-
- DBG_SUB_NOTIFY("XS DBsub(%s)\n", SvPV_nolen(Sub));
-
- SAVEDESTRUCTOR_X(check_depth, (void*)g_depth);
- g_depth++;
-
- prof_mark(aTHX_ OP_ENTERSUB);
- PUSHMARK(ORIGMARK);
- perl_call_sv(INT2PTR(SV*,SvIV(Sub)), GIMME | G_NODEBUG);
- PL_curstash = oldstash;
- prof_mark(aTHX_ OP_LEAVESUB);
- g_depth--;
- }
- return;
-}
-
-XS(XS_DB_goto)
-{
-#ifdef PERL_IMPLICIT_CONTEXT
- if (g_THX == aTHX)
-#endif
- {
- prof_mark(aTHX_ OP_GOTO);
- return;
- }
-}
-
-#endif /* for_real */
-
-#ifdef testing
-
- MODULE = Devel::DProf PACKAGE = DB
-
- void
- sub(...)
- PPCODE:
- {
- dORIGMARK;
- HV *oldstash = PL_curstash;
- SV *Sub = GvSV(PL_DBsub); /* name of current sub */
- /* SP -= items; added by xsubpp */
- DBG_SUB_NOTIFY("XS DBsub(%s)\n", SvPV_nolen(Sub));
-
- sv_setiv(PL_DBsingle, 0); /* disable DB single-stepping */
-
- prof_mark(aTHX_ OP_ENTERSUB);
- PUSHMARK(ORIGMARK);
-
- PL_curstash = PL_debstash; /* To disable debugging of perl_call_sv */
- perl_call_sv(Sub, GIMME);
- PL_curstash = oldstash;
-
- prof_mark(aTHX_ OP_LEAVESUB);
- SPAGAIN;
- /* PUTBACK; added by xsubpp */
- }
-
-#endif /* testing */
-
-MODULE = Devel::DProf PACKAGE = Devel::DProf
-
-void
-END()
-PPCODE:
- {
- if (PL_DBsub) {
- /* maybe the process forked--we want only
- * the parent's profile.
- */
- if (
-#ifdef PERL_IMPLICIT_CONTEXT
- g_THX == aTHX &&
-#endif
- g_prof_pid == (int)getpid())
- {
- g_rprof_end = Times(&g_prof_end);
- DBG_TIMER_NOTIFY("Profiler timer is off.\n");
- prof_record(aTHX);
- }
- }
- }
-
-void
-NONESUCH()
-
-BOOT:
- {
- g_TIMES_LOCATION = 42;
- g_SAVE_STACK = 1<<14;
- g_profstack_max = 128;
-#ifdef PERL_IMPLICIT_CONTEXT
- g_THX = aTHX;
-#endif
-
- /* Before we go anywhere make sure we were invoked
- * properly, else we'll dump core.
- */
- if (!PL_DBsub)
- croak("DProf: run perl with -d to use DProf.\n");
-
- /* When we hook up the XS DB::sub we'll be redefining
- * the DB::sub from the PM file. Turn off warnings
- * while we do this.
- */
- {
- I32 warn_tmp = PL_dowarn;
- PL_dowarn = 0;
- newXS("DB::sub", XS_DB_sub, file);
- newXS("DB::goto", XS_DB_goto, file);
- PL_dowarn = warn_tmp;
- }
-
- sv_setiv(PL_DBsingle, 0); /* disable DB single-stepping */
-
- {
- char *buffer = getenv("PERL_DPROF_BUFFER");
-
- if (buffer) {
- g_SAVE_STACK = atoi(buffer);
- }
-
- buffer = getenv("PERL_DPROF_TICKS");
-
- if (buffer) {
- g_dprof_ticks = atoi(buffer); /* Used under OS/2 only */
- }
- else {
- g_dprof_ticks = HZ;
- }
-
- buffer = getenv("PERL_DPROF_OUT_FILE_NAME");
- g_out_file_name = savepv(buffer ? buffer : "tmon.out");
- }
-
- if ((g_fp = PerlIO_open(g_out_file_name, "w")) == NULL)
- croak("DProf: unable to write '%s', errno = %d\n",
- g_out_file_name, errno);
-
- g_default_perldb = PERLDBf_NONAME | PERLDBf_SUB | PERLDBf_GOTO;
- g_cv_hash = newHV();
- g_prof_pid = (int)getpid();
-
- New(0, g_profstack, g_profstack_max, PROFANY);
- prof_recordheader(aTHX);
- DBG_TIMER_NOTIFY("Profiler timer is on.\n");
- g_orealtime = g_rprof_start = Times(&g_prof_start);
- g_otms_utime = g_prof_start.tms_utime;
- g_otms_stime = g_prof_start.tms_stime;
- PL_perldb = g_default_perldb;
- }
diff --git a/contrib/perl5/ext/Devel/DProf/Makefile.PL b/contrib/perl5/ext/Devel/DProf/Makefile.PL
deleted file mode 100644
index 667cc52..0000000
--- a/contrib/perl5/ext/Devel/DProf/Makefile.PL
+++ /dev/null
@@ -1,17 +0,0 @@
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
- NAME => 'Devel::DProf',
- DISTNAME => 'DProf',
- VERSION_FROM => 'DProf.pm',
- clean => { 'FILES' => 'tmon.out t/tmon.out t/err'},
- XSPROTOARG => '-noprototypes',
- DEFINE => '-DPERLDBf_NONAME=0x40 -DPERLDBf_GOTO=0x80 '
- .'-DG_NODEBUG=32 -DPL_NEEDED',
- dist => {
- COMPRESS => 'gzip -9f',
- SUFFIX => 'gz',
- DIST_DEFAULT => 'all tardist',
- },
- MAN3PODS => {},
-);
diff --git a/contrib/perl5/ext/Devel/DProf/Todo b/contrib/perl5/ext/Devel/DProf/Todo
deleted file mode 100644
index 0e00347..0000000
--- a/contrib/perl5/ext/Devel/DProf/Todo
+++ /dev/null
@@ -1,13 +0,0 @@
-- work on test suite.
-- localize the depth to guard against non-local exits.
-Current overhead (with PERLDBf_NONAME) wrt non-debugging run (estimates):
- 8% extra call frame on DB::sub
- 7% output of subroutine data
- 70% output of timing data (on OS/2, 35% with custom dprof_times())
-(Additional 17% are spent to write the output, but they are counted
- and subtracted.)
-
-With compensation for DProf overhead all but some odd 12% are subtracted ?!
-
-- Calculate overhead/count for XS calls and Perl calls separately.
-- goto &XSUB in pp_ctl.c;
diff --git a/contrib/perl5/ext/Devel/Peek/Changes b/contrib/perl5/ext/Devel/Peek/Changes
deleted file mode 100644
index e143f87..0000000
--- a/contrib/perl5/ext/Devel/Peek/Changes
+++ /dev/null
@@ -1,64 +0,0 @@
-0.3: Some functions return SV * now.
-0.4: Hashes dumped recursively.
- Additional fields for CV added.
-0.5: Prototypes for functions supported.
- Strings are consostently in quotes now.
- Name changed to Devel::Peek (former ExtUtils::Peek).
-0.7:
- New function mstat added.
- Docs added (thanks to Dean Roehrich).
-
-0.8:
- Exports Dump and mstat.
- Docs list more details.
- Arrays print addresses of SV.
- CV: STASH renamed to COMP_STASH. The package of GV is printed now.
- Updated for newer overloading implementation (but will not report
- packages with overloading).
-0.81:
- Implements and exports DeadCode().
- Buglet in the definition of mstat for malloc-less perl corrected.
-0.82:
- New style PADless CV allowed.
-0.83:
- DumpArray added.
- Compatible with PerlIO.
- When calculating junk inside subs, divide by refcount.
-0.84:
- Indented output.
-0.85:
- By Gisle Aas: format SvPVX, print magic (but not unrefcounted mg_obj);
- A lot of new fields stolen from sv_dump();
-0.86:
- By Gisle Aas:
- - Updated the documentation.
- - Move string printer to it's own function: fprintpv()
- - Use it to print PVs, HV keys, MG_PTR
- - Don't print IV for hashes as KEY is the same field
- - Tag GvSTASH as "GvSTASH" in order to not confuse it with
- the other STASH field, e.g. Dump(bless \*foo, "bar")
-0.87:
- Extra indentation of SvRV.
- AMAGIC removed.
- Head of OOK data printed too.
-0.88:
- PADLIST and OUTSIDE of CVs itemized.
- Prints the value of the hash of HV keys.
- Changes by Gisle: do not print both if AvARRAY == AvALLOC;
- print hash fill statistics.
-0.89:
- Changes by Gisle: optree dump.
-0.90:
- DumpWithOP, DumpProg exported.
- Better indent for AV, HV elts.
- Address of SV printed.
- Corrected Zero code which was causing segfaults.
-0.91:
- Compiles, runs test under 5.005beta2.
- Update DEBUGGING_MSTATS-less MSTATS.
-0.92:
- Should compile without MYMALLOC too.
-0.94:
- Had problems with HEf_SVKEY magic.
-0.95:
- Added "hash quality" output to estimate Perl's hash functions.
diff --git a/contrib/perl5/ext/Devel/Peek/Makefile.PL b/contrib/perl5/ext/Devel/Peek/Makefile.PL
deleted file mode 100644
index f6d0cc9..0000000
--- a/contrib/perl5/ext/Devel/Peek/Makefile.PL
+++ /dev/null
@@ -1,12 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => "Devel::Peek",
- VERSION_FROM => 'Peek.pm',
- XSPROTOARG => '-noprototypes',
- 'dist' => {
- COMPRESS => 'gzip -9f',
- SUFFIX => 'gz',
- DIST_DEFAULT => 'all tardist',
- },
- MAN3PODS => {},
-);
diff --git a/contrib/perl5/ext/Devel/Peek/Peek.pm b/contrib/perl5/ext/Devel/Peek/Peek.pm
deleted file mode 100644
index 0850172..0000000
--- a/contrib/perl5/ext/Devel/Peek/Peek.pm
+++ /dev/null
@@ -1,494 +0,0 @@
-# Devel::Peek - A data debugging tool for the XS programmer
-# The documentation is after the __END__
-
-package Devel::Peek;
-
-# Underscore to allow older Perls to access older version from CPAN
-$VERSION = '1.00_01';
-
-require Exporter;
-use XSLoader ();
-
-@ISA = qw(Exporter);
-@EXPORT = qw(Dump mstat DeadCode DumpArray DumpWithOP DumpProg
- fill_mstats mstats_fillhash mstats2hash);
-@EXPORT_OK = qw(SvREFCNT SvREFCNT_inc SvREFCNT_dec CvGV);
-%EXPORT_TAGS = ('ALL' => [@EXPORT, @EXPORT_OK]);
-
-XSLoader::load 'Devel::Peek';
-
-sub DumpWithOP ($;$) {
- local($Devel::Peek::dump_ops)=1;
- my $depth = @_ > 1 ? $_[1] : 4 ;
- Dump($_[0],$depth);
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Devel::Peek - A data debugging tool for the XS programmer
-
-=head1 SYNOPSIS
-
- use Devel::Peek;
- Dump( $a );
- Dump( $a, 5 );
- DumpArray( 5, $a, $b, ... );
- mstat "Point 5";
-
-=head1 DESCRIPTION
-
-Devel::Peek contains functions which allows raw Perl datatypes to be
-manipulated from a Perl script. This is used by those who do XS programming
-to check that the data they are sending from C to Perl looks as they think
-it should look. The trick, then, is to know what the raw datatype is
-supposed to look like when it gets to Perl. This document offers some tips
-and hints to describe good and bad raw data.
-
-It is very possible that this document will fall far short of being useful
-to the casual reader. The reader is expected to understand the material in
-the first few sections of L<perlguts>.
-
-Devel::Peek supplies a C<Dump()> function which can dump a raw Perl
-datatype, and C<mstat("marker")> function to report on memory usage
-(if perl is compiled with corresponding option). The function
-DeadCode() provides statistics on the data "frozen" into inactive
-C<CV>. Devel::Peek also supplies C<SvREFCNT()>, C<SvREFCNT_inc()>, and
-C<SvREFCNT_dec()> which can query, increment, and decrement reference
-counts on SVs. This document will take a passive, and safe, approach
-to data debugging and for that it will describe only the C<Dump()>
-function.
-
-Function C<DumpArray()> allows dumping of multiple values (useful when you
-need to analyze returns of functions).
-
-The global variable $Devel::Peek::pv_limit can be set to limit the
-number of character printed in various string values. Setting it to 0
-means no limit.
-
-=head2 Memory footprint debugging
-
-When perl is compiled with support for memory footprint debugging
-(default with Perl's malloc()), Devel::Peek provides an access to this API.
-
-Use mstat() function to emit a memory state statistic to the terminal.
-For more information on the format of output of mstat() see
-L<perldebug/Using C<$ENV{PERL_DEBUG_MSTATS}>>.
-
-Three additional functions allow access to this statistic from Perl.
-First, use C<mstats_fillhash(%hash)> to get the information contained
-in the output of mstat() into %hash. The field of this hash are
-
- minbucket nbuckets sbrk_good sbrk_slack sbrked_remains sbrks start_slack
- topbucket topbucket_ev topbucket_odd total total_chain total_sbrk totfree
-
-Two additional fields C<free>, C<used> contain array references which
-provide per-bucket count of free and used chunks. Two other fields
-C<mem_size>, C<available_size> contain array references which provide
-the information about the allocated size and usable size of chunks in
-each bucket. Again, see L<perldebug/Using C<$ENV{PERL_DEBUG_MSTATS}>>
-for details.
-
-Keep in mind that only the first several "odd-numbered" buckets are
-used, so the information on size of the "odd-numbered" buckets which are
-not used is probably meaningless.
-
-The information in
-
- mem_size available_size minbucket nbuckets
-
-is the property of a particular build of perl, and does not depend on
-the current process. If you do not provide the optional argument to
-the functions mstats_fillhash(), fill_mstats(), mstats2hash(), then
-the information in fields C<mem_size>, C<available_size> is not
-updated.
-
-C<fill_mstats($buf)> is a much cheaper call (both speedwise and
-memory-wise) which collects the statistic into $buf in
-machine-readable form. At a later moment you may need to call
-C<mstats2hash($buf, %hash)> to use this information to fill %hash.
-
-All three APIs C<fill_mstats($buf)>, C<mstats_fillhash(%hash)>, and
-C<mstats2hash($buf, %hash)> are designed to allocate no memory if used
-I<the second time> on the same $buf and/or %hash.
-
-So, if you want to collect memory info in a cycle, you may call
-
- $#buf = 999;
- fill_mstats($_) for @buf;
- mstats_fillhash(%report, 1); # Static info too
-
- foreach (@buf) {
- # Do something...
- fill_mstats $_; # Collect statistic
- }
- foreach (@buf) {
- mstats2hash($_, %report); # Preserve static info
- # Do something with %report
- }
-
-=head1 EXAMPLES
-
-The following examples don't attempt to show everything as that would be a
-monumental task, and, frankly, we don't want this manpage to be an internals
-document for Perl. The examples do demonstrate some basics of the raw Perl
-datatypes, and should suffice to get most determined people on their way.
-There are no guidewires or safety nets, nor blazed trails, so be prepared to
-travel alone from this point and on and, if at all possible, don't fall into
-the quicksand (it's bad for business).
-
-Oh, one final bit of advice: take L<perlguts> with you. When you return we
-expect to see it well-thumbed.
-
-=head2 A simple scalar string
-
-Let's begin by looking a simple scalar which is holding a string.
-
- use Devel::Peek;
- $a = "hello";
- Dump $a;
-
-The output:
-
- SV = PVIV(0xbc288)
- REFCNT = 1
- FLAGS = (POK,pPOK)
- IV = 0
- PV = 0xb2048 "hello"\0
- CUR = 5
- LEN = 6
-
-This says C<$a> is an SV, a scalar. The scalar is a PVIV, a string.
-Its reference count is 1. It has the C<POK> flag set, meaning its
-current PV field is valid. Because POK is set we look at the PV item
-to see what is in the scalar. The \0 at the end indicate that this
-PV is properly NUL-terminated.
-If the FLAGS had been IOK we would look
-at the IV item. CUR indicates the number of characters in the PV.
-LEN indicates the number of bytes requested for the PV (one more than
-CUR, in this case, because LEN includes an extra byte for the
-end-of-string marker).
-
-=head2 A simple scalar number
-
-If the scalar contains a number the raw SV will be leaner.
-
- use Devel::Peek;
- $a = 42;
- Dump $a;
-
-The output:
-
- SV = IV(0xbc818)
- REFCNT = 1
- FLAGS = (IOK,pIOK)
- IV = 42
-
-This says C<$a> is an SV, a scalar. The scalar is an IV, a number. Its
-reference count is 1. It has the C<IOK> flag set, meaning it is currently
-being evaluated as a number. Because IOK is set we look at the IV item to
-see what is in the scalar.
-
-=head2 A simple scalar with an extra reference
-
-If the scalar from the previous example had an extra reference:
-
- use Devel::Peek;
- $a = 42;
- $b = \$a;
- Dump $a;
-
-The output:
-
- SV = IV(0xbe860)
- REFCNT = 2
- FLAGS = (IOK,pIOK)
- IV = 42
-
-Notice that this example differs from the previous example only in its
-reference count. Compare this to the next example, where we dump C<$b>
-instead of C<$a>.
-
-=head2 A reference to a simple scalar
-
-This shows what a reference looks like when it references a simple scalar.
-
- use Devel::Peek;
- $a = 42;
- $b = \$a;
- Dump $b;
-
-The output:
-
- SV = RV(0xf041c)
- REFCNT = 1
- FLAGS = (ROK)
- RV = 0xbab08
- SV = IV(0xbe860)
- REFCNT = 2
- FLAGS = (IOK,pIOK)
- IV = 42
-
-Starting from the top, this says C<$b> is an SV. The scalar is an RV, a
-reference. It has the C<ROK> flag set, meaning it is a reference. Because
-ROK is set we have an RV item rather than an IV or PV. Notice that Dump
-follows the reference and shows us what C<$b> was referencing. We see the
-same C<$a> that we found in the previous example.
-
-Note that the value of C<RV> coincides with the numbers we see when we
-stringify $b. The addresses inside RV() and IV() are addresses of
-C<X***> structure which holds the current state of an C<SV>. This
-address may change during lifetime of an SV.
-
-=head2 A reference to an array
-
-This shows what a reference to an array looks like.
-
- use Devel::Peek;
- $a = [42];
- Dump $a;
-
-The output:
-
- SV = RV(0xf041c)
- REFCNT = 1
- FLAGS = (ROK)
- RV = 0xb2850
- SV = PVAV(0xbd448)
- REFCNT = 1
- FLAGS = ()
- IV = 0
- NV = 0
- ARRAY = 0xb2048
- ALLOC = 0xb2048
- FILL = 0
- MAX = 0
- ARYLEN = 0x0
- FLAGS = (REAL)
- Elt No. 0 0xb5658
- SV = IV(0xbe860)
- REFCNT = 1
- FLAGS = (IOK,pIOK)
- IV = 42
-
-This says C<$a> is an SV and that it is an RV. That RV points to
-another SV which is a PVAV, an array. The array has one element,
-element zero, which is another SV. The field C<FILL> above indicates
-the last element in the array, similar to C<$#$a>.
-
-If C<$a> pointed to an array of two elements then we would see the
-following.
-
- use Devel::Peek 'Dump';
- $a = [42,24];
- Dump $a;
-
-The output:
-
- SV = RV(0xf041c)
- REFCNT = 1
- FLAGS = (ROK)
- RV = 0xb2850
- SV = PVAV(0xbd448)
- REFCNT = 1
- FLAGS = ()
- IV = 0
- NV = 0
- ARRAY = 0xb2048
- ALLOC = 0xb2048
- FILL = 0
- MAX = 0
- ARYLEN = 0x0
- FLAGS = (REAL)
- Elt No. 0 0xb5658
- SV = IV(0xbe860)
- REFCNT = 1
- FLAGS = (IOK,pIOK)
- IV = 42
- Elt No. 1 0xb5680
- SV = IV(0xbe818)
- REFCNT = 1
- FLAGS = (IOK,pIOK)
- IV = 24
-
-Note that C<Dump> will not report I<all> the elements in the array,
-only several first (depending on how deep it already went into the
-report tree).
-
-=head2 A reference to a hash
-
-The following shows the raw form of a reference to a hash.
-
- use Devel::Peek;
- $a = {hello=>42};
- Dump $a;
-
-The output:
-
- SV = RV(0xf041c)
- REFCNT = 1
- FLAGS = (ROK)
- RV = 0xb2850
- SV = PVHV(0xbd448)
- REFCNT = 1
- FLAGS = ()
- NV = 0
- ARRAY = 0xbd748
- KEYS = 1
- FILL = 1
- MAX = 7
- RITER = -1
- EITER = 0x0
- Elt "hello" => 0xbaaf0
- SV = IV(0xbe860)
- REFCNT = 1
- FLAGS = (IOK,pIOK)
- IV = 42
-
-This shows C<$a> is a reference pointing to an SV. That SV is a PVHV, a
-hash. Fields RITER and EITER are used by C<L<each>>.
-
-=head2 Dumping a large array or hash
-
-The C<Dump()> function, by default, dumps up to 4 elements from a
-toplevel array or hash. This number can be increased by supplying a
-second argument to the function.
-
- use Devel::Peek;
- $a = [10,11,12,13,14];
- Dump $a;
-
-Notice that C<Dump()> prints only elements 10 through 13 in the above code.
-The following code will print all of the elements.
-
- use Devel::Peek 'Dump';
- $a = [10,11,12,13,14];
- Dump $a, 5;
-
-=head2 A reference to an SV which holds a C pointer
-
-This is what you really need to know as an XS programmer, of course. When
-an XSUB returns a pointer to a C structure that pointer is stored in an SV
-and a reference to that SV is placed on the XSUB stack. So the output from
-an XSUB which uses something like the T_PTROBJ map might look something like
-this:
-
- SV = RV(0xf381c)
- REFCNT = 1
- FLAGS = (ROK)
- RV = 0xb8ad8
- SV = PVMG(0xbb3c8)
- REFCNT = 1
- FLAGS = (OBJECT,IOK,pIOK)
- IV = 729160
- NV = 0
- PV = 0
- STASH = 0xc1d10 "CookBookB::Opaque"
-
-This shows that we have an SV which is an RV. That RV points at another
-SV. In this case that second SV is a PVMG, a blessed scalar. Because it is
-blessed it has the C<OBJECT> flag set. Note that an SV which holds a C
-pointer also has the C<IOK> flag set. The C<STASH> is set to the package
-name which this SV was blessed into.
-
-The output from an XSUB which uses something like the T_PTRREF map, which
-doesn't bless the object, might look something like this:
-
- SV = RV(0xf381c)
- REFCNT = 1
- FLAGS = (ROK)
- RV = 0xb8ad8
- SV = PVMG(0xbb3c8)
- REFCNT = 1
- FLAGS = (IOK,pIOK)
- IV = 729160
- NV = 0
- PV = 0
-
-=head2 A reference to a subroutine
-
-Looks like this:
-
- SV = RV(0x798ec)
- REFCNT = 1
- FLAGS = (TEMP,ROK)
- RV = 0x1d453c
- SV = PVCV(0x1c768c)
- REFCNT = 2
- FLAGS = ()
- IV = 0
- NV = 0
- COMP_STASH = 0x31068 "main"
- START = 0xb20e0
- ROOT = 0xbece0
- XSUB = 0x0
- XSUBANY = 0
- GVGV::GV = 0x1d44e8 "MY" :: "top_targets"
- FILE = "(eval 5)"
- DEPTH = 0
- PADLIST = 0x1c9338
-
-This shows that
-
-=over
-
-=item *
-
-the subroutine is not an XSUB (since C<START> and C<ROOT> are
-non-zero, and C<XSUB> is zero);
-
-=item *
-
-that it was compiled in the package C<main>;
-
-=item *
-
-under the name C<MY::top_targets>;
-
-=item *
-
-inside a 5th eval in the program;
-
-=item *
-
-it is not currently executed (see C<DEPTH>);
-
-=item *
-
-it has no prototype (C<PROTOTYPE> field is missing).
-
-=back
-
-=head1 EXPORTS
-
-C<Dump>, C<mstat>, C<DeadCode>, C<DumpArray>, C<DumpWithOP> and
-C<DumpProg>, C<fill_mstats>, C<mstats_fillhash>, C<mstats2hash> by
-default. Additionally available C<SvREFCNT>, C<SvREFCNT_inc> and
-C<SvREFCNT_dec>.
-
-=head1 BUGS
-
-Readers have been known to skip important parts of L<perlguts>, causing much
-frustration for all.
-
-=head1 AUTHOR
-
-Ilya Zakharevich ilya@math.ohio-state.edu
-
-Copyright (c) 1995-98 Ilya Zakharevich. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-Author of this software makes no claim whatsoever about suitability,
-reliability, edability, editability or usability of this product, and
-should not be kept liable for any damage resulting from the use of
-it. If you can use it, you are in luck, if not, I should not be kept
-responsible. Keep a handy copy of your backup tape at hand.
-
-=head1 SEE ALSO
-
-L<perlguts>, and L<perlguts>, again.
-
-=cut
diff --git a/contrib/perl5/ext/Devel/Peek/Peek.xs b/contrib/perl5/ext/Devel/Peek/Peek.xs
deleted file mode 100644
index 1e48149..0000000
--- a/contrib/perl5/ext/Devel/Peek/Peek.xs
+++ /dev/null
@@ -1,404 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-SV *
-DeadCode(pTHX)
-{
-#ifdef PURIFY
- return Nullsv;
-#else
- SV* sva;
- SV* sv, *dbg;
- SV* ret = newRV_noinc((SV*)newAV());
- register SV* svend;
- int tm = 0, tref = 0, ts = 0, ta = 0, tas = 0;
-
- for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
- svend = &sva[SvREFCNT(sva)];
- for (sv = sva + 1; sv < svend; ++sv) {
- if (SvTYPE(sv) == SVt_PVCV) {
- CV *cv = (CV*)sv;
- AV* padlist = CvPADLIST(cv), *argav;
- SV** svp;
- SV** pad;
- int i = 0, j, levelm, totm = 0, levelref, totref = 0;
- int levels, tots = 0, levela, tota = 0, levelas, totas = 0;
- int dumpit = 0;
-
- if (CvXSUB(sv)) {
- continue; /* XSUB */
- }
- if (!CvGV(sv)) {
- continue; /* file-level scope. */
- }
- if (!CvROOT(cv)) {
- /* PerlIO_printf(Perl_debug_log, " no root?!\n"); */
- continue; /* autoloading stub. */
- }
- do_gvgv_dump(0, Perl_debug_log, "GVGV::GV", CvGV(sv));
- if (CvDEPTH(cv)) {
- PerlIO_printf(Perl_debug_log, " busy\n");
- continue;
- }
- svp = AvARRAY(padlist);
- while (++i <= AvFILL(padlist)) { /* Depth. */
- SV **args;
-
- pad = AvARRAY((AV*)svp[i]);
- argav = (AV*)pad[0];
- if (!argav || (SV*)argav == &PL_sv_undef) {
- PerlIO_printf(Perl_debug_log, " closure-template\n");
- continue;
- }
- args = AvARRAY(argav);
- levelm = levels = levelref = levelas = 0;
- levela = sizeof(SV*) * (AvMAX(argav) + 1);
- if (AvREAL(argav)) {
- for (j = 0; j < AvFILL(argav); j++) {
- if (SvROK(args[j])) {
- PerlIO_printf(Perl_debug_log, " ref in args!\n");
- levelref++;
- }
- /* else if (SvPOK(args[j]) && SvPVX(args[j])) { */
- else if (SvTYPE(args[j]) >= SVt_PV && SvLEN(args[j])) {
- levelas += SvLEN(args[j])/SvREFCNT(args[j]);
- }
- }
- }
- for (j = 1; j < AvFILL((AV*)svp[1]); j++) { /* Vars. */
- if (SvROK(pad[j])) {
- levelref++;
- do_sv_dump(0, Perl_debug_log, pad[j], 0, 4, 0, 0);
- dumpit = 1;
- }
- /* else if (SvPOK(pad[j]) && SvPVX(pad[j])) { */
- else if (SvTYPE(pad[j]) >= SVt_PVAV) {
- if (!SvPADMY(pad[j])) {
- levelref++;
- do_sv_dump(0, Perl_debug_log, pad[j], 0, 4, 0, 0);
- dumpit = 1;
- }
- }
- else if (SvTYPE(pad[j]) >= SVt_PV && SvLEN(pad[j])) {
- levels++;
- levelm += SvLEN(pad[j])/SvREFCNT(pad[j]);
- /* Dump(pad[j],4); */
- }
- }
- PerlIO_printf(Perl_debug_log, " level %i: refs: %i, strings: %i in %i,\targsarray: %i, argsstrings: %i\n",
- i, levelref, levelm, levels, levela, levelas);
- totm += levelm;
- tota += levela;
- totas += levelas;
- tots += levels;
- totref += levelref;
- if (dumpit)
- do_sv_dump(0, Perl_debug_log, (SV*)cv, 0, 2, 0, 0);
- }
- if (AvFILL(padlist) > 1) {
- PerlIO_printf(Perl_debug_log, " total: refs: %i, strings: %i in %i,\targsarrays: %i, argsstrings: %i\n",
- totref, totm, tots, tota, totas);
- }
- tref += totref;
- tm += totm;
- ts += tots;
- ta += tota;
- tas += totas;
- }
- }
- }
- PerlIO_printf(Perl_debug_log, "total: refs: %i, strings: %i in %i\targsarray: %i, argsstrings: %i\n", tref, tm, ts, ta, tas);
-
- return ret;
-#endif /* !PURIFY */
-}
-
-#if defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS) \
- || (defined(MYMALLOC) && !defined(PLAIN_MALLOC))
-# define mstat(str) dump_mstats(str)
-#else
-# define mstat(str) \
- PerlIO_printf(Perl_debug_log, "%s: perl not compiled with DEBUGGING_MSTATS\n",str);
-#endif
-
-#if defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS) \
- || (defined(MYMALLOC) && !defined(PLAIN_MALLOC))
-
-/* Very coarse overestimate, 2-per-power-of-2, one more to determine NBUCKETS. */
-# define _NBUCKETS (2*8*IVSIZE+1)
-
-struct mstats_buffer
-{
- perl_mstats_t buffer;
- UV buf[_NBUCKETS*4];
-};
-
-void
-_fill_mstats(struct mstats_buffer *b, int level)
-{
- dTHX;
- b->buffer.nfree = b->buf;
- b->buffer.ntotal = b->buf + _NBUCKETS;
- b->buffer.bucket_mem_size = b->buf + 2*_NBUCKETS;
- b->buffer.bucket_available_size = b->buf + 3*_NBUCKETS;
- Zero(b->buf, (level ? 4*_NBUCKETS: 2*_NBUCKETS), unsigned long);
- get_mstats(&(b->buffer), _NBUCKETS, level);
-}
-
-void
-fill_mstats(SV *sv, int level)
-{
- dTHX;
- int nbuckets;
- struct mstats_buffer buf;
-
- if (SvREADONLY(sv))
- croak("Cannot modify a readonly value");
- SvGROW(sv, sizeof(struct mstats_buffer)+1);
- _fill_mstats((struct mstats_buffer*)SvPVX(sv),level);
- SvCUR_set(sv, sizeof(struct mstats_buffer));
- *SvEND(sv) = '\0';
- SvPOK_only(sv);
-}
-
-void
-_mstats_to_hv(HV *hv, struct mstats_buffer *b, int level)
-{
- dTHX;
- SV **svp;
- int type;
-
- svp = hv_fetch(hv, "topbucket", 9, 1);
- sv_setiv(*svp, b->buffer.topbucket);
-
- svp = hv_fetch(hv, "topbucket_ev", 12, 1);
- sv_setiv(*svp, b->buffer.topbucket_ev);
-
- svp = hv_fetch(hv, "topbucket_odd", 13, 1);
- sv_setiv(*svp, b->buffer.topbucket_odd);
-
- svp = hv_fetch(hv, "totfree", 7, 1);
- sv_setiv(*svp, b->buffer.totfree);
-
- svp = hv_fetch(hv, "total", 5, 1);
- sv_setiv(*svp, b->buffer.total);
-
- svp = hv_fetch(hv, "total_chain", 11, 1);
- sv_setiv(*svp, b->buffer.total_chain);
-
- svp = hv_fetch(hv, "total_sbrk", 10, 1);
- sv_setiv(*svp, b->buffer.total_sbrk);
-
- svp = hv_fetch(hv, "sbrks", 5, 1);
- sv_setiv(*svp, b->buffer.sbrks);
-
- svp = hv_fetch(hv, "sbrk_good", 9, 1);
- sv_setiv(*svp, b->buffer.sbrk_good);
-
- svp = hv_fetch(hv, "sbrk_slack", 10, 1);
- sv_setiv(*svp, b->buffer.sbrk_slack);
-
- svp = hv_fetch(hv, "start_slack", 11, 1);
- sv_setiv(*svp, b->buffer.start_slack);
-
- svp = hv_fetch(hv, "sbrked_remains", 14, 1);
- sv_setiv(*svp, b->buffer.sbrked_remains);
-
- svp = hv_fetch(hv, "minbucket", 9, 1);
- sv_setiv(*svp, b->buffer.minbucket);
-
- svp = hv_fetch(hv, "nbuckets", 8, 1);
- sv_setiv(*svp, b->buffer.nbuckets);
-
- if (_NBUCKETS < b->buffer.nbuckets)
- warn("FIXME: internal mstats buffer too short");
-
- for (type = 0; type < (level ? 4 : 2); type++) {
- UV *p, *p1;
- AV *av;
- int i;
- static const char *types[4] = {
- "free", "used", "mem_size", "available_size"
- };
-
- svp = hv_fetch(hv, types[type], strlen(types[type]), 1);
-
- if (SvOK(*svp) && !(SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVAV))
- croak("Unexpected value for the key '%s' in the mstats hash", types[type]);
- if (!SvOK(*svp)) {
- av = newAV();
- SvUPGRADE(*svp, SVt_RV);
- SvRV(*svp) = (SV*)av;
- SvROK_on(*svp);
- } else
- av = (AV*)SvRV(*svp);
-
- av_extend(av, b->buffer.nbuckets - 1);
- /* XXXX What is the official way to reduce the size of the array? */
- switch (type) {
- case 0:
- p = b->buffer.nfree;
- break;
- case 1:
- p = b->buffer.ntotal;
- p1 = b->buffer.nfree;
- break;
- case 2:
- p = b->buffer.bucket_mem_size;
- break;
- case 3:
- p = b->buffer.bucket_available_size;
- break;
- }
- for (i = 0; i < b->buffer.nbuckets; i++) {
- svp = av_fetch(av, i, 1);
- if (type == 1)
- sv_setiv(*svp, p[i]-p1[i]);
- else
- sv_setuv(*svp, p[i]);
- }
- }
-}
-void
-mstats_fillhash(SV *sv, int level)
-{
- struct mstats_buffer buf;
-
- if (!(SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVHV))
- croak("Not a hash reference");
- _fill_mstats(&buf, level);
- _mstats_to_hv((HV *)SvRV(sv), &buf, level);
-}
-void
-mstats2hash(SV *sv, SV *rv, int level)
-{
- if (!(SvROK(rv) && SvTYPE(SvRV(rv)) == SVt_PVHV))
- croak("Not a hash reference");
- if (!SvPOK(sv))
- croak("Undefined value when expecting mstats buffer");
- if (SvCUR(sv) != sizeof(struct mstats_buffer))
- croak("Wrong size for a value with a mstats buffer");
- _mstats_to_hv((HV *)SvRV(rv), (struct mstats_buffer*)SvPVX(sv), level);
-}
-#else /* !( defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS) \ ) */
-void
-fill_mstats(SV *sv, int level)
-{
- croak("Cannot report mstats without Perl malloc");
-}
-void
-mstats_fillhash(SV *sv, int level)
-{
- croak("Cannot report mstats without Perl malloc");
-}
-void
-mstats2hash(SV *sv, SV *rv, int level)
-{
- croak("Cannot report mstats without Perl malloc");
-}
-#endif /* defined(PERL_DEBUGGING_MSTATS) || defined(DEBUGGING_MSTATS)... */
-
-#define _CvGV(cv) \
- (SvROK(cv) && (SvTYPE(SvRV(cv))==SVt_PVCV) \
- ? SvREFCNT_inc(CvGV((CV*)SvRV(cv))) : &PL_sv_undef)
-
-MODULE = Devel::Peek PACKAGE = Devel::Peek
-
-void
-mstat(str="Devel::Peek::mstat: ")
-char *str
-
-void
-fill_mstats(SV *sv, int level = 0)
-
-void
-mstats_fillhash(SV *sv, int level = 0)
- PROTOTYPE: \%;$
-
-void
-mstats2hash(SV *sv, SV *rv, int level = 0)
- PROTOTYPE: $\%;$
-
-void
-Dump(sv,lim=4)
-SV * sv
-I32 lim
-PPCODE:
-{
- SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE);
- STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0;
- SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE);
- I32 save_dumpindent = PL_dumpindent;
- PL_dumpindent = 2;
- do_sv_dump(0, Perl_debug_log, sv, 0, lim, dumpop && SvTRUE(dumpop), pv_lim);
- PL_dumpindent = save_dumpindent;
-}
-
-void
-DumpArray(lim,...)
-I32 lim
-PPCODE:
-{
- long i;
- SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", FALSE);
- STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0;
- SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", FALSE);
- I32 save_dumpindent = PL_dumpindent;
- PL_dumpindent = 2;
-
- for (i=1; i<items; i++) {
- PerlIO_printf(Perl_debug_log, "Elt No. %ld 0x%"UVxf"\n", i - 1, PTR2UV(ST(i)));
- do_sv_dump(0, Perl_debug_log, ST(i), 0, lim, dumpop && SvTRUE(dumpop), pv_lim);
- }
- PL_dumpindent = save_dumpindent;
-}
-
-void
-DumpProg()
-PPCODE:
-{
- warn("dumpindent is %d", (int)PL_dumpindent);
- if (PL_main_root)
- op_dump(PL_main_root);
-}
-
-I32
-SvREFCNT(sv)
-SV * sv
-
-# PPCODE needed since otherwise sv_2mortal is inserted that will kill the value.
-
-SV *
-SvREFCNT_inc(sv)
-SV * sv
-PPCODE:
-{
- RETVAL = SvREFCNT_inc(sv);
- PUSHs(RETVAL);
-}
-
-# PPCODE needed since by default it is void
-
-void
-SvREFCNT_dec(sv)
-SV * sv
-PPCODE:
-{
- SvREFCNT_dec(sv);
- PUSHs(sv);
-}
-
-SV *
-DeadCode()
-CODE:
- RETVAL = DeadCode(aTHX);
-OUTPUT:
- RETVAL
-
-MODULE = Devel::Peek PACKAGE = Devel::Peek PREFIX = _
-
-SV *
-_CvGV(cv)
- SV *cv
diff --git a/contrib/perl5/ext/DynaLoader/DynaLoader_pm.PL b/contrib/perl5/ext/DynaLoader/DynaLoader_pm.PL
deleted file mode 100644
index 266c9d0..0000000
--- a/contrib/perl5/ext/DynaLoader/DynaLoader_pm.PL
+++ /dev/null
@@ -1,894 +0,0 @@
-use Config;
-
-sub to_string {
- my ($value) = @_;
- $value =~ s/\\/\\\\/g;
- $value =~ s/'/\\'/g;
- return "'$value'";
-}
-
-unlink "DynaLoader.pm" if -f "DynaLoader.pm";
-open OUT, ">DynaLoader.pm" or die $!;
-print OUT <<'EOT';
-
-# Generated from DynaLoader.pm.PL
-
-package DynaLoader;
-
-# And Gandalf said: 'Many folk like to know beforehand what is to
-# be set on the table; but those who have laboured to prepare the
-# feast like to keep their secret; for wonder makes the words of
-# praise louder.'
-
-# (Quote from Tolkien suggested by Anno Siegel.)
-#
-# See pod text at end of file for documentation.
-# See also ext/DynaLoader/README in source tree for other information.
-#
-# Tim.Bunce@ig.co.uk, August 1994
-
-use vars qw($VERSION *AUTOLOAD);
-
-$VERSION = 1.04; # avoid typo warning
-
-require AutoLoader;
-*AUTOLOAD = \&AutoLoader::AUTOLOAD;
-
-use Config;
-
-# The following require can't be removed during maintenance
-# releases, sadly, because of the risk of buggy code that does
-# require Carp; Carp::croak "..."; without brackets dying
-# if Carp hasn't been loaded in earlier compile time. :-(
-# We'll let those bugs get found on the development track.
-require Carp if $] < 5.00450;
-
-# enable debug/trace messages from DynaLoader perl code
-$dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
-
-#
-# Flags to alter dl_load_file behaviour. Assigned bits:
-# 0x01 make symbols available for linking later dl_load_file's.
-# (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
-# (ignored under VMS; effect is built-in to image linking)
-#
-# This is called as a class method $module->dl_load_flags. The
-# definition here will be inherited and result on "default" loading
-# behaviour unless a sub-class of DynaLoader defines its own version.
-#
-
-sub dl_load_flags { 0x00 }
-
-# ($dl_dlext, $dlsrc)
-# = @Config::Config{'dlext', 'dlsrc'};
-EOT
-
-print OUT " (\$dl_dlext, \$dlsrc) = (",
- to_string($Config::Config{'dlext'}), ",",
- to_string($Config::Config{'dlsrc'}), ")\n;" ;
-
-print OUT <<'EOT';
-
-# Some systems need special handling to expand file specifications
-# (VMS support by Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>)
-# See dl_expandspec() for more details. Should be harmless but
-# inefficient to define on systems that don't need it.
-$Is_VMS = $^O eq 'VMS';
-$do_expand = $Is_VMS;
-$Is_MacOS = $^O eq 'MacOS';
-
-@dl_require_symbols = (); # names of symbols we need
-@dl_resolve_using = (); # names of files to link with
-@dl_library_path = (); # path to look for files
-@dl_librefs = (); # things we have loaded
-@dl_modules = (); # Modules we have loaded
-
-# This is a fix to support DLD's unfortunate desire to relink -lc
-@dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs";
-
-EOT
-
-my $cfg_dl_library_path = <<'EOT';
-push(@dl_library_path, split(' ', $Config::Config{libpth}));
-EOT
-
-sub dquoted_comma_list {
- join(", ", map {qq("$_")} @_);
-}
-
-if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS}) {
- eval $cfg_dl_library_path;
- if (!$ENV{PERL_BUILD_EXPAND_ENV_VARS}) {
- my $dl_library_path = dquoted_comma_list(@dl_library_path);
- print OUT <<EOT;
-# The below \@dl_library_path has been expanded (%Config) in Perl build time.
-
-\@dl_library_path = ($dl_library_path);
-
-EOT
- }
-}
-else {
- print OUT <<EOT;
-# Initialise \@dl_library_path with the 'standard' library path
-# for this platform as determined by Configure.
-
-$cfg_dl_library_path
-
-EOT
-}
-
-my $ldlibpthname;
-my $ldlibpthname_defined;
-my $pthsep;
-
-if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS}) {
- $ldlibpthname = $Config::Config{ldlibpthname};
- $ldlibpthname_defined = defined $Config::Config{ldlibpthname} ? 1 : 0;
- $pthsep = $Config::Config{path_sep};
-}
-else {
- $ldlibpthname = q($Config::Config{ldlibpthname});
- $ldlibpthname_defined = q(defined $Config::Config{ldlibpthname});
- $pthsep = q($Config::Config{path_sep});
- print OUT <<EOT;
-my \$ldlibpthname = $ldlibpthname;
-my \$ldlibpthname_defined = $ldlibpthname_defined;
-my \$pthsep = $pthsep;
-
-EOT
-}
-
-my $env_dl_library_path = <<'EOT';
-if ($ldlibpthname_defined &&
- exists $ENV{$ldlibpthname}) {
- push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname}));
-}
-
-# E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH.
-
-if ($ldlibpthname_defined &&
- $ldlibpthname ne 'LD_LIBRARY_PATH' &&
- exists $ENV{LD_LIBRARY_PATH}) {
- push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH}));
-}
-EOT
-
-if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS} && $ENV{PERL_BUILD_EXPAND_ENV_VARS}) {
- eval $env_dl_library_path;
-}
-else {
- print OUT <<EOT;
-# Add to \@dl_library_path any extra directories we can gather from environment
-# during runtime.
-
-$env_dl_library_path
-
-EOT
-}
-
-if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS} && $ENV{PERL_BUILD_EXPAND_ENV_VARS}) {
- my $dl_library_path = dquoted_comma_list(@dl_library_path);
- print OUT <<EOT;
-# The below \@dl_library_path has been expanded (%Config, %ENV)
-# in Perl build time.
-
-\@dl_library_path = ($dl_library_path);
-
-EOT
-}
-
-print OUT <<'EOT';
-# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
-# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
-boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
- !defined(&dl_error);
-
-if ($dl_debug) {
- print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n";
- print STDERR "DynaLoader not linked into this perl\n"
- unless defined(&boot_DynaLoader);
-}
-
-1; # End of main code
-
-
-sub croak { require Carp; Carp::croak(@_) }
-
-sub bootstrap_inherit {
- my $module = $_[0];
- local *isa = *{"$module\::ISA"};
- local @isa = (@isa, 'DynaLoader');
- # Cannot goto due to delocalization. Will report errors on a wrong line?
- bootstrap(@_);
-}
-
-# The bootstrap function cannot be autoloaded (without complications)
-# so we define it here:
-
-sub bootstrap {
- # use local vars to enable $module.bs script to edit values
- local(@args) = @_;
- local($module) = $args[0];
- local(@dirs, $file);
-
- unless ($module) {
- require Carp;
- Carp::confess("Usage: DynaLoader::bootstrap(module)");
- }
-
- # A common error on platforms which don't support dynamic loading.
- # Since it's fatal and potentially confusing we give a detailed message.
- croak("Can't load module $module, dynamic loading not available in this perl.\n".
- " (You may need to build a new perl executable which either supports\n".
- " dynamic loading or has the $module module statically linked into it.)\n")
- unless defined(&dl_load_file);
-
- my @modparts = split(/::/,$module);
- my $modfname = $modparts[-1];
-
- # Some systems have restrictions on files names for DLL's etc.
- # mod2fname returns appropriate file base name (typically truncated)
- # It may also edit @modparts if required.
- $modfname = &mod2fname(\@modparts) if defined &mod2fname;
-
- my $modpname = join(($Is_MacOS ? ':' : '/'),@modparts);
-
- print STDERR "DynaLoader::bootstrap for $module ",
- ($Is_MacOS
- ? "(:auto:$modpname:$modfname.$dl_dlext)\n" :
- "(auto/$modpname/$modfname.$dl_dlext)\n")
- if $dl_debug;
-
- foreach (@INC) {
- chop($_ = VMS::Filespec::unixpath($_)) if $Is_VMS;
- my $dir;
- if ($Is_MacOS) {
- chop $_ if /:$/;
- $dir = "$_:auto:$modpname";
- } else {
- $dir = "$_/auto/$modpname";
- }
- next unless -d $dir; # skip over uninteresting directories
-
- # check for common cases to avoid autoload of dl_findfile
- my $try = $Is_MacOS ? "$dir:$modfname.$dl_dlext" : "$dir/$modfname.$dl_dlext";
- last if $file = ($do_expand) ? dl_expandspec($try) : (-f $try && $try);
-
- # no luck here, save dir for possible later dl_findfile search
- push @dirs, $dir;
- }
- # last resort, let dl_findfile have a go in all known locations
- $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file;
-
- croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
- unless $file; # wording similar to error from 'require'
-
- $file = uc($file) if $Is_VMS && $Config::Config{d_vms_case_sensitive_symbols};
- my $bootname = "boot_$module";
- $bootname =~ s/\W/_/g;
- @dl_require_symbols = ($bootname);
-
- # Execute optional '.bootstrap' perl script for this module.
- # The .bs file can be used to configure @dl_resolve_using etc to
- # match the needs of the individual module on this architecture.
- my $bs = $file;
- $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
- if (-s $bs) { # only read file if it's not empty
- print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
- eval { do $bs; };
- warn "$bs: $@\n" if $@;
- }
-
- # Many dynamic extension loading problems will appear to come from
- # this section of code: XYZ failed at line 123 of DynaLoader.pm.
- # Often these errors are actually occurring in the initialisation
- # C code of the extension XS file. Perl reports the error as being
- # in this perl code simply because this was the last perl code
- # it executed.
-
- my $libref = dl_load_file($file, $module->dl_load_flags) or
- croak("Can't load '$file' for module $module: ".dl_error());
-
- push(@dl_librefs,$libref); # record loaded object
-
- my @unresolved = dl_undef_symbols();
- if (@unresolved) {
- require Carp;
- Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
- }
-
- my $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
- croak("Can't find '$bootname' symbol in $file\n");
-
- my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
-
- push(@dl_modules, $module); # record loaded module
-
- # See comment block above
- &$xs(@args);
-}
-
-
-#sub _check_file { # private utility to handle dl_expandspec vs -f tests
-# my($file) = @_;
-# return $file if (!$do_expand && -f $file); # the common case
-# return $file if ( $do_expand && ($file=dl_expandspec($file)));
-# return undef;
-#}
-
-
-# Let autosplit and the autoloader deal with these functions:
-__END__
-
-
-sub dl_findfile {
- # Read ext/DynaLoader/DynaLoader.doc for detailed information.
- # This function does not automatically consider the architecture
- # or the perl library auto directories.
- my (@args) = @_;
- my (@dirs, $dir); # which directories to search
- my (@found); # full paths to real files we have found
-EOT
-
-print OUT ' my $dl_ext= ' . to_string($Config::Config{'dlext'}) .
- "; # \$Config::Config{'dlext'} suffix for perl extensions\n";
-print OUT ' my $dl_so = ' . to_string($Config::Config{'so'}) .
- "; # \$Config::Config{'so'} suffix for shared libraries\n";
-
-print OUT <<'EOT';
-
- print STDERR "dl_findfile(@args)\n" if $dl_debug;
-
- # accumulate directories but process files as they appear
- arg: foreach(@args) {
- # Special fast case: full filepath requires no search
- if ($Is_VMS && m%[:>/\]]% && -f $_) {
- push(@found,dl_expandspec(VMS::Filespec::vmsify($_)));
- last arg unless wantarray;
- next;
- }
- elsif ($Is_MacOS) {
- if (m/:/ && -f $_) {
- push(@found,$_);
- last arg unless wantarray;
- }
- }
- elsif (m:/: && -f $_ && !$do_expand) {
- push(@found,$_);
- last arg unless wantarray;
- next;
- }
-
- # Deal with directories first:
- # Using a -L prefix is the preferred option (faster and more robust)
- if (m:^-L:) { s/^-L//; push(@dirs, $_); next; }
-
- if ($Is_MacOS) {
- # Otherwise we try to try to spot directories by a heuristic
- # (this is a more complicated issue than it first appears)
- if (m/:/ && -d $_) { push(@dirs, $_); next; }
- # Only files should get this far...
- my(@names, $name); # what filenames to look for
- s/^-l//;
- push(@names, $_);
- foreach $dir (@dirs, @dl_library_path) {
- next unless -d $dir;
- $dir =~ s/^([^:]+)$/:$1/;
- $dir =~ s/:$//;
- foreach $name (@names) {
- my($file) = "$dir:$name";
- print STDERR " checking in $dir for $name\n" if $dl_debug;
- if (-f $file) {
- push(@found, $file);
- next arg; # no need to look any further
- }
- }
- }
- next;
- }
-
- # Otherwise we try to try to spot directories by a heuristic
- # (this is a more complicated issue than it first appears)
- if (m:/: && -d $_) { push(@dirs, $_); next; }
-
- # VMS: we may be using native VMS directory syntax instead of
- # Unix emulation, so check this as well
- if ($Is_VMS && /[:>\]]/ && -d $_) { push(@dirs, $_); next; }
-
- # Only files should get this far...
- my(@names, $name); # what filenames to look for
- if (m:-l: ) { # convert -lname to appropriate library name
- s/-l//;
- push(@names,"lib$_.$dl_so");
- push(@names,"lib$_.a");
- } else { # Umm, a bare name. Try various alternatives:
- # these should be ordered with the most likely first
- push(@names,"$_.$dl_ext") unless m/\.$dl_ext$/o;
- push(@names,"$_.$dl_so") unless m/\.$dl_so$/o;
- push(@names,"lib$_.$dl_so") unless m:/:;
- push(@names,"$_.a") if !m/\.a$/ and $dlsrc eq "dl_dld.xs";
- push(@names, $_);
- }
- foreach $dir (@dirs, @dl_library_path) {
- next unless -d $dir;
- chop($dir = VMS::Filespec::unixpath($dir)) if $Is_VMS;
- foreach $name (@names) {
- my($file) = "$dir/$name";
- print STDERR " checking in $dir for $name\n" if $dl_debug;
- $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file);
- #$file = _check_file($file);
- if ($file) {
- push(@found, $file);
- next arg; # no need to look any further
- }
- }
- }
- }
- if ($dl_debug) {
- foreach(@dirs) {
- print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_;
- }
- print STDERR "dl_findfile found: @found\n";
- }
- return $found[0] unless wantarray;
- @found;
-}
-
-
-sub dl_expandspec {
- my($spec) = @_;
- # Optional function invoked if DynaLoader.pm sets $do_expand.
- # Most systems do not require or use this function.
- # Some systems may implement it in the dl_*.xs file in which case
- # this autoload version will not be called but is harmless.
-
- # This function is designed to deal with systems which treat some
- # 'filenames' in a special way. For example VMS 'Logical Names'
- # (something like unix environment variables - but different).
- # This function should recognise such names and expand them into
- # full file paths.
- # Must return undef if $spec is invalid or file does not exist.
-
- my $file = $spec; # default output to input
-
- if ($Is_VMS) { # dl_expandspec should be defined in dl_vms.xs
- require Carp;
- Carp::croak("dl_expandspec: should be defined in XS file!\n");
- } else {
- return undef unless -f $file;
- }
- print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug;
- $file;
-}
-
-sub dl_find_symbol_anywhere
-{
- my $sym = shift;
- my $libref;
- foreach $libref (@dl_librefs) {
- my $symref = dl_find_symbol($libref,$sym);
- return $symref if $symref;
- }
- return undef;
-}
-
-=head1 NAME
-
-DynaLoader - Dynamically load C libraries into Perl code
-
-dl_error(), dl_findfile(), dl_expandspec(), dl_load_file(), dl_unload_file(), dl_find_symbol(), dl_find_symbol_anywhere(), dl_undef_symbols(), dl_install_xsub(), dl_load_flags(), bootstrap() - routines used by DynaLoader modules
-
-=head1 SYNOPSIS
-
- package YourPackage;
- require DynaLoader;
- @ISA = qw(... DynaLoader ...);
- bootstrap YourPackage;
-
- # optional method for 'global' loading
- sub dl_load_flags { 0x01 }
-
-
-=head1 DESCRIPTION
-
-This document defines a standard generic interface to the dynamic
-linking mechanisms available on many platforms. Its primary purpose is
-to implement automatic dynamic loading of Perl modules.
-
-This document serves as both a specification for anyone wishing to
-implement the DynaLoader for a new platform and as a guide for
-anyone wishing to use the DynaLoader directly in an application.
-
-The DynaLoader is designed to be a very simple high-level
-interface that is sufficiently general to cover the requirements
-of SunOS, HP-UX, NeXT, Linux, VMS and other platforms.
-
-It is also hoped that the interface will cover the needs of OS/2, NT
-etc and also allow pseudo-dynamic linking (using C<ld -A> at runtime).
-
-It must be stressed that the DynaLoader, by itself, is practically
-useless for accessing non-Perl libraries because it provides almost no
-Perl-to-C 'glue'. There is, for example, no mechanism for calling a C
-library function or supplying arguments. A C::DynaLib module
-is available from CPAN sites which performs that function for some
-common system types.
-
-DynaLoader Interface Summary
-
- @dl_library_path
- @dl_resolve_using
- @dl_require_symbols
- $dl_debug
- @dl_librefs
- @dl_modules
- Implemented in:
- bootstrap($modulename) Perl
- @filepaths = dl_findfile(@names) Perl
- $flags = $modulename->dl_load_flags Perl
- $symref = dl_find_symbol_anywhere($symbol) Perl
-
- $libref = dl_load_file($filename, $flags) C
- $status = dl_unload_file($libref) C
- $symref = dl_find_symbol($libref, $symbol) C
- @symbols = dl_undef_symbols() C
- dl_install_xsub($name, $symref [, $filename]) C
- $message = dl_error C
-
-=over 4
-
-=item @dl_library_path
-
-The standard/default list of directories in which dl_findfile() will
-search for libraries etc. Directories are searched in order:
-$dl_library_path[0], [1], ... etc
-
-@dl_library_path is initialised to hold the list of 'normal' directories
-(F</usr/lib>, etc) determined by B<Configure> (C<$Config{'libpth'}>). This should
-ensure portability across a wide range of platforms.
-
-@dl_library_path should also be initialised with any other directories
-that can be determined from the environment at runtime (such as
-LD_LIBRARY_PATH for SunOS).
-
-After initialisation @dl_library_path can be manipulated by an
-application using push and unshift before calling dl_findfile().
-Unshift can be used to add directories to the front of the search order
-either to save search time or to override libraries with the same name
-in the 'normal' directories.
-
-The load function that dl_load_file() calls may require an absolute
-pathname. The dl_findfile() function and @dl_library_path can be
-used to search for and return the absolute pathname for the
-library/object that you wish to load.
-
-=item @dl_resolve_using
-
-A list of additional libraries or other shared objects which can be
-used to resolve any undefined symbols that might be generated by a
-later call to load_file().
-
-This is only required on some platforms which do not handle dependent
-libraries automatically. For example the Socket Perl extension
-library (F<auto/Socket/Socket.so>) contains references to many socket
-functions which need to be resolved when it's loaded. Most platforms
-will automatically know where to find the 'dependent' library (e.g.,
-F</usr/lib/libsocket.so>). A few platforms need to be told the
-location of the dependent library explicitly. Use @dl_resolve_using
-for this.
-
-Example usage:
-
- @dl_resolve_using = dl_findfile('-lsocket');
-
-=item @dl_require_symbols
-
-A list of one or more symbol names that are in the library/object file
-to be dynamically loaded. This is only required on some platforms.
-
-=item @dl_librefs
-
-An array of the handles returned by successful calls to dl_load_file(),
-made by bootstrap, in the order in which they were loaded.
-Can be used with dl_find_symbol() to look for a symbol in any of
-the loaded files.
-
-=item @dl_modules
-
-An array of module (package) names that have been bootstrap'ed.
-
-=item dl_error()
-
-Syntax:
-
- $message = dl_error();
-
-Error message text from the last failed DynaLoader function. Note
-that, similar to errno in unix, a successful function call does not
-reset this message.
-
-Implementations should detect the error as soon as it occurs in any of
-the other functions and save the corresponding message for later
-retrieval. This will avoid problems on some platforms (such as SunOS)
-where the error message is very temporary (e.g., dlerror()).
-
-=item $dl_debug
-
-Internal debugging messages are enabled when $dl_debug is set true.
-Currently setting $dl_debug only affects the Perl side of the
-DynaLoader. These messages should help an application developer to
-resolve any DynaLoader usage problems.
-
-$dl_debug is set to C<$ENV{'PERL_DL_DEBUG'}> if defined.
-
-For the DynaLoader developer/porter there is a similar debugging
-variable added to the C code (see dlutils.c) and enabled if Perl was
-built with the B<-DDEBUGGING> flag. This can also be set via the
-PERL_DL_DEBUG environment variable. Set to 1 for minimal information or
-higher for more.
-
-=item dl_findfile()
-
-Syntax:
-
- @filepaths = dl_findfile(@names)
-
-Determine the full paths (including file suffix) of one or more
-loadable files given their generic names and optionally one or more
-directories. Searches directories in @dl_library_path by default and
-returns an empty list if no files were found.
-
-Names can be specified in a variety of platform independent forms. Any
-names in the form B<-lname> are converted into F<libname.*>, where F<.*> is
-an appropriate suffix for the platform.
-
-If a name does not already have a suitable prefix and/or suffix then
-the corresponding file will be searched for by trying combinations of
-prefix and suffix appropriate to the platform: "$name.o", "lib$name.*"
-and "$name".
-
-If any directories are included in @names they are searched before
-@dl_library_path. Directories may be specified as B<-Ldir>. Any other
-names are treated as filenames to be searched for.
-
-Using arguments of the form C<-Ldir> and C<-lname> is recommended.
-
-Example:
-
- @dl_resolve_using = dl_findfile(qw(-L/usr/5lib -lposix));
-
-
-=item dl_expandspec()
-
-Syntax:
-
- $filepath = dl_expandspec($spec)
-
-Some unusual systems, such as VMS, require special filename handling in
-order to deal with symbolic names for files (i.e., VMS's Logical Names).
-
-To support these systems a dl_expandspec() function can be implemented
-either in the F<dl_*.xs> file or code can be added to the autoloadable
-dl_expandspec() function in F<DynaLoader.pm>. See F<DynaLoader.pm> for
-more information.
-
-=item dl_load_file()
-
-Syntax:
-
- $libref = dl_load_file($filename, $flags)
-
-Dynamically load $filename, which must be the path to a shared object
-or library. An opaque 'library reference' is returned as a handle for
-the loaded object. Returns undef on error.
-
-The $flags argument to alters dl_load_file behaviour.
-Assigned bits:
-
- 0x01 make symbols available for linking later dl_load_file's.
- (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
- (ignored under VMS; this is a normal part of image linking)
-
-(On systems that provide a handle for the loaded object such as SunOS
-and HPUX, $libref will be that handle. On other systems $libref will
-typically be $filename or a pointer to a buffer containing $filename.
-The application should not examine or alter $libref in any way.)
-
-This is the function that does the real work. It should use the
-current values of @dl_require_symbols and @dl_resolve_using if required.
-
- SunOS: dlopen($filename)
- HP-UX: shl_load($filename)
- Linux: dld_create_reference(@dl_require_symbols); dld_link($filename)
- NeXT: rld_load($filename, @dl_resolve_using)
- VMS: lib$find_image_symbol($filename,$dl_require_symbols[0])
-
-(The dlopen() function is also used by Solaris and some versions of
-Linux, and is a common choice when providing a "wrapper" on other
-mechanisms as is done in the OS/2 port.)
-
-=item dl_unload_file()
-
-Syntax:
-
- $status = dl_unload_file($libref)
-
-Dynamically unload $libref, which must be an opaque 'library reference' as
-returned from dl_load_file. Returns one on success and zero on failure.
-
-This function is optional and may not necessarily be provided on all platforms.
-If it is defined, it is called automatically when the interpreter exits for
-every shared object or library loaded by DynaLoader::bootstrap. All such
-library references are stored in @dl_librefs by DynaLoader::Bootstrap as it
-loads the libraries. The files are unloaded in last-in, first-out order.
-
-This unloading is usually necessary when embedding a shared-object perl (e.g.
-one configured with -Duseshrplib) within a larger application, and the perl
-interpreter is created and destroyed several times within the lifetime of the
-application. In this case it is possible that the system dynamic linker will
-unload and then subsequently reload the shared libperl without relocating any
-references to it from any files DynaLoaded by the previous incarnation of the
-interpreter. As a result, any shared objects opened by DynaLoader may point to
-a now invalid 'ghost' of the libperl shared object, causing apparently random
-memory corruption and crashes. This behaviour is most commonly seen when using
-Apache and mod_perl built with the APXS mechanism.
-
- SunOS: dlclose($libref)
- HP-UX: ???
- Linux: ???
- NeXT: ???
- VMS: ???
-
-(The dlclose() function is also used by Solaris and some versions of
-Linux, and is a common choice when providing a "wrapper" on other
-mechanisms as is done in the OS/2 port.)
-
-=item dl_loadflags()
-
-Syntax:
-
- $flags = dl_loadflags $modulename;
-
-Designed to be a method call, and to be overridden by a derived class
-(i.e. a class which has DynaLoader in its @ISA). The definition in
-DynaLoader itself returns 0, which produces standard behavior from
-dl_load_file().
-
-=item dl_find_symbol()
-
-Syntax:
-
- $symref = dl_find_symbol($libref, $symbol)
-
-Return the address of the symbol $symbol or C<undef> if not found. If the
-target system has separate functions to search for symbols of different
-types then dl_find_symbol() should search for function symbols first and
-then other types.
-
-The exact manner in which the address is returned in $symref is not
-currently defined. The only initial requirement is that $symref can
-be passed to, and understood by, dl_install_xsub().
-
- SunOS: dlsym($libref, $symbol)
- HP-UX: shl_findsym($libref, $symbol)
- Linux: dld_get_func($symbol) and/or dld_get_symbol($symbol)
- NeXT: rld_lookup("_$symbol")
- VMS: lib$find_image_symbol($libref,$symbol)
-
-
-=item dl_find_symbol_anywhere()
-
-Syntax:
-
- $symref = dl_find_symbol_anywhere($symbol)
-
-Applies dl_find_symbol() to the members of @dl_librefs and returns
-the first match found.
-
-=item dl_undef_symbols()
-
-Example
-
- @symbols = dl_undef_symbols()
-
-Return a list of symbol names which remain undefined after load_file().
-Returns C<()> if not known. Don't worry if your platform does not provide
-a mechanism for this. Most do not need it and hence do not provide it,
-they just return an empty list.
-
-
-=item dl_install_xsub()
-
-Syntax:
-
- dl_install_xsub($perl_name, $symref [, $filename])
-
-Create a new Perl external subroutine named $perl_name using $symref as
-a pointer to the function which implements the routine. This is simply
-a direct call to newXSUB(). Returns a reference to the installed
-function.
-
-The $filename parameter is used by Perl to identify the source file for
-the function if required by die(), caller() or the debugger. If
-$filename is not defined then "DynaLoader" will be used.
-
-
-=item bootstrap()
-
-Syntax:
-
-bootstrap($module)
-
-This is the normal entry point for automatic dynamic loading in Perl.
-
-It performs the following actions:
-
-=over 8
-
-=item *
-
-locates an auto/$module directory by searching @INC
-
-=item *
-
-uses dl_findfile() to determine the filename to load
-
-=item *
-
-sets @dl_require_symbols to C<("boot_$module")>
-
-=item *
-
-executes an F<auto/$module/$module.bs> file if it exists
-(typically used to add to @dl_resolve_using any files which
-are required to load the module on the current platform)
-
-=item *
-
-calls dl_load_flags() to determine how to load the file.
-
-=item *
-
-calls dl_load_file() to load the file
-
-=item *
-
-calls dl_undef_symbols() and warns if any symbols are undefined
-
-=item *
-
-calls dl_find_symbol() for "boot_$module"
-
-=item *
-
-calls dl_install_xsub() to install it as "${module}::bootstrap"
-
-=item *
-
-calls &{"${module}::bootstrap"} to bootstrap the module (actually
-it uses the function reference returned by dl_install_xsub for speed)
-
-=back
-
-=back
-
-
-=head1 AUTHOR
-
-Tim Bunce, 11 August 1994.
-
-This interface is based on the work and comments of (in no particular
-order): Larry Wall, Robert Sanders, Dean Roehrich, Jeff Okamoto, Anno
-Siegel, Thomas Neumann, Paul Marquess, Charles Bailey, myself and others.
-
-Larry Wall designed the elegant inherited bootstrap mechanism and
-implemented the first Perl 5 dynamic loader using it.
-
-Solaris global loading added by Nick Ing-Simmons with design/coding
-assistance from Tim Bunce, January 1996.
-
-=cut
-EOT
-
-close OUT or die $!;
-
diff --git a/contrib/perl5/ext/DynaLoader/Makefile.PL b/contrib/perl5/ext/DynaLoader/Makefile.PL
deleted file mode 100644
index 83cbd77..0000000
--- a/contrib/perl5/ext/DynaLoader/Makefile.PL
+++ /dev/null
@@ -1,34 +0,0 @@
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
- NAME => 'DynaLoader',
- LINKTYPE => 'static',
- DEFINE => '-DPERL_CORE -DLIBC="$(LIBC)"',
- MAN3PODS => {}, # Pods will be built by installman.
- SKIP => [qw(dynamic dynamic_lib dynamic_bs)],
- XSPROTOARG => '-noprototypes', # XXX remove later?
- VERSION_FROM => 'DynaLoader_pm.PL',
- PL_FILES => {'DynaLoader_pm.PL'=>'DynaLoader.pm',
- 'XSLoader_pm.PL'=>'XSLoader.pm'},
- PM => {'DynaLoader.pm' => '$(INST_LIBDIR)/DynaLoader.pm',
- 'XSLoader.pm' => '$(INST_LIBDIR)/XSLoader.pm'},
- depend => {'DynaLoader.o' => 'dlutils.c'},
- clean => {FILES => 'DynaLoader.c DynaLoader.xs DynaLoader.pm ' .
- 'XSLoader.pm'},
-);
-
-sub MY::postamble {
- '
-DynaLoader.xs: $(DLSRC)
- $(RM_F) $@
- $(CP) $? $@
-
-# Perform very simple tests just to check for major gaffs.
-# We can\'t do much more for platforms we are not executing on.
-test-xs:
- for i in dl_*xs; \
- do $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSUBPPARGS) $$i > /dev/null; \
- done
-';
-}
-
diff --git a/contrib/perl5/ext/DynaLoader/README b/contrib/perl5/ext/DynaLoader/README
deleted file mode 100644
index 0551cf3..0000000
--- a/contrib/perl5/ext/DynaLoader/README
+++ /dev/null
@@ -1,53 +0,0 @@
-Perl 5 DynaLoader
-
-See DynaLoader.pm for detailed specification.
-
-This module is very similar to the other Perl 5 modules except that
-Configure selects which dl_*.xs file to use.
-
-After Configure has been run the Makefile.PL will generate a Makefile
-which will run xsubpp on a specific dl_*.xs file and write the output
-to DynaLoader.c
-
-After that the processing is the same as any other module.
-
-Note that, to be effective, the DynaLoader module must be _statically_
-linked into perl! Configure should arrange this.
-
-This interface is based on the work and comments of (in no particular
-order): Larry Wall, Robert Sanders, Dean Roehrich, Jeff Okamoto, Anno
-Siegel, Thomas Neumann, Paul Marquess, Charles Bailey and others.
-
-The dl_*.xs files should either be named after the dynamic linking
-operating system interface used if that interface is available on more
-than one type of system, e.g.:
- dlopen for dlopen()/dlsym() type functions (SunOS, BSD)
- dld for the GNU dld library functions (linux, ?)
-or else the osname, e.g., hpux, next, vms etc.
-
-Both are determined by Configure and so only those specific names that
-Configure knows/uses will work.
-
-If porting the DynaLoader to a platform that has a core dynamic linking
-interface similar to an existing generic type, e.g., dlopen or dld,
-please try to port the corresponding dl_*.xs file (using #ifdef's if
-required).
-
-Otherwise, or if that proves too messy, create a new dl_*.xs file named
-after your osname. Configure will give preference to a dl_$osname.xs
-file if one exists.
-
-The file dl_dlopen.xs is a reference implementation by Paul Marquess
-which is a good place to start if porting from scratch. For more complex
-platforms take a look at dl_dld.xs. The dlutils.c file holds some
-common definitions that are #included into the dl_*.xs files.
-
-After the initial implementation of a new DynaLoader dl_*.xs file you
-may need to edit or create ext/MODULE/MODULE.bs files (library bootstrap
-files) to reflect the needs of your platform and linking software.
-
-Refer to DynaLoader.pm, lib/ExtUtils/MakeMaker.pm and any existing
-ext/MODULE/MODULE.bs files for more information.
-
-Tim Bunce.
-August 1994
diff --git a/contrib/perl5/ext/DynaLoader/XSLoader_pm.PL b/contrib/perl5/ext/DynaLoader/XSLoader_pm.PL
deleted file mode 100644
index 7657410..0000000
--- a/contrib/perl5/ext/DynaLoader/XSLoader_pm.PL
+++ /dev/null
@@ -1,160 +0,0 @@
-use Config;
-
-sub to_string {
- my ($value) = @_;
- $value =~ s/\\/\\\\/g;
- $value =~ s/'/\\'/g;
- return "'$value'";
-}
-
-unlink "XSLoader.pm" if -f "XSLoader.pm";
-open OUT, ">XSLoader.pm" or die $!;
-print OUT <<'EOT';
-# Generated from XSLoader.pm.PL (resolved %Config::Config value)
-
-package XSLoader;
-
-# And Gandalf said: 'Many folk like to know beforehand what is to
-# be set on the table; but those who have laboured to prepare the
-# feast like to keep their secret; for wonder makes the words of
-# praise louder.'
-
-# (Quote from Tolkien sugested by Anno Siegel.)
-#
-# See pod text at end of file for documentation.
-# See also ext/DynaLoader/README in source tree for other information.
-#
-# Tim.Bunce@ig.co.uk, August 1994
-
-$VERSION = "0.01"; # avoid typo warning
-
-# enable debug/trace messages from DynaLoader perl code
-# $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
-
-EOT
-
-print OUT ' my $dl_dlext = ', to_string($Config::Config{'dlext'}), ";\n" ;
-
-print OUT <<'EOT';
-
-package DynaLoader;
-
-# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
-# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
-boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
- !defined(&dl_error);
-package XSLoader;
-
-1; # End of main code
-
-# The bootstrap function cannot be autoloaded (without complications)
-# so we define it here:
-
-sub load {
- package DynaLoader;
-
- my($module) = $_[0];
-
- # work with static linking too
- my $b = "$module\::bootstrap";
- goto &$b if defined &$b;
-
- goto retry unless $module and defined &dl_load_file;
-
- my @modparts = split(/::/,$module);
- my $modfname = $modparts[-1];
-
-EOT
-
-print OUT <<'EOT' if defined &DynaLoader::mod2fname;
- # Some systems have restrictions on files names for DLL's etc.
- # mod2fname returns appropriate file base name (typically truncated)
- # It may also edit @modparts if required.
- $modfname = &mod2fname(\@modparts) if defined &mod2fname;
-
-EOT
-
-print OUT <<'EOT';
- my $modpname = join('/',@modparts);
- my $modlibname = (caller())[1];
- my $c = @modparts;
- $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename
- my $file = "$modlibname/auto/$modpname/$modfname.$dl_dlext";
-
-# print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug;
-
- my $bs = $file;
- $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
-
- goto retry if not -f $file or -s $bs;
-
- my $bootname = "boot_$module";
- $bootname =~ s/\W/_/g;
- @dl_require_symbols = ($bootname);
-
- # Many dynamic extension loading problems will appear to come from
- # this section of code: XYZ failed at line 123 of DynaLoader.pm.
- # Often these errors are actually occurring in the initialisation
- # C code of the extension XS file. Perl reports the error as being
- # in this perl code simply because this was the last perl code
- # it executed.
-
- my $libref = dl_load_file($file, 0) or do {
- require Carp;
- Carp::croak("Can't load '$file' for module $module: " . dl_error());
- };
- push(@dl_librefs,$libref); # record loaded object
-
- my @unresolved = dl_undef_symbols();
- if (@unresolved) {
- require Carp;
- Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
- }
-
- my $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do {
- require Carp;
- Carp::croak("Can't find '$bootname' symbol in $file\n");
- };
-
- my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
-
- push(@dl_modules, $module); # record loaded module
-
- # See comment block above
- return &$xs(@_);
-
- retry:
- require DynaLoader;
- goto &DynaLoader::bootstrap_inherit;
-}
-
-__END__
-
-=head1 NAME
-
-XSLoader - Dynamically load C libraries into Perl code
-
-=head1 SYNOPSIS
-
- package YourPackage;
- use XSLoader;
-
- XSLoader::load 'YourPackage', @args;
-
-=head1 DESCRIPTION
-
-This module defines a standard I<simplified> interface to the dynamic
-linking mechanisms available on many platforms. Its primary purpose is
-to implement cheap automatic dynamic loading of Perl modules.
-
-For more complicated interface see L<DynaLoader>.
-
-=head1 AUTHOR
-
-Ilya Zakharevich: extraction from DynaLoader.
-
-=cut
-EOT
-
-close OUT or die $!;
-
diff --git a/contrib/perl5/ext/DynaLoader/dl_aix.xs b/contrib/perl5/ext/DynaLoader/dl_aix.xs
deleted file mode 100644
index e29c0f8..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_aix.xs
+++ /dev/null
@@ -1,744 +0,0 @@
-/* dl_aix.xs
- *
- * Written: 8/31/94 by Wayne Scott (wscott@ichips.intel.com)
- *
- * All I did was take Jens-Uwe Mager's libdl emulation library for
- * AIX and merged it with the dl_dlopen.xs file to create a dynamic library
- * package that works for AIX.
- *
- * I did change all malloc's, free's, strdup's, calloc's to use the perl
- * equilvant. I also removed some stuff we will not need. Call fini()
- * on statup... It can probably be trimmed more.
- */
-
-#define PERLIO_NOT_STDIO 0
-
-/*
- * @(#)dlfcn.c 1.5 revision of 93/02/14 20:14:17
- * This is an unpublished work copyright (c) 1992 Helios Software GmbH
- * 3000 Hannover 1, Germany
- */
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-/* When building as a 64-bit binary on AIX, define this to get the
- * correct structure definitions. Also determines the field-name
- * macros and gates some logic in readEntries(). -- Steven N. Hirsch
- * <hirschs@btv.ibm.com> */
-#ifdef USE_64_BIT_ALL
-# define __XCOFF64__
-# define __XCOFF32__
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/ldr.h>
-#include <a.out.h>
-#undef FREAD
-#undef FWRITE
-#include <ldfcn.h>
-
-#ifdef USE_64_BIT_ALL
-# define AIX_SCNHDR SCNHDR_64
-# define AIX_LDHDR LDHDR_64
-# define AIX_LDSYM LDSYM_64
-# define AIX_LDHDRSZ LDHDRSZ_64
-#else
-# define AIX_SCNHDR SCNHDR
-# define AIX_LDHDR LDHDR
-# define AIX_LDSYM LDSYM
-# define AIX_LDHDRSZ LDHDRSZ
-#endif
-
-/* When using Perl extensions written in C++ the longer versions
- * of load() and unload() from libC and libC_r need to be used,
- * otherwise statics in the extensions won't get initialized right.
- * -- Stephanie Beals <bealzy@us.ibm.com> */
-
-/* Older AIX C compilers cannot deal with C++ double-slash comments in
- the ibmcxx and/or xlC includes. Since we only need a single file,
- be more fine-grained about what's included <hirschs@btv.ibm.com> */
-
-#ifdef USE_libC /* The define comes, when it comes, from hints/aix.pl. */
-# define LOAD loadAndInit
-# define UNLOAD terminateAndUnload
-# if defined(USE_vacpp_load_h)
-# include "/usr/vacpp/include/load.h"
-# elif defined(USE_ibmcxx_load_h)
-# include "/usr/ibmcxx/include/load.h"
-# elif defined(USE_xlC_load_h)
-# include "/usr/lpp/xlC/include/load.h"
-# elif defined(USE_load_h)
-# include "/usr/include/load.h"
-# endif
-#else
-# define LOAD load
-# define UNLOAD unload
-#endif
-
-/*
- * AIX 4.3 does remove some useful definitions from ldfcn.h. Define
- * these here to compensate for that lossage.
- */
-#ifndef BEGINNING
-# define BEGINNING SEEK_SET
-#endif
-#ifndef FSEEK
-# define FSEEK(ldptr,o,p) fseek(IOPTR(ldptr),(p==BEGINNING)?(OFFSET(ldptr) +o):o,p)
-#endif
-#ifndef FREAD
-# define FREAD(p,s,n,ldptr) fread(p,s,n,IOPTR(ldptr))
-#endif
-
-/*
- * We simulate dlopen() et al. through a call to load. Because AIX has
- * no call to find an exported symbol we read the loader section of the
- * loaded module and build a list of exported symbols and their virtual
- * address.
- */
-
-typedef struct {
- char *name; /* the symbols's name */
- void *addr; /* its relocated virtual address */
-} Export, *ExportPtr;
-
-/*
- * The void * handle returned from dlopen is actually a ModulePtr.
- */
-typedef struct Module {
- struct Module *next;
- char *name; /* module name for refcounting */
- int refCnt; /* the number of references */
- void *entry; /* entry point from load */
- int nExports; /* the number of exports found */
- ExportPtr exports; /* the array of exports */
-} Module, *ModulePtr;
-
-/*
- * We keep a list of all loaded modules to be able to reference count
- * duplicate dlopen's.
- */
-static ModulePtr modList; /* XXX threaded */
-
-/*
- * The last error from one of the dl* routines is kept in static
- * variables here. Each error is returned only once to the caller.
- */
-static char errbuf[BUFSIZ]; /* XXX threaded */
-static int errvalid; /* XXX threaded */
-
-static void caterr(char *);
-static int readExports(ModulePtr);
-static void *findMain(void);
-
-static char *strerror_failed = "(strerror failed)";
-static char *strerror_r_failed = "(strerror_r failed)";
-
-char *strerrorcat(char *str, int err) {
- int strsiz = strlen(str);
- int msgsiz;
- char *msg;
-
-#ifdef USE_THREADS
- char *buf = malloc(BUFSIZ);
-
- if (buf == 0)
- return 0;
- if (strerror_r(err, buf, BUFSIZ) == 0)
- msg = buf;
- else
- msg = strerror_r_failed;
- msgsiz = strlen(msg);
- if (strsiz + msgsiz < BUFSIZ)
- strcat(str, msg);
- free(buf);
-#else
- if ((msg = strerror(err)) == 0)
- msg = strerror_failed;
- msgsiz = strlen(msg); /* Note msg = buf and free() above. */
- if (strsiz + msgsiz < BUFSIZ) /* Do not move this after #endif. */
- strcat(str, msg);
-#endif
-
- return str;
-}
-
-char *strerrorcpy(char *str, int err) {
- int msgsiz;
- char *msg;
-
-#ifdef USE_THREADS
- char *buf = malloc(BUFSIZ);
-
- if (buf == 0)
- return 0;
- if (strerror_r(err, buf, BUFSIZ) == 0)
- msg = buf;
- else
- msg = strerror_r_failed;
- msgsiz = strlen(msg);
- if (msgsiz < BUFSIZ)
- strcpy(str, msg);
- free(buf);
-#else
- if ((msg = strerror(err)) == 0)
- msg = strerror_failed;
- msgsiz = strlen(msg); /* Note msg = buf and free() above. */
- if (msgsiz < BUFSIZ) /* Do not move this after #endif. */
- strcpy(str, msg);
-#endif
-
- return str;
-}
-
-/* ARGSUSED */
-void *dlopen(char *path, int mode)
-{
- dTHX;
- register ModulePtr mp;
- static void *mainModule; /* XXX threaded */
-
- /*
- * Upon the first call register a terminate handler that will
- * close all libraries.
- */
- if (mainModule == NULL) {
- if ((mainModule = findMain()) == NULL)
- return NULL;
- }
- /*
- * Scan the list of modules if have the module already loaded.
- */
- for (mp = modList; mp; mp = mp->next)
- if (strcmp(mp->name, path) == 0) {
- mp->refCnt++;
- return mp;
- }
- Newz(1000,mp,1,Module);
- if (mp == NULL) {
- errvalid++;
- strcpy(errbuf, "Newz: ");
- strerrorcat(errbuf, errno);
- return NULL;
- }
-
- if ((mp->name = savepv(path)) == NULL) {
- errvalid++;
- strcpy(errbuf, "savepv: ");
- strerrorcat(errbuf, errno);
- safefree(mp);
- return NULL;
- }
-
- /*
- * load should be declared load(const char *...). Thus we
- * cast the path to a normal char *. Ugly.
- */
- if ((mp->entry = (void *)LOAD((char *)path,
-#ifdef L_LIBPATH_EXEC
- L_LIBPATH_EXEC |
-#endif
- L_NOAUTODEFER,
- NULL)) == NULL) {
- int saverrno = errno;
-
- safefree(mp->name);
- safefree(mp);
- errvalid++;
- strcpy(errbuf, "dlopen: ");
- strcat(errbuf, path);
- strcat(errbuf, ": ");
- /*
- * If AIX says the file is not executable, the error
- * can be further described by querying the loader about
- * the last error.
- */
- if (saverrno == ENOEXEC) {
- char *moreinfo[BUFSIZ/sizeof(char *)];
- if (loadquery(L_GETMESSAGES, moreinfo, sizeof(moreinfo)) == -1)
- strerrorcpy(errbuf, saverrno);
- else {
- char **p;
- for (p = moreinfo; *p; p++)
- caterr(*p);
- }
- } else
- strerrorcat(errbuf, saverrno);
- return NULL;
- }
- mp->refCnt = 1;
- mp->next = modList;
- modList = mp;
- /*
- * Assume anonymous exports come from the module this dlopen
- * is linked into, that holds true as long as dlopen and all
- * of the perl core are in the same shared object. Also bind
- * against the main part, in the case a perl is not the main
- * part, e.g mod_perl as DSO in Apache so perl modules can
- * also reference Apache symbols.
- */
- if (loadbind(0, (void *)dlopen, mp->entry) == -1 ||
- loadbind(0, mainModule, mp->entry)) {
- int saverrno = errno;
-
- dlclose(mp);
- errvalid++;
- strcpy(errbuf, "loadbind: ");
- strerrorcat(errbuf, saverrno);
- return NULL;
- }
- if (readExports(mp) == -1) {
- dlclose(mp);
- return NULL;
- }
- return mp;
-}
-
-/*
- * Attempt to decipher an AIX loader error message and append it
- * to our static error message buffer.
- */
-static void caterr(char *s)
-{
- register char *p = s;
-
- while (*p >= '0' && *p <= '9')
- p++;
- switch(atoi(s)) {
- case L_ERROR_TOOMANY:
- strcat(errbuf, "too many errors");
- break;
- case L_ERROR_NOLIB:
- strcat(errbuf, "can't load library");
- strcat(errbuf, p);
- break;
- case L_ERROR_UNDEF:
- strcat(errbuf, "can't find symbol");
- strcat(errbuf, p);
- break;
- case L_ERROR_RLDBAD:
- strcat(errbuf, "bad RLD");
- strcat(errbuf, p);
- break;
- case L_ERROR_FORMAT:
- strcat(errbuf, "bad exec format in");
- strcat(errbuf, p);
- break;
- case L_ERROR_ERRNO:
- strerrorcat(errbuf, atoi(++p));
- break;
- default:
- strcat(errbuf, s);
- break;
- }
-}
-
-void *dlsym(void *handle, const char *symbol)
-{
- register ModulePtr mp = (ModulePtr)handle;
- register ExportPtr ep;
- register int i;
-
- /*
- * Could speed up search, but I assume that one assigns
- * the result to function pointers anyways.
- */
- for (ep = mp->exports, i = mp->nExports; i; i--, ep++)
- if (strcmp(ep->name, symbol) == 0)
- return ep->addr;
- errvalid++;
- strcpy(errbuf, "dlsym: undefined symbol ");
- strcat(errbuf, symbol);
- return NULL;
-}
-
-char *dlerror(void)
-{
- if (errvalid) {
- errvalid = 0;
- return errbuf;
- }
- return NULL;
-}
-
-int dlclose(void *handle)
-{
- register ModulePtr mp = (ModulePtr)handle;
- int result;
- register ModulePtr mp1;
-
- if (--mp->refCnt > 0)
- return 0;
- result = UNLOAD(mp->entry);
- if (result == -1) {
- errvalid++;
- strerrorcpy(errbuf, errno);
- }
- if (mp->exports) {
- register ExportPtr ep;
- register int i;
- for (ep = mp->exports, i = mp->nExports; i; i--, ep++)
- if (ep->name)
- safefree(ep->name);
- safefree(mp->exports);
- }
- if (mp == modList)
- modList = mp->next;
- else {
- for (mp1 = modList; mp1; mp1 = mp1->next)
- if (mp1->next == mp) {
- mp1->next = mp->next;
- break;
- }
- }
- safefree(mp->name);
- safefree(mp);
- return result;
-}
-
-/* Added by Wayne Scott
- * This is needed because the ldopen system call calls
- * calloc to allocated a block of date. The ldclose call calls free.
- * Without this we get this system calloc and perl's free, resulting
- * in a "Bad free" message. This way we always use perl's malloc.
- */
-void *calloc(size_t ne, size_t sz)
-{
- void *out;
-
- out = (void *) safemalloc(ne*sz);
- memzero(out, ne*sz);
- return(out);
-}
-
-/*
- * Build the export table from the XCOFF .loader section.
- */
-static int readExports(ModulePtr mp)
-{
- dTHX;
- LDFILE *ldp = NULL;
- AIX_SCNHDR sh;
- AIX_LDHDR *lhp;
- char *ldbuf;
- AIX_LDSYM *ls;
- int i;
- ExportPtr ep;
-
- if ((ldp = ldopen(mp->name, ldp)) == NULL) {
- struct ld_info *lp;
- char *buf;
- int size = 4*1024;
- if (errno != ENOENT) {
- errvalid++;
- strcpy(errbuf, "readExports: ");
- strerrorcat(errbuf, errno);
- return -1;
- }
- /*
- * The module might be loaded due to the LIBPATH
- * environment variable. Search for the loaded
- * module using L_GETINFO.
- */
- if ((buf = safemalloc(size)) == NULL) {
- errvalid++;
- strcpy(errbuf, "readExports: ");
- strerrorcat(errbuf, errno);
- return -1;
- }
- while ((i = loadquery(L_GETINFO, buf, size)) == -1 && errno == ENOMEM) {
- safefree(buf);
- size += 4*1024;
- if ((buf = safemalloc(size)) == NULL) {
- errvalid++;
- strcpy(errbuf, "readExports: ");
- strerrorcat(errbuf, errno);
- return -1;
- }
- }
- if (i == -1) {
- errvalid++;
- strcpy(errbuf, "readExports: ");
- strerrorcat(errbuf, errno);
- safefree(buf);
- return -1;
- }
- /*
- * Traverse the list of loaded modules. The entry point
- * returned by LOAD() does actually point to the data
- * segment origin.
- */
- lp = (struct ld_info *)buf;
- while (lp) {
- if (lp->ldinfo_dataorg == mp->entry) {
- ldp = ldopen(lp->ldinfo_filename, ldp);
- break;
- }
- if (lp->ldinfo_next == 0)
- lp = NULL;
- else
- lp = (struct ld_info *)((char *)lp + lp->ldinfo_next);
- }
- safefree(buf);
- if (!ldp) {
- errvalid++;
- strcpy(errbuf, "readExports: ");
- strerrorcat(errbuf, errno);
- return -1;
- }
- }
-#ifdef USE_64_BIT_ALL
- if (TYPE(ldp) != U803XTOCMAGIC) {
-#else
- if (TYPE(ldp) != U802TOCMAGIC) {
-#endif
- errvalid++;
- strcpy(errbuf, "readExports: bad magic");
- while(ldclose(ldp) == FAILURE)
- ;
- return -1;
- }
- if (ldnshread(ldp, _LOADER, &sh) != SUCCESS) {
- errvalid++;
- strcpy(errbuf, "readExports: cannot read loader section header");
- while(ldclose(ldp) == FAILURE)
- ;
- return -1;
- }
- /*
- * We read the complete loader section in one chunk, this makes
- * finding long symbol names residing in the string table easier.
- */
- if ((ldbuf = (char *)safemalloc(sh.s_size)) == NULL) {
- errvalid++;
- strcpy(errbuf, "readExports: ");
- strerrorcat(errbuf, errno);
- while(ldclose(ldp) == FAILURE)
- ;
- return -1;
- }
- if (FSEEK(ldp, sh.s_scnptr, BEGINNING) != OKFSEEK) {
- errvalid++;
- strcpy(errbuf, "readExports: cannot seek to loader section");
- safefree(ldbuf);
- while(ldclose(ldp) == FAILURE)
- ;
- return -1;
- }
-/* This first case is a hack, since it assumes that the 3rd parameter to
- FREAD is 1. See the redefinition of FREAD above to see how this works. */
- if (FREAD(ldbuf, sh.s_size, 1, ldp) != 1) {
- errvalid++;
- strcpy(errbuf, "readExports: cannot read loader section");
- safefree(ldbuf);
- while(ldclose(ldp) == FAILURE)
- ;
- return -1;
- }
- lhp = (AIX_LDHDR *)ldbuf;
- ls = (AIX_LDSYM *)(ldbuf+AIX_LDHDRSZ);
- /*
- * Count the number of exports to include in our export table.
- */
- for (i = lhp->l_nsyms; i; i--, ls++) {
- if (!LDR_EXPORT(*ls))
- continue;
- mp->nExports++;
- }
- Newz(1001, mp->exports, mp->nExports, Export);
- if (mp->exports == NULL) {
- errvalid++;
- strcpy(errbuf, "readExports: ");
- strerrorcat(errbuf, errno);
- safefree(ldbuf);
- while(ldclose(ldp) == FAILURE)
- ;
- return -1;
- }
- /*
- * Fill in the export table. All entries are relative to
- * the entry point we got from load.
- */
- ep = mp->exports;
- ls = (AIX_LDSYM *)(ldbuf+AIX_LDHDRSZ);
- for (i = lhp->l_nsyms; i; i--, ls++) {
- char *symname;
- if (!LDR_EXPORT(*ls))
- continue;
-#ifndef USE_64_BIT_ALL
- if (ls->l_zeroes == 0)
-#endif
- symname = ls->l_offset+lhp->l_stoff+ldbuf;
-#ifndef USE_64_BIT_ALL
- else
- symname = ls->l_name;
-#endif
- ep->name = savepv(symname);
- ep->addr = (void *)((unsigned long)mp->entry + ls->l_value);
- ep++;
- }
- safefree(ldbuf);
- while(ldclose(ldp) == FAILURE)
- ;
- return 0;
-}
-
-/*
- * Find the main modules entry point. This is used as export pointer
- * for loadbind() to be able to resolve references to the main part.
- */
-static void * findMain(void)
-{
- struct ld_info *lp;
- char *buf;
- int size = 4*1024;
- int i;
- void *ret;
-
- if ((buf = safemalloc(size)) == NULL) {
- errvalid++;
- strcpy(errbuf, "findMain: ");
- strerrorcat(errbuf, errno);
- return NULL;
- }
- while ((i = loadquery(L_GETINFO, buf, size)) == -1 && errno == ENOMEM) {
- safefree(buf);
- size += 4*1024;
- if ((buf = safemalloc(size)) == NULL) {
- errvalid++;
- strcpy(errbuf, "findMain: ");
- strerrorcat(errbuf, errno);
- return NULL;
- }
- }
- if (i == -1) {
- errvalid++;
- strcpy(errbuf, "findMain: ");
- strerrorcat(errbuf, errno);
- safefree(buf);
- return NULL;
- }
- /*
- * The first entry is the main module. The entry point
- * returned by load() does actually point to the data
- * segment origin.
- */
- lp = (struct ld_info *)buf;
- ret = lp->ldinfo_dataorg;
- safefree(buf);
- return ret;
-}
-
-/* dl_dlopen.xs
- *
- * Platform: SunOS/Solaris, possibly others which use dlopen.
- * Author: Paul Marquess (Paul.Marquess@btinternet.com)
- * Created: 10th July 1994
- *
- * Modified:
- * 15th July 1994 - Added code to explicitly save any error messages.
- * 3rd August 1994 - Upgraded to v3 spec.
- * 9th August 1994 - Changed to use IV
- * 10th August 1994 - Tim Bunce: Added RTLD_LAZY, switchable debugging,
- * basic FreeBSD support, removed ClearError
- *
- */
-
-/* Porting notes:
-
- see dl_dlopen.xs
-
-*/
-
-#include "dlutils.c" /* SaveError() etc */
-
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
- if (flags & 0x01)
- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename);
- RETVAL = dlopen(filename, 1) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL) );
-
-int
-dl_unload_file(libref)
- void * libref
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_unload_file(%lx):\n", libref));
- RETVAL = (dlclose(libref) == 0 ? 1 : 0);
- if (!RETVAL)
- SaveError(aTHX_ "%s", dlerror()) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " retval = %d\n", RETVAL));
- OUTPUT:
- RETVAL
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_find_symbol(handle=%x, symbol=%s)\n",
- libhandle, symbolname));
- RETVAL = dlsym(libhandle, symbolname);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " symbolref = %x\n", RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL));
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%x)\n",
- perl_name, symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_beos.xs b/contrib/perl5/ext/DynaLoader/dl_beos.xs
deleted file mode 100644
index 705c8bc..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_beos.xs
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * dl_beos.xs, by Tom Spindler
- * based on dl_dlopen.xs, by Paul Marquess
- * $Id:$
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include <be/kernel/image.h>
-#include <OS.h>
-#include <stdlib.h>
-#include <limits.h>
-
-#define dlerror() strerror(errno)
-
-#include "dlutils.c" /* SaveError() etc */
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- CODE:
-{ image_id bogo;
- char *path;
- path = malloc(PATH_MAX);
- if (*filename != '/') {
- getcwd(path, PATH_MAX);
- strcat(path, "/");
- strcat(path, filename);
- } else {
- strcpy(path, filename);
- }
-
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", path, flags));
- bogo = load_add_on(path);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (bogo < 0) {
- SaveError(aTHX_ "%s", strerror(bogo));
- PerlIO_printf(Perl_debug_log, "load_add_on(%s) : %d (%s)\n", path, bogo, strerror(bogo));
- } else {
- RETVAL = (void *) bogo;
- sv_setiv( ST(0), PTR2IV(RETVAL) );
- }
- free(path);
-}
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
- status_t retcode;
- void *adr = 0;
-#ifdef DLSYM_NEEDS_UNDERSCORE
- symbolname = Perl_form_nocontext("_%s", symbolname);
-#endif
- RETVAL = NULL;
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- "dl_find_symbol(handle=%lx, symbol=%s)\n",
- (unsigned long) libhandle, symbolname));
- retcode = get_image_symbol((image_id) libhandle, symbolname,
- B_SYMBOL_TYPE_TEXT, (void **) &adr);
- RETVAL = adr;
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- " symbolref = %lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL) {
- SaveError(aTHX_ "%s", strerror(retcode)) ;
- PerlIO_printf(Perl_debug_log, "retcode = %p (%s)\n", retcode, strerror(retcode));
- } else
- sv_setiv( ST(0), PTR2IV(RETVAL));
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%lx)\n",
- perl_name, (unsigned long) symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_dld.xs b/contrib/perl5/ext/DynaLoader/dl_dld.xs
deleted file mode 100644
index d8fad2a..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_dld.xs
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Written 3/1/94, Robert Sanders <Robert.Sanders@linux.org>
- *
- * based upon the file "dl.c", which is
- * Copyright (c) 1994, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Date: 1994/03/07 00:21:43 $
- * $Source: /home/rsanders/src/perl5alpha6/RCS/dld_dl.c,v $
- * $Revision: 1.4 $
- * $State: Exp $
- *
- * $Log: dld_dl.c,v $
- * Removed implicit link against libc. 1994/09/14 William Setzer.
- *
- * Integrated other DynaLoader changes. 1994/06/08 Tim Bunce.
- *
- * rewrote dl_load_file, misc updates. 1994/09/03 William Setzer.
- *
- * Revision 1.4 1994/03/07 00:21:43 rsanders
- * added min symbol count for load_libs and switched order so system libs
- * are loaded after app-specified libs.
- *
- * Revision 1.3 1994/03/05 01:17:26 rsanders
- * added path searching.
- *
- * Revision 1.2 1994/03/05 00:52:39 rsanders
- * added package-specified libraries.
- *
- * Revision 1.1 1994/03/05 00:33:40 rsanders
- * Initial revision
- *
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include <dld.h> /* GNU DLD header file */
-#include <unistd.h>
-
-#include "dlutils.c" /* for SaveError() etc */
-
-static AV *dl_resolve_using = Nullav;
-static AV *dl_require_symbols = Nullav;
-
-static void
-dl_private_init(pTHX)
-{
- int dlderr;
- dl_generic_private_init(aTHX);
- dl_resolve_using = get_av("DynaLoader::dl_resolve_using", GV_ADDMULTI);
- dl_require_symbols = get_av("DynaLoader::dl_require_symbols", GV_ADDMULTI);
-#ifdef __linux__
- dlderr = dld_init("/proc/self/exe");
- if (dlderr) {
-#endif
- dlderr = dld_init(dld_find_executable(PL_origargv[0]));
- if (dlderr) {
- char *msg = dld_strerror(dlderr);
- SaveError(aTHX_ "dld_init(%s) failed: %s", PL_origargv[0], msg);
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "%s", LastError));
- }
-#ifdef __linux__
- }
-#endif
-}
-
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init();
-
-
-char *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- PREINIT:
- int dlderr,x,max;
- GV *gv;
- CODE:
- RETVAL = filename;
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
- if (flags & 0x01)
- Perl_croak(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename);
- max = AvFILL(dl_require_symbols);
- for (x = 0; x <= max; x++) {
- char *sym = SvPVX(*av_fetch(dl_require_symbols, x, 0));
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dld_create_ref(%s)\n", sym));
- if (dlderr = dld_create_reference(sym)) {
- SaveError(aTHX_ "dld_create_reference(%s): %s", sym,
- dld_strerror(dlderr));
- goto haverror;
- }
- }
-
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dld_link(%s)\n", filename));
- if (dlderr = dld_link(filename)) {
- SaveError(aTHX_ "dld_link(%s): %s", filename, dld_strerror(dlderr));
- goto haverror;
- }
-
- max = AvFILL(dl_resolve_using);
- for (x = 0; x <= max; x++) {
- char *sym = SvPVX(*av_fetch(dl_resolve_using, x, 0));
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dld_link(%s)\n", sym));
- if (dlderr = dld_link(sym)) {
- SaveError(aTHX_ "dld_link(%s): %s", sym, dld_strerror(dlderr));
- goto haverror;
- }
- }
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "libref=%s\n", RETVAL));
-haverror:
- ST(0) = sv_newmortal() ;
- if (dlderr == 0)
- sv_setiv(ST(0), PTR2IV(RETVAL));
-
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_find_symbol(handle=%x, symbol=%s)\n",
- libhandle, symbolname));
- RETVAL = (void *)dld_get_func(symbolname);
- /* if RETVAL==NULL we should try looking for a non-function symbol */
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " symbolref = %x\n", RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "dl_find_symbol: Unable to find '%s' symbol", symbolname) ;
- else
- sv_setiv(ST(0), PTR2IV(RETVAL));
-
-
-void
-dl_undef_symbols()
- PPCODE:
- if (dld_undefined_sym_count) {
- int x;
- char **undef_syms = dld_list_undefined_sym();
- EXTEND(SP, dld_undefined_sym_count);
- for (x=0; x < dld_undefined_sym_count; x++)
- PUSHs(sv_2mortal(newSVpv(undef_syms[x]+1, 0)));
- free(undef_syms);
- }
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%x)\n",
- perl_name, symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_dllload.xs b/contrib/perl5/ext/DynaLoader/dl_dllload.xs
deleted file mode 100644
index fe6957a..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_dllload.xs
+++ /dev/null
@@ -1,189 +0,0 @@
-/* dl_dllload.xs
- *
- * Platform: OS/390, possibly others that use dllload(),dllfree() (VM/ESA?).
- * Authors: John Goodyear && Peter Prymmer
- * Created: 28 October 2000
- * Modified:
- * 16 January 2001 - based loosely on dl_dlopen.xs.
- */
-
-/* Porting notes:
-
- OS/390 Dynamic Loading functions:
-
- dllload
- -------
- dllhandle * dllload(const char *dllName)
-
- This function takes the name of a dynamic object file and returns
- a descriptor which can be used by dlllqueryfn() and/or dllqueryvar()
- later. If dllName contains a slash, it is used to locate the dll.
- If not then the LIBPATH environment variable is used to
- search for the requested dll (at least within the HFS).
- It returns NULL on error and sets errno.
-
- dllfree
- -------
- int dllfree(dllhandle *handle);
-
- dllfree() decrements the load count for the dll and frees
- it if the count is 0. It returns zero on success, and
- non-zero on failure.
-
- dllqueryfn && dllqueryvar
- -------------------------
- void (* dllqueryfn(dllhandle *handle, const char *function))();
- void * dllqueryvar(dllhandle *handle, const char *symbol);
-
- dllqueryfn() takes the handle returned from dllload() and the name
- of a function to get the address of. If the function was found
- a pointer is returned, otherwise NULL is returned.
-
- dllqueryvar() takes the handle returned from dllload() and the name
- of a symbol to get the address of. If the variable was found a
- pointer is returned, otherwise NULL is returned.
-
- The XS dl_find_symbol() first calls dllqueryfn(). If it fails
- dlqueryvar() is then called.
-
- strerror
- --------
- char * strerror(int errno)
-
- Returns a null-terminated string which describes the last error
- that occurred with other functions (not necessarily unique to
- dll loading).
-
- Return Types
- ============
- In this implementation the two functions, dl_load_file() &&
- dl_find_symbol(), return (void *). This is primarily because the
- dlopen() && dlsym() style dynamic linker calls return (void *).
- We suspect that casting to (void *) may be easier than teaching XS
- typemaps about the (dllhandle *) type.
-
- Dealing with Error Messages
- ===========================
- In order to make the handling of dynamic linking errors as generic as
- possible you should store any error messages associated with your
- implementation with the StoreError function.
-
- In the case of OS/390 the function strerror(errno) returns the error
- message associated with the last dynamic link error. As the S/390
- dynamic linker functions dllload() && dllqueryvar() both return NULL
- on error every call to an S/390 dynamic link routine is coded
- like this:
-
- RETVAL = dllload(filename) ;
- if (RETVAL == NULL)
- SaveError("%s",strerror(errno)) ;
-
- Note that SaveError() takes a printf format string. Use a "%s" as
- the first parameter if the error may contain any % characters.
-
- Other comments within the dl_dlopen.xs file may be helpful as well.
-*/
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include <dll.h> /* the dynamic linker include file for S/390 */
-#include <errno.h> /* strerror() and friends */
-
-#include "dlutils.c" /* SaveError() etc */
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- PREINIT:
- int mode = 0;
- CODE:
-{
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
- /* add a (void *) dllload(filename) ; cast if needed */
- RETVAL = dllload(filename) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",strerror(errno)) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL));
-}
-
-
-int
-dl_unload_file(libref)
- void * libref
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_unload_file(%lx):\n", PTR2ul(libref)));
- /* RETVAL = (dllfree((dllhandle *)libref) == 0 ? 1 : 0); */
- RETVAL = (dllfree(libref) == 0 ? 1 : 0);
- if (!RETVAL)
- SaveError(aTHX_ "%s", strerror(errno)) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " retval = %d\n", RETVAL));
- OUTPUT:
- RETVAL
-
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- "dl_find_symbol(handle=%lx, symbol=%s)\n",
- (unsigned long) libhandle, symbolname));
- if((RETVAL = (void*)dllqueryfn(libhandle, symbolname)) == NULL)
- RETVAL = dllqueryvar(libhandle, symbolname);
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- " symbolref = %lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",strerror(errno)) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL));
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%lx)\n",
- perl_name, (unsigned long) symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_dlopen.xs b/contrib/perl5/ext/DynaLoader/dl_dlopen.xs
deleted file mode 100644
index e1b2a82..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_dlopen.xs
+++ /dev/null
@@ -1,259 +0,0 @@
-/* dl_dlopen.xs
- *
- * Platform: SunOS/Solaris, possibly others which use dlopen.
- * Author: Paul Marquess (Paul.Marquess@btinternet.com)
- * Created: 10th July 1994
- *
- * Modified:
- * 15th July 1994 - Added code to explicitly save any error messages.
- * 3rd August 1994 - Upgraded to v3 spec.
- * 9th August 1994 - Changed to use IV
- * 10th August 1994 - Tim Bunce: Added RTLD_LAZY, switchable debugging,
- * basic FreeBSD support, removed ClearError
- * 29th Feburary 2000 - Alan Burlison: Added functionality to close dlopen'd
- * files when the interpreter exits
- *
- */
-
-/* Porting notes:
-
-
- Definition of Sunos dynamic Linking functions
- =============================================
- In order to make this implementation easier to understand here is a
- quick definition of the SunOS Dynamic Linking functions which are
- used here.
-
- dlopen
- ------
- void *
- dlopen(path, mode)
- char * path;
- int mode;
-
- This function takes the name of a dynamic object file and returns
- a descriptor which can be used by dlsym later. It returns NULL on
- error.
-
- The mode parameter must be set to 1 for Solaris 1 and to
- RTLD_LAZY (==2) on Solaris 2.
-
-
- dlclose
- -------
- int
- dlclose(handle)
- void * handle;
-
- This function takes the handle returned by a previous invocation of
- dlopen and closes the associated dynamic object file. It returns zero
- on success, and non-zero on failure.
-
-
- dlsym
- ------
- void *
- dlsym(handle, symbol)
- void * handle;
- char * symbol;
-
- Takes the handle returned from dlopen and the name of a symbol to
- get the address of. If the symbol was found a pointer is
- returned. It returns NULL on error. If DL_PREPEND_UNDERSCORE is
- defined an underscore will be added to the start of symbol. This
- is required on some platforms (freebsd).
-
- dlerror
- ------
- char * dlerror()
-
- Returns a null-terminated string which describes the last error
- that occurred with either dlopen or dlsym. After each call to
- dlerror the error message will be reset to a null pointer. The
- SaveError function is used to save the error as soon as it happens.
-
-
- Return Types
- ============
- In this implementation the two functions, dl_load_file &
- dl_find_symbol, return void *. This is because the underlying SunOS
- dynamic linker calls also return void *. This is not necessarily
- the case for all architectures. For example, some implementation
- will want to return a char * for dl_load_file.
-
- If void * is not appropriate for your architecture, you will have to
- change the void * to whatever you require. If you are not certain of
- how Perl handles C data types, I suggest you start by consulting
- Dean Roerich's Perl 5 API document. Also, have a look in the typemap
- file (in the ext directory) for a fairly comprehensive list of types
- that are already supported. If you are completely stuck, I suggest you
- post a message to perl5-porters, comp.lang.perl.misc or if you are really
- desperate to me.
-
- Remember when you are making any changes that the return value from
- dl_load_file is used as a parameter in the dl_find_symbol
- function. Also the return value from find_symbol is used as a parameter
- to install_xsub.
-
-
- Dealing with Error Messages
- ============================
- In order to make the handling of dynamic linking errors as generic as
- possible you should store any error messages associated with your
- implementation with the StoreError function.
-
- In the case of SunOS the function dlerror returns the error message
- associated with the last dynamic link error. As the SunOS dynamic
- linker functions dlopen & dlsym both return NULL on error every call
- to a SunOS dynamic link routine is coded like this
-
- RETVAL = dlopen(filename, 1) ;
- if (RETVAL == NULL)
- SaveError("%s",dlerror()) ;
-
- Note that SaveError() takes a printf format string. Use a "%s" as
- the first parameter if the error may contain any % characters.
-
-*/
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifdef I_DLFCN
-#include <dlfcn.h> /* the dynamic linker include file for Sunos/Solaris */
-#else
-#include <nlist.h>
-#include <link.h>
-#endif
-
-#ifndef RTLD_LAZY
-# define RTLD_LAZY 1 /* Solaris 1 */
-#endif
-
-#ifndef HAS_DLERROR
-# ifdef __NetBSD__
-# define dlerror() strerror(errno)
-# else
-# define dlerror() "Unknown error - dlerror() not implemented"
-# endif
-#endif
-
-
-#include "dlutils.c" /* SaveError() etc */
-
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- PREINIT:
- int mode = RTLD_LAZY;
- CODE:
-{
-#if defined(DLOPEN_WONT_DO_RELATIVE_PATHS)
- char pathbuf[PATH_MAX + 2];
- if (*filename != '/' && strchr(filename, '/')) {
- if (getcwd(pathbuf, PATH_MAX - strlen(filename))) {
- strcat(pathbuf, "/");
- strcat(pathbuf, filename);
- filename = pathbuf;
- }
- }
-#endif
-#ifdef RTLD_NOW
- if (dl_nonlazy)
- mode = RTLD_NOW;
-#endif
- if (flags & 0x01)
-#ifdef RTLD_GLOBAL
- mode |= RTLD_GLOBAL;
-#else
- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename);
-#endif
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
- RETVAL = dlopen(filename, mode) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL));
-}
-
-
-int
-dl_unload_file(libref)
- void * libref
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_unload_file(%lx):\n", PTR2ul(libref)));
- RETVAL = (dlclose(libref) == 0 ? 1 : 0);
- if (!RETVAL)
- SaveError(aTHX_ "%s", dlerror()) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " retval = %d\n", RETVAL));
- OUTPUT:
- RETVAL
-
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
-#ifdef DLSYM_NEEDS_UNDERSCORE
- symbolname = Perl_form_nocontext("_%s", symbolname);
-#endif
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- "dl_find_symbol(handle=%lx, symbol=%s)\n",
- (unsigned long) libhandle, symbolname));
- RETVAL = dlsym(libhandle, symbolname);
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- " symbolref = %lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL));
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%lx)\n",
- perl_name, (unsigned long) symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_dyld.xs b/contrib/perl5/ext/DynaLoader/dl_dyld.xs
deleted file mode 100644
index 688e474..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_dyld.xs
+++ /dev/null
@@ -1,226 +0,0 @@
-/* dl_dyld.xs
- *
- * Platform: Darwin (Mac OS)
- * Author: Wilfredo Sanchez <wsanchez@apple.com>
- * Based on: dl_next.xs by Paul Marquess
- * Based on: dl_dlopen.xs by Anno Siegel
- * Created: Aug 15th, 1994
- *
- */
-
-/*
- And Gandalf said: 'Many folk like to know beforehand what is to
- be set on the table; but those who have laboured to prepare the
- feast like to keep their secret; for wonder makes the words of
- praise louder.'
-*/
-
-/* Porting notes:
-
-dl_dyld.xs is based on dl_next.xs by Anno Siegel.
-
-dl_next.xs is in turn a port from dl_dlopen.xs by Paul Marquess. It
-should not be used as a base for further ports though it may be used
-as an example for how dl_dlopen.xs can be ported to other platforms.
-
-The method used here is just to supply the sun style dlopen etc.
-functions in terms of NeXT's/Apple's dyld. The xs code proper is
-unchanged from Paul's original.
-
-The port could use some streamlining. For one, error handling could
-be simplified.
-
-This should be useable as a replacement for dl_next.xs, but it has not
-been tested on NeXT platforms.
-
- Wilfredo Sanchez
-
-*/
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#define DL_LOADONCEONLY
-
-#include "dlutils.c" /* SaveError() etc */
-
-#undef environ
-#undef bool
-#import <mach-o/dyld.h>
-
-static char * dl_last_error = (char *) 0;
-static AV *dl_resolve_using = Nullav;
-
-static char *dlerror()
-{
- return dl_last_error;
-}
-
-int dlclose(handle) /* stub only */
-void *handle;
-{
- return 0;
-}
-
-enum dyldErrorSource
-{
- OFImage,
-};
-
-static void TranslateError
- (const char *path, enum dyldErrorSource type, int number)
-{
- dTHX;
- char *error;
- unsigned int index;
- static char *OFIErrorStrings[] =
- {
- "%s(%d): Object Image Load Failure\n",
- "%s(%d): Object Image Load Success\n",
- "%s(%d): Not an recognisable object file\n",
- "%s(%d): No valid architecture\n",
- "%s(%d): Object image has an invalid format\n",
- "%s(%d): Invalid access (permissions?)\n",
- "%s(%d): Unknown error code from NSCreateObjectFileImageFromFile\n",
- };
-#define NUM_OFI_ERRORS (sizeof(OFIErrorStrings) / sizeof(OFIErrorStrings[0]))
-
- switch (type)
- {
- case OFImage:
- index = number;
- if (index > NUM_OFI_ERRORS - 1)
- index = NUM_OFI_ERRORS - 1;
- error = Perl_form_nocontext(OFIErrorStrings[index], path, number);
- break;
-
- default:
- error = Perl_form_nocontext("%s(%d): Totally unknown error type %d\n",
- path, number, type);
- break;
- }
- safefree(dl_last_error);
- dl_last_error = savepv(error);
-}
-
-static char *dlopen(char *path, int mode /* mode is ignored */)
-{
- int dyld_result;
- NSObjectFileImage ofile;
- NSModule handle = NULL;
-
- dyld_result = NSCreateObjectFileImageFromFile(path, &ofile);
- if (dyld_result != NSObjectFileImageSuccess)
- TranslateError(path, OFImage, dyld_result);
- else
- {
- // NSLinkModule will cause the run to abort on any link error's
- // not very friendly but the error recovery functionality is limited.
- handle = NSLinkModule(ofile, path, TRUE);
- }
-
- return handle;
-}
-
-void *
-dlsym(handle, symbol)
-void *handle;
-char *symbol;
-{
- void *addr;
-
- if (NSIsSymbolNameDefined(symbol))
- addr = NSAddressOfSymbol(NSLookupAndBindSymbol(symbol));
- else
- addr = NULL;
-
- return addr;
-}
-
-
-
-/* ----- code from dl_dlopen.xs below here ----- */
-
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
- dl_resolve_using = get_av("DynaLoader::dl_resolve_using", GV_ADDMULTI);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- PREINIT:
- int mode = 1;
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
- if (flags & 0x01)
- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename);
- RETVAL = dlopen(filename, mode) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL) );
-
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
- symbolname = Perl_form_nocontext("_%s", symbolname);
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- "dl_find_symbol(handle=%lx, symbol=%s)\n",
- (unsigned long) libhandle, symbolname));
- RETVAL = dlsym(libhandle, symbolname);
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- " symbolref = %lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL) );
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%x)\n",
- perl_name, symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_hpux.xs b/contrib/perl5/ext/DynaLoader/dl_hpux.xs
deleted file mode 100644
index 582c047..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_hpux.xs
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Author: Jeff Okamoto (okamoto@corp.hp.com)
- * Version: 2.1, 1995/1/25
- */
-
-/* o Added BIND_VERBOSE to dl_nonlazy condition to add names of missing
- * symbols to stderr message on fatal error.
- *
- * o Added BIND_NONFATAL comment to default condition.
- *
- * Chuck Phillips (cdp@fc.hp.com)
- * Version: 2.2, 1997/5/4 */
-
-#ifdef __hp9000s300
-#define magic hpux_magic
-#define MAGIC HPUX_MAGIC
-#endif
-
-#include <dl.h>
-#ifdef __hp9000s300
-#undef magic
-#undef MAGIC
-#endif
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-
-#include "dlutils.c" /* for SaveError() etc */
-
-static AV *dl_resolve_using = Nullav;
-
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
- dl_resolve_using = get_av("DynaLoader::dl_resolve_using", GV_ADDMULTI);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- PREINIT:
- shl_t obj = NULL;
- int i, max, bind_type;
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
- if (flags & 0x01)
- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename);
- if (dl_nonlazy) {
- bind_type = BIND_IMMEDIATE|BIND_VERBOSE;
- } else {
- bind_type = BIND_DEFERRED;
- /* For certain libraries, like DCE, deferred binding often causes run
- * time problems. Adding BIND_NONFATAL to BIND_IMMEDIATE still allows
- * unresolved references in situations like this. */
- /* bind_type = BIND_IMMEDIATE|BIND_NONFATAL; */
- }
- /* BIND_NOSTART removed from bind_type because it causes the shared library's */
- /* initialisers not to be run. This causes problems with all of the static objects */
- /* in the library. */
-#ifdef DEBUGGING
- if (dl_debug)
- bind_type |= BIND_VERBOSE;
-#endif /* DEBUGGING */
-
- max = AvFILL(dl_resolve_using);
- for (i = 0; i <= max; i++) {
- char *sym = SvPVX(*av_fetch(dl_resolve_using, i, 0));
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s) (dependent)\n", sym));
- obj = shl_load(sym, bind_type, 0L);
- if (obj == NULL) {
- goto end;
- }
- }
-
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s): ", filename));
- obj = shl_load(filename, bind_type, 0L);
-
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", obj));
-end:
- ST(0) = sv_newmortal() ;
- if (obj == NULL)
- SaveError(aTHX_ "%s",Strerror(errno));
- else
- sv_setiv( ST(0), PTR2IV(obj) );
-
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
- shl_t obj = (shl_t) libhandle;
- void *symaddr = NULL;
- int status;
-#ifdef __hp9000s300
- symbolname = Perl_form_nocontext("_%s", symbolname);
-#endif
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- "dl_find_symbol(handle=%lx, symbol=%s)\n",
- (unsigned long) libhandle, symbolname));
-
- ST(0) = sv_newmortal() ;
- errno = 0;
-
- status = shl_findsym(&obj, symbolname, TYPE_PROCEDURE, &symaddr);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " symbolref(PROCEDURE) = %x\n", symaddr));
-
- if (status == -1 && errno == 0) { /* try TYPE_DATA instead */
- status = shl_findsym(&obj, symbolname, TYPE_DATA, &symaddr);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " symbolref(DATA) = %x\n", symaddr));
- }
-
- if (status == -1) {
- SaveError(aTHX_ "%s",(errno) ? Strerror(errno) : "Symbol not found") ;
- } else {
- sv_setiv( ST(0), PTR2IV(symaddr) );
- }
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%x)\n",
- perl_name, symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_mac.xs b/contrib/perl5/ext/DynaLoader/dl_mac.xs
deleted file mode 100644
index 5f48139..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_mac.xs
+++ /dev/null
@@ -1,137 +0,0 @@
-/* dl_mac.xs
- *
- * Platform: Macintosh CFM
- * Author: Matthias Neeracher <neeri@iis.ee.ethz.ch>
- * Adapted from dl_dlopen.xs reference implementation by
- * Paul Marquess (pmarquess@bfsec.bt.co.uk)
- * $Log: dl_mac.xs,v $
- * Revision 1.3 1998/04/07 01:47:24 neeri
- * MacPerl 5.2.0r4b1
- *
- * Revision 1.2 1997/08/08 16:39:18 neeri
- * MacPerl 5.1.4b1 + time() fix
- *
- * Revision 1.1 1997/04/07 20:48:23 neeri
- * Synchronized with MacPerl 5.1.4a1
- *
- */
-
-#define MAC_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include <CodeFragments.h>
-
-
-#include "dlutils.c" /* SaveError() etc */
-
-typedef CFragConnectionID ConnectionID;
-
-static ConnectionID ** connections;
-
-static void terminate(void)
-{
- int size = GetHandleSize((Handle) connections) / sizeof(ConnectionID);
- HLock((Handle) connections);
- while (size)
- CloseConnection(*connections + --size);
- DisposeHandle((Handle) connections);
- connections = nil;
-}
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-ConnectionID
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- PREINIT:
- OSErr err;
- FSSpec spec;
- ConnectionID connID;
- Ptr mainAddr;
- Str255 errName;
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log,"dl_load_file(%s):\n", filename));
- err = GUSIPath2FSp(filename, &spec);
- if (!err)
- err =
- GetDiskFragment(
- &spec, 0, 0, spec.name, kLoadCFrag, &connID, &mainAddr, errName);
- if (!err) {
- if (!connections) {
- connections = (ConnectionID **)NewHandle(0);
- atexit(terminate);
- }
- PtrAndHand((Ptr) &connID, (Handle) connections, sizeof(ConnectionID));
- RETVAL = connID;
- } else
- RETVAL = (ConnectionID) 0;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%d\n", RETVAL));
- ST(0) = sv_newmortal() ;
- if (err)
- SaveError(aTHX_ "DynaLoader error [%d, %#s]", err, errName) ;
- else
- sv_setiv( ST(0), (IV)RETVAL);
-
-void *
-dl_find_symbol(connID, symbol)
- ConnectionID connID
- Str255 symbol
- CODE:
- {
- OSErr err;
- Ptr symAddr;
- CFragSymbolClass symClass;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_find_symbol(handle=%x, symbol=%#s)\n",
- connID, symbol));
- err = FindSymbol(connID, symbol, &symAddr, &symClass);
- if (err)
- symAddr = (Ptr) 0;
- RETVAL = (void *) symAddr;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log," symbolref = %x\n", RETVAL));
- ST(0) = sv_newmortal() ;
- if (err)
- SaveError(aTHX_ "DynaLoader error [%d]!", err) ;
- else
- sv_setiv( ST(0), (IV)RETVAL);
- }
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_install_xsub(name=%s, symref=%x)\n",
- perl_name, symref));
- ST(0)=sv_2mortal(newRV((SV*)newXS(perl_name, (void(*)())symref, filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_mpeix.xs b/contrib/perl5/ext/DynaLoader/dl_mpeix.xs
deleted file mode 100644
index 7d27901..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_mpeix.xs
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Author: Mark Klein (mklein@dis.com)
- * Version: 2.1, 1996/07/25
- * Version: 2.2, 1997/09/25 Mark Bixby (markb@cccd.edu)
- * Version: 2.3, 1998/11/19 Mark Bixby (markb@cccd.edu)
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifdef __GNUC__
-extern void HPGETPROCPLABEL( int parms,
- char * procname,
- int * plabel,
- int * status,
- char * firstfile,
- int casesensitive,
- int symboltype,
- int * datasize,
- int position,
- int searchpath,
- int binding);
-#else
-#pragma intrinsic HPGETPROCPLABEL
-#endif
-#include "dlutils.c" /* for SaveError() etc */
-
-typedef struct {
- char filename[PATH_MAX + 3];
- } t_mpe_dld, *p_mpe_dld;
-
-static AV *dl_resolve_using = Nullav;
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
- dl_resolve_using = get_av("DynaLoader::dl_resolve_using", GV_ADDMULTI);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- PREINIT:
- char buf[PATH_MAX + 3];
- p_mpe_dld obj = NULL;
- int i;
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,
-flags));
- if (flags & 0x01)
- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s
-",filename);
- obj = (p_mpe_dld) safemalloc(sizeof(t_mpe_dld));
- memzero(obj, sizeof(t_mpe_dld));
- if (filename[0] != '/')
- {
- getcwd(buf,sizeof(buf));
- sprintf(obj->filename," %s/%s ",buf,filename);
- }
- else
- sprintf(obj->filename," %s ",filename);
-
- DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%x\n", obj));
-
- ST(0) = sv_newmortal() ;
- if (obj == NULL)
- SaveError(aTHX_"%s",Strerror(errno));
- else
- sv_setiv( ST(0), PTR2IV(obj) );
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
- int datalen;
- p_mpe_dld obj = (p_mpe_dld) libhandle;
- char symname[PATH_MAX + 3];
- void * symaddr = NULL;
- int status;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_find_symbol(handle=%x, symbol=%s)\n",
- libhandle, symbolname));
- ST(0) = sv_newmortal() ;
- errno = 0;
-
- sprintf(symname, " %s ", symbolname);
- HPGETPROCPLABEL(8, symname, &symaddr, &status, obj->filename, 1,
- 0, &datalen, 1, 0, 0);
-
- DLDEBUG(2,PerlIO_printf(Perl_debug_log," symbolref(PROCEDURE) = %x, status=%x\n", symaddr, status));
-
- if (status != 0) {
- SaveError(aTHX_"%s",(errno) ? Strerror(errno) : "Symbol not found") ;
- } else {
- sv_setiv( ST(0), PTR2IV(symaddr) );
- }
-
-void
-dl_undef_symbols()
- PPCODE:
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_install_xsub(name=%s, symref=%x)\n",
- perl_name, symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_next.xs b/contrib/perl5/ext/DynaLoader/dl_next.xs
deleted file mode 100644
index b8c19f2..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_next.xs
+++ /dev/null
@@ -1,307 +0,0 @@
-/* dl_next.xs
- *
- * Platform: NeXT NS 3.2
- * Author: Anno Siegel (siegel@zrz.TU-Berlin.DE)
- * Based on: dl_dlopen.xs by Paul Marquess
- * Created: Aug 15th, 1994
- *
- */
-
-/*
- And Gandalf said: 'Many folk like to know beforehand what is to
- be set on the table; but those who have laboured to prepare the
- feast like to keep their secret; for wonder makes the words of
- praise louder.'
-*/
-
-/* Porting notes:
-
-dl_next.xs is itself a port from dl_dlopen.xs by Paul Marquess. It
-should not be used as a base for further ports though it may be used
-as an example for how dl_dlopen.xs can be ported to other platforms.
-
-The method used here is just to supply the sun style dlopen etc.
-functions in terms of NeXTs rld_*. The xs code proper is unchanged
-from Paul's original.
-
-The port could use some streamlining. For one, error handling could
-be simplified.
-
-Anno Siegel
-
-*/
-
-#if NS_TARGET_MAJOR >= 4
-#else
-/* include these before perl headers */
-#include <mach-o/rld.h>
-#include <streams/streams.h>
-#endif
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#define DL_LOADONCEONLY
-
-#include "dlutils.c" /* SaveError() etc */
-
-
-static char * dl_last_error = (char *) 0;
-static AV *dl_resolve_using = Nullav;
-
-static char *dlerror()
-{
- return dl_last_error;
-}
-
-int dlclose(handle) /* stub only */
-void *handle;
-{
- return 0;
-}
-
-#if NS_TARGET_MAJOR >= 4
-#import <mach-o/dyld.h>
-
-enum dyldErrorSource
-{
- OFImage,
-};
-
-static void TranslateError
- (const char *path, enum dyldErrorSource type, int number)
-{
- dTHX;
- char *error;
- unsigned int index;
- static char *OFIErrorStrings[] =
- {
- "%s(%d): Object Image Load Failure\n",
- "%s(%d): Object Image Load Success\n",
- "%s(%d): Not an recognisable object file\n",
- "%s(%d): No valid architecture\n",
- "%s(%d): Object image has an invalid format\n",
- "%s(%d): Invalid access (permissions?)\n",
- "%s(%d): Unknown error code from NSCreateObjectFileImageFromFile\n",
- };
-#define NUM_OFI_ERRORS (sizeof(OFIErrorStrings) / sizeof(OFIErrorStrings[0]))
-
- switch (type)
- {
- case OFImage:
- index = number;
- if (index > NUM_OFI_ERRORS - 1)
- index = NUM_OFI_ERRORS - 1;
- error = Perl_form_nocontext(OFIErrorStrings[index], path, number);
- break;
-
- default:
- error = Perl_form_nocontext("%s(%d): Totally unknown error type %d\n",
- path, number, type);
- break;
- }
- Safefree(dl_last_error);
- dl_last_error = savepv(error);
-}
-
-static char *dlopen(char *path, int mode /* mode is ignored */)
-{
- int dyld_result;
- NSObjectFileImage ofile;
- NSModule handle = NULL;
-
- dyld_result = NSCreateObjectFileImageFromFile(path, &ofile);
- if (dyld_result != NSObjectFileImageSuccess)
- TranslateError(path, OFImage, dyld_result);
- else
- {
- // NSLinkModule will cause the run to abort on any link error's
- // not very friendly but the error recovery functionality is limited.
- handle = NSLinkModule(ofile, path, TRUE);
- }
-
- return handle;
-}
-
-void *
-dlsym(handle, symbol)
-void *handle;
-char *symbol;
-{
- void *addr;
-
- if (NSIsSymbolNameDefined(symbol))
- addr = NSAddressOfSymbol(NSLookupAndBindSymbol(symbol));
- else
- addr = NULL;
-
- return addr;
-}
-
-#else /* NS_TARGET_MAJOR <= 3 */
-
-static NXStream *OpenError(void)
-{
- return NXOpenMemory( (char *) 0, 0, NX_WRITEONLY);
-}
-
-static void TransferError(NXStream *s)
-{
- char *buffer;
- int len, maxlen;
-
- if ( dl_last_error ) {
- Safefree(dl_last_error);
- }
- NXGetMemoryBuffer(s, &buffer, &len, &maxlen);
- New(1097, dl_last_error, len, char);
- strcpy(dl_last_error, buffer);
-}
-
-static void CloseError(NXStream *s)
-{
- if ( s ) {
- NXCloseMemory( s, NX_FREEBUFFER);
- }
-}
-
-static char *dlopen(char *path, int mode /* mode is ignored */)
-{
- int rld_success;
- NXStream *nxerr;
- I32 i, psize;
- char *result;
- char **p;
- STRLEN n_a;
-
- /* Do not load what is already loaded into this process */
- if (hv_fetch(dl_loaded_files, path, strlen(path), 0))
- return path;
-
- nxerr = OpenError();
- psize = AvFILL(dl_resolve_using) + 3;
- p = (char **) safemalloc(psize * sizeof(char*));
- p[0] = path;
- for(i=1; i<psize-1; i++) {
- p[i] = SvPVx(*av_fetch(dl_resolve_using, i-1, TRUE), n_a);
- }
- p[psize-1] = 0;
- rld_success = rld_load(nxerr, (struct mach_header **)0, p,
- (const char *) 0);
- safefree((char*) p);
- if (rld_success) {
- result = path;
- /* prevent multiple loads of same file into same process */
- hv_store(dl_loaded_files, path, strlen(path), &PL_sv_yes, 0);
- } else {
- TransferError(nxerr);
- result = (char*) 0;
- }
- CloseError(nxerr);
- return result;
-}
-
-void *
-dlsym(handle, symbol)
-void *handle;
-char *symbol;
-{
- NXStream *nxerr = OpenError();
- unsigned long symref = 0;
-
- if (!rld_lookup(nxerr, Perl_form_nocontext("_%s", symbol), &symref))
- TransferError(nxerr);
- CloseError(nxerr);
- return (void*) symref;
-}
-
-#endif /* NS_TARGET_MAJOR >= 4 */
-
-
-/* ----- code from dl_dlopen.xs below here ----- */
-
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
- dl_resolve_using = get_av("DynaLoader::dl_resolve_using", GV_ADDMULTI);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- PREINIT:
- int mode = 1;
- CODE:
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
- if (flags & 0x01)
- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename);
- RETVAL = dlopen(filename, mode) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL) );
-
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
-#if NS_TARGET_MAJOR >= 4
- symbolname = Perl_form_nocontext("_%s", symbolname);
-#endif
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- "dl_find_symbol(handle=%lx, symbol=%s)\n",
- (unsigned long) libhandle, symbolname));
- RETVAL = dlsym(libhandle, symbolname);
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- " symbolref = %lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL) );
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%x)\n",
- perl_name, symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_none.xs b/contrib/perl5/ext/DynaLoader/dl_none.xs
deleted file mode 100644
index 5a193e4..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_none.xs
+++ /dev/null
@@ -1,19 +0,0 @@
-/* dl_none.xs
- *
- * Stubs for platforms that do not support dynamic linking
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-char *
-dl_error()
- CODE:
- RETVAL = "Not implemented";
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_vmesa.xs b/contrib/perl5/ext/DynaLoader/dl_vmesa.xs
deleted file mode 100644
index 8595e44..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_vmesa.xs
+++ /dev/null
@@ -1,175 +0,0 @@
-/* dl_vmesa.xs
- *
- * Platform: VM/ESA, possibly others which use dllload etc.
- * Author: Neale Ferguson (neale@mailbox.tabnsw.com.au)
- * Created: 23rd Septemer, 1998
- *
- *
- */
-
-/* Porting notes:
-
-
- Definition of VM/ESA dynamic Linking functions
- ==============================================
- In order to make this implementation easier to understand here is a
- quick definition of the VM/ESA Dynamic Linking functions which are
- used here.
-
- dlopen
- ------
- void *
- dlopen(const char *path)
-
- This function takes the name of a dynamic object file and returns
- a descriptor which can be used by dlsym later. It returns NULL on
- error.
-
-
- dllsym
- ------
- void *
- dlsym(void *handle, char *symbol)
-
- Takes the handle returned from dlopen and the name of a symbol to
- get the address of. If the symbol was found a pointer is
- returned. It returns NULL on error.
-
- dlerror
- -------
- char * dlerror()
-
- Returns a null-terminated string which describes the last error
- that occurred with the other dll functions. After each call to
- dlerror the error message will be reset to a null pointer. The
- SaveError function is used to save the error as soo as it happens.
-
-
- Return Types
- ============
- In this implementation the two functions, dl_load_file &
- dl_find_symbol, return void *. This is because the underlying SunOS
- dynamic linker calls also return void *. This is not necessarily
- the case for all architectures. For example, some implementation
- will want to return a char * for dl_load_file.
-
- If void * is not appropriate for your architecture, you will have to
- change the void * to whatever you require. If you are not certain of
- how Perl handles C data types, I suggest you start by consulting
- Dean Roerich's Perl 5 API document. Also, have a look in the typemap
- file (in the ext directory) for a fairly comprehensive list of types
- that are already supported. If you are completely stuck, I suggest you
- post a message to perl5-porters, comp.lang.perl.misc or if you are really
- desperate to me.
-
- Remember when you are making any changes that the return value from
- dl_load_file is used as a parameter in the dl_find_symbol
- function. Also the return value from find_symbol is used as a parameter
- to install_xsub.
-
-
- Dealing with Error Messages
- ============================
- In order to make the handling of dynamic linking errors as generic as
- possible you should store any error messages associated with your
- implementation with the StoreError function.
-
- In the case of VM/ESA the function dlerror returns the error message
- associated with the last dynamic link error. As the VM/ESA dynamic
- linker functions return NULL on error every call to a VM/ESA dynamic
- dynamic link routine is coded like this
-
- RETVAL = dlopen(filename) ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
-
- Note that SaveError() takes a printf format string. Use a "%s" as
- the first parameter if the error may contain and % characters.
-
-*/
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#include <dll.h>
-
-
-#include "dlutils.c" /* SaveError() etc */
-
-
-static void
-dl_private_init(pTHX)
-{
- (void)dl_generic_private_init(aTHX);
-}
-
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-
-void *
-dl_load_file(filename, flags=0)
- char * filename
- int flags
- CODE:
- if (flags & 0x01)
- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename);
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
- RETVAL = dlopen(filename) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL) );
-
-
-void *
-dl_find_symbol(libhandle, symbolname)
- void * libhandle
- char * symbolname
- CODE:
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- "dl_find_symbol(handle=%lx, symbol=%s)\n",
- (unsigned long) libhandle, symbolname));
- RETVAL = dlsym(libhandle, symbolname);
- DLDEBUG(2, PerlIO_printf(Perl_debug_log,
- " symbolref = %lx\n", (unsigned long) RETVAL));
- ST(0) = sv_newmortal() ;
- if (RETVAL == NULL)
- SaveError(aTHX_ "%s",dlerror()) ;
- else
- sv_setiv( ST(0), PTR2IV(RETVAL) );
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%lx)\n",
- perl_name, (unsigned long) symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dl_vms.xs b/contrib/perl5/ext/DynaLoader/dl_vms.xs
deleted file mode 100644
index d7a1f86..0000000
--- a/contrib/perl5/ext/DynaLoader/dl_vms.xs
+++ /dev/null
@@ -1,367 +0,0 @@
-/* dl_vms.xs
- *
- * Platform: OpenVMS, VAX or AXP
- * Author: Charles Bailey bailey@newman.upenn.edu
- * Revised: 12-Dec-1994
- *
- * Implementation Note
- * This section is added as an aid to users and DynaLoader developers, in
- * order to clarify the process of dynamic linking under VMS.
- * dl_vms.xs uses the supported VMS dynamic linking call, which allows
- * a running program to map an arbitrary file of executable code and call
- * routines within that file. This is done via the VMS RTL routine
- * lib$find_image_symbol, whose calling sequence is as follows:
- * status = lib$find_image_symbol(imgname,symname,symval,defspec);
- * where
- * status = a standard VMS status value (unsigned long int)
- * imgname = a fixed-length string descriptor, passed by
- * reference, containing the NAME ONLY of the image
- * file to be mapped. An attempt will be made to
- * translate this string as a logical name, so it may
- * not contain any characters which are not allowed in
- * logical names. If no translation is found, imgname
- * is used directly as the name of the image file.
- * symname = a fixed-length string descriptor, passed by
- * reference, containing the name of the routine
- * to be located.
- * symval = an unsigned long int, passed by reference, into
- * which is written the entry point address of the
- * routine whose name is specified in symname.
- * defspec = a fixed-length string descriptor, passed by
- * reference, containing a default file specification
- * whichis used to fill in any missing parts of the
- * image file specification after the imgname argument
- * is processed.
- * In order to accommodate the handling of the imgname argument, the routine
- * dl_expandspec() is provided for use by perl code (e.g. dl_findfile)
- * which wants to see what image file lib$find_image_symbol would use if
- * it were passed a given file specification. The file specification passed
- * to dl_expandspec() and dl_load_file() can be partial or complete, and can
- * use VMS or Unix syntax; these routines perform the necessary conversions.
- * In general, writers of perl extensions need only conform to the
- * procedures set out in the DynaLoader documentation, and let the details
- * be taken care of by the routines here and in DynaLoader.pm. If anyone
- * comes across any incompatibilities, please let me know. Thanks.
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "dlutils.c" /* dl_debug, LastError; SaveError not used */
-
-static AV *dl_require_symbols = Nullav;
-
-/* N.B.:
- * dl_debug and LastError are static vars; you'll need to deal
- * with them appropriately if you need context independence
- */
-
-#include <descrip.h>
-#include <fscndef.h>
-#include <lib$routines.h>
-#include <rms.h>
-#include <ssdef.h>
-#include <starlet.h>
-
-#if defined(VMS_WE_ARE_CASE_SENSITIVE)
-#define DL_CASE_SENSITIVE 1<<4
-#else
-#define DL_CASE_SENSITIVE 0
-#endif
-
-typedef unsigned long int vmssts;
-
-struct libref {
- struct dsc$descriptor_s name;
- struct dsc$descriptor_s defspec;
-};
-
-/* Static data for dl_expand_filespec() - This is static to save
- * initialization on each call; if you need context-independence,
- * just make these auto variables in dl_expandspec() and dl_load_file()
- */
-static char dlesa[NAM$C_MAXRSS], dlrsa[NAM$C_MAXRSS];
-static struct FAB dlfab;
-static struct NAM dlnam;
-
-/* $PutMsg action routine - records error message in LastError */
-static vmssts
-copy_errmsg(msg,unused)
- struct dsc$descriptor_s * msg;
- vmssts unused;
-{
- if (*(msg->dsc$a_pointer) == '%') { /* first line */
- if (LastError)
- strncpy((LastError = saferealloc(LastError,msg->dsc$w_length+1)),
- msg->dsc$a_pointer, msg->dsc$w_length);
- else
- strncpy((LastError = safemalloc(msg->dsc$w_length+1)),
- msg->dsc$a_pointer, msg->dsc$w_length);
- LastError[msg->dsc$w_length] = '\0';
- }
- else { /* continuation line */
- int errlen = strlen(LastError);
- LastError = saferealloc(LastError, errlen + msg->dsc$w_length + 2);
- LastError[errlen] = '\n'; LastError[errlen+1] = '\0';
- strncat(LastError, msg->dsc$a_pointer, msg->dsc$w_length);
- LastError[errlen+msg->dsc$w_length+1] = '\0';
- }
- return 0;
-}
-
-/* Use $PutMsg to retrieve error message for failure status code */
-static void
-dl_set_error(sts,stv)
- vmssts sts;
- vmssts stv;
-{
- vmssts vec[3];
- dTHX;
-
- vec[0] = stv ? 2 : 1;
- vec[1] = sts; vec[2] = stv;
- _ckvmssts(sys$putmsg(vec,copy_errmsg,0,0));
-}
-
-static unsigned int
-findsym_handler(void *sig, void *mech)
-{
- dTHX;
- unsigned long int myvec[8],args, *usig = (unsigned long int *) sig;
- /* Be paranoid and assume signal vector passed in might be readonly */
- myvec[0] = args = usig[0] > 10 ? 9 : usig[0] - 1;
- while (--args) myvec[args] = usig[args];
- _ckvmssts(sys$putmsg(myvec,copy_errmsg,0,0));
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "findsym_handler: received\n\t%s\n",LastError));
- return SS$_CONTINUE;
-}
-
-/* wrapper for lib$find_image_symbol, so signalled errors can be saved
- * for dl_error and then returned */
-static unsigned long int
-my_find_image_symbol(struct dsc$descriptor_s *imgname,
- struct dsc$descriptor_s *symname,
- void (**entry)(),
- struct dsc$descriptor_s *defspec)
-{
- unsigned long int retsts;
- VAXC$ESTABLISH(findsym_handler);
- retsts = lib$find_image_symbol(imgname,symname,entry,defspec,DL_CASE_SENSITIVE);
- return retsts;
-}
-
-
-static void
-dl_private_init(pTHX)
-{
- dl_generic_private_init(aTHX);
- dl_require_symbols = get_av("DynaLoader::dl_require_symbols", 0x4);
- /* Set up the static control blocks for dl_expand_filespec() */
- dlfab = cc$rms_fab;
- dlnam = cc$rms_nam;
- dlfab.fab$l_nam = &dlnam;
- dlnam.nam$l_esa = dlesa;
- dlnam.nam$b_ess = sizeof dlesa;
- dlnam.nam$l_rsa = dlrsa;
- dlnam.nam$b_rss = sizeof dlrsa;
-}
-MODULE = DynaLoader PACKAGE = DynaLoader
-
-BOOT:
- (void)dl_private_init(aTHX);
-
-void
-dl_expandspec(filespec)
- char * filespec
- CODE:
- char vmsspec[NAM$C_MAXRSS], defspec[NAM$C_MAXRSS];
- size_t deflen;
- vmssts sts;
-
- tovmsspec(filespec,vmsspec);
- dlfab.fab$l_fna = vmsspec;
- dlfab.fab$b_fns = strlen(vmsspec);
- dlfab.fab$l_dna = 0;
- dlfab.fab$b_dns = 0;
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_expand_filespec(%s):\n",vmsspec));
- /* On the first pass, just parse the specification string */
- dlnam.nam$b_nop = NAM$M_SYNCHK;
- sts = sys$parse(&dlfab);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tSYNCHK sys$parse = %d\n",sts));
- if (!(sts & 1)) {
- dl_set_error(dlfab.fab$l_sts,dlfab.fab$l_stv);
- ST(0) = &PL_sv_undef;
- }
- else {
- /* Now set up a default spec - everything but the name */
- deflen = dlnam.nam$l_name - dlesa;
- memcpy(defspec,dlesa,deflen);
- memcpy(defspec+deflen,dlnam.nam$l_type,
- dlnam.nam$b_type + dlnam.nam$b_ver);
- deflen += dlnam.nam$b_type + dlnam.nam$b_ver;
- memcpy(vmsspec,dlnam.nam$l_name,dlnam.nam$b_name);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tsplit filespec: name = %.*s, default = %.*s\n",
- dlnam.nam$b_name,vmsspec,deflen,defspec));
- /* . . . and go back to expand it */
- dlnam.nam$b_nop = 0;
- dlfab.fab$l_dna = defspec;
- dlfab.fab$b_dns = deflen;
- dlfab.fab$b_fns = dlnam.nam$b_name;
- sts = sys$parse(&dlfab);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tname/default sys$parse = %d\n",sts));
- if (!(sts & 1)) {
- dl_set_error(dlfab.fab$l_sts,dlfab.fab$l_stv);
- ST(0) = &PL_sv_undef;
- }
- else {
- /* Now find the actual file */
- sts = sys$search(&dlfab);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tsys$search = %d\n",sts));
- if (!(sts & 1)) {
- dl_set_error(dlfab.fab$l_sts,dlfab.fab$l_stv);
- ST(0) = &PL_sv_undef;
- }
- else {
- ST(0) = sv_2mortal(newSVpvn(dlnam.nam$l_rsa,dlnam.nam$b_rsl));
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "\tresult = \\%.*s\\\n",
- dlnam.nam$b_rsl,dlnam.nam$l_rsa));
- }
- }
- }
-
-void
-dl_load_file(filespec, flags)
- char * filespec
- int flags
- PREINIT:
- dTHX;
- char vmsspec[NAM$C_MAXRSS];
- SV *reqSV, **reqSVhndl;
- STRLEN deflen;
- struct dsc$descriptor_s
- specdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0},
- symdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
- struct fscnlst {
- unsigned short int len;
- unsigned short int code;
- char *string;
- } namlst[2] = {{0,FSCN$_NAME,0},{0,0,0}};
- struct libref *dlptr;
- vmssts sts, failed = 0;
- void (*entry)();
- CODE:
-
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filespec,flags));
- specdsc.dsc$a_pointer = tovmsspec(filespec,vmsspec);
- specdsc.dsc$w_length = strlen(specdsc.dsc$a_pointer);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tVMS-ified filespec is %s\n",
- specdsc.dsc$a_pointer));
- New(1399,dlptr,1,struct libref);
- dlptr->name.dsc$b_dtype = dlptr->defspec.dsc$b_dtype = DSC$K_DTYPE_T;
- dlptr->name.dsc$b_class = dlptr->defspec.dsc$b_class = DSC$K_CLASS_S;
- sts = sys$filescan(&specdsc,namlst,0);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tsys$filescan: returns %d, name is %.*s\n",
- sts,namlst[0].len,namlst[0].string));
- if (!(sts & 1)) {
- failed = 1;
- dl_set_error(sts,0);
- }
- else {
- dlptr->name.dsc$w_length = namlst[0].len;
- dlptr->name.dsc$a_pointer = savepvn(namlst[0].string,namlst[0].len);
- dlptr->defspec.dsc$w_length = specdsc.dsc$w_length - namlst[0].len;
- New(1097, dlptr->defspec.dsc$a_pointer, dlptr->defspec.dsc$w_length + 1, char);
- deflen = namlst[0].string - specdsc.dsc$a_pointer;
- memcpy(dlptr->defspec.dsc$a_pointer,specdsc.dsc$a_pointer,deflen);
- memcpy(dlptr->defspec.dsc$a_pointer + deflen,
- namlst[0].string + namlst[0].len,
- dlptr->defspec.dsc$w_length - deflen);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tlibref = name: %s, defspec: %.*s\n",
- dlptr->name.dsc$a_pointer,
- dlptr->defspec.dsc$w_length,
- dlptr->defspec.dsc$a_pointer));
- if (!(reqSVhndl = av_fetch(dl_require_symbols,0,FALSE)) || !(reqSV = *reqSVhndl)) {
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\t@dl_require_symbols empty, returning untested libref\n"));
- }
- else {
- symdsc.dsc$w_length = SvCUR(reqSV);
- symdsc.dsc$a_pointer = SvPVX(reqSV);
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\t$dl_require_symbols[0] = %.*s\n",
- symdsc.dsc$w_length, symdsc.dsc$a_pointer));
- sts = my_find_image_symbol(&(dlptr->name),&symdsc,
- &entry,&(dlptr->defspec));
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tlib$find_image_symbol returns %d\n",sts));
- if (!(sts&1)) {
- failed = 1;
- dl_set_error(sts,0);
- }
- }
- }
-
- if (failed) {
- Safefree(dlptr->name.dsc$a_pointer);
- Safefree(dlptr->defspec.dsc$a_pointer);
- Safefree(dlptr);
- ST(0) = &PL_sv_undef;
- }
- else {
- ST(0) = sv_2mortal(newSViv(PTR2IV(dlptr)));
- }
-
-
-void
-dl_find_symbol(librefptr,symname)
- void * librefptr
- SV * symname
- CODE:
- struct libref thislib = *((struct libref *)librefptr);
- struct dsc$descriptor_s
- symdsc = {SvCUR(symname),DSC$K_DTYPE_T,DSC$K_CLASS_S,SvPVX(symname)};
- void (*entry)();
- vmssts sts;
-
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_find_dymbol(%.*s,%.*s):\n",
- thislib.name.dsc$w_length, thislib.name.dsc$a_pointer,
- symdsc.dsc$w_length,symdsc.dsc$a_pointer));
- sts = my_find_image_symbol(&(thislib.name),&symdsc,
- &entry,&(thislib.defspec));
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tlib$find_image_symbol returns %d\n",sts));
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "\tentry point is %d\n",
- (unsigned long int) entry));
- if (!(sts & 1)) {
- /* error message already saved by findsym_handler */
- ST(0) = &PL_sv_undef;
- }
- else ST(0) = sv_2mortal(newSViv(PTR2IV(entry)));
-
-
-void
-dl_undef_symbols()
- PPCODE:
-
-
-# These functions should not need changing on any platform:
-
-void
-dl_install_xsub(perl_name, symref, filename="$Package")
- char * perl_name
- void * symref
- char * filename
- CODE:
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%x)\n",
- perl_name, symref));
- ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
- (void(*)(pTHX_ CV *))symref,
- filename)));
-
-
-char *
-dl_error()
- CODE:
- RETVAL = LastError ;
- OUTPUT:
- RETVAL
-
-# end.
diff --git a/contrib/perl5/ext/DynaLoader/dlutils.c b/contrib/perl5/ext/DynaLoader/dlutils.c
deleted file mode 100644
index 9d88f5f..0000000
--- a/contrib/perl5/ext/DynaLoader/dlutils.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* dlutils.c - handy functions and definitions for dl_*.xs files
- *
- * Currently this file is simply #included into dl_*.xs/.c files.
- * It should really be split into a dlutils.h and dlutils.c
- *
- * Modified:
- * 29th Feburary 2000 - Alan Burlison: Added functionality to close dlopen'd
- * files when the interpreter exits
- */
-
-
-/* pointer to allocated memory for last error message */
-static char *LastError = (char*)NULL;
-
-/* flag for immediate rather than lazy linking (spots unresolved symbol) */
-static int dl_nonlazy = 0;
-
-#ifdef DL_LOADONCEONLY
-static HV *dl_loaded_files = Nullhv; /* only needed on a few systems */
-#endif
-
-
-#ifdef DEBUGGING
-static int dl_debug = 0; /* value copied from $DynaLoader::dl_debug */
-#define DLDEBUG(level,code) if (dl_debug>=level) { code; }
-#else
-#define DLDEBUG(level,code)
-#endif
-
-
-/* Close all dlopen'd files */
-static void
-dl_unload_all_files(pTHXo_ void *unused)
-{
- CV *sub;
- AV *dl_librefs;
- SV *dl_libref;
-
- if ((sub = get_cv("DynaLoader::dl_unload_file", FALSE)) != NULL) {
- dl_librefs = get_av("DynaLoader::dl_librefs", FALSE);
- while ((dl_libref = av_pop(dl_librefs)) != &PL_sv_undef) {
- dSP;
- ENTER;
- SAVETMPS;
- PUSHMARK(SP);
- XPUSHs(sv_2mortal(dl_libref));
- PUTBACK;
- call_sv((SV*)sub, G_DISCARD | G_NODEBUG);
- FREETMPS;
- LEAVE;
- }
- }
-}
-
-
-static void
-dl_generic_private_init(pTHXo) /* called by dl_*.xs dl_private_init() */
-{
- char *perl_dl_nonlazy;
-#ifdef DEBUGGING
- SV *sv = get_sv("DynaLoader::dl_debug", 0);
- dl_debug = sv ? SvIV(sv) : 0;
-#endif
- if ( (perl_dl_nonlazy = getenv("PERL_DL_NONLAZY")) != NULL )
- dl_nonlazy = atoi(perl_dl_nonlazy);
- if (dl_nonlazy)
- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "DynaLoader bind mode is 'non-lazy'\n"));
-#ifdef DL_LOADONCEONLY
- if (!dl_loaded_files)
- dl_loaded_files = newHV(); /* provide cache for dl_*.xs if needed */
-#endif
-#ifdef DL_UNLOAD_ALL_AT_EXIT
- call_atexit(&dl_unload_all_files, (void*)0);
-#endif
-}
-
-
-/* SaveError() takes printf style args and saves the result in LastError */
-static void
-SaveError(pTHXo_ char* pat, ...)
-{
- va_list args;
- SV *msv;
- char *message;
- STRLEN len;
-
- /* This code is based on croak/warn, see mess() in util.c */
-
- va_start(args, pat);
- msv = vmess(pat, &args);
- va_end(args);
-
- message = SvPV(msv,len);
- len++; /* include terminating null char */
-
- /* Allocate some memory for the error message */
- if (LastError)
- LastError = (char*)saferealloc(LastError, len) ;
- else
- LastError = (char *) safemalloc(len) ;
-
- /* Copy message into LastError (including terminating null char) */
- strncpy(LastError, message, len) ;
- DLDEBUG(2,PerlIO_printf(Perl_debug_log, "DynaLoader: stored error msg '%s'\n",LastError));
-}
-
diff --git a/contrib/perl5/ext/DynaLoader/hints/aix.pl b/contrib/perl5/ext/DynaLoader/hints/aix.pl
deleted file mode 100644
index d4231cc..0000000
--- a/contrib/perl5/ext/DynaLoader/hints/aix.pl
+++ /dev/null
@@ -1,14 +0,0 @@
-# See dl_aix.xs for details.
-use Config;
-if ($Config{libs} =~ /-lC/ && -f '/lib/libC.a') {
- $self->{CCFLAGS} = $Config{ccflags} . ' -DUSE_libC';
- if (-f '/usr/vacpp/include/load.h') {
- $self->{CCFLAGS} .= ' -DUSE_vacpp_load_h';
- } elsif (-f '/usr/ibmcxx/include/load.h') {
- $self->{CCFLAGS} .= ' -DUSE_ibmcxx_load_h';
- } elsif (-f '/usr/lpp/xlC/include/load.h') {
- $self->{CCFLAGS} .= ' -DUSE_xlC_load_h';
- } elsif (-f '/usr/include/load.h') {
- $self->{CCFLAGS} .= ' -DUSE_load_h';
- }
-}
diff --git a/contrib/perl5/ext/DynaLoader/hints/linux.pl b/contrib/perl5/ext/DynaLoader/hints/linux.pl
deleted file mode 100644
index 06f4f4c..0000000
--- a/contrib/perl5/ext/DynaLoader/hints/linux.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-# XXX Configure test needed.
-# Some Linux releases like to hide their <nlist.h>
-$self->{CCFLAGS} = $Config{ccflags} . ' -I/usr/include/libelf'
- if -f "/usr/include/libelf/nlist.h";
diff --git a/contrib/perl5/ext/DynaLoader/hints/netbsd.pl b/contrib/perl5/ext/DynaLoader/hints/netbsd.pl
deleted file mode 100644
index a0fbaf7..0000000
--- a/contrib/perl5/ext/DynaLoader/hints/netbsd.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# XXX Configure test needed?
-# Some NetBSDs seem to have a dlopen() that won't accept relative paths
-$self->{CCFLAGS} = $Config{ccflags} . ' -DDLOPEN_WONT_DO_RELATIVE_PATHS';
diff --git a/contrib/perl5/ext/DynaLoader/hints/openbsd.pl b/contrib/perl5/ext/DynaLoader/hints/openbsd.pl
deleted file mode 100644
index aeaa92c..0000000
--- a/contrib/perl5/ext/DynaLoader/hints/openbsd.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# XXX Configure test needed?
-# Some OpenBSDs seem to have a dlopen() that won't accept relative paths
-$self->{CCFLAGS} = $Config{ccflags} . ' -DDLOPEN_WONT_DO_RELATIVE_PATHS';
diff --git a/contrib/perl5/ext/Errno/ChangeLog b/contrib/perl5/ext/Errno/ChangeLog
deleted file mode 100644
index dd94b37..0000000
--- a/contrib/perl5/ext/Errno/ChangeLog
+++ /dev/null
@@ -1,55 +0,0 @@
-Change 171 on 2000-09-12 by <calle@lysator.liu.se> (Calle Dybedahl)
-
- - Fixed filename-extracting regexp to allow whitespace between
- "#" and "line", which the cpp on Unicos 9 produces.
-
-Change 170 on 1998/07/05 by <gbarr@pobox.com> (Graham Barr)
-
- Fixed three problems reported by Hans Mulder for NeXT
-
- - Errno_pm.PL does not recognize #define lines because they have
- whitespace before the '#'. ANSI does not allow that in portable
- code; that didn't stop the author of NeXT's <errno.h>.
-
- - Cpp output lines look like this: #1 "errno.c"
- Errno_pm.PL does not recognize that format; it wants whitespace
- before the line number.
-
- - Cpp does a syntax check on files with names ending in ".c"; it
- reports fatal errors on input lines like: "ENOSYS" [[ENOSYS]]
- Workaround: use $Config{cppstdin}, like Errno 1.04 did.
-
-Change 160 on 1998/06/27 by <gbarr@pobox.com> (Graham Barr)
-
- - Added patch from Sarathy to support Win32
- - Changed use of $Config{cpp} to $Config{cpprun} as suggested by
- Tom Horsley
-
-Change 159 on 1998/06/27 by <gbarr@pobox.com> (Graham Barr)
-
- - Changed to use cpp to locate required files
- - Moved dummy Errno.pm file into d/
- - Added support for VMS
-
-Change 158 on 1998/06/27 by <gbarr@pobox.com> (Graham Barr)
-
- Rename errno.pl to Errno_pm.PL
-
-Change 146 on 1998/05/31 by <gbarr@pobox.com> (Graham Barr)
-
- Added ChangeLog to MANIFEST
-
-Change 140 on 1998/05/23 by <gbarr@pobox.com> (Graham Barr)
-
- Fix type in errno.pl
-
-Change 139 on 1998/05/23 by <gbarr@pobox.com> (Graham Barr)
-
- Moved code to generate Errno.pm into errno.pl
-
-Change 136 on 1998/05/19 by <gbarr@pobox.com> (Graham Barr)
-
- Changed to use cpp to locate constants
-
- Added t/errno.t
-
diff --git a/contrib/perl5/ext/Errno/Errno_pm.PL b/contrib/perl5/ext/Errno/Errno_pm.PL
deleted file mode 100644
index 3f2f3e0..0000000
--- a/contrib/perl5/ext/Errno/Errno_pm.PL
+++ /dev/null
@@ -1,361 +0,0 @@
-use ExtUtils::MakeMaker;
-use Config;
-use strict;
-
-use vars qw($VERSION);
-
-$VERSION = "1.111";
-
-my %err = ();
-
-unlink "Errno.pm" if -f "Errno.pm";
-open OUT, ">Errno.pm" or die "Cannot open Errno.pm: $!";
-select OUT;
-my $file;
-foreach $file (get_files()) {
- process_file($file);
-}
-write_errno_pm();
-unlink "errno.c" if -f "errno.c";
-
-sub process_file {
- my($file) = @_;
-
- return unless defined $file and -f $file;
-
- local *FH;
- if (($^O eq 'VMS') && ($Config{vms_cc_type} ne 'gnuc')) {
- unless(open(FH," LIBRARY/EXTRACT=ERRNO/OUTPUT=SYS\$OUTPUT $file |")) {
- warn "Cannot open '$file'";
- return;
- }
- } elsif ($Config{gccversion} ne '') {
- # With the -dM option, gcc outputs every #define it finds
- my $ccopts = "-E -dM ";
- $ccopts .= "-traditional-cpp " if $^O eq 'darwin';
- unless(open(FH,"$Config{cc} $ccopts $file |")) {
- warn "Cannot open '$file'";
- return;
- }
- } else {
- unless(open(FH,"< $file")) {
- # This file could be a temporary file created by cppstdin
- # so only warn under -w, and return
- warn "Cannot open '$file'" if $^W;
- return;
- }
- }
-
- if ($^O eq 'MacOS') {
- while(<FH>) {
- $err{$1} = $2
- if /^\s*#\s*define\s+(E\w+)\s+(\d+)/;
- }
- } else {
- while(<FH>) {
- $err{$1} = 1
- if /^\s*#\s*define\s+(E\w+)\s+/;
- }
- }
- close(FH);
-}
-
-my $cppstdin;
-
-sub default_cpp {
- unless (defined $cppstdin) {
- use File::Spec;
- $cppstdin = $Config{cppstdin};
- my $upup_cppstdin = File::Spec->catfile(File::Spec->updir,
- File::Spec->updir,
- "cppstdin");
- my $cppstdin_is_wrapper =
- ($cppstdin eq 'cppstdin'
- and -f $upup_cppstdin
- and -x $upup_cppstdin);
- $cppstdin = $upup_cppstdin if $cppstdin_is_wrapper;
- }
- return "$cppstdin $Config{cppflags} $Config{cppminus}";
-}
-
-sub get_files {
- my %file = ();
- # VMS keeps its include files in system libraries (well, except for Gcc)
- if ($^O eq 'VMS') {
- if ($Config{vms_cc_type} eq 'decc') {
- $file{'Sys$Library:DECC$RTLDEF.TLB'} = 1;
- } elsif ($Config{vms_cc_type} eq 'vaxc') {
- $file{'Sys$Library:vaxcdef.tlb'} = 1;
- } elsif ($Config{vms_cc_type} eq 'gcc') {
- $file{'gnu_cc_include:[000000]errno.h'} = 1;
- }
- } elsif ($^O eq 'os390') {
- # OS/390 C compiler doesn't generate #file or #line directives
- $file{'/usr/include/errno.h'} = 1;
- } elsif ($^O eq 'vmesa') {
- # OS/390 C compiler doesn't generate #file or #line directives
- $file{'../../vmesa/errno.h'} = 1;
- } elsif ($Config{archname} eq 'epoc') {
- # Watch out for cross compiling for EPOC (usually done on linux)
- $file{'/usr/local/epoc/include/libc/sys/errno.h'} = 1;
- } elsif ($^O eq 'linux') {
- # Some Linuxes have weird errno.hs which generate
- # no #file or #line directives
- $file{'/usr/include/errno.h'} = 1;
- } elsif ($^O eq 'MacOS') {
- # note that we are only getting the GUSI errno's here ...
- # we might miss out on compiler-specific ones
- $file{"$ENV{GUSI}include:sys:errno.h"} = 1;
-
- } else {
- open(CPPI,"> errno.c") or
- die "Cannot open errno.c";
-
- print CPPI "#include <errno.h>\n";
-
- close(CPPI);
-
- # invoke CPP and read the output
- if ($^O eq 'MSWin32') {
- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or
- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'";
- } else {
- my $cpp = default_cpp();
- open(CPPO,"$cpp < errno.c |") or
- die "Cannot exec $cpp";
- }
-
- my $pat;
- if ($^O eq 'MSWin32' and $Config{cc} =~ /^bcc/i) {
- $pat = '^/\*\s+(.+)\s+\d+\s*:\s+\*/';
- }
- else {
- $pat = '^#\s*(?:line)?\s*\d+\s+"([^"]+)"';
- }
- while(<CPPO>) {
- if ($^O eq 'os2' or $^O eq 'MSWin32') {
- if (/$pat/o) {
- my $f = $1;
- $f =~ s,\\\\,/,g;
- $file{$f} = 1;
- }
- }
- else {
- $file{$1} = 1 if /$pat/o;
- }
- }
- close(CPPO);
- }
- return keys %file;
-}
-
-sub write_errno_pm {
- my $err;
-
- # quick sanity check
-
- die "No error definitions found" unless keys %err;
-
- # create the CPP input
-
- open(CPPI,"> errno.c") or
- die "Cannot open errno.c";
-
- print CPPI "#include <errno.h>\n";
-
- foreach $err (keys %err) {
- print CPPI '"',$err,'" [[',$err,']]',"\n";
- }
-
- close(CPPI);
-
- unless ($^O eq 'MacOS') { # trust what we have
- # invoke CPP and read the output
-
- if ($^O eq 'VMS') {
- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}";
- $cpp =~ s/sys\$input//i;
- open(CPPO,"$cpp errno.c |") or
- die "Cannot exec $Config{cppstdin}";
- } elsif ($^O eq 'MSWin32') {
- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or
- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'";
- } else {
- my $cpp = default_cpp();
- open(CPPO,"$cpp < errno.c |")
- or die "Cannot exec $cpp";
- }
-
- %err = ();
-
- while(<CPPO>) {
- my($name,$expr);
- next unless ($name, $expr) = /"(.*?)"\s*\[\s*\[\s*(.*?)\s*\]\s*\]/;
- next if $name eq $expr;
- $err{$name} = eval $expr;
- }
- close(CPPO);
- }
-
- # Write Errno.pm
-
- print <<"EDQ";
-#
-# This file is auto-generated. ***ANY*** changes here will be lost
-#
-
-package Errno;
-use vars qw(\@EXPORT_OK \%EXPORT_TAGS \@ISA \$VERSION \%errno \$AUTOLOAD);
-use Exporter ();
-use Config;
-use strict;
-
-"\$Config{'archname'}-\$Config{'osvers'}" eq
-"$Config{'archname'}-$Config{'osvers'}" or
- die "Errno architecture ($Config{'archname'}-$Config{'osvers'}) does not match executable architecture (\$Config{'archname'}-\$Config{'osvers'})";
-
-\$VERSION = "$VERSION";
-\@ISA = qw(Exporter);
-
-EDQ
-
- my $len = 0;
- my @err = sort { $err{$a} <=> $err{$b} } keys %err;
- map { $len = length if length > $len } @err;
-
- my $j = "\@EXPORT_OK = qw(" . join(" ",keys %err) . ");\n";
- $j =~ s/(.{50,70})\s/$1\n\t/g;
- print $j,"\n";
-
-print <<'ESQ';
-%EXPORT_TAGS = (
- POSIX => [qw(
-ESQ
-
- my $k = join(" ", grep { exists $err{$_} }
- qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT
- EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED
- ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT
- EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS
- EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
- EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH
- ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM
- ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR
- ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM
- EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE
- ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT
- ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY
- EUSERS EWOULDBLOCK EXDEV));
-
- $k =~ s/(.{50,70})\s/$1\n\t/g;
- print "\t",$k,"\n )]\n);\n\n";
-
- foreach $err (@err) {
- printf "sub %s () { %d }\n",,$err,$err{$err};
- }
-
- print <<'ESQ';
-
-sub TIEHASH { bless [] }
-
-sub FETCH {
- my ($self, $errname) = @_;
- my $proto = prototype("Errno::$errname");
- my $errno = "";
- if (defined($proto) && $proto eq "") {
- no strict 'refs';
- $errno = &$errname;
- $errno = 0 unless $! == $errno;
- }
- return $errno;
-}
-
-sub STORE {
- require Carp;
- Carp::confess("ERRNO hash is read only!");
-}
-
-*CLEAR = \&STORE;
-*DELETE = \&STORE;
-
-sub NEXTKEY {
- my($k,$v);
- while(($k,$v) = each %Errno::) {
- my $proto = prototype("Errno::$k");
- last if (defined($proto) && $proto eq "");
- }
- $k
-}
-
-sub FIRSTKEY {
- my $s = scalar keys %Errno::; # initialize iterator
- goto &NEXTKEY;
-}
-
-sub EXISTS {
- my ($self, $errname) = @_;
- my $proto = prototype($errname);
- defined($proto) && $proto eq "";
-}
-
-tie %!, __PACKAGE__;
-
-1;
-__END__
-
-=head1 NAME
-
-Errno - System errno constants
-
-=head1 SYNOPSIS
-
- use Errno qw(EINTR EIO :POSIX);
-
-=head1 DESCRIPTION
-
-C<Errno> defines and conditionally exports all the error constants
-defined in your system C<errno.h> include file. It has a single export
-tag, C<:POSIX>, which will export all POSIX defined error numbers.
-
-C<Errno> also makes C<%!> magic such that each element of C<%!> has a
-non-zero value only if C<$!> is set to that value. For example:
-
- use Errno;
-
- unless (open(FH, "/fangorn/spouse")) {
- if ($!{ENOENT}) {
- warn "Get a wife!\n";
- } else {
- warn "This path is barred: $!";
- }
- }
-
-If a specified constant C<EFOO> does not exist on the system, C<$!{EFOO}>
-returns C<"">. You may use C<exists $!{EFOO}> to check whether the
-constant is available on the system.
-
-=head1 CAVEATS
-
-Importing a particular constant may not be very portable, because the
-import will fail on platforms that do not have that constant. A more
-portable way to set C<$!> to a valid value is to use:
-
- if (exists &Errno::EFOO) {
- $! = &Errno::EFOO;
- }
-
-=head1 AUTHOR
-
-Graham Barr <gbarr@pobox.com>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997-8 Graham Barr. All rights reserved.
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-ESQ
-
-}
diff --git a/contrib/perl5/ext/Errno/Makefile.PL b/contrib/perl5/ext/Errno/Makefile.PL
deleted file mode 100644
index 604d4fb..0000000
--- a/contrib/perl5/ext/Errno/Makefile.PL
+++ /dev/null
@@ -1,30 +0,0 @@
-use ExtUtils::MakeMaker;
-
-@VMS = ($^O eq 'VMS') ? (MAN3PODS => {}) : ();
-
-WriteMakefile(
- NAME => 'Errno',
- VERSION_FROM => 'Errno_pm.PL',
- MAN3PODS => {}, # Pods will be built by installman.
- PL_FILES => {'Errno_pm.PL'=>'Errno.pm'},
- PM => {'Errno.pm' => '$(INST_LIBDIR)/Errno.pm'},
- 'clean' => {FILES => 'Errno.pm'},
- 'dist' => {
- COMPRESS => 'gzip -9f',
- SUFFIX => '.gz',
- DIST_DEFAULT => 'd/Errno.pm tardist',
- },
- @VMS,
-);
-
-sub MY::postamble {
- my $TARG = MM->catfile('d','Errno.pm');
-qq!$TARG : Makefile
- echo '#This is a dummy file so CPAN will find a VERSION' > $TARG
- echo 'package Errno;' >> $TARG
- echo '\$\$VERSION = "\$(VERSION)";' >>$TARG
- echo '#This is to make sure require will return an error' >>$TARG
- echo '0;' >>$TARG
-
-!
-}
diff --git a/contrib/perl5/ext/Fcntl/Fcntl.pm b/contrib/perl5/ext/Fcntl/Fcntl.pm
deleted file mode 100644
index 92103a1..0000000
--- a/contrib/perl5/ext/Fcntl/Fcntl.pm
+++ /dev/null
@@ -1,222 +0,0 @@
-package Fcntl;
-
-=head1 NAME
-
-Fcntl - load the C Fcntl.h defines
-
-=head1 SYNOPSIS
-
- use Fcntl;
- use Fcntl qw(:DEFAULT :flock);
-
-=head1 DESCRIPTION
-
-This module is just a translation of the C F<fnctl.h> file.
-Unlike the old mechanism of requiring a translated F<fnctl.ph>
-file, this uses the B<h2xs> program (see the Perl source distribution)
-and your native C compiler. This means that it has a
-far more likely chance of getting the numbers right.
-
-=head1 NOTE
-
-Only C<#define> symbols get translated; you must still correctly
-pack up your own arguments to pass as args for locking functions, etc.
-
-=head1 EXPORTED SYMBOLS
-
-By default your system's F_* and O_* constants (eg, F_DUPFD and
-O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
-
-You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
-and LOCK_UN) be provided by using the tag C<:flock>. See L<Exporter>.
-
-You can request that the old constants (FAPPEND, FASYNC, FCREAT,
-FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
-compatibility reasons by using the tag C<:Fcompat>. For new
-applications the newer versions of these constants are suggested
-(O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
-O_SYNC, O_TRUNC).
-
-For ease of use also the SEEK_* constants (for seek() and sysseek(),
-e.g. SEEK_END) and the S_I* constants (for chmod() and stat()) are
-available for import. They can be imported either separately or using
-the tags C<:seek> and C<:mode>.
-
-Please refer to your native fcntl(2), open(2), fseek(3), lseek(2)
-(equal to Perl's seek() and sysseek(), respectively), and chmod(2)
-documentation to see what constants are implemented in your system.
-
-See L<perlopentut> to learn about the uses of the O_* constants
-with sysopen().
-
-See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
-
-See L<perlfunc/stat> about the S_I* constants.
-
-=cut
-
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
-
-require Exporter;
-use XSLoader ();
-@ISA = qw(Exporter);
-$VERSION = "1.03";
-# Items to export into callers namespace by default
-# (move infrequently used names to @EXPORT_OK below)
-@EXPORT =
- qw(
- FD_CLOEXEC
- F_ALLOCSP
- F_ALLOCSP64
- F_COMPAT
- F_DUP2FD
- F_DUPFD
- F_EXLCK
- F_FREESP
- F_FREESP64
- F_FSYNC
- F_FSYNC64
- F_GETFD
- F_GETFL
- F_GETLK
- F_GETLK64
- F_GETOWN
- F_NODNY
- F_POSIX
- F_RDACC
- F_RDDNY
- F_RDLCK
- F_RWACC
- F_RWDNY
- F_SETFD
- F_SETFL
- F_SETLK
- F_SETLK64
- F_SETLKW
- F_SETLKW64
- F_SETOWN
- F_SHARE
- F_SHLCK
- F_UNLCK
- F_UNSHARE
- F_WRACC
- F_WRDNY
- F_WRLCK
- O_ACCMODE
- O_ALIAS
- O_APPEND
- O_ASYNC
- O_BINARY
- O_CREAT
- O_DEFER
- O_DIRECT
- O_DIRECTORY
- O_DSYNC
- O_EXCL
- O_EXLOCK
- O_LARGEFILE
- O_NDELAY
- O_NOCTTY
- O_NOFOLLOW
- O_NOINHERIT
- O_NONBLOCK
- O_RANDOM
- O_RAW
- O_RDONLY
- O_RDWR
- O_RSRC
- O_RSYNC
- O_SEQUENTIAL
- O_SHLOCK
- O_SYNC
- O_TEMPORARY
- O_TEXT
- O_TRUNC
- O_WRONLY
- );
-
-# Other items we are prepared to export if requested
-@EXPORT_OK = qw(
- FAPPEND
- FASYNC
- FCREAT
- FDEFER
- FDSYNC
- FEXCL
- FLARGEFILE
- FNDELAY
- FNONBLOCK
- FRSYNC
- FSYNC
- FTRUNC
- LOCK_EX
- LOCK_NB
- LOCK_SH
- LOCK_UN
- S_ISUID S_ISGID S_ISVTX S_ISTXT
- _S_IFMT S_IFREG S_IFDIR S_IFLNK
- S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
- S_IRUSR S_IWUSR S_IXUSR S_IRWXU
- S_IRGRP S_IWGRP S_IXGRP S_IRWXG
- S_IROTH S_IWOTH S_IXOTH S_IRWXO
- S_IREAD S_IWRITE S_IEXEC
- &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO
- &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE
- SEEK_SET
- SEEK_CUR
- SEEK_END
-);
-# Named groups of exports
-%EXPORT_TAGS = (
- 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
- 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
- FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
- 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
- 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
- _S_IFMT S_IFREG S_IFDIR S_IFLNK
- S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
- S_IRUSR S_IWUSR S_IXUSR S_IRWXU
- S_IRGRP S_IWGRP S_IXGRP S_IRWXG
- S_IROTH S_IWOTH S_IXOTH S_IRWXO
- S_IREAD S_IWRITE S_IEXEC
- S_ISREG S_ISDIR S_ISLNK S_ISSOCK
- S_ISBLK S_ISCHR S_ISFIFO
- S_ISWHT S_ISENFMT
- S_IFMT S_IMODE
- )],
-);
-
-sub S_IFMT { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT() }
-sub S_IMODE { $_[0] & 07777 }
-
-sub S_ISREG { ( $_[0] & _S_IFMT() ) == S_IFREG() }
-sub S_ISDIR { ( $_[0] & _S_IFMT() ) == S_IFDIR() }
-sub S_ISLNK { ( $_[0] & _S_IFMT() ) == S_IFLNK() }
-sub S_ISSOCK { ( $_[0] & _S_IFMT() ) == S_IFSOCK() }
-sub S_ISBLK { ( $_[0] & _S_IFMT() ) == S_IFBLK() }
-sub S_ISCHR { ( $_[0] & _S_IFMT() ) == S_IFCHR() }
-sub S_ISFIFO { ( $_[0] & _S_IFMT() ) == S_IFIFO() }
-sub S_ISWHT { ( $_[0] & _S_IFMT() ) == S_IFWHT() }
-sub S_ISENFMT { ( $_[0] & _S_IFMT() ) == S_IFENFMT() }
-
-sub AUTOLOAD {
- (my $constname = $AUTOLOAD) =~ s/.*:://;
- my $val = constant($constname, 0);
- if ($! != 0) {
- if ($! =~ /Invalid/ || $!{EINVAL}) {
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- my ($pack,$file,$line) = caller;
- die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
-";
- }
- }
- *$AUTOLOAD = sub { $val };
- goto &$AUTOLOAD;
-}
-
-XSLoader::load 'Fcntl', $VERSION;
-
-1;
diff --git a/contrib/perl5/ext/Fcntl/Fcntl.xs b/contrib/perl5/ext/Fcntl/Fcntl.xs
deleted file mode 100644
index 51851bb..0000000
--- a/contrib/perl5/ext/Fcntl/Fcntl.xs
+++ /dev/null
@@ -1,780 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifdef VMS
-# include <file.h>
-#else
-#if defined(__GNUC__) && defined(__cplusplus) && defined(WIN32)
-#define _NO_OLDNAMES
-#endif
-# include <fcntl.h>
-#if defined(__GNUC__) && defined(__cplusplus) && defined(WIN32)
-#undef _NO_OLDNAMES
-#endif
-#endif
-
-#ifdef I_UNISTD
-#include <unistd.h>
-#endif
-
-/* This comment is a kludge to get metaconfig to see the symbols
- VAL_O_NONBLOCK
- VAL_EAGAIN
- RD_NODATA
- EOF_NONBLOCK
- and include the appropriate metaconfig unit
- so that Configure will test how to turn on non-blocking I/O
- for a file descriptor. See config.h for how to use these
- in your extension.
-
- While I'm at it, I'll have metaconfig look for HAS_POLL too.
- --AD October 16, 1995
-*/
-
-static double
-constant(char *name, int arg)
-{
- errno = 0;
- switch (*name) {
- case '_':
- if (strEQ(name, "_S_IFMT")) /* Yes, on name _S_IFMT return S_IFMT. */
-#ifdef S_IFMT
- return S_IFMT;
-#else
- goto not_there;
-#endif
- break;
- case 'F':
- if (strnEQ(name, "F_", 2)) {
- if (strEQ(name, "F_ALLOCSP"))
-#ifdef F_ALLOCSP
- return F_ALLOCSP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_ALLOCSP64"))
-#ifdef F_ALLOCSP64
- return F_ALLOCSP64;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_COMPAT"))
-#ifdef F_COMPAT
- return F_COMPAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_DUP2FD"))
-#ifdef F_DUP2FD
- return F_DUP2FD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_DUPFD"))
-#ifdef F_DUPFD
- return F_DUPFD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_EXLCK"))
-#ifdef F_EXLCK
- return F_EXLCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_FREESP"))
-#ifdef F_FREESP
- return F_FREESP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_FREESP64"))
-#ifdef F_FREESP64
- return F_FREESP64;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_FSYNC"))
-#ifdef F_FSYNC
- return F_FSYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_FSYNC64"))
-#ifdef F_FSYNC64
- return F_FSYNC64;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_GETFD"))
-#ifdef F_GETFD
- return F_GETFD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_GETFL"))
-#ifdef F_GETFL
- return F_GETFL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_GETLK"))
-#ifdef F_GETLK
- return F_GETLK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_GETLK64"))
-#ifdef F_GETLK64
- return F_GETLK64;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_GETOWN"))
-#ifdef F_GETOWN
- return F_GETOWN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_NODNY"))
-#ifdef F_NODNY
- return F_NODNY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_POSIX"))
-#ifdef F_POSIX
- return F_POSIX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_RDACC"))
-#ifdef F_RDACC
- return F_RDACC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_RDDNY"))
-#ifdef F_RDDNY
- return F_RDDNY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_RDLCK"))
-#ifdef F_RDLCK
- return F_RDLCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_RWACC"))
-#ifdef F_RWACC
- return F_RWACC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_RWDNY"))
-#ifdef F_RWDNY
- return F_RWDNY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETFD"))
-#ifdef F_SETFD
- return F_SETFD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETFL"))
-#ifdef F_SETFL
- return F_SETFL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETLK"))
-#ifdef F_SETLK
- return F_SETLK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETLK64"))
-#ifdef F_SETLK64
- return F_SETLK64;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETLKW"))
-#ifdef F_SETLKW
- return F_SETLKW;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETLKW64"))
-#ifdef F_SETLKW64
- return F_SETLKW64;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETOWN"))
-#ifdef F_SETOWN
- return F_SETOWN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SHARE"))
-#ifdef F_SHARE
- return F_SHARE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SHLCK"))
-#ifdef F_SHLCK
- return F_SHLCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_UNLCK"))
-#ifdef F_UNLCK
- return F_UNLCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_UNSHARE"))
-#ifdef F_UNSHARE
- return F_UNSHARE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_WRACC"))
-#ifdef F_WRACC
- return F_WRACC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_WRDNY"))
-#ifdef F_WRDNY
- return F_WRDNY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_WRLCK"))
-#ifdef F_WRLCK
- return F_WRLCK;
-#else
- goto not_there;
-#endif
- errno = EINVAL;
- return 0;
- }
- if (strEQ(name, "FAPPEND"))
-#ifdef FAPPEND
- return FAPPEND;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FASYNC"))
-#ifdef FASYNC
- return FASYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FCREAT"))
-#ifdef FCREAT
- return FCREAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FD_CLOEXEC"))
-#ifdef FD_CLOEXEC
- return FD_CLOEXEC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FDEFER"))
-#ifdef FDEFER
- return FDEFER;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FDSYNC"))
-#ifdef FDSYNC
- return FDSYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FEXCL"))
-#ifdef FEXCL
- return FEXCL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLARGEFILE"))
-#ifdef FLARGEFILE
- return FLARGEFILE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FNDELAY"))
-#ifdef FNDELAY
- return FNDELAY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FNONBLOCK"))
-#ifdef FNONBLOCK
- return FNONBLOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FRSYNC"))
-#ifdef FRSYNC
- return FRSYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FSYNC"))
-#ifdef FSYNC
- return FSYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FTRUNC"))
-#ifdef FTRUNC
- return FTRUNC;
-#else
- goto not_there;
-#endif
- break;
- case 'L':
- if (strnEQ(name, "LOCK_", 5)) {
- /* We support flock() on systems which don't have it, so
- always supply the constants. */
- if (strEQ(name, "LOCK_SH"))
-#ifdef LOCK_SH
- return LOCK_SH;
-#else
- return 1;
-#endif
- if (strEQ(name, "LOCK_EX"))
-#ifdef LOCK_EX
- return LOCK_EX;
-#else
- return 2;
-#endif
- if (strEQ(name, "LOCK_NB"))
-#ifdef LOCK_NB
- return LOCK_NB;
-#else
- return 4;
-#endif
- if (strEQ(name, "LOCK_UN"))
-#ifdef LOCK_UN
- return LOCK_UN;
-#else
- return 8;
-#endif
- } else
- goto not_there;
- break;
- case 'O':
- if (strnEQ(name, "O_", 2)) {
- if (strEQ(name, "O_ACCMODE"))
-#ifdef O_ACCMODE
- return O_ACCMODE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_APPEND"))
-#ifdef O_APPEND
- return O_APPEND;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_ASYNC"))
-#ifdef O_ASYNC
- return O_ASYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_BINARY"))
-#ifdef O_BINARY
- return O_BINARY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_CREAT"))
-#ifdef O_CREAT
- return O_CREAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_DEFER"))
-#ifdef O_DEFER
- return O_DEFER;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_DIRECT"))
-#ifdef O_DIRECT
- return O_DIRECT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_DIRECTORY"))
-#ifdef O_DIRECTORY
- return O_DIRECTORY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_DSYNC"))
-#ifdef O_DSYNC
- return O_DSYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_EXCL"))
-#ifdef O_EXCL
- return O_EXCL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_EXLOCK"))
-#ifdef O_EXLOCK
- return O_EXLOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_LARGEFILE"))
-#ifdef O_LARGEFILE
- return O_LARGEFILE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_NDELAY"))
-#ifdef O_NDELAY
- return O_NDELAY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_NOCTTY"))
-#ifdef O_NOCTTY
- return O_NOCTTY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_NOFOLLOW"))
-#ifdef O_NOFOLLOW
- return O_NOFOLLOW;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_NOINHERIT"))
-#ifdef O_NOINHERIT
- return O_NOINHERIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_NONBLOCK"))
-#ifdef O_NONBLOCK
- return O_NONBLOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_RANDOM"))
-#ifdef O_RANDOM
- return O_RANDOM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_RAW"))
-#ifdef O_RAW
- return O_RAW;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_RDONLY"))
-#ifdef O_RDONLY
- return O_RDONLY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_RDWR"))
-#ifdef O_RDWR
- return O_RDWR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_RSYNC"))
-#ifdef O_RSYNC
- return O_RSYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_SEQUENTIAL"))
-#ifdef O_SEQUENTIAL
- return O_SEQUENTIAL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_SHLOCK"))
-#ifdef O_SHLOCK
- return O_SHLOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_SYNC"))
-#ifdef O_SYNC
- return O_SYNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_TEMPORARY"))
-#ifdef O_TEMPORARY
- return O_TEMPORARY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_TEXT"))
-#ifdef O_TEXT
- return O_TEXT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_TRUNC"))
-#ifdef O_TRUNC
- return O_TRUNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_WRONLY"))
-#ifdef O_WRONLY
- return O_WRONLY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_ALIAS"))
-#ifdef O_ALIAS
- return O_ALIAS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_RSRC"))
-#ifdef O_RSRC
- return O_RSRC;
-#else
- goto not_there;
-#endif
- } else
- goto not_there;
- break;
- case 'S':
- switch (name[1]) {
- case '_':
- if (strEQ(name, "S_ISUID"))
-#ifdef S_ISUID
- return S_ISUID;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_ISGID"))
-#ifdef S_ISGID
- return S_ISGID;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_ISVTX"))
-#ifdef S_ISVTX
- return S_ISVTX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_ISTXT"))
-#ifdef S_ISTXT
- return S_ISTXT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IFREG"))
-#ifdef S_IFREG
- return S_IFREG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IFDIR"))
-#ifdef S_IFDIR
- return S_IFDIR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IFLNK"))
-#ifdef S_IFLNK
- return S_IFLNK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IFSOCK"))
-#ifdef S_IFSOCK
- return S_IFSOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IFBLK"))
-#ifdef S_IFBLK
- return S_IFBLK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IFCHR"))
-#ifdef S_IFCHR
- return S_IFCHR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IFIFO"))
-#ifdef S_IFIFO
- return S_IFIFO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IFWHT"))
-#ifdef S_IFWHT
- return S_IFWHT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_ENFMT"))
-#ifdef S_ENFMT
- return S_ENFMT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRUSR"))
-#ifdef S_IRUSR
- return S_IRUSR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IWUSR"))
-#ifdef S_IWUSR
- return S_IWUSR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IXUSR"))
-#ifdef S_IXUSR
- return S_IXUSR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRWXU"))
-#ifdef S_IRWXU
- return S_IRWXU;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRGRP"))
-#ifdef S_IRGRP
- return S_IRGRP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IWGRP"))
-#ifdef S_IWGRP
- return S_IWGRP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IXGRP"))
-#ifdef S_IXGRP
- return S_IXGRP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRWXG"))
-#ifdef S_IRWXG
- return S_IRWXG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IROTH"))
-#ifdef S_IROTH
- return S_IROTH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IWOTH"))
-#ifdef S_IWOTH
- return S_IWOTH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IXOTH"))
-#ifdef S_IXOTH
- return S_IXOTH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRWXO"))
-#ifdef S_IRWXO
- return S_IRWXO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IREAD"))
-#ifdef S_IREAD
- return S_IREAD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IWRITE"))
-#ifdef S_IWRITE
- return S_IWRITE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IEXEC"))
-#ifdef S_IEXEC
- return S_IEXEC;
-#else
- goto not_there;
-#endif
- break;
- case 'E':
- if (strEQ(name, "SEEK_CUR"))
-#ifdef SEEK_CUR
- return SEEK_CUR;
-#else
- return 1;
-#endif
- if (strEQ(name, "SEEK_END"))
-#ifdef SEEK_END
- return SEEK_END;
-#else
- return 2;
-#endif
- if (strEQ(name, "SEEK_SET"))
-#ifdef SEEK_SET
- return SEEK_SET;
-#else
- return 0;
-#endif
- break;
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-
-MODULE = Fcntl PACKAGE = Fcntl
-
-double
-constant(name,arg)
- char * name
- int arg
-
diff --git a/contrib/perl5/ext/Fcntl/Makefile.PL b/contrib/perl5/ext/Fcntl/Makefile.PL
deleted file mode 100644
index 0346373..0000000
--- a/contrib/perl5/ext/Fcntl/Makefile.PL
+++ /dev/null
@@ -1,8 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'Fcntl',
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes', # XXX remove later?
- VERSION_FROM => 'Fcntl.pm',
-);
-
diff --git a/contrib/perl5/ext/File/Glob/Changes b/contrib/perl5/ext/File/Glob/Changes
deleted file mode 100644
index f46ec70..0000000
--- a/contrib/perl5/ext/File/Glob/Changes
+++ /dev/null
@@ -1,49 +0,0 @@
-Revision history for Perl extension File::Glob
-
-0.00 Tue Dec 17 10:51:33 1996
- - original version; created by h2xs 1.16
-
-0.90 Tue Dec 17 13:58:32 MST 1996
- - implemented first pass access to glob(3),
- but it's clumsy and it looks like it leaks
- memory.
-
-0.91 Thu Sep 4 08:43:55 CDT 1997
- - included CORE/config.h portability macros
- - s/glob/bsd_glob/ to avoid calling and including the
- system's glob stuff
- - added GLOB_DEBUG for (surprise!) glob debugging
- - tainted all filenames returned from &Glob::BSD::glob
-
-0.92 Tue Sep 30 08:31:57 CDT 1997
- - only use lstat if HAS_LSTAT is defined
- - renamed the glob flags to GLOB_*
- - added GLOB_CSH convenience macro for csh(1) globbing
- These changes thanks to Hans Mulder <hansm@icgned.nl>
- - fixed an incompatibility with csh(1) globbing where a
- pattern like {A*,b,c} wouldn't expand properly
- - various compatibility changes
- - fixed and added tests
-
-0.93 Wed Jul 1 10:39:47 CDT 1998
- - renamed module to File::BSDGlob
- - enabled 'globally' import directive to override the core
- glob
- - added Sarathy's tests for File::DosGlob
-0.99 Tue Oct 12 06:42:02 PDT 1999
- - renamed module to File::Glob for incorporation into the
- Perl source distribution
- - ansified prototypes
- - s/struct stat/Stat_t/
- - split on spaces to make <*.c *.h> work (for compatibility)
-0.991 Tue Oct 26 09:48:00 BST 1999
- - Add case-insensitive matching (GLOB_NOCASE)
- - Make glob_csh case insensitive by default on Win32, VMS,
- OS/2, DOS, RISC OS, and Mac OS
- - Add support for :case and :nocase tags
- - Hack to make patterns like C:* work on DOSISH systems
- - Add support for either \ or / as separators on DOSISH systems
- - Limit effect of \ as a quoting operator on DOSISH systems to
- when it precedes one of []{}-~\ (to minimise backslashitis).
-0.992 Tue Mar 20 09:25:48 2001
- - Add alphabetic sorting for csh compatibility (GLOB_ALPHASORT)
diff --git a/contrib/perl5/ext/File/Glob/Glob.pm b/contrib/perl5/ext/File/Glob/Glob.pm
deleted file mode 100644
index 20b26f9..0000000
--- a/contrib/perl5/ext/File/Glob/Glob.pm
+++ /dev/null
@@ -1,438 +0,0 @@
-package File::Glob;
-
-use strict;
-use Carp;
-our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS,
- $AUTOLOAD, $DEFAULT_FLAGS);
-
-require Exporter;
-use XSLoader ();
-require AutoLoader;
-
-@ISA = qw(Exporter AutoLoader);
-
-# NOTE: The glob() export is only here for compatibility with 5.6.0.
-# csh_glob() should not be used directly, unless you know what you're doing.
-
-@EXPORT_OK = qw(
- csh_glob
- bsd_glob
- glob
- GLOB_ABEND
- GLOB_ALPHASORT
- GLOB_ALTDIRFUNC
- GLOB_BRACE
- GLOB_CSH
- GLOB_ERR
- GLOB_ERROR
- GLOB_MARK
- GLOB_NOCASE
- GLOB_NOCHECK
- GLOB_NOMAGIC
- GLOB_NOSORT
- GLOB_NOSPACE
- GLOB_QUOTE
- GLOB_TILDE
-);
-
-%EXPORT_TAGS = (
- 'glob' => [ qw(
- GLOB_ABEND
- GLOB_ALPHASORT
- GLOB_ALTDIRFUNC
- GLOB_BRACE
- GLOB_CSH
- GLOB_ERR
- GLOB_ERROR
- GLOB_MARK
- GLOB_NOCASE
- GLOB_NOCHECK
- GLOB_NOMAGIC
- GLOB_NOSORT
- GLOB_NOSPACE
- GLOB_QUOTE
- GLOB_TILDE
- glob
- bsd_glob
- ) ],
-);
-
-$VERSION = '0.991';
-
-sub import {
- my $i = 1;
- while ($i < @_) {
- if ($_[$i] =~ /^:(case|nocase|globally)$/) {
- splice(@_, $i, 1);
- $DEFAULT_FLAGS &= ~GLOB_NOCASE() if $1 eq 'case';
- $DEFAULT_FLAGS |= GLOB_NOCASE() if $1 eq 'nocase';
- if ($1 eq 'globally') {
- no warnings;
- *CORE::GLOBAL::glob = \&File::Glob::csh_glob;
- }
- next;
- }
- ++$i;
- }
- goto &Exporter::import;
-}
-
-sub AUTOLOAD {
- # This AUTOLOAD is used to 'autoload' constants from the constant()
- # XS function. If a constant is not found then control is passed
- # to the AUTOLOAD in AutoLoader.
-
- my $constname;
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my $val = constant($constname, @_ ? $_[0] : 0);
- if ($! != 0) {
- if ($! =~ /Invalid/) {
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- croak "Your vendor has not defined File::Glob macro $constname";
- }
- }
- eval "sub $AUTOLOAD { $val }";
- goto &$AUTOLOAD;
-}
-
-XSLoader::load 'File::Glob', $VERSION;
-
-# Preloaded methods go here.
-
-sub GLOB_ERROR {
- return constant('GLOB_ERROR', 0);
-}
-
-sub GLOB_CSH () {
- GLOB_BRACE()
- | GLOB_NOMAGIC()
- | GLOB_QUOTE()
- | GLOB_TILDE()
- | GLOB_ALPHASORT()
-}
-
-$DEFAULT_FLAGS = GLOB_CSH();
-if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS)$/) {
- $DEFAULT_FLAGS |= GLOB_NOCASE();
-}
-
-# Autoload methods go after =cut, and are processed by the autosplit program.
-
-sub bsd_glob {
- my ($pat,$flags) = @_;
- $flags = $DEFAULT_FLAGS if @_ < 2;
- return doglob($pat,$flags);
-}
-
-# File::Glob::glob() is deprecated because its prototype is different from
-# CORE::glob() (use bsd_glob() instead)
-sub glob {
- goto &bsd_glob;
-}
-
-## borrowed heavily from gsar's File::DosGlob
-my %iter;
-my %entries;
-
-sub csh_glob {
- my $pat = shift;
- my $cxix = shift;
- my @pat;
-
- # glob without args defaults to $_
- $pat = $_ unless defined $pat;
-
- # extract patterns
- $pat =~ s/^\s+//; # Protect against empty elements in
- $pat =~ s/\s+$//; # things like < *.c> and <*.c >.
- # These alone shouldn't trigger ParseWords.
- if ($pat =~ /\s/) {
- # XXX this is needed for compatibility with the csh
- # implementation in Perl. Need to support a flag
- # to disable this behavior.
- require Text::ParseWords;
- @pat = Text::ParseWords::parse_line('\s+',0,$pat);
- }
-
- # assume global context if not provided one
- $cxix = '_G_' unless defined $cxix;
- $iter{$cxix} = 0 unless exists $iter{$cxix};
-
- # if we're just beginning, do it all first
- if ($iter{$cxix} == 0) {
- if (@pat) {
- $entries{$cxix} = [ map { doglob($_, $DEFAULT_FLAGS) } @pat ];
- }
- else {
- $entries{$cxix} = [ doglob($pat, $DEFAULT_FLAGS) ];
- }
- }
-
- # chuck it all out, quick or slow
- if (wantarray) {
- delete $iter{$cxix};
- return @{delete $entries{$cxix}};
- }
- else {
- if ($iter{$cxix} = scalar @{$entries{$cxix}}) {
- return shift @{$entries{$cxix}};
- }
- else {
- # return undef for EOL
- delete $iter{$cxix};
- delete $entries{$cxix};
- return undef;
- }
- }
-}
-
-1;
-__END__
-
-=head1 NAME
-
-File::Glob - Perl extension for BSD glob routine
-
-=head1 SYNOPSIS
-
- use File::Glob ':glob';
- @list = bsd_glob('*.[ch]');
- $homedir = bsd_glob('~gnat', GLOB_TILDE | GLOB_ERR);
- if (GLOB_ERROR) {
- # an error occurred reading $homedir
- }
-
- ## override the core glob (CORE::glob() does this automatically
- ## by default anyway, since v5.6.0)
- use File::Glob ':globally';
- my @sources = <*.{c,h,y}>
-
- ## override the core glob, forcing case sensitivity
- use File::Glob qw(:globally :case);
- my @sources = <*.{c,h,y}>
-
- ## override the core glob forcing case insensitivity
- use File::Glob qw(:globally :nocase);
- my @sources = <*.{c,h,y}>
-
-=head1 DESCRIPTION
-
-File::Glob::bsd_glob() implements the FreeBSD glob(3) routine, which is
-a superset of the POSIX glob() (described in IEEE Std 1003.2 "POSIX.2").
-bsd_glob() takes a mandatory C<pattern> argument, and an optional
-C<flags> argument, and returns a list of filenames matching the
-pattern, with interpretation of the pattern modified by the C<flags>
-variable.
-
-Since v5.6.0, Perl's CORE::glob() is implemented in terms of bsd_glob().
-Note that they don't share the same prototype--CORE::glob() only accepts
-a single argument. Due to historical reasons, CORE::glob() will also
-split its argument on whitespace, treating it as multiple patterns,
-whereas bsd_glob() considers them as one pattern.
-
-The POSIX defined flags for bsd_glob() are:
-
-=over 4
-
-=item C<GLOB_ERR>
-
-Force bsd_glob() to return an error when it encounters a directory it
-cannot open or read. Ordinarily bsd_glob() continues to find matches.
-
-=item C<GLOB_MARK>
-
-Each pathname that is a directory that matches the pattern has a slash
-appended.
-
-=item C<GLOB_NOCASE>
-
-By default, file names are assumed to be case sensitive; this flag
-makes bsd_glob() treat case differences as not significant.
-
-=item C<GLOB_NOCHECK>
-
-If the pattern does not match any pathname, then bsd_glob() returns a list
-consisting of only the pattern. If C<GLOB_QUOTE> is set, its effect
-is present in the pattern returned.
-
-=item C<GLOB_NOSORT>
-
-By default, the pathnames are sorted in ascending ASCII order; this
-flag prevents that sorting (speeding up bsd_glob()).
-
-=back
-
-The FreeBSD extensions to the POSIX standard are the following flags:
-
-=over 4
-
-=item C<GLOB_BRACE>
-
-Pre-process the string to expand C<{pat,pat,...}> strings like csh(1).
-The pattern '{}' is left unexpanded for historical reasons (and csh(1)
-does the same thing to ease typing of find(1) patterns).
-
-=item C<GLOB_NOMAGIC>
-
-Same as C<GLOB_NOCHECK> but it only returns the pattern if it does not
-contain any of the special characters "*", "?" or "[". C<NOMAGIC> is
-provided to simplify implementing the historic csh(1) globbing
-behaviour and should probably not be used anywhere else.
-
-=item C<GLOB_QUOTE>
-
-Use the backslash ('\') character for quoting: every occurrence of a
-backslash followed by a character in the pattern is replaced by that
-character, avoiding any special interpretation of the character.
-(But see below for exceptions on DOSISH systems).
-
-=item C<GLOB_TILDE>
-
-Expand patterns that start with '~' to user name home directories.
-
-=item C<GLOB_CSH>
-
-For convenience, C<GLOB_CSH> is a synonym for
-C<GLOB_BRACE | GLOB_NOMAGIC | GLOB_QUOTE | GLOB_TILDE | GLOB_ALPHASORT>.
-
-=back
-
-The POSIX provided C<GLOB_APPEND>, C<GLOB_DOOFFS>, and the FreeBSD
-extensions C<GLOB_ALTDIRFUNC>, and C<GLOB_MAGCHAR> flags have not been
-implemented in the Perl version because they involve more complex
-interaction with the underlying C structures.
-
-The following flag has been added in the Perl implementation for
-compatibility with common flavors of csh:
-
-=over 4
-
-=item C<GLOB_ALPHASORT>
-
-If C<GLOB_NOSORT> is not in effect, sort filenames is alphabetical
-order (case does not matter) rather than in ASCII order.
-
-=back
-
-=head1 DIAGNOSTICS
-
-bsd_glob() returns a list of matching paths, possibly zero length. If an
-error occurred, &File::Glob::GLOB_ERROR will be non-zero and C<$!> will be
-set. &File::Glob::GLOB_ERROR is guaranteed to be zero if no error occurred,
-or one of the following values otherwise:
-
-=over 4
-
-=item C<GLOB_NOSPACE>
-
-An attempt to allocate memory failed.
-
-=item C<GLOB_ABEND>
-
-The glob was stopped because an error was encountered.
-
-=back
-
-In the case where bsd_glob() has found some matching paths, but is
-interrupted by an error, it will return a list of filenames B<and>
-set &File::Glob::ERROR.
-
-Note that bsd_glob() deviates from POSIX and FreeBSD glob(3) behaviour
-by not considering C<ENOENT> and C<ENOTDIR> as errors - bsd_glob() will
-continue processing despite those errors, unless the C<GLOB_ERR> flag is
-set.
-
-Be aware that all filenames returned from File::Glob are tainted.
-
-=head1 NOTES
-
-=over 4
-
-=item *
-
-If you want to use multiple patterns, e.g. C<bsd_glob "a* b*">, you should
-probably throw them in a set as in C<bsd_glob "{a*,b*}">. This is because
-the argument to bsd_glob() isn't subjected to parsing by the C shell.
-Remember that you can use a backslash to escape things.
-
-=item *
-
-On DOSISH systems, backslash is a valid directory separator character.
-In this case, use of backslash as a quoting character (via GLOB_QUOTE)
-interferes with the use of backslash as a directory separator. The
-best (simplest, most portable) solution is to use forward slashes for
-directory separators, and backslashes for quoting. However, this does
-not match "normal practice" on these systems. As a concession to user
-expectation, therefore, backslashes (under GLOB_QUOTE) only quote the
-glob metacharacters '[', ']', '{', '}', '-', '~', and backslash itself.
-All other backslashes are passed through unchanged.
-
-=item *
-
-Win32 users should use the real slash. If you really want to use
-backslashes, consider using Sarathy's File::DosGlob, which comes with
-the standard Perl distribution.
-
-=item *
-
-Mac OS (Classic) users should note a few differences. Since
-Mac OS is not Unix, when the glob code encounters a tilde glob (e.g.
-~user/foo) and the C<GLOB_TILDE> flag is used, it simply returns that
-pattern without doing any expansion.
-
-Glob on Mac OS is case-insensitive by default (if you don't use any
-flags). If you specify any flags at all and still want glob
-to be case-insensitive, you must include C<GLOB_NOCASE> in the flags.
-
-The path separator is ':' (aka colon), not '/' (aka slash). Mac OS users
-should be careful about specifying relative pathnames. While a full path
-always begins with a volume name, a relative pathname should always
-begin with a ':'. If specifying a volume name only, a trailing ':' is
-required.
-
-=back
-
-=head1 AUTHOR
-
-The Perl interface was written by Nathan Torkington E<lt>gnat@frii.comE<gt>,
-and is released under the artistic license. Further modifications were
-made by Greg Bacon E<lt>gbacon@cs.uah.eduE<gt>, Gurusamy Sarathy
-E<lt>gsar@activestate.comE<gt>, and Thomas Wegner
-E<lt>wegner_thomas@yahoo.comE<gt>. The C glob code has the
-following copyright:
-
- Copyright (c) 1989, 1993 The Regents of the University of California.
- All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Guido van Rossum.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
-=cut
diff --git a/contrib/perl5/ext/File/Glob/Glob.xs b/contrib/perl5/ext/File/Glob/Glob.xs
deleted file mode 100644
index ee8c0c9..0000000
--- a/contrib/perl5/ext/File/Glob/Glob.xs
+++ /dev/null
@@ -1,208 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "bsd_glob.h"
-
-/* XXX: need some thread awareness */
-static int GLOB_ERROR = 0;
-
-static double
-constant(char *name, int arg)
-{
- errno = 0;
- if (strlen(name) <= 5)
- goto not_there;
- switch (*(name+5)) {
- case 'A':
- if (strEQ(name, "GLOB_ABEND"))
-#ifdef GLOB_ABEND
- return GLOB_ABEND;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GLOB_ALPHASORT"))
-#ifdef GLOB_ALPHASORT
- return GLOB_ALPHASORT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GLOB_ALTDIRFUNC"))
-#ifdef GLOB_ALTDIRFUNC
- return GLOB_ALTDIRFUNC;
-#else
- goto not_there;
-#endif
- break;
- case 'B':
- if (strEQ(name, "GLOB_BRACE"))
-#ifdef GLOB_BRACE
- return GLOB_BRACE;
-#else
- goto not_there;
-#endif
- break;
- case 'C':
- break;
- case 'D':
- break;
- case 'E':
- if (strEQ(name, "GLOB_ERR"))
-#ifdef GLOB_ERR
- return GLOB_ERR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GLOB_ERROR"))
- return GLOB_ERROR;
- break;
- case 'F':
- break;
- case 'G':
- break;
- case 'H':
- break;
- case 'I':
- break;
- case 'J':
- break;
- case 'K':
- break;
- case 'L':
- break;
- case 'M':
- if (strEQ(name, "GLOB_MARK"))
-#ifdef GLOB_MARK
- return GLOB_MARK;
-#else
- goto not_there;
-#endif
- break;
- case 'N':
- if (strEQ(name, "GLOB_NOCASE"))
-#ifdef GLOB_NOCASE
- return GLOB_NOCASE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GLOB_NOCHECK"))
-#ifdef GLOB_NOCHECK
- return GLOB_NOCHECK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GLOB_NOMAGIC"))
-#ifdef GLOB_NOMAGIC
- return GLOB_NOMAGIC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GLOB_NOSORT"))
-#ifdef GLOB_NOSORT
- return GLOB_NOSORT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GLOB_NOSPACE"))
-#ifdef GLOB_NOSPACE
- return GLOB_NOSPACE;
-#else
- goto not_there;
-#endif
- break;
- case 'O':
- break;
- case 'P':
- break;
- case 'Q':
- if (strEQ(name, "GLOB_QUOTE"))
-#ifdef GLOB_QUOTE
- return GLOB_QUOTE;
-#else
- goto not_there;
-#endif
- break;
- case 'R':
- break;
- case 'S':
- break;
- case 'T':
- if (strEQ(name, "GLOB_TILDE"))
-#ifdef GLOB_TILDE
- return GLOB_TILDE;
-#else
- goto not_there;
-#endif
- break;
- case 'U':
- break;
- case 'V':
- break;
- case 'W':
- break;
- case 'X':
- break;
- case 'Y':
- break;
- case 'Z':
- break;
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-#ifdef WIN32
-#define errfunc NULL
-#else
-int
-errfunc(const char *foo, int bar) {
- return !(bar == ENOENT || bar == ENOTDIR);
-}
-#endif
-
-MODULE = File::Glob PACKAGE = File::Glob
-
-void
-doglob(pattern,...)
- char *pattern
-PROTOTYPE: $;$
-PREINIT:
- glob_t pglob;
- int i;
- int retval;
- int flags = 0;
- SV *tmp;
-PPCODE:
- {
- /* allow for optional flags argument */
- if (items > 1) {
- flags = (int) SvIV(ST(1));
- }
-
- /* call glob */
- retval = bsd_glob(pattern, flags, errfunc, &pglob);
- GLOB_ERROR = retval;
-
- /* return any matches found */
- EXTEND(sp, pglob.gl_pathc);
- for (i = 0; i < pglob.gl_pathc; i++) {
- /* printf("# bsd_glob: %s\n", pglob.gl_pathv[i]); */
- tmp = sv_2mortal(newSVpvn(pglob.gl_pathv[i],
- strlen(pglob.gl_pathv[i])));
- TAINT;
- SvTAINT(tmp);
- PUSHs(tmp);
- }
-
- bsd_globfree(&pglob);
- }
-
-double
-constant(name,arg)
- char *name
- int arg
-PROTOTYPE: $$
diff --git a/contrib/perl5/ext/File/Glob/Makefile.PL b/contrib/perl5/ext/File/Glob/Makefile.PL
deleted file mode 100644
index 98781c9..0000000
--- a/contrib/perl5/ext/File/Glob/Makefile.PL
+++ /dev/null
@@ -1,21 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'File::Glob',
- VERSION_FROM => 'Glob.pm',
- MAN3PODS => {}, # Pods will be built by installman.
- OBJECT => 'bsd_glob$(OBJ_EXT) Glob$(OBJ_EXT)',
-
-## uncomment for glob debugging (will cause make test to fail)
-# DEFINE => '-DGLOB_DEBUG',
-# OPTIMIZE => '-g',
-);
-use Config;
-sub MY::cflags {
- package MY;
- my $inherited = shift->SUPER::cflags(@_);
- if ($Config::Config{archname} =~ /^aix/ and
- $Config::Config{use64bitall} eq 'define') {
- $inherited =~ s/\s-O\d?//m;
- }
- $inherited;
-}
diff --git a/contrib/perl5/ext/File/Glob/TODO b/contrib/perl5/ext/File/Glob/TODO
deleted file mode 100644
index ef2547f..0000000
--- a/contrib/perl5/ext/File/Glob/TODO
+++ /dev/null
@@ -1,21 +0,0 @@
-Some issues left to take care of:
-
- o sane ~ handling on non-Unix platforms
-
- Currently on non-Unix, when the glob code encounters a tilde glob
- (.e.g ~user/foo or ~/.cshrc), it simply returns that pattern
- without doing any expansion (meaning perl will weed it out since a
- file of that name isn't likely to exist).
-
- Please, if you have strong feelings about how tilde expansion
- should be done on your favorite non-Unix platform(s), submit a
- patch.
-
- o path separator handling
-
- Guido's code contains the assumption that the path separator is one
- character (byte, probably) in length. Win32 doesn't object to the
- true slash as a separator. I imagine MacPerl could change the SEP
- cpp #define to ":". I have no idea what it is for VMS. Again, if
- you have ideas and especially patches, please feel free to share
- them.
diff --git a/contrib/perl5/ext/File/Glob/bsd_glob.c b/contrib/perl5/ext/File/Glob/bsd_glob.c
deleted file mode 100644
index 15ee659..0000000
--- a/contrib/perl5/ext/File/Glob/bsd_glob.c
+++ /dev/null
@@ -1,971 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * glob(3) -- a superset of the one defined in POSIX 1003.2.
- *
- * The [!...] convention to negate a range is supported (SysV, Posix, ksh).
- *
- * Optional extra services, controlled by flags not defined by POSIX:
- *
- * GLOB_QUOTE:
- * Escaping convention: \ inhibits any special meaning the following
- * character might have (except \ at end of string is retained).
- * GLOB_MAGCHAR:
- * Set in gl_flags if pattern contained a globbing character.
- * GLOB_NOMAGIC:
- * Same as GLOB_NOCHECK, but it will only append pattern if it did
- * not contain any magic characters. [Used in csh style globbing]
- * GLOB_ALTDIRFUNC:
- * Use alternately specified directory access functions.
- * GLOB_TILDE:
- * expand ~user/foo to the /home/dir/of/user/foo
- * GLOB_BRACE:
- * expand {1,2}{a,b} to 1a 1b 2a 2b
- * gl_matchc:
- * Number of matches in the current invocation of glob.
- * GLOB_ALPHASORT:
- * sort alphabetically like csh (case doesn't matter) instead of in ASCII
- * order
- */
-
-#include <EXTERN.h>
-#include <perl.h>
-#include <XSUB.h>
-
-#include "bsd_glob.h"
-#ifdef I_PWD
-# include <pwd.h>
-#else
-#ifdef HAS_PASSWD
- struct passwd *getpwnam(char *);
- struct passwd *getpwuid(Uid_t);
-#endif
-#endif
-
-#ifndef MAXPATHLEN
-# ifdef PATH_MAX
-# define MAXPATHLEN PATH_MAX
-# ifdef MACOS_TRADITIONAL
-# define MAXPATHLEN 255
-# else
-# define MAXPATHLEN 1024
-# endif
-# endif
-#endif
-
-#define BG_DOLLAR '$'
-#define BG_DOT '.'
-#define BG_EOS '\0'
-#define BG_LBRACKET '['
-#define BG_NOT '!'
-#define BG_QUESTION '?'
-#define BG_QUOTE '\\'
-#define BG_RANGE '-'
-#define BG_RBRACKET ']'
-#ifdef MACOS_TRADITIONAL
-# define BG_SEP ':'
-#else
-# define BG_SEP '/'
-#endif
-#ifdef DOSISH
-#define BG_SEP2 '\\'
-#endif
-#define BG_STAR '*'
-#define BG_TILDE '~'
-#define BG_UNDERSCORE '_'
-#define BG_LBRACE '{'
-#define BG_RBRACE '}'
-#define BG_SLASH '/'
-#define BG_COMMA ','
-
-#ifndef GLOB_DEBUG
-
-#define M_QUOTE 0x8000
-#define M_PROTECT 0x4000
-#define M_MASK 0xffff
-#define M_ASCII 0x00ff
-
-typedef U16 Char;
-
-#else
-
-#define M_QUOTE 0x80
-#define M_PROTECT 0x40
-#define M_MASK 0xff
-#define M_ASCII 0x7f
-
-typedef U8 Char;
-
-#endif /* !GLOB_DEBUG */
-
-
-#define CHAR(c) ((Char)((c)&M_ASCII))
-#define META(c) ((Char)((c)|M_QUOTE))
-#define M_ALL META('*')
-#define M_END META(']')
-#define M_NOT META('!')
-#define M_ONE META('?')
-#define M_RNG META('-')
-#define M_SET META('[')
-#define ismeta(c) (((c)&M_QUOTE) != 0)
-
-
-static int compare(const void *, const void *);
-static int ci_compare(const void *, const void *);
-static void g_Ctoc(const Char *, char *);
-static int g_lstat(Char *, Stat_t *, glob_t *);
-static DIR *g_opendir(Char *, glob_t *);
-static Char *g_strchr(Char *, int);
-#ifdef notdef
-static Char *g_strcat(Char *, const Char *);
-#endif
-static int g_stat(Char *, Stat_t *, glob_t *);
-static int glob0(const Char *, glob_t *);
-static int glob1(Char *, glob_t *);
-static int glob2(Char *, Char *, Char *, glob_t *);
-static int glob3(Char *, Char *, Char *, Char *, glob_t *);
-static int globextend(const Char *, glob_t *);
-static const Char * globtilde(const Char *, Char *, glob_t *);
-static int globexp1(const Char *, glob_t *);
-static int globexp2(const Char *, const Char *, glob_t *, int *);
-static int match(Char *, Char *, Char *, int);
-#ifdef GLOB_DEBUG
-static void qprintf(const char *, Char *);
-#endif /* GLOB_DEBUG */
-
-#ifdef PERL_IMPLICIT_CONTEXT
-static Direntry_t * my_readdir(DIR*);
-
-static Direntry_t *
-my_readdir(DIR *d)
-{
- return PerlDir_read(d);
-}
-#else
-#define my_readdir readdir
-#endif
-
-int
-bsd_glob(const char *pattern, int flags,
- int (*errfunc)(const char *, int), glob_t *pglob)
-{
- const U8 *patnext;
- int c;
- Char *bufnext, *bufend, patbuf[MAXPATHLEN+1];
-
- patnext = (U8 *) pattern;
- if (!(flags & GLOB_APPEND)) {
- pglob->gl_pathc = 0;
- pglob->gl_pathv = NULL;
- if (!(flags & GLOB_DOOFFS))
- pglob->gl_offs = 0;
- }
- pglob->gl_flags = flags & ~GLOB_MAGCHAR;
- pglob->gl_errfunc = errfunc;
- pglob->gl_matchc = 0;
-
- bufnext = patbuf;
- bufend = bufnext + MAXPATHLEN;
-#ifdef DOSISH
- /* Nasty hack to treat patterns like "C:*" correctly. In this
- * case, the * should match any file in the current directory
- * on the C: drive. However, the glob code does not treat the
- * colon specially, so it looks for files beginning "C:" in
- * the current directory. To fix this, change the pattern to
- * add an explicit "./" at the start (just after the drive
- * letter and colon - ie change to "C:./*").
- */
- if (isalpha(pattern[0]) && pattern[1] == ':' &&
- pattern[2] != BG_SEP && pattern[2] != BG_SEP2 &&
- bufend - bufnext > 4) {
- *bufnext++ = pattern[0];
- *bufnext++ = ':';
- *bufnext++ = '.';
- *bufnext++ = BG_SEP;
- patnext += 2;
- }
-#endif
- if (flags & GLOB_QUOTE) {
- /* Protect the quoted characters. */
- while (bufnext < bufend && (c = *patnext++) != BG_EOS)
- if (c == BG_QUOTE) {
-#ifdef DOSISH
- /* To avoid backslashitis on Win32,
- * we only treat \ as a quoting character
- * if it precedes one of the
- * metacharacters []-{}~\
- */
- if ((c = *patnext++) != '[' && c != ']' &&
- c != '-' && c != '{' && c != '}' &&
- c != '~' && c != '\\') {
-#else
- if ((c = *patnext++) == BG_EOS) {
-#endif
- c = BG_QUOTE;
- --patnext;
- }
- *bufnext++ = c | M_PROTECT;
- }
- else
- *bufnext++ = c;
- }
- else
- while (bufnext < bufend && (c = *patnext++) != BG_EOS)
- *bufnext++ = c;
- *bufnext = BG_EOS;
-
- if (flags & GLOB_BRACE)
- return globexp1(patbuf, pglob);
- else
- return glob0(patbuf, pglob);
-}
-
-/*
- * Expand recursively a glob {} pattern. When there is no more expansion
- * invoke the standard globbing routine to glob the rest of the magic
- * characters
- */
-static int globexp1(const Char *pattern, glob_t *pglob)
-{
- const Char* ptr = pattern;
- int rv;
-
- /* Protect a single {}, for find(1), like csh */
- if (pattern[0] == BG_LBRACE && pattern[1] == BG_RBRACE && pattern[2] == BG_EOS)
- return glob0(pattern, pglob);
-
- while ((ptr = (const Char *) g_strchr((Char *) ptr, BG_LBRACE)) != NULL)
- if (!globexp2(ptr, pattern, pglob, &rv))
- return rv;
-
- return glob0(pattern, pglob);
-}
-
-
-/*
- * Recursive brace globbing helper. Tries to expand a single brace.
- * If it succeeds then it invokes globexp1 with the new pattern.
- * If it fails then it tries to glob the rest of the pattern and returns.
- */
-static int globexp2(const Char *ptr, const Char *pattern,
- glob_t *pglob, int *rv)
-{
- int i;
- Char *lm, *ls;
- const Char *pe, *pm, *pl;
- Char patbuf[MAXPATHLEN + 1];
-
- /* copy part up to the brace */
- for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++)
- continue;
- ls = lm;
-
- /* Find the balanced brace */
- for (i = 0, pe = ++ptr; *pe; pe++)
- if (*pe == BG_LBRACKET) {
- /* Ignore everything between [] */
- for (pm = pe++; *pe != BG_RBRACKET && *pe != BG_EOS; pe++)
- continue;
- if (*pe == BG_EOS) {
- /*
- * We could not find a matching BG_RBRACKET.
- * Ignore and just look for BG_RBRACE
- */
- pe = pm;
- }
- }
- else if (*pe == BG_LBRACE)
- i++;
- else if (*pe == BG_RBRACE) {
- if (i == 0)
- break;
- i--;
- }
-
- /* Non matching braces; just glob the pattern */
- if (i != 0 || *pe == BG_EOS) {
- *rv = glob0(patbuf, pglob);
- return 0;
- }
-
- for (i = 0, pl = pm = ptr; pm <= pe; pm++)
- switch (*pm) {
- case BG_LBRACKET:
- /* Ignore everything between [] */
- for (pl = pm++; *pm != BG_RBRACKET && *pm != BG_EOS; pm++)
- continue;
- if (*pm == BG_EOS) {
- /*
- * We could not find a matching BG_RBRACKET.
- * Ignore and just look for BG_RBRACE
- */
- pm = pl;
- }
- break;
-
- case BG_LBRACE:
- i++;
- break;
-
- case BG_RBRACE:
- if (i) {
- i--;
- break;
- }
- /* FALLTHROUGH */
- case BG_COMMA:
- if (i && *pm == BG_COMMA)
- break;
- else {
- /* Append the current string */
- for (lm = ls; (pl < pm); *lm++ = *pl++)
- continue;
- /*
- * Append the rest of the pattern after the
- * closing brace
- */
- for (pl = pe + 1; (*lm++ = *pl++) != BG_EOS;)
- continue;
-
- /* Expand the current pattern */
-#ifdef GLOB_DEBUG
- qprintf("globexp2:", patbuf);
-#endif /* GLOB_DEBUG */
- *rv = globexp1(patbuf, pglob);
-
- /* move after the comma, to the next string */
- pl = pm + 1;
- }
- break;
-
- default:
- break;
- }
- *rv = 0;
- return 0;
-}
-
-
-
-/*
- * expand tilde from the passwd file.
- */
-static const Char *
-globtilde(const Char *pattern, Char *patbuf, glob_t *pglob)
-{
- struct passwd *pwd;
- char *h;
- const Char *p;
- Char *b;
-
- if (*pattern != BG_TILDE || !(pglob->gl_flags & GLOB_TILDE))
- return pattern;
-
- /* Copy up to the end of the string or / */
- for (p = pattern + 1, h = (char *) patbuf; *p && *p != BG_SLASH;
- *h++ = *p++)
- continue;
-
- *h = BG_EOS;
-
- if (((char *) patbuf)[0] == BG_EOS) {
- /*
- * handle a plain ~ or ~/ by expanding $HOME
- * first and then trying the password file
- */
- if ((h = getenv("HOME")) == NULL) {
-#ifdef HAS_PASSWD
- if ((pwd = getpwuid(getuid())) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
-#else
- return pattern;
-#endif
- }
- }
- else {
- /*
- * Expand a ~user
- */
-#ifdef HAS_PASSWD
- if ((pwd = getpwnam((char*) patbuf)) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
-#else
- return pattern;
-#endif
- }
-
- /* Copy the home directory */
- for (b = patbuf; *h; *b++ = *h++)
- continue;
-
- /* Append the rest of the pattern */
- while ((*b++ = *p++) != BG_EOS)
- continue;
-
- return patbuf;
-}
-
-
-/*
- * The main glob() routine: compiles the pattern (optionally processing
- * quotes), calls glob1() to do the real pattern matching, and finally
- * sorts the list (unless unsorted operation is requested). Returns 0
- * if things went well, nonzero if errors occurred. It is not an error
- * to find no matches.
- */
-static int
-glob0(const Char *pattern, glob_t *pglob)
-{
- const Char *qpat, *qpatnext;
- int c, err, oldflags, oldpathc;
- Char *bufnext, patbuf[MAXPATHLEN+1];
-
-#ifdef MACOS_TRADITIONAL
- if ( (*pattern == BG_TILDE) && (pglob->gl_flags & GLOB_TILDE) ) {
- return(globextend(pattern, pglob));
- }
-#endif
-
- qpat = globtilde(pattern, patbuf, pglob);
- qpatnext = qpat;
- oldflags = pglob->gl_flags;
- oldpathc = pglob->gl_pathc;
- bufnext = patbuf;
-
- /* We don't need to check for buffer overflow any more. */
- while ((c = *qpatnext++) != BG_EOS) {
- switch (c) {
- case BG_LBRACKET:
- c = *qpatnext;
- if (c == BG_NOT)
- ++qpatnext;
- if (*qpatnext == BG_EOS ||
- g_strchr((Char *) qpatnext+1, BG_RBRACKET) == NULL) {
- *bufnext++ = BG_LBRACKET;
- if (c == BG_NOT)
- --qpatnext;
- break;
- }
- *bufnext++ = M_SET;
- if (c == BG_NOT)
- *bufnext++ = M_NOT;
- c = *qpatnext++;
- do {
- *bufnext++ = CHAR(c);
- if (*qpatnext == BG_RANGE &&
- (c = qpatnext[1]) != BG_RBRACKET) {
- *bufnext++ = M_RNG;
- *bufnext++ = CHAR(c);
- qpatnext += 2;
- }
- } while ((c = *qpatnext++) != BG_RBRACKET);
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_END;
- break;
- case BG_QUESTION:
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_ONE;
- break;
- case BG_STAR:
- pglob->gl_flags |= GLOB_MAGCHAR;
- /* collapse adjacent stars to one,
- * to avoid exponential behavior
- */
- if (bufnext == patbuf || bufnext[-1] != M_ALL)
- *bufnext++ = M_ALL;
- break;
- default:
- *bufnext++ = CHAR(c);
- break;
- }
- }
- *bufnext = BG_EOS;
-#ifdef GLOB_DEBUG
- qprintf("glob0:", patbuf);
-#endif /* GLOB_DEBUG */
-
- if ((err = glob1(patbuf, pglob)) != 0) {
- pglob->gl_flags = oldflags;
- return(err);
- }
-
- /*
- * If there was no match we are going to append the pattern
- * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified
- * and the pattern did not contain any magic characters
- * GLOB_NOMAGIC is there just for compatibility with csh.
- */
- if (pglob->gl_pathc == oldpathc &&
- ((pglob->gl_flags & GLOB_NOCHECK) ||
- ((pglob->gl_flags & GLOB_NOMAGIC) &&
- !(pglob->gl_flags & GLOB_MAGCHAR))))
- {
-#ifdef GLOB_DEBUG
- printf("calling globextend from glob0\n");
-#endif /* GLOB_DEBUG */
- pglob->gl_flags = oldflags;
- return(globextend(qpat, pglob));
- }
- else if (!(pglob->gl_flags & GLOB_NOSORT))
- qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc,
- pglob->gl_pathc - oldpathc, sizeof(char *),
- (pglob->gl_flags & (GLOB_ALPHASORT|GLOB_NOCASE))
- ? ci_compare : compare);
- pglob->gl_flags = oldflags;
- return(0);
-}
-
-static int
-ci_compare(const void *p, const void *q)
-{
- const char *pp = *(const char **)p;
- const char *qq = *(const char **)q;
- int ci;
- while (*pp && *qq) {
- if (tolower(*pp) != tolower(*qq))
- break;
- ++pp;
- ++qq;
- }
- ci = tolower(*pp) - tolower(*qq);
- if (ci == 0)
- return compare(p, q);
- return ci;
-}
-
-static int
-compare(const void *p, const void *q)
-{
- return(strcmp(*(char **)p, *(char **)q));
-}
-
-static int
-glob1(Char *pattern, glob_t *pglob)
-{
- Char pathbuf[MAXPATHLEN+1];
-
- /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */
- if (*pattern == BG_EOS)
- return(0);
- return(glob2(pathbuf, pathbuf, pattern, pglob));
-}
-
-/*
- * The functions glob2 and glob3 are mutually recursive; there is one level
- * of recursion for each segment in the pattern that contains one or more
- * meta characters.
- */
-static int
-glob2(Char *pathbuf, Char *pathend, Char *pattern, glob_t *pglob)
-{
- Stat_t sb;
- Char *p, *q;
- int anymeta;
-
- /*
- * Loop over pattern segments until end of pattern or until
- * segment with meta character found.
- */
- for (anymeta = 0;;) {
- if (*pattern == BG_EOS) { /* End of pattern? */
- *pathend = BG_EOS;
-
- if (g_lstat(pathbuf, &sb, pglob))
- return(0);
-
- if (((pglob->gl_flags & GLOB_MARK) &&
- pathend[-1] != BG_SEP
-#ifdef DOSISH
- && pathend[-1] != BG_SEP2
-#endif
- ) && (S_ISDIR(sb.st_mode)
- || (S_ISLNK(sb.st_mode) &&
- (g_stat(pathbuf, &sb, pglob) == 0) &&
- S_ISDIR(sb.st_mode)))) {
- *pathend++ = BG_SEP;
- *pathend = BG_EOS;
- }
- ++pglob->gl_matchc;
-#ifdef GLOB_DEBUG
- printf("calling globextend from glob2\n");
-#endif /* GLOB_DEBUG */
- return(globextend(pathbuf, pglob));
- }
-
- /* Find end of next segment, copy tentatively to pathend. */
- q = pathend;
- p = pattern;
- while (*p != BG_EOS && *p != BG_SEP
-#ifdef DOSISH
- && *p != BG_SEP2
-#endif
- ) {
- if (ismeta(*p))
- anymeta = 1;
- *q++ = *p++;
- }
-
- if (!anymeta) { /* No expansion, do next segment. */
- pathend = q;
- pattern = p;
- while (*pattern == BG_SEP
-#ifdef DOSISH
- || *pattern == BG_SEP2
-#endif
- )
- *pathend++ = *pattern++;
- } else /* Need expansion, recurse. */
- return(glob3(pathbuf, pathend, pattern, p, pglob));
- }
- /* NOTREACHED */
-}
-
-static int
-glob3(Char *pathbuf, Char *pathend, Char *pattern,
- Char *restpattern, glob_t *pglob)
-{
- register Direntry_t *dp;
- DIR *dirp;
- int err;
- int nocase;
- char buf[MAXPATHLEN];
-
- /*
- * The readdirfunc declaration can't be prototyped, because it is
- * assigned, below, to two functions which are prototyped in glob.h
- * and dirent.h as taking pointers to differently typed opaque
- * structures.
- */
- Direntry_t *(*readdirfunc)(DIR*);
-
- *pathend = BG_EOS;
- errno = 0;
-
-#ifdef VMS
- {
- Char *q = pathend;
- if (q - pathbuf > 5) {
- q -= 5;
- if (q[0] == '.' && tolower(q[1]) == 'd' && tolower(q[2]) == 'i'
- && tolower(q[3]) == 'r' && q[4] == '/')
- {
- q[0] = '/';
- q[1] = BG_EOS;
- pathend = q+1;
- }
- }
- }
-#endif
- if ((dirp = g_opendir(pathbuf, pglob)) == NULL) {
- /* TODO: don't call for ENOENT or ENOTDIR? */
- if (pglob->gl_errfunc) {
- g_Ctoc(pathbuf, buf);
- if (pglob->gl_errfunc(buf, errno) ||
- (pglob->gl_flags & GLOB_ERR))
- return (GLOB_ABEND);
- }
- return(0);
- }
-
- err = 0;
- nocase = ((pglob->gl_flags & GLOB_NOCASE) != 0);
-
- /* Search directory for matching names. */
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- readdirfunc = (Direntry_t *(*)(DIR *))pglob->gl_readdir;
- else
- readdirfunc = my_readdir;
- while ((dp = (*readdirfunc)(dirp))) {
- register U8 *sc;
- register Char *dc;
-
- /* Initial BG_DOT must be matched literally. */
- if (dp->d_name[0] == BG_DOT && *pattern != BG_DOT)
- continue;
- for (sc = (U8 *) dp->d_name, dc = pathend;
- (*dc++ = *sc++) != BG_EOS;)
- continue;
- if (!match(pathend, pattern, restpattern, nocase)) {
- *pathend = BG_EOS;
- continue;
- }
- err = glob2(pathbuf, --dc, restpattern, pglob);
- if (err)
- break;
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- (*pglob->gl_closedir)(dirp);
- else
- PerlDir_close(dirp);
- return(err);
-}
-
-
-/*
- * Extend the gl_pathv member of a glob_t structure to accomodate a new item,
- * add the new item, and update gl_pathc.
- *
- * This assumes the BSD realloc, which only copies the block when its size
- * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic
- * behavior.
- *
- * Return 0 if new item added, error code if memory couldn't be allocated.
- *
- * Invariant of the glob_t structure:
- * Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and
- * gl_pathv points to (gl_offs + gl_pathc + 1) items.
- */
-static int
-globextend(const Char *path, glob_t *pglob)
-{
- register char **pathv;
- register int i;
- char *copy;
- const Char *p;
-
-#ifdef GLOB_DEBUG
- printf("Adding ");
- for (p = path; *p; p++)
- (void)printf("%c", CHAR(*p));
- printf("\n");
-#endif /* GLOB_DEBUG */
-
- if (pglob->gl_pathv)
- pathv = Renew(pglob->gl_pathv,
- (2 + pglob->gl_pathc + pglob->gl_offs),char*);
- else
- New(0,pathv,(2 + pglob->gl_pathc + pglob->gl_offs),char*);
- if (pathv == NULL)
- return(GLOB_NOSPACE);
-
- if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) {
- /* first time around -- clear initial gl_offs items */
- pathv += pglob->gl_offs;
- for (i = pglob->gl_offs; --i >= 0; )
- *--pathv = NULL;
- }
- pglob->gl_pathv = pathv;
-
- for (p = path; *p++;)
- continue;
- New(0, copy, p-path, char);
- if (copy != NULL) {
- g_Ctoc(path, copy);
- pathv[pglob->gl_offs + pglob->gl_pathc++] = copy;
- }
- pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
- return(copy == NULL ? GLOB_NOSPACE : 0);
-}
-
-
-/*
- * pattern matching function for filenames. Each occurrence of the *
- * pattern causes a recursion level.
- */
-static int
-match(register Char *name, register Char *pat, register Char *patend, int nocase)
-{
- int ok, negate_range;
- Char c, k;
-
- while (pat < patend) {
- c = *pat++;
- switch (c & M_MASK) {
- case M_ALL:
- if (pat == patend)
- return(1);
- do
- if (match(name, pat, patend, nocase))
- return(1);
- while (*name++ != BG_EOS);
- return(0);
- case M_ONE:
- if (*name++ == BG_EOS)
- return(0);
- break;
- case M_SET:
- ok = 0;
- if ((k = *name++) == BG_EOS)
- return(0);
- if ((negate_range = ((*pat & M_MASK) == M_NOT)) != BG_EOS)
- ++pat;
- while (((c = *pat++) & M_MASK) != M_END)
- if ((*pat & M_MASK) == M_RNG) {
- if (nocase) {
- if (tolower(c) <= tolower(k) && tolower(k) <= tolower(pat[1]))
- ok = 1;
- } else {
- if (c <= k && k <= pat[1])
- ok = 1;
- }
- pat += 2;
- } else if (nocase ? (tolower(c) == tolower(k)) : (c == k))
- ok = 1;
- if (ok == negate_range)
- return(0);
- break;
- default:
- k = *name++;
- if (nocase ? (tolower(k) != tolower(c)) : (k != c))
- return(0);
- break;
- }
- }
- return(*name == BG_EOS);
-}
-
-/* Free allocated data belonging to a glob_t structure. */
-void
-bsd_globfree(glob_t *pglob)
-{
- register int i;
- register char **pp;
-
- if (pglob->gl_pathv != NULL) {
- pp = pglob->gl_pathv + pglob->gl_offs;
- for (i = pglob->gl_pathc; i--; ++pp)
- if (*pp)
- Safefree(*pp);
- Safefree(pglob->gl_pathv);
- }
-}
-
-static DIR *
-g_opendir(register Char *str, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- if (!*str) {
-#ifdef MACOS_TRADITIONAL
- strcpy(buf, ":");
-#else
- strcpy(buf, ".");
-#endif
- } else {
- g_Ctoc(str, buf);
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_opendir)(buf));
- else
- return(PerlDir_open(buf));
-}
-
-static int
-g_lstat(register Char *fn, Stat_t *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- g_Ctoc(fn, buf);
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_lstat)(buf, sb));
-#ifdef HAS_LSTAT
- return(PerlLIO_lstat(buf, sb));
-#else
- return(PerlLIO_stat(buf, sb));
-#endif /* HAS_LSTAT */
-}
-
-static int
-g_stat(register Char *fn, Stat_t *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- g_Ctoc(fn, buf);
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_stat)(buf, sb));
- return(PerlLIO_stat(buf, sb));
-}
-
-static Char *
-g_strchr(Char *str, int ch)
-{
- do {
- if (*str == ch)
- return (str);
- } while (*str++);
- return (NULL);
-}
-
-#ifdef notdef
-static Char *
-g_strcat(Char *dst, const Char *src)
-{
- Char *sdst = dst;
-
- while (*dst++)
- continue;
- --dst;
- while((*dst++ = *src++) != BG_EOS)
- continue;
-
- return (sdst);
-}
-#endif
-
-static void
-g_Ctoc(register const Char *str, char *buf)
-{
- register char *dc;
-
- for (dc = buf; (*dc++ = *str++) != BG_EOS;)
- continue;
-}
-
-#ifdef GLOB_DEBUG
-static void
-qprintf(const char *str, register Char *s)
-{
- register Char *p;
-
- (void)printf("%s:\n", str);
- for (p = s; *p; p++)
- (void)printf("%c", CHAR(*p));
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", *p & M_PROTECT ? '"' : ' ');
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", ismeta(*p) ? '_' : ' ');
- (void)printf("\n");
-}
-#endif /* GLOB_DEBUG */
diff --git a/contrib/perl5/ext/File/Glob/bsd_glob.h b/contrib/perl5/ext/File/Glob/bsd_glob.h
deleted file mode 100644
index 5d04fff..0000000
--- a/contrib/perl5/ext/File/Glob/bsd_glob.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)glob.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _BSD_GLOB_H_
-#define _BSD_GLOB_H_
-
-/* #include <sys/cdefs.h> */
-
-typedef struct {
- int gl_pathc; /* Count of total paths so far. */
- int gl_matchc; /* Count of paths matching pattern. */
- int gl_offs; /* Reserved at beginning of gl_pathv. */
- int gl_flags; /* Copy of flags parameter to glob. */
- char **gl_pathv; /* List of paths matching pattern. */
- /* Copy of errfunc parameter to glob. */
- int (*gl_errfunc)(const char *, int);
-
- /*
- * Alternate filesystem access methods for glob; replacement
- * versions of closedir(3), readdir(3), opendir(3), stat(2)
- * and lstat(2).
- */
- void (*gl_closedir)(void *);
- Direntry_t *(*gl_readdir)(void *);
- void *(*gl_opendir)(const char *);
- int (*gl_lstat)(const char *, Stat_t *);
- int (*gl_stat)(const char *, Stat_t *);
-} glob_t;
-
-#define GLOB_APPEND 0x0001 /* Append to output from previous call. */
-#define GLOB_DOOFFS 0x0002 /* Use gl_offs. */
-#define GLOB_ERR 0x0004 /* Return on error. */
-#define GLOB_MARK 0x0008 /* Append / to matching directories. */
-#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */
-#define GLOB_NOSORT 0x0020 /* Don't sort. */
-
-#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
-#define GLOB_BRACE 0x0080 /* Expand braces ala csh. */
-#define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */
-#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */
-#define GLOB_QUOTE 0x0400 /* Quote special chars with \. */
-#define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */
-#define GLOB_NOCASE 0x1000 /* Treat filenames without regard for case. */
-#define GLOB_ALPHASORT 0x2000 /* Alphabetic, not ASCII sort, like csh. */
-
-#define GLOB_NOSPACE (-1) /* Malloc call failed. */
-#define GLOB_ABEND (-2) /* Unignored error. */
-
-int bsd_glob(const char *, int, int (*)(const char *, int), glob_t *);
-void bsd_globfree(glob_t *);
-
-#endif /* !_BSD_GLOB_H_ */
diff --git a/contrib/perl5/ext/GDBM_File/GDBM_File.pm b/contrib/perl5/ext/GDBM_File/GDBM_File.pm
deleted file mode 100644
index 310243c..0000000
--- a/contrib/perl5/ext/GDBM_File/GDBM_File.pm
+++ /dev/null
@@ -1,89 +0,0 @@
-# GDBM_File.pm -- Perl 5 interface to GNU gdbm library.
-
-=head1 NAME
-
-GDBM_File - Perl5 access to the gdbm library.
-
-=head1 SYNOPSIS
-
- use GDBM_File ;
- tie %hash, 'GDBM_File', $filename, &GDBM_WRCREAT, 0640;
- # Use the %hash array.
- untie %hash ;
-
-=head1 DESCRIPTION
-
-B<GDBM_File> is a module which allows Perl programs to make use of the
-facilities provided by the GNU gdbm library. If you intend to use this
-module you should really have a copy of the gdbm manualpage at hand.
-
-Most of the libgdbm.a functions are available through the GDBM_File
-interface.
-
-=head1 AVAILABILITY
-
-Gdbm is available from any GNU archive. The master site is
-C<prep.ai.mit.edu>, but your are strongly urged to use one of the many
-mirrors. You can obtain a list of mirror sites by issuing the
-command C<finger fsf@prep.ai.mit.edu>.
-
-=head1 BUGS
-
-The available functions and the gdbm/perl interface need to be documented.
-
-=head1 SEE ALSO
-
-L<perl(1)>, L<DB_File(3)>, L<perldbmfilter>.
-
-=cut
-
-package GDBM_File;
-
-use strict;
-use warnings;
-our($VERSION, @ISA, @EXPORT, $AUTOLOAD);
-
-require Carp;
-require Tie::Hash;
-require Exporter;
-use AutoLoader;
-use XSLoader ();
-@ISA = qw(Tie::Hash Exporter);
-@EXPORT = qw(
- GDBM_CACHESIZE
- GDBM_FAST
- GDBM_INSERT
- GDBM_NEWDB
- GDBM_NOLOCK
- GDBM_READER
- GDBM_REPLACE
- GDBM_WRCREAT
- GDBM_WRITER
-);
-
-$VERSION = "1.05";
-
-sub AUTOLOAD {
- my($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my $val = constant($constname, @_ ? $_[0] : 0);
- if ($! != 0) {
- if ($! =~ /Invalid/ || $!{EINVAL}) {
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- Carp::croak("Your vendor has not defined GDBM_File macro $constname, used");
- }
- }
- eval "sub $AUTOLOAD { $val }";
- goto &$AUTOLOAD;
-}
-
-XSLoader::load 'GDBM_File', $VERSION;
-
-# Preloaded methods go here. Autoload methods go after __END__, and are
-# processed by the autosplit program.
-
-1;
-__END__
diff --git a/contrib/perl5/ext/GDBM_File/GDBM_File.xs b/contrib/perl5/ext/GDBM_File/GDBM_File.xs
deleted file mode 100644
index 5e426f9..0000000
--- a/contrib/perl5/ext/GDBM_File/GDBM_File.xs
+++ /dev/null
@@ -1,363 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include <gdbm.h>
-#include <fcntl.h>
-
-typedef struct {
- GDBM_FILE dbp ;
- SV * filter_fetch_key ;
- SV * filter_store_key ;
- SV * filter_fetch_value ;
- SV * filter_store_value ;
- int filtering ;
- } GDBM_File_type;
-
-typedef GDBM_File_type * GDBM_File ;
-typedef datum datum_key ;
-typedef datum datum_value ;
-
-#define ckFilter(arg,type,name) \
- if (db->type) { \
- SV * save_defsv ; \
- /* printf("filtering %s\n", name) ;*/ \
- if (db->filtering) \
- croak("recursion detected in %s", name) ; \
- db->filtering = TRUE ; \
- save_defsv = newSVsv(DEFSV) ; \
- sv_setsv(DEFSV, arg) ; \
- PUSHMARK(sp) ; \
- (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \
- sv_setsv(arg, DEFSV) ; \
- sv_setsv(DEFSV, save_defsv) ; \
- SvREFCNT_dec(save_defsv) ; \
- db->filtering = FALSE ; \
- /*printf("end of filtering %s\n", name) ;*/ \
- }
-
-
-
-#define GDBM_BLOCKSIZE 0 /* gdbm defaults to stat blocksize */
-
-typedef void (*FATALFUNC)();
-
-#ifndef GDBM_FAST
-static int
-not_here(char *s)
-{
- croak("GDBM_File::%s not implemented on this architecture", s);
- return -1;
-}
-#endif
-
-/* GDBM allocates the datum with system malloc() and expects the user
- * to free() it. So we either have to free() it immediately, or have
- * perl free() it when it deallocates the SV, depending on whether
- * perl uses malloc()/free() or not. */
-static void
-output_datum(pTHX_ SV *arg, char *str, int size)
-{
-#if !defined(MYMALLOC) || (defined(MYMALLOC) && defined(PERL_POLLUTE_MALLOC) && !defined(LEAKTEST))
- sv_usepvn(arg, str, size);
-#else
- sv_setpvn(arg, str, size);
- safesysfree(str);
-#endif
-}
-
-/* Versions of gdbm prior to 1.7x might not have the gdbm_sync,
- gdbm_exists, and gdbm_setopt functions. Apparently Slackware
- (Linux) 2.1 contains gdbm-1.5 (which dates back to 1991).
-*/
-#ifndef GDBM_FAST
-#define gdbm_exists(db,key) not_here("gdbm_exists")
-#define gdbm_sync(db) (void) not_here("gdbm_sync")
-#define gdbm_setopt(db,optflag,optval,optlen) not_here("gdbm_setopt")
-#endif
-
-static double
-constant(char *name, int arg)
-{
- errno = 0;
- switch (*name) {
- case 'A':
- break;
- case 'B':
- break;
- case 'C':
- break;
- case 'D':
- break;
- case 'E':
- break;
- case 'F':
- break;
- case 'G':
- if (strEQ(name, "GDBM_CACHESIZE"))
-#ifdef GDBM_CACHESIZE
- return GDBM_CACHESIZE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_FAST"))
-#ifdef GDBM_FAST
- return GDBM_FAST;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_FASTMODE"))
-#ifdef GDBM_FASTMODE
- return GDBM_FASTMODE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_INSERT"))
-#ifdef GDBM_INSERT
- return GDBM_INSERT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_NEWDB"))
-#ifdef GDBM_NEWDB
- return GDBM_NEWDB;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_NOLOCK"))
-#ifdef GDBM_NOLOCK
- return GDBM_NOLOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_READER"))
-#ifdef GDBM_READER
- return GDBM_READER;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_REPLACE"))
-#ifdef GDBM_REPLACE
- return GDBM_REPLACE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_WRCREAT"))
-#ifdef GDBM_WRCREAT
- return GDBM_WRCREAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "GDBM_WRITER"))
-#ifdef GDBM_WRITER
- return GDBM_WRITER;
-#else
- goto not_there;
-#endif
- break;
- case 'H':
- break;
- case 'I':
- break;
- case 'J':
- break;
- case 'K':
- break;
- case 'L':
- break;
- case 'M':
- break;
- case 'N':
- break;
- case 'O':
- break;
- case 'P':
- break;
- case 'Q':
- break;
- case 'R':
- break;
- case 'S':
- break;
- case 'T':
- break;
- case 'U':
- break;
- case 'V':
- break;
- case 'W':
- break;
- case 'X':
- break;
- case 'Y':
- break;
- case 'Z':
- break;
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-MODULE = GDBM_File PACKAGE = GDBM_File PREFIX = gdbm_
-
-double
-constant(name,arg)
- char * name
- int arg
-
-
-GDBM_File
-gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak)
- char * dbtype
- char * name
- int read_write
- int mode
- FATALFUNC fatal_func
- CODE:
- {
- GDBM_FILE dbp ;
-
- RETVAL = NULL ;
- if ((dbp = gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode, fatal_func))) {
- RETVAL = (GDBM_File)safemalloc(sizeof(GDBM_File_type)) ;
- Zero(RETVAL, 1, GDBM_File_type) ;
- RETVAL->dbp = dbp ;
- }
-
- }
- OUTPUT:
- RETVAL
-
-
-#define gdbm_close(db) gdbm_close(db->dbp)
-void
-gdbm_close(db)
- GDBM_File db
- CLEANUP:
-
-void
-gdbm_DESTROY(db)
- GDBM_File db
- CODE:
- gdbm_close(db);
- safefree(db);
-
-#define gdbm_FETCH(db,key) gdbm_fetch(db->dbp,key)
-datum_value
-gdbm_FETCH(db, key)
- GDBM_File db
- datum_key key
-
-#define gdbm_STORE(db,key,value,flags) gdbm_store(db->dbp,key,value,flags)
-int
-gdbm_STORE(db, key, value, flags = GDBM_REPLACE)
- GDBM_File db
- datum_key key
- datum_value value
- int flags
- CLEANUP:
- if (RETVAL) {
- if (RETVAL < 0 && errno == EPERM)
- croak("No write permission to gdbm file");
- croak("gdbm store returned %d, errno %d, key \"%.*s\"",
- RETVAL,errno,key.dsize,key.dptr);
- }
-
-#define gdbm_DELETE(db,key) gdbm_delete(db->dbp,key)
-int
-gdbm_DELETE(db, key)
- GDBM_File db
- datum_key key
-
-#define gdbm_FIRSTKEY(db) gdbm_firstkey(db->dbp)
-datum_key
-gdbm_FIRSTKEY(db)
- GDBM_File db
-
-#define gdbm_NEXTKEY(db,key) gdbm_nextkey(db->dbp,key)
-datum_key
-gdbm_NEXTKEY(db, key)
- GDBM_File db
- datum_key key
-
-#define gdbm_reorganize(db) gdbm_reorganize(db->dbp)
-int
-gdbm_reorganize(db)
- GDBM_File db
-
-
-#define gdbm_sync(db) gdbm_sync(db->dbp)
-void
-gdbm_sync(db)
- GDBM_File db
-
-#define gdbm_EXISTS(db,key) gdbm_exists(db->dbp,key)
-int
-gdbm_EXISTS(db, key)
- GDBM_File db
- datum_key key
-
-#define gdbm_setopt(db,optflag, optval, optlen) gdbm_setopt(db->dbp,optflag, optval, optlen)
-int
-gdbm_setopt (db, optflag, optval, optlen)
- GDBM_File db
- int optflag
- int &optval
- int optlen
-
-
-#define setFilter(type) \
- { \
- if (db->type) \
- RETVAL = sv_mortalcopy(db->type) ; \
- ST(0) = RETVAL ; \
- if (db->type && (code == &PL_sv_undef)) { \
- SvREFCNT_dec(db->type) ; \
- db->type = NULL ; \
- } \
- else if (code) { \
- if (db->type) \
- sv_setsv(db->type, code) ; \
- else \
- db->type = newSVsv(code) ; \
- } \
- }
-
-
-
-SV *
-filter_fetch_key(db, code)
- GDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_key) ;
-
-SV *
-filter_store_key(db, code)
- GDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_key) ;
-
-SV *
-filter_fetch_value(db, code)
- GDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_value) ;
-
-SV *
-filter_store_value(db, code)
- GDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_value) ;
-
diff --git a/contrib/perl5/ext/GDBM_File/Makefile.PL b/contrib/perl5/ext/GDBM_File/Makefile.PL
deleted file mode 100644
index 2a7256f..0000000
--- a/contrib/perl5/ext/GDBM_File/Makefile.PL
+++ /dev/null
@@ -1,8 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'GDBM_File',
- LIBS => ["-L/usr/local/lib -lgdbm", "-ldbm"],
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes', # XXX remove later?
- VERSION_FROM => 'GDBM_File.pm',
-);
diff --git a/contrib/perl5/ext/GDBM_File/hints/sco.pl b/contrib/perl5/ext/GDBM_File/hints/sco.pl
deleted file mode 100644
index 5c74a77..0000000
--- a/contrib/perl5/ext/GDBM_File/hints/sco.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-# SCO OSR5 needs to link with libc.so again to have C<fsync> defined
-$self->{LIBS} = ['-lgdbm -lc'];
diff --git a/contrib/perl5/ext/GDBM_File/typemap b/contrib/perl5/ext/GDBM_File/typemap
deleted file mode 100644
index 1dd0630..0000000
--- a/contrib/perl5/ext/GDBM_File/typemap
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-#################################### DBM SECTION
-#
-
-datum_key T_DATUM_K
-datum_value T_DATUM_V
-NDBM_File T_PTROBJ
-GDBM_File T_PTROBJ
-SDBM_File T_PTROBJ
-ODBM_File T_PTROBJ
-DB_File T_PTROBJ
-DBZ_File T_PTROBJ
-FATALFUNC T_OPAQUEPTR
-
-INPUT
-T_DATUM_K
- ckFilter($arg, filter_store_key, \"filter_store_key\");
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
-T_DATUM_V
- ckFilter($arg, filter_store_value, \"filter_store_value\");
- if (SvOK($arg)) {
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
- }
- else {
- $var.dptr = \"\";
- $var.dsize = 0;
- }
-OUTPUT
-T_DATUM_K
- output_datum(aTHX_ $arg, $var.dptr, $var.dsize);
- ckFilter($arg, filter_fetch_key,\"filter_fetch_key\");
-T_DATUM_V
- output_datum(aTHX_ $arg, $var.dptr, $var.dsize);
- ckFilter($arg, filter_fetch_value,\"filter_fetch_value\");
-T_PTROBJ
- sv_setref_pv($arg, dbtype, (void*)$var);
diff --git a/contrib/perl5/ext/IO/ChangeLog b/contrib/perl5/ext/IO/ChangeLog
deleted file mode 100644
index c45e785..0000000
--- a/contrib/perl5/ext/IO/ChangeLog
+++ /dev/null
@@ -1,318 +0,0 @@
-For more recent changes, see the Perl Changes* file(s).
-
-Change 173 on 1998/07/14 by <gbarr@pobox.com> (Graham Barr)
-
- IO::Socket
- - Added method connected
-
- IO.xs
- - Added check that file * is not null
-
- t/io_udp.t
- - Added check for connected
- - Made change to catch recv not returning the address, and added a fix to
- ensure test does not hang
-
- t/io_sock.t
- - Added check for connected.
-
-Change 137 on 1998/05/21 by <gbarr@pobox.com> (Graham Barr)
-
- IO::Socket::INET
- - Added checks to all peer* and host* methods for undef
-
-Change 134 on 1998/05/09 by <gbarr@pobox.com> (Graham Barr)
-
- t/io_sock.t
- - fix race condition on Solaris & SunOS
-
- IO::Handle
- - Applied patch from Gisle Aas <gisle@aas.no> for
- documentation update
- - Applied patch from Kuma <tgy@chocobo.org>
- changed input_line_number to be on a per-handle basis.
-
- IO::File
- - Applied patch from Gisle Aas <gisle@aas.no> for
- documentation update
-
- IO::Seekable
- - Applied patch from Gisle Aas <gisle@aas.no> for
- documentation update
- added sysseek
-
- IO, IO::Socket::INET
- - documentation update
-
- IO.xs
- - Applied patch from Gisle Aas <gisle@aas.no> for
- blocking
-
-Change 133 on 1998/05/09 by <gbarr@pobox.com> (Graham Barr)
-
- t/io_sock.t
- - Added checks for blocking()
-
-Sun Apr 12 1998 <gbarr@pobox.com> (Graham Barr)
-
- IO.xs
- - enclosed newCONSTSUB in #ifdef as _64 now defines it.
-
-Thu Mar 19 1998 <gbarr@pobox.com> (Graham Barr)
-
- All
- - Changed copyright/distribution policy back to be the same as perl
-
-Sun Feb 15 1998 <gbarr@pobox.com> (Graham Barr)
-
- IO::Socket
- - Fix to ->accept, accept() returns false on error not undef.
-
-*** Release 1.19
-
-Thu Feb 5 1998 <gbarr@pobox.com> (Graham Barr)
-
- All
- - change copyright notice
-
- IO::Socket::INET
- - changed configure to accept PeerHost and LocalHost as well as the
- PeerAddr and LocalAddr arguments.
-
-Mon Feb 2 1998 <gbarr@pobox.com> (Graham Barr)
-
- IO::Handle
- - Added printflush so that flush.pl can be depreciated
-
- IO::Socket
- - Remove C<use Config> statement as it was not needed
-
-Tue Jan 27 1998 <gbarr@pobox.com> (Graham Barr)
-
- IO::Socket::INET
- - removed carp if $^W
-
-*** Patch 1.1804
-
-Sat Jan 17 1998 <gbarr@pobox.com> (Graham Barr)
-
- t/io_sock.t
- - Replaced C<Listen => 0> with C<LocalAddr => 'localhost'>
-
- IO/Socket/INET.pm
- - Modified the MultiHomed code. Now each address for a given host has
- a timeout of C<Timeout>.
- - added _get_addr method for doing hostname lookups. Now Net::DNS can be
- use by sub-classing IO::Socket::INET, Thanks Gisle Aas
-
- t/io_multihomed.t
- - new test added. Thanks Gisle Aas.
-
-*** Patch 1.1803
-
-Mon Nov 17 1997 <gbarr@pobox.com> (Graham Barr)
-
- poll.c
- - Added #ifdef I_* tests
-
- IO::Socket
- - Changed initialization of @domain2pkg to fix problem of Domain option
- not working
- - Added patch for multi-homed hosts, Thanks to Gisle Aas <gisle@aas.no>
-
- IO::Socket::INET
- - Change default proto to getprotobyname instead of 'tcp' constant string
- - Added patch for multi-homed hosts, Thanks to Gisle Aas <gisle@aas.no>
-
- t/io_sock.t
- - Change to test fix for Domain problem fixed in IO::Socket and be
- more comprehensive, Thanks to Gisle Aas <gisle@aas.no>
-
- t/io_unix.t
- - New test, Thanks to Gisle Aas <gisle@aas.no>
-
-*** Patch 1.1802
-
-Wed Nov 12 1997 <gbarr@pobox.com> (Graham Barr)
-
- t/io_poll.t
- - test 4 made an assumption that was not portable, fixed.
-
-*** Patch 1.1801
-
-Wed Oct 22 1997 <gbarr@pobox.com> (Graham Barr)
-
- IO.xs
- - change #ifdef's to allow compilation with 5.002
-
- IO::Socket
- - Fix to ensure that socket is not returned as non-blocking
- unless the user asks for it
-
- t/io_udp.t
- - Fix to stop endless loop
-
-*** Release 1.18
-
-Mon Oct 13 1997 <gbarr@pobox.com> (Graham Barr)
-
- IO.xs, IO::Handle
- - 1.17 broke compatability with 5.003, small tweaks to restore
- compatability
-
- t/io_const.t
- - Added new test to ensure backwards compatability with constants
- is not broken
-
-Wed Oct 8 1997 <gbarr@pobox.com> (Graham Barr)
-
- IO.xs
- - Added #define's to cope with argument changes to start_subparse
- from 5.003_22, _23 and _24
-
- IO::Select
- - Renamed has_error to be has_exception which is more correct,
- has_error is a wrapper around has_exception with a warning if
- $^W is set.
-
- Makefile.PL
- - Remove 'linkext' option to WriteMakefile so that static linking
- should work properly, cannot remember why I added it.
-
-Sun Oct 5 1997 <gbarr@pobox.com> (Graham Barr)
-
- IO::Pipe
- - GLOB assignment does not copy the fileno while under -T
- added checks for undefined fileno, and added fdopen
- - reader and write can now be called as static methods
-
- Makefile.PL
- - Attempt to locate <poll.h> and define I_POLL if found
-
-*** Release 1.17
-
-Fri Sep 26 1997 <gbarr@pobox.com> (Graham Barr)
-
- IO.xs
- - Fix bug in _poll for ANSI C compilers
-
- IO::Socket
- - Split IO::Socket::INET and IO::Socket::UNIX into separate files
-
- IO::File
- - Patch to open() for when file is in current directory.
-
-*** Release 1.16
-
-Mon 15 Sep 1997 <gbarr@pobox.com> Graham Barr
-
- o New modules
- - IO::Dir
- - IO::Poll
-
- o IO::Socket
- - Changed new to call autoflush on the new socket
- - IO::Socket::INET->new now accepts a single argument
- - IO::Socket::INET default to protocol 'tcp'
-
- o IO::File
- - Added doc for new_tmpfile
-
- o IO::Handle
- - Removed use of AutoLoader for constants, constants are
- now defined as constant XS subs
- - Added fsync, but will not be avaliable for use
- unless HAS_FSYNC is defined, perls configure does not define
- this yet.
- - Moved bootstrap of IO.xs to IO.pm. IO::Handle no longer
- contains an AUTOLOAD sub in it's ISA hier
-
- o IO::Seekable
- - Remove clearerr, as it is defined in IO.xs
-
- o IO.xs
- - Patched IO.xs with patch from Chip for setvbuf warning
- - Added XS sub "constant" for backwards compatability
-
- o Misc
- - Fixed IO::Socket::configure, it was not passing $arg to domain
- specific package
- - Changed all $fh variables in IO::Handle to $io and all $fh
- variables in IO::Socket to $sock as Chip suggested
- - Fixed usage messages to be consistant
-
-*** Release 1.15
-
-Sun 19 Jan 1997 <bodg@tiuk.ti.com> Graham Barr
-
- o Updated PODs for IO::Handle and IO::File
- o Modified IO.xs so that DESTROY gets called on IO::File
- objects that were created with IO::File->new_tmpfile
- o Modified the domain2pkg code in IO::Socket so that it
- does not use blessd refs
- o Created a new package IO::Pipe::End so that pipe specific
- stuff can be moved out of IO::Handle.
- o Added Ilya's OS/2 changes to Pipe.pm and io_pipe.t
-
- o These changes happened somtime before the release of 1.15
- - added shutdown to IO::Socket
- - modified connect to not use alarm
- - modified accept and connect to use IO::Select
-
-*** Release 1.14
-
-Tue 24 Dec 1996 <bodg@tiuk.ti.com> Graham Barr
-
- o Updated to patches in perl core dist.
- o Added C<use strict> to all modules
- o Modified t/io_sock.t, hopefully the race condition has gone
- o Added close statements to reader/writer in IO::Pipe
- o IO::Handle::syswrite was calling sysread, fixed :-)
-
-*** Release 1.12
-
-Thu 19 Sep 1996 <bodg@tiuk.ti.com> Graham Barr
-
- o Modified IO.xs so that it will compile with pre perlio version
- of perl (ie pre perl5.003_02)
- o Modified IO::Socket::send so not to pass 4 arguments to send
- if the socket is connected
-
-*** Release 1.10
-
-Mon 11 Sep 1996 <bodg@tiuk.ti.com> Graham Barr
-
- o Fixed a bug in IO::Socket which caused DESTROY to be called
- on a partly initialised connection
- o Changed IO.xs to use Perlio
- o Modified usage message to report correct package
- o Added IO::File::new changes from Chip, to allow PERM to be passed
- o Added sysread and syswrite methods to IO::Handle
- o Updated documentation
- o Fixed a bug in IO::Select that caused a hang if the last handle
- was removed.
- o Added count method to IO::Select
- o Renamed and modified tests so that they can be copied into the
- perl distribution
- o Added fcntl and ioctl methods to IO::Handle
-
-Thu 25 Jul 1996 <bodg@tiuk.ti.com> Graham Barr
-
- o It is now not necessary to call the domain sub-classes of
- IO::Socket. when connect is called it notes the domain.
- Domain specific methods, which are normally non-critical, are
- called via this note-ing.
- o Added methods to IO::Socket to retrieve the domain, type and
- protocol of a given socket
-
-Tue 23 Jul 1996 <bodg@tiuk.ti.com> Graham Barr
-
- o IO::Socket::connect changed how we do timeouts, as it did not work
-
- o IO::Handle::new_from_fd removed method call to _ref_fd, which was
- a leftover from FileHandle
-
-Fri 28 Jun 1996 <bodg@tiuk.ti.com> Graham Barr
-
- o Modified IO::Socket::UNIX::configure to default to using a socket
- type of SOCK_STREAM if no type is specified.
diff --git a/contrib/perl5/ext/IO/IO.pm b/contrib/perl5/ext/IO/IO.pm
deleted file mode 100644
index 0087530..0000000
--- a/contrib/perl5/ext/IO/IO.pm
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-
-package IO;
-
-use XSLoader ();
-use Carp;
-
-$VERSION = "1.20";
-XSLoader::load 'IO', $VERSION;
-
-sub import {
- shift;
- my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir);
-
- eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l)
- or croak $@;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-IO - load various IO modules
-
-=head1 SYNOPSIS
-
- use IO;
-
-=head1 DESCRIPTION
-
-C<IO> provides a simple mechanism to load some of the IO modules at one go.
-Currently this includes:
-
- IO::Handle
- IO::Seekable
- IO::File
- IO::Pipe
- IO::Socket
- IO::Dir
-
-For more information on any of these modules, please see its respective
-documentation.
-
-=cut
-
diff --git a/contrib/perl5/ext/IO/IO.xs b/contrib/perl5/ext/IO/IO.xs
deleted file mode 100644
index 38acf41..0000000
--- a/contrib/perl5/ext/IO/IO.xs
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
- * This program is free software; you can redistribute it and/or
- * modify it under the same terms as Perl itself.
- */
-
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#define PERLIO_NOT_STDIO 1
-#include "perl.h"
-#include "XSUB.h"
-#include "poll.h"
-#ifdef I_UNISTD
-# include <unistd.h>
-#endif
-#if defined(I_FCNTL) || defined(HAS_FCNTL)
-# include <fcntl.h>
-#endif
-
-#ifdef PerlIO
-typedef int SysRet;
-typedef PerlIO * InputStream;
-typedef PerlIO * OutputStream;
-#else
-#define PERLIO_IS_STDIO 1
-typedef int SysRet;
-typedef FILE * InputStream;
-typedef FILE * OutputStream;
-#endif
-
-#define MY_start_subparse(fmt,flags) start_subparse(fmt,flags)
-
-#ifndef gv_stashpvn
-#define gv_stashpvn(str,len,flags) gv_stashpv(str,flags)
-#endif
-
-static int
-not_here(char *s)
-{
- croak("%s not implemented on this architecture", s);
- return -1;
-}
-
-
-#ifndef PerlIO
-#define PerlIO_fileno(f) fileno(f)
-#endif
-
-static int
-io_blocking(InputStream f, int block)
-{
- int RETVAL;
- if(!f) {
- errno = EBADF;
- return -1;
- }
-#if defined(HAS_FCNTL)
- RETVAL = fcntl(PerlIO_fileno(f), F_GETFL, 0);
- if (RETVAL >= 0) {
- int mode = RETVAL;
-#ifdef O_NONBLOCK
- /* POSIX style */
-#if defined(O_NDELAY) && O_NDELAY != O_NONBLOCK
- /* Ooops has O_NDELAY too - make sure we don't
- * get SysV behaviour by mistake. */
-
- /* E.g. In UNICOS and UNICOS/mk a F_GETFL returns an O_NDELAY
- * after a successful F_SETFL of an O_NONBLOCK. */
- RETVAL = RETVAL & (O_NONBLOCK | O_NDELAY) ? 0 : 1;
-
- if (block >= 0) {
- if ((mode & O_NDELAY) || ((block == 0) && !(mode & O_NONBLOCK))) {
- int ret;
- mode = (mode & ~O_NDELAY) | O_NONBLOCK;
- ret = fcntl(PerlIO_fileno(f),F_SETFL,mode);
- if(ret < 0)
- RETVAL = ret;
- }
- else
- if ((mode & O_NDELAY) || ((block > 0) && (mode & O_NONBLOCK))) {
- int ret;
- mode &= ~(O_NONBLOCK | O_NDELAY);
- ret = fcntl(PerlIO_fileno(f),F_SETFL,mode);
- if(ret < 0)
- RETVAL = ret;
- }
- }
-#else
- /* Standard POSIX */
- RETVAL = RETVAL & O_NONBLOCK ? 0 : 1;
-
- if ((block == 0) && !(mode & O_NONBLOCK)) {
- int ret;
- mode |= O_NONBLOCK;
- ret = fcntl(PerlIO_fileno(f),F_SETFL,mode);
- if(ret < 0)
- RETVAL = ret;
- }
- else if ((block > 0) && (mode & O_NONBLOCK)) {
- int ret;
- mode &= ~O_NONBLOCK;
- ret = fcntl(PerlIO_fileno(f),F_SETFL,mode);
- if(ret < 0)
- RETVAL = ret;
- }
-#endif
-#else
- /* Not POSIX - better have O_NDELAY or we can't cope.
- * for BSD-ish machines this is an acceptable alternative
- * for SysV we can't tell "would block" from EOF but that is
- * the way SysV is...
- */
- RETVAL = RETVAL & O_NDELAY ? 0 : 1;
-
- if ((block == 0) && !(mode & O_NDELAY)) {
- int ret;
- mode |= O_NDELAY;
- ret = fcntl(PerlIO_fileno(f),F_SETFL,mode);
- if(ret < 0)
- RETVAL = ret;
- }
- else if ((block > 0) && (mode & O_NDELAY)) {
- int ret;
- mode &= ~O_NDELAY;
- ret = fcntl(PerlIO_fileno(f),F_SETFL,mode);
- if(ret < 0)
- RETVAL = ret;
- }
-#endif
- }
- return RETVAL;
-#else
- return -1;
-#endif
-}
-
-MODULE = IO PACKAGE = IO::Seekable PREFIX = f
-
-void
-fgetpos(handle)
- InputStream handle
- CODE:
- if (handle) {
- Fpos_t pos;
- if (
-#ifdef PerlIO
- PerlIO_getpos(handle, &pos)
-#else
- fgetpos(handle, &pos)
-#endif
- ) {
- ST(0) = &PL_sv_undef;
- } else {
- ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
- }
- }
- else {
- ST(0) = &PL_sv_undef;
- errno = EINVAL;
- }
-
-SysRet
-fsetpos(handle, pos)
- InputStream handle
- SV * pos
- CODE:
- char *p;
- STRLEN len;
- if (handle && (p = SvPV(pos,len)) && len == sizeof(Fpos_t))
-#ifdef PerlIO
- RETVAL = PerlIO_setpos(handle, (Fpos_t*)p);
-#else
- RETVAL = fsetpos(handle, (Fpos_t*)p);
-#endif
- else {
- RETVAL = -1;
- errno = EINVAL;
- }
- OUTPUT:
- RETVAL
-
-MODULE = IO PACKAGE = IO::File PREFIX = f
-
-void
-new_tmpfile(packname = "IO::File")
- char * packname
- PREINIT:
- OutputStream fp;
- GV *gv;
- CODE:
-#ifdef PerlIO
- fp = PerlIO_tmpfile();
-#else
- fp = tmpfile();
-#endif
- gv = (GV*)SvREFCNT_inc(newGVgen(packname));
- hv_delete(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), G_DISCARD);
- if (do_open(gv, "+>&", 3, FALSE, 0, 0, fp)) {
- ST(0) = sv_2mortal(newRV((SV*)gv));
- sv_bless(ST(0), gv_stashpv(packname, TRUE));
- SvREFCNT_dec(gv); /* undo increment in newRV() */
- }
- else {
- ST(0) = &PL_sv_undef;
- SvREFCNT_dec(gv);
- }
-
-MODULE = IO PACKAGE = IO::Poll
-
-void
-_poll(timeout,...)
- int timeout;
-PPCODE:
-{
-#ifdef HAS_POLL
- int nfd = (items - 1) / 2;
- SV *tmpsv = NEWSV(999,nfd * sizeof(struct pollfd));
- struct pollfd *fds = (struct pollfd *)SvPVX(tmpsv);
- int i,j,ret;
- for(i=1, j=0 ; j < nfd ; j++) {
- fds[j].fd = SvIV(ST(i));
- i++;
- fds[j].events = SvIV(ST(i));
- i++;
- fds[j].revents = 0;
- }
- if((ret = poll(fds,nfd,timeout)) >= 0) {
- for(i=1, j=0 ; j < nfd ; j++) {
- sv_setiv(ST(i), fds[j].fd); i++;
- sv_setiv(ST(i), fds[j].revents); i++;
- }
- }
- SvREFCNT_dec(tmpsv);
- XSRETURN_IV(ret);
-#else
- not_here("IO::Poll::poll");
-#endif
-}
-
-MODULE = IO PACKAGE = IO::Handle PREFIX = io_
-
-void
-io_blocking(handle,blk=-1)
- InputStream handle
- int blk
-PROTOTYPE: $;$
-CODE:
-{
- int ret = io_blocking(handle, items == 1 ? -1 : blk ? 1 : 0);
- if(ret >= 0)
- XSRETURN_IV(ret);
- else
- XSRETURN_UNDEF;
-}
-
-MODULE = IO PACKAGE = IO::Handle PREFIX = f
-
-
-int
-ungetc(handle, c)
- InputStream handle
- int c
- CODE:
- if (handle)
-#ifdef PerlIO
- RETVAL = PerlIO_ungetc(handle, c);
-#else
- RETVAL = ungetc(c, handle);
-#endif
- else {
- RETVAL = -1;
- errno = EINVAL;
- }
- OUTPUT:
- RETVAL
-
-int
-ferror(handle)
- InputStream handle
- CODE:
- if (handle)
-#ifdef PerlIO
- RETVAL = PerlIO_error(handle);
-#else
- RETVAL = ferror(handle);
-#endif
- else {
- RETVAL = -1;
- errno = EINVAL;
- }
- OUTPUT:
- RETVAL
-
-int
-clearerr(handle)
- InputStream handle
- CODE:
- if (handle) {
-#ifdef PerlIO
- PerlIO_clearerr(handle);
-#else
- clearerr(handle);
-#endif
- RETVAL = 0;
- }
- else {
- RETVAL = -1;
- errno = EINVAL;
- }
- OUTPUT:
- RETVAL
-
-int
-untaint(handle)
- SV * handle
- CODE:
-#ifdef IOf_UNTAINT
- IO * io;
- io = sv_2io(handle);
- if (io) {
- IoFLAGS(io) |= IOf_UNTAINT;
- RETVAL = 0;
- }
- else {
-#endif
- RETVAL = -1;
- errno = EINVAL;
-#ifdef IOf_UNTAINT
- }
-#endif
- OUTPUT:
- RETVAL
-
-SysRet
-fflush(handle)
- OutputStream handle
- CODE:
- if (handle)
-#ifdef PerlIO
- RETVAL = PerlIO_flush(handle);
-#else
- RETVAL = Fflush(handle);
-#endif
- else {
- RETVAL = -1;
- errno = EINVAL;
- }
- OUTPUT:
- RETVAL
-
-void
-setbuf(handle, buf)
- OutputStream handle
- char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
- CODE:
- if (handle)
-#ifdef PERLIO_IS_STDIO
- setbuf(handle, buf);
-#else
- not_here("IO::Handle::setbuf");
-#endif
-
-SysRet
-setvbuf(handle, buf, type, size)
- OutputStream handle
- char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
- int type
- int size
- CODE:
-#if defined(PERLIO_IS_STDIO) && defined(_IOFBF) && defined(HAS_SETVBUF)
- if (!handle) /* Try input stream. */
- handle = IoIFP(sv_2io(ST(0)));
- if (handle)
- RETVAL = setvbuf(handle, buf, type, size);
- else {
- RETVAL = -1;
- errno = EINVAL;
- }
-#else
- RETVAL = (SysRet) not_here("IO::Handle::setvbuf");
-#endif
- OUTPUT:
- RETVAL
-
-
-SysRet
-fsync(handle)
- OutputStream handle
- CODE:
-#ifdef HAS_FSYNC
- if(handle)
- RETVAL = fsync(PerlIO_fileno(handle));
- else {
- RETVAL = -1;
- errno = EINVAL;
- }
-#else
- RETVAL = (SysRet) not_here("IO::Handle::sync");
-#endif
- OUTPUT:
- RETVAL
-
-
-BOOT:
-{
- HV *stash;
- /*
- * constant subs for IO::Poll
- */
- stash = gv_stashpvn("IO::Poll", 8, TRUE);
-#ifdef POLLIN
- newCONSTSUB(stash,"POLLIN",newSViv(POLLIN));
-#endif
-#ifdef POLLPRI
- newCONSTSUB(stash,"POLLPRI", newSViv(POLLPRI));
-#endif
-#ifdef POLLOUT
- newCONSTSUB(stash,"POLLOUT", newSViv(POLLOUT));
-#endif
-#ifdef POLLRDNORM
- newCONSTSUB(stash,"POLLRDNORM", newSViv(POLLRDNORM));
-#endif
-#ifdef POLLWRNORM
- newCONSTSUB(stash,"POLLWRNORM", newSViv(POLLWRNORM));
-#endif
-#ifdef POLLRDBAND
- newCONSTSUB(stash,"POLLRDBAND", newSViv(POLLRDBAND));
-#endif
-#ifdef POLLWRBAND
- newCONSTSUB(stash,"POLLWRBAND", newSViv(POLLWRBAND));
-#endif
-#ifdef POLLNORM
- newCONSTSUB(stash,"POLLNORM", newSViv(POLLNORM));
-#endif
-#ifdef POLLERR
- newCONSTSUB(stash,"POLLERR", newSViv(POLLERR));
-#endif
-#ifdef POLLHUP
- newCONSTSUB(stash,"POLLHUP", newSViv(POLLHUP));
-#endif
-#ifdef POLLNVAL
- newCONSTSUB(stash,"POLLNVAL", newSViv(POLLNVAL));
-#endif
- /*
- * constant subs for IO::Handle
- */
- stash = gv_stashpvn("IO::Handle", 10, TRUE);
-#ifdef _IOFBF
- newCONSTSUB(stash,"_IOFBF", newSViv(_IOFBF));
-#endif
-#ifdef _IOLBF
- newCONSTSUB(stash,"_IOLBF", newSViv(_IOLBF));
-#endif
-#ifdef _IONBF
- newCONSTSUB(stash,"_IONBF", newSViv(_IONBF));
-#endif
-#ifdef SEEK_SET
- newCONSTSUB(stash,"SEEK_SET", newSViv(SEEK_SET));
-#endif
-#ifdef SEEK_CUR
- newCONSTSUB(stash,"SEEK_CUR", newSViv(SEEK_CUR));
-#endif
-#ifdef SEEK_END
- newCONSTSUB(stash,"SEEK_END", newSViv(SEEK_END));
-#endif
-}
diff --git a/contrib/perl5/ext/IO/Makefile.PL b/contrib/perl5/ext/IO/Makefile.PL
deleted file mode 100644
index 095d7c2..0000000
--- a/contrib/perl5/ext/IO/Makefile.PL
+++ /dev/null
@@ -1,9 +0,0 @@
-use ExtUtils::MakeMaker;
-use Config qw(%Config);
-
-WriteMakefile(
- VERSION_FROM => "IO.pm",
- NAME => "IO",
- OBJECT => '$(O_FILES)',
- MAN3PODS => {}, # Pods will be built by installman.
-);
diff --git a/contrib/perl5/ext/IO/README b/contrib/perl5/ext/IO/README
deleted file mode 100644
index 191d550..0000000
--- a/contrib/perl5/ext/IO/README
+++ /dev/null
@@ -1,5 +0,0 @@
-This directory contains files from the IO distribution created by
-Graham Barr. It is currently maintained by the Perl Porters as part
-of the Perl source distribution. If you find that you have to modify
-any files in this directory then please forward them a patch at
-<perl5-porters@perl.org>.
diff --git a/contrib/perl5/ext/IO/lib/IO/Dir.pm b/contrib/perl5/ext/IO/lib/IO/Dir.pm
deleted file mode 100644
index 1fa07ed..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Dir.pm
+++ /dev/null
@@ -1,239 +0,0 @@
-# IO::Dir.pm
-#
-# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IO::Dir;
-
-use 5.003_26;
-
-use strict;
-use Carp;
-use Symbol;
-use Exporter;
-use IO::File;
-our(@ISA, $VERSION, @EXPORT_OK);
-use Tie::Hash;
-use File::stat;
-
-@ISA = qw(Tie::Hash Exporter);
-$VERSION = "1.03";
-@EXPORT_OK = qw(DIR_UNLINK);
-
-sub DIR_UNLINK () { 1 }
-
-sub new {
- @_ >= 1 && @_ <= 2 or croak 'usage: new IO::Dir [DIRNAME]';
- my $class = shift;
- my $dh = gensym;
- if (@_) {
- IO::Dir::open($dh, $_[0])
- or return undef;
- }
- bless $dh, $class;
-}
-
-sub DESTROY {
- my ($dh) = @_;
- closedir($dh);
-}
-
-sub open {
- @_ == 2 or croak 'usage: $dh->open(DIRNAME)';
- my ($dh, $dirname) = @_;
- return undef
- unless opendir($dh, $dirname);
- ${*$dh}{io_dir_path} = $dirname;
- 1;
-}
-
-sub close {
- @_ == 1 or croak 'usage: $dh->close()';
- my ($dh) = @_;
- closedir($dh);
-}
-
-sub read {
- @_ == 1 or croak 'usage: $dh->read()';
- my ($dh) = @_;
- readdir($dh);
-}
-
-sub seek {
- @_ == 2 or croak 'usage: $dh->seek(POS)';
- my ($dh,$pos) = @_;
- seekdir($dh,$pos);
-}
-
-sub tell {
- @_ == 1 or croak 'usage: $dh->tell()';
- my ($dh) = @_;
- telldir($dh);
-}
-
-sub rewind {
- @_ == 1 or croak 'usage: $dh->rewind()';
- my ($dh) = @_;
- rewinddir($dh);
-}
-
-sub TIEHASH {
- my($class,$dir,$options) = @_;
-
- my $dh = $class->new($dir)
- or return undef;
-
- $options ||= 0;
-
- ${*$dh}{io_dir_unlink} = $options & DIR_UNLINK;
- $dh;
-}
-
-sub FIRSTKEY {
- my($dh) = @_;
- $dh->rewind;
- scalar $dh->read;
-}
-
-sub NEXTKEY {
- my($dh) = @_;
- scalar $dh->read;
-}
-
-sub EXISTS {
- my($dh,$key) = @_;
- -e ${*$dh}{io_dir_path} . "/" . $key;
-}
-
-sub FETCH {
- my($dh,$key) = @_;
- &lstat(${*$dh}{io_dir_path} . "/" . $key);
-}
-
-sub STORE {
- my($dh,$key,$data) = @_;
- my($atime,$mtime) = ref($data) ? @$data : ($data,$data);
- my $file = ${*$dh}{io_dir_path} . "/" . $key;
- unless(-e $file) {
- my $io = IO::File->new($file,O_CREAT | O_RDWR);
- $io->close if $io;
- }
- utime($atime,$mtime, $file);
-}
-
-sub DELETE {
- my($dh,$key) = @_;
- # Only unlink if unlink-ing is enabled
- my $file = ${*$dh}{io_dir_path} . "/" . $key;
-
- return 0
- unless ${*$dh}{io_dir_unlink};
-
- -d $file
- ? rmdir($file)
- : unlink($file);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-IO::Dir - supply object methods for directory handles
-
-=head1 SYNOPSIS
-
- use IO::Dir;
- $d = new IO::Dir ".";
- if (defined $d) {
- while (defined($_ = $d->read)) { something($_); }
- $d->rewind;
- while (defined($_ = $d->read)) { something_else($_); }
- undef $d;
- }
-
- tie %dir, IO::Dir, ".";
- foreach (keys %dir) {
- print $_, " " , $dir{$_}->size,"\n";
- }
-
-=head1 DESCRIPTION
-
-The C<IO::Dir> package provides two interfaces to perl's directory reading
-routines.
-
-The first interface is an object approach. C<IO::Dir> provides an object
-constructor and methods, which are just wrappers around perl's built in
-directory reading routines.
-
-=over 4
-
-=item new ( [ DIRNAME ] )
-
-C<new> is the constuctor for C<IO::Dir> objects. It accepts one optional
-argument which, if given, C<new> will pass to C<open>
-
-=back
-
-The following methods are wrappers for the directory related functions built
-into perl (the trailing `dir' has been removed from the names). See L<perlfunc>
-for details of these functions.
-
-=over 4
-
-=item open ( DIRNAME )
-
-=item read ()
-
-=item seek ( POS )
-
-=item tell ()
-
-=item rewind ()
-
-=item close ()
-
-=back
-
-C<IO::Dir> also provides a interface to reading directories via a tied
-HASH. The tied HASH extends the interface beyond just the directory
-reading routines by the use of C<lstat>, from the C<File::stat> package,
-C<unlink>, C<rmdir> and C<utime>.
-
-=over 4
-
-=item tie %hash, IO::Dir, DIRNAME [, OPTIONS ]
-
-=back
-
-The keys of the HASH will be the names of the entries in the directory.
-Reading a value from the hash will be the result of calling
-C<File::stat::lstat>. Deleting an element from the hash will call C<unlink>
-providing that C<DIR_UNLINK> is passed in the C<OPTIONS>.
-
-Assigning to an entry in the HASH will cause the time stamps of the file
-to be modified. If the file does not exist then it will be created. Assigning
-a single integer to a HASH element will cause both the access and
-modification times to be changed to that value. Alternatively a reference to
-an array of two values can be passed. The first array element will be used to
-set the access time and the second element will be used to set the modification
-time.
-
-=head1 SEE ALSO
-
-L<File::stat>
-
-=head1 AUTHOR
-
-Graham Barr. Currently maintained by the Perl Porters. Please report all
-bugs to <perl5-porters@perl.org>.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
diff --git a/contrib/perl5/ext/IO/lib/IO/File.pm b/contrib/perl5/ext/IO/lib/IO/File.pm
deleted file mode 100644
index 569c280..0000000
--- a/contrib/perl5/ext/IO/lib/IO/File.pm
+++ /dev/null
@@ -1,169 +0,0 @@
-#
-
-package IO::File;
-
-=head1 NAME
-
-IO::File - supply object methods for filehandles
-
-=head1 SYNOPSIS
-
- use IO::File;
-
- $fh = new IO::File;
- if ($fh->open("< file")) {
- print <$fh>;
- $fh->close;
- }
-
- $fh = new IO::File "> file";
- if (defined $fh) {
- print $fh "bar\n";
- $fh->close;
- }
-
- $fh = new IO::File "file", "r";
- if (defined $fh) {
- print <$fh>;
- undef $fh; # automatically closes the file
- }
-
- $fh = new IO::File "file", O_WRONLY|O_APPEND;
- if (defined $fh) {
- print $fh "corge\n";
-
- $pos = $fh->getpos;
- $fh->setpos($pos);
-
- undef $fh; # automatically closes the file
- }
-
- autoflush STDOUT 1;
-
-=head1 DESCRIPTION
-
-C<IO::File> inherits from C<IO::Handle> and C<IO::Seekable>. It extends
-these classes with methods that are specific to file handles.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( FILENAME [,MODE [,PERMS]] )
-
-Creates a C<IO::File>. If it receives any parameters, they are passed to
-the method C<open>; if the open fails, the object is destroyed. Otherwise,
-it is returned to the caller.
-
-=item new_tmpfile
-
-Creates an C<IO::File> opened for read/write on a newly created temporary
-file. On systems where this is possible, the temporary file is anonymous
-(i.e. it is unlinked after creation, but held open). If the temporary
-file cannot be created or opened, the C<IO::File> object is destroyed.
-Otherwise, it is returned to the caller.
-
-=back
-
-=head1 METHODS
-
-=over 4
-
-=item open( FILENAME [,MODE [,PERMS]] )
-
-C<open> accepts one, two or three parameters. With one parameter,
-it is just a front end for the built-in C<open> function. With two or three
-parameters, the first parameter is a filename that may include
-whitespace or other special characters, and the second parameter is
-the open mode, optionally followed by a file permission value.
-
-If C<IO::File::open> receives a Perl mode string ("E<gt>", "+E<lt>", etc.)
-or a ANSI C fopen() mode string ("w", "r+", etc.), it uses the basic
-Perl C<open> operator (but protects any special characters).
-
-If C<IO::File::open> is given a numeric mode, it passes that mode
-and the optional permissions value to the Perl C<sysopen> operator.
-The permissions default to 0666.
-
-For convenience, C<IO::File> exports the O_XXX constants from the
-Fcntl module, if this module is available.
-
-=back
-
-=head1 SEE ALSO
-
-L<perlfunc>,
-L<perlop/"I/O Operators">,
-L<IO::Handle>
-L<IO::Seekable>
-
-=head1 HISTORY
-
-Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>.
-
-=cut
-
-require 5.005_64;
-use strict;
-our($VERSION, @EXPORT, @EXPORT_OK, @ISA);
-use Carp;
-use Symbol;
-use SelectSaver;
-use IO::Seekable;
-use File::Spec;
-
-require Exporter;
-
-@ISA = qw(IO::Handle IO::Seekable Exporter);
-
-$VERSION = "1.08";
-
-@EXPORT = @IO::Seekable::EXPORT;
-
-eval {
- # Make all Fcntl O_XXX constants available for importing
- require Fcntl;
- my @O = grep /^O_/, @Fcntl::EXPORT;
- Fcntl->import(@O); # first we import what we want to export
- push(@EXPORT, @O);
-};
-
-################################################
-## Constructor
-##
-
-sub new {
- my $type = shift;
- my $class = ref($type) || $type || "IO::File";
- @_ >= 0 && @_ <= 3
- or croak "usage: new $class [FILENAME [,MODE [,PERMS]]]";
- my $fh = $class->SUPER::new();
- if (@_) {
- $fh->open(@_)
- or return undef;
- }
- $fh;
-}
-
-################################################
-## Open
-##
-
-sub open {
- @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
- my ($fh, $file) = @_;
- if (@_ > 2) {
- my ($mode, $perms) = @_[2, 3];
- if ($mode =~ /^\d+$/) {
- defined $perms or $perms = 0666;
- return sysopen($fh, $file, $mode, $perms);
- }
- if (! File::Spec->file_name_is_absolute($file)) {
- $file = File::Spec->catfile(File::Spec->curdir(),$file);
- }
- $file = IO::Handle::_open_mode_string($mode) . " $file\0";
- }
- open($fh, $file);
-}
-
-1;
diff --git a/contrib/perl5/ext/IO/lib/IO/Handle.pm b/contrib/perl5/ext/IO/lib/IO/Handle.pm
deleted file mode 100644
index fb754a6..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Handle.pm
+++ /dev/null
@@ -1,612 +0,0 @@
-
-package IO::Handle;
-
-=head1 NAME
-
-IO::Handle - supply object methods for I/O handles
-
-=head1 SYNOPSIS
-
- use IO::Handle;
-
- $io = new IO::Handle;
- if ($io->fdopen(fileno(STDIN),"r")) {
- print $io->getline;
- $io->close;
- }
-
- $io = new IO::Handle;
- if ($io->fdopen(fileno(STDOUT),"w")) {
- $io->print("Some text\n");
- }
-
- use IO::Handle '_IOLBF';
- $io->setvbuf($buffer_var, _IOLBF, 1024);
-
- undef $io; # automatically closes the file if it's open
-
- autoflush STDOUT 1;
-
-=head1 DESCRIPTION
-
-C<IO::Handle> is the base class for all other IO handle classes. It is
-not intended that objects of C<IO::Handle> would be created directly,
-but instead C<IO::Handle> is inherited from by several other classes
-in the IO hierarchy.
-
-If you are reading this documentation, looking for a replacement for
-the C<FileHandle> package, then I suggest you read the documentation
-for C<IO::File> too.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ()
-
-Creates a new C<IO::Handle> object.
-
-=item new_from_fd ( FD, MODE )
-
-Creates a C<IO::Handle> like C<new> does.
-It requires two parameters, which are passed to the method C<fdopen>;
-if the fdopen fails, the object is destroyed. Otherwise, it is returned
-to the caller.
-
-=back
-
-=head1 METHODS
-
-See L<perlfunc> for complete descriptions of each of the following
-supported C<IO::Handle> methods, which are just front ends for the
-corresponding built-in functions:
-
- $io->close
- $io->eof
- $io->fileno
- $io->format_write( [FORMAT_NAME] )
- $io->getc
- $io->read ( BUF, LEN, [OFFSET] )
- $io->print ( ARGS )
- $io->printf ( FMT, [ARGS] )
- $io->stat
- $io->sysread ( BUF, LEN, [OFFSET] )
- $io->syswrite ( BUF, [LEN, [OFFSET]] )
- $io->truncate ( LEN )
-
-See L<perlvar> for complete descriptions of each of the following
-supported C<IO::Handle> methods. All of them return the previous
-value of the attribute and takes an optional single argument that when
-given will set the value. If no argument is given the previous value
-is unchanged (except for $io->autoflush will actually turn ON
-autoflush by default).
-
- $io->autoflush ( [BOOL] ) $|
- $io->format_page_number( [NUM] ) $%
- $io->format_lines_per_page( [NUM] ) $=
- $io->format_lines_left( [NUM] ) $-
- $io->format_name( [STR] ) $~
- $io->format_top_name( [STR] ) $^
- $io->input_line_number( [NUM]) $.
-
-The following methods are not supported on a per-filehandle basis.
-
- IO::Handle->format_line_break_characters( [STR] ) $:
- IO::Handle->format_formfeed( [STR]) $^L
- IO::Handle->output_field_separator( [STR] ) $,
- IO::Handle->output_record_separator( [STR] ) $\
-
- IO::Handle->input_record_separator( [STR] ) $/
-
-Furthermore, for doing normal I/O you might need these:
-
-=over
-
-=item $io->fdopen ( FD, MODE )
-
-C<fdopen> is like an ordinary C<open> except that its first parameter
-is not a filename but rather a file handle name, a IO::Handle object,
-or a file descriptor number.
-
-=item $io->opened
-
-Returns true if the object is currently a valid file descriptor, false
-otherwise.
-
-=item $io->getline
-
-This works like <$io> described in L<perlop/"I/O Operators">
-except that it's more readable and can be safely called in a
-list context but still returns just one line.
-
-=item $io->getlines
-
-This works like <$io> when called in a list context to read all
-the remaining lines in a file, except that it's more readable.
-It will also croak() if accidentally called in a scalar context.
-
-=item $io->ungetc ( ORD )
-
-Pushes a character with the given ordinal value back onto the given
-handle's input stream. Only one character of pushback per handle is
-guaranteed.
-
-=item $io->write ( BUF, LEN [, OFFSET ] )
-
-This C<write> is like C<write> found in C, that is it is the
-opposite of read. The wrapper for the perl C<write> function is
-called C<format_write>.
-
-=item $io->error
-
-Returns a true value if the given handle has experienced any errors
-since it was opened or since the last call to C<clearerr>, or if the
-handle is invalid. It only returns false for a valid handle with no
-outstanding errors.
-
-=item $io->clearerr
-
-Clear the given handle's error indicator. Returns -1 if the handle is
-invalid, 0 otherwise.
-
-=item $io->sync
-
-C<sync> synchronizes a file's in-memory state with that on the
-physical medium. C<sync> does not operate at the perlio api level, but
-operates on the file descriptor (similar to sysread, sysseek and
-systell). This means that any data held at the perlio api level will not
-be synchronized. To synchronize data that is buffered at the perlio api
-level you must use the flush method. C<sync> is not implemented on all
-platforms. Returns "0 but true" on success, C<undef> on error, C<undef>
-for an invalid handle. See L<fsync(3c)>.
-
-=item $io->flush
-
-C<flush> causes perl to flush any buffered data at the perlio api level.
-Any unread data in the buffer will be discarded, and any unwritten data
-will be written to the underlying file descriptor. Returns "0 but true"
-on success, C<undef> on error.
-
-=item $io->printflush ( ARGS )
-
-Turns on autoflush, print ARGS and then restores the autoflush status of the
-C<IO::Handle> object. Returns the return value from print.
-
-=item $io->blocking ( [ BOOL ] )
-
-If called with an argument C<blocking> will turn on non-blocking IO if
-C<BOOL> is false, and turn it off if C<BOOL> is true.
-
-C<blocking> will return the value of the previous setting, or the
-current setting if C<BOOL> is not given.
-
-If an error occurs C<blocking> will return undef and C<$!> will be set.
-
-=back
-
-
-If the C functions setbuf() and/or setvbuf() are available, then
-C<IO::Handle::setbuf> and C<IO::Handle::setvbuf> set the buffering
-policy for an IO::Handle. The calling sequences for the Perl functions
-are the same as their C counterparts--including the constants C<_IOFBF>,
-C<_IOLBF>, and C<_IONBF> for setvbuf()--except that the buffer parameter
-specifies a scalar variable to use as a buffer. You should only
-change the buffer before any I/O, or immediately after calling flush.
-
-WARNING: A variable used as a buffer by C<setbuf> or C<setvbuf> B<must not
-be modified> in any way until the IO::Handle is closed or C<setbuf> or
-C<setvbuf> is called again, or memory corruption may result! Remember that
-the order of global destruction is undefined, so even if your buffer
-variable remains in scope until program termination, it may be undefined
-before the file IO::Handle is closed. Note that you need to import the
-constants C<_IOFBF>, C<_IOLBF>, and C<_IONBF> explicitly. Like C, setbuf
-returns nothing. setvbuf returns "0 but true", on success, C<undef> on
-failure.
-
-Lastly, there is a special method for working under B<-T> and setuid/gid
-scripts:
-
-=over
-
-=item $io->untaint
-
-Marks the object as taint-clean, and as such data read from it will also
-be considered taint-clean. Note that this is a very trusting action to
-take, and appropriate consideration for the data source and potential
-vulnerability should be kept in mind. Returns 0 on success, -1 if setting
-the taint-clean flag failed. (eg invalid handle)
-
-=back
-
-=head1 NOTE
-
-A C<IO::Handle> object is a reference to a symbol/GLOB reference (see
-the C<Symbol> package). Some modules that
-inherit from C<IO::Handle> may want to keep object related variables
-in the hash table part of the GLOB. In an attempt to prevent modules
-trampling on each other I propose the that any such module should prefix
-its variables with its own name separated by _'s. For example the IO::Socket
-module keeps a C<timeout> variable in 'io_socket_timeout'.
-
-=head1 SEE ALSO
-
-L<perlfunc>,
-L<perlop/"I/O Operators">,
-L<IO::File>
-
-=head1 BUGS
-
-Due to backwards compatibility, all filehandles resemble objects
-of class C<IO::Handle>, or actually classes derived from that class.
-They actually aren't. Which means you can't derive your own
-class from C<IO::Handle> and inherit those methods.
-
-=head1 HISTORY
-
-Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
-
-=cut
-
-require 5.005_64;
-use strict;
-our($VERSION, @EXPORT_OK, @ISA);
-use Carp;
-use Symbol;
-use SelectSaver;
-use IO (); # Load the XS module
-
-require Exporter;
-@ISA = qw(Exporter);
-
-$VERSION = "1.21";
-
-@EXPORT_OK = qw(
- autoflush
- output_field_separator
- output_record_separator
- input_record_separator
- input_line_number
- format_page_number
- format_lines_per_page
- format_lines_left
- format_name
- format_top_name
- format_line_break_characters
- format_formfeed
- format_write
-
- print
- printf
- getline
- getlines
-
- printflush
- flush
-
- SEEK_SET
- SEEK_CUR
- SEEK_END
- _IOFBF
- _IOLBF
- _IONBF
-);
-
-################################################
-## Constructors, destructors.
-##
-
-sub new {
- my $class = ref($_[0]) || $_[0] || "IO::Handle";
- @_ == 1 or croak "usage: new $class";
- my $io = gensym;
- bless $io, $class;
-}
-
-sub new_from_fd {
- my $class = ref($_[0]) || $_[0] || "IO::Handle";
- @_ == 3 or croak "usage: new_from_fd $class FD, MODE";
- my $io = gensym;
- shift;
- IO::Handle::fdopen($io, @_)
- or return undef;
- bless $io, $class;
-}
-
-#
-# There is no need for DESTROY to do anything, because when the
-# last reference to an IO object is gone, Perl automatically
-# closes its associated files (if any). However, to avoid any
-# attempts to autoload DESTROY, we here define it to do nothing.
-#
-sub DESTROY {}
-
-
-################################################
-## Open and close.
-##
-
-sub _open_mode_string {
- my ($mode) = @_;
- $mode =~ /^\+?(<|>>?)$/
- or $mode =~ s/^r(\+?)$/$1</
- or $mode =~ s/^w(\+?)$/$1>/
- or $mode =~ s/^a(\+?)$/$1>>/
- or croak "IO::Handle: bad open mode: $mode";
- $mode;
-}
-
-sub fdopen {
- @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
- my ($io, $fd, $mode) = @_;
- local(*GLOB);
-
- if (ref($fd) && "".$fd =~ /GLOB\(/o) {
- # It's a glob reference; Alias it as we cannot get name of anon GLOBs
- my $n = qualify(*GLOB);
- *GLOB = *{*$fd};
- $fd = $n;
- } elsif ($fd =~ m#^\d+$#) {
- # It's an FD number; prefix with "=".
- $fd = "=$fd";
- }
-
- open($io, _open_mode_string($mode) . '&' . $fd)
- ? $io : undef;
-}
-
-sub close {
- @_ == 1 or croak 'usage: $io->close()';
- my($io) = @_;
-
- close($io);
-}
-
-################################################
-## Normal I/O functions.
-##
-
-# flock
-# select
-
-sub opened {
- @_ == 1 or croak 'usage: $io->opened()';
- defined fileno($_[0]);
-}
-
-sub fileno {
- @_ == 1 or croak 'usage: $io->fileno()';
- fileno($_[0]);
-}
-
-sub getc {
- @_ == 1 or croak 'usage: $io->getc()';
- getc($_[0]);
-}
-
-sub eof {
- @_ == 1 or croak 'usage: $io->eof()';
- eof($_[0]);
-}
-
-sub print {
- @_ or croak 'usage: $io->print(ARGS)';
- my $this = shift;
- print $this @_;
-}
-
-sub printf {
- @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
- my $this = shift;
- printf $this @_;
-}
-
-sub getline {
- @_ == 1 or croak 'usage: $io->getline()';
- my $this = shift;
- return scalar <$this>;
-}
-
-*gets = \&getline; # deprecated
-
-sub getlines {
- @_ == 1 or croak 'usage: $io->getlines()';
- wantarray or
- croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
- my $this = shift;
- return <$this>;
-}
-
-sub truncate {
- @_ == 2 or croak 'usage: $io->truncate(LEN)';
- truncate($_[0], $_[1]);
-}
-
-sub read {
- @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
- read($_[0], $_[1], $_[2], $_[3] || 0);
-}
-
-sub sysread {
- @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
- sysread($_[0], $_[1], $_[2], $_[3] || 0);
-}
-
-sub write {
- @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
- local($\) = "";
- $_[2] = length($_[1]) unless defined $_[2];
- print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
-}
-
-sub syswrite {
- @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
- if (defined($_[2])) {
- syswrite($_[0], $_[1], $_[2], $_[3] || 0);
- } else {
- syswrite($_[0], $_[1]);
- }
-}
-
-sub stat {
- @_ == 1 or croak 'usage: $io->stat()';
- stat($_[0]);
-}
-
-################################################
-## State modification functions.
-##
-
-sub autoflush {
- my $old = new SelectSaver qualify($_[0], caller);
- my $prev = $|;
- $| = @_ > 1 ? $_[1] : 1;
- $prev;
-}
-
-sub output_field_separator {
- carp "output_field_separator is not supported on a per-handle basis"
- if ref($_[0]);
- my $prev = $,;
- $, = $_[1] if @_ > 1;
- $prev;
-}
-
-sub output_record_separator {
- carp "output_record_separator is not supported on a per-handle basis"
- if ref($_[0]);
- my $prev = $\;
- $\ = $_[1] if @_ > 1;
- $prev;
-}
-
-sub input_record_separator {
- carp "input_record_separator is not supported on a per-handle basis"
- if ref($_[0]);
- my $prev = $/;
- $/ = $_[1] if @_ > 1;
- $prev;
-}
-
-sub input_line_number {
- local $.;
- my $tell = tell qualify($_[0], caller) if ref($_[0]);
- my $prev = $.;
- $. = $_[1] if @_ > 1;
- $prev;
-}
-
-sub format_page_number {
- my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
- my $prev = $%;
- $% = $_[1] if @_ > 1;
- $prev;
-}
-
-sub format_lines_per_page {
- my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
- my $prev = $=;
- $= = $_[1] if @_ > 1;
- $prev;
-}
-
-sub format_lines_left {
- my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
- my $prev = $-;
- $- = $_[1] if @_ > 1;
- $prev;
-}
-
-sub format_name {
- my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
- my $prev = $~;
- $~ = qualify($_[1], caller) if @_ > 1;
- $prev;
-}
-
-sub format_top_name {
- my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
- my $prev = $^;
- $^ = qualify($_[1], caller) if @_ > 1;
- $prev;
-}
-
-sub format_line_break_characters {
- carp "format_line_break_characters is not supported on a per-handle basis"
- if ref($_[0]);
- my $prev = $:;
- $: = $_[1] if @_ > 1;
- $prev;
-}
-
-sub format_formfeed {
- carp "format_formfeed is not supported on a per-handle basis"
- if ref($_[0]);
- my $prev = $^L;
- $^L = $_[1] if @_ > 1;
- $prev;
-}
-
-sub formline {
- my $io = shift;
- my $picture = shift;
- local($^A) = $^A;
- local($\) = "";
- formline($picture, @_);
- print $io $^A;
-}
-
-sub format_write {
- @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
- if (@_ == 2) {
- my ($io, $fmt) = @_;
- my $oldfmt = $io->format_name($fmt);
- CORE::write($io);
- $io->format_name($oldfmt);
- } else {
- CORE::write($_[0]);
- }
-}
-
-# XXX undocumented
-sub fcntl {
- @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
- my ($io, $op) = @_;
- return fcntl($io, $op, $_[2]);
-}
-
-# XXX undocumented
-sub ioctl {
- @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
- my ($io, $op) = @_;
- return ioctl($io, $op, $_[2]);
-}
-
-# this sub is for compatability with older releases of IO that used
-# a sub called constant to detemine if a constant existed -- GMB
-#
-# The SEEK_* and _IO?BF constants were the only constants at that time
-# any new code should just chech defined(&CONSTANT_NAME)
-
-sub constant {
- no strict 'refs';
- my $name = shift;
- (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
- ? &{$name}() : undef;
-}
-
-
-# so that flush.pl can be depriciated
-
-sub printflush {
- my $io = shift;
- my $old = new SelectSaver qualify($io, caller) if ref($io);
- local $| = 1;
- if(ref($io)) {
- print $io @_;
- }
- else {
- print @_;
- }
-}
-
-1;
diff --git a/contrib/perl5/ext/IO/lib/IO/Pipe.pm b/contrib/perl5/ext/IO/lib/IO/Pipe.pm
deleted file mode 100644
index 27b5ad0..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Pipe.pm
+++ /dev/null
@@ -1,252 +0,0 @@
-# IO::Pipe.pm
-#
-# Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IO::Pipe;
-
-require 5.005_64;
-
-use IO::Handle;
-use strict;
-our($VERSION);
-use Carp;
-use Symbol;
-
-$VERSION = "1.121";
-
-sub new {
- my $type = shift;
- my $class = ref($type) || $type || "IO::Pipe";
- @_ == 0 || @_ == 2 or croak "usage: new $class [READFH, WRITEFH]";
-
- my $me = bless gensym(), $class;
-
- my($readfh,$writefh) = @_ ? @_ : $me->handles;
-
- pipe($readfh, $writefh)
- or return undef;
-
- @{*$me} = ($readfh, $writefh);
-
- $me;
-}
-
-sub handles {
- @_ == 1 or croak 'usage: $pipe->handles()';
- (IO::Pipe::End->new(), IO::Pipe::End->new());
-}
-
-my $do_spawn = $^O eq 'os2';
-
-sub _doit {
- my $me = shift;
- my $rw = shift;
-
- my $pid = $do_spawn ? 0 : fork();
-
- if($pid) { # Parent
- return $pid;
- }
- elsif(defined $pid) { # Child or spawn
- my $fh;
- my $io = $rw ? \*STDIN : \*STDOUT;
- my ($mode, $save) = $rw ? "r" : "w";
- if ($do_spawn) {
- require Fcntl;
- $save = IO::Handle->new_from_fd($io, $mode);
- # Close in child:
- fcntl(shift, Fcntl::F_SETFD(), 1) or croak "fcntl: $!";
- $fh = $rw ? ${*$me}[0] : ${*$me}[1];
- } else {
- shift;
- $fh = $rw ? $me->reader() : $me->writer(); # close the other end
- }
- bless $io, "IO::Handle";
- $io->fdopen($fh, $mode);
- $fh->close;
-
- if ($do_spawn) {
- $pid = eval { system 1, @_ }; # 1 == P_NOWAIT
- my $err = $!;
-
- $io->fdopen($save, $mode);
- $save->close or croak "Cannot close $!";
- croak "IO::Pipe: Cannot spawn-NOWAIT: $err" if not $pid or $pid < 0;
- return $pid;
- } else {
- exec @_ or
- croak "IO::Pipe: Cannot exec: $!";
- }
- }
- else {
- croak "IO::Pipe: Cannot fork: $!";
- }
-
- # NOT Reached
-}
-
-sub reader {
- @_ >= 1 or croak 'usage: $pipe->reader( [SUB_COMMAND_ARGS] )';
- my $me = shift;
-
- return undef
- unless(ref($me) || ref($me = $me->new));
-
- my $fh = ${*$me}[0];
- my $pid = $me->_doit(0, $fh, @_)
- if(@_);
-
- close ${*$me}[1];
- bless $me, ref($fh);
- *$me = *$fh; # Alias self to handle
- $me->fdopen($fh->fileno,"r")
- unless defined($me->fileno);
- bless $fh; # Really wan't un-bless here
- ${*$me}{'io_pipe_pid'} = $pid
- if defined $pid;
-
- $me;
-}
-
-sub writer {
- @_ >= 1 or croak 'usage: $pipe->writer( [SUB_COMMAND_ARGS] )';
- my $me = shift;
-
- return undef
- unless(ref($me) || ref($me = $me->new));
-
- my $fh = ${*$me}[1];
- my $pid = $me->_doit(1, $fh, @_)
- if(@_);
-
- close ${*$me}[0];
- bless $me, ref($fh);
- *$me = *$fh; # Alias self to handle
- $me->fdopen($fh->fileno,"w")
- unless defined($me->fileno);
- bless $fh; # Really wan't un-bless here
- ${*$me}{'io_pipe_pid'} = $pid
- if defined $pid;
-
- $me;
-}
-
-package IO::Pipe::End;
-
-our(@ISA);
-
-@ISA = qw(IO::Handle);
-
-sub close {
- my $fh = shift;
- my $r = $fh->SUPER::close(@_);
-
- waitpid(${*$fh}{'io_pipe_pid'},0)
- if(defined ${*$fh}{'io_pipe_pid'});
-
- $r;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-IO::Pipe - supply object methods for pipes
-
-=head1 SYNOPSIS
-
- use IO::Pipe;
-
- $pipe = new IO::Pipe;
-
- if($pid = fork()) { # Parent
- $pipe->reader();
-
- while(<$pipe> {
- ....
- }
-
- }
- elsif(defined $pid) { # Child
- $pipe->writer();
-
- print $pipe ....
- }
-
- or
-
- $pipe = new IO::Pipe;
-
- $pipe->reader(qw(ls -l));
-
- while(<$pipe>) {
- ....
- }
-
-=head1 DESCRIPTION
-
-C<IO::Pipe> provides an interface to creating pipes between
-processes.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [READER, WRITER] )
-
-Creates a C<IO::Pipe>, which is a reference to a newly created symbol
-(see the C<Symbol> package). C<IO::Pipe::new> optionally takes two
-arguments, which should be objects blessed into C<IO::Handle>, or a
-subclass thereof. These two objects will be used for the system call
-to C<pipe>. If no arguments are given then method C<handles> is called
-on the new C<IO::Pipe> object.
-
-These two handles are held in the array part of the GLOB until either
-C<reader> or C<writer> is called.
-
-=back
-
-=head1 METHODS
-
-=over 4
-
-=item reader ([ARGS])
-
-The object is re-blessed into a sub-class of C<IO::Handle>, and becomes a
-handle at the reading end of the pipe. If C<ARGS> are given then C<fork>
-is called and C<ARGS> are passed to exec.
-
-=item writer ([ARGS])
-
-The object is re-blessed into a sub-class of C<IO::Handle>, and becomes a
-handle at the writing end of the pipe. If C<ARGS> are given then C<fork>
-is called and C<ARGS> are passed to exec.
-
-=item handles ()
-
-This method is called during construction by C<IO::Pipe::new>
-on the newly created C<IO::Pipe> object. It returns an array of two objects
-blessed into C<IO::Pipe::End>, or a subclass thereof.
-
-=back
-
-=head1 SEE ALSO
-
-L<IO::Handle>
-
-=head1 AUTHOR
-
-Graham Barr. Currently maintained by the Perl Porters. Please report all
-bugs to <perl5-porters@perl.org>.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
diff --git a/contrib/perl5/ext/IO/lib/IO/Poll.pm b/contrib/perl5/ext/IO/lib/IO/Poll.pm
deleted file mode 100644
index 70a3469..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Poll.pm
+++ /dev/null
@@ -1,204 +0,0 @@
-
-# IO::Poll.pm
-#
-# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IO::Poll;
-
-use strict;
-use IO::Handle;
-use Exporter ();
-our(@ISA, @EXPORT_OK, @EXPORT, $VERSION);
-
-@ISA = qw(Exporter);
-$VERSION = "0.05";
-
-@EXPORT = qw( POLLIN
- POLLOUT
- POLLERR
- POLLHUP
- POLLNVAL
- );
-
-@EXPORT_OK = qw(
- POLLPRI
- POLLRDNORM
- POLLWRNORM
- POLLRDBAND
- POLLWRBAND
- POLLNORM
- );
-
-# [0] maps fd's to requested masks
-# [1] maps fd's to returned masks
-# [2] maps fd's to handles
-sub new {
- my $class = shift;
-
- my $self = bless [{},{},{}], $class;
-
- $self;
-}
-
-sub mask {
- my $self = shift;
- my $io = shift;
- my $fd = fileno($io);
- if (@_) {
- my $mask = shift;
- if($mask) {
- $self->[0]{$fd}{$io} = $mask; # the error events are always returned
- $self->[1]{$fd} = 0; # output mask
- $self->[2]{$io} = $io; # remember handle
- } else {
- delete $self->[0]{$fd}{$io};
- delete $self->[1]{$fd} unless %{$self->[0]{$fd}};
- delete $self->[2]{$io};
- }
- }
-
- return unless exists $self->[0]{$fd} and exists $self->[0]{$fd}{$io};
- return $self->[0]{$fd}{$io};
-}
-
-
-sub poll {
- my($self,$timeout) = @_;
-
- $self->[1] = {};
-
- my($fd,$mask,$iom);
- my @poll = ();
-
- while(($fd,$iom) = each %{$self->[0]}) {
- $mask = 0;
- $mask |= $_ for values(%$iom);
- push(@poll,$fd => $mask);
- }
-
- my $ret = @poll ? _poll(defined($timeout) ? $timeout * 1000 : -1,@poll) : 0;
-
- return $ret
- unless $ret > 0;
-
- while(@poll) {
- my($fd,$got) = splice(@poll,0,2);
- $self->[1]{$fd} = $got if $got;
- }
-
- return $ret;
-}
-
-sub events {
- my $self = shift;
- my $io = shift;
- my $fd = fileno($io);
- exists $self->[1]{$fd} and exists $self->[0]{$fd}{$io}
- ? $self->[1]{$fd} & ($self->[0]{$fd}{$io}|POLLHUP|POLLERR|POLLNVAL)
- : 0;
-}
-
-sub remove {
- my $self = shift;
- my $io = shift;
- $self->mask($io,0);
-}
-
-sub handles {
- my $self = shift;
- return values %{$self->[2]} unless @_;
-
- my $events = shift || 0;
- my($fd,$ev,$io,$mask);
- my @handles = ();
-
- while(($fd,$ev) = each %{$self->[1]}) {
- while (($io,$mask) = each %{$self->[0]{$fd}}) {
- $mask |= POLLHUP|POLLERR|POLLNVAL; # must allow these
- push @handles,$self->[2]{$io} if ($ev & $mask) & $events;
- }
- }
- return @handles;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-IO::Poll - Object interface to system poll call
-
-=head1 SYNOPSIS
-
- use IO::Poll qw(POLLRDNORM POLLWRNORM POLLIN POLLHUP);
-
- $poll = new IO::Poll;
-
- $poll->mask($input_handle => POLLIN);
- $poll->mask($output_handle => POLLOUT);
-
- $poll->poll($timeout);
-
- $ev = $poll->events($input);
-
-=head1 DESCRIPTION
-
-C<IO::Poll> is a simple interface to the system level poll routine.
-
-=head1 METHODS
-
-=over 4
-
-=item mask ( IO [, EVENT_MASK ] )
-
-If EVENT_MASK is given, then, if EVENT_MASK is non-zero, IO is added to the
-list of file descriptors and the next call to poll will check for
-any event specified in EVENT_MASK. If EVENT_MASK is zero then IO will be
-removed from the list of file descriptors.
-
-If EVENT_MASK is not given then the return value will be the current
-event mask value for IO.
-
-=item poll ( [ TIMEOUT ] )
-
-Call the system level poll routine. If TIMEOUT is not specified then the
-call will block. Returns the number of handles which had events
-happen, or -1 on error.
-
-=item events ( IO )
-
-Returns the event mask which represents the events that happend on IO
-during the last call to C<poll>.
-
-=item remove ( IO )
-
-Remove IO from the list of file descriptors for the next poll.
-
-=item handles( [ EVENT_MASK ] )
-
-Returns a list of handles. If EVENT_MASK is not given then a list of all
-handles known will be returned. If EVENT_MASK is given then a list
-of handles will be returned which had one of the events specified by
-EVENT_MASK happen during the last call ti C<poll>
-
-=back
-
-=head1 SEE ALSO
-
-L<poll(2)>, L<IO::Handle>, L<IO::Select>
-
-=head1 AUTHOR
-
-Graham Barr. Currently maintained by the Perl Porters. Please report all
-bugs to <perl5-porters@perl.org>.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
diff --git a/contrib/perl5/ext/IO/lib/IO/Seekable.pm b/contrib/perl5/ext/IO/lib/IO/Seekable.pm
deleted file mode 100644
index 243a971..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Seekable.pm
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-
-package IO::Seekable;
-
-=head1 NAME
-
-IO::Seekable - supply seek based methods for I/O objects
-
-=head1 SYNOPSIS
-
- use IO::Seekable;
- package IO::Something;
- @ISA = qw(IO::Seekable);
-
-=head1 DESCRIPTION
-
-C<IO::Seekable> does not have a constructor of its own as it is intended to
-be inherited by other C<IO::Handle> based objects. It provides methods
-which allow seeking of the file descriptors.
-
-=over 4
-
-=item $io->getpos
-
-Returns an opaque value that represents the current position of the
-IO::File, or C<undef> if this is not possible (eg an unseekable stream such
-as a terminal, pipe or socket). If the fgetpos() function is available in
-your C library it is used to implements getpos, else perl emulates getpos
-using C's ftell() function.
-
-=item $io->setpos
-
-Uses the value of a previous getpos call to return to a previously visited
-position. Returns "0 but true" on success, C<undef> on failure.
-
-=back
-
-See L<perlfunc> for complete descriptions of each of the following
-supported C<IO::Seekable> methods, which are just front ends for the
-corresponding built-in functions:
-
-=over 4
-
-=item $io->setpos ( POS, WHENCE )
-
-Seek the IO::File to position POS, relative to WHENCE:
-
-=over 8
-
-=item WHENCE=0 (SEEK_SET)
-
-POS is absolute position. (Seek relative to the start of the file)
-
-=item WHENCE=1 (SEEK_CUR)
-
-POS is an offset from the current position. (Seek relative to current)
-
-=item WHENCE=1 (SEEK_END)
-
-POS is an offset from the end of the file. (Seek relative to end)
-
-=back
-
-The SEEK_* constants can be imported from the C<Fcntl> module if you
-don't wish to use the numbers C<0> C<1> or C<2> in your code.
-
-Returns C<1> upon success, C<0> otherwise.
-
-=item $io->sysseek( POS, WHENCE )
-
-Similar to $io->seek, but sets the IO::File's position using the system
-call lseek(2) directly, so will confuse most perl IO operators except
-sysread and syswrite (see L<perlfunc> for full details)
-
-Returns the new position, or C<undef> on failure. A position
-of zero is returned as the string C<"0 but true">
-
-=item $io->tell
-
-Returns the IO::File's current position, or -1 on error.
-
-=back
-
-=head1 SEE ALSO
-
-L<perlfunc>,
-L<perlop/"I/O Operators">,
-L<IO::Handle>
-L<IO::File>
-
-=head1 HISTORY
-
-Derived from FileHandle.pm by Graham Barr E<lt>gbarr@pobox.comE<gt>
-
-=cut
-
-require 5.005_64;
-use Carp;
-use strict;
-our($VERSION, @EXPORT, @ISA);
-use IO::Handle ();
-# XXX we can't get these from IO::Handle or we'll get prototype
-# mismatch warnings on C<use POSIX; use IO::File;> :-(
-use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END);
-require Exporter;
-
-@EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END);
-@ISA = qw(Exporter);
-
-$VERSION = "1.08";
-
-sub seek {
- @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)';
- seek($_[0], $_[1], $_[2]);
-}
-
-sub sysseek {
- @_ == 3 or croak 'usage: $io->sysseek(POS, WHENCE)';
- sysseek($_[0], $_[1], $_[2]);
-}
-
-sub tell {
- @_ == 1 or croak 'usage: $io->tell()';
- tell($_[0]);
-}
-
-1;
diff --git a/contrib/perl5/ext/IO/lib/IO/Select.pm b/contrib/perl5/ext/IO/lib/IO/Select.pm
deleted file mode 100644
index 1a3a26f..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Select.pm
+++ /dev/null
@@ -1,381 +0,0 @@
-# IO::Select.pm
-#
-# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IO::Select;
-
-use strict;
-use warnings::register;
-use vars qw($VERSION @ISA);
-require Exporter;
-
-$VERSION = "1.14";
-
-@ISA = qw(Exporter); # This is only so we can do version checking
-
-sub VEC_BITS () {0}
-sub FD_COUNT () {1}
-sub FIRST_FD () {2}
-
-sub new
-{
- my $self = shift;
- my $type = ref($self) || $self;
-
- my $vec = bless [undef,0], $type;
-
- $vec->add(@_)
- if @_;
-
- $vec;
-}
-
-sub add
-{
- shift->_update('add', @_);
-}
-
-
-sub remove
-{
- shift->_update('remove', @_);
-}
-
-
-sub exists
-{
- my $vec = shift;
- my $fno = $vec->_fileno(shift);
- return undef unless defined $fno;
- $vec->[$fno + FIRST_FD];
-}
-
-
-sub _fileno
-{
- my($self, $f) = @_;
- return unless defined $f;
- $f = $f->[0] if ref($f) eq 'ARRAY';
- ($f =~ /^\d+$/) ? $f : fileno($f);
-}
-
-sub _update
-{
- my $vec = shift;
- my $add = shift eq 'add';
-
- my $bits = $vec->[VEC_BITS];
- $bits = '' unless defined $bits;
-
- my $count = 0;
- my $f;
- foreach $f (@_)
- {
- my $fn = $vec->_fileno($f);
- next unless defined $fn;
- my $i = $fn + FIRST_FD;
- if ($add) {
- if (defined $vec->[$i]) {
- $vec->[$i] = $f; # if array rest might be different, so we update
- next;
- }
- $vec->[FD_COUNT]++;
- vec($bits, $fn, 1) = 1;
- $vec->[$i] = $f;
- } else { # remove
- next unless defined $vec->[$i];
- $vec->[FD_COUNT]--;
- vec($bits, $fn, 1) = 0;
- $vec->[$i] = undef;
- }
- $count++;
- }
- $vec->[VEC_BITS] = $vec->[FD_COUNT] ? $bits : undef;
- $count;
-}
-
-sub can_read
-{
- my $vec = shift;
- my $timeout = shift;
- my $r = $vec->[VEC_BITS];
-
- defined($r) && (select($r,undef,undef,$timeout) > 0)
- ? handles($vec, $r)
- : ();
-}
-
-sub can_write
-{
- my $vec = shift;
- my $timeout = shift;
- my $w = $vec->[VEC_BITS];
-
- defined($w) && (select(undef,$w,undef,$timeout) > 0)
- ? handles($vec, $w)
- : ();
-}
-
-sub has_exception
-{
- my $vec = shift;
- my $timeout = shift;
- my $e = $vec->[VEC_BITS];
-
- defined($e) && (select(undef,undef,$e,$timeout) > 0)
- ? handles($vec, $e)
- : ();
-}
-
-sub has_error
-{
- warnings::warn("Call to depreciated method 'has_error', use 'has_exception'")
- if warnings::enabled();
- goto &has_exception;
-}
-
-sub count
-{
- my $vec = shift;
- $vec->[FD_COUNT];
-}
-
-sub bits
-{
- my $vec = shift;
- $vec->[VEC_BITS];
-}
-
-sub as_string # for debugging
-{
- my $vec = shift;
- my $str = ref($vec) . ": ";
- my $bits = $vec->bits;
- my $count = $vec->count;
- $str .= defined($bits) ? unpack("b*", $bits) : "undef";
- $str .= " $count";
- my @handles = @$vec;
- splice(@handles, 0, FIRST_FD);
- for (@handles) {
- $str .= " " . (defined($_) ? "$_" : "-");
- }
- $str;
-}
-
-sub _max
-{
- my($a,$b,$c) = @_;
- $a > $b
- ? $a > $c
- ? $a
- : $c
- : $b > $c
- ? $b
- : $c;
-}
-
-sub select
-{
- shift
- if defined $_[0] && !ref($_[0]);
-
- my($r,$w,$e,$t) = @_;
- my @result = ();
-
- my $rb = defined $r ? $r->[VEC_BITS] : undef;
- my $wb = defined $w ? $w->[VEC_BITS] : undef;
- my $eb = defined $e ? $e->[VEC_BITS] : undef;
-
- if(select($rb,$wb,$eb,$t) > 0)
- {
- my @r = ();
- my @w = ();
- my @e = ();
- my $i = _max(defined $r ? scalar(@$r)-1 : 0,
- defined $w ? scalar(@$w)-1 : 0,
- defined $e ? scalar(@$e)-1 : 0);
-
- for( ; $i >= FIRST_FD ; $i--)
- {
- my $j = $i - FIRST_FD;
- push(@r, $r->[$i])
- if defined $rb && defined $r->[$i] && vec($rb, $j, 1);
- push(@w, $w->[$i])
- if defined $wb && defined $w->[$i] && vec($wb, $j, 1);
- push(@e, $e->[$i])
- if defined $eb && defined $e->[$i] && vec($eb, $j, 1);
- }
-
- @result = (\@r, \@w, \@e);
- }
- @result;
-}
-
-
-sub handles
-{
- my $vec = shift;
- my $bits = shift;
- my @h = ();
- my $i;
- my $max = scalar(@$vec) - 1;
-
- for ($i = FIRST_FD; $i <= $max; $i++)
- {
- next unless defined $vec->[$i];
- push(@h, $vec->[$i])
- if !defined($bits) || vec($bits, $i - FIRST_FD, 1);
- }
-
- @h;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-IO::Select - OO interface to the select system call
-
-=head1 SYNOPSIS
-
- use IO::Select;
-
- $s = IO::Select->new();
-
- $s->add(\*STDIN);
- $s->add($some_handle);
-
- @ready = $s->can_read($timeout);
-
- @ready = IO::Select->new(@handles)->read(0);
-
-=head1 DESCRIPTION
-
-The C<IO::Select> package implements an object approach to the system C<select>
-function call. It allows the user to see what IO handles, see L<IO::Handle>,
-are ready for reading, writing or have an error condition pending.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [ HANDLES ] )
-
-The constructor creates a new object and optionally initialises it with a set
-of handles.
-
-=back
-
-=head1 METHODS
-
-=over 4
-
-=item add ( HANDLES )
-
-Add the list of handles to the C<IO::Select> object. It is these values that
-will be returned when an event occurs. C<IO::Select> keeps these values in a
-cache which is indexed by the C<fileno> of the handle, so if more than one
-handle with the same C<fileno> is specified then only the last one is cached.
-
-Each handle can be an C<IO::Handle> object, an integer or an array
-reference where the first element is a C<IO::Handle> or an integer.
-
-=item remove ( HANDLES )
-
-Remove all the given handles from the object. This method also works
-by the C<fileno> of the handles. So the exact handles that were added
-need not be passed, just handles that have an equivalent C<fileno>
-
-=item exists ( HANDLE )
-
-Returns a true value (actually the handle itself) if it is present.
-Returns undef otherwise.
-
-=item handles
-
-Return an array of all registered handles.
-
-=item can_read ( [ TIMEOUT ] )
-
-Return an array of handles that are ready for reading. C<TIMEOUT> is
-the maximum amount of time to wait before returning an empty list, in
-seconds, possibly fractional. If C<TIMEOUT> is not given and any
-handles are registered then the call will block.
-
-=item can_write ( [ TIMEOUT ] )
-
-Same as C<can_read> except check for handles that can be written to.
-
-=item has_exception ( [ TIMEOUT ] )
-
-Same as C<can_read> except check for handles that have an exception
-condition, for example pending out-of-band data.
-
-=item count ()
-
-Returns the number of handles that the object will check for when
-one of the C<can_> methods is called or the object is passed to
-the C<select> static method.
-
-=item bits()
-
-Return the bit string suitable as argument to the core select() call.
-
-=item select ( READ, WRITE, ERROR [, TIMEOUT ] )
-
-C<select> is a static method, that is you call it with the package
-name like C<new>. C<READ>, C<WRITE> and C<ERROR> are either C<undef>
-or C<IO::Select> objects. C<TIMEOUT> is optional and has the same
-effect as for the core select call.
-
-The result will be an array of 3 elements, each a reference to an array
-which will hold the handles that are ready for reading, writing and have
-error conditions respectively. Upon error an empty array is returned.
-
-=back
-
-=head1 EXAMPLE
-
-Here is a short example which shows how C<IO::Select> could be used
-to write a server which communicates with several sockets while also
-listening for more connections on a listen socket
-
- use IO::Select;
- use IO::Socket;
-
- $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
- $sel = new IO::Select( $lsn );
-
- while(@ready = $sel->can_read) {
- foreach $fh (@ready) {
- if($fh == $lsn) {
- # Create a new socket
- $new = $lsn->accept;
- $sel->add($new);
- }
- else {
- # Process socket
-
- # Maybe we have finished with the socket
- $sel->remove($fh);
- $fh->close;
- }
- }
- }
-
-=head1 AUTHOR
-
-Graham Barr. Currently maintained by the Perl Porters. Please report all
-bugs to <perl5-porters@perl.org>.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
-
diff --git a/contrib/perl5/ext/IO/lib/IO/Socket.pm b/contrib/perl5/ext/IO/lib/IO/Socket.pm
deleted file mode 100644
index b8da092..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Socket.pm
+++ /dev/null
@@ -1,428 +0,0 @@
-# IO::Socket.pm
-#
-# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IO::Socket;
-
-require 5.005_64;
-
-use IO::Handle;
-use Socket 1.3;
-use Carp;
-use strict;
-our(@ISA, $VERSION);
-use Exporter;
-use Errno;
-
-# legacy
-
-require IO::Socket::INET;
-require IO::Socket::UNIX if ($^O ne 'epoc');
-
-@ISA = qw(IO::Handle);
-
-$VERSION = "1.26";
-
-sub import {
- my $pkg = shift;
- my $callpkg = caller;
- Exporter::export 'Socket', $callpkg, @_;
-}
-
-sub new {
- my($class,%arg) = @_;
- my $sock = $class->SUPER::new();
-
- $sock->autoflush(1);
-
- ${*$sock}{'io_socket_timeout'} = delete $arg{Timeout};
-
- return scalar(%arg) ? $sock->configure(\%arg)
- : $sock;
-}
-
-my @domain2pkg;
-
-sub register_domain {
- my($p,$d) = @_;
- $domain2pkg[$d] = $p;
-}
-
-sub configure {
- my($sock,$arg) = @_;
- my $domain = delete $arg->{Domain};
-
- croak 'IO::Socket: Cannot configure a generic socket'
- unless defined $domain;
-
- croak "IO::Socket: Unsupported socket domain"
- unless defined $domain2pkg[$domain];
-
- croak "IO::Socket: Cannot configure socket in domain '$domain'"
- unless ref($sock) eq "IO::Socket";
-
- bless($sock, $domain2pkg[$domain]);
- $sock->configure($arg);
-}
-
-sub socket {
- @_ == 4 or croak 'usage: $sock->socket(DOMAIN, TYPE, PROTOCOL)';
- my($sock,$domain,$type,$protocol) = @_;
-
- socket($sock,$domain,$type,$protocol) or
- return undef;
-
- ${*$sock}{'io_socket_domain'} = $domain;
- ${*$sock}{'io_socket_type'} = $type;
- ${*$sock}{'io_socket_proto'} = $protocol;
-
- $sock;
-}
-
-sub socketpair {
- @_ == 4 || croak 'usage: IO::Socket->socketpair(DOMAIN, TYPE, PROTOCOL)';
- my($class,$domain,$type,$protocol) = @_;
- my $sock1 = $class->new();
- my $sock2 = $class->new();
-
- socketpair($sock1,$sock2,$domain,$type,$protocol) or
- return ();
-
- ${*$sock1}{'io_socket_type'} = ${*$sock2}{'io_socket_type'} = $type;
- ${*$sock1}{'io_socket_proto'} = ${*$sock2}{'io_socket_proto'} = $protocol;
-
- ($sock1,$sock2);
-}
-
-sub connect {
- @_ == 2 or croak 'usage: $sock->connect(NAME)';
- my $sock = shift;
- my $addr = shift;
- my $timeout = ${*$sock}{'io_socket_timeout'};
- my $err;
- my $blocking;
- $blocking = $sock->blocking(0) if $timeout;
-
- if (!connect($sock, $addr)) {
- if ($timeout && $!{EINPROGRESS}) {
- require IO::Select;
-
- my $sel = new IO::Select $sock;
-
- if (!$sel->can_write($timeout)) {
- $err = $! || (exists &Errno::ETIMEDOUT ? &Errno::ETIMEDOUT : 1);
- $@ = "connect: timeout";
- }
- elsif(!connect($sock,$addr) && not $!{EISCONN}) {
- # Some systems refuse to re-connect() to
- # an already open socket and set errno to EISCONN.
- $err = $!;
- $@ = "connect: $!";
- }
- }
- else {
- $err = $!;
- $@ = "connect: $!";
- }
- }
-
- $sock->blocking(1) if $blocking;
-
- $! = $err if $err;
-
- $err ? undef : $sock;
-}
-
-sub bind {
- @_ == 2 or croak 'usage: $sock->bind(NAME)';
- my $sock = shift;
- my $addr = shift;
-
- return bind($sock, $addr) ? $sock
- : undef;
-}
-
-sub listen {
- @_ >= 1 && @_ <= 2 or croak 'usage: $sock->listen([QUEUE])';
- my($sock,$queue) = @_;
- $queue = 5
- unless $queue && $queue > 0;
-
- return listen($sock, $queue) ? $sock
- : undef;
-}
-
-sub accept {
- @_ == 1 || @_ == 2 or croak 'usage $sock->accept([PKG])';
- my $sock = shift;
- my $pkg = shift || $sock;
- my $timeout = ${*$sock}{'io_socket_timeout'};
- my $new = $pkg->new(Timeout => $timeout);
- my $peer = undef;
-
- if($timeout) {
- require IO::Select;
-
- my $sel = new IO::Select $sock;
-
- unless ($sel->can_read($timeout)) {
- $@ = 'accept: timeout';
- $! = (exists &Errno::ETIMEDOUT ? &Errno::ETIMEDOUT : 1);
- return;
- }
- }
-
- $peer = accept($new,$sock)
- or return;
-
- return wantarray ? ($new, $peer)
- : $new;
-}
-
-sub sockname {
- @_ == 1 or croak 'usage: $sock->sockname()';
- getsockname($_[0]);
-}
-
-sub peername {
- @_ == 1 or croak 'usage: $sock->peername()';
- my($sock) = @_;
- getpeername($sock)
- || ${*$sock}{'io_socket_peername'}
- || undef;
-}
-
-sub connected {
- @_ == 1 or croak 'usage: $sock->connected()';
- my($sock) = @_;
- getpeername($sock);
-}
-
-sub send {
- @_ >= 2 && @_ <= 4 or croak 'usage: $sock->send(BUF, [FLAGS, [TO]])';
- my $sock = $_[0];
- my $flags = $_[2] || 0;
- my $peer = $_[3] || $sock->peername;
-
- croak 'send: Cannot determine peer address'
- unless($peer);
-
- my $r = defined(getpeername($sock))
- ? send($sock, $_[1], $flags)
- : send($sock, $_[1], $flags, $peer);
-
- # remember who we send to, if it was sucessful
- ${*$sock}{'io_socket_peername'} = $peer
- if(@_ == 4 && defined $r);
-
- $r;
-}
-
-sub recv {
- @_ == 3 || @_ == 4 or croak 'usage: $sock->recv(BUF, LEN [, FLAGS])';
- my $sock = $_[0];
- my $len = $_[2];
- my $flags = $_[3] || 0;
-
- # remember who we recv'd from
- ${*$sock}{'io_socket_peername'} = recv($sock, $_[1]='', $len, $flags);
-}
-
-sub shutdown {
- @_ == 2 or croak 'usage: $sock->shutdown(HOW)';
- my($sock, $how) = @_;
- shutdown($sock, $how);
-}
-
-sub setsockopt {
- @_ == 4 or croak '$sock->setsockopt(LEVEL, OPTNAME)';
- setsockopt($_[0],$_[1],$_[2],$_[3]);
-}
-
-my $intsize = length(pack("i",0));
-
-sub getsockopt {
- @_ == 3 or croak '$sock->getsockopt(LEVEL, OPTNAME)';
- my $r = getsockopt($_[0],$_[1],$_[2]);
- # Just a guess
- $r = unpack("i", $r)
- if(defined $r && length($r) == $intsize);
- $r;
-}
-
-sub sockopt {
- my $sock = shift;
- @_ == 1 ? $sock->getsockopt(SOL_SOCKET,@_)
- : $sock->setsockopt(SOL_SOCKET,@_);
-}
-
-sub timeout {
- @_ == 1 || @_ == 2 or croak 'usage: $sock->timeout([VALUE])';
- my($sock,$val) = @_;
- my $r = ${*$sock}{'io_socket_timeout'} || undef;
-
- ${*$sock}{'io_socket_timeout'} = 0 + $val
- if(@_ == 2);
-
- $r;
-}
-
-sub sockdomain {
- @_ == 1 or croak 'usage: $sock->sockdomain()';
- my $sock = shift;
- ${*$sock}{'io_socket_domain'};
-}
-
-sub socktype {
- @_ == 1 or croak 'usage: $sock->socktype()';
- my $sock = shift;
- ${*$sock}{'io_socket_type'}
-}
-
-sub protocol {
- @_ == 1 or croak 'usage: $sock->protocol()';
- my($sock) = @_;
- ${*$sock}{'io_socket_proto'};
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-IO::Socket - Object interface to socket communications
-
-=head1 SYNOPSIS
-
- use IO::Socket;
-
-=head1 DESCRIPTION
-
-C<IO::Socket> provides an object interface to creating and using sockets. It
-is built upon the L<IO::Handle> interface and inherits all the methods defined
-by L<IO::Handle>.
-
-C<IO::Socket> only defines methods for those operations which are common to all
-types of socket. Operations which are specified to a socket in a particular
-domain have methods defined in sub classes of C<IO::Socket>
-
-C<IO::Socket> will export all functions (and constants) defined by L<Socket>.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [ARGS] )
-
-Creates an C<IO::Socket>, which is a reference to a
-newly created symbol (see the C<Symbol> package). C<new>
-optionally takes arguments, these arguments are in key-value pairs.
-C<new> only looks for one key C<Domain> which tells new which domain
-the socket will be in. All other arguments will be passed to the
-configuration method of the package for that domain, See below.
-
- NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-
-As of VERSION 1.18 all IO::Socket objects have autoflush turned on
-by default. This was not the case with earlier releases.
-
- NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-
-=back
-
-=head1 METHODS
-
-See L<perlfunc> for complete descriptions of each of the following
-supported C<IO::Socket> methods, which are just front ends for the
-corresponding built-in functions:
-
- socket
- socketpair
- bind
- listen
- accept
- send
- recv
- peername (getpeername)
- sockname (getsockname)
- shutdown
-
-Some methods take slightly different arguments to those defined in L<perlfunc>
-in attempt to make the interface more flexible. These are
-
-=over 4
-
-=item accept([PKG])
-
-perform the system call C<accept> on the socket and return a new object. The
-new object will be created in the same class as the listen socket, unless
-C<PKG> is specified. This object can be used to communicate with the client
-that was trying to connect. In a scalar context the new socket is returned,
-or undef upon failure. In a list context a two-element array is returned
-containing the new socket and the peer address; the list will
-be empty upon failure.
-
-=item socketpair(DOMAIN, TYPE, PROTOCOL)
-
-Call C<socketpair> and return a list of two sockets created, or an
-empty list on failure.
-
-=back
-
-Additional methods that are provided are:
-
-=over 4
-
-=item timeout([VAL])
-
-Set or get the timeout value associated with this socket. If called without
-any arguments then the current setting is returned. If called with an argument
-the current setting is changed and the previous value returned.
-
-=item sockopt(OPT [, VAL])
-
-Unified method to both set and get options in the SOL_SOCKET level. If called
-with one argument then getsockopt is called, otherwise setsockopt is called.
-
-=item sockdomain
-
-Returns the numerical number for the socket domain type. For example, for
-a AF_INET socket the value of &AF_INET will be returned.
-
-=item socktype
-
-Returns the numerical number for the socket type. For example, for
-a SOCK_STREAM socket the value of &SOCK_STREAM will be returned.
-
-=item protocol
-
-Returns the numerical number for the protocol being used on the socket, if
-known. If the protocol is unknown, as with an AF_UNIX socket, zero
-is returned.
-
-=item connected
-
-If the socket is in a connected state the the peer address is returned.
-If the socket is not in a connected state then undef will be returned.
-
-=back
-
-=head1 SEE ALSO
-
-L<Socket>, L<IO::Handle>, L<IO::Socket::INET>, L<IO::Socket::UNIX>
-
-=head1 AUTHOR
-
-Graham Barr. Currently maintained by the Perl Porters. Please report all
-bugs to <perl5-porters@perl.org>.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
diff --git a/contrib/perl5/ext/IO/lib/IO/Socket/INET.pm b/contrib/perl5/ext/IO/lib/IO/Socket/INET.pm
deleted file mode 100644
index d2cc488..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Socket/INET.pm
+++ /dev/null
@@ -1,414 +0,0 @@
-# IO::Socket::INET.pm
-#
-# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IO::Socket::INET;
-
-use strict;
-our(@ISA, $VERSION);
-use IO::Socket;
-use Socket;
-use Carp;
-use Exporter;
-use Errno;
-
-@ISA = qw(IO::Socket);
-$VERSION = "1.25";
-
-my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1;
-
-IO::Socket::INET->register_domain( AF_INET );
-
-my %socket_type = ( tcp => SOCK_STREAM,
- udp => SOCK_DGRAM,
- icmp => SOCK_RAW
- );
-
-sub new {
- my $class = shift;
- unshift(@_, "PeerAddr") if @_ == 1;
- return $class->SUPER::new(@_);
-}
-
-sub _sock_info {
- my($addr,$port,$proto) = @_;
- my $origport = $port;
- my @proto = ();
- my @serv = ();
-
- $port = $1
- if(defined $addr && $addr =~ s,:([\w\(\)/]+)$,,);
-
- if(defined $proto) {
- if (@proto = ( $proto =~ m,\D,
- ? getprotobyname($proto)
- : getprotobynumber($proto))
- ) {
- $proto = $proto[2] || undef;
- }
- else {
- $@ = "Bad protocol '$proto'";
- return;
- }
- }
-
- if(defined $port) {
- $port =~ s,\((\d+)\)$,,;
-
- my $defport = $1 || undef;
- my $pnum = ($port =~ m,^(\d+)$,)[0];
-
- @serv = getservbyname($port, $proto[0] || "")
- if ($port =~ m,\D,);
-
- $port = $pnum || $serv[2] || $defport || undef;
- unless (defined $port) {
- $@ = "Bad service '$origport'";
- return;
- }
-
- $proto = (getprotobyname($serv[3]))[2] || undef
- if @serv && !$proto;
- }
-
- return ($addr || undef,
- $port || undef,
- $proto || undef
- );
-}
-
-sub _error {
- my $sock = shift;
- my $err = shift;
- {
- local($!);
- $@ = join("",ref($sock),": ",@_);
- close($sock)
- if(defined fileno($sock));
- }
- $! = $err;
- return undef;
-}
-
-sub _get_addr {
- my($sock,$addr_str, $multi) = @_;
- my @addr;
- if ($multi && $addr_str !~ /^\d+(?:\.\d+){3}$/) {
- (undef, undef, undef, undef, @addr) = gethostbyname($addr_str);
- } else {
- my $h = inet_aton($addr_str);
- push(@addr, $h) if defined $h;
- }
- @addr;
-}
-
-sub configure {
- my($sock,$arg) = @_;
- my($lport,$rport,$laddr,$raddr,$proto,$type);
-
-
- $arg->{LocalAddr} = $arg->{LocalHost}
- if exists $arg->{LocalHost} && !exists $arg->{LocalAddr};
-
- ($laddr,$lport,$proto) = _sock_info($arg->{LocalAddr},
- $arg->{LocalPort},
- $arg->{Proto})
- or return _error($sock, $!, $@);
-
- $laddr = defined $laddr ? inet_aton($laddr)
- : INADDR_ANY;
-
- return _error($sock, $EINVAL, "Bad hostname '",$arg->{LocalAddr},"'")
- unless(defined $laddr);
-
- $arg->{PeerAddr} = $arg->{PeerHost}
- if exists $arg->{PeerHost} && !exists $arg->{PeerAddr};
-
- unless(exists $arg->{Listen}) {
- ($raddr,$rport,$proto) = _sock_info($arg->{PeerAddr},
- $arg->{PeerPort},
- $proto)
- or return _error($sock, $!, $@);
- }
-
- $proto ||= (getprotobyname('tcp'))[2];
-
- my $pname = (getprotobynumber($proto))[0];
- $type = $arg->{Type} || $socket_type{$pname};
-
- my @raddr = ();
-
- if(defined $raddr) {
- @raddr = $sock->_get_addr($raddr, $arg->{MultiHomed});
- return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'")
- unless @raddr;
- }
-
- while(1) {
-
- $sock->socket(AF_INET, $type, $proto) or
- return _error($sock, $!, "$!");
-
- if ($arg->{Reuse} || $arg->{ReuseAddr}) {
- $sock->sockopt(SO_REUSEADDR,1) or
- return _error($sock, $!, "$!");
- }
-
- if ($arg->{ReusePort}) {
- $sock->sockopt(SO_REUSEPORT,1) or
- return _error($sock, $!, "$!");
- }
-
- if($lport || ($laddr ne INADDR_ANY) || exists $arg->{Listen}) {
- $sock->bind($lport || 0, $laddr) or
- return _error($sock, $!, "$!");
- }
-
- if(exists $arg->{Listen}) {
- $sock->listen($arg->{Listen} || 5) or
- return _error($sock, $!, "$!");
- last;
- }
-
- # don't try to connect unless we're given a PeerAddr
- last unless exists($arg->{PeerAddr});
-
- $raddr = shift @raddr;
-
- return _error($sock, $EINVAL, 'Cannot determine remote port')
- unless($rport || $type == SOCK_DGRAM || $type == SOCK_RAW);
-
- last
- unless($type == SOCK_STREAM || defined $raddr);
-
- return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'")
- unless defined $raddr;
-
-# my $timeout = ${*$sock}{'io_socket_timeout'};
-# my $before = time() if $timeout;
-
- if ($sock->connect(pack_sockaddr_in($rport, $raddr))) {
-# ${*$sock}{'io_socket_timeout'} = $timeout;
- return $sock;
- }
-
- return _error($sock, $!, "Timeout")
- unless @raddr;
-
-# if ($timeout) {
-# my $new_timeout = $timeout - (time() - $before);
-# return _error($sock,
-# (exists(&Errno::ETIMEDOUT) ? Errno::ETIMEDOUT() : $EINVAL),
-# "Timeout") if $new_timeout <= 0;
-# ${*$sock}{'io_socket_timeout'} = $new_timeout;
-# }
-
- }
-
- $sock;
-}
-
-sub connect {
- @_ == 2 || @_ == 3 or
- croak 'usage: $sock->connect(NAME) or $sock->connect(PORT, ADDR)';
- my $sock = shift;
- return $sock->SUPER::connect(@_ == 1 ? shift : pack_sockaddr_in(@_));
-}
-
-sub bind {
- @_ == 2 || @_ == 3 or
- croak 'usage: $sock->bind(NAME) or $sock->bind(PORT, ADDR)';
- my $sock = shift;
- return $sock->SUPER::bind(@_ == 1 ? shift : pack_sockaddr_in(@_))
-}
-
-sub sockaddr {
- @_ == 1 or croak 'usage: $sock->sockaddr()';
- my($sock) = @_;
- my $name = $sock->sockname;
- $name ? (sockaddr_in($name))[1] : undef;
-}
-
-sub sockport {
- @_ == 1 or croak 'usage: $sock->sockport()';
- my($sock) = @_;
- my $name = $sock->sockname;
- $name ? (sockaddr_in($name))[0] : undef;
-}
-
-sub sockhost {
- @_ == 1 or croak 'usage: $sock->sockhost()';
- my($sock) = @_;
- my $addr = $sock->sockaddr;
- $addr ? inet_ntoa($addr) : undef;
-}
-
-sub peeraddr {
- @_ == 1 or croak 'usage: $sock->peeraddr()';
- my($sock) = @_;
- my $name = $sock->peername;
- $name ? (sockaddr_in($name))[1] : undef;
-}
-
-sub peerport {
- @_ == 1 or croak 'usage: $sock->peerport()';
- my($sock) = @_;
- my $name = $sock->peername;
- $name ? (sockaddr_in($name))[0] : undef;
-}
-
-sub peerhost {
- @_ == 1 or croak 'usage: $sock->peerhost()';
- my($sock) = @_;
- my $addr = $sock->peeraddr;
- $addr ? inet_ntoa($addr) : undef;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-IO::Socket::INET - Object interface for AF_INET domain sockets
-
-=head1 SYNOPSIS
-
- use IO::Socket::INET;
-
-=head1 DESCRIPTION
-
-C<IO::Socket::INET> provides an object interface to creating and using sockets
-in the AF_INET domain. It is built upon the L<IO::Socket> interface and
-inherits all the methods defined by L<IO::Socket>.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [ARGS] )
-
-Creates an C<IO::Socket::INET> object, which is a reference to a
-newly created symbol (see the C<Symbol> package). C<new>
-optionally takes arguments, these arguments are in key-value pairs.
-
-In addition to the key-value pairs accepted by L<IO::Socket>,
-C<IO::Socket::INET> provides.
-
-
- PeerAddr Remote host address <hostname>[:<port>]
- PeerHost Synonym for PeerAddr
- PeerPort Remote port or service <service>[(<no>)] | <no>
- LocalAddr Local host bind address hostname[:port]
- LocalHost Synonym for LocalAddr
- LocalPort Local host bind port <service>[(<no>)] | <no>
- Proto Protocol name (or number) "tcp" | "udp" | ...
- Type Socket type SOCK_STREAM | SOCK_DGRAM | ...
- Listen Queue size for listen
- ReuseAddr Set SO_REUSEADDR before binding
- Reuse Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr)
- ReusePort Set SO_REUSEPORT before binding
- Timeout Timeout value for various operations
- MultiHomed Try all adresses for multi-homed hosts
-
-
-If C<Listen> is defined then a listen socket is created, else if the
-socket type, which is derived from the protocol, is SOCK_STREAM then
-connect() is called.
-
-Although it is not illegal, the use of C<MultiHomed> on a socket
-which is in non-blocking mode is of little use. This is because the
-first connect will never fail with a timeout as the connaect call
-will not block.
-
-The C<PeerAddr> can be a hostname or the IP-address on the
-"xx.xx.xx.xx" form. The C<PeerPort> can be a number or a symbolic
-service name. The service name might be followed by a number in
-parenthesis which is used if the service is not known by the system.
-The C<PeerPort> specification can also be embedded in the C<PeerAddr>
-by preceding it with a ":".
-
-If C<Proto> is not given and you specify a symbolic C<PeerPort> port,
-then the constructor will try to derive C<Proto> from the service
-name. As a last resort C<Proto> "tcp" is assumed. The C<Type>
-parameter will be deduced from C<Proto> if not specified.
-
-If the constructor is only passed a single argument, it is assumed to
-be a C<PeerAddr> specification.
-
-Examples:
-
- $sock = IO::Socket::INET->new(PeerAddr => 'www.perl.org',
- PeerPort => 'http(80)',
- Proto => 'tcp');
-
- $sock = IO::Socket::INET->new(PeerAddr => 'localhost:smtp(25)');
-
- $sock = IO::Socket::INET->new(Listen => 5,
- LocalAddr => 'localhost',
- LocalPort => 9000,
- Proto => 'tcp');
-
- $sock = IO::Socket::INET->new('127.0.0.1:25');
-
-
- NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-
-As of VERSION 1.18 all IO::Socket objects have autoflush turned on
-by default. This was not the case with earlier releases.
-
- NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-
-=back
-
-=head2 METHODS
-
-=over 4
-
-=item sockaddr ()
-
-Return the address part of the sockaddr structure for the socket
-
-=item sockport ()
-
-Return the port number that the socket is using on the local host
-
-=item sockhost ()
-
-Return the address part of the sockaddr structure for the socket in a
-text form xx.xx.xx.xx
-
-=item peeraddr ()
-
-Return the address part of the sockaddr structure for the socket on
-the peer host
-
-=item peerport ()
-
-Return the port number for the socket on the peer host.
-
-=item peerhost ()
-
-Return the address part of the sockaddr structure for the socket on the
-peer host in a text form xx.xx.xx.xx
-
-=back
-
-=head1 SEE ALSO
-
-L<Socket>, L<IO::Socket>
-
-=head1 AUTHOR
-
-Graham Barr. Currently maintained by the Perl Porters. Please report all
-bugs to <perl5-porters@perl.org>.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
diff --git a/contrib/perl5/ext/IO/lib/IO/Socket/UNIX.pm b/contrib/perl5/ext/IO/lib/IO/Socket/UNIX.pm
deleted file mode 100644
index 2a11752..0000000
--- a/contrib/perl5/ext/IO/lib/IO/Socket/UNIX.pm
+++ /dev/null
@@ -1,143 +0,0 @@
-# IO::Socket::UNIX.pm
-#
-# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IO::Socket::UNIX;
-
-use strict;
-our(@ISA, $VERSION);
-use IO::Socket;
-use Socket;
-use Carp;
-
-@ISA = qw(IO::Socket);
-$VERSION = "1.20";
-
-IO::Socket::UNIX->register_domain( AF_UNIX );
-
-sub new {
- my $class = shift;
- unshift(@_, "Peer") if @_ == 1;
- return $class->SUPER::new(@_);
-}
-
-sub configure {
- my($sock,$arg) = @_;
- my($bport,$cport);
-
- my $type = $arg->{Type} || SOCK_STREAM;
-
- $sock->socket(AF_UNIX, $type, 0) or
- return undef;
-
- if(exists $arg->{Local}) {
- my $addr = sockaddr_un($arg->{Local});
- $sock->bind($addr) or
- return undef;
- }
- if(exists $arg->{Listen} && $type != SOCK_DGRAM) {
- $sock->listen($arg->{Listen} || 5) or
- return undef;
- }
- elsif(exists $arg->{Peer}) {
- my $addr = sockaddr_un($arg->{Peer});
- $sock->connect($addr) or
- return undef;
- }
-
- $sock;
-}
-
-sub hostpath {
- @_ == 1 or croak 'usage: $sock->hostpath()';
- my $n = $_[0]->sockname || return undef;
- (sockaddr_un($n))[0];
-}
-
-sub peerpath {
- @_ == 1 or croak 'usage: $sock->peerpath()';
- my $n = $_[0]->peername || return undef;
- (sockaddr_un($n))[0];
-}
-
-1; # Keep require happy
-
-__END__
-
-=head1 NAME
-
-IO::Socket::UNIX - Object interface for AF_UNIX domain sockets
-
-=head1 SYNOPSIS
-
- use IO::Socket::UNIX;
-
-=head1 DESCRIPTION
-
-C<IO::Socket::UNIX> provides an object interface to creating and using sockets
-in the AF_UNIX domain. It is built upon the L<IO::Socket> interface and
-inherits all the methods defined by L<IO::Socket>.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [ARGS] )
-
-Creates an C<IO::Socket::UNIX> object, which is a reference to a
-newly created symbol (see the C<Symbol> package). C<new>
-optionally takes arguments, these arguments are in key-value pairs.
-
-In addition to the key-value pairs accepted by L<IO::Socket>,
-C<IO::Socket::UNIX> provides.
-
- Type Type of socket (eg SOCK_STREAM or SOCK_DGRAM)
- Local Path to local fifo
- Peer Path to peer fifo
- Listen Create a listen socket
-
-If the constructor is only passed a single argument, it is assumed to
-be a C<Peer> specification.
-
-
- NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-
-As of VERSION 1.18 all IO::Socket objects have autoflush turned on
-by default. This was not the case with earlier releases.
-
- NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-
-=back
-
-=head1 METHODS
-
-=over 4
-
-=item hostpath()
-
-Returns the pathname to the fifo at the local end
-
-=item peerpath()
-
-Returns the pathanme to the fifo at the peer end
-
-=back
-
-=head1 SEE ALSO
-
-L<Socket>, L<IO::Socket>
-
-=head1 AUTHOR
-
-Graham Barr. Currently maintained by the Perl Porters. Please report all
-bugs to <perl5-porters@perl.org>.
-
-=head1 COPYRIGHT
-
-Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-=cut
diff --git a/contrib/perl5/ext/IO/poll.c b/contrib/perl5/ext/IO/poll.c
deleted file mode 100644
index 024c52f..0000000
--- a/contrib/perl5/ext/IO/poll.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * poll.c
- *
- * Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
- * This program is free software; you can redistribute it and/or
- * modify it under the same terms as Perl itself.
- *
- * For systems that do not have the poll() system call (for example Linux
- * kernels < v2.1.23) try to emulate it as closely as possible using select()
- *
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "poll.h"
-#ifdef I_SYS_TIME
-# include <sys/time.h>
-#endif
-#ifdef I_TIME
-# include <time.h>
-#endif
-#include <sys/types.h>
-#if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.h */
-# include <sys/socket.h>
-#endif
-#include <sys/stat.h>
-#include <errno.h>
-
-#ifdef HAS_SELECT
-#ifdef I_SYS_SELECT
-#include <sys/select.h>
-#endif
-#endif
-
-#ifdef EMULATE_POLL_WITH_SELECT
-
-# define POLL_CAN_READ (POLLIN | POLLRDNORM )
-# define POLL_CAN_WRITE (POLLOUT | POLLWRNORM | POLLWRBAND )
-# define POLL_HAS_EXCP (POLLRDBAND | POLLPRI )
-
-# define POLL_EVENTS_MASK (POLL_CAN_READ | POLL_CAN_WRITE | POLL_HAS_EXCP)
-
-int
-poll(struct pollfd *fds, unsigned long nfds, int timeout)
-{
- int i,err;
- fd_set rfd,wfd,efd,ifd;
- struct timeval timebuf;
- struct timeval *tbuf = (struct timeval *)0;
- int n = 0;
- int count;
-
- FD_ZERO(&ifd);
-
-again:
-
- FD_ZERO(&rfd);
- FD_ZERO(&wfd);
- FD_ZERO(&efd);
-
- for(i = 0 ; i < nfds ; i++) {
- int events = fds[i].events;
- int fd = fds[i].fd;
-
- fds[i].revents = 0;
-
- if(fd < 0 || FD_ISSET(fd, &ifd))
- continue;
-
- if(fd > n)
- n = fd;
-
- if(events & POLL_CAN_READ)
- FD_SET(fd, &rfd);
-
- if(events & POLL_CAN_WRITE)
- FD_SET(fd, &wfd);
-
- if(events & POLL_HAS_EXCP)
- FD_SET(fd, &efd);
- }
-
- if(timeout >= 0) {
- timebuf.tv_sec = timeout / 1000;
- timebuf.tv_usec = (timeout % 1000) * 1000;
- tbuf = &timebuf;
- }
-
- err = select(n+1,&rfd,&wfd,&efd,tbuf);
-
- if(err < 0) {
-#ifdef HAS_FSTAT
- if(errno == EBADF) {
- for(i = 0 ; i < nfds ; i++) {
- struct stat buf;
- if((fstat(fds[i].fd,&buf) < 0) && (errno == EBADF)) {
- FD_SET(fds[i].fd, &ifd);
- goto again;
- }
- }
- }
-#endif /* HAS_FSTAT */
- return err;
- }
-
- count = 0;
-
- for(i = 0 ; i < nfds ; i++) {
- int revents = (fds[i].events & POLL_EVENTS_MASK);
- int fd = fds[i].fd;
-
- if(fd < 0)
- continue;
-
- if(FD_ISSET(fd, &ifd))
- revents = POLLNVAL;
- else {
- if(!FD_ISSET(fd, &rfd))
- revents &= ~POLL_CAN_READ;
-
- if(!FD_ISSET(fd, &wfd))
- revents &= ~POLL_CAN_WRITE;
-
- if(!FD_ISSET(fd, &efd))
- revents &= ~POLL_HAS_EXCP;
- }
-
- if((fds[i].revents = revents) != 0)
- count++;
- }
-
- return count;
-}
-
-#endif /* EMULATE_POLL_WITH_SELECT */
diff --git a/contrib/perl5/ext/IO/poll.h b/contrib/perl5/ext/IO/poll.h
deleted file mode 100644
index 4055b49..0000000
--- a/contrib/perl5/ext/IO/poll.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * poll.h
- *
- * Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
- * This program is free software; you can redistribute it and/or
- * modify it under the same terms as Perl itself.
- *
- */
-
-#ifndef POLL_H
-# define POLL_H
-
-#if (defined(HAS_POLL) && defined(I_POLL)) || defined(POLLWRBAND)
-# include <poll.h>
-#else
-#ifdef HAS_SELECT
-
-
-/* We shall emulate poll using select */
-
-#define EMULATE_POLL_WITH_SELECT
-
-typedef struct pollfd {
- int fd;
- short events;
- short revents;
-} pollfd_t;
-
-#define POLLIN 0x0001
-#define POLLPRI 0x0002
-#define POLLOUT 0x0004
-#define POLLRDNORM 0x0040
-#define POLLWRNORM POLLOUT
-#define POLLRDBAND 0x0080
-#define POLLWRBAND 0x0100
-#define POLLNORM POLLRDNORM
-
-/* Return ONLY events (NON testable) */
-
-#define POLLERR 0x0008
-#define POLLHUP 0x0010
-#define POLLNVAL 0x0020
-
-int poll (struct pollfd *, unsigned long, int);
-
-#ifndef HAS_POLL
-# define HAS_POLL
-#endif
-
-#endif /* HAS_SELECT */
-
-#endif /* I_POLL */
-
-#endif /* POLL_H */
-
diff --git a/contrib/perl5/ext/IPC/SysV/ChangeLog b/contrib/perl5/ext/IPC/SysV/ChangeLog
deleted file mode 100644
index fff95be..0000000
--- a/contrib/perl5/ext/IPC/SysV/ChangeLog
+++ /dev/null
@@ -1,28 +0,0 @@
-Fri Jul 3 15:06:40 1998 Jarkko Hietaniemi <jhi@iki.fi>
-
- - Integrated IPC::SysV 1.03 to Perl 5.004_69.
-
-Change 142 on 1998/05/31 by <gbarr@pobox.com> (Graham Barr)
-
- - Changed SHMLBA from a constSUB to an XS sub as on some systems it is not
- a constant
- - Added a missing MODULE line to SysV.xs so ftok is defined in IPC::SysV
-
-Change 138 on 1998/05/23 by <gbarr@pobox.com> (Graham Barr)
-
- Applied patch from Jarkko Hietaniemi to add constats for UNICOS
-
- Reduced size of XS object by changing constant sub definition
- into a loop
-
- Updated POD to include ftok()
-
-Change 135 on 1998/05/18 by <gbarr@pobox.com> (Graham Barr)
-
- applied changes from Jarkko Hietaniemi <jhi@iki.fi> to add
- new constants and ftok
-
- fixed to compile with >5.004_50
-
- surrounded newCONSTSUB with #ifndef as perl now defines this itself
-
diff --git a/contrib/perl5/ext/IPC/SysV/MANIFEST b/contrib/perl5/ext/IPC/SysV/MANIFEST
deleted file mode 100644
index 4b2aa00..0000000
--- a/contrib/perl5/ext/IPC/SysV/MANIFEST
+++ /dev/null
@@ -1,10 +0,0 @@
-MANIFEST
-Makefile.PL
-Msg.pm
-README
-Semaphore.pm
-SysV.pm
-SysV.xs
-t/msg.t
-t/sem.t
-ChangeLog
diff --git a/contrib/perl5/ext/IPC/SysV/Makefile.PL b/contrib/perl5/ext/IPC/SysV/Makefile.PL
deleted file mode 100644
index 6831176..0000000
--- a/contrib/perl5/ext/IPC/SysV/Makefile.PL
+++ /dev/null
@@ -1,38 +0,0 @@
-# This -*- perl -*- script makes the Makefile
-# $Id: Makefile.PL,v 1.3 1997/03/04 09:21:12 gbarr Exp $
-# $FreeBSD$
-
-require 5.002;
-use ExtUtils::MakeMaker;
-
-#--- MY package
-
-sub MY::libscan
-{
- my($self,$path) = @_;
-
- return ''
- if($path =~ m:/(RCS|CVS|SCCS)/: ||
- $path =~ m:[~%]$: ||
- $path =~ m:\.(orig|rej)$:
- );
-
- $path;
-}
-
-WriteMakefile(
- VERSION_FROM => "SysV.pm",
- NAME => "IPC::SysV",
- MAN3PODS => {}, # Pods will be built by installman.
-
- 'dist' => {COMPRESS => 'gzip -9f',
- SUFFIX => 'gz',
- DIST_DEFAULT => 'all tardist',
- },
-
- 'clean' => {FILES => join(" ",
- map { "$_ */$_ */*/$_" }
- qw(*% *.html *.b[ac]k *.old))
- },
- 'macro' => { INSTALLDIRS => 'perl' },
-);
diff --git a/contrib/perl5/ext/IPC/SysV/Msg.pm b/contrib/perl5/ext/IPC/SysV/Msg.pm
deleted file mode 100644
index 120a5b2..0000000
--- a/contrib/perl5/ext/IPC/SysV/Msg.pm
+++ /dev/null
@@ -1,223 +0,0 @@
-# IPC::Msg.pm
-#
-# Copyright (c) 1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IPC::Msg;
-
-use IPC::SysV qw(IPC_STAT IPC_SET IPC_RMID);
-use strict;
-use vars qw($VERSION);
-use Carp;
-
-$VERSION = "1.00";
-
-{
- package IPC::Msg::stat;
-
- use Class::Struct qw(struct);
-
- struct 'IPC::Msg::stat' => [
- uid => '$',
- gid => '$',
- cuid => '$',
- cgid => '$',
- mode => '$',
- qnum => '$',
- qbytes => '$',
- lspid => '$',
- lrpid => '$',
- stime => '$',
- rtime => '$',
- ctime => '$',
- ];
-}
-
-sub new {
- @_ == 3 || croak 'new IPC::Msg ( KEY , FLAGS )';
- my $class = shift;
-
- my $id = msgget($_[0],$_[1]);
-
- defined($id)
- ? bless \$id, $class
- : undef;
-}
-
-sub id {
- my $self = shift;
- $$self;
-}
-
-sub stat {
- my $self = shift;
- my $data = "";
- msgctl($$self,IPC_STAT,$data) or
- return undef;
- IPC::Msg::stat->new->unpack($data);
-}
-
-sub set {
- my $self = shift;
- my $ds;
-
- if(@_ == 1) {
- $ds = shift;
- }
- else {
- croak 'Bad arg count' if @_ % 2;
- my %arg = @_;
- my $ds = $self->stat
- or return undef;
- my($key,$val);
- $ds->$key($val)
- while(($key,$val) = each %arg);
- }
-
- msgctl($$self,IPC_SET,$ds->pack);
-}
-
-sub remove {
- my $self = shift;
- (msgctl($$self,IPC_RMID,0), undef $$self)[0];
-}
-
-sub rcv {
- @_ <= 5 && @_ >= 3 or croak '$msg->rcv( BUF, LEN, TYPE, FLAGS )';
- my $self = shift;
- my $buf = "";
- msgrcv($$self,$buf,$_[1],$_[2] || 0, $_[3] || 0) or
- return;
- my $type;
- ($type,$_[0]) = unpack("l! a*",$buf);
- $type;
-}
-
-sub snd {
- @_ <= 4 && @_ >= 3 or croak '$msg->snd( TYPE, BUF, FLAGS )';
- my $self = shift;
- msgsnd($$self,pack("l! a*",$_[0],$_[1]), $_[2] || 0);
-}
-
-
-1;
-
-__END__
-
-=head1 NAME
-
-IPC::Msg - SysV Msg IPC object class
-
-=head1 SYNOPSIS
-
- use IPC::SysV qw(IPC_PRIVATE S_IRWXU);
- use IPC::Msg;
-
- $msg = new IPC::Msg(IPC_PRIVATE, S_IRWXU);
-
- $msg->snd(pack("l! a*",$msgtype,$msg));
-
- $msg->rcv($buf,256);
-
- $ds = $msg->stat;
-
- $msg->remove;
-
-=head1 DESCRIPTION
-
-=head1 METHODS
-
-=over 4
-
-=item new ( KEY , FLAGS )
-
-Creates a new message queue associated with C<KEY>. A new queue is
-created if
-
-=over 4
-
-=item *
-
-C<KEY> is equal to C<IPC_PRIVATE>
-
-=item *
-
-C<KEY> does not already have a message queue
-associated with it, and C<I<FLAGS> & IPC_CREAT> is true.
-
-=back
-
-On creation of a new message queue C<FLAGS> is used to set the
-permissions.
-
-=item id
-
-Returns the system message queue identifier.
-
-=item rcv ( BUF, LEN [, TYPE [, FLAGS ]] )
-
-Read a message from the queue. Returns the type of the message read.
-See L<msgrcv>. The BUF becomes tainted.
-
-=item remove
-
-Remove and destroy the message queue from the system.
-
-=item set ( STAT )
-
-=item set ( NAME => VALUE [, NAME => VALUE ...] )
-
-C<set> will set the following values of the C<stat> structure associated
-with the message queue.
-
- uid
- gid
- mode (oly the permission bits)
- qbytes
-
-C<set> accepts either a stat object, as returned by the C<stat> method,
-or a list of I<name>-I<value> pairs.
-
-=item snd ( TYPE, MSG [, FLAGS ] )
-
-Place a message on the queue with the data from C<MSG> and with type C<TYPE>.
-See L<msgsnd>.
-
-=item stat
-
-Returns an object of type C<IPC::Msg::stat> which is a sub-class of
-C<Class::Struct>. It provides the following fields. For a description
-of these fields see you system documentation.
-
- uid
- gid
- cuid
- cgid
- mode
- qnum
- qbytes
- lspid
- lrpid
- stime
- rtime
- ctime
-
-=back
-
-=head1 SEE ALSO
-
-L<IPC::SysV> L<Class::Struct>
-
-=head1 AUTHOR
-
-Graham Barr <gbarr@pobox.com>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997 Graham Barr. All rights reserved.
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
diff --git a/contrib/perl5/ext/IPC/SysV/README b/contrib/perl5/ext/IPC/SysV/README
deleted file mode 100644
index d412c4c..0000000
--- a/contrib/perl5/ext/IPC/SysV/README
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
-This package is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-The SysV-IPC contains three packages
-
- IPC::Semaphore
- - Provides an object interface to using SysV IPC semaphores
-
- IPC::Msg
- - Provides an object interface to using SysV IPC messages
-
- IPC::SysV
- - Provides the constants required to use the system SysV IPC calls.
-
-Currently there is not object support for SysV shared memory, but
-SysV::SharedMem is a project for the future.
-
-Share and enjoy!
-
diff --git a/contrib/perl5/ext/IPC/SysV/Semaphore.pm b/contrib/perl5/ext/IPC/SysV/Semaphore.pm
deleted file mode 100644
index faf7411..0000000
--- a/contrib/perl5/ext/IPC/SysV/Semaphore.pm
+++ /dev/null
@@ -1,297 +0,0 @@
-# IPC::Semaphore
-#
-# Copyright (c) 1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IPC::Semaphore;
-
-use IPC::SysV qw(GETNCNT GETZCNT GETVAL SETVAL GETPID GETALL SETALL
- IPC_STAT IPC_SET IPC_RMID);
-use strict;
-use vars qw($VERSION);
-use Carp;
-
-$VERSION = "1.00";
-
-{
- package IPC::Semaphore::stat;
-
- use Class::Struct qw(struct);
-
- struct 'IPC::Semaphore::stat' => [
- uid => '$',
- gid => '$',
- cuid => '$',
- cgid => '$',
- mode => '$',
- ctime => '$',
- otime => '$',
- nsems => '$',
- ];
-}
-
-sub new {
- @_ == 4 || croak 'new ' . __PACKAGE__ . '( KEY, NSEMS, FLAGS )';
- my $class = shift;
-
- my $id = semget($_[0],$_[1],$_[2]);
-
- defined($id)
- ? bless \$id, $class
- : undef;
-}
-
-sub id {
- my $self = shift;
- $$self;
-}
-
-sub remove {
- my $self = shift;
- (semctl($$self,0,IPC_RMID,0), undef $$self)[0];
-}
-
-sub getncnt {
- @_ == 2 || croak '$sem->getncnt( SEM )';
- my $self = shift;
- my $sem = shift;
- my $v = semctl($$self,$sem,GETNCNT,0);
- $v ? 0 + $v : undef;
-}
-
-sub getzcnt {
- @_ == 2 || croak '$sem->getzcnt( SEM )';
- my $self = shift;
- my $sem = shift;
- my $v = semctl($$self,$sem,GETZCNT,0);
- $v ? 0 + $v : undef;
-}
-
-sub getval {
- @_ == 2 || croak '$sem->getval( SEM )';
- my $self = shift;
- my $sem = shift;
- my $v = semctl($$self,$sem,GETVAL,0);
- $v ? 0 + $v : undef;
-}
-
-sub getpid {
- @_ == 2 || croak '$sem->getpid( SEM )';
- my $self = shift;
- my $sem = shift;
- my $v = semctl($$self,$sem,GETPID,0);
- $v ? 0 + $v : undef;
-}
-
-sub op {
- @_ >= 4 || croak '$sem->op( OPLIST )';
- my $self = shift;
- croak 'Bad arg count' if @_ % 3;
- my $data = pack("s*",@_);
- semop($$self,$data);
-}
-
-sub stat {
- my $self = shift;
- my $data = "";
- semctl($$self,0,IPC_STAT,$data)
- or return undef;
- IPC::Semaphore::stat->new->unpack($data);
-}
-
-sub set {
- my $self = shift;
- my $ds;
-
- if(@_ == 1) {
- $ds = shift;
- }
- else {
- croak 'Bad arg count' if @_ % 2;
- my %arg = @_;
- my $ds = $self->stat
- or return undef;
- my($key,$val);
- $ds->$key($val)
- while(($key,$val) = each %arg);
- }
-
- my $v = semctl($$self,0,IPC_SET,$ds->pack);
- $v ? 0 + $v : undef;
-}
-
-sub getall {
- my $self = shift;
- my $data = "";
- semctl($$self,0,GETALL,$data)
- or return ();
- (unpack("s*",$data));
-}
-
-sub setall {
- my $self = shift;
- my $data = pack("s*",@_);
- semctl($$self,0,SETALL,$data);
-}
-
-sub setval {
- @_ == 3 || croak '$sem->setval( SEM, VAL )';
- my $self = shift;
- my $sem = shift;
- my $val = shift;
- semctl($$self,$sem,SETVAL,$val);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-IPC::Semaphore - SysV Semaphore IPC object class
-
-=head1 SYNOPSIS
-
- use IPC::SysV qw(IPC_PRIVATE S_IRWXU IPC_CREAT);
- use IPC::Semaphore;
-
- $sem = new IPC::Semaphore(IPC_PRIVATE, 10, S_IRWXU | IPC_CREAT);
-
- $sem->setall( (0) x 10);
-
- @sem = $sem->getall;
-
- $ncnt = $sem->getncnt;
-
- $zcnt = $sem->getzcnt;
-
- $ds = $sem->stat;
-
- $sem->remove;
-
-=head1 DESCRIPTION
-
-=head1 METHODS
-
-=over 4
-
-=item new ( KEY , NSEMS , FLAGS )
-
-Create a new semaphore set associated with C<KEY>. C<NSEMS> is the number
-of semaphores in the set. A new set is created if
-
-=over 4
-
-=item *
-
-C<KEY> is equal to C<IPC_PRIVATE>
-
-=item *
-
-C<KEY> does not already have a semaphore identifier
-associated with it, and C<I<FLAGS> & IPC_CREAT> is true.
-
-=back
-
-On creation of a new semaphore set C<FLAGS> is used to set the
-permissions.
-
-=item getall
-
-Returns the values of the semaphore set as an array.
-
-=item getncnt ( SEM )
-
-Returns the number of processed waiting for the semaphore C<SEM> to
-become greater than it's current value
-
-=item getpid ( SEM )
-
-Returns the process id of the last process that performed an operation
-on the semaphore C<SEM>.
-
-=item getval ( SEM )
-
-Returns the current value of the semaphore C<SEM>.
-
-=item getzcnt ( SEM )
-
-Returns the number of processed waiting for the semaphore C<SEM> to
-become zero.
-
-=item id
-
-Returns the system identifier for the semaphore set.
-
-=item op ( OPLIST )
-
-C<OPLIST> is a list of operations to pass to C<semop>. C<OPLIST> is
-a concatenation of smaller lists, each which has three values. The
-first is the semaphore number, the second is the operation and the last
-is a flags value. See L<semop> for more details. For example
-
- $sem->op(
- 0, -1, IPC_NOWAIT,
- 1, 1, IPC_NOWAIT
- );
-
-=item remove
-
-Remove and destroy the semaphore set from the system.
-
-=item set ( STAT )
-
-=item set ( NAME => VALUE [, NAME => VALUE ...] )
-
-C<set> will set the following values of the C<stat> structure associated
-with the semaphore set.
-
- uid
- gid
- mode (oly the permission bits)
-
-C<set> accepts either a stat object, as returned by the C<stat> method,
-or a list of I<name>-I<value> pairs.
-
-=item setall ( VALUES )
-
-Sets all values in the semaphore set to those given on the C<VALUES> list.
-C<VALUES> must contain the correct number of values.
-
-=item setval ( N , VALUE )
-
-Set the C<N>th value in the semaphore set to C<VALUE>
-
-=item stat
-
-Returns an object of type C<IPC::Semaphore::stat> which is a sub-class of
-C<Class::Struct>. It provides the following fields. For a description
-of these fields see you system documentation.
-
- uid
- gid
- cuid
- cgid
- mode
- ctime
- otime
- nsems
-
-=back
-
-=head1 SEE ALSO
-
-L<IPC::SysV> L<Class::Struct> L<semget> L<semctl> L<semop>
-
-=head1 AUTHOR
-
-Graham Barr <gbarr@pobox.com>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997 Graham Barr. All rights reserved.
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
diff --git a/contrib/perl5/ext/IPC/SysV/SysV.pm b/contrib/perl5/ext/IPC/SysV/SysV.pm
deleted file mode 100644
index bebb8fd..0000000
--- a/contrib/perl5/ext/IPC/SysV/SysV.pm
+++ /dev/null
@@ -1,102 +0,0 @@
-# IPC::SysV.pm
-#
-# Copyright (c) 1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-
-package IPC::SysV;
-
-use strict;
-use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-use Carp;
-use Config;
-
-require Exporter;
-@ISA = qw(Exporter);
-
-$VERSION = "1.03";
-
-@EXPORT_OK = qw(
- GETALL GETNCNT GETPID GETVAL GETZCNT
-
- IPC_ALLOC IPC_CREAT IPC_EXCL IPC_GETACL IPC_LOCKED IPC_M
- IPC_NOERROR IPC_NOWAIT IPC_PRIVATE IPC_R IPC_RMID IPC_SET
- IPC_SETACL IPC_SETLABEL IPC_STAT IPC_W IPC_WANTED
-
- MSG_FWAIT MSG_LOCKED MSG_MWAIT MSG_NOERROR MSG_QWAIT
- MSG_R MSG_RWAIT MSG_STAT MSG_W MSG_WWAIT
-
- SEM_A SEM_ALLOC SEM_DEST SEM_ERR SEM_ORDER SEM_R SEM_UNDO
-
- SETALL SETVAL
-
- SHMLBA
-
- SHM_A SHM_CLEAR SHM_COPY SHM_DCACHE SHM_DEST SHM_ECACHE
- SHM_FMAP SHM_ICACHE SHM_INIT SHM_LOCK SHM_LOCKED SHM_MAP
- SHM_NOSWAP SHM_R SHM_RDONLY SHM_REMOVED SHM_RND SHM_SHARE_MMU
- SHM_SHATTR SHM_SIZE SHM_UNLOCK SHM_W
-
- S_IRUSR S_IWUSR S_IRWXU
- S_IRGRP S_IWGRP S_IRWXG
- S_IROTH S_IWOTH S_IRWXO
-
- ftok
-);
-
-BOOT_XS: {
- # If I inherit DynaLoader then I inherit AutoLoader and I DON'T WANT TO
- require DynaLoader;
-
- # DynaLoader calls dl_load_flags as a static method.
- *dl_load_flags = DynaLoader->can('dl_load_flags');
-
- do {
- __PACKAGE__->can('bootstrap') || \&DynaLoader::bootstrap
- }->(__PACKAGE__, $VERSION);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-IPC::SysV - SysV IPC constants
-
-=head1 SYNOPSIS
-
- use IPC::SysV qw(IPC_STAT IPC_PRIVATE);
-
-=head1 DESCRIPTION
-
-C<IPC::SysV> defines and conditionally exports all the constants
-defined in your system include files which are needed by the SysV
-IPC calls.
-
-=over
-
-=item ftok( PATH, ID )
-
-Return a key based on PATH and ID, which can be used as a key for
-C<msgget>, C<semget> and C<shmget>. See L<ftok>
-
-=back
-
-=head1 SEE ALSO
-
-L<IPC::Msg>, L<IPC::Semaphore>, L<ftok>
-
-=head1 AUTHORS
-
-Graham Barr <gbarr@pobox.com>
-Jarkko Hietaniemi <jhi@iki.fi>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1997 Graham Barr. All rights reserved.
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
diff --git a/contrib/perl5/ext/IPC/SysV/SysV.xs b/contrib/perl5/ext/IPC/SysV/SysV.xs
deleted file mode 100644
index c7985f9..0000000
--- a/contrib/perl5/ext/IPC/SysV/SysV.xs
+++ /dev/null
@@ -1,443 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include <sys/types.h>
-#ifdef __linux__
-# include <asm/page.h>
-#endif
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-#ifndef HAS_SEM
-# include <sys/ipc.h>
-#endif
-# ifdef HAS_MSG
-# include <sys/msg.h>
-# endif
-# ifdef HAS_SHM
-# if defined(PERL_SCO) || defined(PERL_ISC)
-# include <sys/sysmacros.h> /* SHMLBA */
-# endif
-# include <sys/shm.h>
-# ifndef HAS_SHMAT_PROTOTYPE
- extern Shmat_t shmat (int, char *, int);
-# endif
-# if defined(__sparc__) && (defined(__NetBSD__) || defined(__OpenBSD__))
-# undef SHMLBA /* not static: determined at boot time */
-# define SHMLBA getpagesize()
-# endif
-# endif
-#endif
-
-/* Required to get 'struct pte' for SHMLBA on ULTRIX. */
-#if defined(__ultrix) || defined(__ultrix__) || defined(ultrix)
-#include <machine/pte.h>
-#endif
-
-/* Required in BSDI to get PAGE_SIZE definition for SHMLBA.
- * Ugly. More beautiful solutions welcome.
- * Shouting at BSDI sounds quite beautiful. */
-#ifdef __bsdi__
-# include <vm/vm_param.h> /* move upwards under HAS_SHM? */
-#endif
-
-#ifndef S_IRWXU
-# ifdef S_IRUSR
-# define S_IRWXU (S_IRUSR|S_IWUSR|S_IWUSR)
-# define S_IRWXG (S_IRGRP|S_IWGRP|S_IWGRP)
-# define S_IRWXO (S_IROTH|S_IWOTH|S_IWOTH)
-# else
-# define S_IRWXU 0700
-# define S_IRWXG 0070
-# define S_IRWXO 0007
-# endif
-#endif
-
-MODULE=IPC::SysV PACKAGE=IPC::Msg::stat
-
-PROTOTYPES: ENABLE
-
-void
-pack(obj)
- SV * obj
-PPCODE:
-{
-#ifdef HAS_MSG
- SV *sv;
- struct msqid_ds ds;
- AV *list = (AV*)SvRV(obj);
- sv = *av_fetch(list,0,TRUE); ds.msg_perm.uid = SvIV(sv);
- sv = *av_fetch(list,1,TRUE); ds.msg_perm.gid = SvIV(sv);
- sv = *av_fetch(list,4,TRUE); ds.msg_perm.mode = SvIV(sv);
- sv = *av_fetch(list,6,TRUE); ds.msg_qbytes = SvIV(sv);
- ST(0) = sv_2mortal(newSVpvn((char *)&ds,sizeof(ds)));
- XSRETURN(1);
-#else
- croak("System V msgxxx is not implemented on this machine");
-#endif
-}
-
-void
-unpack(obj,buf)
- SV * obj
- SV * buf
-PPCODE:
-{
-#ifdef HAS_MSG
- STRLEN len;
- SV **sv_ptr;
- struct msqid_ds *ds = (struct msqid_ds *)SvPV(buf,len);
- AV *list = (AV*)SvRV(obj);
- if (len != sizeof(*ds)) {
- croak("Bad arg length for %s, length is %d, should be %d",
- "IPC::Msg::stat",
- len, sizeof(*ds));
- }
- sv_ptr = av_fetch(list,0,TRUE);
- sv_setiv(*sv_ptr, ds->msg_perm.uid);
- sv_ptr = av_fetch(list,1,TRUE);
- sv_setiv(*sv_ptr, ds->msg_perm.gid);
- sv_ptr = av_fetch(list,2,TRUE);
- sv_setiv(*sv_ptr, ds->msg_perm.cuid);
- sv_ptr = av_fetch(list,3,TRUE);
- sv_setiv(*sv_ptr, ds->msg_perm.cgid);
- sv_ptr = av_fetch(list,4,TRUE);
- sv_setiv(*sv_ptr, ds->msg_perm.mode);
- sv_ptr = av_fetch(list,5,TRUE);
- sv_setiv(*sv_ptr, ds->msg_qnum);
- sv_ptr = av_fetch(list,6,TRUE);
- sv_setiv(*sv_ptr, ds->msg_qbytes);
- sv_ptr = av_fetch(list,7,TRUE);
- sv_setiv(*sv_ptr, ds->msg_lspid);
- sv_ptr = av_fetch(list,8,TRUE);
- sv_setiv(*sv_ptr, ds->msg_lrpid);
- sv_ptr = av_fetch(list,9,TRUE);
- sv_setiv(*sv_ptr, ds->msg_stime);
- sv_ptr = av_fetch(list,10,TRUE);
- sv_setiv(*sv_ptr, ds->msg_rtime);
- sv_ptr = av_fetch(list,11,TRUE);
- sv_setiv(*sv_ptr, ds->msg_ctime);
- XSRETURN(1);
-#else
- croak("System V msgxxx is not implemented on this machine");
-#endif
-}
-
-MODULE=IPC::SysV PACKAGE=IPC::Semaphore::stat
-
-void
-unpack(obj,ds)
- SV * obj
- SV * ds
-PPCODE:
-{
-#ifdef HAS_SEM
- STRLEN len;
- AV *list = (AV*)SvRV(obj);
- struct semid_ds *data = (struct semid_ds *)SvPV(ds,len);
- if(!sv_isa(obj, "IPC::Semaphore::stat"))
- croak("method %s not called a %s object",
- "unpack","IPC::Semaphore::stat");
- if (len != sizeof(*data)) {
- croak("Bad arg length for %s, length is %d, should be %d",
- "IPC::Semaphore::stat",
- len, sizeof(*data));
- }
- sv_setiv(*av_fetch(list,0,TRUE), data[0].sem_perm.uid);
- sv_setiv(*av_fetch(list,1,TRUE), data[0].sem_perm.gid);
- sv_setiv(*av_fetch(list,2,TRUE), data[0].sem_perm.cuid);
- sv_setiv(*av_fetch(list,3,TRUE), data[0].sem_perm.cgid);
- sv_setiv(*av_fetch(list,4,TRUE), data[0].sem_perm.mode);
- sv_setiv(*av_fetch(list,5,TRUE), data[0].sem_ctime);
- sv_setiv(*av_fetch(list,6,TRUE), data[0].sem_otime);
- sv_setiv(*av_fetch(list,7,TRUE), data[0].sem_nsems);
- XSRETURN(1);
-#else
- croak("System V semxxx is not implemented on this machine");
-#endif
-}
-
-void
-pack(obj)
- SV * obj
-PPCODE:
-{
-#ifdef HAS_SEM
- SV **sv_ptr;
- SV *sv;
- struct semid_ds ds;
- AV *list = (AV*)SvRV(obj);
- if(!sv_isa(obj, "IPC::Semaphore::stat"))
- croak("method %s not called a %s object",
- "pack","IPC::Semaphore::stat");
- if((sv_ptr = av_fetch(list,0,TRUE)) && (sv = *sv_ptr))
- ds.sem_perm.uid = SvIV(*sv_ptr);
- if((sv_ptr = av_fetch(list,1,TRUE)) && (sv = *sv_ptr))
- ds.sem_perm.gid = SvIV(*sv_ptr);
- if((sv_ptr = av_fetch(list,2,TRUE)) && (sv = *sv_ptr))
- ds.sem_perm.cuid = SvIV(*sv_ptr);
- if((sv_ptr = av_fetch(list,3,TRUE)) && (sv = *sv_ptr))
- ds.sem_perm.cgid = SvIV(*sv_ptr);
- if((sv_ptr = av_fetch(list,4,TRUE)) && (sv = *sv_ptr))
- ds.sem_perm.mode = SvIV(*sv_ptr);
- if((sv_ptr = av_fetch(list,5,TRUE)) && (sv = *sv_ptr))
- ds.sem_ctime = SvIV(*sv_ptr);
- if((sv_ptr = av_fetch(list,6,TRUE)) && (sv = *sv_ptr))
- ds.sem_otime = SvIV(*sv_ptr);
- if((sv_ptr = av_fetch(list,7,TRUE)) && (sv = *sv_ptr))
- ds.sem_nsems = SvIV(*sv_ptr);
- ST(0) = sv_2mortal(newSVpvn((char *)&ds,sizeof(ds)));
- XSRETURN(1);
-#else
- croak("System V semxxx is not implemented on this machine");
-#endif
-}
-
-MODULE=IPC::SysV PACKAGE=IPC::SysV
-
-void
-ftok(path, id)
- char * path
- int id
- CODE:
-#if defined(HAS_SEM) || defined(HAS_SHM)
- key_t k = ftok(path, id);
- ST(0) = k == (key_t) -1 ? &PL_sv_undef : sv_2mortal(newSViv(k));
-#else
- DIE(aTHX_ PL_no_func, "ftok");
-#endif
-
-void
-SHMLBA()
- CODE:
-#ifdef SHMLBA
- ST(0) = sv_2mortal(newSViv(SHMLBA));
-#else
- croak("SHMLBA is not defined on this architecture");
-#endif
-
-BOOT:
-{
- HV *stash = gv_stashpvn("IPC::SysV", 9, TRUE);
- /*
- * constant subs for IPC::SysV
- */
- struct { char *n; I32 v; } IPC__SysV__const[] = {
-#ifdef GETVAL
- {"GETVAL", GETVAL},
-#endif
-#ifdef GETPID
- {"GETPID", GETPID},
-#endif
-#ifdef GETNCNT
- {"GETNCNT", GETNCNT},
-#endif
-#ifdef GETZCNT
- {"GETZCNT", GETZCNT},
-#endif
-#ifdef GETALL
- {"GETALL", GETALL},
-#endif
-#ifdef IPC_ALLOC
- {"IPC_ALLOC", IPC_ALLOC},
-#endif
-#ifdef IPC_CREAT
- {"IPC_CREAT", IPC_CREAT},
-#endif
-#ifdef IPC_EXCL
- {"IPC_EXCL", IPC_EXCL},
-#endif
-#ifdef IPC_GETACL
- {"IPC_GETACL", IPC_EXCL},
-#endif
-#ifdef IPC_LOCKED
- {"IPC_LOCKED", IPC_LOCKED},
-#endif
-#ifdef IPC_M
- {"IPC_M", IPC_M},
-#endif
-#ifdef IPC_NOERROR
- {"IPC_NOERROR", IPC_NOERROR},
-#endif
-#ifdef IPC_NOWAIT
- {"IPC_NOWAIT", IPC_NOWAIT},
-#endif
-#ifdef IPC_PRIVATE
- {"IPC_PRIVATE", IPC_PRIVATE},
-#endif
-#ifdef IPC_R
- {"IPC_R", IPC_R},
-#endif
-#ifdef IPC_RMID
- {"IPC_RMID", IPC_RMID},
-#endif
-#ifdef IPC_SET
- {"IPC_SET", IPC_SET},
-#endif
-#ifdef IPC_SETACL
- {"IPC_SETACL", IPC_SETACL},
-#endif
-#ifdef IPC_SETLABEL
- {"IPC_SETLABEL", IPC_SETLABEL},
-#endif
-#ifdef IPC_STAT
- {"IPC_STAT", IPC_STAT},
-#endif
-#ifdef IPC_W
- {"IPC_W", IPC_W},
-#endif
-#ifdef IPC_WANTED
- {"IPC_WANTED", IPC_WANTED},
-#endif
-#ifdef MSG_NOERROR
- {"MSG_NOERROR", MSG_NOERROR},
-#endif
-#ifdef MSG_FWAIT
- {"MSG_FWAIT", MSG_FWAIT},
-#endif
-#ifdef MSG_LOCKED
- {"MSG_LOCKED", MSG_LOCKED},
-#endif
-#ifdef MSG_MWAIT
- {"MSG_MWAIT", MSG_MWAIT},
-#endif
-#ifdef MSG_WAIT
- {"MSG_WAIT", MSG_WAIT},
-#endif
-#ifdef MSG_R
- {"MSG_R", MSG_R},
-#endif
-#ifdef MSG_RWAIT
- {"MSG_RWAIT", MSG_RWAIT},
-#endif
-#ifdef MSG_STAT
- {"MSG_STAT", MSG_STAT},
-#endif
-#ifdef MSG_W
- {"MSG_W", MSG_W},
-#endif
-#ifdef MSG_WWAIT
- {"MSG_WWAIT", MSG_WWAIT},
-#endif
-#ifdef SEM_A
- {"SEM_A", SEM_A},
-#endif
-#ifdef SEM_ALLOC
- {"SEM_ALLOC", SEM_ALLOC},
-#endif
-#ifdef SEM_DEST
- {"SEM_DEST", SEM_DEST},
-#endif
-#ifdef SEM_ERR
- {"SEM_ERR", SEM_ERR},
-#endif
-#ifdef SEM_R
- {"SEM_R", SEM_R},
-#endif
-#ifdef SEM_ORDER
- {"SEM_ORDER", SEM_ORDER},
-#endif
-#ifdef SEM_UNDO
- {"SEM_UNDO", SEM_UNDO},
-#endif
-#ifdef SETVAL
- {"SETVAL", SETVAL},
-#endif
-#ifdef SETALL
- {"SETALL", SETALL},
-#endif
-#ifdef SHM_CLEAR
- {"SHM_CLEAR", SHM_CLEAR},
-#endif
-#ifdef SHM_COPY
- {"SHM_COPY", SHM_COPY},
-#endif
-#ifdef SHM_DCACHE
- {"SHM_DCACHE", SHM_DCACHE},
-#endif
-#ifdef SHM_DEST
- {"SHM_DEST", SHM_DEST},
-#endif
-#ifdef SHM_ECACHE
- {"SHM_ECACHE", SHM_ECACHE},
-#endif
-#ifdef SHM_FMAP
- {"SHM_FMAP", SHM_FMAP},
-#endif
-#ifdef SHM_ICACHE
- {"SHM_ICACHE", SHM_ICACHE},
-#endif
-#ifdef SHM_INIT
- {"SHM_INIT", SHM_INIT},
-#endif
-#ifdef SHM_LOCK
- {"SHM_LOCK", SHM_LOCK},
-#endif
-#ifdef SHM_LOCKED
- {"SHM_LOCKED", SHM_LOCKED},
-#endif
-#ifdef SHM_MAP
- {"SHM_MAP", SHM_MAP},
-#endif
-#ifdef SHM_NOSWAP
- {"SHM_NOSWAP", SHM_NOSWAP},
-#endif
-#ifdef SHM_RDONLY
- {"SHM_RDONLY", SHM_RDONLY},
-#endif
-#ifdef SHM_REMOVED
- {"SHM_REMOVED", SHM_REMOVED},
-#endif
-#ifdef SHM_RND
- {"SHM_RND", SHM_RND},
-#endif
-#ifdef SHM_SHARE_MMU
- {"SHM_SHARE_MMU", SHM_SHARE_MMU},
-#endif
-#ifdef SHM_SHATTR
- {"SHM_SHATTR", SHM_SHATTR},
-#endif
-#ifdef SHM_SIZE
- {"SHM_SIZE", SHM_SIZE},
-#endif
-#ifdef SHM_UNLOCK
- {"SHM_UNLOCK", SHM_UNLOCK},
-#endif
-#ifdef SHM_W
- {"SHM_W", SHM_W},
-#endif
-#ifdef S_IRUSR
- {"S_IRUSR", S_IRUSR},
-#endif
-#ifdef S_IWUSR
- {"S_IWUSR", S_IWUSR},
-#endif
-#ifdef S_IRWXU
- {"S_IRWXU", S_IRWXU},
-#endif
-#ifdef S_IRGRP
- {"S_IRGRP", S_IRGRP},
-#endif
-#ifdef S_IWGRP
- {"S_IWGRP", S_IWGRP},
-#endif
-#ifdef S_IRWXG
- {"S_IRWXG", S_IRWXG},
-#endif
-#ifdef S_IROTH
- {"S_IROTH", S_IROTH},
-#endif
-#ifdef S_IWOTH
- {"S_IWOTH", S_IWOTH},
-#endif
-#ifdef S_IRWXO
- {"S_IRWXO", S_IRWXO},
-#endif
- {Nullch,0}};
- char *name;
- int i;
-
- for(i = 0 ; (name = IPC__SysV__const[i].n) ; i++) {
- newCONSTSUB(stash,name, newSViv(IPC__SysV__const[i].v));
- }
-}
-
diff --git a/contrib/perl5/ext/IPC/SysV/hints/cygwin.pl b/contrib/perl5/ext/IPC/SysV/hints/cygwin.pl
deleted file mode 100644
index e1a1dea..0000000
--- a/contrib/perl5/ext/IPC/SysV/hints/cygwin.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-# SysV IPC is an optional Cygwin package
-$self->{LIBS} = ['-lcygipc']
diff --git a/contrib/perl5/ext/IPC/SysV/hints/next_3.pl b/contrib/perl5/ext/IPC/SysV/hints/next_3.pl
deleted file mode 100644
index 2290ac7..0000000
--- a/contrib/perl5/ext/IPC/SysV/hints/next_3.pl
+++ /dev/null
@@ -1 +0,0 @@
-$self->{CCFLAGS} = $Config{ccflags} . ' -D_POSIX_SOURCE' ;
diff --git a/contrib/perl5/ext/IPC/SysV/t/msg.t b/contrib/perl5/ext/IPC/SysV/t/msg.t
deleted file mode 100755
index 2a982f0..0000000
--- a/contrib/perl5/ext/IPC/SysV/t/msg.t
+++ /dev/null
@@ -1,41 +0,0 @@
-use IPC::SysV qw(IPC_PRIVATE IPC_RMID IPC_NOWAIT IPC_STAT S_IRWXU S_IRWXG S_IRWXO);
-
-use IPC::Msg;
-#Creating a message queue
-
-print "1..9\n";
-
-$msq = new IPC::Msg(IPC_PRIVATE, S_IRWXU | S_IRWXG | S_IRWXO)
- || die "msgget: ",$!+0," $!\n";
-
-print "ok 1\n";
-
-#Putting a message on the queue
-$msgtype = 1;
-$msg = "hello";
-$msq->snd($msgtype,$msg,0) || print "not ";
-print "ok 2\n";
-
-#Check if there are messages on the queue
-$ds = $msq->stat() or print "not ";
-print "ok 3\n";
-
-print "not " unless $ds && $ds->qnum() == 1;
-print "ok 4\n";
-
-#Retreiving a message from the queue
-$rmsgtype = 0; # Give me any type
-$rmsgtype = $msq->rcv($rmsg,256,$rmsgtype,IPC_NOWAIT) || print "not ";
-print "ok 5\n";
-
-print "not " unless $rmsgtype == $msgtype && $rmsg eq $msg;
-print "ok 6\n";
-
-$ds = $msq->stat() or print "not ";
-print "ok 7\n";
-
-print "not " unless $ds && $ds->qnum() == 0;
-print "ok 8\n";
-
-$msq->remove || print "not ";
-print "ok 9\n";
diff --git a/contrib/perl5/ext/IPC/SysV/t/sem.t b/contrib/perl5/ext/IPC/SysV/t/sem.t
deleted file mode 100755
index 9d6fff6..0000000
--- a/contrib/perl5/ext/IPC/SysV/t/sem.t
+++ /dev/null
@@ -1,51 +0,0 @@
-
-use IPC::SysV qw(
- SETALL
- IPC_PRIVATE
- IPC_CREAT
- IPC_RMID
- IPC_NOWAIT
- IPC_STAT
- S_IRWXU
- S_IRWXG
- S_IRWXO
-);
-use IPC::Semaphore;
-
-print "1..10\n";
-
-$sem = new IPC::Semaphore(IPC_PRIVATE, 10, S_IRWXU | S_IRWXG | S_IRWXO | IPC_CREAT)
- || die "semget: ",$!+0," $!\n";
-
-print "ok 1\n";
-
-my $st = $sem->stat || print "not ";
-print "ok 2\n";
-
-$sem->setall( (0) x 10) || print "not ";
-print "ok 3\n";
-
-my @sem = $sem->getall;
-print "not " unless join("",@sem) eq "0000000000";
-print "ok 4\n";
-
-$sem[2] = 1;
-$sem->setall( @sem ) || print "not ";
-print "ok 5\n";
-
-@sem = $sem->getall;
-print "not " unless join("",@sem) eq "0010000000";
-print "ok 6\n";
-
-my $ncnt = $sem->getncnt(0);
-print "not " if $sem->getncnt(0) || !defined($ncnt);
-print "ok 7\n";
-
-$sem->op(2,-1,IPC_NOWAIT) || print "not ";
-print "ok 8\n";
-
-print "not " if $sem->getncnt(0);
-print "ok 9\n";
-
-$sem->remove || print "not ";
-print "ok 10\n";
diff --git a/contrib/perl5/ext/NDBM_File/Makefile.PL b/contrib/perl5/ext/NDBM_File/Makefile.PL
deleted file mode 100644
index 7b58601..0000000
--- a/contrib/perl5/ext/NDBM_File/Makefile.PL
+++ /dev/null
@@ -1,9 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'NDBM_File',
- LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"],
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes', # XXX remove later?
- VERSION_FROM => 'NDBM_File.pm',
- INC => ($^O eq "MacOS" ? "-i ::::db:include" : "")
-);
diff --git a/contrib/perl5/ext/NDBM_File/NDBM_File.pm b/contrib/perl5/ext/NDBM_File/NDBM_File.pm
deleted file mode 100644
index b280459..0000000
--- a/contrib/perl5/ext/NDBM_File/NDBM_File.pm
+++ /dev/null
@@ -1,113 +0,0 @@
-package NDBM_File;
-
-use strict;
-use warnings;
-
-require Tie::Hash;
-use XSLoader ();
-
-our @ISA = qw(Tie::Hash);
-our $VERSION = "1.04";
-
-XSLoader::load 'NDBM_File', $VERSION;
-
-1;
-
-__END__
-
-=head1 NAME
-
-NDBM_File - Tied access to ndbm files
-
-=head1 SYNOPSIS
-
- use Fcntl; # For O_RDWR, O_CREAT, etc.
- use NDBM_File;
-
- # Now read and change the hash
- $h{newkey} = newvalue;
- print $h{oldkey};
- ...
-
- untie %h;
-
-=head1 DESCRIPTION
-
-C<NDBM_File> establishes a connection between a Perl hash variable and
-a file in NDBM_File format;. You can manipulate the data in the file
-just as if it were in a Perl hash, but when your program exits, the
-data will remain in the file, to be used the next time your program
-runs.
-
-Use C<NDBM_File> with the Perl built-in C<tie> function to establish
-the connection between the variable and the file. The arguments to
-C<tie> should be:
-
-=over 4
-
-=item 1.
-
-The hash variable you want to tie.
-
-=item 2.
-
-The string C<"NDBM_File">. (Ths tells Perl to use the C<NDBM_File>
-package to perform the functions of the hash.)
-
-=item 3.
-
-The name of the file you want to tie to the hash.
-
-=item 4.
-
-Flags. Use one of:
-
-=over 2
-
-=item C<O_RDONLY>
-
-Read-only access to the data in the file.
-
-=item C<O_WRONLY>
-
-Write-only access to the data in the file.
-
-=item C<O_RDWR>
-
-Both read and write access.
-
-=back
-
-If you want to create the file if it does not exist, add C<O_CREAT> to
-any of these, as in the example. If you omit C<O_CREAT> and the file
-does not already exist, the C<tie> call will fail.
-
-=item 5.
-
-The default permissions to use if a new file is created. The actual
-permissions will be modified by the user's umask, so you should
-probably use 0666 here. (See L<perlfunc/umask>.)
-
-=back
-
-=head1 DIAGNOSTICS
-
-On failure, the C<tie> call returns an undefined value and probably
-sets C<$!> to contain the reason the file could not be tied.
-
-=head2 C<ndbm store returned -1, errno 22, key "..." at ...>
-
-This warning is emmitted when you try to store a key or a value that
-is too long. It means that the change was not recorded in the
-database. See BUGS AND WARNINGS below.
-
-=head1 BUGS AND WARNINGS
-
-There are a number of limits on the size of the data that you can
-store in the NDBM file. The most important is that the length of a
-key, plus the length of its associated value, may not exceed 1008
-bytes.
-
-See L<perlfunc/tie>, L<perldbmfilter>, L<Fcntl>
-
-=cut
diff --git a/contrib/perl5/ext/NDBM_File/NDBM_File.xs b/contrib/perl5/ext/NDBM_File/NDBM_File.xs
deleted file mode 100644
index c417eb6..0000000
--- a/contrib/perl5/ext/NDBM_File/NDBM_File.xs
+++ /dev/null
@@ -1,173 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-/* If using the DB3 emulation, ENTER is defined both
- * by DB3 and Perl. We drop the Perl definition now.
- * See also INSTALL section on DB3.
- * -- Stanislav Brabec <utx@penguin.cz> */
-#undef ENTER
-#include <ndbm.h>
-
-typedef struct {
- DBM * dbp ;
- SV * filter_fetch_key ;
- SV * filter_store_key ;
- SV * filter_fetch_value ;
- SV * filter_store_value ;
- int filtering ;
- } NDBM_File_type;
-
-typedef NDBM_File_type * NDBM_File ;
-typedef datum datum_key ;
-typedef datum datum_value ;
-
-#define ckFilter(arg,type,name) \
- if (db->type) { \
- SV * save_defsv ; \
- /* printf("filtering %s\n", name) ;*/ \
- if (db->filtering) \
- croak("recursion detected in %s", name) ; \
- db->filtering = TRUE ; \
- save_defsv = newSVsv(DEFSV) ; \
- sv_setsv(DEFSV, arg) ; \
- PUSHMARK(sp) ; \
- (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \
- sv_setsv(arg, DEFSV) ; \
- sv_setsv(DEFSV, save_defsv) ; \
- SvREFCNT_dec(save_defsv) ; \
- db->filtering = FALSE ; \
- /*printf("end of filtering %s\n", name) ;*/ \
- }
-
-
-MODULE = NDBM_File PACKAGE = NDBM_File PREFIX = ndbm_
-
-NDBM_File
-ndbm_TIEHASH(dbtype, filename, flags, mode)
- char * dbtype
- char * filename
- int flags
- int mode
- CODE:
- {
- DBM * dbp ;
-
- RETVAL = NULL ;
- if (dbp = dbm_open(filename, flags, mode)) {
- RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ;
- Zero(RETVAL, 1, NDBM_File_type) ;
- RETVAL->dbp = dbp ;
- }
-
- }
- OUTPUT:
- RETVAL
-
-void
-ndbm_DESTROY(db)
- NDBM_File db
- CODE:
- dbm_close(db->dbp);
- safefree(db);
-
-#define ndbm_FETCH(db,key) dbm_fetch(db->dbp,key)
-datum_value
-ndbm_FETCH(db, key)
- NDBM_File db
- datum_key key
-
-#define ndbm_STORE(db,key,value,flags) dbm_store(db->dbp,key,value,flags)
-int
-ndbm_STORE(db, key, value, flags = DBM_REPLACE)
- NDBM_File db
- datum_key key
- datum_value value
- int flags
- CLEANUP:
- if (RETVAL) {
- if (RETVAL < 0 && errno == EPERM)
- croak("No write permission to ndbm file");
- croak("ndbm store returned %d, errno %d, key \"%s\"",
- RETVAL,errno,key.dptr);
- dbm_clearerr(db->dbp);
- }
-
-#define ndbm_DELETE(db,key) dbm_delete(db->dbp,key)
-int
-ndbm_DELETE(db, key)
- NDBM_File db
- datum_key key
-
-#define ndbm_FIRSTKEY(db) dbm_firstkey(db->dbp)
-datum_key
-ndbm_FIRSTKEY(db)
- NDBM_File db
-
-#define ndbm_NEXTKEY(db,key) dbm_nextkey(db->dbp)
-datum_key
-ndbm_NEXTKEY(db, key)
- NDBM_File db
- datum_key key
-
-#define ndbm_error(db) dbm_error(db->dbp)
-int
-ndbm_error(db)
- NDBM_File db
-
-#define ndbm_clearerr(db) dbm_clearerr(db->dbp)
-void
-ndbm_clearerr(db)
- NDBM_File db
-
-
-#define setFilter(type) \
- { \
- if (db->type) \
- RETVAL = sv_mortalcopy(db->type) ; \
- ST(0) = RETVAL ; \
- if (db->type && (code == &PL_sv_undef)) { \
- SvREFCNT_dec(db->type) ; \
- db->type = NULL ; \
- } \
- else if (code) { \
- if (db->type) \
- sv_setsv(db->type, code) ; \
- else \
- db->type = newSVsv(code) ; \
- } \
- }
-
-
-
-SV *
-filter_fetch_key(db, code)
- NDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_key) ;
-
-SV *
-filter_store_key(db, code)
- NDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_key) ;
-
-SV *
-filter_fetch_value(db, code)
- NDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_value) ;
-
-SV *
-filter_store_value(db, code)
- NDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_value) ;
-
diff --git a/contrib/perl5/ext/NDBM_File/hints/cygwin.pl b/contrib/perl5/ext/NDBM_File/hints/cygwin.pl
deleted file mode 100644
index 0a4b762..0000000
--- a/contrib/perl5/ext/NDBM_File/hints/cygwin.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-# uses GDBM ndbm compatibility feature
-$self->{LIBS} = ['-lgdbm'];
diff --git a/contrib/perl5/ext/NDBM_File/hints/dec_osf.pl b/contrib/perl5/ext/NDBM_File/hints/dec_osf.pl
deleted file mode 100644
index e96d907..0000000
--- a/contrib/perl5/ext/NDBM_File/hints/dec_osf.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-# Spider Boardman <spider@Orb.Nashua.NH.US>
-$self->{LIBS} = [''];
diff --git a/contrib/perl5/ext/NDBM_File/hints/dynixptx.pl b/contrib/perl5/ext/NDBM_File/hints/dynixptx.pl
deleted file mode 100644
index d402c17..0000000
--- a/contrib/perl5/ext/NDBM_File/hints/dynixptx.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# On DYNIX/ptx 4.0 (v4.1.3), ndbm is actually contained in the
-# libc library, and must be explicitly linked against -lc when compiling.
-$self->{LIBS} = ['-lc'];
diff --git a/contrib/perl5/ext/NDBM_File/hints/sco.pl b/contrib/perl5/ext/NDBM_File/hints/sco.pl
deleted file mode 100644
index f551578..0000000
--- a/contrib/perl5/ext/NDBM_File/hints/sco.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-# SCO ODT 3.2v4.2 has a -ldbm library that is missing dbmclose.
-# This system should have a complete library installed as -ldbm.nfs which
-# should be used instead (Probably need the networking product add-on)
-$self->{LIBS} = ['-lndbm',-e "/usr/lib/libdbm.nfs.a"?'-ldbm.nfs':'-ldbm'];
diff --git a/contrib/perl5/ext/NDBM_File/hints/solaris.pl b/contrib/perl5/ext/NDBM_File/hints/solaris.pl
deleted file mode 100644
index 11310a9..0000000
--- a/contrib/perl5/ext/NDBM_File/hints/solaris.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# -lucb has been reported to be fatal for perl5 on Solaris.
-# Thus we deliberately don't include it here.
-$self->{LIBS} = ["-lndbm", "-ldbm"];
diff --git a/contrib/perl5/ext/NDBM_File/hints/svr4.pl b/contrib/perl5/ext/NDBM_File/hints/svr4.pl
deleted file mode 100644
index 3285d9a..0000000
--- a/contrib/perl5/ext/NDBM_File/hints/svr4.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-# Some SVR4 systems may need to link against routines in -lucb for
-# odbm. Some may also need to link against -lc to pick up things like
-# ecvt.
-$self->{LIBS} = ['-ldbm -lucb -lc'];
diff --git a/contrib/perl5/ext/NDBM_File/typemap b/contrib/perl5/ext/NDBM_File/typemap
deleted file mode 100644
index 40b95f2..0000000
--- a/contrib/perl5/ext/NDBM_File/typemap
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-#################################### DBM SECTION
-#
-
-datum_key T_DATUM_K
-datum_value T_DATUM_V
-gdatum T_GDATUM
-NDBM_File T_PTROBJ
-GDBM_File T_PTROBJ
-SDBM_File T_PTROBJ
-ODBM_File T_PTROBJ
-DB_File T_PTROBJ
-DBZ_File T_PTROBJ
-FATALFUNC T_OPAQUEPTR
-
-INPUT
-T_DATUM_K
- ckFilter($arg, filter_store_key, \"filter_store_key\");
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
-T_DATUM_V
- ckFilter($arg, filter_store_value, \"filter_store_value\");
- if (SvOK($arg)) {
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
- }
- else {
- $var.dptr = \"\";
- $var.dsize = 0;
- }
-T_GDATUM
- UNIMPLEMENTED
-OUTPUT
-T_DATUM_K
- sv_setpvn($arg, $var.dptr, $var.dsize);
- ckFilter($arg, filter_fetch_key,\"filter_fetch_key\");
-T_DATUM_V
- sv_setpvn($arg, $var.dptr, $var.dsize);
- ckFilter($arg, filter_fetch_value,\"filter_fetch_value\");
-T_GDATUM
- sv_usepvn($arg, $var.dptr, $var.dsize);
-T_PTROBJ
- sv_setref_pv($arg, dbtype, (void*)$var);
diff --git a/contrib/perl5/ext/ODBM_File/Makefile.PL b/contrib/perl5/ext/ODBM_File/Makefile.PL
deleted file mode 100644
index 2732a32..0000000
--- a/contrib/perl5/ext/ODBM_File/Makefile.PL
+++ /dev/null
@@ -1,8 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'ODBM_File',
- LIBS => ["-ldbm -lucb"],
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes', # XXX remove later?
- VERSION_FROM => 'ODBM_File.pm',
-);
diff --git a/contrib/perl5/ext/ODBM_File/ODBM_File.pm b/contrib/perl5/ext/ODBM_File/ODBM_File.pm
deleted file mode 100644
index 9e8e008..0000000
--- a/contrib/perl5/ext/ODBM_File/ODBM_File.pm
+++ /dev/null
@@ -1,113 +0,0 @@
-package ODBM_File;
-
-use strict;
-use warnings;
-
-require Tie::Hash;
-use XSLoader ();
-
-our @ISA = qw(Tie::Hash);
-our $VERSION = "1.03";
-
-XSLoader::load 'ODBM_File', $VERSION;
-
-1;
-
-__END__
-
-=head1 NAME
-
-ODBM_File - Tied access to odbm files
-
-=head1 SYNOPSIS
-
- use Fcntl; # For O_RDWR, O_CREAT, etc.
- use ODBM_File;
-
- # Now read and change the hash
- $h{newkey} = newvalue;
- print $h{oldkey};
- ...
-
- untie %h;
-
-=head1 DESCRIPTION
-
-C<ODBM_File> establishes a connection between a Perl hash variable and
-a file in ODBM_File format;. You can manipulate the data in the file
-just as if it were in a Perl hash, but when your program exits, the
-data will remain in the file, to be used the next time your program
-runs.
-
-Use C<ODBM_File> with the Perl built-in C<tie> function to establish
-the connection between the variable and the file. The arguments to
-C<tie> should be:
-
-=over 4
-
-=item 1.
-
-The hash variable you want to tie.
-
-=item 2.
-
-The string C<"ODBM_File">. (Ths tells Perl to use the C<ODBM_File>
-package to perform the functions of the hash.)
-
-=item 3.
-
-The name of the file you want to tie to the hash.
-
-=item 4.
-
-Flags. Use one of:
-
-=over 2
-
-=item C<O_RDONLY>
-
-Read-only access to the data in the file.
-
-=item C<O_WRONLY>
-
-Write-only access to the data in the file.
-
-=item C<O_RDWR>
-
-Both read and write access.
-
-=back
-
-If you want to create the file if it does not exist, add C<O_CREAT> to
-any of these, as in the example. If you omit C<O_CREAT> and the file
-does not already exist, the C<tie> call will fail.
-
-=item 5.
-
-The default permissions to use if a new file is created. The actual
-permissions will be modified by the user's umask, so you should
-probably use 0666 here. (See L<perlfunc/umask>.)
-
-=back
-
-=head1 DIAGNOSTICS
-
-On failure, the C<tie> call returns an undefined value and probably
-sets C<$!> to contain the reason the file could not be tied.
-
-=head2 C<odbm store returned -1, errno 22, key "..." at ...>
-
-This warning is emmitted when you try to store a key or a value that
-is too long. It means that the change was not recorded in the
-database. See BUGS AND WARNINGS below.
-
-=head1 BUGS AND WARNINGS
-
-There are a number of limits on the size of the data that you can
-store in the ODBM file. The most important is that the length of a
-key, plus the length of its associated value, may not exceed 1008
-bytes.
-
-See L<perlfunc/tie>, L<perldbmfilter>, L<Fcntl>
-
-=cut
diff --git a/contrib/perl5/ext/ODBM_File/ODBM_File.xs b/contrib/perl5/ext/ODBM_File/ODBM_File.xs
deleted file mode 100644
index 27174ef..0000000
--- a/contrib/perl5/ext/ODBM_File/ODBM_File.xs
+++ /dev/null
@@ -1,207 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifdef I_DBM
-/* If using the DB3 emulation, ENTER is defined both
- * by DB3 and Perl. We drop the Perl definition now.
- * See also INSTALL section on DB3.
- * -- Stanislav Brabec <utx@penguin.cz> */
-# undef ENTER
-# include <dbm.h>
-#else
-# ifdef I_RPCSVC_DBM
-# include <rpcsvc/dbm.h>
-# endif
-#endif
-
-#ifdef DBM_BUG_DUPLICATE_FREE
-/*
- * DBM on at least Ultrix and HPUX call dbmclose() from dbminit(),
- * resulting in duplicate free() because dbmclose() does *not*
- * check if it has already been called for this DBM.
- * If some malloc/free calls have been done between dbmclose() and
- * the next dbminit(), the memory might be used for something else when
- * it is freed.
- * Verified to work on ultrix4.3. Probably will work on HP/UX.
- * Set DBM_BUG_DUPLICATE_FREE in the extension hint file.
- */
-/* Close the previous dbm, and fail to open a new dbm */
-#define dbmclose() ((void) dbminit("/tmp/x/y/z/z/y"))
-#endif
-
-#include <fcntl.h>
-
-typedef struct {
- void * dbp ;
- SV * filter_fetch_key ;
- SV * filter_store_key ;
- SV * filter_fetch_value ;
- SV * filter_store_value ;
- int filtering ;
- } ODBM_File_type;
-
-typedef ODBM_File_type * ODBM_File ;
-typedef datum datum_key ;
-typedef datum datum_value ;
-
-#define ckFilter(arg,type,name) \
- if (db->type) { \
- SV * save_defsv ; \
- /* printf("filtering %s\n", name) ;*/ \
- if (db->filtering) \
- croak("recursion detected in %s", name) ; \
- db->filtering = TRUE ; \
- save_defsv = newSVsv(DEFSV) ; \
- sv_setsv(DEFSV, arg) ; \
- PUSHMARK(sp) ; \
- (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \
- sv_setsv(arg, DEFSV) ; \
- sv_setsv(DEFSV, save_defsv) ; \
- SvREFCNT_dec(save_defsv) ; \
- db->filtering = FALSE ; \
- /*printf("end of filtering %s\n", name) ;*/ \
- }
-
-
-#define odbm_FETCH(db,key) fetch(key)
-#define odbm_STORE(db,key,value,flags) store(key,value)
-#define odbm_DELETE(db,key) delete(key)
-#define odbm_FIRSTKEY(db) firstkey()
-#define odbm_NEXTKEY(db,key) nextkey(key)
-
-static int dbmrefcnt;
-
-#ifndef DBM_REPLACE
-#define DBM_REPLACE 0
-#endif
-
-MODULE = ODBM_File PACKAGE = ODBM_File PREFIX = odbm_
-
-ODBM_File
-odbm_TIEHASH(dbtype, filename, flags, mode)
- char * dbtype
- char * filename
- int flags
- int mode
- CODE:
- {
- char *tmpbuf;
- void * dbp ;
- if (dbmrefcnt++)
- croak("Old dbm can only open one database");
- New(0, tmpbuf, strlen(filename) + 5, char);
- SAVEFREEPV(tmpbuf);
- sprintf(tmpbuf,"%s.dir",filename);
- if (stat(tmpbuf, &PL_statbuf) < 0) {
- if (flags & O_CREAT) {
- if (mode < 0 || close(creat(tmpbuf,mode)) < 0)
- croak("ODBM_File: Can't create %s", filename);
- sprintf(tmpbuf,"%s.pag",filename);
- if (close(creat(tmpbuf,mode)) < 0)
- croak("ODBM_File: Can't create %s", filename);
- }
- else
- croak("ODBM_FILE: Can't open %s", filename);
- }
- dbp = (void*)(dbminit(filename) >= 0 ? &dbmrefcnt : 0);
- RETVAL = (ODBM_File)safemalloc(sizeof(ODBM_File_type)) ;
- Zero(RETVAL, 1, ODBM_File_type) ;
- RETVAL->dbp = dbp ;
- ST(0) = sv_mortalcopy(&PL_sv_undef);
- sv_setptrobj(ST(0), RETVAL, dbtype);
- }
-
-void
-DESTROY(db)
- ODBM_File db
- CODE:
- dbmrefcnt--;
- dbmclose();
- safefree(db);
-
-datum_value
-odbm_FETCH(db, key)
- ODBM_File db
- datum_key key
-
-int
-odbm_STORE(db, key, value, flags = DBM_REPLACE)
- ODBM_File db
- datum_key key
- datum_value value
- int flags
- CLEANUP:
- if (RETVAL) {
- if (RETVAL < 0 && errno == EPERM)
- croak("No write permission to odbm file");
- croak("odbm store returned %d, errno %d, key \"%s\"",
- RETVAL,errno,key.dptr);
- }
-
-int
-odbm_DELETE(db, key)
- ODBM_File db
- datum_key key
-
-datum_key
-odbm_FIRSTKEY(db)
- ODBM_File db
-
-datum_key
-odbm_NEXTKEY(db, key)
- ODBM_File db
- datum_key key
-
-
-#define setFilter(type) \
- { \
- if (db->type) \
- RETVAL = sv_mortalcopy(db->type) ; \
- ST(0) = RETVAL ; \
- if (db->type && (code == &PL_sv_undef)) { \
- SvREFCNT_dec(db->type) ; \
- db->type = Nullsv ; \
- } \
- else if (code) { \
- if (db->type) \
- sv_setsv(db->type, code) ; \
- else \
- db->type = newSVsv(code) ; \
- } \
- }
-
-
-
-SV *
-filter_fetch_key(db, code)
- ODBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_key) ;
-
-SV *
-filter_store_key(db, code)
- ODBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_key) ;
-
-SV *
-filter_fetch_value(db, code)
- ODBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_value) ;
-
-SV *
-filter_store_value(db, code)
- ODBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_value) ;
-
diff --git a/contrib/perl5/ext/ODBM_File/hints/cygwin.pl b/contrib/perl5/ext/ODBM_File/hints/cygwin.pl
deleted file mode 100644
index a0d33c8..0000000
--- a/contrib/perl5/ext/ODBM_File/hints/cygwin.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-# uses GDBM dbm compatibility feature
-$self->{LIBS} = ['-lgdbm'];
diff --git a/contrib/perl5/ext/ODBM_File/hints/dec_osf.pl b/contrib/perl5/ext/ODBM_File/hints/dec_osf.pl
deleted file mode 100644
index febb7cd..0000000
--- a/contrib/perl5/ext/ODBM_File/hints/dec_osf.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-# The -hidden option causes compilation to fail on Digital Unix.
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Sat Jan 13 16:29:52 EST 1996
-$self->{LDDLFLAGS} = $Config{lddlflags};
-$self->{LDDLFLAGS} =~ s/-hidden//;
-# As long as we're hinting, note the known location of the dbm routines.
-# Spider Boardman <spider@Orb.Nashua.NH.US>
-# Fri Feb 21 14:50:31 EST 1997
-$self->{LIBS} = ['-ldbm'];
diff --git a/contrib/perl5/ext/ODBM_File/hints/hpux.pl b/contrib/perl5/ext/ODBM_File/hints/hpux.pl
deleted file mode 100644
index 31f9d24..0000000
--- a/contrib/perl5/ext/ODBM_File/hints/hpux.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-# Try to work around "bad free" messages. See note in ODBM_File.xs.
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Sun Sep 8 12:57:52 EDT 1996
-$self->{CCFLAGS} = $Config{ccflags} . ' -DDBM_BUG_DUPLICATE_FREE' ;
diff --git a/contrib/perl5/ext/ODBM_File/hints/sco.pl b/contrib/perl5/ext/ODBM_File/hints/sco.pl
deleted file mode 100644
index f551578..0000000
--- a/contrib/perl5/ext/ODBM_File/hints/sco.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-# SCO ODT 3.2v4.2 has a -ldbm library that is missing dbmclose.
-# This system should have a complete library installed as -ldbm.nfs which
-# should be used instead (Probably need the networking product add-on)
-$self->{LIBS} = ['-lndbm',-e "/usr/lib/libdbm.nfs.a"?'-ldbm.nfs':'-ldbm'];
diff --git a/contrib/perl5/ext/ODBM_File/hints/solaris.pl b/contrib/perl5/ext/ODBM_File/hints/solaris.pl
deleted file mode 100644
index ac57393..0000000
--- a/contrib/perl5/ext/ODBM_File/hints/solaris.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# -lucb has been reported to be fatal for perl5 on Solaris.
-# Thus we deliberately don't include it here.
-$self->{LIBS} = ['-ldbm'];
diff --git a/contrib/perl5/ext/ODBM_File/hints/svr4.pl b/contrib/perl5/ext/ODBM_File/hints/svr4.pl
deleted file mode 100644
index 3285d9a..0000000
--- a/contrib/perl5/ext/ODBM_File/hints/svr4.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-# Some SVR4 systems may need to link against routines in -lucb for
-# odbm. Some may also need to link against -lc to pick up things like
-# ecvt.
-$self->{LIBS} = ['-ldbm -lucb -lc'];
diff --git a/contrib/perl5/ext/ODBM_File/hints/ultrix.pl b/contrib/perl5/ext/ODBM_File/hints/ultrix.pl
deleted file mode 100644
index 31f9d24..0000000
--- a/contrib/perl5/ext/ODBM_File/hints/ultrix.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-# Try to work around "bad free" messages. See note in ODBM_File.xs.
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Sun Sep 8 12:57:52 EDT 1996
-$self->{CCFLAGS} = $Config{ccflags} . ' -DDBM_BUG_DUPLICATE_FREE' ;
diff --git a/contrib/perl5/ext/ODBM_File/typemap b/contrib/perl5/ext/ODBM_File/typemap
deleted file mode 100644
index 096427e..0000000
--- a/contrib/perl5/ext/ODBM_File/typemap
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-#################################### DBM SECTION
-#
-
-datum_key T_DATUM_K
-datum_value T_DATUM_V
-gdatum T_GDATUM
-NDBM_File T_PTROBJ
-GDBM_File T_PTROBJ
-SDBM_File T_PTROBJ
-ODBM_File T_PTROBJ
-DB_File T_PTROBJ
-DBZ_File T_PTROBJ
-FATALFUNC T_OPAQUEPTR
-
-INPUT
-T_DATUM_K
- ckFilter($arg, filter_store_key, \"filter_store_key\");
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
-T_DATUM_V
- ckFilter($arg, filter_store_value, \"filter_store_value\");
- if (SvOK($arg)) {
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
- }
- else {
- $var.dptr = \"\";
- $var.dsize = 0;
- }
-T_GDATUM
- UNIMPLEMENTED
-OUTPUT
-T_DATUM_K
- sv_setpvn($arg, $var.dptr, $var.dsize);
- ckFilter($arg, filter_fetch_key,\"filter_fetch_key\");
-T_DATUM_V
- sv_setpvn($arg, $var.dptr, $var.dsize);
- ckFilter($arg, filter_fetch_value,\"filter_fetch_value\");
-T_GDATUM
- sv_usepvn($arg, $var.dptr, $var.dsize);
diff --git a/contrib/perl5/ext/Opcode/Makefile.PL b/contrib/perl5/ext/Opcode/Makefile.PL
deleted file mode 100644
index d7e781f..0000000
--- a/contrib/perl5/ext/Opcode/Makefile.PL
+++ /dev/null
@@ -1,7 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'Opcode',
- MAN3PODS => {},
- VERSION_FROM => 'Opcode.pm',
- XS_VERSION => '1.03'
-);
diff --git a/contrib/perl5/ext/Opcode/Opcode.pm b/contrib/perl5/ext/Opcode/Opcode.pm
deleted file mode 100644
index 841120c..0000000
--- a/contrib/perl5/ext/Opcode/Opcode.pm
+++ /dev/null
@@ -1,575 +0,0 @@
-package Opcode;
-
-require 5.005_64;
-
-our($VERSION, $XS_VERSION, @ISA, @EXPORT_OK);
-
-$VERSION = "1.04";
-$XS_VERSION = "1.03";
-
-use strict;
-use Carp;
-use Exporter ();
-use XSLoader ();
-@ISA = qw(Exporter);
-
-BEGIN {
- @EXPORT_OK = qw(
- opset ops_to_opset
- opset_to_ops opset_to_hex invert_opset
- empty_opset full_opset
- opdesc opcodes opmask define_optag
- opmask_add verify_opset opdump
- );
-}
-
-sub opset (;@);
-sub opset_to_hex ($);
-sub opdump (;$);
-use subs @EXPORT_OK;
-
-XSLoader::load 'Opcode', $XS_VERSION;
-
-_init_optags();
-
-sub ops_to_opset { opset @_ } # alias for old name
-
-sub opset_to_hex ($) {
- return "(invalid opset)" unless verify_opset($_[0]);
- unpack("h*",$_[0]);
-}
-
-sub opdump (;$) {
- my $pat = shift;
- # handy utility: perl -MOpcode=opdump -e 'opdump File'
- foreach(opset_to_ops(full_opset)) {
- my $op = sprintf " %12s %s\n", $_, opdesc($_);
- next if defined $pat and $op !~ m/$pat/i;
- print $op;
- }
-}
-
-
-
-sub _init_optags {
- my(%all, %seen);
- @all{opset_to_ops(full_opset)} = (); # keys only
-
- local($_);
- local($/) = "\n=cut"; # skip to optags definition section
- <DATA>;
- $/ = "\n="; # now read in 'pod section' chunks
- while(<DATA>) {
- next unless m/^item\s+(:\w+)/;
- my $tag = $1;
-
- # Split into lines, keep only indented lines
- my @lines = grep { m/^\s/ } split(/\n/);
- foreach (@lines) { s/--.*// } # delete comments
- my @ops = map { split ' ' } @lines; # get op words
-
- foreach(@ops) {
- warn "$tag - $_ already tagged in $seen{$_}\n" if $seen{$_};
- $seen{$_} = $tag;
- delete $all{$_};
- }
- # opset will croak on invalid names
- define_optag($tag, opset(@ops));
- }
- close(DATA);
- warn "Untagged opnames: ".join(' ',keys %all)."\n" if %all;
-}
-
-
-1;
-
-__DATA__
-
-=head1 NAME
-
-Opcode - Disable named opcodes when compiling perl code
-
-=head1 SYNOPSIS
-
- use Opcode;
-
-
-=head1 DESCRIPTION
-
-Perl code is always compiled into an internal format before execution.
-
-Evaluating perl code (e.g. via "eval" or "do 'file'") causes
-the code to be compiled into an internal format and then,
-provided there was no error in the compilation, executed.
-The internal format is based on many distinct I<opcodes>.
-
-By default no opmask is in effect and any code can be compiled.
-
-The Opcode module allow you to define an I<operator mask> to be in
-effect when perl I<next> compiles any code. Attempting to compile code
-which contains a masked opcode will cause the compilation to fail
-with an error. The code will not be executed.
-
-=head1 NOTE
-
-The Opcode module is not usually used directly. See the ops pragma and
-Safe modules for more typical uses.
-
-=head1 WARNING
-
-The authors make B<no warranty>, implied or otherwise, about the
-suitability of this software for safety or security purposes.
-
-The authors shall not in any case be liable for special, incidental,
-consequential, indirect or other similar damages arising from the use
-of this software.
-
-Your mileage will vary. If in any doubt B<do not use it>.
-
-
-=head1 Operator Names and Operator Lists
-
-The canonical list of operator names is the contents of the array
-PL_op_name defined and initialised in file F<opcode.h> of the Perl
-source distribution (and installed into the perl library).
-
-Each operator has both a terse name (its opname) and a more verbose or
-recognisable descriptive name. The opdesc function can be used to
-return a list of descriptions for a list of operators.
-
-Many of the functions and methods listed below take a list of
-operators as parameters. Most operator lists can be made up of several
-types of element. Each element can be one of
-
-=over 8
-
-=item an operator name (opname)
-
-Operator names are typically small lowercase words like enterloop,
-leaveloop, last, next, redo etc. Sometimes they are rather cryptic
-like gv2cv, i_ncmp and ftsvtx.
-
-=item an operator tag name (optag)
-
-Operator tags can be used to refer to groups (or sets) of operators.
-Tag names always begin with a colon. The Opcode module defines several
-optags and the user can define others using the define_optag function.
-
-=item a negated opname or optag
-
-An opname or optag can be prefixed with an exclamation mark, e.g., !mkdir.
-Negating an opname or optag means remove the corresponding ops from the
-accumulated set of ops at that point.
-
-=item an operator set (opset)
-
-An I<opset> as a binary string of approximately 44 bytes which holds a
-set or zero or more operators.
-
-The opset and opset_to_ops functions can be used to convert from
-a list of operators to an opset and I<vice versa>.
-
-Wherever a list of operators can be given you can use one or more opsets.
-See also Manipulating Opsets below.
-
-=back
-
-
-=head1 Opcode Functions
-
-The Opcode package contains functions for manipulating operator names
-tags and sets. All are available for export by the package.
-
-=over 8
-
-=item opcodes
-
-In a scalar context opcodes returns the number of opcodes in this
-version of perl (around 350 for perl-5.7.0).
-
-In a list context it returns a list of all the operator names.
-(Not yet implemented, use @names = opset_to_ops(full_opset).)
-
-=item opset (OP, ...)
-
-Returns an opset containing the listed operators.
-
-=item opset_to_ops (OPSET)
-
-Returns a list of operator names corresponding to those operators in
-the set.
-
-=item opset_to_hex (OPSET)
-
-Returns a string representation of an opset. Can be handy for debugging.
-
-=item full_opset
-
-Returns an opset which includes all operators.
-
-=item empty_opset
-
-Returns an opset which contains no operators.
-
-=item invert_opset (OPSET)
-
-Returns an opset which is the inverse set of the one supplied.
-
-=item verify_opset (OPSET, ...)
-
-Returns true if the supplied opset looks like a valid opset (is the
-right length etc) otherwise it returns false. If an optional second
-parameter is true then verify_opset will croak on an invalid opset
-instead of returning false.
-
-Most of the other Opcode functions call verify_opset automatically
-and will croak if given an invalid opset.
-
-=item define_optag (OPTAG, OPSET)
-
-Define OPTAG as a symbolic name for OPSET. Optag names always start
-with a colon C<:>.
-
-The optag name used must not be defined already (define_optag will
-croak if it is already defined). Optag names are global to the perl
-process and optag definitions cannot be altered or deleted once
-defined.
-
-It is strongly recommended that applications using Opcode should use a
-leading capital letter on their tag names since lowercase names are
-reserved for use by the Opcode module. If using Opcode within a module
-you should prefix your tags names with the name of your module to
-ensure uniqueness and thus avoid clashes with other modules.
-
-=item opmask_add (OPSET)
-
-Adds the supplied opset to the current opmask. Note that there is
-currently I<no> mechanism for unmasking ops once they have been masked.
-This is intentional.
-
-=item opmask
-
-Returns an opset corresponding to the current opmask.
-
-=item opdesc (OP, ...)
-
-This takes a list of operator names and returns the corresponding list
-of operator descriptions.
-
-=item opdump (PAT)
-
-Dumps to STDOUT a two column list of op names and op descriptions.
-If an optional pattern is given then only lines which match the
-(case insensitive) pattern will be output.
-
-It's designed to be used as a handy command line utility:
-
- perl -MOpcode=opdump -e opdump
- perl -MOpcode=opdump -e 'opdump Eval'
-
-=back
-
-=head1 Manipulating Opsets
-
-Opsets may be manipulated using the perl bit vector operators & (and), | (or),
-^ (xor) and ~ (negate/invert).
-
-However you should never rely on the numerical position of any opcode
-within the opset. In other words both sides of a bit vector operator
-should be opsets returned from Opcode functions.
-
-Also, since the number of opcodes in your current version of perl might
-not be an exact multiple of eight, there may be unused bits in the last
-byte of an upset. This should not cause any problems (Opcode functions
-ignore those extra bits) but it does mean that using the ~ operator
-will typically not produce the same 'physical' opset 'string' as the
-invert_opset function.
-
-
-=head1 TO DO (maybe)
-
- $bool = opset_eq($opset1, $opset2) true if opsets are logically eqiv
-
- $yes = opset_can($opset, @ops) true if $opset has all @ops set
-
- @diff = opset_diff($opset1, $opset2) => ('foo', '!bar', ...)
-
-=cut
-
-# the =cut above is used by _init_optags() to get here quickly
-
-=head1 Predefined Opcode Tags
-
-=over 5
-
-=item :base_core
-
- null stub scalar pushmark wantarray const defined undef
-
- rv2sv sassign
-
- rv2av aassign aelem aelemfast aslice av2arylen
-
- rv2hv helem hslice each values keys exists delete
-
- preinc i_preinc predec i_predec postinc i_postinc postdec i_postdec
- int hex oct abs pow multiply i_multiply divide i_divide
- modulo i_modulo add i_add subtract i_subtract
-
- left_shift right_shift bit_and bit_xor bit_or negate i_negate
- not complement
-
- lt i_lt gt i_gt le i_le ge i_ge eq i_eq ne i_ne ncmp i_ncmp
- slt sgt sle sge seq sne scmp
-
- substr vec stringify study pos length index rindex ord chr
-
- ucfirst lcfirst uc lc quotemeta trans chop schop chomp schomp
-
- match split qr
-
- list lslice splice push pop shift unshift reverse
-
- cond_expr flip flop andassign orassign and or xor
-
- warn die lineseq nextstate scope enter leave setstate
-
- rv2cv anoncode prototype
-
- entersub leavesub leavesublv return method method_named -- XXX loops via recursion?
-
- leaveeval -- needed for Safe to operate, is safe without entereval
-
-=item :base_mem
-
-These memory related ops are not included in :base_core because they
-can easily be used to implement a resource attack (e.g., consume all
-available memory).
-
- concat repeat join range
-
- anonlist anonhash
-
-Note that despite the existance of this optag a memory resource attack
-may still be possible using only :base_core ops.
-
-Disabling these ops is a I<very> heavy handed way to attempt to prevent
-a memory resource attack. It's probable that a specific memory limit
-mechanism will be added to perl in the near future.
-
-=item :base_loop
-
-These loop ops are not included in :base_core because they can easily be
-used to implement a resource attack (e.g., consume all available CPU time).
-
- grepstart grepwhile
- mapstart mapwhile
- enteriter iter
- enterloop leaveloop unstack
- last next redo
- goto
-
-=item :base_io
-
-These ops enable I<filehandle> (rather than filename) based input and
-output. These are safe on the assumption that only pre-existing
-filehandles are available for use. To create new filehandles other ops
-such as open would need to be enabled.
-
- readline rcatline getc read
-
- formline enterwrite leavewrite
-
- print sysread syswrite send recv
-
- eof tell seek sysseek
-
- readdir telldir seekdir rewinddir
-
-=item :base_orig
-
-These are a hotchpotch of opcodes still waiting to be considered
-
- gvsv gv gelem
-
- padsv padav padhv padany
-
- rv2gv refgen srefgen ref
-
- bless -- could be used to change ownership of objects (reblessing)
-
- pushre regcmaybe regcreset regcomp subst substcont
-
- sprintf prtf -- can core dump
-
- crypt
-
- tie untie
-
- dbmopen dbmclose
- sselect select
- pipe_op sockpair
-
- getppid getpgrp setpgrp getpriority setpriority localtime gmtime
-
- entertry leavetry -- can be used to 'hide' fatal errors
-
-=item :base_math
-
-These ops are not included in :base_core because of the risk of them being
-used to generate floating point exceptions (which would have to be caught
-using a $SIG{FPE} handler).
-
- atan2 sin cos exp log sqrt
-
-These ops are not included in :base_core because they have an effect
-beyond the scope of the compartment.
-
- rand srand
-
-=item :base_thread
-
-These ops are related to multi-threading.
-
- lock threadsv
-
-=item :default
-
-A handy tag name for a I<reasonable> default set of ops. (The current ops
-allowed are unstable while development continues. It will change.)
-
- :base_core :base_mem :base_loop :base_io :base_orig :base_thread
-
-If safety matters to you (and why else would you be using the Opcode module?)
-then you should not rely on the definition of this, or indeed any other, optag!
-
-
-=item :filesys_read
-
- stat lstat readlink
-
- ftatime ftblk ftchr ftctime ftdir fteexec fteowned fteread
- ftewrite ftfile ftis ftlink ftmtime ftpipe ftrexec ftrowned
- ftrread ftsgid ftsize ftsock ftsuid fttty ftzero ftrwrite ftsvtx
-
- fttext ftbinary
-
- fileno
-
-=item :sys_db
-
- ghbyname ghbyaddr ghostent shostent ehostent -- hosts
- gnbyname gnbyaddr gnetent snetent enetent -- networks
- gpbyname gpbynumber gprotoent sprotoent eprotoent -- protocols
- gsbyname gsbyport gservent sservent eservent -- services
-
- gpwnam gpwuid gpwent spwent epwent getlogin -- users
- ggrnam ggrgid ggrent sgrent egrent -- groups
-
-=item :browse
-
-A handy tag name for a I<reasonable> default set of ops beyond the
-:default optag. Like :default (and indeed all the other optags) its
-current definition is unstable while development continues. It will change.
-
-The :browse tag represents the next step beyond :default. It it a
-superset of the :default ops and adds :filesys_read the :sys_db.
-The intent being that scripts can access more (possibly sensitive)
-information about your system but not be able to change it.
-
- :default :filesys_read :sys_db
-
-=item :filesys_open
-
- sysopen open close
- umask binmode
-
- open_dir closedir -- other dir ops are in :base_io
-
-=item :filesys_write
-
- link unlink rename symlink truncate
-
- mkdir rmdir
-
- utime chmod chown
-
- fcntl -- not strictly filesys related, but possibly as dangerous?
-
-=item :subprocess
-
- backtick system
-
- fork
-
- wait waitpid
-
- glob -- access to Cshell via <`rm *`>
-
-=item :ownprocess
-
- exec exit kill
-
- time tms -- could be used for timing attacks (paranoid?)
-
-=item :others
-
-This tag holds groups of assorted specialist opcodes that don't warrant
-having optags defined for them.
-
-SystemV Interprocess Communications:
-
- msgctl msgget msgrcv msgsnd
-
- semctl semget semop
-
- shmctl shmget shmread shmwrite
-
-=item :still_to_be_decided
-
- chdir
- flock ioctl
-
- socket getpeername ssockopt
- bind connect listen accept shutdown gsockopt getsockname
-
- sleep alarm -- changes global timer state and signal handling
- sort -- assorted problems including core dumps
- tied -- can be used to access object implementing a tie
- pack unpack -- can be used to create/use memory pointers
-
- entereval -- can be used to hide code from initial compile
- require dofile
-
- caller -- get info about calling environment and args
-
- reset
-
- dbstate -- perl -d version of nextstate(ment) opcode
-
-=item :dangerous
-
-This tag is simply a bucket for opcodes that are unlikely to be used via
-a tag name but need to be tagged for completness and documentation.
-
- syscall dump chroot
-
-
-=back
-
-=head1 SEE ALSO
-
-ops(3) -- perl pragma interface to Opcode module.
-
-Safe(3) -- Opcode and namespace limited execution compartments
-
-=head1 AUTHORS
-
-Originally designed and implemented by Malcolm Beattie,
-mbeattie@sable.ox.ac.uk as part of Safe version 1.
-
-Split out from Safe module version 1, named opcode tags and other
-changes added by Tim Bunce.
-
-=cut
-
diff --git a/contrib/perl5/ext/Opcode/Opcode.xs b/contrib/perl5/ext/Opcode/Opcode.xs
deleted file mode 100644
index cc4e1f4..0000000
--- a/contrib/perl5/ext/Opcode/Opcode.xs
+++ /dev/null
@@ -1,482 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-/* PL_maxo shouldn't differ from MAXO but leave room anyway (see BOOT:) */
-#define OP_MASK_BUF_SIZE (MAXO + 100)
-
-/* XXX op_named_bits and opset_all are never freed */
-static HV *op_named_bits; /* cache shared for whole process */
-static SV *opset_all; /* mask with all bits set */
-static IV opset_len; /* length of opmasks in bytes */
-static int opcode_debug = 0;
-
-static SV *new_opset (pTHX_ SV *old_opset);
-static int verify_opset (pTHX_ SV *opset, int fatal);
-static void set_opset_bits (pTHX_ char *bitmap, SV *bitspec, int on, char *opname);
-static void put_op_bitspec (pTHX_ char *optag, STRLEN len, SV *opset);
-static SV *get_op_bitspec (pTHX_ char *opname, STRLEN len, int fatal);
-
-
-/* Initialise our private op_named_bits HV.
- * It is first loaded with the name and number of each perl operator.
- * Then the builtin tags :none and :all are added.
- * Opcode.pm loads the standard optags from __DATA__
- * XXX leak-alert: data allocated here is never freed, call this
- * at most once
- */
-
-static void
-op_names_init(pTHX)
-{
- int i;
- STRLEN len;
- char **op_names;
- char *bitmap;
-
- op_named_bits = newHV();
- op_names = get_op_names();
- for(i=0; i < PL_maxo; ++i) {
- SV *sv;
- sv = newSViv(i);
- SvREADONLY_on(sv);
- hv_store(op_named_bits, op_names[i], strlen(op_names[i]), sv, 0);
- }
-
- put_op_bitspec(aTHX_ ":none",0, sv_2mortal(new_opset(aTHX_ Nullsv)));
-
- opset_all = new_opset(aTHX_ Nullsv);
- bitmap = SvPV(opset_all, len);
- i = len-1; /* deal with last byte specially, see below */
- while(i-- > 0)
- bitmap[i] = 0xFF;
- /* Take care to set the right number of bits in the last byte */
- bitmap[len-1] = (PL_maxo & 0x07) ? ~(0xFF << (PL_maxo & 0x07)) : 0xFF;
- put_op_bitspec(aTHX_ ":all",0, opset_all); /* don't mortalise */
-}
-
-
-/* Store a new tag definition. Always a mask.
- * The tag must not already be defined.
- * SV *mask is copied not referenced.
- */
-
-static void
-put_op_bitspec(pTHX_ char *optag, STRLEN len, SV *mask)
-{
- SV **svp;
- verify_opset(aTHX_ mask,1);
- if (!len)
- len = strlen(optag);
- svp = hv_fetch(op_named_bits, optag, len, 1);
- if (SvOK(*svp))
- croak("Opcode tag \"%s\" already defined", optag);
- sv_setsv(*svp, mask);
- SvREADONLY_on(*svp);
-}
-
-
-
-/* Fetch a 'bits' entry for an opname or optag (IV/PV).
- * Note that we return the actual entry for speed.
- * Always sv_mortalcopy() if returing it to user code.
- */
-
-static SV *
-get_op_bitspec(pTHX_ char *opname, STRLEN len, int fatal)
-{
- SV **svp;
- if (!len)
- len = strlen(opname);
- svp = hv_fetch(op_named_bits, opname, len, 0);
- if (!svp || !SvOK(*svp)) {
- if (!fatal)
- return Nullsv;
- if (*opname == ':')
- croak("Unknown operator tag \"%s\"", opname);
- if (*opname == '!') /* XXX here later, or elsewhere? */
- croak("Can't negate operators here (\"%s\")", opname);
- if (isALPHA(*opname))
- croak("Unknown operator name \"%s\"", opname);
- croak("Unknown operator prefix \"%s\"", opname);
- }
- return *svp;
-}
-
-
-
-static SV *
-new_opset(pTHX_ SV *old_opset)
-{
- SV *opset;
- if (old_opset) {
- verify_opset(aTHX_ old_opset,1);
- opset = newSVsv(old_opset);
- }
- else {
- opset = NEWSV(1156, opset_len);
- Zero(SvPVX(opset), opset_len + 1, char);
- SvCUR_set(opset, opset_len);
- (void)SvPOK_only(opset);
- }
- /* not mortalised here */
- return opset;
-}
-
-
-static int
-verify_opset(pTHX_ SV *opset, int fatal)
-{
- char *err = Nullch;
- if (!SvOK(opset)) err = "undefined";
- else if (!SvPOK(opset)) err = "wrong type";
- else if (SvCUR(opset) != opset_len) err = "wrong size";
- if (err && fatal) {
- croak("Invalid opset: %s", err);
- }
- return !err;
-}
-
-
-static void
-set_opset_bits(pTHX_ char *bitmap, SV *bitspec, int on, char *opname)
-{
- if (SvIOK(bitspec)) {
- int myopcode = SvIV(bitspec);
- int offset = myopcode >> 3;
- int bit = myopcode & 0x07;
- if (myopcode >= PL_maxo || myopcode < 0)
- croak("panic: opcode \"%s\" value %d is invalid", opname, myopcode);
- if (opcode_debug >= 2)
- warn("set_opset_bits bit %2d (off=%d, bit=%d) %s %s\n",
- myopcode, offset, bit, opname, (on)?"on":"off");
- if (on)
- bitmap[offset] |= 1 << bit;
- else
- bitmap[offset] &= ~(1 << bit);
- }
- else if (SvPOK(bitspec) && SvCUR(bitspec) == opset_len) {
-
- STRLEN len;
- char *specbits = SvPV(bitspec, len);
- if (opcode_debug >= 2)
- warn("set_opset_bits opset %s %s\n", opname, (on)?"on":"off");
- if (on)
- while(len-- > 0) bitmap[len] |= specbits[len];
- else
- while(len-- > 0) bitmap[len] &= ~specbits[len];
- }
- else
- croak("panic: invalid bitspec for \"%s\" (type %u)",
- opname, (unsigned)SvTYPE(bitspec));
-}
-
-
-static void
-opmask_add(pTHX_ SV *opset) /* THE ONLY FUNCTION TO EDIT PL_op_mask ITSELF */
-{
- int i,j;
- char *bitmask;
- STRLEN len;
- int myopcode = 0;
-
- verify_opset(aTHX_ opset,1); /* croaks on bad opset */
-
- if (!PL_op_mask) /* caller must ensure PL_op_mask exists */
- croak("Can't add to uninitialised PL_op_mask");
-
- /* OPCODES ALREADY MASKED ARE NEVER UNMASKED. See opmask_addlocal() */
-
- bitmask = SvPV(opset, len);
- for (i=0; i < opset_len; i++) {
- U16 bits = bitmask[i];
- if (!bits) { /* optimise for sparse masks */
- myopcode += 8;
- continue;
- }
- for (j=0; j < 8 && myopcode < PL_maxo; )
- PL_op_mask[myopcode++] |= bits & (1 << j++);
- }
-}
-
-static void
-opmask_addlocal(pTHX_ SV *opset, char *op_mask_buf) /* Localise PL_op_mask then opmask_add() */
-{
- char *orig_op_mask = PL_op_mask;
- SAVEVPTR(PL_op_mask);
-#if !defined(PERL_OBJECT)
- /* XXX casting to an ordinary function ptr from a member function ptr
- * is disallowed by Borland
- */
- if (opcode_debug >= 2)
- SAVEDESTRUCTOR((void(*)(void*))Perl_warn,"PL_op_mask restored");
-#endif
- PL_op_mask = &op_mask_buf[0];
- if (orig_op_mask)
- Copy(orig_op_mask, PL_op_mask, PL_maxo, char);
- else
- Zero(PL_op_mask, PL_maxo, char);
- opmask_add(aTHX_ opset);
-}
-
-
-
-MODULE = Opcode PACKAGE = Opcode
-
-PROTOTYPES: ENABLE
-
-BOOT:
- assert(PL_maxo < OP_MASK_BUF_SIZE);
- opset_len = (PL_maxo + 7) / 8;
- if (opcode_debug >= 1)
- warn("opset_len %ld\n", (long)opset_len);
- op_names_init(aTHX);
-
-
-void
-_safe_call_sv(Package, mask, codesv)
- char * Package
- SV * mask
- SV * codesv
-PPCODE:
- char op_mask_buf[OP_MASK_BUF_SIZE];
- GV *gv;
-
- ENTER;
-
- opmask_addlocal(aTHX_ mask, op_mask_buf);
-
- save_aptr(&PL_endav);
- PL_endav = (AV*)sv_2mortal((SV*)newAV()); /* ignore END blocks for now */
-
- save_hptr(&PL_defstash); /* save current default stash */
- /* the assignment to global defstash changes our sense of 'main' */
- PL_defstash = gv_stashpv(Package, GV_ADDWARN); /* should exist already */
- save_hptr(&PL_curstash);
- PL_curstash = PL_defstash;
-
- /* defstash must itself contain a main:: so we'll add that now */
- /* take care with the ref counts (was cause of long standing bug) */
- /* XXX I'm still not sure if this is right, GV_ADDWARN should warn! */
- gv = gv_fetchpv("main::", GV_ADDWARN, SVt_PVHV);
- sv_free((SV*)GvHV(gv));
- GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash);
-
- /* %INC must be clean for use/require in compartment */
- save_hash(PL_incgv);
- sv_free((SV*)GvHV(PL_incgv)); /* get rid of what save_hash gave us*/
- GvHV(PL_incgv) = (HV*)SvREFCNT_inc(GvHV(gv_HVadd(gv_fetchpv("INC",TRUE,SVt_PVHV))));
-
- PUSHMARK(SP);
- perl_call_sv(codesv, GIMME|G_EVAL|G_KEEPERR); /* use callers context */
- SPAGAIN; /* for the PUTBACK added by xsubpp */
- LEAVE;
-
-
-int
-verify_opset(opset, fatal = 0)
- SV *opset
- int fatal
-CODE:
- RETVAL = verify_opset(aTHX_ opset,fatal);
-OUTPUT:
- RETVAL
-
-void
-invert_opset(opset)
- SV *opset
-CODE:
- {
- char *bitmap;
- STRLEN len = opset_len;
- opset = sv_2mortal(new_opset(aTHX_ opset)); /* verify and clone opset */
- bitmap = SvPVX(opset);
- while(len-- > 0)
- bitmap[len] = ~bitmap[len];
- /* take care of extra bits beyond PL_maxo in last byte */
- if (PL_maxo & 07)
- bitmap[opset_len-1] &= ~(0xFF << (PL_maxo & 0x07));
- }
- ST(0) = opset;
-
-
-void
-opset_to_ops(opset, desc = 0)
- SV *opset
- int desc
-PPCODE:
- {
- STRLEN len;
- int i, j, myopcode;
- char *bitmap = SvPV(opset, len);
- char **names = (desc) ? get_op_descs() : get_op_names();
- verify_opset(aTHX_ opset,1);
- for (myopcode=0, i=0; i < opset_len; i++) {
- U16 bits = bitmap[i];
- for (j=0; j < 8 && myopcode < PL_maxo; j++, myopcode++) {
- if ( bits & (1 << j) )
- XPUSHs(sv_2mortal(newSVpv(names[myopcode], 0)));
- }
- }
- }
-
-
-void
-opset(...)
-CODE:
- int i;
- SV *bitspec, *opset;
- char *bitmap;
- STRLEN len, on;
- opset = sv_2mortal(new_opset(aTHX_ Nullsv));
- bitmap = SvPVX(opset);
- for (i = 0; i < items; i++) {
- char *opname;
- on = 1;
- if (verify_opset(aTHX_ ST(i),0)) {
- opname = "(opset)";
- bitspec = ST(i);
- }
- else {
- opname = SvPV(ST(i), len);
- if (*opname == '!') { on=0; ++opname;--len; }
- bitspec = get_op_bitspec(aTHX_ opname, len, 1);
- }
- set_opset_bits(aTHX_ bitmap, bitspec, on, opname);
- }
- ST(0) = opset;
-
-
-#define PERMITING (ix == 0 || ix == 1)
-#define ONLY_THESE (ix == 0 || ix == 2)
-
-void
-permit_only(safe, ...)
- SV *safe
-ALIAS:
- permit = 1
- deny_only = 2
- deny = 3
-CODE:
- int i, on;
- SV *bitspec, *mask;
- char *bitmap, *opname;
- STRLEN len;
-
- if (!SvROK(safe) || !SvOBJECT(SvRV(safe)) || SvTYPE(SvRV(safe))!=SVt_PVHV)
- croak("Not a Safe object");
- mask = *hv_fetch((HV*)SvRV(safe), "Mask",4, 1);
- if (ONLY_THESE) /* *_only = new mask, else edit current */
- sv_setsv(mask, sv_2mortal(new_opset(aTHX_ PERMITING ? opset_all : Nullsv)));
- else
- verify_opset(aTHX_ mask,1); /* croaks */
- bitmap = SvPVX(mask);
- for (i = 1; i < items; i++) {
- on = PERMITING ? 0 : 1; /* deny = mask bit on */
- if (verify_opset(aTHX_ ST(i),0)) { /* it's a valid mask */
- opname = "(opset)";
- bitspec = ST(i);
- }
- else { /* it's an opname/optag */
- opname = SvPV(ST(i), len);
- /* invert if op has ! prefix (only one allowed) */
- if (*opname == '!') { on = !on; ++opname; --len; }
- bitspec = get_op_bitspec(aTHX_ opname, len, 1); /* croaks */
- }
- set_opset_bits(aTHX_ bitmap, bitspec, on, opname);
- }
- ST(0) = &PL_sv_yes;
-
-
-
-void
-opdesc(...)
-PPCODE:
- int i, myopcode;
- STRLEN len;
- SV **args;
- char **op_desc = get_op_descs();
- /* copy args to a scratch area since we may push output values onto */
- /* the stack faster than we read values off it if masks are used. */
- args = (SV**)SvPVX(sv_2mortal(newSVpvn((char*)&ST(0), items*sizeof(SV*))));
- for (i = 0; i < items; i++) {
- char *opname = SvPV(args[i], len);
- SV *bitspec = get_op_bitspec(aTHX_ opname, len, 1);
- if (SvIOK(bitspec)) {
- myopcode = SvIV(bitspec);
- if (myopcode < 0 || myopcode >= PL_maxo)
- croak("panic: opcode %d (%s) out of range",myopcode,opname);
- XPUSHs(sv_2mortal(newSVpv(op_desc[myopcode], 0)));
- }
- else if (SvPOK(bitspec) && SvCUR(bitspec) == opset_len) {
- int b, j;
- STRLEN n_a;
- char *bitmap = SvPV(bitspec,n_a);
- myopcode = 0;
- for (b=0; b < opset_len; b++) {
- U16 bits = bitmap[b];
- for (j=0; j < 8 && myopcode < PL_maxo; j++, myopcode++)
- if (bits & (1 << j))
- XPUSHs(sv_2mortal(newSVpv(op_desc[myopcode], 0)));
- }
- }
- else
- croak("panic: invalid bitspec for \"%s\" (type %u)",
- opname, (unsigned)SvTYPE(bitspec));
- }
-
-
-void
-define_optag(optagsv, mask)
- SV *optagsv
- SV *mask
-CODE:
- STRLEN len;
- char *optag = SvPV(optagsv, len);
- put_op_bitspec(aTHX_ optag, len, mask); /* croaks */
- ST(0) = &PL_sv_yes;
-
-
-void
-empty_opset()
-CODE:
- ST(0) = sv_2mortal(new_opset(aTHX_ Nullsv));
-
-void
-full_opset()
-CODE:
- ST(0) = sv_2mortal(new_opset(aTHX_ opset_all));
-
-void
-opmask_add(opset)
- SV *opset
-PREINIT:
- if (!PL_op_mask)
- Newz(0, PL_op_mask, PL_maxo, char);
-CODE:
- opmask_add(aTHX_ opset);
-
-void
-opcodes()
-PPCODE:
- if (GIMME == G_ARRAY) {
- croak("opcodes in list context not yet implemented"); /* XXX */
- }
- else {
- XPUSHs(sv_2mortal(newSViv(PL_maxo)));
- }
-
-void
-opmask()
-CODE:
- ST(0) = sv_2mortal(new_opset(aTHX_ Nullsv));
- if (PL_op_mask) {
- char *bitmap = SvPVX(ST(0));
- int myopcode;
- for(myopcode=0; myopcode < PL_maxo; ++myopcode) {
- if (PL_op_mask[myopcode])
- bitmap[myopcode >> 3] |= 1 << (myopcode & 0x07);
- }
- }
-
diff --git a/contrib/perl5/ext/Opcode/Safe.pm b/contrib/perl5/ext/Opcode/Safe.pm
deleted file mode 100644
index 7e1d6a3..0000000
--- a/contrib/perl5/ext/Opcode/Safe.pm
+++ /dev/null
@@ -1,558 +0,0 @@
-package Safe;
-
-use 5.003_11;
-use strict;
-
-our $VERSION = "2.06";
-
-use Carp;
-
-use Opcode 1.01, qw(
- opset opset_to_ops opmask_add
- empty_opset full_opset invert_opset verify_opset
- opdesc opcodes opmask define_optag opset_to_hex
-);
-
-*ops_to_opset = \&opset; # Temporary alias for old Penguins
-
-
-my $default_root = 0;
-my $default_share = ['*_']; #, '*main::'];
-
-sub new {
- my($class, $root, $mask) = @_;
- my $obj = {};
- bless $obj, $class;
-
- if (defined($root)) {
- croak "Can't use \"$root\" as root name"
- if $root =~ /^main\b/ or $root !~ /^\w[:\w]*$/;
- $obj->{Root} = $root;
- $obj->{Erase} = 0;
- }
- else {
- $obj->{Root} = "Safe::Root".$default_root++;
- $obj->{Erase} = 1;
- }
-
- # use permit/deny methods instead till interface issues resolved
- # XXX perhaps new Safe 'Root', mask => $mask, foo => bar, ...;
- croak "Mask parameter to new no longer supported" if defined $mask;
- $obj->permit_only(':default');
-
- # We must share $_ and @_ with the compartment or else ops such
- # as split, length and so on won't default to $_ properly, nor
- # will passing argument to subroutines work (via @_). In fact,
- # for reasons I don't completely understand, we need to share
- # the whole glob *_ rather than $_ and @_ separately, otherwise
- # @_ in non default packages within the compartment don't work.
- $obj->share_from('main', $default_share);
- return $obj;
-}
-
-sub DESTROY {
- my $obj = shift;
- $obj->erase('DESTROY') if $obj->{Erase};
-}
-
-sub erase {
- my ($obj, $action) = @_;
- my $pkg = $obj->root();
- my ($stem, $leaf);
-
- no strict 'refs';
- $pkg = "main::$pkg\::"; # expand to full symbol table name
- ($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/;
-
- # The 'my $foo' is needed! Without it you get an
- # 'Attempt to free unreferenced scalar' warning!
- my $stem_symtab = *{$stem}{HASH};
-
- #warn "erase($pkg) stem=$stem, leaf=$leaf";
- #warn " stem_symtab hash ".scalar(%$stem_symtab)."\n";
- # ", join(', ', %$stem_symtab),"\n";
-
-# delete $stem_symtab->{$leaf};
-
- my $leaf_glob = $stem_symtab->{$leaf};
- my $leaf_symtab = *{$leaf_glob}{HASH};
-# warn " leaf_symtab ", join(', ', %$leaf_symtab),"\n";
- %$leaf_symtab = ();
- #delete $leaf_symtab->{'__ANON__'};
- #delete $leaf_symtab->{'foo'};
- #delete $leaf_symtab->{'main::'};
-# my $foo = undef ${"$stem\::"}{"$leaf\::"};
-
- if ($action and $action eq 'DESTROY') {
- delete $stem_symtab->{$leaf};
- } else {
- $obj->share_from('main', $default_share);
- }
- 1;
-}
-
-
-sub reinit {
- my $obj= shift;
- $obj->erase;
- $obj->share_redo;
-}
-
-sub root {
- my $obj = shift;
- croak("Safe root method now read-only") if @_;
- return $obj->{Root};
-}
-
-
-sub mask {
- my $obj = shift;
- return $obj->{Mask} unless @_;
- $obj->deny_only(@_);
-}
-
-# v1 compatibility methods
-sub trap { shift->deny(@_) }
-sub untrap { shift->permit(@_) }
-
-sub deny {
- my $obj = shift;
- $obj->{Mask} |= opset(@_);
-}
-sub deny_only {
- my $obj = shift;
- $obj->{Mask} = opset(@_);
-}
-
-sub permit {
- my $obj = shift;
- # XXX needs testing
- $obj->{Mask} &= invert_opset opset(@_);
-}
-sub permit_only {
- my $obj = shift;
- $obj->{Mask} = invert_opset opset(@_);
-}
-
-
-sub dump_mask {
- my $obj = shift;
- print opset_to_hex($obj->{Mask}),"\n";
-}
-
-
-
-sub share {
- my($obj, @vars) = @_;
- $obj->share_from(scalar(caller), \@vars);
-}
-
-sub share_from {
- my $obj = shift;
- my $pkg = shift;
- my $vars = shift;
- my $no_record = shift || 0;
- my $root = $obj->root();
- croak("vars not an array ref") unless ref $vars eq 'ARRAY';
- no strict 'refs';
- # Check that 'from' package actually exists
- croak("Package \"$pkg\" does not exist")
- unless keys %{"$pkg\::"};
- my $arg;
- foreach $arg (@$vars) {
- # catch some $safe->share($var) errors:
- croak("'$arg' not a valid symbol table name")
- unless $arg =~ /^[\$\@%*&]?\w[\w:]*$/
- or $arg =~ /^\$\W$/;
- my ($var, $type);
- $type = $1 if ($var = $arg) =~ s/^(\W)//;
- # warn "share_from $pkg $type $var";
- *{$root."::$var"} = (!$type) ? \&{$pkg."::$var"}
- : ($type eq '&') ? \&{$pkg."::$var"}
- : ($type eq '$') ? \${$pkg."::$var"}
- : ($type eq '@') ? \@{$pkg."::$var"}
- : ($type eq '%') ? \%{$pkg."::$var"}
- : ($type eq '*') ? *{$pkg."::$var"}
- : croak(qq(Can't share "$type$var" of unknown type));
- }
- $obj->share_record($pkg, $vars) unless $no_record or !$vars;
-}
-
-sub share_record {
- my $obj = shift;
- my $pkg = shift;
- my $vars = shift;
- my $shares = \%{$obj->{Shares} ||= {}};
- # Record shares using keys of $obj->{Shares}. See reinit.
- @{$shares}{@$vars} = ($pkg) x @$vars if @$vars;
-}
-sub share_redo {
- my $obj = shift;
- my $shares = \%{$obj->{Shares} ||= {}};
- my($var, $pkg);
- while(($var, $pkg) = each %$shares) {
- # warn "share_redo $pkg\:: $var";
- $obj->share_from($pkg, [ $var ], 1);
- }
-}
-sub share_forget {
- delete shift->{Shares};
-}
-
-sub varglob {
- my ($obj, $var) = @_;
- no strict 'refs';
- return *{$obj->root()."::$var"};
-}
-
-
-sub reval {
- my ($obj, $expr, $strict) = @_;
- my $root = $obj->{Root};
-
- # Create anon sub ref in root of compartment.
- # Uses a closure (on $expr) to pass in the code to be executed.
- # (eval on one line to keep line numbers as expected by caller)
- my $evalcode = sprintf('package %s; sub { eval $expr; }', $root);
- my $evalsub;
-
- if ($strict) { use strict; $evalsub = eval $evalcode; }
- else { no strict; $evalsub = eval $evalcode; }
-
- return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub);
-}
-
-sub rdo {
- my ($obj, $file) = @_;
- my $root = $obj->{Root};
-
- my $evalsub = eval
- sprintf('package %s; sub { do $file }', $root);
- return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub);
-}
-
-
-1;
-
-__END__
-
-=head1 NAME
-
-Safe - Compile and execute code in restricted compartments
-
-=head1 SYNOPSIS
-
- use Safe;
-
- $compartment = new Safe;
-
- $compartment->permit(qw(time sort :browse));
-
- $result = $compartment->reval($unsafe_code);
-
-=head1 DESCRIPTION
-
-The Safe extension module allows the creation of compartments
-in which perl code can be evaluated. Each compartment has
-
-=over 8
-
-=item a new namespace
-
-The "root" of the namespace (i.e. "main::") is changed to a
-different package and code evaluated in the compartment cannot
-refer to variables outside this namespace, even with run-time
-glob lookups and other tricks.
-
-Code which is compiled outside the compartment can choose to place
-variables into (or I<share> variables with) the compartment's namespace
-and only that data will be visible to code evaluated in the
-compartment.
-
-By default, the only variables shared with compartments are the
-"underscore" variables $_ and @_ (and, technically, the less frequently
-used %_, the _ filehandle and so on). This is because otherwise perl
-operators which default to $_ will not work and neither will the
-assignment of arguments to @_ on subroutine entry.
-
-=item an operator mask
-
-Each compartment has an associated "operator mask". Recall that
-perl code is compiled into an internal format before execution.
-Evaluating perl code (e.g. via "eval" or "do 'file'") causes
-the code to be compiled into an internal format and then,
-provided there was no error in the compilation, executed.
-Code evaluated in a compartment compiles subject to the
-compartment's operator mask. Attempting to evaluate code in a
-compartment which contains a masked operator will cause the
-compilation to fail with an error. The code will not be executed.
-
-The default operator mask for a newly created compartment is
-the ':default' optag.
-
-It is important that you read the Opcode(3) module documentation
-for more information, especially for detailed definitions of opnames,
-optags and opsets.
-
-Since it is only at the compilation stage that the operator mask
-applies, controlled access to potentially unsafe operations can
-be achieved by having a handle to a wrapper subroutine (written
-outside the compartment) placed into the compartment. For example,
-
- $cpt = new Safe;
- sub wrapper {
- # vet arguments and perform potentially unsafe operations
- }
- $cpt->share('&wrapper');
-
-=back
-
-
-=head1 WARNING
-
-The authors make B<no warranty>, implied or otherwise, about the
-suitability of this software for safety or security purposes.
-
-The authors shall not in any case be liable for special, incidental,
-consequential, indirect or other similar damages arising from the use
-of this software.
-
-Your mileage will vary. If in any doubt B<do not use it>.
-
-
-=head2 RECENT CHANGES
-
-The interface to the Safe module has changed quite dramatically since
-version 1 (as supplied with Perl5.002). Study these pages carefully if
-you have code written to use Safe version 1 because you will need to
-makes changes.
-
-
-=head2 Methods in class Safe
-
-To create a new compartment, use
-
- $cpt = new Safe;
-
-Optional argument is (NAMESPACE), where NAMESPACE is the root namespace
-to use for the compartment (defaults to "Safe::Root0", incremented for
-each new compartment).
-
-Note that version 1.00 of the Safe module supported a second optional
-parameter, MASK. That functionality has been withdrawn pending deeper
-consideration. Use the permit and deny methods described below.
-
-The following methods can then be used on the compartment
-object returned by the above constructor. The object argument
-is implicit in each case.
-
-
-=over 8
-
-=item permit (OP, ...)
-
-Permit the listed operators to be used when compiling code in the
-compartment (in I<addition> to any operators already permitted).
-
-=item permit_only (OP, ...)
-
-Permit I<only> the listed operators to be used when compiling code in
-the compartment (I<no> other operators are permitted).
-
-=item deny (OP, ...)
-
-Deny the listed operators from being used when compiling code in the
-compartment (other operators may still be permitted).
-
-=item deny_only (OP, ...)
-
-Deny I<only> the listed operators from being used when compiling code
-in the compartment (I<all> other operators will be permitted).
-
-=item trap (OP, ...)
-
-=item untrap (OP, ...)
-
-The trap and untrap methods are synonyms for deny and permit
-respectfully.
-
-=item share (NAME, ...)
-
-This shares the variable(s) in the argument list with the compartment.
-This is almost identical to exporting variables using the L<Exporter(3)>
-module.
-
-Each NAME must be the B<name> of a variable, typically with the leading
-type identifier included. A bareword is treated as a function name.
-
-Examples of legal names are '$foo' for a scalar, '@foo' for an
-array, '%foo' for a hash, '&foo' or 'foo' for a subroutine and '*foo'
-for a glob (i.e. all symbol table entries associated with "foo",
-including scalar, array, hash, sub and filehandle).
-
-Each NAME is assumed to be in the calling package. See share_from
-for an alternative method (which share uses).
-
-=item share_from (PACKAGE, ARRAYREF)
-
-This method is similar to share() but allows you to explicitly name the
-package that symbols should be shared from. The symbol names (including
-type characters) are supplied as an array reference.
-
- $safe->share_from('main', [ '$foo', '%bar', 'func' ]);
-
-
-=item varglob (VARNAME)
-
-This returns a glob reference for the symbol table entry of VARNAME in
-the package of the compartment. VARNAME must be the B<name> of a
-variable without any leading type marker. For example,
-
- $cpt = new Safe 'Root';
- $Root::foo = "Hello world";
- # Equivalent version which doesn't need to know $cpt's package name:
- ${$cpt->varglob('foo')} = "Hello world";
-
-
-=item reval (STRING)
-
-This evaluates STRING as perl code inside the compartment.
-
-The code can only see the compartment's namespace (as returned by the
-B<root> method). The compartment's root package appears to be the
-C<main::> package to the code inside the compartment.
-
-Any attempt by the code in STRING to use an operator which is not permitted
-by the compartment will cause an error (at run-time of the main program
-but at compile-time for the code in STRING). The error is of the form
-"%s trapped by operation mask operation...".
-
-If an operation is trapped in this way, then the code in STRING will
-not be executed. If such a trapped operation occurs or any other
-compile-time or return error, then $@ is set to the error message, just
-as with an eval().
-
-If there is no error, then the method returns the value of the last
-expression evaluated, or a return statement may be used, just as with
-subroutines and B<eval()>. The context (list or scalar) is determined
-by the caller as usual.
-
-This behaviour differs from the beta distribution of the Safe extension
-where earlier versions of perl made it hard to mimic the return
-behaviour of the eval() command and the context was always scalar.
-
-Some points to note:
-
-If the entereval op is permitted then the code can use eval "..." to
-'hide' code which might use denied ops. This is not a major problem
-since when the code tries to execute the eval it will fail because the
-opmask is still in effect. However this technique would allow clever,
-and possibly harmful, code to 'probe' the boundaries of what is
-possible.
-
-Any string eval which is executed by code executing in a compartment,
-or by code called from code executing in a compartment, will be eval'd
-in the namespace of the compartment. This is potentially a serious
-problem.
-
-Consider a function foo() in package pkg compiled outside a compartment
-but shared with it. Assume the compartment has a root package called
-'Root'. If foo() contains an eval statement like eval '$foo = 1' then,
-normally, $pkg::foo will be set to 1. If foo() is called from the
-compartment (by whatever means) then instead of setting $pkg::foo, the
-eval will actually set $Root::pkg::foo.
-
-This can easily be demonstrated by using a module, such as the Socket
-module, which uses eval "..." as part of an AUTOLOAD function. You can
-'use' the module outside the compartment and share an (autoloaded)
-function with the compartment. If an autoload is triggered by code in
-the compartment, or by any code anywhere that is called by any means
-from the compartment, then the eval in the Socket module's AUTOLOAD
-function happens in the namespace of the compartment. Any variables
-created or used by the eval'd code are now under the control of
-the code in the compartment.
-
-A similar effect applies to I<all> runtime symbol lookups in code
-called from a compartment but not compiled within it.
-
-
-
-=item rdo (FILENAME)
-
-This evaluates the contents of file FILENAME inside the compartment.
-See above documentation on the B<reval> method for further details.
-
-=item root (NAMESPACE)
-
-This method returns the name of the package that is the root of the
-compartment's namespace.
-
-Note that this behaviour differs from version 1.00 of the Safe module
-where the root module could be used to change the namespace. That
-functionality has been withdrawn pending deeper consideration.
-
-=item mask (MASK)
-
-This is a get-or-set method for the compartment's operator mask.
-
-With no MASK argument present, it returns the current operator mask of
-the compartment.
-
-With the MASK argument present, it sets the operator mask for the
-compartment (equivalent to calling the deny_only method).
-
-=back
-
-
-=head2 Some Safety Issues
-
-This section is currently just an outline of some of the things code in
-a compartment might do (intentionally or unintentionally) which can
-have an effect outside the compartment.
-
-=over 8
-
-=item Memory
-
-Consuming all (or nearly all) available memory.
-
-=item CPU
-
-Causing infinite loops etc.
-
-=item Snooping
-
-Copying private information out of your system. Even something as
-simple as your user name is of value to others. Much useful information
-could be gleaned from your environment variables for example.
-
-=item Signals
-
-Causing signals (especially SIGFPE and SIGALARM) to affect your process.
-
-Setting up a signal handler will need to be carefully considered
-and controlled. What mask is in effect when a signal handler
-gets called? If a user can get an imported function to get an
-exception and call the user's signal handler, does that user's
-restricted mask get re-instated before the handler is called?
-Does an imported handler get called with its original mask or
-the user's one?
-
-=item State Changes
-
-Ops such as chdir obviously effect the process as a whole and not just
-the code in the compartment. Ops such as rand and srand have a similar
-but more subtle effect.
-
-=back
-
-=head2 AUTHOR
-
-Originally designed and implemented by Malcolm Beattie,
-mbeattie@sable.ox.ac.uk.
-
-Reworked to use the Opcode module and other changes added by Tim Bunce
-E<lt>F<Tim.Bunce@ig.co.uk>E<gt>.
-
-=cut
-
diff --git a/contrib/perl5/ext/Opcode/ops.pm b/contrib/perl5/ext/Opcode/ops.pm
deleted file mode 100644
index 9b553b7..0000000
--- a/contrib/perl5/ext/Opcode/ops.pm
+++ /dev/null
@@ -1,45 +0,0 @@
-package ops;
-
-use Opcode qw(opmask_add opset invert_opset);
-
-sub import {
- shift;
- # Not that unimport is the prefered form since import's don't
- # accumulate well owing to the 'only ever add opmask' rule.
- # E.g., perl -Mops=:set1 -Mops=:setb is unlikely to do as expected.
- opmask_add(invert_opset opset(@_)) if @_;
-}
-
-sub unimport {
- shift;
- opmask_add(opset(@_)) if @_;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-ops - Perl pragma to restrict unsafe operations when compiling
-
-=head1 SYNOPSIS
-
- perl -Mops=:default ... # only allow reasonably safe operations
-
- perl -M-ops=system ... # disable the 'system' opcode
-
-=head1 DESCRIPTION
-
-Since the ops pragma currently has an irreversible global effect, it is
-only of significant practical use with the C<-M> option on the command line.
-
-See the L<Opcode> module for information about opcodes, optags, opmasks
-and important information about safety.
-
-=head1 SEE ALSO
-
-Opcode(3), Safe(3), perlrun(3)
-
-=cut
-
diff --git a/contrib/perl5/ext/POSIX/Makefile.PL b/contrib/perl5/ext/POSIX/Makefile.PL
deleted file mode 100644
index 5127b4d..0000000
--- a/contrib/perl5/ext/POSIX/Makefile.PL
+++ /dev/null
@@ -1,14 +0,0 @@
-# $FreeBSD$
-use ExtUtils::MakeMaker;
-use Config;
-my @libs;
-if ($^O ne 'MSWin32') {
- @libs = ('LIBS' => ["-lm -lposix -lcposix"]);
-}
-WriteMakefile(
- NAME => 'POSIX',
- @libs,
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes', # XXX remove later?
- VERSION_FROM => 'POSIX.pm',
-);
diff --git a/contrib/perl5/ext/POSIX/POSIX.pm b/contrib/perl5/ext/POSIX/POSIX.pm
deleted file mode 100644
index 252e5bb..0000000
--- a/contrib/perl5/ext/POSIX/POSIX.pm
+++ /dev/null
@@ -1,940 +0,0 @@
-package POSIX;
-
-our(@ISA, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD) = ();
-
-use AutoLoader;
-
-use XSLoader ();
-
-our $VERSION = "1.03" ;
-
-# Grandfather old foo_h form to new :foo_h form
-my $loaded;
-
-sub import {
- load_imports() unless $loaded++;
- my $this = shift;
- my @list = map { m/^\w+_h$/ ? ":$_" : $_ } @_;
- local $Exporter::ExportLevel = 1;
- Exporter::import($this,@list);
-}
-
-sub croak { require Carp; goto &Carp::croak }
-
-XSLoader::load 'POSIX', $VERSION;
-
-my $EINVAL = constant("EINVAL", 0);
-my $EAGAIN = constant("EAGAIN", 0);
-
-sub AUTOLOAD {
- if ($AUTOLOAD =~ /::(_?[a-z])/) {
- # require AutoLoader;
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD
- }
- local $! = 0;
- my $constname = $AUTOLOAD;
- $constname =~ s/.*:://;
- my $val = constant($constname, @_ ? $_[0] : 0);
- if ($! == 0) {
- *$AUTOLOAD = sub { $val };
- }
- elsif ($! == $EAGAIN) { # Not really a constant, so always call.
- *$AUTOLOAD = sub { constant($constname, $_[0]) };
- }
- elsif ($! == $EINVAL) {
- croak "$constname is not a valid POSIX macro";
- }
- else {
- croak "Your vendor has not defined POSIX macro $constname, used";
- }
-
- goto &$AUTOLOAD;
-}
-
-sub usage {
- my ($mess) = @_;
- croak "Usage: POSIX::$mess";
-}
-
-sub redef {
- my ($mess) = @_;
- croak "Use method $mess instead";
-}
-
-sub unimpl {
- my ($mess) = @_;
- $mess =~ s/xxx//;
- croak "Unimplemented: POSIX::$mess";
-}
-
-############################
-package POSIX::SigAction;
-
-sub new {
- bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3] || 0}, $_[0];
-}
-
-############################
-package POSIX; # return to package POSIX so AutoSplit is happy
-1;
-__END__
-
-sub assert {
- usage "assert(expr)" if @_ != 1;
- if (!$_[0]) {
- croak "Assertion failed";
- }
-}
-
-sub tolower {
- usage "tolower(string)" if @_ != 1;
- lc($_[0]);
-}
-
-sub toupper {
- usage "toupper(string)" if @_ != 1;
- uc($_[0]);
-}
-
-sub closedir {
- usage "closedir(dirhandle)" if @_ != 1;
- CORE::closedir($_[0]);
-}
-
-sub opendir {
- usage "opendir(directory)" if @_ != 1;
- my $dirhandle;
- CORE::opendir($dirhandle, $_[0])
- ? $dirhandle
- : undef;
-}
-
-sub readdir {
- usage "readdir(dirhandle)" if @_ != 1;
- CORE::readdir($_[0]);
-}
-
-sub rewinddir {
- usage "rewinddir(dirhandle)" if @_ != 1;
- CORE::rewinddir($_[0]);
-}
-
-sub errno {
- usage "errno()" if @_ != 0;
- $! + 0;
-}
-
-sub creat {
- usage "creat(filename, mode)" if @_ != 2;
- &open($_[0], &O_WRONLY | &O_CREAT | &O_TRUNC, $_[1]);
-}
-
-sub fcntl {
- usage "fcntl(filehandle, cmd, arg)" if @_ != 3;
- CORE::fcntl($_[0], $_[1], $_[2]);
-}
-
-sub getgrgid {
- usage "getgrgid(gid)" if @_ != 1;
- CORE::getgrgid($_[0]);
-}
-
-sub getgrnam {
- usage "getgrnam(name)" if @_ != 1;
- CORE::getgrnam($_[0]);
-}
-
-sub atan2 {
- usage "atan2(x,y)" if @_ != 2;
- CORE::atan2($_[0], $_[1]);
-}
-
-sub cos {
- usage "cos(x)" if @_ != 1;
- CORE::cos($_[0]);
-}
-
-sub exp {
- usage "exp(x)" if @_ != 1;
- CORE::exp($_[0]);
-}
-
-sub fabs {
- usage "fabs(x)" if @_ != 1;
- CORE::abs($_[0]);
-}
-
-sub log {
- usage "log(x)" if @_ != 1;
- CORE::log($_[0]);
-}
-
-sub pow {
- usage "pow(x,exponent)" if @_ != 2;
- $_[0] ** $_[1];
-}
-
-sub sin {
- usage "sin(x)" if @_ != 1;
- CORE::sin($_[0]);
-}
-
-sub sqrt {
- usage "sqrt(x)" if @_ != 1;
- CORE::sqrt($_[0]);
-}
-
-sub getpwnam {
- usage "getpwnam(name)" if @_ != 1;
- CORE::getpwnam($_[0]);
-}
-
-sub getpwuid {
- usage "getpwuid(uid)" if @_ != 1;
- CORE::getpwuid($_[0]);
-}
-
-sub longjmp {
- unimpl "longjmp() is C-specific: use die instead";
-}
-
-sub setjmp {
- unimpl "setjmp() is C-specific: use eval {} instead";
-}
-
-sub siglongjmp {
- unimpl "siglongjmp() is C-specific: use die instead";
-}
-
-sub sigsetjmp {
- unimpl "sigsetjmp() is C-specific: use eval {} instead";
-}
-
-sub kill {
- usage "kill(pid, sig)" if @_ != 2;
- CORE::kill $_[1], $_[0];
-}
-
-sub raise {
- usage "raise(sig)" if @_ != 1;
- CORE::kill $_[0], $$; # Is this good enough?
-}
-
-sub offsetof {
- unimpl "offsetof() is C-specific, stopped";
-}
-
-sub clearerr {
- redef "IO::Handle::clearerr()";
-}
-
-sub fclose {
- redef "IO::Handle::close()";
-}
-
-sub fdopen {
- redef "IO::Handle::new_from_fd()";
-}
-
-sub feof {
- redef "IO::Handle::eof()";
-}
-
-sub fgetc {
- redef "IO::Handle::getc()";
-}
-
-sub fgets {
- redef "IO::Handle::gets()";
-}
-
-sub fileno {
- redef "IO::Handle::fileno()";
-}
-
-sub fopen {
- redef "IO::File::open()";
-}
-
-sub fprintf {
- unimpl "fprintf() is C-specific--use printf instead";
-}
-
-sub fputc {
- unimpl "fputc() is C-specific--use print instead";
-}
-
-sub fputs {
- unimpl "fputs() is C-specific--use print instead";
-}
-
-sub fread {
- unimpl "fread() is C-specific--use read instead";
-}
-
-sub freopen {
- unimpl "freopen() is C-specific--use open instead";
-}
-
-sub fscanf {
- unimpl "fscanf() is C-specific--use <> and regular expressions instead";
-}
-
-sub fseek {
- redef "IO::Seekable::seek()";
-}
-
-sub ferror {
- redef "IO::Handle::error()";
-}
-
-sub fflush {
- redef "IO::Handle::flush()";
-}
-
-sub fgetpos {
- redef "IO::Seekable::getpos()";
-}
-
-sub fsetpos {
- redef "IO::Seekable::setpos()";
-}
-
-sub ftell {
- redef "IO::Seekable::tell()";
-}
-
-sub fwrite {
- unimpl "fwrite() is C-specific--use print instead";
-}
-
-sub getc {
- usage "getc(handle)" if @_ != 1;
- CORE::getc($_[0]);
-}
-
-sub getchar {
- usage "getchar()" if @_ != 0;
- CORE::getc(STDIN);
-}
-
-sub gets {
- usage "gets()" if @_ != 0;
- scalar <STDIN>;
-}
-
-sub perror {
- print STDERR "@_: " if @_;
- print STDERR $!,"\n";
-}
-
-sub printf {
- usage "printf(pattern, args...)" if @_ < 1;
- CORE::printf STDOUT @_;
-}
-
-sub putc {
- unimpl "putc() is C-specific--use print instead";
-}
-
-sub putchar {
- unimpl "putchar() is C-specific--use print instead";
-}
-
-sub puts {
- unimpl "puts() is C-specific--use print instead";
-}
-
-sub remove {
- usage "remove(filename)" if @_ != 1;
- CORE::unlink($_[0]);
-}
-
-sub rename {
- usage "rename(oldfilename, newfilename)" if @_ != 2;
- CORE::rename($_[0], $_[1]);
-}
-
-sub rewind {
- usage "rewind(filehandle)" if @_ != 1;
- CORE::seek($_[0],0,0);
-}
-
-sub scanf {
- unimpl "scanf() is C-specific--use <> and regular expressions instead";
-}
-
-sub sprintf {
- usage "sprintf(pattern,args)" if @_ == 0;
- CORE::sprintf(shift,@_);
-}
-
-sub sscanf {
- unimpl "sscanf() is C-specific--use regular expressions instead";
-}
-
-sub tmpfile {
- redef "IO::File::new_tmpfile()";
-}
-
-sub ungetc {
- redef "IO::Handle::ungetc()";
-}
-
-sub vfprintf {
- unimpl "vfprintf() is C-specific";
-}
-
-sub vprintf {
- unimpl "vprintf() is C-specific";
-}
-
-sub vsprintf {
- unimpl "vsprintf() is C-specific";
-}
-
-sub abs {
- usage "abs(x)" if @_ != 1;
- CORE::abs($_[0]);
-}
-
-sub atexit {
- unimpl "atexit() is C-specific: use END {} instead";
-}
-
-sub atof {
- unimpl "atof() is C-specific, stopped";
-}
-
-sub atoi {
- unimpl "atoi() is C-specific, stopped";
-}
-
-sub atol {
- unimpl "atol() is C-specific, stopped";
-}
-
-sub bsearch {
- unimpl "bsearch() not supplied";
-}
-
-sub calloc {
- unimpl "calloc() is C-specific, stopped";
-}
-
-sub div {
- unimpl "div() is C-specific, stopped";
-}
-
-sub exit {
- usage "exit(status)" if @_ != 1;
- CORE::exit($_[0]);
-}
-
-sub free {
- unimpl "free() is C-specific, stopped";
-}
-
-sub getenv {
- usage "getenv(name)" if @_ != 1;
- $ENV{$_[0]};
-}
-
-sub labs {
- unimpl "labs() is C-specific, use abs instead";
-}
-
-sub ldiv {
- unimpl "ldiv() is C-specific, use / and int instead";
-}
-
-sub malloc {
- unimpl "malloc() is C-specific, stopped";
-}
-
-sub qsort {
- unimpl "qsort() is C-specific, use sort instead";
-}
-
-sub rand {
- unimpl "rand() is non-portable, use Perl's rand instead";
-}
-
-sub realloc {
- unimpl "realloc() is C-specific, stopped";
-}
-
-sub srand {
- unimpl "srand()";
-}
-
-sub system {
- usage "system(command)" if @_ != 1;
- CORE::system($_[0]);
-}
-
-sub memchr {
- unimpl "memchr() is C-specific, use index() instead";
-}
-
-sub memcmp {
- unimpl "memcmp() is C-specific, use eq instead";
-}
-
-sub memcpy {
- unimpl "memcpy() is C-specific, use = instead";
-}
-
-sub memmove {
- unimpl "memmove() is C-specific, use = instead";
-}
-
-sub memset {
- unimpl "memset() is C-specific, use x instead";
-}
-
-sub strcat {
- unimpl "strcat() is C-specific, use .= instead";
-}
-
-sub strchr {
- unimpl "strchr() is C-specific, use index() instead";
-}
-
-sub strcmp {
- unimpl "strcmp() is C-specific, use eq instead";
-}
-
-sub strcpy {
- unimpl "strcpy() is C-specific, use = instead";
-}
-
-sub strcspn {
- unimpl "strcspn() is C-specific, use regular expressions instead";
-}
-
-sub strerror {
- usage "strerror(errno)" if @_ != 1;
- local $! = $_[0];
- $! . "";
-}
-
-sub strlen {
- unimpl "strlen() is C-specific, use length instead";
-}
-
-sub strncat {
- unimpl "strncat() is C-specific, use .= instead";
-}
-
-sub strncmp {
- unimpl "strncmp() is C-specific, use eq instead";
-}
-
-sub strncpy {
- unimpl "strncpy() is C-specific, use = instead";
-}
-
-sub strpbrk {
- unimpl "strpbrk() is C-specific, stopped";
-}
-
-sub strrchr {
- unimpl "strrchr() is C-specific, use rindex() instead";
-}
-
-sub strspn {
- unimpl "strspn() is C-specific, stopped";
-}
-
-sub strstr {
- usage "strstr(big, little)" if @_ != 2;
- CORE::index($_[0], $_[1]);
-}
-
-sub strtok {
- unimpl "strtok() is C-specific, stopped";
-}
-
-sub chmod {
- usage "chmod(mode, filename)" if @_ != 2;
- CORE::chmod($_[0], $_[1]);
-}
-
-sub fstat {
- usage "fstat(fd)" if @_ != 1;
- local *TMP;
- CORE::open(TMP, "<&$_[0]"); # Gross.
- my @l = CORE::stat(TMP);
- CORE::close(TMP);
- @l;
-}
-
-sub mkdir {
- usage "mkdir(directoryname, mode)" if @_ != 2;
- CORE::mkdir($_[0], $_[1]);
-}
-
-sub stat {
- usage "stat(filename)" if @_ != 1;
- CORE::stat($_[0]);
-}
-
-sub umask {
- usage "umask(mask)" if @_ != 1;
- CORE::umask($_[0]);
-}
-
-sub wait {
- usage "wait()" if @_ != 0;
- CORE::wait();
-}
-
-sub waitpid {
- usage "waitpid(pid, options)" if @_ != 2;
- CORE::waitpid($_[0], $_[1]);
-}
-
-sub gmtime {
- usage "gmtime(time)" if @_ != 1;
- CORE::gmtime($_[0]);
-}
-
-sub localtime {
- usage "localtime(time)" if @_ != 1;
- CORE::localtime($_[0]);
-}
-
-sub time {
- usage "time()" if @_ != 0;
- CORE::time;
-}
-
-sub alarm {
- usage "alarm(seconds)" if @_ != 1;
- CORE::alarm($_[0]);
-}
-
-sub chdir {
- usage "chdir(directory)" if @_ != 1;
- CORE::chdir($_[0]);
-}
-
-sub chown {
- usage "chown(filename, uid, gid)" if @_ != 3;
- CORE::chown($_[0], $_[1], $_[2]);
-}
-
-sub execl {
- unimpl "execl() is C-specific, stopped";
-}
-
-sub execle {
- unimpl "execle() is C-specific, stopped";
-}
-
-sub execlp {
- unimpl "execlp() is C-specific, stopped";
-}
-
-sub execv {
- unimpl "execv() is C-specific, stopped";
-}
-
-sub execve {
- unimpl "execve() is C-specific, stopped";
-}
-
-sub execvp {
- unimpl "execvp() is C-specific, stopped";
-}
-
-sub fork {
- usage "fork()" if @_ != 0;
- CORE::fork;
-}
-
-sub getcwd
-{
- usage "getcwd()" if @_ != 0;
- if ($^O eq 'MSWin32') {
- # this perhaps applies to everyone else also?
- require Cwd;
- $cwd = &Cwd::cwd;
- }
- else {
- chop($cwd = `pwd`);
- }
- $cwd;
-}
-
-sub getegid {
- usage "getegid()" if @_ != 0;
- $) + 0;
-}
-
-sub geteuid {
- usage "geteuid()" if @_ != 0;
- $> + 0;
-}
-
-sub getgid {
- usage "getgid()" if @_ != 0;
- $( + 0;
-}
-
-sub getgroups {
- usage "getgroups()" if @_ != 0;
- my %seen;
- grep(!$seen{$_}++, split(' ', $) ));
-}
-
-sub getlogin {
- usage "getlogin()" if @_ != 0;
- CORE::getlogin();
-}
-
-sub getpgrp {
- usage "getpgrp()" if @_ != 0;
- CORE::getpgrp;
-}
-
-sub getpid {
- usage "getpid()" if @_ != 0;
- $$;
-}
-
-sub getppid {
- usage "getppid()" if @_ != 0;
- CORE::getppid;
-}
-
-sub getuid {
- usage "getuid()" if @_ != 0;
- $<;
-}
-
-sub isatty {
- usage "isatty(filehandle)" if @_ != 1;
- -t $_[0];
-}
-
-sub link {
- usage "link(oldfilename, newfilename)" if @_ != 2;
- CORE::link($_[0], $_[1]);
-}
-
-sub rmdir {
- usage "rmdir(directoryname)" if @_ != 1;
- CORE::rmdir($_[0]);
-}
-
-sub setbuf {
- redef "IO::Handle::setbuf()";
-}
-
-sub setgid {
- usage "setgid(gid)" if @_ != 1;
- $( = $_[0];
-}
-
-sub setuid {
- usage "setuid(uid)" if @_ != 1;
- $< = $_[0];
-}
-
-sub setvbuf {
- redef "IO::Handle::setvbuf()";
-}
-
-sub sleep {
- usage "sleep(seconds)" if @_ != 1;
- CORE::sleep($_[0]);
-}
-
-sub unlink {
- usage "unlink(filename)" if @_ != 1;
- CORE::unlink($_[0]);
-}
-
-sub utime {
- usage "utime(filename, atime, mtime)" if @_ != 3;
- CORE::utime($_[1], $_[2], $_[0]);
-}
-
-sub load_imports {
-%EXPORT_TAGS = (
-
- assert_h => [qw(assert NDEBUG)],
-
- ctype_h => [qw(isalnum isalpha iscntrl isdigit isgraph islower
- isprint ispunct isspace isupper isxdigit tolower toupper)],
-
- dirent_h => [qw()],
-
- errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT
- EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED
- ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT
- EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS
- EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
- EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH
- ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM
- ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR
- ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM
- EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE
- ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT
- ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY
- EUSERS EWOULDBLOCK EXDEV errno)],
-
- fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK
- F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK
- O_ACCMODE O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK
- O_RDONLY O_RDWR O_TRUNC O_WRONLY
- creat
- SEEK_CUR SEEK_END SEEK_SET
- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
- S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG S_ISUID
- S_IWGRP S_IWOTH S_IWUSR)],
-
- float_h => [qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG
- DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
- DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP
- FLT_DIG FLT_EPSILON FLT_MANT_DIG
- FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP
- FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP
- FLT_RADIX FLT_ROUNDS
- LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG
- LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP
- LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP)],
-
- grp_h => [qw()],
-
- limits_h => [qw( ARG_MAX CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX
- INT_MAX INT_MIN LINK_MAX LONG_MAX LONG_MIN MAX_CANON
- MAX_INPUT MB_LEN_MAX NAME_MAX NGROUPS_MAX OPEN_MAX
- PATH_MAX PIPE_BUF SCHAR_MAX SCHAR_MIN SHRT_MAX SHRT_MIN
- SSIZE_MAX STREAM_MAX TZNAME_MAX UCHAR_MAX UINT_MAX
- ULONG_MAX USHRT_MAX _POSIX_ARG_MAX _POSIX_CHILD_MAX
- _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT
- _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_OPEN_MAX
- _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX
- _POSIX_STREAM_MAX _POSIX_TZNAME_MAX)],
-
- locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC
- LC_TIME NULL localeconv setlocale)],
-
- math_h => [qw(HUGE_VAL acos asin atan ceil cosh fabs floor fmod
- frexp ldexp log10 modf pow sinh tan tanh)],
-
- pwd_h => [qw()],
-
- setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)],
-
- signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
- SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
- SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL
- SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN
- SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR
- SIG_IGN SIG_SETMASK SIG_UNBLOCK raise sigaction signal
- sigpending sigprocmask sigsuspend)],
-
- stdarg_h => [qw()],
-
- stddef_h => [qw(NULL offsetof)],
-
- stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid
- L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET
- STREAM_MAX TMP_MAX stderr stdin stdout
- clearerr fclose fdopen feof ferror fflush fgetc fgetpos
- fgets fopen fprintf fputc fputs fread freopen
- fscanf fseek fsetpos ftell fwrite getchar gets
- perror putc putchar puts remove rewind
- scanf setbuf setvbuf sscanf tmpfile tmpnam
- ungetc vfprintf vprintf vsprintf)],
-
- stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX
- abort atexit atof atoi atol bsearch calloc div
- free getenv labs ldiv malloc mblen mbstowcs mbtowc
- qsort realloc strtod strtol strtoul wcstombs wctomb)],
-
- string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat
- strchr strcmp strcoll strcpy strcspn strerror strlen
- strncat strncmp strncpy strpbrk strrchr strspn strstr
- strtok strxfrm)],
-
- sys_stat_h => [qw(S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
- S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG
- S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR
- fstat mkfifo)],
-
- sys_times_h => [qw()],
-
- sys_types_h => [qw()],
-
- sys_utsname_h => [qw(uname)],
-
- sys_wait_h => [qw(WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED
- WNOHANG WSTOPSIG WTERMSIG WUNTRACED)],
-
- termios_h => [qw( B0 B110 B1200 B134 B150 B1800 B19200 B200 B2400
- B300 B38400 B4800 B50 B600 B75 B9600 BRKINT CLOCAL
- CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB ECHO ECHOE ECHOK
- ECHONL HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR
- INLCR INPCK ISIG ISTRIP IXOFF IXON NCCS NOFLSH OPOST
- PARENB PARMRK PARODD TCIFLUSH TCIOFF TCIOFLUSH TCION
- TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW
- TOSTOP VEOF VEOL VERASE VINTR VKILL VMIN VQUIT VSTART
- VSTOP VSUSP VTIME
- cfgetispeed cfgetospeed cfsetispeed cfsetospeed tcdrain
- tcflow tcflush tcgetattr tcsendbreak tcsetattr )],
-
- time_h => [qw(CLK_TCK CLOCKS_PER_SEC NULL asctime clock ctime
- difftime mktime strftime tzset tzname)],
-
- unistd_h => [qw(F_OK NULL R_OK SEEK_CUR SEEK_END SEEK_SET
- STDERR_FILENO STDIN_FILENO STDOUT_FILENO W_OK X_OK
- _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON
- _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX
- _PC_PIPE_BUF _PC_VDISABLE _POSIX_CHOWN_RESTRICTED
- _POSIX_JOB_CONTROL _POSIX_NO_TRUNC _POSIX_SAVED_IDS
- _POSIX_VDISABLE _POSIX_VERSION _SC_ARG_MAX
- _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL
- _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_SAVED_IDS
- _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
- _exit access ctermid cuserid
- dup2 dup execl execle execlp execv execve execvp
- fpathconf getcwd getegid geteuid getgid getgroups
- getpid getuid isatty lseek pathconf pause setgid setpgid
- setsid setuid sysconf tcgetpgrp tcsetpgrp ttyname)],
-
- utime_h => [qw()],
-
-);
-
-# Exporter::export_tags();
-for (values %EXPORT_TAGS) {
- push @EXPORT, @$_;
-}
-
-@EXPORT_OK = qw(
- closedir opendir readdir rewinddir
- fcntl open
- getgrgid getgrnam
- atan2 cos exp log sin sqrt
- getpwnam getpwuid
- kill
- fileno getc printf rename sprintf
- abs exit rand srand system
- chmod mkdir stat umask
- times
- wait waitpid
- gmtime localtime time
- alarm chdir chown close fork getlogin getppid getpgrp link
- pipe read rmdir sleep unlink write
- utime
- nice
-);
-
-require Exporter;
-}
diff --git a/contrib/perl5/ext/POSIX/POSIX.pod b/contrib/perl5/ext/POSIX/POSIX.pod
deleted file mode 100644
index 4976135..0000000
--- a/contrib/perl5/ext/POSIX/POSIX.pod
+++ /dev/null
@@ -1,1984 +0,0 @@
-=head1 NAME
-
-POSIX - Perl interface to IEEE Std 1003.1
-
-=head1 SYNOPSIS
-
- use POSIX;
- use POSIX qw(setsid);
- use POSIX qw(:errno_h :fcntl_h);
-
- printf "EINTR is %d\n", EINTR;
-
- $sess_id = POSIX::setsid();
-
- $fd = POSIX::open($path, O_CREAT|O_EXCL|O_WRONLY, 0644);
- # note: that's a filedescriptor, *NOT* a filehandle
-
-=head1 DESCRIPTION
-
-The POSIX module permits you to access all (or nearly all) the standard
-POSIX 1003.1 identifiers. Many of these identifiers have been given Perl-ish
-interfaces. Things which are C<#defines> in C, like EINTR or O_NDELAY, are
-automatically exported into your namespace. All functions are only exported
-if you ask for them explicitly. Most likely people will prefer to use the
-fully-qualified function names.
-
-This document gives a condensed list of the features available in the POSIX
-module. Consult your operating system's manpages for general information on
-most features. Consult L<perlfunc> for functions which are noted as being
-identical to Perl's builtin functions.
-
-The first section describes POSIX functions from the 1003.1 specification.
-The second section describes some classes for signal objects, TTY objects,
-and other miscellaneous objects. The remaining sections list various
-constants and macros in an organization which roughly follows IEEE Std
-1003.1b-1993.
-
-=head1 NOTE
-
-The POSIX module is probably the most complex Perl module supplied with
-the standard distribution. It incorporates autoloading, namespace games,
-and dynamic loading of code that's in Perl, C, or both. It's a great
-source of wisdom.
-
-=head1 CAVEATS
-
-A few functions are not implemented because they are C specific. If you
-attempt to call these, they will print a message telling you that they
-aren't implemented, and suggest using the Perl equivalent should one
-exist. For example, trying to access the setjmp() call will elicit the
-message "setjmp() is C-specific: use eval {} instead".
-
-Furthermore, some evil vendors will claim 1003.1 compliance, but in fact
-are not so: they will not pass the PCTS (POSIX Compliance Test Suites).
-For example, one vendor may not define EDEADLK, or the semantics of the
-errno values set by open(2) might not be quite right. Perl does not
-attempt to verify POSIX compliance. That means you can currently
-successfully say "use POSIX", and then later in your program you find
-that your vendor has been lax and there's no usable ICANON macro after
-all. This could be construed to be a bug.
-
-=head1 FUNCTIONS
-
-=over 8
-
-=item _exit
-
-This is identical to the C function C<_exit()>. It exits the program
-immediately which means among other things buffered I/O is B<not> flushed.
-
-=item abort
-
-This is identical to the C function C<abort()>. It terminates the
-process with a C<SIGABRT> signal unless caught by a signal handler or
-if the handler does not return normally (it e.g. does a C<longjmp>).
-
-=item abs
-
-This is identical to Perl's builtin C<abs()> function, returning
-the absolute value of its numerical argument.
-
-=item access
-
-Determines the accessibility of a file.
-
- if( POSIX::access( "/", &POSIX::R_OK ) ){
- print "have read permission\n";
- }
-
-Returns C<undef> on failure. Note: do not use C<access()> for
-security purposes. Between the C<access()> call and the operation
-you are preparing for the permissions might change: a classic
-I<race condition>.
-
-=item acos
-
-This is identical to the C function C<acos()>, returning
-the arcus cosine of its numerical argument. See also L<Math::Trig>.
-
-=item alarm
-
-This is identical to Perl's builtin C<alarm()> function,
-either for arming or disarming the C<SIGARLM> timer.
-
-=item asctime
-
-This is identical to the C function C<asctime()>. It returns
-a string of the form
-
- "Fri Jun 2 18:22:13 2000\n\0"
-
-and it is called thusly
-
- $asctime = asctime($sec, $min, $hour, $mday, $mon, $year,
- $wday, $yday, $isdst);
-
-The C<$mon> is zero-based: January equals C<0>. The C<$year> is
-1900-based: 2001 equals C<101>. The C<$wday>, C<$yday>, and C<$isdst>
-default to zero (and the first two are usually ignored anyway).
-
-=item asin
-
-This is identical to the C function C<asin()>, returning
-the arcus sine of its numerical argument. See also L<Math::Trig>.
-
-=item assert
-
-Unimplemented, but you can use L<perlfunc/die> and the L<Carp> module
-to achieve similar things.
-
-=item atan
-
-This is identical to the C function C<atan()>, returning the
-arcus tangent of its numerical argument. See also L<Math::Trig>.
-
-=item atan2
-
-This is identical to Perl's builtin C<atan2()> function, returning
-the arcus tangent defined by its two numerical arguments, the I<y>
-coordinate and the I<x> coordinate. See also L<Math::Trig>.
-
-=item atexit
-
-atexit() is C-specific: use C<END {}> instead, see L<perlsub>.
-
-=item atof
-
-atof() is C-specific. Perl converts strings to numbers transparently.
-If you need to force a scalar to a number, add a zero to it.
-
-=item atoi
-
-atoi() is C-specific. Perl converts strings to numbers transparently.
-If you need to force a scalar to a number, add a zero to it.
-If you need to have just the integer part, see L<perlfunc/int>.
-
-=item atol
-
-atol() is C-specific. Perl converts strings to numbers transparently.
-If you need to force a scalar to a number, add a zero to it.
-If you need to have just the integer part, see L<perlfunc/int>.
-
-=item bsearch
-
-bsearch() not supplied. For doing binary search on wordlists,
-see L<Search::Dict>.
-
-=item calloc
-
-calloc() is C-specific. Perl does memory management transparently.
-
-=item ceil
-
-This is identical to the C function C<ceil()>, returning the smallest
-integer value greater than or equal to the given numerical argument.
-
-=item chdir
-
-This is identical to Perl's builtin C<chdir()> function, allowing
-one to change the working (default) directory, see L<perlfunc/chdir>.
-
-=item chmod
-
-This is identical to Perl's builtin C<chmod()> function, allowing
-one to change file and directory permissions, see L<perlfunc/chmod>.
-
-=item chown
-
-This is identical to Perl's builtin C<chown()> function, allowing one
-to change file and directory owners and groups, see L<perlfunc/chown>.
-
-=item clearerr
-
-Use the method L<IO::Handle::clearerr()> instead, to reset the error
-state (if any) and EOF state (if any) of the given stream.
-
-=item clock
-
-This is identical to the C function C<clock()>, returning the
-amount of spent processor time in microseconds.
-
-=item close
-
-Close the file. This uses file descriptors such as those obtained by calling
-C<POSIX::open>.
-
- $fd = POSIX::open( "foo", &POSIX::O_RDONLY );
- POSIX::close( $fd );
-
-Returns C<undef> on failure.
-
-See also L<perlfunc/close>.
-
-=item closedir
-
-This is identical to Perl's builtin C<closedir()> function for closing
-a directory handle, see L<perlfunc/closedir>.
-
-=item cos
-
-This is identical to Perl's builtin C<cos()> function, for returning
-the cosine of its numerical argument, see L<perlfunc/cos>.
-See also L<Math::Trig>.
-
-=item cosh
-
-This is identical to the C function C<cosh()>, for returning
-the hyperbolic cosine of its numeric argument. See also L<Math::Trig>.
-
-=item creat
-
-Create a new file. This returns a file descriptor like the ones returned by
-C<POSIX::open>. Use C<POSIX::close> to close the file.
-
- $fd = POSIX::creat( "foo", 0611 );
- POSIX::close( $fd );
-
-See also L<perlfunc/sysopen> and its C<O_CREAT> flag.
-
-=item ctermid
-
-Generates the path name for the controlling terminal.
-
- $path = POSIX::ctermid();
-
-=item ctime
-
-This is identical to the C function C<ctime()> and equivalent
-to C<asctime(localtime(...))>, see L</asctime> and L</localtime>.
-
-=item cuserid
-
-Get the login name of the owner of the current process.
-
- $name = POSIX::cuserid();
-
-=item difftime
-
-This is identical to the C function C<difftime()>, for returning
-the time difference (in seconds) between two times (as returned
-by C<time()>), see L</time>.
-
-=item div
-
-div() is C-specific, use L<perlfunc/int> on the usual C</> division and
-the modulus C<%>.
-
-=item dup
-
-This is similar to the C function C<dup()>, for duplicating a file
-descriptor.
-
-This uses file descriptors such as those obtained by calling
-C<POSIX::open>.
-
-Returns C<undef> on failure.
-
-=item dup2
-
-This is similar to the C function C<dup2()>, for duplicating a file
-descriptor to an another known file descriptor.
-
-This uses file descriptors such as those obtained by calling
-C<POSIX::open>.
-
-Returns C<undef> on failure.
-
-=item errno
-
-Returns the value of errno.
-
- $errno = POSIX::errno();
-
-This identical to the numerical values of the C<$!>, see L<perlvar/$ERRNO>.
-
-=item execl
-
-execl() is C-specific, see L<perlfunc/exec>.
-
-=item execle
-
-execle() is C-specific, see L<perlfunc/exec>.
-
-=item execlp
-
-execlp() is C-specific, see L<perlfunc/exec>.
-
-=item execv
-
-execv() is C-specific, see L<perlfunc/exec>.
-
-=item execve
-
-execve() is C-specific, see L<perlfunc/exec>.
-
-=item execvp
-
-execvp() is C-specific, see L<perlfunc/exec>.
-
-=item exit
-
-This is identical to Perl's builtin C<exit()> function for exiting the
-program, see L<perlfunc/exit>.
-
-=item exp
-
-This is identical to Perl's builtin C<exp()> function for
-returning the exponent (I<e>-based) of the numerical argument,
-see L<perlfunc/exp>.
-
-=item fabs
-
-This is identical to Perl's builtin C<abs()> function for returning
-the absolute value of the numerical argument, see L<perlfunc/abs>.
-
-=item fclose
-
-Use method C<IO::Handle::close()> instead, or see L<perlfunc/close>.
-
-=item fcntl
-
-This is identical to Perl's builtin C<fcntl()> function,
-see L<perlfunc/fcntl>.
-
-=item fdopen
-
-Use method C<IO::Handle::new_from_fd()> instead, or see L<perlfunc/open>.
-
-=item feof
-
-Use method C<IO::Handle::eof()> instead, or see L<perlfunc/eof>.
-
-=item ferror
-
-Use method C<IO::Handle::error()> instead.
-
-=item fflush
-
-Use method C<IO::Handle::flush()> instead.
-See also L<perlvar/$OUTPUT_AUTOFLUSH>.
-
-=item fgetc
-
-Use method C<IO::Handle::getc()> instead, or see L<perlfunc/read>.
-
-=item fgetpos
-
-Use method C<IO::Seekable::getpos()> instead, or see L<L/seek>.
-
-=item fgets
-
-Use method C<IO::Handle::gets()> instead. Similar to E<lt>E<gt>, also known
-as L<perlfunc/readline>.
-
-=item fileno
-
-Use method C<IO::Handle::fileno()> instead, or see L<perlfunc/fileno>.
-
-=item floor
-
-This is identical to the C function C<floor()>, returning the largest
-integer value less than or equal to the numerical argument.
-
-=item fmod
-
-This is identical to the C function C<fmod()>.
-
- $r = modf($x, $y);
-
-It returns the remainder C<$r = $x - $n*$y>, where C<$n = trunc($x/$y)>.
-The C<$r> has the same sign as C<$x> and magnitude (absolute value)
-less than the magnitude of C<$y>.
-
-=item fopen
-
-Use method C<IO::File::open()> instead, or see L<perlfunc/open>.
-
-=item fork
-
-This is identical to Perl's builtin C<fork()> function
-for duplicating the current process, see L<perlfunc/fork>
-and L<perlfork> if you are in Windows.
-
-=item fpathconf
-
-Retrieves the value of a configurable limit on a file or directory. This
-uses file descriptors such as those obtained by calling C<POSIX::open>.
-
-The following will determine the maximum length of the longest allowable
-pathname on the filesystem which holds C</tmp/foo>.
-
- $fd = POSIX::open( "/tmp/foo", &POSIX::O_RDONLY );
- $path_max = POSIX::fpathconf( $fd, &POSIX::_PC_PATH_MAX );
-
-Returns C<undef> on failure.
-
-=item fprintf
-
-fprintf() is C-specific, see L<perlfunc/printf> instead.
-
-=item fputc
-
-fputc() is C-specific, see L<perlfunc/print> instead.
-
-=item fputs
-
-fputs() is C-specific, see L<perlfunc/print> instead.
-
-=item fread
-
-fread() is C-specific, see L<perlfunc/read> instead.
-
-=item free
-
-free() is C-specific. Perl does memory management transparently.
-
-=item freopen
-
-freopen() is C-specific, see L<perlfunc/open> instead.
-
-=item frexp
-
-Return the mantissa and exponent of a floating-point number.
-
- ($mantissa, $exponent) = POSIX::frexp( 1.234e56 );
-
-=item fscanf
-
-fscanf() is C-specific, use E<lt>E<gt> and regular expressions instead.
-
-=item fseek
-
-Use method C<IO::Seekable::seek()> instead, or see L<perlfunc/seek>.
-
-=item fsetpos
-
-Use method C<IO::Seekable::setpos()> instead, or seek L<perlfunc/seek>.
-
-=item fstat
-
-Get file status. This uses file descriptors such as those obtained by
-calling C<POSIX::open>. The data returned is identical to the data from
-Perl's builtin C<stat> function.
-
- $fd = POSIX::open( "foo", &POSIX::O_RDONLY );
- @stats = POSIX::fstat( $fd );
-
-=item ftell
-
-Use method C<IO::Seekable::tell()> instead, or see L<perlfunc/tell>.
-
-=item fwrite
-
-fwrite() is C-specific, see L<perlfunc/print> instead.
-
-=item getc
-
-This is identical to Perl's builtin C<getc()> function,
-see L<perlfunc/getc>.
-
-=item getchar
-
-Returns one character from STDIN. Identical to Perl's C<getc()>,
-see L<perlfunc/getc>.
-
-=item getcwd
-
-Returns the name of the current working directory.
-See also L<Cwd>.
-
-=item getegid
-
-Returns the effective group identifier. Similar to Perl' s builtin
-variable C<$(>, see L<perlvar/$EGID>.
-
-=item getenv
-
-Returns the value of the specified enironment variable.
-The same information is available through the C<%ENV> array.
-
-=item geteuid
-
-Returns the effective user identifier. Identical to Perl's builtin C<$E<gt>>
-variable, see L<perlvar/$EUID>.
-
-=item getgid
-
-Returns the user's real group identifier. Similar to Perl's builtin
-variable C<$)>, see L<perlvar/$GID>.
-
-=item getgrgid
-
-This is identical to Perl's builtin C<getgrgid()> function for
-returning group entries by group identifiers, see
-L<perlfunc/getgrgid>.
-
-=item getgrnam
-
-This is identical to Perl's builtin C<getgrnam()> function for
-returning group entries by group names, see L<perlfunc/getgrnam>.
-
-=item getgroups
-
-Returns the ids of the user's supplementary groups. Similar to Perl's
-builtin variable C<$)>, see L<perlvar/$GID>.
-
-=item getlogin
-
-This is identical to Perl's builtin C<getlogin()> function for
-returning the user name associated with the current session, see
-L<perlfunc/getlogin>.
-
-=item getpgrp
-
-This is identical to Perl's builtin C<getpgrp()> function for
-returning the prcess group identifier of the current process, see
-L<perlfunc/getpgrp>.
-
-=item getpid
-
-Returns the process identifier. Identical to Perl's builtin
-variable C<$$>, see L<perlvar/$PID>.
-
-=item getppid
-
-This is identical to Perl's builtin C<getppid()> function for
-returning the process identifier of the parent process of the current
-process , see L<perlfunc/getppid>.
-
-=item getpwnam
-
-This is identical to Perl's builtin C<getpwnam()> function for
-returning user entries by user names, see L<perlfunc/getpwnam>.
-
-=item getpwuid
-
-This is identical to Perl's builtin C<getpwuid()> function for
-returning user entries by user identifiers, see L<perlfunc/getpwuid>.
-
-=item gets
-
-Returns one line from C<STDIN>, similar to E<lt>E<gt>, also known
-as the C<readline()> function, see L<perlfunc/readline>.
-
-B<NOTE>: if you have C programs that still use C<gets()>, be very
-afraid. The C<gets()> function is a source of endless grief because
-it has no buffer overrun checks. It should B<never> be used. The
-C<fgets()> function should be preferred instead.
-
-=item getuid
-
-Returns the user's identifier. Identical to Perl's builtin C<$E<lt>> variable,
-see L<perlvar/$UID>.
-
-=item gmtime
-
-This is identical to Perl's builtin C<gmtime()> function for
-converting seconds since the epoch to a date in Greenwich Mean Time,
-see L<perlfunc/gmtime>.
-
-=item isalnum
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:isalnum:]]/> construct instead, or possibly the C</\w/> construct.
-
-=item isalpha
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:isalpha:]]/> construct instead.
-
-=item isatty
-
-Returns a boolean indicating whether the specified filehandle is connected
-to a tty. Similar to the C<-t> operator, see L<perlfunc/-X>.
-
-=item iscntrl
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:iscntrl:]]/> construct instead.
-
-=item isdigit
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:isdigit:]]/> construct instead, or the C</\d/> construct.
-
-=item isgraph
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:isgraph:]]/> construct instead.
-
-=item islower
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:islower:]]/> construct instead. Do B<not> use C</a-z/>.
-
-=item isprint
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:isprint:]]/> construct instead.
-
-=item ispunct
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:ispunct:]]/> construct instead.
-
-=item isspace
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:isspace:]]/> construct instead, or the C</\s/> construct.
-
-=item isupper
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:isupper:]]/> construct instead. Do B<not> use C</A-Z/>.
-
-=item isxdigit
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using regular expressions and the
-C</[[:isxdigit:]]/> construct instead, or simply C</[0-9a-f]/i>.
-
-=item kill
-
-This is identical to Perl's builtin C<kill()> function for sending
-signals to processes (often to terminate them), see L<perlfunc/kill>.
-
-=item labs
-
-(For returning absolute values of long integers.)
-labs() is C-specific, see L<perlfunc/abs> instead.
-
-=item ldexp
-
-This is identical to the C function C<ldexp()>
-for multiplying floating point numbers with powers of two.
-
- $x_quadrupled = POSIX::ldexp($x, 2);
-
-=item ldiv
-
-(For computing dividends of long integers.)
-ldiv() is C-specific, use C</> and C<int()> instead.
-
-=item link
-
-This is identical to Perl's builtin C<link()> function
-for creating hard links into files, see L<perlfunc/link>.
-
-=item localeconv
-
-Get numeric formatting information. Returns a reference to a hash
-containing the current locale formatting values.
-
-Here is how to query the database for the B<de> (Deutsch or German) locale.
-
- $loc = POSIX::setlocale( &POSIX::LC_ALL, "de" );
- print "Locale = $loc\n";
- $lconv = POSIX::localeconv();
- print "decimal_point = ", $lconv->{decimal_point}, "\n";
- print "thousands_sep = ", $lconv->{thousands_sep}, "\n";
- print "grouping = ", $lconv->{grouping}, "\n";
- print "int_curr_symbol = ", $lconv->{int_curr_symbol}, "\n";
- print "currency_symbol = ", $lconv->{currency_symbol}, "\n";
- print "mon_decimal_point = ", $lconv->{mon_decimal_point}, "\n";
- print "mon_thousands_sep = ", $lconv->{mon_thousands_sep}, "\n";
- print "mon_grouping = ", $lconv->{mon_grouping}, "\n";
- print "positive_sign = ", $lconv->{positive_sign}, "\n";
- print "negative_sign = ", $lconv->{negative_sign}, "\n";
- print "int_frac_digits = ", $lconv->{int_frac_digits}, "\n";
- print "frac_digits = ", $lconv->{frac_digits}, "\n";
- print "p_cs_precedes = ", $lconv->{p_cs_precedes}, "\n";
- print "p_sep_by_space = ", $lconv->{p_sep_by_space}, "\n";
- print "n_cs_precedes = ", $lconv->{n_cs_precedes}, "\n";
- print "n_sep_by_space = ", $lconv->{n_sep_by_space}, "\n";
- print "p_sign_posn = ", $lconv->{p_sign_posn}, "\n";
- print "n_sign_posn = ", $lconv->{n_sign_posn}, "\n";
-
-=item localtime
-
-This is identical to Perl's builtin C<localtime()> function for
-converting seconds since the epoch to a date see L<perlfunc/localtime>.
-
-=item log
-
-This is identical to Perl's builtin C<log()> function,
-returning the natural (I<e>-based) logarithm of the numerical argument,
-see L<perlfunc/log>.
-
-=item log10
-
-This is identical to the C function C<log10()>,
-returning the 10-base logarithm of the numerical argument.
-You can also use
-
- sub log10 { log($_[0]) / log(10) }
-
-or
-
- sub log10 { log($_[0]) / 2.30258509299405 }
-
-or
-
- sub log10 { log($_[0]) * 0.434294481903252 }
-
-=item longjmp
-
-longjmp() is C-specific: use L<perlfunc/die> instead.
-
-=item lseek
-
-Move the file's read/write position. This uses file descriptors such as
-those obtained by calling C<POSIX::open>.
-
- $fd = POSIX::open( "foo", &POSIX::O_RDONLY );
- $off_t = POSIX::lseek( $fd, 0, &POSIX::SEEK_SET );
-
-Returns C<undef> on failure.
-
-=item malloc
-
-malloc() is C-specific. Perl does memory management transparently.
-
-=item mblen
-
-This is identical to the C function C<mblen()>.
-Perl does not have any support for the wide and multibyte
-characters of the C standards, so this might be a rather
-useless function.
-
-=item mbstowcs
-
-This is identical to the C function C<mbstowcs()>.
-Perl does not have any support for the wide and multibyte
-characters of the C standards, so this might be a rather
-useless function.
-
-=item mbtowc
-
-This is identical to the C function C<mbtowc()>.
-Perl does not have any support for the wide and multibyte
-characters of the C standards, so this might be a rather
-useless function.
-
-=item memchr
-
-memchr() is C-specific, see L<perlfunc/index> instead.
-
-=item memcmp
-
-memcmp() is C-specific, use C<eq> instead, see L<perlop>.
-
-=item memcpy
-
-memcpy() is C-specific, use C<=>, see L<perlop>, or see L<perlfunc/substr>.
-
-=item memmove
-
-memmove() is C-specific, use C<=>, see L<perlop>, or see L<perlfunc/substr>.
-
-=item memset
-
-memset() is C-specific, use C<x> instead, see L<perlop>.
-
-=item mkdir
-
-This is identical to Perl's builtin C<mkdir()> function
-for creating directories, see L<perlfunc/mkdir>.
-
-=item mkfifo
-
-This is similar to the C function C<mkfifo()> for creating
-FIFO special files.
-
- if (mkfifo($path, $mode)) { ....
-
-Returns C<undef> on failure. The C<$mode> is similar to the
-mode of C<mkdir()>, see L<perlfunc/mkdir>.
-
-=item mktime
-
-Convert date/time info to a calendar time.
-
-Synopsis:
-
- mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
-
-The month (C<mon>), weekday (C<wday>), and yearday (C<yday>) begin at zero.
-I.e. January is 0, not 1; Sunday is 0, not 1; January 1st is 0, not 1. The
-year (C<year>) is given in years since 1900. I.e. The year 1995 is 95; the
-year 2001 is 101. Consult your system's C<mktime()> manpage for details
-about these and the other arguments.
-
-Calendar time for December 12, 1995, at 10:30 am.
-
- $time_t = POSIX::mktime( 0, 30, 10, 12, 11, 95 );
- print "Date = ", POSIX::ctime($time_t);
-
-Returns C<undef> on failure.
-
-=item modf
-
-Return the integral and fractional parts of a floating-point number.
-
- ($fractional, $integral) = POSIX::modf( 3.14 );
-
-=item nice
-
-This is similar to the C function C<nice()>, for changing
-the scheduling preference of the current process. Positive
-arguments mean more polite process, negative values more
-needy process. Normal user processes can only be more polite.
-
-Returns C<undef> on failure.
-
-=item offsetof
-
-offsetof() is C-specific, you probably want to see L<perlfunc/pack> instead.
-
-=item open
-
-Open a file for reading for writing. This returns file descriptors, not
-Perl filehandles. Use C<POSIX::close> to close the file.
-
-Open a file read-only with mode 0666.
-
- $fd = POSIX::open( "foo" );
-
-Open a file for read and write.
-
- $fd = POSIX::open( "foo", &POSIX::O_RDWR );
-
-Open a file for write, with truncation.
-
- $fd = POSIX::open( "foo", &POSIX::O_WRONLY | &POSIX::O_TRUNC );
-
-Create a new file with mode 0640. Set up the file for writing.
-
- $fd = POSIX::open( "foo", &POSIX::O_CREAT | &POSIX::O_WRONLY, 0640 );
-
-Returns C<undef> on failure.
-
-See also L<perlfunc/sysopen>.
-
-=item opendir
-
-Open a directory for reading.
-
- $dir = POSIX::opendir( "/tmp" );
- @files = POSIX::readdir( $dir );
- POSIX::closedir( $dir );
-
-Returns C<undef> on failure.
-
-=item pathconf
-
-Retrieves the value of a configurable limit on a file or directory.
-
-The following will determine the maximum length of the longest allowable
-pathname on the filesystem which holds C</tmp>.
-
- $path_max = POSIX::pathconf( "/tmp", &POSIX::_PC_PATH_MAX );
-
-Returns C<undef> on failure.
-
-=item pause
-
-This is similar to the C function C<pause()>, which suspends
-the execution of the current process until a signal is received.
-
-Returns C<undef> on failure.
-
-=item perror
-
-This is identical to the C function C<perror()>, which outputs to the
-standard error stream the specified message followed by ": " and the
-current error string. Use the C<warn()> function and the C<$!>
-variable instead, see L<perlfunc/warn> and L<perlvar/$ERRNO>.
-
-=item pipe
-
-Create an interprocess channel. This returns file descriptors like those
-returned by C<POSIX::open>.
-
- ($fd0, $fd1) = POSIX::pipe();
- POSIX::write( $fd0, "hello", 5 );
- POSIX::read( $fd1, $buf, 5 );
-
-See also L<perlfunc/pipe>.
-
-=item pow
-
-Computes C<$x> raised to the power C<$exponent>.
-
- $ret = POSIX::pow( $x, $exponent );
-
-You can also use the C<**> operator, see L<perlop>.
-
-=item printf
-
-Formats and prints the specified arguments to STDOUT.
-See also L<perlfunc/printf>.
-
-=item putc
-
-putc() is C-specific, see L<perlfunc/print> instead.
-
-=item putchar
-
-putchar() is C-specific, see L<perlfunc/print> instead.
-
-=item puts
-
-puts() is C-specific, see L<perlfunc/print> instead.
-
-=item qsort
-
-qsort() is C-specific, see L<perlfunc/sort> instead.
-
-=item raise
-
-Sends the specified signal to the current process.
-See also L<perlfunc/kill> and the C<$$> in L<perlvar/$PID>.
-
-=item rand
-
-C<rand()> is non-portable, see L<perlfunc/rand> instead.
-
-=item read
-
-Read from a file. This uses file descriptors such as those obtained by
-calling C<POSIX::open>. If the buffer C<$buf> is not large enough for the
-read then Perl will extend it to make room for the request.
-
- $fd = POSIX::open( "foo", &POSIX::O_RDONLY );
- $bytes = POSIX::read( $fd, $buf, 3 );
-
-Returns C<undef> on failure.
-
-See also L<perlfunc/sysread>.
-
-=item readdir
-
-This is identical to Perl's builtin C<readdir()> function
-for reading directory entries, see L<perlfunc/readdir>.
-
-=item realloc
-
-realloc() is C-specific. Perl does memory management transparently.
-
-=item remove
-
-This is identical to Perl's builtin C<unlink()> function
-for removing files, see L<perlfunc/unlink>.
-
-=item rename
-
-This is identical to Perl's builtin C<rename()> function
-for renaming files, see L<perlfunc/rename>.
-
-=item rewind
-
-Seeks to the beginning of the file.
-
-=item rewinddir
-
-This is identical to Perl's builtin C<rewinddir()> function for
-rewinding directory entry streams, see L<perlfunc/rewinddir>.
-
-=item rmdir
-
-This is identical to Perl's builtin C<rmdir()> function
-for removing (empty) directories, see L<perlfunc/rmdir>.
-
-=item scanf
-
-scanf() is C-specific, use E<lt>E<gt> and regular expressions instead,
-see L<perlre>.
-
-=item setgid
-
-Sets the real group identifier for this process.
-Identical to assigning a value to the Perl's builtin C<$)> variable,
-see L<perlvar/$UID>.
-
-=item setjmp
-
-C<setjmp()> is C-specific: use C<eval {}> instead,
-see L<perlfunc/eval>.
-
-=item setlocale
-
-Modifies and queries program's locale. The following examples assume
-
- use POSIX qw(setlocale LC_ALL LC_CTYPE);
-
-has been issued.
-
-The following will set the traditional UNIX system locale behavior
-(the second argument C<"C">).
-
- $loc = setlocale( LC_ALL, "C" );
-
-The following will query the current LC_CTYPE category. (No second
-argument means 'query'.)
-
- $loc = setlocale( LC_CTYPE );
-
-The following will set the LC_CTYPE behaviour according to the locale
-environment variables (the second argument C<"">).
-Please see your systems L<setlocale(3)> documentation for the locale
-environment variables' meaning or consult L<perllocale>.
-
- $loc = setlocale( LC_CTYPE, "" );
-
-The following will set the LC_COLLATE behaviour to Argentinian
-Spanish. B<NOTE>: The naming and availability of locales depends on
-your operating system. Please consult L<perllocale> for how to find
-out which locales are available in your system.
-
- $loc = setlocale( LC_ALL, "es_AR.ISO8859-1" );
-
-=item setpgid
-
-This is similar to the C function C<setpgid()> for
-setting the process group identifier of the current process.
-
-Returns C<undef> on failure.
-
-=item setsid
-
-This is identical to the C function C<setsid()> for
-setting the session identifier of the current process.
-
-=item setuid
-
-Sets the real user identifier for this process.
-Identical to assigning a value to the Perl's builtin C<$E<lt>> variable,
-see L<perlvar/$UID>.
-
-=item sigaction
-
-Detailed signal management. This uses C<POSIX::SigAction> objects for the
-C<action> and C<oldaction> arguments. Consult your system's C<sigaction>
-manpage for details.
-
-Synopsis:
-
- sigaction(sig, action, oldaction = 0)
-
-Returns C<undef> on failure.
-
-=item siglongjmp
-
-siglongjmp() is C-specific: use L<perlfunc/die> instead.
-
-=item sigpending
-
-Examine signals that are blocked and pending. This uses C<POSIX::SigSet>
-objects for the C<sigset> argument. Consult your system's C<sigpending>
-manpage for details.
-
-Synopsis:
-
- sigpending(sigset)
-
-Returns C<undef> on failure.
-
-=item sigprocmask
-
-Change and/or examine calling process's signal mask. This uses
-C<POSIX::SigSet> objects for the C<sigset> and C<oldsigset> arguments.
-Consult your system's C<sigprocmask> manpage for details.
-
-Synopsis:
-
- sigprocmask(how, sigset, oldsigset = 0)
-
-Returns C<undef> on failure.
-
-=item sigsetjmp
-
-C<sigsetjmp()> is C-specific: use C<eval {}> instead,
-see L<perlfunc/eval>.
-
-=item sigsuspend
-
-Install a signal mask and suspend process until signal arrives. This uses
-C<POSIX::SigSet> objects for the C<signal_mask> argument. Consult your
-system's C<sigsuspend> manpage for details.
-
-Synopsis:
-
- sigsuspend(signal_mask)
-
-Returns C<undef> on failure.
-
-=item sin
-
-This is identical to Perl's builtin C<sin()> function
-for returning the sine of the numerical argument,
-see L<perlfunc/sin>. See also L<Math::Trig>.
-
-=item sinh
-
-This is identical to the C function C<sinh()>
-for returning the hyperbolic sine of the numerical argument.
-See also L<Math::Trig>.
-
-=item sleep
-
-This is identical to Perl's builtin C<sleep()> function
-for suspending the execution of the current for process
-for certain number of seconds, see L<perlfunc/sleep>.
-
-=item sprintf
-
-This is similar to Perl's builtin C<sprintf()> function
-for returning a string that has the arguments formatted as requested,
-see L<perlfunc/sprintf>.
-
-=item sqrt
-
-This is identical to Perl's builtin C<sqrt()> function.
-for returning the square root of the numerical argument,
-see L<perlfunc/sqrt>.
-
-=item srand
-
-Give a seed the pseudorandom number generator, see L<perlfunc/srand>.
-
-=item sscanf
-
-sscanf() is C-specific, use regular expressions instead,
-see L<perlre>.
-
-=item stat
-
-This is identical to Perl's builtin C<stat()> function
-for retutning information about files and directories.
-
-=item strcat
-
-strcat() is C-specific, use C<.=> instead, see L<perlop>.
-
-=item strchr
-
-strchr() is C-specific, see L<perlfunc/index> instead.
-
-=item strcmp
-
-strcmp() is C-specific, use C<eq> or C<cmp> instead, see L<perlop>.
-
-=item strcoll
-
-This is identical to the C function C<strcoll()>
-for collating (comparing) strings transformed using
-the C<strxfrm()> function. Not really needed since
-Perl can do this transparently, see L<perllocale>.
-
-=item strcpy
-
-strcpy() is C-specific, use C<=> instead, see L<perlop>.
-
-=item strcspn
-
-strcspn() is C-specific, use regular expressions instead,
-see L<perlre>.
-
-=item strerror
-
-Returns the error string for the specified errno.
-Identical to the string form of the C<$!>, see L<perlvar/$ERRNO>.
-
-=item strftime
-
-Convert date and time information to string. Returns the string.
-
-Synopsis:
-
- strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
-
-The month (C<mon>), weekday (C<wday>), and yearday (C<yday>) begin at zero.
-I.e. January is 0, not 1; Sunday is 0, not 1; January 1st is 0, not 1. The
-year (C<year>) is given in years since 1900. I.e., the year 1995 is 95; the
-year 2001 is 101. Consult your system's C<strftime()> manpage for details
-about these and the other arguments.
-If you want your code to be portable, your format (C<fmt>) argument
-should use only the conversion specifiers defined by the ANSI C
-standard. These are C<aAbBcdHIjmMpSUwWxXyYZ%>.
-The given arguments are made consistent
-as though by calling C<mktime()> before calling your system's
-C<strftime()> function, except that the C<isdst> value is not affected.
-
-The string for Tuesday, December 12, 1995.
-
- $str = POSIX::strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 2 );
- print "$str\n";
-
-=item strlen
-
-strlen() is C-specific, use C<length()> instead, see L<perlfunc/length>.
-
-=item strncat
-
-strncat() is C-specific, use C<.=> instead, see L<perlop>.
-
-=item strncmp
-
-strncmp() is C-specific, use C<eq> instead, see L<perlop>.
-
-=item strncpy
-
-strncpy() is C-specific, use C<=> instead, see L<perlop>.
-
-=item strpbrk
-
-strpbrk() is C-specific, use regular expressions instead,
-see L<perlre>.
-
-=item strrchr
-
-strrchr() is C-specific, see L<perlfunc/rindex> instead.
-
-=item strspn
-
-strspn() is C-specific, use regular expressions instead,
-see L<perlre>.
-
-=item strstr
-
-This is identical to Perl's builtin C<index()> function,
-see L<perlfunc/index>.
-
-=item strtod
-
-String to double translation. Returns the parsed number and the number
-of characters in the unparsed portion of the string. Truly
-POSIX-compliant systems set $! ($ERRNO) to indicate a translation
-error, so clear $! before calling strtod. However, non-POSIX systems
-may not check for overflow, and therefore will never set $!.
-
-strtod should respect any POSIX I<setlocale()> settings.
-
-To parse a string $str as a floating point number use
-
- $! = 0;
- ($num, $n_unparsed) = POSIX::strtod($str);
-
-The second returned item and $! can be used to check for valid input:
-
- if (($str eq '') || ($n_unparsed != 0) || !$!) {
- die "Non-numeric input $str" . $! ? ": $!\n" : "\n";
- }
-
-When called in a scalar context strtod returns the parsed number.
-
-=item strtok
-
-strtok() is C-specific, use regular expressions instead, see
-L<perlre>, or L<perlfunc/split>.
-
-=item strtol
-
-String to (long) integer translation. Returns the parsed number and
-the number of characters in the unparsed portion of the string. Truly
-POSIX-compliant systems set $! ($ERRNO) to indicate a translation
-error, so clear $! before calling strtol. However, non-POSIX systems
-may not check for overflow, and therefore will never set $!.
-
-strtol should respect any POSIX I<setlocale()> settings.
-
-To parse a string $str as a number in some base $base use
-
- $! = 0;
- ($num, $n_unparsed) = POSIX::strtol($str, $base);
-
-The base should be zero or between 2 and 36, inclusive. When the base
-is zero or omitted strtol will use the string itself to determine the
-base: a leading "0x" or "0X" means hexadecimal; a leading "0" means
-octal; any other leading characters mean decimal. Thus, "1234" is
-parsed as a decimal number, "01234" as an octal number, and "0x1234"
-as a hexadecimal number.
-
-The second returned item and $! can be used to check for valid input:
-
- if (($str eq '') || ($n_unparsed != 0) || !$!) {
- die "Non-numeric input $str" . $! ? ": $!\n" : "\n";
- }
-
-When called in a scalar context strtol returns the parsed number.
-
-=item strtoul
-
-String to unsigned (long) integer translation. strtoul() is identical
-to strtol() except that strtoul() only parses unsigned integers. See
-L</strtol> for details.
-
-Note: Some vendors supply strtod() and strtol() but not strtoul().
-Other vendors that do supply strtoul() parse "-1" as a valid value.
-
-=item strxfrm
-
-String transformation. Returns the transformed string.
-
- $dst = POSIX::strxfrm( $src );
-
-Used in conjunction with the C<strcoll()> function, see L</strcoll>.
-
-Not really needed since Perl can do this transparently, see
-L<perllocale>.
-
-=item sysconf
-
-Retrieves values of system configurable variables.
-
-The following will get the machine's clock speed.
-
- $clock_ticks = POSIX::sysconf( &POSIX::_SC_CLK_TCK );
-
-Returns C<undef> on failure.
-
-=item system
-
-This is identical to Perl's builtin C<system()> function, see
-L<perlfunc/system>.
-
-=item tan
-
-This is identical to the C function C<tan()>, returning the
-tangent of the numerical argument. See also L<Math::Trig>.
-
-=item tanh
-
-This is identical to the C function C<tanh()>, returning the
-hyperbolic tangent of the numerical argument. See also L<Math::Trig>.
-
-=item tcdrain
-
-This is similar to the C function C<tcdrain()> for draining
-the output queue of its argument stream.
-
-Returns C<undef> on failure.
-
-=item tcflow
-
-This is similar to the C function C<tcflow()> for controlling
-the flow of its argument stream.
-
-Returns C<undef> on failure.
-
-=item tcflush
-
-This is similar to the C function C<tcflush()> for flushing
-the I/O buffers of its argumeny stream.
-
-Returns C<undef> on failure.
-
-=item tcgetpgrp
-
-This is identical to the C function C<tcgetpgrp()> for returning the
-process group identifier of the foreground process group of the controlling
-terminal.
-
-=item tcsendbreak
-
-This is similar to the C function C<tcsendbreak()> for sending
-a break on its argument stream.
-
-Returns C<undef> on failure.
-
-=item tcsetpgrp
-
-This is similar to the C function C<tcsetpgrp()> for setting the
-process group identifier of the foreground process group of the controlling
-terminal.
-
-Returns C<undef> on failure.
-
-=item time
-
-This is identical to Perl's builtin C<time()> function
-for returning the number of seconds since the epoch
-(whatever it is for the system), see L<perlfunc/time>.
-
-=item times
-
-The times() function returns elapsed realtime since some point in the past
-(such as system startup), user and system times for this process, and user
-and system times used by child processes. All times are returned in clock
-ticks.
-
- ($realtime, $user, $system, $cuser, $csystem) = POSIX::times();
-
-Note: Perl's builtin C<times()> function returns four values, measured in
-seconds.
-
-=item tmpfile
-
-Use method C<IO::File::new_tmpfile()> instead, or see L<File::Temp>.
-
-=item tmpnam
-
-Returns a name for a temporary file.
-
- $tmpfile = POSIX::tmpnam();
-
-For security reasons, which are probably detailed in your system's
-documentation for the C library tmpnam() function, this interface
-should not be used; instead see L<File::Temp>.
-
-=item tolower
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using the C<lc()> function,
-see L<perlfunc/lc>, or the equivalent C<\L> operator inside doublequotish
-strings.
-
-=item toupper
-
-This is identical to the C function, except that it can apply to a single
-character or to a whole string. Consider using the C<uc()> function,
-see L<perlfunc/uc>, or the equivalent C<\U> operator inside doublequotish
-strings.
-
-=item ttyname
-
-This is identical to the C function C<ttyname()> for returning the
-name of the current terminal.
-
-=item tzname
-
-Retrieves the time conversion information from the C<tzname> variable.
-
- POSIX::tzset();
- ($std, $dst) = POSIX::tzname();
-
-=item tzset
-
-This is identical to the C function C<tzset()> for setting
-the current timezone based on the environment variable C<TZ>,
-to be used by C<ctime()>, C<localtime()>, C<mktime()>, and C<strftime()>
-functions.
-
-=item umask
-
-This is identical to Perl's builtin C<umask()> function
-for setting (and querying) the file creation permission mask,
-see L<perlfunc/umask>.
-
-=item uname
-
-Get name of current operating system.
-
- ($sysname, $nodename, $release, $version, $machine) = POSIX::uname();
-
-Note that the actual meanings of the various fields are not
-that well standardized, do not expect any great portability.
-The C<$sysname> might be the name of the operating system,
-the C<$nodename> might be the name of the host, the C<$release>
-might be the (major) release number of the operating system,
-the C<$version> might be the (minor) release number of the
-operating system, and the C<$machine> might be a hardware identifier.
-Maybe.
-
-=item ungetc
-
-Use method C<IO::Handle::ungetc()> instead.
-
-=item unlink
-
-This is identical to Perl's builtin C<unlink()> function
-for removing files, see L<perlfunc/unlink>.
-
-=item utime
-
-This is identical to Perl's builtin C<utime()> function
-for changing the time stamps of files and directories,
-see L<perlfunc/utime>.
-
-=item vfprintf
-
-vfprintf() is C-specific, see L<perlfunc/printf> instead.
-
-=item vprintf
-
-vprintf() is C-specific, see L<perlfunc/printf> instead.
-
-=item vsprintf
-
-vsprintf() is C-specific, see L<perlfunc/sprintf> instead.
-
-=item wait
-
-This is identical to Perl's builtin C<wait()> function,
-see L<perlfunc/wait>.
-
-=item waitpid
-
-Wait for a child process to change state. This is identical to Perl's
-builtin C<waitpid()> function, see L<perlfunc/waitpid>.
-
- $pid = POSIX::waitpid( -1, &POSIX::WNOHANG );
- print "status = ", ($? / 256), "\n";
-
-=item wcstombs
-
-This is identical to the C function C<wcstombs()>.
-Perl does not have any support for the wide and multibyte
-characters of the C standards, so this might be a rather
-useless function.
-
-=item wctomb
-
-This is identical to the C function C<wctomb()>.
-Perl does not have any support for the wide and multibyte
-characters of the C standards, so this might be a rather
-useless function.
-
-=item write
-
-Write to a file. This uses file descriptors such as those obtained by
-calling C<POSIX::open>.
-
- $fd = POSIX::open( "foo", &POSIX::O_WRONLY );
- $buf = "hello";
- $bytes = POSIX::write( $b, $buf, 5 );
-
-Returns C<undef> on failure.
-
-See also L<perlfunc/syswrite>.
-
-=back
-
-=head1 CLASSES
-
-=head2 POSIX::SigAction
-
-=over 8
-
-=item new
-
-Creates a new C<POSIX::SigAction> object which corresponds to the C
-C<struct sigaction>. This object will be destroyed automatically when it is
-no longer needed. The first parameter is the fully-qualified name of a sub
-which is a signal-handler. The second parameter is a C<POSIX::SigSet>
-object, it defaults to the empty set. The third parameter contains the
-C<sa_flags>, it defaults to 0.
-
- $sigset = POSIX::SigSet->new(SIGINT, SIGQUIT);
- $sigaction = POSIX::SigAction->new( 'main::handler', $sigset, &POSIX::SA_NOCLDSTOP );
-
-This C<POSIX::SigAction> object should be used with the C<POSIX::sigaction()>
-function.
-
-=back
-
-=head2 POSIX::SigSet
-
-=over 8
-
-=item new
-
-Create a new SigSet object. This object will be destroyed automatically
-when it is no longer needed. Arguments may be supplied to initialize the
-set.
-
-Create an empty set.
-
- $sigset = POSIX::SigSet->new;
-
-Create a set with SIGUSR1.
-
- $sigset = POSIX::SigSet->new( &POSIX::SIGUSR1 );
-
-=item addset
-
-Add a signal to a SigSet object.
-
- $sigset->addset( &POSIX::SIGUSR2 );
-
-Returns C<undef> on failure.
-
-=item delset
-
-Remove a signal from the SigSet object.
-
- $sigset->delset( &POSIX::SIGUSR2 );
-
-Returns C<undef> on failure.
-
-=item emptyset
-
-Initialize the SigSet object to be empty.
-
- $sigset->emptyset();
-
-Returns C<undef> on failure.
-
-=item fillset
-
-Initialize the SigSet object to include all signals.
-
- $sigset->fillset();
-
-Returns C<undef> on failure.
-
-=item ismember
-
-Tests the SigSet object to see if it contains a specific signal.
-
- if( $sigset->ismember( &POSIX::SIGUSR1 ) ){
- print "contains SIGUSR1\n";
- }
-
-=back
-
-=head2 POSIX::Termios
-
-=over 8
-
-=item new
-
-Create a new Termios object. This object will be destroyed automatically
-when it is no longer needed. A Termios object corresponds to the termios
-C struct. new() mallocs a new one, getattr() fills it from a file descriptor,
-and setattr() sets a file descriptor's parameters to match Termios' contents.
-
- $termios = POSIX::Termios->new;
-
-=item getattr
-
-Get terminal control attributes.
-
-Obtain the attributes for stdin.
-
- $termios->getattr()
-
-Obtain the attributes for stdout.
-
- $termios->getattr( 1 )
-
-Returns C<undef> on failure.
-
-=item getcc
-
-Retrieve a value from the c_cc field of a termios object. The c_cc field is
-an array so an index must be specified.
-
- $c_cc[1] = $termios->getcc(1);
-
-=item getcflag
-
-Retrieve the c_cflag field of a termios object.
-
- $c_cflag = $termios->getcflag;
-
-=item getiflag
-
-Retrieve the c_iflag field of a termios object.
-
- $c_iflag = $termios->getiflag;
-
-=item getispeed
-
-Retrieve the input baud rate.
-
- $ispeed = $termios->getispeed;
-
-=item getlflag
-
-Retrieve the c_lflag field of a termios object.
-
- $c_lflag = $termios->getlflag;
-
-=item getoflag
-
-Retrieve the c_oflag field of a termios object.
-
- $c_oflag = $termios->getoflag;
-
-=item getospeed
-
-Retrieve the output baud rate.
-
- $ospeed = $termios->getospeed;
-
-=item setattr
-
-Set terminal control attributes.
-
-Set attributes immediately for stdout.
-
- $termios->setattr( 1, &POSIX::TCSANOW );
-
-Returns C<undef> on failure.
-
-=item setcc
-
-Set a value in the c_cc field of a termios object. The c_cc field is an
-array so an index must be specified.
-
- $termios->setcc( &POSIX::VEOF, 1 );
-
-=item setcflag
-
-Set the c_cflag field of a termios object.
-
- $termios->setcflag( $c_cflag | &POSIX::CLOCAL );
-
-=item setiflag
-
-Set the c_iflag field of a termios object.
-
- $termios->setiflag( $c_iflag | &POSIX::BRKINT );
-
-=item setispeed
-
-Set the input baud rate.
-
- $termios->setispeed( &POSIX::B9600 );
-
-Returns C<undef> on failure.
-
-=item setlflag
-
-Set the c_lflag field of a termios object.
-
- $termios->setlflag( $c_lflag | &POSIX::ECHO );
-
-=item setoflag
-
-Set the c_oflag field of a termios object.
-
- $termios->setoflag( $c_oflag | &POSIX::OPOST );
-
-=item setospeed
-
-Set the output baud rate.
-
- $termios->setospeed( &POSIX::B9600 );
-
-Returns C<undef> on failure.
-
-=item Baud rate values
-
-B38400 B75 B200 B134 B300 B1800 B150 B0 B19200 B1200 B9600 B600 B4800 B50 B2400 B110
-
-=item Terminal interface values
-
-TCSADRAIN TCSANOW TCOON TCIOFLUSH TCOFLUSH TCION TCIFLUSH TCSAFLUSH TCIOFF TCOOFF
-
-=item c_cc field values
-
-VEOF VEOL VERASE VINTR VKILL VQUIT VSUSP VSTART VSTOP VMIN VTIME NCCS
-
-=item c_cflag field values
-
-CLOCAL CREAD CSIZE CS5 CS6 CS7 CS8 CSTOPB HUPCL PARENB PARODD
-
-=item c_iflag field values
-
-BRKINT ICRNL IGNBRK IGNCR IGNPAR INLCR INPCK ISTRIP IXOFF IXON PARMRK
-
-=item c_lflag field values
-
-ECHO ECHOE ECHOK ECHONL ICANON IEXTEN ISIG NOFLSH TOSTOP
-
-=item c_oflag field values
-
-OPOST
-
-=back
-
-=head1 PATHNAME CONSTANTS
-
-=over 8
-
-=item Constants
-
-_PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX _PC_PIPE_BUF _PC_VDISABLE
-
-=back
-
-=head1 POSIX CONSTANTS
-
-=over 8
-
-=item Constants
-
-_POSIX_ARG_MAX _POSIX_CHILD_MAX _POSIX_CHOWN_RESTRICTED _POSIX_JOB_CONTROL _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_NO_TRUNC _POSIX_OPEN_MAX _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SAVED_IDS _POSIX_SSIZE_MAX _POSIX_STREAM_MAX _POSIX_TZNAME_MAX _POSIX_VDISABLE _POSIX_VERSION
-
-=back
-
-=head1 SYSTEM CONFIGURATION
-
-=over 8
-
-=item Constants
-
-_SC_ARG_MAX _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_SAVED_IDS _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
-
-=back
-
-=head1 ERRNO
-
-=over 8
-
-=item Constants
-
-E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF
-EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ
-EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS EINTR
-EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE ENAMETOOLONG
-ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODEV ENOENT ENOEXEC
-ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR
-ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM EPFNOSUPPORT EPIPE
-EPROCLIM EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE ERESTART EROFS
-ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS
-ETXTBSY EUSERS EWOULDBLOCK EXDEV
-
-=back
-
-=head1 FCNTL
-
-=over 8
-
-=item Constants
-
-FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_OK F_RDLCK F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK O_ACCMODE O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC O_WRONLY
-
-=back
-
-=head1 FLOAT
-
-=over 8
-
-=item Constants
-
-DBL_DIG DBL_EPSILON DBL_MANT_DIG DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP FLT_DIG FLT_EPSILON FLT_MANT_DIG FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP FLT_RADIX FLT_ROUNDS LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP
-
-=back
-
-=head1 LIMITS
-
-=over 8
-
-=item Constants
-
-ARG_MAX CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX INT_MAX INT_MIN LINK_MAX LONG_MAX LONG_MIN MAX_CANON MAX_INPUT MB_LEN_MAX NAME_MAX NGROUPS_MAX OPEN_MAX PATH_MAX PIPE_BUF SCHAR_MAX SCHAR_MIN SHRT_MAX SHRT_MIN SSIZE_MAX STREAM_MAX TZNAME_MAX UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX
-
-=back
-
-=head1 LOCALE
-
-=over 8
-
-=item Constants
-
-LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC LC_TIME
-
-=back
-
-=head1 MATH
-
-=over 8
-
-=item Constants
-
-HUGE_VAL
-
-=back
-
-=head1 SIGNAL
-
-=over 8
-
-=item Constants
-
-SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK SA_RESETHAND SA_RESTART
-SA_SIGINFO SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT
-SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU
-SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK
-SIG_UNBLOCK
-
-=back
-
-=head1 STAT
-
-=over 8
-
-=item Constants
-
-S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR
-
-=item Macros
-
-S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISREG
-
-=back
-
-=head1 STDLIB
-
-=over 8
-
-=item Constants
-
-EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX RAND_MAX
-
-=back
-
-=head1 STDIO
-
-=over 8
-
-=item Constants
-
-BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid L_tmpname TMP_MAX
-
-=back
-
-=head1 TIME
-
-=over 8
-
-=item Constants
-
-CLK_TCK CLOCKS_PER_SEC
-
-=back
-
-=head1 UNISTD
-
-=over 8
-
-=item Constants
-
-R_OK SEEK_CUR SEEK_END SEEK_SET STDIN_FILENO STDOUT_FILENO STDERR_FILENO W_OK X_OK
-
-=back
-
-=head1 WAIT
-
-=over 8
-
-=item Constants
-
-WNOHANG WUNTRACED
-
-=item Macros
-
-WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG WIFSTOPPED WSTOPSIG
-
-=back
-
diff --git a/contrib/perl5/ext/POSIX/POSIX.xs b/contrib/perl5/ext/POSIX/POSIX.xs
deleted file mode 100644
index ef7d78a..0000000
--- a/contrib/perl5/ext/POSIX/POSIX.xs
+++ /dev/null
@@ -1,3967 +0,0 @@
-/* $FreeBSD$ */
-#ifdef WIN32
-#define _POSIX_
-#endif
-
-#define PERL_NO_GET_CONTEXT
-
-#include "EXTERN.h"
-#define PERLIO_NOT_STDIO 1
-#include "perl.h"
-#include "XSUB.h"
-#if defined(PERL_OBJECT) || defined(PERL_CAPI) || defined(PERL_IMPLICIT_SYS)
-# undef signal
-# undef open
-# undef setmode
-# define open PerlLIO_open3
-#endif
-#include <ctype.h>
-#ifdef I_DIRENT /* XXX maybe better to just rely on perl.h? */
-#include <dirent.h>
-#endif
-#include <errno.h>
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifdef I_LIMITS
-#include <limits.h>
-#endif
-#include <locale.h>
-#include <math.h>
-#ifdef I_PWD
-#include <pwd.h>
-#endif
-#include <setjmp.h>
-#include <signal.h>
-#include <stdarg.h>
-
-#ifdef I_STDDEF
-#include <stddef.h>
-#endif
-
-/* XXX This comment is just to make I_TERMIO and I_SGTTY visible to
- metaconfig for future extension writers. We don't use them in POSIX.
- (This is really sneaky :-) --AD
-*/
-#if defined(I_TERMIOS)
-#include <termios.h>
-#endif
-#ifdef I_STDLIB
-#include <stdlib.h>
-#endif
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <time.h>
-#ifdef I_UNISTD
-#include <unistd.h>
-#endif
-#ifdef MACOS_TRADITIONAL
-#undef fdopen
-#endif
-#include <fcntl.h>
-
-#if defined(__VMS) && !defined(__POSIX_SOURCE)
-# include <libdef.h> /* LIB$_INVARG constant */
-# include <lib$routines.h> /* prototype for lib$ediv() */
-# include <starlet.h> /* prototype for sys$gettim() */
-# if DECC_VERSION < 50000000
-# define pid_t int /* old versions of DECC miss this in types.h */
-# endif
-
-# undef mkfifo
-# define mkfifo(a,b) (not_here("mkfifo"),-1)
-# define tzset() not_here("tzset")
-
-#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-# define HAS_TZNAME /* shows up in VMS 7.0 or Dec C 5.6 */
-# include <utsname.h>
-# endif /* __VMS_VER >= 70000000 or Dec C 5.6 */
-
- /* The POSIX notion of ttyname() is better served by getname() under VMS */
- static char ttnambuf[64];
-# define ttyname(fd) (isatty(fd) > 0 ? getname(fd,ttnambuf,0) : NULL)
-
- /* The non-POSIX CRTL times() has void return type, so we just get the
- current time directly */
- clock_t vms_times(struct tms *bufptr) {
- dTHX;
- clock_t retval;
- /* Get wall time and convert to 10 ms intervals to
- * produce the return value that the POSIX standard expects */
-# if defined(__DECC) && defined (__ALPHA)
-# include <ints.h>
- uint64 vmstime;
- _ckvmssts(sys$gettim(&vmstime));
- vmstime /= 100000;
- retval = vmstime & 0x7fffffff;
-# else
- /* (Older hw or ccs don't have an atomic 64-bit type, so we
- * juggle 32-bit ints (and a float) to produce a time_t result
- * with minimal loss of information.) */
- long int vmstime[2],remainder,divisor = 100000;
- _ckvmssts(sys$gettim((unsigned long int *)vmstime));
- vmstime[1] &= 0x7fff; /* prevent overflow in EDIV */
- _ckvmssts(lib$ediv(&divisor,vmstime,(long int *)&retval,&remainder));
-# endif
- /* Fill in the struct tms using the CRTL routine . . .*/
- times((tbuffer_t *)bufptr);
- return (clock_t) retval;
- }
-# define times(t) vms_times(t)
-#else
-#if defined (__CYGWIN__)
-# define tzname _tzname
-#endif
-#if defined (WIN32)
-# undef mkfifo
-# define mkfifo(a,b) not_here("mkfifo")
-# define ttyname(a) (char*)not_here("ttyname")
-# define sigset_t long
-# define pid_t long
-# ifdef __BORLANDC__
-# define tzname _tzname
-# endif
-# ifdef _MSC_VER
-# define mode_t short
-# endif
-# ifdef __MINGW32__
-# define mode_t short
-# ifndef tzset
-# define tzset() not_here("tzset")
-# endif
-# ifndef _POSIX_OPEN_MAX
-# define _POSIX_OPEN_MAX FOPEN_MAX /* XXX bogus ? */
-# endif
-# endif
-# define sigaction(a,b,c) not_here("sigaction")
-# define sigpending(a) not_here("sigpending")
-# define sigprocmask(a,b,c) not_here("sigprocmask")
-# define sigsuspend(a) not_here("sigsuspend")
-# define sigemptyset(a) not_here("sigemptyset")
-# define sigaddset(a,b) not_here("sigaddset")
-# define sigdelset(a,b) not_here("sigdelset")
-# define sigfillset(a) not_here("sigfillset")
-# define sigismember(a,b) not_here("sigismember")
-# define setuid(a) not_here("setuid")
-# define setgid(a) not_here("setgid")
-#else
-
-# ifndef HAS_MKFIFO
-# if defined(OS2) || defined(MACOS_TRADITIONAL)
-# define mkfifo(a,b) not_here("mkfifo")
-# else /* !( defined OS2 ) */
-# ifndef mkfifo
-# define mkfifo(path, mode) (mknod((path), (mode) | S_IFIFO, 0))
-# endif
-# endif
-# endif /* !HAS_MKFIFO */
-
-# ifdef MACOS_TRADITIONAL
-# define ttyname(a) (char*)not_here("ttyname")
-# define tzset() not_here("tzset")
-# else
-# include <grp.h>
-# include <sys/times.h>
-# ifdef HAS_UNAME
-# include <sys/utsname.h>
-# endif
-# include <sys/wait.h>
-# endif
-# ifdef I_UTIME
-# include <utime.h>
-# endif
-#endif /* WIN32 */
-#endif /* __VMS */
-
-typedef int SysRet;
-typedef long SysRetLong;
-typedef sigset_t* POSIX__SigSet;
-typedef HV* POSIX__SigAction;
-#ifdef I_TERMIOS
-typedef struct termios* POSIX__Termios;
-#else /* Define termios types to int, and call not_here for the functions.*/
-#define POSIX__Termios int
-#define speed_t int
-#define tcflag_t int
-#define cc_t int
-#define cfgetispeed(x) not_here("cfgetispeed")
-#define cfgetospeed(x) not_here("cfgetospeed")
-#define tcdrain(x) not_here("tcdrain")
-#define tcflush(x,y) not_here("tcflush")
-#define tcsendbreak(x,y) not_here("tcsendbreak")
-#define cfsetispeed(x,y) not_here("cfsetispeed")
-#define cfsetospeed(x,y) not_here("cfsetospeed")
-#define ctermid(x) (char *) not_here("ctermid")
-#define tcflow(x,y) not_here("tcflow")
-#define tcgetattr(x,y) not_here("tcgetattr")
-#define tcsetattr(x,y,z) not_here("tcsetattr")
-#endif
-
-/* Possibly needed prototypes */
-char *cuserid (char *);
-double strtod (const char *, char **);
-long strtol (const char *, char **, int);
-unsigned long strtoul (const char *, char **, int);
-
-#ifndef HAS_CUSERID
-#define cuserid(a) (char *) not_here("cuserid")
-#endif
-#ifndef HAS_DIFFTIME
-#ifndef difftime
-#define difftime(a,b) not_here("difftime")
-#endif
-#endif
-#ifndef HAS_FPATHCONF
-#define fpathconf(f,n) (SysRetLong) not_here("fpathconf")
-#endif
-#ifndef HAS_MKTIME
-#define mktime(a) not_here("mktime")
-#endif
-#ifndef HAS_NICE
-#define nice(a) not_here("nice")
-#endif
-#ifndef HAS_PATHCONF
-#define pathconf(f,n) (SysRetLong) not_here("pathconf")
-#endif
-#ifndef HAS_SYSCONF
-#define sysconf(n) (SysRetLong) not_here("sysconf")
-#endif
-#ifndef HAS_READLINK
-#define readlink(a,b,c) not_here("readlink")
-#endif
-#ifndef HAS_SETPGID
-#define setpgid(a,b) not_here("setpgid")
-#endif
-#ifndef HAS_SETSID
-#define setsid() not_here("setsid")
-#endif
-#ifndef HAS_STRCOLL
-#define strcoll(s1,s2) not_here("strcoll")
-#endif
-#ifndef HAS_STRTOD
-#define strtod(s1,s2) not_here("strtod")
-#endif
-#ifndef HAS_STRTOL
-#define strtol(s1,s2,b) not_here("strtol")
-#endif
-#ifndef HAS_STRTOUL
-#define strtoul(s1,s2,b) not_here("strtoul")
-#endif
-#ifndef HAS_STRXFRM
-#define strxfrm(s1,s2,n) not_here("strxfrm")
-#endif
-#ifndef HAS_TCGETPGRP
-#define tcgetpgrp(a) not_here("tcgetpgrp")
-#endif
-#ifndef HAS_TCSETPGRP
-#define tcsetpgrp(a,b) not_here("tcsetpgrp")
-#endif
-#ifndef HAS_TIMES
-#define times(a) not_here("times")
-#endif
-#ifndef HAS_UNAME
-#define uname(a) not_here("uname")
-#endif
-#ifndef HAS_WAITPID
-#define waitpid(a,b,c) not_here("waitpid")
-#endif
-
-#ifndef HAS_MBLEN
-#ifndef mblen
-#define mblen(a,b) not_here("mblen")
-#endif
-#endif
-#ifndef HAS_MBSTOWCS
-#define mbstowcs(s, pwcs, n) not_here("mbstowcs")
-#endif
-#ifndef HAS_MBTOWC
-#define mbtowc(pwc, s, n) not_here("mbtowc")
-#endif
-#ifndef HAS_WCSTOMBS
-#define wcstombs(s, pwcs, n) not_here("wcstombs")
-#endif
-#ifndef HAS_WCTOMB
-#define wctomb(s, wchar) not_here("wcstombs")
-#endif
-#if !defined(HAS_MBLEN) && !defined(HAS_MBSTOWCS) && !defined(HAS_MBTOWC) && !defined(HAS_WCSTOMBS) && !defined(HAS_WCTOMB)
-/* If we don't have these functions, then we wouldn't have gotten a typedef
- for wchar_t, the wide character type. Defining wchar_t allows the
- functions referencing it to compile. Its actual type is then meaningless,
- since without the above functions, all sections using it end up calling
- not_here() and croak. --Kaveh Ghazi (ghazi@noc.rutgers.edu) 9/18/94. */
-#ifndef wchar_t
-#define wchar_t char
-#endif
-#endif
-
-#ifndef HAS_LOCALECONV
-#define localeconv() not_here("localeconv")
-#endif
-
-#ifdef HAS_TZNAME
-# if !defined(WIN32) && !defined(__CYGWIN__)
-extern char *tzname[];
-# endif
-#else
-#if !defined(WIN32) || (defined(__MINGW32__) && !defined(tzname))
-char *tzname[] = { "" , "" };
-#endif
-#endif
-
-/* XXX struct tm on some systems (SunOS4/BSD) contains extra (non POSIX)
- * fields for which we don't have Configure support yet:
- * char *tm_zone; -- abbreviation of timezone name
- * long tm_gmtoff; -- offset from GMT in seconds
- * To workaround core dumps from the uninitialised tm_zone we get the
- * system to give us a reasonable struct to copy. This fix means that
- * strftime uses the tm_zone and tm_gmtoff values returned by
- * localtime(time()). That should give the desired result most of the
- * time. But probably not always!
- *
- * This is a temporary workaround to be removed once Configure
- * support is added and NETaa14816 is considered in full.
- * It does not address tzname aspects of NETaa14816.
- */
-#ifdef HAS_GNULIBC
-# ifndef STRUCT_TM_HASZONE
-# define STRUCT_TM_HASZONE
-# endif
-#endif
-
-#ifdef STRUCT_TM_HASZONE
-static void
-init_tm(struct tm *ptm) /* see mktime, strftime and asctime */
-{
- Time_t now;
- (void)time(&now);
- Copy(localtime(&now), ptm, 1, struct tm);
-}
-
-#else
-# define init_tm(ptm)
-#endif
-
-/*
- * mini_mktime - normalise struct tm values without the localtime()
- * semantics (and overhead) of mktime().
- */
-static void
-mini_mktime(struct tm *ptm)
-{
- int yearday;
- int secs;
- int month, mday, year, jday;
- int odd_cent, odd_year;
-
-#define DAYS_PER_YEAR 365
-#define DAYS_PER_QYEAR (4*DAYS_PER_YEAR+1)
-#define DAYS_PER_CENT (25*DAYS_PER_QYEAR-1)
-#define DAYS_PER_QCENT (4*DAYS_PER_CENT+1)
-#define SECS_PER_HOUR (60*60)
-#define SECS_PER_DAY (24*SECS_PER_HOUR)
-/* parentheses deliberately absent on these two, otherwise they don't work */
-#define MONTH_TO_DAYS 153/5
-#define DAYS_TO_MONTH 5/153
-/* offset to bias by March (month 4) 1st between month/mday & year finding */
-#define YEAR_ADJUST (4*MONTH_TO_DAYS+1)
-/* as used here, the algorithm leaves Sunday as day 1 unless we adjust it */
-#define WEEKDAY_BIAS 6 /* (1+6)%7 makes Sunday 0 again */
-
-/*
- * Year/day algorithm notes:
- *
- * With a suitable offset for numeric value of the month, one can find
- * an offset into the year by considering months to have 30.6 (153/5) days,
- * using integer arithmetic (i.e., with truncation). To avoid too much
- * messing about with leap days, we consider January and February to be
- * the 13th and 14th month of the previous year. After that transformation,
- * we need the month index we use to be high by 1 from 'normal human' usage,
- * so the month index values we use run from 4 through 15.
- *
- * Given that, and the rules for the Gregorian calendar (leap years are those
- * divisible by 4 unless also divisible by 100, when they must be divisible
- * by 400 instead), we can simply calculate the number of days since some
- * arbitrary 'beginning of time' by futzing with the (adjusted) year number,
- * the days we derive from our month index, and adding in the day of the
- * month. The value used here is not adjusted for the actual origin which
- * it normally would use (1 January A.D. 1), since we're not exposing it.
- * We're only building the value so we can turn around and get the
- * normalised values for the year, month, day-of-month, and day-of-year.
- *
- * For going backward, we need to bias the value we're using so that we find
- * the right year value. (Basically, we don't want the contribution of
- * March 1st to the number to apply while deriving the year). Having done
- * that, we 'count up' the contribution to the year number by accounting for
- * full quadracenturies (400-year periods) with their extra leap days, plus
- * the contribution from full centuries (to avoid counting in the lost leap
- * days), plus the contribution from full quad-years (to count in the normal
- * leap days), plus the leftover contribution from any non-leap years.
- * At this point, if we were working with an actual leap day, we'll have 0
- * days left over. This is also true for March 1st, however. So, we have
- * to special-case that result, and (earlier) keep track of the 'odd'
- * century and year contributions. If we got 4 extra centuries in a qcent,
- * or 4 extra years in a qyear, then it's a leap day and we call it 29 Feb.
- * Otherwise, we add back in the earlier bias we removed (the 123 from
- * figuring in March 1st), find the month index (integer division by 30.6),
- * and the remainder is the day-of-month. We then have to convert back to
- * 'real' months (including fixing January and February from being 14/15 in
- * the previous year to being in the proper year). After that, to get
- * tm_yday, we work with the normalised year and get a new yearday value for
- * January 1st, which we subtract from the yearday value we had earlier,
- * representing the date we've re-built. This is done from January 1
- * because tm_yday is 0-origin.
- *
- * Since POSIX time routines are only guaranteed to work for times since the
- * UNIX epoch (00:00:00 1 Jan 1970 UTC), the fact that this algorithm
- * applies Gregorian calendar rules even to dates before the 16th century
- * doesn't bother me. Besides, you'd need cultural context for a given
- * date to know whether it was Julian or Gregorian calendar, and that's
- * outside the scope for this routine. Since we convert back based on the
- * same rules we used to build the yearday, you'll only get strange results
- * for input which needed normalising, or for the 'odd' century years which
- * were leap years in the Julian calander but not in the Gregorian one.
- * I can live with that.
- *
- * This algorithm also fails to handle years before A.D. 1 gracefully, but
- * that's still outside the scope for POSIX time manipulation, so I don't
- * care.
- */
-
- year = 1900 + ptm->tm_year;
- month = ptm->tm_mon;
- mday = ptm->tm_mday;
- /* allow given yday with no month & mday to dominate the result */
- if (ptm->tm_yday >= 0 && mday <= 0 && month <= 0) {
- month = 0;
- mday = 0;
- jday = 1 + ptm->tm_yday;
- }
- else {
- jday = 0;
- }
- if (month >= 2)
- month+=2;
- else
- month+=14, year--;
- yearday = DAYS_PER_YEAR * year + year/4 - year/100 + year/400;
- yearday += month*MONTH_TO_DAYS + mday + jday;
- /*
- * Note that we don't know when leap-seconds were or will be,
- * so we have to trust the user if we get something which looks
- * like a sensible leap-second. Wild values for seconds will
- * be rationalised, however.
- */
- if ((unsigned) ptm->tm_sec <= 60) {
- secs = 0;
- }
- else {
- secs = ptm->tm_sec;
- ptm->tm_sec = 0;
- }
- secs += 60 * ptm->tm_min;
- secs += SECS_PER_HOUR * ptm->tm_hour;
- if (secs < 0) {
- if (secs-(secs/SECS_PER_DAY*SECS_PER_DAY) < 0) {
- /* got negative remainder, but need positive time */
- /* back off an extra day to compensate */
- yearday += (secs/SECS_PER_DAY)-1;
- secs -= SECS_PER_DAY * (secs/SECS_PER_DAY - 1);
- }
- else {
- yearday += (secs/SECS_PER_DAY);
- secs -= SECS_PER_DAY * (secs/SECS_PER_DAY);
- }
- }
- else if (secs >= SECS_PER_DAY) {
- yearday += (secs/SECS_PER_DAY);
- secs %= SECS_PER_DAY;
- }
- ptm->tm_hour = secs/SECS_PER_HOUR;
- secs %= SECS_PER_HOUR;
- ptm->tm_min = secs/60;
- secs %= 60;
- ptm->tm_sec += secs;
- /* done with time of day effects */
- /*
- * The algorithm for yearday has (so far) left it high by 428.
- * To avoid mistaking a legitimate Feb 29 as Mar 1, we need to
- * bias it by 123 while trying to figure out what year it
- * really represents. Even with this tweak, the reverse
- * translation fails for years before A.D. 0001.
- * It would still fail for Feb 29, but we catch that one below.
- */
- jday = yearday; /* save for later fixup vis-a-vis Jan 1 */
- yearday -= YEAR_ADJUST;
- year = (yearday / DAYS_PER_QCENT) * 400;
- yearday %= DAYS_PER_QCENT;
- odd_cent = yearday / DAYS_PER_CENT;
- year += odd_cent * 100;
- yearday %= DAYS_PER_CENT;
- year += (yearday / DAYS_PER_QYEAR) * 4;
- yearday %= DAYS_PER_QYEAR;
- odd_year = yearday / DAYS_PER_YEAR;
- year += odd_year;
- yearday %= DAYS_PER_YEAR;
- if (!yearday && (odd_cent==4 || odd_year==4)) { /* catch Feb 29 */
- month = 1;
- yearday = 29;
- }
- else {
- yearday += YEAR_ADJUST; /* recover March 1st crock */
- month = yearday*DAYS_TO_MONTH;
- yearday -= month*MONTH_TO_DAYS;
- /* recover other leap-year adjustment */
- if (month > 13) {
- month-=14;
- year++;
- }
- else {
- month-=2;
- }
- }
- ptm->tm_year = year - 1900;
- if (yearday) {
- ptm->tm_mday = yearday;
- ptm->tm_mon = month;
- }
- else {
- ptm->tm_mday = 31;
- ptm->tm_mon = month - 1;
- }
- /* re-build yearday based on Jan 1 to get tm_yday */
- year--;
- yearday = year*DAYS_PER_YEAR + year/4 - year/100 + year/400;
- yearday += 14*MONTH_TO_DAYS + 1;
- ptm->tm_yday = jday - yearday;
- /* fix tm_wday if not overridden by caller */
- if ((unsigned)ptm->tm_wday > 6)
- ptm->tm_wday = (jday + WEEKDAY_BIAS) % 7;
-}
-
-#ifdef HAS_LONG_DOUBLE
-# if LONG_DOUBLESIZE > NVSIZE
-# undef HAS_LONG_DOUBLE /* XXX until we figure out how to use them */
-# endif
-#endif
-
-#ifndef HAS_LONG_DOUBLE
-#ifdef LDBL_MAX
-#undef LDBL_MAX
-#endif
-#ifdef LDBL_MIN
-#undef LDBL_MIN
-#endif
-#ifdef LDBL_EPSILON
-#undef LDBL_EPSILON
-#endif
-#endif
-
-static int
-not_here(char *s)
-{
- croak("POSIX::%s not implemented on this architecture", s);
- return -1;
-}
-
-static
-NV
-constant(char *name, int arg)
-{
- errno = 0;
- switch (*name) {
- case 'A':
- if (strEQ(name, "ARG_MAX"))
-#ifdef ARG_MAX
- return ARG_MAX;
-#else
- goto not_there;
-#endif
- break;
- case 'B':
- if (strEQ(name, "BUFSIZ"))
-#ifdef BUFSIZ
- return BUFSIZ;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "BRKINT"))
-#ifdef BRKINT
- return BRKINT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B9600"))
-#ifdef B9600
- return B9600;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B19200"))
-#ifdef B19200
- return B19200;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B38400"))
-#ifdef B38400
- return B38400;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B0"))
-#ifdef B0
- return B0;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B110"))
-#ifdef B110
- return B110;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B1200"))
-#ifdef B1200
- return B1200;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B134"))
-#ifdef B134
- return B134;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B150"))
-#ifdef B150
- return B150;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B1800"))
-#ifdef B1800
- return B1800;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B200"))
-#ifdef B200
- return B200;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B2400"))
-#ifdef B2400
- return B2400;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B300"))
-#ifdef B300
- return B300;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B4800"))
-#ifdef B4800
- return B4800;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B50"))
-#ifdef B50
- return B50;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B600"))
-#ifdef B600
- return B600;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "B75"))
-#ifdef B75
- return B75;
-#else
- goto not_there;
-#endif
- break;
- case 'C':
- if (strEQ(name, "CHAR_BIT"))
-#ifdef CHAR_BIT
- return CHAR_BIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CHAR_MAX"))
-#ifdef CHAR_MAX
- return CHAR_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CHAR_MIN"))
-#ifdef CHAR_MIN
- return CHAR_MIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CHILD_MAX"))
-#ifdef CHILD_MAX
- return CHILD_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CLK_TCK"))
-#ifdef CLK_TCK
- return CLK_TCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CLOCAL"))
-#ifdef CLOCAL
- return CLOCAL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CLOCKS_PER_SEC"))
-#ifdef CLOCKS_PER_SEC
- return CLOCKS_PER_SEC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CREAD"))
-#ifdef CREAD
- return CREAD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CS5"))
-#ifdef CS5
- return CS5;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CS6"))
-#ifdef CS6
- return CS6;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CS7"))
-#ifdef CS7
- return CS7;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CS8"))
-#ifdef CS8
- return CS8;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CSIZE"))
-#ifdef CSIZE
- return CSIZE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "CSTOPB"))
-#ifdef CSTOPB
- return CSTOPB;
-#else
- goto not_there;
-#endif
- break;
- case 'D':
- if (strEQ(name, "DBL_MAX"))
-#ifdef DBL_MAX
- return DBL_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DBL_MIN"))
-#ifdef DBL_MIN
- return DBL_MIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DBL_DIG"))
-#ifdef DBL_DIG
- return DBL_DIG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DBL_EPSILON"))
-#ifdef DBL_EPSILON
- return DBL_EPSILON;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DBL_MANT_DIG"))
-#ifdef DBL_MANT_DIG
- return DBL_MANT_DIG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DBL_MAX_10_EXP"))
-#ifdef DBL_MAX_10_EXP
- return DBL_MAX_10_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DBL_MAX_EXP"))
-#ifdef DBL_MAX_EXP
- return DBL_MAX_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DBL_MIN_10_EXP"))
-#ifdef DBL_MIN_10_EXP
- return DBL_MIN_10_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "DBL_MIN_EXP"))
-#ifdef DBL_MIN_EXP
- return DBL_MIN_EXP;
-#else
- goto not_there;
-#endif
- break;
- case 'E':
- switch (name[1]) {
- case 'A':
- if (strEQ(name, "EACCES"))
-#ifdef EACCES
- return EACCES;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EADDRINUSE"))
-#ifdef EADDRINUSE
- return EADDRINUSE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EADDRNOTAVAIL"))
-#ifdef EADDRNOTAVAIL
- return EADDRNOTAVAIL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EAFNOSUPPORT"))
-#ifdef EAFNOSUPPORT
- return EAFNOSUPPORT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EAGAIN"))
-#ifdef EAGAIN
- return EAGAIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EALREADY"))
-#ifdef EALREADY
- return EALREADY;
-#else
- goto not_there;
-#endif
- break;
- case 'B':
- if (strEQ(name, "EBADF"))
-#ifdef EBADF
- return EBADF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EBUSY"))
-#ifdef EBUSY
- return EBUSY;
-#else
- goto not_there;
-#endif
- break;
- case 'C':
- if (strEQ(name, "ECHILD"))
-#ifdef ECHILD
- return ECHILD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ECHO"))
-#ifdef ECHO
- return ECHO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ECHOE"))
-#ifdef ECHOE
- return ECHOE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ECHOK"))
-#ifdef ECHOK
- return ECHOK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ECHONL"))
-#ifdef ECHONL
- return ECHONL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ECONNABORTED"))
-#ifdef ECONNABORTED
- return ECONNABORTED;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ECONNREFUSED"))
-#ifdef ECONNREFUSED
- return ECONNREFUSED;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ECONNRESET"))
-#ifdef ECONNRESET
- return ECONNRESET;
-#else
- goto not_there;
-#endif
- break;
- case 'D':
- if (strEQ(name, "EDEADLK"))
-#ifdef EDEADLK
- return EDEADLK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EDESTADDRREQ"))
-#ifdef EDESTADDRREQ
- return EDESTADDRREQ;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EDOM"))
-#ifdef EDOM
- return EDOM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EDQUOT"))
-#ifdef EDQUOT
- return EDQUOT;
-#else
- goto not_there;
-#endif
- break;
- case 'E':
- if (strEQ(name, "EEXIST"))
-#ifdef EEXIST
- return EEXIST;
-#else
- goto not_there;
-#endif
- break;
- case 'F':
- if (strEQ(name, "EFAULT"))
-#ifdef EFAULT
- return EFAULT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EFBIG"))
-#ifdef EFBIG
- return EFBIG;
-#else
- goto not_there;
-#endif
- break;
- case 'H':
- if (strEQ(name, "EHOSTDOWN"))
-#ifdef EHOSTDOWN
- return EHOSTDOWN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EHOSTUNREACH"))
-#ifdef EHOSTUNREACH
- return EHOSTUNREACH;
-#else
- goto not_there;
-#endif
- break;
- case 'I':
- if (strEQ(name, "EINPROGRESS"))
-#ifdef EINPROGRESS
- return EINPROGRESS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EINTR"))
-#ifdef EINTR
- return EINTR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EINVAL"))
-#ifdef EINVAL
- return EINVAL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EIO"))
-#ifdef EIO
- return EIO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EISCONN"))
-#ifdef EISCONN
- return EISCONN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EISDIR"))
-#ifdef EISDIR
- return EISDIR;
-#else
- goto not_there;
-#endif
- break;
- case 'L':
- if (strEQ(name, "ELOOP"))
-#ifdef ELOOP
- return ELOOP;
-#else
- goto not_there;
-#endif
- break;
- case 'M':
- if (strEQ(name, "EMFILE"))
-#ifdef EMFILE
- return EMFILE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EMLINK"))
-#ifdef EMLINK
- return EMLINK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EMSGSIZE"))
-#ifdef EMSGSIZE
- return EMSGSIZE;
-#else
- goto not_there;
-#endif
- break;
- case 'N':
- if (strEQ(name, "ENETDOWN"))
-#ifdef ENETDOWN
- return ENETDOWN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENETRESET"))
-#ifdef ENETRESET
- return ENETRESET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENETUNREACH"))
-#ifdef ENETUNREACH
- return ENETUNREACH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOBUFS"))
-#ifdef ENOBUFS
- return ENOBUFS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOEXEC"))
-#ifdef ENOEXEC
- return ENOEXEC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOMEM"))
-#ifdef ENOMEM
- return ENOMEM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOPROTOOPT"))
-#ifdef ENOPROTOOPT
- return ENOPROTOOPT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOSPC"))
-#ifdef ENOSPC
- return ENOSPC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOTBLK"))
-#ifdef ENOTBLK
- return ENOTBLK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOTCONN"))
-#ifdef ENOTCONN
- return ENOTCONN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOTDIR"))
-#ifdef ENOTDIR
- return ENOTDIR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOTEMPTY"))
-#ifdef ENOTEMPTY
- return ENOTEMPTY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOTSOCK"))
-#ifdef ENOTSOCK
- return ENOTSOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOTTY"))
-#ifdef ENOTTY
- return ENOTTY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENFILE"))
-#ifdef ENFILE
- return ENFILE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENODEV"))
-#ifdef ENODEV
- return ENODEV;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOENT"))
-#ifdef ENOENT
- return ENOENT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOLCK"))
-#ifdef ENOLCK
- return ENOLCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENOSYS"))
-#ifdef ENOSYS
- return ENOSYS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENXIO"))
-#ifdef ENXIO
- return ENXIO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ENAMETOOLONG"))
-#ifdef ENAMETOOLONG
- return ENAMETOOLONG;
-#else
- goto not_there;
-#endif
- break;
- case 'O':
- if (strEQ(name, "EOF"))
-#ifdef EOF
- return EOF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EOPNOTSUPP"))
-#ifdef EOPNOTSUPP
- return EOPNOTSUPP;
-#else
- goto not_there;
-#endif
- break;
- case 'P':
- if (strEQ(name, "EPERM"))
-#ifdef EPERM
- return EPERM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EPFNOSUPPORT"))
-#ifdef EPFNOSUPPORT
- return EPFNOSUPPORT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EPIPE"))
-#ifdef EPIPE
- return EPIPE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EPROCLIM"))
-#ifdef EPROCLIM
- return EPROCLIM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EPROTONOSUPPORT"))
-#ifdef EPROTONOSUPPORT
- return EPROTONOSUPPORT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EPROTOTYPE"))
-#ifdef EPROTOTYPE
- return EPROTOTYPE;
-#else
- goto not_there;
-#endif
- break;
- case 'R':
- if (strEQ(name, "ERANGE"))
-#ifdef ERANGE
- return ERANGE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EREMOTE"))
-#ifdef EREMOTE
- return EREMOTE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ERESTART"))
-#ifdef ERESTART
- return ERESTART;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "EROFS"))
-#ifdef EROFS
- return EROFS;
-#else
- goto not_there;
-#endif
- break;
- case 'S':
- if (strEQ(name, "ESHUTDOWN"))
-#ifdef ESHUTDOWN
- return ESHUTDOWN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ESOCKTNOSUPPORT"))
-#ifdef ESOCKTNOSUPPORT
- return ESOCKTNOSUPPORT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ESPIPE"))
-#ifdef ESPIPE
- return ESPIPE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ESRCH"))
-#ifdef ESRCH
- return ESRCH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ESTALE"))
-#ifdef ESTALE
- return ESTALE;
-#else
- goto not_there;
-#endif
- break;
- case 'T':
- if (strEQ(name, "ETIMEDOUT"))
-#ifdef ETIMEDOUT
- return ETIMEDOUT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ETOOMANYREFS"))
-#ifdef ETOOMANYREFS
- return ETOOMANYREFS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ETXTBSY"))
-#ifdef ETXTBSY
- return ETXTBSY;
-#else
- goto not_there;
-#endif
- break;
- case 'U':
- if (strEQ(name, "EUSERS"))
-#ifdef EUSERS
- return EUSERS;
-#else
- goto not_there;
-#endif
- break;
- case 'W':
- if (strEQ(name, "EWOULDBLOCK"))
-#ifdef EWOULDBLOCK
- return EWOULDBLOCK;
-#else
- goto not_there;
-#endif
- break;
- case 'X':
- if (strEQ(name, "EXIT_FAILURE"))
-#ifdef EXIT_FAILURE
- return EXIT_FAILURE;
-#else
- return 1;
-#endif
- if (strEQ(name, "EXIT_SUCCESS"))
-#ifdef EXIT_SUCCESS
- return EXIT_SUCCESS;
-#else
- return 0;
-#endif
- if (strEQ(name, "EXDEV"))
-#ifdef EXDEV
- return EXDEV;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strEQ(name, "E2BIG"))
-#ifdef E2BIG
- return E2BIG;
-#else
- goto not_there;
-#endif
- break;
- case 'F':
- if (strnEQ(name, "FLT_", 4)) {
- if (strEQ(name, "FLT_MAX"))
-#ifdef FLT_MAX
- return FLT_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_MIN"))
-#ifdef FLT_MIN
- return FLT_MIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_ROUNDS"))
-#ifdef FLT_ROUNDS
- return FLT_ROUNDS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_DIG"))
-#ifdef FLT_DIG
- return FLT_DIG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_EPSILON"))
-#ifdef FLT_EPSILON
- return FLT_EPSILON;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_MANT_DIG"))
-#ifdef FLT_MANT_DIG
- return FLT_MANT_DIG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_MAX_10_EXP"))
-#ifdef FLT_MAX_10_EXP
- return FLT_MAX_10_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_MAX_EXP"))
-#ifdef FLT_MAX_EXP
- return FLT_MAX_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_MIN_10_EXP"))
-#ifdef FLT_MIN_10_EXP
- return FLT_MIN_10_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_MIN_EXP"))
-#ifdef FLT_MIN_EXP
- return FLT_MIN_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FLT_RADIX"))
-#ifdef FLT_RADIX
- return FLT_RADIX;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strnEQ(name, "F_", 2)) {
- if (strEQ(name, "F_DUPFD"))
-#ifdef F_DUPFD
- return F_DUPFD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_GETFD"))
-#ifdef F_GETFD
- return F_GETFD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_GETFL"))
-#ifdef F_GETFL
- return F_GETFL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_GETLK"))
-#ifdef F_GETLK
- return F_GETLK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_OK"))
-#ifdef F_OK
- return F_OK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_RDLCK"))
-#ifdef F_RDLCK
- return F_RDLCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETFD"))
-#ifdef F_SETFD
- return F_SETFD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETFL"))
-#ifdef F_SETFL
- return F_SETFL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETLK"))
-#ifdef F_SETLK
- return F_SETLK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_SETLKW"))
-#ifdef F_SETLKW
- return F_SETLKW;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_UNLCK"))
-#ifdef F_UNLCK
- return F_UNLCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "F_WRLCK"))
-#ifdef F_WRLCK
- return F_WRLCK;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strEQ(name, "FD_CLOEXEC"))
-#ifdef FD_CLOEXEC
- return FD_CLOEXEC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "FILENAME_MAX"))
-#ifdef FILENAME_MAX
- return FILENAME_MAX;
-#else
- goto not_there;
-#endif
- break;
- case 'H':
- if (strEQ(name, "HUGE_VAL"))
-#if defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)
- /* HUGE_VALL is admittedly non-POSIX but if we are using long doubles
- * we might as well use long doubles. --jhi */
- return HUGE_VALL;
-#endif
-#ifdef HUGE_VAL
- return HUGE_VAL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "HUPCL"))
-#ifdef HUPCL
- return HUPCL;
-#else
- goto not_there;
-#endif
- break;
- case 'I':
- if (strEQ(name, "INT_MAX"))
-#ifdef INT_MAX
- return INT_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "INT_MIN"))
-#ifdef INT_MIN
- return INT_MIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ICANON"))
-#ifdef ICANON
- return ICANON;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ICRNL"))
-#ifdef ICRNL
- return ICRNL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "IEXTEN"))
-#ifdef IEXTEN
- return IEXTEN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "IGNBRK"))
-#ifdef IGNBRK
- return IGNBRK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "IGNCR"))
-#ifdef IGNCR
- return IGNCR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "IGNPAR"))
-#ifdef IGNPAR
- return IGNPAR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "INLCR"))
-#ifdef INLCR
- return INLCR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "INPCK"))
-#ifdef INPCK
- return INPCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ISIG"))
-#ifdef ISIG
- return ISIG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ISTRIP"))
-#ifdef ISTRIP
- return ISTRIP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "IXOFF"))
-#ifdef IXOFF
- return IXOFF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "IXON"))
-#ifdef IXON
- return IXON;
-#else
- goto not_there;
-#endif
- break;
- case 'L':
- if (strnEQ(name, "LC_", 3)) {
- if (strEQ(name, "LC_ALL"))
-#ifdef LC_ALL
- return LC_ALL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LC_COLLATE"))
-#ifdef LC_COLLATE
- return LC_COLLATE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LC_CTYPE"))
-#ifdef LC_CTYPE
- return LC_CTYPE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LC_MONETARY"))
-#ifdef LC_MONETARY
- return LC_MONETARY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LC_NUMERIC"))
-#ifdef LC_NUMERIC
- return LC_NUMERIC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LC_TIME"))
-#ifdef LC_TIME
- return LC_TIME;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strnEQ(name, "LDBL_", 5)) {
- if (strEQ(name, "LDBL_MAX"))
-#ifdef LDBL_MAX
- return LDBL_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LDBL_MIN"))
-#ifdef LDBL_MIN
- return LDBL_MIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LDBL_DIG"))
-#ifdef LDBL_DIG
- return LDBL_DIG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LDBL_EPSILON"))
-#ifdef LDBL_EPSILON
- return LDBL_EPSILON;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LDBL_MANT_DIG"))
-#ifdef LDBL_MANT_DIG
- return LDBL_MANT_DIG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LDBL_MAX_10_EXP"))
-#ifdef LDBL_MAX_10_EXP
- return LDBL_MAX_10_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LDBL_MAX_EXP"))
-#ifdef LDBL_MAX_EXP
- return LDBL_MAX_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LDBL_MIN_10_EXP"))
-#ifdef LDBL_MIN_10_EXP
- return LDBL_MIN_10_EXP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LDBL_MIN_EXP"))
-#ifdef LDBL_MIN_EXP
- return LDBL_MIN_EXP;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strnEQ(name, "L_", 2)) {
- if (strEQ(name, "L_ctermid"))
-#ifdef L_ctermid
- return L_ctermid;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "L_cuserid"))
-#ifdef L_cuserid
- return L_cuserid;
-#else
- goto not_there;
-#endif
- /* L_tmpnam[e] was a typo--retained for compatibility */
- if (strEQ(name, "L_tmpname") || strEQ(name, "L_tmpnam"))
-#ifdef L_tmpnam
- return L_tmpnam;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strEQ(name, "LONG_MAX"))
-#ifdef LONG_MAX
- return LONG_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LONG_MIN"))
-#ifdef LONG_MIN
- return LONG_MIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "LINK_MAX"))
-#ifdef LINK_MAX
- return LINK_MAX;
-#else
- goto not_there;
-#endif
- break;
- case 'M':
- if (strEQ(name, "MAX_CANON"))
-#ifdef MAX_CANON
- return MAX_CANON;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MAX_INPUT"))
-#ifdef MAX_INPUT
- return MAX_INPUT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MB_CUR_MAX"))
-#ifdef MB_CUR_MAX
- return MB_CUR_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MB_LEN_MAX"))
-#ifdef MB_LEN_MAX
- return MB_LEN_MAX;
-#else
- goto not_there;
-#endif
- break;
- case 'N':
- if (strEQ(name, "NULL")) return 0;
- if (strEQ(name, "NAME_MAX"))
-#ifdef NAME_MAX
- return NAME_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "NCCS"))
-#ifdef NCCS
- return NCCS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "NGROUPS_MAX"))
-#ifdef NGROUPS_MAX
- return NGROUPS_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "NOFLSH"))
-#ifdef NOFLSH
- return NOFLSH;
-#else
- goto not_there;
-#endif
- break;
- case 'O':
- if (strnEQ(name, "O_", 2)) {
- if (strEQ(name, "O_APPEND"))
-#ifdef O_APPEND
- return O_APPEND;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_CREAT"))
-#ifdef O_CREAT
- return O_CREAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_TRUNC"))
-#ifdef O_TRUNC
- return O_TRUNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_RDONLY"))
-#ifdef O_RDONLY
- return O_RDONLY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_RDWR"))
-#ifdef O_RDWR
- return O_RDWR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_WRONLY"))
-#ifdef O_WRONLY
- return O_WRONLY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_EXCL"))
-#ifdef O_EXCL
- return O_EXCL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_NOCTTY"))
-#ifdef O_NOCTTY
- return O_NOCTTY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_NONBLOCK"))
-#ifdef O_NONBLOCK
- return O_NONBLOCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "O_ACCMODE"))
-#ifdef O_ACCMODE
- return O_ACCMODE;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strEQ(name, "OPEN_MAX"))
-#ifdef OPEN_MAX
- return OPEN_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "OPOST"))
-#ifdef OPOST
- return OPOST;
-#else
- goto not_there;
-#endif
- break;
- case 'P':
- if (strEQ(name, "PATH_MAX"))
-#ifdef PATH_MAX
- return PATH_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PARENB"))
-#ifdef PARENB
- return PARENB;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PARMRK"))
-#ifdef PARMRK
- return PARMRK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PARODD"))
-#ifdef PARODD
- return PARODD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PIPE_BUF"))
-#ifdef PIPE_BUF
- return PIPE_BUF;
-#else
- goto not_there;
-#endif
- break;
- case 'R':
- if (strEQ(name, "RAND_MAX"))
-#ifdef RAND_MAX
- return RAND_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "R_OK"))
-#ifdef R_OK
- return R_OK;
-#else
- goto not_there;
-#endif
- break;
- case 'S':
- if (strnEQ(name, "SIG", 3)) {
- if (name[3] == '_') {
- if (strEQ(name, "SIG_BLOCK"))
-#ifdef SIG_BLOCK
- return SIG_BLOCK;
-#else
- goto not_there;
-#endif
-#ifdef SIG_DFL
- if (strEQ(name, "SIG_DFL")) return (IV)SIG_DFL;
-#endif
-#ifdef SIG_ERR
- if (strEQ(name, "SIG_ERR")) return (IV)SIG_ERR;
-#endif
-#ifdef SIG_IGN
- if (strEQ(name, "SIG_IGN")) return (IV)SIG_IGN;
-#endif
- if (strEQ(name, "SIG_SETMASK"))
-#ifdef SIG_SETMASK
- return SIG_SETMASK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIG_UNBLOCK"))
-#ifdef SIG_UNBLOCK
- return SIG_UNBLOCK;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strEQ(name, "SIGABRT"))
-#ifdef SIGABRT
- return SIGABRT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGALRM"))
-#ifdef SIGALRM
- return SIGALRM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGCHLD"))
-#ifdef SIGCHLD
- return SIGCHLD;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGCONT"))
-#ifdef SIGCONT
- return SIGCONT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGFPE"))
-#ifdef SIGFPE
- return SIGFPE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGHUP"))
-#ifdef SIGHUP
- return SIGHUP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGILL"))
-#ifdef SIGILL
- return SIGILL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGINT"))
-#ifdef SIGINT
- return SIGINT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGKILL"))
-#ifdef SIGKILL
- return SIGKILL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGPIPE"))
-#ifdef SIGPIPE
- return SIGPIPE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGQUIT"))
-#ifdef SIGQUIT
- return SIGQUIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGSEGV"))
-#ifdef SIGSEGV
- return SIGSEGV;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGSTOP"))
-#ifdef SIGSTOP
- return SIGSTOP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGTERM"))
-#ifdef SIGTERM
- return SIGTERM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGTSTP"))
-#ifdef SIGTSTP
- return SIGTSTP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGTTIN"))
-#ifdef SIGTTIN
- return SIGTTIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGTTOU"))
-#ifdef SIGTTOU
- return SIGTTOU;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGUSR1"))
-#ifdef SIGUSR1
- return SIGUSR1;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SIGUSR2"))
-#ifdef SIGUSR2
- return SIGUSR2;
-#else
- goto not_there;
-#endif
- break;
- }
- if (name[1] == '_') {
- if (strEQ(name, "S_ISGID"))
-#ifdef S_ISGID
- return S_ISGID;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_ISUID"))
-#ifdef S_ISUID
- return S_ISUID;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRGRP"))
-#ifdef S_IRGRP
- return S_IRGRP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IROTH"))
-#ifdef S_IROTH
- return S_IROTH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRUSR"))
-#ifdef S_IRUSR
- return S_IRUSR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRWXG"))
-#ifdef S_IRWXG
- return S_IRWXG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRWXO"))
-#ifdef S_IRWXO
- return S_IRWXO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IRWXU"))
-#ifdef S_IRWXU
- return S_IRWXU;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IWGRP"))
-#ifdef S_IWGRP
- return S_IWGRP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IWOTH"))
-#ifdef S_IWOTH
- return S_IWOTH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IWUSR"))
-#ifdef S_IWUSR
- return S_IWUSR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IXGRP"))
-#ifdef S_IXGRP
- return S_IXGRP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IXOTH"))
-#ifdef S_IXOTH
- return S_IXOTH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "S_IXUSR"))
-#ifdef S_IXUSR
- return S_IXUSR;
-#else
- goto not_there;
-#endif
- errno = EAGAIN; /* the following aren't constants */
-#ifdef S_ISBLK
- if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg);
-#endif
-#ifdef S_ISCHR
- if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg);
-#endif
-#ifdef S_ISDIR
- if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg);
-#endif
-#ifdef S_ISFIFO
- if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg);
-#endif
-#ifdef S_ISREG
- if (strEQ(name, "S_ISREG")) return S_ISREG(arg);
-#endif
- break;
- }
- if (strEQ(name, "SEEK_CUR"))
-#ifdef SEEK_CUR
- return SEEK_CUR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SEEK_END"))
-#ifdef SEEK_END
- return SEEK_END;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SEEK_SET"))
-#ifdef SEEK_SET
- return SEEK_SET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "STREAM_MAX"))
-#ifdef STREAM_MAX
- return STREAM_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SHRT_MAX"))
-#ifdef SHRT_MAX
- return SHRT_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SHRT_MIN"))
-#ifdef SHRT_MIN
- return SHRT_MIN;
-#else
- goto not_there;
-#endif
- if (strnEQ(name, "SA_", 3)) {
- if (strEQ(name, "SA_NOCLDSTOP"))
-#ifdef SA_NOCLDSTOP
- return SA_NOCLDSTOP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SA_NOCLDWAIT"))
-#ifdef SA_NOCLDWAIT
- return SA_NOCLDWAIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SA_NODEFER"))
-#ifdef SA_NODEFER
- return SA_NODEFER;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SA_ONSTACK"))
-#ifdef SA_ONSTACK
- return SA_ONSTACK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SA_RESETHAND"))
-#ifdef SA_RESETHAND
- return SA_RESETHAND;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SA_RESTART"))
-#ifdef SA_RESTART
- return SA_RESTART;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SA_SIGINFO"))
-#ifdef SA_SIGINFO
- return SA_SIGINFO;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strEQ(name, "SCHAR_MAX"))
-#ifdef SCHAR_MAX
- return SCHAR_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SCHAR_MIN"))
-#ifdef SCHAR_MIN
- return SCHAR_MIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SSIZE_MAX"))
-#ifdef SSIZE_MAX
- return SSIZE_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "STDIN_FILENO"))
-#ifdef STDIN_FILENO
- return STDIN_FILENO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "STDOUT_FILENO"))
-#ifdef STDOUT_FILENO
- return STDOUT_FILENO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "STDERR_FILENO"))
-#ifdef STDERR_FILENO
- return STDERR_FILENO;
-#else
- goto not_there;
-#endif
- break;
- case 'T':
- if (strEQ(name, "TCIFLUSH"))
-#ifdef TCIFLUSH
- return TCIFLUSH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCIOFF"))
-#ifdef TCIOFF
- return TCIOFF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCIOFLUSH"))
-#ifdef TCIOFLUSH
- return TCIOFLUSH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCION"))
-#ifdef TCION
- return TCION;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCOFLUSH"))
-#ifdef TCOFLUSH
- return TCOFLUSH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCOOFF"))
-#ifdef TCOOFF
- return TCOOFF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCOON"))
-#ifdef TCOON
- return TCOON;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCSADRAIN"))
-#ifdef TCSADRAIN
- return TCSADRAIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCSAFLUSH"))
-#ifdef TCSAFLUSH
- return TCSAFLUSH;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCSANOW"))
-#ifdef TCSANOW
- return TCSANOW;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TMP_MAX"))
-#ifdef TMP_MAX
- return TMP_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TOSTOP"))
-#ifdef TOSTOP
- return TOSTOP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TZNAME_MAX"))
-#ifdef TZNAME_MAX
- return TZNAME_MAX;
-#else
- goto not_there;
-#endif
- break;
- case 'U':
- if (strEQ(name, "UCHAR_MAX"))
-#ifdef UCHAR_MAX
- return UCHAR_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "UINT_MAX"))
-#ifdef UINT_MAX
- return UINT_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "ULONG_MAX"))
-#ifdef ULONG_MAX
- return ULONG_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "USHRT_MAX"))
-#ifdef USHRT_MAX
- return USHRT_MAX;
-#else
- goto not_there;
-#endif
- break;
- case 'V':
- if (strEQ(name, "VEOF"))
-#ifdef VEOF
- return VEOF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VEOL"))
-#ifdef VEOL
- return VEOL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VERASE"))
-#ifdef VERASE
- return VERASE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VINTR"))
-#ifdef VINTR
- return VINTR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VKILL"))
-#ifdef VKILL
- return VKILL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VMIN"))
-#ifdef VMIN
- return VMIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VQUIT"))
-#ifdef VQUIT
- return VQUIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VSTART"))
-#ifdef VSTART
- return VSTART;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VSTOP"))
-#ifdef VSTOP
- return VSTOP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VSUSP"))
-#ifdef VSUSP
- return VSUSP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "VTIME"))
-#ifdef VTIME
- return VTIME;
-#else
- goto not_there;
-#endif
- break;
- case 'W':
- if (strEQ(name, "W_OK"))
-#ifdef W_OK
- return W_OK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "WNOHANG"))
-#ifdef WNOHANG
- return WNOHANG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "WUNTRACED"))
-#ifdef WUNTRACED
- return WUNTRACED;
-#else
- goto not_there;
-#endif
- errno = EAGAIN; /* the following aren't constants */
-#ifdef WEXITSTATUS
- if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg);
-#endif
-#ifdef WIFEXITED
- if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg);
-#endif
-#ifdef WIFSIGNALED
- if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg);
-#endif
-#ifdef WIFSTOPPED
- if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg);
-#endif
-#ifdef WSTOPSIG
- if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg);
-#endif
-#ifdef WTERMSIG
- if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg);
-#endif
- break;
- case 'X':
- if (strEQ(name, "X_OK"))
-#ifdef X_OK
- return X_OK;
-#else
- goto not_there;
-#endif
- break;
- case '_':
- if (strnEQ(name, "_PC_", 4)) {
- if (strEQ(name, "_PC_CHOWN_RESTRICTED"))
-#if defined(_PC_CHOWN_RESTRICTED) || HINT_SC_EXIST
- return _PC_CHOWN_RESTRICTED;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_PC_LINK_MAX"))
-#if defined(_PC_LINK_MAX) || HINT_SC_EXIST
- return _PC_LINK_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_PC_MAX_CANON"))
-#if defined(_PC_MAX_CANON) || HINT_SC_EXIST
- return _PC_MAX_CANON;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_PC_MAX_INPUT"))
-#if defined(_PC_MAX_INPUT) || HINT_SC_EXIST
- return _PC_MAX_INPUT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_PC_NAME_MAX"))
-#if defined(_PC_NAME_MAX) || HINT_SC_EXIST
- return _PC_NAME_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_PC_NO_TRUNC"))
-#if defined(_PC_NO_TRUNC) || HINT_SC_EXIST
- return _PC_NO_TRUNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_PC_PATH_MAX"))
-#if defined(_PC_PATH_MAX) || HINT_SC_EXIST
- return _PC_PATH_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_PC_PIPE_BUF"))
-#if defined(_PC_PIPE_BUF) || HINT_SC_EXIST
- return _PC_PIPE_BUF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_PC_VDISABLE"))
-#if defined(_PC_VDISABLE) || HINT_SC_EXIST
- return _PC_VDISABLE;
-#else
- goto not_there;
-#endif
- break;
- }
- if (strnEQ(name, "_POSIX_", 7)) {
- if (strEQ(name, "_POSIX_ARG_MAX"))
-#ifdef _POSIX_ARG_MAX
- return _POSIX_ARG_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_CHILD_MAX"))
-#ifdef _POSIX_CHILD_MAX
- return _POSIX_CHILD_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_CHOWN_RESTRICTED"))
-#ifdef _POSIX_CHOWN_RESTRICTED
- return _POSIX_CHOWN_RESTRICTED;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_JOB_CONTROL"))
-#ifdef _POSIX_JOB_CONTROL
- return _POSIX_JOB_CONTROL;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_LINK_MAX"))
-#ifdef _POSIX_LINK_MAX
- return _POSIX_LINK_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_MAX_CANON"))
-#ifdef _POSIX_MAX_CANON
- return _POSIX_MAX_CANON;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_MAX_INPUT"))
-#ifdef _POSIX_MAX_INPUT
- return _POSIX_MAX_INPUT;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_NAME_MAX"))
-#ifdef _POSIX_NAME_MAX
- return _POSIX_NAME_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_NGROUPS_MAX"))
-#ifdef _POSIX_NGROUPS_MAX
- return _POSIX_NGROUPS_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_NO_TRUNC"))
-#ifdef _POSIX_NO_TRUNC
- return _POSIX_NO_TRUNC;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_OPEN_MAX"))
-#ifdef _POSIX_OPEN_MAX
- return _POSIX_OPEN_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_PATH_MAX"))
-#ifdef _POSIX_PATH_MAX
- return _POSIX_PATH_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_PIPE_BUF"))
-#ifdef _POSIX_PIPE_BUF
- return _POSIX_PIPE_BUF;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_SAVED_IDS"))
-#ifdef _POSIX_SAVED_IDS
- return _POSIX_SAVED_IDS;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_SSIZE_MAX"))
-#ifdef _POSIX_SSIZE_MAX
- return _POSIX_SSIZE_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_STREAM_MAX"))
-#ifdef _POSIX_STREAM_MAX
- return _POSIX_STREAM_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_TZNAME_MAX"))
-#ifdef _POSIX_TZNAME_MAX
- return _POSIX_TZNAME_MAX;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_VDISABLE"))
-#ifdef _POSIX_VDISABLE
- return _POSIX_VDISABLE;
-#else
- return 0;
-#endif
- if (strEQ(name, "_POSIX_VERSION"))
-#ifdef _POSIX_VERSION
- return _POSIX_VERSION;
-#else
- return 0;
-#endif
- break;
- }
- if (strnEQ(name, "_SC_", 4)) {
- if (strEQ(name, "_SC_ARG_MAX"))
-#if defined(_SC_ARG_MAX) || HINT_SC_EXIST
- return _SC_ARG_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_CHILD_MAX"))
-#if defined(_SC_CHILD_MAX) || HINT_SC_EXIST
- return _SC_CHILD_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_CLK_TCK"))
-#if defined(_SC_CLK_TCK) || HINT_SC_EXIST
- return _SC_CLK_TCK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_JOB_CONTROL"))
-#if defined(_SC_JOB_CONTROL) || HINT_SC_EXIST
- return _SC_JOB_CONTROL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_NGROUPS_MAX"))
-#if defined(_SC_NGROUPS_MAX) || HINT_SC_EXIST
- return _SC_NGROUPS_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_OPEN_MAX"))
-#if defined(_SC_OPEN_MAX) || HINT_SC_EXIST
- return _SC_OPEN_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_SAVED_IDS"))
-#if defined(_SC_SAVED_IDS) || HINT_SC_EXIST
- return _SC_SAVED_IDS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_STREAM_MAX"))
-#if defined(_SC_STREAM_MAX) || HINT_SC_EXIST
- return _SC_STREAM_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_TZNAME_MAX"))
-#if defined(_SC_TZNAME_MAX) || HINT_SC_EXIST
- return _SC_TZNAME_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "_SC_VERSION"))
-#if defined(_SC_VERSION) || HINT_SC_EXIST
- return _SC_VERSION;
-#else
- goto not_there;
-#endif
- break;
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig
-
-POSIX::SigSet
-new(packname = "POSIX::SigSet", ...)
- char * packname
- CODE:
- {
- int i;
- New(0, RETVAL, 1, sigset_t);
- sigemptyset(RETVAL);
- for (i = 1; i < items; i++)
- sigaddset(RETVAL, SvIV(ST(i)));
- }
- OUTPUT:
- RETVAL
-
-void
-DESTROY(sigset)
- POSIX::SigSet sigset
- CODE:
- Safefree(sigset);
-
-SysRet
-sigaddset(sigset, sig)
- POSIX::SigSet sigset
- int sig
-
-SysRet
-sigdelset(sigset, sig)
- POSIX::SigSet sigset
- int sig
-
-SysRet
-sigemptyset(sigset)
- POSIX::SigSet sigset
-
-SysRet
-sigfillset(sigset)
- POSIX::SigSet sigset
-
-int
-sigismember(sigset, sig)
- POSIX::SigSet sigset
- int sig
-
-
-MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
-
-POSIX::Termios
-new(packname = "POSIX::Termios", ...)
- char * packname
- CODE:
- {
-#ifdef I_TERMIOS
- New(0, RETVAL, 1, struct termios);
-#else
- not_here("termios");
- RETVAL = 0;
-#endif
- }
- OUTPUT:
- RETVAL
-
-void
-DESTROY(termios_ref)
- POSIX::Termios termios_ref
- CODE:
-#ifdef I_TERMIOS
- Safefree(termios_ref);
-#else
- not_here("termios");
-#endif
-
-SysRet
-getattr(termios_ref, fd = 0)
- POSIX::Termios termios_ref
- int fd
- CODE:
- RETVAL = tcgetattr(fd, termios_ref);
- OUTPUT:
- RETVAL
-
-SysRet
-setattr(termios_ref, fd = 0, optional_actions = 0)
- POSIX::Termios termios_ref
- int fd
- int optional_actions
- CODE:
- RETVAL = tcsetattr(fd, optional_actions, termios_ref);
- OUTPUT:
- RETVAL
-
-speed_t
-cfgetispeed(termios_ref)
- POSIX::Termios termios_ref
-
-speed_t
-cfgetospeed(termios_ref)
- POSIX::Termios termios_ref
-
-tcflag_t
-getiflag(termios_ref)
- POSIX::Termios termios_ref
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- RETVAL = termios_ref->c_iflag;
-#else
- not_here("getiflag");
- RETVAL = 0;
-#endif
- OUTPUT:
- RETVAL
-
-tcflag_t
-getoflag(termios_ref)
- POSIX::Termios termios_ref
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- RETVAL = termios_ref->c_oflag;
-#else
- not_here("getoflag");
- RETVAL = 0;
-#endif
- OUTPUT:
- RETVAL
-
-tcflag_t
-getcflag(termios_ref)
- POSIX::Termios termios_ref
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- RETVAL = termios_ref->c_cflag;
-#else
- not_here("getcflag");
- RETVAL = 0;
-#endif
- OUTPUT:
- RETVAL
-
-tcflag_t
-getlflag(termios_ref)
- POSIX::Termios termios_ref
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- RETVAL = termios_ref->c_lflag;
-#else
- not_here("getlflag");
- RETVAL = 0;
-#endif
- OUTPUT:
- RETVAL
-
-cc_t
-getcc(termios_ref, ccix)
- POSIX::Termios termios_ref
- int ccix
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- if (ccix >= NCCS)
- croak("Bad getcc subscript");
- RETVAL = termios_ref->c_cc[ccix];
-#else
- not_here("getcc");
- RETVAL = 0;
-#endif
- OUTPUT:
- RETVAL
-
-SysRet
-cfsetispeed(termios_ref, speed)
- POSIX::Termios termios_ref
- speed_t speed
-
-SysRet
-cfsetospeed(termios_ref, speed)
- POSIX::Termios termios_ref
- speed_t speed
-
-void
-setiflag(termios_ref, iflag)
- POSIX::Termios termios_ref
- tcflag_t iflag
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- termios_ref->c_iflag = iflag;
-#else
- not_here("setiflag");
-#endif
-
-void
-setoflag(termios_ref, oflag)
- POSIX::Termios termios_ref
- tcflag_t oflag
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- termios_ref->c_oflag = oflag;
-#else
- not_here("setoflag");
-#endif
-
-void
-setcflag(termios_ref, cflag)
- POSIX::Termios termios_ref
- tcflag_t cflag
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- termios_ref->c_cflag = cflag;
-#else
- not_here("setcflag");
-#endif
-
-void
-setlflag(termios_ref, lflag)
- POSIX::Termios termios_ref
- tcflag_t lflag
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- termios_ref->c_lflag = lflag;
-#else
- not_here("setlflag");
-#endif
-
-void
-setcc(termios_ref, ccix, cc)
- POSIX::Termios termios_ref
- int ccix
- cc_t cc
- CODE:
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
- if (ccix >= NCCS)
- croak("Bad setcc subscript");
- termios_ref->c_cc[ccix] = cc;
-#else
- not_here("setcc");
-#endif
-
-
-MODULE = POSIX PACKAGE = POSIX
-
-NV
-constant(name,arg)
- char * name
- int arg
-
-int
-isalnum(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!isalnum(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-isalpha(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!isalpha(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-iscntrl(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!iscntrl(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-isdigit(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!isdigit(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-isgraph(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!isgraph(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-islower(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!islower(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-isprint(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!isprint(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-ispunct(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!ispunct(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-isspace(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!isspace(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-isupper(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!isupper(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-int
-isxdigit(charstring)
- unsigned char * charstring
- CODE:
- unsigned char *s = charstring;
- unsigned char *e = s + PL_na; /* "PL_na" set by typemap side effect */
- for (RETVAL = 1; RETVAL && s < e; s++)
- if (!isxdigit(*s))
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-SysRet
-open(filename, flags = O_RDONLY, mode = 0666)
- char * filename
- int flags
- Mode_t mode
- CODE:
- if (flags & (O_APPEND|O_CREAT|O_TRUNC|O_RDWR|O_WRONLY|O_EXCL))
- TAINT_PROPER("open");
- RETVAL = open(filename, flags, mode);
- OUTPUT:
- RETVAL
-
-
-HV *
-localeconv()
- CODE:
-#ifdef HAS_LOCALECONV
- struct lconv *lcbuf;
- RETVAL = newHV();
- if ((lcbuf = localeconv())) {
- /* the strings */
- if (lcbuf->decimal_point && *lcbuf->decimal_point)
- hv_store(RETVAL, "decimal_point", 13,
- newSVpv(lcbuf->decimal_point, 0), 0);
- if (lcbuf->thousands_sep && *lcbuf->thousands_sep)
- hv_store(RETVAL, "thousands_sep", 13,
- newSVpv(lcbuf->thousands_sep, 0), 0);
-#ifndef NO_LOCALECONV_GROUPING
- if (lcbuf->grouping && *lcbuf->grouping)
- hv_store(RETVAL, "grouping", 8,
- newSVpv(lcbuf->grouping, 0), 0);
-#endif
- if (lcbuf->int_curr_symbol && *lcbuf->int_curr_symbol)
- hv_store(RETVAL, "int_curr_symbol", 15,
- newSVpv(lcbuf->int_curr_symbol, 0), 0);
- if (lcbuf->currency_symbol && *lcbuf->currency_symbol)
- hv_store(RETVAL, "currency_symbol", 15,
- newSVpv(lcbuf->currency_symbol, 0), 0);
- if (lcbuf->mon_decimal_point && *lcbuf->mon_decimal_point)
- hv_store(RETVAL, "mon_decimal_point", 17,
- newSVpv(lcbuf->mon_decimal_point, 0), 0);
-#ifndef NO_LOCALECONV_MON_THOUSANDS_SEP
- if (lcbuf->mon_thousands_sep && *lcbuf->mon_thousands_sep)
- hv_store(RETVAL, "mon_thousands_sep", 17,
- newSVpv(lcbuf->mon_thousands_sep, 0), 0);
-#endif
-#ifndef NO_LOCALECONV_MON_GROUPING
- if (lcbuf->mon_grouping && *lcbuf->mon_grouping)
- hv_store(RETVAL, "mon_grouping", 12,
- newSVpv(lcbuf->mon_grouping, 0), 0);
-#endif
- if (lcbuf->positive_sign && *lcbuf->positive_sign)
- hv_store(RETVAL, "positive_sign", 13,
- newSVpv(lcbuf->positive_sign, 0), 0);
- if (lcbuf->negative_sign && *lcbuf->negative_sign)
- hv_store(RETVAL, "negative_sign", 13,
- newSVpv(lcbuf->negative_sign, 0), 0);
- /* the integers */
- if (lcbuf->int_frac_digits != CHAR_MAX)
- hv_store(RETVAL, "int_frac_digits", 15,
- newSViv(lcbuf->int_frac_digits), 0);
- if (lcbuf->frac_digits != CHAR_MAX)
- hv_store(RETVAL, "frac_digits", 11,
- newSViv(lcbuf->frac_digits), 0);
- if (lcbuf->p_cs_precedes != CHAR_MAX)
- hv_store(RETVAL, "p_cs_precedes", 13,
- newSViv(lcbuf->p_cs_precedes), 0);
- if (lcbuf->p_sep_by_space != CHAR_MAX)
- hv_store(RETVAL, "p_sep_by_space", 14,
- newSViv(lcbuf->p_sep_by_space), 0);
- if (lcbuf->n_cs_precedes != CHAR_MAX)
- hv_store(RETVAL, "n_cs_precedes", 13,
- newSViv(lcbuf->n_cs_precedes), 0);
- if (lcbuf->n_sep_by_space != CHAR_MAX)
- hv_store(RETVAL, "n_sep_by_space", 14,
- newSViv(lcbuf->n_sep_by_space), 0);
- if (lcbuf->p_sign_posn != CHAR_MAX)
- hv_store(RETVAL, "p_sign_posn", 11,
- newSViv(lcbuf->p_sign_posn), 0);
- if (lcbuf->n_sign_posn != CHAR_MAX)
- hv_store(RETVAL, "n_sign_posn", 11,
- newSViv(lcbuf->n_sign_posn), 0);
- }
-#else
- localeconv(); /* A stub to call not_here(). */
-#endif
- OUTPUT:
- RETVAL
-
-char *
-setlocale(category, locale = 0)
- int category
- char * locale
- CODE:
- RETVAL = setlocale(category, locale);
- if (RETVAL) {
-#ifdef USE_LOCALE_CTYPE
- if (category == LC_CTYPE
-#ifdef LC_ALL
- || category == LC_ALL
-#endif
- )
- {
- char *newctype;
-#ifdef LC_ALL
- if (category == LC_ALL)
- newctype = setlocale(LC_CTYPE, NULL);
- else
-#endif
- newctype = RETVAL;
- new_ctype(newctype);
- }
-#endif /* USE_LOCALE_CTYPE */
-#ifdef USE_LOCALE_COLLATE
- if (category == LC_COLLATE
-#ifdef LC_ALL
- || category == LC_ALL
-#endif
- )
- {
- char *newcoll;
-#ifdef LC_ALL
- if (category == LC_ALL)
- newcoll = setlocale(LC_COLLATE, NULL);
- else
-#endif
- newcoll = RETVAL;
- new_collate(newcoll);
- }
-#endif /* USE_LOCALE_COLLATE */
-#ifdef USE_LOCALE_NUMERIC
- if (category == LC_NUMERIC
-#ifdef LC_ALL
- || category == LC_ALL
-#endif
- )
- {
- char *newnum;
-#ifdef LC_ALL
- if (category == LC_ALL)
- newnum = setlocale(LC_NUMERIC, NULL);
- else
-#endif
- newnum = RETVAL;
- new_numeric(newnum);
- }
-#endif /* USE_LOCALE_NUMERIC */
- }
- OUTPUT:
- RETVAL
-
-
-NV
-acos(x)
- NV x
-
-NV
-asin(x)
- NV x
-
-NV
-atan(x)
- NV x
-
-NV
-ceil(x)
- NV x
-
-NV
-cosh(x)
- NV x
-
-NV
-floor(x)
- NV x
-
-NV
-fmod(x,y)
- NV x
- NV y
-
-void
-frexp(x)
- NV x
- PPCODE:
- int expvar;
- /* (We already know stack is long enough.) */
- PUSHs(sv_2mortal(newSVnv(frexp(x,&expvar))));
- PUSHs(sv_2mortal(newSViv(expvar)));
-
-NV
-ldexp(x,exp)
- NV x
- int exp
-
-NV
-log10(x)
- NV x
-
-void
-modf(x)
- NV x
- PPCODE:
- NV intvar;
- /* (We already know stack is long enough.) */
- PUSHs(sv_2mortal(newSVnv(Perl_modf(x,&intvar))));
- PUSHs(sv_2mortal(newSVnv(intvar)));
-
-NV
-sinh(x)
- NV x
-
-NV
-tan(x)
- NV x
-
-NV
-tanh(x)
- NV x
-
-SysRet
-sigaction(sig, action, oldaction = 0)
- int sig
- POSIX::SigAction action
- POSIX::SigAction oldaction
- CODE:
-#ifdef WIN32
- RETVAL = not_here("sigaction");
-#else
-# This code is really grody because we're trying to make the signal
-# interface look beautiful, which is hard.
-
- {
- GV *siggv = gv_fetchpv("SIG", TRUE, SVt_PVHV);
- struct sigaction act;
- struct sigaction oact;
- POSIX__SigSet sigset;
- SV** svp;
- SV** sigsvp = hv_fetch(GvHVn(siggv),
- PL_sig_name[sig],
- strlen(PL_sig_name[sig]),
- TRUE);
- STRLEN n_a;
-
- /* Remember old handler name if desired. */
- if (oldaction) {
- char *hand = SvPVx(*sigsvp, n_a);
- svp = hv_fetch(oldaction, "HANDLER", 7, TRUE);
- sv_setpv(*svp, *hand ? hand : "DEFAULT");
- }
-
- if (action) {
- /* Vector new handler through %SIG. (We always use sighandler
- for the C signal handler, which reads %SIG to dispatch.) */
- svp = hv_fetch(action, "HANDLER", 7, FALSE);
- if (!svp)
- croak("Can't supply an action without a HANDLER");
- sv_setpv(*sigsvp, SvPV(*svp, n_a));
- mg_set(*sigsvp); /* handles DEFAULT and IGNORE */
- act.sa_handler = PL_sighandlerp;
-
- /* Set up any desired mask. */
- svp = hv_fetch(action, "MASK", 4, FALSE);
- if (svp && sv_isa(*svp, "POSIX::SigSet")) {
- IV tmp = SvIV((SV*)SvRV(*svp));
- sigset = INT2PTR(sigset_t*, tmp);
- act.sa_mask = *sigset;
- }
- else
- sigemptyset(& act.sa_mask);
-
- /* Set up any desired flags. */
- svp = hv_fetch(action, "FLAGS", 5, FALSE);
- act.sa_flags = svp ? SvIV(*svp) : 0;
- }
-
- /* Now work around sigaction oddities */
- if (action && oldaction)
- RETVAL = sigaction(sig, & act, & oact);
- else if (action)
- RETVAL = sigaction(sig, & act, (struct sigaction *)0);
- else if (oldaction)
- RETVAL = sigaction(sig, (struct sigaction *)0, & oact);
- else
- RETVAL = -1;
-
- if (oldaction) {
- /* Get back the mask. */
- svp = hv_fetch(oldaction, "MASK", 4, TRUE);
- if (sv_isa(*svp, "POSIX::SigSet")) {
- IV tmp = SvIV((SV*)SvRV(*svp));
- sigset = INT2PTR(sigset_t*, tmp);
- }
- else {
- New(0, sigset, 1, sigset_t);
- sv_setptrobj(*svp, sigset, "POSIX::SigSet");
- }
- *sigset = oact.sa_mask;
-
- /* Get back the flags. */
- svp = hv_fetch(oldaction, "FLAGS", 5, TRUE);
- sv_setiv(*svp, oact.sa_flags);
- }
- }
-#endif
- OUTPUT:
- RETVAL
-
-SysRet
-sigpending(sigset)
- POSIX::SigSet sigset
-
-SysRet
-sigprocmask(how, sigset, oldsigset = 0)
- int how
- POSIX::SigSet sigset
- POSIX::SigSet oldsigset = NO_INIT
-INIT:
- if ( items < 3 ) {
- oldsigset = 0;
- }
- else if (sv_derived_from(ST(2), "POSIX::SigSet")) {
- IV tmp = SvIV((SV*)SvRV(ST(2)));
- oldsigset = INT2PTR(POSIX__SigSet,tmp);
- }
- else {
- New(0, oldsigset, 1, sigset_t);
- sigemptyset(oldsigset);
- sv_setref_pv(ST(2), "POSIX::SigSet", (void*)oldsigset);
- }
-
-SysRet
-sigsuspend(signal_mask)
- POSIX::SigSet signal_mask
-
-void
-_exit(status)
- int status
-
-SysRet
-close(fd)
- int fd
-
-SysRet
-dup(fd)
- int fd
-
-SysRet
-dup2(fd1, fd2)
- int fd1
- int fd2
-
-SysRetLong
-lseek(fd, offset, whence)
- int fd
- Off_t offset
- int whence
-
-SysRet
-nice(incr)
- int incr
-
-void
-pipe()
- PPCODE:
- int fds[2];
- if (pipe(fds) != -1) {
- EXTEND(SP,2);
- PUSHs(sv_2mortal(newSViv(fds[0])));
- PUSHs(sv_2mortal(newSViv(fds[1])));
- }
-
-SysRet
-read(fd, buffer, nbytes)
- PREINIT:
- SV *sv_buffer = SvROK(ST(1)) ? SvRV(ST(1)) : ST(1);
- INPUT:
- int fd
- size_t nbytes
- char * buffer = sv_grow( sv_buffer, nbytes+1 );
- CLEANUP:
- if (RETVAL >= 0) {
- SvCUR(sv_buffer) = RETVAL;
- SvPOK_only(sv_buffer);
- *SvEND(sv_buffer) = '\0';
- SvTAINTED_on(sv_buffer);
- }
-
-SysRet
-setpgid(pid, pgid)
- pid_t pid
- pid_t pgid
-
-pid_t
-setsid()
-
-pid_t
-tcgetpgrp(fd)
- int fd
-
-SysRet
-tcsetpgrp(fd, pgrp_id)
- int fd
- pid_t pgrp_id
-
-void
-uname()
- PPCODE:
-#ifdef HAS_UNAME
- struct utsname buf;
- if (uname(&buf) >= 0) {
- EXTEND(SP, 5);
- PUSHs(sv_2mortal(newSVpv(buf.sysname, 0)));
- PUSHs(sv_2mortal(newSVpv(buf.nodename, 0)));
- PUSHs(sv_2mortal(newSVpv(buf.release, 0)));
- PUSHs(sv_2mortal(newSVpv(buf.version, 0)));
- PUSHs(sv_2mortal(newSVpv(buf.machine, 0)));
- }
-#else
- uname((char *) 0); /* A stub to call not_here(). */
-#endif
-
-SysRet
-write(fd, buffer, nbytes)
- int fd
- char * buffer
- size_t nbytes
-
-SV *
-tmpnam()
- PREINIT:
- STRLEN i;
- int len;
- CODE:
- RETVAL = newSVpvn("", 0);
- SvGROW(RETVAL, L_tmpnam);
- len = strlen(tmpnam(SvPV(RETVAL, i)));
- SvCUR_set(RETVAL, len);
- OUTPUT:
- RETVAL
-
-void
-abort()
-
-int
-mblen(s, n)
- char * s
- size_t n
-
-size_t
-mbstowcs(s, pwcs, n)
- wchar_t * s
- char * pwcs
- size_t n
-
-int
-mbtowc(pwc, s, n)
- wchar_t * pwc
- char * s
- size_t n
-
-int
-wcstombs(s, pwcs, n)
- char * s
- wchar_t * pwcs
- size_t n
-
-int
-wctomb(s, wchar)
- char * s
- wchar_t wchar
-
-int
-strcoll(s1, s2)
- char * s1
- char * s2
-
-void
-strtod(str)
- char * str
- PREINIT:
- double num;
- char *unparsed;
- PPCODE:
- SET_NUMERIC_LOCAL();
- num = strtod(str, &unparsed);
- PUSHs(sv_2mortal(newSVnv(num)));
- if (GIMME == G_ARRAY) {
- EXTEND(SP, 1);
- if (unparsed)
- PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
- else
- PUSHs(&PL_sv_undef);
- }
-
-void
-strtol(str, base = 0)
- char * str
- int base
- PREINIT:
- long num;
- char *unparsed;
- PPCODE:
- num = strtol(str, &unparsed, base);
-#if IVSIZE <= LONGSIZE
- if (num < IV_MIN || num > IV_MAX)
- PUSHs(sv_2mortal(newSVnv((double)num)));
- else
-#endif
- PUSHs(sv_2mortal(newSViv((IV)num)));
- if (GIMME == G_ARRAY) {
- EXTEND(SP, 1);
- if (unparsed)
- PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
- else
- PUSHs(&PL_sv_undef);
- }
-
-void
-strtoul(str, base = 0)
- char * str
- int base
- PREINIT:
- unsigned long num;
- char *unparsed;
- PPCODE:
- num = strtoul(str, &unparsed, base);
- if (num <= IV_MAX)
- PUSHs(sv_2mortal(newSViv((IV)num)));
- else
- PUSHs(sv_2mortal(newSVnv((double)num)));
- if (GIMME == G_ARRAY) {
- EXTEND(SP, 1);
- if (unparsed)
- PUSHs(sv_2mortal(newSViv(strlen(unparsed))));
- else
- PUSHs(&PL_sv_undef);
- }
-
-void
-strxfrm(src)
- SV * src
- CODE:
- {
- STRLEN srclen;
- STRLEN dstlen;
- char *p = SvPV(src,srclen);
- srclen++;
- ST(0) = sv_2mortal(NEWSV(800,srclen));
- dstlen = strxfrm(SvPVX(ST(0)), p, (size_t)srclen);
- if (dstlen > srclen) {
- dstlen++;
- SvGROW(ST(0), dstlen);
- strxfrm(SvPVX(ST(0)), p, (size_t)dstlen);
- dstlen--;
- }
- SvCUR(ST(0)) = dstlen;
- SvPOK_only(ST(0));
- }
-
-SysRet
-mkfifo(filename, mode)
- char * filename
- Mode_t mode
- CODE:
- TAINT_PROPER("mkfifo");
- RETVAL = mkfifo(filename, mode);
- OUTPUT:
- RETVAL
-
-SysRet
-tcdrain(fd)
- int fd
-
-
-SysRet
-tcflow(fd, action)
- int fd
- int action
-
-
-SysRet
-tcflush(fd, queue_selector)
- int fd
- int queue_selector
-
-SysRet
-tcsendbreak(fd, duration)
- int fd
- int duration
-
-char *
-asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
- int sec
- int min
- int hour
- int mday
- int mon
- int year
- int wday
- int yday
- int isdst
- CODE:
- {
- struct tm mytm;
- init_tm(&mytm); /* XXX workaround - see init_tm() above */
- mytm.tm_sec = sec;
- mytm.tm_min = min;
- mytm.tm_hour = hour;
- mytm.tm_mday = mday;
- mytm.tm_mon = mon;
- mytm.tm_year = year;
- mytm.tm_wday = wday;
- mytm.tm_yday = yday;
- mytm.tm_isdst = isdst;
- RETVAL = asctime(&mytm);
- }
- OUTPUT:
- RETVAL
-
-long
-clock()
-
-char *
-ctime(time)
- Time_t &time
-
-void
-times()
- PPCODE:
- struct tms tms;
- clock_t realtime;
- realtime = times( &tms );
- EXTEND(SP,5);
- PUSHs( sv_2mortal( newSViv( (IV) realtime ) ) );
- PUSHs( sv_2mortal( newSViv( (IV) tms.tms_utime ) ) );
- PUSHs( sv_2mortal( newSViv( (IV) tms.tms_stime ) ) );
- PUSHs( sv_2mortal( newSViv( (IV) tms.tms_cutime ) ) );
- PUSHs( sv_2mortal( newSViv( (IV) tms.tms_cstime ) ) );
-
-double
-difftime(time1, time2)
- Time_t time1
- Time_t time2
-
-SysRetLong
-mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
- int sec
- int min
- int hour
- int mday
- int mon
- int year
- int wday
- int yday
- int isdst
- CODE:
- {
- struct tm mytm;
- init_tm(&mytm); /* XXX workaround - see init_tm() above */
- mytm.tm_sec = sec;
- mytm.tm_min = min;
- mytm.tm_hour = hour;
- mytm.tm_mday = mday;
- mytm.tm_mon = mon;
- mytm.tm_year = year;
- mytm.tm_wday = wday;
- mytm.tm_yday = yday;
- mytm.tm_isdst = isdst;
- RETVAL = mktime(&mytm);
- }
- OUTPUT:
- RETVAL
-
-#XXX: if $xsubpp::WantOptimize is always the default
-# sv_setpv(TARG, ...) could be used rather than
-# ST(0) = sv_2mortal(newSVpv(...))
-void
-strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
- char * fmt
- int sec
- int min
- int hour
- int mday
- int mon
- int year
- int wday
- int yday
- int isdst
- CODE:
- {
- char tmpbuf[128];
- struct tm mytm;
- int len;
-#ifdef __FreeBSD__
- long sgmtoff;
- int sisdst;
- char *szone;
-#endif
- init_tm(&mytm); /* XXX workaround - see init_tm() above */
- mytm.tm_sec = sec;
- mytm.tm_min = min;
- mytm.tm_hour = hour;
- mytm.tm_mday = mday;
- mytm.tm_mon = mon;
- mytm.tm_year = year;
- mytm.tm_wday = wday;
- mytm.tm_yday = yday;
- mytm.tm_isdst = isdst;
-#ifdef __FreeBSD__
- sgmtoff = mytm.tm_gmtoff;
- sisdst = mytm.tm_isdst;
- szone = mytm.tm_zone;
- /* to prevent mess with shifted hours/days/etc. */
- (void) timegm(&mytm);
- mytm.tm_gmtoff = sgmtoff;
- mytm.tm_isdst = sisdst;
- mytm.tm_zone = szone;
-#else
- mini_mktime(&mytm);
-#endif
- len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm);
- /*
- ** The following is needed to handle to the situation where
- ** tmpbuf overflows. Basically we want to allocate a buffer
- ** and try repeatedly. The reason why it is so complicated
- ** is that getting a return value of 0 from strftime can indicate
- ** one of the following:
- ** 1. buffer overflowed,
- ** 2. illegal conversion specifier, or
- ** 3. the format string specifies nothing to be returned(not
- ** an error). This could be because format is an empty string
- ** or it specifies %p that yields an empty string in some locale.
- ** If there is a better way to make it portable, go ahead by
- ** all means.
- */
- if ((len > 0 && len < sizeof(tmpbuf)) || (len == 0 && *fmt == '\0'))
- ST(0) = sv_2mortal(newSVpv(tmpbuf, len));
- else {
- /* Possibly buf overflowed - try again with a bigger buf */
- int fmtlen = strlen(fmt);
- int bufsize = fmtlen + sizeof(tmpbuf);
- char* buf;
- int buflen;
-
- New(0, buf, bufsize, char);
- while (buf) {
- buflen = strftime(buf, bufsize, fmt, &mytm);
- if (buflen > 0 && buflen < bufsize)
- break;
- /* heuristic to prevent out-of-memory errors */
- if (bufsize > 100*fmtlen) {
- Safefree(buf);
- buf = NULL;
- break;
- }
- bufsize *= 2;
- Renew(buf, bufsize, char);
- }
- if (buf) {
- ST(0) = sv_2mortal(newSVpvn(buf, buflen));
- Safefree(buf);
- }
- else
- ST(0) = sv_2mortal(newSVpvn(tmpbuf, len));
- }
- }
-
-void
-tzset()
-
-void
-tzname()
- PPCODE:
- EXTEND(SP,2);
- PUSHs(sv_2mortal(newSVpvn(tzname[0],strlen(tzname[0]))));
- PUSHs(sv_2mortal(newSVpvn(tzname[1],strlen(tzname[1]))));
-
-SysRet
-access(filename, mode)
- char * filename
- Mode_t mode
-
-char *
-ctermid(s = 0)
- char * s = 0;
-
-char *
-cuserid(s = 0)
- char * s = 0;
-
-SysRetLong
-fpathconf(fd, name)
- int fd
- int name
-
-SysRetLong
-pathconf(filename, name)
- char * filename
- int name
-
-SysRet
-pause()
-
-SysRetLong
-sysconf(name)
- int name
-
-char *
-ttyname(fd)
- int fd
diff --git a/contrib/perl5/ext/POSIX/hints/bsdos.pl b/contrib/perl5/ext/POSIX/hints/bsdos.pl
deleted file mode 100644
index 62732ac..0000000
--- a/contrib/perl5/ext/POSIX/hints/bsdos.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# BSD platforms have extra fields in struct tm that need to be initialized.
-# XXX A Configure test is needed.
-$self->{CCFLAGS} = $Config{ccflags} . ' -DSTRUCT_TM_HASZONE' ;
diff --git a/contrib/perl5/ext/POSIX/hints/dynixptx.pl b/contrib/perl5/ext/POSIX/hints/dynixptx.pl
deleted file mode 100644
index 9b63684..0000000
--- a/contrib/perl5/ext/POSIX/hints/dynixptx.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-# Need to add an extra '-lc' to the end to work around a DYNIX/ptx bug
-# PR#227670 - linker error on fpgetround()
-
-$self->{LIBS} = ['-ldb -lm -lc'];
diff --git a/contrib/perl5/ext/POSIX/hints/freebsd.pl b/contrib/perl5/ext/POSIX/hints/freebsd.pl
deleted file mode 100644
index 62732ac..0000000
--- a/contrib/perl5/ext/POSIX/hints/freebsd.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# BSD platforms have extra fields in struct tm that need to be initialized.
-# XXX A Configure test is needed.
-$self->{CCFLAGS} = $Config{ccflags} . ' -DSTRUCT_TM_HASZONE' ;
diff --git a/contrib/perl5/ext/POSIX/hints/linux.pl b/contrib/perl5/ext/POSIX/hints/linux.pl
deleted file mode 100644
index f1d1981..0000000
--- a/contrib/perl5/ext/POSIX/hints/linux.pl
+++ /dev/null
@@ -1,5 +0,0 @@
-# libc6, aka glibc2, seems to need STRUCT_TM_HASZONE defined.
-# Thanks to Bart Schuller <schuller@Lunatech.com>
-# See Message-ID: <19971009002636.50729@tanglefoot>
-# XXX A Configure test is needed.
-$self->{CCFLAGS} = $Config{ccflags} . ' -DSTRUCT_TM_HASZONE -DHINT_SC_EXIST' ;
diff --git a/contrib/perl5/ext/POSIX/hints/mint.pl b/contrib/perl5/ext/POSIX/hints/mint.pl
deleted file mode 100644
index b975cbb..0000000
--- a/contrib/perl5/ext/POSIX/hints/mint.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-$self->{CCFLAGS} = $Config{ccflags} . ' -DNO_LOCALECONV_GROUPING -DNO_LOCALECONV_MON_GROUPING';
-
diff --git a/contrib/perl5/ext/POSIX/hints/netbsd.pl b/contrib/perl5/ext/POSIX/hints/netbsd.pl
deleted file mode 100644
index 62732ac..0000000
--- a/contrib/perl5/ext/POSIX/hints/netbsd.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# BSD platforms have extra fields in struct tm that need to be initialized.
-# XXX A Configure test is needed.
-$self->{CCFLAGS} = $Config{ccflags} . ' -DSTRUCT_TM_HASZONE' ;
diff --git a/contrib/perl5/ext/POSIX/hints/next_3.pl b/contrib/perl5/ext/POSIX/hints/next_3.pl
deleted file mode 100644
index d907783..0000000
--- a/contrib/perl5/ext/POSIX/hints/next_3.pl
+++ /dev/null
@@ -1,5 +0,0 @@
-# NeXT *does* have setpgid when we use the -posix flag, but
-# doesn't when we don't. The main perl sources are compiled
-# without -posix, so the hints/next_3.sh hint file tells Configure
-# that d_setpgid=undef.
-$self->{CCFLAGS} = $Config{ccflags} . ' -posix -DHAS_SETPGID' ;
diff --git a/contrib/perl5/ext/POSIX/hints/openbsd.pl b/contrib/perl5/ext/POSIX/hints/openbsd.pl
deleted file mode 100644
index 62732ac..0000000
--- a/contrib/perl5/ext/POSIX/hints/openbsd.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# BSD platforms have extra fields in struct tm that need to be initialized.
-# XXX A Configure test is needed.
-$self->{CCFLAGS} = $Config{ccflags} . ' -DSTRUCT_TM_HASZONE' ;
diff --git a/contrib/perl5/ext/POSIX/hints/sunos_4.pl b/contrib/perl5/ext/POSIX/hints/sunos_4.pl
deleted file mode 100644
index 32b3558..0000000
--- a/contrib/perl5/ext/POSIX/hints/sunos_4.pl
+++ /dev/null
@@ -1,10 +0,0 @@
-# SunOS 4.1.3 has two extra fields in struct tm. This works around
-# the problem. Other BSD platforms may have similar problems.
-# This state of affairs also persists in glibc2, found
-# on linux systems running libc6.
-# XXX A Configure test is needed.
-
-# Although <unistd.h> is inappropriate in general for SunOS, we need it
-# in POSIX.xs to get the correct prototype for ttyname().
-
-$self->{CCFLAGS} = $Config{ccflags} . ' -DSTRUCT_TM_HASZONE -DI_UNISTD' ;
diff --git a/contrib/perl5/ext/POSIX/hints/svr4.pl b/contrib/perl5/ext/POSIX/hints/svr4.pl
deleted file mode 100644
index 07f2cb0..0000000
--- a/contrib/perl5/ext/POSIX/hints/svr4.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-# NCR MP-RAS. Thanks to Doug Hendricks for this info.
-# Configure sets osname=svr4.0, osvers=3.0, archname='3441-svr4.0'
-# This system needs to explicitly link against -lmw to pull in some
-# symbols such as _mwoflocheckl and possibly others.
-# A. Dougherty Thu Dec 7 11:55:28 EST 2000
-if ($Config{'archname'} =~ /3441-svr4/) {
- $self->{LIBS} = ['-lm -posix -lcposix -lmw'];
-}
-# Not sure what OS this one is.
-elsif ($Config{archname} =~ /RM\d\d\d-svr4/) {
- $self->{LIBS} = ['-lm -lc -lposix -lcposix'];
-}
diff --git a/contrib/perl5/ext/POSIX/typemap b/contrib/perl5/ext/POSIX/typemap
deleted file mode 100644
index baf9bfc..0000000
--- a/contrib/perl5/ext/POSIX/typemap
+++ /dev/null
@@ -1,15 +0,0 @@
-Mode_t T_NV
-pid_t T_NV
-Uid_t T_NV
-Time_t T_NV
-Gid_t T_NV
-Off_t T_NV
-Dev_t T_NV
-NV T_NV
-fd T_IV
-speed_t T_IV
-tcflag_t T_IV
-cc_t T_IV
-POSIX::SigSet T_PTROBJ
-POSIX::Termios T_PTROBJ
-POSIX::SigAction T_HVREF
diff --git a/contrib/perl5/ext/SDBM_File/Makefile.PL b/contrib/perl5/ext/SDBM_File/Makefile.PL
deleted file mode 100644
index a1debb9..0000000
--- a/contrib/perl5/ext/SDBM_File/Makefile.PL
+++ /dev/null
@@ -1,49 +0,0 @@
-use ExtUtils::MakeMaker;
-
-# The existence of the ./sdbm/Makefile.PL file causes MakeMaker
-# to automatically include Makefile code for the targets
-# config, all, clean, realclean and sdbm/Makefile
-# which perform the corresponding actions in the subdirectory.
-
-$define = ($^O eq 'MSWin32') ? '-DMSDOS' : '';
-if ($^O eq 'MSWin32') { $myextlib = 'sdbm\\libsdbm$(LIB_EXT)'; }
-else { $myextlib = 'sdbm/libsdbm$(LIB_EXT)'; }
-
-WriteMakefile(
- NAME => 'SDBM_File',
- MYEXTLIB => $myextlib,
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes', # XXX remove later?
- VERSION_FROM => 'SDBM_File.pm',
- DEFINE => $define,
- PERL_MALLOC_OK => 1,
- );
-
-sub MY::postamble {
- if ($^O =~ /MSWin32/ && Win32::IsWin95()) {
- # XXX: dmake-specific, like rest of Win95 port
- return
- '
-$(MYEXTLIB): sdbm/Makefile
-@[
- cd sdbm
- $(MAKE) all
- cd ..
-]
-';
- }
- elsif ($^O ne 'VMS') {
- '
-$(MYEXTLIB): sdbm/Makefile
- cd sdbm && $(MAKE) all
-';
- }
- else {
- '
-$(MYEXTLIB) : [.sdbm]descrip.mms
- set def [.sdbm]
- $(MMS) all
- set def [-]
-';
- }
-}
diff --git a/contrib/perl5/ext/SDBM_File/SDBM_File.pm b/contrib/perl5/ext/SDBM_File/SDBM_File.pm
deleted file mode 100644
index ee82a54..0000000
--- a/contrib/perl5/ext/SDBM_File/SDBM_File.pm
+++ /dev/null
@@ -1,116 +0,0 @@
-package SDBM_File;
-
-use strict;
-use warnings;
-
-require Tie::Hash;
-use XSLoader ();
-
-our @ISA = qw(Tie::Hash);
-our $VERSION = "1.03" ;
-
-XSLoader::load 'SDBM_File', $VERSION;
-
-1;
-
-__END__
-
-=head1 NAME
-
-SDBM_File - Tied access to sdbm files
-
-=head1 SYNOPSIS
-
- use Fcntl; # For O_RDWR, O_CREAT, etc.
- use SDBM_File;
-
- tie(%h, 'SDBM_File', 'filename', O_RDWR|O_CREAT, 0666)
- or die "Couldn't tie SDBM file 'filename': $!; aborting";
-
- # Now read and change the hash
- $h{newkey} = newvalue;
- print $h{oldkey};
- ...
-
- untie %h;
-
-=head1 DESCRIPTION
-
-C<SDBM_File> establishes a connection between a Perl hash variable and
-a file in SDBM_File format;. You can manipulate the data in the file
-just as if it were in a Perl hash, but when your program exits, the
-data will remain in the file, to be used the next time your program
-runs.
-
-Use C<SDBM_File> with the Perl built-in C<tie> function to establish
-the connection between the variable and the file. The arguments to
-C<tie> should be:
-
-=over 4
-
-=item 1.
-
-The hash variable you want to tie.
-
-=item 2.
-
-The string C<"SDBM_File">. (Ths tells Perl to use the C<SDBM_File>
-package to perform the functions of the hash.)
-
-=item 3.
-
-The name of the file you want to tie to the hash.
-
-=item 4.
-
-Flags. Use one of:
-
-=over 2
-
-=item C<O_RDONLY>
-
-Read-only access to the data in the file.
-
-=item C<O_WRONLY>
-
-Write-only access to the data in the file.
-
-=item C<O_RDWR>
-
-Both read and write access.
-
-=back
-
-If you want to create the file if it does not exist, add C<O_CREAT> to
-any of these, as in the example. If you omit C<O_CREAT> and the file
-does not already exist, the C<tie> call will fail.
-
-=item 5.
-
-The default permissions to use if a new file is created. The actual
-permissions will be modified by the user's umask, so you should
-probably use 0666 here. (See L<perlfunc/umask>.)
-
-=back
-
-=head1 DIAGNOSTICS
-
-On failure, the C<tie> call returns an undefined value and probably
-sets C<$!> to contain the reason the file could not be tied.
-
-=head2 C<sdbm store returned -1, errno 22, key "..." at ...>
-
-This warning is emmitted when you try to store a key or a value that
-is too long. It means that the change was not recorded in the
-database. See BUGS AND WARNINGS below.
-
-=head1 BUGS AND WARNINGS
-
-There are a number of limits on the size of the data that you can
-store in the SDBM file. The most important is that the length of a
-key, plus the length of its associated value, may not exceed 1008
-bytes.
-
-See L<perlfunc/tie>, L<perldbmfilter>, L<Fcntl>
-
-=cut
diff --git a/contrib/perl5/ext/SDBM_File/SDBM_File.xs b/contrib/perl5/ext/SDBM_File/SDBM_File.xs
deleted file mode 100644
index 859730b..0000000
--- a/contrib/perl5/ext/SDBM_File/SDBM_File.xs
+++ /dev/null
@@ -1,191 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-#include "sdbm/sdbm.h"
-
-typedef struct {
- DBM * dbp ;
- SV * filter_fetch_key ;
- SV * filter_store_key ;
- SV * filter_fetch_value ;
- SV * filter_store_value ;
- int filtering ;
- } SDBM_File_type;
-
-typedef SDBM_File_type * SDBM_File ;
-typedef datum datum_key ;
-typedef datum datum_value ;
-
-#define ckFilter(arg,type,name) \
- if (db->type) { \
- SV * save_defsv ; \
- /* printf("filtering %s\n", name) ;*/ \
- if (db->filtering) \
- croak("recursion detected in %s", name) ; \
- db->filtering = TRUE ; \
- save_defsv = newSVsv(DEFSV) ; \
- sv_setsv(DEFSV, arg) ; \
- PUSHMARK(sp) ; \
- (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \
- sv_setsv(arg, DEFSV) ; \
- sv_setsv(DEFSV, save_defsv) ; \
- SvREFCNT_dec(save_defsv) ; \
- db->filtering = FALSE ; \
- /*printf("end of filtering %s\n", name) ;*/ \
- }
-
-#define sdbm_TIEHASH(dbtype,filename,flags,mode) sdbm_open(filename,flags,mode)
-#define sdbm_FETCH(db,key) sdbm_fetch(db->dbp,key)
-#define sdbm_STORE(db,key,value,flags) sdbm_store(db->dbp,key,value,flags)
-#define sdbm_DELETE(db,key) sdbm_delete(db->dbp,key)
-#define sdbm_EXISTS(db,key) sdbm_exists(db->dbp,key)
-#define sdbm_FIRSTKEY(db) sdbm_firstkey(db->dbp)
-#define sdbm_NEXTKEY(db,key) sdbm_nextkey(db->dbp)
-
-
-MODULE = SDBM_File PACKAGE = SDBM_File PREFIX = sdbm_
-
-SDBM_File
-sdbm_TIEHASH(dbtype, filename, flags, mode)
- char * dbtype
- char * filename
- int flags
- int mode
- CODE:
- {
- DBM * dbp ;
-
- RETVAL = NULL ;
- if ((dbp = sdbm_open(filename,flags,mode))) {
- RETVAL = (SDBM_File)safemalloc(sizeof(SDBM_File_type)) ;
- Zero(RETVAL, 1, SDBM_File_type) ;
- RETVAL->dbp = dbp ;
- }
-
- }
- OUTPUT:
- RETVAL
-
-void
-sdbm_DESTROY(db)
- SDBM_File db
- CODE:
- sdbm_close(db->dbp);
- if (db->filter_fetch_key)
- SvREFCNT_dec(db->filter_fetch_key) ;
- if (db->filter_store_key)
- SvREFCNT_dec(db->filter_store_key) ;
- if (db->filter_fetch_value)
- SvREFCNT_dec(db->filter_fetch_value) ;
- if (db->filter_store_value)
- SvREFCNT_dec(db->filter_store_value) ;
- safefree(db) ;
-
-datum_value
-sdbm_FETCH(db, key)
- SDBM_File db
- datum_key key
-
-int
-sdbm_STORE(db, key, value, flags = DBM_REPLACE)
- SDBM_File db
- datum_key key
- datum_value value
- int flags
- CLEANUP:
- if (RETVAL) {
- if (RETVAL < 0 && errno == EPERM)
- croak("No write permission to sdbm file");
- croak("sdbm store returned %d, errno %d, key \"%s\"",
- RETVAL,errno,key.dptr);
- sdbm_clearerr(db->dbp);
- }
-
-int
-sdbm_DELETE(db, key)
- SDBM_File db
- datum_key key
-
-int
-sdbm_EXISTS(db,key)
- SDBM_File db
- datum_key key
-
-datum_key
-sdbm_FIRSTKEY(db)
- SDBM_File db
-
-datum_key
-sdbm_NEXTKEY(db, key)
- SDBM_File db
- datum_key key
-
-int
-sdbm_error(db)
- SDBM_File db
- CODE:
- RETVAL = sdbm_error(db->dbp) ;
- OUTPUT:
- RETVAL
-
-int
-sdbm_clearerr(db)
- SDBM_File db
- CODE:
- RETVAL = sdbm_clearerr(db->dbp) ;
- OUTPUT:
- RETVAL
-
-
-#define setFilter(type) \
- { \
- if (db->type) \
- RETVAL = sv_mortalcopy(db->type) ; \
- ST(0) = RETVAL ; \
- if (db->type && (code == &PL_sv_undef)) { \
- SvREFCNT_dec(db->type) ; \
- db->type = NULL ; \
- } \
- else if (code) { \
- if (db->type) \
- sv_setsv(db->type, code) ; \
- else \
- db->type = newSVsv(code) ; \
- } \
- }
-
-
-
-SV *
-filter_fetch_key(db, code)
- SDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_key) ;
-
-SV *
-filter_store_key(db, code)
- SDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_key) ;
-
-SV *
-filter_fetch_value(db, code)
- SDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_fetch_value) ;
-
-SV *
-filter_store_value(db, code)
- SDBM_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- setFilter(filter_store_value) ;
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/CHANGES b/contrib/perl5/ext/SDBM_File/sdbm/CHANGES
deleted file mode 100644
index f7296d1..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/CHANGES
+++ /dev/null
@@ -1,18 +0,0 @@
-Changes from the earlier BETA releases.
-
-o dbm_prep does everything now, so dbm_open is just a simple
- wrapper that builds the default filenames. dbm_prep no longer
- requires a (DBM *) db parameter: it allocates one itself. It
- returns (DBM *) db or (DBM *) NULL.
-
-o makroom is now reliable. In the common-case optimization of the page
- split, the page into which the incoming key/value pair is to be inserted
- is write-deferred (if the split is successful), thereby saving a cosly
- write. BUT, if the split does not make enough room (unsuccessful), the
- deferred page is written out, as the failure-window is now dependent on
- the number of split attempts.
-
-o if -DDUFF is defined, hash function will also use the DUFF construct.
- This may look like a micro-performance tweak (maybe it is), but in fact,
- the hash function is the third most-heavily used function, after read
- and write.
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/COMPARE b/contrib/perl5/ext/SDBM_File/sdbm/COMPARE
deleted file mode 100644
index a595e83..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/COMPARE
+++ /dev/null
@@ -1,88 +0,0 @@
-
-Script started on Thu Sep 28 15:41:06 1989
-% uname -a
-titan titan 4_0 UMIPS mips
-% make all x-dbm
- cc -O -DSDBM -DDUFF -DDUPERROR -DSPLITFAIL -c dbm.c
- cc -O -DSDBM -DDUFF -DDUPERROR -DSPLITFAIL -c sdbm.c
- cc -O -DSDBM -DDUFF -DDUPERROR -DSPLITFAIL -c pair.c
- cc -O -DSDBM -DDUFF -DDUPERROR -DSPLITFAIL -c hash.c
- ar cr libsdbm.a sdbm.o pair.o hash.o
- ranlib libsdbm.a
- cc -o dbm dbm.o libsdbm.a
- cc -O -DSDBM -DDUFF -DDUPERROR -DSPLITFAIL -c dba.c
- cc -o dba dba.o
- cc -O -DSDBM -DDUFF -DDUPERROR -DSPLITFAIL -c dbd.c
- cc -o dbd dbd.o
- cc -O -DSDBM -DDUFF -DDUPERROR -DSPLITFAIL -o x-dbm dbm.o
-%
-%
-% wc history
- 65110 218344 3204883 history
-%
-% /bin/time dbm build foo <history
-
-real 5:56.9
-user 13.3
-sys 26.3
-% ls -s
-total 14251
- 5 README 2 dbd.c 1 hash.c 1 pair.h
- 0 SCRIPT 5 dbd.o 1 hash.o 5 pair.o
- 1 WISHLIST 62 dbm 3130 history 1 port.h
- 46 dba 5 dbm.c 11 howtodbm.txt 11 sdbm.c
- 3 dba.c 8 dbm.o 14 libsdbm.a 2 sdbm.h
- 6 dba.o 4 foo.dir 1 makefile 8 sdbm.o
- 46 dbd 10810 foo.pag 6 pair.c 60 x-dbm
-% ls -l foo.*
--rw-r--r-- 1 oz 4096 Sep 28 15:48 foo.dir
--rw-r--r-- 1 oz 11069440 Sep 28 15:48 foo.pag
-%
-% /bin/time x-dbm build bar <history
-
-real 5:59.4
-user 24.7
-sys 29.1
-%
-% ls -s
-total 27612
- 5 README 46 dbd 1 hash.c 5 pair.o
- 1 SCRIPT 2 dbd.c 1 hash.o 1 port.h
- 1 WISHLIST 5 dbd.o 3130 history 11 sdbm.c
- 4 bar.dir 62 dbm 11 howtodbm.txt 2 sdbm.h
-13356 bar.pag 5 dbm.c 14 libsdbm.a 8 sdbm.o
- 46 dba 8 dbm.o 1 makefile 60 x-dbm
- 3 dba.c 4 foo.dir 6 pair.c
- 6 dba.o 10810 foo.pag 1 pair.h
-%
-% ls -l bar.*
--rw-r--r-- 1 oz 4096 Sep 28 15:54 bar.dir
--rw-r--r-- 1 oz 13676544 Sep 28 15:54 bar.pag
-%
-% dba foo | tail
-#10801: ok. no entries.
-#10802: ok. no entries.
-#10803: ok. no entries.
-#10804: ok. no entries.
-#10805: ok. no entries.
-#10806: ok. no entries.
-#10807: ok. no entries.
-#10808: ok. no entries.
-#10809: ok. 11 entries 67% used free 337.
-10810 pages (6036 holes): 65073 entries
-%
-% dba bar | tail
-#13347: ok. no entries.
-#13348: ok. no entries.
-#13349: ok. no entries.
-#13350: ok. no entries.
-#13351: ok. no entries.
-#13352: ok. no entries.
-#13353: ok. no entries.
-#13354: ok. no entries.
-#13355: ok. 7 entries 33% used free 676.
-13356 pages (8643 holes): 65073 entries
-%
-% exit
-script done on Thu Sep 28 16:08:45 1989
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/Makefile.PL b/contrib/perl5/ext/SDBM_File/sdbm/Makefile.PL
deleted file mode 100644
index 4453dea..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/Makefile.PL
+++ /dev/null
@@ -1,67 +0,0 @@
-use ExtUtils::MakeMaker;
-
-$define = '-DSDBM -DDUFF';
-$define .= ' -DWIN32 -DPERL_STATIC_SYMS' if ($^O eq 'MSWin32');
-
-if ($^O eq 'VMS') { # Old VAXC compiler can't handle Duff's device
- require Config;
- $define =~ s/\s+-DDUFF// if $Config::Config{'vms_cc_type'} eq 'vaxc';
-}
-
-WriteMakefile(
- NAME => 'sdbm', # (doesn't matter what the name is here) oh yes it does
-# LINKTYPE => 'static',
- DEFINE => $define,
- INC => '-I$(PERL_INC)', # force PERL_INC dir ahead of system -I's
- INST_ARCHLIB => '.',
- SKIP => [qw(dynamic dynamic_lib dlsyms)],
- OBJECT => '$(O_FILES)',
- clean => {'FILES' => 'dbu libsdbm.a dbd dba dbe x-dbu *.dir *.pag'},
- H => [qw(tune.h sdbm.h pair.h $(PERL_INC)/config.h)],
- C => [qw(sdbm.c pair.c hash.c)]
-);
-
-sub MY::constants {
- package MY;
- my $r = shift->SUPER::constants();
- if ($^O eq 'VMS') {
- $r =~ s/^INST_STATIC =.*$/INST_STATIC = libsdbm\$(LIB_EXT)/m
- }
- return $r;
-}
-
-sub MY::post_constants {
- package MY;
- if ($^O eq 'VMS') {
- shift->SUPER::post_constants();
- } else {
-'
-INST_STATIC = libsdbm$(LIB_EXT)
-'
- }
-}
-
-sub MY::top_targets {
- my $noecho = shift->{NOECHO};
-
- my $r = '
-all :: static
- ' . $noecho . '$(NOOP)
-
-config ::
- ' . $noecho . '$(NOOP)
-
-lint:
- lint -abchx $(LIBSRCS)
-
-';
- $r .= '
-# This is a workaround, the problem is that our old GNU make exports
-# variables into the environment so $(MYEXTLIB) is set in here to this
-# value which can not be built.
-sdbm/libsdbm.a:
- ' . $noecho . '$(NOOP)
-' unless $^O eq 'VMS';
-
- return $r;
-}
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/README b/contrib/perl5/ext/SDBM_File/sdbm/README
deleted file mode 100644
index cd7312c..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/README
+++ /dev/null
@@ -1,396 +0,0 @@
-
-
-
-
-
-
- sdbm - Substitute DBM
- or
- Berkeley ndbm for Every UN*X[1] Made Simple
-
- Ozan (oz) Yigit
-
- The Guild of PD Software Toolmakers
- Toronto - Canada
-
- oz@nexus.yorku.ca
-
-
-
-Implementation is the sincerest form of flattery. - L. Peter
-Deutsch
-
-A The Clone of the ndbm library
-
- The sources accompanying this notice - sdbm - consti-
-tute the first public release (Dec. 1990) of a complete
-clone of the Berkeley UN*X ndbm library. The sdbm library is
-meant to clone the proven functionality of ndbm as closely
-as possible, including a few improvements. It is practical,
-easy to understand, and compatible. The sdbm library is not
-derived from any licensed, proprietary or copyrighted
-software.
-
- The sdbm implementation is based on a 1978 algorithm
-[Lar78] by P.-A. (Paul) Larson known as ``Dynamic Hashing''.
-In the course of searching for a substitute for ndbm, I pro-
-totyped three different external-hashing algorithms [Lar78,
-Fag79, Lit80] and ultimately chose Larson's algorithm as a
-basis of the sdbm implementation. The Bell Labs dbm (and
-therefore ndbm) is based on an algorithm invented by Ken
-Thompson, [Tho90, Tor87] and predates Larson's work.
-
- The sdbm programming interface is totally compatible
-with ndbm and includes a slight improvement in database ini-
-tialization. It is also expected to be binary-compatible
-under most UN*X versions that support the ndbm library.
-
- The sdbm implementation shares the shortcomings of the
-ndbm library, as a side effect of various simplifications to
-the original Larson algorithm. It does produce holes in the
-page file as it writes pages past the end of file. (Larson's
-paper include a clever solution to this problem that is a
-result of using the hash value directly as a block address.)
-On the other hand, extensive tests seem to indicate that
-sdbm creates fewer holes in general, and the resulting page-
-files are smaller. The sdbm implementation is also faster
-than ndbm in database creation. Unlike the ndbm, the sdbm
-_________________________
-
- [1] UN*X is not a trademark of any (dis)organization.
-
-
-
-
-
-
-
-
-
- - 2 -
-
-
-store operation will not ``wander away'' trying to split its
-data pages to insert a datum that cannot (due to elaborate
-worst-case situations) be inserted. (It will fail after a
-pre-defined number of attempts.)
-
-Important Compatibility Warning
-
- The sdbm and ndbm libraries cannot share databases: one
-cannot read the (dir/pag) database created by the other.
-This is due to the differences between the ndbm and sdbm
-algorithms[2], and the hash functions used. It is easy to
-convert between the dbm/ndbm databases and sdbm by ignoring
-the index completely: see dbd, dbu etc.
-
-
-Notice of Intellectual Property
-
-The entire sdbm library package, as authored by me, Ozan S.
-Yigit, is hereby placed in the public domain. As such, 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. There is no expressed or implied warranty for
-the sdbm library.
-
- Since the sdbm library package is in the public domain,
-this original release or any additional public-domain
-releases of the modified original cannot possibly (by defin-
-ition) be withheld from you. Also by definition, You (singu-
-lar) have all the rights to this code (including the right
-to sell without permission, the right to hoard[3] and the
-right to do other icky things as you see fit) but those
-rights are also granted to everyone else.
-
- Please note that all previous distributions of this
-software contained a copyright (which is now dropped) to
-protect its origins and its current public domain status
-against any possible claims and/or challenges.
-
-Acknowledgments
-
- Many people have been very helpful and supportive. A
-partial list would necessarily include Rayan Zacherissen
-(who contributed the man page, and also hacked a MMAP
-_________________________
-
- [2] Torek's discussion [Tor87] indicates that
-dbm/ndbm implementations use the hash value to traverse
-the radix trie differently than sdbm and as a result,
-the page indexes are generated in different order. For
-more information, send e-mail to the author.
- [3] You cannot really hoard something that is avail-
-able to the public at large, but try if it makes you
-feel any better.
-
-
-
-
-
-
-
-
-
-
- - 3 -
-
-
-version of sdbm), Arnold Robbins, Chris Lewis, Bill David-
-sen, Henry Spencer, Geoff Collyer, Rich Salz (who got me
-started in the first place), Johannes Ruschein (who did the
-minix port) and David Tilbrook. I thank you all.
-
-Distribution Manifest and Notes
-
-This distribution of sdbm includes (at least) the following:
-
- CHANGES change log
- README this file.
- biblio a small bibliography on external hashing
- dba.c a crude (n/s)dbm page file analyzer
- dbd.c a crude (n/s)dbm page file dumper (for conversion)
- dbe.1 man page for dbe.c
- dbe.c Janick's database editor
- dbm.c a dbm library emulation wrapper for ndbm/sdbm
- dbm.h header file for the above
- dbu.c a crude db management utility
- hash.c hashing function
- makefile guess.
- pair.c page-level routines (posted earlier)
- pair.h header file for the above
- readme.ms troff source for the README file
- sdbm.3 man page
- sdbm.c the real thing
- sdbm.h header file for the above
- tune.h place for tuning & portability thingies
- util.c miscellaneous
-
- dbu is a simple database manipulation program[4] that
-tries to look like Bell Labs' cbt utility. It is currently
-incomplete in functionality. I use dbu to test out the rou-
-tines: it takes (from stdin) tab separated key/value pairs
-for commands like build or insert or takes keys for commands
-like delete or look.
-
- dbu <build|creat|look|insert|cat|delete> dbmfile
-
- dba is a crude analyzer of dbm/sdbm/ndbm page files. It
-scans the entire page file, reporting page level statistics,
-and totals at the end.
-
- dbd is a crude dump program for dbm/ndbm/sdbm data-
-bases. It ignores the bitmap, and dumps the data pages in
-sequence. It can be used to create input for the dbu util-
-ity. Note that dbd will skip any NULLs in the key and data
-fields, thus is unsuitable to convert some peculiar
-_________________________
-
- [4] The dbd, dba, dbu utilities are quick hacks and
-are not fit for production use. They were developed
-late one night, just to test out sdbm, and convert some
-databases.
-
-
-
-
-
-
-
-
-
- - 4 -
-
-
-databases that insist in including the terminating null.
-
- I have also included a copy of the dbe (ndbm DataBase
-Editor) by Janick Bergeron [janick@bnr.ca] for your pleas-
-ure. You may find it more useful than the little dbu util-
-ity.
-
- dbm.[ch] is a dbm library emulation on top of ndbm (and
-hence suitable for sdbm). Written by Robert Elz.
-
- The sdbm library has been around in beta test for quite
-a long time, and from whatever little feedback I received
-(maybe no news is good news), I believe it has been func-
-tioning without any significant problems. I would, of
-course, appreciate all fixes and/or improvements. Portabil-
-ity enhancements would especially be useful.
-
-Implementation Issues
-
- Hash functions: The algorithm behind sdbm implementa-
-tion needs a good bit-scrambling hash function to be effec-
-tive. I ran into a set of constants for a simple hash func-
-tion that seem to help sdbm perform better than ndbm for
-various inputs:
-
- /*
- * polynomial conversion ignoring overflows
- * 65599 nice. 65587 even better.
- */
- long
- dbm_hash(char *str, int len) {
- register unsigned long n = 0;
-
- while (len--)
- n = n * 65599 + *str++;
- return n;
- }
-
- There may be better hash functions for the purposes of
-dynamic hashing. Try your favorite, and check the pagefile.
-If it contains too many pages with too many holes, (in rela-
-tion to this one for example) or if sdbm simply stops work-
-ing (fails after SPLTMAX attempts to split) when you feed
-your NEWS history file to it, you probably do not have a
-good hashing function. If you do better (for different
-types of input), I would like to know about the function you
-use.
-
- Block sizes: It seems (from various tests on a few
-machines) that a page file block size PBLKSIZ of 1024 is by
-far the best for performance, but this also happens to limit
-the size of a key/value pair. Depending on your needs, you
-may wish to increase the page size, and also adjust PAIRMAX
-(the maximum size of a key/value pair allowed: should always
-
-
-
-
-
-
-
-
-
- - 5 -
-
-
-be at least three words smaller than PBLKSIZ.) accordingly.
-The system-wide version of the library should probably be
-configured with 1024 (distribution default), as this appears
-to be sufficient for most common uses of sdbm.
-
-Portability
-
- This package has been tested in many different UN*Xes
-even including minix, and appears to be reasonably portable.
-This does not mean it will port easily to non-UN*X systems.
-
-Notes and Miscellaneous
-
- The sdbm is not a very complicated package, at least
-not after you familiarize yourself with the literature on
-external hashing. There are other interesting algorithms in
-existence that ensure (approximately) single-read access to
-a data value associated with any key. These are directory-
-less schemes such as linear hashing [Lit80] (+ Larson varia-
-tions), spiral storage [Mar79] or directory schemes such as
-extensible hashing [Fag79] by Fagin et al. I do hope these
-sources provide a reasonable playground for experimentation
-with other algorithms. See the June 1988 issue of ACM Com-
-puting Surveys [Enb88] for an excellent overview of the
-field.
-
-References
-
-
-[Lar78]
- P.-A. Larson, ``Dynamic Hashing'', BIT, vol. 18, pp.
- 184-201, 1978.
-
-[Tho90]
- Ken Thompson, private communication, Nov. 1990
-
-[Lit80]
- W. Litwin, `` Linear Hashing: A new tool for file and
- table addressing'', Proceedings of the 6th Conference on
- Very Large Dabatases (Montreal), pp. 212-223, Very
- Large Database Foundation, Saratoga, Calif., 1980.
-
-[Fag79]
- R. Fagin, J. Nievergelt, N. Pippinger, and H. R.
- Strong, ``Extendible Hashing - A Fast Access Method for
- Dynamic Files'', ACM Trans. Database Syst., vol. 4,
- no.3, pp. 315-344, Sept. 1979.
-
-[Wal84]
- Rich Wales, ``Discussion of "dbm" data base system'',
- USENET newsgroup unix.wizards, Jan. 1984.
-
-[Tor87]
- Chris Torek, ``Re: dbm.a and ndbm.a archives'',
-
-
-
-
-
-
-
-
-
- - 6 -
-
-
- USENET newsgroup comp.unix, 1987.
-
-[Mar79]
- G. N. Martin, ``Spiral Storage: Incrementally Augment-
- able Hash Addressed Storage'', Technical Report #27,
- University of Varwick, Coventry, U.K., 1979.
-
-[Enb88]
- R. J. Enbody and H. C. Du, ``Dynamic Hashing
- Schemes'',ACM Computing Surveys, vol. 20, no. 2, pp.
- 85-113, June 1988.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/README.too b/contrib/perl5/ext/SDBM_File/sdbm/README.too
deleted file mode 100644
index 1fec315..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/README.too
+++ /dev/null
@@ -1,14 +0,0 @@
-This version of sdbm merely has all the dbm_* names translated to sdbm_*
-so that we can link ndbm and sdbm into the same executable. (It also has
-the bad() macro redefined to allow a zero-length key.)
-
-
-Fri Apr 15 10:15:30 EDT 1994.
-
-Additional portability/configuration changes for libsdbm by Andy Dougherty
-doughera@lafcol.lafayette.edu.
-
-
-Mon Mar 22 03:24:47 PST 1999.
-
-sdbm_exists added to the library by Russ Allbery <rra@stanford.edu>.
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/biblio b/contrib/perl5/ext/SDBM_File/sdbm/biblio
deleted file mode 100644
index 0be09fa..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/biblio
+++ /dev/null
@@ -1,64 +0,0 @@
-%A R. J. Enbody
-%A H. C. Du
-%T Dynamic Hashing Schemes
-%J ACM Computing Surveys
-%V 20
-%N 2
-%D June 1988
-%P 85-113
-%K surveys
-
-%A P.-A. Larson
-%T Dynamic Hashing
-%J BIT
-%V 18
-%P 184-201
-%D 1978
-%K dynamic
-
-%A W. Litwin
-%T Linear Hashing: A new tool for file and table addressing
-%J Proceedings of the 6th Conference on Very Large Dabatases (Montreal)
-%I Very Large Database Foundation
-%C Saratoga, Calif.
-%P 212-223
-%D 1980
-%K linear
-
-%A R. Fagin
-%A J. Nievergelt
-%A N. Pippinger
-%A H. R. Strong
-%T Extendible Hashing - A Fast Access Method for Dynamic Files
-%J ACM Trans. Database Syst.
-%V 4
-%N 3
-%D Sept. 1979
-%P 315-344
-%K extend
-
-%A G. N. Martin
-%T Spiral Storage: Incrementally Augmentable Hash Addressed Storage
-%J Technical Report #27
-%I University of Varwick
-%C Coventry, U.K.
-%D 1979
-%K spiral
-
-%A Chris Torek
-%T Re: dbm.a and ndbm.a archives
-%B USENET newsgroup comp.unix
-%D 1987
-%K torek
-
-%A Rich Wales
-%T Discusson of "dbm" data base system
-%B USENET newsgroup unix.wizards
-%D Jan. 1984
-%K rich
-
-
-
-
-
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/dba.c b/contrib/perl5/ext/SDBM_File/sdbm/dba.c
deleted file mode 100644
index 7406776..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/dba.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * dba dbm analysis/recovery
- */
-
-#include <stdio.h>
-#include <sys/file.h>
-#include "EXTERN.h"
-#include "sdbm.h"
-
-char *progname;
-extern void oops();
-
-int
-main(int argc, char **argv)
-{
- int n;
- char *p;
- char *name;
- int pagf;
-
- progname = argv[0];
-
- if (p = argv[1]) {
- name = (char *) malloc((n = strlen(p)) + 5);
- if (!name)
- oops("cannot get memory");
-
- strcpy(name, p);
- strcpy(name + n, ".pag");
-
- if ((pagf = open(name, O_RDONLY)) < 0)
- oops("cannot open %s.", name);
-
- sdump(pagf);
- }
- else
- oops("usage: %s dbname", progname);
-
- return 0;
-}
-
-void
-sdump(int pagf)
-{
- register b;
- register n = 0;
- register t = 0;
- register o = 0;
- register e;
- char pag[PBLKSIZ];
-
- while ((b = read(pagf, pag, PBLKSIZ)) > 0) {
- printf("#%d: ", n);
- if (!okpage(pag))
- printf("bad\n");
- else {
- printf("ok. ");
- if (!(e = pagestat(pag)))
- o++;
- else
- t += e;
- }
- n++;
- }
-
- if (b == 0)
- printf("%d pages (%d holes): %d entries\n", n, o, t);
- else
- oops("read failed: block %d", n);
-}
-
-int
-pagestat(char *pag)
-{
- register n;
- register free;
- register short *ino = (short *) pag;
-
- if (!(n = ino[0]))
- printf("no entries.\n");
- else {
- free = ino[n] - (n + 1) * sizeof(short);
- printf("%3d entries %2d%% used free %d.\n",
- n / 2, ((PBLKSIZ - free) * 100) / PBLKSIZ, free);
- }
- return n / 2;
-}
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/dbd.c b/contrib/perl5/ext/SDBM_File/sdbm/dbd.c
deleted file mode 100644
index 0a58d9a..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/dbd.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * dbd - dump a dbm data file
- */
-
-#include <stdio.h>
-#include <sys/file.h>
-#include "EXTERN.h"
-#include "sdbm.h"
-
-char *progname;
-extern void oops();
-
-
-#define empty(page) (((short *) page)[0] == 0)
-
-int
-main(int argc, char **argv)
-{
- int n;
- char *p;
- char *name;
- int pagf;
-
- progname = argv[0];
-
- if (p = argv[1]) {
- name = (char *) malloc((n = strlen(p)) + 5);
- if (!name)
- oops("cannot get memory");
-
- strcpy(name, p);
- strcpy(name + n, ".pag");
-
- if ((pagf = open(name, O_RDONLY)) < 0)
- oops("cannot open %s.", name);
-
- sdump(pagf);
- }
- else
- oops("usage: %s dbname", progname);
- return 0;
-}
-
-void
-sdump(int pagf)
-{
- register r;
- register n = 0;
- register o = 0;
- char pag[PBLKSIZ];
-
- while ((r = read(pagf, pag, PBLKSIZ)) > 0) {
- if (!okpage(pag))
- fprintf(stderr, "%d: bad page.\n", n);
- else if (empty(pag))
- o++;
- else
- dispage(pag);
- n++;
- }
-
- if (r == 0)
- fprintf(stderr, "%d pages (%d holes).\n", n, o);
- else
- oops("read failed: block %d", n);
-}
-
-
-#ifdef OLD
-int
-dispage(char *pag)
-{
- register i, n;
- register off;
- register short *ino = (short *) pag;
-
- off = PBLKSIZ;
- for (i = 1; i < ino[0]; i += 2) {
- printf("\t[%d]: ", ino[i]);
- for (n = ino[i]; n < off; n++)
- putchar(pag[n]);
- putchar(' ');
- off = ino[i];
- printf("[%d]: ", ino[i + 1]);
- for (n = ino[i + 1]; n < off; n++)
- putchar(pag[n]);
- off = ino[i + 1];
- putchar('\n');
- }
-}
-#else
-void
-dispage(char *pag)
-{
- register i, n;
- register off;
- register short *ino = (short *) pag;
-
- off = PBLKSIZ;
- for (i = 1; i < ino[0]; i += 2) {
- for (n = ino[i]; n < off; n++)
- if (pag[n] != 0)
- putchar(pag[n]);
- putchar('\t');
- off = ino[i];
- for (n = ino[i + 1]; n < off; n++)
- if (pag[n] != 0)
- putchar(pag[n]);
- putchar('\n');
- off = ino[i + 1];
- }
-}
-#endif
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/dbe.1 b/contrib/perl5/ext/SDBM_File/sdbm/dbe.1
deleted file mode 100644
index 3b32272..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/dbe.1
+++ /dev/null
@@ -1,46 +0,0 @@
-.TH dbe 1 "ndbm(3) EDITOR"
-.SH NAME
-dbe \- Edit a ndbm(3) database
-.SH USAGE
-dbe <database> [-m r|w|rw] [-crtvx] -a|-d|-f|-F|-s [<key> [<content>]]
-.SH DESCRIPTION
-\fIdbme\fP operates on ndbm(3) databases.
-It can be used to create them, look at them or change them.
-When specifying the value of a key or the content of its associated entry,
-\\nnn, \\0, \\n, \\t, \\f and \\r are interpreted as usual.
-When displaying key/content pairs, non-printable characters are displayed
-using the \\nnn notation.
-.SH OPTIONS
-.IP -a
-List all entries in the database.
-.IP -c
-Create the database if it does not exist.
-.IP -d
-Delete the entry associated with the specified key.
-.IP -f
-Fetch and display the entry associated with the specified key.
-.IP -F
-Fetch and display all the entries whose key match the specified
-regular-expression
-.IP "-m r|w|rw"
-Open the database in read-only, write-only or read-write mode
-.IP -r
-Replace the entry associated with the specified key if it already exists.
-See option -s.
-.IP -s
-Store an entry under a specific key.
-An error occurs if the key already exists and the option -r was not specified.
-.IP -t
-Re-initialize the database before executing the command.
-.IP -v
-Verbose mode.
-Confirm stores and deletions.
-.IP -x
-If option -x is used with option -c, then if the database already exists,
-an error occurs.
-This can be used to implement a simple exclusive access locking mechanism.
-.SH SEE ALSO
-ndbm(3)
-.SH AUTHOR
-janick@bnr.ca
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/dbe.c b/contrib/perl5/ext/SDBM_File/sdbm/dbe.c
deleted file mode 100644
index 166e64e..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/dbe.c
+++ /dev/null
@@ -1,435 +0,0 @@
-#include <stdio.h>
-#ifndef VMS
-#include <sys/file.h>
-#include <ndbm.h>
-#else
-#include "file.h"
-#include "ndbm.h"
-#endif
-#include <ctype.h>
-
-/***************************************************************************\
-** **
-** Function name: getopt() **
-** Author: Henry Spencer, UofT **
-** Coding date: 84/04/28 **
-** **
-** Description: **
-** **
-** Parses argv[] for arguments. **
-** Works with Whitesmith's C compiler. **
-** **
-** Inputs - The number of arguments **
-** - The base address of the array of arguments **
-** - A string listing the valid options (':' indicates an **
-** argument to the preceding option is required, a ';' **
-** indicates an argument to the preceding option is optional) **
-** **
-** Outputs - Returns the next option character, **
-** '?' for non '-' arguments **
-** or ':' when there is no more arguments. **
-** **
-** Side Effects + The argument to an option is pointed to by 'optarg' **
-** **
-*****************************************************************************
-** **
-** REVISION HISTORY: **
-** **
-** DATE NAME DESCRIPTION **
-** YY/MM/DD ------------------ ------------------------------------ **
-** 88/10/20 Janick Bergeron Returns '?' on unamed arguments **
-** returns '!' on unknown options **
-** and 'EOF' only when exhausted. **
-** 88/11/18 Janick Bergeron Return ':' when no more arguments **
-** 89/08/11 Janick Bergeron Optional optarg when ';' in optstring **
-** **
-\***************************************************************************/
-
-char *optarg; /* Global argument pointer. */
-
-#ifdef VMS
-#define index strchr
-#endif
-
-char
-getopt(int argc, char **argv, char *optstring)
-{
- register int c;
- register char *place;
- extern char *index();
- static int optind = 0;
- static char *scan = NULL;
-
- optarg = NULL;
-
- if (scan == NULL || *scan == '\0') {
-
- if (optind == 0)
- optind++;
- if (optind >= argc)
- return ':';
-
- optarg = place = argv[optind++];
- if (place[0] != '-' || place[1] == '\0')
- return '?';
- if (place[1] == '-' && place[2] == '\0')
- return '?';
- scan = place + 1;
- }
-
- c = *scan++;
- place = index(optstring, c);
- if (place == NULL || c == ':' || c == ';') {
-
- (void) fprintf(stderr, "%s: unknown option %c\n", argv[0], c);
- scan = NULL;
- return '!';
- }
- if (*++place == ':') {
-
- if (*scan != '\0') {
-
- optarg = scan;
- scan = NULL;
-
- }
- else {
-
- if (optind >= argc) {
-
- (void) fprintf(stderr, "%s: %c requires an argument\n",
- argv[0], c);
- return '!';
- }
- optarg = argv[optind];
- optind++;
- }
- }
- else if (*place == ';') {
-
- if (*scan != '\0') {
-
- optarg = scan;
- scan = NULL;
-
- }
- else {
-
- if (optind >= argc || *argv[optind] == '-')
- optarg = NULL;
- else {
- optarg = argv[optind];
- optind++;
- }
- }
- }
- return c;
-}
-
-
-void
-print_datum(datum db)
-{
- int i;
-
- putchar('"');
- for (i = 0; i < db.dsize; i++) {
- if (isprint((unsigned char)db.dptr[i]))
- putchar(db.dptr[i]);
- else {
- putchar('\\');
- putchar('0' + ((db.dptr[i] >> 6) & 0x07));
- putchar('0' + ((db.dptr[i] >> 3) & 0x07));
- putchar('0' + (db.dptr[i] & 0x07));
- }
- }
- putchar('"');
-}
-
-
-datum
-read_datum(char *s)
-{
- datum db;
- char *p;
- int i;
-
- db.dsize = 0;
- db.dptr = (char *) malloc(strlen(s) * sizeof(char));
- if (!db.dptr)
- oops("cannot get memory");
-
- for (p = db.dptr; *s != '\0'; p++, db.dsize++, s++) {
- if (*s == '\\') {
- if (*++s == 'n')
- *p = '\n';
- else if (*s == 'r')
- *p = '\r';
- else if (*s == 'f')
- *p = '\f';
- else if (*s == 't')
- *p = '\t';
- else if (isdigit((unsigned char)*s)
- && isdigit((unsigned char)*(s + 1))
- && isdigit((unsigned char)*(s + 2)))
- {
- i = (*s++ - '0') << 6;
- i |= (*s++ - '0') << 3;
- i |= *s - '0';
- *p = i;
- }
- else if (*s == '0')
- *p = '\0';
- else
- *p = *s;
- }
- else
- *p = *s;
- }
-
- return db;
-}
-
-
-char *
-key2s(datum db)
-{
- char *buf;
- char *p1, *p2;
-
- buf = (char *) malloc((db.dsize + 1) * sizeof(char));
- if (!buf)
- oops("cannot get memory");
- for (p1 = buf, p2 = db.dptr; *p2 != '\0'; *p1++ = *p2++);
- *p1 = '\0';
- return buf;
-}
-
-int
-main(int argc, char **argv)
-{
- typedef enum {
- YOW, FETCH, STORE, DELETE, SCAN, REGEXP
- } commands;
- char opt;
- int flags;
- int giveusage = 0;
- int verbose = 0;
- commands what = YOW;
- char *comarg[3];
- int st_flag = DBM_INSERT;
- int argn;
- DBM *db;
- datum key;
- datum content;
-
- flags = O_RDWR;
- argn = 0;
-
- while ((opt = getopt(argc, argv, "acdfFm:rstvx")) != ':') {
- switch (opt) {
- case 'a':
- what = SCAN;
- break;
- case 'c':
- flags |= O_CREAT;
- break;
- case 'd':
- what = DELETE;
- break;
- case 'f':
- what = FETCH;
- break;
- case 'F':
- what = REGEXP;
- break;
- case 'm':
- flags &= ~(000007);
- if (strcmp(optarg, "r") == 0)
- flags |= O_RDONLY;
- else if (strcmp(optarg, "w") == 0)
- flags |= O_WRONLY;
- else if (strcmp(optarg, "rw") == 0)
- flags |= O_RDWR;
- else {
- fprintf(stderr, "Invalid mode: \"%s\"\n", optarg);
- giveusage = 1;
- }
- break;
- case 'r':
- st_flag = DBM_REPLACE;
- break;
- case 's':
- what = STORE;
- break;
- case 't':
- flags |= O_TRUNC;
- break;
- case 'v':
- verbose = 1;
- break;
- case 'x':
- flags |= O_EXCL;
- break;
- case '!':
- giveusage = 1;
- break;
- case '?':
- if (argn < 3)
- comarg[argn++] = optarg;
- else {
- fprintf(stderr, "Too many arguments.\n");
- giveusage = 1;
- }
- break;
- }
- }
-
- if (giveusage || what == YOW || argn < 1) {
- fprintf(stderr, "Usage: %s databse [-m r|w|rw] [-crtx] -a|-d|-f|-F|-s [key [content]]\n", argv[0]);
- exit(-1);
- }
-
- if ((db = dbm_open(comarg[0], flags, 0777)) == NULL) {
- fprintf(stderr, "Error opening database \"%s\"\n", comarg[0]);
- exit(-1);
- }
-
- if (argn > 1)
- key = read_datum(comarg[1]);
- if (argn > 2)
- content = read_datum(comarg[2]);
-
- switch (what) {
-
- case SCAN:
- key = dbm_firstkey(db);
- if (dbm_error(db)) {
- fprintf(stderr, "Error when fetching first key\n");
- goto db_exit;
- }
- while (key.dptr != NULL) {
- content = dbm_fetch(db, key);
- if (dbm_error(db)) {
- fprintf(stderr, "Error when fetching ");
- print_datum(key);
- printf("\n");
- goto db_exit;
- }
- print_datum(key);
- printf(": ");
- print_datum(content);
- printf("\n");
- if (dbm_error(db)) {
- fprintf(stderr, "Error when fetching next key\n");
- goto db_exit;
- }
- key = dbm_nextkey(db);
- }
- break;
-
- case REGEXP:
- if (argn < 2) {
- fprintf(stderr, "Missing regular expression.\n");
- goto db_exit;
- }
- if (re_comp(comarg[1])) {
- fprintf(stderr, "Invalid regular expression\n");
- goto db_exit;
- }
- key = dbm_firstkey(db);
- if (dbm_error(db)) {
- fprintf(stderr, "Error when fetching first key\n");
- goto db_exit;
- }
- while (key.dptr != NULL) {
- if (re_exec(key2s(key))) {
- content = dbm_fetch(db, key);
- if (dbm_error(db)) {
- fprintf(stderr, "Error when fetching ");
- print_datum(key);
- printf("\n");
- goto db_exit;
- }
- print_datum(key);
- printf(": ");
- print_datum(content);
- printf("\n");
- if (dbm_error(db)) {
- fprintf(stderr, "Error when fetching next key\n");
- goto db_exit;
- }
- }
- key = dbm_nextkey(db);
- }
- break;
-
- case FETCH:
- if (argn < 2) {
- fprintf(stderr, "Missing fetch key.\n");
- goto db_exit;
- }
- content = dbm_fetch(db, key);
- if (dbm_error(db)) {
- fprintf(stderr, "Error when fetching ");
- print_datum(key);
- printf("\n");
- goto db_exit;
- }
- if (content.dptr == NULL) {
- fprintf(stderr, "Cannot find ");
- print_datum(key);
- printf("\n");
- goto db_exit;
- }
- print_datum(key);
- printf(": ");
- print_datum(content);
- printf("\n");
- break;
-
- case DELETE:
- if (argn < 2) {
- fprintf(stderr, "Missing delete key.\n");
- goto db_exit;
- }
- if (dbm_delete(db, key) || dbm_error(db)) {
- fprintf(stderr, "Error when deleting ");
- print_datum(key);
- printf("\n");
- goto db_exit;
- }
- if (verbose) {
- print_datum(key);
- printf(": DELETED\n");
- }
- break;
-
- case STORE:
- if (argn < 3) {
- fprintf(stderr, "Missing key and/or content.\n");
- goto db_exit;
- }
- if (dbm_store(db, key, content, st_flag) || dbm_error(db)) {
- fprintf(stderr, "Error when storing ");
- print_datum(key);
- printf("\n");
- goto db_exit;
- }
- if (verbose) {
- print_datum(key);
- printf(": ");
- print_datum(content);
- printf(" STORED\n");
- }
- break;
- }
-
-db_exit:
- dbm_clearerr(db);
- dbm_close(db);
- if (dbm_error(db)) {
- fprintf(stderr, "Error closing database \"%s\"\n", comarg[0]);
- exit(-1);
- }
-}
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/dbm.c b/contrib/perl5/ext/SDBM_File/sdbm/dbm.c
deleted file mode 100644
index 321ac3e..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/dbm.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 1985 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this notice are
- * duplicated in all such forms.
- *
- * [additional clause stricken -- see below]
- *
- * The name of the University may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- *
- * This notice previously contained the additional clause:
- *
- * and that any documentation, advertising materials, and other
- * materials related to such distribution and use acknowledge that
- * the software was developed by the University of California,
- * Berkeley.
- *
- * Pursuant to the licensing change made by the Office of Technology
- * Licensing of the University of California, Berkeley on July 22,
- * 1999 and documented in:
- *
- * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
- *
- * this clause has been stricken and no longer is applicable to this
- * software.
- */
-
-#ifndef lint
-static char sccsid[] = "@(#)dbm.c 5.4 (Berkeley) 5/24/89";
-#endif /* not lint */
-
-#include "dbm.h"
-
-#define NODB ((DBM *)0)
-
-static DBM *cur_db = NODB;
-
-static char no_db[] = "dbm: no open database\n";
-
-int
-dbminit(char *file)
-{
- if (cur_db != NODB)
- dbm_close(cur_db);
-
- cur_db = dbm_open(file, 2, 0);
- if (cur_db == NODB) {
- cur_db = dbm_open(file, 0, 0);
- if (cur_db == NODB)
- return (-1);
- }
- return (0);
-}
-
-long
-forder(datum key)
-{
- if (cur_db == NODB) {
- printf(no_db);
- return (0L);
- }
- return (dbm_forder(cur_db, key));
-}
-
-datum
-fetch(datum key)
-{
- datum item;
-
- if (cur_db == NODB) {
- printf(no_db);
- item.dptr = 0;
- return (item);
- }
- return (dbm_fetch(cur_db, key));
-}
-
-int
-delete(datum key)
-{
- if (cur_db == NODB) {
- printf(no_db);
- return (-1);
- }
- if (dbm_rdonly(cur_db))
- return (-1);
- return (dbm_delete(cur_db, key));
-}
-
-int
-store(datum key, datum dat)
-{
- if (cur_db == NODB) {
- printf(no_db);
- return (-1);
- }
- if (dbm_rdonly(cur_db))
- return (-1);
-
- return (dbm_store(cur_db, key, dat, DBM_REPLACE));
-}
-
-datum
-firstkey(void)
-{
- datum item;
-
- if (cur_db == NODB) {
- printf(no_db);
- item.dptr = 0;
- return (item);
- }
- return (dbm_firstkey(cur_db));
-}
-
-datum
-nextkey(datum key)
-{
- datum item;
-
- if (cur_db == NODB) {
- printf(no_db);
- item.dptr = 0;
- return (item);
- }
- return (dbm_nextkey(cur_db, key));
-}
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/dbm.h b/contrib/perl5/ext/SDBM_File/sdbm/dbm.h
deleted file mode 100644
index e2c9355..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/dbm.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1983 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this notice are
- * duplicated in all such forms.
- *
- * [additional clause stricken -- see below]
- *
- * The name of the University may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
- *
- * This notice previously contained the additional clause:
- *
- * and that any documentation, advertising materials, and other
- * materials related to such distribution and use acknowledge that
- * the software was developed by the University of California,
- * Berkeley.
- *
- * Pursuant to the licensing change made by the Office of Technology
- * Licensing of the University of California, Berkeley on July 22,
- * 1999 and documented in:
- *
- * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
- *
- * this clause has been stricken and no longer is applicable to this
- * software.
- *
- * @(#)dbm.h 5.2 (Berkeley) 5/24/89
- */
-
-#ifndef NULL
-/*
- * this is lunacy, we no longer use it (and never should have
- * unconditionally defined it), but, this whole file is for
- * backwards compatability - someone may rely on this.
- */
-#define NULL ((char *) 0)
-#endif
-
-#ifdef I_NDBM
-# include <ndbm.h>
-#endif
-
-datum fetch();
-datum firstkey();
-datum nextkey();
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/dbu.c b/contrib/perl5/ext/SDBM_File/sdbm/dbu.c
deleted file mode 100644
index e68b78d..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/dbu.c
+++ /dev/null
@@ -1,243 +0,0 @@
-#include <stdio.h>
-#include <sys/file.h>
-#ifdef SDBM
-#include "EXTERN.h"
-#include "sdbm.h"
-#else
-#include <ndbm.h>
-#endif
-#include <string.h>
-
-#ifdef BSD42
-#define strchr index
-#endif
-
-extern int getopt();
-extern char *strchr();
-extern void oops();
-
-char *progname;
-
-static int rflag;
-static char *usage = "%s [-R] cat | look |... dbmname";
-
-#define DERROR 0
-#define DLOOK 1
-#define DINSERT 2
-#define DDELETE 3
-#define DCAT 4
-#define DBUILD 5
-#define DPRESS 6
-#define DCREAT 7
-
-#define LINEMAX 8192
-
-typedef struct {
- char *sname;
- int scode;
- int flags;
-} cmd;
-
-static cmd cmds[] = {
-
- "fetch", DLOOK, O_RDONLY,
- "get", DLOOK, O_RDONLY,
- "look", DLOOK, O_RDONLY,
- "add", DINSERT, O_RDWR,
- "insert", DINSERT, O_RDWR,
- "store", DINSERT, O_RDWR,
- "delete", DDELETE, O_RDWR,
- "remove", DDELETE, O_RDWR,
- "dump", DCAT, O_RDONLY,
- "list", DCAT, O_RDONLY,
- "cat", DCAT, O_RDONLY,
- "creat", DCREAT, O_RDWR | O_CREAT | O_TRUNC,
- "new", DCREAT, O_RDWR | O_CREAT | O_TRUNC,
- "build", DBUILD, O_RDWR | O_CREAT,
- "squash", DPRESS, O_RDWR,
- "compact", DPRESS, O_RDWR,
- "compress", DPRESS, O_RDWR
-};
-
-#define CTABSIZ (sizeof (cmds)/sizeof (cmd))
-
-static cmd *parse();
-static void badk(), doit(), prdatum();
-
-int
-main(int argc, char **argv)
-{
- int c;
- register cmd *act;
- extern int optind;
- extern char *optarg;
-
- progname = argv[0];
-
- while ((c = getopt(argc, argv, "R")) != EOF)
- switch (c) {
- case 'R': /* raw processing */
- rflag++;
- break;
-
- default:
- oops("usage: %s", usage);
- break;
- }
-
- if ((argc -= optind) < 2)
- oops("usage: %s", usage);
-
- if ((act = parse(argv[optind])) == NULL)
- badk(argv[optind]);
- optind++;
- doit(act, argv[optind]);
- return 0;
-}
-
-static void
-doit(register cmd *act, char *file)
-{
- datum key;
- datum val;
- register DBM *db;
- register char *op;
- register int n;
- char *line;
-#ifdef TIME
- long start;
- extern long time();
-#endif
-
- if ((db = dbm_open(file, act->flags, 0644)) == NULL)
- oops("cannot open: %s", file);
-
- if ((line = (char *) malloc(LINEMAX)) == NULL)
- oops("%s: cannot get memory", "line alloc");
-
- switch (act->scode) {
-
- case DLOOK:
- while (fgets(line, LINEMAX, stdin) != NULL) {
- n = strlen(line) - 1;
- line[n] = 0;
- key.dptr = line;
- key.dsize = n;
- val = dbm_fetch(db, key);
- if (val.dptr != NULL) {
- prdatum(stdout, val);
- putchar('\n');
- continue;
- }
- prdatum(stderr, key);
- fprintf(stderr, ": not found.\n");
- }
- break;
- case DINSERT:
- break;
- case DDELETE:
- while (fgets(line, LINEMAX, stdin) != NULL) {
- n = strlen(line) - 1;
- line[n] = 0;
- key.dptr = line;
- key.dsize = n;
- if (dbm_delete(db, key) == -1) {
- prdatum(stderr, key);
- fprintf(stderr, ": not found.\n");
- }
- }
- break;
- case DCAT:
- for (key = dbm_firstkey(db); key.dptr != 0;
- key = dbm_nextkey(db)) {
- prdatum(stdout, key);
- putchar('\t');
- prdatum(stdout, dbm_fetch(db, key));
- putchar('\n');
- }
- break;
- case DBUILD:
-#ifdef TIME
- start = time(0);
-#endif
- while (fgets(line, LINEMAX, stdin) != NULL) {
- n = strlen(line) - 1;
- line[n] = 0;
- key.dptr = line;
- if ((op = strchr(line, '\t')) != 0) {
- key.dsize = op - line;
- *op++ = 0;
- val.dptr = op;
- val.dsize = line + n - op;
- }
- else
- oops("bad input; %s", line);
-
- if (dbm_store(db, key, val, DBM_REPLACE) < 0) {
- prdatum(stderr, key);
- fprintf(stderr, ": ");
- oops("store: %s", "failed");
- }
- }
-#ifdef TIME
- printf("done: %d seconds.\n", time(0) - start);
-#endif
- break;
- case DPRESS:
- break;
- case DCREAT:
- break;
- }
-
- dbm_close(db);
-}
-
-static void
-badk(char *word)
-{
- register int i;
-
- if (progname)
- fprintf(stderr, "%s: ", progname);
- fprintf(stderr, "bad keywd %s. use one of\n", word);
- for (i = 0; i < (int)CTABSIZ; i++)
- fprintf(stderr, "%-8s%c", cmds[i].sname,
- ((i + 1) % 6 == 0) ? '\n' : ' ');
- fprintf(stderr, "\n");
- exit(1);
- /*NOTREACHED*/
-}
-
-static cmd *
-parse(register char *str)
-{
- register int i = CTABSIZ;
- register cmd *p;
-
- for (p = cmds; i--; p++)
- if (strcmp(p->sname, str) == 0)
- return p;
- return NULL;
-}
-
-static void
-prdatum(FILE *stream, datum d)
-{
- register int c;
- register char *p = d.dptr;
- register int n = d.dsize;
-
- while (n--) {
- c = *p++ & 0377;
- if (c & 0200) {
- fprintf(stream, "M-");
- c &= 0177;
- }
- if (c == 0177 || c < ' ')
- fprintf(stream, "^%c", (c == 0177) ? '?' : c + '@');
- else
- putc(c, stream);
- }
-}
-
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/grind b/contrib/perl5/ext/SDBM_File/sdbm/grind
deleted file mode 100755
index 23728b7..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/grind
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-rm -f /tmp/*.dir /tmp/*.pag
-awk -e '{
- printf "%s\t", $0
- for (i = 0; i < 40; i++)
- printf "%s.", $0
- printf "\n"
-}' < /usr/dict/words | $1 build /tmp/$2
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/hash.c b/contrib/perl5/ext/SDBM_File/sdbm/hash.c
deleted file mode 100644
index 9b27648..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/hash.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * sdbm - ndbm work-alike hashed database library
- * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
- * author: oz@nexus.yorku.ca
- * status: public domain. keep it that way.
- *
- * hashing routine
- */
-
-#include "config.h"
-#include "EXTERN.h"
-#include "sdbm.h"
-/*
- * polynomial conversion ignoring overflows
- * [this seems to work remarkably well, in fact better
- * then the ndbm hash function. Replace at your own risk]
- * use: 65599 nice.
- * 65587 even better.
- */
-long
-sdbm_hash(register char *str, register int len)
-{
- register unsigned long n = 0;
-
-#ifdef DUFF
-
-#define HASHC n = *str++ + 65599 * n
-
- if (len > 0) {
- register int loop = (len + 8 - 1) >> 3;
-
- switch(len & (8 - 1)) {
- case 0: do {
- HASHC; case 7: HASHC;
- case 6: HASHC; case 5: HASHC;
- case 4: HASHC; case 3: HASHC;
- case 2: HASHC; case 1: HASHC;
- } while (--loop);
- }
-
- }
-#else
- while (len--)
- n = *str++ + 65599 * n;
-#endif
- return n;
-}
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/linux.patches b/contrib/perl5/ext/SDBM_File/sdbm/linux.patches
deleted file mode 100644
index cb7b1b7..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/linux.patches
+++ /dev/null
@@ -1,67 +0,0 @@
-*** sdbm.dist/./dbu.c Mon Feb 17 21:18:52 1992
---- sdbm/./dbu.c Mon Feb 17 21:11:20 1992
-***************
-*** 12,18 ****
- #endif
-
- extern int getopt();
-! extern char *strchr();
- extern void oops();
-
- char *progname;
---- 12,18 ----
- #endif
-
- extern int getopt();
-! /* extern char *strchr(); */
- extern void oops();
-
- char *progname;
-*** sdbm.dist/./makefile Mon Feb 17 21:18:56 1992
---- sdbm/./makefile Mon Feb 17 21:10:46 1992
-***************
-*** 2,8 ****
- # makefile for public domain ndbm-clone: sdbm
- # DUFF: use duff's device (loop unroll) in parts of the code
- #
-! CFLAGS = -O -DSDBM -DDUFF -DBSD42
- #LDFLAGS = -p
-
- OBJS = sdbm.o pair.o hash.o
---- 2,8 ----
- # makefile for public domain ndbm-clone: sdbm
- # DUFF: use duff's device (loop unroll) in parts of the code
- #
-! CFLAGS = -O -DSDBM -DDUFF
- #LDFLAGS = -p
-
- OBJS = sdbm.o pair.o hash.o
-*** sdbm.dist/./sdbm.c Mon Feb 17 21:19:17 1992
---- sdbm/./sdbm.c Mon Feb 17 21:12:59 1992
-***************
-*** 25,30 ****
---- 25,31 ----
- #endif
- #include <errno.h>
- #include <string.h>
-+ #include <unistd.h>
-
- #ifdef __STDC__
- #include <stddef.h>
-***************
-*** 43,49 ****
-
- extern char *malloc proto((unsigned int));
- extern void free proto((void *));
-! extern long lseek();
-
- /*
- * forward
---- 44,50 ----
-
- extern char *malloc proto((unsigned int));
- extern void free proto((void *));
-! /* extern long lseek(); */
-
- /*
- * forward
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/makefile.sdbm b/contrib/perl5/ext/SDBM_File/sdbm/makefile.sdbm
deleted file mode 100644
index c959c1f..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/makefile.sdbm
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# makefile for public domain ndbm-clone: sdbm
-# DUFF: use duff's device (loop unroll) in parts of the code
-#
-CFLAGS = -O -DSDBM -DDUFF -DBSD42 -pic
-#LDFLAGS = -p
-
-OBJS = sdbm.o pair.o hash.o
-SRCS = sdbm.c pair.c hash.c dbu.c dba.c dbd.c util.c
-HDRS = tune.h sdbm.h pair.h
-MISC = README CHANGES COMPARE sdbm.3 dbe.c dbe.1 dbm.c dbm.h biblio \
- readme.ms readme.ps
-
-all: dbu dba dbd dbe
-
-dbu: dbu.o sdbm util.o
- cc $(LDFLAGS) -o dbu dbu.o util.o libsdbm.a
-
-dba: dba.o util.o
- cc $(LDFLAGS) -o dba dba.o util.o
-dbd: dbd.o util.o
- cc $(LDFLAGS) -o dbd dbd.o util.o
-dbe: dbe.o sdbm
- cc $(LDFLAGS) -o dbe dbe.o libsdbm.a
-
-sdbm: $(OBJS)
- ar cr libsdbm.a $(OBJS)
- ranlib libsdbm.a
-### cp libsdbm.a /usr/lib/libsdbm.a
-
-dba.o: sdbm.h
-dbu.o: sdbm.h
-util.o:sdbm.h
-
-$(OBJS): sdbm.h tune.h pair.h
-
-#
-# dbu using berkelezoid ndbm routines [if you have them] for testing
-#
-#x-dbu: dbu.o util.o
-# cc $(CFLAGS) -o x-dbu dbu.o util.o
-lint:
- lint -abchx $(SRCS)
-
-clean:
- rm -f *.o mon.out core
-
-purge: clean
- rm -f dbu libsdbm.a dbd dba dbe x-dbu *.dir *.pag
-
-shar:
- shar $(MISC) makefile $(SRCS) $(HDRS) >SDBM.SHAR
-
-readme:
- nroff -ms readme.ms | col -b >README
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/pair.c b/contrib/perl5/ext/SDBM_File/sdbm/pair.c
deleted file mode 100644
index 4f0fde2..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/pair.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * sdbm - ndbm work-alike hashed database library
- * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
- * author: oz@nexus.yorku.ca
- * status: public domain.
- *
- * page-level routines
- */
-
-#include "config.h"
-#ifdef __CYGWIN__
-# define EXTCONST extern const
-#else
-# include "EXTERN.h"
-#endif
-#include "sdbm.h"
-#include "tune.h"
-#include "pair.h"
-
-#define exhash(item) sdbm_hash((item).dptr, (item).dsize)
-
-/*
- * forward
- */
-static int seepair proto((char *, int, char *, int));
-
-/*
- * page format:
- * +------------------------------+
- * ino | n | keyoff | datoff | keyoff |
- * +------------+--------+--------+
- * | datoff | - - - ----> |
- * +--------+---------------------+
- * | F R E E A R E A |
- * +--------------+---------------+
- * | <---- - - - | data |
- * +--------+-----+----+----------+
- * | key | data | key |
- * +--------+----------+----------+
- *
- * calculating the offsets for free area: if the number
- * of entries (ino[0]) is zero, the offset to the END of
- * the free area is the block size. Otherwise, it is the
- * nth (ino[ino[0]]) entry's offset.
- */
-
-int
-fitpair(char *pag, int need)
-{
- register int n;
- register int off;
- register int free;
- register short *ino = (short *) pag;
-
- off = ((n = ino[0]) > 0) ? ino[n] : PBLKSIZ;
- free = off - (n + 1) * sizeof(short);
- need += 2 * sizeof(short);
-
- debug(("free %d need %d\n", free, need));
-
- return need <= free;
-}
-
-void
-putpair(char *pag, datum key, datum val)
-{
- register int n;
- register int off;
- register short *ino = (short *) pag;
-
- off = ((n = ino[0]) > 0) ? ino[n] : PBLKSIZ;
-/*
- * enter the key first
- */
- off -= key.dsize;
- (void) memcpy(pag + off, key.dptr, key.dsize);
- ino[n + 1] = off;
-/*
- * now the data
- */
- off -= val.dsize;
- (void) memcpy(pag + off, val.dptr, val.dsize);
- ino[n + 2] = off;
-/*
- * adjust item count
- */
- ino[0] += 2;
-}
-
-datum
-getpair(char *pag, datum key)
-{
- register int i;
- register int n;
- datum val;
- register short *ino = (short *) pag;
-
- if ((n = ino[0]) == 0)
- return nullitem;
-
- if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0)
- return nullitem;
-
- val.dptr = pag + ino[i + 1];
- val.dsize = ino[i] - ino[i + 1];
- return val;
-}
-
-int
-exipair(char *pag, datum key)
-{
- register short *ino = (short *) pag;
-
- if (ino[0] == 0)
- return 0;
-
- return (seepair(pag, ino[0], key.dptr, key.dsize) != 0);
-}
-
-#ifdef SEEDUPS
-int
-duppair(char *pag, datum key)
-{
- register short *ino = (short *) pag;
- return ino[0] > 0 && seepair(pag, ino[0], key.dptr, key.dsize) > 0;
-}
-#endif
-
-datum
-getnkey(char *pag, int num)
-{
- datum key;
- register int off;
- register short *ino = (short *) pag;
-
- num = num * 2 - 1;
- if (ino[0] == 0 || num > ino[0])
- return nullitem;
-
- off = (num > 1) ? ino[num - 1] : PBLKSIZ;
-
- key.dptr = pag + ino[num];
- key.dsize = off - ino[num];
-
- return key;
-}
-
-int
-delpair(char *pag, datum key)
-{
- register int n;
- register int i;
- register short *ino = (short *) pag;
-
- if ((n = ino[0]) == 0)
- return 0;
-
- if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0)
- return 0;
-/*
- * found the key. if it is the last entry
- * [i.e. i == n - 1] we just adjust the entry count.
- * hard case: move all data down onto the deleted pair,
- * shift offsets onto deleted offsets, and adjust them.
- * [note: 0 < i < n]
- */
- if (i < n - 1) {
- register int m;
- register char *dst = pag + (i == 1 ? PBLKSIZ : ino[i - 1]);
- register char *src = pag + ino[i + 1];
- register int zoo = dst - src;
-
- debug(("free-up %d ", zoo));
-/*
- * shift data/keys down
- */
- m = ino[i + 1] - ino[n];
-#ifdef DUFF
-#define MOVB *--dst = *--src
-
- if (m > 0) {
- register int loop = (m + 8 - 1) >> 3;
-
- switch (m & (8 - 1)) {
- case 0: do {
- MOVB; case 7: MOVB;
- case 6: MOVB; case 5: MOVB;
- case 4: MOVB; case 3: MOVB;
- case 2: MOVB; case 1: MOVB;
- } while (--loop);
- }
- }
-#else
-#ifdef HAS_MEMMOVE
- dst -= m;
- src -= m;
- memmove(dst, src, m);
-#else
- while (m--)
- *--dst = *--src;
-#endif
-#endif
-/*
- * adjust offset index up
- */
- while (i < n - 1) {
- ino[i] = ino[i + 2] + zoo;
- i++;
- }
- }
- ino[0] -= 2;
- return 1;
-}
-
-/*
- * search for the key in the page.
- * return offset index in the range 0 < i < n.
- * return 0 if not found.
- */
-static int
-seepair(char *pag, register int n, register char *key, register int siz)
-{
- register int i;
- register int off = PBLKSIZ;
- register short *ino = (short *) pag;
-
- for (i = 1; i < n; i += 2) {
- if (siz == off - ino[i] &&
- memEQ(key, pag + ino[i], siz))
- return i;
- off = ino[i + 1];
- }
- return 0;
-}
-
-void
-splpage(char *pag, char *New, long int sbit)
-{
- datum key;
- datum val;
-
- register int n;
- register int off = PBLKSIZ;
- char cur[PBLKSIZ];
- register short *ino = (short *) cur;
-
- (void) memcpy(cur, pag, PBLKSIZ);
- (void) memset(pag, 0, PBLKSIZ);
- (void) memset(New, 0, PBLKSIZ);
-
- n = ino[0];
- for (ino++; n > 0; ino += 2) {
- key.dptr = cur + ino[0];
- key.dsize = off - ino[0];
- val.dptr = cur + ino[1];
- val.dsize = ino[0] - ino[1];
-/*
- * select the page pointer (by looking at sbit) and insert
- */
- (void) putpair((exhash(key) & sbit) ? New : pag, key, val);
-
- off = ino[1];
- n -= 2;
- }
-
- debug(("%d split %d/%d\n", ((short *) cur)[0] / 2,
- ((short *) New)[0] / 2,
- ((short *) pag)[0] / 2));
-}
-
-/*
- * check page sanity:
- * number of entries should be something
- * reasonable, and all offsets in the index should be in order.
- * this could be made more rigorous.
- */
-int
-chkpage(char *pag)
-{
- register int n;
- register int off;
- register short *ino = (short *) pag;
-
- if ((n = ino[0]) < 0 || n > PBLKSIZ / sizeof(short))
- return 0;
-
- if (n > 0) {
- off = PBLKSIZ;
- for (ino++; n > 0; ino += 2) {
- if (ino[0] > off || ino[1] > off ||
- ino[1] > ino[0])
- return 0;
- off = ino[1];
- n -= 2;
- }
- }
- return 1;
-}
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/pair.h b/contrib/perl5/ext/SDBM_File/sdbm/pair.h
deleted file mode 100644
index b6944ed..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/pair.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Mini EMBED (pair.c) */
-#define chkpage sdbm__chkpage
-#define delpair sdbm__delpair
-#define duppair sdbm__duppair
-#define exipair sdbm__exipair
-#define fitpair sdbm__fitpair
-#define getnkey sdbm__getnkey
-#define getpair sdbm__getpair
-#define putpair sdbm__putpair
-#define splpage sdbm__splpage
-
-extern int fitpair proto((char *, int));
-extern void putpair proto((char *, datum, datum));
-extern datum getpair proto((char *, datum));
-extern int exipair proto((char *, datum));
-extern int delpair proto((char *, datum));
-extern int chkpage proto((char *));
-extern datum getnkey proto((char *, int));
-extern void splpage proto((char *, char *, long));
-#ifdef SEEDUPS
-extern int duppair proto((char *, datum));
-#endif
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/readme.ms b/contrib/perl5/ext/SDBM_File/sdbm/readme.ms
deleted file mode 100644
index 01ca17c..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/readme.ms
+++ /dev/null
@@ -1,353 +0,0 @@
-.\" tbl | readme.ms | [tn]roff -ms | ...
-.\" note the "C" (courier) and "CB" fonts: you will probably have to
-.\" change these.
-.\" $Id: readme.ms,v 1.1 90/12/13 13:09:15 oz Exp Locker: oz $
-
-.de P1
-.br
-.nr dT 4
-.nf
-.ft C
-.sp .5
-.nr t \\n(dT*\\w'x'u
-.ta 1u*\\ntu 2u*\\ntu 3u*\\ntu 4u*\\ntu 5u*\\ntu 6u*\\ntu 7u*\\ntu 8u*\\ntu 9u*\\ntu 10u*\\ntu 11u*\\ntu 12u*\\ntu 13u*\\ntu 14u*\\ntu
-..
-.de P2
-.br
-.ft 1
-.br
-.sp .5
-.br
-.fi
-..
-.\" CW uses the typewriter/courier font.
-.de CW
-\fC\\$1\\fP\\$2
-..
-
-.\" Footnote numbering [by Henry Spencer]
-.\" <text>\*f for a footnote number..
-.\" .FS
-.\" \*F <footnote text>
-.\" .FE
-.\"
-.ds f \\u\\s-2\\n+f\\s+2\\d
-.nr f 0 1
-.ds F \\n+F.
-.nr F 0 1
-
-.ND
-.LP
-.TL
-\fIsdbm\fP \(em Substitute DBM
-.br
-or
-.br
-Berkeley \fIndbm\fP for Every UN*X\** Made Simple
-.AU
-Ozan (oz) Yigit
-.AI
-The Guild of PD Software Toolmakers
-Toronto - Canada
-.sp
-oz@nexus.yorku.ca
-.LP
-.FS
-UN*X is not a trademark of any (dis)organization.
-.FE
-.sp 2
-\fIImplementation is the sincerest form of flattery. \(em L. Peter Deutsch\fP
-.SH
-A The Clone of the \fIndbm\fP library
-.PP
-The sources accompanying this notice \(em \fIsdbm\fP \(em constitute
-the first public release (Dec. 1990) of a complete clone of
-the Berkeley UN*X \fIndbm\fP library. The \fIsdbm\fP library is meant to
-clone the proven functionality of \fIndbm\fP as closely as possible,
-including a few improvements. It is practical, easy to understand, and
-compatible.
-The \fIsdbm\fP library is not derived from any licensed, proprietary or
-copyrighted software.
-.PP
-The \fIsdbm\fP implementation is based on a 1978 algorithm
-[Lar78] by P.-A. (Paul) Larson known as ``Dynamic Hashing''.
-In the course of searching for a substitute for \fIndbm\fP, I
-prototyped three different external-hashing algorithms [Lar78, Fag79, Lit80]
-and ultimately chose Larson's algorithm as a basis of the \fIsdbm\fP
-implementation. The Bell Labs
-\fIdbm\fP (and therefore \fIndbm\fP) is based on an algorithm invented by
-Ken Thompson, [Tho90, Tor87] and predates Larson's work.
-.PP
-The \fIsdbm\fR programming interface is totally compatible
-with \fIndbm\fP and includes a slight improvement in database initialization.
-It is also expected to be binary-compatible under most UN*X versions that
-support the \fIndbm\fP library.
-.PP
-The \fIsdbm\fP implementation shares the shortcomings of the \fIndbm\fP
-library, as a side effect of various simplifications to the original Larson
-algorithm. It does produce \fIholes\fP in the page file as it writes
-pages past the end of file. (Larson's paper include a clever solution to
-this problem that is a result of using the hash value directly as a block
-address.) On the other hand, extensive tests seem to indicate that \fIsdbm\fP
-creates fewer holes in general, and the resulting pagefiles are
-smaller. The \fIsdbm\fP implementation is also faster than \fIndbm\fP
-in database creation.
-Unlike the \fIndbm\fP, the \fIsdbm\fP
-.CW store
-operation will not ``wander away'' trying to split its
-data pages to insert a datum that \fIcannot\fP (due to elaborate worst-case
-situations) be inserted. (It will fail after a pre-defined number of attempts.)
-.SH
-Important Compatibility Warning
-.PP
-The \fIsdbm\fP and \fIndbm\fP
-libraries \fIcannot\fP share databases: one cannot read the (dir/pag)
-database created by the other. This is due to the differences
-between the \fIndbm\fP and \fIsdbm\fP algorithms\**,
-.FS
-Torek's discussion [Tor87]
-indicates that \fIdbm/ndbm\fP implementations use the hash
-value to traverse the radix trie differently than \fIsdbm\fP
-and as a result, the page indexes are generated in \fIdifferent\fP order.
-For more information, send e-mail to the author.
-.FE
-and the hash functions
-used.
-It is easy to convert between the \fIdbm/ndbm\fP databases and \fIsdbm\fP
-by ignoring the index completely: see
-.CW dbd ,
-.CW dbu
-etc.
-.R
-.LP
-.SH
-Notice of Intellectual Property
-.LP
-\fIThe entire\fP sdbm \fIlibrary package, as authored by me,\fP Ozan S. Yigit,
-\fIis hereby placed in the public domain.\fP As such, 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. There is no expressed or
-implied warranty for the \fIsdbm\fP library.
-.PP
-Since the \fIsdbm\fP
-library package is in the public domain, this \fIoriginal\fP
-release or any additional public-domain releases of the modified original
-cannot possibly (by definition) be withheld from you. Also by definition,
-You (singular) have all the rights to this code (including the right to
-sell without permission, the right to hoard\**
-.FS
-You cannot really hoard something that is available to the public at
-large, but try if it makes you feel any better.
-.FE
-and the right to do other icky things as
-you see fit) but those rights are also granted to everyone else.
-.PP
-Please note that all previous distributions of this software contained
-a copyright (which is now dropped) to protect its
-origins and its current public domain status against any possible claims
-and/or challenges.
-.SH
-Acknowledgments
-.PP
-Many people have been very helpful and supportive. A partial list would
-necessarily include Rayan Zacherissen (who contributed the man page,
-and also hacked a MMAP version of \fIsdbm\fP),
-Arnold Robbins, Chris Lewis,
-Bill Davidsen, Henry Spencer, Geoff Collyer, Rich Salz (who got me started
-in the first place), Johannes Ruschein
-(who did the minix port) and David Tilbrook. I thank you all.
-.SH
-Distribution Manifest and Notes
-.LP
-This distribution of \fIsdbm\fP includes (at least) the following:
-.P1
- CHANGES change log
- README this file.
- biblio a small bibliography on external hashing
- dba.c a crude (n/s)dbm page file analyzer
- dbd.c a crude (n/s)dbm page file dumper (for conversion)
- dbe.1 man page for dbe.c
- dbe.c Janick's database editor
- dbm.c a dbm library emulation wrapper for ndbm/sdbm
- dbm.h header file for the above
- dbu.c a crude db management utility
- hash.c hashing function
- makefile guess.
- pair.c page-level routines (posted earlier)
- pair.h header file for the above
- readme.ms troff source for the README file
- sdbm.3 man page
- sdbm.c the real thing
- sdbm.h header file for the above
- tune.h place for tuning & portability thingies
- util.c miscellaneous
-.P2
-.PP
-.CW dbu
-is a simple database manipulation program\** that tries to look
-.FS
-The
-.CW dbd ,
-.CW dba ,
-.CW dbu
-utilities are quick hacks and are not fit for production use. They were
-developed late one night, just to test out \fIsdbm\fP, and convert some
-databases.
-.FE
-like Bell Labs'
-.CW cbt
-utility. It is currently incomplete in functionality.
-I use
-.CW dbu
-to test out the routines: it takes (from stdin) tab separated
-key/value pairs for commands like
-.CW build
-or
-.CW insert
-or takes keys for
-commands like
-.CW delete
-or
-.CW look .
-.P1
- dbu <build|creat|look|insert|cat|delete> dbmfile
-.P2
-.PP
-.CW dba
-is a crude analyzer of \fIdbm/sdbm/ndbm\fP
-page files. It scans the entire
-page file, reporting page level statistics, and totals at the end.
-.PP
-.CW dbd
-is a crude dump program for \fIdbm/ndbm/sdbm\fP
-databases. It ignores the
-bitmap, and dumps the data pages in sequence. It can be used to create
-input for the
-.CW dbu
-utility.
-Note that
-.CW dbd
-will skip any NULLs in the key and data
-fields, thus is unsuitable to convert some peculiar databases that
-insist in including the terminating null.
-.PP
-I have also included a copy of the
-.CW dbe
-(\fIndbm\fP DataBase Editor) by Janick Bergeron [janick@bnr.ca] for
-your pleasure. You may find it more useful than the little
-.CW dbu
-utility.
-.PP
-.CW dbm.[ch]
-is a \fIdbm\fP library emulation on top of \fIndbm\fP
-(and hence suitable for \fIsdbm\fP). Written by Robert Elz.
-.PP
-The \fIsdbm\fP
-library has been around in beta test for quite a long time, and from whatever
-little feedback I received (maybe no news is good news), I believe it has been
-functioning without any significant problems. I would, of course, appreciate
-all fixes and/or improvements. Portability enhancements would especially be
-useful.
-.SH
-Implementation Issues
-.PP
-Hash functions:
-The algorithm behind \fIsdbm\fP implementation needs a good bit-scrambling
-hash function to be effective. I ran into a set of constants for a simple
-hash function that seem to help \fIsdbm\fP perform better than \fIndbm\fP
-for various inputs:
-.P1
- /*
- * polynomial conversion ignoring overflows
- * 65599 nice. 65587 even better.
- */
- long
- dbm_hash(char *str, int len) {
- register unsigned long n = 0;
-
- while (len--)
- n = n * 65599 + *str++;
- return n;
- }
-.P2
-.PP
-There may be better hash functions for the purposes of dynamic hashing.
-Try your favorite, and check the pagefile. If it contains too many pages
-with too many holes, (in relation to this one for example) or if
-\fIsdbm\fP
-simply stops working (fails after
-.CW SPLTMAX
-attempts to split) when you feed your
-NEWS
-.CW history
-file to it, you probably do not have a good hashing function.
-If you do better (for different types of input), I would like to know
-about the function you use.
-.PP
-Block sizes: It seems (from various tests on a few machines) that a page
-file block size
-.CW PBLKSIZ
-of 1024 is by far the best for performance, but
-this also happens to limit the size of a key/value pair. Depending on your
-needs, you may wish to increase the page size, and also adjust
-.CW PAIRMAX
-(the maximum size of a key/value pair allowed: should always be at least
-three words smaller than
-.CW PBLKSIZ .)
-accordingly. The system-wide version of the library
-should probably be
-configured with 1024 (distribution default), as this appears to be sufficient
-for most common uses of \fIsdbm\fP.
-.SH
-Portability
-.PP
-This package has been tested in many different UN*Xes even including minix,
-and appears to be reasonably portable. This does not mean it will port
-easily to non-UN*X systems.
-.SH
-Notes and Miscellaneous
-.PP
-The \fIsdbm\fP is not a very complicated package, at least not after you
-familiarize yourself with the literature on external hashing. There are
-other interesting algorithms in existence that ensure (approximately)
-single-read access to a data value associated with any key. These are
-directory-less schemes such as \fIlinear hashing\fP [Lit80] (+ Larson
-variations), \fIspiral storage\fP [Mar79] or directory schemes such as
-\fIextensible hashing\fP [Fag79] by Fagin et al. I do hope these sources
-provide a reasonable playground for experimentation with other algorithms.
-See the June 1988 issue of ACM Computing Surveys [Enb88] for an
-excellent overview of the field.
-.PG
-.SH
-References
-.LP
-.IP [Lar78] 4m
-P.-A. Larson,
-``Dynamic Hashing'', \fIBIT\fP, vol. 18, pp. 184-201, 1978.
-.IP [Tho90] 4m
-Ken Thompson, \fIprivate communication\fP, Nov. 1990
-.IP [Lit80] 4m
-W. Litwin,
-`` Linear Hashing: A new tool for file and table addressing'',
-\fIProceedings of the 6th Conference on Very Large Dabatases (Montreal)\fP,
-pp. 212-223, Very Large Database Foundation, Saratoga, Calif., 1980.
-.IP [Fag79] 4m
-R. Fagin, J. Nievergelt, N. Pippinger, and H. R. Strong,
-``Extendible Hashing - A Fast Access Method for Dynamic Files'',
-\fIACM Trans. Database Syst.\fP, vol. 4, no.3, pp. 315-344, Sept. 1979.
-.IP [Wal84] 4m
-Rich Wales,
-``Discussion of "dbm" data base system'', \fIUSENET newsgroup unix.wizards\fP,
-Jan. 1984.
-.IP [Tor87] 4m
-Chris Torek,
-``Re: dbm.a and ndbm.a archives'', \fIUSENET newsgroup comp.unix\fP,
-1987.
-.IP [Mar79] 4m
-G. N. Martin,
-``Spiral Storage: Incrementally Augmentable Hash Addressed Storage'',
-\fITechnical Report #27\fP, University of Varwick, Coventry, U.K., 1979.
-.IP [Enb88] 4m
-R. J. Enbody and H. C. Du,
-``Dynamic Hashing Schemes'',\fIACM Computing Surveys\fP,
-vol. 20, no. 2, pp. 85-113, June 1988.
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/sdbm.3 b/contrib/perl5/ext/SDBM_File/sdbm/sdbm.3
deleted file mode 100644
index fe6fe76..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/sdbm.3
+++ /dev/null
@@ -1,295 +0,0 @@
-.\" $Id: sdbm.3,v 1.2 90/12/13 13:00:57 oz Exp $
-.TH SDBM 3 "1 March 1990"
-.SH NAME
-sdbm, sdbm_open, sdbm_prep, sdbm_close, sdbm_fetch, sdbm_store, sdbm_delete, sdbm_exists, sdbm_firstkey, sdbm_nextkey, sdbm_hash, sdbm_rdonly, sdbm_error, sdbm_clearerr, sdbm_dirfno, sdbm_pagfno \- data base subroutines
-.SH SYNOPSIS
-.nf
-.ft B
-#include <sdbm.h>
-.sp
-typedef struct {
- char *dptr;
- int dsize;
-} datum;
-.sp
-datum nullitem = { NULL, 0 };
-.sp
-\s-1DBM\s0 *sdbm_open(char *file, int flags, int mode)
-.sp
-\s-1DBM\s0 *sdbm_prep(char *dirname, char *pagname, int flags, int mode)
-.sp
-void sdbm_close(\s-1DBM\s0 *db)
-.sp
-datum sdbm_fetch(\s-1DBM\s0 *db, key)
-.sp
-int sdbm_store(\s-1DBM\s0 *db, datum key, datum val, int flags)
-.sp
-int sdbm_delete(\s-1DBM\s0 *db, datum key)
-.sp
-int sdbm_exists(\s-1DBM\s0 *db, datum key)
-.sp
-datum sdbm_firstkey(\s-1DBM\s0 *db)
-.sp
-datum sdbm_nextkey(\s-1DBM\s0 *db)
-.sp
-long sdbm_hash(char *string, int len)
-.sp
-int sdbm_rdonly(\s-1DBM\s0 *db)
-int sdbm_error(\s-1DBM\s0 *db)
-sdbm_clearerr(\s-1DBM\s0 *db)
-int sdbm_dirfno(\s-1DBM\s0 *db)
-int sdbm_pagfno(\s-1DBM\s0 *db)
-.ft R
-.fi
-.SH DESCRIPTION
-.IX "database library" sdbm "" "\fLsdbm\fR"
-.IX sdbm_open "" "\fLsdbm_open\fR \(em open \fLsdbm\fR database"
-.IX sdbm_prep "" "\fLsdbm_prep\fR \(em prepare \fLsdbm\fR database"
-.IX sdbm_close "" "\fLsdbm_close\fR \(em close \fLsdbm\fR routine"
-.IX sdbm_fetch "" "\fLsdbm_fetch\fR \(em fetch \fLsdbm\fR database data"
-.IX sdbm_store "" "\fLsdbm_store\fR \(em add data to \fLsdbm\fR database"
-.IX sdbm_delete "" "\fLsdbm_delete\fR \(em remove data from \fLsdbm\fR database"
-.IX sdbm_exists "" "\fLsdbm_exists\fR \(em test \fLsdbm\fR key existence"
-.IX sdbm_firstkey "" "\fLsdbm_firstkey\fR \(em access \fLsdbm\fR database"
-.IX sdbm_nextkey "" "\fLsdbm_nextkey\fR \(em access \fLsdbm\fR database"
-.IX sdbm_hash "" "\fLsdbm_hash\fR \(em string hash for \fLsdbm\fR database"
-.IX sdbm_rdonly "" "\fLsdbm_rdonly\fR \(em return \fLsdbm\fR database read-only mode"
-.IX sdbm_error "" "\fLsdbm_error\fR \(em return \fLsdbm\fR database error condition"
-.IX sdbm_clearerr "" "\fLsdbm_clearerr\fR \(em clear \fLsdbm\fR database error condition"
-.IX sdbm_dirfno "" "\fLsdbm_dirfno\fR \(em return \fLsdbm\fR database bitmap file descriptor"
-.IX sdbm_pagfno "" "\fLsdbm_pagfno\fR \(em return \fLsdbm\fR database data file descriptor"
-.IX "database functions \(em \fLsdbm\fR" sdbm_open "" \fLsdbm_open\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_prep "" \fLsdbm_prep\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_close "" \fLsdbm_close\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_fetch "" \fLsdbm_fetch\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_store "" \fLsdbm_store\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_delete "" \fLsdbm_delete\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_firstkey "" \fLsdbm_firstkey\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_nextkey "" \fLsdbm_nextkey\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_rdonly "" \fLsdbm_rdonly\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_error "" \fLsdbm_error\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_clearerr "" \fLsdbm_clearerr\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_dirfno "" \fLsdbm_dirfno\fP
-.IX "database functions \(em \fLsdbm\fR" sdbm_pagfno "" \fLsdbm_pagfno\fP
-.LP
-This package allows an application to maintain a mapping of <key,value> pairs
-in disk files. This is not to be considered a real database system, but is
-still useful in many simple applications built around fast retrieval of a data
-value from a key. This implementation uses an external hashing scheme,
-called Dynamic Hashing, as described by Per-Aake Larson in BIT 18 (1978) pp.
-184-201. Retrieval of any item usually requires a single disk access.
-The application interface is compatible with the
-.IR ndbm (3)
-library.
-.LP
-An
-.B sdbm
-database is kept in two files usually given the extensions
-.B \.dir
-and
-.BR \.pag .
-The
-.B \.dir
-file contains a bitmap representing a forest of binary hash trees, the leaves
-of which indicate data pages in the
-.B \.pag
-file.
-.LP
-The application interface uses the
-.B datum
-structure to describe both
-.I keys
-and
-.IR value s.
-A
-.B datum
-specifies a byte sequence of
-.I dsize
-size pointed to by
-.IR dptr .
-If you use
-.SM ASCII
-strings as
-.IR key s
-or
-.IR value s,
-then you must decide whether or not to include the terminating
-.SM NUL
-byte which sometimes defines strings. Including it will require larger
-database files, but it will be possible to get sensible output from a
-.IR strings (1)
-command applied to the data file.
-.LP
-In order to allow a process using this package to manipulate multiple
-databases, the applications interface always requires a
-.IR handle ,
-a
-.BR "DBM *" ,
-to identify the database to be manipulated. Such a handle can be obtained
-from the only routines that do not require it, namely
-.BR sdbm_open (\|)
-or
-.BR sdbm_prep (\|).
-Either of these will open or create the two necessary files. The
-difference is that the latter allows explicitly naming the bitmap and data
-files whereas
-.BR sdbm_open (\|)
-will take a base file name and call
-.BR sdbm_prep (\|)
-with the default extensions.
-The
-.I flags
-and
-.I mode
-parameters are the same as for
-.BR open (2).
-.LP
-To free the resources occupied while a database handle is active, call
-.BR sdbm_close (\|).
-.LP
-Given a handle, one can retrieve data associated with a key by using the
-.BR sdbm_fetch (\|)
-routine, and associate data with a key by using the
-.BR sdbm_store (\|)
-routine.
-.BR sdbm_exists (\|)
-will say whether a given key exists in the database.
-.LP
-The values of the
-.I flags
-parameter for
-.BR sdbm_store (\|)
-can be either
-.BR \s-1DBM_INSERT\s0 ,
-which will not change an existing entry with the same key, or
-.BR \s-1DBM_REPLACE\s0 ,
-which will replace an existing entry with the same key.
-Keys are unique within the database.
-.LP
-To delete a key and its associated value use the
-.BR sdbm_delete (\|)
-routine.
-.LP
-To retrieve every key in the database, use a loop like:
-.sp
-.nf
-.ft B
-for (key = sdbm_firstkey(db); key.dptr != NULL; key = sdbm_nextkey(db))
- ;
-.ft R
-.fi
-.LP
-The order of retrieval is unspecified.
-.LP
-If you determine that the performance of the database is inadequate or
-you notice clustering or other effects that may be due to the hashing
-algorithm used by this package, you can override it by supplying your
-own
-.BR sdbm_hash (\|)
-routine. Doing so will make the database unintelligable to any other
-applications that do not use your specialized hash function.
-.sp
-.LP
-The following macros are defined in the header file:
-.IP
-.BR sdbm_rdonly (\|)
-returns true if the database has been opened read\-only.
-.IP
-.BR sdbm_error (\|)
-returns true if an I/O error has occurred.
-.IP
-.BR sdbm_clearerr (\|)
-allows you to clear the error flag if you think you know what the error
-was and insist on ignoring it.
-.IP
-.BR sdbm_dirfno (\|)
-returns the file descriptor associated with the bitmap file.
-.IP
-.BR sdbm_pagfno (\|)
-returns the file descriptor associated with the data file.
-.SH SEE ALSO
-.IR open (2).
-.SH DIAGNOSTICS
-Functions that return a
-.B "DBM *"
-handle will use
-.SM NULL
-to indicate an error.
-Functions that return an
-.B int
-will use \-1 to indicate an error. The normal return value in that case is 0.
-Functions that return a
-.B datum
-will return
-.B nullitem
-to indicate an error.
-.LP
-As a special case of
-.BR sdbm_store (\|),
-if it is called with the
-.B \s-1DBM_INSERT\s0
-flag and the key already exists in the database, the return value will be 1.
-.LP
-In general, if a function parameter is invalid,
-.B errno
-will be set to
-.BR \s-1EINVAL\s0 .
-If a write operation is requested on a read-only database,
-.B errno
-will be set to
-.BR \s-1ENOPERM\s0 .
-If a memory allocation (using
-.IR malloc (3))
-failed,
-.B errno
-will be set to
-.BR \s-1ENOMEM\s0 .
-For I/O operation failures
-.B errno
-will contain the value set by the relevant failed system call, either
-.IR read (2),
-.IR write (2),
-or
-.IR lseek (2).
-.SH AUTHOR
-.IP "Ozan S. Yigit" (oz@nexus.yorku.ca)
-.SH BUGS
-The sum of key and value data sizes must not exceed
-.B \s-1PAIRMAX\s0
-(1008 bytes).
-.LP
-The sum of the key and value data sizes where several keys hash to the
-same value must fit within one bitmap page.
-.LP
-The
-.B \.pag
-file will contain holes, so its apparent size is larger than its contents.
-When copied through the filesystem the holes will be filled.
-.LP
-The contents of
-.B datum
-values returned are in volatile storage. If you want to retain the values
-pointed to, you must copy them immediately before another call to this package.
-.LP
-The only safe way for multiple processes to (read and) update a database at
-the same time, is to implement a private locking scheme outside this package
-and open and close the database between lock acquisitions. It is safe for
-multiple processes to concurrently access a database read-only.
-.SH APPLICATIONS PORTABILITY
-For complete source code compatibility with the Berkeley Unix
-.IR ndbm (3)
-library, the
-.B sdbm.h
-header file should be installed in
-.BR /usr/include/ndbm.h .
-.LP
-The
-.B nullitem
-data item, and the
-.BR sdbm_prep (\|),
-.BR sdbm_hash (\|),
-.BR sdbm_rdonly (\|),
-.BR sdbm_dirfno (\|),
-and
-.BR sdbm_pagfno (\|)
-functions are unique to this package.
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/sdbm.c b/contrib/perl5/ext/SDBM_File/sdbm/sdbm.c
deleted file mode 100644
index d41c770..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/sdbm.c
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- * sdbm - ndbm work-alike hashed database library
- * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
- * author: oz@nexus.yorku.ca
- * status: public domain.
- *
- * core routines
- */
-
-#include "INTERN.h"
-#include "config.h"
-#ifdef WIN32
-#include "io.h"
-#endif
-#include "sdbm.h"
-#include "tune.h"
-#include "pair.h"
-
-#ifdef I_FCNTL
-# include <fcntl.h>
-#endif
-#ifdef I_SYS_FILE
-# include <sys/file.h>
-#endif
-
-#ifdef I_STRING
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-/*
- * externals
- */
-#ifndef WIN32
-#ifndef sun
-extern int errno;
-#endif
-
-extern Malloc_t malloc proto((MEM_SIZE));
-extern Free_t free proto((Malloc_t));
-
-#endif
-
-/*
- * forward
- */
-static int getdbit proto((DBM *, long));
-static int setdbit proto((DBM *, long));
-static int getpage proto((DBM *, long));
-static datum getnext proto((DBM *));
-static int makroom proto((DBM *, long, int));
-
-/*
- * useful macros
- */
-#define bad(x) ((x).dptr == NULL || (x).dsize < 0)
-#define exhash(item) sdbm_hash((item).dptr, (item).dsize)
-#define ioerr(db) ((db)->flags |= DBM_IOERR)
-
-#define OFF_PAG(off) (long) (off) * PBLKSIZ
-#define OFF_DIR(off) (long) (off) * DBLKSIZ
-
-static long masks[] = {
- 000000000000, 000000000001, 000000000003, 000000000007,
- 000000000017, 000000000037, 000000000077, 000000000177,
- 000000000377, 000000000777, 000000001777, 000000003777,
- 000000007777, 000000017777, 000000037777, 000000077777,
- 000000177777, 000000377777, 000000777777, 000001777777,
- 000003777777, 000007777777, 000017777777, 000037777777,
- 000077777777, 000177777777, 000377777777, 000777777777,
- 001777777777, 003777777777, 007777777777, 017777777777
-};
-
-DBM *
-sdbm_open(register char *file, register int flags, register int mode)
-{
- register DBM *db;
- register char *dirname;
- register char *pagname;
- register int n;
-
- if (file == NULL || !*file)
- return errno = EINVAL, (DBM *) NULL;
-/*
- * need space for two seperate filenames
- */
- n = strlen(file) * 2 + strlen(DIRFEXT) + strlen(PAGFEXT) + 2;
-
- if ((dirname = (char *) malloc((unsigned) n)) == NULL)
- return errno = ENOMEM, (DBM *) NULL;
-/*
- * build the file names
- */
- dirname = strcat(strcpy(dirname, file), DIRFEXT);
- pagname = strcpy(dirname + strlen(dirname) + 1, file);
- pagname = strcat(pagname, PAGFEXT);
-
- db = sdbm_prep(dirname, pagname, flags, mode);
- free((char *) dirname);
- return db;
-}
-
-DBM *
-sdbm_prep(char *dirname, char *pagname, int flags, int mode)
-{
- register DBM *db;
- struct stat dstat;
-
- if ((db = (DBM *) malloc(sizeof(DBM))) == NULL)
- return errno = ENOMEM, (DBM *) NULL;
-
- db->flags = 0;
- db->hmask = 0;
- db->blkptr = 0;
- db->keyptr = 0;
-/*
- * adjust user flags so that WRONLY becomes RDWR,
- * as required by this package. Also set our internal
- * flag for RDONLY if needed.
- */
- if (flags & O_WRONLY)
- flags = (flags & ~O_WRONLY) | O_RDWR;
-
- else if ((flags & 03) == O_RDONLY)
- db->flags = DBM_RDONLY;
-/*
- * open the files in sequence, and stat the dirfile.
- * If we fail anywhere, undo everything, return NULL.
- */
-#if defined(OS2) || defined(MSDOS) || defined(WIN32) || defined(__CYGWIN__)
- flags |= O_BINARY;
-# endif
- if ((db->pagf = open(pagname, flags, mode)) > -1) {
- if ((db->dirf = open(dirname, flags, mode)) > -1) {
-/*
- * need the dirfile size to establish max bit number.
- */
- if (fstat(db->dirf, &dstat) == 0) {
-/*
- * zero size: either a fresh database, or one with a single,
- * unsplit data page: dirpage is all zeros.
- */
- db->dirbno = (!dstat.st_size) ? 0 : -1;
- db->pagbno = -1;
- db->maxbno = dstat.st_size * BYTESIZ;
-
- (void) memset(db->pagbuf, 0, PBLKSIZ);
- (void) memset(db->dirbuf, 0, DBLKSIZ);
- /*
- * success
- */
- return db;
- }
- (void) close(db->dirf);
- }
- (void) close(db->pagf);
- }
- free((char *) db);
- return (DBM *) NULL;
-}
-
-void
-sdbm_close(register DBM *db)
-{
- if (db == NULL)
- errno = EINVAL;
- else {
- (void) close(db->dirf);
- (void) close(db->pagf);
- free((char *) db);
- }
-}
-
-datum
-sdbm_fetch(register DBM *db, datum key)
-{
- if (db == NULL || bad(key))
- return errno = EINVAL, nullitem;
-
- if (getpage(db, exhash(key)))
- return getpair(db->pagbuf, key);
-
- return ioerr(db), nullitem;
-}
-
-int
-sdbm_exists(register DBM *db, datum key)
-{
- if (db == NULL || bad(key))
- return errno = EINVAL, -1;
-
- if (getpage(db, exhash(key)))
- return exipair(db->pagbuf, key);
-
- return ioerr(db), -1;
-}
-
-int
-sdbm_delete(register DBM *db, datum key)
-{
- if (db == NULL || bad(key))
- return errno = EINVAL, -1;
- if (sdbm_rdonly(db))
- return errno = EPERM, -1;
-
- if (getpage(db, exhash(key))) {
- if (!delpair(db->pagbuf, key))
- return -1;
-/*
- * update the page file
- */
- if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0
- || write(db->pagf, db->pagbuf, PBLKSIZ) < 0)
- return ioerr(db), -1;
-
- return 0;
- }
-
- return ioerr(db), -1;
-}
-
-int
-sdbm_store(register DBM *db, datum key, datum val, int flags)
-{
- int need;
- register long hash;
-
- if (db == NULL || bad(key))
- return errno = EINVAL, -1;
- if (sdbm_rdonly(db))
- return errno = EPERM, -1;
-
- need = key.dsize + val.dsize;
-/*
- * is the pair too big (or too small) for this database ??
- */
- if (need < 0 || need > PAIRMAX)
- return errno = EINVAL, -1;
-
- if (getpage(db, (hash = exhash(key)))) {
-/*
- * if we need to replace, delete the key/data pair
- * first. If it is not there, ignore.
- */
- if (flags == DBM_REPLACE)
- (void) delpair(db->pagbuf, key);
-#ifdef SEEDUPS
- else if (duppair(db->pagbuf, key))
- return 1;
-#endif
-/*
- * if we do not have enough room, we have to split.
- */
- if (!fitpair(db->pagbuf, need))
- if (!makroom(db, hash, need))
- return ioerr(db), -1;
-/*
- * we have enough room or split is successful. insert the key,
- * and update the page file.
- */
- (void) putpair(db->pagbuf, key, val);
-
- if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0
- || write(db->pagf, db->pagbuf, PBLKSIZ) < 0)
- return ioerr(db), -1;
- /*
- * success
- */
- return 0;
- }
-
- return ioerr(db), -1;
-}
-
-/*
- * makroom - make room by splitting the overfull page
- * this routine will attempt to make room for SPLTMAX times before
- * giving up.
- */
-static int
-makroom(register DBM *db, long int hash, int need)
-{
- long newp;
- char twin[PBLKSIZ];
-#if defined(DOSISH) || defined(WIN32)
- char zer[PBLKSIZ];
- long oldtail;
-#endif
- char *pag = db->pagbuf;
- char *New = twin;
- register int smax = SPLTMAX;
-
- do {
-/*
- * split the current page
- */
- (void) splpage(pag, New, db->hmask + 1);
-/*
- * address of the new page
- */
- newp = (hash & db->hmask) | (db->hmask + 1);
-
-/*
- * write delay, read avoidence/cache shuffle:
- * select the page for incoming pair: if key is to go to the new page,
- * write out the previous one, and copy the new one over, thus making
- * it the current page. If not, simply write the new page, and we are
- * still looking at the page of interest. current page is not updated
- * here, as sdbm_store will do so, after it inserts the incoming pair.
- */
-
-#if defined(DOSISH) || defined(WIN32)
- /*
- * Fill hole with 0 if made it.
- * (hole is NOT read as 0)
- */
- oldtail = lseek(db->pagf, 0L, SEEK_END);
- memset(zer, 0, PBLKSIZ);
- while (OFF_PAG(newp) > oldtail) {
- if (lseek(db->pagf, 0L, SEEK_END) < 0 ||
- write(db->pagf, zer, PBLKSIZ) < 0) {
-
- return 0;
- }
- oldtail += PBLKSIZ;
- }
-#endif
- if (hash & (db->hmask + 1)) {
- if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0
- || write(db->pagf, db->pagbuf, PBLKSIZ) < 0)
- return 0;
- db->pagbno = newp;
- (void) memcpy(pag, New, PBLKSIZ);
- }
- else if (lseek(db->pagf, OFF_PAG(newp), SEEK_SET) < 0
- || write(db->pagf, New, PBLKSIZ) < 0)
- return 0;
-
- if (!setdbit(db, db->curbit))
- return 0;
-/*
- * see if we have enough room now
- */
- if (fitpair(pag, need))
- return 1;
-/*
- * try again... update curbit and hmask as getpage would have
- * done. because of our update of the current page, we do not
- * need to read in anything. BUT we have to write the current
- * [deferred] page out, as the window of failure is too great.
- */
- db->curbit = 2 * db->curbit +
- ((hash & (db->hmask + 1)) ? 2 : 1);
- db->hmask |= db->hmask + 1;
-
- if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0
- || write(db->pagf, db->pagbuf, PBLKSIZ) < 0)
- return 0;
-
- } while (--smax);
-/*
- * if we are here, this is real bad news. After SPLTMAX splits,
- * we still cannot fit the key. say goodnight.
- */
-#ifdef BADMESS
- (void) write(2, "sdbm: cannot insert after SPLTMAX attempts.\n", 44);
-#endif
- return 0;
-
-}
-
-/*
- * the following two routines will break if
- * deletions aren't taken into account. (ndbm bug)
- */
-datum
-sdbm_firstkey(register DBM *db)
-{
- if (db == NULL)
- return errno = EINVAL, nullitem;
-/*
- * start at page 0
- */
- if (lseek(db->pagf, OFF_PAG(0), SEEK_SET) < 0
- || read(db->pagf, db->pagbuf, PBLKSIZ) < 0)
- return ioerr(db), nullitem;
- db->pagbno = 0;
- db->blkptr = 0;
- db->keyptr = 0;
-
- return getnext(db);
-}
-
-datum
-sdbm_nextkey(register DBM *db)
-{
- if (db == NULL)
- return errno = EINVAL, nullitem;
- return getnext(db);
-}
-
-/*
- * all important binary trie traversal
- */
-static int
-getpage(register DBM *db, register long int hash)
-{
- register int hbit;
- register long dbit;
- register long pagb;
-
- dbit = 0;
- hbit = 0;
- while (dbit < db->maxbno && getdbit(db, dbit))
- dbit = 2 * dbit + ((hash & (1 << hbit++)) ? 2 : 1);
-
- debug(("dbit: %d...", dbit));
-
- db->curbit = dbit;
- db->hmask = masks[hbit];
-
- pagb = hash & db->hmask;
-/*
- * see if the block we need is already in memory.
- * note: this lookaside cache has about 10% hit rate.
- */
- if (pagb != db->pagbno) {
-/*
- * note: here, we assume a "hole" is read as 0s.
- * if not, must zero pagbuf first.
- */
- if (lseek(db->pagf, OFF_PAG(pagb), SEEK_SET) < 0
- || read(db->pagf, db->pagbuf, PBLKSIZ) < 0)
- return 0;
- if (!chkpage(db->pagbuf))
- return 0;
- db->pagbno = pagb;
-
- debug(("pag read: %d\n", pagb));
- }
- return 1;
-}
-
-static int
-getdbit(register DBM *db, register long int dbit)
-{
- register long c;
- register long dirb;
-
- c = dbit / BYTESIZ;
- dirb = c / DBLKSIZ;
-
- if (dirb != db->dirbno) {
- int got;
- if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0
- || (got=read(db->dirf, db->dirbuf, DBLKSIZ)) < 0)
- return 0;
- if (got==0)
- memset(db->dirbuf,0,DBLKSIZ);
- db->dirbno = dirb;
-
- debug(("dir read: %d\n", dirb));
- }
-
- return db->dirbuf[c % DBLKSIZ] & (1 << dbit % BYTESIZ);
-}
-
-static int
-setdbit(register DBM *db, register long int dbit)
-{
- register long c;
- register long dirb;
-
- c = dbit / BYTESIZ;
- dirb = c / DBLKSIZ;
-
- if (dirb != db->dirbno) {
- int got;
- if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0
- || (got=read(db->dirf, db->dirbuf, DBLKSIZ)) < 0)
- return 0;
- if (got==0)
- memset(db->dirbuf,0,DBLKSIZ);
- db->dirbno = dirb;
-
- debug(("dir read: %d\n", dirb));
- }
-
- db->dirbuf[c % DBLKSIZ] |= (1 << dbit % BYTESIZ);
-
-#if 0
- if (dbit >= db->maxbno)
- db->maxbno += DBLKSIZ * BYTESIZ;
-#else
- if (OFF_DIR((dirb+1))*BYTESIZ > db->maxbno)
- db->maxbno=OFF_DIR((dirb+1))*BYTESIZ;
-#endif
-
- if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0
- || write(db->dirf, db->dirbuf, DBLKSIZ) < 0)
- return 0;
-
- return 1;
-}
-
-/*
- * getnext - get the next key in the page, and if done with
- * the page, try the next page in sequence
- */
-static datum
-getnext(register DBM *db)
-{
- datum key;
-
- for (;;) {
- db->keyptr++;
- key = getnkey(db->pagbuf, db->keyptr);
- if (key.dptr != NULL)
- return key;
-/*
- * we either run out, or there is nothing on this page..
- * try the next one... If we lost our position on the
- * file, we will have to seek.
- */
- db->keyptr = 0;
- if (db->pagbno != db->blkptr++)
- if (lseek(db->pagf, OFF_PAG(db->blkptr), SEEK_SET) < 0)
- break;
- db->pagbno = db->blkptr;
- if (read(db->pagf, db->pagbuf, PBLKSIZ) <= 0)
- break;
- if (!chkpage(db->pagbuf))
- break;
- }
-
- return ioerr(db), nullitem;
-}
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/sdbm.h b/contrib/perl5/ext/SDBM_File/sdbm/sdbm.h
deleted file mode 100644
index 86ba82d..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/sdbm.h
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * sdbm - ndbm work-alike hashed database library
- * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
- * author: oz@nexus.yorku.ca
- * status: public domain.
- */
-#define DBLKSIZ 4096
-#define PBLKSIZ 1024
-#define PAIRMAX 1008 /* arbitrary on PBLKSIZ-N */
-#define SPLTMAX 10 /* maximum allowed splits */
- /* for a single insertion */
-#ifdef VMS
-#define DIRFEXT ".sdbm_dir"
-#else
-#define DIRFEXT ".dir"
-#endif
-#define PAGFEXT ".pag"
-
-typedef struct {
- int dirf; /* directory file descriptor */
- int pagf; /* page file descriptor */
- int flags; /* status/error flags, see below */
- long maxbno; /* size of dirfile in bits */
- long curbit; /* current bit number */
- long hmask; /* current hash mask */
- long blkptr; /* current block for nextkey */
- int keyptr; /* current key for nextkey */
- long blkno; /* current page to read/write */
- long pagbno; /* current page in pagbuf */
- char pagbuf[PBLKSIZ]; /* page file block buffer */
- long dirbno; /* current block in dirbuf */
- char dirbuf[DBLKSIZ]; /* directory file block buffer */
-} DBM;
-
-#define DBM_RDONLY 0x1 /* data base open read-only */
-#define DBM_IOERR 0x2 /* data base I/O error */
-
-/*
- * utility macros
- */
-#define sdbm_rdonly(db) ((db)->flags & DBM_RDONLY)
-#define sdbm_error(db) ((db)->flags & DBM_IOERR)
-
-#define sdbm_clearerr(db) ((db)->flags &= ~DBM_IOERR) /* ouch */
-
-#define sdbm_dirfno(db) ((db)->dirf)
-#define sdbm_pagfno(db) ((db)->pagf)
-
-typedef struct {
- char *dptr;
- int dsize;
-} datum;
-
-EXTCONST datum nullitem
-#ifdef DOINIT
- = {0, 0}
-#endif
- ;
-
-#if defined(__STDC__) || defined(__cplusplus) || defined(CAN_PROTOTYPE)
-#define proto(p) p
-#else
-#define proto(p) ()
-#endif
-
-/*
- * flags to sdbm_store
- */
-#define DBM_INSERT 0
-#define DBM_REPLACE 1
-
-/*
- * ndbm interface
- */
-extern DBM *sdbm_open proto((char *, int, int));
-extern void sdbm_close proto((DBM *));
-extern datum sdbm_fetch proto((DBM *, datum));
-extern int sdbm_delete proto((DBM *, datum));
-extern int sdbm_store proto((DBM *, datum, datum, int));
-extern datum sdbm_firstkey proto((DBM *));
-extern datum sdbm_nextkey proto((DBM *));
-extern int sdbm_exists proto((DBM *, datum));
-
-/*
- * other
- */
-extern DBM *sdbm_prep proto((char *, char *, int, int));
-extern long sdbm_hash proto((char *, int));
-
-#ifndef SDBM_ONLY
-#define dbm_open sdbm_open
-#define dbm_close sdbm_close
-#define dbm_fetch sdbm_fetch
-#define dbm_store sdbm_store
-#define dbm_delete sdbm_delete
-#define dbm_firstkey sdbm_firstkey
-#define dbm_nextkey sdbm_nextkey
-#define dbm_error sdbm_error
-#define dbm_clearerr sdbm_clearerr
-#endif
-
-/* Most of the following is stolen from perl.h. We don't include
- perl.h here because we just want the portability parts of perl.h,
- not everything else.
-*/
-#ifndef H_PERL /* Include guard */
-#include "embed.h" /* Follow all the global renamings. */
-
-/*
- * The following contortions are brought to you on behalf of all the
- * standards, semi-standards, de facto standards, not-so-de-facto standards
- * of the world, as well as all the other botches anyone ever thought of.
- * The basic theory is that if we work hard enough here, the rest of the
- * code can be a lot prettier. Well, so much for theory. Sorry, Henry...
- */
-
-#include <errno.h>
-#ifdef HAS_SOCKET
-# ifdef I_NET_ERRNO
-# include <net/errno.h>
-# endif
-#endif
-
-#if defined(__STDC__) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
-# define STANDARD_C 1
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <setjmp.h>
-
-#if defined(I_UNISTD)
-#include <unistd.h>
-#endif
-
-#ifdef VMS
-# include <file.h>
-# include <unixio.h>
-#endif
-
-#ifdef I_SYS_PARAM
-# if !defined(MSDOS) && !defined(WIN32) && !defined(VMS)
-# ifdef PARAM_NEEDS_TYPES
-# include <sys/types.h>
-# endif
-# include <sys/param.h>
-# endif
-#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
-
-#include <sys/stat.h>
-
-#ifndef SEEK_SET
-# ifdef L_SET
-# define SEEK_SET L_SET
-# else
-# define SEEK_SET 0 /* Wild guess. */
-# endif
-#endif
-
-/* Use all the "standard" definitions? */
-#if defined(STANDARD_C) && defined(I_STDLIB)
-# include <stdlib.h>
-#endif /* STANDARD_C */
-
-#define MEM_SIZE Size_t
-
-/* This comes after <stdlib.h> so we don't try to change the standard
- * library prototypes; we'll use our own instead. */
-
-#if defined(MYMALLOC) && !defined(PERL_POLLUTE_MALLOC)
-# define malloc Perl_malloc
-# define calloc Perl_calloc
-# define realloc Perl_realloc
-# define free Perl_mfree
-
-Malloc_t Perl_malloc proto((MEM_SIZE nbytes));
-Malloc_t Perl_calloc proto((MEM_SIZE elements, MEM_SIZE size));
-Malloc_t Perl_realloc proto((Malloc_t where, MEM_SIZE nbytes));
-Free_t Perl_mfree proto((Malloc_t where));
-#endif /* MYMALLOC */
-
-#ifdef I_STRING
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-
-#ifdef I_MEMORY
-#include <memory.h>
-#endif
-
-#ifdef __cplusplus
-#define HAS_MEMCPY
-#endif
-
-#ifdef HAS_MEMCPY
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memcpy
- extern char * memcpy proto((char*, char*, int));
-# endif
-# endif
-#else
-# ifndef memcpy
-# ifdef HAS_BCOPY
-# define memcpy(d,s,l) bcopy(s,d,l)
-# else
-# define memcpy(d,s,l) my_bcopy(s,d,l)
-# endif
-# endif
-#endif /* HAS_MEMCPY */
-
-#ifdef HAS_MEMSET
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memset
- extern char *memset proto((char*, int, int));
-# endif
-# endif
-# define memzero(d,l) memset(d,0,l)
-#else
-# ifndef memzero
-# ifdef HAS_BZERO
-# define memzero(d,l) bzero(d,l)
-# else
-# define memzero(d,l) my_bzero(d,l)
-# endif
-# endif
-#endif /* HAS_MEMSET */
-
-#if defined(mips) && defined(ultrix) && !defined(__STDC__)
-# undef HAS_MEMCMP
-#endif
-
-#if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memcmp
- extern int memcmp proto((char*, char*, int));
-# endif
-# endif
-# ifdef BUGGY_MSC
- # pragma function(memcmp)
-# endif
-#else
-# ifndef memcmp
- /* maybe we should have included the full embedding header... */
-# ifdef NO_EMBED
-# define memcmp my_memcmp
-# else
-# define memcmp Perl_my_memcmp
-# endif
-#ifndef __cplusplus
- extern int memcmp proto((char*, char*, int));
-#endif
-# endif
-#endif /* HAS_MEMCMP */
-
-#ifndef HAS_BCMP
-# ifndef bcmp
-# define bcmp(s1,s2,l) memcmp(s1,s2,l)
-# endif
-#endif /* !HAS_BCMP */
-
-#ifdef HAS_MEMCMP
-# define memNE(s1,s2,l) (memcmp(s1,s2,l))
-# define memEQ(s1,s2,l) (!memcmp(s1,s2,l))
-#else
-# define memNE(s1,s2,l) (bcmp(s1,s2,l))
-# define memEQ(s1,s2,l) (!bcmp(s1,s2,l))
-#endif
-
-#ifdef I_NETINET_IN
-# ifdef VMS
-# include <in.h>
-# else
-# include <netinet/in.h>
-# endif
-#endif
-
-#endif /* Include guard */
-
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/tune.h b/contrib/perl5/ext/SDBM_File/sdbm/tune.h
deleted file mode 100644
index b95c8c8..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/tune.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * sdbm - ndbm work-alike hashed database library
- * tuning and portability constructs [not nearly enough]
- * author: oz@nexus.yorku.ca
- */
-
-#define BYTESIZ 8
-
-/*
- * important tuning parms (hah)
- */
-
-#define SEEDUPS /* always detect duplicates */
-#define BADMESS /* generate a message for worst case:
- cannot make room after SPLTMAX splits */
-/*
- * misc
- */
-#ifdef DEBUG
-#define debug(x) printf x
-#else
-#define debug(x)
-#endif
diff --git a/contrib/perl5/ext/SDBM_File/sdbm/util.c b/contrib/perl5/ext/SDBM_File/sdbm/util.c
deleted file mode 100644
index 16bd4ac..0000000
--- a/contrib/perl5/ext/SDBM_File/sdbm/util.c
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <stdio.h>
-#ifdef SDBM
-#include "sdbm.h"
-#else
-#include "ndbm.h"
-#endif
-
-void
-oops(register char *s1, register char *s2)
-{
- extern int errno, sys_nerr;
- extern char *sys_errlist[];
- extern char *progname;
-
- if (progname)
- fprintf(stderr, "%s: ", progname);
- fprintf(stderr, s1, s2);
- if (errno > 0 && errno < sys_nerr)
- fprintf(stderr, " (%s)", sys_errlist[errno]);
- fprintf(stderr, "\n");
- exit(1);
-}
-
-int
-okpage(char *pag)
-{
- register unsigned n;
- register off;
- register short *ino = (short *) pag;
-
- if ((n = ino[0]) > PBLKSIZ / sizeof(short))
- return 0;
-
- if (!n)
- return 1;
-
- off = PBLKSIZ;
- for (ino++; n; ino += 2) {
- if (ino[0] > off || ino[1] > off ||
- ino[1] > ino[0])
- return 0;
- off = ino[1];
- n -= 2;
- }
-
- return 1;
-}
diff --git a/contrib/perl5/ext/SDBM_File/typemap b/contrib/perl5/ext/SDBM_File/typemap
deleted file mode 100644
index 40b95f2..0000000
--- a/contrib/perl5/ext/SDBM_File/typemap
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-#################################### DBM SECTION
-#
-
-datum_key T_DATUM_K
-datum_value T_DATUM_V
-gdatum T_GDATUM
-NDBM_File T_PTROBJ
-GDBM_File T_PTROBJ
-SDBM_File T_PTROBJ
-ODBM_File T_PTROBJ
-DB_File T_PTROBJ
-DBZ_File T_PTROBJ
-FATALFUNC T_OPAQUEPTR
-
-INPUT
-T_DATUM_K
- ckFilter($arg, filter_store_key, \"filter_store_key\");
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
-T_DATUM_V
- ckFilter($arg, filter_store_value, \"filter_store_value\");
- if (SvOK($arg)) {
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
- }
- else {
- $var.dptr = \"\";
- $var.dsize = 0;
- }
-T_GDATUM
- UNIMPLEMENTED
-OUTPUT
-T_DATUM_K
- sv_setpvn($arg, $var.dptr, $var.dsize);
- ckFilter($arg, filter_fetch_key,\"filter_fetch_key\");
-T_DATUM_V
- sv_setpvn($arg, $var.dptr, $var.dsize);
- ckFilter($arg, filter_fetch_value,\"filter_fetch_value\");
-T_GDATUM
- sv_usepvn($arg, $var.dptr, $var.dsize);
-T_PTROBJ
- sv_setref_pv($arg, dbtype, (void*)$var);
diff --git a/contrib/perl5/ext/Socket/Makefile.PL b/contrib/perl5/ext/Socket/Makefile.PL
deleted file mode 100644
index 339c45a..0000000
--- a/contrib/perl5/ext/Socket/Makefile.PL
+++ /dev/null
@@ -1,9 +0,0 @@
-use ExtUtils::MakeMaker;
-use Config;
-WriteMakefile(
- NAME => 'Socket',
- VERSION_FROM => 'Socket.pm',
- ($Config{libs} =~ /(-lsocks\S*)/ ? (LIBS => [ "$1" ] ) : ()),
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes', # XXX remove later?
-);
diff --git a/contrib/perl5/ext/Socket/Socket.pm b/contrib/perl5/ext/Socket/Socket.pm
deleted file mode 100644
index d89b2f6..0000000
--- a/contrib/perl5/ext/Socket/Socket.pm
+++ /dev/null
@@ -1,453 +0,0 @@
-package Socket;
-
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-$VERSION = "1.72";
-
-=head1 NAME
-
-Socket, sockaddr_in, sockaddr_un, inet_aton, inet_ntoa - load the C socket.h defines and structure manipulators
-
-=head1 SYNOPSIS
-
- use Socket;
-
- $proto = getprotobyname('udp');
- socket(Socket_Handle, PF_INET, SOCK_DGRAM, $proto);
- $iaddr = gethostbyname('hishost.com');
- $port = getservbyname('time', 'udp');
- $sin = sockaddr_in($port, $iaddr);
- send(Socket_Handle, 0, 0, $sin);
-
- $proto = getprotobyname('tcp');
- socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto);
- $port = getservbyname('smtp', 'tcp');
- $sin = sockaddr_in($port,inet_aton("127.1"));
- $sin = sockaddr_in(7,inet_aton("localhost"));
- $sin = sockaddr_in(7,INADDR_LOOPBACK);
- connect(Socket_Handle,$sin);
-
- ($port, $iaddr) = sockaddr_in(getpeername(Socket_Handle));
- $peer_host = gethostbyaddr($iaddr, AF_INET);
- $peer_addr = inet_ntoa($iaddr);
-
- $proto = getprotobyname('tcp');
- socket(Socket_Handle, PF_UNIX, SOCK_STREAM, $proto);
- unlink('/tmp/usock');
- $sun = sockaddr_un('/tmp/usock');
- connect(Socket_Handle,$sun);
-
-=head1 DESCRIPTION
-
-This module is just a translation of the C F<socket.h> file.
-Unlike the old mechanism of requiring a translated F<socket.ph>
-file, this uses the B<h2xs> program (see the Perl source distribution)
-and your native C compiler. This means that it has a
-far more likely chance of getting the numbers right. This includes
-all of the commonly used pound-defines like AF_INET, SOCK_STREAM, etc.
-
-Also, some common socket "newline" constants are provided: the
-constants C<CR>, C<LF>, and C<CRLF>, as well as C<$CR>, C<$LF>, and
-C<$CRLF>, which map to C<\015>, C<\012>, and C<\015\012>. If you do
-not want to use the literal characters in your programs, then use
-the constants provided here. They are not exported by default, but can
-be imported individually, and with the C<:crlf> export tag:
-
- use Socket qw(:DEFAULT :crlf);
-
-In addition, some structure manipulation functions are available:
-
-=over
-
-=item inet_aton HOSTNAME
-
-Takes a string giving the name of a host, and translates that
-to the 4-byte string (structure). Takes arguments of both
-the 'rtfm.mit.edu' type and '18.181.0.24'. If the host name
-cannot be resolved, returns undef. For multi-homed hosts (hosts
-with more than one address), the first address found is returned.
-
-=item inet_ntoa IP_ADDRESS
-
-Takes a four byte ip address (as returned by inet_aton())
-and translates it into a string of the form 'd.d.d.d'
-where the 'd's are numbers less than 256 (the normal
-readable four dotted number notation for internet addresses).
-
-=item INADDR_ANY
-
-Note: does not return a number, but a packed string.
-
-Returns the 4-byte wildcard ip address which specifies any
-of the hosts ip addresses. (A particular machine can have
-more than one ip address, each address corresponding to
-a particular network interface. This wildcard address
-allows you to bind to all of them simultaneously.)
-Normally equivalent to inet_aton('0.0.0.0').
-
-=item INADDR_BROADCAST
-
-Note: does not return a number, but a packed string.
-
-Returns the 4-byte 'this-lan' ip broadcast address.
-This can be useful for some protocols to solicit information
-from all servers on the same LAN cable.
-Normally equivalent to inet_aton('255.255.255.255').
-
-=item INADDR_LOOPBACK
-
-Note - does not return a number.
-
-Returns the 4-byte loopback address. Normally equivalent
-to inet_aton('localhost').
-
-=item INADDR_NONE
-
-Note - does not return a number.
-
-Returns the 4-byte 'invalid' ip address. Normally equivalent
-to inet_aton('255.255.255.255').
-
-=item sockaddr_in PORT, ADDRESS
-
-=item sockaddr_in SOCKADDR_IN
-
-In a list context, unpacks its SOCKADDR_IN argument and returns an array
-consisting of (PORT, ADDRESS). In a scalar context, packs its (PORT,
-ADDRESS) arguments as a SOCKADDR_IN and returns it. If this is confusing,
-use pack_sockaddr_in() and unpack_sockaddr_in() explicitly.
-
-=item pack_sockaddr_in PORT, IP_ADDRESS
-
-Takes two arguments, a port number and a 4 byte IP_ADDRESS (as returned by
-inet_aton()). Returns the sockaddr_in structure with those arguments
-packed in with AF_INET filled in. For internet domain sockets, this
-structure is normally what you need for the arguments in bind(),
-connect(), and send(), and is also returned by getpeername(),
-getsockname() and recv().
-
-=item unpack_sockaddr_in SOCKADDR_IN
-
-Takes a sockaddr_in structure (as returned by pack_sockaddr_in()) and
-returns an array of two elements: the port and the 4-byte ip-address.
-Will croak if the structure does not have AF_INET in the right place.
-
-=item sockaddr_un PATHNAME
-
-=item sockaddr_un SOCKADDR_UN
-
-In a list context, unpacks its SOCKADDR_UN argument and returns an array
-consisting of (PATHNAME). In a scalar context, packs its PATHNAME
-arguments as a SOCKADDR_UN and returns it. If this is confusing, use
-pack_sockaddr_un() and unpack_sockaddr_un() explicitly.
-These are only supported if your system has E<lt>F<sys/un.h>E<gt>.
-
-=item pack_sockaddr_un PATH
-
-Takes one argument, a pathname. Returns the sockaddr_un structure with
-that path packed in with AF_UNIX filled in. For unix domain sockets, this
-structure is normally what you need for the arguments in bind(),
-connect(), and send(), and is also returned by getpeername(),
-getsockname() and recv().
-
-=item unpack_sockaddr_un SOCKADDR_UN
-
-Takes a sockaddr_un structure (as returned by pack_sockaddr_un())
-and returns the pathname. Will croak if the structure does not
-have AF_UNIX in the right place.
-
-=back
-
-=cut
-
-use Carp;
-use warnings::register;
-
-require Exporter;
-use XSLoader ();
-@ISA = qw(Exporter);
-@EXPORT = qw(
- inet_aton inet_ntoa pack_sockaddr_in unpack_sockaddr_in
- pack_sockaddr_un unpack_sockaddr_un
- sockaddr_in sockaddr_un
- INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE
- AF_802
- AF_APPLETALK
- AF_CCITT
- AF_CHAOS
- AF_DATAKIT
- AF_DECnet
- AF_DLI
- AF_ECMA
- AF_GOSIP
- AF_HYLINK
- AF_IMPLINK
- AF_INET
- AF_LAT
- AF_MAX
- AF_NBS
- AF_NIT
- AF_NS
- AF_OSI
- AF_OSINET
- AF_PUP
- AF_SNA
- AF_UNIX
- AF_UNSPEC
- AF_X25
- IOV_MAX
- MSG_BCAST
- MSG_CTLFLAGS
- MSG_CTLIGNORE
- MSG_CTRUNC
- MSG_DONTROUTE
- MSG_DONTWAIT
- MSG_EOF
- MSG_EOR
- MSG_ERRQUEUE
- MSG_FIN
- MSG_MAXIOVLEN
- MSG_MCAST
- MSG_NOSIGNAL
- MSG_OOB
- MSG_PEEK
- MSG_PROXY
- MSG_RST
- MSG_SYN
- MSG_TRUNC
- MSG_URG
- MSG_WAITALL
- PF_802
- PF_APPLETALK
- PF_CCITT
- PF_CHAOS
- PF_DATAKIT
- PF_DECnet
- PF_DLI
- PF_ECMA
- PF_GOSIP
- PF_HYLINK
- PF_IMPLINK
- PF_INET
- PF_LAT
- PF_MAX
- PF_NBS
- PF_NIT
- PF_NS
- PF_OSI
- PF_OSINET
- PF_PUP
- PF_SNA
- PF_UNIX
- PF_UNSPEC
- PF_X25
- SCM_CONNECT
- SCM_CREDENTIALS
- SCM_CREDS
- SCM_RIGHTS
- SCM_TIMESTAMP
- SHUT_RD
- SHUT_RDWR
- SHUT_WR
- SOCK_DGRAM
- SOCK_RAW
- SOCK_RDM
- SOCK_SEQPACKET
- SOCK_STREAM
- SOL_SOCKET
- SOMAXCONN
- SO_ACCEPTCONN
- SO_BROADCAST
- SO_DEBUG
- SO_DONTLINGER
- SO_DONTROUTE
- SO_ERROR
- SO_KEEPALIVE
- SO_LINGER
- SO_OOBINLINE
- SO_RCVBUF
- SO_RCVLOWAT
- SO_RCVTIMEO
- SO_REUSEADDR
- SO_REUSEPORT
- SO_SNDBUF
- SO_SNDLOWAT
- SO_SNDTIMEO
- SO_TYPE
- SO_USELOOPBACK
- UIO_MAXIOV
-);
-
-@EXPORT_OK = qw(CR LF CRLF $CR $LF $CRLF
-
- IPPROTO_TCP
- TCP_KEEPALIVE
- TCP_MAXRT
- TCP_MAXSEG
- TCP_NODELAY
- TCP_STDURG);
-
-%EXPORT_TAGS = (
- crlf => [qw(CR LF CRLF $CR $LF $CRLF)],
- all => [@EXPORT, @EXPORT_OK],
-);
-
-BEGIN {
- sub CR () {"\015"}
- sub LF () {"\012"}
- sub CRLF () {"\015\012"}
-}
-
-*CR = \CR();
-*LF = \LF();
-*CRLF = \CRLF();
-
-sub sockaddr_in {
- if (@_ == 6 && !wantarray) { # perl5.001m compat; use this && die
- my($af, $port, @quad) = @_;
- warnings::warn "6-ARG sockaddr_in call is deprecated"
- if warnings::enabled();
- pack_sockaddr_in($port, inet_aton(join('.', @quad)));
- } elsif (wantarray) {
- croak "usage: (port,iaddr) = sockaddr_in(sin_sv)" unless @_ == 1;
- unpack_sockaddr_in(@_);
- } else {
- croak "usage: sin_sv = sockaddr_in(port,iaddr))" unless @_ == 2;
- pack_sockaddr_in(@_);
- }
-}
-
-sub sockaddr_un {
- if (wantarray) {
- croak "usage: (filename) = sockaddr_un(sun_sv)" unless @_ == 1;
- unpack_sockaddr_un(@_);
- } else {
- croak "usage: sun_sv = sockaddr_un(filename)" unless @_ == 1;
- pack_sockaddr_un(@_);
- }
-}
-
-sub INADDR_ANY ();
-sub INADDR_BROADCAST ();
-sub INADDR_LOOPBACK ();
-sub INADDR_LOOPBACK ();
-
-sub AF_802 ();
-sub AF_APPLETALK ();
-sub AF_CCITT ();
-sub AF_CHAOS ();
-sub AF_DATAKIT ();
-sub AF_DECnet ();
-sub AF_DLI ();
-sub AF_ECMA ();
-sub AF_GOSIP ();
-sub AF_HYLINK ();
-sub AF_IMPLINK ();
-sub AF_INET ();
-sub AF_LAT ();
-sub AF_MAX ();
-sub AF_NBS ();
-sub AF_NIT ();
-sub AF_NS ();
-sub AF_OSI ();
-sub AF_OSINET ();
-sub AF_PUP ();
-sub AF_SNA ();
-sub AF_UNIX ();
-sub AF_UNSPEC ();
-sub AF_X25 ();
-sub IOV_MAX ();
-sub MSG_BCAST ();
-sub MSG_CTLFLAGS ();
-sub MSG_CTLIGNORE ();
-sub MSG_CTRUNC ();
-sub MSG_DONTROUTE ();
-sub MSG_DONTWAIT ();
-sub MSG_EOF ();
-sub MSG_EOR ();
-sub MSG_ERRQUEUE ();
-sub MSG_FIN ();
-sub MSG_MAXIOVLEN ();
-sub MSG_MCAST ();
-sub MSG_NOSIGNAL ();
-sub MSG_OOB ();
-sub MSG_PEEK ();
-sub MSG_PROXY ();
-sub MSG_RST ();
-sub MSG_SYN ();
-sub MSG_TRUNC ();
-sub MSG_URG ();
-sub MSG_WAITALL ();
-sub PF_802 ();
-sub PF_APPLETALK ();
-sub PF_CCITT ();
-sub PF_CHAOS ();
-sub PF_DATAKIT ();
-sub PF_DECnet ();
-sub PF_DLI ();
-sub PF_ECMA ();
-sub PF_GOSIP ();
-sub PF_HYLINK ();
-sub PF_IMPLINK ();
-sub PF_INET ();
-sub PF_LAT ();
-sub PF_MAX ();
-sub PF_NBS ();
-sub PF_NIT ();
-sub PF_NS ();
-sub PF_OSI ();
-sub PF_OSINET ();
-sub PF_PUP ();
-sub PF_SNA ();
-sub PF_UNIX ();
-sub PF_UNSPEC ();
-sub PF_X25 ();
-sub SCM_CONNECT ();
-sub SCM_CREDENTIALS ();
-sub SCM_CREDS ();
-sub SCM_RIGHTS ();
-sub SCM_TIMESTAMP ();
-sub SHUT_RD ();
-sub SHUT_RDWR ();
-sub SHUT_WR ();
-sub SOCK_DGRAM ();
-sub SOCK_RAW ();
-sub SOCK_RDM ();
-sub SOCK_SEQPACKET ();
-sub SOCK_STREAM ();
-sub SOL_SOCKET ();
-sub SOMAXCONN ();
-sub SO_ACCEPTCONN ();
-sub SO_BROADCAST ();
-sub SO_DEBUG ();
-sub SO_DONTLINGER ();
-sub SO_DONTROUTE ();
-sub SO_ERROR ();
-sub SO_KEEPALIVE ();
-sub SO_LINGER ();
-sub SO_OOBINLINE ();
-sub SO_RCVBUF ();
-sub SO_RCVLOWAT ();
-sub SO_RCVTIMEO ();
-sub SO_REUSEADDR ();
-sub SO_SNDBUF ();
-sub SO_SNDLOWAT ();
-sub SO_SNDTIMEO ();
-sub SO_TYPE ();
-sub SO_USELOOPBACK ();
-sub UIO_MAXIOV ();
-
-sub AUTOLOAD {
- my($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my $val = constant($constname, @_ ? $_[0] : 0);
- if ($! != 0) {
- my ($pack,$file,$line) = caller;
- croak "Your vendor has not defined Socket macro $constname, used";
- }
- eval "sub $AUTOLOAD () { $val }";
- goto &$AUTOLOAD;
-}
-
-XSLoader::load 'Socket', $VERSION;
-
-1;
diff --git a/contrib/perl5/ext/Socket/Socket.xs b/contrib/perl5/ext/Socket/Socket.xs
deleted file mode 100644
index e089829..0000000
--- a/contrib/perl5/ext/Socket/Socket.xs
+++ /dev/null
@@ -1,1116 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifndef VMS
-# ifdef I_SYS_TYPES
-# include <sys/types.h>
-# endif
-# include <sys/socket.h>
-# if defined(USE_SOCKS) && defined(I_SOCKS)
-# include <socks.h>
-# endif
-# ifdef MPE
-# define PF_INET AF_INET
-# define PF_UNIX AF_UNIX
-# define SOCK_RAW 3
-# endif
-# ifdef I_SYS_UN
-# include <sys/un.h>
-# endif
-/* XXX Configure test for <netinet/in_systm.h needed XXX */
-# if defined(NeXT) || defined(__NeXT__)
-# include <netinet/in_systm.h>
-# endif
-# ifdef I_NETINET_IN
-# include <netinet/in.h>
-# endif
-# ifdef I_NETDB
-# include <netdb.h>
-# endif
-# ifdef I_ARPA_INET
-# include <arpa/inet.h>
-# endif
-# ifdef I_NETINET_TCP
-# include <netinet/tcp.h>
-# endif
-#else
-# include "sockadapt.h"
-#endif
-
-#ifdef I_SYSUIO
-# include <sys/uio.h>
-#endif
-
-#ifndef AF_NBS
-# undef PF_NBS
-#endif
-
-#ifndef AF_X25
-# undef PF_X25
-#endif
-
-#ifndef INADDR_NONE
-# define INADDR_NONE 0xffffffff
-#endif /* INADDR_NONE */
-#ifndef INADDR_BROADCAST
-# define INADDR_BROADCAST 0xffffffff
-#endif /* INADDR_BROADCAST */
-#ifndef INADDR_LOOPBACK
-# define INADDR_LOOPBACK 0x7F000001
-#endif /* INADDR_LOOPBACK */
-
-#ifndef HAS_INET_ATON
-
-/*
- * Check whether "cp" is a valid ascii representation
- * of an Internet address and convert to a binary address.
- * Returns 1 if the address is valid, 0 if not.
- * This replaces inet_addr, the return value from which
- * cannot distinguish between failure and a local broadcast address.
- */
-static int
-my_inet_aton(register const char *cp, struct in_addr *addr)
-{
- dTHX;
- register U32 val;
- register int base;
- register char c;
- int nparts;
- const char *s;
- unsigned int parts[4];
- register unsigned int *pp = parts;
-
- if (!cp)
- return 0;
- for (;;) {
- /*
- * Collect number up to ``.''.
- * Values are specified as for C:
- * 0x=hex, 0=octal, other=decimal.
- */
- val = 0; base = 10;
- if (*cp == '0') {
- if (*++cp == 'x' || *cp == 'X')
- base = 16, cp++;
- else
- base = 8;
- }
- while ((c = *cp) != '\0') {
- if (isDIGIT(c)) {
- val = (val * base) + (c - '0');
- cp++;
- continue;
- }
- if (base == 16 && (s=strchr(PL_hexdigit,c))) {
- val = (val << 4) +
- ((s - PL_hexdigit) & 15);
- cp++;
- continue;
- }
- break;
- }
- if (*cp == '.') {
- /*
- * Internet format:
- * a.b.c.d
- * a.b.c (with c treated as 16-bits)
- * a.b (with b treated as 24 bits)
- */
- if (pp >= parts + 3 || val > 0xff)
- return 0;
- *pp++ = val, cp++;
- } else
- break;
- }
- /*
- * Check for trailing characters.
- */
- if (*cp && !isSPACE(*cp))
- return 0;
- /*
- * Concoct the address according to
- * the number of parts specified.
- */
- nparts = pp - parts + 1; /* force to an int for switch() */
- switch (nparts) {
-
- case 1: /* a -- 32 bits */
- break;
-
- case 2: /* a.b -- 8.24 bits */
- if (val > 0xffffff)
- return 0;
- val |= parts[0] << 24;
- break;
-
- case 3: /* a.b.c -- 8.8.16 bits */
- if (val > 0xffff)
- return 0;
- val |= (parts[0] << 24) | (parts[1] << 16);
- break;
-
- case 4: /* a.b.c.d -- 8.8.8.8 bits */
- if (val > 0xff)
- return 0;
- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
- break;
- }
- addr->s_addr = htonl(val);
- return 1;
-}
-
-#undef inet_aton
-#define inet_aton my_inet_aton
-
-#endif /* ! HAS_INET_ATON */
-
-
-static int
-not_here(char *s)
-{
- croak("Socket::%s not implemented on this architecture", s);
- return -1;
-}
-
-static double
-constant(char *name, int arg)
-{
- errno = 0;
- switch (*name) {
- case 'A':
- if (strEQ(name, "AF_802"))
-#ifdef AF_802
- return AF_802;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_APPLETALK"))
-#ifdef AF_APPLETALK
- return AF_APPLETALK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_CCITT"))
-#ifdef AF_CCITT
- return AF_CCITT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_CHAOS"))
-#ifdef AF_CHAOS
- return AF_CHAOS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_DATAKIT"))
-#ifdef AF_DATAKIT
- return AF_DATAKIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_DECnet"))
-#ifdef AF_DECnet
- return AF_DECnet;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_DLI"))
-#ifdef AF_DLI
- return AF_DLI;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_ECMA"))
-#ifdef AF_ECMA
- return AF_ECMA;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_GOSIP"))
-#ifdef AF_GOSIP
- return AF_GOSIP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_HYLINK"))
-#ifdef AF_HYLINK
- return AF_HYLINK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_IMPLINK"))
-#ifdef AF_IMPLINK
- return AF_IMPLINK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_INET"))
-#ifdef AF_INET
- return AF_INET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_LAT"))
-#ifdef AF_LAT
- return AF_LAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_MAX"))
-#ifdef AF_MAX
- return AF_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_NBS"))
-#ifdef AF_NBS
- return AF_NBS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_NIT"))
-#ifdef AF_NIT
- return AF_NIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_NS"))
-#ifdef AF_NS
- return AF_NS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_OSI"))
-#ifdef AF_OSI
- return AF_OSI;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_OSINET"))
-#ifdef AF_OSINET
- return AF_OSINET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_PUP"))
-#ifdef AF_PUP
- return AF_PUP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_SNA"))
-#ifdef AF_SNA
- return AF_SNA;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_UNIX"))
-#ifdef AF_UNIX
- return AF_UNIX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_UNSPEC"))
-#ifdef AF_UNSPEC
- return AF_UNSPEC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "AF_X25"))
-#ifdef AF_X25
- return AF_X25;
-#else
- goto not_there;
-#endif
- break;
- case 'B':
- break;
- case 'C':
- break;
- case 'D':
- break;
- case 'E':
- break;
- case 'F':
- break;
- case 'G':
- break;
- case 'H':
- break;
- case 'I':
- if (strEQ(name, "IOV_MAX"))
-#ifdef IOV_MAX
- return IOV_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "IPPROTO_TCP"))
-#ifdef IPPROTO_TCP
- return IPPROTO_TCP;
-#else
- goto not_there;
-#endif
- break;
- case 'J':
- break;
- case 'K':
- break;
- case 'L':
- break;
- case 'M':
- if (strEQ(name, "MSG_BCAST"))
-#ifdef MSG_BCAST
- return MSG_BCAST;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_CTLFLAGS"))
-#ifdef MSG_CTLFLAGS
- return MSG_CTLFLAGS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_CTLIGNORE"))
-#ifdef MSG_CTLIGNORE
- return MSG_CTLIGNORE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_CTRUNC"))
-#if defined(MSG_TRUNC) || defined(HAS_MSG_CTRUNC) /* might be an enum */
- return MSG_CTRUNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_DONTROUTE"))
-#if defined(MSG_DONTROUTE) || defined(HAS_MSG_DONTROUTE) /* might be an enum */
- return MSG_DONTROUTE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_DONTWAIT"))
-#ifdef MSG_DONTWAIT
- return MSG_DONTWAIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_EOF"))
-#ifdef MSG_EOF
- return MSG_EOF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_EOR"))
-#ifdef MSG_EOR
- return MSG_EOR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_ERRQUEUE"))
-#ifdef MSG_ERRQUEUE
- return MSG_ERRQUEUE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_FIN"))
-#ifdef MSG_FIN
- return MSG_FIN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_MAXIOVLEN"))
-#ifdef MSG_MAXIOVLEN
- return MSG_MAXIOVLEN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_MCAST"))
-#ifdef MSG_MCAST
- return MSG_MCAST;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_NOSIGNAL"))
-#ifdef MSG_NOSIGNAL
- return MSG_NOSIGNAL;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_OOB"))
-#if defined(MSG_OOB) || defined(HAS_MSG_OOB) /* might be an enum */
- return MSG_OOB;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_PEEK"))
-#if defined(MSG_PEEK) || defined(HAS_MSG_PEEK) /* might be an enum */
- return MSG_PEEK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_PROXY"))
-#if defined(MSG_PROXY) || defined(HAS_MSG_PROXY) /* might be an enum */
- return MSG_PROXY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_RST"))
-#ifdef MSG_RST
- return MSG_RST;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_SYN"))
-#ifdef MSG_SYN
- return MSG_SYN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_TRUNC"))
-#ifdef MSG_TRUNC
- return MSG_TRUNC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "MSG_WAITALL"))
-#ifdef MSG_WAITALL
- return MSG_WAITALL;
-#else
- goto not_there;
-#endif
- break;
- case 'N':
- break;
- case 'O':
- break;
- case 'P':
- if (strEQ(name, "PF_802"))
-#ifdef PF_802
- return PF_802;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_APPLETALK"))
-#ifdef PF_APPLETALK
- return PF_APPLETALK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_CCITT"))
-#ifdef PF_CCITT
- return PF_CCITT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_CHAOS"))
-#ifdef PF_CHAOS
- return PF_CHAOS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_DATAKIT"))
-#ifdef PF_DATAKIT
- return PF_DATAKIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_DECnet"))
-#ifdef PF_DECnet
- return PF_DECnet;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_DLI"))
-#ifdef PF_DLI
- return PF_DLI;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_ECMA"))
-#ifdef PF_ECMA
- return PF_ECMA;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_GOSIP"))
-#ifdef PF_GOSIP
- return PF_GOSIP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_HYLINK"))
-#ifdef PF_HYLINK
- return PF_HYLINK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_IMPLINK"))
-#ifdef PF_IMPLINK
- return PF_IMPLINK;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_INET"))
-#ifdef PF_INET
- return PF_INET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_LAT"))
-#ifdef PF_LAT
- return PF_LAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_MAX"))
-#ifdef PF_MAX
- return PF_MAX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_NBS"))
-#ifdef PF_NBS
- return PF_NBS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_NIT"))
-#ifdef PF_NIT
- return PF_NIT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_NS"))
-#ifdef PF_NS
- return PF_NS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_OSI"))
-#ifdef PF_OSI
- return PF_OSI;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_OSINET"))
-#ifdef PF_OSINET
- return PF_OSINET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_PUP"))
-#ifdef PF_PUP
- return PF_PUP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_SNA"))
-#ifdef PF_SNA
- return PF_SNA;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_UNIX"))
-#ifdef PF_UNIX
- return PF_UNIX;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_UNSPEC"))
-#ifdef PF_UNSPEC
- return PF_UNSPEC;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "PF_X25"))
-#ifdef PF_X25
- return PF_X25;
-#else
- goto not_there;
-#endif
- break;
- case 'Q':
- break;
- case 'R':
- break;
- case 'S':
- if (strEQ(name, "SCM_CONNECT"))
-#ifdef SCM_CONNECT
- return SCM_CONNECT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SCM_CREDENTIALS"))
-#ifdef SCM_CREDENTIALS
- return SCM_CREDENTIALS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SCM_CREDS"))
-#ifdef SCM_CREDS
- return SCM_CREDS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SCM_RIGHTS"))
-#if defined(SCM_RIGHTS) || defined(HAS_SCM_RIGHTS) /* might be an enum */
- return SCM_RIGHTS;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SCM_TIMESTAMP"))
-#ifdef SCM_TIMESTAMP
- return SCM_TIMESTAMP;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SHUT_RD"))
-#ifdef SHUT_RD
- return SHUT_RD;
-#else
- return 0;
-#endif
- if (strEQ(name, "SHUT_RDWR"))
-#ifdef SHUT_RDWR
- return SHUT_RDWR;
-#else
- return 2;
-#endif
- if (strEQ(name, "SHUT_WR"))
-#ifdef SHUT_WR
- return SHUT_WR;
-#else
- return 1;
-#endif
- if (strEQ(name, "SOCK_DGRAM"))
-#ifdef SOCK_DGRAM
- return SOCK_DGRAM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SOCK_RAW"))
-#ifdef SOCK_RAW
- return SOCK_RAW;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SOCK_RDM"))
-#ifdef SOCK_RDM
- return SOCK_RDM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SOCK_SEQPACKET"))
-#ifdef SOCK_SEQPACKET
- return SOCK_SEQPACKET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SOCK_STREAM"))
-#ifdef SOCK_STREAM
- return SOCK_STREAM;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SOL_SOCKET"))
-#ifdef SOL_SOCKET
- return SOL_SOCKET;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SOMAXCONN"))
-#ifdef SOMAXCONN
- return SOMAXCONN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_ACCEPTCONN"))
-#ifdef SO_ACCEPTCONN
- return SO_ACCEPTCONN;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_BROADCAST"))
-#ifdef SO_BROADCAST
- return SO_BROADCAST;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_DEBUG"))
-#ifdef SO_DEBUG
- return SO_DEBUG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_DONTLINGER"))
-#ifdef SO_DONTLINGER
- return SO_DONTLINGER;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_DONTROUTE"))
-#ifdef SO_DONTROUTE
- return SO_DONTROUTE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_ERROR"))
-#ifdef SO_ERROR
- return SO_ERROR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_KEEPALIVE"))
-#ifdef SO_KEEPALIVE
- return SO_KEEPALIVE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_LINGER"))
-#ifdef SO_LINGER
- return SO_LINGER;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_OOBINLINE"))
-#ifdef SO_OOBINLINE
- return SO_OOBINLINE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_RCVBUF"))
-#ifdef SO_RCVBUF
- return SO_RCVBUF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_RCVLOWAT"))
-#ifdef SO_RCVLOWAT
- return SO_RCVLOWAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_RCVTIMEO"))
-#ifdef SO_RCVTIMEO
- return SO_RCVTIMEO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_REUSEADDR"))
-#ifdef SO_REUSEADDR
- return SO_REUSEADDR;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_REUSEPORT"))
-#ifdef SO_REUSEPORT
- return SO_REUSEPORT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_SNDBUF"))
-#ifdef SO_SNDBUF
- return SO_SNDBUF;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_SNDLOWAT"))
-#ifdef SO_SNDLOWAT
- return SO_SNDLOWAT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_SNDTIMEO"))
-#ifdef SO_SNDTIMEO
- return SO_SNDTIMEO;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_TYPE"))
-#ifdef SO_TYPE
- return SO_TYPE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "SO_USELOOPBACK"))
-#ifdef SO_USELOOPBACK
- return SO_USELOOPBACK;
-#else
- goto not_there;
-#endif
- break;
- case 'T':
- if (strEQ(name, "TCP_KEEPALIVE"))
-#ifdef TCP_KEEPALIVE
- return TCP_KEEPALIVE;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCP_MAXRT"))
-#ifdef TCP_MAXRT
- return TCP_MAXRT;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCP_MAXSEG"))
-#ifdef TCP_MAXSEG
- return TCP_MAXSEG;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCP_NODELAY"))
-#ifdef TCP_NODELAY
- return TCP_NODELAY;
-#else
- goto not_there;
-#endif
- if (strEQ(name, "TCP_STDURG"))
-#ifdef TCP_STDURG
- return TCP_STDURG;
-#else
- goto not_there;
-#endif
- break;
- case 'U':
- if (strEQ(name, "UIO_MAXIOV"))
-#ifdef UIO_MAXIOV
- return UIO_MAXIOV;
-#else
- goto not_there;
-#endif
- break;
- case 'V':
- break;
- case 'W':
- break;
- case 'X':
- break;
- case 'Y':
- break;
- case 'Z':
- break;
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-
-MODULE = Socket PACKAGE = Socket
-
-double
-constant(name,arg)
- char * name
- int arg
-
-
-void
-inet_aton(host)
- char * host
- CODE:
- {
- struct in_addr ip_address;
- struct hostent * phe;
- int ok = inet_aton(host, &ip_address);
-
- if (!ok && (phe = gethostbyname(host))) {
- Copy( phe->h_addr, &ip_address, phe->h_length, char );
- ok = 1;
- }
-
- ST(0) = sv_newmortal();
- if (ok) {
- sv_setpvn( ST(0), (char *)&ip_address, sizeof ip_address );
- }
- }
-
-void
-inet_ntoa(ip_address_sv)
- SV * ip_address_sv
- CODE:
- {
- STRLEN addrlen;
- struct in_addr addr;
- char * addr_str;
- char * ip_address = SvPV(ip_address_sv,addrlen);
- if (addrlen != sizeof(addr)) {
- croak("Bad arg length for %s, length is %d, should be %d",
- "Socket::inet_ntoa",
- addrlen, sizeof(addr));
- }
-
- Copy( ip_address, &addr, sizeof addr, char );
- addr_str = inet_ntoa(addr);
-
- ST(0) = sv_2mortal(newSVpvn(addr_str, strlen(addr_str)));
- }
-
-void
-pack_sockaddr_un(pathname)
- char * pathname
- CODE:
- {
-#ifdef I_SYS_UN
- struct sockaddr_un sun_ad; /* fear using sun */
- STRLEN len;
-
- Zero( &sun_ad, sizeof sun_ad, char );
- sun_ad.sun_family = AF_UNIX;
- len = strlen(pathname);
- if (len > sizeof(sun_ad.sun_path))
- len = sizeof(sun_ad.sun_path);
-# ifdef OS2 /* Name should start with \socket\ and contain backslashes! */
- {
- int off;
- char *s, *e;
-
- if (pathname[0] != '/' && pathname[0] != '\\')
- croak("Relative UNIX domain socket name '%s' unsupported", pathname);
- else if (len < 8
- || pathname[7] != '/' && pathname[7] != '\\'
- || !strnicmp(pathname + 1, "socket", 6))
- off = 7;
- else
- off = 0; /* Preserve names starting with \socket\ */
- Copy( "\\socket", sun_ad.sun_path, off, char);
- Copy( pathname, sun_ad.sun_path + off, len, char );
-
- s = sun_ad.sun_path + off - 1;
- e = s + len + 1;
- while (++s < e)
- if (*s = '/')
- *s = '\\';
- }
-# else /* !( defined OS2 ) */
- Copy( pathname, sun_ad.sun_path, len, char );
-# endif
- ST(0) = sv_2mortal(newSVpvn((char *)&sun_ad, sizeof sun_ad));
-#else
- ST(0) = (SV *) not_here("pack_sockaddr_un");
-#endif
-
- }
-
-void
-unpack_sockaddr_un(sun_sv)
- SV * sun_sv
- CODE:
- {
-#ifdef I_SYS_UN
- struct sockaddr_un addr;
- STRLEN sockaddrlen;
- char * sun_ad = SvPV(sun_sv,sockaddrlen);
- char * e;
-# ifndef __linux__
- /* On Linux sockaddrlen on sockets returned by accept, recvfrom,
- getpeername and getsockname is not equal to sizeof(addr). */
- if (sockaddrlen != sizeof(addr)) {
- croak("Bad arg length for %s, length is %d, should be %d",
- "Socket::unpack_sockaddr_un",
- sockaddrlen, sizeof(addr));
- }
-# endif
-
- Copy( sun_ad, &addr, sizeof addr, char );
-
- if ( addr.sun_family != AF_UNIX ) {
- croak("Bad address family for %s, got %d, should be %d",
- "Socket::unpack_sockaddr_un",
- addr.sun_family,
- AF_UNIX);
- }
- e = addr.sun_path;
- while (*e && e < addr.sun_path + sizeof addr.sun_path)
- ++e;
- ST(0) = sv_2mortal(newSVpvn(addr.sun_path, e - addr.sun_path));
-#else
- ST(0) = (SV *) not_here("unpack_sockaddr_un");
-#endif
- }
-
-void
-pack_sockaddr_in(port,ip_address)
- unsigned short port
- char * ip_address
- CODE:
- {
- struct sockaddr_in sin;
-
- Zero( &sin, sizeof sin, char );
- sin.sin_family = AF_INET;
- sin.sin_port = htons(port);
- Copy( ip_address, &sin.sin_addr, sizeof sin.sin_addr, char );
-
- ST(0) = sv_2mortal(newSVpvn((char *)&sin, sizeof sin));
- }
-
-void
-unpack_sockaddr_in(sin_sv)
- SV * sin_sv
- PPCODE:
- {
- STRLEN sockaddrlen;
- struct sockaddr_in addr;
- unsigned short port;
- struct in_addr ip_address;
- char * sin = SvPV(sin_sv,sockaddrlen);
- if (sockaddrlen != sizeof(addr)) {
- croak("Bad arg length for %s, length is %d, should be %d",
- "Socket::unpack_sockaddr_in",
- sockaddrlen, sizeof(addr));
- }
- Copy( sin, &addr,sizeof addr, char );
- if ( addr.sin_family != AF_INET ) {
- croak("Bad address family for %s, got %d, should be %d",
- "Socket::unpack_sockaddr_in",
- addr.sin_family,
- AF_INET);
- }
- port = ntohs(addr.sin_port);
- ip_address = addr.sin_addr;
-
- EXTEND(SP, 2);
- PUSHs(sv_2mortal(newSViv((IV) port)));
- PUSHs(sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address)));
- }
-
-void
-INADDR_ANY()
- CODE:
- {
- struct in_addr ip_address;
- ip_address.s_addr = htonl(INADDR_ANY);
- ST(0) = sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address ));
- }
-
-void
-INADDR_LOOPBACK()
- CODE:
- {
- struct in_addr ip_address;
- ip_address.s_addr = htonl(INADDR_LOOPBACK);
- ST(0) = sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address));
- }
-
-void
-INADDR_NONE()
- CODE:
- {
- struct in_addr ip_address;
- ip_address.s_addr = htonl(INADDR_NONE);
- ST(0) = sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address));
- }
-
-void
-INADDR_BROADCAST()
- CODE:
- {
- struct in_addr ip_address;
- ip_address.s_addr = htonl(INADDR_BROADCAST);
- ST(0) = sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address));
- }
diff --git a/contrib/perl5/ext/Sys/Hostname/Hostname.pm b/contrib/perl5/ext/Sys/Hostname/Hostname.pm
deleted file mode 100644
index 1efc897..0000000
--- a/contrib/perl5/ext/Sys/Hostname/Hostname.pm
+++ /dev/null
@@ -1,153 +0,0 @@
-package Sys::Hostname;
-
-use strict;
-
-use Carp;
-
-require Exporter;
-use XSLoader ();
-require AutoLoader;
-
-our @ISA = qw/ Exporter AutoLoader /;
-our @EXPORT = qw/ hostname /;
-
-our $VERSION = '1.1';
-
-our $host;
-
-XSLoader::load 'Sys::Hostname', $VERSION;
-
-sub hostname {
-
- # method 1 - we already know it
- return $host if defined $host;
-
- # method 1' - try to ask the system
- $host = ghname();
- return $host if defined $host;
-
- if ($^O eq 'VMS') {
-
- # method 2 - no sockets ==> return DECnet node name
- eval { local $SIG{__DIE__}; $host = (gethostbyname('me'))[0] };
- if ($@) { return $host = $ENV{'SYS$NODE'}; }
-
- # method 3 - has someone else done the job already? It's common for the
- # TCP/IP stack to advertise the hostname via a logical name. (Are
- # there any other logicals which TCP/IP stacks use for the host name?)
- $host = $ENV{'ARPANET_HOST_NAME'} || $ENV{'INTERNET_HOST_NAME'} ||
- $ENV{'MULTINET_HOST_NAME'} || $ENV{'UCX$INET_HOST'} ||
- $ENV{'TCPWARE_DOMAINNAME'} || $ENV{'NEWS_ADDRESS'};
- return $host if $host;
-
- # method 4 - does hostname happen to work?
- my($rslt) = `hostname`;
- if ($rslt !~ /IVVERB/) { ($host) = $rslt =~ /^(\S+)/; }
- return $host if $host;
-
- # rats!
- $host = '';
- Carp::croak "Cannot get host name of local machine";
-
- }
- elsif ($^O eq 'MSWin32') {
- ($host) = gethostbyname('localhost');
- chomp($host = `hostname 2> NUL`) unless defined $host;
- return $host;
- }
- elsif ($^O eq 'epoc') {
- $host = 'localhost';
- return $host;
- }
- else { # Unix
- # is anyone going to make it here?
-
- # method 2 - syscall is preferred since it avoids tainting problems
- # XXX: is it such a good idea to return hostname untainted?
- eval {
- local $SIG{__DIE__};
- require "syscall.ph";
- $host = "\0" x 65; ## preload scalar
- syscall(&SYS_gethostname, $host, 65) == 0;
- }
-
- # method 2a - syscall using systeminfo instead of gethostname
- # -- needed on systems like Solaris
- || eval {
- local $SIG{__DIE__};
- require "sys/syscall.ph";
- require "sys/systeminfo.ph";
- $host = "\0" x 65; ## preload scalar
- syscall(&SYS_systeminfo, &SI_HOSTNAME, $host, 65) != -1;
- }
-
- # method 3 - trusty old hostname command
- || eval {
- local $SIG{__DIE__};
- local $SIG{CHLD};
- $host = `(hostname) 2>/dev/null`; # bsdish
- }
-
- # method 4 - use POSIX::uname(), which strictly can't be expected to be
- # correct
- || eval {
- local $SIG{__DIE__};
- require POSIX;
- $host = (POSIX::uname())[1];
- }
-
- # method 5 - sysV uname command (may truncate)
- || eval {
- local $SIG{__DIE__};
- $host = `uname -n 2>/dev/null`; ## sysVish
- }
-
- # method 6 - Apollo pre-SR10
- || eval {
- local $SIG{__DIE__};
- my($a,$b,$c,$d);
- ($host,$a,$b,$c,$d)=split(/[:\. ]/,`/com/host`,6);
- }
-
- # bummer
- || Carp::croak "Cannot get host name of local machine";
-
- # remove garbage
- $host =~ tr/\0\r\n//d;
- $host;
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Sys::Hostname - Try every conceivable way to get hostname
-
-=head1 SYNOPSIS
-
- use Sys::Hostname;
- $host = hostname;
-
-=head1 DESCRIPTION
-
-Attempts several methods of getting the system hostname and
-then caches the result. It tries the first available of the C
-library's gethostname(), C<`$Config{aphostname}`>, uname(2),
-C<syscall(SYS_gethostname)>, C<`hostname`>, C<`uname -n`>,
-and the file F</com/host>. If all that fails it C<croak>s.
-
-All NULs, returns, and newlines are removed from the result.
-
-=head1 AUTHOR
-
-David Sundstrom E<lt>F<sunds@asictest.sc.ti.com>E<gt>
-
-Texas Instruments
-
-XS code added by Greg Bacon E<lt>F<gbacon@cs.uah.edu>E<gt>
-
-=cut
-
diff --git a/contrib/perl5/ext/Sys/Hostname/Hostname.xs b/contrib/perl5/ext/Sys/Hostname/Hostname.xs
deleted file mode 100644
index f104383..0000000
--- a/contrib/perl5/ext/Sys/Hostname/Hostname.xs
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#if defined(I_UNISTD) && defined(HAS_GETHOSTNAME)
-# include <unistd.h>
-#endif
-
-/* a reasonable default */
-#ifndef MAXHOSTNAMELEN
-# define MAXHOSTNAMELEN 256
-#endif
-
-/* swiped from POSIX.xs */
-#if defined(__VMS) && !defined(__POSIX_SOURCE)
-# if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-# include <utsname.h>
-# endif
-#endif
-
-#ifdef I_SYSUTSNAME
-# include <sys/utsname.h>
-#endif
-
-MODULE = Sys::Hostname PACKAGE = Sys::Hostname
-
-void
-ghname()
- PREINIT:
- IV retval = -1;
- SV *sv;
- PPCODE:
- EXTEND(SP, 1);
-#ifdef HAS_GETHOSTNAME
- {
- char tmps[MAXHOSTNAMELEN];
- retval = PerlSock_gethostname(tmps, sizeof(tmps));
- sv = newSVpvn(tmps, strlen(tmps));
- }
-#else
-# ifdef HAS_PHOSTNAME
- {
- PerlIO *io;
- char tmps[MAXHOSTNAMELEN];
- char *p = tmps;
- char c;
- io = PerlProc_popen(PHOSTNAME, "r");
- if (!io)
- goto check_out;
- while (PerlIO_read(io, &c, sizeof(c)) == 1) {
- if (isSPACE(c) || p - tmps >= sizeof(tmps))
- break;
- *p++ = c;
- }
- PerlProc_pclose(io);
- *p = '\0';
- retval = 0;
- sv = newSVpvn(tmps, strlen(tmps));
- }
-# else
-# ifdef HAS_UNAME
- {
- struct utsname u;
- if (PerlEnv_uname(&u) == -1)
- goto check_out;
- sv = newSVpvn(u.nodename, strlen(u.nodename));
- retval = 0;
- }
-# endif
-# endif
-#endif
- check_out:
- if (retval == -1)
- XSRETURN_UNDEF;
- else
- PUSHs(sv_2mortal(sv));
diff --git a/contrib/perl5/ext/Sys/Hostname/Makefile.PL b/contrib/perl5/ext/Sys/Hostname/Makefile.PL
deleted file mode 100644
index a0892f6..0000000
--- a/contrib/perl5/ext/Sys/Hostname/Makefile.PL
+++ /dev/null
@@ -1,8 +0,0 @@
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
- NAME => 'Sys::Hostname',
- VERSION_FROM => 'Hostname.pm',
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes',
-);
diff --git a/contrib/perl5/ext/Sys/Syslog/Makefile.PL b/contrib/perl5/ext/Sys/Syslog/Makefile.PL
deleted file mode 100644
index e5edf3e..0000000
--- a/contrib/perl5/ext/Sys/Syslog/Makefile.PL
+++ /dev/null
@@ -1,8 +0,0 @@
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
- NAME => 'Sys::Syslog',
- VERSION_FROM => 'Syslog.pm',
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes',
-);
diff --git a/contrib/perl5/ext/Sys/Syslog/Syslog.pm b/contrib/perl5/ext/Sys/Syslog/Syslog.pm
deleted file mode 100644
index 92b82a1..0000000
--- a/contrib/perl5/ext/Sys/Syslog/Syslog.pm
+++ /dev/null
@@ -1,302 +0,0 @@
-package Sys::Syslog;
-require 5.000;
-require Exporter;
-require DynaLoader;
-use Carp;
-
-@ISA = qw(Exporter DynaLoader);
-@EXPORT = qw(openlog closelog setlogmask syslog);
-@EXPORT_OK = qw(setlogsock);
-$VERSION = '0.01';
-
-use Socket;
-use Sys::Hostname;
-
-# adapted from syslog.pl
-#
-# Tom Christiansen <tchrist@convex.com>
-# modified to use sockets by Larry Wall <lwall@jpl-devvax.jpl.nasa.gov>
-# NOTE: openlog now takes three arguments, just like openlog(3)
-# Modified to add UNIX domain sockets by Sean Robinson <robinson_s@sc.maricopa.edu>
-# with support from Tim Bunce <Tim.Bunce@ig.co.uk> and the perl5-porters mailing list
-# Modified to use an XS backend instead of syslog.ph by Tom Hughes <tom@compton.nu>
-
-# Todo: enable connect to try all three types before failing (auto setlogsock)?
-
-=head1 NAME
-
-Sys::Syslog, openlog, closelog, setlogmask, syslog - Perl interface to the UNIX syslog(3) calls
-
-=head1 SYNOPSIS
-
- use Sys::Syslog; # all except setlogsock, or:
- use Sys::Syslog qw(:DEFAULT setlogsock); # default set, plus setlogsock
-
- setlogsock $sock_type;
- openlog $ident, $logopt, $facility;
- syslog $priority, $format, @args;
- $oldmask = setlogmask $mask_priority;
- closelog;
-
-=head1 DESCRIPTION
-
-Sys::Syslog is an interface to the UNIX C<syslog(3)> program.
-Call C<syslog()> with a string priority and a list of C<printf()> args
-just like C<syslog(3)>.
-
-Syslog provides the functions:
-
-=over
-
-=item openlog $ident, $logopt, $facility
-
-I<$ident> is prepended to every message.
-I<$logopt> contains zero or more of the words I<pid>, I<ndelay>, I<cons>, I<nowait>.
-I<$facility> specifies the part of the system
-
-=item syslog $priority, $format, @args
-
-If I<$priority> permits, logs I<($format, @args)>
-printed as by C<printf(3V)>, with the addition that I<%m>
-is replaced with C<"$!"> (the latest error message).
-
-=item setlogmask $mask_priority
-
-Sets log mask I<$mask_priority> and returns the old mask.
-
-=item setlogsock $sock_type (added in 5.004_02)
-
-Sets the socket type to be used for the next call to
-C<openlog()> or C<syslog()> and returns TRUE on success,
-undef on failure.
-
-A value of 'unix' will connect to the UNIX domain socket returned by the
-C<_PATH_LOG> macro (if you system defines it) in F<syslog.h>. A value of
-'inet' will connect to an INET socket returned by getservbyname(). If
-C<_PATH_LOG> is unavailable or if getservbyname() fails, returns undef. Any
-other value croaks.
-
-The default is for the INET socket to be used.
-
-=item closelog
-
-Closes the log file.
-
-=back
-
-Note that C<openlog> now takes three arguments, just like C<openlog(3)>.
-
-=head1 EXAMPLES
-
- openlog($program, 'cons,pid', 'user');
- syslog('info', 'this is another test');
- syslog('mail|warning', 'this is a better test: %d', time);
- closelog();
-
- syslog('debug', 'this is the last test');
-
- setlogsock('unix');
- openlog("$program $$", 'ndelay', 'user');
- syslog('notice', 'fooprogram: this is really done');
-
- setlogsock('inet');
- $! = 55;
- syslog('info', 'problem was %m'); # %m == $! in syslog(3)
-
-=head1 SEE ALSO
-
-L<syslog(3)>
-
-=head1 AUTHOR
-
-Tom Christiansen E<lt>F<tchrist@perl.com>E<gt> and Larry Wall
-E<lt>F<larry@wall.org>E<gt>.
-
-UNIX domain sockets added by Sean Robinson
-E<lt>F<robinson_s@sc.maricopa.edu>E<gt> with support from Tim Bunce
-E<lt>F<Tim.Bunce@ig.co.uk>E<gt> and the perl5-porters mailing list.
-
-Dependency on F<syslog.ph> replaced with XS code by Tom Hughes
-E<lt>F<tom@compton.nu>E<gt>.
-
-=cut
-
-sub AUTOLOAD {
- # This AUTOLOAD is used to 'autoload' constants from the constant()
- # XS function.
-
- my $constname;
- our $AUTOLOAD;
- ($constname = $AUTOLOAD) =~ s/.*:://;
- croak "& not defined" if $constname eq 'constant';
- my $val = constant($constname);
- if ($! != 0) {
- croak "Your vendor has not defined Sys::Syslog macro $constname";
- }
- *$AUTOLOAD = sub { $val };
- goto &$AUTOLOAD;
-}
-
-bootstrap Sys::Syslog $VERSION;
-
-$maskpri = &LOG_UPTO(&LOG_DEBUG);
-
-sub openlog {
- ($ident, $logopt, $facility) = @_; # package vars
- $lo_pid = $logopt =~ /\bpid\b/;
- $lo_ndelay = $logopt =~ /\bndelay\b/;
- $lo_cons = $logopt =~ /\bcons\b/;
- $lo_nowait = $logopt =~ /\bnowait\b/;
- return 1 unless $lo_ndelay;
- &connect;
-}
-
-sub closelog {
- $facility = $ident = '';
- &disconnect;
-}
-
-sub setlogmask {
- local($oldmask) = $maskpri;
- $maskpri = shift;
- $oldmask;
-}
-
-sub setlogsock {
- local($setsock) = shift;
- &disconnect if $connected;
- if (lc($setsock) eq 'unix') {
- if (length _PATH_LOG()) {
- $sock_type = 1;
- } else {
- return undef;
- }
- } elsif (lc($setsock) eq 'inet') {
- if (getservbyname('syslog','udp')) {
- undef($sock_type);
- } else {
- return undef;
- }
- } else {
- croak "Invalid argument passed to setlogsock; must be 'unix' or 'inet'";
- }
- return 1;
-}
-
-sub syslog {
- local($priority) = shift;
- local($mask) = shift;
- local($message, $whoami);
- local(@words, $num, $numpri, $numfac, $sum);
- local($facility) = $facility; # may need to change temporarily.
-
- croak "syslog: expected both priority and mask" unless $mask && $priority;
-
- @words = split(/\W+/, $priority, 2);# Allow "level" or "level|facility".
- undef $numpri;
- undef $numfac;
- foreach (@words) {
- $num = &xlate($_); # Translate word to number.
- if (/^kern$/ || $num < 0) {
- croak "syslog: invalid level/facility: $_";
- }
- elsif ($num <= &LOG_PRIMASK) {
- croak "syslog: too many levels given: $_" if defined($numpri);
- $numpri = $num;
- return 0 unless &LOG_MASK($numpri) & $maskpri;
- }
- else {
- croak "syslog: too many facilities given: $_" if defined($numfac);
- $facility = $_;
- $numfac = $num;
- }
- }
-
- croak "syslog: level must be given" unless defined($numpri);
-
- if (!defined($numfac)) { # Facility not specified in this call.
- $facility = 'user' unless $facility;
- $numfac = &xlate($facility);
- }
-
- &connect unless $connected;
-
- $whoami = $ident;
-
- if (!$whoami && $mask =~ /^(\S.*?):\s?(.*)/) {
- $whoami = $1;
- $mask = $2;
- }
-
- unless ($whoami) {
- ($whoami = getlogin) ||
- ($whoami = getpwuid($<)) ||
- ($whoami = 'syslog');
- }
-
- $whoami .= "[$$]" if $lo_pid;
-
- $mask =~ s/%m/$!/g;
- $mask .= "\n" unless $mask =~ /\n$/;
- $message = sprintf ($mask, @_);
-
- $sum = $numpri + $numfac;
- unless (send(SYSLOG,"<$sum>$whoami: $message\0",0)) {
- if ($lo_cons) {
- if ($pid = fork) {
- unless ($lo_nowait) {
- $died = waitpid($pid, 0);
- }
- }
- else {
- if (open(CONS,">/dev/console")) {
- print CONS "<$facility.$priority>$whoami: $message\r";
- close CONS;
- }
- exit if defined $pid; # if fork failed, we're parent
- }
- }
- }
-}
-
-sub xlate {
- local($name) = @_;
- $name = uc $name;
- $name = "LOG_$name" unless $name =~ /^LOG_/;
- $name = "Sys::Syslog::$name";
- eval { &$name } || -1;
-}
-
-sub connect {
- unless ($host) {
- require Sys::Hostname;
- my($host_uniq) = Sys::Hostname::hostname();
- ($host) = $host_uniq =~ /([A-Za-z0-9_.-]+)/; # allow FQDN (inc _)
- }
- unless ( $sock_type ) {
- my $udp = getprotobyname('udp') || croak "getprotobyname failed for udp";
- my $syslog = getservbyname('syslog','udp') || croak "getservbyname failed";
- my $this = sockaddr_in($syslog, INADDR_ANY);
- my $that = sockaddr_in($syslog, inet_aton($host) || croak "Can't lookup $host");
- socket(SYSLOG,AF_INET,SOCK_DGRAM,$udp) || croak "socket: $!";
- connect(SYSLOG,$that) || croak "connect: $!";
- } else {
- my $syslog = _PATH_LOG();
- length($syslog) || croak "_PATH_LOG unavailable in syslog.h";
- my $that = sockaddr_un($syslog) || croak "Can't locate $syslog";
- socket(SYSLOG,AF_UNIX,SOCK_STREAM,0) || croak "socket: $!";
- if (!connect(SYSLOG,$that)) {
- socket(SYSLOG,AF_UNIX,SOCK_DGRAM,0) || croak "socket: $!";
- connect(SYSLOG,$that) || croak "connect: $! (SOCK_DGRAM after trying SOCK_STREAM)";
- }
- }
- local($old) = select(SYSLOG); $| = 1; select($old);
- $connected = 1;
-}
-
-sub disconnect {
- close SYSLOG;
- $connected = 0;
-}
-
-1;
diff --git a/contrib/perl5/ext/Sys/Syslog/Syslog.xs b/contrib/perl5/ext/Sys/Syslog/Syslog.xs
deleted file mode 100644
index 31c0e84..0000000
--- a/contrib/perl5/ext/Sys/Syslog/Syslog.xs
+++ /dev/null
@@ -1,641 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#ifdef I_SYSLOG
-#include <syslog.h>
-#endif
-
-static double
-constant_LOG_NO(char *name, int len)
-{
- switch (name[6 + 0]) {
- case 'T':
- if (strEQ(name + 6, "TICE")) { /* LOG_NO removed */
-#ifdef LOG_NOTICE
- return LOG_NOTICE;
-#else
- goto not_there;
-#endif
- }
- case 'W':
- if (strEQ(name + 6, "WAIT")) { /* LOG_NO removed */
-#ifdef LOG_NOWAIT
- return LOG_NOWAIT;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_N(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'D':
- if (strEQ(name + 5, "DELAY")) { /* LOG_N removed */
-#ifdef LOG_NDELAY
- return LOG_NDELAY;
-#else
- goto not_there;
-#endif
- }
- case 'E':
- if (strEQ(name + 5, "EWS")) { /* LOG_N removed */
-#ifdef LOG_NEWS
- return LOG_NEWS;
-#else
- goto not_there;
-#endif
- }
- case 'F':
- if (strEQ(name + 5, "FACILITIES")) { /* LOG_N removed */
-#ifdef LOG_NFACILITIES
- return LOG_NFACILITIES;
-#else
- goto not_there;
-#endif
- }
- case 'O':
- return constant_LOG_NO(name, len);
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_P(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'I':
- if (strEQ(name + 5, "ID")) { /* LOG_P removed */
-#ifdef LOG_PID
- return LOG_PID;
-#else
- goto not_there;
-#endif
- }
- case 'R':
- if (strEQ(name + 5, "RIMASK")) { /* LOG_P removed */
-#ifdef LOG_PRIMASK
- return LOG_PRIMASK;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_AU(char *name, int len)
-{
- if (6 + 2 >= len ) {
- errno = EINVAL;
- return 0;
- }
- switch (name[6 + 2]) {
- case '\0':
- if (strEQ(name + 6, "TH")) { /* LOG_AU removed */
-#ifdef LOG_AUTH
- return LOG_AUTH;
-#else
- goto not_there;
-#endif
- }
- case 'P':
- if (strEQ(name + 6, "THPRIV")) { /* LOG_AU removed */
-#ifdef LOG_AUTHPRIV
- return LOG_AUTHPRIV;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_A(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'L':
- if (strEQ(name + 5, "LERT")) { /* LOG_A removed */
-#ifdef LOG_ALERT
- return LOG_ALERT;
-#else
- goto not_there;
-#endif
- }
- case 'U':
- return constant_LOG_AU(name, len);
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_CR(char *name, int len)
-{
- switch (name[6 + 0]) {
- case 'I':
- if (strEQ(name + 6, "IT")) { /* LOG_CR removed */
-#ifdef LOG_CRIT
- return LOG_CRIT;
-#else
- goto not_there;
-#endif
- }
- case 'O':
- if (strEQ(name + 6, "ON")) { /* LOG_CR removed */
-#ifdef LOG_CRON
- return LOG_CRON;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_C(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'O':
- if (strEQ(name + 5, "ONS")) { /* LOG_C removed */
-#ifdef LOG_CONS
- return LOG_CONS;
-#else
- goto not_there;
-#endif
- }
- case 'R':
- return constant_LOG_CR(name, len);
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_D(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'A':
- if (strEQ(name + 5, "AEMON")) { /* LOG_D removed */
-#ifdef LOG_DAEMON
- return LOG_DAEMON;
-#else
- goto not_there;
-#endif
- }
- case 'E':
- if (strEQ(name + 5, "EBUG")) { /* LOG_D removed */
-#ifdef LOG_DEBUG
- return LOG_DEBUG;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_U(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'S':
- if (strEQ(name + 5, "SER")) { /* LOG_U removed */
-#ifdef LOG_USER
- return LOG_USER;
-#else
- goto not_there;
-#endif
- }
- case 'U':
- if (strEQ(name + 5, "UCP")) { /* LOG_U removed */
-#ifdef LOG_UUCP
- return LOG_UUCP;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_E(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'M':
- if (strEQ(name + 5, "MERG")) { /* LOG_E removed */
-#ifdef LOG_EMERG
- return LOG_EMERG;
-#else
- goto not_there;
-#endif
- }
- case 'R':
- if (strEQ(name + 5, "RR")) { /* LOG_E removed */
-#ifdef LOG_ERR
- return LOG_ERR;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_F(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'A':
- if (strEQ(name + 5, "ACMASK")) { /* LOG_F removed */
-#ifdef LOG_FACMASK
- return LOG_FACMASK;
-#else
- goto not_there;
-#endif
- }
- case 'T':
- if (strEQ(name + 5, "TP")) { /* LOG_F removed */
-#ifdef LOG_FTP
- return LOG_FTP;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_LO(char *name, int len)
-{
- if (6 + 3 >= len ) {
- errno = EINVAL;
- return 0;
- }
- switch (name[6 + 3]) {
- case '0':
- if (strEQ(name + 6, "CAL0")) { /* LOG_LO removed */
-#ifdef LOG_LOCAL0
- return LOG_LOCAL0;
-#else
- goto not_there;
-#endif
- }
- case '1':
- if (strEQ(name + 6, "CAL1")) { /* LOG_LO removed */
-#ifdef LOG_LOCAL1
- return LOG_LOCAL1;
-#else
- goto not_there;
-#endif
- }
- case '2':
- if (strEQ(name + 6, "CAL2")) { /* LOG_LO removed */
-#ifdef LOG_LOCAL2
- return LOG_LOCAL2;
-#else
- goto not_there;
-#endif
- }
- case '3':
- if (strEQ(name + 6, "CAL3")) { /* LOG_LO removed */
-#ifdef LOG_LOCAL3
- return LOG_LOCAL3;
-#else
- goto not_there;
-#endif
- }
- case '4':
- if (strEQ(name + 6, "CAL4")) { /* LOG_LO removed */
-#ifdef LOG_LOCAL4
- return LOG_LOCAL4;
-#else
- goto not_there;
-#endif
- }
- case '5':
- if (strEQ(name + 6, "CAL5")) { /* LOG_LO removed */
-#ifdef LOG_LOCAL5
- return LOG_LOCAL5;
-#else
- goto not_there;
-#endif
- }
- case '6':
- if (strEQ(name + 6, "CAL6")) { /* LOG_LO removed */
-#ifdef LOG_LOCAL6
- return LOG_LOCAL6;
-#else
- goto not_there;
-#endif
- }
- case '7':
- if (strEQ(name + 6, "CAL7")) { /* LOG_LO removed */
-#ifdef LOG_LOCAL7
- return LOG_LOCAL7;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant_LOG_L(char *name, int len)
-{
- switch (name[5 + 0]) {
- case 'F':
- if (strEQ(name + 5, "FMT")) { /* LOG_L removed */
-#ifdef LOG_LFMT
- return LOG_LFMT;
-#else
- goto not_there;
-#endif
- }
- case 'O':
- return constant_LOG_LO(name, len);
- case 'P':
- if (strEQ(name + 5, "PR")) { /* LOG_L removed */
-#ifdef LOG_LPR
- return LOG_LPR;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-static double
-constant(char *name, int len)
-{
- errno = 0;
- if (0 + 4 >= len ) {
- errno = EINVAL;
- return 0;
- }
- switch (name[0 + 4]) {
- case 'A':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_A(name, len);
- case 'C':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_C(name, len);
- case 'D':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_D(name, len);
- case 'E':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_E(name, len);
- case 'F':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_F(name, len);
- case 'I':
- if (strEQ(name + 0, "LOG_INFO")) { /* removed */
-#ifdef LOG_INFO
- return LOG_INFO;
-#else
- goto not_there;
-#endif
- }
- case 'K':
- if (strEQ(name + 0, "LOG_KERN")) { /* removed */
-#ifdef LOG_KERN
- return LOG_KERN;
-#else
- goto not_there;
-#endif
- }
- case 'L':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_L(name, len);
- case 'M':
- if (strEQ(name + 0, "LOG_MAIL")) { /* removed */
-#ifdef LOG_MAIL
- return LOG_MAIL;
-#else
- goto not_there;
-#endif
- }
- case 'N':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_N(name, len);
- case 'O':
- if (strEQ(name + 0, "LOG_ODELAY")) { /* removed */
-#ifdef LOG_ODELAY
- return LOG_ODELAY;
-#else
- goto not_there;
-#endif
- }
- case 'P':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_P(name, len);
- case 'S':
- if (strEQ(name + 0, "LOG_SYSLOG")) { /* removed */
-#ifdef LOG_SYSLOG
- return LOG_SYSLOG;
-#else
- goto not_there;
-#endif
- }
- case 'U':
- if (!strnEQ(name + 0,"LOG_", 4))
- break;
- return constant_LOG_U(name, len);
- case 'W':
- if (strEQ(name + 0, "LOG_WARNING")) { /* removed */
-#ifdef LOG_WARNING
- return LOG_WARNING;
-#else
- goto not_there;
-#endif
- }
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-
-MODULE = Sys::Syslog PACKAGE = Sys::Syslog
-
-char *
-_PATH_LOG()
- CODE:
-#ifdef _PATH_LOG
- RETVAL = _PATH_LOG;
-#else
- RETVAL = "";
-#endif
- OUTPUT:
- RETVAL
-
-int
-LOG_FAC(p)
- INPUT:
- int p
- CODE:
-#ifdef LOG_FAC
- RETVAL = LOG_FAC(p);
-#else
- croak("Your vendor has not defined the Sys::Syslog macro LOG_FAC");
- RETVAL = -1;
-#endif
- OUTPUT:
- RETVAL
-
-int
-LOG_PRI(p)
- INPUT:
- int p
- CODE:
-#ifdef LOG_PRI
- RETVAL = LOG_PRI(p);
-#else
- croak("Your vendor has not defined the Sys::Syslog macro LOG_PRI");
- RETVAL = -1;
-#endif
- OUTPUT:
- RETVAL
-
-int
-LOG_MAKEPRI(fac,pri)
- INPUT:
- int fac
- int pri
- CODE:
-#ifdef LOG_MAKEPRI
- RETVAL = LOG_MAKEPRI(fac,pri);
-#else
- croak("Your vendor has not defined the Sys::Syslog macro LOG_MAKEPRI");
- RETVAL = -1;
-#endif
- OUTPUT:
- RETVAL
-
-int
-LOG_MASK(pri)
- INPUT:
- int pri
- CODE:
-#ifdef LOG_MASK
- RETVAL = LOG_MASK(pri);
-#else
- croak("Your vendor has not defined the Sys::Syslog macro LOG_MASK");
- RETVAL = -1;
-#endif
- OUTPUT:
- RETVAL
-
-int
-LOG_UPTO(pri)
- INPUT:
- int pri
- CODE:
-#ifdef LOG_UPTO
- RETVAL = LOG_UPTO(pri);
-#else
- croak("Your vendor has not defined the Sys::Syslog macro LOG_UPTO");
- RETVAL = -1;
-#endif
- OUTPUT:
- RETVAL
-
-
-double
-constant(sv)
- PREINIT:
- STRLEN len;
- INPUT:
- SV * sv
- char * s = SvPV(sv, len);
- CODE:
- RETVAL = constant(s,len);
- OUTPUT:
- RETVAL
-
diff --git a/contrib/perl5/ext/Thread/Makefile.PL b/contrib/perl5/ext/Thread/Makefile.PL
deleted file mode 100644
index e67fbb7..0000000
--- a/contrib/perl5/ext/Thread/Makefile.PL
+++ /dev/null
@@ -1,7 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'Thread',
- VERSION_FROM => 'Thread.pm',
- MAN3PODS => {}
- );
-
diff --git a/contrib/perl5/ext/Thread/Notes b/contrib/perl5/ext/Thread/Notes
deleted file mode 100644
index 1505877..0000000
--- a/contrib/perl5/ext/Thread/Notes
+++ /dev/null
@@ -1,13 +0,0 @@
-Should cvcache be per CV (keyed by thread) or per thread (keyed by CV)?
-
-Maybe ought to protect all SVs by a mutex for SvREFCNT_{dec,inc},
-upgrades and so on. Then use SvMUTEX instead of CvMUTEX for CVs.
-On the other hand, people shouldn't expect concurrent operations
-on non-lexicals to be safe anyway.
-
-Probably don't need to bother keeping track of CvOWNER on clones.
-
-Either @_ needs to be made lexical or other arrangments need to be
-made so that some globs (or just *_) are per-thread.
-
-tokenbuf and buf probably ought to be global protected by a global lock.
diff --git a/contrib/perl5/ext/Thread/README b/contrib/perl5/ext/Thread/README
deleted file mode 100644
index a6b22fb..0000000
--- a/contrib/perl5/ext/Thread/README
+++ /dev/null
@@ -1,20 +0,0 @@
-See the README.threads in the main perl 5.004_xx development
-distribution (x >= 50) for details of how to build and use this.
-If all else fails, read on.
-
-If your version of patch can't create a file from scratch, then you'll
-need to create an empty thread.h manually first. Perl itself will need
-to be built with -DUSE_THREADS yet. If you're using MIT pthreads or
-another threads package that needs pthread_init() to be called, then
-add -DNEED_PTHREAD_INIT. If you're using a threads library that only
-follows one of the old POSIX drafts, then you'll probably need to add
--DOLD_PTHREADS_API. I haven't tested -DOLD_PTHREADS_API properly yet
-and I think you may still have to tweak a couple of the mutex calls
-to follow the old API.
-
-This extension is copyright Malcolm Beattie 1995-1997 and is freely
-distributable under your choice of the GNU Public License or the
-Artistic License (see the main perl distribution).
-
-Malcolm Beattie
-mbeattie@sable.ox.ac.uk
diff --git a/contrib/perl5/ext/Thread/Thread.pm b/contrib/perl5/ext/Thread/Thread.pm
deleted file mode 100644
index 23f9fe5..0000000
--- a/contrib/perl5/ext/Thread/Thread.pm
+++ /dev/null
@@ -1,225 +0,0 @@
-package Thread;
-require Exporter;
-use XSLoader ();
-our($VERSION, @ISA, @EXPORT);
-
-$VERSION = "1.0";
-
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(yield cond_signal cond_broadcast cond_wait async);
-
-=head1 NAME
-
-Thread - manipulate threads in Perl (EXPERIMENTAL, subject to change)
-
-=head1 CAVEAT
-
-The Thread extension requires Perl to be built in a particular way to
-enable the older 5.005 threading model. Just to confuse matters, there
-is an alternate threading model known as "ithreads" that does NOT
-support this extension. If you are using a binary distribution such
-as ActivePerl that is built with ithreads support, this extension CANNOT
-be used.
-
-=head1 SYNOPSIS
-
- use Thread;
-
- my $t = new Thread \&start_sub, @start_args;
-
- $result = $t->join;
- $result = $t->eval;
- $t->detach;
-
- if($t->equal($another_thread)) {
- # ...
- }
-
- my $tid = Thread->self->tid;
- my $tlist = Thread->list;
-
- lock($scalar);
- yield();
-
- use Thread 'async';
-
-=head1 DESCRIPTION
-
- WARNING: Threading is an experimental feature. Both the interface
- and implementation are subject to change drastically. In fact, this
- documentation describes the flavor of threads that was in version
- 5.005. Perl 5.6.0 and later have the beginnings of support for
- interpreter threads, which (when finished) is expected to be
- significantly different from what is described here. The information
- contained here may therefore soon be obsolete. Use at your own risk!
-
-The C<Thread> module provides multithreading support for perl.
-
-=head1 FUNCTIONS
-
-=over 8
-
-=item new \&start_sub
-
-=item new \&start_sub, LIST
-
-C<new> starts a new thread of execution in the referenced subroutine. The
-optional list is passed as parameters to the subroutine. Execution
-continues in both the subroutine and the code after the C<new> call.
-
-C<new Thread> returns a thread object representing the newly created
-thread.
-
-=item lock VARIABLE
-
-C<lock> places a lock on a variable until the lock goes out of scope. If
-the variable is locked by another thread, the C<lock> call will block until
-it's available. C<lock> is recursive, so multiple calls to C<lock> are
-safe--the variable will remain locked until the outermost lock on the
-variable goes out of scope.
-
-Locks on variables only affect C<lock> calls--they do I<not> affect normal
-access to a variable. (Locks on subs are different, and covered in a bit)
-If you really, I<really> want locks to block access, then go ahead and tie
-them to something and manage this yourself. This is done on purpose. While
-managing access to variables is a good thing, perl doesn't force you out of
-its living room...
-
-If a container object, such as a hash or array, is locked, all the elements
-of that container are not locked. For example, if a thread does a C<lock
-@a>, any other thread doing a C<lock($a[12])> won't block.
-
-You may also C<lock> a sub, using C<lock &sub>. Any calls to that sub from
-another thread will block until the lock is released. This behaviour is not
-equivalent to declaring the sub with the C<locked> attribute. The C<locked>
-attribute serializes access to a subroutine, but allows different threads
-non-simultaneous access. C<lock &sub>, on the other hand, will not allow
-I<any> other thread access for the duration of the lock.
-
-Finally, C<lock> will traverse up references exactly I<one> level.
-C<lock(\$a)> is equivalent to C<lock($a)>, while C<lock(\\$a)> is not.
-
-=item async BLOCK;
-
-C<async> creates a thread to execute the block immediately following
-it. This block is treated as an anonymous sub, and so must have a
-semi-colon after the closing brace. Like C<new Thread>, C<async> returns a
-thread object.
-
-=item Thread->self
-
-The C<Thread-E<gt>self> function returns a thread object that represents
-the thread making the C<Thread-E<gt>self> call.
-
-=item Thread->list
-
-C<Thread-E<gt>list> returns a list of thread objects for all running and
-finished but un-C<join>ed threads.
-
-=item cond_wait VARIABLE
-
-The C<cond_wait> function takes a B<locked> variable as a parameter,
-unlocks the variable, and blocks until another thread does a C<cond_signal>
-or C<cond_broadcast> for that same locked variable. The variable that
-C<cond_wait> blocked on is relocked after the C<cond_wait> is satisfied.
-If there are multiple threads C<cond_wait>ing on the same variable, all but
-one will reblock waiting to reaquire the lock on the variable. (So if
-you're only using C<cond_wait> for synchronization, give up the lock as
-soon as possible)
-
-=item cond_signal VARIABLE
-
-The C<cond_signal> function takes a locked variable as a parameter and
-unblocks one thread that's C<cond_wait>ing on that variable. If more than
-one thread is blocked in a C<cond_wait> on that variable, only one (and
-which one is indeterminate) will be unblocked.
-
-If there are no threads blocked in a C<cond_wait> on the variable, the
-signal is discarded.
-
-=item cond_broadcast VARIABLE
-
-The C<cond_broadcast> function works similarly to C<cond_signal>.
-C<cond_broadcast>, though, will unblock B<all> the threads that are blocked
-in a C<cond_wait> on the locked variable, rather than only one.
-
-=item yield
-
-The C<yield> function allows another thread to take control of the
-CPU. The exact results are implementation-dependent.
-
-=back
-
-=head1 METHODS
-
-=over 8
-
-=item join
-
-C<join> waits for a thread to end and returns any values the thread exited
-with. C<join> will block until the thread has ended, though it won't block
-if the thread has already terminated.
-
-If the thread being C<join>ed C<die>d, the error it died with will be
-returned at this time. If you don't want the thread performing the C<join>
-to die as well, you should either wrap the C<join> in an C<eval> or use the
-C<eval> thread method instead of C<join>.
-
-=item eval
-
-The C<eval> method wraps an C<eval> around a C<join>, and so waits for a
-thread to exit, passing along any values the thread might have returned.
-Errors, of course, get placed into C<$@>.
-
-=item detach
-
-C<detach> tells a thread that it is never going to be joined i.e.
-that all traces of its existence can be removed once it stops running.
-Errors in detached threads will not be visible anywhere - if you want
-to catch them, you should use $SIG{__DIE__} or something like that.
-
-=item equal
-
-C<equal> tests whether two thread objects represent the same thread and
-returns true if they do.
-
-=item tid
-
-The C<tid> method returns the tid of a thread. The tid is a monotonically
-increasing integer assigned when a thread is created. The main thread of a
-program will have a tid of zero, while subsequent threads will have tids
-assigned starting with one.
-
-=back
-
-=head1 LIMITATIONS
-
-The sequence number used to assign tids is a simple integer, and no
-checking is done to make sure the tid isn't currently in use. If a program
-creates more than 2^32 - 1 threads in a single run, threads may be assigned
-duplicate tids. This limitation may be lifted in a future version of Perl.
-
-=head1 SEE ALSO
-
-L<attributes>, L<Thread::Queue>, L<Thread::Semaphore>, L<Thread::Specific>.
-
-=cut
-
-#
-# Methods
-#
-
-#
-# Exported functions
-#
-sub async (&) {
- return new Thread $_[0];
-}
-
-sub eval {
- return eval { shift->join; };
-}
-
-XSLoader::load 'Thread';
-
-1;
diff --git a/contrib/perl5/ext/Thread/Thread.xs b/contrib/perl5/ext/Thread/Thread.xs
deleted file mode 100644
index 15e2aa2..0000000
--- a/contrib/perl5/ext/Thread/Thread.xs
+++ /dev/null
@@ -1,670 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-/* Magic signature for Thread's mg_private is "Th" */
-#define Thread_MAGIC_SIGNATURE 0x5468
-
-#ifdef __cplusplus
-#ifdef I_UNISTD
-#include <unistd.h>
-#endif
-#endif
-#include <fcntl.h>
-
-static int sig_pipe[2];
-
-#ifndef THREAD_RET_TYPE
-#define THREAD_RET_TYPE void *
-#define THREAD_RET_CAST(x) ((THREAD_RET_TYPE) x)
-#endif
-
-static void
-remove_thread(pTHX_ Thread t)
-{
-#ifdef USE_THREADS
- DEBUG_S(WITH_THR(PerlIO_printf(Perl_debug_log,
- "%p: remove_thread %p\n", thr, t)));
- MUTEX_LOCK(&PL_threads_mutex);
- MUTEX_DESTROY(&t->mutex);
- PL_nthreads--;
- t->prev->next = t->next;
- t->next->prev = t->prev;
- SvREFCNT_dec(t->oursv);
- COND_BROADCAST(&PL_nthreads_cond);
- MUTEX_UNLOCK(&PL_threads_mutex);
-#endif
-}
-
-static THREAD_RET_TYPE
-threadstart(void *arg)
-{
-#ifdef USE_THREADS
-#ifdef FAKE_THREADS
- Thread savethread = thr;
- LOGOP myop;
- dSP;
- I32 oldscope = PL_scopestack_ix;
- I32 retval;
- AV *av;
- int i;
-
- DEBUG_S(PerlIO_printf(Perl_debug_log, "new thread %p starting at %s\n",
- thr, SvPEEK(TOPs)));
- thr = (Thread) arg;
- savemark = TOPMARK;
- thr->prev = thr->prev_run = savethread;
- thr->next = savethread->next;
- thr->next_run = savethread->next_run;
- savethread->next = savethread->next_run = thr;
- thr->wait_queue = 0;
- thr->private = 0;
-
- /* Now duplicate most of perl_call_sv but with a few twists */
- PL_op = (OP*)&myop;
- Zero(PL_op, 1, LOGOP);
- myop.op_flags = OPf_STACKED;
- myop.op_next = Nullop;
- myop.op_flags |= OPf_KNOW;
- myop.op_flags |= OPf_WANT_LIST;
- PL_op = pp_entersub(ARGS);
- DEBUG_S(if (!PL_op)
- PerlIO_printf(Perl_debug_log, "thread starts at Nullop\n"));
- /*
- * When this thread is next scheduled, we start in the right
- * place. When the thread runs off the end of the sub, perl.c
- * handles things, using savemark to figure out how much of the
- * stack is the return value for any join.
- */
- thr = savethread; /* back to the old thread */
- return 0;
-#else
- Thread thr = (Thread) arg;
- LOGOP myop;
- dSP;
- I32 oldmark = TOPMARK;
- I32 oldscope = PL_scopestack_ix;
- I32 retval;
- SV *sv;
- AV *av;
- int i, ret;
- dJMPENV;
-
-#if defined(MULTIPLICITY)
- PERL_SET_INTERP(thr->interp);
-#endif
-
- DEBUG_S(PerlIO_printf(Perl_debug_log, "new thread %p waiting to start\n",
- thr));
-
- /*
- * Wait until our creator releases us. If we didn't do this, then
- * it would be potentially possible for out thread to carry on and
- * do stuff before our creator fills in our "self" field. For example,
- * if we went and created another thread which tried to JOIN with us,
- * then we'd be in a mess.
- */
- MUTEX_LOCK(&thr->mutex);
- MUTEX_UNLOCK(&thr->mutex);
-
- /*
- * It's safe to wait until now to set the thread-specific pointer
- * from our pthread_t structure to our struct perl_thread, since
- * we're the only thread who can get at it anyway.
- */
- PERL_SET_THX(thr);
-
- DEBUG_S(PerlIO_printf(Perl_debug_log, "new thread %p starting at %s\n",
- thr, SvPEEK(TOPs)));
-
- av = newAV();
- sv = POPs;
- PUTBACK;
- ENTER;
- SAVETMPS;
- perl_call_sv(sv, G_ARRAY|G_EVAL);
- SPAGAIN;
- retval = SP - (PL_stack_base + oldmark);
- SP = PL_stack_base + oldmark + 1;
- if (SvCUR(thr->errsv)) {
- MUTEX_LOCK(&thr->mutex);
- thr->flags |= THRf_DID_DIE;
- MUTEX_UNLOCK(&thr->mutex);
- av_store(av, 0, &PL_sv_no);
- av_store(av, 1, newSVsv(thr->errsv));
- DEBUG_S(PerlIO_printf(Perl_debug_log, "%p died: %s\n",
- thr, SvPV(thr->errsv, PL_na)));
- }
- else {
- DEBUG_S(STMT_START {
- for (i = 1; i <= retval; i++) {
- PerlIO_printf(Perl_debug_log, "%p return[%d] = %s\n",
- thr, i, SvPEEK(SP[i - 1]));
- }
- } STMT_END);
- av_store(av, 0, &PL_sv_yes);
- for (i = 1; i <= retval; i++, SP++)
- sv_setsv(*av_fetch(av, i, TRUE), SvREFCNT_inc(*SP));
- }
- FREETMPS;
- LEAVE;
-
- finishoff:
-#if 0
- /* removed for debug */
- SvREFCNT_dec(PL_curstack);
-#endif
- SvREFCNT_dec(thr->cvcache);
- SvREFCNT_dec(thr->threadsv);
- SvREFCNT_dec(thr->specific);
- SvREFCNT_dec(thr->errsv);
-
- /*Safefree(cxstack);*/
- while (PL_curstackinfo->si_next)
- PL_curstackinfo = PL_curstackinfo->si_next;
- while (PL_curstackinfo) {
- PERL_SI *p = PL_curstackinfo->si_prev;
- SvREFCNT_dec(PL_curstackinfo->si_stack);
- Safefree(PL_curstackinfo->si_cxstack);
- Safefree(PL_curstackinfo);
- PL_curstackinfo = p;
- }
- Safefree(PL_markstack);
- Safefree(PL_scopestack);
- Safefree(PL_savestack);
- Safefree(PL_retstack);
- Safefree(PL_tmps_stack);
- Safefree(PL_ofs);
-
- SvREFCNT_dec(PL_rs);
- SvREFCNT_dec(PL_nrs);
- SvREFCNT_dec(PL_statname);
- SvREFCNT_dec(PL_errors);
- Safefree(PL_screamfirst);
- Safefree(PL_screamnext);
- Safefree(PL_reg_start_tmp);
- SvREFCNT_dec(PL_lastscream);
- SvREFCNT_dec(PL_defoutgv);
- Safefree(PL_reg_poscache);
-
- MUTEX_LOCK(&thr->mutex);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: threadstart finishing: state is %u\n",
- thr, ThrSTATE(thr)));
- switch (ThrSTATE(thr)) {
- case THRf_R_JOINABLE:
- ThrSETSTATE(thr, THRf_ZOMBIE);
- MUTEX_UNLOCK(&thr->mutex);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: R_JOINABLE thread finished\n", thr));
- break;
- case THRf_R_JOINED:
- ThrSETSTATE(thr, THRf_DEAD);
- MUTEX_UNLOCK(&thr->mutex);
- remove_thread(aTHX_ thr);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: R_JOINED thread finished\n", thr));
- break;
- case THRf_R_DETACHED:
- ThrSETSTATE(thr, THRf_DEAD);
- MUTEX_UNLOCK(&thr->mutex);
- SvREFCNT_dec(av);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: DETACHED thread finished\n", thr));
- remove_thread(aTHX_ thr); /* This might trigger main thread to finish */
- break;
- default:
- MUTEX_UNLOCK(&thr->mutex);
- croak("panic: illegal state %u at end of threadstart", ThrSTATE(thr));
- /* NOTREACHED */
- }
- return THREAD_RET_CAST(av); /* Available for anyone to join with */
- /* us unless we're detached, in which */
- /* case noone sees the value anyway. */
-#endif
-#else
- return THREAD_RET_CAST(NULL);
-#endif
-}
-
-static SV *
-newthread (pTHX_ SV *startsv, AV *initargs, char *classname)
-{
-#ifdef USE_THREADS
- dSP;
- Thread savethread;
- int i;
- SV *sv;
- int err;
-#ifndef THREAD_CREATE
- static pthread_attr_t attr;
- static int attr_inited = 0;
- sigset_t fullmask, oldmask;
- static int attr_joinable = PTHREAD_CREATE_JOINABLE;
-#endif
-
- savethread = thr;
- thr = new_struct_thread(thr);
- /* temporarily pretend to be the child thread in case the
- * XPUSHs() below want to grow the child's stack. This is
- * safe, since the other thread is not yet created, and we
- * are the only ones who know about it */
- PERL_SET_THX(thr);
- SPAGAIN;
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: newthread (%p), tid is %u, preparing stack\n",
- savethread, thr, thr->tid));
- /* The following pushes the arg list and startsv onto the *new* stack */
- PUSHMARK(SP);
- /* Could easily speed up the following greatly */
- for (i = 0; i <= AvFILL(initargs); i++)
- XPUSHs(SvREFCNT_inc(*av_fetch(initargs, i, FALSE)));
- XPUSHs(SvREFCNT_inc(startsv));
- PUTBACK;
-
- /* On your marks... */
- PERL_SET_THX(savethread);
- MUTEX_LOCK(&thr->mutex);
-
-#ifdef THREAD_CREATE
- err = THREAD_CREATE(thr, threadstart);
-#else
- /* Get set... */
- sigfillset(&fullmask);
- if (sigprocmask(SIG_SETMASK, &fullmask, &oldmask) == -1)
- croak("panic: sigprocmask");
- err = 0;
- if (!attr_inited) {
- attr_inited = 1;
- err = pthread_attr_init(&attr);
-# ifdef PTHREAD_ATTR_SETDETACHSTATE
- if (err == 0)
- err = PTHREAD_ATTR_SETDETACHSTATE(&attr, attr_joinable);
-
-# else
- croak("panic: can't pthread_attr_setdetachstate");
-# endif
- }
- if (err == 0)
- err = PTHREAD_CREATE(&thr->self, attr, threadstart, (void*) thr);
-#endif
-
- if (err) {
- MUTEX_UNLOCK(&thr->mutex);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: create of %p failed %d\n",
- savethread, thr, err));
- /* Thread creation failed--clean up */
- SvREFCNT_dec(thr->cvcache);
- remove_thread(aTHX_ thr);
- for (i = 0; i <= AvFILL(initargs); i++)
- SvREFCNT_dec(*av_fetch(initargs, i, FALSE));
- SvREFCNT_dec(startsv);
- return NULL;
- }
-
-#ifdef THREAD_POST_CREATE
- THREAD_POST_CREATE(thr);
-#else
- if (sigprocmask(SIG_SETMASK, &oldmask, 0))
- croak("panic: sigprocmask");
-#endif
-
- sv = newSViv(thr->tid);
- sv_magic(sv, thr->oursv, '~', 0, 0);
- SvMAGIC(sv)->mg_private = Thread_MAGIC_SIGNATURE;
- sv = sv_bless(newRV_noinc(sv), gv_stashpv(classname, TRUE));
-
- /* Go */
- MUTEX_UNLOCK(&thr->mutex);
-
- return sv;
-#else
-# ifdef USE_ITHREADS
- croak("This perl was built for \"ithreads\", which currently does not support Thread.pm.\n"
- "Run \"perldoc Thread\" for more information");
-# else
- croak("This perl was not built with support for 5.005-style threads.\n"
- "Run \"perldoc Thread\" for more information");
-# endif
- return &PL_sv_undef;
-#endif
-}
-
-static Signal_t handle_thread_signal (int sig);
-
-static Signal_t
-handle_thread_signal(int sig)
-{
- dTHXo;
- unsigned char c = (unsigned char) sig;
- /*
- * We're not really allowed to call fprintf in a signal handler
- * so don't be surprised if this isn't robust while debugging
- * with -DL.
- */
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "handle_thread_signal: got signal %d\n", sig););
- write(sig_pipe[1], &c, 1);
-}
-
-MODULE = Thread PACKAGE = Thread
-PROTOTYPES: DISABLE
-
-void
-new(classname, startsv, ...)
- char * classname
- SV * startsv
- AV * av = av_make(items - 2, &ST(2));
- PPCODE:
- XPUSHs(sv_2mortal(newthread(aTHX_ startsv, av, classname)));
-
-void
-join(t)
- Thread t
- AV * av = NO_INIT
- int i = NO_INIT
- PPCODE:
-#ifdef USE_THREADS
- if (t == thr)
- croak("Attempt to join self");
- DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: joining %p (state %u)\n",
- thr, t, ThrSTATE(t)););
- MUTEX_LOCK(&t->mutex);
- switch (ThrSTATE(t)) {
- case THRf_R_JOINABLE:
- case THRf_R_JOINED:
- ThrSETSTATE(t, THRf_R_JOINED);
- MUTEX_UNLOCK(&t->mutex);
- break;
- case THRf_ZOMBIE:
- ThrSETSTATE(t, THRf_DEAD);
- MUTEX_UNLOCK(&t->mutex);
- remove_thread(aTHX_ t);
- break;
- default:
- MUTEX_UNLOCK(&t->mutex);
- croak("can't join with thread");
- /* NOTREACHED */
- }
- JOIN(t, &av);
-
- sv_2mortal((SV*)av);
-
- if (SvTRUE(*av_fetch(av, 0, FALSE))) {
- /* Could easily speed up the following if necessary */
- for (i = 1; i <= AvFILL(av); i++)
- XPUSHs(*av_fetch(av, i, FALSE));
- }
- else {
- STRLEN n_a;
- char *mess = SvPV(*av_fetch(av, 1, FALSE), n_a);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: join propagating die message: %s\n",
- thr, mess));
- croak(mess);
- }
-#endif
-
-void
-detach(t)
- Thread t
- CODE:
-#ifdef USE_THREADS
- DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: detaching %p (state %u)\n",
- thr, t, ThrSTATE(t)););
- MUTEX_LOCK(&t->mutex);
- switch (ThrSTATE(t)) {
- case THRf_R_JOINABLE:
- ThrSETSTATE(t, THRf_R_DETACHED);
- /* fall through */
- case THRf_R_DETACHED:
- DETACH(t);
- MUTEX_UNLOCK(&t->mutex);
- break;
- case THRf_ZOMBIE:
- ThrSETSTATE(t, THRf_DEAD);
- DETACH(t);
- MUTEX_UNLOCK(&t->mutex);
- remove_thread(aTHX_ t);
- break;
- default:
- MUTEX_UNLOCK(&t->mutex);
- croak("can't detach thread");
- /* NOTREACHED */
- }
-#endif
-
-void
-equal(t1, t2)
- Thread t1
- Thread t2
- PPCODE:
- PUSHs((t1 == t2) ? &PL_sv_yes : &PL_sv_no);
-
-void
-flags(t)
- Thread t
- PPCODE:
-#ifdef USE_THREADS
- PUSHs(sv_2mortal(newSViv(t->flags)));
-#endif
-
-void
-self(classname)
- char * classname
- PREINIT:
- SV *sv;
- PPCODE:
-#ifdef USE_THREADS
- sv = newSViv(thr->tid);
- sv_magic(sv, thr->oursv, '~', 0, 0);
- SvMAGIC(sv)->mg_private = Thread_MAGIC_SIGNATURE;
- PUSHs(sv_2mortal(sv_bless(newRV_noinc(sv),
- gv_stashpv(classname, TRUE))));
-#endif
-
-U32
-tid(t)
- Thread t
- CODE:
-#ifdef USE_THREADS
- MUTEX_LOCK(&t->mutex);
- RETVAL = t->tid;
- MUTEX_UNLOCK(&t->mutex);
-#else
- RETVAL = 0;
-#endif
- OUTPUT:
- RETVAL
-
-void
-DESTROY(t)
- SV * t
- PPCODE:
- PUSHs(&PL_sv_yes);
-
-void
-yield()
- CODE:
-{
-#ifdef USE_THREADS
- YIELD;
-#endif
-}
-
-void
-cond_wait(sv)
- SV * sv
- MAGIC * mg = NO_INIT
-CODE:
-#ifdef USE_THREADS
- if (SvROK(sv))
- sv = SvRV(sv);
-
- mg = condpair_magic(sv);
- DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: cond_wait %p\n", thr, sv));
- MUTEX_LOCK(MgMUTEXP(mg));
- if (MgOWNER(mg) != thr) {
- MUTEX_UNLOCK(MgMUTEXP(mg));
- croak("cond_wait for lock that we don't own\n");
- }
- MgOWNER(mg) = 0;
- COND_SIGNAL(MgOWNERCONDP(mg));
- COND_WAIT(MgCONDP(mg), MgMUTEXP(mg));
- while (MgOWNER(mg))
- COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
- MgOWNER(mg) = thr;
- MUTEX_UNLOCK(MgMUTEXP(mg));
-#endif
-
-void
-cond_signal(sv)
- SV * sv
- MAGIC * mg = NO_INIT
-CODE:
-#ifdef USE_THREADS
- if (SvROK(sv))
- sv = SvRV(sv);
-
- mg = condpair_magic(sv);
- DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: cond_signal %p\n",thr,sv));
- MUTEX_LOCK(MgMUTEXP(mg));
- if (MgOWNER(mg) != thr) {
- MUTEX_UNLOCK(MgMUTEXP(mg));
- croak("cond_signal for lock that we don't own\n");
- }
- COND_SIGNAL(MgCONDP(mg));
- MUTEX_UNLOCK(MgMUTEXP(mg));
-#endif
-
-void
-cond_broadcast(sv)
- SV * sv
- MAGIC * mg = NO_INIT
-CODE:
-#ifdef USE_THREADS
- if (SvROK(sv))
- sv = SvRV(sv);
-
- mg = condpair_magic(sv);
- DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: cond_broadcast %p\n",
- thr, sv));
- MUTEX_LOCK(MgMUTEXP(mg));
- if (MgOWNER(mg) != thr) {
- MUTEX_UNLOCK(MgMUTEXP(mg));
- croak("cond_broadcast for lock that we don't own\n");
- }
- COND_BROADCAST(MgCONDP(mg));
- MUTEX_UNLOCK(MgMUTEXP(mg));
-#endif
-
-void
-list(classname)
- char * classname
- PREINIT:
- Thread t;
- AV * av;
- SV ** svp;
- int n = 0;
- PPCODE:
-#ifdef USE_THREADS
- av = newAV();
- /*
- * Iterate until we have enough dynamic storage for all threads.
- * We mustn't do any allocation while holding threads_mutex though.
- */
- MUTEX_LOCK(&PL_threads_mutex);
- do {
- n = PL_nthreads;
- MUTEX_UNLOCK(&PL_threads_mutex);
- if (AvFILL(av) < n - 1) {
- int i = AvFILL(av);
- for (i = AvFILL(av); i < n - 1; i++) {
- SV *sv = newSViv(0); /* fill in tid later */
- sv_magic(sv, 0, '~', 0, 0); /* fill in other magic later */
- av_push(av, sv_bless(newRV_noinc(sv),
- gv_stashpv(classname, TRUE)));
-
- }
- }
- MUTEX_LOCK(&PL_threads_mutex);
- } while (n < PL_nthreads);
- n = PL_nthreads; /* Get the final correct value */
-
- /*
- * At this point, there's enough room to fill in av.
- * Note that we are holding threads_mutex so the list
- * won't change out from under us but all the remaining
- * processing is "fast" (no blocking, malloc etc.)
- */
- t = thr;
- svp = AvARRAY(av);
- do {
- SV *sv = (SV*)SvRV(*svp);
- sv_setiv(sv, t->tid);
- SvMAGIC(sv)->mg_obj = SvREFCNT_inc(t->oursv);
- SvMAGIC(sv)->mg_flags |= MGf_REFCOUNTED;
- SvMAGIC(sv)->mg_private = Thread_MAGIC_SIGNATURE;
- t = t->next;
- svp++;
- } while (t != thr);
- /* */
- MUTEX_UNLOCK(&PL_threads_mutex);
- /* Truncate any unneeded slots in av */
- av_fill(av, n - 1);
- /* Finally, push all the new objects onto the stack and drop av */
- EXTEND(SP, n);
- for (svp = AvARRAY(av); n > 0; n--, svp++)
- PUSHs(*svp);
- (void)sv_2mortal((SV*)av);
-#endif
-
-
-MODULE = Thread PACKAGE = Thread::Signal
-
-void
-kill_sighandler_thread()
- PPCODE:
- write(sig_pipe[1], "\0", 1);
- PUSHs(&PL_sv_yes);
-
-void
-init_thread_signals()
- PPCODE:
- PL_sighandlerp = handle_thread_signal;
- if (pipe(sig_pipe) == -1)
- XSRETURN_UNDEF;
- PUSHs(&PL_sv_yes);
-
-void
-await_signal()
- PREINIT:
- unsigned char c;
- SSize_t ret;
- CODE:
- do {
- ret = read(sig_pipe[0], &c, 1);
- } while (ret == -1 && errno == EINTR);
- if (ret == -1)
- croak("panic: await_signal");
- ST(0) = sv_newmortal();
- if (ret)
- sv_setsv(ST(0), c ? PL_psig_ptr[c] : &PL_sv_no);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "await_signal returning %s\n", SvPEEK(ST(0))););
-
-MODULE = Thread PACKAGE = Thread::Specific
-
-void
-data(classname = "Thread::Specific")
- char * classname
- PPCODE:
-#ifdef USE_THREADS
- if (AvFILL(thr->specific) == -1) {
- GV *gv = gv_fetchpv("Thread::Specific::FIELDS", TRUE, SVt_PVHV);
- av_store(thr->specific, 0, newRV((SV*)GvHV(gv)));
- }
- XPUSHs(sv_bless(newRV((SV*)thr->specific),gv_stashpv(classname,TRUE)));
-#endif
diff --git a/contrib/perl5/ext/Thread/Thread/Queue.pm b/contrib/perl5/ext/Thread/Thread/Queue.pm
deleted file mode 100644
index 831573c..0000000
--- a/contrib/perl5/ext/Thread/Thread/Queue.pm
+++ /dev/null
@@ -1,95 +0,0 @@
-package Thread::Queue;
-use Thread qw(cond_wait cond_broadcast);
-
-=head1 NAME
-
-Thread::Queue - thread-safe queues
-
-=head1 SYNOPSIS
-
- use Thread::Queue;
- my $q = new Thread::Queue;
- $q->enqueue("foo", "bar");
- my $foo = $q->dequeue; # The "bar" is still in the queue.
- my $foo = $q->dequeue_nb; # returns "bar", or undef if the queue was
- # empty
- my $left = $q->pending; # returns the number of items still in the queue
-
-=head1 DESCRIPTION
-
-A queue, as implemented by C<Thread::Queue> is a thread-safe data structure
-much like a list. Any number of threads can safely add elements to the end
-of the list, or remove elements from the head of the list. (Queues don't
-permit adding or removing elements from the middle of the list)
-
-=head1 FUNCTIONS AND METHODS
-
-=over 8
-
-=item new
-
-The C<new> function creates a new empty queue.
-
-=item enqueue LIST
-
-The C<enqueue> method adds a list of scalars on to the end of the queue.
-The queue will grow as needed to accomodate the list.
-
-=item dequeue
-
-The C<dequeue> method removes a scalar from the head of the queue and
-returns it. If the queue is currently empty, C<dequeue> will block the
-thread until another thread C<enqueue>s a scalar.
-
-=item dequeue_nb
-
-The C<dequeue_nb> method, like the C<dequeue> method, removes a scalar from
-the head of the queue and returns it. Unlike C<dequeue>, though,
-C<dequeue_nb> won't block if the queue is empty, instead returning
-C<undef>.
-
-=item pending
-
-The C<pending> method returns the number of items still in the queue. (If
-there can be multiple readers on the queue it's best to lock the queue
-before checking to make sure that it stays in a consistent state)
-
-=back
-
-=head1 SEE ALSO
-
-L<Thread>
-
-=cut
-
-sub new {
- my $class = shift;
- return bless [@_], $class;
-}
-
-sub dequeue : locked : method {
- my $q = shift;
- cond_wait $q until @$q;
- return shift @$q;
-}
-
-sub dequeue_nb : locked : method {
- my $q = shift;
- if (@$q) {
- return shift @$q;
- } else {
- return undef;
- }
-}
-
-sub enqueue : locked : method {
- my $q = shift;
- push(@$q, @_) and cond_broadcast $q;
-}
-
-sub pending : locked : method {
- my $q = shift;
- return scalar(@$q);
-}
-
-1;
diff --git a/contrib/perl5/ext/Thread/Thread/Semaphore.pm b/contrib/perl5/ext/Thread/Thread/Semaphore.pm
deleted file mode 100644
index 3cd6338..0000000
--- a/contrib/perl5/ext/Thread/Thread/Semaphore.pm
+++ /dev/null
@@ -1,85 +0,0 @@
-package Thread::Semaphore;
-use Thread qw(cond_wait cond_broadcast);
-
-=head1 NAME
-
-Thread::Semaphore - thread-safe semaphores
-
-=head1 SYNOPSIS
-
- use Thread::Semaphore;
- my $s = new Thread::Semaphore;
- $s->up; # Also known as the semaphore V -operation.
- # The guarded section is here
- $s->down; # Also known as the semaphore P -operation.
-
- # The default semaphore value is 1.
- my $s = new Thread::Semaphore($initial_value);
- $s->up($up_value);
- $s->down($up_value);
-
-=head1 DESCRIPTION
-
-Semaphores provide a mechanism to regulate access to resources. Semaphores,
-unlike locks, aren't tied to particular scalars, and so may be used to
-control access to anything you care to use them for.
-
-Semaphores don't limit their values to zero or one, so they can be used to
-control access to some resource that may have more than one of. (For
-example, filehandles) Increment and decrement amounts aren't fixed at one
-either, so threads can reserve or return multiple resources at once.
-
-=head1 FUNCTIONS AND METHODS
-
-=over 8
-
-=item new
-
-=item new NUMBER
-
-C<new> creates a new semaphore, and initializes its count to the passed
-number. If no number is passed, the semaphore's count is set to one.
-
-=item down
-
-=item down NUMBER
-
-The C<down> method decreases the semaphore's count by the specified number,
-or one if no number has been specified. If the semaphore's count would drop
-below zero, this method will block until such time that the semaphore's
-count is equal to or larger than the amount you're C<down>ing the
-semaphore's count by.
-
-=item up
-
-=item up NUMBER
-
-The C<up> method increases the semaphore's count by the number specified,
-or one if no number's been specified. This will unblock any thread blocked
-trying to C<down> the semaphore if the C<up> raises the semaphore count
-above what the C<down>s are trying to decrement it by.
-
-=back
-
-=cut
-
-sub new {
- my $class = shift;
- my $val = @_ ? shift : 1;
- bless \$val, $class;
-}
-
-sub down : locked : method {
- my $s = shift;
- my $inc = @_ ? shift : 1;
- cond_wait $s until $$s >= $inc;
- $$s -= $inc;
-}
-
-sub up : locked : method {
- my $s = shift;
- my $inc = @_ ? shift : 1;
- ($$s += $inc) > 0 and cond_broadcast $s;
-}
-
-1;
diff --git a/contrib/perl5/ext/Thread/Thread/Signal.pm b/contrib/perl5/ext/Thread/Thread/Signal.pm
deleted file mode 100644
index f5f03db..0000000
--- a/contrib/perl5/ext/Thread/Thread/Signal.pm
+++ /dev/null
@@ -1,50 +0,0 @@
-package Thread::Signal;
-use Thread qw(async);
-
-=head1 NAME
-
-Thread::Signal - Start a thread which runs signal handlers reliably
-
-=head1 SYNOPSIS
-
- use Thread::Signal;
-
- $SIG{HUP} = \&some_handler;
-
-=head1 DESCRIPTION
-
-The C<Thread::Signal> module starts up a special signal handler thread.
-All signals to the process are delivered to it and it runs the
-associated C<$SIG{FOO}> handlers for them. Without this module,
-signals arriving at inopportune moments (such as when perl's internals
-are in the middle of updating critical structures) cause the perl
-code of the handler to be run unsafely which can cause memory corruption
-or worse.
-
-=head1 BUGS
-
-This module changes the semantics of signal handling slightly in that
-the signal handler is run separately from the main thread (and in
-parallel with it). This means that tricks such as calling C<die> from
-a signal handler behave differently (and, in particular, can't be
-used to exit directly from a system call).
-
-=cut
-
-if (!init_thread_signals()) {
- require Carp;
- Carp::croak("init_thread_signals failed: $!");
-}
-
-async {
- my $sig;
- while ($sig = await_signal()) {
- &$sig();
- }
-};
-
-END {
- kill_sighandler_thread();
-}
-
-1;
diff --git a/contrib/perl5/ext/Thread/Thread/Specific.pm b/contrib/perl5/ext/Thread/Thread/Specific.pm
deleted file mode 100644
index a6271a4..0000000
--- a/contrib/perl5/ext/Thread/Thread/Specific.pm
+++ /dev/null
@@ -1,28 +0,0 @@
-package Thread::Specific;
-
-=head1 NAME
-
-Thread::Specific - thread-specific keys
-
-=head1 SYNOPSIS
-
- use Thread::Specific;
- my $k = key_create Thread::Specific;
-
-=head1 DESCRIPTION
-
-C<key_create> returns a unique thread-specific key.
-
-=cut
-
-sub import : locked : method {
- require fields;
- fields::->import(@_);
-}
-
-sub key_create : locked : method {
- our %FIELDS; # suppress "used only once"
- return ++$FIELDS{__MAX__};
-}
-
-1;
diff --git a/contrib/perl5/ext/Thread/create.t b/contrib/perl5/ext/Thread/create.t
deleted file mode 100644
index df8fc77..0000000
--- a/contrib/perl5/ext/Thread/create.t
+++ /dev/null
@@ -1,26 +0,0 @@
-use Thread 'async';
-use Config;
-use Tie::Hash;
-
-sub start_here {
- my $i;
- print "In start_here with args: @_\n";
- for ($i = 1; $i <= 5; $i++) {
- print "start_here: $i\n";
- sleep 1;
- }
-}
-
-async {
- tie my(%h), 'Tie::StdHash';
- %h = %Config;
- print "running on $h{archname}\n";
-};
-
-print "Starting new thread now\n";
-$t = new Thread \&start_here, qw(foo bar baz);
-print "Started thread $t\n";
-for ($count = 1; $count <= 5; $count++) {
- print "main: $count\n";
- sleep 1;
-}
diff --git a/contrib/perl5/ext/Thread/die.t b/contrib/perl5/ext/Thread/die.t
deleted file mode 100644
index 6239405..0000000
--- a/contrib/perl5/ext/Thread/die.t
+++ /dev/null
@@ -1,16 +0,0 @@
-use Thread 'async';
-
-$t = async {
- print "here\n";
- die "success";
- print "shouldn't get here\n";
-};
-
-sleep 1;
-print "joining...\n";
-eval { @r = $t->join; };
-if ($@) {
- print "thread died with message: $@";
-} else {
- print "thread failed to die successfully\n";
-}
diff --git a/contrib/perl5/ext/Thread/die2.t b/contrib/perl5/ext/Thread/die2.t
deleted file mode 100644
index f6b6955..0000000
--- a/contrib/perl5/ext/Thread/die2.t
+++ /dev/null
@@ -1,16 +0,0 @@
-use Thread 'async';
-
-$t = async {
- sleep 1;
- print "here\n";
- die "success if preceded by 'thread died...'";
- print "shouldn't get here\n";
-};
-
-print "joining...\n";
-@r = eval { $t->join; };
-if ($@) {
- print "thread died with message: $@";
-} else {
- print "thread failed to die successfully\n";
-}
diff --git a/contrib/perl5/ext/Thread/io.t b/contrib/perl5/ext/Thread/io.t
deleted file mode 100644
index 6012008..0000000
--- a/contrib/perl5/ext/Thread/io.t
+++ /dev/null
@@ -1,39 +0,0 @@
-use Thread;
-
-sub counter {
-$count = 10;
-while ($count--) {
- sleep 1;
- print "ping $count\n";
-}
-}
-
-sub reader {
- my $line;
- while ($line = <STDIN>) {
- print "reader: $line";
- }
- print "End of input in reader\n";
- return 0;
-}
-
-print <<'EOT';
-This test starts up a thread to read and echo whatever is typed on
-the keyboard/stdin, line by line, while the main thread counts down
-to zero. The test stays running until both the main thread has
-finished counting down and the I/O thread has seen end-of-file on
-the terminal/stdin.
-EOT
-
-$r = new Thread \&counter;
-
-&reader;
-
-__END__
-
-
-$count = 10;
-while ($count--) {
- sleep 1;
- print "ping $count\n";
-}
diff --git a/contrib/perl5/ext/Thread/join.t b/contrib/perl5/ext/Thread/join.t
deleted file mode 100644
index cba2c1c..0000000
--- a/contrib/perl5/ext/Thread/join.t
+++ /dev/null
@@ -1,11 +0,0 @@
-use Thread;
-sub foo {
- print "In foo with args: @_\n";
- return (7, 8, 9);
-}
-
-print "Starting thread\n";
-$t = new Thread \&foo, qw(foo bar baz);
-print "Joining with $t\n";
-@results = $t->join();
-print "Joining returned ", scalar(@results), " values: @results\n";
diff --git a/contrib/perl5/ext/Thread/join2.t b/contrib/perl5/ext/Thread/join2.t
deleted file mode 100644
index 99b43a5..0000000
--- a/contrib/perl5/ext/Thread/join2.t
+++ /dev/null
@@ -1,12 +0,0 @@
-use Thread;
-sub foo {
- print "In foo with args: @_\n";
- return (7, 8, 9);
-}
-
-print "Starting thread\n";
-$t = new Thread \&foo, qw(foo bar baz);
-sleep 2;
-print "Joining with $t\n";
-@results = $t->join();
-print "Joining returned @results\n";
diff --git a/contrib/perl5/ext/Thread/list.t b/contrib/perl5/ext/Thread/list.t
deleted file mode 100644
index f13f4b2..0000000
--- a/contrib/perl5/ext/Thread/list.t
+++ /dev/null
@@ -1,30 +0,0 @@
-use Thread qw(async);
-use Thread::Semaphore;
-
-my $sem = Thread::Semaphore->new(0);
-
-$nthreads = 4;
-
-for (my $i = 0; $i < $nthreads; $i++) {
- async {
- my $tid = Thread->self->tid;
- print "thread $tid started...\n";
- $sem->down;
- print "thread $tid finishing\n";
- };
-}
-
-print "main: started $nthreads threads\n";
-sleep 2;
-
-my @list = Thread->list;
-printf "main: Thread->list returned %d threads\n", scalar(@list);
-
-foreach my $t (@list) {
- print "inspecting thread $t...\n";
- print "...deref is $$t\n";
- print "...flags = ", $t->flags, "\n";
- print "...tid = ", $t->tid, "\n";
-}
-print "main thread telling workers to finish off...\n";
-$sem->up($nthreads);
diff --git a/contrib/perl5/ext/Thread/lock.t b/contrib/perl5/ext/Thread/lock.t
deleted file mode 100644
index fefb129..0000000
--- a/contrib/perl5/ext/Thread/lock.t
+++ /dev/null
@@ -1,27 +0,0 @@
-use Thread;
-
-$level = 0;
-
-sub worker
-{
- my $num = shift;
- my $i;
- print "thread $num starting\n";
- for ($i = 1; $i <= 20; $i++) {
- print "thread $num iteration $i\n";
- select(undef, undef, undef, rand(10)/100);
- {
- lock($lock);
- warn "thread $num saw non-zero level = $level\n" if $level;
- $level++;
- print "thread $num has lock\n";
- select(undef, undef, undef, rand(10)/100);
- $level--;
- }
- print "thread $num released lock\n";
- }
-}
-
-for ($t = 1; $t <= 5; $t++) {
- new Thread \&worker, $t;
-}
diff --git a/contrib/perl5/ext/Thread/queue.t b/contrib/perl5/ext/Thread/queue.t
deleted file mode 100644
index 4672ba6..0000000
--- a/contrib/perl5/ext/Thread/queue.t
+++ /dev/null
@@ -1,36 +0,0 @@
-use Thread;
-use Thread::Queue;
-
-$q = new Thread::Queue;
-
-sub reader {
- my $tid = Thread->self->tid;
- my $i = 0;
- while (1) {
- $i++;
- print "reader (tid $tid): waiting for element $i...\n";
- my $el = $q->dequeue;
- print "reader (tid $tid): dequeued element $i: value $el\n";
- select(undef, undef, undef, rand(2));
- if ($el == -1) {
- # end marker
- print "reader (tid $tid) returning\n";
- return;
- }
- }
-}
-
-my $nthreads = 3;
-
-for (my $i = 0; $i < $nthreads; $i++) {
- Thread->new(\&reader, $i);
-}
-
-for (my $i = 1; $i <= 10; $i++) {
- my $el = int(rand(100));
- select(undef, undef, undef, rand(2));
- print "writer: enqueuing value $el\n";
- $q->enqueue($el);
-}
-
-$q->enqueue((-1) x $nthreads); # one end marker for each thread
diff --git a/contrib/perl5/ext/Thread/specific.t b/contrib/perl5/ext/Thread/specific.t
deleted file mode 100644
index da130b1..0000000
--- a/contrib/perl5/ext/Thread/specific.t
+++ /dev/null
@@ -1,17 +0,0 @@
-use Thread;
-
-use Thread::Specific qw(foo);
-
-sub count {
- my $tid = Thread->self->tid;
- my Thread::Specific $tsd = Thread::Specific::data;
- for (my $i = 0; $i < 5; $i++) {
- $tsd->{foo} = $i;
- print "thread $tid count: $tsd->{foo}\n";
- select(undef, undef, undef, rand(2));
- }
-};
-
-for(my $t = 0; $t < 5; $t++) {
- new Thread \&count;
-}
diff --git a/contrib/perl5/ext/Thread/sync.t b/contrib/perl5/ext/Thread/sync.t
deleted file mode 100644
index 6445b55..0000000
--- a/contrib/perl5/ext/Thread/sync.t
+++ /dev/null
@@ -1,60 +0,0 @@
-use Thread;
-
-$level = 0;
-
-sub single_file : locked {
- my $arg = shift;
- $level++;
- print "Level $level for $arg\n";
- print "(something is wrong)\n" if $level < 0 || $level > 1;
- sleep 1;
- $level--;
- print "Back to level $level\n";
-}
-
-sub start_bar {
- my $i;
- print "start bar\n";
- for $i (1..3) {
- print "bar $i\n";
- single_file("bar $i");
- sleep 1 if rand > 0.5;
- }
- print "end bar\n";
- return 1;
-}
-
-sub start_foo {
- my $i;
- print "start foo\n";
- for $i (1..3) {
- print "foo $i\n";
- single_file("foo $i");
- sleep 1 if rand > 0.5;
- }
- print "end foo\n";
- return 1;
-}
-
-sub start_baz {
- my $i;
- print "start baz\n";
- for $i (1..3) {
- print "baz $i\n";
- single_file("baz $i");
- sleep 1 if rand > 0.5;
- }
- print "end baz\n";
- return 1;
-}
-
-$| = 1;
-srand($$^$^T);
-
-$foo = new Thread \&start_foo;
-$bar = new Thread \&start_bar;
-$baz = new Thread \&start_baz;
-$foo->join();
-$bar->join();
-$baz->join();
-print "main: threads finished, exiting\n";
diff --git a/contrib/perl5/ext/Thread/sync2.t b/contrib/perl5/ext/Thread/sync2.t
deleted file mode 100644
index ffc74b4..0000000
--- a/contrib/perl5/ext/Thread/sync2.t
+++ /dev/null
@@ -1,68 +0,0 @@
-use Thread;
-
-$global = undef;
-
-sub single_file : locked {
- my $who = shift;
- my $i;
-
- print "Uh oh: $who entered while locked by $global\n" if $global;
- $global = $who;
- print "[";
- for ($i = 0; $i < int(10 * rand); $i++) {
- print $who;
- select(undef, undef, undef, 0.1);
- }
- print "]";
- $global = undef;
-}
-
-sub start_a {
- my ($i, $j);
- for ($j = 0; $j < 10; $j++) {
- single_file("A");
- for ($i = 0; $i < int(10 * rand); $i++) {
- print "a";
- select(undef, undef, undef, 0.1);
- }
- }
-}
-
-sub start_b {
- my ($i, $j);
- for ($j = 0; $j < 10; $j++) {
- single_file("B");
- for ($i = 0; $i < int(10 * rand); $i++) {
- print "b";
- select(undef, undef, undef, 0.1);
- }
- }
-}
-
-sub start_c {
- my ($i, $j);
- for ($j = 0; $j < 10; $j++) {
- single_file("C");
- for ($i = 0; $i < int(10 * rand); $i++) {
- print "c";
- select(undef, undef, undef, 0.1);
- }
- }
-}
-
-$| = 1;
-srand($$^$^T);
-
-print <<'EOT';
-Each pair of square brackets [...] should contain a repeated sequence of
-a unique upper case letter. Lower case letters may appear randomly both
-in and out of the brackets.
-EOT
-$foo = new Thread \&start_a;
-$bar = new Thread \&start_b;
-$baz = new Thread \&start_c;
-print "\nmain: joining...\n";
-#$foo->join;
-#$bar->join;
-#$baz->join;
-print "\ndone\n";
diff --git a/contrib/perl5/ext/Thread/typemap b/contrib/perl5/ext/Thread/typemap
deleted file mode 100644
index 7ce7d5c..0000000
--- a/contrib/perl5/ext/Thread/typemap
+++ /dev/null
@@ -1,24 +0,0 @@
-Thread T_XSCPTR
-
-INPUT
-T_XSCPTR
- STMT_START {
- MAGIC *mg;
- SV *sv = ($arg);
-
- if (!sv_isobject(sv))
- croak(\"$var is not an object\");
- sv = (SV*)SvRV(sv);
- if (!SvRMAGICAL(sv) || !(mg = mg_find(sv, '~'))
- || mg->mg_private != ${ntype}_MAGIC_SIGNATURE)
- croak(\"XSUB ${func_name}: $var is a forged ${ntype} object\");
- $var = ($type) SvPVX(mg->mg_obj);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- \"XSUB ${func_name}: %p\\n\", $var);)
- } STMT_END
-T_IVREF
- if (SvROK($arg))
- $var = ($type) SvIV((SV*)SvRV($arg));
- else
- croak(\"$var is not a reference\")
-
diff --git a/contrib/perl5/ext/Thread/unsync.t b/contrib/perl5/ext/Thread/unsync.t
deleted file mode 100644
index f0a51ef..0000000
--- a/contrib/perl5/ext/Thread/unsync.t
+++ /dev/null
@@ -1,37 +0,0 @@
-use Thread;
-
-$| = 1;
-
-if (@ARGV) {
- srand($ARGV[0]);
-} else {
- my $seed = $$ ^ $^T;
- print "Randomising to $seed\n";
- srand($seed);
-}
-
-sub whoami {
- my ($depth, $a, $b, $c) = @_;
- my $i;
- print "whoami ($depth): $a $b $c\n";
- sleep 1;
- whoami($depth - 1, $a, $b, $c) if $depth > 0;
-}
-
-sub start_foo {
- my $r = 3 + int(10 * rand);
- print "start_foo: r is $r\n";
- whoami($r, "start_foo", "foo1", "foo2");
- print "start_foo: finished\n";
-}
-
-sub start_bar {
- my $r = 3 + int(10 * rand);
- print "start_bar: r is $r\n";
- whoami($r, "start_bar", "bar1", "bar2");
- print "start_bar: finished\n";
-}
-
-$foo = new Thread \&start_foo;
-$bar = new Thread \&start_bar;
-print "main: exiting\n";
diff --git a/contrib/perl5/ext/Thread/unsync2.t b/contrib/perl5/ext/Thread/unsync2.t
deleted file mode 100644
index fb955ac..0000000
--- a/contrib/perl5/ext/Thread/unsync2.t
+++ /dev/null
@@ -1,36 +0,0 @@
-use Thread;
-
-$| = 1;
-
-srand($$^$^T);
-
-sub printargs {
- my $thread = shift;
- my $arg;
- my $i;
- while ($arg = shift) {
- my $delay = int(rand(500));
- $i++;
- print "$thread arg $i is $arg\n";
- 1 while $delay--;
- }
-}
-
-sub start_thread {
- my $thread = shift;
- my $count = 10;
- while ($count--) {
- my(@args) = ($thread) x int(rand(10));
- print "$thread $count calling printargs @args\n";
- printargs($thread, @args);
- }
-}
-
-new Thread (\&start_thread, "A");
-new Thread (\&start_thread, "B");
-#new Thread (\&start_thread, "C");
-#new Thread (\&start_thread, "D");
-#new Thread (\&start_thread, "E");
-#new Thread (\&start_thread, "F");
-
-print "main: exiting\n";
diff --git a/contrib/perl5/ext/Thread/unsync3.t b/contrib/perl5/ext/Thread/unsync3.t
deleted file mode 100644
index e03e9c8..0000000
--- a/contrib/perl5/ext/Thread/unsync3.t
+++ /dev/null
@@ -1,50 +0,0 @@
-use Thread;
-
-$| = 1;
-
-srand($$^$^T);
-
-sub whoami {
- my $thread = shift;
- print $thread;
-}
-
-sub uppercase {
- my $count = 100;
- while ($count--) {
- my $i = int(rand(1000));
- 1 while $i--;
- print "A";
- $i = int(rand(1000));
- 1 while $i--;
- whoami("B");
- }
-}
-
-sub lowercase {
- my $count = 100;
- while ($count--) {
- my $i = int(rand(1000));
- 1 while $i--;
- print "x";
- $i = int(rand(1000));
- 1 while $i--;
- whoami("y");
- }
-}
-
-sub numbers {
- my $count = 100;
- while ($count--) {
- my $i = int(rand(1000));
- 1 while $i--;
- print 1;
- $i = int(rand(1000));
- 1 while $i--;
- whoami(2);
- }
-}
-
-new Thread \&numbers;
-new Thread \&uppercase;
-new Thread \&lowercase;
diff --git a/contrib/perl5/ext/Thread/unsync4.t b/contrib/perl5/ext/Thread/unsync4.t
deleted file mode 100644
index 494ad2b..0000000
--- a/contrib/perl5/ext/Thread/unsync4.t
+++ /dev/null
@@ -1,38 +0,0 @@
-use Thread;
-
-$| = 1;
-
-srand($$^$^T);
-
-sub printargs {
- my(@copyargs) = @_;
- my $thread = shift @copyargs;
- my $arg;
- my $i;
- while ($arg = shift @copyargs) {
- my $delay = int(rand(500));
- $i++;
- print "$thread arg $i is $arg\n";
- 1 while $delay--;
- }
-}
-
-sub start_thread {
- my(@threadargs) = @_;
- my $thread = $threadargs[0];
- my $count = 10;
- while ($count--) {
- my(@args) = ($thread) x int(rand(10));
- print "$thread $count calling printargs @args\n";
- printargs($thread, @args);
- }
-}
-
-new Thread (\&start_thread, "A");
-new Thread (\&start_thread, "B");
-new Thread (\&start_thread, "C");
-new Thread (\&start_thread, "D");
-new Thread (\&start_thread, "E");
-new Thread (\&start_thread, "F");
-
-print "main: exiting\n";
diff --git a/contrib/perl5/ext/attrs/Makefile.PL b/contrib/perl5/ext/attrs/Makefile.PL
deleted file mode 100644
index 86ed3f3..0000000
--- a/contrib/perl5/ext/attrs/Makefile.PL
+++ /dev/null
@@ -1,7 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'attrs',
- VERSION_FROM => 'attrs.pm',
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes'
-);
diff --git a/contrib/perl5/ext/attrs/attrs.pm b/contrib/perl5/ext/attrs/attrs.pm
deleted file mode 100644
index 2070632..0000000
--- a/contrib/perl5/ext/attrs/attrs.pm
+++ /dev/null
@@ -1,58 +0,0 @@
-package attrs;
-use XSLoader ();
-
-$VERSION = "1.0";
-
-=head1 NAME
-
-attrs - set/get attributes of a subroutine (deprecated)
-
-=head1 SYNOPSIS
-
- sub foo {
- use attrs qw(locked method);
- ...
- }
-
- @a = attrs::get(\&foo);
-
-=head1 DESCRIPTION
-
-NOTE: Use of this pragma is deprecated. Use the syntax
-
- sub foo : locked method { }
-
-to declare attributes instead. See also L<attributes>.
-
-This pragma lets you set and get attributes for subroutines.
-Setting attributes takes place at compile time; trying to set
-invalid attribute names causes a compile-time error. Calling
-C<attrs::get> on a subroutine reference or name returns its list
-of attribute names. Notice that C<attrs::get> is not exported.
-Valid attributes are as follows.
-
-=over
-
-=item method
-
-Indicates that the invoking subroutine is a method.
-
-=item locked
-
-Setting this attribute is only meaningful when the subroutine or
-method is to be called by multiple threads. When set on a method
-subroutine (i.e. one marked with the B<method> attribute above),
-perl ensures that any invocation of it implicitly locks its first
-argument before execution. When set on a non-method subroutine,
-perl ensures that a lock is taken on the subroutine itself before
-execution. The semantics of the lock are exactly those of one
-explicitly taken with the C<lock> operator immediately after the
-subroutine is entered.
-
-=back
-
-=cut
-
-XSLoader::load 'attrs', $VERSION;
-
-1;
diff --git a/contrib/perl5/ext/attrs/attrs.xs b/contrib/perl5/ext/attrs/attrs.xs
deleted file mode 100644
index 4c00cd7..0000000
--- a/contrib/perl5/ext/attrs/attrs.xs
+++ /dev/null
@@ -1,66 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-static cv_flags_t
-get_flag(char *attr)
-{
- if (strnEQ(attr, "method", 6))
- return CVf_METHOD;
- else if (strnEQ(attr, "locked", 6))
- return CVf_LOCKED;
- else
- return 0;
-}
-
-MODULE = attrs PACKAGE = attrs
-
-void
-import(Class, ...)
-char * Class
- ALIAS:
- unimport = 1
- PREINIT:
- int i;
- CV *cv;
- PPCODE:
- if (!PL_compcv || !(cv = CvOUTSIDE(PL_compcv)))
- croak("can't set attributes outside a subroutine scope");
- if (ckWARN(WARN_DEPRECATED))
- Perl_warner(aTHX_ WARN_DEPRECATED,
- "pragma \"attrs\" is deprecated, "
- "use \"sub NAME : ATTRS\" instead");
- for (i = 1; i < items; i++) {
- STRLEN n_a;
- char *attr = SvPV(ST(i), n_a);
- cv_flags_t flag = get_flag(attr);
- if (!flag)
- croak("invalid attribute name %s", attr);
- if (ix)
- CvFLAGS(cv) &= ~flag;
- else
- CvFLAGS(cv) |= flag;
- }
-
-void
-get(sub)
-SV * sub
- PPCODE:
- if (SvROK(sub)) {
- sub = SvRV(sub);
- if (SvTYPE(sub) != SVt_PVCV)
- sub = Nullsv;
- }
- else {
- STRLEN n_a;
- char *name = SvPV(sub, n_a);
- sub = (SV*)perl_get_cv(name, FALSE);
- }
- if (!sub)
- croak("invalid subroutine reference or name");
- if (CvFLAGS(sub) & CVf_METHOD)
- XPUSHs(sv_2mortal(newSVpvn("method", 6)));
- if (CvFLAGS(sub) & CVf_LOCKED)
- XPUSHs(sv_2mortal(newSVpvn("locked", 6)));
-
diff --git a/contrib/perl5/ext/re/Makefile.PL b/contrib/perl5/ext/re/Makefile.PL
deleted file mode 100644
index bc31b2c..0000000
--- a/contrib/perl5/ext/re/Makefile.PL
+++ /dev/null
@@ -1,38 +0,0 @@
-use ExtUtils::MakeMaker;
-use File::Spec;
-
-WriteMakefile(
- NAME => 're',
- VERSION_FROM => 're.pm',
- MAN3PODS => {}, # Pods will be built by installman.
- XSPROTOARG => '-noprototypes',
- OBJECT => 're_exec$(OBJ_EXT) re_comp$(OBJ_EXT) re$(OBJ_EXT)',
- DEFINE => '-DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG',
- clean => { FILES => '*$(OBJ_EXT) *.c ../../lib/re.pm' },
-);
-
-package MY;
-
-sub upupfile {
- File::Spec->catfile(File::Spec->updir, File::Spec->updir, $_[0]);
-}
-
-sub postamble {
- my $regcomp_c = upupfile('regcomp.c');
- my $regexec_c = upupfile('regexec.c');
-
- <<EOF;
-re_comp.c : $regcomp_c
- - \$(RM_F) re_comp.c
- \$(CP) $regcomp_c re_comp.c
-
-re_comp\$(OBJ_EXT) : re_comp.c
-
-re_exec.c : $regexec_c
- - \$(RM_F) re_exec.c
- \$(CP) $regexec_c re_exec.c
-
-re_exec\$(OBJ_EXT) : re_exec.c
-
-EOF
-}
diff --git a/contrib/perl5/ext/re/hints/aix.pl b/contrib/perl5/ext/re/hints/aix.pl
deleted file mode 100644
index 4fbfefd..0000000
--- a/contrib/perl5/ext/re/hints/aix.pl
+++ /dev/null
@@ -1,22 +0,0 @@
-# Add explicit link to deb.o to pick up .Perl_deb symbol which is not
-# mentioned in perl.exp for earlier cc (xlc) versions in at least
-# non DEBUGGING builds
-# Peter Prymmer <pvhp@best.com>
-
-use Config;
-
-if ($^O eq 'aix' && defined($Config{'ccversion'}) &&
- ( $Config{'ccversion'} =~ /^3\.\d/
- # needed for at least these versions:
- # $Config{'ccversion'} eq '3.6.6.0'
- # $Config{'ccversion'} eq '3.6.4.0'
- # $Config{'ccversion'} eq '3.1.4.0' AIX 4.2
- # $Config{'ccversion'} eq '3.1.4.10' AIX 4.2
- # $Config{'ccversion'} eq '3.1.3.3'
- ||
- $Config{'ccversion'} =~ /^4\.4\.0\.[0-3]/
- )
- ) {
- $self->{OBJECT} .= ' ../../deb$(OBJ_EXT)';
-}
-
diff --git a/contrib/perl5/ext/re/hints/mpeix.pl b/contrib/perl5/ext/re/hints/mpeix.pl
deleted file mode 100644
index d1fbb91..0000000
--- a/contrib/perl5/ext/re/hints/mpeix.pl
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fall back to -O optimization to avoid known gcc 2.8.0 -O2 problems on MPE/iX.
-# Mark Bixby <markb@cccd.edu>
-$self->{OPTIMIZE} = '-O';
diff --git a/contrib/perl5/ext/re/re.pm b/contrib/perl5/ext/re/re.pm
deleted file mode 100644
index 3f142d9..0000000
--- a/contrib/perl5/ext/re/re.pm
+++ /dev/null
@@ -1,129 +0,0 @@
-package re;
-
-$VERSION = 0.02;
-
-=head1 NAME
-
-re - Perl pragma to alter regular expression behaviour
-
-=head1 SYNOPSIS
-
- use re 'taint';
- ($x) = ($^X =~ /^(.*)$/s); # $x is tainted here
-
- $pat = '(?{ $foo = 1 })';
- use re 'eval';
- /foo${pat}bar/; # won't fail (when not under -T switch)
-
- {
- no re 'taint'; # the default
- ($x) = ($^X =~ /^(.*)$/s); # $x is not tainted here
-
- no re 'eval'; # the default
- /foo${pat}bar/; # disallowed (with or without -T switch)
- }
-
- use re 'debug'; # NOT lexically scoped (as others are)
- /^(.*)$/s; # output debugging info during
- # compile and run time
-
- use re 'debugcolor'; # same as 'debug', but with colored output
- ...
-
-(We use $^X in these examples because it's tainted by default.)
-
-=head1 DESCRIPTION
-
-When C<use re 'taint'> is in effect, and a tainted string is the target
-of a regex, the regex memories (or values returned by the m// operator
-in list context) are tainted. This feature is useful when regex operations
-on tainted data aren't meant to extract safe substrings, but to perform
-other transformations.
-
-When C<use re 'eval'> is in effect, a regex is allowed to contain
-C<(?{ ... })> zero-width assertions even if regular expression contains
-variable interpolation. That is normally disallowed, since it is a
-potential security risk. Note that this pragma is ignored when the regular
-expression is obtained from tainted data, i.e. evaluation is always
-disallowed with tainted regular expresssions. See L<perlre/(?{ code })>.
-
-For the purpose of this pragma, interpolation of precompiled regular
-expressions (i.e., the result of C<qr//>) is I<not> considered variable
-interpolation. Thus:
-
- /foo${pat}bar/
-
-I<is> allowed if $pat is a precompiled regular expression, even
-if $pat contains C<(?{ ... })> assertions.
-
-When C<use re 'debug'> is in effect, perl emits debugging messages when
-compiling and using regular expressions. The output is the same as that
-obtained by running a C<-DDEBUGGING>-enabled perl interpreter with the
-B<-Dr> switch. It may be quite voluminous depending on the complexity
-of the match. Using C<debugcolor> instead of C<debug> enables a
-form of output that can be used to get a colorful display on terminals
-that understand termcap color sequences. Set C<$ENV{PERL_RE_TC}> to a
-comma-separated list of C<termcap> properties to use for highlighting
-strings on/off, pre-point part on/off.
-See L<perldebug/"Debugging regular expressions"> for additional info.
-
-The directive C<use re 'debug'> is I<not lexically scoped>, as the
-other directives are. It has both compile-time and run-time effects.
-
-See L<perlmodlib/Pragmatic Modules>.
-
-=cut
-
-# N.B. File::Basename contains a literal for 'taint' as a fallback. If
-# taint is changed here, File::Basename must be updated as well.
-my %bitmask = (
-taint => 0x00100000,
-eval => 0x00200000,
-);
-
-sub setcolor {
- eval { # Ignore errors
- require Term::Cap;
-
- my $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning.
- my $props = $ENV{PERL_RE_TC} || 'md,me,so,se,us,ue';
- my @props = split /,/, $props;
- my $colors = join "\t", map {$terminal->Tputs($_,1)} @props;
-
- $colors =~ s/\0//g;
- $ENV{PERL_RE_COLORS} = $colors;
- };
-}
-
-sub bits {
- my $on = shift;
- my $bits = 0;
- unless(@_) {
- require Carp;
- Carp::carp("Useless use of \"re\" pragma");
- }
- foreach my $s (@_){
- if ($s eq 'debug' or $s eq 'debugcolor') {
- setcolor() if $s eq 'debugcolor';
- require XSLoader;
- XSLoader::load('re');
- install() if $on;
- uninstall() unless $on;
- next;
- }
- $bits |= $bitmask{$s} || 0;
- }
- $bits;
-}
-
-sub import {
- shift;
- $^H |= bits(1,@_);
-}
-
-sub unimport {
- shift;
- $^H &= ~ bits(0,@_);
-}
-
-1;
diff --git a/contrib/perl5/ext/re/re.xs b/contrib/perl5/ext/re/re.xs
deleted file mode 100644
index 25c2a90..0000000
--- a/contrib/perl5/ext/re/re.xs
+++ /dev/null
@@ -1,61 +0,0 @@
-/* We need access to debugger hooks */
-#ifndef DEBUGGING
-# define DEBUGGING
-#endif
-
-#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-extern regexp* my_regcomp (pTHX_ char* exp, char* xend, PMOP* pm);
-extern I32 my_regexec (pTHX_ regexp* prog, char* stringarg, char* strend,
- char* strbeg, I32 minend, SV* screamer,
- void* data, U32 flags);
-extern void my_regfree (pTHX_ struct regexp* r);
-extern char* my_re_intuit_start (pTHX_ regexp *prog, SV *sv, char *strpos,
- char *strend, U32 flags,
- struct re_scream_pos_data_s *data);
-extern SV* my_re_intuit_string (pTHX_ regexp *prog);
-
-static int oldfl;
-
-#define R_DB 512
-
-static void
-deinstall(pTHX)
-{
- PL_regexecp = Perl_regexec_flags;
- PL_regcompp = Perl_pregcomp;
- PL_regint_start = Perl_re_intuit_start;
- PL_regint_string = Perl_re_intuit_string;
- PL_regfree = Perl_pregfree;
-
- if (!oldfl)
- PL_debug &= ~R_DB;
-}
-
-static void
-install(pTHX)
-{
- PL_colorset = 0; /* Allow reinspection of ENV. */
- PL_regexecp = &my_regexec;
- PL_regcompp = &my_regcomp;
- PL_regint_start = &my_re_intuit_start;
- PL_regint_string = &my_re_intuit_string;
- PL_regfree = &my_regfree;
- oldfl = PL_debug & R_DB;
- PL_debug |= R_DB;
-}
-
-MODULE = re PACKAGE = re
-
-void
-install()
- CODE:
- install(aTHX);
-
-void
-deinstall()
- CODE:
- deinstall(aTHX);
diff --git a/contrib/perl5/ext/util/make_ext b/contrib/perl5/ext/util/make_ext
deleted file mode 100644
index 54caf7d..0000000
--- a/contrib/perl5/ext/util/make_ext
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/bin/sh
-
-# This script acts as a simple interface for building extensions.
-# It primarily used by the perl Makefile:
-#
-# d_dummy $(dynamic_ext): miniperl preplibrary FORCE
-# @sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
-#
-# It may be deleted in a later release of perl so try to
-# avoid using it for other purposes.
-
-target=$1; shift
-extspec=$1; shift
-makecmd=$1; shift # Should be something like MAKE=make
-passthru="$*" # allow extra macro=value to be passed through
-echo ""
-
-# Previously, $make was taken from config.sh. However, the user might
-# instead be running a possibly incompatible make. This might happen if
-# the user types "gmake" instead of a plain "make", for example. The
-# correct current value of MAKE will come through from the main perl
-# makefile as MAKE=/whatever/make in $makecmd. We'll be cautious in
-# case third party users of this script (are there any?) don't have the
-# MAKE=$(MAKE) argument, which was added after 5.004_03.
-case "$makecmd" in
-MAKE=*)
- eval $makecmd
- ;;
-*) echo 'ext/util/make_ext: WARNING: Please include MAKE=$(MAKE)'
- echo ' in your call to make_ext. See ext/util/make_ext for details.'
- exit 1
- ;;
-esac
-
-
-case $CONFIG in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh generated by Configure"; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-
-if test "X$extspec" = X; then
- echo "make_ext: no extension specified"
- exit 1;
-fi
-
-# The Perl Makefile.SH will expand all extensions to
-# lib/auto/X/X.a (or lib/auto/X/Y/Y.a if nested)
-# A user wishing to run make_ext might use
-# X (or X/Y or X::Y if nested)
-
-# canonise into X/Y form (pname)
-case "$extspec" in
-lib*) # Remove lib/auto prefix and /*.* suffix
- pname=`echo "$extspec" | sed -e 's:^lib/auto/::' -e 's:/[^/]*\.[^/]*$::' ` ;;
-ext*) # Remove ext/ prefix and /pm_to_blib suffix
- pname=`echo "$extspec" | sed -e 's:^ext/::' -e 's:/pm_to_blib$::' ` ;;
-*::*) # Convert :: to /
- pname=`echo "$extspec" | sed -e 's/::/\//g' ` ;;
-*) pname="$extspec" ;;
-esac
-# echo "Converted $extspec to $pname"
-
-mname=`echo "$pname" | sed -e 's!/!::!g'`
-depth=`echo "$pname" | sed -e 's![^/][^/]*!..!g'`
-makefile=Makefile
-makeargs=''
-makeopts=''
-
-if test ! -d "ext/$pname"; then
- echo " Skipping $extspec (directory does not exist)"
- exit 0 # not an error ?
-fi
-
-
-echo " Making $mname ($target)"
-
-cd ext/$pname
-
-# check link type and do any preliminaries
-case "$target" in
- # convert 'static' or 'dynamic' into 'all LINKTYPE=XXX'
-static) makeargs="LINKTYPE=static CCCDLFLAGS="
- target=all
- ;;
-dynamic) makeargs="LINKTYPE=dynamic";
- target=all
- ;;
-
-nonxs) makeargs="";
- target=all
- ;;
-
-*clean) # If Makefile has been moved to Makefile.old by a make clean
- # then use Makefile.old for realclean rather than rebuild it
- if test ! -f $makefile -a -f Makefile.old; then
- makefile=Makefile.old
- makeopts="-f $makefile"
- echo "Note: Using Makefile.old"
- fi
- ;;
-
-*) # for the time being we are strict about what make_ext is used for
- echo "make_ext: unknown make target '$target'"; exit 1
- ;;
-'') echo "make_ext: no make target specified (eg static or dynamic)"; exit 1
- ;;
-esac
-
-if test ! -f $makefile ; then
- test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib Makefile.PL INSTALLDIRS=perl $passthru
-fi
-if test ! -f $makefile ; then
- if test -f Makefile.SH; then
- echo "Warning: Writing $makefile from old-style Makefile.SH!"
- sh Makefile.SH
- else
- echo "Warning: No Makefile!"
- fi
-fi
-
-case "$target" in
-clean) ;;
-realclean) ;;
-*) # Give makefile an opportunity to rewrite itself.
- # reassure users that life goes on...
- $MAKE config $passthru || echo "$MAKE config failed, continuing anyway..."
- ;;
-esac
-
-$MAKE $makeopts $target $makeargs $passthru || exit
-
-exit $?
diff --git a/contrib/perl5/ext/util/mkbootstrap b/contrib/perl5/ext/util/mkbootstrap
deleted file mode 100644
index 6c3a7e1..0000000
--- a/contrib/perl5/ext/util/mkbootstrap
+++ /dev/null
@@ -1,5 +0,0 @@
-#!../../miniperl -w -I../../lib
-
-use ExtUtils::MakeMaker;
-&mkbootstrap(join(" ",@ARGV));
-exit;
diff --git a/contrib/perl5/fakethr.h b/contrib/perl5/fakethr.h
deleted file mode 100644
index 098fefe..0000000
--- a/contrib/perl5/fakethr.h
+++ /dev/null
@@ -1,56 +0,0 @@
-typedef int perl_mutex;
-typedef int perl_key;
-
-typedef struct perl_thread *perl_os_thread;
-/* With fake threads, thr is global(ish) so we don't need dTHR */
-#define dTHR extern int errno
-
-struct perl_wait_queue {
- struct perl_thread * thread;
- struct perl_wait_queue * next;
-};
-typedef struct perl_wait_queue *perl_cond;
-
-/* Ask thread.h to include our per-thread extras */
-#define HAVE_THREAD_INTERN
-struct thread_intern {
- perl_os_thread next_run, prev_run; /* Linked list of runnable threads */
- perl_cond wait_queue; /* Wait queue that we are waiting on */
- IV private; /* Holds data across time slices */
- I32 savemark; /* Holds MARK for thread join values */
-};
-
-#define init_thread_intern(t) \
- STMT_START { \
- t->self = (t); \
- (t)->i.next_run = (t)->i.prev_run = (t); \
- (t)->i.wait_queue = 0; \
- (t)->i.private = 0; \
- } STMT_END
-
-/*
- * Note that SCHEDULE() is only callable from pp code (which
- * must be expecting to be restarted). We'll have to do
- * something a bit different for XS code.
- */
-
-#define SCHEDULE() return schedule(), PL_op
-
-#define MUTEX_LOCK(m)
-#define MUTEX_UNLOCK(m)
-#define MUTEX_INIT(m)
-#define MUTEX_DESTROY(m)
-#define COND_INIT(c) perl_cond_init(c)
-#define COND_SIGNAL(c) perl_cond_signal(c)
-#define COND_BROADCAST(c) perl_cond_broadcast(c)
-#define COND_WAIT(c, m) \
- STMT_START { \
- perl_cond_wait(c); \
- SCHEDULE(); \
- } STMT_END
-#define COND_DESTROY(c)
-
-#define THREAD_CREATE(t, f) f((t))
-#define THREAD_POST_CREATE(t) NOOP
-
-#define YIELD NOOP
diff --git a/contrib/perl5/form.h b/contrib/perl5/form.h
deleted file mode 100644
index d9f83f0..0000000
--- a/contrib/perl5/form.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* form.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-#define FF_END 0
-#define FF_LINEMARK 1
-#define FF_LITERAL 2
-#define FF_SKIP 3
-#define FF_FETCH 4
-#define FF_CHECKNL 5
-#define FF_CHECKCHOP 6
-#define FF_SPACE 7
-#define FF_HALFSPACE 8
-#define FF_ITEM 9
-#define FF_CHOP 10
-#define FF_LINEGLOB 11
-#define FF_DECIMAL 12
-#define FF_NEWLINE 13
-#define FF_BLANK 14
-#define FF_MORE 15
-
diff --git a/contrib/perl5/global.sym b/contrib/perl5/global.sym
deleted file mode 100644
index 2028723..0000000
--- a/contrib/perl5/global.sym
+++ /dev/null
@@ -1,561 +0,0 @@
-#
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is autogenerated from data in embed.pl. Edit that file
-# and run 'make regen_headers' to effect changes.
-#
-
-perl_alloc_using
-perl_alloc
-perl_construct
-perl_destruct
-perl_free
-perl_run
-perl_parse
-perl_clone
-perl_clone_using
-Perl_malloc
-Perl_calloc
-Perl_realloc
-Perl_mfree
-Perl_get_context
-Perl_set_context
-Perl_amagic_call
-Perl_Gv_AMupdate
-Perl_apply_attrs_string
-Perl_avhv_delete_ent
-Perl_avhv_exists_ent
-Perl_avhv_fetch_ent
-Perl_avhv_store_ent
-Perl_avhv_iternext
-Perl_avhv_iterval
-Perl_avhv_keys
-Perl_av_clear
-Perl_av_delete
-Perl_av_exists
-Perl_av_extend
-Perl_av_fetch
-Perl_av_fill
-Perl_av_len
-Perl_av_make
-Perl_av_pop
-Perl_av_push
-Perl_av_reify
-Perl_av_shift
-Perl_av_store
-Perl_av_undef
-Perl_av_unshift
-Perl_block_gimme
-Perl_call_list
-Perl_cast_ulong
-Perl_cast_i32
-Perl_cast_iv
-Perl_cast_uv
-Perl_my_chsize
-Perl_condpair_magic
-Perl_croak
-Perl_vcroak
-Perl_croak_nocontext
-Perl_die_nocontext
-Perl_deb_nocontext
-Perl_form_nocontext
-Perl_load_module_nocontext
-Perl_mess_nocontext
-Perl_warn_nocontext
-Perl_warner_nocontext
-Perl_newSVpvf_nocontext
-Perl_sv_catpvf_nocontext
-Perl_sv_setpvf_nocontext
-Perl_sv_catpvf_mg_nocontext
-Perl_sv_setpvf_mg_nocontext
-Perl_fprintf_nocontext
-Perl_printf_nocontext
-Perl_cv_const_sv
-Perl_cv_undef
-Perl_cx_dump
-Perl_filter_add
-Perl_filter_del
-Perl_filter_read
-Perl_get_op_descs
-Perl_get_op_names
-Perl_get_ppaddr
-Perl_deb
-Perl_vdeb
-Perl_debprofdump
-Perl_debop
-Perl_debstack
-Perl_debstackptrs
-Perl_delimcpy
-Perl_die
-Perl_dounwind
-Perl_do_binmode
-Perl_do_close
-Perl_do_join
-Perl_do_open
-Perl_do_open9
-Perl_dowantarray
-Perl_dump_all
-Perl_dump_eval
-Perl_dump_fds
-Perl_dump_form
-Perl_gv_dump
-Perl_op_dump
-Perl_pmop_dump
-Perl_dump_packsubs
-Perl_dump_sub
-Perl_fbm_compile
-Perl_fbm_instr
-Perl_form
-Perl_vform
-Perl_free_tmps
-Perl_gp_free
-Perl_gp_ref
-Perl_gv_AVadd
-Perl_gv_HVadd
-Perl_gv_IOadd
-Perl_gv_autoload4
-Perl_gv_check
-Perl_gv_efullname
-Perl_gv_efullname3
-Perl_gv_efullname4
-Perl_gv_fetchfile
-Perl_gv_fetchmeth
-Perl_gv_fetchmethod
-Perl_gv_fetchmethod_autoload
-Perl_gv_fetchpv
-Perl_gv_fullname
-Perl_gv_fullname3
-Perl_gv_fullname4
-Perl_gv_init
-Perl_gv_stashpv
-Perl_gv_stashpvn
-Perl_gv_stashsv
-Perl_hv_clear
-Perl_hv_delayfree_ent
-Perl_hv_delete
-Perl_hv_delete_ent
-Perl_hv_exists
-Perl_hv_exists_ent
-Perl_hv_fetch
-Perl_hv_fetch_ent
-Perl_hv_free_ent
-Perl_hv_iterinit
-Perl_hv_iterkey
-Perl_hv_iterkeysv
-Perl_hv_iternext
-Perl_hv_iternextsv
-Perl_hv_iterval
-Perl_hv_ksplit
-Perl_hv_magic
-Perl_hv_store
-Perl_hv_store_ent
-Perl_hv_undef
-Perl_ibcmp
-Perl_ibcmp_locale
-Perl_init_stacks
-Perl_instr
-Perl_is_uni_alnum
-Perl_is_uni_alnumc
-Perl_is_uni_idfirst
-Perl_is_uni_alpha
-Perl_is_uni_ascii
-Perl_is_uni_space
-Perl_is_uni_cntrl
-Perl_is_uni_graph
-Perl_is_uni_digit
-Perl_is_uni_upper
-Perl_is_uni_lower
-Perl_is_uni_print
-Perl_is_uni_punct
-Perl_is_uni_xdigit
-Perl_to_uni_upper
-Perl_to_uni_title
-Perl_to_uni_lower
-Perl_is_uni_alnum_lc
-Perl_is_uni_alnumc_lc
-Perl_is_uni_idfirst_lc
-Perl_is_uni_alpha_lc
-Perl_is_uni_ascii_lc
-Perl_is_uni_space_lc
-Perl_is_uni_cntrl_lc
-Perl_is_uni_graph_lc
-Perl_is_uni_digit_lc
-Perl_is_uni_upper_lc
-Perl_is_uni_lower_lc
-Perl_is_uni_print_lc
-Perl_is_uni_punct_lc
-Perl_is_uni_xdigit_lc
-Perl_to_uni_upper_lc
-Perl_to_uni_title_lc
-Perl_to_uni_lower_lc
-Perl_is_utf8_char
-Perl_is_utf8_string
-Perl_is_utf8_alnum
-Perl_is_utf8_alnumc
-Perl_is_utf8_idfirst
-Perl_is_utf8_alpha
-Perl_is_utf8_ascii
-Perl_is_utf8_space
-Perl_is_utf8_cntrl
-Perl_is_utf8_digit
-Perl_is_utf8_graph
-Perl_is_utf8_upper
-Perl_is_utf8_lower
-Perl_is_utf8_print
-Perl_is_utf8_punct
-Perl_is_utf8_xdigit
-Perl_is_utf8_mark
-Perl_leave_scope
-Perl_load_module
-Perl_vload_module
-Perl_looks_like_number
-Perl_markstack_grow
-Perl_mess
-Perl_vmess
-Perl_mg_clear
-Perl_mg_copy
-Perl_mg_find
-Perl_mg_free
-Perl_mg_get
-Perl_mg_length
-Perl_mg_magical
-Perl_mg_set
-Perl_mg_size
-Perl_moreswitches
-Perl_my_atof
-Perl_my_bcopy
-Perl_my_bzero
-Perl_my_exit
-Perl_my_failure_exit
-Perl_my_fflush_all
-Perl_my_lstat
-Perl_my_memcmp
-Perl_my_memset
-Perl_my_pclose
-Perl_my_popen
-Perl_my_setenv
-Perl_my_stat
-Perl_my_swap
-Perl_my_htonl
-Perl_my_ntohl
-Perl_newANONLIST
-Perl_newANONHASH
-Perl_newANONSUB
-Perl_newASSIGNOP
-Perl_newCONDOP
-Perl_newCONSTSUB
-Perl_newFORM
-Perl_newFOROP
-Perl_newLOGOP
-Perl_newLOOPEX
-Perl_newLOOPOP
-Perl_newNULLLIST
-Perl_newOP
-Perl_newPROG
-Perl_newRANGE
-Perl_newSLICEOP
-Perl_newSTATEOP
-Perl_newSUB
-Perl_newXS
-Perl_newAV
-Perl_newAVREF
-Perl_newBINOP
-Perl_newCVREF
-Perl_newGVOP
-Perl_newGVgen
-Perl_newGVREF
-Perl_newHVREF
-Perl_newHV
-Perl_newHVhv
-Perl_newIO
-Perl_newLISTOP
-Perl_newPADOP
-Perl_newPMOP
-Perl_newPVOP
-Perl_newRV
-Perl_newRV_noinc
-Perl_newSV
-Perl_newSVREF
-Perl_newSVOP
-Perl_newSViv
-Perl_newSVuv
-Perl_newSVnv
-Perl_newSVpv
-Perl_newSVpvn
-Perl_newSVpvf
-Perl_vnewSVpvf
-Perl_newSVrv
-Perl_newSVsv
-Perl_newUNOP
-Perl_newWHILEOP
-Perl_new_stackinfo
-Perl_ninstr
-Perl_op_free
-Perl_pad_sv
-Perl_new_struct_thread
-Perl_call_atexit
-Perl_call_argv
-Perl_call_method
-Perl_call_pv
-Perl_call_sv
-Perl_eval_pv
-Perl_eval_sv
-Perl_get_sv
-Perl_get_av
-Perl_get_hv
-Perl_get_cv
-Perl_init_i18nl10n
-Perl_init_i18nl14n
-Perl_new_collate
-Perl_new_ctype
-Perl_new_numeric
-Perl_set_numeric_local
-Perl_set_numeric_radix
-Perl_set_numeric_standard
-Perl_require_pv
-Perl_pmflag
-Perl_pop_scope
-Perl_push_scope
-Perl_regdump
-Perl_pregexec
-Perl_pregfree
-Perl_pregcomp
-Perl_re_intuit_start
-Perl_re_intuit_string
-Perl_regexec_flags
-Perl_regnext
-Perl_repeatcpy
-Perl_rninstr
-Perl_rsignal
-Perl_savepv
-Perl_savepvn
-Perl_savestack_grow
-Perl_save_aelem
-Perl_save_alloc
-Perl_save_aptr
-Perl_save_ary
-Perl_save_clearsv
-Perl_save_delete
-Perl_save_destructor
-Perl_save_destructor_x
-Perl_save_freesv
-Perl_save_freepv
-Perl_save_generic_svref
-Perl_save_generic_pvref
-Perl_save_gp
-Perl_save_hash
-Perl_save_helem
-Perl_save_hints
-Perl_save_hptr
-Perl_save_I16
-Perl_save_I32
-Perl_save_I8
-Perl_save_int
-Perl_save_item
-Perl_save_iv
-Perl_save_list
-Perl_save_long
-Perl_save_mortalizesv
-Perl_save_nogv
-Perl_save_scalar
-Perl_save_pptr
-Perl_save_vptr
-Perl_save_re_context
-Perl_save_padsv
-Perl_save_sptr
-Perl_save_svref
-Perl_save_threadsv
-Perl_scan_bin
-Perl_scan_hex
-Perl_scan_num
-Perl_scan_oct
-Perl_screaminstr
-Perl_sharepvn
-Perl_stack_grow
-Perl_start_subparse
-Perl_sv_2bool
-Perl_sv_2cv
-Perl_sv_2io
-Perl_sv_2iv
-Perl_sv_2mortal
-Perl_sv_2nv
-Perl_sv_2pv
-Perl_sv_2pvutf8
-Perl_sv_2pvbyte
-Perl_sv_2uv
-Perl_sv_iv
-Perl_sv_uv
-Perl_sv_nv
-Perl_sv_pvn
-Perl_sv_pvutf8n
-Perl_sv_pvbyten
-Perl_sv_true
-Perl_sv_backoff
-Perl_sv_bless
-Perl_sv_catpvf
-Perl_sv_vcatpvf
-Perl_sv_catpv
-Perl_sv_catpvn
-Perl_sv_catsv
-Perl_sv_chop
-Perl_sv_clear
-Perl_sv_cmp
-Perl_sv_cmp_locale
-Perl_sv_collxfrm
-Perl_sv_compile_2op
-Perl_sv_dec
-Perl_sv_dump
-Perl_sv_derived_from
-Perl_sv_eq
-Perl_sv_free
-Perl_sv_gets
-Perl_sv_grow
-Perl_sv_inc
-Perl_sv_insert
-Perl_sv_isa
-Perl_sv_isobject
-Perl_sv_len
-Perl_sv_len_utf8
-Perl_sv_magic
-Perl_sv_mortalcopy
-Perl_sv_newmortal
-Perl_sv_newref
-Perl_sv_peek
-Perl_sv_pos_u2b
-Perl_sv_pos_b2u
-Perl_sv_pvn_force
-Perl_sv_pvutf8n_force
-Perl_sv_pvbyten_force
-Perl_sv_reftype
-Perl_sv_replace
-Perl_sv_report_used
-Perl_sv_reset
-Perl_sv_setpvf
-Perl_sv_vsetpvf
-Perl_sv_setiv
-Perl_sv_setpviv
-Perl_sv_setuv
-Perl_sv_setnv
-Perl_sv_setref_iv
-Perl_sv_setref_nv
-Perl_sv_setref_pv
-Perl_sv_setref_pvn
-Perl_sv_setpv
-Perl_sv_setpvn
-Perl_sv_setsv
-Perl_sv_taint
-Perl_sv_tainted
-Perl_sv_unmagic
-Perl_sv_unref
-Perl_sv_untaint
-Perl_sv_upgrade
-Perl_sv_usepvn
-Perl_sv_vcatpvfn
-Perl_sv_vsetpvfn
-Perl_str_to_version
-Perl_swash_init
-Perl_swash_fetch
-Perl_taint_env
-Perl_taint_proper
-Perl_to_utf8_lower
-Perl_to_utf8_upper
-Perl_to_utf8_title
-Perl_unlnk
-Perl_unlock_condpair
-Perl_unsharepvn
-Perl_utf16_to_utf8
-Perl_utf16_to_utf8_reversed
-Perl_utf8_length
-Perl_utf8_distance
-Perl_utf8_hop
-Perl_utf8_to_bytes
-Perl_bytes_from_utf8
-Perl_bytes_to_utf8
-Perl_utf8_to_uv_simple
-Perl_utf8_to_uv
-Perl_uv_to_utf8
-Perl_warn
-Perl_vwarn
-Perl_warner
-Perl_vwarner
-Perl_whichsig
-Perl_dump_mstats
-Perl_get_mstats
-Perl_safesysmalloc
-Perl_safesyscalloc
-Perl_safesysrealloc
-Perl_safesysfree
-Perl_safexmalloc
-Perl_safexcalloc
-Perl_safexrealloc
-Perl_safexfree
-Perl_GetVars
-Perl_runops_standard
-Perl_runops_debug
-Perl_sv_lock
-Perl_sv_catpvf_mg
-Perl_sv_vcatpvf_mg
-Perl_sv_catpv_mg
-Perl_sv_catpvn_mg
-Perl_sv_catsv_mg
-Perl_sv_setpvf_mg
-Perl_sv_vsetpvf_mg
-Perl_sv_setiv_mg
-Perl_sv_setpviv_mg
-Perl_sv_setuv_mg
-Perl_sv_setnv_mg
-Perl_sv_setpv_mg
-Perl_sv_setpvn_mg
-Perl_sv_setsv_mg
-Perl_sv_usepvn_mg
-Perl_get_vtbl
-Perl_dump_indent
-Perl_dump_vindent
-Perl_do_gv_dump
-Perl_do_gvgv_dump
-Perl_do_hv_dump
-Perl_do_magic_dump
-Perl_do_op_dump
-Perl_do_pmop_dump
-Perl_do_sv_dump
-Perl_magic_dump
-Perl_default_protect
-Perl_vdefault_protect
-Perl_reginitcolors
-Perl_sv_2pv_nolen
-Perl_sv_2pvutf8_nolen
-Perl_sv_2pvbyte_nolen
-Perl_sv_pv
-Perl_sv_pvutf8
-Perl_sv_pvbyte
-Perl_sv_utf8_upgrade
-Perl_sv_utf8_downgrade
-Perl_sv_utf8_encode
-Perl_sv_utf8_decode
-Perl_sv_force_normal
-Perl_sv_add_backref
-Perl_sv_del_backref
-Perl_tmps_grow
-Perl_sv_rvweaken
-Perl_newANONATTRSUB
-Perl_newATTRSUB
-Perl_newMYSUB
-Perl_cx_dup
-Perl_si_dup
-Perl_ss_dup
-Perl_any_dup
-Perl_he_dup
-Perl_re_dup
-Perl_fp_dup
-Perl_dirp_dup
-Perl_gp_dup
-Perl_mg_dup
-Perl_sv_dup
-Perl_sys_intern_dup
-Perl_ptr_table_new
-Perl_ptr_table_fetch
-Perl_ptr_table_store
-Perl_ptr_table_split
-Perl_ptr_table_clear
-Perl_ptr_table_free
-Perl_sys_intern_clear
-Perl_sys_intern_init
diff --git a/contrib/perl5/globals.c b/contrib/perl5/globals.c
deleted file mode 100644
index 5bf4aea..0000000
--- a/contrib/perl5/globals.c
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "INTERN.h"
-#define PERL_IN_GLOBALS_C
-#include "perl.h"
-
-#ifdef PERL_OBJECT
-
-#undef PERLVAR
-#define PERLVAR(x, y)
-#undef PERLVARA
-#define PERLVARA(x, n, y)
-#undef PERLVARI
-#define PERLVARI(x, y, z) interp.x = z;
-#undef PERLVARIC
-#define PERLVARIC(x, y, z) interp.x = z;
-
-CPerlObj::CPerlObj(IPerlMem* ipM, IPerlMem* ipMS, IPerlMem* ipMP,
- IPerlEnv* ipE, IPerlStdIO* ipStd,
- IPerlLIO* ipLIO, IPerlDir* ipD, IPerlSock* ipS,
- IPerlProc* ipP)
-{
- memset(((char*)this)+sizeof(void*), 0, sizeof(CPerlObj)-sizeof(void*));
-
-#include "thrdvar.h"
-#include "intrpvar.h"
-
- PL_Mem = ipM;
- PL_MemShared = ipMS;
- PL_MemParse = ipMP;
- PL_Env = ipE;
- PL_StdIO = ipStd;
- PL_LIO = ipLIO;
- PL_Dir = ipD;
- PL_Sock = ipS;
- PL_Proc = ipP;
-}
-
-void*
-CPerlObj::operator new(size_t nSize, IPerlMem *pvtbl)
-{
- if(pvtbl)
- return pvtbl->pMalloc(pvtbl, nSize);
-#ifndef __MINGW32__
- /* operator new is supposed to throw std::bad_alloc */
- return NULL;
-#endif
-}
-
-#ifndef __BORLANDC__
-void
-CPerlObj::operator delete(void *pPerl, IPerlMem *pvtbl)
-{
- if(pvtbl)
- pvtbl->pFree(pvtbl, pPerl);
-}
-#endif
-
-#ifdef WIN32 /* XXX why are these needed? */
-bool
-Perl_do_exec(char *cmd)
-{
- return PerlProc_Cmd(cmd);
-}
-
-int
-CPerlObj::do_aspawn(void *vreally, void **vmark, void **vsp)
-{
- return PerlProc_aspawn(vreally, vmark, vsp);
-}
-#endif /* WIN32 */
-
-#endif /* PERL_OBJECT */
-
-int
-Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
-{
- dTHX;
- va_list(arglist);
- va_start(arglist, format);
- return PerlIO_vprintf(stream, format, arglist);
-}
-
-int
-Perl_printf_nocontext(const char *format, ...)
-{
- dTHX;
- va_list(arglist);
- va_start(arglist, format);
- return PerlIO_vprintf(PerlIO_stdout(), format, arglist);
-}
-
-#include "perlapi.h" /* bring in PL_force_link_funcs */
diff --git a/contrib/perl5/globvar.sym b/contrib/perl5/globvar.sym
deleted file mode 100644
index 0d76888..0000000
--- a/contrib/perl5/globvar.sym
+++ /dev/null
@@ -1,68 +0,0 @@
-# Global variables that must be exported for embedded applications.
-
-# *** Only structures/arrays with constant initializers should go here.
-# *** Usual globals initialized at runtime should be added in *var*.h.
-# *** Do NOT add functions here, those go in global.sym.
-
-AMG_names
-block_type
-fold
-fold_locale
-freq
-warn_uninit
-warn_nosemi
-warn_reserved
-warn_nl
-no_wrongref
-no_symref
-no_usym
-no_aelem
-no_helem
-no_modify
-no_mem
-no_security
-no_sock_func
-no_dir_func
-no_func
-no_myglob
-check
-op_desc
-op_name
-opargs
-ppaddr
-sig_name
-sig_num
-regkind
-simple
-utf8skip
-uuemap
-varies
-vtbl_sv
-vtbl_env
-vtbl_envelem
-vtbl_sig
-vtbl_sigelem
-vtbl_pack
-vtbl_packelem
-vtbl_dbline
-vtbl_isa
-vtbl_isaelem
-vtbl_arylen
-vtbl_glob
-vtbl_mglob
-vtbl_nkeys
-vtbl_taint
-vtbl_substr
-vtbl_vec
-vtbl_pos
-vtbl_bm
-vtbl_fm
-vtbl_uvar
-vtbl_mutex
-vtbl_defelem
-vtbl_regexp
-vtbl_regdata
-vtbl_regdatum
-vtbl_collxfrm
-vtbl_amagic
-vtbl_amagicelem
diff --git a/contrib/perl5/gv.c b/contrib/perl5/gv.c
deleted file mode 100644
index 984ce51..0000000
--- a/contrib/perl5/gv.c
+++ /dev/null
@@ -1,1741 +0,0 @@
-/* gv.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * 'Mercy!' cried Gandalf. 'If the giving of information is to be the cure
- * of your inquisitiveness, I shall spend all the rest of my days answering
- * you. What more do you want to know?'
- * 'The names of all the stars, and of all living things, and the whole
- * history of Middle-earth and Over-heaven and of the Sundering Seas,'
- * laughed Pippin.
- */
-
-#include "EXTERN.h"
-#define PERL_IN_GV_C
-#include "perl.h"
-
-GV *
-Perl_gv_AVadd(pTHX_ register GV *gv)
-{
- if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
- Perl_croak(aTHX_ "Bad symbol for array");
- if (!GvAV(gv))
- GvAV(gv) = newAV();
- return gv;
-}
-
-GV *
-Perl_gv_HVadd(pTHX_ register GV *gv)
-{
- if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
- Perl_croak(aTHX_ "Bad symbol for hash");
- if (!GvHV(gv))
- GvHV(gv) = newHV();
- return gv;
-}
-
-GV *
-Perl_gv_IOadd(pTHX_ register GV *gv)
-{
- if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
- Perl_croak(aTHX_ "Bad symbol for filehandle");
- if (!GvIOp(gv))
- GvIOp(gv) = newIO();
- return gv;
-}
-
-GV *
-Perl_gv_fetchfile(pTHX_ const char *name)
-{
- char smallbuf[256];
- char *tmpbuf;
- STRLEN tmplen;
- GV *gv;
-
- if (!PL_defstash)
- return Nullgv;
-
- tmplen = strlen(name) + 2;
- if (tmplen < sizeof smallbuf)
- tmpbuf = smallbuf;
- else
- New(603, tmpbuf, tmplen + 1, char);
- tmpbuf[0] = '_';
- tmpbuf[1] = '<';
- strcpy(tmpbuf + 2, name);
- gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
- if (!isGV(gv)) {
- gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
- sv_setpv(GvSV(gv), name);
- if (PERLDB_LINE)
- hv_magic(GvHVn(gv_AVadd(gv)), Nullgv, 'L');
- }
- if (tmpbuf != smallbuf)
- Safefree(tmpbuf);
- return gv;
-}
-
-void
-Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
-{
- register GP *gp;
- bool doproto = SvTYPE(gv) > SVt_NULL;
- char *proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
-
- sv_upgrade((SV*)gv, SVt_PVGV);
- if (SvLEN(gv)) {
- if (proto) {
- SvPVX(gv) = NULL;
- SvLEN(gv) = 0;
- SvPOK_off(gv);
- } else
- Safefree(SvPVX(gv));
- }
- Newz(602, gp, 1, GP);
- GvGP(gv) = gp_ref(gp);
- GvSV(gv) = NEWSV(72,0);
- GvLINE(gv) = CopLINE(PL_curcop);
- GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : "";
- GvCVGEN(gv) = 0;
- GvEGV(gv) = gv;
- sv_magic((SV*)gv, (SV*)gv, '*', Nullch, 0);
- GvSTASH(gv) = (HV*)SvREFCNT_inc(stash);
- GvNAME(gv) = savepvn(name, len);
- GvNAMELEN(gv) = len;
- if (multi || doproto) /* doproto means it _was_ mentioned */
- GvMULTI_on(gv);
- if (doproto) { /* Replicate part of newSUB here. */
- SvIOK_off(gv);
- ENTER;
- /* XXX unsafe for threads if eval_owner isn't held */
- start_subparse(0,0); /* Create CV in compcv. */
- GvCV(gv) = PL_compcv;
- LEAVE;
-
- PL_sub_generation++;
- CvGV(GvCV(gv)) = gv;
- CvFILE(GvCV(gv)) = CopFILE(PL_curcop);
- CvSTASH(GvCV(gv)) = PL_curstash;
-#ifdef USE_THREADS
- CvOWNER(GvCV(gv)) = 0;
- if (!CvMUTEXP(GvCV(gv))) {
- New(666, CvMUTEXP(GvCV(gv)), 1, perl_mutex);
- MUTEX_INIT(CvMUTEXP(GvCV(gv)));
- }
-#endif /* USE_THREADS */
- if (proto) {
- sv_setpv((SV*)GvCV(gv), proto);
- Safefree(proto);
- }
- }
-}
-
-STATIC void
-S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
-{
- switch (sv_type) {
- case SVt_PVIO:
- (void)GvIOn(gv);
- break;
- case SVt_PVAV:
- (void)GvAVn(gv);
- break;
- case SVt_PVHV:
- (void)GvHVn(gv);
- break;
- }
-}
-
-/*
-=for apidoc gv_fetchmeth
-
-Returns the glob with the given C<name> and a defined subroutine or
-C<NULL>. The glob lives in the given C<stash>, or in the stashes
-accessible via @ISA and @UNIVERSAL.
-
-The argument C<level> should be either 0 or -1. If C<level==0>, as a
-side-effect creates a glob with the given C<name> in the given C<stash>
-which in the case of success contains an alias for the subroutine, and sets
-up caching info for this glob. Similarly for all the searched stashes.
-
-This function grants C<"SUPER"> token as a postfix of the stash name. The
-GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
-visible to Perl code. So when calling C<call_sv>, you should not use
-the GV directly; instead, you should use the method's CV, which can be
-obtained from the GV with the C<GvCV> macro.
-
-=cut
-*/
-
-GV *
-Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
-{
- AV* av;
- GV* topgv;
- GV* gv;
- GV** gvp;
- CV* cv;
-
- if (!stash)
- return 0;
- if ((level > 100) || (level < -100))
- Perl_croak(aTHX_ "Recursive inheritance detected while looking for method '%s' in package '%s'",
- name, HvNAME(stash));
-
- DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,HvNAME(stash)) );
-
- gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
- if (!gvp)
- topgv = Nullgv;
- else {
- topgv = *gvp;
- if (SvTYPE(topgv) != SVt_PVGV)
- gv_init(topgv, stash, name, len, TRUE);
- if ((cv = GvCV(topgv))) {
- /* If genuine method or valid cache entry, use it */
- if (!GvCVGEN(topgv) || GvCVGEN(topgv) == PL_sub_generation)
- return topgv;
- /* Stale cached entry: junk it */
- SvREFCNT_dec(cv);
- GvCV(topgv) = cv = Nullcv;
- GvCVGEN(topgv) = 0;
- }
- else if (GvCVGEN(topgv) == PL_sub_generation)
- return 0; /* cache indicates sub doesn't exist */
- }
-
- gvp = (GV**)hv_fetch(stash, "ISA", 3, FALSE);
- av = (gvp && (gv = *gvp) && gv != (GV*)&PL_sv_undef) ? GvAV(gv) : Nullav;
-
- /* create and re-create @.*::SUPER::ISA on demand */
- if (!av || !SvMAGIC(av)) {
- char* packname = HvNAME(stash);
- STRLEN packlen = strlen(packname);
-
- if (packlen >= 7 && strEQ(packname + packlen - 7, "::SUPER")) {
- HV* basestash;
-
- packlen -= 7;
- basestash = gv_stashpvn(packname, packlen, TRUE);
- gvp = (GV**)hv_fetch(basestash, "ISA", 3, FALSE);
- if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
- gvp = (GV**)hv_fetch(stash, "ISA", 3, TRUE);
- if (!gvp || !(gv = *gvp))
- Perl_croak(aTHX_ "Cannot create %s::ISA", HvNAME(stash));
- if (SvTYPE(gv) != SVt_PVGV)
- gv_init(gv, stash, "ISA", 3, TRUE);
- SvREFCNT_dec(GvAV(gv));
- GvAV(gv) = (AV*)SvREFCNT_inc(av);
- }
- }
- }
-
- if (av) {
- SV** svp = AvARRAY(av);
- /* NOTE: No support for tied ISA */
- I32 items = AvFILLp(av) + 1;
- while (items--) {
- SV* sv = *svp++;
- HV* basestash = gv_stashsv(sv, FALSE);
- if (!basestash) {
- if (ckWARN(WARN_MISC))
- Perl_warner(aTHX_ WARN_MISC, "Can't locate package %s for @%s::ISA",
- SvPVX(sv), HvNAME(stash));
- continue;
- }
- gv = gv_fetchmeth(basestash, name, len,
- (level >= 0) ? level + 1 : level - 1);
- if (gv)
- goto gotcha;
- }
- }
-
- /* if at top level, try UNIVERSAL */
-
- if (level == 0 || level == -1) {
- HV* lastchance;
-
- if ((lastchance = gv_stashpvn("UNIVERSAL", 9, FALSE))) {
- if ((gv = gv_fetchmeth(lastchance, name, len,
- (level >= 0) ? level + 1 : level - 1)))
- {
- gotcha:
- /*
- * Cache method in topgv if:
- * 1. topgv has no synonyms (else inheritance crosses wires)
- * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
- */
- if (topgv &&
- GvREFCNT(topgv) == 1 &&
- (cv = GvCV(gv)) &&
- (CvROOT(cv) || CvXSUB(cv)))
- {
- if ((cv = GvCV(topgv)))
- SvREFCNT_dec(cv);
- GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
- GvCVGEN(topgv) = PL_sub_generation;
- }
- return gv;
- }
- else if (topgv && GvREFCNT(topgv) == 1) {
- /* cache the fact that the method is not defined */
- GvCVGEN(topgv) = PL_sub_generation;
- }
- }
- }
-
- return 0;
-}
-
-/*
-=for apidoc gv_fetchmethod
-
-See L<gv_fetchmethod_autoload>.
-
-=cut
-*/
-
-GV *
-Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name)
-{
- return gv_fetchmethod_autoload(stash, name, TRUE);
-}
-
-/*
-=for apidoc gv_fetchmethod_autoload
-
-Returns the glob which contains the subroutine to call to invoke the method
-on the C<stash>. In fact in the presence of autoloading this may be the
-glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
-already setup.
-
-The third parameter of C<gv_fetchmethod_autoload> determines whether
-AUTOLOAD lookup is performed if the given method is not present: non-zero
-means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
-Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
-with a non-zero C<autoload> parameter.
-
-These functions grant C<"SUPER"> token as a prefix of the method name. Note
-that if you want to keep the returned glob for a long time, you need to
-check for it being "AUTOLOAD", since at the later time the call may load a
-different subroutine due to $AUTOLOAD changing its value. Use the glob
-created via a side effect to do this.
-
-These functions have the same side-effects and as C<gv_fetchmeth> with
-C<level==0>. C<name> should be writable if contains C<':'> or C<'
-''>. The warning against passing the GV returned by C<gv_fetchmeth> to
-C<call_sv> apply equally to these functions.
-
-=cut
-*/
-
-GV *
-Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
-{
- register const char *nend;
- const char *nsplit = 0;
- GV* gv;
-
- for (nend = name; *nend; nend++) {
- if (*nend == '\'')
- nsplit = nend;
- else if (*nend == ':' && *(nend + 1) == ':')
- nsplit = ++nend;
- }
- if (nsplit) {
- const char *origname = name;
- name = nsplit + 1;
- if (*nsplit == ':')
- --nsplit;
- if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
- /* ->SUPER::method should really be looked up in original stash */
- SV *tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
- CopSTASHPV(PL_curcop)));
- stash = gv_stashpvn(SvPVX(tmpstr), SvCUR(tmpstr), TRUE);
- DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
- origname, HvNAME(stash), name) );
- }
- else
- stash = gv_stashpvn(origname, nsplit - origname, TRUE);
- }
-
- gv = gv_fetchmeth(stash, name, nend - name, 0);
- if (!gv) {
- if (strEQ(name,"import") || strEQ(name,"unimport"))
- gv = (GV*)&PL_sv_yes;
- else if (autoload)
- gv = gv_autoload4(stash, name, nend - name, TRUE);
- }
- else if (autoload) {
- CV* cv = GvCV(gv);
- if (!CvROOT(cv) && !CvXSUB(cv)) {
- GV* stubgv;
- GV* autogv;
-
- if (CvANON(cv))
- stubgv = gv;
- else {
- stubgv = CvGV(cv);
- if (GvCV(stubgv) != cv) /* orphaned import */
- stubgv = gv;
- }
- autogv = gv_autoload4(GvSTASH(stubgv),
- GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
- if (autogv)
- gv = autogv;
- }
- }
-
- return gv;
-}
-
-GV*
-Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
-{
- static char autoload[] = "AUTOLOAD";
- static STRLEN autolen = 8;
- GV* gv;
- CV* cv;
- HV* varstash;
- GV* vargv;
- SV* varsv;
-
- if (len == autolen && strnEQ(name, autoload, autolen))
- return Nullgv;
- if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE)))
- return Nullgv;
- cv = GvCV(gv);
-
- if (!CvROOT(cv))
- return Nullgv;
-
- /*
- * Inheriting AUTOLOAD for non-methods works ... for now.
- */
- if (ckWARN(WARN_DEPRECATED) && !method &&
- (GvCVGEN(gv) || GvSTASH(gv) != stash))
- Perl_warner(aTHX_ WARN_DEPRECATED,
- "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
- HvNAME(stash), (int)len, name);
-
- /*
- * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
- * The subroutine's original name may not be "AUTOLOAD", so we don't
- * use that, but for lack of anything better we will use the sub's
- * original package to look up $AUTOLOAD.
- */
- varstash = GvSTASH(CvGV(cv));
- vargv = *(GV**)hv_fetch(varstash, autoload, autolen, TRUE);
- ENTER;
-
-#ifdef USE_THREADS
- sv_lock((SV *)varstash);
-#endif
- if (!isGV(vargv))
- gv_init(vargv, varstash, autoload, autolen, FALSE);
- LEAVE;
- varsv = GvSV(vargv);
-#ifdef USE_THREADS
- sv_lock(varsv);
-#endif
- sv_setpv(varsv, HvNAME(stash));
- sv_catpvn(varsv, "::", 2);
- sv_catpvn(varsv, name, len);
- SvTAINTED_off(varsv);
- return gv;
-}
-
-/*
-=for apidoc gv_stashpv
-
-Returns a pointer to the stash for a specified package. C<name> should
-be a valid UTF-8 string. If C<create> is set then the package will be
-created if it does not already exist. If C<create> is not set and the
-package does not exist then NULL is returned.
-
-=cut
-*/
-
-HV*
-Perl_gv_stashpv(pTHX_ const char *name, I32 create)
-{
- return gv_stashpvn(name, strlen(name), create);
-}
-
-HV*
-Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 create)
-{
- char smallbuf[256];
- char *tmpbuf;
- HV *stash;
- GV *tmpgv;
-
- if (namelen + 3 < sizeof smallbuf)
- tmpbuf = smallbuf;
- else
- New(606, tmpbuf, namelen + 3, char);
- Copy(name,tmpbuf,namelen,char);
- tmpbuf[namelen++] = ':';
- tmpbuf[namelen++] = ':';
- tmpbuf[namelen] = '\0';
- tmpgv = gv_fetchpv(tmpbuf, create, SVt_PVHV);
- if (tmpbuf != smallbuf)
- Safefree(tmpbuf);
- if (!tmpgv)
- return 0;
- if (!GvHV(tmpgv))
- GvHV(tmpgv) = newHV();
- stash = GvHV(tmpgv);
- if (!HvNAME(stash))
- HvNAME(stash) = savepv(name);
- return stash;
-}
-
-/*
-=for apidoc gv_stashsv
-
-Returns a pointer to the stash for a specified package, which must be a
-valid UTF-8 string. See C<gv_stashpv>.
-
-=cut
-*/
-
-HV*
-Perl_gv_stashsv(pTHX_ SV *sv, I32 create)
-{
- register char *ptr;
- STRLEN len;
- ptr = SvPV(sv,len);
- return gv_stashpvn(ptr, len, create);
-}
-
-
-GV *
-Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type)
-{
- register const char *name = nambeg;
- register GV *gv = 0;
- GV**gvp;
- I32 len;
- register const char *namend;
- HV *stash = 0;
-
- if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
- name++;
-
- for (namend = name; *namend; namend++) {
- if ((*namend == ':' && namend[1] == ':')
- || (*namend == '\'' && namend[1]))
- {
- if (!stash)
- stash = PL_defstash;
- if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
- return Nullgv;
-
- len = namend - name;
- if (len > 0) {
- char smallbuf[256];
- char *tmpbuf;
-
- if (len + 3 < sizeof smallbuf)
- tmpbuf = smallbuf;
- else
- New(601, tmpbuf, len+3, char);
- Copy(name, tmpbuf, len, char);
- tmpbuf[len++] = ':';
- tmpbuf[len++] = ':';
- tmpbuf[len] = '\0';
- gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
- gv = gvp ? *gvp : Nullgv;
- if (gv && gv != (GV*)&PL_sv_undef) {
- if (SvTYPE(gv) != SVt_PVGV)
- gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
- else
- GvMULTI_on(gv);
- }
- if (tmpbuf != smallbuf)
- Safefree(tmpbuf);
- if (!gv || gv == (GV*)&PL_sv_undef)
- return Nullgv;
-
- if (!(stash = GvHV(gv)))
- stash = GvHV(gv) = newHV();
-
- if (!HvNAME(stash))
- HvNAME(stash) = savepvn(nambeg, namend - nambeg);
- }
-
- if (*namend == ':')
- namend++;
- namend++;
- name = namend;
- if (!*name)
- return gv ? gv : (GV*)*hv_fetch(PL_defstash, "main::", 6, TRUE);
- }
- }
- len = namend - name;
- if (!len)
- len = 1;
-
- /* No stash in name, so see how we can default */
-
- if (!stash) {
- if (isIDFIRST_lazy(name)) {
- bool global = FALSE;
-
- if (isUPPER(*name)) {
- if (*name == 'S' && (
- strEQ(name, "SIG") ||
- strEQ(name, "STDIN") ||
- strEQ(name, "STDOUT") ||
- strEQ(name, "STDERR")))
- global = TRUE;
- else if (*name == 'I' && strEQ(name, "INC"))
- global = TRUE;
- else if (*name == 'E' && strEQ(name, "ENV"))
- global = TRUE;
- else if (*name == 'A' && (
- strEQ(name, "ARGV") ||
- strEQ(name, "ARGVOUT")))
- global = TRUE;
- }
- else if (*name == '_' && !name[1])
- global = TRUE;
-
- if (global)
- stash = PL_defstash;
- else if ((COP*)PL_curcop == &PL_compiling) {
- stash = PL_curstash;
- if (add && (PL_hints & HINT_STRICT_VARS) &&
- sv_type != SVt_PVCV &&
- sv_type != SVt_PVGV &&
- sv_type != SVt_PVFM &&
- sv_type != SVt_PVIO &&
- !(len == 1 && sv_type == SVt_PV && strchr("ab",*name)) )
- {
- gvp = (GV**)hv_fetch(stash,name,len,0);
- if (!gvp ||
- *gvp == (GV*)&PL_sv_undef ||
- SvTYPE(*gvp) != SVt_PVGV)
- {
- stash = 0;
- }
- else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
- (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
- (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
- {
- Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
- sv_type == SVt_PVAV ? '@' :
- sv_type == SVt_PVHV ? '%' : '$',
- name);
- if (GvCVu(*gvp))
- Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
- stash = 0;
- }
- }
- }
- else
- stash = CopSTASH(PL_curcop);
- }
- else
- stash = PL_defstash;
- }
-
- /* By this point we should have a stash and a name */
-
- if (!stash) {
- if (add) {
- qerror(Perl_mess(aTHX_
- "Global symbol \"%s%s\" requires explicit package name",
- (sv_type == SVt_PV ? "$"
- : sv_type == SVt_PVAV ? "@"
- : sv_type == SVt_PVHV ? "%"
- : ""), name));
- stash = PL_nullstash;
- }
- else
- return Nullgv;
- }
-
- if (!SvREFCNT(stash)) /* symbol table under destruction */
- return Nullgv;
-
- gvp = (GV**)hv_fetch(stash,name,len,add);
- if (!gvp || *gvp == (GV*)&PL_sv_undef)
- return Nullgv;
- gv = *gvp;
- if (SvTYPE(gv) == SVt_PVGV) {
- if (add) {
- GvMULTI_on(gv);
- gv_init_sv(gv, sv_type);
- }
- return gv;
- } else if (add & GV_NOINIT) {
- return gv;
- }
-
- /* Adding a new symbol */
-
- if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "Had to create %s unexpectedly", nambeg);
- gv_init(gv, stash, name, len, add & GV_ADDMULTI);
- gv_init_sv(gv, sv_type);
-
- if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
- : (PL_dowarn & G_WARN_ON ) ) )
- GvMULTI_on(gv) ;
-
- /* set up magic where warranted */
- switch (*name) {
- case 'A':
- if (strEQ(name, "ARGV")) {
- IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
- }
- break;
- case 'E':
- if (strnEQ(name, "EXPORT", 6))
- GvMULTI_on(gv);
- break;
- case 'I':
- if (strEQ(name, "ISA")) {
- AV* av = GvAVn(gv);
- GvMULTI_on(gv);
- sv_magic((SV*)av, (SV*)gv, 'I', Nullch, 0);
- /* NOTE: No support for tied ISA */
- if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
- && AvFILLp(av) == -1)
- {
- char *pname;
- av_push(av, newSVpvn(pname = "NDBM_File",9));
- gv_stashpvn(pname, 9, TRUE);
- av_push(av, newSVpvn(pname = "DB_File",7));
- gv_stashpvn(pname, 7, TRUE);
- av_push(av, newSVpvn(pname = "GDBM_File",9));
- gv_stashpvn(pname, 9, TRUE);
- av_push(av, newSVpvn(pname = "SDBM_File",9));
- gv_stashpvn(pname, 9, TRUE);
- av_push(av, newSVpvn(pname = "ODBM_File",9));
- gv_stashpvn(pname, 9, TRUE);
- }
- }
- break;
- case 'O':
- if (strEQ(name, "OVERLOAD")) {
- HV* hv = GvHVn(gv);
- GvMULTI_on(gv);
- hv_magic(hv, Nullgv, 'A');
- }
- break;
- case 'S':
- if (strEQ(name, "SIG")) {
- HV *hv;
- I32 i;
- if (!PL_psig_ptr) {
- int sig_num[] = { SIG_NUM };
- New(73, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
- New(73, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
- }
- GvMULTI_on(gv);
- hv = GvHVn(gv);
- hv_magic(hv, Nullgv, 'S');
- for (i = 1; PL_sig_name[i]; i++) {
- SV ** init;
- init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
- if (init)
- sv_setsv(*init, &PL_sv_undef);
- PL_psig_ptr[i] = 0;
- PL_psig_name[i] = 0;
- }
- }
- break;
- case 'V':
- if (strEQ(name, "VERSION"))
- GvMULTI_on(gv);
- break;
-
- case '&':
- if (len > 1)
- break;
- PL_sawampersand = TRUE;
- goto ro_magicalize;
-
- case '`':
- if (len > 1)
- break;
- PL_sawampersand = TRUE;
- goto ro_magicalize;
-
- case '\'':
- if (len > 1)
- break;
- PL_sawampersand = TRUE;
- goto ro_magicalize;
-
- case ':':
- if (len > 1)
- break;
- sv_setpv(GvSV(gv),PL_chopset);
- goto magicalize;
-
- case '?':
- if (len > 1)
- break;
-#ifdef COMPLEX_STATUS
- (void)SvUPGRADE(GvSV(gv), SVt_PVLV);
-#endif
- goto magicalize;
-
- case '!':
- if (len > 1)
- break;
- if (sv_type > SVt_PV && PL_curcop != &PL_compiling) {
- HV* stash = gv_stashpvn("Errno",5,FALSE);
- if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
- dSP;
- PUTBACK;
- require_pv("Errno.pm");
- SPAGAIN;
- stash = gv_stashpvn("Errno",5,FALSE);
- if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
- Perl_croak(aTHX_ "Can't use %%! because Errno.pm is not available");
- }
- }
- goto magicalize;
- case '-':
- if (len > 1)
- break;
- else {
- AV* av = GvAVn(gv);
- sv_magic((SV*)av, Nullsv, 'D', Nullch, 0);
- SvREADONLY_on(av);
- }
- goto magicalize;
- case '#':
- case '*':
- if (ckWARN(WARN_DEPRECATED) && len == 1 && sv_type == SVt_PV)
- Perl_warner(aTHX_ WARN_DEPRECATED, "Use of $%s is deprecated", name);
- /* FALL THROUGH */
- case '[':
- case '^':
- case '~':
- case '=':
- case '%':
- case '.':
- case '(':
- case ')':
- case '<':
- case '>':
- case ',':
- case '\\':
- case '/':
- case '\001': /* $^A */
- case '\003': /* $^C */
- case '\004': /* $^D */
- case '\005': /* $^E */
- case '\006': /* $^F */
- case '\010': /* $^H */
- case '\011': /* $^I, NOT \t in EBCDIC */
- case '\017': /* $^O */
- case '\020': /* $^P */
- case '\024': /* $^T */
- if (len > 1)
- break;
- goto magicalize;
- case '|':
- if (len > 1)
- break;
- sv_setiv(GvSV(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
- goto magicalize;
- case '\023': /* $^S */
- if (len > 1)
- break;
- goto ro_magicalize;
- case '\027': /* $^W & $^WARNING_BITS */
- if (len > 1 && strNE(name, "\027ARNING_BITS")
- && strNE(name, "\027IDE_SYSTEM_CALLS"))
- break;
- goto magicalize;
-
- case '+':
- if (len > 1)
- break;
- else {
- AV* av = GvAVn(gv);
- sv_magic((SV*)av, (SV*)av, 'D', Nullch, 0);
- SvREADONLY_on(av);
- }
- /* FALL THROUGH */
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- ro_magicalize:
- SvREADONLY_on(GvSV(gv));
- magicalize:
- sv_magic(GvSV(gv), (SV*)gv, 0, name, len);
- break;
-
- case '\014': /* $^L */
- if (len > 1)
- break;
- sv_setpv(GvSV(gv),"\f");
- PL_formfeed = GvSV(gv);
- break;
- case ';':
- if (len > 1)
- break;
- sv_setpv(GvSV(gv),"\034");
- break;
- case ']':
- if (len == 1) {
- SV *sv = GvSV(gv);
- (void)SvUPGRADE(sv, SVt_PVNV);
- Perl_sv_setpvf(aTHX_ sv,
-#if defined(PERL_SUBVERSION) && (PERL_SUBVERSION > 0)
- "%8.6"
-#else
- "%5.3"
-#endif
- NVff,
- SvNVX(PL_patchlevel));
- SvNVX(sv) = SvNVX(PL_patchlevel);
- SvNOK_on(sv);
- SvREADONLY_on(sv);
- }
- break;
- case '\026': /* $^V */
- if (len == 1) {
- SV *sv = GvSV(gv);
- GvSV(gv) = SvREFCNT_inc(PL_patchlevel);
- SvREFCNT_dec(sv);
- }
- break;
- }
- return gv;
-}
-
-void
-Perl_gv_fullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
-{
- HV *hv = GvSTASH(gv);
- if (!hv) {
- (void)SvOK_off(sv);
- return;
- }
- sv_setpv(sv, prefix ? prefix : "");
- if (keepmain || strNE(HvNAME(hv), "main")) {
- sv_catpv(sv,HvNAME(hv));
- sv_catpvn(sv,"::", 2);
- }
- sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
-}
-
-void
-Perl_gv_fullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
-{
- HV *hv = GvSTASH(gv);
- if (!hv) {
- (void)SvOK_off(sv);
- return;
- }
- sv_setpv(sv, prefix ? prefix : "");
- sv_catpv(sv,HvNAME(hv));
- sv_catpvn(sv,"::", 2);
- sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
-}
-
-void
-Perl_gv_efullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
-{
- GV *egv = GvEGV(gv);
- if (!egv)
- egv = gv;
- gv_fullname4(sv, egv, prefix, keepmain);
-}
-
-void
-Perl_gv_efullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
-{
- GV *egv = GvEGV(gv);
- if (!egv)
- egv = gv;
- gv_fullname3(sv, egv, prefix);
-}
-
-/* XXX compatibility with versions <= 5.003. */
-void
-Perl_gv_fullname(pTHX_ SV *sv, GV *gv)
-{
- gv_fullname3(sv, gv, sv == (SV*)gv ? "*" : "");
-}
-
-/* XXX compatibility with versions <= 5.003. */
-void
-Perl_gv_efullname(pTHX_ SV *sv, GV *gv)
-{
- gv_efullname3(sv, gv, sv == (SV*)gv ? "*" : "");
-}
-
-IO *
-Perl_newIO(pTHX)
-{
- IO *io;
- GV *iogv;
-
- io = (IO*)NEWSV(0,0);
- sv_upgrade((SV *)io,SVt_PVIO);
- SvREFCNT(io) = 1;
- SvOBJECT_on(io);
- iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
- /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
- if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
- iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
- SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
- return io;
-}
-
-void
-Perl_gv_check(pTHX_ HV *stash)
-{
- register HE *entry;
- register I32 i;
- register GV *gv;
- HV *hv;
-
- if (!HvARRAY(stash))
- return;
- for (i = 0; i <= (I32) HvMAX(stash); i++) {
- for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
- if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
- (gv = (GV*)HeVAL(entry)) && (hv = GvHV(gv)) && HvNAME(hv))
- {
- if (hv != PL_defstash && hv != stash)
- gv_check(hv); /* nested package */
- }
- else if (isALPHA(*HeKEY(entry))) {
- char *file;
- gv = (GV*)HeVAL(entry);
- if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
- continue;
- file = GvFILE(gv);
- /* performance hack: if filename is absolute and it's a standard
- * module, don't bother warning */
- if (file
- && PERL_FILE_IS_ABSOLUTE(file)
- && (instr(file, "/lib/") || instr(file, ".pm")))
- {
- continue;
- }
- CopLINE_set(PL_curcop, GvLINE(gv));
-#ifdef USE_ITHREADS
- CopFILE(PL_curcop) = file; /* set for warning */
-#else
- CopFILEGV(PL_curcop) = gv_fetchfile(file);
-#endif
- Perl_warner(aTHX_ WARN_ONCE,
- "Name \"%s::%s\" used only once: possible typo",
- HvNAME(stash), GvNAME(gv));
- }
- }
- }
-}
-
-GV *
-Perl_newGVgen(pTHX_ char *pack)
-{
- return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
- TRUE, SVt_PVGV);
-}
-
-/* hopefully this is only called on local symbol table entries */
-
-GP*
-Perl_gp_ref(pTHX_ GP *gp)
-{
- if (!gp)
- return (GP*)NULL;
- gp->gp_refcnt++;
- if (gp->gp_cv) {
- if (gp->gp_cvgen) {
- /* multi-named GPs cannot be used for method cache */
- SvREFCNT_dec(gp->gp_cv);
- gp->gp_cv = Nullcv;
- gp->gp_cvgen = 0;
- }
- else {
- /* Adding a new name to a subroutine invalidates method cache */
- PL_sub_generation++;
- }
- }
- return gp;
-}
-
-void
-Perl_gp_free(pTHX_ GV *gv)
-{
- GP* gp;
-
- if (!gv || !(gp = GvGP(gv)))
- return;
- if (gp->gp_refcnt == 0) {
- if (ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL,
- "Attempt to free unreferenced glob pointers");
- return;
- }
- if (gp->gp_cv) {
- /* Deleting the name of a subroutine invalidates method cache */
- PL_sub_generation++;
- }
- if (--gp->gp_refcnt > 0) {
- if (gp->gp_egv == gv)
- gp->gp_egv = 0;
- return;
- }
-
- SvREFCNT_dec(gp->gp_sv);
- SvREFCNT_dec(gp->gp_av);
- SvREFCNT_dec(gp->gp_hv);
- SvREFCNT_dec(gp->gp_io);
- SvREFCNT_dec(gp->gp_cv);
- SvREFCNT_dec(gp->gp_form);
-
- Safefree(gp);
- GvGP(gv) = 0;
-}
-
-#if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
-#define MICROPORT
-#endif
-
-#ifdef MICROPORT /* Microport 2.4 hack */
-AV *GvAVn(gv)
-register GV *gv;
-{
- if (GvGP(gv)->gp_av)
- return GvGP(gv)->gp_av;
- else
- return GvGP(gv_AVadd(gv))->gp_av;
-}
-
-HV *GvHVn(gv)
-register GV *gv;
-{
- if (GvGP(gv)->gp_hv)
- return GvGP(gv)->gp_hv;
- else
- return GvGP(gv_HVadd(gv))->gp_hv;
-}
-#endif /* Microport 2.4 hack */
-
-/* Updates and caches the CV's */
-
-bool
-Perl_Gv_AMupdate(pTHX_ HV *stash)
-{
- GV* gv;
- CV* cv;
- MAGIC* mg=mg_find((SV*)stash,'c');
- AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
- AMT amt;
- STRLEN n_a;
-#ifdef OVERLOAD_VIA_HASH
- GV** gvp;
- HV* hv;
-#endif
-
- if (mg && amtp->was_ok_am == PL_amagic_generation
- && amtp->was_ok_sub == PL_sub_generation)
- return AMT_AMAGIC(amtp);
- if (amtp && AMT_AMAGIC(amtp)) { /* Have table. */
- int i;
- for (i=1; i<NofAMmeth; i++) {
- if (amtp->table[i]) {
- SvREFCNT_dec(amtp->table[i]);
- }
- }
- }
- sv_unmagic((SV*)stash, 'c');
-
- DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
-
- amt.was_ok_am = PL_amagic_generation;
- amt.was_ok_sub = PL_sub_generation;
- amt.fallback = AMGfallNO;
- amt.flags = 0;
-
-#ifdef OVERLOAD_VIA_HASH
- gvp=(GV**)hv_fetch(stash,"OVERLOAD",8,FALSE); /* A shortcut */
- if (gvp && ((gv = *gvp) != (GV*)&PL_sv_undef && (hv = GvHV(gv)))) {
- int filled=0;
- int i;
- char *cp;
- SV* sv;
- SV** svp;
-
- /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
-
- if (( cp = (char *)PL_AMG_names[0] ) &&
- (svp = (SV**)hv_fetch(hv,cp,strlen(cp),FALSE)) && (sv = *svp)) {
- if (SvTRUE(sv)) amt.fallback=AMGfallYES;
- else if (SvOK(sv)) amt.fallback=AMGfallNEVER;
- }
- for (i = 1; i < NofAMmeth; i++) {
- cv = 0;
- cp = (char *)PL_AMG_names[i];
-
- svp = (SV**)hv_fetch(hv, cp, strlen(cp), FALSE);
- if (svp && ((sv = *svp) != &PL_sv_undef)) {
- switch (SvTYPE(sv)) {
- default:
- if (!SvROK(sv)) {
- if (!SvOK(sv)) break;
- gv = gv_fetchmethod(stash, SvPV(sv, n_a));
- if (gv) cv = GvCV(gv);
- break;
- }
- cv = (CV*)SvRV(sv);
- if (SvTYPE(cv) == SVt_PVCV)
- break;
- /* FALL THROUGH */
- case SVt_PVHV:
- case SVt_PVAV:
- Perl_croak(aTHX_ "Not a subroutine reference in overload table");
- return FALSE;
- case SVt_PVCV:
- cv = (CV*)sv;
- break;
- case SVt_PVGV:
- if (!(cv = GvCVu((GV*)sv)))
- cv = sv_2cv(sv, &stash, &gv, FALSE);
- break;
- }
- if (cv) filled=1;
- else {
- Perl_croak(aTHX_ "Method for operation %s not found in package %.256s during blessing\n",
- cp,HvNAME(stash));
- return FALSE;
- }
- }
-#else
- {
- int filled = 0;
- int i;
- const char *cp;
- SV* sv = NULL;
-
- /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
-
- if ((cp = PL_AMG_names[0])) {
- /* Try to find via inheritance. */
- gv = gv_fetchmeth(stash, "()", 2, -1); /* A cookie: "()". */
- if (gv)
- sv = GvSV(gv);
-
- if (!gv)
- goto no_table;
- else if (SvTRUE(sv))
- amt.fallback=AMGfallYES;
- else if (SvOK(sv))
- amt.fallback=AMGfallNEVER;
- }
-
- for (i = 1; i < NofAMmeth; i++) {
- SV *cookie = sv_2mortal(Perl_newSVpvf(aTHX_ "(%s", cp = PL_AMG_names[i]));
- DEBUG_o( Perl_deb(aTHX_ "Checking overloading of `%s' in package `%.256s'\n",
- cp, HvNAME(stash)) );
- /* don't fill the cache while looking up! */
- gv = gv_fetchmeth(stash, SvPVX(cookie), SvCUR(cookie), -1);
- cv = 0;
- if(gv && (cv = GvCV(gv))) {
- if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
- && strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
- /* GvSV contains the name of the method. */
- GV *ngv;
-
- DEBUG_o( Perl_deb(aTHX_ "Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n",
- SvPV(GvSV(gv), n_a), cp, HvNAME(stash)) );
- if (!SvPOK(GvSV(gv))
- || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
- FALSE)))
- {
- /* Can be an import stub (created by `can'). */
- if (GvCVGEN(gv)) {
- Perl_croak(aTHX_ "Stub found while resolving method `%.256s' overloading `%s' in package `%.256s'",
- (SvPOK(GvSV(gv)) ? SvPVX(GvSV(gv)) : "???" ),
- cp, HvNAME(stash));
- } else
- Perl_croak(aTHX_ "Can't resolve method `%.256s' overloading `%s' in package `%.256s'",
- (SvPOK(GvSV(gv)) ? SvPVX(GvSV(gv)) : "???" ),
- cp, HvNAME(stash));
- }
- cv = GvCV(gv = ngv);
- }
- DEBUG_o( Perl_deb(aTHX_ "Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
- cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
- GvNAME(CvGV(cv))) );
- filled = 1;
- }
-#endif
- amt.table[i]=(CV*)SvREFCNT_inc(cv);
- }
- if (filled) {
- AMT_AMAGIC_on(&amt);
- sv_magic((SV*)stash, 0, 'c', (char*)&amt, sizeof(AMT));
- return TRUE;
- }
- }
- /* Here we have no table: */
- no_table:
- AMT_AMAGIC_off(&amt);
- sv_magic((SV*)stash, 0, 'c', (char*)&amt, sizeof(AMTS));
- return FALSE;
-}
-
-SV*
-Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
-{
- MAGIC *mg;
- CV *cv;
- CV **cvp=NULL, **ocvp=NULL;
- AMT *amtp, *oamtp;
- int fl=0, off, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
- int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
- HV* stash;
- if (!(AMGf_noleft & flags) && SvAMAGIC(left)
- && (mg = mg_find((SV*)(stash=SvSTASH(SvRV(left))),'c'))
- && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
- ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
- : (CV **) NULL))
- && ((cv = cvp[off=method+assignshift])
- || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
- * usual method */
- (fl = 1, cv = cvp[off=method])))) {
- lr = -1; /* Call method for left argument */
- } else {
- if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
- int logic;
-
- /* look for substituted methods */
- /* In all the covered cases we should be called with assign==0. */
- switch (method) {
- case inc_amg:
- force_cpy = 1;
- if ((cv = cvp[off=add_ass_amg])
- || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
- right = &PL_sv_yes; lr = -1; assign = 1;
- }
- break;
- case dec_amg:
- force_cpy = 1;
- if ((cv = cvp[off = subtr_ass_amg])
- || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
- right = &PL_sv_yes; lr = -1; assign = 1;
- }
- break;
- case bool__amg:
- (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
- break;
- case numer_amg:
- (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
- break;
- case string_amg:
- (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
- break;
- case not_amg:
- (void)((cv = cvp[off=bool__amg])
- || (cv = cvp[off=numer_amg])
- || (cv = cvp[off=string_amg]));
- postpr = 1;
- break;
- case copy_amg:
- {
- /*
- * SV* ref causes confusion with the interpreter variable of
- * the same name
- */
- SV* tmpRef=SvRV(left);
- if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
- /*
- * Just to be extra cautious. Maybe in some
- * additional cases sv_setsv is safe, too.
- */
- SV* newref = newSVsv(tmpRef);
- SvOBJECT_on(newref);
- SvSTASH(newref) = (HV*)SvREFCNT_inc(SvSTASH(tmpRef));
- return newref;
- }
- }
- break;
- case abs_amg:
- if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
- && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
- SV* nullsv=sv_2mortal(newSViv(0));
- if (off1==lt_amg) {
- SV* lessp = amagic_call(left,nullsv,
- lt_amg,AMGf_noright);
- logic = SvTRUE(lessp);
- } else {
- SV* lessp = amagic_call(left,nullsv,
- ncmp_amg,AMGf_noright);
- logic = (SvNV(lessp) < 0);
- }
- if (logic) {
- if (off==subtr_amg) {
- right = left;
- left = nullsv;
- lr = 1;
- }
- } else {
- return left;
- }
- }
- break;
- case neg_amg:
- if ((cv = cvp[off=subtr_amg])) {
- right = left;
- left = sv_2mortal(newSViv(0));
- lr = 1;
- }
- break;
- case iter_amg: /* XXXX Eventually should do to_gv. */
- /* FAIL safe */
- return NULL; /* Delegate operation to standard mechanisms. */
- break;
- case to_sv_amg:
- case to_av_amg:
- case to_hv_amg:
- case to_gv_amg:
- case to_cv_amg:
- /* FAIL safe */
- return left; /* Delegate operation to standard mechanisms. */
- break;
- default:
- goto not_found;
- }
- if (!cv) goto not_found;
- } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
- && (mg = mg_find((SV*)(stash=SvSTASH(SvRV(right))),'c'))
- && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
- ? (amtp = (AMT*)mg->mg_ptr)->table
- : (CV **) NULL))
- && (cv = cvp[off=method])) { /* Method for right
- * argument found */
- lr=1;
- } else if (((ocvp && oamtp->fallback > AMGfallNEVER
- && (cvp=ocvp) && (lr = -1))
- || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
- && !(flags & AMGf_unary)) {
- /* We look for substitution for
- * comparison operations and
- * concatenation */
- if (method==concat_amg || method==concat_ass_amg
- || method==repeat_amg || method==repeat_ass_amg) {
- return NULL; /* Delegate operation to string conversion */
- }
- off = -1;
- switch (method) {
- case lt_amg:
- case le_amg:
- case gt_amg:
- case ge_amg:
- case eq_amg:
- case ne_amg:
- postpr = 1; off=ncmp_amg; break;
- case slt_amg:
- case sle_amg:
- case sgt_amg:
- case sge_amg:
- case seq_amg:
- case sne_amg:
- postpr = 1; off=scmp_amg; break;
- }
- if (off != -1) cv = cvp[off];
- if (!cv) {
- goto not_found;
- }
- } else {
- not_found: /* No method found, either report or croak */
- switch (method) {
- case to_sv_amg:
- case to_av_amg:
- case to_hv_amg:
- case to_gv_amg:
- case to_cv_amg:
- /* FAIL safe */
- return left; /* Delegate operation to standard mechanisms. */
- break;
- }
- if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
- notfound = 1; lr = -1;
- } else if (cvp && (cv=cvp[nomethod_amg])) {
- notfound = 1; lr = 1;
- } else {
- SV *msg;
- if (off==-1) off=method;
- msg = sv_2mortal(Perl_newSVpvf(aTHX_
- "Operation `%s': no method found,%sargument %s%s%s%s",
- PL_AMG_names[method + assignshift],
- (flags & AMGf_unary ? " " : "\n\tleft "),
- SvAMAGIC(left)?
- "in overloaded package ":
- "has no overloaded magic",
- SvAMAGIC(left)?
- HvNAME(SvSTASH(SvRV(left))):
- "",
- SvAMAGIC(right)?
- ",\n\tright argument in overloaded package ":
- (flags & AMGf_unary
- ? ""
- : ",\n\tright argument has no overloaded magic"),
- SvAMAGIC(right)?
- HvNAME(SvSTASH(SvRV(right))):
- ""));
- if (amtp && amtp->fallback >= AMGfallYES) {
- DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX(msg)) );
- } else {
- Perl_croak(aTHX_ "%"SVf, msg);
- }
- return NULL;
- }
- force_cpy = force_cpy || assign;
- }
- }
- if (!notfound) {
- DEBUG_o( Perl_deb(aTHX_
- "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %s%s\n",
- PL_AMG_names[off],
- method+assignshift==off? "" :
- " (initially `",
- method+assignshift==off? "" :
- PL_AMG_names[method+assignshift],
- method+assignshift==off? "" : "')",
- flags & AMGf_unary? "" :
- lr==1 ? " for right argument": " for left argument",
- flags & AMGf_unary? " for argument" : "",
- HvNAME(stash),
- fl? ",\n\tassignment variant used": "") );
- }
- /* Since we use shallow copy during assignment, we need
- * to dublicate the contents, probably calling user-supplied
- * version of copy operator
- */
- /* We need to copy in following cases:
- * a) Assignment form was called.
- * assignshift==1, assign==T, method + 1 == off
- * b) Increment or decrement, called directly.
- * assignshift==0, assign==0, method + 0 == off
- * c) Increment or decrement, translated to assignment add/subtr.
- * assignshift==0, assign==T,
- * force_cpy == T
- * d) Increment or decrement, translated to nomethod.
- * assignshift==0, assign==0,
- * force_cpy == T
- * e) Assignment form translated to nomethod.
- * assignshift==1, assign==T, method + 1 != off
- * force_cpy == T
- */
- /* off is method, method+assignshift, or a result of opcode substitution.
- * In the latter case assignshift==0, so only notfound case is important.
- */
- if (( (method + assignshift == off)
- && (assign || (method == inc_amg) || (method == dec_amg)))
- || force_cpy)
- RvDEEPCP(left);
- {
- dSP;
- BINOP myop;
- SV* res;
- bool oldcatch = CATCH_GET;
-
- CATCH_SET(TRUE);
- Zero(&myop, 1, BINOP);
- myop.op_last = (OP *) &myop;
- myop.op_next = Nullop;
- myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
-
- PUSHSTACKi(PERLSI_OVERLOAD);
- ENTER;
- SAVEOP();
- PL_op = (OP *) &myop;
- if (PERLDB_SUB && PL_curstash != PL_debstash)
- PL_op->op_private |= OPpENTERSUB_DB;
- PUTBACK;
- pp_pushmark();
-
- EXTEND(SP, notfound + 5);
- PUSHs(lr>0? right: left);
- PUSHs(lr>0? left: right);
- PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
- if (notfound) {
- PUSHs( sv_2mortal(newSVpv((char *)PL_AMG_names[method + assignshift],0)));
- }
- PUSHs((SV*)cv);
- PUTBACK;
-
- if ((PL_op = Perl_pp_entersub(aTHX)))
- CALLRUNOPS(aTHX);
- LEAVE;
- SPAGAIN;
-
- res=POPs;
- PUTBACK;
- POPSTACK;
- CATCH_SET(oldcatch);
-
- if (postpr) {
- int ans;
- switch (method) {
- case le_amg:
- case sle_amg:
- ans=SvIV(res)<=0; break;
- case lt_amg:
- case slt_amg:
- ans=SvIV(res)<0; break;
- case ge_amg:
- case sge_amg:
- ans=SvIV(res)>=0; break;
- case gt_amg:
- case sgt_amg:
- ans=SvIV(res)>0; break;
- case eq_amg:
- case seq_amg:
- ans=SvIV(res)==0; break;
- case ne_amg:
- case sne_amg:
- ans=SvIV(res)!=0; break;
- case inc_amg:
- case dec_amg:
- SvSetSV(left,res); return left;
- case not_amg:
- ans=!SvTRUE(res); break;
- }
- return boolSV(ans);
- } else if (method==copy_amg) {
- if (!SvROK(res)) {
- Perl_croak(aTHX_ "Copy method did not return a reference");
- }
- return SvREFCNT_inc(SvRV(res));
- } else {
- return res;
- }
- }
-}
-
-/*
-=for apidoc is_gv_magical
-
-Returns C<TRUE> if given the name of a magical GV.
-
-Currently only useful internally when determining if a GV should be
-created even in rvalue contexts.
-
-C<flags> is not used at present but available for future extension to
-allow selecting particular classes of magical variable.
-
-=cut
-*/
-bool
-Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags)
-{
- if (!len)
- return FALSE;
-
- switch (*name) {
- case 'I':
- if (len == 3 && strEQ(name, "ISA"))
- goto yes;
- break;
- case 'O':
- if (len == 8 && strEQ(name, "OVERLOAD"))
- goto yes;
- break;
- case 'S':
- if (len == 3 && strEQ(name, "SIG"))
- goto yes;
- break;
- case '\027': /* $^W & $^WARNING_BITS */
- if (len == 1
- || (len == 12 && strEQ(name, "\027ARNING_BITS"))
- || (len == 17 && strEQ(name, "\027IDE_SYSTEM_CALLS")))
- {
- goto yes;
- }
- break;
-
- case '&':
- case '`':
- case '\'':
- case ':':
- case '?':
- case '!':
- case '-':
- case '#':
- case '*':
- case '[':
- case '^':
- case '~':
- case '=':
- case '%':
- case '.':
- case '(':
- case ')':
- case '<':
- case '>':
- case ',':
- case '\\':
- case '/':
- case '|':
- case '+':
- case ';':
- case ']':
- case '\001': /* $^A */
- case '\003': /* $^C */
- case '\004': /* $^D */
- case '\005': /* $^E */
- case '\006': /* $^F */
- case '\010': /* $^H */
- case '\011': /* $^I, NOT \t in EBCDIC */
- case '\014': /* $^L */
- case '\017': /* $^O */
- case '\020': /* $^P */
- case '\023': /* $^S */
- case '\024': /* $^T */
- case '\026': /* $^V */
- if (len == 1)
- goto yes;
- break;
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (len > 1) {
- char *end = name + len;
- while (--end > name) {
- if (!isDIGIT(*end))
- return FALSE;
- }
- }
- yes:
- return TRUE;
- default:
- break;
- }
- return FALSE;
-}
diff --git a/contrib/perl5/gv.h b/contrib/perl5/gv.h
deleted file mode 100644
index 07a04b6..0000000
--- a/contrib/perl5/gv.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* gv.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-struct gp {
- SV * gp_sv; /* scalar value */
- U32 gp_refcnt; /* how many globs point to this? */
- struct io * gp_io; /* filehandle value */
- CV * gp_form; /* format value */
- AV * gp_av; /* array value */
- HV * gp_hv; /* hash value */
- GV * gp_egv; /* effective gv, if *glob */
- CV * gp_cv; /* subroutine value */
- U32 gp_cvgen; /* generational validity of cached gv_cv */
- U32 gp_flags; /* XXX unused */
- line_t gp_line; /* line first declared at (for -w) */
- char * gp_file; /* file first declared in (for -w) */
-};
-
-#if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
-#define MICROPORT
-#endif
-
-#define GvXPVGV(gv) ((XPVGV*)SvANY(gv))
-
-#define GvGP(gv) (GvXPVGV(gv)->xgv_gp)
-#define GvNAME(gv) (GvXPVGV(gv)->xgv_name)
-#define GvNAMELEN(gv) (GvXPVGV(gv)->xgv_namelen)
-#define GvSTASH(gv) (GvXPVGV(gv)->xgv_stash)
-#define GvFLAGS(gv) (GvXPVGV(gv)->xgv_flags)
-
-/*
-=for apidoc Am|SV*|GvSV|GV* gv
-
-Return the SV from the GV.
-
-=cut
-*/
-
-#define GvSV(gv) (GvGP(gv)->gp_sv)
-#define GvREFCNT(gv) (GvGP(gv)->gp_refcnt)
-#define GvIO(gv) ((gv) && SvTYPE((SV*)gv) == SVt_PVGV ? GvIOp(gv) : 0)
-#define GvIOp(gv) (GvGP(gv)->gp_io)
-#define GvIOn(gv) (GvIO(gv) ? GvIOp(gv) : GvIOp(gv_IOadd(gv)))
-
-#define GvFORM(gv) (GvGP(gv)->gp_form)
-#define GvAV(gv) (GvGP(gv)->gp_av)
-
-/* This macro is deprecated. Do not use! */
-#define GvREFCNT_inc(gv) ((GV*)SvREFCNT_inc(gv)) /* DO NOT USE */
-
-#ifdef MICROPORT /* Microport 2.4 hack */
-AV *GvAVn();
-#else
-#define GvAVn(gv) (GvGP(gv)->gp_av ? \
- GvGP(gv)->gp_av : \
- GvGP(gv_AVadd(gv))->gp_av)
-#endif
-#define GvHV(gv) ((GvGP(gv))->gp_hv)
-
-#ifdef MICROPORT /* Microport 2.4 hack */
-HV *GvHVn();
-#else
-#define GvHVn(gv) (GvGP(gv)->gp_hv ? \
- GvGP(gv)->gp_hv : \
- GvGP(gv_HVadd(gv))->gp_hv)
-#endif /* Microport 2.4 hack */
-
-#define GvCV(gv) (GvGP(gv)->gp_cv)
-#define GvCVGEN(gv) (GvGP(gv)->gp_cvgen)
-#define GvCVu(gv) (GvGP(gv)->gp_cvgen ? Nullcv : GvGP(gv)->gp_cv)
-
-#define GvGPFLAGS(gv) (GvGP(gv)->gp_flags)
-
-#define GvLINE(gv) (GvGP(gv)->gp_line)
-#define GvFILE(gv) (GvGP(gv)->gp_file)
-#define GvFILEGV(gv) (gv_fetchfile(GvFILE(gv)))
-
-#define GvEGV(gv) (GvGP(gv)->gp_egv)
-#define GvENAME(gv) GvNAME(GvEGV(gv) ? GvEGV(gv) : gv)
-#define GvESTASH(gv) GvSTASH(GvEGV(gv) ? GvEGV(gv) : gv)
-
-#define GVf_INTRO 0x01
-#define GVf_MULTI 0x02
-#define GVf_ASSUMECV 0x04
-#define GVf_IN_PAD 0x08
-#define GVf_IMPORTED 0xF0
-#define GVf_IMPORTED_SV 0x10
-#define GVf_IMPORTED_AV 0x20
-#define GVf_IMPORTED_HV 0x40
-#define GVf_IMPORTED_CV 0x80
-
-#define GvINTRO(gv) (GvFLAGS(gv) & GVf_INTRO)
-#define GvINTRO_on(gv) (GvFLAGS(gv) |= GVf_INTRO)
-#define GvINTRO_off(gv) (GvFLAGS(gv) &= ~GVf_INTRO)
-
-#define GvMULTI(gv) (GvFLAGS(gv) & GVf_MULTI)
-#define GvMULTI_on(gv) (GvFLAGS(gv) |= GVf_MULTI)
-#define GvMULTI_off(gv) (GvFLAGS(gv) &= ~GVf_MULTI)
-
-#define GvASSUMECV(gv) (GvFLAGS(gv) & GVf_ASSUMECV)
-#define GvASSUMECV_on(gv) (GvFLAGS(gv) |= GVf_ASSUMECV)
-#define GvASSUMECV_off(gv) (GvFLAGS(gv) &= ~GVf_ASSUMECV)
-
-#define GvIMPORTED(gv) (GvFLAGS(gv) & GVf_IMPORTED)
-#define GvIMPORTED_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED)
-#define GvIMPORTED_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED)
-
-#define GvIMPORTED_SV(gv) (GvFLAGS(gv) & GVf_IMPORTED_SV)
-#define GvIMPORTED_SV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_SV)
-#define GvIMPORTED_SV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_SV)
-
-#define GvIMPORTED_AV(gv) (GvFLAGS(gv) & GVf_IMPORTED_AV)
-#define GvIMPORTED_AV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_AV)
-#define GvIMPORTED_AV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_AV)
-
-#define GvIMPORTED_HV(gv) (GvFLAGS(gv) & GVf_IMPORTED_HV)
-#define GvIMPORTED_HV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_HV)
-#define GvIMPORTED_HV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_HV)
-
-#define GvIMPORTED_CV(gv) (GvFLAGS(gv) & GVf_IMPORTED_CV)
-#define GvIMPORTED_CV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_CV)
-#define GvIMPORTED_CV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_CV)
-
-#define GvIN_PAD(gv) (GvFLAGS(gv) & GVf_IN_PAD)
-#define GvIN_PAD_on(gv) (GvFLAGS(gv) |= GVf_IN_PAD)
-#define GvIN_PAD_off(gv) (GvFLAGS(gv) &= ~GVf_IN_PAD)
-
-#define Nullgv Null(GV*)
-
-#define DM_UID 0x003
-#define DM_RUID 0x001
-#define DM_EUID 0x002
-#define DM_GID 0x030
-#define DM_RGID 0x010
-#define DM_EGID 0x020
-#define DM_DELAY 0x100
-
-/*
- * symbol creation flags, for use in gv_fetchpv() and get_*v()
- */
-#define GV_ADD 0x01 /* add, if symbol not already there */
-#define GV_ADDMULTI 0x02 /* add, pretending it has been added already */
-#define GV_ADDWARN 0x04 /* add, but warn if symbol wasn't already there */
-#define GV_ADDINEVAL 0x08 /* add, as though we're doing so within an eval */
-#define GV_NOINIT 0x10 /* add, but don't init symbol, if type != PVGV */
diff --git a/contrib/perl5/h2pl/README b/contrib/perl5/h2pl/README
deleted file mode 100644
index 5fe8ae7..0000000
--- a/contrib/perl5/h2pl/README
+++ /dev/null
@@ -1,71 +0,0 @@
-[This file of Tom Christiansen's has been edited to change makelib to h2ph
-and .h to .ph where appropriate--law.]
-
-This directory contains files to help you convert the *.ph files generated my
-h2ph out of the perl source directory into *.pl files with all the
-indirection of the subroutine calls removed. The .ph version will be more
-safely portable, because if something isn't defined on the new system, like
-&TIOCGETP, then you'll get a fatal run-time error on the system lacking that
-function. Using the .pl version means that the subsequent scripts will give
-you a 0 $TIOCGETP and God only knows what may then happen. Still, I like the
-.pl stuff because they're faster to load.
-
-FIrst, you need to run h2ph on things like sys/ioctl.h to get stuff
-into the perl library directory, often /usr/local/lib/perl. For example,
- # h2ph sys/ioctl.h
-takes /usr/include/sys/ioctl.h as input and writes (without i/o redirection)
-the file /usr/local/lib/perl/sys/ioctl.ph, which looks like this
-
- eval 'sub TIOCM_RTS {0004;}';
- eval 'sub TIOCM_ST {0010;}';
- eval 'sub TIOCM_SR {0020;}';
- eval 'sub TIOCM_CTS {0040;}';
- eval 'sub TIOCM_CAR {0100;}';
-
-and much worse, rather than what Larry's ioctl.pl from the perl source dir has,
-which is:
-
- $TIOCM_RTS = 0004;
- $TIOCM_ST = 0010;
- $TIOCM_SR = 0020;
- $TIOCM_CTS = 0040;
- $TIOCM_CAR = 0100;
-
-[Workaround for fixed bug in makedir/h2ph deleted--law.]
-
-The more complicated ioctl subs look like this:
-
- eval 'sub TIOCGSIZE {&TIOCGWINSZ;}';
- eval 'sub TIOCGWINSZ {&_IOR("t", 104, \'struct winsize\');}';
- eval 'sub TIOCSETD {&_IOW("t", 1, \'int\');}';
- eval 'sub TIOCGETP {&_IOR("t", 8,\'struct sgttyb\');}';
-
-The _IO[RW] routines use a %sizeof array, which (presumably)
-is keyed on the type name with the value being the size in bytes.
-
-To build %sizeof, try running this in this directory:
-
- % ./getioctlsizes
-
-Which will tell you which things the %sizeof array needs
-to hold. You can try to build a sizeof.ph file with:
-
- % ./getioctlsizes | ./mksizes > sizeof.ph
-
-Note that mksizes hardcodes the #include files for all the types, so it will
-probably require customization. Once you have sizeof.ph, install it in the
-perl library directory. Run my tcbreak script to see whether you can do
-ioctls in perl now. You'll get some kind of fatal run-time error if you
-can't. That script should be included in this directory.
-
-If this works well, now you can try to convert the *.ph files into
-*.pl files. Try this:
-
- foreach file ( sysexits.ph sys/{errno.ph,ioctl.ph} )
- ./mkvars $file > t/$file:r.pl
- end
-
-The last one will be the hardest. If it works, should be able to
-run tcbreak2 and have it work the same as tcbreak.
-
-Good luck.
diff --git a/contrib/perl5/h2pl/cbreak.pl b/contrib/perl5/h2pl/cbreak.pl
deleted file mode 100644
index 422185e..0000000
--- a/contrib/perl5/h2pl/cbreak.pl
+++ /dev/null
@@ -1,34 +0,0 @@
-$sgttyb_t = 'C4 S';
-
-sub cbreak {
- &set_cbreak(1);
-}
-
-sub cooked {
- &set_cbreak(0);
-}
-
-sub set_cbreak {
- local($on) = @_;
-
- require 'sizeof.ph';
- require 'sys/ioctl.ph';
-
- ioctl(STDIN,&TIOCGETP,$sgttyb)
- || die "Can't ioctl TIOCGETP: $!";
-
- @ary = unpack($sgttyb_t,$sgttyb);
- if ($on) {
- $ary[4] |= &CBREAK;
- $ary[4] &= ~&ECHO;
- } else {
- $ary[4] &= ~&CBREAK;
- $ary[4] |= &ECHO;
- }
- $sgttyb = pack($sgttyb_t,@ary);
- ioctl(STDIN,&TIOCSETP,$sgttyb)
- || die "Can't ioctl TIOCSETP: $!";
-
-}
-
-1;
diff --git a/contrib/perl5/h2pl/cbreak2.pl b/contrib/perl5/h2pl/cbreak2.pl
deleted file mode 100644
index 8ac55a3..0000000
--- a/contrib/perl5/h2pl/cbreak2.pl
+++ /dev/null
@@ -1,33 +0,0 @@
-$sgttyb_t = 'C4 S';
-
-sub cbreak {
- &set_cbreak(1);
-}
-
-sub cooked {
- &set_cbreak(0);
-}
-
-sub set_cbreak {
- local($on) = @_;
-
- require 'sys/ioctl.pl';
-
- ioctl(STDIN,$TIOCGETP,$sgttyb)
- || die "Can't ioctl TIOCGETP: $!";
-
- @ary = unpack($sgttyb_t,$sgttyb);
- if ($on) {
- $ary[4] |= $CBREAK;
- $ary[4] &= ~$ECHO;
- } else {
- $ary[4] &= ~$CBREAK;
- $ary[4] |= $ECHO;
- }
- $sgttyb = pack($sgttyb_t,@ary);
- ioctl(STDIN,$TIOCSETP,$sgttyb)
- || die "Can't ioctl TIOCSETP: $!";
-
-}
-
-1;
diff --git a/contrib/perl5/h2pl/eg/sizeof.ph b/contrib/perl5/h2pl/eg/sizeof.ph
deleted file mode 100644
index 285bff1..0000000
--- a/contrib/perl5/h2pl/eg/sizeof.ph
+++ /dev/null
@@ -1,14 +0,0 @@
-$sizeof{'char'} = 1;
-$sizeof{'int'} = 4;
-$sizeof{'long'} = 4;
-$sizeof{'struct arpreq'} = 36;
-$sizeof{'struct ifconf'} = 8;
-$sizeof{'struct ifreq'} = 32;
-$sizeof{'struct ltchars'} = 6;
-$sizeof{'struct pcntl'} = 116;
-$sizeof{'struct rtentry'} = 52;
-$sizeof{'struct sgttyb'} = 6;
-$sizeof{'struct tchars'} = 6;
-$sizeof{'struct ttychars'} = 14;
-$sizeof{'struct winsize'} = 8;
-$sizeof{'struct termios'} = 132;
diff --git a/contrib/perl5/h2pl/eg/sys/errno.pl b/contrib/perl5/h2pl/eg/sys/errno.pl
deleted file mode 100644
index d9ba3be..0000000
--- a/contrib/perl5/h2pl/eg/sys/errno.pl
+++ /dev/null
@@ -1,92 +0,0 @@
-$EPERM = 0x1;
-$ENOENT = 0x2;
-$ESRCH = 0x3;
-$EINTR = 0x4;
-$EIO = 0x5;
-$ENXIO = 0x6;
-$E2BIG = 0x7;
-$ENOEXEC = 0x8;
-$EBADF = 0x9;
-$ECHILD = 0xA;
-$EAGAIN = 0xB;
-$ENOMEM = 0xC;
-$EACCES = 0xD;
-$EFAULT = 0xE;
-$ENOTBLK = 0xF;
-$EBUSY = 0x10;
-$EEXIST = 0x11;
-$EXDEV = 0x12;
-$ENODEV = 0x13;
-$ENOTDIR = 0x14;
-$EISDIR = 0x15;
-$EINVAL = 0x16;
-$ENFILE = 0x17;
-$EMFILE = 0x18;
-$ENOTTY = 0x19;
-$ETXTBSY = 0x1A;
-$EFBIG = 0x1B;
-$ENOSPC = 0x1C;
-$ESPIPE = 0x1D;
-$EROFS = 0x1E;
-$EMLINK = 0x1F;
-$EPIPE = 0x20;
-$EDOM = 0x21;
-$ERANGE = 0x22;
-$EWOULDBLOCK = 0x23;
-$EINPROGRESS = 0x24;
-$EALREADY = 0x25;
-$ENOTSOCK = 0x26;
-$EDESTADDRREQ = 0x27;
-$EMSGSIZE = 0x28;
-$EPROTOTYPE = 0x29;
-$ENOPROTOOPT = 0x2A;
-$EPROTONOSUPPORT = 0x2B;
-$ESOCKTNOSUPPORT = 0x2C;
-$EOPNOTSUPP = 0x2D;
-$EPFNOSUPPORT = 0x2E;
-$EAFNOSUPPORT = 0x2F;
-$EADDRINUSE = 0x30;
-$EADDRNOTAVAIL = 0x31;
-$ENETDOWN = 0x32;
-$ENETUNREACH = 0x33;
-$ENETRESET = 0x34;
-$ECONNABORTED = 0x35;
-$ECONNRESET = 0x36;
-$ENOBUFS = 0x37;
-$EISCONN = 0x38;
-$ENOTCONN = 0x39;
-$ESHUTDOWN = 0x3A;
-$ETOOMANYREFS = 0x3B;
-$ETIMEDOUT = 0x3C;
-$ECONNREFUSED = 0x3D;
-$ELOOP = 0x3E;
-$ENAMETOOLONG = 0x3F;
-$EHOSTDOWN = 0x40;
-$EHOSTUNREACH = 0x41;
-$ENOTEMPTY = 0x42;
-$EPROCLIM = 0x43;
-$EUSERS = 0x44;
-$EDQUOT = 0x45;
-$ESTALE = 0x46;
-$EREMOTE = 0x47;
-$EDEADLK = 0x48;
-$ENOLCK = 0x49;
-$MTH_UNDEF_SQRT = 0x12C;
-$MTH_OVF_EXP = 0x12D;
-$MTH_UNDEF_LOG = 0x12E;
-$MTH_NEG_BASE = 0x12F;
-$MTH_ZERO_BASE = 0x130;
-$MTH_OVF_POW = 0x131;
-$MTH_LRG_SIN = 0x132;
-$MTH_LRG_COS = 0x133;
-$MTH_LRG_TAN = 0x134;
-$MTH_LRG_COT = 0x135;
-$MTH_OVF_TAN = 0x136;
-$MTH_OVF_COT = 0x137;
-$MTH_UNDEF_ASIN = 0x138;
-$MTH_UNDEF_ACOS = 0x139;
-$MTH_UNDEF_ATAN2 = 0x13A;
-$MTH_OVF_SINH = 0x13B;
-$MTH_OVF_COSH = 0x13C;
-$MTH_UNDEF_ZLOG = 0x13D;
-$MTH_UNDEF_ZDIV = 0x13E;
diff --git a/contrib/perl5/h2pl/eg/sys/ioctl.pl b/contrib/perl5/h2pl/eg/sys/ioctl.pl
deleted file mode 100644
index 0b552ca..0000000
--- a/contrib/perl5/h2pl/eg/sys/ioctl.pl
+++ /dev/null
@@ -1,186 +0,0 @@
-$_IOCTL_ = 0x1;
-$TIOCGSIZE = 0x40087468;
-$TIOCSSIZE = 0x80087467;
-$IOCPARM_MASK = 0x7F;
-$IOC_VOID = 0x20000000;
-$IOC_OUT = 0x40000000;
-$IOC_IN = 0x80000000;
-$IOC_INOUT = 0xC0000000;
-$TIOCGETD = 0x40047400;
-$TIOCSETD = 0x80047401;
-$TIOCHPCL = 0x20007402;
-$TIOCMODG = 0x40047403;
-$TIOCMODS = 0x80047404;
-$TIOCM_LE = 0x1;
-$TIOCM_DTR = 0x2;
-$TIOCM_RTS = 0x4;
-$TIOCM_ST = 0x8;
-$TIOCM_SR = 0x10;
-$TIOCM_CTS = 0x20;
-$TIOCM_CAR = 0x40;
-$TIOCM_CD = 0x40;
-$TIOCM_RNG = 0x80;
-$TIOCM_RI = 0x80;
-$TIOCM_DSR = 0x100;
-$TIOCGETP = 0x40067408;
-$TIOCSETP = 0x80067409;
-$TIOCSETN = 0x8006740A;
-$TIOCEXCL = 0x2000740D;
-$TIOCNXCL = 0x2000740E;
-$TIOCFLUSH = 0x80047410;
-$TIOCSETC = 0x80067411;
-$TIOCGETC = 0x40067412;
-$TIOCSET = 0x80047413;
-$TIOCBIS = 0x80047414;
-$TIOCBIC = 0x80047415;
-$TIOCGET = 0x40047416;
-$TANDEM = 0x1;
-$CBREAK = 0x2;
-$LCASE = 0x4;
-$ECHO = 0x8;
-$CRMOD = 0x10;
-$RAW = 0x20;
-$ODDP = 0x40;
-$EVENP = 0x80;
-$ANYP = 0xC0;
-$NLDELAY = 0x300;
-$NL0 = 0x0;
-$NL1 = 0x100;
-$NL2 = 0x200;
-$NL3 = 0x300;
-$TBDELAY = 0xC00;
-$TAB0 = 0x0;
-$TAB1 = 0x400;
-$TAB2 = 0x800;
-$XTABS = 0xC00;
-$CRDELAY = 0x3000;
-$CR0 = 0x0;
-$CR1 = 0x1000;
-$CR2 = 0x2000;
-$CR3 = 0x3000;
-$VTDELAY = 0x4000;
-$FF0 = 0x0;
-$FF1 = 0x4000;
-$BSDELAY = 0x8000;
-$BS0 = 0x0;
-$BS1 = 0x8000;
-$ALLDELAY = 0xFF00;
-$CRTBS = 0x10000;
-$PRTERA = 0x20000;
-$CRTERA = 0x40000;
-$TILDE = 0x80000;
-$MDMBUF = 0x100000;
-$LITOUT = 0x200000;
-$TOSTOP = 0x400000;
-$FLUSHO = 0x800000;
-$NOHANG = 0x1000000;
-$L001000 = 0x2000000;
-$CRTKIL = 0x4000000;
-$L004000 = 0x8000000;
-$CTLECH = 0x10000000;
-$PENDIN = 0x20000000;
-$DECCTQ = 0x40000000;
-$NOFLSH = 0x80000000;
-$TIOCCSET = 0x800E7417;
-$TIOCCGET = 0x400E7418;
-$TIOCLBIS = 0x8004747F;
-$TIOCLBIC = 0x8004747E;
-$TIOCLSET = 0x8004747D;
-$TIOCLGET = 0x4004747C;
-$LCRTBS = 0x1;
-$LPRTERA = 0x2;
-$LCRTERA = 0x4;
-$LTILDE = 0x8;
-$LMDMBUF = 0x10;
-$LLITOUT = 0x20;
-$LTOSTOP = 0x40;
-$LFLUSHO = 0x80;
-$LNOHANG = 0x100;
-$LCRTKIL = 0x400;
-$LCTLECH = 0x1000;
-$LPENDIN = 0x2000;
-$LDECCTQ = 0x4000;
-$LNOFLSH = 0x8000;
-$TIOCSBRK = 0x2000747B;
-$TIOCCBRK = 0x2000747A;
-$TIOCSDTR = 0x20007479;
-$TIOCCDTR = 0x20007478;
-$TIOCGPGRP = 0x40047477;
-$TIOCSPGRP = 0x80047476;
-$TIOCSLTC = 0x80067475;
-$TIOCGLTC = 0x40067474;
-$TIOCOUTQ = 0x40047473;
-$TIOCSTI = 0x80017472;
-$TIOCNOTTY = 0x20007471;
-$TIOCPKT = 0x80047470;
-$TIOCPKT_DATA = 0x0;
-$TIOCPKT_FLUSHREAD = 0x1;
-$TIOCPKT_FLUSHWRITE = 0x2;
-$TIOCPKT_STOP = 0x4;
-$TIOCPKT_START = 0x8;
-$TIOCPKT_NOSTOP = 0x10;
-$TIOCPKT_DOSTOP = 0x20;
-$TIOCSTOP = 0x2000746F;
-$TIOCSTART = 0x2000746E;
-$TIOCREMOTE = 0x20007469;
-$TIOCGWINSZ = 0x40087468;
-$TIOCSWINSZ = 0x80087467;
-$TIOCRESET = 0x20007466;
-$OTTYDISC = 0x0;
-$NETLDISC = 0x1;
-$NTTYDISC = 0x2;
-$FIOCLEX = 0x20006601;
-$FIONCLEX = 0x20006602;
-$FIONREAD = 0x4004667F;
-$FIONBIO = 0x8004667E;
-$FIOASYNC = 0x8004667D;
-$FIOSETOWN = 0x8004667C;
-$FIOGETOWN = 0x4004667B;
-$STPUTTABLE = 0x8004667A;
-$STGETTABLE = 0x80046679;
-$SIOCSHIWAT = 0x80047300;
-$SIOCGHIWAT = 0x40047301;
-$SIOCSLOWAT = 0x80047302;
-$SIOCGLOWAT = 0x40047303;
-$SIOCATMARK = 0x40047307;
-$SIOCSPGRP = 0x80047308;
-$SIOCGPGRP = 0x40047309;
-$SIOCADDRT = 0x8034720A;
-$SIOCDELRT = 0x8034720B;
-$SIOCSIFADDR = 0x8020690C;
-$SIOCGIFADDR = 0xC020690D;
-$SIOCSIFDSTADDR = 0x8020690E;
-$SIOCGIFDSTADDR = 0xC020690F;
-$SIOCSIFFLAGS = 0x80206910;
-$SIOCGIFFLAGS = 0xC0206911;
-$SIOCGIFBRDADDR = 0xC0206912;
-$SIOCSIFBRDADDR = 0x80206913;
-$SIOCGIFCONF = 0xC0086914;
-$SIOCGIFNETMASK = 0xC0206915;
-$SIOCSIFNETMASK = 0x80206916;
-$SIOCGIFMETRIC = 0xC0206917;
-$SIOCSIFMETRIC = 0x80206918;
-$SIOCSARP = 0x8024691E;
-$SIOCGARP = 0xC024691F;
-$SIOCDARP = 0x80246920;
-$PIXCONTINUE = 0x80747000;
-$PIXSTEP = 0x80747001;
-$PIXTERMINATE = 0x20007002;
-$PIGETFLAGS = 0x40747003;
-$PIXINHERIT = 0x80747004;
-$PIXDETACH = 0x20007005;
-$PIXGETSUBCODE = 0xC0747006;
-$PIXRDREGS = 0xC0747007;
-$PIXWRREGS = 0xC0747008;
-$PIXRDVREGS = 0xC0747009;
-$PIXWRVREGS = 0xC074700A;
-$PIXRDVSTATE = 0xC074700B;
-$PIXWRVSTATE = 0xC074700C;
-$PIXRDCREGS = 0xC074700D;
-$PIXWRCREGS = 0xC074700E;
-$PIRDSDRS = 0xC074700F;
-$PIXGETSIGACTION = 0xC0747010;
-$PIGETU = 0xC0747011;
-$PISETRWTID = 0xC0747012;
-$PIXGETTHCOUNT = 0xC0747013;
-$PIXRUN = 0x20007014;
diff --git a/contrib/perl5/h2pl/eg/sysexits.pl b/contrib/perl5/h2pl/eg/sysexits.pl
deleted file mode 100644
index f4cb777..0000000
--- a/contrib/perl5/h2pl/eg/sysexits.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-$EX_OK = 0x0;
-$EX__BASE = 0x40;
-$EX_USAGE = 0x40;
-$EX_DATAERR = 0x41;
-$EX_NOINPUT = 0x42;
-$EX_NOUSER = 0x43;
-$EX_NOHOST = 0x44;
-$EX_UNAVAILABLE = 0x45;
-$EX_SOFTWARE = 0x46;
-$EX_OSERR = 0x47;
-$EX_OSFILE = 0x48;
-$EX_CANTCREAT = 0x49;
-$EX_IOERR = 0x4A;
-$EX_TEMPFAIL = 0x4B;
-$EX_PROTOCOL = 0x4C;
-$EX_NOPERM = 0x4D;
diff --git a/contrib/perl5/h2pl/getioctlsizes b/contrib/perl5/h2pl/getioctlsizes
deleted file mode 100644
index 403fffa..0000000
--- a/contrib/perl5/h2pl/getioctlsizes
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/perl
-
-open (IOCTLS,'/usr/include/sys/ioctl.h') || die "ioctl open failed";
-
-while (<IOCTLS>) {
- if (/^\s*#\s*define\s+\w+\s+_IO(R|W|WR)\('?\w+'?,\s*\w+,\s*([^)]+)/) {
- $need{$2}++;
- }
-}
-
-foreach $key ( sort keys %need ) {
- print $key,"\n";
-}
diff --git a/contrib/perl5/h2pl/mksizes b/contrib/perl5/h2pl/mksizes
deleted file mode 100644
index cb4b8ab..0000000
--- a/contrib/perl5/h2pl/mksizes
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/local/bin/perl
-
-($iam = $0) =~ s%.*/%%;
-$tmp = "$iam.$$";
-open (CODE,">$tmp.c") || die "$iam: cannot create $tmp.c: $!\n";
-
-$mask = q/printf ("$sizeof{'%s'} = %d;\n"/;
-
-# write C program
-select(CODE);
-
-print <<EO_C_PROGRAM;
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if_arp.h>
-#include <net/if.h>
-#include <net/route.h>
-#include <sys/ioctl.h>
-
-main() {
-EO_C_PROGRAM
-
-while ( <> ) {
- chop;
- printf "\t%s, \n\t\t\"%s\", sizeof(%s));\n", $mask, $_,$_;
-}
-
-print "\n}\n";
-
-close CODE;
-
-# compile C program
-
-select(STDOUT);
-
-system "cc $tmp.c -o $tmp";
-die "couldn't compile $tmp.c" if $?;
-system "./$tmp";
-die "couldn't run $tmp" if $?;
-
-unlink "$tmp.c", $tmp;
diff --git a/contrib/perl5/h2pl/mkvars b/contrib/perl5/h2pl/mkvars
deleted file mode 100644
index ffb0f0b..0000000
--- a/contrib/perl5/h2pl/mkvars
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/perl
-
-require 'sizeof.ph';
-
-$LIB = '/usr/local/lib/perl';
-
-foreach $include (@ARGV) {
- printf STDERR "including %s\n", $include;
- do $include;
- warn "sourcing $include: $@\n" if ($@);
- if (!open (INCLUDE,"$LIB/$include")) {
- warn "can't open $LIB/$include: $!\n";
- next;
- }
- while (<INCLUDE>) {
- chop;
- if (/^\s*eval\s+'sub\s+(\w+)\s.*[^{]$/ || /^\s*sub\s+(\w+)\s.*[^{]$/) {
- $var = $1;
- $val = eval "&$var;";
- if ($@) {
- warn "$@: $_";
- print <<EOT;
-warn "\$$var isn't correctly set" if defined \$_main{'$var'};
-EOT
- next;
- }
- ( $nval = sprintf ("%x",$val ) ) =~ tr/a-z/A-Z/;
- printf "\$%s = 0x%s;\n", $var, $nval;
- }
- }
-}
diff --git a/contrib/perl5/h2pl/tcbreak b/contrib/perl5/h2pl/tcbreak
deleted file mode 100644
index 2677cc9..0000000
--- a/contrib/perl5/h2pl/tcbreak
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/perl
-
-require 'cbreak.pl';
-
-&cbreak;
-
-$| = 1;
-
-print "gimme a char: ";
-
-$c = getc;
-
-print "$c\n";
-
-printf "you gave me `%s', which is 0x%02x\n", $c, ord($c);
-
-&cooked;
diff --git a/contrib/perl5/h2pl/tcbreak2 b/contrib/perl5/h2pl/tcbreak2
deleted file mode 100644
index fcbf926..0000000
--- a/contrib/perl5/h2pl/tcbreak2
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/perl
-
-require 'cbreak2.pl';
-
-&cbreak;
-
-$| = 1;
-
-print "gimme a char: ";
-
-$c = getc;
-
-print "$c\n";
-
-printf "you gave me `%s', which is 0x%02x\n", $c, ord($c);
-
-&cooked;
diff --git a/contrib/perl5/handy.h b/contrib/perl5/handy.h
deleted file mode 100644
index d71d84a..0000000
--- a/contrib/perl5/handy.h
+++ /dev/null
@@ -1,622 +0,0 @@
-/* handy.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-#if !defined(__STDC__)
-#ifdef NULL
-#undef NULL
-#endif
-#ifndef I286
-# define NULL 0
-#else
-# define NULL 0L
-#endif
-#endif
-
-#define Null(type) ((type)NULL)
-
-/*
-=for apidoc AmU||Nullch
-Null character pointer.
-
-=for apidoc AmU||Nullsv
-Null SV pointer.
-
-=cut
-*/
-
-#define Nullch Null(char*)
-#define Nullfp Null(PerlIO*)
-#define Nullsv Null(SV*)
-
-#ifdef TRUE
-#undef TRUE
-#endif
-#ifdef FALSE
-#undef FALSE
-#endif
-#define TRUE (1)
-#define FALSE (0)
-
-
-/* XXX Configure ought to have a test for a boolean type, if I can
- just figure out all the headers such a test needs.
- Andy Dougherty August 1996
-*/
-/* bool is built-in for g++-2.6.3 and later, which might be used
- for extensions. <_G_config.h> defines _G_HAVE_BOOL, but we can't
- be sure _G_config.h will be included before this file. _G_config.h
- also defines _G_HAVE_BOOL for both gcc and g++, but only g++
- actually has bool. Hence, _G_HAVE_BOOL is pretty useless for us.
- g++ can be identified by __GNUG__.
- Andy Dougherty February 2000
-*/
-#ifdef __GNUG__ /* GNU g++ has bool built-in */
-# ifndef HAS_BOOL
-# define HAS_BOOL 1
-# endif
-#endif
-
-/* The NeXT dynamic loader headers will not build with the bool macro
- So declare them now to clear confusion.
-*/
-#if defined(NeXT) || defined(__NeXT__)
-# undef FALSE
-# undef TRUE
- typedef enum bool { FALSE = 0, TRUE = 1 } bool;
-# define ENUM_BOOL 1
-# ifndef HAS_BOOL
-# define HAS_BOOL 1
-# endif /* !HAS_BOOL */
-#endif /* NeXT || __NeXT__ */
-
-#ifndef HAS_BOOL
-# if defined(UTS) || defined(VMS)
-# define bool int
-# else
-# define bool char
-# endif
-# define HAS_BOOL 1
-#endif
-
-/* XXX A note on the perl source internal type system. The
- original intent was that I32 be *exactly* 32 bits.
-
- Currently, we only guarantee that I32 is *at least* 32 bits.
- Specifically, if int is 64 bits, then so is I32. (This is the case
- for the Cray.) This has the advantage of meshing nicely with
- standard library calls (where we pass an I32 and the library is
- expecting an int), but the disadvantage that an I32 is not 32 bits.
- Andy Dougherty August 1996
-
- There is no guarantee that there is *any* integral type with
- exactly 32 bits. It is perfectly legal for a system to have
- sizeof(short) == sizeof(int) == sizeof(long) == 8.
-
- Similarly, there is no guarantee that I16 and U16 have exactly 16
- bits.
-
- For dealing with issues that may arise from various 32/64-bit
- systems, we will ask Configure to check out
-
- SHORTSIZE == sizeof(short)
- INTSIZE == sizeof(int)
- LONGSIZE == sizeof(long)
- LONGLONGSIZE == sizeof(long long) (if HAS_LONG_LONG)
- PTRSIZE == sizeof(void *)
- DOUBLESIZE == sizeof(double)
- LONG_DOUBLESIZE == sizeof(long double) (if HAS_LONG_DOUBLE).
-
-*/
-
-#ifdef I_INTTYPES /* e.g. Linux has int64_t without <inttypes.h> */
-# include <inttypes.h>
-#endif
-
-typedef I8TYPE I8;
-typedef U8TYPE U8;
-typedef I16TYPE I16;
-typedef U16TYPE U16;
-typedef I32TYPE I32;
-typedef U32TYPE U32;
-#ifdef PERL_CORE
-# ifdef HAS_QUAD
-typedef I64TYPE I64;
-typedef U64TYPE U64;
-# endif
-#endif /* PERL_CORE */
-
-#if defined(HAS_QUAD) && defined(USE_64_BIT_INT)
-# ifndef UINT64_C /* usually from <inttypes.h> */
-# if defined(HAS_LONG_LONG) && QUADKIND == QUAD_IS_LONG_LONG
-# define INT64_C(c) CAT2(c,LL)
-# define UINT64_C(c) CAT2(c,ULL)
-# else
-# if LONGSIZE == 8 && QUADKIND == QUAD_IS_LONG
-# define INT64_C(c) CAT2(c,L)
-# define UINT64_C(c) CAT2(c,UL)
-# else
-# define INT64_C(c) ((I64TYPE)(c))
-# define UINT64_C(c) ((U64TYPE)(c))
-# endif
-# endif
-# endif
-#endif
-
-/* Mention I8SIZE, U8SIZE, I16SIZE, U16SIZE, I32SIZE, U32SIZE,
- I64SIZE, and U64SIZE here so that metaconfig pulls them in. */
-
-#if defined(UINT8_MAX) && defined(INT16_MAX) && defined(INT32_MAX)
-
-/* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type.
- Please search CHAR_MAX in perl.h for further details. */
-#define U8_MAX UINT8_MAX
-#define U8_MIN UINT8_MIN
-
-#define I16_MAX INT16_MAX
-#define I16_MIN INT16_MIN
-#define U16_MAX UINT16_MAX
-#define U16_MIN UINT16_MIN
-
-#define I32_MAX INT32_MAX
-#define I32_MIN INT32_MIN
-#define U32_MAX UINT32_MAX
-#define U32_MIN UINT32_MIN
-
-#else
-
-/* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type.
- Please search CHAR_MAX in perl.h for further details. */
-#define U8_MAX PERL_UCHAR_MAX
-#define U8_MIN PERL_UCHAR_MIN
-
-#define I16_MAX PERL_SHORT_MAX
-#define I16_MIN PERL_SHORT_MIN
-#define U16_MAX PERL_USHORT_MAX
-#define U16_MIN PERL_USHORT_MIN
-
-#if LONGSIZE > 4
-# define I32_MAX PERL_INT_MAX
-# define I32_MIN PERL_INT_MIN
-# define U32_MAX PERL_UINT_MAX
-# define U32_MIN PERL_UINT_MIN
-#else
-# define I32_MAX PERL_LONG_MAX
-# define I32_MIN PERL_LONG_MIN
-# define U32_MAX PERL_ULONG_MAX
-# define U32_MIN PERL_ULONG_MIN
-#endif
-
-#endif
-
-#define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */
-#define TYPE_DIGITS(T) BIT_DIGITS(sizeof(T) * 8)
-#define TYPE_CHARS(T) (TYPE_DIGITS(T) + 2) /* sign, NUL */
-
-#define Ctl(ch) ((ch) & 037)
-
-/*
-=for apidoc Am|bool|strNE|char* s1|char* s2
-Test two strings to see if they are different. Returns true or
-false.
-
-=for apidoc Am|bool|strEQ|char* s1|char* s2
-Test two strings to see if they are equal. Returns true or false.
-
-=for apidoc Am|bool|strLT|char* s1|char* s2
-Test two strings to see if the first, C<s1>, is less than the second,
-C<s2>. Returns true or false.
-
-=for apidoc Am|bool|strLE|char* s1|char* s2
-Test two strings to see if the first, C<s1>, is less than or equal to the
-second, C<s2>. Returns true or false.
-
-=for apidoc Am|bool|strGT|char* s1|char* s2
-Test two strings to see if the first, C<s1>, is greater than the second,
-C<s2>. Returns true or false.
-
-=for apidoc Am|bool|strGE|char* s1|char* s2
-Test two strings to see if the first, C<s1>, is greater than or equal to
-the second, C<s2>. Returns true or false.
-
-=for apidoc Am|bool|strnNE|char* s1|char* s2|STRLEN len
-Test two strings to see if they are different. The C<len> parameter
-indicates the number of bytes to compare. Returns true or false. (A
-wrapper for C<strncmp>).
-
-=for apidoc Am|bool|strnEQ|char* s1|char* s2|STRLEN len
-Test two strings to see if they are equal. The C<len> parameter indicates
-the number of bytes to compare. Returns true or false. (A wrapper for
-C<strncmp>).
-
-=cut
-*/
-
-#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))
-
-#ifdef HAS_MEMCMP
-# define memNE(s1,s2,l) (memcmp(s1,s2,l))
-# define memEQ(s1,s2,l) (!memcmp(s1,s2,l))
-#else
-# define memNE(s1,s2,l) (bcmp(s1,s2,l))
-# define memEQ(s1,s2,l) (!bcmp(s1,s2,l))
-#endif
-
-/*
- * Character classes.
- *
- * Unfortunately, the introduction of locales means that we
- * can't trust isupper(), etc. to tell the truth. And when
- * it comes to /\w+/ with tainting enabled, we *must* be able
- * to trust our character classes.
- *
- * Therefore, the default tests in the text of Perl will be
- * independent of locale. Any code that wants to depend on
- * the current locale will use the tests that begin with "lc".
- */
-
-#ifdef HAS_SETLOCALE /* XXX Is there a better test for this? */
-# ifndef CTYPE256
-# define CTYPE256
-# endif
-#endif
-
-/*
-=for apidoc Am|bool|isALNUM|char ch
-Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
-character (including underscore) or digit.
-
-=for apidoc Am|bool|isALPHA|char ch
-Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
-character.
-
-=for apidoc Am|bool|isSPACE|char ch
-Returns a boolean indicating whether the C C<char> is whitespace.
-
-=for apidoc Am|bool|isDIGIT|char ch
-Returns a boolean indicating whether the C C<char> is an ASCII
-digit.
-
-=for apidoc Am|bool|isUPPER|char ch
-Returns a boolean indicating whether the C C<char> is an uppercase
-character.
-
-=for apidoc Am|bool|isLOWER|char ch
-Returns a boolean indicating whether the C C<char> is a lowercase
-character.
-
-=for apidoc Am|char|toUPPER|char ch
-Converts the specified character to uppercase.
-
-=for apidoc Am|char|toLOWER|char ch
-Converts the specified character to lowercase.
-
-=cut
-*/
-
-#define isALNUM(c) (isALPHA(c) || isDIGIT(c) || (c) == '_')
-#define isIDFIRST(c) (isALPHA(c) || (c) == '_')
-#define isALPHA(c) (isUPPER(c) || isLOWER(c))
-#define isSPACE(c) \
- ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) =='\r' || (c) == '\f')
-#define isPSXSPC(c) (isSPACE(c) || (c) == '\v')
-#define isBLANK(c) ((c) == ' ' || (c) == '\t')
-#define isDIGIT(c) ((c) >= '0' && (c) <= '9')
-#ifdef EBCDIC
- /* In EBCDIC we do not do locales: therefore() isupper() is fine. */
-# define isUPPER(c) isupper(c)
-# define isLOWER(c) islower(c)
-# define isALNUMC(c) isalnum(c)
-# define isASCII(c) isascii(c)
-# define isCNTRL(c) iscntrl(c)
-# define isGRAPH(c) isgraph(c)
-# define isPRINT(c) isprint(c)
-# define isPUNCT(c) ispunct(c)
-# define isXDIGIT(c) isxdigit(c)
-# define toUPPER(c) toupper(c)
-# define toLOWER(c) tolower(c)
-#else
-# define isUPPER(c) ((c) >= 'A' && (c) <= 'Z')
-# define isLOWER(c) ((c) >= 'a' && (c) <= 'z')
-# define isALNUMC(c) (isALPHA(c) || isDIGIT(c))
-# define isASCII(c) ((c) <= 127)
-# define isCNTRL(c) ((c) < ' ')
-# define isGRAPH(c) (isALNUM(c) || isPUNCT(c))
-# define isPRINT(c) (((c) > 32 && (c) < 127) || isSPACE(c))
-# define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126))
-# define isXDIGIT(c) (isdigit(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
-# define toUPPER(c) (isLOWER(c) ? (c) - ('a' - 'A') : (c))
-# define toLOWER(c) (isUPPER(c) ? (c) + ('a' - 'A') : (c))
-#endif
-
-#ifdef USE_NEXT_CTYPE
-
-# define isALNUM_LC(c) \
- (NXIsAlNum((unsigned int)(c)) || (char)(c) == '_')
-# define isIDFIRST_LC(c) \
- (NXIsAlpha((unsigned int)(c)) || (char)(c) == '_')
-# define isALPHA_LC(c) NXIsAlpha((unsigned int)(c))
-# define isSPACE_LC(c) NXIsSpace((unsigned int)(c))
-# define isDIGIT_LC(c) NXIsDigit((unsigned int)(c))
-# define isUPPER_LC(c) NXIsUpper((unsigned int)(c))
-# define isLOWER_LC(c) NXIsLower((unsigned int)(c))
-# define isALNUMC_LC(c) NXIsAlNum((unsigned int)(c))
-# define isCNTRL_LC(c) NXIsCntrl((unsigned int)(c))
-# define isGRAPH_LC(c) NXIsGraph((unsigned int)(c))
-# define isPRINT_LC(c) NXIsPrint((unsigned int)(c))
-# define isPUNCT_LC(c) NXIsPunct((unsigned int)(c))
-# define toUPPER_LC(c) NXToUpper((unsigned int)(c))
-# define toLOWER_LC(c) NXToLower((unsigned int)(c))
-
-#else /* !USE_NEXT_CTYPE */
-
-# if defined(CTYPE256) || (!defined(isascii) && !defined(HAS_ISASCII))
-
-# define isALNUM_LC(c) (isalnum((unsigned char)(c)) || (char)(c) == '_')
-# define isIDFIRST_LC(c) (isalpha((unsigned char)(c)) || (char)(c) == '_')
-# define isALPHA_LC(c) isalpha((unsigned char)(c))
-# define isSPACE_LC(c) isspace((unsigned char)(c))
-# define isDIGIT_LC(c) isdigit((unsigned char)(c))
-# define isUPPER_LC(c) isupper((unsigned char)(c))
-# define isLOWER_LC(c) islower((unsigned char)(c))
-# define isALNUMC_LC(c) isalnum((unsigned char)(c))
-# define isCNTRL_LC(c) iscntrl((unsigned char)(c))
-# define isGRAPH_LC(c) isgraph((unsigned char)(c))
-# define isPRINT_LC(c) isprint((unsigned char)(c))
-# define isPUNCT_LC(c) ispunct((unsigned char)(c))
-# define toUPPER_LC(c) toupper((unsigned char)(c))
-# define toLOWER_LC(c) tolower((unsigned char)(c))
-
-# else
-
-# define isALNUM_LC(c) (isascii(c) && (isalnum(c) || (c) == '_'))
-# define isIDFIRST_LC(c) (isascii(c) && (isalpha(c) || (c) == '_'))
-# define isALPHA_LC(c) (isascii(c) && isalpha(c))
-# define isSPACE_LC(c) (isascii(c) && isspace(c))
-# define isDIGIT_LC(c) (isascii(c) && isdigit(c))
-# define isUPPER_LC(c) (isascii(c) && isupper(c))
-# define isLOWER_LC(c) (isascii(c) && islower(c))
-# define isALNUMC_LC(c) (isascii(c) && isalnum(c))
-# define isCNTRL_LC(c) (isascii(c) && iscntrl(c))
-# define isGRAPH_LC(c) (isascii(c) && isgraph(c))
-# define isPRINT_LC(c) (isascii(c) && isprint(c))
-# define isPUNCT_LC(c) (isascii(c) && ispunct(c))
-# define toUPPER_LC(c) toupper(c)
-# define toLOWER_LC(c) tolower(c)
-
-# endif
-#endif /* USE_NEXT_CTYPE */
-
-#define isPSXSPC_LC(c) (isSPACE_LC(c) || (c) == '\v')
-#define isBLANK_LC(c) isBLANK(c) /* could be wrong */
-
-#define isALNUM_uni(c) is_uni_alnum(c)
-#define isIDFIRST_uni(c) is_uni_idfirst(c)
-#define isALPHA_uni(c) is_uni_alpha(c)
-#define isSPACE_uni(c) is_uni_space(c)
-#define isDIGIT_uni(c) is_uni_digit(c)
-#define isUPPER_uni(c) is_uni_upper(c)
-#define isLOWER_uni(c) is_uni_lower(c)
-#define isALNUMC_uni(c) is_uni_alnumc(c)
-#define isASCII_uni(c) is_uni_ascii(c)
-#define isCNTRL_uni(c) is_uni_cntrl(c)
-#define isGRAPH_uni(c) is_uni_graph(c)
-#define isPRINT_uni(c) is_uni_print(c)
-#define isPUNCT_uni(c) is_uni_punct(c)
-#define isXDIGIT_uni(c) is_uni_xdigit(c)
-#define toUPPER_uni(c) to_uni_upper(c)
-#define toTITLE_uni(c) to_uni_title(c)
-#define toLOWER_uni(c) to_uni_lower(c)
-
-#define isPSXSPC_uni(c) (isSPACE_uni(c) ||(c) == '\f')
-#define isBLANK_uni(c) isBLANK(c) /* could be wrong */
-
-#define isALNUM_LC_uni(c) (c < 256 ? isALNUM_LC(c) : is_uni_alnum_lc(c))
-#define isIDFIRST_LC_uni(c) (c < 256 ? isIDFIRST_LC(c) : is_uni_idfirst_lc(c))
-#define isALPHA_LC_uni(c) (c < 256 ? isALPHA_LC(c) : is_uni_alpha_lc(c))
-#define isSPACE_LC_uni(c) (c < 256 ? isSPACE_LC(c) : is_uni_space_lc(c))
-#define isDIGIT_LC_uni(c) (c < 256 ? isDIGIT_LC(c) : is_uni_digit_lc(c))
-#define isUPPER_LC_uni(c) (c < 256 ? isUPPER_LC(c) : is_uni_upper_lc(c))
-#define isLOWER_LC_uni(c) (c < 256 ? isLOWER_LC(c) : is_uni_lower_lc(c))
-#define isALNUMC_LC_uni(c) (c < 256 ? isALNUMC_LC(c) : is_uni_alnumc_lc(c))
-#define isCNTRL_LC_uni(c) (c < 256 ? isCNTRL_LC(c) : is_uni_cntrl_lc(c))
-#define isGRAPH_LC_uni(c) (c < 256 ? isGRAPH_LC(c) : is_uni_graph_lc(c))
-#define isPRINT_LC_uni(c) (c < 256 ? isPRINT_LC(c) : is_uni_print_lc(c))
-#define isPUNCT_LC_uni(c) (c < 256 ? isPUNCT_LC(c) : is_uni_punct_lc(c))
-#define toUPPER_LC_uni(c) (c < 256 ? toUPPER_LC(c) : to_uni_upper_lc(c))
-#define toTITLE_LC_uni(c) (c < 256 ? toUPPER_LC(c) : to_uni_title_lc(c))
-#define toLOWER_LC_uni(c) (c < 256 ? toLOWER_LC(c) : to_uni_lower_lc(c))
-
-#define isPSXSPC_LC_uni(c) (isSPACE_LC_uni(c) ||(c) == '\f')
-#define isBLANK_LC_uni(c) isBLANK(c) /* could be wrong */
-
-#define isALNUM_utf8(p) is_utf8_alnum(p)
-#define isIDFIRST_utf8(p) is_utf8_idfirst(p)
-#define isALPHA_utf8(p) is_utf8_alpha(p)
-#define isSPACE_utf8(p) is_utf8_space(p)
-#define isDIGIT_utf8(p) is_utf8_digit(p)
-#define isUPPER_utf8(p) is_utf8_upper(p)
-#define isLOWER_utf8(p) is_utf8_lower(p)
-#define isALNUMC_utf8(p) is_utf8_alnumc(p)
-#define isASCII_utf8(p) is_utf8_ascii(p)
-#define isCNTRL_utf8(p) is_utf8_cntrl(p)
-#define isGRAPH_utf8(p) is_utf8_graph(p)
-#define isPRINT_utf8(p) is_utf8_print(p)
-#define isPUNCT_utf8(p) is_utf8_punct(p)
-#define isXDIGIT_utf8(p) is_utf8_xdigit(p)
-#define toUPPER_utf8(p) to_utf8_upper(p)
-#define toTITLE_utf8(p) to_utf8_title(p)
-#define toLOWER_utf8(p) to_utf8_lower(p)
-
-#define isPSXSPC_utf8(c) (isSPACE_utf8(c) ||(c) == '\f')
-#define isBLANK_utf8(c) isBLANK(c) /* could be wrong */
-
-#define isALNUM_LC_utf8(p) isALNUM_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isIDFIRST_LC_utf8(p) isIDFIRST_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isALPHA_LC_utf8(p) isALPHA_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isSPACE_LC_utf8(p) isSPACE_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isDIGIT_LC_utf8(p) isDIGIT_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isUPPER_LC_utf8(p) isUPPER_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isLOWER_LC_utf8(p) isLOWER_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isALNUMC_LC_utf8(p) isALNUMC_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isCNTRL_LC_utf8(p) isCNTRL_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isGRAPH_LC_utf8(p) isGRAPH_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isPRINT_LC_utf8(p) isPRINT_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define isPUNCT_LC_utf8(p) isPUNCT_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define toUPPER_LC_utf8(p) toUPPER_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define toTITLE_LC_utf8(p) toTITLE_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-#define toLOWER_LC_utf8(p) toLOWER_LC_uni(utf8_to_uv(p, UTF8_MAXLEN, 0, 0))
-
-#define isPSXSPC_LC_utf8(c) (isSPACE_LC_utf8(c) ||(c) == '\f')
-#define isBLANK_LC_utf8(c) isBLANK(c) /* could be wrong */
-
-#ifdef EBCDIC
-# define toCTRL(c) Perl_ebcdic_control(c)
-#else
- /* This conversion works both ways, strangely enough. */
-# define toCTRL(c) (toUPPER(c) ^ 64)
-#endif
-
-/* Line numbers are unsigned, 16 bits. */
-typedef U16 line_t;
-#ifdef lint
-#define NOLINE ((line_t)0)
-#else
-#define NOLINE ((line_t) 65535)
-#endif
-
-
-/*
- XXX LEAKTEST doesn't really work in perl5. There are direct calls to
- safemalloc() in the source, so LEAKTEST won't pick them up.
- (The main "offenders" are extensions.)
- Further, if you try LEAKTEST, you'll also end up calling
- Safefree, which might call safexfree() on some things that weren't
- malloced with safexmalloc. The correct "fix" to this, if anyone
- is interested, is to ensure that all calls go through the New and
- Renew macros.
- --Andy Dougherty August 1996
-*/
-
-/*
-=for apidoc Am|SV*|NEWSV|int id|STRLEN len
-Creates a new SV. A non-zero C<len> parameter indicates the number of
-bytes of preallocated string space the SV should have. An extra byte for a
-tailing NUL is also reserved. (SvPOK is not set for the SV even if string
-space is allocated.) The reference count for the new SV is set to 1.
-C<id> is an integer id between 0 and 1299 (used to identify leaks).
-
-=for apidoc Am|void|New|int id|void* ptr|int nitems|type
-The XSUB-writer's interface to the C C<malloc> function.
-
-=for apidoc Am|void|Newc|int id|void* ptr|int nitems|type|cast
-The XSUB-writer's interface to the C C<malloc> function, with
-cast.
-
-=for apidoc Am|void|Newz|int id|void* ptr|int nitems|type
-The XSUB-writer's interface to the C C<malloc> function. The allocated
-memory is zeroed with C<memzero>.
-
-=for apidoc Am|void|Renew|void* ptr|int nitems|type
-The XSUB-writer's interface to the C C<realloc> function.
-
-=for apidoc Am|void|Renewc|void* ptr|int nitems|type|cast
-The XSUB-writer's interface to the C C<realloc> function, with
-cast.
-
-=for apidoc Am|void|Safefree|void* ptr
-The XSUB-writer's interface to the C C<free> function.
-
-=for apidoc Am|void|Move|void* src|void* dest|int nitems|type
-The XSUB-writer's interface to the C C<memmove> function. The C<src> is the
-source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
-the type. Can do overlapping moves. See also C<Copy>.
-
-=for apidoc Am|void|Copy|void* src|void* dest|int nitems|type
-The XSUB-writer's interface to the C C<memcpy> function. The C<src> is the
-source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
-the type. May fail on overlapping copies. See also C<Move>.
-
-=for apidoc Am|void|Zero|void* dest|int nitems|type
-
-The XSUB-writer's interface to the C C<memzero> function. The C<dest> is the
-destination, C<nitems> is the number of items, and C<type> is the type.
-
-=for apidoc Am|void|StructCopy|type src|type dest|type
-This is an architecture-independent macro to copy one structure to another.
-
-=cut
-*/
-
-#ifndef lint
-
-#define NEWSV(x,len) newSV(len)
-
-#ifndef LEAKTEST
-
-#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)))), \
- memzero((char*)(v), (n)*sizeof(t))
-#define Renew(v,n,t) \
- (v = (t*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))
-#define Renewc(v,n,t,c) \
- (v = (c*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))
-#define Safefree(d) safefree((Malloc_t)(d))
-
-#else /* LEAKTEST */
-
-#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)))), \
- memzero((char*)(v), (n)*sizeof(t))
-#define Renew(v,n,t) \
- (v = (t*)safexrealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))
-#define Renewc(v,n,t,c) \
- (v = (c*)safexrealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))
-#define Safefree(d) safexfree((Malloc_t)(d))
-
-#define MAXXCOUNT 1400
-#define MAXY_SIZE 80
-#define MAXYCOUNT 16 /* (MAXY_SIZE/4 + 1) */
-extern long xcount[MAXXCOUNT];
-extern long lastxcount[MAXXCOUNT];
-extern long xycount[MAXXCOUNT][MAXYCOUNT];
-extern long lastxycount[MAXXCOUNT][MAXYCOUNT];
-
-#endif /* LEAKTEST */
-
-#define Move(s,d,n,t) (void)memmove((char*)(d),(char*)(s), (n) * sizeof(t))
-#define Copy(s,d,n,t) (void)memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
-#define Zero(d,n,t) (void)memzero((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 Move(s,d,n,t)
-#define Copy(s,d,n,t)
-#define Zero(d,n,t)
-#define Safefree(d) (d) = (d)
-
-#endif /* lint */
-
-#ifdef USE_STRUCT_COPY
-#define StructCopy(s,d,t) (*((t*)(d)) = *((t*)(s)))
-#else
-#define StructCopy(s,d,t) Copy(s,d,1,t)
-#endif
diff --git a/contrib/perl5/hints/3b1.sh b/contrib/perl5/hints/3b1.sh
deleted file mode 100644
index 991348a..0000000
--- a/contrib/perl5/hints/3b1.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-d_voidsig='undef'
-d_tosignal='int'
-gidtype='int'
-groupstype='int'
-uidtype='int'
-# Note that 'Configure' is run from 'UU', hence the strange 'ln'
-# command.
-for i in .. ../x2p
-do
- rm -f $i/3b1cc
- ln ../hints/3b1cc $i
-done
-echo "\nIf you want to use the 3b1 shared libraries, complete this script then" >&4
-echo "read the header in 3b1cc. [Type carriage return to continue]\c" >&4
-read vch
diff --git a/contrib/perl5/hints/3b1cc b/contrib/perl5/hints/3b1cc
deleted file mode 100644
index 0001e04..0000000
--- a/contrib/perl5/hints/3b1cc
+++ /dev/null
@@ -1,88 +0,0 @@
-# To incorporate the 7300/3b1 shared library, run this script in place
-# of 'CC'.
-# You can skip this is you have the shcc program installed as cc in
-# your path.
-# First: Run 'Configure' through to the end and run 'make depend'.
-# Second: Edit 'makefile' ( not Makefile ) and set CC = 3b1cc.
-# Third: Edit 'x2p/makefile' and set CC = 3b1cc.
-#
-# Do not use '3b1cc' as the default compiler. The call to the default
-# compiler is used by 'perl' and will not be available when running
-# 'perl'.
-#
-# Note: This script omits libraries which are redundant in the shared
-# library. It is an excerpt from a grander version available upon
-# request from "zebra!vern" or "vern@zebra.alphacdc.com".
-
-CC="cc"
-LIBS=
-INCL=
-
-LD="ld"
-SHAREDLIB="/lib/crt0s.o /lib/shlib.ifile"
-
-# Local variables
-COBJS=
-LOBJS=
-TARG=
-FLAGS=
-CMD=
-
-# These are libraries which are incorporated in the shared library
-OMIT="-lmalloc"
-
-# These routines are in libc.a but not in the shared library
-if [ ! -f vsprintf.o -o ! -f doprnt.o ]
-then
- echo "Extracting vsprintf.o from libc.a"
- ar -x /lib/libc.a vsprintf.o doprnt.o
-fi
-
-CMD="$CC"
-while [ $# -gt 0 ]
-do
- case $1 in
- -c) CFLAG=$1;;
- -o) CFLAG=$1
- shift
- TARG="$1";;
- -l*) match=false
- for i in $OMIT
- do
- [ "$i" = "$1" ] && match=true
- done
- [ "$match" != false ] || LIBS="$LIBS $1";;
- -*) FLAGS="$FLAGS $1";;
- *.c) COBJS="$COBJS $1";;
- *.o) LOBJS="$LOBJS $1";;
- *) TARG="$1";;
- esac
- shift
-done
-
-if [ -n "$COBJS" ]
-then
- CMD="$CMD $FLAGS $INCL $LPATHS $LIBS $COBJS $CFLAG $TARG"
-elif [ -n "$LOBJS" ]
-then
- LOBJS="$LOBJS vsprintf.o doprnt.o"
- CMD="$LD -r $LOBJS $LPATHS $LIBS -o temp.o"
- echo "\t$CMD"
- $CMD
- CMD="$LD -s temp.o $SHAREDLIB -o $TARG"
- echo "\t$CMD"
- $CMD
- ccrslt=$?
- if [ $ccrslt -ne 0 ]
- then
- exit $ccrslt
- fi
- CMD="rm -f temp.o"
-else
- exit 1
-fi
-echo "\t$CMD"
-$CMD
-ccrslt=$?
-rm -f $$.c
-exit $ccrslt
diff --git a/contrib/perl5/hints/README.hints b/contrib/perl5/hints/README.hints
deleted file mode 100644
index 0666771..0000000
--- a/contrib/perl5/hints/README.hints
+++ /dev/null
@@ -1,259 +0,0 @@
-=head1 NAME
-
-README.hints
-
-=head1 DESCRIPTION
-
-These files are used by Configure to set things which Configure either
-can't or doesn't guess properly. Most of these hint files have been
-tested with at least some version of perl5, but some are still left
-over from perl4.
-
-Please send any problems or suggested changes to perlbug@perl.org.
-
-=head1 Hint file naming convention.
-
-Each hint file name should have only
-one '.'. (This is for portability to non-unix file systems.) Names
-should also fit in <= 14 characters, for portability to older SVR3
-systems. File names are of the form $osname_$osvers.sh, with all '.'
-changed to '_', and all characters (such as '/') that don't belong in
-Unix filenames omitted.
-
-For example, consider Sun OS 4.1.3. Configure determines $osname=sunos
-(all names are converted to lower case) and $osvers=4.1.3. Configure
-will search for an appropriate hint file in the following order:
-
- sunos_4_1_3.sh
- sunos_4_1.sh
- sunos_4.sh
- sunos.sh
-
-If you need to create a hint file, please try to use as general a name
-as possible and include minor version differences inside case or test
-statements. For example, for IRIX 6.X, we have the following hints
-files:
-
- irix_6_0.sh
- irix_6_1.sh
- irix_6.sh
-
-That is, 6.0 and 6.1 have their own special hints, but 6.2, 6.3, and
-up are all handled by the same irix_6.sh. That way, we don't have to
-make a new hint file every time the IRIX O/S is upgraded.
-
-If you need to test for specific minor version differences in your
-hints file, be sure to include a default choice. (See aix.sh for one
-example.) That way, if you write a hint file for foonix 3.2, it might
-still work without any changes when foonix 3.3 is released.
-
-Please also comment carefully on why the different hints are needed.
-That way, a future version of Configure may be able to automatically
-detect what is needed.
-
-A glossary of config.sh variables is in the file Porting/Glossary.
-
-=head1 Setting variables
-
-=head2 Optimizer
-
-If you want to set a variable, try to allow for Configure command-line
-overrides. For example, suppose you think the default optimizer
-setting to be -O2 for a particular platform. You should allow for
-command line overrides with something like
-
- case "$optimize" in
- '') optimize='-O2' ;;
- esac
-
-or, if your system has a decent test(1) command,
-
- test -z "$optimize" && optimize='-O2'
-
-This allows the user to select a different optimization level, e.g.
--O6 or -g.
-
-=head2 Compiler and Linker flags
-
-If you want to set $ccflags or $ldflags, you should append to the existing
-value to allow Configure command-line settings, e.g. use
-
- ccflags="$ccflags -DANOTHER_OPTION_I_NEED"
-
-so that the user can do something like
-
- sh Configure -Dccflags='FIX_NEGATIVE_ZERO'
-
-and have the FIX_NEGATIVE_ZERO value preserved by the hints file.
-
-=head2 Libraries
-
-Configure will attempt to use the libraries listed in the variable
-$libswanted. If necessary, you should remove broken libraries from
-that list, or add additional libraries to that list. You should
-*not* simply set $libs -- that ignores the possibilities of local
-variations. For example, a setting of libs='-lgdbm -lm -lc' would
-fail if another user were to try to compile Perl on a system without
-GDBM but with Berkeley DB. See hints/dec_osf.sh and hints/solaris_2.sh
-for examples.
-
-=head2 Other
-
-In general, try to avoid hard-wiring something that Configure will
-figure out anyway. Also try to allow for Configure command-line
-overrides.
-
-=head1 Hint file tricks
-
-=head2 Printing critical messages
-
-[This is still experimental]
-
-If you have a *REALLY* important message that the user ought to see at
-the end of the Configure run, you can store it in the file
-'config.msg'. At the end of the Configure run, Configure will display
-the contents of this file. Currently, the only place this is used is
-in Configure itself to warn about the need to set LD_LIBRARY_PATH if
-you are building a shared libperl.so.
-
-To use this feature, just do something like the following
-
- $cat <<EOM | $tee -a ../config.msg >&4
-
- This is a really important message. Be sure to read it
- before you type 'make'.
- EOM
-
-This message will appear on the screen as the hint file is being
-processed and again at the end of Configure.
-
-Please use this sparingly.
-
-=head2 Propagating variables to config.sh
-
-Sometimes, you want an extra variable to appear in config.sh. For
-example, if your system can't compile toke.c with the optimizer on,
-you can put
-
- toke_cflags='optimize=""'
-
-at the beginning of a line in your hints file. Configure will then
-extract that variable and place it in your config.sh file. Later,
-while compiling toke.c, the cflags shell script will eval $toke_cflags
-and hence compile toke.c without optimization.
-
-Note that for this to work, the variable you want to propagate must
-appear in the first column of the hint file. It is extracted by
-Configure with a simple sed script, so beware that surrounding case
-statements aren't any help.
-
-By contrast, if you don't want Configure to propagate your temporary
-variable, simply indent it by a leading tab in your hint file.
-
-For example, prior to 5.002, a bug in scope.c led to perl crashing
-when compiled with -O in AIX 4.1.1. The following "obvious"
-workaround in hints/aix.sh wouldn't work as expected:
-
- case "$osvers" in
- 4.1.1)
- scope_cflags='optimize=""'
- ;;
- esac
-
-because Configure doesn't parse the surrounding 'case' statement, it
-just blindly propagates any variable that starts in the first column.
-For this particular case, that's probably harmless anyway.
-
-Three possible fixes are:
-
-=over
-
-=item 1
-
-Create an aix_4_1_1.sh hint file that contains the scope_cflags
-line and then sources the regular aix hints file for the rest of
-the information.
-
-=item 2
-
-Do the following trick:
-
- scope_cflags='case "$osvers" in 4.1*) optimize=" ";; esac'
-
-Now when $scope_cflags is eval'd by the cflags shell script, the
-case statement is executed. Of course writing scripts to be eval'd is
-tricky, especially if there is complex quoting. Or,
-
-=item 3
-
-Write directly to Configure's temporary file UU/config.sh.
-You can do this with
-
- case "$osvers" in
- 4.1.1)
- echo "scope_cflags='optimize=\"\"'" >> UU/config.sh
- scope_cflags='optimize=""'
- ;;
- esac
-
-Note you have to both write the definition to the temporary
-UU/config.sh file and set the variable to the appropriate value.
-
-This is sneaky, but it works. Still, if you need anything this
-complex, perhaps you should create the separate hint file for
-aix 4.1.1.
-
-=back
-
-=head2 Call-backs
-
-=over 4
-
-=item Warning
-
-All of the following is experimental and subject to change. But it
-probably won't change much. :-)
-
-=item Compiler-related flags
-
-The settings of some things, such as optimization flags, may depend on
-the particular compiler used. For example, for ISC we have the
-following:
-
- case "$cc" in
- *gcc*) ccflags="$ccflags -posix"
- ldflags="$ldflags -posix"
- ;;
- *) ccflags="$ccflags -Xp -D_POSIX_SOURCE"
- ldflags="$ldflags -Xp"
- ;;
- esac
-
-However, the hints file is processed before the user is asked which
-compiler should be used. Thus in order for these hints to be useful,
-the user must specify sh Configure -Dcc=gcc on the command line, as
-advised by the INSTALL file.
-
-For versions of perl later than 5.004_61, this problem can
-be circumvented by the use of "call-back units". That is, the hints
-file can tuck this information away into a file UU/cc.cbu. Then,
-after Configure prompts the user for the C compiler, it will load in
-and run the UU/cc.cbu "call-back" unit. See hints/solaris_2.sh for an
-example.
-
-=item Future status
-
-I hope this "call-back" scheme is simple enough to use but powerful
-enough to deal with most situations. Still, there are certainly cases
-where it's not enough. For example, for aix we actually change
-compilers if we are using threads.
-
-I'd appreciate feedback on whether this is sufficiently general to be
-helpful, or whether we ought to simply continue to require folks to
-say things like "sh Configure -Dcc=gcc -Dusethreads" on the command line.
-
-=back
-
-Have the appropriate amount of fun :-)
-
- Andy Dougherty doughera@lafayette.edu
diff --git a/contrib/perl5/hints/aix.sh b/contrib/perl5/hints/aix.sh
deleted file mode 100644
index 25a15e4..0000000
--- a/contrib/perl5/hints/aix.sh
+++ /dev/null
@@ -1,424 +0,0 @@
-# hints/aix.sh
-# AIX 3.x.x hints thanks to Wayne Scott <wscott@ichips.intel.com>
-# AIX 4.1 hints thanks to Christopher Chan-Nui <channui@austin.ibm.com>.
-# AIX 4.1 pthreading by Christopher Chan-Nui <channui@austin.ibm.com> and
-# Jarkko Hietaniemi <jhi@iki.fi>.
-# AIX 4.3.x LP64 build by Steven Hirsch <hirschs@btv.ibm.com>
-# Merged on Mon Feb 6 10:22:35 EST 1995 by
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-
-#
-# Contact dfavor@corridor.com for any of the following:
-#
-# - AIX 43x and above support
-# - gcc + threads support
-# - socks support
-#
-# Apr 99 changes:
-#
-# - use nm in AIX 43x and above
-# - gcc + threads now builds
-# [(added support for socks) Jul 99 SOCKS support rewritten]
-#
-# Notes:
-#
-# - shared libperl support is tricky. if ever libperl.a ends up
-# in /usr/local/lib/* it can override any subsequent builds of
-# that same perl release. to make sure you know where the shared
-# libperl.a is coming from do a 'dump -Hv perl' and check all the
-# library search paths in the loader header.
-#
-# it would be nice to warn the user if a libperl.a exists that is
-# going to override the current build, but that would be complex.
-#
-# better yet, a solid fix for this situation should be developed.
-#
-
-# Configure finds setrgid and setruid, but they're useless. The man
-# pages state:
-# setrgid: The EPERM error code is always returned.
-# setruid: The EPERM error code is always returned. Processes cannot
-# reset only their real user IDs.
-d_setrgid='undef'
-d_setruid='undef'
-
-alignbytes=8
-
-case "$usemymalloc" in
-'') usemymalloc='n' ;;
-esac
-
-# Intuiting the existence of system calls under AIX is difficult,
-# at best; the safest technique is to find them empirically.
-
-# AIX 4.3.* and above default to using nm for symbol extraction
-case "$osvers" in
- 3.*|4.1.*|4.2.*)
- usenm='undef'
- ;;
- *)
- usenm='true'
- ;;
-esac
-
-so="a"
-# AIX itself uses .o (libc.o) but we prefer compatibility
-# with the rest of the world and with rest of the scripting
-# languages (Tcl, Python) and related systems (SWIG).
-# Stephanie Beals <bealzy@us.ibm.com>
-dlext="so"
-
-# Take possible hint from the environment. If 32-bit is set in the
-# environment, we can override it later. If set for 64, the
-# 'sizeof' test sees a native 64-bit architecture and never looks back.
-case "$OBJECT_MODE" in
-32)
- cat >&4 <<EOF
-
-You have OBJECT_MODE=32 set in the environment.
-I take this as a hint you do not want to
-build for a 64-bit address space. You will be
-given the opportunity to change this later.
-EOF
- ;;
-64)
- cat >&4 <<EOF
-
-You have OBJECT_MODE=64 set in the environment.
-This forces a full 64-bit build. If that is
-not what you intended, please terminate this
-program, unset it and restart.
-EOF
- ;;
-*) ;;
-esac
-
-# Trying to set this breaks the POSIX.c compilation
-
-# Make setsockopt work correctly. See man page.
-# ccflags='-D_BSD=44'
-
-# uname -m output is too specific and not appropriate here
-case "$archname" in
-'') archname="$osname" ;;
-esac
-
-cc=${cc:-cc}
-
-case "$osvers" in
-3*) d_fchmod=undef
- ccflags="$ccflags -D_ALL_SOURCE"
- ;;
-*) # These hints at least work for 4.x, possibly other systems too.
- ccflags="$ccflags -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE"
- case "$cc" in
- *gcc*) ;;
- *) ccflags="$ccflags -qmaxmem=16384" ;;
- esac
- nm_opt='-B'
- ;;
-esac
-
-# These functions don't work like Perl expects them to.
-d_setregid='undef'
-d_setreuid='undef'
-
-# Changes for dynamic linking by Wayne Scott <wscott@ichips.intel.com>
-#
-# Tell perl which symbols to export for dynamic linking.
-case "$cc" in
-*gcc*) ccdlflags='-Xlinker' ;;
-*) ccversion=`lslpp -L | grep 'C for AIX Compiler$' | awk '{print $2}'`
- case "$ccversion" in
- 4.4.0.0|4.4.0.1|4.4.0.2)
- echo >&4 "*** This C compiler ($ccversion) is outdated."
- echo >&4 "*** Please upgrade to at least 4.4.0.3."
- ;;
- esac
-esac
-# the required -bE:$installarchlib/CORE/perl.exp is added by
-# libperl.U (Configure) later.
-
-case "$ldlibpthname" in
-'') ldlibpthname=LIBPATH ;;
-esac
-
-# The first 3 options would not be needed if dynamic libs. could be linked
-# with the compiler instead of ld.
-# -bI:$(PERL_INC)/perl.exp Read the exported symbols from the perl binary
-# -bE:$(BASEEXT).exp Export these symbols. This file contains only one
-# symbol: boot_$(EXP) can it be auto-generated?
-case "$osvers" in
-3*)
- lddlflags="$lddlflags -H512 -T512 -bhalt:4 -bM:SRE -bI:\$(PERL_INC)/perl.exp -bE:\$(BASEEXT).exp -e _nostart -lc"
- ;;
-*)
- lddlflags="$lddlflags -bhalt:4 -bM:SRE -bI:\$(PERL_INC)/perl.exp -bE:\$(BASEEXT).exp -b noentry -lc"
- ;;
-esac
-# AIX 4.2 (using latest patchlevels on 20001130) has a broken bind
-# library (getprotobyname and getprotobynumber are outversioned by
-# the same calls in libc, at least for xlc version 3...
-case "`oslevel`" in
- 4.2.1.*) # Test for xlc version too, should we?
- case "$ccversion" in # Don't know if needed for gcc
- 3.1.4.*) # libswanted "bind ... c ..." => "... c bind ..."
- set `echo X "$libswanted "| sed -e 's/ bind\( .*\) \([cC]\) / \1 \2 bind /'`
- shift
- libswanted="$*"
- ;;
- esac
- ;;
- esac
-
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
-case "$usethreads" in
-$define|true|[yY]*)
- ccflags="$ccflags -DNEED_PTHREAD_INIT"
- case "$cc" in
- gcc) ;;
- cc_r) ;;
- cc|xl[cC]_r)
- echo >&4 "Switching cc to cc_r because of POSIX threads."
- # xlc_r has been known to produce buggy code in AIX 4.3.2.
- # (e.g. pragma/overload core dumps) Let's suspect xlC_r, too.
- # --jhi@iki.fi
- cc=cc_r
- ;;
- '')
- cc=cc_r
- ;;
- *)
- cat >&4 <<EOM
-*** For pthreads you should use the AIX C compiler cc_r.
-*** (now your compiler was set to '$cc')
-*** Cannot continue, aborting.
-EOM
- exit 1
- ;;
- esac
-
- # c_rify libswanted.
- set `echo X "$libswanted "| sed -e 's/ \([cC]\) / \1_r /g'`
- shift
- libswanted="$*"
- # c_rify lddlflags.
- set `echo X "$lddlflags "| sed -e 's/ \(-l[cC]\) / \1_r /g'`
- shift
- lddlflags="$*"
-
- # Insert pthreads to libswanted, before any libc or libC.
- set `echo X "$libswanted "| sed -e 's/ \([cC]\) / pthreads \1 /'`
- shift
- libswanted="$*"
- # Insert pthreads to lddlflags, before any libc or libC.
- set `echo X "$lddlflags " | sed -e 's/ \(-l[cC]\) / -lpthreads \1 /'`
- shift
- lddlflags="$*"
-
- ;;
-esac
-EOCBU
-
-# This script UU/uselargefiles.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use large files.
-cat > UU/uselargefiles.cbu <<'EOCBU'
-case "$uselargefiles" in
-''|$define|true|[yY]*)
-# Keep these at the left margin.
-ccflags_uselargefiles="`getconf XBS5_ILP32_OFFBIG_CFLAGS 2>/dev/null`"
-ldflags_uselargefiles="`getconf XBS5_ILP32_OFFBIG_LDFLAGS 2>/dev/null`"
- # _Somehow_ in AIX 4.3.1.0 the above getconf call manages to
- # insert(?) *something* to $ldflags so that later (in Configure) evaluating
- # $ldflags causes a newline after the '-b64' (the result of the getconf).
- # (nothing strange shows up in $ldflags even in hexdump;
- # so it may be something (a bug) in the shell, instead?)
- # Try it out: just uncomment the below line and rerun Configure:
-# echo >&4 "AIX 4.3.1.0 $ldflags_uselargefiles mystery" ; exit 1
- # Just don't ask me how AIX does it, I spent hours wondering.
- # Therefore the line re-evaluating ldflags_uselargefiles: it seems to fix
- # the whatever it was that AIX managed to break. --jhi
- ldflags_uselargefiles="`echo $ldflags_uselargefiles`"
-# Keep this at the left margin.
-libswanted_uselargefiles="`getconf XBS5_ILP32_OFFBIG_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`"
- case "$ccflags_uselargefiles$ldflags_uselargefiles$libs_uselargefiles" in
- '');;
- *) ccflags="$ccflags $ccflags_uselargefiles"
- ldflags="$ldflags $ldflags_uselargefiles"
- libswanted="$libswanted $libswanted_uselargefiles"
- ;;
- esac
- case "$gccversion" in
- '') ;;
- *)
- cat >&4 <<EOM
-
-*** Warning: gcc in AIX might not work with the largefile support of Perl
-*** (default since 5.6.0), this combination hasn't been tested.
-*** I will try, though.
-
-EOM
- # Remove xlc-spefific -qflags.
- ccflags="`echo $ccflags | sed -e 's@ -q[^ ]*@ @g' -e 's@^-q[^ ]* @@g'`"
- ldflags="`echo $ldflags | sed -e 's@ -q[^ ]*@ @g' -e 's@^-q[^ ]* @@g'`"
- echo >&4 "(using ccflags $ccflags)"
- echo >&4 "(using ldflags $ldflags)"
- ;;
- esac
- ;;
-esac
-EOCBU
-
-# This script UU/use64bitint.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use 64 bit integers.
-cat > UU/use64bitint.cbu <<'EOCBU'
-case "$use64bitint" in
-$define|true|[yY]*)
- case "`oslevel`" in
- 3.*|4.[012].*)
- cat >&4 <<EOM
-AIX `oslevel` does not support 64-bit interfaces.
-You should upgrade to at least AIX 4.3.
-EOM
- exit 1
- ;;
- esac
- ;;
-esac
-EOCBU
-
-cat > UU/use64bitall.cbu <<'EOCBU'
-# This script UU/use64bitall.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to be maximally 64-bitty.
-case "$use64bitall" in
-$define|true|[yY]*)
- case "`oslevel`" in
- 3.*|4.[012].*)
- cat >&4 <<EOM
-AIX `oslevel` does not support 64-bit interfaces.
-You should upgrade to at least AIX 4.3.
-EOM
- exit 1
- ;;
- esac
- echo " "
- echo "Checking the CPU width of your hardware..." >&4
- $cat >size.c <<EOCP
-#include <stdio.h>
-#include <sys/systemcfg.h>
-int main (void)
-{
- printf("%d\n",_system_configuration.width);
- return(0);
-}
-EOCP
- set size
- if eval $compile_ok; then
- qacpuwidth=`./size`
- echo "You are running on $qacpuwidth bit hardware."
- else
- dflt="32"
- echo " "
- echo "(I can't seem to compile the test program. Guessing...)"
- rp="What is the width of your CPU (in bits)?"
- . ./myread
- qacpuwidth="$ans"
- fi
- $rm -f size.c size
- case "$qacpuwidth" in
- 32*)
- cat >&4 <<EOM
-Bzzzt! At present, you can only perform a
-full 64-bit build on a 64-bit machine.
-EOM
- exit 1
- ;;
- esac
- qacflags="`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
- qaldflags="`getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`"
- # See jhi's comments above regarding this re-eval. I've
- # seen similar weirdness in the form of:
- #
-# 1506-173 (W) Option lm is not valid. Enter xlc for list of valid options.
- #
- # error messages from 'cc -E' invocation. Again, the offending
- # string is simply not detectable by any means. Since it doesn't
- # do any harm, I didn't pursue it. -- sh
- qaldflags="`echo $qaldflags`"
- qalibs="`getconf XBS5_LP64_OFF64_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`"
- # -q32 and -b32 may have been set by uselargefiles or user.
- # Remove them.
- ccflags="`echo $ccflags | sed -e 's@-q32@@'`"
- ldflags="`echo $ldflags | sed -e 's@-b32@@'`"
- # Tell archiver to use large format. Unless we remove 'ar'
- # from 'trylist', the Configure script will just reset it to 'ar'
- # immediately prior to writing config.sh. This took me hours
- # to figure out.
- trylist="`echo $trylist | sed -e 's@^ar @@' -e 's@ ar @ @g' -e 's@ ar$@@'`"
- ar="ar -X64"
- nm_opt="-X64 $nm_opt"
- # Note: Placing the 'qacflags' variable into the 'ldflags' string
- # is NOT a typo. ldflags is passed to the C compiler for final
- # linking, and it wants -q64 (-b64 is for ld only!).
- case "$qacflags$qaldflags$qalibs" in
- '');;
- *) ccflags="$ccflags $qacflags"
- ldflags="$ldflags $qacflags"
- lddlflags="$qaldflags $lddlflags"
- libswanted="$libswanted $qalibs"
- ;;
- esac
- case "$ccflags" in
- *-DUSE_64_BIT_ALL*) ;;
- *) ccflags="$ccflags -DUSE_64_BIT_ALL";;
- esac
- case "$archname64" in
- ''|64*) archname64=64all ;;
- esac
- longsize="8"
- # Don't try backwards compatibility
- bincompat="$undef"
- d_bincompat5005="$undef"
- qacflags=''
- qaldflags=''
- qalibs=''
- qacpuwidth=''
- ;;
-esac
-EOCBU
-
-cat > UU/uselongdouble.cbu <<'EOCBU'
-# This script UU/uselongdouble.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use long doubles.
-case "$uselongdouble" in
-$define|true|[yY]*)
- case "$cc" in
- *gcc*) ;;
- *) ccflags="$ccflags -qlongdouble" ;;
- esac
- # The explicit cc128, xlc128, xlC128 are not needed,
- # the -qlongdouble should do the trick. --jhi
- d_Gconvert='sprintf((b),"%.*llg",(n),(x))'
- ;;
-esac
-EOCBU
-
-# If the C++ libraries, libC and libC_r, are available we will prefer them
-# over the vanilla libc, because the libC contain loadAndInit() and
-# terminateAndUnload() which work correctly with C++ statics while libc
-# load() and unload() do not. See ext/DynaLoader/dl_aix.xs.
-# The C-to-C_r switch is done by usethreads.cbu, if needed.
-if test -f /lib/libC.a -a X"`$cc -v 2>&1 | grep gcc`" = X; then
- # Cify libswanted.
- set `echo X "$libswanted "| sed -e 's/ c / C c /'`
- shift
- libswanted="$*"
- # Cify lddlflags.
- set `echo X "$lddlflags "| sed -e 's/ -lc / -lC -lc /'`
- shift
- lddlflags="$*"
-fi
-
-# EOF
diff --git a/contrib/perl5/hints/altos486.sh b/contrib/perl5/hints/altos486.sh
deleted file mode 100644
index b85f907..0000000
--- a/contrib/perl5/hints/altos486.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-: have heard of problems with -lc_s on Altos 486
-set `echo " $libswanted " | sed "s/ c_s / /"`
-libswanted="$*"
diff --git a/contrib/perl5/hints/amigaos.sh b/contrib/perl5/hints/amigaos.sh
deleted file mode 100644
index fff55b0..0000000
--- a/contrib/perl5/hints/amigaos.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-# hints/amigaos.sh
-#
-# talk to pueschel@imsdd.meb.uni-bonn.de if you want to change this file.
-#
-# misc stuff
-archname='m68k-amigaos'
-cc='gcc'
-firstmakefile='GNUmakefile'
-usenm='true'
-
-usemymalloc='n'
-usevfork='true'
-useperlio='true'
-d_eofnblk='define'
-d_fork='undef'
-d_vfork='define'
-groupstype='int'
-
-# libs
-
-libpth="$prefix/lib /local/lib"
-glibpth="$libpth"
-xlibpth="$libpth"
-
-# This should remove unwanted libraries instead of limiting the set
-# to just these few. E.g. what about Berkeley DB?
-libswanted='gdbm m dld'
-so=' '
-
-# compiler & linker flags
-# Respect command-line values.
-
-ccflags="$ccflags -DAMIGAOS -mstackextend"
-case "$optimize" in
-'') optimize='-O2 -fomit-frame-pointer';;
-esac
-dlext='o'
-# Are these two different from the defaults?
-cccdlflags='none'
-ccdlflags='none'
-lddlflags='-oformat a.out-amiga -r'
-
-# uncomment the following settings if you are compiling for an 68020+ system
-# and want a residentable executable instead of dynamic loading
-
-# usedl='n'
-# ccflags='-DAMIGAOS -mstackextend -m68020 -resident32'
-# ldflags='-m68020 -resident32'
-
-# AmigaOS always reports only two links to directories, even if they
-# contain subdirectories. Consequently, we use this variable to stop
-# File::Find using the link count to determine whether there are
-# subdirectories to be searched. This will generate a harmless message:
-# Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
-# Propagating recommended variable dont_use_nlink
-dont_use_nlink='define'
diff --git a/contrib/perl5/hints/apollo.sh b/contrib/perl5/hints/apollo.sh
deleted file mode 100644
index 05f433d..0000000
--- a/contrib/perl5/hints/apollo.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-# Info from Johann Klasek <jk@auto.tuwien.ac.at>
-# Merged by Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Last revised Tue Mar 16 19:12:22 EET 1999 by
-# Jarkko Hietaniemi <jhi@iki.fi>
-
-# uname -a looks like
-# DomainOS newton 10.4.1 bsd4.3 425t
-
-# We want to use both BSD includes and some of the features from the
-# /sys5 includes.
-ccflags="$ccflags -A cpu,mathchip -I`pwd`/apollo -I/usr/include -I/sys5/usr/include"
-
-# When Apollo runs a script with "#!", it sets argv[0] to the script name.
-toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
-
-# These adjustments are necessary (why?) to compile malloc.c.
-freetype='void'
-i_malloc='undef'
-malloctype='void *'
-
-# This info is left over from perl4.
-cat <<'EOF' >&4
-Some tests may fail unless you use 'chacl -B'. Also, op/stat
-test 2 may fail occasionally because Apollo doesn't guarantee
-that mtime will be equal to ctime on a newly created unmodified
-file. Finally, the sleep test will sometimes fail. See the
-sleep(3) man page to learn why.
-
-See hints/apollo.sh for hints on running h2ph.
-
-And a note on ccflags:
-
- Lastly, while -A cpu,mathchip generates optimal code for your DN3500
- running sr10.3, be aware that you should be using -A cpu,mathlib_sr10
- if your perl must also run on any machines running sr10.0, sr10.1, or
- sr10.2. The -A cpu,mathchip option generates code that doesn't work on
- pre-sr10.3 nodes. See the cc(1) man page for more details.
- -- Steve Vinoski
-
-EOF
-
-# Running h2ph, on the other hand, presents a challenge.
-
-#The perl header files have to be generated with following commands
-
-#sed 's|/usr/include|/sys5/usr/include|g' h2ph >h2ph.new && chmod +x h2ph.new
-#(set cdir=`pwd`; cd /sys5/usr/include; $cdir/h2ph.new sys/* )
-#(set cdir=`pwd`; cd /usr/include; $cdir/h2ph * sys/* machine/*)
-
-#The SYS5 headers (only sys) are overlayed by the BSD headers. It seems
-#all ok, but once I am going into details, a lot of limitations from
-#'h2ph' are coming up. Lines like "#define NODEV (dev_t)(-1)" result in
-#syntax errors as converted by h2ph.
-
-# Generally, h2ph might need a lot of help.
diff --git a/contrib/perl5/hints/aux_3.sh b/contrib/perl5/hints/aux_3.sh
deleted file mode 100644
index aa3150a..0000000
--- a/contrib/perl5/hints/aux_3.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-# hints/aux_3.sh
-#
-# Improved by Jake Hamby <jehamby@lightside.com> to support both Apple CC
-# and GNU CC. Tested on A/UX 3.1.1 with GCC 2.6.3.
-# Now notifies of problem with version of dbm shipped with A/UX
-# Last modified
-# Sun Jan 5 11:16:41 WET 1997
-
-case "$cc" in
-*gcc*) optimize='-O2'
- ccflags="$ccflags -D_POSIX_SOURCE"
- echo "Setting hints for GNU CC."
- ;;
-*) optimize='-O'
- ccflags="$ccflags -B/usr/lib/big/ -DPARAM_NEEDS_TYPES -D_POSIX_SOURCE"
- POSIX_cflags='ccflags="$ccflags -ZP -Du_long=U32"'
- echo "Setting hints for Apple's CC. If you plan to use"
- echo "GNU CC, please rerun this Configure script as:"
- echo "./Configure -Dcc=gcc"
- ;;
-esac
-test -r ./broken-db.msg && . ./broken-db.msg
diff --git a/contrib/perl5/hints/beos.sh b/contrib/perl5/hints/beos.sh
deleted file mode 100644
index 8017dce..0000000
--- a/contrib/perl5/hints/beos.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-# BeOS hints file
-# $Id: beos.sh,v 1.1 1998/02/16 03:51:45 dogcow Exp $
-
-if [ ! -f beos/nm ]; then mwcc -w all -o beos/nm beos/nm.c 2>/dev/null; fi
-# If this fails, that's all right - it's only for PPC.
-
-prefix="/boot/home/config"
-
-#cpp="mwcc -e"
-
-libpth='/boot/beos/system/lib /boot/home/config/lib'
-usrinc='/boot/develop/headers/posix'
-locinc='/boot/develop/headers/ /boot/home/config/include'
-
-libc='/boot/beos/system/lib/libroot.so'
-libs=' '
-
-d_bcmp='define'
-d_bcopy='define'
-d_bzero='define'
-d_index='define'
-#d_htonl='define' # It exists, but much hackery would be required to support.
-# a bunch of extra includes would have to be added, and it's only used at
-# one place in the non-socket perl code.
-
-#these are all in libdll.a, which my version of nm doesn't know how to parse.
-#if I can get it to both do that, and scan multiple library files, perhaps
-#these can be gotten rid of.
-
-usemymalloc='n'
-# Hopefully, Be's malloc knows better than perl's.
-
-d_link='undef'
-dont_use_nlink='define'
-# no posix (aka hard) links for us!
-
-d_syserrlst='undef'
-# the array syserrlst[] is useless for the most part.
-# large negative numbers really kind of suck in arrays.
-
-d_socket='undef'
-d_gethbyaddr='undef'
-d_gethbyname='undef'
-d_getsbyname='undef'
-
-ld='gcc'
-
-# Sockets really don't work with the current version of perl and the
-# current BeOS sockets; I suspect that a new module a la GSAR's WIN32 port
-# will be required.
-# Of course, this may also change with R5.
-
-export PATH="$PATH:$PWD/beos"
-
-case "$ldlibpthname" in
-'') ldlibpthname=LIBRARY_PATH ;;
-esac
diff --git a/contrib/perl5/hints/broken-db.msg b/contrib/perl5/hints/broken-db.msg
deleted file mode 100644
index 92ba077..0000000
--- a/contrib/perl5/hints/broken-db.msg
+++ /dev/null
@@ -1,14 +0,0 @@
-# Several OSs come with an old version of the DB library which fails
-# on a few of the db-recno.t tests. This file is sourced by the hints
-# files for those OSs.
-
-cat <<EOF >&4
-
-Unless you've upgraded your DB library manually you will see failures in
-db-recno tests 51, 53 and 55. The behavior these tests are checking is
-broken in the DB library which is included with the OS. You can ignore
-the errors if you're never going to use the broken functionality (recno
-databases with a modified bval), otherwise you'll have to upgrade your
-DB library or OS.
-
-EOF
diff --git a/contrib/perl5/hints/bsdos.sh b/contrib/perl5/hints/bsdos.sh
deleted file mode 100644
index 5875543..0000000
--- a/contrib/perl5/hints/bsdos.sh
+++ /dev/null
@@ -1,131 +0,0 @@
-# hints/bsdos.sh
-#
-# hints file for BSD/OS (adapted from bsd386.sh)
-# Original by Neil Bowers <neilb@khoros.unm.edu>; Tue Oct 4 12:01:34 EDT 1994
-# Updated by Tony Sanders <sanders@bsdi.com>; Sat Aug 23 12:47:45 MDT 1997
-# Added 3.1 with ELF dynamic libraries (NOT in 3.1 yet.
-# Estimated for 4.0) SYSV IPC tested Ok so I re-enabled.
-#
-# Updated to work in post-4.0 by Todd C. Miller <millert@openbsd.org>
-#
-# Updated for threads by "Timur I. Bakeyev" <bsdi@listserv.bat.ru>
-#
-# To override the compiler on the command line:
-# ./Configure -Dcc=gcc2
-#
-# The BSD/OS distribution is built with:
-# ./Configure -des -Dbsdos_distribution=defined
-
-signal_t='void'
-d_voidsig='define'
-
-usemymalloc='n'
-
-# setre?[ug]id() have been replaced by the _POSIX_SAVED_IDS versions.
-# See <A HREF="http://www.bsdi.com/bsdi-man?setuid">http://www.bsdi.com/bsdi-man?setuid</A>(2)
-d_setregid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-
-# we don't want to use -lnm, since exp() is busted (in 1.1 anyway)
-set `echo X "$libswanted "| sed -e 's/ nm / /'`
-shift
-libswanted="$*"
-
-# X libraries are in their own tree
-glibpth="$glibpth /usr/X11/lib"
-ldflags="$ldflags -L/usr/X11/lib"
-
-case "$optimize" in
-'') optimize='-O2' ;;
-esac
-
-case "$bsdos_distribution" in
-''|undef|false) ;;
-*)
- d_dosuid='define'
- d_portable='undef'
- prefix='/usr/contrib'
- perlpath='/usr/bin/perl5'
- startperl='#!/usr/bin/perl5'
- scriptdir='/usr/contrib/bin'
- privlib='/usr/libdata/perl5'
- man1dir='/usr/contrib/man/man1'
- man3dir='/usr/contrib/man/man3'
- # phlib added by BSDI -- we share the *.ph include dir with perl4
- phlib="/usr/libdata/perl5/site_perl/$(arch)-$osname/include"
- phlibexp="/usr/libdata/perl5/site_perl/$(arch)-$osname/include"
- ;;
-esac
-
-case "$osvers" in
-1.0*)
- # Avoid problems with HUGE_VAL in POSIX in 1.0's cc.
- POSIX_cflags='ccflags="$ccflags -UHUGE_VAL"'
- ;;
-1.1*)
- # Use gcc2
- case "$cc" in
- '') cc='gcc2' ;;
- esac
- ;;
-2.0*|2.1*|3.0*|3.1*)
- so='o'
-
- # default to GCC 2.X w/shared libraries
- case "$cc" in
- '') cc='shlicc2'
- cccdlflags=' ' ;; # Avoid the dreaded -fpic
- esac
-
- # default ld to shared library linker
- case "$ld" in
- '') ld='shlicc2'
- lddlflags='-r' ;; # this one is necessary
- esac
-
- # Must preload the static shared libraries.
- libswanted="Xpm Xaw Xmu Xt SM ICE Xext X11 $libswanted"
- libswanted="rpc curses termcap $libswanted"
- ;;
-4.*)
- # ELF dynamic link libraries starting in 4.0
- useshrplib='true'
- so='so'
- dlext='so'
-
- case "$cc" in
- '') cc='cc' # cc is gcc2 in 4.0
- cccdlflags="-fPIC"
- ccdlflags="-rdynamic -Wl,-rpath,$privlib/$archname/CORE"
- ;;
- esac
-
- case "$ld" in
- '') ld='ld'
- lddlflags="-shared -x $lddlflags" ;;
- esac
- # Due usage of static pointer from crt.o
- libswanted="util $libswanted" ;;
-esac
-
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
-case "$usethreads" in
-$define|true|[yY]*)
- case "$osvers" in
- 3.*|4.*) ccflags="-D_REENTRANT $ccflags"
- ;;
- *) cat <<EOM >&4
-I did not know that BSD/OS $osvers supports POSIX threads.
-
-Feel free to tell perlbug@perl.org otherwise.
-EOM
- exit 1
- ;;
- esac
- ;;
-esac
-EOCBU
diff --git a/contrib/perl5/hints/convexos.sh b/contrib/perl5/hints/convexos.sh
deleted file mode 100644
index 9f6d702..0000000
--- a/contrib/perl5/hints/convexos.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-# convexos.sh
-# Thanks to David Starks-Browning <dstarks@rc.tudelft.nl>
-# Date: Tue, 17 Jan 1995 10:45:03 -0500 (EST)
-# Subject: Re: Hints for ConvexOS 10.2
-#
-# uname -a output looks like
-# ConvexOS xxxx C38xx 10.2 convex
-# Configure may incorrectly assign $3 to $osvers.
-#
-set X $myuname
-shift
-osvers=$4
diff --git a/contrib/perl5/hints/cxux.sh b/contrib/perl5/hints/cxux.sh
deleted file mode 100644
index e3ac086..0000000
--- a/contrib/perl5/hints/cxux.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#! /local/gnu/bin/bash
-# Hints for the CX/UX 7.1 operating system running on Concurrent (formerly
-# Harris) NightHawk machines. written by Tom.Horsley@mail.ccur.com
-#
-# This config is setup for dynamic linking and the Concurrent C compiler.
-
-# Check some things and print warnings if this isn't going to work...
-#
-case ${SDE_TARGET:-ELF} in
- [Cc][Oo][Ff][Ff]|[Oo][Cc][Ss]) echo ''
- echo '' >&2
- echo WARNING: Do not build perl 5 with the SDE_TARGET set to >&2
- echo generate coff object - perl 5 must be built in the ELF >&2
- echo environment. >&2
- echo '' >&2
- echo '';;
- [Ee][Ll][Ff]) : ;;
- *) echo '' >&2
- echo 'Unknown SDE_TARGET value: '$SDE_TARGET >&2
- echo '' >&2 ;;
-esac
-
-case `uname -r` in
- [789]*) : ;;
- *) echo ''
- echo '' >&2
- echo WARNING: Perl 5 requires shared library support, it cannot >&2
- echo be built on releases of CX/UX prior to 7.0 with this hints >&2
- echo file. You\'ll have to do a separate port for the statically >&2
- echo linked COFF environment. >&2
- echo '' >&2
- echo '';;
-esac
-
-# Internally at Concurrent, we use a source management tool which winds up
-# giving us read-only copies of source trees that are mostly symbolic links.
-# That upsets the perl build process when it tries to edit opcode.h and
-# embed.h or touch perly.c or perly.h, so turn those files into "real" files
-# when Configure runs. (If you already have "real" source files, this won't
-# do anything).
-#
-if [ -x /usr/local/mkreal ]
-then
- for i in '.' '..'
- do
- for j in embed.h opcode.h perly.h perly.c
- do
- if [ -h $i/$j ]
- then
- ( cd $i ; /usr/local/mkreal $j ; chmod 666 $j )
- fi
- done
- done
-fi
-
-# We DO NOT want -lmalloc
-#
-libswanted=`echo ' '$libswanted' ' | sed -e 's/ malloc / /'`
-
-# Stick the low-level elf library path in first.
-#
-glibpth="/usr/sde/elf/usr/lib $glibpth"
-
-# Need to use Concurrent cc for most of these options to be meaningful (if
-# you want to get this to work with gcc, you're on your own :-). Passing
-# -Bexport to the linker when linking perl is important because it leaves
-# the interpreter internal symbols visible to the shared libs that will be
-# loaded on demand (and will try to reference those symbols). The -u option
-# to drag 'sigaction' into the perl main program is to make sure it gets
-# defined for the posix shared library (for some reason sigaction is static,
-# rather than being defined in libc.so.1). The 88110compat option makes sure
-# the code will run on both 88100 and 88110 machines. The define is added to
-# trigger a work around for a compiler bug which shows up in pp.c.
-#
-cc='/bin/cc -Xa -Qtarget=M88110compat -DCXUX_BROKEN_CONSTANT_CONVERT'
-cccdlflags='-Zelf -Zpic'
-ccdlflags='-Zelf -Zlink=dynamic -Wl,-Bexport -u sigaction'
-lddlflags='-Zlink=so'
-
-# Configure imagines that it sees a pw_quota field, but it is really in a
-# different structure than the one it thinks it is looking at.
-d_pwquota='undef'
-
-# Configure sometimes finds what it believes to be ndbm header files on the
-# system and imagines that we have the NDBM library, but we really don't.
-# There is something there that once resembled ndbm, but it is purely
-# for internal use in some tool and has been hacked beyond recognition
-# (or even function :-)
-#
-i_ndbm='undef'
-
-# Don't use the perl malloc
-#
-d_mymalloc='undef'
-usemymalloc='n'
-
-cat <<'EOM' >&4
-
-WARNING: If you are using ksh to run the Configure script, you may find it
-failing in mysterious ways (such as failing to find library routines which
-are known to exist). Configure seems to push ksh beyond its limits
-sometimes. Try using env to strip unnecessary things out of the environment
-and run Configure with /sbin/sh. That sometimes seems to produce more
-accurate results.
-
-EOM
diff --git a/contrib/perl5/hints/cygwin.sh b/contrib/perl5/hints/cygwin.sh
deleted file mode 100644
index c57d3f6..0000000
--- a/contrib/perl5/hints/cygwin.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#! /bin/sh
-# cygwin.sh - hints for building perl using the Cygwin environment for Win32
-#
-
-# not otherwise settable
-exe_ext='.exe'
-firstmakefile='GNUmakefile'
-case "$ldlibpthname" in
-'') ldlibpthname=PATH ;;
-esac
-archobjs='cygwin.o'
-
-# mandatory (overrides incorrect defaults)
-test -z "$cc" && cc='gcc'
-if test -z "$plibpth"
-then
- plibpth=`gcc -print-file-name=libc.a`
- plibpth=`dirname $plibpth`
- plibpth=`cd $plibpth && pwd`
-fi
-so='dll'
-# - eliminate -lc, implied by gcc and a symlink to libcygwin.a
-libswanted=`echo " $libswanted " | sed -e 's/ c / /g'`
-# - eliminate -lm, symlink to libcygwin.a
-libswanted=`echo " $libswanted " | sed -e 's/ m / /g'`
-libswanted="$libswanted cygipc"
-test -z "$optimize" && optimize='-O2'
-ccflags="$ccflags -DPERL_USE_SAFE_PUTENV"
-# - otherwise i686-cygwin
-archname='cygwin'
-
-# dynamic loading
-# - otherwise -fpic
-cccdlflags=' '
-ld='ld2'
-
-# optional(ish)
-# - perl malloc needs to be unpolluted
-bincompat5005='undef'
-
-# Win9x problem with non-blocking read from a closed pipe
-d_eofnblk='define'
-
-# strip exe's and dll's
-#ldflags="$ldflags -s"
-#ccdlflags="$ccdlflags -s"
-#lddlflags="$lddlflags -s"
diff --git a/contrib/perl5/hints/darwin.sh b/contrib/perl5/hints/darwin.sh
deleted file mode 100644
index 8625798..0000000
--- a/contrib/perl5/hints/darwin.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-##
-# Darwin (Mac OS) hints
-# Wilfredo Sanchez <wsanchez@apple.com>
-##
-
-##
-# Paths
-##
-
-# BSD paths
-prefix='/usr';
-siteprefix='/usr/local';
-vendorprefix='/usr/local'; usevendorprefix='define';
-
-# 4BSD uses /usr/share/man, not /usr/man.
-# Don't put man pages in /usr/lib; that's goofy.
-man1dir='/usr/share/man/man1';
-man3dir='/usr/share/man/man3';
-
-# Where to put modules.
-privlib='/System/Library/Perl';
-sitelib='/Local/Library/Perl';
-vendorlib='/Network/Library/Perl';
-
-##
-# Tool chain settings
-##
-
-# Since we can build fat, the archname doesn't need the processor type
-archname='darwin';
-
-# nm works.
-usenm='true';
-
-# Libc is in libsystem.
-libc='/System/Library/Frameworks/System.framework/System';
-
-# Optimize.
-optimize='-O3';
-
-# We have a prototype for telldir.
-ccflags="${ccflags} -pipe -fno-common -DHAS_TELLDIR_PROTOTYPE";
-
-# Shared library extension is .dylib.
-# Bundle extension is .bundle.
-ld='cc';
-so='dylib';
-dlext='bundle';
-dlsrc='dl_dyld.xs'; usedl='define';
-cccdlflags=' '; # space, not empty, because otherwise we get -fpic
-lddlflags="${ldflags} -bundle -undefined suppress";
-ldlibpthname='DYLD_LIBRARY_PATH';
-useshrplib='true';
-
-##
-# System libraries
-##
-
-# vfork works
-usevfork='true';
-
-# malloc works
-usemymalloc='n';
diff --git a/contrib/perl5/hints/dcosx.sh b/contrib/perl5/hints/dcosx.sh
deleted file mode 100644
index c1b0d0a..0000000
--- a/contrib/perl5/hints/dcosx.sh
+++ /dev/null
@@ -1,188 +0,0 @@
-# hints/dcosx.sh
-# Last modified: Thu Jan 16 11:38:12 EST 1996
-# Stephen Zander <stephen.zander@interlock.mckesson.com>
-# hints for DC/OSx (Pyramid) & SINIX (Seimens: dc/osx rebadged)
-# Based on the hints/solaris_2.sh file
-
-# See man vfork.
-usevfork=false
-
-d_suidsafe=define
-
-# Avoid all libraries in /usr/ucblib.
-set `echo $glibpth | sed -e 's@/usr/ucblib@@'`
-glibpth="$*"
-
-# Remove bad libraries.
-# -lucb contains incompatible routines.
-set `echo " $libswanted " | sed -e 's@ ucb @ @'`
-libswanted="$*"
-
-# Here's another draft of the perl5/solaris/gcc sanity-checker.
-
-case $PATH in
-*/usr/ucb*:/usr/bin:*|*/usr/ucb*:/usr/bin) cat <<END >&2
-
-NOTE: /usr/ucb/cc does not function properly.
-Remove /usr/ucb from your PATH.
-
-END
-;;
-esac
-
-
-# Check that /dev/fd is mounted. If it is not mounted, let the
-# user know that suid scripts may not work.
-/usr/bin/df /dev/fd 2>&1 > /dev/null
-case $? in
-0) ;;
-*)
- cat <<END >&4
-
-NOTE: Your system does not have /dev/fd mounted. If you want to
-be able to use set-uid scripts you must ask your system administrator
-to mount /dev/fd.
-
-END
- ;;
-esac
-
-
-# See if libucb can be found in /usr/lib. If it is, warn the user
-# that this may cause problems while building Perl extensions.
-/usr/bin/ls /usr/lib/libucb* >/dev/null 2>&1
-case $? in
-0)
- cat <<END >&4
-
-NOTE: libucb has been found in /usr/lib. libucb should reside in
-/usr/ucblib. You may have trouble while building Perl extensions.
-
-END
-;;
-esac
-
-
-# See if make(1) is GNU make(1).
-# If it is, make sure the setgid bit is not set.
-make -v > make.vers 2>&1
-if grep GNU make.vers > /dev/null 2>&1; then
- tmp=`/usr/bin/ksh -c "whence make"`
- case "`/usr/bin/ls -l $tmp`" in
- ??????s*)
- cat <<END >&2
-
-NOTE: Your PATH points to GNU make, and your GNU make has the set-group-id
-bit set. You must either rearrange your PATH to put /usr/ccs/bin before the
-GNU utilities or you must ask your system administrator to disable the
-set-group-id bit on GNU make.
-
-END
- ;;
- esac
-fi
-rm -f make.vers
-
-# If the C compiler is gcc:
-# - check the fixed-includes
-# - check as(1) and ld(1), they should not be GNU
-# If the C compiler is not gcc:
-# - check as(1) and ld(1), they should not be GNU
-# - increase the optimizing level to prevent object size warnings
-#
-# Watch out in case they have not set $cc.
-case "`${cc:-cc} -v 2>&1`" in
-*gcc*)
- #
- # Using gcc.
- #
- #echo Using gcc
-
- # Get gcc to share its secrets.
- echo 'main() { return 0; }' > try.c
- verbose=`${cc:-cc} -v -o try try.c 2>&1`
- rm -f try try.c
- tmp=`echo "$verbose" | grep '^Reading' |
- awk '{print $NF}' | sed 's/specs$/include/'`
-
- # Determine if the fixed-includes look like they'll work.
- # Doesn't work anymore for gcc-2.7.2.
-
- # See if as(1) is GNU as(1). GNU as(1) won't work for this job.
- case $verbose in
- */usr/ccs/bin/as*) ;;
- *)
- cat <<END >&2
-
-NOTE: You are using GNU as(1). GNU as(1) will not build Perl.
-You must arrange to use /usr/ccs/bin/as, perhaps by setting
-GCC_EXEC_PREFIX or by including -B/usr/ccs/bin in your cc command.
-
-END
- ;;
- esac
-
- # See if ld(1) is GNU ld(1). GNU ld(1) won't work for this job.
- case $verbose in
- */usr/ccs/bin/ld*) ;;
- *)
- cat <<END >&2
-
-NOTE: You are using GNU ld(1). GNU ld(1) will not build Perl.
-You must arrange to use /usr/ccs/bin/ld, perhaps by setting
-GCC_EXEC_PREFIX or by including -B/usr/ccs/bin in your cc command.
-
-END
- ;;
- esac
-
- ;; #using gcc
-*)
- optimize='-O -K Olimit:3064'
- #
- # Not using gcc.
- #
- #echo Not using gcc
-
- # See if as(1) is GNU as(1). GNU as(1) won't work for this job.
- case `as --version < /dev/null 2>&1` in
- *GNU*)
- cat <<END >&2
-
-NOTE: You are using GNU as(1). GNU as(1) will not build Perl.
-You must arrange to use /usr/ccs/bin, perhaps by adding it to the
-beginning of your PATH.
-
-END
- ;;
- esac
-
- # See if ld(1) is GNU ld(1). GNU ld(1) won't work for this job.
- case `ld --version < /dev/null 2>&1` in
- *GNU*)
- cat <<END >&2
-
-NOTE: You are using GNU ld(1). GNU ld(1) will not build Perl.
-You must arrange to use /usr/ccs/bin, perhaps by adding it to the
-beginning of your PATH
-
-END
- ;;
- esac
-
- ;; #not using gcc
-esac
-
-# as --version or ld --version might dump core.
-rm -f core
-
-# DC/OSx hides certain functions in a libc that looks dynamic but isn't
-# because of this we reinclude -lc when building dynamic extenstions
-libc='/usr/ccs/lib/libc.so'
-lddlflags='-G -lc'
-
-# DC/OSx gets overenthusiastic with symbol removal when building dynamically
-ccdlflags='-Blargedynsym'
-
-# System malloc is safer when using third part libs
-usemymalloc='n'
diff --git a/contrib/perl5/hints/dec_osf.sh b/contrib/perl5/hints/dec_osf.sh
deleted file mode 100644
index ce3a40c..0000000
--- a/contrib/perl5/hints/dec_osf.sh
+++ /dev/null
@@ -1,422 +0,0 @@
-# hints/dec_osf.sh
-
-# * If you want to debug perl or want to send a
-# stack trace for inclusion into an bug report, call
-# Configure with the additional argument -Doptimize=-g2
-# or uncomment this assignment to "optimize":
-#
-#optimize=-g2
-#
-# If you want both to optimise and debug with the DEC cc
-# you must have -g3, e.g. "-O4 -g3", and (re)run Configure.
-#
-# * gcc can always have both -g and optimisation on.
-#
-# * debugging optimised code, no matter what compiler
-# one is using, can be surprising and confusing because of
-# the optimisation tricks like code motion, code removal,
-# loop unrolling, and inlining. The source code and the
-# executable code simply do not agree any more while in
-# mid-execution, the optimiser only cares about the results.
-#
-# * Configure will automatically add the often quoted
-# -DDEBUGGING for you if the -g is specified.
-#
-# * There is even more optimisation available in the new
-# (GEM) DEC cc: -O5 and -fast. "man cc" will tell more about them.
-# The jury is still out whether either or neither help for Perl
-# and how much. Based on very quick testing, -fast boosts
-# raw data copy by about 5-15% (-fast brings in, among other
-# things, inlined, ahem, fast memcpy()), while on the other
-# hand searching things (index, m//, s///), seems to get slower.
-# Your mileage will vary.
-#
-# * The -std is needed because the following compiled
-# without the -std and linked with -lm
-#
-# #include <math.h>
-# #include <stdio.h>
-# int main(){short x=10,y=sqrt(x);printf("%d\n",y);}
-#
-# will in Digital UNIX 3.* and 4.0b print 0 -- and in Digital
-# UNIX 4.0{,a} dump core: Floating point exception in the printf(),
-# the y has become a signaling NaN.
-#
-# * Compilation warnings like:
-#
-# "Undefined the ANSI standard macro ..."
-#
-# can be ignored, at least while compiling the POSIX extension
-# and especially if using the sfio (the latter is not a standard
-# part of Perl, never mind if it says little to you).
-#
-
-# If using the DEC compiler we must find out the DEC compiler style:
-# the style changed between Digital UNIX (aka DEC OSF/1) 3 and
-# Digital UNIX 4. The old compiler was originally from Ultrix and
-# the MIPS company, the new compiler is originally from the VAX world
-# and it is called GEM. Many of the options we are going to use depend
-# on the compiler style.
-
-cc=${cc:-cc}
-
-# do NOT, I repeat, *NOT* take away the leading tabs
-# Configure Black Magic (TM)
- # reset
- _DEC_cc_style=
-case "`$cc -v 2>&1 | grep cc`" in
-*gcc*) _gcc_version=`$cc --version 2>&1 | tr . ' '`
- set $_gcc_version
- if test "$1" -lt 2 -o \( "$1" -eq 2 -a \( "$2" -lt 95 -o \( "$2" -eq 95 -a "$3" -lt 2 \) \) \); then
- cat >&4 <<EOF
-
-*** Your cc seems to be gcc and its version ($_gcc_version) seems to be
-*** less than 2.95.2. This is not a good idea since old versions of gcc
-*** are known to produce buggy code when compiling Perl (and no doubt for
-*** other programs, too).
-***
-*** Therefore, I strongly suggest upgrading your gcc. (Why don't you use
-*** the vendor cc is also a good question. It comes with the operating
-*** system and produces good code.)
-
-Cannot continue, aborting.
-
-EOF
- exit 1
- fi
- if test "$1" -eq 2 -a "$2" -eq 95 -a "$3" -le 2; then
- cat >&4 <<EOF
-
-*** Note that as of gcc 2.95.2 (19991024) and Perl 5.6.0 (March 2000)
-*** if the said Perl is compiled with the said gcc the lib/sdbm test
-*** may dump core (meaning that the SDBM_File extension is unusable).
-*** As this core dump never happens with the vendor cc, this is most
-*** probably a lingering bug in gcc. Therefore unless you have a better
-*** gcc installation you are still better off using the vendor cc.
-
-Since you explicitly chose gcc, I assume that you know what are doing.
-
-EOF
- fi
- ;;
-*) # compile something small: taint.c is fine for this.
- ccversion=`cc -V | awk '/(Compaq|DEC) C/ {print $3}'`
- # the main point is the '-v' flag of 'cc'.
- case "`cc -v -I. -c taint.c -o taint$$.o 2>&1`" in
- */gemc_cc*) # we have the new DEC GEM CC
- _DEC_cc_style=new
- ;;
- *) # we have the old MIPS CC
- _DEC_cc_style=old
- ;;
- esac
- # cleanup
- rm -f taint$$.o
- ;;
-esac
-
-# be nauseatingly ANSI
-case "`$cc -v 2>&1 | grep gcc`" in
-*gcc*) ccflags="$ccflags -ansi"
- ;;
-*) ccflags="$ccflags -std"
- ;;
-esac
-
-# for gcc the Configure knows about the -fpic:
-# position-independent code for dynamic loading
-
-# we want optimisation
-
-case "$optimize" in
-'') case "`$cc -v 2>&1 | grep gcc`" in
- *gcc*)
- optimize='-O3' ;;
- *) case "$_DEC_cc_style" in
- new) optimize='-O4'
- ccflags="$ccflags -fprm d -ieee"
- ;;
- old) optimize='-O2 -Olimit 3200' ;;
- esac
- ccflags="$ccflags -D_INTRINSICS"
- ;;
- esac
- ;;
-esac
-
-# Make glibpth agree with the compiler suite. Note that /shlib
-# is not here. That's on purpose. Even though that's where libc
-# really lives from V4.0 on, the linker (and /sbin/loader) won't
-# look there by default. The sharable /sbin utilities were all
-# built with "-Wl,-rpath,/shlib" to get around that. This makes
-# no attempt to figure out the additional location(s) searched by
-# gcc, since not all versions of gcc are easily coerced into
-# revealing that information.
-glibpth="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc"
-glibpth="$glibpth /usr/lib /usr/local/lib /var/shlib"
-
-# dlopen() is in libc
-libswanted="`echo $libswanted | sed -e 's/ dl / /'`"
-
-# libPW contains nothing useful for perl
-libswanted="`echo $libswanted | sed -e 's/ PW / /'`"
-
-# libnet contains nothing useful for perl here, and doesn't work
-libswanted="`echo $libswanted | sed -e 's/ net / /'`"
-
-# libbsd contains nothing used by perl that is not already in libc
-libswanted="`echo $libswanted | sed -e 's/ bsd / /'`"
-
-# libc need not be separately listed
-libswanted="`echo $libswanted | sed -e 's/ c / /'`"
-
-# ndbm is already in libc
-libswanted="`echo $libswanted | sed -e 's/ ndbm / /'`"
-
-# the basic lddlflags used always
-lddlflags='-shared -expect_unresolved "*"'
-
-# Fancy compiler suites use optimising linker as well as compiler.
-# <spider@Orb.Nashua.NH.US>
-case "`uname -r`" in
-*[123].*) # old loader
- lddlflags="$lddlflags -O3"
- ;;
-*) if $test "X$optimize" = "X$undef"; then
- lddlflags="$lddlflags -msym"
- else
- case "`/usr/sbin/sizer -v`" in
- *4.0D*)
- # QAR 56761: -O4 + .so may produce broken code,
- # fixed in 4.0E or better.
- ;;
- *)
- lddlflags="$lddlflags $optimize"
- ;;
- esac
- # -msym: If using a sufficiently recent /sbin/loader,
- # keep the module symbols with the modules.
- lddlflags="$lddlflags -msym -std"
- fi
- ;;
-esac
-# Yes, the above loses if gcc does not use the system linker.
-# If that happens, let me know about it. <jhi@iki.fi>
-
-
-# If debugging or (old systems and doing shared)
-# then do not strip the lib, otherwise, strip.
-# As noted above the -DDEBUGGING is added automagically by Configure if -g.
-case "$optimize" in
- *-g*) ;; # left intentionally blank
-*) case "`uname -r`" in
- *[123].*)
- case "$useshrplib" in
- false|undef|'') lddlflags="$lddlflags -s" ;;
- esac
- ;;
- *) lddlflags="$lddlflags -s"
- ;;
- esac
- ;;
-esac
-
-#
-# Make embedding in things like INN and Apache more memory friendly.
-# Keep it overridable on the Configure command line, though, so that
-# "-Uuseshrplib" prevents this default.
-#
-
-case "$_DEC_cc_style.$useshrplib" in
- new.) useshrplib="$define" ;;
-esac
-
-# The EFF_ONLY_OK from <sys/access.h> is present but dysfunctional for
-# [RWX]_OK as of Digital UNIX 4.0[A-D]?. If and when this gets fixed,
-# please adjust this appropriately. See also pp_sys.c just before the
-# emulate_eaccess().
-
-# Fixed in V5.0A.
-case "`/usr/sbin/sizer -v`" in
-*5.0[A-Z]*|*5.[1-9]*|*[6-9].[0-9]*)
- : ok
- ;;
-*)
-# V5.0 or previous
-pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
- ;;
-esac
-
-# The off_t is already 8 bytes, so we do have largefileness.
-
-cat > UU/usethreads.cbu <<'EOCBU'
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-case "$usethreads" in
-$define|true|[yY]*)
- # Threads interfaces changed with V4.0.
- case "`$cc -v 2>&1 | grep gcc`" in
- *gcc*)ccflags="-D_REENTRANT $ccflags" ;;
- *) case "`uname -r`" in
- *[123].*) ccflags="-threads $ccflags" ;;
- *) ccflags="-pthread $ccflags" ;;
- esac
- ;;
- esac
- case "`uname -r`" in
- *[123].*) libswanted="$libswanted pthreads mach exc c_r" ;;
- *) libswanted="$libswanted pthread exc" ;;
- esac
-
- case "$usemymalloc" in
- '')
- usemymalloc='n'
- ;;
- esac
- ;;
-esac
-EOCBU
-
-cat > UU/uselongdouble.cbu <<'EOCBU'
-# This script UU/uselongdouble.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use long doubles.
-case "$uselongdouble" in
-$define|true|[yY]*) d_Gconvert='sprintf((b),"%.*Lg",(n),(x))' ;;
-esac
-EOCBU
-
-#
-# Unset temporary variables no more needed.
-#
-
-unset _DEC_cc_style
-
-#
-# History:
-#
-# perl5.005_51:
-#
-# September-1998 Jarkko Hietaniemi <jhi@iki.fi>
-#
-# * Added the -DNO_EFF_ONLY_OK flag ('use filetest;' support).
-#
-# perl5.004_57:
-#
-# 19-Dec-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
-#
-# * Newer Digital UNIX compilers enforce signaling for NaN without
-# -ieee. Added -fprm d at the same time since it's friendlier for
-# embedding.
-#
-# * Fixed the library search path to match cc, ld, and /sbin/loader.
-#
-# * Default to building -Duseshrplib on newer systems. -Uuseshrplib
-# still overrides.
-#
-# * Fix -pthread additions for useshrplib. ld has no -pthread option.
-#
-#
-# perl5.004_04:
-#
-# 19-Sep-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
-#
-# * libnet on Digital UNIX is for JAVA, not for sockets.
-#
-#
-# perl5.003_28:
-#
-# 22-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
-#
-# * Restructuring Spider's suggestions.
-#
-# * Older Digital UNIXes cannot handle -Olimit ... for $lddlflags.
-#
-# * ld -s cannot be used in older Digital UNIXes when doing shared.
-#
-#
-# 21-Feb-1997 Spider Boardman <spider@Orb.Nashua.NH.US>
-#
-# * -hidden removed.
-#
-# * -DSTANDARD_C removed.
-#
-# * -D_INTRINSICS added. (that -fast does not seem to buy much confirmed)
-#
-# * odbm not in libc, only ndbm. Therefore dbm back to $libswanted.
-#
-# * -msym for the newer runtime loaders.
-#
-# * $optimize also in $lddflags.
-#
-#
-# perl5.003_27:
-#
-# 18-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
-#
-# * unset _DEC_cc_style and more commentary on -std.
-#
-#
-# perl5.003_26:
-#
-# 15-Feb-1997 Jarkko Hietaniemi <jhi@iki.fi>
-#
-# * -std and -ansi.
-#
-#
-# perl5.003_24:
-#
-# 30-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
-#
-# * Fixing the note on -DDEBUGGING.
-#
-# * Note on -O5 -fast.
-#
-#
-# perl5.003_23:
-#
-# 26-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
-#
-# * Notes on how to do both optimisation and debugging.
-#
-#
-# 25-Jan-1997 Jarkko Hietaniemi <jhi@iki.fi>
-#
-# * Remove unneeded libraries from $libswanted: PW, bsd, c, dbm
-#
-# * Restructure the $lddlflags build.
-#
-# * $optimize based on which compiler we have.
-#
-#
-# perl5.003_22:
-#
-# 23-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
-#
-# * Added comments 'how to create a debugging version of perl'
-#
-# * Fixed logic of this script to prevent stripping of shared
-# objects by the loader (see ld man page for -s) is debugging
-# is set via the -g switch.
-#
-#
-# 21-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
-#
-# * now 'dl' is always removed from libswanted. Not only if
-# optimize is an empty string.
-#
-#
-# 17-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
-#
-# * Removed 'dl' from libswanted: When the FreePort binary
-# translator for Sun binaries is installed Configure concludes
-# that it should use libdl.x.yz.fpx.so :-(
-# Because the dlopen, dlclose,... calls are in the
-# C library it not necessary at all to check for the
-# dl library. Therefore dl is removed from libswanted.
-#
-#
-# 1-Jan-1997 Achim Bohnet <ach@rosat.mpe-garching.mpg.de>
-#
-# * Set -Olimit to 3200 because perl_yylex.c got too big
-# for the optimizer.
-#
diff --git a/contrib/perl5/hints/dgux.sh b/contrib/perl5/hints/dgux.sh
deleted file mode 100644
index 9a6f7a4..0000000
--- a/contrib/perl5/hints/dgux.sh
+++ /dev/null
@@ -1,136 +0,0 @@
-# $Id: dgux.sh,v 1.8 1996-11-29 18:16:43-05 roderick Exp $
-
-# This is a hints file for DGUX, which is Data General's Unix. It was
-# originally developed with version 5.4.3.10 of the OS, and then was
-# later updated running under version 4.11.2 (running on m88k hardware).
-# The gross features should work with versions going back to 2.nil but
-# some tweaking will probably be necessary.
-#
-# DGUX is a SVR4 derivative. It ships with gcc as the standard
-# compiler. Since version 3.0 it has shipped with Perl 4.036
-# installed in /usr/bin, which is kind of neat. Be careful when you
-# install that you don't overwrite the system version, though (by
-# answering yes to the question about installing perl as /usr/bin/perl),
-# as it would suck to try to get support if the vendor learned that you
-# were physically replacing the system binaries.
-#
-# -Roderick Schertler <roderick@argon.org>
-
-# Here are the things from some old DGUX hints files which are different
-# from what's in here now. I don't know the exact reasons that most of
-# these settings were in the hints files, presumably they can be chalked
-# up to old Configure inadequacies and changes in the OS headers and the
-# like. These settings might make a good place to start looking if you
-# have problems.
-#
-# This was specified the the 4.036 hints file. That hints file didn't
-# say what version of the OS it was developed using.
-#
-# cppstdin='/lib/cpp'
-#
-# The 4.036 and 5.001 hints files both contained these. The 5.001 hints
-# file said it was developed with version 2.01 of DGUX.
-#
-# gidtype='gid_t'
-# groupstype='gid_t'
-# uidtype='uid_t'
-# d_index='define'
-# cc='gcc'
-#
-# These were peculiar to the 5.001 hints file.
-#
-# ccflags='-D_POSIX_SOURCE -D_DGUX_SOURCE'
-#
-# # an ugly hack, since the Configure test for "gcc -P -" hangs.
-# # can't just use 'cppstdin', since our DG has a broken cppstdin :-(
-# cppstdin=`cd ..; pwd`/cppstdin
-# cpprun=`cd ..; pwd`/cppstdin
-#
-# One last note: The 5.001 hints file said "you don't want to use
-# /usr/ucb/cc" in the place at which it set cc to gcc. That in
-# particular baffles me, as I used to have 2.01 loaded and my memory
-# is telling me that even then /usr/ucb was a symlink to /usr/bin.
-
-
-# The standard system compiler is gcc, but invoking it as cc changes its
-# behavior. I have to pick one name or the other so I can get the
-# dynamic loading switches right (they vary depending on this). I'm
-# picking gcc because there's no way to get at the optimization options
-# and so on when you call it cc.
-case $cc in
- '')
- cc=gcc
- case $optimize in
- '') optimize=-O2;;
- esac
- ;;
-esac
-
-usevfork=true
-
-# DG has this thing set up with symlinks which point to different places
-# depending on environment variables (see elink(5)) and the compiler and
-# related tools use them to access different development environments
-# (COFF, ELF, m88k BCS and so on), see sde(5). The upshot, however, is
-# that when a normal program tries to access one of these elinks it sees
-# no such file (like stat()ting a mis-directed symlink). Setting
-# $plibpth to explicitly include the place to which the elinks point
-# allows Configure to find libraries which vary based on the development
-# environment.
-#
-# Starting with version 4.10 (the first time the OS supported Intel
-# hardware) all libraries are accessed with this mechanism.
-#
-# The default $TARGET_BINARY_INTERFACE changed with version 4.10. The
-# system now comes with a link named /usr/sde/default which points to
-# the proper entry, but older versions lacked this and used m88kdgux
-# directly.
-
-: && sde_path=${SDE_PATH:-/usr}/sde # hide from Configure
-while : # dummy loop
-do
- if [ -n "$TARGET_BINARY_INTERFACE" ]
- then set X "$TARGET_BINARY_INTERFACE"
- else set X default dg m88k_dg ix86_dg m88kdgux m88kdguxelf
- fi
- shift
- default_sde=$1
- for sde
- do
- [ -d "$sde_path/$sde" ] && break 2
- done
- cat <<END >&2
-
-NOTE: I can't figure out what SDE is used by default on this machine (I
-didn't find a likely directory under $sde_path). This is bad news. If
-this is a R4.10 or newer system I'm not going to be able to find any of
-your libraries, if this system is R3.10 or older I won't be able to find
-the math library. You should re-run Configure with the environment
-variable TARGET_BINARY_INTERFACE set to the proper value for this
-machine, see sde(5) and the notes in hints/dgux.sh.
-
-END
- sde=$default_sde
- break
-done
-
-plibpth="$plibpth $sde_path/$sde/usr/lib"
-unset sde_path default_sde sde
-
-# Many functions (eg, gethostent(), killpg(), getpriority(), setruid()
-# dbm_*(), and plenty more) are defined in -ldgc. Usually you don't
-# need to know this (it seems that libdgc.so is searched automatically
-# by ld), but Configure needs to check it otherwise it will report all
-# those functions as missing.
-libswanted="dgc $libswanted"
-
-# Dynamic loading works using the dlopen() functions. Note that dlfcn.h
-# used to be broken, it declared _dl*() rather than dl*(). This was the
-# case up to 3.10, it has been fixed in 4.11. I'm not sure if it was
-# fixed in 4.10. If you have the older header just ignore the warnings
-# (since pointers and integers have the same format on m88k).
-usedl=true
-# For cc rather than gcc the flags would be `-K PIC' for compiling and
-# -G for loading. I haven't tested this.
-cccdlflags=-fpic
-lddlflags=-shared
diff --git a/contrib/perl5/hints/dos_djgpp.sh b/contrib/perl5/hints/dos_djgpp.sh
deleted file mode 100644
index ebbd786..0000000
--- a/contrib/perl5/hints/dos_djgpp.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-# hints file for dos/djgpp v2.xx
-# Original by Laszlo Molnar <molnarl@cdata.tvnet.hu>
-
-# 971015 - archname changed from 'djgpp' to 'dos-djgpp'
-# 971210 - threads support
-# 000222 - added -DPERL_EXTERNAL_GLOB to ccflags
-
-archname='dos-djgpp'
-archobjs='djgpp.o'
-path_sep=\;
-startsh="#! /bin/sh"
-
-cc='gcc'
-ld='gcc'
-usrinc="$DJDIR/include"
-
-libpth="$DJDIR/lib"
-libc="$libpth/libc.a"
-
-so='none'
-usedl='n'
-
-firstmakefile='GNUmakefile'
-exe_ext='.exe'
-
-randbits=31
-lns='cp'
-
-usenm='true'
-
-# this reportedly causes compile errors in system includes
-i_ieeefp='undef'
-
-d_link='undef' # these are empty functions in libc.a
-d_symlink='undef'
-d_fork='undef'
-d_pipe='undef'
-
-startperl='#!perl'
-
-case "X$optimize" in
- X)
- optimize="-O2 -malign-loops=2 -malign-jumps=2 -malign-functions=2"
- ldflags='-s'
- ;;
- X*)
- ldflags=' '
- ;;
-esac
-ccflags="$ccflags -DPERL_EXTERNAL_GLOB"
-usemymalloc='n'
-timetype='time_t'
-
-prefix=$DJDIR
-privlib=$prefix/lib/perl5
-archlib=$privlib
-sitelib=$privlib/site
-sitearch=$sitelib
-
-eagain='EAGAIN'
-rd_nodata='-1'
-
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
-case "$usethreads" in
-$define|true|[yY]*)
- set `echo X "$libswanted "| sed -e 's/ c / gthreads c /'`
- shift
- libswanted="$*"
- ;;
-esac
-EOCBU
diff --git a/contrib/perl5/hints/dynix.sh b/contrib/perl5/hints/dynix.sh
deleted file mode 100644
index 4bdb804..0000000
--- a/contrib/perl5/hints/dynix.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-# If this doesn't work, try specifying 'none' for hints.
-d_castneg=undef
-libswanted=`echo $libswanted | sed -e 's/socket /socket seq /'`
-
-# Reported by Craig Milo Rogers <Rogers@ISI.EDU>
-# Date: Tue, 30 Jan 96 15:29:26 PST
-d_casti32=undef
diff --git a/contrib/perl5/hints/dynixptx.sh b/contrib/perl5/hints/dynixptx.sh
deleted file mode 100644
index 11c6b5b..0000000
--- a/contrib/perl5/hints/dynixptx.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-# Sequent Dynix/Ptx v. 4 hints
-# Created 1996/03/15 by Brad Howerter, bhower@wgc.woodward.com
-
-# Modified 1998/11/10 by Martin J. Bligh, mbligh@sequent.com
-# to incorporate work done by Kurtis D. Rader & myself.
-
-# Use Configure -Dcc=gcc to use gcc.
-
-# cc wants -G for dynamic loading
-lddlflags='-G'
-
-# Remove inet to avoid this error in Configure, which causes Configure
-# to be unable to figure out return types:
-# dynamic linker: ./ssize: can't find libinet.so,
-# link with -lsocket instead of -linet
-
-libswanted=`echo $libswanted | sed -e 's/ inet / /'`
-
-# Configure defaults to usenm='y', which doesn't work very well
-usenm='n'
-
-# removed d_vfork='define'; we can't use it any more ...
-
-case "$optimize" in
-'') optimize='-Wc,-O3 -W0,-xstring' ;;
-esac
-
-# We override d_socket because it's very hard for Configure to get it right
-# in Dynix/Ptx, for several reasons.
-# (1) the socket interface is in libsocket.so -- this wouldn't be so hard
-# for Configure to fathom...but it gets more tangled.
-# (2) if the system has been patched there can be libsocket.so.1.FOO.BAR,
-# the FOO.BAR being the old version of the system before the patching.
-# Configure picks up the old broken version.
-# (3) libsocket.so points to either libsocket.so.1 (v4.2)
-# or libsocket.so.1.1 (v4.4) The socket call in libsocket.so.1.1
-# (BSD socket library) is called bsd_socket(), and has a macro wrapper
-# to hide this.
-# This information kindly provided by Martin J. Bligh of Sequent.
-# As he puts it:
-# "Sequent has unusual capabilities, taking it above and beyond
-# the complexity of any other vendor" :-)
-#
-# Jarkko Hietaniemi November 1998
-
-case "$osvers" in
-4.4*) # configure doesn't find sockets, as they're in libsocket, not libc
- d_socket='define'
- d_oldsock='undef'
- d_sockpair='define'
- ;;
-4.2*) # on ptx/TCP 4.2, we can use BSD sockets, but they're not the default.
- cppflags="$cppflags -Wc,+bsd-socket"
- ccflags="$ccflags -Wc,+bsd-socket"
- ldflags="$ldflags -Wc,+bsd-socket"
- d_socket='define'
- d_oldsock='undef'
- d_sockpair='define'
- ;;
-esac
diff --git a/contrib/perl5/hints/epix.sh b/contrib/perl5/hints/epix.sh
deleted file mode 100644
index dcad3c5..0000000
--- a/contrib/perl5/hints/epix.sh
+++ /dev/null
@@ -1,66 +0,0 @@
-# epix.sh
-# Hint file for EP/IX on CDC RISC boxes.
-#
-# From: Stanley Donald Capelik <sd9sdc@hp100.den.mmc.com>
-# Modified by Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Last modified: Mon May 8 15:29:18 EDT 1995
-#
-# This hint file appears to be based on the svr4 hints for perl5.000,
-# with some CDC-specific additions. I've tried to updated it to
-# match the 5.001 svr4 hints, which allow for dynamic loading,
-# but I have no way of testing the resulting file.
-#
-# There were also some contradictions that I've tried to straighten
-# out, but I'm not sure I got them all right.
-#
-# Edit config.sh to change shmattype from 'char *' to 'void *'"
-
-# Use Configure -Dcc=gcc to use gcc.
-case "$cc" in
-'') cc='/bin/cc3.11'
- test -f $cc || cc='/usr/ccs/bin/cc'
- ;;
-esac
-
-usrinc='/svr4/usr/include'
-
-# Various things that Configure apparently doesn't get right.
-strings='/svr4/usr/include/string.h'
-timeincl='/svr4/usr/include/sys/time.h '
-libc='/svr4/usr/lib/libc.a'
-glibpth="/svr4/usr/lib /svr4/usr/lib/cmplrs/cc /usr/ccs/lib /svr4/lib /svr4/usr/ucblib $glibpth"
-osname='epix2'
-archname='epix2'
-d_suidsafe='define' # "./Configure -d" can't figure this out easilly
-d_flock='undef'
-
-# Old version had this, but I'm not sure why since the old version
-# also mucked around with libswanted. This is also definitely wrong
-# if the user is trying to use DB_File or GDBM_File.
-# libs='-lsocket -lnsl -ldbm -ldl -lc -lcrypt -lm -lucb'
-
-# We include support for using libraries in /usr/ucblib, but the setting
-# of libswanted excludes some libraries found there. You may want to
-# prevent "ucb" from being removed from libswanted and see if perl will
-# build on your system.
-ldflags="$ldflags -non_shared -systype svr4 -L/svr4/usr/lib -L/svr4/usr/lib/cmplrs/cc -L/usr/ccs/lib -L/svr4/usr/ucblib"
-ccflags="$ccflags -systype svr4 -D__STDC__=0 -I/svr4/usr/include -I/svr4/usr/ucbinclude"
-cppflags="$ccflags -D__STDC__=0 -I/svr4/usr/include -I/svr4/usr/ucbinclude"
-
-# Don't use problematic libraries:
-
-libswanted=`echo " $libswanted " | sed -e 's/ malloc / /'` # -e 's/ ucb / /'`
-# libmalloc.a - Probably using Perl's malloc() anyway.
-# libucb.a - Remove it if you have problems ld'ing. We include it because
-# it is needed for ODBM_File and NDBM_File extensions.
-if [ -r /usr/ucblib/libucb.a ]; then # If using BSD-compat. library:
- # Use the "native" counterparts, not the BSD emulation stuff:
- d_bcmp='undef'; d_bcopy='undef'; d_bzero='undef'; d_safebcpy='undef'
- d_index='undef'; d_killpg='undef'; d_getprior='undef'; d_setprior='undef'
- d_setlinebuf='undef'; d_setregid='undef'; d_setreuid='undef'
-fi
-
-lddlflags="-G $ldflags" # Probably needed for dynamic loading
-# We _do_ want the -L paths in ldflags, but we don't want the -non_shared.
-lddlflags=`echo $lddlflags | sed 's/-non_shared//'`
-
diff --git a/contrib/perl5/hints/esix4.sh b/contrib/perl5/hints/esix4.sh
deleted file mode 100644
index b1d697c..0000000
--- a/contrib/perl5/hints/esix4.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-# hints/esix4.sh
-# Original esix4 hint file courtesy of
-# Kevin O'Gorman ( kevin@kosman.UUCP, kevin%kosman.uucp@nrc.com )
-#
-# Use Configure -Dcc=gcc to use gcc.
-
-# Why can't we just use PATH? It contains /usr/ccs/bin.
-case "$cc" in
-'') cc='/bin/cc'
- test -f $cc || cc='/usr/ccs/bin/cc'
- ;;
-esac
-
-ldflags="$ldflags -L/usr/ccs/lib -L/usr/ucblib"
-test -d /usr/local/man || mansrc='none'
-# Do we really need to tell cc to look in /usr/include?
-ccflags="$ccflags -I/usr/include -I/usr/ucbinclude"
-libswanted=`echo " $libswanted " | sed -e 's/ malloc / /' `
-d_index='undef'
-d_suidsafe=define
-usevfork='false'
-if test "$osvers" = "3.0"; then
- d_gconvert='undef'
- grep 'define[ ]*AF_OSI[ ]' /usr/include/sys/socket.h | grep '/\*[^*]*$' >esix$$
- if test -s esix$$; then
- cat <<EOM >&2
-
-WARNING: You are likely to have problems compiling the Socket extension
-unless you fix the unterminated comment for AF_OSI in the file
-/usr/include/sys/socket.h.
-
-EOM
- fi
- rm -f esix$$
-fi
-
diff --git a/contrib/perl5/hints/fps.sh b/contrib/perl5/hints/fps.sh
deleted file mode 100644
index 7726790..0000000
--- a/contrib/perl5/hints/fps.sh
+++ /dev/null
@@ -1 +0,0 @@
-ccflags="$ccflags -J"
diff --git a/contrib/perl5/hints/freebsd.sh b/contrib/perl5/hints/freebsd.sh
deleted file mode 100644
index ef40999..0000000
--- a/contrib/perl5/hints/freebsd.sh
+++ /dev/null
@@ -1,234 +0,0 @@
-# $FreeBSD$
-# Original based on info from
-# Carl M. Fongheiser <cmf@ins.infonet.net>
-# Date: Thu, 28 Jul 1994 19:17:05 -0500 (CDT)
-#
-# Additional 1.1.5 defines from
-# Ollivier Robert <Ollivier.Robert@keltia.frmug.fr.net>
-# Date: Wed, 28 Sep 1994 00:37:46 +0100 (MET)
-#
-# Additional 2.* defines from
-# Ollivier Robert <Ollivier.Robert@keltia.frmug.fr.net>
-# Date: Sat, 8 Apr 1995 20:53:41 +0200 (MET DST)
-#
-# Additional 2.0.5 and 2.1 defined from
-# Ollivier Robert <Ollivier.Robert@keltia.frmug.fr.net>
-# Date: Fri, 12 May 1995 14:30:38 +0200 (MET DST)
-#
-# Additional 2.2 defines from
-# Mark Murray <mark@grondar.za>
-# Date: Wed, 6 Nov 1996 09:44:58 +0200 (MET)
-#
-# Modified to ensure we replace -lc with -lc_r, and
-# to put in place-holders for various specific hints.
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Date: Tue Mar 10 16:07:00 EST 1998
-#
-# Support for FreeBSD/ELF
-# Ollivier Robert <roberto@keltia.freenix.fr>
-# Date: Wed Sep 2 16:22:12 CEST 1998
-#
-# The two flags "-fpic -DPIC" are used to indicate a
-# will-be-shared object. Configure will guess the -fpic, (and the
-# -DPIC is not used by perl proper) but the full define is included to
-# be consistent with the FreeBSD general shared libs building process.
-#
-# setreuid and friends are inherently broken in all versions of FreeBSD
-# before 2.1-current (before approx date 4/15/95). It is fixed in 2.0.5
-# and what-will-be-2.1
-#
-
-case "$osvers" in
-0.*|1.0*)
- usedl="$undef"
- ;;
-1.1*)
- malloctype='void *'
- groupstype='int'
- d_setregid='undef'
- d_setreuid='undef'
- d_setrgid='undef'
- d_setruid='undef'
- ;;
-2.0-release*)
- d_setregid='undef'
- d_setreuid='undef'
- d_setrgid='undef'
- d_setruid='undef'
- ;;
-#
-# Trying to cover 2.0.5, 2.1-current and future 2.1/2.2
-# It does not covert all 2.1-current versions as the output of uname
-# changed a few times.
-#
-# Even though seteuid/setegid are available, they've been turned off
-# because perl isn't coded with saved set[ug]id variables in mind.
-# In addition, a small patch is requried to suidperl to avoid a security
-# problem with FreeBSD.
-#
-2.0.5*|2.0-built*|2.1*)
- usevfork='true'
- usemymalloc='n'
- d_setregid='define'
- d_setreuid='define'
- d_setegid='undef'
- d_seteuid='undef'
- test -r ./broken-db.msg && . ./broken-db.msg
- ;;
-#
-# 2.2 and above have phkmalloc(3).
-# don't use -lmalloc (maybe there's an old one from 1.1.5.1 floating around)
-2.2*)
- usevfork='true'
- usemymalloc='n'
- libswanted=`echo $libswanted | sed 's/ malloc / /'`
- d_setregid='define'
- d_setreuid='define'
- d_setegid='undef'
- d_seteuid='undef'
- ;;
-*) usevfork='true'
- usemymalloc='n'
- libswanted=`echo $libswanted | sed 's/ malloc / /'`
- ;;
-esac
-
-# Dynamic Loading flags have not changed much, so they are separated
-# out here to avoid duplicating them everywhere.
-case "$osvers" in
-0.*|1.0*) ;;
-
-1*|2*) cccdlflags='-DPIC -fpic'
- lddlflags="-Bshareable $lddlflags"
- ;;
-
-*)
- objformat=`/usr/bin/objformat`
- if [ x$objformat = xelf ]; then
- libpth="/usr/lib /usr/local/lib"
- glibpth="/usr/lib /usr/local/lib"
- ldflags="-Wl,-E "
- lddlflags="-shared "
- else
- if [ -e /usr/lib/aout ]; then
- libpth="/usr/lib/aout /usr/local/lib /usr/lib"
- glibpth="/usr/lib/aout /usr/local/lib /usr/lib"
- fi
- lddlflags='-Bshareable'
- fi
- cccdlflags='-DPIC -fpic'
- ;;
-esac
-
-case "$osvers" in
-0*|1*|2*|3*) ;;
-
-*)
- if /usr/bin/file -L /usr/lib/libc.so | /usr/bin/grep -vq "not stripped" ; then
- usenm=false
- fi
- ;;
-esac
-
-cat <<'EOM' >&4
-
-Some users have reported that Configure halts when testing for
-the O_NONBLOCK symbol with a syntax error. This is apparently a
-sh error. Rerunning Configure with ksh apparently fixes the
-problem. Try
- ksh Configure [your options]
-
-EOM
-
-# From: Anton Berezin <tobez@plab.ku.dk>
-# To: perl5-porters@perl.org
-# Subject: [PATCH 5.005_54] Configure - hints/freebsd.sh signal handler type
-# Date: 30 Nov 1998 19:46:24 +0100
-# Message-ID: <864srhhvcv.fsf@lion.plab.ku.dk>
-
-signal_t='void'
-d_voidsig='define'
-
-# set libperl.so.X.X for 2.2.X
-case "$osvers" in
-2.2*)
- # unfortunately this code gets executed before
- # the equivalent in the main Configure so we copy a little
- # from Configure XXX Configure should be fixed.
- if $test -r $src/patchlevel.h;then
- patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $src/patchlevel.h`
- subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $src/patchlevel.h`
- else
- patchlevel=0
- subversion=0
- fi
- libperl="libperl.so.$patchlevel.$subversion"
- unset patchlevel
- unset subversion
- ;;
-esac
-
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
-case "$usethreads" in
-$define|true|[yY]*)
- lc_r=`/sbin/ldconfig -r|grep ':-lc_r'|awk '{print $NF}'|tail -1`
- case "$osvers" in
- 0*|1*|2.0*|2.1*) cat <<EOM >&4
-I did not know that FreeBSD $osvers supports POSIX threads.
-
-Feel free to tell perlbug@perl.org otherwise.
-EOM
- exit 1
- ;;
-
- 2.2.[0-7]*)
- cat <<EOM >&4
-POSIX threads are not supported well by FreeBSD $osvers.
-
-Please consider upgrading to at least FreeBSD 2.2.8,
-or preferably to the most recent -RELEASE or -STABLE
-version (see http://www.freebsd.org/releases/).
-
-(While 2.2.7 does have pthreads, it has some problems
- with the combination of threads and pipes and therefore
- many Perl tests will either hang or fail.)
-EOM
- exit 1
- ;;
-
- *)
- if [ ! -r "$lc_r" ]; then
- cat <<EOM >&4
-POSIX threads should be supported by FreeBSD $osvers --
-but your system is missing the shared libc_r.
-(/sbin/ldconfig -r doesn't find any).
-
-Consider using the latest STABLE release.
-EOM
- exit 1
- fi
- ldflags="-pthread $ldflags"
- ;;
-
- esac
-
- set `echo X "$libswanted "| sed -e 's/ c / c_r /'`
- shift
- libswanted="$*"
- # Configure will probably pick the wrong libc to use for nm scan.
- # The safest quick-fix is just to not use nm at all...
- usenm=false
-
- case "$osvers" in
- 2.2.8*)
- # ... but this does not apply for 2.2.8 - we know it's safe
- libc="$lc_r"
- usenm=true
- ;;
- esac
-
- unset lc_r
-esac
-EOCBU
diff --git a/contrib/perl5/hints/genix.sh b/contrib/perl5/hints/genix.sh
deleted file mode 100644
index 16b6879..0000000
--- a/contrib/perl5/hints/genix.sh
+++ /dev/null
@@ -1 +0,0 @@
-i_varargs=undef
diff --git a/contrib/perl5/hints/gnu.sh b/contrib/perl5/hints/gnu.sh
deleted file mode 100644
index 927bcea..0000000
--- a/contrib/perl5/hints/gnu.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-# hints/gnu.sh
-# Last modified: Thu Dec 10 20:47:28 CET 1998
-# Mark Kettenis <kettenis@phys.uva.nl>
-
-# libnsl is unusable on the Hurd.
-# XXX remove this once SUNRPC is implemented.
-set `echo X "$libswanted "| sed -e 's/ nsl / /'`
-shift
-libswanted="$*"
-
-case "$optimize" in
-'') optimize='-O2' ;;
-esac
-
-# Flags needed to produce shared libraries.
-lddlflags='-shared'
-
-# Flags needed by programs that use dynamic linking.
-ccdlflags='-Wl,-E'
-
-# The following routines are only available as stubs in GNU libc.
-# XXX remove this once metaconf detects the GNU libc stubs.
-d_msgctl='undef'
-d_msgget='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_semctl='undef'
-d_semget='undef'
-d_semop='undef'
-d_shmat='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
diff --git a/contrib/perl5/hints/greenhills.sh b/contrib/perl5/hints/greenhills.sh
deleted file mode 100644
index da6fcc9..0000000
--- a/contrib/perl5/hints/greenhills.sh
+++ /dev/null
@@ -1 +0,0 @@
-ccflags="$ccflags -X18"
diff --git a/contrib/perl5/hints/hpux.sh b/contrib/perl5/hints/hpux.sh
deleted file mode 100644
index 464f301..0000000
--- a/contrib/perl5/hints/hpux.sh
+++ /dev/null
@@ -1,442 +0,0 @@
-#! /bin/sh
-
-# hints/hpux.sh
-# Perl Configure hints file for Hewlett-Packard's HP-UX 9.x and 10.x
-# (Hopefully, 7.x through 11.x.)
-#
-# This file is based on hints/hpux_9.sh, Perl Configure hints file for
-# Hewlett Packard HP-UX 9.x
-#
-# Use Configure -Dcc=gcc to use gcc.
-#
-# From: Jeff Okamoto <okamoto@corp.hp.com>
-# and
-# hints/hpux_10.sh, Perl Configure hints file for Hewlett Packard HP-UX 10.x
-# From: Giles Lean <giles@nemeton.com.au>
-# and
-# Use #define CPU_* instead of comments for >= 10.x.
-# Support PA1.2 under 10.x.
-# Distinguish between PA2.0, PA2.1, etc.
-# Distinguish between MC68020, MC68030, MC68040
-# Don't assume every OS != 10 is < 10, (e.g., 11).
-# From: Chuck Phillips <cdp@fc.hp.com>
-# HP-UX 10 pthreads hints: Matthew T Harden <mthard@mthard1.monsanto.com>
-# From: Dominic Dunlop <domo@computer.org>
-# Abort and offer advice if bundled (non-ANSI) C compiler selected
-# From: H.Merijn Brand <h.m.brand@hccnet.nl>
-# ccversion detection
-# perl/64/HP-UX wants libdb-3.0 to be shared ELF 64
-# generic pthread support detection for PTH package
-
-
-# This version: March 8, 2000
-# Current maintainer: Jeff Okamoto <okamoto@corp.hp.com>
-
-#--------------------------------------------------------------------
-# Use Configure -Dcc=gcc to use gcc.
-# Use Configure -Dprefix=/usr/local to install in /usr/local.
-#
-# You may have dynamic loading problems if the environment variable
-# LDOPTS='-a archive'. Under >= 10.x, you can instead LDOPTS='-a
-# archive_shared' to prefer archive libraries without requiring them.
-# Regardless of HPUX release, in the "libs" variable or the ext.libs
-# file, you can always give explicit path names to archive libraries
-# that may not exist on the target machine. E.g., /usr/lib/libndbm.a
-# instead of -lndbm. See also note below on ndbm.
-#
-# ALSO, bear in mind that gdbm and Berkely DB contain incompatible
-# replacements for ndbm (and dbm) routines. If you want concurrent
-# access to ndbm files, you need to make sure libndbm is linked in
-# *before* gdbm and Berkely DB. Lastly, remember to check the
-# "ext.libs" file which is *probably* messing up the order. Often,
-# you can replace ext.libs with an empty file to fix the problem.
-#
-# If you get a message about "too much defining", as may happen
-# in HPUX < 10, you might have to append a single entry to your
-# ccflags: '-Wp,-H256000'
-# NOTE: This is a single entry (-W takes the argument 'p,-H256000').
-#--------------------------------------------------------------------
-
-# Turn on the _HPUX_SOURCE flag to get many of the HP add-ons
-# regardless of compiler. For the HP ANSI C compiler, you may also
-# want to include +e to enable "long long" and "long double".
-#
-# HP compiler flags to include (if at all) *both* as part of ccflags
-# and cc itself so Configure finds (and builds) everything
-# consistently:
-# -Aa -D_HPUX_SOURCE +e
-#
-# Lastly, you may want to include the "-z" HP linker flag so that
-# reading from a NULL pointer causes a SEGV.
-ccflags="$ccflags -D_HPUX_SOURCE"
-
-# Check if you're using the bundled C compiler. This compiler doesn't support
-# ANSI C (the -Aa flag) and so is not suitable for perl 5.5 and later.
-case "$cc" in
-'') if cc $ccflags -Aa 2>&1 | $contains 'option' >/dev/null
- then
- cat <<'EOM' >&4
-
-The bundled C compiler is not ANSI-compliant, and so cannot be used to
-build perl. Please see the file README.hpux for advice on alternative
-compilers.
-
-Cannot continue, aborting.
-EOM
- exit 1
- else
- ccflags="$ccflags -Aa" # The add-on compiler supports ANSI C
- # cppstdin and cpprun need the -Aa option if you use the unbundled
- # ANSI C compiler (*not* the bundled K&R compiler or gcc)
- # [XXX this should be set automatically by Configure, but isn't yet.]
- # [XXX This is reported not to work. You may have to edit config.sh.
- # After running Configure, set cpprun and cppstdin in config.sh,
- # run "Configure -S" and then "make".]
- cpprun="${cc:-cc} -E -Aa"
- cppstdin="$cpprun"
- cppminus='-'
- cpplast='-'
- fi
- case "$optimize" in
- # For HP's ANSI C compiler, up to "+O3" is safe for everything
- # except shared libraries (PIC code). Max safe for PIC is "+O2".
- # Setting both causes innocuous warnings.
- '') optimize='-O'
- #optimize='+O3'
- #cccdlflags='+z +O2'
- ;;
- esac
- cc=cc
- ;;
-esac
-
-cc=${cc:-cc}
-
-case `$cc -v 2>&1`"" in
-*gcc*) ccisgcc="$define" ;;
-*) ccisgcc=''
- ccversion=`which cc | xargs what | awk '/Compiler/{print $2}'`
- ;;
-esac
-
-# Determine the architecture type of this system.
-# Keep leading tab below -- Configure Black Magic -- RAM, 03/02/97
- xxOsRevMajor=`uname -r | sed -e 's/^[^0-9]*//' | cut -d. -f1`;
- #xxOsRevMinor=`uname -r | sed -e 's/^[^0-9]*//' | cut -d. -f2`;
-if [ "$xxOsRevMajor" -ge 10 ]
-then
- # This system is running >= 10.x
-
- # Tested on 10.01 PA1.x and 10.20 PA[12].x. Idea: Scan
- # /usr/include/sys/unistd.h for matches with "#define CPU_* `getconf
- # CPU_VERSION`" to determine CPU type. Note the part following
- # "CPU_" is used, *NOT* the comment.
- #
- # ASSUMPTIONS: Numbers will continue to be defined in hex -- and in
- # /usr/include/sys/unistd.h -- and the CPU_* #defines will be kept
- # up to date with new CPU/OS releases.
- xxcpu=`getconf CPU_VERSION`; # Get the number.
- xxcpu=`printf '0x%x' $xxcpu`; # convert to hex
- archname=`sed -n -e "s/^#[ \t]*define[ \t]*CPU_//p" /usr/include/sys/unistd.h |
- sed -n -e "s/[ \t]*$xxcpu[ \t].*//p" |
- sed -e s/_RISC/-RISC/ -e s/HP_// -e s/_/./`;
-else
- # This system is running <= 9.x
- # Tested on 9.0[57] PA and [78].0 MC680[23]0. Idea: After removing
- # MC6888[12] from context string, use first CPU identifier.
- #
- # ASSUMPTION: Only CPU identifiers contain no lowercase letters.
- archname=`getcontext | tr ' ' '\012' | grep -v '[a-z]' | grep -v MC688 |
- sed -e 's/HP-//' -e 1q`;
- selecttype='int *'
-fi
-
-# Do this right now instead of the delayed callback unit approach.
-case "$use64bitall" in
-$define|true|[yY]*) use64bitint="$define" ;;
-esac
-case "$use64bitint" in
-$define|true|[yY]*)
- if [ "$xxOsRevMajor" -lt 11 ]; then
- cat <<EOM >&4
-
-64-bit compilation is not supported on HP-UX $xxOsRevMajor.
-You need at least HP-UX 11.0.
-Cannot continue, aborting.
-EOM
- exit 1
- fi
-
- # Without the 64-bit libc we cannot do much.
- libc='/lib/pa20_64/libc.sl'
- if [ ! -f "$libc" ]; then
- cat <<EOM >&4
-
-*** You do not seem to have the 64-bit libraries in /lib/pa20_64.
-*** Most importantly, I cannot find the $libc.
-*** Cannot continue, aborting.
-EOM
- exit 1
- fi
-
- ccflags="$ccflags +DD64"
- ldflags="$ldflags +DD64"
- test -d /lib/pa20_64 && loclibpth="$loclibpth /lib/pa20_64"
- libswanted="$libswanted pthread"
- libscheck='case "`/usr/bin/file $xxx`" in
-*LP64*|*PA-RISC2.0*) ;;
-*) xxx=/no/64-bit$xxx ;;
-esac'
- if test -n "$ccisgcc" -o -n "$gccversion"; then
- ld="$cc"
- else
- ld=/usr/bin/ld
- fi
- ar=/usr/bin/ar
- full_ar=$ar
-
- if test -z "$ccisgcc" -a -z "$gccversion"; then
- # The strict ANSI mode (-Aa) doesn't like the LL suffixes.
- ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'`
- case "$ccflags" in
- *-Ae*) ;;
- *) ccflags="$ccflags -Ae" ;;
- esac
- fi
-
- set `echo " $libswanted " | sed -e 's@ dl @ @'`
- libswanted="$*"
-
- ;;
-esac
-
-case "$ccisgcc" in
-# Even if you use gcc, prefer the HP math library over the GNU one.
-"$define") test -d /lib/pa1.1 && ccflags="$ccflags -L/lib/pa1.1" ;;
-esac
-
-case "$ccisgcc" in
-"$define") ;;
-*) case "`getconf KERNEL_BITS 2>/dev/null`" in
- *64*) ldflags="$ldflags -Wl,+vnocompatwarnings" ;;
- esac
- ;;
-esac
-
-# Remove bad libraries that will cause problems
-# (This doesn't remove libraries that don't actually exist)
-# -lld is unneeded (and I can't figure out what it's used for anyway)
-# -ldbm is obsolete and should not be used
-# -lBSD contains BSD-style duplicates of SVR4 routines that cause confusion
-# -lPW is obsolete and should not be used
-# The libraries crypt, malloc, ndir, and net are empty.
-# Although -lndbm should be included, it will make perl blow up if you should
-# copy the binary to a system without libndbm.sl. See ccdlflags below.
-set `echo " $libswanted " | sed -e 's@ ld @ @' -e 's@ dbm @ @' -e 's@ BSD @ @' -e 's@ PW @ @'`
-libswanted="$*"
-
-# By setting the deferred flag below, this means that if you run perl
-# on a system that does not have the required shared library that you
-# linked it with, it will die when you try to access a symbol in the
-# (missing) shared library. If you would rather know at perl startup
-# time that you are missing an important shared library, switch the
-# comments so that immediate, rather than deferred loading is
-# performed. Even with immediate loading, you can postpone errors for
-# undefined (or multiply defined) routines until actual access by
-# adding the "nonfatal" option.
-# ccdlflags="-Wl,-E -Wl,-B,immediate $ccdlflags"
-# ccdlflags="-Wl,-E -Wl,-B,immediate,-B,nonfatal $ccdlflags"
-ccdlflags="-Wl,-E -Wl,-B,deferred $ccdlflags"
-
-case "$usemymalloc" in
-'') usemymalloc='y' ;;
-esac
-
-alignbytes=8
-# For native nm, you need "-p" to produce BSD format output.
-nm_opt='-p'
-
-# When HP-UX runs a script with "#!", it sets argv[0] to the script name.
-toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
-
-# If your compile complains about FLT_MIN, uncomment the next line
-# POSIX_cflags='ccflags="$ccflags -DFLT_MIN=1.17549435E-38"'
-
-# Comment this out if you don't want to follow the SVR4 filesystem layout
-# that HP-UX 10.0 uses
-case "$prefix" in
-'') prefix='/opt/perl5' ;;
-esac
-
-# HP-UX can't do setuid emulation offered by Configure
-case "$d_dosuid" in
-'') d_dosuid="$undef" ;;
-esac
-
-# HP-UX 11 groks also LD_LIBRARY_PATH but SHLIB_PATH
-# is recommended for compatibility.
-case "$ldlibpthname" in
-'') ldlibpthname=SHLIB_PATH ;;
-esac
-
-# HP-UX 10.20 and gcc 2.8.1 break UINT32_MAX.
-case "$ccisgcc" in
-"$define") ccflags="$ccflags -DUINT32_MAX_BROKEN" ;;
-esac
-
-cat > UU/cc.cbu <<'EOSH'
-# XXX This script UU/cc.cbu will get 'called-back' by Configure after it
-# XXX has prompted the user for the C compiler to use.
-# Get gcc to share its secrets.
-echo 'main() { return 0; }' > try.c
- # Indent to avoid propagation to config.sh
- verbose=`${cc:-cc} -v -o try try.c 2>&1`
-if echo "$verbose" | grep '^Reading specs from' >/dev/null 2>&1; then
- # Using gcc.
- : nothing to see here, move on.
-else
- # Using cc.
- ar=${ar:-ar}
- case "`$ar -V 2>&1`" in
- *GNU*)
- if test -x /usr/bin/ar; then
- cat <<END >&2
-
-*** You are using HP cc(1) but GNU ar(1). This might lead into trouble
-*** later on, I'm switching to HP ar to play safe.
-
-END
- ar=/usr/bin/ar
- fi
- ;;
- esac
-fi
-
-EOSH
-
-# Date: Fri, 6 Sep 96 23:15:31 CDT
-# From: "Daniel S. Lewart" <d-lewart@uiuc.edu>
-# I looked through the gcc.info and found this:
-# * GNU CC compiled code sometimes emits warnings from the HP-UX
-# assembler of the form:
-# (warning) Use of GR3 when frame >= 8192 may cause conflict.
-# These warnings are harmless and can be safely ignored.
-
-cat > UU/usethreads.cbu <<'EOCBU'
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-case "$usethreads" in
-$define|true|[yY]*)
- if [ "$xxOsRevMajor" -lt 10 ]; then
- cat <<EOM >&4
-
-HP-UX $xxOsRevMajor cannot support POSIX threads.
-Consider upgrading to at least HP-UX 11.
-Cannot continue, aborting.
-EOM
- exit 1
- fi
- case "$xxOsRevMajor" in
- 10)
- # Under 10.X, a threaded perl can be built
- if [ -f /usr/include/pthread.h ]; then
- if [ -f /usr/lib/libcma.sl ]; then
- # DCE (from Core OS CD) is installed
-
- # It needs # libcma and OLD_PTHREADS_API. Also <pthread.h>
- # needs to be #included before any other includes
- # (in perl.h)
-
- # HP-UX 10.X uses the old pthreads API
- d_oldpthreads="$define"
-
- # include libcma before all the others
- libswanted="cma $libswanted"
-
- # tell perl.h to include <pthread.h> before other include files
- ccflags="$ccflags -DPTHREAD_H_FIRST"
-
- # CMA redefines select to cma_select, and cma_select expects int *
- # instead of fd_set * (just like 9.X)
- selecttype='int *'
-
- elif [ -f /usr/lib/libpthread.sl ]; then
- # PTH package is installed
- libswanted="pthread $libswanted"
- else
- libswanted="no_threads_available"
- fi
- else
- libswanted="no_threads_available"
- fi
-
- if [ $libswanted = "no_threads_available" ]; then
- cat <<EOM >&4
-
-In HP-UX 10.X for POSIX threads you need both of the files
-/usr/include/pthread.h and either /usr/lib/libcma.sl or /usr/lib/libpthread.sl.
-Either you must upgrade to HP-UX 11 or install a posix thread library:
-
- DCE-CoreTools from HP-UX 10.20 Hardware Extensions 3.0 CD (B3920-13941)
-
-or
-
- PTH package from http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html
-
-Cannot continue, aborting.
-EOM
- exit 1
- fi
-
- ;;
- 11 | 12) # 12 may want upping the _POSIX_C_SOURCE datestamp...
- ccflags=" -D_POSIX_C_SOURCE=199506L $ccflags"
- set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
- shift
- libswanted="$*"
- ;;
- esac
- usemymalloc='n'
- ;;
-esac
-EOCBU
-
-case "$uselargefiles-$ccisgcc" in
-"$define-$define"|'-define')
- cat <<EOM >&4
-
-*** I'm ignoring large files for this build because
-*** I don't know how to do use large files in HP-UX using gcc.
-
-EOM
- uselargefiles="$undef"
- ;;
-esac
-
-cat > UU/uselargefiles.cbu <<'EOCBU'
-# This script UU/uselargefiles.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use large files.
-case "$uselargefiles" in
-''|$define|true|[yY]*)
- # there are largefile flags available via getconf(1)
- # but we cheat for now. (Keep that in the left margin.)
-ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
- ccflags="$ccflags $ccflags_uselargefiles"
-
- if test -z "$ccisgcc" -a -z "$gccversion"; then
- # The strict ANSI mode (-Aa) doesn't like large files.
- ccflags=`echo " $ccflags "|sed 's@ -Aa @ @g'`
- case "$ccflags" in
- *-Ae*) ;;
- *) ccflags="$ccflags -Ae" ;;
- esac
- fi
-
- ;;
-esac
-EOCBU
-
-# keep that leading tab.
- ccisgcc=''
-
diff --git a/contrib/perl5/hints/i386.sh b/contrib/perl5/hints/i386.sh
deleted file mode 100644
index 0a810ff..0000000
--- a/contrib/perl5/hints/i386.sh
+++ /dev/null
@@ -1 +0,0 @@
-ldflags='-L/usr/ucblib'
diff --git a/contrib/perl5/hints/irix_4.sh b/contrib/perl5/hints/irix_4.sh
deleted file mode 100644
index 5c5bdb2..0000000
--- a/contrib/perl5/hints/irix_4.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#irix_4.sh
-# Last modified Fri May 5 14:06:37 EDT 1995
-optimize='-O1'
-
-# Does Configure really get these wrong? Why?
-d_voidsig=define
-d_charsprf=undef
-
-case "$cc" in
-*gcc*) ccflags="$ccflags -D_BSD_TYPES" ;;
-*) ccflags="$ccflags -ansiposix -signed" ;;
-esac
-
-# This hint due thanks Hershel Walters <walters@smd4d.wes.army.mil>
-# Date: Tue, 31 Jan 1995 16:32:53 -0600 (CST)
-# Subject: IRIX4.0.4(.5? 5.0?) problems
-# I don't know if they affect versions of perl other than 5.000 or
-# versions of IRIX other than 4.0.4.
-#
-cat <<'EOM' >&4
-If you have problems, you might have try including
- -DSTANDARD_C -cckr
-in ccflags.
-EOM
-
-case "$usethreads" in
-$define|true|[yY]*)
- cat >&4 <<EOM
-IRIX `uname -r` does not support POSIX threads.
-You should upgrade to at least IRIX 6.2 with pthread patches.
-EOM
- exit 1
- ;;
-esac
-
-case " $use64bits $use64bitint $use64bitall " in
-*" $define "*|*" true "*|*" [yY] "*)
- cat >&4 <<EOM
-IRIX `uname -r` does not support 64-bit types.
-You should upgrade to at least IRIX 6.2.
-Cannot continue, aborting.
-EOM
- exit 1
-esac
-
diff --git a/contrib/perl5/hints/irix_5.sh b/contrib/perl5/hints/irix_5.sh
deleted file mode 100644
index f895bcc..0000000
--- a/contrib/perl5/hints/irix_5.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-# irix_5.sh
-# Tue Jan 9 16:04:38 EST 1996
-# Add note about socket patch.
-#
-# Tue Jan 2 14:52:36 EST 1996
-# Apparently, there's a stdio bug that can lead to memory
-# corruption using perl's malloc, but not SGI's malloc.
-usemymalloc='n'
-
-ld=ld
-i_time='define'
-
-case "$cc" in
-*gcc*) ccflags="$ccflags -D_BSD_TYPES" ;;
-*) ccflags="$ccflags -D_POSIX_SOURCE -ansiposix -D_BSD_TYPES -Olimit 4000" ;;
-esac
-
-lddlflags="-shared"
-# For some reason we don't want -lsocket -lnsl or -ldl. Can anyone
-# contribute an explanation?
-set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ nsl / /' -e 's/ dl / /'`
-shift
-libswanted="$*"
-
-# Date: Fri, 22 Dec 1995 11:49:17 -0800
-# From: Matthew Black <black@csulb.edu>
-# Subject: sockets broken under IRIX 5.3? YES...how to fix
-# Anyone attempting to use perl4 or perl5 with SGI IRIX 5.3 may discover
-# that sockets are essentially broken. The syslog interface for perl also
-# fails because it uses the broken socket interface. This problem was
-# reported to SGI as bug #255347 and it can be fixed by installing
-# patchSG0000596. The patch can be downloaded from Advantage OnLine (SGI's
-# WWW server) or from the Support Advantage 9/95 Patch CDROM. Thanks to Tom
-# Christiansen and others who provided assistance.
-
-case "$usethreads" in
-$define|true|[yY]*)
- cat >&4 <<EOM
-IRIX `uname -r` does not support POSIX threads.
-You should upgrade to at least IRIX 6.2 with pthread patches.
-EOM
- exit 1
- ;;
-esac
-
-case " $use64bits $use64bitint $use64bitall " in
-*" $define "*|*" true "*|*" [yY] "*)
- cat >&4 <<EOM
-IRIX `uname -r` does not support 64-bit types.
-You should upgrade to at least IRIX 6.2.
-Cannot continue, aborting.
-EOM
- exit 1
-esac
-
diff --git a/contrib/perl5/hints/irix_6.sh b/contrib/perl5/hints/irix_6.sh
deleted file mode 100644
index e6117cf..0000000
--- a/contrib/perl5/hints/irix_6.sh
+++ /dev/null
@@ -1,336 +0,0 @@
-# hints/irix_6.sh
-#
-# original from Krishna Sethuraman, krishna@sgi.com
-#
-# Modified Mon Jul 22 14:52:25 EDT 1996
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# with help from Dean Roehrich <roehrich@cray.com>.
-# cc -n32 update info from Krishna Sethuraman, krishna@sgi.com.
-# additional update from Scott Henry, scotth@sgi.com
-
-# Futzed with by John Stoffel <jfs@fluent.com> on 4/24/1997
-# - assumes 'cc -n32' by default
-# - tries to check for various compiler versions and do the right
-# thing when it can
-# - warnings turned off (-n32 messages):
-# 1116 - non-void function should return a value
-# 1048 - cast between pointer-to-object and pointer-to-function
-# 1042 - operand types are incompatible
-
-# Tweaked by Chip Salzenberg <chip@perl.com> on 5/13/97
-# - don't assume 'cc -n32' if the n32 libm.so is missing
-
-# Threaded by Jarkko Hietaniemi <jhi@iki.fi> on 11/18/97
-# - POSIX threads knowledge by IRIX version
-
-# gcc-enabled by Kurt Starsinic <kstar@isinet.com> on 3/24/1998
-
-# 64-bitty by Jarkko Hietaniemi on 9/1998
-
-# Use sh Configure -Dcc='cc -n32' to try compiling with -n32.
-# or -Dcc='cc -n32 -mips3' (or -mips4) to force (non)portability
-# Don't bother with -n32 unless you have the 7.1 or later compilers.
-# But there's no quick and light-weight way to check in 6.2.
-
-# NOTE: some IRIX cc versions, e.g. 7.3.1.1m (try cc -version) have
-# been known to have issues (coredumps) when compiling perl.c.
-# If you've used -OPT:fast_io=ON and this happens, try removing it.
-# If that fails, or you didn't use that, then try adjusting other
-# optimization options (-LNO, -INLINE, -O3 to -O2, etcetera).
-# The compiler bug has been reported to SGI.
-# -- Allen Smith <easmith@beatrice.rutgers.edu>
-
-# Let's assume we want to use 'cc -n32' by default, unless the
-# necessary libm is missing (which has happened at least twice)
-case "$cc" in
-'') case "$use64bitall" in
- "$define"|true|[yY]*) test -f /usr/lib64/libm.so && cc='cc -64' ;;
- *) test -f /usr/lib32/libm.so && cc='cc -n32' ;;
- esac
-esac
-
-cc=${cc:-cc}
-
-case "$cc" in
-*gcc*) ;;
-*) ccversion=`cc -version` ;;
-esac
-
-case "$use64bitint" in
-$define|true|[yY]*)
- case "`uname -r`" in
- [1-5]*|6.[01])
- cat >&4 <<EOM
-IRIX `uname -r` does not support 64-bit types.
-You should upgrade to at least IRIX 6.2.
-Cannot continue, aborting.
-EOM
- exit 1
- ;;
- esac
- ;;
-esac
-
-case "$use64bitall" in
-"$define"|true|[yY]*)
- case "`uname -s`" in
- IRIX)
- cat >&4 <<EOM
-You cannot use -Duse64bitall in 32-bit IRIX, sorry.
-
-Cannot continue, aborting.
-EOM
- exit 1
- ;;
- esac
- ;;
-esac
-
-# Check for which compiler we're using
-
-case "$cc" in
-*"cc -n32"*)
-
- # If a library is requested to link against, make sure the
- # objects in the library are of the same ABI we are compiling
- # against. Albert Chin-A-Young <china@thewrittenword.com>
- libscheck='case "$xxx" in
-*.a) /bin/ar p $xxx `/bin/ar t $xxx | /usr/bsd/head -1` >$$.o;
- case "`/usr/bin/file $$.o`" in
- *N32*) rm -f $$.o ;;
- *) rm -f $$.o; xxx=/no/n32$xxx ;;
- esac ;;
-*) case "`/usr/bin/file $xxx`" in
- *N32*) ;;
- *) xxx=/no/n32$xxx ;;
- esac ;;
-esac'
-
- # NOTE: -L/usr/lib32 -L/lib32 are automatically selected by the linker
- ldflags=' -L/usr/local/lib32 -L/usr/local/lib'
- cccdlflags=' '
- # From: David Billinghurst <David.Billinghurst@riotinto.com.au>
- # If you get complaints about so_locations then change the following
- # line to something like:
- # lddlflags="-n32 -shared -check_registry /usr/lib32/so_locations"
- lddlflags="-n32 -shared"
- libc='/usr/lib32/libc.so'
- plibpth='/usr/lib32 /lib32 /usr/ccs/lib'
- ;;
-*"cc -64"*)
-
- loclibpth="$loclibpth /usr/lib64"
- libscheck='case "`/usr/bin/file $xxx`" in
-*64-bit*) ;;
-*) xxx=/no/64-bit$xxx ;;
-esac'
- # NOTE: -L/usr/lib64 -L/lib64 are automatically selected by the linker
- ldflags=' -L/usr/local/lib64 -L/usr/local/lib'
- cccdlflags=' '
- # From: David Billinghurst <David.Billinghurst@riotinto.com.au>
- # If you get complaints about so_locations then change the following
- # line to something like:
- # lddlflags="-64 -shared -check_registry /usr/lib64/so_locations"
- lddlflags="-64 -shared"
- libc='/usr/lib64/libc.so'
- plibpth='/usr/lib64 /lib64 /usr/ccs/lib'
- ;;
-*gcc*)
- ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -D_POSIX_C_SOURCE"
- optimize="-O3"
- usenm='undef'
- case "`uname -s`" in
- # Without the -mabi=64 gcc in 64-bit IRIX has problems passing
- # and returning small structures. This affects inet_*() and semctl().
- # See http://reality.sgi.com/ariel/freeware/gcc-2.8.1-notes.html
- # for more information. Reported by Lionel Cons <lionel.cons@cern.ch>.
- IRIX64) ccflags="$ccflags -mabi=64"
- ldflags="$ldflags -mabi=64 -L/usr/lib64"
- lddlflags="$lddlflags -mabi=64"
- ;;
- *) ccflags="$ccflags -DIRIX32_SEMUN_BROKEN_BY_GCC"
- ;;
- esac
- ;;
-*)
- # this is needed to force the old-32 paths
- # since the system default can be changed.
- ccflags="$ccflags -32 -D_BSD_TYPES -D_BSD_TIME -Olimit 3100"
- optimize='-O'
- ;;
-esac
-
-# Settings common to both native compiler modes.
-case "$cc" in
-*"cc -n32"*|*"cc -64"*)
- ld=$cc
-
- # perl's malloc can return improperly aligned buffer
- # which (under 5.6.0RC1) leads into really bizarre bus errors
- # and freak test failures (lib/safe1 #18, for example),
- # even more so with -Duse64bitall: for example lib/io_linenumtb.
- # fails under the harness but succeeds when run separately,
- # under make test pragma/warnings #98 fails, and lib/io_dir
- # apparently coredumps (the last two don't happen under
- # the harness. Helmut Jarausch is seeing bus errors from
- # miniperl, as was Scott Henry with snapshots from just before
- # the RC1. --jhi
- usemymalloc='undef'
-#malloc_cflags='ccflags="-DSTRICT_ALIGNMENT $ccflags"'
-
- nm_opt='-p'
- nm_so_opt='-p'
-
- # Perl 5.004_57 introduced new qsort code into pp_ctl.c that
- # makes IRIX cc prior to 7.2.1 to emit bad code.
- # so some serious hackery follows to set pp_ctl flags correctly.
-
- # Check for which version of the compiler we're running
- case "`$cc -version 2>&1`" in
- *7.0*) # Mongoose 7.0
- ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff 1009,1042,1048,1110,1116,1174,1184,1552 -OPT:Olimit=0"
- optimize='none'
- ;;
- *7.1*|*7.2|*7.20) # Mongoose 7.1+
- ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff 1009,1110,1174,1184,1552 -OPT:Olimit=0"
- optimize='-O3'
-# This is a temporary fix for 5.005.
-# Leave pp_ctl_cflags line at left margin for Configure. See
-# hints/README.hints, especially the section
-# =head2 Propagating variables to config.sh
-pp_ctl_cflags='optimize=-O'
- ;;
- *7.*) # Mongoose 7.2.1+
- ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff 1009,1110,1174,1184,1552 -OPT:Olimit=0:space=ON"
- optimize='-O3'
- ;;
- *6.2*) # Ragnarok 6.2
- ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff 1009,1110,1174,1184,1552"
- optimize='none'
- ;;
- *) # Be safe and not optimize
- ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff 1009,1110,1174,1184,1552 -OPT:Olimit=0"
- optimize='none'
- ;;
- esac
-
-# this is to accommodate the 'modules' capability of the
-# 7.2 MIPSPro compilers, which allows for the compilers to be installed
-# in a nondefault location. Almost everything works as expected, but
-# /usr/include isn't caught properly. Hence see the /usr/include/pthread.h
-# change below to include TOOLROOT (a modules environment variable),
-# and the following code. Additional
-# code to accommodate the 'modules' environment should probably be added
-# here if possible, or be inserted as a ${TOOLROOT} reference before
-# absolute paths (again, see the pthread.h change below).
-# -- krishna@sgi.com, 8/23/98
-
- if [ "X${TOOLROOT}" != "X" ]; then
- # we cant set cppflags because it gets overwritten
- # we dont actually need $TOOLROOT/usr/include on the cc line cuz the
- # modules functionality already includes it but
- # XXX - how do I change cppflags in the hints file?
- ccflags="$ccflags -I${TOOLROOT}/usr/include"
- usrinc="${TOOLROOT}/usr/include"
- fi
-
- ;;
-esac
-
-# Don't groan about unused libraries.
-ldflags="$ldflags -Wl,-woff,84"
-
-# workaround for an optimizer bug
-case "`$cc -version 2>&1`" in
-*7.2.*) op_cflags='optimize=-O1'; opmini_cflags='optimize=-O1' ;;
-*7.3.1.*) op_cflags='optimize=-O2'; opmini_cflags='optimize=-O2' ;;
-esac
-
-# We don't want these libraries.
-# Socket networking is in libc, these are not installed by default,
-# and just slow perl down. (scotth@sgi.com)
-set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ nsl / /' -e 's/ dl / /'`
-shift
-libswanted="$*"
-
-# Irix 6.5.6 seems to have a broken header <sys/mode.h>
-# don't include that (it doesn't contain S_IFMT, S_IFREG, et al)
-
-i_sysmode="$undef"
-
-# I have conflicting reports about the sun, crypt, bsd, and PW
-# libraries on Irix 6.2.
-#
-# One user rerports:
-# Don't need sun crypt bsd PW under 6.2. You *may* need to link
-# with these if you want to run perl built under 6.2 on a 5.3 machine
-# (I haven't checked)
-#
-# Another user reported that if he included those libraries, a large number
-# of the tests failed (approx. 20-25) and he would get a core dump. To
-# make things worse, test results were inconsistent, i.e., some of the
-# tests would pass some times and fail at other times.
-# The safest thing to do seems to be to eliminate them.
-#
-# Actually, the only libs that you want are '-lm'. Everything else
-# you need is in libc. You do also need '-lbsd' if you choose not
-# to use the -D_BSD_* defines. Note that as of 6.2 the only
-# difference between '-lmalloc' and '-lc' malloc is the debugging
-# and control calls, which aren't used by perl. -- scotth@sgi.com
-
-set `echo X "$libswanted "|sed -e 's/ sun / /' -e 's/ crypt / /' -e 's/ bsd / /' -e 's/ PW / /' -e 's/ malloc / /'`
-shift
-libswanted="$*"
-
-cat > UU/usethreads.cbu <<'EOCBU'
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-case "$usethreads" in
-$define|true|[yY]*)
- if test ! -f ${TOOLROOT}/usr/include/pthread.h -o ! -f /usr/lib/libpthread.so; then
- case "`uname -r`" in
- [1-5].*|6.[01])
- cat >&4 <<EOM
-IRIX `uname -r` does not support POSIX threads.
-You should upgrade to at least IRIX 6.2 with pthread patches.
-EOM
- ;;
- 6.2)
- cat >&4 <<EOM
-IRIX 6.2 can have the POSIX threads.
-However, the following IRIX patches (or their replacements) MUST be installed:
- 1404 Irix 6.2 Posix 1003.1b man pages
- 1645 IRIX 6.2 & 6.3 POSIX header file updates
- 2000 Irix 6.2 Posix 1003.1b support modules
- 2254 Pthread library fixes
- 2401 6.2 all platform kernel rollup
-IMPORTANT:
- Without patch 2401, a kernel bug in IRIX 6.2 will
- cause your machine to panic and crash when running
- threaded perl. IRIX 6.3 and up should be OK.
-EOM
- ;;
- [67].*)
- cat >&4 <<EOM
-IRIX `uname -r` should have the POSIX threads.
-But, somehow, you do not seem to have them installed.
-EOM
- ;;
- esac
- cat >&4 <<EOM
-Cannot continue, aborting.
-EOM
- exit 1
- fi
- set `echo X "$libswanted "| sed -e 's/ c / pthread /'`
- ld="${cc:-cc}"
- shift
- libswanted="$*"
-
- usemymalloc='n'
- ;;
-esac
-EOCBU
-
-# The -n32 makes off_t to be 8 bytes, so we should have largefileness.
-
diff --git a/contrib/perl5/hints/irix_6_0.sh b/contrib/perl5/hints/irix_6_0.sh
deleted file mode 100644
index 50498af..0000000
--- a/contrib/perl5/hints/irix_6_0.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-# irix_6.sh
-# from Krishna Sethuraman, krishna@sgi.com
-# Date: Wed Jan 18 11:40:08 EST 1995
-# added `-32' to force compilation in 32-bit mode.
-# otherwise, copied from irix_5.sh.
-
-# Perl built with this hints file under IRIX 6.0.1 passes
-# all tests (`make test').
-
-# Tue Jan 2 14:52:36 EST 1996
-# Apparently, there's a stdio bug that can lead to memory
-# corruption using perl's malloc, but not SGI's malloc.
-usemymalloc='n'
-
-ld=ld
-i_time='define'
-cc="cc -32"
-ccflags="$ccflags -D_POSIX_SOURCE -ansiposix -D_BSD_TYPES -Olimit 3000"
-lddlflags="-32 -shared"
-
-# We don't want these libraries. Anyone know why?
-set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ nsl / /' -e 's/ dl / /'`
-shift
-libswanted="$*"
-#
-# The following might be of interest if you wish to try 64-bit mode:
-# irix_6_64bit.sh
-# Krishna Sethuraman, krishna@sgi.com
-# taken from irix_5.sh . Changes from irix_5.sh:
-# Olimit and nested comments (warning 1009) no longer accepted
-# -OPT:fold_arith_limit so POSIX module will optimize
-# no 64bit versions of sun, crypt, nsl, socket, dl dso's available
-# as of IRIX 6.0.1 so omit those from libswanted line via `sed'.
-
-# perl 5 built with this hints file passes most tests (`make test').
-# Fails on op/subst test only. (built and tested under IRIX 6.0.1).
-
-# i_time='define'
-# ccflags="$ccflags -D_POSIX_SOURCE -ansiposix -D_BSD_TYPES -woff 1009 -OPT:fold_arith_limit=1046"
-# lddlflags="-shared"
-# set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ sun / /' -e 's/ crypt / /' -e 's/ nsl / /' -e 's/ dl / /'`
-# shift
-# libswanted="$*"
-
-case "$usethreads" in
-$define|true|[yY]*)
- cat >&4 <<EOM
-IRIX `uname -r` does not support POSIX threads.
-You should upgrade to at least IRIX 6.2 with pthread patches.
-EOM
- exit 1
- ;;
-esac
-
-case " $use64bits $use64bitint $use64bitall " in
-*" $define "*|*" true "*|*" [yY] "*)
- cat >&4 <<EOM
-IRIX `uname -r` does not support 64-bit types.
-You should upgrade to at least IRIX 6.2.
-Cannot continue, aborting.
-EOM
- exit 1
-esac
-
diff --git a/contrib/perl5/hints/irix_6_1.sh b/contrib/perl5/hints/irix_6_1.sh
deleted file mode 100644
index 50498af..0000000
--- a/contrib/perl5/hints/irix_6_1.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-# irix_6.sh
-# from Krishna Sethuraman, krishna@sgi.com
-# Date: Wed Jan 18 11:40:08 EST 1995
-# added `-32' to force compilation in 32-bit mode.
-# otherwise, copied from irix_5.sh.
-
-# Perl built with this hints file under IRIX 6.0.1 passes
-# all tests (`make test').
-
-# Tue Jan 2 14:52:36 EST 1996
-# Apparently, there's a stdio bug that can lead to memory
-# corruption using perl's malloc, but not SGI's malloc.
-usemymalloc='n'
-
-ld=ld
-i_time='define'
-cc="cc -32"
-ccflags="$ccflags -D_POSIX_SOURCE -ansiposix -D_BSD_TYPES -Olimit 3000"
-lddlflags="-32 -shared"
-
-# We don't want these libraries. Anyone know why?
-set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ nsl / /' -e 's/ dl / /'`
-shift
-libswanted="$*"
-#
-# The following might be of interest if you wish to try 64-bit mode:
-# irix_6_64bit.sh
-# Krishna Sethuraman, krishna@sgi.com
-# taken from irix_5.sh . Changes from irix_5.sh:
-# Olimit and nested comments (warning 1009) no longer accepted
-# -OPT:fold_arith_limit so POSIX module will optimize
-# no 64bit versions of sun, crypt, nsl, socket, dl dso's available
-# as of IRIX 6.0.1 so omit those from libswanted line via `sed'.
-
-# perl 5 built with this hints file passes most tests (`make test').
-# Fails on op/subst test only. (built and tested under IRIX 6.0.1).
-
-# i_time='define'
-# ccflags="$ccflags -D_POSIX_SOURCE -ansiposix -D_BSD_TYPES -woff 1009 -OPT:fold_arith_limit=1046"
-# lddlflags="-shared"
-# set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ sun / /' -e 's/ crypt / /' -e 's/ nsl / /' -e 's/ dl / /'`
-# shift
-# libswanted="$*"
-
-case "$usethreads" in
-$define|true|[yY]*)
- cat >&4 <<EOM
-IRIX `uname -r` does not support POSIX threads.
-You should upgrade to at least IRIX 6.2 with pthread patches.
-EOM
- exit 1
- ;;
-esac
-
-case " $use64bits $use64bitint $use64bitall " in
-*" $define "*|*" true "*|*" [yY] "*)
- cat >&4 <<EOM
-IRIX `uname -r` does not support 64-bit types.
-You should upgrade to at least IRIX 6.2.
-Cannot continue, aborting.
-EOM
- exit 1
-esac
-
diff --git a/contrib/perl5/hints/isc.sh b/contrib/perl5/hints/isc.sh
deleted file mode 100644
index cdfe91c..0000000
--- a/contrib/perl5/hints/isc.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-# isc.sh
-# Interactive Unix Versions 3 and 4.
-# Compile perl entirely in posix mode.
-# Andy Dougherty doughera@lafcol.lafayette.edu
-# Wed Oct 5 15:57:37 EDT 1994
-#
-# Use Configure -Dcc=gcc to use gcc
-#
-
-# We don't want to explicitly mention -lc (since we're using POSIX mode.)
-# We also don't want -lx (the Xenix compatability libraries.) The only
-# thing that it seems to pick up is chsize(), which has been reported to
-# not work. chsize() can also be implemented via fcntl() in perl (if you
-# define -D_SYSV3). We'll leave in -lPW since it's harmless. Some
-# extension might eventually need it for alloca, though perl doesn't use
-# it.
-
-set `echo X "$libswanted "| sed -e 's/ c / /' -e 's/ x / /'`
-shift
-libswanted="$*"
-
-case "$cc" in
-*gcc*) ccflags="$ccflags -posix"
- ldflags="$ldflags -posix"
- ;;
-*) ccflags="$ccflags -Xp -D_POSIX_SOURCE"
- ldflags="$ldflags -Xp"
- ;;
-esac
-
-# getsockname() and getpeername() return 256 for no good reason
-ccflags="$ccflags -DBOGUS_GETNAME_RETURN=256"
-
-# rename(2) can't rename long filenames
-d_rename=undef
-
-# for ext/IPC/SysV/SysV.xs
-ccflags="$ccflags -DPERL_ISC"
-
-# You can also include -D_SYSV3 to pick up "traditionally visible"
-# symbols hidden by name-space pollution rules. This raises some
-# compilation "redefinition" warnings, but they appear harmless.
-# ccflags="$ccflags -D_SYSV3"
-
diff --git a/contrib/perl5/hints/isc_2.sh b/contrib/perl5/hints/isc_2.sh
deleted file mode 100644
index d8ca7dc..0000000
--- a/contrib/perl5/hints/isc_2.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-# isc_2.sh
-# Interactive Unix Version 2.2
-# Compile perl entirely in posix mode.
-# Andy Dougherty doughera@lafcol.lafayette.edu
-# Wed Oct 5 15:57:37 EDT 1994
-#
-# Use Configure -Dcc=gcc to use gcc
-#
-set `echo X "$libswanted "| sed -e 's/ c / /'`
-shift
-libswanted="$*"
-case "$cc" in
-*gcc*) ccflags="$ccflags -posix"
- ldflags="$ldflags -posix"
- ;;
-*) ccflags="$ccflags -Xp -D_POSIX_SOURCE"
- ldflags="$ldflags -Xp"
- ;;
-esac
-# Compensate for conflicts in <net/errno.h>
-doio_cflags='ccflags="$ccflags -DENOTSOCK=103"'
-pp_sys_cflags='ccflags="$ccflags -DENOTSOCK=103"'
-
-# for ext/IPC/SysV/SysV.xs
-ccflags="$ccflags -DPERL_ISC"
diff --git a/contrib/perl5/hints/linux.sh b/contrib/perl5/hints/linux.sh
deleted file mode 100644
index a6b2bd9..0000000
--- a/contrib/perl5/hints/linux.sh
+++ /dev/null
@@ -1,291 +0,0 @@
-# hints/linux.sh
-# Original version by rsanders
-# Additional support by Kenneth Albanowski <kjahds@kjahds.com>
-#
-# ELF support by H.J. Lu <hjl@nynexst.com>
-# Additional info from Nigel Head <nhead@ESOC.bitnet>
-# and Kenneth Albanowski <kjahds@kjahds.com>
-#
-# Consolidated by Andy Dougherty <doughera@lafcol.lafayette.edu>
-#
-# Updated Thu Feb 8 11:56:10 EST 1996
-
-# Updated Thu May 30 10:50:22 EDT 1996 by <doughera@lafcol.lafayette.edu>
-
-# Updated Fri Jun 21 11:07:54 EDT 1996
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
-
-# No version of Linux supports setuid scripts.
-d_suidsafe='undef'
-
-# Debian and Red Hat, and perhaps other vendors, provide both runtime and
-# development packages for some libraries. The runtime packages contain shared
-# libraries with version information in their names (e.g., libgdbm.so.1.7.3);
-# the development packages supplement this with versionless shared libraries
-# (e.g., libgdbm.so).
-#
-# If you want to link against such a library, you must install the development
-# version of the package.
-#
-# These packages use a -dev naming convention in both Debian and Red Hat:
-# libgdbmg1 (non-development version of GNU libc 2-linked GDBM library)
-# libgdbmg1-dev (development version of GNU libc 2-linked GDBM library)
-# So make sure that for any libraries you wish to link Perl with under
-# Debian or Red Hat you have the -dev packages installed.
-#
-# Some operating systems (e.g., Solaris 2.6) will link to a versioned shared
-# library implicitly. For example, on Solaris, `ld foo.o -lgdbm' will find an
-# appropriate version of libgdbm, if one is available; Linux, however, doesn't
-# do the implicit mapping.
-ignore_versioned_solibs='y'
-
-# perl goes into the /usr tree. See the Filesystem Standard
-# available via anonymous FTP at tsx-11.mit.edu in
-# /pub/linux/docs/linux-standards/fsstnd.
-# Allow a command line override, e.g. Configure -Dprefix=/foo/bar
-#
-# Addendum for 5.005_57 and beyond:
-#
-# However, most Linux users probably already have a /usr/bin/perl.
-# We can't know whether the current user is intending to *replace*
-# that /usr/bin/perl or whether the user is intending to install
-# a *different* installation.
-#
-# Here is what we used to do:
-# Allow a command line override, e.g. Configure -Dprefix=/foo/bar
-# case "$prefix" in
-# '') prefix='/usr' ;;
-# esac
-#
-# For now, let's assume that most Linux users get their /usr/bin/perl
-# from some packaging system, so that those compiling from source are
-# probably the more experimental folks and hence probably aren't
-# intending to replace /usr/bin/perl (at least just yet).
-# This change makes linux consistent with most other unix platforms
-# in having a default of prefix=/usr/local.
-# These notes can probably safely be removed in 5.005_50 and beyond.
-#
-# 9 April 1999 Andy Dougherty <doughera@lafayette.edu>
-#
-
-# BSD compatability library no longer needed
-# 'kaffe' has a /usr/lib/libnet.so which is not at all relevent for perl.
-set `echo X "$libswanted "| sed -e 's/ bsd / /' -e 's/ net / /'`
-shift
-libswanted="$*"
-
-# If you have glibc, then report the version for ./myconfig bug reporting.
-# (Configure doesn't need to know the specific version since it just uses
-# gcc to load the library for all tests.)
-# Is this sufficiently robust for libc5 systems as well as
-# glibc-2.1.x systems?
-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they
-# are insufficiently precise to distinguish things like
-# libc-2.0.6 and libc-2.0.7.
-if test -L /lib/libc.so.6; then
- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'`
- libc=/lib/$libc
-fi
-
-# Configure may fail to find lstat() since it's a static/inline
-# function in <sys/stat.h>.
-d_lstat=define
-
-# Explanation?
-case "$usemymalloc" in
-'') usemymalloc='n' ;;
-esac
-
-case "$optimize" in
-'') optimize='-O2' ;;
-esac
-
-# Are we using ELF? Thanks to Kenneth Albanowski <kjahds@kjahds.com>
-# for this test.
-cat >try.c <<'EOM'
-/* Test for whether ELF binaries are produced */
-#include <fcntl.h>
-#include <stdlib.h>
-main() {
- char buffer[4];
- int i=open("a.out",O_RDONLY);
- if(i==-1)
- exit(1); /* fail */
- if(read(i,&buffer[0],4)<4)
- exit(1); /* fail */
- if(buffer[0] != 127 || buffer[1] != 'E' ||
- buffer[2] != 'L' || buffer[3] != 'F')
- exit(1); /* fail */
- exit(0); /* succeed (yes, it's ELF) */
-}
-EOM
-if ${cc:-gcc} try.c >/dev/null 2>&1 && ./a.out; then
- cat <<'EOM' >&4
-
-You appear to have ELF support. I'll try to use it for dynamic loading.
-If dynamic loading doesn't work, read hints/linux.sh for further information.
-EOM
-
-#For RedHat Linux 3.0.3, you may need to fetch
-# ftp://ftp.redhat.com/pub/redhat-3.0.3/i386/updates/RPMS/ld.so-1.7.14-3.i386.rpm
-#
-
-else
- cat <<'EOM' >&4
-
-You don't have an ELF gcc. I will use dld if possible. If you are
-using a version of DLD earlier than 3.2.6, or don't have it at all, you
-should probably upgrade. If you are forced to use 3.2.4, you should
-uncomment a couple of lines in hints/linux.sh and restart Configure so
-that shared libraries will be disallowed.
-
-EOM
- lddlflags="-r $lddlflags"
- # These empty values are so that Configure doesn't put in the
- # Linux ELF values.
- ccdlflags=' '
- cccdlflags=' '
- ccflags="-DOVR_DBL_DIG=14 $ccflags"
- so='sa'
- dlext='o'
- nm_so_opt=' '
- ## If you are using DLD 3.2.4 which does not support shared libs,
- ## uncomment the next two lines:
- #ldflags="-static"
- #so='none'
-
- # In addition, on some systems there is a problem with perl and NDBM
- # which causes AnyDBM and NDBM_File to lock up. This is evidenced
- # in the tests as AnyDBM just freezing. Apparently, this only
- # happens on a.out systems, so we disable NDBM for all a.out linux
- # systems. If someone can suggest a more robust test
- # that would be appreciated.
- #
- # More info:
- # Date: Wed, 7 Feb 1996 03:21:04 +0900
- # From: Jeffrey Friedl <jfriedl@nff.ncl.omron.co.jp>
- #
- # I tried compiling with DBM support and sure enough things locked up
- # just as advertised. Checking into it, I found that the lockup was
- # during the call to dbm_open. Not *in* dbm_open -- but between the call
- # to and the jump into.
- #
- # To make a long story short, making sure that the *.a and *.sa pairs of
- # /usr/lib/lib{m,db,gdbm}.{a,sa}
- # were perfectly in sync took care of it.
- #
- # This will generate a harmless Whoa There! message
- case "$d_dbm_open" in
- '') cat <<'EOM' >&4
-
-Disabling ndbm. This will generate a Whoa There message in Configure.
-Read hints/linux.sh for further information.
-EOM
- # You can override this with Configure -Dd_dbm_open
- d_dbm_open=undef
- ;;
- esac
-fi
-
-rm -f try.c a.out
-
-if /bin/sh -c exit; then
- echo ''
- echo 'You appear to have a working bash. Good.'
-else
- cat << 'EOM' >&4
-
-*********************** Warning! *********************
-It would appear you have a defective bash shell installed. This is likely to
-give you a failure of op/exec test #5 during the test phase of the build,
-Upgrading to a recent version (1.14.4 or later) should fix the problem.
-******************************************************
-EOM
-
-fi
-
-# On SPARClinux,
-# The following csh consistently coredumped in the test directory
-# "/home/mikedlr/perl5.003_94/t", though not most other directories.
-
-#Name : csh Distribution: Red Hat Linux (Rembrandt)
-#Version : 5.2.6 Vendor: Red Hat Software
-#Release : 3 Build Date: Fri May 24 19:42:14 1996
-#Install date: Thu Jul 11 16:20:14 1996 Build Host: itchy.redhat.com
-#Group : Shells Source RPM: csh-5.2.6-3.src.rpm
-#Size : 184417
-#Description : BSD c-shell
-
-# For this reason I suggest using the much bug-fixed tcsh for globbing
-# where available.
-
-if [ ! "`csh -c 'echo $version' 2>/dev/null`" ]
-then
- echo 'Real csh found (might break); looking for tcsh ...'
- # Use ./UU/loc to find tcsh. (We no longer run in the hints/ directory)
- if xxx=`./UU/loc tcsh blurfl $pth`; $test -f "$xxx"; then
- echo "Found tcsh. I'll use it for globbing."
- # We can't change Configure's setting of $csh, due to the way
- # Configure handles $d_portable and commands found in $loclist.
- # We can set the value for CSH in config.h by setting full_csh.
- full_csh=$xxx
- else
- echo "Couldn't find tcsh. BEWARE: GLOBBING MIGHT BE BROKEN."
- fi
-else
- echo 'Your csh is really tcsh. Good.'
-fi
-
-# Shimpei Yamashita <shimpei@socrates.patnet.caltech.edu>
-# Message-Id: <33EF1634.B36B6500@pobox.com>
-#
-# The DR2 of MkLinux (osname=linux,archname=ppc-linux) may need
-# special flags passed in order for dynamic loading to work.
-# instead of the recommended:
-#
-# ccdlflags='-rdynamic'
-#
-# it should be:
-# ccdlflags='-Wl,-E'
-#
-# So if your DR2 (DR3 came out summer 1998, consider upgrading)
-# has problems with dynamic loading, uncomment the
-# following three lines, make distclean, and re-Configure:
-#case "`uname -r | sed 's/^[0-9.-]*//'``arch`" in
-#'osfmach3ppc') ccdlflags='-Wl,-E' ;;
-#esac
-
-case "`uname -r`" in
-sparc-linux)
- case "$cccdlflags" in
- *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;;
- *) cccdlflags="$cccdlflags -fPIC" ;;
- esac
- ;;
-esac
-
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
-case "$usethreads" in
-$define|true|[yY]*)
- ccflags="-D_REENTRANT $ccflags"
- set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
- shift
- libswanted="$*"
- ;;
-esac
-EOCBU
-
-cat > UU/uselargefiles.cbu <<'EOCBU'
-# This script UU/uselargefiles.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use large files.
-case "$uselargefiles" in
-''|$define|true|[yY]*)
-# Keep this in the left margin.
-ccflags_uselargefiles="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
-
- ccflags="$ccflags $ccflags_uselargefiles"
- ;;
-esac
-EOCBU
diff --git a/contrib/perl5/hints/lynxos.sh b/contrib/perl5/hints/lynxos.sh
deleted file mode 100644
index 0023e83..0000000
--- a/contrib/perl5/hints/lynxos.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# LynxOS hints
-#
-# These hints were submitted by:
-# Greg Seibert
-# seibert@Lynx.COM
-# and
-# Ed Mooring
-# mooring@lynx.com
-#
-
-cc='gcc'
-so='none'
-usemymalloc='n'
-d_union_semun='define'
-ccflags="$ccflags -DEXTRA_F_IN_SEMUN_BUF -D__NO_INCLUDE_WARN__"
-
-# When LynxOS runs a script with "#!" it sets argv[0] to the script name
-toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
diff --git a/contrib/perl5/hints/machten.sh b/contrib/perl5/hints/machten.sh
deleted file mode 100644
index 3a311a1..0000000
--- a/contrib/perl5/hints/machten.sh
+++ /dev/null
@@ -1,279 +0,0 @@
-#! /bin/bash
-# machten.sh
-# This is for MachTen 4.1.4. It might work on other versions and variants
-# too. If it doesn't, tell me, and I'll try to fix it -- domo@computer.org
-#
-# Users of earlier MachTen versions might need a fixed tr from ftp.tenon.com.
-# This should be described in the MachTen release notes.
-#
-# MachTen 2.x has its own hint file.
-#
-# The original version of this file was put together by Andy Dougherty
-# <doughera@lafcol.lafayette.edu> based on comments from lots of
-# folks, especially
-# Mark Pease <peasem@primenet.com>
-# Martijn Koster <m.koster@webcrawler.com>
-# Richard Yeh <rcyeh@cco.caltech.edu>
-#
-# Deny system's false claims to support mmap() and munmap(); note
-# also that Sys V IPC (re)disabled by jhi due to continuing inadequacy
-# -- Dominic Dunlop <domo@computer.org> 001111
-# Remove dynamic loading libraries from search; enable SysV IPC with
-# MachTen 4.1.4 and above; define SYSTEM_ALIGN_BYTES for old MT versions
-# -- Dominic Dunlop <domo@computer.org> 000224
-# Disable shadow password file access: MT 4.1.1 has necessary library
-# functions, but not header file (or documentation)
-# -- Dominic Dunlop <domo@computer.org> 990804
-# For now, explicitly disable dynamic loading -- MT 4.1.1 has it,
-# but these hints do not yet support it.
-# Define NOTEDEF_MACHTEN to undo gratuitous Tenon hack to signal.h.
-# -- Dominic Dunlop <domo@computer.org> 9800802
-# Completely disable SysV IPC pending more complete support from Tenon
-# -- Dominic Dunlop <domo@computer.org> 980712
-# Use vfork and perl's malloc by default
-# -- Dominic Dunlop <domo@computer.org> 980630
-# Raise perl's stack size again; cut down reg_infty; document
-# -- Dominic Dunlop <domo@computer.org> 980619
-# Use of semctl() can crash system: disable -- Dominic Dunlop 980506
-# Raise stack size further; slight tweaks to accomodate MT 4.1
-# -- Dominic Dunlop <domo@computer.org> 980211
-# Raise perl's stack size -- Dominic Dunlop <domo@tcp.ip.lu> 970922
-# Reinstate sigsetjmp iff version is 4.0.3 or greater; use nm
-# (assumes Configure change); prune libswanted -- Dominic Dunlop 970113
-# Warn about test failure due to old Berkeley db -- Dominic Dunlop 970105
-# Do not use perl's malloc; SysV IPC OK -- Neil Cutcliffe, Tenon 961030
-# File::Find's use of link count disabled by Dominic Dunlop 960528
-# Perl's use of sigsetjmp etc. disabled by Dominic Dunlop 960521
-#
-# Comments, questions, and improvements welcome!
-#
-# MachTen 4.1.1's support for shadow password file access is incomplete:
-# disable its use completely.
-d_getspnam=${d_getspnam:-undef}
-
-# MachTen 4.1.1 does support dynamic loading, but perl doesn't
-# know how to use it yet.
-usedl=${usedl:-undef}
-
-# MachTen 4.1.1 may have an unhelpful hack in /usr/include/signal.h.
-# Undo it if so.
-if grep NOTDEF_MACHTEN /usr/include/signal.h > /dev/null
-then
- ccflags="$ccflags -DNOTDEF_MACHTEN"
-fi
-
-# Power MachTen is a real memory system and its standard malloc
-# has been optimized for this. Using this malloc instead of Perl's
-# malloc may result in significant memory savings. In particular,
-# unlike most UNIX memory allocation subsystems, MachTen's free()
-# really does return unneeded process data memory to the system.
-# However, MachTen's malloc() is woefully slow -- maybe 100 times
-# slower than perl's own, so perl's own is usually the better
-# choice. In order to use perl's malloc(), the sbrk() system call
-# must be simulated using MachTen's malloc(). See malloc.c for
-# precise details of how this is achieved. Recent improvements
-# to perl's malloc() currently crash MachTen, and so are disabled
-# by -DPLAIN_MALLOC and -DNO_FANCY_MALLOC.
-usemymalloc=${usemymalloc:-y}
-
-# Older versions of MachTen malloc() data on a two-byte boundary, which
-# works, but slows down operations on long, float and double data.
-# Perl's malloc() can compensate if SYSTEM_ALLOC_ALIGNMENT is suitably
-# defined.
-if expr "$osvers" \< "4.1" >/dev/null
-then
-system_alloc_alignment=" -DSYSTEM_ALLOC_ALIGNMENT=2"
-fi
-# Do not wrap the following long line
-malloc_cflags='ccflags="$ccflags -DPLAIN_MALLOC -DNO_FANCY_MALLOC -DUSE_PERL_SBRK$system_alloc_alignment"'
-
-# When MachTen does a fork(), it immediately copies the whole of
-# the parent process' data space for the child. This can be
-# expensive. Using vfork() where appropriate avoids this cost.
-d_vfork=${d_vfork:-define}
-
-# Specify a high level of optimization (-O3 wouldn't do much more)
-optimize=${optimize:--O2 -fomit-frame-pointer}
-
-# Make symbol table listings les voluminous
-nmopts=-gp
-
-# Set reg_infty -- the maximum allowable number of repeats in regular
-# expressions such as /a{1,$max_repeats}/, and the maximum number of
-# times /a*/ will match. Setting this too high without having a stack
-# large enough to accommodate deep recursion in the regular expression
-# engine allows perl to crash your Mac due to stack overrun if it
-# encounters a pathological regular expression. The default is a
-# compromise between capability and required stack size (see below).
-# You may override the default value from the Configure command-line
-# like this:
-#
-# Configure -Dreg_infty=16368 ...
-
-reg_infty=${reg_infty:-2047}
-
-# If you want to have many perl processes active simultaneously --
-# processing CGI forms -- for example, you should opt for a small stack.
-# For safety, you should set reg_infty no larger than the corresponding
-# value given in this table:
-#
-# Stack size reg_infty value supported
-# ---------- -------------------------
-# 128k 2**8-1 (256)
-# 256k 2**9-1 (511)
-# 512k 2**10-1 (1023)
-# 1M 2**11-1 (2047)
-# ...
-# 16M 2**15-1 (32767) (perl's default value)
-
-# This script selects a safe stack size based on the value of reg_infty
-# specified above. However, you may choose to take a risk and set
-# stack size lower: pathological regular expressions are rare in real-world
-# programs. But be aware that, if perl does encounter one, it WILL
-# crash your system. Do not set stack size lower than 96k unless
-# you want perl's installation tests ( make test ) to crash your system.
-#
-# You may override the default value from the Configure command-line
-# by specifying the required size in kilobytes like this:
-#
-# Configure -Dstack_size=96
-
-if [ "X$stack_size" = 'X' ]
-then
- stack_size=128
- X=`expr $reg_infty / 256`
-
- while [ $X -gt 0 ]
- do
- X=`expr $X / 2`
- stack_size=`expr $stack_size \* 2`
- done
- X=`expr $stack_size \* 1024`
-fi
-
-ldflags="$ldflags -Xlstack=$X"
-ccflags="$ccflags -DREG_INFTY=$reg_infty"
-
-# Install in /usr/local by default
-prefix='/usr/local'
-
-# At least on PowerMac, doubles must be aligned on 8 byte boundaries.
-# I don't know if this is true for all MachTen systems, or how to
-# determine this automatically.
-alignbytes=8
-
-# 4.0.2 and earlier had a problem with perl's use of sigsetjmp and
-# friends. Use setjmp and friends instead.
-expr "$osvers" \< "4.0.3" > /dev/null && d_sigsetjmp='undef'
-
-# System V IPC before MachTen 4.1.4 is incomplete (missing msg function
-# prototypes, no ftok()), buggy (semctl(.., .., IPC_STATUS, ..) hangs
-# system), and undocumented. Claim it's not there at all before 4.1.4.
-if expr "$osvers" \< "4.1.4" >/dev/null
-then
-d_msg=${d_msg:-undef}
-d_sem=${d_sem:-undef}
-d_shm=${d_shm:-undef}
-fi
-
-
-# As of MachTen 4.1.4 the msg* and shm* are in libc but unimplemented
-# (an attempt to use them causes a runtime error)
-# XXX Configure probe for really functional msg*() is needed XXX
-# XXX Configure probe for really functional shm*() is needed XXX
-if test "$d_msg" = ""; then
- d_msgget=${d_msgget:-undef}
- d_msgctl=${d_msgctl:-undef}
- d_msgsnd=${d_msgsnd:-undef}
- d_msgrcv=${d_msgrcv:-undef}
- case "$d_msgget$d_msgsnd$d_msgctl$d_msgrcv" in
- *"undef"*) d_msg="$undef" ;;
- esac
-fi
-if test "$d_shm" = ""; then
- d_shmat=${d_shmat:-undef}
- d_shmdt=${d_shmdt:-undef}
- d_shmget=${d_shmget:-undef}
- d_shmctl=${d_shmctl:-undef}
- case "$d_shmat$d_shmctl$d_shmdt$d_shmget" in
- *"undef"*) d_shm="$undef" ;;
- esac
-fi
-
-# MachTen has stubs for mmap and munmap(), but they just result in the
-# caller being killed on the grounds of "Bad system call"
-d_mmap=${d_mmap:-undef}
-d_munmap=${d_munmap:-undef}
-
-# Get rid of some extra libs which it takes Configure a tediously
-# long time never to find on MachTen, or which break perl
-set `echo X "$libswanted "|sed -e 's/ net / /' -e 's/ socket / /' \
- -e 's/ inet / /' -e 's/ nsl / /' -e 's/ nm / /' -e 's/ malloc / /' \
- -e 's/ ld / /' -e 's/ sun / /' -e 's/ posix / /' \
- -e 's/ cposix / /' -e 's/ crypt / /' -e 's/ dl / /' -e 's/ dld / /' \
- -e 's/ ucb / /' -e 's/ bsd / /' -e 's/ BSD / /' -e 's/ PW / /'`
-shift
-libswanted="$*"
-
-# While link counts on MachTen 4.1's fast file systems work correctly,
-# on Macintosh Heirarchical File Systems, (and on HFS+)
-# MachTen always reports ony two links to directories, even if they
-# contain subdirectories. Consequently, we use this variable to stop
-# File::Find using the link count to determine whether there are
-# subdirectories to be searched. This will generate a harmless message:
-# Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
-# Propagating recommended variable dont_use_nlink
-dont_use_nlink=define
-
-cat <<EOM >&4
-
-During Configure, you may see the message
-
-*** WHOA THERE!!! ***
- The recommended value for \$d_msg on this machine was "undef"!
- Keep the recommended value? [y]
-
-as well as similar messages concerning \$d_sem and \$d_shm. Select the
-default answers: MachTen 4.1 appears to provide System V IPC support,
-but it is incomplete and buggy: perl should be built without it.
-Similar considerations apply to memory mapping of files, controlled
-by \$d_mmap and \$d_munmap.
-
-Similarly, when you see
-
-*** WHOA THERE!!! ***
- The recommended value for \$d_vfork on this machine was "define"!
- Keep the recommended value? [y]
-
-select the default answer: vfork() works, and avoids expensive data
-copying.
-
-You may also see "WHOA THERE!!!" messages concerning \$d_getspnam.
-Select the default answer: MachTen's support for shadow password
-file access is incomplete, and should not be used.
-
-At the end of Configure, you will see a harmless message
-
-Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
- Propagating recommended variable dont_use_nlink
- Propagating recommended variable nmopts
- Propagating recommended variable malloc_cflags...
- Propagating recommended variable reg_infty
- Propagating recommended variable system_alloc_alignment
-Read the File::Find documentation for more information about dont_use_nlink
-
-Your perl will be built with a stack size of ${stack_size}k and a regular
-expression repeat count limit of $reg_infty. If you want alternative
-values, see the file hints/machten.sh for advice on how to change them.
-
-Tests
- io/fs test 4 and
- op/stat test 3
-may fail since MachTen may not return a useful nlinks field to stat
-on directories.
-
-EOM
-expr "$osvers" \< "4.1" >/dev/null && test -r ./broken-db.msg && \
- . ./broken-db.msg
-
-unset stack_size X
diff --git a/contrib/perl5/hints/machten_2.sh b/contrib/perl5/hints/machten_2.sh
deleted file mode 100644
index bc7dde4..0000000
--- a/contrib/perl5/hints/machten_2.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-# machten.sh
-# This file has been put together by Mark Pease <peasem@primenet.com>
-# Comments, questions, and improvements welcome!
-#
-# MachTen does not support dynamic loading. If you wish to, you
-# can fetch, compile, and install the dld package.
-# This ought to work with the ext/DynaLoader/dl_dld.xs in the
-# perl5 package. Have fun!
-# Some possible locations for dld:
-# ftp-swiss.ai.mit.edu:pub/scm/dld-3.2.7.tar.gz
-# prep.ai.mit.edu:/pub/gnu/jacal/dld-3.2.7.tar.gz
-# ftp.cs.indiana.edu:/pub/scheme-repository/imp/SCM-support/dld-3.2.7.tar.gz
-# tsx-11.mit.edu:/pub/linux/sources/libs/dld-3.2.7.tar.gz
-#
-# Original version was for MachTen 2.1.1.
-# Last modified by Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Tue Aug 13 12:31:01 EDT 1996
-#
-# Warning about tests which no longer fail
-# fixed by Tom Phoenix <rootbeer@teleport.com>
-# March 5, 1997
-#
-# Locale, optimization, and malloc changes by Tom Phoenix Mar 15, 1997
-#
-# groupstype change and note about t/lib/findbin.t by Tom, Mar 24, 1997
-
-# MachTen's ability to have valid filepaths beginning with "//" may
-# be causing lib/FindBin.pm to fail. I don't know how to fix it, but
-# the reader is encouraged to do so! :-) -- Tom
-
-# There seem to be some hard-to-diagnose problems under MachTen's
-# malloc, so we'll use Perl's. If you have problems which Perl's
-# malloc's diagnostics can't help you with, you may wish to use
-# MachTen's malloc after all.
-case "$usemymalloc" in
-'') usemymalloc='y' ;;
-esac
-
-# I (Tom Phoenix) don't know how to test for locales on MachTen. (If
-# you do, please fix this hints file!) But since mine didn't come
-# with locales working out of the box, I'll assume that's the case
-# for most folks.
-case "$d_setlocale" in
-'') d_setlocale=undef
-esac
-
-# MachTen doesn't have secure setid scripts
-d_suidsafe='undef'
-
-# groupstype should be gid_t, as near as I can tell, but it only
-# seems to work right when it's int.
-groupstype='int'
-
-case "$optimize" in
-'') optimize='-O2' ;;
-esac
-
-so='none'
-# These are useful only if you have DLD, but harmless otherwise.
-# Make sure gcc doesn't use -fpic.
-cccdlflags=' ' # That's an empty space.
-lddlflags='-r'
-dlext='o'
-
-# MachTen does not support POSIX enough to compile the POSIX module.
-useposix=false
-
-#MachTen might have an incomplete Berkeley DB implementation.
-i_db=$undef
-
-#MachTen versions 2.X have no hard links. This variable is used
-# by File::Find.
-# This will generate a harmless message:
-# Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
-# Propagating recommended variable dont_use_nlink
-# Without this, tests io/fs #4 and op/stat #3 will fail.
-dont_use_nlink=define
-
-cat <<'EOM' >&4
-
-During Configure, you may get two "WHOA THERE" messages, for $d_setlocale
-and $i_db being 'undef'. You may keep the undef value.
-
-At the end of Configure, you will see a harmless message
-
-Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
- Propagating recommended variable dont_use_nlink
-
-Read the File::Find documentation for more information.
-
-It's possible that test t/lib/findbin.t will fail on some configurations
-of MachTen.
-
-EOM
diff --git a/contrib/perl5/hints/mint.sh b/contrib/perl5/hints/mint.sh
deleted file mode 100644
index b9a7886..0000000
--- a/contrib/perl5/hints/mint.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-# hints/mint.sh
-#
-# talk to gufl0000@stud.uni-sb.de if you want to change this file.
-# Please read the README.mint file.
-#
-# misc stuff
-
-case `uname -m` in
- atarist*) archname="m68000-mint"
- ;;
- *) archname="m68k-mint"
- ;;
-esac
-
-here=`pwd | tr -d '\015'`
-
-cc='gcc'
-
-# The weird include path is really to work around some bugs in
-# broken system header files.
-ccflags="$ccflags -D__MINT__ -Uatarist -DDEBUGGING -I$here/../mint"
-
-# libs
-
-libpth="$prefix/lib /usr/lib /usr/local/lib"
-glibpth="$libpth"
-xlibpth="$libpth"
-
-libswanted='gdbm socket port m'
-so='none'
-
-#
-# compiler & linker flags
-#
-optimize='-O2 -fomit-frame-pointer -fno-defer-pop -fstrength-reduce'
-
-# The setlocale function in the MiNTLib is actually a bad joke. We
-# lend a workaround from Ultrix. If neither LC_ALL nor LANG is
-# set in the environment, perl won't complain. If one is set to
-# anything but "C" you will see a warning. Note that you can
-# still use the GNU extension "$LANGUAGE" if you want to use
-# the i18n features of some GNU packages.
-util_cflags='ccflags="$ccflags -DLOCALE_ENVIRON_REQUIRED"'
-
-#
-# Some good answers to the questions in Configure:
-# Does Configure really get all these wrong?
-usenm='true'
-d_suidsafe='true'
-clocktype='long'
-usevfork='true'
-d_fsetpos='fpos_t'
-gidtype='gid_t'
-groupstype='gid_t'
-lseektype='long'
-modetype='mode_t'
-sizetype='size_t'
-timetype='time_t'
-uidtype='uid_t'
-
-# Don't remove that leading tab character (Configure Black Magic (TM)).
- broken_pwd=
-case "`/bin/pwd|tr -d xy|tr '\015\012' 'xy'`" in
-*xy) broken_pwd=yes ;;
-esac
-
-if test X"$broken_pwd" = Xyes
-then
- echo " "
- echo "*** Building fixed 'pwd'... (as described in README.mint) ***"
- echo " "
- cd mint
- make pwd
- cd ..
- if test -x mint/pwd -a -w /usr/bin
- then
- echo " "
- echo "*** Installing fixed 'pwd'... ***"
- echo " "
- cd mint
- make install
- cd ..
- if cmp -s mint/pwd /usr/bin/pwd
- then
- echo "*** Installed fixed 'pwd' successfully. ***"
- else
- echo "*** Failed to install fixed 'pwd'. Aborting. ***"
- exit 1
- fi
- else
- echo "*** Cannot install fixed 'pwd'. Aborting. ***"
- exit 1
- fi
-fi
diff --git a/contrib/perl5/hints/mips.sh b/contrib/perl5/hints/mips.sh
deleted file mode 100644
index bc0b7e8..0000000
--- a/contrib/perl5/hints/mips.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-perl_cflags='optimize="-g"'
-d_volatile=undef
-d_castneg=undef
-cc=cc
-glibpth="/usr/lib/cmplrs/cc $glibpth"
-groupstype=int
-nm_opt='-B'
-case $PATH in
-*bsd*:/bin:*) cat <<END >&4
-NOTE: Some people have reported having much better luck with Mips CC than
-with the BSD cc. Put /bin first in your PATH if you have difficulties.
-END
-;;
-esac
diff --git a/contrib/perl5/hints/mpc.sh b/contrib/perl5/hints/mpc.sh
deleted file mode 100644
index da6fcc9..0000000
--- a/contrib/perl5/hints/mpc.sh
+++ /dev/null
@@ -1 +0,0 @@
-ccflags="$ccflags -X18"
diff --git a/contrib/perl5/hints/mpeix.sh b/contrib/perl5/hints/mpeix.sh
deleted file mode 100644
index d2ca5f0..0000000
--- a/contrib/perl5/hints/mpeix.sh
+++ /dev/null
@@ -1,135 +0,0 @@
-# The MPE/iX linker doesn't complain about unresolved symbols, and so the only
-# way to test for unresolved symbols in a program is by attempting to run it.
-# But this is slow, and fraught with problems, so the better solution is to use
-# nm.
-#
-# MPE/iX lacks a fully functional native nm, so we need to use our fake nm
-# script which will extract the symbol info from the native link editor and
-# reformat into something nm-like.
-#
-# Created for 5.003 by Mark Klein, mklein@dis.com.
-# Substantially revised for 5.004_01 by Mark Bixby, markb@cccd.edu.
-# Revised again for 5.004_69 by Mark Bixby, markb@cccd.edu.
-# Revised for 5.6.0 by Mark Bixby, mbixby@power.net.
-#
-osname='mpeix'
-osvers=`uname -r | sed -e 's/.[A-Z]\.\([0-9]\)\([0-9]\)\.[0-9][0-9]/\1.\2/'`
-#
-# Force Configure to use our wrapper mpeix/nm script
-#
-PATH="$PWD/mpeix:$PATH"
-nm="$PWD/mpeix/nm"
-_nm=$nm
-nm_opt='-configperl'
-usenm='true'
-#
-# Various directory locations.
-#
-# Which ones of these does Configure get wrong?
-test -z "$prefix" && prefix='/PERL/PUB'
-archname='PA-RISC1.1'
-bin="$prefix"
-installman1dir="$prefix/man/man1"
-installman3dir="$prefix/man/man3"
-man1dir="$prefix/man/man1"
-man3dir="$prefix/man/man3"
-perlpath="$prefix/PERL"
-scriptdir="$prefix"
-startperl="#!$prefix/perl"
-startsh='#!/bin/sh'
-#
-# Compiling.
-#
-test -z "$cc" && cc='gcc'
-cccdlflags='none'
-ccflags="$ccflags -DMPE -D_POSIX_SOURCE -D_SOCKET_SOURCE -D_POSIX_JOB_CONTROL -DIS_SOCKET_CLIB_ITSELF"
-locincpth="$locincpth /usr/local/include /usr/contrib/include /BIND/PUB/include"
-test -z "$optimize" && optimize="-O2"
-ranlib='/bin/true'
-# Special compiling options for certain source files.
-# But what if you want -g?
-regcomp_cflags='optimize=-O'
-toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"'
-#
-# Linking.
-#
-lddlflags='-b'
-# Delete bsd and BSD from the library list. Remove other randomly ordered
-# libraries and then re-add them in their proper order (the MPE linker is
-# order-sensitive). Add additional MPE-specific libraries.
-for mpe_remove in bind bsd BSD c curses m socket str svipc syslog; do
- set `echo " $libswanted " | sed -e 's/ / /g' -e "s/ $mpe_remove //"`
- libswanted="$*"
-done
-libswanted="$libswanted bind syslog curses svipc socket str m c"
-loclibpth="$loclibpth /usr/local/lib /usr/contrib/lib /BIND/PUB/lib /SYSLOG/PUB"
-#
-# External functions and data items.
-#
-# Q: Does Configure *really* get *all* of these wrong?
-#
-# A: Yes. There are two MPE problems here. The 'undef' functions exist on MPE,
-# but are merely dummy routines that return ENOTIMPL or ESYSERR. Since they're
-# useless, let's just tell Perl to avoid them. Also, a few data items are
-# 'undef' because while they may exist in structures, they are uninitialized.
-#
-# The 'define' cases are a bit weirder. MPE has a libc.a, libc.sl, and two
-# special kernel shared libraries, /SYS/PUB/XL and /SYS/PUB/NL. Much of what
-# is in libc.a is duplicated within XL and NL, so when we created libc.sl, we
-# omitted the duplicated functions. Since Configure end ups scanning libc.sl,
-# we need to 'define' the functions that had been removed.
-#
-# We don't want to scan XL or NL because we would find way too many POSIX or
-# Unix named functions that are really vanilla MPE functions that do something
-# completely different than on POSIX or Unix.
-d_crypt='define'
-d_difftime='define'
-d_dlerror='undef'
-d_dlopen='undef'
-d_Gconvert='gcvt((x),(n),(b))'
-d_inetaton='undef'
-d_link='undef'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_pwage='undef'
-d_pwcomment='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_setpgid='undef'
-d_setsid='undef'
-d_setvbuf='define'
-d_statblks='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strtod='define'
-d_strtol='define'
-d_strtoul='define'
-d_strxfrm='define'
-d_syserrlst='define'
-d_time='define'
-d_wcstombs='define'
-d_wctomb='define'
-#
-# Include files.
-#
-i_termios='undef' # we have termios, but not the full set (just tcget/setattr)
-i_time='define'
-i_systime='undef'
-i_systimek='undef'
-timeincl='/usr/include/time.h'
-#
-# Data types.
-#
-timetype='time_t'
-#
-# Functionality.
-#
-bincompat5005="$undef"
-uselargefiles="$undef"
diff --git a/contrib/perl5/hints/ncr_tower.sh b/contrib/perl5/hints/ncr_tower.sh
deleted file mode 100644
index 7ddb923..0000000
--- a/contrib/perl5/hints/ncr_tower.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-# For SysV release 2, there are no directory functions defined. To
-# prevent compile errors, acquire the functions written by Doug Gwynn.
-# They are contained in dirent.tar.gz and can be accessed from gnu
-# repositories, as well as other places.
-#
-# The following hints have been verified to work with PERL5 (001m) on
-# SysVr2 with the following caveat(s):
-# 1. Maximum User program space (MAXSPACE) must be at least 2MB.
-# 2. The directory functions mentioned above have been installed.
-#
-optimize='-O0'
-ccflags="$ccflags -W2,-Sl,1500 -W0,-Sp,350,-Ss,2500 -Wp,-Sd,30"
-d_mkdir=$undef
-usemymalloc='y'
-useposix='false'
-so='none'
diff --git a/contrib/perl5/hints/netbsd.sh b/contrib/perl5/hints/netbsd.sh
deleted file mode 100644
index 7bd0a25..0000000
--- a/contrib/perl5/hints/netbsd.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-# hints/netbsd.sh
-#
-# talk to packages@netbsd.org if you want to change this file.
-#
-# netbsd keeps dynamic loading dl*() functions in /usr/lib/crt0.o,
-# so Configure doesn't find them (unless you abandon the nm scan).
-# this should be *just* 0.9 below as netbsd 0.9a was the first to
-# introduce shared libraries.
-
-case "$archname" in
-'')
- archname=`uname -m`-${osname}
- ;;
-esac
-
-case "$osvers" in
-0.9|0.8*)
- usedl="$undef"
- ;;
-*)
- if [ -f /usr/libexec/ld.elf_so ]; then
- d_dlopen=$define
- d_dlerror=$define
- ccdlflags="-Wl,-E -Wl,-R${PREFIX}/lib $ccdlflags"
- cccdlflags="-DPIC -fPIC $cccdlflags"
- lddlflags="--whole-archive -shared $lddlflags"
- elif [ "`uname -m`" = "pmax" ]; then
-# NetBSD 1.3 and 1.3.1 on pmax shipped an `old' ld.so, which will not work.
- d_dlopen=$undef
- elif [ -f /usr/libexec/ld.so ]; then
- d_dlopen=$define
- d_dlerror=$define
- ccdlflags="-Wl,-R${PREFIX}/lib $ccdlflags"
-# we use -fPIC here because -fpic is *NOT* enough for some of the
-# extensions like Tk on some netbsd platforms (the sparc is one)
- cccdlflags="-DPIC -fPIC $cccdlflags"
- lddlflags="-Bshareable $lddlflags"
- else
- d_dlopen=$undef
- fi
- ;;
-esac
-
-# netbsd had these but they don't really work as advertised, in the
-# versions listed below. if they are defined, then there isn't a
-# way to make perl call setuid() or setgid(). if they aren't, then
-# ($<, $>) = ($u, $u); will work (same for $(/$)). this is because
-# you can not change the real userid of a process under 4.4BSD.
-# netbsd fixed this in 1.3.2.
-case "$osvers" in
-0.9*|1.[012]*|1.3|1.3.1)
- d_setregid="$undef"
- d_setreuid="$undef"
- ;;
-esac
-
-# These are obsolete in any netbsd.
-d_setrgid="$undef"
-d_setruid="$undef"
-
-# there's no problem with vfork.
-case "$usevfork" in
-'') usevfork=true ;;
-esac
-
-# Pre-empt the /usr/bin/perl question of installperl.
-installusrbinperl='n'
-
-# Recognize the NetBSD packages collection.
-# GDBM might be here.
-test -d /usr/pkg/lib && loclibpth="$loclibpth /usr/pkg/lib"
-test -d /usr/pkg/include && locincpth="$locincpth /usr/pkg/include"
diff --git a/contrib/perl5/hints/newsos4.sh b/contrib/perl5/hints/newsos4.sh
deleted file mode 100644
index 3e447a5..0000000
--- a/contrib/perl5/hints/newsos4.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# hints file for NEWS-OS 4.x
-#
-
-echo
-echo 'Compiling Tips:'
-echo 'When you have found that ld complains "multiple defined" error'
-echo 'on linking /lib/libdbm.a, do following instructions.'
-echo ' cp /lib/libdbm.a dbm.o (copy current libdbm.a)'
-echo ' ar cr libdbm.a dbm.o (make archive)'
-echo ' mv /lib/libdbm.a /lib/libdbm.a.backup (backup original library)'
-echo ' cp libdbm.a /lib (copy newer one)'
-echo ' ranlib /lib/libdbm.a (ranlib for later use)'
-echo
-
-# No shared library.
-so='none'
-# Umm.. I like gcc.
-cc='gcc'
-# Configure does not find out where is libm.
-plibpth='/usr/lib/cmplrs/cc'
-# times() returns 'struct tms'
-clocktype='struct tms'
-# getgroups(2) returns integer (not gid_t)
-groupstype='int'
-# time(3) returns long (not time_t)
-timetype='long'
-# filemode type is int (not mode_t)
-modetype='int'
-# using sprintf(3) instead of gcvt(3)
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-# No POSIX.
-useposix='false'
diff --git a/contrib/perl5/hints/next_3.sh b/contrib/perl5/hints/next_3.sh
deleted file mode 100644
index 27c9bd9..0000000
--- a/contrib/perl5/hints/next_3.sh
+++ /dev/null
@@ -1,141 +0,0 @@
-# This file has been put together by Anno Siegel <siegel@zrz.TU-Berlin.DE>,
-# Andreas Koenig <k@franz.ww.TU-Berlin.DE> and Gerd Knops <gerti@BITart.com>.
-# Comments, questions, and improvements welcome!
-#
-# These hints work for NeXT 3.2 and 3.3. 3.0 has it's own
-# special hint file.
-#
-
-######################################################################
-# THE MALLOC STORY
-######################################################################
-# 1994:
-# the simple program `for ($i=1;$i<38771;$i++){$t{$i}=123}' fails
-# with Larry's malloc on NS 3.2 due to broken sbrk()
-#
-# setting usemymalloc='n' was the solution back then. Later came
-# reports that perl would run unstable on 3.2:
-#
-# 1996:
-# From about perl5.002beta1h perl became unstable on the
-# NeXT. Intermittent coredumps were frequent on 3.2 OS. There were
-# reports, that the developer version of 3.3 didn't have problems, so it
-# seemed pretty obvious that we had to work around an malloc bug in 3.2.
-# This hints file reflects a patch to perl5.002_01 that introduces a
-# home made sbrk routine (remember, NeXT's sbrk _never_ worked). This
-# sbrk makes it possible to run perl with its own malloc. Thanks to
-# Ilya who showed me the way to his sbrk for OS/2!!
-#
-# The whole malloc desaster lead to a failing gdbm test. It is far
-# beyond my understanding, why GDBM_File breaks with the "fix", but in
-# general I consider it better to have a working perl with broken GDBM
-# than no perl at all.
-#
-# So, this hintsfile is using perl's malloc. If you want to turn
-# perl's malloc off, you need to remove '-DUSE_PERL_SBRK'
-# from the ccflags and set usemymalloc to 'n'.
-#
-# 1997:
-# From perl5.003_22 the malloc bug has no impact any more. We can run
-# a perl without a special sbrk. Apparently Chip Salzenberg, the hero
-# of 5.004 anyway, earned another trophy during Australien Open.
-#
-# use the following two lines to enable USE_PERL_SBRK. Try this if you
-# encounter intermittent core dumps:
-#ccflags='-DUSE_NEXT_CTYPE -DUSE_PERL_SBRK'
-#usemymalloc='y'
-# use the following two lines if you have perl5.003_22 or better and
-# do not encounter intermittent core dumps.
-
-ccflags="$ccflags -DUSE_NEXT_CTYPE"
-usemymalloc='n'
-
-######################################################################
-# End of the MALLOC story
-######################################################################
-
-ldflags='-u libsys_s'
-libswanted='dbm gdbm db'
-
-lddlflags='-nostdlib -r'
-# Give cccdlflags an empty value since Configure will detect we are
-# using GNU cc and try to specify -fpic for cccdlflags.
-cccdlflags=' '
-
-######################################################################
-# MAB support
-######################################################################
-# By default we will build for all architectures your development
-# environment supports. If you only want to build for the platform
-# you are on, simply comment or remove the line below.
-#
-# If you want to build for specific architectures, change the line
-# below to something like
-#
-# archs='m68k i386'
-#
-archs=`/bin/lipo -info /usr/lib/libm.a | sed -n 's/^[^:]*:[^:]*: //p'`
-
-#
-# leave the following part alone
-#
-archcount=`echo $archs |wc -w`
-if [ $archcount -gt 1 ]
-then
- for d in $archs
- do
- mabflags="$mabflags -arch $d"
- done
- ccflags="$ccflags $mabflags"
- ldflags="$ldflags $mabflags"
- lddlflags="$lddlflags $mabflags"
- archname='next-fat'
-fi
-######################################################################
-# END MAB support
-######################################################################
-ld='cc'
-
-i_utime='undef'
-groupstype='int'
-direntrytype='struct direct'
-d_strcoll='undef'
-d_uname='define'
-#
-# At least on m68k there are situations when memcmp doesn't behave
-# as expected. So we'll use perl's memcmp.
-#
-d_sanemcmp='undef'
-# setpgid() is in the posix library, but we don't use -posix, so
-# we don't see it. ext/POSIX/POSIX.xs *does* use -posix, so
-# setpgid is still available as POSIX::setpgid.
-# See ext/POSIX/POSIX/hints/next.pl.
-d_setpgid='undef'
-d_setsid='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-
-#
-# On some NeXT machines, the timestamp put by ranlib is not correct, and
-# this may cause useless recompiles. Fix that by adding a sleep before
-# running ranlib. The '5' is an empirical number that's "long enough."
-#
-ranlib='sleep 5; /bin/ranlib'
-
-#
-# There where reports that the compiler on HPPA machines
-# fails with the -O flag on pp.c.
-# Compiling pp.c with -O for HPPA machines results in a broken perl.
-# This is true whether we're on an HPPA machine or cross-compiling
-# for one.
-pp_cflags='optimize=""'
-
-# The SysV IPC is optional (ftp://ftp.nluug.nl/pub/comp/next/SysVIPC/)
-# Gerben_Wierda@RnA.nl
-if [ -f /usr/local/lib/libIPC.a ]; then
- libswanted="$libswanted IPC"
- # As of Sep 1998 d_msg wasn't supported in that library,
- # only d_sem and d_shm, but Configure should be able to
- # figure that out. --jhi
- # Note also the next3 ext/IPC/SysV hints file.
-fi
diff --git a/contrib/perl5/hints/next_3_0.sh b/contrib/perl5/hints/next_3_0.sh
deleted file mode 100644
index b444578..0000000
--- a/contrib/perl5/hints/next_3_0.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-# This file has been put together by Anno Siegel <siegel@zrz.TU-Berlin.DE>
-# and Andreas Koenig <k@franz.ww.TU-Berlin.DE>. Comments, questions, and
-# improvements welcome!
-
-# This file was modified to work on NS 3.0 by Kevin White
-# <klwhite@magnus.acs.ohio-state.edu>, based on suggestions by Andreas
-# Koenig and Andy Dougherty.
-
-echo With NS 3.0 you won\'t be able to use the POSIX module. >&4
-echo Be aware that some of the tests that are run during \"make test\" >&4
-echo will fail due to the lack of POSIX support on this system. >&4
-echo >&4
-echo Also, if you have the GDBM installed, make sure the header file >&4
-echo is located at a place on the system where the C compiler will >&4
-echo find it. By default, it is placed in /usr/local/include/gdbm.h. >&4
-echo It will not be found there. Try moving it to >&4
-echo /NextDeveloper/Headers/bsd/gdbm.h. >&4
-
-ccflags="$ccflags -DUSE_NEXT_CTYPE -DNEXT30_NO_ATTRIBUTE"
-POSIX_cflags='ccflags="-posix $ccflags"'
-useposix='undef'
-ldflags="$ldflags -u libsys_s"
-libswanted="$libswanted dbm gdbm db"
-#
-lddlflags='-r'
-# Give cccdlflags an empty value since Configure will detect we are
-# using GNU cc and try to specify -fpic for cccdlflags.
-cccdlflags=' '
-#
-i_utime='undef'
-groupstype='int'
-direntrytype='struct direct'
-d_strcoll='undef'
-# the simple program `for ($i=1;$i<38771;$i++){$t{$i}=123}' fails
-# with Larry's malloc on NS 3.2 due to broken sbrk()
-usemymalloc='n'
-d_uname='define'
-
-# Thanks to Etienne Grossman <etienne@isr.isr.ist.utl.pt> for sending
-# the correct values for perl5.003_11 for the following 4
-# variables. For older version all four were defined.
-d_setsid='undef'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_setpgid='undef'
-
-#
-# On some NeXT machines, the timestamp put by ranlib is not correct, and
-# this may cause useless recompiles. Fix that by adding a sleep before
-# running ranlib. The '5' is an empirical number that's "long enough."
-# (Thanks to Andreas Koenig <k@franz.ww.tu-berlin.de>)
-ranlib='sleep 5; /bin/ranlib'
-
diff --git a/contrib/perl5/hints/next_4.sh b/contrib/perl5/hints/next_4.sh
deleted file mode 100644
index d5c8ba7..0000000
--- a/contrib/perl5/hints/next_4.sh
+++ /dev/null
@@ -1,102 +0,0 @@
-# Posix support has been removed from NextStep
-#
-useposix='undef'
-
-libpth='/lib /usr/lib /usr/local/lib'
-libswanted=' '
-libc='/NextLibrary/Frameworks/System.framework/System'
-
-ldflags="$ldflags -dynamic -prebind"
-lddlflags="$lddlflags -dynamic -bundle -undefined suppress"
-ccflags="$ccflags -dynamic -fno-common -DUSE_NEXT_CTYPE -DUSE_PERL_SBRK"
-cccdlflags='none'
-ld='cc'
-#optimize='-g -O'
-
-######################################################################
-# MAB support
-######################################################################
-# By default we will build for all architectures your development
-# environment supports. If you only want to build for the platform
-# you are on, simply comment or remove the line below.
-#
-# If you want to build for specific architectures, change the line
-# below to something like
-#
-# archs='m68k i386'
-#
-
-# On m68k machines, toke.c cannot be compiled at all for i386 and it can
-# only be compiled for m68k itself without optimization (this is under
-# OPENSTEP 4.2).
-#
-if [ `hostinfo | grep 'NeXT Mach.*:' | sed 's/.*RELEASE_//'` = M68K ]
-then
- echo "Cross compilation is impossible on m68k hardware under OS 4"
- echo "Forcing architecture to m68k only"
- toke_cflags='optimize=""'
- archs='m68k'
-else
- archs=`/bin/lipo -info /usr/lib/libm.a | sed -n 's/^[^:]*:[^:]*: //p'`
-fi
-
-#
-# leave the following part alone
-#
-archcount=`echo $archs |wc -w`
-if [ $archcount -gt 1 ]
-then
- for d in $archs
- do
- mabflags="$mabflags -arch $d"
- done
- ccflags="$ccflags $mabflags"
- ldflags="$ldflags $mabflags"
- lddlflags="$lddlflags $mabflags"
-fi
-######################################################################
-# END MAB support
-######################################################################
-
-useshprlib='true'
-dlext='bundle'
-so='dylib'
-
-#
-# The default prefix would be '/usr/local'. But since many people are
-# likely to have still 3.3 machines on their network, we do not want
-# to overwrite possibly existing 3.3 binaries.
-# You can use Configure -Dprefix=/foo/bar to override this, or simply
-# remove the lines below.
-#
-case "$prefix" in
-'') prefix='/usr/local/OPENSTEP' ;;
-esac
-
-archname='OPENSTEP-Mach'
-
-#
-# At least on m68k there are situations when memcmp doesn't behave
-# as expected. So we'll use perl's memcmp.
-#
-d_sanemcmp='undef'
-
-d_strcoll='undef'
-i_dbm='define'
-i_utime='undef'
-groupstype='int'
-direntrytype='struct direct'
-
-usemymalloc='y'
-clocktype='int'
-
-#
-# On some NeXT machines, the timestamp put by ranlib is not correct, and
-# this may cause useless recompiles. Fix that by adding a sleep before
-# running ranlib. The '5' is an empirical number that's "long enough."
-# (Thanks to Andreas Koenig <k@franz.ww.tu-berlin.de>)
-ranlib='sleep 5; /bin/ranlib'
-
-case "$ldlibpthname" in
-'') ldlibpthname=DYLD_LIBRARY_PATH ;;
-esac
diff --git a/contrib/perl5/hints/nonstopux.sh b/contrib/perl5/hints/nonstopux.sh
deleted file mode 100644
index aec05ee..0000000
--- a/contrib/perl5/hints/nonstopux.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-# tom_bates@att.net
-# mips-compaq-nonstopux
-
-. $src/hints/svr4.sh
-
-case "$cc" in
- *gcc*)
- ccflags='-fno-strict-aliasing'
- lddlflags='-shared'
- ldflags=''
- ;;
- *)
- cc="cc -Xa -Olimit 4096"
- malloctype="void *"
- ;;
-esac
-
diff --git a/contrib/perl5/hints/openbsd.sh b/contrib/perl5/hints/openbsd.sh
deleted file mode 100644
index 2578157..0000000
--- a/contrib/perl5/hints/openbsd.sh
+++ /dev/null
@@ -1,120 +0,0 @@
-# hints/openbsd.sh
-#
-# hints file for OpenBSD; Todd Miller <millert@openbsd.org>
-# Edited to allow Configure command-line overrides by
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-#
-# To build with distribution paths, use:
-# ./Configure -des -Dopenbsd_distribution=defined
-#
-
-# OpenBSD has a better malloc than perl...
-test "$usemymalloc" || usemymalloc='n'
-
-# Currently, vfork(2) is not a real win over fork(2) but this will
-# change starting with OpenBSD 2.7.
-usevfork='true'
-
-# setre?[ug]id() have been replaced by the _POSIX_SAVED_IDS versions
-# in 4.4BSD. Configure will find these but they are just emulated
-# and do not have the same semantics as in 4.3BSD.
-d_setregid=$undef
-d_setreuid=$undef
-d_setrgid=$undef
-d_setruid=$undef
-
-#
-# Not all platforms support dynamic loading...
-#
-ARCH=`arch|sed 's/^OpenBSD.//'`
-case "${ARCH}-${osvers}" in
-alpha-*|mips-*|vax-*|powerpc-2.[0-7]|m88k-*)
- usedl=$undef
- ;;
-*)
- usedl=$define
- d_dlopen=$define
- d_dlerror=$define
- # we use -fPIC here because -fpic is *NOT* enough for some of the
- # extensions like Tk on some OpenBSD platforms (ie: sparc)
- cccdlflags="-DPIC -fPIC $cccdlflags"
- case "$osvers" in
- [01].*|2.[0-7]|2.[0-7].*)
- lddlflags="-Bshareable $lddlflags"
- ;;
- *) # from 2.8 onwards
- ld=${cc:-cc}
- lddlflags="-shared -fPIC $lddlflags"
- ;;
- esac
- ;;
-esac
-
-#
-# Tweaks for various versions of OpenBSD
-#
-case "$osvers" in
-2.5)
- # OpenBSD 2.5 has broken odbm support
- i_dbm=$undef
- ;;
-esac
-
-# OpenBSD doesn't need libcrypt but many folks keep a stub lib
-# around for old NetBSD binaries.
-libswanted=`echo $libswanted | sed 's/ crypt / /'`
-
-# Configure can't figure this out non-interactively
-d_suidsafe=$define
-
-# cc is gcc so we can do better than -O
-# Allow a command-line override, such as -Doptimize=-g
-case "$ARCH" in
-m88k)
- optimize='-O0'
- ;;
-*)
- test "$optimize" || optimize='-O2'
- ;;
-esac
-
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
-case "$usethreads" in
-$define|true|[yY]*)
- # any openbsd version dependencies with pthreads?
- ccflags="-pthread $ccflags"
- ldflags="-pthread $ldflags"
- libswanted="$libswanted pthread"
- # This is strange.
- usevfork="$undef"
-esac
-EOCBU
-
-# When building in the OpenBSD tree we use different paths
-# This is only part of the story, the rest comes from config.over
-case "$openbsd_distribution" in
-''|$undef|false) ;;
-*)
- # We put things in /usr, not /usr/local
- prefix='/usr'
- prefixexp='/usr'
- sysman='/usr/share/man/man1'
- libpth='/usr/lib'
- glibpth='/usr/lib'
- # Local things, however, do go in /usr/local
- siteprefix='/usr/local'
- siteprefixexp='/usr/local'
- # Ports installs non-std libs in /usr/local/lib so look there too
- locincpth='/usr/local/include'
- loclibpth='/usr/local/lib'
- # Link perl with shared libperl
- if [ "$usedl" = "$define" -a -r shlib_version ]; then
- useshrplib=true
- libperl=`. ./shlib_version; echo libperl.so.${major}.${minor}`
- fi
- ;;
-esac
-
-# end
diff --git a/contrib/perl5/hints/opus.sh b/contrib/perl5/hints/opus.sh
deleted file mode 100644
index da6fcc9..0000000
--- a/contrib/perl5/hints/opus.sh
+++ /dev/null
@@ -1 +0,0 @@
-ccflags="$ccflags -X18"
diff --git a/contrib/perl5/hints/os2.sh b/contrib/perl5/hints/os2.sh
deleted file mode 100644
index 5ffa589..0000000
--- a/contrib/perl5/hints/os2.sh
+++ /dev/null
@@ -1,365 +0,0 @@
-#! /bin/sh
-# hints/os2.sh
-# This file reflects the tireless work of
-# Ilya Zakharevich <ilya@math.ohio-state.edu>
-#
-# Trimmed and comments added by
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Exactly what is required beyond a standard OS/2 installation?
-# (see in README.os2)
-
-# Note that symbol extraction code gives wrong answers (sometimes?) on
-# gethostent and setsid.
-
-# Optimization (GNU make 3.74 cannot be loaded :-():
-emxload -m 30 sh.exe ls.exe tr.exe id.exe sed.exe # make.exe
-emxload -m 30 grep.exe egrep.exe fgrep.exe cat.exe rm.exe mv.exe cp.exe
-emxload -m 30 uniq.exe basename.exe sort.exe awk.exe echo.exe
-
-path_sep=\;
-
-if test -f $sh.exe; then sh=$sh.exe; fi
-
-startsh="#!$sh"
-cc='gcc'
-
-# Make denser object files and DLL
-case "X$optimize" in
- X)
- optimize="-O2 -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -s"
- ld_dll_optimize="-s"
- ;;
-esac
-
-# Get some standard things (indented to avoid putting in config.sh):
- oifs="$IFS"
- IFS=" ;"
- set $MANPATH
- tryman="$@"
- set $LIBRARY_PATH
- libemx="$@"
- set $C_INCLUDE_PATH
- usrinc="$@"
- IFS="$oifs"
- tryman="`./UU/loc . /man $tryman`"
- tryman="`echo $tryman | tr '\\\' '/'`"
-
- # indented to avoid having it *two* times at start
- libemx="`./UU/loc os2.a /emx/lib $libemx`"
-
-usrinc="`./UU/loc stdlib.h /emx/include $usrinc`"
-usrinc="`dirname $usrinc | tr '\\\' '/'`"
-libemx="`dirname $libemx | tr '\\\' '/'`"
-
-if test -d $tryman/man1; then
- sysman="$tryman/man1"
-else
- sysman="`./UU/loc . /man/man1 c:/man/man1 c:/usr/man/man1 d:/man/man1 d:/usr/man/man1 e:/man/man1 e:/usr/man/man1 f:/man/man1 f:/usr/man/man1 g:/man/man1 g:/usr/man/man1 /usr/man/man1`"
-fi
-
-emxpath="`dirname $libemx`"
-if test ! -d "$emxpath"; then
- emxpath="`./UU/loc . /emx c:/emx d:/emx e:/emx f:/emx g:/emx h:/emx /emx`"
-fi
-
-if test ! -d "$libemx"; then
- libemx="$emxpath/lib"
-fi
-if test ! -d "$libemx"; then
- if test -d "$LIBRARY_PATH"; then
- libemx="$LIBRARY_PATH"
- else
- libemx="`./UU/loc . X c:/emx/lib d:/emx/lib e:/emx/lib f:/emx/lib g:/emx/lib h:/emx/lib /emx/lib`"
- fi
-fi
-
-if test ! -d "$usrinc"; then
- if test -d "$emxpath/include"; then
- usrinc="$emxpath/include"
- else
- if test -d "$C_INCLUDE_PATH"; then
- usrinc="$C_INCLUDE_PATH"
- else
- usrinc="`./UU/loc . X c:/emx/include d:/emx/include e:/emx/include f:/emx/include g:/emx/include h:/emx/include /emx/include`"
- fi
- fi
-fi
-
-rsx="`./UU/loc rsx.exe undef $pth`"
-
-if test "$libemx" = "X"; then echo "Cannot find C library!" >&2; fi
-
-# Acute backslashitis:
-libpth="`echo \"$LIBRARY_PATH\" | tr ';\\\' ' /'`"
-libpth="$libpth $libemx/mt $libemx"
-
-set `cmd /c emxrev -f emxlibcm`
-emxcrtrev=$5
-# indented to not put it into config.sh
- _defemxcrtrev=-D_EMX_CRT_REV_=$emxcrtrev
-
-so='dll'
-
-# Additional definitions:
-
-firstmakefile='GNUmakefile'
-exe_ext='.exe'
-
-# We provide it
-i_dlfcn='define'
-
-aout_d_shrplib='undef'
-aout_useshrplib='false'
-aout_obj_ext='.o'
-aout_lib_ext='.a'
-aout_ar='ar'
-aout_plibext='.a'
-aout_lddlflags="-Zdll $ld_dll_optimize"
-# Cannot have 32000K stack: get SYS0170 ?!
-if [ $emxcrtrev -ge 50 ]; then
- aout_ldflags='-Zexe -Zsmall-conv -Zstack 16000'
-else
- aout_ldflags='-Zexe -Zstack 16000'
-fi
-
-# To get into config.sh:
-aout_ldflags="$aout_ldflags"
-
-aout_d_fork='define'
-aout_ccflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev"
-aout_cppflags="-DDOSISH -DPERL_IS_AOUT -DOS2=2 -DEMBED -I. $_defemxcrtrev"
-aout_use_clib='c'
-aout_usedl='undef'
-aout_archobjs="os2.o dl_os2.o"
-
-# variable which have different values for aout compile
-used_aout='d_shrplib useshrplib plibext lib_ext obj_ext ar plibext d_fork lddlflags ldflags ccflags use_clib usedl archobjs cppflags'
-
-if [ "$emxaout" != "" ]; then
- d_shrplib="$aout_d_shrplib"
- useshrplib="$aout_useshrplib"
- obj_ext="$aout_obj_ext"
- lib_ext="$aout_lib_ext"
- ar="$aout_ar"
- plibext="$aout_plibext"
- if [ $emxcrtrev -lt 50 ]; then
- d_fork="$aout_d_fork"
- fi
- lddlflags="$aout_lddlflags"
- ldflags="$aout_ldflags"
- ccflags="$aout_ccflags"
- cppflags="$aout_cppflags"
- use_clib="$aout_use_clib"
- usedl="$aout_usedl"
-else
- d_shrplib='define'
- useshrplib='true'
- obj_ext='.obj'
- lib_ext='.lib'
- ar='emxomfar'
- plibext='.lib'
- if [ $emxcrtrev -ge 50 ]; then
- d_fork='define'
- else
- d_fork='undef'
- fi
- lddlflags="-Zdll -Zomf -Zmt -Zcrtdll $ld_dll_optimize"
- # Recursive regmatch may eat 2.5M of stack alone.
- ldflags='-Zexe -Zomf -Zmt -Zcrtdll -Zstack 32000'
- if [ $emxcrtrev -ge 50 ]; then
- ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. $_defemxcrtrev"
- else
- ccflags="-Zomf -Zmt -DDOSISH -DOS2=2 -DEMBED -I. -DEMX_BAD_SBRK $_defemxcrtrev"
- fi
- use_clib='c_import'
- usedl='define'
-fi
-
-# indented to miss config.sh
- _ar="$ar"
-
-# To get into config.sh (should start at the beginning of line)
-# or you can put it into config.over.
-plibext="$plibext"
-# plibext is not needed anymore. Just directly set $libperl.
-libperl="libperl${plibext}"
-
-#libc="/emx/lib/st/c_import$lib_ext"
-libc="$libemx/mt/$use_clib$lib_ext"
-
-if test -r "$libemx/c_alias$lib_ext"; then
- libnames="$libemx/c_alias$lib_ext"
-fi
-# otherwise puts -lc ???
-
-# [Maybe we should just remove c from $libswanted ?]
-
-# Test would pick up wrong rand, so we hardwire the value for random()
-libs='-lsocket -lm -lbsd'
-randbits=31
-archobjs="os2$obj_ext dl_os2$obj_ext"
-
-# Run files without extension with sh:
-EXECSHELL=sh
-
-cccdlflags='-Zdll'
-dlsrc='dl_dlopen.xs'
-ld='gcc'
-
-#cppflags='-DDOSISH -DOS2=2 -DEMBED -I.'
-
-# for speedup: (some patches to ungetc are also needed):
-# Note that without this guy tests 8 and 10 of io/tell.t fail, with it 11 fails
-
-stdstdunder=`echo "#include <stdio.h>" | cpp | egrep -c "char +\* +_ptr"`
-d_stdstdio='define'
-d_stdiobase='define'
-d_stdio_ptr_lval='define'
-d_stdio_cnt_lval='define'
-
-if test "$stdstdunder" = 0; then
- stdio_ptr='((fp)->ptr)'
- stdio_cnt='((fp)->rcount)'
- stdio_base='((fp)->buffer)'
- stdio_bufsiz='((fp)->rcount + (fp)->ptr - (fp)->buffer)'
- ccflags="$ccflags -DMYTTYNAME"
- myttyname='define'
-else
- stdio_ptr='((fp)->_ptr)'
- stdio_cnt='((fp)->_rcount)'
- stdio_base='((fp)->_buffer)'
- stdio_bufsiz='((fp)->_rcount + (fp)->_ptr - (fp)->_buffer)'
-fi
-
-# to put into config.sh
-myttyname="$myttyname"
-
-# To have manpages installed
-nroff='nroff.cmd'
-# above will be overwritten otherwise, indented to avoid config.sh
- _nroff='nroff.cmd'
-
-# should be handled automatically by Configure now.
-ln='cp'
-# Will be rewritten otherwise, indented to not put in config.sh
- _ln='cp'
-lns='cp'
-
-nm_opt='-p'
-
-####### We define these functions ourselves
-
-d_strtoll='define'
-d_strtoull='define'
-d_getprior='define'
-d_setprior='define'
-
-# The next two are commented. pdksh handles #!, extproc gives no path part.
-# sharpbang='extproc '
-# shsharp='false'
-
-# Commented:
-#startsh='extproc ksh\\n#! sh'
-
-# Find patch:
-gnupatch='patch'
-if (gnupatch -v || gnupatch --version) 2>&1 >/dev/null; then
- gnupatch=gnupatch
-else
- if (gpatch -v || gpatch --version) 2>&1 >/dev/null; then
- gnupatch=gpatch
- else
- # They may have a special PATH during configuring
- if (patch -v || patch --version) 2>&1 >/dev/null; then
- gnupatch="`./UU/loc patch.exe undef $pth`"
- fi
- fi
-fi
-
-# Apply patches if needed
-case "$0$running_c_cmd" in
- *[/\\]Configure|*[/\\]Configure.|Configure|Configure.) # Skip Configure.cmd
- if grep "^libnames" ./Configure > /dev/null; then
- # Not patched!
- if test -f ./Configure.cmd ; then
- echo "!!!" >&2
- echo "!!! I see that what is running is ./Configure." >&2
- echo "!!! ./Configure is not patched, but ./Configure.cmd exists." >&2
- echo "!!!" >&2
- echo "!!! You are supposed to run Configure.cmd, not Configure" >&2
- echo "!!! after an automagic patching." >&2
- echo "!!!" >&2
- echo "!!! If you insist on running Configure, please" >&2
- echo "!!! patch it manually from ./os2/diff.configure." >&2
- echo "!!!" >&2
- exit 2
- fi
- echo "!!!" >&2
- echo "!!! You did not patch ./Configure!" >&2
- echo "!!! I create Configure.cmd and patch it from ./os2/diff.configure." >&2
- echo "!!!" >&2
- echo "$gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch" >&2
- ($gnupatch -b -p1 --output=Configure.cmd <./os2/diff.configure 2>&1 | tee 00_auto_patch) >&2
- echo "!!!" >&2
- echo "!!! The report of patching is copied to 00_auto_patch." >&2
- echo "!!! Now you need to restart Configure.cmd with all the options" >&2
- echo "!!!" >&2
- echo "extproc sh" > Configure.ctm
- cat Configure.cmd >> Configure.ctm && mv -f Configure.ctm Configure.cmd
- exit 0
- else
- echo "!!! Apparently we are running a patched Configure." >&2
- fi
- ;;
- *) echo "!!! Apparently we are running a renamed Configure: '$0'." >&2
-esac
-
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
-case "$usethreads" in
-$define|true|[yY]*)
- ccflags="-Zmt $ccflags"
- cppflags="-Zmt $cppflags" # Do we really need to set this?
- aout_ccflags="-DUSE_THREADS $aout_ccflags"
- aout_cppflags="-DUSE_THREADS $aout_cppflags"
- aout_lddlflags="-Zmt $aout_lddlflags"
- aout_ldflags="-Zmt $aout_ldflags"
- ;;
-esac
-EOCBU
-
-# Now install the external modules. We are in the ./hints directory.
-
-cd ./os2/OS2
-
-if ! test -d ../../ext/OS2 ; then
- mkdir ../../ext/OS2
-fi
-
-cp -rfu * ../../ext/OS2/
-
-# Install tests:
-
-for xxx in * ; do
- if $test -d $xxx/t; then
- cp -uf $xxx/t/*.t ../../t/lib
- else
- if $test -d $xxx; then
- cd $xxx
- for yyy in * ; do
- if $test -d $yyy/t; then
- cp -uf $yyy/t/*.t ../../t/lib
- fi
- done
- cd ..
- fi
- fi
-done
-
-case "$ldlibpthname" in
-'') ldlibpthname=none ;;
-esac
-
-# Now go back
-cd ../..
diff --git a/contrib/perl5/hints/os390.sh b/contrib/perl5/hints/os390.sh
deleted file mode 100644
index 4eff5a8..0000000
--- a/contrib/perl5/hints/os390.sh
+++ /dev/null
@@ -1,205 +0,0 @@
-# hints/os390.sh
-#
-# OS/390 hints by David J. Fiander <davidf@mks.com>
-#
-# OS/390 OpenEdition Release 3 Mon Sep 22 1997 thanks to:
-#
-# John Goodyear <johngood@us.ibm.com>
-# John Pfuntner <pfuntner@vnet.ibm.com>
-# Len Johnson <lenjay@ibm.net>
-# Bud Huff <BAHUFF@us.oracle.com>
-# Peter Prymmer <pvhp@forte.com>
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Tim Bunce <Tim.Bunce@ig.co.uk>
-#
-# as well as the authors of the aix.sh file
-#
-
-# To get ANSI C, we need to use c89, and ld doesn't exist
-# You can override this with Configure -Dcc=gcc -Dld=ld.
-case "$cc" in
-'') cc='c89' ;;
-esac
-case "$ld" in
-'') ld='c89' ;;
-esac
-
-# -DMAXSIG=38 maximum signal number
-# -DOEMVS is used in place of #ifdef __MVS__ in certain places.
-# -D_OE_SOCKETS alters system headers.
-# -D_XOPEN_SOURCE_EXTENDEDA alters system headers.
-# c89 hides most of the useful header stuff, _ALL_SOURCE turns it on again.
-# YYDYNAMIC ensures that the OS/390 yacc generated parser is reentrant.
-# -DEBCDIC should come from Configure and need not be mentioned here.
-# Prepend your favorites with Configure -Dccflags=your_favorites
-case "$ccflags" in
-'') ccflags='-DMAXSIG=38 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC' ;;
-*) ccflags="$ccflags -DMAXSIG=38 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC" ;;
-esac
-
-# Turning on optimization breaks perl.
-# You can override this with Configure -Doptimize='-O' or somesuch.
-case "$optimize" in
-'') optimize='none' ;;
-esac
-
-# To link via definition side decks we need the dll option
-# You can override this with Configure -Ucccdlflags or somesuch.
-case "$cccdlflags" in
-'') cccdlflags='-W 0,dll' ;;
-esac
-
-case "$so" in
-'') so='a' ;;
-esac
-
-case "$alignbytes" in
-'') alignbytes=8 ;;
-esac
-
-case "$usemymalloc" in
-'') usemymalloc='n' ;;
-esac
-
-# On OS/390, libc.a doesn't really hold anything at all,
-# so running nm on it is pretty useless.
-# You can override this with Configure -Dusenm.
-case "$usenm" in
-'') usenm='false' ;;
-esac
-
-# Setting ldflags='-Wl,EDIT=NO' will get rid of the symbol
-# information at the end of the executable (=> smaller binaries).
-# Override this option with -Dldflags='whatever else you wanted'.
-case "$ldflags" in
-'') ldflags='-Wl,EDIT=NO' ;;
-esac
-
-# In order to build with dynamic be sure to specify:
-# Configure -Dusedl
-# Do not forget to add $archlibexp/CORE to your LIBPATH.
-# You might want to override some of this with things like:
-# Configure -Dusedl -Ddlext=so -Ddlsrc=dl_dllload.xs.
-case "$usedl" in
-'')
- usedl='n'
- case "$dlext" in
- '') dlext='none' ;;
- esac
- ;;
-define)
- case "$useshrplib" in
- '') useshrplib='true' ;;
- esac
- case "$dlsrc" in
- '') dlsrc='dl_dllload.xs' ;;
- esac
- # For performance use 'so' at or beyond v2.8, 'dll' for 2.7 and prior versions
- case "`uname -v`x`uname -r`" in
- 02x0[89].*|02x1[0-9].*|[0-9][3-9]x*)
- so='so'
- case "$dlext" in
- '') dlext='so' ;;
- esac
- ;;
- *)
- so='dll'
- case "$dlext" in
- '') dlext='dll' ;;
- esac
- ;;
- esac
- libperl="libperl.$so"
- ccflags="$ccflags -D_SHR_ENVIRON -DPERL_EXTERNAL_GLOB -Wc,dll"
- cccdlflags='-c -Wc,dll,EXPORTALL'
- # The following will need to be modified for the installed libperl.x.
- # The modification to Config.pm is done by the installperl script after the build and test.
- ccdlflags="-W l,dll `pwd`/libperl.x"
- lddlflags="-W l,dll `pwd`/libperl.x"
- ;;
-esac
-# even on static builds using LIBPATH should be OK.
-case "$ldlibpthname" in
-'') ldlibpthname=LIBPATH ;;
-esac
-
-# Header files to include.
-# You can override these with Configure -Ui_time -Ui_systime.
-case "$i_time" in
-'') i_time='define' ;;
-esac
-case "$i_systime" in
-'') i_systime='define' ;;
-esac
-
-# (from aix.sh)
-# uname -m output is too specific and not appropriate here
-# osname should come from Configure
-# You can override this with Configure -Darchname='s390' but please don't.
-case "$archname" in
-'') archname="$osname" ;;
-esac
-
-# We have our own cppstdin script. This is not a variable since
-# Configure sees the presence of the script file.
-# We put system header -D definitions in so that Configure
-# can find the shmat() prototype in <sys/shm.h> and various
-# other things. Unfortunately, cppflags occurs too late to be of
-# value external to the script. This may need to be revisited
-# under a compiler other than c89.
-case "$usedl" in
-define)
-echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -D_SHR_ENVIRON -E -Wc,NOLOC ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
- ;;
-*)
-echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -E -Wc,NOLOC ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
- ;;
-esac
-
-#
-# Note that Makefile.SH employs a bare yacc command to generate
-# perly.[hc] and a2p.[hc], hence you may wish to:
-#
-# alias yacc='myyacc'
-#
-# Then if you would like to use myyacc and skip past the
-# following warnings try invoking Configure like so:
-#
-# sh Configure -Dbyacc=yacc
-#
-# This trick ought to work even if your yacc is byacc.
-#
-if test "X$byacc" = "Xbyacc" ; then
- if test -e /etc/yyparse.c ; then
- : we should be OK - perhaps do a test -r?
- else
- cat <<EOWARN >&4
-
-Warning. You do not have a copy of yyparse.c, the default
-yacc parser template file, in place in /etc.
-EOWARN
- if test -e /samples/yyparse.c ; then
- cat <<EOWARN >&4
-
-There does appear to be a template file in /samples though.
-Please run:
-
- cp /samples/yyparse.c /etc
-
-before attempting to Configure the build of $package.
-
-EOWARN
- else
- cat <<EOWARN >&4
-
-There does not appear to be one in /samples either.
-If you feel you can make use of an alternate yacc-like
-parser generator then please read the comments in the
-hints/os390.sh file carefully.
-
-EOWARN
- fi
- exit 1
- fi
-fi
-
diff --git a/contrib/perl5/hints/posix-bc.sh b/contrib/perl5/hints/posix-bc.sh
deleted file mode 100644
index 6275233..0000000
--- a/contrib/perl5/hints/posix-bc.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#! /usr/bin/bash -norc
-# hints/posix-bc.sh
-#
-# BS2000 (Posix Subsystem) hints by Thomas Dorner <Thomas.Dorner@start.de>
-#
-# thanks to the authors of the os390.sh
-#
-
-# To get ANSI C, we need to use c89, and ld does not exist
-# You can override this with Configure -Dcc=gcc -Dld=ld.
-case "$cc" in
-'') cc='c89' ;;
-esac
-case "$ld" in
-'') ld='c89' ;;
-esac
-
-# C-Flags:
-# -DPOSIX_BC
-# -DUSE_PURE_BISON
-# -D_XOPEN_SOURCE_EXTENDED alters system headers.
-# Prepend your favorites with Configure -Dccflags=your_favorites
-case "$ccflags" in
-'') ccflags='-K enum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED' ;;
-*) ccflags='$ccflags -Kenum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED' ;;
-esac
-
-# ccdlflags have yet to be determined.
-#case "$ccdlflags" in
-#'') ccdlflags='-c' ;;
-#esac
-
-# cccdlflags have yet to be determined.
-#case "$cccdlflags" in
-#'') cccdlflags='' ;;
-#esac
-
-# ldflags have yet to be determined.
-#case "$ldflags" in
-#'') ldflags='' ;;
-#esac
-
-# lddlflags have yet to be determined.
-#case "$lddlflags" in
-#'') lddlflags='' ;;
-#esac
-
-# Flags on a RISC-Host (SUNRISE):
-if [ -n "`bs2cmd SHOW-SYSTEM-INFO | egrep 'HSI-ATT.*TYPE.*SR'`" ]; then
- echo
- echo "Congratulations, you are running a machine with Sunrise CPUs."
- echo "Let's hope you have the matching RISC compiler as well."
- ccflags="-K risc_4000 $ccflags"
- ldflags='-K risc_4000'
-fi
-
-# Turning on optimization breaks perl (CORE-DUMP):
-# You can override this with Configure -Doptimize='-O' or somesuch.
-case "$optimize" in
-'') optimize='none' ;;
-esac
-
-# we don''t use dynamic memorys (yet):
-case "$so" in
-'') so='none' ;;
-esac
-
-case "$usemymalloc" in
-'') usemymalloc='n' ;;
-esac
-
-# On BS2000/Posix, libc.a does not really hold anything at all,
-# so running nm on it is pretty useless.
-# You can override this with Configure -Dusenm.
-case "$usenm" in
-'') usenm='false' ;;
-esac
-
-# Dynamic loading doesn't work on OS/390 quite yet.
-# You can override this with
-# Configure -Dusedl -Ddlext=.so -Ddlsrc=dl_dllload.xs.
-case "$usedl" in
-'') usedl='n' ;;
-esac
-case "$dlext" in
-'') dlext='none' ;;
-esac
-#case "$dlsrc" in
-#'') dlsrc='none' ;;
-#esac
-#case "$ldlibpthname" in
-#'') ldlibpthname=LIBPATH ;;
-#esac
-
diff --git a/contrib/perl5/hints/powerux.sh b/contrib/perl5/hints/powerux.sh
deleted file mode 100644
index dc1b3d0..0000000
--- a/contrib/perl5/hints/powerux.sh
+++ /dev/null
@@ -1,110 +0,0 @@
-# Hints for the PowerUX operating system running on Concurrent (formerly
-# Harris) NightHawk machines. Written by Tom.Horsley@mail.ccur.com
-#
-# Note: The OS is fated to change names again to PowerMAX OS, but this
-# PowerUX file should still work (I wish marketing would make up their mind
-# about the name :-).
-#
-# This config uses dynamic linking and the Concurrent C compiler. It has
-# been tested on Power PC based 6000 series machines running PowerUX.
-
-# Internally at Concurrent, we use a source management tool which winds up
-# giving us read-only copies of source trees that are mostly symbolic links.
-# That upsets the perl build process when it tries to edit opcode.h and
-# embed.h or touch perly.c or perly.h, so turn those files into "real" files
-# when Configure runs. (If you already have "real" source files, this won't
-# do anything).
-#
-if [ -x /usr/local/mkreal ]
-then
- for i in '.' '..'
- do
- for j in embed.h opcode.h perly.h perly.c
- do
- if [ -h $i/$j ]
- then
- ( cd $i ; /usr/local/mkreal $j ; chmod 666 $j )
- fi
- done
- done
-fi
-
-# We DO NOT want -lmalloc or -lPW, we DO need -lgen to follow -lnsl, so
-# fixup libswanted to reflect that desire (also need -lresolv if you want
-# DNS name lookup to work, which seems desirable :-).
-#
-libswanted=`echo ' '$libswanted' ' | sed -e 's/ malloc / /' -e 's/ PW / /' -e 's/ nsl / nsl gen resolv /'`
-
-# We DO NOT want /usr/ucblib in glibpth
-#
-glibpth=`echo ' '$glibpth' ' | sed -e 's@ /usr/ucblib @ @'`
-
-# Yes, csh exists, but doesn't work worth beans, if perl tries to use it,
-# the glob test fails, so just pretend it isn't there...
-#
-d_csh='undef'
-
-# Need to use Concurrent cc for most of these options to be meaningful (if you
-# want to get this to work with gcc, you're on your own :-). Passing
-# -Bexport to the linker when linking perl is important because it leaves
-# the interpreter internal symbols visible to the shared libs that will be
-# loaded on demand (and will try to reference those symbols).
-#
-cc='/bin/cc'
-cccdlflags='-Zpic'
-ccdlflags='-Zlink=dynamic -Wl,-usys_nerr -Wl,-Bexport'
-lddlflags='-Zlink=so'
-
-# Configure sometime finds what it believes to be ndbm header files on the
-# system and imagines that we have the NDBM library, but we really don't.
-# There is something there that once resembled ndbm, but it is purely
-# for internal use in some tool and has been hacked beyond recognition
-# (or even function :-)
-#
-i_ndbm='undef'
-
-# I have no clue what perl thinks it wants <sys/mode.h> for, but if
-# you include it in a program in PowerMAX without first including
-# <sys/vnode.h> the code don't compile...
-#
-i_sysmode='undef'
-
-# There is a bug in memcmp (which I hope will be fixed soon) which sometimes
-# fails to provide the correct compare status (it is data dependant), so just
-# pretend there is no memcmp...
-#
-d_memcmp='undef'
-
-# Due to problems with dynamic linking (which I also hope will be fixed soon)
-# you can't build a libperl.so, the core has to be in the static part of the
-# perl executable.
-#
-useshrplib='false'
-
-# PowerMAX OS has support for a few different kinds of filesystems. The
-# newer "xfs" filesystem does *not* report a reasonable value in the
-# 'nlinks' field of stat() info for directories (in fact, it is always 1).
-# Since xfs is the only filesystem which supports partitions bigger than
-# 2gig and you can't hardly buy a disk that small anymore, xfs is coming in
-# to greater and greater use, so we pretty much have no choice but to
-# abandon all hope that number of links will mean anything.
-#
-dont_use_nlink=define
-
-# Configure comes up with the wrong type for these for some reason. The
-# pointers shouldn't have const in them. (And it looks like I have to
-# provide netdb_hlen_type as well becuase when I predefine the others it
-# comes up empty :-).
-#
-netdb_host_type='char *'
-netdb_name_type='char *'
-netdb_hlen_type='int'
-
-# Misc other flags that might be able to change, but I know these work right.
-#
-d_suidsafe='define'
-d_isascii='define'
-d_mymalloc='undef'
-usemymalloc='n'
-ssizetype='ssize_t'
-usevfork='false'
diff --git a/contrib/perl5/hints/qnx.sh b/contrib/perl5/hints/qnx.sh
deleted file mode 100644
index 06d9010..0000000
--- a/contrib/perl5/hints/qnx.sh
+++ /dev/null
@@ -1,178 +0,0 @@
-#----------------------------------------------------------------
-# QNX hints
-#
-# As of perl5.004_04, all tests pass under:
-# QNX 4.23A
-# Watcom 10.6 with Beta/970211.wcc.update.tar.F
-# socket3r.lib Nov21 1996.
-#
-# As with many unix ports, this one depends on a few "standard"
-# unix utilities which are not necessarily standard for QNX.
-#
-# /bin/sh This is used heavily by Configure and then by
-# perl itself. QNX's version is fine, but Configure
-# will choke on the 16-bit version, so if you are
-# running QNX 4.22, link /bin/sh to /bin32/ksh
-# ar This is the standard unix library builder.
-# We use wlib. With Watcom 10.6, when wlib is
-# linked as "ar", it behaves like ar and all is
-# fine. Under 9.5, a cover is required. One is
-# included in ../qnx
-# nm This is used (optionally) by configure to list
-# the contents of libraries. I will generate
-# a cover function on the fly in the UU directory.
-# cpp Configure and perl need a way to invoke a C
-# preprocessor. I have created a simple cover
-# for cc which does the right thing. Without this,
-# Configure will create it's own wrapper which works,
-# but it doesn't handle some of the command line arguments
-# that perl will throw at it.
-# make You really need GNU make to compile this. GNU make
-# ships by default with QNX 4.23, but you can get it
-# from quics for earlier versions.
-#----------------------------------------------------------------
-# Outstanding Issues:
-# lib/posix.t test fails on test 17 because acos(1) != 0.
-# Resolved in 970211 Beta
-# lib/io_udp.t test hangs because of a bug in getsockname().
-# Fixed in latest BETA socket3r.lib
-# There is currently no support for dynamically linked
-# libraries.
-#----------------------------------------------------------------
-# These hints were submitted by:
-# Norton T. Allen
-# Harvard University Atmospheric Research Project
-# allen@huarp.harvard.edu
-#
-# If you have suggestions or changes, please let me know.
-#----------------------------------------------------------------
-
-echo ""
-echo "Some tests may fail. Please read the hints/qnx.sh file."
-echo ""
-
-#----------------------------------------------------------------
-# At present, all QNX systems are equivalent architectures,
-# so it is reasonable to call archname=x86-qnx rather than
-# making an unnecessary distinction between AT-qnx and PCI-qnx,
-# for example.
-#----------------------------------------------------------------
-archname='x86-qnx'
-
-#----------------------------------------------------------------
-# QNX doesn't come with a csh and the ports of tcsh I've used
-# don't work reliably:
-#----------------------------------------------------------------
-csh=''
-d_csh='undef'
-full_csh=''
-
-#----------------------------------------------------------------
-# setuid scripts are secure under QNX.
-# (Basically, the same race conditions apply, but assuming
-# the scripts are located in a secure directory, the methods
-# for exploiting the race condition are defeated because
-# the loader expands the script name fully before executing
-# the interpreter.)
-#----------------------------------------------------------------
-d_suidsafe='define'
-
-#----------------------------------------------------------------
-# difftime is implemented as a preprocessor macro, so it doesn't show
-# up in the libraries:
-#----------------------------------------------------------------
-d_difftime='define'
-
-#----------------------------------------------------------------
-# strtod is in the math library, but we can't tell Configure
-# about the math library or it will confuse the linker
-#----------------------------------------------------------------
-d_strtod='define'
-
-lib_ext='3r.lib'
-libc='/usr/lib/clib3r.lib'
-
-#----------------------------------------------------------------
-# ccflags:
-# I like to turn the warnings up high, but a few common
-# constructs make a lot of noise, so I turn those warnings off.
-# A few still remain...
-#
-# unix.h is required as a general rule for unixy applications.
-#----------------------------------------------------------------
-ccflags='-mf -w4 -Wc,-wcd=202 -Wc,-wcd=203 -Wc,-wcd=302 -Wc,-fi=unix.h'
-
-#----------------------------------------------------------------
-# ldflags:
-# If you want debugging information, you must specify -g on the
-# link as well as the compile. If optimize != -g, you should
-# remove this.
-#----------------------------------------------------------------
-ldflags="-g -N1M"
-
-so='none'
-selecttype='fd_set *'
-
-#----------------------------------------------------------------
-# Add -lunix to list of libs. This is needed mainly so the nm
-# search will find funcs in the unix lib. Including unix.h should
-# automatically include the library without -l.
-#----------------------------------------------------------------
-libswanted="$libswanted unix"
-
-if [ -z "`which ar 2>/dev/null`" ]; then
- cat <<-'EOF' >&4
- I don't see an 'ar', so I'm guessing you are running
- Watcom 9.5 or earlier. You may want to install the ar
- cover found in the qnx subdirectory of this distribution.
- It might reasonably be placed in /usr/local/bin.
-
- EOF
-fi
-#----------------------------------------------------------------
-# Here is a nm script which fixes up wlib's output to look
-# something like nm's, at least enough so that Configure can
-# use it.
-#----------------------------------------------------------------
-if [ -z "`which nm 2>/dev/null`" ]; then
- cat <<-EOF
- Creating a quick-and-dirty nm cover for Configure to use:
-
- EOF
- cat >./UU/nm <<-'EOF'
- #! /bin/sh
- #__USAGE
- #%C <lib> [<lib> ...]
- # Designed to mimic Unix's nm utility to list
- # defined symbols in a library
- unset WLIB
- for i in $*; do wlib $i; done |
- awk '
- /^ / {
- for (i = 1; i <= NF; i++) {
- sub("_$", "", $i)
- print "000000 T " $i
- }
- }'
- EOF
- chmod +x ./UU/nm
-fi
-
-cppstdin=`which cpp 2>/dev/null`
-if [ -n "$cppstdin" ]; then
- cat <<-EOF >&4
- I found a cpp at $cppstdin and will assume it is a good
- thing to use. If this proves to be false, there is a
- thin cover for cpp in the qnx subdirectory of this
- distribution which you could move into your path.
- EOF
- cpprun="$cppstdin"
-else
- cat <<-EOF >&4
-
- There is a cpp cover in the qnx subdirectory of this
- distribution which works a little better than the
- Configure default. You may wish to copy it to
- /usr/local/bin or some other suitable location.
- EOF
-fi
diff --git a/contrib/perl5/hints/rhapsody.sh b/contrib/perl5/hints/rhapsody.sh
deleted file mode 100644
index 933081b..0000000
--- a/contrib/perl5/hints/rhapsody.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-##
-# Rhapsody (Mac OS X Server) hints
-# Wilfredo Sanchez <wsanchez@apple.com>
-##
-
-##
-# Paths
-##
-
-# BSD paths
-prefix='/usr';
-siteprefix='/usr/local';
-vendorprefix='/usr/local'; usevendorprefix='define';
-
-# 4BSD uses /usr/share/man, not /usr/man.
-# Don't put man pages in /usr/lib; that's goofy.
-man1dir='/usr/share/man/man1';
-man3dir='/usr/share/man/man3';
-
-# Where to put modules.
-privlib='/System/Library/Perl';
-sitelib='/Local/Library/Perl';
-vendorlib='/Network/Library/Perl';
-
-##
-# Tool chain settings
-##
-
-# Since we can build fat, the archname doesn't need the processor type
-archname='rhapsody';
-
-# nm works.
-usenm='true';
-
-# Libc is in libsystem.
-libc='/System/Library/Frameworks/System.framework/System';
-
-# Optimize.
-optimize='-O3';
-
-# We have a prototype for telldir.
-ccflags="${ccflags} -pipe -fno-common -DHAS_TELLDIR_PROTOTYPE";
-
-# Shared library extension is .dylib.
-# Bundle extension is .bundle.
-ld='cc';
-so='dylib';
-dlext='bundle';
-dlsrc='dl_dyld.xs';
-usedl='define';
-cccdlflags='';
-lddlflags="${ldflags} -bundle -undefined suppress";
-ldlibpthname='DYLD_LIBRARY_PATH';
-useshrplib='true';
-base_address='0x4be00000';
-
-##
-# System libraries
-##
-
-# vfork works
-usevfork='true';
-
-# malloc works
-usemymalloc='n';
-
-
diff --git a/contrib/perl5/hints/sco.sh b/contrib/perl5/hints/sco.sh
deleted file mode 100644
index 079ab78..0000000
--- a/contrib/perl5/hints/sco.sh
+++ /dev/null
@@ -1,243 +0,0 @@
-# sco.sh
-# Courtesy of Joel Rosi-Schwartz <j.schwartz@agonet.it>
-###############################################################
-# Additional SCO version info from
-# Peter Wolfe <wolfe@teloseng.com>
-# Fri Jul 19 14:54:25 EDT 1996
-# and again Tue Sep 29 16:37:25 EDT 1998
-# by Andy Dougherty <doughera@lafayette.edu>
-# Mostly rewritten on
-# Tue Jan 19 23:00:00 CET 1999
-# by Francois Desarmenien <desar@club-internet.fr>
-# Modified by Boyd Gerber <gerberb@zenez.com>
-# Tue Sep 21 1999
-###############################################################
-#
-# To use cc, use sh Configure
-# To use gcc, use sh Configure -Dcc=gcc
-#
-# Default on 3.2v4 is to use static link (dynamic loading unsupported).
-# Default on 3.2v5 is to use dynamic loading.
-# To use static linkink instead, use to sh Configure -Dusedl=n
-#
-# Warning: - to use dynamic loading with gcc, you need gcc 2.8.0 or later
-# ******** - to compile with older releases of gcc, use Configure -Dusedl=n
-# or it wont compile properly
-#
-###############################################################
-# NOTES:
-# -----
-#
-# I Have removed inclusion of ODBM_File for OSR5
-# because it core dumps and make tests fails.
-#
-# Support for icc compiler has been removed, because it 'breaks'
-# a lot of code :-(
-#
-# It's *always* a good idea to first make a static link to be sure to
-# have all symbols resolved with the current choice of libraries, since
-# with dynamic linking, unresolved symbols are allowed an will be detected
-# only at runtime (when you try to load the module or worse, when you call
-# the symbol)
-#
-# The best choice of compiler on OSR 5 (3.2v5.*) seems to be gcc >= 2.8.0:
-# -You cannot optimize with genuine sco cc (miniperl core dumps),
-# so Perl is faster if compiled with gcc.
-# -Even optimized for speed, gcc generated code is smaller (!!!)
-# -gcc is free
-# -I use ld to link which is distributed with the core OS distribution, so you
-# don't need to buy the developement kit, just find someone kind enough to
-# give you a binary release of gcc.
-#
-#
-
-###############################################################
-# figure out what SCO version we are. The output of uname -X is
-# something like:
-# System = SCO_SV
-# Node = xxxxx
-# Release = 3.2v5.0.0
-# KernelID = 95/08/08
-# Machine = Pentium
-# BusType = ISA
-# Serial = xxxxx
-# Users = 5-user
-# OEM# = 0
-# Origin# = 1
-# NumCPU = 1
-
-# Use /bin/uname (because GNU uname may be first in $PATH and
-# it does not support -X) to figure out what SCO version we are:
-# Matching '^Release' is broken by locale setting:
-# matching '3.2v' should be enough -- FD
-case `/bin/uname -X | egrep '3\.2v'` in
-*3.2v4.*) scorls=3 ;; # OSR 3
-*3.2v5.*) scorls=5 ;; # OSR 5
-*)
- # Future of SCO OSR is SCO UnixWare: there should not be new OSR releases
- echo "************************************************************" >&4
- echo "" >&4
- echo " sco.sh hints file only supports:" >&4
- echo "" >&4
- echo " - SCO Unix 3.2v4.x (OSR 3)" >&4
- echo " - SCO Unix 3.2v5.x (OSR 5)" >&4
- echo "" >&4
- echo "" >&4
- echo " For UnixWare, use svr4.sh hints instead" >&4
- echo " For UnixWare 7.*, use svr5.sh hints instead" >&4
- echo "" >&4
- echo "***********************************************************" >&4
- exit
-;;
-esac
-
-###############################################################
-# Common fixes for all compilers an releases:
-
-###############################################################
-# What is true for SCO5 is true for SCO3 too today, so let's have a single
-# symbol for both
-ccflags="-U M_XENIX -D PERL_SCO"
-
-###############################################################
-# Compilers options section:
-if test "$scorls" = "3"
-then
- dlext=''
- case "$cc" in
- *gcc*) optimize='-O2' ;;
- *) ccflags="$ccflags -W0 -quiet"
- optimize='-O' ;;
- esac
-else
- ###############################################################
- # Need this in release 5 because of changed fpu exeption rules
- ccflags="$ccflags -D PERL_SCO5"
-
- ###############################################################
- # In Release 5, always compile ELF objects
- case "$cc" in
- *gcc*)
- ccflags="$ccflags -melf"
- optimize='-O2'
- ;;
- *)
- ccflags="$ccflags -w0 -belf"
- optimize='-O0'
- ;;
- esac
- ###############################################################
- # Dynamic loading section:
- #
- # We use ld to build shared libraries as it is always available
- # and seems to work better than GNU's one on SCO
- #
- # ccdlflags : must tell the linker to export all global symbols
- # cccdlflags: must tell the compiler to generate relocatable code
- # lddlflags : must tell the linker to output a shared library
- #
- # /usr/local/lib is added for convenience, since 'foreign' libraries
- # are usually put there in sco
- #
- if test "$usedl" != "n"; then
- ld='ld'
- case "$cc" in
- *gcc*)
- ccdlflags='-Xlinker -Bexport -L/usr/local/lib'
- cccdlflags='-fpic'
- lddlflags='-G -L/usr/local/lib'
- ;;
- *)
- ccdlflags='-Bexport -L/usr/local/lib'
- cccdlflags='-Kpic'
- lddlflags='-G -L/usr/local/lib'
- ;;
- esac
-
- ###############################################################
- # Use dynamic loading
- usedl='define'
- dlext='so'
- dlsrc='dl_dlopen.xs'
-
- ###############################################################
- # Force to define those symbols, as they are #defines and not
- # catched by Configure, and they are useful
- d_dlopen='define'
- d_dlerror='define'
- fi
-fi
-
-
-###############################################################
-# Various hints, common to all releases, to have it work better:
-
-###############################################################
-# We need to remove libdl, as libdl.so exists, but ld complains
-# it can't find libdl.a ! Bug or feature ? :-)
-libswanted=`echo " $libswanted " | sed -e 's/ dl / /'`
-set X $libswanted
-shift
-libswanted="$*"
-
-###############################################################
-# Remove libbind because it conflicts with libsocket.
-libswanted=`echo " $libswanted " | sed -e 's/ bind / /'`
-set X $libswanted
-shift
-libswanted="$*"
-
-###############################################################
-# Try to use libintl.a since it has strcoll and strxfrm
-libswanted="intl $libswanted"
-
-###############################################################
-# Try to use libdbm.nfs.a since it has dbmclose.
-if test -f /usr/lib/libdbm.nfs.a ; then
- libswanted=`echo "dbm.nfs $libswanted " | sed -e 's/ dbm / /'`
- set X $libswanted
- shift
- libswanted="$*"
-fi
-
-###############################################################
-# We disable ODBM_File if OSR5 because it's mostly broken
-# but keep it for ODT3 as it seems to work.
-if test "$scorls" = "5"; then
- i_dbm='undef'
-fi
-
-###############################################################
-# We don't want Xenix cross-development libraries
-glibpth=`echo $glibpth | sed -e 's! /usr/lib/386 ! !' -e 's! /lib/386 ! !'`
-xlibpth=''
-
-###############################################################
-# I have received one report that nm extraction doesn't work if you're
-# using the scocc compiler. This system had the following 'myconfig'
-# uname='xxx xxx 3.2 2 i386 '
-# cc='scocc', optimize='-O'
-# You can override this with Configure -Dusenm.
-case "$usenm" in
-'') usenm='false' ;;
-esac
-
-###############################################################
-# If you want to use nm, you'll probably have to use nm -p. The
-# following does that for you:
-nm_opt='-p'
-
-###############################################################
-# I have received one report that you can't include utime.h in
-# pp_sys.c. Uncomment the following line if that happens to you:
-# i_utime=undef
-
-###############################################################
-# Perl 5.003_05 and later try to include both <time.h> and <sys/select.h>
-# in pp_sys.c, but that fails due to a redefinition of struct timeval.
-# This will generate a WHOA THERE. Accept the default.
-i_sysselct=$undef
-
-
-###############################################################
-#END of hint file
diff --git a/contrib/perl5/hints/sco_2_3_0.sh b/contrib/perl5/hints/sco_2_3_0.sh
deleted file mode 100644
index 146363a..0000000
--- a/contrib/perl5/hints/sco_2_3_0.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-yacc='/usr/bin/yacc -Sm25000'
-i_dirent=undef
diff --git a/contrib/perl5/hints/sco_2_3_1.sh b/contrib/perl5/hints/sco_2_3_1.sh
deleted file mode 100644
index 146363a..0000000
--- a/contrib/perl5/hints/sco_2_3_1.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-yacc='/usr/bin/yacc -Sm25000'
-i_dirent=undef
diff --git a/contrib/perl5/hints/sco_2_3_2.sh b/contrib/perl5/hints/sco_2_3_2.sh
deleted file mode 100644
index e113a4e..0000000
--- a/contrib/perl5/hints/sco_2_3_2.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-yacc='/usr/bin/yacc -Sm25000'
-libswanted=`echo " $libswanted "| sed 's/ x / /'`
diff --git a/contrib/perl5/hints/sco_2_3_3.sh b/contrib/perl5/hints/sco_2_3_3.sh
deleted file mode 100644
index 6d398fc..0000000
--- a/contrib/perl5/hints/sco_2_3_3.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-yacc='/usr/bin/yacc -Sm25000'
-echo "NOTE: you may have problems due to a spurious semicolon on the strerror()" >&4
-echo "macro definition in /usr/include/string.h. If so, delete the semicolon." >&4
diff --git a/contrib/perl5/hints/sco_2_3_4.sh b/contrib/perl5/hints/sco_2_3_4.sh
deleted file mode 100644
index 34bcada..0000000
--- a/contrib/perl5/hints/sco_2_3_4.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-yacc='/usr/bin/yacc -Sm25000'
-ccflags="$ccflags -UM_I86"
-usemymalloc='y'
-echo "NOTE: you may have problems due to a spurious semicolon on the strerror()" >&4
-echo "macro definition in /usr/include/string.h. If so, delete the semicolon." >&4
diff --git a/contrib/perl5/hints/solaris_2.sh b/contrib/perl5/hints/solaris_2.sh
deleted file mode 100644
index 0bf5bab..0000000
--- a/contrib/perl5/hints/solaris_2.sh
+++ /dev/null
@@ -1,531 +0,0 @@
-# hints/solaris_2.sh
-# Last modified: Tue Jan 2 10:16:35 2001
-# Lupe Christoph <lupe@lupe-christoph.de>
-# Based on version by:
-# Andy Dougherty <doughera@lafayette.edu>
-# Which was based on input from lots of folks, especially
-# Dean Roehrich <roehrich@ironwood-fddi.cray.com>
-# Additional input from Alan Burlison, Jarkko Hietaniemi,
-# and Richard Soderberg.
-#
-# See README.solaris for additional information.
-#
-# For consistency with gcc, we do not adopt Sun Marketing's
-# removal of the '2.' prefix from the Solaris version number.
-# (Configure tries to detect an old fixincludes and needs
-# this information.)
-
-# If perl fails tests that involve dynamic loading of extensions, and
-# you are using gcc, be sure that you are NOT using GNU as and ld. One
-# way to do that is to invoke Configure with
-#
-# sh Configure -Dcc='gcc -B/usr/ccs/bin/'
-#
-# (Note that the trailing slash is *required*.)
-# gcc will occasionally emit warnings about "unused prefix", but
-# these ought to be harmless. See below for more details.
-
-# See man vfork.
-usevfork=false
-
-d_suidsafe=define
-
-# Avoid all libraries in /usr/ucblib.
-# /lib is just a symlink to /usr/lib
-set `echo $glibpth | sed -e 's@/usr/ucblib@@' -e 's@ /lib @ @'`
-glibpth="$*"
-
-# Remove unwanted libraries. -lucb contains incompatible routines.
-# -lld and -lsec don't do anything useful. -lcrypt does not
-# really provide anything we need over -lc, so we drop it, too.
-# -lmalloc can cause a problem with GNU CC & Solaris. Specifically,
-# libmalloc.a may allocate memory that is only 4 byte aligned, but
-# GNU CC on the Sparc assumes that doubles are 8 byte aligned.
-# Thanks to Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
-set `echo " $libswanted " | sed -e 's@ ld @ @' -e 's@ malloc @ @' -e 's@ ucb @ @' -e 's@ sec @ @' -e 's@ crypt @ @'`
-libswanted="$*"
-
-# Look for architecture name. We want to suggest a useful default.
-case "$archname" in
-'')
- if test -f /usr/bin/arch; then
- archname=`/usr/bin/arch`
- archname="${archname}-${osname}"
- elif test -f /usr/ucb/arch; then
- archname=`/usr/ucb/arch`
- archname="${archname}-${osname}"
- fi
- ;;
-esac
-
-cat > UU/workshoplibpth.cbu << 'EOCBU'
-# This script UU/workshoplibpth.cbu will get 'called-back'
-# by other CBUs this script creates.
-case "$workshoplibpth_done" in
- '') if test `uname -p` = "sparc"; then
- case "$use64bitall" in
- "$define"|true|[yY]*)
- # add SPARC-specific 64 bit libraries
- loclibpth="$loclibpth /usr/lib/sparcv9"
- if test -n "$workshoplibs"; then
- loclibpth=`echo $loclibpth | sed -e "s% $workshoplibs%%" `
- for lib in $workshoplibs; do
- # Logically, it should be sparcv9.
- # But the reality fights back, it's v9.
- loclibpth="$loclibpth $lib/sparcv9 $lib/v9"
- done
- fi
- ;;
- *) loclibpth="$loclibpth $workshoplibs"
- ;;
- esac
- else
- loclibpth="$loclibpth $workshoplibs"
- fi
- workshoplibpth_done="$define"
- ;;
-esac
-EOCBU
-
-######################################################
-# General sanity testing. See below for excerpts from the Solaris FAQ.
-#
-# From roehrich@ironwood-fddi.cray.com Wed Sep 27 12:51:46 1995
-# Date: Thu, 7 Sep 1995 16:31:40 -0500
-# From: Dean Roehrich <roehrich@ironwood-fddi.cray.com>
-# To: perl5-porters@africa.nicoh.com
-# Subject: Re: On perl5/solaris/gcc
-#
-# Here's another draft of the perl5/solaris/gcc sanity-checker.
-
-case `type ${cc:-cc}` in
-*/usr/ucb/cc*) cat <<END >&4
-
-NOTE: Some people have reported problems with /usr/ucb/cc.
-If you have difficulties, please make sure the directory
-containing your C compiler is before /usr/ucb in your PATH.
-
-END
-;;
-esac
-
-
-# Check that /dev/fd is mounted. If it is not mounted, let the
-# user know that suid scripts may not work.
-/usr/bin/df /dev/fd 2>&1 > /dev/null
-case $? in
-0) ;;
-*)
- cat <<END >&4
-
-NOTE: Your system does not have /dev/fd mounted. If you want to
-be able to use set-uid scripts you must ask your system administrator
-to mount /dev/fd.
-
-END
- ;;
-esac
-
-
-# See if libucb can be found in /usr/lib. If it is, warn the user
-# that this may cause problems while building Perl extensions.
-/usr/bin/ls /usr/lib/libucb* >/dev/null 2>&1
-case $? in
-0)
- cat <<END >&4
-
-NOTE: libucb has been found in /usr/lib. libucb should reside in
-/usr/ucblib. You may have trouble while building Perl extensions.
-
-END
-;;
-esac
-
-# Use shell built-in 'type' command instead of /usr/bin/which to
-# avoid possible csh start-up problems and also to use the same shell
-# we'll be using to Configure and make perl.
-# The path name is the last field in the output, but the type command
-# has an annoying array of possible outputs, e.g.:
-# make is hashed (/opt/gnu/bin/make)
-# cc is /usr/ucb/cc
-# foo not found
-# use a command like type make | awk '{print $NF}' | sed 's/[()]//g'
-
-# See if make(1) is GNU make(1).
-# If it is, make sure the setgid bit is not set.
-make -v > make.vers 2>&1
-if grep GNU make.vers > /dev/null 2>&1; then
- tmp=`type make | awk '{print $NF}' | sed 's/[()]//g'`
- case "`/usr/bin/ls -lL $tmp`" in
- ??????s*)
- cat <<END >&2
-
-NOTE: Your PATH points to GNU make, and your GNU make has the set-group-id
-bit set. You must either rearrange your PATH to put /usr/ccs/bin before the
-GNU utilities or you must ask your system administrator to disable the
-set-group-id bit on GNU make.
-
-END
- ;;
- esac
-fi
-rm -f make.vers
-
-cat > UU/cc.cbu <<'EOCBU'
-# This script UU/cc.cbu will get 'called-back' by Configure after it
-# has prompted the user for the C compiler to use.
-
-# If the C compiler is gcc:
-# - check the fixed-includes
-# - check as(1) and ld(1), they should not be GNU
-# (GNU as and ld 2.8.1 and later are reportedly ok, however.)
-# If the C compiler is not gcc:
-# - Check if it is the Workshop/Forte compiler.
-# If it is, prepare for 64 bit and long doubles.
-# - check as(1) and ld(1), they should not be GNU
-# (GNU as and ld 2.8.1 and later are reportedly ok, however.)
-#
-# Watch out in case they have not set $cc.
-
-# Perl compiled with some combinations of GNU as and ld may not
-# be able to perform dynamic loading of extensions. If you have a
-# problem with dynamic loading, be sure that you are using the Solaris
-# /usr/ccs/bin/as and /usr/ccs/bin/ld. You can do that with
-# sh Configure -Dcc='gcc -B/usr/ccs/bin/'
-# (note the trailing slash is required).
-# Combinations that are known to work with the following hints:
-#
-# gcc-2.7.2, GNU as 2.7, GNU ld 2.7
-# egcs-1.0.3, GNU as 2.9.1 and GNU ld 2.9.1
-# --Andy Dougherty <doughera@lafayette.edu>
-# Tue Apr 13 17:19:43 EDT 1999
-
-# Get gcc to share its secrets.
-echo 'main() { return 0; }' > try.c
- # Indent to avoid propagation to config.sh
- verbose=`${cc:-cc} -v -o try try.c 2>&1`
-
-if echo "$verbose" | grep '^Reading specs from' >/dev/null 2>&1; then
- #
- # Using gcc.
- #
-
- # See if as(1) is GNU as(1). GNU as(1) might not work for this job.
- if echo "$verbose" | grep ' /usr/ccs/bin/as ' >/dev/null 2>&1; then
- :
- else
- cat <<END >&2
-
-NOTE: You are using GNU as(1). GNU as(1) might not build Perl. If you
-have trouble, you can use /usr/ccs/bin/as by including -B/usr/ccs/bin/
-in your ${cc:-cc} command. (Note that the trailing "/" is required.)
-
-END
- # Apparently not needed, at least for as 2.7 and later.
- # cc="${cc:-cc} -B/usr/ccs/bin/"
- fi
-
- # See if ld(1) is GNU ld(1). GNU ld(1) might not work for this job.
- # Recompute $verbose since we may have just changed $cc.
- verbose=`${cc:-cc} -v -o try try.c 2>&1 | grep ld 2>&1`
-
- if echo "$verbose" | grep ' /usr/ccs/bin/ld ' >/dev/null 2>&1; then
- # Ok, gcc directly calls the Solaris /usr/ccs/bin/ld.
- :
- elif echo "$verbose" | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then
- # Hmm. gcc doesn't call /usr/ccs/bin/ld directly, but it
- # does appear to be using it eventually. egcs-1.0.3's ld
- # wrapper does this.
- # All Solaris versions of ld I've seen contain the magic
- # string used in the grep.
- :
- else
- # No evidence yet of /usr/ccs/bin/ld. Some versions
- # of egcs's ld wrapper call /usr/ccs/bin/ld in turn but
- # apparently don't reveal that unless you pass in -V.
- # (This may all depend on local configurations too.)
-
- myld=`echo $verbose| grep ld | awk '/\/ld/ {print $1}'`
- # This assumes that gcc's output will not change, and that
- # /full/path/to/ld will be the first word of the output.
- # Thus myld is something like opt/gnu/sparc-sun-solaris2.5/bin/ld
-
- if $myld -V 2>&1 | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then
- # Ok, /usr/ccs/bin/ld eventually does get called.
- :
- else
- cat <<END >&2
-
-NOTE: You are using GNU ld(1). GNU ld(1) might not build Perl. If you
-have trouble, you can use /usr/ccs/bin/ld by including -B/usr/ccs/bin/
-in your ${cc:-cc} command. (Note that the trailing "/" is required.)
-
-I will try to use GNU ld by passing in the -Wl,-E flag, but if that
-doesn't work, you should use -B/usr/ccs/bin/ instead.
-
-END
- ccdlflags="$ccdlflags -Wl,-E"
- lddlflags="$lddlflags -W,l-E -G"
- fi
- fi
-
-else
- #
- # Not using gcc.
- #
-
- ccversion="`${cc:-cc} -V 2>&1|sed -n -e '1s/^cc: //p'`"
- case "$ccversion" in
- *WorkShop*) ccname=workshop ;;
- *) ccversion='' ;;
- esac
-
- case "$ccname" in
- workshop)
- cat >try.c <<EOM
-#include <sunmath.h>
-int main() { return(0); }
-EOM
- workshoplibs=`cc -### try.c -lsunmath -o try 2>&1|sed -n '/ -Y /s%.* -Y "P,\(.*\)".*%\1%p'|tr ':' '\n'|grep '/SUNWspro/'`
- . ./workshoplibpth.cbu
- ;;
- esac
-
- # See if as(1) is GNU as(1). GNU might not work for this job.
- case `as --version < /dev/null 2>&1` in
- *GNU*)
- cat <<END >&2
-
-NOTE: You are using GNU as(1). GNU as(1) might not build Perl.
-You must arrange to use /usr/ccs/bin/as, perhaps by adding /usr/ccs/bin
-to the beginning of your PATH.
-
-END
- ;;
- esac
-
- # See if ld(1) is GNU ld(1). GNU ld(1) might not work for this job.
- # ld --version doesn't properly report itself as a GNU tool,
- # as of ld version 2.6, so we need to be more strict. TWP 9/5/96
- # Sun's ld always emits the "Software Generation Utilities" string.
- if ld -V 2>&1 | grep "ld: Software Generation Utilities" >/dev/null 2>&1; then
- # Ok, ld is /usr/ccs/bin/ld.
- :
- else
- cat <<END >&2
-
-NOTE: You are apparently using GNU ld(1). GNU ld(1) might not build Perl.
-You should arrange to use /usr/ccs/bin/ld, perhaps by adding /usr/ccs/bin
-to the beginning of your PATH.
-
-END
- fi
-
-fi
-
-# as --version or ld --version might dump core.
-rm -f try try.c
-rm -f core
-
-# XXX
-EOCBU
-
-cat > UU/usethreads.cbu <<'EOCBU'
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-case "$usethreads" in
-$define|true|[yY]*)
- ccflags="-D_REENTRANT $ccflags"
-
- # sched_yield is in -lposix4 up to Solaris 2.6, in -lrt starting with Solaris 2.7
- case `uname -r` in
- 5.[0-6] | 5.5.1) sched_yield_lib="posix4" ;;
- *) sched_yield_lib="rt";
- esac
- set `echo X "$libswanted "| sed -e "s/ c / $sched_yield_lib pthread c /"`
- shift
- libswanted="$*"
-
- # On Solaris 2.6 x86 there is a bug with sigsetjmp() and siglongjmp()
- # when linked with the threads library, such that whatever positive
- # value you pass to siglongjmp(), sigsetjmp() returns 1.
- # Thanks to Simon Parsons <S.Parsons@ftel.co.uk> for this report.
- # Sun BugID is 4117946, "sigsetjmp always returns 1 when called by
- # siglongjmp in a MT program". As of 19980622, there is no patch
- # available.
- cat >try.c <<'EOM'
- /* Test for sig(set|long)jmp bug. */
- #include <setjmp.h>
-
- main()
- {
- sigjmp_buf env;
- int ret;
-
- ret = sigsetjmp(env, 1);
- if (ret) { return ret == 2; }
- siglongjmp(env, 2);
- }
-EOM
- if test "`arch`" = i86pc -a `uname -r` = 5.6 && \
- ${cc:-cc} try.c -lpthread >/dev/null 2>&1 && ./a.out; then
- d_sigsetjmp=$undef
- cat << 'EOM' >&2
-
-You will see a *** WHOA THERE!!! *** message from Configure for
-d_sigsetjmp. Keep the recommended value. See hints/solaris_2.sh
-for more information.
-
-EOM
- fi
- ;;
-esac
-EOCBU
-
-cat > UU/uselargefiles.cbu <<'EOCBU'
-# This script UU/uselargefiles.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use large files.
-case "$uselargefiles" in
-''|$define|true|[yY]*)
-
-# Keep these in the left margin.
-ccflags_uselargefiles="`getconf LFS_CFLAGS 2>/dev/null`"
-ldflags_uselargefiles="`getconf LFS_LDFLAGS 2>/dev/null`"
-libswanted_uselargefiles="`getconf LFS_LIBS 2>/dev/null|sed -e 's@^-l@@' -e 's@ -l@ @g`"
-
- ccflags="$ccflags $ccflags_uselargefiles"
- ldflags="$ldflags $ldflags_uselargefiles"
- libswanted="$libswanted $libswanted_uselargefiles"
- ;;
-esac
-EOCBU
-
-# This is truly a mess.
-case "$usemorebits" in
-"$define"|true|[yY]*)
- use64bitint="$define"
- uselongdouble="$define"
- ;;
-esac
-
-if test `uname -p` = "sparc"; then
- cat > UU/use64bitint.cbu <<'EOCBU'
-# This script UU/use64bitint.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use 64 bit integers.
-case "$use64bitint" in
-"$define"|true|[yY]*)
- case "`uname -r`" in
- 5.[0-4])
- cat >&4 <<EOM
-Solaris `uname -r|sed -e 's/^5\./2./'` does not support 64-bit integers.
-You should upgrade to at least Solaris 2.5.
-EOM
- exit 1
- ;;
- esac
- ;;
-esac
-EOCBU
-
- cat > UU/use64bitall.cbu <<'EOCBU'
-# This script UU/use64bitall.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to be maximally 64 bitty.
-case "$use64bitall-$use64bitall_done" in
-"$define-"|true-|[yY]*-)
- case "`uname -r`" in
- 5.[0-6])
- cat >&4 <<EOM
-Solaris `uname -r|sed -e 's/^5\./2./'` does not support 64-bit pointers.
-You should upgrade to at least Solaris 2.7.
-EOM
- exit 1
- ;;
- esac
- libc='/usr/lib/sparcv9/libc.so'
- if test ! -f $libc; then
- cat >&4 <<EOM
-
-I do not see the 64-bit libc, $libc.
-Cannot continue, aborting.
-
-EOM
- exit 1
- fi
- . ./workshoplibpth.cbu
- case "$cc -v 2>/dev/null" in
- *gcc*)
- echo 'main() { return 0; }' > try.c
- case "`${cc:-cc} -mcpu=v9 -m64 -S try.c 2>&1 | grep 'm64 is not supported by this configuration'`" in
- *"m64 is not supported"*)
- cat >&4 <<EOM
-
-Full 64-bit build is not supported by this gcc configuration.
-Check http://gcc.gnu.org/ for the latest news of availability
-of gcc for 64-bit Sparc.
-
-Cannot continue, aborting.
-
-EOM
- exit 1
- ;;
- esac
- ccflags="$ccflags -mcpu=v9 -m64"
- if test X`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null` != X; then
- ccflags="$ccflags -Wa,`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
- fi
- # no changes to ld flags, as (according to man ld):
- #
- # There is no specific option that tells ld to link 64-bit
- # objects; the class of the first object that gets processed
- # by ld determines whether it is to perform a 32-bit or a
- # 64-bit link edit.
- ;;
- *)
- ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
- ldflags="$ldflags `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`"
- lddlflags="$lddlflags -G `getconf XBS5_LP64_OFF64_LDFLAGS 2>/dev/null`"
- ;;
- esac
- libscheck='case "`/usr/bin/file $xxx`" in
-*64-bit*|*SPARCV9*) ;;
-*) xxx=/no/64-bit$xxx ;;
-esac'
-
- use64bitall_done=yes
- ;;
-esac
-EOCBU
-
- # Actually, we want to run this already now, if so requested,
- # because we need to fix up things right now.
- case "$use64bitall" in
- "$define"|true|[yY]*)
- # CBUs expect to be run in UU
- cd UU; . ./use64bitall.cbu; cd ..
- ;;
- esac
-fi
-
-cat > UU/uselongdouble.cbu <<'EOCBU'
-# This script UU/uselongdouble.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use long doubles.
-case "$uselongdouble" in
-"$define"|true|[yY]*)
- if test -f /opt/SUNWspro/lib/libsunmath.so; then
- libs="$libs -lsunmath"
- ldflags="$ldflags -L/opt/SUNWspro/lib -R/opt/SUNWspro/lib"
- d_sqrtl=define
- else
- cat >&4 <<EOM
-
-The Sun Workshop math library is not installed; therefore I do not
-know how to do long doubles, sorry. I'm disabling the use of long
-doubles.
-EOM
- uselongdouble="$undef"
- fi
- ;;
-esac
-EOCBU
-
-rm -f try.c try.o try a.out
diff --git a/contrib/perl5/hints/stellar.sh b/contrib/perl5/hints/stellar.sh
deleted file mode 100644
index 23e15e9..0000000
--- a/contrib/perl5/hints/stellar.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-optimize="-O0"
-ccflags="$ccflags -nw"
diff --git a/contrib/perl5/hints/sunos_4_0.sh b/contrib/perl5/hints/sunos_4_0.sh
deleted file mode 100644
index 56a87bf..0000000
--- a/contrib/perl5/hints/sunos_4_0.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-ccflags="$ccflags -DFPUTS_BOTCH"
-i_unistd=$undef
diff --git a/contrib/perl5/hints/sunos_4_1.sh b/contrib/perl5/hints/sunos_4_1.sh
deleted file mode 100644
index af0bca1..0000000
--- a/contrib/perl5/hints/sunos_4_1.sh
+++ /dev/null
@@ -1,84 +0,0 @@
-# hints/sunos_4_1.sh
-# Last modified: Wed May 27 11:00:02 EDT 1998
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-
-case "$cc" in
-*gcc*) usevfork=false
- # GNU as and GNU ld might not work. See the INSTALL file.
- ;;
-*) usevfork=true ;;
-esac
-
-# Configure will issue a WHOA warning. The problem is that
-# Configure finds getzname, not tzname. If you're in the System V
-# environment, you can set d_tzname='define' since tzname[] is
-# available in the System V environment.
-d_tzname='undef'
-
-# Configure will issue a WHOA warning. The problem is that unistd.h
-# contains incorrect prototypes for some functions in the usual
-# BSD-ish environment. In particular, it has
-# extern int getgroups(/* int gidsetsize, gid_t grouplist[] */);
-# but groupslist[] ought to be of type int, not gid_t.
-# This is only really a problem for perl if the
-# user is using gcc, and not running in the SysV environment.
-# The gcc fix-includes script exposes those incorrect prototypes.
-# There may be other examples as well. Volunteers are welcome to
-# track them all down :-). In the meantime, we'll just skip unistd.h
-# for SunOS in most of the code.
-# However, see ext/POSIX/hints/sunos_4.pl for one exception.
-i_unistd='undef'
-# See util.c for another: We need _SC_OPEN_MAX, which is in
-# <unistd.h>.
-
-# fflush(NULL) will core dump on SunOS 4.1.3. In util.c we'll
-# try explicitly fflushing all open files. Unfortunately,
-# on my SunOS 4.1.3 system, sysconf(_SC_OPEN_MAX) returns
-# 64, but only 32 of those file pointers can be accessed
-# directly by _iob[i]. The remainder are off in dynamically
-# allocated memory somewhere and I don't know to automatically
-# fflush() them. -- Andy Dougherty Wed May 26 15:25:22 EDT 1999
-util_cflags='ccflags="$ccflags -DPERL_FFLUSH_ALL_FOPEN_MAX=32"'
-
-cat << 'EOM' >&4
-
-You will probably see *** WHOA THERE!!! *** messages from Configure for
-d_tzname and i_unistd. Keep the recommended values. See
-hints/sunos_4_1.sh for more information.
-EOM
-
-# The correct setting of groupstype depends on which version of the C
-# library is used. If you are in the 'System V environment'
-# (i.e. you have /usr/5bin ahead of /usr/bin in your PATH), and
-# you use Sun's cc compiler, then you'll pick up /usr/5bin/cc, which
-# links against the C library in /usr/5lib. This library has
-# groupstype='gid_t'.
-# If you are in the normal BSDish environment, then you'll pick up
-# /usr/ucb/cc, which links against the C library in /usr/lib. That
-# library has groupstype='int'.
-#
-# If you are using gcc, it links against the C library in /usr/lib
-# independent of whether or not you are in the 'System V environment'.
-# If you want to use the System V libraries, then you need to
-# manually set groupstype='gid_t' and add explicit references to
-# /usr/5lib when Configure prompts you for where to look for libraries.
-#
-# Check if user is in a bsd or system 5 type environment
-if cat -b /dev/null 2>/dev/null
-then # bsd
- groupstype='int'
-else # sys5
- case "$cc" in
- *gcc*) groupstype='int';; # gcc doesn't do anything special
- *) groupstype='gid_t';; # /usr/5bin/cc pulls in /usr/5lib/ stuff.
- esac
-fi
-
-# If you get the message "unresolved symbol '__lib_version' " while
-# linking, your system probably has the optional 'acc' compiler (and
-# libraries) installed, but you are using the bundled 'cc' compiler with
-# the unbundled libraries. The solution is either to use 'acc' and the
-# unbundled libraries (specifically /lib/libm.a), or 'cc' and the bundled
-# library.
-#
-# Thanks to William Setzer <William_Setzer@ncsu.edu> for this info.
diff --git a/contrib/perl5/hints/svr4.sh b/contrib/perl5/hints/svr4.sh
deleted file mode 100644
index 69af6fd..0000000
--- a/contrib/perl5/hints/svr4.sh
+++ /dev/null
@@ -1,160 +0,0 @@
-# svr4 hints, System V Release 4.x
-# Last modified 1996/10/25 by Tye McQueen, tye@metronet.com
-# Merged 1998/04/23 with perl5.004_04 distribution by
-# Andy Dougherty <doughera@lafayette.edu>
-
-# Use Configure -Dcc=gcc to use gcc.
-case "$cc" in
-'') cc='/bin/cc'
- test -f $cc || cc='/usr/ccs/bin/cc'
- ;;
-esac
-
-# We include support for using libraries in /usr/ucblib, but the setting
-# of libswanted excludes some libraries found there. If you run into
-# problems, you may have to remove "ucb" from libswanted. Just delete
-# the comment '#' from the sed command below.
-ldflags='-L/usr/ccs/lib -L/usr/ucblib'
-ccflags='-I/usr/include -I/usr/ucbinclude'
-# Don't use problematic libraries:
-libswanted=`echo " $libswanted " | sed -e 's/ malloc / /'` # -e 's/ ucb / /'`
-# libmalloc.a - Probably using Perl's malloc() anyway.
-# libucb.a - Remove it if you have problems ld'ing. We include it because
-# it is needed for ODBM_File and NDBM_File extensions.
-
-if [ -r /usr/ucblib/libucb.a ]; then # If using BSD-compat. library:
- d_Gconvert='gcvt((x),(n),(b))' # Try gcvt() before gconvert().
- # Use the "native" counterparts, not the BSD emulation stuff:
- d_bcmp='undef' d_bcopy='undef' d_bzero='undef' d_safebcpy='undef'
- d_index='undef' d_killpg='undef' d_getprior='undef' d_setprior='undef'
- d_setlinebuf='undef'
- # d_setregid='undef' d_setreuid='undef' # ???
-fi
-
-# UnixWare has /usr/lib/libc.so.1, /usr/lib/libc.so.1.1, and
-# /usr/ccs/lib/libc.so. Configure chooses libc.so.1.1 while it
-# appears that /usr/ccs/lib/libc.so contains more symbols:
-#
-# Try the following if you want to use nm-extraction. We'll just
-# skip the nm-extraction phase, since searching for all the different
-# library versions will be hard to keep up-to-date.
-#
-# if [ "" = "$libc" -a -f /usr/ccs/lib/libc.so -a \
-# -f /usr/lib/libc.so.1 -a -f /usr/lib/libc.so.1.1 ]; then
-# if nm -h /usr/ccs/lib/libc.so | egrep '\<_?select$' >/dev/null; then
-# if nm -h /usr/lib/libc.so.1 | egrep '\<_?select$'` >/dev/null ||
-# nm -h /usr/lib/libc.so.1.1 | egrep '\<_?select$'` >/dev/null; then
-# :
-# else
-# libc=/usr/ccs/lib/libc.so
-# fi
-# fi
-# fi
-#
-# Don't bother with nm. Just compile & link a small C program.
-case "$usenm" in
-'') usenm=false;;
-esac
-
-# Broken C-Shell tests (Thanks to Tye McQueen):
-# The OS-specific checks may be obsoleted by the this generic test.
- sh_cnt=`sh -c 'echo /*' | wc -c`
- csh_cnt=`csh -f -c 'glob /*' 2>/dev/null | wc -c`
- csh_cnt=`expr 1 + $csh_cnt`
-if [ "$sh_cnt" -ne "$csh_cnt" ]; then
- echo "You're csh has a broken 'glob', disabling..." >&2
- d_csh='undef'
-fi
-
-# Unixware-specific problems. The undocumented -X argument to uname
-# is probably a reasonable way of detecting UnixWare.
-# UnixWare has a broken csh. (This might already be detected above).
-# In Unixware 2.1.1 the fields in FILE* got renamed!
-# Unixware 1.1 can't cast large floats to 32-bit ints.
-# Configure can't detect memcpy or memset on Unixware 2 or 7
-#
-# Leave leading tabs on the next two lines so Configure doesn't
-# propagate these variables to config.sh
- uw_ver=`uname -v`
- uw_isuw=`uname -X 2>&1 | grep Release`
-
-if [ "$uw_isuw" = "Release = 4.2" ]; then
- case $uw_ver in
- 1.1)
- d_casti32='undef'
- ;;
- esac
-fi
-if [ "$uw_isuw" = "Release = 4.2MP" ]; then
- case $uw_ver in
- 2.1)
- d_csh='undef'
- d_memcpy='define'
- d_memset='define'
- ;;
- 2.1.*)
- d_csh='undef'
- d_memcpy='define'
- d_memset='define'
- stdio_cnt='((fp)->__cnt)'
- d_stdio_cnt_lval='define'
- stdio_ptr='((fp)->__ptr)'
- d_stdio_ptr_lval='define'
- ;;
- esac
-fi
-if [ "$uw_isuw" = "Release = 5" ]; then
- case $uw_ver in
- 7)
- d_csh='undef'
- d_memcpy='define'
- d_memset='define'
- stdio_cnt='((fp)->__cnt)'
- d_stdio_cnt_lval='define'
- stdio_ptr='((fp)->__ptr)'
- d_stdio_ptr_lval='define'
- ;;
- esac
-fi
-# End of Unixware-specific tests.
-
-# DDE SMES Supermax Enterprise Server
-case "`uname -sm`" in
-"UNIX_SV SMES")
- # the *grent functions are in libgen.
- libswanted="$libswanted gen"
- # csh is broken (also) in SMES
- # This may already be detected by the generic test above.
- d_csh='undef'
- case "$cc" in
- *gcc*) ;;
- *) # for cc we need -K PIC (not -K pic)
- cccdlflags="$cccdlflags -K PIC"
- ;;
- esac
- ;;
-esac
-
-# NCR MP-RAS. Thanks to Doug Hendricks for this info.
-# The output of uname -a looks like this
-# foo foo 4.0 3.0 3441 Pentium III(TM)-ISA/PCI
-# Configure sets osname=svr4.0, osvers=3.0, archname='3441-svr4.0'
-case "$myuname" in
-*3441*)
- # With the NCR High Performance C Compiler R3.0c, miniperl fails
- # t/op/regexp.t test 461 unless we compile with optimizie=-g.
- # The whole O/S is being phased out, so more detailed probing
- # is probably not warranted.
- case "$optimize" in
- '') optimize='-g' ;;
- esac
- ;;
-esac
-
-# Configure may fail to find lstat() since it's a static/inline function
-# in <sys/stat.h> on Unisys U6000 SVR4, UnixWare 2.x, and possibly other
-# SVR4 derivatives. (Though UnixWare has it in /usr/ccs/lib/libc.so.)
-d_lstat=define
-
-d_suidsafe='define' # "./Configure -d" can't figure this out easilly
-
diff --git a/contrib/perl5/hints/svr5.sh b/contrib/perl5/hints/svr5.sh
deleted file mode 100644
index f736895..0000000
--- a/contrib/perl5/hints/svr5.sh
+++ /dev/null
@@ -1,221 +0,0 @@
-# svr5 hints, System V Release 5.x (UnixWare 7)
-# mods after mail fm Andy Dougherty
-# Reworked by hops@sco.com Sept/Oct 1999 for UW7.1 platform support
-# Boyd Gerber, gerberb@zenez.com 1999/09/21 for threads support.
-# Originally taken from svr4 hints.sh 21-Sep-98 hops@sco.com
-# which was version of 1996/10/25 by Tye McQueen, tye@metronet.com
-
-# Use Configure -Dusethreads to enable threads.
-# Use Configure -Dcc=gcc to use gcc.
-case "$cc" in
-*gcc*)
- # "$gccversion" not set yet
- vers=`gcc -v 2>&1 | sed -n -e 's@.*version \([^ ][^ ]*\) .*@\1@p'`
- case $vers in
- *2.95*)
- ccflags='-fno-strict-aliasing'
- # More optimisation provided in gcc-2.95 causes miniperl to segv.
- # -fno-strict-aliasing is supposed to correct this but
- # if it doesn't and you get segv when the build runs miniperl then
- # disable optimisation as below
- # optimize=' '
- ;;
- esac
- ;;
-esac
-
-# Hardwire the processor to 586 for consistancy with autoconf
-# archname='i586-svr5'
-# -- seems this is generally disliked by perl porters so leave it to float
-
-# Our default setup excludes anything from /usr/ucblib (and consequently dbm)
-# as later modules assume symbols found are available in shared libs
-# On svr5 these are static archives which causes problems for
-# dynamic modules loaded later (and ucblib is a bad dream anyway)
-#
-# However there is a dbm library built from the ucb sources outside ucblib
-# at http://www.sco.com/skunkware (installing into /usr/local) so if we
-# detect this we'll use it. You can change the default
-# (to allow ucblib and its dbm or disallowing non ucb dbm) by
-# changing 'want_*' config values below to '' to disable or otherwise to enable
-
-# Leave leading tabs so Configure doesn't propagate variables to config.sh
-
- want_ucb='' # don't use anything from /usr/ucblib - icky
- want_dbm='yes' # use dbm if can find library in /usr/local/lib
- want_gdbm='yes' # use gdbm if can find library in /usr/local/lib
- want_udk70='' # link with old static libc pieces
- # link with udk70 if building on 7.1 abd want resulting binary
- # to run on uw7.0* - it will link in referenced static symbols
- # of libc that are (now) in the shared libc.so on 7.1 but were
- # not there in 7.0.
- # There are still scenarios where this is still insufficient so
- # overall it is preferable to get ptf7051e
- # ftp://ftp.sco.com/SLS/ptf7051e.Z
- # installed on any/all 7.0 systems and leave the above unset.
-
-if [ "$want_ucb" ] ; then
- ldflags= '-L/usr/ucblib'
- ccflags='-I/usr/ucbinclude'
- # /usr/ccs/include and /usr/ccs/lib are used implicitly by cc as reqd
-else
- libswanted=`echo " $libswanted " | sed -e 's/ ucb / /'`
- glibpth=`echo " $glibpth " | sed -e 's/ \/usr\/ucblib / /'`
-
- # If see libdbm in /usr/local and not overidden assume its the
- # non ucblib rebuild from skunkware and use it
- if [ ! -f /usr/local/lib/libdbm.so -o ! "$want_dbm" ] ; then
- i_dbm='undef'
- libswanted=`echo " $libswanted " | sed -e 's/ dbm / /'`
- fi
-fi
-
-if [ ! "$want_gdbm" ] ; then
- i_gdbm='undef'
- libswanted=`echo " $libswanted " | sed -e 's/ gdbm / /'`
-fi
-
-
-# Don't use problematic libraries:
-# libmalloc.a - Probably using Perl's malloc() anyway.
-# libc: on UW7 don't want -lc explicitly as native cc gives warnings/errors
-libswanted=`echo " $libswanted " | sed -e 's/ malloc / /' -e 's/ c / /'`
-
-# remove /shlib and /lib from library search path as both symlink to /usr/lib
-# where runtime shared libc is
-glibpth=`echo " $glibpth " | sed -e 's/ \/shlib / /' -e 's/ \/lib / /`
-
-# Don't use BSD emulation pieces (/usr/ucblib) regardless
-# these would probably be autonondetected anyway but ...
-d_Gconvert='gcvt((x),(n),(b))' # Try gcvt() before gconvert().
-d_bcopy='undef' d_bcmp='undef' d_bzero='undef' d_safebcpy='undef'
-d_index='undef' d_killpg='undef' d_getprior='undef' d_setprior='undef'
-d_setlinebuf='undef'
-d_setregid='undef' d_setreuid='undef' # -- in /usr/lib/libc.so.1
-
-
-# Broken C-Shell tests (Thanks to Tye McQueen):
-# The OS-specific checks may be obsoleted by the this generic test.
- sh_cnt=`sh -c 'echo /*' | wc -c`
- csh_cnt=`csh -f -c 'glob /*' 2>/dev/null | wc -c`
- csh_cnt=`expr 1 + $csh_cnt`
-if [ "$sh_cnt" -ne "$csh_cnt" ]; then
- echo "You're csh has a broken 'glob', disabling..." >&2
- d_csh='undef'
-fi
-
-# Unixware-specific problems. UW7 give correctname with uname -s
-# UnixWare has a broken csh. (This might already be detected above).
-# Configure can't detect memcpy or memset on Unixware 2 or 7
-#
-# Leave leading tabs on the next two lines so Configure doesn't
-# propagate these variables to config.sh
- uw_ver=`uname -v`
- uw_isuw=`uname -s 2>&1`
-
-if [ "$uw_isuw" = "UnixWare" ]; then
- case $uw_ver in
- 7.1*)
- d_csh='undef'
- d_memcpy='define'
- d_memset='define'
- stdio_cnt='((fp)->__cnt)'
- d_stdio_cnt_lval='define'
- stdio_ptr='((fp)->__ptr)'
- d_stdio_ptr_lval='define'
-
- d_bcopy='define' # In /usr/lib/libc.so.1
- d_setregid='define' # "
- d_setreuid='define' # "
-
- if [ -f /usr/ccs/lib/libcudk70.a -a "$want_udk70" ] ; then
- libswanted=" $libswanted cudk70"
- fi
- ;;
- 7*)
- d_csh='undef'
- d_memcpy='define'
- d_memset='define'
- stdio_cnt='((fp)->__cnt)'
- d_stdio_cnt_lval='define'
- stdio_ptr='((fp)->__ptr)'
- d_stdio_ptr_lval='define'
- ;;
- esac
-fi
-# End of Unixware-specific tests.
-
-###############################################################
-# Dynamic loading section: Is default so it should just happen.
-# set below to explicitly force.
-# usedl='define'
-# dlext='so'
-# dlsrc='dl_dlopen.xs'
-#
-# ccdlflags : must tell the linker to export all global symbols
-# cccdlflags: must tell the compiler to generate relocatable code
-# lddlflags : must tell the linker to output a shared library
-
-# use shared perl lib
-useshrplib='true'
-
-case "$cc" in
- *gcc*)
- ccdlflags='-Xlinker -Bexport '
- cccdlflags='-fpic'
- lddlflags='-G '
- ;;
-
- *)
- ccdlflags='-Wl,-Bexport'
- cccdlflags='-Kpic'
- lddlflags='-G -Wl,-Bexport'
- ;;
-esac
-
-############################################################################
-# Thread support
-# use Configure -Dusethreads to enable
-# This script UU/usethreads.cbu will get 'called-back' by Configure
-# after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
-case "$usethreads" in
-$define|true|[yY]*)
- ccflags="$ccflags"
- shift
- libswanted="$*"
- case "$cc" in
- *gcc*)
- ccflags="-D_REENTRANT $ccflags -fpic -pthread"
- cccdlflags='-fpic'
- lddlflags='-pthread -G '
- ;;
- *)
- ccflags="-D_REENTRANT $ccflags -KPIC -Kthread"
- ccdlflags='-Kthread -Wl,-Bexport'
- cccdlflags='-KPIC -Kthread'
- lddlflags='-G -Kthread -Wl,-Bexport '
- ldflags='-Kthread'
- ;;
- esac
-esac
-EOCBU
-
-
-d_suidsafe='define' # "./Configure -d" can't figure this out easily
-
-################## final caveat msgs to builder ###############
-cat <<'EOM' >&4
-
-If you wish to use dynamic linking, you must use
- LD_LIBRARY_PATH=`pwd`; export LD_LIBRARY_PATH
-or
- setenv LD_LIBRARY_PATH `pwd`
-before running make.
-
-If you are using shared libraries from /usr/local/lib
-for libdbm or libgdbm you may need to set
- LD_RUN_PATH=/usr/local/lib; export LD_RUN_PATH
-in order for Configure to compile the simple test program
-
-EOM
diff --git a/contrib/perl5/hints/ti1500.sh b/contrib/perl5/hints/ti1500.sh
deleted file mode 100644
index 69482d8..0000000
--- a/contrib/perl5/hints/ti1500.sh
+++ /dev/null
@@ -1 +0,0 @@
-usemymalloc='n'
diff --git a/contrib/perl5/hints/titanos.sh b/contrib/perl5/hints/titanos.sh
deleted file mode 100644
index 88a3e7a..0000000
--- a/contrib/perl5/hints/titanos.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-# Hints file (perl 4.019) for Kubota Pacific's Titan 3000 Series Machines.
-# Created by: JT McDuffie (jt@kpc.com) 26 DEC 1991
-# p5ed by: Jarkko Hietaniemi <jhi@iki.fi> Aug 27 1994
-# NOTE: You should run Configure with tcsh (yes, tcsh).
-# Comments by Andy Dougherty <doughera@lafcol.lafayette.edu> 28 Mar 1995
-alignbytes="8"
-byteorder="4321"
-castflags='0'
-gidtype='ushort'
-groupstype='unsigned short'
-intsize='4'
-usenm='true'
-nm_opt='-eh'
-malloctype='void *'
-ccflags="$ccflags -I/usr/include/net -DDEBUGGING -DSTANDARD_C"
-cppflags="$cppflags -I/usr/include/net -DDEBUGGING -DSTANDARD_C"
-stdchar='unsigned char'
-#
-# Apparently there are some harmful libs in Configure's $libswanted.
-# Perl5.000 had: libs='-lnsl -ldbm -lPW -lmalloc -lm'
-# Unfortunately, this line prevents users from including things like
-# -lgdbm and -ldb, which they may or may not have or want.
-# We should probably fiddle with libswanted instead of libs.
-# And even there, we should only bother to delete harmful libraries.
-# However, I don't know what they are or why they should be deleted,
-# so this will have to do for now. --AD 28 Mar 1995
-libswanted='sfio nsl dbm gdbm db PW malloc m'
-#
-# Extensions: This system can not compile POSIX. We'll let Configure
-# figure out the others.
-useposix='n'
-#
-uidtype='ushort'
-voidflags='7'
-inclwanted='/usr/include /usr/include/net'
-# Setting libpth shouldn't be needed any more.
-# libpth='/usr/lib /usr/local/lib /lib'
-pth='. /bin /usr/bin /usr/ucb /usr/local/bin /usr/X11/bin /usr/lbin /etc /usr/lib'
diff --git a/contrib/perl5/hints/ultrix_4.sh b/contrib/perl5/hints/ultrix_4.sh
deleted file mode 100644
index f418ea1..0000000
--- a/contrib/perl5/hints/ultrix_4.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-# hints/ultrix_4.sh
-# Last updated by Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Fri Feb 10 10:04:51 EST 1995
-#
-# Use Configure -Dcc=gcc to use gcc.
-#
-# This used to use -g, but that pulls in -DDEBUGGING by default.
-case "$optimize" in
-'')
- # recent versions have a working compiler.
- case "$osvers" in
- *4.[45]*) optimize='-O2' ;;
- *) optimize='none' ;;
- esac
- ;;
-esac
-
-# Some users have reported Configure runs *much* faster if you
-# replace all occurences of /bin/sh by /bin/sh5
-# Something like:
-# sed 's!/bin/sh!/bin/sh5!g' Configure > Configure.sh5
-# Then run "sh5 Configure.sh5 [your options]"
-
-case "$myuname" in
-*risc*) cat <<EOF >&4
-Note that there is a bug in some versions of NFS on the DECStation that
-may cause utime() to work incorrectly. If so, regression test io/fs
-may fail if run under NFS. Ignore the failure.
-EOF
-esac
-
-# Compiler flags that depend on osversion:
-case "$cc" in
-*gcc*) ;;
-*)
- case "$osvers" in
- *4.1*) ccflags="$ccflags -DLANGUAGE_C -Olimit 3800" ;;
- *4.2*) ccflags="$ccflags -DLANGUAGE_C -Olimit 3800"
- # Prototypes sometimes cause compilation errors in 4.2.
- prototype=undef
- case "$myuname" in
- *risc*) d_volatile=undef ;;
- esac
- ;;
- *4.3*) ccflags="$ccflags -std1 -DLANGUAGE_C -Olimit 3800" ;;
- *) ccflags="$ccflags -std -Olimit 3800" ;;
- esac
- ;;
-esac
-
-# Other settings that depend on $osvers:
-case "$osvers" in
-*4.1*) ;;
-*4.2*) libswanted=`echo $libswanted | sed 's/ malloc / /'` ;;
-*4.3*) ;;
-*) ranlib='ranlib' ;;
-esac
-
-# Settings that don't depend on $osvers:
-
-util_cflags='ccflags="$ccflags -DLOCALE_ENVIRON_REQUIRED"'
-groupstype='int'
-# This will cause a WHOA THERE warning, but it's accurate. The
-# configure test should be beefed up to try using the field when
-# it can't find any of the standardly-named fields.
-d_dirnamlen='define'
-
-# Ultrix can mmap only character devices, not regular files,
-# which is rather useless state of things for Perl.
-d_mmap='undef'
diff --git a/contrib/perl5/hints/umips.sh b/contrib/perl5/hints/umips.sh
deleted file mode 100644
index 17d5ff4..0000000
--- a/contrib/perl5/hints/umips.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-# hints/umips.sh
-#
-# Mips R3030 / Bruker AspectSation running RISC/os (UMIPS) 4.52
-# compiling with gcc 2.7.2
-#
-# Created Sat Aug 17 00:17:15 MET DST 1996
-# by Guenter Schmidt <gsc@bruker.de>
-#
-# uname -a output looks like this:
-# xxx xxx 4_52 umips mips
-
-# Speculative notes on getting cc to work added by
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Tue Aug 20 21:51:49 EDT 1996
-
-# Recommend the GNU C Compiler
-case "$cc" in
-'') echo 'gcc 2.7.2 (or later) is recommended. Use Configure -Dcc=gcc' >&4
- # The test with the native compiler not succeed:
- # `sh cflags libperl.a miniperlmain.o` miniperlmain.c
- # CCCMD = cc -c -I/usr/local/include -I/usr/include/bsd -DLANGUAGE_C -O
- # ccom: Error: ./mg.h, line 12: redeclaration of formal parameter, sv
- # int (*svt_set) (SV *sv, MAGIC* mg);
- # ------------------------------------------^
- # ccom: Error: ./mg.h, line 12: redeclaration of formal parameter, mg
- # This is probably a result of incomplete prototype support.
- prototype=undef
- ;;
-esac
-
-# POSIX support in RiscOS is not useable
-useposix='false'
-
-# Will give WHOA message, but the prototype are defined in the GCC inc dirs
-case "$cc" in
-*gcc*) d_shmatprototype='define' ;;
-esac
-
-glibpth="$glibpth /usr/lib/cmplrs/cc"
diff --git a/contrib/perl5/hints/unicos.sh b/contrib/perl5/hints/unicos.sh
deleted file mode 100644
index 089b960..0000000
--- a/contrib/perl5/hints/unicos.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-case `uname -r` in
-6.1*) shellflags="-m+65536" ;;
-esac
-case "$optimize" in
-# If we used fastmd (the default) integer values would be limited to 46 bits.
-# --Mark P. Lutz
-'') optimize="$optimize -h nofastmd" ;;
-esac
-# The default is to die in runtime on math overflows.
-# Let's not do that. --jhi
-ccflags="$ccflags -h matherror=errno"
-# Give int((2/3)*3) a chance to be 2, not 1. --jhi
-ccflags="$ccflags -h rounddiv"
-# Avoid an optimizer bug where a volatile variables
-# isn't correctly saved and restored --Mark P. Lutz
-pp_ctl_cflags='ccflags="$ccflags -h scalar0 -h vector0"'
-case "$usemymalloc" in
-'') # The perl malloc.c SHOULD work says Ilya.
- # But for the time being (5.004_68), alas, it doesn't. --jhi
- # usemymalloc='y'
- # ccflags="$ccflags -DNO_RCHECK"
- usemymalloc='n'
- ;;
-esac
-# Configure gets fooled for some reason. There is no getpgid().
-d_getpgid='undef'
-# These exist but do not really work.
-d_setregid='undef'
-d_setreuid='undef'
diff --git a/contrib/perl5/hints/unicosmk.sh b/contrib/perl5/hints/unicosmk.sh
deleted file mode 100644
index f3416ff..0000000
--- a/contrib/perl5/hints/unicosmk.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-case "$optimize" in
-'') optimize="-O1" ;;
-esac
-d_setregid='undef'
-d_setreuid='undef'
-case "$usemymalloc" in
-'') usemymalloc='y'
- ccflags="$ccflags -DNO_RCHECK"
- ;;
-esac
-# If somebody ignores the Cray PATH.
-case ":$PATH:" in
-*:/opt/ctl/bin:*) ;;
-'') case "$cc" in
- '') test -x /opt/ctl/bin/cc && cc=/opt/ctl/bin/cc ;;
- esac
- ;;
-esac
-# As of UNICOS/mk 2.0.5.24 the shm* are in libc but unimplemented
-# (an attempt to use them causes a runtime error)
-# XXX Configure probe for really functional shm*() is needed XXX
-if test "$d_shm" = ""; then
- d_shmat=${d_shmat:-undef}
- d_shmdt=${d_shmdt:-undef}
- d_shmget=${d_shmget:-undef}
- d_shmctl=${d_shmctl:-undef}
- case "$d_shmat$d_shmctl$d_shmdt$d_shmget" in
- *"undef"*) d_shm="$undef" ;;
- esac
-fi
-
-
diff --git a/contrib/perl5/hints/unisysdynix.sh b/contrib/perl5/hints/unisysdynix.sh
deleted file mode 100644
index 4251ba8..0000000
--- a/contrib/perl5/hints/unisysdynix.sh
+++ /dev/null
@@ -1 +0,0 @@
-d_waitpid=undef
diff --git a/contrib/perl5/hints/utekv.sh b/contrib/perl5/hints/utekv.sh
deleted file mode 100644
index 95a31fd..0000000
--- a/contrib/perl5/hints/utekv.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-# XD88/10 UTekV hints by Kaveh Ghazi (ghazi@caip.rutgers.edu) 2/11/92
-# Modified by Andy Dougherty <doughera@lafcol.lafayette.edu> 4 Oct. 1994
-
-# The -X18 is only if you are using the Greenhills compiler.
-ccflags="$ccflags -X18"
-
-usemymalloc='y'
-
-echo " " >&4
-echo "NOTE: You may have to take out makefile dependencies on the files in" >&4
-echo "/usr/include (i.e. /usr/include/ctype.h) or the make will fail. A" >&4
-echo "simple 'grep -v /usr/include/ makefile' should suffice." >&4
diff --git a/contrib/perl5/hints/uts.sh b/contrib/perl5/hints/uts.sh
deleted file mode 100644
index 2bae4b0..0000000
--- a/contrib/perl5/hints/uts.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-archname='s390'
-cc='cc -Xa'
-cccdlflags='-pic'
-d_bincompat3='undef'
-d_csh='undef'
-d_lstat='define'
-d_suidsafe='define'
-dlsrc='dl_dlopen.xs'
-ld='ld'
-lddlflags='-G -z text'
-libperl='libperl.so'
-libpth='/lib /usr/lib /usr/ccs/lib'
-libs='-lsocket -lnsl -ldl -lm'
-optimize='undef'
-prefix='psf_prefix'
-static_ext='none'
-dynamic_ext='Fcntl IO Opcode Socket'
-useshrplib='define'
diff --git a/contrib/perl5/hints/uwin.sh b/contrib/perl5/hints/uwin.sh
deleted file mode 100644
index 0e5e11a..0000000
--- a/contrib/perl5/hints/uwin.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# hint file for U/WIN (UNIX for Windows 95/NT)
-#
-# created for U/WIN version 1.55
-# running under Windows NT 4.0 SP 3
-# using MSVC++ 5.0 for the compiler
-#
-# created by Joe Buehler (jbuehler@hekimian.com)
-#
-# for information about U/WIN see www.gtlinc.com
-#
-
-#ccflags=-D_BSDCOMPAT
-# confusion in Configure over preprocessor
-cppstdin=`pwd`/cppstdin
-cpprun=`pwd`/cppstdin
-# pwd.h confuses Configure
-d_pwcomment=undef
-d_pwgecos=define
-# work around case-insensitive file names
-firstmakefile=GNUmakefile
-# avoid compilation error
-i_utime=undef
-# compile/link flags
-ldflags=-g
-optimize=-g
-static_ext="B Data/Dumper Fcntl IO IPC/SysV Opcode POSIX SDBM_File Socket attrs"
-#static_ext=none
-# dynamic loading needs work
-usedl=undef
-# perl malloc will not work
-usemymalloc=n
-# cannot use nm
-usenm=undef
-# vfork() is buggy (as of 1.55 anyway)
-usevfork=false
diff --git a/contrib/perl5/hints/vmesa.sh b/contrib/perl5/hints/vmesa.sh
deleted file mode 100644
index 0213853..0000000
--- a/contrib/perl5/hints/vmesa.sh
+++ /dev/null
@@ -1,337 +0,0 @@
-# hints/vmesa.sh
-#
-# VM/ESA hints by Neale Ferguson (neale@mailbox.tabnsw.com.au)
-#
-# Currently (1999-Jan-09) Configure cannot be used in VM/ESA because
-# too many things are done differently in the C compiler environment.
-# Therefore the hints file is hand-crafted. --jhi@iki.fi
-#
-
-case "$archname" in
-'') archname="$osname" ;;
-esac
-bin='/usr/local/bin'
-binexp='/usr/local/bin'
-byacc='byacc'
-c='\c'
-cc='c89'
-ccflags="-D_OE_SOCKETS -DOLD_PTHREADS_API -DYYDYNAMIC -DDEBUGGING -I.." \
- "-I/usr/local/include -W c,hwopts\\\(string\\\),langlvl\\\(ansi\\\)"
-clocktype='clock_t'
-cryptlib="n"
-d_Gconvert='gcvt((x),(n),(b))'
-d_access='define'
-d_alarm='define'
-d_archlib='define'
-# randbits='15'
-archobjs="vmesa.o"
-d_attribut='undef'
-d_bcmp='define'
-d_bcopy='define'
-d_bsd='undef'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_bzero='define'
-d_casti32='define'
-d_castneg='define'
-d_charvspr='undef'
-d_chown='define'
-d_chroot='undef'
-d_chsize='undef'
-d_closedir='define'
-d_const='define'
-d_crypt='undef'
-d_csh='undef'
-d_cuserid='define'
-d_dbl_dig='define'
-d_difftime='define'
-d_dirnamlen='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='define'
-d_dosuid='undef'
-d_dup2='define'
-d_endgrent='undef'
-d_endpwent='undef'
-d_eofnblk='define'
-d_eunice='undef'
-d_fchmod='define'
-d_fchown='define'
-d_fcntl='define'
-d_fd_macros='define'
-d_fd_set='define'
-d_fds_bits='define'
-d_fgetpos='define'
-d_flexfnam='define'
-d_flock='undef'
-d_fork='undef'
-d_fpathconf='define'
-d_fsetpos='define'
-d_ftime='undef'
-d_getgrent='undef'
-d_gethent='define'
-d_gethname='undef'
-d_getlogin='define'
-d_getpgid='undef'
-d_getpgrp='define'
-d_getpgrp2='undef'
-d_getppid='define'
-d_getprior='undef'
-d_getpwent='undef'
-d_gettimeod='define'
-d_gnulibc='undef'
-d_htonl='define'
-d_index='define'
-d_inetaton='undef'
-d_isascii='define'
-d_killpg='define'
-d_link='define'
-d_locconv='define'
-d_lockf='define'
-d_longdbl='undef'
-d_longllong='undef'
-d_lstat='define'
-d_mblen='define'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memcmp='define'
-d_memcpy='define'
-d_memmove='define'
-d_memset='define'
-d_mkdir='define'
-d_mkfifo='define'
-d_mktime='define'
-d_msg='define'
-d_msgctl='define'
-d_msgget='define'
-d_msgrcv='define'
-d_msgsnd='define'
-d_mymalloc='undef'
-d_nice='undef'
-d_oldsock='undef'
-d_open3='define'
-d_pathconf='define'
-d_pause='define'
-d_phostname='undef'
-d_pipe='define'
-d_poll='undef'
-d_portable='define'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwquota='undef'
-d_readdir='define'
-d_readlink='define'
-d_rename='define'
-d_rewinddir='define'
-d_rmdir='define'
-d_safebcpy='define'
-d_safemcpy='undef'
-d_sanemcmp='define'
-d_sched_yield='undef'
-d_seekdir='undef'
-d_select='define'
-d_sem='define'
-d_semctl='define'
-d_semctl_semid_ds='define'
-d_semget='define'
-d_semop='define'
-d_setegid='define'
-d_seteuid='define'
-d_setgrent='undef'
-d_setgrps='undef'
-d_setlinebuf='undef'
-d_setlocale='define'
-d_setpgid='define'
-d_setpgrp='define'
-d_setpgrp2='undef'
-d_setprior='undef'
-d_setpwent='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsid='define'
-d_sfio='undef'
-d_shm='define'
-d_shmat='define'
-d_shmatprototype='define'
-d_shmctl='define'
-d_shmdt='define'
-d_shmget='define'
-d_sigaction='define'
-d_sigsetjmp='define'
-d_socket='define'
-d_sockpair='undef'
-d_statblks='undef'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strchr='define'
-d_strcoll='define'
-d_strctcpy='undef'
-d_strerrm='strerror(e)'
-d_strerror='define'
-d_strtod='define'
-d_strtol='define'
-d_strtoul='define'
-d_strxfrm='define'
-d_suidsafe='undef'
-d_symlink='define'
-d_syscall='undef'
-d_sysconf='define'
-d_sysernlst="n"
-d_syserrlst='undef'
-d_system='define'
-d_tcgetpgrp='define'
-d_tcsetpgrp='define'
-d_telldir='undef'
-d_time='define'
-d_times='define'
-d_truncate='define'
-d_tzname='define'
-d_umask='define'
-d_uname='define'
-d_union_semun='undef'
-d_vfork='define'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty="n"
-d_volatile='define'
-d_vprintf='define'
-d_waitpid='define'
-d_wait4='undef'
-d_wcstombs='define'
-d_wctomb='define'
-d_xenix='undef'
-db_hashtype='u_int32_t'
-db_prefixtype='size_t'
-direntrytype='struct dirent'
-dlext='none'
-dlsrc='dl_vmesa.xs'
-dynamic_ext=''
-eagain='EAGAIN'
-ebcdic='define'
-exe_ext=''
-extensions='Fcntl GDBM_File IO NDBM_File Opcode POSIX Socket IPC/SysV Errno Thread attrs re Data/dumper'
-fpostype='fpos_t'
-freetype='void'
-groupstype='gid_t'
-h_fcntl='false'
-h_sysfile='true'
-hint='recommended'
-i_arpainet="define"
-i_bsdioctl="n"
-i_db='undef'
-i_dbm='define'
-i_dirent='define'
-i_dld='define'
-i_dlfcn='define'
-i_fcntl='undef'
-i_float='define'
-i_gdbm='define'
-i_grp='define'
-i_limits='define'
-i_locale='define'
-i_malloc='undef'
-i_math='define'
-i_memory='define'
-i_ndbm='define'
-i_neterrno='undef'
-i_niin='define'
-i_pwd='define'
-i_rpcsvcdbm='undef'
-i_sfio='undef'
-i_sgtty='undef'
-i_stdarg='define'
-i_stddef='define'
-i_stdlib='define'
-i_string='define'
-i_sysdir='define'
-i_sysfile='define'
-i_sysfilio='undef'
-i_sysin='undef'
-i_sysioctl='define'
-i_sysndir='undef'
-i_sysparam='undef'
-i_sysresrc='define'
-i_sysselct='undef'
-i_syssockio="n"
-i_sysstat='define'
-i_systime='define'
-i_systimek='undef'
-i_systimes='define'
-i_systypes='define'
-i_sysun='define'
-i_syswait='define'
-i_termio='undef'
-i_termios='define'
-i_time='undef'
-i_unistd='define'
-i_utime='define'
-i_values='undef'
-i_varargs='undef'
-i_varhdr='stdarg.h'
-i_vfork='undef'
-ld='c89'
-ldflags='-L/usr/local/lib -L.'
-lib_ext='.a'
-libc=''
-libperl='libperl.a'
-libpth='/usr/local/lib /lib /usr/lib'
-libs='-l//posxsock -l//vmmtlib -lgdbm -lxpg4'
-libswanted='gdbm'
-lint="n"
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-make_set_make='#'
-make='gnumake'
-mallocobj=''
-mallocsrc=''
-malloctype='void *'
-netdb_hlen_type='size_t'
-netdb_host_type='char *'
-netdb_name_type='const char *'
-netdb_net_type='in_addr_t'
-o_nonblock='O_NONBLOCK'
-obj_ext='.o'
-optimize='undef'
-prefix='/usr/local'
-prefixexp='/usr/local'
-prototype='define'
-ranlib=':'
-rd_nodata='-1'
-scriptdir='/usr/local/bin'
-scriptdirexp='/usr/local/bin'
-selecttype='fd_set *'
-shmattype='void *'
-shrpenv=''
-signal_t='void'
-sig_name_init='"ZERO","HUP","INT","ABRT","ILL","POLL","URG","STOP","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","NUM18","CONT","CHLD","TTIN","TTOU","IO","QUIT","TSTP","TRAP","NUM27","WINCH","XCPU","XFSZ","VTALRM","PROF","NUM33","NUM34","NUM35","NUM36","NUM3","NUM38","NUM39","NUM40","NUM41","NUM42","NUM43","NUM44","NUM45","NUM46","NUM47","NUM48","NUM49","CLD"'
-sig_num_init='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,20 '
-sizetype='size_t'
-so='.a'
-ssizetype='ssize_t'
-static_ext='Data/Dumper Fcntl GDBM_File IO IPC/SysV NDBM_File Opcode POSIX Socket Thread attrs re'
-stdchar='char'
-stdio_cnt='(fp)->__countIn'
-stdio_ptr='(fp)->__bufPtr'
-timeincl='sys/time.h '
-timetype='time_t'
-uidtype='uid_t'
-usedl='define'
-usemymalloc='n'
-usenm='false'
-useopcode='true'
-useperlio='undef'
-useposix='true'
-usesfio='false'
-useshrplib='false'
-usethreads='y'
-usevfork='true'
-vi='x'
diff --git a/contrib/perl5/hv.c b/contrib/perl5/hv.c
deleted file mode 100644
index 321d403..0000000
--- a/contrib/perl5/hv.c
+++ /dev/null
@@ -1,1503 +0,0 @@
-/* hv.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "I sit beside the fire and think of all that I have seen." --Bilbo
- */
-
-#include "EXTERN.h"
-#define PERL_IN_HV_C
-#include "perl.h"
-
-STATIC HE*
-S_new_he(pTHX)
-{
- HE* he;
- LOCK_SV_MUTEX;
- if (!PL_he_root)
- more_he();
- he = PL_he_root;
- PL_he_root = HeNEXT(he);
- UNLOCK_SV_MUTEX;
- return he;
-}
-
-STATIC void
-S_del_he(pTHX_ HE *p)
-{
- LOCK_SV_MUTEX;
- HeNEXT(p) = (HE*)PL_he_root;
- PL_he_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_he(pTHX)
-{
- register HE* he;
- register HE* heend;
- XPV *ptr;
- New(54, ptr, 1008/sizeof(XPV), XPV);
- ptr->xpv_pv = (char*)PL_he_arenaroot;
- PL_he_arenaroot = ptr;
-
- he = (HE*)ptr;
- heend = &he[1008 / sizeof(HE) - 1];
- PL_he_root = ++he;
- while (he < heend) {
- HeNEXT(he) = (HE*)(he + 1);
- he++;
- }
- HeNEXT(he) = 0;
-}
-
-#ifdef PURIFY
-
-#define new_HE() (HE*)safemalloc(sizeof(HE))
-#define del_HE(p) safefree((char*)p)
-
-#else
-
-#define new_HE() new_he()
-#define del_HE(p) del_he(p)
-
-#endif
-
-STATIC HEK *
-S_save_hek(pTHX_ const char *str, I32 len, U32 hash)
-{
- char *k;
- register HEK *hek;
-
- New(54, k, HEK_BASESIZE + len + 1, char);
- hek = (HEK*)k;
- Copy(str, HEK_KEY(hek), len, char);
- *(HEK_KEY(hek) + len) = '\0';
- HEK_LEN(hek) = len;
- HEK_HASH(hek) = hash;
- return hek;
-}
-
-void
-Perl_unshare_hek(pTHX_ HEK *hek)
-{
- unsharepvn(HEK_KEY(hek),HEK_LEN(hek),HEK_HASH(hek));
-}
-
-#if defined(USE_ITHREADS)
-HE *
-Perl_he_dup(pTHX_ HE *e, bool shared)
-{
- HE *ret;
-
- if (!e)
- return Nullhe;
- /* look for it in the table first */
- ret = (HE*)ptr_table_fetch(PL_ptr_table, e);
- if (ret)
- return ret;
-
- /* create anew and remember what it is */
- ret = new_HE();
- ptr_table_store(PL_ptr_table, e, ret);
-
- HeNEXT(ret) = he_dup(HeNEXT(e),shared);
- if (HeKLEN(e) == HEf_SVKEY)
- HeKEY_sv(ret) = SvREFCNT_inc(sv_dup(HeKEY_sv(e)));
- else if (shared)
- HeKEY_hek(ret) = share_hek(HeKEY(e), HeKLEN(e), HeHASH(e));
- else
- HeKEY_hek(ret) = save_hek(HeKEY(e), HeKLEN(e), HeHASH(e));
- HeVAL(ret) = SvREFCNT_inc(sv_dup(HeVAL(e)));
- return ret;
-}
-#endif /* USE_ITHREADS */
-
-/* (klen == HEf_SVKEY) is special for MAGICAL hv entries, meaning key slot
- * contains an SV* */
-
-/*
-=for apidoc hv_fetch
-
-Returns the SV which corresponds to the specified key in the hash. The
-C<klen> is the length of the key. If C<lval> is set then the fetch will be
-part of a store. Check that the return value is non-null before
-dereferencing it to a C<SV*>.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
-=cut
-*/
-
-SV**
-Perl_hv_fetch(pTHX_ HV *hv, const char *key, U32 klen, I32 lval)
-{
- register XPVHV* xhv;
- register U32 hash;
- register HE *entry;
- SV *sv;
-
- if (!hv)
- return 0;
-
- if (SvRMAGICAL(hv)) {
- if (mg_find((SV*)hv,'P')) {
- sv = sv_newmortal();
- mg_copy((SV*)hv, sv, key, klen);
- PL_hv_fetch_sv = sv;
- return &PL_hv_fetch_sv;
- }
-#ifdef ENV_IS_CASELESS
- else if (mg_find((SV*)hv,'E')) {
- U32 i;
- for (i = 0; i < klen; ++i)
- if (isLOWER(key[i])) {
- char *nkey = strupr(SvPVX(sv_2mortal(newSVpvn(key,klen))));
- SV **ret = hv_fetch(hv, nkey, klen, 0);
- if (!ret && lval)
- ret = hv_store(hv, key, klen, NEWSV(61,0), 0);
- return ret;
- }
- }
-#endif
- }
-
- xhv = (XPVHV*)SvANY(hv);
- if (!xhv->xhv_array) {
- if (lval
-#ifdef DYNAMIC_ENV_FETCH /* if it's an %ENV lookup, we may get it on the fly */
- || (HvNAME(hv) && strEQ(HvNAME(hv),ENV_HV_NAME))
-#endif
- )
- Newz(503, xhv->xhv_array,
- PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
- else
- return 0;
- }
-
- PERL_HASH(hash, key, klen);
-
- entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- for (; entry; entry = HeNEXT(entry)) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != klen)
- continue;
- if (memNE(HeKEY(entry),key,klen)) /* is this it? */
- continue;
- return &HeVAL(entry);
- }
-#ifdef DYNAMIC_ENV_FETCH /* %ENV lookup? If so, try to fetch the value now */
- if (HvNAME(hv) && strEQ(HvNAME(hv),ENV_HV_NAME)) {
- unsigned long len;
- char *env = PerlEnv_ENVgetenv_len(key,&len);
- if (env) {
- sv = newSVpvn(env,len);
- SvTAINTED_on(sv);
- return hv_store(hv,key,klen,sv,hash);
- }
- }
-#endif
- if (lval) { /* gonna assign to this, so it better be there */
- sv = NEWSV(61,0);
- return hv_store(hv,key,klen,sv,hash);
- }
- return 0;
-}
-
-/* returns a HE * structure with the all fields set */
-/* note that hent_val will be a mortal sv for MAGICAL hashes */
-/*
-=for apidoc hv_fetch_ent
-
-Returns the hash entry which corresponds to the specified key in the hash.
-C<hash> must be a valid precomputed hash number for the given C<key>, or 0
-if you want the function to compute it. IF C<lval> is set then the fetch
-will be part of a store. Make sure the return value is non-null before
-accessing it. The return value when C<tb> is a tied hash is a pointer to a
-static location, so be sure to make a copy of the structure if you need to
-store it somewhere.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
-=cut
-*/
-
-HE *
-Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, register U32 hash)
-{
- register XPVHV* xhv;
- register char *key;
- STRLEN klen;
- register HE *entry;
- SV *sv;
-
- if (!hv)
- return 0;
-
- if (SvRMAGICAL(hv)) {
- if (mg_find((SV*)hv,'P')) {
- sv = sv_newmortal();
- keysv = sv_2mortal(newSVsv(keysv));
- mg_copy((SV*)hv, sv, (char*)keysv, HEf_SVKEY);
- if (!HeKEY_hek(&PL_hv_fetch_ent_mh)) {
- char *k;
- New(54, k, HEK_BASESIZE + sizeof(SV*), char);
- HeKEY_hek(&PL_hv_fetch_ent_mh) = (HEK*)k;
- }
- HeSVKEY_set(&PL_hv_fetch_ent_mh, keysv);
- HeVAL(&PL_hv_fetch_ent_mh) = sv;
- return &PL_hv_fetch_ent_mh;
- }
-#ifdef ENV_IS_CASELESS
- else if (mg_find((SV*)hv,'E')) {
- U32 i;
- key = SvPV(keysv, klen);
- for (i = 0; i < klen; ++i)
- if (isLOWER(key[i])) {
- SV *nkeysv = sv_2mortal(newSVpvn(key,klen));
- (void)strupr(SvPVX(nkeysv));
- entry = hv_fetch_ent(hv, nkeysv, 0, 0);
- if (!entry && lval)
- entry = hv_store_ent(hv, keysv, NEWSV(61,0), hash);
- return entry;
- }
- }
-#endif
- }
-
- xhv = (XPVHV*)SvANY(hv);
- if (!xhv->xhv_array) {
- if (lval
-#ifdef DYNAMIC_ENV_FETCH /* if it's an %ENV lookup, we may get it on the fly */
- || (HvNAME(hv) && strEQ(HvNAME(hv),ENV_HV_NAME))
-#endif
- )
- Newz(503, xhv->xhv_array,
- PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
- else
- return 0;
- }
-
- key = SvPV(keysv, klen);
-
- if (!hash)
- PERL_HASH(hash, key, klen);
-
- entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- for (; entry; entry = HeNEXT(entry)) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != klen)
- continue;
- if (memNE(HeKEY(entry),key,klen)) /* is this it? */
- continue;
- return entry;
- }
-#ifdef DYNAMIC_ENV_FETCH /* %ENV lookup? If so, try to fetch the value now */
- if (HvNAME(hv) && strEQ(HvNAME(hv),ENV_HV_NAME)) {
- unsigned long len;
- char *env = PerlEnv_ENVgetenv_len(key,&len);
- if (env) {
- sv = newSVpvn(env,len);
- SvTAINTED_on(sv);
- return hv_store_ent(hv,keysv,sv,hash);
- }
- }
-#endif
- if (lval) { /* gonna assign to this, so it better be there */
- sv = NEWSV(61,0);
- return hv_store_ent(hv,keysv,sv,hash);
- }
- return 0;
-}
-
-STATIC void
-S_hv_magic_check(pTHX_ HV *hv, bool *needs_copy, bool *needs_store)
-{
- MAGIC *mg = SvMAGIC(hv);
- *needs_copy = FALSE;
- *needs_store = TRUE;
- while (mg) {
- if (isUPPER(mg->mg_type)) {
- *needs_copy = TRUE;
- switch (mg->mg_type) {
- case 'P':
- case 'S':
- *needs_store = FALSE;
- }
- }
- mg = mg->mg_moremagic;
- }
-}
-
-/*
-=for apidoc hv_store
-
-Stores an SV in a hash. The hash key is specified as C<key> and C<klen> is
-the length of the key. The C<hash> parameter is the precomputed hash
-value; if it is zero then Perl will compute it. The return value will be
-NULL if the operation failed or if the value did not need to be actually
-stored within the hash (as in the case of tied hashes). Otherwise it can
-be dereferenced to get the original C<SV*>. Note that the caller is
-responsible for suitably incrementing the reference count of C<val> before
-the call, and decrementing it if the function returned NULL.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
-=cut
-*/
-
-SV**
-Perl_hv_store(pTHX_ HV *hv, const char *key, U32 klen, SV *val, register U32 hash)
-{
- register XPVHV* xhv;
- register I32 i;
- register HE *entry;
- register HE **oentry;
-
- if (!hv)
- return 0;
-
- xhv = (XPVHV*)SvANY(hv);
- if (SvMAGICAL(hv)) {
- bool needs_copy;
- bool needs_store;
- hv_magic_check (hv, &needs_copy, &needs_store);
- if (needs_copy) {
- mg_copy((SV*)hv, val, key, klen);
- if (!xhv->xhv_array && !needs_store)
- return 0;
-#ifdef ENV_IS_CASELESS
- else if (mg_find((SV*)hv,'E')) {
- SV *sv = sv_2mortal(newSVpvn(key,klen));
- key = strupr(SvPVX(sv));
- hash = 0;
- }
-#endif
- }
- }
- if (!hash)
- PERL_HASH(hash, key, klen);
-
- if (!xhv->xhv_array)
- Newz(505, xhv->xhv_array,
- PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
-
- oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- i = 1;
-
- for (entry = *oentry; entry; i=0, entry = HeNEXT(entry)) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != klen)
- continue;
- if (memNE(HeKEY(entry),key,klen)) /* is this it? */
- continue;
- SvREFCNT_dec(HeVAL(entry));
- HeVAL(entry) = val;
- return &HeVAL(entry);
- }
-
- entry = new_HE();
- if (HvSHAREKEYS(hv))
- HeKEY_hek(entry) = share_hek(key, klen, hash);
- else /* gotta do the real thing */
- HeKEY_hek(entry) = save_hek(key, klen, hash);
- HeVAL(entry) = val;
- HeNEXT(entry) = *oentry;
- *oentry = entry;
-
- xhv->xhv_keys++;
- if (i) { /* initial entry? */
- ++xhv->xhv_fill;
- if (xhv->xhv_keys > xhv->xhv_max)
- hsplit(hv);
- }
-
- return &HeVAL(entry);
-}
-
-/*
-=for apidoc hv_store_ent
-
-Stores C<val> in a hash. The hash key is specified as C<key>. The C<hash>
-parameter is the precomputed hash value; if it is zero then Perl will
-compute it. The return value is the new hash entry so created. It will be
-NULL if the operation failed or if the value did not need to be actually
-stored within the hash (as in the case of tied hashes). Otherwise the
-contents of the return value can be accessed using the C<He???> macros
-described here. Note that the caller is responsible for suitably
-incrementing the reference count of C<val> before the call, and
-decrementing it if the function returned NULL.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
-=cut
-*/
-
-HE *
-Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, register U32 hash)
-{
- register XPVHV* xhv;
- register char *key;
- STRLEN klen;
- register I32 i;
- register HE *entry;
- register HE **oentry;
-
- if (!hv)
- return 0;
-
- xhv = (XPVHV*)SvANY(hv);
- if (SvMAGICAL(hv)) {
- bool needs_copy;
- bool needs_store;
- hv_magic_check (hv, &needs_copy, &needs_store);
- if (needs_copy) {
- bool save_taint = PL_tainted;
- if (PL_tainting)
- PL_tainted = SvTAINTED(keysv);
- keysv = sv_2mortal(newSVsv(keysv));
- mg_copy((SV*)hv, val, (char*)keysv, HEf_SVKEY);
- TAINT_IF(save_taint);
- if (!xhv->xhv_array && !needs_store)
- return Nullhe;
-#ifdef ENV_IS_CASELESS
- else if (mg_find((SV*)hv,'E')) {
- key = SvPV(keysv, klen);
- keysv = sv_2mortal(newSVpvn(key,klen));
- (void)strupr(SvPVX(keysv));
- hash = 0;
- }
-#endif
- }
- }
-
- key = SvPV(keysv, klen);
-
- if (!hash)
- PERL_HASH(hash, key, klen);
-
- if (!xhv->xhv_array)
- Newz(505, xhv->xhv_array,
- PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
-
- oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- i = 1;
-
- for (entry = *oentry; entry; i=0, entry = HeNEXT(entry)) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != klen)
- continue;
- if (memNE(HeKEY(entry),key,klen)) /* is this it? */
- continue;
- SvREFCNT_dec(HeVAL(entry));
- HeVAL(entry) = val;
- return entry;
- }
-
- entry = new_HE();
- if (HvSHAREKEYS(hv))
- HeKEY_hek(entry) = share_hek(key, klen, hash);
- else /* gotta do the real thing */
- HeKEY_hek(entry) = save_hek(key, klen, hash);
- HeVAL(entry) = val;
- HeNEXT(entry) = *oentry;
- *oentry = entry;
-
- xhv->xhv_keys++;
- if (i) { /* initial entry? */
- ++xhv->xhv_fill;
- if (xhv->xhv_keys > xhv->xhv_max)
- hsplit(hv);
- }
-
- return entry;
-}
-
-/*
-=for apidoc hv_delete
-
-Deletes a key/value pair in the hash. The value SV is removed from the
-hash and returned to the caller. The C<klen> is the length of the key.
-The C<flags> value will normally be zero; if set to G_DISCARD then NULL
-will be returned.
-
-=cut
-*/
-
-SV *
-Perl_hv_delete(pTHX_ HV *hv, const char *key, U32 klen, I32 flags)
-{
- register XPVHV* xhv;
- register I32 i;
- register U32 hash;
- register HE *entry;
- register HE **oentry;
- SV **svp;
- SV *sv;
-
- if (!hv)
- return Nullsv;
- if (SvRMAGICAL(hv)) {
- bool needs_copy;
- bool needs_store;
- hv_magic_check (hv, &needs_copy, &needs_store);
-
- if (needs_copy && (svp = hv_fetch(hv, key, klen, TRUE))) {
- sv = *svp;
- mg_clear(sv);
- if (!needs_store) {
- if (mg_find(sv, 'p')) {
- sv_unmagic(sv, 'p'); /* No longer an element */
- return sv;
- }
- return Nullsv; /* element cannot be deleted */
- }
-#ifdef ENV_IS_CASELESS
- else if (mg_find((SV*)hv,'E')) {
- sv = sv_2mortal(newSVpvn(key,klen));
- key = strupr(SvPVX(sv));
- }
-#endif
- }
- }
- xhv = (XPVHV*)SvANY(hv);
- if (!xhv->xhv_array)
- return Nullsv;
-
- PERL_HASH(hash, key, klen);
-
- oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- entry = *oentry;
- i = 1;
- for (; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != klen)
- continue;
- if (memNE(HeKEY(entry),key,klen)) /* is this it? */
- continue;
- *oentry = HeNEXT(entry);
- if (i && !*oentry)
- xhv->xhv_fill--;
- if (flags & G_DISCARD)
- sv = Nullsv;
- else {
- sv = sv_2mortal(HeVAL(entry));
- HeVAL(entry) = &PL_sv_undef;
- }
- if (entry == xhv->xhv_eiter)
- HvLAZYDEL_on(hv);
- else
- hv_free_ent(hv, entry);
- --xhv->xhv_keys;
- return sv;
- }
- return Nullsv;
-}
-
-/*
-=for apidoc hv_delete_ent
-
-Deletes a key/value pair in the hash. The value SV is removed from the
-hash and returned to the caller. The C<flags> value will normally be zero;
-if set to G_DISCARD then NULL will be returned. C<hash> can be a valid
-precomputed hash value, or 0 to ask for it to be computed.
-
-=cut
-*/
-
-SV *
-Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash)
-{
- register XPVHV* xhv;
- register I32 i;
- register char *key;
- STRLEN klen;
- register HE *entry;
- register HE **oentry;
- SV *sv;
-
- if (!hv)
- return Nullsv;
- if (SvRMAGICAL(hv)) {
- bool needs_copy;
- bool needs_store;
- hv_magic_check (hv, &needs_copy, &needs_store);
-
- if (needs_copy && (entry = hv_fetch_ent(hv, keysv, TRUE, hash))) {
- sv = HeVAL(entry);
- mg_clear(sv);
- if (!needs_store) {
- if (mg_find(sv, 'p')) {
- sv_unmagic(sv, 'p'); /* No longer an element */
- return sv;
- }
- return Nullsv; /* element cannot be deleted */
- }
-#ifdef ENV_IS_CASELESS
- else if (mg_find((SV*)hv,'E')) {
- key = SvPV(keysv, klen);
- keysv = sv_2mortal(newSVpvn(key,klen));
- (void)strupr(SvPVX(keysv));
- hash = 0;
- }
-#endif
- }
- }
- xhv = (XPVHV*)SvANY(hv);
- if (!xhv->xhv_array)
- return Nullsv;
-
- key = SvPV(keysv, klen);
-
- if (!hash)
- PERL_HASH(hash, key, klen);
-
- oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- entry = *oentry;
- i = 1;
- for (; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != klen)
- continue;
- if (memNE(HeKEY(entry),key,klen)) /* is this it? */
- continue;
- *oentry = HeNEXT(entry);
- if (i && !*oentry)
- xhv->xhv_fill--;
- if (flags & G_DISCARD)
- sv = Nullsv;
- else {
- sv = sv_2mortal(HeVAL(entry));
- HeVAL(entry) = &PL_sv_undef;
- }
- if (entry == xhv->xhv_eiter)
- HvLAZYDEL_on(hv);
- else
- hv_free_ent(hv, entry);
- --xhv->xhv_keys;
- return sv;
- }
- return Nullsv;
-}
-
-/*
-=for apidoc hv_exists
-
-Returns a boolean indicating whether the specified hash key exists. The
-C<klen> is the length of the key.
-
-=cut
-*/
-
-bool
-Perl_hv_exists(pTHX_ HV *hv, const char *key, U32 klen)
-{
- register XPVHV* xhv;
- register U32 hash;
- register HE *entry;
- SV *sv;
-
- if (!hv)
- return 0;
-
- if (SvRMAGICAL(hv)) {
- if (mg_find((SV*)hv,'P')) {
- sv = sv_newmortal();
- mg_copy((SV*)hv, sv, key, klen);
- magic_existspack(sv, mg_find(sv, 'p'));
- return SvTRUE(sv);
- }
-#ifdef ENV_IS_CASELESS
- else if (mg_find((SV*)hv,'E')) {
- sv = sv_2mortal(newSVpvn(key,klen));
- key = strupr(SvPVX(sv));
- }
-#endif
- }
-
- xhv = (XPVHV*)SvANY(hv);
-#ifndef DYNAMIC_ENV_FETCH
- if (!xhv->xhv_array)
- return 0;
-#endif
-
- PERL_HASH(hash, key, klen);
-
-#ifdef DYNAMIC_ENV_FETCH
- if (!xhv->xhv_array) entry = Null(HE*);
- else
-#endif
- entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- for (; entry; entry = HeNEXT(entry)) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != klen)
- continue;
- if (memNE(HeKEY(entry),key,klen)) /* is this it? */
- continue;
- return TRUE;
- }
-#ifdef DYNAMIC_ENV_FETCH /* is it out there? */
- if (HvNAME(hv) && strEQ(HvNAME(hv), ENV_HV_NAME)) {
- unsigned long len;
- char *env = PerlEnv_ENVgetenv_len(key,&len);
- if (env) {
- sv = newSVpvn(env,len);
- SvTAINTED_on(sv);
- (void)hv_store(hv,key,klen,sv,hash);
- return TRUE;
- }
- }
-#endif
- return FALSE;
-}
-
-
-/*
-=for apidoc hv_exists_ent
-
-Returns a boolean indicating whether the specified hash key exists. C<hash>
-can be a valid precomputed hash value, or 0 to ask for it to be
-computed.
-
-=cut
-*/
-
-bool
-Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash)
-{
- register XPVHV* xhv;
- register char *key;
- STRLEN klen;
- register HE *entry;
- SV *sv;
-
- if (!hv)
- return 0;
-
- if (SvRMAGICAL(hv)) {
- if (mg_find((SV*)hv,'P')) {
- sv = sv_newmortal();
- keysv = sv_2mortal(newSVsv(keysv));
- mg_copy((SV*)hv, sv, (char*)keysv, HEf_SVKEY);
- magic_existspack(sv, mg_find(sv, 'p'));
- return SvTRUE(sv);
- }
-#ifdef ENV_IS_CASELESS
- else if (mg_find((SV*)hv,'E')) {
- key = SvPV(keysv, klen);
- keysv = sv_2mortal(newSVpvn(key,klen));
- (void)strupr(SvPVX(keysv));
- hash = 0;
- }
-#endif
- }
-
- xhv = (XPVHV*)SvANY(hv);
-#ifndef DYNAMIC_ENV_FETCH
- if (!xhv->xhv_array)
- return 0;
-#endif
-
- key = SvPV(keysv, klen);
- if (!hash)
- PERL_HASH(hash, key, klen);
-
-#ifdef DYNAMIC_ENV_FETCH
- if (!xhv->xhv_array) entry = Null(HE*);
- else
-#endif
- entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- for (; entry; entry = HeNEXT(entry)) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != klen)
- continue;
- if (memNE(HeKEY(entry),key,klen)) /* is this it? */
- continue;
- return TRUE;
- }
-#ifdef DYNAMIC_ENV_FETCH /* is it out there? */
- if (HvNAME(hv) && strEQ(HvNAME(hv), ENV_HV_NAME)) {
- unsigned long len;
- char *env = PerlEnv_ENVgetenv_len(key,&len);
- if (env) {
- sv = newSVpvn(env,len);
- SvTAINTED_on(sv);
- (void)hv_store_ent(hv,keysv,sv,hash);
- return TRUE;
- }
- }
-#endif
- return FALSE;
-}
-
-STATIC void
-S_hsplit(pTHX_ HV *hv)
-{
- register XPVHV* xhv = (XPVHV*)SvANY(hv);
- I32 oldsize = (I32) xhv->xhv_max + 1; /* sic(k) */
- register I32 newsize = oldsize * 2;
- register I32 i;
- register char *a = xhv->xhv_array;
- register HE **aep;
- register HE **bep;
- register HE *entry;
- register HE **oentry;
-
- PL_nomemok = TRUE;
-#if defined(STRANGE_MALLOC) || defined(MYMALLOC)
- Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
- if (!a) {
- PL_nomemok = FALSE;
- return;
- }
-#else
-#define MALLOC_OVERHEAD 16
- New(2, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
- if (!a) {
- PL_nomemok = FALSE;
- return;
- }
- Copy(xhv->xhv_array, a, oldsize * sizeof(HE*), char);
- if (oldsize >= 64) {
- offer_nice_chunk(xhv->xhv_array, PERL_HV_ARRAY_ALLOC_BYTES(oldsize));
- }
- else
- Safefree(xhv->xhv_array);
-#endif
-
- PL_nomemok = FALSE;
- Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
- xhv->xhv_max = --newsize;
- xhv->xhv_array = a;
- aep = (HE**)a;
-
- for (i=0; i<oldsize; i++,aep++) {
- if (!*aep) /* non-existent */
- continue;
- bep = aep+oldsize;
- for (oentry = aep, entry = *aep; entry; entry = *oentry) {
- if ((HeHASH(entry) & newsize) != i) {
- *oentry = HeNEXT(entry);
- HeNEXT(entry) = *bep;
- if (!*bep)
- xhv->xhv_fill++;
- *bep = entry;
- continue;
- }
- else
- oentry = &HeNEXT(entry);
- }
- if (!*aep) /* everything moved */
- xhv->xhv_fill--;
- }
-}
-
-void
-Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
-{
- register XPVHV* xhv = (XPVHV*)SvANY(hv);
- I32 oldsize = (I32) xhv->xhv_max + 1; /* sic(k) */
- register I32 newsize;
- register I32 i;
- register I32 j;
- register char *a;
- register HE **aep;
- register HE *entry;
- register HE **oentry;
-
- newsize = (I32) newmax; /* possible truncation here */
- if (newsize != newmax || newmax <= oldsize)
- return;
- while ((newsize & (1 + ~newsize)) != newsize) {
- newsize &= ~(newsize & (1 + ~newsize)); /* get proper power of 2 */
- }
- if (newsize < newmax)
- newsize *= 2;
- if (newsize < newmax)
- return; /* overflow detection */
-
- a = xhv->xhv_array;
- if (a) {
- PL_nomemok = TRUE;
-#if defined(STRANGE_MALLOC) || defined(MYMALLOC)
- Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
- if (!a) {
- PL_nomemok = FALSE;
- return;
- }
-#else
- New(2, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
- if (!a) {
- PL_nomemok = FALSE;
- return;
- }
- Copy(xhv->xhv_array, a, oldsize * sizeof(HE*), char);
- if (oldsize >= 64) {
- offer_nice_chunk(xhv->xhv_array, PERL_HV_ARRAY_ALLOC_BYTES(oldsize));
- }
- else
- Safefree(xhv->xhv_array);
-#endif
- PL_nomemok = FALSE;
- Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
- }
- else {
- Newz(0, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
- }
- xhv->xhv_max = --newsize;
- xhv->xhv_array = a;
- if (!xhv->xhv_fill) /* skip rest if no entries */
- return;
-
- aep = (HE**)a;
- for (i=0; i<oldsize; i++,aep++) {
- if (!*aep) /* non-existent */
- continue;
- for (oentry = aep, entry = *aep; entry; entry = *oentry) {
- if ((j = (HeHASH(entry) & newsize)) != i) {
- j -= i;
- *oentry = HeNEXT(entry);
- if (!(HeNEXT(entry) = aep[j]))
- xhv->xhv_fill++;
- aep[j] = entry;
- continue;
- }
- else
- oentry = &HeNEXT(entry);
- }
- if (!*aep) /* everything moved */
- xhv->xhv_fill--;
- }
-}
-
-/*
-=for apidoc newHV
-
-Creates a new HV. The reference count is set to 1.
-
-=cut
-*/
-
-HV *
-Perl_newHV(pTHX)
-{
- register HV *hv;
- register XPVHV* xhv;
-
- hv = (HV*)NEWSV(502,0);
- sv_upgrade((SV *)hv, SVt_PVHV);
- xhv = (XPVHV*)SvANY(hv);
- SvPOK_off(hv);
- SvNOK_off(hv);
-#ifndef NODEFAULT_SHAREKEYS
- HvSHAREKEYS_on(hv); /* key-sharing on by default */
-#endif
- xhv->xhv_max = 7; /* start with 8 buckets */
- xhv->xhv_fill = 0;
- xhv->xhv_pmroot = 0;
- (void)hv_iterinit(hv); /* so each() will start off right */
- return hv;
-}
-
-HV *
-Perl_newHVhv(pTHX_ HV *ohv)
-{
- register HV *hv;
- STRLEN hv_max = ohv ? HvMAX(ohv) : 0;
- STRLEN hv_fill = ohv ? HvFILL(ohv) : 0;
-
- hv = newHV();
- while (hv_max && hv_max + 1 >= hv_fill * 2)
- hv_max = hv_max / 2; /* Is always 2^n-1 */
- HvMAX(hv) = hv_max;
- if (!hv_fill)
- return hv;
-
-#if 0
- if (! SvTIED_mg((SV*)ohv, 'P')) {
- /* Quick way ???*/
- }
- else
-#endif
- {
- HE *entry;
- I32 hv_riter = HvRITER(ohv); /* current root of iterator */
- HE *hv_eiter = HvEITER(ohv); /* current entry of iterator */
-
- /* Slow way */
- hv_iterinit(ohv);
- while ((entry = hv_iternext(ohv))) {
- hv_store(hv, HeKEY(entry), HeKLEN(entry),
- newSVsv(HeVAL(entry)), HeHASH(entry));
- }
- HvRITER(ohv) = hv_riter;
- HvEITER(ohv) = hv_eiter;
- }
-
- return hv;
-}
-
-void
-Perl_hv_free_ent(pTHX_ HV *hv, register HE *entry)
-{
- SV *val;
-
- if (!entry)
- return;
- val = HeVAL(entry);
- if (val && isGV(val) && GvCVu(val) && HvNAME(hv))
- PL_sub_generation++; /* may be deletion of method from stash */
- SvREFCNT_dec(val);
- if (HeKLEN(entry) == HEf_SVKEY) {
- SvREFCNT_dec(HeKEY_sv(entry));
- Safefree(HeKEY_hek(entry));
- }
- else if (HvSHAREKEYS(hv))
- unshare_hek(HeKEY_hek(entry));
- else
- Safefree(HeKEY_hek(entry));
- del_HE(entry);
-}
-
-void
-Perl_hv_delayfree_ent(pTHX_ HV *hv, register HE *entry)
-{
- if (!entry)
- return;
- if (isGV(HeVAL(entry)) && GvCVu(HeVAL(entry)) && HvNAME(hv))
- PL_sub_generation++; /* may be deletion of method from stash */
- sv_2mortal(HeVAL(entry)); /* free between statements */
- if (HeKLEN(entry) == HEf_SVKEY) {
- sv_2mortal(HeKEY_sv(entry));
- Safefree(HeKEY_hek(entry));
- }
- else if (HvSHAREKEYS(hv))
- unshare_hek(HeKEY_hek(entry));
- else
- Safefree(HeKEY_hek(entry));
- del_HE(entry);
-}
-
-/*
-=for apidoc hv_clear
-
-Clears a hash, making it empty.
-
-=cut
-*/
-
-void
-Perl_hv_clear(pTHX_ HV *hv)
-{
- register XPVHV* xhv;
- if (!hv)
- return;
- xhv = (XPVHV*)SvANY(hv);
- hfreeentries(hv);
- xhv->xhv_fill = 0;
- xhv->xhv_keys = 0;
- if (xhv->xhv_array)
- (void)memzero(xhv->xhv_array, (xhv->xhv_max + 1) * sizeof(HE*));
-
- if (SvRMAGICAL(hv))
- mg_clear((SV*)hv);
-}
-
-STATIC void
-S_hfreeentries(pTHX_ HV *hv)
-{
- register HE **array;
- register HE *entry;
- register HE *oentry = Null(HE*);
- I32 riter;
- I32 max;
-
- if (!hv)
- return;
- if (!HvARRAY(hv))
- return;
-
- riter = 0;
- max = HvMAX(hv);
- array = HvARRAY(hv);
- entry = array[0];
- for (;;) {
- if (entry) {
- oentry = entry;
- entry = HeNEXT(entry);
- hv_free_ent(hv, oentry);
- }
- if (!entry) {
- if (++riter > max)
- break;
- entry = array[riter];
- }
- }
- (void)hv_iterinit(hv);
-}
-
-/*
-=for apidoc hv_undef
-
-Undefines the hash.
-
-=cut
-*/
-
-void
-Perl_hv_undef(pTHX_ HV *hv)
-{
- register XPVHV* xhv;
- if (!hv)
- return;
- xhv = (XPVHV*)SvANY(hv);
- hfreeentries(hv);
- Safefree(xhv->xhv_array);
- if (HvNAME(hv)) {
- Safefree(HvNAME(hv));
- HvNAME(hv) = 0;
- }
- xhv->xhv_array = 0;
- xhv->xhv_max = 7; /* it's a normal hash */
- xhv->xhv_fill = 0;
- xhv->xhv_keys = 0;
-
- if (SvRMAGICAL(hv))
- mg_clear((SV*)hv);
-}
-
-/*
-=for apidoc hv_iterinit
-
-Prepares a starting point to traverse a hash table. Returns the number of
-keys in the hash (i.e. the same as C<HvKEYS(tb)>). The return value is
-currently only meaningful for hashes without tie magic.
-
-NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
-hash buckets that happen to be in use. If you still need that esoteric
-value, you can get it through the macro C<HvFILL(tb)>.
-
-=cut
-*/
-
-I32
-Perl_hv_iterinit(pTHX_ HV *hv)
-{
- register XPVHV* xhv;
- HE *entry;
-
- if (!hv)
- Perl_croak(aTHX_ "Bad hash");
- xhv = (XPVHV*)SvANY(hv);
- entry = xhv->xhv_eiter;
- if (entry && HvLAZYDEL(hv)) { /* was deleted earlier? */
- HvLAZYDEL_off(hv);
- hv_free_ent(hv, entry);
- }
- xhv->xhv_riter = -1;
- xhv->xhv_eiter = Null(HE*);
- return xhv->xhv_keys; /* used to be xhv->xhv_fill before 5.004_65 */
-}
-
-/*
-=for apidoc hv_iternext
-
-Returns entries from a hash iterator. See C<hv_iterinit>.
-
-=cut
-*/
-
-HE *
-Perl_hv_iternext(pTHX_ HV *hv)
-{
- register XPVHV* xhv;
- register HE *entry;
- HE *oldentry;
- MAGIC* mg;
-
- if (!hv)
- Perl_croak(aTHX_ "Bad hash");
- xhv = (XPVHV*)SvANY(hv);
- oldentry = entry = xhv->xhv_eiter;
-
- if ((mg = SvTIED_mg((SV*)hv, 'P'))) {
- SV *key = sv_newmortal();
- if (entry) {
- sv_setsv(key, HeSVKEY_force(entry));
- SvREFCNT_dec(HeSVKEY(entry)); /* get rid of previous key */
- }
- else {
- char *k;
- HEK *hek;
-
- xhv->xhv_eiter = entry = new_HE(); /* one HE per MAGICAL hash */
- Zero(entry, 1, HE);
- Newz(54, k, HEK_BASESIZE + sizeof(SV*), char);
- hek = (HEK*)k;
- HeKEY_hek(entry) = hek;
- HeKLEN(entry) = HEf_SVKEY;
- }
- magic_nextpack((SV*) hv,mg,key);
- if (SvOK(key)) {
- /* force key to stay around until next time */
- HeSVKEY_set(entry, SvREFCNT_inc(key));
- return entry; /* beware, hent_val is not set */
- }
- if (HeVAL(entry))
- SvREFCNT_dec(HeVAL(entry));
- Safefree(HeKEY_hek(entry));
- del_HE(entry);
- xhv->xhv_eiter = Null(HE*);
- return Null(HE*);
- }
-#ifdef DYNAMIC_ENV_FETCH /* set up %ENV for iteration */
- if (!entry && HvNAME(hv) && strEQ(HvNAME(hv), ENV_HV_NAME))
- prime_env_iter();
-#endif
-
- if (!xhv->xhv_array)
- Newz(506, xhv->xhv_array,
- PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
- if (entry)
- entry = HeNEXT(entry);
- while (!entry) {
- ++xhv->xhv_riter;
- if (xhv->xhv_riter > xhv->xhv_max) {
- xhv->xhv_riter = -1;
- break;
- }
- entry = ((HE**)xhv->xhv_array)[xhv->xhv_riter];
- }
-
- if (oldentry && HvLAZYDEL(hv)) { /* was deleted earlier? */
- HvLAZYDEL_off(hv);
- hv_free_ent(hv, oldentry);
- }
-
- xhv->xhv_eiter = entry;
- return entry;
-}
-
-/*
-=for apidoc hv_iterkey
-
-Returns the key from the current position of the hash iterator. See
-C<hv_iterinit>.
-
-=cut
-*/
-
-char *
-Perl_hv_iterkey(pTHX_ register HE *entry, I32 *retlen)
-{
- if (HeKLEN(entry) == HEf_SVKEY) {
- STRLEN len;
- char *p = SvPV(HeKEY_sv(entry), len);
- *retlen = len;
- return p;
- }
- else {
- *retlen = HeKLEN(entry);
- return HeKEY(entry);
- }
-}
-
-/* unlike hv_iterval(), this always returns a mortal copy of the key */
-/*
-=for apidoc hv_iterkeysv
-
-Returns the key as an C<SV*> from the current position of the hash
-iterator. The return value will always be a mortal copy of the key. Also
-see C<hv_iterinit>.
-
-=cut
-*/
-
-SV *
-Perl_hv_iterkeysv(pTHX_ register HE *entry)
-{
- if (HeKLEN(entry) == HEf_SVKEY)
- return sv_mortalcopy(HeKEY_sv(entry));
- else
- return sv_2mortal(newSVpvn((HeKLEN(entry) ? HeKEY(entry) : ""),
- HeKLEN(entry)));
-}
-
-/*
-=for apidoc hv_iterval
-
-Returns the value from the current position of the hash iterator. See
-C<hv_iterkey>.
-
-=cut
-*/
-
-SV *
-Perl_hv_iterval(pTHX_ HV *hv, register HE *entry)
-{
- if (SvRMAGICAL(hv)) {
- if (mg_find((SV*)hv,'P')) {
- SV* sv = sv_newmortal();
- if (HeKLEN(entry) == HEf_SVKEY)
- mg_copy((SV*)hv, sv, (char*)HeKEY_sv(entry), HEf_SVKEY);
- else mg_copy((SV*)hv, sv, HeKEY(entry), HeKLEN(entry));
- return sv;
- }
- }
- return HeVAL(entry);
-}
-
-/*
-=for apidoc hv_iternextsv
-
-Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
-operation.
-
-=cut
-*/
-
-SV *
-Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen)
-{
- HE *he;
- if ( (he = hv_iternext(hv)) == NULL)
- return NULL;
- *key = hv_iterkey(he, retlen);
- return hv_iterval(hv, he);
-}
-
-/*
-=for apidoc hv_magic
-
-Adds magic to a hash. See C<sv_magic>.
-
-=cut
-*/
-
-void
-Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how)
-{
- sv_magic((SV*)hv, (SV*)gv, how, Nullch, 0);
-}
-
-char*
-Perl_sharepvn(pTHX_ const char *sv, I32 len, U32 hash)
-{
- return HEK_KEY(share_hek(sv, len, hash));
-}
-
-/* possibly free a shared string if no one has access to it
- * len and hash must both be valid for str.
- */
-void
-Perl_unsharepvn(pTHX_ const char *str, I32 len, U32 hash)
-{
- register XPVHV* xhv;
- register HE *entry;
- register HE **oentry;
- register I32 i = 1;
- I32 found = 0;
-
- /* what follows is the moral equivalent of:
- if ((Svp = hv_fetch(PL_strtab, tmpsv, FALSE, hash))) {
- if (--*Svp == Nullsv)
- hv_delete(PL_strtab, str, len, G_DISCARD, hash);
- } */
- xhv = (XPVHV*)SvANY(PL_strtab);
- /* assert(xhv_array != 0) */
- LOCK_STRTAB_MUTEX;
- oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- for (entry = *oentry; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != len)
- continue;
- if (memNE(HeKEY(entry),str,len)) /* is this it? */
- continue;
- found = 1;
- if (--HeVAL(entry) == Nullsv) {
- *oentry = HeNEXT(entry);
- if (i && !*oentry)
- xhv->xhv_fill--;
- Safefree(HeKEY_hek(entry));
- del_HE(entry);
- --xhv->xhv_keys;
- }
- break;
- }
- UNLOCK_STRTAB_MUTEX;
- if (!found && ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free non-existent shared string");
-}
-
-/* get a (constant) string ptr from the global string table
- * string will get added if it is not already there.
- * len and hash must both be valid for str.
- */
-HEK *
-Perl_share_hek(pTHX_ const char *str, I32 len, register U32 hash)
-{
- register XPVHV* xhv;
- register HE *entry;
- register HE **oentry;
- register I32 i = 1;
- I32 found = 0;
-
- /* what follows is the moral equivalent of:
-
- if (!(Svp = hv_fetch(PL_strtab, str, len, FALSE)))
- hv_store(PL_strtab, str, len, Nullsv, hash);
- */
- xhv = (XPVHV*)SvANY(PL_strtab);
- /* assert(xhv_array != 0) */
- LOCK_STRTAB_MUTEX;
- oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
- for (entry = *oentry; entry; i=0, entry = HeNEXT(entry)) {
- if (HeHASH(entry) != hash) /* strings can't be equal */
- continue;
- if (HeKLEN(entry) != len)
- continue;
- if (memNE(HeKEY(entry),str,len)) /* is this it? */
- continue;
- found = 1;
- break;
- }
- if (!found) {
- entry = new_HE();
- HeKEY_hek(entry) = save_hek(str, len, hash);
- HeVAL(entry) = Nullsv;
- HeNEXT(entry) = *oentry;
- *oentry = entry;
- xhv->xhv_keys++;
- if (i) { /* initial entry? */
- ++xhv->xhv_fill;
- if (xhv->xhv_keys > xhv->xhv_max)
- hsplit(PL_strtab);
- }
- }
-
- ++HeVAL(entry); /* use value slot as REFCNT */
- UNLOCK_STRTAB_MUTEX;
- return HeKEY_hek(entry);
-}
-
-
-
diff --git a/contrib/perl5/hv.h b/contrib/perl5/hv.h
deleted file mode 100644
index 6830d65..0000000
--- a/contrib/perl5/hv.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/* hv.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/* typedefs to eliminate some typing */
-typedef struct he HE;
-typedef struct hek HEK;
-
-/* entry in hash value chain */
-struct he {
- HE *hent_next; /* next entry in chain */
- HEK *hent_hek; /* hash key */
- SV *hent_val; /* scalar value that was hashed */
-};
-
-/* hash key -- defined separately for use as shared pointer */
-struct hek {
- U32 hek_hash; /* hash of key */
- I32 hek_len; /* length of hash key */
- char hek_key[1]; /* variable-length hash key */
-};
-
-/* hash structure: */
-/* This structure must match the beginning of struct xpvmg in sv.h. */
-struct xpvhv {
- char * xhv_array; /* pointer to malloced string */
- STRLEN xhv_fill; /* how full xhv_array currently is */
- STRLEN xhv_max; /* subscript of last element of xhv_array */
- IV xhv_keys; /* how many elements in the array */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* magic for scalar array */
- HV* xmg_stash; /* class package */
-
- I32 xhv_riter; /* current root of iterator */
- HE *xhv_eiter; /* current entry of iterator */
- PMOP *xhv_pmroot; /* list of pm's for this package */
- char *xhv_name; /* name, if a symbol table */
-};
-
-/* hash a key */
-#define PERL_HASH(hash,str,len) \
- STMT_START { \
- register const char *s_PeRlHaSh = str; \
- register I32 i_PeRlHaSh = len; \
- register U32 hash_PeRlHaSh = 0; \
- while (i_PeRlHaSh--) \
- hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \
- (hash) = hash_PeRlHaSh + (hash_PeRlHaSh>>5); \
- } STMT_END
-
-/*
-=for apidoc AmU||HEf_SVKEY
-This flag, used in the length slot of hash entries and magic structures,
-specifies the structure contains a C<SV*> pointer where a C<char*> pointer
-is to be expected. (For information only--not to be used).
-
-=for apidoc AmU||Nullhv
-Null HV pointer.
-
-=for apidoc Am|char*|HvNAME|HV* stash
-Returns the package name of a stash. See C<SvSTASH>, C<CvSTASH>.
-
-=for apidoc Am|void*|HeKEY|HE* he
-Returns the actual pointer stored in the key slot of the hash entry. The
-pointer may be either C<char*> or C<SV*>, depending on the value of
-C<HeKLEN()>. Can be assigned to. The C<HePV()> or C<HeSVKEY()> macros are
-usually preferable for finding the value of a key.
-
-=for apidoc Am|STRLEN|HeKLEN|HE* he
-If this is negative, and amounts to C<HEf_SVKEY>, it indicates the entry
-holds an C<SV*> key. Otherwise, holds the actual length of the key. Can
-be assigned to. The C<HePV()> macro is usually preferable for finding key
-lengths.
-
-=for apidoc Am|SV*|HeVAL|HE* he
-Returns the value slot (type C<SV*>) stored in the hash entry.
-
-=for apidoc Am|U32|HeHASH|HE* he
-Returns the computed hash stored in the hash entry.
-
-=for apidoc Am|char*|HePV|HE* he|STRLEN len
-Returns the key slot of the hash entry as a C<char*> value, doing any
-necessary dereferencing of possibly C<SV*> keys. The length of the string
-is placed in C<len> (this is a macro, so do I<not> use C<&len>). If you do
-not care about what the length of the key is, you may use the global
-variable C<PL_na>, though this is rather less efficient than using a local
-variable. Remember though, that hash keys in perl are free to contain
-embedded nulls, so using C<strlen()> or similar is not a good way to find
-the length of hash keys. This is very similar to the C<SvPV()> macro
-described elsewhere in this document.
-
-=for apidoc Am|SV*|HeSVKEY|HE* he
-Returns the key as an C<SV*>, or C<Nullsv> if the hash entry does not
-contain an C<SV*> key.
-
-=for apidoc Am|SV*|HeSVKEY_force|HE* he
-Returns the key as an C<SV*>. Will create and return a temporary mortal
-C<SV*> if the hash entry contains only a C<char*> key.
-
-=for apidoc Am|SV*|HeSVKEY_set|HE* he|SV* sv
-Sets the key to a given C<SV*>, taking care to set the appropriate flags to
-indicate the presence of an C<SV*> key, and returns the same
-C<SV*>.
-
-=cut
-*/
-
-/* these hash entry flags ride on hent_klen (for use only in magic/tied HVs) */
-#define HEf_SVKEY -2 /* hent_key is a SV* */
-
-
-#define Nullhv Null(HV*)
-#define HvARRAY(hv) ((HE**)((XPVHV*) SvANY(hv))->xhv_array)
-#define HvFILL(hv) ((XPVHV*) SvANY(hv))->xhv_fill
-#define HvMAX(hv) ((XPVHV*) SvANY(hv))->xhv_max
-#define HvKEYS(hv) ((XPVHV*) SvANY(hv))->xhv_keys
-#define HvRITER(hv) ((XPVHV*) SvANY(hv))->xhv_riter
-#define HvEITER(hv) ((XPVHV*) SvANY(hv))->xhv_eiter
-#define HvPMROOT(hv) ((XPVHV*) SvANY(hv))->xhv_pmroot
-#define HvNAME(hv) ((XPVHV*) SvANY(hv))->xhv_name
-
-#define HvSHAREKEYS(hv) (SvFLAGS(hv) & SVphv_SHAREKEYS)
-#define HvSHAREKEYS_on(hv) (SvFLAGS(hv) |= SVphv_SHAREKEYS)
-#define HvSHAREKEYS_off(hv) (SvFLAGS(hv) &= ~SVphv_SHAREKEYS)
-
-#define HvLAZYDEL(hv) (SvFLAGS(hv) & SVphv_LAZYDEL)
-#define HvLAZYDEL_on(hv) (SvFLAGS(hv) |= SVphv_LAZYDEL)
-#define HvLAZYDEL_off(hv) (SvFLAGS(hv) &= ~SVphv_LAZYDEL)
-
-/* Maybe amagical: */
-/* #define HV_AMAGICmb(hv) (SvFLAGS(hv) & (SVpgv_badAM | SVpgv_AM)) */
-
-#define HV_AMAGIC(hv) (SvFLAGS(hv) & SVpgv_AM)
-#define HV_AMAGIC_on(hv) (SvFLAGS(hv) |= SVpgv_AM)
-#define HV_AMAGIC_off(hv) (SvFLAGS(hv) &= ~SVpgv_AM)
-
-/*
-#define HV_AMAGICbad(hv) (SvFLAGS(hv) & SVpgv_badAM)
-#define HV_badAMAGIC_on(hv) (SvFLAGS(hv) |= SVpgv_badAM)
-#define HV_badAMAGIC_off(hv) (SvFLAGS(hv) &= ~SVpgv_badAM)
-*/
-
-#define Nullhe Null(HE*)
-#define HeNEXT(he) (he)->hent_next
-#define HeKEY_hek(he) (he)->hent_hek
-#define HeKEY(he) HEK_KEY(HeKEY_hek(he))
-#define HeKEY_sv(he) (*(SV**)HeKEY(he))
-#define HeKLEN(he) HEK_LEN(HeKEY_hek(he))
-#define HeVAL(he) (he)->hent_val
-#define HeHASH(he) HEK_HASH(HeKEY_hek(he))
-#define HePV(he,lp) ((HeKLEN(he) == HEf_SVKEY) ? \
- SvPV(HeKEY_sv(he),lp) : \
- (((lp = HeKLEN(he)) >= 0) ? \
- HeKEY(he) : Nullch))
-
-#define HeSVKEY(he) ((HeKEY(he) && \
- HeKLEN(he) == HEf_SVKEY) ? \
- HeKEY_sv(he) : Nullsv)
-
-#define HeSVKEY_force(he) (HeKEY(he) ? \
- ((HeKLEN(he) == HEf_SVKEY) ? \
- HeKEY_sv(he) : \
- sv_2mortal(newSVpvn(HeKEY(he), \
- HeKLEN(he)))) : \
- &PL_sv_undef)
-#define HeSVKEY_set(he,sv) ((HeKLEN(he) = HEf_SVKEY), (HeKEY_sv(he) = sv))
-
-#define Nullhek Null(HEK*)
-#define HEK_BASESIZE STRUCT_OFFSET(HEK, hek_key[0])
-#define HEK_HASH(hek) (hek)->hek_hash
-#define HEK_LEN(hek) (hek)->hek_len
-#define HEK_KEY(hek) (hek)->hek_key
-
-/* calculate HV array allocation */
-#if defined(STRANGE_MALLOC) || defined(MYMALLOC)
-# define PERL_HV_ARRAY_ALLOC_BYTES(size) ((size) * sizeof(HE*))
-#else
-# define MALLOC_OVERHEAD 16
-# define PERL_HV_ARRAY_ALLOC_BYTES(size) \
- (((size) < 64) \
- ? (size) * sizeof(HE*) \
- : (size) * sizeof(HE*) * 2 - MALLOC_OVERHEAD)
-#endif
diff --git a/contrib/perl5/installhtml b/contrib/perl5/installhtml
deleted file mode 100755
index d437ded..0000000
--- a/contrib/perl5/installhtml
+++ /dev/null
@@ -1,603 +0,0 @@
-#!./perl -w
-
-# This file should really be extracted from a .PL file
-
-use lib 'lib'; # use source library if present
-
-use Config; # for config options in the makefile
-use Getopt::Long; # for command-line parsing
-use Cwd;
-use Pod::Html;
-
-=head1 NAME
-
-installhtml - converts a collection of POD pages to HTML format.
-
-=head1 SYNOPSIS
-
- installhtml [--help] [--podpath=<name>:...:<name>] [--podroot=<name>]
- [--htmldir=<name>] [--htmlroot=<name>] [--norecurse] [--recurse]
- [--splithead=<name>,...,<name>] [--splititem=<name>,...,<name>]
- [--libpods=<name>,...,<name>] [--verbose]
-
-=head1 DESCRIPTION
-
-I<installhtml> converts a collection of POD pages to a corresponding
-collection of HTML pages. This is primarily used to convert the pod
-pages found in the perl distribution.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<--help> help
-
-Displays the usage.
-
-=item B<--podroot> POD search path base directory
-
-The base directory to search for all .pod and .pm files to be converted.
-Default is current directory.
-
-=item B<--podpath> POD search path
-
-The list of directories to search for .pod and .pm files to be converted.
-Default is `podroot/.'.
-
-=item B<--recurse> recurse on subdirectories
-
-Whether or not to convert all .pm and .pod files found in subdirectories
-too. Default is to not recurse.
-
-=item B<--htmldir> HTML destination directory
-
-The base directory which all HTML files will be written to. This should
-be a path relative to the filesystem, not the resulting URL.
-
-=item B<--htmlroot> URL base directory
-
-The base directory which all resulting HTML files will be visible at in
-a URL. The default is `/'.
-
-=item B<--splithead> POD files to split on =head directive
-
-Comma-separated list of pod files to split by the =head directive. The
-.pod suffix is optional. These files should have names specified
-relative to podroot.
-
-=item B<--splititem> POD files to split on =item directive
-
-Comma-separated list of all pod files to split by the =item directive.
-The .pod suffix is optional. I<installhtml> does not do the actual
-split, rather it invokes I<splitpod> to do the dirty work. As with
---splithead, these files should have names specified relative to podroot.
-
-=item B<--splitpod> Directory containing the splitpod program
-
-The directory containing the splitpod program. The default is `podroot/pod'.
-
-=item B<--libpods> library PODs for LE<lt>E<gt> links
-
-Comma-separated list of "library" pod files. This is the same list that
-will be passed to pod2html when any pod is converted.
-
-=item B<--verbose> verbose output
-
-Self-explanatory.
-
-=back
-
-=head1 EXAMPLE
-
-The following command-line is an example of the one we use to convert
-perl documentation:
-
- ./installhtml --podpath=lib:ext:pod:vms \
- --podroot=/usr/src/perl \
- --htmldir=/perl/nmanual \
- --htmlroot=/perl/nmanual \
- --splithead=pod/perlipc \
- --splititem=pod/perlfunc \
- --libpods=perlfunc,perlguts,perlvar,perlrun,perlop \
- --recurse \
- --verbose
-
-=head1 AUTHOR
-
-Chris Hall E<lt>hallc@cs.colorado.eduE<gt>
-
-=head1 TODO
-
-=cut
-
-$usage =<<END_OF_USAGE;
-Usage: $0 --help --podpath=<name>:...:<name> --podroot=<name>
- --htmldir=<name> --htmlroot=<name> --norecurse --recurse
- --splithead=<name>,...,<name> --splititem=<name>,...,<name>
- --libpods=<name>,...,<name> --verbose
-
- --help - this message
- --podpath - colon-separated list of directories containing .pod and
- .pm files to be converted (. by default).
- --podroot - filesystem base directory from which all relative paths in
- podpath stem (default is .).
- --htmldir - directory to store resulting html files in relative
- to the filesystem (\$podroot/html by default).
- --htmlroot - http-server base directory from which all relative paths
- in podpath stem (default is /).
- --libpods - comma-separated list of files to search for =item pod
- directives in as targets of C<> and implicit links (empty
- by default).
- --norecurse - don't recurse on those subdirectories listed in podpath.
- (default behavior).
- --recurse - recurse on those subdirectories listed in podpath
- --splithead - comma-separated list of .pod or .pm files to split. will
- split each file into several smaller files at every occurrence
- of a pod =head[1-6] directive.
- --splititem - comma-separated list of .pod or .pm files to split using
- splitpod.
- --splitpod - directory where the program splitpod can be found
- (\$podroot/pod by default).
- --verbose - self-explanatory.
-
-END_OF_USAGE
-
-@libpods = ();
-@podpath = ( "." ); # colon-separated list of directories containing .pod
- # and .pm files to be converted.
-$podroot = "."; # assume the pods we want are here
-$htmldir = ""; # nothing for now...
-$htmlroot = "/"; # default value
-$recurse = 0; # default behavior
-@splithead = (); # don't split any files by default
-@splititem = (); # don't split any files by default
-$splitpod = ""; # nothing for now.
-
-$verbose = 0; # whether or not to print debugging info
-
-$pod2html = "pod/pod2html";
-
-usage("") unless @ARGV;
-
-# Overcome shell's p1,..,p8 limitation.
-# See vms/descrip_mms.template -> descrip.mms for invokation.
-if ( $^O eq 'VMS' ) { @ARGV = split(/\s+/,$ARGV[0]); }
-
-# parse the command-line
-$result = GetOptions( qw(
- help
- podpath=s
- podroot=s
- htmldir=s
- htmlroot=s
- libpods=s
- recurse!
- splithead=s
- splititem=s
- splitpod=s
- verbose
-));
-usage("invalid parameters") unless $result;
-parse_command_line();
-
-
-# set these variables to appropriate values if the user didn't specify
-# values for them.
-$htmldir = "$htmlroot/html" unless $htmldir;
-$splitpod = "$podroot/pod" unless $splitpod;
-
-
-# make sure that the destination directory exists
-(mkdir($htmldir, 0755) ||
- die "$0: cannot make directory $htmldir: $!\n") if ! -d $htmldir;
-
-
-# the following array will eventually contain files that are to be
-# ignored in the conversion process. these are files that have been
-# process by splititem or splithead and should not be converted as a
-# result.
-@ignore = ();
-
-
-# split pods. its important to do this before convert ANY pods because
-# it may effect some of the links
-@splitdirs = (); # files in these directories won't get an index
-split_on_head($podroot, $htmldir, \@splitdirs, \@ignore, @splithead);
-split_on_item($podroot, \@splitdirs, \@ignore, @splititem);
-
-
-# convert the pod pages found in @poddirs
-#warn "converting files\n" if $verbose;
-#warn "\@ignore\t= @ignore\n" if $verbose;
-foreach $dir (@podpath) {
- installdir($dir, $recurse, $podroot, \@splitdirs, \@ignore);
-}
-
-
-# now go through and create master indices for each pod we split
-foreach $dir (@splititem) {
- print "creating index $htmldir/$dir.html\n" if $verbose;
- create_index("$htmldir/$dir.html", "$htmldir/$dir");
-}
-
-foreach $dir (@splithead) {
- $dir .= ".pod" unless $dir =~ /(\.pod|\.pm)$/;
- # let pod2html create the file
- runpod2html($dir, 1);
-
- # now go through and truncate after the index
- $dir =~ /^(.*?)(\.pod|\.pm)?$/sm;
- $file = "$htmldir/$1";
- print "creating index $file.html\n" if $verbose;
-
- # read in everything until what would have been the first =head
- # directive, patching the index as we go.
- open(H, "<$file.html") ||
- die "$0: error opening $file.html for input: $!\n";
- $/ = "";
- @data = ();
- while (<H>) {
- last if /NAME=/;
- $_ =~ s{HREF="#(.*)">}{
- my $url = "$file/$1.html" ;
- $url = Pod::Html::relativize_url( $url, "$file.html" )
- if ( ! defined $opt_htmlroot || $opt_htmlroot eq '' ) ;
- "HREF=\"$url\">" ;
- }eg;
- push @data, $_;
- }
- close(H);
-
- # now rewrite the file
- open(H, ">$file.html") ||
- die "$0: error opening $file.html for output: $!\n";
- print H "@data\n";
- close(H);
-}
-
-##############################################################################
-
-
-sub usage {
- warn "$0: @_\n" if @_;
- die $usage;
-}
-
-
-sub parse_command_line {
- usage() if defined $opt_help;
- $opt_help = ""; # make -w shut up
-
- # list of directories
- @podpath = split(":", $opt_podpath) if defined $opt_podpath;
-
- # lists of files
- @splithead = split(",", $opt_splithead) if defined $opt_splithead;
- @splititem = split(",", $opt_splititem) if defined $opt_splititem;
- @libpods = split(",", $opt_libpods) if defined $opt_libpods;
-
- $htmldir = $opt_htmldir if defined $opt_htmldir;
- $htmlroot = $opt_htmlroot if defined $opt_htmlroot;
- $podroot = $opt_podroot if defined $opt_podroot;
- $splitpod = $opt_splitpod if defined $opt_splitpod;
-
- $recurse = $opt_recurse if defined $opt_recurse;
- $verbose = $opt_verbose if defined $opt_verbose;
-}
-
-
-sub absolute_path {
- my($cwd, $path) = @_;
- return "$cwd/$path" unless $path =~ m:/:;
- # add cwd if path is not already an absolute path
- $path = "$cwd/$path" if (substr($path,0,1) ne '/');
- return $path;
-}
-
-
-sub create_index {
- my($html, $dir) = @_;
- my(@files, @filedata, @index, $file);
- my($lcp1,$lcp2);
-
-
- # get the list of .html files in this directory
- opendir(DIR, $dir) ||
- die "$0: error opening directory $dir for reading: $!\n";
- @files = sort(grep(/\.html?$/, readdir(DIR)));
- closedir(DIR);
-
- open(HTML, ">$html") ||
- die "$0: error opening $html for output: $!\n";
-
- # for each .html file in the directory, extract the index
- # embedded in the file and throw it into the big index.
- print HTML "<DL COMPACT>\n";
- foreach $file (@files) {
- $/ = "";
-
- open(IN, "<$dir/$file") ||
- die "$0: error opening $dir/$file for input: $!\n";
- @filedata = <IN>;
- close(IN);
-
- # pull out the NAME section
- ($name) = grep(/NAME=/, @filedata);
- ($lcp1,$lcp2) = ($name =~ m,/H1>\s(\S+)\s[\s-]*(.*?)\s*$,sm);
- if (defined $lcp1 and $lcp1 eq '<P>') { # Uninteresting. Try again.
- ($lcp1,$lcp2) = ($name =~ m,/H1>\s<P>\s(\S+)\s[\s-]*(.*?)\s*$,sm);
- }
- my $url= "$dir/$file" ;
- if ( ! defined $opt_htmlroot || $opt_htmlroot eq '' ) {
- $url = Pod::Html::relativize_url( "$dir/$file", $html ) ;
- }
-
- print HTML qq(<A HREF="$url">);
- print HTML "<DT>$lcp1</A><DD>$lcp2\n" if defined $lcp1;
-# print HTML qq(<A HREF="$url">$lcp1</A><BR>\n") if defined $lcp1;
-
- next;
-
- @index = grep(/<!-- INDEX BEGIN -->.*<!-- INDEX END -->/s,
- @filedata);
- for (@index) {
- s/<!-- INDEX BEGIN -->(\s*<!--)(.*)(-->\s*)<!-- INDEX END -->/$lcp2/s;
- s,#,$dir/$file#,g;
- # print HTML "$_\n";
- print HTML "$_\n<P><HR><P>\n";
- }
- }
- print HTML "</DL>\n";
-
- close(HTML);
-}
-
-
-sub split_on_head {
- my($podroot, $htmldir, $splitdirs, $ignore, @splithead) = @_;
- my($pod, $dirname, $filename);
-
- # split the files specified in @splithead on =head[1-6] pod directives
- print "splitting files by head.\n" if $verbose && $#splithead >= 0;
- foreach $pod (@splithead) {
- # figure out the directory name and filename
- $pod =~ s,^([^/]*)$,/$1,;
- $pod =~ m,(.*?)/(.*?)(\.pod)?$,;
- $dirname = $1;
- $filename = "$2.pod";
-
- # since we are splitting this file it shouldn't be converted.
- push(@$ignore, "$podroot/$dirname/$filename");
-
- # split the pod
- splitpod("$podroot/$dirname/$filename", "$podroot/$dirname", $htmldir,
- $splitdirs);
- }
-}
-
-
-sub split_on_item {
- my($podroot, $splitdirs, $ignore, @splititem) = @_;
- my($pwd, $dirname, $filename);
-
- print "splitting files by item.\n" if $verbose && $#splititem >= 0;
- $pwd = getcwd();
- my $splitter = absolute_path($pwd, "$splitpod/splitpod");
- foreach $pod (@splititem) {
- # figure out the directory to split into
- $pod =~ s,^([^/]*)$,/$1,;
- $pod =~ m,(.*?)/(.*?)(\.pod)?$,;
- $dirname = "$1/$2";
- $filename = "$2.pod";
-
- # since we are splitting this file it shouldn't be converted.
- push(@$ignore, "$podroot/$dirname.pod");
-
- # split the pod
- push(@$splitdirs, "$podroot/$dirname");
- if (! -d "$podroot/$dirname") {
- mkdir("$podroot/$dirname", 0755) ||
- die "$0: error creating directory $podroot/$dirname: $!\n";
- }
- chdir("$podroot/$dirname") ||
- die "$0: error changing to directory $podroot/$dirname: $!\n";
- die "$splitter not found. Use '-splitpod dir' option.\n"
- unless -f $splitter;
- system("perl", $splitter, "../$filename") &&
- warn "$0: error running '$splitter ../$filename'"
- ." from $podroot/$dirname";
- }
- chdir($pwd);
-}
-
-
-#
-# splitpod - splits a .pod file into several smaller .pod files
-# where a new file is started each time a =head[1-6] pod directive
-# is encountered in the input file.
-#
-sub splitpod {
- my($pod, $poddir, $htmldir, $splitdirs) = @_;
- my(@poddata, @filedata, @heads);
- my($file, $i, $j, $prevsec, $section, $nextsec);
-
- print "splitting $pod\n" if $verbose;
-
- # read the file in paragraphs
- $/ = "";
- open(SPLITIN, "<$pod") ||
- die "$0: error opening $pod for input: $!\n";
- @filedata = <SPLITIN>;
- close(SPLITIN) ||
- die "$0: error closing $pod: $!\n";
-
- # restore the file internally by =head[1-6] sections
- @poddata = ();
- for ($i = 0, $j = -1; $i <= $#filedata; $i++) {
- $j++ if ($filedata[$i] =~ /^\s*=head[1-6]/);
- if ($j >= 0) {
- $poddata[$j] = "" unless defined $poddata[$j];
- $poddata[$j] .= "\n$filedata[$i]" if $j >= 0;
- }
- }
-
- # create list of =head[1-6] sections so that we can rewrite
- # L<> links as necessary.
- %heads = ();
- foreach $i (0..$#poddata) {
- $heads{htmlize($1)} = 1 if $poddata[$i] =~ /=head[1-6]\s+(.*)/;
- }
-
- # create a directory of a similar name and store all the
- # files in there
- $pod =~ s,.*/(.*),$1,; # get the last part of the name
- $dir = $pod;
- $dir =~ s/\.pod//g;
- push(@$splitdirs, "$poddir/$dir");
- mkdir("$poddir/$dir", 0755) ||
- die "$0: could not create directory $poddir/$dir: $!\n"
- unless -d "$poddir/$dir";
-
- $poddata[0] =~ /^\s*=head[1-6]\s+(.*)/;
- $section = "";
- $nextsec = $1;
-
- # for each section of the file create a separate pod file
- for ($i = 0; $i <= $#poddata; $i++) {
- # determine the "prev" and "next" links
- $prevsec = $section;
- $section = $nextsec;
- if ($i < $#poddata) {
- $poddata[$i+1] =~ /^\s*=head[1-6]\s+(.*)/;
- $nextsec = $1;
- } else {
- $nextsec = "";
- }
-
- # determine an appropriate filename (this must correspond with
- # what pod2html will try and guess)
- # $poddata[$i] =~ /^\s*=head[1-6]\s+(.*)/;
- $file = "$dir/" . htmlize($section) . ".pod";
-
- # create the new .pod file
- print "\tcreating $poddir/$file\n" if $verbose;
- open(SPLITOUT, ">$poddir/$file") ||
- die "$0: error opening $poddir/$file for output: $!\n";
- $poddata[$i] =~ s,L<([^<>]*)>,
- defined $heads{htmlize($1)} ? "L<$dir/$1>" : "L<$1>"
- ,ge;
- print SPLITOUT $poddata[$i]."\n\n";
- print SPLITOUT "=over 4\n\n";
- print SPLITOUT "=item *\n\nBack to L<$dir/\"$prevsec\">\n\n" if $prevsec;
- print SPLITOUT "=item *\n\nForward to L<$dir/\"$nextsec\">\n\n" if $nextsec;
- print SPLITOUT "=item *\n\nUp to L<$dir>\n\n";
- print SPLITOUT "=back\n\n";
- close(SPLITOUT) ||
- die "$0: error closing $poddir/$file: $!\n";
- }
-}
-
-
-#
-# installdir - takes care of converting the .pod and .pm files in the
-# current directory to .html files and then installing those.
-#
-sub installdir {
- my($dir, $recurse, $podroot, $splitdirs, $ignore) = @_;
- my(@dirlist, @podlist, @pmlist, $doindex);
-
- @dirlist = (); # directories to recurse on
- @podlist = (); # .pod files to install
- @pmlist = (); # .pm files to install
-
- # should files in this directory get an index?
- $doindex = (grep($_ eq "$podroot/$dir", @$splitdirs) ? 0 : 1);
-
- opendir(DIR, "$podroot/$dir")
- || die "$0: error opening directory $podroot/$dir: $!\n";
-
- # find the directories to recurse on
- @dirlist = map { if ($^O eq 'VMS') {/^(.*)\.dir$/i; "$dir/$1";} else {"$dir/$_";}}
- grep(-d "$podroot/$dir/$_" && !/^\.{1,2}/, readdir(DIR)) if $recurse;
- rewinddir(DIR);
-
- # find all the .pod files within the directory
- @podlist = map { /^(.*)\.pod$/; "$dir/$1" }
- grep(! -d "$podroot/$dir/$_" && /\.pod$/, readdir(DIR));
- rewinddir(DIR);
-
- # find all the .pm files within the directory
- @pmlist = map { /^(.*)\.pm$/; "$dir/$1" }
- grep(! -d "$podroot/$dir/$_" && /\.pm$/, readdir(DIR));
-
- closedir(DIR);
-
- # recurse on all subdirectories we kept track of
- foreach $dir (@dirlist) {
- installdir($dir, $recurse, $podroot, $splitdirs, $ignore);
- }
-
- # install all the pods we found
- foreach $pod (@podlist) {
- # check if we should ignore it.
- next if grep($_ eq "$podroot/$pod.pod", @$ignore);
-
- # check if a .pm files exists too
- if (grep($_ eq "$pod.pm", @pmlist)) {
- print "$0: Warning both `$podroot/$pod.pod' and "
- . "`$podroot/$pod.pm' exist, using pod\n";
- push(@ignore, "$pod.pm");
- }
- runpod2html("$pod.pod", $doindex);
- }
-
- # install all the .pm files we found
- foreach $pm (@pmlist) {
- # check if we should ignore it.
- next if grep($_ eq "$pm.pm", @ignore);
-
- runpod2html("$pm.pm", $doindex);
- }
-}
-
-
-#
-# runpod2html - invokes pod2html to convert a .pod or .pm file to a .html
-# file.
-#
-sub runpod2html {
- my($pod, $doindex) = @_;
- my($html, $i, $dir, @dirs);
-
- $html = $pod;
- $html =~ s/\.(pod|pm)$/.html/g;
-
- # make sure the destination directories exist
- @dirs = split("/", $html);
- $dir = "$htmldir/";
- for ($i = 0; $i < $#dirs; $i++) {
- if (! -d "$dir$dirs[$i]") {
- mkdir("$dir$dirs[$i]", 0755) ||
- die "$0: error creating directory $dir$dirs[$i]: $!\n";
- }
- $dir .= "$dirs[$i]/";
- }
-
- # invoke pod2html
- print "$podroot/$pod => $htmldir/$html\n" if $verbose;
-#system("./pod2html",
- Pod::Html'pod2html(
- #Pod::Html'pod2html($pod2html,
- "--htmldir=$htmldir",
- "--htmlroot=$htmlroot",
- "--podpath=".join(":", @podpath),
- "--podroot=$podroot", "--netscape",
- "--header",
- ($doindex ? "--index" : "--noindex"),
- "--" . ($recurse ? "" : "no") . "recurse",
- ($#libpods >= 0) ? "--libpods=" . join(":", @libpods) : "",
- "--infile=$podroot/$pod", "--outfile=$htmldir/$html");
- die "$0: error running $pod2html: $!\n" if $?;
-}
-
-sub htmlize { htmlify(0, @_) }
diff --git a/contrib/perl5/installman b/contrib/perl5/installman
deleted file mode 100755
index 06f68f5..0000000
--- a/contrib/perl5/installman
+++ /dev/null
@@ -1,285 +0,0 @@
-#!./perl -w
-BEGIN { @INC = ('lib') }
-use strict;
-use Config;
-use Getopt::Long;
-use File::Find;
-use File::Copy;
-use File::Path qw(mkpath);
-use ExtUtils::Packlist;
-use subs qw(unlink chmod rename link);
-use vars qw($packlist @modpods);
-require Cwd;
-
-$ENV{SHELL} = 'sh' if $^O eq 'os2';
-
-my $ver = $Config{version}; # Not used presently.
-my $release = substr($],0,3); # Not used presently.
-my $patchlevel = substr($],3,2);
-die "Patchlevel of perl ($patchlevel)",
- "and patchlevel of config.sh ($Config{'PERL_VERSION'}) don't match\n"
- if $patchlevel != $Config{'PERL_VERSION'};
-
-my $usage =
-"Usage: installman --man1dir=/usr/wherever --man1ext=1
- --man3dir=/usr/wherever --man3ext=3
- --batchlimit=40
- --notify --verbose --silent --help
- Defaults are:
- man1dir = $Config{'installman1dir'};
- man1ext = $Config{'man1ext'};
- man3dir = $Config{'installman3dir'};
- man3ext = $Config{'man3ext'};
- batchlimit is maximum number of pod files per invocation of pod2man
- --notify (or -n) just lists commands that would be executed.
- --verbose (or -V) report all progress.
- --silent (or -S) be silent. Only report errors.\n";
-
-my %opts;
-GetOptions( \%opts,
- qw( man1dir=s man1ext=s man3dir=s man3ext=s batchlimit=i
- notify n help silent S verbose V))
- || die $usage;
-die $usage if $opts{help};
-
-$opts{man1dir} = $Config{'installman1dir'}
- unless defined($opts{man1dir});
-$opts{man1ext} = $Config{'man1ext'}
- unless defined($opts{man1ext});
-$opts{man3dir} = $Config{'installman3dir'}
- unless defined($opts{man3dir});
-$opts{man3ext} = $Config{'man3ext'}
- unless defined($opts{man3ext});
-$opts{batchlimit} ||= 40;
-$opts{silent} ||= $opts{S};
-$opts{notify} ||= $opts{n};
-$opts{verbose} ||= $opts{V} || $opts{notify};
-
-#Sanity checks
-
--x "./perl$Config{exe_ext}"
- or warn "./perl$Config{exe_ext} not found! Have you run make?\n";
--d $Config{'installprivlib'}
- || warn "Perl library directory $Config{'installprivlib'} not found.
- Have you run make install?. (Installing anyway.)\n";
--x "t/perl$Config{exe_ext}" || warn "WARNING: You've never run 'make test'!!!",
- " (Installing anyway.)\n";
-
-$packlist = ExtUtils::Packlist->new("$Config{installarchlib}/.packlist");
-
-# Install the main pod pages.
-runpod2man('pod', $opts{man1dir}, $opts{man1ext});
-
-# Install the pods for library modules.
-runpod2man('lib', $opts{man3dir}, $opts{man3ext});
-
-# Install the pods embedded in the installed scripts
-runpod2man('utils', $opts{man1dir}, $opts{man1ext}, 'c2ph', 'h2ph', 'h2xs',
- 'perlcc', 'perldoc', 'perlbug', 'pl2pm', 'splain', 'dprofpp');
-runpod2man('x2p', $opts{man1dir}, $opts{man1ext}, 's2p', 'a2p.pod',
- 'find2perl');
-runpod2man('pod', $opts{man1dir}, $opts{man1ext}, 'pod2man', 'pod2html',
- 'pod2text', 'pod2usage', 'podchecker', 'podselect');
-
-# It would probably be better to have this page linked
-# to the c2ph man page. Or, this one could say ".so man1/c2ph.1",
-# but then it would have to pay attention to $opts{man1dir} and $opts{man1ext}.
-runpod2man('utils', $opts{man1dir}, $opts{man1ext}, 'pstruct');
-
-runpod2man('lib/ExtUtils', $opts{man1dir}, $opts{man1ext}, 'xsubpp');
-
-sub runpod2man {
- # @script is scripts names if we are installing manpages embedded
- # in scripts, () otherwise
- my($poddir, $mandir, $manext, @script) = @_;
-
- my($downdir); # can't just use .. when installing xsubpp manpage
-
- $downdir = $poddir;
- $downdir =~ s:[^/]+:..:g;
- my($builddir) = Cwd::getcwd();
-
- if ($mandir eq ' ' or $mandir eq '') {
- if (@script) {
- warn "Skipping installation of $poddir/$_ man page.\n"
- foreach @script;
- } else {
- warn "Skipping installation of $poddir man pages.\n";
- }
- return;
- }
-
- print "chdir $poddir\n" if $opts{verbose};
- chdir $poddir || die "Unable to cd to $poddir directory!\n$!\n";
-
- # We insist on using the current version of pod2man in case there
- # are enhancements or changes from previous installed versions.
- # The error message doesn't include the '..' because the user
- # won't be aware that we've chdir to $poddir.
- -r "$downdir/pod/pod2man" || die "Executable pod/pod2man not found.\n";
-
- # We want to be sure to use the current perl. We can't rely on
- # the installed perl because it might not be actually installed
- # yet. (The user may have set the $install* Configure variables
- # to point to some temporary home, from which the executable gets
- # installed by occult means.)
- my $pod2man = "$downdir/perl -I $downdir/lib $downdir/pod/pod2man --section=$manext --official";
-
- mkpath($mandir, $opts{verbose}, 0777) unless $opts{notify}; # In File::Path
- # Make a list of all the .pm and .pod files in the directory. We will
- # always run pod2man from the lib directory and feed it the full pathname
- # of the pod. This might be useful for pod2man someday.
- if (@script) {
- @modpods = @script;
- }
- else {
- @modpods = ();
- File::Find::find(\&lsmodpods, '.');
- }
- my @to_process;
- foreach my $mod (@modpods) {
- my $manpage = $mod;
- my $tmp;
- # Skip .pm files that have corresponding .pod files, and Functions.pm.
- next if (($tmp = $mod) =~ s/\.pm$/.pod/ && -f $tmp);
- next if ($mod eq 'Pod/Functions.pm'); #### Used only by pod itself
-
- # Convert name from File/Basename.pm to File::Basename.3 format,
- # if necessary.
- $manpage =~ s#\.p(m|od)$##;
- if ($^O eq 'os2' || $^O eq 'amigaos' || $^O eq 'uwin' || $^O eq 'cygwin') {
- $manpage =~ s#/#.#g;
- }
- else {
- $manpage =~ s#/#::#g;
- }
- $tmp = "${mandir}/${manpage}.tmp";
- $manpage = "${mandir}/${manpage}.${manext}";
- push @to_process, [$mod, $tmp, $manpage];
- }
- # Don't do all pods in same command to avoid busting command line limits
- while (my @this_batch = splice @to_process, 0, $opts{batchlimit}) {
- my $cmd = join " ", $pod2man, map "$$_[0] $$_[1]", @this_batch;
- if (&cmd($cmd) == 0 && !$opts{notify}) {
- foreach (@this_batch) {
- my (undef, $tmp, $manpage) = @$_;
- if (-s $tmp) {
- if (rename($tmp, $manpage)) {
- $packlist->{$manpage} = { type => 'file' };
- next;
- }
- }
- unless ($opts{notify}) {
- unlink($tmp);
- }
- }
- }
- }
- chdir "$builddir" || die "Unable to cd back to $builddir directory!\n$!\n";
- print " chdir $builddir\n" if $opts{verbose};
-}
-
-sub lsmodpods {
- my $dir = $File::Find::dir;
- my $name = $File::Find::name;
- if (-f $_) {
- $name =~ s#^\./##;
- push(@modpods, $name) if ($name =~ /\.p(m|od)$/);
- }
-}
-
-$packlist->write() unless $opts{notify};
-print " Installation complete\n" if $opts{verbose};
-
-exit 0;
-
-
-###############################################################################
-# Utility subroutines from installperl
-
-sub cmd {
- my ($cmd) = @_;
- print " $cmd\n" if $opts{verbose};
- unless ($opts{notify}) {
- if ($Config{d_fork}) {
- fork ? wait : exec $cmd; # Allow user to ^C out of command.
- }
- else {
- system $cmd;
- }
- warn "Command failed!!\n" if $?;
- }
- return $? != 0;
-}
-
-sub unlink {
- my(@names) = @_;
- my $cnt = 0;
-
- foreach my $name (@names) {
- next unless -e $name;
- chmod 0777, $name if $^O eq 'os2';
- print " unlink $name\n" if $opts{verbose};
- ( CORE::unlink($name) and ++$cnt
- or warn "Couldn't unlink $name: $!\n" ) unless $opts{notify};
- }
- return $cnt;
-}
-
-sub link {
- my($from,$to) = @_;
- my($success) = 0;
-
- print $opts{verbose} ? " ln $from $to\n" : " $to\n" unless $opts{silent};
- eval {
- CORE::link($from, $to)
- ? $success++
- : ($from =~ m#^/afs/# || $to =~ m#^/afs/#)
- ? die "AFS" # okay inside eval {}
- : warn "Couldn't link $from to $to: $!\n"
- unless $opts{notify};
- };
- if ($@) {
- File::Copy::copy($from, $to)
- ? $success++
- : warn "Couldn't copy $from to $to: $!\n"
- unless $opts{notify};
- }
- $success;
-}
-
-sub rename {
- my($from,$to) = @_;
- if (-f $to and not unlink($to)) {
- my($i);
- for ($i = 1; $i < 50; $i++) {
- last if CORE::rename($to, "$to.$i");
- }
- warn("Cannot rename to `$to.$i': $!"), return 0
- if $i >= 50; # Give up!
- }
- link($from,$to) || return 0;
- unlink($from);
-}
-
-sub chmod {
- my($mode,$name) = @_;
-
- printf " chmod %o %s\n", $mode, $name if $opts{verbose};
- CORE::chmod($mode,$name) || warn sprintf("Couldn't chmod %o %s: $!\n",$mode,$name)
- unless $opts{notify};
-}
-
-sub samepath {
- my($p1, $p2) = @_;
- my($dev1, $ino1, $dev2, $ino2);
-
- if ($p1 ne $p2) {
- ($dev1, $ino1) = stat($p1);
- ($dev2, $ino2) = stat($p2);
- ($dev1 == $dev2 && $ino1 == $ino2);
- }
- else {
- 1;
- }
-}
diff --git a/contrib/perl5/installperl b/contrib/perl5/installperl
deleted file mode 100755
index d28027c..0000000
--- a/contrib/perl5/installperl
+++ /dev/null
@@ -1,703 +0,0 @@
-#!./perl
-
-BEGIN {
- require 5.004;
- chdir '..' if !-d 'lib' and -d '..\lib';
- @INC = 'lib';
- $ENV{PERL5LIB} = 'lib';
-}
-
-use strict;
-my ($Is_VMS, $Is_W32, $Is_OS2, $Is_Cygwin, $nonono, $dostrip,
- $versiononly, $silent, $verbose, $otherperls);
-use vars qw /$depth/;
-
-BEGIN {
- $Is_VMS = $^O eq 'VMS';
- $Is_W32 = $^O eq 'MSWin32';
- $Is_OS2 = $^O eq 'os2';
- $Is_Cygwin = $^O eq 'cygwin';
- if ($Is_VMS) { eval 'use VMS::Filespec;' }
-}
-
-my $scr_ext = ($Is_VMS ? '.Com' : $Is_W32 ? '.bat' : '');
-
-use File::Find;
-use File::Compare;
-use File::Copy ();
-use File::Path ();
-use ExtUtils::Packlist;
-use Config;
-use subs qw(unlink link chmod);
-
-# override the ones in the rest of the script
-sub mkpath {
- File::Path::mkpath(@_) unless $nonono;
-}
-
-my $mainperldir = "/usr/bin";
-my $exe_ext = $Config{exe_ext};
-
-# Allow ``make install PERLNAME=something_besides_perl'':
-my $perl = defined($ENV{PERLNAME}) ? $ENV{PERLNAME} : 'perl';
-
-# This is the base used for versioned names, like "perl5.6.0".
-# It's separate because a common use of $PERLNAME is to install
-# perl as "perl5", if that's used as base for versioned files you
-# get "perl55.6.0".
-my $perl_verbase = defined($ENV{PERLNAME_VERBASE})
- ? $ENV{PERLNAME_VERBASE}
- : $perl;
-
-$otherperls = 1;
-while (@ARGV) {
- $nonono = 1 if $ARGV[0] eq '-n';
- $dostrip = 1 if $ARGV[0] eq '-s';
- $versiononly = 1 if $ARGV[0] eq '-v';
- $silent = 1 if $ARGV[0] eq '-S';
- $otherperls = 0 if $ARGV[0] eq '-o';
- $verbose = 1 if $ARGV[0] eq '-V' || $ARGV [0] eq '-n';
- shift;
-}
-
-$versiononly = 1 if $Config{versiononly};
-
-my @scripts = qw(utils/c2ph utils/h2ph utils/h2xs utils/perlbug utils/perldoc
- utils/pl2pm utils/splain utils/perlcc utils/dprofpp
- x2p/s2p x2p/find2perl
- pod/pod2man pod/pod2html pod/pod2latex pod/pod2text
- pod/pod2usage pod/podchecker pod/podselect);
-
-if ($scr_ext) { @scripts = map { "$_$scr_ext" } @scripts; }
-
-my @pods = (<pod/*.pod>);
-
-# Specify here any .pm files that are actually architecture-dependent.
-# (Those included with XS extensions under ext/ are automatically
-# added later.)
-# Now that the default privlib has the full perl version number included,
-# we no longer have to play the trick of sticking version-specific .pm
-# files under the archlib directory.
-my %archpms = (
- Config => 1,
-);
-
-if ($^O eq 'dos') {
- push(@scripts,'djgpp/fixpmain');
- $archpms{config} = $archpms{filehand} = 1;
-}
-
-if ((-e "testcompile") && (defined($ENV{'COMPILE'})))
-{
- push(@scripts, map("$_.exe", @scripts));
-}
-
-find(sub {
- if ("$File::Find::dir/$_" =~ m{^ext\b(.*)/([^/]+)\.pm$}) {
- my($path, $modname) = ($1,$2);
-
- # strip trailing component first
- $path =~ s{/[^/]*$}{};
-
- # strip optional "/lib";
- $path =~ s{/lib\b}{};
-
- # strip any leading /
- $path =~ s{^/}{};
-
- # reconstitute canonical module name
- $modname = "$path/$modname" if length $path;
-
- # remember it
- $archpms{$modname} = 1;
- }
- }, 'ext');
-
-# print "[$_]\n" for sort keys %archpms;
-
-my $ver = $Config{version};
-my $release = substr($],0,3); # Not used currently.
-my $patchlevel = substr($],3,2);
-die "Patchlevel of perl ($patchlevel)",
- "and patchlevel of config.sh ($Config{'PERL_VERSION'}) don't match\n"
- if $patchlevel != $Config{'PERL_VERSION'};
-
-# Fetch some frequently-used items from %Config
-my $installbin = $Config{installbin};
-my $installscript = $Config{installscript};
-my $installprivlib = $Config{installprivlib};
-my $installarchlib = $Config{installarchlib};
-my $installsitelib = $Config{installsitelib};
-my $installsitearch = $Config{installsitearch};
-my $installman1dir = $Config{installman1dir};
-my $man1ext = $Config{man1ext};
-my $libperl = $Config{libperl};
-# Shared library and dynamic loading suffixes.
-my $so = $Config{so};
-my $dlext = $Config{dlext};
-my $dlsrc = $Config{dlsrc};
-if ($^O eq 'os390') {
- my $usedl = $Config{usedl};
- if ($usedl eq 'define') {
- my $pwd;
- chomp($pwd=`pwd`);
- my $archlibexp = $Config{archlibexp};
- `./$^X -p -e 's{$pwd\/libperl.x}{$archlibexp/CORE/libperl.x}' lib/Config.pm`;
- }
-}
-
-my $d_dosuid = $Config{d_dosuid};
-my $binexp = $Config{binexp};
-
-if ($Is_VMS) { # Hang in there until File::Spec hits the big time
- foreach ( \$installbin, \$installscript, \$installprivlib,
- \$installarchlib, \$installsitelib, \$installsitearch,
- \$installman1dir ) {
- $$_ = unixify($$_); $$_ =~ s:/$::;
- }
-}
-
-# Do some quick sanity checks.
-
-if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
-
- $installbin || die "No installbin directory in config.sh\n";
--d $installbin || mkpath($installbin, $verbose, 0777);
--d $installbin || $nonono || die "$installbin is not a directory\n";
--w $installbin || $nonono || die "$installbin is not writable by you\n"
- unless $installbin =~ m#^/afs/# || $nonono;
-
--x 'perl' . $exe_ext || die "perl isn't executable!\n";
--x 'suidperl' . $exe_ext|| die "suidperl isn't executable!\n" if $d_dosuid;
-
--f 't/rantests' || $Is_W32
- || warn "WARNING: You've never run 'make test'!!!",
- " (Installing anyway.)\n";
-
-if ($Is_W32 or $Is_Cygwin) {
- my $perldll;
-
- if ($Is_Cygwin) {
- $perldll = $libperl;
- $perldll =~ s/(\..*)?$/.$dlext/;
- if ($Config{useshrplib} eq 'true') {
- # install ld2 and perlld as well
- foreach ('ld2', 'perlld') {
- safe_unlink("$installbin/$_");
- copy("$_", "$installbin/$_");
- chmod(0755, "$installbin/$_");
- };
- };
- } else {
- $perldll = 'perl56.' . $dlext;
- }
-
- if ($dlsrc ne "dl_none.xs") {
- -f $perldll || die "No perl DLL built\n";
- }
- # Install the DLL
-
- safe_unlink("$installbin/$perldll");
- copy("$perldll", "$installbin/$perldll");
- chmod(0755, "$installbin/$perldll");
-
-} # if ($Is_W32 or $Is_Cygwin)
-
-# This will be used to store the packlist
-my $packlist = ExtUtils::Packlist->new("$installarchlib/.packlist");
-
-# First we install the version-numbered executables.
-
-if ($Is_VMS) {
- safe_unlink("$installbin/$perl$exe_ext");
- copy("perl$exe_ext", "$installbin/$perl$exe_ext");
- chmod(0755, "$installbin/$perl$exe_ext");
- safe_unlink("$installbin/${perl}shr$exe_ext");
- copy("perlshr$exe_ext", "$installbin/${perl}shr$exe_ext");
- chmod(0755, "$installbin/${perl}shr$exe_ext");
-}
-elsif ($^O eq 'mpeix') {
- # MPE lacks hard links and requires that executables with special
- # capabilities reside in the MPE namespace.
- safe_unlink("$installbin/perl$ver$exe_ext", $Config{perlpath});
- # Install the primary executable into the MPE namespace as perlpath.
- copy("perl$exe_ext", $Config{perlpath});
- chmod(0755, $Config{perlpath});
- # Create a backup copy with the version number.
- link($Config{perlpath}, "$installbin/perl$ver$exe_ext");
-}
-elsif ($^O ne 'dos') {
- safe_unlink("$installbin/$perl_verbase$ver$exe_ext");
- copy("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext");
- strip("$installbin/$perl_verbase$ver$exe_ext");
- chmod(0755, "$installbin/$perl_verbase$ver$exe_ext");
-}
-else {
- safe_unlink("$installbin/$perl.exe");
- copy("perl.exe", "$installbin/$perl.exe");
-}
-
-safe_unlink("$installbin/s$perl_verbase$ver$exe_ext");
-if ($d_dosuid) {
- copy("suidperl$exe_ext", "$installbin/s$perl_verbase$ver$exe_ext");
- chmod(04711, "$installbin/s$perl_verbase$ver$exe_ext");
-}
-
-# Install library files.
-
-my ($do_installarchlib, $do_installprivlib) = (0, 0);
-
-mkpath($installprivlib, $verbose, 0777);
-mkpath($installarchlib, $verbose, 0777);
-mkpath($installsitelib, $verbose, 0777) if ($installsitelib);
-mkpath($installsitearch, $verbose, 0777) if ($installsitearch);
-
-if (chdir "lib") {
- $do_installarchlib = ! samepath($installarchlib, '.');
- $do_installprivlib = ! samepath($installprivlib, '.');
- $do_installprivlib = 0 if $versiononly && !($installprivlib =~ m/\Q$ver/);
-
- if ($do_installarchlib || $do_installprivlib) {
- find(\&installlib, '.');
- }
- chdir ".." || die "Can't cd back to source directory: $!\n";
-}
-else {
- warn "Can't cd to lib to install lib files: $!\n";
-}
-
-# Install header files and libraries.
-mkpath("$installarchlib/CORE", $verbose, 0777);
-my @corefiles;
-if ($Is_VMS) { # We did core file selection during build
- my $coredir = "lib/$Config{archname}/$ver/CORE";
- $coredir =~ tr/./_/;
- map { s|^$coredir/||i; } @corefiles = <$coredir/*.*>;
-}
-else {
- # [als] hard-coded 'libperl' name... not good!
- @corefiles = <*.h libperl*.*>;
-
- # AIX needs perl.exp installed as well.
- push(@corefiles,'perl.exp') if $^O eq 'aix';
- if ($^O eq 'mpeix') {
- # MPE needs mpeixish.h installed as well.
- mkpath("$installarchlib/CORE/mpeix", $verbose, 0777);
- push(@corefiles,'mpeix/mpeixish.h');
- }
- # If they have built sperl.o...
- push(@corefiles,'sperl.o') if -f 'sperl.o';
-}
-foreach my $file (@corefiles) {
- # HP-UX (at least) needs to maintain execute permissions
- # on dynamically-loadable libraries. So we do it for all.
- if (copy_if_diff($file,"$installarchlib/CORE/$file")) {
- if ($file =~ /\.(\Q$so\E|\Q$dlext\E)$/) {
- chmod(0555, "$installarchlib/CORE/$file");
- strip("-S", "$installarchlib/CORE/$file") if $^O =~ /^(rhapsody|darwin)$/;
- } else {
- chmod(0444, "$installarchlib/CORE/$file");
- }
- }
-}
-
-# Install main perl executables
-# Make links to ordinary names if installbin directory isn't current directory.
-
-if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS) {
- safe_unlink("$installbin/$perl$exe_ext", "$installbin/suid$perl$exe_ext");
- if ($^O eq 'mpeix') {
- # MPE doesn't support hard links, so use a symlink.
- # We don't want another cloned copy.
- symlink($Config{perlpath}, "$installbin/perl$exe_ext");
- } else {
- link("$installbin/$perl_verbase$ver$exe_ext",
- "$installbin/$perl$exe_ext");
- }
- link("$installbin/s$perl_verbase$ver$exe_ext",
- "$installbin/suid$perl$exe_ext")
- if $d_dosuid;
-}
-
-# Offer to install perl in a "standard" location
-
-my $mainperl_is_instperl = 0;
-
-if ($Config{installusrbinperl} && $Config{installusrbinperl} eq 'define' &&
- !$versiononly && !$nonono && !$Is_W32 && !$Is_VMS && -t STDIN && -t STDERR
- && -w $mainperldir && ! samepath($mainperldir, $installbin)) {
- my($usrbinperl) = "$mainperldir/$perl$exe_ext";
- my($instperl) = "$installbin/$perl$exe_ext";
- my($expinstperl) = "$binexp/$perl$exe_ext";
-
- # First make sure $usrbinperl is not already the same as the perl we
- # just installed.
- if (-x $usrbinperl) {
- # Try to be clever about mainperl being a symbolic link
- # to binexp/perl if binexp and installbin are different.
- $mainperl_is_instperl =
- samepath($usrbinperl, $instperl) ||
- samepath($usrbinperl, $expinstperl) ||
- (($binexp ne $installbin) &&
- (-l $usrbinperl) &&
- ((readlink $usrbinperl) eq $expinstperl));
- }
- if ((! $mainperl_is_instperl) &&
- (yn("Many scripts expect perl to be installed as $usrbinperl.\n" .
- "Do you wish to have $usrbinperl be the same as\n" .
- "$expinstperl? [y] ")))
- {
- unlink($usrbinperl);
- ( $Config{'d_link'} eq 'define' &&
- eval { CORE::link $instperl, $usrbinperl } ) ||
- eval { symlink $expinstperl, $usrbinperl } ||
- copy($instperl, $usrbinperl);
-
- $mainperl_is_instperl = 1;
- }
-}
-
-# Make links to ordinary names if installbin directory isn't current directory.
-
-if (!$versiononly && ! samepath($installbin, 'x2p')) {
- safe_unlink("$installbin/a2p$exe_ext");
- copy("x2p/a2p$exe_ext", "$installbin/a2p$exe_ext");
- chmod(0755, "$installbin/a2p$exe_ext");
-}
-
-# cppstdin is just a script, but it is architecture-dependent, so
-# it can't safely be shared. Place it in $installbin.
-# Note that Configure doesn't build cppstin if it isn't needed, so
-# we skip this if cppstdin doesn't exist.
-if (! $versiononly && (-f 'cppstdin') && (! samepath($installbin, '.'))) {
- safe_unlink("$installbin/cppstdin");
- copy("cppstdin", "$installbin/cppstdin");
- chmod(0755, "$installbin/cppstdin");
-}
-
-if (! $versiononly) {
- # Install scripts.
-
- mkpath($installscript, $verbose, 0777);
-
- for (@scripts) {
- (my $base = $_) =~ s#.*/##;
- copy($_, "$installscript/$base");
- chmod(0755, "$installscript/$base");
- }
-
- # pstruct should be a link to c2ph
- safe_unlink("$installscript/pstruct$scr_ext");
- if ($^O eq 'dos' or $Is_VMS or $^O eq 'transit') {
- copy("$installscript/c2ph$scr_ext",
- "$installscript/pstruct$scr_ext");
- } else {
- link("$installscript/c2ph$scr_ext",
- "$installscript/pstruct$scr_ext");
- }
-}
-
-# Install pod pages. Where? I guess in $installprivlib/pod
-# ($installprivlib/pods for cygwin).
-
-my $pod = $Is_Cygwin ? 'pods' : 'pod';
-if ( !$versiononly || ($installprivlib =~ m/\Q$ver/)) {
- mkpath("${installprivlib}/$pod", $verbose, 0777);
-
- # If Perl 5.003's perldiag.pod is there, rename it.
- if (open POD, "${installprivlib}/$pod/perldiag.pod") {
- read POD, $_, 4000;
- close POD;
- # Some of Perl 5.003's diagnostic messages ended with periods.
- if (/^=.*\.$/m) {
- my ($from, $to) = ("${installprivlib}/$pod/perldiag.pod",
- "${installprivlib}/$pod/perldiag-5.003.pod");
- print " rename $from $to";
- rename($from, $to)
- or warn "Couldn't rename $from to $to: $!\n"
- unless $nonono;
- }
- }
-
- for (@pods) {
- # $_ is a name like pod/perl.pod
- (my $base = $_) =~ s#.*/##;
- copy_if_diff($_, "${installprivlib}/$pod/${base}");
- }
-
-}
-
-# Check to make sure there aren't other perls around in installer's
-# path. This is probably UNIX-specific. Check all absolute directories
-# in the path except for where public executables are supposed to live.
-# Also skip $mainperl if the user opted to have it be a link to the
-# installed perl.
-
-if (!$versiononly && $otherperls) {
- my ($path, @path);
- my $dirsep = ($Is_OS2 || $Is_W32) ? ';' : ':' ;
- ($path = $ENV{"PATH"}) =~ s:\\:/:g ;
- @path = split(/$dirsep/, $path);
- if ($Is_VMS) {
- my $i = 0;
- while (exists $ENV{'DCL$PATH' . $i}) {
- my $dir = unixpath($ENV{'DCL$PATH' . $i}); $dir =~ s-/$--;
- push(@path,$dir);
- }
- }
- my @otherperls;
- my %otherperls;
- for (@path) {
- next unless m,^/,;
- # Use &samepath here because some systems have other dirs linked
- # to $mainperldir (like SunOS)
- next if samepath($_, $binexp);
- next if ($mainperl_is_instperl && samepath($_, $mainperldir));
- my $otherperl = "$_/$perl$exe_ext";
- next if $otherperls{$otherperl}++;
- push(@otherperls, $otherperl)
- if (-x $otherperl && ! -d $otherperl);
- }
- if (@otherperls) {
- warn "\nWarning: $perl appears in your path in the following " .
- "locations beyond where\nwe just installed it:\n";
- for (@otherperls) {
- warn " ", $_, "\n";
- }
- warn "\n";
- }
-
-}
-
-$packlist->write() unless $nonono;
-print " Installation complete\n" if $verbose;
-
-exit 0;
-
-###############################################################################
-
-sub yn {
- my($prompt) = @_;
- my($answer);
- my($default) = $prompt =~ m/\[([yn])\]\s*$/i;
- warn $prompt;
- chop($answer = <STDIN>);
- $answer = $default if $answer =~ m/^\s*$/;
- ($answer =~ m/^[yY]/);
-}
-
-sub unlink {
- my(@names) = @_;
- my($cnt) = 0;
-
- return scalar(@names) if $Is_VMS;
-
- foreach my $name (@names) {
- next unless -e $name;
- chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin);
- print " unlink $name\n" if $verbose;
- ( CORE::unlink($name) and ++$cnt
- or warn "Couldn't unlink $name: $!\n" ) unless $nonono;
- }
- return $cnt;
-}
-
-sub safe_unlink {
- return if $nonono or $Is_VMS;
- my @names = @_;
- foreach my $name (@names) {
- next unless -e $name;
- chmod 0777, $name if ($Is_OS2 || $Is_W32);
- print " unlink $name\n" if $verbose;
- next if CORE::unlink($name);
- warn "Couldn't unlink $name: $!\n";
- if ($! =~ /busy/i) {
- print " mv $name $name.old\n" if $verbose;
- safe_rename($name, "$name.old")
- or warn "Couldn't rename $name: $!\n";
- }
- }
-}
-
-sub safe_rename {
- my($from,$to) = @_;
- if (-f $to and not unlink($to)) {
- my($i);
- for ($i = 1; $i < 50; $i++) {
- last if rename($to, "$to.$i");
- }
- warn("Cannot rename to `$to.$i': $!"), return 0
- if $i >= 50; # Give up!
- }
- link($from,$to) || return 0;
- unlink($from);
-}
-
-sub link {
- my($from,$to) = @_;
- my($success) = 0;
-
- print $verbose ? " ln $from $to\n" : " $to\n" unless $silent;
- eval {
- CORE::link($from, $to)
- ? $success++
- : ($from =~ m#^/afs/# || $to =~ m#^/afs/#)
- ? die "AFS" # okay inside eval {}
- : die "Couldn't link $from to $to: $!\n"
- unless $nonono;
- $packlist->{$to} = { from => $from, type => 'link' };
- };
- if ($@) {
- warn $@;
- print $verbose ? " cp $from $to\n" : " $to\n" unless $silent;
- print " creating new version of $to\n"
- if $Is_VMS and -e $to and !$silent;
- File::Copy::copy($from, $to)
- ? $success++
- : warn "Couldn't copy $from to $to: $!\n"
- unless $nonono;
- $packlist->{$to} = { type => 'file' };
- }
- $success;
-}
-
-sub chmod {
- my($mode,$name) = @_;
-
- return if ($^O eq 'dos');
- printf " chmod %o %s\n", $mode, $name if $verbose;
- CORE::chmod($mode,$name)
- || warn sprintf("Couldn't chmod %o %s: $!\n", $mode, $name)
- unless $nonono;
-}
-
-sub copy {
- my($from,$to) = @_;
-
- print $verbose ? " cp $from $to\n" : " $to\n" unless $silent;
- print " creating new version of $to\n" if $Is_VMS and -e $to and !$silent;
- File::Copy::copy($from, $to)
- || warn "Couldn't copy $from to $to: $!\n"
- unless $nonono;
- $packlist->{$to} = { type => 'file' };
-}
-
-sub samepath {
- my($p1, $p2) = @_;
-
- return (lc($p1) eq lc($p2)) if $Is_W32;
-
- if ($p1 ne $p2) {
- my($dev1, $ino1, $dev2, $ino2);
- ($dev1, $ino1) = stat($p1);
- ($dev2, $ino2) = stat($p2);
- ($dev1 == $dev2 && $ino1 == $ino2);
- }
- else {
- 1;
- }
-}
-
-sub installlib {
- my $dir = $File::Find::dir;
- $dir =~ s#^\.(?![^/])/?##;
- local($depth) = $dir ? "lib/$dir" : "lib";
-
- my $name = $_;
-
- # Ignore RCS and CVS directories.
- if (($name eq 'CVS' or $name eq 'RCS') and -d $name) {
- $File::Find::prune = 1;
- return;
- }
-
- # ignore patch backups, RCS files, emacs backup & temp files and the
- # .exists files.
- return if $name =~ m{\.orig$|~$|^#.+#$|,v$|^\.exists};
-
- $name = "$dir/$name" if $dir ne '';
-
- my $installlib = $installprivlib;
- if ($dir =~ /^auto/ ||
- ($name =~ /^(.*)\.(?:pm|pod)$/ && $archpms{$1}) ||
- ($name =~ /^(.*)\.(?:h|lib)$/i && $Is_W32)
- ) {
- $installlib = $installarchlib;
- return unless $do_installarchlib;
- } else {
- return unless $do_installprivlib;
- }
-
- if (-f $_) {
- if (/\.(?:al|ix)$/ && !($dir =~ m[^auto/(.*)$] && $archpms{$1})) {
- $installlib = $installprivlib;
- #We're installing *.al and *.ix files into $installprivlib,
- #but we have to delete old *.al and *.ix files from the 5.000
- #distribution:
- #This might not work because $archname might have changed.
- unlink("$installarchlib/$name");
- }
- $packlist->{"$installlib/$name"} = { type => 'file' };
- if (compare($_, "$installlib/$name") || $nonono) {
- unlink("$installlib/$name");
- mkpath("$installlib/$dir", $verbose, 0777);
- # HP-UX (at least) needs to maintain execute permissions
- # on dynamically-loaded libraries.
- copy_if_diff($_, "$installlib/$name")
- and chmod($name =~ /\.(so|$dlext)$/o ? 0555 : 0444,
- "$installlib/$name");
- }
- }
-}
-
-# Copy $from to $to, only if $from is different than $to.
-# Also preserve modification times for .a libraries.
-# On some systems, if you do
-# ranlib libperl.a
-# cp libperl.a /usr/local/lib/perl5/archlib/CORE/libperl.a
-# and then try to link against the installed libperl.a, you might
-# get an error message to the effect that the symbol table is older
-# than the library.
-# Return true if copying occurred.
-
-sub copy_if_diff {
- my($from,$to)=@_;
- return 1 if (($^O eq 'VMS') && (-d $from));
- -f $from || warn "$0: $from not found";
- $packlist->{$to} = { type => 'file' };
- if (compare($from, $to) || $nonono) {
- safe_unlink($to); # In case we don't have write permissions.
- if ($nonono) {
- $from = $depth . "/" . $from if $depth;
- }
- copy($from, $to);
- # Restore timestamps if it's a .a library or for OS/2.
- if (!$nonono && ($Is_OS2 || $to =~ /\.a$/)) {
- my ($atime, $mtime) = (stat $from)[8,9];
- utime $atime, $mtime, $to;
- }
- 1;
- }
-}
-
-sub strip
-{
- my(@args) = @_;
-
- return unless $dostrip;
-
- my @opts;
- while (@args && $args[0] =~ /^(-\w+)$/) {
- push @opts, shift @args;
- }
-
- foreach my $file (@args) {
- if (-f $file) {
- print " strip $file\n" if $verbose;
- system("strip", @opts, $file);
- } else {
- print "# file '$file' skipped\n" if $verbose;
- }
- }
-}
-
diff --git a/contrib/perl5/intrpvar.h b/contrib/perl5/intrpvar.h
deleted file mode 100644
index 57f31bb..0000000
--- a/contrib/perl5/intrpvar.h
+++ /dev/null
@@ -1,475 +0,0 @@
-/***********************************************/
-/* Global only to current interpreter instance */
-/***********************************************/
-
-/* Don't forget to re-run embed.pl to propagate changes! */
-
-/* The 'I' prefix is only needed for vars that need appropriate #defines
- * generated when built with or without MULTIPLICITY. It is also used
- * to generate the appropriate export list for win32.
- *
- * When building without MULTIPLICITY, these variables will be truly global. */
-
-/* pseudo environmental stuff */
-PERLVAR(Iorigargc, int)
-PERLVAR(Iorigargv, char **)
-PERLVAR(Ienvgv, GV *)
-PERLVAR(Iincgv, GV *)
-PERLVAR(Ihintgv, GV *)
-PERLVAR(Iorigfilename, char *)
-PERLVAR(Idiehook, SV *)
-PERLVAR(Iwarnhook, SV *)
-
-/* switches */
-PERLVAR(Iminus_c, bool)
-PERLVAR(Ipatchlevel, SV *)
-PERLVAR(Ilocalpatches, char **)
-PERLVARI(Isplitstr, char *, " ")
-PERLVAR(Ipreprocess, bool)
-PERLVAR(Iminus_n, bool)
-PERLVAR(Iminus_p, bool)
-PERLVAR(Iminus_l, bool)
-PERLVAR(Iminus_a, bool)
-PERLVAR(Iminus_F, bool)
-PERLVAR(Idoswitches, bool)
-
-/*
-=for apidoc mn|bool|PL_dowarn
-
-The C variable which corresponds to Perl's $^W warning variable.
-
-=cut
-*/
-
-PERLVAR(Idowarn, U8)
-PERLVAR(Iwidesyscalls, bool) /* wide system calls */
-PERLVAR(Idoextract, bool)
-PERLVAR(Isawampersand, bool) /* must save all match strings */
-PERLVAR(Iunsafe, bool)
-PERLVAR(Iinplace, char *)
-PERLVAR(Ie_script, SV *)
-PERLVAR(Iperldb, U32)
-
-/* This value may be set when embedding for full cleanup */
-/* 0=none, 1=full, 2=full with checks */
-PERLVARI(Iperl_destruct_level, int, 0)
-
-/* magical thingies */
-PERLVAR(Ibasetime, Time_t) /* $^T */
-PERLVAR(Iformfeed, SV *) /* $^L */
-
-
-PERLVARI(Imaxsysfd, I32, MAXSYSFD)
- /* top fd to pass to subprocesses */
-PERLVAR(Imultiline, int) /* $*--do strings hold >1 line? */
-PERLVAR(Istatusvalue, I32) /* $? */
-PERLVAR(Iexit_flags, U8) /* was exit() unexpected, etc. */
-#ifdef VMS
-PERLVAR(Istatusvalue_vms,U32)
-#endif
-
-/* shortcuts to various I/O objects */
-PERLVAR(Istdingv, GV *)
-PERLVAR(Istderrgv, GV *)
-PERLVAR(Idefgv, GV *)
-PERLVAR(Iargvgv, GV *)
-PERLVAR(Iargvoutgv, GV *)
-PERLVAR(Iargvout_stack, AV *)
-
-/* shortcuts to regexp stuff */
-/* this one needs to be moved to thrdvar.h and accessed via
- * find_threadsv() when USE_THREADS */
-PERLVAR(Ireplgv, GV *)
-
-/* shortcuts to misc objects */
-PERLVAR(Ierrgv, GV *)
-
-/* shortcuts to debugging objects */
-PERLVAR(IDBgv, GV *)
-PERLVAR(IDBline, GV *)
-
-/*
-=for apidoc mn|GV *|PL_DBsub
-When Perl is run in debugging mode, with the B<-d> switch, this GV contains
-the SV which holds the name of the sub being debugged. This is the C
-variable which corresponds to Perl's $DB::sub variable. See
-C<PL_DBsingle>.
-
-=for apidoc mn|SV *|PL_DBsingle
-When Perl is run in debugging mode, with the B<-d> switch, this SV is a
-boolean which indicates whether subs are being single-stepped.
-Single-stepping is automatically turned on after every step. This is the C
-variable which corresponds to Perl's $DB::single variable. See
-C<PL_DBsub>.
-
-=for apidoc mn|SV *|PL_DBtrace
-Trace variable used when Perl is run in debugging mode, with the B<-d>
-switch. This is the C variable which corresponds to Perl's $DB::trace
-variable. See C<PL_DBsingle>.
-
-=cut
-*/
-
-PERLVAR(IDBsub, GV *)
-PERLVAR(IDBsingle, SV *)
-PERLVAR(IDBtrace, SV *)
-PERLVAR(IDBsignal, SV *)
-PERLVAR(Ilineary, AV *) /* lines of script for debugger */
-PERLVAR(Idbargs, AV *) /* args to call listed by caller function */
-
-/* symbol tables */
-PERLVAR(Idebstash, HV *) /* symbol table for perldb package */
-PERLVAR(Iglobalstash, HV *) /* global keyword overrides imported here */
-PERLVAR(Icurstname, SV *) /* name of current package */
-PERLVAR(Ibeginav, AV *) /* names of BEGIN subroutines */
-PERLVAR(Iendav, AV *) /* names of END subroutines */
-PERLVAR(Icheckav, AV *) /* names of CHECK subroutines */
-PERLVAR(Iinitav, AV *) /* names of INIT subroutines */
-PERLVAR(Istrtab, HV *) /* shared string table */
-PERLVARI(Isub_generation,U32,1) /* incr to invalidate method cache */
-
-/* memory management */
-PERLVAR(Isv_count, I32) /* how many SV* are currently allocated */
-PERLVAR(Isv_objcount, I32) /* how many objects are currently allocated */
-PERLVAR(Isv_root, SV*) /* storage for SVs belonging to interp */
-PERLVAR(Isv_arenaroot, SV*) /* list of areas for garbage collection */
-
-/* funky return mechanisms */
-PERLVAR(Iforkprocess, int) /* so do_open |- can return proc# */
-
-/* subprocess state */
-PERLVAR(Ifdpid, AV *) /* keep fd-to-pid mappings for my_popen */
-
-/* internal state */
-PERLVAR(Itainting, bool) /* doing taint checks */
-PERLVARI(Iop_mask, char *, NULL) /* masked operations for safe evals */
-
-/* current interpreter roots */
-PERLVAR(Imain_cv, CV *)
-PERLVAR(Imain_root, OP *)
-PERLVAR(Imain_start, OP *)
-PERLVAR(Ieval_root, OP *)
-PERLVAR(Ieval_start, OP *)
-
-/* runtime control stuff */
-PERLVARI(Icurcopdb, COP *, NULL)
-PERLVARI(Icopline, line_t, NOLINE)
-
-/* statics moved here for shared library purposes */
-PERLVAR(Ifilemode, int) /* so nextargv() can preserve mode */
-PERLVAR(Ilastfd, int) /* what to preserve mode on */
-PERLVAR(Ioldname, char *) /* what to preserve mode on */
-PERLVAR(IArgv, char **) /* stuff to free from do_aexec, vfork safe */
-PERLVAR(ICmd, char *) /* stuff to free from do_aexec, vfork safe */
-PERLVAR(Igensym, I32) /* next symbol for getsym() to define */
-PERLVAR(Ipreambled, bool)
-PERLVAR(Ipreambleav, AV *)
-PERLVARI(Ilaststatval, int, -1)
-PERLVARI(Ilaststype, I32, OP_STAT)
-PERLVAR(Imess_sv, SV *)
-
-/* XXX shouldn't these be per-thread? --GSAR */
-PERLVAR(Iors, char *) /* output record separator $\ */
-PERLVAR(Iorslen, STRLEN)
-PERLVAR(Iofmt, char *) /* output format for numbers $# */
-
-/* interpreter atexit processing */
-PERLVARI(Iexitlist, PerlExitListEntry *, NULL)
- /* list of exit functions */
-PERLVARI(Iexitlistlen, I32, 0) /* length of same */
-
-/*
-=for apidoc Amn|HV*|PL_modglobal
-
-C<PL_modglobal> is a general purpose, interpreter global HV for use by
-extensions that need to keep information on a per-interpreter basis.
-In a pinch, it can also be used as a symbol table for extensions
-to share data among each other. It is a good idea to use keys
-prefixed by the package name of the extension that owns the data.
-
-=cut
-*/
-
-PERLVAR(Imodglobal, HV *) /* per-interp module data */
-
-/* these used to be in global before 5.004_68 */
-PERLVARI(Iprofiledata, U32 *, NULL) /* table of ops, counts */
-PERLVARI(Irsfp, PerlIO * VOL, Nullfp) /* current source file pointer */
-PERLVARI(Irsfp_filters, AV *, Nullav) /* keeps active source filters */
-
-PERLVAR(Icompiling, COP) /* compiling/done executing marker */
-
-PERLVAR(Icompcv, CV *) /* currently compiling subroutine */
-PERLVAR(Icomppad, AV *) /* storage for lexically scoped temporaries */
-PERLVAR(Icomppad_name, AV *) /* variable names for "my" variables */
-PERLVAR(Icomppad_name_fill, I32) /* last "introduced" variable offset */
-PERLVAR(Icomppad_name_floor, I32) /* start of vars in innermost block */
-
-#ifdef HAVE_INTERP_INTERN
-PERLVAR(Isys_intern, struct interp_intern)
- /* platform internals */
-#endif
-
-/* more statics moved here */
-PERLVARI(Igeneration, int, 100) /* from op.c */
-PERLVAR(IDBcv, CV *) /* from perl.c */
-
-PERLVARI(Iin_clean_objs,bool, FALSE) /* from sv.c */
-PERLVARI(Iin_clean_all, bool, FALSE) /* from sv.c */
-
-PERLVAR(Ilinestart, char *) /* beg. of most recently read line */
-PERLVAR(Ipending_ident, char) /* pending identifier lookup */
-PERLVAR(Isublex_info, SUBLEXINFO) /* from toke.c */
-
-#ifdef USE_THREADS
-PERLVAR(Ithrsv, SV *) /* struct perl_thread for main thread */
-PERLVARI(Ithreadnum, U32, 0) /* incremented each thread creation */
-PERLVAR(Istrtab_mutex, perl_mutex) /* Mutex for string table access */
-#endif /* USE_THREADS */
-
-PERLVAR(Iuid, Uid_t) /* current real user id */
-PERLVAR(Ieuid, Uid_t) /* current effective user id */
-PERLVAR(Igid, Gid_t) /* current real group id */
-PERLVAR(Iegid, Gid_t) /* current effective group id */
-PERLVAR(Inomemok, bool) /* let malloc context handle nomem */
-PERLVAR(Ian, U32) /* malloc sequence number */
-PERLVAR(Icop_seqmax, U32) /* statement sequence number */
-PERLVAR(Iop_seqmax, U16) /* op sequence number */
-PERLVAR(Ievalseq, U32) /* eval sequence number */
-PERLVAR(Iorigenviron, char **)
-PERLVAR(Iorigalen, U32)
-PERLVAR(Ipidstatus, HV *) /* pid-to-status mappings for waitpid */
-PERLVARI(Imaxo, int, MAXO) /* maximum number of ops */
-PERLVAR(Iosname, char *) /* operating system */
-PERLVARI(Ish_path, char *, SH_PATH)/* full path of shell */
-PERLVAR(Isighandlerp, Sighandler_t)
-
-PERLVAR(Ixiv_arenaroot, XPV*) /* list of allocated xiv areas */
-PERLVAR(Ixiv_root, IV *) /* free xiv list */
-PERLVAR(Ixnv_root, NV *) /* free xnv list */
-PERLVAR(Ixrv_root, XRV *) /* free xrv list */
-PERLVAR(Ixpv_root, XPV *) /* free xpv list */
-PERLVAR(Ixpviv_root, XPVIV *) /* free xpviv list */
-PERLVAR(Ixpvnv_root, XPVNV *) /* free xpvnv list */
-PERLVAR(Ixpvcv_root, XPVCV *) /* free xpvcv list */
-PERLVAR(Ixpvav_root, XPVAV *) /* free xpvav list */
-PERLVAR(Ixpvhv_root, XPVHV *) /* free xpvhv list */
-PERLVAR(Ixpvmg_root, XPVMG *) /* free xpvmg list */
-PERLVAR(Ixpvlv_root, XPVLV *) /* free xpvlv list */
-PERLVAR(Ixpvbm_root, XPVBM *) /* free xpvbm list */
-PERLVAR(Ihe_root, HE *) /* free he list */
-PERLVAR(Inice_chunk, char *) /* a nice chunk of memory to reuse */
-PERLVAR(Inice_chunk_size, U32) /* how nice the chunk of memory is */
-
-PERLVARI(Irunops, runops_proc_t, MEMBER_TO_FPTR(RUNOPS_DEFAULT))
-
-PERLVARA(Itokenbuf,256, char)
-
-/*
-=for apidoc Amn|SV|PL_sv_undef
-This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
-
-=for apidoc Amn|SV|PL_sv_no
-This is the C<false> SV. See C<PL_sv_yes>. Always refer to this as
-C<&PL_sv_no>.
-
-=for apidoc Amn|SV|PL_sv_yes
-This is the C<true> SV. See C<PL_sv_no>. Always refer to this as
-C<&PL_sv_yes>.
-
-=cut
-*/
-
-PERLVAR(Isv_undef, SV)
-PERLVAR(Isv_no, SV)
-PERLVAR(Isv_yes, SV)
-
-#ifdef CSH
-PERLVARI(Icshname, char *, CSH)
-PERLVAR(Icshlen, I32)
-#endif
-
-PERLVAR(Ilex_state, U32) /* next token is determined */
-PERLVAR(Ilex_defer, U32) /* state after determined token */
-PERLVAR(Ilex_expect, int) /* expect after determined token */
-PERLVAR(Ilex_brackets, I32) /* bracket count */
-PERLVAR(Ilex_formbrack, I32) /* bracket count at outer format level */
-PERLVAR(Ilex_casemods, I32) /* casemod count */
-PERLVAR(Ilex_dojoin, I32) /* doing an array interpolation */
-PERLVAR(Ilex_starts, I32) /* how many interps done on level */
-PERLVAR(Ilex_stuff, SV *) /* runtime pattern from m// or s/// */
-PERLVAR(Ilex_repl, SV *) /* runtime replacement from s/// */
-PERLVAR(Ilex_op, OP *) /* extra info to pass back on op */
-PERLVAR(Ilex_inpat, OP *) /* in pattern $) and $| are special */
-PERLVAR(Ilex_inwhat, I32) /* what kind of quoting are we in */
-PERLVAR(Ilex_brackstack,char *) /* what kind of brackets to pop */
-PERLVAR(Ilex_casestack, char *) /* what kind of case mods in effect */
-
-/* What we know when we're in LEX_KNOWNEXT state. */
-PERLVARA(Inextval,5, YYSTYPE) /* value of next token, if any */
-PERLVARA(Inexttype,5, I32) /* type of next token */
-PERLVAR(Inexttoke, I32)
-
-PERLVAR(Ilinestr, SV *)
-PERLVAR(Ibufptr, char *)
-PERLVAR(Ioldbufptr, char *)
-PERLVAR(Ioldoldbufptr, char *)
-PERLVAR(Ibufend, char *)
-PERLVARI(Iexpect,int, XSTATE) /* how to interpret ambiguous tokens */
-
-PERLVAR(Imulti_start, I32) /* 1st line of multi-line string */
-PERLVAR(Imulti_end, I32) /* last line of multi-line string */
-PERLVAR(Imulti_open, I32) /* delimiter of said string */
-PERLVAR(Imulti_close, I32) /* delimiter of said string */
-
-PERLVAR(Ierror_count, I32) /* how many errors so far, max 10 */
-PERLVAR(Isubline, I32) /* line this subroutine began on */
-PERLVAR(Isubname, SV *) /* name of current subroutine */
-
-PERLVAR(Imin_intro_pending, I32) /* start of vars to introduce */
-PERLVAR(Imax_intro_pending, I32) /* end of vars to introduce */
-PERLVAR(Ipadix, I32) /* max used index in current "register" pad */
-PERLVAR(Ipadix_floor, I32) /* how low may inner block reset padix */
-PERLVAR(Ipad_reset_pending, I32) /* reset pad on next attempted alloc */
-
-PERLVAR(Ilast_uni, char *) /* position of last named-unary op */
-PERLVAR(Ilast_lop, char *) /* position of last list operator */
-PERLVAR(Ilast_lop_op, OPCODE) /* last list operator */
-PERLVAR(Iin_my, I32) /* we're compiling a "my" (or "our") declaration */
-PERLVAR(Iin_my_stash, HV *) /* declared class of this "my" declaration */
-#ifdef FCRYPT
-PERLVAR(Icryptseen, bool) /* has fast crypt() been initialized? */
-#endif
-
-PERLVAR(Ihints, U32) /* pragma-tic compile-time flags */
-
-PERLVAR(Idebug, VOL U32) /* flags given to -D switch */
-
-PERLVAR(Iamagic_generation, long)
-
-#ifdef USE_LOCALE_COLLATE
-PERLVAR(Icollation_ix, U32) /* Collation generation index */
-PERLVAR(Icollation_name,char *) /* Name of current collation */
-PERLVARI(Icollation_standard, bool, TRUE)
- /* Assume simple collation */
-PERLVAR(Icollxfrm_base, Size_t) /* Basic overhead in *xfrm() */
-PERLVARI(Icollxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */
-#endif /* USE_LOCALE_COLLATE */
-
-#ifdef USE_LOCALE_NUMERIC
-
-PERLVAR(Inumeric_name, char *) /* Name of current numeric locale */
-PERLVARI(Inumeric_standard, bool, TRUE)
- /* Assume simple numerics */
-PERLVARI(Inumeric_local, bool, TRUE)
- /* Assume local numerics */
-PERLVAR(Idummy1_bincompat, char)
- /* Used to be numeric_radix */
-
-#endif /* !USE_LOCALE_NUMERIC */
-
-/* utf8 character classes */
-PERLVAR(Iutf8_alnum, SV *)
-PERLVAR(Iutf8_alnumc, SV *)
-PERLVAR(Iutf8_ascii, SV *)
-PERLVAR(Iutf8_alpha, SV *)
-PERLVAR(Iutf8_space, SV *)
-PERLVAR(Iutf8_cntrl, SV *)
-PERLVAR(Iutf8_graph, SV *)
-PERLVAR(Iutf8_digit, SV *)
-PERLVAR(Iutf8_upper, SV *)
-PERLVAR(Iutf8_lower, SV *)
-PERLVAR(Iutf8_print, SV *)
-PERLVAR(Iutf8_punct, SV *)
-PERLVAR(Iutf8_xdigit, SV *)
-PERLVAR(Iutf8_mark, SV *)
-PERLVAR(Iutf8_toupper, SV *)
-PERLVAR(Iutf8_totitle, SV *)
-PERLVAR(Iutf8_tolower, SV *)
-PERLVAR(Ilast_swash_hv, HV *)
-PERLVAR(Ilast_swash_klen, U32)
-PERLVARA(Ilast_swash_key,10, U8)
-PERLVAR(Ilast_swash_tmps, U8 *)
-PERLVAR(Ilast_swash_slen, STRLEN)
-
-/* perly.c globals */
-PERLVAR(Iyydebug, int)
-PERLVAR(Iyynerrs, int)
-PERLVAR(Iyyerrflag, int)
-PERLVAR(Iyychar, int)
-PERLVAR(Iyyval, YYSTYPE)
-PERLVAR(Iyylval, YYSTYPE)
-
-PERLVAR(Iglob_index, int)
-PERLVAR(Isrand_called, bool)
-PERLVARA(Iuudmap,256, char)
-PERLVAR(Ibitcount, char *)
-
-#ifdef USE_THREADS
-PERLVAR(Isv_mutex, perl_mutex) /* Mutex for allocating SVs in sv.c */
-PERLVAR(Ieval_mutex, perl_mutex) /* Mutex for doeval */
-PERLVAR(Ieval_cond, perl_cond) /* Condition variable for doeval */
-PERLVAR(Ieval_owner, struct perl_thread *)
- /* Owner thread for doeval */
-PERLVAR(Inthreads, int) /* Number of threads currently */
-PERLVAR(Ithreads_mutex, perl_mutex) /* Mutex for nthreads and thread list */
-PERLVAR(Inthreads_cond, perl_cond) /* Condition variable for nthreads */
-PERLVAR(Isvref_mutex, perl_mutex) /* Mutex for SvREFCNT_{inc,dec} */
-PERLVARI(Ithreadsv_names,char *, THREADSV_NAMES)
-#ifdef FAKE_THREADS
-PERLVAR(Icurthr, struct perl_thread *)
- /* Currently executing (fake) thread */
-#endif
-
-PERLVAR(Icred_mutex, perl_mutex) /* altered credentials in effect */
-
-#endif /* USE_THREADS */
-
-PERLVAR(Ipsig_ptr, SV**)
-PERLVAR(Ipsig_name, SV**)
-
-#if defined(PERL_IMPLICIT_SYS)
-PERLVAR(IMem, struct IPerlMem*)
-PERLVAR(IMemShared, struct IPerlMem*)
-PERLVAR(IMemParse, struct IPerlMem*)
-PERLVAR(IEnv, struct IPerlEnv*)
-PERLVAR(IStdIO, struct IPerlStdIO*)
-PERLVAR(ILIO, struct IPerlLIO*)
-PERLVAR(IDir, struct IPerlDir*)
-PERLVAR(ISock, struct IPerlSock*)
-PERLVAR(IProc, struct IPerlProc*)
-#endif
-
-#if defined(USE_ITHREADS)
-PERLVAR(Iptr_table, PTR_TBL_t*)
-#endif
-PERLVARI(Ibeginav_save, AV*, Nullav) /* save BEGIN{}s when compiling */
-
-#ifdef USE_THREADS
-PERLVAR(Ifdpid_mutex, perl_mutex) /* mutex for fdpid array */
-PERLVAR(Isv_lock_mutex, perl_mutex) /* mutex for SvLOCK macro */
-#endif
-
-PERLVAR(Inullstash, HV *) /* illegal symbols end up here */
-
-PERLVAR(Ixnv_arenaroot, XPV*) /* list of allocated xnv areas */
-PERLVAR(Ixrv_arenaroot, XPV*) /* list of allocated xrv areas */
-PERLVAR(Ixpv_arenaroot, XPV*) /* list of allocated xpv areas */
-PERLVAR(Ixpviv_arenaroot,XPVIV*) /* list of allocated xpviv areas */
-PERLVAR(Ixpvnv_arenaroot,XPVNV*) /* list of allocated xpvnv areas */
-PERLVAR(Ixpvcv_arenaroot,XPVCV*) /* list of allocated xpvcv areas */
-PERLVAR(Ixpvav_arenaroot,XPVAV*) /* list of allocated xpvav areas */
-PERLVAR(Ixpvhv_arenaroot,XPVHV*) /* list of allocated xpvhv areas */
-PERLVAR(Ixpvmg_arenaroot,XPVMG*) /* list of allocated xpvmg areas */
-PERLVAR(Ixpvlv_arenaroot,XPVLV*) /* list of allocated xpvlv areas */
-PERLVAR(Ixpvbm_arenaroot,XPVBM*) /* list of allocated xpvbm areas */
-PERLVAR(Ihe_arenaroot, XPV*) /* list of allocated he areas */
-
-#ifdef USE_LOCALE_NUMERIC
-
-PERLVAR(Inumeric_radix_sv, SV *) /* The radix separator if not '.' */
-#endif
-
-/* New variables must be added to the very end for binary compatibility.
- * XSUB.h provides wrapper functions via perlapi.h that make this
- * irrelevant, but not all code may be expected to #include XSUB.h. */
diff --git a/contrib/perl5/iperlsys.h b/contrib/perl5/iperlsys.h
deleted file mode 100644
index 2f08a24..0000000
--- a/contrib/perl5/iperlsys.h
+++ /dev/null
@@ -1,1499 +0,0 @@
-/*
- * iperlsys.h - Perl's interface to the system
- *
- * This file defines the system level functionality that perl needs.
- *
- * When using C, this definition is in the form of a set of macros
- * that can be #defined to the system-level function (or a wrapper
- * provided elsewhere).
- *
- * When using C++ with -DPERL_OBJECT, this definition is in the
- * form of a set of virtual base classes which must be subclassed to
- * provide a real implementation. The Perl Object will use instances
- * of this implementation to use the system-level functionality.
- *
- * GSAR 21-JUN-98
- */
-
-#ifndef __Inc__IPerl___
-#define __Inc__IPerl___
-
-/*
- * PerlXXX_YYY explained - DickH and DougL @ ActiveState.com
- *
- * XXX := functional group
- * YYY := stdlib/OS function name
- *
- * Continuing with the theme of PerlIO, all OS functionality was
- * encapsulated into one of several interfaces.
- *
- * PerlIO - stdio
- * PerlLIO - low level I/O
- * PerlMem - malloc, realloc, free
- * PerlDir - directory related
- * PerlEnv - process environment handling
- * PerlProc - process control
- * PerlSock - socket functions
- *
- *
- * The features of this are:
- * 1. All OS dependant code is in the Perl Host and not the Perl Core.
- * (At least this is the holy grail goal of this work)
- * 2. The Perl Host (see perl.h for description) can provide a new and
- * improved interface to OS functionality if required.
- * 3. Developers can easily hook into the OS calls for instrumentation
- * or diagnostic purposes.
- *
- * What was changed to do this:
- * 1. All calls to OS functions were replaced with PerlXXX_YYY
- *
- */
-
-
-/*
- Interface for perl stdio functions
-*/
-
-
-/* Clean up (or at least document) the various possible #defines.
- This section attempts to match the 5.003_03 Configure variables
- onto the 5.003_02 header file values.
- I can't figure out where USE_STDIO was supposed to be set.
- --AD
-*/
-#ifndef USE_PERLIO
-# define PERLIO_IS_STDIO
-#endif
-
-/* Below is the 5.003_02 stuff. */
-#ifdef USE_STDIO
-# ifndef PERLIO_IS_STDIO
-# define PERLIO_IS_STDIO
-# endif
-#else
-extern void PerlIO_init (void);
-#endif
-
-#ifndef Sighandler_t
-typedef Signal_t (*Sighandler_t) (int);
-#endif
-
-#if defined(PERL_IMPLICIT_SYS)
-
-#ifndef PerlIO
-typedef struct _PerlIO PerlIO;
-#endif
-
-/* IPerlStdIO */
-struct IPerlStdIO;
-struct IPerlStdIOInfo;
-typedef PerlIO* (*LPStdin)(struct IPerlStdIO*);
-typedef PerlIO* (*LPStdout)(struct IPerlStdIO*);
-typedef PerlIO* (*LPStderr)(struct IPerlStdIO*);
-typedef PerlIO* (*LPOpen)(struct IPerlStdIO*, const char*,
- const char*);
-typedef int (*LPClose)(struct IPerlStdIO*, PerlIO*);
-typedef int (*LPEof)(struct IPerlStdIO*, PerlIO*);
-typedef int (*LPError)(struct IPerlStdIO*, PerlIO*);
-typedef void (*LPClearerr)(struct IPerlStdIO*, PerlIO*);
-typedef int (*LPGetc)(struct IPerlStdIO*, PerlIO*);
-typedef char* (*LPGetBase)(struct IPerlStdIO*, PerlIO*);
-typedef int (*LPGetBufsiz)(struct IPerlStdIO*, PerlIO*);
-typedef int (*LPGetCnt)(struct IPerlStdIO*, PerlIO*);
-typedef char* (*LPGetPtr)(struct IPerlStdIO*, PerlIO*);
-typedef char* (*LPGets)(struct IPerlStdIO*, PerlIO*, char*, int);
-typedef int (*LPPutc)(struct IPerlStdIO*, PerlIO*, int);
-typedef int (*LPPuts)(struct IPerlStdIO*, PerlIO*, const char*);
-typedef int (*LPFlush)(struct IPerlStdIO*, PerlIO*);
-typedef int (*LPUngetc)(struct IPerlStdIO*, PerlIO*,int);
-typedef int (*LPFileno)(struct IPerlStdIO*, PerlIO*);
-typedef PerlIO* (*LPFdopen)(struct IPerlStdIO*, int, const char*);
-typedef PerlIO* (*LPReopen)(struct IPerlStdIO*, const char*,
- const char*, PerlIO*);
-typedef SSize_t (*LPRead)(struct IPerlStdIO*, PerlIO*, void*, Size_t);
-typedef SSize_t (*LPWrite)(struct IPerlStdIO*, PerlIO*, const void*,
- Size_t);
-typedef void (*LPSetBuf)(struct IPerlStdIO*, PerlIO*, char*);
-typedef int (*LPSetVBuf)(struct IPerlStdIO*, PerlIO*, char*, int,
- Size_t);
-typedef void (*LPSetCnt)(struct IPerlStdIO*, PerlIO*, int);
-typedef void (*LPSetPtrCnt)(struct IPerlStdIO*, PerlIO*, char*,
- int);
-typedef void (*LPSetlinebuf)(struct IPerlStdIO*, PerlIO*);
-typedef int (*LPPrintf)(struct IPerlStdIO*, PerlIO*, const char*,
- ...);
-typedef int (*LPVprintf)(struct IPerlStdIO*, PerlIO*, const char*,
- va_list);
-typedef long (*LPTell)(struct IPerlStdIO*, PerlIO*);
-typedef int (*LPSeek)(struct IPerlStdIO*, PerlIO*, Off_t, int);
-typedef void (*LPRewind)(struct IPerlStdIO*, PerlIO*);
-typedef PerlIO* (*LPTmpfile)(struct IPerlStdIO*);
-typedef int (*LPGetpos)(struct IPerlStdIO*, PerlIO*, Fpos_t*);
-typedef int (*LPSetpos)(struct IPerlStdIO*, PerlIO*,
- const Fpos_t*);
-typedef void (*LPInit)(struct IPerlStdIO*);
-typedef void (*LPInitOSExtras)(struct IPerlStdIO*);
-typedef PerlIO* (*LPFdupopen)(struct IPerlStdIO*, PerlIO*);
-
-struct IPerlStdIO
-{
- LPStdin pStdin;
- LPStdout pStdout;
- LPStderr pStderr;
- LPOpen pOpen;
- LPClose pClose;
- LPEof pEof;
- LPError pError;
- LPClearerr pClearerr;
- LPGetc pGetc;
- LPGetBase pGetBase;
- LPGetBufsiz pGetBufsiz;
- LPGetCnt pGetCnt;
- LPGetPtr pGetPtr;
- LPGets pGets;
- LPPutc pPutc;
- LPPuts pPuts;
- LPFlush pFlush;
- LPUngetc pUngetc;
- LPFileno pFileno;
- LPFdopen pFdopen;
- LPReopen pReopen;
- LPRead pRead;
- LPWrite pWrite;
- LPSetBuf pSetBuf;
- LPSetVBuf pSetVBuf;
- LPSetCnt pSetCnt;
- LPSetPtrCnt pSetPtrCnt;
- LPSetlinebuf pSetlinebuf;
- LPPrintf pPrintf;
- LPVprintf pVprintf;
- LPTell pTell;
- LPSeek pSeek;
- LPRewind pRewind;
- LPTmpfile pTmpfile;
- LPGetpos pGetpos;
- LPSetpos pSetpos;
- LPInit pInit;
- LPInitOSExtras pInitOSExtras;
- LPFdupopen pFdupopen;
-};
-
-struct IPerlStdIOInfo
-{
- unsigned long nCount; /* number of entries expected */
- struct IPerlStdIO perlStdIOList;
-};
-
-#ifdef USE_STDIO_PTR
-# define PerlIO_has_cntptr(f) 1
-# ifdef STDIO_PTR_LVALUE
-# ifdef STDIO_CNT_LVALUE
-# define PerlIO_canset_cnt(f) 1
-# ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
-# define PerlIO_fast_gets(f) 1
-# endif
-# else /* STDIO_CNT_LVALUE */
-# define PerlIO_canset_cnt(f) 0
-# endif
-# else /* STDIO_PTR_LVALUE */
-# ifdef STDIO_PTR_LVAL_SETS_CNT
-# define PerlIO_fast_gets(f) 1
-# endif
-# endif
-#else /* USE_STDIO_PTR */
-# define PerlIO_has_cntptr(f) 0
-# define PerlIO_canset_cnt(f) 0
-#endif /* USE_STDIO_PTR */
-
-#ifndef PerlIO_fast_gets
-#define PerlIO_fast_gets(f) 0
-#endif
-
-#ifdef FILE_base
-#define PerlIO_has_base(f) 1
-#else
-#define PerlIO_has_base(f) 0
-#endif
-
-#define PerlIO_stdin() \
- (*PL_StdIO->pStdin)(PL_StdIO)
-#define PerlIO_stdout() \
- (*PL_StdIO->pStdout)(PL_StdIO)
-#define PerlIO_stderr() \
- (*PL_StdIO->pStderr)(PL_StdIO)
-#define PerlIO_open(x,y) \
- (*PL_StdIO->pOpen)(PL_StdIO, (x),(y))
-#define PerlIO_close(f) \
- (*PL_StdIO->pClose)(PL_StdIO, (f))
-#define PerlIO_eof(f) \
- (*PL_StdIO->pEof)(PL_StdIO, (f))
-#define PerlIO_error(f) \
- (*PL_StdIO->pError)(PL_StdIO, (f))
-#define PerlIO_clearerr(f) \
- (*PL_StdIO->pClearerr)(PL_StdIO, (f))
-#define PerlIO_getc(f) \
- (*PL_StdIO->pGetc)(PL_StdIO, (f))
-#define PerlIO_get_base(f) \
- (*PL_StdIO->pGetBase)(PL_StdIO, (f))
-#define PerlIO_get_bufsiz(f) \
- (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f))
-#define PerlIO_get_cnt(f) \
- (*PL_StdIO->pGetCnt)(PL_StdIO, (f))
-#define PerlIO_get_ptr(f) \
- (*PL_StdIO->pGetPtr)(PL_StdIO, (f))
-#define PerlIO_putc(f,c) \
- (*PL_StdIO->pPutc)(PL_StdIO, (f),(c))
-#define PerlIO_puts(f,s) \
- (*PL_StdIO->pPuts)(PL_StdIO, (f),(s))
-#define PerlIO_flush(f) \
- (*PL_StdIO->pFlush)(PL_StdIO, (f))
-#define PerlIO_gets(s, n, fp) \
- (*PL_StdIO->pGets)(PL_StdIO, (fp), s, n)
-#define PerlIO_ungetc(f,c) \
- (*PL_StdIO->pUngetc)(PL_StdIO, (f),(c))
-#define PerlIO_fileno(f) \
- (*PL_StdIO->pFileno)(PL_StdIO, (f))
-#define PerlIO_fdopen(f, s) \
- (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s))
-#define PerlIO_reopen(p, m, f) \
- (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f))
-#define PerlIO_read(f,buf,count) \
- (SSize_t)(*PL_StdIO->pRead)(PL_StdIO, (f), (buf), (count))
-#define PerlIO_write(f,buf,count) \
- (*PL_StdIO->pWrite)(PL_StdIO, (f), (buf), (count))
-#define PerlIO_setbuf(f,b) \
- (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b))
-#define PerlIO_setvbuf(f,b,t,s) \
- (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s))
-#define PerlIO_set_cnt(f,c) \
- (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c))
-#define PerlIO_set_ptrcnt(f,p,c) \
- (*PL_StdIO->pSetPtrCnt)(PL_StdIO, (f), (p), (c))
-#define PerlIO_setlinebuf(f) \
- (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
-#define PerlIO_printf Perl_fprintf_nocontext
-#define PerlIO_stdoutf Perl_printf_nocontext
-#define PerlIO_vprintf(f,fmt,a) \
- (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)
-#define PerlIO_tell(f) \
- (*PL_StdIO->pTell)(PL_StdIO, (f))
-#define PerlIO_seek(f,o,w) \
- (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w))
-#define PerlIO_getpos(f,p) \
- (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p))
-#define PerlIO_setpos(f,p) \
- (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p))
-#define PerlIO_rewind(f) \
- (*PL_StdIO->pRewind)(PL_StdIO, (f))
-#define PerlIO_tmpfile() \
- (*PL_StdIO->pTmpfile)(PL_StdIO)
-#define PerlIO_init() \
- (*PL_StdIO->pInit)(PL_StdIO)
-#undef init_os_extras
-#define init_os_extras() \
- (*PL_StdIO->pInitOSExtras)(PL_StdIO)
-#define PerlIO_fdupopen(f) \
- (*PL_StdIO->pFdupopen)(PL_StdIO, (f))
-
-#else /* PERL_IMPLICIT_SYS */
-
-#include "perlsdio.h"
-#include "perl.h"
-#define PerlIO_fdupopen(f) (f)
-
-#endif /* PERL_IMPLICIT_SYS */
-
-#ifndef PERLIO_IS_STDIO
-#ifdef USE_SFIO
-#include "perlsfio.h"
-#endif /* USE_SFIO */
-#endif /* PERLIO_IS_STDIO */
-
-#ifndef EOF
-#define EOF (-1)
-#endif
-
-/* This is to catch case with no stdio */
-#ifndef BUFSIZ
-#define BUFSIZ 1024
-#endif
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif
-
-#ifndef SEEK_CUR
-#define SEEK_CUR 1
-#endif
-
-#ifndef SEEK_END
-#define SEEK_END 2
-#endif
-
-#ifndef PerlIO
-struct _PerlIO;
-#define PerlIO struct _PerlIO
-#endif /* No PerlIO */
-
-#ifndef Fpos_t
-#define Fpos_t long
-#endif
-
-#ifndef NEXT30_NO_ATTRIBUTE
-#ifndef HASATTRIBUTE /* disable GNU-cc attribute checking? */
-#ifdef __attribute__ /* Avoid possible redefinition errors */
-#undef __attribute__
-#endif
-#define __attribute__(attr)
-#endif
-#endif
-
-#ifndef PerlIO_stdoutf
-extern int PerlIO_stdoutf (const char *,...)
- __attribute__((__format__ (__printf__, 1, 2)));
-#endif
-#ifndef PerlIO_puts
-extern int PerlIO_puts (PerlIO *,const char *);
-#endif
-#ifndef PerlIO_open
-extern PerlIO * PerlIO_open (const char *,const char *);
-#endif
-#ifndef PerlIO_close
-extern int PerlIO_close (PerlIO *);
-#endif
-#ifndef PerlIO_eof
-extern int PerlIO_eof (PerlIO *);
-#endif
-#ifndef PerlIO_error
-extern int PerlIO_error (PerlIO *);
-#endif
-#ifndef PerlIO_clearerr
-extern void PerlIO_clearerr (PerlIO *);
-#endif
-#ifndef PerlIO_getc
-extern int PerlIO_getc (PerlIO *);
-#endif
-#ifndef PerlIO_putc
-extern int PerlIO_putc (PerlIO *,int);
-#endif
-#ifndef PerlIO_flush
-extern int PerlIO_flush (PerlIO *);
-#endif
-#ifndef PerlIO_ungetc
-extern int PerlIO_ungetc (PerlIO *,int);
-#endif
-#ifndef PerlIO_fileno
-extern int PerlIO_fileno (PerlIO *);
-#endif
-#ifndef PerlIO_fdopen
-extern PerlIO * PerlIO_fdopen (int, const char *);
-#endif
-#ifndef PerlIO_importFILE
-extern PerlIO * PerlIO_importFILE (FILE *,int);
-#endif
-#ifndef PerlIO_exportFILE
-extern FILE * PerlIO_exportFILE (PerlIO *,int);
-#endif
-#ifndef PerlIO_findFILE
-extern FILE * PerlIO_findFILE (PerlIO *);
-#endif
-#ifndef PerlIO_releaseFILE
-extern void PerlIO_releaseFILE (PerlIO *,FILE *);
-#endif
-#ifndef PerlIO_read
-extern SSize_t PerlIO_read (PerlIO *,void *,Size_t);
-#endif
-#ifndef PerlIO_write
-extern SSize_t PerlIO_write (PerlIO *,const void *,Size_t);
-#endif
-#ifndef PerlIO_setlinebuf
-extern void PerlIO_setlinebuf (PerlIO *);
-#endif
-#ifndef PerlIO_printf
-extern int PerlIO_printf (PerlIO *, const char *,...)
- __attribute__((__format__ (__printf__, 2, 3)));
-#endif
-#ifndef PerlIO_sprintf
-extern int PerlIO_sprintf (char *, int, const char *,...)
- __attribute__((__format__ (__printf__, 3, 4)));
-#endif
-#ifndef PerlIO_vprintf
-extern int PerlIO_vprintf (PerlIO *, const char *, va_list);
-#endif
-#ifndef PerlIO_tell
-extern Off_t PerlIO_tell (PerlIO *);
-#endif
-#ifndef PerlIO_seek
-extern int PerlIO_seek (PerlIO *, Off_t, int);
-#endif
-#ifndef PerlIO_rewind
-extern void PerlIO_rewind (PerlIO *);
-#endif
-#ifndef PerlIO_has_base
-extern int PerlIO_has_base (PerlIO *);
-#endif
-#ifndef PerlIO_has_cntptr
-extern int PerlIO_has_cntptr (PerlIO *);
-#endif
-#ifndef PerlIO_fast_gets
-extern int PerlIO_fast_gets (PerlIO *);
-#endif
-#ifndef PerlIO_canset_cnt
-extern int PerlIO_canset_cnt (PerlIO *);
-#endif
-#ifndef PerlIO_get_ptr
-extern STDCHAR * PerlIO_get_ptr (PerlIO *);
-#endif
-#ifndef PerlIO_get_cnt
-extern int PerlIO_get_cnt (PerlIO *);
-#endif
-#ifndef PerlIO_set_cnt
-extern void PerlIO_set_cnt (PerlIO *,int);
-#endif
-#ifndef PerlIO_set_ptrcnt
-extern void PerlIO_set_ptrcnt (PerlIO *,STDCHAR *,int);
-#endif
-#ifndef PerlIO_get_base
-extern STDCHAR * PerlIO_get_base (PerlIO *);
-#endif
-#ifndef PerlIO_get_bufsiz
-extern int PerlIO_get_bufsiz (PerlIO *);
-#endif
-#ifndef PerlIO_tmpfile
-extern PerlIO * PerlIO_tmpfile (void);
-#endif
-#ifndef PerlIO_stdin
-extern PerlIO * PerlIO_stdin (void);
-#endif
-#ifndef PerlIO_stdout
-extern PerlIO * PerlIO_stdout (void);
-#endif
-#ifndef PerlIO_stderr
-extern PerlIO * PerlIO_stderr (void);
-#endif
-#ifndef PerlIO_getpos
-#ifdef USE_SFIO
-extern int PerlIO_getpos (PerlIO *,Off_t *);
-#else
-extern int PerlIO_getpos (PerlIO *,Fpos_t *);
-#endif
-#endif
-#ifndef PerlIO_setpos
-#ifdef USE_SFIO
-extern int PerlIO_setpos (PerlIO *,const Off_t *);
-#else
-extern int PerlIO_setpos (PerlIO *,const Fpos_t *);
-#endif
-#endif
-#ifndef PerlIO_fdupopen
-extern PerlIO * PerlIO_fdupopen (PerlIO *);
-#endif
-
-
-/*
- * Interface for directory functions
- */
-
-#if defined(PERL_IMPLICIT_SYS)
-
-/* IPerlDir */
-struct IPerlDir;
-struct IPerlDirInfo;
-typedef int (*LPMakedir)(struct IPerlDir*, const char*, int);
-typedef int (*LPChdir)(struct IPerlDir*, const char*);
-typedef int (*LPRmdir)(struct IPerlDir*, const char*);
-typedef int (*LPDirClose)(struct IPerlDir*, DIR*);
-typedef DIR* (*LPDirOpen)(struct IPerlDir*, char*);
-typedef struct direct* (*LPDirRead)(struct IPerlDir*, DIR*);
-typedef void (*LPDirRewind)(struct IPerlDir*, DIR*);
-typedef void (*LPDirSeek)(struct IPerlDir*, DIR*, long);
-typedef long (*LPDirTell)(struct IPerlDir*, DIR*);
-#ifdef WIN32
-typedef char* (*LPDirMapPathA)(struct IPerlDir*, const char*);
-typedef WCHAR* (*LPDirMapPathW)(struct IPerlDir*, const WCHAR*);
-#endif
-
-struct IPerlDir
-{
- LPMakedir pMakedir;
- LPChdir pChdir;
- LPRmdir pRmdir;
- LPDirClose pClose;
- LPDirOpen pOpen;
- LPDirRead pRead;
- LPDirRewind pRewind;
- LPDirSeek pSeek;
- LPDirTell pTell;
-#ifdef WIN32
- LPDirMapPathA pMapPathA;
- LPDirMapPathW pMapPathW;
-#endif
-};
-
-struct IPerlDirInfo
-{
- unsigned long nCount; /* number of entries expected */
- struct IPerlDir perlDirList;
-};
-
-#define PerlDir_mkdir(name, mode) \
- (*PL_Dir->pMakedir)(PL_Dir, (name), (mode))
-#define PerlDir_chdir(name) \
- (*PL_Dir->pChdir)(PL_Dir, (name))
-#define PerlDir_rmdir(name) \
- (*PL_Dir->pRmdir)(PL_Dir, (name))
-#define PerlDir_close(dir) \
- (*PL_Dir->pClose)(PL_Dir, (dir))
-#define PerlDir_open(name) \
- (*PL_Dir->pOpen)(PL_Dir, (name))
-#define PerlDir_read(dir) \
- (*PL_Dir->pRead)(PL_Dir, (dir))
-#define PerlDir_rewind(dir) \
- (*PL_Dir->pRewind)(PL_Dir, (dir))
-#define PerlDir_seek(dir, loc) \
- (*PL_Dir->pSeek)(PL_Dir, (dir), (loc))
-#define PerlDir_tell(dir) \
- (*PL_Dir->pTell)(PL_Dir, (dir))
-#ifdef WIN32
-#define PerlDir_mapA(dir) \
- (*PL_Dir->pMapPathA)(PL_Dir, (dir))
-#define PerlDir_mapW(dir) \
- (*PL_Dir->pMapPathW)(PL_Dir, (dir))
-#endif
-
-#else /* PERL_IMPLICIT_SYS */
-
-#define PerlDir_mkdir(name, mode) Mkdir((name), (mode))
-#ifdef VMS
-# define PerlDir_chdir(n) Chdir(((n) && *(n)) ? (n) : "SYS$LOGIN")
-#else
-# define PerlDir_chdir(name) chdir((name))
-#endif
-#define PerlDir_rmdir(name) rmdir((name))
-#define PerlDir_close(dir) closedir((dir))
-#define PerlDir_open(name) opendir((name))
-#define PerlDir_read(dir) readdir((dir))
-#define PerlDir_rewind(dir) rewinddir((dir))
-#define PerlDir_seek(dir, loc) seekdir((dir), (loc))
-#define PerlDir_tell(dir) telldir((dir))
-#ifdef WIN32
-#define PerlDir_mapA(dir) dir
-#define PerlDir_mapW(dir) dir
-#endif
-
-#endif /* PERL_IMPLICIT_SYS */
-
-/*
- Interface for perl environment functions
-*/
-
-#if defined(PERL_IMPLICIT_SYS)
-
-/* IPerlEnv */
-struct IPerlEnv;
-struct IPerlEnvInfo;
-typedef char* (*LPEnvGetenv)(struct IPerlEnv*, const char*);
-typedef int (*LPEnvPutenv)(struct IPerlEnv*, const char*);
-typedef char* (*LPEnvGetenv_len)(struct IPerlEnv*,
- const char *varname, unsigned long *len);
-typedef int (*LPEnvUname)(struct IPerlEnv*, struct utsname *name);
-typedef void (*LPEnvClearenv)(struct IPerlEnv*);
-typedef void* (*LPEnvGetChildenv)(struct IPerlEnv*);
-typedef void (*LPEnvFreeChildenv)(struct IPerlEnv*, void* env);
-typedef char* (*LPEnvGetChilddir)(struct IPerlEnv*);
-typedef void (*LPEnvFreeChilddir)(struct IPerlEnv*, char* dir);
-#ifdef HAS_ENVGETENV
-typedef char* (*LPENVGetenv)(struct IPerlEnv*, const char *varname);
-typedef char* (*LPENVGetenv_len)(struct IPerlEnv*,
- const char *varname, unsigned long *len);
-#endif
-#ifdef WIN32
-typedef unsigned long (*LPEnvOsID)(struct IPerlEnv*);
-typedef char* (*LPEnvLibPath)(struct IPerlEnv*, const char*);
-typedef char* (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*);
-typedef char* (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*);
-typedef void (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*);
-#endif
-
-struct IPerlEnv
-{
- LPEnvGetenv pGetenv;
- LPEnvPutenv pPutenv;
- LPEnvGetenv_len pGetenv_len;
- LPEnvUname pEnvUname;
- LPEnvClearenv pClearenv;
- LPEnvGetChildenv pGetChildenv;
- LPEnvFreeChildenv pFreeChildenv;
- LPEnvGetChilddir pGetChilddir;
- LPEnvFreeChilddir pFreeChilddir;
-#ifdef HAS_ENVGETENV
- LPENVGetenv pENVGetenv;
- LPENVGetenv_len pENVGetenv_len;
-#endif
-#ifdef WIN32
- LPEnvOsID pEnvOsID;
- LPEnvLibPath pLibPath;
- LPEnvSiteLibPath pSiteLibPath;
- LPEnvVendorLibPath pVendorLibPath;
- LPEnvGetChildIO pGetChildIO;
-#endif
-};
-
-struct IPerlEnvInfo
-{
- unsigned long nCount; /* number of entries expected */
- struct IPerlEnv perlEnvList;
-};
-
-#define PerlEnv_putenv(str) \
- (*PL_Env->pPutenv)(PL_Env,(str))
-#define PerlEnv_getenv(str) \
- (*PL_Env->pGetenv)(PL_Env,(str))
-#define PerlEnv_getenv_len(str,l) \
- (*PL_Env->pGetenv_len)(PL_Env,(str), (l))
-#define PerlEnv_clearenv() \
- (*PL_Env->pClearenv)(PL_Env)
-#define PerlEnv_get_childenv() \
- (*PL_Env->pGetChildenv)(PL_Env)
-#define PerlEnv_free_childenv(e) \
- (*PL_Env->pFreeChildenv)(PL_Env, (e))
-#define PerlEnv_get_childdir() \
- (*PL_Env->pGetChilddir)(PL_Env)
-#define PerlEnv_free_childdir(d) \
- (*PL_Env->pFreeChilddir)(PL_Env, (d))
-#ifdef HAS_ENVGETENV
-# define PerlEnv_ENVgetenv(str) \
- (*PL_Env->pENVGetenv)(PL_Env,(str))
-# define PerlEnv_ENVgetenv_len(str,l) \
- (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l))
-#else
-# define PerlEnv_ENVgetenv(str) \
- PerlEnv_getenv((str))
-# define PerlEnv_ENVgetenv_len(str,l) \
- PerlEnv_getenv_len((str),(l))
-#endif
-#define PerlEnv_uname(name) \
- (*PL_Env->pEnvUname)(PL_Env,(name))
-#ifdef WIN32
-#define PerlEnv_os_id() \
- (*PL_Env->pEnvOsID)(PL_Env)
-#define PerlEnv_lib_path(str) \
- (*PL_Env->pLibPath)(PL_Env,(str))
-#define PerlEnv_sitelib_path(str) \
- (*PL_Env->pSiteLibPath)(PL_Env,(str))
-#define PerlEnv_vendorlib_path(str) \
- (*PL_Env->pVendorLibPath)(PL_Env,(str))
-#define PerlEnv_get_child_IO(ptr) \
- (*PL_Env->pGetChildIO)(PL_Env, ptr)
-#endif
-
-#else /* PERL_IMPLICIT_SYS */
-
-#define PerlEnv_putenv(str) putenv((str))
-#define PerlEnv_getenv(str) getenv((str))
-#define PerlEnv_getenv_len(str,l) getenv_len((str), (l))
-#define PerlEnv_clearenv() clearenv()
-#define PerlEnv_get_childenv() get_childenv()
-#define PerlEnv_free_childenv(e) free_childenv((e))
-#define PerlEnv_get_childdir() get_childdir()
-#define PerlEnv_free_childdir(d) free_childdir((d))
-#ifdef HAS_ENVGETENV
-# define PerlEnv_ENVgetenv(str) ENVgetenv((str))
-# define PerlEnv_ENVgetenv_len(str,l) ENVgetenv_len((str), (l))
-#else
-# define PerlEnv_ENVgetenv(str) PerlEnv_getenv((str))
-# define PerlEnv_ENVgetenv_len(str,l) PerlEnv_getenv_len((str), (l))
-#endif
-#define PerlEnv_uname(name) uname((name))
-
-#ifdef WIN32
-#define PerlEnv_os_id() win32_os_id()
-#define PerlEnv_lib_path(str) win32_get_privlib(str)
-#define PerlEnv_sitelib_path(str) win32_get_sitelib(str)
-#define PerlEnv_vendorlib_path(str) win32_get_vendorlib(str)
-#define PerlEnv_get_child_IO(ptr) win32_get_child_IO(ptr)
-#endif
-
-#endif /* PERL_IMPLICIT_SYS */
-
-/*
- Interface for perl low-level IO functions
-*/
-
-#if defined(PERL_IMPLICIT_SYS)
-
-/* IPerlLIO */
-struct IPerlLIO;
-struct IPerlLIOInfo;
-typedef int (*LPLIOAccess)(struct IPerlLIO*, const char*, int);
-typedef int (*LPLIOChmod)(struct IPerlLIO*, const char*, int);
-typedef int (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t,
- gid_t);
-typedef int (*LPLIOChsize)(struct IPerlLIO*, int, long);
-typedef int (*LPLIOClose)(struct IPerlLIO*, int);
-typedef int (*LPLIODup)(struct IPerlLIO*, int);
-typedef int (*LPLIODup2)(struct IPerlLIO*, int, int);
-typedef int (*LPLIOFlock)(struct IPerlLIO*, int, int);
-typedef int (*LPLIOFileStat)(struct IPerlLIO*, int, struct stat*);
-typedef int (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int,
- char*);
-typedef int (*LPLIOIsatty)(struct IPerlLIO*, int);
-typedef int (*LPLIOLink)(struct IPerlLIO*, const char*,
- const char *);
-typedef long (*LPLIOLseek)(struct IPerlLIO*, int, long, int);
-typedef int (*LPLIOLstat)(struct IPerlLIO*, const char*,
- struct stat*);
-typedef char* (*LPLIOMktemp)(struct IPerlLIO*, char*);
-typedef int (*LPLIOOpen)(struct IPerlLIO*, const char*, int);
-typedef int (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int);
-typedef int (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int);
-typedef int (*LPLIORename)(struct IPerlLIO*, const char*,
- const char*);
-typedef int (*LPLIOSetmode)(struct IPerlLIO*, int, int);
-typedef int (*LPLIONameStat)(struct IPerlLIO*, const char*,
- struct stat*);
-typedef char* (*LPLIOTmpnam)(struct IPerlLIO*, char*);
-typedef int (*LPLIOUmask)(struct IPerlLIO*, int);
-typedef int (*LPLIOUnlink)(struct IPerlLIO*, const char*);
-typedef int (*LPLIOUtime)(struct IPerlLIO*, char*, struct utimbuf*);
-typedef int (*LPLIOWrite)(struct IPerlLIO*, int, const void*,
- unsigned int);
-
-struct IPerlLIO
-{
- LPLIOAccess pAccess;
- LPLIOChmod pChmod;
- LPLIOChown pChown;
- LPLIOChsize pChsize;
- LPLIOClose pClose;
- LPLIODup pDup;
- LPLIODup2 pDup2;
- LPLIOFlock pFlock;
- LPLIOFileStat pFileStat;
- LPLIOIOCtl pIOCtl;
- LPLIOIsatty pIsatty;
- LPLIOLink pLink;
- LPLIOLseek pLseek;
- LPLIOLstat pLstat;
- LPLIOMktemp pMktemp;
- LPLIOOpen pOpen;
- LPLIOOpen3 pOpen3;
- LPLIORead pRead;
- LPLIORename pRename;
- LPLIOSetmode pSetmode;
- LPLIONameStat pNameStat;
- LPLIOTmpnam pTmpnam;
- LPLIOUmask pUmask;
- LPLIOUnlink pUnlink;
- LPLIOUtime pUtime;
- LPLIOWrite pWrite;
-};
-
-struct IPerlLIOInfo
-{
- unsigned long nCount; /* number of entries expected */
- struct IPerlLIO perlLIOList;
-};
-
-#define PerlLIO_access(file, mode) \
- (*PL_LIO->pAccess)(PL_LIO, (file), (mode))
-#define PerlLIO_chmod(file, mode) \
- (*PL_LIO->pChmod)(PL_LIO, (file), (mode))
-#define PerlLIO_chown(file, owner, group) \
- (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group))
-#define PerlLIO_chsize(fd, size) \
- (*PL_LIO->pChsize)(PL_LIO, (fd), (size))
-#define PerlLIO_close(fd) \
- (*PL_LIO->pClose)(PL_LIO, (fd))
-#define PerlLIO_dup(fd) \
- (*PL_LIO->pDup)(PL_LIO, (fd))
-#define PerlLIO_dup2(fd1, fd2) \
- (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2))
-#define PerlLIO_flock(fd, op) \
- (*PL_LIO->pFlock)(PL_LIO, (fd), (op))
-#define PerlLIO_fstat(fd, buf) \
- (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf))
-#define PerlLIO_ioctl(fd, u, buf) \
- (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf))
-#define PerlLIO_isatty(fd) \
- (*PL_LIO->pIsatty)(PL_LIO, (fd))
-#define PerlLIO_link(oldname, newname) \
- (*PL_LIO->pLink)(PL_LIO, (oldname), (newname))
-#define PerlLIO_lseek(fd, offset, mode) \
- (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode))
-#define PerlLIO_lstat(name, buf) \
- (*PL_LIO->pLstat)(PL_LIO, (name), (buf))
-#define PerlLIO_mktemp(file) \
- (*PL_LIO->pMktemp)(PL_LIO, (file))
-#define PerlLIO_open(file, flag) \
- (*PL_LIO->pOpen)(PL_LIO, (file), (flag))
-#define PerlLIO_open3(file, flag, perm) \
- (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm))
-#define PerlLIO_read(fd, buf, count) \
- (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count))
-#define PerlLIO_rename(oname, newname) \
- (*PL_LIO->pRename)(PL_LIO, (oname), (newname))
-#define PerlLIO_setmode(fd, mode) \
- (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode))
-#define PerlLIO_stat(name, buf) \
- (*PL_LIO->pNameStat)(PL_LIO, (name), (buf))
-#define PerlLIO_tmpnam(str) \
- (*PL_LIO->pTmpnam)(PL_LIO, (str))
-#define PerlLIO_umask(mode) \
- (*PL_LIO->pUmask)(PL_LIO, (mode))
-#define PerlLIO_unlink(file) \
- (*PL_LIO->pUnlink)(PL_LIO, (file))
-#define PerlLIO_utime(file, time) \
- (*PL_LIO->pUtime)(PL_LIO, (file), (time))
-#define PerlLIO_write(fd, buf, count) \
- (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count))
-
-#else /* PERL_IMPLICIT_SYS */
-
-#define PerlLIO_access(file, mode) access((file), (mode))
-#define PerlLIO_chmod(file, mode) chmod((file), (mode))
-#define PerlLIO_chown(file, owner, grp) chown((file), (owner), (grp))
-#define PerlLIO_chsize(fd, size) chsize((fd), (size))
-#define PerlLIO_close(fd) close((fd))
-#define PerlLIO_dup(fd) dup((fd))
-#define PerlLIO_dup2(fd1, fd2) dup2((fd1), (fd2))
-#define PerlLIO_flock(fd, op) FLOCK((fd), (op))
-#define PerlLIO_fstat(fd, buf) Fstat((fd), (buf))
-#define PerlLIO_ioctl(fd, u, buf) ioctl((fd), (u), (buf))
-#define PerlLIO_isatty(fd) isatty((fd))
-#define PerlLIO_link(oldname, newname) link((oldname), (newname))
-#define PerlLIO_lseek(fd, offset, mode) lseek((fd), (offset), (mode))
-#define PerlLIO_stat(name, buf) Stat((name), (buf))
-#ifdef HAS_LSTAT
-# define PerlLIO_lstat(name, buf) lstat((name), (buf))
-#else
-# define PerlLIO_lstat(name, buf) PerlLIO_stat((name), (buf))
-#endif
-#define PerlLIO_mktemp(file) mktemp((file))
-#define PerlLIO_mkstemp(file) mkstemp((file))
-#define PerlLIO_open(file, flag) open((file), (flag))
-#define PerlLIO_open3(file, flag, perm) open((file), (flag), (perm))
-#define PerlLIO_read(fd, buf, count) read((fd), (buf), (count))
-#define PerlLIO_rename(old, new) rename((old), (new))
-#define PerlLIO_setmode(fd, mode) setmode((fd), (mode))
-#define PerlLIO_tmpnam(str) tmpnam((str))
-#define PerlLIO_umask(mode) umask((mode))
-#define PerlLIO_unlink(file) unlink((file))
-#define PerlLIO_utime(file, time) utime((file), (time))
-#define PerlLIO_write(fd, buf, count) write((fd), (buf), (count))
-
-#endif /* PERL_IMPLICIT_SYS */
-
-/*
- Interface for perl memory allocation
-*/
-
-#if defined(PERL_IMPLICIT_SYS)
-
-/* IPerlMem */
-struct IPerlMem;
-struct IPerlMemInfo;
-typedef void* (*LPMemMalloc)(struct IPerlMem*, size_t);
-typedef void* (*LPMemRealloc)(struct IPerlMem*, void*, size_t);
-typedef void (*LPMemFree)(struct IPerlMem*, void*);
-typedef void* (*LPMemCalloc)(struct IPerlMem*, size_t, size_t);
-typedef void (*LPMemGetLock)(struct IPerlMem*);
-typedef void (*LPMemFreeLock)(struct IPerlMem*);
-typedef int (*LPMemIsLocked)(struct IPerlMem*);
-
-struct IPerlMem
-{
- LPMemMalloc pMalloc;
- LPMemRealloc pRealloc;
- LPMemFree pFree;
- LPMemCalloc pCalloc;
- LPMemGetLock pGetLock;
- LPMemFreeLock pFreeLock;
- LPMemIsLocked pIsLocked;
-};
-
-struct IPerlMemInfo
-{
- unsigned long nCount; /* number of entries expected */
- struct IPerlMem perlMemList;
-};
-
-/* Interpreter specific memory macros */
-#define PerlMem_malloc(size) \
- (*PL_Mem->pMalloc)(PL_Mem, (size))
-#define PerlMem_realloc(buf, size) \
- (*PL_Mem->pRealloc)(PL_Mem, (buf), (size))
-#define PerlMem_free(buf) \
- (*PL_Mem->pFree)(PL_Mem, (buf))
-#define PerlMem_calloc(num, size) \
- (*PL_Mem->pCalloc)(PL_Mem, (num), (size))
-#define PerlMem_get_lock() \
- (*PL_Mem->pGetLock)(PL_Mem)
-#define PerlMem_free_lock() \
- (*PL_Mem->pFreeLock)(PL_Mem)
-#define PerlMem_is_locked() \
- (*PL_Mem->pIsLocked)(PL_Mem)
-
-/* Shared memory macros */
-#define PerlMemShared_malloc(size) \
- (*PL_MemShared->pMalloc)(PL_Mem, (size))
-#define PerlMemShared_realloc(buf, size) \
- (*PL_MemShared->pRealloc)(PL_Mem, (buf), (size))
-#define PerlMemShared_free(buf) \
- (*PL_MemShared->pFree)(PL_Mem, (buf))
-#define PerlMemShared_calloc(num, size) \
- (*PL_MemShared->pCalloc)(PL_Mem, (num), (size))
-#define PerlMemShared_get_lock() \
- (*PL_MemShared->pGetLock)(PL_Mem)
-#define PerlMemShared_free_lock() \
- (*PL_MemShared->pFreeLock)(PL_Mem)
-#define PerlMemShared_is_locked() \
- (*PL_MemShared->pIsLocked)(PL_Mem)
-
-
-/* Parse tree memory macros */
-#define PerlMemParse_malloc(size) \
- (*PL_MemParse->pMalloc)(PL_Mem, (size))
-#define PerlMemParse_realloc(buf, size) \
- (*PL_MemParse->pRealloc)(PL_Mem, (buf), (size))
-#define PerlMemParse_free(buf) \
- (*PL_MemParse->pFree)(PL_Mem, (buf))
-#define PerlMemParse_calloc(num, size) \
- (*PL_MemParse->pCalloc)(PL_Mem, (num), (size))
-#define PerlMemParse_get_lock() \
- (*PL_MemParse->pGetLock)(PL_Mem)
-#define PerlMemParse_free_lock() \
- (*PL_MemParse->pFreeLock)(PL_Mem)
-#define PerlMemParse_is_locked() \
- (*PL_MemParse->pIsLocked)(PL_Mem)
-
-
-#else /* PERL_IMPLICIT_SYS */
-
-/* Interpreter specific memory macros */
-#define PerlMem_malloc(size) malloc((size))
-#define PerlMem_realloc(buf, size) realloc((buf), (size))
-#define PerlMem_free(buf) free((buf))
-#define PerlMem_calloc(num, size) calloc((num), (size))
-#define PerlMem_get_lock()
-#define PerlMem_free_lock()
-#define PerlMem_is_locked() 0
-
-/* Shared memory macros */
-#define PerlMemShared_malloc(size) malloc((size))
-#define PerlMemShared_realloc(buf, size) realloc((buf), (size))
-#define PerlMemShared_free(buf) free((buf))
-#define PerlMemShared_calloc(num, size) calloc((num), (size))
-#define PerlMemShared_get_lock()
-#define PerlMemShared_free_lock()
-#define PerlMemShared_is_locked() 0
-
-/* Parse tree memory macros */
-#define PerlMemParse_malloc(size) malloc((size))
-#define PerlMemParse_realloc(buf, size) realloc((buf), (size))
-#define PerlMemParse_free(buf) free((buf))
-#define PerlMemParse_calloc(num, size) calloc((num), (size))
-#define PerlMemParse_get_lock()
-#define PerlMemParse_free_lock()
-#define PerlMemParse_is_locked() 0
-
-#endif /* PERL_IMPLICIT_SYS */
-
-/*
- Interface for perl process functions
-*/
-
-
-#if defined(PERL_IMPLICIT_SYS)
-
-#ifndef jmp_buf
-#include <setjmp.h>
-#endif
-
-/* IPerlProc */
-struct IPerlProc;
-struct IPerlProcInfo;
-typedef void (*LPProcAbort)(struct IPerlProc*);
-typedef char* (*LPProcCrypt)(struct IPerlProc*, const char*,
- const char*);
-typedef void (*LPProcExit)(struct IPerlProc*, int);
-typedef void (*LPProc_Exit)(struct IPerlProc*, int);
-typedef int (*LPProcExecl)(struct IPerlProc*, const char*,
- const char*, const char*, const char*,
- const char*);
-typedef int (*LPProcExecv)(struct IPerlProc*, const char*,
- const char*const*);
-typedef int (*LPProcExecvp)(struct IPerlProc*, const char*,
- const char*const*);
-typedef uid_t (*LPProcGetuid)(struct IPerlProc*);
-typedef uid_t (*LPProcGeteuid)(struct IPerlProc*);
-typedef gid_t (*LPProcGetgid)(struct IPerlProc*);
-typedef gid_t (*LPProcGetegid)(struct IPerlProc*);
-typedef char* (*LPProcGetlogin)(struct IPerlProc*);
-typedef int (*LPProcKill)(struct IPerlProc*, int, int);
-typedef int (*LPProcKillpg)(struct IPerlProc*, int, int);
-typedef int (*LPProcPauseProc)(struct IPerlProc*);
-typedef PerlIO* (*LPProcPopen)(struct IPerlProc*, const char*,
- const char*);
-typedef int (*LPProcPclose)(struct IPerlProc*, PerlIO*);
-typedef int (*LPProcPipe)(struct IPerlProc*, int*);
-typedef int (*LPProcSetuid)(struct IPerlProc*, uid_t);
-typedef int (*LPProcSetgid)(struct IPerlProc*, gid_t);
-typedef int (*LPProcSleep)(struct IPerlProc*, unsigned int);
-typedef int (*LPProcTimes)(struct IPerlProc*, struct tms*);
-typedef int (*LPProcWait)(struct IPerlProc*, int*);
-typedef int (*LPProcWaitpid)(struct IPerlProc*, int, int*, int);
-typedef Sighandler_t (*LPProcSignal)(struct IPerlProc*, int, Sighandler_t);
-typedef int (*LPProcFork)(struct IPerlProc*);
-typedef int (*LPProcGetpid)(struct IPerlProc*);
-#ifdef WIN32
-typedef void* (*LPProcDynaLoader)(struct IPerlProc*, const char*);
-typedef void (*LPProcGetOSError)(struct IPerlProc*,
- SV* sv, DWORD dwErr);
-typedef void (*LPProcFreeBuf)(struct IPerlProc*, char*);
-typedef BOOL (*LPProcDoCmd)(struct IPerlProc*, char*);
-typedef int (*LPProcSpawn)(struct IPerlProc*, char*);
-typedef int (*LPProcSpawnvp)(struct IPerlProc*, int, const char*,
- const char*const*);
-typedef int (*LPProcASpawn)(struct IPerlProc*, void*, void**, void**);
-#endif
-
-struct IPerlProc
-{
- LPProcAbort pAbort;
- LPProcCrypt pCrypt;
- LPProcExit pExit;
- LPProc_Exit p_Exit;
- LPProcExecl pExecl;
- LPProcExecv pExecv;
- LPProcExecvp pExecvp;
- LPProcGetuid pGetuid;
- LPProcGeteuid pGeteuid;
- LPProcGetgid pGetgid;
- LPProcGetegid pGetegid;
- LPProcGetlogin pGetlogin;
- LPProcKill pKill;
- LPProcKillpg pKillpg;
- LPProcPauseProc pPauseProc;
- LPProcPopen pPopen;
- LPProcPclose pPclose;
- LPProcPipe pPipe;
- LPProcSetuid pSetuid;
- LPProcSetgid pSetgid;
- LPProcSleep pSleep;
- LPProcTimes pTimes;
- LPProcWait pWait;
- LPProcWaitpid pWaitpid;
- LPProcSignal pSignal;
- LPProcFork pFork;
- LPProcGetpid pGetpid;
-#ifdef WIN32
- LPProcDynaLoader pDynaLoader;
- LPProcGetOSError pGetOSError;
- LPProcDoCmd pDoCmd;
- LPProcSpawn pSpawn;
- LPProcSpawnvp pSpawnvp;
- LPProcASpawn pASpawn;
-#endif
-};
-
-struct IPerlProcInfo
-{
- unsigned long nCount; /* number of entries expected */
- struct IPerlProc perlProcList;
-};
-
-#define PerlProc_abort() \
- (*PL_Proc->pAbort)(PL_Proc)
-#define PerlProc_crypt(c,s) \
- (*PL_Proc->pCrypt)(PL_Proc, (c), (s))
-#define PerlProc_exit(s) \
- (*PL_Proc->pExit)(PL_Proc, (s))
-#define PerlProc__exit(s) \
- (*PL_Proc->p_Exit)(PL_Proc, (s))
-#define PerlProc_execl(c, w, x, y, z) \
- (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z))
-#define PerlProc_execv(c, a) \
- (*PL_Proc->pExecv)(PL_Proc, (c), (a))
-#define PerlProc_execvp(c, a) \
- (*PL_Proc->pExecvp)(PL_Proc, (c), (a))
-#define PerlProc_getuid() \
- (*PL_Proc->pGetuid)(PL_Proc)
-#define PerlProc_geteuid() \
- (*PL_Proc->pGeteuid)(PL_Proc)
-#define PerlProc_getgid() \
- (*PL_Proc->pGetgid)(PL_Proc)
-#define PerlProc_getegid() \
- (*PL_Proc->pGetegid)(PL_Proc)
-#define PerlProc_getlogin() \
- (*PL_Proc->pGetlogin)(PL_Proc)
-#define PerlProc_kill(i, a) \
- (*PL_Proc->pKill)(PL_Proc, (i), (a))
-#define PerlProc_killpg(i, a) \
- (*PL_Proc->pKillpg)(PL_Proc, (i), (a))
-#define PerlProc_pause() \
- (*PL_Proc->pPauseProc)(PL_Proc)
-#define PerlProc_popen(c, m) \
- (*PL_Proc->pPopen)(PL_Proc, (c), (m))
-#define PerlProc_pclose(f) \
- (*PL_Proc->pPclose)(PL_Proc, (f))
-#define PerlProc_pipe(fd) \
- (*PL_Proc->pPipe)(PL_Proc, (fd))
-#define PerlProc_setuid(u) \
- (*PL_Proc->pSetuid)(PL_Proc, (u))
-#define PerlProc_setgid(g) \
- (*PL_Proc->pSetgid)(PL_Proc, (g))
-#define PerlProc_sleep(t) \
- (*PL_Proc->pSleep)(PL_Proc, (t))
-#define PerlProc_times(t) \
- (*PL_Proc->pTimes)(PL_Proc, (t))
-#define PerlProc_wait(t) \
- (*PL_Proc->pWait)(PL_Proc, (t))
-#define PerlProc_waitpid(p,s,f) \
- (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f))
-#define PerlProc_signal(n, h) \
- (*PL_Proc->pSignal)(PL_Proc, (n), (h))
-#define PerlProc_fork() \
- (*PL_Proc->pFork)(PL_Proc)
-#define PerlProc_getpid() \
- (*PL_Proc->pGetpid)(PL_Proc)
-#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n))
-#define PerlProc_longjmp(b, n) Siglongjmp((b), (n))
-
-#ifdef WIN32
-#define PerlProc_DynaLoad(f) \
- (*PL_Proc->pDynaLoader)(PL_Proc, (f))
-#define PerlProc_GetOSError(s,e) \
- (*PL_Proc->pGetOSError)(PL_Proc, (s), (e))
-#define PerlProc_Cmd(s) \
- (*PL_Proc->pDoCmd)(PL_Proc, (s))
-#define do_spawn(s) \
- (*PL_Proc->pSpawn)(PL_Proc, (s))
-#define do_spawnvp(m, c, a) \
- (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a))
-#define PerlProc_aspawn(m,c,a) \
- (*PL_Proc->pASpawn)(PL_Proc, (m), (c), (a))
-#endif
-
-#else /* PERL_IMPLICIT_SYS */
-
-#define PerlProc_abort() abort()
-#define PerlProc_crypt(c,s) crypt((c), (s))
-#define PerlProc_exit(s) exit((s))
-#define PerlProc__exit(s) _exit((s))
-#define PerlProc_execl(c,w,x,y,z) \
- execl((c), (w), (x), (y), (z))
-#define PerlProc_execv(c, a) execv((c), (a))
-#define PerlProc_execvp(c, a) execvp((c), (a))
-#define PerlProc_getuid() getuid()
-#define PerlProc_geteuid() geteuid()
-#define PerlProc_getgid() getgid()
-#define PerlProc_getegid() getegid()
-#define PerlProc_getlogin() getlogin()
-#define PerlProc_kill(i, a) kill((i), (a))
-#define PerlProc_killpg(i, a) killpg((i), (a))
-#define PerlProc_pause() Pause()
-#define PerlProc_popen(c, m) my_popen((c), (m))
-#define PerlProc_pclose(f) my_pclose((f))
-#define PerlProc_pipe(fd) pipe((fd))
-#define PerlProc_setuid(u) setuid((u))
-#define PerlProc_setgid(g) setgid((g))
-#define PerlProc_sleep(t) sleep((t))
-#define PerlProc_times(t) times((t))
-#define PerlProc_wait(t) wait((t))
-#define PerlProc_waitpid(p,s,f) waitpid((p), (s), (f))
-#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n))
-#define PerlProc_longjmp(b, n) Siglongjmp((b), (n))
-#define PerlProc_signal(n, h) signal((n), (h))
-#define PerlProc_fork() fork()
-#define PerlProc_getpid() getpid()
-
-#ifdef WIN32
-#define PerlProc_DynaLoad(f) \
- win32_dynaload((f))
-#define PerlProc_GetOSError(s,e) \
- win32_str_os_error((s), (e))
-#endif
-#endif /* PERL_IMPLICIT_SYS */
-
-/*
- Interface for perl socket functions
-*/
-
-#if defined(PERL_IMPLICIT_SYS)
-
-/* PerlSock */
-struct IPerlSock;
-struct IPerlSockInfo;
-typedef u_long (*LPHtonl)(struct IPerlSock*, u_long);
-typedef u_short (*LPHtons)(struct IPerlSock*, u_short);
-typedef u_long (*LPNtohl)(struct IPerlSock*, u_long);
-typedef u_short (*LPNtohs)(struct IPerlSock*, u_short);
-typedef SOCKET (*LPAccept)(struct IPerlSock*, SOCKET,
- struct sockaddr*, int*);
-typedef int (*LPBind)(struct IPerlSock*, SOCKET,
- const struct sockaddr*, int);
-typedef int (*LPConnect)(struct IPerlSock*, SOCKET,
- const struct sockaddr*, int);
-typedef void (*LPEndhostent)(struct IPerlSock*);
-typedef void (*LPEndnetent)(struct IPerlSock*);
-typedef void (*LPEndprotoent)(struct IPerlSock*);
-typedef void (*LPEndservent)(struct IPerlSock*);
-typedef int (*LPGethostname)(struct IPerlSock*, char*, int);
-typedef int (*LPGetpeername)(struct IPerlSock*, SOCKET,
- struct sockaddr*, int*);
-typedef struct hostent* (*LPGethostbyaddr)(struct IPerlSock*, const char*,
- int, int);
-typedef struct hostent* (*LPGethostbyname)(struct IPerlSock*, const char*);
-typedef struct hostent* (*LPGethostent)(struct IPerlSock*);
-typedef struct netent* (*LPGetnetbyaddr)(struct IPerlSock*, long, int);
-typedef struct netent* (*LPGetnetbyname)(struct IPerlSock*, const char*);
-typedef struct netent* (*LPGetnetent)(struct IPerlSock*);
-typedef struct protoent*(*LPGetprotobyname)(struct IPerlSock*, const char*);
-typedef struct protoent*(*LPGetprotobynumber)(struct IPerlSock*, int);
-typedef struct protoent*(*LPGetprotoent)(struct IPerlSock*);
-typedef struct servent* (*LPGetservbyname)(struct IPerlSock*, const char*,
- const char*);
-typedef struct servent* (*LPGetservbyport)(struct IPerlSock*, int,
- const char*);
-typedef struct servent* (*LPGetservent)(struct IPerlSock*);
-typedef int (*LPGetsockname)(struct IPerlSock*, SOCKET,
- struct sockaddr*, int*);
-typedef int (*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int,
- char*, int*);
-typedef unsigned long (*LPInetAddr)(struct IPerlSock*, const char*);
-typedef char* (*LPInetNtoa)(struct IPerlSock*, struct in_addr);
-typedef int (*LPListen)(struct IPerlSock*, SOCKET, int);
-typedef int (*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int);
-typedef int (*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int,
- int, struct sockaddr*, int*);
-typedef int (*LPSelect)(struct IPerlSock*, int, char*, char*,
- char*, const struct timeval*);
-typedef int (*LPSend)(struct IPerlSock*, SOCKET, const char*, int,
- int);
-typedef int (*LPSendto)(struct IPerlSock*, SOCKET, const char*,
- int, int, const struct sockaddr*, int);
-typedef void (*LPSethostent)(struct IPerlSock*, int);
-typedef void (*LPSetnetent)(struct IPerlSock*, int);
-typedef void (*LPSetprotoent)(struct IPerlSock*, int);
-typedef void (*LPSetservent)(struct IPerlSock*, int);
-typedef int (*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int,
- const char*, int);
-typedef int (*LPShutdown)(struct IPerlSock*, SOCKET, int);
-typedef SOCKET (*LPSocket)(struct IPerlSock*, int, int, int);
-typedef int (*LPSocketpair)(struct IPerlSock*, int, int, int,
- int*);
-#ifdef WIN32
-typedef int (*LPClosesocket)(struct IPerlSock*, SOCKET s);
-#endif
-
-struct IPerlSock
-{
- LPHtonl pHtonl;
- LPHtons pHtons;
- LPNtohl pNtohl;
- LPNtohs pNtohs;
- LPAccept pAccept;
- LPBind pBind;
- LPConnect pConnect;
- LPEndhostent pEndhostent;
- LPEndnetent pEndnetent;
- LPEndprotoent pEndprotoent;
- LPEndservent pEndservent;
- LPGethostname pGethostname;
- LPGetpeername pGetpeername;
- LPGethostbyaddr pGethostbyaddr;
- LPGethostbyname pGethostbyname;
- LPGethostent pGethostent;
- LPGetnetbyaddr pGetnetbyaddr;
- LPGetnetbyname pGetnetbyname;
- LPGetnetent pGetnetent;
- LPGetprotobyname pGetprotobyname;
- LPGetprotobynumber pGetprotobynumber;
- LPGetprotoent pGetprotoent;
- LPGetservbyname pGetservbyname;
- LPGetservbyport pGetservbyport;
- LPGetservent pGetservent;
- LPGetsockname pGetsockname;
- LPGetsockopt pGetsockopt;
- LPInetAddr pInetAddr;
- LPInetNtoa pInetNtoa;
- LPListen pListen;
- LPRecv pRecv;
- LPRecvfrom pRecvfrom;
- LPSelect pSelect;
- LPSend pSend;
- LPSendto pSendto;
- LPSethostent pSethostent;
- LPSetnetent pSetnetent;
- LPSetprotoent pSetprotoent;
- LPSetservent pSetservent;
- LPSetsockopt pSetsockopt;
- LPShutdown pShutdown;
- LPSocket pSocket;
- LPSocketpair pSocketpair;
-#ifdef WIN32
- LPClosesocket pClosesocket;
-#endif
-};
-
-struct IPerlSockInfo
-{
- unsigned long nCount; /* number of entries expected */
- struct IPerlSock perlSockList;
-};
-
-#define PerlSock_htonl(x) \
- (*PL_Sock->pHtonl)(PL_Sock, x)
-#define PerlSock_htons(x) \
- (*PL_Sock->pHtons)(PL_Sock, x)
-#define PerlSock_ntohl(x) \
- (*PL_Sock->pNtohl)(PL_Sock, x)
-#define PerlSock_ntohs(x) \
- (*PL_Sock->pNtohs)(PL_Sock, x)
-#define PerlSock_accept(s, a, l) \
- (*PL_Sock->pAccept)(PL_Sock, s, a, l)
-#define PerlSock_bind(s, n, l) \
- (*PL_Sock->pBind)(PL_Sock, s, n, l)
-#define PerlSock_connect(s, n, l) \
- (*PL_Sock->pConnect)(PL_Sock, s, n, l)
-#define PerlSock_endhostent() \
- (*PL_Sock->pEndhostent)(PL_Sock)
-#define PerlSock_endnetent() \
- (*PL_Sock->pEndnetent)(PL_Sock)
-#define PerlSock_endprotoent() \
- (*PL_Sock->pEndprotoent)(PL_Sock)
-#define PerlSock_endservent() \
- (*PL_Sock->pEndservent)(PL_Sock)
-#define PerlSock_gethostbyaddr(a, l, t) \
- (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t)
-#define PerlSock_gethostbyname(n) \
- (*PL_Sock->pGethostbyname)(PL_Sock, n)
-#define PerlSock_gethostent() \
- (*PL_Sock->pGethostent)(PL_Sock)
-#define PerlSock_gethostname(n, l) \
- (*PL_Sock->pGethostname)(PL_Sock, n, l)
-#define PerlSock_getnetbyaddr(n, t) \
- (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t)
-#define PerlSock_getnetbyname(c) \
- (*PL_Sock->pGetnetbyname)(PL_Sock, c)
-#define PerlSock_getnetent() \
- (*PL_Sock->pGetnetent)(PL_Sock)
-#define PerlSock_getpeername(s, n, l) \
- (*PL_Sock->pGetpeername)(PL_Sock, s, n, l)
-#define PerlSock_getprotobyname(n) \
- (*PL_Sock->pGetprotobyname)(PL_Sock, n)
-#define PerlSock_getprotobynumber(n) \
- (*PL_Sock->pGetprotobynumber)(PL_Sock, n)
-#define PerlSock_getprotoent() \
- (*PL_Sock->pGetprotoent)(PL_Sock)
-#define PerlSock_getservbyname(n, p) \
- (*PL_Sock->pGetservbyname)(PL_Sock, n, p)
-#define PerlSock_getservbyport(port, p) \
- (*PL_Sock->pGetservbyport)(PL_Sock, port, p)
-#define PerlSock_getservent() \
- (*PL_Sock->pGetservent)(PL_Sock)
-#define PerlSock_getsockname(s, n, l) \
- (*PL_Sock->pGetsockname)(PL_Sock, s, n, l)
-#define PerlSock_getsockopt(s,l,n,v,i) \
- (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i)
-#define PerlSock_inet_addr(c) \
- (*PL_Sock->pInetAddr)(PL_Sock, c)
-#define PerlSock_inet_ntoa(i) \
- (*PL_Sock->pInetNtoa)(PL_Sock, i)
-#define PerlSock_listen(s, b) \
- (*PL_Sock->pListen)(PL_Sock, s, b)
-#define PerlSock_recv(s, b, l, f) \
- (*PL_Sock->pRecv)(PL_Sock, s, b, l, f)
-#define PerlSock_recvfrom(s,b,l,f,from,fromlen) \
- (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen)
-#define PerlSock_select(n, r, w, e, t) \
- (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t)
-#define PerlSock_send(s, b, l, f) \
- (*PL_Sock->pSend)(PL_Sock, s, b, l, f)
-#define PerlSock_sendto(s, b, l, f, t, tlen) \
- (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen)
-#define PerlSock_sethostent(f) \
- (*PL_Sock->pSethostent)(PL_Sock, f)
-#define PerlSock_setnetent(f) \
- (*PL_Sock->pSetnetent)(PL_Sock, f)
-#define PerlSock_setprotoent(f) \
- (*PL_Sock->pSetprotoent)(PL_Sock, f)
-#define PerlSock_setservent(f) \
- (*PL_Sock->pSetservent)(PL_Sock, f)
-#define PerlSock_setsockopt(s, l, n, v, len) \
- (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len)
-#define PerlSock_shutdown(s, h) \
- (*PL_Sock->pShutdown)(PL_Sock, s, h)
-#define PerlSock_socket(a, t, p) \
- (*PL_Sock->pSocket)(PL_Sock, a, t, p)
-#define PerlSock_socketpair(a, t, p, f) \
- (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f)
-
-#ifdef WIN32
-#define PerlSock_closesocket(s) \
- (*PL_Sock->pClosesocket)(PL_Sock, s)
-#endif
-
-#else /* PERL_IMPLICIT_SYS */
-
-#define PerlSock_htonl(x) htonl(x)
-#define PerlSock_htons(x) htons(x)
-#define PerlSock_ntohl(x) ntohl(x)
-#define PerlSock_ntohs(x) ntohs(x)
-#define PerlSock_accept(s, a, l) accept(s, a, l)
-#define PerlSock_bind(s, n, l) bind(s, n, l)
-#define PerlSock_connect(s, n, l) connect(s, n, l)
-
-#define PerlSock_gethostbyaddr(a, l, t) gethostbyaddr(a, l, t)
-#define PerlSock_gethostbyname(n) gethostbyname(n)
-#define PerlSock_gethostent gethostent
-#define PerlSock_endhostent endhostent
-#define PerlSock_gethostname(n, l) gethostname(n, l)
-
-#define PerlSock_getnetbyaddr(n, t) getnetbyaddr(n, t)
-#define PerlSock_getnetbyname(n) getnetbyname(n)
-#define PerlSock_getnetent getnetent
-#define PerlSock_endnetent endnetent
-#define PerlSock_getpeername(s, n, l) getpeername(s, n, l)
-
-#define PerlSock_getprotobyname(n) getprotobyname(n)
-#define PerlSock_getprotobynumber(n) getprotobynumber(n)
-#define PerlSock_getprotoent getprotoent
-#define PerlSock_endprotoent endprotoent
-
-#define PerlSock_getservbyname(n, p) getservbyname(n, p)
-#define PerlSock_getservbyport(port, p) getservbyport(port, p)
-#define PerlSock_getservent getservent
-#define PerlSock_endservent endservent
-
-#define PerlSock_getsockname(s, n, l) getsockname(s, n, l)
-#define PerlSock_getsockopt(s,l,n,v,i) getsockopt(s, l, n, v, i)
-#define PerlSock_inet_addr(c) inet_addr(c)
-#define PerlSock_inet_ntoa(i) inet_ntoa(i)
-#define PerlSock_listen(s, b) listen(s, b)
-#define PerlSock_recv(s, b, l, f) recv(s, b, l, f)
-#define PerlSock_recvfrom(s, b, l, f, from, fromlen) \
- recvfrom(s, b, l, f, from, fromlen)
-#define PerlSock_select(n, r, w, e, t) select(n, r, w, e, t)
-#define PerlSock_send(s, b, l, f) send(s, b, l, f)
-#define PerlSock_sendto(s, b, l, f, t, tlen) \
- sendto(s, b, l, f, t, tlen)
-#define PerlSock_sethostent(f) sethostent(f)
-#define PerlSock_setnetent(f) setnetent(f)
-#define PerlSock_setprotoent(f) setprotoent(f)
-#define PerlSock_setservent(f) setservent(f)
-#define PerlSock_setsockopt(s, l, n, v, len) \
- setsockopt(s, l, n, v, len)
-#define PerlSock_shutdown(s, h) shutdown(s, h)
-#define PerlSock_socket(a, t, p) socket(a, t, p)
-#define PerlSock_socketpair(a, t, p, f) socketpair(a, t, p, f)
-
-#ifdef WIN32
-#define PerlSock_closesocket(s) closesocket(s)
-#endif
-
-#endif /* PERL_IMPLICIT_SYS */
-
-#endif /* __Inc__IPerl___ */
-
diff --git a/contrib/perl5/keywords.h b/contrib/perl5/keywords.h
deleted file mode 100644
index 3343041..0000000
--- a/contrib/perl5/keywords.h
+++ /dev/null
@@ -1,252 +0,0 @@
-#define KEY_NULL 0
-#define KEY___FILE__ 1
-#define KEY___LINE__ 2
-#define KEY___PACKAGE__ 3
-#define KEY___DATA__ 4
-#define KEY___END__ 5
-#define KEY_AUTOLOAD 6
-#define KEY_BEGIN 7
-#define KEY_CORE 8
-#define KEY_DESTROY 9
-#define KEY_END 10
-#define KEY_EQ 11
-#define KEY_GE 12
-#define KEY_GT 13
-#define KEY_INIT 14
-#define KEY_LE 15
-#define KEY_LT 16
-#define KEY_NE 17
-#define KEY_CHECK 18
-#define KEY_abs 19
-#define KEY_accept 20
-#define KEY_alarm 21
-#define KEY_and 22
-#define KEY_atan2 23
-#define KEY_bind 24
-#define KEY_binmode 25
-#define KEY_bless 26
-#define KEY_caller 27
-#define KEY_chdir 28
-#define KEY_chmod 29
-#define KEY_chomp 30
-#define KEY_chop 31
-#define KEY_chown 32
-#define KEY_chr 33
-#define KEY_chroot 34
-#define KEY_close 35
-#define KEY_closedir 36
-#define KEY_cmp 37
-#define KEY_connect 38
-#define KEY_continue 39
-#define KEY_cos 40
-#define KEY_crypt 41
-#define KEY_dbmclose 42
-#define KEY_dbmopen 43
-#define KEY_defined 44
-#define KEY_delete 45
-#define KEY_die 46
-#define KEY_do 47
-#define KEY_dump 48
-#define KEY_each 49
-#define KEY_else 50
-#define KEY_elsif 51
-#define KEY_endgrent 52
-#define KEY_endhostent 53
-#define KEY_endnetent 54
-#define KEY_endprotoent 55
-#define KEY_endpwent 56
-#define KEY_endservent 57
-#define KEY_eof 58
-#define KEY_eq 59
-#define KEY_eval 60
-#define KEY_exec 61
-#define KEY_exists 62
-#define KEY_exit 63
-#define KEY_exp 64
-#define KEY_fcntl 65
-#define KEY_fileno 66
-#define KEY_flock 67
-#define KEY_for 68
-#define KEY_foreach 69
-#define KEY_fork 70
-#define KEY_format 71
-#define KEY_formline 72
-#define KEY_ge 73
-#define KEY_getc 74
-#define KEY_getgrent 75
-#define KEY_getgrgid 76
-#define KEY_getgrnam 77
-#define KEY_gethostbyaddr 78
-#define KEY_gethostbyname 79
-#define KEY_gethostent 80
-#define KEY_getlogin 81
-#define KEY_getnetbyaddr 82
-#define KEY_getnetbyname 83
-#define KEY_getnetent 84
-#define KEY_getpeername 85
-#define KEY_getpgrp 86
-#define KEY_getppid 87
-#define KEY_getpriority 88
-#define KEY_getprotobyname 89
-#define KEY_getprotobynumber 90
-#define KEY_getprotoent 91
-#define KEY_getpwent 92
-#define KEY_getpwnam 93
-#define KEY_getpwuid 94
-#define KEY_getservbyname 95
-#define KEY_getservbyport 96
-#define KEY_getservent 97
-#define KEY_getsockname 98
-#define KEY_getsockopt 99
-#define KEY_glob 100
-#define KEY_gmtime 101
-#define KEY_goto 102
-#define KEY_grep 103
-#define KEY_gt 104
-#define KEY_hex 105
-#define KEY_if 106
-#define KEY_index 107
-#define KEY_int 108
-#define KEY_ioctl 109
-#define KEY_join 110
-#define KEY_keys 111
-#define KEY_kill 112
-#define KEY_last 113
-#define KEY_lc 114
-#define KEY_lcfirst 115
-#define KEY_le 116
-#define KEY_length 117
-#define KEY_link 118
-#define KEY_listen 119
-#define KEY_local 120
-#define KEY_localtime 121
-#define KEY_lock 122
-#define KEY_log 123
-#define KEY_lstat 124
-#define KEY_lt 125
-#define KEY_m 126
-#define KEY_map 127
-#define KEY_mkdir 128
-#define KEY_msgctl 129
-#define KEY_msgget 130
-#define KEY_msgrcv 131
-#define KEY_msgsnd 132
-#define KEY_my 133
-#define KEY_ne 134
-#define KEY_next 135
-#define KEY_no 136
-#define KEY_not 137
-#define KEY_oct 138
-#define KEY_open 139
-#define KEY_opendir 140
-#define KEY_or 141
-#define KEY_ord 142
-#define KEY_our 143
-#define KEY_pack 144
-#define KEY_package 145
-#define KEY_pipe 146
-#define KEY_pop 147
-#define KEY_pos 148
-#define KEY_print 149
-#define KEY_printf 150
-#define KEY_prototype 151
-#define KEY_push 152
-#define KEY_q 153
-#define KEY_qq 154
-#define KEY_qr 155
-#define KEY_quotemeta 156
-#define KEY_qw 157
-#define KEY_qx 158
-#define KEY_rand 159
-#define KEY_read 160
-#define KEY_readdir 161
-#define KEY_readline 162
-#define KEY_readlink 163
-#define KEY_readpipe 164
-#define KEY_recv 165
-#define KEY_redo 166
-#define KEY_ref 167
-#define KEY_rename 168
-#define KEY_require 169
-#define KEY_reset 170
-#define KEY_return 171
-#define KEY_reverse 172
-#define KEY_rewinddir 173
-#define KEY_rindex 174
-#define KEY_rmdir 175
-#define KEY_s 176
-#define KEY_scalar 177
-#define KEY_seek 178
-#define KEY_seekdir 179
-#define KEY_select 180
-#define KEY_semctl 181
-#define KEY_semget 182
-#define KEY_semop 183
-#define KEY_send 184
-#define KEY_setgrent 185
-#define KEY_sethostent 186
-#define KEY_setnetent 187
-#define KEY_setpgrp 188
-#define KEY_setpriority 189
-#define KEY_setprotoent 190
-#define KEY_setpwent 191
-#define KEY_setservent 192
-#define KEY_setsockopt 193
-#define KEY_shift 194
-#define KEY_shmctl 195
-#define KEY_shmget 196
-#define KEY_shmread 197
-#define KEY_shmwrite 198
-#define KEY_shutdown 199
-#define KEY_sin 200
-#define KEY_sleep 201
-#define KEY_socket 202
-#define KEY_socketpair 203
-#define KEY_sort 204
-#define KEY_splice 205
-#define KEY_split 206
-#define KEY_sprintf 207
-#define KEY_sqrt 208
-#define KEY_srand 209
-#define KEY_stat 210
-#define KEY_study 211
-#define KEY_sub 212
-#define KEY_substr 213
-#define KEY_symlink 214
-#define KEY_syscall 215
-#define KEY_sysopen 216
-#define KEY_sysread 217
-#define KEY_sysseek 218
-#define KEY_system 219
-#define KEY_syswrite 220
-#define KEY_tell 221
-#define KEY_telldir 222
-#define KEY_tie 223
-#define KEY_tied 224
-#define KEY_time 225
-#define KEY_times 226
-#define KEY_tr 227
-#define KEY_truncate 228
-#define KEY_uc 229
-#define KEY_ucfirst 230
-#define KEY_umask 231
-#define KEY_undef 232
-#define KEY_unless 233
-#define KEY_unlink 234
-#define KEY_unpack 235
-#define KEY_unshift 236
-#define KEY_untie 237
-#define KEY_until 238
-#define KEY_use 239
-#define KEY_utime 240
-#define KEY_values 241
-#define KEY_vec 242
-#define KEY_wait 243
-#define KEY_waitpid 244
-#define KEY_wantarray 245
-#define KEY_warn 246
-#define KEY_while 247
-#define KEY_write 248
-#define KEY_x 249
-#define KEY_xor 250
-#define KEY_y 251
diff --git a/contrib/perl5/keywords.pl b/contrib/perl5/keywords.pl
deleted file mode 100755
index 46dd53d..0000000
--- a/contrib/perl5/keywords.pl
+++ /dev/null
@@ -1,278 +0,0 @@
-#!/usr/bin/perl
-
-unlink "keywords.h";
-open(KW, ">keywords.h") || die "Can't create keywords.h: $!\n";
-select KW;
-
-# Read & print data.
-
-$keynum = 0;
-while (<DATA>) {
- chop;
- next unless $_;
- next if /^#/;
- ($keyword) = split;
- print &tab(5, "#define KEY_$keyword"), $keynum++, "\n";
-}
-
-###########################################################################
-sub tab {
- local($l, $t) = @_;
- $t .= "\t" x ($l - (length($t) + 1) / 8);
- $t;
-}
-###########################################################################
-__END__
-
-NULL
-__FILE__
-__LINE__
-__PACKAGE__
-__DATA__
-__END__
-AUTOLOAD
-BEGIN
-CORE
-DESTROY
-END
-EQ
-GE
-GT
-INIT
-LE
-LT
-NE
-CHECK
-abs
-accept
-alarm
-and
-atan2
-bind
-binmode
-bless
-caller
-chdir
-chmod
-chomp
-chop
-chown
-chr
-chroot
-close
-closedir
-cmp
-connect
-continue
-cos
-crypt
-dbmclose
-dbmopen
-defined
-delete
-die
-do
-dump
-each
-else
-elsif
-endgrent
-endhostent
-endnetent
-endprotoent
-endpwent
-endservent
-eof
-eq
-eval
-exec
-exists
-exit
-exp
-fcntl
-fileno
-flock
-for
-foreach
-fork
-format
-formline
-ge
-getc
-getgrent
-getgrgid
-getgrnam
-gethostbyaddr
-gethostbyname
-gethostent
-getlogin
-getnetbyaddr
-getnetbyname
-getnetent
-getpeername
-getpgrp
-getppid
-getpriority
-getprotobyname
-getprotobynumber
-getprotoent
-getpwent
-getpwnam
-getpwuid
-getservbyname
-getservbyport
-getservent
-getsockname
-getsockopt
-glob
-gmtime
-goto
-grep
-gt
-hex
-if
-index
-int
-ioctl
-join
-keys
-kill
-last
-lc
-lcfirst
-le
-length
-link
-listen
-local
-localtime
-lock
-log
-lstat
-lt
-m
-map
-mkdir
-msgctl
-msgget
-msgrcv
-msgsnd
-my
-ne
-next
-no
-not
-oct
-open
-opendir
-or
-ord
-our
-pack
-package
-pipe
-pop
-pos
-print
-printf
-prototype
-push
-q
-qq
-qr
-quotemeta
-qw
-qx
-rand
-read
-readdir
-readline
-readlink
-readpipe
-recv
-redo
-ref
-rename
-require
-reset
-return
-reverse
-rewinddir
-rindex
-rmdir
-s
-scalar
-seek
-seekdir
-select
-semctl
-semget
-semop
-send
-setgrent
-sethostent
-setnetent
-setpgrp
-setpriority
-setprotoent
-setpwent
-setservent
-setsockopt
-shift
-shmctl
-shmget
-shmread
-shmwrite
-shutdown
-sin
-sleep
-socket
-socketpair
-sort
-splice
-split
-sprintf
-sqrt
-srand
-stat
-study
-sub
-substr
-symlink
-syscall
-sysopen
-sysread
-sysseek
-system
-syswrite
-tell
-telldir
-tie
-tied
-time
-times
-tr
-truncate
-uc
-ucfirst
-umask
-undef
-unless
-unlink
-unpack
-unshift
-untie
-until
-use
-utime
-values
-vec
-wait
-waitpid
-wantarray
-warn
-while
-write
-x
-xor
-y
diff --git a/contrib/perl5/lib/AnyDBM_File.pm b/contrib/perl5/lib/AnyDBM_File.pm
deleted file mode 100644
index 58ffda7..0000000
--- a/contrib/perl5/lib/AnyDBM_File.pm
+++ /dev/null
@@ -1,92 +0,0 @@
-package AnyDBM_File;
-
-use 5.005_64;
-our @ISA = qw(NDBM_File DB_File GDBM_File SDBM_File ODBM_File) unless @ISA;
-
-my $mod;
-for $mod (@ISA) {
- if (eval "require $mod") {
- @ISA = ($mod); # if we leave @ISA alone, warnings abound
- return 1;
- }
-}
-
-die "No DBM package was successfully found or installed";
-#return 0;
-
-=head1 NAME
-
-AnyDBM_File - provide framework for multiple DBMs
-
-NDBM_File, DB_File, GDBM_File, SDBM_File, ODBM_File - various DBM implementations
-
-=head1 SYNOPSIS
-
- use AnyDBM_File;
-
-=head1 DESCRIPTION
-
-This module is a "pure virtual base class"--it has nothing of its own.
-It's just there to inherit from one of the various DBM packages. It
-prefers ndbm for compatibility reasons with Perl 4, then Berkeley DB (See
-L<DB_File>), GDBM, SDBM (which is always there--it comes with Perl), and
-finally ODBM. This way old programs that used to use NDBM via dbmopen()
-can still do so, but new ones can reorder @ISA:
-
- BEGIN { @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File) }
- use AnyDBM_File;
-
-Having multiple DBM implementations makes it trivial to copy database formats:
-
- use POSIX; use NDBM_File; use DB_File;
- tie %newhash, 'DB_File', $new_filename, O_CREAT|O_RDWR;
- tie %oldhash, 'NDBM_File', $old_filename, 1, 0;
- %newhash = %oldhash;
-
-=head2 DBM Comparisons
-
-Here's a partial table of features the different packages offer:
-
- odbm ndbm sdbm gdbm bsd-db
- ---- ---- ---- ---- ------
- Linkage comes w/ perl yes yes yes yes yes
- Src comes w/ perl no no yes no no
- Comes w/ many unix os yes yes[0] no no no
- Builds ok on !unix ? ? yes yes ?
- Code Size ? ? small big big
- Database Size ? ? small big? ok[1]
- Speed ? ? slow ok fast
- FTPable no no yes yes yes
- Easy to build N/A N/A yes yes ok[2]
- Size limits 1k 4k 1k[3] none none
- Byte-order independent no no no no yes
- Licensing restrictions ? ? no yes no
-
-
-=over 4
-
-=item [0]
-
-on mixed universe machines, may be in the bsd compat library,
-which is often shunned.
-
-=item [1]
-
-Can be trimmed if you compile for one access method.
-
-=item [2]
-
-See L<DB_File>.
-Requires symbolic links.
-
-=item [3]
-
-By default, but can be redefined.
-
-=back
-
-=head1 SEE ALSO
-
-dbm(3), ndbm(3), DB_File(3), L<perldbmfilter>
-
-=cut
diff --git a/contrib/perl5/lib/AutoLoader.pm b/contrib/perl5/lib/AutoLoader.pm
deleted file mode 100644
index ad6bc40..0000000
--- a/contrib/perl5/lib/AutoLoader.pm
+++ /dev/null
@@ -1,325 +0,0 @@
-package AutoLoader;
-
-use 5.005_64;
-our(@EXPORT, @EXPORT_OK, $VERSION);
-
-my $is_dosish;
-my $is_epoc;
-my $is_vms;
-my $is_macos;
-
-BEGIN {
- require Exporter;
- @EXPORT = @EXPORT = ();
- @EXPORT_OK = @EXPORT_OK = qw(AUTOLOAD);
- $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32';
- $is_epoc = $^O eq 'epoc';
- $is_vms = $^O eq 'VMS';
- $is_macos = $^O eq 'MacOS';
- $VERSION = '5.58';
-}
-
-AUTOLOAD {
- my $sub = $AUTOLOAD;
- my $filename;
- # Braces used to preserve $1 et al.
- {
- # Try to find the autoloaded file from the package-qualified
- # name of the sub. e.g., if the sub needed is
- # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is
- # something like '/usr/lib/perl5/Getopt/Long.pm', and the
- # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'.
- #
- # However, if @INC is a relative path, this might not work. If,
- # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is
- # 'lib/Getopt/Long.pm', and we want to require
- # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib').
- # In this case, we simple prepend the 'auto/' and let the
- # C<require> take care of the searching for us.
-
- my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/);
- $pkg =~ s#::#/#g;
- if (defined($filename = $INC{"$pkg.pm"})) {
- if ($is_macos) {
- $pkg =~ tr#/#:#;
- $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s;
- } else {
- $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s;
- }
-
- # if the file exists, then make sure that it is a
- # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al',
- # or './lib/auto/foo/bar.al'. This avoids C<require> searching
- # (and failing) to find the 'lib/auto/foo/bar.al' because it
- # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib').
-
- if (-r $filename) {
- unless ($filename =~ m|^/|s) {
- if ($is_dosish) {
- unless ($filename =~ m{^([a-z]:)?[\\/]}is) {
- $filename = "./$filename";
- }
- }
- elsif ($is_epoc) {
- unless ($filename =~ m{^([a-z?]:)?[\\/]}is) {
- $filename = "./$filename";
- }
- }elsif ($is_vms) {
- # XXX todo by VMSmiths
- $filename = "./$filename";
- }
- elsif (!$is_macos) {
- $filename = "./$filename";
- }
- }
- }
- else {
- $filename = undef;
- }
- }
- unless (defined $filename) {
- # let C<require> do the searching
- $filename = "auto/$sub.al";
- $filename =~ s#::#/#g;
- }
- }
- my $save = $@;
- eval { local $SIG{__DIE__}; require $filename };
- if ($@) {
- if (substr($sub,-9) eq '::DESTROY') {
- *$sub = sub {};
- } else {
- # The load might just have failed because the filename was too
- # long for some old SVR3 systems which treat long names as errors.
- # If we can succesfully truncate a long name then it's worth a go.
- # There is a slight risk that we could pick up the wrong file here
- # but autosplit should have warned about that when splitting.
- if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
- eval { local $SIG{__DIE__}; require $filename };
- }
- if ($@){
- $@ =~ s/ at .*\n//;
- my $error = $@;
- require Carp;
- Carp::croak($error);
- }
- }
- }
- $@ = $save;
- goto &$sub;
-}
-
-sub import {
- my $pkg = shift;
- my $callpkg = caller;
-
- #
- # Export symbols, but not by accident of inheritance.
- #
-
- if ($pkg eq 'AutoLoader') {
- local $Exporter::ExportLevel = 1;
- Exporter::import $pkg, @_;
- }
-
- #
- # Try to find the autosplit index file. Eg., if the call package
- # is POSIX, then $INC{POSIX.pm} is something like
- # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in
- # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that.
- #
- # However, if @INC is a relative path, this might not work. If,
- # for example, @INC = ('lib'), then
- # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require
- # 'auto/POSIX/autosplit.ix' (without the leading 'lib').
- #
-
- (my $calldir = $callpkg) =~ s#::#/#g;
- my $path = $INC{$calldir . '.pm'};
- if (defined($path)) {
- # Try absolute path name.
- $path =~ s#^(.*)$calldir\.pm$#$1auto/$calldir/autosplit.ix#;
- eval { require $path; };
- # If that failed, try relative path with normal @INC searching.
- if ($@) {
- $path ="auto/$calldir/autosplit.ix";
- eval { require $path; };
- }
- if ($@) {
- my $error = $@;
- require Carp;
- Carp::carp($error);
- }
- }
-}
-
-sub unimport {
- my $callpkg = caller;
- eval "package $callpkg; sub AUTOLOAD;";
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-AutoLoader - load subroutines only on demand
-
-=head1 SYNOPSIS
-
- package Foo;
- use AutoLoader 'AUTOLOAD'; # import the default AUTOLOAD subroutine
-
- package Bar;
- use AutoLoader; # don't import AUTOLOAD, define our own
- sub AUTOLOAD {
- ...
- $AutoLoader::AUTOLOAD = "...";
- goto &AutoLoader::AUTOLOAD;
- }
-
-=head1 DESCRIPTION
-
-The B<AutoLoader> module works with the B<AutoSplit> module and the
-C<__END__> token to defer the loading of some subroutines until they are
-used rather than loading them all at once.
-
-To use B<AutoLoader>, the author of a module has to place the
-definitions of subroutines to be autoloaded after an C<__END__> token.
-(See L<perldata>.) The B<AutoSplit> module can then be run manually to
-extract the definitions into individual files F<auto/funcname.al>.
-
-B<AutoLoader> implements an AUTOLOAD subroutine. When an undefined
-subroutine in is called in a client module of B<AutoLoader>,
-B<AutoLoader>'s AUTOLOAD subroutine attempts to locate the subroutine in a
-file with a name related to the location of the file from which the
-client module was read. As an example, if F<POSIX.pm> is located in
-F</usr/local/lib/perl5/POSIX.pm>, B<AutoLoader> will look for perl
-subroutines B<POSIX> in F</usr/local/lib/perl5/auto/POSIX/*.al>, where
-the C<.al> file has the same name as the subroutine, sans package. If
-such a file exists, AUTOLOAD will read and evaluate it,
-thus (presumably) defining the needed subroutine. AUTOLOAD will then
-C<goto> the newly defined subroutine.
-
-Once this process completes for a given function, it is defined, so
-future calls to the subroutine will bypass the AUTOLOAD mechanism.
-
-=head2 Subroutine Stubs
-
-In order for object method lookup and/or prototype checking to operate
-correctly even when methods have not yet been defined it is necessary to
-"forward declare" each subroutine (as in C<sub NAME;>). See
-L<perlsub/"SYNOPSIS">. Such forward declaration creates "subroutine
-stubs", which are place holders with no code.
-
-The AutoSplit and B<AutoLoader> modules automate the creation of forward
-declarations. The AutoSplit module creates an 'index' file containing
-forward declarations of all the AutoSplit subroutines. When the
-AutoLoader module is 'use'd it loads these declarations into its callers
-package.
-
-Because of this mechanism it is important that B<AutoLoader> is always
-C<use>d and not C<require>d.
-
-=head2 Using B<AutoLoader>'s AUTOLOAD Subroutine
-
-In order to use B<AutoLoader>'s AUTOLOAD subroutine you I<must>
-explicitly import it:
-
- use AutoLoader 'AUTOLOAD';
-
-=head2 Overriding B<AutoLoader>'s AUTOLOAD Subroutine
-
-Some modules, mainly extensions, provide their own AUTOLOAD subroutines.
-They typically need to check for some special cases (such as constants)
-and then fallback to B<AutoLoader>'s AUTOLOAD for the rest.
-
-Such modules should I<not> import B<AutoLoader>'s AUTOLOAD subroutine.
-Instead, they should define their own AUTOLOAD subroutines along these
-lines:
-
- use AutoLoader;
- use Carp;
-
- sub AUTOLOAD {
- my $sub = $AUTOLOAD;
- (my $constname = $sub) =~ s/.*:://;
- my $val = constant($constname, @_ ? $_[0] : 0);
- if ($! != 0) {
- if ($! =~ /Invalid/ || $!{EINVAL}) {
- $AutoLoader::AUTOLOAD = $sub;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- croak "Your vendor has not defined constant $constname";
- }
- }
- *$sub = sub { $val }; # same as: eval "sub $sub { $val }";
- goto &$sub;
- }
-
-If any module's own AUTOLOAD subroutine has no need to fallback to the
-AutoLoader's AUTOLOAD subroutine (because it doesn't have any AutoSplit
-subroutines), then that module should not use B<AutoLoader> at all.
-
-=head2 Package Lexicals
-
-Package lexicals declared with C<my> in the main block of a package
-using B<AutoLoader> will not be visible to auto-loaded subroutines, due to
-the fact that the given scope ends at the C<__END__> marker. A module
-using such variables as package globals will not work properly under the
-B<AutoLoader>.
-
-The C<vars> pragma (see L<perlmod/"vars">) may be used in such
-situations as an alternative to explicitly qualifying all globals with
-the package namespace. Variables pre-declared with this pragma will be
-visible to any autoloaded routines (but will not be invisible outside
-the package, unfortunately).
-
-=head2 Not Using AutoLoader
-
-You can stop using AutoLoader by simply
-
- no AutoLoader;
-
-=head2 B<AutoLoader> vs. B<SelfLoader>
-
-The B<AutoLoader> is similar in purpose to B<SelfLoader>: both delay the
-loading of subroutines.
-
-B<SelfLoader> uses the C<__DATA__> marker rather than C<__END__>.
-While this avoids the use of a hierarchy of disk files and the
-associated open/close for each routine loaded, B<SelfLoader> suffers a
-startup speed disadvantage in the one-time parsing of the lines after
-C<__DATA__>, after which routines are cached. B<SelfLoader> can also
-handle multiple packages in a file.
-
-B<AutoLoader> only reads code as it is requested, and in many cases
-should be faster, but requires a mechanism like B<AutoSplit> be used to
-create the individual files. L<ExtUtils::MakeMaker> will invoke
-B<AutoSplit> automatically if B<AutoLoader> is used in a module source
-file.
-
-=head1 CAVEATS
-
-AutoLoaders prior to Perl 5.002 had a slightly different interface. Any
-old modules which use B<AutoLoader> should be changed to the new calling
-style. Typically this just means changing a require to a use, adding
-the explicit C<'AUTOLOAD'> import if needed, and removing B<AutoLoader>
-from C<@ISA>.
-
-On systems with restrictions on file name length, the file corresponding
-to a subroutine may have a shorter name that the routine itself. This
-can lead to conflicting file names. The I<AutoSplit> package warns of
-these potential conflicts when used to split a module.
-
-AutoLoader may fail to find the autosplit files (or even find the wrong
-ones) in cases where C<@INC> contains relative paths, B<and> the program
-does C<chdir>.
-
-=head1 SEE ALSO
-
-L<SelfLoader> - an autoloader that doesn't use external files.
-
-=cut
diff --git a/contrib/perl5/lib/AutoSplit.pm b/contrib/perl5/lib/AutoSplit.pm
deleted file mode 100644
index 8fcf528..0000000
--- a/contrib/perl5/lib/AutoSplit.pm
+++ /dev/null
@@ -1,487 +0,0 @@
-package AutoSplit;
-
-use 5.005_64;
-use Exporter ();
-use Config qw(%Config);
-use Carp qw(carp);
-use File::Basename ();
-use File::Path qw(mkpath);
-use File::Spec::Functions qw(curdir catfile);
-use strict;
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Verbose, $Keep, $Maxlen,
- $CheckForAutoloader, $CheckModTime);
-
-$VERSION = "1.0305";
-@ISA = qw(Exporter);
-@EXPORT = qw(&autosplit &autosplit_lib_modules);
-@EXPORT_OK = qw($Verbose $Keep $Maxlen $CheckForAutoloader $CheckModTime);
-
-=head1 NAME
-
-AutoSplit - split a package for autoloading
-
-=head1 SYNOPSIS
-
- autosplit($file, $dir, $keep, $check, $modtime);
-
- autosplit_lib_modules(@modules);
-
-=head1 DESCRIPTION
-
-This function will split up your program into files that the AutoLoader
-module can handle. It is used by both the standard perl libraries and by
-the MakeMaker utility, to automatically configure libraries for autoloading.
-
-The C<autosplit> interface splits the specified file into a hierarchy
-rooted at the directory C<$dir>. It creates directories as needed to reflect
-class hierarchy, and creates the file F<autosplit.ix>. This file acts as
-both forward declaration of all package routines, and as timestamp for the
-last update of the hierarchy.
-
-The remaining three arguments to C<autosplit> govern other options to
-the autosplitter.
-
-=over 2
-
-=item $keep
-
-If the third argument, I<$keep>, is false, then any
-pre-existing C<*.al> files in the autoload directory are removed if
-they are no longer part of the module (obsoleted functions).
-$keep defaults to 0.
-
-=item $check
-
-The
-fourth argument, I<$check>, instructs C<autosplit> to check the module
-currently being split to ensure that it does include a C<use>
-specification for the AutoLoader module, and skips the module if
-AutoLoader is not detected.
-$check defaults to 1.
-
-=item $modtime
-
-Lastly, the I<$modtime> argument specifies
-that C<autosplit> is to check the modification time of the module
-against that of the C<autosplit.ix> file, and only split the module if
-it is newer.
-$modtime defaults to 1.
-
-=back
-
-Typical use of AutoSplit in the perl MakeMaker utility is via the command-line
-with:
-
- perl -e 'use AutoSplit; autosplit($ARGV[0], $ARGV[1], 0, 1, 1)'
-
-Defined as a Make macro, it is invoked with file and directory arguments;
-C<autosplit> will split the specified file into the specified directory and
-delete obsolete C<.al> files, after checking first that the module does use
-the AutoLoader, and ensuring that the module is not already currently split
-in its current form (the modtime test).
-
-The C<autosplit_lib_modules> form is used in the building of perl. It takes
-as input a list of files (modules) that are assumed to reside in a directory
-B<lib> relative to the current directory. Each file is sent to the
-autosplitter one at a time, to be split into the directory B<lib/auto>.
-
-In both usages of the autosplitter, only subroutines defined following the
-perl I<__END__> token are split out into separate files. Some
-routines may be placed prior to this marker to force their immediate loading
-and parsing.
-
-=head2 Multiple packages
-
-As of version 1.01 of the AutoSplit module it is possible to have
-multiple packages within a single file. Both of the following cases
-are supported:
-
- package NAME;
- __END__
- sub AAA { ... }
- package NAME::option1;
- sub BBB { ... }
- package NAME::option2;
- sub BBB { ... }
-
- package NAME;
- __END__
- sub AAA { ... }
- sub NAME::option1::BBB { ... }
- sub NAME::option2::BBB { ... }
-
-=head1 DIAGNOSTICS
-
-C<AutoSplit> will inform the user if it is necessary to create the
-top-level directory specified in the invocation. It is preferred that
-the script or installation process that invokes C<AutoSplit> have
-created the full directory path ahead of time. This warning may
-indicate that the module is being split into an incorrect path.
-
-C<AutoSplit> will warn the user of all subroutines whose name causes
-potential file naming conflicts on machines with drastically limited
-(8 characters or less) file name length. Since the subroutine name is
-used as the file name, these warnings can aid in portability to such
-systems.
-
-Warnings are issued and the file skipped if C<AutoSplit> cannot locate
-either the I<__END__> marker or a "package Name;"-style specification.
-
-C<AutoSplit> will also emit general diagnostics for inability to
-create directories or files.
-
-=cut
-
-# for portability warn about names longer than $maxlen
-$Maxlen = 8; # 8 for dos, 11 (14-".al") for SYSVR3
-$Verbose = 1; # 0=none, 1=minimal, 2=list .al files
-$Keep = 0;
-$CheckForAutoloader = 1;
-$CheckModTime = 1;
-
-my $IndexFile = "autosplit.ix"; # file also serves as timestamp
-my $maxflen = 255;
-$maxflen = 14 if $Config{'d_flexfnam'} ne 'define';
-if (defined (&Dos::UseLFN)) {
- $maxflen = Dos::UseLFN() ? 255 : 11;
-}
-my $Is_VMS = ($^O eq 'VMS');
-
-# allow checking for valid ': attrlist' attachments
-my $nested;
-$nested = qr{ \( (?: (?> [^()]+ ) | (??{ $nested }) )* \) }x;
-my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) (?:\s*\:\s*|\s+(?!\:)) }x;
-my $attr_list = qr{ \s* : \s* (?: $one_attr )* }x;
-
-
-
-sub autosplit{
- my($file, $autodir, $keep, $ckal, $ckmt) = @_;
- # $file - the perl source file to be split (after __END__)
- # $autodir - the ".../auto" dir below which to write split subs
- # Handle optional flags:
- $keep = $Keep unless defined $keep;
- $ckal = $CheckForAutoloader unless defined $ckal;
- $ckmt = $CheckModTime unless defined $ckmt;
- autosplit_file($file, $autodir, $keep, $ckal, $ckmt);
-}
-
-
-# This function is used during perl building/installation
-# ./miniperl -e 'use AutoSplit; autosplit_lib_modules(@ARGV)' ...
-
-sub autosplit_lib_modules{
- my(@modules) = @_; # list of Module names
-
- while(defined($_ = shift @modules)){
- while (m#(.*?[^:])::([^:].*)#) { # in case specified as ABC::XYZ
- $_ = catfile($1, $2);
- }
- s|\\|/|g; # bug in ksh OS/2
- s#^lib/##s; # incase specified as lib/*.pm
- my($lib) = catfile(curdir(), "lib");
- if ($Is_VMS) { # may need to convert VMS-style filespecs
- $lib =~ s#^\[\]#.\/#;
- }
- s#^$lib\W+##s; # incase specified as ./lib/*.pm
- if ($Is_VMS && /[:>\]]/) { # may need to convert VMS-style filespecs
- my ($dir,$name) = (/(.*])(.*)/s);
- $dir =~ s/.*lib[\.\]]//s;
- $dir =~ s#[\.\]]#/#g;
- $_ = $dir . $name;
- }
- autosplit_file(catfile($lib, $_), catfile($lib, "auto"),
- $Keep, $CheckForAutoloader, $CheckModTime);
- }
- 0;
-}
-
-
-# private functions
-
-sub autosplit_file {
- my($filename, $autodir, $keep, $check_for_autoloader, $check_mod_time)
- = @_;
- my(@outfiles);
- local($_);
- local($/) = "\n";
-
- # where to write output files
- $autodir ||= catfile(curdir(), "lib", "auto");
- if ($Is_VMS) {
- ($autodir = VMS::Filespec::unixpath($autodir)) =~ s|/\z||;
- $filename = VMS::Filespec::unixify($filename); # may have dirs
- }
- unless (-d $autodir){
- mkpath($autodir,0,0755);
- # We should never need to create the auto dir
- # here. installperl (or similar) should have done
- # it. Expecting it to exist is a valuable sanity check against
- # autosplitting into some random directory by mistake.
- print "Warning: AutoSplit had to create top-level " .
- "$autodir unexpectedly.\n";
- }
-
- # allow just a package name to be used
- $filename .= ".pm" unless ($filename =~ m/\.pm\z/);
-
- open(IN, "<$filename") or die "AutoSplit: Can't open $filename: $!\n";
- my($pm_mod_time) = (stat($filename))[9];
- my($autoloader_seen) = 0;
- my($in_pod) = 0;
- my($def_package,$last_package,$this_package,$fnr);
- while (<IN>) {
- # Skip pod text.
- $fnr++;
- $in_pod = 1 if /^=\w/;
- $in_pod = 0 if /^=cut/;
- next if ($in_pod || /^=cut/);
-
- # record last package name seen
- $def_package = $1 if (m/^\s*package\s+([\w:]+)\s*;/);
- ++$autoloader_seen if m/^\s*(use|require)\s+AutoLoader\b/;
- ++$autoloader_seen if m/\bISA\s*=.*\bAutoLoader\b/;
- last if /^__END__/;
- }
- if ($check_for_autoloader && !$autoloader_seen){
- print "AutoSplit skipped $filename: no AutoLoader used\n"
- if ($Verbose>=2);
- return 0;
- }
- $_ or die "Can't find __END__ in $filename\n";
-
- $def_package or die "Can't find 'package Name;' in $filename\n";
-
- my($modpname) = _modpname($def_package);
- if ($Is_VMS) {
- $modpname = VMS::Filespec::unixify($modpname); # may have dirs
- }
-
- # this _has_ to match so we have a reasonable timestamp file
- die "Package $def_package ($modpname.pm) does not ".
- "match filename $filename"
- unless ($filename =~ m/\Q$modpname.pm\E$/ or
- ($^O eq 'dos') or ($^O eq 'MSWin32') or
- $Is_VMS && $filename =~ m/$modpname.pm/i);
-
- my($al_idx_file) = catfile($autodir, $modpname, $IndexFile);
-
- if ($check_mod_time){
- my($al_ts_time) = (stat("$al_idx_file"))[9] || 1;
- if ($al_ts_time >= $pm_mod_time){
- print "AutoSplit skipped ($al_idx_file newer than $filename)\n"
- if ($Verbose >= 2);
- return undef; # one undef, not a list
- }
- }
-
- my($modnamedir) = catfile($autodir, $modpname);
- print "AutoSplitting $filename ($modnamedir)\n"
- if $Verbose;
-
- unless (-d $modnamedir){
- mkpath($modnamedir,0,0777);
- }
-
- # We must try to deal with some SVR3 systems with a limit of 14
- # characters for file names. Sadly we *cannot* simply truncate all
- # file names to 14 characters on these systems because we *must*
- # create filenames which exactly match the names used by AutoLoader.pm.
- # This is a problem because some systems silently truncate the file
- # names while others treat long file names as an error.
-
- my $Is83 = $maxflen==11; # plain, case INSENSITIVE dos filenames
-
- my(@subnames, $subname, %proto, %package);
- my @cache = ();
- my $caching = 1;
- $last_package = '';
- while (<IN>) {
- $fnr++;
- $in_pod = 1 if /^=\w/;
- $in_pod = 0 if /^=cut/;
- next if ($in_pod || /^=cut/);
- # the following (tempting) old coding gives big troubles if a
- # cut is forgotten at EOF:
- # next if /^=\w/ .. /^=cut/;
- if (/^package\s+([\w:]+)\s*;/) {
- $this_package = $def_package = $1;
- }
- if (/^sub\s+([\w:]+)(\s*(?:\(.*?\))?(?:$attr_list)?)/) {
- print OUT "# end of $last_package\::$subname\n1;\n"
- if $last_package;
- $subname = $1;
- my $proto = $2 || '';
- if ($subname =~ s/(.*):://){
- $this_package = $1;
- } else {
- $this_package = $def_package;
- }
- my $fq_subname = "$this_package\::$subname";
- $package{$fq_subname} = $this_package;
- $proto{$fq_subname} = $proto;
- push(@subnames, $fq_subname);
- my($lname, $sname) = ($subname, substr($subname,0,$maxflen-3));
- $modpname = _modpname($this_package);
- my($modnamedir) = catfile($autodir, $modpname);
- mkpath($modnamedir,0,0777);
- my($lpath) = catfile($modnamedir, "$lname.al");
- my($spath) = catfile($modnamedir, "$sname.al");
- my $path;
- if (!$Is83 and open(OUT, ">$lpath")){
- $path=$lpath;
- print " writing $lpath\n" if ($Verbose>=2);
- } else {
- open(OUT, ">$spath") or die "Can't create $spath: $!\n";
- $path=$spath;
- print " writing $spath (with truncated name)\n"
- if ($Verbose>=1);
- }
- push(@outfiles, $path);
- print OUT <<EOT;
-# NOTE: Derived from $filename.
-# Changes made here will be lost when autosplit again.
-# See AutoSplit.pm.
-package $this_package;
-
-#line $fnr "$filename (autosplit into $path)"
-EOT
- print OUT @cache;
- @cache = ();
- $caching = 0;
- }
- if($caching) {
- push(@cache, $_) if @cache || /\S/;
- } else {
- print OUT $_;
- }
- if(/^\}/) {
- if($caching) {
- print OUT @cache;
- @cache = ();
- }
- print OUT "\n";
- $caching = 1;
- }
- $last_package = $this_package if defined $this_package;
- }
- if ($subname) {
- print OUT @cache,"1;\n# end of $last_package\::$subname\n";
- close(OUT);
- }
- close(IN);
-
- if (!$keep){ # don't keep any obsolete *.al files in the directory
- my(%outfiles);
- # @outfiles{@outfiles} = @outfiles;
- # perl downcases all filenames on VMS (which upcases all filenames) so
- # we'd better downcase the sub name list too, or subs with upper case
- # letters in them will get their .al files deleted right after they're
- # created. (The mixed case sub name won't match the all-lowercase
- # filename, and so be cleaned up as a scrap file)
- if ($Is_VMS or $Is83) {
- %outfiles = map {lc($_) => lc($_) } @outfiles;
- } else {
- @outfiles{@outfiles} = @outfiles;
- }
- my(%outdirs,@outdirs);
- for (@outfiles) {
- $outdirs{File::Basename::dirname($_)}||=1;
- }
- for my $dir (keys %outdirs) {
- opendir(OUTDIR,$dir);
- foreach (sort readdir(OUTDIR)){
- next unless /\.al\z/;
- my($file) = catfile($dir, $_);
- $file = lc $file if $Is83 or $Is_VMS;
- next if $outfiles{$file};
- print " deleting $file\n" if ($Verbose>=2);
- my($deleted,$thistime); # catch all versions on VMS
- do { $deleted += ($thistime = unlink $file) } while ($thistime);
- carp "Unable to delete $file: $!" unless $deleted;
- }
- closedir(OUTDIR);
- }
- }
-
- open(TS,">$al_idx_file") or
- carp "AutoSplit: unable to create timestamp file ($al_idx_file): $!";
- print TS "# Index created by AutoSplit for $filename\n";
- print TS "# (file acts as timestamp)\n";
- $last_package = '';
- for my $fqs (@subnames) {
- my($subname) = $fqs;
- $subname =~ s/.*:://;
- print TS "package $package{$fqs};\n"
- unless $last_package eq $package{$fqs};
- print TS "sub $subname $proto{$fqs};\n";
- $last_package = $package{$fqs};
- }
- print TS "1;\n";
- close(TS);
-
- _check_unique($filename, $Maxlen, 1, @outfiles);
-
- @outfiles;
-}
-
-sub _modpname ($) {
- my($package) = @_;
- my $modpname = $package;
- if ($^O eq 'MSWin32') {
- $modpname =~ s#::#\\#g;
- } else {
- while ($modpname =~ m#(.*?[^:])::([^:].*)#) {
- $modpname = catfile($1, $2);
- }
- }
- $modpname;
-}
-
-sub _check_unique {
- my($filename, $maxlen, $warn, @outfiles) = @_;
- my(%notuniq) = ();
- my(%shorts) = ();
- my(@toolong) = grep(
- length(File::Basename::basename($_))
- > $maxlen,
- @outfiles
- );
-
- foreach (@toolong){
- my($dir) = File::Basename::dirname($_);
- my($file) = File::Basename::basename($_);
- my($trunc) = substr($file,0,$maxlen);
- $notuniq{$dir}{$trunc} = 1 if $shorts{$dir}{$trunc};
- $shorts{$dir}{$trunc} = $shorts{$dir}{$trunc} ?
- "$shorts{$dir}{$trunc}, $file" : $file;
- }
- if (%notuniq && $warn){
- print "$filename: some names are not unique when " .
- "truncated to $maxlen characters:\n";
- foreach my $dir (sort keys %notuniq){
- print " directory $dir:\n";
- foreach my $trunc (sort keys %{$notuniq{$dir}}) {
- print " $shorts{$dir}{$trunc} truncate to $trunc\n";
- }
- }
- }
-}
-
-1;
-__END__
-
-# test functions so AutoSplit.pm can be applied to itself:
-sub test1 ($) { "test 1\n"; }
-sub test2 ($$) { "test 2\n"; }
-sub test3 ($$$) { "test 3\n"; }
-sub testtesttesttest4_1 { "test 4\n"; }
-sub testtesttesttest4_2 { "duplicate test 4\n"; }
-sub Just::Another::test5 { "another test 5\n"; }
-sub test6 { return join ":", __FILE__,__LINE__; }
-package Yet::Another::AutoSplit;
-sub testtesttesttest4_1 ($) { "another test 4\n"; }
-sub testtesttesttest4_2 ($$) { "another duplicate test 4\n"; }
-package Yet::More::Attributes;
-sub test_a1 ($) : locked :locked { 1; }
-sub test_a2 : locked { 1; }
diff --git a/contrib/perl5/lib/Benchmark.pm b/contrib/perl5/lib/Benchmark.pm
deleted file mode 100644
index b557be3..0000000
--- a/contrib/perl5/lib/Benchmark.pm
+++ /dev/null
@@ -1,798 +0,0 @@
-package Benchmark;
-
-=head1 NAME
-
-Benchmark - benchmark running times of Perl code
-
-=head1 SYNOPSIS
-
- timethis ($count, "code");
-
- # Use Perl code in strings...
- timethese($count, {
- 'Name1' => '...code1...',
- 'Name2' => '...code2...',
- });
-
- # ... or use subroutine references.
- timethese($count, {
- 'Name1' => sub { ...code1... },
- 'Name2' => sub { ...code2... },
- });
-
- # cmpthese can be used both ways as well
- cmpthese($count, {
- 'Name1' => '...code1...',
- 'Name2' => '...code2...',
- });
-
- cmpthese($count, {
- 'Name1' => sub { ...code1... },
- 'Name2' => sub { ...code2... },
- });
-
- # ...or in two stages
- $results = timethese($count,
- {
- 'Name1' => sub { ...code1... },
- 'Name2' => sub { ...code2... },
- },
- 'none'
- );
- cmpthese( $results ) ;
-
- $t = timeit($count, '...other code...')
- print "$count loops of other code took:",timestr($t),"\n";
-
- $t = countit($time, '...other code...')
- $count = $t->iters ;
- print "$count loops of other code took:",timestr($t),"\n";
-
-=head1 DESCRIPTION
-
-The Benchmark module encapsulates a number of routines to help you
-figure out how long it takes to execute some code.
-
-timethis - run a chunk of code several times
-
-timethese - run several chunks of code several times
-
-cmpthese - print results of timethese as a comparison chart
-
-timeit - run a chunk of code and see how long it goes
-
-countit - see how many times a chunk of code runs in a given time
-
-
-=head2 Methods
-
-=over 10
-
-=item new
-
-Returns the current time. Example:
-
- use Benchmark;
- $t0 = new Benchmark;
- # ... your code here ...
- $t1 = new Benchmark;
- $td = timediff($t1, $t0);
- print "the code took:",timestr($td),"\n";
-
-=item debug
-
-Enables or disable debugging by setting the C<$Benchmark::Debug> flag:
-
- debug Benchmark 1;
- $t = timeit(10, ' 5 ** $Global ');
- debug Benchmark 0;
-
-=item iters
-
-Returns the number of iterations.
-
-=back
-
-=head2 Standard Exports
-
-The following routines will be exported into your namespace
-if you use the Benchmark module:
-
-=over 10
-
-=item timeit(COUNT, CODE)
-
-Arguments: COUNT is the number of times to run the loop, and CODE is
-the code to run. CODE may be either a code reference or a string to
-be eval'd; either way it will be run in the caller's package.
-
-Returns: a Benchmark object.
-
-=item timethis ( COUNT, CODE, [ TITLE, [ STYLE ]] )
-
-Time COUNT iterations of CODE. CODE may be a string to eval or a
-code reference; either way the CODE will run in the caller's package.
-Results will be printed to STDOUT as TITLE followed by the times.
-TITLE defaults to "timethis COUNT" if none is provided. STYLE
-determines the format of the output, as described for timestr() below.
-
-The COUNT can be zero or negative: this means the I<minimum number of
-CPU seconds> to run. A zero signifies the default of 3 seconds. For
-example to run at least for 10 seconds:
-
- timethis(-10, $code)
-
-or to run two pieces of code tests for at least 3 seconds:
-
- timethese(0, { test1 => '...', test2 => '...'})
-
-CPU seconds is, in UNIX terms, the user time plus the system time of
-the process itself, as opposed to the real (wallclock) time and the
-time spent by the child processes. Less than 0.1 seconds is not
-accepted (-0.01 as the count, for example, will cause a fatal runtime
-exception).
-
-Note that the CPU seconds is the B<minimum> time: CPU scheduling and
-other operating system factors may complicate the attempt so that a
-little bit more time is spent. The benchmark output will, however,
-also tell the number of C<$code> runs/second, which should be a more
-interesting number than the actually spent seconds.
-
-Returns a Benchmark object.
-
-=item timethese ( COUNT, CODEHASHREF, [ STYLE ] )
-
-The CODEHASHREF is a reference to a hash containing names as keys
-and either a string to eval or a code reference for each value.
-For each (KEY, VALUE) pair in the CODEHASHREF, this routine will
-call
-
- timethis(COUNT, VALUE, KEY, STYLE)
-
-The routines are called in string comparison order of KEY.
-
-The COUNT can be zero or negative, see timethis().
-
-Returns a hash of Benchmark objects, keyed by name.
-
-=item timediff ( T1, T2 )
-
-Returns the difference between two Benchmark times as a Benchmark
-object suitable for passing to timestr().
-
-=item timestr ( TIMEDIFF, [ STYLE, [ FORMAT ] ] )
-
-Returns a string that formats the times in the TIMEDIFF object in
-the requested STYLE. TIMEDIFF is expected to be a Benchmark object
-similar to that returned by timediff().
-
-STYLE can be any of 'all', 'none', 'noc', 'nop' or 'auto'. 'all' shows
-each of the 5 times available ('wallclock' time, user time, system time,
-user time of children, and system time of children). 'noc' shows all
-except the two children times. 'nop' shows only wallclock and the
-two children times. 'auto' (the default) will act as 'all' unless
-the children times are both zero, in which case it acts as 'noc'.
-'none' prevents output.
-
-FORMAT is the L<printf(3)>-style format specifier (without the
-leading '%') to use to print the times. It defaults to '5.2f'.
-
-=back
-
-=head2 Optional Exports
-
-The following routines will be exported into your namespace
-if you specifically ask that they be imported:
-
-=over 10
-
-=item clearcache ( COUNT )
-
-Clear the cached time for COUNT rounds of the null loop.
-
-=item clearallcache ( )
-
-Clear all cached times.
-
-=item cmpthese ( COUT, CODEHASHREF, [ STYLE ] )
-
-=item cmpthese ( RESULTSHASHREF )
-
-Optionally calls timethese(), then outputs comparison chart. This
-chart is sorted from slowest to fastest, and shows the percent
-speed difference between each pair of tests. Can also be passed
-the data structure that timethese() returns:
-
- $results = timethese( .... );
- cmpthese( $results );
-
-Returns the data structure returned by timethese() (or passed in).
-
-=item countit(TIME, CODE)
-
-Arguments: TIME is the minimum length of time to run CODE for, and CODE is
-the code to run. CODE may be either a code reference or a string to
-be eval'd; either way it will be run in the caller's package.
-
-TIME is I<not> negative. countit() will run the loop many times to
-calculate the speed of CODE before running it for TIME. The actual
-time run for will usually be greater than TIME due to system clock
-resolution, so it's best to look at the number of iterations divided
-by the times that you are concerned with, not just the iterations.
-
-Returns: a Benchmark object.
-
-=item disablecache ( )
-
-Disable caching of timings for the null loop. This will force Benchmark
-to recalculate these timings for each new piece of code timed.
-
-=item enablecache ( )
-
-Enable caching of timings for the null loop. The time taken for COUNT
-rounds of the null loop will be calculated only once for each
-different COUNT used.
-
-=item timesum ( T1, T2 )
-
-Returns the sum of two Benchmark times as a Benchmark object suitable
-for passing to timestr().
-
-=back
-
-=head1 NOTES
-
-The data is stored as a list of values from the time and times
-functions:
-
- ($real, $user, $system, $children_user, $children_system, $iters)
-
-in seconds for the whole loop (not divided by the number of rounds).
-
-The timing is done using time(3) and times(3).
-
-Code is executed in the caller's package.
-
-The time of the null loop (a loop with the same
-number of rounds but empty loop body) is subtracted
-from the time of the real loop.
-
-The null loop times can be cached, the key being the
-number of rounds. The caching can be controlled using
-calls like these:
-
- clearcache($key);
- clearallcache();
-
- disablecache();
- enablecache();
-
-Caching is off by default, as it can (usually slightly) decrease
-accuracy and does not usually noticably affect runtimes.
-
-=head1 EXAMPLES
-
-For example,
-
- use Benchmark;$x=3;cmpthese(-5,{a=>sub{$x*$x},b=>sub{$x**2}})
-
-outputs something like this:
-
- Benchmark: running a, b, each for at least 5 CPU seconds...
- a: 10 wallclock secs ( 5.14 usr + 0.13 sys = 5.27 CPU) @ 3835055.60/s (n=20210743)
- b: 5 wallclock secs ( 5.41 usr + 0.00 sys = 5.41 CPU) @ 1574944.92/s (n=8520452)
- Rate b a
- b 1574945/s -- -59%
- a 3835056/s 144% --
-
-while
-
- use Benchmark;
- $x=3;
- $r=timethese(-5,{a=>sub{$x*$x},b=>sub{$x**2}},'none');
- cmpthese($r);
-
-outputs something like this:
-
- Rate b a
- b 1559428/s -- -62%
- a 4152037/s 166% --
-
-
-=head1 INHERITANCE
-
-Benchmark inherits from no other class, except of course
-for Exporter.
-
-=head1 CAVEATS
-
-Comparing eval'd strings with code references will give you
-inaccurate results: a code reference will show a slightly slower
-execution time than the equivalent eval'd string.
-
-The real time timing is done using time(2) and
-the granularity is therefore only one second.
-
-Short tests may produce negative figures because perl
-can appear to take longer to execute the empty loop
-than a short test; try:
-
- timethis(100,'1');
-
-The system time of the null loop might be slightly
-more than the system time of the loop with the actual
-code and therefore the difference might end up being E<lt> 0.
-
-=head1 SEE ALSO
-
-L<Devel::DProf> - a Perl code profiler
-
-=head1 AUTHORS
-
-Jarkko Hietaniemi <F<jhi@iki.fi>>, Tim Bunce <F<Tim.Bunce@ig.co.uk>>
-
-=head1 MODIFICATION HISTORY
-
-September 8th, 1994; by Tim Bunce.
-
-March 28th, 1997; by Hugo van der Sanden: added support for code
-references and the already documented 'debug' method; revamped
-documentation.
-
-April 04-07th, 1997: by Jarkko Hietaniemi, added the run-for-some-time
-functionality.
-
-September, 1999; by Barrie Slaymaker: math fixes and accuracy and
-efficiency tweaks. Added cmpthese(). A result is now returned from
-timethese(). Exposed countit() (was runfor()).
-
-=cut
-
-# evaluate something in a clean lexical environment
-sub _doeval { eval shift }
-
-#
-# put any lexicals at file scope AFTER here
-#
-
-use Carp;
-use Exporter;
-@ISA=(Exporter);
-@EXPORT=qw(timeit timethis timethese timediff timestr);
-@EXPORT_OK=qw(timesum cmpthese countit
- clearcache clearallcache disablecache enablecache);
-
-$VERSION = 1.00;
-
-&init;
-
-sub init {
- $debug = 0;
- $min_count = 4;
- $min_cpu = 0.4;
- $defaultfmt = '5.2f';
- $defaultstyle = 'auto';
- # The cache can cause a slight loss of sys time accuracy. If a
- # user does many tests (>10) with *very* large counts (>10000)
- # or works on a very slow machine the cache may be useful.
- &disablecache;
- &clearallcache;
-}
-
-sub debug { $debug = ($_[1] != 0); }
-
-# The cache needs two branches: 's' for strings and 'c' for code. The
-# emtpy loop is different in these two cases.
-sub clearcache { delete $cache{"$_[0]c"}; delete $cache{"$_[0]s"}; }
-sub clearallcache { %cache = (); }
-sub enablecache { $cache = 1; }
-sub disablecache { $cache = 0; }
-
-# --- Functions to process the 'time' data type
-
-sub new { my @t = (time, times, @_ == 2 ? $_[1] : 0);
- print "new=@t\n" if $debug;
- bless \@t; }
-
-sub cpu_p { my($r,$pu,$ps,$cu,$cs) = @{$_[0]}; $pu+$ps ; }
-sub cpu_c { my($r,$pu,$ps,$cu,$cs) = @{$_[0]}; $cu+$cs ; }
-sub cpu_a { my($r,$pu,$ps,$cu,$cs) = @{$_[0]}; $pu+$ps+$cu+$cs ; }
-sub real { my($r,$pu,$ps,$cu,$cs) = @{$_[0]}; $r ; }
-sub iters { $_[0]->[5] ; }
-
-sub timediff {
- my($a, $b) = @_;
- my @r;
- for (my $i=0; $i < @$a; ++$i) {
- push(@r, $a->[$i] - $b->[$i]);
- }
- bless \@r;
-}
-
-sub timesum {
- my($a, $b) = @_;
- my @r;
- for (my $i=0; $i < @$a; ++$i) {
- push(@r, $a->[$i] + $b->[$i]);
- }
- bless \@r;
-}
-
-sub timestr {
- my($tr, $style, $f) = @_;
- my @t = @$tr;
- warn "bad time value (@t)" unless @t==6;
- my($r, $pu, $ps, $cu, $cs, $n) = @t;
- my($pt, $ct, $tt) = ($tr->cpu_p, $tr->cpu_c, $tr->cpu_a);
- $f = $defaultfmt unless defined $f;
- # format a time in the required style, other formats may be added here
- $style ||= $defaultstyle;
- $style = ($ct>0) ? 'all' : 'noc' if $style eq 'auto';
- my $s = "@t $style"; # default for unknown style
- $s=sprintf("%2d wallclock secs (%$f usr %$f sys + %$f cusr %$f csys = %$f CPU)",
- $r,$pu,$ps,$cu,$cs,$tt) if $style eq 'all';
- $s=sprintf("%2d wallclock secs (%$f usr + %$f sys = %$f CPU)",
- $r,$pu,$ps,$pt) if $style eq 'noc';
- $s=sprintf("%2d wallclock secs (%$f cusr + %$f csys = %$f CPU)",
- $r,$cu,$cs,$ct) if $style eq 'nop';
- $s .= sprintf(" @ %$f/s (n=$n)", $n / ( $pu + $ps )) if $n && $pu+$ps;
- $s;
-}
-
-sub timedebug {
- my($msg, $t) = @_;
- print STDERR "$msg",timestr($t),"\n" if $debug;
-}
-
-# --- Functions implementing low-level support for timing loops
-
-sub runloop {
- my($n, $c) = @_;
-
- $n+=0; # force numeric now, so garbage won't creep into the eval
- croak "negative loopcount $n" if $n<0;
- confess "Usage: runloop(number, [string | coderef])" unless defined $c;
- my($t0, $t1, $td); # before, after, difference
-
- # find package of caller so we can execute code there
- my($curpack) = caller(0);
- my($i, $pack)= 0;
- while (($pack) = caller(++$i)) {
- last if $pack ne $curpack;
- }
-
- my ($subcode, $subref);
- if (ref $c eq 'CODE') {
- $subcode = "sub { for (1 .. $n) { local \$_; package $pack; &\$c; } }";
- $subref = eval $subcode;
- }
- else {
- $subcode = "sub { for (1 .. $n) { local \$_; package $pack; $c;} }";
- $subref = _doeval($subcode);
- }
- croak "runloop unable to compile '$c': $@\ncode: $subcode\n" if $@;
- print STDERR "runloop $n '$subcode'\n" if $debug;
-
- # Wait for the user timer to tick. This makes the error range more like
- # -0.01, +0. If we don't wait, then it's more like -0.01, +0.01. This
- # may not seem important, but it significantly reduces the chances of
- # getting a too low initial $n in the initial, 'find the minimum' loop
- # in &countit. This, in turn, can reduce the number of calls to
- # &runloop a lot, and thus reduce additive errors.
- my $tbase = Benchmark->new(0)->[1];
- while ( ( $t0 = Benchmark->new(0) )->[1] == $tbase ) {} ;
- &$subref;
- $t1 = Benchmark->new($n);
- $td = &timediff($t1, $t0);
- timedebug("runloop:",$td);
- $td;
-}
-
-
-sub timeit {
- my($n, $code) = @_;
- my($wn, $wc, $wd);
-
- printf STDERR "timeit $n $code\n" if $debug;
- my $cache_key = $n . ( ref( $code ) ? 'c' : 's' );
- if ($cache && exists $cache{$cache_key} ) {
- $wn = $cache{$cache_key};
- } else {
- $wn = &runloop($n, ref( $code ) ? sub { undef } : '' );
- # Can't let our baseline have any iterations, or they get subtracted
- # out of the result.
- $wn->[5] = 0;
- $cache{$cache_key} = $wn;
- }
-
- $wc = &runloop($n, $code);
-
- $wd = timediff($wc, $wn);
- timedebug("timeit: ",$wc);
- timedebug(" - ",$wn);
- timedebug(" = ",$wd);
-
- $wd;
-}
-
-
-my $default_for = 3;
-my $min_for = 0.1;
-
-
-sub countit {
- my ( $tmax, $code ) = @_;
-
- if ( not defined $tmax or $tmax == 0 ) {
- $tmax = $default_for;
- } elsif ( $tmax < 0 ) {
- $tmax = -$tmax;
- }
-
- die "countit($tmax, ...): timelimit cannot be less than $min_for.\n"
- if $tmax < $min_for;
-
- my ($n, $tc);
-
- # First find the minimum $n that gives a significant timing.
- for ($n = 1; ; $n *= 2 ) {
- my $td = timeit($n, $code);
- $tc = $td->[1] + $td->[2];
- last if $tc > 0.1;
- }
-
- my $nmin = $n;
-
- # Get $n high enough that we can guess the final $n with some accuracy.
- my $tpra = 0.1 * $tmax; # Target/time practice.
- while ( $tc < $tpra ) {
- # The 5% fudge is to keep us from iterating again all
- # that often (this speeds overall responsiveness when $tmax is big
- # and we guess a little low). This does not noticably affect
- # accuracy since we're not couting these times.
- $n = int( $tpra * 1.05 * $n / $tc ); # Linear approximation.
- my $td = timeit($n, $code);
- my $new_tc = $td->[1] + $td->[2];
- # Make sure we are making progress.
- $tc = $new_tc > 1.2 * $tc ? $new_tc : 1.2 * $tc;
- }
-
- # Now, do the 'for real' timing(s), repeating until we exceed
- # the max.
- my $ntot = 0;
- my $rtot = 0;
- my $utot = 0.0;
- my $stot = 0.0;
- my $cutot = 0.0;
- my $cstot = 0.0;
- my $ttot = 0.0;
-
- # The 5% fudge is because $n is often a few % low even for routines
- # with stable times and avoiding extra timeit()s is nice for
- # accuracy's sake.
- $n = int( $n * ( 1.05 * $tmax / $tc ) );
-
- while () {
- my $td = timeit($n, $code);
- $ntot += $n;
- $rtot += $td->[0];
- $utot += $td->[1];
- $stot += $td->[2];
- $cutot += $td->[3];
- $cstot += $td->[4];
- $ttot = $utot + $stot;
- last if $ttot >= $tmax;
-
- $ttot = 0.01 if $ttot < 0.01;
- my $r = $tmax / $ttot - 1; # Linear approximation.
- $n = int( $r * $ntot );
- $n = $nmin if $n < $nmin;
- }
-
- return bless [ $rtot, $utot, $stot, $cutot, $cstot, $ntot ];
-}
-
-# --- Functions implementing high-level time-then-print utilities
-
-sub n_to_for {
- my $n = shift;
- return $n == 0 ? $default_for : $n < 0 ? -$n : undef;
-}
-
-sub timethis{
- my($n, $code, $title, $style) = @_;
- my($t, $for, $forn);
-
- if ( $n > 0 ) {
- croak "non-integer loopcount $n, stopped" if int($n)<$n;
- $t = timeit($n, $code);
- $title = "timethis $n" unless defined $title;
- } else {
- $fort = n_to_for( $n );
- $t = countit( $fort, $code );
- $title = "timethis for $fort" unless defined $title;
- $forn = $t->[-1];
- }
- local $| = 1;
- $style = "" unless defined $style;
- printf("%10s: ", $title) unless $style eq 'none';
- print timestr($t, $style, $defaultfmt),"\n" unless $style eq 'none';
-
- $n = $forn if defined $forn;
-
- # A conservative warning to spot very silly tests.
- # Don't assume that your benchmark is ok simply because
- # you don't get this warning!
- print " (warning: too few iterations for a reliable count)\n"
- if $n < $min_count
- || ($t->real < 1 && $n < 1000)
- || $t->cpu_a < $min_cpu;
- $t;
-}
-
-sub timethese{
- my($n, $alt, $style) = @_;
- die "usage: timethese(count, { 'Name1'=>'code1', ... }\n"
- unless ref $alt eq HASH;
- my @names = sort keys %$alt;
- $style = "" unless defined $style;
- print "Benchmark: " unless $style eq 'none';
- if ( $n > 0 ) {
- croak "non-integer loopcount $n, stopped" if int($n)<$n;
- print "timing $n iterations of" unless $style eq 'none';
- } else {
- print "running" unless $style eq 'none';
- }
- print " ", join(', ',@names) unless $style eq 'none';
- unless ( $n > 0 ) {
- my $for = n_to_for( $n );
- print ", each for at least $for CPU seconds" unless $style eq 'none';
- }
- print "...\n" unless $style eq 'none';
-
- # we could save the results in an array and produce a summary here
- # sum, min, max, avg etc etc
- my %results;
- foreach my $name (@names) {
- $results{$name} = timethis ($n, $alt -> {$name}, $name, $style);
- }
-
- return \%results;
-}
-
-sub cmpthese{
- my $results = ref $_[0] ? $_[0] : timethese( @_ );
-
- return $results
- if defined $_[2] && $_[2] eq 'none';
-
- # Flatten in to an array of arrays with the name as the first field
- my @vals = map{ [ $_, @{$results->{$_}} ] } keys %$results;
-
- for (@vals) {
- # The epsilon fudge here is to prevent div by 0. Since clock
- # resolutions are much larger, it's below the noise floor.
- my $rate = $_->[6] / ( $_->[2] + $_->[3] + 0.000000000000001 );
- $_->[7] = $rate;
- }
-
- # Sort by rate
- @vals = sort { $a->[7] <=> $b->[7] } @vals;
-
- # If more than half of the rates are greater than one...
- my $display_as_rate = $vals[$#vals>>1]->[7] > 1;
-
- my @rows;
- my @col_widths;
-
- my @top_row = (
- '',
- $display_as_rate ? 'Rate' : 's/iter',
- map { $_->[0] } @vals
- );
-
- push @rows, \@top_row;
- @col_widths = map { length( $_ ) } @top_row;
-
- # Build the data rows
- # We leave the last column in even though it never has any data. Perhaps
- # it should go away. Also, perhaps a style for a single column of
- # percentages might be nice.
- for my $row_val ( @vals ) {
- my @row;
-
- # Column 0 = test name
- push @row, $row_val->[0];
- $col_widths[0] = length( $row_val->[0] )
- if length( $row_val->[0] ) > $col_widths[0];
-
- # Column 1 = performance
- my $row_rate = $row_val->[7];
-
- # We assume that we'll never get a 0 rate.
- my $a = $display_as_rate ? $row_rate : 1 / $row_rate;
-
- # Only give a few decimal places before switching to sci. notation,
- # since the results aren't usually that accurate anyway.
- my $format =
- $a >= 100 ?
- "%0.0f" :
- $a >= 10 ?
- "%0.1f" :
- $a >= 1 ?
- "%0.2f" :
- $a >= 0.1 ?
- "%0.3f" :
- "%0.2e";
-
- $format .= "/s"
- if $display_as_rate;
- # Using $b here due to optimizing bug in _58 through _61
- my $b = sprintf( $format, $a );
- push @row, $b;
- $col_widths[1] = length( $b )
- if length( $b ) > $col_widths[1];
-
- # Columns 2..N = performance ratios
- my $skip_rest = 0;
- for ( my $col_num = 0 ; $col_num < @vals ; ++$col_num ) {
- my $col_val = $vals[$col_num];
- my $out;
- if ( $skip_rest ) {
- $out = '';
- }
- elsif ( $col_val->[0] eq $row_val->[0] ) {
- $out = "--";
- # $skip_rest = 1;
- }
- else {
- my $col_rate = $col_val->[7];
- $out = sprintf( "%.0f%%", 100*$row_rate/$col_rate - 100 );
- }
- push @row, $out;
- $col_widths[$col_num+2] = length( $out )
- if length( $out ) > $col_widths[$col_num+2];
-
- # A little wierdness to set the first column width properly
- $col_widths[$col_num+2] = length( $col_val->[0] )
- if length( $col_val->[0] ) > $col_widths[$col_num+2];
- }
- push @rows, \@row;
- }
-
- # Equalize column widths in the chart as much as possible without
- # exceeding 80 characters. This does not use or affect cols 0 or 1.
- my @sorted_width_refs =
- sort { $$a <=> $$b } map { \$_ } @col_widths[2..$#col_widths];
- my $max_width = ${$sorted_width_refs[-1]};
-
- my $total = @col_widths - 1 ;
- for ( @col_widths ) { $total += $_ }
-
- STRETCHER:
- while ( $total < 80 ) {
- my $min_width = ${$sorted_width_refs[0]};
- last
- if $min_width == $max_width;
- for ( @sorted_width_refs ) {
- last
- if $$_ > $min_width;
- ++$$_;
- ++$total;
- last STRETCHER
- if $total >= 80;
- }
- }
-
- # Dump the output
- my $format = join( ' ', map { "%${_}s" } @col_widths ) . "\n";
- substr( $format, 1, 0 ) = '-';
- for ( @rows ) {
- printf $format, @$_;
- }
-
- return $results;
-}
-
-
-1;
diff --git a/contrib/perl5/lib/CPAN.pm b/contrib/perl5/lib/CPAN.pm
deleted file mode 100644
index fdaadb3..0000000
--- a/contrib/perl5/lib/CPAN.pm
+++ /dev/null
@@ -1,6992 +0,0 @@
-# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*-
-package CPAN;
-$VERSION = '1.59_54';
-# $Id: CPAN.pm,v 1.385 2001/02/09 21:37:57 k Exp $
-
-# only used during development:
-$Revision = "";
-# $Revision = "[".substr(q$Revision: 1.385 $, 10)."]";
-
-use Carp ();
-use Config ();
-use Cwd ();
-use DirHandle;
-use Exporter ();
-use ExtUtils::MakeMaker (); # $SelfLoader::DEBUG=1;
-use File::Basename ();
-use File::Copy ();
-use File::Find;
-use File::Path ();
-use FileHandle ();
-use Safe ();
-use Text::ParseWords ();
-use Text::Wrap;
-use File::Spec;
-no lib "."; # we need to run chdir all over and we would get at wrong
- # libraries there
-
-END { $End++; &cleanup; }
-
-%CPAN::DEBUG = qw[
- CPAN 1
- Index 2
- InfoObj 4
- Author 8
- Distribution 16
- Bundle 32
- Module 64
- CacheMgr 128
- Complete 256
- FTP 512
- Shell 1024
- Eval 2048
- Config 4096
- Tarzip 8192
- Version 16384
- Queue 32768
-];
-
-$CPAN::DEBUG ||= 0;
-$CPAN::Signal ||= 0;
-$CPAN::Frontend ||= "CPAN::Shell";
-$CPAN::Defaultsite ||= "ftp://ftp.perl.org/pub/CPAN";
-
-package CPAN;
-use strict qw(vars);
-
-use vars qw($VERSION @EXPORT $AUTOLOAD $DEBUG $META $HAS_USABLE $term
- $Revision $Signal $End $Suppress_readline $Frontend
- $Defaultsite $Have_warned);
-
-@CPAN::ISA = qw(CPAN::Debug Exporter);
-
-@EXPORT = qw(
- autobundle bundle expand force get cvs_import
- install make readme recompile shell test clean
- );
-
-#-> sub CPAN::AUTOLOAD ;
-sub AUTOLOAD {
- my($l) = $AUTOLOAD;
- $l =~ s/.*:://;
- my(%EXPORT);
- @EXPORT{@EXPORT} = '';
- CPAN::Config->load unless $CPAN::Config_loaded++;
- if (exists $EXPORT{$l}){
- CPAN::Shell->$l(@_);
- } else {
- $CPAN::Frontend->mywarn(qq{Unknown command "$AUTOLOAD". }.
- qq{Type ? for help.
-});
- }
-}
-
-#-> sub CPAN::shell ;
-sub shell {
- my($self) = @_;
- $Suppress_readline = ! -t STDIN unless defined $Suppress_readline;
- CPAN::Config->load unless $CPAN::Config_loaded++;
-
- my $oprompt = shift || "cpan> ";
- my $prompt = $oprompt;
- my $commandline = shift || "";
-
- local($^W) = 1;
- unless ($Suppress_readline) {
- require Term::ReadLine;
- if (! $term
- or
- $term->ReadLine eq "Term::ReadLine::Stub"
- ) {
- $term = Term::ReadLine->new('CPAN Monitor');
- }
- if ($term->ReadLine eq "Term::ReadLine::Gnu") {
- my $attribs = $term->Attribs;
- $attribs->{attempted_completion_function} = sub {
- &CPAN::Complete::gnu_cpl;
- }
- } else {
- $readline::rl_completion_function =
- $readline::rl_completion_function = 'CPAN::Complete::cpl';
- }
- # $term->OUT is autoflushed anyway
- my $odef = select STDERR;
- $| = 1;
- select STDOUT;
- $| = 1;
- select $odef;
- }
-
- # no strict; # I do not recall why no strict was here (2000-09-03)
- $META->checklock();
- my $cwd = CPAN::anycwd();
- my $try_detect_readline;
- $try_detect_readline = $term->ReadLine eq "Term::ReadLine::Stub" if $term;
- my $rl_avail = $Suppress_readline ? "suppressed" :
- ($term->ReadLine ne "Term::ReadLine::Stub") ? "enabled" :
- "available (try 'install Bundle::CPAN')";
-
- $CPAN::Frontend->myprint(
- sprintf qq{
-cpan shell -- CPAN exploration and modules installation (v%s%s)
-ReadLine support %s
-
-},
- $CPAN::VERSION,
- $CPAN::Revision,
- $rl_avail
- )
- unless $CPAN::Config->{'inhibit_startup_message'} ;
- my($continuation) = "";
- SHELLCOMMAND: while () {
- if ($Suppress_readline) {
- print $prompt;
- last SHELLCOMMAND unless defined ($_ = <> );
- chomp;
- } else {
- last SHELLCOMMAND unless
- defined ($_ = $term->readline($prompt, $commandline));
- }
- $_ = "$continuation$_" if $continuation;
- s/^\s+//;
- next SHELLCOMMAND if /^$/;
- $_ = 'h' if /^\s*\?/;
- if (/^(?:q(?:uit)?|bye|exit)$/i) {
- last SHELLCOMMAND;
- } elsif (s/\\$//s) {
- chomp;
- $continuation = $_;
- $prompt = " > ";
- } elsif (/^\!/) {
- s/^\!//;
- my($eval) = $_;
- package CPAN::Eval;
- use vars qw($import_done);
- CPAN->import(':DEFAULT') unless $import_done++;
- CPAN->debug("eval[$eval]") if $CPAN::DEBUG;
- eval($eval);
- warn $@ if $@;
- $continuation = "";
- $prompt = $oprompt;
- } elsif (/./) {
- my(@line);
- if ($] < 5.00322) { # parsewords had a bug until recently
- @line = split;
- } else {
- eval { @line = Text::ParseWords::shellwords($_) };
- warn($@), next SHELLCOMMAND if $@;
- warn("Text::Parsewords could not parse the line [$_]"),
- next SHELLCOMMAND unless @line;
- }
- $CPAN::META->debug("line[".join("|",@line)."]") if $CPAN::DEBUG;
- my $command = shift @line;
- eval { CPAN::Shell->$command(@line) };
- warn $@ if $@;
- chdir $cwd or $CPAN::Frontend->mydie(qq{Could not chdir to "$cwd": $!});
- $CPAN::Frontend->myprint("\n");
- $continuation = "";
- $prompt = $oprompt;
- }
- } continue {
- $commandline = ""; # I do want to be able to pass a default to
- # shell, but on the second command I see no
- # use in that
- $Signal=0;
- CPAN::Queue->nullify_queue;
- if ($try_detect_readline) {
- if ($CPAN::META->has_inst("Term::ReadLine::Gnu")
- ||
- $CPAN::META->has_inst("Term::ReadLine::Perl")
- ) {
- delete $INC{"Term/ReadLine.pm"};
- my $redef = 0;
- local($SIG{__WARN__}) = CPAN::Shell::paintdots_onreload(\$redef);
- require Term::ReadLine;
- $CPAN::Frontend->myprint("\n$redef subroutines in ".
- "Term::ReadLine redefined\n");
- @_ = ($oprompt,"");
- goto &shell;
- }
- }
- }
- chdir $cwd or $CPAN::Frontend->mydie(qq{Could not chdir to "$cwd": $!});
-}
-
-package CPAN::CacheMgr;
-@CPAN::CacheMgr::ISA = qw(CPAN::InfoObj CPAN);
-use File::Find;
-
-package CPAN::Config;
-use vars qw(%can $dot_cpan);
-
-%can = (
- 'commit' => "Commit changes to disk",
- 'defaults' => "Reload defaults from disk",
- 'init' => "Interactive setting of all options",
-);
-
-package CPAN::FTP;
-use vars qw($Ua $Thesite $Themethod);
-@CPAN::FTP::ISA = qw(CPAN::Debug);
-
-package CPAN::LWP::UserAgent;
-use vars qw(@ISA $USER $PASSWD $SETUPDONE);
-# we delay requiring LWP::UserAgent and setting up inheritence until we need it
-
-package CPAN::Complete;
-@CPAN::Complete::ISA = qw(CPAN::Debug);
-@CPAN::Complete::COMMANDS = sort qw(
- ! a b d h i m o q r u autobundle clean dump
- make test install force readme reload look
- cvs_import ls
-) unless @CPAN::Complete::COMMANDS;
-
-package CPAN::Index;
-use vars qw($LAST_TIME $DATE_OF_02 $DATE_OF_03);
-@CPAN::Index::ISA = qw(CPAN::Debug);
-$LAST_TIME ||= 0;
-$DATE_OF_03 ||= 0;
-# use constant PROTOCOL => "2.0"; # outcommented to avoid warning on upgrade from 1.57
-sub PROTOCOL { 2.0 }
-
-package CPAN::InfoObj;
-@CPAN::InfoObj::ISA = qw(CPAN::Debug);
-
-package CPAN::Author;
-@CPAN::Author::ISA = qw(CPAN::InfoObj);
-
-package CPAN::Distribution;
-@CPAN::Distribution::ISA = qw(CPAN::InfoObj);
-
-package CPAN::Bundle;
-@CPAN::Bundle::ISA = qw(CPAN::Module);
-
-package CPAN::Module;
-@CPAN::Module::ISA = qw(CPAN::InfoObj);
-
-package CPAN::Shell;
-use vars qw($AUTOLOAD @ISA $COLOR_REGISTERED $ADVANCED_QUERY $PRINT_ORNAMENTING);
-@CPAN::Shell::ISA = qw(CPAN::Debug);
-$COLOR_REGISTERED ||= 0;
-$PRINT_ORNAMENTING ||= 0;
-
-#-> sub CPAN::Shell::AUTOLOAD ;
-sub AUTOLOAD {
- my($autoload) = $AUTOLOAD;
- my $class = shift(@_);
- # warn "autoload[$autoload] class[$class]";
- $autoload =~ s/.*:://;
- if ($autoload =~ /^w/) {
- if ($CPAN::META->has_inst('CPAN::WAIT')) {
- CPAN::WAIT->$autoload(@_);
- } else {
- $CPAN::Frontend->mywarn(qq{
-Commands starting with "w" require CPAN::WAIT to be installed.
-Please consider installing CPAN::WAIT to use the fulltext index.
-For this you just need to type
- install CPAN::WAIT
-});
- }
- } else {
- $CPAN::Frontend->mywarn(qq{Unknown command '$autoload'. }.
- qq{Type ? for help.
-});
- }
-}
-
-package CPAN::Tarzip;
-use vars qw($AUTOLOAD @ISA $BUGHUNTING);
-@CPAN::Tarzip::ISA = qw(CPAN::Debug);
-$BUGHUNTING = 0; # released code must have turned off
-
-package CPAN::Queue;
-
-# One use of the queue is to determine if we should or shouldn't
-# announce the availability of a new CPAN module
-
-# Now we try to use it for dependency tracking. For that to happen
-# we need to draw a dependency tree and do the leaves first. This can
-# easily be reached by running CPAN.pm recursively, but we don't want
-# to waste memory and run into deep recursion. So what we can do is
-# this:
-
-# CPAN::Queue is the package where the queue is maintained. Dependencies
-# often have high priority and must be brought to the head of the queue,
-# possibly by jumping the queue if they are already there. My first code
-# attempt tried to be extremely correct. Whenever a module needed
-# immediate treatment, I either unshifted it to the front of the queue,
-# or, if it was already in the queue, I spliced and let it bypass the
-# others. This became a too correct model that made it impossible to put
-# an item more than once into the queue. Why would you need that? Well,
-# you need temporary duplicates as the manager of the queue is a loop
-# that
-#
-# (1) looks at the first item in the queue without shifting it off
-#
-# (2) cares for the item
-#
-# (3) removes the item from the queue, *even if its agenda failed and
-# even if the item isn't the first in the queue anymore* (that way
-# protecting against never ending queues)
-#
-# So if an item has prerequisites, the installation fails now, but we
-# want to retry later. That's easy if we have it twice in the queue.
-#
-# I also expect insane dependency situations where an item gets more
-# than two lives in the queue. Simplest example is triggered by 'install
-# Foo Foo Foo'. People make this kind of mistakes and I don't want to
-# get in the way. I wanted the queue manager to be a dumb servant, not
-# one that knows everything.
-#
-# Who would I tell in this model that the user wants to be asked before
-# processing? I can't attach that information to the module object,
-# because not modules are installed but distributions. So I'd have to
-# tell the distribution object that it should ask the user before
-# processing. Where would the question be triggered then? Most probably
-# in CPAN::Distribution::rematein.
-# Hope that makes sense, my head is a bit off:-) -- AK
-
-use vars qw{ @All };
-
-# CPAN::Queue::new ;
-sub new {
- my($class,$s) = @_;
- my $self = bless { qmod => $s }, $class;
- push @All, $self;
- return $self;
-}
-
-# CPAN::Queue::first ;
-sub first {
- my $obj = $All[0];
- $obj->{qmod};
-}
-
-# CPAN::Queue::delete_first ;
-sub delete_first {
- my($class,$what) = @_;
- my $i;
- for my $i (0..$#All) {
- if ( $All[$i]->{qmod} eq $what ) {
- splice @All, $i, 1;
- return;
- }
- }
-}
-
-# CPAN::Queue::jumpqueue ;
-sub jumpqueue {
- my $class = shift;
- my @what = @_;
- CPAN->debug(sprintf("before jumpqueue All[%s] what[%s]",
- join(",",map {$_->{qmod}} @All),
- join(",",@what)
- )) if $CPAN::DEBUG;
- WHAT: for my $what (reverse @what) {
- my $jumped = 0;
- for (my $i=0; $i<$#All;$i++) { #prevent deep recursion
- CPAN->debug("i[$All[$i]]what[$what]") if $CPAN::DEBUG;
- if ($All[$i]->{qmod} eq $what){
- $jumped++;
- if ($jumped > 100) { # one's OK if e.g. just
- # processing now; more are OK if
- # user typed it several times
- $CPAN::Frontend->mywarn(
-qq{Object [$what] queued more than 100 times, ignoring}
- );
- next WHAT;
- }
- }
- }
- my $obj = bless { qmod => $what }, $class;
- unshift @All, $obj;
- }
- CPAN->debug(sprintf("after jumpqueue All[%s] what[%s]",
- join(",",map {$_->{qmod}} @All),
- join(",",@what)
- )) if $CPAN::DEBUG;
-}
-
-# CPAN::Queue::exists ;
-sub exists {
- my($self,$what) = @_;
- my @all = map { $_->{qmod} } @All;
- my $exists = grep { $_->{qmod} eq $what } @All;
- # warn "in exists what[$what] all[@all] exists[$exists]";
- $exists;
-}
-
-# CPAN::Queue::delete ;
-sub delete {
- my($self,$mod) = @_;
- @All = grep { $_->{qmod} ne $mod } @All;
-}
-
-# CPAN::Queue::nullify_queue ;
-sub nullify_queue {
- @All = ();
-}
-
-
-
-package CPAN;
-
-$META ||= CPAN->new; # In case we re-eval ourselves we need the ||
-
-# from here on only subs.
-################################################################################
-
-#-> sub CPAN::all_objects ;
-sub all_objects {
- my($mgr,$class) = @_;
- CPAN::Config->load unless $CPAN::Config_loaded++;
- CPAN->debug("mgr[$mgr] class[$class]") if $CPAN::DEBUG;
- CPAN::Index->reload;
- values %{ $META->{readwrite}{$class} }; # unsafe meta access, ok
-}
-*all = \&all_objects;
-
-# Called by shell, not in batch mode. In batch mode I see no risk in
-# having many processes updating something as installations are
-# continually checked at runtime. In shell mode I suspect it is
-# unintentional to open more than one shell at a time
-
-#-> sub CPAN::checklock ;
-sub checklock {
- my($self) = @_;
- my $lockfile = MM->catfile($CPAN::Config->{cpan_home},".lock");
- if (-f $lockfile && -M _ > 0) {
- my $fh = FileHandle->new($lockfile) or
- $CPAN::Frontend->mydie("Could not open $lockfile: $!");
- my $other = <$fh>;
- $fh->close;
- if (defined $other && $other) {
- chomp $other;
- return if $$==$other; # should never happen
- $CPAN::Frontend->mywarn(
- qq{
-There seems to be running another CPAN process ($other). Contacting...
-});
- if (kill 0, $other) {
- $CPAN::Frontend->mydie(qq{Other job is running.
-You may want to kill it and delete the lockfile, maybe. On UNIX try:
- kill $other
- rm $lockfile
-});
- } elsif (-w $lockfile) {
- my($ans) =
- ExtUtils::MakeMaker::prompt
- (qq{Other job not responding. Shall I overwrite }.
- qq{the lockfile? (Y/N)},"y");
- $CPAN::Frontend->myexit("Ok, bye\n")
- unless $ans =~ /^y/i;
- } else {
- Carp::croak(
- qq{Lockfile $lockfile not writeable by you. }.
- qq{Cannot proceed.\n}.
- qq{ On UNIX try:\n}.
- qq{ rm $lockfile\n}.
- qq{ and then rerun us.\n}
- );
- }
- } else {
- $CPAN::Frontend->mydie(sprintf("CPAN.pm panic: Lockfile $lockfile ".
- "reports other process with ID ".
- "$other. Cannot proceed.\n"));
- }
- }
- my $dotcpan = $CPAN::Config->{cpan_home};
- eval { File::Path::mkpath($dotcpan);};
- if ($@) {
- # A special case at least for Jarkko.
- my $firsterror = $@;
- my $seconderror;
- my $symlinkcpan;
- if (-l $dotcpan) {
- $symlinkcpan = readlink $dotcpan;
- die "readlink $dotcpan failed: $!" unless defined $symlinkcpan;
- eval { File::Path::mkpath($symlinkcpan); };
- if ($@) {
- $seconderror = $@;
- } else {
- $CPAN::Frontend->mywarn(qq{
-Working directory $symlinkcpan created.
-});
- }
- }
- unless (-d $dotcpan) {
- my $diemess = qq{
-Your configuration suggests "$dotcpan" as your
-CPAN.pm working directory. I could not create this directory due
-to this error: $firsterror\n};
- $diemess .= qq{
-As "$dotcpan" is a symlink to "$symlinkcpan",
-I tried to create that, but I failed with this error: $seconderror
-} if $seconderror;
- $diemess .= qq{
-Please make sure the directory exists and is writable.
-};
- $CPAN::Frontend->mydie($diemess);
- }
- }
- my $fh;
- unless ($fh = FileHandle->new(">$lockfile")) {
- if ($! =~ /Permission/) {
- my $incc = $INC{'CPAN/Config.pm'};
- my $myincc = MM->catfile($ENV{HOME},'.cpan','CPAN','MyConfig.pm');
- $CPAN::Frontend->myprint(qq{
-
-Your configuration suggests that CPAN.pm should use a working
-directory of
- $CPAN::Config->{cpan_home}
-Unfortunately we could not create the lock file
- $lockfile
-due to permission problems.
-
-Please make sure that the configuration variable
- \$CPAN::Config->{cpan_home}
-points to a directory where you can write a .lock file. You can set
-this variable in either
- $incc
-or
- $myincc
-
-});
- }
- $CPAN::Frontend->mydie("Could not open >$lockfile: $!");
- }
- $fh->print($$, "\n");
- $self->{LOCK} = $lockfile;
- $fh->close;
- $SIG{TERM} = sub {
- &cleanup;
- $CPAN::Frontend->mydie("Got SIGTERM, leaving");
- };
- $SIG{INT} = sub {
- # no blocks!!!
- &cleanup if $Signal;
- $CPAN::Frontend->mydie("Got another SIGINT") if $Signal;
- print "Caught SIGINT\n";
- $Signal++;
- };
-
-# From: Larry Wall <larry@wall.org>
-# Subject: Re: deprecating SIGDIE
-# To: perl5-porters@perl.org
-# Date: Thu, 30 Sep 1999 14:58:40 -0700 (PDT)
-#
-# The original intent of __DIE__ was only to allow you to substitute one
-# kind of death for another on an application-wide basis without respect
-# to whether you were in an eval or not. As a global backstop, it should
-# not be used any more lightly (or any more heavily :-) than class
-# UNIVERSAL. Any attempt to build a general exception model on it should
-# be politely squashed. Any bug that causes every eval {} to have to be
-# modified should be not so politely squashed.
-#
-# Those are my current opinions. It is also my optinion that polite
-# arguments degenerate to personal arguments far too frequently, and that
-# when they do, it's because both people wanted it to, or at least didn't
-# sufficiently want it not to.
-#
-# Larry
-
- # global backstop to cleanup if we should really die
- $SIG{__DIE__} = \&cleanup;
- $self->debug("Signal handler set.") if $CPAN::DEBUG;
-}
-
-#-> sub CPAN::DESTROY ;
-sub DESTROY {
- &cleanup; # need an eval?
-}
-
-#-> sub CPAN::anycwd ;
-sub anycwd () {
- my $getcwd;
- $getcwd = $CPAN::Config->{'getcwd'} || 'cwd';
- CPAN->$getcwd();
-}
-
-#-> sub CPAN::cwd ;
-sub cwd {Cwd::cwd();}
-
-#-> sub CPAN::getcwd ;
-sub getcwd {Cwd::getcwd();}
-
-#-> sub CPAN::exists ;
-sub exists {
- my($mgr,$class,$id) = @_;
- CPAN::Config->load unless $CPAN::Config_loaded++;
- CPAN::Index->reload;
- ### Carp::croak "exists called without class argument" unless $class;
- $id ||= "";
- exists $META->{readonly}{$class}{$id} or
- exists $META->{readwrite}{$class}{$id}; # unsafe meta access, ok
-}
-
-#-> sub CPAN::delete ;
-sub delete {
- my($mgr,$class,$id) = @_;
- delete $META->{readonly}{$class}{$id}; # unsafe meta access, ok
- delete $META->{readwrite}{$class}{$id}; # unsafe meta access, ok
-}
-
-#-> sub CPAN::has_usable
-# has_inst is sometimes too optimistic, we should replace it with this
-# has_usable whenever a case is given
-sub has_usable {
- my($self,$mod,$message) = @_;
- return 1 if $HAS_USABLE->{$mod};
- my $has_inst = $self->has_inst($mod,$message);
- return unless $has_inst;
- my $usable;
- $usable = {
- LWP => [ # we frequently had "Can't locate object
- # method "new" via package "LWP::UserAgent" at
- # (eval 69) line 2006
- sub {require LWP},
- sub {require LWP::UserAgent},
- sub {require HTTP::Request},
- sub {require URI::URL},
- ],
- Net::FTP => [
- sub {require Net::FTP},
- sub {require Net::Config},
- ]
- };
- if ($usable->{$mod}) {
- for my $c (0..$#{$usable->{$mod}}) {
- my $code = $usable->{$mod}[$c];
- my $ret = eval { &$code() };
- if ($@) {
- warn "DEBUG: c[$c]\$\@[$@]ret[$ret]";
- return;
- }
- }
- }
- return $HAS_USABLE->{$mod} = 1;
-}
-
-#-> sub CPAN::has_inst
-sub has_inst {
- my($self,$mod,$message) = @_;
- Carp::croak("CPAN->has_inst() called without an argument")
- unless defined $mod;
- if (defined $message && $message eq "no"
- ||
- exists $CPAN::META->{dontload_hash}{$mod} # unsafe meta access, ok
- ||
- exists $CPAN::Config->{dontload_hash}{$mod}
- ) {
- $CPAN::META->{dontload_hash}{$mod}||=1; # unsafe meta access, ok
- return 0;
- }
- my $file = $mod;
- my $obj;
- $file =~ s|::|/|g;
- $file =~ s|/|\\|g if $^O eq 'MSWin32';
- $file .= ".pm";
- if ($INC{$file}) {
- # checking %INC is wrong, because $INC{LWP} may be true
- # although $INC{"URI/URL.pm"} may have failed. But as
- # I really want to say "bla loaded OK", I have to somehow
- # cache results.
- ### warn "$file in %INC"; #debug
- return 1;
- } elsif (eval { require $file }) {
- # eval is good: if we haven't yet read the database it's
- # perfect and if we have installed the module in the meantime,
- # it tries again. The second require is only a NOOP returning
- # 1 if we had success, otherwise it's retrying
-
- $CPAN::Frontend->myprint("CPAN: $mod loaded ok\n");
- if ($mod eq "CPAN::WAIT") {
- push @CPAN::Shell::ISA, CPAN::WAIT;
- }
- return 1;
- } elsif ($mod eq "Net::FTP") {
- $CPAN::Frontend->mywarn(qq{
- Please, install Net::FTP as soon as possible. CPAN.pm installs it for you
- if you just type
- install Bundle::libnet
-
-}) unless $Have_warned->{"Net::FTP"}++;
- sleep 3;
- } elsif ($mod eq "MD5"){
- $CPAN::Frontend->myprint(qq{
- CPAN: MD5 security checks disabled because MD5 not installed.
- Please consider installing the MD5 module.
-
-});
- sleep 2;
- } else {
- delete $INC{$file}; # if it inc'd LWP but failed during, say, URI
- }
- return 0;
-}
-
-#-> sub CPAN::instance ;
-sub instance {
- my($mgr,$class,$id) = @_;
- CPAN::Index->reload;
- $id ||= "";
- # unsafe meta access, ok?
- return $META->{readwrite}{$class}{$id} if exists $META->{readwrite}{$class}{$id};
- $META->{readwrite}{$class}{$id} ||= $class->new(ID => $id);
-}
-
-#-> sub CPAN::new ;
-sub new {
- bless {}, shift;
-}
-
-#-> sub CPAN::cleanup ;
-sub cleanup {
- # warn "cleanup called with arg[@_] End[$End] Signal[$Signal]";
- local $SIG{__DIE__} = '';
- my($message) = @_;
- my $i = 0;
- my $ineval = 0;
- if (
- 0 && # disabled, try reload cpan with it
- $] > 5.004_60 # thereabouts
- ) {
- $ineval = $^S;
- } else {
- my($subroutine);
- while ((undef,undef,undef,$subroutine) = caller(++$i)) {
- $ineval = 1, last if
- $subroutine eq '(eval)';
- }
- }
- return if $ineval && !$End;
- return unless defined $META->{LOCK}; # unsafe meta access, ok
- return unless -f $META->{LOCK}; # unsafe meta access, ok
- unlink $META->{LOCK}; # unsafe meta access, ok
- # require Carp;
- # Carp::cluck("DEBUGGING");
- $CPAN::Frontend->mywarn("Lockfile removed.\n");
-}
-
-package CPAN::CacheMgr;
-
-#-> sub CPAN::CacheMgr::as_string ;
-sub as_string {
- eval { require Data::Dumper };
- if ($@) {
- return shift->SUPER::as_string;
- } else {
- return Data::Dumper::Dumper(shift);
- }
-}
-
-#-> sub CPAN::CacheMgr::cachesize ;
-sub cachesize {
- shift->{DU};
-}
-
-#-> sub CPAN::CacheMgr::tidyup ;
-sub tidyup {
- my($self) = @_;
- return unless -d $self->{ID};
- while ($self->{DU} > $self->{'MAX'} ) {
- my($toremove) = shift @{$self->{FIFO}};
- $CPAN::Frontend->myprint(sprintf(
- "Deleting from cache".
- ": $toremove (%.1f>%.1f MB)\n",
- $self->{DU}, $self->{'MAX'})
- );
- return if $CPAN::Signal;
- $self->force_clean_cache($toremove);
- return if $CPAN::Signal;
- }
-}
-
-#-> sub CPAN::CacheMgr::dir ;
-sub dir {
- shift->{ID};
-}
-
-#-> sub CPAN::CacheMgr::entries ;
-sub entries {
- my($self,$dir) = @_;
- return unless defined $dir;
- $self->debug("reading dir[$dir]") if $CPAN::DEBUG;
- $dir ||= $self->{ID};
- my($cwd) = CPAN::anycwd();
- chdir $dir or Carp::croak("Can't chdir to $dir: $!");
- my $dh = DirHandle->new(File::Spec->curdir)
- or Carp::croak("Couldn't opendir $dir: $!");
- my(@entries);
- for ($dh->read) {
- next if $_ eq "." || $_ eq "..";
- if (-f $_) {
- push @entries, MM->catfile($dir,$_);
- } elsif (-d _) {
- push @entries, MM->catdir($dir,$_);
- } else {
- $CPAN::Frontend->mywarn("Warning: weird direntry in $dir: $_\n");
- }
- }
- chdir $cwd or Carp::croak("Can't chdir to $cwd: $!");
- sort { -M $b <=> -M $a} @entries;
-}
-
-#-> sub CPAN::CacheMgr::disk_usage ;
-sub disk_usage {
- my($self,$dir) = @_;
- return if exists $self->{SIZE}{$dir};
- return if $CPAN::Signal;
- my($Du) = 0;
- find(
- sub {
- $File::Find::prune++ if $CPAN::Signal;
- return if -l $_;
- if ($^O eq 'MacOS') {
- require Mac::Files;
- my $cat = Mac::Files::FSpGetCatInfo($_);
- $Du += $cat->ioFlLgLen() + $cat->ioFlRLgLen() if $cat;
- } else {
- $Du += (-s _);
- }
- },
- $dir
- );
- return if $CPAN::Signal;
- $self->{SIZE}{$dir} = $Du/1024/1024;
- push @{$self->{FIFO}}, $dir;
- $self->debug("measured $dir is $Du") if $CPAN::DEBUG;
- $self->{DU} += $Du/1024/1024;
- $self->{DU};
-}
-
-#-> sub CPAN::CacheMgr::force_clean_cache ;
-sub force_clean_cache {
- my($self,$dir) = @_;
- return unless -e $dir;
- $self->debug("have to rmtree $dir, will free $self->{SIZE}{$dir}")
- if $CPAN::DEBUG;
- File::Path::rmtree($dir);
- $self->{DU} -= $self->{SIZE}{$dir};
- delete $self->{SIZE}{$dir};
-}
-
-#-> sub CPAN::CacheMgr::new ;
-sub new {
- my $class = shift;
- my $time = time;
- my($debug,$t2);
- $debug = "";
- my $self = {
- ID => $CPAN::Config->{'build_dir'},
- MAX => $CPAN::Config->{'build_cache'},
- SCAN => $CPAN::Config->{'scan_cache'} || 'atstart',
- DU => 0
- };
- File::Path::mkpath($self->{ID});
- my $dh = DirHandle->new($self->{ID});
- bless $self, $class;
- $self->scan_cache;
- $t2 = time;
- $debug .= "timing of CacheMgr->new: ".($t2 - $time);
- $time = $t2;
- CPAN->debug($debug) if $CPAN::DEBUG;
- $self;
-}
-
-#-> sub CPAN::CacheMgr::scan_cache ;
-sub scan_cache {
- my $self = shift;
- return if $self->{SCAN} eq 'never';
- $CPAN::Frontend->mydie("Unknown scan_cache argument: $self->{SCAN}")
- unless $self->{SCAN} eq 'atstart';
- $CPAN::Frontend->myprint(
- sprintf("Scanning cache %s for sizes\n",
- $self->{ID}));
- my $e;
- for $e ($self->entries($self->{ID})) {
- next if $e eq ".." || $e eq ".";
- $self->disk_usage($e);
- return if $CPAN::Signal;
- }
- $self->tidyup;
-}
-
-package CPAN::Debug;
-
-#-> sub CPAN::Debug::debug ;
-sub debug {
- my($self,$arg) = @_;
- my($caller,$func,$line,@rest) = caller(1); # caller(0) eg
- # Complete, caller(1)
- # eg readline
- ($caller) = caller(0);
- $caller =~ s/.*:://;
- $arg = "" unless defined $arg;
- my $rest = join "|", map { defined $_ ? $_ : "UNDEF" } @rest;
- if ($CPAN::DEBUG{$caller} & $CPAN::DEBUG){
- if ($arg and ref $arg) {
- eval { require Data::Dumper };
- if ($@) {
- $CPAN::Frontend->myprint($arg->as_string);
- } else {
- $CPAN::Frontend->myprint(Data::Dumper::Dumper($arg));
- }
- } else {
- $CPAN::Frontend->myprint("Debug($caller:$func,$line,[$rest]): $arg\n");
- }
- }
-}
-
-package CPAN::Config;
-
-#-> sub CPAN::Config::edit ;
-# returns true on successful action
-sub edit {
- my($self,@args) = @_;
- return unless @args;
- CPAN->debug("self[$self]args[".join(" | ",@args)."]");
- my($o,$str,$func,$args,$key_exists);
- $o = shift @args;
- if($can{$o}) {
- $self->$o(@args);
- return 1;
- } else {
- CPAN->debug("o[$o]") if $CPAN::DEBUG;
- if ($o =~ /list$/) {
- $func = shift @args;
- $func ||= "";
- CPAN->debug("func[$func]") if $CPAN::DEBUG;
- my $changed;
- # Let's avoid eval, it's easier to comprehend without.
- if ($func eq "push") {
- push @{$CPAN::Config->{$o}}, @args;
- $changed = 1;
- } elsif ($func eq "pop") {
- pop @{$CPAN::Config->{$o}};
- $changed = 1;
- } elsif ($func eq "shift") {
- shift @{$CPAN::Config->{$o}};
- $changed = 1;
- } elsif ($func eq "unshift") {
- unshift @{$CPAN::Config->{$o}}, @args;
- $changed = 1;
- } elsif ($func eq "splice") {
- splice @{$CPAN::Config->{$o}}, @args;
- $changed = 1;
- } elsif (@args) {
- $CPAN::Config->{$o} = [@args];
- $changed = 1;
- } else {
- $self->prettyprint($o);
- }
- if ($o eq "urllist" && $changed) {
- # reset the cached values
- undef $CPAN::FTP::Thesite;
- undef $CPAN::FTP::Themethod;
- }
- return $changed;
- } else {
- $CPAN::Config->{$o} = $args[0] if defined $args[0];
- $self->prettyprint($o);
- }
- }
-}
-
-sub prettyprint {
- my($self,$k) = @_;
- my $v = $CPAN::Config->{$k};
- if (ref $v) {
- my(@report) = ref $v eq "ARRAY" ?
- @$v :
- map { sprintf(" %-18s => %s\n",
- $_,
- defined $v->{$_} ? $v->{$_} : "UNDEFINED"
- )} keys %$v;
- $CPAN::Frontend->myprint(
- join(
- "",
- sprintf(
- " %-18s\n",
- $k
- ),
- map {"\t$_\n"} @report
- )
- );
- } elsif (defined $v) {
- $CPAN::Frontend->myprint(sprintf " %-18s %s\n", $k, $v);
- } else {
- $CPAN::Frontend->myprint(sprintf " %-18s %s\n", $k, "UNDEFINED");
- }
-}
-
-#-> sub CPAN::Config::commit ;
-sub commit {
- my($self,$configpm) = @_;
- unless (defined $configpm){
- $configpm ||= $INC{"CPAN/MyConfig.pm"};
- $configpm ||= $INC{"CPAN/Config.pm"};
- $configpm || Carp::confess(q{
-CPAN::Config::commit called without an argument.
-Please specify a filename where to save the configuration or try
-"o conf init" to have an interactive course through configing.
-});
- }
- my($mode);
- if (-f $configpm) {
- $mode = (stat $configpm)[2];
- if ($mode && ! -w _) {
- Carp::confess("$configpm is not writable");
- }
- }
-
- my $msg;
- $msg = <<EOF unless $configpm =~ /MyConfig/;
-
-# This is CPAN.pm's systemwide configuration file. This file provides
-# defaults for users, and the values can be changed in a per-user
-# configuration file. The user-config file is being looked for as
-# ~/.cpan/CPAN/MyConfig.pm.
-
-EOF
- $msg ||= "\n";
- my($fh) = FileHandle->new;
- rename $configpm, "$configpm~" if -f $configpm;
- open $fh, ">$configpm" or
- $CPAN::Frontend->mydie("Couldn't open >$configpm: $!");
- $fh->print(qq[$msg\$CPAN::Config = \{\n]);
- foreach (sort keys %$CPAN::Config) {
- $fh->print(
- " '$_' => ",
- ExtUtils::MakeMaker::neatvalue($CPAN::Config->{$_}),
- ",\n"
- );
- }
-
- $fh->print("};\n1;\n__END__\n");
- close $fh;
-
- #$mode = 0444 | ( $mode & 0111 ? 0111 : 0 );
- #chmod $mode, $configpm;
-###why was that so? $self->defaults;
- $CPAN::Frontend->myprint("commit: wrote $configpm\n");
- 1;
-}
-
-*default = \&defaults;
-#-> sub CPAN::Config::defaults ;
-sub defaults {
- my($self) = @_;
- $self->unload;
- $self->load;
- 1;
-}
-
-sub init {
- my($self) = @_;
- undef $CPAN::Config->{'inhibit_startup_message'}; # lazy trick to
- # have the least
- # important
- # variable
- # undefined
- $self->load;
- 1;
-}
-
-#-> sub CPAN::Config::load ;
-sub load {
- my($self) = shift;
- my(@miss);
- use Carp;
- eval {require CPAN::Config;}; # We eval because of some
- # MakeMaker problems
- unless ($dot_cpan++){
- unshift @INC, MM->catdir($ENV{HOME},".cpan");
- eval {require CPAN::MyConfig;}; # where you can override
- # system wide settings
- shift @INC;
- }
- return unless @miss = $self->missing_config_data;
-
- require CPAN::FirstTime;
- my($configpm,$fh,$redo,$theycalled);
- $redo ||= "";
- $theycalled++ if @miss==1 && $miss[0] eq 'inhibit_startup_message';
- if (defined $INC{"CPAN/Config.pm"} && -w $INC{"CPAN/Config.pm"}) {
- $configpm = $INC{"CPAN/Config.pm"};
- $redo++;
- } elsif (defined $INC{"CPAN/MyConfig.pm"} && -w $INC{"CPAN/MyConfig.pm"}) {
- $configpm = $INC{"CPAN/MyConfig.pm"};
- $redo++;
- } else {
- my($path_to_cpan) = File::Basename::dirname($INC{"CPAN.pm"});
- my($configpmdir) = MM->catdir($path_to_cpan,"CPAN");
- my($configpmtest) = MM->catfile($configpmdir,"Config.pm");
- if (-d $configpmdir or File::Path::mkpath($configpmdir)) {
- if (-w $configpmtest) {
- $configpm = $configpmtest;
- } elsif (-w $configpmdir) {
- #_#_# following code dumped core on me with 5.003_11, a.k.
- unlink "$configpmtest.bak" if -f "$configpmtest.bak";
- rename $configpmtest, "$configpmtest.bak" if -f $configpmtest;
- my $fh = FileHandle->new;
- if ($fh->open(">$configpmtest")) {
- $fh->print("1;\n");
- $configpm = $configpmtest;
- } else {
- # Should never happen
- Carp::confess("Cannot open >$configpmtest");
- }
- }
- }
- unless ($configpm) {
- $configpmdir = MM->catdir($ENV{HOME},".cpan","CPAN");
- File::Path::mkpath($configpmdir);
- $configpmtest = MM->catfile($configpmdir,"MyConfig.pm");
- if (-w $configpmtest) {
- $configpm = $configpmtest;
- } elsif (-w $configpmdir) {
- #_#_# following code dumped core on me with 5.003_11, a.k.
- my $fh = FileHandle->new;
- if ($fh->open(">$configpmtest")) {
- $fh->print("1;\n");
- $configpm = $configpmtest;
- } else {
- # Should never happen
- Carp::confess("Cannot open >$configpmtest");
- }
- } else {
- Carp::confess(qq{WARNING: CPAN.pm is unable to }.
- qq{create a configuration file.});
- }
- }
- }
- local($") = ", ";
- $CPAN::Frontend->myprint(<<END) if $redo && ! $theycalled;
-We have to reconfigure CPAN.pm due to following uninitialized parameters:
-
-@miss
-END
- $CPAN::Frontend->myprint(qq{
-$configpm initialized.
-});
- sleep 2;
- CPAN::FirstTime::init($configpm);
-}
-
-#-> sub CPAN::Config::missing_config_data ;
-sub missing_config_data {
- my(@miss);
- for (
- "cpan_home", "keep_source_where", "build_dir", "build_cache",
- "scan_cache", "index_expire", "gzip", "tar", "unzip", "make",
- "pager",
- "makepl_arg", "make_arg", "make_install_arg", "urllist",
- "inhibit_startup_message", "ftp_proxy", "http_proxy", "no_proxy",
- "prerequisites_policy",
- "cache_metadata",
- ) {
- push @miss, $_ unless defined $CPAN::Config->{$_};
- }
- return @miss;
-}
-
-#-> sub CPAN::Config::unload ;
-sub unload {
- delete $INC{'CPAN/MyConfig.pm'};
- delete $INC{'CPAN/Config.pm'};
-}
-
-#-> sub CPAN::Config::help ;
-sub help {
- $CPAN::Frontend->myprint(q[
-Known options:
- defaults reload default config values from disk
- commit commit session changes to disk
- init go through a dialog to set all parameters
-
-You may edit key values in the follow fashion (the "o" is a literal
-letter o):
-
- o conf build_cache 15
-
- o conf build_dir "/foo/bar"
-
- o conf urllist shift
-
- o conf urllist unshift ftp://ftp.foo.bar/
-
-]);
- undef; #don't reprint CPAN::Config
-}
-
-#-> sub CPAN::Config::cpl ;
-sub cpl {
- my($word,$line,$pos) = @_;
- $word ||= "";
- CPAN->debug("word[$word] line[$line] pos[$pos]") if $CPAN::DEBUG;
- my(@words) = split " ", substr($line,0,$pos+1);
- if (
- defined($words[2])
- and
- (
- $words[2] =~ /list$/ && @words == 3
- ||
- $words[2] =~ /list$/ && @words == 4 && length($word)
- )
- ) {
- return grep /^\Q$word\E/, qw(splice shift unshift pop push);
- } elsif (@words >= 4) {
- return ();
- }
- my(@o_conf) = (keys %CPAN::Config::can, keys %$CPAN::Config);
- return grep /^\Q$word\E/, @o_conf;
-}
-
-package CPAN::Shell;
-
-#-> sub CPAN::Shell::h ;
-sub h {
- my($class,$about) = @_;
- if (defined $about) {
- $CPAN::Frontend->myprint("Detailed help not yet implemented\n");
- } else {
- $CPAN::Frontend->myprint(q{
-Display Information
- command argument description
- a,b,d,m WORD or /REGEXP/ about authors, bundles, distributions, modules
- i WORD or /REGEXP/ about anything of above
- r NONE reinstall recommendations
- ls AUTHOR about files in the author's directory
-
-Download, Test, Make, Install...
- get download
- make make (implies get)
- test MODULES, make test (implies make)
- install DISTS, BUNDLES make install (implies test)
- clean make clean
- look open subshell in these dists' directories
- readme display these dists' README files
-
-Other
- h,? display this menu ! perl-code eval a perl command
- o conf [opt] set and query options q quit the cpan shell
- reload cpan load CPAN.pm again reload index load newer indices
- autobundle Snapshot force cmd unconditionally do cmd});
- }
-}
-
-*help = \&h;
-
-#-> sub CPAN::Shell::a ;
-sub a {
- my($self,@arg) = @_;
- # authors are always UPPERCASE
- for (@arg) {
- $_ = uc $_ unless /=/;
- }
- $CPAN::Frontend->myprint($self->format_result('Author',@arg));
-}
-
-#-> sub CPAN::Shell::ls ;
-sub ls {
- my($self,@arg) = @_;
- my @accept;
- for (@arg) {
- unless (/^[A-Z\-]+$/i) {
- $CPAN::Frontend->mywarn("ls command rejects argument $_: not an author");
- next;
- }
- push @accept, uc $_;
- }
- for my $a (@accept){
- my $author = $self->expand('Author',$a) or die "No author found for $a";
- $author->ls;
- }
-}
-
-#-> sub CPAN::Shell::local_bundles ;
-sub local_bundles {
- my($self,@which) = @_;
- my($incdir,$bdir,$dh);
- foreach $incdir ($CPAN::Config->{'cpan_home'},@INC) {
- my @bbase = "Bundle";
- while (my $bbase = shift @bbase) {
- $bdir = MM->catdir($incdir,split /::/, $bbase);
- CPAN->debug("bdir[$bdir]\@bbase[@bbase]") if $CPAN::DEBUG;
- if ($dh = DirHandle->new($bdir)) { # may fail
- my($entry);
- for $entry ($dh->read) {
- next if $entry =~ /^\./;
- if (-d MM->catdir($bdir,$entry)){
- push @bbase, "$bbase\::$entry";
- } else {
- next unless $entry =~ s/\.pm(?!\n)\Z//;
- $CPAN::META->instance('CPAN::Bundle',"$bbase\::$entry");
- }
- }
- }
- }
- }
-}
-
-#-> sub CPAN::Shell::b ;
-sub b {
- my($self,@which) = @_;
- CPAN->debug("which[@which]") if $CPAN::DEBUG;
- $self->local_bundles;
- $CPAN::Frontend->myprint($self->format_result('Bundle',@which));
-}
-
-#-> sub CPAN::Shell::d ;
-sub d { $CPAN::Frontend->myprint(shift->format_result('Distribution',@_));}
-
-#-> sub CPAN::Shell::m ;
-sub m { # emacs confused here }; sub mimimimimi { # emacs in sync here
- $CPAN::Frontend->myprint(shift->format_result('Module',@_));
-}
-
-#-> sub CPAN::Shell::i ;
-sub i {
- my($self) = shift;
- my(@args) = @_;
- my(@type,$type,@m);
- @type = qw/Author Bundle Distribution Module/;
- @args = '/./' unless @args;
- my(@result);
- for $type (@type) {
- push @result, $self->expand($type,@args);
- }
- my $result = @result == 1 ?
- $result[0]->as_string :
- @result == 0 ?
- "No objects found of any type for argument @args\n" :
- join("",
- (map {$_->as_glimpse} @result),
- scalar @result, " items found\n",
- );
- $CPAN::Frontend->myprint($result);
-}
-
-#-> sub CPAN::Shell::o ;
-
-# CPAN::Shell::o and CPAN::Config::edit are closely related. 'o conf'
-# should have been called set and 'o debug' maybe 'set debug'
-sub o {
- my($self,$o_type,@o_what) = @_;
- $o_type ||= "";
- CPAN->debug("o_type[$o_type] o_what[".join(" | ",@o_what)."]\n");
- if ($o_type eq 'conf') {
- shift @o_what if @o_what && $o_what[0] eq 'help';
- if (!@o_what) { # print all things, "o conf"
- my($k,$v);
- $CPAN::Frontend->myprint("CPAN::Config options");
- if (exists $INC{'CPAN/Config.pm'}) {
- $CPAN::Frontend->myprint(" from $INC{'CPAN/Config.pm'}");
- }
- if (exists $INC{'CPAN/MyConfig.pm'}) {
- $CPAN::Frontend->myprint(" and $INC{'CPAN/MyConfig.pm'}");
- }
- $CPAN::Frontend->myprint(":\n");
- for $k (sort keys %CPAN::Config::can) {
- $v = $CPAN::Config::can{$k};
- $CPAN::Frontend->myprint(sprintf " %-18s %s\n", $k, $v);
- }
- $CPAN::Frontend->myprint("\n");
- for $k (sort keys %$CPAN::Config) {
- CPAN::Config->prettyprint($k);
- }
- $CPAN::Frontend->myprint("\n");
- } elsif (!CPAN::Config->edit(@o_what)) {
- $CPAN::Frontend->myprint(qq{Type 'o conf' to view configuration }.
- qq{edit options\n\n});
- }
- } elsif ($o_type eq 'debug') {
- my(%valid);
- @o_what = () if defined $o_what[0] && $o_what[0] =~ /help/i;
- if (@o_what) {
- while (@o_what) {
- my($what) = shift @o_what;
- if ($what =~ s/^-// && exists $CPAN::DEBUG{$what}) {
- $CPAN::DEBUG &= $CPAN::DEBUG ^ $CPAN::DEBUG{$what};
- next;
- }
- if ( exists $CPAN::DEBUG{$what} ) {
- $CPAN::DEBUG |= $CPAN::DEBUG{$what};
- } elsif ($what =~ /^\d/) {
- $CPAN::DEBUG = $what;
- } elsif (lc $what eq 'all') {
- my($max) = 0;
- for (values %CPAN::DEBUG) {
- $max += $_;
- }
- $CPAN::DEBUG = $max;
- } else {
- my($known) = 0;
- for (keys %CPAN::DEBUG) {
- next unless lc($_) eq lc($what);
- $CPAN::DEBUG |= $CPAN::DEBUG{$_};
- $known = 1;
- }
- $CPAN::Frontend->myprint("unknown argument [$what]\n")
- unless $known;
- }
- }
- } else {
- my $raw = "Valid options for debug are ".
- join(", ",sort(keys %CPAN::DEBUG), 'all').
- qq{ or a number. Completion works on the options. }.
- qq{Case is ignored.};
- require Text::Wrap;
- $CPAN::Frontend->myprint(Text::Wrap::fill("","",$raw));
- $CPAN::Frontend->myprint("\n\n");
- }
- if ($CPAN::DEBUG) {
- $CPAN::Frontend->myprint("Options set for debugging:\n");
- my($k,$v);
- for $k (sort {$CPAN::DEBUG{$a} <=> $CPAN::DEBUG{$b}} keys %CPAN::DEBUG) {
- $v = $CPAN::DEBUG{$k};
- $CPAN::Frontend->myprint(sprintf " %-14s(%s)\n", $k, $v)
- if $v & $CPAN::DEBUG;
- }
- } else {
- $CPAN::Frontend->myprint("Debugging turned off completely.\n");
- }
- } else {
- $CPAN::Frontend->myprint(qq{
-Known options:
- conf set or get configuration variables
- debug set or get debugging options
-});
- }
-}
-
-sub paintdots_onreload {
- my($ref) = shift;
- sub {
- if ( $_[0] =~ /[Ss]ubroutine (\w+) redefined/ ) {
- my($subr) = $1;
- ++$$ref;
- local($|) = 1;
- # $CPAN::Frontend->myprint(".($subr)");
- $CPAN::Frontend->myprint(".");
- return;
- }
- warn @_;
- };
-}
-
-#-> sub CPAN::Shell::reload ;
-sub reload {
- my($self,$command,@arg) = @_;
- $command ||= "";
- $self->debug("self[$self]command[$command]arg[@arg]") if $CPAN::DEBUG;
- if ($command =~ /cpan/i) {
- CPAN->debug("reloading the whole CPAN.pm") if $CPAN::DEBUG;
- my $fh = FileHandle->new($INC{'CPAN.pm'});
- local($/);
- my $redef = 0;
- local($SIG{__WARN__}) = paintdots_onreload(\$redef);
- eval <$fh>;
- warn $@ if $@;
- $CPAN::Frontend->myprint("\n$redef subroutines redefined\n");
- } elsif ($command =~ /index/) {
- CPAN::Index->force_reload;
- } else {
- $CPAN::Frontend->myprint(qq{cpan re-evals the CPAN.pm file
-index re-reads the index files\n});
- }
-}
-
-#-> sub CPAN::Shell::_binary_extensions ;
-sub _binary_extensions {
- my($self) = shift @_;
- my(@result,$module,%seen,%need,$headerdone);
- for $module ($self->expand('Module','/./')) {
- my $file = $module->cpan_file;
- next if $file eq "N/A";
- next if $file =~ /^Contact Author/;
- my $dist = $CPAN::META->instance('CPAN::Distribution',$file);
- next if $dist->isa_perl;
- next unless $module->xs_file;
- local($|) = 1;
- $CPAN::Frontend->myprint(".");
- push @result, $module;
- }
-# print join " | ", @result;
- $CPAN::Frontend->myprint("\n");
- return @result;
-}
-
-#-> sub CPAN::Shell::recompile ;
-sub recompile {
- my($self) = shift @_;
- my($module,@module,$cpan_file,%dist);
- @module = $self->_binary_extensions();
- for $module (@module){ # we force now and compile later, so we
- # don't do it twice
- $cpan_file = $module->cpan_file;
- my $pack = $CPAN::META->instance('CPAN::Distribution',$cpan_file);
- $pack->force;
- $dist{$cpan_file}++;
- }
- for $cpan_file (sort keys %dist) {
- $CPAN::Frontend->myprint(" CPAN: Recompiling $cpan_file\n\n");
- my $pack = $CPAN::META->instance('CPAN::Distribution',$cpan_file);
- $pack->install;
- $CPAN::Signal = 0; # it's tempting to reset Signal, so we can
- # stop a package from recompiling,
- # e.g. IO-1.12 when we have perl5.003_10
- }
-}
-
-#-> sub CPAN::Shell::_u_r_common ;
-sub _u_r_common {
- my($self) = shift @_;
- my($what) = shift @_;
- CPAN->debug("self[$self] what[$what] args[@_]") if $CPAN::DEBUG;
- Carp::croak "Usage: \$obj->_u_r_common(a|r|u)" unless
- $what && $what =~ /^[aru]$/;
- my(@args) = @_;
- @args = '/./' unless @args;
- my(@result,$module,%seen,%need,$headerdone,
- $version_undefs,$version_zeroes);
- $version_undefs = $version_zeroes = 0;
- my $sprintf = "%s%-25s%s %9s %9s %s\n";
- my @expand = $self->expand('Module',@args);
- my $expand = scalar @expand;
- if (0) { # Looks like noise to me, was very useful for debugging
- # for metadata cache
- $CPAN::Frontend->myprint(sprintf "%d matches in the database\n", $expand);
- }
- for $module (@expand) {
- my $file = $module->cpan_file;
- next unless defined $file; # ??
- my($latest) = $module->cpan_version;
- my($inst_file) = $module->inst_file;
- my($have);
- return if $CPAN::Signal;
- if ($inst_file){
- if ($what eq "a") {
- $have = $module->inst_version;
- } elsif ($what eq "r") {
- $have = $module->inst_version;
- local($^W) = 0;
- if ($have eq "undef"){
- $version_undefs++;
- } elsif ($have == 0){
- $version_zeroes++;
- }
- next unless CPAN::Version->vgt($latest, $have);
-# to be pedantic we should probably say:
-# && !($have eq "undef" && $latest ne "undef" && $latest gt "");
-# to catch the case where CPAN has a version 0 and we have a version undef
- } elsif ($what eq "u") {
- next;
- }
- } else {
- if ($what eq "a") {
- next;
- } elsif ($what eq "r") {
- next;
- } elsif ($what eq "u") {
- $have = "-";
- }
- }
- return if $CPAN::Signal; # this is sometimes lengthy
- $seen{$file} ||= 0;
- if ($what eq "a") {
- push @result, sprintf "%s %s\n", $module->id, $have;
- } elsif ($what eq "r") {
- push @result, $module->id;
- next if $seen{$file}++;
- } elsif ($what eq "u") {
- push @result, $module->id;
- next if $seen{$file}++;
- next if $file =~ /^Contact/;
- }
- unless ($headerdone++){
- $CPAN::Frontend->myprint("\n");
- $CPAN::Frontend->myprint(sprintf(
- $sprintf,
- "",
- "Package namespace",
- "",
- "installed",
- "latest",
- "in CPAN file"
- ));
- }
- my $color_on = "";
- my $color_off = "";
- if (
- $COLOR_REGISTERED
- &&
- $CPAN::META->has_inst("Term::ANSIColor")
- &&
- $module->{RO}{description}
- ) {
- $color_on = Term::ANSIColor::color("green");
- $color_off = Term::ANSIColor::color("reset");
- }
- $CPAN::Frontend->myprint(sprintf $sprintf,
- $color_on,
- $module->id,
- $color_off,
- $have,
- $latest,
- $file);
- $need{$module->id}++;
- }
- unless (%need) {
- if ($what eq "u") {
- $CPAN::Frontend->myprint("No modules found for @args\n");
- } elsif ($what eq "r") {
- $CPAN::Frontend->myprint("All modules are up to date for @args\n");
- }
- }
- if ($what eq "r") {
- if ($version_zeroes) {
- my $s_has = $version_zeroes > 1 ? "s have" : " has";
- $CPAN::Frontend->myprint(qq{$version_zeroes installed module$s_has }.
- qq{a version number of 0\n});
- }
- if ($version_undefs) {
- my $s_has = $version_undefs > 1 ? "s have" : " has";
- $CPAN::Frontend->myprint(qq{$version_undefs installed module$s_has no }.
- qq{parseable version number\n});
- }
- }
- @result;
-}
-
-#-> sub CPAN::Shell::r ;
-sub r {
- shift->_u_r_common("r",@_);
-}
-
-#-> sub CPAN::Shell::u ;
-sub u {
- shift->_u_r_common("u",@_);
-}
-
-#-> sub CPAN::Shell::autobundle ;
-sub autobundle {
- my($self) = shift;
- CPAN::Config->load unless $CPAN::Config_loaded++;
- my(@bundle) = $self->_u_r_common("a",@_);
- my($todir) = MM->catdir($CPAN::Config->{'cpan_home'},"Bundle");
- File::Path::mkpath($todir);
- unless (-d $todir) {
- $CPAN::Frontend->myprint("Couldn't mkdir $todir for some reason\n");
- return;
- }
- my($y,$m,$d) = (localtime)[5,4,3];
- $y+=1900;
- $m++;
- my($c) = 0;
- my($me) = sprintf "Snapshot_%04d_%02d_%02d_%02d", $y, $m, $d, $c;
- my($to) = MM->catfile($todir,"$me.pm");
- while (-f $to) {
- $me = sprintf "Snapshot_%04d_%02d_%02d_%02d", $y, $m, $d, ++$c;
- $to = MM->catfile($todir,"$me.pm");
- }
- my($fh) = FileHandle->new(">$to") or Carp::croak "Can't open >$to: $!";
- $fh->print(
- "package Bundle::$me;\n\n",
- "\$VERSION = '0.01';\n\n",
- "1;\n\n",
- "__END__\n\n",
- "=head1 NAME\n\n",
- "Bundle::$me - Snapshot of installation on ",
- $Config::Config{'myhostname'},
- " on ",
- scalar(localtime),
- "\n\n=head1 SYNOPSIS\n\n",
- "perl -MCPAN -e 'install Bundle::$me'\n\n",
- "=head1 CONTENTS\n\n",
- join("\n", @bundle),
- "\n\n=head1 CONFIGURATION\n\n",
- Config->myconfig,
- "\n\n=head1 AUTHOR\n\n",
- "This Bundle has been generated automatically ",
- "by the autobundle routine in CPAN.pm.\n",
- );
- $fh->close;
- $CPAN::Frontend->myprint("\nWrote bundle file
- $to\n\n");
-}
-
-#-> sub CPAN::Shell::expandany ;
-sub expandany {
- my($self,$s) = @_;
- CPAN->debug("s[$s]") if $CPAN::DEBUG;
- if ($s =~ m|/|) { # looks like a file
- $s = CPAN::Distribution->normalize($s);
- return $CPAN::META->instance('CPAN::Distribution',$s);
- # Distributions spring into existence, not expand
- } elsif ($s =~ m|^Bundle::|) {
- $self->local_bundles; # scanning so late for bundles seems
- # both attractive and crumpy: always
- # current state but easy to forget
- # somewhere
- return $self->expand('Bundle',$s);
- } else {
- return $self->expand('Module',$s)
- if $CPAN::META->exists('CPAN::Module',$s);
- }
- return;
-}
-
-#-> sub CPAN::Shell::expand ;
-sub expand {
- shift;
- my($type,@args) = @_;
- my($arg,@m);
- CPAN->debug("type[$type]args[@args]") if $CPAN::DEBUG;
- for $arg (@args) {
- my($regex,$command);
- if ($arg =~ m|^/(.*)/$|) {
- $regex = $1;
- } elsif ($arg =~ m/=/) {
- $command = 1;
- }
- my $class = "CPAN::$type";
- my $obj;
- CPAN->debug(sprintf "class[%s]regex[%s]command[%s]",
- $class,
- defined $regex ? $regex : "UNDEFINED",
- $command || "UNDEFINED",
- ) if $CPAN::DEBUG;
- if (defined $regex) {
- for $obj (
- sort
- {$a->id cmp $b->id}
- $CPAN::META->all_objects($class)
- ) {
- unless ($obj->id){
- # BUG, we got an empty object somewhere
- require Data::Dumper;
- CPAN->debug(sprintf(
- "Bug in CPAN: Empty id on obj[%s][%s]",
- $obj,
- Data::Dumper::Dumper($obj)
- )) if $CPAN::DEBUG;
- next;
- }
- push @m, $obj
- if $obj->id =~ /$regex/i
- or
- (
- (
- $] < 5.00303 ### provide sort of
- ### compatibility with 5.003
- ||
- $obj->can('name')
- )
- &&
- $obj->name =~ /$regex/i
- );
- }
- } elsif ($command) {
- die "equal sign in command disabled (immature interface), ".
- "you can set
- ! \$CPAN::Shell::ADVANCED_QUERY=1
-to enable it. But please note, this is HIGHLY EXPERIMENTAL code
-that may go away anytime.\n"
- unless $ADVANCED_QUERY;
- my($method,$criterion) = $arg =~ /(.+?)=(.+)/;
- my($matchcrit) = $criterion =~ m/^~(.+)/;
- for my $self (
- sort
- {$a->id cmp $b->id}
- $CPAN::META->all_objects($class)
- ) {
- my $lhs = $self->$method() or next; # () for 5.00503
- if ($matchcrit) {
- push @m, $self if $lhs =~ m/$matchcrit/;
- } else {
- push @m, $self if $lhs eq $criterion;
- }
- }
- } else {
- my($xarg) = $arg;
- if ( $type eq 'Bundle' ) {
- $xarg =~ s/^(Bundle::)?(.*)/Bundle::$2/;
- } elsif ($type eq "Distribution") {
- $xarg = CPAN::Distribution->normalize($arg);
- }
- if ($CPAN::META->exists($class,$xarg)) {
- $obj = $CPAN::META->instance($class,$xarg);
- } elsif ($CPAN::META->exists($class,$arg)) {
- $obj = $CPAN::META->instance($class,$arg);
- } else {
- next;
- }
- push @m, $obj;
- }
- }
- return wantarray ? @m : $m[0];
-}
-
-#-> sub CPAN::Shell::format_result ;
-sub format_result {
- my($self) = shift;
- my($type,@args) = @_;
- @args = '/./' unless @args;
- my(@result) = $self->expand($type,@args);
- my $result = @result == 1 ?
- $result[0]->as_string :
- @result == 0 ?
- "No objects of type $type found for argument @args\n" :
- join("",
- (map {$_->as_glimpse} @result),
- scalar @result, " items found\n",
- );
- $result;
-}
-
-# The only reason for this method is currently to have a reliable
-# debugging utility that reveals which output is going through which
-# channel. No, I don't like the colors ;-)
-
-#-> sub CPAN::Shell::print_ornameted ;
-sub print_ornamented {
- my($self,$what,$ornament) = @_;
- my $longest = 0;
- return unless defined $what;
-
- if ($CPAN::Config->{term_is_latin}){
- # courtesy jhi:
- $what
- =~ s{([\xC0-\xDF])([\x80-\xBF])}{chr(ord($1)<<6&0xC0|ord($2)&0x3F)}eg; #};
- }
- if ($PRINT_ORNAMENTING) {
- unless (defined &color) {
- if ($CPAN::META->has_inst("Term::ANSIColor")) {
- import Term::ANSIColor "color";
- } else {
- *color = sub { return "" };
- }
- }
- my $line;
- for $line (split /\n/, $what) {
- $longest = length($line) if length($line) > $longest;
- }
- my $sprintf = "%-" . $longest . "s";
- while ($what){
- $what =~ s/(.*\n?)//m;
- my $line = $1;
- last unless $line;
- my($nl) = chomp $line ? "\n" : "";
- # print "line[$line]ornament[$ornament]sprintf[$sprintf]\n";
- print color($ornament), sprintf($sprintf,$line), color("reset"), $nl;
- }
- } else {
- print $what;
- }
-}
-
-sub myprint {
- my($self,$what) = @_;
-
- $self->print_ornamented($what, 'bold blue on_yellow');
-}
-
-sub myexit {
- my($self,$what) = @_;
- $self->myprint($what);
- exit;
-}
-
-sub mywarn {
- my($self,$what) = @_;
- $self->print_ornamented($what, 'bold red on_yellow');
-}
-
-sub myconfess {
- my($self,$what) = @_;
- $self->print_ornamented($what, 'bold red on_white');
- Carp::confess "died";
-}
-
-sub mydie {
- my($self,$what) = @_;
- $self->print_ornamented($what, 'bold red on_white');
- die "\n";
-}
-
-sub setup_output {
- return if -t STDOUT;
- my $odef = select STDERR;
- $| = 1;
- select STDOUT;
- $| = 1;
- select $odef;
-}
-
-#-> sub CPAN::Shell::rematein ;
-# RE-adme||MA-ke||TE-st||IN-stall
-sub rematein {
- shift;
- my($meth,@some) = @_;
- my $pragma = "";
- if ($meth eq 'force') {
- $pragma = $meth;
- $meth = shift @some;
- }
- setup_output();
- CPAN->debug("pragma[$pragma]meth[$meth] some[@some]") if $CPAN::DEBUG;
-
- # Here is the place to set "test_count" on all involved parties to
- # 0. We then can pass this counter on to the involved
- # distributions and those can refuse to test if test_count > X. In
- # the first stab at it we could use a 1 for "X".
-
- # But when do I reset the distributions to start with 0 again?
- # Jost suggested to have a random or cycling interaction ID that
- # we pass through. But the ID is something that is just left lying
- # around in addition to the counter, so I'd prefer to set the
- # counter to 0 now, and repeat at the end of the loop. But what
- # about dependencies? They appear later and are not reset, they
- # enter the queue but not its copy. How do they get a sensible
- # test_count?
-
- # construct the queue
- my($s,@s,@qcopy);
- foreach $s (@some) {
- my $obj;
- if (ref $s) {
- CPAN->debug("s is an object[$s]") if $CPAN::DEBUG;
- $obj = $s;
- } elsif ($s =~ m|^/|) { # looks like a regexp
- $CPAN::Frontend->mywarn("Sorry, $meth with a regular expression is ".
- "not supported\n");
- sleep 2;
- next;
- } else {
- CPAN->debug("calling expandany [$s]") if $CPAN::DEBUG;
- $obj = CPAN::Shell->expandany($s);
- }
- if (ref $obj) {
- $obj->color_cmd_tmps(0,1);
- CPAN::Queue->new($obj->id);
- push @qcopy, $obj;
- } elsif ($CPAN::META->exists('CPAN::Author',$s)) {
- $obj = $CPAN::META->instance('CPAN::Author',$s);
- if ($meth eq "dump") {
- $obj->dump;
- } else {
- $CPAN::Frontend->myprint(
- join "",
- "Don't be silly, you can't $meth ",
- $obj->fullname,
- " ;-)\n"
- );
- sleep 2;
- }
- } else {
- $CPAN::Frontend
- ->myprint(qq{Warning: Cannot $meth $s, }.
- qq{don\'t know what it is.
-Try the command
-
- i /$s/
-
-to find objects with matching identifiers.
-});
- sleep 2;
- }
- }
-
- # queuerunner (please be warned: when I started to change the
- # queue to hold objects instead of names, I made one or two
- # mistakes and never found which. I reverted back instead)
- while ($s = CPAN::Queue->first) {
- my $obj;
- if (ref $s) {
- $obj = $s; # I do not believe, we would survive if this happened
- } else {
- $obj = CPAN::Shell->expandany($s);
- }
- if ($pragma
- &&
- ($] < 5.00303 || $obj->can($pragma))){
- ### compatibility with 5.003
- $obj->$pragma($meth); # the pragma "force" in
- # "CPAN::Distribution" must know
- # what we are intending
- }
- if ($]>=5.00303 && $obj->can('called_for')) {
- $obj->called_for($s);
- }
- CPAN->debug(
- qq{pragma[$pragma]meth[$meth]obj[$obj]as_string\[}.
- $obj->as_string.
- qq{\]}
- ) if $CPAN::DEBUG;
-
- if ($obj->$meth()){
- CPAN::Queue->delete($s);
- } else {
- CPAN->debug("failed");
- }
-
- $obj->undelay;
- CPAN::Queue->delete_first($s);
- }
- for my $obj (@qcopy) {
- $obj->color_cmd_tmps(0,0);
- }
-}
-
-#-> sub CPAN::Shell::dump ;
-sub dump { shift->rematein('dump',@_); }
-#-> sub CPAN::Shell::force ;
-sub force { shift->rematein('force',@_); }
-#-> sub CPAN::Shell::get ;
-sub get { shift->rematein('get',@_); }
-#-> sub CPAN::Shell::readme ;
-sub readme { shift->rematein('readme',@_); }
-#-> sub CPAN::Shell::make ;
-sub make { shift->rematein('make',@_); }
-#-> sub CPAN::Shell::test ;
-sub test { shift->rematein('test',@_); }
-#-> sub CPAN::Shell::install ;
-sub install { shift->rematein('install',@_); }
-#-> sub CPAN::Shell::clean ;
-sub clean { shift->rematein('clean',@_); }
-#-> sub CPAN::Shell::look ;
-sub look { shift->rematein('look',@_); }
-#-> sub CPAN::Shell::cvs_import ;
-sub cvs_import { shift->rematein('cvs_import',@_); }
-
-package CPAN::LWP::UserAgent;
-
-sub config {
- return if $SETUPDONE;
- if ($CPAN::META->has_usable('LWP::UserAgent')) {
- require LWP::UserAgent;
- @ISA = qw(Exporter LWP::UserAgent);
- $SETUPDONE++;
- } else {
- $CPAN::Frontent->mywarn("LWP::UserAgent not available\n");
- }
-}
-
-sub get_basic_credentials {
- my($self, $realm, $uri, $proxy) = @_;
- return unless $proxy;
- if ($USER && $PASSWD) {
- } elsif (defined $CPAN::Config->{proxy_user} &&
- defined $CPAN::Config->{proxy_pass}) {
- $USER = $CPAN::Config->{proxy_user};
- $PASSWD = $CPAN::Config->{proxy_pass};
- } else {
- require ExtUtils::MakeMaker;
- ExtUtils::MakeMaker->import(qw(prompt));
- $USER = prompt("Proxy authentication needed!
- (Note: to permanently configure username and password run
- o conf proxy_user your_username
- o conf proxy_pass your_password
- )\nUsername:");
- if ($CPAN::META->has_inst("Term::ReadKey")) {
- Term::ReadKey::ReadMode("noecho");
- } else {
- $CPAN::Frontend->mywarn("Warning: Term::ReadKey seems not to be available, your password will be echoed to the terminal!\n");
- }
- $PASSWD = prompt("Password:");
- if ($CPAN::META->has_inst("Term::ReadKey")) {
- Term::ReadKey::ReadMode("restore");
- }
- $CPAN::Frontend->myprint("\n\n");
- }
- return($USER,$PASSWD);
-}
-
-sub mirror {
- my($self,$url,$aslocal) = @_;
- my $result = $self->SUPER::mirror($url,$aslocal);
- if ($result->code == 407) {
- undef $USER;
- undef $PASSWD;
- $result = $self->SUPER::mirror($url,$aslocal);
- }
- $result;
-}
-
-package CPAN::FTP;
-
-#-> sub CPAN::FTP::ftp_get ;
-sub ftp_get {
- my($class,$host,$dir,$file,$target) = @_;
- $class->debug(
- qq[Going to fetch file [$file] from dir [$dir]
- on host [$host] as local [$target]\n]
- ) if $CPAN::DEBUG;
- my $ftp = Net::FTP->new($host);
- return 0 unless defined $ftp;
- $ftp->debug(1) if $CPAN::DEBUG{'FTP'} & $CPAN::DEBUG;
- $class->debug(qq[Going to login("anonymous","$Config::Config{cf_email}")]);
- unless ( $ftp->login("anonymous",$Config::Config{'cf_email'}) ){
- warn "Couldn't login on $host";
- return;
- }
- unless ( $ftp->cwd($dir) ){
- warn "Couldn't cwd $dir";
- return;
- }
- $ftp->binary;
- $class->debug(qq[Going to ->get("$file","$target")\n]) if $CPAN::DEBUG;
- unless ( $ftp->get($file,$target) ){
- warn "Couldn't fetch $file from $host\n";
- return;
- }
- $ftp->quit; # it's ok if this fails
- return 1;
-}
-
-# If more accuracy is wanted/needed, Chris Leach sent me this patch...
-
- # > *** /install/perl/live/lib/CPAN.pm- Wed Sep 24 13:08:48 1997
- # > --- /tmp/cp Wed Sep 24 13:26:40 1997
- # > ***************
- # > *** 1562,1567 ****
- # > --- 1562,1580 ----
- # > return 1 if substr($url,0,4) eq "file";
- # > return 1 unless $url =~ m|://([^/]+)|;
- # > my $host = $1;
- # > + my $proxy = $CPAN::Config->{'http_proxy'} || $ENV{'http_proxy'};
- # > + if ($proxy) {
- # > + $proxy =~ m|://([^/:]+)|;
- # > + $proxy = $1;
- # > + my $noproxy = $CPAN::Config->{'no_proxy'} || $ENV{'no_proxy'};
- # > + if ($noproxy) {
- # > + if ($host !~ /$noproxy$/) {
- # > + $host = $proxy;
- # > + }
- # > + } else {
- # > + $host = $proxy;
- # > + }
- # > + }
- # > require Net::Ping;
- # > return 1 unless $Net::Ping::VERSION >= 2;
- # > my $p;
-
-
-#-> sub CPAN::FTP::localize ;
-sub localize {
- my($self,$file,$aslocal,$force) = @_;
- $force ||= 0;
- Carp::croak "Usage: ->localize(cpan_file,as_local_file[,$force])"
- unless defined $aslocal;
- $self->debug("file[$file] aslocal[$aslocal] force[$force]")
- if $CPAN::DEBUG;
-
- if ($^O eq 'MacOS') {
- # Comment by AK on 2000-09-03: Uniq short filenames would be
- # available in CHECKSUMS file
- my($name, $path) = File::Basename::fileparse($aslocal, '');
- if (length($name) > 31) {
- $name =~ s/(
- \.(
- readme(\.(gz|Z))? |
- (tar\.)?(gz|Z) |
- tgz |
- zip |
- pm\.(gz|Z)
- )
- )$//x;
- my $suf = $1;
- my $size = 31 - length($suf);
- while (length($name) > $size) {
- chop $name;
- }
- $name .= $suf;
- $aslocal = File::Spec->catfile($path, $name);
- }
- }
-
- return $aslocal if -f $aslocal && -r _ && !($force & 1);
- my($restore) = 0;
- if (-f $aslocal){
- rename $aslocal, "$aslocal.bak";
- $restore++;
- }
-
- my($aslocal_dir) = File::Basename::dirname($aslocal);
- File::Path::mkpath($aslocal_dir);
- $CPAN::Frontend->mywarn(qq{Warning: You are not allowed to write into }.
- qq{directory "$aslocal_dir".
- I\'ll continue, but if you encounter problems, they may be due
- to insufficient permissions.\n}) unless -w $aslocal_dir;
-
- # Inheritance is not easier to manage than a few if/else branches
- if ($CPAN::META->has_usable('LWP::UserAgent')) {
- unless ($Ua) {
- CPAN::LWP::UserAgent->config;
- eval {$Ua = CPAN::LWP::UserAgent->new;}; # Why is has_usable still not fit enough?
- if ($@) {
- $CPAN::Frontent->mywarn("CPAN::LWP::UserAgent->new dies with $@")
- if $CPAN::DEBUG;
- } else {
- my($var);
- $Ua->proxy('ftp', $var)
- if $var = $CPAN::Config->{ftp_proxy} || $ENV{ftp_proxy};
- $Ua->proxy('http', $var)
- if $var = $CPAN::Config->{http_proxy} || $ENV{http_proxy};
-
-
-# >>>>> On Wed, 13 Dec 2000 09:21:34 -0500, "Robison, Jonathon (J.M.)" <jrobiso2@visteon.com> said:
-#
-# > I note that although CPAN.pm can use proxies, it doesn't seem equipped to
-# > use ones that require basic autorization.
-#
-# > Example of when I use it manually in my own stuff:
-#
-# > $ua->proxy(['http','ftp'], http://my.proxy.server:83');
-# > $req->proxy_authorization_basic("username","password");
-# > $res = $ua->request($req);
-#
-
- $Ua->no_proxy($var)
- if $var = $CPAN::Config->{no_proxy} || $ENV{no_proxy};
- }
- }
- }
- $ENV{ftp_proxy} = $CPAN::Config->{ftp_proxy} if $CPAN::Config->{ftp_proxy};
- $ENV{http_proxy} = $CPAN::Config->{http_proxy}
- if $CPAN::Config->{http_proxy};
- $ENV{no_proxy} = $CPAN::Config->{no_proxy} if $CPAN::Config->{no_proxy};
-
- # Try the list of urls for each single object. We keep a record
- # where we did get a file from
- my(@reordered,$last);
- $CPAN::Config->{urllist} ||= [];
- $last = $#{$CPAN::Config->{urllist}};
- if ($force & 2) { # local cpans probably out of date, don't reorder
- @reordered = (0..$last);
- } else {
- @reordered =
- sort {
- (substr($CPAN::Config->{urllist}[$b],0,4) eq "file")
- <=>
- (substr($CPAN::Config->{urllist}[$a],0,4) eq "file")
- or
- defined($Thesite)
- and
- ($b == $Thesite)
- <=>
- ($a == $Thesite)
- } 0..$last;
- }
- my(@levels);
- if ($Themethod) {
- @levels = ($Themethod, grep {$_ ne $Themethod} qw/easy hard hardest/);
- } else {
- @levels = qw/easy hard hardest/;
- }
- @levels = qw/easy/ if $^O eq 'MacOS';
- my($levelno);
- for $levelno (0..$#levels) {
- my $level = $levels[$levelno];
- my $method = "host$level";
- my @host_seq = $level eq "easy" ?
- @reordered : 0..$last; # reordered has CDROM up front
- @host_seq = (0) unless @host_seq;
- my $ret = $self->$method(\@host_seq,$file,$aslocal);
- if ($ret) {
- $Themethod = $level;
- my $now = time;
- # utime $now, $now, $aslocal; # too bad, if we do that, we
- # might alter a local mirror
- $self->debug("level[$level]") if $CPAN::DEBUG;
- return $ret;
- } else {
- unlink $aslocal;
- last if $CPAN::Signal; # need to cleanup
- }
- }
- unless ($CPAN::Signal) {
- my(@mess);
- push @mess,
- qq{Please check, if the URLs I found in your configuration file \(}.
- join(", ", @{$CPAN::Config->{urllist}}).
- qq{\) are valid. The urllist can be edited.},
- qq{E.g. with 'o conf urllist push ftp://myurl/'};
- $CPAN::Frontend->myprint(Text::Wrap::wrap("","",@mess). "\n\n");
- sleep 2;
- $CPAN::Frontend->myprint("Could not fetch $file\n");
- }
- if ($restore) {
- rename "$aslocal.bak", $aslocal;
- $CPAN::Frontend->myprint("Trying to get away with old file:\n" .
- $self->ls($aslocal));
- return $aslocal;
- }
- return;
-}
-
-sub hosteasy {
- my($self,$host_seq,$file,$aslocal) = @_;
- my($i);
- HOSTEASY: for $i (@$host_seq) {
- my $url = $CPAN::Config->{urllist}[$i] || $CPAN::Defaultsite;
- $url .= "/" unless substr($url,-1) eq "/";
- $url .= $file;
- $self->debug("localizing perlish[$url]") if $CPAN::DEBUG;
- if ($url =~ /^file:/) {
- my $l;
- if ($CPAN::META->has_inst('URI::URL')) {
- my $u = URI::URL->new($url);
- $l = $u->path;
- } else { # works only on Unix, is poorly constructed, but
- # hopefully better than nothing.
- # RFC 1738 says fileurl BNF is
- # fileurl = "file://" [ host | "localhost" ] "/" fpath
- # Thanks to "Mark D. Baushke" <mdb@cisco.com> for
- # the code
- ($l = $url) =~ s|^file://[^/]*/|/|; # discard the host part
- $l =~ s|^file:||; # assume they
- # meant
- # file://localhost
- $l =~ s|^/||s unless -f $l; # e.g. /P:
- $self->debug("without URI::URL we try local file $l") if $CPAN::DEBUG;
- }
- if ( -f $l && -r _) {
- $Thesite = $i;
- return $l;
- }
- # Maybe mirror has compressed it?
- if (-f "$l.gz") {
- $self->debug("found compressed $l.gz") if $CPAN::DEBUG;
- CPAN::Tarzip->gunzip("$l.gz", $aslocal);
- if ( -f $aslocal) {
- $Thesite = $i;
- return $aslocal;
- }
- }
- }
- if ($CPAN::META->has_usable('LWP')) {
- $CPAN::Frontend->myprint("Fetching with LWP:
- $url
-");
- unless ($Ua) {
- CPAN::LWP::UserAgent->config;
- eval { $Ua = CPAN::LWP::UserAgent->new; };
- if ($@) {
- $CPAN::Frontent->mywarn("CPAN::LWP::UserAgent->new dies with $@");
- }
- }
- my $res = $Ua->mirror($url, $aslocal);
- if ($res->is_success) {
- $Thesite = $i;
- my $now = time;
- utime $now, $now, $aslocal; # download time is more
- # important than upload time
- return $aslocal;
- } elsif ($url !~ /\.gz(?!\n)\Z/) {
- my $gzurl = "$url.gz";
- $CPAN::Frontend->myprint("Fetching with LWP:
- $gzurl
-");
- $res = $Ua->mirror($gzurl, "$aslocal.gz");
- if ($res->is_success &&
- CPAN::Tarzip->gunzip("$aslocal.gz",$aslocal)
- ) {
- $Thesite = $i;
- return $aslocal;
- }
- } else {
- $CPAN::Frontend->myprint(sprintf(
- "LWP failed with code[%s] message[%s]\n",
- $res->code,
- $res->message,
- ));
- # Alan Burlison informed me that in firewall environments
- # Net::FTP can still succeed where LWP fails. So we do not
- # skip Net::FTP anymore when LWP is available.
- }
- } else {
- $CPAN::Frontend->myprint("LWP not available\n");
- }
- return if $CPAN::Signal;
- if ($url =~ m|^ftp://(.*?)/(.*)/(.*)|) {
- # that's the nice and easy way thanks to Graham
- my($host,$dir,$getfile) = ($1,$2,$3);
- if ($CPAN::META->has_usable('Net::FTP')) {
- $dir =~ s|/+|/|g;
- $CPAN::Frontend->myprint("Fetching with Net::FTP:
- $url
-");
- $self->debug("getfile[$getfile]dir[$dir]host[$host]" .
- "aslocal[$aslocal]") if $CPAN::DEBUG;
- if (CPAN::FTP->ftp_get($host,$dir,$getfile,$aslocal)) {
- $Thesite = $i;
- return $aslocal;
- }
- if ($aslocal !~ /\.gz(?!\n)\Z/) {
- my $gz = "$aslocal.gz";
- $CPAN::Frontend->myprint("Fetching with Net::FTP
- $url.gz
-");
- if (CPAN::FTP->ftp_get($host,
- $dir,
- "$getfile.gz",
- $gz) &&
- CPAN::Tarzip->gunzip($gz,$aslocal)
- ){
- $Thesite = $i;
- return $aslocal;
- }
- }
- # next HOSTEASY;
- }
- }
- return if $CPAN::Signal;
- }
-}
-
-sub hosthard {
- my($self,$host_seq,$file,$aslocal) = @_;
-
- # Came back if Net::FTP couldn't establish connection (or
- # failed otherwise) Maybe they are behind a firewall, but they
- # gave us a socksified (or other) ftp program...
-
- my($i);
- my($devnull) = $CPAN::Config->{devnull} || "";
- # < /dev/null ";
- my($aslocal_dir) = File::Basename::dirname($aslocal);
- File::Path::mkpath($aslocal_dir);
- HOSTHARD: for $i (@$host_seq) {
- my $url = $CPAN::Config->{urllist}[$i] || $CPAN::Defaultsite;
- $url .= "/" unless substr($url,-1) eq "/";
- $url .= $file;
- my($proto,$host,$dir,$getfile);
-
- # Courtesy Mark Conty mark_conty@cargill.com change from
- # if ($url =~ m|^ftp://(.*?)/(.*)/(.*)|) {
- # to
- if ($url =~ m|^([^:]+)://(.*?)/(.*)/(.*)|) {
- # proto not yet used
- ($proto,$host,$dir,$getfile) = ($1,$2,$3,$4);
- } else {
- next HOSTHARD; # who said, we could ftp anything except ftp?
- }
- next HOSTHARD if $proto eq "file"; # file URLs would have had
- # success above. Likely a bogus URL
-
- $self->debug("localizing funkyftpwise[$url]") if $CPAN::DEBUG;
- my($f,$funkyftp);
- for $f ('lynx','ncftpget','ncftp','wget') {
- next unless exists $CPAN::Config->{$f};
- $funkyftp = $CPAN::Config->{$f};
- next unless defined $funkyftp;
- next if $funkyftp =~ /^\s*$/;
- my($asl_ungz, $asl_gz);
- ($asl_ungz = $aslocal) =~ s/\.gz//;
- $asl_gz = "$asl_ungz.gz";
- my($src_switch) = "";
- if ($f eq "lynx"){
- $src_switch = " -source";
- } elsif ($f eq "ncftp"){
- $src_switch = " -c";
- } elsif ($f eq "wget"){
- $src_switch = " -O -";
- }
- my($chdir) = "";
- my($stdout_redir) = " > $asl_ungz";
- if ($f eq "ncftpget"){
- $chdir = "cd $aslocal_dir && ";
- $stdout_redir = "";
- }
- $CPAN::Frontend->myprint(
- qq[
-Trying with "$funkyftp$src_switch" to get
- $url
-]);
- my($system) =
- "$chdir$funkyftp$src_switch '$url' $devnull$stdout_redir";
- $self->debug("system[$system]") if $CPAN::DEBUG;
- my($wstatus);
- if (($wstatus = system($system)) == 0
- &&
- ($f eq "lynx" ?
- -s $asl_ungz # lynx returns 0 when it fails somewhere
- : 1
- )
- ) {
- if (-s $aslocal) {
- # Looks good
- } elsif ($asl_ungz ne $aslocal) {
- # test gzip integrity
- if (CPAN::Tarzip->gtest($asl_ungz)) {
- # e.g. foo.tar is gzipped --> foo.tar.gz
- rename $asl_ungz, $aslocal;
- } else {
- CPAN::Tarzip->gzip($asl_ungz,$asl_gz);
- }
- }
- $Thesite = $i;
- return $aslocal;
- } elsif ($url !~ /\.gz(?!\n)\Z/) {
- unlink $asl_ungz if
- -f $asl_ungz && -s _ == 0;
- my $gz = "$aslocal.gz";
- my $gzurl = "$url.gz";
- $CPAN::Frontend->myprint(
- qq[
-Trying with "$funkyftp$src_switch" to get
- $url.gz
-]);
- my($system) = "$funkyftp$src_switch '$url.gz' $devnull > $asl_gz";
- $self->debug("system[$system]") if $CPAN::DEBUG;
- my($wstatus);
- if (($wstatus = system($system)) == 0
- &&
- -s $asl_gz
- ) {
- # test gzip integrity
- if (CPAN::Tarzip->gtest($asl_gz)) {
- CPAN::Tarzip->gunzip($asl_gz,$aslocal);
- } else {
- # somebody uncompressed file for us?
- rename $asl_ungz, $aslocal;
- }
- $Thesite = $i;
- return $aslocal;
- } else {
- unlink $asl_gz if -f $asl_gz;
- }
- } else {
- my $estatus = $wstatus >> 8;
- my $size = -f $aslocal ?
- ", left\n$aslocal with size ".-s _ :
- "\nWarning: expected file [$aslocal] doesn't exist";
- $CPAN::Frontend->myprint(qq{
-System call "$system"
-returned status $estatus (wstat $wstatus)$size
-});
- }
- return if $CPAN::Signal;
- } # lynx,ncftpget,ncftp
- } # host
-}
-
-sub hosthardest {
- my($self,$host_seq,$file,$aslocal) = @_;
-
- my($i);
- my($aslocal_dir) = File::Basename::dirname($aslocal);
- File::Path::mkpath($aslocal_dir);
- HOSTHARDEST: for $i (@$host_seq) {
- unless (length $CPAN::Config->{'ftp'}) {
- $CPAN::Frontend->myprint("No external ftp command available\n\n");
- last HOSTHARDEST;
- }
- my $url = $CPAN::Config->{urllist}[$i] || $CPAN::Defaultsite;
- $url .= "/" unless substr($url,-1) eq "/";
- $url .= $file;
- $self->debug("localizing ftpwise[$url]") if $CPAN::DEBUG;
- unless ($url =~ m|^ftp://(.*?)/(.*)/(.*)|) {
- next;
- }
- my($host,$dir,$getfile) = ($1,$2,$3);
- my $timestamp = 0;
- my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
- $ctime,$blksize,$blocks) = stat($aslocal);
- $timestamp = $mtime ||= 0;
- my($netrc) = CPAN::FTP::netrc->new;
- my($netrcfile) = $netrc->netrc;
- my($verbose) = $CPAN::DEBUG{'FTP'} & $CPAN::DEBUG ? " -v" : "";
- my $targetfile = File::Basename::basename($aslocal);
- my(@dialog);
- push(
- @dialog,
- "lcd $aslocal_dir",
- "cd /",
- map("cd $_", split "/", $dir), # RFC 1738
- "bin",
- "get $getfile $targetfile",
- "quit"
- );
- if (! $netrcfile) {
- CPAN->debug("No ~/.netrc file found") if $CPAN::DEBUG;
- } elsif ($netrc->hasdefault || $netrc->contains($host)) {
- CPAN->debug(sprintf("hasdef[%d]cont($host)[%d]",
- $netrc->hasdefault,
- $netrc->contains($host))) if $CPAN::DEBUG;
- if ($netrc->protected) {
- $CPAN::Frontend->myprint(qq{
- Trying with external ftp to get
- $url
- As this requires some features that are not thoroughly tested, we\'re
- not sure, that we get it right....
-
-}
- );
- $self->talk_ftp("$CPAN::Config->{'ftp'}$verbose $host",
- @dialog);
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
- $atime,$mtime,$ctime,$blksize,$blocks) = stat($aslocal);
- $mtime ||= 0;
- if ($mtime > $timestamp) {
- $CPAN::Frontend->myprint("GOT $aslocal\n");
- $Thesite = $i;
- return $aslocal;
- } else {
- $CPAN::Frontend->myprint("Hmm... Still failed!\n");
- }
- return if $CPAN::Signal;
- } else {
- $CPAN::Frontend->mywarn(qq{Your $netrcfile is not }.
- qq{correctly protected.\n});
- }
- } else {
- $CPAN::Frontend->mywarn("Your ~/.netrc neither contains $host
- nor does it have a default entry\n");
- }
-
- # OK, they don't have a valid ~/.netrc. Use 'ftp -n'
- # then and login manually to host, using e-mail as
- # password.
- $CPAN::Frontend->myprint(qq{Issuing "$CPAN::Config->{'ftp'}$verbose -n"\n});
- unshift(
- @dialog,
- "open $host",
- "user anonymous $Config::Config{'cf_email'}"
- );
- $self->talk_ftp("$CPAN::Config->{'ftp'}$verbose -n", @dialog);
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
- $atime,$mtime,$ctime,$blksize,$blocks) = stat($aslocal);
- $mtime ||= 0;
- if ($mtime > $timestamp) {
- $CPAN::Frontend->myprint("GOT $aslocal\n");
- $Thesite = $i;
- return $aslocal;
- } else {
- $CPAN::Frontend->myprint("Bad luck... Still failed!\n");
- }
- return if $CPAN::Signal;
- $CPAN::Frontend->myprint("Can't access URL $url.\n\n");
- sleep 2;
- } # host
-}
-
-sub talk_ftp {
- my($self,$command,@dialog) = @_;
- my $fh = FileHandle->new;
- $fh->open("|$command") or die "Couldn't open ftp: $!";
- foreach (@dialog) { $fh->print("$_\n") }
- $fh->close; # Wait for process to complete
- my $wstatus = $?;
- my $estatus = $wstatus >> 8;
- $CPAN::Frontend->myprint(qq{
-Subprocess "|$command"
- returned status $estatus (wstat $wstatus)
-}) if $wstatus;
-}
-
-# find2perl needs modularization, too, all the following is stolen
-# from there
-# CPAN::FTP::ls
-sub ls {
- my($self,$name) = @_;
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$sizemm,
- $atime,$mtime,$ctime,$blksize,$blocks) = lstat($name);
-
- my($perms,%user,%group);
- my $pname = $name;
-
- if ($blocks) {
- $blocks = int(($blocks + 1) / 2);
- }
- else {
- $blocks = int(($sizemm + 1023) / 1024);
- }
-
- if (-f _) { $perms = '-'; }
- elsif (-d _) { $perms = 'd'; }
- elsif (-c _) { $perms = 'c'; $sizemm = &sizemm; }
- elsif (-b _) { $perms = 'b'; $sizemm = &sizemm; }
- elsif (-p _) { $perms = 'p'; }
- elsif (-S _) { $perms = 's'; }
- else { $perms = 'l'; $pname .= ' -> ' . readlink($_); }
-
- my(@rwx) = ('---','--x','-w-','-wx','r--','r-x','rw-','rwx');
- my(@moname) = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
- my $tmpmode = $mode;
- my $tmp = $rwx[$tmpmode & 7];
- $tmpmode >>= 3;
- $tmp = $rwx[$tmpmode & 7] . $tmp;
- $tmpmode >>= 3;
- $tmp = $rwx[$tmpmode & 7] . $tmp;
- substr($tmp,2,1) =~ tr/-x/Ss/ if -u _;
- substr($tmp,5,1) =~ tr/-x/Ss/ if -g _;
- substr($tmp,8,1) =~ tr/-x/Tt/ if -k _;
- $perms .= $tmp;
-
- my $user = $user{$uid} || $uid; # too lazy to implement lookup
- my $group = $group{$gid} || $gid;
-
- my($sec,$min,$hour,$mday,$mon,$year) = localtime($mtime);
- my($timeyear);
- my($moname) = $moname[$mon];
- if (-M _ > 365.25 / 2) {
- $timeyear = $year + 1900;
- }
- else {
- $timeyear = sprintf("%02d:%02d", $hour, $min);
- }
-
- sprintf "%5lu %4ld %-10s %2d %-8s %-8s %8s %s %2d %5s %s\n",
- $ino,
- $blocks,
- $perms,
- $nlink,
- $user,
- $group,
- $sizemm,
- $moname,
- $mday,
- $timeyear,
- $pname;
-}
-
-package CPAN::FTP::netrc;
-
-sub new {
- my($class) = @_;
- my $file = MM->catfile($ENV{HOME},".netrc");
-
- my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
- $atime,$mtime,$ctime,$blksize,$blocks)
- = stat($file);
- $mode ||= 0;
- my $protected = 0;
-
- my($fh,@machines,$hasdefault);
- $hasdefault = 0;
- $fh = FileHandle->new or die "Could not create a filehandle";
-
- if($fh->open($file)){
- $protected = ($mode & 077) == 0;
- local($/) = "";
- NETRC: while (<$fh>) {
- my(@tokens) = split " ", $_;
- TOKEN: while (@tokens) {
- my($t) = shift @tokens;
- if ($t eq "default"){
- $hasdefault++;
- last NETRC;
- }
- last TOKEN if $t eq "macdef";
- if ($t eq "machine") {
- push @machines, shift @tokens;
- }
- }
- }
- } else {
- $file = $hasdefault = $protected = "";
- }
-
- bless {
- 'mach' => [@machines],
- 'netrc' => $file,
- 'hasdefault' => $hasdefault,
- 'protected' => $protected,
- }, $class;
-}
-
-# CPAN::FTP::hasdefault;
-sub hasdefault { shift->{'hasdefault'} }
-sub netrc { shift->{'netrc'} }
-sub protected { shift->{'protected'} }
-sub contains {
- my($self,$mach) = @_;
- for ( @{$self->{'mach'}} ) {
- return 1 if $_ eq $mach;
- }
- return 0;
-}
-
-package CPAN::Complete;
-
-sub gnu_cpl {
- my($text, $line, $start, $end) = @_;
- my(@perlret) = cpl($text, $line, $start);
- # find longest common match. Can anybody show me how to peruse
- # T::R::Gnu to have this done automatically? Seems expensive.
- return () unless @perlret;
- my($newtext) = $text;
- for (my $i = length($text)+1;;$i++) {
- last unless length($perlret[0]) && length($perlret[0]) >= $i;
- my $try = substr($perlret[0],0,$i);
- my @tries = grep {substr($_,0,$i) eq $try} @perlret;
- # warn "try[$try]tries[@tries]";
- if (@tries == @perlret) {
- $newtext = $try;
- } else {
- last;
- }
- }
- ($newtext,@perlret);
-}
-
-#-> sub CPAN::Complete::cpl ;
-sub cpl {
- my($word,$line,$pos) = @_;
- $word ||= "";
- $line ||= "";
- $pos ||= 0;
- CPAN->debug("word [$word] line[$line] pos[$pos]") if $CPAN::DEBUG;
- $line =~ s/^\s*//;
- if ($line =~ s/^(force\s*)//) {
- $pos -= length($1);
- }
- my @return;
- if ($pos == 0) {
- @return = grep /^$word/, @CPAN::Complete::COMMANDS;
- } elsif ( $line !~ /^[\!abcdghimorutl]/ ) {
- @return = ();
- } elsif ($line =~ /^(a|ls)\s/) {
- @return = cplx('CPAN::Author',uc($word));
- } elsif ($line =~ /^b\s/) {
- CPAN::Shell->local_bundles;
- @return = cplx('CPAN::Bundle',$word);
- } elsif ($line =~ /^d\s/) {
- @return = cplx('CPAN::Distribution',$word);
- } elsif ($line =~ m/^(
- [mru]|make|clean|dump|get|test|install|readme|look|cvs_import
- )\s/x ) {
- if ($word =~ /^Bundle::/) {
- CPAN::Shell->local_bundles;
- }
- @return = (cplx('CPAN::Module',$word),cplx('CPAN::Bundle',$word));
- } elsif ($line =~ /^i\s/) {
- @return = cpl_any($word);
- } elsif ($line =~ /^reload\s/) {
- @return = cpl_reload($word,$line,$pos);
- } elsif ($line =~ /^o\s/) {
- @return = cpl_option($word,$line,$pos);
- } elsif ($line =~ m/^\S+\s/ ) {
- # fallback for future commands and what we have forgotten above
- @return = (cplx('CPAN::Module',$word),cplx('CPAN::Bundle',$word));
- } else {
- @return = ();
- }
- return @return;
-}
-
-#-> sub CPAN::Complete::cplx ;
-sub cplx {
- my($class, $word) = @_;
- # I believed for many years that this was sorted, today I
- # realized, it wasn't sorted anymore. Now (rev 1.301 / v 1.55) I
- # make it sorted again. Maybe sort was dropped when GNU-readline
- # support came in? The RCS file is difficult to read on that:-(
- sort grep /^\Q$word\E/, map { $_->id } $CPAN::META->all_objects($class);
-}
-
-#-> sub CPAN::Complete::cpl_any ;
-sub cpl_any {
- my($word) = shift;
- return (
- cplx('CPAN::Author',$word),
- cplx('CPAN::Bundle',$word),
- cplx('CPAN::Distribution',$word),
- cplx('CPAN::Module',$word),
- );
-}
-
-#-> sub CPAN::Complete::cpl_reload ;
-sub cpl_reload {
- my($word,$line,$pos) = @_;
- $word ||= "";
- my(@words) = split " ", $line;
- CPAN->debug("word[$word] line[$line] pos[$pos]") if $CPAN::DEBUG;
- my(@ok) = qw(cpan index);
- return @ok if @words == 1;
- return grep /^\Q$word\E/, @ok if @words == 2 && $word;
-}
-
-#-> sub CPAN::Complete::cpl_option ;
-sub cpl_option {
- my($word,$line,$pos) = @_;
- $word ||= "";
- my(@words) = split " ", $line;
- CPAN->debug("word[$word] line[$line] pos[$pos]") if $CPAN::DEBUG;
- my(@ok) = qw(conf debug);
- return @ok if @words == 1;
- return grep /^\Q$word\E/, @ok if @words == 2 && length($word);
- if (0) {
- } elsif ($words[1] eq 'index') {
- return ();
- } elsif ($words[1] eq 'conf') {
- return CPAN::Config::cpl(@_);
- } elsif ($words[1] eq 'debug') {
- return sort grep /^\Q$word\E/, sort keys %CPAN::DEBUG, 'all';
- }
-}
-
-package CPAN::Index;
-
-#-> sub CPAN::Index::force_reload ;
-sub force_reload {
- my($class) = @_;
- $CPAN::Index::LAST_TIME = 0;
- $class->reload(1);
-}
-
-#-> sub CPAN::Index::reload ;
-sub reload {
- my($cl,$force) = @_;
- my $time = time;
-
- # XXX check if a newer one is available. (We currently read it
- # from time to time)
- for ($CPAN::Config->{index_expire}) {
- $_ = 0.001 unless $_ && $_ > 0.001;
- }
- unless (1 || $CPAN::Have_warned->{readmetadatacache}++) {
- # debug here when CPAN doesn't seem to read the Metadata
- require Carp;
- Carp::cluck("META-PROTOCOL[$CPAN::META->{PROTOCOL}]");
- }
- unless ($CPAN::META->{PROTOCOL}) {
- $cl->read_metadata_cache;
- $CPAN::META->{PROTOCOL} ||= "1.0";
- }
- if ( $CPAN::META->{PROTOCOL} < PROTOCOL ) {
- # warn "Setting last_time to 0";
- $LAST_TIME = 0; # No warning necessary
- }
- return if $LAST_TIME + $CPAN::Config->{index_expire}*86400 > $time
- and ! $force;
- if (0) {
- # IFF we are developing, it helps to wipe out the memory
- # between reloads, otherwise it is not what a user expects.
- undef $CPAN::META; # Neue Gruendlichkeit since v1.52(r1.274)
- $CPAN::META = CPAN->new;
- }
- {
- my($debug,$t2);
- local $LAST_TIME = $time;
- local $CPAN::META->{PROTOCOL} = PROTOCOL;
-
- my $needshort = $^O eq "dos";
-
- $cl->rd_authindex($cl
- ->reload_x(
- "authors/01mailrc.txt.gz",
- $needshort ?
- File::Spec->catfile('authors', '01mailrc.gz') :
- File::Spec->catfile('authors', '01mailrc.txt.gz'),
- $force));
- $t2 = time;
- $debug = "timing reading 01[".($t2 - $time)."]";
- $time = $t2;
- return if $CPAN::Signal; # this is sometimes lengthy
- $cl->rd_modpacks($cl
- ->reload_x(
- "modules/02packages.details.txt.gz",
- $needshort ?
- File::Spec->catfile('modules', '02packag.gz') :
- File::Spec->catfile('modules', '02packages.details.txt.gz'),
- $force));
- $t2 = time;
- $debug .= "02[".($t2 - $time)."]";
- $time = $t2;
- return if $CPAN::Signal; # this is sometimes lengthy
- $cl->rd_modlist($cl
- ->reload_x(
- "modules/03modlist.data.gz",
- $needshort ?
- File::Spec->catfile('modules', '03mlist.gz') :
- File::Spec->catfile('modules', '03modlist.data.gz'),
- $force));
- $cl->write_metadata_cache;
- $t2 = time;
- $debug .= "03[".($t2 - $time)."]";
- $time = $t2;
- CPAN->debug($debug) if $CPAN::DEBUG;
- }
- $LAST_TIME = $time;
- $CPAN::META->{PROTOCOL} = PROTOCOL;
-}
-
-#-> sub CPAN::Index::reload_x ;
-sub reload_x {
- my($cl,$wanted,$localname,$force) = @_;
- $force |= 2; # means we're dealing with an index here
- CPAN::Config->load; # we should guarantee loading wherever we rely
- # on Config XXX
- $localname ||= $wanted;
- my $abs_wanted = MM->catfile($CPAN::Config->{'keep_source_where'},
- $localname);
- if (
- -f $abs_wanted &&
- -M $abs_wanted < $CPAN::Config->{'index_expire'} &&
- !($force & 1)
- ) {
- my $s = $CPAN::Config->{'index_expire'} == 1 ? "" : "s";
- $cl->debug(qq{$abs_wanted younger than $CPAN::Config->{'index_expire'} }.
- qq{day$s. I\'ll use that.});
- return $abs_wanted;
- } else {
- $force |= 1; # means we're quite serious about it.
- }
- return CPAN::FTP->localize($wanted,$abs_wanted,$force);
-}
-
-#-> sub CPAN::Index::rd_authindex ;
-sub rd_authindex {
- my($cl, $index_target) = @_;
- my @lines;
- return unless defined $index_target;
- $CPAN::Frontend->myprint("Going to read $index_target\n");
- local(*FH);
- tie *FH, CPAN::Tarzip, $index_target;
- local($/) = "\n";
- push @lines, split /\012/ while <FH>;
- foreach (@lines) {
- my($userid,$fullname,$email) =
- m/alias\s+(\S+)\s+\"([^\"\<]+)\s+\<([^\>]+)\>\"/;
- next unless $userid && $fullname && $email;
-
- # instantiate an author object
- my $userobj = $CPAN::META->instance('CPAN::Author',$userid);
- $userobj->set('FULLNAME' => $fullname, 'EMAIL' => $email);
- return if $CPAN::Signal;
- }
-}
-
-sub userid {
- my($self,$dist) = @_;
- $dist = $self->{'id'} unless defined $dist;
- my($ret) = $dist =~ m|(?:\w/\w\w/)?([^/]+)/|;
- $ret;
-}
-
-#-> sub CPAN::Index::rd_modpacks ;
-sub rd_modpacks {
- my($self, $index_target) = @_;
- my @lines;
- return unless defined $index_target;
- $CPAN::Frontend->myprint("Going to read $index_target\n");
- my $fh = CPAN::Tarzip->TIEHANDLE($index_target);
- local($/) = "\n";
- while ($_ = $fh->READLINE) {
- s/\012/\n/g;
- my @ls = map {"$_\n"} split /\n/, $_;
- unshift @ls, "\n" x length($1) if /^(\n+)/;
- push @lines, @ls;
- }
- # read header
- my($line_count,$last_updated);
- while (@lines) {
- my $shift = shift(@lines);
- last if $shift =~ /^\s*$/;
- $shift =~ /^Line-Count:\s+(\d+)/ and $line_count = $1;
- $shift =~ /^Last-Updated:\s+(.+)/ and $last_updated = $1;
- }
- if (not defined $line_count) {
-
- warn qq{Warning: Your $index_target does not contain a Line-Count header.
-Please check the validity of the index file by comparing it to more
-than one CPAN mirror. I'll continue but problems seem likely to
-happen.\a
-};
-
- sleep 5;
- } elsif ($line_count != scalar @lines) {
-
- warn sprintf qq{Warning: Your %s
-contains a Line-Count header of %d but I see %d lines there. Please
-check the validity of the index file by comparing it to more than one
-CPAN mirror. I'll continue but problems seem likely to happen.\a\n},
-$index_target, $line_count, scalar(@lines);
-
- }
- if (not defined $last_updated) {
-
- warn qq{Warning: Your $index_target does not contain a Last-Updated header.
-Please check the validity of the index file by comparing it to more
-than one CPAN mirror. I'll continue but problems seem likely to
-happen.\a
-};
-
- sleep 5;
- } else {
-
- $CPAN::Frontend
- ->myprint(sprintf qq{ Database was generated on %s\n},
- $last_updated);
- $DATE_OF_02 = $last_updated;
-
- if ($CPAN::META->has_inst(HTTP::Date)) {
- require HTTP::Date;
- my($age) = (time - HTTP::Date::str2time($last_updated))/3600/24;
- if ($age > 30) {
-
- $CPAN::Frontend
- ->mywarn(sprintf
- qq{Warning: This index file is %d days old.
- Please check the host you chose as your CPAN mirror for staleness.
- I'll continue but problems seem likely to happen.\a\n},
- $age);
-
- }
- } else {
- $CPAN::Frontend->myprint(" HTTP::Date not available\n");
- }
- }
-
-
- # A necessity since we have metadata_cache: delete what isn't
- # there anymore
- my $secondtime = $CPAN::META->exists("CPAN::Module","CPAN");
- CPAN->debug("secondtime[$secondtime]") if $CPAN::DEBUG;
- my(%exists);
- foreach (@lines) {
- chomp;
- # before 1.56 we split into 3 and discarded the rest. From
- # 1.57 we assign remaining text to $comment thus allowing to
- # influence isa_perl
- my($mod,$version,$dist,$comment) = split " ", $_, 4;
- my($bundle,$id,$userid);
-
- if ($mod eq 'CPAN' &&
- ! (
- CPAN::Queue->exists('Bundle::CPAN') ||
- CPAN::Queue->exists('CPAN')
- )
- ) {
- local($^W)= 0;
- if ($version > $CPAN::VERSION){
- $CPAN::Frontend->myprint(qq{
- There's a new CPAN.pm version (v$version) available!
- [Current version is v$CPAN::VERSION]
- You might want to try
- install Bundle::CPAN
- reload cpan
- without quitting the current session. It should be a seamless upgrade
- while we are running...
-}); #});
- sleep 2;
- $CPAN::Frontend->myprint(qq{\n});
- }
- last if $CPAN::Signal;
- } elsif ($mod =~ /^Bundle::(.*)/) {
- $bundle = $1;
- }
-
- if ($bundle){
- $id = $CPAN::META->instance('CPAN::Bundle',$mod);
- # Let's make it a module too, because bundles have so much
- # in common with modules.
-
- # Changed in 1.57_63: seems like memory bloat now without
- # any value, so commented out
-
- # $CPAN::META->instance('CPAN::Module',$mod);
-
- } else {
-
- # instantiate a module object
- $id = $CPAN::META->instance('CPAN::Module',$mod);
-
- }
-
- if ($id->cpan_file ne $dist){ # update only if file is
- # different. CPAN prohibits same
- # name with different version
- $userid = $self->userid($dist);
- $id->set(
- 'CPAN_USERID' => $userid,
- 'CPAN_VERSION' => $version,
- 'CPAN_FILE' => $dist,
- );
- }
-
- # instantiate a distribution object
- if ($CPAN::META->exists('CPAN::Distribution',$dist)) {
- # we do not need CONTAINSMODS unless we do something with
- # this dist, so we better produce it on demand.
-
- ## my $obj = $CPAN::META->instance(
- ## 'CPAN::Distribution' => $dist
- ## );
- ## $obj->{CONTAINSMODS}{$mod} = undef; # experimental
- } else {
- $CPAN::META->instance(
- 'CPAN::Distribution' => $dist
- )->set(
- 'CPAN_USERID' => $userid,
- 'CPAN_COMMENT' => $comment,
- );
- }
- if ($secondtime) {
- for my $name ($mod,$dist) {
- CPAN->debug("exists name[$name]") if $CPAN::DEBUG;
- $exists{$name} = undef;
- }
- }
- return if $CPAN::Signal;
- }
- undef $fh;
- if ($secondtime) {
- for my $class (qw(CPAN::Module CPAN::Bundle CPAN::Distribution)) {
- for my $o ($CPAN::META->all_objects($class)) {
- next if exists $exists{$o->{ID}};
- $CPAN::META->delete($class,$o->{ID});
- CPAN->debug("deleting ID[$o->{ID}] in class[$class]")
- if $CPAN::DEBUG;
- }
- }
- }
-}
-
-#-> sub CPAN::Index::rd_modlist ;
-sub rd_modlist {
- my($cl,$index_target) = @_;
- return unless defined $index_target;
- $CPAN::Frontend->myprint("Going to read $index_target\n");
- my $fh = CPAN::Tarzip->TIEHANDLE($index_target);
- my @eval;
- local($/) = "\n";
- while ($_ = $fh->READLINE) {
- s/\012/\n/g;
- my @ls = map {"$_\n"} split /\n/, $_;
- unshift @ls, "\n" x length($1) if /^(\n+)/;
- push @eval, @ls;
- }
- while (@eval) {
- my $shift = shift(@eval);
- if ($shift =~ /^Date:\s+(.*)/){
- return if $DATE_OF_03 eq $1;
- ($DATE_OF_03) = $1;
- }
- last if $shift =~ /^\s*$/;
- }
- undef $fh;
- push @eval, q{CPAN::Modulelist->data;};
- local($^W) = 0;
- my($comp) = Safe->new("CPAN::Safe1");
- my($eval) = join("", @eval);
- my $ret = $comp->reval($eval);
- Carp::confess($@) if $@;
- return if $CPAN::Signal;
- for (keys %$ret) {
- my $obj = $CPAN::META->instance("CPAN::Module",$_);
- delete $ret->{$_}{modid}; # not needed here, maybe elsewhere
- $obj->set(%{$ret->{$_}});
- return if $CPAN::Signal;
- }
-}
-
-#-> sub CPAN::Index::write_metadata_cache ;
-sub write_metadata_cache {
- my($self) = @_;
- return unless $CPAN::Config->{'cache_metadata'};
- return unless $CPAN::META->has_usable("Storable");
- my $cache;
- foreach my $k (qw(CPAN::Bundle CPAN::Author CPAN::Module
- CPAN::Distribution)) {
- $cache->{$k} = $CPAN::META->{readonly}{$k}; # unsafe meta access, ok
- }
- my $metadata_file = MM->catfile($CPAN::Config->{cpan_home},"Metadata");
- $cache->{last_time} = $LAST_TIME;
- $cache->{DATE_OF_02} = $DATE_OF_02;
- $cache->{PROTOCOL} = PROTOCOL;
- $CPAN::Frontend->myprint("Going to write $metadata_file\n");
- eval { Storable::nstore($cache, $metadata_file) };
- $CPAN::Frontend->mywarn($@) if $@;
-}
-
-#-> sub CPAN::Index::read_metadata_cache ;
-sub read_metadata_cache {
- my($self) = @_;
- return unless $CPAN::Config->{'cache_metadata'};
- return unless $CPAN::META->has_usable("Storable");
- my $metadata_file = MM->catfile($CPAN::Config->{cpan_home},"Metadata");
- return unless -r $metadata_file and -f $metadata_file;
- $CPAN::Frontend->myprint("Going to read $metadata_file\n");
- my $cache;
- eval { $cache = Storable::retrieve($metadata_file) };
- $CPAN::Frontend->mywarn($@) if $@;
- if (!$cache || ref $cache ne 'HASH'){
- $LAST_TIME = 0;
- return;
- }
- if (exists $cache->{PROTOCOL}) {
- if (PROTOCOL > $cache->{PROTOCOL}) {
- $CPAN::Frontend->mywarn(sprintf("Ignoring Metadata cache written ".
- "with protocol v%s, requiring v%s",
- $cache->{PROTOCOL},
- PROTOCOL)
- );
- return;
- }
- } else {
- $CPAN::Frontend->mywarn("Ignoring Metadata cache written ".
- "with protocol v1.0");
- return;
- }
- my $clcnt = 0;
- my $idcnt = 0;
- while(my($class,$v) = each %$cache) {
- next unless $class =~ /^CPAN::/;
- $CPAN::META->{readonly}{$class} = $v; # unsafe meta access, ok
- while (my($id,$ro) = each %$v) {
- $CPAN::META->{readwrite}{$class}{$id} ||=
- $class->new(ID=>$id, RO=>$ro);
- $idcnt++;
- }
- $clcnt++;
- }
- unless ($clcnt) { # sanity check
- $CPAN::Frontend->myprint("Warning: Found no data in $metadata_file\n");
- return;
- }
- if ($idcnt < 1000) {
- $CPAN::Frontend->myprint("Warning: Found only $idcnt objects ".
- "in $metadata_file\n");
- return;
- }
- $CPAN::META->{PROTOCOL} ||=
- $cache->{PROTOCOL}; # reading does not up or downgrade, but it
- # does initialize to some protocol
- $LAST_TIME = $cache->{last_time};
- $DATE_OF_02 = $cache->{DATE_OF_02};
- $CPAN::Frontend->myprint(" Database was generated on $DATE_OF_02\n");
- return;
-}
-
-package CPAN::InfoObj;
-
-# Accessors
-sub cpan_userid { shift->{RO}{CPAN_USERID} }
-sub id { shift->{ID}; }
-
-#-> sub CPAN::InfoObj::new ;
-sub new {
- my $this = bless {}, shift;
- %$this = @_;
- $this
-}
-
-# The set method may only be used by code that reads index data or
-# otherwise "objective" data from the outside world. All session
-# related material may do anything else with instance variables but
-# must not touch the hash under the RO attribute. The reason is that
-# the RO hash gets written to Metadata file and is thus persistent.
-
-#-> sub CPAN::InfoObj::set ;
-sub set {
- my($self,%att) = @_;
- my $class = ref $self;
-
- # This must be ||=, not ||, because only if we write an empty
- # reference, only then the set method will write into the readonly
- # area. But for Distributions that spring into existence, maybe
- # because of a typo, we do not like it that they are written into
- # the readonly area and made permanent (at least for a while) and
- # that is why we do not "allow" other places to call ->set.
- unless ($self->id) {
- CPAN->debug("Bug? Empty ID, rejecting");
- return;
- }
- my $ro = $self->{RO} =
- $CPAN::META->{readonly}{$class}{$self->id} ||= {};
-
- while (my($k,$v) = each %att) {
- $ro->{$k} = $v;
- }
-}
-
-#-> sub CPAN::InfoObj::as_glimpse ;
-sub as_glimpse {
- my($self) = @_;
- my(@m);
- my $class = ref($self);
- $class =~ s/^CPAN:://;
- push @m, sprintf "%-15s %s\n", $class, $self->{ID};
- join "", @m;
-}
-
-#-> sub CPAN::InfoObj::as_string ;
-sub as_string {
- my($self) = @_;
- my(@m);
- my $class = ref($self);
- $class =~ s/^CPAN:://;
- push @m, $class, " id = $self->{ID}\n";
- for (sort keys %{$self->{RO}}) {
- # next if m/^(ID|RO)$/;
- my $extra = "";
- if ($_ eq "CPAN_USERID") {
- $extra .= " (".$self->author;
- my $email; # old perls!
- if ($email = $CPAN::META->instance("CPAN::Author",
- $self->cpan_userid
- )->email) {
- $extra .= " <$email>";
- } else {
- $extra .= " <no email>";
- }
- $extra .= ")";
- } elsif ($_ eq "FULLNAME") { # potential UTF-8 conversion
- push @m, sprintf " %-12s %s\n", $_, $self->fullname;
- next;
- }
- next unless defined $self->{RO}{$_};
- push @m, sprintf " %-12s %s%s\n", $_, $self->{RO}{$_}, $extra;
- }
- for (sort keys %$self) {
- next if m/^(ID|RO)$/;
- if (ref($self->{$_}) eq "ARRAY") {
- push @m, sprintf " %-12s %s\n", $_, "@{$self->{$_}}";
- } elsif (ref($self->{$_}) eq "HASH") {
- push @m, sprintf(
- " %-12s %s\n",
- $_,
- join(" ",keys %{$self->{$_}}),
- );
- } else {
- push @m, sprintf " %-12s %s\n", $_, $self->{$_};
- }
- }
- join "", @m, "\n";
-}
-
-#-> sub CPAN::InfoObj::author ;
-sub author {
- my($self) = @_;
- $CPAN::META->instance("CPAN::Author",$self->cpan_userid)->fullname;
-}
-
-#-> sub CPAN::InfoObj::dump ;
-sub dump {
- my($self) = @_;
- require Data::Dumper;
- print Data::Dumper::Dumper($self);
-}
-
-package CPAN::Author;
-
-#-> sub CPAN::Author::id
-sub id {
- my $self = shift;
- my $id = $self->{ID};
- $CPAN::Frontend->mydie("Illegal author id[$id]") unless $id =~ /^[A-Z]/;
- $id;
-}
-
-#-> sub CPAN::Author::as_glimpse ;
-sub as_glimpse {
- my($self) = @_;
- my(@m);
- my $class = ref($self);
- $class =~ s/^CPAN:://;
- push @m, sprintf(qq{%-15s %s ("%s" <%s>)\n},
- $class,
- $self->{ID},
- $self->fullname,
- $self->email);
- join "", @m;
-}
-
-#-> sub CPAN::Author::fullname ;
-sub fullname {
- shift->{RO}{FULLNAME};
-}
-*name = \&fullname;
-
-#-> sub CPAN::Author::email ;
-sub email { shift->{RO}{EMAIL}; }
-
-#-> sub CPAN::Author::ls ;
-sub ls {
- my $self = shift;
- my $id = $self->id;
-
- # adapted from CPAN::Distribution::verifyMD5 ;
- my(@csf); # chksumfile
- @csf = $self->id =~ /(.)(.)(.*)/;
- $csf[1] = join "", @csf[0,1];
- $csf[2] = join "", @csf[1,2];
- my(@dl);
- @dl = $self->dir_listing([$csf[0],"CHECKSUMS"], 0);
- unless (grep {$_->[2] eq $csf[1]} @dl) {
- $CPAN::Frontend->myprint("No files in the directory of $id\n");
- return;
- }
- @dl = $self->dir_listing([@csf[0,1],"CHECKSUMS"], 0);
- unless (grep {$_->[2] eq $csf[2]} @dl) {
- $CPAN::Frontend->myprint("No files in the directory of $id\n");
- return;
- }
- @dl = $self->dir_listing([@csf,"CHECKSUMS"], 1);
- $CPAN::Frontend->myprint(join "", map {
- sprintf("%8d %10s %s/%s\n", $_->[0], $_->[1], $id, $_->[2])
- } sort { $a->[2] cmp $b->[2] } @dl);
-}
-
-# returns an array of arrays, the latter contain (size,mtime,filename)
-#-> sub CPAN::Author::dir_listing ;
-sub dir_listing {
- my $self = shift;
- my $chksumfile = shift;
- my $recursive = shift;
- my $lc_want =
- MM->catfile($CPAN::Config->{keep_source_where},
- "authors", "id", @$chksumfile);
- local($") = "/";
- # connect "force" argument with "index_expire".
- my $force = 0;
- if (my @stat = stat $lc_want) {
- $force = $stat[9] + $CPAN::Config->{index_expire}*86400 <= time;
- }
- my $lc_file = CPAN::FTP->localize("authors/id/@$chksumfile",
- $lc_want,$force);
- unless ($lc_file) {
- $CPAN::Frontend->myprint("Trying $lc_want.gz\n");
- $chksumfile->[-1] .= ".gz";
- $lc_file = CPAN::FTP->localize("authors/id/@$chksumfile",
- "$lc_want.gz",1);
- if ($lc_file) {
- $lc_file =~ s{\.gz(?!\n)\Z}{}; #};
- CPAN::Tarzip->gunzip("$lc_file.gz",$lc_file);
- } else {
- return;
- }
- }
-
- # adapted from CPAN::Distribution::MD5_check_file ;
- my $fh = FileHandle->new;
- my($cksum);
- if (open $fh, $lc_file){
- local($/);
- my $eval = <$fh>;
- $eval =~ s/\015?\012/\n/g;
- close $fh;
- my($comp) = Safe->new();
- $cksum = $comp->reval($eval);
- if ($@) {
- rename $lc_file, "$lc_file.bad";
- Carp::confess($@) if $@;
- }
- } else {
- Carp::carp "Could not open $lc_file for reading";
- }
- my(@result,$f);
- for $f (sort keys %$cksum) {
- if (exists $cksum->{$f}{isdir}) {
- if ($recursive) {
- my(@dir) = @$chksumfile;
- pop @dir;
- push @dir, $f, "CHECKSUMS";
- push @result, map {
- [$_->[0], $_->[1], "$f/$_->[2]"]
- } $self->dir_listing(\@dir,1);
- } else {
- push @result, [ 0, "-", $f ];
- }
- } else {
- push @result, [
- ($cksum->{$f}{"size"}||0),
- $cksum->{$f}{"mtime"}||"---",
- $f
- ];
- }
- }
- @result;
-}
-
-package CPAN::Distribution;
-
-# Accessors
-sub cpan_comment { shift->{RO}{CPAN_COMMENT} }
-
-sub undelay {
- my $self = shift;
- delete $self->{later};
-}
-
-# CPAN::Distribution::normalize
-sub normalize {
- my($self,$s) = @_;
- $s = $self->id unless defined $s;
- if (
- $s =~ tr|/|| == 1
- or
- $s !~ m|[A-Z]/[A-Z-]{2}/[A-Z-]{2,}/|
- ) {
- return $s if $s =~ m:^N/A|^Contact Author: ;
- $s =~ s|^(.)(.)([^/]*/)(.+)$|$1/$1$2/$1$2$3$4| or
- $CPAN::Frontend->mywarn("Strange distribution name [$s]");
- CPAN->debug("s[$s]") if $CPAN::DEBUG;
- }
- $s;
-}
-
-#-> sub CPAN::Distribution::color_cmd_tmps ;
-sub color_cmd_tmps {
- my($self) = shift;
- my($depth) = shift || 0;
- my($color) = shift || 0;
- # a distribution needs to recurse into its prereq_pms
-
- return if exists $self->{incommandcolor}
- && $self->{incommandcolor}==$color;
- $CPAN::Frontend->mydie(sprintf("CPAN.pm panic: deep recursion in ".
- "color_cmd_tmps depth[%s] self[%s] id[%s]",
- $depth,
- $self,
- $self->id
- )) if $depth>=100;
- ##### warn "color_cmd_tmps $depth $color " . $self->id; # sleep 1;
- my $prereq_pm = $self->prereq_pm;
- if (defined $prereq_pm) {
- for my $pre (keys %$prereq_pm) {
- my $premo = CPAN::Shell->expand("Module",$pre);
- $premo->color_cmd_tmps($depth+1,$color);
- }
- }
- if ($color==0) {
- delete $self->{sponsored_mods};
- delete $self->{badtestcnt};
- }
- $self->{incommandcolor} = $color;
-}
-
-#-> sub CPAN::Distribution::as_string ;
-sub as_string {
- my $self = shift;
- $self->containsmods;
- $self->SUPER::as_string(@_);
-}
-
-#-> sub CPAN::Distribution::containsmods ;
-sub containsmods {
- my $self = shift;
- return keys %{$self->{CONTAINSMODS}} if exists $self->{CONTAINSMODS};
- my $dist_id = $self->{ID};
- for my $mod ($CPAN::META->all_objects("CPAN::Module")) {
- my $mod_file = $mod->cpan_file or next;
- my $mod_id = $mod->{ID} or next;
- # warn "mod_file[$mod_file] dist_id[$dist_id] mod_id[$mod_id]";
- # sleep 1;
- $self->{CONTAINSMODS}{$mod_id} = undef if $mod_file eq $dist_id;
- }
- keys %{$self->{CONTAINSMODS}};
-}
-
-#-> sub CPAN::Distribution::uptodate ;
-sub uptodate {
- my($self) = @_;
- my $c;
- foreach $c ($self->containsmods) {
- my $obj = CPAN::Shell->expandany($c);
- return 0 unless $obj->uptodate;
- }
- return 1;
-}
-
-#-> sub CPAN::Distribution::called_for ;
-sub called_for {
- my($self,$id) = @_;
- $self->{CALLED_FOR} = $id if defined $id;
- return $self->{CALLED_FOR};
-}
-
-#-> sub CPAN::Distribution::safe_chdir ;
-sub safe_chdir {
- my($self,$todir) = @_;
- # we die if we cannot chdir and we are debuggable
- Carp::confess("safe_chdir called without todir argument")
- unless defined $todir and length $todir;
- if (chdir $todir) {
- $self->debug(sprintf "changed directory to %s", CPAN::anycwd())
- if $CPAN::DEBUG;
- } else {
- my $cwd = CPAN::anycwd();
- $CPAN::Frontend->mydie(qq{Could not chdir from cwd[$cwd] }.
- qq{to todir[$todir]: $!});
- }
-}
-
-#-> sub CPAN::Distribution::get ;
-sub get {
- my($self) = @_;
- EXCUSE: {
- my @e;
- exists $self->{'build_dir'} and push @e,
- "Is already unwrapped into directory $self->{'build_dir'}";
- $CPAN::Frontend->myprint(join "", map {" $_\n"} @e) and return if @e;
- }
- my $sub_wd = CPAN::anycwd(); # for cleaning up as good as possible
-
- #
- # Get the file on local disk
- #
-
- my($local_file);
- my($local_wanted) =
- MM->catfile(
- $CPAN::Config->{keep_source_where},
- "authors",
- "id",
- split("/",$self->id)
- );
-
- $self->debug("Doing localize") if $CPAN::DEBUG;
- unless ($local_file =
- CPAN::FTP->localize("authors/id/$self->{ID}",
- $local_wanted)) {
- my $note = "";
- if ($CPAN::Index::DATE_OF_02) {
- $note = "Note: Current database in memory was generated ".
- "on $CPAN::Index::DATE_OF_02\n";
- }
- $CPAN::Frontend->mydie("Giving up on '$local_wanted'\n$note");
- }
- $self->debug("local_file[$local_file]") if $CPAN::DEBUG;
- $self->{localfile} = $local_file;
- return if $CPAN::Signal;
-
- #
- # Check integrity
- #
- if ($CPAN::META->has_inst("MD5")) {
- $self->debug("MD5 is installed, verifying");
- $self->verifyMD5;
- } else {
- $self->debug("MD5 is NOT installed");
- }
- return if $CPAN::Signal;
-
- #
- # Create a clean room and go there
- #
- $CPAN::META->{cachemgr} ||= CPAN::CacheMgr->new(); # unsafe meta access, ok
- my $builddir = $CPAN::META->{cachemgr}->dir; # unsafe meta access, ok
- $self->safe_chdir($builddir);
- $self->debug("Removing tmp") if $CPAN::DEBUG;
- File::Path::rmtree("tmp");
- mkdir "tmp", 0755 or Carp::croak "Couldn't mkdir tmp: $!";
- if ($CPAN::Signal){
- $self->safe_chdir($sub_wd);
- return;
- }
- $self->safe_chdir("tmp");
-
- #
- # Unpack the goods
- #
- if ($local_file =~ /(\.tar\.(gz|Z)|\.tgz)(?!\n)\Z/i){
- $self->{was_uncompressed}++ unless CPAN::Tarzip->gtest($local_file);
- $self->untar_me($local_file);
- } elsif ( $local_file =~ /\.zip(?!\n)\Z/i ) {
- $self->unzip_me($local_file);
- } elsif ( $local_file =~ /\.pm\.(gz|Z)(?!\n)\Z/) {
- $self->{was_uncompressed}++ unless CPAN::Tarzip->gtest($local_file);
- $self->pm2dir_me($local_file);
- } else {
- $self->{archived} = "NO";
- $self->safe_chdir($sub_wd);
- return;
- }
-
- # we are still in the tmp directory!
- # Let's check if the package has its own directory.
- my $dh = DirHandle->new(File::Spec->curdir)
- or Carp::croak("Couldn't opendir .: $!");
- my @readdir = grep $_ !~ /^\.\.?(?!\n)\Z/s, $dh->read; ### MAC??
- $dh->close;
- my ($distdir,$packagedir);
- if (@readdir == 1 && -d $readdir[0]) {
- $distdir = $readdir[0];
- $packagedir = MM->catdir($builddir,$distdir);
- $self->debug("packagedir[$packagedir]builddir[$builddir]distdir[$distdir]")
- if $CPAN::DEBUG;
- -d $packagedir and $CPAN::Frontend->myprint("Removing previously used ".
- "$packagedir\n");
- File::Path::rmtree($packagedir);
- rename($distdir,$packagedir) or
- Carp::confess("Couldn't rename $distdir to $packagedir: $!");
- $self->debug(sprintf("renamed distdir[%s] to packagedir[%s] -e[%s]-d[%s]",
- $distdir,
- $packagedir,
- -e $packagedir,
- -d $packagedir,
- )) if $CPAN::DEBUG;
- } else {
- my $userid = $self->cpan_userid;
- unless ($userid) {
- CPAN->debug("no userid? self[$self]");
- $userid = "anon";
- }
- my $pragmatic_dir = $userid . '000';
- $pragmatic_dir =~ s/\W_//g;
- $pragmatic_dir++ while -d "../$pragmatic_dir";
- $packagedir = MM->catdir($builddir,$pragmatic_dir);
- $self->debug("packagedir[$packagedir]") if $CPAN::DEBUG;
- File::Path::mkpath($packagedir);
- my($f);
- for $f (@readdir) { # is already without "." and ".."
- my $to = MM->catdir($packagedir,$f);
- rename($f,$to) or Carp::confess("Couldn't rename $f to $to: $!");
- }
- }
- if ($CPAN::Signal){
- $self->safe_chdir($sub_wd);
- return;
- }
-
- $self->{'build_dir'} = $packagedir;
- $self->safe_chdir(File::Spec->updir);
- File::Path::rmtree("tmp");
-
- my($mpl) = MM->catfile($packagedir,"Makefile.PL");
- my($mpl_exists) = -f $mpl;
- unless ($mpl_exists) {
- # NFS has been reported to have racing problems after the
- # renaming of a directory in some environments.
- # This trick helps.
- sleep 1;
- my $mpldh = DirHandle->new($packagedir)
- or Carp::croak("Couldn't opendir $packagedir: $!");
- $mpl_exists = grep /^Makefile\.PL$/, $mpldh->read;
- $mpldh->close;
- }
- unless ($mpl_exists) {
- $self->debug(sprintf("makefilepl[%s]anycwd[%s]",
- $mpl,
- CPAN::anycwd(),
- )) if $CPAN::DEBUG;
- my($configure) = MM->catfile($packagedir,"Configure");
- if (-f $configure) {
- # do we have anything to do?
- $self->{'configure'} = $configure;
- } elsif (-f MM->catfile($packagedir,"Makefile")) {
- $CPAN::Frontend->myprint(qq{
-Package comes with a Makefile and without a Makefile.PL.
-We\'ll try to build it with that Makefile then.
-});
- $self->{writemakefile} = "YES";
- sleep 2;
- } else {
- my $cf = $self->called_for || "unknown";
- if ($cf =~ m|/|) {
- $cf =~ s|.*/||;
- $cf =~ s|\W.*||;
- }
- $cf =~ s|[/\\:]||g; # risk of filesystem damage
- $cf = "unknown" unless length($cf);
- $CPAN::Frontend->myprint(qq{Package seems to come without Makefile.PL.
- (The test -f "$mpl" returned false.)
- Writing one on our own (setting NAME to $cf)\a\n});
- $self->{had_no_makefile_pl}++;
- sleep 3;
-
- # Writing our own Makefile.PL
-
- my $fh = FileHandle->new;
- $fh->open(">$mpl")
- or Carp::croak("Could not open >$mpl: $!");
- $fh->print(
-qq{# This Makefile.PL has been autogenerated by the module CPAN.pm
-# because there was no Makefile.PL supplied.
-# Autogenerated on: }.scalar localtime().qq{
-
-use ExtUtils::MakeMaker;
-WriteMakefile(NAME => q[$cf]);
-
-});
- $fh->close;
- }
- }
-
- return $self;
-}
-
-# CPAN::Distribution::untar_me ;
-sub untar_me {
- my($self,$local_file) = @_;
- $self->{archived} = "tar";
- if (CPAN::Tarzip->untar($local_file)) {
- $self->{unwrapped} = "YES";
- } else {
- $self->{unwrapped} = "NO";
- }
-}
-
-# CPAN::Distribution::unzip_me ;
-sub unzip_me {
- my($self,$local_file) = @_;
- $self->{archived} = "zip";
- if (CPAN::Tarzip->unzip($local_file)) {
- $self->{unwrapped} = "YES";
- } else {
- $self->{unwrapped} = "NO";
- }
- return;
-}
-
-sub pm2dir_me {
- my($self,$local_file) = @_;
- $self->{archived} = "pm";
- my $to = File::Basename::basename($local_file);
- $to =~ s/\.(gz|Z)(?!\n)\Z//;
- if (CPAN::Tarzip->gunzip($local_file,$to)) {
- $self->{unwrapped} = "YES";
- } else {
- $self->{unwrapped} = "NO";
- }
-}
-
-#-> sub CPAN::Distribution::new ;
-sub new {
- my($class,%att) = @_;
-
- # $CPAN::META->{cachemgr} ||= CPAN::CacheMgr->new();
-
- my $this = { %att };
- return bless $this, $class;
-}
-
-#-> sub CPAN::Distribution::look ;
-sub look {
- my($self) = @_;
-
- if ($^O eq 'MacOS') {
- $self->ExtUtils::MM_MacOS::look;
- return;
- }
-
- if ( $CPAN::Config->{'shell'} ) {
- $CPAN::Frontend->myprint(qq{
-Trying to open a subshell in the build directory...
-});
- } else {
- $CPAN::Frontend->myprint(qq{
-Your configuration does not define a value for subshells.
-Please define it with "o conf shell <your shell>"
-});
- return;
- }
- my $dist = $self->id;
- my $dir;
- unless ($dir = $self->dir) {
- $self->get;
- }
- unless ($dir ||= $self->dir) {
- $CPAN::Frontend->mywarn(qq{
-Could not determine which directory to use for looking at $dist.
-});
- return;
- }
- my $pwd = CPAN::anycwd();
- $self->safe_chdir($dir);
- $CPAN::Frontend->myprint(qq{Working directory is $dir\n});
- system($CPAN::Config->{'shell'}) == 0
- or $CPAN::Frontend->mydie("Subprocess shell error");
- $self->safe_chdir($pwd);
-}
-
-# CPAN::Distribution::cvs_import ;
-sub cvs_import {
- my($self) = @_;
- $self->get;
- my $dir = $self->dir;
-
- my $package = $self->called_for;
- my $module = $CPAN::META->instance('CPAN::Module', $package);
- my $version = $module->cpan_version;
-
- my $userid = $self->cpan_userid;
-
- my $cvs_dir = (split '/', $dir)[-1];
- $cvs_dir =~ s/-\d+[^-]+(?!\n)\Z//;
- my $cvs_root =
- $CPAN::Config->{cvsroot} || $ENV{CVSROOT};
- my $cvs_site_perl =
- $CPAN::Config->{cvs_site_perl} || $ENV{CVS_SITE_PERL};
- if ($cvs_site_perl) {
- $cvs_dir = "$cvs_site_perl/$cvs_dir";
- }
- my $cvs_log = qq{"imported $package $version sources"};
- $version =~ s/\./_/g;
- my @cmd = ('cvs', '-d', $cvs_root, 'import', '-m', $cvs_log,
- "$cvs_dir", $userid, "v$version");
-
- my $pwd = CPAN::anycwd();
- chdir($dir) or $CPAN::Frontend->mydie(qq{Could not chdir to "$dir": $!});
-
- $CPAN::Frontend->myprint(qq{Working directory is $dir\n});
-
- $CPAN::Frontend->myprint(qq{@cmd\n});
- system(@cmd) == 0 or
- $CPAN::Frontend->mydie("cvs import failed");
- chdir($pwd) or $CPAN::Frontend->mydie(qq{Could not chdir to "$pwd": $!});
-}
-
-#-> sub CPAN::Distribution::readme ;
-sub readme {
- my($self) = @_;
- my($dist) = $self->id;
- my($sans,$suffix) = $dist =~ /(.+)\.(tgz|tar[\._-]gz|tar\.Z|zip)$/;
- $self->debug("sans[$sans] suffix[$suffix]\n") if $CPAN::DEBUG;
- my($local_file);
- my($local_wanted) =
- MM->catfile(
- $CPAN::Config->{keep_source_where},
- "authors",
- "id",
- split("/","$sans.readme"),
- );
- $self->debug("Doing localize") if $CPAN::DEBUG;
- $local_file = CPAN::FTP->localize("authors/id/$sans.readme",
- $local_wanted)
- or $CPAN::Frontend->mydie(qq{No $sans.readme found});;
-
- if ($^O eq 'MacOS') {
- ExtUtils::MM_MacOS::launch_file($local_file);
- return;
- }
-
- my $fh_pager = FileHandle->new;
- local($SIG{PIPE}) = "IGNORE";
- $fh_pager->open("|$CPAN::Config->{'pager'}")
- or die "Could not open pager $CPAN::Config->{'pager'}: $!";
- my $fh_readme = FileHandle->new;
- $fh_readme->open($local_file)
- or $CPAN::Frontend->mydie(qq{Could not open "$local_file": $!});
- $CPAN::Frontend->myprint(qq{
-Displaying file
- $local_file
-with pager "$CPAN::Config->{'pager'}"
-});
- sleep 2;
- $fh_pager->print(<$fh_readme>);
-}
-
-#-> sub CPAN::Distribution::verifyMD5 ;
-sub verifyMD5 {
- my($self) = @_;
- EXCUSE: {
- my @e;
- $self->{MD5_STATUS} ||= "";
- $self->{MD5_STATUS} eq "OK" and push @e, "MD5 Checksum was ok";
- $CPAN::Frontend->myprint(join "", map {" $_\n"} @e) and return if @e;
- }
- my($lc_want,$lc_file,@local,$basename);
- @local = split("/",$self->id);
- pop @local;
- push @local, "CHECKSUMS";
- $lc_want =
- MM->catfile($CPAN::Config->{keep_source_where},
- "authors", "id", @local);
- local($") = "/";
- if (
- -s $lc_want
- &&
- $self->MD5_check_file($lc_want)
- ) {
- return $self->{MD5_STATUS} = "OK";
- }
- $lc_file = CPAN::FTP->localize("authors/id/@local",
- $lc_want,1);
- unless ($lc_file) {
- $CPAN::Frontend->myprint("Trying $lc_want.gz\n");
- $local[-1] .= ".gz";
- $lc_file = CPAN::FTP->localize("authors/id/@local",
- "$lc_want.gz",1);
- if ($lc_file) {
- $lc_file =~ s/\.gz(?!\n)\Z//;
- CPAN::Tarzip->gunzip("$lc_file.gz",$lc_file);
- } else {
- return;
- }
- }
- $self->MD5_check_file($lc_file);
-}
-
-#-> sub CPAN::Distribution::MD5_check_file ;
-sub MD5_check_file {
- my($self,$chk_file) = @_;
- my($cksum,$file,$basename);
- $file = $self->{localfile};
- $basename = File::Basename::basename($file);
- my $fh = FileHandle->new;
- if (open $fh, $chk_file){
- local($/);
- my $eval = <$fh>;
- $eval =~ s/\015?\012/\n/g;
- close $fh;
- my($comp) = Safe->new();
- $cksum = $comp->reval($eval);
- if ($@) {
- rename $chk_file, "$chk_file.bad";
- Carp::confess($@) if $@;
- }
- } else {
- Carp::carp "Could not open $chk_file for reading";
- }
-
- if (exists $cksum->{$basename}{md5}) {
- $self->debug("Found checksum for $basename:" .
- "$cksum->{$basename}{md5}\n") if $CPAN::DEBUG;
-
- open($fh, $file);
- binmode $fh;
- my $eq = $self->eq_MD5($fh,$cksum->{$basename}{'md5'});
- $fh->close;
- $fh = CPAN::Tarzip->TIEHANDLE($file);
-
- unless ($eq) {
- # had to inline it, when I tied it, the tiedness got lost on
- # the call to eq_MD5. (Jan 1998)
- my $md5 = MD5->new;
- my($data,$ref);
- $ref = \$data;
- while ($fh->READ($ref, 4096) > 0){
- $md5->add($data);
- }
- my $hexdigest = $md5->hexdigest;
- $eq += $hexdigest eq $cksum->{$basename}{'md5-ungz'};
- }
-
- if ($eq) {
- $CPAN::Frontend->myprint("Checksum for $file ok\n");
- return $self->{MD5_STATUS} = "OK";
- } else {
- $CPAN::Frontend->myprint(qq{\nChecksum mismatch for }.
- qq{distribution file. }.
- qq{Please investigate.\n\n}.
- $self->as_string,
- $CPAN::META->instance(
- 'CPAN::Author',
- $self->cpan_userid
- )->as_string);
-
- my $wrap = qq{I\'d recommend removing $file. Its MD5
-checksum is incorrect. Maybe you have configured your 'urllist' with
-a bad URL. Please check this array with 'o conf urllist', and
-retry.};
-
- $CPAN::Frontend->mydie(Text::Wrap::wrap("","",$wrap));
-
- # former versions just returned here but this seems a
- # serious threat that deserves a die
-
- # $CPAN::Frontend->myprint("\n\n");
- # sleep 3;
- # return;
- }
- # close $fh if fileno($fh);
- } else {
- $self->{MD5_STATUS} ||= "";
- if ($self->{MD5_STATUS} eq "NIL") {
- $CPAN::Frontend->mywarn(qq{
-Warning: No md5 checksum for $basename in $chk_file.
-
-The cause for this may be that the file is very new and the checksum
-has not yet been calculated, but it may also be that something is
-going awry right now.
-});
- my $answer = ExtUtils::MakeMaker::prompt("Proceed?", "yes");
- $answer =~ /^\s*y/i or $CPAN::Frontend->mydie("Aborted.");
- }
- $self->{MD5_STATUS} = "NIL";
- return;
- }
-}
-
-#-> sub CPAN::Distribution::eq_MD5 ;
-sub eq_MD5 {
- my($self,$fh,$expectMD5) = @_;
- my $md5 = MD5->new;
- my($data);
- while (read($fh, $data, 4096)){
- $md5->add($data);
- }
- # $md5->addfile($fh);
- my $hexdigest = $md5->hexdigest;
- # warn "fh[$fh] hex[$hexdigest] aexp[$expectMD5]";
- $hexdigest eq $expectMD5;
-}
-
-#-> sub CPAN::Distribution::force ;
-
-# Both modules and distributions know if "force" is in effect by
-# autoinspection, not by inspecting a global variable. One of the
-# reason why this was chosen to work that way was the treatment of
-# dependencies. They should not autpomatically inherit the force
-# status. But this has the downside that ^C and die() will return to
-# the prompt but will not be able to reset the force_update
-# attributes. We try to correct for it currently in the read_metadata
-# routine, and immediately before we check for a Signal. I hope this
-# works out in one of v1.57_53ff
-
-sub force {
- my($self, $method) = @_;
- for my $att (qw(
- MD5_STATUS archived build_dir localfile make install unwrapped
- writemakefile
- )) {
- delete $self->{$att};
- }
- if ($method && $method eq "install") {
- $self->{"force_update"}++; # name should probably have been force_install
- }
-}
-
-#-> sub CPAN::Distribution::unforce ;
-sub unforce {
- my($self) = @_;
- delete $self->{'force_update'};
-}
-
-#-> sub CPAN::Distribution::isa_perl ;
-sub isa_perl {
- my($self) = @_;
- my $file = File::Basename::basename($self->id);
- if ($file =~ m{ ^ perl
- -?
- (5)
- ([._-])
- (
- \d{3}(_[0-4][0-9])?
- |
- \d*[24680]\.\d+
- )
- \.tar[._-]gz
- (?!\n)\Z
- }xs){
- return "$1.$3";
- } elsif ($self->cpan_comment
- &&
- $self->cpan_comment =~ /isa_perl\(.+?\)/){
- return $1;
- }
-}
-
-#-> sub CPAN::Distribution::perl ;
-sub perl {
- my($self) = @_;
- my($perl) = MM->file_name_is_absolute($^X) ? $^X : "";
- my $pwd = CPAN::anycwd();
- my $candidate = MM->catfile($pwd,$^X);
- $perl ||= $candidate if MM->maybe_command($candidate);
- unless ($perl) {
- my ($component,$perl_name);
- DIST_PERLNAME: foreach $perl_name ($^X, 'perl', 'perl5', "perl$]") {
- PATH_COMPONENT: foreach $component (MM->path(),
- $Config::Config{'binexp'}) {
- next unless defined($component) && $component;
- my($abs) = MM->catfile($component,$perl_name);
- if (MM->maybe_command($abs)) {
- $perl = $abs;
- last DIST_PERLNAME;
- }
- }
- }
- }
- $perl;
-}
-
-#-> sub CPAN::Distribution::make ;
-sub make {
- my($self) = @_;
- $CPAN::Frontend->myprint(sprintf "Running make for %s\n", $self->id);
- # Emergency brake if they said install Pippi and get newest perl
- if ($self->isa_perl) {
- if (
- $self->called_for ne $self->id &&
- ! $self->{force_update}
- ) {
- # if we die here, we break bundles
- $CPAN::Frontend->mywarn(sprintf qq{
-The most recent version "%s" of the module "%s"
-comes with the current version of perl (%s).
-I\'ll build that only if you ask for something like
- force install %s
-or
- install %s
-},
- $CPAN::META->instance(
- 'CPAN::Module',
- $self->called_for
- )->cpan_version,
- $self->called_for,
- $self->isa_perl,
- $self->called_for,
- $self->id);
- sleep 5; return;
- }
- }
- $self->get;
- EXCUSE: {
- my @e;
- $self->{archived} eq "NO" and push @e,
- "Is neither a tar nor a zip archive.";
-
- $self->{unwrapped} eq "NO" and push @e,
- "had problems unarchiving. Please build manually";
-
- exists $self->{writemakefile} &&
- $self->{writemakefile} =~ m/ ^ NO\s* ( .* ) /sx and push @e,
- $1 || "Had some problem writing Makefile";
-
- defined $self->{'make'} and push @e,
- "Has already been processed within this session";
-
- exists $self->{later} and length($self->{later}) and
- push @e, $self->{later};
-
- $CPAN::Frontend->myprint(join "", map {" $_\n"} @e) and return if @e;
- }
- $CPAN::Frontend->myprint("\n CPAN.pm: Going to build ".$self->id."\n\n");
- my $builddir = $self->dir;
- chdir $builddir or Carp::croak("Couldn't chdir $builddir: $!");
- $self->debug("Changed directory to $builddir") if $CPAN::DEBUG;
-
- if ($^O eq 'MacOS') {
- ExtUtils::MM_MacOS::make($self);
- return;
- }
-
- my $system;
- if ($self->{'configure'}) {
- $system = $self->{'configure'};
- } else {
- my($perl) = $self->perl or die "Couldn\'t find executable perl\n";
- my $switch = "";
-# This needs a handler that can be turned on or off:
-# $switch = "-MExtUtils::MakeMaker ".
-# "-Mops=:default,:filesys_read,:filesys_open,require,chdir"
-# if $] > 5.00310;
- $system = "$perl $switch Makefile.PL $CPAN::Config->{makepl_arg}";
- }
- unless (exists $self->{writemakefile}) {
- local($SIG{ALRM}) = sub { die "inactivity_timeout reached\n" };
- my($ret,$pid);
- $@ = "";
- if ($CPAN::Config->{inactivity_timeout}) {
- eval {
- alarm $CPAN::Config->{inactivity_timeout};
- local $SIG{CHLD}; # = sub { wait };
- if (defined($pid = fork)) {
- if ($pid) { #parent
- # wait;
- waitpid $pid, 0;
- } else { #child
- # note, this exec isn't necessary if
- # inactivity_timeout is 0. On the Mac I'd
- # suggest, we set it always to 0.
- exec $system;
- }
- } else {
- $CPAN::Frontend->myprint("Cannot fork: $!");
- return;
- }
- };
- alarm 0;
- if ($@){
- kill 9, $pid;
- waitpid $pid, 0;
- $CPAN::Frontend->myprint($@);
- $self->{writemakefile} = "NO $@";
- $@ = "";
- return;
- }
- } else {
- $ret = system($system);
- if ($ret != 0) {
- $self->{writemakefile} = "NO Makefile.PL returned status $ret";
- return;
- }
- }
- if (-f "Makefile") {
- $self->{writemakefile} = "YES";
- delete $self->{make_clean}; # if cleaned before, enable next
- } else {
- $self->{writemakefile} =
- qq{NO Makefile.PL refused to write a Makefile.};
- # It's probably worth to record the reason, so let's retry
- # local $/;
- # my $fh = IO::File->new("$system |"); # STDERR? STDIN?
- # $self->{writemakefile} .= <$fh>;
- }
- }
- if ($CPAN::Signal){
- delete $self->{force_update};
- return;
- }
- if (my @prereq = $self->unsat_prereq){
- return 1 if $self->follow_prereqs(@prereq); # signal success to the queuerunner
- }
- $system = join " ", $CPAN::Config->{'make'}, $CPAN::Config->{make_arg};
- if (system($system) == 0) {
- $CPAN::Frontend->myprint(" $system -- OK\n");
- $self->{'make'} = "YES";
- } else {
- $self->{writemakefile} ||= "YES";
- $self->{'make'} = "NO";
- $CPAN::Frontend->myprint(" $system -- NOT OK\n");
- }
-}
-
-sub follow_prereqs {
- my($self) = shift;
- my(@prereq) = @_;
- my $id = $self->id;
- $CPAN::Frontend->myprint("---- Unsatisfied dependencies detected ".
- "during [$id] -----\n");
-
- for my $p (@prereq) {
- $CPAN::Frontend->myprint(" $p\n");
- }
- my $follow = 0;
- if ($CPAN::Config->{prerequisites_policy} eq "follow") {
- $follow = 1;
- } elsif ($CPAN::Config->{prerequisites_policy} eq "ask") {
- require ExtUtils::MakeMaker;
- my $answer = ExtUtils::MakeMaker::prompt(
-"Shall I follow them and prepend them to the queue
-of modules we are processing right now?", "yes");
- $follow = $answer =~ /^\s*y/i;
- } else {
- local($") = ", ";
- $CPAN::Frontend->
- myprint(" Ignoring dependencies on modules @prereq\n");
- }
- if ($follow) {
- # color them as dirty
- for my $p (@prereq) {
- CPAN::Shell->expandany($p)->color_cmd_tmps(0,1);
- }
- CPAN::Queue->jumpqueue(@prereq,$id); # queue them and requeue yourself
- $self->{later} = "Delayed until after prerequisites";
- return 1; # signal success to the queuerunner
- }
-}
-
-#-> sub CPAN::Distribution::unsat_prereq ;
-sub unsat_prereq {
- my($self) = @_;
- my $prereq_pm = $self->prereq_pm or return;
- my(@need);
- NEED: while (my($need_module, $need_version) = each %$prereq_pm) {
- my $nmo = $CPAN::META->instance("CPAN::Module",$need_module);
- # we were too demanding:
- next if $nmo->uptodate;
-
- # if they have not specified a version, we accept any installed one
- if (not defined $need_version or
- $need_version == 0 or
- $need_version eq "undef") {
- next if defined $nmo->inst_file;
- }
-
- # We only want to install prereqs if either they're not installed
- # or if the installed version is too old. We cannot omit this
- # check, because if 'force' is in effect, nobody else will check.
- {
- local($^W) = 0;
- if (
- defined $nmo->inst_file &&
- ! CPAN::Version->vgt($need_version, $nmo->inst_version)
- ){
- CPAN->debug(sprintf "id[%s]inst_file[%s]inst_version[%s]need_version[%s]",
- $nmo->id,
- $nmo->inst_file,
- $nmo->inst_version,
- CPAN::Version->readable($need_version)
- );
- next NEED;
- }
- }
-
- if ($self->{sponsored_mods}{$need_module}++){
- # We have already sponsored it and for some reason it's still
- # not available. So we do nothing. Or what should we do?
- # if we push it again, we have a potential infinite loop
- next;
- }
- push @need, $need_module;
- }
- @need;
-}
-
-#-> sub CPAN::Distribution::prereq_pm ;
-sub prereq_pm {
- my($self) = @_;
- return $self->{prereq_pm} if
- exists $self->{prereq_pm_detected} && $self->{prereq_pm_detected};
- return unless $self->{writemakefile}; # no need to have succeeded
- # but we must have run it
- my $build_dir = $self->{build_dir} or die "Panic: no build_dir?";
- my $makefile = File::Spec->catfile($build_dir,"Makefile");
- my(%p) = ();
- my $fh;
- if (-f $makefile
- and
- $fh = FileHandle->new("<$makefile\0")) {
-
- local($/) = "\n";
-
- # A.Speer @p -> %p, where %p is $p{Module::Name}=Required_Version
- while (<$fh>) {
- last if /MakeMaker post_initialize section/;
- my($p) = m{^[\#]
- \s+PREREQ_PM\s+=>\s+(.+)
- }x;
- next unless $p;
- # warn "Found prereq expr[$p]";
-
- # Regexp modified by A.Speer to remember actual version of file
- # PREREQ_PM hash key wants, then add to
- while ( $p =~ m/(?:\s)([\w\:]+)=>q\[(.*?)\],?/g ){
- # In case a prereq is mentioned twice, complain.
- if ( defined $p{$1} ) {
- warn "Warning: PREREQ_PM mentions $1 more than once, last mention wins";
- }
- $p{$1} = $2;
- }
- last;
- }
- }
- $self->{prereq_pm_detected}++;
- return $self->{prereq_pm} = \%p;
-}
-
-#-> sub CPAN::Distribution::test ;
-sub test {
- my($self) = @_;
- $self->make;
- if ($CPAN::Signal){
- delete $self->{force_update};
- return;
- }
- $CPAN::Frontend->myprint("Running make test\n");
- if (my @prereq = $self->unsat_prereq){
- return 1 if $self->follow_prereqs(@prereq); # signal success to the queuerunner
- }
- EXCUSE: {
- my @e;
- exists $self->{make} or exists $self->{later} or push @e,
- "Make had some problems, maybe interrupted? Won't test";
-
- exists $self->{'make'} and
- $self->{'make'} eq 'NO' and
- push @e, "Can't test without successful make";
-
- exists $self->{build_dir} or push @e, "Has no own directory";
- $self->{badtestcnt} ||= 0;
- $self->{badtestcnt} > 0 and
- push @e, "Won't repeat unsuccessful test during this command";
-
- exists $self->{later} and length($self->{later}) and
- push @e, $self->{later};
-
- $CPAN::Frontend->myprint(join "", map {" $_\n"} @e) and return if @e;
- }
- chdir $self->{'build_dir'} or
- Carp::croak("Couldn't chdir to $self->{'build_dir'}");
- $self->debug("Changed directory to $self->{'build_dir'}")
- if $CPAN::DEBUG;
-
- if ($^O eq 'MacOS') {
- ExtUtils::MM_MacOS::make_test($self);
- return;
- }
-
- my $system = join " ", $CPAN::Config->{'make'}, "test";
- if (system($system) == 0) {
- $CPAN::Frontend->myprint(" $system -- OK\n");
- $self->{make_test} = "YES";
- } else {
- $self->{make_test} = "NO";
- $self->{badtestcnt}++;
- $CPAN::Frontend->myprint(" $system -- NOT OK\n");
- }
-}
-
-#-> sub CPAN::Distribution::clean ;
-sub clean {
- my($self) = @_;
- $CPAN::Frontend->myprint("Running make clean\n");
- EXCUSE: {
- my @e;
- exists $self->{make_clean} and $self->{make_clean} eq "YES" and
- push @e, "make clean already called once";
- exists $self->{build_dir} or push @e, "Has no own directory";
- $CPAN::Frontend->myprint(join "", map {" $_\n"} @e) and return if @e;
- }
- chdir $self->{'build_dir'} or
- Carp::croak("Couldn't chdir to $self->{'build_dir'}");
- $self->debug("Changed directory to $self->{'build_dir'}") if $CPAN::DEBUG;
-
- if ($^O eq 'MacOS') {
- ExtUtils::MM_MacOS::make_clean($self);
- return;
- }
-
- my $system = join " ", $CPAN::Config->{'make'}, "clean";
- if (system($system) == 0) {
- $CPAN::Frontend->myprint(" $system -- OK\n");
-
- # $self->force;
-
- # Jost Krieger pointed out that this "force" was wrong because
- # it has the effect that the next "install" on this distribution
- # will untar everything again. Instead we should bring the
- # object's state back to where it is after untarring.
-
- delete $self->{force_update};
- delete $self->{install};
- delete $self->{writemakefile};
- delete $self->{make};
- delete $self->{make_test}; # no matter if yes or no, tests must be redone
- $self->{make_clean} = "YES";
-
- } else {
- # Hmmm, what to do if make clean failed?
-
- $CPAN::Frontend->myprint(qq{ $system -- NOT OK
-
-make clean did not succeed, marking directory as unusable for further work.
-});
- $self->force("make"); # so that this directory won't be used again
-
- }
-}
-
-#-> sub CPAN::Distribution::install ;
-sub install {
- my($self) = @_;
- $self->test;
- if ($CPAN::Signal){
- delete $self->{force_update};
- return;
- }
- $CPAN::Frontend->myprint("Running make install\n");
- EXCUSE: {
- my @e;
- exists $self->{build_dir} or push @e, "Has no own directory";
-
- exists $self->{make} or exists $self->{later} or push @e,
- "Make had some problems, maybe interrupted? Won't install";
-
- exists $self->{'make'} and
- $self->{'make'} eq 'NO' and
- push @e, "make had returned bad status, install seems impossible";
-
- push @e, "make test had returned bad status, ".
- "won't install without force"
- if exists $self->{'make_test'} and
- $self->{'make_test'} eq 'NO' and
- ! $self->{'force_update'};
-
- exists $self->{'install'} and push @e,
- $self->{'install'} eq "YES" ?
- "Already done" : "Already tried without success";
-
- exists $self->{later} and length($self->{later}) and
- push @e, $self->{later};
-
- $CPAN::Frontend->myprint(join "", map {" $_\n"} @e) and return if @e;
- }
- chdir $self->{'build_dir'} or
- Carp::croak("Couldn't chdir to $self->{'build_dir'}");
- $self->debug("Changed directory to $self->{'build_dir'}")
- if $CPAN::DEBUG;
-
- if ($^O eq 'MacOS') {
- ExtUtils::MM_MacOS::make_install($self);
- return;
- }
-
- my $system = join(" ", $CPAN::Config->{'make'},
- "install", $CPAN::Config->{make_install_arg});
- my($stderr) = $^O =~ /Win/i ? "" : " 2>&1 ";
- my($pipe) = FileHandle->new("$system $stderr |");
- my($makeout) = "";
- while (<$pipe>){
- $CPAN::Frontend->myprint($_);
- $makeout .= $_;
- }
- $pipe->close;
- if ($?==0) {
- $CPAN::Frontend->myprint(" $system -- OK\n");
- return $self->{'install'} = "YES";
- } else {
- $self->{'install'} = "NO";
- $CPAN::Frontend->myprint(" $system -- NOT OK\n");
- if ($makeout =~ /permission/s && $> > 0) {
- $CPAN::Frontend->myprint(qq{ You may have to su }.
- qq{to root to install the package\n});
- }
- }
- delete $self->{force_update};
-}
-
-#-> sub CPAN::Distribution::dir ;
-sub dir {
- shift->{'build_dir'};
-}
-
-package CPAN::Bundle;
-
-sub undelay {
- my $self = shift;
- delete $self->{later};
- for my $c ( $self->contains ) {
- my $obj = CPAN::Shell->expandany($c) or next;
- $obj->undelay;
- }
-}
-
-#-> sub CPAN::Bundle::color_cmd_tmps ;
-sub color_cmd_tmps {
- my($self) = shift;
- my($depth) = shift || 0;
- my($color) = shift || 0;
- # a module needs to recurse to its cpan_file, a distribution needs
- # to recurse into its prereq_pms, a bundle needs to recurse into its modules
-
- return if exists $self->{incommandcolor}
- && $self->{incommandcolor}==$color;
- $CPAN::Frontend->mydie(sprintf("CPAN.pm panic: deep recursion in ".
- "color_cmd_tmps depth[%s] self[%s] id[%s]",
- $depth,
- $self,
- $self->id
- )) if $depth>=100;
- ##### warn "color_cmd_tmps $depth $color " . $self->id; # sleep 1;
-
- for my $c ( $self->contains ) {
- my $obj = CPAN::Shell->expandany($c) or next;
- CPAN->debug("c[$c]obj[$obj]") if $CPAN::DEBUG;
- $obj->color_cmd_tmps($depth+1,$color);
- }
- if ($color==0) {
- delete $self->{badtestcnt};
- }
- $self->{incommandcolor} = $color;
-}
-
-#-> sub CPAN::Bundle::as_string ;
-sub as_string {
- my($self) = @_;
- $self->contains;
- # following line must be "=", not "||=" because we have a moving target
- $self->{INST_VERSION} = $self->inst_version;
- return $self->SUPER::as_string;
-}
-
-#-> sub CPAN::Bundle::contains ;
-sub contains {
- my($self) = @_;
- my($inst_file) = $self->inst_file || "";
- my($id) = $self->id;
- $self->debug("inst_file[$inst_file]id[$id]") if $CPAN::DEBUG;
- unless ($inst_file) {
- # Try to get at it in the cpan directory
- $self->debug("no inst_file") if $CPAN::DEBUG;
- my $cpan_file;
- $CPAN::Frontend->mydie("I don't know a bundle with ID $id\n") unless
- $cpan_file = $self->cpan_file;
- if ($cpan_file eq "N/A") {
- $CPAN::Frontend->mydie("Bundle $id not found on disk and not on CPAN.
- Maybe stale symlink? Maybe removed during session? Giving up.\n");
- }
- my $dist = $CPAN::META->instance('CPAN::Distribution',
- $self->cpan_file);
- $dist->get;
- $self->debug($dist->as_string) if $CPAN::DEBUG;
- my($todir) = $CPAN::Config->{'cpan_home'};
- my(@me,$from,$to,$me);
- @me = split /::/, $self->id;
- $me[-1] .= ".pm";
- $me = MM->catfile(@me);
- $from = $self->find_bundle_file($dist->{'build_dir'},$me);
- $to = MM->catfile($todir,$me);
- File::Path::mkpath(File::Basename::dirname($to));
- File::Copy::copy($from, $to)
- or Carp::confess("Couldn't copy $from to $to: $!");
- $inst_file = $to;
- }
- my @result;
- my $fh = FileHandle->new;
- local $/ = "\n";
- open($fh,$inst_file) or die "Could not open '$inst_file': $!";
- my $in_cont = 0;
- $self->debug("inst_file[$inst_file]") if $CPAN::DEBUG;
- while (<$fh>) {
- $in_cont = m/^=(?!head1\s+CONTENTS)/ ? 0 :
- m/^=head1\s+CONTENTS/ ? 1 : $in_cont;
- next unless $in_cont;
- next if /^=/;
- s/\#.*//;
- next if /^\s+$/;
- chomp;
- push @result, (split " ", $_, 2)[0];
- }
- close $fh;
- delete $self->{STATUS};
- $self->{CONTAINS} = \@result;
- $self->debug("CONTAINS[@result]") if $CPAN::DEBUG;
- unless (@result) {
- $CPAN::Frontend->mywarn(qq{
-The bundle file "$inst_file" may be a broken
-bundlefile. It seems not to contain any bundle definition.
-Please check the file and if it is bogus, please delete it.
-Sorry for the inconvenience.
-});
- }
- @result;
-}
-
-#-> sub CPAN::Bundle::find_bundle_file
-sub find_bundle_file {
- my($self,$where,$what) = @_;
- $self->debug("where[$where]what[$what]") if $CPAN::DEBUG;
-### The following two lines let CPAN.pm become Bundle/CPAN.pm :-(
-### my $bu = MM->catfile($where,$what);
-### return $bu if -f $bu;
- my $manifest = MM->catfile($where,"MANIFEST");
- unless (-f $manifest) {
- require ExtUtils::Manifest;
- my $cwd = CPAN::anycwd();
- chdir $where or $CPAN::Frontend->mydie(qq{Could not chdir to "$where": $!});
- ExtUtils::Manifest::mkmanifest();
- chdir $cwd or $CPAN::Frontend->mydie(qq{Could not chdir to "$cwd": $!});
- }
- my $fh = FileHandle->new($manifest)
- or Carp::croak("Couldn't open $manifest: $!");
- local($/) = "\n";
- my $what2 = $what;
- if ($^O eq 'MacOS') {
- $what =~ s/^://;
- $what2 =~ tr|:|/|;
- $what2 =~ s/:Bundle://;
- $what2 =~ tr|:|/|;
- } else {
- $what2 =~ s|Bundle[/\\]||;
- }
- my $bu;
- while (<$fh>) {
- next if /^\s*\#/;
- my($file) = /(\S+)/;
- if ($file =~ m|\Q$what\E$|) {
- $bu = $file;
- # return MM->catfile($where,$bu); # bad
- last;
- }
- # retry if she managed to
- # have no Bundle directory
- $bu = $file if $file =~ m|\Q$what2\E$|;
- }
- $bu =~ tr|/|:| if $^O eq 'MacOS';
- return MM->catfile($where, $bu) if $bu;
- Carp::croak("Couldn't find a Bundle file in $where");
-}
-
-# needs to work quite differently from Module::inst_file because of
-# cpan_home/Bundle/ directory and the possibility that we have
-# shadowing effect. As it makes no sense to take the first in @INC for
-# Bundles, we parse them all for $VERSION and take the newest.
-
-#-> sub CPAN::Bundle::inst_file ;
-sub inst_file {
- my($self) = @_;
- my($inst_file);
- my(@me);
- @me = split /::/, $self->id;
- $me[-1] .= ".pm";
- my($incdir,$bestv);
- foreach $incdir ($CPAN::Config->{'cpan_home'},@INC) {
- my $bfile = MM->catfile($incdir, @me);
- CPAN->debug("bfile[$bfile]") if $CPAN::DEBUG;
- next unless -f $bfile;
- my $foundv = MM->parse_version($bfile);
- if (!$bestv || CPAN::Version->vgt($foundv,$bestv)) {
- $self->{INST_FILE} = $bfile;
- $self->{INST_VERSION} = $bestv = $foundv;
- }
- }
- $self->{INST_FILE};
-}
-
-#-> sub CPAN::Bundle::inst_version ;
-sub inst_version {
- my($self) = @_;
- $self->inst_file; # finds INST_VERSION as side effect
- $self->{INST_VERSION};
-}
-
-#-> sub CPAN::Bundle::rematein ;
-sub rematein {
- my($self,$meth) = @_;
- $self->debug("self[$self] meth[$meth]") if $CPAN::DEBUG;
- my($id) = $self->id;
- Carp::croak "Can't $meth $id, don't have an associated bundle file. :-(\n"
- unless $self->inst_file || $self->cpan_file;
- my($s,%fail);
- for $s ($self->contains) {
- my($type) = $s =~ m|/| ? 'CPAN::Distribution' :
- $s =~ m|^Bundle::| ? 'CPAN::Bundle' : 'CPAN::Module';
- if ($type eq 'CPAN::Distribution') {
- $CPAN::Frontend->mywarn(qq{
-The Bundle }.$self->id.qq{ contains
-explicitly a file $s.
-});
- sleep 3;
- }
- # possibly noisy action:
- $self->debug("type[$type] s[$s]") if $CPAN::DEBUG;
- my $obj = $CPAN::META->instance($type,$s);
- $obj->$meth();
- if ($obj->isa(CPAN::Bundle)
- &&
- exists $obj->{install_failed}
- &&
- ref($obj->{install_failed}) eq "HASH"
- ) {
- for (keys %{$obj->{install_failed}}) {
- $self->{install_failed}{$_} = undef; # propagate faiure up
- # to me in a
- # recursive call
- $fail{$s} = 1; # the bundle itself may have succeeded but
- # not all children
- }
- } else {
- my $success;
- $success = $obj->can("uptodate") ? $obj->uptodate : 0;
- $success ||= $obj->{'install'} && $obj->{'install'} eq "YES";
- if ($success) {
- delete $self->{install_failed}{$s};
- } else {
- $fail{$s} = 1;
- }
- }
- }
-
- # recap with less noise
- if ( $meth eq "install" ) {
- if (%fail) {
- require Text::Wrap;
- my $raw = sprintf(qq{Bundle summary:
-The following items in bundle %s had installation problems:},
- $self->id
- );
- $CPAN::Frontend->myprint(Text::Wrap::fill("","",$raw));
- $CPAN::Frontend->myprint("\n");
- my $paragraph = "";
- my %reported;
- for $s ($self->contains) {
- if ($fail{$s}){
- $paragraph .= "$s ";
- $self->{install_failed}{$s} = undef;
- $reported{$s} = undef;
- }
- }
- my $report_propagated;
- for $s (sort keys %{$self->{install_failed}}) {
- next if exists $reported{$s};
- $paragraph .= "and the following items had problems
-during recursive bundle calls: " unless $report_propagated++;
- $paragraph .= "$s ";
- }
- $CPAN::Frontend->myprint(Text::Wrap::fill(" "," ",$paragraph));
- $CPAN::Frontend->myprint("\n");
- } else {
- $self->{'install'} = 'YES';
- }
- }
-}
-
-#sub CPAN::Bundle::xs_file
-sub xs_file {
- # If a bundle contains another that contains an xs_file we have
- # here, we just don't bother I suppose
- return 0;
-}
-
-#-> sub CPAN::Bundle::force ;
-sub force { shift->rematein('force',@_); }
-#-> sub CPAN::Bundle::get ;
-sub get { shift->rematein('get',@_); }
-#-> sub CPAN::Bundle::make ;
-sub make { shift->rematein('make',@_); }
-#-> sub CPAN::Bundle::test ;
-sub test {
- my $self = shift;
- $self->{badtestcnt} ||= 0;
- $self->rematein('test',@_);
-}
-#-> sub CPAN::Bundle::install ;
-sub install {
- my $self = shift;
- $self->rematein('install',@_);
-}
-#-> sub CPAN::Bundle::clean ;
-sub clean { shift->rematein('clean',@_); }
-
-#-> sub CPAN::Bundle::uptodate ;
-sub uptodate {
- my($self) = @_;
- return 0 unless $self->SUPER::uptodate; # we mut have the current Bundle def
- my $c;
- foreach $c ($self->contains) {
- my $obj = CPAN::Shell->expandany($c);
- return 0 unless $obj->uptodate;
- }
- return 1;
-}
-
-#-> sub CPAN::Bundle::readme ;
-sub readme {
- my($self) = @_;
- my($file) = $self->cpan_file or $CPAN::Frontend->myprint(qq{
-No File found for bundle } . $self->id . qq{\n}), return;
- $self->debug("self[$self] file[$file]") if $CPAN::DEBUG;
- $CPAN::META->instance('CPAN::Distribution',$file)->readme;
-}
-
-package CPAN::Module;
-
-# Accessors
-# sub cpan_userid { shift->{RO}{CPAN_USERID} }
-sub userid {
- my $self = shift;
- return unless exists $self->{RO}; # should never happen
- return $self->{RO}{CPAN_USERID} || $self->{RO}{userid};
-}
-sub description { shift->{RO}{description} }
-
-sub undelay {
- my $self = shift;
- delete $self->{later};
- if ( my $dist = CPAN::Shell->expand("Distribution", $self->cpan_file) ) {
- $dist->undelay;
- }
-}
-
-#-> sub CPAN::Module::color_cmd_tmps ;
-sub color_cmd_tmps {
- my($self) = shift;
- my($depth) = shift || 0;
- my($color) = shift || 0;
- # a module needs to recurse to its cpan_file
-
- return if exists $self->{incommandcolor}
- && $self->{incommandcolor}==$color;
- $CPAN::Frontend->mydie(sprintf("CPAN.pm panic: deep recursion in ".
- "color_cmd_tmps depth[%s] self[%s] id[%s]",
- $depth,
- $self,
- $self->id
- )) if $depth>=100;
- ##### warn "color_cmd_tmps $depth $color " . $self->id; # sleep 1;
-
- if ( my $dist = CPAN::Shell->expand("Distribution", $self->cpan_file) ) {
- $dist->color_cmd_tmps($depth+1,$color);
- }
- if ($color==0) {
- delete $self->{badtestcnt};
- }
- $self->{incommandcolor} = $color;
-}
-
-#-> sub CPAN::Module::as_glimpse ;
-sub as_glimpse {
- my($self) = @_;
- my(@m);
- my $class = ref($self);
- $class =~ s/^CPAN:://;
- my $color_on = "";
- my $color_off = "";
- if (
- $CPAN::Shell::COLOR_REGISTERED
- &&
- $CPAN::META->has_inst("Term::ANSIColor")
- &&
- $self->{RO}{description}
- ) {
- $color_on = Term::ANSIColor::color("green");
- $color_off = Term::ANSIColor::color("reset");
- }
- push @m, sprintf("%-15s %s%-15s%s (%s)\n",
- $class,
- $color_on,
- $self->id,
- $color_off,
- $self->cpan_file);
- join "", @m;
-}
-
-#-> sub CPAN::Module::as_string ;
-sub as_string {
- my($self) = @_;
- my(@m);
- CPAN->debug($self) if $CPAN::DEBUG;
- my $class = ref($self);
- $class =~ s/^CPAN:://;
- local($^W) = 0;
- push @m, $class, " id = $self->{ID}\n";
- my $sprintf = " %-12s %s\n";
- push @m, sprintf($sprintf, 'DESCRIPTION', $self->description)
- if $self->description;
- my $sprintf2 = " %-12s %s (%s)\n";
- my($userid);
- if ($userid = $self->cpan_userid || $self->userid){
- my $author;
- if ($author = CPAN::Shell->expand('Author',$userid)) {
- my $email = "";
- my $m; # old perls
- if ($m = $author->email) {
- $email = " <$m>";
- }
- push @m, sprintf(
- $sprintf2,
- 'CPAN_USERID',
- $userid,
- $author->fullname . $email
- );
- }
- }
- push @m, sprintf($sprintf, 'CPAN_VERSION', $self->cpan_version)
- if $self->cpan_version;
- push @m, sprintf($sprintf, 'CPAN_FILE', $self->cpan_file)
- if $self->cpan_file;
- my $sprintf3 = " %-12s %1s%1s%1s%1s (%s,%s,%s,%s)\n";
- my(%statd,%stats,%statl,%stati);
- @statd{qw,? i c a b R M S,} = qw,unknown idea
- pre-alpha alpha beta released mature standard,;
- @stats{qw,? m d u n,} = qw,unknown mailing-list
- developer comp.lang.perl.* none,;
- @statl{qw,? p c + o h,} = qw,unknown perl C C++ other hybrid,;
- @stati{qw,? f r O h,} = qw,unknown functions
- references+ties object-oriented hybrid,;
- $statd{' '} = 'unknown';
- $stats{' '} = 'unknown';
- $statl{' '} = 'unknown';
- $stati{' '} = 'unknown';
- push @m, sprintf(
- $sprintf3,
- 'DSLI_STATUS',
- $self->{RO}{statd},
- $self->{RO}{stats},
- $self->{RO}{statl},
- $self->{RO}{stati},
- $statd{$self->{RO}{statd}},
- $stats{$self->{RO}{stats}},
- $statl{$self->{RO}{statl}},
- $stati{$self->{RO}{stati}}
- ) if $self->{RO}{statd};
- my $local_file = $self->inst_file;
- unless ($self->{MANPAGE}) {
- if ($local_file) {
- $self->{MANPAGE} = $self->manpage_headline($local_file);
- } else {
- # If we have already untarred it, we should look there
- my $dist = $CPAN::META->instance('CPAN::Distribution',
- $self->cpan_file);
- # warn "dist[$dist]";
- # mff=manifest file; mfh=manifest handle
- my($mff,$mfh);
- if (
- $dist->{build_dir}
- and
- (-f ($mff = MM->catfile($dist->{build_dir}, "MANIFEST")))
- and
- $mfh = FileHandle->new($mff)
- ) {
- CPAN->debug("mff[$mff]") if $CPAN::DEBUG;
- my $lfre = $self->id; # local file RE
- $lfre =~ s/::/./g;
- $lfre .= "\\.pm\$";
- my($lfl); # local file file
- local $/ = "\n";
- my(@mflines) = <$mfh>;
- for (@mflines) {
- s/^\s+//;
- s/\s.*//s;
- }
- while (length($lfre)>5 and !$lfl) {
- ($lfl) = grep /$lfre/, @mflines;
- CPAN->debug("lfl[$lfl]lfre[$lfre]") if $CPAN::DEBUG;
- $lfre =~ s/.+?\.//;
- }
- $lfl =~ s/\s.*//; # remove comments
- $lfl =~ s/\s+//g; # chomp would maybe be too system-specific
- my $lfl_abs = MM->catfile($dist->{build_dir},$lfl);
- # warn "lfl_abs[$lfl_abs]";
- if (-f $lfl_abs) {
- $self->{MANPAGE} = $self->manpage_headline($lfl_abs);
- }
- }
- }
- }
- my($item);
- for $item (qw/MANPAGE/) {
- push @m, sprintf($sprintf, $item, $self->{$item})
- if exists $self->{$item};
- }
- for $item (qw/CONTAINS/) {
- push @m, sprintf($sprintf, $item, join(" ",@{$self->{$item}}))
- if exists $self->{$item} && @{$self->{$item}};
- }
- push @m, sprintf($sprintf, 'INST_FILE',
- $local_file || "(not installed)");
- push @m, sprintf($sprintf, 'INST_VERSION',
- $self->inst_version) if $local_file;
- join "", @m, "\n";
-}
-
-sub manpage_headline {
- my($self,$local_file) = @_;
- my(@local_file) = $local_file;
- $local_file =~ s/\.pm(?!\n)\Z/.pod/;
- push @local_file, $local_file;
- my(@result,$locf);
- for $locf (@local_file) {
- next unless -f $locf;
- my $fh = FileHandle->new($locf)
- or $Carp::Frontend->mydie("Couldn't open $locf: $!");
- my $inpod = 0;
- local $/ = "\n";
- while (<$fh>) {
- $inpod = m/^=(?!head1\s+NAME)/ ? 0 :
- m/^=head1\s+NAME/ ? 1 : $inpod;
- next unless $inpod;
- next if /^=/;
- next if /^\s+$/;
- chomp;
- push @result, $_;
- }
- close $fh;
- last if @result;
- }
- join " ", @result;
-}
-
-#-> sub CPAN::Module::cpan_file ;
-# Note: also inherited by CPAN::Bundle
-sub cpan_file {
- my $self = shift;
- CPAN->debug(sprintf "id[%s]", $self->id) if $CPAN::DEBUG;
- unless (defined $self->{RO}{CPAN_FILE}) {
- CPAN::Index->reload;
- }
- if (exists $self->{RO}{CPAN_FILE} && defined $self->{RO}{CPAN_FILE}){
- return $self->{RO}{CPAN_FILE};
- } else {
- my $userid = $self->userid;
- if ( $userid ) {
- if ($CPAN::META->exists("CPAN::Author",$userid)) {
- my $author = $CPAN::META->instance("CPAN::Author",
- $userid);
- my $fullname = $author->fullname;
- my $email = $author->email;
- unless (defined $fullname && defined $email) {
- return sprintf("Contact Author %s",
- $userid,
- );
- }
- return "Contact Author $fullname <$email>";
- } else {
- return "UserID $userid";
- }
- } else {
- return "N/A";
- }
- }
-}
-
-#-> sub CPAN::Module::cpan_version ;
-sub cpan_version {
- my $self = shift;
-
- $self->{RO}{CPAN_VERSION} = 'undef'
- unless defined $self->{RO}{CPAN_VERSION};
- # I believe this is always a bug in the index and should be reported
- # as such, but usually I find out such an error and do not want to
- # provoke too many bugreports
-
- $self->{RO}{CPAN_VERSION};
-}
-
-#-> sub CPAN::Module::force ;
-sub force {
- my($self) = @_;
- $self->{'force_update'}++;
-}
-
-#-> sub CPAN::Module::rematein ;
-sub rematein {
- my($self,$meth) = @_;
- $CPAN::Frontend->myprint(sprintf("Running %s for module %s\n",
- $meth,
- $self->id));
- my $cpan_file = $self->cpan_file;
- if ($cpan_file eq "N/A" || $cpan_file =~ /^Contact Author/){
- $CPAN::Frontend->mywarn(sprintf qq{
- The module %s isn\'t available on CPAN.
-
- Either the module has not yet been uploaded to CPAN, or it is
- temporary unavailable. Please contact the author to find out
- more about the status. Try 'i %s'.
-},
- $self->id,
- $self->id,
- );
- return;
- }
- my $pack = $CPAN::META->instance('CPAN::Distribution',$cpan_file);
- $pack->called_for($self->id);
- $pack->force($meth) if exists $self->{'force_update'};
- $pack->$meth();
- $pack->unforce if $pack->can("unforce") && exists $self->{'force_update'};
- delete $self->{'force_update'};
-}
-
-#-> sub CPAN::Module::readme ;
-sub readme { shift->rematein('readme') }
-#-> sub CPAN::Module::look ;
-sub look { shift->rematein('look') }
-#-> sub CPAN::Module::cvs_import ;
-sub cvs_import { shift->rematein('cvs_import') }
-#-> sub CPAN::Module::get ;
-sub get { shift->rematein('get',@_); }
-#-> sub CPAN::Module::make ;
-sub make {
- my $self = shift;
- $self->rematein('make');
-}
-#-> sub CPAN::Module::test ;
-sub test {
- my $self = shift;
- $self->{badtestcnt} ||= 0;
- $self->rematein('test',@_);
-}
-#-> sub CPAN::Module::uptodate ;
-sub uptodate {
- my($self) = @_;
- my($latest) = $self->cpan_version;
- $latest ||= 0;
- my($inst_file) = $self->inst_file;
- my($have) = 0;
- if (defined $inst_file) {
- $have = $self->inst_version;
- }
- local($^W)=0;
- if ($inst_file
- &&
- ! CPAN::Version->vgt($latest, $have)
- ) {
- CPAN->debug("returning uptodate. inst_file[$inst_file] ".
- "latest[$latest] have[$have]") if $CPAN::DEBUG;
- return 1;
- }
- return;
-}
-#-> sub CPAN::Module::install ;
-sub install {
- my($self) = @_;
- my($doit) = 0;
- if ($self->uptodate
- &&
- not exists $self->{'force_update'}
- ) {
- $CPAN::Frontend->myprint( $self->id. " is up to date.\n");
- } else {
- $doit = 1;
- }
- $self->rematein('install') if $doit;
-}
-#-> sub CPAN::Module::clean ;
-sub clean { shift->rematein('clean') }
-
-#-> sub CPAN::Module::inst_file ;
-sub inst_file {
- my($self) = @_;
- my($dir,@packpath);
- @packpath = split /::/, $self->{ID};
- $packpath[-1] .= ".pm";
- foreach $dir (@INC) {
- my $pmfile = MM->catfile($dir,@packpath);
- if (-f $pmfile){
- return $pmfile;
- }
- }
- return;
-}
-
-#-> sub CPAN::Module::xs_file ;
-sub xs_file {
- my($self) = @_;
- my($dir,@packpath);
- @packpath = split /::/, $self->{ID};
- push @packpath, $packpath[-1];
- $packpath[-1] .= "." . $Config::Config{'dlext'};
- foreach $dir (@INC) {
- my $xsfile = MM->catfile($dir,'auto',@packpath);
- if (-f $xsfile){
- return $xsfile;
- }
- }
- return;
-}
-
-#-> sub CPAN::Module::inst_version ;
-sub inst_version {
- my($self) = @_;
- my $parsefile = $self->inst_file or return;
- local($^W) = 0 if $] < 5.00303 && $ExtUtils::MakeMaker::VERSION < 5.38;
- my $have;
-
- # there was a bug in 5.6.0 that let lots of unini warnings out of
- # parse_version. Fixed shortly after 5.6.0 by PMQS. We can remove
- # the following workaround after 5.6.1 is out.
- local($SIG{__WARN__}) = sub { my $w = shift;
- return if $w =~ /uninitialized/i;
- warn $w;
- };
-
- $have = MM->parse_version($parsefile) || "undef";
- $have =~ s/^ //; # since the %vd hack these two lines here are needed
- $have =~ s/ $//; # trailing whitespace happens all the time
-
- # My thoughts about why %vd processing should happen here
-
- # Alt1 maintain it as string with leading v:
- # read index files do nothing
- # compare it use utility for compare
- # print it do nothing
-
- # Alt2 maintain it as what is is
- # read index files convert
- # compare it use utility because there's still a ">" vs "gt" issue
- # print it use CPAN::Version for print
-
- # Seems cleaner to hold it in memory as a string starting with a "v"
-
- # If the author of this module made a mistake and wrote a quoted
- # "v1.13" instead of v1.13, we simply leave it at that with the
- # effect that *we* will treat it like a v-tring while the rest of
- # perl won't. Seems sensible when we consider that any action we
- # could take now would just add complexity.
-
- $have = CPAN::Version->readable($have);
-
- $have =~ s/\s*//g; # stringify to float around floating point issues
- $have; # no stringify needed, \s* above matches always
-}
-
-package CPAN::Tarzip;
-
-# CPAN::Tarzip::gzip
-sub gzip {
- my($class,$read,$write) = @_;
- if ($CPAN::META->has_inst("Compress::Zlib")) {
- my($buffer,$fhw);
- $fhw = FileHandle->new($read)
- or $CPAN::Frontend->mydie("Could not open $read: $!");
- my $gz = Compress::Zlib::gzopen($write, "wb")
- or $CPAN::Frontend->mydie("Cannot gzopen $write: $!\n");
- $gz->gzwrite($buffer)
- while read($fhw,$buffer,4096) > 0 ;
- $gz->gzclose() ;
- $fhw->close;
- return 1;
- } else {
- system("$CPAN::Config->{gzip} -c $read > $write")==0;
- }
-}
-
-
-# CPAN::Tarzip::gunzip
-sub gunzip {
- my($class,$read,$write) = @_;
- if ($CPAN::META->has_inst("Compress::Zlib")) {
- my($buffer,$fhw);
- $fhw = FileHandle->new(">$write")
- or $CPAN::Frontend->mydie("Could not open >$write: $!");
- my $gz = Compress::Zlib::gzopen($read, "rb")
- or $CPAN::Frontend->mydie("Cannot gzopen $read: $!\n");
- $fhw->print($buffer)
- while $gz->gzread($buffer) > 0 ;
- $CPAN::Frontend->mydie("Error reading from $read: $!\n")
- if $gz->gzerror != Compress::Zlib::Z_STREAM_END();
- $gz->gzclose() ;
- $fhw->close;
- return 1;
- } else {
- system("$CPAN::Config->{gzip} -dc $read > $write")==0;
- }
-}
-
-
-# CPAN::Tarzip::gtest
-sub gtest {
- my($class,$read) = @_;
- # After I had reread the documentation in zlib.h, I discovered that
- # uncompressed files do not lead to an gzerror (anymore?).
- if ( $CPAN::META->has_inst("Compress::Zlib") ) {
- my($buffer,$len);
- $len = 0;
- my $gz = Compress::Zlib::gzopen($read, "rb")
- or $CPAN::Frontend->mydie(sprintf("Cannot gzopen %s: %s\n",
- $read,
- $Compress::Zlib::gzerrno));
- while ($gz->gzread($buffer) > 0 ){
- $len += length($buffer);
- $buffer = "";
- }
- my $err = $gz->gzerror;
- my $success = ! $err || $err == Compress::Zlib::Z_STREAM_END();
- if ($len == -s $read){
- $success = 0;
- CPAN->debug("hit an uncompressed file") if $CPAN::DEBUG;
- }
- $gz->gzclose();
- CPAN->debug("err[$err]success[$success]") if $CPAN::DEBUG;
- return $success;
- } else {
- return system("$CPAN::Config->{gzip} -dt $read")==0;
- }
-}
-
-
-# CPAN::Tarzip::TIEHANDLE
-sub TIEHANDLE {
- my($class,$file) = @_;
- my $ret;
- $class->debug("file[$file]");
- if ($CPAN::META->has_inst("Compress::Zlib")) {
- my $gz = Compress::Zlib::gzopen($file,"rb") or
- die "Could not gzopen $file";
- $ret = bless {GZ => $gz}, $class;
- } else {
- my $pipe = "$CPAN::Config->{gzip} --decompress --stdout $file |";
- my $fh = FileHandle->new($pipe) or die "Could not pipe[$pipe]: $!";
- binmode $fh;
- $ret = bless {FH => $fh}, $class;
- }
- $ret;
-}
-
-
-# CPAN::Tarzip::READLINE
-sub READLINE {
- my($self) = @_;
- if (exists $self->{GZ}) {
- my $gz = $self->{GZ};
- my($line,$bytesread);
- $bytesread = $gz->gzreadline($line);
- return undef if $bytesread <= 0;
- return $line;
- } else {
- my $fh = $self->{FH};
- return scalar <$fh>;
- }
-}
-
-
-# CPAN::Tarzip::READ
-sub READ {
- my($self,$ref,$length,$offset) = @_;
- die "read with offset not implemented" if defined $offset;
- if (exists $self->{GZ}) {
- my $gz = $self->{GZ};
- my $byteread = $gz->gzread($$ref,$length);# 30eaf79e8b446ef52464b5422da328a8
- return $byteread;
- } else {
- my $fh = $self->{FH};
- return read($fh,$$ref,$length);
- }
-}
-
-
-# CPAN::Tarzip::DESTROY
-sub DESTROY {
- my($self) = @_;
- if (exists $self->{GZ}) {
- my $gz = $self->{GZ};
- $gz->gzclose() if defined $gz; # hard to say if it is allowed
- # to be undef ever. AK, 2000-09
- } else {
- my $fh = $self->{FH};
- $fh->close if defined $fh;
- }
- undef $self;
-}
-
-
-# CPAN::Tarzip::untar
-sub untar {
- my($class,$file) = @_;
- my($prefer) = 0;
-
- if (0) { # makes changing order easier
- } elsif ($BUGHUNTING){
- $prefer=2;
- } elsif (MM->maybe_command($CPAN::Config->{gzip})
- &&
- MM->maybe_command($CPAN::Config->{'tar'})) {
- # should be default until Archive::Tar is fixed
- $prefer = 1;
- } elsif (
- $CPAN::META->has_inst("Archive::Tar")
- &&
- $CPAN::META->has_inst("Compress::Zlib") ) {
- $prefer = 2;
- } else {
- $CPAN::Frontend->mydie(qq{
-CPAN.pm needs either both external programs tar and gzip installed or
-both the modules Archive::Tar and Compress::Zlib. Neither prerequisite
-is available. Can\'t continue.
-});
- }
- if ($prefer==1) { # 1 => external gzip+tar
- my($system);
- my $is_compressed = $class->gtest($file);
- if ($is_compressed) {
- $system = "$CPAN::Config->{gzip} --decompress --stdout " .
- "< $file | $CPAN::Config->{tar} xvf -";
- } else {
- $system = "$CPAN::Config->{tar} xvf $file";
- }
- if (system($system) != 0) {
- # people find the most curious tar binaries that cannot handle
- # pipes
- if ($is_compressed) {
- (my $ungzf = $file) =~ s/\.gz(?!\n)\Z//;
- if (CPAN::Tarzip->gunzip($file, $ungzf)) {
- $CPAN::Frontend->myprint(qq{Uncompressed $file successfully\n});
- } else {
- $CPAN::Frontend->mydie(qq{Couldn\'t uncompress $file\n});
- }
- $file = $ungzf;
- }
- $system = "$CPAN::Config->{tar} xvf $file";
- $CPAN::Frontend->myprint(qq{Using Tar:$system:\n});
- if (system($system)==0) {
- $CPAN::Frontend->myprint(qq{Untarred $file successfully\n});
- } else {
- $CPAN::Frontend->mydie(qq{Couldn\'t untar $file\n});
- }
- return 1;
- } else {
- return 1;
- }
- } elsif ($prefer==2) { # 2 => modules
- my $tar = Archive::Tar->new($file,1);
- my $af; # archive file
- my @af;
- if ($BUGHUNTING) {
- # RCS 1.337 had this code, it turned out unacceptable slow but
- # it revealed a bug in Archive::Tar. Code is only here to hunt
- # the bug again. It should never be enabled in published code.
- # GDGraph3d-0.53 was an interesting case according to Larry
- # Virden.
- warn(">>>Bughunting code enabled<<< " x 20);
- for $af ($tar->list_files) {
- if ($af =~ m!^(/|\.\./)!) {
- $CPAN::Frontend->mydie("ALERT: Archive contains ".
- "illegal member [$af]");
- }
- $CPAN::Frontend->myprint("$af\n");
- $tar->extract($af); # slow but effective for finding the bug
- return if $CPAN::Signal;
- }
- } else {
- for $af ($tar->list_files) {
- if ($af =~ m!^(/|\.\./)!) {
- $CPAN::Frontend->mydie("ALERT: Archive contains ".
- "illegal member [$af]");
- }
- $CPAN::Frontend->myprint("$af\n");
- push @af, $af;
- return if $CPAN::Signal;
- }
- $tar->extract(@af);
- }
-
- ExtUtils::MM_MacOS::convert_files([$tar->list_files], 1)
- if ($^O eq 'MacOS');
-
- return 1;
- }
-}
-
-sub unzip {
- my($class,$file) = @_;
- if ($CPAN::META->has_inst("Archive::Zip")) {
- # blueprint of the code from Archive::Zip::Tree::extractTree();
- my $zip = Archive::Zip->new();
- my $status;
- $status = $zip->read($file);
- die "Read of file[$file] failed\n" if $status != Archive::Zip::AZ_OK();
- $CPAN::META->debug("Successfully read file[$file]") if $CPAN::DEBUG;
- my @members = $zip->members();
- for my $member ( @members ) {
- my $af = $member->fileName();
- if ($af =~ m!^(/|\.\./)!) {
- $CPAN::Frontend->mydie("ALERT: Archive contains ".
- "illegal member [$af]");
- }
- my $status = $member->extractToFileNamed( $af );
- $CPAN::META->debug("af[$af]status[$status]") if $CPAN::DEBUG;
- die "Extracting of file[$af] from zipfile[$file] failed\n" if
- $status != Archive::Zip::AZ_OK();
- return if $CPAN::Signal;
- }
- return 1;
- } else {
- my $unzip = $CPAN::Config->{unzip} or
- $CPAN::Frontend->mydie("Cannot unzip, no unzip program available");
- my @system = ($unzip, $file);
- return system(@system) == 0;
- }
-}
-
-
-package CPAN::Version;
-# CPAN::Version::vcmp courtesy Jost Krieger
-sub vcmp {
- my($self,$l,$r) = @_;
- local($^W) = 0;
- CPAN->debug("l[$l] r[$r]") if $CPAN::DEBUG;
-
- return 0 if $l eq $r; # short circuit for quicker success
-
- if ($l=~/^v/ <=> $r=~/^v/) {
- for ($l,$r) {
- next if /^v/;
- $_ = $self->float2vv($_);
- }
- }
-
- return
- ($l ne "undef") <=> ($r ne "undef") ||
- ($] >= 5.006 &&
- $l =~ /^v/ &&
- $r =~ /^v/ &&
- $self->vstring($l) cmp $self->vstring($r)) ||
- $l <=> $r ||
- $l cmp $r;
-}
-
-sub vgt {
- my($self,$l,$r) = @_;
- $self->vcmp($l,$r) > 0;
-}
-
-sub vstring {
- my($self,$n) = @_;
- $n =~ s/^v// or die "CPAN::Version::vstring() called with invalid arg [$n]";
- pack "U*", split /\./, $n;
-}
-
-# vv => visible vstring
-sub float2vv {
- my($self,$n) = @_;
- my($rev) = int($n);
- $rev ||= 0;
- my($mantissa) = $n =~ /\.(\d{1,12})/; # limit to 12 digits to limit
- # architecture influence
- $mantissa ||= 0;
- $mantissa .= "0" while length($mantissa)%3;
- my $ret = "v" . $rev;
- while ($mantissa) {
- $mantissa =~ s/(\d{1,3})// or
- die "Panic: length>0 but not a digit? mantissa[$mantissa]";
- $ret .= ".".int($1);
- }
- # warn "n[$n]ret[$ret]";
- $ret;
-}
-
-sub readable {
- my($self,$n) = @_;
- $n =~ /^([\w\-\+\.]+)/;
-
- return $1 if defined $1 && length($1)>0;
- # if the first user reaches version v43, he will be treated as "+".
- # We'll have to decide about a new rule here then, depending on what
- # will be the prevailing versioning behavior then.
-
- if ($] < 5.006) { # or whenever v-strings were introduced
- # we get them wrong anyway, whatever we do, because 5.005 will
- # have already interpreted 0.2.4 to be "0.24". So even if he
- # indexer sends us something like "v0.2.4" we compare wrongly.
-
- # And if they say v1.2, then the old perl takes it as "v12"
-
- $CPAN::Frontend->mywarn("Suspicious version string seen [$n]");
- return $n;
- }
- my $better = sprintf "v%vd", $n;
- CPAN->debug("n[$n] better[$better]") if $CPAN::DEBUG;
- return $better;
-}
-
-package CPAN;
-
-1;
-
-__END__
-
-=head1 NAME
-
-CPAN - query, download and build perl modules from CPAN sites
-
-=head1 SYNOPSIS
-
-Interactive mode:
-
- perl -MCPAN -e shell;
-
-Batch mode:
-
- use CPAN;
-
- autobundle, clean, install, make, recompile, test
-
-=head1 DESCRIPTION
-
-The CPAN module is designed to automate the make and install of perl
-modules and extensions. It includes some searching capabilities and
-knows how to use Net::FTP or LWP (or lynx or an external ftp client)
-to fetch the raw data from the net.
-
-Modules are fetched from one or more of the mirrored CPAN
-(Comprehensive Perl Archive Network) sites and unpacked in a dedicated
-directory.
-
-The CPAN module also supports the concept of named and versioned
-I<bundles> of modules. Bundles simplify the handling of sets of
-related modules. See Bundles below.
-
-The package contains a session manager and a cache manager. There is
-no status retained between sessions. The session manager keeps track
-of what has been fetched, built and installed in the current
-session. The cache manager keeps track of the disk space occupied by
-the make processes and deletes excess space according to a simple FIFO
-mechanism.
-
-For extended searching capabilities there's a plugin for CPAN available,
-L<C<CPAN::WAIT>|CPAN::WAIT>. C<CPAN::WAIT> is a full-text search engine
-that indexes all documents available in CPAN authors directories. If
-C<CPAN::WAIT> is installed on your system, the interactive shell of
-CPAN.pm will enable the C<wq>, C<wr>, C<wd>, C<wl>, and C<wh> commands
-which send queries to the WAIT server that has been configured for your
-installation.
-
-All other methods provided are accessible in a programmer style and in an
-interactive shell style.
-
-=head2 Interactive Mode
-
-The interactive mode is entered by running
-
- perl -MCPAN -e shell
-
-which puts you into a readline interface. You will have the most fun if
-you install Term::ReadKey and Term::ReadLine to enjoy both history and
-command completion.
-
-Once you are on the command line, type 'h' and the rest should be
-self-explanatory.
-
-The function call C<shell> takes two optional arguments, one is the
-prompt, the second is the default initial command line (the latter
-only works if a real ReadLine interface module is installed).
-
-The most common uses of the interactive modes are
-
-=over 2
-
-=item Searching for authors, bundles, distribution files and modules
-
-There are corresponding one-letter commands C<a>, C<b>, C<d>, and C<m>
-for each of the four categories and another, C<i> for any of the
-mentioned four. Each of the four entities is implemented as a class
-with slightly differing methods for displaying an object.
-
-Arguments you pass to these commands are either strings exactly matching
-the identification string of an object or regular expressions that are
-then matched case-insensitively against various attributes of the
-objects. The parser recognizes a regular expression only if you
-enclose it between two slashes.
-
-The principle is that the number of found objects influences how an
-item is displayed. If the search finds one item, the result is
-displayed with the rather verbose method C<as_string>, but if we find
-more than one, we display each object with the terse method
-<as_glimpse>.
-
-=item make, test, install, clean modules or distributions
-
-These commands take any number of arguments and investigate what is
-necessary to perform the action. If the argument is a distribution
-file name (recognized by embedded slashes), it is processed. If it is
-a module, CPAN determines the distribution file in which this module
-is included and processes that, following any dependencies named in
-the module's Makefile.PL (this behavior is controlled by
-I<prerequisites_policy>.)
-
-Any C<make> or C<test> are run unconditionally. An
-
- install <distribution_file>
-
-also is run unconditionally. But for
-
- install <module>
-
-CPAN checks if an install is actually needed for it and prints
-I<module up to date> in the case that the distribution file containing
-the module doesn't need to be updated.
-
-CPAN also keeps track of what it has done within the current session
-and doesn't try to build a package a second time regardless if it
-succeeded or not. The C<force> command takes as a first argument the
-method to invoke (currently: C<make>, C<test>, or C<install>) and executes the
-command from scratch.
-
-Example:
-
- cpan> install OpenGL
- OpenGL is up to date.
- cpan> force install OpenGL
- Running make
- OpenGL-0.4/
- OpenGL-0.4/COPYRIGHT
- [...]
-
-A C<clean> command results in a
-
- make clean
-
-being executed within the distribution file's working directory.
-
-=item get, readme, look module or distribution
-
-C<get> downloads a distribution file without further action. C<readme>
-displays the README file of the associated distribution. C<Look> gets
-and untars (if not yet done) the distribution file, changes to the
-appropriate directory and opens a subshell process in that directory.
-
-=item ls author
-
-C<ls> lists all distribution files in and below an author's CPAN
-directory. Only those files that contain modules are listed and if
-there is more than one for any given module, only the most recent one
-is listed.
-
-=item Signals
-
-CPAN.pm installs signal handlers for SIGINT and SIGTERM. While you are
-in the cpan-shell it is intended that you can press C<^C> anytime and
-return to the cpan-shell prompt. A SIGTERM will cause the cpan-shell
-to clean up and leave the shell loop. You can emulate the effect of a
-SIGTERM by sending two consecutive SIGINTs, which usually means by
-pressing C<^C> twice.
-
-CPAN.pm ignores a SIGPIPE. If the user sets inactivity_timeout, a
-SIGALRM is used during the run of the C<perl Makefile.PL> subprocess.
-
-=back
-
-=head2 CPAN::Shell
-
-The commands that are available in the shell interface are methods in
-the package CPAN::Shell. If you enter the shell command, all your
-input is split by the Text::ParseWords::shellwords() routine which
-acts like most shells do. The first word is being interpreted as the
-method to be called and the rest of the words are treated as arguments
-to this method. Continuation lines are supported if a line ends with a
-literal backslash.
-
-=head2 autobundle
-
-C<autobundle> writes a bundle file into the
-C<$CPAN::Config-E<gt>{cpan_home}/Bundle> directory. The file contains
-a list of all modules that are both available from CPAN and currently
-installed within @INC. The name of the bundle file is based on the
-current date and a counter.
-
-=head2 recompile
-
-recompile() is a very special command in that it takes no argument and
-runs the make/test/install cycle with brute force over all installed
-dynamically loadable extensions (aka XS modules) with 'force' in
-effect. The primary purpose of this command is to finish a network
-installation. Imagine, you have a common source tree for two different
-architectures. You decide to do a completely independent fresh
-installation. You start on one architecture with the help of a Bundle
-file produced earlier. CPAN installs the whole Bundle for you, but
-when you try to repeat the job on the second architecture, CPAN
-responds with a C<"Foo up to date"> message for all modules. So you
-invoke CPAN's recompile on the second architecture and you're done.
-
-Another popular use for C<recompile> is to act as a rescue in case your
-perl breaks binary compatibility. If one of the modules that CPAN uses
-is in turn depending on binary compatibility (so you cannot run CPAN
-commands), then you should try the CPAN::Nox module for recovery.
-
-=head2 The four C<CPAN::*> Classes: Author, Bundle, Module, Distribution
-
-Although it may be considered internal, the class hierarchy does matter
-for both users and programmer. CPAN.pm deals with above mentioned four
-classes, and all those classes share a set of methods. A classical
-single polymorphism is in effect. A metaclass object registers all
-objects of all kinds and indexes them with a string. The strings
-referencing objects have a separated namespace (well, not completely
-separated):
-
- Namespace Class
-
- words containing a "/" (slash) Distribution
- words starting with Bundle:: Bundle
- everything else Module or Author
-
-Modules know their associated Distribution objects. They always refer
-to the most recent official release. Developers may mark their releases
-as unstable development versions (by inserting an underbar into the
-visible version number), so the really hottest and newest distribution
-file is not always the default. If a module Foo circulates on CPAN in
-both version 1.23 and 1.23_90, CPAN.pm offers a convenient way to
-install version 1.23 by saying
-
- install Foo
-
-This would install the complete distribution file (say
-BAR/Foo-1.23.tar.gz) with all accompanying material. But if you would
-like to install version 1.23_90, you need to know where the
-distribution file resides on CPAN relative to the authors/id/
-directory. If the author is BAR, this might be BAR/Foo-1.23_90.tar.gz;
-so you would have to say
-
- install BAR/Foo-1.23_90.tar.gz
-
-The first example will be driven by an object of the class
-CPAN::Module, the second by an object of class CPAN::Distribution.
-
-=head2 Programmer's interface
-
-If you do not enter the shell, the available shell commands are both
-available as methods (C<CPAN::Shell-E<gt>install(...)>) and as
-functions in the calling package (C<install(...)>).
-
-There's currently only one class that has a stable interface -
-CPAN::Shell. All commands that are available in the CPAN shell are
-methods of the class CPAN::Shell. Each of the commands that produce
-listings of modules (C<r>, C<autobundle>, C<u>) also return a list of
-the IDs of all modules within the list.
-
-=over 2
-
-=item expand($type,@things)
-
-The IDs of all objects available within a program are strings that can
-be expanded to the corresponding real objects with the
-C<CPAN::Shell-E<gt>expand("Module",@things)> method. Expand returns a
-list of CPAN::Module objects according to the C<@things> arguments
-given. In scalar context it only returns the first element of the
-list.
-
-=item expandany(@things)
-
-Like expand, but returns objects of the appropriate type, i.e.
-CPAN::Bundle objects for bundles, CPAN::Module objects for modules and
-CPAN::Distribution objects fro distributions.
-
-=item Programming Examples
-
-This enables the programmer to do operations that combine
-functionalities that are available in the shell.
-
- # install everything that is outdated on my disk:
- perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'
-
- # install my favorite programs if necessary:
- for $mod (qw(Net::FTP MD5 Data::Dumper)){
- my $obj = CPAN::Shell->expand('Module',$mod);
- $obj->install;
- }
-
- # list all modules on my disk that have no VERSION number
- for $mod (CPAN::Shell->expand("Module","/./")){
- next unless $mod->inst_file;
- # MakeMaker convention for undefined $VERSION:
- next unless $mod->inst_version eq "undef";
- print "No VERSION in ", $mod->id, "\n";
- }
-
- # find out which distribution on CPAN contains a module:
- print CPAN::Shell->expand("Module","Apache::Constants")->cpan_file
-
-Or if you want to write a cronjob to watch The CPAN, you could list
-all modules that need updating. First a quick and dirty way:
-
- perl -e 'use CPAN; CPAN::Shell->r;'
-
-If you don't want to get any output in the case that all modules are
-up to date, you can parse the output of above command for the regular
-expression //modules are up to date// and decide to mail the output
-only if it doesn't match. Ick?
-
-If you prefer to do it more in a programmer style in one single
-process, maybe something like this suits you better:
-
- # list all modules on my disk that have newer versions on CPAN
- for $mod (CPAN::Shell->expand("Module","/./")){
- next unless $mod->inst_file;
- next if $mod->uptodate;
- printf "Module %s is installed as %s, could be updated to %s from CPAN\n",
- $mod->id, $mod->inst_version, $mod->cpan_version;
- }
-
-If that gives you too much output every day, you maybe only want to
-watch for three modules. You can write
-
- for $mod (CPAN::Shell->expand("Module","/Apache|LWP|CGI/")){
-
-as the first line instead. Or you can combine some of the above
-tricks:
-
- # watch only for a new mod_perl module
- $mod = CPAN::Shell->expand("Module","mod_perl");
- exit if $mod->uptodate;
- # new mod_perl arrived, let me know all update recommendations
- CPAN::Shell->r;
-
-=back
-
-=head2 Methods in the other Classes
-
-The programming interface for the classes CPAN::Module,
-CPAN::Distribution, CPAN::Bundle, and CPAN::Author is still considered
-beta and partially even alpha. In the following paragraphs only those
-methods are documented that have proven useful over a longer time and
-thus are unlikely to change.
-
-=over
-
-=item CPAN::Author::as_glimpse()
-
-Returns a one-line description of the author
-
-=item CPAN::Author::as_string()
-
-Returns a multi-line description of the author
-
-=item CPAN::Author::email()
-
-Returns the author's email address
-
-=item CPAN::Author::fullname()
-
-Returns the author's name
-
-=item CPAN::Author::name()
-
-An alias for fullname
-
-=item CPAN::Bundle::as_glimpse()
-
-Returns a one-line description of the bundle
-
-=item CPAN::Bundle::as_string()
-
-Returns a multi-line description of the bundle
-
-=item CPAN::Bundle::clean()
-
-Recursively runs the C<clean> method on all items contained in the bundle.
-
-=item CPAN::Bundle::contains()
-
-Returns a list of objects' IDs contained in a bundle. The associated
-objects may be bundles, modules or distributions.
-
-=item CPAN::Bundle::force($method,@args)
-
-Forces CPAN to perform a task that normally would have failed. Force
-takes as arguments a method name to be called and any number of
-additional arguments that should be passed to the called method. The
-internals of the object get the needed changes so that CPAN.pm does
-not refuse to take the action. The C<force> is passed recursively to
-all contained objects.
-
-=item CPAN::Bundle::get()
-
-Recursively runs the C<get> method on all items contained in the bundle
-
-=item CPAN::Bundle::inst_file()
-
-Returns the highest installed version of the bundle in either @INC or
-C<$CPAN::Config->{cpan_home}>. Note that this is different from
-CPAN::Module::inst_file.
-
-=item CPAN::Bundle::inst_version()
-
-Like CPAN::Bundle::inst_file, but returns the $VERSION
-
-=item CPAN::Bundle::uptodate()
-
-Returns 1 if the bundle itself and all its members are uptodate.
-
-=item CPAN::Bundle::install()
-
-Recursively runs the C<install> method on all items contained in the bundle
-
-=item CPAN::Bundle::make()
-
-Recursively runs the C<make> method on all items contained in the bundle
-
-=item CPAN::Bundle::readme()
-
-Recursively runs the C<readme> method on all items contained in the bundle
-
-=item CPAN::Bundle::test()
-
-Recursively runs the C<test> method on all items contained in the bundle
-
-=item CPAN::Distribution::as_glimpse()
-
-Returns a one-line description of the distribution
-
-=item CPAN::Distribution::as_string()
-
-Returns a multi-line description of the distribution
-
-=item CPAN::Distribution::clean()
-
-Changes to the directory where the distribution has been unpacked and
-runs C<make clean> there.
-
-=item CPAN::Distribution::containsmods()
-
-Returns a list of IDs of modules contained in a distribution file.
-Only works for distributions listed in the 02packages.details.txt.gz
-file. This typically means that only the most recent version of a
-distribution is covered.
-
-=item CPAN::Distribution::cvs_import()
-
-Changes to the directory where the distribution has been unpacked and
-runs something like
-
- cvs -d $cvs_root import -m $cvs_log $cvs_dir $userid v$version
-
-there.
-
-=item CPAN::Distribution::dir()
-
-Returns the directory into which this distribution has been unpacked.
-
-=item CPAN::Distribution::force($method,@args)
-
-Forces CPAN to perform a task that normally would have failed. Force
-takes as arguments a method name to be called and any number of
-additional arguments that should be passed to the called method. The
-internals of the object get the needed changes so that CPAN.pm does
-not refuse to take the action.
-
-=item CPAN::Distribution::get()
-
-Downloads the distribution from CPAN and unpacks it. Does nothing if
-the distribution has already been downloaded and unpacked within the
-current session.
-
-=item CPAN::Distribution::install()
-
-Changes to the directory where the distribution has been unpacked and
-runs the external command C<make install> there. If C<make> has not
-yet been run, it will be run first. A C<make test> will be issued in
-any case and if this fails, the install will be cancelled. The
-cancellation can be avoided by letting C<force> run the C<install> for
-you.
-
-=item CPAN::Distribution::isa_perl()
-
-Returns 1 if this distribution file seems to be a perl distribution.
-Normally this is derived from the file name only, but the index from
-CPAN can contain a hint to achieve a return value of true for other
-filenames too.
-
-=item CPAN::Distribution::look()
-
-Changes to the directory where the distribution has been unpacked and
-opens a subshell there. Exiting the subshell returns.
-
-=item CPAN::Distribution::make()
-
-First runs the C<get> method to make sure the distribution is
-downloaded and unpacked. Changes to the directory where the
-distribution has been unpacked and runs the external commands C<perl
-Makefile.PL> and C<make> there.
-
-=item CPAN::Distribution::prereq_pm()
-
-Returns the hash reference that has been announced by a distribution
-as the PREREQ_PM hash in the Makefile.PL. Note: works only after an
-attempt has been made to C<make> the distribution. Returns undef
-otherwise.
-
-=item CPAN::Distribution::readme()
-
-Downloads the README file associated with a distribution and runs it
-through the pager specified in C<$CPAN::Config->{pager}>.
-
-=item CPAN::Distribution::test()
-
-Changes to the directory where the distribution has been unpacked and
-runs C<make test> there.
-
-=item CPAN::Distribution::uptodate()
-
-Returns 1 if all the modules contained in the distribution are
-uptodate. Relies on containsmods.
-
-=item CPAN::Index::force_reload()
-
-Forces a reload of all indices.
-
-=item CPAN::Index::reload()
-
-Reloads all indices if they have been read more than
-C<$CPAN::Config->{index_expire}> days.
-
-=item CPAN::InfoObj::dump()
-
-CPAN::Author, CPAN::Bundle, CPAN::Module, and CPAN::Distribution
-inherit this method. It prints the data structure associated with an
-object. Useful for debugging. Note: the data structure is considered
-internal and thus subject to change without notice.
-
-=item CPAN::Module::as_glimpse()
-
-Returns a one-line description of the module
-
-=item CPAN::Module::as_string()
-
-Returns a multi-line description of the module
-
-=item CPAN::Module::clean()
-
-Runs a clean on the distribution associated with this module.
-
-=item CPAN::Module::cpan_file()
-
-Returns the filename on CPAN that is associated with the module.
-
-=item CPAN::Module::cpan_version()
-
-Returns the latest version of this module available on CPAN.
-
-=item CPAN::Module::cvs_import()
-
-Runs a cvs_import on the distribution associated with this module.
-
-=item CPAN::Module::description()
-
-Returns a 44 chracter description of this module. Only available for
-modules listed in The Module List (CPAN/modules/00modlist.long.html
-or 00modlist.long.txt.gz)
-
-=item CPAN::Module::force($method,@args)
-
-Forces CPAN to perform a task that normally would have failed. Force
-takes as arguments a method name to be called and any number of
-additional arguments that should be passed to the called method. The
-internals of the object get the needed changes so that CPAN.pm does
-not refuse to take the action.
-
-=item CPAN::Module::get()
-
-Runs a get on the distribution associated with this module.
-
-=item CPAN::Module::inst_file()
-
-Returns the filename of the module found in @INC. The first file found
-is reported just like perl itself stops searching @INC when it finds a
-module.
-
-=item CPAN::Module::inst_version()
-
-Returns the version number of the module in readable format.
-
-=item CPAN::Module::install()
-
-Runs an C<install> on the distribution associated with this module.
-
-=item CPAN::Module::look()
-
-Changes to the directory where the distribution assoicated with this
-module has been unpacked and opens a subshell there. Exiting the
-subshell returns.
-
-=item CPAN::Module::make()
-
-Runs a C<make> on the distribution associated with this module.
-
-=item CPAN::Module::manpage_headline()
-
-If module is installed, peeks into the module's manpage, reads the
-headline and returns it. Moreover, if the module has been downloaded
-within this session, does the equivalent on the downloaded module even
-if it is not installed.
-
-=item CPAN::Module::readme()
-
-Runs a C<readme> on the distribution associated with this module.
-
-=item CPAN::Module::test()
-
-Runs a C<test> on the distribution associated with this module.
-
-=item CPAN::Module::uptodate()
-
-Returns 1 if the module is installed and up-to-date.
-
-=item CPAN::Module::userid()
-
-Returns the author's ID of the module.
-
-=back
-
-=head2 Cache Manager
-
-Currently the cache manager only keeps track of the build directory
-($CPAN::Config->{build_dir}). It is a simple FIFO mechanism that
-deletes complete directories below C<build_dir> as soon as the size of
-all directories there gets bigger than $CPAN::Config->{build_cache}
-(in MB). The contents of this cache may be used for later
-re-installations that you intend to do manually, but will never be
-trusted by CPAN itself. This is due to the fact that the user might
-use these directories for building modules on different architectures.
-
-There is another directory ($CPAN::Config->{keep_source_where}) where
-the original distribution files are kept. This directory is not
-covered by the cache manager and must be controlled by the user. If
-you choose to have the same directory as build_dir and as
-keep_source_where directory, then your sources will be deleted with
-the same fifo mechanism.
-
-=head2 Bundles
-
-A bundle is just a perl module in the namespace Bundle:: that does not
-define any functions or methods. It usually only contains documentation.
-
-It starts like a perl module with a package declaration and a $VERSION
-variable. After that the pod section looks like any other pod with the
-only difference being that I<one special pod section> exists starting with
-(verbatim):
-
- =head1 CONTENTS
-
-In this pod section each line obeys the format
-
- Module_Name [Version_String] [- optional text]
-
-The only required part is the first field, the name of a module
-(e.g. Foo::Bar, ie. I<not> the name of the distribution file). The rest
-of the line is optional. The comment part is delimited by a dash just
-as in the man page header.
-
-The distribution of a bundle should follow the same convention as
-other distributions.
-
-Bundles are treated specially in the CPAN package. If you say 'install
-Bundle::Tkkit' (assuming such a bundle exists), CPAN will install all
-the modules in the CONTENTS section of the pod. You can install your
-own Bundles locally by placing a conformant Bundle file somewhere into
-your @INC path. The autobundle() command which is available in the
-shell interface does that for you by including all currently installed
-modules in a snapshot bundle file.
-
-=head2 Prerequisites
-
-If you have a local mirror of CPAN and can access all files with
-"file:" URLs, then you only need a perl better than perl5.003 to run
-this module. Otherwise Net::FTP is strongly recommended. LWP may be
-required for non-UNIX systems or if your nearest CPAN site is
-associated with an URL that is not C<ftp:>.
-
-If you have neither Net::FTP nor LWP, there is a fallback mechanism
-implemented for an external ftp command or for an external lynx
-command.
-
-=head2 Finding packages and VERSION
-
-This module presumes that all packages on CPAN
-
-=over 2
-
-=item *
-
-declare their $VERSION variable in an easy to parse manner. This
-prerequisite can hardly be relaxed because it consumes far too much
-memory to load all packages into the running program just to determine
-the $VERSION variable. Currently all programs that are dealing with
-version use something like this
-
- perl -MExtUtils::MakeMaker -le \
- 'print MM->parse_version(shift)' filename
-
-If you are author of a package and wonder if your $VERSION can be
-parsed, please try the above method.
-
-=item *
-
-come as compressed or gzipped tarfiles or as zip files and contain a
-Makefile.PL (well, we try to handle a bit more, but without much
-enthusiasm).
-
-=back
-
-=head2 Debugging
-
-The debugging of this module is a bit complex, because we have
-interferences of the software producing the indices on CPAN, of the
-mirroring process on CPAN, of packaging, of configuration, of
-synchronicity, and of bugs within CPAN.pm.
-
-For code debugging in interactive mode you can try "o debug" which
-will list options for debugging the various parts of the code. You
-should know that "o debug" has built-in completion support.
-
-For data debugging there is the C<dump> command which takes the same
-arguments as make/test/install and outputs the object's Data::Dumper
-dump.
-
-=head2 Floppy, Zip, Offline Mode
-
-CPAN.pm works nicely without network too. If you maintain machines
-that are not networked at all, you should consider working with file:
-URLs. Of course, you have to collect your modules somewhere first. So
-you might use CPAN.pm to put together all you need on a networked
-machine. Then copy the $CPAN::Config->{keep_source_where} (but not
-$CPAN::Config->{build_dir}) directory on a floppy. This floppy is kind
-of a personal CPAN. CPAN.pm on the non-networked machines works nicely
-with this floppy. See also below the paragraph about CD-ROM support.
-
-=head1 CONFIGURATION
-
-When the CPAN module is installed, a site wide configuration file is
-created as CPAN/Config.pm. The default values defined there can be
-overridden in another configuration file: CPAN/MyConfig.pm. You can
-store this file in $HOME/.cpan/CPAN/MyConfig.pm if you want, because
-$HOME/.cpan is added to the search path of the CPAN module before the
-use() or require() statements.
-
-Currently the following keys in the hash reference $CPAN::Config are
-defined:
-
- build_cache size of cache for directories to build modules
- build_dir locally accessible directory to build modules
- index_expire after this many days refetch index files
- cache_metadata use serializer to cache metadata
- cpan_home local directory reserved for this package
- dontload_hash anonymous hash: modules in the keys will not be
- loaded by the CPAN::has_inst() routine
- gzip location of external program gzip
- inactivity_timeout breaks interactive Makefile.PLs after this
- many seconds inactivity. Set to 0 to never break.
- inhibit_startup_message
- if true, does not print the startup message
- keep_source_where directory in which to keep the source (if we do)
- make location of external make program
- make_arg arguments that should always be passed to 'make'
- make_install_arg same as make_arg for 'make install'
- makepl_arg arguments passed to 'perl Makefile.PL'
- pager location of external program more (or any pager)
- prerequisites_policy
- what to do if you are missing module prerequisites
- ('follow' automatically, 'ask' me, or 'ignore')
- proxy_user username for accessing an authenticating proxy
- proxy_pass password for accessing an authenticating proxy
- scan_cache controls scanning of cache ('atstart' or 'never')
- tar location of external program tar
- term_is_latin if true internal UTF-8 is translated to ISO-8859-1
- (and nonsense for characters outside latin range)
- unzip location of external program unzip
- urllist arrayref to nearby CPAN sites (or equivalent locations)
- wait_list arrayref to a wait server to try (See CPAN::WAIT)
- ftp_proxy, } the three usual variables for configuring
- http_proxy, } proxy requests. Both as CPAN::Config variables
- no_proxy } and as environment variables configurable.
-
-You can set and query each of these options interactively in the cpan
-shell with the command set defined within the C<o conf> command:
-
-=over 2
-
-=item C<o conf E<lt>scalar optionE<gt>>
-
-prints the current value of the I<scalar option>
-
-=item C<o conf E<lt>scalar optionE<gt> E<lt>valueE<gt>>
-
-Sets the value of the I<scalar option> to I<value>
-
-=item C<o conf E<lt>list optionE<gt>>
-
-prints the current value of the I<list option> in MakeMaker's
-neatvalue format.
-
-=item C<o conf E<lt>list optionE<gt> [shift|pop]>
-
-shifts or pops the array in the I<list option> variable
-
-=item C<o conf E<lt>list optionE<gt> [unshift|push|splice] E<lt>listE<gt>>
-
-works like the corresponding perl commands.
-
-=back
-
-=head2 Note on urllist parameter's format
-
-urllist parameters are URLs according to RFC 1738. We do a little
-guessing if your URL is not compliant, but if you have problems with
-file URLs, please try the correct format. Either:
-
- file://localhost/whatever/ftp/pub/CPAN/
-
-or
-
- file:///home/ftp/pub/CPAN/
-
-=head2 urllist parameter has CD-ROM support
-
-The C<urllist> parameter of the configuration table contains a list of
-URLs that are to be used for downloading. If the list contains any
-C<file> URLs, CPAN always tries to get files from there first. This
-feature is disabled for index files. So the recommendation for the
-owner of a CD-ROM with CPAN contents is: include your local, possibly
-outdated CD-ROM as a C<file> URL at the end of urllist, e.g.
-
- o conf urllist push file://localhost/CDROM/CPAN
-
-CPAN.pm will then fetch the index files from one of the CPAN sites
-that come at the beginning of urllist. It will later check for each
-module if there is a local copy of the most recent version.
-
-Another peculiarity of urllist is that the site that we could
-successfully fetch the last file from automatically gets a preference
-token and is tried as the first site for the next request. So if you
-add a new site at runtime it may happen that the previously preferred
-site will be tried another time. This means that if you want to disallow
-a site for the next transfer, it must be explicitly removed from
-urllist.
-
-=head1 SECURITY
-
-There's no strong security layer in CPAN.pm. CPAN.pm helps you to
-install foreign, unmasked, unsigned code on your machine. We compare
-to a checksum that comes from the net just as the distribution file
-itself. If somebody has managed to tamper with the distribution file,
-they may have as well tampered with the CHECKSUMS file. Future
-development will go towards strong authentication.
-
-=head1 EXPORT
-
-Most functions in package CPAN are exported per default. The reason
-for this is that the primary use is intended for the cpan shell or for
-oneliners.
-
-=head1 POPULATE AN INSTALLATION WITH LOTS OF MODULES
-
-Populating a freshly installed perl with my favorite modules is pretty
-easy if you maintain a private bundle definition file. To get a useful
-blueprint of a bundle definition file, the command autobundle can be used
-on the CPAN shell command line. This command writes a bundle definition
-file for all modules that are installed for the currently running perl
-interpreter. It's recommended to run this command only once and from then
-on maintain the file manually under a private name, say
-Bundle/my_bundle.pm. With a clever bundle file you can then simply say
-
- cpan> install Bundle::my_bundle
-
-then answer a few questions and then go out for a coffee.
-
-Maintaining a bundle definition file means keeping track of two
-things: dependencies and interactivity. CPAN.pm sometimes fails on
-calculating dependencies because not all modules define all MakeMaker
-attributes correctly, so a bundle definition file should specify
-prerequisites as early as possible. On the other hand, it's a bit
-annoying that many distributions need some interactive configuring. So
-what I try to accomplish in my private bundle file is to have the
-packages that need to be configured early in the file and the gentle
-ones later, so I can go out after a few minutes and leave CPAN.pm
-untended.
-
-=head1 WORKING WITH CPAN.pm BEHIND FIREWALLS
-
-Thanks to Graham Barr for contributing the following paragraphs about
-the interaction between perl, and various firewall configurations. For
-further informations on firewalls, it is recommended to consult the
-documentation that comes with the ncftp program. If you are unable to
-go through the firewall with a simple Perl setup, it is very likely
-that you can configure ncftp so that it works for your firewall.
-
-=head2 Three basic types of firewalls
-
-Firewalls can be categorized into three basic types.
-
-=over
-
-=item http firewall
-
-This is where the firewall machine runs a web server and to access the
-outside world you must do it via the web server. If you set environment
-variables like http_proxy or ftp_proxy to a values beginning with http://
-or in your web browser you have to set proxy information then you know
-you are running a http firewall.
-
-To access servers outside these types of firewalls with perl (even for
-ftp) you will need to use LWP.
-
-=item ftp firewall
-
-This where the firewall machine runs a ftp server. This kind of
-firewall will only let you access ftp servers outside the firewall.
-This is usually done by connecting to the firewall with ftp, then
-entering a username like "user@outside.host.com"
-
-To access servers outside these type of firewalls with perl you
-will need to use Net::FTP.
-
-=item One way visibility
-
-I say one way visibility as these firewalls try to make themselve look
-invisible to the users inside the firewall. An FTP data connection is
-normally created by sending the remote server your IP address and then
-listening for the connection. But the remote server will not be able to
-connect to you because of the firewall. So for these types of firewall
-FTP connections need to be done in a passive mode.
-
-There are two that I can think off.
-
-=over
-
-=item SOCKS
-
-If you are using a SOCKS firewall you will need to compile perl and link
-it with the SOCKS library, this is what is normally called a 'socksified'
-perl. With this executable you will be able to connect to servers outside
-the firewall as if it is not there.
-
-=item IP Masquerade
-
-This is the firewall implemented in the Linux kernel, it allows you to
-hide a complete network behind one IP address. With this firewall no
-special compiling is needed as you can access hosts directly.
-
-=back
-
-=back
-
-=head2 Configuring lynx or ncftp for going through a firewall
-
-If you can go through your firewall with e.g. lynx, presumably with a
-command such as
-
- /usr/local/bin/lynx -pscott:tiger
-
-then you would configure CPAN.pm with the command
-
- o conf lynx "/usr/local/bin/lynx -pscott:tiger"
-
-That's all. Similarly for ncftp or ftp, you would configure something
-like
-
- o conf ncftp "/usr/bin/ncftp -f /home/scott/ncftplogin.cfg"
-
-Your milage may vary...
-
-=head1 FAQ
-
-=over
-
-=item 1)
-
-I installed a new version of module X but CPAN keeps saying,
-I have the old version installed
-
-Most probably you B<do> have the old version installed. This can
-happen if a module installs itself into a different directory in the
-@INC path than it was previously installed. This is not really a
-CPAN.pm problem, you would have the same problem when installing the
-module manually. The easiest way to prevent this behaviour is to add
-the argument C<UNINST=1> to the C<make install> call, and that is why
-many people add this argument permanently by configuring
-
- o conf make_install_arg UNINST=1
-
-=item 2)
-
-So why is UNINST=1 not the default?
-
-Because there are people who have their precise expectations about who
-may install where in the @INC path and who uses which @INC array. In
-fine tuned environments C<UNINST=1> can cause damage.
-
-=item 3)
-
-I want to clean up my mess, and install a new perl along with
-all modules I have. How do I go about it?
-
-Run the autobundle command for your old perl and optionally rename the
-resulting bundle file (e.g. Bundle/mybundle.pm), install the new perl
-with the Configure option prefix, e.g.
-
- ./Configure -Dprefix=/usr/local/perl-5.6.78.9
-
-Install the bundle file you produced in the first step with something like
-
- cpan> install Bundle::mybundle
-
-and you're done.
-
-=item 4)
-
-When I install bundles or multiple modules with one command
-there is too much output to keep track of.
-
-You may want to configure something like
-
- o conf make_arg "| tee -ai /root/.cpan/logs/make.out"
- o conf make_install_arg "| tee -ai /root/.cpan/logs/make_install.out"
-
-so that STDOUT is captured in a file for later inspection.
-
-
-=item 5)
-
-I am not root, how can I install a module in a personal directory?
-
-You will most probably like something like this:
-
- o conf makepl_arg "LIB=~/myperl/lib \
- INSTALLMAN1DIR=~/myperl/man/man1 \
- INSTALLMAN3DIR=~/myperl/man/man3"
- install Sybase::Sybperl
-
-You can make this setting permanent like all C<o conf> settings with
-C<o conf commit>.
-
-You will have to add ~/myperl/man to the MANPATH environment variable
-and also tell your perl programs to look into ~/myperl/lib, e.g. by
-including
-
- use lib "$ENV{HOME}/myperl/lib";
-
-or setting the PERL5LIB environment variable.
-
-Another thing you should bear in mind is that the UNINST parameter
-should never be set if you are not root.
-
-=item 6)
-
-How to get a package, unwrap it, and make a change before building it?
-
- look Sybase::Sybperl
-
-=item 7)
-
-I installed a Bundle and had a couple of fails. When I
-retried, everything resolved nicely. Can this be fixed to work
-on first try?
-
-The reason for this is that CPAN does not know the dependencies of all
-modules when it starts out. To decide about the additional items to
-install, it just uses data found in the generated Makefile. An
-undetected missing piece breaks the process. But it may well be that
-your Bundle installs some prerequisite later than some depending item
-and thus your second try is able to resolve everything. Please note,
-CPAN.pm does not know the dependency tree in advance and cannot sort
-the queue of things to install in a topologically correct order. It
-resolves perfectly well IFF all modules declare the prerequisites
-correctly with the PREREQ_PM attribute to MakeMaker. For bundles which
-fail and you need to install often, it is recommended sort the Bundle
-definition file manually. It is planned to improve the metadata
-situation for dependencies on CPAN in general, but this will still
-take some time.
-
-=item 8)
-
-In our intranet we have many modules for internal use. How
-can I integrate these modules with CPAN.pm but without uploading
-the modules to CPAN?
-
-Have a look at the CPAN::Site module.
-
-=item 9)
-
-When I run CPAN's shell, I get error msg about line 1 to 4,
-setting meta input/output via the /etc/inputrc file.
-
-Some versions of readline are picky about capitalization in the
-/etc/inputrc file and specifically RedHat 6.2 comes with a
-/etc/inputrc that contains the word C<on> in lowercase. Change the
-occurrences of C<on> to C<On> and the bug should disappear.
-
-=item 10)
-
-Some authors have strange characters in their names.
-
-Internally CPAN.pm uses the UTF-8 charset. If your terminal is
-expecting ISO-8859-1 charset, a converter can be activated by setting
-term_is_latin to a true value in your config file. One way of doing so
-would be
-
- cpan> ! $CPAN::Config->{term_is_latin}=1
-
-Extended support for converters will be made available as soon as perl
-becomes stable with regard to charset issues.
-
-=back
-
-=head1 BUGS
-
-We should give coverage for B<all> of the CPAN and not just the PAUSE
-part, right? In this discussion CPAN and PAUSE have become equal --
-but they are not. PAUSE is authors/, modules/ and scripts/. CPAN is
-PAUSE plus the clpa/, doc/, misc/, ports/, and src/.
-
-Future development should be directed towards a better integration of
-the other parts.
-
-If a Makefile.PL requires special customization of libraries, prompts
-the user for special input, etc. then you may find CPAN is not able to
-build the distribution. In that case, you should attempt the
-traditional method of building a Perl module package from a shell.
-
-=head1 AUTHOR
-
-Andreas Koenig E<lt>andreas.koenig@anima.deE<gt>
-
-=head1 TRANSLATIONS
-
-Kawai,Takanori provides a Japanese translation of this manpage at
-http://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm
-
-=head1 SEE ALSO
-
-perl(1), CPAN::Nox(3)
-
-=cut
-
diff --git a/contrib/perl5/lib/CPAN/FirstTime.pm b/contrib/perl5/lib/CPAN/FirstTime.pm
deleted file mode 100644
index 0429db1..0000000
--- a/contrib/perl5/lib/CPAN/FirstTime.pm
+++ /dev/null
@@ -1,671 +0,0 @@
-# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*-
-package CPAN::Mirrored::By;
-
-sub new {
- my($self,@arg) = @_;
- bless [@arg], $self;
-}
-sub continent { shift->[0] }
-sub country { shift->[1] }
-sub url { shift->[2] }
-
-package CPAN::FirstTime;
-
-use strict;
-use ExtUtils::MakeMaker qw(prompt);
-use FileHandle ();
-use File::Basename ();
-use File::Path ();
-use vars qw($VERSION);
-$VERSION = substr q$Revision: 1.53 $, 10;
-
-=head1 NAME
-
-CPAN::FirstTime - Utility for CPAN::Config file Initialization
-
-=head1 SYNOPSIS
-
-CPAN::FirstTime::init()
-
-=head1 DESCRIPTION
-
-The init routine asks a few questions and writes a CPAN::Config
-file. Nothing special.
-
-=cut
-
-
-sub init {
- my($configpm) = @_;
- use Config;
- unless ($CPAN::VERSION) {
- require CPAN::Nox;
- }
- eval {require CPAN::Config;};
- $CPAN::Config ||= {};
- local($/) = "\n";
- local($\) = "";
- local($|) = 1;
-
- my($ans,$default,$local,$cont,$url,$expected_size);
-
- #
- # Files, directories
- #
-
- print qq[
-
-CPAN is the world-wide archive of perl resources. It consists of about
-100 sites that all replicate the same contents all around the globe.
-Many countries have at least one CPAN site already. The resources
-found on CPAN are easily accessible with the CPAN.pm module. If you
-want to use CPAN.pm, you have to configure it properly.
-
-If you do not want to enter a dialog now, you can answer 'no' to this
-question and I\'ll try to autoconfigure. (Note: you can revisit this
-dialog anytime later by typing 'o conf init' at the cpan prompt.)
-
-];
-
- my $manual_conf =
- ExtUtils::MakeMaker::prompt("Are you ready for manual configuration?",
- "yes");
- my $fastread;
- {
- local $^W;
- if ($manual_conf =~ /^\s*y/i) {
- $fastread = 0;
- *prompt = \&ExtUtils::MakeMaker::prompt;
- } else {
- $fastread = 1;
- $CPAN::Config->{urllist} ||= [];
- # prototype should match that of &MakeMaker::prompt
- *prompt = sub ($;$) {
- my($q,$a) = @_;
- my($ret) = defined $a ? $a : "";
- printf qq{%s [%s]\n\n}, $q, $ret;
- $ret;
- };
- }
- }
- print qq{
-
-The following questions are intended to help you with the
-configuration. The CPAN module needs a directory of its own to cache
-important index files and maybe keep a temporary mirror of CPAN files.
-This may be a site-wide directory or a personal directory.
-
-};
-
- my $cpan_home = $CPAN::Config->{cpan_home} || MM->catdir($ENV{HOME}, ".cpan");
- if (-d $cpan_home) {
- print qq{
-
-I see you already have a directory
- $cpan_home
-Shall we use it as the general CPAN build and cache directory?
-
-};
- } else {
- print qq{
-
-First of all, I\'d like to create this directory. Where?
-
-};
- }
-
- $default = $cpan_home;
- while ($ans = prompt("CPAN build and cache directory?",$default)) {
- eval { File::Path::mkpath($ans); }; # dies if it can't
- if ($@) {
- warn "Couldn't create directory $ans.
-Please retry.\n";
- next;
- }
- if (-d $ans && -w _) {
- last;
- } else {
- warn "Couldn't find directory $ans
- or directory is not writable. Please retry.\n";
- }
- }
- $CPAN::Config->{cpan_home} = $ans;
-
- print qq{
-
-If you want, I can keep the source files after a build in the cpan
-home directory. If you choose so then future builds will take the
-files from there. If you don\'t want to keep them, answer 0 to the
-next question.
-
-};
-
- $CPAN::Config->{keep_source_where} = MM->catdir($CPAN::Config->{cpan_home},"sources");
- $CPAN::Config->{build_dir} = MM->catdir($CPAN::Config->{cpan_home},"build");
-
- #
- # Cache size, Index expire
- #
-
- print qq{
-
-How big should the disk cache be for keeping the build directories
-with all the intermediate files\?
-
-};
-
- $default = $CPAN::Config->{build_cache} || 10;
- $ans = prompt("Cache size for build directory (in MB)?", $default);
- $CPAN::Config->{build_cache} = $ans;
-
- # XXX This the time when we refetch the index files (in days)
- $CPAN::Config->{'index_expire'} = 1;
-
- print qq{
-
-By default, each time the CPAN module is started, cache scanning
-is performed to keep the cache size in sync. To prevent from this,
-disable the cache scanning with 'never'.
-
-};
-
- $default = $CPAN::Config->{scan_cache} || 'atstart';
- do {
- $ans = prompt("Perform cache scanning (atstart or never)?", $default);
- } while ($ans ne 'atstart' && $ans ne 'never');
- $CPAN::Config->{scan_cache} = $ans;
-
- #
- # cache_metadata
- #
- print qq{
-
-To considerably speed up the initial CPAN shell startup, it is
-possible to use Storable to create a cache of metadata. If Storable
-is not available, the normal index mechanism will be used.
-
-};
-
- defined($default = $CPAN::Config->{cache_metadata}) or $default = 1;
- do {
- $ans = prompt("Cache metadata (yes/no)?", ($default ? 'yes' : 'no'));
- } while ($ans !~ /^\s*[yn]/i);
- $CPAN::Config->{cache_metadata} = ($ans =~ /^\s*y/i ? 1 : 0);
-
- #
- # term_is_latin
- #
- print qq{
-
-The next option deals with the charset your terminal supports. In
-general CPAN is English speaking territory, thus the charset does not
-matter much, but some of the aliens out there who upload their
-software to CPAN bear names that are outside the ASCII range. If your
-terminal supports UTF-8, you say no to the next question, if it
-supports ISO-8859-1 (also known as LATIN1) then you say yes, and if it
-supports neither nor, your answer does not matter, you will not be
-able to read the names of some authors anyway. If you answer no, names
-will be output in UTF-8.
-
-};
-
- defined($default = $CPAN::Config->{term_is_latin}) or $default = 1;
- do {
- $ans = prompt("Your terminal expects ISO-8859-1 (yes/no)?",
- ($default ? 'yes' : 'no'));
- } while ($ans !~ /^\s*[yn]/i);
- $CPAN::Config->{term_is_latin} = ($ans =~ /^\s*y/i ? 1 : 0);
-
- #
- # prerequisites_policy
- # Do we follow PREREQ_PM?
- #
- print qq{
-
-The CPAN module can detect when a module that which you are trying to
-build depends on prerequisites. If this happens, it can build the
-prerequisites for you automatically ('follow'), ask you for
-confirmation ('ask'), or just ignore them ('ignore'). Please set your
-policy to one of the three values.
-
-};
-
- $default = $CPAN::Config->{prerequisites_policy} || 'ask';
- do {
- $ans =
- prompt("Policy on building prerequisites (follow, ask or ignore)?",
- $default);
- } while ($ans ne 'follow' && $ans ne 'ask' && $ans ne 'ignore');
- $CPAN::Config->{prerequisites_policy} = $ans;
-
- #
- # External programs
- #
-
- print qq{
-
-The CPAN module will need a few external programs to work properly.
-Please correct me, if I guess the wrong path for a program. Don\'t
-panic if you do not have some of them, just press ENTER for those. To
-disable the use of a download program, you can type a space followed
-by ENTER.
-
-};
-
- my $old_warn = $^W;
- local $^W if $^O eq 'MacOS';
- my(@path) = split /$Config{'path_sep'}/, $ENV{'PATH'};
- local $^W = $old_warn;
- my $progname;
- for $progname (qw/gzip tar unzip make lynx wget ncftpget ncftp ftp/){
- if ($^O eq 'MacOS') {
- $CPAN::Config->{$progname} = 'not_here';
- next;
- }
- my $progcall = $progname;
- # we don't need ncftp if we have ncftpget
- next if $progname eq "ncftp" && $CPAN::Config->{ncftpget} gt " ";
- my $path = $CPAN::Config->{$progname}
- || $Config::Config{$progname}
- || "";
- if (MM->file_name_is_absolute($path)) {
- # testing existence is not good enough, some have these exe
- # extensions
-
- # warn "Warning: configured $path does not exist\n" unless -e $path;
- # $path = "";
- } else {
- $path = '';
- }
- unless ($path) {
- # e.g. make -> nmake
- $progcall = $Config::Config{$progname} if $Config::Config{$progname};
- }
-
- $path ||= find_exe($progcall,[@path]);
- warn "Warning: $progcall not found in PATH\n" unless
- $path; # not -e $path, because find_exe already checked that
- $ans = prompt("Where is your $progname program?",$path) || $path;
- $CPAN::Config->{$progname} = $ans;
- }
- my $path = $CPAN::Config->{'pager'} ||
- $ENV{PAGER} || find_exe("less",[@path]) ||
- find_exe("more",[@path]) || ($^O eq 'MacOS' ? $ENV{EDITOR} : 0 )
- || "more";
- $ans = prompt("What is your favorite pager program?",$path);
- $CPAN::Config->{'pager'} = $ans;
- $path = $CPAN::Config->{'shell'};
- if (MM->file_name_is_absolute($path)) {
- warn "Warning: configured $path does not exist\n" unless -e $path;
- $path = "";
- }
- $path ||= $ENV{SHELL};
- if ($^O eq 'MacOS') {
- $CPAN::Config->{'shell'} = 'not_here';
- } else {
- $path =~ s,\\,/,g if $^O eq 'os2'; # Cosmetic only
- $ans = prompt("What is your favorite shell?",$path);
- $CPAN::Config->{'shell'} = $ans;
- }
-
- #
- # Arguments to make etc.
- #
-
- print qq{
-
-Every Makefile.PL is run by perl in a separate process. Likewise we
-run \'make\' and \'make install\' in processes. If you have any
-parameters \(e.g. PREFIX, LIB, UNINST or the like\) you want to pass
-to the calls, please specify them here.
-
-If you don\'t understand this question, just press ENTER.
-
-};
-
- $default = $CPAN::Config->{makepl_arg} || "";
- $CPAN::Config->{makepl_arg} =
- prompt("Parameters for the 'perl Makefile.PL' command?
-Typical frequently used settings:
-
- POLLUTE=1 increasing backwards compatibility
- LIB=~/perl non-root users (please see manual for more hints)
-
-Your choice: ",$default);
- $default = $CPAN::Config->{make_arg} || "";
- $CPAN::Config->{make_arg} = prompt("Parameters for the 'make' command?
-Typical frequently used setting:
-
- -j3 dual processor system
-
-Your choice: ",$default);
-
- $default = $CPAN::Config->{make_install_arg} || $CPAN::Config->{make_arg} || "";
- $CPAN::Config->{make_install_arg} =
- prompt("Parameters for the 'make install' command?
-Typical frequently used setting:
-
- UNINST=1 to always uninstall potentially conflicting files
-
-Your choice: ",$default);
-
- #
- # Alarm period
- #
-
- print qq{
-
-Sometimes you may wish to leave the processes run by CPAN alone
-without caring about them. As sometimes the Makefile.PL contains
-question you\'re expected to answer, you can set a timer that will
-kill a 'perl Makefile.PL' process after the specified time in seconds.
-
-If you set this value to 0, these processes will wait forever. This is
-the default and recommended setting.
-
-};
-
- $default = $CPAN::Config->{inactivity_timeout} || 0;
- $CPAN::Config->{inactivity_timeout} =
- prompt("Timeout for inactivity during Makefile.PL?",$default);
-
- # Proxies
-
- print qq{
-
-If you\'re accessing the net via proxies, you can specify them in the
-CPAN configuration or via environment variables. The variable in
-the \$CPAN::Config takes precedence.
-
-};
-
- for (qw/ftp_proxy http_proxy no_proxy/) {
- $default = $CPAN::Config->{$_} || $ENV{$_};
- $CPAN::Config->{$_} = prompt("Your $_?",$default);
- }
-
- if ($CPAN::Config->{ftp_proxy} ||
- $CPAN::Config->{http_proxy}) {
- $default = $CPAN::Config->{proxy_user} || $CPAN::LWP::UserAgent::USER;
- print qq{
-
-If your proxy is an authenticating proxy, you can store your username
-permanently. If you do not want that, just press RETURN. You will then
-be asked for your username in every future session.
-
-};
- if ($CPAN::Config->{proxy_user} = prompt("Your proxy user id?",$default)) {
- print qq{
-
-Your password for the authenticating proxy can also be stored
-permanently on disk. If this violates your security policy, just press
-RETURN. You will then be asked for the password in every future
-session.
-
-};
-
- if ($CPAN::META->has_inst("Term::ReadKey")) {
- Term::ReadKey::ReadMode("noecho");
- } else {
- print qq{
-
-Warning: Term::ReadKey seems not to be available, your password will
-be echoed to the terminal!
-
-};
- }
- $CPAN::Config->{proxy_pass} = prompt("Your proxy password?");
- if ($CPAN::META->has_inst("Term::ReadKey")) {
- Term::ReadKey::ReadMode("restore");
- }
- $CPAN::Frontend->myprint("\n\n");
- }
- }
-
- #
- # MIRRORED.BY
- #
-
- conf_sites() unless $fastread;
-
- unless (@{$CPAN::Config->{'wait_list'}||[]}) {
- print qq{
-
-WAIT support is available as a Plugin. You need the CPAN::WAIT module
-to actually use it. But we need to know your favorite WAIT server. If
-you don\'t know a WAIT server near you, just press ENTER.
-
-};
- $default = "wait://ls6.informatik.uni-dortmund.de:1404";
- $ans = prompt("Your favorite WAIT server?\n ",$default);
- push @{$CPAN::Config->{'wait_list'}}, $ans;
- }
-
- # We don't ask that now, it will be noticed in time, won't it?
- $CPAN::Config->{'inhibit_startup_message'} = 0;
- $CPAN::Config->{'getcwd'} = 'cwd';
-
- print "\n\n";
- CPAN::Config->commit($configpm);
-}
-
-sub conf_sites {
- my $m = 'MIRRORED.BY';
- my $mby = MM->catfile($CPAN::Config->{keep_source_where},$m);
- File::Path::mkpath(File::Basename::dirname($mby));
- if (-f $mby && -f $m && -M $m < -M $mby) {
- require File::Copy;
- File::Copy::copy($m,$mby) or die "Could not update $mby: $!";
- }
- my $loopcount = 0;
- local $^T = time;
- my $overwrite_local = 0;
- if ($mby && -f $mby && -M _ <= 60 && -s _ > 0) {
- my $mtime = localtime((stat _)[9]);
- my $prompt = qq{Found $mby as of $mtime
-
-I\'d use that as a database of CPAN sites. If that is OK for you,
-please answer 'y', but if you want me to get a new database now,
-please answer 'n' to the following question.
-
-Shall I use the local database in $mby?};
- my $ans = prompt($prompt,"y");
- $overwrite_local = 1 unless $ans =~ /^y/i;
- }
- while ($mby) {
- if ($overwrite_local) {
- print qq{Trying to overwrite $mby
-};
- $mby = CPAN::FTP->localize($m,$mby,3);
- $overwrite_local = 0;
- } elsif ( ! -f $mby ){
- print qq{You have no $mby
- I\'m trying to fetch one
-};
- $mby = CPAN::FTP->localize($m,$mby,3);
- } elsif (-M $mby > 60 && $loopcount == 0) {
- print qq{Your $mby is older than 60 days,
- I\'m trying to fetch one
-};
- $mby = CPAN::FTP->localize($m,$mby,3);
- $loopcount++;
- } elsif (-s $mby == 0) {
- print qq{You have an empty $mby,
- I\'m trying to fetch one
-};
- $mby = CPAN::FTP->localize($m,$mby,3);
- } else {
- last;
- }
- }
- read_mirrored_by($mby);
- bring_your_own();
-}
-
-sub find_exe {
- my($exe,$path) = @_;
- my($dir);
- #warn "in find_exe exe[$exe] path[@$path]";
- for $dir (@$path) {
- my $abs = MM->catfile($dir,$exe);
- if (($abs = MM->maybe_command($abs))) {
- return $abs;
- }
- }
-}
-
-sub picklist {
- my($items,$prompt,$default,$require_nonempty,$empty_warning)=@_;
- $default ||= '';
-
- my ($item, $i);
- for $item (@$items) {
- printf "(%d) %s\n", ++$i, $item;
- }
-
- my @nums;
- while (1) {
- my $num = prompt($prompt,$default);
- @nums = split (' ', $num);
- (warn "invalid items entered, try again\n"), next
- if grep (/\D/ || $_ < 1 || $_ > $i, @nums);
- if ($require_nonempty) {
- (warn "$empty_warning\n"), next
- unless @nums;
- }
- last;
- }
- print "\n";
- for (@nums) { $_-- }
- @{$items}[@nums];
-}
-
-sub read_mirrored_by {
- my $local = shift or return;
- my(%all,$url,$expected_size,$default,$ans,$host,$dst,$country,$continent,@location);
- my $fh = FileHandle->new;
- $fh->open($local) or die "Couldn't open $local: $!";
- local $/ = "\012";
- while (<$fh>) {
- ($host) = /^([\w\.\-]+)/ unless defined $host;
- next unless defined $host;
- next unless /\s+dst_(dst|location)/;
- /location\s+=\s+\"([^\"]+)/ and @location = (split /\s*,\s*/, $1) and
- ($continent, $country) = @location[-1,-2];
- $continent =~ s/\s\(.*//;
- $continent =~ s/\W+$//; # if Jarkko doesn't know latitude/longitude
- /dst_dst\s+=\s+\"([^\"]+)/ and $dst = $1;
- next unless $host && $dst && $continent && $country;
- $all{$continent}{$country}{$dst} = CPAN::Mirrored::By->new($continent,$country,$dst);
- undef $host;
- $dst=$continent=$country="";
- }
- $fh->close;
- $CPAN::Config->{urllist} ||= [];
- my(@previous_urls);
- if (@previous_urls = @{$CPAN::Config->{urllist}}) {
- $CPAN::Config->{urllist} = [];
- }
-
- print qq{
-
-Now we need to know where your favorite CPAN sites are located. Push
-a few sites onto the array (just in case the first on the array won\'t
-work). If you are mirroring CPAN to your local workstation, specify a
-file: URL.
-
-First, pick a nearby continent and country (you can pick several of
-each, separated by spaces, or none if you just want to keep your
-existing selections). Then, you will be presented with a list of URLs
-of CPAN mirrors in the countries you selected, along with previously
-selected URLs. Select some of those URLs, or just keep the old list.
-Finally, you will be prompted for any extra URLs -- file:, ftp:, or
-http: -- that host a CPAN mirror.
-
-};
-
- my (@cont, $cont, %cont, @countries, @urls, %seen);
- my $no_previous_warn =
- "Sorry! since you don't have any existing picks, you must make a\n" .
- "geographic selection.";
- @cont = picklist([sort keys %all],
- "Select your continent (or several nearby continents)",
- '',
- ! @previous_urls,
- $no_previous_warn);
-
-
- foreach $cont (@cont) {
- my @c = sort keys %{$all{$cont}};
- @cont{@c} = map ($cont, 0..$#c);
- @c = map ("$_ ($cont)", @c) if @cont > 1;
- push (@countries, @c);
- }
-
- if (@countries) {
- @countries = picklist (\@countries,
- "Select your country (or several nearby countries)",
- '',
- ! @previous_urls,
- $no_previous_warn);
- %seen = map (($_ => 1), @previous_urls);
- # hmmm, should take list of defaults from CPAN::Config->{'urllist'}...
- foreach $country (@countries) {
- (my $bare_country = $country) =~ s/ \(.*\)//;
- my @u = sort keys %{$all{$cont{$bare_country}}{$bare_country}};
- @u = grep (! $seen{$_}, @u);
- @u = map ("$_ ($bare_country)", @u)
- if @countries > 1;
- push (@urls, @u);
- }
- }
- push (@urls, map ("$_ (previous pick)", @previous_urls));
- my $prompt = "Select as many URLs as you like,
-put them on one line, separated by blanks";
- if (@previous_urls) {
- $default = join (' ', ((scalar @urls) - (scalar @previous_urls) + 1) ..
- (scalar @urls));
- $prompt .= "\n(or just hit RETURN to keep your previous picks)";
- }
-
- @urls = picklist (\@urls, $prompt, $default);
- foreach (@urls) { s/ \(.*\)//; }
- push @{$CPAN::Config->{urllist}}, @urls;
-}
-
-sub bring_your_own {
- my %seen = map (($_ => 1), @{$CPAN::Config->{urllist}});
- my($ans,@urls);
- do {
- my $prompt = "Enter another URL or RETURN to quit:";
- unless (%seen) {
- $prompt = qq{CPAN.pm needs at least one URL where it can fetch CPAN files from.
-
-Please enter your CPAN site:};
- }
- $ans = prompt ($prompt, "");
-
- if ($ans) {
- $ans =~ s|/?\z|/|; # has to end with one slash
- $ans = "file:$ans" unless $ans =~ /:/; # without a scheme is a file:
- if ($ans =~ /^\w+:\/./) {
- push @urls, $ans unless $seen{$ans}++;
- } else {
- printf(qq{"%s" doesn\'t look like an URL at first sight.
-I\'ll ignore it for now.
-You can add it to your %s
-later if you\'re sure it\'s right.\n},
- $ans,
- $INC{'CPAN/MyConfig.pm'} || $INC{'CPAN/Config.pm'} || "configuration file",
- );
- }
- }
- } while $ans || !%seen;
-
- push @{$CPAN::Config->{urllist}}, @urls;
- # xxx delete or comment these out when you're happy that it works
- print "New set of picks:\n";
- map { print " $_\n" } @{$CPAN::Config->{urllist}};
-}
-
-1;
diff --git a/contrib/perl5/lib/CPAN/Nox.pm b/contrib/perl5/lib/CPAN/Nox.pm
deleted file mode 100644
index 8b59ca0..0000000
--- a/contrib/perl5/lib/CPAN/Nox.pm
+++ /dev/null
@@ -1,44 +0,0 @@
-package CPAN::Nox;
-use strict;
-use vars qw($VERSION @EXPORT);
-
-BEGIN{
- $CPAN::Suppress_readline=1 unless defined $CPAN::term;
-}
-
-use base 'Exporter';
-use CPAN;
-
-$VERSION = "1.00";
-$CPAN::META->has_inst('MD5','no');
-$CPAN::META->has_inst('LWP','no');
-$CPAN::META->has_inst('Compress::Zlib','no');
-@EXPORT = @CPAN::EXPORT;
-
-*AUTOLOAD = \&CPAN::AUTOLOAD;
-
-__END__
-
-=head1 NAME
-
-CPAN::Nox - Wrapper around CPAN.pm without using any XS module
-
-=head1 SYNOPSIS
-
-Interactive mode:
-
- perl -MCPAN::Nox -e shell;
-
-=head1 DESCRIPTION
-
-This package has the same functionality as CPAN.pm, but tries to
-prevent the usage of compiled extensions during it's own
-execution. It's primary purpose is a rescue in case you upgraded perl
-and broke binary compatibility somehow.
-
-=head1 SEE ALSO
-
-CPAN(3)
-
-=cut
-
diff --git a/contrib/perl5/lib/Carp.pm b/contrib/perl5/lib/Carp.pm
deleted file mode 100644
index 43524dd..0000000
--- a/contrib/perl5/lib/Carp.pm
+++ /dev/null
@@ -1,124 +0,0 @@
-package Carp;
-
-=head1 NAME
-
-carp - warn of errors (from perspective of caller)
-
-cluck - warn of errors with stack backtrace
- (not exported by default)
-
-croak - die of errors (from perspective of caller)
-
-confess - die of errors with stack backtrace
-
-=head1 SYNOPSIS
-
- use Carp;
- croak "We're outta here!";
-
- use Carp qw(cluck);
- cluck "This is how we got here!";
-
-=head1 DESCRIPTION
-
-The Carp routines are useful in your own modules because
-they act like die() or warn(), but report where the error
-was in the code they were called from. Thus if you have a
-routine Foo() that has a carp() in it, then the carp()
-will report the error as occurring where Foo() was called,
-not where carp() was called.
-
-=head2 Forcing a Stack Trace
-
-As a debugging aid, you can force Carp to treat a croak as a confess
-and a carp as a cluck across I<all> modules. In other words, force a
-detailed stack trace to be given. This can be very helpful when trying
-to understand why, or from where, a warning or error is being generated.
-
-This feature is enabled by 'importing' the non-existent symbol
-'verbose'. You would typically enable it by saying
-
- perl -MCarp=verbose script.pl
-
-or by including the string C<MCarp=verbose> in the L<PERL5OPT>
-environment variable.
-
-=head1 BUGS
-
-The Carp routines don't handle exception objects currently.
-If called with a first argument that is a reference, they simply
-call die() or warn(), as appropriate.
-
-=cut
-
-# This package is heavily used. Be small. Be fast. Be good.
-
-# Comments added by Andy Wardley <abw@kfs.org> 09-Apr-98, based on an
-# _almost_ complete understanding of the package. Corrections and
-# comments are welcome.
-
-# The $CarpLevel variable can be set to "strip off" extra caller levels for
-# those times when Carp calls are buried inside other functions. The
-# $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval
-# text and function arguments should be formatted when printed.
-
-$CarpLevel = 0; # How many extra package levels to skip on carp.
-$MaxEvalLen = 0; # How much eval '...text...' to show. 0 = all.
-$MaxArgLen = 64; # How much of each argument to print. 0 = all.
-$MaxArgNums = 8; # How many arguments to print. 0 = all.
-$Verbose = 0; # If true then make shortmess call longmess instead
-
-require Exporter;
-@ISA = ('Exporter');
-@EXPORT = qw(confess croak carp);
-@EXPORT_OK = qw(cluck verbose);
-@EXPORT_FAIL = qw(verbose); # hook to enable verbose mode
-
-
-# if the caller specifies verbose usage ("perl -MCarp=verbose script.pl")
-# then the following method will be called by the Exporter which knows
-# to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word
-# 'verbose'.
-
-sub export_fail {
- shift;
- $Verbose = shift if $_[0] eq 'verbose';
- return @_;
-}
-
-
-# longmess() crawls all the way up the stack reporting on all the function
-# calls made. The error string, $error, is originally constructed from the
-# arguments passed into longmess() via confess(), cluck() or shortmess().
-# This gets appended with the stack trace messages which are generated for
-# each function call on the stack.
-
-sub longmess {
- { local $@; require Carp::Heavy; } # XXX fix require to not clear $@?
- goto &longmess_heavy;
-}
-
-
-# shortmess() is called by carp() and croak() to skip all the way up to
-# the top-level caller's package and report the error from there. confess()
-# and cluck() generate a full stack trace so they call longmess() to
-# generate that. In verbose mode shortmess() calls longmess() so
-# you always get a stack trace
-
-sub shortmess { # Short-circuit &longmess if called via multiple packages
- { local $@; require Carp::Heavy; } # XXX fix require to not clear $@?
- goto &shortmess_heavy;
-}
-
-
-# the following four functions call longmess() or shortmess() depending on
-# whether they should generate a full stack trace (confess() and cluck())
-# or simply report the caller's package (croak() and carp()), respectively.
-# confess() and croak() die, carp() and cluck() warn.
-
-sub croak { die shortmess @_ }
-sub confess { die longmess @_ }
-sub carp { warn shortmess @_ }
-sub cluck { warn longmess @_ }
-
-1;
diff --git a/contrib/perl5/lib/Carp/Heavy.pm b/contrib/perl5/lib/Carp/Heavy.pm
deleted file mode 100644
index 4d12bd7..0000000
--- a/contrib/perl5/lib/Carp/Heavy.pm
+++ /dev/null
@@ -1,247 +0,0 @@
-package Carp;
-
-=head1 NAME
-
-Carp::Heavy - Carp guts
-
-=head1 SYNOPIS
-
-(internal use only)
-
-=head1 DESCRIPTION
-
-No user-serviceable parts inside.
-
-=cut
-
-# This package is heavily used. Be small. Be fast. Be good.
-
-# Comments added by Andy Wardley <abw@kfs.org> 09-Apr-98, based on an
-# _almost_ complete understanding of the package. Corrections and
-# comments are welcome.
-
-# longmess() crawls all the way up the stack reporting on all the function
-# calls made. The error string, $error, is originally constructed from the
-# arguments passed into longmess() via confess(), cluck() or shortmess().
-# This gets appended with the stack trace messages which are generated for
-# each function call on the stack.
-
-sub longmess_heavy {
- return @_ if ref $_[0];
- my $error = join '', @_;
- my $mess = "";
- my $i = 1 + $CarpLevel;
- my ($pack,$file,$line,$sub,$hargs,$eval,$require);
- my (@a);
- #
- # crawl up the stack....
- #
- while (do { { package DB; @a = caller($i++) } } ) {
- # get copies of the variables returned from caller()
- ($pack,$file,$line,$sub,$hargs,undef,$eval,$require) = @a;
- #
- # if the $error error string is newline terminated then it
- # is copied into $mess. Otherwise, $mess gets set (at the end of
- # the 'else' section below) to one of two things. The first time
- # through, it is set to the "$error at $file line $line" message.
- # $error is then set to 'called' which triggers subsequent loop
- # iterations to append $sub to $mess before appending the "$error
- # at $file line $line" which now actually reads "called at $file line
- # $line". Thus, the stack trace message is constructed:
- #
- # first time: $mess = $error at $file line $line
- # subsequent times: $mess .= $sub $error at $file line $line
- # ^^^^^^
- # "called"
- if ($error =~ m/\n$/) {
- $mess .= $error;
- } else {
- # Build a string, $sub, which names the sub-routine called.
- # This may also be "require ...", "eval '...' or "eval {...}"
- if (defined $eval) {
- if ($require) {
- $sub = "require $eval";
- } else {
- $eval =~ s/([\\\'])/\\$1/g;
- if ($MaxEvalLen && length($eval) > $MaxEvalLen) {
- substr($eval,$MaxEvalLen) = '...';
- }
- $sub = "eval '$eval'";
- }
- } elsif ($sub eq '(eval)') {
- $sub = 'eval {...}';
- }
- # if there are any arguments in the sub-routine call, format
- # them according to the format variables defined earlier in
- # this file and join them onto the $sub sub-routine string
- if ($hargs) {
- # we may trash some of the args so we take a copy
- @a = @DB::args; # must get local copy of args
- # don't print any more than $MaxArgNums
- if ($MaxArgNums and @a > $MaxArgNums) {
- # cap the length of $#a and set the last element to '...'
- $#a = $MaxArgNums;
- $a[$#a] = "...";
- }
- for (@a) {
- # set args to the string "undef" if undefined
- $_ = "undef", next unless defined $_;
- if (ref $_) {
- # force reference to string representation
- $_ .= '';
- s/'/\\'/g;
- }
- else {
- s/'/\\'/g;
- # terminate the string early with '...' if too long
- substr($_,$MaxArgLen) = '...'
- if $MaxArgLen and $MaxArgLen < length;
- }
- # 'quote' arg unless it looks like a number
- $_ = "'$_'" unless /^-?[\d.]+$/;
- # print high-end chars as 'M-<char>'
- s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
- # print remaining control chars as ^<char>
- s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
- }
- # append ('all', 'the', 'arguments') to the $sub string
- $sub .= '(' . join(', ', @a) . ')';
- }
- # here's where the error message, $mess, gets constructed
- $mess .= "\t$sub " if $error eq "called";
- $mess .= "$error at $file line $line";
- if (defined &Thread::tid) {
- my $tid = Thread->self->tid;
- $mess .= " thread $tid" if $tid;
- }
- $mess .= "\n";
- }
- # we don't need to print the actual error message again so we can
- # change this to "called" so that the string "$error at $file line
- # $line" makes sense as "called at $file line $line".
- $error = "called";
- }
- $mess || $error;
-}
-
-
-# ancestors() returns the complete set of ancestors of a module
-
-sub ancestors($$);
-
-sub ancestors($$){
- my( $pack, $href ) = @_;
- if( @{"${pack}::ISA"} ){
- my $risa = \@{"${pack}::ISA"};
- my %tree = ();
- @tree{@$risa} = ();
- foreach my $mod ( @$risa ){
- # visit ancestors - if not already in the gallery
- if( ! defined( $$href{$mod} ) ){
- my @ancs = ancestors( $mod, $href );
- @tree{@ancs} = ();
- }
- }
- return ( keys( %tree ) );
- } else {
- return ();
- }
-}
-
-
-# shortmess() is called by carp() and croak() to skip all the way up to
-# the top-level caller's package and report the error from there. confess()
-# and cluck() generate a full stack trace so they call longmess() to
-# generate that. In verbose mode shortmess() calls longmess() so
-# you always get a stack trace
-
-sub shortmess_heavy { # Short-circuit &longmess if called via multiple packages
- goto &longmess_heavy if $Verbose;
- return @_ if ref $_[0];
- my $error = join '', @_;
- my ($prevpack) = caller(1);
- my $extra = $CarpLevel;
-
- my @Clans = ( $prevpack );
- my $i = 2;
- my ($pack,$file,$line);
- # when reporting an error, we want to report it from the context of the
- # calling package. So what is the calling package? Within a module,
- # there may be many calls between methods and perhaps between sub-classes
- # and super-classes, but the user isn't interested in what happens
- # inside the package. We start by building a hash array which keeps
- # track of all the packages to which the calling package belongs. We
- # do this by examining its @ISA variable. Any call from a base class
- # method (one of our caller's @ISA packages) can be ignored
- my %isa;
-
- # merge all the caller's @ISA packages and ancestors into %isa.
- my @pars = ancestors( $prevpack, \%isa );
- @isa{@pars} = () if @pars;
- $isa{$prevpack} = 1;
-
- # now we crawl up the calling stack and look at all the packages in
- # there. For each package, we look to see if it has an @ISA and then
- # we see if our caller features in that list. That would imply that
- # our caller is a derived class of that package and its calls can also
- # be ignored
-CALLER:
- while (($pack,$file,$line) = caller($i++)) {
-
- # Chances are, the caller's caller (or its caller...) is already
- # in the gallery - if so, ignore this caller.
- next if exists( $isa{$pack} );
-
- # no: collect this module's ancestors.
- my @i = ancestors( $pack, \%isa );
- my %i;
- if( @i ){
- @i{@i} = ();
- # check whether our representative of one of the clans is
- # in this family tree.
- foreach my $cl (@Clans){
- if( exists( $i{$cl} ) ){
- # yes: merge all of the family tree into %isa
- @isa{@i,$pack} = ();
- # and here's where we do some more ignoring...
- # if the package in question is one of our caller's
- # base or derived packages then we can ignore it (skip it)
- # and go onto the next.
- next CALLER if exists( $isa{$pack} );
- last;
- }
- }
- }
-
- # Hey! We've found a package that isn't one of our caller's
- # clan....but wait, $extra refers to the number of 'extra' levels
- # we should skip up. If $extra > 0 then this is a false alarm.
- # We must merge the package into the %isa hash (so we can ignore it
- # if it pops up again), decrement $extra, and continue.
- if ($extra-- > 0) {
- push( @Clans, $pack );
- @isa{@i,$pack} = ();
- }
- else {
- # OK! We've got a candidate package. Time to construct the
- # relevant error message and return it.
- my $msg;
- $msg = "$error at $file line $line";
- if (defined &Thread::tid) {
- my $tid = Thread->self->tid;
- $msg .= " thread $tid" if $tid;
- }
- $msg .= "\n";
- return $msg;
- }
- }
-
- # uh-oh! It looks like we crawled all the way up the stack and
- # never found a candidate package. Oh well, let's call longmess
- # to generate a full stack trace. We use the magical form of 'goto'
- # so that this shortmess() function doesn't appear on the stack
- # to further confuse longmess() about it's calling package.
- goto &longmess_heavy;
-}
-
-1;
diff --git a/contrib/perl5/lib/Class/Struct.pm b/contrib/perl5/lib/Class/Struct.pm
deleted file mode 100644
index 185a8ff..0000000
--- a/contrib/perl5/lib/Class/Struct.pm
+++ /dev/null
@@ -1,602 +0,0 @@
-package Class::Struct;
-
-## See POD after __END__
-
-use 5.005_64;
-
-use strict;
-use warnings::register;
-our(@ISA, @EXPORT, $VERSION);
-
-use Carp;
-
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(struct);
-
-$VERSION = '0.59';
-
-## Tested on 5.002 and 5.003 without class membership tests:
-my $CHECK_CLASS_MEMBERSHIP = ($] >= 5.003_95);
-
-my $print = 0;
-sub printem {
- if (@_) { $print = shift }
- else { $print++ }
-}
-
-{
- package Class::Struct::Tie_ISA;
-
- sub TIEARRAY {
- my $class = shift;
- return bless [], $class;
- }
-
- sub STORE {
- my ($self, $index, $value) = @_;
- Class::Struct::_subclass_error();
- }
-
- sub FETCH {
- my ($self, $index) = @_;
- $self->[$index];
- }
-
- sub FETCHSIZE {
- my $self = shift;
- return scalar(@$self);
- }
-
- sub DESTROY { }
-}
-
-sub import {
- my $self = shift;
-
- if ( @_ == 0 ) {
- $self->export_to_level( 1, $self, @EXPORT );
- } elsif ( @_ == 1 ) {
- # This is admittedly a little bit silly:
- # do we ever export anything else than 'struct'...?
- $self->export_to_level( 1, $self, @_ );
- } else {
- &struct;
- }
-}
-
-sub struct {
-
- # Determine parameter list structure, one of:
- # struct( class => [ element-list ])
- # struct( class => { element-list })
- # struct( element-list )
- # Latter form assumes current package name as struct name.
-
- my ($class, @decls);
- my $base_type = ref $_[1];
- if ( $base_type eq 'HASH' ) {
- $class = shift;
- @decls = %{shift()};
- _usage_error() if @_;
- }
- elsif ( $base_type eq 'ARRAY' ) {
- $class = shift;
- @decls = @{shift()};
- _usage_error() if @_;
- }
- else {
- $base_type = 'ARRAY';
- $class = (caller())[0];
- @decls = @_;
- }
-
- _usage_error() if @decls % 2 == 1;
-
- # Ensure we are not, and will not be, a subclass.
-
- my $isa = do {
- no strict 'refs';
- \@{$class . '::ISA'};
- };
- _subclass_error() if @$isa;
- tie @$isa, 'Class::Struct::Tie_ISA';
-
- # Create constructor.
-
- croak "function 'new' already defined in package $class"
- if do { no strict 'refs'; defined &{$class . "::new"} };
-
- my @methods = ();
- my %refs = ();
- my %arrays = ();
- my %hashes = ();
- my %classes = ();
- my $got_class = 0;
- my $out = '';
-
- $out = "{\n package $class;\n use Carp;\n sub new {\n";
- $out .= " my (\$class, \%init) = \@_;\n";
- $out .= " \$class = __PACKAGE__ unless \@_;\n";
-
- my $cnt = 0;
- my $idx = 0;
- my( $cmt, $name, $type, $elem );
-
- if( $base_type eq 'HASH' ){
- $out .= " my(\$r) = {};\n";
- $cmt = '';
- }
- elsif( $base_type eq 'ARRAY' ){
- $out .= " my(\$r) = [];\n";
- }
- while( $idx < @decls ){
- $name = $decls[$idx];
- $type = $decls[$idx+1];
- push( @methods, $name );
- if( $base_type eq 'HASH' ){
- $elem = "{'${class}::$name'}";
- }
- elsif( $base_type eq 'ARRAY' ){
- $elem = "[$cnt]";
- ++$cnt;
- $cmt = " # $name";
- }
- if( $type =~ /^\*(.)/ ){
- $refs{$name}++;
- $type = $1;
- }
- my $init = "defined(\$init{'$name'}) ? \$init{'$name'} :";
- if( $type eq '@' ){
- $out .= " croak 'Initializer for $name must be array reference'\n";
- $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'ARRAY';\n";
- $out .= " \$r->$elem = $init [];$cmt\n";
- $arrays{$name}++;
- }
- elsif( $type eq '%' ){
- $out .= " croak 'Initializer for $name must be hash reference'\n";
- $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'HASH';\n";
- $out .= " \$r->$elem = $init {};$cmt\n";
- $hashes{$name}++;
- }
- elsif ( $type eq '$') {
- $out .= " \$r->$elem = $init undef;$cmt\n";
- }
- elsif( $type =~ /^\w+(?:::\w+)*$/ ){
- $init = "defined(\$init{'$name'}) ? \%{\$init{'$name'}} : ()";
- $out .= " croak 'Initializer for $name must be hash reference'\n";
- $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'HASH';\n";
- $out .= " \$r->$elem = '${type}'->new($init);$cmt\n";
- $classes{$name} = $type;
- $got_class = 1;
- }
- else{
- croak "'$type' is not a valid struct element type";
- }
- $idx += 2;
- }
- $out .= " bless \$r, \$class;\n }\n";
-
- # Create accessor methods.
-
- my( $pre, $pst, $sel );
- $cnt = 0;
- foreach $name (@methods){
- if ( do { no strict 'refs'; defined &{$class . "::$name"} } ) {
- warnings::warnif("function '$name' already defined, overrides struct accessor method");
- }
- else {
- $pre = $pst = $cmt = $sel = '';
- if( defined $refs{$name} ){
- $pre = "\\(";
- $pst = ")";
- $cmt = " # returns ref";
- }
- $out .= " sub $name {$cmt\n my \$r = shift;\n";
- if( $base_type eq 'ARRAY' ){
- $elem = "[$cnt]";
- ++$cnt;
- }
- elsif( $base_type eq 'HASH' ){
- $elem = "{'${class}::$name'}";
- }
- if( defined $arrays{$name} ){
- $out .= " my \$i;\n";
- $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
- $sel = "->[\$i]";
- }
- elsif( defined $hashes{$name} ){
- $out .= " my \$i;\n";
- $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
- $sel = "->{\$i}";
- }
- elsif( defined $classes{$name} ){
- if ( $CHECK_CLASS_MEMBERSHIP ) {
- $out .= " croak '$name argument is wrong class' if \@_ && ! UNIVERSAL::isa(\$_[0], '$classes{$name}');\n";
- }
- }
- $out .= " croak 'Too many args to $name' if \@_ > 1;\n";
- $out .= " \@_ ? ($pre\$r->$elem$sel = shift$pst) : $pre\$r->$elem$sel$pst;\n";
- $out .= " }\n";
- }
- }
- $out .= "}\n1;\n";
-
- print $out if $print;
- my $result = eval $out;
- carp $@ if $@;
-}
-
-sub _usage_error {
- confess "struct usage error";
-}
-
-sub _subclass_error {
- croak 'struct class cannot be a subclass (@ISA not allowed)';
-}
-
-1; # for require
-
-
-__END__
-
-=head1 NAME
-
-Class::Struct - declare struct-like datatypes as Perl classes
-
-=head1 SYNOPSIS
-
- use Class::Struct;
- # declare struct, based on array:
- struct( CLASS_NAME => [ ELEMENT_NAME => ELEMENT_TYPE, ... ]);
- # declare struct, based on hash:
- struct( CLASS_NAME => { ELEMENT_NAME => ELEMENT_TYPE, ... });
-
- package CLASS_NAME;
- use Class::Struct;
- # declare struct, based on array, implicit class name:
- struct( ELEMENT_NAME => ELEMENT_TYPE, ... );
-
- # Declare struct at compile time
- use Class::Struct CLASS_NAME => [ ELEMENT_NAME => ELEMENT_TYPE, ... ];
- use Class::Struct CLASS_NAME => { ELEMENT_NAME => ELEMENT_TYPE, ... };
-
- package Myobj;
- use Class::Struct;
- # declare struct with four types of elements:
- struct( s => '$', a => '@', h => '%', c => 'My_Other_Class' );
-
- $obj = new Myobj; # constructor
-
- # scalar type accessor:
- $element_value = $obj->s; # element value
- $obj->s('new value'); # assign to element
-
- # array type accessor:
- $ary_ref = $obj->a; # reference to whole array
- $ary_element_value = $obj->a(2); # array element value
- $obj->a(2, 'new value'); # assign to array element
-
- # hash type accessor:
- $hash_ref = $obj->h; # reference to whole hash
- $hash_element_value = $obj->h('x'); # hash element value
- $obj->h('x', 'new value'); # assign to hash element
-
- # class type accessor:
- $element_value = $obj->c; # object reference
- $obj->c->method(...); # call method of object
- $obj->c(new My_Other_Class); # assign a new object
-
-=head1 DESCRIPTION
-
-C<Class::Struct> exports a single function, C<struct>.
-Given a list of element names and types, and optionally
-a class name, C<struct> creates a Perl 5 class that implements
-a "struct-like" data structure.
-
-The new class is given a constructor method, C<new>, for creating
-struct objects.
-
-Each element in the struct data has an accessor method, which is
-used to assign to the element and to fetch its value. The
-default accessor can be overridden by declaring a C<sub> of the
-same name in the package. (See Example 2.)
-
-Each element's type can be scalar, array, hash, or class.
-
-=head2 The C<struct()> function
-
-The C<struct> function has three forms of parameter-list.
-
- struct( CLASS_NAME => [ ELEMENT_LIST ]);
- struct( CLASS_NAME => { ELEMENT_LIST });
- struct( ELEMENT_LIST );
-
-The first and second forms explicitly identify the name of the
-class being created. The third form assumes the current package
-name as the class name.
-
-An object of a class created by the first and third forms is
-based on an array, whereas an object of a class created by the
-second form is based on a hash. The array-based forms will be
-somewhat faster and smaller; the hash-based forms are more
-flexible.
-
-The class created by C<struct> must not be a subclass of another
-class other than C<UNIVERSAL>.
-
-It can, however, be used as a superclass for other classes. To facilitate
-this, the generated constructor method uses a two-argument blessing.
-Furthermore, if the class is hash-based, the key of each element is
-prefixed with the class name (see I<Perl Cookbook>, Recipe 13.12).
-
-A function named C<new> must not be explicitly defined in a class
-created by C<struct>.
-
-The I<ELEMENT_LIST> has the form
-
- NAME => TYPE, ...
-
-Each name-type pair declares one element of the struct. Each
-element name will be defined as an accessor method unless a
-method by that name is explicitly defined; in the latter case, a
-warning is issued if the warning flag (B<-w>) is set.
-
-=head2 Class Creation at Compile Time
-
-C<Class::Struct> can create your class at compile time. The main reason
-for doing this is obvious, so your class acts like every other class in
-Perl. Creating your class at compile time will make the order of events
-similar to using any other class ( or Perl module ).
-
-There is no significant speed gain between compile time and run time
-class creation, there is just a new, more standard order of events.
-
-=head2 Element Types and Accessor Methods
-
-The four element types -- scalar, array, hash, and class -- are
-represented by strings -- C<'$'>, C<'@'>, C<'%'>, and a class name --
-optionally preceded by a C<'*'>.
-
-The accessor method provided by C<struct> for an element depends
-on the declared type of the element.
-
-=over
-
-=item Scalar (C<'$'> or C<'*$'>)
-
-The element is a scalar, and by default is initialized to C<undef>
-(but see L<Initializing with new>).
-
-The accessor's argument, if any, is assigned to the element.
-
-If the element type is C<'$'>, the value of the element (after
-assignment) is returned. If the element type is C<'*$'>, a reference
-to the element is returned.
-
-=item Array (C<'@'> or C<'*@'>)
-
-The element is an array, initialized by default to C<()>.
-
-With no argument, the accessor returns a reference to the
-element's whole array (whether or not the element was
-specified as C<'@'> or C<'*@'>).
-
-With one or two arguments, the first argument is an index
-specifying one element of the array; the second argument, if
-present, is assigned to the array element. If the element type
-is C<'@'>, the accessor returns the array element value. If the
-element type is C<'*@'>, a reference to the array element is
-returned.
-
-=item Hash (C<'%'> or C<'*%'>)
-
-The element is a hash, initialized by default to C<()>.
-
-With no argument, the accessor returns a reference to the
-element's whole hash (whether or not the element was
-specified as C<'%'> or C<'*%'>).
-
-With one or two arguments, the first argument is a key specifying
-one element of the hash; the second argument, if present, is
-assigned to the hash element. If the element type is C<'%'>, the
-accessor returns the hash element value. If the element type is
-C<'*%'>, a reference to the hash element is returned.
-
-=item Class (C<'Class_Name'> or C<'*Class_Name'>)
-
-The element's value must be a reference blessed to the named
-class or to one of its subclasses. The element is initialized to
-the result of calling the C<new> constructor of the named class.
-
-The accessor's argument, if any, is assigned to the element. The
-accessor will C<croak> if this is not an appropriate object
-reference.
-
-If the element type does not start with a C<'*'>, the accessor
-returns the element value (after assignment). If the element type
-starts with a C<'*'>, a reference to the element itself is returned.
-
-=back
-
-=head2 Initializing with C<new>
-
-C<struct> always creates a constructor called C<new>. That constructor
-may take a list of initializers for the various elements of the new
-struct.
-
-Each initializer is a pair of values: I<element name>C< =E<gt> >I<value>.
-The initializer value for a scalar element is just a scalar value. The
-initializer for an array element is an array reference. The initializer
-for a hash is a hash reference.
-
-The initializer for a class element is also a hash reference, and the
-contents of that hash are passed to the element's own constructor.
-
-See Example 3 below for an example of initialization.
-
-=head1 EXAMPLES
-
-=over
-
-=item Example 1
-
-Giving a struct element a class type that is also a struct is how
-structs are nested. Here, C<timeval> represents a time (seconds and
-microseconds), and C<rusage> has two elements, each of which is of
-type C<timeval>.
-
- use Class::Struct;
-
- struct( rusage => {
- ru_utime => timeval, # seconds
- ru_stime => timeval, # microseconds
- });
-
- struct( timeval => [
- tv_secs => '$',
- tv_usecs => '$',
- ]);
-
- # create an object:
- my $t = new rusage;
-
- # $t->ru_utime and $t->ru_stime are objects of type timeval.
- # set $t->ru_utime to 100.0 sec and $t->ru_stime to 5.0 sec.
- $t->ru_utime->tv_secs(100);
- $t->ru_utime->tv_usecs(0);
- $t->ru_stime->tv_secs(5);
- $t->ru_stime->tv_usecs(0);
-
-=item Example 2
-
-An accessor function can be redefined in order to provide
-additional checking of values, etc. Here, we want the C<count>
-element always to be nonnegative, so we redefine the C<count>
-accessor accordingly.
-
- package MyObj;
- use Class::Struct;
-
- # declare the struct
- struct ( 'MyObj', { count => '$', stuff => '%' } );
-
- # override the default accessor method for 'count'
- sub count {
- my $self = shift;
- if ( @_ ) {
- die 'count must be nonnegative' if $_[0] < 0;
- $self->{'count'} = shift;
- warn "Too many args to count" if @_;
- }
- return $self->{'count'};
- }
-
- package main;
- $x = new MyObj;
- print "\$x->count(5) = ", $x->count(5), "\n";
- # prints '$x->count(5) = 5'
-
- print "\$x->count = ", $x->count, "\n";
- # prints '$x->count = 5'
-
- print "\$x->count(-5) = ", $x->count(-5), "\n";
- # dies due to negative argument!
-
-=item Example 3
-
-The constructor of a generated class can be passed a list
-of I<element>=>I<value> pairs, with which to initialize the struct.
-If no initializer is specified for a particular element, its default
-initialization is performed instead. Initializers for non-existent
-elements are silently ignored.
-
-Note that the initializer for a nested struct is specified
-as an anonymous hash of initializers, which is passed on to the nested
-struct's constructor.
-
- use Class::Struct;
-
- struct Breed =>
- {
- name => '$',
- cross => '$',
- };
-
- struct Cat =>
- [
- name => '$',
- kittens => '@',
- markings => '%',
- breed => 'Breed',
- ];
-
-
- my $cat = Cat->new( name => 'Socks',
- kittens => ['Monica', 'Kenneth'],
- markings => { socks=>1, blaze=>"white" },
- breed => { name=>'short-hair', cross=>1 },
- );
-
- print "Once a cat called ", $cat->name, "\n";
- print "(which was a ", $cat->breed->name, ")\n";
- print "had two kittens: ", join(' and ', @{$cat->kittens}), "\n";
-
-=back
-
-=head1 Author and Modification History
-
-Modified by Casey Tweten, 2000-11-08, v0.59.
-
- Added the ability for compile time class creation.
-
-Modified by Damian Conway, 1999-03-05, v0.58.
-
- Added handling of hash-like arg list to class ctor.
-
- Changed to two-argument blessing in ctor to support
- derivation from created classes.
-
- Added classname prefixes to keys in hash-based classes
- (refer to "Perl Cookbook", Recipe 13.12 for rationale).
-
- Corrected behaviour of accessors for '*@' and '*%' struct
- elements. Package now implements documented behaviour when
- returning a reference to an entire hash or array element.
- Previously these were returned as a reference to a reference
- to the element.
-
-Renamed to C<Class::Struct> and modified by Jim Miner, 1997-04-02.
-
- members() function removed.
- Documentation corrected and extended.
- Use of struct() in a subclass prohibited.
- User definition of accessor allowed.
- Treatment of '*' in element types corrected.
- Treatment of classes as element types corrected.
- Class name to struct() made optional.
- Diagnostic checks added.
-
-Originally C<Class::Template> by Dean Roehrich.
-
- # Template.pm --- struct/member template builder
- # 12mar95
- # Dean Roehrich
- #
- # changes/bugs fixed since 28nov94 version:
- # - podified
- # changes/bugs fixed since 21nov94 version:
- # - Fixed examples.
- # changes/bugs fixed since 02sep94 version:
- # - Moved to Class::Template.
- # changes/bugs fixed since 20feb94 version:
- # - Updated to be a more proper module.
- # - Added "use strict".
- # - Bug in build_methods, was using @var when @$var needed.
- # - Now using my() rather than local().
- #
- # Uses perl5 classes to create nested data types.
- # This is offered as one implementation of Tom Christiansen's "structs.pl"
- # idea.
-
-=cut
diff --git a/contrib/perl5/lib/Cwd.pm b/contrib/perl5/lib/Cwd.pm
deleted file mode 100644
index b7acfe8..0000000
--- a/contrib/perl5/lib/Cwd.pm
+++ /dev/null
@@ -1,457 +0,0 @@
-# $FreeBSD$
-package Cwd;
-require 5.000;
-
-=head1 NAME
-
-Cwd - get pathname of current working directory
-
-=head1 SYNOPSIS
-
- use Cwd;
- $dir = cwd;
-
- use Cwd;
- $dir = getcwd;
-
- use Cwd;
- $dir = fastcwd;
-
- use Cwd;
- $dir = fastgetcwd;
-
- use Cwd 'chdir';
- chdir "/tmp";
- print $ENV{'PWD'};
-
- use Cwd 'abs_path'; # aka realpath()
- print abs_path($ENV{'PWD'});
-
- use Cwd 'fast_abs_path';
- print fast_abs_path($ENV{'PWD'});
-
-=head1 DESCRIPTION
-
-This module provides functions for determining the pathname of the
-current working directory. By default, it exports the functions
-cwd(), getcwd(), fastcwd(), and fastgetcwd() into the caller's
-namespace. Each of these functions are called without arguments and
-return the absolute path of the current working directory. It is
-recommended that cwd (or another *cwd() function) be used in I<all>
-code to ensure portability.
-
-The cwd() is the most natural and safe form for the current
-architecture. For most systems it is identical to `pwd` (but without
-the trailing line terminator).
-
-The getcwd() function re-implements the getcwd(3) (or getwd(3)) functions
-in Perl.
-
-The fastcwd() function looks the same as getcwd(), but runs faster.
-It's also more dangerous because it might conceivably chdir() you out
-of a directory that it can't chdir() you back into. If fastcwd
-encounters a problem it will return undef but will probably leave you
-in a different directory. For a measure of extra security, if
-everything appears to have worked, the fastcwd() function will check
-that it leaves you in the same directory that it started in. If it has
-changed it will C<die> with the message "Unstable directory path,
-current directory changed unexpectedly". That should never happen.
-
-The fastgetcwd() function is provided as a synonym for cwd().
-
-The abs_path() function takes a single argument and returns the
-absolute pathname for that argument. It uses the same algorithm as
-getcwd(). (Actually, getcwd() is abs_path(".")) Symbolic links and
-relative-path components ("." and "..") are resolved to return the
-canonical pathname, just like realpath(3). This function is also
-callable as realpath().
-
-The fast_abs_path() function looks the same as abs_path() but runs
-faster and, like fastcwd(), is more dangerous.
-
-If you ask to override your chdir() built-in function, then your PWD
-environment variable will be kept up to date. (See
-L<perlsub/Overriding Builtin Functions>.) Note that it will only be
-kept up to date if all packages which use chdir import it from Cwd.
-
-=cut
-
-use strict;
-
-use Carp;
-
-our $VERSION = '2.04';
-
-use base qw/ Exporter /;
-our @EXPORT = qw(cwd getcwd fastcwd fastgetcwd);
-our @EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath);
-
-
-# The 'natural and safe form' for UNIX (pwd may be setuid root)
-
-sub _backtick_pwd {
- my $cwd = `/bin/pwd`;
- # `pwd` may fail e.g. if the disk is full
- chomp($cwd) if defined $cwd;
- $cwd;
-}
-
-# Since some ports may predefine cwd internally (e.g., NT)
-# we take care not to override an existing definition for cwd().
-
-unless(defined &cwd) {
- # The pwd command is not available in some chroot(2)'ed environments
- if($^O eq 'MacOS' || grep { -x "$_/pwd" } split(':', $ENV{PATH})) {
- *cwd = \&_backtick_pwd;
- }
- else {
- *cwd = \&getcwd;
- }
-}
-
-# set a reasonable (and very safe) default for fastgetcwd, in case it
-# isn't redefined later (20001212 rspier)
-*fastgetcwd = \&cwd;
-
-# By Brandon S. Allbery
-#
-# Usage: $cwd = getcwd();
-
-sub getcwd
-{
- abs_path('.');
-}
-
-# By John Bazik
-#
-# Usage: $cwd = &fastcwd;
-#
-# This is a faster version of getcwd. It's also more dangerous because
-# you might chdir out of a directory that you can't chdir back into.
-
-sub fastcwd {
- my($odev, $oino, $cdev, $cino, $tdev, $tino);
- my(@path, $path);
- local(*DIR);
-
- my($orig_cdev, $orig_cino) = stat('.');
- ($cdev, $cino) = ($orig_cdev, $orig_cino);
- for (;;) {
- my $direntry;
- ($odev, $oino) = ($cdev, $cino);
- CORE::chdir('..') || return undef;
- ($cdev, $cino) = stat('.');
- last if $odev == $cdev && $oino == $cino;
- opendir(DIR, '.') || return undef;
- for (;;) {
- $direntry = readdir(DIR);
- last unless defined $direntry;
- next if $direntry eq '.';
- next if $direntry eq '..';
-
- ($tdev, $tino) = lstat($direntry);
- last unless $tdev != $odev || $tino != $oino;
- }
- closedir(DIR);
- return undef unless defined $direntry; # should never happen
- unshift(@path, $direntry);
- }
- $path = '/' . join('/', @path);
- if ($^O eq 'apollo') { $path = "/".$path; }
- # At this point $path may be tainted (if tainting) and chdir would fail.
- # To be more useful we untaint it then check that we landed where we started.
- $path = $1 if $path =~ /^(.*)\z/s; # untaint
- CORE::chdir($path) || return undef;
- ($cdev, $cino) = stat('.');
- die "Unstable directory path, current directory changed unexpectedly"
- if $cdev != $orig_cdev || $cino != $orig_cino;
- $path;
-}
-
-
-# Keeps track of current working directory in PWD environment var
-# Usage:
-# use Cwd 'chdir';
-# chdir $newdir;
-
-my $chdir_init = 0;
-
-sub chdir_init {
- if ($ENV{'PWD'} and $^O ne 'os2' and $^O ne 'dos' and $^O ne 'MSWin32') {
- my($dd,$di) = stat('.');
- my($pd,$pi) = stat($ENV{'PWD'});
- if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) {
- $ENV{'PWD'} = cwd();
- }
- }
- else {
- my $wd = cwd();
- $wd = Win32::GetFullPathName($wd) if $^O eq 'MSWin32';
- $ENV{'PWD'} = $wd;
- }
- # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar)
- if ($^O ne 'MSWin32' and $ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) {
- my($pd,$pi) = stat($2);
- my($dd,$di) = stat($1);
- if (defined $pd and defined $dd and $di == $pi and $dd == $pd) {
- $ENV{'PWD'}="$2$3";
- }
- }
- $chdir_init = 1;
-}
-
-sub chdir {
- my $newdir = @_ ? shift : ''; # allow for no arg (chdir to HOME dir)
- $newdir =~ s|///*|/|g unless $^O eq 'MSWin32';
- chdir_init() unless $chdir_init;
- my $newpwd;
- if ($^O eq 'MSWin32') {
- # get the full path name *before* the chdir()
- $newpwd = Win32::GetFullPathName($newdir);
- }
-
- return 0 unless CORE::chdir $newdir;
-
- if ($^O eq 'VMS') {
- return $ENV{'PWD'} = $ENV{'DEFAULT'}
- }
- elsif ($^O eq 'MacOS') {
- return $ENV{'PWD'} = cwd();
- }
- elsif ($^O eq 'MSWin32') {
- $ENV{'PWD'} = $newpwd;
- return 1;
- }
-
- if ($newdir =~ m#^/#s) {
- $ENV{'PWD'} = $newdir;
- } else {
- my @curdir = split(m#/#,$ENV{'PWD'});
- @curdir = ('') unless @curdir;
- my $component;
- foreach $component (split(m#/#, $newdir)) {
- next if $component eq '.';
- pop(@curdir),next if $component eq '..';
- push(@curdir,$component);
- }
- $ENV{'PWD'} = join('/',@curdir) || '/';
- }
- 1;
-}
-
-# Taken from Cwd.pm It is really getcwd with an optional
-# parameter instead of '.'
-#
-
-sub abs_path
-{
- my $start = @_ ? shift : '.';
- my($dotdots, $cwd, @pst, @cst, $dir, @tst);
-
- unless (@cst = stat( $start ))
- {
- carp "stat($start): $!";
- return '';
- }
- $cwd = '';
- $dotdots = $start;
- do
- {
- $dotdots .= '/..';
- @pst = @cst;
- unless (opendir(PARENT, $dotdots))
- {
- carp "opendir($dotdots): $!";
- return '';
- }
- unless (@cst = stat($dotdots))
- {
- carp "stat($dotdots): $!";
- closedir(PARENT);
- return '';
- }
- if ($pst[0] == $cst[0] && $pst[1] == $cst[1])
- {
- $dir = undef;
- }
- else
- {
- do
- {
- unless (defined ($dir = readdir(PARENT)))
- {
- carp "readdir($dotdots): $!";
- closedir(PARENT);
- return '';
- }
- $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir"))
- }
- while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] ||
- $tst[1] != $pst[1]);
- }
- $cwd = (defined $dir ? "$dir" : "" ) . "/$cwd" ;
- closedir(PARENT);
- } while (defined $dir);
- chop($cwd) unless $cwd eq '/'; # drop the trailing /
- $cwd;
-}
-
-# added function alias for those of us more
-# used to the libc function. --tchrist 27-Jan-00
-*realpath = \&abs_path;
-
-sub fast_abs_path {
- my $cwd = getcwd();
- my $path = @_ ? shift : '.';
- CORE::chdir($path) || croak "Cannot chdir to $path:$!";
- my $realpath = getcwd();
- CORE::chdir($cwd) || croak "Cannot chdir back to $cwd:$!";
- $realpath;
-}
-
-# added function alias to follow principle of least surprise
-# based on previous aliasing. --tchrist 27-Jan-00
-*fast_realpath = \&fast_abs_path;
-
-
-# --- PORTING SECTION ---
-
-# VMS: $ENV{'DEFAULT'} points to default directory at all times
-# 06-Mar-1996 Charles Bailey bailey@newman.upenn.edu
-# Note: Use of Cwd::chdir() causes the logical name PWD to be defined
-# in the process logical name table as the default device and directory
-# seen by Perl. This may not be the same as the default device
-# and directory seen by DCL after Perl exits, since the effects
-# the CRTL chdir() function persist only until Perl exits.
-
-sub _vms_cwd {
- return $ENV{'DEFAULT'};
-}
-
-sub _vms_abs_path {
- return $ENV{'DEFAULT'} unless @_;
- my $path = VMS::Filespec::pathify($_[0]);
- croak("Invalid path name $_[0]") unless defined $path;
- return VMS::Filespec::rmsexpand($path);
-}
-
-sub _os2_cwd {
- $ENV{'PWD'} = `cmd /c cd`;
- chop $ENV{'PWD'};
- $ENV{'PWD'} =~ s:\\:/:g ;
- return $ENV{'PWD'};
-}
-
-sub _win32_cwd {
- $ENV{'PWD'} = Win32::GetCwd();
- $ENV{'PWD'} =~ s:\\:/:g ;
- return $ENV{'PWD'};
-}
-
-*_NT_cwd = \&_win32_cwd if (!defined &_NT_cwd &&
- defined &Win32::GetCwd);
-
-*_NT_cwd = \&_os2_cwd unless defined &_NT_cwd;
-
-sub _dos_cwd {
- if (!defined &Dos::GetCwd) {
- $ENV{'PWD'} = `command /c cd`;
- chop $ENV{'PWD'};
- $ENV{'PWD'} =~ s:\\:/:g ;
- } else {
- $ENV{'PWD'} = Dos::GetCwd();
- }
- return $ENV{'PWD'};
-}
-
-sub _qnx_cwd {
- $ENV{'PWD'} = `/usr/bin/fullpath -t`;
- chop $ENV{'PWD'};
- return $ENV{'PWD'};
-}
-
-sub _qnx_abs_path {
- my $path = @_ ? shift : '.';
- my $realpath=`/usr/bin/fullpath -t $path`;
- chop $realpath;
- return $realpath;
-}
-
-sub _epoc_cwd {
- $ENV{'PWD'} = EPOC::getcwd();
- return $ENV{'PWD'};
-}
-
-{
- no warnings; # assignments trigger 'subroutine redefined' warning
-
- if ($^O eq 'VMS') {
- *cwd = \&_vms_cwd;
- *getcwd = \&_vms_cwd;
- *fastcwd = \&_vms_cwd;
- *fastgetcwd = \&_vms_cwd;
- *abs_path = \&_vms_abs_path;
- *fast_abs_path = \&_vms_abs_path;
- }
- elsif ($^O eq 'NT' or $^O eq 'MSWin32') {
- # We assume that &_NT_cwd is defined as an XSUB or in the core.
- *cwd = \&_NT_cwd;
- *getcwd = \&_NT_cwd;
- *fastcwd = \&_NT_cwd;
- *fastgetcwd = \&_NT_cwd;
- *abs_path = \&fast_abs_path;
- }
- elsif ($^O eq 'os2') {
- # sys_cwd may keep the builtin command
- *cwd = defined &sys_cwd ? \&sys_cwd : \&_os2_cwd;
- *getcwd = \&cwd;
- *fastgetcwd = \&cwd;
- *fastcwd = \&cwd;
- *abs_path = \&fast_abs_path;
- }
- elsif ($^O eq 'dos') {
- *cwd = \&_dos_cwd;
- *getcwd = \&_dos_cwd;
- *fastgetcwd = \&_dos_cwd;
- *fastcwd = \&_dos_cwd;
- *abs_path = \&fast_abs_path;
- }
- elsif ($^O eq 'qnx') {
- *cwd = \&_qnx_cwd;
- *getcwd = \&_qnx_cwd;
- *fastgetcwd = \&_qnx_cwd;
- *fastcwd = \&_qnx_cwd;
- *abs_path = \&_qnx_abs_path;
- *fast_abs_path = \&_qnx_abs_path;
- }
- elsif ($^O eq 'cygwin') {
- *getcwd = \&cwd;
- *fastgetcwd = \&cwd;
- *fastcwd = \&cwd;
- *abs_path = \&fast_abs_path;
- }
- elsif ($^O eq 'epoc') {
- *cwd = \&_epoc_cwd;
- *getcwd = \&_epoc_cwd;
- *fastgetcwd = \&_epoc_cwd;
- *fastcwd = \&_epoc_cwd;
- *abs_path = \&fast_abs_path;
- }
- elsif ($^O eq 'MacOS') {
- *getcwd = \&cwd;
- *fastgetcwd = \&cwd;
- *fastcwd = \&cwd;
- *abs_path = \&fast_abs_path;
- }
-}
-
-# package main; eval join('',<DATA>) || die $@; # quick test
-
-1;
-
-__END__
-BEGIN { import Cwd qw(:DEFAULT chdir); }
-print join("\n", cwd, getcwd, fastcwd, "");
-chdir('..');
-print join("\n", cwd, getcwd, fastcwd, "");
-print "$ENV{PWD}\n";
diff --git a/contrib/perl5/lib/DB.pm b/contrib/perl5/lib/DB.pm
deleted file mode 100644
index 711acc0..0000000
--- a/contrib/perl5/lib/DB.pm
+++ /dev/null
@@ -1,802 +0,0 @@
-#
-# Documentation is at the __END__
-#
-
-package DB;
-
-# "private" globals
-
-my ($running, $ready, $deep, $usrctxt, $evalarg,
- @stack, @saved, @skippkg, @clients);
-my $preeval = {};
-my $posteval = {};
-my $ineval = {};
-
-####
-#
-# Globals - must be defined at startup so that clients can refer to
-# them right after a C<require DB;>
-#
-####
-
-BEGIN {
-
- # these are hardcoded in perl source (some are magical)
-
- $DB::sub = ''; # name of current subroutine
- %DB::sub = (); # "filename:fromline-toline" for every known sub
- $DB::single = 0; # single-step flag (set it to 1 to enable stops in BEGIN/use)
- $DB::signal = 0; # signal flag (will cause a stop at the next line)
- $DB::trace = 0; # are we tracing through subroutine calls?
- @DB::args = (); # arguments of current subroutine or @ARGV array
- @DB::dbline = (); # list of lines in currently loaded file
- %DB::dbline = (); # actions in current file (keyed by line number)
- @DB::ret = (); # return value of last sub executed in list context
- $DB::ret = ''; # return value of last sub executed in scalar context
-
- # other "public" globals
-
- $DB::package = ''; # current package space
- $DB::filename = ''; # current filename
- $DB::subname = ''; # currently executing sub (fullly qualified name)
- $DB::lineno = ''; # current line number
-
- $DB::VERSION = $DB::VERSION = '1.0';
-
- # initialize private globals to avoid warnings
-
- $running = 1; # are we running, or are we stopped?
- @stack = (0);
- @clients = ();
- $deep = 100;
- $ready = 0;
- @saved = ();
- @skippkg = ();
- $usrctxt = '';
- $evalarg = '';
-}
-
-####
-# entry point for all subroutine calls
-#
-sub sub {
- push(@stack, $DB::single);
- $DB::single &= 1;
- $DB::single |= 4 if $#stack == $deep;
-# print $DB::sub, "\n";
- if ($DB::sub =~ /(?:^|::)DESTROY$/ or not defined wantarray) {
- &$DB::sub;
- $DB::single |= pop(@stack);
- $DB::ret = undef;
- }
- elsif (wantarray) {
- @DB::ret = &$DB::sub;
- $DB::single |= pop(@stack);
- @DB::ret;
- }
- else {
- $DB::ret = &$DB::sub;
- $DB::single |= pop(@stack);
- $DB::ret;
- }
-}
-
-####
-# this is called by perl for every statement
-#
-sub DB {
- return unless $ready;
- &save;
- ($DB::package, $DB::filename, $DB::lineno) = caller;
-
- return if @skippkg and grep { $_ eq $DB::package } @skippkg;
-
- $usrctxt = "package $DB::package;"; # this won't let them modify, alas
- local(*DB::dbline) = "::_<$DB::filename";
- my ($stop, $action);
- if (($stop,$action) = split(/\0/,$DB::dbline{$DB::lineno})) {
- if ($stop eq '1') {
- $DB::signal |= 1;
- }
- else {
- $stop = 0 unless $stop; # avoid un_init warning
- $evalarg = "\$DB::signal |= do { $stop; }"; &eval;
- $DB::dbline{$DB::lineno} =~ s/;9($|\0)/$1/; # clear any temp breakpt
- }
- }
- if ($DB::single || $DB::trace || $DB::signal) {
- $DB::subname = ($DB::sub =~ /\'|::/) ? $DB::sub : "${DB::package}::$DB::sub"; #';
- DB->loadfile($DB::filename, $DB::lineno);
- }
- $evalarg = $action, &eval if $action;
- if ($DB::single || $DB::signal) {
- _outputall($#stack . " levels deep in subroutine calls.\n") if $DB::single & 4;
- $DB::single = 0;
- $DB::signal = 0;
- $running = 0;
-
- &eval if ($evalarg = DB->prestop);
- my $c;
- for $c (@clients) {
- # perform any client-specific prestop actions
- &eval if ($evalarg = $c->cprestop);
-
- # Now sit in an event loop until something sets $running
- do {
- $c->idle; # call client event loop; must not block
- if ($running == 2) { # client wants something eval-ed
- &eval if ($evalarg = $c->evalcode);
- $running = 0;
- }
- } until $running;
-
- # perform any client-specific poststop actions
- &eval if ($evalarg = $c->cpoststop);
- }
- &eval if ($evalarg = DB->poststop);
- }
- ($@, $!, $,, $/, $\, $^W) = @saved;
- ();
-}
-
-####
-# this takes its argument via $evalarg to preserve current @_
-#
-sub eval {
- ($@, $!, $,, $/, $\, $^W) = @saved;
- eval "$usrctxt $evalarg; &DB::save";
- _outputall($@) if $@;
-}
-
-###############################################################################
-# no compile-time subroutine call allowed before this point #
-###############################################################################
-
-use strict; # this can run only after DB() and sub() are defined
-
-sub save {
- @saved = ($@, $!, $,, $/, $\, $^W);
- $, = ""; $/ = "\n"; $\ = ""; $^W = 0;
-}
-
-sub catch {
- for (@clients) { $_->awaken; }
- $DB::signal = 1;
- $ready = 1;
-}
-
-####
-#
-# Client callable (read inheritable) methods defined after this point
-#
-####
-
-sub register {
- my $s = shift;
- $s = _clientname($s) if ref($s);
- push @clients, $s;
-}
-
-sub done {
- my $s = shift;
- $s = _clientname($s) if ref($s);
- @clients = grep {$_ ne $s} @clients;
- $s->cleanup;
-# $running = 3 unless @clients;
- exit(0) unless @clients;
-}
-
-sub _clientname {
- my $name = shift;
- "$name" =~ /^(.+)=[A-Z]+\(.+\)$/;
- return $1;
-}
-
-sub next {
- my $s = shift;
- $DB::single = 2;
- $running = 1;
-}
-
-sub step {
- my $s = shift;
- $DB::single = 1;
- $running = 1;
-}
-
-sub cont {
- my $s = shift;
- my $i = shift;
- $s->set_tbreak($i) if $i;
- for ($i = 0; $i <= $#stack;) {
- $stack[$i++] &= ~1;
- }
- $DB::single = 0;
- $running = 1;
-}
-
-####
-# XXX caller must experimentally determine $i (since it depends
-# on how many client call frames are between this call and the DB call).
-# Such is life.
-#
-sub ret {
- my $s = shift;
- my $i = shift; # how many levels to get to DB sub
- $i = 0 unless defined $i;
- $stack[$#stack-$i] |= 1;
- $DB::single = 0;
- $running = 1;
-}
-
-####
-# XXX caller must experimentally determine $start (since it depends
-# on how many client call frames are between this call and the DB call).
-# Such is life.
-#
-sub backtrace {
- my $self = shift;
- my $start = shift;
- my($p,$f,$l,$s,$h,$w,$e,$r,$a, @a, @ret,$i);
- $start = 1 unless $start;
- for ($i = $start; ($p,$f,$l,$s,$h,$w,$e,$r) = caller($i); $i++) {
- @a = @DB::args;
- for (@a) {
- s/'/\\'/g;
- s/([^\0]*)/'$1'/ unless /^-?[\d.]+$/;
- s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
- s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
- }
- $w = $w ? '@ = ' : '$ = ';
- $a = $h ? '(' . join(', ', @a) . ')' : '';
- $e =~ s/\n\s*\;\s*\Z// if $e;
- $e =~ s/[\\\']/\\$1/g if $e;
- if ($r) {
- $s = "require '$e'";
- } elsif (defined $r) {
- $s = "eval '$e'";
- } elsif ($s eq '(eval)') {
- $s = "eval {...}";
- }
- $f = "file `$f'" unless $f eq '-e';
- push @ret, "$w&$s$a from $f line $l";
- last if $DB::signal;
- }
- return @ret;
-}
-
-sub _outputall {
- my $c;
- for $c (@clients) {
- $c->output(@_);
- }
-}
-
-sub trace_toggle {
- my $s = shift;
- $DB::trace = !$DB::trace;
-}
-
-
-####
-# without args: returns all defined subroutine names
-# with subname args: returns a listref [file, start, end]
-#
-sub subs {
- my $s = shift;
- if (@_) {
- my(@ret) = ();
- while (@_) {
- my $name = shift;
- push @ret, [$DB::sub{$name} =~ /^(.*)\:(\d+)-(\d+)$/]
- if exists $DB::sub{$name};
- }
- return @ret;
- }
- return keys %DB::sub;
-}
-
-####
-# first argument is a filename whose subs will be returned
-# if a filename is not supplied, all subs in the current
-# filename are returned.
-#
-sub filesubs {
- my $s = shift;
- my $fname = shift;
- $fname = $DB::filename unless $fname;
- return grep { $DB::sub{$_} =~ /^$fname/ } keys %DB::sub;
-}
-
-####
-# returns a list of all filenames that DB knows about
-#
-sub files {
- my $s = shift;
- my(@f) = grep(m|^_<|, keys %main::);
- return map { substr($_,2) } @f;
-}
-
-####
-# returns reference to an array holding the lines in currently
-# loaded file
-#
-sub lines {
- my $s = shift;
- return \@DB::dbline;
-}
-
-####
-# loadfile($file, $line)
-#
-sub loadfile {
- my $s = shift;
- my($file, $line) = @_;
- if (!defined $main::{'_<' . $file}) {
- my $try;
- if (($try) = grep(m|^_<.*$file|, keys %main::)) {
- $file = substr($try,2);
- }
- }
- if (defined($main::{'_<' . $file})) {
- my $c;
-# _outputall("Loading file $file..");
- *DB::dbline = "::_<$file";
- $DB::filename = $file;
- for $c (@clients) {
-# print "2 ", $file, '|', $line, "\n";
- $c->showfile($file, $line);
- }
- return $file;
- }
- return undef;
-}
-
-sub lineevents {
- my $s = shift;
- my $fname = shift;
- my(%ret) = ();
- my $i;
- $fname = $DB::filename unless $fname;
- local(*DB::dbline) = "::_<$fname";
- for ($i = 1; $i <= $#DB::dbline; $i++) {
- $ret{$i} = [$DB::dbline[$i], split(/\0/, $DB::dbline{$i})]
- if defined $DB::dbline{$i};
- }
- return %ret;
-}
-
-sub set_break {
- my $s = shift;
- my $i = shift;
- my $cond = shift;
- $i ||= $DB::lineno;
- $cond ||= '1';
- $i = _find_subline($i) if ($i =~ /\D/);
- $s->output("Subroutine not found.\n") unless $i;
- if ($i) {
- if ($DB::dbline[$i] == 0) {
- $s->output("Line $i not breakable.\n");
- }
- else {
- $DB::dbline{$i} =~ s/^[^\0]*/$cond/;
- }
- }
-}
-
-sub set_tbreak {
- my $s = shift;
- my $i = shift;
- $i = _find_subline($i) if ($i =~ /\D/);
- $s->output("Subroutine not found.\n") unless $i;
- if ($i) {
- if ($DB::dbline[$i] == 0) {
- $s->output("Line $i not breakable.\n");
- }
- else {
- $DB::dbline{$i} =~ s/($|\0)/;9$1/; # add one-time-only b.p.
- }
- }
-}
-
-sub _find_subline {
- my $name = shift;
- $name =~ s/\'/::/;
- $name = "${DB::package}\:\:" . $name if $name !~ /::/;
- $name = "main" . $name if substr($name,0,2) eq "::";
- my($fname, $from, $to) = ($DB::sub{$name} =~ /^(.*):(\d+)-(\d+)$/);
- if ($from) {
- # XXX this needs local()-ization of some sort
- *DB::dbline = "::_<$fname";
- ++$from while $DB::dbline[$from] == 0 && $from < $to;
- return $from;
- }
- return undef;
-}
-
-sub clr_breaks {
- my $s = shift;
- my $i;
- if (@_) {
- while (@_) {
- $i = shift;
- $i = _find_subline($i) if ($i =~ /\D/);
- $s->output("Subroutine not found.\n") unless $i;
- if (defined $DB::dbline{$i}) {
- $DB::dbline{$i} =~ s/^[^\0]+//;
- if ($DB::dbline{$i} =~ s/^\0?$//) {
- delete $DB::dbline{$i};
- }
- }
- }
- }
- else {
- for ($i = 1; $i <= $#DB::dbline ; $i++) {
- if (defined $DB::dbline{$i}) {
- $DB::dbline{$i} =~ s/^[^\0]+//;
- if ($DB::dbline{$i} =~ s/^\0?$//) {
- delete $DB::dbline{$i};
- }
- }
- }
- }
-}
-
-sub set_action {
- my $s = shift;
- my $i = shift;
- my $act = shift;
- $i = _find_subline($i) if ($i =~ /\D/);
- $s->output("Subroutine not found.\n") unless $i;
- if ($i) {
- if ($DB::dbline[$i] == 0) {
- $s->output("Line $i not actionable.\n");
- }
- else {
- $DB::dbline{$i} =~ s/\0[^\0]*//;
- $DB::dbline{$i} .= "\0" . $act;
- }
- }
-}
-
-sub clr_actions {
- my $s = shift;
- my $i;
- if (@_) {
- while (@_) {
- my $i = shift;
- $i = _find_subline($i) if ($i =~ /\D/);
- $s->output("Subroutine not found.\n") unless $i;
- if ($i && $DB::dbline[$i] != 0) {
- $DB::dbline{$i} =~ s/\0[^\0]*//;
- delete $DB::dbline{$i} if $DB::dbline{$i} =~ s/^\0?$//;
- }
- }
- }
- else {
- for ($i = 1; $i <= $#DB::dbline ; $i++) {
- if (defined $DB::dbline{$i}) {
- $DB::dbline{$i} =~ s/\0[^\0]*//;
- delete $DB::dbline{$i} if $DB::dbline{$i} =~ s/^\0?$//;
- }
- }
- }
-}
-
-sub prestop {
- my ($client, $val) = @_;
- return defined($val) ? $preeval->{$client} = $val : $preeval->{$client};
-}
-
-sub poststop {
- my ($client, $val) = @_;
- return defined($val) ? $posteval->{$client} = $val : $posteval->{$client};
-}
-
-#
-# "pure virtual" methods
-#
-
-# client-specific pre/post-stop actions.
-sub cprestop {}
-sub cpoststop {}
-
-# client complete startup
-sub awaken {}
-
-sub skippkg {
- my $s = shift;
- push @skippkg, @_ if @_;
-}
-
-sub evalcode {
- my ($client, $val) = @_;
- if (defined $val) {
- $running = 2; # hand over to DB() to evaluate in its context
- $ineval->{$client} = $val;
- }
- return $ineval->{$client};
-}
-
-sub ready {
- my $s = shift;
- return $ready = 1;
-}
-
-# stubs
-
-sub init {}
-sub stop {}
-sub idle {}
-sub cleanup {}
-sub output {}
-
-#
-# client init
-#
-for (@clients) { $_->init }
-
-$SIG{'INT'} = \&DB::catch;
-
-# disable this if stepping through END blocks is desired
-# (looks scary and deconstructivist with Swat)
-END { $ready = 0 }
-
-1;
-__END__
-
-=head1 NAME
-
-DB - programmatic interface to the Perl debugging API (draft, subject to
-change)
-
-=head1 SYNOPSIS
-
- package CLIENT;
- use DB;
- @ISA = qw(DB);
-
- # these (inherited) methods can be called by the client
-
- CLIENT->register() # register a client package name
- CLIENT->done() # de-register from the debugging API
- CLIENT->skippkg('hide::hide') # ask DB not to stop in this package
- CLIENT->cont([WHERE]) # run some more (until BREAK or another breakpt)
- CLIENT->step() # single step
- CLIENT->next() # step over
- CLIENT->ret() # return from current subroutine
- CLIENT->backtrace() # return the call stack description
- CLIENT->ready() # call when client setup is done
- CLIENT->trace_toggle() # toggle subroutine call trace mode
- CLIENT->subs([SUBS]) # return subroutine information
- CLIENT->files() # return list of all files known to DB
- CLIENT->lines() # return lines in currently loaded file
- CLIENT->loadfile(FILE,LINE) # load a file and let other clients know
- CLIENT->lineevents() # return info on lines with actions
- CLIENT->set_break([WHERE],[COND])
- CLIENT->set_tbreak([WHERE])
- CLIENT->clr_breaks([LIST])
- CLIENT->set_action(WHERE,ACTION)
- CLIENT->clr_actions([LIST])
- CLIENT->evalcode(STRING) # eval STRING in executing code's context
- CLIENT->prestop([STRING]) # execute in code context before stopping
- CLIENT->poststop([STRING])# execute in code context before resuming
-
- # These methods will be called at the appropriate times.
- # Stub versions provided do nothing.
- # None of these can block.
-
- CLIENT->init() # called when debug API inits itself
- CLIENT->stop(FILE,LINE) # when execution stops
- CLIENT->idle() # while stopped (can be a client event loop)
- CLIENT->cleanup() # just before exit
- CLIENT->output(LIST) # called to print any output that API must show
-
-=head1 DESCRIPTION
-
-Perl debug information is frequently required not just by debuggers,
-but also by modules that need some "special" information to do their
-job properly, like profilers.
-
-This module abstracts and provides all of the hooks into Perl internal
-debugging functionality, so that various implementations of Perl debuggers
-(or packages that want to simply get at the "privileged" debugging data)
-can all benefit from the development of this common code. Currently used
-by Swat, the perl/Tk GUI debugger.
-
-Note that multiple "front-ends" can latch into this debugging API
-simultaneously. This is intended to facilitate things like
-debugging with a command line and GUI at the same time, debugging
-debuggers etc. [Sounds nice, but this needs some serious support -- GSAR]
-
-In particular, this API does B<not> provide the following functions:
-
-=over 4
-
-=item *
-
-data display
-
-=item *
-
-command processing
-
-=item *
-
-command alias management
-
-=item *
-
-user interface (tty or graphical)
-
-=back
-
-These are intended to be services performed by the clients of this API.
-
-This module attempts to be squeaky clean w.r.t C<use strict;> and when
-warnings are enabled.
-
-
-=head2 Global Variables
-
-The following "public" global names can be read by clients of this API.
-Beware that these should be considered "readonly".
-
-=over 8
-
-=item $DB::sub
-
-Name of current executing subroutine.
-
-=item %DB::sub
-
-The keys of this hash are the names of all the known subroutines. Each value
-is an encoded string that has the sprintf(3) format
-C<("%s:%d-%d", filename, fromline, toline)>.
-
-=item $DB::single
-
-Single-step flag. Will be true if the API will stop at the next statement.
-
-=item $DB::signal
-
-Signal flag. Will be set to a true value if a signal was caught. Clients may
-check for this flag to abort time-consuming operations.
-
-=item $DB::trace
-
-This flag is set to true if the API is tracing through subroutine calls.
-
-=item @DB::args
-
-Contains the arguments of current subroutine, or the C<@ARGV> array if in the
-toplevel context.
-
-=item @DB::dbline
-
-List of lines in currently loaded file.
-
-=item %DB::dbline
-
-Actions in current file (keys are line numbers). The values are strings that
-have the sprintf(3) format C<("%s\000%s", breakcondition, actioncode)>.
-
-=item $DB::package
-
-Package namespace of currently executing code.
-
-=item $DB::filename
-
-Currently loaded filename.
-
-=item $DB::subname
-
-Fully qualified name of currently executing subroutine.
-
-=item $DB::lineno
-
-Line number that will be executed next.
-
-=back
-
-=head2 API Methods
-
-The following are methods in the DB base class. A client must
-access these methods by inheritance (*not* by calling them directly),
-since the API keeps track of clients through the inheritance
-mechanism.
-
-=over 8
-
-=item CLIENT->register()
-
-register a client object/package
-
-=item CLIENT->evalcode(STRING)
-
-eval STRING in executing code context
-
-=item CLIENT->skippkg('D::hide')
-
-ask DB not to stop in these packages
-
-=item CLIENT->run()
-
-run some more (until a breakpt is reached)
-
-=item CLIENT->step()
-
-single step
-
-=item CLIENT->next()
-
-step over
-
-=item CLIENT->done()
-
-de-register from the debugging API
-
-=back
-
-=head2 Client Callback Methods
-
-The following "virtual" methods can be defined by the client. They will
-be called by the API at appropriate points. Note that unless specified
-otherwise, the debug API only defines empty, non-functional default versions
-of these methods.
-
-=over 8
-
-=item CLIENT->init()
-
-Called after debug API inits itself.
-
-=item CLIENT->prestop([STRING])
-
-Usually inherited from DB package. If no arguments are passed,
-returns the prestop action string.
-
-=item CLIENT->stop()
-
-Called when execution stops (w/ args file, line).
-
-=item CLIENT->idle()
-
-Called while stopped (can be a client event loop).
-
-=item CLIENT->poststop([STRING])
-
-Usually inherited from DB package. If no arguments are passed,
-returns the poststop action string.
-
-=item CLIENT->evalcode(STRING)
-
-Usually inherited from DB package. Ask for a STRING to be C<eval>-ed
-in executing code context.
-
-=item CLIENT->cleanup()
-
-Called just before exit.
-
-=item CLIENT->output(LIST)
-
-Called when API must show a message (warnings, errors etc.).
-
-
-=back
-
-
-=head1 BUGS
-
-The interface defined by this module is missing some of the later additions
-to perl's debugging functionality. As such, this interface should be considered
-highly experimental and subject to change.
-
-=head1 AUTHOR
-
-Gurusamy Sarathy gsar@activestate.com
-
-This code heavily adapted from an early version of perl5db.pl attributable
-to Larry Wall and the Perl Porters.
-
-=cut
diff --git a/contrib/perl5/lib/Devel/SelfStubber.pm b/contrib/perl5/lib/Devel/SelfStubber.pm
deleted file mode 100644
index 4c2d039..0000000
--- a/contrib/perl5/lib/Devel/SelfStubber.pm
+++ /dev/null
@@ -1,139 +0,0 @@
-package Devel::SelfStubber;
-require SelfLoader;
-@ISA = qw(SelfLoader);
-@EXPORT = 'AUTOLOAD';
-$JUST_STUBS = 1;
-$VERSION = 1.01; sub Version {$VERSION}
-
-# Use as
-# perl -e 'use Devel::SelfStubber;Devel::SelfStubber->stub(MODULE_NAME,LIB)'
-# (LIB defaults to '.') e.g.
-# perl -e 'use Devel::SelfStubber;Devel::SelfStubber->stub('Math::BigInt')'
-# would print out stubs needed if you added a __DATA__ before the subs.
-# Setting $Devel::SelfStubber::JUST_STUBS to 0 will print out the whole
-# module with the stubs entered just before the __DATA__
-
-sub _add_to_cache {
- my($self,$fullname,$pack,$lines, $prototype) = @_;
- push(@DATA,@{$lines});
- if($fullname){push(@STUBS,"sub $fullname $prototype;\n")}; # stubs
- '1;';
-}
-
-sub _package_defined {
- my($self,$line) = @_;
- push(@DATA,$line);
-}
-
-sub stub {
- my($self,$module,$lib) = @_;
- my($line,$end,$fh,$mod_file,$found_selfloader);
- $lib ||= '.';
- ($mod_file = $module) =~ s,::,/,g;
-
- $mod_file = "$lib/$mod_file.pm";
- $fh = "${module}::DATA";
-
- open($fh,$mod_file) || die "Unable to open $mod_file";
- while(defined ($line = <$fh>) and $line !~ m/^__DATA__/) {
- push(@BEFORE_DATA,$line);
- $line =~ /use\s+SelfLoader/ && $found_selfloader++;
- }
- $line =~ m/^__DATA__/ || die "$mod_file doesn't contain a __DATA__ token";
- $found_selfloader ||
- print 'die "\'use SelfLoader;\' statement NOT FOUND!!\n"',"\n";
- $self->_load_stubs($module);
- if ( fileno($fh) ) {
- $end = 1;
- while(defined($line = <$fh>)) {
- push(@AFTER_DATA,$line);
- }
- }
- unless ($JUST_STUBS) {
- print @BEFORE_DATA;
- }
- print @STUBS;
- unless ($JUST_STUBS) {
- print "1;\n__DATA__\n",@DATA;
- if($end) { print "__END__\n",@AFTER_DATA; }
- }
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Devel::SelfStubber - generate stubs for a SelfLoading module
-
-=head1 SYNOPSIS
-
-To generate just the stubs:
-
- use Devel::SelfStubber;
- Devel::SelfStubber->stub('MODULENAME','MY_LIB_DIR');
-
-or to generate the whole module with stubs inserted correctly
-
- use Devel::SelfStubber;
- $Devel::SelfStubber::JUST_STUBS=0;
- Devel::SelfStubber->stub('MODULENAME','MY_LIB_DIR');
-
-MODULENAME is the Perl module name, e.g. Devel::SelfStubber,
-NOT 'Devel/SelfStubber' or 'Devel/SelfStubber.pm'.
-
-MY_LIB_DIR defaults to '.' if not present.
-
-=head1 DESCRIPTION
-
-Devel::SelfStubber prints the stubs you need to put in the module
-before the __DATA__ token (or you can get it to print the entire
-module with stubs correctly placed). The stubs ensure that if
-a method is called, it will get loaded. They are needed specifically
-for inherited autoloaded methods.
-
-This is best explained using the following example:
-
-Assume four classes, A,B,C & D.
-
-A is the root class, B is a subclass of A, C is a subclass of B,
-and D is another subclass of A.
-
- A
- / \
- B D
- /
- C
-
-If D calls an autoloaded method 'foo' which is defined in class A,
-then the method is loaded into class A, then executed. If C then
-calls method 'foo', and that method was reimplemented in class
-B, but set to be autoloaded, then the lookup mechanism never gets to
-the AUTOLOAD mechanism in B because it first finds the method
-already loaded in A, and so erroneously uses that. If the method
-foo had been stubbed in B, then the lookup mechanism would have
-found the stub, and correctly loaded and used the sub from B.
-
-So, for classes and subclasses to have inheritance correctly
-work with autoloading, you need to ensure stubs are loaded.
-
-The SelfLoader can load stubs automatically at module initialization
-with the statement 'SelfLoader-E<gt>load_stubs()';, but you may wish to
-avoid having the stub loading overhead associated with your
-initialization (though note that the SelfLoader::load_stubs method
-will be called sooner or later - at latest when the first sub
-is being autoloaded). In this case, you can put the sub stubs
-before the __DATA__ token. This can be done manually, but this
-module allows automatic generation of the stubs.
-
-By default it just prints the stubs, but you can set the
-global $Devel::SelfStubber::JUST_STUBS to 0 and it will
-print out the entire module with the stubs positioned correctly.
-
-At the very least, this is useful to see what the SelfLoader
-thinks are stubs - in order to ensure future versions of the
-SelfStubber remain in step with the SelfLoader, the
-SelfStubber actually uses the SelfLoader to determine which
-stubs are needed.
-
-=cut
diff --git a/contrib/perl5/lib/DirHandle.pm b/contrib/perl5/lib/DirHandle.pm
deleted file mode 100644
index 047755d..0000000
--- a/contrib/perl5/lib/DirHandle.pm
+++ /dev/null
@@ -1,72 +0,0 @@
-package DirHandle;
-
-=head1 NAME
-
-DirHandle - supply object methods for directory handles
-
-=head1 SYNOPSIS
-
- use DirHandle;
- $d = new DirHandle ".";
- if (defined $d) {
- while (defined($_ = $d->read)) { something($_); }
- $d->rewind;
- while (defined($_ = $d->read)) { something_else($_); }
- undef $d;
- }
-
-=head1 DESCRIPTION
-
-The C<DirHandle> method provide an alternative interface to the
-opendir(), closedir(), readdir(), and rewinddir() functions.
-
-The only objective benefit to using C<DirHandle> is that it avoids
-namespace pollution by creating globs to hold directory handles.
-
-=cut
-
-require 5.000;
-use Carp;
-use Symbol;
-
-sub new {
- @_ >= 1 && @_ <= 2 or croak 'usage: new DirHandle [DIRNAME]';
- my $class = shift;
- my $dh = gensym;
- if (@_) {
- DirHandle::open($dh, $_[0])
- or return undef;
- }
- bless $dh, $class;
-}
-
-sub DESTROY {
- my ($dh) = @_;
- closedir($dh);
-}
-
-sub open {
- @_ == 2 or croak 'usage: $dh->open(DIRNAME)';
- my ($dh, $dirname) = @_;
- opendir($dh, $dirname);
-}
-
-sub close {
- @_ == 1 or croak 'usage: $dh->close()';
- my ($dh) = @_;
- closedir($dh);
-}
-
-sub read {
- @_ == 1 or croak 'usage: $dh->read()';
- my ($dh) = @_;
- readdir($dh);
-}
-
-sub rewind {
- @_ == 1 or croak 'usage: $dh->rewind()';
- my ($dh) = @_;
- rewinddir($dh);
-}
-
-1;
diff --git a/contrib/perl5/lib/Dumpvalue.pm b/contrib/perl5/lib/Dumpvalue.pm
deleted file mode 100644
index 475f4ff..0000000
--- a/contrib/perl5/lib/Dumpvalue.pm
+++ /dev/null
@@ -1,626 +0,0 @@
-use 5.005_64; # for (defined ref) and $#$v and our
-package Dumpvalue;
-use strict;
-our(%address, $stab, @stab, %stab, %subs);
-
-# translate control chars to ^X - Randal Schwartz
-# Modifications to print types by Peter Gordon v1.0
-
-# Ilya Zakharevich -- patches after 5.001 (and some before ;-)
-
-# Won't dump symbol tables and contents of debugged files by default
-
-# (IZ) changes for objectification:
-# c) quote() renamed to method set_quote();
-# d) unctrlSet() renamed to method set_unctrl();
-# f) Compiles with `use strict', but in two places no strict refs is needed:
-# maybe more problems are waiting...
-
-my %defaults = (
- globPrint => 0,
- printUndef => 1,
- tick => "auto",
- unctrl => 'quote',
- subdump => 1,
- dumpReused => 0,
- bareStringify => 1,
- hashDepth => '',
- arrayDepth => '',
- dumpDBFiles => '',
- dumpPackages => '',
- quoteHighBit => '',
- usageOnly => '',
- compactDump => '',
- veryCompact => '',
- stopDbSignal => '',
- );
-
-sub new {
- my $class = shift;
- my %opt = (%defaults, @_);
- bless \%opt, $class;
-}
-
-sub set {
- my $self = shift;
- my %opt = @_;
- @$self{keys %opt} = values %opt;
-}
-
-sub get {
- my $self = shift;
- wantarray ? @$self{@_} : $$self{pop @_};
-}
-
-sub dumpValue {
- my $self = shift;
- die "usage: \$dumper->dumpValue(value)" unless @_ == 1;
- local %address;
- local $^W=0;
- (print "undef\n"), return unless defined $_[0];
- (print $self->stringify($_[0]), "\n"), return unless ref $_[0];
- $self->unwrap($_[0],0);
-}
-
-sub dumpValues {
- my $self = shift;
- local %address;
- local $^W=0;
- (print "undef\n"), return unless defined $_[0];
- $self->unwrap(\@_,0);
-}
-
-# This one is good for variable names:
-
-sub unctrl {
- local($_) = @_;
-
- return \$_ if ref \$_ eq "GLOB";
- s/([\001-\037\177])/'^'.pack('c',ord($1)^64)/eg;
- $_;
-}
-
-sub stringify {
- my $self = shift;
- local $_ = shift;
- my $noticks = shift;
- my $tick = $self->{tick};
-
- return 'undef' unless defined $_ or not $self->{printUndef};
- return $_ . "" if ref \$_ eq 'GLOB';
- { no strict 'refs';
- $_ = &{'overload::StrVal'}($_)
- if $self->{bareStringify} and ref $_
- and %overload:: and defined &{'overload::StrVal'};
- }
-
- if ($tick eq 'auto') {
- if (/[\000-\011\013-\037\177]/) {
- $tick = '"';
- } else {
- $tick = "'";
- }
- }
- if ($tick eq "'") {
- s/([\'\\])/\\$1/g;
- } elsif ($self->{unctrl} eq 'unctrl') {
- s/([\"\\])/\\$1/g ;
- s/([\000-\037\177])/'^'.pack('c',ord($1)^64)/eg;
- s/([\200-\377])/'\\0x'.sprintf('%2X',ord($1))/eg
- if $self->{quoteHighBit};
- } elsif ($self->{unctrl} eq 'quote') {
- s/([\"\\\$\@])/\\$1/g if $tick eq '"';
- s/\033/\\e/g;
- s/([\000-\037\177])/'\\c'.chr(ord($1)^64)/eg;
- }
- s/([\200-\377])/'\\'.sprintf('%3o',ord($1))/eg if $self->{quoteHighBit};
- ($noticks || /^\d+(\.\d*)?\Z/)
- ? $_
- : $tick . $_ . $tick;
-}
-
-sub DumpElem {
- my ($self, $v) = (shift, shift);
- my $short = $self->stringify($v, ref $v);
- my $shortmore = '';
- if ($self->{veryCompact} && ref $v
- && (ref $v eq 'ARRAY' and !grep(ref $_, @$v) )) {
- my $depth = $#$v;
- ($shortmore, $depth) = (' ...', $self->{arrayDepth} - 1)
- if $self->{arrayDepth} and $depth >= $self->{arrayDepth};
- my @a = map $self->stringify($_), @$v[0..$depth];
- print "0..$#{$v} @a$shortmore\n";
- } elsif ($self->{veryCompact} && ref $v
- && (ref $v eq 'HASH') and !grep(ref $_, values %$v)) {
- my @a = sort keys %$v;
- my $depth = $#a;
- ($shortmore, $depth) = (' ...', $self->{hashDepth} - 1)
- if $self->{hashDepth} and $depth >= $self->{hashDepth};
- my @b = map {$self->stringify($_) . " => " . $self->stringify($$v{$_})}
- @a[0..$depth];
- local $" = ', ';
- print "@b$shortmore\n";
- } else {
- print "$short\n";
- $self->unwrap($v,shift);
- }
-}
-
-sub unwrap {
- my $self = shift;
- return if $DB::signal and $self->{stopDbSignal};
- my ($v) = shift ;
- my ($s) = shift ; # extra no of spaces
- my $sp;
- my (%v,@v,$address,$short,$fileno);
-
- $sp = " " x $s ;
- $s += 3 ;
-
- # Check for reused addresses
- if (ref $v) {
- my $val = $v;
- { no strict 'refs';
- $val = &{'overload::StrVal'}($v)
- if %overload:: and defined &{'overload::StrVal'};
- }
- ($address) = $val =~ /(0x[0-9a-f]+)\)$/ ;
- if (!$self->{dumpReused} && defined $address) {
- $address{$address}++ ;
- if ( $address{$address} > 1 ) {
- print "${sp}-> REUSED_ADDRESS\n" ;
- return ;
- }
- }
- } elsif (ref \$v eq 'GLOB') {
- $address = "$v" . ""; # To avoid a bug with globs
- $address{$address}++ ;
- if ( $address{$address} > 1 ) {
- print "${sp}*DUMPED_GLOB*\n" ;
- return ;
- }
- }
-
- if (ref $v eq 'Regexp') {
- my $re = "$v";
- $re =~ s,/,\\/,g;
- print "$sp-> qr/$re/\n";
- return;
- }
-
- if ( UNIVERSAL::isa($v, 'HASH') ) {
- my @sortKeys = sort keys(%$v) ;
- my $more;
- my $tHashDepth = $#sortKeys ;
- $tHashDepth = $#sortKeys < $self->{hashDepth}-1 ? $#sortKeys : $self->{hashDepth}-1
- unless $self->{hashDepth} eq '' ;
- $more = "....\n" if $tHashDepth < $#sortKeys ;
- my $shortmore = "";
- $shortmore = ", ..." if $tHashDepth < $#sortKeys ;
- $#sortKeys = $tHashDepth ;
- if ($self->{compactDump} && !grep(ref $_, values %{$v})) {
- $short = $sp;
- my @keys;
- for (@sortKeys) {
- push @keys, $self->stringify($_) . " => " . $self->stringify($v->{$_});
- }
- $short .= join ', ', @keys;
- $short .= $shortmore;
- (print "$short\n"), return if length $short <= $self->{compactDump};
- }
- for my $key (@sortKeys) {
- return if $DB::signal and $self->{stopDbSignal};
- my $value = $ {$v}{$key} ;
- print $sp, $self->stringify($key), " => ";
- $self->DumpElem($value, $s);
- }
- print "$sp empty hash\n" unless @sortKeys;
- print "$sp$more" if defined $more ;
- } elsif ( UNIVERSAL::isa($v, 'ARRAY') ) {
- my $tArrayDepth = $#{$v} ;
- my $more ;
- $tArrayDepth = $#$v < $self->{arrayDepth}-1 ? $#$v : $self->{arrayDepth}-1
- unless $self->{arrayDepth} eq '' ;
- $more = "....\n" if $tArrayDepth < $#{$v} ;
- my $shortmore = "";
- $shortmore = " ..." if $tArrayDepth < $#{$v} ;
- if ($self->{compactDump} && !grep(ref $_, @{$v})) {
- if ($#$v >= 0) {
- $short = $sp . "0..$#{$v} " .
- join(" ",
- map {exists $v->[$_] ? $self->stringify($v->[$_]) : "empty"} ($[..$tArrayDepth)
- ) . "$shortmore";
- } else {
- $short = $sp . "empty array";
- }
- (print "$short\n"), return if length $short <= $self->{compactDump};
- }
- for my $num ($[ .. $tArrayDepth) {
- return if $DB::signal and $self->{stopDbSignal};
- print "$sp$num ";
- if (exists $v->[$num]) {
- $self->DumpElem($v->[$num], $s);
- } else {
- print "empty slot\n";
- }
- }
- print "$sp empty array\n" unless @$v;
- print "$sp$more" if defined $more ;
- } elsif ( UNIVERSAL::isa($v, 'SCALAR') or ref $v eq 'REF' ) {
- print "$sp-> ";
- $self->DumpElem($$v, $s);
- } elsif ( UNIVERSAL::isa($v, 'CODE') ) {
- print "$sp-> ";
- $self->dumpsub(0, $v);
- } elsif ( UNIVERSAL::isa($v, 'GLOB') ) {
- print "$sp-> ",$self->stringify($$v,1),"\n";
- if ($self->{globPrint}) {
- $s += 3;
- $self->dumpglob('', $s, "{$$v}", $$v, 1);
- } elsif (defined ($fileno = fileno($v))) {
- print( (' ' x ($s+3)) . "FileHandle({$$v}) => fileno($fileno)\n" );
- }
- } elsif (ref \$v eq 'GLOB') {
- if ($self->{globPrint}) {
- $self->dumpglob('', $s, "{$v}", $v, 1);
- } elsif (defined ($fileno = fileno(\$v))) {
- print( (' ' x $s) . "FileHandle({$v}) => fileno($fileno)\n" );
- }
- }
-}
-
-sub matchvar {
- $_[0] eq $_[1] or
- ($_[1] =~ /^([!~])(.)([\x00-\xff]*)/) and
- ($1 eq '!') ^ (eval {($_[2] . "::" . $_[0]) =~ /$2$3/});
-}
-
-sub compactDump {
- my $self = shift;
- $self->{compactDump} = shift if @_;
- $self->{compactDump} = 6*80-1
- if $self->{compactDump} and $self->{compactDump} < 2;
- $self->{compactDump};
-}
-
-sub veryCompact {
- my $self = shift;
- $self->{veryCompact} = shift if @_;
- $self->compactDump(1) if !$self->{compactDump} and $self->{veryCompact};
- $self->{veryCompact};
-}
-
-sub set_unctrl {
- my $self = shift;
- if (@_) {
- my $in = shift;
- if ($in eq 'unctrl' or $in eq 'quote') {
- $self->{unctrl} = $in;
- } else {
- print "Unknown value for `unctrl'.\n";
- }
- }
- $self->{unctrl};
-}
-
-sub set_quote {
- my $self = shift;
- if (@_ and $_[0] eq '"') {
- $self->{tick} = '"';
- $self->{unctrl} = 'quote';
- } elsif (@_ and $_[0] eq 'auto') {
- $self->{tick} = 'auto';
- $self->{unctrl} = 'quote';
- } elsif (@_) { # Need to set
- $self->{tick} = "'";
- $self->{unctrl} = 'unctrl';
- }
- $self->{tick};
-}
-
-sub dumpglob {
- my $self = shift;
- return if $DB::signal and $self->{stopDbSignal};
- my ($package, $off, $key, $val, $all) = @_;
- local(*stab) = $val;
- my $fileno;
- if (($key !~ /^_</ or $self->{dumpDBFiles}) and defined $stab) {
- print( (' ' x $off) . "\$", &unctrl($key), " = " );
- $self->DumpElem($stab, 3+$off);
- }
- if (($key !~ /^_</ or $self->{dumpDBFiles}) and @stab) {
- print( (' ' x $off) . "\@$key = (\n" );
- $self->unwrap(\@stab,3+$off) ;
- print( (' ' x $off) . ")\n" );
- }
- if ($key ne "main::" && $key ne "DB::" && %stab
- && ($self->{dumpPackages} or $key !~ /::$/)
- && ($key !~ /^_</ or $self->{dumpDBFiles})
- && !($package eq "Dumpvalue" and $key eq "stab")) {
- print( (' ' x $off) . "\%$key = (\n" );
- $self->unwrap(\%stab,3+$off) ;
- print( (' ' x $off) . ")\n" );
- }
- if (defined ($fileno = fileno(*stab))) {
- print( (' ' x $off) . "FileHandle($key) => fileno($fileno)\n" );
- }
- if ($all) {
- if (defined &stab) {
- $self->dumpsub($off, $key);
- }
- }
-}
-
-sub CvGV_name {
- my $self = shift;
- my $in = shift;
- return if $self->{skipCvGV}; # Backdoor to avoid problems if XS broken...
- $in = \&$in; # Hard reference...
- eval {require Devel::Peek; 1} or return;
- my $gv = Devel::Peek::CvGV($in) or return;
- *$gv{PACKAGE} . '::' . *$gv{NAME};
-}
-
-sub dumpsub {
- my $self = shift;
- my ($off,$sub) = @_;
- my $ini = $sub;
- my $s;
- $sub = $1 if $sub =~ /^\{\*(.*)\}$/;
- my $subref = defined $1 ? \&$sub : \&$ini;
- my $place = $DB::sub{$sub} || (($s = $subs{"$subref"}) && $DB::sub{$s})
- || (($s = $self->CvGV_name($subref)) && $DB::sub{$s})
- || ($self->{subdump} && ($s = $self->findsubs("$subref"))
- && $DB::sub{$s});
- $s = $sub unless defined $s;
- $place = '???' unless defined $place;
- print( (' ' x $off) . "&$s in $place\n" );
-}
-
-sub findsubs {
- my $self = shift;
- return undef unless %DB::sub;
- my ($addr, $name, $loc);
- while (($name, $loc) = each %DB::sub) {
- $addr = \&$name;
- $subs{"$addr"} = $name;
- }
- $self->{subdump} = 0;
- $subs{ shift() };
-}
-
-sub dumpvars {
- my $self = shift;
- my ($package,@vars) = @_;
- local(%address,$^W);
- my ($key,$val);
- $package .= "::" unless $package =~ /::$/;
- *stab = *main::;
-
- while ($package =~ /(\w+?::)/g) {
- *stab = $ {stab}{$1};
- }
- $self->{TotalStrings} = 0;
- $self->{Strings} = 0;
- $self->{CompleteTotal} = 0;
- while (($key,$val) = each(%stab)) {
- return if $DB::signal and $self->{stopDbSignal};
- next if @vars && !grep( matchvar($key, $_), @vars );
- if ($self->{usageOnly}) {
- $self->globUsage(\$val, $key)
- if ($package ne 'Dumpvalue' or $key ne 'stab')
- and ref(\$val) eq 'GLOB';
- } else {
- $self->dumpglob($package, 0,$key, $val);
- }
- }
- if ($self->{usageOnly}) {
- print <<EOP;
-String space: $self->{TotalStrings} bytes in $self->{Strings} strings.
-EOP
- $self->{CompleteTotal} += $self->{TotalStrings};
- print <<EOP;
-Grand total = $self->{CompleteTotal} bytes (1 level deep) + overhead.
-EOP
- }
-}
-
-sub scalarUsage {
- my $self = shift;
- my $size = length($_[0]);
- $self->{TotalStrings} += $size;
- $self->{Strings}++;
- $size;
-}
-
-sub arrayUsage { # array ref, name
- my $self = shift;
- my $size = 0;
- map {$size += $self->scalarUsage($_)} @{$_[0]};
- my $len = @{$_[0]};
- print "\@$_[1] = $len item", ($len > 1 ? "s" : ""), " (data: $size bytes)\n"
- if defined $_[1];
- $self->{CompleteTotal} += $size;
- $size;
-}
-
-sub hashUsage { # hash ref, name
- my $self = shift;
- my @keys = keys %{$_[0]};
- my @values = values %{$_[0]};
- my $keys = $self->arrayUsage(\@keys);
- my $values = $self->arrayUsage(\@values);
- my $len = @keys;
- my $total = $keys + $values;
- print "\%$_[1] = $len item", ($len > 1 ? "s" : ""),
- " (keys: $keys; values: $values; total: $total bytes)\n"
- if defined $_[1];
- $total;
-}
-
-sub globUsage { # glob ref, name
- my $self = shift;
- local *stab = *{$_[0]};
- my $total = 0;
- $total += $self->scalarUsage($stab) if defined $stab;
- $total += $self->arrayUsage(\@stab, $_[1]) if @stab;
- $total += $self->hashUsage(\%stab, $_[1])
- if %stab and $_[1] ne "main::" and $_[1] ne "DB::";
- #and !($package eq "Dumpvalue" and $key eq "stab"));
- $total;
-}
-
-1;
-
-=head1 NAME
-
-Dumpvalue - provides screen dump of Perl data.
-
-=head1 SYNOPSIS
-
- use Dumpvalue;
- my $dumper = new Dumpvalue;
- $dumper->set(globPrint => 1);
- $dumper->dumpValue(\*::);
- $dumper->dumpvars('main');
-
-=head1 DESCRIPTION
-
-=head2 Creation
-
-A new dumper is created by a call
-
- $d = new Dumpvalue(option1 => value1, option2 => value2)
-
-Recognized options:
-
-=over
-
-=item C<arrayDepth>, C<hashDepth>
-
-Print only first N elements of arrays and hashes. If false, prints all the
-elements.
-
-=item C<compactDump>, C<veryCompact>
-
-Change style of array and hash dump. If true, short array
-may be printed on one line.
-
-=item C<globPrint>
-
-Whether to print contents of globs.
-
-=item C<DumpDBFiles>
-
-Dump arrays holding contents of debugged files.
-
-=item C<DumpPackages>
-
-Dump symbol tables of packages.
-
-=item C<DumpReused>
-
-Dump contents of "reused" addresses.
-
-=item C<tick>, C<HighBit>, C<printUndef>
-
-Change style of string dump. Default value of C<tick> is C<auto>, one
-can enable either double-quotish dump, or single-quotish by setting it
-to C<"> or C<'>. By default, characters with high bit set are printed
-I<as is>.
-
-=item C<UsageOnly>
-
-I<very> rudimentally per-package memory usage dump. If set,
-C<dumpvars> calculates total size of strings in variables in the package.
-
-=item unctrl
-
-Changes the style of printout of strings. Possible values are
-C<unctrl> and C<quote>.
-
-=item subdump
-
-Whether to try to find the subroutine name given the reference.
-
-=item bareStringify
-
-Whether to write the non-overloaded form of the stringify-overloaded objects.
-
-=item quoteHighBit
-
-Whether to print chars with high bit set in binary or "as is".
-
-=item stopDbSignal
-
-Whether to abort printing if debugger signal flag is raised.
-
-=back
-
-Later in the life of the object the methods may be queries with get()
-method and set() method (which accept multiple arguments).
-
-=head2 Methods
-
-=over
-
-=item dumpValue
-
- $dumper->dumpValue($value);
- $dumper->dumpValue([$value1, $value2]);
-
-=item dumpValues
-
- $dumper->dumpValues($value1, $value2);
-
-=item dumpvars
-
- $dumper->dumpvars('my_package');
- $dumper->dumpvars('my_package', 'foo', '~bar$', '!......');
-
-The optional arguments are considered as literal strings unless they
-start with C<~> or C<!>, in which case they are interpreted as regular
-expressions (possibly negated).
-
-The second example prints entries with names C<foo>, and also entries
-with names which ends on C<bar>, or are shorter than 5 chars.
-
-=item set_quote
-
- $d->set_quote('"');
-
-Sets C<tick> and C<unctrl> options to suitable values for printout with the
-given quote char. Possible values are C<auto>, C<'> and C<">.
-
-=item set_unctrl
-
- $d->set_unctrl('"');
-
-Sets C<unctrl> option with checking for an invalid argument.
-Possible values are C<unctrl> and C<quote>.
-
-=item compactDump
-
- $d->compactDump(1);
-
-Sets C<compactDump> option. If the value is 1, sets to a reasonable
-big number.
-
-=item veryCompact
-
- $d->veryCompact(1);
-
-Sets C<compactDump> and C<veryCompact> options simultaneously.
-
-=item set
-
- $d->set(option1 => value1, option2 => value2);
-
-=item get
-
- @values = $d->get('option1', 'option2');
-
-=back
-
-=cut
-
diff --git a/contrib/perl5/lib/English.pm b/contrib/perl5/lib/English.pm
deleted file mode 100644
index f38c313..0000000
--- a/contrib/perl5/lib/English.pm
+++ /dev/null
@@ -1,194 +0,0 @@
-package English;
-
-require Exporter;
-@ISA = (Exporter);
-
-=head1 NAME
-
-English - use nice English (or awk) names for ugly punctuation variables
-
-=head1 SYNOPSIS
-
- use English;
- ...
- if ($ERRNO =~ /denied/) { ... }
-
-=head1 DESCRIPTION
-
-This module provides aliases for the built-in variables whose
-names no one seems to like to read. Variables with side-effects
-which get triggered just by accessing them (like $0) will still
-be affected.
-
-For those variables that have an B<awk> version, both long
-and short English alternatives are provided. For example,
-the C<$/> variable can be referred to either $RS or
-$INPUT_RECORD_SEPARATOR if you are using the English module.
-
-See L<perlvar> for a complete list of these.
-
-=head1 BUGS
-
-This module provokes sizeable inefficiencies for regular expressions,
-due to unfortunate implementation details. If performance matters,
-consider avoiding English.
-
-=cut
-
-no warnings;
-
-# Grandfather $NAME import
-sub import {
- my $this = shift;
- my @list = @_;
- local $Exporter::ExportLevel = 1;
- Exporter::import($this,grep {s/^\$/*/} @list);
-}
-
-@EXPORT = qw(
- *ARG
- *MATCH
- *PREMATCH
- *POSTMATCH
- *LAST_PAREN_MATCH
- *INPUT_LINE_NUMBER
- *NR
- *INPUT_RECORD_SEPARATOR
- *RS
- *OUTPUT_AUTOFLUSH
- *OUTPUT_FIELD_SEPARATOR
- *OFS
- *OUTPUT_RECORD_SEPARATOR
- *ORS
- *LIST_SEPARATOR
- *SUBSCRIPT_SEPARATOR
- *SUBSEP
- *FORMAT_PAGE_NUMBER
- *FORMAT_LINES_PER_PAGE
- *FORMAT_LINES_LEFT
- *FORMAT_NAME
- *FORMAT_TOP_NAME
- *FORMAT_LINE_BREAK_CHARACTERS
- *FORMAT_FORMFEED
- *CHILD_ERROR
- *OS_ERROR
- *ERRNO
- *EXTENDED_OS_ERROR
- *EVAL_ERROR
- *PROCESS_ID
- *PID
- *REAL_USER_ID
- *UID
- *EFFECTIVE_USER_ID
- *EUID
- *REAL_GROUP_ID
- *GID
- *EFFECTIVE_GROUP_ID
- *EGID
- *PROGRAM_NAME
- *PERL_VERSION
- *ACCUMULATOR
- *DEBUGGING
- *SYSTEM_FD_MAX
- *INPLACE_EDIT
- *PERLDB
- *BASETIME
- *WARNING
- *EXECUTABLE_NAME
- *OSNAME
- *LAST_REGEXP_CODE_RESULT
- *EXCEPTIONS_BEING_CAUGHT
- @LAST_MATCH_START
- @LAST_MATCH_END
-);
-
-# The ground of all being. @ARG is deprecated (5.005 makes @_ lexical)
-
- *ARG = *_ ;
-
-# Matching.
-
- *MATCH = *& ;
- *PREMATCH = *` ;
- *POSTMATCH = *' ;
- *LAST_PAREN_MATCH = *+ ;
- *LAST_MATCH_START = *-{ARRAY} ;
- *LAST_MATCH_END = *+{ARRAY} ;
-
-# Input.
-
- *INPUT_LINE_NUMBER = *. ;
- *NR = *. ;
- *INPUT_RECORD_SEPARATOR = */ ;
- *RS = */ ;
-
-# Output.
-
- *OUTPUT_AUTOFLUSH = *| ;
- *OUTPUT_FIELD_SEPARATOR = *, ;
- *OFS = *, ;
- *OUTPUT_RECORD_SEPARATOR = *\ ;
- *ORS = *\ ;
-
-# Interpolation "constants".
-
- *LIST_SEPARATOR = *" ;
- *SUBSCRIPT_SEPARATOR = *; ;
- *SUBSEP = *; ;
-
-# Formats
-
- *FORMAT_PAGE_NUMBER = *% ;
- *FORMAT_LINES_PER_PAGE = *= ;
- *FORMAT_LINES_LEFT = *- ;
- *FORMAT_NAME = *~ ;
- *FORMAT_TOP_NAME = *^ ;
- *FORMAT_LINE_BREAK_CHARACTERS = *: ;
- *FORMAT_FORMFEED = *^L ;
-
-# Error status.
-
- *CHILD_ERROR = *? ;
- *OS_ERROR = *! ;
- *ERRNO = *! ;
- *EXTENDED_OS_ERROR = *^E ;
- *EVAL_ERROR = *@ ;
-
-# Process info.
-
- *PROCESS_ID = *$ ;
- *PID = *$ ;
- *REAL_USER_ID = *< ;
- *UID = *< ;
- *EFFECTIVE_USER_ID = *> ;
- *EUID = *> ;
- *REAL_GROUP_ID = *( ;
- *GID = *( ;
- *EFFECTIVE_GROUP_ID = *) ;
- *EGID = *) ;
- *PROGRAM_NAME = *0 ;
-
-# Internals.
-
- *PERL_VERSION = *^V ;
- *ACCUMULATOR = *^A ;
- *COMPILING = *^C ;
- *DEBUGGING = *^D ;
- *SYSTEM_FD_MAX = *^F ;
- *INPLACE_EDIT = *^I ;
- *PERLDB = *^P ;
- *LAST_REGEXP_CODE_RESULT = *^R ;
- *EXCEPTIONS_BEING_CAUGHT = *^S ;
- *BASETIME = *^T ;
- *WARNING = *^W ;
- *EXECUTABLE_NAME = *^X ;
- *OSNAME = *^O ;
-
-# Deprecated.
-
-# *ARRAY_BASE = *[ ;
-# *OFMT = *# ;
-# *MULTILINE_MATCHING = ** ;
-# *OLD_PERL_VERSION = *] ;
-
-1;
diff --git a/contrib/perl5/lib/Env.pm b/contrib/perl5/lib/Env.pm
deleted file mode 100644
index d1ee071..0000000
--- a/contrib/perl5/lib/Env.pm
+++ /dev/null
@@ -1,233 +0,0 @@
-package Env;
-
-=head1 NAME
-
-Env - perl module that imports environment variables as scalars or arrays
-
-=head1 SYNOPSIS
-
- use Env;
- use Env qw(PATH HOME TERM);
- use Env qw($SHELL @LD_LIBRARY_PATH);
-
-=head1 DESCRIPTION
-
-Perl maintains environment variables in a special hash named C<%ENV>. For
-when this access method is inconvenient, the Perl module C<Env> allows
-environment variables to be treated as scalar or array variables.
-
-The C<Env::import()> function ties environment variables with suitable
-names to global Perl variables with the same names. By default it
-ties all existing environment variables (C<keys %ENV>) to scalars. If
-the C<import> function receives arguments, it takes them to be a list of
-variables to tie; it's okay if they don't yet exist. The scalar type
-prefix '$' is inferred for any element of this list not prefixed by '$'
-or '@'. Arrays are implemented in terms of C<split> and C<join>, using
-C<$Config::Config{path_sep}> as the delimiter.
-
-After an environment variable is tied, merely use it like a normal variable.
-You may access its value
-
- @path = split(/:/, $PATH);
- print join("\n", @LD_LIBRARY_PATH), "\n";
-
-or modify it
-
- $PATH .= ":.";
- push @LD_LIBRARY_PATH, $dir;
-
-however you'd like. Bear in mind, however, that each access to a tied array
-variable requires splitting the environment variable's string anew.
-
-The code:
-
- use Env qw(@PATH);
- push @PATH, '.';
-
-is equivalent to:
-
- use Env qw(PATH);
- $PATH .= ":.";
-
-except that if C<$ENV{PATH}> started out empty, the second approach leaves
-it with the (odd) value "C<:.>", but the first approach leaves it with "C<.>".
-
-To remove a tied environment variable from
-the environment, assign it the undefined value
-
- undef $PATH;
- undef @LD_LIBRARY_PATH;
-
-=head1 LIMITATIONS
-
-On VMS systems, arrays tied to environment variables are read-only. Attempting
-to change anything will cause a warning.
-
-=head1 AUTHOR
-
-Chip Salzenberg E<lt>F<chip@fin.uucp>E<gt>
-and
-Gregor N. Purdy E<lt>F<gregor@focusresearch.com>E<gt>
-
-=cut
-
-sub import {
- my ($callpack) = caller(0);
- my $pack = shift;
- my @vars = grep /^[\$\@]?[A-Za-z_]\w*$/, (@_ ? @_ : keys(%ENV));
- return unless @vars;
-
- @vars = map { m/^[\$\@]/ ? $_ : '$'.$_ } @vars;
-
- eval "package $callpack; use vars qw(" . join(' ', @vars) . ")";
- die $@ if $@;
- foreach (@vars) {
- my ($type, $name) = m/^([\$\@])(.*)$/;
- if ($type eq '$') {
- tie ${"${callpack}::$name"}, Env, $name;
- } else {
- if ($^O eq 'VMS') {
- tie @{"${callpack}::$name"}, Env::Array::VMS, $name;
- } else {
- tie @{"${callpack}::$name"}, Env::Array, $name;
- }
- }
- }
-}
-
-sub TIESCALAR {
- bless \($_[1]);
-}
-
-sub FETCH {
- my ($self) = @_;
- $ENV{$$self};
-}
-
-sub STORE {
- my ($self, $value) = @_;
- if (defined($value)) {
- $ENV{$$self} = $value;
- } else {
- delete $ENV{$$self};
- }
-}
-
-######################################################################
-
-package Env::Array;
-
-use Config;
-use Tie::Array;
-
-@ISA = qw(Tie::Array);
-
-my $sep = $Config::Config{path_sep};
-
-sub TIEARRAY {
- bless \($_[1]);
-}
-
-sub FETCHSIZE {
- my ($self) = @_;
- my @temp = split($sep, $ENV{$$self});
- return scalar(@temp);
-}
-
-sub STORESIZE {
- my ($self, $size) = @_;
- my @temp = split($sep, $ENV{$$self});
- $#temp = $size - 1;
- $ENV{$$self} = join($sep, @temp);
-}
-
-sub CLEAR {
- my ($self) = @_;
- $ENV{$$self} = '';
-}
-
-sub FETCH {
- my ($self, $index) = @_;
- return (split($sep, $ENV{$$self}))[$index];
-}
-
-sub STORE {
- my ($self, $index, $value) = @_;
- my @temp = split($sep, $ENV{$$self});
- $temp[$index] = $value;
- $ENV{$$self} = join($sep, @temp);
- return $value;
-}
-
-sub PUSH {
- my $self = shift;
- my @temp = split($sep, $ENV{$$self});
- push @temp, @_;
- $ENV{$$self} = join($sep, @temp);
- return scalar(@temp);
-}
-
-sub POP {
- my ($self) = @_;
- my @temp = split($sep, $ENV{$$self});
- my $result = pop @temp;
- $ENV{$$self} = join($sep, @temp);
- return $result;
-}
-
-sub UNSHIFT {
- my $self = shift;
- my @temp = split($sep, $ENV{$$self});
- my $result = unshift @temp, @_;
- $ENV{$$self} = join($sep, @temp);
- return $result;
-}
-
-sub SHIFT {
- my ($self) = @_;
- my @temp = split($sep, $ENV{$$self});
- my $result = shift @temp;
- $ENV{$$self} = join($sep, @temp);
- return $result;
-}
-
-sub SPLICE {
- my $self = shift;
- my $offset = shift;
- my $length = shift;
- my @temp = split($sep, $ENV{$$self});
- if (wantarray) {
- my @result = splice @temp, $self, $offset, $length, @_;
- $ENV{$$self} = join($sep, @temp);
- return @result;
- } else {
- my $result = scalar splice @temp, $offset, $length, @_;
- $ENV{$$self} = join($sep, @temp);
- return $result;
- }
-}
-
-######################################################################
-
-package Env::Array::VMS;
-use Tie::Array;
-
-@ISA = qw(Tie::Array);
-
-sub TIEARRAY {
- bless \($_[1]);
-}
-
-sub FETCHSIZE {
- my ($self) = @_;
- my $i = 0;
- while ($i < 127 and defined $ENV{$$self . ';' . $i}) { $i++; };
- return $i;
-}
-
-sub FETCH {
- my ($self, $index) = @_;
- return $ENV{$$self . ';' . $index};
-}
-
-1;
diff --git a/contrib/perl5/lib/Exporter.pm b/contrib/perl5/lib/Exporter.pm
deleted file mode 100644
index 585109e..0000000
--- a/contrib/perl5/lib/Exporter.pm
+++ /dev/null
@@ -1,313 +0,0 @@
-package Exporter;
-
-require 5.001;
-
-$ExportLevel = 0;
-$Verbose ||= 0;
-$VERSION = '5.562';
-
-sub export_to_level {
- require Exporter::Heavy;
- goto &heavy_export_to_level;
-}
-
-sub export {
- require Exporter::Heavy;
- goto &heavy_export;
-}
-
-sub export_tags {
- require Exporter::Heavy;
- _push_tags((caller)[0], "EXPORT", \@_);
-}
-
-sub export_ok_tags {
- require Exporter::Heavy;
- _push_tags((caller)[0], "EXPORT_OK", \@_);
-}
-
-sub import {
- my $pkg = shift;
- my $callpkg = caller($ExportLevel);
- *exports = *{"$pkg\::EXPORT"};
- # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-(
- *fail = *{"$pkg\::EXPORT_FAIL"};
- return export $pkg, $callpkg, @_
- if $Verbose or $Debug or @fail > 1;
- my $args = @_ or @_ = @exports;
-
- if ($args and not %exports) {
- foreach my $sym (@exports, @{"$pkg\::EXPORT_OK"}) {
- $sym =~ s/^&//;
- $exports{$sym} = 1;
- }
- }
- if ($Verbose or $Debug
- or grep {/\W/ or $args and not exists $exports{$_}
- or @fail and $_ eq $fail[0]
- or (@{"$pkg\::EXPORT_OK"}
- and $_ eq ${"$pkg\::EXPORT_OK"}[0])} @_) {
- return export $pkg, $callpkg, ($args ? @_ : ());
- }
- #local $SIG{__WARN__} = sub {require Carp; goto &Carp::carp};
- local $SIG{__WARN__} =
- sub {require Carp; local $Carp::CarpLevel = 1; &Carp::carp};
- foreach $sym (@_) {
- # shortcut for the common case of no type character
- *{"$callpkg\::$sym"} = \&{"$pkg\::$sym"};
- }
-}
-
-1;
-
-# A simple self test harness. Change 'require Carp' to 'use Carp ()' for testing.
-# package main; eval(join('',<DATA>)) or die $@ unless caller;
-__END__
-package Test;
-$INC{'Exporter.pm'} = 1;
-@ISA = qw(Exporter);
-@EXPORT = qw(A1 A2 A3 A4 A5);
-@EXPORT_OK = qw(B1 B2 B3 B4 B5);
-%EXPORT_TAGS = (T1=>[qw(A1 A2 B1 B2)], T2=>[qw(A1 A2 B3 B4)], T3=>[qw(X3)]);
-@EXPORT_FAIL = qw(B4);
-Exporter::export_ok_tags('T3', 'unknown_tag');
-sub export_fail {
- map { "Test::$_" } @_ # edit symbols just as an example
-}
-
-package main;
-$Exporter::Verbose = 1;
-#import Test;
-#import Test qw(X3); # export ok via export_ok_tags()
-#import Test qw(:T1 !A2 /5/ !/3/ B5);
-import Test qw(:T2 !B4);
-import Test qw(:T2); # should fail
-1;
-
-=head1 NAME
-
-Exporter - Implements default import method for modules
-
-=head1 SYNOPSIS
-
-In module ModuleName.pm:
-
- package ModuleName;
- require Exporter;
- @ISA = qw(Exporter);
-
- @EXPORT = qw(...); # symbols to export by default
- @EXPORT_OK = qw(...); # symbols to export on request
- %EXPORT_TAGS = tag => [...]; # define names for sets of symbols
-
-In other files which wish to use ModuleName:
-
- use ModuleName; # import default symbols into my package
-
- use ModuleName qw(...); # import listed symbols into my package
-
- use ModuleName (); # do not import any symbols
-
-=head1 DESCRIPTION
-
-The Exporter module implements a default C<import> method which
-many modules choose to inherit rather than implement their own.
-
-Perl automatically calls the C<import> method when processing a
-C<use> statement for a module. Modules and C<use> are documented
-in L<perlfunc> and L<perlmod>. Understanding the concept of
-modules and how the C<use> statement operates is important to
-understanding the Exporter.
-
-=head2 How to Export
-
-The arrays C<@EXPORT> and C<@EXPORT_OK> in a module hold lists of
-symbols that are going to be exported into the users name space by
-default, or which they can request to be exported, respectively. The
-symbols can represent functions, scalars, arrays, hashes, or typeglobs.
-The symbols must be given by full name with the exception that the
-ampersand in front of a function is optional, e.g.
-
- @EXPORT = qw(afunc $scalar @array); # afunc is a function
- @EXPORT_OK = qw(&bfunc %hash *typeglob); # explicit prefix on &bfunc
-
-=head2 Selecting What To Export
-
-Do B<not> export method names!
-
-Do B<not> export anything else by default without a good reason!
-
-Exports pollute the namespace of the module user. If you must export
-try to use @EXPORT_OK in preference to @EXPORT and avoid short or
-common symbol names to reduce the risk of name clashes.
-
-Generally anything not exported is still accessible from outside the
-module using the ModuleName::item_name (or $blessed_ref-E<gt>method)
-syntax. By convention you can use a leading underscore on names to
-informally indicate that they are 'internal' and not for public use.
-
-(It is actually possible to get private functions by saying:
-
- my $subref = sub { ... };
- &$subref;
-
-But there's no way to call that directly as a method, since a method
-must have a name in the symbol table.)
-
-As a general rule, if the module is trying to be object oriented
-then export nothing. If it's just a collection of functions then
-@EXPORT_OK anything but use @EXPORT with caution.
-
-Other module design guidelines can be found in L<perlmod>.
-
-=head2 Specialised Import Lists
-
-If the first entry in an import list begins with !, : or / then the
-list is treated as a series of specifications which either add to or
-delete from the list of names to import. They are processed left to
-right. Specifications are in the form:
-
- [!]name This name only
- [!]:DEFAULT All names in @EXPORT
- [!]:tag All names in $EXPORT_TAGS{tag} anonymous list
- [!]/pattern/ All names in @EXPORT and @EXPORT_OK which match
-
-A leading ! indicates that matching names should be deleted from the
-list of names to import. If the first specification is a deletion it
-is treated as though preceded by :DEFAULT. If you just want to import
-extra names in addition to the default set you will still need to
-include :DEFAULT explicitly.
-
-e.g., Module.pm defines:
-
- @EXPORT = qw(A1 A2 A3 A4 A5);
- @EXPORT_OK = qw(B1 B2 B3 B4 B5);
- %EXPORT_TAGS = (T1 => [qw(A1 A2 B1 B2)], T2 => [qw(A1 A2 B3 B4)]);
-
- Note that you cannot use tags in @EXPORT or @EXPORT_OK.
- Names in EXPORT_TAGS must also appear in @EXPORT or @EXPORT_OK.
-
-An application using Module can say something like:
-
- use Module qw(:DEFAULT :T2 !B3 A3);
-
-Other examples include:
-
- use Socket qw(!/^[AP]F_/ !SOMAXCONN !SOL_SOCKET);
- use POSIX qw(:errno_h :termios_h !TCSADRAIN !/^EXIT/);
-
-Remember that most patterns (using //) will need to be anchored
-with a leading ^, e.g., C</^EXIT/> rather than C</EXIT/>.
-
-You can say C<BEGIN { $Exporter::Verbose=1 }> to see how the
-specifications are being processed and what is actually being imported
-into modules.
-
-=head2 Exporting without using Export's import method
-
-Exporter has a special method, 'export_to_level' which is used in situations
-where you can't directly call Export's import method. The export_to_level
-method looks like:
-
-MyPackage->export_to_level($where_to_export, $package, @what_to_export);
-
-where $where_to_export is an integer telling how far up the calling stack
-to export your symbols, and @what_to_export is an array telling what
-symbols *to* export (usually this is @_). The $package argument is
-currently unused.
-
-For example, suppose that you have a module, A, which already has an
-import function:
-
-package A;
-
-@ISA = qw(Exporter);
-@EXPORT_OK = qw ($b);
-
-sub import
-{
- $A::b = 1; # not a very useful import method
-}
-
-and you want to Export symbol $A::b back to the module that called
-package A. Since Exporter relies on the import method to work, via
-inheritance, as it stands Exporter::import() will never get called.
-Instead, say the following:
-
-package A;
-@ISA = qw(Exporter);
-@EXPORT_OK = qw ($b);
-
-sub import
-{
- $A::b = 1;
- A->export_to_level(1, @_);
-}
-
-This will export the symbols one level 'above' the current package - ie: to
-the program or module that used package A.
-
-Note: Be careful not to modify '@_' at all before you call export_to_level
-- or people using your package will get very unexplained results!
-
-
-=head2 Module Version Checking
-
-The Exporter module will convert an attempt to import a number from a
-module into a call to $module_name-E<gt>require_version($value). This can
-be used to validate that the version of the module being used is
-greater than or equal to the required version.
-
-The Exporter module supplies a default require_version method which
-checks the value of $VERSION in the exporting module.
-
-Since the default require_version method treats the $VERSION number as
-a simple numeric value it will regard version 1.10 as lower than
-1.9. For this reason it is strongly recommended that you use numbers
-with at least two decimal places, e.g., 1.09.
-
-=head2 Managing Unknown Symbols
-
-In some situations you may want to prevent certain symbols from being
-exported. Typically this applies to extensions which have functions
-or constants that may not exist on some systems.
-
-The names of any symbols that cannot be exported should be listed
-in the C<@EXPORT_FAIL> array.
-
-If a module attempts to import any of these symbols the Exporter
-will give the module an opportunity to handle the situation before
-generating an error. The Exporter will call an export_fail method
-with a list of the failed symbols:
-
- @failed_symbols = $module_name->export_fail(@failed_symbols);
-
-If the export_fail method returns an empty list then no error is
-recorded and all the requested symbols are exported. If the returned
-list is not empty then an error is generated for each symbol and the
-export fails. The Exporter provides a default export_fail method which
-simply returns the list unchanged.
-
-Uses for the export_fail method include giving better error messages
-for some symbols and performing lazy architectural checks (put more
-symbols into @EXPORT_FAIL by default and then take them out if someone
-actually tries to use them and an expensive check shows that they are
-usable on that platform).
-
-=head2 Tag Handling Utility Functions
-
-Since the symbols listed within %EXPORT_TAGS must also appear in either
-@EXPORT or @EXPORT_OK, two utility functions are provided which allow
-you to easily add tagged sets of symbols to @EXPORT or @EXPORT_OK:
-
- %EXPORT_TAGS = (foo => [qw(aa bb cc)], bar => [qw(aa cc dd)]);
-
- Exporter::export_tags('foo'); # add aa, bb and cc to @EXPORT
- Exporter::export_ok_tags('bar'); # add aa, cc and dd to @EXPORT_OK
-
-Any names which are not tags are added to @EXPORT or @EXPORT_OK
-unchanged but will trigger a warning (with C<-w>) to avoid misspelt tags
-names being silently added to @EXPORT or @EXPORT_OK. Future versions
-may make this a fatal error.
-
-=cut
diff --git a/contrib/perl5/lib/Exporter/Heavy.pm b/contrib/perl5/lib/Exporter/Heavy.pm
deleted file mode 100644
index 6647f70..0000000
--- a/contrib/perl5/lib/Exporter/Heavy.pm
+++ /dev/null
@@ -1,225 +0,0 @@
-package Exporter;
-
-=head1 NAME
-
-Exporter::Heavy - Exporter guts
-
-=head1 SYNOPIS
-
-(internal use only)
-
-=head1 DESCRIPTION
-
-No user-serviceable parts inside.
-
-=cut
-#
-# We go to a lot of trouble not to 'require Carp' at file scope,
-# because Carp requires Exporter, and something has to give.
-#
-
-sub heavy_export {
-
- # First make import warnings look like they're coming from the "use".
- local $SIG{__WARN__} = sub {
- my $text = shift;
- if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) {
- require Carp;
- local $Carp::CarpLevel = 1; # ignore package calling us too.
- Carp::carp($text);
- }
- else {
- warn $text;
- }
- };
- local $SIG{__DIE__} = sub {
- require Carp;
- local $Carp::CarpLevel = 1; # ignore package calling us too.
- Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT")
- if $_[0] =~ /^Unable to create sub named "(.*?)::"/;
- };
-
- my($pkg, $callpkg, @imports) = @_;
- my($type, $sym, $oops);
- *exports = *{"${pkg}::EXPORT"};
-
- if (@imports) {
- if (!%exports) {
- grep(s/^&//, @exports);
- @exports{@exports} = (1) x @exports;
- my $ok = \@{"${pkg}::EXPORT_OK"};
- if (@$ok) {
- grep(s/^&//, @$ok);
- @exports{@$ok} = (1) x @$ok;
- }
- }
-
- if ($imports[0] =~ m#^[/!:]#){
- my $tagsref = \%{"${pkg}::EXPORT_TAGS"};
- my $tagdata;
- my %imports;
- my($remove, $spec, @names, @allexports);
- # negated first item implies starting with default set:
- unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/;
- foreach $spec (@imports){
- $remove = $spec =~ s/^!//;
-
- if ($spec =~ s/^://){
- if ($spec eq 'DEFAULT'){
- @names = @exports;
- }
- elsif ($tagdata = $tagsref->{$spec}) {
- @names = @$tagdata;
- }
- else {
- warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS];
- ++$oops;
- next;
- }
- }
- elsif ($spec =~ m:^/(.*)/$:){
- my $patn = $1;
- @allexports = keys %exports unless @allexports; # only do keys once
- @names = grep(/$patn/, @allexports); # not anchored by default
- }
- else {
- @names = ($spec); # is a normal symbol name
- }
-
- warn "Import ".($remove ? "del":"add").": @names "
- if $Verbose;
-
- if ($remove) {
- foreach $sym (@names) { delete $imports{$sym} }
- }
- else {
- @imports{@names} = (1) x @names;
- }
- }
- @imports = keys %imports;
- }
-
- foreach $sym (@imports) {
- if (!$exports{$sym}) {
- if ($sym =~ m/^\d/) {
- $pkg->require_version($sym);
- # If the version number was the only thing specified
- # then we should act as if nothing was specified:
- if (@imports == 1) {
- @imports = @exports;
- last;
- }
- # We need a way to emulate 'use Foo ()' but still
- # allow an easy version check: "use Foo 1.23, ''";
- if (@imports == 2 and !$imports[1]) {
- @imports = ();
- last;
- }
- } elsif ($sym !~ s/^&// || !$exports{$sym}) {
- require Carp;
- Carp::carp(qq["$sym" is not exported by the $pkg module]);
- $oops++;
- }
- }
- }
- if ($oops) {
- require Carp;
- Carp::croak("Can't continue after import errors");
- }
- }
- else {
- @imports = @exports;
- }
-
- *fail = *{"${pkg}::EXPORT_FAIL"};
- if (@fail) {
- if (!%fail) {
- # Build cache of symbols. Optimise the lookup by adding
- # barewords twice... both with and without a leading &.
- # (Technique could be applied to %exports cache at cost of memory)
- my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @fail;
- warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Verbose;
- @fail{@expanded} = (1) x @expanded;
- }
- my @failed;
- foreach $sym (@imports) { push(@failed, $sym) if $fail{$sym} }
- if (@failed) {
- @failed = $pkg->export_fail(@failed);
- foreach $sym (@failed) {
- require Carp;
- Carp::carp(qq["$sym" is not implemented by the $pkg module ],
- "on this architecture");
- }
- if (@failed) {
- require Carp;
- Carp::croak("Can't continue after import errors");
- }
- }
- }
-
- warn "Importing into $callpkg from $pkg: ",
- join(", ",sort @imports) if $Verbose;
-
- foreach $sym (@imports) {
- # shortcut for the common case of no type character
- (*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next)
- unless $sym =~ s/^(\W)//;
- $type = $1;
- *{"${callpkg}::$sym"} =
- $type eq '&' ? \&{"${pkg}::$sym"} :
- $type eq '$' ? \${"${pkg}::$sym"} :
- $type eq '@' ? \@{"${pkg}::$sym"} :
- $type eq '%' ? \%{"${pkg}::$sym"} :
- $type eq '*' ? *{"${pkg}::$sym"} :
- do { require Carp; Carp::croak("Can't export symbol: $type$sym") };
- }
-}
-
-sub heavy_export_to_level
-{
- my $pkg = shift;
- my $level = shift;
- (undef) = shift; # XXX redundant arg
- my $callpkg = caller($level);
- $pkg->export($callpkg, @_);
-}
-
-# Utility functions
-
-sub _push_tags {
- my($pkg, $var, $syms) = @_;
- my $nontag;
- *export_tags = \%{"${pkg}::EXPORT_TAGS"};
- push(@{"${pkg}::$var"},
- map { $export_tags{$_} ? @{$export_tags{$_}} : scalar(++$nontag,$_) }
- (@$syms) ? @$syms : keys %export_tags);
- if ($nontag and $^W) {
- # This may change to a die one day
- require Carp;
- Carp::carp("Some names are not tags");
- }
-}
-
-# Default methods
-
-sub export_fail {
- my $self = shift;
- @_;
-}
-
-sub require_version {
- my($self, $wanted) = @_;
- my $pkg = ref $self || $self;
- my $version = ${"${pkg}::VERSION"};
- if (!$version or $version < $wanted) {
- $version ||= "(undef)";
- # %INC contains slashes, but $pkg contains double-colons.
- my $file = (map {s,::,/,g; $INC{$_}} "$pkg.pm")[0];
- $file &&= " ($file)";
- require Carp;
- Carp::croak("$pkg $wanted required--this is only version $version$file")
- }
- $version;
-}
-
-1;
diff --git a/contrib/perl5/lib/ExtUtils/Command.pm b/contrib/perl5/lib/ExtUtils/Command.pm
deleted file mode 100644
index aec4013..0000000
--- a/contrib/perl5/lib/ExtUtils/Command.pm
+++ /dev/null
@@ -1,213 +0,0 @@
-package ExtUtils::Command;
-
-use 5.005_64;
-use strict;
-# use AutoLoader;
-use Carp;
-use File::Copy;
-use File::Compare;
-use File::Basename;
-use File::Path qw(rmtree);
-require Exporter;
-our(@ISA, @EXPORT, $VERSION);
-@ISA = qw(Exporter);
-@EXPORT = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f);
-$VERSION = '1.01';
-
-=head1 NAME
-
-ExtUtils::Command - utilities to replace common UNIX commands in Makefiles etc.
-
-=head1 SYNOPSIS
-
- perl -MExtUtils::Command -e cat files... > destination
- perl -MExtUtils::Command -e mv source... destination
- perl -MExtUtils::Command -e cp source... destination
- perl -MExtUtils::Command -e touch files...
- perl -MExtUtils::Command -e rm_f file...
- perl -MExtUtils::Command -e rm_rf directories...
- perl -MExtUtils::Command -e mkpath directories...
- perl -MExtUtils::Command -e eqtime source destination
- perl -MExtUtils::Command -e chmod mode files...
- perl -MExtUtils::Command -e test_f file
-
-=head1 DESCRIPTION
-
-The module is used in the Win32 port to replace common UNIX commands.
-Most commands are wrappers on generic modules File::Path and File::Basename.
-
-=over 4
-
-=cut
-
-sub expand_wildcards
-{
- @ARGV = map(/[\*\?]/ ? glob($_) : $_,@ARGV);
-}
-
-=item cat
-
-Concatenates all files mentioned on command line to STDOUT.
-
-=cut
-
-sub cat ()
-{
- expand_wildcards();
- print while (<>);
-}
-
-=item eqtime src dst
-
-Sets modified time of dst to that of src
-
-=cut
-
-sub eqtime
-{
- my ($src,$dst) = @ARGV;
- open(F,">$dst");
- close(F);
- utime((stat($src))[8,9],$dst);
-}
-
-=item rm_f files....
-
-Removes directories - recursively (even if readonly)
-
-=cut
-
-sub rm_rf
-{
- rmtree([grep -e $_,expand_wildcards()],0,0);
-}
-
-=item rm_f files....
-
-Removes files (even if readonly)
-
-=cut
-
-sub rm_f
-{
- foreach (expand_wildcards())
- {
- next unless -f $_;
- next if unlink($_);
- chmod(0777,$_);
- next if unlink($_);
- carp "Cannot delete $_:$!";
- }
-}
-
-=item touch files ...
-
-Makes files exist, with current timestamp
-
-=cut
-
-sub touch
-{
- expand_wildcards();
- my $t = time;
- while (@ARGV)
- {
- my $file = shift(@ARGV);
- open(FILE,">>$file") || die "Cannot write $file:$!";
- close(FILE);
- utime($t,$t,$file);
- }
-}
-
-=item mv source... destination
-
-Moves source to destination.
-Multiple sources are allowed if destination is an existing directory.
-
-=cut
-
-sub mv
-{
- my $dst = pop(@ARGV);
- expand_wildcards();
- croak("Too many arguments") if (@ARGV > 1 && ! -d $dst);
- while (@ARGV)
- {
- my $src = shift(@ARGV);
- move($src,$dst);
- }
-}
-
-=item cp source... destination
-
-Copies source to destination.
-Multiple sources are allowed if destination is an existing directory.
-
-=cut
-
-sub cp
-{
- my $dst = pop(@ARGV);
- expand_wildcards();
- croak("Too many arguments") if (@ARGV > 1 && ! -d $dst);
- while (@ARGV)
- {
- my $src = shift(@ARGV);
- copy($src,$dst);
- }
-}
-
-=item chmod mode files...
-
-Sets UNIX like permissions 'mode' on all the files.
-
-=cut
-
-sub chmod
-{
- my $mode = shift(@ARGV);
- chmod($mode,expand_wildcards()) || die "Cannot chmod ".join(' ',$mode,@ARGV).":$!";
-}
-
-=item mkpath directory...
-
-Creates directory, including any parent directories.
-
-=cut
-
-sub mkpath
-{
- File::Path::mkpath([expand_wildcards()],0,0777);
-}
-
-=item test_f file
-
-Tests if a file exists
-
-=cut
-
-sub test_f
-{
- exit !-f shift(@ARGV);
-}
-
-
-1;
-__END__
-
-=back
-
-=head1 BUGS
-
-Should probably be Auto/Self loaded.
-
-=head1 SEE ALSO
-
-ExtUtils::MakeMaker, ExtUtils::MM_Unix, ExtUtils::MM_Win32
-
-=head1 AUTHOR
-
-Nick Ing-Simmons <F<nick@ni-s.u-net.com>>.
-
-=cut
-
diff --git a/contrib/perl5/lib/ExtUtils/Embed.pm b/contrib/perl5/lib/ExtUtils/Embed.pm
deleted file mode 100644
index 98c24ac..0000000
--- a/contrib/perl5/lib/ExtUtils/Embed.pm
+++ /dev/null
@@ -1,490 +0,0 @@
-# $Id: Embed.pm,v 1.2501 $
-require 5.002;
-
-package ExtUtils::Embed;
-require Exporter;
-require FileHandle;
-use Config;
-use Getopt::Std;
-use File::Spec;
-
-#Only when we need them
-#require ExtUtils::MakeMaker;
-#require ExtUtils::Liblist;
-
-use vars qw(@ISA @EXPORT $VERSION
- @Extensions $Verbose $lib_ext
- $opt_o $opt_s
- );
-use strict;
-
-$VERSION = sprintf("%d.%02d", q$Revision: 1.2505 $ =~ /(\d+)\.(\d+)/);
-
-@ISA = qw(Exporter);
-@EXPORT = qw(&xsinit &ldopts
- &ccopts &ccflags &ccdlflags &perl_inc
- &xsi_header &xsi_protos &xsi_body);
-
-#let's have Miniperl borrow from us instead
-#require ExtUtils::Miniperl;
-#*canon = \&ExtUtils::Miniperl::canon;
-
-$Verbose = 0;
-$lib_ext = $Config{lib_ext} || '.a';
-
-sub is_cmd { $0 eq '-e' }
-
-sub my_return {
- my $val = shift;
- if(is_cmd) {
- print $val;
- }
- else {
- return $val;
- }
-}
-
-sub is_perl_object {
- $Config{ccflags} =~ /-DPERL_OBJECT/;
-}
-
-sub xsinit {
- my($file, $std, $mods) = @_;
- my($fh,@mods,%seen);
- $file ||= "perlxsi.c";
- my $xsinit_proto = "pTHXo";
-
- if (@_) {
- @mods = @$mods if $mods;
- }
- else {
- getopts('o:s:');
- $file = $opt_o if defined $opt_o;
- $std = $opt_s if defined $opt_s;
- @mods = @ARGV;
- }
- $std = 1 unless scalar @mods;
-
- if ($file eq "STDOUT") {
- $fh = \*STDOUT;
- }
- else {
- $fh = new FileHandle "> $file";
- }
-
- push(@mods, static_ext()) if defined $std;
- @mods = grep(!$seen{$_}++, @mods);
-
- print $fh &xsi_header();
- print $fh "EXTERN_C void xs_init ($xsinit_proto);\n\n";
- print $fh &xsi_protos(@mods);
-
- print $fh "\nEXTERN_C void\nxs_init($xsinit_proto)\n{\n";
- print $fh &xsi_body(@mods);
- print $fh "}\n";
-
-}
-
-sub xsi_header {
- return <<EOF;
-#include <EXTERN.h>
-#include <perl.h>
-
-EOF
-}
-
-sub xsi_protos {
- my(@exts) = @_;
- my(@retval,%seen);
- my $boot_proto = "pTHXo_ CV* cv";
- foreach $_ (@exts){
- my($pname) = canon('/', $_);
- my($mname, $cname);
- ($mname = $pname) =~ s!/!::!g;
- ($cname = $pname) =~ s!/!__!g;
- my($ccode) = "EXTERN_C void boot_${cname} ($boot_proto);\n";
- next if $seen{$ccode}++;
- push(@retval, $ccode);
- }
- return join '', @retval;
-}
-
-sub xsi_body {
- my(@exts) = @_;
- my($pname,@retval,%seen);
- my($dl) = canon('/','DynaLoader');
- push(@retval, "\tchar *file = __FILE__;\n");
- push(@retval, "\tdXSUB_SYS;\n") if $] > 5.002;
- push(@retval, "\n");
-
- foreach $_ (@exts){
- my($pname) = canon('/', $_);
- my($mname, $cname, $ccode);
- ($mname = $pname) =~ s!/!::!g;
- ($cname = $pname) =~ s!/!__!g;
- if ($pname eq $dl){
- # Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
- # boot_DynaLoader is called directly in DynaLoader.pm
- $ccode = "\t/* DynaLoader is a special case */\n\tnewXS(\"${mname}::boot_${cname}\", boot_${cname}, file);\n";
- push(@retval, $ccode) unless $seen{$ccode}++;
- } else {
- $ccode = "\tnewXS(\"${mname}::bootstrap\", boot_${cname}, file);\n";
- push(@retval, $ccode) unless $seen{$ccode}++;
- }
- }
- return join '', @retval;
-}
-
-sub static_ext {
- unless (scalar @Extensions) {
- @Extensions = sort split /\s+/, $Config{static_ext};
- unshift @Extensions, qw(DynaLoader);
- }
- @Extensions;
-}
-
-sub ldopts {
- require ExtUtils::MakeMaker;
- require ExtUtils::Liblist;
- my($std,$mods,$link_args,$path) = @_;
- my(@mods,@link_args,@argv);
- my($dllib,$config_libs,@potential_libs,@path);
- local($") = ' ' unless $" eq ' ';
- my $MM = bless {} => 'MY';
- if (scalar @_) {
- @link_args = @$link_args if $link_args;
- @mods = @$mods if $mods;
- }
- else {
- @argv = @ARGV;
- #hmm
- while($_ = shift @argv) {
- /^-std$/ && do { $std = 1; next; };
- /^--$/ && do { @link_args = @argv; last; };
- /^-I(.*)/ && do { $path = $1 || shift @argv; next; };
- push(@mods, $_);
- }
- }
- $std = 1 unless scalar @link_args;
- my $sep = $Config{path_sep} || ':';
- @path = $path ? split(/\Q$sep/, $path) : @INC;
-
- push(@potential_libs, @link_args) if scalar @link_args;
- # makemaker includes std libs on windows by default
- if ($^O ne 'MSWin32' and defined($std)) {
- push(@potential_libs, $Config{perllibs});
- }
-
- push(@mods, static_ext()) if $std;
-
- my($mod,@ns,$root,$sub,$extra,$archive,@archives);
- print STDERR "Searching (@path) for archives\n" if $Verbose;
- foreach $mod (@mods) {
- @ns = split(/::|\/|\\/, $mod);
- $sub = $ns[-1];
- $root = $MM->catdir(@ns);
-
- print STDERR "searching for '$sub${lib_ext}'\n" if $Verbose;
- foreach (@path) {
- next unless -e ($archive = $MM->catdir($_,"auto",$root,"$sub$lib_ext"));
- push @archives, $archive;
- if(-e ($extra = $MM->catdir($_,"auto",$root,"extralibs.ld"))) {
- local(*FH);
- if(open(FH, $extra)) {
- my($libs) = <FH>; chomp $libs;
- push @potential_libs, split /\s+/, $libs;
- }
- else {
- warn "Couldn't open '$extra'";
- }
- }
- last;
- }
- }
- #print STDERR "\@potential_libs = @potential_libs\n";
-
- my $libperl;
- if ($^O eq 'MSWin32') {
- $libperl = $Config{libperl};
- }
- else {
- $libperl = (grep(/^-l\w*perl\w*$/, @link_args))[0] || "-lperl";
- }
-
- my $lpath = File::Spec->catdir($Config{archlibexp}, 'CORE');
- $lpath = qq["$lpath"] if $^O eq 'MSWin32';
- my($extralibs, $bsloadlibs, $ldloadlibs, $ld_run_path) =
- $MM->ext(join ' ', "-L$lpath", $libperl, @potential_libs);
-
- my $ld_or_bs = $bsloadlibs || $ldloadlibs;
- print STDERR "bs: $bsloadlibs ** ld: $ldloadlibs" if $Verbose;
- my $linkage = "$Config{ccdlflags} $Config{ldflags} @archives $ld_or_bs";
- print STDERR "ldopts: '$linkage'\n" if $Verbose;
-
- return $linkage if scalar @_;
- my_return("$linkage\n");
-}
-
-sub ccflags {
- my_return(" $Config{ccflags} ");
-}
-
-sub ccdlflags {
- my_return(" $Config{ccdlflags} ");
-}
-
-sub perl_inc {
- my $dir = File::Spec->catdir($Config{archlibexp}, 'CORE');
- $dir = qq["$dir"] if $^O eq 'MSWin32';
- my_return(" -I$dir ");
-}
-
-sub ccopts {
- ccflags . perl_inc;
-}
-
-sub canon {
- my($as, @ext) = @_;
- foreach(@ext) {
- # might be X::Y or lib/auto/X/Y/Y.a
- next if s!::!/!g;
- s:^(lib|ext)/(auto/)?::;
- s:/\w+\.\w+$::;
- }
- grep(s:/:$as:, @ext) if ($as ne '/');
- @ext;
-}
-
-__END__
-
-=head1 NAME
-
-ExtUtils::Embed - Utilities for embedding Perl in C/C++ applications
-
-=head1 SYNOPSIS
-
-
- perl -MExtUtils::Embed -e xsinit
- perl -MExtUtils::Embed -e ccopts
- perl -MExtUtils::Embed -e ldopts
-
-=head1 DESCRIPTION
-
-ExtUtils::Embed provides utility functions for embedding a Perl interpreter
-and extensions in your C/C++ applications.
-Typically, an application B<Makefile> will invoke ExtUtils::Embed
-functions while building your application.
-
-=head1 @EXPORT
-
-ExtUtils::Embed exports the following functions:
-
-xsinit(), ldopts(), ccopts(), perl_inc(), ccflags(),
-ccdlflags(), xsi_header(), xsi_protos(), xsi_body()
-
-=head1 FUNCTIONS
-
-=over
-
-=item xsinit()
-
-Generate C/C++ code for the XS initializer function.
-
-When invoked as C<`perl -MExtUtils::Embed -e xsinit --`>
-the following options are recognized:
-
-B<-o> E<lt>output filenameE<gt> (Defaults to B<perlxsi.c>)
-
-B<-o STDOUT> will print to STDOUT.
-
-B<-std> (Write code for extensions that are linked with the current Perl.)
-
-Any additional arguments are expected to be names of modules
-to generate code for.
-
-When invoked with parameters the following are accepted and optional:
-
-C<xsinit($filename,$std,[@modules])>
-
-Where,
-
-B<$filename> is equivalent to the B<-o> option.
-
-B<$std> is boolean, equivalent to the B<-std> option.
-
-B<[@modules]> is an array ref, same as additional arguments mentioned above.
-
-=item Examples
-
-
- perl -MExtUtils::Embed -e xsinit -- -o xsinit.c Socket
-
-
-This will generate code with an B<xs_init> function that glues the perl B<Socket::bootstrap> function
-to the C B<boot_Socket> function and writes it to a file named F<xsinit.c>.
-
-Note that B<DynaLoader> is a special case where it must call B<boot_DynaLoader> directly.
-
- perl -MExtUtils::Embed -e xsinit
-
-
-This will generate code for linking with B<DynaLoader> and
-each static extension found in B<$Config{static_ext}>.
-The code is written to the default file name B<perlxsi.c>.
-
-
- perl -MExtUtils::Embed -e xsinit -- -o xsinit.c -std DBI DBD::Oracle
-
-
-Here, code is written for all the currently linked extensions along with code
-for B<DBI> and B<DBD::Oracle>.
-
-If you have a working B<DynaLoader> then there is rarely any need to statically link in any
-other extensions.
-
-=item ldopts()
-
-Output arguments for linking the Perl library and extensions to your
-application.
-
-When invoked as C<`perl -MExtUtils::Embed -e ldopts --`>
-the following options are recognized:
-
-B<-std>
-
-Output arguments for linking the Perl library and any extensions linked
-with the current Perl.
-
-B<-I> E<lt>path1:path2E<gt>
-
-Search path for ModuleName.a archives.
-Default path is B<@INC>.
-Library archives are expected to be found as
-B</some/path/auto/ModuleName/ModuleName.a>
-For example, when looking for B<Socket.a> relative to a search path,
-we should find B<auto/Socket/Socket.a>
-
-When looking for B<DBD::Oracle> relative to a search path,
-we should find B<auto/DBD/Oracle/Oracle.a>
-
-Keep in mind that you can always supply B</my/own/path/ModuleName.a>
-as an additional linker argument.
-
-B<--> E<lt>list of linker argsE<gt>
-
-Additional linker arguments to be considered.
-
-Any additional arguments found before the B<--> token
-are expected to be names of modules to generate code for.
-
-When invoked with parameters the following are accepted and optional:
-
-C<ldopts($std,[@modules],[@link_args],$path)>
-
-Where:
-
-B<$std> is boolean, equivalent to the B<-std> option.
-
-B<[@modules]> is equivalent to additional arguments found before the B<--> token.
-
-B<[@link_args]> is equivalent to arguments found after the B<--> token.
-
-B<$path> is equivalent to the B<-I> option.
-
-In addition, when ldopts is called with parameters, it will return the argument string
-rather than print it to STDOUT.
-
-=item Examples
-
-
- perl -MExtUtils::Embed -e ldopts
-
-
-This will print arguments for linking with B<libperl.a>, B<DynaLoader> and
-extensions found in B<$Config{static_ext}>. This includes libraries
-found in B<$Config{libs}> and the first ModuleName.a library
-for each extension that is found by searching B<@INC> or the path
-specified by the B<-I> option.
-In addition, when ModuleName.a is found, additional linker arguments
-are picked up from the B<extralibs.ld> file in the same directory.
-
-
- perl -MExtUtils::Embed -e ldopts -- -std Socket
-
-
-This will do the same as the above example, along with printing additional arguments for linking with the B<Socket> extension.
-
-
- perl -MExtUtils::Embed -e ldopts -- DynaLoader
-
-
-This will print arguments for linking with just the B<DynaLoader> extension
-and B<libperl.a>.
-
-
- perl -MExtUtils::Embed -e ldopts -- -std Msql -- -L/usr/msql/lib -lmsql
-
-
-Any arguments after the second '--' token are additional linker
-arguments that will be examined for potential conflict. If there is no
-conflict, the additional arguments will be part of the output.
-
-
-=item perl_inc()
-
-For including perl header files this function simply prints:
-
- -I$Config{archlibexp}/CORE
-
-So, rather than having to say:
-
- perl -MConfig -e 'print "-I$Config{archlibexp}/CORE"'
-
-Just say:
-
- perl -MExtUtils::Embed -e perl_inc
-
-=item ccflags(), ccdlflags()
-
-These functions simply print $Config{ccflags} and $Config{ccdlflags}
-
-=item ccopts()
-
-This function combines perl_inc(), ccflags() and ccdlflags() into one.
-
-=item xsi_header()
-
-This function simply returns a string defining the same B<EXTERN_C> macro as
-B<perlmain.c> along with #including B<perl.h> and B<EXTERN.h>.
-
-=item xsi_protos(@modules)
-
-This function returns a string of B<boot_$ModuleName> prototypes for each @modules.
-
-=item xsi_body(@modules)
-
-This function returns a string of calls to B<newXS()> that glue the module B<bootstrap>
-function to B<boot_ModuleName> for each @modules.
-
-B<xsinit()> uses the xsi_* functions to generate most of it's code.
-
-=back
-
-=head1 EXAMPLES
-
-For examples on how to use B<ExtUtils::Embed> for building C/C++ applications
-with embedded perl, see L<perlembed>.
-
-=head1 SEE ALSO
-
-L<perlembed>
-
-=head1 AUTHOR
-
-Doug MacEachern E<lt>F<dougm@osf.org>E<gt>
-
-Based on ideas from Tim Bunce E<lt>F<Tim.Bunce@ig.co.uk>E<gt> and
-B<minimod.pl> by Andreas Koenig E<lt>F<k@anna.in-berlin.de>E<gt> and Tim Bunce.
-
-=cut
-
diff --git a/contrib/perl5/lib/ExtUtils/Install.pm b/contrib/perl5/lib/ExtUtils/Install.pm
deleted file mode 100644
index 9a8e857..0000000
--- a/contrib/perl5/lib/ExtUtils/Install.pm
+++ /dev/null
@@ -1,437 +0,0 @@
-# $FreeBSD$
-package ExtUtils::Install;
-
-use 5.005_64;
-our(@ISA, @EXPORT, $VERSION);
-$VERSION = substr q$Revision: 1.28 $, 10;
-# $Date: 1998/01/25 07:08:24 $
-# $FreeBSD$
-
-use Exporter;
-use Carp ();
-use Config qw(%Config);
-@ISA = ('Exporter');
-@EXPORT = ('install','uninstall','pm_to_blib', 'install_default');
-$Is_VMS = $^O eq 'VMS';
-
-my $splitchar = $^O eq 'VMS' ? '|' : ($^O eq 'os2' || $^O eq 'dos') ? ';' : ':';
-my @PERL_ENV_LIB = split $splitchar, defined $ENV{'PERL5LIB'} ? $ENV{'PERL5LIB'} : $ENV{'PERLLIB'} || '';
-my $Inc_uninstall_warn_handler;
-
-# install relative to here
-
-my $INSTALL_ROOT = $ENV{PERL_INSTALL_ROOT};
-
-use File::Spec;
-
-sub install_rooted_file {
- if (defined $INSTALL_ROOT) {
- MY->catfile($INSTALL_ROOT, $_[0]);
- } else {
- $_[0];
- }
-}
-
-sub install_rooted_dir {
- if (defined $INSTALL_ROOT) {
- MY->catdir($INSTALL_ROOT, $_[0]);
- } else {
- $_[0];
- }
-}
-
-#our(@EXPORT, @ISA, $Is_VMS);
-#use strict;
-
-sub forceunlink {
- chmod 0666, $_[0];
- unlink $_[0] or Carp::croak("Cannot forceunlink $_[0]: $!")
-}
-
-sub install {
- my($hash,$verbose,$nonono,$inc_uninstall) = @_;
- $verbose ||= 0;
- $nonono ||= 0;
-
- use Cwd qw(cwd);
- use ExtUtils::MakeMaker; # to implement a MY class
- use ExtUtils::Packlist;
- use File::Basename qw(dirname);
- use File::Copy qw(copy);
- use File::Find qw(find);
- use File::Path qw(mkpath);
- use File::Compare qw(compare);
-
- my(%hash) = %$hash;
- my(%pack, $dir, $warn_permissions);
- my($packlist) = ExtUtils::Packlist->new();
- # -w doesn't work reliably on FAT dirs
- $warn_permissions++ if $^O eq 'MSWin32';
- local(*DIR);
- for (qw/read write/) {
- $pack{$_}=$hash{$_};
- delete $hash{$_};
- }
- my($source_dir_or_file);
- foreach $source_dir_or_file (sort keys %hash) {
- #Check if there are files, and if yes, look if the corresponding
- #target directory is writable for us
- opendir DIR, $source_dir_or_file or next;
- for (readdir DIR) {
- next if $_ eq "." || $_ eq ".." || $_ eq ".exists";
- my $targetdir = install_rooted_dir($hash{$source_dir_or_file});
- if (-w $targetdir ||
- mkpath($targetdir)) {
- last;
- } else {
- warn "Warning: You do not have permissions to " .
- "install into $hash{$source_dir_or_file}"
- unless $warn_permissions++;
- }
- }
- closedir DIR;
- }
- my $tmpfile = install_rooted_file($pack{"read"});
- $packlist->read($tmpfile) if (-f $tmpfile);
- my $cwd = cwd();
-
- my($source);
- MOD_INSTALL: foreach $source (sort keys %hash) {
- #copy the tree to the target directory without altering
- #timestamp and permission and remember for the .packlist
- #file. The packlist file contains the absolute paths of the
- #install locations. AFS users may call this a bug. We'll have
- #to reconsider how to add the means to satisfy AFS users also.
-
- # FreeBSD also doesn't like this (much). At install time, the
- # ctime should change, even if the file does not.
-
- #October 1997: we want to install .pm files into archlib if
- #there are any files in arch. So we depend on having ./blib/arch
- #hardcoded here.
-
- my $targetroot = install_rooted_dir($hash{$source});
-
- if ($source eq "blib/lib" and
- exists $hash{"blib/arch"} and
- directory_not_empty("blib/arch")) {
- $targetroot = install_rooted_dir($hash{"blib/arch"});
- print "Files found in blib/arch: installing files in blib/lib into architecture dependent library tree\n";
- }
- chdir($source) or next;
- find(sub {
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
- $atime,$mtime,$ctime,$blksize,$blocks) = stat;
- return unless -f _;
- return if $_ eq ".exists";
- my $targetdir = MY->catdir($targetroot, $File::Find::dir);
- my $origfile = $_;
- my $targetfile = MY->catfile($targetdir, $_);
-
- my $diff = 0;
- if ( -f $targetfile && -s _ == $size) {
- # We have a good chance, we can skip this one
- $diff = compare($_,$targetfile);
- } else {
- print "$_ differs\n" if $verbose>1;
- $diff++;
- }
- my $diff = 1; # Nasty, lowdown, rotten, scumsucking
- # hack to make FreeBSD _really_ install.
-
- if ($diff){
- if (-f $targetfile){
- forceunlink($targetfile) unless $nonono;
- } else {
- mkpath($targetdir,0,0755) unless $nonono;
- print "mkpath($targetdir,0,0755)\n" if $verbose>1;
- }
- copy($_,$targetfile) unless $nonono;
- print "Installing $targetfile\n";
- utime($atime,$mtime + $Is_VMS,$targetfile) unless $nonono>1;
- print "utime($atime,$mtime,$targetfile)\n" if $verbose>1;
- $mode = 0444 | ( $mode & 0111 ? 0111 : 0 );
- chmod $mode, $targetfile;
- print "chmod($mode, $targetfile)\n" if $verbose>1;
- } else {
- print "Skipping $targetfile (unchanged)\n" if $verbose;
- }
-
- if (! defined $inc_uninstall) { # it's called
- } elsif ($inc_uninstall == 0){
- inc_uninstall($_,$File::Find::dir,$verbose,1); # nonono set to 1
- } else {
- inc_uninstall($_,$File::Find::dir,$verbose,0); # nonono set to 0
- }
- $packlist->{$origfile}++;
-
- }, ".");
- chdir($cwd) or Carp::croak("Couldn't chdir to $cwd: $!");
- }
- if ($pack{'write'}) {
- $dir = install_rooted_dir(dirname($pack{'write'}));
- mkpath($dir,0,0755);
- print "Writing $pack{'write'}\n";
- $packlist->write(install_rooted_file($pack{'write'}));
- }
-}
-
-sub directory_not_empty ($) {
- my($dir) = @_;
- my $files = 0;
- find(sub {
- return if $_ eq ".exists";
- if (-f) {
- $File::Find::prune++;
- $files = 1;
- }
- }, $dir);
- return $files;
-}
-
-sub install_default {
- @_ < 2 or die "install_default should be called with 0 or 1 argument";
- my $FULLEXT = @_ ? shift : $ARGV[0];
- defined $FULLEXT or die "Do not know to where to write install log";
- my $INST_LIB = MM->catdir(MM->curdir,"blib","lib");
- my $INST_ARCHLIB = MM->catdir(MM->curdir,"blib","arch");
- my $INST_BIN = MM->catdir(MM->curdir,'blib','bin');
- my $INST_SCRIPT = MM->catdir(MM->curdir,'blib','script');
- my $INST_MAN1DIR = MM->catdir(MM->curdir,'blib','man1');
- my $INST_MAN3DIR = MM->catdir(MM->curdir,'blib','man3');
- install({
- read => "$Config{sitearchexp}/auto/$FULLEXT/.packlist",
- write => "$Config{installsitearch}/auto/$FULLEXT/.packlist",
- $INST_LIB => (directory_not_empty($INST_ARCHLIB)) ?
- $Config{installsitearch} :
- $Config{installsitelib},
- $INST_ARCHLIB => $Config{installsitearch},
- $INST_BIN => $Config{installbin} ,
- $INST_SCRIPT => $Config{installscript},
- $INST_MAN1DIR => $Config{installman1dir},
- $INST_MAN3DIR => $Config{installman3dir},
- },1,0,0);
-}
-
-sub uninstall {
- use ExtUtils::Packlist;
- my($fil,$verbose,$nonono) = @_;
- die "no packlist file found: $fil" unless -f $fil;
- # my $my_req = $self->catfile(qw(auto ExtUtils Install forceunlink.al));
- # require $my_req; # Hairy, but for the first
- my ($packlist) = ExtUtils::Packlist->new($fil);
- foreach (sort(keys(%$packlist))) {
- chomp;
- print "unlink $_\n" if $verbose;
- forceunlink($_) unless $nonono;
- }
- print "unlink $fil\n" if $verbose;
- forceunlink($fil) unless $nonono;
-}
-
-sub inc_uninstall {
- my($file,$libdir,$verbose,$nonono) = @_;
- my($dir);
- my %seen_dir = ();
- foreach $dir (@INC, @PERL_ENV_LIB, @Config{qw(archlibexp
- privlibexp
- sitearchexp
- sitelibexp)}) {
- next if $dir eq ".";
- next if $seen_dir{$dir}++;
- my($targetfile) = MY->catfile($dir,$libdir,$file);
- next unless -f $targetfile;
-
- # The reason why we compare file's contents is, that we cannot
- # know, which is the file we just installed (AFS). So we leave
- # an identical file in place
- my $diff = 0;
- if ( -f $targetfile && -s _ == -s $file) {
- # We have a good chance, we can skip this one
- $diff = compare($file,$targetfile);
- } else {
- print "#$file and $targetfile differ\n" if $verbose>1;
- $diff++;
- }
-
- next unless $diff;
- if ($nonono) {
- if ($verbose) {
- $Inc_uninstall_warn_handler ||= new ExtUtils::Install::Warn;
- $libdir =~ s|^\./||s ; # That's just cosmetics, no need to port. It looks prettier.
- $Inc_uninstall_warn_handler->add("$libdir/$file",$targetfile);
- }
- # if not verbose, we just say nothing
- } else {
- print "Unlinking $targetfile (shadowing?)\n";
- forceunlink($targetfile);
- }
- }
-}
-
-sub run_filter {
- my ($cmd, $src, $dest) = @_;
- local *SRC, *CMD;
- open(CMD, "|$cmd >$dest") || die "Cannot fork: $!";
- open(SRC, $src) || die "Cannot open $src: $!";
- my $buf;
- my $sz = 1024;
- while (my $len = sysread(SRC, $buf, $sz)) {
- syswrite(CMD, $buf, $len);
- }
- close SRC;
- close CMD or die "Filter command '$cmd' failed for $src";
-}
-
-sub pm_to_blib {
- my($fromto,$autodir,$pm_filter) = @_;
-
- use File::Basename qw(dirname);
- use File::Copy qw(copy);
- use File::Path qw(mkpath);
- use File::Compare qw(compare);
- use AutoSplit;
- # my $my_req = $self->catfile(qw(auto ExtUtils Install forceunlink.al));
- # require $my_req; # Hairy, but for the first
-
- if (!ref($fromto) && -r $fromto)
- {
- # Win32 has severe command line length limitations, but
- # can generate temporary files on-the-fly
- # so we pass name of file here - eval it to get hash
- open(FROMTO,"<$fromto") or die "Cannot open $fromto:$!";
- my $str = '$fromto = {qw{'.join('',<FROMTO>).'}}';
- eval $str;
- close(FROMTO);
- }
-
- mkpath($autodir,0,0755);
- foreach (keys %$fromto) {
- my $dest = $fromto->{$_};
- next if -f $dest && -M $dest < -M $_;
-
- # When a pm_filter is defined, we need to pre-process the source first
- # to determine whether it has changed or not. Therefore, only perform
- # the comparison check when there's no filter to be ran.
- # -- RAM, 03/01/2001
-
- my $need_filtering = defined $pm_filter && length $pm_filter && /\.pm$/;
-
- if (!$need_filtering && 0 == compare($_,$dest)) {
- print "Skip $dest (unchanged)\n";
- next;
- }
- if (-f $dest){
- forceunlink($dest);
- } else {
- mkpath(dirname($dest),0,0755);
- }
- if ($need_filtering) {
- run_filter($pm_filter, $_, $dest);
- print "$pm_filter <$_ >$dest\n";
- } else {
- copy($_,$dest);
- print "cp $_ $dest\n";
- }
- my($mode,$atime,$mtime) = (stat)[2,8,9];
- utime($atime,$mtime+$Is_VMS,$dest);
- chmod(0444 | ( $mode & 0111 ? 0111 : 0 ),$dest);
- next unless /\.pm$/;
- autosplit($dest,$autodir);
- }
-}
-
-package ExtUtils::Install::Warn;
-
-sub new { bless {}, shift }
-
-sub add {
- my($self,$file,$targetfile) = @_;
- push @{$self->{$file}}, $targetfile;
-}
-
-sub DESTROY {
- unless(defined $INSTALL_ROOT) {
- my $self = shift;
- my($file,$i,$plural);
- foreach $file (sort keys %$self) {
- $plural = @{$self->{$file}} > 1 ? "s" : "";
- print "## Differing version$plural of $file found. You might like to\n";
- for (0..$#{$self->{$file}}) {
- print "rm ", $self->{$file}[$_], "\n";
- $i++;
- }
- }
- $plural = $i>1 ? "all those files" : "this file";
- print "## Running 'make install UNINST=1' will unlink $plural for you.\n";
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-ExtUtils::Install - install files from here to there
-
-=head1 SYNOPSIS
-
-B<use ExtUtils::Install;>
-
-B<install($hashref,$verbose,$nonono);>
-
-B<uninstall($packlistfile,$verbose,$nonono);>
-
-B<pm_to_blib($hashref);>
-
-=head1 DESCRIPTION
-
-Both install() and uninstall() are specific to the way
-ExtUtils::MakeMaker handles the installation and deinstallation of
-perl modules. They are not designed as general purpose tools.
-
-install() takes three arguments. A reference to a hash, a verbose
-switch and a don't-really-do-it switch. The hash ref contains a
-mapping of directories: each key/value pair is a combination of
-directories to be copied. Key is a directory to copy from, value is a
-directory to copy to. The whole tree below the "from" directory will
-be copied preserving timestamps and permissions.
-
-There are two keys with a special meaning in the hash: "read" and
-"write". After the copying is done, install will write the list of
-target files to the file named by C<$hashref-E<gt>{write}>. If there is
-another file named by C<$hashref-E<gt>{read}>, the contents of this file will
-be merged into the written file. The read and the written file may be
-identical, but on AFS it is quite likely that people are installing to a
-different directory than the one where the files later appear.
-
-install_default() takes one or less arguments. If no arguments are
-specified, it takes $ARGV[0] as if it was specified as an argument.
-The argument is the value of MakeMaker's C<FULLEXT> key, like F<Tk/Canvas>.
-This function calls install() with the same arguments as the defaults
-the MakeMaker would use.
-
-The argument-less form is convenient for install scripts like
-
- perl -MExtUtils::Install -e install_default Tk/Canvas
-
-Assuming this command is executed in a directory with a populated F<blib>
-directory, it will proceed as if the F<blib> was build by MakeMaker on
-this machine. This is useful for binary distributions.
-
-uninstall() takes as first argument a file containing filenames to be
-unlinked. The second argument is a verbose switch, the third is a
-no-don't-really-do-it-now switch.
-
-pm_to_blib() takes a hashref as the first argument and copies all keys
-of the hash to the corresponding values efficiently. Filenames with
-the extension pm are autosplit. Second argument is the autosplit
-directory. If third argument is not empty, it is taken as a filter command
-to be ran on each .pm file, the output of the command being what is finally
-copied, and the source for auto-splitting.
-
-You can have an environment variable PERL_INSTALL_ROOT set which will
-be prepended as a directory to each installed file (and directory).
-
-=cut
diff --git a/contrib/perl5/lib/ExtUtils/Installed.pm b/contrib/perl5/lib/ExtUtils/Installed.pm
deleted file mode 100644
index 6961c6f..0000000
--- a/contrib/perl5/lib/ExtUtils/Installed.pm
+++ /dev/null
@@ -1,273 +0,0 @@
-package ExtUtils::Installed;
-
-use 5.005_64;
-use strict;
-use Carp qw();
-use ExtUtils::Packlist;
-use ExtUtils::MakeMaker;
-use Config;
-use File::Find;
-use File::Basename;
-our $VERSION = '0.02';
-
-sub _is_type($$$)
-{
-my ($self, $path, $type) = @_;
-return(1) if ($type eq "all");
-if ($type eq "doc")
- {
- return(substr($path, 0, length($Config{installman1dir}))
- eq $Config{installman1dir}
- ||
- substr($path, 0, length($Config{installman3dir}))
- eq $Config{installman3dir}
- ? 1 : 0)
- }
-if ($type eq "prog")
- {
- return(substr($path, 0, length($Config{prefix})) eq $Config{prefix}
- &&
- substr($path, 0, length($Config{installman1dir}))
- ne $Config{installman1dir}
- &&
- substr($path, 0, length($Config{installman3dir}))
- ne $Config{installman3dir}
- ? 1 : 0);
- }
-return(0);
-}
-
-sub _is_under($$;)
-{
-my ($self, $path, @under) = @_;
-$under[0] = "" if (! @under);
-foreach my $dir (@under)
- {
- return(1) if (substr($path, 0, length($dir)) eq $dir);
- }
-return(0);
-}
-
-sub new($)
-{
-my ($class) = @_;
-$class = ref($class) || $class;
-my $self = {};
-
-# Read the core packlist
-$self->{Perl}{packlist} =
- ExtUtils::Packlist->new("$Config{installarchlib}/.packlist");
-$self->{Perl}{version} = $Config{version};
-
-# Read the module packlists
-my $sub = sub
- {
- # Only process module .packlists
- return if ($_) ne ".packlist" || $File::Find::dir eq $Config{installarchlib};
-
- # Hack of the leading bits of the paths & convert to a module name
- my $module = $File::Find::name;
- $module =~ s!$Config{archlib}/auto/(.*)/.packlist!$1!s;
- $module =~ s!$Config{sitearch}/auto/(.*)/.packlist!$1!s;
- my $modfile = "$module.pm";
- $module =~ s!/!::!g;
-
- # Find the top-level module file in @INC
- $self->{$module}{version} = '';
- foreach my $dir (@INC)
- {
- my $p = MM->catfile($dir, $modfile);
- if (-f $p)
- {
- $self->{$module}{version} = MM->parse_version($p);
- last;
- }
- }
-
- # Read the .packlist
- $self->{$module}{packlist} = ExtUtils::Packlist->new($File::Find::name);
- };
-find($sub, $Config{archlib}, $Config{sitearch});
-
-return(bless($self, $class));
-}
-
-sub modules($)
-{
-my ($self) = @_;
-return(sort(keys(%$self)));
-}
-
-sub files($$;$)
-{
-my ($self, $module, $type, @under) = @_;
-
-# Validate arguments
-Carp::croak("$module is not installed") if (! exists($self->{$module}));
-$type = "all" if (! defined($type));
-Carp::croak('type must be "all", "prog" or "doc"')
- if ($type ne "all" && $type ne "prog" && $type ne "doc");
-
-my (@files);
-foreach my $file (keys(%{$self->{$module}{packlist}}))
- {
- push(@files, $file)
- if ($self->_is_type($file, $type) && $self->_is_under($file, @under));
- }
-return(@files);
-}
-
-sub directories($$;$)
-{
-my ($self, $module, $type, @under) = @_;
-my (%dirs);
-foreach my $file ($self->files($module, $type, @under))
- {
- $dirs{dirname($file)}++;
- }
-return(sort(keys(%dirs)));
-}
-
-sub directory_tree($$;$)
-{
-my ($self, $module, $type, @under) = @_;
-my (%dirs);
-foreach my $dir ($self->directories($module, $type, @under))
- {
- $dirs{$dir}++;
- my ($last) = ("");
- while ($last ne $dir)
- {
- $last = $dir;
- $dir = dirname($dir);
- last if (! $self->_is_under($dir, @under));
- $dirs{$dir}++;
- }
- }
-return(sort(keys(%dirs)));
-}
-
-sub validate($;$)
-{
-my ($self, $module, $remove) = @_;
-Carp::croak("$module is not installed") if (! exists($self->{$module}));
-return($self->{$module}{packlist}->validate($remove));
-}
-
-sub packlist($$)
-{
-my ($self, $module) = @_;
-Carp::croak("$module is not installed") if (! exists($self->{$module}));
-return($self->{$module}{packlist});
-}
-
-sub version($$)
-{
-my ($self, $module) = @_;
-Carp::croak("$module is not installed") if (! exists($self->{$module}));
-return($self->{$module}{version});
-}
-
-sub DESTROY
-{
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-ExtUtils::Installed - Inventory management of installed modules
-
-=head1 SYNOPSIS
-
- use ExtUtils::Installed;
- my ($inst) = ExtUtils::Installed->new();
- my (@modules) = $inst->modules();
- my (@missing) = $inst->validate("DBI");
- my $all_files = $inst->files("DBI");
- my $files_below_usr_local = $inst->files("DBI", "all", "/usr/local");
- my $all_dirs = $inst->directories("DBI");
- my $dirs_below_usr_local = $inst->directory_tree("DBI", "prog");
- my $packlist = $inst->packlist("DBI");
-
-=head1 DESCRIPTION
-
-ExtUtils::Installed provides a standard way to find out what core and module
-files have been installed. It uses the information stored in .packlist files
-created during installation to provide this information. In addition it
-provides facilities to classify the installed files and to extract directory
-information from the .packlist files.
-
-=head1 USAGE
-
-The new() function searches for all the installed .packlists on the system, and
-stores their contents. The .packlists can be queried with the functions
-described below.
-
-=head1 FUNCTIONS
-
-=over
-
-=item new()
-
-This takes no parameters, and searches for all the installed .packlists on the
-system. The packlists are read using the ExtUtils::packlist module.
-
-=item modules()
-
-This returns a list of the names of all the installed modules. The perl 'core'
-is given the special name 'Perl'.
-
-=item files()
-
-This takes one mandatory parameter, the name of a module. It returns a list of
-all the filenames from the package. To obtain a list of core perl files, use
-the module name 'Perl'. Additional parameters are allowed. The first is one
-of the strings "prog", "man" or "all", to select either just program files,
-just manual files or all files. The remaining parameters are a list of
-directories. The filenames returned will be restricted to those under the
-specified directories.
-
-=item directories()
-
-This takes one mandatory parameter, the name of a module. It returns a list of
-all the directories from the package. Additional parameters are allowed. The
-first is one of the strings "prog", "man" or "all", to select either just
-program directories, just manual directories or all directories. The remaining
-parameters are a list of directories. The directories returned will be
-restricted to those under the specified directories. This method returns only
-the leaf directories that contain files from the specified module.
-
-=item directory_tree()
-
-This is identical in operation to directory(), except that it includes all the
-intermediate directories back up to the specified directories.
-
-=item validate()
-
-This takes one mandatory parameter, the name of a module. It checks that all
-the files listed in the modules .packlist actually exist, and returns a list of
-any missing files. If an optional second argument which evaluates to true is
-given any missing files will be removed from the .packlist
-
-=item packlist()
-
-This returns the ExtUtils::Packlist object for the specified module.
-
-=item version()
-
-This returns the version number for the specified module.
-
-=back
-
-=head1 EXAMPLE
-
-See the example in L<ExtUtils::Packlist>.
-
-=head1 AUTHOR
-
-Alan Burlison <Alan.Burlison@uk.sun.com>
-
-=cut
diff --git a/contrib/perl5/lib/ExtUtils/Liblist.pm b/contrib/perl5/lib/ExtUtils/Liblist.pm
deleted file mode 100644
index 75e3c08..0000000
--- a/contrib/perl5/lib/ExtUtils/Liblist.pm
+++ /dev/null
@@ -1,787 +0,0 @@
-# $FreeBSD$
-package ExtUtils::Liblist;
-
-@ISA = qw(ExtUtils::Liblist::Kid File::Spec);
-
-sub lsdir {
- shift;
- my $rex = qr/$_[1]/;
- opendir my $dir, $_[0];
- grep /$rex/, readdir $dir;
-}
-
-sub file_name_is_absolute {
- require File::Spec;
- shift;
- 'File::Spec'->file_name_is_absolute(@_);
-}
-
-
-package ExtUtils::Liblist::Kid;
-
-# This kid package is to be used by MakeMaker. It will not work if
-# $self is not a Makemaker.
-
-use 5.005_64;
-# Broken out of MakeMaker from version 4.11
-
-our $VERSION = substr q$Revision: 1.26 $, 10;
-
-use Config;
-use Cwd 'cwd';
-use File::Basename;
-
-sub ext {
- if ($^O eq 'VMS') { return &_vms_ext; }
- elsif($^O eq 'MSWin32') { return &_win32_ext; }
- else { return &_unix_os2_ext; }
-}
-
-sub _unix_os2_ext {
- my($self,$potential_libs, $verbose, $give_libs) = @_;
- if ($^O =~ 'os2' and $Config{perllibs}) {
- # Dynamic libraries are not transitive, so we may need including
- # the libraries linked against perl.dll again.
-
- $potential_libs .= " " if $potential_libs;
- $potential_libs .= $Config{perllibs};
- }
- return ("", "", "", "", ($give_libs ? [] : ())) unless $potential_libs;
- warn "Potential libraries are '$potential_libs':\n" if $verbose;
-
- my($so) = $Config{'so'};
- my($libs) = $Config{'perllibs'};
- my $Config_libext = $Config{lib_ext} || ".a";
-
-
- # compute $extralibs, $bsloadlibs and $ldloadlibs from
- # $potential_libs
- # this is a rewrite of Andy Dougherty's extliblist in perl
-
- my(@searchpath); # from "-L/path" entries in $potential_libs
- my(@libpath) = split " ", $Config{'libpth'};
- my(@ldloadlibs, @bsloadlibs, @extralibs, @ld_run_path, %ld_run_path_seen);
- my(@libs, %libs_seen);
- my($fullname, $thislib, $thispth, @fullname);
- my($pwd) = cwd(); # from Cwd.pm
- my($found) = 0;
-
- foreach $thislib (split ' ', $potential_libs){
-
- # Handle possible linker path arguments.
- if ($thislib =~ s/^(-[LR])//){ # save path flag type
- my($ptype) = $1;
- unless (-d $thislib){
- warn "$ptype$thislib ignored, directory does not exist\n"
- if $verbose;
- next;
- }
- unless ($self->file_name_is_absolute($thislib)) {
- warn "Warning: $ptype$thislib changed to $ptype$pwd/$thislib\n";
- $thislib = $self->catdir($pwd,$thislib);
- }
- push(@searchpath, $thislib);
- push(@extralibs, "$ptype$thislib");
- push(@ldloadlibs, "$ptype$thislib");
- next;
- }
-
- # Handle possible library arguments.
- unless ($thislib =~ s/^-l//){
- warn "Unrecognized argument in LIBS ignored: '$thislib'\n";
- next;
- }
-
- my($found_lib)=0;
- foreach $thispth (@searchpath, @libpath){
-
- # Try to find the full name of the library. We need this to
- # determine whether it's a dynamically-loadable library or not.
- # This tends to be subject to various os-specific quirks.
- # For gcc-2.6.2 on linux (March 1995), DLD can not load
- # .sa libraries, with the exception of libm.sa, so we
- # deliberately skip them.
- if (@fullname =
- $self->lsdir($thispth,"^\Qlib$thislib.$so.\E[0-9]+")){
- # Take care that libfoo.so.10 wins against libfoo.so.9.
- # Compare two libraries to find the most recent version
- # number. E.g. if you have libfoo.so.9.0.7 and
- # libfoo.so.10.1, first convert all digits into two
- # decimal places. Then we'll add ".00" to the shorter
- # strings so that we're comparing strings of equal length
- # Thus we'll compare libfoo.so.09.07.00 with
- # libfoo.so.10.01.00. Some libraries might have letters
- # in the version. We don't know what they mean, but will
- # try to skip them gracefully -- we'll set any letter to
- # '0'. Finally, sort in reverse so we can take the
- # first element.
-
- #TODO: iterate through the directory instead of sorting
-
- $fullname = "$thispth/" .
- (sort { my($ma) = $a;
- my($mb) = $b;
- $ma =~ tr/A-Za-z/0/s;
- $ma =~ s/\b(\d)\b/0$1/g;
- $mb =~ tr/A-Za-z/0/s;
- $mb =~ s/\b(\d)\b/0$1/g;
- while (length($ma) < length($mb)) { $ma .= ".00"; }
- while (length($mb) < length($ma)) { $mb .= ".00"; }
- # Comparison deliberately backwards
- $mb cmp $ma;} @fullname)[0];
- } elsif (-f ($fullname="$thispth/lib$thislib.$so")
- && (($Config{'dlsrc'} ne "dl_dld.xs") || ($thislib eq "m"))){
- } elsif (-f ($fullname="$thispth/lib${thislib}_s$Config_libext")
- && (! $Config{'archname'} =~ /RM\d\d\d-svr4/)
- && ($thislib .= "_s") ){ # we must explicitly use _s version
- } elsif (-f ($fullname="$thispth/lib$thislib$Config_libext")){
- } elsif (-f ($fullname="$thispth/$thislib$Config_libext")){
- } elsif (-f ($fullname="$thispth/Slib$thislib$Config_libext")){
- } elsif ($^O eq 'dgux'
- && -l ($fullname="$thispth/lib$thislib$Config_libext")
- && readlink($fullname) =~ /^elink:/s) {
- # Some of DG's libraries look like misconnected symbolic
- # links, but development tools can follow them. (They
- # look like this:
- #
- # libm.a -> elink:${SDE_PATH:-/usr}/sde/\
- # ${TARGET_BINARY_INTERFACE:-m88kdgux}/usr/lib/libm.a
- #
- # , the compilation tools expand the environment variables.)
- } else {
- warn "$thislib not found in $thispth\n" if $verbose;
- next;
- }
- warn "'-l$thislib' found at $fullname\n" if $verbose;
- my($fullnamedir) = dirname($fullname);
- push @ld_run_path, $fullnamedir unless $ld_run_path_seen{$fullnamedir}++;
- push @libs, $fullname unless $libs_seen{$fullname}++;
- $found++;
- $found_lib++;
-
- # Now update library lists
-
- # what do we know about this library...
- my $is_dyna = ($fullname !~ /\Q$Config_libext\E\z/);
- my $in_perl = ($libs =~ /\B-l\Q$ {thislib}\E\b/s);
-
- # Do not add it into the list if it is already linked in
- # with the main perl executable.
- # We have to special-case the NeXT, because math and ndbm
- # are both in libsys_s
- unless ($in_perl ||
- ($Config{'osname'} eq 'next' &&
- ($thislib eq 'm' || $thislib eq 'ndbm')) ){
- push(@extralibs, "-l$thislib");
- }
-
- # We might be able to load this archive file dynamically
- if ( ($Config{'dlsrc'} =~ /dl_next/ && $Config{'osvers'} lt '4_0')
- || ($Config{'dlsrc'} =~ /dl_dld/) )
- {
- # We push -l$thislib instead of $fullname because
- # it avoids hardwiring a fixed path into the .bs file.
- # Mkbootstrap will automatically add dl_findfile() to
- # the .bs file if it sees a name in the -l format.
- # USE THIS, when dl_findfile() is fixed:
- # push(@bsloadlibs, "-l$thislib");
- # OLD USE WAS while checking results against old_extliblist
- push(@bsloadlibs, "$fullname");
- } else {
- if ($is_dyna){
- # For SunOS4, do not add in this shared library if
- # it is already linked in the main perl executable
- push(@ldloadlibs, "-l$thislib")
- unless ($in_perl and $^O eq 'sunos');
- } else {
- push(@ldloadlibs, "-l$thislib");
- }
- }
- last; # found one here so don't bother looking further
- }
- warn "Note (probably harmless): "
- ."No library found for -l$thislib\n"
- unless $found_lib>0;
- }
- return ('','','','', ($give_libs ? \@libs : ())) unless $found;
- ("@extralibs", "@bsloadlibs", "@ldloadlibs",join(":",@ld_run_path), ($give_libs ? \@libs : ()));
-}
-
-sub _win32_ext {
-
- require Text::ParseWords;
-
- my($self, $potential_libs, $verbose, $give_libs) = @_;
-
- # If user did not supply a list, we punt.
- # (caller should probably use the list in $Config{libs})
- return ("", "", "", "", ($give_libs ? [] : ())) unless $potential_libs;
-
- my $cc = $Config{cc};
- my $VC = 1 if $cc =~ /^cl/i;
- my $BC = 1 if $cc =~ /^bcc/i;
- my $GC = 1 if $cc =~ /^gcc/i;
- my $so = $Config{'so'};
- my $libs = $Config{'perllibs'};
- my $libpth = $Config{'libpth'};
- my $libext = $Config{'lib_ext'} || ".lib";
- my(@libs, %libs_seen);
-
- if ($libs and $potential_libs !~ /:nodefault/i) {
- # If Config.pm defines a set of default libs, we always
- # tack them on to the user-supplied list, unless the user
- # specified :nodefault
-
- $potential_libs .= " " if $potential_libs;
- $potential_libs .= $libs;
- }
- warn "Potential libraries are '$potential_libs':\n" if $verbose;
-
- # normalize to forward slashes
- $libpth =~ s,\\,/,g;
- $potential_libs =~ s,\\,/,g;
-
- # compute $extralibs from $potential_libs
-
- my @searchpath; # from "-L/path" in $potential_libs
- my @libpath = Text::ParseWords::quotewords('\s+', 0, $libpth);
- my @extralibs;
- my $pwd = cwd(); # from Cwd.pm
- my $lib = '';
- my $found = 0;
- my $search = 1;
- my($fullname, $thislib, $thispth);
-
- # add "$Config{installarchlib}/CORE" to default search path
- push @libpath, "$Config{installarchlib}/CORE";
-
- if ($VC and exists $ENV{LIB} and $ENV{LIB}) {
- push @libpath, split /;/, $ENV{LIB};
- }
-
- foreach (Text::ParseWords::quotewords('\s+', 0, $potential_libs)){
-
- $thislib = $_;
-
- # see if entry is a flag
- if (/^:\w+$/) {
- $search = 0 if lc eq ':nosearch';
- $search = 1 if lc eq ':search';
- warn "Ignoring unknown flag '$thislib'\n"
- if $verbose and !/^:(no)?(search|default)$/i;
- next;
- }
-
- # if searching is disabled, do compiler-specific translations
- unless ($search) {
- s/^-l(.+)$/$1.lib/ unless $GC;
- s/^-L/-libpath:/ if $VC;
- push(@extralibs, $_);
- $found++;
- next;
- }
-
- # handle possible linker path arguments
- if (s/^-L// and not -d) {
- warn "$thislib ignored, directory does not exist\n"
- if $verbose;
- next;
- }
- elsif (-d) {
- unless ($self->file_name_is_absolute($_)) {
- warn "Warning: '$thislib' changed to '-L$pwd/$_'\n";
- $_ = $self->catdir($pwd,$_);
- }
- push(@searchpath, $_);
- next;
- }
-
- # handle possible library arguments
- if (s/^-l// and $GC and !/^lib/i) {
- $_ = "lib$_";
- }
- $_ .= $libext if !/\Q$libext\E$/i;
-
- my $secondpass = 0;
- LOOKAGAIN:
-
- # look for the file itself
- if (-f) {
- warn "'$thislib' found as '$_'\n" if $verbose;
- $found++;
- push(@extralibs, $_);
- next;
- }
-
- my $found_lib = 0;
- foreach $thispth (@searchpath, @libpath){
- unless (-f ($fullname="$thispth\\$_")) {
- warn "'$thislib' not found as '$fullname'\n" if $verbose;
- next;
- }
- warn "'$thislib' found as '$fullname'\n" if $verbose;
- $found++;
- $found_lib++;
- push(@extralibs, $fullname);
- push @libs, $fullname unless $libs_seen{$fullname}++;
- last;
- }
-
- # do another pass with (or without) leading 'lib' if they used -l
- if (!$found_lib and $thislib =~ /^-l/ and !$secondpass++) {
- if ($GC) {
- goto LOOKAGAIN if s/^lib//i;
- }
- elsif (!/^lib/i) {
- $_ = "lib$_";
- goto LOOKAGAIN;
- }
- }
-
- # give up
- warn "Note (probably harmless): "
- ."No library found for '$thislib'\n"
- unless $found_lib>0;
-
- }
-
- return ('','','','', ($give_libs ? \@libs : ())) unless $found;
-
- # make sure paths with spaces are properly quoted
- @extralibs = map { (/\s/ && !/^".*"$/) ? qq["$_"] : $_ } @extralibs;
- @libs = map { (/\s/ && !/^".*"$/) ? qq["$_"] : $_ } @libs;
- $lib = join(' ',@extralibs);
-
- # normalize back to backward slashes (to help braindead tools)
- # XXX this may break equally braindead GNU tools that don't understand
- # backslashes, either. Seems like one can't win here. Cursed be CP/M.
- $lib =~ s,/,\\,g;
-
- warn "Result: $lib\n" if $verbose;
- wantarray ? ($lib, '', $lib, '', ($give_libs ? \@libs : ())) : $lib;
-}
-
-
-sub _vms_ext {
- my($self, $potential_libs,$verbose,$give_libs) = @_;
- my(@crtls,$crtlstr);
- my($dbgqual) = $self->{OPTIMIZE} || $Config{'optimize'} ||
- $self->{CCFLAS} || $Config{'ccflags'};
- @crtls = ( ($dbgqual =~ m-/Debug-i ? $Config{'dbgprefix'} : '')
- . 'PerlShr/Share' );
- push(@crtls, grep { not /\(/ } split /\s+/, $Config{'perllibs'});
- push(@crtls, grep { not /\(/ } split /\s+/, $Config{'libc'});
- # In general, we pass through the basic libraries from %Config unchanged.
- # The one exception is that if we're building in the Perl source tree, and
- # a library spec could be resolved via a logical name, we go to some trouble
- # to insure that the copy in the local tree is used, rather than one to
- # which a system-wide logical may point.
- if ($self->{PERL_SRC}) {
- my($lib,$locspec,$type);
- foreach $lib (@crtls) {
- if (($locspec,$type) = $lib =~ m-^([\w$\-]+)(/\w+)?- and $locspec =~ /perl/i) {
- if (lc $type eq '/share') { $locspec .= $Config{'exe_ext'}; }
- elsif (lc $type eq '/library') { $locspec .= $Config{'lib_ext'}; }
- else { $locspec .= $Config{'obj_ext'}; }
- $locspec = $self->catfile($self->{PERL_SRC},$locspec);
- $lib = "$locspec$type" if -e $locspec;
- }
- }
- }
- $crtlstr = @crtls ? join(' ',@crtls) : '';
-
- unless ($potential_libs) {
- warn "Result:\n\tEXTRALIBS: \n\tLDLOADLIBS: $crtlstr\n" if $verbose;
- return ('', '', $crtlstr, '', ($give_libs ? [] : ()));
- }
-
- my(@dirs,@libs,$dir,$lib,%found,@fndlibs,$ldlib);
- my $cwd = cwd();
- my($so,$lib_ext,$obj_ext) = @Config{'so','lib_ext','obj_ext'};
- # List of common Unix library names and there VMS equivalents
- # (VMS equivalent of '' indicates that the library is automatially
- # searched by the linker, and should be skipped here.)
- my(@flibs, %libs_seen);
- my %libmap = ( 'm' => '', 'f77' => '', 'F77' => '', 'V77' => '', 'c' => '',
- 'malloc' => '', 'crypt' => '', 'resolv' => '', 'c_s' => '',
- 'socket' => '', 'X11' => 'DECW$XLIBSHR',
- 'Xt' => 'DECW$XTSHR', 'Xm' => 'DECW$XMLIBSHR',
- 'Xmu' => 'DECW$XMULIBSHR');
- if ($Config{'vms_cc_type'} ne 'decc') { $libmap{'curses'} = 'VAXCCURSE'; }
-
- warn "Potential libraries are '$potential_libs'\n" if $verbose;
-
- # First, sort out directories and library names in the input
- foreach $lib (split ' ',$potential_libs) {
- push(@dirs,$1), next if $lib =~ /^-L(.*)/;
- push(@dirs,$lib), next if $lib =~ /[:>\]]$/;
- push(@dirs,$lib), next if -d $lib;
- push(@libs,$1), next if $lib =~ /^-l(.*)/;
- push(@libs,$lib);
- }
- push(@dirs,split(' ',$Config{'libpth'}));
-
- # Now make sure we've got VMS-syntax absolute directory specs
- # (We don't, however, check whether someone's hidden a relative
- # path in a logical name.)
- foreach $dir (@dirs) {
- unless (-d $dir) {
- warn "Skipping nonexistent Directory $dir\n" if $verbose > 1;
- $dir = '';
- next;
- }
- warn "Resolving directory $dir\n" if $verbose;
- if ($self->file_name_is_absolute($dir)) { $dir = $self->fixpath($dir,1); }
- else { $dir = $self->catdir($cwd,$dir); }
- }
- @dirs = grep { length($_) } @dirs;
- unshift(@dirs,''); # Check each $lib without additions first
-
- LIB: foreach $lib (@libs) {
- if (exists $libmap{$lib}) {
- next unless length $libmap{$lib};
- $lib = $libmap{$lib};
- }
-
- my(@variants,$variant,$name,$test,$cand);
- my($ctype) = '';
-
- # If we don't have a file type, consider it a possibly abbreviated name and
- # check for common variants. We try these first to grab libraries before
- # a like-named executable image (e.g. -lperl resolves to perlshr.exe
- # before perl.exe).
- if ($lib !~ /\.[^:>\]]*$/) {
- push(@variants,"${lib}shr","${lib}rtl","${lib}lib");
- push(@variants,"lib$lib") if $lib !~ /[:>\]]/;
- }
- push(@variants,$lib);
- warn "Looking for $lib\n" if $verbose;
- foreach $variant (@variants) {
- foreach $dir (@dirs) {
- my($type);
-
- $name = "$dir$variant";
- warn "\tChecking $name\n" if $verbose > 2;
- if (-f ($test = VMS::Filespec::rmsexpand($name))) {
- # It's got its own suffix, so we'll have to figure out the type
- if ($test =~ /(?:$so|exe)$/i) { $type = 'SHR'; }
- elsif ($test =~ /(?:$lib_ext|olb)$/i) { $type = 'OLB'; }
- elsif ($test =~ /(?:$obj_ext|obj)$/i) {
- warn "Note (probably harmless): "
- ."Plain object file $test found in library list\n";
- $type = 'OBJ';
- }
- else {
- warn "Note (probably harmless): "
- ."Unknown library type for $test; assuming shared\n";
- $type = 'SHR';
- }
- }
- elsif (-f ($test = VMS::Filespec::rmsexpand($name,$so)) or
- -f ($test = VMS::Filespec::rmsexpand($name,'.exe'))) {
- $type = 'SHR';
- $name = $test unless $test =~ /exe;?\d*$/i;
- }
- elsif (not length($ctype) and # If we've got a lib already, don't bother
- ( -f ($test = VMS::Filespec::rmsexpand($name,$lib_ext)) or
- -f ($test = VMS::Filespec::rmsexpand($name,'.olb')))) {
- $type = 'OLB';
- $name = $test unless $test =~ /olb;?\d*$/i;
- }
- elsif (not length($ctype) and # If we've got a lib already, don't bother
- ( -f ($test = VMS::Filespec::rmsexpand($name,$obj_ext)) or
- -f ($test = VMS::Filespec::rmsexpand($name,'.obj')))) {
- warn "Note (probably harmless): "
- ."Plain object file $test found in library list\n";
- $type = 'OBJ';
- $name = $test unless $test =~ /obj;?\d*$/i;
- }
- if (defined $type) {
- $ctype = $type; $cand = $name;
- last if $ctype eq 'SHR';
- }
- }
- if ($ctype) {
- # This has to precede any other CRTLs, so just make it first
- if ($cand eq 'VAXCCURSE') { unshift @{$found{$ctype}}, $cand; }
- else { push @{$found{$ctype}}, $cand; }
- warn "\tFound as $cand (really $test), type $ctype\n" if $verbose > 1;
- push @flibs, $name unless $libs_seen{$fullname}++;
- next LIB;
- }
- }
- warn "Note (probably harmless): "
- ."No library found for $lib\n";
- }
-
- push @fndlibs, @{$found{OBJ}} if exists $found{OBJ};
- push @fndlibs, map { "$_/Library" } @{$found{OLB}} if exists $found{OLB};
- push @fndlibs, map { "$_/Share" } @{$found{SHR}} if exists $found{SHR};
- $lib = join(' ',@fndlibs);
-
- $ldlib = $crtlstr ? "$lib $crtlstr" : $lib;
- warn "Result:\n\tEXTRALIBS: $lib\n\tLDLOADLIBS: $ldlib\n" if $verbose;
- wantarray ? ($lib, '', $ldlib, '', ($give_libs ? \@flibs : ())) : $lib;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-ExtUtils::Liblist - determine libraries to use and how to use them
-
-=head1 SYNOPSIS
-
-C<require ExtUtils::Liblist;>
-
-C<ExtUtils::Liblist::ext($self, $potential_libs, $verbose, $need_names);>
-
-=head1 DESCRIPTION
-
-This utility takes a list of libraries in the form C<-llib1 -llib2
--llib3> and returns lines suitable for inclusion in an extension
-Makefile. Extra library paths may be included with the form
-C<-L/another/path> this will affect the searches for all subsequent
-libraries.
-
-It returns an array of four or five scalar values: EXTRALIBS,
-BSLOADLIBS, LDLOADLIBS, LD_RUN_PATH, and, optionally, a reference to
-the array of the filenames of actual libraries. Some of these don't
-mean anything unless on Unix. See the details about those platform
-specifics below. The list of the filenames is returned only if
-$need_names argument is true.
-
-Dependent libraries can be linked in one of three ways:
-
-=over 2
-
-=item * For static extensions
-
-by the ld command when the perl binary is linked with the extension
-library. See EXTRALIBS below.
-
-=item * For dynamic extensions
-
-by the ld command when the shared object is built/linked. See
-LDLOADLIBS below.
-
-=item * For dynamic extensions
-
-by the DynaLoader when the shared object is loaded. See BSLOADLIBS
-below.
-
-=back
-
-=head2 EXTRALIBS
-
-List of libraries that need to be linked with when linking a perl
-binary which includes this extension. Only those libraries that
-actually exist are included. These are written to a file and used
-when linking perl.
-
-=head2 LDLOADLIBS and LD_RUN_PATH
-
-List of those libraries which can or must be linked into the shared
-library when created using ld. These may be static or dynamic
-libraries. LD_RUN_PATH is a colon separated list of the directories
-in LDLOADLIBS. It is passed as an environment variable to the process
-that links the shared library.
-
-=head2 BSLOADLIBS
-
-List of those libraries that are needed but can be linked in
-dynamically at run time on this platform. SunOS/Solaris does not need
-this because ld records the information (from LDLOADLIBS) into the
-object file. This list is used to create a .bs (bootstrap) file.
-
-=head1 PORTABILITY
-
-This module deals with a lot of system dependencies and has quite a
-few architecture specific C<if>s in the code.
-
-=head2 VMS implementation
-
-The version of ext() which is executed under VMS differs from the
-Unix-OS/2 version in several respects:
-
-=over 2
-
-=item *
-
-Input library and path specifications are accepted with or without the
-C<-l> and C<-L> prefixes used by Unix linkers. If neither prefix is
-present, a token is considered a directory to search if it is in fact
-a directory, and a library to search for otherwise. Authors who wish
-their extensions to be portable to Unix or OS/2 should use the Unix
-prefixes, since the Unix-OS/2 version of ext() requires them.
-
-=item *
-
-Wherever possible, shareable images are preferred to object libraries,
-and object libraries to plain object files. In accordance with VMS
-naming conventions, ext() looks for files named I<lib>shr and I<lib>rtl;
-it also looks for I<lib>lib and libI<lib> to accommodate Unix conventions
-used in some ported software.
-
-=item *
-
-For each library that is found, an appropriate directive for a linker options
-file is generated. The return values are space-separated strings of
-these directives, rather than elements used on the linker command line.
-
-=item *
-
-LDLOADLIBS contains both the libraries found based on C<$potential_libs> and
-the CRTLs, if any, specified in Config.pm. EXTRALIBS contains just those
-libraries found based on C<$potential_libs>. BSLOADLIBS and LD_RUN_PATH
-are always empty.
-
-=back
-
-In addition, an attempt is made to recognize several common Unix library
-names, and filter them out or convert them to their VMS equivalents, as
-appropriate.
-
-In general, the VMS version of ext() should properly handle input from
-extensions originally designed for a Unix or VMS environment. If you
-encounter problems, or discover cases where the search could be improved,
-please let us know.
-
-=head2 Win32 implementation
-
-The version of ext() which is executed under Win32 differs from the
-Unix-OS/2 version in several respects:
-
-=over 2
-
-=item *
-
-If C<$potential_libs> is empty, the return value will be empty.
-Otherwise, the libraries specified by C<$Config{perllibs}> (see Config.pm)
-will be appended to the list of C<$potential_libs>. The libraries
-will be searched for in the directories specified in C<$potential_libs>,
-C<$Config{libpth}>, and in C<$Config{installarchlib}/CORE>.
-For each library that is found, a space-separated list of fully qualified
-library pathnames is generated.
-
-=item *
-
-Input library and path specifications are accepted with or without the
-C<-l> and C<-L> prefixes used by Unix linkers.
-
-An entry of the form C<-La:\foo> specifies the C<a:\foo> directory to look
-for the libraries that follow.
-
-An entry of the form C<-lfoo> specifies the library C<foo>, which may be
-spelled differently depending on what kind of compiler you are using. If
-you are using GCC, it gets translated to C<libfoo.a>, but for other win32
-compilers, it becomes C<foo.lib>. If no files are found by those translated
-names, one more attempt is made to find them using either C<foo.a> or
-C<libfoo.lib>, depending on whether GCC or some other win32 compiler is
-being used, respectively.
-
-If neither the C<-L> or C<-l> prefix is present in an entry, the entry is
-considered a directory to search if it is in fact a directory, and a
-library to search for otherwise. The C<$Config{lib_ext}> suffix will
-be appended to any entries that are not directories and don't already have
-the suffix.
-
-Note that the C<-L> and C<-l> prefixes are B<not required>, but authors
-who wish their extensions to be portable to Unix or OS/2 should use the
-prefixes, since the Unix-OS/2 version of ext() requires them.
-
-=item *
-
-Entries cannot be plain object files, as many Win32 compilers will
-not handle object files in the place of libraries.
-
-=item *
-
-Entries in C<$potential_libs> beginning with a colon and followed by
-alphanumeric characters are treated as flags. Unknown flags will be ignored.
-
-An entry that matches C</:nodefault/i> disables the appending of default
-libraries found in C<$Config{perllibs}> (this should be only needed very rarely).
-
-An entry that matches C</:nosearch/i> disables all searching for
-the libraries specified after it. Translation of C<-Lfoo> and
-C<-lfoo> still happens as appropriate (depending on compiler being used,
-as reflected by C<$Config{cc}>), but the entries are not verified to be
-valid files or directories.
-
-An entry that matches C</:search/i> reenables searching for
-the libraries specified after it. You can put it at the end to
-enable searching for default libraries specified by C<$Config{perllibs}>.
-
-=item *
-
-The libraries specified may be a mixture of static libraries and
-import libraries (to link with DLLs). Since both kinds are used
-pretty transparently on the Win32 platform, we do not attempt to
-distinguish between them.
-
-=item *
-
-LDLOADLIBS and EXTRALIBS are always identical under Win32, and BSLOADLIBS
-and LD_RUN_PATH are always empty (this may change in future).
-
-=item *
-
-You must make sure that any paths and path components are properly
-surrounded with double-quotes if they contain spaces. For example,
-C<$potential_libs> could be (literally):
-
- "-Lc:\Program Files\vc\lib" msvcrt.lib "la test\foo bar.lib"
-
-Note how the first and last entries are protected by quotes in order
-to protect the spaces.
-
-=item *
-
-Since this module is most often used only indirectly from extension
-C<Makefile.PL> files, here is an example C<Makefile.PL> entry to add
-a library to the build process for an extension:
-
- LIBS => ['-lgl']
-
-When using GCC, that entry specifies that MakeMaker should first look
-for C<libgl.a> (followed by C<gl.a>) in all the locations specified by
-C<$Config{libpth}>.
-
-When using a compiler other than GCC, the above entry will search for
-C<gl.lib> (followed by C<libgl.lib>).
-
-If the library happens to be in a location not in C<$Config{libpth}>,
-you need:
-
- LIBS => ['-Lc:\gllibs -lgl']
-
-Here is a less often used example:
-
- LIBS => ['-lgl', ':nosearch -Ld:\mesalibs -lmesa -luser32']
-
-This specifies a search for library C<gl> as before. If that search
-fails to find the library, it looks at the next item in the list. The
-C<:nosearch> flag will prevent searching for the libraries that follow,
-so it simply returns the value as C<-Ld:\mesalibs -lmesa -luser32>,
-since GCC can use that value as is with its linker.
-
-When using the Visual C compiler, the second item is returned as
-C<-libpath:d:\mesalibs mesa.lib user32.lib>.
-
-When using the Borland compiler, the second item is returned as
-C<-Ld:\mesalibs mesa.lib user32.lib>, and MakeMaker takes care of
-moving the C<-Ld:\mesalibs> to the correct place in the linker
-command line.
-
-=back
-
-
-=head1 SEE ALSO
-
-L<ExtUtils::MakeMaker>
-
-=cut
-
diff --git a/contrib/perl5/lib/ExtUtils/MM_Cygwin.pm b/contrib/perl5/lib/ExtUtils/MM_Cygwin.pm
deleted file mode 100644
index 439c67c..0000000
--- a/contrib/perl5/lib/ExtUtils/MM_Cygwin.pm
+++ /dev/null
@@ -1,123 +0,0 @@
-package ExtUtils::MM_Cygwin;
-
-use Config;
-#use Cwd;
-#use File::Basename;
-require Exporter;
-
-Exporter::import('ExtUtils::MakeMaker',
- qw( $Verbose &neatvalue));
-
-unshift @MM::ISA, 'ExtUtils::MM_Cygwin';
-
-sub canonpath {
- my($self,$path) = @_;
- $path =~ s|\\|/|g;
- return $self->ExtUtils::MM_Unix::canonpath($path);
-}
-
-sub cflags {
- my($self,$libperl)=@_;
- return $self->{CFLAGS} if $self->{CFLAGS};
- my $base =$self->ExtUtils::MM_Unix::cflags($libperl);
- foreach (split /\n/, $base) {
- / *= */ and $self->{$`} = $';
- };
- $self->{CCFLAGS} .= " -DUSEIMPORTLIB" if ($Config{useshrplib} eq 'true');
-
- return $self->{CFLAGS} = qq{
-CCFLAGS = $self->{CCFLAGS}
-OPTIMIZE = $self->{OPTIMIZE}
-PERLTYPE = $self->{PERLTYPE}
-LARGE = $self->{LARGE}
-SPLIT = $self->{SPLIT}
-};
-
-}
-
-sub manifypods {
- my($self, %attribs) = @_;
- return "\nmanifypods : pure_all\n\t$self->{NOECHO}\$(NOOP)\n" unless
- %{$self->{MAN3PODS}} or %{$self->{MAN1PODS}};
- my($dist);
- my($pod2man_exe);
- if (defined $self->{PERL_SRC}) {
- $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
- } else {
- $pod2man_exe = $self->catfile($Config{scriptdirexp},'pod2man');
- }
- unless ($self->perl_script($pod2man_exe)) {
- # No pod2man but some MAN3PODS to be installed
- print <<END;
-
-Warning: I could not locate your pod2man program. Please make sure,
- your pod2man program is in your PATH before you execute 'make'
-
-END
- $pod2man_exe = "-S pod2man";
- }
- my(@m);
- push @m,
-qq[POD2MAN_EXE = $pod2man_exe\n],
-qq[POD2MAN = \$(PERL) -we '%m=\@ARGV;for (keys %m){' \\\n],
-q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "],
- $self->{MAKEFILE}, q[";' \\
--e 'print "Manifying $$m{$$_}\n"; $$m{$$_} =~ s/::/./g;' \\
--e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
--e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
-];
- push @m, "\nmanifypods : pure_all ";
- push @m, join " \\\n\t", keys %{$self->{MAN1PODS}}, keys %{$self->{MAN3PODS}};
-
- push(@m,"\n");
- if (%{$self->{MAN1PODS}} || %{$self->{MAN3PODS}}) {
- grep { $self->{MAN1PODS}{$_} =~ s/::/./g } keys %{$self->{MAN1PODS}};
- grep { $self->{MAN3PODS}{$_} =~ s/::/./g } keys %{$self->{MAN3PODS}};
- push @m, "\t$self->{NOECHO}\$(POD2MAN) \\\n\t";
- push @m, join " \\\n\t", %{$self->{MAN1PODS}}, %{$self->{MAN3PODS}};
- }
- join('', @m);
-}
-
-sub perl_archive
-{
- return '$(PERL_INC)' .'/'. ("$Config{libperl}" or "libperl.a");
-}
-
-1;
-__END__
-
-=head1 NAME
-
-ExtUtils::MM_Cygwin - methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=head1 SYNOPSIS
-
- use ExtUtils::MM_Cygwin; # Done internally by ExtUtils::MakeMaker if needed
-
-=head1 DESCRIPTION
-
-See ExtUtils::MM_Unix for a documentation of the methods provided there.
-
-=over
-
-=item canonpath
-
-replaces backslashes with forward ones. then acts as *nixish.
-
-=item cflags
-
-if configured for dynamic loading, triggers #define EXT in EXTERN.h
-
-=item manifypods
-
-replaces strings '::' with '.' in man page names
-
-=item perl_archive
-
-points to libperl.a
-
-=back
-
-=cut
-
diff --git a/contrib/perl5/lib/ExtUtils/MM_OS2.pm b/contrib/perl5/lib/ExtUtils/MM_OS2.pm
deleted file mode 100644
index cd6a1e4..0000000
--- a/contrib/perl5/lib/ExtUtils/MM_OS2.pm
+++ /dev/null
@@ -1,134 +0,0 @@
-package ExtUtils::MM_OS2;
-
-#use Config;
-#use Cwd;
-#use File::Basename;
-require Exporter;
-
-Exporter::import('ExtUtils::MakeMaker',
- qw( $Verbose &neatvalue));
-
-unshift @MM::ISA, 'ExtUtils::MM_OS2';
-
-sub dlsyms {
- my($self,%attribs) = @_;
-
- my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
- my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
- my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
- my($imports) = $attribs{IMPORTS} || $self->{IMPORTS} || {};
- my(@m);
- (my $boot = $self->{NAME}) =~ s/:/_/g;
-
- if (not $self->{SKIPHASH}{'dynamic'}) {
- push(@m,"
-$self->{BASEEXT}.def: Makefile.PL
-",
- ' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::Mksymlists; \\
- Mksymlists("NAME" => "$(NAME)", "DLBASE" => "$(DLBASE)", ',
- '"VERSION" => "$(VERSION)", "DISTNAME" => "$(DISTNAME)", ',
- '"INSTALLDIRS" => "$(INSTALLDIRS)", ',
- '"DL_FUNCS" => ',neatvalue($funcs),
- ', "FUNCLIST" => ',neatvalue($funclist),
- ', "IMPORTS" => ',neatvalue($imports),
- ', "DL_VARS" => ', neatvalue($vars), ');\'
-');
- }
- if (%{$self->{IMPORTS}}) {
- # Make import files (needed for static build)
- -d 'tmp_imp' or mkdir 'tmp_imp', 0777 or die "Can't mkdir tmp_imp";
- open IMP, '>tmpimp.imp' or die "Can't open tmpimp.imp";
- my ($name, $exp);
- while (($name, $exp)= each %{$self->{IMPORTS}}) {
- my ($lib, $id) = ($exp =~ /(.*)\.(.*)/) or die "Malformed IMPORT `$exp'";
- print IMP "$name $lib $id ?\n";
- }
- close IMP or die "Can't close tmpimp.imp";
- # print "emximp -o tmpimp$Config::Config{lib_ext} tmpimp.imp\n";
- system "emximp -o tmpimp$Config::Config{lib_ext} tmpimp.imp"
- and die "Cannot make import library: $!, \$?=$?";
- unlink <tmp_imp/*>;
- system "cd tmp_imp; $Config::Config{ar} x ../tmpimp$Config::Config{lib_ext}"
- and die "Cannot extract import objects: $!, \$?=$?";
- }
- join('',@m);
-}
-
-sub static_lib {
- my($self) = @_;
- my $old = $self->ExtUtils::MM_Unix::static_lib();
- return $old unless %{$self->{IMPORTS}};
-
- my @chunks = split /\n{2,}/, $old;
- shift @chunks unless length $chunks[0]; # Empty lines at the start
- $chunks[0] .= <<'EOC';
-
- $(AR) $(AR_STATIC_ARGS) $@ tmp_imp/* && $(RANLIB) $@
-EOC
- return join "\n\n". '', @chunks;
-}
-
-sub replace_manpage_separator {
- my($self,$man) = @_;
- $man =~ s,/+,.,g;
- $man;
-}
-
-sub maybe_command {
- my($self,$file) = @_;
- $file =~ s,[/\\]+,/,g;
- return $file if -x $file && ! -d _;
- return "$file.exe" if -x "$file.exe" && ! -d _;
- return "$file.cmd" if -x "$file.cmd" && ! -d _;
- return;
-}
-
-sub file_name_is_absolute {
- my($self,$file) = @_;
- $file =~ m{^([a-z]:)?[\\/]}i ;
-}
-
-sub perl_archive
-{
- return "\$(PERL_INC)/libperl\$(LIB_EXT)";
-}
-
-=item perl_archive_after
-
-This is an internal method that returns path to a library which
-should be put on the linker command line I<after> the external libraries
-to be linked to dynamic extensions. This may be needed if the linker
-is one-pass, and Perl includes some overrides for C RTL functions,
-such as malloc().
-
-=cut
-
-sub perl_archive_after
-{
- return "\$(PERL_INC)/libperl_override\$(LIB_EXT)" unless $OS2::is_aout;
- return "";
-}
-
-sub export_list
-{
- my ($self) = @_;
- return "$self->{BASEEXT}.def";
-}
-
-1;
-__END__
-
-=head1 NAME
-
-ExtUtils::MM_OS2 - methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=head1 SYNOPSIS
-
- use ExtUtils::MM_OS2; # Done internally by ExtUtils::MakeMaker if needed
-
-=head1 DESCRIPTION
-
-See ExtUtils::MM_Unix for a documentation of the methods provided
-there. This package overrides the implementation of these methods, not
-the semantics.
-
diff --git a/contrib/perl5/lib/ExtUtils/MM_Unix.pm b/contrib/perl5/lib/ExtUtils/MM_Unix.pm
deleted file mode 100644
index 4284eb1..0000000
--- a/contrib/perl5/lib/ExtUtils/MM_Unix.pm
+++ /dev/null
@@ -1,3858 +0,0 @@
-# $FreeBSD$
-package ExtUtils::MM_Unix;
-
-use Exporter ();
-use Config;
-use File::Basename qw(basename dirname fileparse);
-use DirHandle;
-use strict;
-use vars qw($VERSION $Is_Mac $Is_OS2 $Is_VMS $Is_Win32 $Is_Dos $Is_PERL_OBJECT
- $Verbose %pm %static $Xsubpp_Version);
-
-$VERSION = substr q$Revision: 1.12603 $, 10;
-# $Id: MM_Unix.pm,v 1.126 1998/06/28 21:32:49 k Exp k $
-
-Exporter::import('ExtUtils::MakeMaker', qw($Verbose &neatvalue));
-
-$Is_OS2 = $^O eq 'os2';
-$Is_Mac = $^O eq 'MacOS';
-$Is_Win32 = $^O eq 'MSWin32';
-$Is_Dos = $^O eq 'dos';
-
-$Is_PERL_OBJECT = $Config{'ccflags'} =~ /-DPERL_OBJECT/;
-
-if ($Is_VMS = $^O eq 'VMS') {
- require VMS::Filespec;
- import VMS::Filespec qw( &vmsify );
-}
-
-=head1 NAME
-
-ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
-
-=head1 SYNOPSIS
-
-C<require ExtUtils::MM_Unix;>
-
-=head1 DESCRIPTION
-
-The methods provided by this package are designed to be used in
-conjunction with ExtUtils::MakeMaker. When MakeMaker writes a
-Makefile, it creates one or more objects that inherit their methods
-from a package C<MM>. MM itself doesn't provide any methods, but it
-ISA ExtUtils::MM_Unix class. The inheritance tree of MM lets operating
-specific packages take the responsibility for all the methods provided
-by MM_Unix. We are trying to reduce the number of the necessary
-overrides by defining rather primitive operations within
-ExtUtils::MM_Unix.
-
-If you are going to write a platform specific MM package, please try
-to limit the necessary overrides to primitive methods, and if it is not
-possible to do so, let's work out how to achieve that gain.
-
-If you are overriding any of these methods in your Makefile.PL (in the
-MY class), please report that to the makemaker mailing list. We are
-trying to minimize the necessary method overrides and switch to data
-driven Makefile.PLs wherever possible. In the long run less methods
-will be overridable via the MY class.
-
-=head1 METHODS
-
-The following description of methods is still under
-development. Please refer to the code for not suitably documented
-sections and complain loudly to the makemaker mailing list.
-
-Not all of the methods below are overridable in a
-Makefile.PL. Overridable methods are marked as (o). All methods are
-overridable by a platform specific MM_*.pm file (See
-L<ExtUtils::MM_VMS>) and L<ExtUtils::MM_OS2>).
-
-=head2 Preloaded methods
-
-=over 2
-
-=item canonpath
-
-No physical check on the filesystem, but a logical cleanup of a
-path. On UNIX eliminated successive slashes and successive "/.".
-
-=cut
-
-sub canonpath {
- my($self,$path) = @_;
- my $node = '';
- if ( $^O eq 'qnx' && $path =~ s|^(//\d+)/|/|s ) {
- $node = $1;
- }
- $path =~ s|(?<=[^/])/+|/|g ; # xx////xx -> xx/xx
- $path =~ s|(/\.)+/|/|g ; # xx/././xx -> xx/xx
- $path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
- $path =~ s|(?<=[^/])/\z|| ; # xx/ -> xx
- "$node$path";
-}
-
-=item catdir
-
-Concatenate two or more directory names to form a complete path ending
-with a directory. But remove the trailing slash from the resulting
-string, because it doesn't look good, isn't necessary and confuses
-OS2. Of course, if this is the root directory, don't cut off the
-trailing slash :-)
-
-=cut
-
-# ';
-
-sub catdir {
- my $self = shift @_;
- my @args = @_;
- for (@args) {
- # append a slash to each argument unless it has one there
- $_ .= "/" if $_ eq '' or substr($_,-1) ne "/";
- }
- $self->canonpath(join('', @args));
-}
-
-=item catfile
-
-Concatenate one or more directory names and a filename to form a
-complete path ending with a filename
-
-=cut
-
-sub catfile {
- my $self = shift @_;
- my $file = pop @_;
- return $self->canonpath($file) unless @_;
- my $dir = $self->catdir(@_);
- for ($dir) {
- $_ .= "/" unless substr($_,length($_)-1,1) eq "/";
- }
- return $self->canonpath($dir.$file);
-}
-
-=item curdir
-
-Returns a string representing of the current directory. "." on UNIX.
-
-=cut
-
-sub curdir {
- return "." ;
-}
-
-=item rootdir
-
-Returns a string representing of the root directory. "/" on UNIX.
-
-=cut
-
-sub rootdir {
- return "/";
-}
-
-=item updir
-
-Returns a string representing of the parent directory. ".." on UNIX.
-
-=cut
-
-sub updir {
- return "..";
-}
-
-sub ExtUtils::MM_Unix::c_o ;
-sub ExtUtils::MM_Unix::clean ;
-sub ExtUtils::MM_Unix::const_cccmd ;
-sub ExtUtils::MM_Unix::const_config ;
-sub ExtUtils::MM_Unix::const_loadlibs ;
-sub ExtUtils::MM_Unix::constants ;
-sub ExtUtils::MM_Unix::depend ;
-sub ExtUtils::MM_Unix::dir_target ;
-sub ExtUtils::MM_Unix::dist ;
-sub ExtUtils::MM_Unix::dist_basics ;
-sub ExtUtils::MM_Unix::dist_ci ;
-sub ExtUtils::MM_Unix::dist_core ;
-sub ExtUtils::MM_Unix::dist_dir ;
-sub ExtUtils::MM_Unix::dist_test ;
-sub ExtUtils::MM_Unix::dlsyms ;
-sub ExtUtils::MM_Unix::dynamic ;
-sub ExtUtils::MM_Unix::dynamic_bs ;
-sub ExtUtils::MM_Unix::dynamic_lib ;
-sub ExtUtils::MM_Unix::exescan ;
-sub ExtUtils::MM_Unix::export_list ;
-sub ExtUtils::MM_Unix::extliblist ;
-sub ExtUtils::MM_Unix::file_name_is_absolute ;
-sub ExtUtils::MM_Unix::find_perl ;
-sub ExtUtils::MM_Unix::fixin ;
-sub ExtUtils::MM_Unix::force ;
-sub ExtUtils::MM_Unix::guess_name ;
-sub ExtUtils::MM_Unix::has_link_code ;
-sub ExtUtils::MM_Unix::htmlifypods ;
-sub ExtUtils::MM_Unix::init_dirscan ;
-sub ExtUtils::MM_Unix::init_main ;
-sub ExtUtils::MM_Unix::init_others ;
-sub ExtUtils::MM_Unix::install ;
-sub ExtUtils::MM_Unix::installbin ;
-sub ExtUtils::MM_Unix::libscan ;
-sub ExtUtils::MM_Unix::linkext ;
-sub ExtUtils::MM_Unix::lsdir ;
-sub ExtUtils::MM_Unix::macro ;
-sub ExtUtils::MM_Unix::makeaperl ;
-sub ExtUtils::MM_Unix::makefile ;
-sub ExtUtils::MM_Unix::manifypods ;
-sub ExtUtils::MM_Unix::maybe_command ;
-sub ExtUtils::MM_Unix::maybe_command_in_dirs ;
-sub ExtUtils::MM_Unix::needs_linking ;
-sub ExtUtils::MM_Unix::nicetext ;
-sub ExtUtils::MM_Unix::parse_version ;
-sub ExtUtils::MM_Unix::pasthru ;
-sub ExtUtils::MM_Unix::path ;
-sub ExtUtils::MM_Unix::perl_archive;
-sub ExtUtils::MM_Unix::perl_archive_after;
-sub ExtUtils::MM_Unix::perl_script ;
-sub ExtUtils::MM_Unix::perldepend ;
-sub ExtUtils::MM_Unix::pm_to_blib ;
-sub ExtUtils::MM_Unix::post_constants ;
-sub ExtUtils::MM_Unix::post_initialize ;
-sub ExtUtils::MM_Unix::postamble ;
-sub ExtUtils::MM_Unix::ppd ;
-sub ExtUtils::MM_Unix::prefixify ;
-sub ExtUtils::MM_Unix::processPL ;
-sub ExtUtils::MM_Unix::realclean ;
-sub ExtUtils::MM_Unix::replace_manpage_separator ;
-sub ExtUtils::MM_Unix::static ;
-sub ExtUtils::MM_Unix::static_lib ;
-sub ExtUtils::MM_Unix::staticmake ;
-sub ExtUtils::MM_Unix::subdir_x ;
-sub ExtUtils::MM_Unix::subdirs ;
-sub ExtUtils::MM_Unix::test ;
-sub ExtUtils::MM_Unix::test_via_harness ;
-sub ExtUtils::MM_Unix::test_via_script ;
-sub ExtUtils::MM_Unix::tool_autosplit ;
-sub ExtUtils::MM_Unix::tool_xsubpp ;
-sub ExtUtils::MM_Unix::tools_other ;
-sub ExtUtils::MM_Unix::top_targets ;
-sub ExtUtils::MM_Unix::writedoc ;
-sub ExtUtils::MM_Unix::xs_c ;
-sub ExtUtils::MM_Unix::xs_cpp ;
-sub ExtUtils::MM_Unix::xs_o ;
-sub ExtUtils::MM_Unix::xsubpp_version ;
-
-package ExtUtils::MM_Unix;
-
-use SelfLoader;
-
-1;
-
-__DATA__
-
-=back
-
-=head2 SelfLoaded methods
-
-=over 2
-
-=item c_o (o)
-
-Defines the suffix rules to compile different flavors of C files to
-object files.
-
-=cut
-
-sub c_o {
-# --- Translation Sections ---
-
- my($self) = shift;
- return '' unless $self->needs_linking();
- my(@m);
- push @m, '
-.c$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
-';
- push @m, '
-.C$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.C
-' if $^O ne 'os2' and $^O ne 'MSWin32' and $^O ne 'dos'; #Case-specific
- push @m, '
-.cpp$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cpp
-
-.cxx$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cxx
-
-.cc$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cc
-';
- join "", @m;
-}
-
-=item cflags (o)
-
-Does very much the same as the cflags script in the perl
-distribution. It doesn't return the whole compiler command line, but
-initializes all of its parts. The const_cccmd method then actually
-returns the definition of the CCCMD macro which uses these parts.
-
-=cut
-
-#'
-
-sub cflags {
- my($self,$libperl)=@_;
- return $self->{CFLAGS} if $self->{CFLAGS};
- return '' unless $self->needs_linking();
-
- my($prog, $uc, $perltype, %cflags);
- $libperl ||= $self->{LIBPERL_A} || "libperl$self->{LIB_EXT}" ;
- $libperl =~ s/\.\$\(A\)$/$self->{LIB_EXT}/;
-
- @cflags{qw(cc ccflags optimize shellflags)}
- = @Config{qw(cc ccflags optimize shellflags)};
- my($optdebug) = "";
-
- $cflags{shellflags} ||= '';
-
- my(%map) = (
- D => '-DDEBUGGING',
- E => '-DEMBED',
- DE => '-DDEBUGGING -DEMBED',
- M => '-DEMBED -DMULTIPLICITY',
- DM => '-DDEBUGGING -DEMBED -DMULTIPLICITY',
- );
-
- if ($libperl =~ /libperl(\w*)\Q$self->{LIB_EXT}/){
- $uc = uc($1);
- } else {
- $uc = ""; # avoid warning
- }
- $perltype = $map{$uc} ? $map{$uc} : "";
-
- if ($uc =~ /^D/) {
- $optdebug = "-g";
- }
-
-
- my($name);
- ( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
- if ($prog = $Config::Config{$name}) {
- # Expand hints for this extension via the shell
- print STDOUT "Processing $name hint:\n" if $Verbose;
- my(@o)=`cc=\"$cflags{cc}\"
- ccflags=\"$cflags{ccflags}\"
- optimize=\"$cflags{optimize}\"
- perltype=\"$cflags{perltype}\"
- optdebug=\"$cflags{optdebug}\"
- eval '$prog'
- echo cc=\$cc
- echo ccflags=\$ccflags
- echo optimize=\$optimize
- echo perltype=\$perltype
- echo optdebug=\$optdebug
- `;
- my($line);
- foreach $line (@o){
- chomp $line;
- if ($line =~ /(.*?)=\s*(.*)\s*$/){
- $cflags{$1} = $2;
- print STDOUT " $1 = $2\n" if $Verbose;
- } else {
- print STDOUT "Unrecognised result from hint: '$line'\n";
- }
- }
- }
-
- if ($optdebug) {
- $cflags{optimize} = $optdebug;
- }
-
- for (qw(ccflags optimize perltype)) {
- $cflags{$_} =~ s/^\s+//;
- $cflags{$_} =~ s/\s+/ /g;
- $cflags{$_} =~ s/\s+$//;
- $self->{uc $_} ||= $cflags{$_}
- }
-
- if ($Is_PERL_OBJECT) {
- $self->{CCFLAGS} =~ s/-DPERL_OBJECT(\b|$)/-DPERL_CAPI/g;
- if ($Is_Win32) {
- if ($Config{'cc'} =~ /^cl/i) {
- # Turn off C++ mode of the MSC compiler
- $self->{CCFLAGS} =~ s/-TP(\s|$)//g;
- $self->{OPTIMIZE} =~ s/-TP(\s|$)//g;
- }
- elsif ($Config{'cc'} =~ /^bcc32/i) {
- # Turn off C++ mode of the Borland compiler
- $self->{CCFLAGS} =~ s/-P(\s|$)//g;
- $self->{OPTIMIZE} =~ s/-P(\s|$)//g;
- }
- elsif ($Config{'cc'} =~ /^gcc/i) {
- # Turn off C++ mode of the GCC compiler
- $self->{CCFLAGS} =~ s/-xc\+\+(\s|$)//g;
- $self->{OPTIMIZE} =~ s/-xc\+\+(\s|$)//g;
- }
- }
- }
-
- if ($self->{POLLUTE}) {
- $self->{CCFLAGS} .= ' -DPERL_POLLUTE ';
- }
-
- my $pollute = '';
- if ($Config{usemymalloc} and not $Config{bincompat5005}
- and not $Config{ccflags} =~ /-DPERL_POLLUTE_MALLOC\b/
- and $self->{PERL_MALLOC_OK}) {
- $pollute = '$(PERL_MALLOC_DEF)';
- }
-
- return $self->{CFLAGS} = qq{
-CCFLAGS = $self->{CCFLAGS}
-OPTIMIZE = $self->{OPTIMIZE}
-PERLTYPE = $self->{PERLTYPE}
-MPOLLUTE = $pollute
-};
-
-}
-
-=item clean (o)
-
-Defines the clean target.
-
-=cut
-
-sub clean {
-# --- Cleanup and Distribution Sections ---
-
- my($self, %attribs) = @_;
- my(@m,$dir);
- push(@m, '
-# Delete temporary files but do not touch installed files. We don\'t delete
-# the Makefile here so a later make realclean still has a makefile to use.
-
-clean ::
-');
- # clean subdirectories first
- for $dir (@{$self->{DIR}}) {
- if ($Is_Win32 && Win32::IsWin95()) {
- push @m, <<EOT;
- cd $dir
- \$(TEST_F) $self->{MAKEFILE}
- \$(MAKE) clean
- cd ..
-EOT
- }
- else {
- push @m, <<EOT;
- -cd $dir && \$(TEST_F) $self->{MAKEFILE} && \$(MAKE) clean
-EOT
- }
- }
-
- my(@otherfiles) = values %{$self->{XS}}; # .c files from *.xs files
- push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
- push(@otherfiles, qw[./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all
- perlmain.c mon.out core core.*perl.*.?
- *perl.core so_locations pm_to_blib
- *$(OBJ_EXT) *$(LIB_EXT) perl.exe
- $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def
- $(BASEEXT).exp
- ]);
- push @m, "\t-$self->{RM_RF} @otherfiles\n";
- # See realclean and ext/utils/make_ext for usage of Makefile.old
- push(@m,
- "\t-$self->{MV} $self->{MAKEFILE} $self->{MAKEFILE}.old \$(DEV_NULL)\n");
- push(@m,
- "\t$attribs{POSTOP}\n") if $attribs{POSTOP};
- join("", @m);
-}
-
-=item const_cccmd (o)
-
-Returns the full compiler call for C programs and stores the
-definition in CONST_CCCMD.
-
-=cut
-
-sub const_cccmd {
- my($self,$libperl)=@_;
- return $self->{CONST_CCCMD} if $self->{CONST_CCCMD};
- return '' unless $self->needs_linking();
- return $self->{CONST_CCCMD} =
- q{CCCMD = $(CC) -c $(INC) $(CCFLAGS) $(OPTIMIZE) \\
- $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \\
- $(XS_DEFINE_VERSION)};
-}
-
-=item const_config (o)
-
-Defines a couple of constants in the Makefile that are imported from
-%Config.
-
-=cut
-
-sub const_config {
-# --- Constants Sections ---
-
- my($self) = shift;
- my(@m,$m);
- push(@m,"\n# These definitions are from config.sh (via $INC{'Config.pm'})\n");
- push(@m,"\n# They may have been overridden via Makefile.PL or on the command line\n");
- my(%once_only);
- foreach $m (@{$self->{CONFIG}}){
- # SITE*EXP macros are defined in &constants; avoid duplicates here
- next if $once_only{$m} or $m eq 'sitelibexp' or $m eq 'sitearchexp';
- push @m, "\U$m\E = ".$self->{uc $m}."\n";
- $once_only{$m} = 1;
- }
- join('', @m);
-}
-
-=item const_loadlibs (o)
-
-Defines EXTRALIBS, LDLOADLIBS, BSLOADLIBS, LD_RUN_PATH. See
-L<ExtUtils::Liblist> for details.
-
-=cut
-
-sub const_loadlibs {
- my($self) = shift;
- return "" unless $self->needs_linking;
- my @m;
- push @m, qq{
-# $self->{NAME} might depend on some other libraries:
-# See ExtUtils::Liblist for details
-#
-};
- my($tmp);
- for $tmp (qw/
- EXTRALIBS LDLOADLIBS BSLOADLIBS LD_RUN_PATH
- /) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
- return join "", @m;
-}
-
-=item constants (o)
-
-Initializes lots of constants and .SUFFIXES and .PHONY
-
-=cut
-
-sub constants {
- my($self) = @_;
- my(@m,$tmp);
-
- for $tmp (qw/
-
- AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
- VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
- INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
- INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
- INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
- PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
- FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
- PERL_INC PERL FULLPERL FULL_AR
-
- / ) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
-
- push @m, qq{
-VERSION_MACRO = VERSION
-DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
-XS_VERSION_MACRO = XS_VERSION
-XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
-PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
-};
-
- push @m, qq{
-MAKEMAKER = $INC{'ExtUtils/MakeMaker.pm'}
-MM_VERSION = $ExtUtils::MakeMaker::VERSION
-};
-
- push @m, q{
-# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
-# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
-# ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
-# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
-# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
-};
-
- for $tmp (qw/
- FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
- LDFROM LINKTYPE PM_FILTER
- / ) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
-
- push @m, "
-# Handy lists of source code files:
-XS_FILES= ".join(" \\\n\t", sort keys %{$self->{XS}})."
-C_FILES = ".join(" \\\n\t", @{$self->{C}})."
-O_FILES = ".join(" \\\n\t", @{$self->{O_FILES}})."
-H_FILES = ".join(" \\\n\t", @{$self->{H}})."
-HTMLLIBPODS = ".join(" \\\n\t", sort keys %{$self->{HTMLLIBPODS}})."
-HTMLSCRIPTPODS = ".join(" \\\n\t", sort keys %{$self->{HTMLSCRIPTPODS}})."
-MAN1PODS = ".join(" \\\n\t", sort keys %{$self->{MAN1PODS}})."
-MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
-";
-
- for $tmp (qw/
- INST_HTMLPRIVLIBDIR INSTALLHTMLPRIVLIBDIR
- INST_HTMLSITELIBDIR INSTALLHTMLSITELIBDIR
- INST_HTMLSCRIPTDIR INSTALLHTMLSCRIPTDIR
- INST_HTMLLIBDIR HTMLEXT
- INST_MAN1DIR INSTALLMAN1DIR MAN1EXT
- INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
- /) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
-
- for $tmp (qw(
- PERM_RW PERM_RWX
- )
- ) {
- my $method = lc($tmp);
- # warn "self[$self] method[$method]";
- push @m, "$tmp = ", $self->$method(), "\n";
- }
-
- push @m, q{
-.NO_CONFIG_REC: Makefile
-} if $ENV{CLEARCASE_ROOT};
-
- # why not q{} ? -- emacs
- push @m, qq{
-# work around a famous dec-osf make(1) feature(?):
-makemakerdflt: all
-
-.SUFFIXES: .xs .c .C .cpp .cxx .cc \$(OBJ_EXT)
-
-# Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
-# some make implementations will delete the Makefile when we rebuild it. Because
-# we call false(1) when we rebuild it. So make(1) is not completely wrong when it
-# does so. Our milage may vary.
-# .PRECIOUS: Makefile # seems to be not necessary anymore
-
-.PHONY: all config static dynamic test linkext manifest
-
-# Where is the Config information that we are using/depend on
-CONFIGDEP = \$(PERL_ARCHLIB)/Config.pm \$(PERL_INC)/config.h
-};
-
- my @parentdir = split(/::/, $self->{PARENT_NAME});
- push @m, q{
-# Where to put things:
-INST_LIBDIR = }. $self->catdir('$(INST_LIB)',@parentdir) .q{
-INST_ARCHLIBDIR = }. $self->catdir('$(INST_ARCHLIB)',@parentdir) .q{
-
-INST_AUTODIR = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)') .q{
-INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)') .q{
-};
-
- if ($self->has_link_code()) {
- push @m, '
-INST_STATIC = $(INST_ARCHAUTODIR)/$(BASEEXT)$(LIB_EXT)
-INST_DYNAMIC = $(INST_ARCHAUTODIR)/$(DLBASE).$(DLEXT)
-INST_BOOT = $(INST_ARCHAUTODIR)/$(BASEEXT).bs
-';
- } else {
- push @m, '
-INST_STATIC =
-INST_DYNAMIC =
-INST_BOOT =
-';
- }
-
- $tmp = $self->export_list;
- push @m, "
-EXPORT_LIST = $tmp
-";
- $tmp = $self->perl_archive;
- push @m, "
-PERL_ARCHIVE = $tmp
-";
- $tmp = $self->perl_archive_after;
- push @m, "
-PERL_ARCHIVE_AFTER = $tmp
-";
-
-# push @m, q{
-#INST_PM = }.join(" \\\n\t", sort values %{$self->{PM}}).q{
-#
-#PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
-#};
-
- push @m, q{
-TO_INST_PM = }.join(" \\\n\t", sort keys %{$self->{PM}}).q{
-
-PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
-};
-
- join('',@m);
-}
-
-=item depend (o)
-
-Same as macro for the depend attribute.
-
-=cut
-
-sub depend {
- my($self,%attribs) = @_;
- my(@m,$key,$val);
- while (($key,$val) = each %attribs){
- last unless defined $key;
- push @m, "$key: $val\n";
- }
- join "", @m;
-}
-
-=item dir_target (o)
-
-Takes an array of directories that need to exist and returns a
-Makefile entry for a .exists file in these directories. Returns
-nothing, if the entry has already been processed. We're helpless
-though, if the same directory comes as $(FOO) _and_ as "bar". Both of
-them get an entry, that's why we use "::".
-
-=cut
-
-sub dir_target {
-# --- Make-Directories section (internal method) ---
-# dir_target(@array) returns a Makefile entry for the file .exists in each
-# named directory. Returns nothing, if the entry has already been processed.
-# We're helpless though, if the same directory comes as $(FOO) _and_ as "bar".
-# Both of them get an entry, that's why we use "::". I chose '$(PERL)' as the
-# prerequisite, because there has to be one, something that doesn't change
-# too often :)
-
- my($self,@dirs) = @_;
- my(@m,$dir,$targdir);
- foreach $dir (@dirs) {
- my($src) = $self->catfile($self->{PERL_INC},'perl.h');
- my($targ) = $self->catfile($dir,'.exists');
- # catfile may have adapted syntax of $dir to target OS, so...
- if ($Is_VMS) { # Just remove file name; dirspec is often in macro
- ($targdir = $targ) =~ s:/?\.exists\z::;
- }
- else { # while elsewhere we expect to see the dir separator in $targ
- $targdir = dirname($targ);
- }
- next if $self->{DIR_TARGET}{$self}{$targdir}++;
- push @m, qq{
-$targ :: $src
- $self->{NOECHO}\$(MKPATH) $targdir
- $self->{NOECHO}\$(EQUALIZE_TIMESTAMP) $src $targ
-};
- push(@m, qq{
- -$self->{NOECHO}\$(CHMOD) \$(PERM_RWX) $targdir
-}) unless $Is_VMS;
- }
- join "", @m;
-}
-
-=item dist (o)
-
-Defines a lot of macros for distribution support.
-
-=cut
-
-sub dist {
- my($self, %attribs) = @_;
-
- my(@m);
- # VERSION should be sanitised before use as a file name
- my($version) = $attribs{VERSION} || '$(VERSION)';
- my($name) = $attribs{NAME} || '$(DISTNAME)';
- my($tar) = $attribs{TAR} || 'tar'; # eg /usr/bin/gnutar
- my($tarflags) = $attribs{TARFLAGS} || 'cvf';
- my($zip) = $attribs{ZIP} || 'zip'; # eg pkzip Yuck!
- my($zipflags) = $attribs{ZIPFLAGS} || '-r';
- my($compress) = $attribs{COMPRESS} || 'gzip --best';
- my($suffix) = $attribs{SUFFIX} || '.gz'; # eg .gz
- my($shar) = $attribs{SHAR} || 'shar'; # eg "shar --gzip"
- my($preop) = $attribs{PREOP} || "$self->{NOECHO}\$(NOOP)"; # eg update MANIFEST
- my($postop) = $attribs{POSTOP} || "$self->{NOECHO}\$(NOOP)"; # eg remove the distdir
-
- my($to_unix) = $attribs{TO_UNIX} || ($Is_OS2
- ? "$self->{NOECHO}"
- . '$(TEST_F) tmp.zip && $(RM) tmp.zip;'
- . ' $(ZIP) -ll -mr tmp.zip $(DISTVNAME) && unzip -o tmp.zip && $(RM) tmp.zip'
- : "$self->{NOECHO}\$(NOOP)");
-
- my($ci) = $attribs{CI} || 'ci -u';
- my($rcs_label)= $attribs{RCS_LABEL}|| 'rcs -Nv$(VERSION_SYM): -q';
- my($dist_cp) = $attribs{DIST_CP} || 'best';
- my($dist_default) = $attribs{DIST_DEFAULT} || 'tardist';
-
- push @m, "
-DISTVNAME = ${name}-$version
-TAR = $tar
-TARFLAGS = $tarflags
-ZIP = $zip
-ZIPFLAGS = $zipflags
-COMPRESS = $compress
-SUFFIX = $suffix
-SHAR = $shar
-PREOP = $preop
-POSTOP = $postop
-TO_UNIX = $to_unix
-CI = $ci
-RCS_LABEL = $rcs_label
-DIST_CP = $dist_cp
-DIST_DEFAULT = $dist_default
-";
- join "", @m;
-}
-
-=item dist_basics (o)
-
-Defines the targets distclean, distcheck, skipcheck, manifest, veryclean.
-
-=cut
-
-sub dist_basics {
- my($self) = shift;
- my @m;
- push @m, q{
-distclean :: realclean distcheck
-};
-
- push @m, q{
-distcheck :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=fullcheck \\
- -e fullcheck
-};
-
- push @m, q{
-skipcheck :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=skipcheck \\
- -e skipcheck
-};
-
- push @m, q{
-manifest :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \\
- -e mkmanifest
-};
-
- push @m, q{
-veryclean : realclean
- $(RM_F) *~ *.orig */*~ */*.orig
-};
- join "", @m;
-}
-
-=item dist_ci (o)
-
-Defines a check in target for RCS.
-
-=cut
-
-sub dist_ci {
- my($self) = shift;
- my @m;
- push @m, q{
-ci :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
- -e "@all = keys %{ maniread() };" \\
- -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \\
- -e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
-};
- join "", @m;
-}
-
-=item dist_core (o)
-
-Defines the targets dist, tardist, zipdist, uutardist, shdist
-
-=cut
-
-sub dist_core {
- my($self) = shift;
- my @m;
- push @m, q{
-dist : $(DIST_DEFAULT)
- }.$self->{NOECHO}.q{$(PERL) -le 'print "Warning: Makefile possibly out of date with $$vf" if ' \
- -e '-e ($$vf="$(VERSION_FROM)") and -M $$vf < -M "}.$self->{MAKEFILE}.q{";'
-
-tardist : $(DISTVNAME).tar$(SUFFIX)
-
-zipdist : $(DISTVNAME).zip
-
-$(DISTVNAME).tar$(SUFFIX) : distdir
- $(PREOP)
- $(TO_UNIX)
- $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
- $(RM_RF) $(DISTVNAME)
- $(COMPRESS) $(DISTVNAME).tar
- $(POSTOP)
-
-$(DISTVNAME).zip : distdir
- $(PREOP)
- $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-
-uutardist : $(DISTVNAME).tar$(SUFFIX)
- uuencode $(DISTVNAME).tar$(SUFFIX) \\
- $(DISTVNAME).tar$(SUFFIX) > \\
- $(DISTVNAME).tar$(SUFFIX)_uu
-
-shdist : distdir
- $(PREOP)
- $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-};
- join "", @m;
-}
-
-=item dist_dir (o)
-
-Defines the scratch directory target that will hold the distribution
-before tar-ing (or shar-ing).
-
-=cut
-
-sub dist_dir {
- my($self) = shift;
- my @m;
- push @m, q{
-distdir :
- $(RM_RF) $(DISTVNAME)
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=manicopy,maniread \\
- -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
-};
- join "", @m;
-}
-
-=item dist_test (o)
-
-Defines a target that produces the distribution in the
-scratchdirectory, and runs 'perl Makefile.PL; make ;make test' in that
-subdirectory.
-
-=cut
-
-sub dist_test {
- my($self) = shift;
- my @m;
- push @m, q{
-disttest : distdir
- cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
- cd $(DISTVNAME) && $(MAKE)
- cd $(DISTVNAME) && $(MAKE) test
-};
- join "", @m;
-}
-
-=item dlsyms (o)
-
-Used by AIX and VMS to define DL_FUNCS and DL_VARS and write the *.exp
-files.
-
-=cut
-
-sub dlsyms {
- my($self,%attribs) = @_;
-
- return '' unless ($^O eq 'aix' && $self->needs_linking() );
-
- my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
- my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
- my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
- my(@m);
-
- push(@m,"
-dynamic :: $self->{BASEEXT}.exp
-
-") unless $self->{SKIPHASH}{'dynamic'}; # dynamic and static are subs, so...
-
- push(@m,"
-static :: $self->{BASEEXT}.exp
-
-") unless $self->{SKIPHASH}{'static'}; # we avoid a warning if we tick them
-
- push(@m,"
-$self->{BASEEXT}.exp: Makefile.PL
-",' $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::Mksymlists; \\
- Mksymlists("NAME" => "',$self->{NAME},'", "DL_FUNCS" => ',
- neatvalue($funcs), ', "FUNCLIST" => ', neatvalue($funclist),
- ', "DL_VARS" => ', neatvalue($vars), ');\'
-');
-
- join('',@m);
-}
-
-=item dynamic (o)
-
-Defines the dynamic target.
-
-=cut
-
-sub dynamic {
-# --- Dynamic Loading Sections ---
-
- my($self) = shift;
- '
-## $(INST_PM) has been moved to the all: target.
-## It remains here for awhile to allow for old usage: "make dynamic"
-#dynamic :: '.$self->{MAKEFILE}.' $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
-dynamic :: '.$self->{MAKEFILE}.' $(INST_DYNAMIC) $(INST_BOOT)
- '.$self->{NOECHO}.'$(NOOP)
-';
-}
-
-=item dynamic_bs (o)
-
-Defines targets for bootstrap files.
-
-=cut
-
-sub dynamic_bs {
- my($self, %attribs) = @_;
- return '
-BOOTSTRAP =
-' unless $self->has_link_code();
-
- return '
-BOOTSTRAP = '."$self->{BASEEXT}.bs".'
-
-# As Mkbootstrap might not write a file (if none is required)
-# we use touch to prevent make continually trying to remake it.
-# The DynaLoader only reads a non-empty file.
-$(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)/.exists
- '.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
- '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
- -MExtUtils::Mkbootstrap \
- -e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
- '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
- $(CHMOD) $(PERM_RW) $@
-
-$(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
- '."$self->{NOECHO}$self->{RM_RF}".' $(INST_BOOT)
- -'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
- $(CHMOD) $(PERM_RW) $@
-';
-}
-
-=item dynamic_lib (o)
-
-Defines how to produce the *.so (or equivalent) files.
-
-=cut
-
-sub dynamic_lib {
- my($self, %attribs) = @_;
- return '' unless $self->needs_linking(); #might be because of a subdir
-
- return '' unless $self->has_link_code;
-
- my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
- my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
- my($armaybe) = $attribs{ARMAYBE} || $self->{ARMAYBE} || ":";
- my($ldfrom) = '$(LDFROM)';
- $armaybe = 'ar' if ($^O eq 'dec_osf' and $armaybe eq ':');
- my(@m);
- push(@m,'
-# This section creates the dynamically loadable $(INST_DYNAMIC)
-# from $(OBJECT) and possibly $(MYEXTLIB).
-ARMAYBE = '.$armaybe.'
-OTHERLDFLAGS = '.$otherldflags.'
-INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
-
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
-');
- if ($armaybe ne ':'){
- $ldfrom = 'tmp$(LIB_EXT)';
- push(@m,' $(ARMAYBE) cr '.$ldfrom.' $(OBJECT)'."\n");
- push(@m,' $(RANLIB) '."$ldfrom\n");
- }
- $ldfrom = "-all $ldfrom -none" if ($^O eq 'dec_osf');
-
- # The IRIX linker doesn't use LD_RUN_PATH
- my $ldrun = qq{-rpath "$self->{LD_RUN_PATH}"}
- if ($^O eq 'irix' && $self->{LD_RUN_PATH});
-
- # For example in AIX the shared objects/libraries from previous builds
- # linger quite a while in the shared dynalinker cache even when nobody
- # is using them. This is painful if one for instance tries to restart
- # a failed build because the link command will fail unnecessarily 'cos
- # the shared object/library is 'busy'.
- push(@m,' $(RM_F) $@
-');
-
- push(@m,' LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) '.$ldrun.' $(LDDLFLAGS) '.$ldfrom.
- ' $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST)');
- push @m, '
- $(CHMOD) $(PERM_RWX) $@
-';
-
- push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
- join('',@m);
-}
-
-=item exescan
-
-Deprecated method. Use libscan instead.
-
-=cut
-
-sub exescan {
- my($self,$path) = @_;
- $path;
-}
-
-=item extliblist
-
-Called by init_others, and calls ext ExtUtils::Liblist. See
-L<ExtUtils::Liblist> for details.
-
-=cut
-
-sub extliblist {
- my($self,$libs) = @_;
- require ExtUtils::Liblist;
- $self->ext($libs, $Verbose);
-}
-
-=item file_name_is_absolute
-
-Takes as argument a path and returns true, if it is an absolute path.
-
-=cut
-
-sub file_name_is_absolute {
- my($self,$file) = @_;
- if ($Is_Dos){
- $file =~ m{^([a-z]:)?[\\/]}is ;
- }
- else {
- $file =~ m:^/:s ;
- }
-}
-
-=item find_perl
-
-Finds the executables PERL and FULLPERL
-
-=cut
-
-sub find_perl {
- my($self, $ver, $names, $dirs, $trace) = @_;
- my($name, $dir);
- if ($trace >= 2){
- print "Looking for perl $ver by these names:
-@$names
-in these dirs:
-@$dirs
-";
- }
- foreach $name (@$names){
- foreach $dir (@$dirs){
- next unless defined $dir; # $self->{PERL_SRC} may be undefined
- my ($abs, $val);
- if ($self->file_name_is_absolute($name)) { # /foo/bar
- $abs = $name;
- } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
- $abs = $self->catfile($dir, $name);
- } else { # foo/bar
- $abs = $self->canonpath($self->catfile($self->curdir, $name));
- }
- print "Checking $abs\n" if ($trace >= 2);
- next unless $self->maybe_command($abs);
- print "Executing $abs\n" if ($trace >= 2);
- $val = `$abs -e 'require $ver; print "VER_OK\n" ' 2>&1`;
- if ($val =~ /VER_OK/) {
- print "Using PERL=$abs\n" if $trace;
- return $abs;
- } elsif ($trace >= 2) {
- print "Result: `$val'\n";
- }
- }
- }
- print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
- 0; # false and not empty
-}
-
-=back
-
-=head2 Methods to actually produce chunks of text for the Makefile
-
-The methods here are called for each MakeMaker object in the order
-specified by @ExtUtils::MakeMaker::MM_Sections.
-
-=over 2
-
-=item fixin
-
-Inserts the sharpbang or equivalent magic number to a script
-
-=cut
-
-sub fixin { # stolen from the pink Camel book, more or less
- my($self,@files) = @_;
- my($does_shbang) = $Config::Config{'sharpbang'} =~ /^\s*\#\!/;
- my($file,$interpreter);
- for $file (@files) {
- local(*FIXIN);
- local(*FIXOUT);
- open(FIXIN, $file) or Carp::croak "Can't process '$file': $!";
- local $/ = "\n";
- chomp(my $line = <FIXIN>);
- next unless $line =~ s/^\s*\#!\s*//; # Not a shbang file.
- # Now figure out the interpreter name.
- my($cmd,$arg) = split ' ', $line, 2;
- $cmd =~ s!^.*/!!;
-
- # Now look (in reverse) for interpreter in absolute PATH (unless perl).
- if ($cmd eq "perl") {
- if ($Config{startperl} =~ m,^\#!.*/perl,) {
- $interpreter = $Config{startperl};
- $interpreter =~ s,^\#!,,;
- } else {
- $interpreter = $Config{perlpath};
- }
- } else {
- my(@absdirs) = reverse grep {$self->file_name_is_absolute} $self->path;
- $interpreter = '';
- my($dir);
- foreach $dir (@absdirs) {
- if ($self->maybe_command($cmd)) {
- warn "Ignoring $interpreter in $file\n" if $Verbose && $interpreter;
- $interpreter = $self->catfile($dir,$cmd);
- }
- }
- }
- # Figure out how to invoke interpreter on this machine.
-
- my($shb) = "";
- if ($interpreter) {
- print STDOUT "Changing sharpbang in $file to $interpreter" if $Verbose;
- # this is probably value-free on DOSISH platforms
- if ($does_shbang) {
- $shb .= "$Config{'sharpbang'}$interpreter";
- $shb .= ' ' . $arg if defined $arg;
- $shb .= "\n";
- }
- $shb .= qq{
-eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'
- if 0; # not running under some shell
-} unless $Is_Win32; # this won't work on win32, so don't
- } else {
- warn "Can't find $cmd in PATH, $file unchanged"
- if $Verbose;
- next;
- }
-
- unless ( open(FIXOUT,">$file.new") ) {
- warn "Can't create new $file: $!\n";
- next;
- }
- my($dev,$ino,$mode) = stat FIXIN;
-
- # Print out the new #! line (or equivalent).
- local $\;
- undef $/;
- print FIXOUT $shb, <FIXIN>;
- close FIXIN;
- close FIXOUT;
-
- # can't rename/chmod open files on some DOSISH platforms
-
- # If they override perm_rwx, we won't notice it during fixin,
- # because fixin is run through a new instance of MakeMaker.
- # That is why we must run another CHMOD later.
- $mode = oct($self->perm_rwx) unless $dev;
- chmod $mode, $file;
-
- unless ( rename($file, "$file.bak") ) {
- warn "Can't rename $file to $file.bak: $!";
- next;
- }
- unless ( rename("$file.new", $file) ) {
- warn "Can't rename $file.new to $file: $!";
- unless ( rename("$file.bak", $file) ) {
- warn "Can't rename $file.bak back to $file either: $!";
- warn "Leaving $file renamed as $file.bak\n";
- }
- next;
- }
- unlink "$file.bak";
- } continue {
- close(FIXIN) if fileno(FIXIN);
- chmod oct($self->perm_rwx), $file or
- die "Can't reset permissions for $file: $!\n";
- system("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';;
- }
-}
-
-=item force (o)
-
-Just writes FORCE:
-
-=cut
-
-sub force {
- my($self) = shift;
- '# Phony target to force checking subdirectories.
-FORCE:
- '.$self->{NOECHO}.'$(NOOP)
-';
-}
-
-=item guess_name
-
-Guess the name of this package by examining the working directory's
-name. MakeMaker calls this only if the developer has not supplied a
-NAME attribute.
-
-=cut
-
-# ';
-
-sub guess_name {
- my($self) = @_;
- use Cwd 'cwd';
- my $name = basename(cwd());
- $name =~ s|[\-_][\d\.\-]+\z||; # this is new with MM 5.00, we
- # strip minus or underline
- # followed by a float or some such
- print "Warning: Guessing NAME [$name] from current directory name.\n";
- $name;
-}
-
-=item has_link_code
-
-Returns true if C, XS, MYEXTLIB or similar objects exist within this
-object that need a compiler. Does not descend into subdirectories as
-needs_linking() does.
-
-=cut
-
-sub has_link_code {
- my($self) = shift;
- return $self->{HAS_LINK_CODE} if defined $self->{HAS_LINK_CODE};
- if ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB}){
- $self->{HAS_LINK_CODE} = 1;
- return 1;
- }
- return $self->{HAS_LINK_CODE} = 0;
-}
-
-=item htmlifypods (o)
-
-Defines targets and routines to translate the pods into HTML manpages
-and put them into the INST_HTMLLIBDIR and INST_HTMLSCRIPTDIR
-directories.
-
-=cut
-
-sub htmlifypods {
- my($self, %attribs) = @_;
- return "\nhtmlifypods : pure_all\n\t$self->{NOECHO}\$(NOOP)\n" unless
- %{$self->{HTMLLIBPODS}} || %{$self->{HTMLSCRIPTPODS}};
- my($dist);
- my($pod2html_exe);
- if (defined $self->{PERL_SRC}) {
- $pod2html_exe = $self->catfile($self->{PERL_SRC},'pod','pod2html');
- } else {
- $pod2html_exe = $self->catfile($Config{bin},'pod2html');
- }
- unless ($pod2html_exe = $self->perl_script($pod2html_exe)) {
- # No pod2html but some HTMLxxxPODS to be installed
- print <<END;
-
-Warning: I could not locate your pod2html program. Please make sure,
- your pod2html program is in your PATH before you execute 'make'
-
-END
- $pod2html_exe = "-S pod2html";
- }
- my(@m);
- push @m,
-qq[POD2HTML_EXE = $pod2html_exe\n],
-qq[POD2HTML = \$(PERL) -we 'use File::Basename; use File::Path qw(mkpath); %m=\@ARGV;for (keys %m){' \\\n],
-q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "],
- $self->{MAKEFILE}, q[";' \\
--e 'print "Htmlifying $$m{$$_}\n";' \\
--e '$$dir = dirname($$m{$$_}); mkpath($$dir) unless -d $$dir;' \\
--e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2HTML_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
--e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
-];
- push @m, "\nhtmlifypods : pure_all ";
- push @m, join " \\\n\t", keys %{$self->{HTMLLIBPODS}}, keys %{$self->{HTMLSCRIPTPODS}};
-
- push(@m,"\n");
- if (%{$self->{HTMLLIBPODS}} || %{$self->{HTMLSCRIPTPODS}}) {
- push @m, "\t$self->{NOECHO}\$(POD2HTML) \\\n\t";
- push @m, join " \\\n\t", %{$self->{HTMLLIBPODS}}, %{$self->{HTMLSCRIPTPODS}};
- }
- join('', @m);
-}
-
-=item init_dirscan
-
-Initializes DIR, XS, PM, C, O_FILES, H, PL_FILES, HTML*PODS, MAN*PODS, EXE_FILES.
-
-=cut
-
-sub init_dirscan { # --- File and Directory Lists (.xs .pm .pod etc)
- my($self) = @_;
- my($name, %dir, %xs, %c, %h, %ignore, %pl_files, %manifypods);
- local(%pm); #the sub in find() has to see this hash
- @ignore{qw(Makefile.PL test.pl)} = (1,1);
- $ignore{'makefile.pl'} = 1 if $Is_VMS;
- foreach $name ($self->lsdir($self->curdir)){
- next if $name =~ /\#/;
- next if $name eq $self->curdir or $name eq $self->updir or $ignore{$name};
- next unless $self->libscan($name);
- if (-d $name){
- next if -l $name; # We do not support symlinks at all
- $dir{$name} = $name if (-f $self->catfile($name,"Makefile.PL"));
- } elsif ($name =~ /\.xs\z/){
- my($c); ($c = $name) =~ s/\.xs\z/.c/;
- $xs{$name} = $c;
- $c{$c} = 1;
- } elsif ($name =~ /\.c(pp|xx|c)?\z/i){ # .c .C .cpp .cxx .cc
- $c{$name} = 1
- unless $name =~ m/perlmain\.c/; # See MAP_TARGET
- } elsif ($name =~ /\.h\z/i){
- $h{$name} = 1;
- } elsif ($name =~ /\.PL\z/) {
- ($pl_files{$name} = $name) =~ s/\.PL\z// ;
- } elsif (($Is_VMS || $Is_Dos) && $name =~ /[._]pl$/i) {
- # case-insensitive filesystem, one dot per name, so foo.h.PL
- # under Unix appears as foo.h_pl under VMS or fooh.pl on Dos
- local($/); open(PL,$name); my $txt = <PL>; close PL;
- if ($txt =~ /Extracting \S+ \(with variable substitutions/) {
- ($pl_files{$name} = $name) =~ s/[._]pl\z//i ;
- }
- else { $pm{$name} = $self->catfile('$(INST_LIBDIR)',$name); }
- } elsif ($name =~ /\.(p[ml]|pod)\z/){
- $pm{$name} = $self->catfile('$(INST_LIBDIR)',$name);
- }
- }
-
- # Some larger extensions often wish to install a number of *.pm/pl
- # files into the library in various locations.
-
- # The attribute PMLIBDIRS holds an array reference which lists
- # subdirectories which we should search for library files to
- # install. PMLIBDIRS defaults to [ 'lib', $self->{BASEEXT} ]. We
- # recursively search through the named directories (skipping any
- # which don't exist or contain Makefile.PL files).
-
- # For each *.pm or *.pl file found $self->libscan() is called with
- # the default installation path in $_[1]. The return value of
- # libscan defines the actual installation location. The default
- # libscan function simply returns the path. The file is skipped
- # if libscan returns false.
-
- # The default installation location passed to libscan in $_[1] is:
- #
- # ./*.pm => $(INST_LIBDIR)/*.pm
- # ./xyz/... => $(INST_LIBDIR)/xyz/...
- # ./lib/... => $(INST_LIB)/...
- #
- # In this way the 'lib' directory is seen as the root of the actual
- # perl library whereas the others are relative to INST_LIBDIR
- # (which includes PARENT_NAME). This is a subtle distinction but one
- # that's important for nested modules.
-
- $self->{PMLIBDIRS} = ['lib', $self->{BASEEXT}]
- unless $self->{PMLIBDIRS};
-
- #only existing directories that aren't in $dir are allowed
-
- # Avoid $_ wherever possible:
- # @{$self->{PMLIBDIRS}} = grep -d && !$dir{$_}, @{$self->{PMLIBDIRS}};
- my (@pmlibdirs) = @{$self->{PMLIBDIRS}};
- my ($pmlibdir);
- @{$self->{PMLIBDIRS}} = ();
- foreach $pmlibdir (@pmlibdirs) {
- -d $pmlibdir && !$dir{$pmlibdir} && push @{$self->{PMLIBDIRS}}, $pmlibdir;
- }
-
- if (@{$self->{PMLIBDIRS}}){
- print "Searching PMLIBDIRS: @{$self->{PMLIBDIRS}}\n"
- if ($Verbose >= 2);
- require File::Find;
- File::Find::find(sub {
- if (-d $_){
- if ($_ eq "CVS" || $_ eq "RCS"){
- $File::Find::prune = 1;
- }
- return;
- }
- return if /\#/;
- my($path, $prefix) = ($File::Find::name, '$(INST_LIBDIR)');
- my($striplibpath,$striplibname);
- $prefix = '$(INST_LIB)' if (($striplibpath = $path) =~ s:^(\W*)lib\W:$1:i);
- ($striplibname,$striplibpath) = fileparse($striplibpath);
- my($inst) = $self->catfile($prefix,$striplibpath,$striplibname);
- local($_) = $inst; # for backwards compatibility
- $inst = $self->libscan($inst);
- print "libscan($path) => '$inst'\n" if ($Verbose >= 2);
- return unless $inst;
- $pm{$path} = $inst;
- }, @{$self->{PMLIBDIRS}});
- }
-
- $self->{DIR} = [sort keys %dir] unless $self->{DIR};
- $self->{XS} = \%xs unless $self->{XS};
- $self->{PM} = \%pm unless $self->{PM};
- $self->{C} = [sort keys %c] unless $self->{C};
- my(@o_files) = @{$self->{C}};
- $self->{O_FILES} = [grep s/\.c(pp|xx|c)?\z/$self->{OBJ_EXT}/i, @o_files] ;
- $self->{H} = [sort keys %h] unless $self->{H};
- $self->{PL_FILES} = \%pl_files unless $self->{PL_FILES};
-
- # Set up names of manual pages to generate from pods
- my %pods;
- foreach my $man (qw(MAN1 MAN3 HTMLLIB HTMLSCRIPT)) {
- unless ($self->{"${man}PODS"}) {
- $self->{"${man}PODS"} = {};
- $pods{$man} = 1 unless $self->{"INST_${man}DIR"} =~ /^(none|\s*)$/;
- }
- }
-
- if ($pods{MAN1} || $pods{HTMLSCRIPT}) {
- if ( exists $self->{EXE_FILES} ) {
- foreach $name (@{$self->{EXE_FILES}}) {
- local *FH;
- my($ispod)=0;
- if (open(FH,"<$name")) {
- while (<FH>) {
- if (/^=head1\s+\w+/) {
- $ispod=1;
- last;
- }
- }
- close FH;
- } else {
- # If it doesn't exist yet, we assume, it has pods in it
- $ispod = 1;
- }
- next unless $ispod;
- if ($pods{HTMLSCRIPT}) {
- $self->{HTMLSCRIPTPODS}->{$name} =
- $self->catfile("\$(INST_HTMLSCRIPTDIR)", basename($name).".\$(HTMLEXT)");
- }
- if ($pods{MAN1}) {
- $self->{MAN1PODS}->{$name} =
- $self->catfile("\$(INST_MAN1DIR)", basename($name).".\$(MAN1EXT)");
- }
- }
- }
- }
- if ($pods{MAN3} || $pods{HTMLLIB}) {
- my %manifypods = (); # we collect the keys first, i.e. the files
- # we have to convert to pod
- foreach $name (keys %{$self->{PM}}) {
- if ($name =~ /\.pod\z/ ) {
- $manifypods{$name} = $self->{PM}{$name};
- } elsif ($name =~ /\.p[ml]\z/ ) {
- local *FH;
- my($ispod)=0;
- if (open(FH,"<$name")) {
- while (<FH>) {
- if (/^=head1\s+\w+/) {
- $ispod=1;
- last;
- }
- }
- close FH;
- } else {
- $ispod = 1;
- }
- if( $ispod ) {
- $manifypods{$name} = $self->{PM}{$name};
- }
- }
- }
-
- # Remove "Configure.pm" and similar, if it's not the only pod listed
- # To force inclusion, just name it "Configure.pod", or override MAN3PODS
- foreach $name (keys %manifypods) {
- if ($name =~ /(config|setup).*\.pm/is) {
- delete $manifypods{$name};
- next;
- }
- my($manpagename) = $name;
- $manpagename =~ s/\.p(od|m|l)\z//;
- if ($pods{HTMLLIB}) {
- $self->{HTMLLIBPODS}->{$name} =
- $self->catfile("\$(INST_HTMLLIBDIR)", "$manpagename.\$(HTMLEXT)");
- }
- unless ($manpagename =~ s!^\W*lib\W+!!s) { # everything below lib is ok
- $manpagename = $self->catfile(split(/::/,$self->{PARENT_NAME}),$manpagename);
- }
- if ($pods{MAN3}) {
- $manpagename = $self->replace_manpage_separator($manpagename);
- $self->{MAN3PODS}->{$name} =
- $self->catfile("\$(INST_MAN3DIR)", "$manpagename.\$(MAN3EXT)");
- }
- }
- }
-}
-
-=item init_main
-
-Initializes NAME, FULLEXT, BASEEXT, PARENT_NAME, DLBASE, PERL_SRC,
-PERL_LIB, PERL_ARCHLIB, PERL_INC, INSTALLDIRS, INST_*, INSTALL*,
-PREFIX, CONFIG, AR, AR_STATIC_ARGS, LD, OBJ_EXT, LIB_EXT, EXE_EXT, MAP_TARGET,
-LIBPERL_A, VERSION_FROM, VERSION, DISTNAME, VERSION_SYM.
-
-=cut
-
-sub init_main {
- my($self) = @_;
-
- # --- Initialize Module Name and Paths
-
- # NAME = Foo::Bar::Oracle
- # FULLEXT = Foo/Bar/Oracle
- # BASEEXT = Oracle
- # ROOTEXT = Directory part of FULLEXT with leading /. !!! Deprecated from MM 5.32 !!!
- # PARENT_NAME = Foo::Bar
-### Only UNIX:
-### ($self->{FULLEXT} =
-### $self->{NAME}) =~ s!::!/!g ; #eg. BSD/Foo/Socket
- $self->{FULLEXT} = $self->catdir(split /::/, $self->{NAME});
-
-
- # Copied from DynaLoader:
-
- my(@modparts) = split(/::/,$self->{NAME});
- my($modfname) = $modparts[-1];
-
- # Some systems have restrictions on files names for DLL's etc.
- # mod2fname returns appropriate file base name (typically truncated)
- # It may also edit @modparts if required.
- if (defined &DynaLoader::mod2fname) {
- $modfname = &DynaLoader::mod2fname(\@modparts);
- }
-
- ($self->{PARENT_NAME}, $self->{BASEEXT}) = $self->{NAME} =~ m!(?:([\w:]+)::)?(\w+)\z! ;
-
- if (defined &DynaLoader::mod2fname) {
- # As of 5.001m, dl_os2 appends '_'
- $self->{DLBASE} = $modfname;
- } else {
- $self->{DLBASE} = '$(BASEEXT)';
- }
-
-
- ### ROOTEXT deprecated from MM 5.32
-### ($self->{ROOTEXT} =
-### $self->{FULLEXT}) =~ s#/?\Q$self->{BASEEXT}\E$## ; #eg. /BSD/Foo
-### $self->{ROOTEXT} = ($Is_VMS ? '' : '/') . $self->{ROOTEXT} if $self->{ROOTEXT};
-
-
- # --- Initialize PERL_LIB, INST_LIB, PERL_SRC
-
- # *Real* information: where did we get these two from? ...
- my $inc_config_dir = dirname($INC{'Config.pm'});
- my $inc_carp_dir = dirname($INC{'Carp.pm'});
-
- unless ($self->{PERL_SRC}){
- my($dir);
- foreach $dir ($self->updir(),$self->catdir($self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir(),$self->updir())){
- if (
- -f $self->catfile($dir,"config.sh")
- &&
- -f $self->catfile($dir,"perl.h")
- &&
- -f $self->catfile($dir,"lib","Exporter.pm")
- ) {
- $self->{PERL_SRC}=$dir ;
- last;
- }
- }
- }
- if ($self->{PERL_SRC}){
- $self->{PERL_LIB} ||= $self->catdir("$self->{PERL_SRC}","lib");
- $self->{PERL_ARCHLIB} = $self->{PERL_LIB};
- $self->{PERL_INC} = ($Is_Win32) ? $self->catdir($self->{PERL_LIB},"CORE") : $self->{PERL_SRC};
-
- # catch a situation that has occurred a few times in the past:
- unless (
- -s $self->catfile($self->{PERL_SRC},'cflags')
- or
- $Is_VMS
- &&
- -s $self->catfile($self->{PERL_SRC},'perlshr_attr.opt')
- or
- $Is_Mac
- or
- $Is_Win32
- ){
- warn qq{
-You cannot build extensions below the perl source tree after executing
-a 'make clean' in the perl source tree.
-
-To rebuild extensions distributed with the perl source you should
-simply Configure (to include those extensions) and then build perl as
-normal. After installing perl the source tree can be deleted. It is
-not needed for building extensions by running 'perl Makefile.PL'
-usually without extra arguments.
-
-It is recommended that you unpack and build additional extensions away
-from the perl source tree.
-};
- }
- } else {
- # we should also consider $ENV{PERL5LIB} here
- my $old = $self->{PERL_LIB} || $self->{PERL_ARCHLIB} || $self->{PERL_INC};
- $self->{PERL_LIB} ||= $Config::Config{privlibexp};
- $self->{PERL_ARCHLIB} ||= $Config::Config{archlibexp};
- $self->{PERL_INC} = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
- my $perl_h;
-
- if (not -f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h"))
- and not $old){
- # Maybe somebody tries to build an extension with an
- # uninstalled Perl outside of Perl build tree
- my $found;
- for my $dir (@INC) {
- $found = $dir, last if -e $self->catdir($dir, "Config.pm");
- }
- if ($found) {
- my $inc = dirname $found;
- if (-e $self->catdir($inc, "perl.h")) {
- $self->{PERL_LIB} = $found;
- $self->{PERL_ARCHLIB} = $found;
- $self->{PERL_INC} = $inc;
- $self->{UNINSTALLED_PERL} = 1;
- print STDOUT <<EOP;
-... Detected uninstalled Perl. Trying to continue.
-EOP
- }
- }
- }
-
- unless (-f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h"))){
- die qq{
-Error: Unable to locate installed Perl libraries or Perl source code.
-
-It is recommended that you install perl in a standard location before
-building extensions. Some precompiled versions of perl do not contain
-these header files, so you cannot build extensions. In such a case,
-please build and install your perl from a fresh perl distribution. It
-usually solves this kind of problem.
-
-\(You get this message, because MakeMaker could not find "$perl_h"\)
-};
- }
-# print STDOUT "Using header files found in $self->{PERL_INC}\n"
-# if $Verbose && $self->needs_linking();
-
- }
-
- # We get SITELIBEXP and SITEARCHEXP directly via
- # Get_from_Config. When we are running standard modules, these
- # won't matter, we will set INSTALLDIRS to "perl". Otherwise we
- # set it to "site". I prefer that INSTALLDIRS be set from outside
- # MakeMaker.
- $self->{INSTALLDIRS} ||= "site";
-
- # INST_LIB typically pre-set if building an extension after
- # perl has been built and installed. Setting INST_LIB allows
- # you to build directly into, say $Config::Config{privlibexp}.
- unless ($self->{INST_LIB}){
-
-
- ##### XXXXX We have to change this nonsense
-
- if (defined $self->{PERL_SRC} and $self->{INSTALLDIRS} eq "perl") {
- $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB};
- } else {
- $self->{INST_LIB} = $self->catdir($self->curdir,"blib","lib");
- }
- }
- $self->{INST_ARCHLIB} ||= $self->catdir($self->curdir,"blib","arch");
- $self->{INST_BIN} ||= $self->catdir($self->curdir,'blib','bin');
-
- # We need to set up INST_LIBDIR before init_libscan() for VMS
- my @parentdir = split(/::/, $self->{PARENT_NAME});
- $self->{INST_LIBDIR} = $self->catdir('$(INST_LIB)',@parentdir);
- $self->{INST_ARCHLIBDIR} = $self->catdir('$(INST_ARCHLIB)',@parentdir);
- $self->{INST_AUTODIR} = $self->catdir('$(INST_LIB)','auto','$(FULLEXT)');
- $self->{INST_ARCHAUTODIR} = $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)');
-
- # INST_EXE is deprecated, should go away March '97
- $self->{INST_EXE} ||= $self->catdir($self->curdir,'blib','script');
- $self->{INST_SCRIPT} ||= $self->catdir($self->curdir,'blib','script');
-
- # The user who requests an installation directory explicitly
- # should not have to tell us a architecture installation directory
- # as well. We look if a directory exists that is named after the
- # architecture. If not we take it as a sign that it should be the
- # same as the requested installation directory. Otherwise we take
- # the found one.
- # We do the same thing twice: for privlib/archlib and for sitelib/sitearch
- my($libpair);
- for $libpair ({l=>"privlib", a=>"archlib"}, {l=>"sitelib", a=>"sitearch"}) {
- my $lib = "install$libpair->{l}";
- my $Lib = uc $lib;
- my $Arch = uc "install$libpair->{a}";
- if( $self->{$Lib} && ! $self->{$Arch} ){
- my($ilib) = $Config{$lib};
- $ilib = VMS::Filespec::unixify($ilib) if $Is_VMS;
-
- $self->prefixify($Arch,$ilib,$self->{$Lib});
-
- unless (-d $self->{$Arch}) {
- print STDOUT "Directory $self->{$Arch} not found, thusly\n" if $Verbose;
- $self->{$Arch} = $self->{$Lib};
- }
- print STDOUT "Defaulting $Arch to $self->{$Arch}\n" if $Verbose;
- }
- }
-
- # we have to look at the relation between $Config{prefix} and the
- # requested values. We're going to set the $Config{prefix} part of
- # all the installation path variables to literally $(PREFIX), so
- # the user can still say make PREFIX=foo
- my($configure_prefix) = $Config{'prefix'};
- $configure_prefix = VMS::Filespec::unixify($configure_prefix) if $Is_VMS;
- $self->{PREFIX} ||= $configure_prefix;
-
-
- my($install_variable,$search_prefix,$replace_prefix);
-
- # If the prefix contains perl, Configure shapes the tree as follows:
- # perlprefix/lib/ INSTALLPRIVLIB
- # perlprefix/lib/pod/
- # perlprefix/lib/site_perl/ INSTALLSITELIB
- # perlprefix/bin/ INSTALLBIN
- # perlprefix/man/ INSTALLMAN1DIR
- # else
- # prefix/lib/perl5/ INSTALLPRIVLIB
- # prefix/lib/perl5/pod/
- # prefix/lib/perl5/site_perl/ INSTALLSITELIB
- # prefix/bin/ INSTALLBIN
- # prefix/lib/perl5/man/ INSTALLMAN1DIR
- #
- # The above results in various kinds of breakage on various
- # platforms, so we cope with it as follows: if prefix/lib/perl5
- # or prefix/lib/perl5/man exist, we'll replace those instead
- # of /prefix/{lib,man}
-
- $replace_prefix = qq[\$\(PREFIX\)];
- $search_prefix = $self->catdir($configure_prefix,"local");
- for $install_variable (qw/
- INSTALLBIN
- INSTALLSCRIPT
- /) {
- $self->prefixify($install_variable,$search_prefix,$replace_prefix);
- }
- my $funkylibdir = $self->catdir($configure_prefix,"lib","perl5");
- $funkylibdir = '' unless -d $funkylibdir;
- $search_prefix = $funkylibdir || $self->catdir($configure_prefix,"lib");
- if ($self->{LIB}) {
- $self->{INSTALLPRIVLIB} = $self->{INSTALLSITELIB} = $self->{LIB};
- $self->{INSTALLARCHLIB} = $self->{INSTALLSITEARCH} =
- $self->catdir($self->{LIB},$Config{'archname'});
- }
- else {
- if (-d $self->catdir($self->{PREFIX},"lib","perl5")) {
- $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib", "perl5");
- }
- else {
- $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib");
- }
- for $install_variable (qw/
- INSTALLPRIVLIB
- INSTALLARCHLIB
- INSTALLSITELIB
- INSTALLSITEARCH
- /)
- {
- $self->prefixify($install_variable,$search_prefix,$replace_prefix);
- }
- }
- my $funkymandir = $self->catdir($configure_prefix,"lib","perl5","man");
- $funkymandir = '' unless -d $funkymandir;
- $search_prefix = $funkymandir || $self->catdir($configure_prefix,"man");
- if (-d $self->catdir($self->{PREFIX},"lib","perl5", "man")) {
- $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"lib", "perl5", "man");
- }
- else {
- $replace_prefix = $self->catdir(qq[\$\(PREFIX\)],"man");
- }
- for $install_variable (qw/
- INSTALLMAN1DIR
- INSTALLMAN3DIR
- /)
- {
- $self->prefixify($install_variable,$search_prefix,$replace_prefix);
- }
-
- # Now we head at the manpages. Maybe they DO NOT want manpages
- # installed
- $self->{INSTALLMAN1DIR} = $Config::Config{installman1dir}
- unless defined $self->{INSTALLMAN1DIR};
- unless (defined $self->{INST_MAN1DIR}){
- if ($self->{INSTALLMAN1DIR} =~ /^(none|\s*)$/){
- $self->{INST_MAN1DIR} = $self->{INSTALLMAN1DIR};
- } else {
- $self->{INST_MAN1DIR} = $self->catdir($self->curdir,'blib','man1');
- }
- }
- $self->{MAN1EXT} ||= $Config::Config{man1ext};
-
- $self->{INSTALLMAN3DIR} = $Config::Config{installman3dir}
- unless defined $self->{INSTALLMAN3DIR};
- unless (defined $self->{INST_MAN3DIR}){
- if ($self->{INSTALLMAN3DIR} =~ /^(none|\s*)$/){
- $self->{INST_MAN3DIR} = $self->{INSTALLMAN3DIR};
- } else {
- $self->{INST_MAN3DIR} = $self->catdir($self->curdir,'blib','man3');
- }
- }
- $self->{MAN3EXT} ||= $Config::Config{man3ext};
-
- $self->{INSTALLHTMLPRIVLIBDIR} = $Config::Config{installhtmlprivlibdir}
- unless defined $self->{INSTALLHTMLPRIVLIBDIR};
- $self->{INSTALLHTMLSITELIBDIR} = $Config::Config{installhtmlsitelibdir}
- unless defined $self->{INSTALLHTMLSITELIBDIR};
-
- unless (defined $self->{INST_HTMLLIBDIR}){
- if ($self->{INSTALLHTMLSITELIBDIR} =~ /^(none|\s*)$/){
- $self->{INST_HTMLLIBDIR} = $self->{INSTALLHTMLSITELIBDIR};
- } else {
- $self->{INST_HTMLLIBDIR} = $self->catdir($self->curdir,'blib','html','lib');
- }
- }
-
- $self->{INSTALLHTMLSCRIPTDIR} = $Config::Config{installhtmlscriptdir}
- unless defined $self->{INSTALLHTMLSCRIPTDIR};
- unless (defined $self->{INST_HTMLSCRIPTDIR}){
- if ($self->{INSTALLHTMLSCRIPTDIR} =~ /^(none|\s*)$/){
- $self->{INST_HTMLSCRIPTDIR} = $self->{INSTALLHTMLSCRIPTDIR};
- } else {
- $self->{INST_HTMLSCRIPTDIR} = $self->catdir($self->curdir,'blib','html','bin');
- }
- }
- $self->{HTMLEXT} ||= $Config::Config{htmlext} || 'html';
-
-
- # Get some stuff out of %Config if we haven't yet done so
- print STDOUT "CONFIG must be an array ref\n"
- if ($self->{CONFIG} and ref $self->{CONFIG} ne 'ARRAY');
- $self->{CONFIG} = [] unless (ref $self->{CONFIG});
- push(@{$self->{CONFIG}}, @ExtUtils::MakeMaker::Get_from_Config);
- push(@{$self->{CONFIG}}, 'shellflags') if $Config::Config{shellflags};
- my(%once_only,$m);
- foreach $m (@{$self->{CONFIG}}){
- next if $once_only{$m};
- print STDOUT "CONFIG key '$m' does not exist in Config.pm\n"
- unless exists $Config::Config{$m};
- $self->{uc $m} ||= $Config::Config{$m};
- $once_only{$m} = 1;
- }
-
-# This is too dangerous:
-# if ($^O eq "next") {
-# $self->{AR} = "libtool";
-# $self->{AR_STATIC_ARGS} = "-o";
-# }
-# But I leave it as a placeholder
-
- $self->{AR_STATIC_ARGS} ||= "cr";
-
- # These should never be needed
- $self->{LD} ||= 'ld';
- $self->{OBJ_EXT} ||= '.o';
- $self->{LIB_EXT} ||= '.a';
-
- $self->{MAP_TARGET} ||= "perl";
-
- $self->{LIBPERL_A} ||= "libperl$self->{LIB_EXT}";
-
- # make a simple check if we find Exporter
- warn "Warning: PERL_LIB ($self->{PERL_LIB}) seems not to be a perl library directory
- (Exporter.pm not found)"
- unless -f $self->catfile("$self->{PERL_LIB}","Exporter.pm") ||
- $self->{NAME} eq "ExtUtils::MakeMaker";
-
- # Determine VERSION and VERSION_FROM
- ($self->{DISTNAME}=$self->{NAME}) =~ s#(::)#-#g unless $self->{DISTNAME};
- if ($self->{VERSION_FROM}){
- $self->{VERSION} = $self->parse_version($self->{VERSION_FROM}) or
- Carp::carp "WARNING: Setting VERSION via file '$self->{VERSION_FROM}' failed\n"
- }
-
- # strip blanks
- if ($self->{VERSION}) {
- $self->{VERSION} =~ s/^\s+//;
- $self->{VERSION} =~ s/\s+$//;
- }
-
- $self->{VERSION} ||= "0.10";
- ($self->{VERSION_SYM} = $self->{VERSION}) =~ s/\W/_/g;
-
-
- # Graham Barr and Paul Marquess had some ideas how to ensure
- # version compatibility between the *.pm file and the
- # corresponding *.xs file. The bottomline was, that we need an
- # XS_VERSION macro that defaults to VERSION:
- $self->{XS_VERSION} ||= $self->{VERSION};
-
- # --- Initialize Perl Binary Locations
-
- # Find Perl 5. The only contract here is that both 'PERL' and 'FULLPERL'
- # will be working versions of perl 5. miniperl has priority over perl
- # for PERL to ensure that $(PERL) is usable while building ./ext/*
- my ($component,@defpath);
- foreach $component ($self->{PERL_SRC}, $self->path(), $Config::Config{binexp}) {
- push @defpath, $component if defined $component;
- }
- $self->{PERL} ||=
- $self->find_perl(5.0, [ $self->canonpath($^X), 'miniperl',
- 'perl','perl5',"perl$Config{version}" ],
- \@defpath, $Verbose );
- # don't check if perl is executable, maybe they have decided to
- # supply switches with perl
-
- # Define 'FULLPERL' to be a non-miniperl (used in test: target)
- ($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/perl/i
- unless ($self->{FULLPERL});
-}
-
-=item init_others
-
-Initializes EXTRALIBS, BSLOADLIBS, LDLOADLIBS, LIBS, LD_RUN_PATH,
-OBJECT, BOOTDEP, PERLMAINCC, LDFROM, LINKTYPE, NOOP, FIRST_MAKEFILE,
-MAKEFILE, NOECHO, RM_F, RM_RF, TEST_F, TOUCH, CP, MV, CHMOD, UMASK_NULL
-
-=cut
-
-sub init_others { # --- Initialize Other Attributes
- my($self) = shift;
-
- # Compute EXTRALIBS, BSLOADLIBS and LDLOADLIBS from $self->{LIBS}
- # Lets look at $self->{LIBS} carefully: It may be an anon array, a string or
- # undefined. In any case we turn it into an anon array:
-
- # May check $Config{libs} too, thus not empty.
- $self->{LIBS}=[''] unless $self->{LIBS};
-
- $self->{LIBS}=[$self->{LIBS}] if ref \$self->{LIBS} eq 'SCALAR';
- $self->{LD_RUN_PATH} = "";
- my($libs);
- foreach $libs ( @{$self->{LIBS}} ){
- $libs =~ s/^\s*(.*\S)\s*$/$1/; # remove leading and trailing whitespace
- my(@libs) = $self->extliblist($libs);
- if ($libs[0] or $libs[1] or $libs[2]){
- # LD_RUN_PATH now computed by ExtUtils::Liblist
- ($self->{EXTRALIBS}, $self->{BSLOADLIBS}, $self->{LDLOADLIBS}, $self->{LD_RUN_PATH}) = @libs;
- last;
- }
- }
-
- if ( $self->{OBJECT} ) {
- $self->{OBJECT} =~ s!\.o(bj)?\b!\$(OBJ_EXT)!g;
- } else {
- # init_dirscan should have found out, if we have C files
- $self->{OBJECT} = "";
- $self->{OBJECT} = '$(BASEEXT)$(OBJ_EXT)' if @{$self->{C}||[]};
- }
- $self->{OBJECT} =~ s/\n+/ \\\n\t/g;
- $self->{BOOTDEP} = (-f "$self->{BASEEXT}_BS") ? "$self->{BASEEXT}_BS" : "";
- $self->{PERLMAINCC} ||= '$(CC)';
- $self->{LDFROM} = '$(OBJECT)' unless $self->{LDFROM};
-
- # Sanity check: don't define LINKTYPE = dynamic if we're skipping
- # the 'dynamic' section of MM. We don't have this problem with
- # 'static', since we either must use it (%Config says we can't
- # use dynamic loading) or the caller asked for it explicitly.
- if (!$self->{LINKTYPE}) {
- $self->{LINKTYPE} = $self->{SKIPHASH}{'dynamic'}
- ? 'static'
- : ($Config::Config{usedl} ? 'dynamic' : 'static');
- };
-
- # These get overridden for VMS and maybe some other systems
- $self->{NOOP} ||= '$(SHELL) -c true';
- $self->{FIRST_MAKEFILE} ||= "Makefile";
- $self->{MAKEFILE} ||= $self->{FIRST_MAKEFILE};
- $self->{MAKE_APERL_FILE} ||= "Makefile.aperl";
- $self->{NOECHO} = '@' unless defined $self->{NOECHO};
- $self->{RM_F} ||= "rm -f";
- $self->{RM_RF} ||= "rm -rf";
- $self->{TOUCH} ||= "touch";
- $self->{TEST_F} ||= "test -f";
- $self->{CP} ||= "cp";
- $self->{MV} ||= "mv";
- $self->{CHMOD} ||= "chmod";
- $self->{UMASK_NULL} ||= "umask 0";
- $self->{DEV_NULL} ||= "> /dev/null 2>&1";
-}
-
-=item install (o)
-
-Defines the install target.
-
-=cut
-
-sub install {
- my($self, %attribs) = @_;
- my(@m);
-
- push @m, q{
-install :: all pure_install doc_install
-
-install_perl :: all pure_perl_install doc_perl_install
-
-install_site :: all pure_site_install doc_site_install
-
-install_ :: install_site
- @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
-pure_install :: pure_$(INSTALLDIRS)_install
-
-doc_install :: doc_$(INSTALLDIRS)_install
- }.$self->{NOECHO}.q{echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
-
-pure__install : pure_site_install
- @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
-doc__install : doc_site_install
- @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
-pure_perl_install ::
- }.$self->{NOECHO}.q{$(MOD_INSTALL) \
- read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
- write }.$self->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
- $(INST_LIB) $(INSTALLPRIVLIB) \
- $(INST_ARCHLIB) $(INSTALLARCHLIB) \
- $(INST_BIN) $(INSTALLBIN) \
- $(INST_SCRIPT) $(INSTALLSCRIPT) \
- $(INST_HTMLLIBDIR) $(INSTALLHTMLPRIVLIBDIR) \
- $(INST_HTMLSCRIPTDIR) $(INSTALLHTMLSCRIPTDIR) \
- $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
- $(INST_MAN3DIR) $(INSTALLMAN3DIR)
- }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \
- }.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
-
-
-pure_site_install ::
- }.$self->{NOECHO}.q{$(MOD_INSTALL) \
- read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
- write }.$self->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
- $(INST_LIB) $(INSTALLSITELIB) \
- $(INST_ARCHLIB) $(INSTALLSITEARCH) \
- $(INST_BIN) $(INSTALLBIN) \
- $(INST_SCRIPT) $(INSTALLSCRIPT) \
- $(INST_HTMLLIBDIR) $(INSTALLHTMLSITELIBDIR) \
- $(INST_HTMLSCRIPTDIR) $(INSTALLHTMLSCRIPTDIR) \
- $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
- $(INST_MAN3DIR) $(INSTALLMAN3DIR)
- }.$self->{NOECHO}.q{$(WARN_IF_OLD_PACKLIST) \
- }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
-
-doc_perl_install ::
- -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
- -}.$self->{NOECHO}.q{$(DOC_INSTALL) \
- "Module" "$(NAME)" \
- "installed into" "$(INSTALLPRIVLIB)" \
- LINKTYPE "$(LINKTYPE)" \
- VERSION "$(VERSION)" \
- EXE_FILES "$(EXE_FILES)" \
- >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
-
-doc_site_install ::
- -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
- -}.$self->{NOECHO}.q{$(DOC_INSTALL) \
- "Module" "$(NAME)" \
- "installed into" "$(INSTALLSITELIB)" \
- LINKTYPE "$(LINKTYPE)" \
- VERSION "$(VERSION)" \
- EXE_FILES "$(EXE_FILES)" \
- >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
-
-};
-
- push @m, q{
-uninstall :: uninstall_from_$(INSTALLDIRS)dirs
-
-uninstall_from_perldirs ::
- }.$self->{NOECHO}.
- q{$(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
-
-uninstall_from_sitedirs ::
- }.$self->{NOECHO}.
- q{$(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
-};
-
- join("",@m);
-}
-
-=item installbin (o)
-
-Defines targets to make and to install EXE_FILES.
-
-=cut
-
-sub installbin {
- my($self) = shift;
- return "" unless $self->{EXE_FILES} && ref $self->{EXE_FILES} eq "ARRAY";
- return "" unless @{$self->{EXE_FILES}};
- my(@m, $from, $to, %fromto, @to);
- push @m, $self->dir_target(qw[$(INST_SCRIPT)]);
- for $from (@{$self->{EXE_FILES}}) {
- my($path)= $self->catfile('$(INST_SCRIPT)', basename($from));
- local($_) = $path; # for backwards compatibility
- $to = $self->libscan($path);
- print "libscan($from) => '$to'\n" if ($Verbose >=2);
- $fromto{$from}=$to;
- }
- @to = values %fromto;
- push(@m, qq{
-EXE_FILES = @{$self->{EXE_FILES}}
-
-} . ($Is_Win32
- ? q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
- -e "system qq[pl2bat.bat ].shift"
-} : q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::MakeMaker \
- -e "MY->fixin(shift)"
-}).qq{
-pure_all :: @to
- $self->{NOECHO}\$(NOOP)
-
-realclean ::
- $self->{RM_F} @to
-});
-
- while (($from,$to) = each %fromto) {
- last unless defined $from;
- my $todir = dirname($to);
- push @m, "
-$to: $from $self->{MAKEFILE} " . $self->catdir($todir,'.exists') . "
- $self->{NOECHO}$self->{RM_F} $to
- $self->{CP} $from $to
- \$(FIXIN) $to
- -$self->{NOECHO}\$(CHMOD) \$(PERM_RWX) $to
-";
- }
- join "", @m;
-}
-
-=item libscan (o)
-
-Takes a path to a file that is found by init_dirscan and returns false
-if we don't want to include this file in the library. Mainly used to
-exclude RCS, CVS, and SCCS directories from installation.
-
-=cut
-
-# ';
-
-sub libscan {
- my($self,$path) = @_;
- return '' if $path =~ m:\b(RCS|CVS|SCCS)\b: ;
- $path;
-}
-
-=item linkext (o)
-
-Defines the linkext target which in turn defines the LINKTYPE.
-
-=cut
-
-sub linkext {
- my($self, %attribs) = @_;
- # LINKTYPE => static or dynamic or ''
- my($linktype) = defined $attribs{LINKTYPE} ?
- $attribs{LINKTYPE} : '$(LINKTYPE)';
- "
-linkext :: $linktype
- $self->{NOECHO}\$(NOOP)
-";
-}
-
-=item lsdir
-
-Takes as arguments a directory name and a regular expression. Returns
-all entries in the directory that match the regular expression.
-
-=cut
-
-sub lsdir {
- my($self) = shift;
- my($dir, $regex) = @_;
- my(@ls);
- my $dh = new DirHandle;
- $dh->open($dir || ".") or return ();
- @ls = $dh->read;
- $dh->close;
- @ls = grep(/$regex/, @ls) if $regex;
- @ls;
-}
-
-=item macro (o)
-
-Simple subroutine to insert the macros defined by the macro attribute
-into the Makefile.
-
-=cut
-
-sub macro {
- my($self,%attribs) = @_;
- my(@m,$key,$val);
- while (($key,$val) = each %attribs){
- last unless defined $key;
- push @m, "$key = $val\n";
- }
- join "", @m;
-}
-
-=item makeaperl (o)
-
-Called by staticmake. Defines how to write the Makefile to produce a
-static new perl.
-
-By default the Makefile produced includes all the static extensions in
-the perl library. (Purified versions of library files, e.g.,
-DynaLoader_pure_p1_c0_032.a are automatically ignored to avoid link errors.)
-
-=cut
-
-sub makeaperl {
- my($self, %attribs) = @_;
- my($makefilename, $searchdirs, $static, $extra, $perlinc, $target, $tmp, $libperl) =
- @attribs{qw(MAKE DIRS STAT EXTRA INCL TARGET TMP LIBPERL)};
- my(@m);
- push @m, "
-# --- MakeMaker makeaperl section ---
-MAP_TARGET = $target
-FULLPERL = $self->{FULLPERL}
-";
- return join '', @m if $self->{PARENT};
-
- my($dir) = join ":", @{$self->{DIR}};
-
- unless ($self->{MAKEAPERL}) {
- push @m, q{
-$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
- $(MAKE) -f $(MAKE_APERL_FILE) $@
-
-$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
- }.$self->{NOECHO}.q{echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
- }.$self->{NOECHO}.q{$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
- Makefile.PL DIR=}, $dir, q{ \
- MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
- MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=};
-
- foreach (@ARGV){
- if( /\s/ ){
- s/=(.*)/='$1'/;
- }
- push @m, " \\\n\t\t$_";
- }
-# push @m, map( " \\\n\t\t$_", @ARGV );
- push @m, "\n";
-
- return join '', @m;
- }
-
-
-
- my($cccmd, $linkcmd, $lperl);
-
-
- $cccmd = $self->const_cccmd($libperl);
- $cccmd =~ s/^CCCMD\s*=\s*//;
- $cccmd =~ s/\$\(INC\)/ -I$self->{PERL_INC} /;
- $cccmd .= " $Config::Config{cccdlflags}"
- if ($Config::Config{useshrplib} eq 'true');
- $cccmd =~ s/\(CC\)/\(PERLMAINCC\)/;
-
- # The front matter of the linkcommand...
- $linkcmd = join ' ', "\$(CC)",
- grep($_, @Config{qw(ldflags ccdlflags)});
- $linkcmd =~ s/\s+/ /g;
- $linkcmd =~ s,(perl\.exp),\$(PERL_INC)/$1,;
-
- # Which *.a files could we make use of...
- local(%static);
- require File::Find;
- File::Find::find(sub {
- return unless m/\Q$self->{LIB_EXT}\E$/;
- return if m/^libperl/;
- # Skip purified versions of libraries (e.g., DynaLoader_pure_p1_c0_032.a)
- return if m/_pure_\w+_\w+_\w+\.\w+$/ and -f "$File::Find::dir/.pure";
-
- if( exists $self->{INCLUDE_EXT} ){
- my $found = 0;
- my $incl;
- my $xx;
-
- ($xx = $File::Find::name) =~ s,.*?/auto/,,s;
- $xx =~ s,/?$_,,;
- $xx =~ s,/,::,g;
-
- # Throw away anything not explicitly marked for inclusion.
- # DynaLoader is implied.
- foreach $incl ((@{$self->{INCLUDE_EXT}},'DynaLoader')){
- if( $xx eq $incl ){
- $found++;
- last;
- }
- }
- return unless $found;
- }
- elsif( exists $self->{EXCLUDE_EXT} ){
- my $excl;
- my $xx;
-
- ($xx = $File::Find::name) =~ s,.*?/auto/,,s;
- $xx =~ s,/?$_,,;
- $xx =~ s,/,::,g;
-
- # Throw away anything explicitly marked for exclusion
- foreach $excl (@{$self->{EXCLUDE_EXT}}){
- return if( $xx eq $excl );
- }
- }
-
- # don't include the installed version of this extension. I
- # leave this line here, although it is not necessary anymore:
- # I patched minimod.PL instead, so that Miniperl.pm won't
- # enclude duplicates
-
- # Once the patch to minimod.PL is in the distribution, I can
- # drop it
- return if $File::Find::name =~ m:auto/$self->{FULLEXT}/$self->{BASEEXT}$self->{LIB_EXT}\z:;
- use Cwd 'cwd';
- $static{cwd() . "/" . $_}++;
- }, grep( -d $_, @{$searchdirs || []}) );
-
- # We trust that what has been handed in as argument, will be buildable
- $static = [] unless $static;
- @static{@{$static}} = (1) x @{$static};
-
- $extra = [] unless $extra && ref $extra eq 'ARRAY';
- for (sort keys %static) {
- next unless /\Q$self->{LIB_EXT}\E\z/;
- $_ = dirname($_) . "/extralibs.ld";
- push @$extra, $_;
- }
-
- grep(s/^/-I/, @{$perlinc || []});
-
- $target = "perl" unless $target;
- $tmp = "." unless $tmp;
-
-# MAP_STATIC doesn't look into subdirs yet. Once "all" is made and we
-# regenerate the Makefiles, MAP_STATIC and the dependencies for
-# extralibs.all are computed correctly
- push @m, "
-MAP_LINKCMD = $linkcmd
-MAP_PERLINC = @{$perlinc || []}
-MAP_STATIC = ",
-join(" \\\n\t", reverse sort keys %static), "
-
-MAP_PRELIBS = $Config::Config{perllibs} $Config::Config{cryptlib}
-";
-
- if (defined $libperl) {
- ($lperl = $libperl) =~ s/\$\(A\)/$self->{LIB_EXT}/;
- }
- unless ($libperl && -f $lperl) { # Ilya's code...
- my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE";
- $dir = "$self->{PERL_ARCHLIB}/.." if $self->{UNINSTALLED_PERL};
- $libperl ||= "libperl$self->{LIB_EXT}";
- $libperl = "$dir/$libperl";
- $lperl ||= "libperl$self->{LIB_EXT}";
- $lperl = "$dir/$lperl";
-
- if (! -f $libperl and ! -f $lperl) {
- # We did not find a static libperl. Maybe there is a shared one?
- if ($^O eq 'solaris' or $^O eq 'sunos') {
- $lperl = $libperl = "$dir/$Config::Config{libperl}";
- # SUNOS ld does not take the full path to a shared library
- $libperl = '' if $^O eq 'sunos';
- }
- }
-
- print STDOUT "Warning: $libperl not found
- If you're going to build a static perl binary, make sure perl is installed
- otherwise ignore this warning\n"
- unless (-f $lperl || defined($self->{PERL_SRC}));
- }
-
- push @m, "
-MAP_LIBPERL = $libperl
-";
-
- push @m, "
-\$(INST_ARCHAUTODIR)/extralibs.all: \$(INST_ARCHAUTODIR)/.exists ".join(" \\\n\t", @$extra)."
- $self->{NOECHO}$self->{RM_F} \$\@
- $self->{NOECHO}\$(TOUCH) \$\@
-";
-
- my $catfile;
- foreach $catfile (@$extra){
- push @m, "\tcat $catfile >> \$\@\n";
- }
- # SUNOS ld does not take the full path to a shared library
- my $llibperl = ($libperl)?'$(MAP_LIBPERL)':'-lperl';
-
-push @m, "
-\$(MAP_TARGET) :: $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) \$(INST_ARCHAUTODIR)/extralibs.all
- \$(MAP_LINKCMD) -o \$\@ \$(OPTIMIZE) $tmp/perlmain\$(OBJ_EXT) \$(LDFROM) \$(MAP_STATIC) $llibperl `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)
- $self->{NOECHO}echo 'To install the new \"\$(MAP_TARGET)\" binary, call'
- $self->{NOECHO}echo ' make -f $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'
- $self->{NOECHO}echo 'To remove the intermediate files say'
- $self->{NOECHO}echo ' make -f $makefilename map_clean'
-
-$tmp/perlmain\$(OBJ_EXT): $tmp/perlmain.c
-";
- push @m, "\tcd $tmp && $cccmd -I\$(PERL_INC) perlmain.c\n";
-
- push @m, qq{
-$tmp/perlmain.c: $makefilename}, q{
- }.$self->{NOECHO}.q{echo Writing $@
- }.$self->{NOECHO}.q{$(PERL) $(MAP_PERLINC) -MExtUtils::Miniperl \\
- -e "writemain(grep s#.*/auto/##s, split(q| |, q|$(MAP_STATIC)|))" > $@t && $(MV) $@t $@
-
-};
- push @m, "\t",$self->{NOECHO}.q{$(PERL) $(INSTALLSCRIPT)/fixpmain
-} if (defined (&Dos::UseLFN) && Dos::UseLFN()==0);
-
-
- push @m, q{
-doc_inst_perl:
- }.$self->{NOECHO}.q{echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
- -}.$self->{NOECHO}.q{$(MKPATH) $(INSTALLARCHLIB)
- -}.$self->{NOECHO}.q{$(DOC_INSTALL) \
- "Perl binary" "$(MAP_TARGET)" \
- MAP_STATIC "$(MAP_STATIC)" \
- MAP_EXTRA "`cat $(INST_ARCHAUTODIR)/extralibs.all`" \
- MAP_LIBPERL "$(MAP_LIBPERL)" \
- >> }.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q{
-
-};
-
- push @m, q{
-inst_perl: pure_inst_perl doc_inst_perl
-
-pure_inst_perl: $(MAP_TARGET)
- }.$self->{CP}.q{ $(MAP_TARGET) }.$self->catfile('$(INSTALLBIN)','$(MAP_TARGET)').q{
-
-clean :: map_clean
-
-map_clean :
- }.$self->{RM_F}.qq{ $tmp/perlmain\$(OBJ_EXT) $tmp/perlmain.c \$(MAP_TARGET) $makefilename \$(INST_ARCHAUTODIR)/extralibs.all
-};
-
- join '', @m;
-}
-
-=item makefile (o)
-
-Defines how to rewrite the Makefile.
-
-=cut
-
-sub makefile {
- my($self) = shift;
- my @m;
- # We do not know what target was originally specified so we
- # must force a manual rerun to be sure. But as it should only
- # happen very rarely it is not a significant problem.
- push @m, '
-$(OBJECT) : $(FIRST_MAKEFILE)
-' if $self->{OBJECT};
-
- push @m, q{
-# We take a very conservative approach here, but it\'s worth it.
-# We move Makefile to Makefile.old here to avoid gnu make looping.
-}.$self->{MAKEFILE}.q{ : Makefile.PL $(CONFIGDEP)
- }.$self->{NOECHO}.q{echo "Makefile out-of-date with respect to $?"
- }.$self->{NOECHO}.q{echo "Cleaning current config before rebuilding Makefile..."
- -}.$self->{NOECHO}.q{$(RM_F) }."$self->{MAKEFILE}.old".q{
- -}.$self->{NOECHO}.q{$(MV) }."$self->{MAKEFILE} $self->{MAKEFILE}.old".q{
- -$(MAKE) -f }.$self->{MAKEFILE}.q{.old clean $(DEV_NULL) || $(NOOP)
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL }.join(" ",map(qq["$_"],@ARGV)).q{
- }.$self->{NOECHO}.q{echo "==> Your Makefile has been rebuilt. <=="
- }.$self->{NOECHO}.q{echo "==> Please rerun the make command. <=="
- false
-
-# To change behavior to :: would be nice, but would break Tk b9.02
-# so you find such a warning below the dist target.
-#}.$self->{MAKEFILE}.q{ :: $(VERSION_FROM)
-# }.$self->{NOECHO}.q{echo "Warning: Makefile possibly out of date with $(VERSION_FROM)"
-};
-
- join "", @m;
-}
-
-=item manifypods (o)
-
-Defines targets and routines to translate the pods into manpages and
-put them into the INST_* directories.
-
-=cut
-
-sub manifypods {
- my($self, %attribs) = @_;
- return "\nmanifypods : pure_all\n\t$self->{NOECHO}\$(NOOP)\n" unless
- %{$self->{MAN3PODS}} or %{$self->{MAN1PODS}};
- my($dist);
- my($pod2man_exe);
- if (defined $self->{PERL_SRC}) {
- $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
- } else {
- $pod2man_exe = $self->catfile($Config{bin},'pod2man');
- }
- unless ($pod2man_exe = $self->perl_script($pod2man_exe)) {
- # Maybe a build by uninstalled Perl?
- $pod2man_exe = $self->catfile($self->{PERL_INC}, "pod", "pod2man");
- }
- unless ($pod2man_exe = $self->perl_script($pod2man_exe)) {
- # No pod2man but some MAN3PODS to be installed
- print <<END;
-
-Warning: I could not locate your pod2man program. Please make sure,
- your pod2man program is in your PATH before you execute 'make'
-
-END
- $pod2man_exe = "-S pod2man";
- }
- my(@m);
- push @m,
-qq[POD2MAN_EXE = $pod2man_exe\n],
-qq[POD2MAN = \$(PERL) -we '%m=\@ARGV;for (keys %m){' \\\n],
-q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "],
- $self->{MAKEFILE}, q[";' \\
--e 'print "Manifying $$m{$$_}\n";' \\
--e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\\047t install $$m{$$_}\n";' \\
--e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
-];
- push @m, "\nmanifypods : pure_all ";
- push @m, join " \\\n\t", keys %{$self->{MAN1PODS}}, keys %{$self->{MAN3PODS}};
-
- push(@m,"\n");
- if (%{$self->{MAN1PODS}} || %{$self->{MAN3PODS}}) {
- push @m, "\t$self->{NOECHO}\$(POD2MAN) \\\n\t";
- push @m, join " \\\n\t", %{$self->{MAN1PODS}}, %{$self->{MAN3PODS}};
- }
- join('', @m);
-}
-
-=item maybe_command
-
-Returns true, if the argument is likely to be a command.
-
-=cut
-
-sub maybe_command {
- my($self,$file) = @_;
- return $file if -x $file && ! -d $file;
- return;
-}
-
-=item maybe_command_in_dirs
-
-method under development. Not yet used. Ask Ilya :-)
-
-=cut
-
-sub maybe_command_in_dirs { # $ver is optional argument if looking for perl
-# Ilya's suggestion. Not yet used, want to understand it first, but at least the code is here
- my($self, $names, $dirs, $trace, $ver) = @_;
- my($name, $dir);
- foreach $dir (@$dirs){
- next unless defined $dir; # $self->{PERL_SRC} may be undefined
- foreach $name (@$names){
- my($abs,$tryabs);
- if ($self->file_name_is_absolute($name)) { # /foo/bar
- $abs = $name;
- } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # bar
- $abs = $self->catfile($dir, $name);
- } else { # foo/bar
- $abs = $self->catfile($self->curdir, $name);
- }
- print "Checking $abs for $name\n" if ($trace >= 2);
- next unless $tryabs = $self->maybe_command($abs);
- print "Substituting $tryabs instead of $abs\n"
- if ($trace >= 2 and $tryabs ne $abs);
- $abs = $tryabs;
- if (defined $ver) {
- print "Executing $abs\n" if ($trace >= 2);
- if (`$abs -e 'require $ver; print "VER_OK\n" ' 2>&1` =~ /VER_OK/) {
- print "Using PERL=$abs\n" if $trace;
- return $abs;
- }
- } else { # Do not look for perl
- return $abs;
- }
- }
- }
-}
-
-=item needs_linking (o)
-
-Does this module need linking? Looks into subdirectory objects (see
-also has_link_code())
-
-=cut
-
-sub needs_linking {
- my($self) = shift;
- my($child,$caller);
- $caller = (caller(0))[3];
- Carp::confess("Needs_linking called too early") if $caller =~ /^ExtUtils::MakeMaker::/;
- return $self->{NEEDS_LINKING} if defined $self->{NEEDS_LINKING};
- if ($self->has_link_code or $self->{MAKEAPERL}){
- $self->{NEEDS_LINKING} = 1;
- return 1;
- }
- foreach $child (keys %{$self->{CHILDREN}}) {
- if ($self->{CHILDREN}->{$child}->needs_linking) {
- $self->{NEEDS_LINKING} = 1;
- return 1;
- }
- }
- return $self->{NEEDS_LINKING} = 0;
-}
-
-=item nicetext
-
-misnamed method (will have to be changed). The MM_Unix method just
-returns the argument without further processing.
-
-On VMS used to insure that colons marking targets are preceded by
-space - most Unix Makes don't need this, but it's necessary under VMS
-to distinguish the target delimiter from a colon appearing as part of
-a filespec.
-
-=cut
-
-sub nicetext {
- my($self,$text) = @_;
- $text;
-}
-
-=item parse_version
-
-parse a file and return what you think is $VERSION in this file set to.
-It will return the string "undef" if it can't figure out what $VERSION
-is.
-
-=cut
-
-sub parse_version {
- my($self,$parsefile) = @_;
- my $result;
- local *FH;
- local $/ = "\n";
- open(FH,$parsefile) or die "Could not open '$parsefile': $!";
- my $inpod = 0;
- while (<FH>) {
- $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
- next if $inpod;
- chop;
- # next unless /\$(([\w\:\']*)\bVERSION)\b.*\=/;
- next unless /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/;
- my $eval = qq{
- package ExtUtils::MakeMaker::_version;
- no strict;
-
- local $1$2;
- \$$2=undef; do {
- $_
- }; \$$2
- };
- no warnings;
- $result = eval($eval);
- warn "Could not eval '$eval' in $parsefile: $@" if $@;
- $result = "undef" unless defined $result;
- last;
- }
- close FH;
- return $result;
-}
-
-=item parse_abstract
-
-parse a file and return what you think is the ABSTRACT
-
-=cut
-
-sub parse_abstract {
- my($self,$parsefile) = @_;
- my $result;
- local *FH;
- local $/ = "\n";
- open(FH,$parsefile) or die "Could not open '$parsefile': $!";
- my $inpod = 0;
- my $package = $self->{DISTNAME};
- $package =~ s/-/::/g;
- while (<FH>) {
- $inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
- next if !$inpod;
- chop;
- next unless /^($package\s-\s)(.*)/;
- $result = $2;
- last;
- }
- close FH;
- return $result;
-}
-
-=item pasthru (o)
-
-Defines the string that is passed to recursive make calls in
-subdirectories.
-
-=cut
-
-sub pasthru {
- my($self) = shift;
- my(@m,$key);
-
- my(@pasthru);
- my($sep) = $Is_VMS ? ',' : '';
- $sep .= "\\\n\t";
-
- foreach $key (qw(LIB LIBPERL_A LINKTYPE PREFIX OPTIMIZE)){
- push @pasthru, "$key=\"\$($key)\"";
- }
-
- push @m, "\nPASTHRU = ", join ($sep, @pasthru), "\n";
- join "", @m;
-}
-
-=item path
-
-Takes no argument, returns the environment variable PATH as an array.
-
-=cut
-
-sub path {
- my($self) = @_;
- my $path_sep = ($Is_OS2 || $Is_Dos) ? ";" : ":";
- my $path = $ENV{PATH};
- $path =~ s:\\:/:g if $Is_OS2;
- my @path = split $path_sep, $path;
- foreach(@path) { $_ = '.' if $_ eq '' }
- @path;
-}
-
-=item perl_script
-
-Takes one argument, a file name, and returns the file name, if the
-argument is likely to be a perl script. On MM_Unix this is true for
-any ordinary, readable file.
-
-=cut
-
-sub perl_script {
- my($self,$file) = @_;
- return $file if -r $file && -f _;
- return;
-}
-
-=item perldepend (o)
-
-Defines the dependency from all *.h files that come with the perl
-distribution.
-
-=cut
-
-sub perldepend {
- my($self) = shift;
- my(@m);
- push @m, q{
-# Check for unpropogated config.sh changes. Should never happen.
-# We do NOT just update config.h because that is not sufficient.
-# An out of date config.h is not fatal but complains loudly!
-$(PERL_INC)/config.h: $(PERL_SRC)/config.sh
- -}.$self->{NOECHO}.q{echo "Warning: $(PERL_INC)/config.h out of date with $(PERL_SRC)/config.sh"; false
-
-$(PERL_ARCHLIB)/Config.pm: $(PERL_SRC)/config.sh
- }.$self->{NOECHO}.q{echo "Warning: $(PERL_ARCHLIB)/Config.pm may be out of date with $(PERL_SRC)/config.sh"
- cd $(PERL_SRC) && $(MAKE) lib/Config.pm
-} if $self->{PERL_SRC};
-
- return join "", @m unless $self->needs_linking;
-
- push @m, q{
-PERL_HDRS = \
- $(PERL_INC)/EXTERN.h \
- $(PERL_INC)/INTERN.h \
- $(PERL_INC)/XSUB.h \
- $(PERL_INC)/av.h \
- $(PERL_INC)/cc_runtime.h \
- $(PERL_INC)/config.h \
- $(PERL_INC)/cop.h \
- $(PERL_INC)/cv.h \
- $(PERL_INC)/dosish.h \
- $(PERL_INC)/embed.h \
- $(PERL_INC)/embedvar.h \
- $(PERL_INC)/fakethr.h \
- $(PERL_INC)/form.h \
- $(PERL_INC)/gv.h \
- $(PERL_INC)/handy.h \
- $(PERL_INC)/hv.h \
- $(PERL_INC)/intrpvar.h \
- $(PERL_INC)/iperlsys.h \
- $(PERL_INC)/keywords.h \
- $(PERL_INC)/mg.h \
- $(PERL_INC)/nostdio.h \
- $(PERL_INC)/objXSUB.h \
- $(PERL_INC)/op.h \
- $(PERL_INC)/opcode.h \
- $(PERL_INC)/opnames.h \
- $(PERL_INC)/patchlevel.h \
- $(PERL_INC)/perl.h \
- $(PERL_INC)/perlapi.h \
- $(PERL_INC)/perlio.h \
- $(PERL_INC)/perlsdio.h \
- $(PERL_INC)/perlsfio.h \
- $(PERL_INC)/perlvars.h \
- $(PERL_INC)/perly.h \
- $(PERL_INC)/pp.h \
- $(PERL_INC)/pp_proto.h \
- $(PERL_INC)/proto.h \
- $(PERL_INC)/regcomp.h \
- $(PERL_INC)/regexp.h \
- $(PERL_INC)/regnodes.h \
- $(PERL_INC)/scope.h \
- $(PERL_INC)/sv.h \
- $(PERL_INC)/thrdvar.h \
- $(PERL_INC)/thread.h \
- $(PERL_INC)/unixish.h \
- $(PERL_INC)/utf8.h \
- $(PERL_INC)/util.h \
- $(PERL_INC)/warnings.h
-
-$(OBJECT) : $(PERL_HDRS)
-} if $self->{OBJECT};
-
- push @m, join(" ", values %{$self->{XS}})." : \$(XSUBPPDEPS)\n" if %{$self->{XS}};
-
- join "\n", @m;
-}
-
-=item ppd
-
-Defines target that creates a PPD (Perl Package Description) file
-for a binary distribution.
-
-=cut
-
-sub ppd {
- my($self) = @_;
- my(@m);
- if ($self->{ABSTRACT_FROM}){
- $self->{ABSTRACT} = $self->parse_abstract($self->{ABSTRACT_FROM}) or
- Carp::carp "WARNING: Setting ABSTRACT via file '$self->{ABSTRACT_FROM}' failed\n";
- }
- my ($pack_ver) = join ",", (split (/\./, $self->{VERSION}), (0) x 4) [0 .. 3];
- push(@m, "# Creates a PPD (Perl Package Description) for a binary distribution.\n");
- push(@m, "ppd:\n");
- push(@m, "\t\@\$(PERL) -e \"print qq{<SOFTPKG NAME=\\\"$self->{DISTNAME}\\\" VERSION=\\\"$pack_ver\\\">\\n}");
- push(@m, ". qq{\\t<TITLE>$self->{DISTNAME}</TITLE>\\n}");
- my $abstract = $self->{ABSTRACT};
- $abstract =~ s/\n/\\n/sg;
- $abstract =~ s/</&lt;/g;
- $abstract =~ s/>/&gt;/g;
- push(@m, ". qq{\\t<ABSTRACT>$abstract</ABSTRACT>\\n}");
- my ($author) = $self->{AUTHOR};
- $author =~ s/</&lt;/g;
- $author =~ s/>/&gt;/g;
- $author =~ s/@/\\@/g;
- push(@m, ". qq{\\t<AUTHOR>$author</AUTHOR>\\n}");
- push(@m, ". qq{\\t<IMPLEMENTATION>\\n}");
- my ($prereq);
- foreach $prereq (sort keys %{$self->{PREREQ_PM}}) {
- my $pre_req = $prereq;
- $pre_req =~ s/::/-/g;
- my ($dep_ver) = join ",", (split (/\./, $self->{PREREQ_PM}{$prereq}), (0) x 4) [0 .. 3];
- push(@m, ". qq{\\t\\t<DEPENDENCY NAME=\\\"$pre_req\\\" VERSION=\\\"$dep_ver\\\" />\\n}");
- }
- push(@m, ". qq{\\t\\t<OS NAME=\\\"\$(OSNAME)\\\" />\\n}");
- push(@m, ". qq{\\t\\t<ARCHITECTURE NAME=\\\"$Config{'archname'}\\\" />\\n}");
- my ($bin_location) = $self->{BINARY_LOCATION};
- $bin_location =~ s/\\/\\\\/g;
- if ($self->{PPM_INSTALL_SCRIPT}) {
- if ($self->{PPM_INSTALL_EXEC}) {
- push(@m, " . qq{\\t\\t<INSTALL EXEC=\\\"$self->{PPM_INSTALL_EXEC}\\\">$self->{PPM_INSTALL_SCRIPT}</INSTALL>\\n}");
- }
- else {
- push(@m, " . qq{\\t\\t<INSTALL>$self->{PPM_INSTALL_SCRIPT}</INSTALL>\\n}");
- }
- }
- push(@m, ". qq{\\t\\t<CODEBASE HREF=\\\"$bin_location\\\" />\\n}");
- push(@m, ". qq{\\t</IMPLEMENTATION>\\n}");
- push(@m, ". qq{</SOFTPKG>\\n}\" > $self->{DISTNAME}.ppd");
-
- join("", @m);
-}
-
-=item perm_rw (o)
-
-Returns the attribute C<PERM_RW> or the string C<644>.
-Used as the string that is passed
-to the C<chmod> command to set the permissions for read/writeable files.
-MakeMaker chooses C<644> because it has turned out in the past that
-relying on the umask provokes hard-to-track bug reports.
-When the return value is used by the perl function C<chmod>, it is
-interpreted as an octal value.
-
-=cut
-
-sub perm_rw {
- shift->{PERM_RW} || "644";
-}
-
-=item perm_rwx (o)
-
-Returns the attribute C<PERM_RWX> or the string C<755>,
-i.e. the string that is passed
-to the C<chmod> command to set the permissions for executable files.
-See also perl_rw.
-
-=cut
-
-sub perm_rwx {
- shift->{PERM_RWX} || "755";
-}
-
-=item pm_to_blib
-
-Defines target that copies all files in the hash PM to their
-destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
-
-=cut
-
-sub pm_to_blib {
- my $self = shift;
- my($autodir) = $self->catdir('$(INST_LIB)','auto');
- return q{
-pm_to_blib: $(TO_INST_PM)
- }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
- "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
- -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'}.$autodir.q{','$(PM_FILTER)')"
- }.$self->{NOECHO}.q{$(TOUCH) $@
-};
-}
-
-=item post_constants (o)
-
-Returns an empty string per default. Dedicated to overrides from
-within Makefile.PL after all constants have been defined.
-
-=cut
-
-sub post_constants{
- my($self) = shift;
- "";
-}
-
-=item post_initialize (o)
-
-Returns an empty string per default. Used in Makefile.PLs to add some
-chunk of text to the Makefile after the object is initialized.
-
-=cut
-
-sub post_initialize {
- my($self) = shift;
- "";
-}
-
-=item postamble (o)
-
-Returns an empty string. Can be used in Makefile.PLs to write some
-text to the Makefile at the end.
-
-=cut
-
-sub postamble {
- my($self) = shift;
- "";
-}
-
-=item prefixify
-
-Check a path variable in $self from %Config, if it contains a prefix,
-and replace it with another one.
-
-Takes as arguments an attribute name, a search prefix and a
-replacement prefix. Changes the attribute in the object.
-
-=cut
-
-sub prefixify {
- my($self,$var,$sprefix,$rprefix) = @_;
- $self->{uc $var} ||= $Config{lc $var};
- $self->{uc $var} = VMS::Filespec::unixpath($self->{uc $var}) if $Is_VMS;
- $self->{uc $var} =~ s/\Q$sprefix\E/$rprefix/s;
-}
-
-=item processPL (o)
-
-Defines targets to run *.PL files.
-
-=cut
-
-sub processPL {
- my($self) = shift;
- return "" unless $self->{PL_FILES};
- my(@m, $plfile);
- foreach $plfile (sort keys %{$self->{PL_FILES}}) {
- my $list = ref($self->{PL_FILES}->{$plfile})
- ? $self->{PL_FILES}->{$plfile}
- : [$self->{PL_FILES}->{$plfile}];
- my $target;
- foreach $target (@$list) {
- push @m, "
-all :: $target
- $self->{NOECHO}\$(NOOP)
-
-$target :: $plfile
- \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) $plfile $target
-";
- }
- }
- join "", @m;
-}
-
-=item realclean (o)
-
-Defines the realclean target.
-
-=cut
-
-sub realclean {
- my($self, %attribs) = @_;
- my(@m);
- push(@m,'
-# Delete temporary files (via clean) and also delete installed files
-realclean purge :: clean
-');
- # realclean subdirectories first (already cleaned)
- my $sub = ($Is_Win32 && Win32::IsWin95()) ?
- "\tcd %s\n\t\$(TEST_F) %s\n\t\$(MAKE) %s realclean\n\tcd ..\n" :
- "\t-cd %s && \$(TEST_F) %s && \$(MAKE) %s realclean\n";
- foreach(@{$self->{DIR}}){
- push(@m, sprintf($sub,$_,"$self->{MAKEFILE}.old","-f $self->{MAKEFILE}.old"));
- push(@m, sprintf($sub,$_,"$self->{MAKEFILE}",''));
- }
- push(@m, " $self->{RM_RF} \$(INST_AUTODIR) \$(INST_ARCHAUTODIR)\n");
- if( $self->has_link_code ){
- push(@m, " $self->{RM_F} \$(INST_DYNAMIC) \$(INST_BOOT)\n");
- push(@m, " $self->{RM_F} \$(INST_STATIC)\n");
- }
- # Issue a several little RM_F commands rather than risk creating a
- # very long command line (useful for extensions such as Encode
- # that have many files).
- if (keys %{$self->{PM}}) {
- my $line = "";
- foreach (values %{$self->{PM}}) {
- if (length($line) + length($_) > 80) {
- push @m, "\t$self->{RM_F} $line\n";
- $line = $_;
- }
- else {
- $line .= " $_";
- }
- }
- push @m, "\t$self->{RM_F} $line\n" if $line;
- }
- my(@otherfiles) = ($self->{MAKEFILE},
- "$self->{MAKEFILE}.old"); # Makefiles last
- push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
- push(@m, " $self->{RM_RF} @otherfiles\n") if @otherfiles;
- push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
- join("", @m);
-}
-
-=item replace_manpage_separator
-
-Takes the name of a package, which may be a nested package, in the
-form Foo/Bar and replaces the slash with C<::>. Returns the replacement.
-
-=cut
-
-sub replace_manpage_separator {
- my($self,$man) = @_;
- if ($^O eq 'uwin') {
- $man =~ s,/+,.,g;
- } elsif ($Is_Dos) {
- $man =~ s,/+,__,g;
- } else {
- $man =~ s,/+,::,g;
- }
- $man;
-}
-
-=item static (o)
-
-Defines the static target.
-
-=cut
-
-sub static {
-# --- Static Loading Sections ---
-
- my($self) = shift;
- '
-## $(INST_PM) has been moved to the all: target.
-## It remains here for awhile to allow for old usage: "make static"
-#static :: '.$self->{MAKEFILE}.' $(INST_STATIC) $(INST_PM)
-static :: '.$self->{MAKEFILE}.' $(INST_STATIC)
- '.$self->{NOECHO}.'$(NOOP)
-';
-}
-
-=item static_lib (o)
-
-Defines how to produce the *.a (or equivalent) files.
-
-=cut
-
-sub static_lib {
- my($self) = @_;
-# Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC
-# return '' unless $self->needs_linking(); #might be because of a subdir
-
- return '' unless $self->has_link_code;
-
- my(@m);
- push(@m, <<'END');
-$(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)/.exists
- $(RM_RF) $@
-END
- # If this extension has it's own library (eg SDBM_File)
- # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
- push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
-
- my $ar;
- if (exists $self->{FULL_AR} && -x $self->{FULL_AR}) {
- # Prefer the absolute pathed ar if available so that PATH
- # doesn't confuse us. Perl itself is built with the full_ar.
- $ar = 'FULL_AR';
- } else {
- $ar = 'AR';
- }
- push @m,
- "\t\$($ar) ".'$(AR_STATIC_ARGS) $@ $(OBJECT) && $(RANLIB) $@'."\n";
- push @m,
-q{ $(CHMOD) $(PERM_RWX) $@
- }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
-};
- # Old mechanism - still available:
- push @m,
-"\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)/ext.libs
-} if $self->{PERL_SRC} && $self->{EXTRALIBS};
- push @m, "\n";
-
- push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
- join('', "\n",@m);
-}
-
-=item staticmake (o)
-
-Calls makeaperl.
-
-=cut
-
-sub staticmake {
- my($self, %attribs) = @_;
- my(@static);
-
- my(@searchdirs)=($self->{PERL_ARCHLIB}, $self->{SITEARCHEXP}, $self->{INST_ARCHLIB});
-
- # And as it's not yet built, we add the current extension
- # but only if it has some C code (or XS code, which implies C code)
- if (@{$self->{C}}) {
- @static = $self->catfile($self->{INST_ARCHLIB},
- "auto",
- $self->{FULLEXT},
- "$self->{BASEEXT}$self->{LIB_EXT}"
- );
- }
-
- # Either we determine now, which libraries we will produce in the
- # subdirectories or we do it at runtime of the make.
-
- # We could ask all subdir objects, but I cannot imagine, why it
- # would be necessary.
-
- # Instead we determine all libraries for the new perl at
- # runtime.
- my(@perlinc) = ($self->{INST_ARCHLIB}, $self->{INST_LIB}, $self->{PERL_ARCHLIB}, $self->{PERL_LIB});
-
- $self->makeaperl(MAKE => $self->{MAKEFILE},
- DIRS => \@searchdirs,
- STAT => \@static,
- INCL => \@perlinc,
- TARGET => $self->{MAP_TARGET},
- TMP => "",
- LIBPERL => $self->{LIBPERL_A}
- );
-}
-
-=item subdir_x (o)
-
-Helper subroutine for subdirs
-
-=cut
-
-sub subdir_x {
- my($self, $subdir) = @_;
- my(@m);
- if ($Is_Win32 && Win32::IsWin95()) {
- # XXX: dmake-specific, like rest of Win95 port
- return <<EOT;
-subdirs ::
-@[
- cd $subdir
- \$(MAKE) all \$(PASTHRU)
- cd ..
-]
-EOT
- }
- else {
- return <<EOT;
-
-subdirs ::
- $self->{NOECHO}cd $subdir && \$(MAKE) all \$(PASTHRU)
-
-EOT
- }
-}
-
-=item subdirs (o)
-
-Defines targets to process subdirectories.
-
-=cut
-
-sub subdirs {
-# --- Sub-directory Sections ---
- my($self) = shift;
- my(@m,$dir);
- # This method provides a mechanism to automatically deal with
- # subdirectories containing further Makefile.PL scripts.
- # It calls the subdir_x() method for each subdirectory.
- foreach $dir (@{$self->{DIR}}){
- push(@m, $self->subdir_x($dir));
-#### print "Including $dir subdirectory\n";
- }
- if (@m){
- unshift(@m, "
-# The default clean, realclean and test targets in this Makefile
-# have automatically been given entries for each subdir.
-
-");
- } else {
- push(@m, "\n# none")
- }
- join('',@m);
-}
-
-=item test (o)
-
-Defines the test targets.
-
-=cut
-
-sub test {
-# --- Test and Installation Sections ---
-
- my($self, %attribs) = @_;
- my $tests = $attribs{TESTS};
- if (!$tests && -d 't') {
- $tests = $Is_Win32 ? join(' ', <t\\*.t>) : 't/*.t';
- }
- # note: 'test.pl' name is also hardcoded in init_dirscan()
- my(@m);
- push(@m,"
-TEST_VERBOSE=0
-TEST_TYPE=test_\$(LINKTYPE)
-TEST_FILE = test.pl
-TEST_FILES = $tests
-TESTDB_SW = -d
-
-testdb :: testdb_\$(LINKTYPE)
-
-test :: \$(TEST_TYPE)
-");
- push(@m, map("\t$self->{NOECHO}cd $_ && \$(TEST_F) $self->{MAKEFILE} && \$(MAKE) test \$(PASTHRU)\n",
- @{$self->{DIR}}));
- push(@m, "\t$self->{NOECHO}echo 'No tests defined for \$(NAME) extension.'\n")
- unless $tests or -f "test.pl" or @{$self->{DIR}};
- push(@m, "\n");
-
- push(@m, "test_dynamic :: pure_all\n");
- push(@m, $self->test_via_harness('$(FULLPERL)', '$(TEST_FILES)')) if $tests;
- push(@m, $self->test_via_script('$(FULLPERL)', '$(TEST_FILE)')) if -f "test.pl";
- push(@m, "\n");
-
- push(@m, "testdb_dynamic :: pure_all\n");
- push(@m, $self->test_via_script('$(FULLPERL) $(TESTDB_SW)', '$(TEST_FILE)'));
- push(@m, "\n");
-
- # Occasionally we may face this degenerate target:
- push @m, "test_ : test_dynamic\n\n";
-
- if ($self->needs_linking()) {
- push(@m, "test_static :: pure_all \$(MAP_TARGET)\n");
- push(@m, $self->test_via_harness('./$(MAP_TARGET)', '$(TEST_FILES)')) if $tests;
- push(@m, $self->test_via_script('./$(MAP_TARGET)', '$(TEST_FILE)')) if -f "test.pl";
- push(@m, "\n");
- push(@m, "testdb_static :: pure_all \$(MAP_TARGET)\n");
- push(@m, $self->test_via_script('./$(MAP_TARGET) $(TESTDB_SW)', '$(TEST_FILE)'));
- push(@m, "\n");
- } else {
- push @m, "test_static :: test_dynamic\n";
- push @m, "testdb_static :: testdb_dynamic\n";
- }
- join("", @m);
-}
-
-=item test_via_harness (o)
-
-Helper method to write the test targets
-
-=cut
-
-sub test_via_harness {
- my($self, $perl, $tests) = @_;
- $perl = "PERL_DL_NONLAZY=1 $perl" unless $Is_Win32;
- "\t$perl".q! -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e 'use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;' !."$tests\n";
-}
-
-=item test_via_script (o)
-
-Other helper method for test.
-
-=cut
-
-sub test_via_script {
- my($self, $perl, $script) = @_;
- $perl = "PERL_DL_NONLAZY=1 $perl" unless $Is_Win32;
- qq{\t$perl}.q{ -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) }.qq{$script
-};
-}
-
-=item tool_autosplit (o)
-
-Defines a simple perl call that runs autosplit. May be deprecated by
-pm_to_blib soon.
-
-=cut
-
-sub tool_autosplit {
-# --- Tool Sections ---
-
- my($self, %attribs) = @_;
- my($asl) = "";
- $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
- q{
-# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
-AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;}.$asl.q{autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
-};
-}
-
-=item tools_other (o)
-
-Defines SHELL, LD, TOUCH, CP, MV, RM_F, RM_RF, CHMOD, UMASK_NULL in
-the Makefile. Also defines the perl programs MKPATH,
-WARN_IF_OLD_PACKLIST, MOD_INSTALL. DOC_INSTALL, and UNINSTALL.
-
-=cut
-
-sub tools_other {
- my($self) = shift;
- my @m;
- my $bin_sh = $Config{sh} || '/bin/sh';
- push @m, qq{
-SHELL = $bin_sh
-};
-
- for (qw/ CHMOD CP LD MV NOOP RM_F RM_RF TEST_F TOUCH UMASK_NULL DEV_NULL/ ) {
- push @m, "$_ = $self->{$_}\n";
- }
-
- push @m, q{
-# The following is a portable way to say mkdir -p
-# To see which directories are created, change the if 0 to if 1
-MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
-
-# This helps us to minimize the effect of the .exists files A yet
-# better solution would be to have a stable file in the perl
-# distribution with a timestamp of zero. But this solution doesn't
-# need any changes to the core distribution and works with older perls
-EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
-};
-
-
- return join "", @m if $self->{PARENT};
-
- push @m, q{
-# Here we warn users that an old packlist file was found somewhere,
-# and that they should call some uninstall routine
-WARN_IF_OLD_PACKLIST = $(PERL) -we 'exit unless -f $$ARGV[0];' \\
--e 'print "WARNING: I have found an old package in\n";' \\
--e 'print "\t$$ARGV[0].\n";' \\
--e 'print "Please make sure the two installations are not conflicting\n";'
-
-UNINST=0
-VERBINST=0
-
-MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
--e "install({@ARGV},'$(VERBINST)',0,'$(UNINST)');"
-
-DOC_INSTALL = $(PERL) -e '$$\="\n\n";' \
--e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", $$arg=shift, "|", $$arg, ">";' \
--e 'print "=over 4";' \
--e 'while (defined($$key = shift) and defined($$val = shift)){print "=item *";print "C<$$key: $$val>";}' \
--e 'print "=back";'
-
-UNINSTALL = $(PERL) -MExtUtils::Install \
--e 'uninstall($$ARGV[0],1,1); print "\nUninstall is deprecated. Please check the";' \
--e 'print " packlist above carefully.\n There may be errors. Remove the";' \
--e 'print " appropriate files manually.\n Sorry for the inconveniences.\n"'
-};
-
- return join "", @m;
-}
-
-=item tool_xsubpp (o)
-
-Determines typemaps, xsubpp version, prototype behaviour.
-
-=cut
-
-sub tool_xsubpp {
- my($self) = shift;
- return "" unless $self->needs_linking;
- my($xsdir) = $self->catdir($self->{PERL_LIB},"ExtUtils");
- my(@tmdeps) = $self->catdir('$(XSUBPPDIR)','typemap');
- if( $self->{TYPEMAPS} ){
- my $typemap;
- foreach $typemap (@{$self->{TYPEMAPS}}){
- if( ! -f $typemap ){
- warn "Typemap $typemap not found.\n";
- }
- else{
- push(@tmdeps, $typemap);
- }
- }
- }
- push(@tmdeps, "typemap") if -f "typemap";
- my(@tmargs) = map("-typemap $_", @tmdeps);
- if( exists $self->{XSOPT} ){
- unshift( @tmargs, $self->{XSOPT} );
- }
-
-
- my $xsubpp_version = $self->xsubpp_version($self->catfile($xsdir,"xsubpp"));
-
- # What are the correct thresholds for version 1 && 2 Paul?
- if ( $xsubpp_version > 1.923 ){
- $self->{XSPROTOARG} = "" unless defined $self->{XSPROTOARG};
- } else {
- if (defined $self->{XSPROTOARG} && $self->{XSPROTOARG} =~ /\-prototypes/) {
- print STDOUT qq{Warning: This extension wants to pass the switch "-prototypes" to xsubpp.
- Your version of xsubpp is $xsubpp_version and cannot handle this.
- Please upgrade to a more recent version of xsubpp.
-};
- } else {
- $self->{XSPROTOARG} = "";
- }
- }
-
- my $xsubpp = "xsubpp";
-
- return qq{
-XSUBPPDIR = $xsdir
-XSUBPP = \$(XSUBPPDIR)/$xsubpp
-XSPROTOARG = $self->{XSPROTOARG}
-XSUBPPDEPS = @tmdeps \$(XSUBPP)
-XSUBPPARGS = @tmargs
-};
-};
-
-sub xsubpp_version
-{
- my($self,$xsubpp) = @_;
- return $Xsubpp_Version if defined $Xsubpp_Version; # global variable
-
- my ($version) ;
-
- # try to figure out the version number of the xsubpp on the system
-
- # first try the -v flag, introduced in 1.921 & 2.000a2
-
- return "" unless $self->needs_linking;
-
- my $command = "$self->{PERL} -I$self->{PERL_LIB} $xsubpp -v 2>&1";
- print "Running $command\n" if $Verbose >= 2;
- $version = `$command` ;
- warn "Running '$command' exits with status " . ($?>>8) if $?;
- chop $version ;
-
- return $Xsubpp_Version = $1 if $version =~ /^xsubpp version (.*)/ ;
-
- # nope, then try something else
-
- my $counter = '000';
- my ($file) = 'temp' ;
- $counter++ while -e "$file$counter"; # don't overwrite anything
- $file .= $counter;
-
- open(F, ">$file") or die "Cannot open file '$file': $!\n" ;
- print F <<EOM ;
-MODULE = fred PACKAGE = fred
-
-int
-fred(a)
- int a;
-EOM
-
- close F ;
-
- $command = "$self->{PERL} $xsubpp $file 2>&1";
- print "Running $command\n" if $Verbose >= 2;
- my $text = `$command` ;
- warn "Running '$command' exits with status " . ($?>>8) if $?;
- unlink $file ;
-
- # gets 1.2 -> 1.92 and 2.000a1
- return $Xsubpp_Version = $1 if $text =~ /automatically by xsubpp version ([\S]+)\s*/ ;
-
- # it is either 1.0 or 1.1
- return $Xsubpp_Version = 1.1 if $text =~ /^Warning: ignored semicolon/ ;
-
- # none of the above, so 1.0
- return $Xsubpp_Version = "1.0" ;
-}
-
-=item top_targets (o)
-
-Defines the targets all, subdirs, config, and O_FILES
-
-=cut
-
-sub top_targets {
-# --- Target Sections ---
-
- my($self) = shift;
- my(@m);
- push @m, '
-#all :: config $(INST_PM) subdirs linkext manifypods
-';
-
- push @m, '
-all :: pure_all htmlifypods manifypods
- '.$self->{NOECHO}.'$(NOOP)
-'
- unless $self->{SKIPHASH}{'all'};
-
- push @m, '
-pure_all :: config pm_to_blib subdirs linkext
- '.$self->{NOECHO}.'$(NOOP)
-
-subdirs :: $(MYEXTLIB)
- '.$self->{NOECHO}.'$(NOOP)
-
-config :: '.$self->{MAKEFILE}.' $(INST_LIBDIR)/.exists
- '.$self->{NOECHO}.'$(NOOP)
-
-config :: $(INST_ARCHAUTODIR)/.exists
- '.$self->{NOECHO}.'$(NOOP)
-
-config :: $(INST_AUTODIR)/.exists
- '.$self->{NOECHO}.'$(NOOP)
-';
-
- push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
-
- if (%{$self->{HTMLLIBPODS}}) {
- push @m, qq[
-config :: \$(INST_HTMLLIBDIR)/.exists
- $self->{NOECHO}\$(NOOP)
-
-];
- push @m, $self->dir_target(qw[$(INST_HTMLLIBDIR)]);
- }
-
- if (%{$self->{HTMLSCRIPTPODS}}) {
- push @m, qq[
-config :: \$(INST_HTMLSCRIPTDIR)/.exists
- $self->{NOECHO}\$(NOOP)
-
-];
- push @m, $self->dir_target(qw[$(INST_HTMLSCRIPTDIR)]);
- }
-
- if (%{$self->{MAN1PODS}}) {
- push @m, qq[
-config :: \$(INST_MAN1DIR)/.exists
- $self->{NOECHO}\$(NOOP)
-
-];
- push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
- }
- if (%{$self->{MAN3PODS}}) {
- push @m, qq[
-config :: \$(INST_MAN3DIR)/.exists
- $self->{NOECHO}\$(NOOP)
-
-];
- push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
- }
-
- push @m, '
-$(O_FILES): $(H_FILES)
-' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
-
- push @m, q{
-help:
- perldoc ExtUtils::MakeMaker
-};
-
- push @m, q{
-Version_check:
- }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
- -MExtUtils::MakeMaker=Version_check \
- -e "Version_check('$(MM_VERSION)')"
-};
-
- join('',@m);
-}
-
-=item writedoc
-
-Obsolete, deprecated method. Not used since Version 5.21.
-
-=cut
-
-sub writedoc {
-# --- perllocal.pod section ---
- my($self,$what,$name,@attribs)=@_;
- my $time = localtime;
- print "=head2 $time: $what C<$name>\n\n=over 4\n\n=item *\n\n";
- print join "\n\n=item *\n\n", map("C<$_>",@attribs);
- print "\n\n=back\n\n";
-}
-
-=item xs_c (o)
-
-Defines the suffix rules to compile XS files to C.
-
-=cut
-
-sub xs_c {
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs.c:
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
-';
-}
-
-=item xs_cpp (o)
-
-Defines the suffix rules to compile XS files to C++.
-
-=cut
-
-sub xs_cpp {
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs.cpp:
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.cpp
-';
-}
-
-=item xs_o (o)
-
-Defines suffix rules to go from XS to object files directly. This is
-only intended for broken make implementations.
-
-=cut
-
-sub xs_o { # many makes are too dumb to use xs_c then c_o
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs$(OBJ_EXT):
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
-';
-}
-
-=item perl_archive
-
-This is internal method that returns path to libperl.a equivalent
-to be linked to dynamic extensions. UNIX does not have one but OS2
-and Win32 do.
-
-=cut
-
-sub perl_archive
-{
- return '$(PERL_INC)' . "/$Config{libperl}" if $^O eq "beos";
- return "";
-}
-
-=item perl_archive_after
-
-This is an internal method that returns path to a library which
-should be put on the linker command line I<after> the external libraries
-to be linked to dynamic extensions. This may be needed if the linker
-is one-pass, and Perl includes some overrides for C RTL functions,
-such as malloc().
-
-=cut
-
-sub perl_archive_after
-{
- return "";
-}
-
-=item export_list
-
-This is internal method that returns name of a file that is
-passed to linker to define symbols to be exported.
-UNIX does not have one but OS2 and Win32 do.
-
-=cut
-
-sub export_list
-{
- return "";
-}
-
-
-1;
-
-=back
-
-=head1 SEE ALSO
-
-L<ExtUtils::MakeMaker>
-
-=cut
-
-__END__
diff --git a/contrib/perl5/lib/ExtUtils/MM_VMS.pm b/contrib/perl5/lib/ExtUtils/MM_VMS.pm
deleted file mode 100644
index 7b75958..0000000
--- a/contrib/perl5/lib/ExtUtils/MM_VMS.pm
+++ /dev/null
@@ -1,2309 +0,0 @@
-# MM_VMS.pm
-# MakeMaker default methods for VMS
-# This package is inserted into @ISA of MakeMaker's MM before the
-# built-in ExtUtils::MM_Unix methods if MakeMaker.pm is run under VMS.
-#
-# Author: Charles Bailey bailey@newman.upenn.edu
-
-package ExtUtils::MM_VMS;
-
-use Carp qw( &carp );
-use Config;
-require Exporter;
-use VMS::Filespec;
-use File::Basename;
-use File::Spec;
-our($Revision, @ISA);
-$Revision = '5.56 (27-Apr-1999)';
-
-@ISA = qw( File::Spec );
-unshift @MM::ISA, 'ExtUtils::MM_VMS';
-
-Exporter::import('ExtUtils::MakeMaker', '$Verbose', '&neatvalue');
-
-=head1 NAME
-
-ExtUtils::MM_VMS - methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=head1 SYNOPSIS
-
- use ExtUtils::MM_VMS; # Done internally by ExtUtils::MakeMaker if needed
-
-=head1 DESCRIPTION
-
-See ExtUtils::MM_Unix for a documentation of the methods provided
-there. This package overrides the implementation of these methods, not
-the semantics.
-
-=head2 Methods always loaded
-
-=over
-
-=item wraplist
-
-Converts a list into a string wrapped at approximately 80 columns.
-
-=cut
-
-sub wraplist {
- my($self) = shift;
- my($line,$hlen) = ('',0);
- my($word);
-
- foreach $word (@_) {
- # Perl bug -- seems to occasionally insert extra elements when
- # traversing array (scalar(@array) doesn't show them, but
- # foreach(@array) does) (5.00307)
- next unless $word =~ /\w/;
- $line .= ' ' if length($line);
- if ($hlen > 80) { $line .= "\\\n\t"; $hlen = 0; }
- $line .= $word;
- $hlen += length($word) + 2;
- }
- $line;
-}
-
-=item rootdir (override)
-
-Returns a string representing of the root directory.
-
-=cut
-
-sub rootdir {
- return '';
-}
-
-package ExtUtils::MM_VMS;
-
-sub ExtUtils::MM_VMS::ext;
-sub ExtUtils::MM_VMS::guess_name;
-sub ExtUtils::MM_VMS::find_perl;
-sub ExtUtils::MM_VMS::path;
-sub ExtUtils::MM_VMS::maybe_command;
-sub ExtUtils::MM_VMS::maybe_command_in_dirs;
-sub ExtUtils::MM_VMS::perl_script;
-sub ExtUtils::MM_VMS::file_name_is_absolute;
-sub ExtUtils::MM_VMS::replace_manpage_separator;
-sub ExtUtils::MM_VMS::init_others;
-sub ExtUtils::MM_VMS::constants;
-sub ExtUtils::MM_VMS::cflags;
-sub ExtUtils::MM_VMS::const_cccmd;
-sub ExtUtils::MM_VMS::pm_to_blib;
-sub ExtUtils::MM_VMS::tool_autosplit;
-sub ExtUtils::MM_VMS::tool_xsubpp;
-sub ExtUtils::MM_VMS::xsubpp_version;
-sub ExtUtils::MM_VMS::tools_other;
-sub ExtUtils::MM_VMS::dist;
-sub ExtUtils::MM_VMS::c_o;
-sub ExtUtils::MM_VMS::xs_c;
-sub ExtUtils::MM_VMS::xs_o;
-sub ExtUtils::MM_VMS::top_targets;
-sub ExtUtils::MM_VMS::dlsyms;
-sub ExtUtils::MM_VMS::dynamic_lib;
-sub ExtUtils::MM_VMS::dynamic_bs;
-sub ExtUtils::MM_VMS::static_lib;
-sub ExtUtils::MM_VMS::manifypods;
-sub ExtUtils::MM_VMS::processPL;
-sub ExtUtils::MM_VMS::installbin;
-sub ExtUtils::MM_VMS::subdir_x;
-sub ExtUtils::MM_VMS::clean;
-sub ExtUtils::MM_VMS::realclean;
-sub ExtUtils::MM_VMS::dist_basics;
-sub ExtUtils::MM_VMS::dist_core;
-sub ExtUtils::MM_VMS::dist_dir;
-sub ExtUtils::MM_VMS::dist_test;
-sub ExtUtils::MM_VMS::install;
-sub ExtUtils::MM_VMS::perldepend;
-sub ExtUtils::MM_VMS::makefile;
-sub ExtUtils::MM_VMS::test;
-sub ExtUtils::MM_VMS::test_via_harness;
-sub ExtUtils::MM_VMS::test_via_script;
-sub ExtUtils::MM_VMS::makeaperl;
-sub ExtUtils::MM_VMS::ext;
-sub ExtUtils::MM_VMS::nicetext;
-
-#use SelfLoader;
-sub AUTOLOAD {
- my $code;
- if (defined fileno(DATA)) {
- my $fh = select DATA;
- my $o = $/; # For future reads from the file.
- $/ = "\n__END__\n";
- $code = <DATA>;
- $/ = $o;
- select $fh;
- close DATA;
- eval $code;
- if ($@) {
- $@ =~ s/ at .*\n//;
- Carp::croak $@;
- }
- } else {
- warn "AUTOLOAD called unexpectedly for $AUTOLOAD";
- }
- defined(&$AUTOLOAD) or die "Myloader inconsistency error";
- goto &$AUTOLOAD;
-}
-
-1;
-
-#__DATA__
-
-
-# This isn't really an override. It's just here because ExtUtils::MM_VMS
-# appears in @MM::ISA before ExtUtils::Liblist::Kid, so if there isn't an ext()
-# in MM_VMS, then AUTOLOAD is called, and bad things happen. So, we just
-# mimic inheritance here and hand off to ExtUtils::Liblist::Kid.
-sub ext {
- require ExtUtils::Liblist;
- ExtUtils::Liblist::Kid::ext(@_);
-}
-
-=back
-
-=head2 SelfLoaded methods
-
-Those methods which override default MM_Unix methods are marked
-"(override)", while methods unique to MM_VMS are marked "(specific)".
-For overridden methods, documentation is limited to an explanation
-of why this method overrides the MM_Unix method; see the ExtUtils::MM_Unix
-documentation for more details.
-
-=over
-
-=item guess_name (override)
-
-Try to determine name of extension being built. We begin with the name
-of the current directory. Since VMS filenames are case-insensitive,
-however, we look for a F<.pm> file whose name matches that of the current
-directory (presumably the 'main' F<.pm> file for this extension), and try
-to find a C<package> statement from which to obtain the Mixed::Case
-package name.
-
-=cut
-
-sub guess_name {
- my($self) = @_;
- my($defname,$defpm,@pm,%xs,$pm);
- local *PM;
-
- $defname = basename(fileify($ENV{'DEFAULT'}));
- $defname =~ s![\d\-_]*\.dir.*$!!; # Clip off .dir;1 suffix, and package version
- $defpm = $defname;
- # Fallback in case for some reason a user has copied the files for an
- # extension into a working directory whose name doesn't reflect the
- # extension's name. We'll use the name of a unique .pm file, or the
- # first .pm file with a matching .xs file.
- if (not -e "${defpm}.pm") {
- @pm = map { s/.pm$//; $_ } glob('*.pm');
- if (@pm == 1) { ($defpm = $pm[0]) =~ s/.pm$//; }
- elsif (@pm) {
- %xs = map { s/.xs$//; ($_,1) } glob('*.xs');
- if (%xs) { foreach $pm (@pm) { $defpm = $pm, last if exists $xs{$pm}; } }
- }
- }
- if (open(PM,"${defpm}.pm")){
- while (<PM>) {
- if (/^\s*package\s+([^;]+)/i) {
- $defname = $1;
- last;
- }
- }
- print STDOUT "Warning (non-fatal): Couldn't find package name in ${defpm}.pm;\n\t",
- "defaulting package name to $defname\n"
- if eof(PM);
- close PM;
- }
- else {
- print STDOUT "Warning (non-fatal): Couldn't find ${defpm}.pm;\n\t",
- "defaulting package name to $defname\n";
- }
- $defname =~ s#[\d.\-_]+$##;
- $defname;
-}
-
-=item find_perl (override)
-
-Use VMS file specification syntax and CLI commands to find and
-invoke Perl images.
-
-=cut
-
-sub find_perl {
- my($self, $ver, $names, $dirs, $trace) = @_;
- my($name,$dir,$vmsfile,@sdirs,@snames,@cand);
- my($rslt);
- my($inabs) = 0;
- local *TCF;
- # Check in relative directories first, so we pick up the current
- # version of Perl if we're running MakeMaker as part of the main build.
- @sdirs = sort { my($absa) = $self->file_name_is_absolute($a);
- my($absb) = $self->file_name_is_absolute($b);
- if ($absa && $absb) { return $a cmp $b }
- else { return $absa ? 1 : ($absb ? -1 : ($a cmp $b)); }
- } @$dirs;
- # Check miniperl before perl, and check names likely to contain
- # version numbers before "generic" names, so we pick up an
- # executable that's less likely to be from an old installation.
- @snames = sort { my($ba) = $a =~ m!([^:>\]/]+)$!; # basename
- my($bb) = $b =~ m!([^:>\]/]+)$!;
- my($ahasdir) = (length($a) - length($ba) > 0);
- my($bhasdir) = (length($b) - length($bb) > 0);
- if ($ahasdir and not $bhasdir) { return 1; }
- elsif ($bhasdir and not $ahasdir) { return -1; }
- else { $bb =~ /\d/ <=> $ba =~ /\d/
- or substr($ba,0,1) cmp substr($bb,0,1)
- or length($bb) <=> length($ba) } } @$names;
- # Image names containing Perl version use '_' instead of '.' under VMS
- foreach $name (@snames) { $name =~ s/\.(\d+)$/_$1/; }
- if ($trace >= 2){
- print "Looking for perl $ver by these names:\n";
- print "\t@snames,\n";
- print "in these dirs:\n";
- print "\t@sdirs\n";
- }
- foreach $dir (@sdirs){
- next unless defined $dir; # $self->{PERL_SRC} may be undefined
- $inabs++ if $self->file_name_is_absolute($dir);
- if ($inabs == 1) {
- # We've covered relative dirs; everything else is an absolute
- # dir (probably an installed location). First, we'll try potential
- # command names, to see whether we can avoid a long MCR expression.
- foreach $name (@snames) { push(@cand,$name) if $name =~ /^[\w\-\$]+$/; }
- $inabs++; # Should happen above in next $dir, but just in case . . .
- }
- foreach $name (@snames){
- if ($name !~ m![/:>\]]!) { push(@cand,$self->catfile($dir,$name)); }
- else { push(@cand,$self->fixpath($name,0)); }
- }
- }
- foreach $name (@cand) {
- print "Checking $name\n" if ($trace >= 2);
- # If it looks like a potential command, try it without the MCR
- if ($name =~ /^[\w\-\$]+$/) {
- open(TCF,">temp_mmvms.com") || die('unable to open temp file');
- print TCF "\$ set message/nofacil/nosever/noident/notext\n";
- print TCF "\$ $name -e \"require $ver; print \"\"VER_OK\\n\"\"\"\n";
- close TCF;
- $rslt = `\@temp_mmvms.com` ;
- unlink('temp_mmvms.com');
- if ($rslt =~ /VER_OK/) {
- print "Using PERL=$name\n" if $trace;
- return $name;
- }
- }
- next unless $vmsfile = $self->maybe_command($name);
- $vmsfile =~ s/;[\d\-]*$//; # Clip off version number; we can use a newer version as well
- print "Executing $vmsfile\n" if ($trace >= 2);
- open(TCF,">temp_mmvms.com") || die('unable to open temp file');
- print TCF "\$ set message/nofacil/nosever/noident/notext\n";
- print TCF "\$ mcr $vmsfile -e \"require $ver; print \"\"VER_OK\\n\"\"\" \n";
- close TCF;
- $rslt = `\@temp_mmvms.com`;
- unlink('temp_mmvms.com');
- if ($rslt =~ /VER_OK/) {
- print "Using PERL=MCR $vmsfile\n" if $trace;
- return "MCR $vmsfile";
- }
- }
- print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
- 0; # false and not empty
-}
-
-=item path (override)
-
-Translate logical name DCL$PATH as a searchlist, rather than trying
-to C<split> string value of C<$ENV{'PATH'}>.
-
-=cut
-
-sub path {
- my(@dirs,$dir,$i);
- while ($dir = $ENV{'DCL$PATH;' . $i++}) { push(@dirs,$dir); }
- @dirs;
-}
-
-=item maybe_command (override)
-
-Follows VMS naming conventions for executable files.
-If the name passed in doesn't exactly match an executable file,
-appends F<.Exe> (or equivalent) to check for executable image, and F<.Com>
-to check for DCL procedure. If this fails, checks directories in DCL$PATH
-and finally F<Sys$System:> for an executable file having the name specified,
-with or without the F<.Exe>-equivalent suffix.
-
-=cut
-
-sub maybe_command {
- my($self,$file) = @_;
- return $file if -x $file && ! -d _;
- my(@dirs) = ('');
- my(@exts) = ('',$Config{'exe_ext'},'.exe','.com');
- my($dir,$ext);
- if ($file !~ m![/:>\]]!) {
- for (my $i = 0; defined $ENV{"DCL\$PATH;$i"}; $i++) {
- $dir = $ENV{"DCL\$PATH;$i"};
- $dir .= ':' unless $dir =~ m%[\]:]$%;
- push(@dirs,$dir);
- }
- push(@dirs,'Sys$System:');
- foreach $dir (@dirs) {
- my $sysfile = "$dir$file";
- foreach $ext (@exts) {
- return $file if -x "$sysfile$ext" && ! -d _;
- }
- }
- }
- return 0;
-}
-
-=item maybe_command_in_dirs (override)
-
-Uses DCL argument quoting on test command line.
-
-=cut
-
-sub maybe_command_in_dirs { # $ver is optional argument if looking for perl
- my($self, $names, $dirs, $trace, $ver) = @_;
- my($name, $dir);
- foreach $dir (@$dirs){
- next unless defined $dir; # $self->{PERL_SRC} may be undefined
- foreach $name (@$names){
- my($abs,$tryabs);
- if ($self->file_name_is_absolute($name)) {
- $abs = $name;
- } else {
- $abs = $self->catfile($dir, $name);
- }
- print "Checking $abs for $name\n" if ($trace >= 2);
- next unless $tryabs = $self->maybe_command($abs);
- print "Substituting $tryabs instead of $abs\n"
- if ($trace >= 2 and $tryabs ne $abs);
- $abs = $tryabs;
- if (defined $ver) {
- print "Executing $abs\n" if ($trace >= 2);
- if (`$abs -e 'require $ver; print "VER_OK\n" ' 2>&1` =~ /VER_OK/) {
- print "Using $abs\n" if $trace;
- return $abs;
- }
- } else { # Do not look for perl
- return $abs;
- }
- }
- }
-}
-
-=item perl_script (override)
-
-If name passed in doesn't specify a readable file, appends F<.com> or
-F<.pl> and tries again, since it's customary to have file types on all files
-under VMS.
-
-=cut
-
-sub perl_script {
- my($self,$file) = @_;
- return $file if -r $file && ! -d _;
- return "$file.com" if -r "$file.com";
- return "$file.pl" if -r "$file.pl";
- return '';
-}
-
-=item file_name_is_absolute (override)
-
-Checks for VMS directory spec as well as Unix separators.
-
-=cut
-
-sub file_name_is_absolute {
- my($self,$file) = @_;
- # If it's a logical name, expand it.
- $file = $ENV{$file} while $file =~ /^[\w\$\-]+$/ and $ENV{$file};
- $file =~ m!^/! or $file =~ m![<\[][^.\-\]>]! or $file =~ /:[^<\[]/;
-}
-
-=item replace_manpage_separator
-
-Use as separator a character which is legal in a VMS-syntax file name.
-
-=cut
-
-sub replace_manpage_separator {
- my($self,$man) = @_;
- $man = unixify($man);
- $man =~ s#/+#__#g;
- $man;
-}
-
-=item init_others (override)
-
-Provide VMS-specific forms of various utility commands, then hand
-off to the default MM_Unix method.
-
-=cut
-
-sub init_others {
- my($self) = @_;
-
- $self->{NOOP} = 'Continue';
- $self->{FIRST_MAKEFILE} ||= 'Descrip.MMS';
- $self->{MAKE_APERL_FILE} ||= 'Makeaperl.MMS';
- $self->{MAKEFILE} ||= $self->{FIRST_MAKEFILE};
- $self->{NOECHO} ||= '@ ';
- $self->{RM_F} = '$(PERL) -e "foreach (@ARGV) { 1 while ( -d $_ ? rmdir $_ : unlink $_)}"';
- $self->{RM_RF} = '$(PERL) "-I$(PERL_LIB)" -e "use File::Path; @dirs = map(VMS::Filespec::unixify($_),@ARGV); rmtree(\@dirs,0,0)"';
- $self->{TOUCH} = '$(PERL) -e "$t=time; foreach (@ARGV) { -e $_ ? utime($t,$t,@ARGV) : (open(F,qq(>$_)),close F)}"';
- $self->{CHMOD} = '$(PERL) -e "chmod @ARGV"'; # expect Unix syntax from MakeMaker
- $self->{CP} = 'Copy/NoConfirm';
- $self->{MV} = 'Rename/NoConfirm';
- $self->{UMASK_NULL} = '! ';
- &ExtUtils::MM_Unix::init_others;
-}
-
-=item constants (override)
-
-Fixes up numerous file and directory macros to insure VMS syntax
-regardless of input syntax. Also adds a few VMS-specific macros
-and makes lists of files comma-separated.
-
-=cut
-
-sub constants {
- my($self) = @_;
- my(@m,$def,$macro);
-
- # Be kind about case for pollution
- for (@ARGV) { $_ = uc($_) if /POLLUTE/i; }
-
- if ($self->{DEFINE} ne '') {
- my(@terms) = split(/\s+/,$self->{DEFINE});
- my(@defs,@udefs);
- foreach $def (@terms) {
- next unless $def;
- my $targ = \@defs;
- if ($def =~ s/^-([DU])//) { # If it was a Unix-style definition
- if ($1 eq 'U') { $targ = \@udefs; }
- $def =~ s/='(.*)'$/=$1/; # then remove shell-protection ''
- $def =~ s/^'(.*)'$/$1/; # from entire term or argument
- }
- if ($def =~ /=/) {
- $def =~ s/"/""/g; # Protect existing " from DCL
- $def = qq["$def"]; # and quote to prevent parsing of =
- }
- push @$targ, $def;
- }
- $self->{DEFINE} = '';
- if (@defs) { $self->{DEFINE} = '/Define=(' . join(',',@defs) . ')'; }
- if (@udefs) { $self->{DEFINE} .= '/Undef=(' . join(',',@udefs) . ')'; }
- }
-
- if ($self->{OBJECT} =~ /\s/) {
- $self->{OBJECT} =~ s/(\\)?\n+\s+/ /g;
- $self->{OBJECT} = $self->wraplist(map($self->fixpath($_,0),split(/,?\s+/,$self->{OBJECT})));
- }
- $self->{LDFROM} = $self->wraplist(map($self->fixpath($_,0),split(/,?\s+/,$self->{LDFROM})));
-
-
- # Fix up directory specs
- $self->{ROOTEXT} = $self->{ROOTEXT} ? $self->fixpath($self->{ROOTEXT},1)
- : '[]';
- foreach $macro ( qw [
- INST_BIN INST_SCRIPT INST_LIB INST_ARCHLIB INST_EXE INSTALLPRIVLIB
- INSTALLARCHLIB INSTALLSCRIPT INSTALLBIN PERL_LIB PERL_ARCHLIB
- PERL_INC PERL_SRC FULLEXT INST_MAN1DIR INSTALLMAN1DIR
- INST_MAN3DIR INSTALLMAN3DIR INSTALLSITELIB INSTALLSITEARCH
- SITELIBEXP SITEARCHEXP ] ) {
- next unless defined $self->{$macro};
- $self->{$macro} = $self->fixpath($self->{$macro},1);
- }
- $self->{PERL_VMS} = $self->catdir($self->{PERL_SRC},q(VMS))
- if ($self->{PERL_SRC});
-
-
-
- # Fix up file specs
- foreach $macro ( qw[LIBPERL_A FIRST_MAKEFILE MAKE_APERL_FILE MYEXTLIB] ) {
- next unless defined $self->{$macro};
- $self->{$macro} = $self->fixpath($self->{$macro},0);
- }
-
- foreach $macro (qw/
- AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION VERSION_SYM XS_VERSION
- INST_BIN INST_EXE INST_LIB INST_ARCHLIB INST_SCRIPT PREFIX
- INSTALLDIRS INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
- INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
- PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
- FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC PERL_VMS
- PERL_INC PERL FULLPERL
- / ) {
- next unless defined $self->{$macro};
- push @m, "$macro = $self->{$macro}\n";
- }
-
-
- push @m, q[
-VERSION_MACRO = VERSION
-DEFINE_VERSION = "$(VERSION_MACRO)=""$(VERSION)"""
-XS_VERSION_MACRO = XS_VERSION
-XS_DEFINE_VERSION = "$(XS_VERSION_MACRO)=""$(XS_VERSION)"""
-
-MAKEMAKER = ],$self->catfile($self->{PERL_LIB},'ExtUtils','MakeMaker.pm'),qq[
-MM_VERSION = $ExtUtils::MakeMaker::VERSION
-MM_REVISION = $ExtUtils::MakeMaker::Revision
-MM_VMS_REVISION = $ExtUtils::MM_VMS::Revision
-
-# FULLEXT = Pathname for extension directory (eg DBD/Oracle).
-# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT.
-# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
-# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
-];
-
- for $tmp (qw/
- FULLEXT VERSION_FROM OBJECT LDFROM
- / ) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = ",$self->fixpath($self->{$tmp},0),"\n";
- }
-
- for $tmp (qw/
- BASEEXT PARENT_NAME DLBASE INC DEFINE LINKTYPE
- / ) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
-
- for $tmp (qw/ XS MAN1PODS MAN3PODS PM /) {
- next unless defined $self->{$tmp};
- my(%tmp,$key);
- for $key (keys %{$self->{$tmp}}) {
- $tmp{$self->fixpath($key,0)} = $self->fixpath($self->{$tmp}{$key},0);
- }
- $self->{$tmp} = \%tmp;
- }
-
- for $tmp (qw/ C O_FILES H /) {
- next unless defined $self->{$tmp};
- my(@tmp,$val);
- for $val (@{$self->{$tmp}}) {
- push(@tmp,$self->fixpath($val,0));
- }
- $self->{$tmp} = \@tmp;
- }
-
- push @m,'
-
-# Handy lists of source code files:
-XS_FILES = ',$self->wraplist(sort keys %{$self->{XS}}),'
-C_FILES = ',$self->wraplist(@{$self->{C}}),'
-O_FILES = ',$self->wraplist(@{$self->{O_FILES}} ),'
-H_FILES = ',$self->wraplist(@{$self->{H}}),'
-MAN1PODS = ',$self->wraplist(sort keys %{$self->{MAN1PODS}}),'
-MAN3PODS = ',$self->wraplist(sort keys %{$self->{MAN3PODS}}),'
-
-';
-
- for $tmp (qw/
- INST_MAN1DIR INSTALLMAN1DIR MAN1EXT INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
- /) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
-
-push @m,"
-.SUFFIXES :
-.SUFFIXES : \$(OBJ_EXT) .c .cpp .cxx .xs
-
-# Here is the Config.pm that we are using/depend on
-CONFIGDEP = \$(PERL_ARCHLIB)Config.pm, \$(PERL_INC)config.h \$(VERSION_FROM)
-
-# Where to put things:
-INST_LIBDIR = $self->{INST_LIBDIR}
-INST_ARCHLIBDIR = $self->{INST_ARCHLIBDIR}
-
-INST_AUTODIR = $self->{INST_AUTODIR}
-INST_ARCHAUTODIR = $self->{INST_ARCHAUTODIR}
-";
-
- if ($self->has_link_code()) {
- push @m,'
-INST_STATIC = $(INST_ARCHAUTODIR)$(BASEEXT)$(LIB_EXT)
-INST_DYNAMIC = $(INST_ARCHAUTODIR)$(DLBASE).$(DLEXT)
-INST_BOOT = $(INST_ARCHAUTODIR)$(BASEEXT).bs
-';
- } else {
- my $shr = $Config{'dbgprefix'} . 'PERLSHR';
- push @m,'
-INST_STATIC =
-INST_DYNAMIC =
-INST_BOOT =
-EXPORT_LIST = $(BASEEXT).opt
-PERL_ARCHIVE = ',($ENV{$shr} ? $ENV{$shr} : "Sys\$Share:$shr.$Config{'dlext'}"),'
-';
- }
-
- $self->{TO_INST_PM} = [ sort keys %{$self->{PM}} ];
- $self->{PM_TO_BLIB} = [ %{$self->{PM}} ];
- push @m,'
-TO_INST_PM = ',$self->wraplist(@{$self->{TO_INST_PM}}),'
-
-PM_TO_BLIB = ',$self->wraplist(@{$self->{PM_TO_BLIB}}),'
-';
-
- join('',@m);
-}
-
-=item cflags (override)
-
-Bypass shell script and produce qualifiers for CC directly (but warn
-user if a shell script for this extension exists). Fold multiple
-/Defines into one, since some C compilers pay attention to only one
-instance of this qualifier on the command line.
-
-=cut
-
-sub cflags {
- my($self,$libperl) = @_;
- my($quals) = $self->{CCFLAGS} || $Config{'ccflags'};
- my($definestr,$undefstr,$flagoptstr) = ('','','');
- my($incstr) = '/Include=($(PERL_INC)';
- my($name,$sys,@m);
-
- ( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
- print STDOUT "Unix shell script ".$Config{"$self->{'BASEEXT'}_cflags"}.
- " required to modify CC command for $self->{'BASEEXT'}\n"
- if ($Config{$name});
-
- if ($quals =~ / -[DIUOg]/) {
- while ($quals =~ / -([Og])(\d*)\b/) {
- my($type,$lvl) = ($1,$2);
- $quals =~ s/ -$type$lvl\b\s*//;
- if ($type eq 'g') { $flagoptstr = '/NoOptimize'; }
- else { $flagoptstr = '/Optimize' . (defined($lvl) ? "=$lvl" : ''); }
- }
- while ($quals =~ / -([DIU])(\S+)/) {
- my($type,$def) = ($1,$2);
- $quals =~ s/ -$type$def\s*//;
- $def =~ s/"/""/g;
- if ($type eq 'D') { $definestr .= qq["$def",]; }
- elsif ($type eq 'I') { $incstr .= ',' . $self->fixpath($def,1); }
- else { $undefstr .= qq["$def",]; }
- }
- }
- if (length $quals and $quals !~ m!/!) {
- warn "MM_VMS: Ignoring unrecognized CCFLAGS elements \"$quals\"\n";
- $quals = '';
- }
- $definestr .= q["PERL_POLLUTE",] if $self->{POLLUTE};
- if (length $definestr) { chop($definestr); $quals .= "/Define=($definestr)"; }
- if (length $undefstr) { chop($undefstr); $quals .= "/Undef=($undefstr)"; }
- # Deal with $self->{DEFINE} here since some C compilers pay attention
- # to only one /Define clause on command line, so we have to
- # conflate the ones from $Config{'ccflags'} and $self->{DEFINE}
- # ($self->{DEFINE} has already been VMSified in constants() above)
- if ($self->{DEFINE}) { $quals .= $self->{DEFINE}; }
- for $type (qw(Def Undef)) {
- my(@terms);
- while ($quals =~ m:/${type}i?n?e?=([^/]+):ig) {
- my $term = $1;
- $term =~ s:^\((.+)\)$:$1:;
- push @terms, $term;
- }
- if ($type eq 'Def') {
- push @terms, qw[ $(DEFINE_VERSION) $(XS_DEFINE_VERSION) ];
- }
- if (@terms) {
- $quals =~ s:/${type}i?n?e?=[^/]+::ig;
- $quals .= "/${type}ine=(" . join(',',@terms) . ')';
- }
- }
-
- $libperl or $libperl = $self->{LIBPERL_A} || "libperl.olb";
-
- # Likewise with $self->{INC} and /Include
- if ($self->{'INC'}) {
- my(@includes) = split(/\s+/,$self->{INC});
- foreach (@includes) {
- s/^-I//;
- $incstr .= ','.$self->fixpath($_,1);
- }
- }
- $quals .= "$incstr)";
-# $quals =~ s/,,/,/g; $quals =~ s/\(,/(/g;
- $self->{CCFLAGS} = $quals;
-
- $self->{OPTIMIZE} ||= $flagoptstr || $Config{'optimize'};
- if ($self->{OPTIMIZE} !~ m!/!) {
- if ($self->{OPTIMIZE} =~ m!-g!) { $self->{OPTIMIZE} = '/Debug/NoOptimize' }
- elsif ($self->{OPTIMIZE} =~ /-O(\d*)/) {
- $self->{OPTIMIZE} = '/Optimize' . (defined($1) ? "=$1" : '');
- }
- else {
- warn "MM_VMS: Can't parse OPTIMIZE \"$self->{OPTIMIZE}\"; using default\n" if length $self->{OPTIMIZE};
- $self->{OPTIMIZE} = '/Optimize';
- }
- }
-
- return $self->{CFLAGS} = qq{
-CCFLAGS = $self->{CCFLAGS}
-OPTIMIZE = $self->{OPTIMIZE}
-PERLTYPE = $self->{PERLTYPE}
-SPLIT =
-LARGE =
-};
-}
-
-=item const_cccmd (override)
-
-Adds directives to point C preprocessor to the right place when
-handling #include E<lt>sys/foo.hE<gt> directives. Also constructs CC
-command line a bit differently than MM_Unix method.
-
-=cut
-
-sub const_cccmd {
- my($self,$libperl) = @_;
- my(@m);
-
- return $self->{CONST_CCCMD} if $self->{CONST_CCCMD};
- return '' unless $self->needs_linking();
- if ($Config{'vms_cc_type'} eq 'gcc') {
- push @m,'
-.FIRST
- ',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" Then Define/NoLog SYS GNU_CC_Include:[VMS]';
- }
- elsif ($Config{'vms_cc_type'} eq 'vaxc') {
- push @m,'
-.FIRST
- ',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("VAXC$Include").eqs."" Then Define/NoLog SYS Sys$Library
- ',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("VAXC$Include").nes."" Then Define/NoLog SYS VAXC$Include';
- }
- else {
- push @m,'
-.FIRST
- ',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").eqs."" Then Define/NoLog SYS ',
- ($Config{'arch'} eq 'VMS_AXP' ? 'Sys$Library' : 'DECC$Library_Include'),'
- ',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").nes."" Then Define/NoLog SYS DECC$System_Include';
- }
-
- push(@m, "\n\nCCCMD = $Config{'cc'} \$(CCFLAGS)\$(OPTIMIZE)\n");
-
- $self->{CONST_CCCMD} = join('',@m);
-}
-
-=item pm_to_blib (override)
-
-DCL I<still> accepts a maximum of 255 characters on a command
-line, so we write the (potentially) long list of file names
-to a temp file, then persuade Perl to read it instead of the
-command line to find args.
-
-=cut
-
-sub pm_to_blib {
- my($self) = @_;
- my($line,$from,$to,@m);
- my($autodir) = $self->catdir('$(INST_LIB)','auto');
- my(@files) = @{$self->{PM_TO_BLIB}};
-
- push @m, q{
-
-# Dummy target to match Unix target name; we use pm_to_blib.ts as
-# timestamp file to avoid repeated invocations under VMS
-pm_to_blib : pm_to_blib.ts
- $(NOECHO) $(NOOP)
-
-# As always, keep under DCL's 255-char limit
-pm_to_blib.ts : $(TO_INST_PM)
- $(NOECHO) $(PERL) -e "print '},shift(@files),q{ },shift(@files),q{'" >.MM_tmp
-};
-
- $line = ''; # avoid uninitialized var warning
- while ($from = shift(@files),$to = shift(@files)) {
- $line .= " $from $to";
- if (length($line) > 128) {
- push(@m,"\t\$(NOECHO) \$(PERL) -e \"print '$line'\" >>.MM_tmp\n");
- $line = '';
- }
- }
- push(@m,"\t\$(NOECHO) \$(PERL) -e \"print '$line'\" >>.MM_tmp\n") if $line;
-
- push(@m,q[ $(PERL) "-I$(PERL_LIB)" "-MExtUtils::Install" -e "pm_to_blib({split(' ',<STDIN>)},'].$autodir.q[','$(PM_FILTER)')" <.MM_tmp]);
- push(@m,qq[
- \$(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;
- \$(NOECHO) \$(TOUCH) pm_to_blib.ts
-]);
-
- join('',@m);
-}
-
-=item tool_autosplit (override)
-
-Use VMS-style quoting on command line.
-
-=cut
-
-sub tool_autosplit{
- my($self, %attribs) = @_;
- my($asl) = "";
- $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
- q{
-# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
-AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e "use AutoSplit;}.$asl.q{ AutoSplit::autosplit($ARGV[0], $ARGV[1], 0, 1, 1) ;"
-};
-}
-
-=item tool_sxubpp (override)
-
-Use VMS-style quoting on xsubpp command line.
-
-=cut
-
-sub tool_xsubpp {
- my($self) = @_;
- return '' unless $self->needs_linking;
- my($xsdir) = $self->catdir($self->{PERL_LIB},'ExtUtils');
- # drop back to old location if xsubpp is not in new location yet
- $xsdir = $self->catdir($self->{PERL_SRC},'ext') unless (-f $self->catfile($xsdir,'xsubpp'));
- my(@tmdeps) = '$(XSUBPPDIR)typemap';
- if( $self->{TYPEMAPS} ){
- my $typemap;
- foreach $typemap (@{$self->{TYPEMAPS}}){
- if( ! -f $typemap ){
- warn "Typemap $typemap not found.\n";
- }
- else{
- push(@tmdeps, $self->fixpath($typemap,0));
- }
- }
- }
- push(@tmdeps, "typemap") if -f "typemap";
- my(@tmargs) = map("-typemap $_", @tmdeps);
- if( exists $self->{XSOPT} ){
- unshift( @tmargs, $self->{XSOPT} );
- }
-
- if ($Config{'ldflags'} &&
- $Config{'ldflags'} =~ m!/Debug!i &&
- (!exists($self->{XSOPT}) || $self->{XSOPT} !~ /linenumbers/)) {
- unshift(@tmargs,'-nolinenumbers');
- }
- my $xsubpp_version = $self->xsubpp_version($self->catfile($xsdir,'xsubpp'));
-
- # What are the correct thresholds for version 1 && 2 Paul?
- if ( $xsubpp_version > 1.923 ){
- $self->{XSPROTOARG} = '' unless defined $self->{XSPROTOARG};
- } else {
- if (defined $self->{XSPROTOARG} && $self->{XSPROTOARG} =~ /\-prototypes/) {
- print STDOUT qq{Warning: This extension wants to pass the switch "-prototypes" to xsubpp.
- Your version of xsubpp is $xsubpp_version and cannot handle this.
- Please upgrade to a more recent version of xsubpp.
-};
- } else {
- $self->{XSPROTOARG} = "";
- }
- }
-
- "
-XSUBPPDIR = $xsdir
-XSUBPP = \$(PERL) \"-I\$(PERL_ARCHLIB)\" \"-I\$(PERL_LIB)\" \$(XSUBPPDIR)xsubpp
-XSPROTOARG = $self->{XSPROTOARG}
-XSUBPPDEPS = @tmdeps
-XSUBPPARGS = @tmargs
-";
-}
-
-=item xsubpp_version (override)
-
-Test xsubpp exit status according to VMS rules ($sts & 1 ==E<gt> good)
-rather than Unix rules ($sts == 0 ==E<gt> good).
-
-=cut
-
-sub xsubpp_version
-{
- my($self,$xsubpp) = @_;
- my ($version) ;
- return '' unless $self->needs_linking;
-
- # try to figure out the version number of the xsubpp on the system
-
- # first try the -v flag, introduced in 1.921 & 2.000a2
-
- my $command = "$self->{PERL} \"-I$self->{PERL_LIB}\" $xsubpp -v";
- print "Running: $command\n" if $Verbose;
- $version = `$command` ;
- if ($?) {
- use vmsish 'status';
- warn "Running '$command' exits with status $?";
- }
- chop $version ;
-
- return $1 if $version =~ /^xsubpp version (.*)/ ;
-
- # nope, then try something else
-
- my $counter = '000';
- my ($file) = 'temp' ;
- $counter++ while -e "$file$counter"; # don't overwrite anything
- $file .= $counter;
-
- local(*F);
- open(F, ">$file") or die "Cannot open file '$file': $!\n" ;
- print F <<EOM ;
-MODULE = fred PACKAGE = fred
-
-int
-fred(a)
- int a;
-EOM
-
- close F ;
-
- $command = "$self->{PERL} $xsubpp $file";
- print "Running: $command\n" if $Verbose;
- my $text = `$command` ;
- if ($?) {
- use vmsish 'status';
- warn "Running '$command' exits with status $?";
- }
- unlink $file ;
-
- # gets 1.2 -> 1.92 and 2.000a1
- return $1 if $text =~ /automatically by xsubpp version ([\S]+)\s*/ ;
-
- # it is either 1.0 or 1.1
- return 1.1 if $text =~ /^Warning: ignored semicolon/ ;
-
- # none of the above, so 1.0
- return "1.0" ;
-}
-
-=item tools_other (override)
-
-Adds a few MM[SK] macros, and shortens some the installatin commands,
-in order to stay under DCL's 255-character limit. Also changes
-EQUALIZE_TIMESTAMP to set revision date of target file to one second
-later than source file, since MMK interprets precisely equal revision
-dates for a source and target file as a sign that the target needs
-to be updated.
-
-=cut
-
-sub tools_other {
- my($self) = @_;
- qq!
-# Assumes \$(MMS) invokes MMS or MMK
-# (It is assumed in some cases later that the default makefile name
-# (Descrip.MMS for MM[SK]) is used.)
-USEMAKEFILE = /Descrip=
-USEMACROS = /Macro=(
-MACROEND = )
-MAKEFILE = Descrip.MMS
-SHELL = Posix
-TOUCH = $self->{TOUCH}
-CHMOD = $self->{CHMOD}
-CP = $self->{CP}
-MV = $self->{MV}
-RM_F = $self->{RM_F}
-RM_RF = $self->{RM_RF}
-SAY = Write Sys\$Output
-UMASK_NULL = $self->{UMASK_NULL}
-NOOP = $self->{NOOP}
-NOECHO = $self->{NOECHO}
-MKPATH = Create/Directory
-EQUALIZE_TIMESTAMP = \$(PERL) -we "open F,qq{>\$ARGV[1]};close F;utime(0,(stat(\$ARGV[0]))[9]+1,\$ARGV[1])"
-!. ($self->{PARENT} ? '' :
-qq!WARN_IF_OLD_PACKLIST = \$(PERL) -e "if (-f \$ARGV[0]){print qq[WARNING: Old package found (\$ARGV[0]); please check for collisions\\n]}"
-MOD_INSTALL = \$(PERL) "-I\$(PERL_LIB)" "-MExtUtils::Install" -e "install({split(' ',<STDIN>)},1);"
-DOC_INSTALL = \$(PERL) -e "\@ARGV=split(/\\|/,<STDIN>);print '=head2 ',scalar(localtime),': C<',shift,qq[>\\n\\n=over 4\\n\\n];while(\$key=shift && \$val=shift){print qq[=item *\\n\\nC<\$key: \$val>\\n\\n];}print qq[=back\\n\\n]"
-UNINSTALL = \$(PERL) "-I\$(PERL_LIB)" "-MExtUtils::Install" -e "uninstall(\$ARGV[0],1,1);"
-!);
-}
-
-=item dist (override)
-
-Provide VMSish defaults for some values, then hand off to
-default MM_Unix method.
-
-=cut
-
-sub dist {
- my($self, %attribs) = @_;
- $attribs{VERSION} ||= $self->{VERSION_SYM};
- $attribs{NAME} ||= $self->{DISTNAME};
- $attribs{ZIPFLAGS} ||= '-Vu';
- $attribs{COMPRESS} ||= 'gzip';
- $attribs{SUFFIX} ||= '-gz';
- $attribs{SHAR} ||= 'vms_share';
- $attribs{DIST_DEFAULT} ||= 'zipdist';
-
- # Sanitize these for use in $(DISTVNAME) filespec
- $attribs{VERSION} =~ s/[^\w\$]/_/g;
- $attribs{NAME} =~ s/[^\w\$]/-/g;
-
- return ExtUtils::MM_Unix::dist($self,%attribs);
-}
-
-=item c_o (override)
-
-Use VMS syntax on command line. In particular, $(DEFINE) and
-$(PERL_INC) have been pulled into $(CCCMD). Also use MM[SK] macros.
-
-=cut
-
-sub c_o {
- my($self) = @_;
- return '' unless $self->needs_linking();
- '
-.c$(OBJ_EXT) :
- $(CCCMD) $(CCCDLFLAGS) $(MMS$TARGET_NAME).c
-
-.cpp$(OBJ_EXT) :
- $(CCCMD) $(CCCDLFLAGS) $(MMS$TARGET_NAME).cpp
-
-.cxx$(OBJ_EXT) :
- $(CCCMD) $(CCCDLFLAGS) $(MMS$TARGET_NAME).cxx
-
-';
-}
-
-=item xs_c (override)
-
-Use MM[SK] macros.
-
-=cut
-
-sub xs_c {
- my($self) = @_;
- return '' unless $self->needs_linking();
- '
-.xs.c :
- $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $(MMS$TARGET_NAME).xs >$(MMS$TARGET)
-';
-}
-
-=item xs_o (override)
-
-Use MM[SK] macros, and VMS command line for C compiler.
-
-=cut
-
-sub xs_o { # many makes are too dumb to use xs_c then c_o
- my($self) = @_;
- return '' unless $self->needs_linking();
- '
-.xs$(OBJ_EXT) :
- $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $(MMS$TARGET_NAME).xs >$(MMS$TARGET_NAME).c
- $(CCCMD) $(CCCDLFLAGS) $(MMS$TARGET_NAME).c
-';
-}
-
-=item top_targets (override)
-
-Use VMS quoting on command line for Version_check.
-
-=cut
-
-sub top_targets {
- my($self) = shift;
- my(@m);
- push @m, '
-all :: pure_all manifypods
- $(NOECHO) $(NOOP)
-
-pure_all :: config pm_to_blib subdirs linkext
- $(NOECHO) $(NOOP)
-
-subdirs :: $(MYEXTLIB)
- $(NOECHO) $(NOOP)
-
-config :: $(MAKEFILE) $(INST_LIBDIR).exists
- $(NOECHO) $(NOOP)
-
-config :: $(INST_ARCHAUTODIR).exists
- $(NOECHO) $(NOOP)
-
-config :: $(INST_AUTODIR).exists
- $(NOECHO) $(NOOP)
-';
-
- push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
- if (%{$self->{MAN1PODS}}) {
- push @m, q[
-config :: $(INST_MAN1DIR).exists
- $(NOECHO) $(NOOP)
-];
- push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
- }
- if (%{$self->{MAN3PODS}}) {
- push @m, q[
-config :: $(INST_MAN3DIR).exists
- $(NOECHO) $(NOOP)
-];
- push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
- }
-
- push @m, '
-$(O_FILES) : $(H_FILES)
-' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
-
- push @m, q{
-help :
- perldoc ExtUtils::MakeMaker
-};
-
- push @m, q{
-Version_check :
- $(NOECHO) $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -
- "-MExtUtils::MakeMaker=Version_check" -e "&Version_check('$(MM_VERSION)')"
-};
-
- join('',@m);
-}
-
-=item dlsyms (override)
-
-Create VMS linker options files specifying universal symbols for this
-extension's shareable image, and listing other shareable images or
-libraries to which it should be linked.
-
-=cut
-
-sub dlsyms {
- my($self,%attribs) = @_;
-
- return '' unless $self->needs_linking();
-
- my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
- my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
- my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
- my(@m);
-
- unless ($self->{SKIPHASH}{'dynamic'}) {
- push(@m,'
-dynamic :: $(INST_ARCHAUTODIR)$(BASEEXT).opt
- $(NOECHO) $(NOOP)
-');
- }
-
- push(@m,'
-static :: $(INST_ARCHAUTODIR)$(BASEEXT).opt
- $(NOECHO) $(NOOP)
-') unless $self->{SKIPHASH}{'static'};
-
- push @m,'
-$(INST_ARCHAUTODIR)$(BASEEXT).opt : $(BASEEXT).opt
- $(CP) $(MMS$SOURCE) $(MMS$TARGET)
-
-$(BASEEXT).opt : Makefile.PL
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e "use ExtUtils::Mksymlists;" -
- ',qq[-e "Mksymlists('NAME' => '$self->{NAME}', 'DL_FUNCS' => ],
- neatvalue($funcs),q[, 'DL_VARS' => ],neatvalue($vars),
- q[, 'FUNCLIST' => ],neatvalue($funclist),qq[)"\n];
-
- push @m, ' $(PERL) -e "print ""$(INST_STATIC)/Include=';
- if ($self->{OBJECT} =~ /\bBASEEXT\b/ or
- $self->{OBJECT} =~ /\b$self->{BASEEXT}\b/i) {
- push @m, ($Config{d_vms_case_sensitive_symbols}
- ? uc($self->{BASEEXT}) :'$(BASEEXT)');
- }
- else { # We don't have a "main" object file, so pull 'em all in
- # Upcase module names if linker is being case-sensitive
- my($upcase) = $Config{d_vms_case_sensitive_symbols};
- my(@omods) = map { s/\.[^.]*$//; # Trim off file type
- s[\$\(\w+_EXT\)][]; # even as a macro
- s/.*[:>\/\]]//; # Trim off dir spec
- $upcase ? uc($_) : $_;
- } split ' ', $self->eliminate_macros($self->{OBJECT});
- my($tmp,@lines,$elt) = '';
- $tmp = shift @omods;
- foreach $elt (@omods) {
- $tmp .= ",$elt";
- if (length($tmp) > 80) { push @lines, $tmp; $tmp = ''; }
- }
- push @lines, $tmp;
- push @m, '(', join( qq[, -\\n\\t"";" >>\$(MMS\$TARGET)\n\t\$(PERL) -e "print ""], @lines),')';
- }
- push @m, '\n$(INST_STATIC)/Library\n"";" >>$(MMS$TARGET)',"\n";
-
- if (length $self->{LDLOADLIBS}) {
- my($lib); my($line) = '';
- foreach $lib (split ' ', $self->{LDLOADLIBS}) {
- $lib =~ s%\$%\\\$%g; # Escape '$' in VMS filespecs
- if (length($line) + length($lib) > 160) {
- push @m, "\t\$(PERL) -e \"print qq{$line}\" >>\$(MMS\$TARGET)\n";
- $line = $lib . '\n';
- }
- else { $line .= $lib . '\n'; }
- }
- push @m, "\t\$(PERL) -e \"print qq{$line}\" >>\$(MMS\$TARGET)\n" if $line;
- }
-
- join('',@m);
-
-}
-
-=item dynamic_lib (override)
-
-Use VMS Link command.
-
-=cut
-
-sub dynamic_lib {
- my($self, %attribs) = @_;
- return '' unless $self->needs_linking(); #might be because of a subdir
-
- return '' unless $self->has_link_code();
-
- my($otherldflags) = $attribs{OTHERLDFLAGS} || "";
- my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
- my $shr = $Config{'dbgprefix'} . 'PerlShr';
- my(@m);
- push @m,"
-
-OTHERLDFLAGS = $otherldflags
-INST_DYNAMIC_DEP = $inst_dynamic_dep
-
-";
- push @m, '
-$(INST_DYNAMIC) : $(INST_STATIC) $(PERL_INC)perlshr_attr.opt $(INST_ARCHAUTODIR).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
- $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
- If F$TrnLNm("',$shr,'").eqs."" Then Define/NoLog/User ',"$shr Sys\$Share:$shr.$Config{'dlext'}",'
- Link $(LDFLAGS) /Shareable=$(MMS$TARGET)$(OTHERLDFLAGS) $(BASEEXT).opt/Option,$(PERL_INC)perlshr_attr.opt/Option
-';
-
- push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
- join('',@m);
-}
-
-=item dynamic_bs (override)
-
-Use VMS-style quoting on Mkbootstrap command line.
-
-=cut
-
-sub dynamic_bs {
- my($self, %attribs) = @_;
- return '
-BOOTSTRAP =
-' unless $self->has_link_code();
- '
-BOOTSTRAP = '."$self->{BASEEXT}.bs".'
-
-# As MakeMaker mkbootstrap might not write a file (if none is required)
-# we use touch to prevent make continually trying to remake it.
-# The DynaLoader only reads a non-empty file.
-$(BOOTSTRAP) : $(MAKEFILE) '."$self->{BOOTDEP}".' $(INST_ARCHAUTODIR).exists
- $(NOECHO) $(SAY) "Running mkbootstrap for $(NAME) ($(BSLOADLIBS))"
- $(NOECHO) $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -
- -e "use ExtUtils::Mkbootstrap; Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
- $(NOECHO) $(TOUCH) $(MMS$TARGET)
-
-$(INST_BOOT) : $(BOOTSTRAP) $(INST_ARCHAUTODIR).exists
- $(NOECHO) $(RM_RF) $(INST_BOOT)
- - $(CP) $(BOOTSTRAP) $(INST_BOOT)
-';
-}
-
-=item static_lib (override)
-
-Use VMS commands to manipulate object library.
-
-=cut
-
-sub static_lib {
- my($self) = @_;
- return '' unless $self->needs_linking();
-
- return '
-$(INST_STATIC) :
- $(NOECHO) $(NOOP)
-' unless ($self->{OBJECT} or @{$self->{C} || []} or $self->{MYEXTLIB});
-
- my(@m,$lib);
- push @m,'
-# Rely on suffix rule for update action
-$(OBJECT) : $(INST_ARCHAUTODIR).exists
-
-$(INST_STATIC) : $(OBJECT) $(MYEXTLIB)
-';
- # If this extension has it's own library (eg SDBM_File)
- # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
- push(@m, "\t",'$(CP) $(MYEXTLIB) $(MMS$TARGET)',"\n") if $self->{MYEXTLIB};
-
- push(@m,"\t",'If F$Search("$(MMS$TARGET)").eqs."" Then Library/Object/Create $(MMS$TARGET)',"\n");
-
- # if there was a library to copy, then we can't use MMS$SOURCE_LIST,
- # 'cause it's a library and you can't stick them in other libraries.
- # In that case, we use $OBJECT instead and hope for the best
- if ($self->{MYEXTLIB}) {
- push(@m,"\t",'Library/Object/Replace $(MMS$TARGET) $(OBJECT)',"\n");
- } else {
- push(@m,"\t",'Library/Object/Replace $(MMS$TARGET) $(MMS$SOURCE_LIST)',"\n");
- }
-
- push @m, "\t\$(NOECHO) \$(PERL) -e 1 >\$(INST_ARCHAUTODIR)extralibs.ld\n";
- foreach $lib (split ' ', $self->{EXTRALIBS}) {
- push(@m,"\t",'$(NOECHO) $(PERL) -e "print qq{',$lib,'\n}" >>$(INST_ARCHAUTODIR)extralibs.ld',"\n");
- }
- push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
- join('',@m);
-}
-
-
-=item manifypods (override)
-
-Use VMS-style quoting on command line, and VMS logical name
-to specify fallback location at build time if we can't find pod2man.
-
-=cut
-
-
-sub manifypods {
- my($self, %attribs) = @_;
- return "\nmanifypods :\n\t\$(NOECHO) \$(NOOP)\n" unless %{$self->{MAN3PODS}} or %{$self->{MAN1PODS}};
- my($dist);
- my($pod2man_exe);
- if (defined $self->{PERL_SRC}) {
- $pod2man_exe = $self->catfile($self->{PERL_SRC},'pod','pod2man');
- } else {
- $pod2man_exe = $self->catfile($Config{scriptdirexp},'pod2man');
- }
- if (not ($pod2man_exe = $self->perl_script($pod2man_exe))) {
- # No pod2man but some MAN3PODS to be installed
- print <<END;
-
-Warning: I could not locate your pod2man program. As a last choice,
- I will look for the file to which the logical name POD2MAN
- points when MMK is invoked.
-
-END
- $pod2man_exe = "pod2man";
- }
- my(@m);
- push @m,
-qq[POD2MAN_EXE = $pod2man_exe\n],
-q[POD2MAN = $(PERL) -we "%m=@ARGV;for (keys %m){" -
--e "system(""MCR $^X $(POD2MAN_EXE) $_ >$m{$_}"");}"
-];
- push @m, "\nmanifypods : \$(MAN1PODS) \$(MAN3PODS)\n";
- if (%{$self->{MAN1PODS}} || %{$self->{MAN3PODS}}) {
- my($pod);
- foreach $pod (sort keys %{$self->{MAN1PODS}}) {
- push @m, qq[\t\@- If F\$Search("\$(POD2MAN_EXE)").nes."" Then \$(POD2MAN) ];
- push @m, "$pod $self->{MAN1PODS}{$pod}\n";
- }
- foreach $pod (sort keys %{$self->{MAN3PODS}}) {
- push @m, qq[\t\@- If F\$Search("\$(POD2MAN_EXE)").nes."" Then \$(POD2MAN) ];
- push @m, "$pod $self->{MAN3PODS}{$pod}\n";
- }
- }
- join('', @m);
-}
-
-=item processPL (override)
-
-Use VMS-style quoting on command line.
-
-=cut
-
-sub processPL {
- my($self) = @_;
- return "" unless $self->{PL_FILES};
- my(@m, $plfile);
- foreach $plfile (sort keys %{$self->{PL_FILES}}) {
- my $list = ref($self->{PL_FILES}->{$plfile})
- ? $self->{PL_FILES}->{$plfile}
- : [$self->{PL_FILES}->{$plfile}];
- foreach $target (@$list) {
- my $vmsplfile = vmsify($plfile);
- my $vmsfile = vmsify($target);
- push @m, "
-all :: $vmsfile
- \$(NOECHO) \$(NOOP)
-
-$vmsfile :: $vmsplfile
-",' $(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" '," $vmsplfile $vmsfile
-";
- }
- }
- join "", @m;
-}
-
-=item installbin (override)
-
-Stay under DCL's 255 character command line limit once again by
-splitting potentially long list of files across multiple lines
-in C<realclean> target.
-
-=cut
-
-sub installbin {
- my($self) = @_;
- return '' unless $self->{EXE_FILES} && ref $self->{EXE_FILES} eq "ARRAY";
- return '' unless @{$self->{EXE_FILES}};
- my(@m, $from, $to, %fromto, @to, $line);
- my(@exefiles) = map { vmsify($_) } @{$self->{EXE_FILES}};
- for $from (@exefiles) {
- my($path) = '$(INST_SCRIPT)' . basename($from);
- local($_) = $path; # backward compatibility
- $to = $self->libscan($path);
- print "libscan($from) => '$to'\n" if ($Verbose >=2);
- $fromto{$from} = vmsify($to);
- }
- @to = values %fromto;
- push @m, "
-EXE_FILES = @exefiles
-
-all :: @to
- \$(NOECHO) \$(NOOP)
-
-realclean ::
-";
- $line = ''; #avoid unitialized var warning
- foreach $to (@to) {
- if (length($line) + length($to) > 80) {
- push @m, "\t\$(RM_F) $line\n";
- $line = $to;
- }
- else { $line .= " $to"; }
- }
- push @m, "\t\$(RM_F) $line\n\n" if $line;
-
- while (($from,$to) = each %fromto) {
- last unless defined $from;
- my $todir;
- if ($to =~ m#[/>:\]]#) { $todir = dirname($to); }
- else { ($todir = $to) =~ s/[^\)]+$//; }
- $todir = $self->fixpath($todir,1);
- push @m, "
-$to : $from \$(MAKEFILE) ${todir}.exists
- \$(CP) $from $to
-
-", $self->dir_target($todir);
- }
- join "", @m;
-}
-
-=item subdir_x (override)
-
-Use VMS commands to change default directory.
-
-=cut
-
-sub subdir_x {
- my($self, $subdir) = @_;
- my(@m,$key);
- $subdir = $self->fixpath($subdir,1);
- push @m, '
-
-subdirs ::
- olddef = F$Environment("Default")
- Set Default ',$subdir,'
- - $(MMS)$(MMSQUALIFIERS) all $(USEMACROS)$(PASTHRU)$(MACROEND)
- Set Default \'olddef\'
-';
- join('',@m);
-}
-
-=item clean (override)
-
-Split potentially long list of files across multiple commands (in
-order to stay under the magic command line limit). Also use MM[SK]
-commands for handling subdirectories.
-
-=cut
-
-sub clean {
- my($self, %attribs) = @_;
- my(@m,$dir);
- push @m, '
-# Delete temporary files but do not touch installed files. We don\'t delete
-# the Descrip.MMS here so that a later make realclean still has it to use.
-clean ::
-';
- foreach $dir (@{$self->{DIR}}) { # clean subdirectories first
- my($vmsdir) = $self->fixpath($dir,1);
- push( @m, ' If F$Search("'.$vmsdir.'$(MAKEFILE)").nes."" Then \\',"\n\t",
- '$(PERL) -e "chdir ',"'$vmsdir'",'; print `$(MMS)$(MMSQUALIFIERS) clean`;"',"\n");
- }
- push @m, ' $(RM_F) *.Map *.Dmp *.Lis *.cpp *.$(DLEXT) *$(OBJ_EXT) *$(LIB_EXT) *.Opt $(BOOTSTRAP) $(BASEEXT).bso .MM_Tmp
-';
-
- my(@otherfiles) = values %{$self->{XS}}; # .c files from *.xs files
- # Unlink realclean, $attribs{FILES} is a string here; it may contain
- # a list or a macro that expands to a list.
- if ($attribs{FILES}) {
- my($word,$key,@filist);
- if (ref $attribs{FILES} eq 'ARRAY') { @filist = @{$attribs{FILES}}; }
- else { @filist = split /\s+/, $attribs{FILES}; }
- foreach $word (@filist) {
- if (($key) = $word =~ m#^\$\((.*)\)$# and ref $self->{$key} eq 'ARRAY') {
- push(@otherfiles, @{$self->{$key}});
- }
- else { push(@otherfiles, $word); }
- }
- }
- push(@otherfiles, qw[ blib $(MAKE_APERL_FILE) extralibs.ld perlmain.c pm_to_blib.ts ]);
- push(@otherfiles,$self->catfile('$(INST_ARCHAUTODIR)','extralibs.all'));
- my($file,$line);
- $line = ''; #avoid unitialized var warning
- # Occasionally files are repeated several times from different sources
- { my(%of) = map { ($_,1) } @otherfiles; @otherfiles = keys %of; }
-
- foreach $file (@otherfiles) {
- $file = $self->fixpath($file);
- if (length($line) + length($file) > 80) {
- push @m, "\t\$(RM_RF) $line\n";
- $line = "$file";
- }
- else { $line .= " $file"; }
- }
- push @m, "\t\$(RM_RF) $line\n" if $line;
- push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
- join('', @m);
-}
-
-=item realclean (override)
-
-Guess what we're working around? Also, use MM[SK] for subdirectories.
-
-=cut
-
-sub realclean {
- my($self, %attribs) = @_;
- my(@m);
- push(@m,'
-# Delete temporary files (via clean) and also delete installed files
-realclean :: clean
-');
- foreach(@{$self->{DIR}}){
- my($vmsdir) = $self->fixpath($_,1);
- push(@m, ' If F$Search("'."$vmsdir".'$(MAKEFILE)").nes."" Then \\',"\n\t",
- '$(PERL) -e "chdir ',"'$vmsdir'",'; print `$(MMS)$(MMSQUALIFIERS) realclean`;"',"\n");
- }
- push @m,' $(RM_RF) $(INST_AUTODIR) $(INST_ARCHAUTODIR)
-';
- # We can't expand several of the MMS macros here, since they don't have
- # corresponding %$self keys (i.e. they're defined in Descrip.MMS as a
- # combination of macros). In order to stay below DCL's 255 char limit,
- # we put only 2 on a line.
- my($file,$line,$fcnt);
- my(@files) = qw{ $(MAKEFILE) $(MAKEFILE)_old };
- if ($self->has_link_code) {
- push(@files,qw{ $(INST_DYNAMIC) $(INST_STATIC) $(INST_BOOT) $(OBJECT) });
- }
- push(@files, values %{$self->{PM}});
- $line = ''; #avoid unitialized var warning
- # Occasionally files are repeated several times from different sources
- { my(%f) = map { ($_,1) } @files; @files = keys %f; }
- foreach $file (@files) {
- $file = $self->fixpath($file);
- if (length($line) + length($file) > 80 || ++$fcnt >= 2) {
- push @m, "\t\$(RM_F) $line\n";
- $line = "$file";
- $fcnt = 0;
- }
- else { $line .= " $file"; }
- }
- push @m, "\t\$(RM_F) $line\n" if $line;
- if ($attribs{FILES}) {
- my($word,$key,@filist,@allfiles);
- if (ref $attribs{FILES} eq 'ARRAY') { @filist = @{$attribs{FILES}}; }
- else { @filist = split /\s+/, $attribs{FILES}; }
- foreach $word (@filist) {
- if (($key) = $word =~ m#^\$\((.*)\)$# and ref $self->{$key} eq 'ARRAY') {
- push(@allfiles, @{$self->{$key}});
- }
- else { push(@allfiles, $word); }
- }
- $line = '';
- # Occasionally files are repeated several times from different sources
- { my(%af) = map { ($_,1) } @allfiles; @allfiles = keys %af; }
- foreach $file (@allfiles) {
- $file = $self->fixpath($file);
- if (length($line) + length($file) > 80) {
- push @m, "\t\$(RM_RF) $line\n";
- $line = "$file";
- }
- else { $line .= " $file"; }
- }
- push @m, "\t\$(RM_RF) $line\n" if $line;
- }
- push(@m, " $attribs{POSTOP}\n") if $attribs{POSTOP};
- join('', @m);
-}
-
-=item dist_basics (override)
-
-Use VMS-style quoting on command line.
-
-=cut
-
-sub dist_basics {
- my($self) = @_;
-'
-distclean :: realclean distcheck
- $(NOECHO) $(NOOP)
-
-distcheck :
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e "use ExtUtils::Manifest \'&fullcheck\'; fullcheck()"
-
-skipcheck :
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e "use ExtUtils::Manifest \'&skipcheck\'; skipcheck()"
-
-manifest :
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e "use ExtUtils::Manifest \'&mkmanifest\'; mkmanifest()"
-';
-}
-
-=item dist_core (override)
-
-Syntax for invoking F<VMS_Share> differs from that for Unix F<shar>,
-so C<shdist> target actions are VMS-specific.
-
-=cut
-
-sub dist_core {
- my($self) = @_;
-q[
-dist : $(DIST_DEFAULT)
- $(NOECHO) $(PERL) -le "print 'Warning: $m older than $vf' if -e ($vf = '$(VERSION_FROM)') && -M $vf < -M ($m = '$(MAKEFILE)')"
-
-zipdist : $(DISTVNAME).zip
- $(NOECHO) $(NOOP)
-
-tardist : $(DISTVNAME).tar$(SUFFIX)
- $(NOECHO) $(NOOP)
-
-$(DISTVNAME).zip : distdir
- $(PREOP)
- $(ZIP) "$(ZIPFLAGS)" $(MMS$TARGET) [.$(DISTVNAME)...]*.*;
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-
-$(DISTVNAME).tar$(SUFFIX) : distdir
- $(PREOP)
- $(TO_UNIX)
- $(TAR) "$(TARFLAGS)" $(DISTVNAME).tar [.$(DISTVNAME)...]
- $(RM_RF) $(DISTVNAME)
- $(COMPRESS) $(DISTVNAME).tar
- $(POSTOP)
-
-shdist : distdir
- $(PREOP)
- $(SHAR) [.$(DISTVNAME...]*.*; $(DISTVNAME).share
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-];
-}
-
-=item dist_dir (override)
-
-Use VMS-style quoting on command line.
-
-=cut
-
-sub dist_dir {
- my($self) = @_;
-q{
-distdir :
- $(RM_RF) $(DISTVNAME)
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e "use ExtUtils::Manifest '/mani/';" \\
- -e "manicopy(maniread(),'$(DISTVNAME)','$(DIST_CP)');"
-};
-}
-
-=item dist_test (override)
-
-Use VMS commands to change default directory, and use VMS-style
-quoting on command line.
-
-=cut
-
-sub dist_test {
- my($self) = @_;
-q{
-disttest : distdir
- startdir = F$Environment("Default")
- Set Default [.$(DISTVNAME)]
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL
- $(MMS)$(MMSQUALIFIERS)
- $(MMS)$(MMSQUALIFIERS) test
- Set Default 'startdir'
-};
-}
-
-# --- Test and Installation Sections ---
-
-=item install (override)
-
-Work around DCL's 255 character limit several times,and use
-VMS-style command line quoting in a few cases.
-
-=cut
-
-sub install {
- my($self, %attribs) = @_;
- my(@m,@docfiles);
-
- if ($self->{EXE_FILES}) {
- my($line,$file) = ('','');
- foreach $file (@{$self->{EXE_FILES}}) {
- $line .= "$file ";
- if (length($line) > 128) {
- push(@docfiles,qq[\t\$(PERL) -e "print '$line'" >>.MM_tmp\n]);
- $line = '';
- }
- }
- push(@docfiles,qq[\t\$(PERL) -e "print '$line'" >>.MM_tmp\n]) if $line;
- }
-
- push @m, q[
-install :: all pure_install doc_install
- $(NOECHO) $(NOOP)
-
-install_perl :: all pure_perl_install doc_perl_install
- $(NOECHO) $(NOOP)
-
-install_site :: all pure_site_install doc_site_install
- $(NOECHO) $(NOOP)
-
-install_ :: install_site
- $(NOECHO) $(SAY) "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site"
-
-pure_install :: pure_$(INSTALLDIRS)_install
- $(NOECHO) $(NOOP)
-
-doc_install :: doc_$(INSTALLDIRS)_install
- $(NOECHO) $(SAY) "Appending installation info to $(INSTALLARCHLIB)perllocal.pod"
-
-pure__install : pure_site_install
- $(NOECHO) $(SAY) "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site"
-
-doc__install : doc_site_install
- $(NOECHO) $(SAY) "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site"
-
-# This hack brought to you by DCL's 255-character command line limit
-pure_perl_install ::
- $(NOECHO) $(PERL) -e "print 'read ].$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[ '" >.MM_tmp
- $(NOECHO) $(PERL) -e "print 'write ].$self->catfile('$(INSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q[ '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_LIB) $(INSTALLPRIVLIB) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_ARCHLIB) $(INSTALLARCHLIB) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_BIN) $(INSTALLBIN) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_SCRIPT) $(INSTALLSCRIPT) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_MAN1DIR) $(INSTALLMAN1DIR) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_MAN3DIR) $(INSTALLMAN3DIR) '" >>.MM_tmp
- $(MOD_INSTALL) <.MM_tmp
- $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;
- $(NOECHO) $(WARN_IF_OLD_PACKLIST) ].$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q[
-
-# Likewise
-pure_site_install ::
- $(NOECHO) $(PERL) -e "print 'read ].$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q[ '" >.MM_tmp
- $(NOECHO) $(PERL) -e "print 'write ].$self->catfile('$(INSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q[ '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_LIB) $(INSTALLSITELIB) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_ARCHLIB) $(INSTALLSITEARCH) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_BIN) $(INSTALLBIN) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_SCRIPT) $(INSTALLSCRIPT) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_MAN1DIR) $(INSTALLMAN1DIR) '" >>.MM_tmp
- $(NOECHO) $(PERL) -e "print '$(INST_MAN3DIR) $(INSTALLMAN3DIR) '" >>.MM_tmp
- $(MOD_INSTALL) <.MM_tmp
- $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;
- $(NOECHO) $(WARN_IF_OLD_PACKLIST) ].$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[
-
-# Ditto
-doc_perl_install ::
- $(NOECHO) $(PERL) -e "print 'Module $(NAME)|installed into|$(INSTALLPRIVLIB)|'" >.MM_tmp
- $(NOECHO) $(PERL) -e "print 'LINKTYPE|$(LINKTYPE)|VERSION|$(VERSION)|EXE_FILES|$(EXE_FILES)|'" >>.MM_tmp
-],@docfiles,
-q% $(NOECHO) $(PERL) -e "print q[@ARGV=split(/\\|/,<STDIN>);]" >.MM2_tmp
- $(NOECHO) $(PERL) -e "print q[print '=head2 ',scalar(localtime),': C<',shift,qq[>\\n\\n=over 4\\n\\n];]" >>.MM2_tmp
- $(NOECHO) $(PERL) -e "print q[while(($key=shift) && ($val=shift)) ]" >>.MM2_tmp
- $(NOECHO) $(PERL) -e "print q[{print qq[=item *\\n\\nC<$key: $val>\\n\\n];}print qq[=back\\n\\n];]" >>.MM2_tmp
- $(NOECHO) $(PERL) .MM2_tmp <.MM_tmp >>%.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
- $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;,.MM2_tmp;
-
-# And again
-doc_site_install ::
- $(NOECHO) $(PERL) -e "print 'Module $(NAME)|installed into|$(INSTALLSITELIB)|'" >.MM_tmp
- $(NOECHO) $(PERL) -e "print 'LINKTYPE|$(LINKTYPE)|VERSION|$(VERSION)|EXE_FILES|$(EXE_FILES)|'" >>.MM_tmp
-],@docfiles,
-q% $(NOECHO) $(PERL) -e "print q[@ARGV=split(/\\|/,<STDIN>);]" >.MM2_tmp
- $(NOECHO) $(PERL) -e "print q[print '=head2 ',scalar(localtime),': C<',shift,qq[>\\n\\n=over 4\\n\\n];]" >>.MM2_tmp
- $(NOECHO) $(PERL) -e "print q[while(($key=shift) && ($val=shift)) ]" >>.MM2_tmp
- $(NOECHO) $(PERL) -e "print q[{print qq[=item *\\n\\nC<$key: $val>\\n\\n];}print qq[=back\\n\\n];]" >>.MM2_tmp
- $(NOECHO) $(PERL) .MM2_tmp <.MM_tmp >>%.$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
- $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;,.MM2_tmp;
-
-];
-
- push @m, q[
-uninstall :: uninstall_from_$(INSTALLDIRS)dirs
- $(NOECHO) $(NOOP)
-
-uninstall_from_perldirs ::
- $(NOECHO) $(UNINSTALL) ].$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[
- $(NOECHO) $(SAY) "Uninstall is now deprecated and makes no actual changes."
- $(NOECHO) $(SAY) "Please check the list above carefully for errors, and manually remove"
- $(NOECHO) $(SAY) "the appropriate files. Sorry for the inconvenience."
-
-uninstall_from_sitedirs ::
- $(NOECHO) $(UNINSTALL) ],$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist'),"\n",q[
- $(NOECHO) $(SAY) "Uninstall is now deprecated and makes no actual changes."
- $(NOECHO) $(SAY) "Please check the list above carefully for errors, and manually remove"
- $(NOECHO) $(SAY) "the appropriate files. Sorry for the inconvenience."
-];
-
- join('',@m);
-}
-
-=item perldepend (override)
-
-Use VMS-style syntax for files; it's cheaper to just do it directly here
-than to have the MM_Unix method call C<catfile> repeatedly. Also, if
-we have to rebuild Config.pm, use MM[SK] to do it.
-
-=cut
-
-sub perldepend {
- my($self) = @_;
- my(@m);
-
- push @m, '
-$(OBJECT) : $(PERL_INC)EXTERN.h, $(PERL_INC)INTERN.h, $(PERL_INC)XSUB.h, $(PERL_INC)av.h
-$(OBJECT) : $(PERL_INC)cop.h, $(PERL_INC)cv.h, $(PERL_INC)embed.h, $(PERL_INC)form.h
-$(OBJECT) : $(PERL_INC)gv.h, $(PERL_INC)handy.h, $(PERL_INC)hv.h, $(PERL_INC)keywords.h
-$(OBJECT) : $(PERL_INC)mg.h, $(PERL_INC)op.h, $(PERL_INC)opcode.h, $(PERL_INC)patchlevel.h
-$(OBJECT) : $(PERL_INC)perl.h, $(PERL_INC)perly.h, $(PERL_INC)pp.h, $(PERL_INC)proto.h
-$(OBJECT) : $(PERL_INC)regcomp.h, $(PERL_INC)regexp.h, $(PERL_INC)scope.h, $(PERL_INC)sv.h
-$(OBJECT) : $(PERL_INC)vmsish.h, $(PERL_INC)util.h, $(PERL_INC)config.h
-$(OBJECT) : $(PERL_INC)iperlsys.h
-
-' if $self->{OBJECT};
-
- if ($self->{PERL_SRC}) {
- my(@macros);
- my($mmsquals) = '$(USEMAKEFILE)[.vms]$(MAKEFILE)';
- push(@macros,'__AXP__=1') if $Config{'arch'} eq 'VMS_AXP';
- push(@macros,'DECC=1') if $Config{'vms_cc_type'} eq 'decc';
- push(@macros,'GNUC=1') if $Config{'vms_cc_type'} eq 'gcc';
- push(@macros,'SOCKET=1') if $Config{'d_has_sockets'};
- push(@macros,qq["CC=$Config{'cc'}"]) if $Config{'cc'} =~ m!/!;
- $mmsquals .= '$(USEMACROS)' . join(',',@macros) . '$(MACROEND)' if @macros;
- push(@m,q[
-# Check for unpropagated config.sh changes. Should never happen.
-# We do NOT just update config.h because that is not sufficient.
-# An out of date config.h is not fatal but complains loudly!
-$(PERL_INC)config.h : $(PERL_SRC)config.sh
- $(NOOP)
-
-$(PERL_ARCHLIB)Config.pm : $(PERL_SRC)config.sh
- $(NOECHO) Write Sys$Error "$(PERL_ARCHLIB)Config.pm may be out of date with config.h or genconfig.pl"
- olddef = F$Environment("Default")
- Set Default $(PERL_SRC)
- $(MMS)],$mmsquals,);
- if ($self->{PERL_ARCHLIB} =~ m|\[-| && $self->{PERL_SRC} =~ m|(\[-+)|) {
- my($prefix,$target) = ($1,$self->fixpath('$(PERL_ARCHLIB)Config.pm',0));
- $target =~ s/\Q$prefix/[/;
- push(@m," $target");
- }
- else { push(@m,' $(MMS$TARGET)'); }
- push(@m,q[
- Set Default 'olddef'
-]);
- }
-
- push(@m, join(" ", map($self->fixpath($_,0),values %{$self->{XS}}))." : \$(XSUBPPDEPS)\n")
- if %{$self->{XS}};
-
- join('',@m);
-}
-
-=item makefile (override)
-
-Use VMS commands and quoting.
-
-=cut
-
-sub makefile {
- my($self) = @_;
- my(@m,@cmd);
- # We do not know what target was originally specified so we
- # must force a manual rerun to be sure. But as it should only
- # happen very rarely it is not a significant problem.
- push @m, q[
-$(OBJECT) : $(FIRST_MAKEFILE)
-] if $self->{OBJECT};
-
- push @m,q[
-# We take a very conservative approach here, but it\'s worth it.
-# We move $(MAKEFILE) to $(MAKEFILE)_old here to avoid gnu make looping.
-$(MAKEFILE) : Makefile.PL $(CONFIGDEP)
- $(NOECHO) $(SAY) "$(MAKEFILE) out-of-date with respect to $(MMS$SOURCE_LIST)"
- $(NOECHO) $(SAY) "Cleaning current config before rebuilding $(MAKEFILE) ..."
- - $(MV) $(MAKEFILE) $(MAKEFILE)_old
- - $(MMS)$(MMSQUALIFIERS) $(USEMAKEFILE)$(MAKEFILE)_old clean
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL ],join(' ',map(qq["$_"],@ARGV)),q[
- $(NOECHO) $(SAY) "$(MAKEFILE) has been rebuilt."
- $(NOECHO) $(SAY) "Please run $(MMS) to build the extension."
-];
-
- join('',@m);
-}
-
-=item test (override)
-
-Use VMS commands for handling subdirectories.
-
-=cut
-
-sub test {
- my($self, %attribs) = @_;
- my($tests) = $attribs{TESTS} || ( -d 't' ? 't/*.t' : '');
- my(@m);
- push @m,"
-TEST_VERBOSE = 0
-TEST_TYPE = test_\$(LINKTYPE)
-TEST_FILE = test.pl
-TESTDB_SW = -d
-
-test :: \$(TEST_TYPE)
- \$(NOECHO) \$(NOOP)
-
-testdb :: testdb_\$(LINKTYPE)
- \$(NOECHO) \$(NOOP)
-
-";
- foreach(@{$self->{DIR}}){
- my($vmsdir) = $self->fixpath($_,1);
- push(@m, ' If F$Search("',$vmsdir,'$(MAKEFILE)").nes."" Then $(PERL) -e "chdir ',"'$vmsdir'",
- '; print `$(MMS)$(MMSQUALIFIERS) $(PASTHRU2) test`'."\n");
- }
- push(@m, "\t\$(NOECHO) \$(SAY) \"No tests defined for \$(NAME) extension.\"\n")
- unless $tests or -f "test.pl" or @{$self->{DIR}};
- push(@m, "\n");
-
- push(@m, "test_dynamic :: pure_all\n");
- push(@m, $self->test_via_harness('$(FULLPERL)', $tests)) if $tests;
- push(@m, $self->test_via_script('$(FULLPERL)', 'test.pl')) if -f "test.pl";
- push(@m, "\t\$(NOECHO) \$(NOOP)\n") if (!$tests && ! -f "test.pl");
- push(@m, "\n");
-
- push(@m, "testdb_dynamic :: pure_all\n");
- push(@m, $self->test_via_script('$(FULLPERL) "$(TESTDB_SW)"', '$(TEST_FILE)'));
- push(@m, "\n");
-
- # Occasionally we may face this degenerate target:
- push @m, "test_ : test_dynamic\n\n";
-
- if ($self->needs_linking()) {
- push(@m, "test_static :: pure_all \$(MAP_TARGET)\n");
- push(@m, $self->test_via_harness('$(MAP_TARGET)', $tests)) if $tests;
- push(@m, $self->test_via_script('$(MAP_TARGET)', 'test.pl')) if -f 'test.pl';
- push(@m, "\n");
- push(@m, "testdb_static :: pure_all \$(MAP_TARGET)\n");
- push(@m, $self->test_via_script('$(MAP_TARGET) $(TESTDB_SW)', '$(TEST_FILE)'));
- push(@m, "\n");
- }
- else {
- push @m, "test_static :: test_dynamic\n\t\$(NOECHO) \$(NOOP)\n\n";
- push @m, "testdb_static :: testdb_dynamic\n\t\$(NOECHO) \$(NOOP)\n";
- }
-
- join('',@m);
-}
-
-=item test_via_harness (override)
-
-Use VMS-style quoting on command line.
-
-=cut
-
-sub test_via_harness {
- my($self,$perl,$tests) = @_;
- " $perl".' "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" "-I$(PERL_LIB)" "-I$(PERL_ARCHLIB)" \\'."\n\t".
- '-e "use Test::Harness qw(&runtests $verbose); $verbose=$(TEST_VERBOSE); runtests @ARGV;" \\'."\n\t$tests\n";
-}
-
-=item test_via_script (override)
-
-Use VMS-style quoting on command line.
-
-=cut
-
-sub test_via_script {
- my($self,$perl,$script) = @_;
- " $perl".' "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" '.$script.'
-';
-}
-
-=item makeaperl (override)
-
-Undertake to build a new set of Perl images using VMS commands. Since
-VMS does dynamic loading, it's not necessary to statically link each
-extension into the Perl image, so this isn't the normal build path.
-Consequently, it hasn't really been tested, and may well be incomplete.
-
-=cut
-
-sub makeaperl {
- my($self, %attribs) = @_;
- my($makefilename, $searchdirs, $static, $extra, $perlinc, $target, $tmp, $libperl) =
- @attribs{qw(MAKE DIRS STAT EXTRA INCL TARGET TMP LIBPERL)};
- my(@m);
- push @m, "
-# --- MakeMaker makeaperl section ---
-MAP_TARGET = $target
-";
- return join '', @m if $self->{PARENT};
-
- my($dir) = join ":", @{$self->{DIR}};
-
- unless ($self->{MAKEAPERL}) {
- push @m, q{
-$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
- $(NOECHO) $(SAY) "Writing ""$(MMS$TARGET)"" for this $(MAP_TARGET)"
- $(NOECHO) $(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
- Makefile.PL DIR=}, $dir, q{ \
- MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
- MAKEAPERL=1 NORECURS=1 };
-
- push @m, map(q[ \\\n\t\t"$_"], @ARGV),q{
-
-$(MAP_TARGET) :: $(MAKE_APERL_FILE)
- $(MMS)$(MMSQUALIFIERS)$(USEMAKEFILE)$(MAKE_APERL_FILE) static $(MMS$TARGET)
-};
- push @m, "\n";
-
- return join '', @m;
- }
-
-
- my($linkcmd,@optlibs,@staticpkgs,$extralist,$targdir,$libperldir,%libseen);
- local($_);
-
- # The front matter of the linkcommand...
- $linkcmd = join ' ', $Config{'ld'},
- grep($_, @Config{qw(large split ldflags ccdlflags)});
- $linkcmd =~ s/\s+/ /g;
-
- # Which *.olb files could we make use of...
- local(%olbs);
- $olbs{$self->{INST_ARCHAUTODIR}} = "$self->{BASEEXT}\$(LIB_EXT)";
- require File::Find;
- File::Find::find(sub {
- return unless m/\Q$self->{LIB_EXT}\E$/;
- return if m/^libperl/;
-
- if( exists $self->{INCLUDE_EXT} ){
- my $found = 0;
- my $incl;
- my $xx;
-
- ($xx = $File::Find::name) =~ s,.*?/auto/,,;
- $xx =~ s,/?$_,,;
- $xx =~ s,/,::,g;
-
- # Throw away anything not explicitly marked for inclusion.
- # DynaLoader is implied.
- foreach $incl ((@{$self->{INCLUDE_EXT}},'DynaLoader')){
- if( $xx eq $incl ){
- $found++;
- last;
- }
- }
- return unless $found;
- }
- elsif( exists $self->{EXCLUDE_EXT} ){
- my $excl;
- my $xx;
-
- ($xx = $File::Find::name) =~ s,.*?/auto/,,;
- $xx =~ s,/?$_,,;
- $xx =~ s,/,::,g;
-
- # Throw away anything explicitly marked for exclusion
- foreach $excl (@{$self->{EXCLUDE_EXT}}){
- return if( $xx eq $excl );
- }
- }
-
- $olbs{$ENV{DEFAULT}} = $_;
- }, grep( -d $_, @{$searchdirs || []}));
-
- # We trust that what has been handed in as argument will be buildable
- $static = [] unless $static;
- @olbs{@{$static}} = (1) x @{$static};
-
- $extra = [] unless $extra && ref $extra eq 'ARRAY';
- # Sort the object libraries in inverse order of
- # filespec length to try to insure that dependent extensions
- # will appear before their parents, so the linker will
- # search the parent library to resolve references.
- # (e.g. Intuit::DWIM will precede Intuit, so unresolved
- # references from [.intuit.dwim]dwim.obj can be found
- # in [.intuit]intuit.olb).
- for (sort { length($a) <=> length($b) } keys %olbs) {
- next unless $olbs{$_} =~ /\Q$self->{LIB_EXT}\E$/;
- my($dir) = $self->fixpath($_,1);
- my($extralibs) = $dir . "extralibs.ld";
- my($extopt) = $dir . $olbs{$_};
- $extopt =~ s/$self->{LIB_EXT}$/.opt/;
- push @optlibs, "$dir$olbs{$_}";
- # Get external libraries this extension will need
- if (-f $extralibs ) {
- my %seenthis;
- open LIST,$extralibs or warn $!,next;
- while (<LIST>) {
- chomp;
- # Include a library in the link only once, unless it's mentioned
- # multiple times within a single extension's options file, in which
- # case we assume the builder needed to search it again later in the
- # link.
- my $skip = exists($libseen{$_}) && !exists($seenthis{$_});
- $libseen{$_}++; $seenthis{$_}++;
- next if $skip;
- push @$extra,$_;
- }
- close LIST;
- }
- # Get full name of extension for ExtUtils::Miniperl
- if (-f $extopt) {
- open OPT,$extopt or die $!;
- while (<OPT>) {
- next unless /(?:UNIVERSAL|VECTOR)=boot_([\w_]+)/;
- my $pkg = $1;
- $pkg =~ s#__*#::#g;
- push @staticpkgs,$pkg;
- }
- }
- }
- # Place all of the external libraries after all of the Perl extension
- # libraries in the final link, in order to maximize the opportunity
- # for XS code from multiple extensions to resolve symbols against the
- # same external library while only including that library once.
- push @optlibs, @$extra;
-
- $target = "Perl$Config{'exe_ext'}" unless $target;
- ($shrtarget,$targdir) = fileparse($target);
- $shrtarget =~ s/^([^.]*)/$1Shr/;
- $shrtarget = $targdir . $shrtarget;
- $target = "Perlshr.$Config{'dlext'}" unless $target;
- $tmp = "[]" unless $tmp;
- $tmp = $self->fixpath($tmp,1);
- if (@optlibs) { $extralist = join(' ',@optlibs); }
- else { $extralist = ''; }
- # Let ExtUtils::Liblist find the necessary libs for us (but skip PerlShr)
- # that's what we're building here).
- push @optlibs, grep { !/PerlShr/i } split ' ', +($self->ext())[2];
- if ($libperl) {
- unless (-f $libperl || -f ($libperl = $self->catfile($Config{'installarchlib'},'CORE',$libperl))) {
- print STDOUT "Warning: $libperl not found\n";
- undef $libperl;
- }
- }
- unless ($libperl) {
- if (defined $self->{PERL_SRC}) {
- $libperl = $self->catfile($self->{PERL_SRC},"libperl$self->{LIB_EXT}");
- } elsif (-f ($libperl = $self->catfile($Config{'installarchlib'},'CORE',"libperl$self->{LIB_EXT}")) ) {
- } else {
- print STDOUT "Warning: $libperl not found
- If you're going to build a static perl binary, make sure perl is installed
- otherwise ignore this warning\n";
- }
- }
- $libperldir = $self->fixpath((fileparse($libperl))[1],1);
-
- push @m, '
-# Fill in the target you want to produce if it\'s not perl
-MAP_TARGET = ',$self->fixpath($target,0),'
-MAP_SHRTARGET = ',$self->fixpath($shrtarget,0),"
-MAP_LINKCMD = $linkcmd
-MAP_PERLINC = ", $perlinc ? map('"$_" ',@{$perlinc}) : '',"
-MAP_EXTRA = $extralist
-MAP_LIBPERL = ",$self->fixpath($libperl,0),'
-';
-
-
- push @m,"\n${tmp}Makeaperl.Opt : \$(MAP_EXTRA)\n";
- foreach (@optlibs) {
- push @m,' $(NOECHO) $(PERL) -e "print q{',$_,'}" >>$(MMS$TARGET)',"\n";
- }
- push @m,"\n${tmp}PerlShr.Opt :\n\t";
- push @m,'$(NOECHO) $(PERL) -e "print q{$(MAP_SHRTARGET)}" >$(MMS$TARGET)',"\n";
-
-push @m,'
-$(MAP_SHRTARGET) : $(MAP_LIBPERL) Makeaperl.Opt ',"${libperldir}Perlshr_Attr.Opt",'
- $(MAP_LINKCMD)/Shareable=$(MMS$TARGET) $(MAP_LIBPERL), Makeaperl.Opt/Option ',"${libperldir}Perlshr_Attr.Opt/Option",'
-$(MAP_TARGET) : $(MAP_SHRTARGET) ',"${tmp}perlmain\$(OBJ_EXT) ${tmp}PerlShr.Opt",'
- $(MAP_LINKCMD) ',"${tmp}perlmain\$(OBJ_EXT)",', PerlShr.Opt/Option
- $(NOECHO) $(SAY) "To install the new ""$(MAP_TARGET)"" binary, say"
- $(NOECHO) $(SAY) " $(MMS)$(MMSQUALIFIERS)$(USEMAKEFILE)$(MAKEFILE) inst_perl $(USEMACROS)MAP_TARGET=$(MAP_TARGET)$(ENDMACRO)"
- $(NOECHO) $(SAY) "To remove the intermediate files, say
- $(NOECHO) $(SAY) " $(MMS)$(MMSQUALIFIERS)$(USEMAKEFILE)$(MAKEFILE) map_clean"
-';
- push @m,"\n${tmp}perlmain.c : \$(MAKEFILE)\n\t\$(NOECHO) \$(PERL) -e 1 >${tmp}Writemain.tmp\n";
- push @m, "# More from the 255-char line length limit\n";
- foreach (@staticpkgs) {
- push @m,' $(NOECHO) $(PERL) -e "print q{',$_,qq[}" >>${tmp}Writemain.tmp\n];
- }
- push @m,'
- $(NOECHO) $(PERL) $(MAP_PERLINC) -ane "use ExtUtils::Miniperl; writemain(@F)" ',$tmp,'Writemain.tmp >$(MMS$TARGET)
- $(NOECHO) $(RM_F) ',"${tmp}Writemain.tmp\n";
-
- push @m, q[
-# Still more from the 255-char line length limit
-doc_inst_perl :
- $(NOECHO) $(PERL) -e "print 'Perl binary $(MAP_TARGET)|'" >.MM_tmp
- $(NOECHO) $(PERL) -e "print 'MAP_STATIC|$(MAP_STATIC)|'" >>.MM_tmp
- $(NOECHO) $(PERL) -pl040 -e " " ].$self->catfile('$(INST_ARCHAUTODIR)','extralibs.all'),q[ >>.MM_tmp
- $(NOECHO) $(PERL) -e "print 'MAP_LIBPERL|$(MAP_LIBPERL)|'" >>.MM_tmp
- $(DOC_INSTALL) <.MM_tmp >>].$self->catfile('$(INSTALLARCHLIB)','perllocal.pod').q[
- $(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;
-];
-
- push @m, "
-inst_perl : pure_inst_perl doc_inst_perl
- \$(NOECHO) \$(NOOP)
-
-pure_inst_perl : \$(MAP_TARGET)
- $self->{CP} \$(MAP_SHRTARGET) ",$self->fixpath($Config{'installbin'},1),"
- $self->{CP} \$(MAP_TARGET) ",$self->fixpath($Config{'installbin'},1),"
-
-clean :: map_clean
- \$(NOECHO) \$(NOOP)
-
-map_clean :
- \$(RM_F) ${tmp}perlmain\$(OBJ_EXT) ${tmp}perlmain.c \$(MAKEFILE)
- \$(RM_F) ${tmp}Makeaperl.Opt ${tmp}PerlShr.Opt \$(MAP_TARGET)
-";
-
- join '', @m;
-}
-
-# --- Output postprocessing section ---
-
-=item nicetext (override)
-
-Insure that colons marking targets are preceded by space, in order
-to distinguish the target delimiter from a colon appearing as
-part of a filespec.
-
-=cut
-
-sub nicetext {
-
- my($self,$text) = @_;
- $text =~ s/([^\s:])(:+\s)/$1 $2/gs;
- $text;
-}
-
-1;
-
-=back
-
-=cut
-
-__END__
-
diff --git a/contrib/perl5/lib/ExtUtils/MM_Win32.pm b/contrib/perl5/lib/ExtUtils/MM_Win32.pm
deleted file mode 100644
index 5361ece..0000000
--- a/contrib/perl5/lib/ExtUtils/MM_Win32.pm
+++ /dev/null
@@ -1,957 +0,0 @@
-package ExtUtils::MM_Win32;
-
-=head1 NAME
-
-ExtUtils::MM_Win32 - methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=head1 SYNOPSIS
-
- use ExtUtils::MM_Win32; # Done internally by ExtUtils::MakeMaker if needed
-
-=head1 DESCRIPTION
-
-See ExtUtils::MM_Unix for a documentation of the methods provided
-there. This package overrides the implementation of these methods, not
-the semantics.
-
-=over
-
-=cut
-
-use Config;
-#use Cwd;
-use File::Basename;
-require Exporter;
-
-Exporter::import('ExtUtils::MakeMaker',
- qw( $Verbose &neatvalue));
-
-$ENV{EMXSHELL} = 'sh'; # to run `commands`
-unshift @MM::ISA, 'ExtUtils::MM_Win32';
-
-$BORLAND = 1 if $Config{'cc'} =~ /^bcc/i;
-$GCC = 1 if $Config{'cc'} =~ /^gcc/i;
-$DMAKE = 1 if $Config{'make'} =~ /^dmake/i;
-$NMAKE = 1 if $Config{'make'} =~ /^nmake/i;
-$PERLMAKE = 1 if $Config{'make'} =~ /^pmake/i;
-$OBJ = 1 if $Config{'ccflags'} =~ /PERL_OBJECT/i;
-
-# a few workarounds for command.com (very basic)
-{
- package ExtUtils::MM_Win95;
-
- # the $^O test may be overkill, but we want to be sure Win32::IsWin95()
- # exists before we try it
-
- unshift @MM::ISA, 'ExtUtils::MM_Win95'
- if ($^O =~ /Win32/ && Win32::IsWin95());
-
- sub xs_c {
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs.c:
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) \\
- $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c
- '
- }
-
- sub xs_cpp {
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs.cpp:
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) \\
- $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp
- ';
- }
-
- # many makes are too dumb to use xs_c then c_o
- sub xs_o {
- my($self) = shift;
- return '' unless $self->needs_linking();
- '
-.xs$(OBJ_EXT):
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) \\
- $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
- ';
- }
-} # end of command.com workarounds
-
-sub dlsyms {
- my($self,%attribs) = @_;
-
- my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
- my($vars) = $attribs{DL_VARS} || $self->{DL_VARS} || [];
- my($funclist) = $attribs{FUNCLIST} || $self->{FUNCLIST} || [];
- my($imports) = $attribs{IMPORTS} || $self->{IMPORTS} || {};
- my(@m);
- (my $boot = $self->{NAME}) =~ s/:/_/g;
-
- if (not $self->{SKIPHASH}{'dynamic'}) {
- push(@m,"
-$self->{BASEEXT}.def: Makefile.PL
-",
- q! $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Mksymlists \\
- -e "Mksymlists('NAME' => '!, $self->{NAME},
- q!', 'DLBASE' => '!,$self->{DLBASE},
- q!', 'DL_FUNCS' => !,neatvalue($funcs),
- q!, 'FUNCLIST' => !,neatvalue($funclist),
- q!, 'IMPORTS' => !,neatvalue($imports),
- q!, 'DL_VARS' => !, neatvalue($vars), q!);"
-!);
- }
- join('',@m);
-}
-
-sub replace_manpage_separator {
- my($self,$man) = @_;
- $man =~ s,/+,.,g;
- $man;
-}
-
-sub maybe_command {
- my($self,$file) = @_;
- my @e = exists($ENV{'PATHEXT'})
- ? split(/;/, $ENV{PATHEXT})
- : qw(.com .exe .bat .cmd);
- my $e = '';
- for (@e) { $e .= "\Q$_\E|" }
- chop $e;
- # see if file ends in one of the known extensions
- if ($file =~ /($e)$/i) {
- return $file if -e $file;
- }
- else {
- for (@e) {
- return "$file$_" if -e "$file$_";
- }
- }
- return;
-}
-
-sub file_name_is_absolute {
- my($self,$file) = @_;
- $file =~ m{^([a-z]:)?[\\/]}i ;
-}
-
-sub find_perl {
- my($self, $ver, $names, $dirs, $trace) = @_;
- my($name, $dir);
- if ($trace >= 2){
- print "Looking for perl $ver by these names:
-@$names
-in these dirs:
-@$dirs
-";
- }
- foreach $dir (@$dirs){
- next unless defined $dir; # $self->{PERL_SRC} may be undefined
- foreach $name (@$names){
- my ($abs, $val);
- if ($self->file_name_is_absolute($name)) { # /foo/bar
- $abs = $name;
- } elsif ($self->canonpath($name) eq $self->canonpath(basename($name))) { # foo
- $abs = $self->catfile($dir, $name);
- } else { # foo/bar
- $abs = $self->canonpath($self->catfile($self->curdir, $name));
- }
- print "Checking $abs\n" if ($trace >= 2);
- next unless $self->maybe_command($abs);
- print "Executing $abs\n" if ($trace >= 2);
- $val = `$abs -e "require $ver;" 2>&1`;
- if ($? == 0) {
- print "Using PERL=$abs\n" if $trace;
- return $abs;
- } elsif ($trace >= 2) {
- print "Result: `$val'\n";
- }
- }
- }
- print STDOUT "Unable to find a perl $ver (by these names: @$names, in these dirs: @$dirs)\n";
- 0; # false and not empty
-}
-
-sub catdir {
- my $self = shift;
- my @args = @_;
- for (@args) {
- # append a slash to each argument unless it has one there
- $_ .= "\\" if $_ eq '' or substr($_,-1) ne "\\";
- }
- my $result = $self->canonpath(join('', @args));
- $result;
-}
-
-=item catfile
-
-Concatenate one or more directory names and a filename to form a
-complete path ending with a filename
-
-=cut
-
-sub catfile {
- my $self = shift @_;
- my $file = pop @_;
- return $file unless @_;
- my $dir = $self->catdir(@_);
- $dir =~ s/(\\\.)$//;
- $dir .= "\\" unless substr($dir,length($dir)-1,1) eq "\\";
- return $dir.$file;
-}
-
-sub init_others
-{
- my ($self) = @_;
- &ExtUtils::MM_Unix::init_others;
- $self->{'TOUCH'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e touch';
- $self->{'CHMOD'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e chmod';
- $self->{'CP'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e cp';
- $self->{'RM_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_f';
- $self->{'RM_RF'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e rm_rf';
- $self->{'MV'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mv';
- $self->{'NOOP'} = 'rem';
- $self->{'TEST_F'} = '$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e test_f';
- $self->{'LD'} = $Config{'ld'} || 'link';
- $self->{'AR'} = $Config{'ar'} || 'lib';
- $self->{'LDLOADLIBS'} ||= $Config{'libs'};
- # -Lfoo must come first for Borland, so we put it in LDDLFLAGS
- if ($BORLAND) {
- my $libs = $self->{'LDLOADLIBS'};
- my $libpath = '';
- while ($libs =~ s/(?:^|\s)(("?)-L.+?\2)(?:\s|$)/ /) {
- $libpath .= ' ' if length $libpath;
- $libpath .= $1;
- }
- $self->{'LDLOADLIBS'} = $libs;
- $self->{'LDDLFLAGS'} ||= $Config{'lddlflags'};
- $self->{'LDDLFLAGS'} .= " $libpath";
- }
- $self->{'DEV_NULL'} = '> NUL';
- # $self->{'NOECHO'} = ''; # till we have it working
-}
-
-
-=item constants (o)
-
-Initializes lots of constants and .SUFFIXES and .PHONY
-
-=cut
-
-sub constants {
- my($self) = @_;
- my(@m,$tmp);
-
- for $tmp (qw/
-
- AR_STATIC_ARGS NAME DISTNAME NAME_SYM VERSION
- VERSION_SYM XS_VERSION INST_BIN INST_EXE INST_LIB
- INST_ARCHLIB INST_SCRIPT PREFIX INSTALLDIRS
- INSTALLPRIVLIB INSTALLARCHLIB INSTALLSITELIB
- INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
- PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
- FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
- PERL_INC PERL FULLPERL
-
- / ) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
-
- push @m, qq{
-VERSION_MACRO = VERSION
-DEFINE_VERSION = -D\$(VERSION_MACRO)=\\\"\$(VERSION)\\\"
-XS_VERSION_MACRO = XS_VERSION
-XS_DEFINE_VERSION = -D\$(XS_VERSION_MACRO)=\\\"\$(XS_VERSION)\\\"
-};
-
- push @m, qq{
-MAKEMAKER = $INC{'ExtUtils\MakeMaker.pm'}
-MM_VERSION = $ExtUtils::MakeMaker::VERSION
-};
-
- push @m, q{
-# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
-# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
-# ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
-# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
-# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
-};
-
- for $tmp (qw/
- FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT
- LDFROM LINKTYPE
- / ) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
-
- push @m, "
-# Handy lists of source code files:
-XS_FILES= ".join(" \\\n\t", sort keys %{$self->{XS}})."
-C_FILES = ".join(" \\\n\t", @{$self->{C}})."
-O_FILES = ".join(" \\\n\t", @{$self->{O_FILES}})."
-H_FILES = ".join(" \\\n\t", @{$self->{H}})."
-HTMLLIBPODS = ".join(" \\\n\t", sort keys %{$self->{HTMLLIBPODS}})."
-HTMLSCRIPTPODS = ".join(" \\\n\t", sort keys %{$self->{HTMLSCRIPTPODS}})."
-MAN1PODS = ".join(" \\\n\t", sort keys %{$self->{MAN1PODS}})."
-MAN3PODS = ".join(" \\\n\t", sort keys %{$self->{MAN3PODS}})."
-";
-
- for $tmp (qw/
- INST_HTMLPRIVLIBDIR INSTALLHTMLPRIVLIBDIR
- INST_HTMLSITELIBDIR INSTALLHTMLSITELIBDIR
- INST_HTMLSCRIPTDIR INSTALLHTMLSCRIPTDIR
- INST_HTMLLIBDIR HTMLEXT
- INST_MAN1DIR INSTALLMAN1DIR MAN1EXT
- INST_MAN3DIR INSTALLMAN3DIR MAN3EXT
- /) {
- next unless defined $self->{$tmp};
- push @m, "$tmp = $self->{$tmp}\n";
- }
-
- push @m, qq{
-.USESHELL :
-} if $DMAKE;
-
- push @m, q{
-.NO_CONFIG_REC: Makefile
-} if $ENV{CLEARCASE_ROOT};
-
- # why not q{} ? -- emacs
- push @m, qq{
-# work around a famous dec-osf make(1) feature(?):
-makemakerdflt: all
-
-.SUFFIXES: .xs .c .C .cpp .cxx .cc \$(OBJ_EXT)
-
-# Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
-# some make implementations will delete the Makefile when we rebuild it. Because
-# we call false(1) when we rebuild it. So make(1) is not completely wrong when it
-# does so. Our milage may vary.
-# .PRECIOUS: Makefile # seems to be not necessary anymore
-
-.PHONY: all config static dynamic test linkext manifest
-
-# Where is the Config information that we are using/depend on
-CONFIGDEP = \$(PERL_ARCHLIB)\\Config.pm \$(PERL_INC)\\config.h
-};
-
- my @parentdir = split(/::/, $self->{PARENT_NAME});
- push @m, q{
-# Where to put things:
-INST_LIBDIR = }. $self->catdir('$(INST_LIB)',@parentdir) .q{
-INST_ARCHLIBDIR = }. $self->catdir('$(INST_ARCHLIB)',@parentdir) .q{
-
-INST_AUTODIR = }. $self->catdir('$(INST_LIB)','auto','$(FULLEXT)') .q{
-INST_ARCHAUTODIR = }. $self->catdir('$(INST_ARCHLIB)','auto','$(FULLEXT)') .q{
-};
-
- if ($self->has_link_code()) {
- push @m, '
-INST_STATIC = $(INST_ARCHAUTODIR)\$(BASEEXT)$(LIB_EXT)
-INST_DYNAMIC = $(INST_ARCHAUTODIR)\$(DLBASE).$(DLEXT)
-INST_BOOT = $(INST_ARCHAUTODIR)\$(BASEEXT).bs
-';
- } else {
- push @m, '
-INST_STATIC =
-INST_DYNAMIC =
-INST_BOOT =
-';
- }
-
- $tmp = $self->export_list;
- push @m, "
-EXPORT_LIST = $tmp
-";
- $tmp = $self->perl_archive;
- push @m, "
-PERL_ARCHIVE = $tmp
-";
-
-# push @m, q{
-#INST_PM = }.join(" \\\n\t", sort values %{$self->{PM}}).q{
-#
-#PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
-#};
-
- push @m, q{
-TO_INST_PM = }.join(" \\\n\t", sort keys %{$self->{PM}}).q{
-
-PM_TO_BLIB = }.join(" \\\n\t", %{$self->{PM}}).q{
-};
-
- join('',@m);
-}
-
-
-sub path {
- my($self) = @_;
- my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
- my @path = split(';',$path);
- foreach(@path) { $_ = '.' if $_ eq '' }
- @path;
-}
-
-=item static_lib (o)
-
-Defines how to produce the *.a (or equivalent) files.
-
-=cut
-
-sub static_lib {
- my($self) = @_;
-# Come to think of it, if there are subdirs with linkcode, we still have no INST_STATIC
-# return '' unless $self->needs_linking(); #might be because of a subdir
-
- return '' unless $self->has_link_code;
-
- my(@m);
- push(@m, <<'END');
-$(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)\.exists
- $(RM_RF) $@
-END
- # If this extension has it's own library (eg SDBM_File)
- # then copy that to $(INST_STATIC) and add $(OBJECT) into it.
- push(@m, "\t$self->{CP} \$(MYEXTLIB) \$\@\n") if $self->{MYEXTLIB};
-
- push @m,
-q{ $(AR) }.($BORLAND ? '$@ $(OBJECT:^"+")'
- : ($GCC ? '-ru $@ $(OBJECT)'
- : '-out:$@ $(OBJECT)')).q{
- }.$self->{NOECHO}.q{echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)\extralibs.ld
- $(CHMOD) 755 $@
-};
-
-# Old mechanism - still available:
-
- push @m, "\t$self->{NOECHO}".q{echo "$(EXTRALIBS)" >> $(PERL_SRC)\ext.libs}."\n\n"
- if $self->{PERL_SRC};
-
- push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
- join('', "\n",@m);
-}
-
-=item dynamic_bs (o)
-
-Defines targets for bootstrap files.
-
-=cut
-
-sub dynamic_bs {
- my($self, %attribs) = @_;
- return '
-BOOTSTRAP =
-' unless $self->has_link_code();
-
- return '
-BOOTSTRAP = '."$self->{BASEEXT}.bs".'
-
-# As Mkbootstrap might not write a file (if none is required)
-# we use touch to prevent make continually trying to remake it.
-# The DynaLoader only reads a non-empty file.
-$(BOOTSTRAP): '."$self->{MAKEFILE} $self->{BOOTDEP}".' $(INST_ARCHAUTODIR)\.exists
- '.$self->{NOECHO}.'echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
- '.$self->{NOECHO}.'$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
- -MExtUtils::Mkbootstrap \
- -e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
- '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
- $(CHMOD) 644 $@
-
-$(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists
- '."$self->{NOECHO}$self->{RM_RF}".' $(INST_BOOT)
- -'.$self->{CP}.' $(BOOTSTRAP) $(INST_BOOT)
- $(CHMOD) 644 $@
-';
-}
-
-=item dynamic_lib (o)
-
-Defines how to produce the *.so (or equivalent) files.
-
-=cut
-
-sub dynamic_lib {
- my($self, %attribs) = @_;
- return '' unless $self->needs_linking(); #might be because of a subdir
-
- return '' unless $self->has_link_code;
-
- my($otherldflags) = $attribs{OTHERLDFLAGS} || ($BORLAND ? 'c0d32.obj': '');
- my($inst_dynamic_dep) = $attribs{INST_DYNAMIC_DEP} || "";
- my($ldfrom) = '$(LDFROM)';
- my(@m);
-
-# one thing for GCC/Mingw32:
-# we try to overcome non-relocateable-DLL problems by generating
-# a (hopefully unique) image-base from the dll's name
-# -- BKS, 10-19-1999
- if ($GCC) {
- my $dllname = $self->{BASEEXT} . "." . $self->{DLEXT};
- $dllname =~ /(....)(.{0,4})/;
- my $baseaddr = unpack("n", $1 ^ $2);
- $otherldflags .= sprintf("-Wl,--image-base,0x%x0000 ", $baseaddr);
- }
-
- push(@m,'
-# This section creates the dynamically loadable $(INST_DYNAMIC)
-# from $(OBJECT) and possibly $(MYEXTLIB).
-OTHERLDFLAGS = '.$otherldflags.'
-INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
-
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)\.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
-');
- if ($GCC) {
- push(@m,
- q{ dlltool --def $(EXPORT_LIST) --output-exp dll.exp
- $(LD) -o $@ -Wl,--base-file -Wl,dll.base $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp
- dlltool --def $(EXPORT_LIST) --base-file dll.base --output-exp dll.exp
- $(LD) -o $@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) dll.exp });
- } elsif ($BORLAND) {
- push(@m,
- q{ $(LD) $(LDDLFLAGS) $(OTHERLDFLAGS) }.$ldfrom.q{,$@,,}
- .($DMAKE ? q{$(PERL_ARCHIVE:s,/,\,) $(LDLOADLIBS:s,/,\,) }
- .q{$(MYEXTLIB:s,/,\,),$(EXPORT_LIST:s,/,\,)}
- : q{$(subst /,\,$(PERL_ARCHIVE)) $(subst /,\,$(LDLOADLIBS)) }
- .q{$(subst /,\,$(MYEXTLIB)),$(subst /,\,$(EXPORT_LIST))})
- .q{,$(RESFILES)});
- } else { # VC
- push(@m,
- q{ $(LD) -out:$@ $(LDDLFLAGS) }.$ldfrom.q{ $(OTHERLDFLAGS) }
- .q{$(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) -def:$(EXPORT_LIST)});
- }
- push @m, '
- $(CHMOD) 755 $@
-';
-
- push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
- join('',@m);
-}
-
-sub perl_archive
-{
- my ($self) = @_;
- return '$(PERL_INC)\\'.$Config{'libperl'};
-}
-
-sub export_list
-{
- my ($self) = @_;
- return "$self->{BASEEXT}.def";
-}
-
-=item canonpath
-
-No physical check on the filesystem, but a logical cleanup of a
-path. On UNIX eliminated successive slashes and successive "/.".
-
-=cut
-
-sub canonpath {
- my($self,$path) = @_;
- $path =~ s/^([a-z]:)/\u$1/;
- $path =~ s|/|\\|g;
- $path =~ s|(.)\\+|$1\\|g ; # xx////xx -> xx/xx
- $path =~ s|(\\\.)+\\|\\|g ; # xx/././xx -> xx/xx
- $path =~ s|^(\.\\)+|| unless $path eq ".\\"; # ./xx -> xx
- $path =~ s|\\$||
- unless $path =~ m#^([a-z]:)?\\#; # xx/ -> xx
- $path .= '.' if $path =~ m#\\$#;
- $path;
-}
-
-=item perl_script
-
-Takes one argument, a file name, and returns the file name, if the
-argument is likely to be a perl script. On MM_Unix this is true for
-any ordinary, readable file.
-
-=cut
-
-sub perl_script {
- my($self,$file) = @_;
- return $file if -r $file && -f _;
- return "$file.pl" if -r "$file.pl" && -f _;
- return "$file.bat" if -r "$file.bat" && -f _;
- return;
-}
-
-=item pm_to_blib
-
-Defines target that copies all files in the hash PM to their
-destination and autosplits them. See L<ExtUtils::Install/DESCRIPTION>
-
-=cut
-
-sub pm_to_blib {
- my $self = shift;
- my($autodir) = $self->catdir('$(INST_LIB)','auto');
- return q{
-pm_to_blib: $(TO_INST_PM)
- }.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
- "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
- -e "pm_to_blib(}.
- ($NMAKE ? 'qw[ <<pmfiles.dat ],'
- : $DMAKE ? 'qw[ $(mktmp,pmfiles.dat $(PM_TO_BLIB:s,\\,\\\\,)\n) ],'
- : '{ qw[$(PM_TO_BLIB)] },'
- ).q{'}.$autodir.q{','$(PM_FILTER)')"
- }. ($NMAKE ? q{
-$(PM_TO_BLIB)
-<<
- } : '') . $self->{NOECHO}.q{$(TOUCH) $@
-};
-}
-
-=item test_via_harness (o)
-
-Helper method to write the test targets
-
-=cut
-
-sub test_via_harness {
- my($self, $perl, $tests) = @_;
- "\t$perl".q! -Mblib -I$(PERL_ARCHLIB) -I$(PERL_LIB) -e "use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;" !."$tests\n";
-}
-
-
-=item tool_autosplit (override)
-
-Use Win32 quoting on command line.
-
-=cut
-
-sub tool_autosplit{
- my($self, %attribs) = @_;
- my($asl) = "";
- $asl = "\$AutoSplit::Maxlen=$attribs{MAXLEN};" if $attribs{MAXLEN};
- q{
-# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
-AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MAutoSplit }.$asl.q{ -e "autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1);"
-};
-}
-
-=item tools_other (o)
-
-Win32 overrides.
-
-Defines SHELL, LD, TOUCH, CP, MV, RM_F, RM_RF, CHMOD, UMASK_NULL in
-the Makefile. Also defines the perl programs MKPATH,
-WARN_IF_OLD_PACKLIST, MOD_INSTALL. DOC_INSTALL, and UNINSTALL.
-
-=cut
-
-sub tools_other {
- my($self) = shift;
- my @m;
- my $bin_sh = $Config{sh} || 'cmd /c';
- push @m, qq{
-SHELL = $bin_sh
-} unless $DMAKE; # dmake determines its own shell
-
- for (qw/ CHMOD CP LD MV NOOP RM_F RM_RF TEST_F TOUCH UMASK_NULL DEV_NULL/ ) {
- push @m, "$_ = $self->{$_}\n";
- }
-
- push @m, q{
-# The following is a portable way to say mkdir -p
-# To see which directories are created, change the if 0 to if 1
-MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
-
-# This helps us to minimize the effect of the .exists files A yet
-# better solution would be to have a stable file in the perl
-# distribution with a timestamp of zero. But this solution doesn't
-# need any changes to the core distribution and works with older perls
-EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
-};
-
-
- return join "", @m if $self->{PARENT};
-
- push @m, q{
-# Here we warn users that an old packlist file was found somewhere,
-# and that they should call some uninstall routine
-WARN_IF_OLD_PACKLIST = $(PERL) -lwe "exit unless -f $$ARGV[0];" \\
--e "print 'WARNING: I have found an old package in';" \\
--e "print ' ', $$ARGV[0], '.';" \\
--e "print 'Please make sure the two installations are not conflicting';"
-
-UNINST=0
-VERBINST=1
-
-MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
--e "install({ @ARGV },'$(VERBINST)',0,'$(UNINST)');"
-
-DOC_INSTALL = $(PERL) -e "$$\=\"\n\n\";" \
--e "print '=head2 ', scalar(localtime), ': C<', shift, '>', ' L<', $$arg=shift, '|', $$arg, '>';" \
--e "print '=over 4';" \
--e "while (defined($$key = shift) and defined($$val = shift)) { print '=item *';print 'C<', \"$$key: $$val\", '>'; }" \
--e "print '=back';"
-
-UNINSTALL = $(PERL) -MExtUtils::Install \
--e "uninstall($$ARGV[0],1,1); print \"\nUninstall is deprecated. Please check the";" \
--e "print \" packlist above carefully.\n There may be errors. Remove the\";" \
--e "print \" appropriate files manually.\n Sorry for the inconveniences.\n\""
-};
-
- return join "", @m;
-}
-
-=item xs_o (o)
-
-Defines suffix rules to go from XS to object files directly. This is
-only intended for broken make implementations.
-
-=cut
-
-sub xs_o { # many makes are too dumb to use xs_c then c_o
- my($self) = shift;
- return ''
-}
-
-=item top_targets (o)
-
-Defines the targets all, subdirs, config, and O_FILES
-
-=cut
-
-sub top_targets {
-# --- Target Sections ---
-
- my($self) = shift;
- my(@m);
- push @m, '
-#all :: config $(INST_PM) subdirs linkext manifypods
-';
-
- push @m, '
-all :: pure_all htmlifypods manifypods
- '.$self->{NOECHO}.'$(NOOP)
-'
- unless $self->{SKIPHASH}{'all'};
-
- push @m, '
-pure_all :: config pm_to_blib subdirs linkext
- '.$self->{NOECHO}.'$(NOOP)
-
-subdirs :: $(MYEXTLIB)
- '.$self->{NOECHO}.'$(NOOP)
-
-config :: '.$self->{MAKEFILE}.' $(INST_LIBDIR)\.exists
- '.$self->{NOECHO}.'$(NOOP)
-
-config :: $(INST_ARCHAUTODIR)\.exists
- '.$self->{NOECHO}.'$(NOOP)
-
-config :: $(INST_AUTODIR)\.exists
- '.$self->{NOECHO}.'$(NOOP)
-';
-
- push @m, $self->dir_target(qw[$(INST_AUTODIR) $(INST_LIBDIR) $(INST_ARCHAUTODIR)]);
-
- if (%{$self->{HTMLLIBPODS}}) {
- push @m, qq[
-config :: \$(INST_HTMLLIBDIR)/.exists
- $self->{NOECHO}\$(NOOP)
-
-];
- push @m, $self->dir_target(qw[$(INST_HTMLLIBDIR)]);
- }
-
- if (%{$self->{HTMLSCRIPTPODS}}) {
- push @m, qq[
-config :: \$(INST_HTMLSCRIPTDIR)/.exists
- $self->{NOECHO}\$(NOOP)
-
-];
- push @m, $self->dir_target(qw[$(INST_HTMLSCRIPTDIR)]);
- }
-
- if (%{$self->{MAN1PODS}}) {
- push @m, qq[
-config :: \$(INST_MAN1DIR)\\.exists
- $self->{NOECHO}\$(NOOP)
-
-];
- push @m, $self->dir_target(qw[$(INST_MAN1DIR)]);
- }
- if (%{$self->{MAN3PODS}}) {
- push @m, qq[
-config :: \$(INST_MAN3DIR)\\.exists
- $self->{NOECHO}\$(NOOP)
-
-];
- push @m, $self->dir_target(qw[$(INST_MAN3DIR)]);
- }
-
- push @m, '
-$(O_FILES): $(H_FILES)
-' if @{$self->{O_FILES} || []} && @{$self->{H} || []};
-
- push @m, q{
-help:
- perldoc ExtUtils::MakeMaker
-};
-
- push @m, q{
-Version_check:
- }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
- -MExtUtils::MakeMaker=Version_check \
- -e "Version_check('$(MM_VERSION)')"
-};
-
- join('',@m);
-}
-
-=item htmlifypods (o)
-
-Defines targets and routines to translate the pods into HTML manpages
-and put them into the INST_HTMLLIBDIR and INST_HTMLSCRIPTDIR
-directories.
-
-Same as MM_Unix version (changes command-line quoting).
-
-=cut
-
-sub htmlifypods {
- my($self, %attribs) = @_;
- return "\nhtmlifypods : pure_all\n\t$self->{NOECHO}\$(NOOP)\n" unless
- %{$self->{HTMLLIBPODS}} || %{$self->{HTMLSCRIPTPODS}};
- my($dist);
- my($pod2html_exe);
- if (defined $self->{PERL_SRC}) {
- $pod2html_exe = $self->catfile($self->{PERL_SRC},'pod','pod2html');
- } else {
- $pod2html_exe = $self->catfile($Config{scriptdirexp},'pod2html');
- }
- unless ($pod2html_exe = $self->perl_script($pod2html_exe)) {
- # No pod2html but some HTMLxxxPODS to be installed
- print <<END;
-
-Warning: I could not locate your pod2html program. Please make sure,
- your pod2html program is in your PATH before you execute 'make'
-
-END
- $pod2html_exe = "-S pod2html";
- }
- my(@m);
- push @m,
-qq[POD2HTML_EXE = $pod2html_exe\n],
-qq[POD2HTML = \$(PERL) -we "use File::Basename; use File::Path qw(mkpath); %m=\@ARGV;for (keys %m){" \\\n],
-q[-e "next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M '],
- $self->{MAKEFILE}, q[';" \\
--e "print qq(Htmlifying $$m{$$_}\n);" \\
--e "$$dir = dirname($$m{$$_}); mkpath($$dir) unless -d $$dir;" \\
--e "system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2HTML_EXE) ].qq[$$_>$$m{$$_}])==0 or warn qq(Couldn\\047t install $$m{$$_}\n);" \\
--e "chmod(oct($(PERM_RW))), $$m{$$_} or warn qq(chmod $(PERM_RW) $$m{$$_}: $$!\n);}"
-];
- push @m, "\nhtmlifypods : pure_all ";
- push @m, join " \\\n\t", keys %{$self->{HTMLLIBPODS}}, keys %{$self->{HTMLSCRIPTPODS}};
-
- push(@m,"\n");
- if (%{$self->{HTMLLIBPODS}} || %{$self->{HTMLSCRIPTPODS}}) {
- push @m, "\t$self->{NOECHO}\$(POD2HTML) \\\n\t";
- push @m, join " \\\n\t", %{$self->{HTMLLIBPODS}}, %{$self->{HTMLSCRIPTPODS}};
- }
- join('', @m);
-}
-
-=item manifypods (o)
-
-We don't want manpage process.
-
-=cut
-
-sub manifypods {
- my($self) = shift;
- return "\nmanifypods :\n\t$self->{NOECHO}\$(NOOP)\n";
-}
-
-=item dist_ci (o)
-
-Same as MM_Unix version (changes command-line quoting).
-
-=cut
-
-sub dist_ci {
- my($self) = shift;
- my @m;
- push @m, q{
-ci :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
- -e "@all = keys %{ maniread() };" \\
- -e "print(\"Executing $(CI) @all\n\"); system(\"$(CI) @all\");" \\
- -e "print(\"Executing $(RCS_LABEL) ...\n\"); system(\"$(RCS_LABEL) @all\");"
-};
- join "", @m;
-}
-
-=item dist_core (o)
-
-Same as MM_Unix version (changes command-line quoting).
-
-=cut
-
-sub dist_core {
- my($self) = shift;
- my @m;
- push @m, q{
-dist : $(DIST_DEFAULT)
- }.$self->{NOECHO}.q{$(PERL) -le "print \"Warning: Makefile possibly out of date with $$vf\" if " \
- -e "-e ($$vf=\"$(VERSION_FROM)\") and -M $$vf < -M \"}.$self->{MAKEFILE}.q{\";"
-
-tardist : $(DISTVNAME).tar$(SUFFIX)
-
-zipdist : $(DISTVNAME).zip
-
-$(DISTVNAME).tar$(SUFFIX) : distdir
- $(PREOP)
- $(TO_UNIX)
- $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
- $(RM_RF) $(DISTVNAME)
- $(COMPRESS) $(DISTVNAME).tar
- $(POSTOP)
-
-$(DISTVNAME).zip : distdir
- $(PREOP)
- $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-
-uutardist : $(DISTVNAME).tar$(SUFFIX)
- uuencode $(DISTVNAME).tar$(SUFFIX) \\
- $(DISTVNAME).tar$(SUFFIX) > \\
- $(DISTVNAME).tar$(SUFFIX)_uu
-
-shdist : distdir
- $(PREOP)
- $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-};
- join "", @m;
-}
-
-=item pasthru (o)
-
-Defines the string that is passed to recursive make calls in
-subdirectories.
-
-=cut
-
-sub pasthru {
- my($self) = shift;
- return "PASTHRU = " . ($NMAKE ? "-nologo" : "");
-}
-
-
-
-1;
-__END__
-
-=back
-
-=cut
-
-
diff --git a/contrib/perl5/lib/ExtUtils/MakeMaker.pm b/contrib/perl5/lib/ExtUtils/MakeMaker.pm
deleted file mode 100644
index 651ffac..0000000
--- a/contrib/perl5/lib/ExtUtils/MakeMaker.pm
+++ /dev/null
@@ -1,2096 +0,0 @@
-# $FreeBSD$
-
-BEGIN {require 5.002;} # MakeMaker 5.17 was the last MakeMaker that was compatible with perl5.001m
-
-package ExtUtils::MakeMaker;
-
-$VERSION = "5.45";
-$Version_OK = "5.17"; # Makefiles older than $Version_OK will die
- # (Will be checked from MakeMaker version 4.13 onwards)
-($Revision = substr(q$Revision: 1.222 $, 10)) =~ s/\s+$//;
-
-
-
-require Exporter;
-use Config;
-use Carp ();
-#use FileHandle ();
-
-use vars qw(
-
- @ISA @EXPORT @EXPORT_OK $AUTOLOAD
- $ISA_TTY $Is_Mac $Is_OS2 $Is_VMS $Revision
- $VERSION $Verbose $Version_OK %Config %Keep_after_flush
- %MM_Sections %Prepend_dot_dot %Recognized_Att_Keys
- @Get_from_Config @MM_Sections @Overridable @Parent
-
- );
-# use strict;
-
-# &DynaLoader::mod2fname should be available to miniperl, thus
-# should be a pseudo-builtin (cmp. os2.c).
-#eval {require DynaLoader;};
-
-#
-# Set up the inheritance before we pull in the MM_* packages, because they
-# import variables and functions from here
-#
-@ISA = qw(Exporter);
-@EXPORT = qw(&WriteMakefile &writeMakefile $Verbose &prompt);
-@EXPORT_OK = qw($VERSION &Version_check &neatvalue &mkbootstrap &mksymlists);
-
-#
-# Dummy package MM inherits actual methods from OS-specific
-# default packages. We use this intermediate package so
-# MY::XYZ->func() can call MM->func() and get the proper
-# default routine without having to know under what OS
-# it's running.
-#
-@MM::ISA = qw[ExtUtils::MM_Unix ExtUtils::Liblist::Kid ExtUtils::MakeMaker];
-
-#
-# Setup dummy package:
-# MY exists for overriding methods to be defined within
-#
-{
- package MY;
- @MY::ISA = qw(MM);
-### sub AUTOLOAD { use Devel::Symdump; print Devel::Symdump->rnew->as_string; Carp::confess "hey why? $AUTOLOAD" }
- package MM;
- sub DESTROY {}
-}
-
-# "predeclare the package: we only load it via AUTOLOAD
-# but we have already mentioned it in @ISA
-package ExtUtils::Liblist::Kid;
-
-package ExtUtils::MakeMaker;
-#
-# Now we can pull in the friends
-#
-$Is_VMS = $^O eq 'VMS';
-$Is_OS2 = $^O eq 'os2';
-$Is_Mac = $^O eq 'MacOS';
-$Is_Win32 = $^O eq 'MSWin32';
-$Is_Cygwin= $^O eq 'cygwin';
-
-require ExtUtils::MM_Unix;
-
-if ($Is_VMS) {
- require ExtUtils::MM_VMS;
- require VMS::Filespec; # is a noop as long as we require it within MM_VMS
-}
-if ($Is_OS2) {
- require ExtUtils::MM_OS2;
-}
-if ($Is_Mac) {
- require ExtUtils::MM_MacOS;
-}
-if ($Is_Win32) {
- require ExtUtils::MM_Win32;
-}
-if ($Is_Cygwin) {
- require ExtUtils::MM_Cygwin;
-}
-
-full_setup();
-
-# The use of the Version_check target has been dropped between perl
-# 5.5.63 and 5.5.64. We must keep the subroutine for a while so that
-# old Makefiles can satisfy the Version_check target.
-
-sub Version_check {
- my($checkversion) = @_;
- die "Your Makefile was built with ExtUtils::MakeMaker v $checkversion.
-Current Version is $ExtUtils::MakeMaker::VERSION. There have been considerable
-changes in the meantime.
-Please rerun 'perl Makefile.PL' to regenerate the Makefile.\n"
- if $checkversion < $Version_OK;
- printf STDOUT "%s %s %s %s.\n", "Makefile built with ExtUtils::MakeMaker v",
- $checkversion, "Current Version is", $VERSION
- unless $checkversion == $VERSION;
-}
-
-sub warnhandler {
- $_[0] =~ /^Use of uninitialized value/ && return;
- $_[0] =~ /used only once/ && return;
- $_[0] =~ /^Subroutine\s+[\w:]+\s+redefined/ && return;
- warn @_;
-}
-
-sub WriteMakefile {
- Carp::croak "WriteMakefile: Need even number of args" if @_ % 2;
- local $SIG{__WARN__} = \&warnhandler;
-
- my %att = @_;
- MM->new(\%att)->flush;
-}
-
-sub prompt ($;$) {
- my($mess,$def)=@_;
- $ISA_TTY = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ; # Pipe?
- Carp::confess("prompt function called without an argument") unless defined $mess;
- my $dispdef = defined $def ? "[$def] " : " ";
- $def = defined $def ? $def : "";
- my $ans;
- local $|=1;
- print "$mess $dispdef";
- if ($ISA_TTY) {
- chomp($ans = <STDIN>);
- } else {
- print "$def\n";
- }
- return ($ans ne '') ? $ans : $def;
-}
-
-sub eval_in_subdirs {
- my($self) = @_;
- my($dir);
- use Cwd 'cwd';
- my $pwd = cwd();
-
- foreach $dir (@{$self->{DIR}}){
- my($abs) = $self->catdir($pwd,$dir);
- $self->eval_in_x($abs);
- }
- chdir $pwd;
-}
-
-sub eval_in_x {
- my($self,$dir) = @_;
- package main;
- chdir $dir or Carp::carp("Couldn't change to directory $dir: $!");
-# use FileHandle ();
-# my $fh = new FileHandle;
-# $fh->open("Makefile.PL") or Carp::carp("Couldn't open Makefile.PL in $dir");
- local *FH;
- open(FH,"Makefile.PL") or Carp::carp("Couldn't open Makefile.PL in $dir");
-# my $eval = join "", <$fh>;
- my $eval = join "", <FH>;
-# $fh->close;
- close FH;
- eval $eval;
- if ($@) {
-# if ($@ =~ /prerequisites/) {
-# die "MakeMaker WARNING: $@";
-# } else {
-# warn "WARNING from evaluation of $dir/Makefile.PL: $@";
-# }
- warn "WARNING from evaluation of $dir/Makefile.PL: $@";
- }
-}
-
-sub full_setup {
- $Verbose ||= 0;
-
- # package name for the classes into which the first object will be blessed
- $PACKNAME = "PACK000";
-
- @Attrib_help = qw/
-
- AUTHOR ABSTRACT ABSTRACT_FROM BINARY_LOCATION
- C CAPI CCFLAGS CONFIG CONFIGURE DEFINE DIR DISTNAME DL_FUNCS DL_VARS
- EXCLUDE_EXT EXE_FILES FIRST_MAKEFILE FULLPERL FUNCLIST H
- HTMLLIBPODS HTMLSCRIPTPODS IMPORTS
- INC INCLUDE_EXT INSTALLARCHLIB INSTALLBIN INSTALLDIRS INSTALLHTMLPRIVLIBDIR
- INSTALLHTMLSCRIPTDIR INSTALLHTMLSITELIBDIR INSTALLMAN1DIR
- INSTALLMAN3DIR INSTALLPRIVLIB INSTALLSCRIPT INSTALLSITEARCH
- INSTALLSITELIB INST_ARCHLIB INST_BIN INST_EXE INST_LIB
- INST_HTMLLIBDIR INST_HTMLSCRIPTDIR
- INST_MAN1DIR INST_MAN3DIR INST_SCRIPT LDFROM LIB LIBPERL_A LIBS
- LINKTYPE MAKEAPERL MAKEFILE MAN1PODS MAN3PODS MAP_TARGET MYEXTLIB
- PERL_MALLOC_OK
- NAME NEEDS_LINKING NOECHO NORECURS NO_VC OBJECT OPTIMIZE PERL PERLMAINCC
- PERL_ARCHLIB PERL_LIB PERL_SRC PERM_RW PERM_RWX
- PL_FILES PM PM_FILTER PMLIBDIRS POLLUTE PPM_INSTALL_EXEC
- PPM_INSTALL_SCRIPT PREFIX
- PREREQ_PM SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
- XS_VERSION clean depend dist dynamic_lib linkext macro realclean
- tool_autosplit
-
- MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC
- MACLIBS_ALL_68K MACLIBS_ALL_PPC MACLIBS_SHARED
- /;
-
- # IMPORTS is used under OS/2 and Win32
-
- # @Overridable is close to @MM_Sections but not identical. The
- # order is important. Many subroutines declare macros. These
- # depend on each other. Let's try to collect the macros up front,
- # then pasthru, then the rules.
-
- # MM_Sections are the sections we have to call explicitly
- # in Overridable we have subroutines that are used indirectly
-
-
- @MM_Sections =
- qw(
-
- post_initialize const_config constants tool_autosplit tool_xsubpp
- tools_other dist macro depend cflags const_loadlibs const_cccmd
- post_constants
-
- pasthru
-
- c_o xs_c xs_o top_targets linkext dlsyms dynamic dynamic_bs
- dynamic_lib static static_lib htmlifypods manifypods processPL
- installbin subdirs
- clean realclean dist_basics dist_core dist_dir dist_test dist_ci
- install force perldepend makefile staticmake test ppd
-
- ); # loses section ordering
-
- @Overridable = @MM_Sections;
- push @Overridable, qw[
-
- dir_target libscan makeaperl needs_linking perm_rw perm_rwx
- subdir_x test_via_harness test_via_script
- ];
-
- push @MM_Sections, qw[
-
- pm_to_blib selfdocument
-
- ];
-
- # Postamble needs to be the last that was always the case
- push @MM_Sections, "postamble";
- push @Overridable, "postamble";
-
- # All sections are valid keys.
- @Recognized_Att_Keys{@MM_Sections} = (1) x @MM_Sections;
-
- # we will use all these variables in the Makefile
- @Get_from_Config =
- qw(
- ar cc cccdlflags ccdlflags dlext dlsrc ld lddlflags ldflags libc
- lib_ext obj_ext osname osvers ranlib sitelibexp sitearchexp so
- exe_ext full_ar
- );
-
- my $item;
- foreach $item (@Attrib_help){
- $Recognized_Att_Keys{$item} = 1;
- }
- foreach $item (@Get_from_Config) {
- $Recognized_Att_Keys{uc $item} = $Config{$item};
- print "Attribute '\U$item\E' => '$Config{$item}'\n"
- if ($Verbose >= 2);
- }
-
- #
- # When we eval a Makefile.PL in a subdirectory, that one will ask
- # us (the parent) for the values and will prepend "..", so that
- # all files to be installed end up below OUR ./blib
- #
- %Prepend_dot_dot =
- qw(
-
- INST_BIN 1 INST_EXE 1 INST_LIB 1 INST_ARCHLIB 1 INST_SCRIPT 1
- MAP_TARGET 1 INST_HTMLLIBDIR 1 INST_HTMLSCRIPTDIR 1
- INST_MAN1DIR 1 INST_MAN3DIR 1 PERL_SRC 1
-
- );
-
- my @keep = qw/
- NEEDS_LINKING HAS_LINK_CODE
- /;
- @Keep_after_flush{@keep} = (1) x @keep;
-}
-
-sub writeMakefile {
- die <<END;
-
-The extension you are trying to build apparently is rather old and
-most probably outdated. We detect that from the fact, that a
-subroutine "writeMakefile" is called, and this subroutine is not
-supported anymore since about October 1994.
-
-Please contact the author or look into CPAN (details about CPAN can be
-found in the FAQ and at http:/www.perl.com) for a more recent version
-of the extension. If you're really desperate, you can try to change
-the subroutine name from writeMakefile to WriteMakefile and rerun
-'perl Makefile.PL', but you're most probably left alone, when you do
-so.
-
-The MakeMaker team
-
-END
-}
-
-sub ExtUtils::MakeMaker::new {
- my($class,$self) = @_;
- my($key);
-
- print STDOUT "MakeMaker (v$VERSION)\n" if $Verbose;
- if (-f "MANIFEST" && ! -f "Makefile"){
- check_manifest();
- }
-
- $self = {} unless (defined $self);
-
- check_hints($self);
-
- my(%initial_att) = %$self; # record initial attributes
-
- my($prereq);
- foreach $prereq (sort keys %{$self->{PREREQ_PM}}) {
- my $eval = "require $prereq";
- eval $eval;
-
- if ($@) {
- warn "Warning: prerequisite $prereq failed to load: $@";
- }
- elsif ($prereq->VERSION < $self->{PREREQ_PM}->{$prereq} ){
- warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found";
-# Why is/was this 'delete' here? We need PREREQ_PM later to make PPDs.
-# } else {
-# delete $self->{PREREQ_PM}{$prereq};
- }
- }
-# if (@unsatisfied){
-# unless (defined $ExtUtils::MakeMaker::useCPAN) {
-# print qq{MakeMaker WARNING: prerequisites not found (@unsatisfied)
-# Please install these modules first and rerun 'perl Makefile.PL'.\n};
-# if ($ExtUtils::MakeMaker::hasCPAN) {
-# $ExtUtils::MakeMaker::useCPAN = prompt(qq{Should I try to use the CPAN module to fetch them for you?},"yes");
-# } else {
-# print qq{Hint: You may want to install the CPAN module to autofetch the needed modules\n};
-# $ExtUtils::MakeMaker::useCPAN=0;
-# }
-# }
-# if ($ExtUtils::MakeMaker::useCPAN) {
-# require CPAN;
-# CPAN->import(@unsatisfied);
-# } else {
-# die qq{prerequisites not found (@unsatisfied)};
-# }
-# warn qq{WARNING: prerequisites not found (@unsatisfied)};
-# }
-
- if (defined $self->{CONFIGURE}) {
- if (ref $self->{CONFIGURE} eq 'CODE') {
- $self = { %$self, %{&{$self->{CONFIGURE}}}};
- } else {
- Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";
- }
- }
-
- # This is for old Makefiles written pre 5.00, will go away
- if ( Carp::longmess("") =~ /runsubdirpl/s ){
- Carp::carp("WARNING: Please rerun 'perl Makefile.PL' to regenerate your Makefiles\n");
- }
-
- my $newclass = ++$PACKNAME;
- local @Parent = @Parent; # Protect against non-local exits
- {
-# no strict;
- print "Blessing Object into class [$newclass]\n" if $Verbose>=2;
- mv_all_methods("MY",$newclass);
- bless $self, $newclass;
- push @Parent, $self;
- @{"$newclass\:\:ISA"} = 'MM';
- }
-
- if (defined $Parent[-2]){
- $self->{PARENT} = $Parent[-2];
- my $key;
- for $key (keys %Prepend_dot_dot) {
- next unless defined $self->{PARENT}{$key};
- $self->{$key} = $self->{PARENT}{$key};
- # PERL and FULLPERL may be command verbs instead of full
- # file specifications under VMS. If so, don't turn them
- # into a filespec.
- $self->{$key} = $self->catdir("..",$self->{$key})
- unless $self->file_name_is_absolute($self->{$key})
- || ($^O eq 'VMS' and ($key =~ /PERL$/ && $self->{$key} =~ /^[\w\-\$]+$/));
- }
- if ($self->{PARENT}) {
- $self->{PARENT}->{CHILDREN}->{$newclass} = $self;
- foreach my $opt (qw(CAPI POLLUTE)) {
- if (exists $self->{PARENT}->{$opt}
- and not exists $self->{$opt})
- {
- # inherit, but only if already unspecified
- $self->{$opt} = $self->{PARENT}->{$opt};
- }
- }
- }
- } else {
- parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);
- }
-
- $self->{NAME} ||= $self->guess_name;
-
- ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g;
-
- $self->init_main();
-
- if (! $self->{PERL_SRC} ) {
- my($pthinks) = $self->canonpath($INC{'Config.pm'});
- my($cthinks) = $self->catfile($Config{'archlibexp'},'Config.pm');
- $pthinks = VMS::Filespec::vmsify($pthinks) if $Is_VMS;
- if ($pthinks ne $cthinks &&
- !($Is_Win32 and lc($pthinks) eq lc($cthinks))) {
- print "Have $pthinks expected $cthinks\n";
- if ($Is_Win32) {
- $pthinks =~ s![/\\]Config\.pm$!!i; $pthinks =~ s!.*[/\\]!!;
- }
- else {
- $pthinks =~ s!/Config\.pm$!!; $pthinks =~ s!.*/!!;
- }
- print STDOUT <<END unless $self->{UNINSTALLED_PERL};
-Your perl and your Config.pm seem to have different ideas about the architecture
-they are running on.
-Perl thinks: [$pthinks]
-Config says: [$Config{archname}]
-This may or may not cause problems. Please check your installation of perl if you
-have problems building this extension.
-END
- }
- }
-
- $self->init_dirscan();
- $self->init_others();
- my($argv) = neatvalue(\@ARGV);
- $argv =~ s/^\[/(/;
- $argv =~ s/\]$/)/;
-
- push @{$self->{RESULT}}, <<END;
-# This Makefile is for the $self->{NAME} extension to perl.
-#
-# It was generated automatically by MakeMaker version
-# $VERSION (Revision: $Revision) from the contents of
-# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
-#
-# ANY CHANGES MADE HERE WILL BE LOST!
-#
-# MakeMaker ARGV: $argv
-#
-# MakeMaker Parameters:
-END
-
- foreach $key (sort keys %initial_att){
- my($v) = neatvalue($initial_att{$key});
- $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
- $v =~ tr/\n/ /s;
- push @{$self->{RESULT}}, "# $key => $v";
- }
-
- # turn the SKIP array into a SKIPHASH hash
- my (%skip,$skip);
- for $skip (@{$self->{SKIP} || []}) {
- $self->{SKIPHASH}{$skip} = 1;
- }
- delete $self->{SKIP}; # free memory
-
- if ($self->{PARENT}) {
- for (qw/install dist dist_basics dist_core dist_dir dist_test dist_ci/) {
- $self->{SKIPHASH}{$_} = 1;
- }
- }
-
- # We run all the subdirectories now. They don't have much to query
- # from the parent, but the parent has to query them: if they need linking!
- unless ($self->{NORECURS}) {
- $self->eval_in_subdirs if @{$self->{DIR}};
- }
-
- my $section;
- foreach $section ( @MM_Sections ){
- print "Processing Makefile '$section' section\n" if ($Verbose >= 2);
- my($skipit) = $self->skipcheck($section);
- if ($skipit){
- push @{$self->{RESULT}}, "\n# --- MakeMaker $section section $skipit.";
- } else {
- my(%a) = %{$self->{$section} || {}};
- push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:";
- push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a;
- push @{$self->{RESULT}}, $self->nicetext($self->$section( %a ));
- }
- }
-
- push @{$self->{RESULT}}, "\n# End.";
-
- $self;
-}
-
-sub WriteEmptyMakefile {
- if (-f 'Makefile.old') {
- chmod 0666, 'Makefile.old';
- unlink 'Makefile.old' or warn "unlink Makefile.old: $!";
- }
- rename 'Makefile', 'Makefile.old' or warn "rename Makefile Makefile.old: $!"
- if -f 'Makefile';
- open MF, '> Makefile' or die "open Makefile for write: $!";
- print MF <<'EOP';
-all:
-
-clean:
-
-install:
-
-makemakerdflt:
-
-test:
-
-EOP
- close MF or die "close Makefile for write: $!";
-}
-
-sub check_manifest {
- print STDOUT "Checking if your kit is complete...\n";
- require ExtUtils::Manifest;
- $ExtUtils::Manifest::Quiet=$ExtUtils::Manifest::Quiet=1; #avoid warning
- my(@missed)=ExtUtils::Manifest::manicheck();
- if (@missed){
- print STDOUT "Warning: the following files are missing in your kit:\n";
- print "\t", join "\n\t", @missed;
- print STDOUT "\n";
- print STDOUT "Please inform the author.\n";
- } else {
- print STDOUT "Looks good\n";
- }
-}
-
-sub parse_args{
- my($self, @args) = @_;
- foreach (@args){
- unless (m/(.*?)=(.*)/){
- help(),exit 1 if m/^help$/;
- ++$Verbose if m/^verb/;
- next;
- }
- my($name, $value) = ($1, $2);
- if ($value =~ m/^~(\w+)?/){ # tilde with optional username
- $value =~ s [^~(\w*)]
- [$1 ?
- ((getpwnam($1))[7] || "~$1") :
- (getpwuid($>))[7]
- ]ex;
- }
- $self->{uc($name)} = $value;
- }
-
- # catch old-style 'potential_libs' and inform user how to 'upgrade'
- if (defined $self->{potential_libs}){
- my($msg)="'potential_libs' => '$self->{potential_libs}' should be";
- if ($self->{potential_libs}){
- print STDOUT "$msg changed to:\n\t'LIBS' => ['$self->{potential_libs}']\n";
- } else {
- print STDOUT "$msg deleted.\n";
- }
- $self->{LIBS} = [$self->{potential_libs}];
- delete $self->{potential_libs};
- }
- # catch old-style 'ARMAYBE' and inform user how to 'upgrade'
- if (defined $self->{ARMAYBE}){
- my($armaybe) = $self->{ARMAYBE};
- print STDOUT "ARMAYBE => '$armaybe' should be changed to:\n",
- "\t'dynamic_lib' => {ARMAYBE => '$armaybe'}\n";
- my(%dl) = %{$self->{dynamic_lib} || {}};
- $self->{dynamic_lib} = { %dl, ARMAYBE => $armaybe};
- delete $self->{ARMAYBE};
- }
- if (defined $self->{LDTARGET}){
- print STDOUT "LDTARGET should be changed to LDFROM\n";
- $self->{LDFROM} = $self->{LDTARGET};
- delete $self->{LDTARGET};
- }
- # Turn a DIR argument on the command line into an array
- if (defined $self->{DIR} && ref \$self->{DIR} eq 'SCALAR') {
- # So they can choose from the command line, which extensions they want
- # the grep enables them to have some colons too much in case they
- # have to build a list with the shell
- $self->{DIR} = [grep $_, split ":", $self->{DIR}];
- }
- # Turn a INCLUDE_EXT argument on the command line into an array
- if (defined $self->{INCLUDE_EXT} && ref \$self->{INCLUDE_EXT} eq 'SCALAR') {
- $self->{INCLUDE_EXT} = [grep $_, split '\s+', $self->{INCLUDE_EXT}];
- }
- # Turn a EXCLUDE_EXT argument on the command line into an array
- if (defined $self->{EXCLUDE_EXT} && ref \$self->{EXCLUDE_EXT} eq 'SCALAR') {
- $self->{EXCLUDE_EXT} = [grep $_, split '\s+', $self->{EXCLUDE_EXT}];
- }
- my $mmkey;
- foreach $mmkey (sort keys %$self){
- print STDOUT " $mmkey => ", neatvalue($self->{$mmkey}), "\n" if $Verbose;
- print STDOUT "'$mmkey' is not a known MakeMaker parameter name.\n"
- unless exists $Recognized_Att_Keys{$mmkey};
- }
- $| = 1 if $Verbose;
-}
-
-sub check_hints {
- my($self) = @_;
- # We allow extension-specific hints files.
-
- return unless -d "hints";
-
- # First we look for the best hintsfile we have
- my(@goodhints);
- my($hint)="${^O}_$Config{osvers}";
- $hint =~ s/\./_/g;
- $hint =~ s/_$//;
- return unless $hint;
-
- # Also try without trailing minor version numbers.
- while (1) {
- last if -f "hints/$hint.pl"; # found
- } continue {
- last unless $hint =~ s/_[^_]*$//; # nothing to cut off
- }
- return unless -f "hints/$hint.pl"; # really there
-
- # execute the hintsfile:
-# use FileHandle ();
-# my $fh = new FileHandle;
-# $fh->open("hints/$hint.pl");
- local *FH;
- open(FH,"hints/$hint.pl");
-# @goodhints = <$fh>;
- @goodhints = <FH>;
-# $fh->close;
- close FH;
- print STDOUT "Processing hints file hints/$hint.pl\n";
- eval join('',@goodhints);
- print STDOUT $@ if $@;
-}
-
-sub mv_all_methods {
- my($from,$to) = @_;
- my($method);
- my($symtab) = \%{"${from}::"};
-# no strict;
-
- # Here you see the *current* list of methods that are overridable
- # from Makefile.PL via MY:: subroutines. As of VERSION 5.07 I'm
- # still trying to reduce the list to some reasonable minimum --
- # because I want to make it easier for the user. A.K.
-
- foreach $method (@Overridable) {
-
- # We cannot say "next" here. Nick might call MY->makeaperl
- # which isn't defined right now
-
- # Above statement was written at 4.23 time when Tk-b8 was
- # around. As Tk-b9 only builds with 5.002something and MM 5 is
- # standard, we try to enable the next line again. It was
- # commented out until MM 5.23
-
- next unless defined &{"${from}::$method"};
-
- *{"${to}::$method"} = \&{"${from}::$method"};
-
- # delete would do, if we were sure, nobody ever called
- # MY->makeaperl directly
-
- # delete $symtab->{$method};
-
- # If we delete a method, then it will be undefined and cannot
- # be called. But as long as we have Makefile.PLs that rely on
- # %MY:: being intact, we have to fill the hole with an
- # inheriting method:
-
- eval "package MY; sub $method { shift->SUPER::$method(\@_); }";
- }
-
- # We have to clean out %INC also, because the current directory is
- # changed frequently and Graham Barr prefers to get his version
- # out of a History.pl file which is "required" so woudn't get
- # loaded again in another extension requiring a History.pl
-
- # With perl5.002_01 the deletion of entries in %INC caused Tk-b11
- # to core dump in the middle of a require statement. The required
- # file was Tk/MMutil.pm. The consequence is, we have to be
- # extremely careful when we try to give perl a reason to reload a
- # library with same name. The workaround prefers to drop nothing
- # from %INC and teach the writers not to use such libraries.
-
-# my $inc;
-# foreach $inc (keys %INC) {
-# #warn "***$inc*** deleted";
-# delete $INC{$inc};
-# }
-}
-
-sub skipcheck {
- my($self) = shift;
- my($section) = @_;
- if ($section eq 'dynamic') {
- print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
- "in skipped section 'dynamic_bs'\n"
- if $self->{SKIPHASH}{dynamic_bs} && $Verbose;
- print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
- "in skipped section 'dynamic_lib'\n"
- if $self->{SKIPHASH}{dynamic_lib} && $Verbose;
- }
- if ($section eq 'dynamic_lib') {
- print STDOUT "Warning (non-fatal): Target '\$(INST_DYNAMIC)' depends on ",
- "targets in skipped section 'dynamic_bs'\n"
- if $self->{SKIPHASH}{dynamic_bs} && $Verbose;
- }
- if ($section eq 'static') {
- print STDOUT "Warning (non-fatal): Target 'static' depends on targets ",
- "in skipped section 'static_lib'\n"
- if $self->{SKIPHASH}{static_lib} && $Verbose;
- }
- return 'skipped' if $self->{SKIPHASH}{$section};
- return '';
-}
-
-sub flush {
- my $self = shift;
- my($chunk);
-# use FileHandle ();
-# my $fh = new FileHandle;
- local *FH;
- print STDOUT "Writing $self->{MAKEFILE} for $self->{NAME}\n";
-
- unlink($self->{MAKEFILE}, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : '');
-# $fh->open(">MakeMaker.tmp") or die "Unable to open MakeMaker.tmp: $!";
- open(FH,">MakeMaker.tmp") or die "Unable to open MakeMaker.tmp: $!";
-
- for $chunk (@{$self->{RESULT}}) {
-# print $fh "$chunk\n";
- print FH "$chunk\n";
- }
-
-# $fh->close;
- close FH;
- my($finalname) = $self->{MAKEFILE};
- rename("MakeMaker.tmp", $finalname);
- chmod 0644, $finalname unless $Is_VMS;
-
- if ($self->{PARENT}) {
- foreach (keys %$self) { # safe memory
- delete $self->{$_} unless $Keep_after_flush{$_};
- }
- }
-
- system("$Config::Config{eunicefix} $finalname") unless $Config::Config{eunicefix} eq ":";
-}
-
-# The following mkbootstrap() is only for installations that are calling
-# the pre-4.1 mkbootstrap() from their old Makefiles. This MakeMaker
-# writes Makefiles, that use ExtUtils::Mkbootstrap directly.
-sub mkbootstrap {
- die <<END;
-!!! Your Makefile has been built such a long time ago, !!!
-!!! that is unlikely to work with current MakeMaker. !!!
-!!! Please rebuild your Makefile !!!
-END
-}
-
-# Ditto for mksymlists() as of MakeMaker 5.17
-sub mksymlists {
- die <<END;
-!!! Your Makefile has been built such a long time ago, !!!
-!!! that is unlikely to work with current MakeMaker. !!!
-!!! Please rebuild your Makefile !!!
-END
-}
-
-sub neatvalue {
- my($v) = @_;
- return "undef" unless defined $v;
- my($t) = ref $v;
- return "q[$v]" unless $t;
- if ($t eq 'ARRAY') {
- my(@m, $elem, @neat);
- push @m, "[";
- foreach $elem (@$v) {
- push @neat, "q[$elem]";
- }
- push @m, join ", ", @neat;
- push @m, "]";
- return join "", @m;
- }
- return "$v" unless $t eq 'HASH';
- my(@m, $key, $val);
- while (($key,$val) = each %$v){
- last unless defined $key; # cautious programming in case (undef,undef) is true
- push(@m,"$key=>".neatvalue($val)) ;
- }
- return "{ ".join(', ',@m)." }";
-}
-
-sub selfdocument {
- my($self) = @_;
- my(@m);
- if ($Verbose){
- push @m, "\n# Full list of MakeMaker attribute values:";
- foreach $key (sort keys %$self){
- next if $key eq 'RESULT' || $key =~ /^[A-Z][a-z]/;
- my($v) = neatvalue($self->{$key});
- $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
- $v =~ tr/\n/ /s;
- push @m, "# $key => $v";
- }
- }
- join "\n", @m;
-}
-
-package ExtUtils::MakeMaker;
-1;
-
-__END__
-
-=head1 NAME
-
-ExtUtils::MakeMaker - create an extension Makefile
-
-=head1 SYNOPSIS
-
-C<use ExtUtils::MakeMaker;>
-
-C<WriteMakefile( ATTRIBUTE =E<gt> VALUE [, ...] );>
-
-which is really
-
-C<MM-E<gt>new(\%att)-E<gt>flush;>
-
-=head1 DESCRIPTION
-
-This utility is designed to write a Makefile for an extension module
-from a Makefile.PL. It is based on the Makefile.SH model provided by
-Andy Dougherty and the perl5-porters.
-
-It splits the task of generating the Makefile into several subroutines
-that can be individually overridden. Each subroutine returns the text
-it wishes to have written to the Makefile.
-
-MakeMaker is object oriented. Each directory below the current
-directory that contains a Makefile.PL. Is treated as a separate
-object. This makes it possible to write an unlimited number of
-Makefiles with a single invocation of WriteMakefile().
-
-=head2 How To Write A Makefile.PL
-
-The short answer is: Don't.
-
- Always begin with h2xs.
- Always begin with h2xs!
- ALWAYS BEGIN WITH H2XS!
-
-even if you're not building around a header file, and even if you
-don't have an XS component.
-
-Run h2xs(1) before you start thinking about writing a module. For so
-called pm-only modules that consist of C<*.pm> files only, h2xs has
-the C<-X> switch. This will generate dummy files of all kinds that are
-useful for the module developer.
-
-The medium answer is:
-
- use ExtUtils::MakeMaker;
- WriteMakefile( NAME => "Foo::Bar" );
-
-The long answer is the rest of the manpage :-)
-
-=head2 Default Makefile Behaviour
-
-The generated Makefile enables the user of the extension to invoke
-
- perl Makefile.PL # optionally "perl Makefile.PL verbose"
- make
- make test # optionally set TEST_VERBOSE=1
- make install # See below
-
-The Makefile to be produced may be altered by adding arguments of the
-form C<KEY=VALUE>. E.g.
-
- perl Makefile.PL PREFIX=/tmp/myperl5
-
-Other interesting targets in the generated Makefile are
-
- make config # to check if the Makefile is up-to-date
- make clean # delete local temp files (Makefile gets renamed)
- make realclean # delete derived files (including ./blib)
- make ci # check in all the files in the MANIFEST file
- make dist # see below the Distribution Support section
-
-=head2 make test
-
-MakeMaker checks for the existence of a file named F<test.pl> in the
-current directory and if it exists it adds commands to the test target
-of the generated Makefile that will execute the script with the proper
-set of perl C<-I> options.
-
-MakeMaker also checks for any files matching glob("t/*.t"). It will
-add commands to the test target of the generated Makefile that execute
-all matching files via the L<Test::Harness> module with the C<-I>
-switches set correctly.
-
-=head2 make testdb
-
-A useful variation of the above is the target C<testdb>. It runs the
-test under the Perl debugger (see L<perldebug>). If the file
-F<test.pl> exists in the current directory, it is used for the test.
-
-If you want to debug some other testfile, set C<TEST_FILE> variable
-thusly:
-
- make testdb TEST_FILE=t/mytest.t
-
-By default the debugger is called using C<-d> option to perl. If you
-want to specify some other option, set C<TESTDB_SW> variable:
-
- make testdb TESTDB_SW=-Dx
-
-=head2 make install
-
-make alone puts all relevant files into directories that are named by
-the macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_HTMLLIBDIR,
-INST_HTMLSCRIPTDIR, INST_MAN1DIR, and INST_MAN3DIR. All these default
-to something below ./blib if you are I<not> building below the perl
-source directory. If you I<are> building below the perl source,
-INST_LIB and INST_ARCHLIB default to ../../lib, and INST_SCRIPT is not
-defined.
-
-The I<install> target of the generated Makefile copies the files found
-below each of the INST_* directories to their INSTALL*
-counterparts. Which counterparts are chosen depends on the setting of
-INSTALLDIRS according to the following table:
-
- INSTALLDIRS set to
- perl site
-
- INST_ARCHLIB INSTALLARCHLIB INSTALLSITEARCH
- INST_LIB INSTALLPRIVLIB INSTALLSITELIB
- INST_HTMLLIBDIR INSTALLHTMLPRIVLIBDIR INSTALLHTMLSITELIBDIR
- INST_HTMLSCRIPTDIR INSTALLHTMLSCRIPTDIR
- INST_BIN INSTALLBIN
- INST_SCRIPT INSTALLSCRIPT
- INST_MAN1DIR INSTALLMAN1DIR
- INST_MAN3DIR INSTALLMAN3DIR
-
-The INSTALL... macros in turn default to their %Config
-($Config{installprivlib}, $Config{installarchlib}, etc.) counterparts.
-
-You can check the values of these variables on your system with
-
- perl '-V:install.*'
-
-And to check the sequence in which the library directories are
-searched by perl, run
-
- perl -le 'print join $/, @INC'
-
-
-=head2 PREFIX and LIB attribute
-
-PREFIX and LIB can be used to set several INSTALL* attributes in one
-go. The quickest way to install a module in a non-standard place might
-be
-
- perl Makefile.PL LIB=~/lib
-
-This will install the module's architecture-independent files into
-~/lib, the architecture-dependent files into ~/lib/$archname.
-
-Another way to specify many INSTALL directories with a single
-parameter is PREFIX.
-
- perl Makefile.PL PREFIX=~
-
-This will replace the string specified by C<$Config{prefix}> in all
-C<$Config{install*}> values.
-
-Note, that in both cases the tilde expansion is done by MakeMaker, not
-by perl by default, nor by make.
-
-Conflicts between parameters LIB,
-PREFIX and the various INSTALL* arguments are resolved so that:
-
-=over 4
-
-=item *
-
-setting LIB overrides any setting of INSTALLPRIVLIB, INSTALLARCHLIB,
-INSTALLSITELIB, INSTALLSITEARCH (and they are not affected by PREFIX);
-
-=item *
-
-without LIB, setting PREFIX replaces the initial C<$Config{prefix}>
-part of those INSTALL* arguments, even if the latter are explicitly
-set (but are set to still start with C<$Config{prefix}>).
-
-=back
-
-If the user has superuser privileges, and is not working on AFS
-or relatives, then the defaults for
-INSTALLPRIVLIB, INSTALLARCHLIB, INSTALLSCRIPT, etc. will be appropriate,
-and this incantation will be the best:
-
- perl Makefile.PL; make; make test
- make install
-
-make install per default writes some documentation of what has been
-done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This feature
-can be bypassed by calling make pure_install.
-
-=head2 AFS users
-
-will have to specify the installation directories as these most
-probably have changed since perl itself has been installed. They will
-have to do this by calling
-
- perl Makefile.PL INSTALLSITELIB=/afs/here/today \
- INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
- make
-
-Be careful to repeat this procedure every time you recompile an
-extension, unless you are sure the AFS installation directories are
-still valid.
-
-=head2 Static Linking of a new Perl Binary
-
-An extension that is built with the above steps is ready to use on
-systems supporting dynamic loading. On systems that do not support
-dynamic loading, any newly created extension has to be linked together
-with the available resources. MakeMaker supports the linking process
-by creating appropriate targets in the Makefile whenever an extension
-is built. You can invoke the corresponding section of the makefile with
-
- make perl
-
-That produces a new perl binary in the current directory with all
-extensions linked in that can be found in INST_ARCHLIB , SITELIBEXP,
-and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on
-UNIX, this is called Makefile.aperl (may be system dependent). If you
-want to force the creation of a new perl, it is recommended, that you
-delete this Makefile.aperl, so the directories are searched-through
-for linkable libraries again.
-
-The binary can be installed into the directory where perl normally
-resides on your machine with
-
- make inst_perl
-
-To produce a perl binary with a different name than C<perl>, either say
-
- perl Makefile.PL MAP_TARGET=myperl
- make myperl
- make inst_perl
-
-or say
-
- perl Makefile.PL
- make myperl MAP_TARGET=myperl
- make inst_perl MAP_TARGET=myperl
-
-In any case you will be prompted with the correct invocation of the
-C<inst_perl> target that installs the new binary into INSTALLBIN.
-
-make inst_perl per default writes some documentation of what has been
-done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This
-can be bypassed by calling make pure_inst_perl.
-
-Warning: the inst_perl: target will most probably overwrite your
-existing perl binary. Use with care!
-
-Sometimes you might want to build a statically linked perl although
-your system supports dynamic loading. In this case you may explicitly
-set the linktype with the invocation of the Makefile.PL or make:
-
- perl Makefile.PL LINKTYPE=static # recommended
-
-or
-
- make LINKTYPE=static # works on most systems
-
-=head2 Determination of Perl Library and Installation Locations
-
-MakeMaker needs to know, or to guess, where certain things are
-located. Especially INST_LIB and INST_ARCHLIB (where to put the files
-during the make(1) run), PERL_LIB and PERL_ARCHLIB (where to read
-existing modules from), and PERL_INC (header files and C<libperl*.*>).
-
-Extensions may be built either using the contents of the perl source
-directory tree or from the installed perl library. The recommended way
-is to build extensions after you have run 'make install' on perl
-itself. You can do that in any directory on your hard disk that is not
-below the perl source tree. The support for extensions below the ext
-directory of the perl distribution is only good for the standard
-extensions that come with perl.
-
-If an extension is being built below the C<ext/> directory of the perl
-source then MakeMaker will set PERL_SRC automatically (e.g.,
-C<../..>). If PERL_SRC is defined and the extension is recognized as
-a standard extension, then other variables default to the following:
-
- PERL_INC = PERL_SRC
- PERL_LIB = PERL_SRC/lib
- PERL_ARCHLIB = PERL_SRC/lib
- INST_LIB = PERL_LIB
- INST_ARCHLIB = PERL_ARCHLIB
-
-If an extension is being built away from the perl source then MakeMaker
-will leave PERL_SRC undefined and default to using the installed copy
-of the perl library. The other variables default to the following:
-
- PERL_INC = $archlibexp/CORE
- PERL_LIB = $privlibexp
- PERL_ARCHLIB = $archlibexp
- INST_LIB = ./blib/lib
- INST_ARCHLIB = ./blib/arch
-
-If perl has not yet been installed then PERL_SRC can be defined on the
-command line as shown in the previous section.
-
-
-=head2 Which architecture dependent directory?
-
-If you don't want to keep the defaults for the INSTALL* macros,
-MakeMaker helps you to minimize the typing needed: the usual
-relationship between INSTALLPRIVLIB and INSTALLARCHLIB is determined
-by Configure at perl compilation time. MakeMaker supports the user who
-sets INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not,
-then MakeMaker defaults the latter to be the same subdirectory of
-INSTALLPRIVLIB as Configure decided for the counterparts in %Config ,
-otherwise it defaults to INSTALLPRIVLIB. The same relationship holds
-for INSTALLSITELIB and INSTALLSITEARCH.
-
-MakeMaker gives you much more freedom than needed to configure
-internal variables and get different results. It is worth to mention,
-that make(1) also lets you configure most of the variables that are
-used in the Makefile. But in the majority of situations this will not
-be necessary, and should only be done if the author of a package
-recommends it (or you know what you're doing).
-
-=head2 Using Attributes and Parameters
-
-The following attributes can be specified as arguments to WriteMakefile()
-or as NAME=VALUE pairs on the command line:
-
-=over 2
-
-=item ABSTRACT
-
-One line description of the module. Will be included in PPD file.
-
-=item ABSTRACT_FROM
-
-Name of the file that contains the package description. MakeMaker looks
-for a line in the POD matching /^($package\s-\s)(.*)/. This is typically
-the first line in the "=head1 NAME" section. $2 becomes the abstract.
-
-=item AUTHOR
-
-String containing name (and email address) of package author(s). Is used
-in PPD (Perl Package Description) files for PPM (Perl Package Manager).
-
-=item BINARY_LOCATION
-
-Used when creating PPD files for binary packages. It can be set to a
-full or relative path or URL to the binary archive for a particular
-architecture. For example:
-
- perl Makefile.PL BINARY_LOCATION=x86/Agent.tar.gz
-
-builds a PPD package that references a binary of the C<Agent> package,
-located in the C<x86> directory relative to the PPD itself.
-
-=item C
-
-Ref to array of *.c file names. Initialised from a directory scan
-and the values portion of the XS attribute hash. This is not
-currently used by MakeMaker but may be handy in Makefile.PLs.
-
-=item CAPI
-
-[This attribute is obsolete in Perl 5.6. PERL_OBJECT builds are C-compatible
-by default.]
-
-Switch to force usage of the Perl C API even when compiling for PERL_OBJECT.
-
-Note that this attribute is passed through to any recursive build,
-but if and only if the submodule's Makefile.PL itself makes no mention
-of the 'CAPI' attribute.
-
-=item CCFLAGS
-
-String that will be included in the compiler call command line between
-the arguments INC and OPTIMIZE.
-
-=item CONFIG
-
-Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
-config.sh. MakeMaker will add to CONFIG the following values anyway:
-ar
-cc
-cccdlflags
-ccdlflags
-dlext
-dlsrc
-ld
-lddlflags
-ldflags
-libc
-lib_ext
-obj_ext
-ranlib
-sitelibexp
-sitearchexp
-so
-
-=item CONFIGURE
-
-CODE reference. The subroutine should return a hash reference. The
-hash may contain further attributes, e.g. {LIBS =E<gt> ...}, that have to
-be determined by some evaluation method.
-
-=item DEFINE
-
-Something like C<"-DHAVE_UNISTD_H">
-
-=item DIR
-
-Ref to array of subdirectories containing Makefile.PLs e.g. [ 'sdbm'
-] in ext/SDBM_File
-
-=item DISTNAME
-
-Your name for distributing the package (by tar file). This defaults to
-NAME above.
-
-=item DL_FUNCS
-
-Hashref of symbol names for routines to be made available as universal
-symbols. Each key/value pair consists of the package name and an
-array of routine names in that package. Used only under AIX, OS/2,
-VMS and Win32 at present. The routine names supplied will be expanded
-in the same way as XSUB names are expanded by the XS() macro.
-Defaults to
-
- {"$(NAME)" => ["boot_$(NAME)" ] }
-
-e.g.
-
- {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
- "NetconfigPtr" => [ 'DESTROY'] }
-
-Please see the L<ExtUtils::Mksymlists> documentation for more information
-about the DL_FUNCS, DL_VARS and FUNCLIST attributes.
-
-=item DL_VARS
-
-Array of symbol names for variables to be made available as universal symbols.
-Used only under AIX, OS/2, VMS and Win32 at present. Defaults to [].
-(e.g. [ qw(Foo_version Foo_numstreams Foo_tree ) ])
-
-=item EXCLUDE_EXT
-
-Array of extension names to exclude when doing a static build. This
-is ignored if INCLUDE_EXT is present. Consult INCLUDE_EXT for more
-details. (e.g. [ qw( Socket POSIX ) ] )
-
-This attribute may be most useful when specified as a string on the
-command line: perl Makefile.PL EXCLUDE_EXT='Socket Safe'
-
-=item EXE_FILES
-
-Ref to array of executable files. The files will be copied to the
-INST_SCRIPT directory. Make realclean will delete them from there
-again.
-
-=item FIRST_MAKEFILE
-
-The name of the Makefile to be produced. Defaults to the contents of
-MAKEFILE, but can be overridden. This is used for the second Makefile
-that will be produced for the MAP_TARGET.
-
-=item FULLPERL
-
-Perl binary able to run this extension.
-
-=item FUNCLIST
-
-This provides an alternate means to specify function names to be
-exported from the extension. Its value is a reference to an
-array of function names to be exported by the extension. These
-names are passed through unaltered to the linker options file.
-
-=item H
-
-Ref to array of *.h file names. Similar to C.
-
-=item HTMLLIBPODS
-
-Hashref of .pm and .pod files. MakeMaker will default this to all
- .pod and any .pm files that include POD directives. The files listed
-here will be converted to HTML format and installed as was requested
-at Configure time.
-
-=item HTMLSCRIPTPODS
-
-Hashref of pod-containing files. MakeMaker will default this to all
-EXE_FILES files that include POD directives. The files listed
-here will be converted to HTML format and installed as was requested
-at Configure time.
-
-=item IMPORTS
-
-This attribute is used to specify names to be imported into the
-extension. It is only used on OS/2 and Win32.
-
-=item INC
-
-Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
-
-=item INCLUDE_EXT
-
-Array of extension names to be included when doing a static build.
-MakeMaker will normally build with all of the installed extensions when
-doing a static build, and that is usually the desired behavior. If
-INCLUDE_EXT is present then MakeMaker will build only with those extensions
-which are explicitly mentioned. (e.g. [ qw( Socket POSIX ) ])
-
-It is not necessary to mention DynaLoader or the current extension when
-filling in INCLUDE_EXT. If the INCLUDE_EXT is mentioned but is empty then
-only DynaLoader and the current extension will be included in the build.
-
-This attribute may be most useful when specified as a string on the
-command line: perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
-
-=item INSTALLARCHLIB
-
-Used by 'make install', which copies files from INST_ARCHLIB to this
-directory if INSTALLDIRS is set to perl.
-
-=item INSTALLBIN
-
-Directory to install binary files (e.g. tkperl) into.
-
-=item INSTALLDIRS
-
-Determines which of the two sets of installation directories to
-choose: installprivlib and installarchlib versus installsitelib and
-installsitearch. The first pair is chosen with INSTALLDIRS=perl, the
-second with INSTALLDIRS=site. Default is site.
-
-=item INSTALLHTMLPRIVLIBDIR
-
-This directory gets the HTML pages at 'make install' time. Defaults to
-$Config{installhtmlprivlibdir}.
-
-=item INSTALLHTMLSCRIPTDIR
-
-This directory gets the HTML pages at 'make install' time. Defaults to
-$Config{installhtmlscriptdir}.
-
-=item INSTALLHTMLSITELIBDIR
-
-This directory gets the HTML pages at 'make install' time. Defaults to
-$Config{installhtmlsitelibdir}.
-
-
-=item INSTALLMAN1DIR
-
-This directory gets the man pages at 'make install' time. Defaults to
-$Config{installman1dir}.
-
-=item INSTALLMAN3DIR
-
-This directory gets the man pages at 'make install' time. Defaults to
-$Config{installman3dir}.
-
-=item INSTALLPRIVLIB
-
-Used by 'make install', which copies files from INST_LIB to this
-directory if INSTALLDIRS is set to perl.
-
-=item INSTALLSCRIPT
-
-Used by 'make install' which copies files from INST_SCRIPT to this
-directory.
-
-=item INSTALLSITEARCH
-
-Used by 'make install', which copies files from INST_ARCHLIB to this
-directory if INSTALLDIRS is set to site (default).
-
-=item INSTALLSITELIB
-
-Used by 'make install', which copies files from INST_LIB to this
-directory if INSTALLDIRS is set to site (default).
-
-=item INST_ARCHLIB
-
-Same as INST_LIB for architecture dependent files.
-
-=item INST_BIN
-
-Directory to put real binary files during 'make'. These will be copied
-to INSTALLBIN during 'make install'
-
-=item INST_EXE
-
-Old name for INST_SCRIPT. Deprecated. Please use INST_SCRIPT if you
-need to use it.
-
-=item INST_HTMLLIBDIR
-
-Directory to hold the man pages in HTML format at 'make' time
-
-=item INST_HTMLSCRIPTDIR
-
-Directory to hold the man pages in HTML format at 'make' time
-
-=item INST_LIB
-
-Directory where we put library files of this extension while building
-it.
-
-=item INST_MAN1DIR
-
-Directory to hold the man pages at 'make' time
-
-=item INST_MAN3DIR
-
-Directory to hold the man pages at 'make' time
-
-=item INST_SCRIPT
-
-Directory, where executable files should be installed during
-'make'. Defaults to "./blib/script", just to have a dummy location during
-testing. make install will copy the files in INST_SCRIPT to
-INSTALLSCRIPT.
-
-=item LDFROM
-
-defaults to "$(OBJECT)" and is used in the ld command to specify
-what files to link/load from (also see dynamic_lib below for how to
-specify ld flags)
-
-=item LIB
-
-LIB should only be set at C<perl Makefile.PL> time but is allowed as a
-MakeMaker argument. It has the effect of
-setting both INSTALLPRIVLIB and INSTALLSITELIB to that value regardless any
-explicit setting of those arguments (or of PREFIX).
-INSTALLARCHLIB and INSTALLSITEARCH are set to the corresponding
-architecture subdirectory.
-
-=item LIBPERL_A
-
-The filename of the perllibrary that will be used together with this
-extension. Defaults to libperl.a.
-
-=item LIBS
-
-An anonymous array of alternative library
-specifications to be searched for (in order) until
-at least one library is found. E.g.
-
- 'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
-
-Mind, that any element of the array
-contains a complete set of arguments for the ld
-command. So do not specify
-
- 'LIBS' => ["-ltcl", "-ltk", "-lX11"]
-
-See ODBM_File/Makefile.PL for an example, where an array is needed. If
-you specify a scalar as in
-
- 'LIBS' => "-ltcl -ltk -lX11"
-
-MakeMaker will turn it into an array with one element.
-
-=item LINKTYPE
-
-'static' or 'dynamic' (default unless usedl=undef in
-config.sh). Should only be used to force static linking (also see
-linkext below).
-
-=item MAKEAPERL
-
-Boolean which tells MakeMaker, that it should include the rules to
-make a perl. This is handled automatically as a switch by
-MakeMaker. The user normally does not need it.
-
-=item MAKEFILE
-
-The name of the Makefile to be produced.
-
-=item MAN1PODS
-
-Hashref of pod-containing files. MakeMaker will default this to all
-EXE_FILES files that include POD directives. The files listed
-here will be converted to man pages and installed as was requested
-at Configure time.
-
-=item MAN3PODS
-
-Hashref of .pm and .pod files. MakeMaker will default this to all
- .pod and any .pm files that include POD directives. The files listed
-here will be converted to man pages and installed as was requested
-at Configure time.
-
-=item MAP_TARGET
-
-If it is intended, that a new perl binary be produced, this variable
-may hold a name for that binary. Defaults to perl
-
-=item MYEXTLIB
-
-If the extension links to a library that it builds set this to the
-name of the library (see SDBM_File)
-
-=item NAME
-
-Perl module name for this extension (DBD::Oracle). This will default
-to the directory name but should be explicitly defined in the
-Makefile.PL.
-
-=item NEEDS_LINKING
-
-MakeMaker will figure out if an extension contains linkable code
-anywhere down the directory tree, and will set this variable
-accordingly, but you can speed it up a very little bit if you define
-this boolean variable yourself.
-
-=item NOECHO
-
-Defaults to C<@>. By setting it to an empty string you can generate a
-Makefile that echos all commands. Mainly used in debugging MakeMaker
-itself.
-
-=item NORECURS
-
-Boolean. Attribute to inhibit descending into subdirectories.
-
-=item NO_VC
-
-In general, any generated Makefile checks for the current version of
-MakeMaker and the version the Makefile was built under. If NO_VC is
-set, the version check is neglected. Do not write this into your
-Makefile.PL, use it interactively instead.
-
-=item OBJECT
-
-List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
-string containing all object files, e.g. "tkpBind.o
-tkpButton.o tkpCanvas.o"
-
-(Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.)
-
-=item OPTIMIZE
-
-Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
-passed to subdirectory makes.
-
-=item PERL
-
-Perl binary for tasks that can be done by miniperl
-
-=item PERLMAINCC
-
-The call to the program that is able to compile perlmain.c. Defaults
-to $(CC).
-
-=item PERL_ARCHLIB
-
-Same as below, but for architecture dependent files.
-
-=item PERL_LIB
-
-Directory containing the Perl library to use.
-
-=item PERL_MALLOC_OK
-
-defaults to 0. Should be set to TRUE if the extension can work with
-the memory allocation routines substituted by the Perl malloc() subsystem.
-This should be applicable to most extensions with exceptions of those
-
-=over 4
-
-=item *
-
-with bugs in memory allocations which are caught by Perl's malloc();
-
-=item *
-
-which interact with the memory allocator in other ways than via
-malloc(), realloc(), free(), calloc(), sbrk() and brk();
-
-=item *
-
-which rely on special alignment which is not provided by Perl's malloc().
-
-=back
-
-B<NOTE.> Negligence to set this flag in I<any one> of loaded extension
-nullifies many advantages of Perl's malloc(), such as better usage of
-system resources, error detection, memory usage reporting, catchable failure
-of memory allocations, etc.
-
-=item PERL_SRC
-
-Directory containing the Perl source code (use of this should be
-avoided, it may be undefined)
-
-=item PERM_RW
-
-Desired permission for read/writable files. Defaults to C<644>.
-See also L<MM_Unix/perm_rw>.
-
-=item PERM_RWX
-
-Desired permission for executable files. Defaults to C<755>.
-See also L<MM_Unix/perm_rwx>.
-
-=item PL_FILES
-
-Ref to hash of files to be processed as perl programs. MakeMaker
-will default to any found *.PL file (except Makefile.PL) being keys
-and the basename of the file being the value. E.g.
-
- {'foobar.PL' => 'foobar'}
-
-The *.PL files are expected to produce output to the target files
-themselves. If multiple files can be generated from the same *.PL
-file then the value in the hash can be a reference to an array of
-target file names. E.g.
-
- {'foobar.PL' => ['foobar1','foobar2']}
-
-=item PM
-
-Hashref of .pm files and *.pl files to be installed. e.g.
-
- {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
-
-By default this will include *.pm and *.pl and the files found in
-the PMLIBDIRS directories. Defining PM in the
-Makefile.PL will override PMLIBDIRS.
-
-=item PMLIBDIRS
-
-Ref to array of subdirectories containing library files. Defaults to
-[ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
-they contain will be installed in the corresponding location in the
-library. A libscan() method can be used to alter the behaviour.
-Defining PM in the Makefile.PL will override PMLIBDIRS.
-
-(Where BASEEXT is the last component of NAME.)
-
-=item PM_FILTER
-
-A filter program, in the traditional Unix sense (input from stdin, output
-to stdout) that is passed on each .pm file during the build (in the
-pm_to_blib() phase). It is empty by default, meaning no filtering is done.
-
-Great care is necessary when defining the command if quoting needs to be
-done. For instance, you would need to say:
-
- {'PM_FILTER' => 'grep -v \\"^\\#\\"'}
-
-to remove all the leading coments on the fly during the build. The
-extra \\ are necessary, unfortunately, because this variable is interpolated
-within the context of a Perl program built on the command line, and double
-quotes are what is used with the -e switch to build that command line. The
-# is escaped for the Makefile, since what is going to be generated will then
-be:
-
- PM_FILTER = grep -v \"^\#\"
-
-Without the \\ before the #, we'd have the start of a Makefile comment,
-and the macro would be incorrectly defined.
-
-=item POLLUTE
-
-Release 5.005 grandfathered old global symbol names by providing preprocessor
-macros for extension source compatibility. As of release 5.6, these
-preprocessor definitions are not available by default. The POLLUTE flag
-specifies that the old names should still be defined:
-
- perl Makefile.PL POLLUTE=1
-
-Please inform the module author if this is necessary to successfully install
-a module under 5.6 or later.
-
-=item PPM_INSTALL_EXEC
-
-Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
-
-=item PPM_INSTALL_SCRIPT
-
-Name of the script that gets executed by the Perl Package Manager after
-the installation of a package.
-
-=item PREFIX
-
-Can be used to set the three INSTALL* attributes in one go (except for
-probably INSTALLMAN1DIR, if it is not below PREFIX according to
-%Config). They will have PREFIX as a common directory node and will
-branch from that node into lib/, lib/ARCHNAME or whatever Configure
-decided at the build time of your perl (unless you override one of
-them, of course).
-
-=item PREREQ_PM
-
-Hashref: Names of modules that need to be available to run this
-extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
-desired version is the value. If the required version number is 0, we
-only check if any version is installed already.
-
-=item SKIP
-
-Arryref. E.g. [qw(name1 name2)] skip (do not write) sections of the
-Makefile. Caution! Do not use the SKIP attribute for the negligible
-speedup. It may seriously damage the resulting Makefile. Only use it
-if you really need it.
-
-=item TYPEMAPS
-
-Ref to array of typemap file names. Use this when the typemaps are
-in some directory other than the current directory or when they are
-not named B<typemap>. The last typemap in the list takes
-precedence. A typemap in the current directory has highest
-precedence, even if it isn't listed in TYPEMAPS. The default system
-typemap has lowest precedence.
-
-=item VERSION
-
-Your version number for distributing the package. This defaults to
-0.1.
-
-=item VERSION_FROM
-
-Instead of specifying the VERSION in the Makefile.PL you can let
-MakeMaker parse a file to determine the version number. The parsing
-routine requires that the file named by VERSION_FROM contains one
-single line to compute the version number. The first line in the file
-that contains the regular expression
-
- /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
-
-will be evaluated with eval() and the value of the named variable
-B<after> the eval() will be assigned to the VERSION attribute of the
-MakeMaker object. The following lines will be parsed o.k.:
-
- $VERSION = '1.00';
- *VERSION = \'1.01';
- ( $VERSION ) = '$Revision: 1.222 $ ' =~ /\$Revision:\s+([^\s]+)/;
- $FOO::VERSION = '1.10';
- *FOO::VERSION = \'1.11';
- our $VERSION = 1.2.3; # new for perl5.6.0
-
-but these will fail:
-
- my $VERSION = '1.01';
- local $VERSION = '1.02';
- local $FOO::VERSION = '1.30';
-
-(Putting C<my> or C<local> on the preceding line will work o.k.)
-
-The file named in VERSION_FROM is not added as a dependency to
-Makefile. This is not really correct, but it would be a major pain
-during development to have to rewrite the Makefile for any smallish
-change in that file. If you want to make sure that the Makefile
-contains the correct VERSION macro after any change of the file, you
-would have to do something like
-
- depend => { Makefile => '$(VERSION_FROM)' }
-
-See attribute C<depend> below.
-
-=item XS
-
-Hashref of .xs files. MakeMaker will default this. e.g.
-
- {'name_of_file.xs' => 'name_of_file.c'}
-
-The .c files will automatically be included in the list of files
-deleted by a make clean.
-
-=item XSOPT
-
-String of options to pass to xsubpp. This might include C<-C++> or
-C<-extern>. Do not include typemaps here; the TYPEMAP parameter exists for
-that purpose.
-
-=item XSPROTOARG
-
-May be set to an empty string, which is identical to C<-prototypes>, or
-C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
-defaults to the empty string.
-
-=item XS_VERSION
-
-Your version number for the .xs file of this package. This defaults
-to the value of the VERSION attribute.
-
-=back
-
-=head2 Additional lowercase attributes
-
-can be used to pass parameters to the methods which implement that
-part of the Makefile.
-
-=over 2
-
-=item clean
-
- {FILES => "*.xyz foo"}
-
-=item depend
-
- {ANY_TARGET => ANY_DEPENDECY, ...}
-
-(ANY_TARGET must not be given a double-colon rule by MakeMaker.)
-
-=item dist
-
- {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
- SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
- ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
-
-If you specify COMPRESS, then SUFFIX should also be altered, as it is
-needed to tell make the target file of the compression. Setting
-DIST_CP to ln can be useful, if you need to preserve the timestamps on
-your files. DIST_CP can take the values 'cp', which copies the file,
-'ln', which links the file, and 'best' which copies symbolic links and
-links the rest. Default is 'best'.
-
-=item dynamic_lib
-
- {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
-
-=item linkext
-
- {LINKTYPE => 'static', 'dynamic' or ''}
-
-NB: Extensions that have nothing but *.pm files had to say
-
- {LINKTYPE => ''}
-
-with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
-can be deleted safely. MakeMaker recognizes when there's nothing to
-be linked.
-
-=item macro
-
- {ANY_MACRO => ANY_VALUE, ...}
-
-=item realclean
-
- {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
-
-=item test
-
- {TESTS => 't/*.t'}
-
-=item tool_autosplit
-
- {MAXLEN => 8}
-
-=back
-
-=head2 Overriding MakeMaker Methods
-
-If you cannot achieve the desired Makefile behaviour by specifying
-attributes you may define private subroutines in the Makefile.PL.
-Each subroutines returns the text it wishes to have written to
-the Makefile. To override a section of the Makefile you can
-either say:
-
- sub MY::c_o { "new literal text" }
-
-or you can edit the default by saying something like:
-
- sub MY::c_o {
- package MY; # so that "SUPER" works right
- my $inherited = shift->SUPER::c_o(@_);
- $inherited =~ s/old text/new text/;
- $inherited;
- }
-
-If you are running experiments with embedding perl as a library into
-other applications, you might find MakeMaker is not sufficient. You'd
-better have a look at ExtUtils::Embed which is a collection of utilities
-for embedding.
-
-If you still need a different solution, try to develop another
-subroutine that fits your needs and submit the diffs to
-F<perl5-porters@perl.org> or F<comp.lang.perl.moderated> as appropriate.
-
-For a complete description of all MakeMaker methods see L<ExtUtils::MM_Unix>.
-
-Here is a simple example of how to add a new target to the generated
-Makefile:
-
- sub MY::postamble {
- '
- $(MYEXTLIB): sdbm/Makefile
- cd sdbm && $(MAKE) all
- ';
- }
-
-
-=head2 Hintsfile support
-
-MakeMaker.pm uses the architecture specific information from
-Config.pm. In addition it evaluates architecture specific hints files
-in a C<hints/> directory. The hints files are expected to be named
-like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
-name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
-MakeMaker within the WriteMakefile() subroutine, and can be used to
-execute commands as well as to include special variables. The rules
-which hintsfile is chosen are the same as in Configure.
-
-The hintsfile is eval()ed immediately after the arguments given to
-WriteMakefile are stuffed into a hash reference $self but before this
-reference becomes blessed. So if you want to do the equivalent to
-override or create an attribute you would say something like
-
- $self->{LIBS} = ['-ldbm -lucb -lc'];
-
-=head2 Distribution Support
-
-For authors of extensions MakeMaker provides several Makefile
-targets. Most of the support comes from the ExtUtils::Manifest module,
-where additional documentation can be found.
-
-=over 4
-
-=item make distcheck
-
-reports which files are below the build directory but not in the
-MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
-details)
-
-=item make skipcheck
-
-reports which files are skipped due to the entries in the
-C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
-details)
-
-=item make distclean
-
-does a realclean first and then the distcheck. Note that this is not
-needed to build a new distribution as long as you are sure that the
-MANIFEST file is ok.
-
-=item make manifest
-
-rewrites the MANIFEST file, adding all remaining files found (See
-ExtUtils::Manifest::mkmanifest() for details)
-
-=item make distdir
-
-Copies all the files that are in the MANIFEST file to a newly created
-directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
-exists, it will be removed first.
-
-=item make disttest
-
-Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
-a make test in that directory.
-
-=item make tardist
-
-First does a distdir. Then a command $(PREOP) which defaults to a null
-command, followed by $(TOUNIX), which defaults to a null command under
-UNIX, and will convert files in distribution directory to UNIX format
-otherwise. Next it runs C<tar> on that directory into a tarfile and
-deletes the directory. Finishes with a command $(POSTOP) which
-defaults to a null command.
-
-=item make dist
-
-Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
-
-=item make uutardist
-
-Runs a tardist first and uuencodes the tarfile.
-
-=item make shdist
-
-First does a distdir. Then a command $(PREOP) which defaults to a null
-command. Next it runs C<shar> on that directory into a sharfile and
-deletes the intermediate directory again. Finishes with a command
-$(POSTOP) which defaults to a null command. Note: For shdist to work
-properly a C<shar> program that can handle directories is mandatory.
-
-=item make zipdist
-
-First does a distdir. Then a command $(PREOP) which defaults to a null
-command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
-zipfile. Then deletes that directory. Finishes with a command
-$(POSTOP) which defaults to a null command.
-
-=item make ci
-
-Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
-
-=back
-
-Customization of the dist targets can be done by specifying a hash
-reference to the dist attribute of the WriteMakefile call. The
-following parameters are recognized:
-
- CI ('ci -u')
- COMPRESS ('gzip --best')
- POSTOP ('@ :')
- PREOP ('@ :')
- TO_UNIX (depends on the system)
- RCS_LABEL ('rcs -q -Nv$(VERSION_SYM):')
- SHAR ('shar')
- SUFFIX ('.gz')
- TAR ('tar')
- TARFLAGS ('cvf')
- ZIP ('zip')
- ZIPFLAGS ('-r')
-
-An example:
-
- WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
-
-=head2 Disabling an extension
-
-If some events detected in F<Makefile.PL> imply that there is no way
-to create the Module, but this is a normal state of things, then you
-can create a F<Makefile> which does nothing, but succeeds on all the
-"usual" build targets. To do so, use
-
- ExtUtils::MakeMaker::WriteEmptyMakefile();
-
-instead of WriteMakefile().
-
-This may be useful if other modules expect this module to be I<built>
-OK, as opposed to I<work> OK (say, this system-dependent module builds
-in a subdirectory of some other distribution, or is listed as a
-dependency in a CPAN::Bundle, but the functionality is supported by
-different means on the current architecture).
-
-=head1 ENVIRONMENT
-
-=over 8
-
-=item PERL_MM_OPT
-
-Command line options used by C<MakeMaker-E<gt>new()>, and thus by
-C<WriteMakefile()>. The string is split on whitespace, and the result
-is processed before any actual command line arguments are processed.
-
-=back
-
-=head1 SEE ALSO
-
-ExtUtils::MM_Unix, ExtUtils::Manifest, ExtUtils::testlib,
-ExtUtils::Install, ExtUtils::Embed
-
-=head1 AUTHORS
-
-Andy Dougherty <F<doughera@lafcol.lafayette.edu>>, Andreas KE<ouml>nig
-<F<A.Koenig@franz.ww.TU-Berlin.DE>>, Tim Bunce <F<Tim.Bunce@ig.co.uk>>.
-VMS support by Charles Bailey <F<bailey@newman.upenn.edu>>. OS/2
-support by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>. Contact the
-makemaker mailing list C<mailto:makemaker@franz.ww.tu-berlin.de>, if
-you have any questions.
-
-=cut
diff --git a/contrib/perl5/lib/ExtUtils/Manifest.pm b/contrib/perl5/lib/ExtUtils/Manifest.pm
deleted file mode 100644
index 50a4263..0000000
--- a/contrib/perl5/lib/ExtUtils/Manifest.pm
+++ /dev/null
@@ -1,463 +0,0 @@
-package ExtUtils::Manifest;
-
-require Exporter;
-use Config;
-use File::Find;
-use File::Copy 'copy';
-use Carp;
-use strict;
-
-use vars qw($VERSION @ISA @EXPORT_OK
- $Is_MacOS $Is_VMS $Debug $Verbose $Quiet $MANIFEST $found);
-
-$VERSION = substr(q$Revision: 1.33 $, 10);
-@ISA=('Exporter');
-@EXPORT_OK = ('mkmanifest', 'manicheck', 'fullcheck', 'filecheck',
- 'skipcheck', 'maniread', 'manicopy');
-
-$Is_MacOS = $^O eq 'MacOS';
-$Is_VMS = $^O eq 'VMS';
-if ($Is_VMS) { require File::Basename }
-
-$Debug = 0;
-$Verbose = 1;
-$Quiet = 0;
-$MANIFEST = 'MANIFEST';
-
-# Really cool fix from Ilya :)
-unless (defined $Config{d_link}) {
- no warnings;
- *ln = \&cp;
-}
-
-sub mkmanifest {
- my $manimiss = 0;
- my $read = maniread() or $manimiss++;
- $read = {} if $manimiss;
- local *M;
- rename $MANIFEST, "$MANIFEST.bak" unless $manimiss;
- open M, ">$MANIFEST" or die "Could not open $MANIFEST: $!";
- my $matches = _maniskip();
- my $found = manifind();
- my($key,$val,$file,%all);
- %all = (%$found, %$read);
- $all{$MANIFEST} = ($Is_VMS ? "$MANIFEST\t\t" : '') . 'This list of files'
- if $manimiss; # add new MANIFEST to known file list
- foreach $file (sort keys %all) {
- next if &$matches($file);
- if ($Verbose){
- warn "Added to $MANIFEST: $file\n" unless exists $read->{$file};
- }
- my $text = $all{$file};
- ($file,$text) = split(/\s+/,$text,2) if $Is_VMS && $text;
- $file = _unmacify($file);
- my $tabs = (5 - (length($file)+1)/8);
- $tabs = 1 if $tabs < 1;
- $tabs = 0 unless $text;
- print M $file, "\t" x $tabs, $text, "\n";
- }
- close M;
-}
-
-sub manifind {
- local $found = {};
- find(sub {return if -d $_;
- (my $name = $File::Find::name) =~ s|^\./||;
- $name =~ s/^:([^:]+)$/$1/ if $Is_MacOS;
- warn "Debug: diskfile $name\n" if $Debug;
- $name =~ s#(.*)\.$#\L$1# if $Is_VMS;
- $found->{$name} = "";}, $Is_MacOS ? ":" : ".");
- $found;
-}
-
-sub fullcheck {
- _manicheck(3);
-}
-
-sub manicheck {
- return @{(_manicheck(1))[0]};
-}
-
-sub filecheck {
- return @{(_manicheck(2))[1]};
-}
-
-sub skipcheck {
- _manicheck(6);
-}
-
-sub _manicheck {
- my($arg) = @_;
- my $read = maniread();
- my $found = manifind();
- my $file;
- my $dosnames=(defined(&Dos::UseLFN) && Dos::UseLFN()==0);
- my(@missfile,@missentry);
- if ($arg & 1){
- foreach $file (sort keys %$read){
- warn "Debug: manicheck checking from $MANIFEST $file\n" if $Debug;
- if ($dosnames){
- $file = lc $file;
- $file =~ s=(\.(\w|-)+)=substr ($1,0,4)=ge;
- $file =~ s=((\w|-)+)=substr ($1,0,8)=ge;
- }
- unless ( exists $found->{$file} ) {
- warn "No such file: $file\n" unless $Quiet;
- push @missfile, $file;
- }
- }
- }
- if ($arg & 2){
- $read ||= {};
- my $matches = _maniskip();
- my $skipwarn = $arg & 4;
- foreach $file (sort keys %$found){
- if (&$matches($file)){
- warn "Skipping $file\n" if $skipwarn;
- next;
- }
- warn "Debug: manicheck checking from disk $file\n" if $Debug;
- unless ( exists $read->{$file} ) {
- my $canon = "\t" . _unmacify($file) if $Is_MacOS;
- warn "Not in $MANIFEST: $file$canon\n" unless $Quiet;
- push @missentry, $file;
- }
- }
- }
- (\@missfile,\@missentry);
-}
-
-sub maniread {
- my ($mfile) = @_;
- $mfile ||= $MANIFEST;
- my $read = {};
- local *M;
- unless (open M, $mfile){
- warn "$mfile: $!";
- return $read;
- }
- while (<M>){
- chomp;
- next if /^#/;
- if ($Is_MacOS) {
- my($item,$text) = /^(\S+)\s*(.*)/;
- $item = _macify($item);
- $item =~ s/\\([0-3][0-7][0-7])/sprintf("%c", oct($1))/ge;
- $read->{$item}=$text;
- }
- elsif ($Is_VMS) {
- my($file)= /^(\S+)/;
- next unless $file;
- my($base,$dir) = File::Basename::fileparse($file);
- # Resolve illegal file specifications in the same way as tar
- $dir =~ tr/./_/;
- my(@pieces) = split(/\./,$base);
- if (@pieces > 2) { $base = shift(@pieces) . '.' . join('_',@pieces); }
- my $okfile = "$dir$base";
- warn "Debug: Illegal name $file changed to $okfile\n" if $Debug;
- $read->{"\L$okfile"}=$_;
- }
- else { /^(\S+)\s*(.*)/ and $read->{$1}=$2; }
- }
- close M;
- $read;
-}
-
-# returns an anonymous sub that decides if an argument matches
-sub _maniskip {
- my ($mfile) = @_;
- my $matches = sub {0};
- my @skip ;
- $mfile ||= "$MANIFEST.SKIP";
- local *M;
- return $matches unless -f $mfile;
- open M, $mfile or return $matches;
- while (<M>){
- chomp;
- next if /^#/;
- next if /^\s*$/;
- push @skip, _macify($_);
- }
- close M;
- my $opts = $Is_VMS ? 'oi ' : 'o ';
- my $sub = "\$matches = "
- . "sub { my(\$arg)=\@_; return 1 if "
- . join (" || ", (map {s!/!\\/!g; "\$arg =~ m/$_/$opts"} @skip), 0)
- . " }";
- eval $sub;
- print "Debug: $sub\n" if $Debug;
- $matches;
-}
-
-sub manicopy {
- my($read,$target,$how)=@_;
- croak "manicopy() called without target argument" unless defined $target;
- $how ||= 'cp';
- require File::Path;
- require File::Basename;
- my(%dirs,$file);
- $target = VMS::Filespec::unixify($target) if $Is_VMS;
- File::Path::mkpath([ $target ],! $Quiet,$Is_VMS ? undef : 0755);
- foreach $file (keys %$read){
- if ($Is_MacOS) {
- if ($file =~ m!:!) {
- my $dir = _maccat($target, $file);
- $dir =~ s/[^:]+$//;
- File::Path::mkpath($dir,1,0755);
- }
- cp_if_diff($file, _maccat($target, $file), $how);
- } else {
- $file = VMS::Filespec::unixify($file) if $Is_VMS;
- if ($file =~ m!/!) { # Ilya, that hurts, I fear, or maybe not?
- my $dir = File::Basename::dirname($file);
- $dir = VMS::Filespec::unixify($dir) if $Is_VMS;
- File::Path::mkpath(["$target/$dir"],! $Quiet,$Is_VMS ? undef : 0755);
- }
- cp_if_diff($file, "$target/$file", $how);
- }
- }
-}
-
-sub cp_if_diff {
- my($from, $to, $how)=@_;
- -f $from or carp "$0: $from not found";
- my($diff) = 0;
- local(*F,*T);
- open(F,"< $from\0") or croak "Can't read $from: $!\n";
- if (open(T,"< $to\0")) {
- while (<F>) { $diff++,last if $_ ne <T>; }
- $diff++ unless eof(T);
- close T;
- }
- else { $diff++; }
- close F;
- if ($diff) {
- if (-e $to) {
- unlink($to) or confess "unlink $to: $!";
- }
- STRICT_SWITCH: {
- best($from,$to), last STRICT_SWITCH if $how eq 'best';
- cp($from,$to), last STRICT_SWITCH if $how eq 'cp';
- ln($from,$to), last STRICT_SWITCH if $how eq 'ln';
- croak("ExtUtils::Manifest::cp_if_diff " .
- "called with illegal how argument [$how]. " .
- "Legal values are 'best', 'cp', and 'ln'.");
- }
- }
-}
-
-sub cp {
- my ($srcFile, $dstFile) = @_;
- my ($perm,$access,$mod) = (stat $srcFile)[2,8,9];
- copy($srcFile,$dstFile);
- utime $access, $mod + ($Is_VMS ? 1 : 0), $dstFile;
- # chmod a+rX-w,go-w
- chmod( 0444 | ( $perm & 0111 ? 0111 : 0 ), $dstFile ) unless ($^O eq 'MacOS');
-}
-
-sub ln {
- my ($srcFile, $dstFile) = @_;
- return &cp if $Is_VMS or ($^O eq 'MSWin32' and Win32::IsWin95());
- link($srcFile, $dstFile);
- local($_) = $dstFile; # chmod a+r,go-w+X (except "X" only applies to u=x)
- my $mode= 0444 | (stat)[2] & 0700;
- if (! chmod( $mode | ( $mode & 0100 ? 0111 : 0 ), $_ )) {
- unlink $dstFile;
- return;
- }
- 1;
-}
-
-sub best {
- my ($srcFile, $dstFile) = @_;
- if (-l $srcFile) {
- cp($srcFile, $dstFile);
- } else {
- ln($srcFile, $dstFile) or cp($srcFile, $dstFile);
- }
-}
-
-sub _macify {
- my($file) = @_;
-
- return $file unless $Is_MacOS;
-
- $file =~ s|^\./||;
- if ($file =~ m|/|) {
- $file =~ s|/+|:|g;
- $file = ":$file";
- }
-
- $file;
-}
-
-sub _maccat {
- my($f1, $f2) = @_;
-
- return "$f1/$f2" unless $Is_MacOS;
-
- $f1 .= ":$f2";
- $f1 =~ s/([^:]:):/$1/g;
- return $f1;
-}
-
-sub _unmacify {
- my($file) = @_;
-
- return $file unless $Is_MacOS;
-
- $file =~ s|^:||;
- $file =~ s|([/ \n])|sprintf("\\%03o", unpack("c", $1))|ge;
- $file =~ y|:|/|;
-
- $file;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-ExtUtils::Manifest - utilities to write and check a MANIFEST file
-
-=head1 SYNOPSIS
-
- require ExtUtils::Manifest;
-
- ExtUtils::Manifest::mkmanifest;
-
- ExtUtils::Manifest::manicheck;
-
- ExtUtils::Manifest::filecheck;
-
- ExtUtils::Manifest::fullcheck;
-
- ExtUtils::Manifest::skipcheck;
-
- ExtUtils::Manifest::manifind();
-
- ExtUtils::Manifest::maniread($file);
-
- ExtUtils::Manifest::manicopy($read,$target,$how);
-
-=head1 DESCRIPTION
-
-mkmanifest() writes all files in and below the current directory to a
-file named in the global variable $ExtUtils::Manifest::MANIFEST (which
-defaults to C<MANIFEST>) in the current directory. It works similar to
-
- find . -print
-
-but in doing so checks each line in an existing C<MANIFEST> file and
-includes any comments that are found in the existing C<MANIFEST> file
-in the new one. Anything between white space and an end of line within
-a C<MANIFEST> file is considered to be a comment. Filenames and
-comments are separated by one or more TAB characters in the
-output. All files that match any regular expression in a file
-C<MANIFEST.SKIP> (if such a file exists) are ignored.
-
-manicheck() checks if all the files within a C<MANIFEST> in the
-current directory really do exist. It only reports discrepancies and
-exits silently if MANIFEST and the tree below the current directory
-are in sync.
-
-filecheck() finds files below the current directory that are not
-mentioned in the C<MANIFEST> file. An optional file C<MANIFEST.SKIP>
-will be consulted. Any file matching a regular expression in such a
-file will not be reported as missing in the C<MANIFEST> file.
-
-fullcheck() does both a manicheck() and a filecheck().
-
-skipcheck() lists all the files that are skipped due to your
-C<MANIFEST.SKIP> file.
-
-manifind() returns a hash reference. The keys of the hash are the
-files found below the current directory.
-
-maniread($file) reads a named C<MANIFEST> file (defaults to
-C<MANIFEST> in the current directory) and returns a HASH reference
-with files being the keys and comments being the values of the HASH.
-Blank lines and lines which start with C<#> in the C<MANIFEST> file
-are discarded.
-
-C<manicopy($read,$target,$how)> copies the files that are the keys in
-the HASH I<%$read> to the named target directory. The HASH reference
-$read is typically returned by the maniread() function. This
-function is useful for producing a directory tree identical to the
-intended distribution tree. The third parameter $how can be used to
-specify a different methods of "copying". Valid values are C<cp>,
-which actually copies the files, C<ln> which creates hard links, and
-C<best> which mostly links the files but copies any symbolic link to
-make a tree without any symbolic link. Best is the default.
-
-=head1 MANIFEST.SKIP
-
-The file MANIFEST.SKIP may contain regular expressions of files that
-should be ignored by mkmanifest() and filecheck(). The regular
-expressions should appear one on each line. Blank lines and lines
-which start with C<#> are skipped. Use C<\#> if you need a regular
-expression to start with a sharp character. A typical example:
-
- \bRCS\b
- ^MANIFEST\.
- ^Makefile$
- ~$
- \.html$
- \.old$
- ^blib/
- ^MakeMaker-\d
-
-=head1 EXPORT_OK
-
-C<&mkmanifest>, C<&manicheck>, C<&filecheck>, C<&fullcheck>,
-C<&maniread>, and C<&manicopy> are exportable.
-
-=head1 GLOBAL VARIABLES
-
-C<$ExtUtils::Manifest::MANIFEST> defaults to C<MANIFEST>. Changing it
-results in both a different C<MANIFEST> and a different
-C<MANIFEST.SKIP> file. This is useful if you want to maintain
-different distributions for different audiences (say a user version
-and a developer version including RCS).
-
-C<$ExtUtils::Manifest::Quiet> defaults to 0. If set to a true value,
-all functions act silently.
-
-=head1 DIAGNOSTICS
-
-All diagnostic output is sent to C<STDERR>.
-
-=over
-
-=item C<Not in MANIFEST:> I<file>
-
-is reported if a file is found, that is missing in the C<MANIFEST>
-file which is excluded by a regular expression in the file
-C<MANIFEST.SKIP>.
-
-=item C<No such file:> I<file>
-
-is reported if a file mentioned in a C<MANIFEST> file does not
-exist.
-
-=item C<MANIFEST:> I<$!>
-
-is reported if C<MANIFEST> could not be opened.
-
-=item C<Added to MANIFEST:> I<file>
-
-is reported by mkmanifest() if $Verbose is set and a file is added
-to MANIFEST. $Verbose is set to 1 by default.
-
-=back
-
-=head1 SEE ALSO
-
-L<ExtUtils::MakeMaker> which has handy targets for most of the functionality.
-
-=head1 AUTHOR
-
-Andreas Koenig <F<koenig@franz.ww.TU-Berlin.DE>>
-
-=cut
diff --git a/contrib/perl5/lib/ExtUtils/Mkbootstrap.pm b/contrib/perl5/lib/ExtUtils/Mkbootstrap.pm
deleted file mode 100644
index 323c3ab..0000000
--- a/contrib/perl5/lib/ExtUtils/Mkbootstrap.pm
+++ /dev/null
@@ -1,103 +0,0 @@
-package ExtUtils::Mkbootstrap;
-
-$VERSION = substr q$Revision: 1.14 $, 10;
-# $Date: 1996/09/03 17:04:43 $
-
-use Config;
-use Exporter;
-@ISA=('Exporter');
-@EXPORT='&Mkbootstrap';
-
-sub Mkbootstrap {
- my($baseext, @bsloadlibs)=@_;
- @bsloadlibs = grep($_, @bsloadlibs); # strip empty libs
-
- print STDOUT " bsloadlibs=@bsloadlibs\n" if $Verbose;
-
- # We need DynaLoader here because we and/or the *_BS file may
- # call dl_findfile(). We don't say `use' here because when
- # first building perl extensions the DynaLoader will not have
- # been built when MakeMaker gets first used.
- require DynaLoader;
-
- rename "$baseext.bs", "$baseext.bso"
- if -s "$baseext.bs";
-
- if (-f "${baseext}_BS"){
- $_ = "${baseext}_BS";
- package DynaLoader; # execute code as if in DynaLoader
- local($osname, $dlsrc) = (); # avoid warnings
- ($osname, $dlsrc) = @Config::Config{qw(osname dlsrc)};
- $bscode = "";
- unshift @INC, ".";
- require $_;
- shift @INC;
- }
-
- if ($Config{'dlsrc'} =~ /^dl_dld/){
- package DynaLoader;
- push(@dl_resolve_using, dl_findfile('-lc'));
- }
-
- my(@all) = (@bsloadlibs, @DynaLoader::dl_resolve_using);
- my($method) = '';
- if (@all){
- open BS, ">$baseext.bs"
- or die "Unable to open $baseext.bs: $!";
- print STDOUT "Writing $baseext.bs\n";
- print STDOUT " containing: @all" if $Verbose;
- print BS "# $baseext DynaLoader bootstrap file for $^O architecture.\n";
- print BS "# Do not edit this file, changes will be lost.\n";
- print BS "# This file was automatically generated by the\n";
- print BS "# Mkbootstrap routine in ExtUtils::Mkbootstrap (v$VERSION).\n";
- print BS "\@DynaLoader::dl_resolve_using = ";
- # If @all contains names in the form -lxxx or -Lxxx then it's asking for
- # runtime library location so we automatically add a call to dl_findfile()
- if (" @all" =~ m/ -[lLR]/){
- print BS " dl_findfile(qw(\n @all\n ));\n";
- }else{
- print BS " qw(@all);\n";
- }
- # write extra code if *_BS says so
- print BS $DynaLoader::bscode if $DynaLoader::bscode;
- print BS "\n1;\n";
- close BS;
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-ExtUtils::Mkbootstrap - make a bootstrap file for use by DynaLoader
-
-=head1 SYNOPSIS
-
-C<mkbootstrap>
-
-=head1 DESCRIPTION
-
-Mkbootstrap typically gets called from an extension Makefile.
-
-There is no C<*.bs> file supplied with the extension. Instead, there may
-be a C<*_BS> file which has code for the special cases, like posix for
-berkeley db on the NeXT.
-
-This file will get parsed, and produce a maybe empty
-C<@DynaLoader::dl_resolve_using> array for the current architecture.
-That will be extended by $BSLOADLIBS, which was computed by
-ExtUtils::Liblist::ext(). If this array still is empty, we do nothing,
-else we write a .bs file with an C<@DynaLoader::dl_resolve_using>
-array.
-
-The C<*_BS> file can put some code into the generated C<*.bs> file by
-placing it in C<$bscode>. This is a handy 'escape' mechanism that may
-prove useful in complex situations.
-
-If @DynaLoader::dl_resolve_using contains C<-L*> or C<-l*> entries then
-Mkbootstrap will automatically add a dl_findfile() call to the
-generated C<*.bs> file.
-
-=cut
diff --git a/contrib/perl5/lib/ExtUtils/Mksymlists.pm b/contrib/perl5/lib/ExtUtils/Mksymlists.pm
deleted file mode 100644
index c06b393..0000000
--- a/contrib/perl5/lib/ExtUtils/Mksymlists.pm
+++ /dev/null
@@ -1,302 +0,0 @@
-package ExtUtils::Mksymlists;
-
-use 5.005_64;
-use strict qw[ subs refs ];
-# no strict 'vars'; # until filehandles are exempted
-
-use Carp;
-use Exporter;
-our(@ISA, @EXPORT, $VERSION);
-@ISA = 'Exporter';
-@EXPORT = '&Mksymlists';
-$VERSION = substr q$Revision: 1.17 $, 10;
-
-sub Mksymlists {
- my(%spec) = @_;
- my($osname) = $^O;
-
- croak("Insufficient information specified to Mksymlists")
- unless ( $spec{NAME} or
- ($spec{FILE} and ($spec{DL_FUNCS} or $spec{FUNCLIST})) );
-
- $spec{DL_VARS} = [] unless $spec{DL_VARS};
- ($spec{FILE} = $spec{NAME}) =~ s/.*::// unless $spec{FILE};
- $spec{FUNCLIST} = [] unless $spec{FUNCLIST};
- $spec{DL_FUNCS} = { $spec{NAME} => [] }
- unless ( ($spec{DL_FUNCS} and keys %{$spec{DL_FUNCS}}) or
- @{$spec{FUNCLIST}});
- if (defined $spec{DL_FUNCS}) {
- my($package);
- foreach $package (keys %{$spec{DL_FUNCS}}) {
- my($packprefix,$sym,$bootseen);
- ($packprefix = $package) =~ s/\W/_/g;
- foreach $sym (@{$spec{DL_FUNCS}->{$package}}) {
- if ($sym =~ /^boot_/) {
- push(@{$spec{FUNCLIST}},$sym);
- $bootseen++;
- }
- else { push(@{$spec{FUNCLIST}},"XS_${packprefix}_$sym"); }
- }
- push(@{$spec{FUNCLIST}},"boot_$packprefix") unless $bootseen;
- }
- }
-
-# We'll need this if we ever add any OS which uses mod2fname
-# not as pseudo-builtin.
-# require DynaLoader;
- if (defined &DynaLoader::mod2fname and not $spec{DLBASE}) {
- $spec{DLBASE} = DynaLoader::mod2fname([ split(/::/,$spec{NAME}) ]);
- }
-
- if ($osname eq 'aix') { _write_aix(\%spec); }
- elsif ($osname eq 'MacOS'){ _write_aix(\%spec) }
- elsif ($osname eq 'VMS') { _write_vms(\%spec) }
- elsif ($osname eq 'os2') { _write_os2(\%spec) }
- elsif ($osname eq 'MSWin32') { _write_win32(\%spec) }
- else { croak("Don't know how to create linker option file for $osname\n"); }
-}
-
-
-sub _write_aix {
- my($data) = @_;
-
- rename "$data->{FILE}.exp", "$data->{FILE}.exp_old";
-
- open(EXP,">$data->{FILE}.exp")
- or croak("Can't create $data->{FILE}.exp: $!\n");
- print EXP join("\n",@{$data->{DL_VARS}}, "\n") if @{$data->{DL_VARS}};
- print EXP join("\n",@{$data->{FUNCLIST}}, "\n") if @{$data->{FUNCLIST}};
- close EXP;
-}
-
-
-sub _write_os2 {
- my($data) = @_;
- require Config;
- my $threaded = ($Config::Config{archname} =~ /-thread/ ? " threaded" : "");
-
- if (not $data->{DLBASE}) {
- ($data->{DLBASE} = $data->{NAME}) =~ s/.*:://;
- $data->{DLBASE} = substr($data->{DLBASE},0,7) . '_';
- }
- my $distname = $data->{DISTNAME} || $data->{NAME};
- $distname = "Distribution $distname";
- my $comment = "Perl (v$Config::Config{version}$threaded) module $data->{NAME}";
- if ($data->{INSTALLDIRS} and $data->{INSTALLDIRS} eq 'perl') {
- $distname = 'perl5-porters@perl.org';
- $comment = "Core $comment";
- }
- rename "$data->{FILE}.def", "$data->{FILE}_def.old";
-
- open(DEF,">$data->{FILE}.def")
- or croak("Can't create $data->{FILE}.def: $!\n");
- print DEF "LIBRARY '$data->{DLBASE}' INITINSTANCE TERMINSTANCE\n";
- print DEF "DESCRIPTION '\@#$distname:$data->{VERSION}#\@ $comment'\n";
- print DEF "CODE LOADONCALL\n";
- print DEF "DATA LOADONCALL NONSHARED MULTIPLE\n";
- print DEF "EXPORTS\n ";
- print DEF join("\n ",@{$data->{DL_VARS}}, "\n") if @{$data->{DL_VARS}};
- print DEF join("\n ",@{$data->{FUNCLIST}}, "\n") if @{$data->{FUNCLIST}};
- if (%{$data->{IMPORTS}}) {
- print DEF "IMPORTS\n";
- my ($name, $exp);
- while (($name, $exp)= each %{$data->{IMPORTS}}) {
- print DEF " $name=$exp\n";
- }
- }
- close DEF;
-}
-
-sub _write_win32 {
- my($data) = @_;
-
- require Config;
- if (not $data->{DLBASE}) {
- ($data->{DLBASE} = $data->{NAME}) =~ s/.*:://;
- $data->{DLBASE} = substr($data->{DLBASE},0,7) . '_';
- }
- rename "$data->{FILE}.def", "$data->{FILE}_def.old";
-
- open(DEF,">$data->{FILE}.def")
- or croak("Can't create $data->{FILE}.def: $!\n");
- # put library name in quotes (it could be a keyword, like 'Alias')
- if ($Config::Config{'cc'} !~ /^gcc/i) {
- print DEF "LIBRARY \"$data->{DLBASE}\"\n";
- }
- print DEF "EXPORTS\n ";
- my @syms;
- # Export public symbols both with and without underscores to
- # ensure compatibility between DLLs from different compilers
- # NOTE: DynaLoader itself only uses the names without underscores,
- # so this is only to cover the case when the extension DLL may be
- # linked to directly from C. GSAR 97-07-10
- if ($Config::Config{'cc'} =~ /^bcc/i) {
- for (@{$data->{DL_VARS}}, @{$data->{FUNCLIST}}) {
- push @syms, "_$_", "$_ = _$_";
- }
- }
- else {
- for (@{$data->{DL_VARS}}, @{$data->{FUNCLIST}}) {
- push @syms, "$_", "_$_ = $_";
- }
- }
- print DEF join("\n ",@syms, "\n") if @syms;
- if (%{$data->{IMPORTS}}) {
- print DEF "IMPORTS\n";
- my ($name, $exp);
- while (($name, $exp)= each %{$data->{IMPORTS}}) {
- print DEF " $name=$exp\n";
- }
- }
- close DEF;
-}
-
-
-sub _write_vms {
- my($data) = @_;
-
- require Config; # a reminder for once we do $^O
- require ExtUtils::XSSymSet;
-
- my($isvax) = $Config::Config{'archname'} =~ /VAX/i;
- my($set) = new ExtUtils::XSSymSet;
- my($sym);
-
- rename "$data->{FILE}.opt", "$data->{FILE}.opt_old";
-
- open(OPT,">$data->{FILE}.opt")
- or croak("Can't create $data->{FILE}.opt: $!\n");
-
- # Options file declaring universal symbols
- # Used when linking shareable image for dynamic extension,
- # or when linking PerlShr into which we've added this package
- # as a static extension
- # We don't do anything to preserve order, so we won't relax
- # the GSMATCH criteria for a dynamic extension
-
- print OPT "case_sensitive=yes\n"
- if $Config::Config{d_vms_case_sensitive_symbols};
- foreach $sym (@{$data->{FUNCLIST}}) {
- my $safe = $set->addsym($sym);
- if ($isvax) { print OPT "UNIVERSAL=$safe\n" }
- else { print OPT "SYMBOL_VECTOR=($safe=PROCEDURE)\n"; }
- }
- foreach $sym (@{$data->{DL_VARS}}) {
- my $safe = $set->addsym($sym);
- print OPT "PSECT_ATTR=${sym},PIC,OVR,RD,NOEXE,WRT,NOSHR\n";
- if ($isvax) { print OPT "UNIVERSAL=$safe\n" }
- else { print OPT "SYMBOL_VECTOR=($safe=DATA)\n"; }
- }
- close OPT;
-
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-ExtUtils::Mksymlists - write linker options files for dynamic extension
-
-=head1 SYNOPSIS
-
- use ExtUtils::Mksymlists;
- Mksymlists({ NAME => $name ,
- DL_VARS => [ $var1, $var2, $var3 ],
- DL_FUNCS => { $pkg1 => [ $func1, $func2 ],
- $pkg2 => [ $func3 ] });
-
-=head1 DESCRIPTION
-
-C<ExtUtils::Mksymlists> produces files used by the linker under some OSs
-during the creation of shared libraries for dynamic extensions. It is
-normally called from a MakeMaker-generated Makefile when the extension
-is built. The linker option file is generated by calling the function
-C<Mksymlists>, which is exported by default from C<ExtUtils::Mksymlists>.
-It takes one argument, a list of key-value pairs, in which the following
-keys are recognized:
-
-=over
-
-=item DLBASE
-
-This item specifies the name by which the linker knows the
-extension, which may be different from the name of the
-extension itself (for instance, some linkers add an '_' to the
-name of the extension). If it is not specified, it is derived
-from the NAME attribute. It is presently used only by OS2 and Win32.
-
-=item DL_FUNCS
-
-This is identical to the DL_FUNCS attribute available via MakeMaker,
-from which it is usually taken. Its value is a reference to an
-associative array, in which each key is the name of a package, and
-each value is an a reference to an array of function names which
-should be exported by the extension. For instance, one might say
-C<DL_FUNCS =E<gt> { Homer::Iliad =E<gt> [ qw(trojans greeks) ],
-Homer::Odyssey =E<gt> [ qw(travellers family suitors) ] }>. The
-function names should be identical to those in the XSUB code;
-C<Mksymlists> will alter the names written to the linker option
-file to match the changes made by F<xsubpp>. In addition, if
-none of the functions in a list begin with the string B<boot_>,
-C<Mksymlists> will add a bootstrap function for that package,
-just as xsubpp does. (If a B<boot_E<lt>pkgE<gt>> function is
-present in the list, it is passed through unchanged.) If
-DL_FUNCS is not specified, it defaults to the bootstrap
-function for the extension specified in NAME.
-
-=item DL_VARS
-
-This is identical to the DL_VARS attribute available via MakeMaker,
-and, like DL_FUNCS, it is usually specified via MakeMaker. Its
-value is a reference to an array of variable names which should
-be exported by the extension.
-
-=item FILE
-
-This key can be used to specify the name of the linker option file
-(minus the OS-specific extension), if for some reason you do not
-want to use the default value, which is the last word of the NAME
-attribute (I<e.g.> for C<Tk::Canvas>, FILE defaults to C<Canvas>).
-
-=item FUNCLIST
-
-This provides an alternate means to specify function names to be
-exported from the extension. Its value is a reference to an
-array of function names to be exported by the extension. These
-names are passed through unaltered to the linker options file.
-Specifying a value for the FUNCLIST attribute suppresses automatic
-generation of the bootstrap function for the package. To still create
-the bootstrap name you have to specify the package name in the
-DL_FUNCS hash:
-
- Mksymlists({ NAME => $name ,
- FUNCLIST => [ $func1, $func2 ],
- DL_FUNCS => { $pkg => [] } });
-
-
-=item IMPORTS
-
-This attribute is used to specify names to be imported into the
-extension. It is currently only used by OS/2 and Win32.
-
-=item NAME
-
-This gives the name of the extension (I<e.g.> C<Tk::Canvas>) for which
-the linker option file will be produced.
-
-=back
-
-When calling C<Mksymlists>, one should always specify the NAME
-attribute. In most cases, this is all that's necessary. In
-the case of unusual extensions, however, the other attributes
-can be used to provide additional information to the linker.
-
-=head1 AUTHOR
-
-Charles Bailey I<E<lt>bailey@newman.upenn.eduE<gt>>
-
-=head1 REVISION
-
-Last revised 14-Feb-1996, for Perl 5.002.
diff --git a/contrib/perl5/lib/ExtUtils/Packlist.pm b/contrib/perl5/lib/ExtUtils/Packlist.pm
deleted file mode 100644
index 88ea206..0000000
--- a/contrib/perl5/lib/ExtUtils/Packlist.pm
+++ /dev/null
@@ -1,289 +0,0 @@
-package ExtUtils::Packlist;
-
-use 5.005_64;
-use strict;
-use Carp qw();
-our $VERSION = '0.03';
-
-# Used for generating filehandle globs. IO::File might not be available!
-my $fhname = "FH1";
-
-sub mkfh()
-{
-no strict;
-my $fh = \*{$fhname++};
-use strict;
-return($fh);
-}
-
-sub new($$)
-{
-my ($class, $packfile) = @_;
-$class = ref($class) || $class;
-my %self;
-tie(%self, $class, $packfile);
-return(bless(\%self, $class));
-}
-
-sub TIEHASH
-{
-my ($class, $packfile) = @_;
-my $self = { packfile => $packfile };
-bless($self, $class);
-$self->read($packfile) if (defined($packfile) && -f $packfile);
-return($self);
-}
-
-sub STORE
-{
-$_[0]->{data}->{$_[1]} = $_[2];
-}
-
-sub FETCH
-{
-return($_[0]->{data}->{$_[1]});
-}
-
-sub FIRSTKEY
-{
-my $reset = scalar(keys(%{$_[0]->{data}}));
-return(each(%{$_[0]->{data}}));
-}
-
-sub NEXTKEY
-{
-return(each(%{$_[0]->{data}}));
-}
-
-sub EXISTS
-{
-return(exists($_[0]->{data}->{$_[1]}));
-}
-
-sub DELETE
-{
-return(delete($_[0]->{data}->{$_[1]}));
-}
-
-sub CLEAR
-{
-%{$_[0]->{data}} = ();
-}
-
-sub DESTROY
-{
-}
-
-sub read($;$)
-{
-my ($self, $packfile) = @_;
-$self = tied(%$self) || $self;
-
-if (defined($packfile)) { $self->{packfile} = $packfile; }
-else { $packfile = $self->{packfile}; }
-Carp::croak("No packlist filename specified") if (! defined($packfile));
-my $fh = mkfh();
-open($fh, "<$packfile") || Carp::croak("Can't open file $packfile: $!");
-$self->{data} = {};
-my ($line);
-while (defined($line = <$fh>))
- {
- chomp $line;
- my ($key, @kvs) = split(' ', $line);
- $key =~ s!/\./!/!g; # Some .packlists have spurious '/./' bits in the paths
- if (! @kvs)
- {
- $self->{data}->{$key} = undef;
- }
- else
- {
- my ($data) = {};
- foreach my $kv (@kvs)
- {
- my ($k, $v) = split('=', $kv);
- $data->{$k} = $v;
- }
- $self->{data}->{$key} = $data;
- }
- }
-close($fh);
-}
-
-sub write($;$)
-{
-my ($self, $packfile) = @_;
-$self = tied(%$self) || $self;
-if (defined($packfile)) { $self->{packfile} = $packfile; }
-else { $packfile = $self->{packfile}; }
-Carp::croak("No packlist filename specified") if (! defined($packfile));
-my $fh = mkfh();
-open($fh, ">$packfile") || Carp::croak("Can't open file $packfile: $!");
-foreach my $key (sort(keys(%{$self->{data}})))
- {
- print $fh ("$key");
- if (ref($self->{data}->{$key}))
- {
- my $data = $self->{data}->{$key};
- foreach my $k (sort(keys(%$data)))
- {
- print $fh (" $k=$data->{$k}");
- }
- }
- print $fh ("\n");
- }
-close($fh);
-}
-
-sub validate($;$)
-{
-my ($self, $remove) = @_;
-$self = tied(%$self) || $self;
-my @missing;
-foreach my $key (sort(keys(%{$self->{data}})))
- {
- if (! -e $key)
- {
- push(@missing, $key);
- delete($self->{data}{$key}) if ($remove);
- }
- }
-return(@missing);
-}
-
-sub packlist_file($)
-{
-my ($self) = @_;
-$self = tied(%$self) || $self;
-return($self->{packfile});
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-ExtUtils::Packlist - manage .packlist files
-
-=head1 SYNOPSIS
-
- use ExtUtils::Packlist;
- my ($pl) = ExtUtils::Packlist->new('.packlist');
- $pl->read('/an/old/.packlist');
- my @missing_files = $pl->validate();
- $pl->write('/a/new/.packlist');
-
- $pl->{'/some/file/name'}++;
- or
- $pl->{'/some/other/file/name'} = { type => 'file',
- from => '/some/file' };
-
-=head1 DESCRIPTION
-
-ExtUtils::Packlist provides a standard way to manage .packlist files.
-Functions are provided to read and write .packlist files. The original
-.packlist format is a simple list of absolute pathnames, one per line. In
-addition, this package supports an extended format, where as well as a filename
-each line may contain a list of attributes in the form of a space separated
-list of key=value pairs. This is used by the installperl script to
-differentiate between files and links, for example.
-
-=head1 USAGE
-
-The hash reference returned by the new() function can be used to examine and
-modify the contents of the .packlist. Items may be added/deleted from the
-.packlist by modifying the hash. If the value associated with a hash key is a
-scalar, the entry written to the .packlist by any subsequent write() will be a
-simple filename. If the value is a hash, the entry written will be the
-filename followed by the key=value pairs from the hash. Reading back the
-.packlist will recreate the original entries.
-
-=head1 FUNCTIONS
-
-=over
-
-=item new()
-
-This takes an optional parameter, the name of a .packlist. If the file exists,
-it will be opened and the contents of the file will be read. The new() method
-returns a reference to a hash. This hash holds an entry for each line in the
-.packlist. In the case of old-style .packlists, the value associated with each
-key is undef. In the case of new-style .packlists, the value associated with
-each key is a hash containing the key=value pairs following the filename in the
-.packlist.
-
-=item read()
-
-This takes an optional parameter, the name of the .packlist to be read. If
-no file is specified, the .packlist specified to new() will be read. If the
-.packlist does not exist, Carp::croak will be called.
-
-=item write()
-
-This takes an optional parameter, the name of the .packlist to be written. If
-no file is specified, the .packlist specified to new() will be overwritten.
-
-=item validate()
-
-This checks that every file listed in the .packlist actually exists. If an
-argument which evaluates to true is given, any missing files will be removed
-from the internal hash. The return value is a list of the missing files, which
-will be empty if they all exist.
-
-=item packlist_file()
-
-This returns the name of the associated .packlist file
-
-=back
-
-=head1 EXAMPLE
-
-Here's C<modrm>, a little utility to cleanly remove an installed module.
-
- #!/usr/local/bin/perl -w
-
- use strict;
- use IO::Dir;
- use ExtUtils::Packlist;
- use ExtUtils::Installed;
-
- sub emptydir($) {
- my ($dir) = @_;
- my $dh = IO::Dir->new($dir) || return(0);
- my @count = $dh->read();
- $dh->close();
- return(@count == 2 ? 1 : 0);
- }
-
- # Find all the installed packages
- print("Finding all installed modules...\n");
- my $installed = ExtUtils::Installed->new();
-
- foreach my $module (grep(!/^Perl$/, $installed->modules())) {
- my $version = $installed->version($module) || "???";
- print("Found module $module Version $version\n");
- print("Do you want to delete $module? [n] ");
- my $r = <STDIN>; chomp($r);
- if ($r && $r =~ /^y/i) {
- # Remove all the files
- foreach my $file (sort($installed->files($module))) {
- print("rm $file\n");
- unlink($file);
- }
- my $pf = $installed->packlist($module)->packlist_file();
- print("rm $pf\n");
- unlink($pf);
- foreach my $dir (sort($installed->directory_tree($module))) {
- if (emptydir($dir)) {
- print("rmdir $dir\n");
- rmdir($dir);
- }
- }
- }
- }
-
-=head1 AUTHOR
-
-Alan Burlison <Alan.Burlison@uk.sun.com>
-
-=cut
diff --git a/contrib/perl5/lib/ExtUtils/inst b/contrib/perl5/lib/ExtUtils/inst
deleted file mode 100755
index cbf2d01..0000000
--- a/contrib/perl5/lib/ExtUtils/inst
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/local/bin/perl -w
-
-use strict;
-use IO::File;
-use ExtUtils::Packlist;
-use ExtUtils::Installed;
-
-use vars qw($Inst @Modules);
-
-################################################################################
-
-sub do_module($)
-{
-my ($module) = @_;
-my $help = <<EOF;
-Available commands are:
- f [all|prog|doc] - List installed files of a given type
- d [all|prog|doc] - List the directories used by a module
- v - Validate the .packlist - check for missing files
- t <tarfile> - Create a tar archive of the module
- q - Quit the module
-EOF
-print($help);
-while (1)
- {
- print("$module cmd? ");
- my $reply = <STDIN>; chomp($reply);
- CASE:
- {
- $reply =~ /^f\s*/ and do
- {
- my $class = (split(' ', $reply))[1];
- $class = 'all' if (! $class);
- my @files;
- if (eval { @files = $Inst->files($module, $class); })
- {
- print("$class files in $module are:\n ",
- join("\n ", @files), "\n");
- last CASE;
- }
- else
- { print($@); }
- };
- $reply =~ /^d\s*/ and do
- {
- my $class = (split(' ', $reply))[1];
- $class = 'all' if (! $class);
- my @dirs;
- if (eval { @dirs = $Inst->directories($module, $class); })
- {
- print("$class directories in $module are:\n ",
- join("\n ", @dirs), "\n");
- last CASE;
- }
- else
- { print($@); }
- };
- $reply =~ /^t\s*/ and do
- {
- my $file = (split(' ', $reply))[1];
- my $tmp = "/tmp/inst.$$";
- if (my $fh = IO::File->new($tmp, "w"))
- {
- $fh->print(join("\n", $Inst->files($module)));
- $fh->close();
- system("tar cvf $file -I $tmp");
- unlink($tmp);
- last CASE;
- }
- else { print("Can't open $file: $!\n"); }
- last CASE;
- };
- $reply eq 'v' and do
- {
- if (my @missing = $Inst->validate($module))
- {
- print("Files missing from $module are:\n ",
- join("\n ", @missing), "\n");
- }
- else
- {
- print("$module has no missing files\n");
- }
- last CASE;
- };
- $reply eq 'q' and do
- {
- return;
- };
- # Default
- print($help);
- }
- }
-}
-
-################################################################################
-
-sub toplevel()
-{
-my $help = <<EOF;
-Available commands are:
- l - List all installed modules
- m <module> - Select a module
- q - Quit the program
-EOF
-print($help);
-while (1)
- {
- print("cmd? ");
- my $reply = <STDIN>; chomp($reply);
- CASE:
- {
- $reply eq 'l' and do
- {
- print("Installed modules are:\n ", join("\n ", @Modules), "\n");
- last CASE;
- };
- $reply =~ /^m\s+/ and do
- {
- do_module((split(' ', $reply))[1]);
- last CASE;
- };
- $reply eq 'q' and do
- {
- exit(0);
- };
- # Default
- print($help);
- }
- }
-}
-
-################################################################################
-
-$Inst = ExtUtils::Installed->new();
-@Modules = $Inst->modules();
-toplevel();
-
-################################################################################
diff --git a/contrib/perl5/lib/ExtUtils/testlib.pm b/contrib/perl5/lib/ExtUtils/testlib.pm
deleted file mode 100644
index d80f2a2..0000000
--- a/contrib/perl5/lib/ExtUtils/testlib.pm
+++ /dev/null
@@ -1,26 +0,0 @@
-package ExtUtils::testlib;
-$VERSION = substr q$Revision: 1.11 $, 10;
-# $Id: testlib.pm,v 1.11 1996/05/31 08:27:07 k Exp $
-
-use lib qw(blib/arch blib/lib);
-1;
-__END__
-
-=head1 NAME
-
-ExtUtils::testlib - add blib/* directories to @INC
-
-=head1 SYNOPSIS
-
-C<use ExtUtils::testlib;>
-
-=head1 DESCRIPTION
-
-After an extension has been built and before it is installed it may be
-desirable to test it bypassing C<make test>. By adding
-
- use ExtUtils::testlib;
-
-to a test program the intermediate directories used by C<make> are
-added to @INC.
-
diff --git a/contrib/perl5/lib/ExtUtils/typemap b/contrib/perl5/lib/ExtUtils/typemap
deleted file mode 100644
index c309128..0000000
--- a/contrib/perl5/lib/ExtUtils/typemap
+++ /dev/null
@@ -1,294 +0,0 @@
-# basic C types
-int T_IV
-unsigned T_UV
-unsigned int T_UV
-long T_IV
-unsigned long T_UV
-short T_IV
-unsigned short T_UV
-char T_CHAR
-unsigned char T_U_CHAR
-char * T_PV
-unsigned char * T_PV
-caddr_t T_PV
-wchar_t * T_PV
-wchar_t T_IV
-bool_t T_IV
-size_t T_IV
-ssize_t T_IV
-time_t T_NV
-unsigned long * T_OPAQUEPTR
-char ** T_PACKED
-void * T_PTR
-Time_t * T_PV
-SV * T_SV
-SVREF T_SVREF
-AV * T_AVREF
-HV * T_HVREF
-CV * T_CVREF
-
-IV T_IV
-UV T_UV
-NV T_NV
-I32 T_IV
-I16 T_IV
-I8 T_IV
-U32 T_U_LONG
-U16 T_U_SHORT
-U8 T_UV
-Result T_U_CHAR
-Boolean T_IV
-double T_DOUBLE
-SysRet T_SYSRET
-SysRetLong T_SYSRET
-FILE * T_IN
-FileHandle T_PTROBJ
-InputStream T_IN
-InOutStream T_INOUT
-OutputStream T_OUT
-bool T_BOOL
-
-#############################################################################
-INPUT
-T_SV
- $var = $arg
-T_SVREF
- if (sv_isa($arg, \"${ntype}\"))
- $var = (SV*)SvRV($arg);
- else
- croak(\"$var is not of type ${ntype}\")
-T_AVREF
- if (sv_isa($arg, \"${ntype}\"))
- $var = (AV*)SvRV($arg);
- else
- croak(\"$var is not of type ${ntype}\")
-T_HVREF
- if (sv_isa($arg, \"${ntype}\"))
- $var = (HV*)SvRV($arg);
- else
- croak(\"$var is not of type ${ntype}\")
-T_CVREF
- if (sv_isa($arg, \"${ntype}\"))
- $var = (CV*)SvRV($arg);
- else
- croak(\"$var is not of type ${ntype}\")
-T_SYSRET
- $var NOT IMPLEMENTED
-T_UV
- $var = ($type)SvUV($arg)
-T_IV
- $var = ($type)SvIV($arg)
-T_INT
- $var = (int)SvIV($arg)
-T_ENUM
- $var = ($type)SvIV($arg)
-T_BOOL
- $var = (int)SvIV($arg)
-T_U_INT
- $var = (unsigned int)SvUV($arg)
-T_SHORT
- $var = (short)SvIV($arg)
-T_U_SHORT
- $var = (unsigned short)SvUV($arg)
-T_LONG
- $var = (long)SvIV($arg)
-T_U_LONG
- $var = (unsigned long)SvUV($arg)
-T_CHAR
- $var = (char)*SvPV($arg,PL_na)
-T_U_CHAR
- $var = (unsigned char)SvUV($arg)
-T_FLOAT
- $var = (float)SvNV($arg)
-T_NV
- $var = ($type)SvNV($arg)
-T_DOUBLE
- $var = (double)SvNV($arg)
-T_PV
- $var = ($type)SvPV($arg,PL_na)
-T_PTR
- $var = INT2PTR($type,SvIV($arg))
-T_PTRREF
- if (SvROK($arg)) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type,tmp);
- }
- else
- croak(\"$var is not a reference\")
-T_REF_IV_REF
- if (sv_isa($arg, \"${type}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = *($type *) tmp;
- }
- else
- croak(\"$var is not of type ${ntype}\")
-T_REF_IV_PTR
- if (sv_isa($arg, \"${type}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = ($type) tmp;
- }
- else
- croak(\"$var is not of type ${ntype}\")
-T_PTROBJ
- if (sv_derived_from($arg, \"${ntype}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type,tmp);
- }
- else
- croak(\"$var is not of type ${ntype}\")
-T_PTRDESC
- if (sv_isa($arg, \"${ntype}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- ${type}_desc = (\U${type}_DESC\E*) tmp;
- $var = ${type}_desc->ptr;
- }
- else
- croak(\"$var is not of type ${ntype}\")
-T_REFREF
- if (SvROK($arg)) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = *INT2PTR($type,tmp);
- }
- else
- croak(\"$var is not a reference\")
-T_REFOBJ
- if (sv_isa($arg, \"${ntype}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = *INT2PTR($type,tmp);
- }
- else
- croak(\"$var is not of type ${ntype}\")
-T_OPAQUE
- $var NOT IMPLEMENTED
-T_OPAQUEPTR
- $var = ($type)SvPV($arg,PL_na)
-T_PACKED
- $var = XS_unpack_$ntype($arg)
-T_PACKEDARRAY
- $var = XS_unpack_$ntype($arg)
-T_CALLBACK
- $var = make_perl_cb_$type($arg)
-T_ARRAY
- $var = $ntype(items -= $argoff);
- U32 ix_$var = $argoff;
- while (items--) {
- DO_ARRAY_ELEM;
- }
-T_IN
- $var = IoIFP(sv_2io($arg))
-T_INOUT
- $var = IoIFP(sv_2io($arg))
-T_OUT
- $var = IoOFP(sv_2io($arg))
-#############################################################################
-OUTPUT
-T_SV
- $arg = $var;
-T_SVREF
- $arg = newRV((SV*)$var);
-T_AVREF
- $arg = newRV((SV*)$var);
-T_HVREF
- $arg = newRV((SV*)$var);
-T_CVREF
- $arg = newRV((SV*)$var);
-T_IV
- sv_setiv($arg, (IV)$var);
-T_UV
- sv_setuv($arg, (UV)$var);
-T_INT
- sv_setiv($arg, (IV)$var);
-T_SYSRET
- if ($var != -1) {
- if ($var == 0)
- sv_setpvn($arg, "0 but true", 10);
- else
- sv_setiv($arg, (IV)$var);
- }
-T_ENUM
- sv_setiv($arg, (IV)$var);
-T_BOOL
- $arg = boolSV($var);
-T_U_INT
- sv_setuv($arg, (UV)$var);
-T_SHORT
- sv_setiv($arg, (IV)$var);
-T_U_SHORT
- sv_setuv($arg, (UV)$var);
-T_LONG
- sv_setiv($arg, (IV)$var);
-T_U_LONG
- sv_setuv($arg, (UV)$var);
-T_CHAR
- sv_setpvn($arg, (char *)&$var, 1);
-T_U_CHAR
- sv_setuv($arg, (UV)$var);
-T_FLOAT
- sv_setnv($arg, (double)$var);
-T_NV
- sv_setnv($arg, (NV)$var);
-T_DOUBLE
- sv_setnv($arg, (double)$var);
-T_PV
- sv_setpv((SV*)$arg, $var);
-T_PTR
- sv_setiv($arg, PTR2IV($var));
-T_PTRREF
- sv_setref_pv($arg, Nullch, (void*)$var);
-T_REF_IV_REF
- sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
-T_REF_IV_PTR
- sv_setref_pv($arg, \"${ntype}\", (void*)$var);
-T_PTROBJ
- sv_setref_pv($arg, \"${ntype}\", (void*)$var);
-T_PTRDESC
- sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
-T_REFREF
- sv_setrefref($arg, \"${ntype}\", XS_service_$ntype,
- ($var ? (void*)new $ntype($var) : 0));
-T_REFOBJ
- NOT IMPLEMENTED
-T_OPAQUE
- sv_setpvn($arg, (char *)&$var, sizeof($var));
-T_OPAQUEPTR
- sv_setpvn($arg, (char *)$var, sizeof(*$var));
-T_PACKED
- XS_pack_$ntype($arg, $var);
-T_PACKEDARRAY
- XS_pack_$ntype($arg, $var, count_$ntype);
-T_DATAUNIT
- sv_setpvn($arg, $var.chp(), $var.size());
-T_CALLBACK
- sv_setpvn($arg, $var.context.value().chp(),
- $var.context.value().size());
-T_ARRAY
- ST_EXTEND($var.size);
- for (U32 ix_$var = 0; ix_$var < $var.size; ix_$var++) {
- ST(ix_$var) = sv_newmortal();
- DO_ARRAY_ELEM
- }
- SP += $var.size - 1;
-T_IN
- {
- GV *gv = newGVgen("$Package");
- if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
- sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
- else
- $arg = &PL_sv_undef;
- }
-T_INOUT
- {
- GV *gv = newGVgen("$Package");
- if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
- sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
- else
- $arg = &PL_sv_undef;
- }
-T_OUT
- {
- GV *gv = newGVgen("$Package");
- if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
- sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
- else
- $arg = &PL_sv_undef;
- }
diff --git a/contrib/perl5/lib/ExtUtils/xsubpp b/contrib/perl5/lib/ExtUtils/xsubpp
deleted file mode 100755
index bb8f3aa..0000000
--- a/contrib/perl5/lib/ExtUtils/xsubpp
+++ /dev/null
@@ -1,1763 +0,0 @@
-#!./miniperl
-
-=head1 NAME
-
-xsubpp - compiler to convert Perl XS code into C code
-
-=head1 SYNOPSIS
-
-B<xsubpp> [B<-v>] [B<-C++>] [B<-except>] [B<-s pattern>] [B<-prototypes>] [B<-noversioncheck>] [B<-nolinenumbers>] [B<-nooptimize>] [B<-typemap typemap>] ... file.xs
-
-=head1 DESCRIPTION
-
-This compiler is typically run by the makefiles created by L<ExtUtils::MakeMaker>.
-
-I<xsubpp> will compile XS code into C code by embedding the constructs
-necessary to let C functions manipulate Perl values and creates the glue
-necessary to let Perl access those functions. The compiler uses typemaps to
-determine how to map C function parameters and variables to Perl values.
-
-The compiler will search for typemap files called I<typemap>. It will use
-the following search path to find default typemaps, with the rightmost
-typemap taking precedence.
-
- ../../../typemap:../../typemap:../typemap:typemap
-
-=head1 OPTIONS
-
-Note that the C<XSOPT> MakeMaker option may be used to add these options to
-any makefiles generated by MakeMaker.
-
-=over 5
-
-=item B<-C++>
-
-Adds ``extern "C"'' to the C code.
-
-=item B<-except>
-
-Adds exception handling stubs to the C code.
-
-=item B<-typemap typemap>
-
-Indicates that a user-supplied typemap should take precedence over the
-default typemaps. This option may be used multiple times, with the last
-typemap having the highest precedence.
-
-=item B<-v>
-
-Prints the I<xsubpp> version number to standard output, then exits.
-
-=item B<-prototypes>
-
-By default I<xsubpp> will not automatically generate prototype code for
-all xsubs. This flag will enable prototypes.
-
-=item B<-noversioncheck>
-
-Disables the run time test that determines if the object file (derived
-from the C<.xs> file) and the C<.pm> files have the same version
-number.
-
-=item B<-nolinenumbers>
-
-Prevents the inclusion of `#line' directives in the output.
-
-=item B<-nooptimize>
-
-Disables certain optimizations. The only optimization that is currently
-affected is the use of I<target>s by the output C code (see L<perlguts>).
-This may significantly slow down the generated code, but this is the way
-B<xsubpp> of 5.005 and earlier operated.
-
-=item B<-noinout>
-
-Disable recognition of C<IN>, C<OUT_LIST> and C<INOUT_LIST> declarations.
-
-=item B<-noargtypes>
-
-Disable recognition of ANSI-like descriptions of function signature.
-
-=back
-
-=head1 ENVIRONMENT
-
-No environment variables are used.
-
-=head1 AUTHOR
-
-Larry Wall
-
-=head1 MODIFICATION HISTORY
-
-See the file F<changes.pod>.
-
-=head1 SEE ALSO
-
-perl(1), perlxs(1), perlxstut(1)
-
-=cut
-
-require 5.002;
-use Cwd;
-use vars '$cplusplus';
-use vars '%v';
-
-use Config;
-
-sub Q ;
-
-# Global Constants
-
-$XSUBPP_version = "1.9508";
-
-my ($Is_VMS, $SymSet);
-if ($^O eq 'VMS') {
- $Is_VMS = 1;
- # Establish set of global symbols with max length 28, since xsubpp
- # will later add the 'XS_' prefix.
- require ExtUtils::XSSymSet;
- $SymSet = new ExtUtils::XSSymSet 28;
-}
-
-$FH = 'File0000' ;
-
-$usage = "Usage: xsubpp [-v] [-C++] [-except] [-prototypes] [-noversioncheck] [-nolinenumbers] [-nooptimize] [-noinout] [-noargtypes] [-s pattern] [-typemap typemap]... file.xs\n";
-
-$proto_re = "[" . quotemeta('\$%&*@;') . "]" ;
-# mjn
-$OBJ = 1 if $Config{'ccflags'} =~ /PERL_OBJECT/i;
-
-$except = "";
-$WantPrototypes = -1 ;
-$WantVersionChk = 1 ;
-$ProtoUsed = 0 ;
-$WantLineNumbers = 1 ;
-$WantOptimize = 1 ;
-
-my $process_inout = 1;
-my $process_argtypes = 1;
-
-SWITCH: while (@ARGV and $ARGV[0] =~ /^-./) {
- $flag = shift @ARGV;
- $flag =~ s/^-// ;
- $spat = quotemeta shift, next SWITCH if $flag eq 's';
- $cplusplus = 1, next SWITCH if $flag eq 'C++';
- $WantPrototypes = 0, next SWITCH if $flag eq 'noprototypes';
- $WantPrototypes = 1, next SWITCH if $flag eq 'prototypes';
- $WantVersionChk = 0, next SWITCH if $flag eq 'noversioncheck';
- $WantVersionChk = 1, next SWITCH if $flag eq 'versioncheck';
- # XXX left this in for compat
- $WantCAPI = 1, next SWITCH if $flag eq 'object_capi';
- $except = " TRY", next SWITCH if $flag eq 'except';
- push(@tm,shift), next SWITCH if $flag eq 'typemap';
- $WantLineNumbers = 0, next SWITCH if $flag eq 'nolinenumbers';
- $WantLineNumbers = 1, next SWITCH if $flag eq 'linenumbers';
- $WantOptimize = 0, next SWITCH if $flag eq 'nooptimize';
- $WantOptimize = 1, next SWITCH if $flag eq 'optimize';
- $process_inout = 0, next SWITCH if $flag eq 'noinout';
- $process_inout = 1, next SWITCH if $flag eq 'inout';
- $process_argtypes = 0, next SWITCH if $flag eq 'noargtypes';
- $process_argtypes = 1, next SWITCH if $flag eq 'argtypes';
- (print "xsubpp version $XSUBPP_version\n"), exit
- if $flag eq 'v';
- die $usage;
-}
-if ($WantPrototypes == -1)
- { $WantPrototypes = 0}
-else
- { $ProtoUsed = 1 }
-
-
-@ARGV == 1 or die $usage;
-($dir, $filename) = $ARGV[0] =~ m#(.*)/(.*)#
- or ($dir, $filename) = $ARGV[0] =~ m#(.*)\\(.*)#
- or ($dir, $filename) = $ARGV[0] =~ m#(.*[>\]])(.*)#
- or ($dir, $filename) = ('.', $ARGV[0]);
-chdir($dir);
-$pwd = cwd();
-
-++ $IncludedFiles{$ARGV[0]} ;
-
-my(@XSStack) = ({type => 'none'}); # Stack of conditionals and INCLUDEs
-my($XSS_work_idx, $cpp_next_tmp) = (0, "XSubPPtmpAAAA");
-
-
-sub TrimWhitespace
-{
- $_[0] =~ s/^\s+|\s+$//go ;
-}
-
-sub TidyType
-{
- local ($_) = @_ ;
-
- # rationalise any '*' by joining them into bunches and removing whitespace
- s#\s*(\*+)\s*#$1#g;
- s#(\*+)# $1 #g ;
-
- # change multiple whitespace into a single space
- s/\s+/ /g ;
-
- # trim leading & trailing whitespace
- TrimWhitespace($_) ;
-
- $_ ;
-}
-
-$typemap = shift @ARGV;
-foreach $typemap (@tm) {
- die "Can't find $typemap in $pwd\n" unless -r $typemap;
-}
-unshift @tm, qw(../../../../lib/ExtUtils/typemap ../../../lib/ExtUtils/typemap
- ../../lib/ExtUtils/typemap ../../../typemap ../../typemap
- ../typemap typemap);
-foreach $typemap (@tm) {
- next unless -e $typemap ;
- # skip directories, binary files etc.
- warn("Warning: ignoring non-text typemap file '$typemap'\n"), next
- unless -T $typemap ;
- open(TYPEMAP, $typemap)
- or warn ("Warning: could not open typemap file '$typemap': $!\n"), next;
- $mode = 'Typemap';
- $junk = "" ;
- $current = \$junk;
- while (<TYPEMAP>) {
- next if /^\s*#/;
- my $line_no = $. + 1;
- if (/^INPUT\s*$/) { $mode = 'Input'; $current = \$junk; next; }
- if (/^OUTPUT\s*$/) { $mode = 'Output'; $current = \$junk; next; }
- if (/^TYPEMAP\s*$/) { $mode = 'Typemap'; $current = \$junk; next; }
- if ($mode eq 'Typemap') {
- chomp;
- my $line = $_ ;
- TrimWhitespace($_) ;
- # skip blank lines and comment lines
- next if /^$/ or /^#/ ;
- my($type,$kind, $proto) = /^\s*(.*?\S)\s+(\S+)\s*($proto_re*)\s*$/ or
- warn("Warning: File '$typemap' Line $. '$line' TYPEMAP entry needs 2 or 3 columns\n"), next;
- $type = TidyType($type) ;
- $type_kind{$type} = $kind ;
- # prototype defaults to '$'
- $proto = "\$" unless $proto ;
- warn("Warning: File '$typemap' Line $. '$line' Invalid prototype '$proto'\n")
- unless ValidProtoString($proto) ;
- $proto_letter{$type} = C_string($proto) ;
- }
- elsif (/^\s/) {
- $$current .= $_;
- }
- elsif ($mode eq 'Input') {
- s/\s+$//;
- $input_expr{$_} = '';
- $current = \$input_expr{$_};
- }
- else {
- s/\s+$//;
- $output_expr{$_} = '';
- $current = \$output_expr{$_};
- }
- }
- close(TYPEMAP);
-}
-
-foreach $key (keys %input_expr) {
- $input_expr{$key} =~ s/\n+$//;
-}
-
-$bal = qr[(?:(?>[^()]+)|\((??{ $bal })\))*]; # ()-balanced
-$cast = qr[(?:\(\s*SV\s*\*\s*\)\s*)?]; # Optional (SV*) cast
-$size = qr[,\s* (??{ $bal }) ]x; # Third arg (to setpvn)
-
-foreach $key (keys %output_expr) {
- use re 'eval';
-
- my ($t, $with_size, $arg, $sarg) =
- ($output_expr{$key} =~
- m[^ \s+ sv_set ( [iunp] ) v (n)? # Type, is_setpvn
- \s* \( \s* $cast \$arg \s* ,
- \s* ( (??{ $bal }) ) # Set from
- ( (??{ $size }) )? # Possible sizeof set-from
- \) \s* ; \s* $
- ]x);
- $targetable{$key} = [$t, $with_size, $arg, $sarg] if $t;
-}
-
-$END = "!End!\n\n"; # "impossible" keyword (multiple newline)
-
-# Match an XS keyword
-$BLOCK_re= '\s*(' . join('|', qw(
- REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE OUTPUT
- CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE VERSIONCHECK INCLUDE
- SCOPE INTERFACE INTERFACE_MACRO C_ARGS POSTCALL
- )) . "|$END)\\s*:";
-
-# Input: ($_, @line) == unparsed input.
-# Output: ($_, @line) == (rest of line, following lines).
-# Return: the matched keyword if found, otherwise 0
-sub check_keyword {
- $_ = shift(@line) while !/\S/ && @line;
- s/^(\s*)($_[0])\s*:\s*(?:#.*)?/$1/s && $2;
-}
-
-my ($C_group_rex, $C_arg);
-# Group in C (no support for comments or literals)
-$C_group_rex = qr/ [({\[]
- (?: (?> [^()\[\]{}]+ ) | (??{ $C_group_rex }) )*
- [)}\]] /x ;
-# Chunk in C without comma at toplevel (no comments):
-$C_arg = qr/ (?: (?> [^()\[\]{},"']+ )
- | (??{ $C_group_rex })
- | " (?: (?> [^\\"]+ )
- | \\.
- )* " # String literal
- | ' (?: (?> [^\\']+ ) | \\. )* ' # Char literal
- )* /xs;
-
-if ($WantLineNumbers) {
- {
- package xsubpp::counter;
- sub TIEHANDLE {
- my ($class, $cfile) = @_;
- my $buf = "";
- $SECTION_END_MARKER = "#line --- \"$cfile\"";
- $line_no = 1;
- bless \$buf;
- }
-
- sub PRINT {
- my $self = shift;
- for (@_) {
- $$self .= $_;
- while ($$self =~ s/^([^\n]*\n)//) {
- my $line = $1;
- ++ $line_no;
- $line =~ s|^\#line\s+---(?=\s)|#line $line_no|;
- print STDOUT $line;
- }
- }
- }
-
- sub PRINTF {
- my $self = shift;
- my $fmt = shift;
- $self->PRINT(sprintf($fmt, @_));
- }
-
- sub DESTROY {
- # Not necessary if we're careful to end with a "\n"
- my $self = shift;
- print STDOUT $$self;
- }
- }
-
- my $cfile = $filename;
- $cfile =~ s/\.xs$/.c/i or $cfile .= ".c";
- tie(*PSEUDO_STDOUT, 'xsubpp::counter', $cfile);
- select PSEUDO_STDOUT;
-}
-
-sub print_section {
- # the "do" is required for right semantics
- do { $_ = shift(@line) } while !/\S/ && @line;
-
- print("#line ", $line_no[@line_no - @line -1], " \"$filename\"\n")
- if $WantLineNumbers && !/^\s*#\s*line\b/ && !/^#if XSubPPtmp/;
- for (; defined($_) && !/^$BLOCK_re/o; $_ = shift(@line)) {
- print "$_\n";
- }
- print "$xsubpp::counter::SECTION_END_MARKER\n" if $WantLineNumbers;
-}
-
-sub merge_section {
- my $in = '';
-
- while (!/\S/ && @line) {
- $_ = shift(@line);
- }
-
- for (; defined($_) && !/^$BLOCK_re/o; $_ = shift(@line)) {
- $in .= "$_\n";
- }
- chomp $in;
- return $in;
-}
-
-sub process_keyword($)
-{
- my($pattern) = @_ ;
- my $kwd ;
-
- &{"${kwd}_handler"}()
- while $kwd = check_keyword($pattern) ;
-}
-
-sub CASE_handler {
- blurt ("Error: `CASE:' after unconditional `CASE:'")
- if $condnum && $cond eq '';
- $cond = $_;
- TrimWhitespace($cond);
- print " ", ($condnum++ ? " else" : ""), ($cond ? " if ($cond)\n" : "\n");
- $_ = '' ;
-}
-
-sub INPUT_handler {
- for (; !/^$BLOCK_re/o; $_ = shift(@line)) {
- last if /^\s*NOT_IMPLEMENTED_YET/;
- next unless /\S/; # skip blank lines
-
- TrimWhitespace($_) ;
- my $line = $_ ;
-
- # remove trailing semicolon if no initialisation
- s/\s*;$//g unless /[=;+].*\S/ ;
-
- # check for optional initialisation code
- my $var_init = '' ;
- $var_init = $1 if s/\s*([=;+].*)$//s ;
- $var_init =~ s/"/\\"/g;
-
- s/\s+/ /g;
- my ($var_type, $var_addr, $var_name) = /^(.*?[^&\s])\s*(\&?)\s*\b(\w+)$/s
- or blurt("Error: invalid argument declaration '$line'"), next;
-
- # Check for duplicate definitions
- blurt ("Error: duplicate definition of argument '$var_name' ignored"), next
- if $arg_list{$var_name}++
- or defined $arg_types{$var_name} and not $processing_arg_with_types;
-
- $thisdone |= $var_name eq "THIS";
- $retvaldone |= $var_name eq "RETVAL";
- $var_types{$var_name} = $var_type;
- # XXXX This check is a safeguard against the unfinished conversion of
- # generate_init(). When generate_init() is fixed,
- # one can use 2-args map_type() unconditionally.
- if ($var_type =~ / \( \s* \* \s* \) /x) {
- # Function pointers are not yet supported with &output_init!
- print "\t" . &map_type($var_type, $var_name);
- $name_printed = 1;
- } else {
- print "\t" . &map_type($var_type);
- $name_printed = 0;
- }
- $var_num = $args_match{$var_name};
-
- $proto_arg[$var_num] = ProtoString($var_type)
- if $var_num ;
- $func_args =~ s/\b($var_name)\b/&$1/ if $var_addr;
- if ($var_init =~ /^[=;]\s*NO_INIT\s*;?\s*$/
- or $in_out{$var_name} and $in_out{$var_name} =~ /^OUT/
- and $var_init !~ /\S/) {
- if ($name_printed) {
- print ";\n";
- } else {
- print "\t$var_name;\n";
- }
- } elsif ($var_init =~ /\S/) {
- &output_init($var_type, $var_num, $var_name, $var_init, $name_printed);
- } elsif ($var_num) {
- # generate initialization code
- &generate_init($var_type, $var_num, $var_name, $name_printed);
- } else {
- print ";\n";
- }
- }
-}
-
-sub OUTPUT_handler {
- for (; !/^$BLOCK_re/o; $_ = shift(@line)) {
- next unless /\S/;
- if (/^\s*SETMAGIC\s*:\s*(ENABLE|DISABLE)\s*/) {
- $DoSetMagic = ($1 eq "ENABLE" ? 1 : 0);
- next;
- }
- my ($outarg, $outcode) = /^\s*(\S+)\s*(.*?)\s*$/s ;
- blurt ("Error: duplicate OUTPUT argument '$outarg' ignored"), next
- if $outargs{$outarg} ++ ;
- if (!$gotRETVAL and $outarg eq 'RETVAL') {
- # deal with RETVAL last
- $RETVAL_code = $outcode ;
- $gotRETVAL = 1 ;
- next ;
- }
- blurt ("Error: OUTPUT $outarg not an argument"), next
- unless defined($args_match{$outarg});
- blurt("Error: No input definition for OUTPUT argument '$outarg' - ignored"), next
- unless defined $var_types{$outarg} ;
- $var_num = $args_match{$outarg};
- if ($outcode) {
- print "\t$outcode\n";
- print "\tSvSETMAGIC(ST(" , $var_num-1 , "));\n" if $DoSetMagic;
- } else {
- &generate_output($var_types{$outarg}, $var_num, $outarg, $DoSetMagic);
- }
- delete $in_out{$outarg} # No need to auto-OUTPUT
- if exists $in_out{$outarg} and $in_out{$outarg} =~ /OUT$/;
- }
-}
-
-sub C_ARGS_handler() {
- my $in = merge_section();
-
- TrimWhitespace($in);
- $func_args = $in;
-}
-
-sub INTERFACE_MACRO_handler() {
- my $in = merge_section();
-
- TrimWhitespace($in);
- if ($in =~ /\s/) { # two
- ($interface_macro, $interface_macro_set) = split ' ', $in;
- } else {
- $interface_macro = $in;
- $interface_macro_set = 'UNKNOWN_CVT'; # catch later
- }
- $interface = 1; # local
- $Interfaces = 1; # global
-}
-
-sub INTERFACE_handler() {
- my $in = merge_section();
-
- TrimWhitespace($in);
-
- foreach (split /[\s,]+/, $in) {
- $Interfaces{$_} = $_;
- }
- print Q<<"EOF";
-# XSFUNCTION = $interface_macro($ret_type,cv,XSANY.any_dptr);
-EOF
- $interface = 1; # local
- $Interfaces = 1; # global
-}
-
-sub CLEANUP_handler() { print_section() }
-sub PREINIT_handler() { print_section() }
-sub POSTCALL_handler() { print_section() }
-sub INIT_handler() { print_section() }
-
-sub GetAliases
-{
- my ($line) = @_ ;
- my ($orig) = $line ;
- my ($alias) ;
- my ($value) ;
-
- # Parse alias definitions
- # format is
- # alias = value alias = value ...
-
- while ($line =~ s/^\s*([\w:]+)\s*=\s*(\w+)\s*//) {
- $alias = $1 ;
- $orig_alias = $alias ;
- $value = $2 ;
-
- # check for optional package definition in the alias
- $alias = $Packprefix . $alias if $alias !~ /::/ ;
-
- # check for duplicate alias name & duplicate value
- Warn("Warning: Ignoring duplicate alias '$orig_alias'")
- if defined $XsubAliases{$alias} ;
-
- Warn("Warning: Aliases '$orig_alias' and '$XsubAliasValues{$value}' have identical values")
- if $XsubAliasValues{$value} ;
-
- $XsubAliases = 1;
- $XsubAliases{$alias} = $value ;
- $XsubAliasValues{$value} = $orig_alias ;
- }
-
- blurt("Error: Cannot parse ALIAS definitions from '$orig'")
- if $line ;
-}
-
-sub ATTRS_handler ()
-{
- for (; !/^$BLOCK_re/o; $_ = shift(@line)) {
- next unless /\S/;
- TrimWhitespace($_) ;
- push @Attributes, $_;
- }
-}
-
-sub ALIAS_handler ()
-{
- for (; !/^$BLOCK_re/o; $_ = shift(@line)) {
- next unless /\S/;
- TrimWhitespace($_) ;
- GetAliases($_) if $_ ;
- }
-}
-
-sub REQUIRE_handler ()
-{
- # the rest of the current line should contain a version number
- my ($Ver) = $_ ;
-
- TrimWhitespace($Ver) ;
-
- death ("Error: REQUIRE expects a version number")
- unless $Ver ;
-
- # check that the version number is of the form n.n
- death ("Error: REQUIRE: expected a number, got '$Ver'")
- unless $Ver =~ /^\d+(\.\d*)?/ ;
-
- death ("Error: xsubpp $Ver (or better) required--this is only $XSUBPP_version.")
- unless $XSUBPP_version >= $Ver ;
-}
-
-sub VERSIONCHECK_handler ()
-{
- # the rest of the current line should contain either ENABLE or
- # DISABLE
-
- TrimWhitespace($_) ;
-
- # check for ENABLE/DISABLE
- death ("Error: VERSIONCHECK: ENABLE/DISABLE")
- unless /^(ENABLE|DISABLE)/i ;
-
- $WantVersionChk = 1 if $1 eq 'ENABLE' ;
- $WantVersionChk = 0 if $1 eq 'DISABLE' ;
-
-}
-
-sub PROTOTYPE_handler ()
-{
- my $specified ;
-
- death("Error: Only 1 PROTOTYPE definition allowed per xsub")
- if $proto_in_this_xsub ++ ;
-
- for (; !/^$BLOCK_re/o; $_ = shift(@line)) {
- next unless /\S/;
- $specified = 1 ;
- TrimWhitespace($_) ;
- if ($_ eq 'DISABLE') {
- $ProtoThisXSUB = 0
- }
- elsif ($_ eq 'ENABLE') {
- $ProtoThisXSUB = 1
- }
- else {
- # remove any whitespace
- s/\s+//g ;
- death("Error: Invalid prototype '$_'")
- unless ValidProtoString($_) ;
- $ProtoThisXSUB = C_string($_) ;
- }
- }
-
- # If no prototype specified, then assume empty prototype ""
- $ProtoThisXSUB = 2 unless $specified ;
-
- $ProtoUsed = 1 ;
-
-}
-
-sub SCOPE_handler ()
-{
- death("Error: Only 1 SCOPE declaration allowed per xsub")
- if $scope_in_this_xsub ++ ;
-
- for (; !/^$BLOCK_re/o; $_ = shift(@line)) {
- next unless /\S/;
- TrimWhitespace($_) ;
- if ($_ =~ /^DISABLE/i) {
- $ScopeThisXSUB = 0
- }
- elsif ($_ =~ /^ENABLE/i) {
- $ScopeThisXSUB = 1
- }
- }
-
-}
-
-sub PROTOTYPES_handler ()
-{
- # the rest of the current line should contain either ENABLE or
- # DISABLE
-
- TrimWhitespace($_) ;
-
- # check for ENABLE/DISABLE
- death ("Error: PROTOTYPES: ENABLE/DISABLE")
- unless /^(ENABLE|DISABLE)/i ;
-
- $WantPrototypes = 1 if $1 eq 'ENABLE' ;
- $WantPrototypes = 0 if $1 eq 'DISABLE' ;
- $ProtoUsed = 1 ;
-
-}
-
-sub INCLUDE_handler ()
-{
- # the rest of the current line should contain a valid filename
-
- TrimWhitespace($_) ;
-
- death("INCLUDE: filename missing")
- unless $_ ;
-
- death("INCLUDE: output pipe is illegal")
- if /^\s*\|/ ;
-
- # simple minded recursion detector
- death("INCLUDE loop detected")
- if $IncludedFiles{$_} ;
-
- ++ $IncludedFiles{$_} unless /\|\s*$/ ;
-
- # Save the current file context.
- push(@XSStack, {
- type => 'file',
- LastLine => $lastline,
- LastLineNo => $lastline_no,
- Line => \@line,
- LineNo => \@line_no,
- Filename => $filename,
- Handle => $FH,
- }) ;
-
- ++ $FH ;
-
- # open the new file
- open ($FH, "$_") or death("Cannot open '$_': $!") ;
-
- print Q<<"EOF" ;
-#
-#/* INCLUDE: Including '$_' from '$filename' */
-#
-EOF
-
- $filename = $_ ;
-
- # Prime the pump by reading the first
- # non-blank line
-
- # skip leading blank lines
- while (<$FH>) {
- last unless /^\s*$/ ;
- }
-
- $lastline = $_ ;
- $lastline_no = $. ;
-
-}
-
-sub PopFile()
-{
- return 0 unless $XSStack[-1]{type} eq 'file' ;
-
- my $data = pop @XSStack ;
- my $ThisFile = $filename ;
- my $isPipe = ($filename =~ /\|\s*$/) ;
-
- -- $IncludedFiles{$filename}
- unless $isPipe ;
-
- close $FH ;
-
- $FH = $data->{Handle} ;
- $filename = $data->{Filename} ;
- $lastline = $data->{LastLine} ;
- $lastline_no = $data->{LastLineNo} ;
- @line = @{ $data->{Line} } ;
- @line_no = @{ $data->{LineNo} } ;
-
- if ($isPipe and $? ) {
- -- $lastline_no ;
- print STDERR "Error reading from pipe '$ThisFile': $! in $filename, line $lastline_no\n" ;
- exit 1 ;
- }
-
- print Q<<"EOF" ;
-#
-#/* INCLUDE: Returning to '$filename' from '$ThisFile' */
-#
-EOF
-
- return 1 ;
-}
-
-sub ValidProtoString ($)
-{
- my($string) = @_ ;
-
- if ( $string =~ /^$proto_re+$/ ) {
- return $string ;
- }
-
- return 0 ;
-}
-
-sub C_string ($)
-{
- my($string) = @_ ;
-
- $string =~ s[\\][\\\\]g ;
- $string ;
-}
-
-sub ProtoString ($)
-{
- my ($type) = @_ ;
-
- $proto_letter{$type} or "\$" ;
-}
-
-sub check_cpp {
- my @cpp = grep(/^\#\s*(?:if|e\w+)/, @line);
- if (@cpp) {
- my ($cpp, $cpplevel);
- for $cpp (@cpp) {
- if ($cpp =~ /^\#\s*if/) {
- $cpplevel++;
- } elsif (!$cpplevel) {
- Warn("Warning: #else/elif/endif without #if in this function");
- print STDERR " (precede it with a blank line if the matching #if is outside the function)\n"
- if $XSStack[-1]{type} eq 'if';
- return;
- } elsif ($cpp =~ /^\#\s*endif/) {
- $cpplevel--;
- }
- }
- Warn("Warning: #if without #endif in this function") if $cpplevel;
- }
-}
-
-
-sub Q {
- my($text) = @_;
- $text =~ s/^#//gm;
- $text =~ s/\[\[/{/g;
- $text =~ s/\]\]/}/g;
- $text;
-}
-
-open($FH, $filename) or die "cannot open $filename: $!\n";
-
-# Identify the version of xsubpp used
-print <<EOM ;
-/*
- * This file was generated automatically by xsubpp version $XSUBPP_version from the
- * contents of $filename. Do not edit this file, edit $filename instead.
- *
- * ANY CHANGES MADE HERE WILL BE LOST!
- *
- */
-
-EOM
-
-
-print("#line 1 \"$filename\"\n")
- if $WantLineNumbers;
-
-firstmodule:
-while (<$FH>) {
- if (/^=/) {
- my $podstartline = $.;
- do {
- if (/^=cut\s*$/) {
- print("/* Skipped embedded POD. */\n");
- printf("#line %d \"$filename\"\n", $. + 1)
- if $WantLineNumbers;
- next firstmodule
- }
-
- } while (<$FH>);
- # At this point $. is at end of file so die won't state the start
- # of the problem, and as we haven't yet read any lines &death won't
- # show the correct line in the message either.
- die ("Error: Unterminated pod in $filename, line $podstartline\n")
- unless $lastline;
- }
- last if ($Module, $Package, $Prefix) =
- /^MODULE\s*=\s*([\w:]+)(?:\s+PACKAGE\s*=\s*([\w:]+))?(?:\s+PREFIX\s*=\s*(\S+))?\s*$/;
-
- if ($OBJ) {
- s/#if(?:def\s|\s+defined)\s*(\(__cplusplus\)|__cplusplus)/#if defined(__cplusplus) && !defined(PERL_OBJECT)/;
- }
- print $_;
-}
-&Exit unless defined $_;
-
-print "$xsubpp::counter::SECTION_END_MARKER\n" if $WantLineNumbers;
-
-$lastline = $_;
-$lastline_no = $.;
-
-# Read next xsub into @line from ($lastline, <$FH>).
-sub fetch_para {
- # parse paragraph
- death ("Error: Unterminated `#if/#ifdef/#ifndef'")
- if !defined $lastline && $XSStack[-1]{type} eq 'if';
- @line = ();
- @line_no = () ;
- return PopFile() if !defined $lastline;
-
- if ($lastline =~
- /^MODULE\s*=\s*([\w:]+)(?:\s+PACKAGE\s*=\s*([\w:]+))?(?:\s+PREFIX\s*=\s*(\S+))?\s*$/) {
- $Module = $1;
- $Package = defined($2) ? $2 : ''; # keep -w happy
- $Prefix = defined($3) ? $3 : ''; # keep -w happy
- $Prefix = quotemeta $Prefix ;
- ($Module_cname = $Module) =~ s/\W/_/g;
- ($Packid = $Package) =~ tr/:/_/;
- $Packprefix = $Package;
- $Packprefix .= "::" if $Packprefix ne "";
- $lastline = "";
- }
-
- for(;;) {
- # Skip embedded PODs
- while ($lastline =~ /^=/) {
- while ($lastline = <$FH>) {
- last if ($lastline =~ /^=cut\s*$/);
- }
- death ("Error: Unterminated pod") unless $lastline;
- $lastline = <$FH>;
- chomp $lastline;
- $lastline =~ s/^\s+$//;
- }
- if ($lastline !~ /^\s*#/ ||
- # CPP directives:
- # ANSI: if ifdef ifndef elif else endif define undef
- # line error pragma
- # gcc: warning include_next
- # obj-c: import
- # others: ident (gcc notes that some cpps have this one)
- $lastline =~ /^#[ \t]*(?:(?:if|ifn?def|elif|else|endif|define|undef|pragma|error|warning|line\s+\d+|ident)\b|(?:include(?:_next)?|import)\s*["<].*[>"])/) {
- last if $lastline =~ /^\S/ && @line && $line[-1] eq "";
- push(@line, $lastline);
- push(@line_no, $lastline_no) ;
- }
-
- # Read next line and continuation lines
- last unless defined($lastline = <$FH>);
- $lastline_no = $.;
- my $tmp_line;
- $lastline .= $tmp_line
- while ($lastline =~ /\\$/ && defined($tmp_line = <$FH>));
-
- chomp $lastline;
- $lastline =~ s/^\s+$//;
- }
- pop(@line), pop(@line_no) while @line && $line[-1] eq "";
- 1;
-}
-
-PARAGRAPH:
-while (fetch_para()) {
- # Print initial preprocessor statements and blank lines
- while (@line && $line[0] !~ /^[^\#]/) {
- my $line = shift(@line);
- print $line, "\n";
- next unless $line =~ /^\#\s*((if)(?:n?def)?|elsif|else|endif)\b/;
- my $statement = $+;
- if ($statement eq 'if') {
- $XSS_work_idx = @XSStack;
- push(@XSStack, {type => 'if'});
- } else {
- death ("Error: `$statement' with no matching `if'")
- if $XSStack[-1]{type} ne 'if';
- if ($XSStack[-1]{varname}) {
- push(@InitFileCode, "#endif\n");
- push(@BootCode, "#endif");
- }
-
- my(@fns) = keys %{$XSStack[-1]{functions}};
- if ($statement ne 'endif') {
- # Hide the functions defined in other #if branches, and reset.
- @{$XSStack[-1]{other_functions}}{@fns} = (1) x @fns;
- @{$XSStack[-1]}{qw(varname functions)} = ('', {});
- } else {
- my($tmp) = pop(@XSStack);
- 0 while (--$XSS_work_idx
- && $XSStack[$XSS_work_idx]{type} ne 'if');
- # Keep all new defined functions
- push(@fns, keys %{$tmp->{other_functions}});
- @{$XSStack[$XSS_work_idx]{functions}}{@fns} = (1) x @fns;
- }
- }
- }
-
- next PARAGRAPH unless @line;
-
- if ($XSS_work_idx && !$XSStack[$XSS_work_idx]{varname}) {
- # We are inside an #if, but have not yet #defined its xsubpp variable.
- print "#define $cpp_next_tmp 1\n\n";
- push(@InitFileCode, "#if $cpp_next_tmp\n");
- push(@BootCode, "#if $cpp_next_tmp");
- $XSStack[$XSS_work_idx]{varname} = $cpp_next_tmp++;
- }
-
- death ("Code is not inside a function"
- ." (maybe last function was ended by a blank line "
- ." followed by a a statement on column one?)")
- if $line[0] =~ /^\s/;
-
- # initialize info arrays
- undef(%args_match);
- undef(%var_types);
- undef(%defaults);
- undef($class);
- undef($static);
- undef($elipsis);
- undef($wantRETVAL) ;
- undef($RETVAL_no_return) ;
- undef(%arg_list) ;
- undef(@proto_arg) ;
- undef(@arg_with_types) ;
- undef($processing_arg_with_types) ;
- undef(%arg_types) ;
- undef(@outlist) ;
- undef(%in_out) ;
- undef($proto_in_this_xsub) ;
- undef($scope_in_this_xsub) ;
- undef($interface);
- undef($prepush_done);
- $interface_macro = 'XSINTERFACE_FUNC' ;
- $interface_macro_set = 'XSINTERFACE_FUNC_SET' ;
- $ProtoThisXSUB = $WantPrototypes ;
- $ScopeThisXSUB = 0;
- $xsreturn = 0;
-
- $_ = shift(@line);
- while ($kwd = check_keyword("REQUIRE|PROTOTYPES|VERSIONCHECK|INCLUDE")) {
- &{"${kwd}_handler"}() ;
- next PARAGRAPH unless @line ;
- $_ = shift(@line);
- }
-
- if (check_keyword("BOOT")) {
- &check_cpp;
- push (@BootCode, "#line $line_no[@line_no - @line] \"$filename\"")
- if $WantLineNumbers && $line[0] !~ /^\s*#\s*line\b/;
- push (@BootCode, @line, "") ;
- next PARAGRAPH ;
- }
-
-
- # extract return type, function name and arguments
- ($ret_type) = TidyType($_);
- $RETVAL_no_return = 1 if $ret_type =~ s/^NO_OUTPUT\s+//;
-
- # Allow one-line ANSI-like declaration
- unshift @line, $2
- if $process_argtypes
- and $ret_type =~ s/^(.*?\w.*?)\s*\b(\w+\s*\(.*)/$1/s;
-
- # a function definition needs at least 2 lines
- blurt ("Error: Function definition too short '$ret_type'"), next PARAGRAPH
- unless @line ;
-
- $static = 1 if $ret_type =~ s/^static\s+//;
-
- $func_header = shift(@line);
- blurt ("Error: Cannot parse function definition from '$func_header'"), next PARAGRAPH
- unless $func_header =~ /^(?:([\w:]*)::)?(\w+)\s*\(\s*(.*?)\s*\)\s*(const)?\s*(;\s*)?$/s;
-
- ($class, $func_name, $orig_args) = ($1, $2, $3) ;
- $class = "$4 $class" if $4;
- ($pname = $func_name) =~ s/^($Prefix)?/$Packprefix/;
- ($clean_func_name = $func_name) =~ s/^$Prefix//;
- $Full_func_name = "${Packid}_$clean_func_name";
- if ($Is_VMS) { $Full_func_name = $SymSet->addsym($Full_func_name); }
-
- # Check for duplicate function definition
- for $tmp (@XSStack) {
- next unless defined $tmp->{functions}{$Full_func_name};
- Warn("Warning: duplicate function definition '$clean_func_name' detected");
- last;
- }
- $XSStack[$XSS_work_idx]{functions}{$Full_func_name} ++ ;
- %XsubAliases = %XsubAliasValues = %Interfaces = @Attributes = ();
- $DoSetMagic = 1;
-
- $orig_args =~ s/\\\s*/ /g; # process line continuations
-
- my %only_outlist;
- if ($process_argtypes and $orig_args =~ /\S/) {
- my $args = "$orig_args ,";
- if ($args =~ /^( (??{ $C_arg }) , )* $ /x) {
- @args = ($args =~ /\G ( (??{ $C_arg }) ) , /xg);
- for ( @args ) {
- s/^\s+//;
- s/\s+$//;
- my $arg = $_;
- my $default;
- ($arg, $default) = / ( [^=]* ) ( (?: = .* )? ) /x;
- my ($pre, $name) = ($arg =~ /(.*?) \s* \b(\w+) \s* $ /x);
- next unless length $pre;
- my $out_type;
- my $inout_var;
- if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\s+//) {
- my $type = $1;
- $out_type = $type if $type ne 'IN';
- $arg =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\s+//;
- }
- if (/\W/) { # Has a type
- push @arg_with_types, $arg;
- # warn "pushing '$arg'\n";
- $arg_types{$name} = $arg;
- $_ = "$name$default";
- }
- $only_outlist{$_} = 1 if $out_type eq "OUTLIST";
- push @outlist, $name if $out_type =~ /OUTLIST$/;
- $in_out{$name} = $out_type if $out_type;
- }
- } else {
- @args = split(/\s*,\s*/, $orig_args);
- Warn("Warning: cannot parse argument list '$orig_args', fallback to split");
- }
- } else {
- @args = split(/\s*,\s*/, $orig_args);
- for (@args) {
- if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|IN_OUT|OUT)\s+//) {
- my $out_type = $1;
- next if $out_type eq 'IN';
- $only_outlist{$_} = 1 if $out_type eq "OUTLIST";
- push @outlist, $name if $out_type =~ /OUTLIST$/;
- $in_out{$_} = $out_type;
- }
- }
- }
- if (defined($class)) {
- my $arg0 = ((defined($static) or $func_name eq 'new')
- ? "CLASS" : "THIS");
- unshift(@args, $arg0);
- ($report_args = "$arg0, $report_args") =~ s/^\w+, $/$arg0/;
- }
- my $extra_args = 0;
- @args_num = ();
- $num_args = 0;
- my $report_args = '';
- foreach $i (0 .. $#args) {
- if ($args[$i] =~ s/\.\.\.//) {
- $elipsis = 1;
- if ($args[$i] eq '' && $i == $#args) {
- $report_args .= ", ...";
- pop(@args);
- last;
- }
- }
- if ($only_outlist{$args[$i]}) {
- push @args_num, undef;
- } else {
- push @args_num, ++$num_args;
- $report_args .= ", $args[$i]";
- }
- if ($args[$i] =~ /^([^=]*[^\s=])\s*=\s*(.*)/s) {
- $extra_args++;
- $args[$i] = $1;
- $defaults{$args[$i]} = $2;
- $defaults{$args[$i]} =~ s/"/\\"/g;
- }
- $proto_arg[$i+1] = "\$" ;
- }
- $min_args = $num_args - $extra_args;
- $report_args =~ s/"/\\"/g;
- $report_args =~ s/^,\s+//;
- my @func_args = @args;
- shift @func_args if defined($class);
-
- for (@func_args) {
- s/^/&/ if $in_out{$_};
- }
- $func_args = join(", ", @func_args);
- @args_match{@args} = @args_num;
-
- $PPCODE = grep(/^\s*PPCODE\s*:/, @line);
- $CODE = grep(/^\s*CODE\s*:/, @line);
- # Detect CODE: blocks which use ST(n)= or XST_m*(n,v)
- # to set explicit return values.
- $EXPLICIT_RETURN = ($CODE &&
- ("@line" =~ /(\bST\s*\([^;]*=) | (\bXST_m\w+\s*\()/x ));
- $ALIAS = grep(/^\s*ALIAS\s*:/, @line);
- $INTERFACE = grep(/^\s*INTERFACE\s*:/, @line);
-
- $xsreturn = 1 if $EXPLICIT_RETURN;
-
- # print function header
- print Q<<"EOF";
-#XS(XS_${Full_func_name})
-#[[
-# dXSARGS;
-EOF
- print Q<<"EOF" if $ALIAS ;
-# dXSI32;
-EOF
- print Q<<"EOF" if $INTERFACE ;
-# dXSFUNCTION($ret_type);
-EOF
- if ($elipsis) {
- $cond = ($min_args ? qq(items < $min_args) : 0);
- }
- elsif ($min_args == $num_args) {
- $cond = qq(items != $min_args);
- }
- else {
- $cond = qq(items < $min_args || items > $num_args);
- }
-
- print Q<<"EOF" if $except;
-# char errbuf[1024];
-# *errbuf = '\0';
-EOF
-
- if ($ALIAS)
- { print Q<<"EOF" if $cond }
-# if ($cond)
-# Perl_croak(aTHX_ "Usage: %s($report_args)", GvNAME(CvGV(cv)));
-EOF
- else
- { print Q<<"EOF" if $cond }
-# if ($cond)
-# Perl_croak(aTHX_ "Usage: $pname($report_args)");
-EOF
-
- print Q<<"EOF" if $PPCODE;
-# SP -= items;
-EOF
-
- # Now do a block of some sort.
-
- $condnum = 0;
- $cond = ''; # last CASE: condidional
- push(@line, "$END:");
- push(@line_no, $line_no[-1]);
- $_ = '';
- &check_cpp;
- while (@line) {
- &CASE_handler if check_keyword("CASE");
- print Q<<"EOF";
-# $except [[
-EOF
-
- # do initialization of input variables
- $thisdone = 0;
- $retvaldone = 0;
- $deferred = "";
- %arg_list = () ;
- $gotRETVAL = 0;
-
- INPUT_handler() ;
- process_keyword("INPUT|PREINIT|INTERFACE_MACRO|C_ARGS|ALIAS|ATTRS|PROTOTYPE|SCOPE") ;
-
- print Q<<"EOF" if $ScopeThisXSUB;
-# ENTER;
-# [[
-EOF
-
- if (!$thisdone && defined($class)) {
- if (defined($static) or $func_name eq 'new') {
- print "\tchar *";
- $var_types{"CLASS"} = "char *";
- &generate_init("char *", 1, "CLASS");
- }
- else {
- print "\t$class *";
- $var_types{"THIS"} = "$class *";
- &generate_init("$class *", 1, "THIS");
- }
- }
-
- # do code
- if (/^\s*NOT_IMPLEMENTED_YET/) {
- print "\n\tPerl_croak(aTHX_ \"$pname: not implemented yet\");\n";
- $_ = '' ;
- } else {
- if ($ret_type ne "void") {
- print "\t" . &map_type($ret_type, 'RETVAL') . ";\n"
- if !$retvaldone;
- $args_match{"RETVAL"} = 0;
- $var_types{"RETVAL"} = $ret_type;
- print "\tdXSTARG;\n"
- if $WantOptimize and $targetable{$type_kind{$ret_type}};
- }
-
- if (@arg_with_types) {
- unshift @line, @arg_with_types, $_;
- $_ = "";
- $processing_arg_with_types = 1;
- INPUT_handler() ;
- }
- print $deferred;
-
- process_keyword("INIT|ALIAS|ATTRS|PROTOTYPE|INTERFACE_MACRO|INTERFACE|C_ARGS") ;
-
- if (check_keyword("PPCODE")) {
- print_section();
- death ("PPCODE must be last thing") if @line;
- print "\tLEAVE;\n" if $ScopeThisXSUB;
- print "\tPUTBACK;\n\treturn;\n";
- } elsif (check_keyword("CODE")) {
- print_section() ;
- } elsif (defined($class) and $func_name eq "DESTROY") {
- print "\n\t";
- print "delete THIS;\n";
- } else {
- print "\n\t";
- if ($ret_type ne "void") {
- print "RETVAL = ";
- $wantRETVAL = 1;
- }
- if (defined($static)) {
- if ($func_name eq 'new') {
- $func_name = "$class";
- } else {
- print "${class}::";
- }
- } elsif (defined($class)) {
- if ($func_name eq 'new') {
- $func_name .= " $class";
- } else {
- print "THIS->";
- }
- }
- $func_name =~ s/^($spat)//
- if defined($spat);
- $func_name = 'XSFUNCTION' if $interface;
- print "$func_name($func_args);\n";
- }
- }
-
- # do output variables
- $gotRETVAL = 0; # 1 if RETVAL seen in OUTPUT section;
- undef $RETVAL_code ; # code to set RETVAL (from OUTPUT section);
- # $wantRETVAL set if 'RETVAL =' autogenerated
- ($wantRETVAL, $ret_type) = (0, 'void') if $RETVAL_no_return;
- undef %outargs ;
- process_keyword("POSTCALL|OUTPUT|ALIAS|ATTRS|PROTOTYPE");
-
- &generate_output($var_types{$_}, $args_match{$_}, $_, $DoSetMagic)
- for grep $in_out{$_} =~ /OUT$/, keys %in_out;
-
- # all OUTPUT done, so now push the return value on the stack
- if ($gotRETVAL && $RETVAL_code) {
- print "\t$RETVAL_code\n";
- } elsif ($gotRETVAL || $wantRETVAL) {
- my $t = $WantOptimize && $targetable{$type_kind{$ret_type}};
- my $var = 'RETVAL';
- my $type = $ret_type;
-
- # 0: type, 1: with_size, 2: how, 3: how_size
- if ($t and not $t->[1] and $t->[0] eq 'p') {
- # PUSHp corresponds to setpvn. Treate setpv directly
- my $what = eval qq("$t->[2]");
- warn $@ if $@;
-
- print "\tsv_setpv(TARG, $what); XSprePUSH; PUSHTARG;\n";
- $prepush_done = 1;
- }
- elsif ($t) {
- my $what = eval qq("$t->[2]");
- warn $@ if $@;
-
- my $size = $t->[3];
- $size = '' unless defined $size;
- $size = eval qq("$size");
- warn $@ if $@;
- print "\tXSprePUSH; PUSH$t->[0]($what$size);\n";
- $prepush_done = 1;
- }
- else {
- # RETVAL almost never needs SvSETMAGIC()
- &generate_output($ret_type, 0, 'RETVAL', 0);
- }
- }
-
- $xsreturn = 1 if $ret_type ne "void";
- my $num = $xsreturn;
- my $c = @outlist;
- print "\tXSprePUSH;" if $c and not $prepush_done;
- print "\tEXTEND(SP,$c);\n" if $c;
- $xsreturn += $c;
- generate_output($var_types{$_}, $num++, $_, 0, 1) for @outlist;
-
- # do cleanup
- process_keyword("CLEANUP|ALIAS|ATTRS|PROTOTYPE") ;
-
- print Q<<"EOF" if $ScopeThisXSUB;
-# ]]
-EOF
- print Q<<"EOF" if $ScopeThisXSUB and not $PPCODE;
-# LEAVE;
-EOF
-
- # print function trailer
- print Q<<EOF;
-# ]]
-EOF
- print Q<<EOF if $except;
-# BEGHANDLERS
-# CATCHALL
-# sprintf(errbuf, "%s: %s\\tpropagated", Xname, Xreason);
-# ENDHANDLERS
-EOF
- if (check_keyword("CASE")) {
- blurt ("Error: No `CASE:' at top of function")
- unless $condnum;
- $_ = "CASE: $_"; # Restore CASE: label
- next;
- }
- last if $_ eq "$END:";
- death(/^$BLOCK_re/o ? "Misplaced `$1:'" : "Junk at end of function");
- }
-
- print Q<<EOF if $except;
-# if (errbuf[0])
-# Perl_croak(aTHX_ errbuf);
-EOF
-
- if ($xsreturn) {
- print Q<<EOF unless $PPCODE;
-# XSRETURN($xsreturn);
-EOF
- } else {
- print Q<<EOF unless $PPCODE;
-# XSRETURN_EMPTY;
-EOF
- }
-
- print Q<<EOF;
-#]]
-#
-EOF
-
- my $newXS = "newXS" ;
- my $proto = "" ;
-
- # Build the prototype string for the xsub
- if ($ProtoThisXSUB) {
- $newXS = "newXSproto";
-
- if ($ProtoThisXSUB eq 2) {
- # User has specified empty prototype
- $proto = ', ""' ;
- }
- elsif ($ProtoThisXSUB ne 1) {
- # User has specified a prototype
- $proto = ', "' . $ProtoThisXSUB . '"';
- }
- else {
- my $s = ';';
- if ($min_args < $num_args) {
- $s = '';
- $proto_arg[$min_args] .= ";" ;
- }
- push @proto_arg, "$s\@"
- if $elipsis ;
-
- $proto = ', "' . join ("", @proto_arg) . '"';
- }
- }
-
- if (%XsubAliases) {
- $XsubAliases{$pname} = 0
- unless defined $XsubAliases{$pname} ;
- while ( ($name, $value) = each %XsubAliases) {
- push(@InitFileCode, Q<<"EOF");
-# cv = newXS(\"$name\", XS_$Full_func_name, file);
-# XSANY.any_i32 = $value ;
-EOF
- push(@InitFileCode, Q<<"EOF") if $proto;
-# sv_setpv((SV*)cv$proto) ;
-EOF
- }
- }
- elsif (@Attributes) {
- push(@InitFileCode, Q<<"EOF");
-# cv = newXS(\"$pname\", XS_$Full_func_name, file);
-# apply_attrs_string("$Package", cv, "@Attributes", 0);
-EOF
- }
- elsif ($interface) {
- while ( ($name, $value) = each %Interfaces) {
- $name = "$Package\::$name" unless $name =~ /::/;
- push(@InitFileCode, Q<<"EOF");
-# cv = newXS(\"$name\", XS_$Full_func_name, file);
-# $interface_macro_set(cv,$value) ;
-EOF
- push(@InitFileCode, Q<<"EOF") if $proto;
-# sv_setpv((SV*)cv$proto) ;
-EOF
- }
- }
- else {
- push(@InitFileCode,
- " ${newXS}(\"$pname\", XS_$Full_func_name, file$proto);\n");
- }
-}
-
-# print initialization routine
-
-print Q<<"EOF";
-##ifdef __cplusplus
-#extern "C"
-##endif
-EOF
-
-print Q<<"EOF";
-#XS(boot_$Module_cname)
-EOF
-
-print Q<<"EOF";
-#[[
-# dXSARGS;
-# char* file = __FILE__;
-#
-EOF
-
-print Q<<"EOF" if $WantVersionChk ;
-# XS_VERSION_BOOTCHECK ;
-#
-EOF
-
-print Q<<"EOF" if defined $XsubAliases or defined $Interfaces ;
-# {
-# CV * cv ;
-#
-EOF
-
-print @InitFileCode;
-
-print Q<<"EOF" if defined $XsubAliases or defined $Interfaces ;
-# }
-EOF
-
-if (@BootCode)
-{
- print "\n /* Initialisation Section */\n\n" ;
- @line = @BootCode;
- print_section();
- print "\n /* End of Initialisation Section */\n\n" ;
-}
-
-print Q<<"EOF";;
-# XSRETURN_YES;
-#]]
-#
-EOF
-
-warn("Please specify prototyping behavior for $filename (see perlxs manual)\n")
- unless $ProtoUsed ;
-&Exit;
-
-sub output_init {
- local($type, $num, $var, $init, $name_printed) = @_;
- local($arg) = "ST(" . ($num - 1) . ")";
-
- if( $init =~ /^=/ ) {
- if ($name_printed) {
- eval qq/print " $init\\n"/;
- } else {
- eval qq/print "\\t$var $init\\n"/;
- }
- warn $@ if $@;
- } else {
- if( $init =~ s/^\+// && $num ) {
- &generate_init($type, $num, $var, $name_printed);
- } elsif ($name_printed) {
- print ";\n";
- $init =~ s/^;//;
- } else {
- eval qq/print "\\t$var;\\n"/;
- warn $@ if $@;
- $init =~ s/^;//;
- }
- $deferred .= eval qq/"\\n\\t$init\\n"/;
- warn $@ if $@;
- }
-}
-
-sub Warn
-{
- # work out the line number
- my $line_no = $line_no[@line_no - @line -1] ;
-
- print STDERR "@_ in $filename, line $line_no\n" ;
-}
-
-sub blurt
-{
- Warn @_ ;
- $errors ++
-}
-
-sub death
-{
- Warn @_ ;
- exit 1 ;
-}
-
-sub generate_init {
- local($type, $num, $var) = @_;
- local($arg) = "ST(" . ($num - 1) . ")";
- local($argoff) = $num - 1;
- local($ntype);
- local($tk);
-
- $type = TidyType($type) ;
- blurt("Error: '$type' not in typemap"), return
- unless defined($type_kind{$type});
-
- ($ntype = $type) =~ s/\s*\*/Ptr/g;
- ($subtype = $ntype) =~ s/(?:Array)?(?:Ptr)?$//;
- $tk = $type_kind{$type};
- $tk =~ s/OBJ$/REF/ if $func_name =~ /DESTROY$/;
- $type =~ tr/:/_/;
- blurt("Error: No INPUT definition for type '$type', typekind '$type_kind{$type}' found"), return
- unless defined $input_expr{$tk} ;
- $expr = $input_expr{$tk};
- if ($expr =~ /DO_ARRAY_ELEM/) {
- blurt("Error: '$subtype' not in typemap"), return
- unless defined($type_kind{$subtype});
- blurt("Error: No INPUT definition for type '$subtype', typekind '$type_kind{$subtype}' found"), return
- unless defined $input_expr{$type_kind{$subtype}} ;
- $subexpr = $input_expr{$type_kind{$subtype}};
- $subexpr =~ s/ntype/subtype/g;
- $subexpr =~ s/\$arg/ST(ix_$var)/g;
- $subexpr =~ s/\n\t/\n\t\t/g;
- $subexpr =~ s/is not of (.*\")/[arg %d] is not of $1, ix_$var + 1/g;
- $subexpr =~ s/\$var/${var}[ix_$var - $argoff]/;
- $expr =~ s/DO_ARRAY_ELEM/$subexpr/;
- }
- if ($expr =~ m#/\*.*scope.*\*/#i) { # "scope" in C comments
- $ScopeThisXSUB = 1;
- }
- if (defined($defaults{$var})) {
- $expr =~ s/(\t+)/$1 /g;
- $expr =~ s/ /\t/g;
- if ($name_printed) {
- print ";\n";
- } else {
- eval qq/print "\\t$var;\\n"/;
- warn $@ if $@;
- }
- if ($defaults{$var} eq 'NO_INIT') {
- $deferred .= eval qq/"\\n\\tif (items >= $num) {\\n$expr;\\n\\t}\\n"/;
- } else {
- $deferred .= eval qq/"\\n\\tif (items < $num)\\n\\t $var = $defaults{$var};\\n\\telse {\\n$expr;\\n\\t}\\n"/;
- }
- warn $@ if $@;
- } elsif ($ScopeThisXSUB or $expr !~ /^\t\$var =/) {
- if ($name_printed) {
- print ";\n";
- } else {
- eval qq/print "\\t$var;\\n"/;
- warn $@ if $@;
- }
- $deferred .= eval qq/"\\n$expr;\\n"/;
- warn $@ if $@;
- } else {
- die "panic: do not know how to handle this branch for function pointers"
- if $name_printed;
- eval qq/print "$expr;\\n"/;
- warn $@ if $@;
- }
-}
-
-sub generate_output {
- local($type, $num, $var, $do_setmagic, $do_push) = @_;
- local($arg) = "ST(" . ($num - ($num != 0)) . ")";
- local($argoff) = $num - 1;
- local($ntype);
-
- $type = TidyType($type) ;
- if ($type =~ /^array\(([^,]*),(.*)\)/) {
- print "\tsv_setpvn($arg, (char *)$var, $2 * sizeof($1));\n";
- print "\tSvSETMAGIC($arg);\n" if $do_setmagic;
- } else {
- blurt("Error: '$type' not in typemap"), return
- unless defined($type_kind{$type});
- blurt("Error: No OUTPUT definition for type '$type', typekind '$type_kind{$type}' found"), return
- unless defined $output_expr{$type_kind{$type}} ;
- ($ntype = $type) =~ s/\s*\*/Ptr/g;
- $ntype =~ s/\(\)//g;
- ($subtype = $ntype) =~ s/(?:Array)?(?:Ptr)?$//;
- $expr = $output_expr{$type_kind{$type}};
- if ($expr =~ /DO_ARRAY_ELEM/) {
- blurt("Error: '$subtype' not in typemap"), return
- unless defined($type_kind{$subtype});
- blurt("Error: No OUTPUT definition for type '$subtype', typekind '$type_kind{$subtype}' found"), return
- unless defined $output_expr{$type_kind{$subtype}} ;
- $subexpr = $output_expr{$type_kind{$subtype}};
- $subexpr =~ s/ntype/subtype/g;
- $subexpr =~ s/\$arg/ST(ix_$var)/g;
- $subexpr =~ s/\$var/${var}[ix_$var]/g;
- $subexpr =~ s/\n\t/\n\t\t/g;
- $expr =~ s/DO_ARRAY_ELEM\n/$subexpr/;
- eval "print qq\a$expr\a";
- warn $@ if $@;
- print "\t\tSvSETMAGIC(ST(ix_$var));\n" if $do_setmagic;
- }
- elsif ($var eq 'RETVAL') {
- if ($expr =~ /^\t\$arg = new/) {
- # We expect that $arg has refcnt 1, so we need to
- # mortalize it.
- eval "print qq\a$expr\a";
- warn $@ if $@;
- print "\tsv_2mortal(ST($num));\n";
- print "\tSvSETMAGIC(ST($num));\n" if $do_setmagic;
- }
- elsif ($expr =~ /^\s*\$arg\s*=/) {
- # We expect that $arg has refcnt >=1, so we need
- # to mortalize it!
- eval "print qq\a$expr\a";
- warn $@ if $@;
- print "\tsv_2mortal(ST(0));\n";
- print "\tSvSETMAGIC(ST(0));\n" if $do_setmagic;
- }
- else {
- # Just hope that the entry would safely write it
- # over an already mortalized value. By
- # coincidence, something like $arg = &sv_undef
- # works too.
- print "\tST(0) = sv_newmortal();\n";
- eval "print qq\a$expr\a";
- warn $@ if $@;
- # new mortals don't have set magic
- }
- }
- elsif ($do_push) {
- print "\tPUSHs(sv_newmortal());\n";
- $arg = "ST($num)";
- eval "print qq\a$expr\a";
- warn $@ if $@;
- print "\tSvSETMAGIC($arg);\n" if $do_setmagic;
- }
- elsif ($arg =~ /^ST\(\d+\)$/) {
- eval "print qq\a$expr\a";
- warn $@ if $@;
- print "\tSvSETMAGIC($arg);\n" if $do_setmagic;
- }
- }
-}
-
-sub map_type {
- my($type, $varname) = @_;
-
- $type =~ tr/:/_/;
- $type =~ s/^array\(([^,]*),(.*)\).*/$1 */s;
- if ($varname) {
- if ($varname && $type =~ / \( \s* \* (?= \s* \) ) /xg) {
- (substr $type, pos $type, 0) = " $varname ";
- } else {
- $type .= "\t$varname";
- }
- }
- $type;
-}
-
-
-sub Exit {
-# If this is VMS, the exit status has meaning to the shell, so we
-# use a predictable value (SS$_Normal or SS$_Abort) rather than an
-# arbitrary number.
-# exit ($Is_VMS ? ($errors ? 44 : 1) : $errors) ;
- exit ($errors ? 1 : 0);
-}
diff --git a/contrib/perl5/lib/Fatal.pm b/contrib/perl5/lib/Fatal.pm
deleted file mode 100644
index 1496117..0000000
--- a/contrib/perl5/lib/Fatal.pm
+++ /dev/null
@@ -1,186 +0,0 @@
-package Fatal;
-
-use 5.005_64;
-use Carp;
-use strict;
-our($AUTOLOAD, $Debug, $VERSION);
-
-$VERSION = 1.02;
-
-$Debug = 0 unless defined $Debug;
-
-sub import {
- my $self = shift(@_);
- my($sym, $pkg);
- my $void = 0;
- $pkg = (caller)[0];
- foreach $sym (@_) {
- if ($sym eq ":void") {
- $void = 1;
- }
- else {
- &_make_fatal($sym, $pkg, $void);
- }
- }
-};
-
-sub AUTOLOAD {
- my $cmd = $AUTOLOAD;
- $cmd =~ s/.*:://;
- &_make_fatal($cmd, (caller)[0]);
- goto &$AUTOLOAD;
-}
-
-sub fill_protos {
- my $proto = shift;
- my ($n, $isref, @out, @out1, $seen_semi) = -1;
- while ($proto =~ /\S/) {
- $n++;
- push(@out1,[$n,@out]) if $seen_semi;
- push(@out, $1 . "{\$_[$n]}"), next if $proto =~ s/^\s*\\([\@%\$\&])//;
- push(@out, "\$_[$n]"), next if $proto =~ s/^\s*([*\$&])//;
- push(@out, "\@_[$n..\$#_]"), last if $proto =~ s/^\s*(;\s*)?\@//;
- $seen_semi = 1, $n--, next if $proto =~ s/^\s*;//; # XXXX ????
- die "Unknown prototype letters: \"$proto\"";
- }
- push(@out1,[$n+1,@out]);
- @out1;
-}
-
-sub write_invocation {
- my ($core, $call, $name, $void, @argvs) = @_;
- if (@argvs == 1) { # No optional arguments
- my @argv = @{$argvs[0]};
- shift @argv;
- return "\t" . one_invocation($core, $call, $name, $void, @argv) . ";\n";
- } else {
- my $else = "\t";
- my (@out, @argv, $n);
- while (@argvs) {
- @argv = @{shift @argvs};
- $n = shift @argv;
- push @out, "$ {else}if (\@_ == $n) {\n";
- $else = "\t} els";
- push @out,
- "\t\treturn " . one_invocation($core, $call, $name, $void, @argv) . ";\n";
- }
- push @out, <<EOC;
- }
- die "$name(\@_): Do not expect to get ", scalar \@_, " arguments";
-EOC
- return join '', @out;
- }
-}
-
-sub one_invocation {
- my ($core, $call, $name, $void, @argv) = @_;
- local $" = ', ';
- if ($void) {
- return qq/(defined wantarray)?$call(@argv):
- $call(@argv) || croak "Can't $name(\@_)/ .
- ($core ? ': $!' : ', \$! is \"$!\"') . '"'
- } else {
- return qq{$call(@argv) || croak "Can't $name(\@_)} .
- ($core ? ': $!' : ', \$! is \"$!\"') . '"';
- }
-}
-
-sub _make_fatal {
- my($sub, $pkg, $void) = @_;
- my($name, $code, $sref, $real_proto, $proto, $core, $call);
- my $ini = $sub;
-
- $sub = "${pkg}::$sub" unless $sub =~ /::/;
- $name = $sub;
- $name =~ s/.*::// or $name =~ s/^&//;
- print "# _make_fatal: sub=$sub pkg=$pkg name=$name void=$void\n" if $Debug;
- croak "Bad subroutine name for Fatal: $name" unless $name =~ /^\w+$/;
- if (defined(&$sub)) { # user subroutine
- $sref = \&$sub;
- $proto = prototype $sref;
- $call = '&$sref';
- } elsif ($sub eq $ini) { # Stray user subroutine
- die "$sub is not a Perl subroutine"
- } else { # CORE subroutine
- $proto = eval { prototype "CORE::$name" };
- die "$name is neither a builtin, nor a Perl subroutine"
- if $@;
- die "Cannot make a non-overridable builtin fatal"
- if not defined $proto;
- $core = 1;
- $call = "CORE::$name";
- }
- if (defined $proto) {
- $real_proto = " ($proto)";
- } else {
- $real_proto = '';
- $proto = '@';
- }
- $code = <<EOS;
-sub$real_proto {
- local(\$", \$!) = (', ', 0);
-EOS
- my @protos = fill_protos($proto);
- $code .= write_invocation($core, $call, $name, $void, @protos);
- $code .= "}\n";
- print $code if $Debug;
- {
- no strict 'refs'; # to avoid: Can't use string (...) as a symbol ref ...
- $code = eval("package $pkg; use Carp; $code");
- die if $@;
- no warnings; # to avoid: Subroutine foo redefined ...
- *{$sub} = $code;
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Fatal - replace functions with equivalents which succeed or die
-
-=head1 SYNOPSIS
-
- use Fatal qw(open close);
-
- sub juggle { . . . }
- import Fatal 'juggle';
-
-=head1 DESCRIPTION
-
-C<Fatal> provides a way to conveniently replace functions which normally
-return a false value when they fail with equivalents which raise exceptions
-if they are not successful. This lets you use these functions without
-having to test their return values explicitly on each call. Exceptions
-can be caught using C<eval{}>. See L<perlfunc> and L<perlvar> for details.
-
-The do-or-die equivalents are set up simply by calling Fatal's
-C<import> routine, passing it the names of the functions to be
-replaced. You may wrap both user-defined functions and overridable
-CORE operators (except C<exec>, C<system> which cannot be expressed
-via prototypes) in this way.
-
-If the symbol C<:void> appears in the import list, then functions
-named later in that import list raise an exception only when
-these are called in void context--that is, when their return
-values are ignored. For example
-
- use Fatal qw/:void open close/;
-
- # properly checked, so no exception raised on error
- if(open(FH, "< /bogotic") {
- warn "bogo file, dude: $!";
- }
-
- # not checked, so error raises an exception
- close FH;
-
-=head1 AUTHOR
-
-Lionel.Cons@cern.ch
-
-prototype updates by Ilya Zakharevich ilya@math.ohio-state.edu
-
-=cut
diff --git a/contrib/perl5/lib/File/Basename.pm b/contrib/perl5/lib/File/Basename.pm
deleted file mode 100644
index 94aac2d..0000000
--- a/contrib/perl5/lib/File/Basename.pm
+++ /dev/null
@@ -1,283 +0,0 @@
-package File::Basename;
-
-=head1 NAME
-
-fileparse - split a pathname into pieces
-
-basename - extract just the filename from a path
-
-dirname - extract just the directory from a path
-
-=head1 SYNOPSIS
-
- use File::Basename;
-
- ($name,$path,$suffix) = fileparse($fullname,@suffixlist)
- fileparse_set_fstype($os_string);
- $basename = basename($fullname,@suffixlist);
- $dirname = dirname($fullname);
-
- ($name,$path,$suffix) = fileparse("lib/File/Basename.pm","\.pm");
- fileparse_set_fstype("VMS");
- $basename = basename("lib/File/Basename.pm",".pm");
- $dirname = dirname("lib/File/Basename.pm");
-
-=head1 DESCRIPTION
-
-These routines allow you to parse file specifications into useful
-pieces using the syntax of different operating systems.
-
-=over 4
-
-=item fileparse_set_fstype
-
-You select the syntax via the routine fileparse_set_fstype().
-
-If the argument passed to it contains one of the substrings
-"VMS", "MSDOS", "MacOS", "AmigaOS" or "MSWin32", the file specification
-syntax of that operating system is used in future calls to
-fileparse(), basename(), and dirname(). If it contains none of
-these substrings, Unix syntax is used. This pattern matching is
-case-insensitive. If you've selected VMS syntax, and the file
-specification you pass to one of these routines contains a "/",
-they assume you are using Unix emulation and apply the Unix syntax
-rules instead, for that function call only.
-
-If the argument passed to it contains one of the substrings "VMS",
-"MSDOS", "MacOS", "AmigaOS", "os2", "MSWin32" or "RISCOS", then the pattern
-matching for suffix removal is performed without regard for case,
-since those systems are not case-sensitive when opening existing files
-(though some of them preserve case on file creation).
-
-If you haven't called fileparse_set_fstype(), the syntax is chosen
-by examining the builtin variable C<$^O> according to these rules.
-
-=item fileparse
-
-The fileparse() routine divides a file specification into three
-parts: a leading B<path>, a file B<name>, and a B<suffix>. The
-B<path> contains everything up to and including the last directory
-separator in the input file specification. The remainder of the input
-file specification is then divided into B<name> and B<suffix> based on
-the optional patterns you specify in C<@suffixlist>. Each element of
-this list is interpreted as a regular expression, and is matched
-against the end of B<name>. If this succeeds, the matching portion of
-B<name> is removed and prepended to B<suffix>. By proper use of
-C<@suffixlist>, you can remove file types or versions for examination.
-
-You are guaranteed that if you concatenate B<path>, B<name>, and
-B<suffix> together in that order, the result will denote the same
-file as the input file specification.
-
-=back
-
-=head1 EXAMPLES
-
-Using Unix file syntax:
-
- ($base,$path,$type) = fileparse('/virgil/aeneid/draft.book7',
- '\.book\d+');
-
-would yield
-
- $base eq 'draft'
- $path eq '/virgil/aeneid/',
- $type eq '.book7'
-
-Similarly, using VMS syntax:
-
- ($name,$dir,$type) = fileparse('Doc_Root:[Help]Rhetoric.Rnh',
- '\..*');
-
-would yield
-
- $name eq 'Rhetoric'
- $dir eq 'Doc_Root:[Help]'
- $type eq '.Rnh'
-
-=over
-
-=item C<basename>
-
-The basename() routine returns the first element of the list produced
-by calling fileparse() with the same arguments, except that it always
-quotes metacharacters in the given suffixes. It is provided for
-programmer compatibility with the Unix shell command basename(1).
-
-=item C<dirname>
-
-The dirname() routine returns the directory portion of the input file
-specification. When using VMS or MacOS syntax, this is identical to the
-second element of the list produced by calling fileparse() with the same
-input file specification. (Under VMS, if there is no directory information
-in the input file specification, then the current default device and
-directory are returned.) When using Unix or MSDOS syntax, the return
-value conforms to the behavior of the Unix shell command dirname(1). This
-is usually the same as the behavior of fileparse(), but differs in some
-cases. For example, for the input file specification F<lib/>, fileparse()
-considers the directory name to be F<lib/>, while dirname() considers the
-directory name to be F<.>).
-
-=back
-
-=cut
-
-
-## use strict;
-# A bit of juggling to insure that C<use re 'taint';> always works, since
-# File::Basename is used during the Perl build, when the re extension may
-# not be available.
-BEGIN {
- unless (eval { require re; })
- { eval ' sub re::import { $^H |= 0x00100000; } ' }
- import re 'taint';
-}
-
-
-
-use 5.005_64;
-our(@ISA, @EXPORT, $VERSION, $Fileparse_fstype, $Fileparse_igncase);
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(fileparse fileparse_set_fstype basename dirname);
-$VERSION = "2.6";
-
-
-# fileparse_set_fstype() - specify OS-based rules used in future
-# calls to routines in this package
-#
-# Currently recognized values: VMS, MSDOS, MacOS, AmigaOS, os2, RISCOS
-# Any other name uses Unix-style rules and is case-sensitive
-
-sub fileparse_set_fstype {
- my @old = ($Fileparse_fstype, $Fileparse_igncase);
- if (@_) {
- $Fileparse_fstype = $_[0];
- $Fileparse_igncase = ($_[0] =~ /^(?:MacOS|VMS|AmigaOS|os2|RISCOS|MSWin32|MSDOS)/i);
- }
- wantarray ? @old : $old[0];
-}
-
-# fileparse() - parse file specification
-#
-# Version 2.4 27-Sep-1996 Charles Bailey bailey@genetics.upenn.edu
-
-
-sub fileparse {
- my($fullname,@suffices) = @_;
- my($fstype,$igncase) = ($Fileparse_fstype, $Fileparse_igncase);
- my($dirpath,$tail,$suffix,$basename);
- my($taint) = substr($fullname,0,0); # Is $fullname tainted?
-
- if ($fstype =~ /^VMS/i) {
- if ($fullname =~ m#/#) { $fstype = '' } # We're doing Unix emulation
- else {
- ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/s);
- $dirpath ||= ''; # should always be defined
- }
- }
- if ($fstype =~ /^MS(DOS|Win32)|epoc/i) {
- ($dirpath,$basename) = ($fullname =~ /^((?:.*[:\\\/])?)(.*)/s);
- $dirpath .= '.\\' unless $dirpath =~ /[\\\/]\z/;
- }
- elsif ($fstype =~ /^MacOS/si) {
- ($dirpath,$basename) = ($fullname =~ /^(.*:)?(.*)/s);
- }
- elsif ($fstype =~ /^AmigaOS/i) {
- ($dirpath,$basename) = ($fullname =~ /(.*[:\/])?(.*)/s);
- $dirpath = './' unless $dirpath;
- }
- elsif ($fstype !~ /^VMS/i) { # default to Unix
- ($dirpath,$basename) = ($fullname =~ m#^(.*/)?(.*)#s);
- if ($^O eq 'VMS' and $fullname =~ m:^(/[^/]+/000000(/|$))(.*):) {
- # dev:[000000] is top of VMS tree, similar to Unix '/'
- # so strip it off and treat the rest as "normal"
- my $devspec = $1;
- my $remainder = $3;
- ($dirpath,$basename) = ($remainder =~ m#^(.*/)?(.*)#s);
- $dirpath = $devspec.$dirpath;
- }
- $dirpath = './' unless $dirpath;
- }
-
- if (@suffices) {
- $tail = '';
- foreach $suffix (@suffices) {
- my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$";
- if ($basename =~ s/$pat//s) {
- $taint .= substr($suffix,0,0);
- $tail = $1 . $tail;
- }
- }
- }
-
- $tail .= $taint if defined $tail; # avoid warning if $tail == undef
- wantarray ? ($basename . $taint, $dirpath . $taint, $tail)
- : $basename . $taint;
-}
-
-
-# basename() - returns first element of list returned by fileparse()
-
-sub basename {
- my($name) = shift;
- (fileparse($name, map("\Q$_\E",@_)))[0];
-}
-
-
-# dirname() - returns device and directory portion of file specification
-# Behavior matches that of Unix dirname(1) exactly for Unix and MSDOS
-# filespecs except for names ending with a separator, e.g., "/xx/yy/".
-# This differs from the second element of the list returned
-# by fileparse() in that the trailing '/' (Unix) or '\' (MSDOS) (and
-# the last directory name if the filespec ends in a '/' or '\'), is lost.
-
-sub dirname {
- my($basename,$dirname) = fileparse($_[0]);
- my($fstype) = $Fileparse_fstype;
-
- if ($fstype =~ /VMS/i) {
- if ($_[0] =~ m#/#) { $fstype = '' }
- else { return $dirname || $ENV{DEFAULT} }
- }
- if ($fstype =~ /MacOS/i) {
- if( !length($basename) && $dirname !~ /^[^:]+:\z/) {
- $dirname =~ s/([^:]):\z/$1/s;
- ($basename,$dirname) = fileparse $dirname;
- }
- $dirname .= ":" unless $dirname =~ /:\z/;
- }
- elsif ($fstype =~ /MSDOS/i) {
- $dirname =~ s/([^:])[\\\/]*\z/$1/;
- unless( length($basename) ) {
- ($basename,$dirname) = fileparse $dirname;
- $dirname =~ s/([^:])[\\\/]*\z/$1/;
- }
- }
- elsif ($fstype =~ /MSWin32/i) {
- $dirname =~ s/([^:])[\\\/]*\z/$1/;
- unless( length($basename) ) {
- ($basename,$dirname) = fileparse $dirname;
- $dirname =~ s/([^:])[\\\/]*\z/$1/;
- }
- }
- elsif ($fstype =~ /AmigaOS/i) {
- if ( $dirname =~ /:\z/) { return $dirname }
- chop $dirname;
- $dirname =~ s#[^:/]+\z## unless length($basename);
- }
- else {
- $dirname =~ s:(.)/*\z:$1:s;
- unless( length($basename) ) {
- local($File::Basename::Fileparse_fstype) = $fstype;
- ($basename,$dirname) = fileparse $dirname;
- $dirname =~ s:(.)/*\z:$1:s;
- }
- }
-
- $dirname;
-}
-
-fileparse_set_fstype $^O;
-
-1;
diff --git a/contrib/perl5/lib/File/CheckTree.pm b/contrib/perl5/lib/File/CheckTree.pm
deleted file mode 100644
index ae18777..0000000
--- a/contrib/perl5/lib/File/CheckTree.pm
+++ /dev/null
@@ -1,151 +0,0 @@
-package File::CheckTree;
-require 5.000;
-require Exporter;
-
-=head1 NAME
-
-validate - run many filetest checks on a tree
-
-=head1 SYNOPSIS
-
- use File::CheckTree;
-
- $warnings += validate( q{
- /vmunix -e || die
- /boot -e || die
- /bin cd
- csh -ex
- csh !-ug
- sh -ex
- sh !-ug
- /usr -d || warn "What happened to $file?\n"
- });
-
-=head1 DESCRIPTION
-
-The validate() routine takes a single multiline string consisting of
-lines containing a filename plus a file test to try on it. (The
-file test may also be a "cd", causing subsequent relative filenames
-to be interpreted relative to that directory.) After the file test
-you may put C<|| die> to make it a fatal error if the file test fails.
-The default is C<|| warn>. The file test may optionally have a "!' prepended
-to test for the opposite condition. If you do a cd and then list some
-relative filenames, you may want to indent them slightly for readability.
-If you supply your own die() or warn() message, you can use $file to
-interpolate the filename.
-
-Filetests may be bunched: "-rwx" tests for all of C<-r>, C<-w>, and C<-x>.
-Only the first failed test of the bunch will produce a warning.
-
-The routine returns the number of warnings issued.
-
-=cut
-
-@ISA = qw(Exporter);
-@EXPORT = qw(validate);
-
-# $RCSfile: validate.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:19 $
-
-# The validate routine takes a single multiline string consisting of
-# lines containing a filename plus a file test to try on it. (The
-# file test may also be a 'cd', causing subsequent relative filenames
-# to be interpreted relative to that directory.) After the file test
-# you may put '|| die' to make it a fatal error if the file test fails.
-# The default is '|| warn'. The file test may optionally have a ! prepended
-# to test for the opposite condition. If you do a cd and then list some
-# relative filenames, you may want to indent them slightly for readability.
-# If you supply your own "die" or "warn" message, you can use $file to
-# interpolate the filename.
-
-# Filetests may be bunched: -rwx tests for all of -r, -w and -x.
-# Only the first failed test of the bunch will produce a warning.
-
-# The routine returns the number of warnings issued.
-
-# Usage:
-# use File::CheckTree;
-# $warnings += validate('
-# /vmunix -e || die
-# /boot -e || die
-# /bin cd
-# csh -ex
-# csh !-ug
-# sh -ex
-# sh !-ug
-# /usr -d || warn "What happened to $file?\n"
-# ');
-
-sub validate {
- local($file,$test,$warnings,$oldwarnings);
- foreach $check (split(/\n/,$_[0])) {
- next if $check =~ /^#/;
- next if $check =~ /^$/;
- ($file,$test) = split(' ',$check,2);
- if ($test =~ s/^(!?-)(\w{2,}\b)/$1Z/) {
- $testlist = $2;
- @testlist = split(//,$testlist);
- }
- else {
- @testlist = ('Z');
- }
- $oldwarnings = $warnings;
- foreach $one (@testlist) {
- $this = $test;
- $this =~ s/(-\w\b)/$1 \$file/g;
- $this =~ s/-Z/-$one/;
- $this .= ' || warn' unless $this =~ /\|\|/;
- $this =~ s/^(.*\S)\s*\|\|\s*(die|warn)$/$1 || valmess('$2','$1')/;
- $this =~ s/\bcd\b/chdir (\$cwd = \$file)/g;
- eval $this;
- last if $warnings > $oldwarnings;
- }
- }
- $warnings;
-}
-
-sub valmess {
- local($disposition,$this) = @_;
- $file = $cwd . '/' . $file unless $file =~ m|^/|s;
- if ($this =~ /^(!?)-(\w)\s+\$file\s*$/) {
- $neg = $1;
- $tmp = $2;
- $tmp eq 'r' && ($mess = "$file is not readable by uid $>.");
- $tmp eq 'w' && ($mess = "$file is not writable by uid $>.");
- $tmp eq 'x' && ($mess = "$file is not executable by uid $>.");
- $tmp eq 'o' && ($mess = "$file is not owned by uid $>.");
- $tmp eq 'R' && ($mess = "$file is not readable by you.");
- $tmp eq 'W' && ($mess = "$file is not writable by you.");
- $tmp eq 'X' && ($mess = "$file is not executable by you.");
- $tmp eq 'O' && ($mess = "$file is not owned by you.");
- $tmp eq 'e' && ($mess = "$file does not exist.");
- $tmp eq 'z' && ($mess = "$file does not have zero size.");
- $tmp eq 's' && ($mess = "$file does not have non-zero size.");
- $tmp eq 'f' && ($mess = "$file is not a plain file.");
- $tmp eq 'd' && ($mess = "$file is not a directory.");
- $tmp eq 'l' && ($mess = "$file is not a symbolic link.");
- $tmp eq 'p' && ($mess = "$file is not a named pipe (FIFO).");
- $tmp eq 'S' && ($mess = "$file is not a socket.");
- $tmp eq 'b' && ($mess = "$file is not a block special file.");
- $tmp eq 'c' && ($mess = "$file is not a character special file.");
- $tmp eq 'u' && ($mess = "$file does not have the setuid bit set.");
- $tmp eq 'g' && ($mess = "$file does not have the setgid bit set.");
- $tmp eq 'k' && ($mess = "$file does not have the sticky bit set.");
- $tmp eq 'T' && ($mess = "$file is not a text file.");
- $tmp eq 'B' && ($mess = "$file is not a binary file.");
- if ($neg eq '!') {
- $mess =~ s/ is not / should not be / ||
- $mess =~ s/ does not / should not / ||
- $mess =~ s/ not / /;
- }
- }
- else {
- $this =~ s/\$file/'$file'/g;
- $mess = "Can't do $this.\n";
- }
- die "$mess\n" if $disposition eq 'die';
- warn "$mess\n";
- ++$warnings;
-}
-
-1;
-
diff --git a/contrib/perl5/lib/File/Compare.pm b/contrib/perl5/lib/File/Compare.pm
deleted file mode 100644
index 667e7cb..0000000
--- a/contrib/perl5/lib/File/Compare.pm
+++ /dev/null
@@ -1,182 +0,0 @@
-package File::Compare;
-
-use 5.005_64;
-use strict;
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Too_Big);
-
-require Exporter;
-use Carp;
-
-$VERSION = '1.1002';
-@ISA = qw(Exporter);
-@EXPORT = qw(compare);
-@EXPORT_OK = qw(cmp compare_text);
-
-$Too_Big = 1024 * 1024 * 2;
-
-sub VERSION {
- # Version of File::Compare
- return $File::Compare::VERSION;
-}
-
-sub compare {
- croak("Usage: compare( file1, file2 [, buffersize]) ")
- unless(@_ == 2 || @_ == 3);
-
- my ($from,$to,$size) = @_;
- my $text_mode = defined($size) && (ref($size) eq 'CODE' || $size < 0);
-
- my ($fromsize,$closefrom,$closeto);
- local (*FROM, *TO);
-
- croak("from undefined") unless (defined $from);
- croak("to undefined") unless (defined $to);
-
- if (ref($from) &&
- (UNIVERSAL::isa($from,'GLOB') || UNIVERSAL::isa($from,'IO::Handle'))) {
- *FROM = *$from;
- } elsif (ref(\$from) eq 'GLOB') {
- *FROM = $from;
- } else {
- open(FROM,"<$from") or goto fail_open1;
- unless ($text_mode) {
- binmode FROM;
- $fromsize = -s FROM;
- }
- $closefrom = 1;
- }
-
- if (ref($to) &&
- (UNIVERSAL::isa($to,'GLOB') || UNIVERSAL::isa($to,'IO::Handle'))) {
- *TO = *$to;
- } elsif (ref(\$to) eq 'GLOB') {
- *TO = $to;
- } else {
- open(TO,"<$to") or goto fail_open2;
- binmode TO unless $text_mode;
- $closeto = 1;
- }
-
- if (!$text_mode && $closefrom && $closeto) {
- # If both are opened files we know they differ if their size differ
- goto fail_inner if $fromsize != -s TO;
- }
-
- if ($text_mode) {
- local $/ = "\n";
- my ($fline,$tline);
- while (defined($fline = <FROM>)) {
- goto fail_inner unless defined($tline = <TO>);
- if (ref $size) {
- # $size contains ref to comparison function
- goto fail_inner if &$size($fline, $tline);
- } else {
- goto fail_inner if $fline ne $tline;
- }
- }
- goto fail_inner if defined($tline = <TO>);
- }
- else {
- unless (defined($size) && $size > 0) {
- $size = $fromsize || -s TO || 0;
- $size = 1024 if $size < 512;
- $size = $Too_Big if $size > $Too_Big;
- }
-
- my ($fr,$tr,$fbuf,$tbuf);
- $fbuf = $tbuf = '';
- while(defined($fr = read(FROM,$fbuf,$size)) && $fr > 0) {
- unless (defined($tr = read(TO,$tbuf,$fr)) && $tbuf eq $fbuf) {
- goto fail_inner;
- }
- }
- goto fail_inner if defined($tr = read(TO,$tbuf,$size)) && $tr > 0;
- }
-
- close(TO) || goto fail_open2 if $closeto;
- close(FROM) || goto fail_open1 if $closefrom;
-
- return 0;
-
- # All of these contortions try to preserve error messages...
- fail_inner:
- close(TO) || goto fail_open2 if $closeto;
- close(FROM) || goto fail_open1 if $closefrom;
-
- return 1;
-
- fail_open2:
- if ($closefrom) {
- my $status = $!;
- $! = 0;
- close FROM;
- $! = $status unless $!;
- }
- fail_open1:
- return -1;
-}
-
-sub cmp;
-*cmp = \&compare;
-
-sub compare_text {
- my ($from,$to,$cmp) = @_;
- croak("Usage: compare_text( file1, file2 [, cmp-function])")
- unless @_ == 2 || @_ == 3;
- croak("Third arg to compare_text() function must be a code reference")
- if @_ == 3 && ref($cmp) ne 'CODE';
-
- # Using a negative buffer size puts compare into text_mode too
- $cmp = -1 unless defined $cmp;
- compare($from, $to, $cmp);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-File::Compare - Compare files or filehandles
-
-=head1 SYNOPSIS
-
- use File::Compare;
-
- if (compare("file1","file2") == 0) {
- print "They're equal\n";
- }
-
-=head1 DESCRIPTION
-
-The File::Compare::compare function compares the contents of two
-sources, each of which can be a file or a file handle. It is exported
-from File::Compare by default.
-
-File::Compare::cmp is a synonym for File::Compare::compare. It is
-exported from File::Compare only by request.
-
-File::Compare::compare_text does a line by line comparison of the two
-files. It stops as soon as a difference is detected. compare_text()
-accepts an optional third argument: This must be a CODE reference to
-a line comparison function, which returns 0 when both lines are considered
-equal. For example:
-
- compare_text($file1, $file2)
-
-is basically equivalent to
-
- compare_text($file1, $file2, sub {$_[0] ne $_[1]} )
-
-=head1 RETURN
-
-File::Compare::compare return 0 if the files are equal, 1 if the
-files are unequal, or -1 if an error was encountered.
-
-=head1 AUTHOR
-
-File::Compare was written by Nick Ing-Simmons.
-Its original documentation was written by Chip Salzenberg.
-
-=cut
-
diff --git a/contrib/perl5/lib/File/Copy.pm b/contrib/perl5/lib/File/Copy.pm
deleted file mode 100644
index 24d1ffd..0000000
--- a/contrib/perl5/lib/File/Copy.pm
+++ /dev/null
@@ -1,378 +0,0 @@
-# File/Copy.pm. Written in 1994 by Aaron Sherman <ajs@ajs.com>. This
-# source code has been placed in the public domain by the author.
-# Please be kind and preserve the documentation.
-#
-# Additions copyright 1996 by Charles Bailey. Permission is granted
-# to distribute the revised code under the same terms as Perl itself.
-
-package File::Copy;
-
-use 5.005_64;
-use strict;
-use Carp;
-our(@ISA, @EXPORT, @EXPORT_OK, $VERSION, $Too_Big, $Syscopy_is_copy);
-sub copy;
-sub syscopy;
-sub cp;
-sub mv;
-
-# Note that this module implements only *part* of the API defined by
-# the File/Copy.pm module of the File-Tools-2.0 package. However, that
-# package has not yet been updated to work with Perl 5.004, and so it
-# would be a Bad Thing for the CPAN module to grab it and replace this
-# module. Therefore, we set this module's version higher than 2.0.
-$VERSION = '2.03';
-
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(copy move);
-@EXPORT_OK = qw(cp mv);
-
-$Too_Big = 1024 * 1024 * 2;
-
-sub _catname { # Will be replaced by File::Spec when it arrives
- my($from, $to) = @_;
- if (not defined &basename) {
- require File::Basename;
- import File::Basename 'basename';
- }
- if ($^O eq 'VMS') { $to = VMS::Filespec::vmspath($to) . basename($from); }
- elsif ($^O eq 'MacOS') { $to =~ s/^([^:]+)$/:$1/; $to .= ':' . basename($from); }
- elsif ($to =~ m|\\|) { $to .= '\\' . basename($from); }
- else { $to .= '/' . basename($from); }
-}
-
-sub copy {
- croak("Usage: copy(FROM, TO [, BUFFERSIZE]) ")
- unless(@_ == 2 || @_ == 3);
-
- my $from = shift;
- my $to = shift;
-
- my $from_a_handle = (ref($from)
- ? (ref($from) eq 'GLOB'
- || UNIVERSAL::isa($from, 'GLOB')
- || UNIVERSAL::isa($from, 'IO::Handle'))
- : (ref(\$from) eq 'GLOB'));
- my $to_a_handle = (ref($to)
- ? (ref($to) eq 'GLOB'
- || UNIVERSAL::isa($to, 'GLOB')
- || UNIVERSAL::isa($to, 'IO::Handle'))
- : (ref(\$to) eq 'GLOB'));
-
- if (!$from_a_handle && !$to_a_handle && -d $to && ! -d $from) {
- $to = _catname($from, $to);
- }
-
- if (defined &syscopy && !$Syscopy_is_copy
- && !$to_a_handle
- && !($from_a_handle && $^O eq 'os2' ) # OS/2 cannot handle handles
- && !($from_a_handle && $^O eq 'mpeix') # and neither can MPE/iX.
- && !($from_a_handle && $^O eq 'MSWin32')
- && !($from_a_handle && $^O eq 'MacOS')
- )
- {
- return syscopy($from, $to);
- }
-
- my $closefrom = 0;
- my $closeto = 0;
- my ($size, $status, $r, $buf);
- local(*FROM, *TO);
- local($\) = '';
-
- if ($from_a_handle) {
- *FROM = *$from{FILEHANDLE};
- } else {
- $from = _protect($from) if $from =~ /^\s/s;
- open(FROM, "< $from\0") or goto fail_open1;
- binmode FROM or die "($!,$^E)";
- $closefrom = 1;
- }
-
- if ($to_a_handle) {
- *TO = *$to{FILEHANDLE};
- } else {
- $to = _protect($to) if $to =~ /^\s/s;
- open(TO,"> $to\0") or goto fail_open2;
- binmode TO or die "($!,$^E)";
- $closeto = 1;
- }
-
- if (@_) {
- $size = shift(@_) + 0;
- croak("Bad buffer size for copy: $size\n") unless ($size > 0);
- } else {
- $size = -s FROM;
- $size = 1024 if ($size < 512);
- $size = $Too_Big if ($size > $Too_Big);
- }
-
- $! = 0;
- for (;;) {
- my ($r, $w, $t);
- defined($r = sysread(FROM, $buf, $size))
- or goto fail_inner;
- last unless $r;
- for ($w = 0; $w < $r; $w += $t) {
- $t = syswrite(TO, $buf, $r - $w, $w)
- or goto fail_inner;
- }
- }
-
- close(TO) || goto fail_open2 if $closeto;
- close(FROM) || goto fail_open1 if $closefrom;
-
- # Use this idiom to avoid uninitialized value warning.
- return 1;
-
- # All of these contortions try to preserve error messages...
- fail_inner:
- if ($closeto) {
- $status = $!;
- $! = 0;
- close TO;
- $! = $status unless $!;
- }
- fail_open2:
- if ($closefrom) {
- $status = $!;
- $! = 0;
- close FROM;
- $! = $status unless $!;
- }
- fail_open1:
- return 0;
-}
-
-sub move {
- my($from,$to) = @_;
- my($copied,$fromsz,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts);
-
- if (-d $to && ! -d $from) {
- $to = _catname($from, $to);
- }
-
- ($tosz1,$tomt1) = (stat($to))[7,9];
- $fromsz = -s $from;
- if ($^O eq 'os2' and defined $tosz1 and defined $fromsz) {
- # will not rename with overwrite
- unlink $to;
- }
- return 1 if rename $from, $to;
-
- ($sts,$ossts) = ($! + 0, $^E + 0);
- # Did rename return an error even though it succeeded, because $to
- # is on a remote NFS file system, and NFS lost the server's ack?
- return 1 if defined($fromsz) && !-e $from && # $from disappeared
- (($tosz2,$tomt2) = (stat($to))[7,9]) && # $to's there
- ($tosz1 != $tosz2 or $tomt1 != $tomt2) && # and changed
- $tosz2 == $fromsz; # it's all there
-
- ($tosz1,$tomt1) = (stat($to))[7,9]; # just in case rename did something
- return 1 if ($copied = copy($from,$to)) && unlink($from);
-
- ($tosz2,$tomt2) = ((stat($to))[7,9],0,0) if defined $tomt1;
- unlink($to) if !defined($tomt1) or $tomt1 != $tomt2 or $tosz1 != $tosz2;
- ($!,$^E) = ($sts,$ossts);
- return 0;
-}
-
-*cp = \&copy;
-*mv = \&move;
-
-
-if ($^O eq 'MacOS') {
- *_protect = sub { MacPerl::MakeFSSpec($_[0]) };
-} else {
- *_protect = sub { "./$_[0]" };
-}
-
-# &syscopy is an XSUB under OS/2
-unless (defined &syscopy) {
- if ($^O eq 'VMS') {
- *syscopy = \&rmscopy;
- } elsif ($^O eq 'mpeix') {
- *syscopy = sub {
- return 0 unless @_ == 2;
- # Use the MPE cp program in order to
- # preserve MPE file attributes.
- return system('/bin/cp', '-f', $_[0], $_[1]) == 0;
- };
- } elsif ($^O eq 'MSWin32') {
- *syscopy = sub {
- return 0 unless @_ == 2;
- return Win32::CopyFile(@_, 1);
- };
- } elsif ($^O eq 'MacOS') {
- require Mac::MoreFiles;
- *syscopy = sub {
- my($from, $to) = @_;
- my($dir, $toname);
-
- return 0 unless -e $from;
-
- if ($to =~ /(.*:)([^:]+):?$/) {
- ($dir, $toname) = ($1, $2);
- } else {
- ($dir, $toname) = (":", $to);
- }
-
- unlink($to);
- Mac::MoreFiles::FSpFileCopy($from, $dir, $toname, 1);
- };
- } else {
- $Syscopy_is_copy = 1;
- *syscopy = \&copy;
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-File::Copy - Copy files or filehandles
-
-=head1 SYNOPSIS
-
- use File::Copy;
-
- copy("file1","file2");
- copy("Copy.pm",\*STDOUT);'
- move("/dev1/fileA","/dev2/fileB");
-
- use POSIX;
- use File::Copy cp;
-
- $n = FileHandle->new("/a/file","r");
- cp($n,"x");'
-
-=head1 DESCRIPTION
-
-The File::Copy module provides two basic functions, C<copy> and
-C<move>, which are useful for getting the contents of a file from
-one place to another.
-
-=over 4
-
-=item *
-
-The C<copy> function takes two
-parameters: a file to copy from and a file to copy to. Either
-argument may be a string, a FileHandle reference or a FileHandle
-glob. Obviously, if the first argument is a filehandle of some
-sort, it will be read from, and if it is a file I<name> it will
-be opened for reading. Likewise, the second argument will be
-written to (and created if need be).
-
-B<Note that passing in
-files as handles instead of names may lead to loss of information
-on some operating systems; it is recommended that you use file
-names whenever possible.> Files are opened in binary mode where
-applicable. To get a consistent behaviour when copying from a
-filehandle to a file, use C<binmode> on the filehandle.
-
-An optional third parameter can be used to specify the buffer
-size used for copying. This is the number of bytes from the
-first file, that wil be held in memory at any given time, before
-being written to the second file. The default buffer size depends
-upon the file, but will generally be the whole file (up to 2Mb), or
-1k for filehandles that do not reference files (eg. sockets).
-
-You may use the syntax C<use File::Copy "cp"> to get at the
-"cp" alias for this function. The syntax is I<exactly> the same.
-
-=item *
-
-The C<move> function also takes two parameters: the current name
-and the intended name of the file to be moved. If the destination
-already exists and is a directory, and the source is not a
-directory, then the source file will be renamed into the directory
-specified by the destination.
-
-If possible, move() will simply rename the file. Otherwise, it copies
-the file to the new location and deletes the original. If an error occurs
-during this copy-and-delete process, you may be left with a (possibly partial)
-copy of the file under the destination name.
-
-You may use the "mv" alias for this function in the same way that
-you may use the "cp" alias for C<copy>.
-
-=back
-
-File::Copy also provides the C<syscopy> routine, which copies the
-file specified in the first parameter to the file specified in the
-second parameter, preserving OS-specific attributes and file
-structure. For Unix systems, this is equivalent to the simple
-C<copy> routine. For VMS systems, this calls the C<rmscopy>
-routine (see below). For OS/2 systems, this calls the C<syscopy>
-XSUB directly. For Win32 systems, this calls C<Win32::CopyFile>.
-
-=head2 Special behaviour if C<syscopy> is defined (OS/2, VMS and Win32)
-
-If both arguments to C<copy> are not file handles,
-then C<copy> will perform a "system copy" of
-the input file to a new output file, in order to preserve file
-attributes, indexed file structure, I<etc.> The buffer size
-parameter is ignored. If either argument to C<copy> is a
-handle to an opened file, then data is copied using Perl
-operators, and no effort is made to preserve file attributes
-or record structure.
-
-The system copy routine may also be called directly under VMS and OS/2
-as C<File::Copy::syscopy> (or under VMS as C<File::Copy::rmscopy>, which
-is the routine that does the actual work for syscopy).
-
-=over 4
-
-=item rmscopy($from,$to[,$date_flag])
-
-The first and second arguments may be strings, typeglobs, typeglob
-references, or objects inheriting from IO::Handle;
-they are used in all cases to obtain the
-I<filespec> of the input and output files, respectively. The
-name and type of the input file are used as defaults for the
-output file, if necessary.
-
-A new version of the output file is always created, which
-inherits the structure and RMS attributes of the input file,
-except for owner and protections (and possibly timestamps;
-see below). All data from the input file is copied to the
-output file; if either of the first two parameters to C<rmscopy>
-is a file handle, its position is unchanged. (Note that this
-means a file handle pointing to the output file will be
-associated with an old version of that file after C<rmscopy>
-returns, not the newly created version.)
-
-The third parameter is an integer flag, which tells C<rmscopy>
-how to handle timestamps. If it is E<lt> 0, none of the input file's
-timestamps are propagated to the output file. If it is E<gt> 0, then
-it is interpreted as a bitmask: if bit 0 (the LSB) is set, then
-timestamps other than the revision date are propagated; if bit 1
-is set, the revision date is propagated. If the third parameter
-to C<rmscopy> is 0, then it behaves much like the DCL COPY command:
-if the name or type of the output file was explicitly specified,
-then no timestamps are propagated, but if they were taken implicitly
-from the input filespec, then all timestamps other than the
-revision date are propagated. If this parameter is not supplied,
-it defaults to 0.
-
-Like C<copy>, C<rmscopy> returns 1 on success. If an error occurs,
-it sets C<$!>, deletes the output file, and returns 0.
-
-=back
-
-=head1 RETURN
-
-All functions return 1 on success, 0 on failure.
-$! will be set if an error was encountered.
-
-=head1 AUTHOR
-
-File::Copy was written by Aaron Sherman I<E<lt>ajs@ajs.comE<gt>> in 1995,
-and updated by Charles Bailey I<E<lt>bailey@newman.upenn.eduE<gt>> in 1996.
-
-=cut
-
diff --git a/contrib/perl5/lib/File/DosGlob.pm b/contrib/perl5/lib/File/DosGlob.pm
deleted file mode 100644
index d7dea7b..0000000
--- a/contrib/perl5/lib/File/DosGlob.pm
+++ /dev/null
@@ -1,254 +0,0 @@
-#!perl -w
-
-#
-# Documentation at the __END__
-#
-
-package File::DosGlob;
-
-sub doglob {
- my $cond = shift;
- my @retval = ();
- #print "doglob: ", join('|', @_), "\n";
- OUTER:
- for my $arg (@_) {
- local $_ = $arg;
- my @matched = ();
- my @globdirs = ();
- my $head = '.';
- my $sepchr = '/';
- next OUTER unless defined $_ and $_ ne '';
- # if arg is within quotes strip em and do no globbing
- if (/^"(.*)"\z/s) {
- $_ = $1;
- if ($cond eq 'd') { push(@retval, $_) if -d $_ }
- else { push(@retval, $_) if -e $_ }
- next OUTER;
- }
- # wildcards with a drive prefix such as h:*.pm must be changed
- # to h:./*.pm to expand correctly
- if (m|^([A-Za-z]:)[^/\\]|s) {
- substr($_,0,2) = $1 . "./";
- }
- if (m|^(.*)([\\/])([^\\/]*)\z|s) {
- my $tail;
- ($head, $sepchr, $tail) = ($1,$2,$3);
- #print "div: |$head|$sepchr|$tail|\n";
- push (@retval, $_), next OUTER if $tail eq '';
- if ($head =~ /[*?]/) {
- @globdirs = doglob('d', $head);
- push(@retval, doglob($cond, map {"$_$sepchr$tail"} @globdirs)),
- next OUTER if @globdirs;
- }
- $head .= $sepchr if $head eq '' or $head =~ /^[A-Za-z]:\z/s;
- $_ = $tail;
- }
- #
- # If file component has no wildcards, we can avoid opendir
- unless (/[*?]/) {
- $head = '' if $head eq '.';
- $head .= $sepchr unless $head eq '' or substr($head,-1) eq $sepchr;
- $head .= $_;
- if ($cond eq 'd') { push(@retval,$head) if -d $head }
- else { push(@retval,$head) if -e $head }
- next OUTER;
- }
- opendir(D, $head) or next OUTER;
- my @leaves = readdir D;
- closedir D;
- $head = '' if $head eq '.';
- $head .= $sepchr unless $head eq '' or substr($head,-1) eq $sepchr;
-
- # escape regex metachars but not glob chars
- s:([].+^\-\${}[|]):\\$1:g;
- # and convert DOS-style wildcards to regex
- s/\*/.*/g;
- s/\?/.?/g;
-
- #print "regex: '$_', head: '$head'\n";
- my $matchsub = eval 'sub { $_[0] =~ m|^' . $_ . '\\z|ios }';
- warn($@), next OUTER if $@;
- INNER:
- for my $e (@leaves) {
- next INNER if $e eq '.' or $e eq '..';
- next INNER if $cond eq 'd' and ! -d "$head$e";
- push(@matched, "$head$e"), next INNER if &$matchsub($e);
- #
- # [DOS compatibility special case]
- # Failed, add a trailing dot and try again, but only
- # if name does not have a dot in it *and* pattern
- # has a dot *and* name is shorter than 9 chars.
- #
- if (index($e,'.') == -1 and length($e) < 9
- and index($_,'\\.') != -1) {
- push(@matched, "$head$e"), next INNER if &$matchsub("$e.");
- }
- }
- push @retval, @matched if @matched;
- }
- return @retval;
-}
-
-#
-# this can be used to override CORE::glob in a specific
-# package by saying C<use File::DosGlob 'glob';> in that
-# namespace.
-#
-
-# context (keyed by second cxix arg provided by core)
-my %iter;
-my %entries;
-
-sub glob {
- my $pat = shift;
- my $cxix = shift;
- my @pat;
-
- # glob without args defaults to $_
- $pat = $_ unless defined $pat;
-
- # extract patterns
- if ($pat =~ /\s/) {
- require Text::ParseWords;
- @pat = Text::ParseWords::parse_line('\s+',0,$pat);
- }
- else {
- push @pat, $pat;
- }
-
- # assume global context if not provided one
- $cxix = '_G_' unless defined $cxix;
- $iter{$cxix} = 0 unless exists $iter{$cxix};
-
- # if we're just beginning, do it all first
- if ($iter{$cxix} == 0) {
- $entries{$cxix} = [doglob(1,@pat)];
- }
-
- # chuck it all out, quick or slow
- if (wantarray) {
- delete $iter{$cxix};
- return @{delete $entries{$cxix}};
- }
- else {
- if ($iter{$cxix} = scalar @{$entries{$cxix}}) {
- return shift @{$entries{$cxix}};
- }
- else {
- # return undef for EOL
- delete $iter{$cxix};
- delete $entries{$cxix};
- return undef;
- }
- }
-}
-
-sub import {
- my $pkg = shift;
- return unless @_;
- my $sym = shift;
- my $callpkg = ($sym =~ s/^GLOBAL_//s ? 'CORE::GLOBAL' : caller(0));
- *{$callpkg.'::'.$sym} = \&{$pkg.'::'.$sym} if $sym eq 'glob';
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-File::DosGlob - DOS like globbing and then some
-
-=head1 SYNOPSIS
-
- require 5.004;
-
- # override CORE::glob in current package
- use File::DosGlob 'glob';
-
- # override CORE::glob in ALL packages (use with extreme caution!)
- use File::DosGlob 'GLOBAL_glob';
-
- @perlfiles = glob "..\\pe?l/*.p?";
- print <..\\pe?l/*.p?>;
-
- # from the command line (overrides only in main::)
- > perl -MFile::DosGlob=glob -e "print <../pe*/*p?>"
-
-=head1 DESCRIPTION
-
-A module that implements DOS-like globbing with a few enhancements.
-It is largely compatible with perlglob.exe (the M$ setargv.obj
-version) in all but one respect--it understands wildcards in
-directory components.
-
-For example, C<<..\\l*b\\file/*glob.p?>> will work as expected (in
-that it will find something like '..\lib\File/DosGlob.pm' alright).
-Note that all path components are case-insensitive, and that
-backslashes and forward slashes are both accepted, and preserved.
-You may have to double the backslashes if you are putting them in
-literally, due to double-quotish parsing of the pattern by perl.
-
-Spaces in the argument delimit distinct patterns, so
-C<glob('*.exe *.dll')> globs all filenames that end in C<.exe>
-or C<.dll>. If you want to put in literal spaces in the glob
-pattern, you can escape them with either double quotes, or backslashes.
-e.g. C<glob('c:/"Program Files"/*/*.dll')>, or
-C<glob('c:/Program\ Files/*/*.dll')>. The argument is tokenized using
-C<Text::ParseWords::parse_line()>, so see L<Text::ParseWords> for details
-of the quoting rules used.
-
-Extending it to csh patterns is left as an exercise to the reader.
-
-=head1 EXPORTS (by request only)
-
-glob()
-
-=head1 BUGS
-
-Should probably be built into the core, and needs to stop
-pandering to DOS habits. Needs a dose of optimizium too.
-
-=head1 AUTHOR
-
-Gurusamy Sarathy <gsar@activestate.com>
-
-=head1 HISTORY
-
-=over 4
-
-=item *
-
-Support for globally overriding glob() (GSAR 3-JUN-98)
-
-=item *
-
-Scalar context, independent iterator context fixes (GSAR 15-SEP-97)
-
-=item *
-
-A few dir-vs-file optimizations result in glob importation being
-10 times faster than using perlglob.exe, and using perlglob.bat is
-only twice as slow as perlglob.exe (GSAR 28-MAY-97)
-
-=item *
-
-Several cleanups prompted by lack of compatible perlglob.exe
-under Borland (GSAR 27-MAY-97)
-
-=item *
-
-Initial version (GSAR 20-FEB-97)
-
-=back
-
-=head1 SEE ALSO
-
-perl
-
-perlglob.bat
-
-Text::ParseWords
-
-=cut
-
diff --git a/contrib/perl5/lib/File/Find.pm b/contrib/perl5/lib/File/Find.pm
deleted file mode 100644
index 3a621c0..0000000
--- a/contrib/perl5/lib/File/Find.pm
+++ /dev/null
@@ -1,773 +0,0 @@
-package File::Find;
-use 5.005_64;
-require Exporter;
-require Cwd;
-
-=head1 NAME
-
-find - traverse a file tree
-
-finddepth - traverse a directory structure depth-first
-
-=head1 SYNOPSIS
-
- use File::Find;
- find(\&wanted, '/foo', '/bar');
- sub wanted { ... }
-
- use File::Find;
- finddepth(\&wanted, '/foo', '/bar');
- sub wanted { ... }
-
- use File::Find;
- find({ wanted => \&process, follow => 1 }, '.');
-
-=head1 DESCRIPTION
-
-The first argument to find() is either a hash reference describing the
-operations to be performed for each file, or a code reference.
-
-Here are the possible keys for the hash:
-
-=over 3
-
-=item C<wanted>
-
-The value should be a code reference. This code reference is called
-I<the wanted() function> below.
-
-=item C<bydepth>
-
-Reports the name of a directory only AFTER all its entries
-have been reported. Entry point finddepth() is a shortcut for
-specifying C<{ bydepth => 1 }> in the first argument of find().
-
-=item C<preprocess>
-
-The value should be a code reference. This code reference is used to
-preprocess a directory; it is called after readdir() but before the loop that
-calls the wanted() function. It is called with a list of strings and is
-expected to return a list of strings. The code can be used to sort the
-strings alphabetically, numerically, or to filter out directory entries based
-on their name alone.
-
-=item C<postprocess>
-
-The value should be a code reference. It is invoked just before leaving the
-current directory. It is called in void context with no arguments. The name
-of the current directory is in $File::Find::dir. This hook is handy for
-summarizing a directory, such as calculating its disk usage.
-
-=item C<follow>
-
-Causes symbolic links to be followed. Since directory trees with symbolic
-links (followed) may contain files more than once and may even have
-cycles, a hash has to be built up with an entry for each file.
-This might be expensive both in space and time for a large
-directory tree. See I<follow_fast> and I<follow_skip> below.
-If either I<follow> or I<follow_fast> is in effect:
-
-=over 6
-
-=item *
-
-It is guaranteed that an I<lstat> has been called before the user's
-I<wanted()> function is called. This enables fast file checks involving S< _>.
-
-=item *
-
-There is a variable C<$File::Find::fullname> which holds the absolute
-pathname of the file with all symbolic links resolved
-
-=back
-
-=item C<follow_fast>
-
-This is similar to I<follow> except that it may report some files more
-than once. It does detect cycles, however. Since only symbolic links
-have to be hashed, this is much cheaper both in space and time. If
-processing a file more than once (by the user's I<wanted()> function)
-is worse than just taking time, the option I<follow> should be used.
-
-=item C<follow_skip>
-
-C<follow_skip==1>, which is the default, causes all files which are
-neither directories nor symbolic links to be ignored if they are about
-to be processed a second time. If a directory or a symbolic link
-are about to be processed a second time, File::Find dies.
-C<follow_skip==0> causes File::Find to die if any file is about to be
-processed a second time.
-C<follow_skip==2> causes File::Find to ignore any duplicate files and
-dirctories but to proceed normally otherwise.
-
-
-=item C<no_chdir>
-
-Does not C<chdir()> to each directory as it recurses. The wanted()
-function will need to be aware of this, of course. In this case,
-C<$_> will be the same as C<$File::Find::name>.
-
-=item C<untaint>
-
-If find is used in taint-mode (-T command line switch or if EUID != UID
-or if EGID != GID) then internally directory names have to be untainted
-before they can be cd'ed to. Therefore they are checked against a regular
-expression I<untaint_pattern>. Note that all names passed to the
-user's I<wanted()> function are still tainted.
-
-=item C<untaint_pattern>
-
-See above. This should be set using the C<qr> quoting operator.
-The default is set to C<qr|^([-+@\w./]+)$|>.
-Note that the parantheses are vital.
-
-=item C<untaint_skip>
-
-If set, directories (subtrees) which fail the I<untaint_pattern>
-are skipped. The default is to 'die' in such a case.
-
-=back
-
-The wanted() function does whatever verifications you want.
-C<$File::Find::dir> contains the current directory name, and C<$_> the
-current filename within that directory. C<$File::Find::name> contains
-the complete pathname to the file. You are chdir()'d to
-C<$File::Find::dir> when the function is called, unless C<no_chdir>
-was specified. When <follow> or <follow_fast> are in effect, there is
-also a C<$File::Find::fullname>. The function may set
-C<$File::Find::prune> to prune the tree unless C<bydepth> was
-specified. Unless C<follow> or C<follow_fast> is specified, for
-compatibility reasons (find.pl, find2perl) there are in addition the
-following globals available: C<$File::Find::topdir>,
-C<$File::Find::topdev>, C<$File::Find::topino>,
-C<$File::Find::topmode> and C<$File::Find::topnlink>.
-
-This library is useful for the C<find2perl> tool, which when fed,
-
- find2perl / -name .nfs\* -mtime +7 \
- -exec rm -f {} \; -o -fstype nfs -prune
-
-produces something like:
-
- sub wanted {
- /^\.nfs.*\z/s &&
- (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_)) &&
- int(-M _) > 7 &&
- unlink($_)
- ||
- ($nlink || (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_))) &&
- $dev < 0 &&
- ($File::Find::prune = 1);
- }
-
-Set the variable C<$File::Find::dont_use_nlink> if you're using AFS,
-since AFS cheats.
-
-
-Here's another interesting wanted function. It will find all symlinks
-that don't resolve:
-
- sub wanted {
- -l && !-e && print "bogus link: $File::Find::name\n";
- }
-
-See also the script C<pfind> on CPAN for a nice application of this
-module.
-
-=head1 CAVEAT
-
-Be aware that the option to follow symbolic links can be dangerous.
-Depending on the structure of the directory tree (including symbolic
-links to directories) you might traverse a given (physical) directory
-more than once (only if C<follow_fast> is in effect).
-Furthermore, deleting or changing files in a symbolically linked directory
-might cause very unpleasant surprises, since you delete or change files
-in an unknown directory.
-
-
-=cut
-
-@ISA = qw(Exporter);
-@EXPORT = qw(find finddepth);
-
-
-use strict;
-my $Is_VMS;
-
-require File::Basename;
-
-my %SLnkSeen;
-my ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow,
- $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat,
- $pre_process, $post_process);
-
-sub contract_name {
- my ($cdir,$fn) = @_;
-
- return substr($cdir,0,rindex($cdir,'/')) if $fn eq '.';
-
- $cdir = substr($cdir,0,rindex($cdir,'/')+1);
-
- $fn =~ s|^\./||;
-
- my $abs_name= $cdir . $fn;
-
- if (substr($fn,0,3) eq '../') {
- do 1 while ($abs_name=~ s|/(?>[^/]+)/\.\./|/|);
- }
-
- return $abs_name;
-}
-
-
-sub PathCombine($$) {
- my ($Base,$Name) = @_;
- my $AbsName;
-
- if (substr($Name,0,1) eq '/') {
- $AbsName= $Name;
- }
- else {
- $AbsName= contract_name($Base,$Name);
- }
-
- # (simple) check for recursion
- my $newlen= length($AbsName);
- if ($newlen <= length($Base)) {
- if (($newlen == length($Base) || substr($Base,$newlen,1) eq '/')
- && $AbsName eq substr($Base,0,$newlen))
- {
- return undef;
- }
- }
- return $AbsName;
-}
-
-sub Follow_SymLink($) {
- my ($AbsName) = @_;
-
- my ($NewName,$DEV, $INO);
- ($DEV, $INO)= lstat $AbsName;
-
- while (-l _) {
- if ($SLnkSeen{$DEV, $INO}++) {
- if ($follow_skip < 2) {
- die "$AbsName is encountered a second time";
- }
- else {
- return undef;
- }
- }
- $NewName= PathCombine($AbsName, readlink($AbsName));
- unless(defined $NewName) {
- if ($follow_skip < 2) {
- die "$AbsName is a recursive symbolic link";
- }
- else {
- return undef;
- }
- }
- else {
- $AbsName= $NewName;
- }
- ($DEV, $INO) = lstat($AbsName);
- return undef unless defined $DEV; # dangling symbolic link
- }
-
- if ($full_check && $SLnkSeen{$DEV, $INO}++) {
- if ($follow_skip < 1) {
- die "$AbsName encountered a second time";
- }
- else {
- return undef;
- }
- }
-
- return $AbsName;
-}
-
-our($dir, $name, $fullname, $prune);
-sub _find_dir_symlnk($$$);
-sub _find_dir($$$);
-
-sub _find_opt {
- my $wanted = shift;
- die "invalid top directory" unless defined $_[0];
-
- my $cwd = $wanted->{bydepth} ? Cwd::fastcwd() : Cwd::cwd();
- my $cwd_untainted = $cwd;
- $wanted_callback = $wanted->{wanted};
- $bydepth = $wanted->{bydepth};
- $pre_process = $wanted->{preprocess};
- $post_process = $wanted->{postprocess};
- $no_chdir = $wanted->{no_chdir};
- $full_check = $wanted->{follow};
- $follow = $full_check || $wanted->{follow_fast};
- $follow_skip = $wanted->{follow_skip};
- $untaint = $wanted->{untaint};
- $untaint_pat = $wanted->{untaint_pattern};
- $untaint_skip = $wanted->{untaint_skip};
-
- # for compatability reasons (find.pl, find2perl)
- our ($topdir, $topdev, $topino, $topmode, $topnlink);
-
- # a symbolic link to a directory doesn't increase the link count
- $avoid_nlink = $follow || $File::Find::dont_use_nlink;
-
- if ( $untaint ) {
- $cwd_untainted= $1 if $cwd_untainted =~ m|$untaint_pat|;
- die "insecure cwd in find(depth)" unless defined($cwd_untainted);
- }
-
- my ($abs_dir, $Is_Dir);
-
- Proc_Top_Item:
- foreach my $TOP (@_) {
- my $top_item = $TOP;
- $top_item =~ s|/\z|| unless $top_item eq '/';
- $Is_Dir= 0;
-
- ($topdev,$topino,$topmode,$topnlink) = stat $top_item;
-
- if ($follow) {
- if (substr($top_item,0,1) eq '/') {
- $abs_dir = $top_item;
- }
- elsif ($top_item eq '.') {
- $abs_dir = $cwd;
- }
- else { # care about any ../
- $abs_dir = contract_name("$cwd/",$top_item);
- }
- $abs_dir= Follow_SymLink($abs_dir);
- unless (defined $abs_dir) {
- warn "$top_item is a dangling symbolic link\n";
- next Proc_Top_Item;
- }
- if (-d _) {
- _find_dir_symlnk($wanted, $abs_dir, $top_item);
- $Is_Dir= 1;
- }
- }
- else { # no follow
- $topdir = $top_item;
- unless (defined $topnlink) {
- warn "Can't stat $top_item: $!\n";
- next Proc_Top_Item;
- }
- if (-d _) {
- $top_item =~ s/\.dir\z// if $Is_VMS;
- _find_dir($wanted, $top_item, $topnlink);
- $Is_Dir= 1;
- }
- else {
- $abs_dir= $top_item;
- }
- }
-
- unless ($Is_Dir) {
- unless (($_,$dir) = File::Basename::fileparse($abs_dir)) {
- ($dir,$_) = ('./', $top_item);
- }
-
- $abs_dir = $dir;
- if ($untaint) {
- my $abs_dir_save = $abs_dir;
- $abs_dir = $1 if $abs_dir =~ m|$untaint_pat|;
- unless (defined $abs_dir) {
- if ($untaint_skip == 0) {
- die "directory $abs_dir_save is still tainted";
- }
- else {
- next Proc_Top_Item;
- }
- }
- }
-
- unless ($no_chdir or chdir $abs_dir) {
- warn "Couldn't chdir $abs_dir: $!\n";
- next Proc_Top_Item;
- }
-
- $name = $abs_dir . $_;
-
- { &$wanted_callback }; # protect against wild "next"
-
- }
-
- $no_chdir or chdir $cwd_untainted;
- }
-}
-
-# API:
-# $wanted
-# $p_dir : "parent directory"
-# $nlink : what came back from the stat
-# preconditions:
-# chdir (if not no_chdir) to dir
-
-sub _find_dir($$$) {
- my ($wanted, $p_dir, $nlink) = @_;
- my ($CdLvl,$Level) = (0,0);
- my @Stack;
- my @filenames;
- my ($subcount,$sub_nlink);
- my $SE= [];
- my $dir_name= $p_dir;
- my $dir_pref= ( $p_dir eq '/' ? '/' : "$p_dir/" );
- my $dir_rel= '.'; # directory name relative to current directory
-
- local ($dir, $name, $prune, *DIR);
-
- unless ($no_chdir or $p_dir eq '.') {
- my $udir = $p_dir;
- if ($untaint) {
- $udir = $1 if $p_dir =~ m|$untaint_pat|;
- unless (defined $udir) {
- if ($untaint_skip == 0) {
- die "directory $p_dir is still tainted";
- }
- else {
- return;
- }
- }
- }
- unless (chdir $udir) {
- warn "Can't cd to $udir: $!\n";
- return;
- }
- }
-
- push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth;
-
- while (defined $SE) {
- unless ($bydepth) {
- $dir= $p_dir;
- $name= $dir_name;
- $_= ($no_chdir ? $dir_name : $dir_rel );
- # prune may happen here
- $prune= 0;
- { &$wanted_callback }; # protect against wild "next"
- next if $prune;
- }
-
- # change to that directory
- unless ($no_chdir or $dir_rel eq '.') {
- my $udir= $dir_rel;
- if ($untaint) {
- $udir = $1 if $dir_rel =~ m|$untaint_pat|;
- unless (defined $udir) {
- if ($untaint_skip == 0) {
- die "directory ("
- . ($p_dir ne '/' ? $p_dir : '')
- . "/) $dir_rel is still tainted";
- }
- }
- }
- unless (chdir $udir) {
- warn "Can't cd to ("
- . ($p_dir ne '/' ? $p_dir : '')
- . "/) $udir : $!\n";
- next;
- }
- $CdLvl++;
- }
-
- $dir= $dir_name;
-
- # Get the list of files in the current directory.
- unless (opendir DIR, ($no_chdir ? $dir_name : '.')) {
- warn "Can't opendir($dir_name): $!\n";
- next;
- }
- @filenames = readdir DIR;
- closedir(DIR);
- @filenames = &$pre_process(@filenames) if $pre_process;
- push @Stack,[$CdLvl,$dir_name,"",-2] if $post_process;
-
- if ($nlink == 2 && !$avoid_nlink) {
- # This dir has no subdirectories.
- for my $FN (@filenames) {
- next if $FN =~ /^\.{1,2}\z/;
-
- $name = $dir_pref . $FN;
- $_ = ($no_chdir ? $name : $FN);
- { &$wanted_callback }; # protect against wild "next"
- }
-
- }
- else {
- # This dir has subdirectories.
- $subcount = $nlink - 2;
-
- for my $FN (@filenames) {
- next if $FN =~ /^\.{1,2}\z/;
- if ($subcount > 0 || $avoid_nlink) {
- # Seen all the subdirs?
- # check for directoriness.
- # stat is faster for a file in the current directory
- $sub_nlink = (lstat ($no_chdir ? $dir_pref . $FN : $FN))[3];
-
- if (-d _) {
- --$subcount;
- $FN =~ s/\.dir\z// if $Is_VMS;
- push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink];
- }
- else {
- $name = $dir_pref . $FN;
- $_= ($no_chdir ? $name : $FN);
- { &$wanted_callback }; # protect against wild "next"
- }
- }
- else {
- $name = $dir_pref . $FN;
- $_= ($no_chdir ? $name : $FN);
- { &$wanted_callback }; # protect against wild "next"
- }
- }
- }
- }
- continue {
- while ( defined ($SE = pop @Stack) ) {
- ($Level, $p_dir, $dir_rel, $nlink) = @$SE;
- if ($CdLvl > $Level && !$no_chdir) {
- my $tmp = join('/',('..') x ($CdLvl-$Level));
- die "Can't cd to $dir_name" . $tmp
- unless chdir ($tmp);
- $CdLvl = $Level;
- }
- $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel");
- $dir_pref = "$dir_name/";
- if ( $nlink == -2 ) {
- $name = $dir = $p_dir;
- $_ = ".";
- &$post_process; # End-of-directory processing
- } elsif ( $nlink < 0 ) { # must be finddepth, report dirname now
- $name = $dir_name;
- if ( substr($name,-2) eq '/.' ) {
- $name =~ s|/\.$||;
- }
- $dir = $p_dir;
- $_ = ($no_chdir ? $dir_name : $dir_rel );
- if ( substr($_,-2) eq '/.' ) {
- s|/\.$||;
- }
- { &$wanted_callback }; # protect against wild "next"
- } else {
- push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth;
- last;
- }
- }
- }
-}
-
-
-# API:
-# $wanted
-# $dir_loc : absolute location of a dir
-# $p_dir : "parent directory"
-# preconditions:
-# chdir (if not no_chdir) to dir
-
-sub _find_dir_symlnk($$$) {
- my ($wanted, $dir_loc, $p_dir) = @_;
- my @Stack;
- my @filenames;
- my $new_loc;
- my $pdir_loc = $dir_loc;
- my $SE = [];
- my $dir_name = $p_dir;
- my $dir_pref = ( $p_dir eq '/' ? '/' : "$p_dir/" );
- my $loc_pref = ( $dir_loc eq '/' ? '/' : "$dir_loc/" );
- my $dir_rel = '.'; # directory name relative to current directory
- my $byd_flag; # flag for pending stack entry if $bydepth
-
- local ($dir, $name, $fullname, $prune, *DIR);
-
- unless ($no_chdir or $p_dir eq '.') {
- my $udir = $dir_loc;
- if ($untaint) {
- $udir = $1 if $dir_loc =~ m|$untaint_pat|;
- unless (defined $udir) {
- if ($untaint_skip == 0) {
- die "directory $dir_loc is still tainted";
- }
- else {
- return;
- }
- }
- }
- unless (chdir $udir) {
- warn "Can't cd to $udir: $!\n";
- return;
- }
- }
-
- push @Stack,[$dir_loc,$pdir_loc,$p_dir,$dir_rel,-1] if $bydepth;
-
- while (defined $SE) {
-
- unless ($bydepth) {
- # change to parent directory
- unless ($no_chdir) {
- my $udir = $pdir_loc;
- if ($untaint) {
- $udir = $1 if $pdir_loc =~ m|$untaint_pat|;
- }
- unless (chdir $udir) {
- warn "Can't cd to $udir: $!\n";
- next;
- }
- }
- $dir= $p_dir;
- $name= $dir_name;
- $_= ($no_chdir ? $dir_name : $dir_rel );
- $fullname= $dir_loc;
- # prune may happen here
- $prune= 0;
- lstat($_); # make sure file tests with '_' work
- { &$wanted_callback }; # protect against wild "next"
- next if $prune;
- }
-
- # change to that directory
- unless ($no_chdir or $dir_rel eq '.') {
- my $udir = $dir_loc;
- if ($untaint) {
- $udir = $1 if $dir_loc =~ m|$untaint_pat|;
- unless (defined $udir ) {
- if ($untaint_skip == 0) {
- die "directory $dir_loc is still tainted";
- }
- else {
- next;
- }
- }
- }
- unless (chdir $udir) {
- warn "Can't cd to $udir: $!\n";
- next;
- }
- }
-
- $dir = $dir_name;
-
- # Get the list of files in the current directory.
- unless (opendir DIR, ($no_chdir ? $dir_loc : '.')) {
- warn "Can't opendir($dir_loc): $!\n";
- next;
- }
- @filenames = readdir DIR;
- closedir(DIR);
-
- for my $FN (@filenames) {
- next if $FN =~ /^\.{1,2}\z/;
-
- # follow symbolic links / do an lstat
- $new_loc = Follow_SymLink($loc_pref.$FN);
-
- # ignore if invalid symlink
- next unless defined $new_loc;
-
- if (-d _) {
- push @Stack,[$new_loc,$dir_loc,$dir_name,$FN,1];
- }
- else {
- $fullname = $new_loc;
- $name = $dir_pref . $FN;
- $_ = ($no_chdir ? $name : $FN);
- { &$wanted_callback }; # protect against wild "next"
- }
- }
-
- }
- continue {
- while (defined($SE = pop @Stack)) {
- ($dir_loc, $pdir_loc, $p_dir, $dir_rel, $byd_flag) = @$SE;
- $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel");
- $dir_pref = "$dir_name/";
- $loc_pref = "$dir_loc/";
- if ( $byd_flag < 0 ) { # must be finddepth, report dirname now
- unless ($no_chdir or $dir_rel eq '.') {
- my $udir = $pdir_loc;
- if ($untaint) {
- $udir = $1 if $dir_loc =~ m|$untaint_pat|;
- }
- unless (chdir $udir) {
- warn "Can't cd to $udir: $!\n";
- next;
- }
- }
- $fullname = $dir_loc;
- $name = $dir_name;
- if ( substr($name,-2) eq '/.' ) {
- $name =~ s|/\.$||;
- }
- $dir = $p_dir;
- $_ = ($no_chdir ? $dir_name : $dir_rel);
- if ( substr($_,-2) eq '/.' ) {
- s|/\.$||;
- }
-
- lstat($_); # make sure file tests with '_' work
- { &$wanted_callback }; # protect against wild "next"
- } else {
- push @Stack,[$dir_loc, $pdir_loc, $p_dir, $dir_rel,-1] if $bydepth;
- last;
- }
- }
- }
-}
-
-
-sub wrap_wanted {
- my $wanted = shift;
- if ( ref($wanted) eq 'HASH' ) {
- if ( $wanted->{follow} || $wanted->{follow_fast}) {
- $wanted->{follow_skip} = 1 unless defined $wanted->{follow_skip};
- }
- if ( $wanted->{untaint} ) {
- $wanted->{untaint_pattern} = qr|^([-+@\w./]+)$|
- unless defined $wanted->{untaint_pattern};
- $wanted->{untaint_skip} = 0 unless defined $wanted->{untaint_skip};
- }
- return $wanted;
- }
- else {
- return { wanted => $wanted };
- }
-}
-
-sub find {
- my $wanted = shift;
- _find_opt(wrap_wanted($wanted), @_);
- %SLnkSeen= (); # free memory
-}
-
-sub finddepth {
- my $wanted = wrap_wanted(shift);
- $wanted->{bydepth} = 1;
- _find_opt($wanted, @_);
- %SLnkSeen= (); # free memory
-}
-
-# These are hard-coded for now, but may move to hint files.
-if ($^O eq 'VMS') {
- $Is_VMS = 1;
- $File::Find::dont_use_nlink = 1;
-}
-
-$File::Find::dont_use_nlink = 1
- if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos' || $^O eq 'MSWin32' ||
- $^O eq 'cygwin' || $^O eq 'epoc';
-
-# Set dont_use_nlink in your hint file if your system's stat doesn't
-# report the number of links in a directory as an indication
-# of the number of files.
-# See, e.g. hints/machten.sh for MachTen 2.2.
-unless ($File::Find::dont_use_nlink) {
- require Config;
- $File::Find::dont_use_nlink = 1 if ($Config::Config{'dont_use_nlink'});
-}
-
-1;
diff --git a/contrib/perl5/lib/File/Path.pm b/contrib/perl5/lib/File/Path.pm
deleted file mode 100644
index 0eb6128..0000000
--- a/contrib/perl5/lib/File/Path.pm
+++ /dev/null
@@ -1,251 +0,0 @@
-package File::Path;
-
-=head1 NAME
-
-File::Path - create or remove directory trees
-
-=head1 SYNOPSIS
-
- use File::Path;
-
- mkpath(['/foo/bar/baz', 'blurfl/quux'], 1, 0711);
- rmtree(['foo/bar/baz', 'blurfl/quux'], 1, 1);
-
-=head1 DESCRIPTION
-
-The C<mkpath> function provides a convenient way to create directories, even
-if your C<mkdir> kernel call won't create more than one level of directory at
-a time. C<mkpath> takes three arguments:
-
-=over 4
-
-=item *
-
-the name of the path to create, or a reference
-to a list of paths to create,
-
-=item *
-
-a boolean value, which if TRUE will cause C<mkpath>
-to print the name of each directory as it is created
-(defaults to FALSE), and
-
-=item *
-
-the numeric mode to use when creating the directories
-(defaults to 0777)
-
-=back
-
-It returns a list of all directories (including intermediates, determined
-using the Unix '/' separator) created.
-
-Similarly, the C<rmtree> function provides a convenient way to delete a
-subtree from the directory structure, much like the Unix command C<rm -r>.
-C<rmtree> takes three arguments:
-
-=over 4
-
-=item *
-
-the root of the subtree to delete, or a reference to
-a list of roots. All of the files and directories
-below each root, as well as the roots themselves,
-will be deleted.
-
-=item *
-
-a boolean value, which if TRUE will cause C<rmtree> to
-print a message each time it examines a file, giving the
-name of the file, and indicating whether it's using C<rmdir>
-or C<unlink> to remove it, or that it's skipping it.
-(defaults to FALSE)
-
-=item *
-
-a boolean value, which if TRUE will cause C<rmtree> to
-skip any files to which you do not have delete access
-(if running under VMS) or write access (if running
-under another OS). This will change in the future when
-a criterion for 'delete permission' under OSs other
-than VMS is settled. (defaults to FALSE)
-
-=back
-
-It returns the number of files successfully deleted. Symlinks are
-simply deleted and not followed.
-
-B<NOTE:> If the third parameter is not TRUE, C<rmtree> is B<unsecure>
-in the face of failure or interruption. Files and directories which
-were not deleted may be left with permissions reset to allow world
-read and write access. Note also that the occurrence of errors in
-rmtree can be determined I<only> by trapping diagnostic messages
-using C<$SIG{__WARN__}>; it is not apparent from the return value.
-Therefore, you must be extremely careful about using C<rmtree($foo,$bar,0>
-in situations where security is an issue.
-
-=head1 AUTHORS
-
-Tim Bunce <F<Tim.Bunce@ig.co.uk>> and
-Charles Bailey <F<bailey@newman.upenn.edu>>
-
-=cut
-
-use 5.005_64;
-use Carp;
-use File::Basename ();
-use Exporter ();
-use strict;
-
-our $VERSION = "1.0404";
-our @ISA = qw( Exporter );
-our @EXPORT = qw( mkpath rmtree );
-
-my $Is_VMS = $^O eq 'VMS';
-my $Is_MacOS = $^O eq 'MacOS';
-
-# These OSes complain if you want to remove a file that you have no
-# write permission to:
-my $force_writeable = ($^O eq 'os2' || $^O eq 'dos' || $^O eq 'MSWin32' ||
- $^O eq 'amigaos' || $^O eq 'MacOS' || $^O eq 'epoc');
-
-sub mkpath {
- my($paths, $verbose, $mode) = @_;
- # $paths -- either a path string or ref to list of paths
- # $verbose -- optional print "mkdir $path" for each directory created
- # $mode -- optional permissions, defaults to 0777
- local($")=$Is_MacOS ? ":" : "/";
- $mode = 0777 unless defined($mode);
- $paths = [$paths] unless ref $paths;
- my(@created,$path);
- foreach $path (@$paths) {
- $path .= '/' if $^O eq 'os2' and $path =~ /^\w:\z/s; # feature of CRT
- # Logic wants Unix paths, so go with the flow.
- if ($Is_VMS) {
- next if $path eq '/';
- $path = VMS::Filespec::unixify($path);
- if ($path =~ m:^(/[^/]+)/?\z:) {
- $path = $1.'/000000';
- }
- }
- next if -d $path;
- my $parent = File::Basename::dirname($path);
- unless (-d $parent or $path eq $parent) {
- push(@created,mkpath($parent, $verbose, $mode));
- }
- print "mkdir $path\n" if $verbose;
- unless (mkdir($path,$mode)) {
- my $e = $!;
- # allow for another process to have created it meanwhile
- croak "mkdir $path: $e" unless -d $path;
- }
- push(@created, $path);
- }
- @created;
-}
-
-sub rmtree {
- my($roots, $verbose, $safe) = @_;
- my(@files);
- my($count) = 0;
- $verbose ||= 0;
- $safe ||= 0;
-
- if ( defined($roots) && length($roots) ) {
- $roots = [$roots] unless ref $roots;
- }
- else {
- carp "No root path(s) specified\n";
- return 0;
- }
-
- my($root);
- foreach $root (@{$roots}) {
- if ($Is_MacOS) {
- $root = ":$root" if $root !~ /:/;
- $root =~ s#([^:])\z#$1:#;
- } else {
- $root =~ s#/\z##;
- }
- (undef, undef, my $rp) = lstat $root or next;
- $rp &= 07777; # don't forget setuid, setgid, sticky bits
- if ( -d _ ) {
- # notabene: 0777 is for making readable in the first place,
- # it's also intended to change it to writable in case we have
- # to recurse in which case we are better than rm -rf for
- # subtrees with strange permissions
- chmod(0777, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
- or carp "Can't make directory $root read+writeable: $!"
- unless $safe;
-
- if (opendir my $d, $root) {
- @files = readdir $d;
- closedir $d;
- }
- else {
- carp "Can't read $root: $!";
- @files = ();
- }
-
- # Deleting large numbers of files from VMS Files-11 filesystems
- # is faster if done in reverse ASCIIbetical order
- @files = reverse @files if $Is_VMS;
- ($root = VMS::Filespec::unixify($root)) =~ s#\.dir\z## if $Is_VMS;
- if ($Is_MacOS) {
- @files = map("$root$_", @files);
- } else {
- @files = map("$root/$_", grep $_!~/^\.{1,2}\z/s,@files);
- }
- $count += rmtree(\@files,$verbose,$safe);
- if ($safe &&
- ($Is_VMS ? !&VMS::Filespec::candelete($root) : !-w $root)) {
- print "skipped $root\n" if $verbose;
- next;
- }
- chmod 0777, $root
- or carp "Can't make directory $root writeable: $!"
- if $force_writeable;
- print "rmdir $root\n" if $verbose;
- if (rmdir $root) {
- ++$count;
- }
- else {
- carp "Can't remove directory $root: $!";
- chmod($rp, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
- or carp("and can't restore permissions to "
- . sprintf("0%o",$rp) . "\n");
- }
- }
- else {
- if ($safe &&
- ($Is_VMS ? !&VMS::Filespec::candelete($root)
- : !(-l $root || -w $root)))
- {
- print "skipped $root\n" if $verbose;
- next;
- }
- chmod 0666, $root
- or carp "Can't make file $root writeable: $!"
- if $force_writeable;
- print "unlink $root\n" if $verbose;
- # delete all versions under VMS
- for (;;) {
- unless (unlink $root) {
- carp "Can't unlink file $root: $!";
- if ($force_writeable) {
- chmod $rp, $root
- or carp("and can't restore permissions to "
- . sprintf("0%o",$rp) . "\n");
- }
- last;
- }
- ++$count;
- last unless $Is_VMS && lstat $root;
- }
- }
- }
-
- $count;
-}
-
-1;
diff --git a/contrib/perl5/lib/File/Spec.pm b/contrib/perl5/lib/File/Spec.pm
deleted file mode 100644
index 3f79d74..0000000
--- a/contrib/perl5/lib/File/Spec.pm
+++ /dev/null
@@ -1,93 +0,0 @@
-package File::Spec;
-
-use strict;
-use vars qw(@ISA $VERSION);
-
-$VERSION = 0.82 ;
-
-my %module = (MacOS => 'Mac',
- MSWin32 => 'Win32',
- os2 => 'OS2',
- VMS => 'VMS',
- epoc => 'Epoc');
-
-my $module = $module{$^O} || 'Unix';
-require "File/Spec/$module.pm";
-@ISA = ("File::Spec::$module");
-
-1;
-__END__
-
-=head1 NAME
-
-File::Spec - portably perform operations on file names
-
-=head1 SYNOPSIS
-
- use File::Spec;
-
- $x=File::Spec->catfile('a', 'b', 'c');
-
-which returns 'a/b/c' under Unix. Or:
-
- use File::Spec::Functions;
-
- $x = catfile('a', 'b', 'c');
-
-=head1 DESCRIPTION
-
-This module is designed to support operations commonly performed on file
-specifications (usually called "file names", but not to be confused with the
-contents of a file, or Perl's file handles), such as concatenating several
-directory and file names into a single path, or determining whether a path
-is rooted. It is based on code directly taken from MakeMaker 5.17, code
-written by Andreas KE<ouml>nig, Andy Dougherty, Charles Bailey, Ilya
-Zakharevich, Paul Schinder, and others.
-
-Since these functions are different for most operating systems, each set of
-OS specific routines is available in a separate module, including:
-
- File::Spec::Unix
- File::Spec::Mac
- File::Spec::OS2
- File::Spec::Win32
- File::Spec::VMS
-
-The module appropriate for the current OS is automatically loaded by
-File::Spec. Since some modules (like VMS) make use of facilities available
-only under that OS, it may not be possible to load all modules under all
-operating systems.
-
-Since File::Spec is object oriented, subroutines should not called directly,
-as in:
-
- File::Spec::catfile('a','b');
-
-but rather as class methods:
-
- File::Spec->catfile('a','b');
-
-For simple uses, L<File::Spec::Functions> provides convenient functional
-forms of these methods.
-
-For a list of available methods, please consult L<File::Spec::Unix>,
-which contains the entire set, and which is inherited by the modules for
-other platforms. For further information, please see L<File::Spec::Mac>,
-L<File::Spec::OS2>, L<File::Spec::Win32>, or L<File::Spec::VMS>.
-
-=head1 SEE ALSO
-
-File::Spec::Unix, File::Spec::Mac, File::Spec::OS2, File::Spec::Win32,
-File::Spec::VMS, File::Spec::Functions, ExtUtils::MakeMaker
-
-=head1 AUTHORS
-
-Kenneth Albanowski <F<kjahds@kjahds.com>>, Andy Dougherty
-<F<doughera@lafcol.lafayette.edu>>, Andreas KE<ouml>nig
-<F<A.Koenig@franz.ww.TU-Berlin.DE>>, Tim Bunce <F<Tim.Bunce@ig.co.uk>>. VMS
-support by Charles Bailey <F<bailey@newman.upenn.edu>>. OS/2 support by
-Ilya Zakharevich <F<ilya@math.ohio-state.edu>>. Mac support by Paul Schinder
-<F<schinder@pobox.com>>. abs2rel() and rel2abs() written by
-Shigio Yamaguchi <F<shigio@tamacom.com>>, modified by Barrie Slaymaker
-<F<barries@slaysys.com>>. splitpath(), splitdir(), catpath() and catdir()
-by Barrie Slaymaker.
diff --git a/contrib/perl5/lib/File/Spec/Epoc.pm b/contrib/perl5/lib/File/Spec/Epoc.pm
deleted file mode 100644
index 65d5e1f..0000000
--- a/contrib/perl5/lib/File/Spec/Epoc.pm
+++ /dev/null
@@ -1,378 +0,0 @@
-package File::Spec::Epoc;
-
-use strict;
-use Cwd;
-use vars qw(@ISA);
-require File::Spec::Unix;
-@ISA = qw(File::Spec::Unix);
-
-=head1 NAME
-
-File::Spec::Epoc - methods for Epoc file specs
-
-=head1 SYNOPSIS
-
- require File::Spec::Epoc; # Done internally by File::Spec if needed
-
-=head1 DESCRIPTION
-
-See File::Spec::Unix for a documentation of the methods provided
-there. This package overrides the implementation of these methods, not
-the semantics.
-
-This package is still work in progress ;-)
-o.flebbe@gmx.de
-
-
-=over
-
-=item devnull
-
-Returns a string representation of the null device.
-
-=cut
-
-sub devnull {
- return "nul:";
-}
-
-=item tmpdir
-
-Returns a string representation of a temporay directory:
-
-=cut
-
-my $tmpdir;
-sub tmpdir {
- return "C:/System/temp";
-}
-
-sub case_tolerant {
- return 1;
-}
-
-sub file_name_is_absolute {
- my ($self,$file) = @_;
- return scalar($file =~ m{^([a-z?]:)?[\\/]}is);
-}
-
-=item path
-
-Takes no argument, returns the environment variable PATH as an array. Since
-there is no search path supported, it returns undef, sorry.
-
-=cut
-sub path {
- return undef;
-}
-
-=item canonpath
-
-No physical check on the filesystem, but a logical cleanup of a
-path. On UNIX eliminated successive slashes and successive "/.".
-
-=cut
-
-sub canonpath {
- my ($self,$path) = @_;
- $path =~ s/^([a-z]:)/\u$1/s;
-
- $path =~ s|/+|/|g unless($^O eq 'cygwin'); # xx////xx -> xx/xx
- $path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx
- $path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
- $path =~ s|^/(\.\./)+|/|s; # /../../xx -> xx
- $path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx
- return $path;
-}
-
-=item splitpath
-
- ($volume,$directories,$file) = File::Spec->splitpath( $path );
- ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
-
-Splits a path in to volume, directory, and filename portions. Assumes that
-the last file is a path unless the path ends in '\\', '\\.', '\\..'
-or $no_file is true. On Win32 this means that $no_file true makes this return
-( $volume, $path, undef ).
-
-Separators accepted are \ and /.
-
-The results can be passed to L</catpath> to get back a path equivalent to
-(usually identical to) the original path.
-
-=cut
-
-sub splitpath {
- my ($self,$path, $nofile) = @_;
- my ($volume,$directory,$file) = ('','','');
- if ( $nofile ) {
- $path =~
- m{^( (?:[a-zA-Z?]:|(?:\\\\|//)[^\\/]+[\\/][^\\/]+)? )
- (.*)
- }xs;
- $volume = $1;
- $directory = $2;
- }
- else {
- $path =~
- m{^ ( (?: [a-zA-Z?]: |
- (?:\\\\|//)[^\\/]+[\\/][^\\/]+
- )?
- )
- ( (?:.*[\\\\/](?:\.\.?\z)?)? )
- (.*)
- }xs;
- $volume = $1;
- $directory = $2;
- $file = $3;
- }
-
- return ($volume,$directory,$file);
-}
-
-
-=item splitdir
-
-The opposite of L</catdir()>.
-
- @dirs = File::Spec->splitdir( $directories );
-
-$directories must be only the directory portion of the path on systems
-that have the concept of a volume or that have path syntax that differentiates
-files from directories.
-
-Unlike just splitting the directories on the separator, leading empty and
-trailing directory entries can be returned, because these are significant
-on some OSs. So,
-
- File::Spec->splitdir( "/a/b/c" );
-
-Yields:
-
- ( '', 'a', 'b', '', 'c', '' )
-
-=cut
-
-sub splitdir {
- my ($self,$directories) = @_ ;
- #
- # split() likes to forget about trailing null fields, so here we
- # check to be sure that there will not be any before handling the
- # simple case.
- #
- if ( $directories !~ m|[\\/]\z| ) {
- return split( m|[\\/]|, $directories );
- }
- else {
- #
- # since there was a trailing separator, add a file name to the end,
- # then do the split, then replace it with ''.
- #
- my( @directories )= split( m|[\\/]|, "${directories}dummy" ) ;
- $directories[ $#directories ]= '' ;
- return @directories ;
- }
-}
-
-
-=item catpath
-
-Takes volume, directory and file portions and returns an entire path. Under
-Unix, $volume is ignored, and this is just like catfile(). On other OSs,
-the $volume become significant.
-
-=cut
-
-sub catpath {
- my ($self,$volume,$directory,$file) = @_;
-
- # If it's UNC, make sure the glue separator is there, reusing
- # whatever separator is first in the $volume
- $volume .= $1
- if ( $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\z@s &&
- $directory =~ m@^[^\\/]@s
- ) ;
-
- $volume .= $directory ;
-
- # If the volume is not just A:, make sure the glue separator is
- # there, reusing whatever separator is first in the $volume if possible.
- if ( $volume !~ m@^[a-zA-Z]:\z@s &&
- $volume =~ m@[^\\/]\z@ &&
- $file =~ m@[^\\/]@
- ) {
- $volume =~ m@([\\/])@ ;
- my $sep = $1 ? $1 : '\\' ;
- $volume .= $sep ;
- }
-
- $volume .= $file ;
-
- return $volume ;
-}
-
-
-=item abs2rel
-
-Takes a destination path and an optional base path returns a relative path
-from the base path to the destination path:
-
- $rel_path = File::Spec->abs2rel( $destination ) ;
- $rel_path = File::Spec->abs2rel( $destination, $base ) ;
-
-If $base is not present or '', then L</cwd()> is used. If $base is relative,
-then it is converted to absolute form using L</rel2abs()>. This means that it
-is taken to be relative to L<cwd()>.
-
-On systems with the concept of a volume, this assumes that both paths
-are on the $destination volume, and ignores the $base volume.
-
-On systems that have a grammar that indicates filenames, this ignores the
-$base filename as well. Otherwise all path components are assumed to be
-directories.
-
-If $path is relative, it is converted to absolute form using L</rel2abs()>.
-This means that it is taken to be relative to L</cwd()>.
-
-Based on code written by Shigio Yamaguchi.
-
-No checks against the filesystem are made.
-
-=cut
-
-sub abs2rel {
- my($self,$path,$base) = @_;
-
- # Clean up $path
- if ( ! $self->file_name_is_absolute( $path ) ) {
- $path = $self->rel2abs( $path ) ;
- }
- else {
- $path = $self->canonpath( $path ) ;
- }
-
- # Figure out the effective $base and clean it up.
- if ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- elsif ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- # Split up paths
- my ( $path_volume, $path_directories, $path_file ) =
- $self->splitpath( $path, 1 ) ;
-
- my ( undef, $base_directories, undef ) =
- $self->splitpath( $base, 1 ) ;
-
- # Now, remove all leading components that are the same
- my @pathchunks = $self->splitdir( $path_directories );
- my @basechunks = $self->splitdir( $base_directories );
-
- while ( @pathchunks &&
- @basechunks &&
- lc( $pathchunks[0] ) eq lc( $basechunks[0] )
- ) {
- shift @pathchunks ;
- shift @basechunks ;
- }
-
- # No need to catdir, we know these are well formed.
- $path_directories = CORE::join( '\\', @pathchunks );
- $base_directories = CORE::join( '\\', @basechunks );
-
- # $base_directories now contains the directories the resulting relative
- # path must ascend out of before it can descend to $path_directory. So,
- # replace all names with $parentDir
-
- #FA Need to replace between backslashes...
- $base_directories =~ s|[^\\]+|..|g ;
-
- # Glue the two together, using a separator if necessary, and preventing an
- # empty result.
-
- #FA Must check that new directories are not empty.
- if ( $path_directories ne '' && $base_directories ne '' ) {
- $path_directories = "$base_directories\\$path_directories" ;
- } else {
- $path_directories = "$base_directories$path_directories" ;
- }
-
- # It makes no sense to add a relative path to a UNC volume
- $path_volume = '' unless $path_volume =~ m{^[A-Z]:}is ;
-
- return $self->canonpath(
- $self->catpath($path_volume, $path_directories, $path_file )
- ) ;
-}
-
-=item rel2abs
-
-Converts a relative path to an absolute path.
-
- $abs_path = File::Spec->rel2abs( $destination ) ;
- $abs_path = File::Spec->rel2abs( $destination, $base ) ;
-
-If $base is not present or '', then L<cwd()> is used. If $base is relative,
-then it is converted to absolute form using L</rel2abs()>. This means that it
-is taken to be relative to L</cwd()>.
-
-Assumes that both paths are on the $base volume, and ignores the
-$destination volume.
-
-On systems that have a grammar that indicates filenames, this ignores the
-$base filename as well. Otherwise all path components are assumed to be
-directories.
-
-If $path is absolute, it is cleaned up and returned using L</canonpath()>.
-
-Based on code written by Shigio Yamaguchi.
-
-No checks against the filesystem are made.
-
-=cut
-
-sub rel2abs($;$;) {
- my ($self,$path,$base ) = @_;
-
- if ( ! $self->file_name_is_absolute( $path ) ) {
-
- if ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- my ( undef, $path_directories, $path_file ) =
- $self->splitpath( $path, 1 ) ;
-
- my ( $base_volume, $base_directories, undef ) =
- $self->splitpath( $base, 1 ) ;
-
- $path = $self->catpath(
- $base_volume,
- $self->catdir( $base_directories, $path_directories ),
- $path_file
- ) ;
- }
-
- return $self->canonpath( $path ) ;
-}
-
-=back
-
-=head1 SEE ALSO
-
-L<File::Spec>
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/File/Spec/Functions.pm b/contrib/perl5/lib/File/Spec/Functions.pm
deleted file mode 100644
index 0036ac1..0000000
--- a/contrib/perl5/lib/File/Spec/Functions.pm
+++ /dev/null
@@ -1,97 +0,0 @@
-package File::Spec::Functions;
-
-use File::Spec;
-use strict;
-
-use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-
-$VERSION = '1.1';
-
-require Exporter;
-
-@ISA = qw(Exporter);
-
-@EXPORT = qw(
- canonpath
- catdir
- catfile
- curdir
- rootdir
- updir
- no_upwards
- file_name_is_absolute
- path
-);
-
-@EXPORT_OK = qw(
- devnull
- tmpdir
- splitpath
- splitdir
- catpath
- abs2rel
- rel2abs
-);
-
-%EXPORT_TAGS = ( ALL => [ @EXPORT_OK, @EXPORT ] );
-
-foreach my $meth (@EXPORT, @EXPORT_OK) {
- my $sub = File::Spec->can($meth);
- no strict 'refs';
- *{$meth} = sub {&$sub('File::Spec', @_)};
-}
-
-
-1;
-__END__
-
-=head1 NAME
-
-File::Spec::Functions - portably perform operations on file names
-
-=head1 SYNOPSIS
-
- use File::Spec::Functions;
- $x = catfile('a','b');
-
-=head1 DESCRIPTION
-
-This module exports convenience functions for all of the class methods
-provided by File::Spec.
-
-For a reference of available functions, please consult L<File::Spec::Unix>,
-which contains the entire set, and which is inherited by the modules for
-other platforms. For further information, please see L<File::Spec::Mac>,
-L<File::Spec::OS2>, L<File::Spec::Win32>, or L<File::Spec::VMS>.
-
-=head2 Exports
-
-The following functions are exported by default.
-
- canonpath
- catdir
- catfile
- curdir
- rootdir
- updir
- no_upwards
- file_name_is_absolute
- path
-
-
-The following functions are exported only by request.
-
- devnull
- tmpdir
- splitpath
- splitdir
- catpath
- abs2rel
- rel2abs
-
-All the functions may be imported using the C<:ALL> tag.
-
-=head1 SEE ALSO
-
-File::Spec, File::Spec::Unix, File::Spec::Mac, File::Spec::OS2,
-File::Spec::Win32, File::Spec::VMS, ExtUtils::MakeMaker
diff --git a/contrib/perl5/lib/File/Spec/Mac.pm b/contrib/perl5/lib/File/Spec/Mac.pm
deleted file mode 100644
index 9ef55ec..0000000
--- a/contrib/perl5/lib/File/Spec/Mac.pm
+++ /dev/null
@@ -1,394 +0,0 @@
-package File::Spec::Mac;
-
-use strict;
-use vars qw(@ISA $VERSION);
-require File::Spec::Unix;
-
-$VERSION = '1.2';
-
-@ISA = qw(File::Spec::Unix);
-
-=head1 NAME
-
-File::Spec::Mac - File::Spec for MacOS
-
-=head1 SYNOPSIS
-
- require File::Spec::Mac; # Done internally by File::Spec if needed
-
-=head1 DESCRIPTION
-
-Methods for manipulating file specifications.
-
-=head1 METHODS
-
-=over 2
-
-=item canonpath
-
-On MacOS, there's nothing to be done. Returns what it's given.
-
-=cut
-
-sub canonpath {
- my ($self,$path) = @_;
- return $path;
-}
-
-=item catdir
-
-Concatenate two or more directory names to form a complete path ending with
-a directory. Put a trailing : on the end of the complete path if there
-isn't one, because that's what's done in MacPerl's environment.
-
-The fundamental requirement of this routine is that
-
- File::Spec->catdir(split(":",$path)) eq $path
-
-But because of the nature of Macintosh paths, some additional
-possibilities are allowed to make using this routine give reasonable results
-for some common situations. Here are the rules that are used. Each
-argument has its trailing ":" removed. Each argument, except the first,
-has its leading ":" removed. They are then joined together by a ":".
-
-So
-
- File::Spec->catdir("a","b") = "a:b:"
- File::Spec->catdir("a:",":b") = "a:b:"
- File::Spec->catdir("a:","b") = "a:b:"
- File::Spec->catdir("a",":b") = "a:b"
- File::Spec->catdir("a","","b") = "a::b"
-
-etc.
-
-To get a relative path (one beginning with :), begin the first argument with :
-or put a "" as the first argument.
-
-If you don't want to worry about these rules, never allow a ":" on the ends
-of any of the arguments except at the beginning of the first.
-
-Under MacPerl, there is an additional ambiguity. Does the user intend that
-
- File::Spec->catfile("LWP","Protocol","http.pm")
-
-be relative or absolute? There's no way of telling except by checking for the
-existence of LWP: or :LWP, and even there he may mean a dismounted volume or
-a relative path in a different directory (like in @INC). So those checks
-aren't done here. This routine will treat this as absolute.
-
-=cut
-
-sub catdir {
- shift;
- my @args = @_;
- my $result = shift @args;
- $result =~ s/:\Z(?!\n)//;
- foreach (@args) {
- s/:\Z(?!\n)//;
- s/^://s;
- $result .= ":$_";
- }
- return "$result:";
-}
-
-=item catfile
-
-Concatenate one or more directory names and a filename to form a
-complete path ending with a filename. Since this uses catdir, the
-same caveats apply. Note that the leading : is removed from the filename,
-so that
-
- File::Spec->catfile($ENV{HOME},"file");
-
-and
-
- File::Spec->catfile($ENV{HOME},":file");
-
-give the same answer, as one might expect.
-
-=cut
-
-sub catfile {
- my $self = shift;
- my $file = pop @_;
- return $file unless @_;
- my $dir = $self->catdir(@_);
- $file =~ s/^://s;
- return $dir.$file;
-}
-
-=item curdir
-
-Returns a string representing the current directory.
-
-=cut
-
-sub curdir {
- return ":";
-}
-
-=item devnull
-
-Returns a string representing the null device.
-
-=cut
-
-sub devnull {
- return "Dev:Null";
-}
-
-=item rootdir
-
-Returns a string representing the root directory. Under MacPerl,
-returns the name of the startup volume, since that's the closest in
-concept, although other volumes aren't rooted there.
-
-=cut
-
-sub rootdir {
-#
-# There's no real root directory on MacOS. The name of the startup
-# volume is returned, since that's the closest in concept.
-#
- require Mac::Files;
- my $system = Mac::Files::FindFolder(&Mac::Files::kOnSystemDisk,
- &Mac::Files::kSystemFolderType);
- $system =~ s/:.*\Z(?!\n)/:/s;
- return $system;
-}
-
-=item tmpdir
-
-Returns a string representation of the first existing directory
-from the following list or '' if none exist:
-
- $ENV{TMPDIR}
-
-=cut
-
-my $tmpdir;
-sub tmpdir {
- return $tmpdir if defined $tmpdir;
- $tmpdir = $ENV{TMPDIR} if -d $ENV{TMPDIR};
- $tmpdir = '' unless defined $tmpdir;
- return $tmpdir;
-}
-
-=item updir
-
-Returns a string representing the parent directory.
-
-=cut
-
-sub updir {
- return "::";
-}
-
-=item file_name_is_absolute
-
-Takes as argument a path and returns true, if it is an absolute path. In
-the case where a name can be either relative or absolute (for example, a
-folder named "HD" in the current working directory on a drive named "HD"),
-relative wins. Use ":" in the appropriate place in the path if you want to
-distinguish unambiguously.
-
-As a special case, the file name '' is always considered to be absolute.
-
-=cut
-
-sub file_name_is_absolute {
- my ($self,$file) = @_;
- if ($file =~ /:/) {
- return ($file !~ m/^:/s);
- } elsif ( $file eq '' ) {
- return 1 ;
- } else {
- return (! -e ":$file");
- }
-}
-
-=item path
-
-Returns the null list for the MacPerl application, since the concept is
-usually meaningless under MacOS. But if you're using the MacPerl tool under
-MPW, it gives back $ENV{Commands} suitably split, as is done in
-:lib:ExtUtils:MM_Mac.pm.
-
-=cut
-
-sub path {
-#
-# The concept is meaningless under the MacPerl application.
-# Under MPW, it has a meaning.
-#
- return unless exists $ENV{Commands};
- return split(/,/, $ENV{Commands});
-}
-
-=item splitpath
-
-=cut
-
-sub splitpath {
- my ($self,$path, $nofile) = @_;
-
- my ($volume,$directory,$file) = ('','','');
-
- if ( $nofile ) {
- ( $volume, $directory ) = $path =~ m@((?:[^:]+(?::|\Z(?!\n)))?)(.*)@s;
- }
- else {
- $path =~
- m@^( (?: [^:]+: )? )
- ( (?: .*: )? )
- ( .* )
- @xs;
- $volume = $1;
- $directory = $2;
- $file = $3;
- }
-
- # Make sure non-empty volumes and directories end in ':'
- $volume .= ':' if $volume =~ m@[^:]\Z(?!\n)@ ;
- $directory .= ':' if $directory =~ m@[^:]\Z(?!\n)@ ;
- return ($volume,$directory,$file);
-}
-
-
-=item splitdir
-
-=cut
-
-sub splitdir {
- my ($self,$directories) = @_ ;
- #
- # split() likes to forget about trailing null fields, so here we
- # check to be sure that there will not be any before handling the
- # simple case.
- #
- if ( $directories !~ m@:\Z(?!\n)@ ) {
- return split( m@:@, $directories );
- }
- else {
- #
- # since there was a trailing separator, add a file name to the end,
- # then do the split, then replace it with ''.
- #
- my( @directories )= split( m@:@, "${directories}dummy" ) ;
- $directories[ $#directories ]= '' ;
- return @directories ;
- }
-}
-
-
-=item catpath
-
-=cut
-
-sub catpath {
- my $self = shift ;
-
- my $result = shift ;
- $result =~ s@^([^/])@/$1@s ;
-
- my $segment ;
- for $segment ( @_ ) {
- if ( $result =~ m@[^/]\Z(?!\n)@ && $segment =~ m@^[^/]@s ) {
- $result .= "/$segment" ;
- }
- elsif ( $result =~ m@/\Z(?!\n)@ && $segment =~ m@^/@s ) {
- $result =~ s@/+\Z(?!\n)@/@;
- $segment =~ s@^/+@@s;
- $result .= "$segment" ;
- }
- else {
- $result .= $segment ;
- }
- }
-
- return $result ;
-}
-
-=item abs2rel
-
-See L<File::Spec::Unix/abs2rel> for general documentation.
-
-Unlike C<File::Spec::Unix->abs2rel()>, this function will make
-checks against the local filesystem if necessary. See
-L</file_name_is_absolute> for details.
-
-=cut
-
-sub abs2rel {
- my($self,$path,$base) = @_;
-
- # Clean up $path
- if ( ! $self->file_name_is_absolute( $path ) ) {
- $path = $self->rel2abs( $path ) ;
- }
-
- # Figure out the effective $base and clean it up.
- if ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
-
- # Now, remove all leading components that are the same
- my @pathchunks = $self->splitdir( $path );
- my @basechunks = $self->splitdir( $base );
-
- while (@pathchunks && @basechunks && $pathchunks[0] eq $basechunks[0]) {
- shift @pathchunks ;
- shift @basechunks ;
- }
-
- $path = join( ':', @pathchunks );
-
- # @basechunks now contains the number of directories to climb out of.
- $base = ':' x @basechunks ;
-
- return "$base:$path" ;
-}
-
-=item rel2abs
-
-See L<File::Spec::Unix/rel2abs> for general documentation.
-
-Unlike C<File::Spec::Unix->rel2abs()>, this function will make
-checks against the local filesystem if necessary. See
-L</file_name_is_absolute> for details.
-
-=cut
-
-sub rel2abs {
- my ($self,$path,$base ) = @_;
-
- if ( ! $self->file_name_is_absolute( $path ) ) {
- if ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- $path = $self->canonpath("$base$path") ;
- }
-
- return $path ;
-}
-
-
-=back
-
-=head1 SEE ALSO
-
-L<File::Spec>
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/File/Spec/OS2.pm b/contrib/perl5/lib/File/Spec/OS2.pm
deleted file mode 100644
index 20bf8c9..0000000
--- a/contrib/perl5/lib/File/Spec/OS2.pm
+++ /dev/null
@@ -1,62 +0,0 @@
-package File::Spec::OS2;
-
-use strict;
-use vars qw(@ISA $VERSION);
-require File::Spec::Unix;
-
-$VERSION = '1.1';
-
-@ISA = qw(File::Spec::Unix);
-
-sub devnull {
- return "/dev/nul";
-}
-
-sub case_tolerant {
- return 1;
-}
-
-sub file_name_is_absolute {
- my ($self,$file) = @_;
- return scalar($file =~ m{^([a-z]:)?[\\/]}is);
-}
-
-sub path {
- my $path = $ENV{PATH};
- $path =~ s:\\:/:g;
- my @path = split(';',$path);
- foreach (@path) { $_ = '.' if $_ eq '' }
- return @path;
-}
-
-my $tmpdir;
-sub tmpdir {
- return $tmpdir if defined $tmpdir;
- my $self = shift;
- foreach (@ENV{qw(TMPDIR TEMP TMP)}, qw(/tmp /)) {
- next unless defined && -d;
- $tmpdir = $_;
- last;
- }
- $tmpdir = '' unless defined $tmpdir;
- $tmpdir =~ s:\\:/:g;
- $tmpdir = $self->canonpath($tmpdir);
- return $tmpdir;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-File::Spec::OS2 - methods for OS/2 file specs
-
-=head1 SYNOPSIS
-
- require File::Spec::OS2; # Done internally by File::Spec if needed
-
-=head1 DESCRIPTION
-
-See File::Spec::Unix for a documentation of the methods provided
-there. This package overrides the implementation of these methods, not
-the semantics.
diff --git a/contrib/perl5/lib/File/Spec/Unix.pm b/contrib/perl5/lib/File/Spec/Unix.pm
deleted file mode 100644
index a81c533..0000000
--- a/contrib/perl5/lib/File/Spec/Unix.pm
+++ /dev/null
@@ -1,458 +0,0 @@
-package File::Spec::Unix;
-
-use strict;
-use vars qw($VERSION);
-
-$VERSION = '1.2';
-
-use Cwd;
-
-=head1 NAME
-
-File::Spec::Unix - methods used by File::Spec
-
-=head1 SYNOPSIS
-
- require File::Spec::Unix; # Done automatically by File::Spec
-
-=head1 DESCRIPTION
-
-Methods for manipulating file specifications.
-
-=head1 METHODS
-
-=over 2
-
-=item canonpath
-
-No physical check on the filesystem, but a logical cleanup of a
-path. On UNIX eliminated successive slashes and successive "/.".
-
- $cpath = File::Spec->canonpath( $path ) ;
-
-=cut
-
-sub canonpath {
- my ($self,$path) = @_;
- $path =~ s|/+|/|g unless($^O eq 'cygwin'); # xx////xx -> xx/xx
- $path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx
- $path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
- $path =~ s|^/(\.\./)+|/|s; # /../../xx -> xx
- $path =~ s|/\Z(?!\n)|| unless $path eq "/"; # xx/ -> xx
- return $path;
-}
-
-=item catdir
-
-Concatenate two or more directory names to form a complete path ending
-with a directory. But remove the trailing slash from the resulting
-string, because it doesn't look good, isn't necessary and confuses
-OS2. Of course, if this is the root directory, don't cut off the
-trailing slash :-)
-
-=cut
-
-sub catdir {
- my $self = shift;
- my @args = @_;
- foreach (@args) {
- # append a slash to each argument unless it has one there
- $_ .= "/" if $_ eq '' || substr($_,-1) ne "/";
- }
- return $self->canonpath(join('', @args));
-}
-
-=item catfile
-
-Concatenate one or more directory names and a filename to form a
-complete path ending with a filename
-
-=cut
-
-sub catfile {
- my $self = shift;
- my $file = pop @_;
- return $file unless @_;
- my $dir = $self->catdir(@_);
- $dir .= "/" unless substr($dir,-1) eq "/";
- return $dir.$file;
-}
-
-=item curdir
-
-Returns a string representation of the current directory. "." on UNIX.
-
-=cut
-
-sub curdir {
- return ".";
-}
-
-=item devnull
-
-Returns a string representation of the null device. "/dev/null" on UNIX.
-
-=cut
-
-sub devnull {
- return "/dev/null";
-}
-
-=item rootdir
-
-Returns a string representation of the root directory. "/" on UNIX.
-
-=cut
-
-sub rootdir {
- return "/";
-}
-
-=item tmpdir
-
-Returns a string representation of the first writable directory
-from the following list or "" if none are writable:
-
- $ENV{TMPDIR}
- /tmp
-
-=cut
-
-my $tmpdir;
-sub tmpdir {
- return $tmpdir if defined $tmpdir;
- foreach ($ENV{TMPDIR}, "/tmp") {
- next unless defined && -d && -w _;
- $tmpdir = $_;
- last;
- }
- $tmpdir = '' unless defined $tmpdir;
- return $tmpdir;
-}
-
-=item updir
-
-Returns a string representation of the parent directory. ".." on UNIX.
-
-=cut
-
-sub updir {
- return "..";
-}
-
-=item no_upwards
-
-Given a list of file names, strip out those that refer to a parent
-directory. (Does not strip symlinks, only '.', '..', and equivalents.)
-
-=cut
-
-sub no_upwards {
- my $self = shift;
- return grep(!/^\.{1,2}\Z(?!\n)/s, @_);
-}
-
-=item case_tolerant
-
-Returns a true or false value indicating, respectively, that alphabetic
-is not or is significant when comparing file specifications.
-
-=cut
-
-sub case_tolerant {
- return 0;
-}
-
-=item file_name_is_absolute
-
-Takes as argument a path and returns true if it is an absolute path.
-
-This does not consult the local filesystem on Unix, Win32, or OS/2. It
-does sometimes on MacOS (see L<File::Spec::MacOS/file_name_is_absolute>).
-It does consult the working environment for VMS (see
-L<File::Spec::VMS/file_name_is_absolute>).
-
-=cut
-
-sub file_name_is_absolute {
- my ($self,$file) = @_;
- return scalar($file =~ m:^/:s);
-}
-
-=item path
-
-Takes no argument, returns the environment variable PATH as an array.
-
-=cut
-
-sub path {
- my @path = split(':', $ENV{PATH});
- foreach (@path) { $_ = '.' if $_ eq '' }
- return @path;
-}
-
-=item join
-
-join is the same as catfile.
-
-=cut
-
-sub join {
- my $self = shift;
- return $self->catfile(@_);
-}
-
-=item splitpath
-
- ($volume,$directories,$file) = File::Spec->splitpath( $path );
- ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
-
-Splits a path in to volume, directory, and filename portions. On systems
-with no concept of volume, returns undef for volume.
-
-For systems with no syntax differentiating filenames from directories,
-assumes that the last file is a path unless $no_file is true or a
-trailing separator or /. or /.. is present. On Unix this means that $no_file
-true makes this return ( '', $path, '' ).
-
-The directory portion may or may not be returned with a trailing '/'.
-
-The results can be passed to L</catpath()> to get back a path equivalent to
-(usually identical to) the original path.
-
-=cut
-
-sub splitpath {
- my ($self,$path, $nofile) = @_;
-
- my ($volume,$directory,$file) = ('','','');
-
- if ( $nofile ) {
- $directory = $path;
- }
- else {
- $path =~ m|^ ( (?: .* / (?: \.\.?\Z(?!\n) )? )? ) ([^/]*) |xs;
- $directory = $1;
- $file = $2;
- }
-
- return ($volume,$directory,$file);
-}
-
-
-=item splitdir
-
-The opposite of L</catdir()>.
-
- @dirs = File::Spec->splitdir( $directories );
-
-$directories must be only the directory portion of the path on systems
-that have the concept of a volume or that have path syntax that differentiates
-files from directories.
-
-Unlike just splitting the directories on the separator, empty
-directory names (C<''>) can be returned, because these are significant
-on some OSs (e.g. MacOS).
-
-On Unix,
-
- File::Spec->splitdir( "/a/b//c/" );
-
-Yields:
-
- ( '', 'a', 'b', '', 'c', '' )
-
-=cut
-
-sub splitdir {
- my ($self,$directories) = @_ ;
- #
- # split() likes to forget about trailing null fields, so here we
- # check to be sure that there will not be any before handling the
- # simple case.
- #
- if ( $directories !~ m|/\Z(?!\n)| ) {
- return split( m|/|, $directories );
- }
- else {
- #
- # since there was a trailing separator, add a file name to the end,
- # then do the split, then replace it with ''.
- #
- my( @directories )= split( m|/|, "${directories}dummy" ) ;
- $directories[ $#directories ]= '' ;
- return @directories ;
- }
-}
-
-
-=item catpath
-
-Takes volume, directory and file portions and returns an entire path. Under
-Unix, $volume is ignored, and directory and file are catenated. A '/' is
-inserted if need be. On other OSs, $volume is significant.
-
-=cut
-
-sub catpath {
- my ($self,$volume,$directory,$file) = @_;
-
- if ( $directory ne '' &&
- $file ne '' &&
- substr( $directory, -1 ) ne '/' &&
- substr( $file, 0, 1 ) ne '/'
- ) {
- $directory .= "/$file" ;
- }
- else {
- $directory .= $file ;
- }
-
- return $directory ;
-}
-
-=item abs2rel
-
-Takes a destination path and an optional base path returns a relative path
-from the base path to the destination path:
-
- $rel_path = File::Spec->abs2rel( $path ) ;
- $rel_path = File::Spec->abs2rel( $path, $base ) ;
-
-If $base is not present or '', then L<cwd()> is used. If $base is relative,
-then it is converted to absolute form using L</rel2abs()>. This means that it
-is taken to be relative to L<cwd()>.
-
-On systems with the concept of a volume, this assumes that both paths
-are on the $destination volume, and ignores the $base volume.
-
-On systems that have a grammar that indicates filenames, this ignores the
-$base filename as well. Otherwise all path components are assumed to be
-directories.
-
-If $path is relative, it is converted to absolute form using L</rel2abs()>.
-This means that it is taken to be relative to L<cwd()>.
-
-No checks against the filesystem are made on most systems. On MacOS,
-the filesystem may be consulted (see
-L<File::Spec::MacOS/file_name_is_absolute>). On VMS, there is
-interaction with the working environment, as logicals and
-macros are expanded.
-
-Based on code written by Shigio Yamaguchi.
-
-=cut
-
-sub abs2rel {
- my($self,$path,$base) = @_;
-
- # Clean up $path
- if ( ! $self->file_name_is_absolute( $path ) ) {
- $path = $self->rel2abs( $path ) ;
- }
- else {
- $path = $self->canonpath( $path ) ;
- }
-
- # Figure out the effective $base and clean it up.
- if ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- # Now, remove all leading components that are the same
- my @pathchunks = $self->splitdir( $path);
- my @basechunks = $self->splitdir( $base);
-
- while (@pathchunks && @basechunks && $pathchunks[0] eq $basechunks[0]) {
- shift @pathchunks ;
- shift @basechunks ;
- }
-
- $path = CORE::join( '/', @pathchunks );
- $base = CORE::join( '/', @basechunks );
-
- # $base now contains the directories the resulting relative path
- # must ascend out of before it can descend to $path_directory. So,
- # replace all names with $parentDir
- $base =~ s|[^/]+|..|g ;
-
- # Glue the two together, using a separator if necessary, and preventing an
- # empty result.
- if ( $path ne '' && $base ne '' ) {
- $path = "$base/$path" ;
- } else {
- $path = "$base$path" ;
- }
-
- return $self->canonpath( $path ) ;
-}
-
-=item rel2abs
-
-Converts a relative path to an absolute path.
-
- $abs_path = File::Spec->rel2abs( $path ) ;
- $abs_path = File::Spec->rel2abs( $path, $base ) ;
-
-If $base is not present or '', then L<cwd()> is used. If $base is relative,
-then it is converted to absolute form using L</rel2abs()>. This means that it
-is taken to be relative to L<cwd()>.
-
-On systems with the concept of a volume, this assumes that both paths
-are on the $base volume, and ignores the $path volume.
-
-On systems that have a grammar that indicates filenames, this ignores the
-$base filename as well. Otherwise all path components are assumed to be
-directories.
-
-If $path is absolute, it is cleaned up and returned using L</canonpath()>.
-
-No checks against the filesystem are made on most systems. On MacOS,
-the filesystem may be consulted (see
-L<File::Spec::MacOS/file_name_is_absolute>). On VMS, there is
-interaction with the working environment, as logicals and
-macros are expanded.
-
-Based on code written by Shigio Yamaguchi.
-
-=cut
-
-sub rel2abs {
- my ($self,$path,$base ) = @_;
-
- # Clean up $path
- if ( ! $self->file_name_is_absolute( $path ) ) {
- # Figure out the effective $base and clean it up.
- if ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- # Glom them together
- $path = $self->catdir( $base, $path ) ;
- }
-
- return $self->canonpath( $path ) ;
-}
-
-
-=back
-
-=head1 SEE ALSO
-
-L<File::Spec>
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/File/Spec/VMS.pm b/contrib/perl5/lib/File/Spec/VMS.pm
deleted file mode 100644
index 60b0ec8..0000000
--- a/contrib/perl5/lib/File/Spec/VMS.pm
+++ /dev/null
@@ -1,505 +0,0 @@
-package File::Spec::VMS;
-
-use strict;
-use vars qw(@ISA $VERSION);
-require File::Spec::Unix;
-
-$VERSION = '1.1';
-
-@ISA = qw(File::Spec::Unix);
-
-use Cwd;
-use File::Basename;
-use VMS::Filespec;
-
-=head1 NAME
-
-File::Spec::VMS - methods for VMS file specs
-
-=head1 SYNOPSIS
-
- require File::Spec::VMS; # Done internally by File::Spec if needed
-
-=head1 DESCRIPTION
-
-See File::Spec::Unix for a documentation of the methods provided
-there. This package overrides the implementation of these methods, not
-the semantics.
-
-=over
-
-=item eliminate_macros
-
-Expands MM[KS]/Make macros in a text string, using the contents of
-identically named elements of C<%$self>, and returns the result
-as a file specification in Unix syntax.
-
-=cut
-
-sub eliminate_macros {
- my($self,$path) = @_;
- return '' unless $path;
- $self = {} unless ref $self;
-
- if ($path =~ /\s/) {
- return join ' ', map { $self->eliminate_macros($_) } split /\s+/, $path;
- }
-
- my($npath) = unixify($path);
- my($complex) = 0;
- my($head,$macro,$tail);
-
- # perform m##g in scalar context so it acts as an iterator
- while ($npath =~ m#(.*?)\$\((\S+?)\)(.*)#gs) {
- if ($self->{$2}) {
- ($head,$macro,$tail) = ($1,$2,$3);
- if (ref $self->{$macro}) {
- if (ref $self->{$macro} eq 'ARRAY') {
- $macro = join ' ', @{$self->{$macro}};
- }
- else {
- print "Note: can't expand macro \$($macro) containing ",ref($self->{$macro}),
- "\n\t(using MMK-specific deferred substitutuon; MMS will break)\n";
- $macro = "\cB$macro\cB";
- $complex = 1;
- }
- }
- else { ($macro = unixify($self->{$macro})) =~ s#/\Z(?!\n)##; }
- $npath = "$head$macro$tail";
- }
- }
- if ($complex) { $npath =~ s#\cB(.*?)\cB#\${$1}#gs; }
- $npath;
-}
-
-=item fixpath
-
-Catchall routine to clean up problem MM[SK]/Make macros. Expands macros
-in any directory specification, in order to avoid juxtaposing two
-VMS-syntax directories when MM[SK] is run. Also expands expressions which
-are all macro, so that we can tell how long the expansion is, and avoid
-overrunning DCL's command buffer when MM[KS] is running.
-
-If optional second argument has a TRUE value, then the return string is
-a VMS-syntax directory specification, if it is FALSE, the return string
-is a VMS-syntax file specification, and if it is not specified, fixpath()
-checks to see whether it matches the name of a directory in the current
-default directory, and returns a directory or file specification accordingly.
-
-=cut
-
-sub fixpath {
- my($self,$path,$force_path) = @_;
- return '' unless $path;
- $self = bless {} unless ref $self;
- my($fixedpath,$prefix,$name);
-
- if ($path =~ /\s/) {
- return join ' ',
- map { $self->fixpath($_,$force_path) }
- split /\s+/, $path;
- }
-
- if ($path =~ m#^\$\([^\)]+\)\Z(?!\n)#s || $path =~ m#[/:>\]]#) {
- if ($force_path or $path =~ /(?:DIR\)|\])\Z(?!\n)/) {
- $fixedpath = vmspath($self->eliminate_macros($path));
- }
- else {
- $fixedpath = vmsify($self->eliminate_macros($path));
- }
- }
- elsif ((($prefix,$name) = ($path =~ m#^\$\(([^\)]+)\)(.+)#s)) && $self->{$prefix}) {
- my($vmspre) = $self->eliminate_macros("\$($prefix)");
- # is it a dir or just a name?
- $vmspre = ($vmspre =~ m|/| or $prefix =~ /DIR\Z(?!\n)/) ? vmspath($vmspre) : '';
- $fixedpath = ($vmspre ? $vmspre : $self->{$prefix}) . $name;
- $fixedpath = vmspath($fixedpath) if $force_path;
- }
- else {
- $fixedpath = $path;
- $fixedpath = vmspath($fixedpath) if $force_path;
- }
- # No hints, so we try to guess
- if (!defined($force_path) and $fixedpath !~ /[:>(.\]]/) {
- $fixedpath = vmspath($fixedpath) if -d $fixedpath;
- }
-
- # Trim off root dirname if it's had other dirs inserted in front of it.
- $fixedpath =~ s/\.000000([\]>])/$1/;
- # Special case for VMS absolute directory specs: these will have had device
- # prepended during trip through Unix syntax in eliminate_macros(), since
- # Unix syntax has no way to express "absolute from the top of this device's
- # directory tree".
- if ($path =~ /^[\[>][^.\-]/) { $fixedpath =~ s/^[^\[<]+//; }
- $fixedpath;
-}
-
-=back
-
-=head2 Methods always loaded
-
-=over
-
-=item canonpath (override)
-
-Removes redundant portions of file specifications according to VMS syntax.
-
-=cut
-
-sub canonpath {
- my($self,$path) = @_;
-
- if ($path =~ m|/|) { # Fake Unix
- my $pathify = $path =~ m|/\Z(?!\n)|;
- $path = $self->SUPER::canonpath($path);
- if ($pathify) { return vmspath($path); }
- else { return vmsify($path); }
- }
- else {
- $path =~ s-\]\[--g; $path =~ s/><//g; # foo.][bar ==> foo.bar
- $path =~ s/([\[<])000000\./$1/; # [000000.foo ==> foo
- 1 while $path =~ s{([\[<-])\.-}{$1-}; # [.-.- ==> [--
- $path =~ s/\.[^\[<\.]+\.-([\]\>])/$1/; # bar.foo.-] ==> bar]
- $path =~ s/([\[<])(-+)/$1 . "\cx" x length($2)/e; # encode leading '-'s
- $path =~ s/([\[<\.])([^\[<\.\cx]+)\.-\.?/$1/g; # bar.-.foo ==> foo
- $path =~ s/([\[<])(\cx+)/$1 . '-' x length($2)/e; # then decode
- return $path;
- }
-}
-
-=item catdir
-
-Concatenates a list of file specifications, and returns the result as a
-VMS-syntax directory specification. No check is made for "impossible"
-cases (e.g. elements other than the first being absolute filespecs).
-
-=cut
-
-sub catdir {
- my ($self,@dirs) = @_;
- my $dir = pop @dirs;
- @dirs = grep($_,@dirs);
- my $rslt;
- if (@dirs) {
- my $path = (@dirs == 1 ? $dirs[0] : $self->catdir(@dirs));
- my ($spath,$sdir) = ($path,$dir);
- $spath =~ s/\.dir\Z(?!\n)//; $sdir =~ s/\.dir\Z(?!\n)//;
- $sdir = $self->eliminate_macros($sdir) unless $sdir =~ /^[\w\-]+\Z(?!\n)/s;
- $rslt = $self->fixpath($self->eliminate_macros($spath)."/$sdir",1);
-
- # Special case for VMS absolute directory specs: these will have had device
- # prepended during trip through Unix syntax in eliminate_macros(), since
- # Unix syntax has no way to express "absolute from the top of this device's
- # directory tree".
- if ($spath =~ /^[\[<][^.\-]/s) { $rslt =~ s/^[^\[<]+//s; }
- }
- else {
- if (not defined $dir or not length $dir) { $rslt = ''; }
- elsif ($dir =~ /^\$\([^\)]+\)\Z(?!\n)/s) { $rslt = $dir; }
- else { $rslt = vmspath($dir); }
- }
- return $self->canonpath($rslt);
-}
-
-=item catfile
-
-Concatenates a list of file specifications, and returns the result as a
-VMS-syntax file specification.
-
-=cut
-
-sub catfile {
- my ($self,@files) = @_;
- my $file = pop @files;
- @files = grep($_,@files);
- my $rslt;
- if (@files) {
- my $path = (@files == 1 ? $files[0] : $self->catdir(@files));
- my $spath = $path;
- $spath =~ s/\.dir\Z(?!\n)//;
- if ($spath =~ /^[^\)\]\/:>]+\)\Z(?!\n)/s && basename($file) eq $file) {
- $rslt = "$spath$file";
- }
- else {
- $rslt = $self->eliminate_macros($spath);
- $rslt = vmsify($rslt.($rslt ? '/' : '').unixify($file));
- }
- }
- else { $rslt = (defined($file) && length($file)) ? vmsify($file) : ''; }
- return $self->canonpath($rslt);
-}
-
-
-=item curdir (override)
-
-Returns a string representation of the current directory: '[]'
-
-=cut
-
-sub curdir {
- return '[]';
-}
-
-=item devnull (override)
-
-Returns a string representation of the null device: '_NLA0:'
-
-=cut
-
-sub devnull {
- return "_NLA0:";
-}
-
-=item rootdir (override)
-
-Returns a string representation of the root directory: 'SYS$DISK:[000000]'
-
-=cut
-
-sub rootdir {
- return 'SYS$DISK:[000000]';
-}
-
-=item tmpdir (override)
-
-Returns a string representation of the first writable directory
-from the following list or '' if none are writable:
-
- sys$scratch:
- $ENV{TMPDIR}
-
-=cut
-
-my $tmpdir;
-sub tmpdir {
- return $tmpdir if defined $tmpdir;
- foreach ('sys$scratch:', $ENV{TMPDIR}) {
- next unless defined && -d && -w _;
- $tmpdir = $_;
- last;
- }
- $tmpdir = '' unless defined $tmpdir;
- return $tmpdir;
-}
-
-=item updir (override)
-
-Returns a string representation of the parent directory: '[-]'
-
-=cut
-
-sub updir {
- return '[-]';
-}
-
-=item case_tolerant (override)
-
-VMS file specification syntax is case-tolerant.
-
-=cut
-
-sub case_tolerant {
- return 1;
-}
-
-=item path (override)
-
-Translate logical name DCL$PATH as a searchlist, rather than trying
-to C<split> string value of C<$ENV{'PATH'}>.
-
-=cut
-
-sub path {
- my (@dirs,$dir,$i);
- while ($dir = $ENV{'DCL$PATH;' . $i++}) { push(@dirs,$dir); }
- return @dirs;
-}
-
-=item file_name_is_absolute (override)
-
-Checks for VMS directory spec as well as Unix separators.
-
-=cut
-
-sub file_name_is_absolute {
- my ($self,$file) = @_;
- # If it's a logical name, expand it.
- $file = $ENV{$file} while $file =~ /^[\w\$\-]+\Z(?!\n)/s && $ENV{$file};
- return scalar($file =~ m!^/!s ||
- $file =~ m![<\[][^.\-\]>]! ||
- $file =~ /:[^<\[]/);
-}
-
-=item splitpath (override)
-
-Splits using VMS syntax.
-
-=cut
-
-sub splitpath {
- my($self,$path) = @_;
- my($dev,$dir,$file) = ('','','');
-
- vmsify($path) =~ /(.+:)?([\[<].*[\]>])?(.*)/s;
- return ($1 || '',$2 || '',$3);
-}
-
-=item splitdir (override)
-
-Split dirspec using VMS syntax.
-
-=cut
-
-sub splitdir {
- my($self,$dirspec) = @_;
- $dirspec =~ s/\]\[//g; $dirspec =~ s/\-\-/-.-/g;
- $dirspec = "[$dirspec]" unless $dirspec =~ /[\[<]/; # make legal
- my(@dirs) = split('\.', vmspath($dirspec));
- $dirs[0] =~ s/^[\[<]//s; $dirs[-1] =~ s/[\]>]\Z(?!\n)//s;
- @dirs;
-}
-
-
-=item catpath (override)
-
-Construct a complete filespec using VMS syntax
-
-=cut
-
-sub catpath {
- my($self,$dev,$dir,$file) = @_;
- if ($dev =~ m|^/+([^/]+)|) { $dev = "$1:"; }
- else { $dev .= ':' unless $dev eq '' or $dev =~ /:\Z(?!\n)/; }
- if (length($dev) or length($dir)) {
- $dir = "[$dir]" unless $dir =~ /[\[<\/]/;
- $dir = vmspath($dir);
- }
- "$dev$dir$file";
-}
-
-=item abs2rel (override)
-
-Use VMS syntax when converting filespecs.
-
-=cut
-
-sub abs2rel {
- my $self = shift;
-
- return vmspath(File::Spec::Unix::abs2rel( $self, @_ ))
- if ( join( '', @_ ) =~ m{/} ) ;
-
- my($path,$base) = @_;
-
- # Note: we use '/' to glue things together here, then let canonpath()
- # clean them up at the end.
-
- # Clean up $path
- if ( ! $self->file_name_is_absolute( $path ) ) {
- $path = $self->rel2abs( $path ) ;
- }
- else {
- $path = $self->canonpath( $path ) ;
- }
-
- # Figure out the effective $base and clean it up.
- if ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- # Split up paths
- my ( $path_directories, $path_file ) =
- ($self->splitpath( $path, 1 ))[1,2] ;
-
- $path_directories = $1
- if $path_directories =~ /^\[(.*)\]\Z(?!\n)/s ;
-
- my $base_directories = ($self->splitpath( $base, 1 ))[1] ;
-
- $base_directories = $1
- if $base_directories =~ /^\[(.*)\]\Z(?!\n)/s ;
-
- # Now, remove all leading components that are the same
- my @pathchunks = $self->splitdir( $path_directories );
- my @basechunks = $self->splitdir( $base_directories );
-
- while ( @pathchunks &&
- @basechunks &&
- lc( $pathchunks[0] ) eq lc( $basechunks[0] )
- ) {
- shift @pathchunks ;
- shift @basechunks ;
- }
-
- # @basechunks now contains the directories to climb out of,
- # @pathchunks now has the directories to descend in to.
- $path_directories = '-.' x @basechunks . join( '.', @pathchunks ) ;
- $path_directories =~ s{\.\Z(?!\n)}{} ;
- return $self->canonpath( $self->catpath( '', $path_directories, $path_file ) ) ;
-}
-
-
-=item rel2abs (override)
-
-Use VMS syntax when converting filespecs.
-
-=cut
-
-sub rel2abs {
- my $self = shift ;
- return vmspath(File::Spec::Unix::rel2abs( $self, @_ ))
- if ( join( '', @_ ) =~ m{/} ) ;
-
- my ($path,$base ) = @_;
- # Clean up and split up $path
- if ( ! $self->file_name_is_absolute( $path ) ) {
- # Figure out the effective $base and clean it up.
- if ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- # Split up paths
- my ( $path_directories, $path_file ) =
- ($self->splitpath( $path ))[1,2] ;
-
- my ( $base_volume, $base_directories ) =
- $self->splitpath( $base ) ;
-
- $path_directories = '' if $path_directories eq '[]' ||
- $path_directories eq '<>';
- my $sep = '' ;
- $sep = '.'
- if ( $base_directories =~ m{[^.\]>]\Z(?!\n)} &&
- $path_directories =~ m{^[^.\[<]}s
- ) ;
- $base_directories = "$base_directories$sep$path_directories";
- $base_directories =~ s{\.?[\]>][\[<]\.?}{.};
-
- $path = $self->catpath( $base_volume, $base_directories, $path_file );
- }
-
- return $self->canonpath( $path ) ;
-}
-
-
-=back
-
-=head1 SEE ALSO
-
-L<File::Spec>
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/File/Spec/Win32.pm b/contrib/perl5/lib/File/Spec/Win32.pm
deleted file mode 100644
index 3c01985..0000000
--- a/contrib/perl5/lib/File/Spec/Win32.pm
+++ /dev/null
@@ -1,355 +0,0 @@
-package File::Spec::Win32;
-
-use strict;
-use Cwd;
-use vars qw(@ISA $VERSION);
-require File::Spec::Unix;
-
-$VERSION = '1.2';
-
-@ISA = qw(File::Spec::Unix);
-
-=head1 NAME
-
-File::Spec::Win32 - methods for Win32 file specs
-
-=head1 SYNOPSIS
-
- require File::Spec::Win32; # Done internally by File::Spec if needed
-
-=head1 DESCRIPTION
-
-See File::Spec::Unix for a documentation of the methods provided
-there. This package overrides the implementation of these methods, not
-the semantics.
-
-=over
-
-=item devnull
-
-Returns a string representation of the null device.
-
-=cut
-
-sub devnull {
- return "nul";
-}
-
-=item tmpdir
-
-Returns a string representation of the first existing directory
-from the following list:
-
- $ENV{TMPDIR}
- $ENV{TEMP}
- $ENV{TMP}
- C:/temp
- /tmp
- /
-
-=cut
-
-my $tmpdir;
-sub tmpdir {
- return $tmpdir if defined $tmpdir;
- my $self = shift;
- foreach (@ENV{qw(TMPDIR TEMP TMP)}, qw(C:/temp /tmp /)) {
- next unless defined && -d;
- $tmpdir = $_;
- last;
- }
- $tmpdir = '' unless defined $tmpdir;
- $tmpdir = $self->canonpath($tmpdir);
- return $tmpdir;
-}
-
-sub case_tolerant {
- return 1;
-}
-
-sub file_name_is_absolute {
- my ($self,$file) = @_;
- return scalar($file =~ m{^([a-z]:)?[\\/]}is);
-}
-
-=item catfile
-
-Concatenate one or more directory names and a filename to form a
-complete path ending with a filename
-
-=cut
-
-sub catfile {
- my $self = shift;
- my $file = pop @_;
- return $file unless @_;
- my $dir = $self->catdir(@_);
- $dir .= "\\" unless substr($dir,-1) eq "\\";
- return $dir.$file;
-}
-
-sub path {
- my $path = $ENV{'PATH'} || $ENV{'Path'} || $ENV{'path'};
- my @path = split(';',$path);
- foreach (@path) { $_ = '.' if $_ eq '' }
- return @path;
-}
-
-=item canonpath
-
-No physical check on the filesystem, but a logical cleanup of a
-path. On UNIX eliminated successive slashes and successive "/.".
-
-=cut
-
-sub canonpath {
- my ($self,$path) = @_;
- $path =~ s/^([a-z]:)/\u$1/s;
- $path =~ s|/|\\|g;
- $path =~ s|([^\\])\\+|$1\\|g; # xx////xx -> xx/xx
- $path =~ s|(\\\.)+\\|\\|g; # xx/././xx -> xx/xx
- $path =~ s|^(\.\\)+||s unless $path eq ".\\"; # ./xx -> xx
- $path =~ s|\\\Z(?!\n)||
- unless $path =~ m#^([A-Z]:)?\\\Z(?!\n)#s; # xx/ -> xx
- return $path;
-}
-
-=item splitpath
-
- ($volume,$directories,$file) = File::Spec->splitpath( $path );
- ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
-
-Splits a path in to volume, directory, and filename portions. Assumes that
-the last file is a path unless the path ends in '\\', '\\.', '\\..'
-or $no_file is true. On Win32 this means that $no_file true makes this return
-( $volume, $path, undef ).
-
-Separators accepted are \ and /.
-
-Volumes can be drive letters or UNC sharenames (\\server\share).
-
-The results can be passed to L</catpath> to get back a path equivalent to
-(usually identical to) the original path.
-
-=cut
-
-sub splitpath {
- my ($self,$path, $nofile) = @_;
- my ($volume,$directory,$file) = ('','','');
- if ( $nofile ) {
- $path =~
- m{^( (?:[a-zA-Z]:|(?:\\\\|//)[^\\/]+[\\/][^\\/]+)? )
- (.*)
- }xs;
- $volume = $1;
- $directory = $2;
- }
- else {
- $path =~
- m{^ ( (?: [a-zA-Z]: |
- (?:\\\\|//)[^\\/]+[\\/][^\\/]+
- )?
- )
- ( (?:.*[\\\\/](?:\.\.?\Z(?!\n))?)? )
- (.*)
- }xs;
- $volume = $1;
- $directory = $2;
- $file = $3;
- }
-
- return ($volume,$directory,$file);
-}
-
-
-=item splitdir
-
-The opposite of L</catdir()>.
-
- @dirs = File::Spec->splitdir( $directories );
-
-$directories must be only the directory portion of the path on systems
-that have the concept of a volume or that have path syntax that differentiates
-files from directories.
-
-Unlike just splitting the directories on the separator, leading empty and
-trailing directory entries can be returned, because these are significant
-on some OSs. So,
-
- File::Spec->splitdir( "/a/b/c" );
-
-Yields:
-
- ( '', 'a', 'b', '', 'c', '' )
-
-=cut
-
-sub splitdir {
- my ($self,$directories) = @_ ;
- #
- # split() likes to forget about trailing null fields, so here we
- # check to be sure that there will not be any before handling the
- # simple case.
- #
- if ( $directories !~ m|[\\/]\Z(?!\n)| ) {
- return split( m|[\\/]|, $directories );
- }
- else {
- #
- # since there was a trailing separator, add a file name to the end,
- # then do the split, then replace it with ''.
- #
- my( @directories )= split( m|[\\/]|, "${directories}dummy" ) ;
- $directories[ $#directories ]= '' ;
- return @directories ;
- }
-}
-
-
-=item catpath
-
-Takes volume, directory and file portions and returns an entire path. Under
-Unix, $volume is ignored, and this is just like catfile(). On other OSs,
-the $volume become significant.
-
-=cut
-
-sub catpath {
- my ($self,$volume,$directory,$file) = @_;
-
- # If it's UNC, make sure the glue separator is there, reusing
- # whatever separator is first in the $volume
- $volume .= $1
- if ( $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s &&
- $directory =~ m@^[^\\/]@s
- ) ;
-
- $volume .= $directory ;
-
- # If the volume is not just A:, make sure the glue separator is
- # there, reusing whatever separator is first in the $volume if possible.
- if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s &&
- $volume =~ m@[^\\/]\Z(?!\n)@ &&
- $file =~ m@[^\\/]@
- ) {
- $volume =~ m@([\\/])@ ;
- my $sep = $1 ? $1 : '\\' ;
- $volume .= $sep ;
- }
-
- $volume .= $file ;
-
- return $volume ;
-}
-
-
-sub abs2rel {
- my($self,$path,$base) = @_;
-
- # Clean up $path
- if ( ! $self->file_name_is_absolute( $path ) ) {
- $path = $self->rel2abs( $path ) ;
- }
- else {
- $path = $self->canonpath( $path ) ;
- }
-
- # Figure out the effective $base and clean it up.
- if ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- elsif ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- # Split up paths
- my ( $path_volume, $path_directories, $path_file ) =
- $self->splitpath( $path, 1 ) ;
-
- my $base_directories = ($self->splitpath( $base, 1 ))[1] ;
-
- # Now, remove all leading components that are the same
- my @pathchunks = $self->splitdir( $path_directories );
- my @basechunks = $self->splitdir( $base_directories );
-
- while ( @pathchunks &&
- @basechunks &&
- lc( $pathchunks[0] ) eq lc( $basechunks[0] )
- ) {
- shift @pathchunks ;
- shift @basechunks ;
- }
-
- # No need to catdir, we know these are well formed.
- $path_directories = CORE::join( '\\', @pathchunks );
- $base_directories = CORE::join( '\\', @basechunks );
-
- # $base_directories now contains the directories the resulting relative
- # path must ascend out of before it can descend to $path_directory. So,
- # replace all names with $parentDir
-
- #FA Need to replace between backslashes...
- $base_directories =~ s|[^\\]+|..|g ;
-
- # Glue the two together, using a separator if necessary, and preventing an
- # empty result.
-
- #FA Must check that new directories are not empty.
- if ( $path_directories ne '' && $base_directories ne '' ) {
- $path_directories = "$base_directories\\$path_directories" ;
- } else {
- $path_directories = "$base_directories$path_directories" ;
- }
-
- # It makes no sense to add a relative path to a UNC volume
- $path_volume = '' unless $path_volume =~ m{^[A-Z]:}is ;
-
- return $self->canonpath(
- $self->catpath($path_volume, $path_directories, $path_file )
- ) ;
-}
-
-
-sub rel2abs {
- my ($self,$path,$base ) = @_;
-
- if ( ! $self->file_name_is_absolute( $path ) ) {
-
- if ( !defined( $base ) || $base eq '' ) {
- $base = cwd() ;
- }
- elsif ( ! $self->file_name_is_absolute( $base ) ) {
- $base = $self->rel2abs( $base ) ;
- }
- else {
- $base = $self->canonpath( $base ) ;
- }
-
- my ( $path_directories, $path_file ) =
- ($self->splitpath( $path, 1 ))[1,2] ;
-
- my ( $base_volume, $base_directories ) =
- $self->splitpath( $base, 1 ) ;
-
- $path = $self->catpath(
- $base_volume,
- $self->catdir( $base_directories, $path_directories ),
- $path_file
- ) ;
- }
-
- return $self->canonpath( $path ) ;
-}
-
-=back
-
-=head1 SEE ALSO
-
-L<File::Spec>
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/File/Temp.pm b/contrib/perl5/lib/File/Temp.pm
deleted file mode 100644
index b686682..0000000
--- a/contrib/perl5/lib/File/Temp.pm
+++ /dev/null
@@ -1,1863 +0,0 @@
-package File::Temp;
-
-=head1 NAME
-
-File::Temp - return name and handle of a temporary file safely
-
-=begin __INTERNALS
-
-=head1 PORTABILITY
-
-This module is designed to be portable across operating systems
-and it currently supports Unix, VMS, DOS, OS/2 and Windows. When
-porting to a new OS there are generally three main issues
-that have to be solved:
-
-=over 4
-
-=item *
-
-Can the OS unlink an open file? If it can not then the
-C<_can_unlink_opened_file> method should be modified.
-
-=item *
-
-Are the return values from C<stat> reliable? By default all the
-return values from C<stat> are compared when unlinking a temporary
-file using the filename and the handle. Operating systems other than
-unix do not always have valid entries in all fields. If C<unlink0> fails
-then the C<stat> comparison should be modified accordingly.
-
-=item *
-
-Security. Systems that can not support a test for the sticky bit
-on a directory can not use the MEDIUM and HIGH security tests.
-The C<_can_do_level> method should be modified accordingly.
-
-=back
-
-=end __INTERNALS
-
-=head1 SYNOPSIS
-
- use File::Temp qw/ tempfile tempdir /;
-
- $dir = tempdir( CLEANUP => 1 );
- ($fh, $filename) = tempfile( DIR => $dir );
-
- ($fh, $filename) = tempfile( $template, DIR => $dir);
- ($fh, $filename) = tempfile( $template, SUFFIX => '.dat');
-
- $fh = tempfile();
-
-MkTemp family:
-
- use File::Temp qw/ :mktemp /;
-
- ($fh, $file) = mkstemp( "tmpfileXXXXX" );
- ($fh, $file) = mkstemps( "tmpfileXXXXXX", $suffix);
-
- $tmpdir = mkdtemp( $template );
-
- $unopened_file = mktemp( $template );
-
-POSIX functions:
-
- use File::Temp qw/ :POSIX /;
-
- $file = tmpnam();
- $fh = tmpfile();
-
- ($fh, $file) = tmpnam();
- ($fh, $file) = tmpfile();
-
-
-Compatibility functions:
-
- $unopened_file = File::Temp::tempnam( $dir, $pfx );
-
-=begin later
-
-Objects (NOT YET IMPLEMENTED):
-
- require File::Temp;
-
- $fh = new File::Temp($template);
- $fname = $fh->filename;
-
-=end later
-
-=head1 DESCRIPTION
-
-C<File::Temp> can be used to create and open temporary files in a safe way.
-The tempfile() function can be used to return the name and the open
-filehandle of a temporary file. The tempdir() function can
-be used to create a temporary directory.
-
-The security aspect of temporary file creation is emphasized such that
-a filehandle and filename are returned together. This helps guarantee
-that a race condition can not occur where the temporary file is
-created by another process between checking for the existence of the
-file and its opening. Additional security levels are provided to
-check, for example, that the sticky bit is set on world writable
-directories. See L<"safe_level"> for more information.
-
-For compatibility with popular C library functions, Perl implementations of
-the mkstemp() family of functions are provided. These are, mkstemp(),
-mkstemps(), mkdtemp() and mktemp().
-
-Additionally, implementations of the standard L<POSIX|POSIX>
-tmpnam() and tmpfile() functions are provided if required.
-
-Implementations of mktemp(), tmpnam(), and tempnam() are provided,
-but should be used with caution since they return only a filename
-that was valid when function was called, so cannot guarantee
-that the file will not exist by the time the caller opens the filename.
-
-=cut
-
-# 5.6.0 gives us S_IWOTH, S_IWGRP, our and auto-vivifying filehandls
-# People would like a version on 5.005 so give them what they want :-)
-use 5.005;
-use strict;
-use Carp;
-use File::Spec 0.8;
-use File::Path qw/ rmtree /;
-use Fcntl 1.03;
-use Errno;
-require VMS::Stdio if $^O eq 'VMS';
-
-# Need the Symbol package if we are running older perl
-require Symbol if $] < 5.006;
-
-
-# use 'our' on v5.6.0
-use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS $DEBUG);
-
-$DEBUG = 0;
-
-# We are exporting functions
-
-use base qw/Exporter/;
-
-# Export list - to allow fine tuning of export table
-
-@EXPORT_OK = qw{
- tempfile
- tempdir
- tmpnam
- tmpfile
- mktemp
- mkstemp
- mkstemps
- mkdtemp
- unlink0
- };
-
-# Groups of functions for export
-
-%EXPORT_TAGS = (
- 'POSIX' => [qw/ tmpnam tmpfile /],
- 'mktemp' => [qw/ mktemp mkstemp mkstemps mkdtemp/],
- );
-
-# add contents of these tags to @EXPORT
-Exporter::export_tags('POSIX','mktemp');
-
-# Version number
-
-$VERSION = '0.12';
-
-# This is a list of characters that can be used in random filenames
-
-my @CHARS = (qw/ 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
- 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
- 0 1 2 3 4 5 6 7 8 9 _
- /);
-
-# Maximum number of tries to make a temp file before failing
-
-use constant MAX_TRIES => 10;
-
-# Minimum number of X characters that should be in a template
-use constant MINX => 4;
-
-# Default template when no template supplied
-
-use constant TEMPXXX => 'X' x 10;
-
-# Constants for the security level
-
-use constant STANDARD => 0;
-use constant MEDIUM => 1;
-use constant HIGH => 2;
-
-# OPENFLAGS. If we defined the flag to use with Sysopen here this gives
-# us an optimisation when many temporary files are requested
-
-my $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR;
-
-for my $oflag (qw/ FOLLOW BINARY LARGEFILE EXLOCK NOINHERIT /) {
- my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
- no strict 'refs';
- $OPENFLAGS |= $bit if eval {
- # Make sure that redefined die handlers do not cause problems
- # eg CGI::Carp
- local $SIG{__DIE__} = sub {};
- local $SIG{__WARN__} = sub {};
- $bit = &$func();
- 1;
- };
-}
-
-# On some systems the O_TEMPORARY flag can be used to tell the OS
-# to automatically remove the file when it is closed. This is fine
-# in most cases but not if tempfile is called with UNLINK=>0 and
-# the filename is requested -- in the case where the filename is to
-# be passed to another routine. This happens on windows. We overcome
-# this by using a second open flags variable
-
-my $OPENTEMPFLAGS = $OPENFLAGS;
-for my $oflag (qw/ TEMPORARY /) {
- my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
- no strict 'refs';
- $OPENTEMPFLAGS |= $bit if eval {
- # Make sure that redefined die handlers do not cause problems
- # eg CGI::Carp
- local $SIG{__DIE__} = sub {};
- local $SIG{__WARN__} = sub {};
- $bit = &$func();
- 1;
- };
-}
-
-# INTERNAL ROUTINES - not to be used outside of package
-
-# Generic routine for getting a temporary filename
-# modelled on OpenBSD _gettemp() in mktemp.c
-
-# The template must contain X's that are to be replaced
-# with the random values
-
-# Arguments:
-
-# TEMPLATE - string containing the XXXXX's that is converted
-# to a random filename and opened if required
-
-# Optionally, a hash can also be supplied containing specific options
-# "open" => if true open the temp file, else just return the name
-# default is 0
-# "mkdir"=> if true, we are creating a temp directory rather than tempfile
-# default is 0
-# "suffixlen" => number of characters at end of PATH to be ignored.
-# default is 0.
-# "unlink_on_close" => indicates that, if possible, the OS should remove
-# the file as soon as it is closed. Usually indicates
-# use of the O_TEMPORARY flag to sysopen.
-# Usually irrelevant on unix
-
-# Optionally a reference to a scalar can be passed into the function
-# On error this will be used to store the reason for the error
-# "ErrStr" => \$errstr
-
-# "open" and "mkdir" can not both be true
-# "unlink_on_close" is not used when "mkdir" is true.
-
-# The default options are equivalent to mktemp().
-
-# Returns:
-# filehandle - open file handle (if called with doopen=1, else undef)
-# temp name - name of the temp file or directory
-
-# For example:
-# ($fh, $name) = _gettemp($template, "open" => 1);
-
-# for the current version, failures are associated with
-# stored in an error string and returned to give the reason whilst debugging
-# This routine is not called by any external function
-sub _gettemp {
-
- croak 'Usage: ($fh, $name) = _gettemp($template, OPTIONS);'
- unless scalar(@_) >= 1;
-
- # the internal error string - expect it to be overridden
- # Need this in case the caller decides not to supply us a value
- # need an anonymous scalar
- my $tempErrStr;
-
- # Default options
- my %options = (
- "open" => 0,
- "mkdir" => 0,
- "suffixlen" => 0,
- "unlink_on_close" => 0,
- "ErrStr" => \$tempErrStr,
- );
-
- # Read the template
- my $template = shift;
- if (ref($template)) {
- # Use a warning here since we have not yet merged ErrStr
- carp "File::Temp::_gettemp: template must not be a reference";
- return ();
- }
-
- # Check that the number of entries on stack are even
- if (scalar(@_) % 2 != 0) {
- # Use a warning here since we have not yet merged ErrStr
- carp "File::Temp::_gettemp: Must have even number of options";
- return ();
- }
-
- # Read the options and merge with defaults
- %options = (%options, @_) if @_;
-
- # Make sure the error string is set to undef
- ${$options{ErrStr}} = undef;
-
- # Can not open the file and make a directory in a single call
- if ($options{"open"} && $options{"mkdir"}) {
- ${$options{ErrStr}} = "doopen and domkdir can not both be true\n";
- return ();
- }
-
- # Find the start of the end of the Xs (position of last X)
- # Substr starts from 0
- my $start = length($template) - 1 - $options{"suffixlen"};
-
- # Check that we have at least MINX x X (eg 'XXXX") at the end of the string
- # (taking suffixlen into account). Any fewer is insecure.
-
- # Do it using substr - no reason to use a pattern match since
- # we know where we are looking and what we are looking for
-
- if (substr($template, $start - MINX + 1, MINX) ne 'X' x MINX) {
- ${$options{ErrStr}} = "The template must contain at least ".
- MINX . " 'X' characters\n";
- return ();
- }
-
- # Replace all the X at the end of the substring with a
- # random character or just all the XX at the end of a full string.
- # Do it as an if, since the suffix adjusts which section to replace
- # and suffixlen=0 returns nothing if used in the substr directly
- # and generate a full path from the template
-
- my $path = _replace_XX($template, $options{"suffixlen"});
-
-
- # Split the path into constituent parts - eventually we need to check
- # whether the directory exists
- # We need to know whether we are making a temp directory
- # or a tempfile
-
- my ($volume, $directories, $file);
- my $parent; # parent directory
- if ($options{"mkdir"}) {
- # There is no filename at the end
- ($volume, $directories, $file) = File::Spec->splitpath( $path, 1);
-
- # The parent is then $directories without the last directory
- # Split the directory and put it back together again
- my @dirs = File::Spec->splitdir($directories);
-
- # If @dirs only has one entry that means we are in the current
- # directory
- if ($#dirs == 0) {
- $parent = File::Spec->curdir;
- } else {
-
- if ($^O eq 'VMS') { # need volume to avoid relative dir spec
- $parent = File::Spec->catdir($volume, @dirs[0..$#dirs-1]);
- $parent = 'sys$disk:[]' if $parent eq '';
- } else {
-
- # Put it back together without the last one
- $parent = File::Spec->catdir(@dirs[0..$#dirs-1]);
-
- # ...and attach the volume (no filename)
- $parent = File::Spec->catpath($volume, $parent, '');
- }
-
- }
-
- } else {
-
- # Get rid of the last filename (use File::Basename for this?)
- ($volume, $directories, $file) = File::Spec->splitpath( $path );
-
- # Join up without the file part
- $parent = File::Spec->catpath($volume,$directories,'');
-
- # If $parent is empty replace with curdir
- $parent = File::Spec->curdir
- unless $directories ne '';
-
- }
-
- # Check that the parent directories exist
- # Do this even for the case where we are simply returning a name
- # not a file -- no point returning a name that includes a directory
- # that does not exist or is not writable
-
- unless (-d $parent) {
- ${$options{ErrStr}} = "Parent directory ($parent) is not a directory";
- return ();
- }
- unless (-w _) {
- ${$options{ErrStr}} = "Parent directory ($parent) is not writable\n";
- return ();
- }
-
-
- # Check the stickiness of the directory and chown giveaway if required
- # If the directory is world writable the sticky bit
- # must be set
-
- if (File::Temp->safe_level == MEDIUM) {
- my $safeerr;
- unless (_is_safe($parent,\$safeerr)) {
- ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
- return ();
- }
- } elsif (File::Temp->safe_level == HIGH) {
- my $safeerr;
- unless (_is_verysafe($parent, \$safeerr)) {
- ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
- return ();
- }
- }
-
-
- # Now try MAX_TRIES time to open the file
- for (my $i = 0; $i < MAX_TRIES; $i++) {
-
- # Try to open the file if requested
- if ($options{"open"}) {
- my $fh;
-
- # If we are running before perl5.6.0 we can not auto-vivify
- if ($] < 5.006) {
- $fh = &Symbol::gensym;
- }
-
- # Try to make sure this will be marked close-on-exec
- # XXX: Win32 doesn't respect this, nor the proper fcntl,
- # but may have O_NOINHERIT. This may or may not be in Fcntl.
- local $^F = 2;
-
- # Store callers umask
- my $umask = umask();
-
- # Set a known umask
- umask(066);
-
- # Attempt to open the file
- my $open_success = undef;
- if ( $^O eq 'VMS' and $options{"unlink_on_close"} ) {
- # make it auto delete on close by setting FAB$V_DLT bit
- $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, 0600, 'fop=dlt');
- $open_success = $fh;
- } else {
- my $flags = ( $options{"unlink_on_close"} ?
- $OPENTEMPFLAGS :
- $OPENFLAGS );
- $open_success = sysopen($fh, $path, $flags, 0600);
- }
- if ( $open_success ) {
-
- # Reset umask
- umask($umask);
-
- # Opened successfully - return file handle and name
- return ($fh, $path);
-
- } else {
- # Reset umask
- umask($umask);
-
- # Error opening file - abort with error
- # if the reason was anything but EEXIST
- unless ($!{EEXIST}) {
- ${$options{ErrStr}} = "Could not create temp file $path: $!";
- return ();
- }
-
- # Loop round for another try
-
- }
- } elsif ($options{"mkdir"}) {
-
- # Store callers umask
- my $umask = umask();
-
- # Set a known umask
- umask(066);
-
- # Open the temp directory
- if (mkdir( $path, 0700)) {
- # created okay
- # Reset umask
- umask($umask);
-
- return undef, $path;
- } else {
-
- # Reset umask
- umask($umask);
-
- # Abort with error if the reason for failure was anything
- # except EEXIST
- unless ($!{EEXIST}) {
- ${$options{ErrStr}} = "Could not create directory $path: $!";
- return ();
- }
-
- # Loop round for another try
-
- }
-
- } else {
-
- # Return true if the file can not be found
- # Directory has been checked previously
-
- return (undef, $path) unless -e $path;
-
- # Try again until MAX_TRIES
-
- }
-
- # Did not successfully open the tempfile/dir
- # so try again with a different set of random letters
- # No point in trying to increment unless we have only
- # 1 X say and the randomness could come up with the same
- # file MAX_TRIES in a row.
-
- # Store current attempt - in principal this implies that the
- # 3rd time around the open attempt that the first temp file
- # name could be generated again. Probably should store each
- # attempt and make sure that none are repeated
-
- my $original = $path;
- my $counter = 0; # Stop infinite loop
- my $MAX_GUESS = 50;
-
- do {
-
- # Generate new name from original template
- $path = _replace_XX($template, $options{"suffixlen"});
-
- $counter++;
-
- } until ($path ne $original || $counter > $MAX_GUESS);
-
- # Check for out of control looping
- if ($counter > $MAX_GUESS) {
- ${$options{ErrStr}} = "Tried to get a new temp name different to the previous value $MAX_GUESS times.\nSomething wrong with template?? ($template)";
- return ();
- }
-
- }
-
- # If we get here, we have run out of tries
- ${ $options{ErrStr} } = "Have exceeded the maximum number of attempts ("
- . MAX_TRIES . ") to open temp file/dir";
-
- return ();
-
-}
-
-# Internal routine to return a random character from the
-# character list. Does not do an srand() since rand()
-# will do one automatically
-
-# No arguments. Return value is the random character
-
-# No longer called since _replace_XX runs a few percent faster if
-# I inline the code. This is important if we are creating thousands of
-# temporary files.
-
-sub _randchar {
-
- $CHARS[ int( rand( $#CHARS ) ) ];
-
-}
-
-# Internal routine to replace the XXXX... with random characters
-# This has to be done by _gettemp() every time it fails to
-# open a temp file/dir
-
-# Arguments: $template (the template with XXX),
-# $ignore (number of characters at end to ignore)
-
-# Returns: modified template
-
-sub _replace_XX {
-
- croak 'Usage: _replace_XX($template, $ignore)'
- unless scalar(@_) == 2;
-
- my ($path, $ignore) = @_;
-
- # Do it as an if, since the suffix adjusts which section to replace
- # and suffixlen=0 returns nothing if used in the substr directly
- # Alternatively, could simply set $ignore to length($path)-1
- # Don't want to always use substr when not required though.
-
- if ($ignore) {
- substr($path, 0, - $ignore) =~ s/X(?=X*\z)/$CHARS[ int( rand( $#CHARS ) ) ]/ge;
- } else {
- $path =~ s/X(?=X*\z)/$CHARS[ int( rand( $#CHARS ) ) ]/ge;
- }
-
- return $path;
-}
-
-# internal routine to check to see if the directory is safe
-# First checks to see if the directory is not owned by the
-# current user or root. Then checks to see if anyone else
-# can write to the directory and if so, checks to see if
-# it has the sticky bit set
-
-# Will not work on systems that do not support sticky bit
-
-#Args: directory path to check
-# Optionally: reference to scalar to contain error message
-# Returns true if the path is safe and false otherwise.
-# Returns undef if can not even run stat() on the path
-
-# This routine based on version written by Tom Christiansen
-
-# Presumably, by the time we actually attempt to create the
-# file or directory in this directory, it may not be safe
-# anymore... Have to run _is_safe directly after the open.
-
-sub _is_safe {
-
- my $path = shift;
- my $err_ref = shift;
-
- # Stat path
- my @info = stat($path);
- unless (scalar(@info)) {
- $$err_ref = "stat(path) returned no values";
- return 0;
- };
- return 1 if $^O eq 'VMS'; # owner delete control at file level
-
- # Check to see whether owner is neither superuser (or a system uid) nor me
- # Use the real uid from the $< variable
- # UID is in [4]
- if ($info[4] > File::Temp->top_system_uid() && $info[4] != $<) {
-
- Carp::cluck(sprintf "uid=$info[4] topuid=%s \$<=$< path='$path'",
- File::Temp->top_system_uid());
-
- $$err_ref = "Directory owned neither by root nor the current user"
- if ref($err_ref);
- return 0;
- }
-
- # check whether group or other can write file
- # use 066 to detect either reading or writing
- # use 022 to check writability
- # Do it with S_IWOTH and S_IWGRP for portability (maybe)
- # mode is in info[2]
- if (($info[2] & &Fcntl::S_IWGRP) || # Is group writable?
- ($info[2] & &Fcntl::S_IWOTH) ) { # Is world writable?
- # Must be a directory
- unless (-d _) {
- $$err_ref = "Path ($path) is not a directory"
- if ref($err_ref);
- return 0;
- }
- # Must have sticky bit set
- unless (-k _) {
- $$err_ref = "Sticky bit not set on $path when dir is group|world writable"
- if ref($err_ref);
- return 0;
- }
- }
-
- return 1;
-}
-
-# Internal routine to check whether a directory is safe
-# for temp files. Safer than _is_safe since it checks for
-# the possibility of chown giveaway and if that is a possibility
-# checks each directory in the path to see if it is safe (with _is_safe)
-
-# If _PC_CHOWN_RESTRICTED is not set, does the full test of each
-# directory anyway.
-
-# Takes optional second arg as scalar ref to error reason
-
-sub _is_verysafe {
-
- # Need POSIX - but only want to bother if really necessary due to overhead
- require POSIX;
-
- my $path = shift;
- print "_is_verysafe testing $path\n" if $DEBUG;
- return 1 if $^O eq 'VMS'; # owner delete control at file level
-
- my $err_ref = shift;
-
- # Should Get the value of _PC_CHOWN_RESTRICTED if it is defined
- # and If it is not there do the extensive test
- my $chown_restricted;
- $chown_restricted = &POSIX::_PC_CHOWN_RESTRICTED()
- if eval { &POSIX::_PC_CHOWN_RESTRICTED(); 1};
-
- # If chown_resticted is set to some value we should test it
- if (defined $chown_restricted) {
-
- # Return if the current directory is safe
- return _is_safe($path,$err_ref) if POSIX::sysconf( $chown_restricted );
-
- }
-
- # To reach this point either, the _PC_CHOWN_RESTRICTED symbol
- # was not avialable or the symbol was there but chown giveaway
- # is allowed. Either way, we now have to test the entire tree for
- # safety.
-
- # Convert path to an absolute directory if required
- unless (File::Spec->file_name_is_absolute($path)) {
- $path = File::Spec->rel2abs($path);
- }
-
- # Split directory into components - assume no file
- my ($volume, $directories, undef) = File::Spec->splitpath( $path, 1);
-
- # Slightly less efficient than having a a function in File::Spec
- # to chop off the end of a directory or even a function that
- # can handle ../ in a directory tree
- # Sometimes splitdir() returns a blank at the end
- # so we will probably check the bottom directory twice in some cases
- my @dirs = File::Spec->splitdir($directories);
-
- # Concatenate one less directory each time around
- foreach my $pos (0.. $#dirs) {
- # Get a directory name
- my $dir = File::Spec->catpath($volume,
- File::Spec->catdir(@dirs[0.. $#dirs - $pos]),
- ''
- );
-
- print "TESTING DIR $dir\n" if $DEBUG;
-
- # Check the directory
- return 0 unless _is_safe($dir,$err_ref);
-
- }
-
- return 1;
-}
-
-
-
-# internal routine to determine whether unlink works on this
-# platform for files that are currently open.
-# Returns true if we can, false otherwise.
-
-# Currently WinNT, OS/2 and VMS can not unlink an opened file
-# On VMS this is because the O_EXCL flag is used to open the
-# temporary file. Currently I do not know enough about the issues
-# on VMS to decide whether O_EXCL is a requirement.
-
-sub _can_unlink_opened_file {
-
- if ($^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'VMS' || $^O eq 'dos') {
- return 0;
- } else {
- return 1;
- }
-
-}
-
-# internal routine to decide which security levels are allowed
-# see safe_level() for more information on this
-
-# Controls whether the supplied security level is allowed
-
-# $cando = _can_do_level( $level )
-
-sub _can_do_level {
-
- # Get security level
- my $level = shift;
-
- # Always have to be able to do STANDARD
- return 1 if $level == STANDARD;
-
- # Currently, the systems that can do HIGH or MEDIUM are identical
- if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin' || $^O eq 'dos') {
- return 0;
- } else {
- return 1;
- }
-
-}
-
-# This routine sets up a deferred unlinking of a specified
-# filename and filehandle. It is used in the following cases:
-# - Called by unlink0 if an opened file can not be unlinked
-# - Called by tempfile() if files are to be removed on shutdown
-# - Called by tempdir() if directories are to be removed on shutdown
-
-# Arguments:
-# _deferred_unlink( $fh, $fname, $isdir );
-#
-# - filehandle (so that it can be expclicitly closed if open
-# - filename (the thing we want to remove)
-# - isdir (flag to indicate that we are being given a directory)
-# [and hence no filehandle]
-
-# Status is not referred to since all the magic is done with an END block
-
-{
- # Will set up two lexical variables to contain all the files to be
- # removed. One array for files, another for directories
- # They will only exist in this block
- # This means we only have to set up a single END block to remove all files
- # @files_to_unlink contains an array ref with the filehandle and filename
- my (@files_to_unlink, @dirs_to_unlink);
-
- # Set up an end block to use these arrays
- END {
- # Files
- foreach my $file (@files_to_unlink) {
- # close the filehandle without checking its state
- # in order to make real sure that this is closed
- # if its already closed then I dont care about the answer
- # probably a better way to do this
- close($file->[0]); # file handle is [0]
-
- if (-f $file->[1]) { # file name is [1]
- unlink $file->[1] or warn "Error removing ".$file->[1];
- }
- }
- # Dirs
- foreach my $dir (@dirs_to_unlink) {
- if (-d $dir) {
- rmtree($dir, $DEBUG, 1);
- }
- }
-
- }
-
- # This is the sub called to register a file for deferred unlinking
- # This could simply store the input parameters and defer everything
- # until the END block. For now we do a bit of checking at this
- # point in order to make sure that (1) we have a file/dir to delete
- # and (2) we have been called with the correct arguments.
- sub _deferred_unlink {
-
- croak 'Usage: _deferred_unlink($fh, $fname, $isdir)'
- unless scalar(@_) == 3;
-
- my ($fh, $fname, $isdir) = @_;
-
- warn "Setting up deferred removal of $fname\n"
- if $DEBUG;
-
- # If we have a directory, check that it is a directory
- if ($isdir) {
-
- if (-d $fname) {
-
- # Directory exists so store it
- # first on VMS turn []foo into [.foo] for rmtree
- $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS';
- push (@dirs_to_unlink, $fname);
-
- } else {
- carp "Request to remove directory $fname could not be completed since it does not exist!\n" if $^W;
- }
-
- } else {
-
- if (-f $fname) {
-
- # file exists so store handle and name for later removal
- push(@files_to_unlink, [$fh, $fname]);
-
- } else {
- carp "Request to remove file $fname could not be completed since it is not there!\n" if $^W;
- }
-
- }
-
- }
-
-
-}
-
-=head1 FUNCTIONS
-
-This section describes the recommended interface for generating
-temporary files and directories.
-
-=over 4
-
-=item B<tempfile>
-
-This is the basic function to generate temporary files.
-The behaviour of the file can be changed using various options:
-
- ($fh, $filename) = tempfile();
-
-Create a temporary file in the directory specified for temporary
-files, as specified by the tmpdir() function in L<File::Spec>.
-
- ($fh, $filename) = tempfile($template);
-
-Create a temporary file in the current directory using the supplied
-template. Trailing `X' characters are replaced with random letters to
-generate the filename. At least four `X' characters must be present
-in the template.
-
- ($fh, $filename) = tempfile($template, SUFFIX => $suffix)
-
-Same as previously, except that a suffix is added to the template
-after the `X' translation. Useful for ensuring that a temporary
-filename has a particular extension when needed by other applications.
-But see the WARNING at the end.
-
- ($fh, $filename) = tempfile($template, DIR => $dir);
-
-Translates the template as before except that a directory name
-is specified.
-
- ($fh, $filename) = tempfile($template, UNLINK => 1);
-
-Return the filename and filehandle as before except that the file is
-automatically removed when the program exits. Default is for the file
-to be removed if a file handle is requested and to be kept if the
-filename is requested. In a scalar context (where no filename is
-returned) the file is always deleted either on exit or when it is closed.
-
-If the template is not specified, a template is always
-automatically generated. This temporary file is placed in tmpdir()
-(L<File::Spec>) unless a directory is specified explicitly with the
-DIR option.
-
- $fh = tempfile( $template, DIR => $dir );
-
-If called in scalar context, only the filehandle is returned
-and the file will automatically be deleted when closed (see
-the description of tmpfile() elsewhere in this document).
-This is the preferred mode of operation, as if you only
-have a filehandle, you can never create a race condition
-by fumbling with the filename. On systems that can not unlink
-an open file or can not mark a file as temporary when it is opened
-(for example, Windows NT uses the C<O_TEMPORARY> flag))
-the file is marked for deletion when the program ends (equivalent
-to setting UNLINK to 1). The C<UNLINK> flag is ignored if present.
-
- (undef, $filename) = tempfile($template, OPEN => 0);
-
-This will return the filename based on the template but
-will not open this file. Cannot be used in conjunction with
-UNLINK set to true. Default is to always open the file
-to protect from possible race conditions. A warning is issued
-if warnings are turned on. Consider using the tmpnam()
-and mktemp() functions described elsewhere in this document
-if opening the file is not required.
-
-Options can be combined as required.
-
-=cut
-
-sub tempfile {
-
- # Can not check for argument count since we can have any
- # number of args
-
- # Default options
- my %options = (
- "DIR" => undef, # Directory prefix
- "SUFFIX" => '', # Template suffix
- "UNLINK" => 0, # Do not unlink file on exit
- "OPEN" => 1, # Open file
- );
-
- # Check to see whether we have an odd or even number of arguments
- my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef);
-
- # Read the options and merge with defaults
- %options = (%options, @_) if @_;
-
- # First decision is whether or not to open the file
- if (! $options{"OPEN"}) {
-
- warn "tempfile(): temporary filename requested but not opened.\nPossibly unsafe, consider using tempfile() with OPEN set to true\n"
- if $^W;
-
- }
-
- if ($options{"DIR"} and $^O eq 'VMS') {
-
- # on VMS turn []foo into [.foo] for concatenation
- $options{"DIR"} = VMS::Filespec::vmspath($options{"DIR"});
- }
-
- # Construct the template
-
- # Have a choice of trying to work around the mkstemp/mktemp/tmpnam etc
- # functions or simply constructing a template and using _gettemp()
- # explicitly. Go for the latter
-
- # First generate a template if not defined and prefix the directory
- # If no template must prefix the temp directory
- if (defined $template) {
- if ($options{"DIR"}) {
-
- $template = File::Spec->catfile($options{"DIR"}, $template);
-
- }
-
- } else {
-
- if ($options{"DIR"}) {
-
- $template = File::Spec->catfile($options{"DIR"}, TEMPXXX);
-
- } else {
-
- $template = File::Spec->catfile(File::Spec->tmpdir, TEMPXXX);
-
- }
-
- }
-
- # Now add a suffix
- $template .= $options{"SUFFIX"};
-
- # Determine whether we should tell _gettemp to unlink the file
- # On unix this is irrelevant and can be worked out after the file is
- # opened (simply by unlinking the open filehandle). On Windows or VMS
- # we have to indicate temporary-ness when we open the file. In general
- # we only want a true temporary file if we are returning just the
- # filehandle - if the user wants the filename they probably do not
- # want the file to disappear as soon as they close it.
- # For this reason, tie unlink_on_close to the return context regardless
- # of OS.
- my $unlink_on_close = ( wantarray ? 0 : 1);
-
- # Create the file
- my ($fh, $path, $errstr);
- croak "Error in tempfile() using $template: $errstr"
- unless (($fh, $path) = _gettemp($template,
- "open" => $options{'OPEN'},
- "mkdir"=> 0 ,
- "unlink_on_close" => $unlink_on_close,
- "suffixlen" => length($options{'SUFFIX'}),
- "ErrStr" => \$errstr,
- ) );
-
- # Set up an exit handler that can do whatever is right for the
- # system. This removes files at exit when requested explicitly or when
- # system is asked to unlink_on_close but is unable to do so because
- # of OS limitations.
- # The latter should be achieved by using a tied filehandle.
- # Do not check return status since this is all done with END blocks.
- _deferred_unlink($fh, $path, 0) if $options{"UNLINK"};
-
- # Return
- if (wantarray()) {
-
- if ($options{'OPEN'}) {
- return ($fh, $path);
- } else {
- return (undef, $path);
- }
-
- } else {
-
- # Unlink the file. It is up to unlink0 to decide what to do with
- # this (whether to unlink now or to defer until later)
- unlink0($fh, $path) or croak "Error unlinking file $path using unlink0";
-
- # Return just the filehandle.
- return $fh;
- }
-
-
-}
-
-=item B<tempdir>
-
-This is the recommended interface for creation of temporary directories.
-The behaviour of the function depends on the arguments:
-
- $tempdir = tempdir();
-
-Create a directory in tmpdir() (see L<File::Spec|File::Spec>).
-
- $tempdir = tempdir( $template );
-
-Create a directory from the supplied template. This template is
-similar to that described for tempfile(). `X' characters at the end
-of the template are replaced with random letters to construct the
-directory name. At least four `X' characters must be in the template.
-
- $tempdir = tempdir ( DIR => $dir );
-
-Specifies the directory to use for the temporary directory.
-The temporary directory name is derived from an internal template.
-
- $tempdir = tempdir ( $template, DIR => $dir );
-
-Prepend the supplied directory name to the template. The template
-should not include parent directory specifications itself. Any parent
-directory specifications are removed from the template before
-prepending the supplied directory.
-
- $tempdir = tempdir ( $template, TMPDIR => 1 );
-
-Using the supplied template, creat the temporary directory in
-a standard location for temporary files. Equivalent to doing
-
- $tempdir = tempdir ( $template, DIR => File::Spec->tmpdir);
-
-but shorter. Parent directory specifications are stripped from the
-template itself. The C<TMPDIR> option is ignored if C<DIR> is set
-explicitly. Additionally, C<TMPDIR> is implied if neither a template
-nor a directory are supplied.
-
- $tempdir = tempdir( $template, CLEANUP => 1);
-
-Create a temporary directory using the supplied template, but
-attempt to remove it (and all files inside it) when the program
-exits. Note that an attempt will be made to remove all files from
-the directory even if they were not created by this module (otherwise
-why ask to clean it up?). The directory removal is made with
-the rmtree() function from the L<File::Path|File::Path> module.
-Of course, if the template is not specified, the temporary directory
-will be created in tmpdir() and will also be removed at program exit.
-
-=cut
-
-# '
-
-sub tempdir {
-
- # Can not check for argument count since we can have any
- # number of args
-
- # Default options
- my %options = (
- "CLEANUP" => 0, # Remove directory on exit
- "DIR" => '', # Root directory
- "TMPDIR" => 0, # Use tempdir with template
- );
-
- # Check to see whether we have an odd or even number of arguments
- my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef );
-
- # Read the options and merge with defaults
- %options = (%options, @_) if @_;
-
- # Modify or generate the template
-
- # Deal with the DIR and TMPDIR options
- if (defined $template) {
-
- # Need to strip directory path if using DIR or TMPDIR
- if ($options{'TMPDIR'} || $options{'DIR'}) {
-
- # Strip parent directory from the filename
- #
- # There is no filename at the end
- $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS';
- my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1);
-
- # Last directory is then our template
- $template = (File::Spec->splitdir($directories))[-1];
-
- # Prepend the supplied directory or temp dir
- if ($options{"DIR"}) {
-
- $template = File::Spec->catdir($options{"DIR"}, $template);
-
- } elsif ($options{TMPDIR}) {
-
- # Prepend tmpdir
- $template = File::Spec->catdir(File::Spec->tmpdir, $template);
-
- }
-
- }
-
- } else {
-
- if ($options{"DIR"}) {
-
- $template = File::Spec->catdir($options{"DIR"}, TEMPXXX);
-
- } else {
-
- $template = File::Spec->catdir(File::Spec->tmpdir, TEMPXXX);
-
- }
-
- }
-
- # Create the directory
- my $tempdir;
- my $suffixlen = 0;
- if ($^O eq 'VMS') { # dir names can end in delimiters
- $template =~ m/([\.\]:>]+)$/;
- $suffixlen = length($1);
- }
-
- my $errstr;
- croak "Error in tempdir() using $template: $errstr"
- unless ((undef, $tempdir) = _gettemp($template,
- "open" => 0,
- "mkdir"=> 1 ,
- "suffixlen" => $suffixlen,
- "ErrStr" => \$errstr,
- ) );
-
- # Install exit handler; must be dynamic to get lexical
- if ( $options{'CLEANUP'} && -d $tempdir) {
- _deferred_unlink(undef, $tempdir, 1);
- }
-
- # Return the dir name
- return $tempdir;
-
-}
-
-=back
-
-=head1 MKTEMP FUNCTIONS
-
-The following functions are Perl implementations of the
-mktemp() family of temp file generation system calls.
-
-=over 4
-
-=item B<mkstemp>
-
-Given a template, returns a filehandle to the temporary file and the name
-of the file.
-
- ($fh, $name) = mkstemp( $template );
-
-In scalar context, just the filehandle is returned.
-
-The template may be any filename with some number of X's appended
-to it, for example F</tmp/temp.XXXX>. The trailing X's are replaced
-with unique alphanumeric combinations.
-
-=cut
-
-
-
-sub mkstemp {
-
- croak "Usage: mkstemp(template)"
- if scalar(@_) != 1;
-
- my $template = shift;
-
- my ($fh, $path, $errstr);
- croak "Error in mkstemp using $template: $errstr"
- unless (($fh, $path) = _gettemp($template,
- "open" => 1,
- "mkdir"=> 0 ,
- "suffixlen" => 0,
- "ErrStr" => \$errstr,
- ) );
-
- if (wantarray()) {
- return ($fh, $path);
- } else {
- return $fh;
- }
-
-}
-
-
-=item B<mkstemps>
-
-Similar to mkstemp(), except that an extra argument can be supplied
-with a suffix to be appended to the template.
-
- ($fh, $name) = mkstemps( $template, $suffix );
-
-For example a template of C<testXXXXXX> and suffix of C<.dat>
-would generate a file similar to F<testhGji_w.dat>.
-
-Returns just the filehandle alone when called in scalar context.
-
-=cut
-
-sub mkstemps {
-
- croak "Usage: mkstemps(template, suffix)"
- if scalar(@_) != 2;
-
-
- my $template = shift;
- my $suffix = shift;
-
- $template .= $suffix;
-
- my ($fh, $path, $errstr);
- croak "Error in mkstemps using $template: $errstr"
- unless (($fh, $path) = _gettemp($template,
- "open" => 1,
- "mkdir"=> 0 ,
- "suffixlen" => length($suffix),
- "ErrStr" => \$errstr,
- ) );
-
- if (wantarray()) {
- return ($fh, $path);
- } else {
- return $fh;
- }
-
-}
-
-=item B<mkdtemp>
-
-Create a directory from a template. The template must end in
-X's that are replaced by the routine.
-
- $tmpdir_name = mkdtemp($template);
-
-Returns the name of the temporary directory created.
-Returns undef on failure.
-
-Directory must be removed by the caller.
-
-=cut
-
-#' # for emacs
-
-sub mkdtemp {
-
- croak "Usage: mkdtemp(template)"
- if scalar(@_) != 1;
-
- my $template = shift;
- my $suffixlen = 0;
- if ($^O eq 'VMS') { # dir names can end in delimiters
- $template =~ m/([\.\]:>]+)$/;
- $suffixlen = length($1);
- }
- my ($junk, $tmpdir, $errstr);
- croak "Error creating temp directory from template $template\: $errstr"
- unless (($junk, $tmpdir) = _gettemp($template,
- "open" => 0,
- "mkdir"=> 1 ,
- "suffixlen" => $suffixlen,
- "ErrStr" => \$errstr,
- ) );
-
- return $tmpdir;
-
-}
-
-=item B<mktemp>
-
-Returns a valid temporary filename but does not guarantee
-that the file will not be opened by someone else.
-
- $unopened_file = mktemp($template);
-
-Template is the same as that required by mkstemp().
-
-=cut
-
-sub mktemp {
-
- croak "Usage: mktemp(template)"
- if scalar(@_) != 1;
-
- my $template = shift;
-
- my ($tmpname, $junk, $errstr);
- croak "Error getting name to temp file from template $template: $errstr"
- unless (($junk, $tmpname) = _gettemp($template,
- "open" => 0,
- "mkdir"=> 0 ,
- "suffixlen" => 0,
- "ErrStr" => \$errstr,
- ) );
-
- return $tmpname;
-}
-
-=back
-
-=head1 POSIX FUNCTIONS
-
-This section describes the re-implementation of the tmpnam()
-and tmpfile() functions described in L<POSIX>
-using the mkstemp() from this module.
-
-Unlike the L<POSIX|POSIX> implementations, the directory used
-for the temporary file is not specified in a system include
-file (C<P_tmpdir>) but simply depends on the choice of tmpdir()
-returned by L<File::Spec|File::Spec>. On some implementations this
-location can be set using the C<TMPDIR> environment variable, which
-may not be secure.
-If this is a problem, simply use mkstemp() and specify a template.
-
-=over 4
-
-=item B<tmpnam>
-
-When called in scalar context, returns the full name (including path)
-of a temporary file (uses mktemp()). The only check is that the file does
-not already exist, but there is no guarantee that that condition will
-continue to apply.
-
- $file = tmpnam();
-
-When called in list context, a filehandle to the open file and
-a filename are returned. This is achieved by calling mkstemp()
-after constructing a suitable template.
-
- ($fh, $file) = tmpnam();
-
-If possible, this form should be used to prevent possible
-race conditions.
-
-See L<File::Spec/tmpdir> for information on the choice of temporary
-directory for a particular operating system.
-
-=cut
-
-sub tmpnam {
-
- # Retrieve the temporary directory name
- my $tmpdir = File::Spec->tmpdir;
-
- croak "Error temporary directory is not writable"
- if $tmpdir eq '';
-
- # Use a ten character template and append to tmpdir
- my $template = File::Spec->catfile($tmpdir, TEMPXXX);
-
- if (wantarray() ) {
- return mkstemp($template);
- } else {
- return mktemp($template);
- }
-
-}
-
-=item B<tmpfile>
-
-In scalar context, returns the filehandle of a temporary file.
-
- $fh = tmpfile();
-
-The file is removed when the filehandle is closed or when the program
-exits. No access to the filename is provided.
-
-If the temporary file can not be created undef is returned.
-Currently this command will probably not work when the temporary
-directory is on an NFS file system.
-
-=cut
-
-sub tmpfile {
-
- # Simply call tmpnam() in a list context
- my ($fh, $file) = tmpnam();
-
- # Make sure file is removed when filehandle is closed
- # This will fail on NFS
- unlink0($fh, $file)
- or return undef;
-
- return $fh;
-
-}
-
-=back
-
-=head1 ADDITIONAL FUNCTIONS
-
-These functions are provided for backwards compatibility
-with common tempfile generation C library functions.
-
-They are not exported and must be addressed using the full package
-name.
-
-=over 4
-
-=item B<tempnam>
-
-Return the name of a temporary file in the specified directory
-using a prefix. The file is guaranteed not to exist at the time
-the function was called, but such guarantees are good for one
-clock tick only. Always use the proper form of C<sysopen>
-with C<O_CREAT | O_EXCL> if you must open such a filename.
-
- $filename = File::Temp::tempnam( $dir, $prefix );
-
-Equivalent to running mktemp() with $dir/$prefixXXXXXXXX
-(using unix file convention as an example)
-
-Because this function uses mktemp(), it can suffer from race conditions.
-
-=cut
-
-sub tempnam {
-
- croak 'Usage tempnam($dir, $prefix)' unless scalar(@_) == 2;
-
- my ($dir, $prefix) = @_;
-
- # Add a string to the prefix
- $prefix .= 'XXXXXXXX';
-
- # Concatenate the directory to the file
- my $template = File::Spec->catfile($dir, $prefix);
-
- return mktemp($template);
-
-}
-
-=back
-
-=head1 UTILITY FUNCTIONS
-
-Useful functions for dealing with the filehandle and filename.
-
-=over 4
-
-=item B<unlink0>
-
-Given an open filehandle and the associated filename, make a safe
-unlink. This is achieved by first checking that the filename and
-filehandle initially point to the same file and that the number of
-links to the file is 1 (all fields returned by stat() are compared).
-Then the filename is unlinked and the filehandle checked once again to
-verify that the number of links on that file is now 0. This is the
-closest you can come to making sure that the filename unlinked was the
-same as the file whose descriptor you hold.
-
- unlink0($fh, $path) or die "Error unlinking file $path safely";
-
-Returns false on error. The filehandle is not closed since on some
-occasions this is not required.
-
-On some platforms, for example Windows NT, it is not possible to
-unlink an open file (the file must be closed first). On those
-platforms, the actual unlinking is deferred until the program ends and
-good status is returned. A check is still performed to make sure that
-the filehandle and filename are pointing to the same thing (but not at
-the time the end block is executed since the deferred removal may not
-have access to the filehandle).
-
-Additionally, on Windows NT not all the fields returned by stat() can
-be compared. For example, the C<dev> and C<rdev> fields seem to be
-different. Also, it seems that the size of the file returned by stat()
-does not always agree, with C<stat(FH)> being more accurate than
-C<stat(filename)>, presumably because of caching issues even when
-using autoflush (this is usually overcome by waiting a while after
-writing to the tempfile before attempting to C<unlink0> it).
-
-Finally, on NFS file systems the link count of the file handle does
-not always go to zero immediately after unlinking. Currently, this
-command is expected to fail on NFS disks.
-
-=cut
-
-sub unlink0 {
-
- croak 'Usage: unlink0(filehandle, filename)'
- unless scalar(@_) == 2;
-
- # Read args
- my ($fh, $path) = @_;
-
- warn "Unlinking $path using unlink0\n"
- if $DEBUG;
-
- # Stat the filehandle
- my @fh = stat $fh;
-
- if ($fh[3] > 1 && $^W) {
- carp "unlink0: fstat found too many links; SB=@fh" if $^W;
- }
-
- # Stat the path
- my @path = stat $path;
-
- unless (@path) {
- carp "unlink0: $path is gone already" if $^W;
- return;
- }
-
- # this is no longer a file, but may be a directory, or worse
- unless (-f _) {
- confess "panic: $path is no longer a file: SB=@fh";
- }
-
- # Do comparison of each member of the array
- # On WinNT dev and rdev seem to be different
- # depending on whether it is a file or a handle.
- # Cannot simply compare all members of the stat return
- # Select the ones we can use
- my @okstat = (0..$#fh); # Use all by default
- if ($^O eq 'MSWin32') {
- @okstat = (1,2,3,4,5,7,8,9,10);
- } elsif ($^O eq 'os2') {
- @okstat = (0, 2..$#fh);
- } elsif ($^O eq 'VMS') { # device and file ID are sufficient
- @okstat = (0, 1);
- } elsif ($^O eq 'dos') {
- @okstat = (0,2..7,11..$#fh);
- }
-
- # Now compare each entry explicitly by number
- for (@okstat) {
- print "Comparing: $_ : $fh[$_] and $path[$_]\n" if $DEBUG;
- # Use eq rather than == since rdev, blksize, and blocks (6, 11,
- # and 12) will be '' on platforms that do not support them. This
- # is fine since we are only comparing integers.
- unless ($fh[$_] eq $path[$_]) {
- warn "Did not match $_ element of stat\n" if $DEBUG;
- return 0;
- }
- }
-
- # attempt remove the file (does not work on some platforms)
- if (_can_unlink_opened_file()) {
- # XXX: do *not* call this on a directory; possible race
- # resulting in recursive removal
- croak "unlink0: $path has become a directory!" if -d $path;
- unlink($path) or return 0;
-
- # Stat the filehandle
- @fh = stat $fh;
-
- print "Link count = $fh[3] \n" if $DEBUG;
-
- # Make sure that the link count is zero
- # - Cygwin provides deferred unlinking, however,
- # on Win9x the link count remains 1
- # On NFS the link count may still be 1 but we cant know that
- # we are on NFS
- return ( $fh[3] == 0 or $^O eq 'cygwin' ? 1 : 0);
-
- } else {
- _deferred_unlink($fh, $path, 0);
- return 1;
- }
-
-}
-
-=back
-
-=head1 PACKAGE VARIABLES
-
-These functions control the global state of the package.
-
-=over 4
-
-=item B<safe_level>
-
-Controls the lengths to which the module will go to check the safety of the
-temporary file or directory before proceeding.
-Options are:
-
-=over 8
-
-=item STANDARD
-
-Do the basic security measures to ensure the directory exists and
-is writable, that the umask() is fixed before opening of the file,
-that temporary files are opened only if they do not already exist, and
-that possible race conditions are avoided. Finally the L<unlink0|"unlink0">
-function is used to remove files safely.
-
-=item MEDIUM
-
-In addition to the STANDARD security, the output directory is checked
-to make sure that it is owned either by root or the user running the
-program. If the directory is writable by group or by other, it is then
-checked to make sure that the sticky bit is set.
-
-Will not work on platforms that do not support the C<-k> test
-for sticky bit.
-
-=item HIGH
-
-In addition to the MEDIUM security checks, also check for the
-possibility of ``chown() giveaway'' using the L<POSIX|POSIX>
-sysconf() function. If this is a possibility, each directory in the
-path is checked in turn for safeness, recursively walking back to the
-root directory.
-
-For platforms that do not support the L<POSIX|POSIX>
-C<_PC_CHOWN_RESTRICTED> symbol (for example, Windows NT) it is
-assumed that ``chown() giveaway'' is possible and the recursive test
-is performed.
-
-=back
-
-The level can be changed as follows:
-
- File::Temp->safe_level( File::Temp::HIGH );
-
-The level constants are not exported by the module.
-
-Currently, you must be running at least perl v5.6.0 in order to
-run with MEDIUM or HIGH security. This is simply because the
-safety tests use functions from L<Fcntl|Fcntl> that are not
-available in older versions of perl. The problem is that the version
-number for Fcntl is the same in perl 5.6.0 and in 5.005_03 even though
-they are different versions.
-
-On systems that do not support the HIGH or MEDIUM safety levels
-(for example Win NT or OS/2) any attempt to change the level will
-be ignored. The decision to ignore rather than raise an exception
-allows portable programs to be written with high security in mind
-for the systems that can support this without those programs failing
-on systems where the extra tests are irrelevant.
-
-If you really need to see whether the change has been accepted
-simply examine the return value of C<safe_level>.
-
- $newlevel = File::Temp->safe_level( File::Temp::HIGH );
- die "Could not change to high security"
- if $newlevel != File::Temp::HIGH;
-
-=cut
-
-{
- # protect from using the variable itself
- my $LEVEL = STANDARD;
- sub safe_level {
- my $self = shift;
- if (@_) {
- my $level = shift;
- if (($level != STANDARD) && ($level != MEDIUM) && ($level != HIGH)) {
- carp "safe_level: Specified level ($level) not STANDARD, MEDIUM or HIGH - ignoring\n" if $^W;
- } else {
- # Dont allow this on perl 5.005 or earlier
- if ($] < 5.006 && $level != STANDARD) {
- # Cant do MEDIUM or HIGH checks
- croak "Currently requires perl 5.006 or newer to do the safe checks";
- }
- # Check that we are allowed to change level
- # Silently ignore if we can not.
- $LEVEL = $level if _can_do_level($level);
- }
- }
- return $LEVEL;
- }
-}
-
-=item TopSystemUID
-
-This is the highest UID on the current system that refers to a root
-UID. This is used to make sure that the temporary directory is
-owned by a system UID (C<root>, C<bin>, C<sys> etc) rather than
-simply by root.
-
-This is required since on many unix systems C</tmp> is not owned
-by root.
-
-Default is to assume that any UID less than or equal to 10 is a root
-UID.
-
- File::Temp->top_system_uid(10);
- my $topid = File::Temp->top_system_uid;
-
-This value can be adjusted to reduce security checking if required.
-The value is only relevant when C<safe_level> is set to MEDIUM or higher.
-
-=back
-
-=cut
-
-{
- my $TopSystemUID = 10;
- sub top_system_uid {
- my $self = shift;
- if (@_) {
- my $newuid = shift;
- croak "top_system_uid: UIDs should be numeric"
- unless $newuid =~ /^\d+$/s;
- $TopSystemUID = $newuid;
- }
- return $TopSystemUID;
- }
-}
-
-=head1 WARNING
-
-For maximum security, endeavour always to avoid ever looking at,
-touching, or even imputing the existence of the filename. You do not
-know that that filename is connected to the same file as the handle
-you have, and attempts to check this can only trigger more race
-conditions. It's far more secure to use the filehandle alone and
-dispense with the filename altogether.
-
-If you need to pass the handle to something that expects a filename
-then, on a unix system, use C<"/dev/fd/" . fileno($fh)> for arbitrary
-programs, or more generally C<< "+<=&" . fileno($fh) >> for Perl
-programs. You will have to clear the close-on-exec bit on that file
-descriptor before passing it to another process.
-
- use Fcntl qw/F_SETFD F_GETFD/;
- fcntl($tmpfh, F_SETFD, 0)
- or die "Can't clear close-on-exec flag on temp fh: $!\n";
-
-=head2 Temporary files and NFS
-
-Some problems are associated with using temporary files that reside
-on NFS file systems and it is recommended that a local filesystem
-is used whenever possible. Some of the security tests will most probably
-fail when the temp file is not local. Additionally, be aware that
-the performance of I/O operations over NFS will not be as good as for
-a local disk.
-
-=head1 HISTORY
-
-Originally began life in May 1999 as an XS interface to the system
-mkstemp() function. In March 2000, the OpenBSD mkstemp() code was
-translated to Perl for total control of the code's
-security checking, to ensure the presence of the function regardless of
-operating system and to help with portability.
-
-=head1 SEE ALSO
-
-L<POSIX/tmpnam>, L<POSIX/tmpfile>, L<File::Spec>, L<File::Path>
-
-See L<IO::File> and L<File::MkTemp> for different implementations of
-temporary file handling.
-
-=head1 AUTHOR
-
-Tim Jenness E<lt>t.jenness@jach.hawaii.eduE<gt>
-
-Copyright (C) 1999-2001 Tim Jenness and the UK Particle Physics and
-Astronomy Research Council. All Rights Reserved. This program is free
-software; you can redistribute it and/or modify it under the same
-terms as Perl itself.
-
-Original Perl implementation loosely based on the OpenBSD C code for
-mkstemp(). Thanks to Tom Christiansen for suggesting that this module
-should be written and providing ideas for code improvements and
-security enhancements.
-
-=cut
-
-
-1;
diff --git a/contrib/perl5/lib/File/stat.pm b/contrib/perl5/lib/File/stat.pm
deleted file mode 100644
index 0cf7a0b..0000000
--- a/contrib/perl5/lib/File/stat.pm
+++ /dev/null
@@ -1,115 +0,0 @@
-package File::stat;
-use strict;
-
-use 5.005_64;
-our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-
-BEGIN {
- use Exporter ();
- @EXPORT = qw(stat lstat);
- @EXPORT_OK = qw( $st_dev $st_ino $st_mode
- $st_nlink $st_uid $st_gid
- $st_rdev $st_size
- $st_atime $st_mtime $st_ctime
- $st_blksize $st_blocks
- );
- %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
-}
-use vars @EXPORT_OK;
-
-# Class::Struct forbids use of @ISA
-sub import { goto &Exporter::import }
-
-use Class::Struct qw(struct);
-struct 'File::stat' => [
- map { $_ => '$' } qw{
- dev ino mode nlink uid gid rdev size
- atime mtime ctime blksize blocks
- }
-];
-
-sub populate (@) {
- return unless @_;
- my $stob = new();
- @$stob = (
- $st_dev, $st_ino, $st_mode, $st_nlink, $st_uid, $st_gid, $st_rdev,
- $st_size, $st_atime, $st_mtime, $st_ctime, $st_blksize, $st_blocks )
- = @_;
- return $stob;
-}
-
-sub lstat ($) { populate(CORE::lstat(shift)) }
-
-sub stat ($) {
- my $arg = shift;
- my $st = populate(CORE::stat $arg);
- return $st if $st;
- no strict 'refs';
- require Symbol;
- return populate(CORE::stat \*{Symbol::qualify($arg)});
-}
-
-1;
-__END__
-
-=head1 NAME
-
-File::stat - by-name interface to Perl's built-in stat() functions
-
-=head1 SYNOPSIS
-
- use File::stat;
- $st = stat($file) or die "No $file: $!";
- if ( ($st->mode & 0111) && $st->nlink > 1) ) {
- print "$file is executable with lotsa links\n";
- }
-
- use File::stat qw(:FIELDS);
- stat($file) or die "No $file: $!";
- if ( ($st_mode & 0111) && $st_nlink > 1) ) {
- print "$file is executable with lotsa links\n";
- }
-
-=head1 DESCRIPTION
-
-This module's default exports override the core stat()
-and lstat() functions, replacing them with versions that return
-"File::stat" objects. This object has methods that
-return the similarly named structure field name from the
-stat(2) function; namely,
-dev,
-ino,
-mode,
-nlink,
-uid,
-gid,
-rdev,
-size,
-atime,
-mtime,
-ctime,
-blksize,
-and
-blocks.
-
-You may also import all the structure fields directly into your namespace
-as regular variables using the :FIELDS import tag. (Note that this still
-overrides your stat() and lstat() functions.) Access these fields as
-variables named with a preceding C<st_> in front their method names.
-Thus, C<$stat_obj-E<gt>dev()> corresponds to $st_dev if you import
-the fields.
-
-To access this functionality without the core overrides,
-pass the C<use> an empty import list, and then access
-function functions with their full qualified names.
-On the other hand, the built-ins are still available
-via the C<CORE::> pseudo-package.
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/FileCache.pm b/contrib/perl5/lib/FileCache.pm
deleted file mode 100644
index e1c5ec4..0000000
--- a/contrib/perl5/lib/FileCache.pm
+++ /dev/null
@@ -1,78 +0,0 @@
-package FileCache;
-
-=head1 NAME
-
-FileCache - keep more files open than the system permits
-
-=head1 SYNOPSIS
-
- cacheout $path;
- print $path @data;
-
-=head1 DESCRIPTION
-
-The C<cacheout> function will make sure that there's a filehandle open
-for writing available as the pathname you give it. It automatically
-closes and re-opens files if you exceed your system file descriptor
-maximum.
-
-=head1 BUGS
-
-F<sys/param.h> lies with its C<NOFILE> define on some systems,
-so you may have to set $FileCache::cacheout_maxopen yourself.
-
-=cut
-
-require 5.000;
-use Carp;
-use Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(
- cacheout
-);
-
-# Open in their package.
-
-sub cacheout_open {
- my $pack = caller(1);
- open(*{$pack . '::' . $_[0]}, $_[1]);
-}
-
-sub cacheout_close {
- my $pack = caller(1);
- close(*{$pack . '::' . $_[0]});
-}
-
-# But only this sub name is visible to them.
-
-$cacheout_seq = 0;
-$cacheout_numopen = 0;
-
-sub cacheout {
- ($file) = @_;
- unless (defined $cacheout_maxopen) {
- if (open(PARAM,'/usr/include/sys/param.h')) {
- local ($_, $.);
- while (<PARAM>) {
- $cacheout_maxopen = $1 - 4
- if /^\s*#\s*define\s+NOFILE\s+(\d+)/;
- }
- close PARAM;
- }
- $cacheout_maxopen = 16 unless $cacheout_maxopen;
- }
- if (!$isopen{$file}) {
- if (++$cacheout_numopen > $cacheout_maxopen) {
- my @lru = sort {$isopen{$a} <=> $isopen{$b};} keys(%isopen);
- splice(@lru, $cacheout_maxopen / 3);
- $cacheout_numopen -= @lru;
- for (@lru) { &cacheout_close($_); delete $isopen{$_}; }
- }
- cacheout_open($file, ($saw{$file}++ ? '>>' : '>') . $file)
- or croak("Can't create $file: $!");
- }
- $isopen{$file} = ++$cacheout_seq;
-}
-
-1;
diff --git a/contrib/perl5/lib/FileHandle.pm b/contrib/perl5/lib/FileHandle.pm
deleted file mode 100644
index 5eb3a89..0000000
--- a/contrib/perl5/lib/FileHandle.pm
+++ /dev/null
@@ -1,262 +0,0 @@
-package FileHandle;
-
-use 5.005_64;
-use strict;
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK);
-
-$VERSION = "2.00";
-
-require IO::File;
-@ISA = qw(IO::File);
-
-@EXPORT = qw(_IOFBF _IOLBF _IONBF);
-
-@EXPORT_OK = qw(
- pipe
-
- autoflush
- output_field_separator
- output_record_separator
- input_record_separator
- input_line_number
- format_page_number
- format_lines_per_page
- format_lines_left
- format_name
- format_top_name
- format_line_break_characters
- format_formfeed
-
- print
- printf
- getline
- getlines
-);
-
-#
-# Everything we're willing to export, we must first import.
-#
-import IO::Handle grep { !defined(&$_) } @EXPORT, @EXPORT_OK;
-
-#
-# Some people call "FileHandle::function", so all the functions
-# that were in the old FileHandle class must be imported, too.
-#
-{
- no strict 'refs';
-
- my %import = (
- 'IO::Handle' =>
- [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets
- eof flush error clearerr setbuf setvbuf _open_mode_string)],
- 'IO::Seekable' =>
- [qw(seek tell getpos setpos)],
- 'IO::File' =>
- [qw(new new_tmpfile open)]
- );
- for my $pkg (keys %import) {
- for my $func (@{$import{$pkg}}) {
- my $c = *{"${pkg}::$func"}{CODE}
- or die "${pkg}::$func missing";
- *$func = $c;
- }
- }
-}
-
-#
-# Specialized importer for Fcntl magic.
-#
-sub import {
- my $pkg = shift;
- my $callpkg = caller;
- require Exporter;
- Exporter::export($pkg, $callpkg, @_);
-
- #
- # If the Fcntl extension is available,
- # export its constants.
- #
- eval {
- require Fcntl;
- Exporter::export('Fcntl', $callpkg);
- };
-}
-
-################################################
-# This is the only exported function we define;
-# the rest come from other classes.
-#
-
-sub pipe {
- my $r = new IO::Handle;
- my $w = new IO::Handle;
- CORE::pipe($r, $w) or return undef;
- ($r, $w);
-}
-
-# Rebless standard file handles
-bless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle";
-bless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle";
-bless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle";
-
-1;
-
-__END__
-
-=head1 NAME
-
-FileHandle - supply object methods for filehandles
-
-=head1 SYNOPSIS
-
- use FileHandle;
-
- $fh = new FileHandle;
- if ($fh->open("< file")) {
- print <$fh>;
- $fh->close;
- }
-
- $fh = new FileHandle "> FOO";
- if (defined $fh) {
- print $fh "bar\n";
- $fh->close;
- }
-
- $fh = new FileHandle "file", "r";
- if (defined $fh) {
- print <$fh>;
- undef $fh; # automatically closes the file
- }
-
- $fh = new FileHandle "file", O_WRONLY|O_APPEND;
- if (defined $fh) {
- print $fh "corge\n";
- undef $fh; # automatically closes the file
- }
-
- $pos = $fh->getpos;
- $fh->setpos($pos);
-
- $fh->setvbuf($buffer_var, _IOLBF, 1024);
-
- ($readfh, $writefh) = FileHandle::pipe;
-
- autoflush STDOUT 1;
-
-=head1 DESCRIPTION
-
-NOTE: This class is now a front-end to the IO::* classes.
-
-C<FileHandle::new> creates a C<FileHandle>, which is a reference to a
-newly created symbol (see the C<Symbol> package). If it receives any
-parameters, they are passed to C<FileHandle::open>; if the open fails,
-the C<FileHandle> object is destroyed. Otherwise, it is returned to
-the caller.
-
-C<FileHandle::new_from_fd> creates a C<FileHandle> like C<new> does.
-It requires two parameters, which are passed to C<FileHandle::fdopen>;
-if the fdopen fails, the C<FileHandle> object is destroyed.
-Otherwise, it is returned to the caller.
-
-C<FileHandle::open> accepts one parameter or two. With one parameter,
-it is just a front end for the built-in C<open> function. With two
-parameters, the first parameter is a filename that may include
-whitespace or other special characters, and the second parameter is
-the open mode, optionally followed by a file permission value.
-
-If C<FileHandle::open> receives a Perl mode string (">", "+<", etc.)
-or a POSIX fopen() mode string ("w", "r+", etc.), it uses the basic
-Perl C<open> operator.
-
-If C<FileHandle::open> is given a numeric mode, it passes that mode
-and the optional permissions value to the Perl C<sysopen> operator.
-For convenience, C<FileHandle::import> tries to import the O_XXX
-constants from the Fcntl module. If dynamic loading is not available,
-this may fail, but the rest of FileHandle will still work.
-
-C<FileHandle::fdopen> is like C<open> except that its first parameter
-is not a filename but rather a file handle name, a FileHandle object,
-or a file descriptor number.
-
-If the C functions fgetpos() and fsetpos() are available, then
-C<FileHandle::getpos> returns an opaque value that represents the
-current position of the FileHandle, and C<FileHandle::setpos> uses
-that value to return to a previously visited position.
-
-If the C function setvbuf() is available, then C<FileHandle::setvbuf>
-sets the buffering policy for the FileHandle. The calling sequence
-for the Perl function is the same as its C counterpart, including the
-macros C<_IOFBF>, C<_IOLBF>, and C<_IONBF>, except that the buffer
-parameter specifies a scalar variable to use as a buffer. WARNING: A
-variable used as a buffer by C<FileHandle::setvbuf> must not be
-modified in any way until the FileHandle is closed or until
-C<FileHandle::setvbuf> is called again, or memory corruption may
-result!
-
-See L<perlfunc> for complete descriptions of each of the following
-supported C<FileHandle> methods, which are just front ends for the
-corresponding built-in functions:
-
- close
- fileno
- getc
- gets
- eof
- clearerr
- seek
- tell
-
-See L<perlvar> for complete descriptions of each of the following
-supported C<FileHandle> methods:
-
- autoflush
- output_field_separator
- output_record_separator
- input_record_separator
- input_line_number
- format_page_number
- format_lines_per_page
- format_lines_left
- format_name
- format_top_name
- format_line_break_characters
- format_formfeed
-
-Furthermore, for doing normal I/O you might need these:
-
-=over
-
-=item $fh->print
-
-See L<perlfunc/print>.
-
-=item $fh->printf
-
-See L<perlfunc/printf>.
-
-=item $fh->getline
-
-This works like <$fh> described in L<perlop/"I/O Operators">
-except that it's more readable and can be safely called in a
-list context but still returns just one line.
-
-=item $fh->getlines
-
-This works like <$fh> when called in a list context to
-read all the remaining lines in a file, except that it's more readable.
-It will also croak() if accidentally called in a scalar context.
-
-=back
-
-There are many other functions available since FileHandle is descended
-from IO::File, IO::Seekable, and IO::Handle. Please see those
-respective pages for documentation on more functions.
-
-=head1 SEE ALSO
-
-The B<IO> extension,
-L<perlfunc>,
-L<perlop/"I/O Operators">.
-
-=cut
diff --git a/contrib/perl5/lib/FindBin.pm b/contrib/perl5/lib/FindBin.pm
deleted file mode 100644
index 5d4c575..0000000
--- a/contrib/perl5/lib/FindBin.pm
+++ /dev/null
@@ -1,169 +0,0 @@
-# FindBin.pm
-#
-# Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-
-=head1 NAME
-
-FindBin - Locate directory of original perl script
-
-=head1 SYNOPSIS
-
- use FindBin;
- use lib "$FindBin::Bin/../lib";
-
- or
-
- use FindBin qw($Bin);
- use lib "$Bin/../lib";
-
-=head1 DESCRIPTION
-
-Locates the full path to the script bin directory to allow the use
-of paths relative to the bin directory.
-
-This allows a user to setup a directory tree for some software with
-directories E<lt>rootE<gt>/bin and E<lt>rootE<gt>/lib and then the above example will allow
-the use of modules in the lib directory without knowing where the software
-tree is installed.
-
-If perl is invoked using the B<-e> option or the perl script is read from
-C<STDIN> then FindBin sets both C<$Bin> and C<$RealBin> to the current
-directory.
-
-=head1 EXPORTABLE VARIABLES
-
- $Bin - path to bin directory from where script was invoked
- $Script - basename of script from which perl was invoked
- $RealBin - $Bin with all links resolved
- $RealScript - $Script with all links resolved
-
-=head1 KNOWN BUGS
-
-if perl is invoked as
-
- perl filename
-
-and I<filename> does not have executable rights and a program called I<filename>
-exists in the users C<$ENV{PATH}> which satisfies both B<-x> and B<-T> then FindBin
-assumes that it was invoked via the C<$ENV{PATH}>.
-
-Workaround is to invoke perl as
-
- perl ./filename
-
-=head1 AUTHORS
-
-FindBin is supported as part of the core perl distribution. Please send bug
-reports to E<lt>F<perlbug@perl.org>E<gt> using the perlbug program included with perl.
-
-Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
-Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-package FindBin;
-use Carp;
-require 5.000;
-require Exporter;
-use Cwd qw(getcwd abs_path);
-use Config;
-use File::Basename;
-use File::Spec;
-
-@EXPORT_OK = qw($Bin $Script $RealBin $RealScript $Dir $RealDir);
-%EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]);
-@ISA = qw(Exporter);
-
-$VERSION = "1.42";
-
-BEGIN
-{
- *Dir = \$Bin;
- *RealDir = \$RealBin;
-
- if($0 eq '-e' || $0 eq '-')
- {
- # perl invoked with -e or script is on C<STDIN>
-
- $Script = $RealScript = $0;
- $Bin = $RealBin = getcwd();
- }
- else
- {
- my $script = $0;
-
- if ($^O eq 'VMS')
- {
- ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*\])(.*)/s;
- ($RealBin,$RealScript) = ($Bin,$Script);
- }
- else
- {
- my $IsWin32 = $^O eq 'MSWin32';
- unless(($script =~ m#/# || ($IsWin32 && $script =~ m#\\#))
- && -f $script)
- {
- my $dir;
- foreach $dir (File::Spec->path)
- {
- my $scr = File::Spec->catfile($dir, $script);
- if(-r $scr && (!$IsWin32 || -x _))
- {
- $script = $scr;
-
- if (-f $0)
- {
- # $script has been found via PATH but perl could have
- # been invoked as 'perl file'. Do a dumb check to see
- # if $script is a perl program, if not then $script = $0
- #
- # well we actually only check that it is an ASCII file
- # we know its executable so it is probably a script
- # of some sort.
-
- $script = $0 unless(-T $script);
- }
- last;
- }
- }
- }
-
- croak("Cannot find current script '$0'") unless(-f $script);
-
- # Ensure $script contains the complete path incase we C<chdir>
-
- $script = File::Spec->catfile(getcwd(), $script)
- unless File::Spec->file_name_is_absolute($script);
-
- ($Script,$Bin) = fileparse($script);
-
- # Resolve $script if it is a link
- while(1)
- {
- my $linktext = readlink($script);
-
- ($RealScript,$RealBin) = fileparse($script);
- last unless defined $linktext;
-
- $script = (File::Spec->file_name_is_absolute($linktext))
- ? $linktext
- : File::Spec->catfile($RealBin, $linktext);
- }
-
- # Get absolute paths to directories
- $Bin = abs_path($Bin) if($Bin);
- $RealBin = abs_path($RealBin) if($RealBin);
- }
- }
-}
-
-1; # Keep require happy
-
diff --git a/contrib/perl5/lib/Getopt/Long.pm b/contrib/perl5/lib/Getopt/Long.pm
deleted file mode 100644
index 472527d..0000000
--- a/contrib/perl5/lib/Getopt/Long.pm
+++ /dev/null
@@ -1,1890 +0,0 @@
-# GetOpt::Long.pm -- Universal options parsing
-
-package Getopt::Long;
-
-# RCS Status : $Id: GetoptLong.pl,v 2.26 2001-01-31 10:20:29+01 jv Exp $
-# Author : Johan Vromans
-# Created On : Tue Sep 11 15:00:12 1990
-# Last Modified By: Johan Vromans
-# Last Modified On: Sat Jan 6 17:12:27 2001
-# Update Count : 748
-# Status : Released
-
-################ Copyright ################
-
-# This program is Copyright 1990,2001 by Johan Vromans.
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the Perl Artistic License or the
-# GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any
-# later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# If you do not have a copy of the GNU General Public License write to
-# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
-# MA 02139, USA.
-
-################ Module Preamble ################
-
-use 5.004;
-
-use strict;
-
-use vars qw($VERSION $VERSION_STRING);
-$VERSION = 2.25;
-$VERSION_STRING = "2.25";
-
-use Exporter;
-use AutoLoader qw(AUTOLOAD);
-
-use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-@ISA = qw(Exporter);
-%EXPORT_TAGS = qw();
-BEGIN {
- # Init immediately so their contents can be used in the 'use vars' below.
- @EXPORT = qw(&GetOptions $REQUIRE_ORDER $PERMUTE $RETURN_IN_ORDER);
- @EXPORT_OK = qw();
-}
-
-# User visible variables.
-use vars @EXPORT, @EXPORT_OK;
-use vars qw($error $debug $major_version $minor_version);
-# Deprecated visible variables.
-use vars qw($autoabbrev $getopt_compat $ignorecase $bundling $order
- $passthrough);
-# Official invisible variables.
-use vars qw($genprefix $caller $gnu_compat);
-
-# Public subroutines.
-sub Configure (@);
-sub config (@); # deprecated name
-sub GetOptions;
-
-# Private subroutines.
-sub ConfigDefaults ();
-sub FindOption ($$$$$$$);
-sub Croak (@); # demand loading the real Croak
-
-################ Local Variables ################
-
-################ Resident subroutines ################
-
-sub ConfigDefaults () {
- # Handle POSIX compliancy.
- if ( defined $ENV{"POSIXLY_CORRECT"} ) {
- $genprefix = "(--|-)";
- $autoabbrev = 0; # no automatic abbrev of options
- $bundling = 0; # no bundling of single letter switches
- $getopt_compat = 0; # disallow '+' to start options
- $order = $REQUIRE_ORDER;
- }
- else {
- $genprefix = "(--|-|\\+)";
- $autoabbrev = 1; # automatic abbrev of options
- $bundling = 0; # bundling off by default
- $getopt_compat = 1; # allow '+' to start options
- $order = $PERMUTE;
- }
- # Other configurable settings.
- $debug = 0; # for debugging
- $error = 0; # error tally
- $ignorecase = 1; # ignore case when matching options
- $passthrough = 0; # leave unrecognized options alone
- $gnu_compat = 0; # require --opt=val if value is optional
-}
-
-# Override import.
-sub import {
- my $pkg = shift; # package
- my @syms = (); # symbols to import
- my @config = (); # configuration
- my $dest = \@syms; # symbols first
- for ( @_ ) {
- if ( $_ eq ':config' ) {
- $dest = \@config; # config next
- next;
- }
- push (@$dest, $_); # push
- }
- # Hide one level and call super.
- local $Exporter::ExportLevel = 1;
- $pkg->SUPER::import(@syms);
- # And configure.
- Configure (@config) if @config;
-}
-
-################ Initialization ################
-
-# Values for $order. See GNU getopt.c for details.
-($REQUIRE_ORDER, $PERMUTE, $RETURN_IN_ORDER) = (0..2);
-# Version major/minor numbers.
-($major_version, $minor_version) = $VERSION =~ /^(\d+)\.(\d+)/;
-
-ConfigDefaults();
-
-################ OO Interface ################
-
-package Getopt::Long::Parser;
-
-# NOTE: The object oriented routines use $error for thread locking.
-my $_lock = sub {
- lock ($Getopt::Long::error) if $] >= 5.005
-};
-
-# Store a copy of the default configuration. Since ConfigDefaults has
-# just been called, what we get from Configure is the default.
-my $default_config = do {
- &$_lock;
- Getopt::Long::Configure ()
-};
-
-sub new {
- my $that = shift;
- my $class = ref($that) || $that;
- my %atts = @_;
-
- # Register the callers package.
- my $self = { caller_pkg => (caller)[0] };
-
- bless ($self, $class);
-
- # Process config attributes.
- if ( defined $atts{config} ) {
- &$_lock;
- my $save = Getopt::Long::Configure ($default_config, @{$atts{config}});
- $self->{settings} = Getopt::Long::Configure ($save);
- delete ($atts{config});
- }
- # Else use default config.
- else {
- $self->{settings} = $default_config;
- }
-
- if ( %atts ) { # Oops
- Getopt::Long::Croak(__PACKAGE__.": unhandled attributes: ".
- join(" ", sort(keys(%atts))));
- }
-
- $self;
-}
-
-sub configure {
- my ($self) = shift;
-
- &$_lock;
-
- # Restore settings, merge new settings in.
- my $save = Getopt::Long::Configure ($self->{settings}, @_);
-
- # Restore orig config and save the new config.
- $self->{settings} = Configure ($save);
-}
-
-sub getoptions {
- my ($self) = shift;
-
- &$_lock;
-
- # Restore config settings.
- my $save = Getopt::Long::Configure ($self->{settings});
-
- # Call main routine.
- my $ret = 0;
- $Getopt::Long::caller = $self->{caller_pkg};
- eval { $ret = Getopt::Long::GetOptions (@_); };
-
- # Restore saved settings.
- Getopt::Long::Configure ($save);
-
- # Handle errors and return value.
- die ($@) if $@;
- return $ret;
-}
-
-package Getopt::Long;
-
-################ Package return ################
-
-1;
-
-__END__
-
-################ AutoLoading subroutines ################
-
-# RCS Status : $Id: GetoptLongAl.pl,v 2.30 2001-01-31 10:21:11+01 jv Exp $
-# Author : Johan Vromans
-# Created On : Fri Mar 27 11:50:30 1998
-# Last Modified By: Johan Vromans
-# Last Modified On: Tue Dec 26 18:01:16 2000
-# Update Count : 98
-# Status : Released
-
-sub GetOptions {
-
- my @optionlist = @_; # local copy of the option descriptions
- my $argend = '--'; # option list terminator
- my %opctl = (); # table of arg.specs (long and abbrevs)
- my %bopctl = (); # table of arg.specs (bundles)
- my $pkg = $caller || (caller)[0]; # current context
- # Needed if linkage is omitted.
- my %aliases= (); # alias table
- my @ret = (); # accum for non-options
- my %linkage; # linkage
- my $userlinkage; # user supplied HASH
- my $opt; # current option
- my $genprefix = $genprefix; # so we can call the same module many times
- my @opctl; # the possible long option names
-
- $error = '';
-
- print STDERR ("GetOpt::Long $Getopt::Long::VERSION ",
- "called from package \"$pkg\".",
- "\n ",
- 'GetOptionsAl $Revision: 2.30 $ ',
- "\n ",
- "ARGV: (@ARGV)",
- "\n ",
- "autoabbrev=$autoabbrev,".
- "bundling=$bundling,",
- "getopt_compat=$getopt_compat,",
- "gnu_compat=$gnu_compat,",
- "order=$order,",
- "\n ",
- "ignorecase=$ignorecase,",
- "passthrough=$passthrough,",
- "genprefix=\"$genprefix\".",
- "\n")
- if $debug;
-
- # Check for ref HASH as first argument.
- # First argument may be an object. It's OK to use this as long
- # as it is really a hash underneath.
- $userlinkage = undef;
- if ( ref($optionlist[0]) and
- "$optionlist[0]" =~ /^(?:.*\=)?HASH\([^\(]*\)$/ ) {
- $userlinkage = shift (@optionlist);
- print STDERR ("=> user linkage: $userlinkage\n") if $debug;
- }
-
- # See if the first element of the optionlist contains option
- # starter characters.
- # Be careful not to interpret '<>' as option starters.
- if ( $optionlist[0] =~ /^\W+$/
- && !($optionlist[0] eq '<>'
- && @optionlist > 0
- && ref($optionlist[1])) ) {
- $genprefix = shift (@optionlist);
- # Turn into regexp. Needs to be parenthesized!
- $genprefix =~ s/(\W)/\\$1/g;
- $genprefix = "([" . $genprefix . "])";
- }
-
- # Verify correctness of optionlist.
- %opctl = ();
- %bopctl = ();
- while ( @optionlist > 0 ) {
- my $opt = shift (@optionlist);
-
- # Strip leading prefix so people can specify "--foo=i" if they like.
- $opt = $+ if $opt =~ /^$genprefix+(.*)$/s;
-
- if ( $opt eq '<>' ) {
- if ( (defined $userlinkage)
- && !(@optionlist > 0 && ref($optionlist[0]))
- && (exists $userlinkage->{$opt})
- && ref($userlinkage->{$opt}) ) {
- unshift (@optionlist, $userlinkage->{$opt});
- }
- unless ( @optionlist > 0
- && ref($optionlist[0]) && ref($optionlist[0]) eq 'CODE' ) {
- $error .= "Option spec <> requires a reference to a subroutine\n";
- next;
- }
- $linkage{'<>'} = shift (@optionlist);
- next;
- }
-
- # Match option spec. Allow '?' as an alias only.
- if ( $opt !~ /^((\w+[-\w]*)(\|(\?|\w[-\w]*)?)*)?([!~+]|[=:][infse][@%]?)?$/ ) {
- $error .= "Error in option spec: \"$opt\"\n";
- next;
- }
- my ($o, $c, $a) = ($1, $5);
- $c = '' unless defined $c;
-
- # $linko keeps track of the primary name the user specified.
- # This name will be used for the internal or external linkage.
- # In other words, if the user specifies "FoO|BaR", it will
- # match any case combinations of 'foo' and 'bar', but if a global
- # variable needs to be set, it will be $opt_FoO in the exact case
- # as specified.
- my $linko;
-
- if ( ! defined $o ) {
- # empty -> '-' option
- $linko = $o = '';
- $opctl{''} = $c;
- $bopctl{''} = $c if $bundling;
- }
- else {
- # Handle alias names
- my @o = split (/\|/, $o);
- $linko = $o = $o[0];
- # Force an alias if the option name is not locase.
- $a = $o unless $o eq lc($o);
- $o = lc ($o)
- if $ignorecase > 1
- || ($ignorecase
- && ($bundling ? length($o) > 1 : 1));
-
- foreach ( @o ) {
- if ( $bundling && length($_) == 1 ) {
- $_ = lc ($_) if $ignorecase > 1;
- if ( $c eq '!' ) {
- $opctl{"no$_"} = $c;
- warn ("Ignoring '!' modifier for short option $_\n");
- $opctl{$_} = $bopctl{$_} = '';
- }
- else {
- $opctl{$_} = $bopctl{$_} = $c;
- }
- }
- else {
- $_ = lc ($_) if $ignorecase;
- if ( $c eq '!' ) {
- $opctl{"no$_"} = $c;
- $opctl{$_} = ''
- }
- else {
- $opctl{$_} = $c;
- }
- }
- if ( defined $a ) {
- # Note alias.
- $aliases{$_} = $a;
- }
- else {
- # Set primary name.
- $a = $_;
- }
- }
- }
-
- # If no linkage is supplied in the @optionlist, copy it from
- # the userlinkage if available.
- if ( defined $userlinkage ) {
- unless ( @optionlist > 0 && ref($optionlist[0]) ) {
- if ( exists $userlinkage->{$linko} &&
- ref($userlinkage->{$linko}) ) {
- print STDERR ("=> found userlinkage for \"$linko\": ",
- "$userlinkage->{$linko}\n")
- if $debug;
- unshift (@optionlist, $userlinkage->{$linko});
- }
- else {
- # Do nothing. Being undefined will be handled later.
- next;
- }
- }
- }
-
- # Copy the linkage. If omitted, link to global variable.
- if ( @optionlist > 0 && ref($optionlist[0]) ) {
- print STDERR ("=> link \"$linko\" to $optionlist[0]\n")
- if $debug;
- if ( ref($optionlist[0]) =~ /^(SCALAR|CODE)$/ ) {
- $linkage{$linko} = shift (@optionlist);
- }
- elsif ( ref($optionlist[0]) =~ /^(ARRAY)$/ ) {
- $linkage{$linko} = shift (@optionlist);
- $opctl{$o} .= '@'
- if $opctl{$o} ne '' and $opctl{$o} !~ /\@$/;
- $bopctl{$o} .= '@'
- if $bundling and defined $bopctl{$o} and
- $bopctl{$o} ne '' and $bopctl{$o} !~ /\@$/;
- }
- elsif ( ref($optionlist[0]) =~ /^(HASH)$/ ) {
- $linkage{$linko} = shift (@optionlist);
- $opctl{$o} .= '%'
- if $opctl{$o} ne '' and $opctl{$o} !~ /\%$/;
- $bopctl{$o} .= '%'
- if $bundling and defined $bopctl{$o} and
- $bopctl{$o} ne '' and $bopctl{$o} !~ /\%$/;
- }
- else {
- $error .= "Invalid option linkage for \"$opt\"\n";
- }
- }
- else {
- # Link to global $opt_XXX variable.
- # Make sure a valid perl identifier results.
- my $ov = $linko;
- $ov =~ s/\W/_/g;
- if ( $c =~ /@/ ) {
- print STDERR ("=> link \"$linko\" to \@$pkg","::opt_$ov\n")
- if $debug;
- eval ("\$linkage{\$linko} = \\\@".$pkg."::opt_$ov;");
- }
- elsif ( $c =~ /%/ ) {
- print STDERR ("=> link \"$linko\" to \%$pkg","::opt_$ov\n")
- if $debug;
- eval ("\$linkage{\$linko} = \\\%".$pkg."::opt_$ov;");
- }
- else {
- print STDERR ("=> link \"$linko\" to \$$pkg","::opt_$ov\n")
- if $debug;
- eval ("\$linkage{\$linko} = \\\$".$pkg."::opt_$ov;");
- }
- }
- }
-
- # Bail out if errors found.
- die ($error) if $error;
- $error = 0;
-
- # Sort the possible long option names.
- @opctl = sort(keys (%opctl)) if $autoabbrev;
-
- # Show the options tables if debugging.
- if ( $debug ) {
- my ($arrow, $k, $v);
- $arrow = "=> ";
- while ( ($k,$v) = each(%opctl) ) {
- print STDERR ($arrow, "\$opctl{\"$k\"} = \"$v\"\n");
- $arrow = " ";
- }
- $arrow = "=> ";
- while ( ($k,$v) = each(%bopctl) ) {
- print STDERR ($arrow, "\$bopctl{\"$k\"} = \"$v\"\n");
- $arrow = " ";
- }
- }
-
- # Process argument list
- my $goon = 1;
- while ( $goon && @ARGV > 0 ) {
-
- #### Get next argument ####
-
- $opt = shift (@ARGV);
- print STDERR ("=> option \"", $opt, "\"\n") if $debug;
-
- #### Determine what we have ####
-
- # Double dash is option list terminator.
- if ( $opt eq $argend ) {
- # Finish. Push back accumulated arguments and return.
- unshift (@ARGV, @ret)
- if $order == $PERMUTE;
- return ($error == 0);
- }
-
- my $tryopt = $opt;
- my $found; # success status
- my $dsttype; # destination type ('@' or '%')
- my $incr; # destination increment
- my $key; # key (if hash type)
- my $arg; # option argument
-
- ($found, $opt, $arg, $dsttype, $incr, $key) =
- FindOption ($genprefix, $argend, $opt,
- \%opctl, \%bopctl, \@opctl, \%aliases);
-
- if ( $found ) {
-
- # FindOption undefines $opt in case of errors.
- next unless defined $opt;
-
- if ( defined $arg ) {
- if ( defined $aliases{$opt} ) {
- print STDERR ("=> alias \"$opt\" -> \"$aliases{$opt}\"\n")
- if $debug;
- $opt = $aliases{$opt};
- }
-
- if ( defined $linkage{$opt} ) {
- print STDERR ("=> ref(\$L{$opt}) -> ",
- ref($linkage{$opt}), "\n") if $debug;
-
- if ( ref($linkage{$opt}) eq 'SCALAR' ) {
- if ( $incr ) {
- print STDERR ("=> \$\$L{$opt} += \"$arg\"\n")
- if $debug;
- if ( defined ${$linkage{$opt}} ) {
- ${$linkage{$opt}} += $arg;
- }
- else {
- ${$linkage{$opt}} = $arg;
- }
- }
- else {
- print STDERR ("=> \$\$L{$opt} = \"$arg\"\n")
- if $debug;
- ${$linkage{$opt}} = $arg;
- }
- }
- elsif ( ref($linkage{$opt}) eq 'ARRAY' ) {
- print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
- if $debug;
- push (@{$linkage{$opt}}, $arg);
- }
- elsif ( ref($linkage{$opt}) eq 'HASH' ) {
- print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
- if $debug;
- $linkage{$opt}->{$key} = $arg;
- }
- elsif ( ref($linkage{$opt}) eq 'CODE' ) {
- print STDERR ("=> &L{$opt}(\"$opt\", \"$arg\")\n")
- if $debug;
- local ($@);
- eval {
- &{$linkage{$opt}}($opt, $arg);
- };
- print STDERR ("=> die($@)\n") if $debug && $@ ne '';
- if ( $@ =~ /^!/ ) {
- if ( $@ =~ /^!FINISH\b/ ) {
- $goon = 0;
- }
- }
- elsif ( $@ ne '' ) {
- warn ($@);
- $error++;
- }
- }
- else {
- print STDERR ("Invalid REF type \"", ref($linkage{$opt}),
- "\" in linkage\n");
- Croak ("Getopt::Long -- internal error!\n");
- }
- }
- # No entry in linkage means entry in userlinkage.
- elsif ( $dsttype eq '@' ) {
- if ( defined $userlinkage->{$opt} ) {
- print STDERR ("=> push(\@{\$L{$opt}}, \"$arg\")\n")
- if $debug;
- push (@{$userlinkage->{$opt}}, $arg);
- }
- else {
- print STDERR ("=>\$L{$opt} = [\"$arg\"]\n")
- if $debug;
- $userlinkage->{$opt} = [$arg];
- }
- }
- elsif ( $dsttype eq '%' ) {
- if ( defined $userlinkage->{$opt} ) {
- print STDERR ("=> \$L{$opt}->{$key} = \"$arg\"\n")
- if $debug;
- $userlinkage->{$opt}->{$key} = $arg;
- }
- else {
- print STDERR ("=>\$L{$opt} = {$key => \"$arg\"}\n")
- if $debug;
- $userlinkage->{$opt} = {$key => $arg};
- }
- }
- else {
- if ( $incr ) {
- print STDERR ("=> \$L{$opt} += \"$arg\"\n")
- if $debug;
- if ( defined $userlinkage->{$opt} ) {
- $userlinkage->{$opt} += $arg;
- }
- else {
- $userlinkage->{$opt} = $arg;
- }
- }
- else {
- print STDERR ("=>\$L{$opt} = \"$arg\"\n") if $debug;
- $userlinkage->{$opt} = $arg;
- }
- }
- }
- }
-
- # Not an option. Save it if we $PERMUTE and don't have a <>.
- elsif ( $order == $PERMUTE ) {
- # Try non-options call-back.
- my $cb;
- if ( (defined ($cb = $linkage{'<>'})) ) {
- local ($@);
- eval {
- &$cb ($tryopt);
- };
- print STDERR ("=> die($@)\n") if $debug && $@ ne '';
- if ( $@ =~ /^!/ ) {
- if ( $@ =~ /^!FINISH\b/ ) {
- $goon = 0;
- }
- }
- elsif ( $@ ne '' ) {
- warn ($@);
- $error++;
- }
- }
- else {
- print STDERR ("=> saving \"$tryopt\" ",
- "(not an option, may permute)\n") if $debug;
- push (@ret, $tryopt);
- }
- next;
- }
-
- # ...otherwise, terminate.
- else {
- # Push this one back and exit.
- unshift (@ARGV, $tryopt);
- return ($error == 0);
- }
-
- }
-
- # Finish.
- if ( $order == $PERMUTE ) {
- # Push back accumulated arguments
- print STDERR ("=> restoring \"", join('" "', @ret), "\"\n")
- if $debug && @ret > 0;
- unshift (@ARGV, @ret) if @ret > 0;
- }
-
- return ($error == 0);
-}
-
-# Option lookup.
-sub FindOption ($$$$$$$) {
-
- # returns (1, $opt, $arg, $dsttype, $incr, $key) if okay,
- # returns (0) otherwise.
-
- my ($prefix, $argend, $opt, $opctl, $bopctl, $names, $aliases) = @_;
- my $key; # hash key for a hash option
- my $arg;
-
- print STDERR ("=> find \"$opt\", prefix=\"$prefix\"\n") if $debug;
-
- return 0 unless $opt =~ /^$prefix(.*)$/s;
- return 0 if $opt eq "-" && !defined $opctl->{""};
-
- $opt = $+;
- my ($starter) = $1;
-
- print STDERR ("=> split \"$starter\"+\"$opt\"\n") if $debug;
-
- my $optarg = undef; # value supplied with --opt=value
- my $rest = undef; # remainder from unbundling
-
- # If it is a long option, it may include the value.
- if (($starter eq "--" || ($getopt_compat && !$bundling))
- && $opt =~ /^([^=]+)=(.*)$/s ) {
- $opt = $1;
- $optarg = $2;
- print STDERR ("=> option \"", $opt,
- "\", optarg = \"$optarg\"\n") if $debug;
- }
-
- #### Look it up ###
-
- my $tryopt = $opt; # option to try
- my $optbl = $opctl; # table to look it up (long names)
- my $type;
- my $dsttype = '';
- my $incr = 0;
-
- if ( $bundling && $starter eq '-' ) {
- # Unbundle single letter option.
- $rest = length ($tryopt) > 0 ? substr ($tryopt, 1) : "";
- $tryopt = substr ($tryopt, 0, 1);
- $tryopt = lc ($tryopt) if $ignorecase > 1;
- print STDERR ("=> $starter$tryopt unbundled from ",
- "$starter$tryopt$rest\n") if $debug;
- $rest = undef unless $rest ne '';
- $optbl = $bopctl; # look it up in the short names table
-
- # If bundling == 2, long options can override bundles.
- if ( $bundling == 2 and
- defined ($rest) and
- defined ($type = $opctl->{$tryopt.$rest}) ) {
- print STDERR ("=> $starter$tryopt rebundled to ",
- "$starter$tryopt$rest\n") if $debug;
- $tryopt .= $rest;
- undef $rest;
- }
- }
-
- # Try auto-abbreviation.
- elsif ( $autoabbrev ) {
- # Downcase if allowed.
- $tryopt = $opt = lc ($opt) if $ignorecase;
- # Turn option name into pattern.
- my $pat = quotemeta ($opt);
- # Look up in option names.
- my @hits = grep (/^$pat/, @{$names});
- print STDERR ("=> ", scalar(@hits), " hits (@hits) with \"$pat\" ",
- "out of ", scalar(@{$names}), "\n") if $debug;
-
- # Check for ambiguous results.
- unless ( (@hits <= 1) || (grep ($_ eq $opt, @hits) == 1) ) {
- # See if all matches are for the same option.
- my %hit;
- foreach ( @hits ) {
- $_ = $aliases->{$_} if defined $aliases->{$_};
- $hit{$_} = 1;
- }
- # Now see if it really is ambiguous.
- unless ( keys(%hit) == 1 ) {
- return (0) if $passthrough;
- warn ("Option ", $opt, " is ambiguous (",
- join(", ", @hits), ")\n");
- $error++;
- undef $opt;
- return (1, $opt,$arg,$dsttype,$incr,$key);
- }
- @hits = keys(%hit);
- }
-
- # Complete the option name, if appropriate.
- if ( @hits == 1 && $hits[0] ne $opt ) {
- $tryopt = $hits[0];
- $tryopt = lc ($tryopt) if $ignorecase;
- print STDERR ("=> option \"$opt\" -> \"$tryopt\"\n")
- if $debug;
- }
- }
-
- # Map to all lowercase if ignoring case.
- elsif ( $ignorecase ) {
- $tryopt = lc ($opt);
- }
-
- # Check validity by fetching the info.
- $type = $optbl->{$tryopt} unless defined $type;
- unless ( defined $type ) {
- return (0) if $passthrough;
- warn ("Unknown option: ", $opt, "\n");
- $error++;
- return (1, $opt,$arg,$dsttype,$incr,$key);
- }
- # Apparently valid.
- $opt = $tryopt;
- print STDERR ("=> found \"$type\" for \"", $opt, "\"\n") if $debug;
-
- #### Determine argument status ####
-
- # If it is an option w/o argument, we're almost finished with it.
- if ( $type eq '' || $type eq '!' || $type eq '+' ) {
- if ( defined $optarg ) {
- return (0) if $passthrough;
- warn ("Option ", $opt, " does not take an argument\n");
- $error++;
- undef $opt;
- }
- elsif ( $type eq '' || $type eq '+' ) {
- $arg = 1; # supply explicit value
- $incr = $type eq '+';
- }
- else {
- substr ($opt, 0, 2) = ''; # strip NO prefix
- $arg = 0; # supply explicit value
- }
- unshift (@ARGV, $starter.$rest) if defined $rest;
- return (1, $opt,$arg,$dsttype,$incr,$key);
- }
-
- # Get mandatory status and type info.
- my $mand;
- ($mand, $type, $dsttype, $key) = $type =~ /^(.)(.)([@%]?)$/;
-
- # Check if there is an option argument available.
- if ( $gnu_compat ) {
- return (1, $opt, $optarg, $dsttype, $incr, $key)
- if defined $optarg;
- return (1, $opt, $type eq "s" ? '' : 0, $dsttype, $incr, $key)
- if $mand eq ':';
- }
-
- # Check if there is an option argument available.
- if ( defined $optarg
- ? ($optarg eq '')
- : !(defined $rest || @ARGV > 0) ) {
- # Complain if this option needs an argument.
- if ( $mand eq "=" ) {
- return (0) if $passthrough;
- warn ("Option ", $opt, " requires an argument\n");
- $error++;
- undef $opt;
- }
- return (1, $opt, $type eq "s" ? '' : 0, $dsttype, $incr, $key);
- }
-
- # Get (possibly optional) argument.
- $arg = (defined $rest ? $rest
- : (defined $optarg ? $optarg : shift (@ARGV)));
-
- # Get key if this is a "name=value" pair for a hash option.
- $key = undef;
- if ($dsttype eq '%' && defined $arg) {
- ($key, $arg) = ($arg =~ /^([^=]*)=(.*)$/s) ? ($1, $2) : ($arg, 1);
- }
-
- #### Check if the argument is valid for this option ####
-
- if ( $type eq "s" ) { # string
- # A mandatory string takes anything.
- return (1, $opt,$arg,$dsttype,$incr,$key) if $mand eq "=";
-
- # An optional string takes almost anything.
- return (1, $opt,$arg,$dsttype,$incr,$key)
- if defined $optarg || defined $rest;
- return (1, $opt,$arg,$dsttype,$incr,$key) if $arg eq "-"; # ??
-
- # Check for option or option list terminator.
- if ($arg eq $argend ||
- $arg =~ /^$prefix.+/) {
- # Push back.
- unshift (@ARGV, $arg);
- # Supply empty value.
- $arg = '';
- }
- }
-
- elsif ( $type eq "n" || $type eq "i" ) { # numeric/integer
- if ( $bundling && defined $rest && $rest =~ /^([-+]?[0-9]+)(.*)$/s ) {
- $arg = $1;
- $rest = $2;
- unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
- }
- elsif ( $arg !~ /^[-+]?[0-9]+$/ ) {
- if ( defined $optarg || $mand eq "=" ) {
- if ( $passthrough ) {
- unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
- unless defined $optarg;
- return (0);
- }
- warn ("Value \"", $arg, "\" invalid for option ",
- $opt, " (number expected)\n");
- $error++;
- undef $opt;
- # Push back.
- unshift (@ARGV, $starter.$rest) if defined $rest;
- }
- else {
- # Push back.
- unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
- # Supply default value.
- $arg = 0;
- }
- }
- }
-
- elsif ( $type eq "f" ) { # real number, int is also ok
- # We require at least one digit before a point or 'e',
- # and at least one digit following the point and 'e'.
- # [-]NN[.NN][eNN]
- if ( $bundling && defined $rest &&
- $rest =~ /^([-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?)(.*)$/s ) {
- $arg = $1;
- $rest = $+;
- unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
- }
- elsif ( $arg !~ /^[-+]?[0-9.]+(\.[0-9]+)?([eE][-+]?[0-9]+)?$/ ) {
- if ( defined $optarg || $mand eq "=" ) {
- if ( $passthrough ) {
- unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
- unless defined $optarg;
- return (0);
- }
- warn ("Value \"", $arg, "\" invalid for option ",
- $opt, " (real number expected)\n");
- $error++;
- undef $opt;
- # Push back.
- unshift (@ARGV, $starter.$rest) if defined $rest;
- }
- else {
- # Push back.
- unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
- # Supply default value.
- $arg = 0.0;
- }
- }
- }
- else {
- Croak ("GetOpt::Long internal error (Can't happen)\n");
- }
- return (1, $opt, $arg, $dsttype, $incr, $key);
-}
-
-# Getopt::Long Configuration.
-sub Configure (@) {
- my (@options) = @_;
-
- my $prevconfig =
- [ $error, $debug, $major_version, $minor_version,
- $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
- $gnu_compat, $passthrough, $genprefix ];
-
- if ( ref($options[0]) eq 'ARRAY' ) {
- ( $error, $debug, $major_version, $minor_version,
- $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
- $gnu_compat, $passthrough, $genprefix ) = @{shift(@options)};
- }
-
- my $opt;
- foreach $opt ( @options ) {
- my $try = lc ($opt);
- my $action = 1;
- if ( $try =~ /^no_?(.*)$/s ) {
- $action = 0;
- $try = $+;
- }
- if ( ($try eq 'default' or $try eq 'defaults') && $action ) {
- ConfigDefaults ();
- }
- elsif ( ($try eq 'posix_default' or $try eq 'posix_defaults') ) {
- local $ENV{POSIXLY_CORRECT};
- $ENV{POSIXLY_CORRECT} = 1 if $action;
- ConfigDefaults ();
- }
- elsif ( $try eq 'auto_abbrev' or $try eq 'autoabbrev' ) {
- $autoabbrev = $action;
- }
- elsif ( $try eq 'getopt_compat' ) {
- $getopt_compat = $action;
- }
- elsif ( $try eq 'gnu_getopt' ) {
- if ( $action ) {
- $gnu_compat = 1;
- $bundling = 1;
- $getopt_compat = 0;
- $permute = 1;
- }
- }
- elsif ( $try eq 'gnu_compat' ) {
- $gnu_compat = $action;
- }
- elsif ( $try eq 'ignorecase' or $try eq 'ignore_case' ) {
- $ignorecase = $action;
- }
- elsif ( $try eq 'ignore_case_always' ) {
- $ignorecase = $action ? 2 : 0;
- }
- elsif ( $try eq 'bundling' ) {
- $bundling = $action;
- }
- elsif ( $try eq 'bundling_override' ) {
- $bundling = $action ? 2 : 0;
- }
- elsif ( $try eq 'require_order' ) {
- $order = $action ? $REQUIRE_ORDER : $PERMUTE;
- }
- elsif ( $try eq 'permute' ) {
- $order = $action ? $PERMUTE : $REQUIRE_ORDER;
- }
- elsif ( $try eq 'pass_through' or $try eq 'passthrough' ) {
- $passthrough = $action;
- }
- elsif ( $try =~ /^prefix=(.+)$/ && $action ) {
- $genprefix = $1;
- # Turn into regexp. Needs to be parenthesized!
- $genprefix = "(" . quotemeta($genprefix) . ")";
- eval { '' =~ /$genprefix/; };
- Croak ("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
- }
- elsif ( $try =~ /^prefix_pattern=(.+)$/ && $action ) {
- $genprefix = $1;
- # Parenthesize if needed.
- $genprefix = "(" . $genprefix . ")"
- unless $genprefix =~ /^\(.*\)$/;
- eval { '' =~ /$genprefix/; };
- Croak ("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
- }
- elsif ( $try eq 'debug' ) {
- $debug = $action;
- }
- else {
- Croak ("Getopt::Long: unknown config parameter \"$opt\"")
- }
- }
- $prevconfig;
-}
-
-# Deprecated name.
-sub config (@) {
- Configure (@_);
-}
-
-# To prevent Carp from being loaded unnecessarily.
-sub Croak (@) {
- require 'Carp.pm';
- $Carp::CarpLevel = 1;
- Carp::croak(@_);
-};
-
-################ Documentation ################
-
-=head1 NAME
-
-Getopt::Long - Extended processing of command line options
-
-=head1 SYNOPSIS
-
- use Getopt::Long;
- $result = GetOptions (...option-descriptions...);
-
-=head1 DESCRIPTION
-
-The Getopt::Long module implements an extended getopt function called
-GetOptions(). This function adheres to the POSIX syntax for command
-line options, with GNU extensions. In general, this means that options
-have long names instead of single letters, and are introduced with a
-double dash "--". Support for bundling of command line options, as was
-the case with the more traditional single-letter approach, is provided
-but not enabled by default.
-
-=head1 Command Line Options, an Introduction
-
-Command line operated programs traditionally take their arguments from
-the command line, for example filenames or other information that the
-program needs to know. Besides arguments, these programs often take
-command line I<options> as well. Options are not necessary for the
-program to work, hence the name 'option', but are used to modify its
-default behaviour. For example, a program could do its job quietly,
-but with a suitable option it could provide verbose information about
-what it did.
-
-Command line options come in several flavours. Historically, they are
-preceded by a single dash C<->, and consist of a single letter.
-
- -l -a -c
-
-Usually, these single-character options can be bundled:
-
- -lac
-
-Options can have values, the value is placed after the option
-character. Sometimes with whitespace in between, sometimes not:
-
- -s 24 -s24
-
-Due to the very cryptic nature of these options, another style was
-developed that used long names. So instead of a cryptic C<-l> one
-could use the more descriptive C<--long>. To distinguish between a
-bundle of single-character options and a long one, two dashes are used
-to precede the option name. Early implementations of long options used
-a plus C<+> instead. Also, option values could be specified either
-like
-
- --size=24
-
-or
-
- --size 24
-
-The C<+> form is now obsolete and strongly deprecated.
-
-=head1 Getting Started with Getopt::Long
-
-Getopt::Long is the Perl5 successor of C<newgetopt.pl>. This was
-the first Perl module that provided support for handling the new style
-of command line options, hence the name Getopt::Long. This module
-also supports single-character options and bundling. In this case, the
-options are restricted to alphabetic characters only, and the
-characters C<?> and C<->.
-
-To use Getopt::Long from a Perl program, you must include the
-following line in your Perl program:
-
- use Getopt::Long;
-
-This will load the core of the Getopt::Long module and prepare your
-program for using it. Most of the actual Getopt::Long code is not
-loaded until you really call one of its functions.
-
-In the default configuration, options names may be abbreviated to
-uniqueness, case does not matter, and a single dash is sufficient,
-even for long option names. Also, options may be placed between
-non-option arguments. See L<Configuring Getopt::Long> for more
-details on how to configure Getopt::Long.
-
-=head2 Simple options
-
-The most simple options are the ones that take no values. Their mere
-presence on the command line enables the option. Popular examples are:
-
- --all --verbose --quiet --debug
-
-Handling simple options is straightforward:
-
- my $verbose = ''; # option variable with default value (false)
- my $all = ''; # option variable with default value (false)
- GetOptions ('verbose' => \$verbose, 'all' => \$all);
-
-The call to GetOptions() parses the command line arguments that are
-present in C<@ARGV> and sets the option variable to the value C<1> if
-the option did occur on the command line. Otherwise, the option
-variable is not touched. Setting the option value to true is often
-called I<enabling> the option.
-
-The option name as specified to the GetOptions() function is called
-the option I<specification>. Later we'll see that this specification
-can contain more than just the option name. The reference to the
-variable is called the option I<destination>.
-
-GetOptions() will return a true value if the command line could be
-processed successfully. Otherwise, it will write error messages to
-STDERR, and return a false result.
-
-=head2 A little bit less simple options
-
-Getopt::Long supports two useful variants of simple options:
-I<negatable> options and I<incremental> options.
-
-A negatable option is specified with a exclamation mark C<!> after the
-option name:
-
- my $verbose = ''; # option variable with default value (false)
- GetOptions ('verbose!' => \$verbose);
-
-Now, using C<--verbose> on the command line will enable C<$verbose>,
-as expected. But it is also allowed to use C<--noverbose>, which will
-disable C<$verbose> by setting its value to C<0>. Using a suitable
-default value, the program can find out whether C<$verbose> is false
-by default, or disabled by using C<--noverbose>.
-
-An incremental option is specified with a plus C<+> after the
-option name:
-
- my $verbose = ''; # option variable with default value (false)
- GetOptions ('verbose+' => \$verbose);
-
-Using C<--verbose> on the command line will increment the value of
-C<$verbose>. This way the program can keep track of how many times the
-option occurred on the command line. For example, each occurrence of
-C<--verbose> could increase the verbosity level of the program.
-
-=head2 Mixing command line option with other arguments
-
-Usually programs take command line options as well as other arguments,
-for example, file names. It is good practice to always specify the
-options first, and the other arguments last. Getopt::Long will,
-however, allow the options and arguments to be mixed and 'filter out'
-all the options before passing the rest of the arguments to the
-program. To stop Getopt::Long from processing further arguments,
-insert a double dash C<--> on the command line:
-
- --size 24 -- --all
-
-In this example, C<--all> will I<not> be treated as an option, but
-passed to the program unharmed, in C<@ARGV>.
-
-=head2 Options with values
-
-For options that take values it must be specified whether the option
-value is required or not, and what kind of value the option expects.
-
-Three kinds of values are supported: integer numbers, floating point
-numbers, and strings.
-
-If the option value is required, Getopt::Long will take the
-command line argument that follows the option and assign this to the
-option variable. If, however, the option value is specified as
-optional, this will only be done if that value does not look like a
-valid command line option itself.
-
- my $tag = ''; # option variable with default value
- GetOptions ('tag=s' => \$tag);
-
-In the option specification, the option name is followed by an equals
-sign C<=> and the letter C<s>. The equals sign indicates that this
-option requires a value. The letter C<s> indicates that this value is
-an arbitrary string. Other possible value types are C<i> for integer
-values, and C<f> for floating point values. Using a colon C<:> instead
-of the equals sign indicates that the option value is optional. In
-this case, if no suitable value is supplied, string valued options get
-an empty string C<''> assigned, while numeric options are set to C<0>.
-
-=head2 Options with multiple values
-
-Options sometimes take several values. For example, a program could
-use multiple directories to search for library files:
-
- --library lib/stdlib --library lib/extlib
-
-To accomplish this behaviour, simply specify an array reference as the
-destination for the option:
-
- my @libfiles = ();
- GetOptions ("library=s" => \@libfiles);
-
-Used with the example above, C<@libfiles> would contain two strings
-upon completion: C<"lib/srdlib"> and C<"lib/extlib">, in that order.
-It is also possible to specify that only integer or floating point
-numbers are acceptible values.
-
-Often it is useful to allow comma-separated lists of values as well as
-multiple occurrences of the options. This is easy using Perl's split()
-and join() operators:
-
- my @libfiles = ();
- GetOptions ("library=s" => \@libfiles);
- @libfiles = split(/,/,join(',',@libfiles));
-
-Of course, it is important to choose the right separator string for
-each purpose.
-
-=head2 Options with hash values
-
-If the option destination is a reference to a hash, the option will
-take, as value, strings of the form I<key>C<=>I<value>. The value will
-be stored with the specified key in the hash.
-
- my %defines = ();
- GetOptions ("define=s" => \%defines);
-
-When used with command line options:
-
- --define os=linux --define vendor=redhat
-
-the hash C<%defines> will contain two keys, C<"os"> with value
-C<"linux> and C<"vendor"> with value C<"redhat">.
-It is also possible to specify that only integer or floating point
-numbers are acceptible values. The keys are always taken to be strings.
-
-=head2 User-defined subroutines to handle options
-
-Ultimate control over what should be done when (actually: each time)
-an option is encountered on the command line can be achieved by
-designating a reference to a subroutine (or an anonymous subroutine)
-as the option destination. When GetOptions() encounters the option, it
-will call the subroutine with two arguments: the name of the option,
-and the value to be assigned. It is up to the subroutine to store the
-value, or do whatever it thinks is appropriate.
-
-A trivial application of this mechanism is to implement options that
-are related to each other. For example:
-
- my $verbose = ''; # option variable with default value (false)
- GetOptions ('verbose' => \$verbose,
- 'quiet' => sub { $verbose = 0 });
-
-Here C<--verbose> and C<--quiet> control the same variable
-C<$verbose>, but with opposite values.
-
-If the subroutine needs to signal an error, it should call die() with
-the desired error message as its argument. GetOptions() will catch the
-die(), issue the error message, and record that an error result must
-be returned upon completion.
-
-If the text of the error message starts with an exclamantion mark C<!>
-it is interpreted specially by GetOptions(). There is currently one
-special command implemented: C<die("!FINISH")> will cause GetOptions()
-to stop processing options, as if it encountered a double dash C<-->.
-
-=head2 Options with multiple names
-
-Often it is user friendly to supply alternate mnemonic names for
-options. For example C<--height> could be an alternate name for
-C<--length>. Alternate names can be included in the option
-specification, separated by vertical bar C<|> characters. To implement
-the above example:
-
- GetOptions ('length|height=f' => \$length);
-
-The first name is called the I<primary> name, the other names are
-called I<aliases>.
-
-Multiple alternate names are possible.
-
-=head2 Case and abbreviations
-
-Without additional configuration, GetOptions() will ignore the case of
-option names, and allow the options to be abbreviated to uniqueness.
-
- GetOptions ('length|height=f' => \$length, "head" => \$head);
-
-This call will allow C<--l> and C<--L> for the length option, but
-requires a least C<--hea> and C<--hei> for the head and height options.
-
-=head2 Summary of Option Specifications
-
-Each option specifier consists of two parts: the name specification
-and the argument specification.
-
-The name specification contains the name of the option, optionally
-followed by a list of alternative names separated by vertical bar
-characters.
-
- length option name is "length"
- length|size|l name is "length", aliases are "size" and "l"
-
-The argument specification is optional. If omitted, the option is
-considered boolean, a value of 1 will be assigned when the option is
-used on the command line.
-
-The argument specification can be
-
-=over
-
-=item !
-
-The option does not take an argument and may be negated, i.e. prefixed
-by "no". E.g. C<"foo!"> will allow C<--foo> (a value of 1 will be
-assigned) and C<--nofoo> (a value of 0 will be assigned). If the
-option has aliases, this applies to the aliases as well.
-
-Using negation on a single letter option when bundling is in effect is
-pointless and will result in a warning.
-
-=item +
-
-The option does not take an argument and will be incremented by 1
-every time it appears on the command line. E.g. C<"more+">, when used
-with C<--more --more --more>, will increment the value three times,
-resulting in a value of 3 (provided it was 0 or undefined at first).
-
-The C<+> specifier is ignored if the option destination is not a scalar.
-
-=item = I<type> [ I<desttype> ]
-
-The option requires an argument of the given type. Supported types
-are:
-
-=over
-
-=item s
-
-String. An arbitrary sequence of characters. It is valid for the
-argument to start with C<-> or C<-->.
-
-=item i
-
-Integer. An optional leading plus or minus sign, followed by a
-sequence of digits.
-
-=item f
-
-Real number. For example C<3.14>, C<-6.23E24> and so on.
-
-=back
-
-The I<desttype> can be C<@> or C<%> to specify that the option is
-list or a hash valued. This is only needed when the destination for
-the option value is not otherwise specified. It should be omitted when
-not needed.
-
-=item : I<type> [ I<desttype> ]
-
-Like C<=>, but designates the argument as optional.
-If omitted, an empty string will be assigned to string values options,
-and the value zero to numeric options.
-
-Note that if a string argument starts with C<-> or C<-->, it will be
-considered an option on itself.
-
-=back
-
-=head1 Advanced Possibilities
-
-=head2 Object oriented interface
-
-Getopt::Long can be used in an object oriented way as well:
-
- use Getopt::Long;
- $p = new Getopt::Long::Parser;
- $p->configure(...configuration options...);
- if ($p->getoptions(...options descriptions...)) ...
-
-Configuration options can be passed to the constructor:
-
- $p = new Getopt::Long::Parser
- config => [...configuration options...];
-
-For thread safety, each method call will acquire an exclusive lock to
-the Getopt::Long module. So don't call these methods from a callback
-routine!
-
-=head2 Documentation and help texts
-
-Getopt::Long encourages the use of Pod::Usage to produce help
-messages. For example:
-
- use Getopt::Long;
- use Pod::Usage;
-
- my $man = 0;
- my $help = 0;
-
- GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
- pod2usage(1) if $help;
- pod2usage(-exitstatus => 0, -verbose => 2) if $man;
-
- __END__
-
- =head1 NAME
-
- sample - Using GetOpt::Long and Pod::Usage
-
- =head1 SYNOPSIS
-
- sample [options] [file ...]
-
- Options:
- -help brief help message
- -man full documentation
-
- =head1 OPTIONS
-
- =over 8
-
- =item B<-help>
-
- Print a brief help message and exits.
-
- =item B<-man>
-
- Prints the manual page and exits.
-
- =back
-
- =head1 DESCRIPTION
-
- B<This program> will read the given input file(s) and do someting
- useful with the contents thereof.
-
- =cut
-
-See L<Pod::Usage> for details.
-
-=head2 Storing options in a hash
-
-Sometimes, for example when there are a lot of options, having a
-separate variable for each of them can be cumbersome. GetOptions()
-supports, as an alternative mechanism, storing options in a hash.
-
-To obtain this, a reference to a hash must be passed I<as the first
-argument> to GetOptions(). For each option that is specified on the
-command line, the option value will be stored in the hash with the
-option name as key. Options that are not actually used on the command
-line will not be put in the hash, on other words,
-C<exists($h{option})> (or defined()) can be used to test if an option
-was used. The drawback is that warnings will be issued if the program
-runs under C<use strict> and uses C<$h{option}> without testing with
-exists() or defined() first.
-
- my %h = ();
- GetOptions (\%h, 'length=i'); # will store in $h{length}
-
-For options that take list or hash values, it is necessary to indicate
-this by appending an C<@> or C<%> sign after the type:
-
- GetOptions (\%h, 'colours=s@'); # will push to @{$h{colours}}
-
-To make things more complicated, the hash may contain references to
-the actual destinations, for example:
-
- my $len = 0;
- my %h = ('length' => \$len);
- GetOptions (\%h, 'length=i'); # will store in $len
-
-This example is fully equivalent with:
-
- my $len = 0;
- GetOptions ('length=i' => \$len); # will store in $len
-
-Any mixture is possible. For example, the most frequently used options
-could be stored in variables while all other options get stored in the
-hash:
-
- my $verbose = 0; # frequently referred
- my $debug = 0; # frequently referred
- my %h = ('verbose' => \$verbose, 'debug' => \$debug);
- GetOptions (\%h, 'verbose', 'debug', 'filter', 'size=i');
- if ( $verbose ) { ... }
- if ( exists $h{filter} ) { ... option 'filter' was specified ... }
-
-=head2 Bundling
-
-With bundling it is possible to set several single-character options
-at once. For example if C<a>, C<v> and C<x> are all valid options,
-
- -vax
-
-would set all three.
-
-Getopt::Long supports two levels of bundling. To enable bundling, a
-call to Getopt::Long::Configure is required.
-
-The first level of bundling can be enabled with:
-
- Getopt::Long::Configure ("bundling");
-
-Configured this way, single-character options can be bundled but long
-options B<must> always start with a double dash C<--> to avoid
-abiguity. For example, when C<vax>, C<a>, C<v> and C<x> are all valid
-options,
-
- -vax
-
-would set C<a>, C<v> and C<x>, but
-
- --vax
-
-would set C<vax>.
-
-The second level of bundling lifts this restriction. It can be enabled
-with:
-
- Getopt::Long::Configure ("bundling_override");
-
-Now, C<-vax> would set the option C<vax>.
-
-When any level of bundling is enabled, option values may be inserted
-in the bundle. For example:
-
- -h24w80
-
-is equivalent to
-
- -h 24 -w 80
-
-When configured for bundling, single-character options are matched
-case sensitive while long options are matched case insensitive. To
-have the single-character options matched case insensitive as well,
-use:
-
- Getopt::Long::Configure ("bundling", "ignorecase_always");
-
-It goes without saying that bundling can be quite confusing.
-
-=head2 The lonesome dash
-
-Normally, a lone dash C<-> on the command line will not be considered
-an option. Option processing will terminate (unless "permute" is
-configured) and the dash will be left in C<@ARGV>.
-
-It is possible to get special treatment for a lone dash. This can be
-achieved by adding an option specification with an empty name, for
-example:
-
- GetOptions ('' => \$stdio);
-
-A lone dash on the command line will now be a legal option, and using
-it will set variable C<$stdio>.
-
-=head2 Argument call-back
-
-A special option 'name' C<<>> can be used to designate a subroutine
-to handle non-option arguments. When GetOptions() encounters an
-argument that does not look like an option, it will immediately call this
-subroutine and passes it the argument as a parameter.
-
-For example:
-
- my $width = 80;
- sub process { ... }
- GetOptions ('width=i' => \$width, '<>' => \&process);
-
-When applied to the following command line:
-
- arg1 --width=72 arg2 --width=60 arg3
-
-This will call
-C<process("arg1")> while C<$width> is C<80>,
-C<process("arg2")> while C<$width> is C<72>, and
-C<process("arg3")> while C<$width> is C<60>.
-
-This feature requires configuration option B<permute>, see section
-L<Configuring Getopt::Long>.
-
-
-=head1 Configuring Getopt::Long
-
-Getopt::Long can be configured by calling subroutine
-Getopt::Long::Configure(). This subroutine takes a list of quoted
-strings, each specifying a configuration option to be enabled, e.g.
-C<ignore_case>, or disabled, e.g. C<no_ignore_case>. Case does not
-matter. Multiple calls to Configure() are possible.
-
-Alternatively, as of version 2.24, the configuration options may be
-passed together with the C<use> statement:
-
- use Getopt::Long qw(:config no_ignore_case bundling);
-
-The following options are available:
-
-=over 12
-
-=item default
-
-This option causes all configuration options to be reset to their
-default values.
-
-=item posix_default
-
-This option causes all configuration options to be reset to their
-default values as if the environment variable POSIXLY_CORRECT had
-been set.
-
-=item auto_abbrev
-
-Allow option names to be abbreviated to uniqueness.
-Default is enabled unless environment variable
-POSIXLY_CORRECT has been set, in which case C<auto_abbrev> is disabled.
-
-=item getopt_compat
-
-Allow C<+> to start options.
-Default is enabled unless environment variable
-POSIXLY_CORRECT has been set, in which case C<getopt_compat> is disabled.
-
-=item gnu_compat
-
-C<gnu_compat> controls whether C<--opt=> is allowed, and what it should
-do. Without C<gnu_compat>, C<--opt=> gives an error. With C<gnu_compat>,
-C<--opt=> will give option C<opt> and empty value.
-This is the way GNU getopt_long() does it.
-
-=item gnu_getopt
-
-This is a short way of setting C<gnu_compat> C<bundling> C<permute>
-C<no_getopt_compat>. With C<gnu_getopt>, command line handling should be
-fully compatible with GNU getopt_long().
-
-=item require_order
-
-Whether command line arguments are allowed to be mixed with options.
-Default is disabled unless environment variable
-POSIXLY_CORRECT has been set, in which case C<require_order> is enabled.
-
-See also C<permute>, which is the opposite of C<require_order>.
-
-=item permute
-
-Whether command line arguments are allowed to be mixed with options.
-Default is enabled unless environment variable
-POSIXLY_CORRECT has been set, in which case C<permute> is disabled.
-Note that C<permute> is the opposite of C<require_order>.
-
-If C<permute> is enabled, this means that
-
- --foo arg1 --bar arg2 arg3
-
-is equivalent to
-
- --foo --bar arg1 arg2 arg3
-
-If an argument call-back routine is specified, C<@ARGV> will always be
-empty upon succesful return of GetOptions() since all options have been
-processed. The only exception is when C<--> is used:
-
- --foo arg1 --bar arg2 -- arg3
-
-will call the call-back routine for arg1 and arg2, and terminate
-GetOptions() leaving C<"arg2"> in C<@ARGV>.
-
-If C<require_order> is enabled, options processing
-terminates when the first non-option is encountered.
-
- --foo arg1 --bar arg2 arg3
-
-is equivalent to
-
- --foo -- arg1 --bar arg2 arg3
-
-If C<pass_through> is also enabled, options processing will terminate
-at the first unrecognized option, or non-option, whichever comes
-first.
-
-=item bundling (default: disabled)
-
-Enabling this option will allow single-character options to be bundled.
-To distinguish bundles from long option names, long options I<must> be
-introduced with C<--> and single-character options (and bundles) with
-C<->.
-
-Note: disabling C<bundling> also disables C<bundling_override>.
-
-=item bundling_override (default: disabled)
-
-If C<bundling_override> is enabled, bundling is enabled as with
-C<bundling> but now long option names override option bundles.
-
-Note: disabling C<bundling_override> also disables C<bundling>.
-
-B<Note:> Using option bundling can easily lead to unexpected results,
-especially when mixing long options and bundles. Caveat emptor.
-
-=item ignore_case (default: enabled)
-
-If enabled, case is ignored when matching long option names. Single
-character options will be treated case-sensitive.
-
-Note: disabling C<ignore_case> also disables C<ignore_case_always>.
-
-=item ignore_case_always (default: disabled)
-
-When bundling is in effect, case is ignored on single-character
-options also.
-
-Note: disabling C<ignore_case_always> also disables C<ignore_case>.
-
-=item pass_through (default: disabled)
-
-Options that are unknown, ambiguous or supplied with an invalid option
-value are passed through in C<@ARGV> instead of being flagged as
-errors. This makes it possible to write wrapper scripts that process
-only part of the user supplied command line arguments, and pass the
-remaining options to some other program.
-
-If C<require_order> is enabled, options processing will terminate at
-the first unrecognized option, or non-option, whichever comes first.
-However, if C<permute> is enabled instead, results can become confusing.
-
-=item prefix
-
-The string that starts options. If a constant string is not
-sufficient, see C<prefix_pattern>.
-
-=item prefix_pattern
-
-A Perl pattern that identifies the strings that introduce options.
-Default is C<(--|-|\+)> unless environment variable
-POSIXLY_CORRECT has been set, in which case it is C<(--|-)>.
-
-=item debug (default: disabled)
-
-Enable debugging output.
-
-=back
-
-=head1 Return values and Errors
-
-Configuration errors and errors in the option definitions are
-signalled using die() and will terminate the calling program unless
-the call to Getopt::Long::GetOptions() was embedded in C<eval { ...
-}>, or die() was trapped using C<$SIG{__DIE__}>.
-
-GetOptions returns true to indicate success.
-It returns false when the function detected one or more errors during
-option parsing. These errors are signalled using warn() and can be
-trapped with C<$SIG{__WARN__}>.
-
-Errors that can't happen are signalled using Carp::croak().
-
-=head1 Legacy
-
-The earliest development of C<newgetopt.pl> started in 1990, with Perl
-version 4. As a result, its development, and the development of
-Getopt::Long, has gone through several stages. Since backward
-compatibility has always been extremely important, the current version
-of Getopt::Long still supports a lot of constructs that nowadays are
-no longer necessary or otherwise unwanted. This section describes
-briefly some of these 'features'.
-
-=head2 Default destinations
-
-When no destination is specified for an option, GetOptions will store
-the resultant value in a global variable named C<opt_>I<XXX>, where
-I<XXX> is the primary name of this option. When a progam executes
-under C<use strict> (recommended), these variables must be
-pre-declared with our() or C<use vars>.
-
- our $opt_length = 0;
- GetOptions ('length=i'); # will store in $opt_length
-
-To yield a usable Perl variable, characters that are not part of the
-syntax for variables are translated to underscores. For example,
-C<--fpp-struct-return> will set the variable
-C<$opt_fpp_struct_return>. Note that this variable resides in the
-namespace of the calling program, not necessarily C<main>. For
-example:
-
- GetOptions ("size=i", "sizes=i@");
-
-with command line "-size 10 -sizes 24 -sizes 48" will perform the
-equivalent of the assignments
-
- $opt_size = 10;
- @opt_sizes = (24, 48);
-
-=head2 Alternative option starters
-
-A string of alternative option starter characters may be passed as the
-first argument (or the first argument after a leading hash reference
-argument).
-
- my $len = 0;
- GetOptions ('/', 'length=i' => $len);
-
-Now the command line may look like:
-
- /length 24 -- arg
-
-Note that to terminate options processing still requires a double dash
-C<-->.
-
-GetOptions() will not interpret a leading C<< "<>" >> as option starters
-if the next argument is a reference. To force C<< "<" >> and C<< ">" >> as
-option starters, use C<< "><" >>. Confusing? Well, B<using a starter
-argument is strongly deprecated> anyway.
-
-=head2 Configuration variables
-
-Previous versions of Getopt::Long used variables for the purpose of
-configuring. Although manipulating these variables still work, it is
-strongly encouraged to use the C<Configure> routine that was introduced
-in version 2.17. Besides, it is much easier.
-
-=head1 Trouble Shooting
-
-=head2 Warning: Ignoring '!' modifier for short option
-
-This warning is issued when the '!' modifier is applied to a short
-(one-character) option and bundling is in effect. E.g.,
-
- Getopt::Long::Configure("bundling");
- GetOptions("foo|f!" => \$foo);
-
-Note that older Getopt::Long versions did not issue a warning, because
-the '!' modifier was applied to the first name only. This bug was
-fixed in 2.22.
-
-Solution: separate the long and short names and apply the '!' to the
-long names only, e.g.,
-
- GetOptions("foo!" => \$foo, "f" => \$foo);
-
-=head2 GetOptions does not return a false result when an option is not supplied
-
-That's why they're called 'options'.
-
-=head1 AUTHOR
-
-Johan Vromans <jvromans@squirrel.nl>
-
-=head1 COPYRIGHT AND DISCLAIMER
-
-This program is Copyright 2000,1990 by Johan Vromans.
-This program is free software; you can redistribute it and/or
-modify it under the terms of the Perl Artistic License or the
-GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-If you do not have a copy of the GNU General Public License write to
-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
-MA 02139, USA.
-
-=cut
-
-# Local Variables:
-# eval: (load-file "pod.el")
-# End:
diff --git a/contrib/perl5/lib/Getopt/Std.pm b/contrib/perl5/lib/Getopt/Std.pm
deleted file mode 100644
index e5b369c..0000000
--- a/contrib/perl5/lib/Getopt/Std.pm
+++ /dev/null
@@ -1,176 +0,0 @@
-package Getopt::Std;
-require 5.000;
-require Exporter;
-
-=head1 NAME
-
-getopt - Process single-character switches with switch clustering
-
-getopts - Process single-character switches with switch clustering
-
-=head1 SYNOPSIS
-
- use Getopt::Std;
-
- getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect.
- getopt('oDI', \%opts); # -o, -D & -I take arg. Values in %opts
- getopts('oif:'); # -o & -i are boolean flags, -f takes an argument
- # Sets opt_* as a side effect.
- getopts('oif:', \%opts); # options as above. Values in %opts
-
-=head1 DESCRIPTION
-
-The getopt() functions processes single-character switches with switch
-clustering. Pass one argument which is a string containing all switches
-that take an argument. For each switch found, sets $opt_x (where x is the
-switch name) to the value of the argument, or 1 if no argument. Switches
-which take an argument don't care whether there is a space between the
-switch and the argument.
-
-Note that, if your code is running under the recommended C<use strict
-'vars'> pragma, you will need to declare these package variables
-with "our":
-
- our($opt_foo, $opt_bar);
-
-For those of you who don't like additional global variables being created, getopt()
-and getopts() will also accept a hash reference as an optional second argument.
-Hash keys will be x (where x is the switch name) with key values the value of
-the argument or 1 if no argument is specified.
-
-To allow programs to process arguments that look like switches, but aren't,
-both functions will stop processing switches when they see the argument
-C<-->. The C<--> will be removed from @ARGV.
-
-=cut
-
-@ISA = qw(Exporter);
-@EXPORT = qw(getopt getopts);
-$VERSION = '1.02';
-
-# Process single-character switches with switch clustering. Pass one argument
-# which is a string containing all switches that take an argument. For each
-# switch found, sets $opt_x (where x is the switch name) to the value of the
-# argument, or 1 if no argument. Switches which take an argument don't care
-# whether there is a space between the switch and the argument.
-
-# Usage:
-# getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect.
-
-sub getopt ($;$) {
- local($argumentative, $hash) = @_;
- local($_,$first,$rest);
- local @EXPORT;
-
- while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
- ($first,$rest) = ($1,$2);
- if (/^--$/) { # early exit if --
- shift @ARGV;
- last;
- }
- if (index($argumentative,$first) >= 0) {
- if ($rest ne '') {
- shift(@ARGV);
- }
- else {
- shift(@ARGV);
- $rest = shift(@ARGV);
- }
- if (ref $hash) {
- $$hash{$first} = $rest;
- }
- else {
- ${"opt_$first"} = $rest;
- push( @EXPORT, "\$opt_$first" );
- }
- }
- else {
- if (ref $hash) {
- $$hash{$first} = 1;
- }
- else {
- ${"opt_$first"} = 1;
- push( @EXPORT, "\$opt_$first" );
- }
- if ($rest ne '') {
- $ARGV[0] = "-$rest";
- }
- else {
- shift(@ARGV);
- }
- }
- }
- unless (ref $hash) {
- local $Exporter::ExportLevel = 1;
- import Getopt::Std;
- }
-}
-
-# Usage:
-# getopts('a:bc'); # -a takes arg. -b & -c not. Sets opt_* as a
-# # side effect.
-
-sub getopts ($;$) {
- local($argumentative, $hash) = @_;
- local(@args,$_,$first,$rest);
- local($errs) = 0;
- local @EXPORT;
-
- @args = split( / */, $argumentative );
- while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
- ($first,$rest) = ($1,$2);
- if (/^--$/) { # early exit if --
- shift @ARGV;
- last;
- }
- $pos = index($argumentative,$first);
- if ($pos >= 0) {
- if (defined($args[$pos+1]) and ($args[$pos+1] eq ':')) {
- shift(@ARGV);
- if ($rest eq '') {
- ++$errs unless @ARGV;
- $rest = shift(@ARGV);
- }
- if (ref $hash) {
- $$hash{$first} = $rest;
- }
- else {
- ${"opt_$first"} = $rest;
- push( @EXPORT, "\$opt_$first" );
- }
- }
- else {
- if (ref $hash) {
- $$hash{$first} = 1;
- }
- else {
- ${"opt_$first"} = 1;
- push( @EXPORT, "\$opt_$first" );
- }
- if ($rest eq '') {
- shift(@ARGV);
- }
- else {
- $ARGV[0] = "-$rest";
- }
- }
- }
- else {
- warn "Unknown option: $first\n";
- ++$errs;
- if ($rest ne '') {
- $ARGV[0] = "-$rest";
- }
- else {
- shift(@ARGV);
- }
- }
- }
- unless (ref $hash) {
- local $Exporter::ExportLevel = 1;
- import Getopt::Std;
- }
- $errs == 0;
-}
-
-1;
diff --git a/contrib/perl5/lib/I18N/Collate.pm b/contrib/perl5/lib/I18N/Collate.pm
deleted file mode 100644
index 64a03a2..0000000
--- a/contrib/perl5/lib/I18N/Collate.pm
+++ /dev/null
@@ -1,190 +0,0 @@
-package I18N::Collate;
-
-=head1 NAME
-
-I18N::Collate - compare 8-bit scalar data according to the current locale
-
- ***
-
- WARNING: starting from the Perl version 5.003_06
- the I18N::Collate interface for comparing 8-bit scalar data
- according to the current locale
-
- HAS BEEN DEPRECATED
-
- That is, please do not use it anymore for any new applications
- and please migrate the old applications away from it because its
- functionality was integrated into the Perl core language in the
- release 5.003_06.
-
- See the perllocale manual page for further information.
-
- ***
-
-=head1 SYNOPSIS
-
- use I18N::Collate;
- setlocale(LC_COLLATE, 'locale-of-your-choice');
- $s1 = new I18N::Collate "scalar_data_1";
- $s2 = new I18N::Collate "scalar_data_2";
-
-=head1 DESCRIPTION
-
-This module provides you with objects that will collate
-according to your national character set, provided that the
-POSIX setlocale() function is supported on your system.
-
-You can compare $s1 and $s2 above with
-
- $s1 le $s2
-
-to extract the data itself, you'll need a dereference: $$s1
-
-This module uses POSIX::setlocale(). The basic collation conversion is
-done by strxfrm() which terminates at NUL characters being a decent C
-routine. collate_xfrm() handles embedded NUL characters gracefully.
-
-The available locales depend on your operating system; try whether
-C<locale -a> shows them or man pages for "locale" or "nlsinfo" or the
-direct approach C<ls /usr/lib/nls/loc> or C<ls /usr/lib/nls> or
-C<ls /usr/lib/locale>. Not all the locales that your vendor supports
-are necessarily installed: please consult your operating system's
-documentation and possibly your local system administration. The
-locale names are probably something like C<xx_XX.(ISO)?8859-N> or
-C<xx_XX.(ISO)?8859N>, for example C<fr_CH.ISO8859-1> is the Swiss (CH)
-variant of French (fr), ISO Latin (8859) 1 (-1) which is the Western
-European character set.
-
-=cut
-
-# I18N::Collate.pm
-#
-# Author: Jarkko Hietaniemi <F<jhi@iki.fi>>
-# Helsinki University of Technology, Finland
-#
-# Acks: Guy Decoux <F<decoux@moulon.inra.fr>> understood
-# overloading magic much deeper than I and told
-# how to cut the size of this code by more than half.
-# (my first version did overload all of lt gt eq le ge cmp)
-#
-# Purpose: compare 8-bit scalar data according to the current locale
-#
-# Requirements: Perl5 POSIX::setlocale() and POSIX::strxfrm()
-#
-# Exports: setlocale 1)
-# collate_xfrm 2)
-#
-# Overloads: cmp # 3)
-#
-# Usage: use I18N::Collate;
-# setlocale(LC_COLLATE, 'locale-of-your-choice'); # 4)
-# $s1 = new I18N::Collate "scalar_data_1";
-# $s2 = new I18N::Collate "scalar_data_2";
-#
-# now you can compare $s1 and $s2: $s1 le $s2
-# to extract the data itself, you need to deref: $$s1
-#
-# Notes:
-# 1) this uses POSIX::setlocale
-# 2) the basic collation conversion is done by strxfrm() which
-# terminates at NUL characters being a decent C routine.
-# collate_xfrm handles embedded NUL characters gracefully.
-# 3) due to cmp and overload magic, lt le eq ge gt work also
-# 4) the available locales depend on your operating system;
-# try whether "locale -a" shows them or man pages for
-# "locale" or "nlsinfo" work or the more direct
-# approach "ls /usr/lib/nls/loc" or "ls /usr/lib/nls".
-# Not all the locales that your vendor supports
-# are necessarily installed: please consult your
-# operating system's documentation.
-# The locale names are probably something like
-# 'xx_XX.(ISO)?8859-N' or 'xx_XX.(ISO)?8859N',
-# for example 'fr_CH.ISO8859-1' is the Swiss (CH)
-# variant of French (fr), ISO Latin (8859) 1 (-1)
-# which is the Western European character set.
-#
-# Updated: 19961005
-#
-# ---
-
-use POSIX qw(strxfrm LC_COLLATE);
-use warnings::register;
-
-require Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(collate_xfrm setlocale LC_COLLATE);
-@EXPORT_OK = qw();
-
-use overload qw(
-fallback 1
-cmp collate_cmp
-);
-
-sub new {
- my $new = $_[1];
-
- if (warnings::enabled() && $] >= 5.003_06) {
- unless ($please_use_I18N_Collate_even_if_deprecated) {
- warnings::warn <<___EOD___;
-***
-
- WARNING: starting from the Perl version 5.003_06
- the I18N::Collate interface for comparing 8-bit scalar data
- according to the current locale
-
- HAS BEEN DEPRECATED
-
- That is, please do not use it anymore for any new applications
- and please migrate the old applications away from it because its
- functionality was integrated into the Perl core language in the
- release 5.003_06.
-
- See the perllocale manual page for further information.
-
-***
-___EOD___
- $please_use_I18N_Collate_even_if_deprecated++;
- }
- }
-
- bless \$new;
-}
-
-sub setlocale {
- my ($category, $locale) = @_[0,1];
-
- POSIX::setlocale($category, $locale) if (defined $category);
- # the current $LOCALE
- $LOCALE = $locale || $ENV{'LC_COLLATE'} || $ENV{'LC_ALL'} || '';
-}
-
-sub C {
- my $s = ${$_[0]};
-
- $C->{$LOCALE}->{$s} = collate_xfrm($s)
- unless (defined $C->{$LOCALE}->{$s}); # cache when met
-
- $C->{$LOCALE}->{$s};
-}
-
-sub collate_xfrm {
- my $s = $_[0];
- my $x = '';
-
- for (split(/(\000+)/, $s)) {
- $x .= (/^\000/) ? $_ : strxfrm("$_\000");
- }
-
- $x;
-}
-
-sub collate_cmp {
- &C($_[0]) cmp &C($_[1]);
-}
-
-# init $LOCALE
-
-&I18N::Collate::setlocale();
-
-1; # keep require happy
diff --git a/contrib/perl5/lib/IPC/Open2.pm b/contrib/perl5/lib/IPC/Open2.pm
deleted file mode 100644
index a5a3561..0000000
--- a/contrib/perl5/lib/IPC/Open2.pm
+++ /dev/null
@@ -1,118 +0,0 @@
-package IPC::Open2;
-
-use strict;
-our ($VERSION, @ISA, @EXPORT);
-
-require 5.000;
-require Exporter;
-
-$VERSION = 1.01;
-@ISA = qw(Exporter);
-@EXPORT = qw(open2);
-
-=head1 NAME
-
-IPC::Open2, open2 - open a process for both reading and writing
-
-=head1 SYNOPSIS
-
- use IPC::Open2;
-
- $pid = open2(\*RDRFH, \*WTRFH, 'some cmd and args');
- # or without using the shell
- $pid = open2(\*RDRFH, \*WTRFH, 'some', 'cmd', 'and', 'args');
-
- # or with handle autovivification
- my($rdrfh, $wtrfh);
- $pid = open2($rdrfh, $wtrfh, 'some cmd and args');
- # or without using the shell
- $pid = open2($rdrfh, $wtrfh, 'some', 'cmd', 'and', 'args');
-
-=head1 DESCRIPTION
-
-The open2() function runs the given $cmd and connects $rdrfh for
-reading and $wtrfh for writing. It's what you think should work
-when you try
-
- $pid = open(HANDLE, "|cmd args|");
-
-The write filehandle will have autoflush turned on.
-
-If $rdrfh is a string (that is, a bareword filehandle rather than a glob
-or a reference) and it begins with C<< >& >>, then the child will send output
-directly to that file handle. If $wtrfh is a string that begins with
-C<< <& >>, then $wtrfh will be closed in the parent, and the child will read
-from it directly. In both cases, there will be a dup(2) instead of a
-pipe(2) made.
-
-If either reader or writer is the null string, this will be replaced
-by an autogenerated filehandle. If so, you must pass a valid lvalue
-in the parameter slot so it can be overwritten in the caller, or
-an exception will be raised.
-
-open2() returns the process ID of the child process. It doesn't return on
-failure: it just raises an exception matching C</^open2:/>. However,
-C<exec> failures in the child are not detected. You'll have to
-trap SIGPIPE yourself.
-
-open2() does not wait for and reap the child process after it exits.
-Except for short programs where it's acceptable to let the operating system
-take care of this, you need to do this yourself. This is normally as
-simple as calling C<waitpid $pid, 0> when you're done with the process.
-Failing to do this can result in an accumulation of defunct or "zombie"
-processes. See L<perlfunc/waitpid> for more information.
-
-This whole affair is quite dangerous, as you may block forever. It
-assumes it's going to talk to something like B<bc>, both writing
-to it and reading from it. This is presumably safe because you
-"know" that commands like B<bc> will read a line at a time and
-output a line at a time. Programs like B<sort> that read their
-entire input stream first, however, are quite apt to cause deadlock.
-
-The big problem with this approach is that if you don't have control
-over source code being run in the child process, you can't control
-what it does with pipe buffering. Thus you can't just open a pipe to
-C<cat -v> and continually read and write a line from it.
-
-The IO::Pty and Expect modules from CPAN can help with this, as they
-provide a real tty (well, a pseudo-tty, actually), which gets you
-back to line buffering in the invoked command again.
-
-=head1 WARNING
-
-The order of arguments differs from that of open3().
-
-=head1 SEE ALSO
-
-See L<IPC::Open3> for an alternative that handles STDERR as well. This
-function is really just a wrapper around open3().
-
-=cut
-
-# &open2: tom christiansen, <tchrist@convex.com>
-#
-# usage: $pid = open2('rdr', 'wtr', 'some cmd and args');
-# or $pid = open2('rdr', 'wtr', 'some', 'cmd', 'and', 'args');
-#
-# spawn the given $cmd and connect $rdr for
-# reading and $wtr for writing. return pid
-# of child, or 0 on failure.
-#
-# WARNING: this is dangerous, as you may block forever
-# unless you are very careful.
-#
-# $wtr is left unbuffered.
-#
-# abort program if
-# rdr or wtr are null
-# a system call fails
-
-require IPC::Open3;
-
-sub open2 {
- local $Carp::CarpLevel = $Carp::CarpLevel + 1;
- return IPC::Open3::_open3('open2', scalar caller,
- $_[1], $_[0], '>&STDERR', @_[2 .. $#_]);
-}
-
-1
diff --git a/contrib/perl5/lib/IPC/Open3.pm b/contrib/perl5/lib/IPC/Open3.pm
deleted file mode 100644
index 5c9c69a..0000000
--- a/contrib/perl5/lib/IPC/Open3.pm
+++ /dev/null
@@ -1,333 +0,0 @@
-package IPC::Open3;
-
-use strict;
-no strict 'refs'; # because users pass me bareword filehandles
-our ($VERSION, @ISA, @EXPORT);
-
-require Exporter;
-
-use Carp;
-use Symbol qw(gensym qualify);
-
-$VERSION = 1.0103;
-@ISA = qw(Exporter);
-@EXPORT = qw(open3);
-
-=head1 NAME
-
-IPC::Open3, open3 - open a process for reading, writing, and error handling
-
-=head1 SYNOPSIS
-
- $pid = open3(\*WTRFH, \*RDRFH, \*ERRFH,
- 'some cmd and args', 'optarg', ...);
-
- my($wtr, $rdr, $err);
- $pid = open3($wtr, $rdr, $err,
- 'some cmd and args', 'optarg', ...);
-
-=head1 DESCRIPTION
-
-Extremely similar to open2(), open3() spawns the given $cmd and
-connects RDRFH for reading, WTRFH for writing, and ERRFH for errors. If
-ERRFH is false, or the same file descriptor as RDRFH, then STDOUT and
-STDERR of the child are on the same filehandle. The WTRFH will have
-autoflush turned on.
-
-If WTRFH begins with C<< <& >>, then WTRFH will be closed in the parent, and
-the child will read from it directly. If RDRFH or ERRFH begins with
-C<< >& >>, then the child will send output directly to that filehandle.
-In both cases, there will be a dup(2) instead of a pipe(2) made.
-
-If either reader or writer is the null string, this will be replaced
-by an autogenerated filehandle. If so, you must pass a valid lvalue
-in the parameter slot so it can be overwritten in the caller, or
-an exception will be raised.
-
-The filehandles may also be integers, in which case they are understood
-as file descriptors.
-
-open3() returns the process ID of the child process. It doesn't return on
-failure: it just raises an exception matching C</^open3:/>. However,
-C<exec> failures in the child are not detected. You'll have to
-trap SIGPIPE yourself.
-
-open3() does not wait for and reap the child process after it exits.
-Except for short programs where it's acceptable to let the operating system
-take care of this, you need to do this yourself. This is normally as
-simple as calling C<waitpid $pid, 0> when you're done with the process.
-Failing to do this can result in an accumulation of defunct or "zombie"
-processes. See L<perlfunc/waitpid> for more information.
-
-If you try to read from the child's stdout writer and their stderr
-writer, you'll have problems with blocking, which means you'll want
-to use select() or the IO::Select, which means you'd best use
-sysread() instead of readline() for normal stuff.
-
-This is very dangerous, as you may block forever. It assumes it's
-going to talk to something like B<bc>, both writing to it and reading
-from it. This is presumably safe because you "know" that commands
-like B<bc> will read a line at a time and output a line at a time.
-Programs like B<sort> that read their entire input stream first,
-however, are quite apt to cause deadlock.
-
-The big problem with this approach is that if you don't have control
-over source code being run in the child process, you can't control
-what it does with pipe buffering. Thus you can't just open a pipe to
-C<cat -v> and continually read and write a line from it.
-
-=head1 WARNING
-
-The order of arguments differs from that of open2().
-
-=cut
-
-# &open3: Marc Horowitz <marc@mit.edu>
-# derived mostly from &open2 by tom christiansen, <tchrist@convex.com>
-# fixed for 5.001 by Ulrich Kunitz <kunitz@mai-koeln.com>
-# ported to Win32 by Ron Schmidt, Merrill Lynch almost ended my career
-# fixed for autovivving FHs, tchrist again
-# allow fd numbers to be used, by Frank Tobin
-#
-# $Id: open3.pl,v 1.1 1993/11/23 06:26:15 marc Exp $
-#
-# usage: $pid = open3('wtr', 'rdr', 'err' 'some cmd and args', 'optarg', ...);
-#
-# spawn the given $cmd and connect rdr for
-# reading, wtr for writing, and err for errors.
-# if err is '', or the same as rdr, then stdout and
-# stderr of the child are on the same fh. returns pid
-# of child (or dies on failure).
-
-
-# if wtr begins with '<&', then wtr will be closed in the parent, and
-# the child will read from it directly. if rdr or err begins with
-# '>&', then the child will send output directly to that fd. In both
-# cases, there will be a dup() instead of a pipe() made.
-
-
-# WARNING: this is dangerous, as you may block forever
-# unless you are very careful.
-#
-# $wtr is left unbuffered.
-#
-# abort program if
-# rdr or wtr are null
-# a system call fails
-
-our $Me = 'open3 (bug)'; # you should never see this, it's always localized
-
-# Fatal.pm needs to be fixed WRT prototypes.
-
-sub xfork {
- my $pid = fork;
- defined $pid or croak "$Me: fork failed: $!";
- return $pid;
-}
-
-sub xpipe {
- pipe $_[0], $_[1] or croak "$Me: pipe($_[0], $_[1]) failed: $!";
-}
-
-# I tried using a * prototype character for the filehandle but it still
-# disallows a bearword while compiling under strict subs.
-
-sub xopen {
- open $_[0], $_[1] or croak "$Me: open($_[0], $_[1]) failed: $!";
-}
-
-sub xclose {
- close $_[0] or croak "$Me: close($_[0]) failed: $!";
-}
-
-sub fh_is_fd {
- return $_[0] =~ /\A=?(\d+)\z/;
-}
-
-sub xfileno {
- return $1 if $_[0] =~ /\A=?(\d+)\z/; # deal with fh just being an fd
- return fileno $_[0];
-}
-
-my $do_spawn = $^O eq 'os2' || $^O eq 'MSWin32';
-
-sub _open3 {
- local $Me = shift;
- my($package, $dad_wtr, $dad_rdr, $dad_err, @cmd) = @_;
- my($dup_wtr, $dup_rdr, $dup_err, $kidpid);
-
- # simulate autovivification of filehandles because
- # it's too ugly to use @_ throughout to make perl do it for us
- # tchrist 5-Mar-00
-
- unless (eval {
- $dad_wtr = $_[1] = gensym unless defined $dad_wtr && length $dad_wtr;
- $dad_rdr = $_[2] = gensym unless defined $dad_rdr && length $dad_rdr;
- 1; })
- {
- # must strip crud for croak to add back, or looks ugly
- $@ =~ s/(?<=value attempted) at .*//s;
- croak "$Me: $@";
- }
-
- $dad_err ||= $dad_rdr;
-
- $dup_wtr = ($dad_wtr =~ s/^[<>]&//);
- $dup_rdr = ($dad_rdr =~ s/^[<>]&//);
- $dup_err = ($dad_err =~ s/^[<>]&//);
-
- # force unqualified filehandles into caller's package
- $dad_wtr = qualify $dad_wtr, $package unless fh_is_fd($dad_wtr);
- $dad_rdr = qualify $dad_rdr, $package unless fh_is_fd($dad_rdr);
- $dad_err = qualify $dad_err, $package unless fh_is_fd($dad_err);
-
- my $kid_rdr = gensym;
- my $kid_wtr = gensym;
- my $kid_err = gensym;
-
- xpipe $kid_rdr, $dad_wtr if !$dup_wtr;
- xpipe $dad_rdr, $kid_wtr if !$dup_rdr;
- xpipe $dad_err, $kid_err if !$dup_err && $dad_err ne $dad_rdr;
-
- $kidpid = $do_spawn ? -1 : xfork;
- if ($kidpid == 0) { # Kid
- # If she wants to dup the kid's stderr onto her stdout I need to
- # save a copy of her stdout before I put something else there.
- if ($dad_rdr ne $dad_err && $dup_err
- && xfileno($dad_err) == fileno(STDOUT)) {
- my $tmp = gensym;
- xopen($tmp, ">&$dad_err");
- $dad_err = $tmp;
- }
-
- if ($dup_wtr) {
- xopen \*STDIN, "<&$dad_wtr" if fileno(STDIN) != xfileno($dad_wtr);
- } else {
- xclose $dad_wtr;
- xopen \*STDIN, "<&=" . fileno $kid_rdr;
- }
- if ($dup_rdr) {
- xopen \*STDOUT, ">&$dad_rdr" if fileno(STDOUT) != xfileno($dad_rdr);
- } else {
- xclose $dad_rdr;
- xopen \*STDOUT, ">&=" . fileno $kid_wtr;
- }
- if ($dad_rdr ne $dad_err) {
- if ($dup_err) {
- # I have to use a fileno here because in this one case
- # I'm doing a dup but the filehandle might be a reference
- # (from the special case above).
- xopen \*STDERR, ">&" . xfileno($dad_err)
- if fileno(STDERR) != xfileno($dad_err);
- } else {
- xclose $dad_err;
- xopen \*STDERR, ">&=" . fileno $kid_err;
- }
- } else {
- xopen \*STDERR, ">&STDOUT" if fileno(STDERR) != fileno(STDOUT);
- }
- local($")=(" ");
- exec @cmd # XXX: wrong process to croak from
- or croak "$Me: exec of @cmd failed";
- } elsif ($do_spawn) {
- # All the bookkeeping of coincidence between handles is
- # handled in spawn_with_handles.
-
- my @close;
- if ($dup_wtr) {
- $kid_rdr = \*{$dad_wtr};
- push @close, $kid_rdr;
- } else {
- push @close, \*{$dad_wtr}, $kid_rdr;
- }
- if ($dup_rdr) {
- $kid_wtr = \*{$dad_rdr};
- push @close, $kid_wtr;
- } else {
- push @close, \*{$dad_rdr}, $kid_wtr;
- }
- if ($dad_rdr ne $dad_err) {
- if ($dup_err) {
- $kid_err = \*{$dad_err};
- push @close, $kid_err;
- } else {
- push @close, \*{$dad_err}, $kid_err;
- }
- } else {
- $kid_err = $kid_wtr;
- }
- require IO::Pipe;
- $kidpid = eval {
- spawn_with_handles( [ { mode => 'r',
- open_as => $kid_rdr,
- handle => \*STDIN },
- { mode => 'w',
- open_as => $kid_wtr,
- handle => \*STDOUT },
- { mode => 'w',
- open_as => $kid_err,
- handle => \*STDERR },
- ], \@close, @cmd);
- };
- die "$Me: $@" if $@;
- }
-
- xclose $kid_rdr if !$dup_wtr;
- xclose $kid_wtr if !$dup_rdr;
- xclose $kid_err if !$dup_err && $dad_rdr ne $dad_err;
- # If the write handle is a dup give it away entirely, close my copy
- # of it.
- xclose $dad_wtr if $dup_wtr;
-
- select((select($dad_wtr), $| = 1)[0]); # unbuffer pipe
- $kidpid;
-}
-
-sub open3 {
- if (@_ < 4) {
- local $" = ', ';
- croak "open3(@_): not enough arguments";
- }
- return _open3 'open3', scalar caller, @_
-}
-
-sub spawn_with_handles {
- my $fds = shift; # Fields: handle, mode, open_as
- my $close_in_child = shift;
- my ($fd, $pid, @saved_fh, $saved, %saved, @errs);
- require Fcntl;
-
- foreach $fd (@$fds) {
- $fd->{tmp_copy} = IO::Handle->new_from_fd($fd->{handle}, $fd->{mode});
- $saved{fileno $fd->{handle}} = $fd->{tmp_copy};
- }
- foreach $fd (@$fds) {
- bless $fd->{handle}, 'IO::Handle'
- unless eval { $fd->{handle}->isa('IO::Handle') } ;
- # If some of handles to redirect-to coincide with handles to
- # redirect, we need to use saved variants:
- $fd->{handle}->fdopen($saved{fileno $fd->{open_as}} || $fd->{open_as},
- $fd->{mode});
- }
- unless ($^O eq 'MSWin32') {
- # Stderr may be redirected below, so we save the err text:
- foreach $fd (@$close_in_child) {
- fcntl($fd, Fcntl::F_SETFD(), 1) or push @errs, "fcntl $fd: $!"
- unless $saved{fileno $fd}; # Do not close what we redirect!
- }
- }
-
- unless (@errs) {
- $pid = eval { system 1, @_ }; # 1 == P_NOWAIT
- push @errs, "IO::Pipe: Can't spawn-NOWAIT: $!" if !$pid || $pid < 0;
- }
-
- foreach $fd (@$fds) {
- $fd->{handle}->fdopen($fd->{tmp_copy}, $fd->{mode});
- $fd->{tmp_copy}->close or croak "Can't close: $!";
- }
- croak join "\n", @errs if @errs;
- return $pid;
-}
-
-1; # so require is happy
diff --git a/contrib/perl5/lib/Math/BigFloat.pm b/contrib/perl5/lib/Math/BigFloat.pm
deleted file mode 100644
index 1eefac2..0000000
--- a/contrib/perl5/lib/Math/BigFloat.pm
+++ /dev/null
@@ -1,398 +0,0 @@
-package Math::BigFloat;
-
-use Math::BigInt;
-
-use Exporter; # just for use to be happy
-@ISA = (Exporter);
-$VERSION = '0.02';
-
-use overload
-'+' => sub {new Math::BigFloat &fadd},
-'-' => sub {new Math::BigFloat
- $_[2]? fsub($_[1],${$_[0]}) : fsub(${$_[0]},$_[1])},
-'<=>' => sub {$_[2]? fcmp($_[1],${$_[0]}) : fcmp(${$_[0]},$_[1])},
-'cmp' => sub {$_[2]? ($_[1] cmp ${$_[0]}) : (${$_[0]} cmp $_[1])},
-'*' => sub {new Math::BigFloat &fmul},
-'/' => sub {new Math::BigFloat
- $_[2]? scalar fdiv($_[1],${$_[0]}) :
- scalar fdiv(${$_[0]},$_[1])},
-'%' => sub {new Math::BigFloat
- $_[2]? scalar fmod($_[1],${$_[0]}) :
- scalar fmod(${$_[0]},$_[1])},
-'neg' => sub {new Math::BigFloat &fneg},
-'abs' => sub {new Math::BigFloat &fabs},
-
-qw(
-"" stringify
-0+ numify) # Order of arguments unsignificant
-;
-
-sub new {
- my ($class) = shift;
- my ($foo) = fnorm(shift);
- bless \$foo, $class;
-}
-
-sub numify { 0 + "${$_[0]}" } # Not needed, additional overhead
- # comparing to direct compilation based on
- # stringify
-sub stringify {
- my $n = ${$_[0]};
-
- my $minus = ($n =~ s/^([+-])// && $1 eq '-');
- $n =~ s/E//;
-
- $n =~ s/([-+]\d+)$//;
-
- my $e = $1;
- my $ln = length($n);
-
- if ( defined $e )
- {
- if ($e > 0) {
- $n .= "0" x $e . '.';
- } elsif (abs($e) < $ln) {
- substr($n, $ln + $e, 0) = '.';
- } else {
- $n = '.' . ("0" x (abs($e) - $ln)) . $n;
- }
- }
- $n = "-$n" if $minus;
-
- # 1 while $n =~ s/(.*\d)(\d\d\d)/$1,$2/;
-
- return $n;
-}
-
-$div_scale = 40;
-
-# Rounding modes one of 'even', 'odd', '+inf', '-inf', 'zero' or 'trunc'.
-
-$rnd_mode = 'even';
-
-sub fadd; sub fsub; sub fmul; sub fdiv;
-sub fneg; sub fabs; sub fcmp;
-sub fround; sub ffround;
-sub fnorm; sub fsqrt;
-
-# Convert a number to canonical string form.
-# Takes something that looks like a number and converts it to
-# the form /^[+-]\d+E[+-]\d+$/.
-sub fnorm { #(string) return fnum_str
- local($_) = @_;
- s/\s+//g; # strip white space
- no warnings; # $4 and $5 below might legitimately be undefined
- if (/^([+-]?)(\d*)(\.(\d*))?([Ee]([+-]?\d+))?$/ && "$2$4" ne '') {
- &norm(($1 ? "$1$2$4" : "+$2$4"),(($4 ne '') ? $6-length($4) : $6));
- } else {
- 'NaN';
- }
-}
-
-# normalize number -- for internal use
-sub norm { #(mantissa, exponent) return fnum_str
- local($_, $exp) = @_;
- $exp = 0 unless defined $exp;
- if ($_ eq 'NaN') {
- 'NaN';
- } else {
- s/^([+-])0+/$1/; # strip leading zeros
- if (length($_) == 1) {
- '+0E+0';
- } else {
- $exp += length($1) if (s/(0+)$//); # strip trailing zeros
- sprintf("%sE%+ld", $_, $exp);
- }
- }
-}
-
-# negation
-sub fneg { #(fnum_str) return fnum_str
- local($_) = fnorm($_[$[]);
- vec($_,0,8) ^= ord('+') ^ ord('-') unless $_ eq '+0E+0'; # flip sign
- s/^H/N/;
- $_;
-}
-
-# absolute value
-sub fabs { #(fnum_str) return fnum_str
- local($_) = fnorm($_[$[]);
- s/^-/+/; # mash sign
- $_;
-}
-
-# multiplication
-sub fmul { #(fnum_str, fnum_str) return fnum_str
- local($x,$y) = (fnorm($_[$[]),fnorm($_[$[+1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- &norm(Math::BigInt::bmul($xm,$ym),$xe+$ye);
- }
-}
-
-# addition
-sub fadd { #(fnum_str, fnum_str) return fnum_str
- local($x,$y) = (fnorm($_[$[]),fnorm($_[$[+1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- ($xm,$xe,$ym,$ye) = ($ym,$ye,$xm,$xe) if ($xe < $ye);
- &norm(Math::BigInt::badd($ym,$xm.('0' x ($xe-$ye))),$ye);
- }
-}
-
-# subtraction
-sub fsub { #(fnum_str, fnum_str) return fnum_str
- fadd($_[$[],fneg($_[$[+1]));
-}
-
-# division
-# args are dividend, divisor, scale (optional)
-# result has at most max(scale, length(dividend), length(divisor)) digits
-sub fdiv #(fnum_str, fnum_str[,scale]) return fnum_str
-{
- local($x,$y,$scale) = (fnorm($_[$[]),fnorm($_[$[+1]),$_[$[+2]);
- if ($x eq 'NaN' || $y eq 'NaN' || $y eq '+0E+0') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- $scale = $div_scale if (!$scale);
- $scale = length($xm)-1 if (length($xm)-1 > $scale);
- $scale = length($ym)-1 if (length($ym)-1 > $scale);
- $scale = $scale + length($ym) - length($xm);
- &norm(&round(Math::BigInt::bdiv($xm.('0' x $scale),$ym),
- Math::BigInt::babs($ym)),
- $xe-$ye-$scale);
- }
-}
-
-# modular division
-# args are dividend, divisor
-sub fmod #(fnum_str, fnum_str) return fnum_str
-{
- local($x,$y) = (fnorm($_[$[]),fnorm($_[$[+1]));
- if ($x eq 'NaN' || $y eq 'NaN' || $y eq '+0E+0') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- if ( $xe < $ye )
- {
- $ym .= ('0' x ($ye-$xe));
- }
- else
- {
- $xm .= ('0' x ($xe-$ye));
- }
- &norm(Math::BigInt::bmod($xm,$ym));
- }
-}
-# round int $q based on fraction $r/$base using $rnd_mode
-sub round { #(int_str, int_str, int_str) return int_str
- local($q,$r,$base) = @_;
- if ($q eq 'NaN' || $r eq 'NaN') {
- 'NaN';
- } elsif ($rnd_mode eq 'trunc') {
- $q; # just truncate
- } else {
- local($cmp) = Math::BigInt::bcmp(Math::BigInt::bmul($r,'+2'),$base);
- if ( $cmp < 0 ||
- ($cmp == 0 && (
- ($rnd_mode eq 'zero' ) ||
- ($rnd_mode eq '-inf' && (substr($q,$[,1) eq '+')) ||
- ($rnd_mode eq '+inf' && (substr($q,$[,1) eq '-')) ||
- ($rnd_mode eq 'even' && $q =~ /[24680]$/ ) ||
- ($rnd_mode eq 'odd' && $q =~ /[13579]$/ ) )
- )
- ) {
- $q; # round down
- } else {
- Math::BigInt::badd($q, ((substr($q,$[,1) eq '-') ? '-1' : '+1'));
- # round up
- }
- }
-}
-
-# round the mantissa of $x to $scale digits
-sub fround { #(fnum_str, scale) return fnum_str
- local($x,$scale) = (fnorm($_[$[]),$_[$[+1]);
- if ($x eq 'NaN' || $scale <= 0) {
- $x;
- } else {
- local($xm,$xe) = split('E',$x);
- if (length($xm)-1 <= $scale) {
- $x;
- } else {
- &norm(&round(substr($xm,$[,$scale+1),
- "+0".substr($xm,$[+$scale+1),"+1"."0" x length(substr($xm,$[+$scale+1))),
- $xe+length($xm)-$scale-1);
- }
- }
-}
-
-# round $x at the 10 to the $scale digit place
-sub ffround { #(fnum_str, scale) return fnum_str
- local($x,$scale) = (fnorm($_[$[]),$_[$[+1]);
- if ($x eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- if ($xe >= $scale) {
- $x;
- } else {
- $xe = length($xm)+$xe-$scale;
- if ($xe < 1) {
- '+0E+0';
- } elsif ($xe == 1) {
- # The first substr preserves the sign, passing a non-
- # normalized "-0" to &round when rounding -0.006 (for
- # example), purely so &round won't lose the sign.
- &norm(&round(substr($xm,$[,1).'0',
- "+0".substr($xm,$[+1),
- "+1"."0" x length(substr($xm,$[+1))), $scale);
- } else {
- &norm(&round(substr($xm,$[,$xe),
- "+0".substr($xm,$[+$xe),
- "+1"."0" x length(substr($xm,$[+$xe))), $scale);
- }
- }
- }
-}
-
-# compare 2 values returns one of undef, <0, =0, >0
-# returns undef if either or both input value are not numbers
-sub fcmp #(fnum_str, fnum_str) return cond_code
-{
- local($x, $y) = (fnorm($_[$[]),fnorm($_[$[+1]));
- if ($x eq "NaN" || $y eq "NaN") {
- undef;
- } else {
- local($xm,$xe,$ym,$ye) = split('E', $x."E$y");
- if ($xm eq '+0' || $ym eq '+0') {
- return $xm <=> $ym;
- }
- if ( $xe < $ye ) # adjust the exponents to be equal
- {
- $ym .= '0' x ($ye - $xe);
- $ye = $xe;
- }
- elsif ( $ye < $xe ) # same here
- {
- $xm .= '0' x ($xe - $ye);
- $xe = $ye;
- }
- return Math::BigInt::cmp($xm,$ym);
- }
-}
-
-# square root by Newtons method.
-sub fsqrt { #(fnum_str[, scale]) return fnum_str
- local($x, $scale) = (fnorm($_[$[]), $_[$[+1]);
- if ($x eq 'NaN' || $x =~ /^-/) {
- 'NaN';
- } elsif ($x eq '+0E+0') {
- '+0E+0';
- } else {
- local($xm, $xe) = split('E',$x);
- $scale = $div_scale if (!$scale);
- $scale = length($xm)-1 if ($scale < length($xm)-1);
- local($gs, $guess) = (1, sprintf("1E%+d", (length($xm)+$xe-1)/2));
- while ($gs < 2*$scale) {
- $guess = fmul(fadd($guess,fdiv($x,$guess,$gs*2)),".5");
- $gs *= 2;
- }
- new Math::BigFloat &fround($guess, $scale);
- }
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Math::BigFloat - Arbitrary length float math package
-
-=head1 SYNOPSIS
-
- use Math::BigFloat;
- $f = Math::BigFloat->new($string);
-
- $f->fadd(NSTR) return NSTR addition
- $f->fsub(NSTR) return NSTR subtraction
- $f->fmul(NSTR) return NSTR multiplication
- $f->fdiv(NSTR[,SCALE]) returns NSTR division to SCALE places
- $f->fmod(NSTR) returns NSTR modular remainder
- $f->fneg() return NSTR negation
- $f->fabs() return NSTR absolute value
- $f->fcmp(NSTR) return CODE compare undef,<0,=0,>0
- $f->fround(SCALE) return NSTR round to SCALE digits
- $f->ffround(SCALE) return NSTR round at SCALEth place
- $f->fnorm() return (NSTR) normalize
- $f->fsqrt([SCALE]) return NSTR sqrt to SCALE places
-
-=head1 DESCRIPTION
-
-All basic math operations are overloaded if you declare your big
-floats as
-
- $float = new Math::BigFloat "2.123123123123123123123123123123123";
-
-=over 2
-
-=item number format
-
-canonical strings have the form /[+-]\d+E[+-]\d+/ . Input values can
-have embedded whitespace.
-
-=item Error returns 'NaN'
-
-An input parameter was "Not a Number" or divide by zero or sqrt of
-negative number.
-
-=item Division is computed to
-
-C<max($Math::BigFloat::div_scale,length(dividend)+length(divisor))>
-digits by default.
-Also used for default sqrt scale.
-
-=item Rounding is performed
-
-according to the value of
-C<$Math::BigFloat::rnd_mode>:
-
- trunc truncate the value
- zero round towards 0
- +inf round towards +infinity (round up)
- -inf round towards -infinity (round down)
- even round to the nearest, .5 to the even digit
- odd round to the nearest, .5 to the odd digit
-
-The default is C<even> rounding.
-
-=back
-
-=head1 BUGS
-
-The current version of this module is a preliminary version of the
-real thing that is currently (as of perl5.002) under development.
-
-The printf subroutine does not use the value of
-C<$Math::BigFloat::rnd_mode> when rounding values for printing.
-Consequently, the way to print rounded values is
-to specify the number of digits both as an
-argument to C<ffround> and in the C<%f> printf string,
-as follows:
-
- printf "%.3f\n", $bigfloat->ffround(-3);
-
-=head1 AUTHOR
-
-Mark Biggar
-Patches by John Peacock Apr 2001
-=cut
diff --git a/contrib/perl5/lib/Math/BigInt.pm b/contrib/perl5/lib/Math/BigInt.pm
deleted file mode 100644
index 066577d..0000000
--- a/contrib/perl5/lib/Math/BigInt.pm
+++ /dev/null
@@ -1,519 +0,0 @@
-package Math::BigInt;
-$VERSION='0.01';
-
-use overload
-'+' => sub {new Math::BigInt &badd},
-'-' => sub {new Math::BigInt
- $_[2]? bsub($_[1],${$_[0]}) : bsub(${$_[0]},$_[1])},
-'<=>' => sub {$_[2]? bcmp($_[1],${$_[0]}) : bcmp(${$_[0]},$_[1])},
-'cmp' => sub {$_[2]? ($_[1] cmp ${$_[0]}) : (${$_[0]} cmp $_[1])},
-'*' => sub {new Math::BigInt &bmul},
-'/' => sub {new Math::BigInt
- $_[2]? scalar bdiv($_[1],${$_[0]}) :
- scalar bdiv(${$_[0]},$_[1])},
-'%' => sub {new Math::BigInt
- $_[2]? bmod($_[1],${$_[0]}) : bmod(${$_[0]},$_[1])},
-'**' => sub {new Math::BigInt
- $_[2]? bpow($_[1],${$_[0]}) : bpow(${$_[0]},$_[1])},
-'neg' => sub {new Math::BigInt &bneg},
-'abs' => sub {new Math::BigInt &babs},
-'<<' => sub {new Math::BigInt
- $_[2]? blsft($_[1],${$_[0]}) : blsft(${$_[0]},$_[1])},
-'>>' => sub {new Math::BigInt
- $_[2]? brsft($_[1],${$_[0]}) : brsft(${$_[0]},$_[1])},
-'&' => sub {new Math::BigInt &band},
-'|' => sub {new Math::BigInt &bior},
-'^' => sub {new Math::BigInt &bxor},
-'~' => sub {new Math::BigInt &bnot},
-
-qw(
-"" stringify
-0+ numify) # Order of arguments unsignificant
-;
-
-$NaNOK=1;
-
-sub new {
- my($class) = shift;
- my($foo) = bnorm(shift);
- die "Not a number initialized to Math::BigInt" if !$NaNOK && $foo eq "NaN";
- bless \$foo, $class;
-}
-sub stringify { "${$_[0]}" }
-sub numify { 0 + "${$_[0]}" } # Not needed, additional overhead
- # comparing to direct compilation based on
- # stringify
-sub import {
- shift;
- return unless @_;
- die "unknown import: @_" unless @_ == 1 and $_[0] eq ':constant';
- overload::constant integer => sub {Math::BigInt->new(shift)};
-}
-
-$zero = 0;
-
-# overcome a floating point problem on certain osnames (posix-bc, os390)
-BEGIN {
- my $x = 100000.0;
- my $use_mult = int($x*1e-5)*1e5 == $x ? 1 : 0;
-}
-
-# normalize string form of number. Strip leading zeros. Strip any
-# white space and add a sign, if missing.
-# Strings that are not numbers result the value 'NaN'.
-
-sub bnorm { #(num_str) return num_str
- local($_) = @_;
- s/\s+//g; # strip white space
- if (s/^([+-]?)0*(\d+)$/$1$2/) { # test if number
- substr($_,$[,0) = '+' unless $1; # Add missing sign
- s/^-0/+0/;
- $_;
- } else {
- 'NaN';
- }
-}
-
-# Convert a number from string format to internal base 100000 format.
-# Assumes normalized value as input.
-sub internal { #(num_str) return int_num_array
- local($d) = @_;
- ($is,$il) = (substr($d,$[,1),length($d)-2);
- substr($d,$[,1) = '';
- ($is, reverse(unpack("a" . ($il%5+1) . ("a5" x ($il/5)), $d)));
-}
-
-# Convert a number from internal base 100000 format to string format.
-# This routine scribbles all over input array.
-sub external { #(int_num_array) return num_str
- $es = shift;
- grep($_ > 9999 || ($_ = substr('0000'.$_,-5)), @_); # zero pad
- &bnorm(join('', $es, reverse(@_))); # reverse concat and normalize
-}
-
-# Negate input value.
-sub bneg { #(num_str) return num_str
- local($_) = &bnorm(@_);
- return $_ if $_ eq '+0' or $_ eq 'NaN';
- vec($_,0,8) ^= ord('+') ^ ord('-');
- $_;
-}
-
-# Returns the absolute value of the input.
-sub babs { #(num_str) return num_str
- &abs(&bnorm(@_));
-}
-
-sub abs { # post-normalized abs for internal use
- local($_) = @_;
- s/^-/+/;
- $_;
-}
-
-# Compares 2 values. Returns one of undef, <0, =0, >0. (suitable for sort)
-sub bcmp { #(num_str, num_str) return cond_code
- local($x,$y) = (&bnorm($_[$[]),&bnorm($_[$[+1]));
- if ($x eq 'NaN') {
- undef;
- } elsif ($y eq 'NaN') {
- undef;
- } else {
- &cmp($x,$y) <=> 0;
- }
-}
-
-sub cmp { # post-normalized compare for internal use
- local($cx, $cy) = @_;
-
- return 0 if ($cx eq $cy);
-
- local($sx, $sy) = (substr($cx, 0, 1), substr($cy, 0, 1));
- local($ld);
-
- if ($sx eq '+') {
- return 1 if ($sy eq '-' || $cy eq '+0');
- $ld = length($cx) - length($cy);
- return $ld if ($ld);
- return $cx cmp $cy;
- } else { # $sx eq '-'
- return -1 if ($sy eq '+');
- $ld = length($cy) - length($cx);
- return $ld if ($ld);
- return $cy cmp $cx;
- }
-}
-
-sub badd { #(num_str, num_str) return num_str
- local(*x, *y); ($x, $y) = (&bnorm($_[$[]),&bnorm($_[$[+1]));
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($y eq 'NaN') {
- 'NaN';
- } else {
- @x = &internal($x); # convert to internal form
- @y = &internal($y);
- local($sx, $sy) = (shift @x, shift @y); # get signs
- if ($sx eq $sy) {
- &external($sx, &add(*x, *y)); # if same sign add
- } else {
- ($x, $y) = (&abs($x),&abs($y)); # make abs
- if (&cmp($y,$x) > 0) {
- &external($sy, &sub(*y, *x));
- } else {
- &external($sx, &sub(*x, *y));
- }
- }
- }
-}
-
-sub bsub { #(num_str, num_str) return num_str
- &badd($_[$[],&bneg($_[$[+1]));
-}
-
-# GCD -- Euclids algorithm Knuth Vol 2 pg 296
-sub bgcd { #(num_str, num_str) return num_str
- local($x,$y) = (&bnorm($_[$[]),&bnorm($_[$[+1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- ($x, $y) = ($y,&bmod($x,$y)) while $y ne '+0';
- $x;
- }
-}
-
-# routine to add two base 1e5 numbers
-# stolen from Knuth Vol 2 Algorithm A pg 231
-# there are separate routines to add and sub as per Kunth pg 233
-sub add { #(int_num_array, int_num_array) return int_num_array
- local(*x, *y) = @_;
- $car = 0;
- for $x (@x) {
- last unless @y || $car;
- $x -= 1e5 if $car = (($x += (@y ? shift(@y) : 0) + $car) >= 1e5) ? 1 : 0;
- }
- for $y (@y) {
- last unless $car;
- $y -= 1e5 if $car = (($y += $car) >= 1e5) ? 1 : 0;
- }
- (@x, @y, $car);
-}
-
-# subtract base 1e5 numbers -- stolen from Knuth Vol 2 pg 232, $x > $y
-sub sub { #(int_num_array, int_num_array) return int_num_array
- local(*sx, *sy) = @_;
- $bar = 0;
- for $sx (@sx) {
- last unless @sy || $bar;
- $sx += 1e5 if $bar = (($sx -= (@sy ? shift(@sy) : 0) + $bar) < 0);
- }
- @sx;
-}
-
-# multiply two numbers -- stolen from Knuth Vol 2 pg 233
-sub bmul { #(num_str, num_str) return num_str
- local(*x, *y); ($x, $y) = (&bnorm($_[$[]), &bnorm($_[$[+1]));
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($y eq 'NaN') {
- 'NaN';
- } else {
- @x = &internal($x);
- @y = &internal($y);
- &external(&mul(*x,*y));
- }
-}
-
-# multiply two numbers in internal representation
-# destroys the arguments, supposes that two arguments are different
-sub mul { #(*int_num_array, *int_num_array) return int_num_array
- local(*x, *y) = (shift, shift);
- local($signr) = (shift @x ne shift @y) ? '-' : '+';
- @prod = ();
- for $x (@x) {
- ($car, $cty) = (0, $[);
- for $y (@y) {
- $prod = $x * $y + ($prod[$cty] || 0) + $car;
- if ($use_mult) {
- $prod[$cty++] =
- $prod - ($car = int($prod * 1e-5)) * 1e5;
- }
- else {
- $prod[$cty++] =
- $prod - ($car = int($prod / 1e5)) * 1e5;
- }
- }
- $prod[$cty] += $car if $car;
- $x = shift @prod;
- }
- ($signr, @x, @prod);
-}
-
-# modulus
-sub bmod { #(num_str, num_str) return num_str
- (&bdiv(@_))[$[+1];
-}
-
-sub bdiv { #(dividend: num_str, divisor: num_str) return num_str
- local (*x, *y); ($x, $y) = (&bnorm($_[$[]), &bnorm($_[$[+1]));
- return wantarray ? ('NaN','NaN') : 'NaN'
- if ($x eq 'NaN' || $y eq 'NaN' || $y eq '+0');
- return wantarray ? ('+0',$x) : '+0' if (&cmp(&abs($x),&abs($y)) < 0);
- @x = &internal($x); @y = &internal($y);
- $srem = $y[$[];
- $sr = (shift @x ne shift @y) ? '-' : '+';
- $car = $bar = $prd = 0;
- if (($dd = int(1e5/($y[$#y]+1))) != 1) {
- for $x (@x) {
- $x = $x * $dd + $car;
- if ($use_mult) {
- $x -= ($car = int($x * 1e-5)) * 1e5;
- }
- else {
- $x -= ($car = int($x / 1e5)) * 1e5;
- }
- }
- push(@x, $car); $car = 0;
- for $y (@y) {
- $y = $y * $dd + $car;
- if ($use_mult) {
- $y -= ($car = int($y * 1e-5)) * 1e5;
- }
- else {
- $y -= ($car = int($y / 1e5)) * 1e5;
- }
- }
- }
- else {
- push(@x, 0);
- }
- @q = (); ($v2,$v1) = @y[-2,-1];
- $v2 = 0 unless $v2;
- while ($#x > $#y) {
- ($u2,$u1,$u0) = @x[-3..-1];
- $u2 = 0 unless $u2;
- $q = (($u0 == $v1) ? 99999 : int(($u0*1e5+$u1)/$v1));
- --$q while ($v2*$q > ($u0*1e5+$u1-$q*$v1)*1e5+$u2);
- if ($q) {
- ($car, $bar) = (0,0);
- for ($y = $[, $x = $#x-$#y+$[-1; $y <= $#y; ++$y,++$x) {
- $prd = $q * $y[$y] + $car;
- if ($use_mult) {
- $prd -= ($car = int($prd * 1e-5)) * 1e5;
- }
- else {
- $prd -= ($car = int($prd / 1e5)) * 1e5;
- }
- $x[$x] += 1e5 if ($bar = (($x[$x] -= $prd + $bar) < 0));
- }
- if ($x[$#x] < $car + $bar) {
- $car = 0; --$q;
- for ($y = $[, $x = $#x-$#y+$[-1; $y <= $#y; ++$y,++$x) {
- $x[$x] -= 1e5
- if ($car = (($x[$x] += $y[$y] + $car) > 1e5));
- }
- }
- }
- pop(@x); unshift(@q, $q);
- }
- if (wantarray) {
- @d = ();
- if ($dd != 1) {
- $car = 0;
- for $x (reverse @x) {
- $prd = $car * 1e5 + $x;
- $car = $prd - ($tmp = int($prd / $dd)) * $dd;
- unshift(@d, $tmp);
- }
- }
- else {
- @d = @x;
- }
- (&external($sr, @q), &external($srem, @d, $zero));
- } else {
- &external($sr, @q);
- }
-}
-
-# compute power of two numbers -- stolen from Knuth Vol 2 pg 233
-sub bpow { #(num_str, num_str) return num_str
- local(*x, *y); ($x, $y) = (&bnorm($_[$[]), &bnorm($_[$[+1]));
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($y eq 'NaN') {
- 'NaN';
- } elsif ($x eq '+1') {
- '+1';
- } elsif ($x eq '-1') {
- &bmod($x,2) ? '-1': '+1';
- } elsif ($y =~ /^-/) {
- 'NaN';
- } elsif ($x eq '+0' && $y eq '+0') {
- 'NaN';
- } else {
- @x = &internal($x);
- local(@pow2)=@x;
- local(@pow)=&internal("+1");
- local($y1,$res,@tmp1,@tmp2)=(1); # need tmp to send to mul
- while ($y ne '+0') {
- ($y,$res)=&bdiv($y,2);
- if ($res ne '+0') {@tmp=@pow2; @pow=&mul(*pow,*tmp);}
- if ($y ne '+0') {@tmp=@pow2;@pow2=&mul(*pow2,*tmp);}
- }
- &external(@pow);
- }
-}
-
-# compute x << y, y >= 0
-sub blsft { #(num_str, num_str) return num_str
- &bmul($_[$[], &bpow(2, $_[$[+1]));
-}
-
-# compute x >> y, y >= 0
-sub brsft { #(num_str, num_str) return num_str
- &bdiv($_[$[], &bpow(2, $_[$[+1]));
-}
-
-# compute x & y
-sub band { #(num_str, num_str) return num_str
- local($x,$y,$r,$m,$xr,$yr) = (&bnorm($_[$[]),&bnorm($_[$[+1]),0,1);
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- while ($x ne '+0' && $y ne '+0') {
- ($x, $xr) = &bdiv($x, 0x10000);
- ($y, $yr) = &bdiv($y, 0x10000);
- $r = &badd(&bmul(int $xr & $yr, $m), $r);
- $m = &bmul($m, 0x10000);
- }
- $r;
- }
-}
-
-# compute x | y
-sub bior { #(num_str, num_str) return num_str
- local($x,$y,$r,$m,$xr,$yr) = (&bnorm($_[$[]),&bnorm($_[$[+1]),0,1);
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- while ($x ne '+0' || $y ne '+0') {
- ($x, $xr) = &bdiv($x, 0x10000);
- ($y, $yr) = &bdiv($y, 0x10000);
- $r = &badd(&bmul(int $xr | $yr, $m), $r);
- $m = &bmul($m, 0x10000);
- }
- $r;
- }
-}
-
-# compute x ^ y
-sub bxor { #(num_str, num_str) return num_str
- local($x,$y,$r,$m,$xr,$yr) = (&bnorm($_[$[]),&bnorm($_[$[+1]),0,1);
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- while ($x ne '+0' || $y ne '+0') {
- ($x, $xr) = &bdiv($x, 0x10000);
- ($y, $yr) = &bdiv($y, 0x10000);
- $r = &badd(&bmul(int $xr ^ $yr, $m), $r);
- $m = &bmul($m, 0x10000);
- }
- $r;
- }
-}
-
-# represent ~x as twos-complement number
-sub bnot { #(num_str) return num_str
- &bsub(-1,$_[$[]);
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Math::BigInt - Arbitrary size integer math package
-
-=head1 SYNOPSIS
-
- use Math::BigInt;
- $i = Math::BigInt->new($string);
-
- $i->bneg return BINT negation
- $i->babs return BINT absolute value
- $i->bcmp(BINT) return CODE compare numbers (undef,<0,=0,>0)
- $i->badd(BINT) return BINT addition
- $i->bsub(BINT) return BINT subtraction
- $i->bmul(BINT) return BINT multiplication
- $i->bdiv(BINT) return (BINT,BINT) division (quo,rem) just quo if scalar
- $i->bmod(BINT) return BINT modulus
- $i->bgcd(BINT) return BINT greatest common divisor
- $i->bnorm return BINT normalization
- $i->blsft(BINT) return BINT left shift
- $i->brsft(BINT) return (BINT,BINT) right shift (quo,rem) just quo if scalar
- $i->band(BINT) return BINT bit-wise and
- $i->bior(BINT) return BINT bit-wise inclusive or
- $i->bxor(BINT) return BINT bit-wise exclusive or
- $i->bnot return BINT bit-wise not
-
-=head1 DESCRIPTION
-
-All basic math operations are overloaded if you declare your big
-integers as
-
- $i = new Math::BigInt '123 456 789 123 456 789';
-
-
-=over 2
-
-=item Canonical notation
-
-Big integer value are strings of the form C</^[+-]\d+$/> with leading
-zeros suppressed.
-
-=item Input
-
-Input values to these routines may be strings of the form
-C</^\s*[+-]?[\d\s]+$/>.
-
-=item Output
-
-Output values always always in canonical form
-
-=back
-
-Actual math is done in an internal format consisting of an array
-whose first element is the sign (/^[+-]$/) and whose remaining
-elements are base 100000 digits with the least significant digit first.
-The string 'NaN' is used to represent the result when input arguments
-are not numbers, as well as the result of dividing by zero.
-
-=head1 EXAMPLES
-
- '+0' canonical zero value
- ' -123 123 123' canonical value '-123123123'
- '1 23 456 7890' canonical value '+1234567890'
-
-
-=head1 Autocreating constants
-
-After C<use Math::BigInt ':constant'> all the integer decimal constants
-in the given scope are converted to C<Math::BigInt>. This conversion
-happens at compile time.
-
-In particular
-
- perl -MMath::BigInt=:constant -e 'print 2**100'
-
-print the integer value of C<2**100>. Note that without conversion of
-constants the expression 2**100 will be calculated as floating point number.
-
-=head1 BUGS
-
-The current version of this module is a preliminary version of the
-real thing that is currently (as of perl5.002) under development.
-
-=head1 AUTHOR
-
-Mark Biggar, overloaded interface by Ilya Zakharevich.
-
-=cut
diff --git a/contrib/perl5/lib/Math/Complex.pm b/contrib/perl5/lib/Math/Complex.pm
deleted file mode 100644
index 9812513..0000000
--- a/contrib/perl5/lib/Math/Complex.pm
+++ /dev/null
@@ -1,1889 +0,0 @@
-#
-# Complex numbers and associated mathematical functions
-# -- Raphael Manfredi Since Sep 1996
-# -- Jarkko Hietaniemi Since Mar 1997
-# -- Daniel S. Lewart Since Sep 1997
-#
-
-package Math::Complex;
-
-our($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $Inf);
-
-$VERSION = 1.31;
-
-BEGIN {
- unless ($^O eq 'unicosmk') {
- my $e = $!;
- # We do want an arithmetic overflow, Inf INF inf Infinity:.
- undef $Inf unless eval <<'EOE' and $Inf =~ /^inf(?:inity)?$/i;
- local $SIG{FPE} = sub {die};
- my $t = CORE::exp 30;
- $Inf = CORE::exp $t;
-EOE
- if (!defined $Inf) { # Try a different method
- undef $Inf unless eval <<'EOE' and $Inf =~ /^inf(?:inity)?$/i;
- local $SIG{FPE} = sub {die};
- my $t = 1;
- $Inf = $t + "1e99999999999999999999999999999999";
-EOE
- }
- $! = $e; # Clear ERANGE.
- }
- $Inf = "Inf" if !defined $Inf || !($Inf > 0); # Desperation.
-}
-
-use strict;
-
-my $i;
-my %LOGN;
-
-require Exporter;
-
-@ISA = qw(Exporter);
-
-my @trig = qw(
- pi
- tan
- csc cosec sec cot cotan
- asin acos atan
- acsc acosec asec acot acotan
- sinh cosh tanh
- csch cosech sech coth cotanh
- asinh acosh atanh
- acsch acosech asech acoth acotanh
- );
-
-@EXPORT = (qw(
- i Re Im rho theta arg
- sqrt log ln
- log10 logn cbrt root
- cplx cplxe
- ),
- @trig);
-
-%EXPORT_TAGS = (
- 'trig' => [@trig],
-);
-
-use overload
- '+' => \&plus,
- '-' => \&minus,
- '*' => \&multiply,
- '/' => \&divide,
- '**' => \&power,
- '==' => \&numeq,
- '<=>' => \&spaceship,
- 'neg' => \&negate,
- '~' => \&conjugate,
- 'abs' => \&abs,
- 'sqrt' => \&sqrt,
- 'exp' => \&exp,
- 'log' => \&log,
- 'sin' => \&sin,
- 'cos' => \&cos,
- 'tan' => \&tan,
- 'atan2' => \&atan2,
- qw("" stringify);
-
-#
-# Package "privates"
-#
-
-my %DISPLAY_FORMAT = ('style' => 'cartesian',
- 'polar_pretty_print' => 1);
-my $eps = 1e-14; # Epsilon
-
-#
-# Object attributes (internal):
-# cartesian [real, imaginary] -- cartesian form
-# polar [rho, theta] -- polar form
-# c_dirty cartesian form not up-to-date
-# p_dirty polar form not up-to-date
-# display display format (package's global when not set)
-#
-
-# Die on bad *make() arguments.
-
-sub _cannot_make {
- die "@{[(caller(1))[3]]}: Cannot take $_[0] of $_[1].\n";
-}
-
-#
-# ->make
-#
-# Create a new complex number (cartesian form)
-#
-sub make {
- my $self = bless {}, shift;
- my ($re, $im) = @_;
- my $rre = ref $re;
- if ( $rre ) {
- if ( $rre eq ref $self ) {
- $re = Re($re);
- } else {
- _cannot_make("real part", $rre);
- }
- }
- my $rim = ref $im;
- if ( $rim ) {
- if ( $rim eq ref $self ) {
- $im = Im($im);
- } else {
- _cannot_make("imaginary part", $rim);
- }
- }
- $self->{'cartesian'} = [ $re, $im ];
- $self->{c_dirty} = 0;
- $self->{p_dirty} = 1;
- $self->display_format('cartesian');
- return $self;
-}
-
-#
-# ->emake
-#
-# Create a new complex number (exponential form)
-#
-sub emake {
- my $self = bless {}, shift;
- my ($rho, $theta) = @_;
- my $rrh = ref $rho;
- if ( $rrh ) {
- if ( $rrh eq ref $self ) {
- $rho = rho($rho);
- } else {
- _cannot_make("rho", $rrh);
- }
- }
- my $rth = ref $theta;
- if ( $rth ) {
- if ( $rth eq ref $self ) {
- $theta = theta($theta);
- } else {
- _cannot_make("theta", $rth);
- }
- }
- if ($rho < 0) {
- $rho = -$rho;
- $theta = ($theta <= 0) ? $theta + pi() : $theta - pi();
- }
- $self->{'polar'} = [$rho, $theta];
- $self->{p_dirty} = 0;
- $self->{c_dirty} = 1;
- $self->display_format('polar');
- return $self;
-}
-
-sub new { &make } # For backward compatibility only.
-
-#
-# cplx
-#
-# Creates a complex number from a (re, im) tuple.
-# This avoids the burden of writing Math::Complex->make(re, im).
-#
-sub cplx {
- my ($re, $im) = @_;
- return __PACKAGE__->make($re, defined $im ? $im : 0);
-}
-
-#
-# cplxe
-#
-# Creates a complex number from a (rho, theta) tuple.
-# This avoids the burden of writing Math::Complex->emake(rho, theta).
-#
-sub cplxe {
- my ($rho, $theta) = @_;
- return __PACKAGE__->emake($rho, defined $theta ? $theta : 0);
-}
-
-#
-# pi
-#
-# The number defined as pi = 180 degrees
-#
-sub pi () { 4 * CORE::atan2(1, 1) }
-
-#
-# pit2
-#
-# The full circle
-#
-sub pit2 () { 2 * pi }
-
-#
-# pip2
-#
-# The quarter circle
-#
-sub pip2 () { pi / 2 }
-
-#
-# deg1
-#
-# One degree in radians, used in stringify_polar.
-#
-
-sub deg1 () { pi / 180 }
-
-#
-# uplog10
-#
-# Used in log10().
-#
-sub uplog10 () { 1 / CORE::log(10) }
-
-#
-# i
-#
-# The number defined as i*i = -1;
-#
-sub i () {
- return $i if ($i);
- $i = bless {};
- $i->{'cartesian'} = [0, 1];
- $i->{'polar'} = [1, pip2];
- $i->{c_dirty} = 0;
- $i->{p_dirty} = 0;
- return $i;
-}
-
-#
-# ip2
-#
-# Half of i.
-#
-sub ip2 () { i / 2 }
-
-#
-# Attribute access/set routines
-#
-
-sub cartesian {$_[0]->{c_dirty} ?
- $_[0]->update_cartesian : $_[0]->{'cartesian'}}
-sub polar {$_[0]->{p_dirty} ?
- $_[0]->update_polar : $_[0]->{'polar'}}
-
-sub set_cartesian { $_[0]->{p_dirty}++; $_[0]->{'cartesian'} = $_[1] }
-sub set_polar { $_[0]->{c_dirty}++; $_[0]->{'polar'} = $_[1] }
-
-#
-# ->update_cartesian
-#
-# Recompute and return the cartesian form, given accurate polar form.
-#
-sub update_cartesian {
- my $self = shift;
- my ($r, $t) = @{$self->{'polar'}};
- $self->{c_dirty} = 0;
- return $self->{'cartesian'} = [$r * CORE::cos($t), $r * CORE::sin($t)];
-}
-
-#
-#
-# ->update_polar
-#
-# Recompute and return the polar form, given accurate cartesian form.
-#
-sub update_polar {
- my $self = shift;
- my ($x, $y) = @{$self->{'cartesian'}};
- $self->{p_dirty} = 0;
- return $self->{'polar'} = [0, 0] if $x == 0 && $y == 0;
- return $self->{'polar'} = [CORE::sqrt($x*$x + $y*$y),
- CORE::atan2($y, $x)];
-}
-
-#
-# (plus)
-#
-# Computes z1+z2.
-#
-sub plus {
- my ($z1, $z2, $regular) = @_;
- my ($re1, $im1) = @{$z1->cartesian};
- $z2 = cplx($z2) unless ref $z2;
- my ($re2, $im2) = ref $z2 ? @{$z2->cartesian} : ($z2, 0);
- unless (defined $regular) {
- $z1->set_cartesian([$re1 + $re2, $im1 + $im2]);
- return $z1;
- }
- return (ref $z1)->make($re1 + $re2, $im1 + $im2);
-}
-
-#
-# (minus)
-#
-# Computes z1-z2.
-#
-sub minus {
- my ($z1, $z2, $inverted) = @_;
- my ($re1, $im1) = @{$z1->cartesian};
- $z2 = cplx($z2) unless ref $z2;
- my ($re2, $im2) = @{$z2->cartesian};
- unless (defined $inverted) {
- $z1->set_cartesian([$re1 - $re2, $im1 - $im2]);
- return $z1;
- }
- return $inverted ?
- (ref $z1)->make($re2 - $re1, $im2 - $im1) :
- (ref $z1)->make($re1 - $re2, $im1 - $im2);
-
-}
-
-#
-# (multiply)
-#
-# Computes z1*z2.
-#
-sub multiply {
- my ($z1, $z2, $regular) = @_;
- if ($z1->{p_dirty} == 0 and ref $z2 and $z2->{p_dirty} == 0) {
- # if both polar better use polar to avoid rounding errors
- my ($r1, $t1) = @{$z1->polar};
- my ($r2, $t2) = @{$z2->polar};
- my $t = $t1 + $t2;
- if ($t > pi()) { $t -= pit2 }
- elsif ($t <= -pi()) { $t += pit2 }
- unless (defined $regular) {
- $z1->set_polar([$r1 * $r2, $t]);
- return $z1;
- }
- return (ref $z1)->emake($r1 * $r2, $t);
- } else {
- my ($x1, $y1) = @{$z1->cartesian};
- if (ref $z2) {
- my ($x2, $y2) = @{$z2->cartesian};
- return (ref $z1)->make($x1*$x2-$y1*$y2, $x1*$y2+$y1*$x2);
- } else {
- return (ref $z1)->make($x1*$z2, $y1*$z2);
- }
- }
-}
-
-#
-# _divbyzero
-#
-# Die on division by zero.
-#
-sub _divbyzero {
- my $mess = "$_[0]: Division by zero.\n";
-
- if (defined $_[1]) {
- $mess .= "(Because in the definition of $_[0], the divisor ";
- $mess .= "$_[1] " unless ("$_[1]" eq '0');
- $mess .= "is 0)\n";
- }
-
- my @up = caller(1);
-
- $mess .= "Died at $up[1] line $up[2].\n";
-
- die $mess;
-}
-
-#
-# (divide)
-#
-# Computes z1/z2.
-#
-sub divide {
- my ($z1, $z2, $inverted) = @_;
- if ($z1->{p_dirty} == 0 and ref $z2 and $z2->{p_dirty} == 0) {
- # if both polar better use polar to avoid rounding errors
- my ($r1, $t1) = @{$z1->polar};
- my ($r2, $t2) = @{$z2->polar};
- my $t;
- if ($inverted) {
- _divbyzero "$z2/0" if ($r1 == 0);
- $t = $t2 - $t1;
- if ($t > pi()) { $t -= pit2 }
- elsif ($t <= -pi()) { $t += pit2 }
- return (ref $z1)->emake($r2 / $r1, $t);
- } else {
- _divbyzero "$z1/0" if ($r2 == 0);
- $t = $t1 - $t2;
- if ($t > pi()) { $t -= pit2 }
- elsif ($t <= -pi()) { $t += pit2 }
- return (ref $z1)->emake($r1 / $r2, $t);
- }
- } else {
- my ($d, $x2, $y2);
- if ($inverted) {
- ($x2, $y2) = @{$z1->cartesian};
- $d = $x2*$x2 + $y2*$y2;
- _divbyzero "$z2/0" if $d == 0;
- return (ref $z1)->make(($x2*$z2)/$d, -($y2*$z2)/$d);
- } else {
- my ($x1, $y1) = @{$z1->cartesian};
- if (ref $z2) {
- ($x2, $y2) = @{$z2->cartesian};
- $d = $x2*$x2 + $y2*$y2;
- _divbyzero "$z1/0" if $d == 0;
- my $u = ($x1*$x2 + $y1*$y2)/$d;
- my $v = ($y1*$x2 - $x1*$y2)/$d;
- return (ref $z1)->make($u, $v);
- } else {
- _divbyzero "$z1/0" if $z2 == 0;
- return (ref $z1)->make($x1/$z2, $y1/$z2);
- }
- }
- }
-}
-
-#
-# (power)
-#
-# Computes z1**z2 = exp(z2 * log z1)).
-#
-sub power {
- my ($z1, $z2, $inverted) = @_;
- if ($inverted) {
- return 1 if $z1 == 0 || $z2 == 1;
- return 0 if $z2 == 0 && Re($z1) > 0;
- } else {
- return 1 if $z2 == 0 || $z1 == 1;
- return 0 if $z1 == 0 && Re($z2) > 0;
- }
- my $w = $inverted ? &exp($z1 * &log($z2))
- : &exp($z2 * &log($z1));
- # If both arguments cartesian, return cartesian, else polar.
- return $z1->{c_dirty} == 0 &&
- (not ref $z2 or $z2->{c_dirty} == 0) ?
- cplx(@{$w->cartesian}) : $w;
-}
-
-#
-# (spaceship)
-#
-# Computes z1 <=> z2.
-# Sorts on the real part first, then on the imaginary part. Thus 2-4i < 3+8i.
-#
-sub spaceship {
- my ($z1, $z2, $inverted) = @_;
- my ($re1, $im1) = ref $z1 ? @{$z1->cartesian} : ($z1, 0);
- my ($re2, $im2) = ref $z2 ? @{$z2->cartesian} : ($z2, 0);
- my $sgn = $inverted ? -1 : 1;
- return $sgn * ($re1 <=> $re2) if $re1 != $re2;
- return $sgn * ($im1 <=> $im2);
-}
-
-#
-# (numeq)
-#
-# Computes z1 == z2.
-#
-# (Required in addition to spaceship() because of NaNs.)
-sub numeq {
- my ($z1, $z2, $inverted) = @_;
- my ($re1, $im1) = ref $z1 ? @{$z1->cartesian} : ($z1, 0);
- my ($re2, $im2) = ref $z2 ? @{$z2->cartesian} : ($z2, 0);
- return $re1 == $re2 && $im1 == $im2 ? 1 : 0;
-}
-
-#
-# (negate)
-#
-# Computes -z.
-#
-sub negate {
- my ($z) = @_;
- if ($z->{c_dirty}) {
- my ($r, $t) = @{$z->polar};
- $t = ($t <= 0) ? $t + pi : $t - pi;
- return (ref $z)->emake($r, $t);
- }
- my ($re, $im) = @{$z->cartesian};
- return (ref $z)->make(-$re, -$im);
-}
-
-#
-# (conjugate)
-#
-# Compute complex's conjugate.
-#
-sub conjugate {
- my ($z) = @_;
- if ($z->{c_dirty}) {
- my ($r, $t) = @{$z->polar};
- return (ref $z)->emake($r, -$t);
- }
- my ($re, $im) = @{$z->cartesian};
- return (ref $z)->make($re, -$im);
-}
-
-#
-# (abs)
-#
-# Compute or set complex's norm (rho).
-#
-sub abs {
- my ($z, $rho) = @_;
- unless (ref $z) {
- if (@_ == 2) {
- $_[0] = $_[1];
- } else {
- return CORE::abs($z);
- }
- }
- if (defined $rho) {
- $z->{'polar'} = [ $rho, ${$z->polar}[1] ];
- $z->{p_dirty} = 0;
- $z->{c_dirty} = 1;
- return $rho;
- } else {
- return ${$z->polar}[0];
- }
-}
-
-sub _theta {
- my $theta = $_[0];
-
- if ($$theta > pi()) { $$theta -= pit2 }
- elsif ($$theta <= -pi()) { $$theta += pit2 }
-}
-
-#
-# arg
-#
-# Compute or set complex's argument (theta).
-#
-sub arg {
- my ($z, $theta) = @_;
- return $z unless ref $z;
- if (defined $theta) {
- _theta(\$theta);
- $z->{'polar'} = [ ${$z->polar}[0], $theta ];
- $z->{p_dirty} = 0;
- $z->{c_dirty} = 1;
- } else {
- $theta = ${$z->polar}[1];
- _theta(\$theta);
- }
- return $theta;
-}
-
-#
-# (sqrt)
-#
-# Compute sqrt(z).
-#
-# It is quite tempting to use wantarray here so that in list context
-# sqrt() would return the two solutions. This, however, would
-# break things like
-#
-# print "sqrt(z) = ", sqrt($z), "\n";
-#
-# The two values would be printed side by side without no intervening
-# whitespace, quite confusing.
-# Therefore if you want the two solutions use the root().
-#
-sub sqrt {
- my ($z) = @_;
- my ($re, $im) = ref $z ? @{$z->cartesian} : ($z, 0);
- return $re < 0 ? cplx(0, CORE::sqrt(-$re)) : CORE::sqrt($re)
- if $im == 0;
- my ($r, $t) = @{$z->polar};
- return (ref $z)->emake(CORE::sqrt($r), $t/2);
-}
-
-#
-# cbrt
-#
-# Compute cbrt(z) (cubic root).
-#
-# Why are we not returning three values? The same answer as for sqrt().
-#
-sub cbrt {
- my ($z) = @_;
- return $z < 0 ?
- -CORE::exp(CORE::log(-$z)/3) :
- ($z > 0 ? CORE::exp(CORE::log($z)/3): 0)
- unless ref $z;
- my ($r, $t) = @{$z->polar};
- return 0 if $r == 0;
- return (ref $z)->emake(CORE::exp(CORE::log($r)/3), $t/3);
-}
-
-#
-# _rootbad
-#
-# Die on bad root.
-#
-sub _rootbad {
- my $mess = "Root $_[0] illegal, root rank must be positive integer.\n";
-
- my @up = caller(1);
-
- $mess .= "Died at $up[1] line $up[2].\n";
-
- die $mess;
-}
-
-#
-# root
-#
-# Computes all nth root for z, returning an array whose size is n.
-# `n' must be a positive integer.
-#
-# The roots are given by (for k = 0..n-1):
-#
-# z^(1/n) = r^(1/n) (cos ((t+2 k pi)/n) + i sin ((t+2 k pi)/n))
-#
-sub root {
- my ($z, $n) = @_;
- _rootbad($n) if ($n < 1 or int($n) != $n);
- my ($r, $t) = ref $z ?
- @{$z->polar} : (CORE::abs($z), $z >= 0 ? 0 : pi);
- my @root;
- my $k;
- my $theta_inc = pit2 / $n;
- my $rho = $r ** (1/$n);
- my $theta;
- my $cartesian = ref $z && $z->{c_dirty} == 0;
- for ($k = 0, $theta = $t / $n; $k < $n; $k++, $theta += $theta_inc) {
- my $w = cplxe($rho, $theta);
- # Yes, $cartesian is loop invariant.
- push @root, $cartesian ? cplx(@{$w->cartesian}) : $w;
- }
- return @root;
-}
-
-#
-# Re
-#
-# Return or set Re(z).
-#
-sub Re {
- my ($z, $Re) = @_;
- return $z unless ref $z;
- if (defined $Re) {
- $z->{'cartesian'} = [ $Re, ${$z->cartesian}[1] ];
- $z->{c_dirty} = 0;
- $z->{p_dirty} = 1;
- } else {
- return ${$z->cartesian}[0];
- }
-}
-
-#
-# Im
-#
-# Return or set Im(z).
-#
-sub Im {
- my ($z, $Im) = @_;
- return 0 unless ref $z;
- if (defined $Im) {
- $z->{'cartesian'} = [ ${$z->cartesian}[0], $Im ];
- $z->{c_dirty} = 0;
- $z->{p_dirty} = 1;
- } else {
- return ${$z->cartesian}[1];
- }
-}
-
-#
-# rho
-#
-# Return or set rho(w).
-#
-sub rho {
- Math::Complex::abs(@_);
-}
-
-#
-# theta
-#
-# Return or set theta(w).
-#
-sub theta {
- Math::Complex::arg(@_);
-}
-
-#
-# (exp)
-#
-# Computes exp(z).
-#
-sub exp {
- my ($z) = @_;
- my ($x, $y) = @{$z->cartesian};
- return (ref $z)->emake(CORE::exp($x), $y);
-}
-
-#
-# _logofzero
-#
-# Die on logarithm of zero.
-#
-sub _logofzero {
- my $mess = "$_[0]: Logarithm of zero.\n";
-
- if (defined $_[1]) {
- $mess .= "(Because in the definition of $_[0], the argument ";
- $mess .= "$_[1] " unless ($_[1] eq '0');
- $mess .= "is 0)\n";
- }
-
- my @up = caller(1);
-
- $mess .= "Died at $up[1] line $up[2].\n";
-
- die $mess;
-}
-
-#
-# (log)
-#
-# Compute log(z).
-#
-sub log {
- my ($z) = @_;
- unless (ref $z) {
- _logofzero("log") if $z == 0;
- return $z > 0 ? CORE::log($z) : cplx(CORE::log(-$z), pi);
- }
- my ($r, $t) = @{$z->polar};
- _logofzero("log") if $r == 0;
- if ($t > pi()) { $t -= pit2 }
- elsif ($t <= -pi()) { $t += pit2 }
- return (ref $z)->make(CORE::log($r), $t);
-}
-
-#
-# ln
-#
-# Alias for log().
-#
-sub ln { Math::Complex::log(@_) }
-
-#
-# log10
-#
-# Compute log10(z).
-#
-
-sub log10 {
- return Math::Complex::log($_[0]) * uplog10;
-}
-
-#
-# logn
-#
-# Compute logn(z,n) = log(z) / log(n)
-#
-sub logn {
- my ($z, $n) = @_;
- $z = cplx($z, 0) unless ref $z;
- my $logn = $LOGN{$n};
- $logn = $LOGN{$n} = CORE::log($n) unless defined $logn; # Cache log(n)
- return &log($z) / $logn;
-}
-
-#
-# (cos)
-#
-# Compute cos(z) = (exp(iz) + exp(-iz))/2.
-#
-sub cos {
- my ($z) = @_;
- return CORE::cos($z) unless ref $z;
- my ($x, $y) = @{$z->cartesian};
- my $ey = CORE::exp($y);
- my $sx = CORE::sin($x);
- my $cx = CORE::cos($x);
- my $ey_1 = $ey ? 1 / $ey : $Inf;
- return (ref $z)->make($cx * ($ey + $ey_1)/2,
- $sx * ($ey_1 - $ey)/2);
-}
-
-#
-# (sin)
-#
-# Compute sin(z) = (exp(iz) - exp(-iz))/2.
-#
-sub sin {
- my ($z) = @_;
- return CORE::sin($z) unless ref $z;
- my ($x, $y) = @{$z->cartesian};
- my $ey = CORE::exp($y);
- my $sx = CORE::sin($x);
- my $cx = CORE::cos($x);
- my $ey_1 = $ey ? 1 / $ey : $Inf;
- return (ref $z)->make($sx * ($ey + $ey_1)/2,
- $cx * ($ey - $ey_1)/2);
-}
-
-#
-# tan
-#
-# Compute tan(z) = sin(z) / cos(z).
-#
-sub tan {
- my ($z) = @_;
- my $cz = &cos($z);
- _divbyzero "tan($z)", "cos($z)" if $cz == 0;
- return &sin($z) / $cz;
-}
-
-#
-# sec
-#
-# Computes the secant sec(z) = 1 / cos(z).
-#
-sub sec {
- my ($z) = @_;
- my $cz = &cos($z);
- _divbyzero "sec($z)", "cos($z)" if ($cz == 0);
- return 1 / $cz;
-}
-
-#
-# csc
-#
-# Computes the cosecant csc(z) = 1 / sin(z).
-#
-sub csc {
- my ($z) = @_;
- my $sz = &sin($z);
- _divbyzero "csc($z)", "sin($z)" if ($sz == 0);
- return 1 / $sz;
-}
-
-#
-# cosec
-#
-# Alias for csc().
-#
-sub cosec { Math::Complex::csc(@_) }
-
-#
-# cot
-#
-# Computes cot(z) = cos(z) / sin(z).
-#
-sub cot {
- my ($z) = @_;
- my $sz = &sin($z);
- _divbyzero "cot($z)", "sin($z)" if ($sz == 0);
- return &cos($z) / $sz;
-}
-
-#
-# cotan
-#
-# Alias for cot().
-#
-sub cotan { Math::Complex::cot(@_) }
-
-#
-# acos
-#
-# Computes the arc cosine acos(z) = -i log(z + sqrt(z*z-1)).
-#
-sub acos {
- my $z = $_[0];
- return CORE::atan2(CORE::sqrt(1-$z*$z), $z)
- if (! ref $z) && CORE::abs($z) <= 1;
- $z = cplx($z, 0) unless ref $z;
- my ($x, $y) = @{$z->cartesian};
- return 0 if $x == 1 && $y == 0;
- my $t1 = CORE::sqrt(($x+1)*($x+1) + $y*$y);
- my $t2 = CORE::sqrt(($x-1)*($x-1) + $y*$y);
- my $alpha = ($t1 + $t2)/2;
- my $beta = ($t1 - $t2)/2;
- $alpha = 1 if $alpha < 1;
- if ($beta > 1) { $beta = 1 }
- elsif ($beta < -1) { $beta = -1 }
- my $u = CORE::atan2(CORE::sqrt(1-$beta*$beta), $beta);
- my $v = CORE::log($alpha + CORE::sqrt($alpha*$alpha-1));
- $v = -$v if $y > 0 || ($y == 0 && $x < -1);
- return (ref $z)->make($u, $v);
-}
-
-#
-# asin
-#
-# Computes the arc sine asin(z) = -i log(iz + sqrt(1-z*z)).
-#
-sub asin {
- my $z = $_[0];
- return CORE::atan2($z, CORE::sqrt(1-$z*$z))
- if (! ref $z) && CORE::abs($z) <= 1;
- $z = cplx($z, 0) unless ref $z;
- my ($x, $y) = @{$z->cartesian};
- return 0 if $x == 0 && $y == 0;
- my $t1 = CORE::sqrt(($x+1)*($x+1) + $y*$y);
- my $t2 = CORE::sqrt(($x-1)*($x-1) + $y*$y);
- my $alpha = ($t1 + $t2)/2;
- my $beta = ($t1 - $t2)/2;
- $alpha = 1 if $alpha < 1;
- if ($beta > 1) { $beta = 1 }
- elsif ($beta < -1) { $beta = -1 }
- my $u = CORE::atan2($beta, CORE::sqrt(1-$beta*$beta));
- my $v = -CORE::log($alpha + CORE::sqrt($alpha*$alpha-1));
- $v = -$v if $y > 0 || ($y == 0 && $x < -1);
- return (ref $z)->make($u, $v);
-}
-
-#
-# atan
-#
-# Computes the arc tangent atan(z) = i/2 log((i+z) / (i-z)).
-#
-sub atan {
- my ($z) = @_;
- return CORE::atan2($z, 1) unless ref $z;
- my ($x, $y) = ref $z ? @{$z->cartesian} : ($z, 0);
- return 0 if $x == 0 && $y == 0;
- _divbyzero "atan(i)" if ( $z == i);
- _logofzero "atan(-i)" if (-$z == i); # -i is a bad file test...
- my $log = &log((i + $z) / (i - $z));
- return ip2 * $log;
-}
-
-#
-# asec
-#
-# Computes the arc secant asec(z) = acos(1 / z).
-#
-sub asec {
- my ($z) = @_;
- _divbyzero "asec($z)", $z if ($z == 0);
- return acos(1 / $z);
-}
-
-#
-# acsc
-#
-# Computes the arc cosecant acsc(z) = asin(1 / z).
-#
-sub acsc {
- my ($z) = @_;
- _divbyzero "acsc($z)", $z if ($z == 0);
- return asin(1 / $z);
-}
-
-#
-# acosec
-#
-# Alias for acsc().
-#
-sub acosec { Math::Complex::acsc(@_) }
-
-#
-# acot
-#
-# Computes the arc cotangent acot(z) = atan(1 / z)
-#
-sub acot {
- my ($z) = @_;
- _divbyzero "acot(0)" if $z == 0;
- return ($z >= 0) ? CORE::atan2(1, $z) : CORE::atan2(-1, -$z)
- unless ref $z;
- _divbyzero "acot(i)" if ($z - i == 0);
- _logofzero "acot(-i)" if ($z + i == 0);
- return atan(1 / $z);
-}
-
-#
-# acotan
-#
-# Alias for acot().
-#
-sub acotan { Math::Complex::acot(@_) }
-
-#
-# cosh
-#
-# Computes the hyperbolic cosine cosh(z) = (exp(z) + exp(-z))/2.
-#
-sub cosh {
- my ($z) = @_;
- my $ex;
- unless (ref $z) {
- $ex = CORE::exp($z);
- return $ex ? ($ex + 1/$ex)/2 : $Inf;
- }
- my ($x, $y) = @{$z->cartesian};
- $ex = CORE::exp($x);
- my $ex_1 = $ex ? 1 / $ex : $Inf;
- return (ref $z)->make(CORE::cos($y) * ($ex + $ex_1)/2,
- CORE::sin($y) * ($ex - $ex_1)/2);
-}
-
-#
-# sinh
-#
-# Computes the hyperbolic sine sinh(z) = (exp(z) - exp(-z))/2.
-#
-sub sinh {
- my ($z) = @_;
- my $ex;
- unless (ref $z) {
- return 0 if $z == 0;
- $ex = CORE::exp($z);
- return $ex ? ($ex - 1/$ex)/2 : "-$Inf";
- }
- my ($x, $y) = @{$z->cartesian};
- my $cy = CORE::cos($y);
- my $sy = CORE::sin($y);
- $ex = CORE::exp($x);
- my $ex_1 = $ex ? 1 / $ex : $Inf;
- return (ref $z)->make(CORE::cos($y) * ($ex - $ex_1)/2,
- CORE::sin($y) * ($ex + $ex_1)/2);
-}
-
-#
-# tanh
-#
-# Computes the hyperbolic tangent tanh(z) = sinh(z) / cosh(z).
-#
-sub tanh {
- my ($z) = @_;
- my $cz = cosh($z);
- _divbyzero "tanh($z)", "cosh($z)" if ($cz == 0);
- return sinh($z) / $cz;
-}
-
-#
-# sech
-#
-# Computes the hyperbolic secant sech(z) = 1 / cosh(z).
-#
-sub sech {
- my ($z) = @_;
- my $cz = cosh($z);
- _divbyzero "sech($z)", "cosh($z)" if ($cz == 0);
- return 1 / $cz;
-}
-
-#
-# csch
-#
-# Computes the hyperbolic cosecant csch(z) = 1 / sinh(z).
-#
-sub csch {
- my ($z) = @_;
- my $sz = sinh($z);
- _divbyzero "csch($z)", "sinh($z)" if ($sz == 0);
- return 1 / $sz;
-}
-
-#
-# cosech
-#
-# Alias for csch().
-#
-sub cosech { Math::Complex::csch(@_) }
-
-#
-# coth
-#
-# Computes the hyperbolic cotangent coth(z) = cosh(z) / sinh(z).
-#
-sub coth {
- my ($z) = @_;
- my $sz = sinh($z);
- _divbyzero "coth($z)", "sinh($z)" if $sz == 0;
- return cosh($z) / $sz;
-}
-
-#
-# cotanh
-#
-# Alias for coth().
-#
-sub cotanh { Math::Complex::coth(@_) }
-
-#
-# acosh
-#
-# Computes the arc hyperbolic cosine acosh(z) = log(z + sqrt(z*z-1)).
-#
-sub acosh {
- my ($z) = @_;
- unless (ref $z) {
- $z = cplx($z, 0);
- }
- my ($re, $im) = @{$z->cartesian};
- if ($im == 0) {
- return CORE::log($re + CORE::sqrt($re*$re - 1))
- if $re >= 1;
- return cplx(0, CORE::atan2(CORE::sqrt(1 - $re*$re), $re))
- if CORE::abs($re) < 1;
- }
- my $t = &sqrt($z * $z - 1) + $z;
- # Try Taylor if looking bad (this usually means that
- # $z was large negative, therefore the sqrt is really
- # close to abs(z), summing that with z...)
- $t = 1/(2 * $z) - 1/(8 * $z**3) + 1/(16 * $z**5) - 5/(128 * $z**7)
- if $t == 0;
- my $u = &log($t);
- $u->Im(-$u->Im) if $re < 0 && $im == 0;
- return $re < 0 ? -$u : $u;
-}
-
-#
-# asinh
-#
-# Computes the arc hyperbolic sine asinh(z) = log(z + sqrt(z*z+1))
-#
-sub asinh {
- my ($z) = @_;
- unless (ref $z) {
- my $t = $z + CORE::sqrt($z*$z + 1);
- return CORE::log($t) if $t;
- }
- my $t = &sqrt($z * $z + 1) + $z;
- # Try Taylor if looking bad (this usually means that
- # $z was large negative, therefore the sqrt is really
- # close to abs(z), summing that with z...)
- $t = 1/(2 * $z) - 1/(8 * $z**3) + 1/(16 * $z**5) - 5/(128 * $z**7)
- if $t == 0;
- return &log($t);
-}
-
-#
-# atanh
-#
-# Computes the arc hyperbolic tangent atanh(z) = 1/2 log((1+z) / (1-z)).
-#
-sub atanh {
- my ($z) = @_;
- unless (ref $z) {
- return CORE::log((1 + $z)/(1 - $z))/2 if CORE::abs($z) < 1;
- $z = cplx($z, 0);
- }
- _divbyzero 'atanh(1)', "1 - $z" if (1 - $z == 0);
- _logofzero 'atanh(-1)' if (1 + $z == 0);
- return 0.5 * &log((1 + $z) / (1 - $z));
-}
-
-#
-# asech
-#
-# Computes the hyperbolic arc secant asech(z) = acosh(1 / z).
-#
-sub asech {
- my ($z) = @_;
- _divbyzero 'asech(0)', "$z" if ($z == 0);
- return acosh(1 / $z);
-}
-
-#
-# acsch
-#
-# Computes the hyperbolic arc cosecant acsch(z) = asinh(1 / z).
-#
-sub acsch {
- my ($z) = @_;
- _divbyzero 'acsch(0)', $z if ($z == 0);
- return asinh(1 / $z);
-}
-
-#
-# acosech
-#
-# Alias for acosh().
-#
-sub acosech { Math::Complex::acsch(@_) }
-
-#
-# acoth
-#
-# Computes the arc hyperbolic cotangent acoth(z) = 1/2 log((1+z) / (z-1)).
-#
-sub acoth {
- my ($z) = @_;
- _divbyzero 'acoth(0)' if ($z == 0);
- unless (ref $z) {
- return CORE::log(($z + 1)/($z - 1))/2 if CORE::abs($z) > 1;
- $z = cplx($z, 0);
- }
- _divbyzero 'acoth(1)', "$z - 1" if ($z - 1 == 0);
- _logofzero 'acoth(-1)', "1 + $z" if (1 + $z == 0);
- return &log((1 + $z) / ($z - 1)) / 2;
-}
-
-#
-# acotanh
-#
-# Alias for acot().
-#
-sub acotanh { Math::Complex::acoth(@_) }
-
-#
-# (atan2)
-#
-# Compute atan(z1/z2).
-#
-sub atan2 {
- my ($z1, $z2, $inverted) = @_;
- my ($re1, $im1, $re2, $im2);
- if ($inverted) {
- ($re1, $im1) = ref $z2 ? @{$z2->cartesian} : ($z2, 0);
- ($re2, $im2) = @{$z1->cartesian};
- } else {
- ($re1, $im1) = @{$z1->cartesian};
- ($re2, $im2) = ref $z2 ? @{$z2->cartesian} : ($z2, 0);
- }
- if ($im2 == 0) {
- return CORE::atan2($re1, $re2) if $im1 == 0;
- return ($im1<=>0) * pip2 if $re2 == 0;
- }
- my $w = atan($z1/$z2);
- my ($u, $v) = ref $w ? @{$w->cartesian} : ($w, 0);
- $u += pi if $re2 < 0;
- $u -= pit2 if $u > pi;
- return cplx($u, $v);
-}
-
-#
-# display_format
-# ->display_format
-#
-# Set (get if no argument) the display format for all complex numbers that
-# don't happen to have overridden it via ->display_format
-#
-# When called as an object method, this actually sets the display format for
-# the current object.
-#
-# Valid object formats are 'c' and 'p' for cartesian and polar. The first
-# letter is used actually, so the type can be fully spelled out for clarity.
-#
-sub display_format {
- my $self = shift;
- my %display_format = %DISPLAY_FORMAT;
-
- if (ref $self) { # Called as an object method
- if (exists $self->{display_format}) {
- my %obj = %{$self->{display_format}};
- @display_format{keys %obj} = values %obj;
- }
- }
- if (@_ == 1) {
- $display_format{style} = shift;
- } else {
- my %new = @_;
- @display_format{keys %new} = values %new;
- }
-
- if (ref $self) { # Called as an object method
- $self->{display_format} = { %display_format };
- return
- wantarray ?
- %{$self->{display_format}} :
- $self->{display_format}->{style};
- }
-
- # Called as a class method
- %DISPLAY_FORMAT = %display_format;
- return
- wantarray ?
- %DISPLAY_FORMAT :
- $DISPLAY_FORMAT{style};
-}
-
-#
-# (stringify)
-#
-# Show nicely formatted complex number under its cartesian or polar form,
-# depending on the current display format:
-#
-# . If a specific display format has been recorded for this object, use it.
-# . Otherwise, use the generic current default for all complex numbers,
-# which is a package global variable.
-#
-sub stringify {
- my ($z) = shift;
-
- my $style = $z->display_format;
-
- $style = $DISPLAY_FORMAT{style} unless defined $style;
-
- return $z->stringify_polar if $style =~ /^p/i;
- return $z->stringify_cartesian;
-}
-
-#
-# ->stringify_cartesian
-#
-# Stringify as a cartesian representation 'a+bi'.
-#
-sub stringify_cartesian {
- my $z = shift;
- my ($x, $y) = @{$z->cartesian};
- my ($re, $im);
-
- my %format = $z->display_format;
- my $format = $format{format};
-
- if ($x) {
- if ($x =~ /^NaN[QS]?$/i) {
- $re = $x;
- } else {
- if ($x =~ /^-?$Inf$/oi) {
- $re = $x;
- } else {
- $re = defined $format ? sprintf($format, $x) : $x;
- }
- }
- } else {
- undef $re;
- }
-
- if ($y) {
- if ($y =~ /^(NaN[QS]?)$/i) {
- $im = $y;
- } else {
- if ($y =~ /^-?$Inf$/oi) {
- $im = $y;
- } else {
- $im =
- defined $format ?
- sprintf($format, $y) :
- ($y == 1 ? "" : ($y == -1 ? "-" : $y));
- }
- }
- $im .= "i";
- } else {
- undef $im;
- }
-
- my $str = $re;
-
- if (defined $im) {
- if ($y < 0) {
- $str .= $im;
- } elsif ($y > 0 || $im =~ /^NaN[QS]?i$/i) {
- $str .= "+" if defined $re;
- $str .= $im;
- }
- } elsif (!defined $re) {
- $str = "0";
- }
-
- return $str;
-}
-
-
-#
-# ->stringify_polar
-#
-# Stringify as a polar representation '[r,t]'.
-#
-sub stringify_polar {
- my $z = shift;
- my ($r, $t) = @{$z->polar};
- my $theta;
-
- my %format = $z->display_format;
- my $format = $format{format};
-
- if ($t =~ /^NaN[QS]?$/i || $t =~ /^-?$Inf$/oi) {
- $theta = $t;
- } elsif ($t == pi) {
- $theta = "pi";
- } elsif ($r == 0 || $t == 0) {
- $theta = defined $format ? sprintf($format, $t) : $t;
- }
-
- return "[$r,$theta]" if defined $theta;
-
- #
- # Try to identify pi/n and friends.
- #
-
- $t -= int(CORE::abs($t) / pit2) * pit2;
-
- if ($format{polar_pretty_print} && $t) {
- my ($a, $b);
- for $a (2..9) {
- $b = $t * $a / pi;
- if ($b =~ /^-?\d+$/) {
- $b = $b < 0 ? "-" : "" if CORE::abs($b) == 1;
- $theta = "${b}pi/$a";
- last;
- }
- }
- }
-
- if (defined $format) {
- $r = sprintf($format, $r);
- $theta = sprintf($format, $theta) unless defined $theta;
- } else {
- $theta = $t unless defined $theta;
- }
-
- return "[$r,$theta]";
-}
-
-1;
-__END__
-
-=pod
-
-=head1 NAME
-
-Math::Complex - complex numbers and associated mathematical functions
-
-=head1 SYNOPSIS
-
- use Math::Complex;
-
- $z = Math::Complex->make(5, 6);
- $t = 4 - 3*i + $z;
- $j = cplxe(1, 2*pi/3);
-
-=head1 DESCRIPTION
-
-This package lets you create and manipulate complex numbers. By default,
-I<Perl> limits itself to real numbers, but an extra C<use> statement brings
-full complex support, along with a full set of mathematical functions
-typically associated with and/or extended to complex numbers.
-
-If you wonder what complex numbers are, they were invented to be able to solve
-the following equation:
-
- x*x = -1
-
-and by definition, the solution is noted I<i> (engineers use I<j> instead since
-I<i> usually denotes an intensity, but the name does not matter). The number
-I<i> is a pure I<imaginary> number.
-
-The arithmetics with pure imaginary numbers works just like you would expect
-it with real numbers... you just have to remember that
-
- i*i = -1
-
-so you have:
-
- 5i + 7i = i * (5 + 7) = 12i
- 4i - 3i = i * (4 - 3) = i
- 4i * 2i = -8
- 6i / 2i = 3
- 1 / i = -i
-
-Complex numbers are numbers that have both a real part and an imaginary
-part, and are usually noted:
-
- a + bi
-
-where C<a> is the I<real> part and C<b> is the I<imaginary> part. The
-arithmetic with complex numbers is straightforward. You have to
-keep track of the real and the imaginary parts, but otherwise the
-rules used for real numbers just apply:
-
- (4 + 3i) + (5 - 2i) = (4 + 5) + i(3 - 2) = 9 + i
- (2 + i) * (4 - i) = 2*4 + 4i -2i -i*i = 8 + 2i + 1 = 9 + 2i
-
-A graphical representation of complex numbers is possible in a plane
-(also called the I<complex plane>, but it's really a 2D plane).
-The number
-
- z = a + bi
-
-is the point whose coordinates are (a, b). Actually, it would
-be the vector originating from (0, 0) to (a, b). It follows that the addition
-of two complex numbers is a vectorial addition.
-
-Since there is a bijection between a point in the 2D plane and a complex
-number (i.e. the mapping is unique and reciprocal), a complex number
-can also be uniquely identified with polar coordinates:
-
- [rho, theta]
-
-where C<rho> is the distance to the origin, and C<theta> the angle between
-the vector and the I<x> axis. There is a notation for this using the
-exponential form, which is:
-
- rho * exp(i * theta)
-
-where I<i> is the famous imaginary number introduced above. Conversion
-between this form and the cartesian form C<a + bi> is immediate:
-
- a = rho * cos(theta)
- b = rho * sin(theta)
-
-which is also expressed by this formula:
-
- z = rho * exp(i * theta) = rho * (cos theta + i * sin theta)
-
-In other words, it's the projection of the vector onto the I<x> and I<y>
-axes. Mathematicians call I<rho> the I<norm> or I<modulus> and I<theta>
-the I<argument> of the complex number. The I<norm> of C<z> will be
-noted C<abs(z)>.
-
-The polar notation (also known as the trigonometric
-representation) is much more handy for performing multiplications and
-divisions of complex numbers, whilst the cartesian notation is better
-suited for additions and subtractions. Real numbers are on the I<x>
-axis, and therefore I<theta> is zero or I<pi>.
-
-All the common operations that can be performed on a real number have
-been defined to work on complex numbers as well, and are merely
-I<extensions> of the operations defined on real numbers. This means
-they keep their natural meaning when there is no imaginary part, provided
-the number is within their definition set.
-
-For instance, the C<sqrt> routine which computes the square root of
-its argument is only defined for non-negative real numbers and yields a
-non-negative real number (it is an application from B<R+> to B<R+>).
-If we allow it to return a complex number, then it can be extended to
-negative real numbers to become an application from B<R> to B<C> (the
-set of complex numbers):
-
- sqrt(x) = x >= 0 ? sqrt(x) : sqrt(-x)*i
-
-It can also be extended to be an application from B<C> to B<C>,
-whilst its restriction to B<R> behaves as defined above by using
-the following definition:
-
- sqrt(z = [r,t]) = sqrt(r) * exp(i * t/2)
-
-Indeed, a negative real number can be noted C<[x,pi]> (the modulus
-I<x> is always non-negative, so C<[x,pi]> is really C<-x>, a negative
-number) and the above definition states that
-
- sqrt([x,pi]) = sqrt(x) * exp(i*pi/2) = [sqrt(x),pi/2] = sqrt(x)*i
-
-which is exactly what we had defined for negative real numbers above.
-The C<sqrt> returns only one of the solutions: if you want the both,
-use the C<root> function.
-
-All the common mathematical functions defined on real numbers that
-are extended to complex numbers share that same property of working
-I<as usual> when the imaginary part is zero (otherwise, it would not
-be called an extension, would it?).
-
-A I<new> operation possible on a complex number that is
-the identity for real numbers is called the I<conjugate>, and is noted
-with an horizontal bar above the number, or C<~z> here.
-
- z = a + bi
- ~z = a - bi
-
-Simple... Now look:
-
- z * ~z = (a + bi) * (a - bi) = a*a + b*b
-
-We saw that the norm of C<z> was noted C<abs(z)> and was defined as the
-distance to the origin, also known as:
-
- rho = abs(z) = sqrt(a*a + b*b)
-
-so
-
- z * ~z = abs(z) ** 2
-
-If z is a pure real number (i.e. C<b == 0>), then the above yields:
-
- a * a = abs(a) ** 2
-
-which is true (C<abs> has the regular meaning for real number, i.e. stands
-for the absolute value). This example explains why the norm of C<z> is
-noted C<abs(z)>: it extends the C<abs> function to complex numbers, yet
-is the regular C<abs> we know when the complex number actually has no
-imaginary part... This justifies I<a posteriori> our use of the C<abs>
-notation for the norm.
-
-=head1 OPERATIONS
-
-Given the following notations:
-
- z1 = a + bi = r1 * exp(i * t1)
- z2 = c + di = r2 * exp(i * t2)
- z = <any complex or real number>
-
-the following (overloaded) operations are supported on complex numbers:
-
- z1 + z2 = (a + c) + i(b + d)
- z1 - z2 = (a - c) + i(b - d)
- z1 * z2 = (r1 * r2) * exp(i * (t1 + t2))
- z1 / z2 = (r1 / r2) * exp(i * (t1 - t2))
- z1 ** z2 = exp(z2 * log z1)
- ~z = a - bi
- abs(z) = r1 = sqrt(a*a + b*b)
- sqrt(z) = sqrt(r1) * exp(i * t/2)
- exp(z) = exp(a) * exp(i * b)
- log(z) = log(r1) + i*t
- sin(z) = 1/2i (exp(i * z1) - exp(-i * z))
- cos(z) = 1/2 (exp(i * z1) + exp(-i * z))
- atan2(z1, z2) = atan(z1/z2)
-
-The following extra operations are supported on both real and complex
-numbers:
-
- Re(z) = a
- Im(z) = b
- arg(z) = t
- abs(z) = r
-
- cbrt(z) = z ** (1/3)
- log10(z) = log(z) / log(10)
- logn(z, n) = log(z) / log(n)
-
- tan(z) = sin(z) / cos(z)
-
- csc(z) = 1 / sin(z)
- sec(z) = 1 / cos(z)
- cot(z) = 1 / tan(z)
-
- asin(z) = -i * log(i*z + sqrt(1-z*z))
- acos(z) = -i * log(z + i*sqrt(1-z*z))
- atan(z) = i/2 * log((i+z) / (i-z))
-
- acsc(z) = asin(1 / z)
- asec(z) = acos(1 / z)
- acot(z) = atan(1 / z) = -i/2 * log((i+z) / (z-i))
-
- sinh(z) = 1/2 (exp(z) - exp(-z))
- cosh(z) = 1/2 (exp(z) + exp(-z))
- tanh(z) = sinh(z) / cosh(z) = (exp(z) - exp(-z)) / (exp(z) + exp(-z))
-
- csch(z) = 1 / sinh(z)
- sech(z) = 1 / cosh(z)
- coth(z) = 1 / tanh(z)
-
- asinh(z) = log(z + sqrt(z*z+1))
- acosh(z) = log(z + sqrt(z*z-1))
- atanh(z) = 1/2 * log((1+z) / (1-z))
-
- acsch(z) = asinh(1 / z)
- asech(z) = acosh(1 / z)
- acoth(z) = atanh(1 / z) = 1/2 * log((1+z) / (z-1))
-
-I<arg>, I<abs>, I<log>, I<csc>, I<cot>, I<acsc>, I<acot>, I<csch>,
-I<coth>, I<acosech>, I<acotanh>, have aliases I<rho>, I<theta>, I<ln>,
-I<cosec>, I<cotan>, I<acosec>, I<acotan>, I<cosech>, I<cotanh>,
-I<acosech>, I<acotanh>, respectively. C<Re>, C<Im>, C<arg>, C<abs>,
-C<rho>, and C<theta> can be used also also mutators. The C<cbrt>
-returns only one of the solutions: if you want all three, use the
-C<root> function.
-
-The I<root> function is available to compute all the I<n>
-roots of some complex, where I<n> is a strictly positive integer.
-There are exactly I<n> such roots, returned as a list. Getting the
-number mathematicians call C<j> such that:
-
- 1 + j + j*j = 0;
-
-is a simple matter of writing:
-
- $j = ((root(1, 3))[1];
-
-The I<k>th root for C<z = [r,t]> is given by:
-
- (root(z, n))[k] = r**(1/n) * exp(i * (t + 2*k*pi)/n)
-
-The I<spaceship> comparison operator, E<lt>=E<gt>, is also defined. In
-order to ensure its restriction to real numbers is conform to what you
-would expect, the comparison is run on the real part of the complex
-number first, and imaginary parts are compared only when the real
-parts match.
-
-=head1 CREATION
-
-To create a complex number, use either:
-
- $z = Math::Complex->make(3, 4);
- $z = cplx(3, 4);
-
-if you know the cartesian form of the number, or
-
- $z = 3 + 4*i;
-
-if you like. To create a number using the polar form, use either:
-
- $z = Math::Complex->emake(5, pi/3);
- $x = cplxe(5, pi/3);
-
-instead. The first argument is the modulus, the second is the angle
-(in radians, the full circle is 2*pi). (Mnemonic: C<e> is used as a
-notation for complex numbers in the polar form).
-
-It is possible to write:
-
- $x = cplxe(-3, pi/4);
-
-but that will be silently converted into C<[3,-3pi/4]>, since the
-modulus must be non-negative (it represents the distance to the origin
-in the complex plane).
-
-It is also possible to have a complex number as either argument of
-either the C<make> or C<emake>: the appropriate component of
-the argument will be used.
-
- $z1 = cplx(-2, 1);
- $z2 = cplx($z1, 4);
-
-=head1 STRINGIFICATION
-
-When printed, a complex number is usually shown under its cartesian
-style I<a+bi>, but there are legitimate cases where the polar style
-I<[r,t]> is more appropriate.
-
-By calling the class method C<Math::Complex::display_format> and
-supplying either C<"polar"> or C<"cartesian"> as an argument, you
-override the default display style, which is C<"cartesian">. Not
-supplying any argument returns the current settings.
-
-This default can be overridden on a per-number basis by calling the
-C<display_format> method instead. As before, not supplying any argument
-returns the current display style for this number. Otherwise whatever you
-specify will be the new display style for I<this> particular number.
-
-For instance:
-
- use Math::Complex;
-
- Math::Complex::display_format('polar');
- $j = (root(1, 3))[1];
- print "j = $j\n"; # Prints "j = [1,2pi/3]"
- $j->display_format('cartesian');
- print "j = $j\n"; # Prints "j = -0.5+0.866025403784439i"
-
-The polar style attempts to emphasize arguments like I<k*pi/n>
-(where I<n> is a positive integer and I<k> an integer within [-9, +9]),
-this is called I<polar pretty-printing>.
-
-=head2 CHANGED IN PERL 5.6
-
-The C<display_format> class method and the corresponding
-C<display_format> object method can now be called using
-a parameter hash instead of just a one parameter.
-
-The old display format style, which can have values C<"cartesian"> or
-C<"polar">, can be changed using the C<"style"> parameter.
-
- $j->display_format(style => "polar");
-
-The one parameter calling convention also still works.
-
- $j->display_format("polar");
-
-There are two new display parameters.
-
-The first one is C<"format">, which is a sprintf()-style format string
-to be used for both numeric parts of the complex number(s). The is
-somewhat system-dependent but most often it corresponds to C<"%.15g">.
-You can revert to the default by setting the C<format> to C<undef>.
-
- # the $j from the above example
-
- $j->display_format('format' => '%.5f');
- print "j = $j\n"; # Prints "j = -0.50000+0.86603i"
- $j->display_format('format' => undef);
- print "j = $j\n"; # Prints "j = -0.5+0.86603i"
-
-Notice that this affects also the return values of the
-C<display_format> methods: in list context the whole parameter hash
-will be returned, as opposed to only the style parameter value.
-This is a potential incompatibility with earlier versions if you
-have been calling the C<display_format> method in list context.
-
-The second new display parameter is C<"polar_pretty_print">, which can
-be set to true or false, the default being true. See the previous
-section for what this means.
-
-=head1 USAGE
-
-Thanks to overloading, the handling of arithmetics with complex numbers
-is simple and almost transparent.
-
-Here are some examples:
-
- use Math::Complex;
-
- $j = cplxe(1, 2*pi/3); # $j ** 3 == 1
- print "j = $j, j**3 = ", $j ** 3, "\n";
- print "1 + j + j**2 = ", 1 + $j + $j**2, "\n";
-
- $z = -16 + 0*i; # Force it to be a complex
- print "sqrt($z) = ", sqrt($z), "\n";
-
- $k = exp(i * 2*pi/3);
- print "$j - $k = ", $j - $k, "\n";
-
- $z->Re(3); # Re, Im, arg, abs,
- $j->arg(2); # (the last two aka rho, theta)
- # can be used also as mutators.
-
-=head1 ERRORS DUE TO DIVISION BY ZERO OR LOGARITHM OF ZERO
-
-The division (/) and the following functions
-
- log ln log10 logn
- tan sec csc cot
- atan asec acsc acot
- tanh sech csch coth
- atanh asech acsch acoth
-
-cannot be computed for all arguments because that would mean dividing
-by zero or taking logarithm of zero. These situations cause fatal
-runtime errors looking like this
-
- cot(0): Division by zero.
- (Because in the definition of cot(0), the divisor sin(0) is 0)
- Died at ...
-
-or
-
- atanh(-1): Logarithm of zero.
- Died at...
-
-For the C<csc>, C<cot>, C<asec>, C<acsc>, C<acot>, C<csch>, C<coth>,
-C<asech>, C<acsch>, the argument cannot be C<0> (zero). For the the
-logarithmic functions and the C<atanh>, C<acoth>, the argument cannot
-be C<1> (one). For the C<atanh>, C<acoth>, the argument cannot be
-C<-1> (minus one). For the C<atan>, C<acot>, the argument cannot be
-C<i> (the imaginary unit). For the C<atan>, C<acoth>, the argument
-cannot be C<-i> (the negative imaginary unit). For the C<tan>,
-C<sec>, C<tanh>, the argument cannot be I<pi/2 + k * pi>, where I<k>
-is any integer.
-
-Note that because we are operating on approximations of real numbers,
-these errors can happen when merely `too close' to the singularities
-listed above.
-
-=head1 ERRORS DUE TO INDIGESTIBLE ARGUMENTS
-
-The C<make> and C<emake> accept both real and complex arguments.
-When they cannot recognize the arguments they will die with error
-messages like the following
-
- Math::Complex::make: Cannot take real part of ...
- Math::Complex::make: Cannot take real part of ...
- Math::Complex::emake: Cannot take rho of ...
- Math::Complex::emake: Cannot take theta of ...
-
-=head1 BUGS
-
-Saying C<use Math::Complex;> exports many mathematical routines in the
-caller environment and even overrides some (C<sqrt>, C<log>).
-This is construed as a feature by the Authors, actually... ;-)
-
-All routines expect to be given real or complex numbers. Don't attempt to
-use BigFloat, since Perl has currently no rule to disambiguate a '+'
-operation (for instance) between two overloaded entities.
-
-In Cray UNICOS there is some strange numerical instability that results
-in root(), cos(), sin(), cosh(), sinh(), losing accuracy fast. Beware.
-The bug may be in UNICOS math libs, in UNICOS C compiler, in Math::Complex.
-Whatever it is, it does not manifest itself anywhere else where Perl runs.
-
-=head1 AUTHORS
-
-Raphael Manfredi <F<Raphael_Manfredi@pobox.com>> and
-Jarkko Hietaniemi <F<jhi@iki.fi>>.
-
-Extensive patches by Daniel S. Lewart <F<d-lewart@uiuc.edu>>.
-
-=cut
-
-1;
-
-# eof
diff --git a/contrib/perl5/lib/Math/Trig.pm b/contrib/perl5/lib/Math/Trig.pm
deleted file mode 100644
index b28f150..0000000
--- a/contrib/perl5/lib/Math/Trig.pm
+++ /dev/null
@@ -1,456 +0,0 @@
-#
-# Trigonometric functions, mostly inherited from Math::Complex.
-# -- Jarkko Hietaniemi, since April 1997
-# -- Raphael Manfredi, September 1996 (indirectly: because of Math::Complex)
-#
-
-require Exporter;
-package Math::Trig;
-
-use 5.005_64;
-use strict;
-
-use Math::Complex qw(:trig);
-
-our($VERSION, $PACKAGE, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-
-@ISA = qw(Exporter);
-
-$VERSION = 1.00;
-
-my @angcnv = qw(rad2deg rad2grad
- deg2rad deg2grad
- grad2rad grad2deg);
-
-@EXPORT = (@{$Math::Complex::EXPORT_TAGS{'trig'}},
- @angcnv);
-
-my @rdlcnv = qw(cartesian_to_cylindrical
- cartesian_to_spherical
- cylindrical_to_cartesian
- cylindrical_to_spherical
- spherical_to_cartesian
- spherical_to_cylindrical);
-
-@EXPORT_OK = (@rdlcnv, 'great_circle_distance');
-
-%EXPORT_TAGS = ('radial' => [ @rdlcnv ]);
-
-sub pi2 () { 2 * pi }
-sub pip2 () { pi / 2 }
-
-sub DR () { pi2/360 }
-sub RD () { 360/pi2 }
-sub DG () { 400/360 }
-sub GD () { 360/400 }
-sub RG () { 400/pi2 }
-sub GR () { pi2/400 }
-
-#
-# Truncating remainder.
-#
-
-sub remt ($$) {
- # Oh yes, POSIX::fmod() would be faster. Possibly. If it is available.
- $_[0] - $_[1] * int($_[0] / $_[1]);
-}
-
-#
-# Angle conversions.
-#
-
-sub rad2rad($) { remt($_[0], pi2) }
-
-sub deg2deg($) { remt($_[0], 360) }
-
-sub grad2grad($) { remt($_[0], 400) }
-
-sub rad2deg ($;$) { my $d = RD * $_[0]; $_[1] ? $d : deg2deg($d) }
-
-sub deg2rad ($;$) { my $d = DR * $_[0]; $_[1] ? $d : rad2rad($d) }
-
-sub grad2deg ($;$) { my $d = GD * $_[0]; $_[1] ? $d : deg2deg($d) }
-
-sub deg2grad ($;$) { my $d = DG * $_[0]; $_[1] ? $d : grad2grad($d) }
-
-sub rad2grad ($;$) { my $d = RG * $_[0]; $_[1] ? $d : grad2grad($d) }
-
-sub grad2rad ($;$) { my $d = GR * $_[0]; $_[1] ? $d : rad2rad($d) }
-
-sub cartesian_to_spherical {
- my ( $x, $y, $z ) = @_;
-
- my $rho = sqrt( $x * $x + $y * $y + $z * $z );
-
- return ( $rho,
- atan2( $y, $x ),
- $rho ? acos( $z / $rho ) : 0 );
-}
-
-sub spherical_to_cartesian {
- my ( $rho, $theta, $phi ) = @_;
-
- return ( $rho * cos( $theta ) * sin( $phi ),
- $rho * sin( $theta ) * sin( $phi ),
- $rho * cos( $phi ) );
-}
-
-sub spherical_to_cylindrical {
- my ( $x, $y, $z ) = spherical_to_cartesian( @_ );
-
- return ( sqrt( $x * $x + $y * $y ), $_[1], $z );
-}
-
-sub cartesian_to_cylindrical {
- my ( $x, $y, $z ) = @_;
-
- return ( sqrt( $x * $x + $y * $y ), atan2( $y, $x ), $z );
-}
-
-sub cylindrical_to_cartesian {
- my ( $rho, $theta, $z ) = @_;
-
- return ( $rho * cos( $theta ), $rho * sin( $theta ), $z );
-}
-
-sub cylindrical_to_spherical {
- return ( cartesian_to_spherical( cylindrical_to_cartesian( @_ ) ) );
-}
-
-sub great_circle_distance {
- my ( $theta0, $phi0, $theta1, $phi1, $rho ) = @_;
-
- $rho = 1 unless defined $rho; # Default to the unit sphere.
-
- my $lat0 = pip2 - $phi0;
- my $lat1 = pip2 - $phi1;
-
- return $rho *
- acos(cos( $lat0 ) * cos( $lat1 ) * cos( $theta0 - $theta1 ) +
- sin( $lat0 ) * sin( $lat1 ) );
-}
-
-=pod
-
-=head1 NAME
-
-Math::Trig - trigonometric functions
-
-=head1 SYNOPSIS
-
- use Math::Trig;
-
- $x = tan(0.9);
- $y = acos(3.7);
- $z = asin(2.4);
-
- $halfpi = pi/2;
-
- $rad = deg2rad(120);
-
-=head1 DESCRIPTION
-
-C<Math::Trig> defines many trigonometric functions not defined by the
-core Perl which defines only the C<sin()> and C<cos()>. The constant
-B<pi> is also defined as are a few convenience functions for angle
-conversions.
-
-=head1 TRIGONOMETRIC FUNCTIONS
-
-The tangent
-
-=over 4
-
-=item B<tan>
-
-=back
-
-The cofunctions of the sine, cosine, and tangent (cosec/csc and cotan/cot
-are aliases)
-
-B<csc>, B<cosec>, B<sec>, B<sec>, B<cot>, B<cotan>
-
-The arcus (also known as the inverse) functions of the sine, cosine,
-and tangent
-
-B<asin>, B<acos>, B<atan>
-
-The principal value of the arc tangent of y/x
-
-B<atan2>(y, x)
-
-The arcus cofunctions of the sine, cosine, and tangent (acosec/acsc
-and acotan/acot are aliases)
-
-B<acsc>, B<acosec>, B<asec>, B<acot>, B<acotan>
-
-The hyperbolic sine, cosine, and tangent
-
-B<sinh>, B<cosh>, B<tanh>
-
-The cofunctions of the hyperbolic sine, cosine, and tangent (cosech/csch
-and cotanh/coth are aliases)
-
-B<csch>, B<cosech>, B<sech>, B<coth>, B<cotanh>
-
-The arcus (also known as the inverse) functions of the hyperbolic
-sine, cosine, and tangent
-
-B<asinh>, B<acosh>, B<atanh>
-
-The arcus cofunctions of the hyperbolic sine, cosine, and tangent
-(acsch/acosech and acoth/acotanh are aliases)
-
-B<acsch>, B<acosech>, B<asech>, B<acoth>, B<acotanh>
-
-The trigonometric constant B<pi> is also defined.
-
-$pi2 = 2 * B<pi>;
-
-=head2 ERRORS DUE TO DIVISION BY ZERO
-
-The following functions
-
- acoth
- acsc
- acsch
- asec
- asech
- atanh
- cot
- coth
- csc
- csch
- sec
- sech
- tan
- tanh
-
-cannot be computed for all arguments because that would mean dividing
-by zero or taking logarithm of zero. These situations cause fatal
-runtime errors looking like this
-
- cot(0): Division by zero.
- (Because in the definition of cot(0), the divisor sin(0) is 0)
- Died at ...
-
-or
-
- atanh(-1): Logarithm of zero.
- Died at...
-
-For the C<csc>, C<cot>, C<asec>, C<acsc>, C<acot>, C<csch>, C<coth>,
-C<asech>, C<acsch>, the argument cannot be C<0> (zero). For the
-C<atanh>, C<acoth>, the argument cannot be C<1> (one). For the
-C<atanh>, C<acoth>, the argument cannot be C<-1> (minus one). For the
-C<tan>, C<sec>, C<tanh>, C<sech>, the argument cannot be I<pi/2 + k *
-pi>, where I<k> is any integer.
-
-=head2 SIMPLE (REAL) ARGUMENTS, COMPLEX RESULTS
-
-Please note that some of the trigonometric functions can break out
-from the B<real axis> into the B<complex plane>. For example
-C<asin(2)> has no definition for plain real numbers but it has
-definition for complex numbers.
-
-In Perl terms this means that supplying the usual Perl numbers (also
-known as scalars, please see L<perldata>) as input for the
-trigonometric functions might produce as output results that no more
-are simple real numbers: instead they are complex numbers.
-
-The C<Math::Trig> handles this by using the C<Math::Complex> package
-which knows how to handle complex numbers, please see L<Math::Complex>
-for more information. In practice you need not to worry about getting
-complex numbers as results because the C<Math::Complex> takes care of
-details like for example how to display complex numbers. For example:
-
- print asin(2), "\n";
-
-should produce something like this (take or leave few last decimals):
-
- 1.5707963267949-1.31695789692482i
-
-That is, a complex number with the real part of approximately C<1.571>
-and the imaginary part of approximately C<-1.317>.
-
-=head1 PLANE ANGLE CONVERSIONS
-
-(Plane, 2-dimensional) angles may be converted with the following functions.
-
- $radians = deg2rad($degrees);
- $radians = grad2rad($gradians);
-
- $degrees = rad2deg($radians);
- $degrees = grad2deg($gradians);
-
- $gradians = deg2grad($degrees);
- $gradians = rad2grad($radians);
-
-The full circle is 2 I<pi> radians or I<360> degrees or I<400> gradians.
-The result is by default wrapped to be inside the [0, {2pi,360,400}[ circle.
-If you don't want this, supply a true second argument:
-
- $zillions_of_radians = deg2rad($zillions_of_degrees, 1);
- $negative_degrees = rad2deg($negative_radians, 1);
-
-You can also do the wrapping explicitly by rad2rad(), deg2deg(), and
-grad2grad().
-
-=head1 RADIAL COORDINATE CONVERSIONS
-
-B<Radial coordinate systems> are the B<spherical> and the B<cylindrical>
-systems, explained shortly in more detail.
-
-You can import radial coordinate conversion functions by using the
-C<:radial> tag:
-
- use Math::Trig ':radial';
-
- ($rho, $theta, $z) = cartesian_to_cylindrical($x, $y, $z);
- ($rho, $theta, $phi) = cartesian_to_spherical($x, $y, $z);
- ($x, $y, $z) = cylindrical_to_cartesian($rho, $theta, $z);
- ($rho_s, $theta, $phi) = cylindrical_to_spherical($rho_c, $theta, $z);
- ($x, $y, $z) = spherical_to_cartesian($rho, $theta, $phi);
- ($rho_c, $theta, $z) = spherical_to_cylindrical($rho_s, $theta, $phi);
-
-B<All angles are in radians>.
-
-=head2 COORDINATE SYSTEMS
-
-B<Cartesian> coordinates are the usual rectangular I<(x, y,
-z)>-coordinates.
-
-Spherical coordinates, I<(rho, theta, pi)>, are three-dimensional
-coordinates which define a point in three-dimensional space. They are
-based on a sphere surface. The radius of the sphere is B<rho>, also
-known as the I<radial> coordinate. The angle in the I<xy>-plane
-(around the I<z>-axis) is B<theta>, also known as the I<azimuthal>
-coordinate. The angle from the I<z>-axis is B<phi>, also known as the
-I<polar> coordinate. The `North Pole' is therefore I<0, 0, rho>, and
-the `Bay of Guinea' (think of the missing big chunk of Africa) I<0,
-pi/2, rho>. In geographical terms I<phi> is latitude (northward
-positive, southward negative) and I<theta> is longitude (eastward
-positive, westward negative).
-
-B<BEWARE>: some texts define I<theta> and I<phi> the other way round,
-some texts define the I<phi> to start from the horizontal plane, some
-texts use I<r> in place of I<rho>.
-
-Cylindrical coordinates, I<(rho, theta, z)>, are three-dimensional
-coordinates which define a point in three-dimensional space. They are
-based on a cylinder surface. The radius of the cylinder is B<rho>,
-also known as the I<radial> coordinate. The angle in the I<xy>-plane
-(around the I<z>-axis) is B<theta>, also known as the I<azimuthal>
-coordinate. The third coordinate is the I<z>, pointing up from the
-B<theta>-plane.
-
-=head2 3-D ANGLE CONVERSIONS
-
-Conversions to and from spherical and cylindrical coordinates are
-available. Please notice that the conversions are not necessarily
-reversible because of the equalities like I<pi> angles being equal to
-I<-pi> angles.
-
-=over 4
-
-=item cartesian_to_cylindrical
-
- ($rho, $theta, $z) = cartesian_to_cylindrical($x, $y, $z);
-
-=item cartesian_to_spherical
-
- ($rho, $theta, $phi) = cartesian_to_spherical($x, $y, $z);
-
-=item cylindrical_to_cartesian
-
- ($x, $y, $z) = cylindrical_to_cartesian($rho, $theta, $z);
-
-=item cylindrical_to_spherical
-
- ($rho_s, $theta, $phi) = cylindrical_to_spherical($rho_c, $theta, $z);
-
-Notice that when C<$z> is not 0 C<$rho_s> is not equal to C<$rho_c>.
-
-=item spherical_to_cartesian
-
- ($x, $y, $z) = spherical_to_cartesian($rho, $theta, $phi);
-
-=item spherical_to_cylindrical
-
- ($rho_c, $theta, $z) = spherical_to_cylindrical($rho_s, $theta, $phi);
-
-Notice that when C<$z> is not 0 C<$rho_c> is not equal to C<$rho_s>.
-
-=back
-
-=head1 GREAT CIRCLE DISTANCES
-
-You can compute spherical distances, called B<great circle distances>,
-by importing the C<great_circle_distance> function:
-
- use Math::Trig 'great_circle_distance'
-
- $distance = great_circle_distance($theta0, $phi0, $theta1, $phi1, [, $rho]);
-
-The I<great circle distance> is the shortest distance between two
-points on a sphere. The distance is in C<$rho> units. The C<$rho> is
-optional, it defaults to 1 (the unit sphere), therefore the distance
-defaults to radians.
-
-If you think geographically the I<theta> are longitudes: zero at the
-Greenwhich meridian, eastward positive, westward negative--and the
-I<phi> are latitudes: zero at the North Pole, northward positive,
-southward negative. B<NOTE>: this formula thinks in mathematics, not
-geographically: the I<phi> zero is at the North Pole, not at the
-Equator on the west coast of Africa (Bay of Guinea). You need to
-subtract your geographical coordinates from I<pi/2> (also known as 90
-degrees).
-
- $distance = great_circle_distance($lon0, pi/2 - $lat0,
- $lon1, pi/2 - $lat1, $rho);
-
-=head1 EXAMPLES
-
-To calculate the distance between London (51.3N 0.5W) and Tokyo (35.7N
-139.8E) in kilometers:
-
- use Math::Trig qw(great_circle_distance deg2rad);
-
- # Notice the 90 - latitude: phi zero is at the North Pole.
- @L = (deg2rad(-0.5), deg2rad(90 - 51.3));
- @T = (deg2rad(139.8),deg2rad(90 - 35.7));
-
- $km = great_circle_distance(@L, @T, 6378);
-
-The answer may be off by few percentages because of the irregular
-(slightly aspherical) form of the Earth. The used formula
-
- lat0 = 90 degrees - phi0
- lat1 = 90 degrees - phi1
- d = R * arccos(cos(lat0) * cos(lat1) * cos(lon1 - lon01) +
- sin(lat0) * sin(lat1))
-
-is also somewhat unreliable for small distances (for locations
-separated less than about five degrees) because it uses arc cosine
-which is rather ill-conditioned for values close to zero.
-
-=head1 BUGS
-
-Saying C<use Math::Trig;> exports many mathematical routines in the
-caller environment and even overrides some (C<sin>, C<cos>). This is
-construed as a feature by the Authors, actually... ;-)
-
-The code is not optimized for speed, especially because we use
-C<Math::Complex> and thus go quite near complex numbers while doing
-the computations even when the arguments are not. This, however,
-cannot be completely avoided if we want things like C<asin(2)> to give
-an answer instead of giving a fatal runtime error.
-
-=head1 AUTHORS
-
-Jarkko Hietaniemi <F<jhi@iki.fi>> and
-Raphael Manfredi <F<Raphael_Manfredi@pobox.com>>.
-
-=cut
-
-# eof
diff --git a/contrib/perl5/lib/Net/Ping.pm b/contrib/perl5/lib/Net/Ping.pm
deleted file mode 100644
index a2846fe..0000000
--- a/contrib/perl5/lib/Net/Ping.pm
+++ /dev/null
@@ -1,559 +0,0 @@
-package Net::Ping;
-
-# Author: mose@ccsn.edu (Russell Mosemann)
-#
-# Authors of the original pingecho():
-# karrer@bernina.ethz.ch (Andreas Karrer)
-# Paul.Marquess@btinternet.com (Paul Marquess)
-#
-# Copyright (c) 1996 Russell Mosemann. All rights reserved. This
-# program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-
-use 5.005_64;
-require Exporter;
-
-use strict;
-our(@ISA, @EXPORT, $VERSION, $def_timeout, $def_proto, $max_datasize);
-use FileHandle;
-use Socket qw( SOCK_DGRAM SOCK_STREAM SOCK_RAW PF_INET
- inet_aton sockaddr_in );
-use Carp;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(pingecho);
-$VERSION = 2.02;
-
-# Constants
-
-$def_timeout = 5; # Default timeout to wait for a reply
-$def_proto = "udp"; # Default protocol to use for pinging
-$max_datasize = 1024; # Maximum data bytes in a packet
-
-# Description: The pingecho() subroutine is provided for backward
-# compatibility with the original Net::Ping. It accepts a host
-# name/IP and an optional timeout in seconds. Create a tcp ping
-# object and try pinging the host. The result of the ping is returned.
-
-sub pingecho
-{
- my ($host, # Name or IP number of host to ping
- $timeout # Optional timeout in seconds
- ) = @_;
- my ($p); # A ping object
-
- $p = Net::Ping->new("tcp", $timeout);
- $p->ping($host); # Going out of scope closes the connection
-}
-
-# Description: The new() method creates a new ping object. Optional
-# parameters may be specified for the protocol to use, the timeout in
-# seconds and the size in bytes of additional data which should be
-# included in the packet.
-# After the optional parameters are checked, the data is constructed
-# and a socket is opened if appropriate. The object is returned.
-
-sub new
-{
- my ($this,
- $proto, # Optional protocol to use for pinging
- $timeout, # Optional timeout in seconds
- $data_size # Optional additional bytes of data
- ) = @_;
- my $class = ref($this) || $this;
- my $self = {};
- my ($cnt, # Count through data bytes
- $min_datasize # Minimum data bytes required
- );
-
- bless($self, $class);
-
- $proto = $def_proto unless $proto; # Determine the protocol
- croak("Protocol for ping must be \"tcp\", \"udp\" or \"icmp\"")
- unless $proto =~ m/^(tcp|udp|icmp)$/;
- $self->{"proto"} = $proto;
-
- $timeout = $def_timeout unless $timeout; # Determine the timeout
- croak("Default timeout for ping must be greater than 0 seconds")
- if $timeout <= 0;
- $self->{"timeout"} = $timeout;
-
- $min_datasize = ($proto eq "udp") ? 1 : 0; # Determine data size
- $data_size = $min_datasize unless defined($data_size) && $proto ne "tcp";
- croak("Data for ping must be from $min_datasize to $max_datasize bytes")
- if ($data_size < $min_datasize) || ($data_size > $max_datasize);
- $data_size-- if $self->{"proto"} eq "udp"; # We provide the first byte
- $self->{"data_size"} = $data_size;
-
- $self->{"data"} = ""; # Construct data bytes
- for ($cnt = 0; $cnt < $self->{"data_size"}; $cnt++)
- {
- $self->{"data"} .= chr($cnt % 256);
- }
-
- $self->{"seq"} = 0; # For counting packets
- if ($self->{"proto"} eq "udp") # Open a socket
- {
- $self->{"proto_num"} = (getprotobyname('udp'))[2] ||
- croak("Can't udp protocol by name");
- $self->{"port_num"} = (getservbyname('echo', 'udp'))[2] ||
- croak("Can't get udp echo port by name");
- $self->{"fh"} = FileHandle->new();
- socket($self->{"fh"}, &PF_INET(), &SOCK_DGRAM(),
- $self->{"proto_num"}) ||
- croak("udp socket error - $!");
- }
- elsif ($self->{"proto"} eq "icmp")
- {
- croak("icmp ping requires root privilege") if ($> and $^O ne 'VMS');
- $self->{"proto_num"} = (getprotobyname('icmp'))[2] ||
- croak("Can't get icmp protocol by name");
- $self->{"pid"} = $$ & 0xffff; # Save lower 16 bits of pid
- $self->{"fh"} = FileHandle->new();
- socket($self->{"fh"}, &PF_INET(), &SOCK_RAW(), $self->{"proto_num"}) ||
- croak("icmp socket error - $!");
- }
- elsif ($self->{"proto"} eq "tcp") # Just a file handle for now
- {
- $self->{"proto_num"} = (getprotobyname('tcp'))[2] ||
- croak("Can't get tcp protocol by name");
- $self->{"port_num"} = (getservbyname('echo', 'tcp'))[2] ||
- croak("Can't get tcp echo port by name");
- $self->{"fh"} = FileHandle->new();
- }
-
-
- return($self);
-}
-
-# Description: Ping a host name or IP number with an optional timeout.
-# First lookup the host, and return undef if it is not found. Otherwise
-# perform the specific ping method based on the protocol. Return the
-# result of the ping.
-
-sub ping
-{
- my ($self,
- $host, # Name or IP number of host to ping
- $timeout # Seconds after which ping times out
- ) = @_;
- my ($ip, # Packed IP number of $host
- $ret # The return value
- );
-
- croak("Usage: \$p->ping(\$host [, \$timeout])") unless @_ == 2 || @_ == 3;
- $timeout = $self->{"timeout"} unless $timeout;
- croak("Timeout must be greater than 0 seconds") if $timeout <= 0;
-
- $ip = inet_aton($host);
- return(undef) unless defined($ip); # Does host exist?
-
- if ($self->{"proto"} eq "udp")
- {
- $ret = $self->ping_udp($ip, $timeout);
- }
- elsif ($self->{"proto"} eq "icmp")
- {
- $ret = $self->ping_icmp($ip, $timeout);
- }
- elsif ($self->{"proto"} eq "tcp")
- {
- $ret = $self->ping_tcp($ip, $timeout);
- }
- else
- {
- croak("Unknown protocol \"$self->{proto}\" in ping()");
- }
- return($ret);
-}
-
-sub ping_icmp
-{
- my ($self,
- $ip, # Packed IP number of the host
- $timeout # Seconds after which ping times out
- ) = @_;
-
- my $ICMP_ECHOREPLY = 0; # ICMP packet types
- my $ICMP_ECHO = 8;
- my $icmp_struct = "C2 S3 A"; # Structure of a minimal ICMP packet
- my $subcode = 0; # No ICMP subcode for ECHO and ECHOREPLY
- my $flags = 0; # No special flags when opening a socket
- my $port = 0; # No port with ICMP
-
- my ($saddr, # sockaddr_in with port and ip
- $checksum, # Checksum of ICMP packet
- $msg, # ICMP packet to send
- $len_msg, # Length of $msg
- $rbits, # Read bits, filehandles for reading
- $nfound, # Number of ready filehandles found
- $finish_time, # Time ping should be finished
- $done, # set to 1 when we are done
- $ret, # Return value
- $recv_msg, # Received message including IP header
- $from_saddr, # sockaddr_in of sender
- $from_port, # Port packet was sent from
- $from_ip, # Packed IP of sender
- $from_type, # ICMP type
- $from_subcode, # ICMP subcode
- $from_chk, # ICMP packet checksum
- $from_pid, # ICMP packet id
- $from_seq, # ICMP packet sequence
- $from_msg # ICMP message
- );
-
- $self->{"seq"} = ($self->{"seq"} + 1) % 65536; # Increment sequence
- $checksum = 0; # No checksum for starters
- $msg = pack($icmp_struct . $self->{"data_size"}, $ICMP_ECHO, $subcode,
- $checksum, $self->{"pid"}, $self->{"seq"}, $self->{"data"});
- $checksum = Net::Ping->checksum($msg);
- $msg = pack($icmp_struct . $self->{"data_size"}, $ICMP_ECHO, $subcode,
- $checksum, $self->{"pid"}, $self->{"seq"}, $self->{"data"});
- $len_msg = length($msg);
- $saddr = sockaddr_in($port, $ip);
- send($self->{"fh"}, $msg, $flags, $saddr); # Send the message
-
- $rbits = "";
- vec($rbits, $self->{"fh"}->fileno(), 1) = 1;
- $ret = 0;
- $done = 0;
- $finish_time = time() + $timeout; # Must be done by this time
- while (!$done && $timeout > 0) # Keep trying if we have time
- {
- $nfound = select($rbits, undef, undef, $timeout); # Wait for packet
- $timeout = $finish_time - time(); # Get remaining time
- if (!defined($nfound)) # Hmm, a strange error
- {
- $ret = undef;
- $done = 1;
- }
- elsif ($nfound) # Got a packet from somewhere
- {
- $recv_msg = "";
- $from_saddr = recv($self->{"fh"}, $recv_msg, 1500, $flags);
- ($from_port, $from_ip) = sockaddr_in($from_saddr);
- ($from_type, $from_subcode, $from_chk,
- $from_pid, $from_seq, $from_msg) =
- unpack($icmp_struct . $self->{"data_size"},
- substr($recv_msg, length($recv_msg) - $len_msg,
- $len_msg));
- if (($from_type == $ICMP_ECHOREPLY) &&
- ($from_ip eq $ip) &&
- ($from_pid == $self->{"pid"}) && # Does the packet check out?
- ($from_seq == $self->{"seq"}))
- {
- $ret = 1; # It's a winner
- $done = 1;
- }
- }
- else # Oops, timed out
- {
- $done = 1;
- }
- }
- return($ret)
-}
-
-# Description: Do a checksum on the message. Basically sum all of
-# the short words and fold the high order bits into the low order bits.
-
-sub checksum
-{
- my ($class,
- $msg # The message to checksum
- ) = @_;
- my ($len_msg, # Length of the message
- $num_short, # The number of short words in the message
- $short, # One short word
- $chk # The checksum
- );
-
- $len_msg = length($msg);
- $num_short = int($len_msg / 2);
- $chk = 0;
- foreach $short (unpack("S$num_short", $msg))
- {
- $chk += $short;
- } # Add the odd byte in
- $chk += (unpack("C", substr($msg, $len_msg - 1, 1)) << 8) if $len_msg % 2;
- $chk = ($chk >> 16) + ($chk & 0xffff); # Fold high into low
- return(~(($chk >> 16) + $chk) & 0xffff); # Again and complement
-}
-
-# Description: Perform a tcp echo ping. Since a tcp connection is
-# host specific, we have to open and close each connection here. We
-# can't just leave a socket open. Because of the robust nature of
-# tcp, it will take a while before it gives up trying to establish a
-# connection. Therefore, we have to set the alarm to break out of the
-# connection sooner if the timeout expires. No data bytes are actually
-# sent since the successful establishment of a connection is proof
-# enough of the reachability of the remote host. Also, tcp is
-# expensive and doesn't need our help to add to the overhead.
-
-sub ping_tcp
-{
- my ($self,
- $ip, # Packed IP number of the host
- $timeout # Seconds after which ping times out
- ) = @_;
- my ($saddr, # sockaddr_in with port and ip
- $ret # The return value
- );
-
- socket($self->{"fh"}, &PF_INET(), &SOCK_STREAM(), $self->{"proto_num"}) ||
- croak("tcp socket error - $!");
- $saddr = sockaddr_in($self->{"port_num"}, $ip);
-
- $SIG{'ALRM'} = sub { die };
- alarm($timeout); # Interrupt connect() if we have to
-
- $ret = 0; # Default to unreachable
- eval <<'EOM' ;
- return unless connect($self->{"fh"}, $saddr);
- $ret = 1;
-EOM
- alarm(0);
- $self->{"fh"}->close();
- return($ret);
-}
-
-# Description: Perform a udp echo ping. Construct a message of
-# at least the one-byte sequence number and any additional data bytes.
-# Send the message out and wait for a message to come back. If we
-# get a message, make sure all of its parts match. If they do, we are
-# done. Otherwise go back and wait for the message until we run out
-# of time. Return the result of our efforts.
-
-sub ping_udp
-{
- my ($self,
- $ip, # Packed IP number of the host
- $timeout # Seconds after which ping times out
- ) = @_;
-
- my $flags = 0; # Nothing special on open
-
- my ($saddr, # sockaddr_in with port and ip
- $ret, # The return value
- $msg, # Message to be echoed
- $finish_time, # Time ping should be finished
- $done, # Set to 1 when we are done pinging
- $rbits, # Read bits, filehandles for reading
- $nfound, # Number of ready filehandles found
- $from_saddr, # sockaddr_in of sender
- $from_msg, # Characters echoed by $host
- $from_port, # Port message was echoed from
- $from_ip # Packed IP number of sender
- );
-
- $saddr = sockaddr_in($self->{"port_num"}, $ip);
- $self->{"seq"} = ($self->{"seq"} + 1) % 256; # Increment sequence
- $msg = chr($self->{"seq"}) . $self->{"data"}; # Add data if any
- send($self->{"fh"}, $msg, $flags, $saddr); # Send it
-
- $rbits = "";
- vec($rbits, $self->{"fh"}->fileno(), 1) = 1;
- $ret = 0; # Default to unreachable
- $done = 0;
- $finish_time = time() + $timeout; # Ping needs to be done by then
- while (!$done && $timeout > 0)
- {
- $nfound = select($rbits, undef, undef, $timeout); # Wait for response
- $timeout = $finish_time - time(); # Get remaining time
-
- if (!defined($nfound)) # Hmm, a strange error
- {
- $ret = undef;
- $done = 1;
- }
- elsif ($nfound) # A packet is waiting
- {
- $from_msg = "";
- $from_saddr = recv($self->{"fh"}, $from_msg, 1500, $flags)
- or last; # For example an unreachable host will make recv() fail.
- ($from_port, $from_ip) = sockaddr_in($from_saddr);
- if (($from_ip eq $ip) && # Does the packet check out?
- ($from_port == $self->{"port_num"}) &&
- ($from_msg eq $msg))
- {
- $ret = 1; # It's a winner
- $done = 1;
- }
- }
- else # Oops, timed out
- {
- $done = 1;
- }
- }
- return($ret);
-}
-
-# Description: Close the connection unless we are using the tcp
-# protocol, since it will already be closed.
-
-sub close
-{
- my ($self) = @_;
-
- $self->{"fh"}->close() unless $self->{"proto"} eq "tcp";
-}
-
-
-1;
-__END__
-
-=head1 NAME
-
-Net::Ping - check a remote host for reachability
-
-=head1 SYNOPSIS
-
- use Net::Ping;
-
- $p = Net::Ping->new();
- print "$host is alive.\n" if $p->ping($host);
- $p->close();
-
- $p = Net::Ping->new("icmp");
- foreach $host (@host_array)
- {
- print "$host is ";
- print "NOT " unless $p->ping($host, 2);
- print "reachable.\n";
- sleep(1);
- }
- $p->close();
-
- $p = Net::Ping->new("tcp", 2);
- while ($stop_time > time())
- {
- print "$host not reachable ", scalar(localtime()), "\n"
- unless $p->ping($host);
- sleep(300);
- }
- undef($p);
-
- # For backward compatibility
- print "$host is alive.\n" if pingecho($host);
-
-=head1 DESCRIPTION
-
-This module contains methods to test the reachability of remote
-hosts on a network. A ping object is first created with optional
-parameters, a variable number of hosts may be pinged multiple
-times and then the connection is closed.
-
-You may choose one of three different protocols to use for the
-ping. The "udp" protocol is the default. Note that a live remote host
-may still fail to be pingable by one or more of these protocols. For
-example, www.microsoft.com is generally alive but not pingable.
-
-With the "tcp" protocol the ping() method attempts to establish a
-connection to the remote host's echo port. If the connection is
-successfully established, the remote host is considered reachable. No
-data is actually echoed. This protocol does not require any special
-privileges but has higher overhead than the other two protocols.
-
-Specifying the "udp" protocol causes the ping() method to send a udp
-packet to the remote host's echo port. If the echoed packet is
-received from the remote host and the received packet contains the
-same data as the packet that was sent, the remote host is considered
-reachable. This protocol does not require any special privileges.
-
-It should be borne in mind that, for both tcp and udp ping, a host
-will be reported as unreachable if it is not running the
-appropriate echo service. For Unix-like systems see L<inetd(8)> for
-more information.
-
-If the "icmp" protocol is specified, the ping() method sends an icmp
-echo message to the remote host, which is what the UNIX ping program
-does. If the echoed message is received from the remote host and
-the echoed information is correct, the remote host is considered
-reachable. Specifying the "icmp" protocol requires that the program
-be run as root or that the program be setuid to root.
-
-=head2 Functions
-
-=over 4
-
-=item Net::Ping->new([$proto [, $def_timeout [, $bytes]]]);
-
-Create a new ping object. All of the parameters are optional. $proto
-specifies the protocol to use when doing a ping. The current choices
-are "tcp", "udp" or "icmp". The default is "udp".
-
-If a default timeout ($def_timeout) in seconds is provided, it is used
-when a timeout is not given to the ping() method (below). The timeout
-must be greater than 0 and the default, if not specified, is 5 seconds.
-
-If the number of data bytes ($bytes) is given, that many data bytes
-are included in the ping packet sent to the remote host. The number of
-data bytes is ignored if the protocol is "tcp". The minimum (and
-default) number of data bytes is 1 if the protocol is "udp" and 0
-otherwise. The maximum number of data bytes that can be specified is
-1024.
-
-=item $p->ping($host [, $timeout]);
-
-Ping the remote host and wait for a response. $host can be either the
-hostname or the IP number of the remote host. The optional timeout
-must be greater than 0 seconds and defaults to whatever was specified
-when the ping object was created. If the hostname cannot be found or
-there is a problem with the IP number, undef is returned. Otherwise,
-1 is returned if the host is reachable and 0 if it is not. For all
-practical purposes, undef and 0 and can be treated as the same case.
-
-=item $p->close();
-
-Close the network connection for this ping object. The network
-connection is also closed by "undef $p". The network connection is
-automatically closed if the ping object goes out of scope (e.g. $p is
-local to a subroutine and you leave the subroutine).
-
-=item pingecho($host [, $timeout]);
-
-To provide backward compatibility with the previous version of
-Net::Ping, a pingecho() subroutine is available with the same
-functionality as before. pingecho() uses the tcp protocol. The
-return values and parameters are the same as described for the ping()
-method. This subroutine is obsolete and may be removed in a future
-version of Net::Ping.
-
-=back
-
-=head1 WARNING
-
-pingecho() or a ping object with the tcp protocol use alarm() to
-implement the timeout. So, don't use alarm() in your program while
-you are using pingecho() or a ping object with the tcp protocol. The
-udp and icmp protocols do not use alarm() to implement the timeout.
-
-=head1 NOTES
-
-There will be less network overhead (and some efficiency in your
-program) if you specify either the udp or the icmp protocol. The tcp
-protocol will generate 2.5 times or more traffic for each ping than
-either udp or icmp. If many hosts are pinged frequently, you may wish
-to implement a small wait (e.g. 25ms or more) between each ping to
-avoid flooding your network with packets.
-
-The icmp protocol requires that the program be run as root or that it
-be setuid to root. The tcp and udp protocols do not require special
-privileges, but not all network devices implement the echo protocol
-for tcp or udp.
-
-Local hosts should normally respond to pings within milliseconds.
-However, on a very congested network it may take up to 3 seconds or
-longer to receive an echo packet from the remote host. If the timeout
-is set too low under these conditions, it will appear that the remote
-host is not reachable (which is almost the truth).
-
-Reachability doesn't necessarily mean that the remote host is actually
-functioning beyond its ability to echo packets.
-
-Because of a lack of anything better, this module uses its own
-routines to pack and unpack ICMP packets. It would be better for a
-separate module to be written which understands all of the different
-kinds of ICMP packets.
-
-=cut
diff --git a/contrib/perl5/lib/Net/hostent.pm b/contrib/perl5/lib/Net/hostent.pm
deleted file mode 100644
index 6cfde72..0000000
--- a/contrib/perl5/lib/Net/hostent.pm
+++ /dev/null
@@ -1,150 +0,0 @@
-package Net::hostent;
-use strict;
-
-use 5.005_64;
-our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-BEGIN {
- use Exporter ();
- @EXPORT = qw(gethostbyname gethostbyaddr gethost);
- @EXPORT_OK = qw(
- $h_name @h_aliases
- $h_addrtype $h_length
- @h_addr_list $h_addr
- );
- %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
-}
-use vars @EXPORT_OK;
-
-# Class::Struct forbids use of @ISA
-sub import { goto &Exporter::import }
-
-use Class::Struct qw(struct);
-struct 'Net::hostent' => [
- name => '$',
- aliases => '@',
- addrtype => '$',
- 'length' => '$',
- addr_list => '@',
-];
-
-sub addr { shift->addr_list->[0] }
-
-sub populate (@) {
- return unless @_;
- my $hob = new();
- $h_name = $hob->[0] = $_[0];
- @h_aliases = @{ $hob->[1] } = split ' ', $_[1];
- $h_addrtype = $hob->[2] = $_[2];
- $h_length = $hob->[3] = $_[3];
- $h_addr = $_[4];
- @h_addr_list = @{ $hob->[4] } = @_[ (4 .. $#_) ];
- return $hob;
-}
-
-sub gethostbyname ($) { populate(CORE::gethostbyname(shift)) }
-
-sub gethostbyaddr ($;$) {
- my ($addr, $addrtype);
- $addr = shift;
- require Socket unless @_;
- $addrtype = @_ ? shift : Socket::AF_INET();
- populate(CORE::gethostbyaddr($addr, $addrtype))
-}
-
-sub gethost($) {
- if ($_[0] =~ /^\d+(?:\.\d+(?:\.\d+(?:\.\d+)?)?)?$/) {
- require Socket;
- &gethostbyaddr(Socket::inet_aton(shift));
- } else {
- &gethostbyname;
- }
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Net::hostent - by-name interface to Perl's built-in gethost*() functions
-
-=head1 SYNOPSIS
-
- use Net::hostnet;
-
-=head1 DESCRIPTION
-
-This module's default exports override the core gethostbyname() and
-gethostbyaddr() functions, replacing them with versions that return
-"Net::hostent" objects. This object has methods that return the similarly
-named structure field name from the C's hostent structure from F<netdb.h>;
-namely name, aliases, addrtype, length, and addr_list. The aliases and
-addr_list methods return array reference, the rest scalars. The addr
-method is equivalent to the zeroth element in the addr_list array
-reference.
-
-You may also import all the structure fields directly into your namespace
-as regular variables using the :FIELDS import tag. (Note that this still
-overrides your core functions.) Access these fields as variables named
-with a preceding C<h_>. Thus, C<$host_obj-E<gt>name()> corresponds to
-$h_name if you import the fields. Array references are available as
-regular array variables, so for example C<@{ $host_obj-E<gt>aliases()
-}> would be simply @h_aliases.
-
-The gethost() function is a simple front-end that forwards a numeric
-argument to gethostbyaddr() by way of Socket::inet_aton, and the rest
-to gethostbyname().
-
-To access this functionality without the core overrides,
-pass the C<use> an empty import list, and then access
-function functions with their full qualified names.
-On the other hand, the built-ins are still available
-via the C<CORE::> pseudo-package.
-
-=head1 EXAMPLES
-
- use Net::hostent;
- use Socket;
-
- @ARGV = ('netscape.com') unless @ARGV;
-
- for $host ( @ARGV ) {
-
- unless ($h = gethost($host)) {
- warn "$0: no such host: $host\n";
- next;
- }
-
- printf "\n%s is %s%s\n",
- $host,
- lc($h->name) eq lc($host) ? "" : "*really* ",
- $h->name;
-
- print "\taliases are ", join(", ", @{$h->aliases}), "\n"
- if @{$h->aliases};
-
- if ( @{$h->addr_list} > 1 ) {
- my $i;
- for $addr ( @{$h->addr_list} ) {
- printf "\taddr #%d is [%s]\n", $i++, inet_ntoa($addr);
- }
- } else {
- printf "\taddress is [%s]\n", inet_ntoa($h->addr);
- }
-
- if ($h = gethostbyaddr($h->addr)) {
- if (lc($h->name) ne lc($host)) {
- printf "\tThat addr reverses to host %s!\n", $h->name;
- $host = $h->name;
- redo;
- }
- }
- }
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/Net/netent.pm b/contrib/perl5/lib/Net/netent.pm
deleted file mode 100644
index b21cd04..0000000
--- a/contrib/perl5/lib/Net/netent.pm
+++ /dev/null
@@ -1,168 +0,0 @@
-package Net::netent;
-use strict;
-
-use 5.005_64;
-our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-BEGIN {
- use Exporter ();
- @EXPORT = qw(getnetbyname getnetbyaddr getnet);
- @EXPORT_OK = qw(
- $n_name @n_aliases
- $n_addrtype $n_net
- );
- %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
-}
-use vars @EXPORT_OK;
-
-# Class::Struct forbids use of @ISA
-sub import { goto &Exporter::import }
-
-use Class::Struct qw(struct);
-struct 'Net::netent' => [
- name => '$',
- aliases => '@',
- addrtype => '$',
- net => '$',
-];
-
-sub populate (@) {
- return unless @_;
- my $nob = new();
- $n_name = $nob->[0] = $_[0];
- @n_aliases = @{ $nob->[1] } = split ' ', $_[1];
- $n_addrtype = $nob->[2] = $_[2];
- $n_net = $nob->[3] = $_[3];
- return $nob;
-}
-
-sub getnetbyname ($) { populate(CORE::getnetbyname(shift)) }
-
-sub getnetbyaddr ($;$) {
- my ($net, $addrtype);
- $net = shift;
- require Socket if @_;
- $addrtype = @_ ? shift : Socket::AF_INET();
- populate(CORE::getnetbyaddr($net, $addrtype))
-}
-
-sub getnet($) {
- if ($_[0] =~ /^\d+(?:\.\d+(?:\.\d+(?:\.\d+)?)?)?$/) {
- require Socket;
- &getnetbyaddr(Socket::inet_aton(shift));
- } else {
- &getnetbyname;
- }
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Net::netent - by-name interface to Perl's built-in getnet*() functions
-
-=head1 SYNOPSIS
-
- use Net::netent qw(:FIELDS);
- getnetbyname("loopback") or die "bad net";
- printf "%s is %08X\n", $n_name, $n_net;
-
- use Net::netent;
-
- $n = getnetbyname("loopback") or die "bad net";
- { # there's gotta be a better way, eh?
- @bytes = unpack("C4", pack("N", $n->net));
- shift @bytes while @bytes && $bytes[0] == 0;
- }
- printf "%s is %08X [%d.%d.%d.%d]\n", $n->name, $n->net, @bytes;
-
-=head1 DESCRIPTION
-
-This module's default exports override the core getnetbyname() and
-getnetbyaddr() functions, replacing them with versions that return
-"Net::netent" objects. This object has methods that return the similarly
-named structure field name from the C's netent structure from F<netdb.h>;
-namely name, aliases, addrtype, and net. The aliases
-method returns an array reference, the rest scalars.
-
-You may also import all the structure fields directly into your namespace
-as regular variables using the :FIELDS import tag. (Note that this still
-overrides your core functions.) Access these fields as variables named
-with a preceding C<n_>. Thus, C<$net_obj-E<gt>name()> corresponds to
-$n_name if you import the fields. Array references are available as
-regular array variables, so for example C<@{ $net_obj-E<gt>aliases()
-}> would be simply @n_aliases.
-
-The getnet() function is a simple front-end that forwards a numeric
-argument to getnetbyaddr(), and the rest
-to getnetbyname().
-
-To access this functionality without the core overrides,
-pass the C<use> an empty import list, and then access
-function functions with their full qualified names.
-On the other hand, the built-ins are still available
-via the C<CORE::> pseudo-package.
-
-=head1 EXAMPLES
-
-The getnet() functions do this in the Perl core:
-
- sv_setiv(sv, (I32)nent->n_net);
-
-The gethost() functions do this in the Perl core:
-
- sv_setpvn(sv, hent->h_addr, len);
-
-That means that the address comes back in binary for the
-host functions, and as a regular perl integer for the net ones.
-This seems a bug, but here's how to deal with it:
-
- use strict;
- use Socket;
- use Net::netent;
-
- @ARGV = ('loopback') unless @ARGV;
-
- my($n, $net);
-
- for $net ( @ARGV ) {
-
- unless ($n = getnetbyname($net)) {
- warn "$0: no such net: $net\n";
- next;
- }
-
- printf "\n%s is %s%s\n",
- $net,
- lc($n->name) eq lc($net) ? "" : "*really* ",
- $n->name;
-
- print "\taliases are ", join(", ", @{$n->aliases}), "\n"
- if @{$n->aliases};
-
- # this is stupid; first, why is this not in binary?
- # second, why am i going through these convolutions
- # to make it looks right
- {
- my @a = unpack("C4", pack("N", $n->net));
- shift @a while @a && $a[0] == 0;
- printf "\taddr is %s [%d.%d.%d.%d]\n", $n->net, @a;
- }
-
- if ($n = getnetbyaddr($n->net)) {
- if (lc($n->name) ne lc($net)) {
- printf "\tThat addr reverses to net %s!\n", $n->name;
- $net = $n->name;
- redo;
- }
- }
- }
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/Net/protoent.pm b/contrib/perl5/lib/Net/protoent.pm
deleted file mode 100644
index 00a76af..0000000
--- a/contrib/perl5/lib/Net/protoent.pm
+++ /dev/null
@@ -1,96 +0,0 @@
-package Net::protoent;
-use strict;
-
-use 5.005_64;
-our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-BEGIN {
- use Exporter ();
- @EXPORT = qw(getprotobyname getprotobynumber getprotoent);
- @EXPORT_OK = qw( $p_name @p_aliases $p_proto getproto );
- %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
-}
-use vars @EXPORT_OK;
-
-# Class::Struct forbids use of @ISA
-sub import { goto &Exporter::import }
-
-use Class::Struct qw(struct);
-struct 'Net::protoent' => [
- name => '$',
- aliases => '@',
- proto => '$',
-];
-
-sub populate (@) {
- return unless @_;
- my $pob = new();
- $p_name = $pob->[0] = $_[0];
- @p_aliases = @{ $pob->[1] } = split ' ', $_[1];
- $p_proto = $pob->[2] = $_[2];
- return $pob;
-}
-
-sub getprotoent ( ) { populate(CORE::getprotoent()) }
-sub getprotobyname ($) { populate(CORE::getprotobyname(shift)) }
-sub getprotobynumber ($) { populate(CORE::getprotobynumber(shift)) }
-
-sub getproto ($;$) {
- no strict 'refs';
- return &{'getprotoby' . ($_[0]=~/^\d+$/ ? 'number' : 'name')}(@_);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Net::protoent - by-name interface to Perl's built-in getproto*() functions
-
-=head1 SYNOPSIS
-
- use Net::protoent;
- $p = getprotobyname(shift || 'tcp') || die "no proto";
- printf "proto for %s is %d, aliases are %s\n",
- $p->name, $p->proto, "@{$p->aliases}";
-
- use Net::protoent qw(:FIELDS);
- getprotobyname(shift || 'tcp') || die "no proto";
- print "proto for $p_name is $p_proto, aliases are @p_aliases\n";
-
-=head1 DESCRIPTION
-
-This module's default exports override the core getprotoent(),
-getprotobyname(), and getnetbyport() functions, replacing them with
-versions that return "Net::protoent" objects. They take default
-second arguments of "tcp". This object has methods that return the
-similarly named structure field name from the C's protoent structure
-from F<netdb.h>; namely name, aliases, and proto. The aliases method
-returns an array reference, the rest scalars.
-
-You may also import all the structure fields directly into your namespace
-as regular variables using the :FIELDS import tag. (Note that this still
-overrides your core functions.) Access these fields as variables named
-with a preceding C<p_>. Thus, C<$proto_obj-E<gt>name()> corresponds to
-$p_name if you import the fields. Array references are available as
-regular array variables, so for example C<@{ $proto_obj-E<gt>aliases()
-}> would be simply @p_aliases.
-
-The getproto() function is a simple front-end that forwards a numeric
-argument to getprotobyport(), and the rest to getprotobyname().
-This function is not exported by default.
-
-To access this functionality without the core overrides,
-pass the C<use> an empty import list, and then access
-function functions with their full qualified names.
-On the other hand, the built-ins are still available
-via the C<CORE::> pseudo-package.
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/Net/servent.pm b/contrib/perl5/lib/Net/servent.pm
deleted file mode 100644
index c892af0..0000000
--- a/contrib/perl5/lib/Net/servent.pm
+++ /dev/null
@@ -1,112 +0,0 @@
-package Net::servent;
-use strict;
-
-use 5.005_64;
-our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-BEGIN {
- use Exporter ();
- @EXPORT = qw(getservbyname getservbyport getservent getserv);
- @EXPORT_OK = qw( $s_name @s_aliases $s_port $s_proto );
- %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
-}
-use vars @EXPORT_OK;
-
-# Class::Struct forbids use of @ISA
-sub import { goto &Exporter::import }
-
-use Class::Struct qw(struct);
-struct 'Net::servent' => [
- name => '$',
- aliases => '@',
- port => '$',
- proto => '$',
-];
-
-sub populate (@) {
- return unless @_;
- my $sob = new();
- $s_name = $sob->[0] = $_[0];
- @s_aliases = @{ $sob->[1] } = split ' ', $_[1];
- $s_port = $sob->[2] = $_[2];
- $s_proto = $sob->[3] = $_[3];
- return $sob;
-}
-
-sub getservent ( ) { populate(CORE::getservent()) }
-sub getservbyname ($;$) { populate(CORE::getservbyname(shift,shift||'tcp')) }
-sub getservbyport ($;$) { populate(CORE::getservbyport(shift,shift||'tcp')) }
-
-sub getserv ($;$) {
- no strict 'refs';
- return &{'getservby' . ($_[0]=~/^\d+$/ ? 'port' : 'name')}(@_);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Net::servent - by-name interface to Perl's built-in getserv*() functions
-
-=head1 SYNOPSIS
-
- use Net::servent;
- $s = getservbyname(shift || 'ftp') || die "no service";
- printf "port for %s is %s, aliases are %s\n",
- $s->name, $s->port, "@{$s->aliases}";
-
- use Net::servent qw(:FIELDS);
- getservbyname(shift || 'ftp') || die "no service";
- print "port for $s_name is $s_port, aliases are @s_aliases\n";
-
-=head1 DESCRIPTION
-
-This module's default exports override the core getservent(),
-getservbyname(), and
-getnetbyport() functions, replacing them with versions that return
-"Net::servent" objects. They take default second arguments of "tcp". This object has methods that return the similarly
-named structure field name from the C's servent structure from F<netdb.h>;
-namely name, aliases, port, and proto. The aliases
-method returns an array reference, the rest scalars.
-
-You may also import all the structure fields directly into your namespace
-as regular variables using the :FIELDS import tag. (Note that this still
-overrides your core functions.) Access these fields as variables named
-with a preceding C<n_>. Thus, C<$serv_obj-E<gt>name()> corresponds to
-$s_name if you import the fields. Array references are available as
-regular array variables, so for example C<@{ $serv_obj-E<gt>aliases()
-}> would be simply @s_aliases.
-
-The getserv() function is a simple front-end that forwards a numeric
-argument to getservbyport(), and the rest to getservbyname().
-
-To access this functionality without the core overrides,
-pass the C<use> an empty import list, and then access
-function functions with their full qualified names.
-On the other hand, the built-ins are still available
-via the C<CORE::> pseudo-package.
-
-=head1 EXAMPLES
-
- use Net::servent qw(:FIELDS);
-
- while (@ARGV) {
- my ($service, $proto) = ((split m!/!, shift), 'tcp');
- my $valet = getserv($service, $proto);
- unless ($valet) {
- warn "$0: No service: $service/$proto\n"
- next;
- }
- printf "service $service/$proto is port %d\n", $valet->port;
- print "alias are @s_aliases\n" if @s_aliases;
- }
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/Pod/Checker.pm b/contrib/perl5/lib/Pod/Checker.pm
deleted file mode 100644
index 0863c80..0000000
--- a/contrib/perl5/lib/Pod/Checker.pm
+++ /dev/null
@@ -1,1242 +0,0 @@
-#############################################################################
-# Pod/Checker.pm -- check pod documents for syntax errors
-#
-# Copyright (C) 1994-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Checker;
-
-use vars qw($VERSION);
-$VERSION = 1.2; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-use Pod::ParseUtils; ## for hyperlinks and lists
-
-=head1 NAME
-
-Pod::Checker, podchecker() - check pod documents for syntax errors
-
-=head1 SYNOPSIS
-
- use Pod::Checker;
-
- $syntax_okay = podchecker($filepath, $outputpath, %options);
-
- my $checker = new Pod::Checker %options;
- $checker->parse_from_file($filepath, \*STDERR);
-
-=head1 OPTIONS/ARGUMENTS
-
-C<$filepath> is the input POD to read and C<$outputpath> is
-where to write POD syntax error messages. Either argument may be a scalar
-indicating a file-path, or else a reference to an open filehandle.
-If unspecified, the input-file it defaults to C<\*STDIN>, and
-the output-file defaults to C<\*STDERR>.
-
-=head2 podchecker()
-
-This function can take a hash of options:
-
-=over 4
-
-=item B<-warnings> =E<gt> I<val>
-
-Turn warnings on/off. I<val> is usually 1 for on, but higher values
-trigger additional warnings. See L<"Warnings">.
-
-=back
-
-=head1 DESCRIPTION
-
-B<podchecker> will perform syntax checking of Perl5 POD format documentation.
-
-I<NOTE THAT THIS MODULE IS CURRENTLY IN THE BETA STAGE!>
-
-It is hoped that curious/ambitious user will help flesh out and add the
-additional features they wish to see in B<Pod::Checker> and B<podchecker>
-and verify that the checks are consistent with L<perlpod>.
-
-The following checks are currently preformed:
-
-=over 4
-
-=item *
-
-Unknown '=xxxx' commands, unknown 'XE<lt>...E<gt>' interior-sequences,
-and unterminated interior sequences.
-
-=item *
-
-Check for proper balancing of C<=begin> and C<=end>. The contents of such
-a block are generally ignored, i.e. no syntax checks are performed.
-
-=item *
-
-Check for proper nesting and balancing of C<=over>, C<=item> and C<=back>.
-
-=item *
-
-Check for same nested interior-sequences (e.g.
-C<LE<lt>...LE<lt>...E<gt>...E<gt>>).
-
-=item *
-
-Check for malformed or nonexisting entities C<EE<lt>...E<gt>>.
-
-=item *
-
-Check for correct syntax of hyperlinks C<LE<lt>...E<gt>>. See L<perlpod>
-for details.
-
-=item *
-
-Check for unresolved document-internal links. This check may also reveal
-misspelled links that seem to be internal links but should be links
-to something else.
-
-=back
-
-=head1 DIAGNOSTICS
-
-=head2 Errors
-
-=over 4
-
-=item * empty =headn
-
-A heading (C<=head1> or C<=head2>) without any text? That ain't no
-heading!
-
-=item * =over on line I<N> without closing =back
-
-The C<=over> command does not have a corresponding C<=back> before the
-next heading (C<=head1> or C<=head2>) or the end of the file.
-
-=item * =item without previous =over
-
-=item * =back without previous =over
-
-An C<=item> or C<=back> command has been found outside a
-C<=over>/C<=back> block.
-
-=item * No argument for =begin
-
-A C<=begin> command was found that is not followed by the formatter
-specification.
-
-=item * =end without =begin
-
-A standalone C<=end> command was found.
-
-=item * Nested =begin's
-
-There were at least two consecutive C<=begin> commands without
-the corresponding C<=end>. Only one C<=begin> may be active at
-a time.
-
-=item * =for without formatter specification
-
-There is no specification of the formatter after the C<=for> command.
-
-=item * unresolved internal link I<NAME>
-
-The given link to I<NAME> does not have a matching node in the current
-POD. This also happend when a single word node name is not enclosed in
-C<"">.
-
-=item * Unknown command "I<CMD>"
-
-An invalid POD command has been found. Valid are C<=head1>, C<=head2>,
-C<=over>, C<=item>, C<=back>, C<=begin>, C<=end>, C<=for>, C<=pod>,
-C<=cut>
-
-=item * Unknown interior-sequence "I<SEQ>"
-
-An invalid markup command has been encountered. Valid are:
-C<BE<lt>E<gt>>, C<CE<lt>E<gt>>, C<EE<lt>E<gt>>, C<FE<lt>E<gt>>,
-C<IE<lt>E<gt>>, C<LE<lt>E<gt>>, C<SE<lt>E<gt>>, C<XE<lt>E<gt>>,
-C<ZE<lt>E<gt>>
-
-=item * nested commands I<CMD>E<lt>...I<CMD>E<lt>...E<gt>...E<gt>
-
-Two nested identical markup commands have been found. Generally this
-does not make sense.
-
-=item * garbled entity I<STRING>
-
-The I<STRING> found cannot be interpreted as a character entity.
-
-=item * Entity number out of range
-
-An entity specified by number (dec, hex, oct) is out of range (1-255).
-
-=item * malformed link LE<lt>E<gt>
-
-The link found cannot be parsed because it does not conform to the
-syntax described in L<perlpod>.
-
-=item * nonempty ZE<lt>E<gt>
-
-The C<ZE<lt>E<gt>> sequence is supposed to be empty.
-
-=item * empty XE<lt>E<gt>
-
-The index entry specified contains nothing but whitespace.
-
-=item * Spurious text after =pod / =cut
-
-The commands C<=pod> and C<=cut> do not take any arguments.
-
-=item * Spurious character(s) after =back
-
-The C<=back> command does not take any arguments.
-
-=back
-
-=head2 Warnings
-
-These may not necessarily cause trouble, but indicate mediocre style.
-
-=over 4
-
-=item * multiple occurence of link target I<name>
-
-The POD file has some C<=item> and/or C<=head> commands that have
-the same text. Potential hyperlinks to such a text cannot be unique then.
-
-=item * line containing nothing but whitespace in paragraph
-
-There is some whitespace on a seemingly empty line. POD is very sensitive
-to such things, so this is flagged. B<vi> users switch on the B<list>
-option to avoid this problem.
-
-=begin _disabled_
-
-=item * file does not start with =head
-
-The file starts with a different POD directive than head.
-This is most probably something you do not want.
-
-=end _disabled_
-
-=item * previous =item has no contents
-
-There is a list C<=item> right above the flagged line that has no
-text contents. You probably want to delete empty items.
-
-=item * preceding non-item paragraph(s)
-
-A list introduced by C<=over> starts with a text or verbatim paragraph,
-but continues with C<=item>s. Move the non-item paragraph out of the
-C<=over>/C<=back> block.
-
-=item * =item type mismatch (I<one> vs. I<two>)
-
-A list started with e.g. a bulletted C<=item> and continued with a
-numbered one. This is obviously inconsistent. For most translators the
-type of the I<first> C<=item> determines the type of the list.
-
-=item * I<N> unescaped C<E<lt>E<gt>> in paragraph
-
-Angle brackets not written as C<E<lt>ltE<gt>> and C<E<lt>gtE<gt>>
-can potentially cause errors as they could be misinterpreted as
-markup commands. This is only printed when the -warnings level is
-greater than 1.
-
-=item * Unknown entity
-
-A character entity was found that does not belong to the standard
-ISO set or the POD specials C<verbar> and C<sol>.
-
-=item * No items in =over
-
-The list opened with C<=over> does not contain any items.
-
-=item * No argument for =item
-
-C<=item> without any parameters is deprecated. It should either be followed
-by C<*> to indicate an unordered list, by a number (optionally followed
-by a dot) to indicate an ordered (numbered) list or simple text for a
-definition list.
-
-=item * empty section in previous paragraph
-
-The previous section (introduced by a C<=head> command) does not contain
-any text. This usually indicates that something is missing. Note: A
-C<=head1> followed immediately by C<=head2> does not trigger this warning.
-
-=item * Verbatim paragraph in NAME section
-
-The NAME section (C<=head1 NAME>) should consist of a single paragraph
-with the script/module name, followed by a dash `-' and a very short
-description of what the thing is good for.
-
-=back
-
-=head2 Hyperlinks
-
-There are some warnings wrt. malformed hyperlinks.
-
-=over 4
-
-=item * ignoring leading/trailing whitespace in link
-
-There is whitespace at the beginning or the end of the contents of
-LE<lt>...E<gt>.
-
-=item * (section) in '$page' deprecated
-
-There is a section detected in the page name of LE<lt>...E<gt>, e.g.
-C<LE<gt>passwd(2)E<gt>>. POD hyperlinks may point to POD documents only.
-Please write C<CE<lt>passwd(2)E<gt>> instead. Some formatters are able
-to expand this to appropriate code. For links to (builtin) functions,
-please say C<LE<lt>perlfunc/mkdirE<gt>>, without ().
-
-=item * alternative text/node '%s' contains non-escaped | or /
-
-The characters C<|> and C</> are special in the LE<lt>...E<gt> context.
-Although the hyperlink parser does its best to determine which "/" is
-text and which is a delimiter in case of doubt, one ought to escape
-these literal characters like this:
-
- / E<sol>
- | E<verbar>
-
-=back
-
-=head1 RETURN VALUE
-
-B<podchecker> returns the number of POD syntax errors found or -1 if
-there were no POD commands at all found in the file.
-
-=head1 EXAMPLES
-
-I<[T.B.D.]>
-
-=head1 INTERFACE
-
-While checking, this module collects document properties, e.g. the nodes
-for hyperlinks (C<=headX>, C<=item>) and index entries (C<XE<lt>E<gt>>).
-POD translators can use this feature to syntax-check and get the nodes in
-a first pass before actually starting to convert. This is expensive in terms
-of execution time, but allows for very robust conversions.
-
-=cut
-
-#############################################################################
-
-use strict;
-#use diagnostics;
-use Carp;
-use Exporter;
-use Pod::Parser;
-
-use vars qw(@ISA @EXPORT);
-@ISA = qw(Pod::Parser);
-@EXPORT = qw(&podchecker);
-
-use vars qw(%VALID_COMMANDS %VALID_SEQUENCES);
-
-my %VALID_COMMANDS = (
- 'pod' => 1,
- 'cut' => 1,
- 'head1' => 1,
- 'head2' => 1,
- 'over' => 1,
- 'back' => 1,
- 'item' => 1,
- 'for' => 1,
- 'begin' => 1,
- 'end' => 1,
-);
-
-my %VALID_SEQUENCES = (
- 'I' => 1,
- 'B' => 1,
- 'S' => 1,
- 'C' => 1,
- 'L' => 1,
- 'F' => 1,
- 'X' => 1,
- 'Z' => 1,
- 'E' => 1,
-);
-
-# stolen from HTML::Entities
-my %ENTITIES = (
- # Some normal chars that have special meaning in SGML context
- amp => '&', # ampersand
-'gt' => '>', # greater than
-'lt' => '<', # less than
- quot => '"', # double quote
-
- # PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML
- AElig => 'Æ', # capital AE diphthong (ligature)
- Aacute => 'Á', # capital A, acute accent
- Acirc => 'Â', # capital A, circumflex accent
- Agrave => 'À', # capital A, grave accent
- Aring => 'Å', # capital A, ring
- Atilde => 'Ã', # capital A, tilde
- Auml => 'Ä', # capital A, dieresis or umlaut mark
- Ccedil => 'Ç', # capital C, cedilla
- ETH => 'Ð', # capital Eth, Icelandic
- Eacute => 'É', # capital E, acute accent
- Ecirc => 'Ê', # capital E, circumflex accent
- Egrave => 'È', # capital E, grave accent
- Euml => 'Ë', # capital E, dieresis or umlaut mark
- Iacute => 'Í', # capital I, acute accent
- Icirc => 'Î', # capital I, circumflex accent
- Igrave => 'Ì', # capital I, grave accent
- Iuml => 'Ï', # capital I, dieresis or umlaut mark
- Ntilde => 'Ñ', # capital N, tilde
- Oacute => 'Ó', # capital O, acute accent
- Ocirc => 'Ô', # capital O, circumflex accent
- Ograve => 'Ò', # capital O, grave accent
- Oslash => 'Ø', # capital O, slash
- Otilde => 'Õ', # capital O, tilde
- Ouml => 'Ö', # capital O, dieresis or umlaut mark
- THORN => 'Þ', # capital THORN, Icelandic
- Uacute => 'Ú', # capital U, acute accent
- Ucirc => 'Û', # capital U, circumflex accent
- Ugrave => 'Ù', # capital U, grave accent
- Uuml => 'Ü', # capital U, dieresis or umlaut mark
- Yacute => 'Ý', # capital Y, acute accent
- aacute => 'á', # small a, acute accent
- acirc => 'â', # small a, circumflex accent
- aelig => 'æ', # small ae diphthong (ligature)
- agrave => 'à', # small a, grave accent
- aring => 'å', # small a, ring
- atilde => 'ã', # small a, tilde
- auml => 'ä', # small a, dieresis or umlaut mark
- ccedil => 'ç', # small c, cedilla
- eacute => 'é', # small e, acute accent
- ecirc => 'ê', # small e, circumflex accent
- egrave => 'è', # small e, grave accent
- eth => 'ð', # small eth, Icelandic
- euml => 'ë', # small e, dieresis or umlaut mark
- iacute => 'í', # small i, acute accent
- icirc => 'î', # small i, circumflex accent
- igrave => 'ì', # small i, grave accent
- iuml => 'ï', # small i, dieresis or umlaut mark
- ntilde => 'ñ', # small n, tilde
- oacute => 'ó', # small o, acute accent
- ocirc => 'ô', # small o, circumflex accent
- ograve => 'ò', # small o, grave accent
- oslash => 'ø', # small o, slash
- otilde => 'õ', # small o, tilde
- ouml => 'ö', # small o, dieresis or umlaut mark
- szlig => 'ß', # small sharp s, German (sz ligature)
- thorn => 'þ', # small thorn, Icelandic
- uacute => 'ú', # small u, acute accent
- ucirc => 'û', # small u, circumflex accent
- ugrave => 'ù', # small u, grave accent
- uuml => 'ü', # small u, dieresis or umlaut mark
- yacute => 'ý', # small y, acute accent
- yuml => 'ÿ', # small y, dieresis or umlaut mark
-
- # Some extra Latin 1 chars that are listed in the HTML3.2 draft (21-May-96)
- copy => '©', # copyright sign
- reg => '®', # registered sign
- nbsp => "\240", # non breaking space
-
- # Additional ISO-8859/1 entities listed in rfc1866 (section 14)
- iexcl => '¡',
- cent => '¢',
- pound => '£',
- curren => '¤',
- yen => '¥',
- brvbar => '¦',
- sect => '§',
- uml => '¨',
- ordf => 'ª',
- laquo => '«',
-'not' => '¬', # not is a keyword in perl
- shy => '­',
- macr => '¯',
- deg => '°',
- plusmn => '±',
- sup1 => '¹',
- sup2 => '²',
- sup3 => '³',
- acute => '´',
- micro => 'µ',
- para => '¶',
- middot => '·',
- cedil => '¸',
- ordm => 'º',
- raquo => '»',
- frac14 => '¼',
- frac12 => '½',
- frac34 => '¾',
- iquest => '¿',
-'times' => '×', # times is a keyword in perl
- divide => '÷',
-
-# some POD special entities
- verbar => '|',
- sol => '/'
-);
-
-##---------------------------------------------------------------------------
-
-##---------------------------------
-## Function definitions begin here
-##---------------------------------
-
-sub podchecker( $ ; $ % ) {
- my ($infile, $outfile, %options) = @_;
- local $_;
-
- ## Set defaults
- $infile ||= \*STDIN;
- $outfile ||= \*STDERR;
-
- ## Now create a pod checker
- my $checker = new Pod::Checker(%options);
-
- ## Now check the pod document for errors
- $checker->parse_from_file($infile, $outfile);
-
- ## Return the number of errors found
- return $checker->num_errors();
-}
-
-##---------------------------------------------------------------------------
-
-##-------------------------------
-## Method definitions begin here
-##-------------------------------
-
-##################################
-
-=over 4
-
-=item C<Pod::Checker-E<gt>new( %options )>
-
-Return a reference to a new Pod::Checker object that inherits from
-Pod::Parser and is used for calling the required methods later. The
-following options are recognized:
-
-C<-warnings =E<gt> num>
- Print warnings if C<num> is true. The higher the value of C<num>,
-the more warnings are printed. Currently there are only levels 1 and 2.
-
-C<-quiet =E<gt> num>
- If C<num> is true, do not print any errors/warnings. This is useful
-when Pod::Checker is used to munge POD code into plain text from within
-POD formatters.
-
-=cut
-
-## sub new {
-## my $this = shift;
-## my $class = ref($this) || $this;
-## my %params = @_;
-## my $self = {%params};
-## bless $self, $class;
-## $self->initialize();
-## return $self;
-## }
-
-sub initialize {
- my $self = shift;
- ## Initialize number of errors, and setup an error function to
- ## increment this number and then print to the designated output.
- $self->{_NUM_ERRORS} = 0;
- $self->{-quiet} ||= 0;
- # set the error handling subroutine
- $self->errorsub($self->{-quiet} ? sub { 1; } : 'poderror');
- $self->{_commands} = 0; # total number of POD commands encountered
- $self->{_list_stack} = []; # stack for nested lists
- $self->{_have_begin} = ''; # stores =begin
- $self->{_links} = []; # stack for internal hyperlinks
- $self->{_nodes} = []; # stack for =head/=item nodes
- $self->{_index} = []; # text in X<>
- # print warnings?
- $self->{-warnings} = 1 unless(defined $self->{-warnings});
- $self->{_current_head1} = ''; # the current =head1 block
- $self->parseopts(-process_cut_cmd => 1, -warnings => $self->{-warnings});
-}
-
-##################################
-
-=item C<$checker-E<gt>poderror( @args )>
-
-=item C<$checker-E<gt>poderror( {%opts}, @args )>
-
-Internal method for printing errors and warnings. If no options are
-given, simply prints "@_". The following options are recognized and used
-to form the output:
-
- -msg
-
-A message to print prior to C<@args>.
-
- -line
-
-The line number the error occurred in.
-
- -file
-
-The file (name) the error occurred in.
-
- -severity
-
-The error level, should be 'WARNING' or 'ERROR'.
-
-=cut
-
-# Invoked as $self->poderror( @args ), or $self->poderror( {%opts}, @args )
-sub poderror {
- my $self = shift;
- my %opts = (ref $_[0]) ? %{shift()} : ();
-
- ## Retrieve options
- chomp( my $msg = ($opts{-msg} || "")."@_" );
- my $line = (exists $opts{-line}) ? " at line $opts{-line}" : "";
- my $file = (exists $opts{-file}) ? " in file $opts{-file}" : "";
- unless (exists $opts{-severity}) {
- ## See if can find severity in message prefix
- $opts{-severity} = $1 if ( $msg =~ s/^\**\s*([A-Z]{3,}):\s+// );
- }
- my $severity = (exists $opts{-severity}) ? "*** $opts{-severity}: " : "";
-
- ## Increment error count and print message "
- ++($self->{_NUM_ERRORS})
- if(!%opts || ($opts{-severity} && $opts{-severity} eq 'ERROR'));
- my $out_fh = $self->output_handle() || \*STDERR;
- print $out_fh ($severity, $msg, $line, $file, "\n")
- if($self->{-warnings} || !%opts || $opts{-severity} ne 'WARNING');
-}
-
-##################################
-
-=item C<$checker-E<gt>num_errors()>
-
-Set (if argument specified) and retrieve the number of errors found.
-
-=cut
-
-sub num_errors {
- return (@_ > 1) ? ($_[0]->{_NUM_ERRORS} = $_[1]) : $_[0]->{_NUM_ERRORS};
-}
-
-##################################
-
-=item C<$checker-E<gt>name()>
-
-Set (if argument specified) and retrieve the canonical name of POD as
-found in the C<=head1 NAME> section.
-
-=cut
-
-sub name {
- return (@_ > 1 && $_[1]) ?
- ($_[0]->{-name} = $_[1]) : $_[0]->{-name};
-}
-
-##################################
-
-=item C<$checker-E<gt>node()>
-
-Add (if argument specified) and retrieve the nodes (as defined by C<=headX>
-and C<=item>) of the current POD. The nodes are returned in the order of
-their occurence. They consist of plain text, each piece of whitespace is
-collapsed to a single blank.
-
-=cut
-
-sub node {
- my ($self,$text) = @_;
- if(defined $text) {
- $text =~ s/\s+$//s; # strip trailing whitespace
- $text =~ s/\s+/ /gs; # collapse whitespace
- # add node, order important!
- push(@{$self->{_nodes}}, $text);
- # keep also a uniqueness counter
- $self->{_unique_nodes}->{$text}++ if($text !~ /^\s*$/s);
- return $text;
- }
- @{$self->{_nodes}};
-}
-
-##################################
-
-=item C<$checker-E<gt>idx()>
-
-Add (if argument specified) and retrieve the index entries (as defined by
-C<XE<lt>E<gt>>) of the current POD. They consist of plain text, each piece
-of whitespace is collapsed to a single blank.
-
-=cut
-
-# set/return index entries of current POD
-sub idx {
- my ($self,$text) = @_;
- if(defined $text) {
- $text =~ s/\s+$//s; # strip trailing whitespace
- $text =~ s/\s+/ /gs; # collapse whitespace
- # add node, order important!
- push(@{$self->{_index}}, $text);
- # keep also a uniqueness counter
- $self->{_unique_nodes}->{$text}++ if($text !~ /^\s*$/s);
- return $text;
- }
- @{$self->{_index}};
-}
-
-##################################
-
-=item C<$checker-E<gt>hyperlink()>
-
-Add (if argument specified) and retrieve the hyperlinks (as defined by
-C<LE<lt>E<gt>>) of the current POD. They consist of an 2-item array: line
-number and C<Pod::Hyperlink> object.
-
-=back
-
-=cut
-
-# set/return hyperlinks of the current POD
-sub hyperlink {
- my $self = shift;
- if($_[0]) {
- push(@{$self->{_links}}, $_[0]);
- return $_[0];
- }
- @{$self->{_links}};
-}
-
-## overrides for Pod::Parser
-
-sub end_pod {
- ## Do some final checks and
- ## print the number of errors found
- my $self = shift;
- my $infile = $self->input_file();
- my $out_fh = $self->output_handle();
-
- if(@{$self->{_list_stack}}) {
- # _TODO_ display, but don't count them for now
- my $list;
- while(($list = $self->_close_list('EOF',$infile)) &&
- $list->indent() ne 'auto') {
- $self->poderror({ -line => 'EOF', -file => $infile,
- -severity => 'ERROR', -msg => "=over on line " .
- $list->start() . " without closing =back" }); #"
- }
- }
-
- # check validity of document internal hyperlinks
- # first build the node names from the paragraph text
- my %nodes;
- foreach($self->node()) {
- $nodes{$_} = 1;
- if(/^(\S+)\s+\S/) {
- # we have more than one word. Use the first as a node, too.
- # This is used heavily in perlfunc.pod
- $nodes{$1} ||= 2; # derived node
- }
- }
- foreach($self->idx()) {
- $nodes{$_} = 3; # index node
- }
- foreach($self->hyperlink()) {
- my ($line,$link) = @$_;
- # _TODO_ what if there is a link to the page itself by the name,
- # e.g. in Tk::Pod : L<Tk::Pod/"DESCRIPTION">
- if($link->node() && !$link->page() && $link->type() ne 'hyperlink') {
- my $node = $self->_check_ptree($self->parse_text($link->node(),
- $line), $line, $infile, 'L');
- if($node && !$nodes{$node}) {
- $self->poderror({ -line => $line || '', -file => $infile,
- -severity => 'ERROR',
- -msg => "unresolved internal link '$node'"});
- }
- }
- }
-
- # check the internal nodes for uniqueness. This pertains to
- # =headX, =item and X<...>
- foreach(grep($self->{_unique_nodes}->{$_} > 1,
- keys %{$self->{_unique_nodes}})) {
- $self->poderror({ -line => '-', -file => $infile,
- -severity => 'WARNING',
- -msg => "multiple occurence of link target '$_'"});
- }
-
- ## Print the number of errors found
- my $num_errors = $self->num_errors();
- if ($num_errors > 0) {
- printf $out_fh ("$infile has $num_errors pod syntax %s.\n",
- ($num_errors == 1) ? "error" : "errors");
- }
- elsif($self->{_commands} == 0) {
- print $out_fh "$infile does not contain any pod commands.\n";
- $self->num_errors(-1);
- }
- else {
- print $out_fh "$infile pod syntax OK.\n";
- }
-}
-
-# check a POD command directive
-sub command {
- my ($self, $cmd, $paragraph, $line_num, $pod_para) = @_;
- my ($file, $line) = $pod_para->file_line;
- ## Check the command syntax
- my $arg; # this will hold the command argument
- if (! $VALID_COMMANDS{$cmd}) {
- $self->poderror({ -line => $line, -file => $file, -severity => 'ERROR',
- -msg => "Unknown command '$cmd'" });
- }
- else { # found a valid command
- $self->{_commands}++; # delete this line if below is enabled again
-
- ##### following check disabled due to strong request
- #if(!$self->{_commands}++ && $cmd !~ /^head/) {
- # $self->poderror({ -line => $line, -file => $file,
- # -severity => 'WARNING',
- # -msg => "file does not start with =head" });
- #}
-
- # check syntax of particular command
- if($cmd eq 'over') {
- # check for argument
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- my $indent = 4; # default
- if($arg && $arg =~ /^\s*(\d+)\s*$/) {
- $indent = $1;
- }
- # start a new list
- $self->_open_list($indent,$line,$file);
- }
- elsif($cmd eq 'item') {
- # are we in a list?
- unless(@{$self->{_list_stack}}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "=item without previous =over" });
- # auto-open in case we encounter many more
- $self->_open_list('auto',$line,$file);
- }
- my $list = $self->{_list_stack}->[0];
- # check whether the previous item had some contents
- if(defined $self->{_list_item_contents} &&
- $self->{_list_item_contents} == 0) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "previous =item has no contents" });
- }
- if($list->{_has_par}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "preceding non-item paragraph(s)" });
- delete $list->{_has_par};
- }
- # check for argument
- $arg = $self->interpolate_and_check($paragraph, $line, $file);
- if($arg && $arg =~ /(\S+)/) {
- $arg =~ s/[\s\n]+$//;
- my $type;
- if($arg =~ /^[*]\s*(\S*.*)/) {
- $type = 'bullet';
- $self->{_list_item_contents} = $1 ? 1 : 0;
- $arg = $1;
- }
- elsif($arg =~ /^\d+\.?\s*(\S*)/) {
- $type = 'number';
- $self->{_list_item_contents} = $1 ? 1 : 0;
- $arg = $1;
- }
- else {
- $type = 'definition';
- $self->{_list_item_contents} = 1;
- }
- my $first = $list->type();
- if($first && $first ne $type) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "=item type mismatch ('$first' vs. '$type')"});
- }
- else { # first item
- $list->type($type);
- }
- }
- else {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "No argument for =item" });
- $arg = ' '; # empty
- $self->{_list_item_contents} = 0;
- }
- # add this item
- $list->item($arg);
- # remember this node
- $self->node($arg);
- }
- elsif($cmd eq 'back') {
- # check if we have an open list
- unless(@{$self->{_list_stack}}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "=back without previous =over" });
- }
- else {
- # check for spurious characters
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- if($arg && $arg =~ /\S/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "Spurious character(s) after =back" });
- }
- # close list
- my $list = $self->_close_list($line,$file);
- # check for empty lists
- if(!$list->item() && $self->{-warnings}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "No items in =over (at line " .
- $list->start() . ") / =back list"}); #"
- }
- }
- }
- elsif($cmd =~ /^head(\d+)/) {
- # check whether the previous =head section had some contents
- if(defined $self->{_commands_in_head} &&
- $self->{_commands_in_head} == 0 &&
- defined $self->{_last_head} &&
- $self->{_last_head} >= $1) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "empty section in previous paragraph"});
- }
- $self->{_commands_in_head} = -1;
- $self->{_last_head} = $1;
- # check if there is an open list
- if(@{$self->{_list_stack}}) {
- my $list;
- while(($list = $self->_close_list($line,$file)) &&
- $list->indent() ne 'auto') {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "=over on line ". $list->start() .
- " without closing =back (at $cmd)" });
- }
- }
- # remember this node
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- $arg =~ s/[\s\n]+$//s;
- $self->node($arg);
- unless(length($arg)) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "empty =$cmd"});
- }
- if($cmd eq 'head1') {
- $self->{_current_head1} = $arg;
- } else {
- $self->{_current_head1} = '';
- }
- }
- elsif($cmd eq 'begin') {
- if($self->{_have_begin}) {
- # already have a begin
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "Nested =begin's (first at line " .
- $self->{_have_begin} . ")"});
- }
- else {
- # check for argument
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- unless($arg && $arg =~ /(\S+)/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "No argument for =begin"});
- }
- # remember the =begin
- $self->{_have_begin} = "$line:$1";
- }
- }
- elsif($cmd eq 'end') {
- if($self->{_have_begin}) {
- # close the existing =begin
- $self->{_have_begin} = '';
- # check for spurious characters
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- # the closing argument is optional
- #if($arg && $arg =~ /\S/) {
- # $self->poderror({ -line => $line, -file => $file,
- # -severity => 'WARNING',
- # -msg => "Spurious character(s) after =end" });
- #}
- }
- else {
- # don't have a matching =begin
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "=end without =begin" });
- }
- }
- elsif($cmd eq 'for') {
- unless($paragraph =~ /\s*(\S+)\s*/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "=for without formatter specification" });
- }
- $arg = ''; # do not expand paragraph below
- }
- elsif($cmd =~ /^(pod|cut)$/) {
- # check for argument
- $arg = $self->interpolate_and_check($paragraph, $line,$file);
- if($arg && $arg =~ /(\S+)/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "Spurious text after =$cmd"});
- }
- }
- $self->{_commands_in_head}++;
- ## Check the interior sequences in the command-text
- $self->interpolate_and_check($paragraph, $line,$file)
- unless(defined $arg);
- }
-}
-
-sub _open_list
-{
- my ($self,$indent,$line,$file) = @_;
- my $list = Pod::List->new(
- -indent => $indent,
- -start => $line,
- -file => $file);
- unshift(@{$self->{_list_stack}}, $list);
- undef $self->{_list_item_contents};
- $list;
-}
-
-sub _close_list
-{
- my ($self,$line,$file) = @_;
- my $list = shift(@{$self->{_list_stack}});
- if(defined $self->{_list_item_contents} &&
- $self->{_list_item_contents} == 0) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "previous =item has no contents" });
- }
- undef $self->{_list_item_contents};
- $list;
-}
-
-# process a block of some text
-sub interpolate_and_check {
- my ($self, $paragraph, $line, $file) = @_;
- ## Check the interior sequences in the command-text
- # and return the text
- $self->_check_ptree(
- $self->parse_text($paragraph,$line), $line, $file, '');
-}
-
-sub _check_ptree {
- my ($self,$ptree,$line,$file,$nestlist) = @_;
- local($_);
- my $text = '';
- # process each node in the parse tree
- foreach(@$ptree) {
- # regular text chunk
- unless(ref) {
- my $count;
- # count the unescaped angle brackets
- # complain only when warning level is greater than 1
- my $i = $_;
- if($count = $i =~ tr/<>/<>/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "$count unescaped <> in paragraph" })
- if($self->{-warnings} && $self->{-warnings}>1);
- }
- $text .= $i;
- next;
- }
- # have an interior sequence
- my $cmd = $_->cmd_name();
- my $contents = $_->parse_tree();
- ($file,$line) = $_->file_line();
- # check for valid tag
- if (! $VALID_SEQUENCES{$cmd}) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => qq(Unknown interior-sequence '$cmd')});
- # expand it anyway
- $text .= $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
- next;
- }
- if($nestlist =~ /$cmd/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "nested commands $cmd<...$cmd<...>...>"});
- # _TODO_ should we add the contents anyway?
- # expand it anyway, see below
- }
- if($cmd eq 'E') {
- # preserve entities
- if(@$contents > 1 || ref $$contents[0] || $$contents[0] !~ /^\w+$/) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "garbled entity " . $_->raw_text()});
- next;
- }
- my $ent = $$contents[0];
- my $val;
- if($ent =~ /^0x[0-9a-f]+$/i) {
- # hexadec entity
- $val = hex($ent);
- }
- elsif($ent =~ /^0\d+$/) {
- # octal
- $val = oct($ent);
- }
- elsif($ent =~ /^\d+$/) {
- # numeric entity
- $val = $ent;
- }
- if(defined $val) {
- if($val>0 && $val<256) {
- $text .= chr($val);
- }
- else {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "Entity number out of range " . $_->raw_text()});
- }
- }
- elsif($ENTITIES{$ent}) {
- # known ISO entity
- $text .= $ENTITIES{$ent};
- }
- else {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => "Unknown entity " . $_->raw_text()});
- $text .= "E<$ent>";
- }
- }
- elsif($cmd eq 'L') {
- # try to parse the hyperlink
- my $link = Pod::Hyperlink->new($contents->raw_text());
- unless(defined $link) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "malformed link " . $_->raw_text() ." : $@"});
- next;
- }
- $link->line($line); # remember line
- if($self->{-warnings}) {
- foreach my $w ($link->warning()) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => $w });
- }
- }
- # check the link text
- $text .= $self->_check_ptree($self->parse_text($link->text(),
- $line), $line, $file, "$nestlist$cmd");
- # remember link
- $self->hyperlink([$line,$link]);
- }
- elsif($cmd =~ /[BCFIS]/) {
- # add the guts
- $text .= $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
- }
- elsif($cmd eq 'Z') {
- if(length($contents->raw_text())) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "Nonempty Z<>"});
- }
- }
- elsif($cmd eq 'X') {
- my $idx = $self->_check_ptree($contents, $line, $file, "$nestlist$cmd");
- if($idx =~ /^\s*$/s) {
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'ERROR',
- -msg => "Empty X<>"});
- }
- else {
- # remember this node
- $self->idx($idx);
- }
- }
- else {
- # not reached
- die "internal error";
- }
- }
- $text;
-}
-
-# process a block of verbatim text
-sub verbatim {
- ## Nothing particular to check
- my ($self, $paragraph, $line_num, $pod_para) = @_;
-
- $self->_preproc_par($paragraph);
-
- if($self->{_current_head1} eq 'NAME') {
- my ($file, $line) = $pod_para->file_line;
- $self->poderror({ -line => $line, -file => $file,
- -severity => 'WARNING',
- -msg => 'Verbatim paragraph in NAME section' });
- }
-}
-
-# process a block of regular text
-sub textblock {
- my ($self, $paragraph, $line_num, $pod_para) = @_;
- my ($file, $line) = $pod_para->file_line;
-
- $self->_preproc_par($paragraph);
-
- # skip this paragraph if in a =begin block
- unless($self->{_have_begin}) {
- my $block = $self->interpolate_and_check($paragraph, $line,$file);
- if($self->{_current_head1} eq 'NAME') {
- if($block =~ /^\s*(\S+?)\s*[,-]/) {
- # this is the canonical name
- $self->{-name} = $1 unless(defined $self->{-name});
- }
- }
- }
-}
-
-sub _preproc_par
-{
- my $self = shift;
- $_[0] =~ s/[\s\n]+$//;
- if($_[0]) {
- $self->{_commands_in_head}++;
- $self->{_list_item_contents}++ if(defined $self->{_list_item_contents});
- if(@{$self->{_list_stack}} && !$self->{_list_stack}->[0]->item()) {
- $self->{_list_stack}->[0]->{_has_par} = 1;
- }
- }
-}
-
-1;
-
-__END__
-
-=head1 AUTHOR
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt> (initial version),
-Marek Rouchal E<lt>marek@saftsack.fs.uni-bayreuth.deE<gt>
-
-Based on code for B<Pod::Text::pod2text()> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=cut
-
diff --git a/contrib/perl5/lib/Pod/Find.pm b/contrib/perl5/lib/Pod/Find.pm
deleted file mode 100644
index 4a0ecb9..0000000
--- a/contrib/perl5/lib/Pod/Find.pm
+++ /dev/null
@@ -1,445 +0,0 @@
-#############################################################################
-# Pod/Find.pm -- finds files containing POD documentation
-#
-# Author: Marek Rouchal <marek@saftsack.fs.uni-bayreuth.de>
-#
-# Copyright (C) 1999-2000 by Marek Rouchal (and borrowing code
-# from Nick Ing-Simmon's PodToHtml). All rights reserved.
-# This file is part of "PodParser". Pod::Find is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Find;
-
-use vars qw($VERSION);
-$VERSION = 0.21; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-use Carp;
-
-#############################################################################
-
-=head1 NAME
-
-Pod::Find - find POD documents in directory trees
-
-=head1 SYNOPSIS
-
- use Pod::Find qw(pod_find simplify_name);
- my %pods = pod_find({ -verbose => 1, -inc => 1 });
- foreach(keys %pods) {
- print "found library POD `$pods{$_}' in $_\n";
- }
-
- print "podname=",simplify_name('a/b/c/mymodule.pod'),"\n";
-
- $location = pod_where( { -inc => 1 }, "Pod::Find" );
-
-=head1 DESCRIPTION
-
-B<Pod::Find> provides a set of functions to locate POD files. Note that
-no function is exported by default to avoid pollution of your namespace,
-so be sure to specify them in the B<use> statement if you need them:
-
- use Pod::Find qw(pod_find);
-
-=cut
-
-use strict;
-#use diagnostics;
-use Exporter;
-use File::Spec;
-use File::Find;
-use Cwd;
-
-use vars qw(@ISA @EXPORT_OK $VERSION);
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(&pod_find &simplify_name &pod_where &contains_pod);
-
-# package global variables
-my $SIMPLIFY_RX;
-
-=head2 C<pod_find( { %opts } , @directories )>
-
-The function B<pod_find> searches for POD documents in a given set of
-files and/or directories. It returns a hash with the file names as keys
-and the POD name as value. The POD name is derived from the file name
-and its position in the directory tree.
-
-E.g. when searching in F<$HOME/perl5lib>, the file
-F<$HOME/perl5lib/MyModule.pm> would get the POD name I<MyModule>,
-whereas F<$HOME/perl5lib/Myclass/Subclass.pm> would be
-I<Myclass::Subclass>. The name information can be used for POD
-translators.
-
-Only text files containing at least one valid POD command are found.
-
-A warning is printed if more than one POD file with the same POD name
-is found, e.g. F<CPAN.pm> in different directories. This usually
-indicates duplicate occurrences of modules in the I<@INC> search path.
-
-B<OPTIONS> The first argument for B<pod_find> may be a hash reference
-with options. The rest are either directories that are searched
-recursively or files. The POD names of files are the plain basenames
-with any Perl-like extension (.pm, .pl, .pod) stripped.
-
-=over 4
-
-=item C<-verbose =E<gt> 1>
-
-Print progress information while scanning.
-
-=item C<-perl =E<gt> 1>
-
-Apply Perl-specific heuristics to find the correct PODs. This includes
-stripping Perl-like extensions, omitting subdirectories that are numeric
-but do I<not> match the current Perl interpreter's version id, suppressing
-F<site_perl> as a module hierarchy name etc.
-
-=item C<-script =E<gt> 1>
-
-Search for PODs in the current Perl interpreter's installation
-B<scriptdir>. This is taken from the local L<Config|Config> module.
-
-=item C<-inc =E<gt> 1>
-
-Search for PODs in the current Perl interpreter's I<@INC> paths. This
-automatically considers paths specified in the C<PERL5LIB> environment
-as this is prepended to I<@INC> by the Perl interpreter itself.
-
-=back
-
-=cut
-
-# return a hash of the POD files found
-# first argument may be a hashref (options),
-# rest is a list of directories to search recursively
-sub pod_find
-{
- my %opts;
- if(ref $_[0]) {
- %opts = %{shift()};
- }
-
- $opts{-verbose} ||= 0;
- $opts{-perl} ||= 0;
-
- my (@search) = @_;
-
- if($opts{-script}) {
- require Config;
- push(@search, $Config::Config{scriptdir});
- $opts{-perl} = 1;
- }
-
- if($opts{-inc}) {
- push(@search, grep($_ ne '.',@INC));
- $opts{-perl} = 1;
- }
-
- if($opts{-perl}) {
- require Config;
- # this code simplifies the POD name for Perl modules:
- # * remove "site_perl"
- # * remove e.g. "i586-linux" (from 'archname')
- # * remove e.g. 5.00503
- # * remove pod/ if followed by *.pod (e.g. in pod/perlfunc.pod)
- $SIMPLIFY_RX =
- qq!^(?i:site(_perl)?/|\Q$Config::Config{archname}\E/|\\d+\\.\\d+([_.]?\\d+)?/|pod/(?=.*?\\.pod\\z))*!;
-
- }
-
- my %dirs_visited;
- my %pods;
- my %names;
- my $pwd = cwd();
-
- foreach my $try (@search) {
- unless(File::Spec->file_name_is_absolute($try)) {
- # make path absolute
- $try = File::Spec->catfile($pwd,$try);
- }
- # simplify path
- # on VMS canonpath will vmsify:[the.path], but File::Find::find
- # wants /unixy/paths
- $try = File::Spec->canonpath($try) if ($^O ne 'VMS');
- my $name;
- if(-f $try) {
- if($name = _check_and_extract_name($try, $opts{-verbose})) {
- _check_for_duplicates($try, $name, \%names, \%pods);
- }
- next;
- }
- my $root_rx = qq!^\Q$try\E/!;
- File::Find::find( sub {
- my $item = $File::Find::name;
- if(-d) {
- if($dirs_visited{$item}) {
- warn "Directory '$item' already seen, skipping.\n"
- if($opts{-verbose});
- $File::Find::prune = 1;
- return;
- }
- else {
- $dirs_visited{$item} = 1;
- }
- if($opts{-perl} && /^(\d+\.[\d_]+)\z/s && eval "$1" != $]) {
- $File::Find::prune = 1;
- warn "Perl $] version mismatch on $_, skipping.\n"
- if($opts{-verbose});
- }
- return;
- }
- if($name = _check_and_extract_name($item, $opts{-verbose}, $root_rx)) {
- _check_for_duplicates($item, $name, \%names, \%pods);
- }
- }, $try); # end of File::Find::find
- }
- chdir $pwd;
- %pods;
-}
-
-sub _check_for_duplicates {
- my ($file, $name, $names_ref, $pods_ref) = @_;
- if($$names_ref{$name}) {
- warn "Duplicate POD found (shadowing?): $name ($file)\n";
- warn " Already seen in ",
- join(' ', grep($$pods_ref{$_} eq $name, keys %$pods_ref)),"\n";
- }
- else {
- $$names_ref{$name} = 1;
- }
- $$pods_ref{$file} = $name;
-}
-
-sub _check_and_extract_name {
- my ($file, $verbose, $root_rx) = @_;
-
- # check extension or executable flag
- # this involves testing the .bat extension on Win32!
- unless(-f $file && -T _ && ($file =~ /\.(pod|pm|plx?)\z/i || -x _ )) {
- return undef;
- }
-
- return undef unless contains_pod($file,$verbose);
-
- # strip non-significant path components
- # TODO what happens on e.g. Win32?
- my $name = $file;
- if(defined $root_rx) {
- $name =~ s!$root_rx!!s;
- $name =~ s!$SIMPLIFY_RX!!os if(defined $SIMPLIFY_RX);
- }
- else {
- $name =~ s:^.*/::s;
- }
- _simplify($name);
- $name =~ s!/+!::!g; #/
- $name;
-}
-
-=head2 C<simplify_name( $str )>
-
-The function B<simplify_name> is equivalent to B<basename>, but also
-strips Perl-like extensions (.pm, .pl, .pod) and extensions like
-F<.bat>, F<.cmd> on Win32 and OS/2, or F<.com> on VMS, respectively.
-
-=cut
-
-# basic simplification of the POD name:
-# basename & strip extension
-sub simplify_name {
- my ($str) = @_;
- # remove all path components
- $str =~ s:^.*/::s;
- _simplify($str);
- $str;
-}
-
-# internal sub only
-sub _simplify {
- # strip Perl's own extensions
- $_[0] =~ s/\.(pod|pm|plx?)\z//i;
- # strip meaningless extensions on Win32 and OS/2
- $_[0] =~ s/\.(bat|exe|cmd)\z//i if($^O =~ /mswin|os2/i);
- # strip meaningless extensions on VMS
- $_[0] =~ s/\.(com)\z//i if($^O eq 'VMS');
-}
-
-# contribution from Tim Jenness <t.jenness@jach.hawaii.edu>
-
-=head2 C<pod_where( { %opts }, $pod )>
-
-Returns the location of a pod document given a search directory
-and a module (e.g. C<File::Find>) or script (e.g. C<perldoc>) name.
-
-Options:
-
-=over 4
-
-=item C<-inc =E<gt> 1>
-
-Search @INC for the pod and also the C<scriptdir> defined in the
-L<Config|Config> module.
-
-=item C<-dirs =E<gt> [ $dir1, $dir2, ... ]>
-
-Reference to an array of search directories. These are searched in order
-before looking in C<@INC> (if B<-inc>). Current directory is used if
-none are specified.
-
-=item C<-verbose =E<gt> 1>
-
-List directories as they are searched
-
-=back
-
-Returns the full path of the first occurence to the file.
-Package names (eg 'A::B') are automatically converted to directory
-names in the selected directory. (eg on unix 'A::B' is converted to
-'A/B'). Additionally, '.pm', '.pl' and '.pod' are appended to the
-search automatically if required.
-
-A subdirectory F<pod/> is also checked if it exists in any of the given
-search directories. This ensures that e.g. L<perlfunc|perlfunc> is
-found.
-
-It is assumed that if a module name is supplied, that that name
-matches the file name. Pods are not opened to check for the 'NAME'
-entry.
-
-A check is made to make sure that the file that is found does
-contain some pod documentation.
-
-=cut
-
-sub pod_where {
-
- # default options
- my %options = (
- '-inc' => 0,
- '-verbose' => 0,
- '-dirs' => [ '.' ],
- );
-
- # Check for an options hash as first argument
- if (defined $_[0] && ref($_[0]) eq 'HASH') {
- my $opt = shift;
-
- # Merge default options with supplied options
- %options = (%options, %$opt);
- }
-
- # Check usage
- carp 'Usage: pod_where({options}, $pod)' unless (scalar(@_));
-
- # Read argument
- my $pod = shift;
-
- # Split on :: and then join the name together using File::Spec
- my @parts = split (/::/, $pod);
-
- # Get full directory list
- my @search_dirs = @{ $options{'-dirs'} };
-
- if ($options{'-inc'}) {
-
- require Config;
-
- # Add @INC
- push (@search_dirs, @INC) if $options{'-inc'};
-
- # Add location of pod documentation for perl man pages (eg perlfunc)
- # This is a pod directory in the private install tree
- #my $perlpoddir = File::Spec->catdir($Config::Config{'installprivlib'},
- # 'pod');
- #push (@search_dirs, $perlpoddir)
- # if -d $perlpoddir;
-
- # Add location of binaries such as pod2text
- push (@search_dirs, $Config::Config{'scriptdir'})
- if -d $Config::Config{'scriptdir'};
- }
-
- # Loop over directories
- Dir: foreach my $dir ( @search_dirs ) {
-
- # Don't bother if cant find the directory
- if (-d $dir) {
- warn "Looking in directory $dir\n"
- if $options{'-verbose'};
-
- # Now concatenate this directory with the pod we are searching for
- my $fullname = File::Spec->catfile($dir, @parts);
- warn "Filename is now $fullname\n"
- if $options{'-verbose'};
-
- # Loop over possible extensions
- foreach my $ext ('', '.pod', '.pm', '.pl') {
- my $fullext = $fullname . $ext;
- if (-f $fullext &&
- contains_pod($fullext, $options{'-verbose'}) ) {
- warn "FOUND: $fullext\n" if $options{'-verbose'};
- return $fullext;
- }
- }
- } else {
- warn "Directory $dir does not exist\n"
- if $options{'-verbose'};
- next Dir;
- }
- if(-d File::Spec->catdir($dir,'pod')) {
- $dir = File::Spec->catdir($dir,'pod');
- redo Dir;
- }
- }
- # No match;
- return undef;
-}
-
-=head2 C<contains_pod( $file , $verbose )>
-
-Returns true if the supplied filename (not POD module) contains some pod
-information.
-
-=cut
-
-sub contains_pod {
- my $file = shift;
- my $verbose = 0;
- $verbose = shift if @_;
-
- # check for one line of POD
- unless(open(POD,"<$file")) {
- warn "Error: $file is unreadable: $!\n";
- return undef;
- }
-
- local $/ = undef;
- my $pod = <POD>;
- close(POD) || die "Error closing $file: $!\n";
- unless($pod =~ /\n=(head\d|pod|over|item)\b/s) {
- warn "No POD in $file, skipping.\n"
- if($verbose);
- return 0;
- }
-
- return 1;
-}
-
-=head1 AUTHOR
-
-Marek Rouchal E<lt>marek@saftsack.fs.uni-bayreuth.deE<gt>,
-heavily borrowing code from Nick Ing-Simmons' PodToHtml.
-
-Tim Jenness E<lt>t.jenness@jach.hawaii.eduE<gt> provided
-C<pod_where> and C<contains_pod>.
-
-=head1 SEE ALSO
-
-L<Pod::Parser>, L<Pod::Checker>, L<perldoc>
-
-=cut
-
-1;
-
diff --git a/contrib/perl5/lib/Pod/Functions.pm b/contrib/perl5/lib/Pod/Functions.pm
deleted file mode 100644
index 44619d5..0000000
--- a/contrib/perl5/lib/Pod/Functions.pm
+++ /dev/null
@@ -1,302 +0,0 @@
-package Pod::Functions;
-
-#:vi:set ts=20
-
-require Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(%Kinds %Type %Flavor %Type_Description @Type_Order);
-
-%Type_Description = (
- 'ARRAY' => 'Functions for real @ARRAYs',
- 'Binary' => 'Functions for fixed length data or records',
- 'File' => 'Functions for filehandles, files, or directories',
- 'Flow' => 'Keywords related to control flow of your perl program',
- 'HASH' => 'Functions for real %HASHes',
- 'I/O' => 'Input and output functions',
- 'LIST' => 'Functions for list data',
- 'Math' => 'Numeric functions',
- 'Misc' => 'Miscellaneous functions',
- 'Modules' => 'Keywords related to perl modules',
- 'Network' => 'Fetching network info',
- 'Objects' => 'Keywords related to classes and object-orientedness',
- 'Process' => 'Functions for processes and process groups',
- 'Regexp' => 'Regular expressions and pattern matching',
- 'Socket' => 'Low-level socket functions',
- 'String' => 'Functions for SCALARs or strings',
- 'SysV' => 'System V interprocess communication functions',
- 'Time' => 'Time-related functions',
- 'User' => 'Fetching user and group info',
- 'Namespace' => 'Keywords altering or affecting scoping of identifiers',
-);
-
-@Type_Order = qw{
- String
- Regexp
- Math
- ARRAY
- LIST
- HASH
- I/O
- Binary
- File
- Flow
- Namespace
- Misc
- Process
- Modules
- Objects
- Socket
- SysV
- User
- Network
- Time
-};
-
-while (<DATA>) {
- chomp;
- s/#.*//;
- next unless $_;
- ($name, $type, $text) = split " ", $_, 3;
- $Type{$name} = $type;
- $Flavor{$name} = $text;
- for $type ( split /[,\s]+/, $type ) {
- push @{$Kinds{$type}}, $name;
- }
-}
-
-close DATA;
-
-unless (caller) {
- foreach $type ( @Type_Order ) {
- $list = join(", ", sort @{$Kinds{$type}});
- $typedesc = $Type_Description{$type} . ":";
- write;
- }
-}
-
-format =
-
-^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $typedesc
-~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $typedesc
- ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $list
-.
-
-1
-
-__DATA__
--X File a file test (-r, -x, etc)
-abs Math absolute value function
-accept Socket accept an incoming socket connect
-alarm Process schedule a SIGALRM
-atan2 Math arctangent of Y/X in the range -PI to PI
-bind Socket binds an address to a socket
-binmode I/O prepare binary files for I/O
-bless Objects create an object
-caller Flow,Namespace get context of the current subroutine call
-chdir File change your current working directory
-chmod File changes the permissions on a list of files
-chomp String remove a trailing record separator from a string
-chop String remove the last character from a string
-chown File change the owership on a list of files
-chr String get character this number represents
-chroot File make directory new root for path lookups
-close I/O close file (or pipe or socket) handle
-closedir I/O close directory handle
-connect Socket connect to a remote socket
-continue Flow optional trailing block in a while or foreach
-cos Math cosine function
-crypt String one-way passwd-style encryption
-dbmclose Objects,I/O breaks binding on a tied dbm file
-dbmopen Objects,I/O create binding on a tied dbm file
-defined Misc test whether a value, variable, or function is defined
-delete HASH deletes a value from a hash
-die I/O,Flow raise an exception or bail out
-do Flow,Modules turn a BLOCK into a TERM
-dump Misc,Flow create an immediate core dump
-each HASH retrieve the next key/value pair from a hash
-endgrent User be done using group file
-endhostent User be done using hosts file
-endnetent User be done using networks file
-endprotoent Network be done using protocols file
-endpwent User be done using passwd file
-endservent Network be done using services file
-eof I/O test a filehandle for its end
-eval Flow,Misc catch exceptions or compile and run code
-exec Process abandon this program to run another
-exists HASH test whether a hash key is present
-exit Flow terminate this program
-exp Math raise I<e> to a power
-fcntl File file control system call
-fileno I/O return file descriptor from filehandle
-flock I/O lock an entire file with an advisory lock
-fork Process create a new process just like this one
-format I/O declare a picture format with use by the write() function
-formline Misc internal function used for formats
-getc I/O get the next character from the filehandle
-getgrent User get next group record
-getgrgid User get group record given group user ID
-getgrnam User get group record given group name
-gethostbyaddr Network get host record given its address
-gethostbyname Network get host record given name
-gethostent Network get next hosts record
-getlogin User return who logged in at this tty
-getnetbyaddr Network get network record given its address
-getnetbyname Network get networks record given name
-getnetent Network get next networks record
-getpeername Socket find the other end of a socket connection
-getpgrp Process get process group
-getppid Process get parent process ID
-getpriority Process get current nice value
-getprotobyname Network get protocol record given name
-getprotobynumber Network get protocol record numeric protocol
-getprotoent Network get next protocols record
-getpwent User get next passwd record
-getpwnam User get passwd record given user login name
-getpwuid User get passwd record given user ID
-getservbyname Network get services record given its name
-getservbyport Network get services record given numeric port
-getservent Network get next services record
-getsockname Socket retrieve the sockaddr for a given socket
-getsockopt Socket get socket options on a given socket
-glob File expand filenames using wildcards
-gmtime Time convert UNIX time into record or string using Greenwich time
-goto Flow create spaghetti code
-grep LIST locate elements in a list test true against a given criterion
-hex Math,String convert a string to a hexadecimal number
-import Modules,Namespace patch a module's namespace into your own
-index String find a substring within a string
-int Math get the integer portion of a number
-ioctl File system-dependent device control system call
-join LIST join a list into a string using a separator
-keys HASH retrieve list of indices from a hash
-kill Process send a signal to a process or process group
-last Flow exit a block prematurely
-lc String return lower-case version of a string
-lcfirst String return a string with just the next letter in lower case
-length String return the number of bytes in a string
-link File create a hard link in the filesytem
-listen Socket register your socket as a server
-local Misc,Namespace create a temporary value for a global variable (dynamic scoping)
-localtime Time convert UNIX time into record or string using local time
-lock Threads get a thread lock on a variable, subroutine, or method
-log Math retrieve the natural logarithm for a number
-lstat File stat a symbolic link
-m// Regexp match a string with a regular expression pattern
-map LIST apply a change to a list to get back a new list with the changes
-mkdir File create a directory
-msgctl SysV SysV IPC message control operations
-msgget SysV get SysV IPC message queue
-msgrcv SysV receive a SysV IPC message from a message queue
-msgsnd SysV send a SysV IPC message to a message queue
-my Misc,Namespace declare and assign a local variable (lexical scoping)
-next Flow iterate a block prematurely
-no Modules unimport some module symbols or semantics at compile time
-package Modules,Objects,Namespace declare a separate global namespace
-prototype Flow,Misc get the prototype (if any) of a subroutine
-oct String,Math convert a string to an octal number
-open File open a file, pipe, or descriptor
-opendir File open a directory
-ord String find a character's numeric representation
-pack Binary,String convert a list into a binary representation
-pipe Process open a pair of connected filehandles
-pop ARRAY remove the last element from an array and return it
-pos Regexp find or set the offset for the last/next m//g search
-print I/O output a list to a filehandle
-printf I/O output a formatted list to a filehandle
-push ARRAY append one or more elements to an array
-q/STRING/ String singly quote a string
-qq/STRING/ String doubly quote a string
-quotemeta Regexp quote regular expression magic characters
-qw/STRING/ LIST quote a list of words
-qx/STRING/ Process backquote quote a string
-qr/PATTERN/ Regexp Compile pattern
-rand Math retrieve the next pseudorandom number
-read I/O,Binary fixed-length buffered input from a filehandle
-readdir I/O get a directory from a directory handle
-readline I/O fetch a record from a file
-readlink File determine where a symbolic link is pointing
-recv Socket receive a message over a Socket
-redo Flow start this loop iteration over again
-ref Objects find out the type of thing being referenced
-rename File change a filename
-require Modules load in external functions from a library at runtime
-reset Misc clear all variables of a given name
-return Flow get out of a function early
-reverse String,LIST flip a string or a list
-rewinddir I/O reset directory handle
-rindex String right-to-left substring search
-rmdir File remove a directory
-s/// Regexp replace a pattern with a string
-scalar Misc force a scalar context
-seek I/O reposition file pointer for random-access I/O
-seekdir I/O reposition directory pointer
-select I/O reset default output or do I/O multiplexing
-semctl SysV SysV semaphore control operations
-semget SysV get set of SysV semaphores
-semop SysV SysV semaphore operations
-send Socket send a message over a socket
-setgrent User prepare group file for use
-sethostent Network prepare hosts file for use
-setnetent Network prepare networks file for use
-setpgrp Process set the process group of a process
-setpriority Process set a process's nice value
-setprotoent Network prepare protocols file for use
-setpwent User prepare passwd file for use
-setservent Network prepare services file for use
-setsockopt Socket set some socket options
-shift ARRAY remove the first element of an array, and return it
-shmctl SysV SysV shared memory operations
-shmget SysV get SysV shared memory segment identifier
-shmread SysV read SysV shared memory
-shmwrite SysV write SysV shared memory
-shutdown Socket close down just half of a socket connection
-sin Math return the sine of a number
-sleep Process block for some number of seconds
-socket Socket create a socket
-socketpair Socket create a pair of sockets
-sort LIST sort a list of values
-splice ARRAY add or remove elements anywhere in an array
-split Regexp split up a string using a regexp delimiter
-sprintf String formatted print into a string
-sqrt Math square root function
-srand Math seed the random number generator
-stat File get a file's status information
-study Regexp optimize input data for repeated searches
-sub Flow declare a subroutine, possibly anonymously
-substr String get or alter a portion of a stirng
-symlink File create a symbolic link to a file
-syscall I/O,Binary execute an arbitrary system call
-sysread I/O,Binary fixed-length unbuffered input from a filehandle
-sysseek I/O,Binary position I/O pointer on handle used with sysread and syswrite
-system Process run a separate program
-syswrite I/O,Binary fixed-length unbuffered output to a filehandle
-tell I/O get current seekpointer on a filehandle
-telldir I/O get current seekpointer on a directory handle
-tie Objects bind a variable to an object class
-time Time return number of seconds since 1970
-times Process,Time return elapsed time for self and child processes
-tr/// String transliterate a string
-truncate I/O shorten a file
-uc String return upper-case version of a string
-ucfirst String return a string with just the next letter in upper case
-umask File set file creation mode mask
-undef Misc remove a variable or function definition
-unlink File remove one link to a file
-unpack Binary,LIST convert binary structure into normal perl variables
-unshift ARRAY prepend more elements to the beginning of a list
-untie Objects break a tie binding to a variable
-use Modules,Namespace load a module and import its namespace
-use Objects load in a module at compile time
-utime File set a file's last access and modify times
-values HASH return a list of the values in a hash
-vec Binary test or set particular bits in a string
-wait Process wait for any child process to die
-waitpid Process wait for a particular child process to die
-wantarray Misc,Flow get void vs scalar vs list context of current subroutine call
-warn I/O print debugging info
-write I/O print a picture record
-y/// String transliterate a string
diff --git a/contrib/perl5/lib/Pod/Html.pm b/contrib/perl5/lib/Pod/Html.pm
deleted file mode 100644
index f70a42b..0000000
--- a/contrib/perl5/lib/Pod/Html.pm
+++ /dev/null
@@ -1,2025 +0,0 @@
-package Pod::Html;
-use strict;
-require Exporter;
-
-use vars qw($VERSION @ISA @EXPORT);
-$VERSION = 1.03;
-@ISA = qw(Exporter);
-@EXPORT = qw(pod2html htmlify);
-
-use Carp;
-use Config;
-use Cwd;
-use File::Spec::Unix;
-use Getopt::Long;
-use Pod::Functions;
-
-use locale; # make \w work right in non-ASCII lands
-
-=head1 NAME
-
-Pod::Html - module to convert pod files to HTML
-
-=head1 SYNOPSIS
-
- use Pod::Html;
- pod2html([options]);
-
-=head1 DESCRIPTION
-
-Converts files from pod format (see L<perlpod>) to HTML format. It
-can automatically generate indexes and cross-references, and it keeps
-a cache of things it knows how to cross-reference.
-
-=head1 ARGUMENTS
-
-Pod::Html takes the following arguments:
-
-=over 4
-
-=item backlink
-
- --backlink="Back to Top"
-
-Adds "Back to Top" links in front of every HEAD1 heading (except for
-the first). By default, no backlink are being generated.
-
-=item css
-
- --css=stylesheet
-
-Specify the URL of a cascading style sheet.
-
-=item flush
-
- --flush
-
-Flushes the item and directory caches.
-
-=item header
-
- --header
- --noheader
-
-Creates header and footer blocks containing the text of the NAME
-section. By default, no headers are being generated.
-
-=item help
-
- --help
-
-Displays the usage message.
-
-=item htmldir
-
- --htmldir=name
-
-Sets the directory in which the resulting HTML file is placed. This
-is used to generate relative links to other files. Not passing this
-causes all links to be absolute, since this is the value that tells
-Pod::Html the root of the documentation tree.
-
-=item htmlroot
-
- --htmlroot=name
-
-Sets the base URL for the HTML files. When cross-references are made,
-the HTML root is prepended to the URL.
-
-=item index
-
- --index
- --noindex
-
-Generate an index at the top of the HTML file. This is the default
-behaviour.
-
-=item infile
-
- --infile=name
-
-Specify the pod file to convert. Input is taken from STDIN if no
-infile is specified.
-
-=item libpods
-
- --libpods=name:...:name
-
-List of page names (eg, "perlfunc") which contain linkable C<=item>s.
-
-=item netscape
-
- --netscape
- --nonetscape
-
-Use Netscape HTML directives when applicable. By default, they will
-B<not> be used.
-
-=item outfile
-
- --outfile=name
-
-Specify the HTML file to create. Output goes to STDOUT if no outfile
-is specified.
-
-=item podpath
-
- --podpath=name:...:name
-
-Specify which subdirectories of the podroot contain pod files whose
-HTML converted forms can be linked-to in cross-references.
-
-=item podroot
-
- --podroot=name
-
-Specify the base directory for finding library pods.
-
-=item quiet
-
- --quiet
- --noquiet
-
-Don't display I<mostly harmless> warning messages. These messages
-will be displayed by default. But this is not the same as C<verbose>
-mode.
-
-=item recurse
-
- --recurse
- --norecurse
-
-Recurse into subdirectories specified in podpath (default behaviour).
-
-=item title
-
- --title=title
-
-Specify the title of the resulting HTML file.
-
-=item verbose
-
- --verbose
- --noverbose
-
-Display progress messages. By default, they won't be displayed.
-
-=back
-
-=head1 EXAMPLE
-
- pod2html("pod2html",
- "--podpath=lib:ext:pod:vms",
- "--podroot=/usr/src/perl",
- "--htmlroot=/perl/nmanual",
- "--libpods=perlfunc:perlguts:perlvar:perlrun:perlop",
- "--recurse",
- "--infile=foo.pod",
- "--outfile=/perl/nmanual/foo.html");
-
-=head1 ENVIRONMENT
-
-Uses $Config{pod2html} to setup default options.
-
-=head1 AUTHOR
-
-Tom Christiansen, E<lt>tchrist@perl.comE<gt>.
-
-=head1 SEE ALSO
-
-L<perlpod>
-
-=head1 COPYRIGHT
-
-This program is distributed under the Artistic License.
-
-=cut
-
-my $cache_ext = $^O eq 'VMS' ? ".tmp" : ".x~~";
-my $dircache = "pod2htmd$cache_ext";
-my $itemcache = "pod2htmi$cache_ext";
-
-my @begin_stack = (); # begin/end stack
-
-my @libpods = (); # files to search for links from C<> directives
-my $htmlroot = "/"; # http-server base directory from which all
- # relative paths in $podpath stem.
-my $htmldir = ""; # The directory to which the html pages
- # will (eventually) be written.
-my $htmlfile = ""; # write to stdout by default
-my $htmlfileurl = "" ; # The url that other files would use to
- # refer to this file. This is only used
- # to make relative urls that point to
- # other files.
-my $podfile = ""; # read from stdin by default
-my @podpath = (); # list of directories containing library pods.
-my $podroot = "."; # filesystem base directory from which all
- # relative paths in $podpath stem.
-my $css = ''; # Cascading style sheet
-my $recurse = 1; # recurse on subdirectories in $podpath.
-my $quiet = 0; # not quiet by default
-my $verbose = 0; # not verbose by default
-my $doindex = 1; # non-zero if we should generate an index
-my $backlink = ''; # text for "back to top" links
-my $listlevel = 0; # current list depth
-my @listend = (); # the text to use to end the list.
-my $after_lpar = 0; # set to true after a par in an =item
-my $ignore = 1; # whether or not to format text. we don't
- # format text until we hit our first pod
- # directive.
-
-my %items_named = (); # for the multiples of the same item in perlfunc
-my @items_seen = ();
-my $netscape = 0; # whether or not to use netscape directives.
-my $title; # title to give the pod(s)
-my $header = 0; # produce block header/footer
-my $top = 1; # true if we are at the top of the doc. used
- # to prevent the first <HR> directive.
-my $paragraph; # which paragraph we're processing (used
- # for error messages)
-my $ptQuote = 0; # status of double-quote conversion
-my %pages = (); # associative array used to find the location
- # of pages referenced by L<> links.
-my %sections = (); # sections within this page
-my %items = (); # associative array used to find the location
- # of =item directives referenced by C<> links
-my %local_items = (); # local items - avoid destruction of %items
-my $Is83; # is dos with short filenames (8.3)
-
-sub init_globals {
-$dircache = "pod2htmd$cache_ext";
-$itemcache = "pod2htmi$cache_ext";
-
-@begin_stack = (); # begin/end stack
-
-@libpods = (); # files to search for links from C<> directives
-$htmlroot = "/"; # http-server base directory from which all
- # relative paths in $podpath stem.
-$htmldir = ""; # The directory to which the html pages
- # will (eventually) be written.
-$htmlfile = ""; # write to stdout by default
-$podfile = ""; # read from stdin by default
-@podpath = (); # list of directories containing library pods.
-$podroot = "."; # filesystem base directory from which all
- # relative paths in $podpath stem.
-$css = ''; # Cascading style sheet
-$recurse = 1; # recurse on subdirectories in $podpath.
-$quiet = 0; # not quiet by default
-$verbose = 0; # not verbose by default
-$doindex = 1; # non-zero if we should generate an index
-$backlink = ''; # text for "back to top" links
-$listlevel = 0; # current list depth
-@listend = (); # the text to use to end the list.
-$after_lpar = 0; # set to true after a par in an =item
-$ignore = 1; # whether or not to format text. we don't
- # format text until we hit our first pod
- # directive.
-
-@items_seen = ();
-%items_named = ();
-$netscape = 0; # whether or not to use netscape directives.
-$header = 0; # produce block header/footer
-$title = ''; # title to give the pod(s)
-$top = 1; # true if we are at the top of the doc. used
- # to prevent the first <HR> directive.
-$paragraph = ''; # which paragraph we're processing (used
- # for error messages)
-%sections = (); # sections within this page
-
-# These are not reinitialised here but are kept as a cache.
-# See get_cache and related cache management code.
-#%pages = (); # associative array used to find the location
- # of pages referenced by L<> links.
-#%items = (); # associative array used to find the location
- # of =item directives referenced by C<> links
-%local_items = ();
-$Is83=$^O eq 'dos';
-}
-
-#
-# clean_data: global clean-up of pod data
-#
-sub clean_data($){
- my( $dataref ) = @_;
- my $i;
- for( $i = 0; $i <= $#$dataref; $i++ ){
- ${$dataref}[$i] =~ s/\s+\Z//;
-
- # have a look for all-space lines
- if( ${$dataref}[$i] =~ /^\s+$/m ){
- my @chunks = split( /^\s+$/m, ${$dataref}[$i] );
- splice( @$dataref, $i, 1, @chunks );
- }
- }
-}
-
-
-sub pod2html {
- local(@ARGV) = @_;
- local($/);
- local $_;
-
- init_globals();
-
- $Is83 = 0 if (defined (&Dos::UseLFN) && Dos::UseLFN());
-
- # cache of %pages and %items from last time we ran pod2html
-
- #undef $opt_help if defined $opt_help;
-
- # parse the command-line parameters
- parse_command_line();
-
- # set some variables to their default values if necessary
- local *POD;
- unless (@ARGV && $ARGV[0]) {
- $podfile = "-" unless $podfile; # stdin
- open(POD, "<$podfile")
- || die "$0: cannot open $podfile file for input: $!\n";
- } else {
- $podfile = $ARGV[0]; # XXX: might be more filenames
- *POD = *ARGV;
- }
- $htmlfile = "-" unless $htmlfile; # stdout
- $htmlroot = "" if $htmlroot eq "/"; # so we don't get a //
- $htmldir =~ s#/\z## ; # so we don't get a //
- if ( $htmlroot eq ''
- && defined( $htmldir )
- && $htmldir ne ''
- && substr( $htmlfile, 0, length( $htmldir ) ) eq $htmldir
- )
- {
- # Set the 'base' url for this file, so that we can use it
- # as the location from which to calculate relative links
- # to other files. If this is '', then absolute links will
- # be used throughout.
- $htmlfileurl= "$htmldir/" . substr( $htmlfile, length( $htmldir ) + 1);
- }
-
- # read the pod a paragraph at a time
- warn "Scanning for sections in input file(s)\n" if $verbose;
- $/ = "";
- my @poddata = <POD>;
- close(POD);
- clean_data( \@poddata );
-
- # scan the pod for =head[1-6] directives and build an index
- my $index = scan_headings(\%sections, @poddata);
-
- unless($index) {
- warn "No headings in $podfile\n" if $verbose;
- }
-
- # open the output file
- open(HTML, ">$htmlfile")
- || die "$0: cannot open $htmlfile file for output: $!\n";
-
- # put a title in the HTML file if one wasn't specified
- if ($title eq '') {
- TITLE_SEARCH: {
- for (my $i = 0; $i < @poddata; $i++) {
- if ($poddata[$i] =~ /^=head1\s*NAME\b/m) {
- for my $para ( @poddata[$i, $i+1] ) {
- last TITLE_SEARCH
- if ($title) = $para =~ /(\S+\s+-+.*\S)/s;
- }
- }
-
- }
- }
- }
- if (!$title and $podfile =~ /\.pod\z/) {
- # probably a split pod so take first =head[12] as title
- for (my $i = 0; $i < @poddata; $i++) {
- last if ($title) = $poddata[$i] =~ /^=head[12]\s*(.*)/;
- }
- warn "adopted '$title' as title for $podfile\n"
- if $verbose and $title;
- }
- if ($title) {
- $title =~ s/\s*\(.*\)//;
- } else {
- warn "$0: no title for $podfile" unless $quiet;
- $podfile =~ /^(.*)(\.[^.\/]+)?\z/s;
- $title = ($podfile eq "-" ? 'No Title' : $1);
- warn "using $title" if $verbose;
- }
- my $csslink = $css ? qq(\n<LINK REL="stylesheet" HREF="$css" TYPE="text/css">) : '';
- $csslink =~ s,\\,/,g;
- $csslink =~ s,(/.):,$1|,;
-
- my $block = $header ? <<END_OF_BLOCK : '';
-<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
-<TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
-<FONT SIZE=+1><STRONG><P CLASS=block>&nbsp;$title</P></STRONG></FONT>
-</TD></TR>
-</TABLE>
-END_OF_BLOCK
-
- print HTML <<END_OF_HEAD;
-<HTML>
-<HEAD>
-<TITLE>$title</TITLE>$csslink
-<LINK REV="made" HREF="mailto:$Config{perladmin}">
-</HEAD>
-
-<BODY>
-$block
-END_OF_HEAD
-
- # load/reload/validate/cache %pages and %items
- get_cache($dircache, $itemcache, \@podpath, $podroot, $recurse);
-
- # scan the pod for =item directives
- scan_items( \%local_items, "", @poddata);
-
- # put an index at the top of the file. note, if $doindex is 0 we
- # still generate an index, but surround it with an html comment.
- # that way some other program can extract it if desired.
- $index =~ s/--+/-/g;
- print HTML "<A NAME=\"__index__\"></A>\n";
- print HTML "<!-- INDEX BEGIN -->\n";
- print HTML "<!--\n" unless $doindex;
- print HTML $index;
- print HTML "-->\n" unless $doindex;
- print HTML "<!-- INDEX END -->\n\n";
- print HTML "<HR>\n" if $doindex and $index;
-
- # now convert this file
- my $after_item; # set to true after an =item
- warn "Converting input file $podfile\n" if $verbose;
- foreach my $i (0..$#poddata){
- $ptQuote = 0; # status of quote conversion
-
- $_ = $poddata[$i];
- $paragraph = $i+1;
- if (/^(=.*)/s) { # is it a pod directive?
- $ignore = 0;
- $after_item = 0;
- $_ = $1;
- if (/^=begin\s+(\S+)\s*(.*)/si) {# =begin
- process_begin($1, $2);
- } elsif (/^=end\s+(\S+)\s*(.*)/si) {# =end
- process_end($1, $2);
- } elsif (/^=cut/) { # =cut
- process_cut();
- } elsif (/^=pod/) { # =pod
- process_pod();
- } else {
- next if @begin_stack && $begin_stack[-1] ne 'html';
-
- if (/^=(head[1-6])\s+(.*\S)/s) { # =head[1-6] heading
- process_head( $1, $2, $doindex && $index );
- } elsif (/^=item\s*(.*\S)?/sm) { # =item text
- warn "$0: $podfile: =item without bullet, number or text"
- . " in paragraph $paragraph.\n" if !defined($1) or $1 eq '';
- process_item( $1 );
- $after_item = 1;
- } elsif (/^=over\s*(.*)/) { # =over N
- process_over();
- } elsif (/^=back/) { # =back
- process_back();
- } elsif (/^=for\s+(\S+)\s*(.*)/si) {# =for
- process_for($1,$2);
- } else {
- /^=(\S*)\s*/;
- warn "$0: $podfile: unknown pod directive '$1' in "
- . "paragraph $paragraph. ignoring.\n";
- }
- }
- $top = 0;
- }
- else {
- next if $ignore;
- next if @begin_stack && $begin_stack[-1] ne 'html';
- my $text = $_;
- if( $text =~ /\A\s+/ ){
- process_pre( \$text );
- print HTML "<PRE>\n$text</PRE>\n";
-
- } else {
- process_text( \$text );
-
- # experimental: check for a paragraph where all lines
- # have some ...\t...\t...\n pattern
- if( $text =~ /\t/ ){
- my @lines = split( "\n", $text );
- if( @lines > 1 ){
- my $all = 2;
- foreach my $line ( @lines ){
- if( $line =~ /\S/ && $line !~ /\t/ ){
- $all--;
- last if $all == 0;
- }
- }
- if( $all > 0 ){
- $text =~ s/\t+/<TD>/g;
- $text =~ s/^/<TR><TD>/gm;
- $text = '<TABLE CELLSPACING=0 CELLPADDING=0>' .
- $text . '</TABLE>';
- }
- }
- }
- ## end of experimental
-
- if( $after_item ){
- print HTML "$text\n";
- $after_lpar = 1;
- } else {
- print HTML "<P>$text</P>\n";
- }
- }
- $after_item = 0;
- }
- }
-
- # finish off any pending directives
- finish_list();
-
- # link to page index
- print HTML "<P><A HREF=\"#__index__\"><SMALL>$backlink</SMALL></A></P>\n"
- if $doindex and $index and $backlink;
-
- print HTML <<END_OF_TAIL;
-$block
-</BODY>
-
-</HTML>
-END_OF_TAIL
-
- # close the html file
- close(HTML);
-
- warn "Finished\n" if $verbose;
-}
-
-##############################################################################
-
-my $usage; # see below
-sub usage {
- my $podfile = shift;
- warn "$0: $podfile: @_\n" if @_;
- die $usage;
-}
-
-$usage =<<END_OF_USAGE;
-Usage: $0 --help --htmlroot=<name> --infile=<name> --outfile=<name>
- --podpath=<name>:...:<name> --podroot=<name>
- --libpods=<name>:...:<name> --recurse --verbose --index
- --netscape --norecurse --noindex
-
- --backlink - set text for "back to top" links (default: none).
- --css - stylesheet URL
- --flush - flushes the item and directory caches.
- --[no]header - produce block header/footer (default is no headers).
- --help - prints this message.
- --htmldir - directory for resulting HTML files.
- --htmlroot - http-server base directory from which all relative paths
- in podpath stem (default is /).
- --[no]index - generate an index at the top of the resulting html
- (default behaviour).
- --infile - filename for the pod to convert (input taken from stdin
- by default).
- --libpods - colon-separated list of pages to search for =item pod
- directives in as targets of C<> and implicit links (empty
- by default). note, these are not filenames, but rather
- page names like those that appear in L<> links.
- --[no]netscape - will use netscape html directives when applicable.
- (default is not to use them).
- --outfile - filename for the resulting html file (output sent to
- stdout by default).
- --podpath - colon-separated list of directories containing library
- pods (empty by default).
- --podroot - filesystem base directory from which all relative paths
- in podpath stem (default is .).
- --[no]quiet - supress some benign warning messages (default is off).
- --[no]recurse - recurse on those subdirectories listed in podpath
- (default behaviour).
- --title - title that will appear in resulting html file.
- --[no]verbose - self-explanatory (off by default).
-
-END_OF_USAGE
-
-sub parse_command_line {
- my ($opt_backlink,$opt_css,$opt_flush,$opt_header,$opt_help,$opt_htmldir,
- $opt_htmlroot,$opt_index,$opt_infile,$opt_libpods,$opt_netscape,
- $opt_outfile,$opt_podpath,$opt_podroot,$opt_quiet,$opt_recurse,
- $opt_title,$opt_verbose);
-
- unshift @ARGV, split ' ', $Config{pod2html} if $Config{pod2html};
- my $result = GetOptions(
- 'backlink=s' => \$opt_backlink,
- 'css=s' => \$opt_css,
- 'flush' => \$opt_flush,
- 'header!' => \$opt_header,
- 'help' => \$opt_help,
- 'htmldir=s' => \$opt_htmldir,
- 'htmlroot=s' => \$opt_htmlroot,
- 'index!' => \$opt_index,
- 'infile=s' => \$opt_infile,
- 'libpods=s' => \$opt_libpods,
- 'netscape!' => \$opt_netscape,
- 'outfile=s' => \$opt_outfile,
- 'podpath=s' => \$opt_podpath,
- 'podroot=s' => \$opt_podroot,
- 'quiet!' => \$opt_quiet,
- 'recurse!' => \$opt_recurse,
- 'title=s' => \$opt_title,
- 'verbose!' => \$opt_verbose,
- );
- usage("-", "invalid parameters") if not $result;
-
- usage("-") if defined $opt_help; # see if the user asked for help
- $opt_help = ""; # just to make -w shut-up.
-
- @podpath = split(":", $opt_podpath) if defined $opt_podpath;
- @libpods = split(":", $opt_libpods) if defined $opt_libpods;
-
- $backlink = $opt_backlink if defined $opt_backlink;
- $css = $opt_css if defined $opt_css;
- $header = $opt_header if defined $opt_header;
- $htmldir = $opt_htmldir if defined $opt_htmldir;
- $htmlroot = $opt_htmlroot if defined $opt_htmlroot;
- $doindex = $opt_index if defined $opt_index;
- $podfile = $opt_infile if defined $opt_infile;
- $netscape = $opt_netscape if defined $opt_netscape;
- $htmlfile = $opt_outfile if defined $opt_outfile;
- $podroot = $opt_podroot if defined $opt_podroot;
- $quiet = $opt_quiet if defined $opt_quiet;
- $recurse = $opt_recurse if defined $opt_recurse;
- $title = $opt_title if defined $opt_title;
- $verbose = $opt_verbose if defined $opt_verbose;
-
- warn "Flushing item and directory caches\n"
- if $opt_verbose && defined $opt_flush;
- unlink($dircache, $itemcache) if defined $opt_flush;
-}
-
-
-my $saved_cache_key;
-
-sub get_cache {
- my($dircache, $itemcache, $podpath, $podroot, $recurse) = @_;
- my @cache_key_args = @_;
-
- # A first-level cache:
- # Don't bother reading the cache files if they still apply
- # and haven't changed since we last read them.
-
- my $this_cache_key = cache_key(@cache_key_args);
-
- return if $saved_cache_key and $this_cache_key eq $saved_cache_key;
-
- # load the cache of %pages and %items if possible. $tests will be
- # non-zero if successful.
- my $tests = 0;
- if (-f $dircache && -f $itemcache) {
- warn "scanning for item cache\n" if $verbose;
- $tests = load_cache($dircache, $itemcache, $podpath, $podroot);
- }
-
- # if we didn't succeed in loading the cache then we must (re)build
- # %pages and %items.
- if (!$tests) {
- warn "scanning directories in pod-path\n" if $verbose;
- scan_podpath($podroot, $recurse, 0);
- }
- $saved_cache_key = cache_key(@cache_key_args);
-}
-
-sub cache_key {
- my($dircache, $itemcache, $podpath, $podroot, $recurse) = @_;
- return join('!', $dircache, $itemcache, $recurse,
- @$podpath, $podroot, stat($dircache), stat($itemcache));
-}
-
-#
-# load_cache - tries to find if the caches stored in $dircache and $itemcache
-# are valid caches of %pages and %items. if they are valid then it loads
-# them and returns a non-zero value.
-#
-sub load_cache {
- my($dircache, $itemcache, $podpath, $podroot) = @_;
- my($tests);
- local $_;
-
- $tests = 0;
-
- open(CACHE, "<$itemcache") ||
- die "$0: error opening $itemcache for reading: $!\n";
- $/ = "\n";
-
- # is it the same podpath?
- $_ = <CACHE>;
- chomp($_);
- $tests++ if (join(":", @$podpath) eq $_);
-
- # is it the same podroot?
- $_ = <CACHE>;
- chomp($_);
- $tests++ if ($podroot eq $_);
-
- # load the cache if its good
- if ($tests != 2) {
- close(CACHE);
- return 0;
- }
-
- warn "loading item cache\n" if $verbose;
- while (<CACHE>) {
- /(.*?) (.*)$/;
- $items{$1} = $2;
- }
- close(CACHE);
-
- warn "scanning for directory cache\n" if $verbose;
- open(CACHE, "<$dircache") ||
- die "$0: error opening $dircache for reading: $!\n";
- $/ = "\n";
- $tests = 0;
-
- # is it the same podpath?
- $_ = <CACHE>;
- chomp($_);
- $tests++ if (join(":", @$podpath) eq $_);
-
- # is it the same podroot?
- $_ = <CACHE>;
- chomp($_);
- $tests++ if ($podroot eq $_);
-
- # load the cache if its good
- if ($tests != 2) {
- close(CACHE);
- return 0;
- }
-
- warn "loading directory cache\n" if $verbose;
- while (<CACHE>) {
- /(.*?) (.*)$/;
- $pages{$1} = $2;
- }
-
- close(CACHE);
-
- return 1;
-}
-
-#
-# scan_podpath - scans the directories specified in @podpath for directories,
-# .pod files, and .pm files. it also scans the pod files specified in
-# @libpods for =item directives.
-#
-sub scan_podpath {
- my($podroot, $recurse, $append) = @_;
- my($pwd, $dir);
- my($libpod, $dirname, $pod, @files, @poddata);
-
- unless($append) {
- %items = ();
- %pages = ();
- }
-
- # scan each directory listed in @podpath
- $pwd = getcwd();
- chdir($podroot)
- || die "$0: error changing to directory $podroot: $!\n";
- foreach $dir (@podpath) {
- scan_dir($dir, $recurse);
- }
-
- # scan the pods listed in @libpods for =item directives
- foreach $libpod (@libpods) {
- # if the page isn't defined then we won't know where to find it
- # on the system.
- next unless defined $pages{$libpod} && $pages{$libpod};
-
- # if there is a directory then use the .pod and .pm files within it.
- # NOTE: Only finds the first so-named directory in the tree.
-# if ($pages{$libpod} =~ /([^:]*[^(\.pod|\.pm)]):/) {
- if ($pages{$libpod} =~ /([^:]*(?<!\.pod)(?<!\.pm)):/) {
- # find all the .pod and .pm files within the directory
- $dirname = $1;
- opendir(DIR, $dirname) ||
- die "$0: error opening directory $dirname: $!\n";
- @files = grep(/(\.pod|\.pm)\z/ && ! -d $_, readdir(DIR));
- closedir(DIR);
-
- # scan each .pod and .pm file for =item directives
- foreach $pod (@files) {
- open(POD, "<$dirname/$pod") ||
- die "$0: error opening $dirname/$pod for input: $!\n";
- @poddata = <POD>;
- close(POD);
- clean_data( \@poddata );
-
- scan_items( \%items, "$dirname/$pod", @poddata);
- }
-
- # use the names of files as =item directives too.
-### Don't think this should be done this way - confuses issues.(WL)
-### foreach $pod (@files) {
-### $pod =~ /^(.*)(\.pod|\.pm)$/;
-### $items{$1} = "$dirname/$1.html" if $1;
-### }
- } elsif ($pages{$libpod} =~ /([^:]*\.pod):/ ||
- $pages{$libpod} =~ /([^:]*\.pm):/) {
- # scan the .pod or .pm file for =item directives
- $pod = $1;
- open(POD, "<$pod") ||
- die "$0: error opening $pod for input: $!\n";
- @poddata = <POD>;
- close(POD);
- clean_data( \@poddata );
-
- scan_items( \%items, "$pod", @poddata);
- } else {
- warn "$0: shouldn't be here (line ".__LINE__."\n";
- }
- }
- @poddata = (); # clean-up a bit
-
- chdir($pwd)
- || die "$0: error changing to directory $pwd: $!\n";
-
- # cache the item list for later use
- warn "caching items for later use\n" if $verbose;
- open(CACHE, ">$itemcache") ||
- die "$0: error open $itemcache for writing: $!\n";
-
- print CACHE join(":", @podpath) . "\n$podroot\n";
- foreach my $key (keys %items) {
- print CACHE "$key $items{$key}\n";
- }
-
- close(CACHE);
-
- # cache the directory list for later use
- warn "caching directories for later use\n" if $verbose;
- open(CACHE, ">$dircache") ||
- die "$0: error open $dircache for writing: $!\n";
-
- print CACHE join(":", @podpath) . "\n$podroot\n";
- foreach my $key (keys %pages) {
- print CACHE "$key $pages{$key}\n";
- }
-
- close(CACHE);
-}
-
-#
-# scan_dir - scans the directory specified in $dir for subdirectories, .pod
-# files, and .pm files. notes those that it finds. this information will
-# be used later in order to figure out where the pages specified in L<>
-# links are on the filesystem.
-#
-sub scan_dir {
- my($dir, $recurse) = @_;
- my($t, @subdirs, @pods, $pod, $dirname, @dirs);
- local $_;
-
- @subdirs = ();
- @pods = ();
-
- opendir(DIR, $dir) ||
- die "$0: error opening directory $dir: $!\n";
- while (defined($_ = readdir(DIR))) {
- if (-d "$dir/$_" && $_ ne "." && $_ ne "..") { # directory
- $pages{$_} = "" unless defined $pages{$_};
- $pages{$_} .= "$dir/$_:";
- push(@subdirs, $_);
- } elsif (/\.pod\z/) { # .pod
- s/\.pod\z//;
- $pages{$_} = "" unless defined $pages{$_};
- $pages{$_} .= "$dir/$_.pod:";
- push(@pods, "$dir/$_.pod");
- } elsif (/\.html\z/) { # .html
- s/\.html\z//;
- $pages{$_} = "" unless defined $pages{$_};
- $pages{$_} .= "$dir/$_.pod:";
- } elsif (/\.pm\z/) { # .pm
- s/\.pm\z//;
- $pages{$_} = "" unless defined $pages{$_};
- $pages{$_} .= "$dir/$_.pm:";
- push(@pods, "$dir/$_.pm");
- }
- }
- closedir(DIR);
-
- # recurse on the subdirectories if necessary
- if ($recurse) {
- foreach my $subdir (@subdirs) {
- scan_dir("$dir/$subdir", $recurse);
- }
- }
-}
-
-#
-# scan_headings - scan a pod file for head[1-6] tags, note the tags, and
-# build an index.
-#
-sub scan_headings {
- my($sections, @data) = @_;
- my($tag, $which_head, $otitle, $listdepth, $index);
-
- # here we need local $ignore = 0;
- # unfortunately, we can't have it, because $ignore is lexical
- $ignore = 0;
-
- $listdepth = 0;
- $index = "";
-
- # scan for =head directives, note their name, and build an index
- # pointing to each of them.
- foreach my $line (@data) {
- if ($line =~ /^=(head)([1-6])\s+(.*)/) {
- ($tag, $which_head, $otitle) = ($1,$2,$3);
-
- my $title = depod( $otitle );
- my $name = htmlify( $title );
- $$sections{$name} = 1;
- $title = process_text( \$otitle );
-
- while ($which_head != $listdepth) {
- if ($which_head > $listdepth) {
- $index .= "\n" . ("\t" x $listdepth) . "<UL>\n";
- $listdepth++;
- } elsif ($which_head < $listdepth) {
- $listdepth--;
- $index .= "\n" . ("\t" x $listdepth) . "</UL>\n";
- }
- }
-
- $index .= "\n" . ("\t" x $listdepth) . "<LI>" .
- "<A HREF=\"#" . $name . "\">" .
- $title . "</A></LI>";
- }
- }
-
- # finish off the lists
- while ($listdepth--) {
- $index .= "\n" . ("\t" x $listdepth) . "</UL>\n";
- }
-
- # get rid of bogus lists
- $index =~ s,\t*<UL>\s*</UL>\n,,g;
-
- $ignore = 1; # restore old value;
-
- return $index;
-}
-
-#
-# scan_items - scans the pod specified by $pod for =item directives. we
-# will use this information later on in resolving C<> links.
-#
-sub scan_items {
- my( $itemref, $pod, @poddata ) = @_;
- my($i, $item);
- local $_;
-
- $pod =~ s/\.pod\z//;
- $pod .= ".html" if $pod;
-
- foreach $i (0..$#poddata) {
- my $txt = depod( $poddata[$i] );
-
- # figure out what kind of item it is.
- # Build string for referencing this item.
- if ( $txt =~ /\A=item\s+\*\s*(.*)\Z/s ) { # bullet
- next unless $1;
- $item = $1;
- } elsif( $txt =~ /\A=item\s+(?>\d+\.?)\s*(.*)\Z/s ) { # numbered list
- $item = $1;
- } elsif( $txt =~ /\A=item\s+(.*)\Z/s ) { # plain item
- $item = $1;
- } else {
- next;
- }
- my $fid = fragment_id( $item );
- $$itemref{$fid} = "$pod" if $fid;
- }
-}
-
-#
-# process_head - convert a pod head[1-6] tag and convert it to HTML format.
-#
-sub process_head {
- my($tag, $heading, $hasindex) = @_;
-
- # figure out the level of the =head
- $tag =~ /head([1-6])/;
- my $level = $1;
-
- if( $listlevel ){
- warn "$0: $podfile: unterminated list at =head in paragraph $paragraph. ignoring.\n";
- while( $listlevel ){
- process_back();
- }
- }
-
- print HTML "<P>\n";
- if( $level == 1 && ! $top ){
- print HTML "<A HREF=\"#__index__\"><SMALL>$backlink</SMALL></A>\n"
- if $hasindex and $backlink;
- print HTML "<HR>\n"
- }
-
- my $name = htmlify( depod( $heading ) );
- my $convert = process_text( \$heading );
- print HTML "<H$level><A NAME=\"$name\">$convert</A></H$level>\n";
-}
-
-
-#
-# emit_item_tag - print an =item's text
-# Note: The global $EmittedItem is used for inhibiting self-references.
-#
-my $EmittedItem;
-
-sub emit_item_tag($$$){
- my( $otext, $text, $compact ) = @_;
- my $item = fragment_id( $text );
-
- $EmittedItem = $item;
- ### print STDERR "emit_item_tag=$item ($text)\n";
-
- print HTML '<STRONG>';
- if ($items_named{$item}++) {
- print HTML process_text( \$otext );
- } else {
- my $name = 'item_' . $item;
- print HTML qq{<A NAME="$name">}, process_text( \$otext ), '</A>';
- }
- print HTML "</STRONG><BR>\n";
- undef( $EmittedItem );
-}
-
-sub emit_li {
- my( $tag ) = @_;
- if( $items_seen[$listlevel]++ == 0 ){
- push( @listend, "</$tag>" );
- print HTML "<$tag>\n";
- }
- print HTML $tag eq 'DL' ? '<DT>' : '<LI>';
-}
-
-#
-# process_item - convert a pod item tag and convert it to HTML format.
-#
-sub process_item {
- my( $otext ) = @_;
-
- # lots of documents start a list without doing an =over. this is
- # bad! but, the proper thing to do seems to be to just assume
- # they did do an =over. so warn them once and then continue.
- if( $listlevel == 0 ){
- warn "$0: $podfile: unexpected =item directive in paragraph $paragraph. ignoring.\n";
- process_over();
- }
-
- # formatting: insert a paragraph if preceding item has >1 paragraph
- if( $after_lpar ){
- print HTML "<P></P>\n";
- $after_lpar = 0;
- }
-
- # remove formatting instructions from the text
- my $text = depod( $otext );
-
- # all the list variants:
- if( $text =~ /\A\*/ ){ # bullet
- emit_li( 'UL' );
- if ($text =~ /\A\*\s+(.+)\Z/s ) { # with additional text
- my $tag = $1;
- $otext =~ s/\A\*\s+//;
- emit_item_tag( $otext, $tag, 1 );
- }
-
- } elsif( $text =~ /\A\d+/ ){ # numbered list
- emit_li( 'OL' );
- if ($text =~ /\A(?>\d+\.?)\s*(.+)\Z/s ) { # with additional text
- my $tag = $1;
- $otext =~ s/\A\d+\.?\s*//;
- emit_item_tag( $otext, $tag, 1 );
- }
-
- } else { # definition list
- emit_li( 'DL' );
- if ($text =~ /\A(.+)\Z/s ){ # should have text
- emit_item_tag( $otext, $text, 1 );
- }
- print HTML '<DD>';
- }
- print HTML "\n";
-}
-
-#
-# process_over - process a pod over tag and start a corresponding HTML list.
-#
-sub process_over {
- # start a new list
- $listlevel++;
- push( @items_seen, 0 );
- $after_lpar = 0;
-}
-
-#
-# process_back - process a pod back tag and convert it to HTML format.
-#
-sub process_back {
- if( $listlevel == 0 ){
- warn "$0: $podfile: unexpected =back directive in paragraph $paragraph. ignoring.\n";
- return;
- }
-
- # close off the list. note, I check to see if $listend[$listlevel] is
- # defined because an =item directive may have never appeared and thus
- # $listend[$listlevel] may have never been initialized.
- $listlevel--;
- if( defined $listend[$listlevel] ){
- print HTML '<P></P>' if $after_lpar;
- print HTML $listend[$listlevel];
- print HTML "\n";
- pop( @listend );
- }
- $after_lpar = 0;
-
- # clean up item count
- pop( @items_seen );
-}
-
-#
-# process_cut - process a pod cut tag, thus start ignoring pod directives.
-#
-sub process_cut {
- $ignore = 1;
-}
-
-#
-# process_pod - process a pod pod tag, thus stop ignoring pod directives
-# until we see a corresponding cut.
-#
-sub process_pod {
- # no need to set $ignore to 0 cause the main loop did it
-}
-
-#
-# process_for - process a =for pod tag. if it's for html, spit
-# it out verbatim, if illustration, center it, otherwise ignore it.
-#
-sub process_for {
- my($whom, $text) = @_;
- if ( $whom =~ /^(pod2)?html$/i) {
- print HTML $text;
- } elsif ($whom =~ /^illustration$/i) {
- 1 while chomp $text;
- for my $ext (qw[.png .gif .jpeg .jpg .tga .pcl .bmp]) {
- $text .= $ext, last if -r "$text$ext";
- }
- print HTML qq{<p align = "center"><img src = "$text" alt = "$text illustration"></p>};
- }
-}
-
-#
-# process_begin - process a =begin pod tag. this pushes
-# whom we're beginning on the begin stack. if there's a
-# begin stack, we only print if it us.
-#
-sub process_begin {
- my($whom, $text) = @_;
- $whom = lc($whom);
- push (@begin_stack, $whom);
- if ( $whom =~ /^(pod2)?html$/) {
- print HTML $text if $text;
- }
-}
-
-#
-# process_end - process a =end pod tag. pop the
-# begin stack. die if we're mismatched.
-#
-sub process_end {
- my($whom, $text) = @_;
- $whom = lc($whom);
- if ($begin_stack[-1] ne $whom ) {
- die "Unmatched begin/end at chunk $paragraph\n"
- }
- pop( @begin_stack );
-}
-
-#
-# process_pre - indented paragraph, made into <PRE></PRE>
-#
-sub process_pre {
- my( $text ) = @_;
- my( $rest );
- return if $ignore;
-
- $rest = $$text;
-
- # insert spaces in place of tabs
- $rest =~ s#.*#
- my $line = $&;
- 1 while $line =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e;
- $line;
- #eg;
-
- # convert some special chars to HTML escapes
- $rest =~ s/&/&amp;/g;
- $rest =~ s/</&lt;/g;
- $rest =~ s/>/&gt;/g;
- $rest =~ s/"/&quot;/g;
-
- # try and create links for all occurrences of perl.* within
- # the preformatted text.
- $rest =~ s{
- (\s*)(perl\w+)
- }{
- if ( defined $pages{$2} ){ # is a link
- qq($1<A HREF="$htmlroot/$pages{$2}">$2</A>);
- } elsif (defined $pages{dosify($2)}) { # is a link
- qq($1<A HREF="$htmlroot/$pages{dosify($2)}">$2</A>);
- } else {
- "$1$2";
- }
- }xeg;
- $rest =~ s{
- (<A\ HREF="?) ([^>:]*:)? ([^>:]*) \.pod: ([^>:]*:)?
- }{
- my $url ;
- if ( $htmlfileurl ne '' ){
- # Here, we take advantage of the knowledge
- # that $htmlfileurl ne '' implies $htmlroot eq ''.
- # Since $htmlroot eq '', we need to prepend $htmldir
- # on the fron of the link to get the absolute path
- # of the link's target. We check for a leading '/'
- # to avoid corrupting links that are #, file:, etc.
- my $old_url = $3 ;
- $old_url = "$htmldir$old_url" if $old_url =~ m{^\/};
- $url = relativize_url( "$old_url.html", $htmlfileurl );
- } else {
- $url = "$3.html" ;
- }
- "$1$url" ;
- }xeg;
-
- # Look for embedded URLs and make them into links. We don't
- # relativize them since they are best left as the author intended.
-
- my $urls = '(' . join ('|', qw{
- http
- telnet
- mailto
- news
- gopher
- file
- wais
- ftp
- } )
- . ')';
-
- my $ltrs = '\w';
- my $gunk = '/#~:.?+=&%@!\-';
- my $punc = '.:?\-';
- my $any = "${ltrs}${gunk}${punc}";
-
- $rest =~ s{
- \b # start at word boundary
- ( # begin $1 {
- $urls : # need resource and a colon
- (?!:) # Ignore File::, among others.
- [$any] +? # followed by on or more
- # of any valid character, but
- # be conservative and take only
- # what you need to....
- ) # end $1 }
- (?= # look-ahead non-consumptive assertion
- [$punc]* # either 0 or more puntuation
- [^$any] # followed by a non-url char
- | # or else
- $ # then end of the string
- )
- }{<A HREF="$1">$1</A>}igox;
-
- # text should be as it is (verbatim)
- $$text = $rest;
-}
-
-
-#
-# pure text processing
-#
-# pure_text/inIS_text: differ with respect to automatic C<> recognition.
-# we don't want this to happen within IS
-#
-sub pure_text($){
- my $text = shift();
- process_puretext( $text, \$ptQuote, 1 );
-}
-
-sub inIS_text($){
- my $text = shift();
- process_puretext( $text, \$ptQuote, 0 );
-}
-
-#
-# process_puretext - process pure text (without pod-escapes) converting
-# double-quotes and handling implicit C<> links.
-#
-sub process_puretext {
- my($text, $quote, $notinIS) = @_;
-
- ## Guessing at func() or [$@%&]*var references in plain text is destined
- ## to produce some strange looking ref's. uncomment to disable:
- ## $notinIS = 0;
-
- my(@words, $lead, $trail);
-
- # convert double-quotes to single-quotes
- if( $$quote && $text =~ s/"/''/s ){
- $$quote = 0;
- }
- while ($text =~ s/"([^"]*)"/``$1''/sg) {};
- $$quote = 1 if $text =~ s/"/``/s;
-
- # keep track of leading and trailing white-space
- $lead = ($text =~ s/\A(\s+)//s ? $1 : "");
- $trail = ($text =~ s/(\s+)\Z//s ? $1 : "");
-
- # split at space/non-space boundaries
- @words = split( /(?<=\s)(?=\S)|(?<=\S)(?=\s)/, $text );
-
- # process each word individually
- foreach my $word (@words) {
- # skip space runs
- next if $word =~ /^\s*$/;
- # see if we can infer a link
- if( $notinIS && $word =~ /^(\w+)\((.*)\)$/ ) {
- # has parenthesis so should have been a C<> ref
- ## try for a pagename (perlXXX(1))?
- my( $func, $args ) = ( $1, $2 );
- if( $args =~ /^\d+$/ ){
- my $url = page_sect( $word, '' );
- if( defined $url ){
- $word = "<A HREF=\"$url\">the $word manpage</A>";
- next;
- }
- }
- ## try function name for a link, append tt'ed argument list
- $word = emit_C( $func, '', "($args)");
-
-#### disabled. either all (including $\W, $\w+{.*} etc.) or nothing.
-## } elsif( $notinIS && $word =~ /^[\$\@%&*]+\w+$/) {
-## # perl variables, should be a C<> ref
-## $word = emit_C( $word );
-
- } elsif ($word =~ m,^\w+://\w,) {
- # looks like a URL
- # Don't relativize it: leave it as the author intended
- $word = qq(<A HREF="$word">$word</A>);
- } elsif ($word =~ /[\w.-]+\@[\w-]+\.\w/) {
- # looks like an e-mail address
- my ($w1, $w2, $w3) = ("", $word, "");
- ($w1, $w2, $w3) = ("(", $1, ")$2") if $word =~ /^\((.*?)\)(,?)/;
- ($w1, $w2, $w3) = ("&lt;", $1, "&gt;$2") if $word =~ /^<(.*?)>(,?)/;
- $word = qq($w1<A HREF="mailto:$w2">$w2</A>$w3);
- } elsif ($word !~ /[a-z]/ && $word =~ /[A-Z]/) { # all uppercase?
- $word = html_escape($word) if $word =~ /["&<>]/;
- $word = "\n<FONT SIZE=-1>$word</FONT>" if $netscape;
- } else {
- $word = html_escape($word) if $word =~ /["&<>]/;
- }
- }
-
- # put everything back together
- return $lead . join( '', @words ) . $trail;
-}
-
-
-#
-# process_text - handles plaintext that appears in the input pod file.
-# there may be pod commands embedded within the text so those must be
-# converted to html commands.
-#
-
-sub process_text1($$;$$);
-sub pattern ($) { $_[0] ? '[^\S\n]+'.('>' x ($_[0] + 1)) : '>' }
-sub closing ($) { local($_) = shift; (defined && s/\s+$//) ? length : 0 }
-
-sub process_text {
- return if $ignore;
- my( $tref ) = @_;
- my $res = process_text1( 0, $tref );
- $$tref = $res;
-}
-
-sub process_text1($$;$$){
- my( $lev, $rstr, $func, $closing ) = @_;
- my $res = '';
-
- unless (defined $func) {
- $func = '';
- $lev++;
- }
-
- if( $func eq 'B' ){
- # B<text> - boldface
- $res = '<STRONG>' . process_text1( $lev, $rstr ) . '</STRONG>';
-
- } elsif( $func eq 'C' ){
- # C<code> - can be a ref or <CODE></CODE>
- # need to extract text
- my $par = go_ahead( $rstr, 'C', $closing );
-
- ## clean-up of the link target
- my $text = depod( $par );
-
- ### my $x = $par =~ /[BI]</ ? 'yes' : 'no' ;
- ### print STDERR "-->call emit_C($par) lev=$lev, par with BI=$x\n";
-
- $res = emit_C( $text, $lev > 1 || ($par =~ /[BI]</) );
-
- } elsif( $func eq 'E' ){
- # E<x> - convert to character
- $$rstr =~ s/^([^>]*)>//;
- my $escape = $1;
- $escape =~ s/^(\d+|X[\dA-F]+)$/#$1/i;
- $res = "&$escape;";
-
- } elsif( $func eq 'F' ){
- # F<filename> - italizice
- $res = '<EM>' . process_text1( $lev, $rstr ) . '</EM>';
-
- } elsif( $func eq 'I' ){
- # I<text> - italizice
- $res = '<EM>' . process_text1( $lev, $rstr ) . '</EM>';
-
- } elsif( $func eq 'L' ){
- # L<link> - link
- ## L<text|cross-ref> => produce text, use cross-ref for linking
- ## L<cross-ref> => make text from cross-ref
- ## need to extract text
- my $par = go_ahead( $rstr, 'L', $closing );
-
- # some L<>'s that shouldn't be:
- # a) full-blown URL's are emitted as-is
- if( $par =~ m{^\w+://}s ){
- return make_URL_href( $par );
- }
- # b) C<...> is stripped and treated as C<>
- if( $par =~ /^C<(.*)>$/ ){
- my $text = depod( $1 );
- return emit_C( $text, $lev > 1 || ($par =~ /[BI]</) );
- }
-
- # analyze the contents
- $par =~ s/\n/ /g; # undo word-wrapped tags
- my $opar = $par;
- my $linktext;
- if( $par =~ s{^([^|]+)\|}{} ){
- $linktext = $1;
- }
-
- # make sure sections start with a /
- $par =~ s{^"}{/"};
-
- my( $page, $section, $ident );
-
- # check for link patterns
- if( $par =~ m{^([^/]+?)/(?!")(.*?)$} ){ # name/ident
- # we've got a name/ident (no quotes)
- ( $page, $ident ) = ( $1, $2 );
- ### print STDERR "--> L<$par> to page $page, ident $ident\n";
-
- } elsif( $par =~ m{^(.*?)/"?(.*?)"?$} ){ # [name]/"section"
- # even though this should be a "section", we go for ident first
- ( $page, $ident ) = ( $1, $2 );
- ### print STDERR "--> L<$par> to page $page, section $section\n";
-
- } elsif( $par =~ /\s/ ){ # this must be a section with missing quotes
- ( $page, $section ) = ( '', $par );
- ### print STDERR "--> L<$par> to void page, section $section\n";
-
- } else {
- ( $page, $section ) = ( $par, '' );
- ### print STDERR "--> L<$par> to page $par, void section\n";
- }
-
- # now, either $section or $ident is defined. the convoluted logic
- # below tries to resolve L<> according to what the user specified.
- # failing this, we try to find the next best thing...
- my( $url, $ltext, $fid );
-
- RESOLVE: {
- if( defined $ident ){
- ## try to resolve $ident as an item
- ( $url, $fid ) = coderef( $page, $ident );
- if( $url ){
- if( ! defined( $linktext ) ){
- $linktext = $ident;
- $linktext .= " in " if $ident && $page;
- $linktext .= "the $page manpage" if $page;
- }
- ### print STDERR "got coderef url=$url\n";
- last RESOLVE;
- }
- ## no luck: go for a section (auto-quoting!)
- $section = $ident;
- }
- ## now go for a section
- my $htmlsection = htmlify( $section );
- $url = page_sect( $page, $htmlsection );
- if( $url ){
- if( ! defined( $linktext ) ){
- $linktext = $section;
- $linktext .= " in " if $section && $page;
- $linktext .= "the $page manpage" if $page;
- }
- ### print STDERR "got page/section url=$url\n";
- last RESOLVE;
- }
- ## no luck: go for an ident
- if( $section ){
- $ident = $section;
- } else {
- $ident = $page;
- $page = undef();
- }
- ( $url, $fid ) = coderef( $page, $ident );
- if( $url ){
- if( ! defined( $linktext ) ){
- $linktext = $ident;
- $linktext .= " in " if $ident && $page;
- $linktext .= "the $page manpage" if $page;
- }
- ### print STDERR "got section=>coderef url=$url\n";
- last RESOLVE;
- }
-
- # warning; show some text.
- $linktext = $opar unless defined $linktext;
- warn "$0: $podfile: cannot resolve L<$opar> in paragraph $paragraph.";
- }
-
- # now we have an URL or just plain code
- $$rstr = $linktext . '>' . $$rstr;
- if( defined( $url ) ){
- $res = "<A HREF=\"$url\">" . process_text1( $lev, $rstr ) . '</A>';
- } else {
- $res = '<EM>' . process_text1( $lev, $rstr ) . '</EM>';
- }
-
- } elsif( $func eq 'S' ){
- # S<text> - non-breaking spaces
- $res = process_text1( $lev, $rstr );
- $res =~ s/ /&nbsp;/g;
-
- } elsif( $func eq 'X' ){
- # X<> - ignore
- $$rstr =~ s/^[^>]*>//;
-
- } elsif( $func eq 'Z' ){
- # Z<> - empty
- warn "$0: $podfile: invalid X<> in paragraph $paragraph."
- unless $$rstr =~ s/^>//;
-
- } else {
- my $term = pattern $closing;
- while( $$rstr =~ s/\A(.*?)(([BCEFILSXZ])<(<+[^\S\n]+)?|$term)//s ){
- # all others: either recurse into new function or
- # terminate at closing angle bracket(s)
- my $pt = $1;
- $pt .= $2 if !$3 && $lev == 1;
- $res .= $lev == 1 ? pure_text( $pt ) : inIS_text( $pt );
- return $res if !$3 && $lev > 1;
- if( $3 ){
- $res .= process_text1( $lev, $rstr, $3, closing $4 );
- }
- }
- if( $lev == 1 ){
- $res .= pure_text( $$rstr );
- } else {
- warn "$0: $podfile: undelimited $func<> in paragraph $paragraph.";
- }
- }
- return $res;
-}
-
-#
-# go_ahead: extract text of an IS (can be nested)
-#
-sub go_ahead($$$){
- my( $rstr, $func, $closing ) = @_;
- my $res = '';
- my @closing = ($closing);
- while( $$rstr =~
- s/\A(.*?)(([BCEFILSXZ])<(<+[^\S\n]+)?|@{[pattern $closing[0]]})//s ){
- $res .= $1;
- unless( $3 ){
- shift @closing;
- return $res unless @closing;
- } else {
- unshift @closing, closing $4;
- }
- $res .= $2;
- }
- warn "$0: $podfile: undelimited $func<> in paragraph $paragraph.";
- return $res;
-}
-
-#
-# emit_C - output result of C<text>
-# $text is the depod-ed text
-#
-sub emit_C($;$$){
- my( $text, $nocode, $args ) = @_;
- $args = '' unless defined $args;
- my $res;
- my( $url, $fid ) = coderef( undef(), $text );
-
- # need HTML-safe text
- my $linktext = html_escape( "$text$args" );
-
- if( defined( $url ) &&
- (!defined( $EmittedItem ) || $EmittedItem ne $fid ) ){
- $res = "<A HREF=\"$url\"><CODE>$linktext</CODE></A>";
- } elsif( 0 && $nocode ){
- $res = $linktext;
- } else {
- $res = "<CODE>$linktext</CODE>";
- }
- return $res;
-}
-
-#
-# html_escape: make text safe for HTML
-#
-sub html_escape {
- my $rest = $_[0];
- $rest =~ s/&/&amp;/g;
- $rest =~ s/</&lt;/g;
- $rest =~ s/>/&gt;/g;
- $rest =~ s/"/&quot;/g;
- return $rest;
-}
-
-
-#
-# dosify - convert filenames to 8.3
-#
-sub dosify {
- my($str) = @_;
- return lc($str) if $^O eq 'VMS'; # VMS just needs casing
- if ($Is83) {
- $str = lc $str;
- $str =~ s/(\.\w+)/substr ($1,0,4)/ge;
- $str =~ s/(\w+)/substr ($1,0,8)/ge;
- }
- return $str;
-}
-
-#
-# page_sect - make an URL from the text of a L<>
-#
-sub page_sect($$) {
- my( $page, $section ) = @_;
- my( $linktext, $page83, $link); # work strings
-
- # check if we know that this is a section in this page
- if (!defined $pages{$page} && defined $sections{$page}) {
- $section = $page;
- $page = "";
- ### print STDERR "reset page='', section=$section\n";
- }
-
- $page83=dosify($page);
- $page=$page83 if (defined $pages{$page83});
- if ($page eq "") {
- $link = "#" . htmlify( $section );
- } elsif ( $page =~ /::/ ) {
- $page =~ s,::,/,g;
- # Search page cache for an entry keyed under the html page name,
- # then look to see what directory that page might be in. NOTE:
- # this will only find one page. A better solution might be to produce
- # an intermediate page that is an index to all such pages.
- my $page_name = $page ;
- $page_name =~ s,^.*/,,s ;
- if ( defined( $pages{ $page_name } ) &&
- $pages{ $page_name } =~ /([^:]*$page)\.(?:pod|pm):/
- ) {
- $page = $1 ;
- }
- else {
- # NOTE: This branch assumes that all A::B pages are located in
- # $htmlroot/A/B.html . This is often incorrect, since they are
- # often in $htmlroot/lib/A/B.html or such like. Perhaps we could
- # analyze the contents of %pages and figure out where any
- # cousins of A::B are, then assume that. So, if A::B isn't found,
- # but A::C is found in lib/A/C.pm, then A::B is assumed to be in
- # lib/A/B.pm. This is also limited, but it's an improvement.
- # Maybe a hints file so that the links point to the correct places
- # nonetheless?
-
- }
- $link = "$htmlroot/$page.html";
- $link .= "#" . htmlify( $section ) if ($section);
- } elsif (!defined $pages{$page}) {
- $link = "";
- } else {
- $section = htmlify( $section ) if $section ne "";
- ### print STDERR "...section=$section\n";
-
- # if there is a directory by the name of the page, then assume that an
- # appropriate section will exist in the subdirectory
-# if ($section ne "" && $pages{$page} =~ /([^:]*[^(\.pod|\.pm)]):/) {
- if ($section ne "" && $pages{$page} =~ /([^:]*(?<!\.pod)(?<!\.pm)):/) {
- $link = "$htmlroot/$1/$section.html";
- ### print STDERR "...link=$link\n";
-
- # since there is no directory by the name of the page, the section will
- # have to exist within a .html of the same name. thus, make sure there
- # is a .pod or .pm that might become that .html
- } else {
- $section = "#$section" if $section;
- ### print STDERR "...section=$section\n";
-
- # check if there is a .pod with the page name
- if ($pages{$page} =~ /([^:]*)\.pod:/) {
- $link = "$htmlroot/$1.html$section";
- } elsif ($pages{$page} =~ /([^:]*)\.pm:/) {
- $link = "$htmlroot/$1.html$section";
- } else {
- $link = "";
- }
- }
- }
-
- if ($link) {
- # Here, we take advantage of the knowledge that $htmlfileurl ne ''
- # implies $htmlroot eq ''. This means that the link in question
- # needs a prefix of $htmldir if it begins with '/'. The test for
- # the initial '/' is done to avoid '#'-only links, and to allow
- # for other kinds of links, like file:, ftp:, etc.
- my $url ;
- if ( $htmlfileurl ne '' ) {
- $link = "$htmldir$link" if $link =~ m{^/}s;
- $url = relativize_url( $link, $htmlfileurl );
-# print( " b: [$link,$htmlfileurl,$url]\n" );
- }
- else {
- $url = $link ;
- }
- return $url;
-
- } else {
- return undef();
- }
-}
-
-#
-# relativize_url - convert an absolute URL to one relative to a base URL.
-# Assumes both end in a filename.
-#
-sub relativize_url {
- my ($dest,$source) = @_ ;
-
- my ($dest_volume,$dest_directory,$dest_file) =
- File::Spec::Unix->splitpath( $dest ) ;
- $dest = File::Spec::Unix->catpath( $dest_volume, $dest_directory, '' ) ;
-
- my ($source_volume,$source_directory,$source_file) =
- File::Spec::Unix->splitpath( $source ) ;
- $source = File::Spec::Unix->catpath( $source_volume, $source_directory, '' ) ;
-
- my $rel_path = '' ;
- if ( $dest ne '' ) {
- $rel_path = File::Spec::Unix->abs2rel( $dest, $source ) ;
- }
-
- if ( $rel_path ne '' &&
- substr( $rel_path, -1 ) ne '/' &&
- substr( $dest_file, 0, 1 ) ne '#'
- ) {
- $rel_path .= "/$dest_file" ;
- }
- else {
- $rel_path .= "$dest_file" ;
- }
-
- return $rel_path ;
-}
-
-
-#
-# coderef - make URL from the text of a C<>
-#
-sub coderef($$){
- my( $page, $item ) = @_;
- my( $url );
-
- my $fid = fragment_id( $item );
- if( defined( $page ) ){
- # we have been given a $page...
- $page =~ s{::}{/}g;
-
- # Do we take it? Item could be a section!
- my $base = $items{$fid} || "";
- $base =~ s{[^/]*/}{};
- if( $base ne "$page.html" ){
- ### print STDERR "coderef( $page, $item ): items{$fid} = $items{$fid} = $base => discard page!\n";
- $page = undef();
- }
-
- } else {
- # no page - local items precede cached items
- if( defined( $fid ) ){
- if( exists $local_items{$fid} ){
- $page = $local_items{$fid};
- } else {
- $page = $items{$fid};
- }
- }
- }
-
- # if there was a pod file that we found earlier with an appropriate
- # =item directive, then create a link to that page.
- if( defined $page ){
- if( $page ){
- if( exists $pages{$page} and $pages{$page} =~ /([^:.]*)\.[^:]*:/){
- $page = $1 . '.html';
- }
- my $link = "$htmlroot/$page#item_$fid";
-
- # Here, we take advantage of the knowledge that $htmlfileurl
- # ne '' implies $htmlroot eq ''.
- if ( $htmlfileurl ne '' ) {
- $link = "$htmldir$link" ;
- $url = relativize_url( $link, $htmlfileurl ) ;
- } else {
- $url = $link ;
- }
- } else {
- $url = "#item_" . $fid;
- }
-
- confess "url has space: $url" if $url =~ /"[^"]*\s[^"]*"/;
- }
- return( $url, $fid );
-}
-
-
-
-#
-# Adapted from Nick Ing-Simmons' PodToHtml package.
-sub relative_url {
- my $source_file = shift ;
- my $destination_file = shift;
-
- my $source = URI::file->new_abs($source_file);
- my $uo = URI::file->new($destination_file,$source)->abs;
- return $uo->rel->as_string;
-}
-
-
-#
-# finish_list - finish off any pending HTML lists. this should be called
-# after the entire pod file has been read and converted.
-#
-sub finish_list {
- while ($listlevel > 0) {
- print HTML "</DL>\n";
- $listlevel--;
- }
-}
-
-#
-# htmlify - converts a pod section specification to a suitable section
-# specification for HTML. Note that we keep spaces and special characters
-# except ", ? (Netscape problem) and the hyphen (writer's problem...).
-#
-sub htmlify {
- my( $heading) = @_;
- $heading =~ s/(\s+)/ /g;
- $heading =~ s/\s+\Z//;
- $heading =~ s/\A\s+//;
- # The hyphen is a disgrace to the English language.
- $heading =~ s/[-"?]//g;
- $heading = lc( $heading );
- return $heading;
-}
-
-#
-# depod - convert text by eliminating all interior sequences
-# Note: can be called with copy or modify semantics
-#
-my %E2c;
-$E2c{lt} = '<';
-$E2c{gt} = '>';
-$E2c{sol} = '/';
-$E2c{verbar} = '|';
-$E2c{amp} = '&'; # in Tk's pods
-
-sub depod1($;$$);
-
-sub depod($){
- my $string;
- if( ref( $_[0] ) ){
- $string = ${$_[0]};
- ${$_[0]} = depod1( \$string );
- } else {
- $string = $_[0];
- depod1( \$string );
- }
-}
-
-sub depod1($;$$){
- my( $rstr, $func, $closing ) = @_;
- my $res = '';
- return $res unless defined $$rstr;
- if( ! defined( $func ) ){
- # skip to next begin of an interior sequence
- while( $$rstr =~ s/\A(.*?)([BCEFILSXZ])<(<+[^\S\n]+)?// ){
- # recurse into its text
- $res .= $1 . depod1( $rstr, $2, closing $3);
- }
- $res .= $$rstr;
- } elsif( $func eq 'E' ){
- # E<x> - convert to character
- $$rstr =~ s/^([^>]*)>//;
- $res .= $E2c{$1} || "";
- } elsif( $func eq 'X' ){
- # X<> - ignore
- $$rstr =~ s/^[^>]*>//;
- } elsif( $func eq 'Z' ){
- # Z<> - empty
- $$rstr =~ s/^>//;
- } else {
- # all others: either recurse into new function or
- # terminate at closing angle bracket
- my $term = pattern $closing;
- while( $$rstr =~ s/\A(.*?)(([BCEFILSXZ])<(<+[^\S\n]+)?|$term)// ){
- $res .= $1;
- last unless $3;
- $res .= depod1( $rstr, $3, closing $4 );
- }
- ## If we're here and $2 ne '>': undelimited interior sequence.
- ## Ignored, as this is called without proper indication of where we are.
- ## Rely on process_text to produce diagnostics.
- }
- return $res;
-}
-
-#
-# fragment_id - construct a fragment identifier from:
-# a) =item text
-# b) contents of C<...>
-#
-my @hc;
-sub fragment_id {
- my $text = shift();
- $text =~ s/\s+\Z//s;
- if( $text ){
- # a method or function?
- return $1 if $text =~ /(\w+)\s*\(/;
- return $1 if $text =~ /->\s*(\w+)\s*\(?/;
-
- # a variable name?
- return $1 if $text =~ /^([$@%*]\S+)/;
-
- # some pattern matching operator?
- return $1 if $text =~ m|^(\w+/).*/\w*$|;
-
- # fancy stuff... like "do { }"
- return $1 if $text =~ m|^(\w+)\s*{.*}$|;
-
- # honour the perlfunc manpage: func [PAR[,[ ]PAR]...]
- # and some funnies with ... Module ...
- return $1 if $text =~ m{^([a-z\d]+)(\s+[A-Z\d,/& ]+)?$};
- return $1 if $text =~ m{^([a-z\d]+)\s+Module(\s+[A-Z\d,/& ]+)?$};
-
- # text? normalize!
- $text =~ s/\s+/_/sg;
- $text =~ s{(\W)}{
- defined( $hc[ord($1)] ) ? $hc[ord($1)]
- : ( $hc[ord($1)] = sprintf( "%%%02X", ord($1) ) ) }gxe;
- $text = substr( $text, 0, 50 );
- } else {
- return undef();
- }
-}
-
-#
-# make_URL_href - generate HTML href from URL
-# Special treatment for CGI queries.
-#
-sub make_URL_href($){
- my( $url ) = @_;
- if( $url !~
- s{^(http:[-\w/#~:.+=&%@!]+)(\?.*)$}{<A HREF="$1$2">$1</A>}i ){
- $url = "<A HREF=\"$url\">$url</A>";
- }
- return $url;
-}
-
-1;
diff --git a/contrib/perl5/lib/Pod/InputObjects.pm b/contrib/perl5/lib/Pod/InputObjects.pm
deleted file mode 100644
index 352373b..0000000
--- a/contrib/perl5/lib/Pod/InputObjects.pm
+++ /dev/null
@@ -1,933 +0,0 @@
-#############################################################################
-# Pod/InputObjects.pm -- package which defines objects for input streams
-# and paragraphs and commands when parsing POD docs.
-#
-# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::InputObjects;
-
-use vars qw($VERSION);
-$VERSION = 1.13; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-#############################################################################
-
-=head1 NAME
-
-Pod::InputObjects - objects representing POD input paragraphs, commands, etc.
-
-=head1 SYNOPSIS
-
- use Pod::InputObjects;
-
-=head1 REQUIRES
-
-perl5.004, Carp
-
-=head1 EXPORTS
-
-Nothing.
-
-=head1 DESCRIPTION
-
-This module defines some basic input objects used by B<Pod::Parser> when
-reading and parsing POD text from an input source. The following objects
-are defined:
-
-=over 4
-
-=begin __PRIVATE__
-
-=item package B<Pod::InputSource>
-
-An object corresponding to a source of POD input text. It is mostly a
-wrapper around a filehandle or C<IO::Handle>-type object (or anything
-that implements the C<getline()> method) which keeps track of some
-additional information relevant to the parsing of PODs.
-
-=end __PRIVATE__
-
-=item package B<Pod::Paragraph>
-
-An object corresponding to a paragraph of POD input text. It may be a
-plain paragraph, a verbatim paragraph, or a command paragraph (see
-L<perlpod>).
-
-=item package B<Pod::InteriorSequence>
-
-An object corresponding to an interior sequence command from the POD
-input text (see L<perlpod>).
-
-=item package B<Pod::ParseTree>
-
-An object corresponding to a tree of parsed POD text. Each "node" in
-a parse-tree (or I<ptree>) is either a text-string or a reference to
-a B<Pod::InteriorSequence> object. The nodes appear in the parse-tree
-in the order in which they were parsed from left-to-right.
-
-=back
-
-Each of these input objects are described in further detail in the
-sections which follow.
-
-=cut
-
-#############################################################################
-
-use strict;
-#use diagnostics;
-#use Carp;
-
-#############################################################################
-
-package Pod::InputSource;
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head1 B<Pod::InputSource>
-
-This object corresponds to an input source or stream of POD
-documentation. When parsing PODs, it is necessary to associate and store
-certain context information with each input source. All of this
-information is kept together with the stream itself in one of these
-C<Pod::InputSource> objects. Each such object is merely a wrapper around
-an C<IO::Handle> object of some kind (or at least something that
-implements the C<getline()> method). They have the following
-methods/attributes:
-
-=end __PRIVATE__
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head2 B<new()>
-
- my $pod_input1 = Pod::InputSource->new(-handle => $filehandle);
- my $pod_input2 = new Pod::InputSource(-handle => $filehandle,
- -name => $name);
- my $pod_input3 = new Pod::InputSource(-handle => \*STDIN);
- my $pod_input4 = Pod::InputSource->new(-handle => \*STDIN,
- -name => "(STDIN)");
-
-This is a class method that constructs a C<Pod::InputSource> object and
-returns a reference to the new input source object. It takes one or more
-keyword arguments in the form of a hash. The keyword C<-handle> is
-required and designates the corresponding input handle. The keyword
-C<-name> is optional and specifies the name associated with the input
-handle (typically a file name).
-
-=end __PRIVATE__
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
-
- ## Any remaining arguments are treated as initial values for the
- ## hash that is used to represent this object. Note that we default
- ## certain values by specifying them *before* the arguments passed.
- ## If they are in the argument list, they will override the defaults.
- my $self = { -name => '(unknown)',
- -handle => undef,
- -was_cutting => 0,
- @_ };
-
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head2 B<name()>
-
- my $filename = $pod_input->name();
- $pod_input->name($new_filename_to_use);
-
-This method gets/sets the name of the input source (usually a filename).
-If no argument is given, it returns a string containing the name of
-the input source; otherwise it sets the name of the input source to the
-contents of the given argument.
-
-=end __PRIVATE__
-
-=cut
-
-sub name {
- (@_ > 1) and $_[0]->{'-name'} = $_[1];
- return $_[0]->{'-name'};
-}
-
-## allow 'filename' as an alias for 'name'
-*filename = \&name;
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head2 B<handle()>
-
- my $handle = $pod_input->handle();
-
-Returns a reference to the handle object from which input is read (the
-one used to contructed this input source object).
-
-=end __PRIVATE__
-
-=cut
-
-sub handle {
- return $_[0]->{'-handle'};
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head2 B<was_cutting()>
-
- print "Yes.\n" if ($pod_input->was_cutting());
-
-The value of the C<cutting> state (that the B<cutting()> method would
-have returned) immediately before any input was read from this input
-stream. After all input from this stream has been read, the C<cutting>
-state is restored to this value.
-
-=end __PRIVATE__
-
-=cut
-
-sub was_cutting {
- (@_ > 1) and $_[0]->{-was_cutting} = $_[1];
- return $_[0]->{-was_cutting};
-}
-
-##---------------------------------------------------------------------------
-
-#############################################################################
-
-package Pod::Paragraph;
-
-##---------------------------------------------------------------------------
-
-=head1 B<Pod::Paragraph>
-
-An object representing a paragraph of POD input text.
-It has the following methods/attributes:
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head2 Pod::Paragraph-E<gt>B<new()>
-
- my $pod_para1 = Pod::Paragraph->new(-text => $text);
- my $pod_para2 = Pod::Paragraph->new(-name => $cmd,
- -text => $text);
- my $pod_para3 = new Pod::Paragraph(-text => $text);
- my $pod_para4 = new Pod::Paragraph(-name => $cmd,
- -text => $text);
- my $pod_para5 = Pod::Paragraph->new(-name => $cmd,
- -text => $text,
- -file => $filename,
- -line => $line_number);
-
-This is a class method that constructs a C<Pod::Paragraph> object and
-returns a reference to the new paragraph object. It may be given one or
-two keyword arguments. The C<-text> keyword indicates the corresponding
-text of the POD paragraph. The C<-name> keyword indicates the name of
-the corresponding POD command, such as C<head1> or C<item> (it should
-I<not> contain the C<=> prefix); this is needed only if the POD
-paragraph corresponds to a command paragraph. The C<-file> and C<-line>
-keywords indicate the filename and line number corresponding to the
-beginning of the paragraph
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
-
- ## Any remaining arguments are treated as initial values for the
- ## hash that is used to represent this object. Note that we default
- ## certain values by specifying them *before* the arguments passed.
- ## If they are in the argument list, they will override the defaults.
- my $self = {
- -name => undef,
- -text => (@_ == 1) ? $_[0] : undef,
- -file => '<unknown-file>',
- -line => 0,
- -prefix => '=',
- -separator => ' ',
- -ptree => [],
- @_
- };
-
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<cmd_name()>
-
- my $para_cmd = $pod_para->cmd_name();
-
-If this paragraph is a command paragraph, then this method will return
-the name of the command (I<without> any leading C<=> prefix).
-
-=cut
-
-sub cmd_name {
- (@_ > 1) and $_[0]->{'-name'} = $_[1];
- return $_[0]->{'-name'};
-}
-
-## let name() be an alias for cmd_name()
-*name = \&cmd_name;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<text()>
-
- my $para_text = $pod_para->text();
-
-This method will return the corresponding text of the paragraph.
-
-=cut
-
-sub text {
- (@_ > 1) and $_[0]->{'-text'} = $_[1];
- return $_[0]->{'-text'};
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<raw_text()>
-
- my $raw_pod_para = $pod_para->raw_text();
-
-This method will return the I<raw> text of the POD paragraph, exactly
-as it appeared in the input.
-
-=cut
-
-sub raw_text {
- return $_[0]->{'-text'} unless (defined $_[0]->{'-name'});
- return $_[0]->{'-prefix'} . $_[0]->{'-name'} .
- $_[0]->{'-separator'} . $_[0]->{'-text'};
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<cmd_prefix()>
-
- my $prefix = $pod_para->cmd_prefix();
-
-If this paragraph is a command paragraph, then this method will return
-the prefix used to denote the command (which should be the string "="
-or "==").
-
-=cut
-
-sub cmd_prefix {
- return $_[0]->{'-prefix'};
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<cmd_separator()>
-
- my $separator = $pod_para->cmd_separator();
-
-If this paragraph is a command paragraph, then this method will return
-the text used to separate the command name from the rest of the
-paragraph (if any).
-
-=cut
-
-sub cmd_separator {
- return $_[0]->{'-separator'};
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<parse_tree()>
-
- my $ptree = $pod_parser->parse_text( $pod_para->text() );
- $pod_para->parse_tree( $ptree );
- $ptree = $pod_para->parse_tree();
-
-This method will get/set the corresponding parse-tree of the paragraph's text.
-
-=cut
-
-sub parse_tree {
- (@_ > 1) and $_[0]->{'-ptree'} = $_[1];
- return $_[0]->{'-ptree'};
-}
-
-## let ptree() be an alias for parse_tree()
-*ptree = \&parse_tree;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<file_line()>
-
- my ($filename, $line_number) = $pod_para->file_line();
- my $position = $pod_para->file_line();
-
-Returns the current filename and line number for the paragraph
-object. If called in a list context, it returns a list of two
-elements: first the filename, then the line number. If called in
-a scalar context, it returns a string containing the filename, followed
-by a colon (':'), followed by the line number.
-
-=cut
-
-sub file_line {
- my @loc = ($_[0]->{'-file'} || '<unknown-file>',
- $_[0]->{'-line'} || 0);
- return (wantarray) ? @loc : join(':', @loc);
-}
-
-##---------------------------------------------------------------------------
-
-#############################################################################
-
-package Pod::InteriorSequence;
-
-##---------------------------------------------------------------------------
-
-=head1 B<Pod::InteriorSequence>
-
-An object representing a POD interior sequence command.
-It has the following methods/attributes:
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head2 Pod::InteriorSequence-E<gt>B<new()>
-
- my $pod_seq1 = Pod::InteriorSequence->new(-name => $cmd
- -ldelim => $delimiter);
- my $pod_seq2 = new Pod::InteriorSequence(-name => $cmd,
- -ldelim => $delimiter);
- my $pod_seq3 = new Pod::InteriorSequence(-name => $cmd,
- -ldelim => $delimiter,
- -file => $filename,
- -line => $line_number);
-
- my $pod_seq4 = new Pod::InteriorSequence(-name => $cmd, $ptree);
- my $pod_seq5 = new Pod::InteriorSequence($cmd, $ptree);
-
-This is a class method that constructs a C<Pod::InteriorSequence> object
-and returns a reference to the new interior sequence object. It should
-be given two keyword arguments. The C<-ldelim> keyword indicates the
-corresponding left-delimiter of the interior sequence (e.g. 'E<lt>').
-The C<-name> keyword indicates the name of the corresponding interior
-sequence command, such as C<I> or C<B> or C<C>. The C<-file> and
-C<-line> keywords indicate the filename and line number corresponding
-to the beginning of the interior sequence. If the C<$ptree> argument is
-given, it must be the last argument, and it must be either string, or
-else an array-ref suitable for passing to B<Pod::ParseTree::new> (or
-it may be a reference to an Pod::ParseTree object).
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
-
- ## See if first argument has no keyword
- if (((@_ <= 2) or (@_ % 2)) and $_[0] !~ /^-\w/) {
- ## Yup - need an implicit '-name' before first parameter
- unshift @_, '-name';
- }
-
- ## See if odd number of args
- if ((@_ % 2) != 0) {
- ## Yup - need an implicit '-ptree' before the last parameter
- splice @_, $#_, 0, '-ptree';
- }
-
- ## Any remaining arguments are treated as initial values for the
- ## hash that is used to represent this object. Note that we default
- ## certain values by specifying them *before* the arguments passed.
- ## If they are in the argument list, they will override the defaults.
- my $self = {
- -name => (@_ == 1) ? $_[0] : undef,
- -file => '<unknown-file>',
- -line => 0,
- -ldelim => '<',
- -rdelim => '>',
- @_
- };
-
- ## Initialize contents if they havent been already
- my $ptree = $self->{'-ptree'} || new Pod::ParseTree();
- if ( ref $ptree =~ /^(ARRAY)?$/ ) {
- ## We have an array-ref, or a normal scalar. Pass it as an
- ## an argument to the ptree-constructor
- $ptree = new Pod::ParseTree($1 ? [$ptree] : $ptree);
- }
- $self->{'-ptree'} = $ptree;
-
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<cmd_name()>
-
- my $seq_cmd = $pod_seq->cmd_name();
-
-The name of the interior sequence command.
-
-=cut
-
-sub cmd_name {
- (@_ > 1) and $_[0]->{'-name'} = $_[1];
- return $_[0]->{'-name'};
-}
-
-## let name() be an alias for cmd_name()
-*name = \&cmd_name;
-
-##---------------------------------------------------------------------------
-
-## Private subroutine to set the parent pointer of all the given
-## children that are interior-sequences to be $self
-
-sub _set_child2parent_links {
- my ($self, @children) = @_;
- ## Make sure any sequences know who their parent is
- for (@children) {
- next unless (length and ref and ref ne 'SCALAR');
- if (UNIVERSAL::isa($_, 'Pod::InteriorSequence') or
- UNIVERSAL::can($_, 'nested'))
- {
- $_->nested($self);
- }
- }
-}
-
-## Private subroutine to unset child->parent links
-
-sub _unset_child2parent_links {
- my $self = shift;
- $self->{'-parent_sequence'} = undef;
- my $ptree = $self->{'-ptree'};
- for (@$ptree) {
- next unless (length and ref and ref ne 'SCALAR');
- $_->_unset_child2parent_links()
- if UNIVERSAL::isa($_, 'Pod::InteriorSequence');
- }
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<prepend()>
-
- $pod_seq->prepend($text);
- $pod_seq1->prepend($pod_seq2);
-
-Prepends the given string or parse-tree or sequence object to the parse-tree
-of this interior sequence.
-
-=cut
-
-sub prepend {
- my $self = shift;
- $self->{'-ptree'}->prepend(@_);
- _set_child2parent_links($self, @_);
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<append()>
-
- $pod_seq->append($text);
- $pod_seq1->append($pod_seq2);
-
-Appends the given string or parse-tree or sequence object to the parse-tree
-of this interior sequence.
-
-=cut
-
-sub append {
- my $self = shift;
- $self->{'-ptree'}->append(@_);
- _set_child2parent_links($self, @_);
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<nested()>
-
- $outer_seq = $pod_seq->nested || print "not nested";
-
-If this interior sequence is nested inside of another interior
-sequence, then the outer/parent sequence that contains it is
-returned. Otherwise C<undef> is returned.
-
-=cut
-
-sub nested {
- my $self = shift;
- (@_ == 1) and $self->{'-parent_sequence'} = shift;
- return $self->{'-parent_sequence'} || undef;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<raw_text()>
-
- my $seq_raw_text = $pod_seq->raw_text();
-
-This method will return the I<raw> text of the POD interior sequence,
-exactly as it appeared in the input.
-
-=cut
-
-sub raw_text {
- my $self = shift;
- my $text = $self->{'-name'} . $self->{'-ldelim'};
- for ( $self->{'-ptree'}->children ) {
- $text .= (ref $_) ? $_->raw_text : $_;
- }
- $text .= $self->{'-rdelim'};
- return $text;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<left_delimiter()>
-
- my $ldelim = $pod_seq->left_delimiter();
-
-The leftmost delimiter beginning the argument text to the interior
-sequence (should be "<").
-
-=cut
-
-sub left_delimiter {
- (@_ > 1) and $_[0]->{'-ldelim'} = $_[1];
- return $_[0]->{'-ldelim'};
-}
-
-## let ldelim() be an alias for left_delimiter()
-*ldelim = \&left_delimiter;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<right_delimiter()>
-
-The rightmost delimiter beginning the argument text to the interior
-sequence (should be ">").
-
-=cut
-
-sub right_delimiter {
- (@_ > 1) and $_[0]->{'-rdelim'} = $_[1];
- return $_[0]->{'-rdelim'};
-}
-
-## let rdelim() be an alias for right_delimiter()
-*rdelim = \&right_delimiter;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<parse_tree()>
-
- my $ptree = $pod_parser->parse_text($paragraph_text);
- $pod_seq->parse_tree( $ptree );
- $ptree = $pod_seq->parse_tree();
-
-This method will get/set the corresponding parse-tree of the interior
-sequence's text.
-
-=cut
-
-sub parse_tree {
- (@_ > 1) and $_[0]->{'-ptree'} = $_[1];
- return $_[0]->{'-ptree'};
-}
-
-## let ptree() be an alias for parse_tree()
-*ptree = \&parse_tree;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<file_line()>
-
- my ($filename, $line_number) = $pod_seq->file_line();
- my $position = $pod_seq->file_line();
-
-Returns the current filename and line number for the interior sequence
-object. If called in a list context, it returns a list of two
-elements: first the filename, then the line number. If called in
-a scalar context, it returns a string containing the filename, followed
-by a colon (':'), followed by the line number.
-
-=cut
-
-sub file_line {
- my @loc = ($_[0]->{'-file'} || '<unknown-file>',
- $_[0]->{'-line'} || 0);
- return (wantarray) ? @loc : join(':', @loc);
-}
-
-##---------------------------------------------------------------------------
-
-=head2 Pod::InteriorSequence::B<DESTROY()>
-
-This method performs any necessary cleanup for the interior-sequence.
-If you override this method then it is B<imperative> that you invoke
-the parent method from within your own method, otherwise
-I<interior-sequence storage will not be reclaimed upon destruction!>
-
-=cut
-
-sub DESTROY {
- ## We need to get rid of all child->parent pointers throughout the
- ## tree so their reference counts will go to zero and they can be
- ## garbage-collected
- _unset_child2parent_links(@_);
-}
-
-##---------------------------------------------------------------------------
-
-#############################################################################
-
-package Pod::ParseTree;
-
-##---------------------------------------------------------------------------
-
-=head1 B<Pod::ParseTree>
-
-This object corresponds to a tree of parsed POD text. As POD text is
-scanned from left to right, it is parsed into an ordered list of
-text-strings and B<Pod::InteriorSequence> objects (in order of
-appearance). A B<Pod::ParseTree> object corresponds to this list of
-strings and sequences. Each interior sequence in the parse-tree may
-itself contain a parse-tree (since interior sequences may be nested).
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head2 Pod::ParseTree-E<gt>B<new()>
-
- my $ptree1 = Pod::ParseTree->new;
- my $ptree2 = new Pod::ParseTree;
- my $ptree4 = Pod::ParseTree->new($array_ref);
- my $ptree3 = new Pod::ParseTree($array_ref);
-
-This is a class method that constructs a C<Pod::Parse_tree> object and
-returns a reference to the new parse-tree. If a single-argument is given,
-it must be a reference to an array, and is used to initialize the root
-(top) of the parse tree.
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
-
- my $self = (@_ == 1 and ref $_[0]) ? $_[0] : [];
-
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $ptree-E<gt>B<top()>
-
- my $top_node = $ptree->top();
- $ptree->top( $top_node );
- $ptree->top( @children );
-
-This method gets/sets the top node of the parse-tree. If no arguments are
-given, it returns the topmost node in the tree (the root), which is also
-a B<Pod::ParseTree>. If it is given a single argument that is a reference,
-then the reference is assumed to a parse-tree and becomes the new top node.
-Otherwise, if arguments are given, they are treated as the new list of
-children for the top node.
-
-=cut
-
-sub top {
- my $self = shift;
- if (@_ > 0) {
- @{ $self } = (@_ == 1 and ref $_[0]) ? ${ @_ } : @_;
- }
- return $self;
-}
-
-## let parse_tree() & ptree() be aliases for the 'top' method
-*parse_tree = *ptree = \&top;
-
-##---------------------------------------------------------------------------
-
-=head2 $ptree-E<gt>B<children()>
-
-This method gets/sets the children of the top node in the parse-tree.
-If no arguments are given, it returns the list (array) of children
-(each of which should be either a string or a B<Pod::InteriorSequence>.
-Otherwise, if arguments are given, they are treated as the new list of
-children for the top node.
-
-=cut
-
-sub children {
- my $self = shift;
- if (@_ > 0) {
- @{ $self } = (@_ == 1 and ref $_[0]) ? ${ @_ } : @_;
- }
- return @{ $self };
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $ptree-E<gt>B<prepend()>
-
-This method prepends the given text or parse-tree to the current parse-tree.
-If the first item on the parse-tree is text and the argument is also text,
-then the text is prepended to the first item (not added as a separate string).
-Otherwise the argument is added as a new string or parse-tree I<before>
-the current one.
-
-=cut
-
-use vars qw(@ptree); ## an alias used for performance reasons
-
-sub prepend {
- my $self = shift;
- local *ptree = $self;
- for (@_) {
- next unless length;
- if (@ptree and !(ref $ptree[0]) and !(ref $_)) {
- $ptree[0] = $_ . $ptree[0];
- }
- else {
- unshift @ptree, $_;
- }
- }
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $ptree-E<gt>B<append()>
-
-This method appends the given text or parse-tree to the current parse-tree.
-If the last item on the parse-tree is text and the argument is also text,
-then the text is appended to the last item (not added as a separate string).
-Otherwise the argument is added as a new string or parse-tree I<after>
-the current one.
-
-=cut
-
-sub append {
- my $self = shift;
- local *ptree = $self;
- for (@_) {
- next unless length;
- if (@ptree and !(ref $ptree[-1]) and !(ref $_)) {
- $ptree[-1] .= $_;
- }
- else {
- push @ptree, $_;
- }
- }
-}
-
-=head2 $ptree-E<gt>B<raw_text()>
-
- my $ptree_raw_text = $ptree->raw_text();
-
-This method will return the I<raw> text of the POD parse-tree
-exactly as it appeared in the input.
-
-=cut
-
-sub raw_text {
- my $self = shift;
- my $text = "";
- for ( @$self ) {
- $text .= (ref $_) ? $_->raw_text : $_;
- }
- return $text;
-}
-
-##---------------------------------------------------------------------------
-
-## Private routines to set/unset child->parent links
-
-sub _unset_child2parent_links {
- my $self = shift;
- local *ptree = $self;
- for (@ptree) {
- next unless (length and ref and ref ne 'SCALAR');
- $_->_unset_child2parent_links()
- if UNIVERSAL::isa($_, 'Pod::InteriorSequence');
- }
-}
-
-sub _set_child2parent_links {
- ## nothing to do, Pod::ParseTrees cant have parent pointers
-}
-
-=head2 Pod::ParseTree::B<DESTROY()>
-
-This method performs any necessary cleanup for the parse-tree.
-If you override this method then it is B<imperative>
-that you invoke the parent method from within your own method,
-otherwise I<parse-tree storage will not be reclaimed upon destruction!>
-
-=cut
-
-sub DESTROY {
- ## We need to get rid of all child->parent pointers throughout the
- ## tree so their reference counts will go to zero and they can be
- ## garbage-collected
- _unset_child2parent_links(@_);
-}
-
-#############################################################################
-
-=head1 SEE ALSO
-
-See L<Pod::Parser>, L<Pod::Select>
-
-=head1 AUTHOR
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/Pod/LaTeX.pm b/contrib/perl5/lib/Pod/LaTeX.pm
deleted file mode 100644
index c909d21..0000000
--- a/contrib/perl5/lib/Pod/LaTeX.pm
+++ /dev/null
@@ -1,1591 +0,0 @@
-package Pod::LaTeX;
-
-# Copyright (C) 2000 by Tim Jenness <t.jenness@jach.hawaii.edu>
-# All Rights Reserved.
-
-=head1 NAME
-
-Pod::LaTeX - Convert Pod data to formatted Latex
-
-=head1 SYNOPSIS
-
- use Pod::LaTeX;
- my $parser = Pod::LaTeX->new ( );
-
- $parser->parse_from_filehandle;
-
- $parser->parse_from_file ('file.pod', 'file.tex');
-
-=head1 DESCRIPTION
-
-C<Pod::LaTeX> is a module to convert documentation in the Pod format
-into Latex. The L<B<pod2latex>|pod2latex> X<pod2latex> command uses
-this module for translation.
-
-C<Pod::LaTeX> is a derived class from L<Pod::Select|Pod::Select>.
-
-=cut
-
-
-use strict;
-require Pod::ParseUtils;
-use base qw/ Pod::Select /;
-
-# use Data::Dumper; # for debugging
-use Carp;
-
-use vars qw/ $VERSION %HTML_Escapes @LatexSections /;
-
-$VERSION = '0.53';
-
-# Definitions of =headN -> latex mapping
-@LatexSections = (qw/
- chapter
- section
- subsection
- subsubsection
- paragraph
- subparagraph
- /);
-
-# Standard escape sequences converted to Latex
-# Up to "yuml" these are taken from the original pod2latex
-# command written by Taro Kawagish (kawagish@imslab.co.jp)
-
-%HTML_Escapes = (
- 'amp' => '&', # ampersand
- 'lt' => '$<$', # ' left chevron, less-than
- 'gt' => '$>$', # ' right chevron, greater-than
- 'quot' => '"', # double quote
- 'sol' => '/',
- 'verbar' => '$|$',
-
- "Aacute" => "\\'{A}", # capital A, acute accent
- "aacute" => "\\'{a}", # small a, acute accent
- "Acirc" => "\\^{A}", # capital A, circumflex accent
- "acirc" => "\\^{a}", # small a, circumflex accent
- "AElig" => '\\AE', # capital AE diphthong (ligature)
- "aelig" => '\\ae', # small ae diphthong (ligature)
- "Agrave" => "\\`{A}", # capital A, grave accent
- "agrave" => "\\`{a}", # small a, grave accent
- "Aring" => '\\u{A}', # capital A, ring
- "aring" => '\\u{a}', # small a, ring
- "Atilde" => '\\~{A}', # capital A, tilde
- "atilde" => '\\~{a}', # small a, tilde
- "Auml" => '\\"{A}', # capital A, dieresis or umlaut mark
- "auml" => '\\"{a}', # small a, dieresis or umlaut mark
- "Ccedil" => '\\c{C}', # capital C, cedilla
- "ccedil" => '\\c{c}', # small c, cedilla
- "Eacute" => "\\'{E}", # capital E, acute accent
- "eacute" => "\\'{e}", # small e, acute accent
- "Ecirc" => "\\^{E}", # capital E, circumflex accent
- "ecirc" => "\\^{e}", # small e, circumflex accent
- "Egrave" => "\\`{E}", # capital E, grave accent
- "egrave" => "\\`{e}", # small e, grave accent
- "ETH" => '\\OE', # capital Eth, Icelandic
- "eth" => '\\oe', # small eth, Icelandic
- "Euml" => '\\"{E}', # capital E, dieresis or umlaut mark
- "euml" => '\\"{e}', # small e, dieresis or umlaut mark
- "Iacute" => "\\'{I}", # capital I, acute accent
- "iacute" => "\\'{i}", # small i, acute accent
- "Icirc" => "\\^{I}", # capital I, circumflex accent
- "icirc" => "\\^{i}", # small i, circumflex accent
- "Igrave" => "\\`{I}", # capital I, grave accent
- "igrave" => "\\`{i}", # small i, grave accent
- "Iuml" => '\\"{I}', # capital I, dieresis or umlaut mark
- "iuml" => '\\"{i}', # small i, dieresis or umlaut mark
- "Ntilde" => '\\~{N}', # capital N, tilde
- "ntilde" => '\\~{n}', # small n, tilde
- "Oacute" => "\\'{O}", # capital O, acute accent
- "oacute" => "\\'{o}", # small o, acute accent
- "Ocirc" => "\\^{O}", # capital O, circumflex accent
- "ocirc" => "\\^{o}", # small o, circumflex accent
- "Ograve" => "\\`{O}", # capital O, grave accent
- "ograve" => "\\`{o}", # small o, grave accent
- "Oslash" => "\\O", # capital O, slash
- "oslash" => "\\o", # small o, slash
- "Otilde" => "\\~{O}", # capital O, tilde
- "otilde" => "\\~{o}", # small o, tilde
- "Ouml" => '\\"{O}', # capital O, dieresis or umlaut mark
- "ouml" => '\\"{o}', # small o, dieresis or umlaut mark
- "szlig" => '\\ss{}', # small sharp s, German (sz ligature)
- "THORN" => '\\L', # capital THORN, Icelandic
- "thorn" => '\\l',, # small thorn, Icelandic
- "Uacute" => "\\'{U}", # capital U, acute accent
- "uacute" => "\\'{u}", # small u, acute accent
- "Ucirc" => "\\^{U}", # capital U, circumflex accent
- "ucirc" => "\\^{u}", # small u, circumflex accent
- "Ugrave" => "\\`{U}", # capital U, grave accent
- "ugrave" => "\\`{u}", # small u, grave accent
- "Uuml" => '\\"{U}', # capital U, dieresis or umlaut mark
- "uuml" => '\\"{u}', # small u, dieresis or umlaut mark
- "Yacute" => "\\'{Y}", # capital Y, acute accent
- "yacute" => "\\'{y}", # small y, acute accent
- "yuml" => '\\"{y}', # small y, dieresis or umlaut mark
-
- # Added by TimJ
-
- "iexcl" => '!`', # inverted exclamation mark
-# "cent" => ' ', # cent sign
- "pound" => '\pounds', # (UK) pound sign
-# "curren" => ' ', # currency sign
-# "yen" => ' ', # yen sign
-# "brvbar" => ' ', # broken vertical bar
- "sect" => '\S', # section sign
- "uml" => '\"{}', # diaresis
- "copy" => '\copyright', # Copyright symbol
-# "ordf" => ' ', # feminine ordinal indicator
- "laquo" => '$\ll$', # ' # left pointing double angle quotation mark
- "not" => '$\neg$', # ' # not sign
- "shy" => '-', # soft hyphen
-# "reg" => ' ', # registered trademark
- "macr" => '$^-$', # ' # macron, overline
- "deg" => '$^\circ$', # ' # degree sign
- "plusmn" => '$\pm$', # ' # plus-minus sign
- "sup2" => '$^2$', # ' # superscript 2
- "sup3" => '$^3$', # ' # superscript 3
- "acute" => "\\'{}", # acute accent
- "micro" => '$\mu$', # micro sign
- "para" => '\P', # pilcrow sign = paragraph sign
- "middot" => '$\cdot$', # middle dot = Georgian comma
- "cedil" => '\c{}', # cedilla
- "sup1" => '$^1$', # ' # superscript 1
-# "ordm" => ' ', # masculine ordinal indicator
- "raquo" => '$\gg$', # ' # right pointing double angle quotation mark
- "frac14" => '$\frac{1}{4}$', # ' # vulgar fraction one quarter
- "frac12" => '$\frac{1}{2}$', # ' # vulgar fraction one half
- "frac34" => '$\frac{3}{4}$', # ' # vulgar fraction three quarters
- "iquest" => "?'", # inverted question mark
- "times" => '$\times$', # ' # multiplication sign
- "divide" => '$\div$', # division sign
-
- # Greek letters using HTML codes
- "alpha" => '$\alpha$', # '
- "beta" => '$\beta$', # '
- "gamma" => '$\gamma$', # '
- "delta" => '$\delta$', # '
- "epsilon"=> '$\epsilon$', # '
- "zeta" => '$\zeta$', # '
- "eta" => '$\eta$', # '
- "theta" => '$\theta$', # '
- "iota" => '$\iota$', # '
- "kappa" => '$\kappa$', # '
- "lambda" => '$\lambda$', # '
- "mu" => '$\mu$', # '
- "nu" => '$\nu$', # '
- "xi" => '$\xi$', # '
- "omicron"=> '$o$', # '
- "pi" => '$\pi$', # '
- "rho" => '$\rho$', # '
- "sigma" => '$\sigma$', # '
- "tau" => '$\tau$', # '
- "upsilon"=> '$\upsilon$', # '
- "phi" => '$\phi$', # '
- "chi" => '$\chi$', # '
- "psi" => '$\psi$', # '
- "omega" => '$\omega$', # '
-
- "Alpha" => '$A$', # '
- "Beta" => '$B$', # '
- "Gamma" => '$\Gamma$', # '
- "Delta" => '$\Delta$', # '
- "Epsilon"=> '$E$', # '
- "Zeta" => '$Z$', # '
- "Eta" => '$H$', # '
- "Theta" => '$\Theta$', # '
- "Iota" => '$I$', # '
- "Kappa" => '$K$', # '
- "Lambda" => '$\Lambda$', # '
- "Mu" => '$M$', # '
- "Nu" => '$N$', # '
- "Xi" => '$\Xi$', # '
- "Omicron"=> '$O$', # '
- "Pi" => '$\Pi$', # '
- "Rho" => '$R$', # '
- "Sigma" => '$\Sigma$', # '
- "Tau" => '$T$', # '
- "Upsilon"=> '$\Upsilon$', # '
- "Phi" => '$\Phi$', # '
- "Chi" => '$X$', # '
- "Psi" => '$\Psi$', # '
- "Omega" => '$\Omega$', # '
-
-
-);
-
-
-=head1 OBJECT METHODS
-
-The following methods are provided in this module. Methods inherited
-from C<Pod::Select> are not described in the public interface.
-
-=over 4
-
-=begin __PRIVATE__
-
-=item C<initialize>
-
-Initialise the object. This method is subclassed from C<Pod::Parser>.
-The base class method is invoked. This method defines the default
-behaviour of the object unless overridden by supplying arguments to
-the constructor.
-
-Internal settings are defaulted as well as the public instance data.
-Internal hash values are accessed directly (rather than through
-a method) and start with an underscore.
-
-This method should not be invoked by the user directly.
-
-=end __PRIVATE__
-
-=cut
-
-
-
-# - An array for nested lists
-
-# Arguments have already been read by this point
-
-sub initialize {
- my $self = shift;
-
- # print Dumper($self);
-
- # Internals
- $self->{_Lists} = []; # For nested lists
- $self->{_suppress_all_para} = 0; # For =begin blocks
- $self->{_suppress_next_para} = 0; # For =for blocks
- $self->{_dont_modify_any_para}=0; # For =begin blocks
- $self->{_dont_modify_next_para}=0; # For =for blocks
- $self->{_CURRENT_HEAD1} = ''; # Name of current HEAD1 section
-
- # Options - only initialise if not already set
-
- # Cause the '=head1 NAME' field to be treated specially
- # The contents of the NAME paragraph will be converted
- # to a section title. All subsequent =head1 will be converted
- # to =head2 and down. Will not affect =head1's prior to NAME
- # Assumes: 'Module - purpose' format
- # Also creates a purpose field
- # The name is used for Labeling of the subsequent subsections
- $self->{ReplaceNAMEwithSection} = 0
- unless exists $self->{ReplaceNAMEwithSection};
- $self->{AddPreamble} = 1 # make full latex document
- unless exists $self->{AddPreamble};
- $self->{StartWithNewPage} = 0 # Start new page for pod section
- unless exists $self->{StartWithNewPage};
- $self->{TableOfContents} = 0 # Add table of contents
- unless exists $self->{TableOfContents}; # only relevent if AddPreamble=1
- $self->{AddPostamble} = 1 # Add closing latex code at end
- unless exists $self->{AddPostamble}; # effectively end{document} and index
- $self->{MakeIndex} = 1 # Add index (only relevant AddPostamble
- unless exists $self->{MakeIndex}; # and AddPreamble)
-
- $self->{UniqueLabels} = 1 # Use label unique for each pod
- unless exists $self->{UniqueLabels}; # either based on the filename
- # or supplied
-
- # Control the level of =head1. default is \section
- #
- $self->{Head1Level} = 1 # Offset in latex sections
- unless exists $self->{Head1Level}; # 0 is chapter, 2 is subsection
-
- # Control at which level numbering of sections is turned off
- # ie subsection becomes subsection*
- # The numbering is relative to the latex sectioning commands
- # and is independent of Pod heading level
- # default is to number \section but not \subsection
- $self->{LevelNoNum} = 2
- unless exists $self->{LevelNoNum};
-
- # Label to be used as prefix to all internal section names
- # If not defined will attempt to derive it from the filename
- # This can not happen when running parse_from_filehandle though
- # hence the ability to set the label externally
- # The label could then be Pod::Parser_DESCRIPTION or somesuch
-
- $self->{Label} = undef # label to be used as prefix
- unless exists $self->{Label}; # to all internal section names
-
- # These allow the caller to add arbritrary latex code to
- # start and end of document. AddPreamble and AddPostamble are ignored
- # if these are set.
- # Also MakeIndex and TableOfContents are also ignored.
- $self->{UserPreamble} = undef # User supplied start (AddPreamble =1)
- unless exists $self->{Label};
- $self->{UserPostamble} = undef # Use supplied end (AddPostamble=1)
- unless exists $self->{Label};
-
- # Run base initialize
- $self->SUPER::initialize;
-
-}
-
-=back
-
-=head2 Data Accessors
-
-The following methods are provided for accessing instance data. These
-methods should be used for accessing configuration parameters rather
-than assuming the object is a hash.
-
-Default values can be supplied by using these names as keys to a hash
-of arguments when using the C<new()> constructor.
-
-=over 4
-
-=item B<AddPreamble>
-
-Logical to control whether a C<latex> preamble is to be written.
-If true, a valid C<latex> preamble is written before the pod data is written.
-This is similar to:
-
- \documentclass{article}
- \begin{document}
-
-but will be more complicated if table of contents and indexing are required.
-Can be used to set or retrieve the current value.
-
- $add = $parser->AddPreamble();
- $parser->AddPreamble(1);
-
-If used in conjunction with C<AddPostamble> a full latex document will
-be written that could be immediately processed by C<latex>.
-
-=cut
-
-sub AddPreamble {
- my $self = shift;
- if (@_) {
- $self->{AddPreamble} = shift;
- }
- return $self->{AddPreamble};
-}
-
-=item B<AddPostamble>
-
-Logical to control whether a standard C<latex> ending is written to the output
-file after the document has been processed.
-In its simplest form this is simply:
-
- \end{document}
-
-but can be more complicated if a index is required.
-Can be used to set or retrieve the current value.
-
- $add = $parser->AddPostamble();
- $parser->AddPostamble(1);
-
-If used in conjunction with C<AddPreaamble> a full latex document will
-be written that could be immediately processed by C<latex>.
-
-=cut
-
-sub AddPostamble {
- my $self = shift;
- if (@_) {
- $self->{AddPostamble} = shift;
- }
- return $self->{AddPostamble};
-}
-
-=item B<Head1Level>
-
-The C<latex> sectioning level that should be used to correspond to
-a pod C<=head1> directive. This can be used, for example, to turn
-a C<=head1> into a C<latex> C<subsection>. This should hold a number
-corresponding to the required position in an array containing the
-following elements:
-
- [0] chapter
- [1] section
- [2] subsection
- [3] subsubsection
- [4] paragraph
- [5] subparagraph
-
-Can be used to set or retrieve the current value:
-
- $parser->Head1Level(2);
- $sect = $parser->Head1Level;
-
-Setting this number too high can result in sections that may not be reproducible
-in the expected way. For example, setting this to 4 would imply that C<=head3>
-do not have a corresponding C<latex> section (C<=head1> would correspond to
-a C<paragraph>).
-
-A check is made to ensure that the supplied value is an integer in the
-range 0 to 5.
-
-Default is for a value of 1 (i.e. a C<section>).
-
-=cut
-
-sub Head1Level {
- my $self = shift;
- if (@_) {
- my $arg = shift;
- if ($arg =~ /^\d$/ && $arg <= $#LatexSections) {
- $self->{Head1Level} = $arg;
- } else {
- carp "Head1Level supplied ($arg) must be integer in range 0 to ".$#LatexSections . "- Ignoring\n";
- }
- }
- return $self->{Head1Level};
-}
-
-=item B<Label>
-
-This is the label that is prefixed to all C<latex> label and index
-entries to make them unique. In general, pods have similarly titled
-sections (NAME, DESCRIPTION etc) and a C<latex> label will be multiply
-defined if more than one pod document is to be included in a single
-C<latex> file. To overcome this, this label is prefixed to a label
-whenever a label is required (joined with an underscore) or to an
-index entry (joined by an exclamation mark which is the normal index
-separator). For example, C<\label{text}> becomes C<\label{Label_text}>.
-
-Can be used to set or retrieve the current value:
-
- $label = $parser->Label;
- $parser->Label($label);
-
-This label is only used if C<UniqueLabels> is true.
-Its value is set automatically from the C<NAME> field
-if C<ReplaceNAMEwithSection> is true. If this is not the case
-it must be set manually before starting the parse.
-
-Default value is C<undef>.
-
-=cut
-
-sub Label {
- my $self = shift;
- if (@_) {
- $self->{Label} = shift;
- }
- return $self->{Label};
-}
-
-=item B<LevelNoNum>
-
-Control the point at which C<latex> section numbering is turned off.
-For example, this can be used to make sure that C<latex> sections
-are numbered but subsections are not.
-
-Can be used to set or retrieve the current value:
-
- $lev = $parser->LevelNoNum;
- $parser->LevelNoNum(2);
-
-The argument must be an integer between 0 and 5 and is the same as the
-number described in C<Head1Level> method description. The number has
-nothing to do with the pod heading number, only the C<latex> sectioning.
-
-Default is 2. (i.e. C<latex> subsections are written as C<subsection*>
-but sections are numbered).
-
-=cut
-
-sub LevelNoNum {
- my $self = shift;
- if (@_) {
- $self->{LevelNoNum} = shift;
- }
- return $self->{LevelNoNum};
-}
-
-=item B<MakeIndex>
-
-Controls whether C<latex> commands for creating an index are to be inserted
-into the preamble and postamble
-
- $makeindex = $parser->MakeIndex;
- $parser->MakeIndex(0);
-
-Irrelevant if both C<AddPreamble> and C<AddPostamble> are false (or equivalently,
-C<UserPreamble> and C<UserPostamble> are set).
-
-Default is for an index to be created.
-
-=cut
-
-sub MakeIndex {
- my $self = shift;
- if (@_) {
- $self->{MakeIndex} = shift;
- }
- return $self->{MakeIndex};
-}
-
-=item B<ReplaceNAMEwithSection>
-
-This controls whether the C<NAME> section in the pod is to be translated
-literally or converted to a slightly modified output where the section
-name is the pod name rather than "NAME".
-
-If true, the pod segment
-
- =head1 NAME
-
- pod::name - purpose
-
- =head1 SYNOPSIS
-
-is converted to the C<latex>
-
- \section{pod::name\label{pod_name}\index{pod::name}}
-
- Purpose
-
- \subsection*{SYNOPSIS\label{pod_name_SYNOPSIS}%
- \index{pod::name!SYNOPSIS}}
-
-(dependent on the value of C<Head1Level> and C<LevelNoNum>). Note that
-subsequent C<head1> directives translate to subsections rather than
-sections and that the labels and index now include the pod name (dependent
-on the value of C<UniqueLabels>).
-
-The C<Label> is set from the pod name regardless of any current value
-of C<Label>.
-
- $mod = $parser->ReplaceNAMEwithSection;
- $parser->ReplaceNAMEwithSection(0);
-
-Default is to translate the pod literally.
-
-=cut
-
-sub ReplaceNAMEwithSection {
- my $self = shift;
- if (@_) {
- $self->{ReplaceNAMEwithSection} = shift;
- }
- return $self->{ReplaceNAMEwithSection};
-}
-
-=item B<StartWithNewPage>
-
-If true, each pod translation will begin with a C<latex>
-C<\clearpage>.
-
- $parser->StartWithNewPage(1);
- $newpage = $parser->StartWithNewPage;
-
-Default is false.
-
-=cut
-
-sub StartWithNewPage {
- my $self = shift;
- if (@_) {
- $self->{StartWithNewPage} = shift;
- }
- return $self->{StartWithNewPage};
-}
-
-=item B<TableOfContents>
-
-If true, a table of contents will be created.
-Irrelevant if C<AddPreamble> is false or C<UserPreamble>
-is set.
-
- $toc = $parser->TableOfContents;
- $parser->TableOfContents(1);
-
-Default is false.
-
-=cut
-
-sub TableOfContents {
- my $self = shift;
- if (@_) {
- $self->{TableOfContents} = shift;
- }
- return $self->{TableOfContents};
-}
-
-=item B<UniqueLabels>
-
-If true, the translator will attempt to make sure that
-each C<latex> label or index entry will be uniquely identified
-by prefixing the contents of C<Label>. This allows
-multiple documents to be combined without clashing
-common labels such as C<DESCRIPTION> and C<SYNOPSIS>
-
- $parser->UniqueLabels(1);
- $unq = $parser->UniqueLabels;
-
-Default is true.
-
-=cut
-
-sub UniqueLabels {
- my $self = shift;
- if (@_) {
- $self->{UniqueLabels} = shift;
- }
- return $self->{UniqueLabels};
-}
-
-=item B<UserPreamble>
-
-User supplied C<latex> preamble. Added before the pod translation
-data.
-
-If set, the contents will be prepended to the output file before the translated
-data regardless of the value of C<AddPreamble>.
-C<MakeIndex> and C<TableOfContents> will also be ignored.
-
-=cut
-
-sub UserPreamble {
- my $self = shift;
- if (@_) {
- $self->{UserPreamble} = shift;
- }
- return $self->{UserPreamble};
-}
-
-=item B<UserPostamble>
-
-User supplied C<latex> postamble. Added after the pod translation
-data.
-
-If set, the contents will be prepended to the output file after the translated
-data regardless of the value of C<AddPostamble>.
-C<MakeIndex> will also be ignored.
-
-=cut
-
-sub UserPostamble {
- my $self = shift;
- if (@_) {
- $self->{UserPostamble} = shift;
- }
- return $self->{UserPostamble};
-}
-
-=begin __PRIVATE__
-
-=item B<Lists>
-
-Contains details of the currently active lists.
- The array contains C<Pod::List> objects. A new C<Pod::List>
-object is created each time a list is encountered and it is
-pushed onto this stack. When the list context ends, it
-is popped from the stack. The array will be empty if no
-lists are active.
-
-Returns array of list information in list context
-Returns array ref in scalar context
-
-=cut
-
-
-
-sub lists {
- my $self = shift;
- return @{ $self->{_Lists} } if wantarray();
- return $self->{_Lists};
-}
-
-=end __PRIVATE__
-
-=back
-
-=begin __PRIVATE__
-
-=head2 Subclassed methods
-
-The following methods override methods provided in the C<Pod::Select>
-base class. See C<Pod::Parser> and C<Pod::Select> for more information
-on what these methods require.
-
-=over 4
-
-=cut
-
-######### END ACCESSORS ###################
-
-# Opening pod
-
-=item B<begin_pod>
-
-Writes the C<latex> preamble if requested.
-
-=cut
-
-sub begin_pod {
- my $self = shift;
-
- # Get the pod identification
- # This should really come from the '=head1 NAME' paragraph
-
- my $infile = $self->input_file;
- my $class = ref($self);
- my $date = gmtime(time);
-
- # Comment message to say where this came from
- my $comment = << "__TEX_COMMENT__";
-%% Latex generated from POD in document $infile
-%% Using the perl module $class
-%% Converted on $date
-__TEX_COMMENT__
-
- # Write the preamble
- # If the caller has supplied one then we just use that
-
- my $preamble = '';
- if (defined $self->UserPreamble) {
-
- $preamble = $self->UserPreamble;
-
- # Add the description of where this came from
- $preamble .= "\n$comment";
-
-
- } elsif ($self->AddPreamble) {
- # Write our own preamble
-
- # Code to initialise index making
- # Use an array so that we can prepend comment if required
- my @makeidx = (
- '\usepackage{makeidx}',
- '\makeindex',
- );
-
- unless ($self->MakeIndex) {
- foreach (@makeidx) {
- $_ = '%% ' . $_;
- }
- }
- my $makeindex = join("\n",@makeidx) . "\n";
-
-
- # Table of contents
- my $tableofcontents = '\tableofcontents';
-
- $tableofcontents = '%% ' . $tableofcontents
- unless $self->TableOfContents;
-
- # Roll our own
- $preamble = << "__TEX_HEADER__";
-\\documentclass{article}
-
-$comment
-
-$makeindex
-
-\\begin{document}
-
-$tableofcontents
-
-__TEX_HEADER__
-
- }
-
- # Write the header (blank if none)
- $self->_output($preamble);
-
- # Start on new page if requested
- $self->_output("\\clearpage\n") if $self->StartWithNewPage;
-
-}
-
-
-=item B<end_pod>
-
-Write the closing C<latex> code.
-
-=cut
-
-sub end_pod {
- my $self = shift;
-
- # End string
- my $end = '';
-
- # Use the user version of the postamble if deinfed
- if (defined $self->UserPostamble) {
- $end = $self->UserPostamble;
-
- $self->_output($end);
-
- } elsif ($self->AddPostamble) {
-
- # Check for index
- my $makeindex = '\printindex';
-
- $makeindex = '%% '. $makeindex unless $self->MakeIndex;
-
- $end = "$makeindex\n\n\\end{document}\n";
- }
-
-
- $self->_output($end);
-
-}
-
-=item B<command>
-
-Process basic pod commands.
-
-=cut
-
-sub command {
- my $self = shift;
- my ($command, $paragraph, $line_num, $parobj) = @_;
-
- # return if we dont care
- return if $command eq 'pod';
-
- $paragraph = $self->_replace_special_chars($paragraph);
-
- # Interpolate pod sequences in paragraph
- $paragraph = $self->interpolate($paragraph, $line_num);
-
- $paragraph =~ s/\s+$//;
-
- # Now run the command
- if ($command eq 'over') {
-
- $self->begin_list($paragraph, $line_num);
-
- } elsif ($command eq 'item') {
-
- $self->add_item($paragraph, $line_num);
-
- } elsif ($command eq 'back') {
-
- $self->end_list($line_num);
-
- } elsif ($command eq 'head1') {
-
- # Store the name of the section
- $self->{_CURRENT_HEAD1} = $paragraph;
-
- # Print it
- $self->head(1, $paragraph, $parobj);
-
- } elsif ($command eq 'head2') {
-
- $self->head(2, $paragraph, $parobj);
-
- } elsif ($command eq 'head3') {
-
- $self->head(3, $paragraph, $parobj);
-
- } elsif ($command eq 'head4') {
-
- $self->head(4, $paragraph, $parobj);
-
- } elsif ($command eq 'head5') {
-
- $self->head(5, $paragraph, $parobj);
-
- } elsif ($command eq 'head6') {
-
- $self->head(6, $paragraph, $parobj);
-
- } elsif ($command eq 'begin') {
-
- # pass through if latex
- if ($paragraph =~ /^latex/i) {
- # Make sure that subsequent paragraphs are not modfied before printing
- $self->{_dont_modify_any_para} = 1;
-
- } else {
- # Suppress all subsequent paragraphs unless
- # it is explcitly intended for latex
- $self->{_suppress_all_para} = 1;
- }
-
- } elsif ($command eq 'for') {
-
- # pass through if latex
- if ($paragraph =~ /^latex/i) {
- # Make sure that next paragraph is not modfied before printing
- $self->{_dont_modify_next_para} = 1;
-
- } else {
- # Suppress the next paragraph unless it is latex
- $self->{_suppress_next_para} = 1
- }
-
- } elsif ($command eq 'end') {
-
- # Reset suppression
- $self->{_suppress_all_para} = 0;
- $self->{_dont_modify_any_para} = 0;
-
- } elsif ($command eq 'pod') {
-
- # Do nothing
-
- } else {
- carp "Command $command not recognised at line $line_num\n";
- }
-
-}
-
-=item B<verbatim>
-
-Verbatim text
-
-=cut
-
-sub verbatim {
- my $self = shift;
- my ($paragraph, $line_num, $parobj) = @_;
-
- # Expand paragraph unless in =for or =begin block
- if ($self->{_dont_modify_any_para} || $self->{_dont_modify_next_para}) {
- # Just print as is
- $self->_output($paragraph);
-
- # Reset flag if in =for
- $self->{_dont_modify_next_para} = 0;
-
- } else {
-
- return if $paragraph =~ /^\s+$/;
-
- # Clean trailing space
- $paragraph =~ s/\s+$//;
-
- # Clean tabs
- $paragraph =~ s/\t/ /g;
-
- $self->_output('\begin{verbatim}' . "\n$paragraph\n". '\end{verbatim}'."\n");
- }
-}
-
-=item B<textblock>
-
-Plain text paragraph.
-
-=cut
-
-sub textblock {
- my $self = shift;
- my ($paragraph, $line_num, $parobj) = @_;
-
- # print Dumper($self);
-
- # Expand paragraph unless in =for or =begin block
- if ($self->{_dont_modify_any_para} || $self->{_dont_modify_next_para}) {
- # Just print as is
- $self->_output($paragraph);
-
- # Reset flag if in =for
- $self->{_dont_modify_next_para} = 0;
-
- return;
- }
-
-
- # Escape latex special characters
- $paragraph = $self->_replace_special_chars($paragraph);
-
- # Interpolate interior sequences
- my $expansion = $self->interpolate($paragraph, $line_num);
- $expansion =~ s/\s+$//;
-
-
- # If we are replacing 'head1 NAME' with a section
- # we need to look in the paragraph and rewrite things
- # Need to make sure this is called only on the first paragraph
- # following 'head1 NAME' and not on subsequent paragraphs that may be
- # present.
- if ($self->{_CURRENT_HEAD1} =~ /^NAME/i && $self->ReplaceNAMEwithSection()) {
-
- # Strip white space from start and end
- $paragraph =~ s/^\s+//;
- $paragraph =~ s/\s$//;
-
- # Split the string into 2 parts
- my ($name, $purpose) = split(/\s+-\s+/, $expansion,2);
-
- # Now prevent this from triggering until a new head1 NAME is set
- $self->{_CURRENT_HEAD1} = '_NAME';
-
- # Might want to clear the Label() before doing this (CHECK)
-
- # Print the heading
- $self->head(1, $name, $parobj);
-
- # Set the labeling in case we want unique names later
- $self->Label( $self->_create_label( $name, 1 ) );
-
- # Raise the Head1Level by one so that subsequent =head1 appear
- # as subsections of the main name section unless we are already
- # at maximum [Head1Level() could check this itself - CHECK]
- $self->Head1Level( $self->Head1Level() + 1)
- unless $self->Head1Level == $#LatexSections;
-
- # Now write out the new latex paragraph
- $purpose = ucfirst($purpose);
- $self->_output("\n\n$purpose\n\n");
-
- } else {
- # Just write the output
- $self->_output("\n\n$expansion\n\n");
- }
-
-}
-
-=item B<interior_sequence>
-
-Interior sequence expansion
-
-=cut
-
-sub interior_sequence {
- my $self = shift;
-
- my ($seq_command, $seq_argument, $pod_seq) = @_;
-
- if ($seq_command eq 'B') {
- return "\\textbf{$seq_argument}";
-
- } elsif ($seq_command eq 'I') {
- return "\\textit{$seq_argument}";
-
- } elsif ($seq_command eq 'E') {
-
- # If it is simply a number
- if ($seq_argument =~ /^\d+$/) {
- return chr($seq_argument);
- # Look up escape in hash table
- } elsif (exists $HTML_Escapes{$seq_argument}) {
- return $HTML_Escapes{$seq_argument};
-
- } else {
- my ($file, $line) = $pod_seq->file_line();
- warn "Escape sequence $seq_argument not recognised at line $line of file $file\n";
- return;
- }
-
- } elsif ($seq_command eq 'Z') {
-
- # Zero width space
- return '$\!$'; # '
-
- } elsif ($seq_command eq 'C') {
- return "\\texttt{$seq_argument}";
-
- } elsif ($seq_command eq 'F') {
- return "\\emph{$seq_argument}";
-
- } elsif ($seq_command eq 'S') {
- # non breakable spaces
- my $nbsp = '$\:$'; #'
-
- $seq_argument =~ s/\s/$nbsp/g;
- return $seq_argument;
-
- } elsif ($seq_command eq 'L') {
-
- my $link = new Pod::Hyperlink($seq_argument);
-
- # undef on failure
- unless (defined $link) {
- carp $@;
- return;
- }
-
- # Handle internal links differently
- my $type = $link->type;
- my $page = $link->page;
-
- if ($type eq 'section' && $page eq '') {
- # Use internal latex reference
- my $node = $link->node;
-
- # Convert to a label
- $node = $self->_create_label($node);
-
- return "\\S\\ref{$node}";
-
- } else {
- # Use default markup for external references
- # (although Starlink would use \xlabel)
- my $markup = $link->markup;
-
- my ($file, $line) = $pod_seq->file_line();
-
- return $self->interpolate($link->markup, $line);
- }
-
-
-
- } elsif ($seq_command eq 'P') {
- # Special markup for Pod::Hyperlink
- # Replace :: with /
- my $link = $seq_argument;
- $link =~ s/::/\//g;
-
- my $ref = "\\emph{$seq_argument}";
- return $ref;
-
- } elsif ($seq_command eq 'Q') {
- # Special markup for Pod::Hyperlink
- return "\\textsf{$seq_argument}\n";
-
- } elsif ($seq_command eq 'X') {
- # Index entries
-
- # use \index command
- # I will let '!' go through for now
- # not sure how sub categories are handled in X<>
- my $index = $self->_create_index($seq_argument);
- return "\\index{$index}\n";
-
- } else {
- carp "Unknown sequence $seq_command<$seq_argument>";
- }
-
-}
-
-=back
-
-=head2 List Methods
-
-Methods used to handle lists.
-
-=over 4
-
-=item B<begin_list>
-
-Called when a new list is found (via the C<over> directive).
-Creates a new C<Pod::List> object and stores it on the
-list stack.
-
- $parser->begin_list($indent, $line_num);
-
-=cut
-
-sub begin_list {
- my $self = shift;
- my $indent = shift;
- my $line_num = shift;
-
- # Indicate that a list should be started for the next item
- # need to do this to work out the type of list
- push ( @{$self->lists}, new Pod::List(-indent => $indent,
- -start => $line_num,
- -file => $self->input_file,
- )
- );
-
-}
-
-=item B<end_list>
-
-Called when the end of a list is found (the C<back> directive).
-Pops the C<Pod::List> object off the stack of lists and writes
-the C<latex> code required to close a list.
-
- $parser->end_list($line_num);
-
-=cut
-
-sub end_list {
- my $self = shift;
- my $line_num = shift;
-
- unless (defined $self->lists->[-1]) {
- my $file = $self->input_file;
- warn "No list is active at line $line_num (file=$file). Missing =over?\n";
- return;
- }
-
- # What to write depends on list type
- my $type = $self->lists->[-1]->type;
-
- # Dont write anything if the list type is not set
- # iomplying that a list was created but no entries were
- # placed in it (eg because of a =begin/=end combination)
- $self->_output("\\end{$type}\n")
- if (defined $type && length($type) > 0);
-
- # Clear list
- pop(@{ $self->lists});
-
-}
-
-=item B<add_item>
-
-Add items to the list. The first time an item is encountered
-(determined from the state of the current C<Pod::List> object)
-the type of list is determined (ordered, unnumbered or description)
-and the relevant latex code issued.
-
- $parser->add_item($paragraph, $line_num);
-
-=cut
-
-sub add_item {
- my $self = shift;
- my $paragraph = shift;
- my $line_num = shift;
-
- unless (defined $self->lists->[-1]) {
- my $file = $self->input_file;
- warn "List has already ended by line $line_num of file $file. Missing =over?\n";
- # Replace special chars
-# $paragraph = $self->_replace_special_chars($paragraph);
- $self->_output("$paragraph\n\n");
- return;
- }
-
- # If paragraphs printing is turned off via =begin/=end or whatver
- # simply return immediately
- return if ($self->{_suppress_all_para} || $self->{_suppress_next_para});
-
- # Check to see whether we are starting a new lists
- if (scalar($self->lists->[-1]->item) == 0) {
-
- # Examine the paragraph to determine what type of list
- # we have
- $paragraph =~ s/\s+$//;
- $paragraph =~ s/^\s+//;
-
- my $type;
- if (substr($paragraph, 0,1) eq '*') {
- $type = 'itemize';
- } elsif ($paragraph =~ /^\d/) {
- $type = 'enumerate';
- } else {
- $type = 'description';
- }
- $self->lists->[-1]->type($type);
-
- $self->_output("\\begin{$type}\n");
-
- }
-
- my $type = $self->lists->[-1]->type;
-
- if ($type eq 'description') {
- # Handle long items - long items do not wrap
- if (length($paragraph) < 40) {
- # A real description list item
- $self->_output("\\item[$paragraph] \\mbox{}");
- } else {
- # The item is now simply bold text
- $self->_output(qq{\\item \\textbf{$paragraph}});
- }
-
- } else {
- # If the item was '* Something' we still need to write
- # out the something
- my $extra_info = $paragraph;
- $extra_info =~ s/^\*\s*//;
- $self->_output("\\item $extra_info");
- }
-
- # Store the item name in the object. Required so that
- # we can tell if the list is new or not
- $self->lists->[-1]->item($paragraph);
-
-}
-
-=back
-
-=head2 Methods for headings
-
-=over 4
-
-=item B<head>
-
-Print a heading of the required level.
-
- $parser->head($level, $paragraph, $parobj);
-
-The first argument is the pod heading level. The second argument
-is the contents of the heading. The 3rd argument is a Pod::Paragraph
-object so that the line number can be extracted.
-
-=cut
-
-sub head {
- my $self = shift;
- my $num = shift;
- my $paragraph = shift;
- my $parobj = shift;
-
- # If we are replace 'head1 NAME' with a section
- # we return immediately if we get it
- return
- if ($self->{_CURRENT_HEAD1} =~ /^NAME/i && $self->ReplaceNAMEwithSection());
-
- # Create a label
- my $label = $self->_create_label($paragraph);
-
- # Create an index entry
- my $index = $self->_create_index($paragraph);
-
- # Work out position in the above array taking into account
- # that =head1 is equivalent to $self->Head1Level
-
- my $level = $self->Head1Level() - 1 + $num;
-
- # Warn if heading to large
- if ($num > $#LatexSections) {
- my $line = $parobj->file_line;
- my $file = $self->input_file;
- warn "Heading level too large ($level) for LaTeX at line $line of file $file\n";
- $level = $#LatexSections;
- }
-
- # Check to see whether section should be unnumbered
- my $star = ($level >= $self->LevelNoNum ? '*' : '');
-
- # Section
- $self->_output("\\" .$LatexSections[$level] .$star ."{$paragraph\\label{".$label ."}\\index{".$index."}}");
-
-}
-
-
-=back
-
-=end __PRIVATE__
-
-=begin __PRIVATE__
-
-=head2 Internal methods
-
-Internal routines are described in this section. They do not form part of the
-public interface. All private methods start with an underscore.
-
-=over 4
-
-=item B<_output>
-
-Output text to the output filehandle. This method must be always be called
-to output parsed text.
-
- $parser->_output($text);
-
-Does not write anything if a =begin or =for is active that should be
-ignored.
-
-=cut
-
-sub _output {
- my $self = shift;
- my $text = shift;
-
- print { $self->output_handle } $text
- unless $self->{_suppress_all_para} ||
- $self->{_suppress_next_para};
-
- # Reset pargraph stuff for =for
- $self->{_suppress_next_para} = 0
- if $self->{_suppress_next_para};
-}
-
-
-=item B<_replace_special_chars>
-
-Subroutine to replace characters that are special in C<latex>
-with the escaped forms
-
- $escaped = $parser->_replace_special_chars($paragraph);
-
-Need to call this routine before interior_sequences are munged but
-not if verbatim.
-
-Special characters and the C<latex> equivalents are:
-
- } \}
- { \{
- _ \_
- $ \$
- % \%
- & \&
- \ $\backslash$
- ^ \^{}
- ~ \~{}
- | $|$
-
-=cut
-
-sub _replace_special_chars {
- my $self = shift;
- my $paragraph = shift;
-
- # Replace a \ with $\backslash$
- # This is made more complicated because the dollars will be escaped
- # by the subsequent replacement. Easiest to add \backslash
- # now and then add the dollars
- $paragraph =~ s/\\/\\backslash/g;
-
- # Must be done after escape of \ since this command adds latex escapes
- # Replace characters that can be escaped
- $paragraph =~ s/([\$\#&%_{}])/\\$1/g;
-
- # Replace ^ characters with \^{} so that $^F works okay
- $paragraph =~ s/(\^)/\\$1\{\}/g;
-
- # Replace tilde (~) with \texttt{\~{}}
- $paragraph =~ s/~/\\texttt\{\\~\{\}\}/g;
-
- # Replace | with $|$
- $paragraph =~ s'\|'$|$'g;
-
- # Now add the dollars around each \backslash
- $paragraph =~ s/(\\backslash)/\$$1\$/g;
-
- return $paragraph;
-}
-
-
-=item B<_create_label>
-
-Return a string that can be used as an internal reference
-in a C<latex> document (i.e. accepted by the C<\label> command)
-
- $label = $parser->_create_label($string)
-
-If UniqueLabels is true returns a label prefixed by Label()
-This can be suppressed with an optional second argument.
-
- $label = $parser->_create_label($string, $suppress);
-
-If a second argument is supplied (of any value including undef)
-the Label() is never prefixed. This means that this routine can
-be called to create a Label() without prefixing a previous setting.
-
-=cut
-
-sub _create_label {
- my $self = shift;
- my $paragraph = shift;
- my $suppress = (@_ ? 1 : 0 );
-
- # Remove latex commands
- $paragraph = $self->_clean_latex_commands($paragraph);
-
- # Remove non alphanumerics from the label and replace with underscores
- # want to protect '-' though so use negated character classes
- $paragraph =~ s/[^-:\w]/_/g;
-
- # Multiple underscores will look unsightly so remove repeats
- # This will also have the advantage of tidying up the end and
- # start of string
- $paragraph =~ s/_+/_/g;
-
- # If required need to make sure that the label is unique
- # since it is possible to have multiple pods in a single
- # document
- if (!$suppress && $self->UniqueLabels() && defined $self->Label) {
- $paragraph = $self->Label() .'_'. $paragraph;
- }
-
- return $paragraph;
-}
-
-
-=item B<_create_index>
-
-Similar to C<_create_label> except an index entry is created.
-If C<UniqueLabels> is true, the index entry is prefixed by
-the current C<Label> and an exclamation mark.
-
- $ind = $parser->_create_index($paragraph);
-
-An exclamation mark is used by C<makeindex> to generate
-sub-entries in an index.
-
-=cut
-
-sub _create_index {
- my $self = shift;
- my $paragraph = shift;
- my $suppress = (@_ ? 1 : 0 );
-
- # Remove latex commands
- $paragraph = $self->_clean_latex_commands($paragraph);
-
- # If required need to make sure that the index entry is unique
- # since it is possible to have multiple pods in a single
- # document
- if (!$suppress && $self->UniqueLabels() && defined $self->Label) {
- $paragraph = $self->Label() .'!'. $paragraph;
- }
-
- # Need to replace _ with space
- $paragraph =~ s/_/ /g;
-
- return $paragraph;
-
-}
-
-=item B<_clean_latex_commands>
-
-Removes latex commands from text. The latex command is assumed to be of the
-form C<\command{ text }>. "C<text>" is retained
-
- $clean = $parser->_clean_latex_commands($text);
-
-=cut
-
-sub _clean_latex_commands {
- my $self = shift;
- my $paragraph = shift;
-
- # Remove latex commands of the form \text{ }
- # and replace with the contents of the { }
- # need to make this non-greedy so that it can handle
- # "\text{a} and \text2{b}"
- # without converting it to
- # "a} and \text2{b"
- # This match will still get into trouble if \} is present
- # This is not vital since the subsequent replacement of non-alphanumeric
- # characters will tidy it up anyway
- $paragraph =~ s/\\\w+{(.*?)}/$1/g;
-
- return $paragraph
-}
-
-=back
-
-=end __PRIVATE__
-
-=head1 NOTES
-
-Compatible with C<latex2e> only. Can not be used with C<latex> v2.09
-or earlier.
-
-A subclass of C<Pod::Select> so that specific pod sections can be
-converted to C<latex> by using the C<select> method.
-
-Some HTML escapes are missing and many have not been tested.
-
-=head1 SEE ALSO
-
-L<Pod::Parser>, L<Pod::Select>, L<pod2latex>
-
-=head1 AUTHORS
-
-Tim Jenness E<lt>t.jenness@jach.hawaii.eduE<gt>
-
-=head1 COPYRIGHT
-
-Copyright (C) 2000 Tim Jenness. All Rights Reserved.
-
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=begin __PRIVATE__
-
-=head1 REVISION
-
-$Id: LaTeX.pm,v 1.6 2000/08/21 09:05:03 timj Exp $
-
-=end __PRIVATE__
-
-=cut
diff --git a/contrib/perl5/lib/Pod/Man.pm b/contrib/perl5/lib/Pod/Man.pm
deleted file mode 100644
index 3103682..0000000
--- a/contrib/perl5/lib/Pod/Man.pm
+++ /dev/null
@@ -1,1387 +0,0 @@
-# Pod::Man -- Convert POD data to formatted *roff input.
-# $Id: Man.pm,v 1.15 2001/02/10 06:50:22 eagle Exp $
-#
-# Copyright 1999, 2000, 2001 by Russ Allbery <rra@stanford.edu>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# This module is intended to be a replacement for the pod2man script
-# distributed with versions of Perl prior to 5.6, and attempts to match its
-# output except for some specific circumstances where other decisions seemed
-# to produce better output. It uses Pod::Parser and is designed to be easy
-# to subclass.
-#
-# Perl core hackers, please note that this module is also separately
-# maintained outside of the Perl core as part of the podlators. Please send
-# me any patches at the address above in addition to sending them to the
-# standard Perl mailing lists.
-
-############################################################################
-# Modules and declarations
-############################################################################
-
-package Pod::Man;
-
-require 5.004;
-
-use Carp qw(carp croak);
-use Pod::Parser ();
-
-use strict;
-use subs qw(makespace);
-use vars qw(@ISA %ESCAPES $PREAMBLE $VERSION);
-
-@ISA = qw(Pod::Parser);
-
-# Don't use the CVS revision as the version, since this module is also in
-# Perl core and too many things could munge CVS magic revision strings.
-# This number should ideally be the same as the CVS revision in podlators,
-# however.
-$VERSION = 1.15;
-
-
-############################################################################
-# Preamble and *roff output tables
-############################################################################
-
-# The following is the static preamble which starts all *roff output we
-# generate. It's completely static except for the font to use as a
-# fixed-width font, which is designed by @CFONT@, and the left and right
-# quotes to use for C<> text, designated by @LQOUTE@ and @RQUOTE@.
-# $PREAMBLE should therefore be run through s/\@CFONT\@/<font>/g before
-# output.
-$PREAMBLE = <<'----END OF PREAMBLE----';
-.de Sh \" Subsection heading
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp \" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Ip \" List item
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb \" Begin verbatim text
-.ft @CFONT@
-.nf
-.ne \\$1
-..
-.de Ve \" End verbatim text
-.ft R
-
-.fi
-..
-.\" Set up some character translations and predefined strings. \*(-- will
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
-.\" double quote, and \*(R" will give a right double quote. | will give a
-.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used
-.\" to do unbreakable dashes and therefore won't be available. \*(C` and
-.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
-.tr \(*W-|\(bv\*(Tr
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.ie n \{\
-. ds -- \(*W-
-. ds PI pi
-. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-. ds L" ""
-. ds R" ""
-. ds C` @LQUOTE@
-. ds C' @RQUOTE@
-'br\}
-.el\{\
-. ds -- \|\(em\|
-. ds PI \(*p
-. ds L" ``
-. ds R" ''
-'br\}
-.\"
-.\" If the F register is turned on, we'll generate index entries on stderr
-.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
-.\" index entries marked with X<> in POD. Of course, you'll have to process
-.\" the output yourself in some meaningful fashion.
-.if \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
-..
-. nr % 0
-. rr F
-.\}
-.\"
-.\" For nroff, turn off justification. Always turn off hyphenation; it
-.\" makes way too many mistakes in technical documents.
-.hy 0
-.if n .na
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear. Run. Save yourself. No user-serviceable parts.
-.bd B 3
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds /
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
-----END OF PREAMBLE----
-#`# for cperl-mode
-
-# This table is taken nearly verbatim from Tom Christiansen's pod2man. It
-# assumes that the standard preamble has already been printed, since that's
-# what defines all of the accent marks. Note that some of these are quoted
-# with double quotes since they contain embedded single quotes, so use \\
-# uniformly for backslash for readability.
-%ESCAPES = (
- 'amp' => '&', # ampersand
- 'lt' => '<', # left chevron, less-than
- 'gt' => '>', # right chevron, greater-than
- 'quot' => '"', # double quote
- 'sol' => '/', # solidus (forward slash)
- 'verbar' => '|', # vertical bar
-
- 'Aacute' => "A\\*'", # capital A, acute accent
- 'aacute' => "a\\*'", # small a, acute accent
- 'Acirc' => 'A\\*^', # capital A, circumflex accent
- 'acirc' => 'a\\*^', # small a, circumflex accent
- 'AElig' => '\*(AE', # capital AE diphthong (ligature)
- 'aelig' => '\*(ae', # small ae diphthong (ligature)
- 'Agrave' => "A\\*`", # capital A, grave accent
- 'agrave' => "A\\*`", # small a, grave accent
- 'Aring' => 'A\\*o', # capital A, ring
- 'aring' => 'a\\*o', # small a, ring
- 'Atilde' => 'A\\*~', # capital A, tilde
- 'atilde' => 'a\\*~', # small a, tilde
- 'Auml' => 'A\\*:', # capital A, dieresis or umlaut mark
- 'auml' => 'a\\*:', # small a, dieresis or umlaut mark
- 'Ccedil' => 'C\\*,', # capital C, cedilla
- 'ccedil' => 'c\\*,', # small c, cedilla
- 'Eacute' => "E\\*'", # capital E, acute accent
- 'eacute' => "e\\*'", # small e, acute accent
- 'Ecirc' => 'E\\*^', # capital E, circumflex accent
- 'ecirc' => 'e\\*^', # small e, circumflex accent
- 'Egrave' => 'E\\*`', # capital E, grave accent
- 'egrave' => 'e\\*`', # small e, grave accent
- 'ETH' => '\\*(D-', # capital Eth, Icelandic
- 'eth' => '\\*(d-', # small eth, Icelandic
- 'Euml' => 'E\\*:', # capital E, dieresis or umlaut mark
- 'euml' => 'e\\*:', # small e, dieresis or umlaut mark
- 'Iacute' => "I\\*'", # capital I, acute accent
- 'iacute' => "i\\*'", # small i, acute accent
- 'Icirc' => 'I\\*^', # capital I, circumflex accent
- 'icirc' => 'i\\*^', # small i, circumflex accent
- 'Igrave' => 'I\\*`', # capital I, grave accent
- 'igrave' => 'i\\*`', # small i, grave accent
- 'Iuml' => 'I\\*:', # capital I, dieresis or umlaut mark
- 'iuml' => 'i\\*:', # small i, dieresis or umlaut mark
- 'Ntilde' => 'N\*~', # capital N, tilde
- 'ntilde' => 'n\*~', # small n, tilde
- 'Oacute' => "O\\*'", # capital O, acute accent
- 'oacute' => "o\\*'", # small o, acute accent
- 'Ocirc' => 'O\\*^', # capital O, circumflex accent
- 'ocirc' => 'o\\*^', # small o, circumflex accent
- 'Ograve' => 'O\\*`', # capital O, grave accent
- 'ograve' => 'o\\*`', # small o, grave accent
- 'Oslash' => 'O\\*/', # capital O, slash
- 'oslash' => 'o\\*/', # small o, slash
- 'Otilde' => 'O\\*~', # capital O, tilde
- 'otilde' => 'o\\*~', # small o, tilde
- 'Ouml' => 'O\\*:', # capital O, dieresis or umlaut mark
- 'ouml' => 'o\\*:', # small o, dieresis or umlaut mark
- 'szlig' => '\*8', # small sharp s, German (sz ligature)
- 'THORN' => '\\*(Th', # capital THORN, Icelandic
- 'thorn' => '\\*(th', # small thorn, Icelandic
- 'Uacute' => "U\\*'", # capital U, acute accent
- 'uacute' => "u\\*'", # small u, acute accent
- 'Ucirc' => 'U\\*^', # capital U, circumflex accent
- 'ucirc' => 'u\\*^', # small u, circumflex accent
- 'Ugrave' => 'U\\*`', # capital U, grave accent
- 'ugrave' => 'u\\*`', # small u, grave accent
- 'Uuml' => 'U\\*:', # capital U, dieresis or umlaut mark
- 'uuml' => 'u\\*:', # small u, dieresis or umlaut mark
- 'Yacute' => "Y\\*'", # capital Y, acute accent
- 'yacute' => "y\\*'", # small y, acute accent
- 'yuml' => 'y\\*:', # small y, dieresis or umlaut mark
-);
-
-
-############################################################################
-# Static helper functions
-############################################################################
-
-# Protect leading quotes and periods against interpretation as commands.
-# Also protect anything starting with a backslash, since it could expand
-# or hide something that *roff would interpret as a command. This is
-# overkill, but it's much simpler than trying to parse *roff here.
-sub protect {
- local $_ = shift;
- s/^([.\'\\])/\\&$1/mg;
- $_;
-}
-
-# Translate a font string into an escape.
-sub toescape { (length ($_[0]) > 1 ? '\f(' : '\f') . $_[0] }
-
-
-############################################################################
-# Initialization
-############################################################################
-
-# Initialize the object. Here, we also process any additional options
-# passed to the constructor or set up defaults if none were given. center
-# is the centered title, release is the version number, and date is the date
-# for the documentation. Note that we can't know what file name we're
-# processing due to the architecture of Pod::Parser, so that *has* to either
-# be passed to the constructor or set separately with Pod::Man::name().
-sub initialize {
- my $self = shift;
-
- # Figure out the fixed-width font. If user-supplied, make sure that
- # they are the right length.
- for (qw/fixed fixedbold fixeditalic fixedbolditalic/) {
- if (defined $$self{$_}) {
- if (length ($$self{$_}) < 1 || length ($$self{$_}) > 2) {
- croak qq(roff font should be 1 or 2 chars,)
- . qq( not "$$self{$_}");
- }
- } else {
- $$self{$_} = '';
- }
- }
-
- # Set the default fonts. We can't be sure what fixed bold-italic is
- # going to be called, so default to just bold.
- $$self{fixed} ||= 'CW';
- $$self{fixedbold} ||= 'CB';
- $$self{fixeditalic} ||= 'CI';
- $$self{fixedbolditalic} ||= 'CB';
-
- # Set up a table of font escapes. First number is fixed-width, second
- # is bold, third is italic.
- $$self{FONTS} = { '000' => '\fR', '001' => '\fI',
- '010' => '\fB', '011' => '\f(BI',
- '100' => toescape ($$self{fixed}),
- '101' => toescape ($$self{fixeditalic}),
- '110' => toescape ($$self{fixedbold}),
- '111' => toescape ($$self{fixedbolditalic})};
-
- # Extra stuff for page titles.
- $$self{center} = 'User Contributed Perl Documentation'
- unless defined $$self{center};
- $$self{indent} = 4 unless defined $$self{indent};
-
- # We used to try first to get the version number from a local binary,
- # but we shouldn't need that any more. Get the version from the running
- # Perl. Work a little magic to handle subversions correctly under both
- # the pre-5.6 and the post-5.6 version numbering schemes.
- if (!defined $$self{release}) {
- my @version = ($] =~ /^(\d+)\.(\d{3})(\d{0,3})$/);
- $version[2] ||= 0;
- $version[2] *= 10 ** (3 - length $version[2]);
- for (@version) { $_ += 0 }
- $$self{release} = 'perl v' . join ('.', @version);
- }
-
- # Double quotes in things that will be quoted.
- for (qw/center date release/) {
- $$self{$_} =~ s/\"/\"\"/g if $$self{$_};
- }
-
- # Figure out what quotes we'll be using for C<> text.
- $$self{quotes} ||= '"';
- if ($$self{quotes} eq 'none') {
- $$self{LQUOTE} = $$self{RQUOTE} = '';
- } elsif (length ($$self{quotes}) == 1) {
- $$self{LQUOTE} = $$self{RQUOTE} = $$self{quotes};
- } elsif ($$self{quotes} =~ /^(.)(.)$/
- || $$self{quotes} =~ /^(..)(..)$/) {
- $$self{LQUOTE} = $1;
- $$self{RQUOTE} = $2;
- } else {
- croak qq(Invalid quote specification "$$self{quotes}");
- }
-
- # Double the first quote; note that this should not be s///g as two
- # double quotes is represented in *roff as three double quotes, not
- # four. Weird, I know.
- $$self{LQUOTE} =~ s/\"/\"\"/;
- $$self{RQUOTE} =~ s/\"/\"\"/;
-
- $$self{INDENT} = 0; # Current indentation level.
- $$self{INDENTS} = []; # Stack of indentations.
- $$self{INDEX} = []; # Index keys waiting to be printed.
- $$self{ITEMS} = 0; # The number of consecutive =items.
-
- $self->SUPER::initialize;
-}
-
-# For each document we process, output the preamble first.
-sub begin_pod {
- my $self = shift;
-
- # Try to figure out the name and section from the file name.
- my $section = $$self{section} || 1;
- my $name = $$self{name};
- if (!defined $name) {
- $name = $self->input_file;
- $section = 3 if (!$$self{section} && $name =~ /\.pm\z/i);
- $name =~ s/\.p(od|[lm])\z//i;
- if ($section =~ /^1/) {
- require File::Basename;
- $name = uc File::Basename::basename ($name);
- } else {
- # Lose everything up to the first of
- # */lib/*perl* standard or site_perl module
- # */*perl*/lib from -D prefix=/opt/perl
- # */*perl*/ random module hierarchy
- # which works. Should be fixed to use File::Spec. Also handle
- # a leading lib/ since that's what ExtUtils::MakeMaker creates.
- for ($name) {
- s%//+%/%g;
- if ( s%^.*?/lib/[^/]*perl[^/]*/%%si
- or s%^.*?/[^/]*perl[^/]*/(?:lib/)?%%si) {
- s%^site(_perl)?/%%s; # site and site_perl
- s%^(.*-$^O|$^O-.*)/%%so; # arch
- s%^\d+\.\d+%%s; # version
- }
- s%^lib/%%;
- s%/%::%g;
- }
- }
- }
-
- # If $name contains spaces, quote it; this mostly comes up in the case
- # of input from stdin.
- $name = '"' . $name . '"' if ($name =~ /\s/);
-
- # Modification date header. Try to use the modification time of our
- # input.
- if (!defined $$self{date}) {
- my $time = (stat $self->input_file)[9] || time;
- my ($day, $month, $year) = (localtime $time)[3,4,5];
- $month++;
- $year += 1900;
- $$self{date} = sprintf ('%4d-%02d-%02d', $year, $month, $day);
- }
-
- # Now, print out the preamble and the title.
- local $_ = $PREAMBLE;
- s/\@CFONT\@/$$self{fixed}/;
- s/\@LQUOTE\@/$$self{LQUOTE}/;
- s/\@RQUOTE\@/$$self{RQUOTE}/;
- chomp $_;
- print { $self->output_handle } <<"----END OF HEADER----";
-.\\" Automatically generated by Pod::Man version $VERSION
-.\\" @{[ scalar localtime ]}
-.\\"
-.\\" Standard preamble:
-.\\" ======================================================================
-$_
-.\\" ======================================================================
-.\\"
-.IX Title "$name $section"
-.TH $name $section "$$self{release}" "$$self{date}" "$$self{center}"
-.UC
-----END OF HEADER----
-#"# for cperl-mode
-
- # Initialize a few per-file variables.
- $$self{INDENT} = 0;
- $$self{NEEDSPACE} = 0;
-}
-
-
-############################################################################
-# Core overrides
-############################################################################
-
-# Called for each command paragraph. Gets the command, the associated
-# paragraph, the line number, and a Pod::Paragraph object. Just dispatches
-# the command to a method named the same as the command. =cut is handled
-# internally by Pod::Parser.
-sub command {
- my $self = shift;
- my $command = shift;
- return if $command eq 'pod';
- return if ($$self{EXCLUDE} && $command ne 'end');
- if ($self->can ('cmd_' . $command)) {
- $command = 'cmd_' . $command;
- $self->$command (@_);
- } else {
- my ($text, $line, $paragraph) = @_;
- my $file;
- ($file, $line) = $paragraph->file_line;
- $text =~ s/\n+\z//;
- $text = " $text" if ($text =~ /^\S/);
- warn qq($file:$line: Unknown command paragraph "=$command$text"\n);
- return;
- }
-}
-
-# Called for a verbatim paragraph. Gets the paragraph, the line number, and
-# a Pod::Paragraph object. Rofficate backslashes, untabify, put a
-# zero-width character at the beginning of each line to protect against
-# commands, and wrap in .Vb/.Ve.
-sub verbatim {
- my $self = shift;
- return if $$self{EXCLUDE};
- local $_ = shift;
- return if /^\s+$/;
- s/\s+$/\n/;
- my $lines = tr/\n/\n/;
- 1 while s/^(.*?)(\t+)/$1 . ' ' x (length ($2) * 8 - length ($1) % 8)/me;
- s/\\/\\e/g;
- s/^(\s*\S)/'\&' . $1/gme;
- $self->makespace;
- $self->output (".Vb $lines\n$_.Ve\n");
- $$self{NEEDSPACE} = 0;
-}
-
-# Called for a regular text block. Gets the paragraph, the line number, and
-# a Pod::Paragraph object. Perform interpolation and output the results.
-sub textblock {
- my $self = shift;
- return if $$self{EXCLUDE};
- $self->output ($_[0]), return if $$self{VERBATIM};
-
- # Perform a little magic to collapse multiple L<> references. We'll
- # just rewrite the whole thing into actual text at this part, bypassing
- # the whole internal sequence parsing thing.
- my $text = shift;
- $text =~ s{
- (L< # A link of the form L</something>.
- /
- (
- [:\w]+ # The item has to be a simple word...
- (\(\))? # ...or simple function.
- )
- >
- (
- ,?\s+(and\s+)? # Allow lots of them, conjuncted.
- L<
- /
- ( [:\w]+ ( \(\) )? )
- >
- )+
- )
- } {
- local $_ = $1;
- s{ L< / ( [^>]+ ) > } {$1}xg;
- my @items = split /(?:,?\s+(?:and\s+)?)/;
- my $string = 'the ';
- my $i;
- for ($i = 0; $i < @items; $i++) {
- $string .= $items[$i];
- $string .= ', ' if @items > 2 && $i != $#items;
- $string .= ' ' if @items == 2 && $i == 2;
- $string .= 'and ' if ($i == $#items - 1);
- }
- $string .= ' entries elsewhere in this document';
- $string;
- }gex;
-
- # Parse the tree and output it. collapse knows about references to
- # scalars as well as scalars and does the right thing with them.
- $text = $self->parse ($text, @_);
- $text =~ s/\n\s*$/\n/;
- $self->makespace;
- $self->output (protect $self->textmapfonts ($text));
- $self->outindex;
- $$self{NEEDSPACE} = 1;
-}
-
-# Called for an interior sequence. Takes a Pod::InteriorSequence object and
-# returns a reference to a scalar. This scalar is the final formatted text.
-# It's returned as a reference so that other interior sequences above us
-# know that the text has already been processed.
-sub sequence {
- my ($self, $seq) = @_;
- my $command = $seq->cmd_name;
-
- # Zero-width characters.
- if ($command eq 'Z') {
- # Workaround to generate a blessable reference, needed by 5.005.
- my $tmp = '\&';
- return bless \ "$tmp", 'Pod::Man::String';
- }
-
- # C<>, L<>, X<>, and E<> don't apply guesswork to their contents. C<>
- # needs some additional special handling.
- my $literal = ($command =~ /^[CELX]$/);
- $literal++ if $command eq 'C';
- local $_ = $self->collapse ($seq->parse_tree, $literal);
-
- # Handle E<> escapes.
- if ($command eq 'E') {
- if (/^\d+$/) {
- return bless \ chr ($_), 'Pod::Man::String';
- } elsif (exists $ESCAPES{$_}) {
- return bless \ "$ESCAPES{$_}", 'Pod::Man::String';
- } else {
- carp "Unknown escape E<$1>";
- return bless \ "E<$_>", 'Pod::Man::String';
- }
- }
-
- # For all the other sequences, empty content produces no output.
- return '' if $_ eq '';
-
- # Handle formatting sequences.
- if ($command eq 'B') {
- return bless \ ('\f(BS' . $_ . '\f(BE'), 'Pod::Man::String';
- } elsif ($command eq 'F') {
- return bless \ ('\f(IS' . $_ . '\f(IE'), 'Pod::Man::String';
- } elsif ($command eq 'I') {
- return bless \ ('\f(IS' . $_ . '\f(IE'), 'Pod::Man::String';
- } elsif ($command eq 'C') {
- return bless \ ('\f(FS\*(C`' . $_ . "\\*(C'\\f(FE"),
- 'Pod::Man::String';
- }
-
- # Handle links.
- if ($command eq 'L') {
- # A bug in lvalue subs in 5.6 requires the temporary variable.
- my $tmp = $self->buildlink ($_);
- return bless \ "$tmp", 'Pod::Man::String';
- }
-
- # Whitespace protection replaces whitespace with "\ ".
- if ($command eq 'S') {
- s/\s+/\\ /g;
- return bless \ "$_", 'Pod::Man::String';
- }
-
- # Add an index entry to the list of ones waiting to be output.
- if ($command eq 'X') { push (@{ $$self{INDEX} }, $_); return '' }
-
- # Anything else is unknown.
- carp "Unknown sequence $command<$_>";
-}
-
-
-############################################################################
-# Command paragraphs
-############################################################################
-
-# All command paragraphs take the paragraph and the line number.
-
-# First level heading. We can't output .IX in the NAME section due to a bug
-# in some versions of catman, so don't output a .IX for that section. .SH
-# already uses small caps, so remove any E<> sequences that would cause
-# them.
-sub cmd_head1 {
- my $self = shift;
- local $_ = $self->parse (@_);
- s/\s+$//;
- s/\\s-?\d//g;
- s/\s*\n\s*/ /g;
- if ($$self{ITEMS} > 1) {
- $$self{ITEMS} = 0;
- $self->output (".PD\n");
- }
- $self->output ($self->switchquotes ('.SH', $self->mapfonts ($_)));
- $self->outindex (($_ eq 'NAME') ? () : ('Header', $_));
- $$self{NEEDSPACE} = 0;
-}
-
-# Second level heading.
-sub cmd_head2 {
- my $self = shift;
- local $_ = $self->parse (@_);
- s/\s+$//;
- s/\s*\n\s*/ /g;
- if ($$self{ITEMS} > 1) {
- $$self{ITEMS} = 0;
- $self->output (".PD\n");
- }
- $self->output ($self->switchquotes ('.Sh', $self->mapfonts ($_)));
- $self->outindex ('Subsection', $_);
- $$self{NEEDSPACE} = 0;
-}
-
-# Third level heading.
-sub cmd_head3 {
- my $self = shift;
- local $_ = $self->parse (@_);
- s/\s+$//;
- s/\s*\n\s*/ /g;
- if ($$self{ITEMS} > 1) {
- $$self{ITEMS} = 0;
- $self->output (".PD\n");
- }
- $self->makespace;
- $self->output ($self->switchquotes ('.I', $self->mapfonts ($_)));
- $self->outindex ('Subsection', $_);
- $$self{NEEDSPACE} = 1;
-}
-
-# Fourth level heading.
-sub cmd_head4 {
- my $self = shift;
- local $_ = $self->parse (@_);
- s/\s+$//;
- s/\s*\n\s*/ /g;
- if ($$self{ITEMS} > 1) {
- $$self{ITEMS} = 0;
- $self->output (".PD\n");
- }
- $self->makespace;
- $self->output ($self->textmapfonts ($_) . "\n");
- $self->outindex ('Subsection', $_);
- $$self{NEEDSPACE} = 1;
-}
-
-# Start a list. For indents after the first, wrap the outside indent in .RS
-# so that hanging paragraph tags will be correct.
-sub cmd_over {
- my $self = shift;
- local $_ = shift;
- unless (/^[-+]?\d+\s+$/) { $_ = $$self{indent} }
- if (@{ $$self{INDENTS} } > 0) {
- $self->output (".RS $$self{INDENT}\n");
- }
- push (@{ $$self{INDENTS} }, $$self{INDENT});
- $$self{INDENT} = ($_ + 0);
-}
-
-# End a list. If we've closed an embedded indent, we've mangled the hanging
-# paragraph indent, so temporarily replace it with .RS and set WEIRDINDENT.
-# We'll close that .RS at the next =back or =item.
-sub cmd_back {
- my $self = shift;
- $$self{INDENT} = pop @{ $$self{INDENTS} };
- unless (defined $$self{INDENT}) {
- carp "Unmatched =back";
- $$self{INDENT} = 0;
- }
- if ($$self{WEIRDINDENT}) {
- $self->output (".RE\n");
- $$self{WEIRDINDENT} = 0;
- }
- if (@{ $$self{INDENTS} } > 0) {
- $self->output (".RE\n");
- $self->output (".RS $$self{INDENT}\n");
- $$self{WEIRDINDENT} = 1;
- }
- $$self{NEEDSPACE} = 1;
-}
-
-# An individual list item. Emit an index entry for anything that's
-# interesting, but don't emit index entries for things like bullets and
-# numbers. rofficate bullets too while we're at it (so for nice output, use
-# * for your lists rather than o or . or - or some other thing). Newlines
-# in an item title are turned into spaces since *roff can't handle them
-# embedded.
-sub cmd_item {
- my $self = shift;
- local $_ = $self->parse (@_);
- s/\s+$//;
- s/\s*\n\s*/ /g;
- my $index;
- if (/\w/ && !/^\w[.\)]\s*$/) {
- $index = $_;
- $index =~ s/^\s*[-*+o.]?(?:\s+|\Z)//;
- }
- s/^\*(\s|\Z)/\\\(bu$1/;
- if ($$self{WEIRDINDENT}) {
- $self->output (".RE\n");
- $$self{WEIRDINDENT} = 0;
- }
- $_ = $self->textmapfonts ($_);
- $self->output (".PD 0\n") if ($$self{ITEMS} == 1);
- $self->output ($self->switchquotes ('.Ip', $_, $$self{INDENT}));
- $self->outindex ($index ? ('Item', $index) : ());
- $$self{NEEDSPACE} = 0;
- $$self{ITEMS}++;
-}
-
-# Begin a block for a particular translator. Setting VERBATIM triggers
-# special handling in textblock().
-sub cmd_begin {
- my $self = shift;
- local $_ = shift;
- my ($kind) = /^(\S+)/ or return;
- if ($kind eq 'man' || $kind eq 'roff') {
- $$self{VERBATIM} = 1;
- } else {
- $$self{EXCLUDE} = 1;
- }
-}
-
-# End a block for a particular translator. We assume that all =begin/=end
-# pairs are properly closed.
-sub cmd_end {
- my $self = shift;
- $$self{EXCLUDE} = 0;
- $$self{VERBATIM} = 0;
-}
-
-# One paragraph for a particular translator. Ignore it unless it's intended
-# for man or roff, in which case we output it verbatim.
-sub cmd_for {
- my $self = shift;
- local $_ = shift;
- return unless s/^(?:man|roff)\b[ \t]*\n?//;
- $self->output ($_);
-}
-
-
-############################################################################
-# Link handling
-############################################################################
-
-# Handle links. We can't actually make real hyperlinks, so this is all to
-# figure out what text and formatting we print out.
-sub buildlink {
- my $self = shift;
- local $_ = shift;
-
- # Smash whitespace in case we were split across multiple lines.
- s/\s+/ /g;
-
- # If we were given any explicit text, just output it.
- if (m{ ^ ([^|]+) \| }x) { return $1 }
-
- # Okay, leading and trailing whitespace isn't important.
- s/^\s+//;
- s/\s+$//;
-
- # If the argument looks like a URL, return it verbatim. This only
- # handles URLs that use the server syntax.
- if (m%^[a-z]+://\S+$%) { return $_ }
-
- # Default to using the whole content of the link entry as a section
- # name. Note that L<manpage/> forces a manpage interpretation, as does
- # something looking like L<manpage(section)>. Do the same thing to
- # L<manpage(section)> as we would to manpage(section) without the L<>;
- # see guesswork(). If we've added italics, don't add the "manpage"
- # text; markup is sufficient.
- my ($manpage, $section) = ('', $_);
- if (/^"\s*(.*?)\s*"$/) {
- $section = '"' . $1 . '"';
- } elsif (m{ ^ [-:.\w]+ (?: \( \S+ \) )? $ }x) {
- ($manpage, $section) = ($_, '');
- $manpage =~ s/^([^\(]+)\(/'\f(IS' . $1 . '\f(IE\|('/e;
- } elsif (m%/%) {
- ($manpage, $section) = split (/\s*\/\s*/, $_, 2);
- if ($manpage =~ /^[-:.\w]+(?:\(\S+\))?$/) {
- $manpage =~ s/^([^\(]+)\(/'\f(IS' . $1 . '\f(IE\|'/e;
- }
- $section =~ s/^\"\s*//;
- $section =~ s/\s*\"$//;
- }
- if ($manpage && $manpage !~ /\\f\(IS/) {
- $manpage = "the $manpage manpage";
- }
-
- # Now build the actual output text.
- my $text = '';
- if (!length ($section) && !length ($manpage)) {
- carp "Invalid link $_";
- } elsif (!length ($section)) {
- $text = $manpage;
- } elsif ($section =~ /^[:\w]+(?:\(\))?/) {
- $text .= 'the ' . $section . ' entry';
- $text .= (length $manpage) ? " in $manpage"
- : " elsewhere in this document";
- } else {
- if ($section !~ /^".*"$/) { $section = '"' . $section . '"' }
- $text .= 'the section on ' . $section;
- $text .= " in $manpage" if length $manpage;
- }
- $text;
-}
-
-
-############################################################################
-# Escaping and fontification
-############################################################################
-
-# At this point, we'll have embedded font codes of the form \f(<font>[SE]
-# where <font> is one of B, I, or F. Turn those into the right font start
-# or end codes. The old pod2man didn't get B<someI<thing> else> right;
-# after I<> it switched back to normal text rather than bold. We take care
-# of this by using variables as a combined pointer to our current font
-# sequence, and set each to the number of current nestings of start tags for
-# that font. Use them as a vector to look up what font sequence to use.
-#
-# \fP changes to the previous font, but only one previous font is kept. We
-# don't know what the outside level font is; normally it's R, but if we're
-# inside a heading it could be something else. So arrange things so that
-# the outside font is always the "previous" font and end with \fP instead of
-# \fR. Idea from Zack Weinberg.
-sub mapfonts {
- my $self = shift;
- local $_ = shift;
-
- my ($fixed, $bold, $italic) = (0, 0, 0);
- my %magic = (F => \$fixed, B => \$bold, I => \$italic);
- my $last = '\fR';
- s { \\f\((.)(.) } {
- my $sequence = '';
- my $f;
- if ($last ne '\fR') { $sequence = '\fP' }
- ${ $magic{$1} } += ($2 eq 'S') ? 1 : -1;
- $f = $$self{FONTS}{($fixed && 1) . ($bold && 1) . ($italic && 1)};
- if ($f eq $last) {
- '';
- } else {
- if ($f ne '\fR') { $sequence .= $f }
- $last = $f;
- $sequence;
- }
- }gxe;
- $_;
-}
-
-# Unfortunately, there is a bug in Solaris 2.6 nroff (not present in GNU
-# groff) where the sequence \fB\fP\f(CW\fP leaves the font set to B rather
-# than R, presumably because \f(CW doesn't actually do a font change. To
-# work around this, use a separate textmapfonts for text blocks where the
-# default font is always R and only use the smart mapfonts for headings.
-sub textmapfonts {
- my $self = shift;
- local $_ = shift;
-
- my ($fixed, $bold, $italic) = (0, 0, 0);
- my %magic = (F => \$fixed, B => \$bold, I => \$italic);
- s { \\f\((.)(.) } {
- ${ $magic{$1} } += ($2 eq 'S') ? 1 : -1;
- $$self{FONTS}{($fixed && 1) . ($bold && 1) . ($italic && 1)};
- }gxe;
- $_;
-}
-
-
-############################################################################
-# *roff-specific parsing
-############################################################################
-
-# Called instead of parse_text, calls parse_text with the right flags.
-sub parse {
- my $self = shift;
- $self->parse_text ({ -expand_seq => 'sequence',
- -expand_ptree => 'collapse' }, @_);
-}
-
-# Takes a parse tree and a flag saying whether or not to treat it as literal
-# text (not call guesswork on it), and returns the concatenation of all of
-# the text strings in that parse tree. If the literal flag isn't true,
-# guesswork() will be called on all plain scalars in the parse tree.
-# Otherwise, just escape backslashes in the normal case. If collapse is
-# being called on a C<> sequence, literal is set to 2, and we do some
-# additional cleanup. Assumes that everything in the parse tree is either a
-# scalar or a reference to a scalar.
-sub collapse {
- my ($self, $ptree, $literal) = @_;
- if ($literal) {
- return join ('', map {
- if (ref $_) {
- $$_;
- } else {
- s/\\/\\e/g;
- s/-/\\-/g if $literal > 1;
- s/__/_\\|_/g if $literal > 1;
- $_;
- }
- } $ptree->children);
- } else {
- return join ('', map {
- ref ($_) ? $$_ : $self->guesswork ($_)
- } $ptree->children);
- }
-}
-
-# Takes a text block to perform guesswork on; this is guaranteed not to
-# contain any interior sequences. Returns the text block with remapping
-# done.
-sub guesswork {
- my $self = shift;
- local $_ = shift;
-
- # rofficate backslashes.
- s/\\/\\e/g;
-
- # Ensure double underbars have a tiny space between them.
- s/__/_\\|_/g;
-
- # Make all caps a little smaller. Be careful here, since we don't want
- # to make @ARGV into small caps, nor do we want to fix the MIME in
- # MIME-Version, since it looks weird with the full-height V.
- s{
- ( ^ | [\s\(\"\'\`\[\{<>] )
- ( [A-Z] [A-Z] [/A-Z+:\d_\$&-]* )
- (?: (?= [\s>\}\]\)\'\".?!,;:] | -- ) | $ )
- } { $1 . '\s-1' . $2 . '\s0' }egx;
-
- # Turn PI into a pretty pi.
- s{ (?: \\s-1 | \b ) PI (?: \\s0 | \b ) } {\\*\(PI}gx;
-
- # Italize functions in the form func().
- s{
- \b
- (
- [:\w]+ (?:\\s-1)? \(\)
- )
- } { '\f(IS' . $1 . '\f(IE' }egx;
-
- # func(n) is a reference to a manual page. Make it \fIfunc\fR\|(n).
- s{
- \b
- (\w[-:.\w]+ (?:\\s-1)?)
- (
- \( [^\)] \)
- )
- } { '\f(IS' . $1 . '\f(IE\|' . $2 }egx;
-
- # Convert simple Perl variable references to a fixed-width font.
- s{
- ( \s+ )
- ( [\$\@%] [\w:]+ )
- (?! \( )
- } { $1 . '\f(FS' . $2 . '\f(FE'}egx;
-
- # Translate -- into a real em dash if it's used like one and fix up
- # dashes, but keep hyphens hyphens.
- s{ (\G|^|.) (-+) (\b|.) } {
- my ($pre, $dash, $post) = ($1, $2, $3);
- if (length ($dash) == 1) {
- ($pre =~ /[a-zA-Z]/) ? "$pre-$post" : "$pre\\-$post";
- } elsif (length ($dash) == 2
- && ((!$pre && !$post)
- || ($pre =~ /\w/ && !$post)
- || ($pre eq ' ' && $post eq ' ')
- || ($pre eq '=' && $post ne '=')
- || ($pre ne '=' && $post eq '='))) {
- "$pre\\*(--$post";
- } else {
- $pre . ('\-' x length $dash) . $post;
- }
- }egxs;
-
- # Fix up double quotes.
- s{ \" ([^\"]+) \" } { '\*(L"' . $1 . '\*(R"' }egx;
-
- # Make C++ into \*(C+, which is a squinched version.
- s{ \b C\+\+ } {\\*\(C+}gx;
-
- # All done.
- $_;
-}
-
-
-############################################################################
-# Output formatting
-############################################################################
-
-# Make vertical whitespace.
-sub makespace {
- my $self = shift;
- $self->output (".PD\n") if ($$self{ITEMS} > 1);
- $$self{ITEMS} = 0;
- $self->output ($$self{INDENT} > 0 ? ".Sp\n" : ".PP\n")
- if $$self{NEEDSPACE};
-}
-
-# Output any pending index entries, and optionally an index entry given as
-# an argument. Support multiple index entries in X<> separated by slashes,
-# and strip special escapes from index entries.
-sub outindex {
- my ($self, $section, $index) = @_;
- my @entries = map { split m%\s*/\s*% } @{ $$self{INDEX} };
- return unless ($section || @entries);
- $$self{INDEX} = [];
- my $output;
- if (@entries) {
- my $output = '.IX Xref "'
- . join (' ', map { s/\"/\"\"/; $_ } @entries)
- . '"' . "\n";
- }
- if ($section) {
- $index =~ s/\"/\"\"/;
- $index =~ s/\\-/-/g;
- $index =~ s/\\(?:s-?\d|.\(..|.)//g;
- $output .= ".IX $section " . '"' . $index . '"' . "\n";
- }
- $self->output ($output);
-}
-
-# Output text to the output device.
-sub output { print { $_[0]->output_handle } $_[1] }
-
-# Given a command and a single argument that may or may not contain double
-# quotes, handle double-quote formatting for it. If there are no double
-# quotes, just return the command followed by the argument in double quotes.
-# If there are double quotes, use an if statement to test for nroff, and for
-# nroff output the command followed by the argument in double quotes with
-# embedded double quotes doubled. For other formatters, remap paired double
-# quotes to LQUOTE and RQUOTE.
-sub switchquotes {
- my $self = shift;
- my $command = shift;
- local $_ = shift;
- my $extra = shift;
- s/\\\*\([LR]\"/\"/g;
-
- # We also have to deal with \*C` and \*C', which are used to add the
- # quotes around C<> text, since they may expand to " and if they do this
- # confuses the .SH macros and the like no end. Expand them ourselves.
- # If $extra is set, we're dealing with =item, which in most nroff macro
- # sets requires an extra level of quoting of double quotes.
- my $c_is_quote = ($$self{LQUOTE} =~ /\"/) || ($$self{RQUOTE} =~ /\"/);
- if (/\"/ || ($c_is_quote && /\\\*\(C[\'\`]/)) {
- s/\"/\"\"/g;
- my $troff = $_;
- $troff =~ s/\"\"([^\"]*)\"\"/\`\`$1\'\'/g;
- s/\\\*\(C\`/$$self{LQUOTE}/g;
- s/\\\*\(C\'/$$self{RQUOTE}/g;
- $troff =~ s/\\\*\(C[\'\`]//g;
- s/\"/\"\"/g if $extra;
- $troff =~ s/\"/\"\"/g if $extra;
- $_ = qq("$_") . ($extra ? " $extra" : '');
- $troff = qq("$troff") . ($extra ? " $extra" : '');
- return ".if n $command $_\n.el $command $troff\n";
- } else {
- $_ = qq("$_") . ($extra ? " $extra" : '');
- return "$command $_\n";
- }
-}
-
-__END__
-
-.\" These are some extra bits of roff that I don't want to lose track of
-.\" but that have been removed from the preamble to make it a bit shorter
-.\" since they're not currently being used. They're accents and special
-.\" characters we don't currently have escapes for.
-.if n \{\
-. ds ? ?
-. ds ! !
-. ds q
-.\}
-.if t \{\
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
-.\}
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds oe oe
-. ds Oe OE
-.\}
-
-############################################################################
-# Documentation
-############################################################################
-
-=head1 NAME
-
-Pod::Man - Convert POD data to formatted *roff input
-
-=head1 SYNOPSIS
-
- use Pod::Man;
- my $parser = Pod::Man->new (release => $VERSION, section => 8);
-
- # Read POD from STDIN and write to STDOUT.
- $parser->parse_from_filehandle;
-
- # Read POD from file.pod and write to file.1.
- $parser->parse_from_file ('file.pod', 'file.1');
-
-=head1 DESCRIPTION
-
-Pod::Man is a module to convert documentation in the POD format (the
-preferred language for documenting Perl) into *roff input using the man
-macro set. The resulting *roff code is suitable for display on a terminal
-using nroff(1), normally via man(1), or printing using troff(1). It is
-conventionally invoked using the driver script B<pod2man>, but it can also
-be used directly.
-
-As a derived class from Pod::Parser, Pod::Man supports the same methods and
-interfaces. See L<Pod::Parser> for all the details; briefly, one creates a
-new parser with C<Pod::Man-E<gt>new()> and then calls either
-parse_from_filehandle() or parse_from_file().
-
-new() can take options, in the form of key/value pairs that control the
-behavior of the parser. See below for details.
-
-If no options are given, Pod::Man uses the name of the input file with any
-trailing C<.pod>, C<.pm>, or C<.pl> stripped as the man page title, to
-section 1 unless the file ended in C<.pm> in which case it defaults to
-section 3, to a centered title of "User Contributed Perl Documentation", to
-a centered footer of the Perl version it is run with, and to a left-hand
-footer of the modification date of its input (or the current date if given
-STDIN for input).
-
-Pod::Man assumes that your *roff formatters have a fixed-width font named
-CW. If yours is called something else (like CR), use the C<fixed> option to
-specify it. This generally only matters for troff output for printing.
-Similarly, you can set the fonts used for bold, italic, and bold italic
-fixed-width output.
-
-Besides the obvious pod conversions, Pod::Man also takes care of formatting
-func(), func(n), and simple variable references like $foo or @bar so you
-don't have to use code escapes for them; complex expressions like
-C<$fred{'stuff'}> will still need to be escaped, though. It also translates
-dashes that aren't used as hyphens into en dashes, makes long dashes--like
-this--into proper em dashes, fixes "paired quotes," makes C++ and PI look
-right, puts a little space between double underbars, makes ALLCAPS a teeny
-bit smaller in troff(1), and escapes stuff that *roff treats as special so
-that you don't have to.
-
-The recognized options to new() are as follows. All options take a single
-argument.
-
-=over 4
-
-=item center
-
-Sets the centered page header to use instead of "User Contributed Perl
-Documentation".
-
-=item date
-
-Sets the left-hand footer. By default, the modification date of the input
-file will be used, or the current date if stat() can't find that file (the
-case if the input is from STDIN), and the date will be formatted as
-YYYY-MM-DD.
-
-=item fixed
-
-The fixed-width font to use for vertabim text and code. Defaults to CW.
-Some systems may want CR instead. Only matters for troff(1) output.
-
-=item fixedbold
-
-Bold version of the fixed-width font. Defaults to CB. Only matters for
-troff(1) output.
-
-=item fixeditalic
-
-Italic version of the fixed-width font (actually, something of a misnomer,
-since most fixed-width fonts only have an oblique version, not an italic
-version). Defaults to CI. Only matters for troff(1) output.
-
-=item fixedbolditalic
-
-Bold italic (probably actually oblique) version of the fixed-width font.
-Pod::Man doesn't assume you have this, and defaults to CB. Some systems
-(such as Solaris) have this font available as CX. Only matters for troff(1)
-output.
-
-=item quotes
-
-Sets the quote marks used to surround CE<lt>> text. If the value is a
-single character, it is used as both the left and right quote; if it is two
-characters, the first character is used as the left quote and the second as
-the right quoted; and if it is four characters, the first two are used as
-the left quote and the second two as the right quote.
-
-This may also be set to the special value C<none>, in which case no quote
-marks are added around CE<lt>> text (but the font is still changed for troff
-output).
-
-=item release
-
-Set the centered footer. By default, this is the version of Perl you run
-Pod::Man under. Note that some system an macro sets assume that the
-centered footer will be a modification date and will prepend something like
-"Last modified: "; if this is the case, you may want to set C<release> to
-the last modified date and C<date> to the version number.
-
-=item section
-
-Set the section for the C<.TH> macro. The standard section numbering
-convention is to use 1 for user commands, 2 for system calls, 3 for
-functions, 4 for devices, 5 for file formats, 6 for games, 7 for
-miscellaneous information, and 8 for administrator commands. There is a lot
-of variation here, however; some systems (like Solaris) use 4 for file
-formats, 5 for miscellaneous information, and 7 for devices. Still others
-use 1m instead of 8, or some mix of both. About the only section numbers
-that are reliably consistent are 1, 2, and 3.
-
-By default, section 1 will be used unless the file ends in .pm in which case
-section 3 will be selected.
-
-=back
-
-The standard Pod::Parser method parse_from_filehandle() takes up to two
-arguments, the first being the file handle to read POD from and the second
-being the file handle to write the formatted output to. The first defaults
-to STDIN if not given, and the second defaults to STDOUT. The method
-parse_from_file() is almost identical, except that its two arguments are the
-input and output disk files instead. See L<Pod::Parser> for the specific
-details.
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item roff font should be 1 or 2 chars, not "%s"
-
-(F) You specified a *roff font (using C<fixed>, C<fixedbold>, etc.) that
-wasn't either one or two characters. Pod::Man doesn't support *roff fonts
-longer than two characters, although some *roff extensions do (the canonical
-versions of nroff(1) and troff(1) don't either).
-
-=item Invalid link %s
-
-(W) The POD source contained a C<LE<lt>E<gt>> sequence that Pod::Man was
-unable to parse. You should never see this error message; it probably
-indicates a bug in Pod::Man.
-
-=item Invalid quote specification "%s"
-
-(F) The quote specification given (the quotes option to the constructor) was
-invalid. A quote specification must be one, two, or four characters long.
-
-=item %s:%d: Unknown command paragraph "%s".
-
-(W) The POD source contained a non-standard command paragraph (something of
-the form C<=command args>) that Pod::Man didn't know about. It was ignored.
-
-=item Unknown escape EE<lt>%sE<gt>
-
-(W) The POD source contained an C<EE<lt>E<gt>> escape that Pod::Man didn't
-know about. C<EE<lt>%sE<gt>> was printed verbatim in the output.
-
-=item Unknown sequence %s
-
-(W) The POD source contained a non-standard interior sequence (something of
-the form C<XE<lt>E<gt>>) that Pod::Man didn't know about. It was ignored.
-
-=item %s: Unknown command paragraph "%s" on line %d.
-
-(W) The POD source contained a non-standard command paragraph (something of
-the form C<=command args>) that Pod::Man didn't know about. It was ignored.
-
-=item Unmatched =back
-
-(W) Pod::Man encountered a C<=back> command that didn't correspond to an
-C<=over> command.
-
-=back
-
-=head1 BUGS
-
-The lint-like features and strict POD format checking done by B<pod2man> are
-not yet implemented and should be, along with the corresponding C<lax>
-option.
-
-The NAME section should be recognized specially and index entries emitted
-for everything in that section. This would have to be deferred until the
-next section, since extraneous things in NAME tends to confuse various man
-page processors.
-
-The handling of hyphens, en dashes, and em dashes is somewhat fragile, and
-one may get the wrong one under some circumstances. This should only matter
-for troff(1) output.
-
-When and whether to use small caps is somewhat tricky, and Pod::Man doesn't
-necessarily get it right.
-
-Pod::Man doesn't handle font names longer than two characters. Neither do
-most troff(1) implementations, but GNU troff does as an extension. It would
-be nice to support as an option for those who want to use it.
-
-The preamble added to each output file is rather verbose, and most of it is
-only necessary in the presence of EE<lt>E<gt> escapes for non-ASCII
-characters. It would ideally be nice if all of those definitions were only
-output if needed, perhaps on the fly as the characters are used.
-
-Some of the automagic applied to file names assumes Unix directory
-separators.
-
-Pod::Man is excessively slow.
-
-=head1 SEE ALSO
-
-L<Pod::Parser|Pod::Parser>, perlpod(1), pod2man(1), nroff(1), troff(1),
-man(1), man(7)
-
-Ossanna, Joseph F., and Brian W. Kernighan. "Troff User's Manual,"
-Computing Science Technical Report No. 54, AT&T Bell Laboratories. This is
-the best documentation of standard nroff(1) and troff(1). At the time of
-this writing, it's available at http://www.cs.bell-labs.com/cm/cs/cstr.html.
-
-The man page documenting the man macro set may be man(5) instead of man(7)
-on your system. Also, please see pod2man(1) for extensive documentation on
-writing manual pages if you've not done it before and aren't familiar with
-the conventions.
-
-=head1 AUTHOR
-
-Russ Allbery E<lt>rra@stanford.eduE<gt>, based I<very> heavily on the
-original B<pod2man> by Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>.
-
-=cut
diff --git a/contrib/perl5/lib/Pod/ParseUtils.pm b/contrib/perl5/lib/Pod/ParseUtils.pm
deleted file mode 100644
index 7d994c7..0000000
--- a/contrib/perl5/lib/Pod/ParseUtils.pm
+++ /dev/null
@@ -1,851 +0,0 @@
-#############################################################################
-# Pod/ParseUtils.pm -- helpers for POD parsing and conversion
-#
-# Copyright (C) 1999-2000 by Marek Rouchal. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::ParseUtils;
-
-use vars qw($VERSION);
-$VERSION = 0.22; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-=head1 NAME
-
-Pod::ParseUtils - helpers for POD parsing and conversion
-
-=head1 SYNOPSIS
-
- use Pod::ParseUtils;
-
- my $list = new Pod::List;
- my $link = Pod::Hyperlink->new('Pod::Parser');
-
-=head1 DESCRIPTION
-
-B<Pod::ParseUtils> contains a few object-oriented helper packages for
-POD parsing and processing (i.e. in POD formatters and translators).
-
-=cut
-
-#-----------------------------------------------------------------------------
-# Pod::List
-#
-# class to hold POD list info (=over, =item, =back)
-#-----------------------------------------------------------------------------
-
-package Pod::List;
-
-use Carp;
-
-=head2 Pod::List
-
-B<Pod::List> can be used to hold information about POD lists
-(written as =over ... =item ... =back) for further processing.
-The following methods are available:
-
-=over 4
-
-=item Pod::List-E<gt>new()
-
-Create a new list object. Properties may be specified through a hash
-reference like this:
-
- my $list = Pod::List->new({ -start => $., -indent => 4 });
-
-See the individual methods/properties for details.
-
-=cut
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my %params = @_;
- my $self = {%params};
- bless $self, $class;
- $self->initialize();
- return $self;
-}
-
-sub initialize {
- my $self = shift;
- $self->{-file} ||= 'unknown';
- $self->{-start} ||= 'unknown';
- $self->{-indent} ||= 4; # perlpod: "should be the default"
- $self->{_items} = [];
- $self->{-type} ||= '';
-}
-
-=item $list-E<gt>file()
-
-Without argument, retrieves the file name the list is in. This must
-have been set before by either specifying B<-file> in the B<new()>
-method or by calling the B<file()> method with a scalar argument.
-
-=cut
-
-# The POD file name the list appears in
-sub file {
- return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file};
-}
-
-=item $list-E<gt>start()
-
-Without argument, retrieves the line number where the list started.
-This must have been set before by either specifying B<-start> in the
-B<new()> method or by calling the B<start()> method with a scalar
-argument.
-
-=cut
-
-# The line in the file the node appears
-sub start {
- return (@_ > 1) ? ($_[0]->{-start} = $_[1]) : $_[0]->{-start};
-}
-
-=item $list-E<gt>indent()
-
-Without argument, retrieves the indent level of the list as specified
-in C<=over n>. This must have been set before by either specifying
-B<-indent> in the B<new()> method or by calling the B<indent()> method
-with a scalar argument.
-
-=cut
-
-# indent level
-sub indent {
- return (@_ > 1) ? ($_[0]->{-indent} = $_[1]) : $_[0]->{-indent};
-}
-
-=item $list-E<gt>type()
-
-Without argument, retrieves the list type, which can be an arbitrary value,
-e.g. C<OL>, C<UL>, ... when thinking the HTML way.
-This must have been set before by either specifying
-B<-type> in the B<new()> method or by calling the B<type()> method
-with a scalar argument.
-
-=cut
-
-# The type of the list (UL, OL, ...)
-sub type {
- return (@_ > 1) ? ($_[0]->{-type} = $_[1]) : $_[0]->{-type};
-}
-
-=item $list-E<gt>rx()
-
-Without argument, retrieves a regular expression for simplifying the
-individual item strings once the list type has been determined. Usage:
-E.g. when converting to HTML, one might strip the leading number in
-an ordered list as C<E<lt>OLE<gt>> already prints numbers itself.
-This must have been set before by either specifying
-B<-rx> in the B<new()> method or by calling the B<rx()> method
-with a scalar argument.
-
-=cut
-
-# The regular expression to simplify the items
-sub rx {
- return (@_ > 1) ? ($_[0]->{-rx} = $_[1]) : $_[0]->{-rx};
-}
-
-=item $list-E<gt>item()
-
-Without argument, retrieves the array of the items in this list.
-The items may be represented by any scalar.
-If an argument has been given, it is pushed on the list of items.
-
-=cut
-
-# The individual =items of this list
-sub item {
- my ($self,$item) = @_;
- if(defined $item) {
- push(@{$self->{_items}}, $item);
- return $item;
- }
- else {
- return @{$self->{_items}};
- }
-}
-
-=item $list-E<gt>parent()
-
-Without argument, retrieves information about the parent holding this
-list, which is represented as an arbitrary scalar.
-This must have been set before by either specifying
-B<-parent> in the B<new()> method or by calling the B<parent()> method
-with a scalar argument.
-
-=cut
-
-# possibility for parsers/translators to store information about the
-# lists's parent object
-sub parent {
- return (@_ > 1) ? ($_[0]->{-parent} = $_[1]) : $_[0]->{-parent};
-}
-
-=item $list-E<gt>tag()
-
-Without argument, retrieves information about the list tag, which can be
-any scalar.
-This must have been set before by either specifying
-B<-tag> in the B<new()> method or by calling the B<tag()> method
-with a scalar argument.
-
-=back
-
-=cut
-
-# possibility for parsers/translators to store information about the
-# list's object
-sub tag {
- return (@_ > 1) ? ($_[0]->{-tag} = $_[1]) : $_[0]->{-tag};
-}
-
-#-----------------------------------------------------------------------------
-# Pod::Hyperlink
-#
-# class to manipulate POD hyperlinks (L<>)
-#-----------------------------------------------------------------------------
-
-package Pod::Hyperlink;
-
-=head2 Pod::Hyperlink
-
-B<Pod::Hyperlink> is a class for manipulation of POD hyperlinks. Usage:
-
- my $link = Pod::Hyperlink->new('alternative text|page/"section in page"');
-
-The B<Pod::Hyperlink> class is mainly designed to parse the contents of the
-C<LE<lt>...E<gt>> sequence, providing a simple interface for accessing the
-different parts of a POD hyperlink for further processing. It can also be
-used to construct hyperlinks.
-
-=over 4
-
-=item Pod::Hyperlink-E<gt>new()
-
-The B<new()> method can either be passed a set of key/value pairs or a single
-scalar value, namely the contents of a C<LE<lt>...E<gt>> sequence. An object
-of the class C<Pod::Hyperlink> is returned. The value C<undef> indicates a
-failure, the error message is stored in C<$@>.
-
-=cut
-
-use Carp;
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my $self = +{};
- bless $self, $class;
- $self->initialize();
- if(defined $_[0]) {
- if(ref($_[0])) {
- # called with a list of parameters
- %$self = %{$_[0]};
- $self->_construct_text();
- }
- else {
- # called with L<> contents
- return undef unless($self->parse($_[0]));
- }
- }
- return $self;
-}
-
-sub initialize {
- my $self = shift;
- $self->{-line} ||= 'undef';
- $self->{-file} ||= 'undef';
- $self->{-page} ||= '';
- $self->{-node} ||= '';
- $self->{-alttext} ||= '';
- $self->{-type} ||= 'undef';
- $self->{_warnings} = [];
-}
-
-=item $link-E<gt>parse($string)
-
-This method can be used to (re)parse a (new) hyperlink, i.e. the contents
-of a C<LE<lt>...E<gt>> sequence. The result is stored in the current object.
-Warnings are stored in the B<warnings> property.
-E.g. sections like C<LE<lt>open(2)E<gt>> are deprected, as they do not point
-to Perl documents. C<LE<lt>DBI::foo(3p)E<gt>> is wrong as well, the manpage
-section can simply be dropped.
-
-=cut
-
-sub parse {
- my $self = shift;
- local($_) = $_[0];
- # syntax check the link and extract destination
- my ($alttext,$page,$node,$type) = (undef,'','','');
-
- $self->{_warnings} = [];
-
- # collapse newlines with whitespace
- s/\s*\n+\s*/ /g;
-
- # strip leading/trailing whitespace
- if(s/^[\s\n]+//) {
- $self->warning("ignoring leading whitespace in link");
- }
- if(s/[\s\n]+$//) {
- $self->warning("ignoring trailing whitespace in link");
- }
- unless(length($_)) {
- _invalid_link("empty link");
- return undef;
- }
-
- ## Check for different possibilities. This is tedious and error-prone
- # we match all possibilities (alttext, page, section/item)
- #warn "DEBUG: link=$_\n";
-
- # only page
- # problem: a lot of people use (), or (1) or the like to indicate
- # man page sections. But this collides with L<func()> that is supposed
- # to point to an internal funtion...
- my $page_rx = '[\w.]+(?:::[\w.]+)*(?:[(](?:\d\w*|)[)]|)';
- # page name only
- if(m!^($page_rx)$!o) {
- $page = $1;
- $type = 'page';
- }
- # alttext, page and "section"
- elsif(m!^(.*?)\s*[|]\s*($page_rx)\s*/\s*"(.+)"$!o) {
- ($alttext, $page, $node) = ($1, $2, $3);
- $type = 'section';
- }
- # alttext and page
- elsif(m!^(.*?)\s*[|]\s*($page_rx)$!o) {
- ($alttext, $page) = ($1, $2);
- $type = 'page';
- }
- # alttext and "section"
- elsif(m!^(.*?)\s*[|]\s*(?:/\s*|)"(.+)"$!) {
- ($alttext, $node) = ($1,$2);
- $type = 'section';
- }
- # page and "section"
- elsif(m!^($page_rx)\s*/\s*"(.+)"$!o) {
- ($page, $node) = ($1, $2);
- $type = 'section';
- }
- # page and item
- elsif(m!^($page_rx)\s*/\s*(.+)$!o) {
- ($page, $node) = ($1, $2);
- $type = 'item';
- }
- # only "section"
- elsif(m!^/?"(.+)"$!) {
- $node = $1;
- $type = 'section';
- }
- # only item
- elsif(m!^\s*/(.+)$!) {
- $node = $1;
- $type = 'item';
- }
- # non-standard: Hyperlink
- elsif(m!^((?:http|ftp|mailto|news):.+)$!i) {
- $node = $1;
- $type = 'hyperlink';
- }
- # alttext, page and item
- elsif(m!^(.*?)\s*[|]\s*($page_rx)\s*/\s*(.+)$!o) {
- ($alttext, $page, $node) = ($1, $2, $3);
- $type = 'item';
- }
- # alttext and item
- elsif(m!^(.*?)\s*[|]\s*/(.+)$!) {
- ($alttext, $node) = ($1,$2);
- }
- # nonstandard: alttext and hyperlink
- elsif(m!^(.*?)\s*[|]\s*((?:http|ftp|mailto|news):.+)$!) {
- ($alttext, $node) = ($1,$2);
- $type = 'hyperlink';
- }
- # must be an item or a "malformed" section (without "")
- else {
- $node = $_;
- $type = 'item';
- }
- # collapse whitespace in nodes
- $node =~ s/\s+/ /gs;
-
- # empty alternative text expands to node name
- if(defined $alttext) {
- if(!length($alttext)) {
- $alttext = $node | $page;
- }
- }
- else {
- $alttext = '';
- }
-
- if($page =~ /[(]\w*[)]$/) {
- $self->warning("(section) in '$page' deprecated");
- }
- if($node =~ m:[|/]:) {
- $self->warning("node '$node' contains non-escaped | or /");
- }
- if($alttext =~ m:[|/]:) {
- $self->warning("alternative text '$node' contains non-escaped | or /");
- }
- $self->{-page} = $page;
- $self->{-node} = $node;
- $self->{-alttext} = $alttext;
- #warn "DEBUG: page=$page section=$section item=$item alttext=$alttext\n";
- $self->{-type} = $type;
- $self->_construct_text();
- 1;
-}
-
-sub _construct_text {
- my $self = shift;
- my $alttext = $self->alttext();
- my $type = $self->type();
- my $section = $self->node();
- my $page = $self->page();
- my $page_ext = '';
- $page =~ s/([(]\w*[)])$// && ($page_ext = $1);
- if($alttext) {
- $self->{_text} = $alttext;
- }
- elsif($type eq 'hyperlink') {
- $self->{_text} = $section;
- }
- else {
- $self->{_text} = (!$section ? '' :
- $type eq 'item' ? "the $section entry" :
- "the section on $section" ) .
- ($page ? ($section ? ' in ':'') . "the $page$page_ext manpage" :
- ' elsewhere in this document');
- }
- # for being marked up later
- # use the non-standard markers P<> and Q<>, so that the resulting
- # text can be parsed by the translators. It's their job to put
- # the correct hypertext around the linktext
- if($alttext) {
- $self->{_markup} = "Q<$alttext>";
- }
- elsif($type eq 'hyperlink') {
- $self->{_markup} = "Q<$section>";
- }
- else {
- $self->{_markup} = (!$section ? '' :
- $type eq 'item' ? "the Q<$section> entry" :
- "the section on Q<$section>" ) .
- ($page ? ($section ? ' in ':'') . "the P<$page>$page_ext manpage" :
- ' elsewhere in this document');
- }
-}
-
-=item $link-E<gt>markup($string)
-
-Set/retrieve the textual value of the link. This string contains special
-markers C<PE<lt>E<gt>> and C<QE<lt>E<gt>> that should be expanded by the
-translator's interior sequence expansion engine to the
-formatter-specific code to highlight/activate the hyperlink. The details
-have to be implemented in the translator.
-
-=cut
-
-#' retrieve/set markuped text
-sub markup {
- return (@_ > 1) ? ($_[0]->{_markup} = $_[1]) : $_[0]->{_markup};
-}
-
-=item $link-E<gt>text()
-
-This method returns the textual representation of the hyperlink as above,
-but without markers (read only). Depending on the link type this is one of
-the following alternatives (the + and * denote the portions of the text
-that are marked up):
-
- the +perl+ manpage
- the *$|* entry in the +perlvar+ manpage
- the section on *OPTIONS* in the +perldoc+ manpage
- the section on *DESCRIPTION* elsewhere in this document
-
-=cut
-
-# The complete link's text
-sub text {
- $_[0]->{_text};
-}
-
-=item $link-E<gt>warning()
-
-After parsing, this method returns any warnings encountered during the
-parsing process.
-
-=cut
-
-# Set/retrieve warnings
-sub warning {
- my $self = shift;
- if(@_) {
- push(@{$self->{_warnings}}, @_);
- return @_;
- }
- return @{$self->{_warnings}};
-}
-
-=item $link-E<gt>file()
-
-=item $link-E<gt>line()
-
-Just simple slots for storing information about the line and the file
-the link was encountered in. Has to be filled in manually.
-
-=cut
-
-# The line in the file the link appears
-sub line {
- return (@_ > 1) ? ($_[0]->{-line} = $_[1]) : $_[0]->{-line};
-}
-
-# The POD file name the link appears in
-sub file {
- return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file};
-}
-
-=item $link-E<gt>page()
-
-This method sets or returns the POD page this link points to.
-
-=cut
-
-# The POD page the link appears on
-sub page {
- if (@_ > 1) {
- $_[0]->{-page} = $_[1];
- $_[0]->_construct_text();
- }
- $_[0]->{-page};
-}
-
-=item $link-E<gt>node()
-
-As above, but the destination node text of the link.
-
-=cut
-
-# The link destination
-sub node {
- if (@_ > 1) {
- $_[0]->{-node} = $_[1];
- $_[0]->_construct_text();
- }
- $_[0]->{-node};
-}
-
-=item $link-E<gt>alttext()
-
-Sets or returns an alternative text specified in the link.
-
-=cut
-
-# Potential alternative text
-sub alttext {
- if (@_ > 1) {
- $_[0]->{-alttext} = $_[1];
- $_[0]->_construct_text();
- }
- $_[0]->{-alttext};
-}
-
-=item $link-E<gt>type()
-
-The node type, either C<section> or C<item>. As an unofficial type,
-there is also C<hyperlink>, derived from e.g. C<LE<lt>http://perl.comE<gt>>
-
-=cut
-
-# The type: item or headn
-sub type {
- return (@_ > 1) ? ($_[0]->{-type} = $_[1]) : $_[0]->{-type};
-}
-
-=item $link-E<gt>link()
-
-Returns the link as contents of C<LE<lt>E<gt>>. Reciprocal to B<parse()>.
-
-=back
-
-=cut
-
-# The link itself
-sub link {
- my $self = shift;
- my $link = $self->page() || '';
- if($self->node()) {
- my $node = $self->node();
- $text =~ s/\|/E<verbar>/g;
- $text =~ s:/:E<sol>:g;
- if($self->type() eq 'section') {
- $link .= ($link ? '/' : '') . '"' . $node . '"';
- }
- elsif($self->type() eq 'hyperlink') {
- $link = $self->node();
- }
- else { # item
- $link .= '/' . $node;
- }
- }
- if($self->alttext()) {
- my $text = $self->alttext();
- $text =~ s/\|/E<verbar>/g;
- $text =~ s:/:E<sol>:g;
- $link = "$text|$link";
- }
- $link;
-}
-
-sub _invalid_link {
- my ($msg) = @_;
- # this sets @_
- #eval { die "$msg\n" };
- #chomp $@;
- $@ = $msg; # this seems to work, too!
- undef;
-}
-
-#-----------------------------------------------------------------------------
-# Pod::Cache
-#
-# class to hold POD page details
-#-----------------------------------------------------------------------------
-
-package Pod::Cache;
-
-=head2 Pod::Cache
-
-B<Pod::Cache> holds information about a set of POD documents,
-especially the nodes for hyperlinks.
-The following methods are available:
-
-=over 4
-
-=item Pod::Cache-E<gt>new()
-
-Create a new cache object. This object can hold an arbitrary number of
-POD documents of class Pod::Cache::Item.
-
-=cut
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my $self = [];
- bless $self, $class;
- return $self;
-}
-
-=item $cache-E<gt>item()
-
-Add a new item to the cache. Without arguments, this method returns a
-list of all cache elements.
-
-=cut
-
-sub item {
- my ($self,%param) = @_;
- if(%param) {
- my $item = Pod::Cache::Item->new(%param);
- push(@$self, $item);
- return $item;
- }
- else {
- return @{$self};
- }
-}
-
-=item $cache-E<gt>find_page($name)
-
-Look for a POD document named C<$name> in the cache. Returns the
-reference to the corresponding Pod::Cache::Item object or undef if
-not found.
-
-=back
-
-=cut
-
-sub find_page {
- my ($self,$page) = @_;
- foreach(@$self) {
- if($_->page() eq $page) {
- return $_;
- }
- }
- undef;
-}
-
-package Pod::Cache::Item;
-
-=head2 Pod::Cache::Item
-
-B<Pod::Cache::Item> holds information about individual POD documents,
-that can be grouped in a Pod::Cache object.
-It is intended to hold information about the hyperlink nodes of POD
-documents.
-The following methods are available:
-
-=over 4
-
-=item Pod::Cache::Item-E<gt>new()
-
-Create a new object.
-
-=cut
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my %params = @_;
- my $self = {%params};
- bless $self, $class;
- $self->initialize();
- return $self;
-}
-
-sub initialize {
- my $self = shift;
- $self->{-nodes} = [] unless(defined $self->{-nodes});
-}
-
-=item $cacheitem-E<gt>page()
-
-Set/retrieve the POD document name (e.g. "Pod::Parser").
-
-=cut
-
-# The POD page
-sub page {
- return (@_ > 1) ? ($_[0]->{-page} = $_[1]) : $_[0]->{-page};
-}
-
-=item $cacheitem-E<gt>description()
-
-Set/retrieve the POD short description as found in the C<=head1 NAME>
-section.
-
-=cut
-
-# The POD description, taken out of NAME if present
-sub description {
- return (@_ > 1) ? ($_[0]->{-description} = $_[1]) : $_[0]->{-description};
-}
-
-=item $cacheitem-E<gt>path()
-
-Set/retrieve the POD file storage path.
-
-=cut
-
-# The file path
-sub path {
- return (@_ > 1) ? ($_[0]->{-path} = $_[1]) : $_[0]->{-path};
-}
-
-=item $cacheitem-E<gt>file()
-
-Set/retrieve the POD file name.
-
-=cut
-
-# The POD file name
-sub file {
- return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file};
-}
-
-=item $cacheitem-E<gt>nodes()
-
-Add a node (or a list of nodes) to the document's node list. Note that
-the order is kept, i.e. start with the first node and end with the last.
-If no argument is given, the current list of nodes is returned in the
-same order the nodes have been added.
-A node can be any scalar, but usually is a pair of node string and
-unique id for the C<find_node> method to work correctly.
-
-=cut
-
-# The POD nodes
-sub nodes {
- my ($self,@nodes) = @_;
- if(@nodes) {
- push(@{$self->{-nodes}}, @nodes);
- return @nodes;
- }
- else {
- return @{$self->{-nodes}};
- }
-}
-
-=item $cacheitem-E<gt>find_node($name)
-
-Look for a node or index entry named C<$name> in the object.
-Returns the unique id of the node (i.e. the second element of the array
-stored in the node arry) or undef if not found.
-
-=cut
-
-sub find_node {
- my ($self,$node) = @_;
- my @search;
- push(@search, @{$self->{-nodes}}) if($self->{-nodes});
- push(@search, @{$self->{-idx}}) if($self->{-idx});
- foreach(@search) {
- if($_->[0] eq $node) {
- return $_->[1]; # id
- }
- }
- undef;
-}
-
-=item $cacheitem-E<gt>idx()
-
-Add an index entry (or a list of them) to the document's index list. Note that
-the order is kept, i.e. start with the first node and end with the last.
-If no argument is given, the current list of index entries is returned in the
-same order the entries have been added.
-An index entry can be any scalar, but usually is a pair of string and
-unique id.
-
-=back
-
-=cut
-
-# The POD index entries
-sub idx {
- my ($self,@idx) = @_;
- if(@idx) {
- push(@{$self->{-idx}}, @idx);
- return @idx;
- }
- else {
- return @{$self->{-idx}};
- }
-}
-
-=head1 AUTHOR
-
-Marek Rouchal E<lt>marek@saftsack.fs.uni-bayreuth.deE<gt>, borrowing
-a lot of things from L<pod2man> and L<pod2roff> as well as other POD
-processing tools by Tom Christiansen, Brad Appleton and Russ Allbery.
-
-=head1 SEE ALSO
-
-L<pod2man>, L<pod2roff>, L<Pod::Parser>, L<Pod::Checker>,
-L<pod2html>
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/Pod/Parser.pm b/contrib/perl5/lib/Pod/Parser.pm
deleted file mode 100644
index 6782519..0000000
--- a/contrib/perl5/lib/Pod/Parser.pm
+++ /dev/null
@@ -1,1768 +0,0 @@
-#############################################################################
-# Pod/Parser.pm -- package which defines a base class for parsing POD docs.
-#
-# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Parser;
-
-use vars qw($VERSION);
-$VERSION = 1.13; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-#############################################################################
-
-=head1 NAME
-
-Pod::Parser - base class for creating POD filters and translators
-
-=head1 SYNOPSIS
-
- use Pod::Parser;
-
- package MyParser;
- @ISA = qw(Pod::Parser);
-
- sub command {
- my ($parser, $command, $paragraph, $line_num) = @_;
- ## Interpret the command and its text; sample actions might be:
- if ($command eq 'head1') { ... }
- elsif ($command eq 'head2') { ... }
- ## ... other commands and their actions
- my $out_fh = $parser->output_handle();
- my $expansion = $parser->interpolate($paragraph, $line_num);
- print $out_fh $expansion;
- }
-
- sub verbatim {
- my ($parser, $paragraph, $line_num) = @_;
- ## Format verbatim paragraph; sample actions might be:
- my $out_fh = $parser->output_handle();
- print $out_fh $paragraph;
- }
-
- sub textblock {
- my ($parser, $paragraph, $line_num) = @_;
- ## Translate/Format this block of text; sample actions might be:
- my $out_fh = $parser->output_handle();
- my $expansion = $parser->interpolate($paragraph, $line_num);
- print $out_fh $expansion;
- }
-
- sub interior_sequence {
- my ($parser, $seq_command, $seq_argument) = @_;
- ## Expand an interior sequence; sample actions might be:
- return "*$seq_argument*" if ($seq_command eq 'B');
- return "`$seq_argument'" if ($seq_command eq 'C');
- return "_${seq_argument}_'" if ($seq_command eq 'I');
- ## ... other sequence commands and their resulting text
- }
-
- package main;
-
- ## Create a parser object and have it parse file whose name was
- ## given on the command-line (use STDIN if no files were given).
- $parser = new MyParser();
- $parser->parse_from_filehandle(\*STDIN) if (@ARGV == 0);
- for (@ARGV) { $parser->parse_from_file($_); }
-
-=head1 REQUIRES
-
-perl5.005, Pod::InputObjects, Exporter, Symbol, Carp
-
-=head1 EXPORTS
-
-Nothing.
-
-=head1 DESCRIPTION
-
-B<Pod::Parser> is a base class for creating POD filters and translators.
-It handles most of the effort involved with parsing the POD sections
-from an input stream, leaving subclasses free to be concerned only with
-performing the actual translation of text.
-
-B<Pod::Parser> parses PODs, and makes method calls to handle the various
-components of the POD. Subclasses of B<Pod::Parser> override these methods
-to translate the POD into whatever output format they desire.
-
-=head1 QUICK OVERVIEW
-
-To create a POD filter for translating POD documentation into some other
-format, you create a subclass of B<Pod::Parser> which typically overrides
-just the base class implementation for the following methods:
-
-=over 2
-
-=item *
-
-B<command()>
-
-=item *
-
-B<verbatim()>
-
-=item *
-
-B<textblock()>
-
-=item *
-
-B<interior_sequence()>
-
-=back
-
-You may also want to override the B<begin_input()> and B<end_input()>
-methods for your subclass (to perform any needed per-file and/or
-per-document initialization or cleanup).
-
-If you need to perform any preprocesssing of input before it is parsed
-you may want to override one or more of B<preprocess_line()> and/or
-B<preprocess_paragraph()>.
-
-Sometimes it may be necessary to make more than one pass over the input
-files. If this is the case you have several options. You can make the
-first pass using B<Pod::Parser> and override your methods to store the
-intermediate results in memory somewhere for the B<end_pod()> method to
-process. You could use B<Pod::Parser> for several passes with an
-appropriate state variable to control the operation for each pass. If
-your input source can't be reset to start at the beginning, you can
-store it in some other structure as a string or an array and have that
-structure implement a B<getline()> method (which is all that
-B<parse_from_filehandle()> uses to read input).
-
-Feel free to add any member data fields you need to keep track of things
-like current font, indentation, horizontal or vertical position, or
-whatever else you like. Be sure to read L<"PRIVATE METHODS AND DATA">
-to avoid name collisions.
-
-For the most part, the B<Pod::Parser> base class should be able to
-do most of the input parsing for you and leave you free to worry about
-how to intepret the commands and translate the result.
-
-Note that all we have described here in this quick overview is the
-simplest most straightforward use of B<Pod::Parser> to do stream-based
-parsing. It is also possible to use the B<Pod::Parser::parse_text> function
-to do more sophisticated tree-based parsing. See L<"TREE-BASED PARSING">.
-
-=head1 PARSING OPTIONS
-
-A I<parse-option> is simply a named option of B<Pod::Parser> with a
-value that corresponds to a certain specified behavior. These various
-behaviors of B<Pod::Parser> may be enabled/disabled by setting or
-or unsetting one or more I<parse-options> using the B<parseopts()> method.
-The set of currently accepted parse-options is as follows:
-
-=over 3
-
-=item B<-want_nonPODs> (default: unset)
-
-Normally (by default) B<Pod::Parser> will only provide access to
-the POD sections of the input. Input paragraphs that are not part
-of the POD-format documentation are not made available to the caller
-(not even using B<preprocess_paragraph()>). Setting this option to a
-non-empty, non-zero value will allow B<preprocess_paragraph()> to see
-non-POD sections of the input as well as POD sections. The B<cutting()>
-method can be used to determine if the corresponding paragraph is a POD
-paragraph, or some other input paragraph.
-
-=item B<-process_cut_cmd> (default: unset)
-
-Normally (by default) B<Pod::Parser> handles the C<=cut> POD directive
-by itself and does not pass it on to the caller for processing. Setting
-this option to a non-empty, non-zero value will cause B<Pod::Parser> to
-pass the C<=cut> directive to the caller just like any other POD command
-(and hence it may be processed by the B<command()> method).
-
-B<Pod::Parser> will still interpret the C<=cut> directive to mean that
-"cutting mode" has been (re)entered, but the caller will get a chance
-to capture the actual C<=cut> paragraph itself for whatever purpose
-it desires.
-
-=item B<-warnings> (default: unset)
-
-Normally (by default) B<Pod::Parser> recognizes a bare minimum of
-pod syntax errors and warnings and issues diagnostic messages
-for errors, but not for warnings. (Use B<Pod::Checker> to do more
-thorough checking of POD syntax.) Setting this option to a non-empty,
-non-zero value will cause B<Pod::Parser> to issue diagnostics for
-the few warnings it recognizes as well as the errors.
-
-=back
-
-Please see L<"parseopts()"> for a complete description of the interface
-for the setting and unsetting of parse-options.
-
-=cut
-
-#############################################################################
-
-use vars qw(@ISA);
-use strict;
-#use diagnostics;
-use Pod::InputObjects;
-use Carp;
-use Exporter;
-BEGIN {
- if ($] < 5.6) {
- require Symbol;
- import Symbol;
- }
-}
-@ISA = qw(Exporter);
-
-## These "variables" are used as local "glob aliases" for performance
-use vars qw(%myData %myOpts @input_stack);
-
-#############################################################################
-
-=head1 RECOMMENDED SUBROUTINE/METHOD OVERRIDES
-
-B<Pod::Parser> provides several methods which most subclasses will probably
-want to override. These methods are as follows:
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<command()>
-
- $parser->command($cmd,$text,$line_num,$pod_para);
-
-This method should be overridden by subclasses to take the appropriate
-action when a POD command paragraph (denoted by a line beginning with
-"=") is encountered. When such a POD directive is seen in the input,
-this method is called and is passed:
-
-=over 3
-
-=item C<$cmd>
-
-the name of the command for this POD paragraph
-
-=item C<$text>
-
-the paragraph text for the given POD paragraph command.
-
-=item C<$line_num>
-
-the line-number of the beginning of the paragraph
-
-=item C<$pod_para>
-
-a reference to a C<Pod::Paragraph> object which contains further
-information about the paragraph command (see L<Pod::InputObjects>
-for details).
-
-=back
-
-B<Note> that this method I<is> called for C<=pod> paragraphs.
-
-The base class implementation of this method simply treats the raw POD
-command as normal block of paragraph text (invoking the B<textblock()>
-method with the command paragraph).
-
-=cut
-
-sub command {
- my ($self, $cmd, $text, $line_num, $pod_para) = @_;
- ## Just treat this like a textblock
- $self->textblock($pod_para->raw_text(), $line_num, $pod_para);
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<verbatim()>
-
- $parser->verbatim($text,$line_num,$pod_para);
-
-This method may be overridden by subclasses to take the appropriate
-action when a block of verbatim text is encountered. It is passed the
-following parameters:
-
-=over 3
-
-=item C<$text>
-
-the block of text for the verbatim paragraph
-
-=item C<$line_num>
-
-the line-number of the beginning of the paragraph
-
-=item C<$pod_para>
-
-a reference to a C<Pod::Paragraph> object which contains further
-information about the paragraph (see L<Pod::InputObjects>
-for details).
-
-=back
-
-The base class implementation of this method simply prints the textblock
-(unmodified) to the output filehandle.
-
-=cut
-
-sub verbatim {
- my ($self, $text, $line_num, $pod_para) = @_;
- my $out_fh = $self->{_OUTPUT};
- print $out_fh $text;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<textblock()>
-
- $parser->textblock($text,$line_num,$pod_para);
-
-This method may be overridden by subclasses to take the appropriate
-action when a normal block of POD text is encountered (although the base
-class method will usually do what you want). It is passed the following
-parameters:
-
-=over 3
-
-=item C<$text>
-
-the block of text for the a POD paragraph
-
-=item C<$line_num>
-
-the line-number of the beginning of the paragraph
-
-=item C<$pod_para>
-
-a reference to a C<Pod::Paragraph> object which contains further
-information about the paragraph (see L<Pod::InputObjects>
-for details).
-
-=back
-
-In order to process interior sequences, subclasses implementations of
-this method will probably want to invoke either B<interpolate()> or
-B<parse_text()>, passing it the text block C<$text>, and the corresponding
-line number in C<$line_num>, and then perform any desired processing upon
-the returned result.
-
-The base class implementation of this method simply prints the text block
-as it occurred in the input stream).
-
-=cut
-
-sub textblock {
- my ($self, $text, $line_num, $pod_para) = @_;
- my $out_fh = $self->{_OUTPUT};
- print $out_fh $self->interpolate($text, $line_num);
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<interior_sequence()>
-
- $parser->interior_sequence($seq_cmd,$seq_arg,$pod_seq);
-
-This method should be overridden by subclasses to take the appropriate
-action when an interior sequence is encountered. An interior sequence is
-an embedded command within a block of text which appears as a command
-name (usually a single uppercase character) followed immediately by a
-string of text which is enclosed in angle brackets. This method is
-passed the sequence command C<$seq_cmd> and the corresponding text
-C<$seq_arg>. It is invoked by the B<interpolate()> method for each interior
-sequence that occurs in the string that it is passed. It should return
-the desired text string to be used in place of the interior sequence.
-The C<$pod_seq> argument is a reference to a C<Pod::InteriorSequence>
-object which contains further information about the interior sequence.
-Please see L<Pod::InputObjects> for details if you need to access this
-additional information.
-
-Subclass implementations of this method may wish to invoke the
-B<nested()> method of C<$pod_seq> to see if it is nested inside
-some other interior-sequence (and if so, which kind).
-
-The base class implementation of the B<interior_sequence()> method
-simply returns the raw text of the interior sequence (as it occurred
-in the input) to the caller.
-
-=cut
-
-sub interior_sequence {
- my ($self, $seq_cmd, $seq_arg, $pod_seq) = @_;
- ## Just return the raw text of the interior sequence
- return $pod_seq->raw_text();
-}
-
-#############################################################################
-
-=head1 OPTIONAL SUBROUTINE/METHOD OVERRIDES
-
-B<Pod::Parser> provides several methods which subclasses may want to override
-to perform any special pre/post-processing. These methods do I<not> have to
-be overridden, but it may be useful for subclasses to take advantage of them.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<new()>
-
- my $parser = Pod::Parser->new();
-
-This is the constructor for B<Pod::Parser> and its subclasses. You
-I<do not> need to override this method! It is capable of constructing
-subclass objects as well as base class objects, provided you use
-any of the following constructor invocation styles:
-
- my $parser1 = MyParser->new();
- my $parser2 = new MyParser();
- my $parser3 = $parser2->new();
-
-where C<MyParser> is some subclass of B<Pod::Parser>.
-
-Using the syntax C<MyParser::new()> to invoke the constructor is I<not>
-recommended, but if you insist on being able to do this, then the
-subclass I<will> need to override the B<new()> constructor method. If
-you do override the constructor, you I<must> be sure to invoke the
-B<initialize()> method of the newly blessed object.
-
-Using any of the above invocations, the first argument to the
-constructor is always the corresponding package name (or object
-reference). No other arguments are required, but if desired, an
-associative array (or hash-table) my be passed to the B<new()>
-constructor, as in:
-
- my $parser1 = MyParser->new( MYDATA => $value1, MOREDATA => $value2 );
- my $parser2 = new MyParser( -myflag => 1 );
-
-All arguments passed to the B<new()> constructor will be treated as
-key/value pairs in a hash-table. The newly constructed object will be
-initialized by copying the contents of the given hash-table (which may
-have been empty). The B<new()> constructor for this class and all of its
-subclasses returns a blessed reference to the initialized object (hash-table).
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
- ## Any remaining arguments are treated as initial values for the
- ## hash that is used to represent this object.
- my %params = @_;
- my $self = { %params };
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- $self->initialize();
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<initialize()>
-
- $parser->initialize();
-
-This method performs any necessary object initialization. It takes no
-arguments (other than the object instance of course, which is typically
-copied to a local variable named C<$self>). If subclasses override this
-method then they I<must> be sure to invoke C<$self-E<gt>SUPER::initialize()>.
-
-=cut
-
-sub initialize {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<begin_pod()>
-
- $parser->begin_pod();
-
-This method is invoked at the beginning of processing for each POD
-document that is encountered in the input. Subclasses should override
-this method to perform any per-document initialization.
-
-=cut
-
-sub begin_pod {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<begin_input()>
-
- $parser->begin_input();
-
-This method is invoked by B<parse_from_filehandle()> immediately I<before>
-processing input from a filehandle. The base class implementation does
-nothing, however, subclasses may override it to perform any per-file
-initializations.
-
-Note that if multiple files are parsed for a single POD document
-(perhaps the result of some future C<=include> directive) this method
-is invoked for every file that is parsed. If you wish to perform certain
-initializations once per document, then you should use B<begin_pod()>.
-
-=cut
-
-sub begin_input {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<end_input()>
-
- $parser->end_input();
-
-This method is invoked by B<parse_from_filehandle()> immediately I<after>
-processing input from a filehandle. The base class implementation does
-nothing, however, subclasses may override it to perform any per-file
-cleanup actions.
-
-Please note that if multiple files are parsed for a single POD document
-(perhaps the result of some kind of C<=include> directive) this method
-is invoked for every file that is parsed. If you wish to perform certain
-cleanup actions once per document, then you should use B<end_pod()>.
-
-=cut
-
-sub end_input {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<end_pod()>
-
- $parser->end_pod();
-
-This method is invoked at the end of processing for each POD document
-that is encountered in the input. Subclasses should override this method
-to perform any per-document finalization.
-
-=cut
-
-sub end_pod {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<preprocess_line()>
-
- $textline = $parser->preprocess_line($text, $line_num);
-
-This method should be overridden by subclasses that wish to perform
-any kind of preprocessing for each I<line> of input (I<before> it has
-been determined whether or not it is part of a POD paragraph). The
-parameter C<$text> is the input line; and the parameter C<$line_num> is
-the line number of the corresponding text line.
-
-The value returned should correspond to the new text to use in its
-place. If the empty string or an undefined value is returned then no
-further processing will be performed for this line.
-
-Please note that the B<preprocess_line()> method is invoked I<before>
-the B<preprocess_paragraph()> method. After all (possibly preprocessed)
-lines in a paragraph have been assembled together and it has been
-determined that the paragraph is part of the POD documentation from one
-of the selected sections, then B<preprocess_paragraph()> is invoked.
-
-The base class implementation of this method returns the given text.
-
-=cut
-
-sub preprocess_line {
- my ($self, $text, $line_num) = @_;
- return $text;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<preprocess_paragraph()>
-
- $textblock = $parser->preprocess_paragraph($text, $line_num);
-
-This method should be overridden by subclasses that wish to perform any
-kind of preprocessing for each block (paragraph) of POD documentation
-that appears in the input stream. The parameter C<$text> is the POD
-paragraph from the input file; and the parameter C<$line_num> is the
-line number for the beginning of the corresponding paragraph.
-
-The value returned should correspond to the new text to use in its
-place If the empty string is returned or an undefined value is
-returned, then the given C<$text> is ignored (not processed).
-
-This method is invoked after gathering up all the lines in a paragraph
-and after determining the cutting state of the paragraph,
-but before trying to further parse or interpret them. After
-B<preprocess_paragraph()> returns, the current cutting state (which
-is returned by C<$self-E<gt>cutting()>) is examined. If it evaluates
-to true then input text (including the given C<$text>) is cut (not
-processed) until the next POD directive is encountered.
-
-Please note that the B<preprocess_line()> method is invoked I<before>
-the B<preprocess_paragraph()> method. After all (possibly preprocessed)
-lines in a paragraph have been assembled together and either it has been
-determined that the paragraph is part of the POD documentation from one
-of the selected sections or the C<-want_nonPODs> option is true,
-then B<preprocess_paragraph()> is invoked.
-
-The base class implementation of this method returns the given text.
-
-=cut
-
-sub preprocess_paragraph {
- my ($self, $text, $line_num) = @_;
- return $text;
-}
-
-#############################################################################
-
-=head1 METHODS FOR PARSING AND PROCESSING
-
-B<Pod::Parser> provides several methods to process input text. These
-methods typically won't need to be overridden (and in some cases they
-can't be overridden), but subclasses may want to invoke them to exploit
-their functionality.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<parse_text()>
-
- $ptree1 = $parser->parse_text($text, $line_num);
- $ptree2 = $parser->parse_text({%opts}, $text, $line_num);
- $ptree3 = $parser->parse_text(\%opts, $text, $line_num);
-
-This method is useful if you need to perform your own interpolation
-of interior sequences and can't rely upon B<interpolate> to expand
-them in simple bottom-up order order.
-
-The parameter C<$text> is a string or block of text to be parsed
-for interior sequences; and the parameter C<$line_num> is the
-line number curresponding to the beginning of C<$text>.
-
-B<parse_text()> will parse the given text into a parse-tree of "nodes."
-and interior-sequences. Each "node" in the parse tree is either a
-text-string, or a B<Pod::InteriorSequence>. The result returned is a
-parse-tree of type B<Pod::ParseTree>. Please see L<Pod::InputObjects>
-for more information about B<Pod::InteriorSequence> and B<Pod::ParseTree>.
-
-If desired, an optional hash-ref may be specified as the first argument
-to customize certain aspects of the parse-tree that is created and
-returned. The set of recognized option keywords are:
-
-=over 3
-
-=item B<-expand_seq> =E<gt> I<code-ref>|I<method-name>
-
-Normally, the parse-tree returned by B<parse_text()> will contain an
-unexpanded C<Pod::InteriorSequence> object for each interior-sequence
-encountered. Specifying B<-expand_seq> tells B<parse_text()> to "expand"
-every interior-sequence it sees by invoking the referenced function
-(or named method of the parser object) and using the return value as the
-expanded result.
-
-If a subroutine reference was given, it is invoked as:
-
- &$code_ref( $parser, $sequence )
-
-and if a method-name was given, it is invoked as:
-
- $parser->method_name( $sequence )
-
-where C<$parser> is a reference to the parser object, and C<$sequence>
-is a reference to the interior-sequence object.
-[I<NOTE>: If the B<interior_sequence()> method is specified, then it is
-invoked according to the interface specified in L<"interior_sequence()">].
-
-=item B<-expand_text> =E<gt> I<code-ref>|I<method-name>
-
-Normally, the parse-tree returned by B<parse_text()> will contain a
-text-string for each contiguous sequence of characters outside of an
-interior-sequence. Specifying B<-expand_text> tells B<parse_text()> to
-"preprocess" every such text-string it sees by invoking the referenced
-function (or named method of the parser object) and using the return value
-as the preprocessed (or "expanded") result. [Note that if the result is
-an interior-sequence, then it will I<not> be expanded as specified by the
-B<-expand_seq> option; Any such recursive expansion needs to be handled by
-the specified callback routine.]
-
-If a subroutine reference was given, it is invoked as:
-
- &$code_ref( $parser, $text, $ptree_node )
-
-and if a method-name was given, it is invoked as:
-
- $parser->method_name( $text, $ptree_node )
-
-where C<$parser> is a reference to the parser object, C<$text> is the
-text-string encountered, and C<$ptree_node> is a reference to the current
-node in the parse-tree (usually an interior-sequence object or else the
-top-level node of the parse-tree).
-
-=item B<-expand_ptree> =E<gt> I<code-ref>|I<method-name>
-
-Rather than returning a C<Pod::ParseTree>, pass the parse-tree as an
-argument to the referenced subroutine (or named method of the parser
-object) and return the result instead of the parse-tree object.
-
-If a subroutine reference was given, it is invoked as:
-
- &$code_ref( $parser, $ptree )
-
-and if a method-name was given, it is invoked as:
-
- $parser->method_name( $ptree )
-
-where C<$parser> is a reference to the parser object, and C<$ptree>
-is a reference to the parse-tree object.
-
-=back
-
-=cut
-
-sub parse_text {
- my $self = shift;
- local $_ = '';
-
- ## Get options and set any defaults
- my %opts = (ref $_[0]) ? %{ shift() } : ();
- my $expand_seq = $opts{'-expand_seq'} || undef;
- my $expand_text = $opts{'-expand_text'} || undef;
- my $expand_ptree = $opts{'-expand_ptree'} || undef;
-
- my $text = shift;
- my $line = shift;
- my $file = $self->input_file();
- my $cmd = "";
-
- ## Convert method calls into closures, for our convenience
- my $xseq_sub = $expand_seq;
- my $xtext_sub = $expand_text;
- my $xptree_sub = $expand_ptree;
- if (defined $expand_seq and $expand_seq eq 'interior_sequence') {
- ## If 'interior_sequence' is the method to use, we have to pass
- ## more than just the sequence object, we also need to pass the
- ## sequence name and text.
- $xseq_sub = sub {
- my ($self, $iseq) = @_;
- my $args = join("", $iseq->parse_tree->children);
- return $self->interior_sequence($iseq->name, $args, $iseq);
- };
- }
- ref $xseq_sub or $xseq_sub = sub { shift()->$expand_seq(@_) };
- ref $xtext_sub or $xtext_sub = sub { shift()->$expand_text(@_) };
- ref $xptree_sub or $xptree_sub = sub { shift()->$expand_ptree(@_) };
-
- ## Keep track of the "current" interior sequence, and maintain a stack
- ## of "in progress" sequences.
- ##
- ## NOTE that we push our own "accumulator" at the very beginning of the
- ## stack. It's really a parse-tree, not a sequence; but it implements
- ## the methods we need so we can use it to gather-up all the sequences
- ## and strings we parse. Thus, by the end of our parsing, it should be
- ## the only thing left on our stack and all we have to do is return it!
- ##
- my $seq = Pod::ParseTree->new();
- my @seq_stack = ($seq);
- my ($ldelim, $rdelim) = ('', '');
-
- ## Iterate over all sequence starts text (NOTE: split with
- ## capturing parens keeps the delimiters)
- $_ = $text;
- my @tokens = split /([A-Z]<(?:<+\s)?)/;
- while ( @tokens ) {
- $_ = shift @tokens;
- ## Look for the beginning of a sequence
- if ( /^([A-Z])(<(?:<+\s)?)$/ ) {
- ## Push a new sequence onto the stack of those "in-progress"
- ($cmd, $ldelim) = ($1, $2);
- $seq = Pod::InteriorSequence->new(
- -name => $cmd,
- -ldelim => $ldelim, -rdelim => '',
- -file => $file, -line => $line
- );
- $ldelim =~ s/\s+$//, ($rdelim = $ldelim) =~ tr/</>/;
- (@seq_stack > 1) and $seq->nested($seq_stack[-1]);
- push @seq_stack, $seq;
- }
- ## Look for sequence ending
- elsif ( @seq_stack > 1 ) {
- ## Make sure we match the right kind of closing delimiter
- my ($seq_end, $post_seq) = ("", "");
- if ( ($ldelim eq '<' and /\A(.*?)(>)/s)
- or /\A(.*?)(\s+$rdelim)/s )
- {
- ## Found end-of-sequence, capture the interior and the
- ## closing the delimiter, and put the rest back on the
- ## token-list
- $post_seq = substr($_, length($1) + length($2));
- ($_, $seq_end) = ($1, $2);
- (length $post_seq) and unshift @tokens, $post_seq;
- }
- if (length) {
- ## In the middle of a sequence, append this text to it, and
- ## dont forget to "expand" it if that's what the caller wanted
- $seq->append($expand_text ? &$xtext_sub($self,$_,$seq) : $_);
- $_ .= $seq_end;
- }
- if (length $seq_end) {
- ## End of current sequence, record terminating delimiter
- $seq->rdelim($seq_end);
- ## Pop it off the stack of "in progress" sequences
- pop @seq_stack;
- ## Append result to its parent in current parse tree
- $seq_stack[-1]->append($expand_seq ? &$xseq_sub($self,$seq)
- : $seq);
- ## Remember the current cmd-name and left-delimiter
- $cmd = (@seq_stack > 1) ? $seq_stack[-1]->name : '';
- $ldelim = (@seq_stack > 1) ? $seq_stack[-1]->ldelim : '';
- $ldelim =~ s/\s+$//, ($rdelim = $ldelim) =~ tr/</>/;
- }
- }
- elsif (length) {
- ## In the middle of a sequence, append this text to it, and
- ## dont forget to "expand" it if that's what the caller wanted
- $seq->append($expand_text ? &$xtext_sub($self,$_,$seq) : $_);
- }
- ## Keep track of line count
- $line += tr/\n//;
- ## Remember the "current" sequence
- $seq = $seq_stack[-1];
- }
-
- ## Handle unterminated sequences
- my $errorsub = (@seq_stack > 1) ? $self->errorsub() : undef;
- while (@seq_stack > 1) {
- ($cmd, $file, $line) = ($seq->name, $seq->file_line);
- $ldelim = $seq->ldelim;
- ($rdelim = $ldelim) =~ tr/</>/;
- $rdelim =~ s/^(\S+)(\s*)$/$2$1/;
- pop @seq_stack;
- my $errmsg = "*** ERROR: unterminated ${cmd}${ldelim}...${rdelim}".
- " at line $line in file $file\n";
- (ref $errorsub) and &{$errorsub}($errmsg)
- or (defined $errorsub) and $self->$errorsub($errmsg)
- or warn($errmsg);
- $seq_stack[-1]->append($expand_seq ? &$xseq_sub($self,$seq) : $seq);
- $seq = $seq_stack[-1];
- }
-
- ## Return the resulting parse-tree
- my $ptree = (pop @seq_stack)->parse_tree;
- return $expand_ptree ? &$xptree_sub($self, $ptree) : $ptree;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<interpolate()>
-
- $textblock = $parser->interpolate($text, $line_num);
-
-This method translates all text (including any embedded interior sequences)
-in the given text string C<$text> and returns the interpolated result. The
-parameter C<$line_num> is the line number corresponding to the beginning
-of C<$text>.
-
-B<interpolate()> merely invokes a private method to recursively expand
-nested interior sequences in bottom-up order (innermost sequences are
-expanded first). If there is a need to expand nested sequences in
-some alternate order, use B<parse_text> instead.
-
-=cut
-
-sub interpolate {
- my($self, $text, $line_num) = @_;
- my %parse_opts = ( -expand_seq => 'interior_sequence' );
- my $ptree = $self->parse_text( \%parse_opts, $text, $line_num );
- return join "", $ptree->children();
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head1 B<parse_paragraph()>
-
- $parser->parse_paragraph($text, $line_num);
-
-This method takes the text of a POD paragraph to be processed, along
-with its corresponding line number, and invokes the appropriate method
-(one of B<command()>, B<verbatim()>, or B<textblock()>).
-
-For performance reasons, this method is invoked directly without any
-dynamic lookup; Hence subclasses may I<not> override it!
-
-=end __PRIVATE__
-
-=cut
-
-sub parse_paragraph {
- my ($self, $text, $line_num) = @_;
- local *myData = $self; ## alias to avoid deref-ing overhead
- local *myOpts = ($myData{_PARSEOPTS} ||= {}); ## get parse-options
- local $_;
-
- ## See if we want to preprocess nonPOD paragraphs as well as POD ones.
- my $wantNonPods = $myOpts{'-want_nonPODs'};
-
- ## Update cutting status
- $myData{_CUTTING} = 0 if $text =~ /^={1,2}\S/;
-
- ## Perform any desired preprocessing if we wanted it this early
- $wantNonPods and $text = $self->preprocess_paragraph($text, $line_num);
-
- ## Ignore up until next POD directive if we are cutting
- return if $myData{_CUTTING};
-
- ## Now we know this is block of text in a POD section!
-
- ##-----------------------------------------------------------------
- ## This is a hook (hack ;-) for Pod::Select to do its thing without
- ## having to override methods, but also without Pod::Parser assuming
- ## $self is an instance of Pod::Select (if the _SELECTED_SECTIONS
- ## field exists then we assume there is an is_selected() method for
- ## us to invoke (calling $self->can('is_selected') could verify this
- ## but that is more overhead than I want to incur)
- ##-----------------------------------------------------------------
-
- ## Ignore this block if it isnt in one of the selected sections
- if (exists $myData{_SELECTED_SECTIONS}) {
- $self->is_selected($text) or return ($myData{_CUTTING} = 1);
- }
-
- ## If we havent already, perform any desired preprocessing and
- ## then re-check the "cutting" state
- unless ($wantNonPods) {
- $text = $self->preprocess_paragraph($text, $line_num);
- return 1 unless ((defined $text) and (length $text));
- return 1 if ($myData{_CUTTING});
- }
-
- ## Look for one of the three types of paragraphs
- my ($pfx, $cmd, $arg, $sep) = ('', '', '', '');
- my $pod_para = undef;
- if ($text =~ /^(={1,2})(?=\S)/) {
- ## Looks like a command paragraph. Capture the command prefix used
- ## ("=" or "=="), as well as the command-name, its paragraph text,
- ## and whatever sequence of characters was used to separate them
- $pfx = $1;
- $_ = substr($text, length $pfx);
- ($cmd, $sep, $text) = split /(\s+)/, $_, 2;
- ## If this is a "cut" directive then we dont need to do anything
- ## except return to "cutting" mode.
- if ($cmd eq 'cut') {
- $myData{_CUTTING} = 1;
- return unless $myOpts{'-process_cut_cmd'};
- }
- }
- ## Save the attributes indicating how the command was specified.
- $pod_para = new Pod::Paragraph(
- -name => $cmd,
- -text => $text,
- -prefix => $pfx,
- -separator => $sep,
- -file => $myData{_INFILE},
- -line => $line_num
- );
- # ## Invoke appropriate callbacks
- # if (exists $myData{_CALLBACKS}) {
- # ## Look through the callback list, invoke callbacks,
- # ## then see if we need to do the default actions
- # ## (invoke_callbacks will return true if we do).
- # return 1 unless $self->invoke_callbacks($cmd, $text, $line_num, $pod_para);
- # }
- if (length $cmd) {
- ## A command paragraph
- $self->command($cmd, $text, $line_num, $pod_para);
- }
- elsif ($text =~ /^\s+/) {
- ## Indented text - must be a verbatim paragraph
- $self->verbatim($text, $line_num, $pod_para);
- }
- else {
- ## Looks like an ordinary block of text
- $self->textblock($text, $line_num, $pod_para);
- }
- return 1;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<parse_from_filehandle()>
-
- $parser->parse_from_filehandle($in_fh,$out_fh);
-
-This method takes an input filehandle (which is assumed to already be
-opened for reading) and reads the entire input stream looking for blocks
-(paragraphs) of POD documentation to be processed. If no first argument
-is given the default input filehandle C<STDIN> is used.
-
-The C<$in_fh> parameter may be any object that provides a B<getline()>
-method to retrieve a single line of input text (hence, an appropriate
-wrapper object could be used to parse PODs from a single string or an
-array of strings).
-
-Using C<$in_fh-E<gt>getline()>, input is read line-by-line and assembled
-into paragraphs or "blocks" (which are separated by lines containing
-nothing but whitespace). For each block of POD documentation
-encountered it will invoke a method to parse the given paragraph.
-
-If a second argument is given then it should correspond to a filehandle where
-output should be sent (otherwise the default output filehandle is
-C<STDOUT> if no output filehandle is currently in use).
-
-B<NOTE:> For performance reasons, this method caches the input stream at
-the top of the stack in a local variable. Any attempts by clients to
-change the stack contents during processing when in the midst executing
-of this method I<will not affect> the input stream used by the current
-invocation of this method.
-
-This method does I<not> usually need to be overridden by subclasses.
-
-=cut
-
-sub parse_from_filehandle {
- my $self = shift;
- my %opts = (ref $_[0] eq 'HASH') ? %{ shift() } : ();
- my ($in_fh, $out_fh) = @_;
- $in_fh = \*STDIN unless ($in_fh);
- local *myData = $self; ## alias to avoid deref-ing overhead
- local *myOpts = ($myData{_PARSEOPTS} ||= {}); ## get parse-options
- local $_;
-
- ## Put this stream at the top of the stack and do beginning-of-input
- ## processing. NOTE that $in_fh might be reset during this process.
- my $topstream = $self->_push_input_stream($in_fh, $out_fh);
- (exists $opts{-cutting}) and $self->cutting( $opts{-cutting} );
-
- ## Initialize line/paragraph
- my ($textline, $paragraph) = ('', '');
- my ($nlines, $plines) = (0, 0);
-
- ## Use <$fh> instead of $fh->getline where possible (for speed)
- $_ = ref $in_fh;
- my $tied_fh = (/^(?:GLOB|FileHandle|IO::\w+)$/ or tied $in_fh);
-
- ## Read paragraphs line-by-line
- while (defined ($textline = $tied_fh ? <$in_fh> : $in_fh->getline)) {
- $textline = $self->preprocess_line($textline, ++$nlines);
- next unless ((defined $textline) && (length $textline));
- $_ = $paragraph; ## save previous contents
-
- if ((! length $paragraph) && ($textline =~ /^==/)) {
- ## '==' denotes a one-line command paragraph
- $paragraph = $textline;
- $plines = 1;
- $textline = '';
- } else {
- ## Append this line to the current paragraph
- $paragraph .= $textline;
- ++$plines;
- }
-
- ## See if this line is blank and ends the current paragraph.
- ## If it isnt, then keep iterating until it is.
- next unless (($textline =~ /^([^\S\r\n]*)[\r\n]*$/)
- && (length $paragraph));
-
- ## Issue a warning about any non-empty blank lines
- if (length($1) > 0 and $myOpts{'-warnings'} and ! $myData{_CUTTING}) {
- my $errorsub = $self->errorsub();
- my $file = $self->input_file();
- my $errmsg = "*** WARNING: line containing nothing but whitespace".
- " in paragraph at line $nlines in file $file\n";
- (ref $errorsub) and &{$errorsub}($errmsg)
- or (defined $errorsub) and $self->$errorsub($errmsg)
- or warn($errmsg);
- }
-
- ## Now process the paragraph
- parse_paragraph($self, $paragraph, ($nlines - $plines) + 1);
- $paragraph = '';
- $plines = 0;
- }
- ## Dont forget about the last paragraph in the file
- if (length $paragraph) {
- parse_paragraph($self, $paragraph, ($nlines - $plines) + 1)
- }
-
- ## Now pop the input stream off the top of the input stack.
- $self->_pop_input_stream();
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<parse_from_file()>
-
- $parser->parse_from_file($filename,$outfile);
-
-This method takes a filename and does the following:
-
-=over 2
-
-=item *
-
-opens the input and output files for reading
-(creating the appropriate filehandles)
-
-=item *
-
-invokes the B<parse_from_filehandle()> method passing it the
-corresponding input and output filehandles.
-
-=item *
-
-closes the input and output files.
-
-=back
-
-If the special input filename "-" or "<&STDIN" is given then the STDIN
-filehandle is used for input (and no open or close is performed). If no
-input filename is specified then "-" is implied.
-
-If a second argument is given then it should be the name of the desired
-output file. If the special output filename "-" or ">&STDOUT" is given
-then the STDOUT filehandle is used for output (and no open or close is
-performed). If the special output filename ">&STDERR" is given then the
-STDERR filehandle is used for output (and no open or close is
-performed). If no output filehandle is currently in use and no output
-filename is specified, then "-" is implied.
-
-This method does I<not> usually need to be overridden by subclasses.
-
-=cut
-
-sub parse_from_file {
- my $self = shift;
- my %opts = (ref $_[0] eq 'HASH') ? %{ shift() } : ();
- my ($infile, $outfile) = @_;
- my ($in_fh, $out_fh) = (gensym, gensym) if ($] < 5.6);
- my ($close_input, $close_output) = (0, 0);
- local *myData = $self;
- local $_;
-
- ## Is $infile a filename or a (possibly implied) filehandle
- $infile = '-' unless ((defined $infile) && (length $infile));
- if (($infile eq '-') || ($infile =~ /^<&(STDIN|0)$/i)) {
- ## Not a filename, just a string implying STDIN
- $myData{_INFILE} = "<standard input>";
- $in_fh = \*STDIN;
- }
- elsif (ref $infile) {
- ## Must be a filehandle-ref (or else assume its a ref to an object
- ## that supports the common IO read operations).
- $myData{_INFILE} = ${$infile};
- $in_fh = $infile;
- }
- else {
- ## We have a filename, open it for reading
- $myData{_INFILE} = $infile;
- open($in_fh, "< $infile") or
- croak "Can't open $infile for reading: $!\n";
- $close_input = 1;
- }
-
- ## NOTE: we need to be *very* careful when "defaulting" the output
- ## file. We only want to use a default if this is the beginning of
- ## the entire document (but *not* if this is an included file). We
- ## determine this by seeing if the input stream stack has been set-up
- ## already
- ##
- unless ((defined $outfile) && (length $outfile)) {
- (defined $myData{_TOP_STREAM}) && ($out_fh = $myData{_OUTPUT})
- || ($outfile = '-');
- }
- ## Is $outfile a filename or a (possibly implied) filehandle
- if ((defined $outfile) && (length $outfile)) {
- if (($outfile eq '-') || ($outfile =~ /^>&?(?:STDOUT|1)$/i)) {
- ## Not a filename, just a string implying STDOUT
- $myData{_OUTFILE} = "<standard output>";
- $out_fh = \*STDOUT;
- }
- elsif ($outfile =~ /^>&(STDERR|2)$/i) {
- ## Not a filename, just a string implying STDERR
- $myData{_OUTFILE} = "<standard error>";
- $out_fh = \*STDERR;
- }
- elsif (ref $outfile) {
- ## Must be a filehandle-ref (or else assume its a ref to an
- ## object that supports the common IO write operations).
- $myData{_OUTFILE} = ${$outfile};
- $out_fh = $outfile;
- }
- else {
- ## We have a filename, open it for writing
- $myData{_OUTFILE} = $outfile;
- (-d $outfile) and croak "$outfile is a directory, not POD input!\n";
- open($out_fh, "> $outfile") or
- croak "Can't open $outfile for writing: $!\n";
- $close_output = 1;
- }
- }
-
- ## Whew! That was a lot of work to set up reasonably/robust behavior
- ## in the case of a non-filename for reading and writing. Now we just
- ## have to parse the input and close the handles when we're finished.
- $self->parse_from_filehandle(\%opts, $in_fh, $out_fh);
-
- $close_input and
- close($in_fh) || croak "Can't close $infile after reading: $!\n";
- $close_output and
- close($out_fh) || croak "Can't close $outfile after writing: $!\n";
-}
-
-#############################################################################
-
-=head1 ACCESSOR METHODS
-
-Clients of B<Pod::Parser> should use the following methods to access
-instance data fields:
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<errorsub()>
-
- $parser->errorsub("method_name");
- $parser->errorsub(\&warn_user);
- $parser->errorsub(sub { print STDERR, @_ });
-
-Specifies the method or subroutine to use when printing error messages
-about POD syntax. The supplied method/subroutine I<must> return TRUE upon
-successful printing of the message. If C<undef> is given, then the B<warn>
-builtin is used to issue error messages (this is the default behavior).
-
- my $errorsub = $parser->errorsub()
- my $errmsg = "This is an error message!\n"
- (ref $errorsub) and &{$errorsub}($errmsg)
- or (defined $errorsub) and $parser->$errorsub($errmsg)
- or warn($errmsg);
-
-Returns a method name, or else a reference to the user-supplied subroutine
-used to print error messages. Returns C<undef> if the B<warn> builtin
-is used to issue error messages (this is the default behavior).
-
-=cut
-
-sub errorsub {
- return (@_ > 1) ? ($_[0]->{_ERRORSUB} = $_[1]) : $_[0]->{_ERRORSUB};
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<cutting()>
-
- $boolean = $parser->cutting();
-
-Returns the current C<cutting> state: a boolean-valued scalar which
-evaluates to true if text from the input file is currently being "cut"
-(meaning it is I<not> considered part of the POD document).
-
- $parser->cutting($boolean);
-
-Sets the current C<cutting> state to the given value and returns the
-result.
-
-=cut
-
-sub cutting {
- return (@_ > 1) ? ($_[0]->{_CUTTING} = $_[1]) : $_[0]->{_CUTTING};
-}
-
-##---------------------------------------------------------------------------
-
-##---------------------------------------------------------------------------
-
-=head1 B<parseopts()>
-
-When invoked with no additional arguments, B<parseopts> returns a hashtable
-of all the current parsing options.
-
- ## See if we are parsing non-POD sections as well as POD ones
- my %opts = $parser->parseopts();
- $opts{'-want_nonPODs}' and print "-want_nonPODs\n";
-
-When invoked using a single string, B<parseopts> treats the string as the
-name of a parse-option and returns its corresponding value if it exists
-(returns C<undef> if it doesn't).
-
- ## Did we ask to see '=cut' paragraphs?
- my $want_cut = $parser->parseopts('-process_cut_cmd');
- $want_cut and print "-process_cut_cmd\n";
-
-When invoked with multiple arguments, B<parseopts> treats them as
-key/value pairs and the specified parse-option names are set to the
-given values. Any unspecified parse-options are unaffected.
-
- ## Set them back to the default
- $parser->parseopts(-warnings => 0);
-
-When passed a single hash-ref, B<parseopts> uses that hash to completely
-reset the existing parse-options, all previous parse-option values
-are lost.
-
- ## Reset all options to default
- $parser->parseopts( { } );
-
-See L<"PARSING OPTIONS"> for more information on the name and meaning of each
-parse-option currently recognized.
-
-=cut
-
-sub parseopts {
- local *myData = shift;
- local *myOpts = ($myData{_PARSEOPTS} ||= {});
- return %myOpts if (@_ == 0);
- if (@_ == 1) {
- local $_ = shift;
- return ref($_) ? $myData{_PARSEOPTS} = $_ : $myOpts{$_};
- }
- my @newOpts = (%myOpts, @_);
- $myData{_PARSEOPTS} = { @newOpts };
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<output_file()>
-
- $fname = $parser->output_file();
-
-Returns the name of the output file being written.
-
-=cut
-
-sub output_file {
- return $_[0]->{_OUTFILE};
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<output_handle()>
-
- $fhandle = $parser->output_handle();
-
-Returns the output filehandle object.
-
-=cut
-
-sub output_handle {
- return $_[0]->{_OUTPUT};
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<input_file()>
-
- $fname = $parser->input_file();
-
-Returns the name of the input file being read.
-
-=cut
-
-sub input_file {
- return $_[0]->{_INFILE};
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<input_handle()>
-
- $fhandle = $parser->input_handle();
-
-Returns the current input filehandle object.
-
-=cut
-
-sub input_handle {
- return $_[0]->{_INPUT};
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head1 B<input_streams()>
-
- $listref = $parser->input_streams();
-
-Returns a reference to an array which corresponds to the stack of all
-the input streams that are currently in the middle of being parsed.
-
-While parsing an input stream, it is possible to invoke
-B<parse_from_file()> or B<parse_from_filehandle()> to parse a new input
-stream and then return to parsing the previous input stream. Each input
-stream to be parsed is pushed onto the end of this input stack
-before any of its input is read. The input stream that is currently
-being parsed is always at the end (or top) of the input stack. When an
-input stream has been exhausted, it is popped off the end of the
-input stack.
-
-Each element on this input stack is a reference to C<Pod::InputSource>
-object. Please see L<Pod::InputObjects> for more details.
-
-This method might be invoked when printing diagnostic messages, for example,
-to obtain the name and line number of the all input files that are currently
-being processed.
-
-=end __PRIVATE__
-
-=cut
-
-sub input_streams {
- return $_[0]->{_INPUT_STREAMS};
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head1 B<top_stream()>
-
- $hashref = $parser->top_stream();
-
-Returns a reference to the hash-table that represents the element
-that is currently at the top (end) of the input stream stack
-(see L<"input_streams()">). The return value will be the C<undef>
-if the input stack is empty.
-
-This method might be used when printing diagnostic messages, for example,
-to obtain the name and line number of the current input file.
-
-=end __PRIVATE__
-
-=cut
-
-sub top_stream {
- return $_[0]->{_TOP_STREAM} || undef;
-}
-
-#############################################################################
-
-=head1 PRIVATE METHODS AND DATA
-
-B<Pod::Parser> makes use of several internal methods and data fields
-which clients should not need to see or use. For the sake of avoiding
-name collisions for client data and methods, these methods and fields
-are briefly discussed here. Determined hackers may obtain further
-information about them by reading the B<Pod::Parser> source code.
-
-Private data fields are stored in the hash-object whose reference is
-returned by the B<new()> constructor for this class. The names of all
-private methods and data-fields used by B<Pod::Parser> begin with a
-prefix of "_" and match the regular expression C</^_\w+$/>.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head1 B<_push_input_stream()>
-
- $hashref = $parser->_push_input_stream($in_fh,$out_fh);
-
-This method will push the given input stream on the input stack and
-perform any necessary beginning-of-document or beginning-of-file
-processing. The argument C<$in_fh> is the input stream filehandle to
-push, and C<$out_fh> is the corresponding output filehandle to use (if
-it is not given or is undefined, then the current output stream is used,
-which defaults to standard output if it doesnt exist yet).
-
-The value returned will be reference to the hash-table that represents
-the new top of the input stream stack. I<Please Note> that it is
-possible for this method to use default values for the input and output
-file handles. If this happens, you will need to look at the C<INPUT>
-and C<OUTPUT> instance data members to determine their new values.
-
-=end _PRIVATE_
-
-=cut
-
-sub _push_input_stream {
- my ($self, $in_fh, $out_fh) = @_;
- local *myData = $self;
-
- ## Initialize stuff for the entire document if this is *not*
- ## an included file.
- ##
- ## NOTE: we need to be *very* careful when "defaulting" the output
- ## filehandle. We only want to use a default value if this is the
- ## beginning of the entire document (but *not* if this is an included
- ## file).
- unless (defined $myData{_TOP_STREAM}) {
- $out_fh = \*STDOUT unless (defined $out_fh);
- $myData{_CUTTING} = 1; ## current "cutting" state
- $myData{_INPUT_STREAMS} = []; ## stack of all input streams
- }
-
- ## Initialize input indicators
- $myData{_OUTFILE} = '(unknown)' unless (defined $myData{_OUTFILE});
- $myData{_OUTPUT} = $out_fh if (defined $out_fh);
- $in_fh = \*STDIN unless (defined $in_fh);
- $myData{_INFILE} = '(unknown)' unless (defined $myData{_INFILE});
- $myData{_INPUT} = $in_fh;
- my $input_top = $myData{_TOP_STREAM}
- = new Pod::InputSource(
- -name => $myData{_INFILE},
- -handle => $in_fh,
- -was_cutting => $myData{_CUTTING}
- );
- local *input_stack = $myData{_INPUT_STREAMS};
- push(@input_stack, $input_top);
-
- ## Perform beginning-of-document and/or beginning-of-input processing
- $self->begin_pod() if (@input_stack == 1);
- $self->begin_input();
-
- return $input_top;
-}
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head1 B<_pop_input_stream()>
-
- $hashref = $parser->_pop_input_stream();
-
-This takes no arguments. It will perform any necessary end-of-file or
-end-of-document processing and then pop the current input stream from
-the top of the input stack.
-
-The value returned will be reference to the hash-table that represents
-the new top of the input stream stack.
-
-=end _PRIVATE_
-
-=cut
-
-sub _pop_input_stream {
- my ($self) = @_;
- local *myData = $self;
- local *input_stack = $myData{_INPUT_STREAMS};
-
- ## Perform end-of-input and/or end-of-document processing
- $self->end_input() if (@input_stack > 0);
- $self->end_pod() if (@input_stack == 1);
-
- ## Restore cutting state to whatever it was before we started
- ## parsing this file.
- my $old_top = pop(@input_stack);
- $myData{_CUTTING} = $old_top->was_cutting();
-
- ## Dont forget to reset the input indicators
- my $input_top = undef;
- if (@input_stack > 0) {
- $input_top = $myData{_TOP_STREAM} = $input_stack[-1];
- $myData{_INFILE} = $input_top->name();
- $myData{_INPUT} = $input_top->handle();
- } else {
- delete $myData{_TOP_STREAM};
- delete $myData{_INPUT_STREAMS};
- }
-
- return $input_top;
-}
-
-#############################################################################
-
-=head1 TREE-BASED PARSING
-
-If straightforward stream-based parsing wont meet your needs (as is
-likely the case for tasks such as translating PODs into structured
-markup languages like HTML and XML) then you may need to take the
-tree-based approach. Rather than doing everything in one pass and
-calling the B<interpolate()> method to expand sequences into text, it
-may be desirable to instead create a parse-tree using the B<parse_text()>
-method to return a tree-like structure which may contain an ordered list
-list of children (each of which may be a text-string, or a similar
-tree-like structure).
-
-Pay special attention to L<"METHODS FOR PARSING AND PROCESSING"> and
-to the objects described in L<Pod::InputObjects>. The former describes
-the gory details and parameters for how to customize and extend the
-parsing behavior of B<Pod::Parser>. B<Pod::InputObjects> provides
-several objects that may all be used interchangeably as parse-trees. The
-most obvious one is the B<Pod::ParseTree> object. It defines the basic
-interface and functionality that all things trying to be a POD parse-tree
-should do. A B<Pod::ParseTree> is defined such that each "node" may be a
-text-string, or a reference to another parse-tree. Each B<Pod::Paragraph>
-object and each B<Pod::InteriorSequence> object also supports the basic
-parse-tree interface.
-
-The B<parse_text()> method takes a given paragraph of text, and
-returns a parse-tree that contains one or more children, each of which
-may be a text-string, or an InteriorSequence object. There are also
-callback-options that may be passed to B<parse_text()> to customize
-the way it expands or transforms interior-sequences, as well as the
-returned result. These callbacks can be used to create a parse-tree
-with custom-made objects (which may or may not support the parse-tree
-interface, depending on how you choose to do it).
-
-If you wish to turn an entire POD document into a parse-tree, that process
-is fairly straightforward. The B<parse_text()> method is the key to doing
-this successfully. Every paragraph-callback (i.e. the polymorphic methods
-for B<command()>, B<verbatim()>, and B<textblock()> paragraphs) takes
-a B<Pod::Paragraph> object as an argument. Each paragraph object has a
-B<parse_tree()> method that can be used to get or set a corresponding
-parse-tree. So for each of those paragraph-callback methods, simply call
-B<parse_text()> with the options you desire, and then use the returned
-parse-tree to assign to the given paragraph object.
-
-That gives you a parse-tree for each paragraph - so now all you need is
-an ordered list of paragraphs. You can maintain that yourself as a data
-element in the object/hash. The most straightforward way would be simply
-to use an array-ref, with the desired set of custom "options" for each
-invocation of B<parse_text>. Let's assume the desired option-set is
-given by the hash C<%options>. Then we might do something like the
-following:
-
- package MyPodParserTree;
-
- @ISA = qw( Pod::Parser );
-
- ...
-
- sub begin_pod {
- my $self = shift;
- $self->{'-paragraphs'} = []; ## initialize paragraph list
- }
-
- sub command {
- my ($parser, $command, $paragraph, $line_num, $pod_para) = @_;
- my $ptree = $parser->parse_text({%options}, $paragraph, ...);
- $pod_para->parse_tree( $ptree );
- push @{ $self->{'-paragraphs'} }, $pod_para;
- }
-
- sub verbatim {
- my ($parser, $paragraph, $line_num, $pod_para) = @_;
- push @{ $self->{'-paragraphs'} }, $pod_para;
- }
-
- sub textblock {
- my ($parser, $paragraph, $line_num, $pod_para) = @_;
- my $ptree = $parser->parse_text({%options}, $paragraph, ...);
- $pod_para->parse_tree( $ptree );
- push @{ $self->{'-paragraphs'} }, $pod_para;
- }
-
- ...
-
- package main;
- ...
- my $parser = new MyPodParserTree(...);
- $parser->parse_from_file(...);
- my $paragraphs_ref = $parser->{'-paragraphs'};
-
-Of course, in this module-author's humble opinion, I'd be more inclined to
-use the existing B<Pod::ParseTree> object than a simple array. That way
-everything in it, paragraphs and sequences, all respond to the same core
-interface for all parse-tree nodes. The result would look something like:
-
- package MyPodParserTree2;
-
- ...
-
- sub begin_pod {
- my $self = shift;
- $self->{'-ptree'} = new Pod::ParseTree; ## initialize parse-tree
- }
-
- sub parse_tree {
- ## convenience method to get/set the parse-tree for the entire POD
- (@_ > 1) and $_[0]->{'-ptree'} = $_[1];
- return $_[0]->{'-ptree'};
- }
-
- sub command {
- my ($parser, $command, $paragraph, $line_num, $pod_para) = @_;
- my $ptree = $parser->parse_text({<<options>>}, $paragraph, ...);
- $pod_para->parse_tree( $ptree );
- $parser->parse_tree()->append( $pod_para );
- }
-
- sub verbatim {
- my ($parser, $paragraph, $line_num, $pod_para) = @_;
- $parser->parse_tree()->append( $pod_para );
- }
-
- sub textblock {
- my ($parser, $paragraph, $line_num, $pod_para) = @_;
- my $ptree = $parser->parse_text({<<options>>}, $paragraph, ...);
- $pod_para->parse_tree( $ptree );
- $parser->parse_tree()->append( $pod_para );
- }
-
- ...
-
- package main;
- ...
- my $parser = new MyPodParserTree2(...);
- $parser->parse_from_file(...);
- my $ptree = $parser->parse_tree;
- ...
-
-Now you have the entire POD document as one great big parse-tree. You
-can even use the B<-expand_seq> option to B<parse_text> to insert
-whole different kinds of objects. Just don't expect B<Pod::Parser>
-to know what to do with them after that. That will need to be in your
-code. Or, alternatively, you can insert any object you like so long as
-it conforms to the B<Pod::ParseTree> interface.
-
-One could use this to create subclasses of B<Pod::Paragraphs> and
-B<Pod::InteriorSequences> for specific commands (or to create your own
-custom node-types in the parse-tree) and add some kind of B<emit()>
-method to each custom node/subclass object in the tree. Then all you'd
-need to do is recursively walk the tree in the desired order, processing
-the children (most likely from left to right) by formatting them if
-they are text-strings, or by calling their B<emit()> method if they
-are objects/references.
-
-=head1 SEE ALSO
-
-L<Pod::InputObjects>, L<Pod::Select>
-
-B<Pod::InputObjects> defines POD input objects corresponding to
-command paragraphs, parse-trees, and interior-sequences.
-
-B<Pod::Select> is a subclass of B<Pod::Parser> which provides the ability
-to selectively include and/or exclude sections of a POD document from being
-translated based upon the current heading, subheading, subsubheading, etc.
-
-=for __PRIVATE__
-B<Pod::Callbacks> is a subclass of B<Pod::Parser> which gives its users
-the ability the employ I<callback functions> instead of, or in addition
-to, overriding methods of the base class.
-
-=for __PRIVATE__
-B<Pod::Select> and B<Pod::Callbacks> do not override any
-methods nor do they define any new methods with the same name. Because
-of this, they may I<both> be used (in combination) as a base class of
-the same subclass in order to combine their functionality without
-causing any namespace clashes due to multiple inheritance.
-
-=head1 AUTHOR
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-Based on code for B<Pod::Text> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/Pod/Plainer.pm b/contrib/perl5/lib/Pod/Plainer.pm
deleted file mode 100644
index 373e8d0..0000000
--- a/contrib/perl5/lib/Pod/Plainer.pm
+++ /dev/null
@@ -1,69 +0,0 @@
-package Pod::Plainer;
-use strict;
-use Pod::Parser;
-our @ISA = qw(Pod::Parser);
-our $VERSION = '0.01';
-
-our %E = qw( < lt > gt );
-
-sub escape_ltgt {
- (undef, my $text) = @_;
- $text =~ s/([<>])/E<$E{$1}>/g;
- $text
-}
-
-sub simple_delimiters {
- (undef, my $seq) = @_;
- $seq -> left_delimiter( '<' );
- $seq -> right_delimiter( '>' );
- $seq;
-}
-
-sub textblock {
- my($parser,$text,$line) = @_;
- print {$parser->output_handle()}
- $parser->parse_text(
- { -expand_text => q(escape_ltgt),
- -expand_seq => q(simple_delimiters) },
- $text, $line ) -> raw_text();
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Pod::Plainer - Perl extension for converting Pod to old style Pod.
-
-=head1 SYNOPSIS
-
- use Pod::Plainer;
-
- my $parser = Pod::Plainer -> new ();
- $parser -> parse_from_filehandle(\*STDIN);
-
-=head1 DESCRIPTION
-
-Pod::Plainer uses Pod::Parser which takes Pod with the (new)
-'CE<lt>E<lt> .. E<gt>E<gt>' constructs
-and returns the old(er) style with just 'CE<lt>E<gt>';
-'<' and '>' are replaced by 'EE<lt>ltE<gt>' and 'EE<lt>gtE<gt>'.
-
-This can be used to pre-process Pod before using tools which do not
-recognise the new style Pods.
-
-=head2 EXPORT
-
-None by default.
-
-=head1 AUTHOR
-
-Robin Barker, rmb1@cise.npl.co.uk
-
-=head1 SEE ALSO
-
-See L<Pod::Parser>.
-
-=cut
-
diff --git a/contrib/perl5/lib/Pod/Select.pm b/contrib/perl5/lib/Pod/Select.pm
deleted file mode 100644
index e7c820f..0000000
--- a/contrib/perl5/lib/Pod/Select.pm
+++ /dev/null
@@ -1,751 +0,0 @@
-#############################################################################
-# Pod/Select.pm -- function to select portions of POD docs
-#
-# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Select;
-
-use vars qw($VERSION);
-$VERSION = 1.13; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-#############################################################################
-
-=head1 NAME
-
-Pod::Select, podselect() - extract selected sections of POD from input
-
-=head1 SYNOPSIS
-
- use Pod::Select;
-
- ## Select all the POD sections for each file in @filelist
- ## and print the result on standard output.
- podselect(@filelist);
-
- ## Same as above, but write to tmp.out
- podselect({-output => "tmp.out"}, @filelist):
-
- ## Select from the given filelist, only those POD sections that are
- ## within a 1st level section named any of: NAME, SYNOPSIS, OPTIONS.
- podselect({-sections => ["NAME|SYNOPSIS", "OPTIONS"]}, @filelist):
-
- ## Select the "DESCRIPTION" section of the PODs from STDIN and write
- ## the result to STDERR.
- podselect({-output => ">&STDERR", -sections => ["DESCRIPTION"]}, \*STDIN);
-
-or
-
- use Pod::Select;
-
- ## Create a parser object for selecting POD sections from the input
- $parser = new Pod::Select();
-
- ## Select all the POD sections for each file in @filelist
- ## and print the result to tmp.out.
- $parser->parse_from_file("<&STDIN", "tmp.out");
-
- ## Select from the given filelist, only those POD sections that are
- ## within a 1st level section named any of: NAME, SYNOPSIS, OPTIONS.
- $parser->select("NAME|SYNOPSIS", "OPTIONS");
- for (@filelist) { $parser->parse_from_file($_); }
-
- ## Select the "DESCRIPTION" and "SEE ALSO" sections of the PODs from
- ## STDIN and write the result to STDERR.
- $parser->select("DESCRIPTION");
- $parser->add_selection("SEE ALSO");
- $parser->parse_from_filehandle(\*STDIN, \*STDERR);
-
-=head1 REQUIRES
-
-perl5.005, Pod::Parser, Exporter, Carp
-
-=head1 EXPORTS
-
-podselect()
-
-=head1 DESCRIPTION
-
-B<podselect()> is a function which will extract specified sections of
-pod documentation from an input stream. This ability is provided by the
-B<Pod::Select> module which is a subclass of B<Pod::Parser>.
-B<Pod::Select> provides a method named B<select()> to specify the set of
-POD sections to select for processing/printing. B<podselect()> merely
-creates a B<Pod::Select> object and then invokes the B<podselect()>
-followed by B<parse_from_file()>.
-
-=head1 SECTION SPECIFICATIONS
-
-B<podselect()> and B<Pod::Select::select()> may be given one or more
-"section specifications" to restrict the text processed to only the
-desired set of sections and their corresponding subsections. A section
-specification is a string containing one or more Perl-style regular
-expressions separated by forward slashes ("/"). If you need to use a
-forward slash literally within a section title you can escape it with a
-backslash ("\/").
-
-The formal syntax of a section specification is:
-
-=over 4
-
-=item *
-
-I<head1-title-regex>/I<head2-title-regex>/...
-
-=back
-
-Any omitted or empty regular expressions will default to ".*".
-Please note that each regular expression given is implicitly
-anchored by adding "^" and "$" to the beginning and end. Also, if a
-given regular expression starts with a "!" character, then the
-expression is I<negated> (so C<!foo> would match anything I<except>
-C<foo>).
-
-Some example section specifications follow.
-
-=over 4
-
-=item *
-
-Match the C<NAME> and C<SYNOPSIS> sections and all of their subsections:
-
-C<NAME|SYNOPSIS>
-
-=item *
-
-Match only the C<Question> and C<Answer> subsections of the C<DESCRIPTION>
-section:
-
-C<DESCRIPTION/Question|Answer>
-
-=item *
-
-Match the C<Comments> subsection of I<all> sections:
-
-C</Comments>
-
-=item *
-
-Match all subsections of C<DESCRIPTION> I<except> for C<Comments>:
-
-C<DESCRIPTION/!Comments>
-
-=item *
-
-Match the C<DESCRIPTION> section but do I<not> match any of its subsections:
-
-C<DESCRIPTION/!.+>
-
-=item *
-
-Match all top level sections but none of their subsections:
-
-C</!.+>
-
-=back
-
-=begin _NOT_IMPLEMENTED_
-
-=head1 RANGE SPECIFICATIONS
-
-B<podselect()> and B<Pod::Select::select()> may be given one or more
-"range specifications" to restrict the text processed to only the
-desired ranges of paragraphs in the desired set of sections. A range
-specification is a string containing a single Perl-style regular
-expression (a regex), or else two Perl-style regular expressions
-(regexs) separated by a ".." (Perl's "range" operator is "..").
-The regexs in a range specification are delimited by forward slashes
-("/"). If you need to use a forward slash literally within a regex you
-can escape it with a backslash ("\/").
-
-The formal syntax of a range specification is:
-
-=over 4
-
-=item *
-
-/I<start-range-regex>/[../I<end-range-regex>/]
-
-=back
-
-Where each the item inside square brackets (the ".." followed by the
-end-range-regex) is optional. Each "range-regex" is of the form:
-
- =cmd-expr text-expr
-
-Where I<cmd-expr> is intended to match the name of one or more POD
-commands, and I<text-expr> is intended to match the paragraph text for
-the command. If a range-regex is supposed to match a POD command, then
-the first character of the regex (the one after the initial '/')
-absolutely I<must> be an single '=' character; it may not be anything
-else (not even a regex meta-character) if it is supposed to match
-against the name of a POD command.
-
-If no I<=cmd-expr> is given then the text-expr will be matched against
-plain textblocks unless it is preceded by a space, in which case it is
-matched against verbatim text-blocks. If no I<text-expr> is given then
-only the command-portion of the paragraph is matched against.
-
-Note that these two expressions are each implicitly anchored. This
-means that when matching against the command-name, there will be an
-implicit '^' and '$' around the given I<=cmd-expr>; and when matching
-against the paragraph text there will be an implicit '\A' and '\Z'
-around the given I<text-expr>.
-
-Unlike with section-specs, the '!' character does I<not> have any special
-meaning (negation or otherwise) at the beginning of a range-spec!
-
-Some example range specifications follow.
-
-=over 4
-
-=item
-Match all C<=for html> paragraphs:
-
-C</=for html/>
-
-=item
-Match all paragraphs between C<=begin html> and C<=end html>
-(note that this will I<not> work correctly if such sections
-are nested):
-
-C</=begin html/../=end html/>
-
-=item
-Match all paragraphs between the given C<=item> name until the end of the
-current section:
-
-C</=item mine/../=head\d/>
-
-=item
-Match all paragraphs between the given C<=item> until the next item, or
-until the end of the itemized list (note that this will I<not> work as
-desired if the item contains an itemized list nested within it):
-
-C</=item mine/../=(item|back)/>
-
-=back
-
-=end _NOT_IMPLEMENTED_
-
-=cut
-
-#############################################################################
-
-use strict;
-#use diagnostics;
-use Carp;
-use Pod::Parser 1.04;
-use vars qw(@ISA @EXPORT $MAX_HEADING_LEVEL);
-
-@ISA = qw(Pod::Parser);
-@EXPORT = qw(&podselect);
-
-## Maximum number of heading levels supported for '=headN' directives
-*MAX_HEADING_LEVEL = \3;
-
-#############################################################################
-
-=head1 OBJECT METHODS
-
-The following methods are provided in this module. Each one takes a
-reference to the object itself as an implicit first parameter.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-## =begin _PRIVATE_
-##
-## =head1 B<_init_headings()>
-##
-## Initialize the current set of active section headings.
-##
-## =cut
-##
-## =end _PRIVATE_
-
-use vars qw(%myData @section_headings);
-
-sub _init_headings {
- my $self = shift;
- local *myData = $self;
-
- ## Initialize current section heading titles if necessary
- unless (defined $myData{_SECTION_HEADINGS}) {
- local *section_headings = $myData{_SECTION_HEADINGS} = [];
- for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) {
- $section_headings[$i] = '';
- }
- }
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<curr_headings()>
-
- ($head1, $head2, $head3, ...) = $parser->curr_headings();
- $head1 = $parser->curr_headings(1);
-
-This method returns a list of the currently active section headings and
-subheadings in the document being parsed. The list of headings returned
-corresponds to the most recently parsed paragraph of the input.
-
-If an argument is given, it must correspond to the desired section
-heading number, in which case only the specified section heading is
-returned. If there is no current section heading at the specified
-level, then C<undef> is returned.
-
-=cut
-
-sub curr_headings {
- my $self = shift;
- $self->_init_headings() unless (defined $self->{_SECTION_HEADINGS});
- my @headings = @{ $self->{_SECTION_HEADINGS} };
- return (@_ > 0 and $_[0] =~ /^\d+$/) ? $headings[$_[0] - 1] : @headings;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<select()>
-
- $parser->select($section_spec1,$section_spec2,...);
-
-This method is used to select the particular sections and subsections of
-POD documentation that are to be printed and/or processed. The existing
-set of selected sections is I<replaced> with the given set of sections.
-See B<add_selection()> for adding to the current set of selected
-sections.
-
-Each of the C<$section_spec> arguments should be a section specification
-as described in L<"SECTION SPECIFICATIONS">. The section specifications
-are parsed by this method and the resulting regular expressions are
-stored in the invoking object.
-
-If no C<$section_spec> arguments are given, then the existing set of
-selected sections is cleared out (which means C<all> sections will be
-processed).
-
-This method should I<not> normally be overridden by subclasses.
-
-=cut
-
-use vars qw(@selected_sections);
-
-sub select {
- my $self = shift;
- my @sections = @_;
- local *myData = $self;
- local $_;
-
-### NEED TO DISCERN A SECTION-SPEC FROM A RANGE-SPEC (look for m{^/.+/$}?)
-
- ##---------------------------------------------------------------------
- ## The following is a blatant hack for backward compatibility, and for
- ## implementing add_selection(). If the *first* *argument* is the
- ## string "+", then the remaining section specifications are *added*
- ## to the current set of selections; otherwise the given section
- ## specifications will *replace* the current set of selections.
- ##
- ## This should probably be fixed someday, but for the present time,
- ## it seems incredibly unlikely that "+" would ever correspond to
- ## a legitimate section heading
- ##---------------------------------------------------------------------
- my $add = ($sections[0] eq "+") ? shift(@sections) : "";
-
- ## Reset the set of sections to use
- unless (@sections > 0) {
- delete $myData{_SELECTED_SECTIONS} unless ($add);
- return;
- }
- $myData{_SELECTED_SECTIONS} = []
- unless ($add && exists $myData{_SELECTED_SECTIONS});
- local *selected_sections = $myData{_SELECTED_SECTIONS};
-
- ## Compile each spec
- my $spec;
- for $spec (@sections) {
- if ( defined($_ = &_compile_section_spec($spec)) ) {
- ## Store them in our sections array
- push(@selected_sections, $_);
- }
- else {
- carp "Ignoring section spec \"$spec\"!\n";
- }
- }
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<add_selection()>
-
- $parser->add_selection($section_spec1,$section_spec2,...);
-
-This method is used to add to the currently selected sections and
-subsections of POD documentation that are to be printed and/or
-processed. See <select()> for replacing the currently selected sections.
-
-Each of the C<$section_spec> arguments should be a section specification
-as described in L<"SECTION SPECIFICATIONS">. The section specifications
-are parsed by this method and the resulting regular expressions are
-stored in the invoking object.
-
-This method should I<not> normally be overridden by subclasses.
-
-=cut
-
-sub add_selection {
- my $self = shift;
- $self->select("+", @_);
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<clear_selections()>
-
- $parser->clear_selections();
-
-This method takes no arguments, it has the exact same effect as invoking
-<select()> with no arguments.
-
-=cut
-
-sub clear_selections {
- my $self = shift;
- $self->select();
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<match_section()>
-
- $boolean = $parser->match_section($heading1,$heading2,...);
-
-Returns a value of true if the given section and subsection heading
-titles match any of the currently selected section specifications in
-effect from prior calls to B<select()> and B<add_selection()> (or if
-there are no explictly selected/deselected sections).
-
-The arguments C<$heading1>, C<$heading2>, etc. are the heading titles of
-the corresponding sections, subsections, etc. to try and match. If
-C<$headingN> is omitted then it defaults to the current corresponding
-section heading title in the input.
-
-This method should I<not> normally be overridden by subclasses.
-
-=cut
-
-sub match_section {
- my $self = shift;
- my (@headings) = @_;
- local *myData = $self;
-
- ## Return true if no restrictions were explicitly specified
- my $selections = (exists $myData{_SELECTED_SECTIONS})
- ? $myData{_SELECTED_SECTIONS} : undef;
- return 1 unless ((defined $selections) && (@{$selections} > 0));
-
- ## Default any unspecified sections to the current one
- my @current_headings = $self->curr_headings();
- for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) {
- (defined $headings[$i]) or $headings[$i] = $current_headings[$i];
- }
-
- ## Look for a match against the specified section expressions
- my ($section_spec, $regex, $negated, $match);
- for $section_spec ( @{$selections} ) {
- ##------------------------------------------------------
- ## Each portion of this spec must match in order for
- ## the spec to be matched. So we will start with a
- ## match-value of 'true' and logically 'and' it with
- ## the results of matching a given element of the spec.
- ##------------------------------------------------------
- $match = 1;
- for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) {
- $regex = $section_spec->[$i];
- $negated = ($regex =~ s/^\!//);
- $match &= ($negated ? ($headings[$i] !~ /${regex}/)
- : ($headings[$i] =~ /${regex}/));
- last unless ($match);
- }
- return 1 if ($match);
- }
- return 0; ## no match
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<is_selected()>
-
- $boolean = $parser->is_selected($paragraph);
-
-This method is used to determine if the block of text given in
-C<$paragraph> falls within the currently selected set of POD sections
-and subsections to be printed or processed. This method is also
-responsible for keeping track of the current input section and
-subsections. It is assumed that C<$paragraph> is the most recently read
-(but not yet processed) input paragraph.
-
-The value returned will be true if the C<$paragraph> and the rest of the
-text in the same section as C<$paragraph> should be selected (included)
-for processing; otherwise a false value is returned.
-
-=cut
-
-sub is_selected {
- my ($self, $paragraph) = @_;
- local $_;
- local *myData = $self;
-
- $self->_init_headings() unless (defined $myData{_SECTION_HEADINGS});
-
- ## Keep track of current sections levels and headings
- $_ = $paragraph;
- if (/^=((?:sub)*)(?:head(?:ing)?|sec(?:tion)?)(\d*)\s+(.*)\s*$/) {
- ## This is a section heading command
- my ($level, $heading) = ($2, $3);
- $level = 1 + (length($1) / 3) if ((! length $level) || (length $1));
- ## Reset the current section heading at this level
- $myData{_SECTION_HEADINGS}->[$level - 1] = $heading;
- ## Reset subsection headings of this one to empty
- for (my $i = $level; $i < $MAX_HEADING_LEVEL; ++$i) {
- $myData{_SECTION_HEADINGS}->[$i] = '';
- }
- }
-
- return $self->match_section();
-}
-
-#############################################################################
-
-=head1 EXPORTED FUNCTIONS
-
-The following functions are exported by this module. Please note that
-these are functions (not methods) and therefore C<do not> take an
-implicit first argument.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<podselect()>
-
- podselect(\%options,@filelist);
-
-B<podselect> will print the raw (untranslated) POD paragraphs of all
-POD sections in the given input files specified by C<@filelist>
-according to the given options.
-
-If any argument to B<podselect> is a reference to a hash
-(associative array) then the values with the following keys are
-processed as follows:
-
-=over 4
-
-=item B<-output>
-
-A string corresponding to the desired output file (or ">&STDOUT"
-or ">&STDERR"). The default is to use standard output.
-
-=item B<-sections>
-
-A reference to an array of sections specifications (as described in
-L<"SECTION SPECIFICATIONS">) which indicate the desired set of POD
-sections and subsections to be selected from input. If no section
-specifications are given, then all sections of the PODs are used.
-
-=begin _NOT_IMPLEMENTED_
-
-=item B<-ranges>
-
-A reference to an array of range specifications (as described in
-L<"RANGE SPECIFICATIONS">) which indicate the desired range of POD
-paragraphs to be selected from the desired input sections. If no range
-specifications are given, then all paragraphs of the desired sections
-are used.
-
-=end _NOT_IMPLEMENTED_
-
-=back
-
-All other arguments should correspond to the names of input files
-containing POD sections. A file name of "-" or "<&STDIN" will
-be interpeted to mean standard input (which is the default if no
-filenames are given).
-
-=cut
-
-sub podselect {
- my(@argv) = @_;
- my %defaults = ();
- my $pod_parser = new Pod::Select(%defaults);
- my $num_inputs = 0;
- my $output = ">&STDOUT";
- my %opts = ();
- local $_;
- for (@argv) {
- if (ref($_)) {
- next unless (ref($_) eq 'HASH');
- %opts = (%defaults, %{$_});
-
- ##-------------------------------------------------------------
- ## Need this for backward compatibility since we formerly used
- ## options that were all uppercase words rather than ones that
- ## looked like Unix command-line options.
- ## to be uppercase keywords)
- ##-------------------------------------------------------------
- %opts = map {
- my ($key, $val) = (lc $_, $opts{$_});
- $key =~ s/^(?=\w)/-/;
- $key =~ /^-se[cl]/ and $key = '-sections';
- #! $key eq '-range' and $key .= 's';
- ($key => $val);
- } (keys %opts);
-
- ## Process the options
- (exists $opts{'-output'}) and $output = $opts{'-output'};
-
- ## Select the desired sections
- $pod_parser->select(@{ $opts{'-sections'} })
- if ( (defined $opts{'-sections'})
- && ((ref $opts{'-sections'}) eq 'ARRAY') );
-
- #! ## Select the desired paragraph ranges
- #! $pod_parser->select(@{ $opts{'-ranges'} })
- #! if ( (defined $opts{'-ranges'})
- #! && ((ref $opts{'-ranges'}) eq 'ARRAY') );
- }
- else {
- $pod_parser->parse_from_file($_, $output);
- ++$num_inputs;
- }
- }
- $pod_parser->parse_from_file("-") unless ($num_inputs > 0);
-}
-
-#############################################################################
-
-=head1 PRIVATE METHODS AND DATA
-
-B<Pod::Select> makes uses a number of internal methods and data fields
-which clients should not need to see or use. For the sake of avoiding
-name collisions with client data and methods, these methods and fields
-are briefly discussed here. Determined hackers may obtain further
-information about them by reading the B<Pod::Select> source code.
-
-Private data fields are stored in the hash-object whose reference is
-returned by the B<new()> constructor for this class. The names of all
-private methods and data-fields used by B<Pod::Select> begin with a
-prefix of "_" and match the regular expression C</^_\w+$/>.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head1 B<_compile_section_spec()>
-
- $listref = $parser->_compile_section_spec($section_spec);
-
-This function (note it is a function and I<not> a method) takes a
-section specification (as described in L<"SECTION SPECIFICATIONS">)
-given in C<$section_sepc>, and compiles it into a list of regular
-expressions. If C<$section_spec> has no syntax errors, then a reference
-to the list (array) of corresponding regular expressions is returned;
-otherwise C<undef> is returned and an error message is printed (using
-B<carp>) for each invalid regex.
-
-=end _PRIVATE_
-
-=cut
-
-sub _compile_section_spec {
- my ($section_spec) = @_;
- my (@regexs, $negated);
-
- ## Compile the spec into a list of regexs
- local $_ = $section_spec;
- s|\\\\|\001|g; ## handle escaped backward slashes
- s|\\/|\002|g; ## handle escaped forward slashes
-
- ## Parse the regexs for the heading titles
- @regexs = split('/', $_, $MAX_HEADING_LEVEL);
-
- ## Set default regex for ommitted levels
- for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) {
- $regexs[$i] = '.*' unless ((defined $regexs[$i])
- && (length $regexs[$i]));
- }
- ## Modify the regexs as needed and validate their syntax
- my $bad_regexs = 0;
- for (@regexs) {
- $_ .= '.+' if ($_ eq '!');
- s|\001|\\\\|g; ## restore escaped backward slashes
- s|\002|\\/|g; ## restore escaped forward slashes
- $negated = s/^\!//; ## check for negation
- eval "/$_/"; ## check regex syntax
- if ($@) {
- ++$bad_regexs;
- carp "Bad regular expression /$_/ in \"$section_spec\": $@\n";
- }
- else {
- ## Add the forward and rear anchors (and put the negator back)
- $_ = '^' . $_ unless (/^\^/);
- $_ = $_ . '$' unless (/\$$/);
- $_ = '!' . $_ if ($negated);
- }
- }
- return (! $bad_regexs) ? [ @regexs ] : undef;
-}
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head2 $self->{_SECTION_HEADINGS}
-
-A reference to an array of the current section heading titles for each
-heading level (note that the first heading level title is at index 0).
-
-=end _PRIVATE_
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head2 $self->{_SELECTED_SECTIONS}
-
-A reference to an array of references to arrays. Each subarray is a list
-of anchored regular expressions (preceded by a "!" if the expression is to
-be negated). The index of the expression in the subarray should correspond
-to the index of the heading title in C<$self-E<gt>{_SECTION_HEADINGS}>
-that it is to be matched against.
-
-=end _PRIVATE_
-
-=cut
-
-#############################################################################
-
-=head1 SEE ALSO
-
-L<Pod::Parser>
-
-=head1 AUTHOR
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-Based on code for B<pod2text> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=cut
-
-1;
-
diff --git a/contrib/perl5/lib/Pod/Text.pm b/contrib/perl5/lib/Pod/Text.pm
deleted file mode 100644
index 9936025..0000000
--- a/contrib/perl5/lib/Pod/Text.pm
+++ /dev/null
@@ -1,827 +0,0 @@
-# Pod::Text -- Convert POD data to formatted ASCII text.
-# $Id: Text.pm,v 2.8 2001/02/10 06:50:23 eagle Exp $
-#
-# Copyright 1999, 2000, 2001 by Russ Allbery <rra@stanford.edu>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# This module is intended to be a replacement for Pod::Text, and attempts to
-# match its output except for some specific circumstances where other
-# decisions seemed to produce better output. It uses Pod::Parser and is
-# designed to be very easy to subclass.
-
-############################################################################
-# Modules and declarations
-############################################################################
-
-package Pod::Text;
-
-require 5.004;
-
-use Carp qw(carp croak);
-use Exporter ();
-use Pod::Select ();
-
-use strict;
-use vars qw(@ISA @EXPORT %ESCAPES $VERSION);
-
-# We inherit from Pod::Select instead of Pod::Parser so that we can be used
-# by Pod::Usage.
-@ISA = qw(Pod::Select Exporter);
-
-# We have to export pod2text for backward compatibility.
-@EXPORT = qw(pod2text);
-
-# Don't use the CVS revision as the version, since this module is also in
-# Perl core and too many things could munge CVS magic revision strings.
-# This number should ideally be the same as the CVS revision in podlators,
-# however.
-$VERSION = 2.08;
-
-
-############################################################################
-# Table of supported E<> escapes
-############################################################################
-
-# This table is taken near verbatim from Pod::PlainText in Pod::Parser,
-# which got it near verbatim from the original Pod::Text. It is therefore
-# credited to Tom Christiansen, and I'm glad I didn't have to write it. :)
-# "iexcl" to "divide" added by Tim Jenness.
-%ESCAPES = (
- 'amp' => '&', # ampersand
- 'lt' => '<', # left chevron, less-than
- 'gt' => '>', # right chevron, greater-than
- 'quot' => '"', # double quote
- 'sol' => '/', # solidus (forward slash)
- 'verbar' => '|', # vertical bar
-
- "Aacute" => "\xC1", # capital A, acute accent
- "aacute" => "\xE1", # small a, acute accent
- "Acirc" => "\xC2", # capital A, circumflex accent
- "acirc" => "\xE2", # small a, circumflex accent
- "AElig" => "\xC6", # capital AE diphthong (ligature)
- "aelig" => "\xE6", # small ae diphthong (ligature)
- "Agrave" => "\xC0", # capital A, grave accent
- "agrave" => "\xE0", # small a, grave accent
- "Aring" => "\xC5", # capital A, ring
- "aring" => "\xE5", # small a, ring
- "Atilde" => "\xC3", # capital A, tilde
- "atilde" => "\xE3", # small a, tilde
- "Auml" => "\xC4", # capital A, dieresis or umlaut mark
- "auml" => "\xE4", # small a, dieresis or umlaut mark
- "Ccedil" => "\xC7", # capital C, cedilla
- "ccedil" => "\xE7", # small c, cedilla
- "Eacute" => "\xC9", # capital E, acute accent
- "eacute" => "\xE9", # small e, acute accent
- "Ecirc" => "\xCA", # capital E, circumflex accent
- "ecirc" => "\xEA", # small e, circumflex accent
- "Egrave" => "\xC8", # capital E, grave accent
- "egrave" => "\xE8", # small e, grave accent
- "ETH" => "\xD0", # capital Eth, Icelandic
- "eth" => "\xF0", # small eth, Icelandic
- "Euml" => "\xCB", # capital E, dieresis or umlaut mark
- "euml" => "\xEB", # small e, dieresis or umlaut mark
- "Iacute" => "\xCC", # capital I, acute accent
- "iacute" => "\xEC", # small i, acute accent
- "Icirc" => "\xCE", # capital I, circumflex accent
- "icirc" => "\xEE", # small i, circumflex accent
- "Igrave" => "\xCD", # capital I, grave accent
- "igrave" => "\xED", # small i, grave accent
- "Iuml" => "\xCF", # capital I, dieresis or umlaut mark
- "iuml" => "\xEF", # small i, dieresis or umlaut mark
- "Ntilde" => "\xD1", # capital N, tilde
- "ntilde" => "\xF1", # small n, tilde
- "Oacute" => "\xD3", # capital O, acute accent
- "oacute" => "\xF3", # small o, acute accent
- "Ocirc" => "\xD4", # capital O, circumflex accent
- "ocirc" => "\xF4", # small o, circumflex accent
- "Ograve" => "\xD2", # capital O, grave accent
- "ograve" => "\xF2", # small o, grave accent
- "Oslash" => "\xD8", # capital O, slash
- "oslash" => "\xF8", # small o, slash
- "Otilde" => "\xD5", # capital O, tilde
- "otilde" => "\xF5", # small o, tilde
- "Ouml" => "\xD6", # capital O, dieresis or umlaut mark
- "ouml" => "\xF6", # small o, dieresis or umlaut mark
- "szlig" => "\xDF", # small sharp s, German (sz ligature)
- "THORN" => "\xDE", # capital THORN, Icelandic
- "thorn" => "\xFE", # small thorn, Icelandic
- "Uacute" => "\xDA", # capital U, acute accent
- "uacute" => "\xFA", # small u, acute accent
- "Ucirc" => "\xDB", # capital U, circumflex accent
- "ucirc" => "\xFB", # small u, circumflex accent
- "Ugrave" => "\xD9", # capital U, grave accent
- "ugrave" => "\xF9", # small u, grave accent
- "Uuml" => "\xDC", # capital U, dieresis or umlaut mark
- "uuml" => "\xFC", # small u, dieresis or umlaut mark
- "Yacute" => "\xDD", # capital Y, acute accent
- "yacute" => "\xFD", # small y, acute accent
- "yuml" => "\xFF", # small y, dieresis or umlaut mark
-
- "laquo" => "\xAB", # left pointing double angle quotation mark
- "lchevron" => "\xAB", # synonym (backwards compatibility)
- "raquo" => "\xBB", # right pointing double angle quotation mark
- "rchevron" => "\xBB", # synonym (backwards compatibility)
-
- "iexcl" => "\xA1", # inverted exclamation mark
- "cent" => "\xA2", # cent sign
- "pound" => "\xA3", # (UK) pound sign
- "curren" => "\xA4", # currency sign
- "yen" => "\xA5", # yen sign
- "brvbar" => "\xA6", # broken vertical bar
- "sect" => "\xA7", # section sign
- "uml" => "\xA8", # diaresis
- "copy" => "\xA9", # Copyright symbol
- "ordf" => "\xAA", # feminine ordinal indicator
- "not" => "\xAC", # not sign
- "shy" => "\xAD", # soft hyphen
- "reg" => "\xAE", # registered trademark
- "macr" => "\xAF", # macron, overline
- "deg" => "\xB0", # degree sign
- "plusmn" => "\xB1", # plus-minus sign
- "sup2" => "\xB2", # superscript 2
- "sup3" => "\xB3", # superscript 3
- "acute" => "\xB4", # acute accent
- "micro" => "\xB5", # micro sign
- "para" => "\xB6", # pilcrow sign = paragraph sign
- "middot" => "\xB7", # middle dot = Georgian comma
- "cedil" => "\xB8", # cedilla
- "sup1" => "\xB9", # superscript 1
- "ordm" => "\xBA", # masculine ordinal indicator
- "frac14" => "\xBC", # vulgar fraction one quarter
- "frac12" => "\xBD", # vulgar fraction one half
- "frac34" => "\xBE", # vulgar fraction three quarters
- "iquest" => "\xBF", # inverted question mark
- "times" => "\xD7", # multiplication sign
- "divide" => "\xF7", # division sign
-);
-
-
-############################################################################
-# Initialization
-############################################################################
-
-# Initialize the object. Must be sure to call our parent initializer.
-sub initialize {
- my $self = shift;
-
- $$self{alt} = 0 unless defined $$self{alt};
- $$self{indent} = 4 unless defined $$self{indent};
- $$self{loose} = 0 unless defined $$self{loose};
- $$self{sentence} = 0 unless defined $$self{sentence};
- $$self{width} = 76 unless defined $$self{width};
-
- # Figure out what quotes we'll be using for C<> text.
- $$self{quotes} ||= '"';
- if ($$self{quotes} eq 'none') {
- $$self{LQUOTE} = $$self{RQUOTE} = '';
- } elsif (length ($$self{quotes}) == 1) {
- $$self{LQUOTE} = $$self{RQUOTE} = $$self{quotes};
- } elsif ($$self{quotes} =~ /^(.)(.)$/
- || $$self{quotes} =~ /^(..)(..)$/) {
- $$self{LQUOTE} = $1;
- $$self{RQUOTE} = $2;
- } else {
- croak qq(Invalid quote specification "$$self{quotes}");
- }
-
- $$self{INDENTS} = []; # Stack of indentations.
- $$self{MARGIN} = $$self{indent}; # Current left margin in spaces.
-
- $self->SUPER::initialize;
-}
-
-
-############################################################################
-# Core overrides
-############################################################################
-
-# Called for each command paragraph. Gets the command, the associated
-# paragraph, the line number, and a Pod::Paragraph object. Just dispatches
-# the command to a method named the same as the command. =cut is handled
-# internally by Pod::Parser.
-sub command {
- my $self = shift;
- my $command = shift;
- return if $command eq 'pod';
- return if ($$self{EXCLUDE} && $command ne 'end');
- $self->item ("\n") if defined $$self{ITEM};
- if ($self->can ('cmd_' . $command)) {
- $command = 'cmd_' . $command;
- $self->$command (@_);
- } else {
- my ($text, $line, $paragraph) = @_;
- my $file;
- ($file, $line) = $paragraph->file_line;
- $text =~ s/\n+\z//;
- $text = " $text" if ($text =~ /^\S/);
- warn qq($file:$line: Unknown command paragraph "=$command$text"\n);
- return;
- }
-}
-
-# Called for a verbatim paragraph. Gets the paragraph, the line number, and
-# a Pod::Paragraph object. Just output it verbatim, but with tabs converted
-# to spaces.
-sub verbatim {
- my $self = shift;
- return if $$self{EXCLUDE};
- $self->item if defined $$self{ITEM};
- local $_ = shift;
- return if /^\s*$/;
- s/^(\s*\S+)/(' ' x $$self{MARGIN}) . $1/gme;
- $self->output ($_);
-}
-
-# Called for a regular text block. Gets the paragraph, the line number, and
-# a Pod::Paragraph object. Perform interpolation and output the results.
-sub textblock {
- my $self = shift;
- return if $$self{EXCLUDE};
- $self->output ($_[0]), return if $$self{VERBATIM};
- local $_ = shift;
- my $line = shift;
-
- # Perform a little magic to collapse multiple L<> references. This is
- # here mostly for backwards-compatibility. We'll just rewrite the whole
- # thing into actual text at this part, bypassing the whole internal
- # sequence parsing thing.
- s{
- (
- L< # A link of the form L</something>.
- /
- (
- [:\w]+ # The item has to be a simple word...
- (\(\))? # ...or simple function.
- )
- >
- (
- ,?\s+(and\s+)? # Allow lots of them, conjuncted.
- L<
- /
- (
- [:\w]+
- (\(\))?
- )
- >
- )+
- )
- } {
- local $_ = $1;
- s%L</([^>]+)>%$1%g;
- my @items = split /(?:,?\s+(?:and\s+)?)/;
- my $string = "the ";
- my $i;
- for ($i = 0; $i < @items; $i++) {
- $string .= $items[$i];
- $string .= ", " if @items > 2 && $i != $#items;
- $string .= " and " if ($i == $#items - 1);
- }
- $string .= " entries elsewhere in this document";
- $string;
- }gex;
-
- # Now actually interpolate and output the paragraph.
- $_ = $self->interpolate ($_, $line);
- s/\s+$/\n/;
- if (defined $$self{ITEM}) {
- $self->item ($_ . "\n");
- } else {
- $self->output ($self->reformat ($_ . "\n"));
- }
-}
-
-# Called for an interior sequence. Gets the command, argument, and a
-# Pod::InteriorSequence object and is expected to return the resulting text.
-# Calls code, bold, italic, file, and link to handle those types of
-# sequences, and handles S<>, E<>, X<>, and Z<> directly.
-sub interior_sequence {
- my $self = shift;
- my $command = shift;
- local $_ = shift;
- return '' if ($command eq 'X' || $command eq 'Z');
-
- # Expand escapes into the actual character now, carping if invalid.
- if ($command eq 'E') {
- if (/^\d+$/) {
- return chr;
- } else {
- return $ESCAPES{$_} if defined $ESCAPES{$_};
- carp "Unknown escape: E<$_>";
- return "E<$_>";
- }
- }
-
- # For all the other sequences, empty content produces no output.
- return if $_ eq '';
-
- # For S<>, compress all internal whitespace and then map spaces to \01.
- # When we output the text, we'll map this back.
- if ($command eq 'S') {
- s/\s{2,}/ /g;
- tr/ /\01/;
- return $_;
- }
-
- # Anything else needs to get dispatched to another method.
- if ($command eq 'B') { return $self->seq_b ($_) }
- elsif ($command eq 'C') { return $self->seq_c ($_) }
- elsif ($command eq 'F') { return $self->seq_f ($_) }
- elsif ($command eq 'I') { return $self->seq_i ($_) }
- elsif ($command eq 'L') { return $self->seq_l ($_) }
- else { carp "Unknown sequence $command<$_>" }
-}
-
-# Called for each paragraph that's actually part of the POD. We take
-# advantage of this opportunity to untabify the input.
-sub preprocess_paragraph {
- my $self = shift;
- local $_ = shift;
- 1 while s/^(.*?)(\t+)/$1 . ' ' x (length ($2) * 8 - length ($1) % 8)/me;
- $_;
-}
-
-
-############################################################################
-# Command paragraphs
-############################################################################
-
-# All command paragraphs take the paragraph and the line number.
-
-# First level heading.
-sub cmd_head1 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- $_ = $self->interpolate ($_, shift);
- if ($$self{alt}) {
- $self->output ("\n==== $_ ====\n\n");
- } else {
- $_ .= "\n" if $$self{loose};
- $self->output ($_ . "\n");
- }
-}
-
-# Second level heading.
-sub cmd_head2 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- $_ = $self->interpolate ($_, shift);
- if ($$self{alt}) {
- $self->output ("\n== $_ ==\n\n");
- } else {
- $self->output (' ' x ($$self{indent} / 2) . $_ . "\n\n");
- }
-}
-
-# Third level heading.
-sub cmd_head3 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- $_ = $self->interpolate ($_, shift);
- if ($$self{alt}) {
- $self->output ("\n= $_ =\n\n");
- } else {
- $self->output (' ' x ($$self{indent} * 2 / 3 + 0.5) . $_ . "\n\n");
- }
-}
-
-# Third level heading.
-sub cmd_head4 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- $_ = $self->interpolate ($_, shift);
- if ($$self{alt}) {
- $self->output ("\n- $_ -\n\n");
- } else {
- $self->output (' ' x ($$self{indent} * 3 / 4 + 0.5) . $_ . "\n\n");
- }
-}
-
-# Start a list.
-sub cmd_over {
- my $self = shift;
- local $_ = shift;
- unless (/^[-+]?\d+\s+$/) { $_ = $$self{indent} }
- push (@{ $$self{INDENTS} }, $$self{MARGIN});
- $$self{MARGIN} += ($_ + 0);
-}
-
-# End a list.
-sub cmd_back {
- my $self = shift;
- $$self{MARGIN} = pop @{ $$self{INDENTS} };
- unless (defined $$self{MARGIN}) {
- carp "Unmatched =back";
- $$self{MARGIN} = $$self{indent};
- }
-}
-
-# An individual list item.
-sub cmd_item {
- my $self = shift;
- if (defined $$self{ITEM}) { $self->item }
- local $_ = shift;
- s/\s+$//;
- $$self{ITEM} = $self->interpolate ($_);
-}
-
-# Begin a block for a particular translator. Setting VERBATIM triggers
-# special handling in textblock().
-sub cmd_begin {
- my $self = shift;
- local $_ = shift;
- my ($kind) = /^(\S+)/ or return;
- if ($kind eq 'text') {
- $$self{VERBATIM} = 1;
- } else {
- $$self{EXCLUDE} = 1;
- }
-}
-
-# End a block for a particular translator. We assume that all =begin/=end
-# pairs are properly closed.
-sub cmd_end {
- my $self = shift;
- $$self{EXCLUDE} = 0;
- $$self{VERBATIM} = 0;
-}
-
-# One paragraph for a particular translator. Ignore it unless it's intended
-# for text, in which case we treat it as a verbatim text block.
-sub cmd_for {
- my $self = shift;
- local $_ = shift;
- my $line = shift;
- return unless s/^text\b[ \t]*\n?//;
- $self->verbatim ($_, $line);
-}
-
-
-############################################################################
-# Interior sequences
-############################################################################
-
-# The simple formatting ones. These are here mostly so that subclasses can
-# override them and do more complicated things.
-sub seq_b { return $_[0]{alt} ? "``$_[1]''" : $_[1] }
-sub seq_f { return $_[0]{alt} ? "\"$_[1]\"" : $_[1] }
-sub seq_i { return '*' . $_[1] . '*' }
-sub seq_c {
- return $_[0]{alt} ? "``$_[1]''" : "$_[0]{LQUOTE}$_[1]$_[0]{RQUOTE}"
-}
-
-# The complicated one. Handle links. Since this is plain text, we can't
-# actually make any real links, so this is all to figure out what text we
-# print out.
-sub seq_l {
- my $self = shift;
- local $_ = shift;
-
- # Smash whitespace in case we were split across multiple lines.
- s/\s+/ /g;
-
- # If we were given any explicit text, just output it.
- if (/^([^|]+)\|/) { return $1 }
-
- # Okay, leading and trailing whitespace isn't important; get rid of it.
- s/^\s+//;
- s/\s+$//;
-
- # If the argument looks like a URL, return it verbatim. This only
- # handles URLs that use the server syntax.
- if (m%^[a-z]+://\S+$%) { return $_ }
-
- # Default to using the whole content of the link entry as a section
- # name. Note that L<manpage/> forces a manpage interpretation, as does
- # something looking like L<manpage(section)>. The latter is an
- # enhancement over the original Pod::Text.
- my ($manpage, $section) = ('', $_);
- if (/^"\s*(.*?)\s*"$/) {
- $section = '"' . $1 . '"';
- } elsif (m/^[-:.\w]+(?:\(\S+\))?$/) {
- ($manpage, $section) = ($_, '');
- } elsif (m%/%) {
- ($manpage, $section) = split (/\s*\/\s*/, $_, 2);
- }
-
- # Now build the actual output text.
- my $text = '';
- if (!length $section) {
- $text = "the $manpage manpage" if length $manpage;
- } elsif ($section =~ /^[:\w]+(?:\(\))?/) {
- $text .= 'the ' . $section . ' entry';
- $text .= (length $manpage) ? " in the $manpage manpage"
- : " elsewhere in this document";
- } else {
- $section =~ s/^\"\s*//;
- $section =~ s/\s*\"$//;
- $text .= 'the section on "' . $section . '"';
- $text .= " in the $manpage manpage" if length $manpage;
- }
- $text;
-}
-
-
-############################################################################
-# List handling
-############################################################################
-
-# This method is called whenever an =item command is complete (in other
-# words, we've seen its associated paragraph or know for certain that it
-# doesn't have one). It gets the paragraph associated with the item as an
-# argument. If that argument is empty, just output the item tag; if it
-# contains a newline, output the item tag followed by the newline.
-# Otherwise, see if there's enough room for us to output the item tag in the
-# margin of the text or if we have to put it on a separate line.
-sub item {
- my $self = shift;
- local $_ = shift;
- my $tag = $$self{ITEM};
- unless (defined $tag) {
- carp "item called without tag";
- return;
- }
- undef $$self{ITEM};
- my $indent = $$self{INDENTS}[-1];
- unless (defined $indent) { $indent = $$self{indent} }
- my $space = ' ' x $indent;
- $space =~ s/^ /:/ if $$self{alt};
- if (!$_ || /^\s+$/ || ($$self{MARGIN} - $indent < length ($tag) + 1)) {
- my $margin = $$self{MARGIN};
- $$self{MARGIN} = $indent;
- my $output = $self->reformat ($tag);
- $output =~ s/\n*$/\n/;
- $self->output ($output);
- $$self{MARGIN} = $margin;
- $self->output ($self->reformat ($_)) if /\S/;
- } else {
- $_ = $self->reformat ($_);
- s/^ /:/ if ($$self{alt} && $indent > 0);
- my $tagspace = ' ' x length $tag;
- s/^($space)$tagspace/$1$tag/ or warn "Bizarre space in item";
- $self->output ($_);
- }
-}
-
-
-############################################################################
-# Output formatting
-############################################################################
-
-# Wrap a line, indenting by the current left margin. We can't use
-# Text::Wrap because it plays games with tabs. We can't use formline, even
-# though we'd really like to, because it screws up non-printing characters.
-# So we have to do the wrapping ourselves.
-sub wrap {
- my $self = shift;
- local $_ = shift;
- my $output = '';
- my $spaces = ' ' x $$self{MARGIN};
- my $width = $$self{width} - $$self{MARGIN};
- while (length > $width) {
- if (s/^([^\n]{0,$width})\s+// || s/^([^\n]{$width})//) {
- $output .= $spaces . $1 . "\n";
- } else {
- last;
- }
- }
- $output .= $spaces . $_;
- $output =~ s/\s+$/\n\n/;
- $output;
-}
-
-# Reformat a paragraph of text for the current margin. Takes the text to
-# reformat and returns the formatted text.
-sub reformat {
- my $self = shift;
- local $_ = shift;
-
- # If we're trying to preserve two spaces after sentences, do some
- # munging to support that. Otherwise, smash all repeated whitespace.
- if ($$self{sentence}) {
- s/ +$//mg;
- s/\.\n/. \n/g;
- s/\n/ /g;
- s/ +/ /g;
- } else {
- s/\s+/ /g;
- }
- $self->wrap ($_);
-}
-
-# Output text to the output device.
-sub output { $_[1] =~ tr/\01/ /; print { $_[0]->output_handle } $_[1] }
-
-
-############################################################################
-# Backwards compatibility
-############################################################################
-
-# The old Pod::Text module did everything in a pod2text() function. This
-# tries to provide the same interface for legacy applications.
-sub pod2text {
- my @args;
-
- # This is really ugly; I hate doing option parsing in the middle of a
- # module. But the old Pod::Text module supported passing flags to its
- # entry function, so handle -a and -<number>.
- while ($_[0] =~ /^-/) {
- my $flag = shift;
- if ($flag eq '-a') { push (@args, alt => 1) }
- elsif ($flag =~ /^-(\d+)$/) { push (@args, width => $1) }
- else {
- unshift (@_, $flag);
- last;
- }
- }
-
- # Now that we know what arguments we're using, create the parser.
- my $parser = Pod::Text->new (@args);
-
- # If two arguments were given, the second argument is going to be a file
- # handle. That means we want to call parse_from_filehandle(), which
- # means we need to turn the first argument into a file handle. Magic
- # open will handle the <&STDIN case automagically.
- if (defined $_[1]) {
- my @fhs = @_;
- local *IN;
- unless (open (IN, $fhs[0])) {
- croak ("Can't open $fhs[0] for reading: $!\n");
- return;
- }
- $fhs[0] = \*IN;
- return $parser->parse_from_filehandle (@fhs);
- } else {
- return $parser->parse_from_file (@_);
- }
-}
-
-
-############################################################################
-# Module return value and documentation
-############################################################################
-
-1;
-__END__
-
-=head1 NAME
-
-Pod::Text - Convert POD data to formatted ASCII text
-
-=head1 SYNOPSIS
-
- use Pod::Text;
- my $parser = Pod::Text->new (sentence => 0, width => 78);
-
- # Read POD from STDIN and write to STDOUT.
- $parser->parse_from_filehandle;
-
- # Read POD from file.pod and write to file.txt.
- $parser->parse_from_file ('file.pod', 'file.txt');
-
-=head1 DESCRIPTION
-
-Pod::Text is a module that can convert documentation in the POD format (the
-preferred language for documenting Perl) into formatted ASCII. It uses no
-special formatting controls or codes whatsoever, and its output is therefore
-suitable for nearly any device.
-
-As a derived class from Pod::Parser, Pod::Text supports the same methods and
-interfaces. See L<Pod::Parser> for all the details; briefly, one creates a
-new parser with C<Pod::Text-E<gt>new()> and then calls either
-parse_from_filehandle() or parse_from_file().
-
-new() can take options, in the form of key/value pairs, that control the
-behavior of the parser. The currently recognized options are:
-
-=over 4
-
-=item alt
-
-If set to a true value, selects an alternate output format that, among other
-things, uses a different heading style and marks C<=item> entries with a
-colon in the left margin. Defaults to false.
-
-=item indent
-
-The number of spaces to indent regular text, and the default indentation for
-C<=over> blocks. Defaults to 4.
-
-=item loose
-
-If set to a true value, a blank line is printed after a C<=head1> heading.
-If set to false (the default), no blank line is printed after C<=head1>,
-although one is still printed after C<=head2>. This is the default because
-it's the expected formatting for manual pages; if you're formatting
-arbitrary text documents, setting this to true may result in more pleasing
-output.
-
-=item quotes
-
-Sets the quote marks used to surround CE<lt>> text. If the value is a
-single character, it is used as both the left and right quote; if it is two
-characters, the first character is used as the left quote and the second as
-the right quoted; and if it is four characters, the first two are used as
-the left quote and the second two as the right quote.
-
-This may also be set to the special value C<none>, in which case no quote
-marks are added around CE<lt>> text.
-
-=item sentence
-
-If set to a true value, Pod::Text will assume that each sentence ends in two
-spaces, and will try to preserve that spacing. If set to false, all
-consecutive whitespace in non-verbatim paragraphs is compressed into a
-single space. Defaults to true.
-
-=item width
-
-The column at which to wrap text on the right-hand side. Defaults to 76.
-
-=back
-
-The standard Pod::Parser method parse_from_filehandle() takes up to two
-arguments, the first being the file handle to read POD from and the second
-being the file handle to write the formatted output to. The first defaults
-to STDIN if not given, and the second defaults to STDOUT. The method
-parse_from_file() is almost identical, except that its two arguments are the
-input and output disk files instead. See L<Pod::Parser> for the specific
-details.
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item Bizarre space in item
-
-(W) Something has gone wrong in internal C<=item> processing. This message
-indicates a bug in Pod::Text; you should never see it.
-
-=item Can't open %s for reading: %s
-
-(F) Pod::Text was invoked via the compatibility mode pod2text() interface
-and the input file it was given could not be opened.
-
-=item Invalid quote specification "%s"
-
-(F) The quote specification given (the quotes option to the constructor) was
-invalid. A quote specification must be one, two, or four characters long.
-
-=item %s:%d: Unknown command paragraph "%s".
-
-(W) The POD source contained a non-standard command paragraph (something of
-the form C<=command args>) that Pod::Man didn't know about. It was ignored.
-
-=item Unknown escape: %s
-
-(W) The POD source contained an C<EE<lt>E<gt>> escape that Pod::Text didn't
-know about.
-
-=item Unknown sequence: %s
-
-(W) The POD source contained a non-standard internal sequence (something of
-the form C<XE<lt>E<gt>>) that Pod::Text didn't know about.
-
-=item Unmatched =back
-
-(W) Pod::Text encountered a C<=back> command that didn't correspond to an
-C<=over> command.
-
-=back
-
-=head1 RESTRICTIONS
-
-Embedded Ctrl-As (octal 001) in the input will be mapped to spaces on
-output, due to an internal implementation detail.
-
-=head1 NOTES
-
-This is a replacement for an earlier Pod::Text module written by Tom
-Christiansen. It has a revamped interface, since it now uses Pod::Parser,
-but an interface roughly compatible with the old Pod::Text::pod2text()
-function is still available. Please change to the new calling convention,
-though.
-
-The original Pod::Text contained code to do formatting via termcap
-sequences, although it wasn't turned on by default and it was problematic to
-get it to work at all. This rewrite doesn't even try to do that, but a
-subclass of it does. Look for L<Pod::Text::Termcap|Pod::Text::Termcap>.
-
-=head1 SEE ALSO
-
-L<Pod::Parser|Pod::Parser>, L<Pod::Text::Termcap|Pod::Text::Termcap>,
-pod2text(1)
-
-=head1 AUTHOR
-
-Russ Allbery E<lt>rra@stanford.eduE<gt>, based I<very> heavily on the
-original Pod::Text by Tom Christiansen E<lt>tchrist@mox.perl.comE<gt> and
-its conversion to Pod::Parser by Brad Appleton
-E<lt>bradapp@enteract.comE<gt>.
-
-=cut
diff --git a/contrib/perl5/lib/Pod/Text/Color.pm b/contrib/perl5/lib/Pod/Text/Color.pm
deleted file mode 100644
index e943216..0000000
--- a/contrib/perl5/lib/Pod/Text/Color.pm
+++ /dev/null
@@ -1,128 +0,0 @@
-# Pod::Text::Color -- Convert POD data to formatted color ASCII text
-# $Id: Color.pm,v 0.6 2000/12/25 12:52:39 eagle Exp $
-#
-# Copyright 1999 by Russ Allbery <rra@stanford.edu>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# This is just a basic proof of concept. It should later be modified to
-# make better use of color, take options changing what colors are used for
-# what text, and the like.
-
-############################################################################
-# Modules and declarations
-############################################################################
-
-package Pod::Text::Color;
-
-require 5.004;
-
-use Pod::Text ();
-use Term::ANSIColor qw(colored);
-
-use strict;
-use vars qw(@ISA $VERSION);
-
-@ISA = qw(Pod::Text);
-
-# Don't use the CVS revision as the version, since this module is also in
-# Perl core and too many things could munge CVS magic revision strings.
-# This number should ideally be the same as the CVS revision in podlators,
-# however.
-$VERSION = 0.06;
-
-
-############################################################################
-# Overrides
-############################################################################
-
-# Make level one headings bold.
-sub cmd_head1 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- $self->SUPER::cmd_head1 (colored ($_, 'bold'));
-}
-
-# Make level two headings bold.
-sub cmd_head2 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- $self->SUPER::cmd_head2 (colored ($_, 'bold'));
-}
-
-# Fix the various interior sequences.
-sub seq_b { return colored ($_[1], 'bold') }
-sub seq_f { return colored ($_[1], 'cyan') }
-sub seq_i { return colored ($_[1], 'yellow') }
-
-# We unfortunately have to override the wrapping code here, since the normal
-# wrapping code gets really confused by all the escape sequences.
-sub wrap {
- my $self = shift;
- local $_ = shift;
- my $output = '';
- my $spaces = ' ' x $$self{MARGIN};
- my $width = $$self{width} - $$self{MARGIN};
- while (length > $width) {
- if (s/^((?:(?:\e\[[\d;]+m)?[^\n]){0,$width})\s+//
- || s/^((?:(?:\e\[[\d;]+m)?[^\n]){$width})//) {
- $output .= $spaces . $1 . "\n";
- } else {
- last;
- }
- }
- $output .= $spaces . $_;
- $output =~ s/\s+$/\n\n/;
- $output;
-}
-
-############################################################################
-# Module return value and documentation
-############################################################################
-
-1;
-__END__
-
-=head1 NAME
-
-Pod::Text::Color - Convert POD data to formatted color ASCII text
-
-=head1 SYNOPSIS
-
- use Pod::Text::Color;
- my $parser = Pod::Text::Color->new (sentence => 0, width => 78);
-
- # Read POD from STDIN and write to STDOUT.
- $parser->parse_from_filehandle;
-
- # Read POD from file.pod and write to file.txt.
- $parser->parse_from_file ('file.pod', 'file.txt');
-
-=head1 DESCRIPTION
-
-Pod::Text::Color is a simple subclass of Pod::Text that highlights output
-text using ANSI color escape sequences. Apart from the color, it in all
-ways functions like Pod::Text. See L<Pod::Text> for details and available
-options.
-
-Term::ANSIColor is used to get colors and therefore must be installed to use
-this module.
-
-=head1 BUGS
-
-This is just a basic proof of concept. It should be seriously expanded to
-support configurable coloration via options passed to the constructor, and
-B<pod2text> should be taught about those.
-
-=head1 SEE ALSO
-
-L<Pod::Text|Pod::Text>, L<Pod::Parser|Pod::Parser>
-
-=head1 AUTHOR
-
-Russ Allbery E<lt>rra@stanford.eduE<gt>.
-
-=cut
diff --git a/contrib/perl5/lib/Pod/Text/Overstrike.pm b/contrib/perl5/lib/Pod/Text/Overstrike.pm
deleted file mode 100644
index c9f0789..0000000
--- a/contrib/perl5/lib/Pod/Text/Overstrike.pm
+++ /dev/null
@@ -1,160 +0,0 @@
-# Pod::Text::Overstrike -- Convert POD data to formatted overstrike text
-# $Id: Overstrike.pm,v 1.1 2000/12/25 12:51:23 eagle Exp $
-#
-# Created by Joe Smith <Joe.Smith@inwap.com> 30-Nov-2000
-# (based on Pod::Text::Color by Russ Allbery <rra@stanford.edu>)
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# This was written because the output from:
-#
-# pod2text Text.pm > plain.txt; less plain.txt
-#
-# is not as rich as the output from
-#
-# pod2man Text.pm | nroff -man > fancy.txt; less fancy.txt
-#
-# and because both Pod::Text::Color and Pod::Text::Termcap are not device
-# independent.
-
-############################################################################
-# Modules and declarations
-############################################################################
-
-package Pod::Text::Overstrike;
-
-require 5.004;
-
-use Pod::Text ();
-
-use strict;
-use vars qw(@ISA $VERSION);
-
-@ISA = qw(Pod::Text);
-
-# Don't use the CVS revision as the version, since this module is also in
-# Perl core and too many things could munge CVS magic revision strings.
-# This number should ideally be the same as the CVS revision in podlators,
-# however.
-$VERSION = 1.01;
-
-
-############################################################################
-# Overrides
-############################################################################
-
-# Make level one headings bold, overridding any existing formatting.
-sub cmd_head1 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- s/(.)\cH\1//g;
- s/_\cH//g;
- s/(.)/$1\b$1/g;
- $self->SUPER::cmd_head1 ($_);
-}
-
-# Make level two headings bold, overriding any existing formatting.
-sub cmd_head2 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- s/(.)\cH\1//g;
- s/_\cH//g;
- s/(.)/$1\b$1/g;
- $self->SUPER::cmd_head2 ($_);
-}
-
-# Make level three headings underscored, overriding any existing formatting.
-sub cmd_head3 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- s/(.)\cH\1//g;
- s/_\cH//g;
- s/(.)/_\b$1/g;
- $self->SUPER::cmd_head3 ($_);
-}
-
-# Fix the various interior sequences.
-sub seq_b { local $_ = $_[1]; s/(.)\cH\1//g; s/_\cH//g; s/(.)/$1\b$1/g; $_ }
-sub seq_f { local $_ = $_[1]; s/(.)\cH\1//g; s/_\cH//g; s/(.)/_\b$1/g; $_ }
-sub seq_i { local $_ = $_[1]; s/(.)\cH\1//g; s/_\cH//g; s/(.)/_\b$1/g; $_ }
-
-# We unfortunately have to override the wrapping code here, since the normal
-# wrapping code gets really confused by all the escape sequences.
-sub wrap {
- my $self = shift;
- local $_ = shift;
- my $output = '';
- my $spaces = ' ' x $$self{MARGIN};
- my $width = $$self{width} - $$self{MARGIN};
- while (length > $width) {
- if (s/^((?:(?:[^\n]\cH)?[^\n]){0,$width})\s+//
- || s/^((?:(?:[^\n]\cH)?[^\n]){$width})//) {
- $output .= $spaces . $1 . "\n";
- } else {
- last;
- }
- }
- $output .= $spaces . $_;
- $output =~ s/\s+$/\n\n/;
- $output;
-}
-
-############################################################################
-# Module return value and documentation
-############################################################################
-
-1;
-__END__
-
-=head1 NAME
-
-Pod::Text::Overstrike - Convert POD data to formatted overstrike text
-
-=head1 SYNOPSIS
-
- use Pod::Text::Overstrike;
- my $parser = Pod::Text::Overstrike->new (sentence => 0, width => 78);
-
- # Read POD from STDIN and write to STDOUT.
- $parser->parse_from_filehandle;
-
- # Read POD from file.pod and write to file.txt.
- $parser->parse_from_file ('file.pod', 'file.txt');
-
-=head1 DESCRIPTION
-
-Pod::Text::Overstrike is a simple subclass of Pod::Text that highlights
-output text using overstrike sequences, in a manner similar to nroff.
-Characters in bold text are overstruck (character, backspace, character) and
-characters in underlined text are converted to overstruck underscores
-(underscore, backspace, character). This format was originally designed for
-hardcopy terminals and/or lineprinters, yet is readable on softcopy (CRT)
-terminals.
-
-Overstruck text is best viewed by page-at-a-time programs that take
-advantage of the terminal's B<stand-out> and I<underline> capabilities, such
-as the less program on Unix.
-
-Apart from the overstrike, it in all ways functions like Pod::Text. See
-L<Pod::Text> for details and available options.
-
-=head1 BUGS
-
-Currently, the outermost formatting instruction wins, so for example
-underlined text inside a region of bold text is displayed as simply bold.
-There may be some better approach possible.
-
-=head1 SEE ALSO
-
-L<Pod::Text|Pod::Text>, L<Pod::Parser|Pod::Parser>
-
-=head1 AUTHOR
-
-Joe Smith E<lt>Joe.Smith@inwap.comE<gt>, using the framework created by Russ
-Allbery E<lt>rra@stanford.eduE<gt>.
-
-=cut
diff --git a/contrib/perl5/lib/Pod/Text/Termcap.pm b/contrib/perl5/lib/Pod/Text/Termcap.pm
deleted file mode 100644
index 333852a..0000000
--- a/contrib/perl5/lib/Pod/Text/Termcap.pm
+++ /dev/null
@@ -1,145 +0,0 @@
-# Pod::Text::Termcap -- Convert POD data to ASCII text with format escapes.
-# $Id: Termcap.pm,v 1.0 2000/12/25 12:52:48 eagle Exp $
-#
-# Copyright 1999 by Russ Allbery <rra@stanford.edu>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# This is a simple subclass of Pod::Text that overrides a few key methods to
-# output the right termcap escape sequences for formatted text on the
-# current terminal type.
-
-############################################################################
-# Modules and declarations
-############################################################################
-
-package Pod::Text::Termcap;
-
-require 5.004;
-
-use Pod::Text ();
-use POSIX ();
-use Term::Cap;
-
-use strict;
-use vars qw(@ISA $VERSION);
-
-@ISA = qw(Pod::Text);
-
-# Don't use the CVS revision as the version, since this module is also in
-# Perl core and too many things could munge CVS magic revision strings.
-# This number should ideally be the same as the CVS revision in podlators,
-# however.
-$VERSION = 1.00;
-
-
-############################################################################
-# Overrides
-############################################################################
-
-# In the initialization method, grab our terminal characteristics as well as
-# do all the stuff we normally do.
-sub initialize {
- my $self = shift;
-
- # The default Term::Cap path won't work on Solaris.
- $ENV{TERMPATH} = "$ENV{HOME}/.termcap:/etc/termcap"
- . ":/usr/share/misc/termcap:/usr/share/lib/termcap";
-
- my $termios = POSIX::Termios->new;
- $termios->getattr;
- my $ospeed = $termios->getospeed;
- my $term = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
- $$self{BOLD} = $$term{_md} or die 'BOLD';
- $$self{UNDL} = $$term{_us} or die 'UNDL';
- $$self{NORM} = $$term{_me} or die 'NORM';
-
- unless (defined $$self{width}) {
- $$self{width} = $ENV{COLUMNS} || $$term{_co} || 78;
- $$self{width} -= 2;
- }
-
- $self->SUPER::initialize;
-}
-
-# Make level one headings bold.
-sub cmd_head1 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- $self->SUPER::cmd_head1 ("$$self{BOLD}$_$$self{NORM}");
-}
-
-# Make level two headings bold.
-sub cmd_head2 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//;
- $self->SUPER::cmd_head2 ("$$self{BOLD}$_$$self{NORM}");
-}
-
-# Fix up B<> and I<>. Note that we intentionally don't do F<>.
-sub seq_b { my $self = shift; return "$$self{BOLD}$_[0]$$self{NORM}" }
-sub seq_i { my $self = shift; return "$$self{UNDL}$_[0]$$self{NORM}" }
-
-# Override the wrapping code to igore the special sequences.
-sub wrap {
- my $self = shift;
- local $_ = shift;
- my $output = '';
- my $spaces = ' ' x $$self{MARGIN};
- my $width = $$self{width} - $$self{MARGIN};
- my $code = "(?:\Q$$self{BOLD}\E|\Q$$self{UNDL}\E|\Q$$self{NORM}\E)";
- while (length > $width) {
- if (s/^((?:$code?[^\n]){0,$width})\s+//
- || s/^((?:$code?[^\n]){$width})//) {
- $output .= $spaces . $1 . "\n";
- } else {
- last;
- }
- }
- $output .= $spaces . $_;
- $output =~ s/\s+$/\n\n/;
- $output;
-}
-
-
-############################################################################
-# Module return value and documentation
-############################################################################
-
-1;
-__END__
-
-=head1 NAME
-
-Pod::Text::Color - Convert POD data to ASCII text with format escapes
-
-=head1 SYNOPSIS
-
- use Pod::Text::Termcap;
- my $parser = Pod::Text::Termcap->new (sentence => 0, width => 78);
-
- # Read POD from STDIN and write to STDOUT.
- $parser->parse_from_filehandle;
-
- # Read POD from file.pod and write to file.txt.
- $parser->parse_from_file ('file.pod', 'file.txt');
-
-=head1 DESCRIPTION
-
-Pod::Text::Termcap is a simple subclass of Pod::Text that highlights output
-text using the correct termcap escape sequences for the current terminal.
-Apart from the format codes, it in all ways functions like Pod::Text. See
-L<Pod::Text> for details and available options.
-
-=head1 SEE ALSO
-
-L<Pod::Text|Pod::Text>, L<Pod::Parser|Pod::Parser>
-
-=head1 AUTHOR
-
-Russ Allbery E<lt>rra@stanford.eduE<gt>.
-
-=cut
diff --git a/contrib/perl5/lib/Pod/Usage.pm b/contrib/perl5/lib/Pod/Usage.pm
deleted file mode 100644
index 3886076..0000000
--- a/contrib/perl5/lib/Pod/Usage.pm
+++ /dev/null
@@ -1,559 +0,0 @@
-#############################################################################
-# Pod/Usage.pm -- print usage messages for the running script.
-#
-# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Usage;
-
-use vars qw($VERSION);
-$VERSION = 1.14; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-=head1 NAME
-
-Pod::Usage, pod2usage() - print a usage message from embedded pod documentation
-
-=head1 SYNOPSIS
-
- use Pod::Usage
-
- my $message_text = "This text precedes the usage message.";
- my $exit_status = 2; ## The exit status to use
- my $verbose_level = 0; ## The verbose level to use
- my $filehandle = \*STDERR; ## The filehandle to write to
-
- pod2usage($message_text);
-
- pod2usage($exit_status);
-
- pod2usage( { -message => $message_text ,
- -exitval => $exit_status ,
- -verbose => $verbose_level,
- -output => $filehandle } );
-
- pod2usage( -msg => $message_text ,
- -exitval => $exit_status ,
- -verbose => $verbose_level,
- -output => $filehandle );
-
-=head1 ARGUMENTS
-
-B<pod2usage> should be given either a single argument, or a list of
-arguments corresponding to an associative array (a "hash"). When a single
-argument is given, it should correspond to exactly one of the following:
-
-=over 4
-
-=item *
-
-A string containing the text of a message to print I<before> printing
-the usage message
-
-=item *
-
-A numeric value corresponding to the desired exit status
-
-=item *
-
-A reference to a hash
-
-=back
-
-If more than one argument is given then the entire argument list is
-assumed to be a hash. If a hash is supplied (either as a reference or
-as a list) it should contain one or more elements with the following
-keys:
-
-=over 4
-
-=item C<-message>
-
-=item C<-msg>
-
-The text of a message to print immediately prior to printing the
-program's usage message.
-
-=item C<-exitval>
-
-The desired exit status to pass to the B<exit()> function.
-This should be an integer, or else the string "NOEXIT" to
-indicate that control should simply be returned without
-terminating the invoking process.
-
-=item C<-verbose>
-
-The desired level of "verboseness" to use when printing the usage
-message. If the corresponding value is 0, then only the "SYNOPSIS"
-section of the pod documentation is printed. If the corresponding value
-is 1, then the "SYNOPSIS" section, along with any section entitled
-"OPTIONS", "ARGUMENTS", or "OPTIONS AND ARGUMENTS" is printed. If the
-corresponding value is 2 or more then the entire manpage is printed.
-
-=item C<-output>
-
-A reference to a filehandle, or the pathname of a file to which the
-usage message should be written. The default is C<\*STDERR> unless the
-exit value is less than 2 (in which case the default is C<\*STDOUT>).
-
-=item C<-input>
-
-A reference to a filehandle, or the pathname of a file from which the
-invoking script's pod documentation should be read. It defaults to the
-file indicated by C<$0> (C<$PROGRAM_NAME> for users of F<English.pm>).
-
-=item C<-pathlist>
-
-A list of directory paths. If the input file does not exist, then it
-will be searched for in the given directory list (in the order the
-directories appear in the list). It defaults to the list of directories
-implied by C<$ENV{PATH}>. The list may be specified either by a reference
-to an array, or by a string of directory paths which use the same path
-separator as C<$ENV{PATH}> on your system (e.g., C<:> for Unix, C<;> for
-MSWin32 and DOS).
-
-=back
-
-=head1 DESCRIPTION
-
-B<pod2usage> will print a usage message for the invoking script (using
-its embedded pod documentation) and then exit the script with the
-desired exit status. The usage message printed may have any one of three
-levels of "verboseness": If the verbose level is 0, then only a synopsis
-is printed. If the verbose level is 1, then the synopsis is printed
-along with a description (if present) of the command line options and
-arguments. If the verbose level is 2, then the entire manual page is
-printed.
-
-Unless they are explicitly specified, the default values for the exit
-status, verbose level, and output stream to use are determined as
-follows:
-
-=over 4
-
-=item *
-
-If neither the exit status nor the verbose level is specified, then the
-default is to use an exit status of 2 with a verbose level of 0.
-
-=item *
-
-If an exit status I<is> specified but the verbose level is I<not>, then the
-verbose level will default to 1 if the exit status is less than 2 and
-will default to 0 otherwise.
-
-=item *
-
-If an exit status is I<not> specified but verbose level I<is> given, then
-the exit status will default to 2 if the verbose level is 0 and will
-default to 1 otherwise.
-
-=item *
-
-If the exit status used is less than 2, then output is printed on
-C<STDOUT>. Otherwise output is printed on C<STDERR>.
-
-=back
-
-Although the above may seem a bit confusing at first, it generally does
-"the right thing" in most situations. This determination of the default
-values to use is based upon the following typical Unix conventions:
-
-=over 4
-
-=item *
-
-An exit status of 0 implies "success". For example, B<diff(1)> exits
-with a status of 0 if the two files have the same contents.
-
-=item *
-
-An exit status of 1 implies possibly abnormal, but non-defective, program
-termination. For example, B<grep(1)> exits with a status of 1 if
-it did I<not> find a matching line for the given regular expression.
-
-=item *
-
-An exit status of 2 or more implies a fatal error. For example, B<ls(1)>
-exits with a status of 2 if you specify an illegal (unknown) option on
-the command line.
-
-=item *
-
-Usage messages issued as a result of bad command-line syntax should go
-to C<STDERR>. However, usage messages issued due to an explicit request
-to print usage (like specifying B<-help> on the command line) should go
-to C<STDOUT>, just in case the user wants to pipe the output to a pager
-(such as B<more(1)>).
-
-=item *
-
-If program usage has been explicitly requested by the user, it is often
-desireable to exit with a status of 1 (as opposed to 0) after issuing
-the user-requested usage message. It is also desireable to give a
-more verbose description of program usage in this case.
-
-=back
-
-B<pod2usage> doesn't force the above conventions upon you, but it will
-use them by default if you don't expressly tell it to do otherwise. The
-ability of B<pod2usage()> to accept a single number or a string makes it
-convenient to use as an innocent looking error message handling function:
-
- use Pod::Usage;
- use Getopt::Long;
-
- ## Parse options
- GetOptions("help", "man", "flag1") || pod2usage(2);
- pod2usage(1) if ($opt_help);
- pod2usage(-verbose => 2) if ($opt_man);
-
- ## Check for too many filenames
- pod2usage("$0: Too many files given.\n") if (@ARGV > 1);
-
-Some user's however may feel that the above "economy of expression" is
-not particularly readable nor consistent and may instead choose to do
-something more like the following:
-
- use Pod::Usage;
- use Getopt::Long;
-
- ## Parse options
- GetOptions("help", "man", "flag1") || pod2usage(-verbose => 0);
- pod2usage(-verbose => 1) if ($opt_help);
- pod2usage(-verbose => 2) if ($opt_man);
-
- ## Check for too many filenames
- pod2usage(-verbose => 2, -message => "$0: Too many files given.\n")
- if (@ARGV > 1);
-
-As with all things in Perl, I<there's more than one way to do it>, and
-B<pod2usage()> adheres to this philosophy. If you are interested in
-seeing a number of different ways to invoke B<pod2usage> (although by no
-means exhaustive), please refer to L<"EXAMPLES">.
-
-=head1 EXAMPLES
-
-Each of the following invocations of C<pod2usage()> will print just the
-"SYNOPSIS" section to C<STDERR> and will exit with a status of 2:
-
- pod2usage();
-
- pod2usage(2);
-
- pod2usage(-verbose => 0);
-
- pod2usage(-exitval => 2);
-
- pod2usage({-exitval => 2, -output => \*STDERR});
-
- pod2usage({-verbose => 0, -output => \*STDERR});
-
- pod2usage(-exitval => 2, -verbose => 0);
-
- pod2usage(-exitval => 2, -verbose => 0, -output => \*STDERR);
-
-Each of the following invocations of C<pod2usage()> will print a message
-of "Syntax error." (followed by a newline) to C<STDERR>, immediately
-followed by just the "SYNOPSIS" section (also printed to C<STDERR>) and
-will exit with a status of 2:
-
- pod2usage("Syntax error.");
-
- pod2usage(-message => "Syntax error.", -verbose => 0);
-
- pod2usage(-msg => "Syntax error.", -exitval => 2);
-
- pod2usage({-msg => "Syntax error.", -exitval => 2, -output => \*STDERR});
-
- pod2usage({-msg => "Syntax error.", -verbose => 0, -output => \*STDERR});
-
- pod2usage(-msg => "Syntax error.", -exitval => 2, -verbose => 0);
-
- pod2usage(-message => "Syntax error.",
- -exitval => 2,
- -verbose => 0,
- -output => \*STDERR);
-
-Each of the following invocations of C<pod2usage()> will print the
-"SYNOPSIS" section and any "OPTIONS" and/or "ARGUMENTS" sections to
-C<STDOUT> and will exit with a status of 1:
-
- pod2usage(1);
-
- pod2usage(-verbose => 1);
-
- pod2usage(-exitval => 1);
-
- pod2usage({-exitval => 1, -output => \*STDOUT});
-
- pod2usage({-verbose => 1, -output => \*STDOUT});
-
- pod2usage(-exitval => 1, -verbose => 1);
-
- pod2usage(-exitval => 1, -verbose => 1, -output => \*STDOUT});
-
-Each of the following invocations of C<pod2usage()> will print the
-entire manual page to C<STDOUT> and will exit with a status of 1:
-
- pod2usage(-verbose => 2);
-
- pod2usage({-verbose => 2, -output => \*STDOUT});
-
- pod2usage(-exitval => 1, -verbose => 2);
-
- pod2usage({-exitval => 1, -verbose => 2, -output => \*STDOUT});
-
-=head2 Recommended Use
-
-Most scripts should print some type of usage message to C<STDERR> when a
-command line syntax error is detected. They should also provide an
-option (usually C<-H> or C<-help>) to print a (possibly more verbose)
-usage message to C<STDOUT>. Some scripts may even wish to go so far as to
-provide a means of printing their complete documentation to C<STDOUT>
-(perhaps by allowing a C<-man> option). The following complete example
-uses B<Pod::Usage> in combination with B<Getopt::Long> to do all of these
-things:
-
- use Getopt::Long;
- use Pod::Usage;
-
- my $man = 0;
- my $help = 0;
- ## Parse options and print usage if there is a syntax error,
- ## or if usage was explicitly requested.
- GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
- pod2usage(1) if $help;
- pod2usage(-verbose => 2) if $man;
-
- ## If no arguments were given, then allow STDIN to be used only
- ## if it's not connected to a terminal (otherwise print usage)
- pod2usage("$0: No files given.") if ((@ARGV == 0) && (-t STDIN));
- __END__
-
- =head1 NAME
-
- sample - Using GetOpt::Long and Pod::Usage
-
- =head1 SYNOPSIS
-
- sample [options] [file ...]
-
- Options:
- -help brief help message
- -man full documentation
-
- =head1 OPTIONS
-
- =over 8
-
- =item B<-help>
-
- Print a brief help message and exits.
-
- =item B<-man>
-
- Prints the manual page and exits.
-
- =back
-
- =head1 DESCRIPTION
-
- B<This program> will read the given input file(s) and do something
- useful with the contents thereof.
-
- =cut
-
-=head1 CAVEATS
-
-By default, B<pod2usage()> will use C<$0> as the path to the pod input
-file. Unfortunately, not all systems on which Perl runs will set C<$0>
-properly (although if C<$0> isn't found, B<pod2usage()> will search
-C<$ENV{PATH}> or else the list specified by the C<-pathlist> option).
-If this is the case for your system, you may need to explicitly specify
-the path to the pod docs for the invoking script using something
-similar to the following:
-
- pod2usage(-exitval => 2, -input => "/path/to/your/pod/docs");
-
-=head1 AUTHOR
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-Based on code for B<Pod::Text::pod2text()> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=head1 ACKNOWLEDGEMENTS
-
-Steven McDougall E<lt>swmcd@world.std.comE<gt> for his help and patience
-with re-writing this manpage.
-
-=cut
-
-#############################################################################
-
-use strict;
-#use diagnostics;
-use Carp;
-use Config;
-use Exporter;
-use File::Spec;
-
-use vars qw(@ISA @EXPORT);
-@EXPORT = qw(&pod2usage);
-BEGIN {
- if ( $] >= 5.005_58 ) {
- require Pod::Text;
- @ISA = qw( Pod::Text );
- }
- else {
- require Pod::PlainText;
- @ISA = qw( Pod::PlainText );
- }
-}
-
-
-##---------------------------------------------------------------------------
-
-##---------------------------------
-## Function definitions begin here
-##---------------------------------
-
-sub pod2usage {
- local($_) = shift || "";
- my %opts;
- ## Collect arguments
- if (@_ > 0) {
- ## Too many arguments - assume that this is a hash and
- ## the user forgot to pass a reference to it.
- %opts = ($_, @_);
- }
- elsif (ref $_) {
- ## User passed a ref to a hash
- %opts = %{$_} if (ref($_) eq 'HASH');
- }
- elsif (/^[-+]?\d+$/) {
- ## User passed in the exit value to use
- $opts{"-exitval"} = $_;
- }
- else {
- ## User passed in a message to print before issuing usage.
- $_ and $opts{"-message"} = $_;
- }
-
- ## Need this for backward compatibility since we formerly used
- ## options that were all uppercase words rather than ones that
- ## looked like Unix command-line options.
- ## to be uppercase keywords)
- %opts = map {
- my $val = $opts{$_};
- s/^(?=\w)/-/;
- /^-msg/i and $_ = '-message';
- /^-exit/i and $_ = '-exitval';
- lc($_) => $val;
- } (keys %opts);
-
- ## Now determine default -exitval and -verbose values to use
- if ((! defined $opts{"-exitval"}) && (! defined $opts{"-verbose"})) {
- $opts{"-exitval"} = 2;
- $opts{"-verbose"} = 0;
- }
- elsif (! defined $opts{"-exitval"}) {
- $opts{"-exitval"} = ($opts{"-verbose"} > 0) ? 1 : 2;
- }
- elsif (! defined $opts{"-verbose"}) {
- $opts{"-verbose"} = ($opts{"-exitval"} < 2);
- }
-
- ## Default the output file
- $opts{"-output"} = ($opts{"-exitval"} < 2) ? \*STDOUT : \*STDERR
- unless (defined $opts{"-output"});
- ## Default the input file
- $opts{"-input"} = $0 unless (defined $opts{"-input"});
-
- ## Look up input file in path if it doesnt exist.
- unless ((ref $opts{"-input"}) || (-e $opts{"-input"})) {
- my ($dirname, $basename) = ('', $opts{"-input"});
- my $pathsep = ($^O =~ /^(?:dos|os2|MSWin32)$/) ? ";"
- : (($^O eq 'MacOS') ? ',' : ":");
- my $pathspec = $opts{"-pathlist"} || $ENV{PATH} || $ENV{PERL5LIB};
-
- my @paths = (ref $pathspec) ? @$pathspec : split($pathsep, $pathspec);
- for $dirname (@paths) {
- $_ = File::Spec->catfile($dirname, $basename) if length;
- last if (-e $_) && ($opts{"-input"} = $_);
- }
- }
-
- ## Now create a pod reader and constrain it to the desired sections.
- my $parser = new Pod::Usage(USAGE_OPTIONS => \%opts);
- if ($opts{"-verbose"} == 0) {
- $parser->select("SYNOPSIS");
- }
- elsif ($opts{"-verbose"} == 1) {
- my $opt_re = '(?i)' .
- '(?:OPTIONS|ARGUMENTS)' .
- '(?:\s*(?:AND|\/)\s*(?:OPTIONS|ARGUMENTS))?';
- $parser->select( 'SYNOPSIS', $opt_re, "DESCRIPTION/$opt_re" );
- }
-
- ## Now translate the pod document and then exit with the desired status
- if ( $opts{"-verbose"} >= 2
- and !ref($opts{"-input"})
- and $opts{"-output"} == \*STDOUT )
- {
- ## spit out the entire PODs. Might as well invoke perldoc
- my $progpath = File::Spec->catfile($Config{bin}, "perldoc");
- system($progpath, $opts{"-input"});
- }
- else {
- $parser->parse_from_file($opts{"-input"}, $opts{"-output"});
- }
-
- exit($opts{"-exitval"}) unless (lc($opts{"-exitval"}) eq 'noexit');
-}
-
-##---------------------------------------------------------------------------
-
-##-------------------------------
-## Method definitions begin here
-##-------------------------------
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my %params = @_;
- my $self = {%params};
- bless $self, $class;
- $self->initialize();
- return $self;
-}
-
-sub begin_pod {
- my $self = shift;
- $self->SUPER::begin_pod(); ## Have to call superclass
- my $msg = $self->{USAGE_OPTIONS}->{-message} or return 1;
- my $out_fh = $self->output_handle();
- print $out_fh "$msg\n";
-}
-
-sub preprocess_paragraph {
- my $self = shift;
- local $_ = shift;
- my $line = shift;
- ## See if this is a heading and we arent printing the entire manpage.
- if (($self->{USAGE_OPTIONS}->{-verbose} < 2) && /^=head/) {
- ## Change the title of the SYNOPSIS section to USAGE
- s/^=head1\s+SYNOPSIS\s*$/=head1 USAGE/;
- ## Try to do some lowercasing instead of all-caps in headings
- s{([A-Z])([A-Z]+)}{((length($2) > 2) ? $1 : lc($1)) . lc($2)}ge;
- ## Use a colon to end all headings
- s/\s*$/:/ unless (/:\s*$/);
- $_ .= "\n";
- }
- return $self->SUPER::preprocess_paragraph($_);
-}
-
diff --git a/contrib/perl5/lib/Search/Dict.pm b/contrib/perl5/lib/Search/Dict.pm
deleted file mode 100644
index 9a229a7..0000000
--- a/contrib/perl5/lib/Search/Dict.pm
+++ /dev/null
@@ -1,75 +0,0 @@
-package Search::Dict;
-require 5.000;
-require Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(look);
-
-=head1 NAME
-
-Search::Dict, look - search for key in dictionary file
-
-=head1 SYNOPSIS
-
- use Search::Dict;
- look *FILEHANDLE, $key, $dict, $fold;
-
-=head1 DESCRIPTION
-
-Sets file position in FILEHANDLE to be first line greater than or equal
-(stringwise) to I<$key>. Returns the new file position, or -1 if an error
-occurs.
-
-The flags specify dictionary order and case folding:
-
-If I<$dict> is true, search by dictionary order (ignore anything but word
-characters and whitespace).
-
-If I<$fold> is true, ignore case.
-
-=cut
-
-sub look {
- local(*FH,$key,$dict,$fold) = @_;
- local($_);
- my(@stat) = stat(FH)
- or return -1;
- my($size, $blksize) = @stat[7,11];
- $blksize ||= 8192;
- $key =~ s/[^\w\s]//g if $dict;
- $key = lc $key if $fold;
- my($min, $max, $mid) = (0, int($size / $blksize));
- while ($max - $min > 1) {
- $mid = int(($max + $min) / 2);
- seek(FH, $mid * $blksize, 0)
- or return -1;
- <FH> if $mid; # probably a partial line
- $_ = <FH>;
- chop;
- s/[^\w\s]//g if $dict;
- $_ = lc $_ if $fold;
- if (defined($_) && $_ lt $key) {
- $min = $mid;
- }
- else {
- $max = $mid;
- }
- }
- $min *= $blksize;
- seek(FH,$min,0)
- or return -1;
- <FH> if $min;
- for (;;) {
- $min = tell(FH);
- defined($_ = <FH>)
- or last;
- chop;
- s/[^\w\s]//g if $dict;
- $_ = lc $_ if $fold;
- last if $_ ge $key;
- }
- seek(FH,$min,0);
- $min;
-}
-
-1;
diff --git a/contrib/perl5/lib/SelectSaver.pm b/contrib/perl5/lib/SelectSaver.pm
deleted file mode 100644
index 5f56922..0000000
--- a/contrib/perl5/lib/SelectSaver.pm
+++ /dev/null
@@ -1,52 +0,0 @@
-package SelectSaver;
-
-=head1 NAME
-
-SelectSaver - save and restore selected file handle
-
-=head1 SYNOPSIS
-
- use SelectSaver;
-
- {
- my $saver = new SelectSaver(FILEHANDLE);
- # FILEHANDLE is selected
- }
- # previous handle is selected
-
- {
- my $saver = new SelectSaver;
- # new handle may be selected, or not
- }
- # previous handle is selected
-
-=head1 DESCRIPTION
-
-A C<SelectSaver> object contains a reference to the file handle that
-was selected when it was created. If its C<new> method gets an extra
-parameter, then that parameter is selected; otherwise, the selected
-file handle remains unchanged.
-
-When a C<SelectSaver> is destroyed, it re-selects the file handle
-that was selected when it was created.
-
-=cut
-
-require 5.000;
-use Carp;
-use Symbol;
-
-sub new {
- @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]';
- my $fh = select;
- my $self = bless [$fh], $_[0];
- select qualify($_[1], caller) if @_ > 1;
- $self;
-}
-
-sub DESTROY {
- my $this = $_[0];
- select $$this[0];
-}
-
-1;
diff --git a/contrib/perl5/lib/SelfLoader.pm b/contrib/perl5/lib/SelfLoader.pm
deleted file mode 100644
index 3b9c52d..0000000
--- a/contrib/perl5/lib/SelfLoader.pm
+++ /dev/null
@@ -1,307 +0,0 @@
-package SelfLoader;
-# use Carp;
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(AUTOLOAD);
-$VERSION = "1.0902";
-sub Version {$VERSION}
-$DEBUG = 0;
-
-my %Cache; # private cache for all SelfLoader's client packages
-
-# allow checking for valid ': attrlist' attachments
-my $nested;
-$nested = qr{ \( (?: (?> [^()]+ ) | (??{ $nested }) )* \) }x;
-my $one_attr = qr{ (?> (?! \d) \w+ (?:$nested)? ) (?:\s*\:\s*|\s+(?!\:)) }x;
-my $attr_list = qr{ \s* : \s* (?: $one_attr )* }x;
-
-sub croak { require Carp; goto &Carp::croak }
-
-AUTOLOAD {
- print STDERR "SelfLoader::AUTOLOAD for $AUTOLOAD\n" if $DEBUG;
- my $SL_code = $Cache{$AUTOLOAD};
- my $save = $@; # evals in both AUTOLOAD and _load_stubs can corrupt $@
- unless ($SL_code) {
- # Maybe this pack had stubs before __DATA__, and never initialized.
- # Or, this maybe an automatic DESTROY method call when none exists.
- $AUTOLOAD =~ m/^(.*)::/;
- SelfLoader->_load_stubs($1) unless exists $Cache{"${1}::<DATA"};
- $SL_code = $Cache{$AUTOLOAD};
- $SL_code = "sub $AUTOLOAD { }"
- if (!$SL_code and $AUTOLOAD =~ m/::DESTROY$/);
- croak "Undefined subroutine $AUTOLOAD" unless $SL_code;
- }
- print STDERR "SelfLoader::AUTOLOAD eval: $SL_code\n" if $DEBUG;
-
- eval $SL_code;
- if ($@) {
- $@ =~ s/ at .*\n//;
- croak $@;
- }
- $@ = $save;
- defined(&$AUTOLOAD) || die "SelfLoader inconsistency error";
- delete $Cache{$AUTOLOAD};
- goto &$AUTOLOAD
-}
-
-sub load_stubs { shift->_load_stubs((caller)[0]) }
-
-sub _load_stubs {
- my($self, $callpack) = @_;
- my $fh = \*{"${callpack}::DATA"};
- my $currpack = $callpack;
- my($line,$name,@lines, @stubs, $protoype);
-
- print STDERR "SelfLoader::load_stubs($callpack)\n" if $DEBUG;
- croak("$callpack doesn't contain an __DATA__ token")
- unless fileno($fh);
- $Cache{"${currpack}::<DATA"} = 1; # indicate package is cached
-
- local($/) = "\n";
- while(defined($line = <$fh>) and $line !~ m/^__END__/) {
- if ($line =~ m/^sub\s+([\w:]+)\s*((?:\([\\\$\@\%\&\*\;]*\))?(?:$attr_list)?)/) {
- push(@stubs, $self->_add_to_cache($name, $currpack, \@lines, $protoype));
- $protoype = $2;
- @lines = ($line);
- if (index($1,'::') == -1) { # simple sub name
- $name = "${currpack}::$1";
- } else { # sub name with package
- $name = $1;
- $name =~ m/^(.*)::/;
- if (defined(&{"${1}::AUTOLOAD"})) {
- \&{"${1}::AUTOLOAD"} == \&SelfLoader::AUTOLOAD ||
- die 'SelfLoader Error: attempt to specify Selfloading',
- " sub $name in non-selfloading module $1";
- } else {
- $self->export($1,'AUTOLOAD');
- }
- }
- } elsif ($line =~ m/^package\s+([\w:]+)/) { # A package declared
- push(@stubs, $self->_add_to_cache($name, $currpack, \@lines, $protoype));
- $self->_package_defined($line);
- $name = '';
- @lines = ();
- $currpack = $1;
- $Cache{"${currpack}::<DATA"} = 1; # indicate package is cached
- if (defined(&{"${1}::AUTOLOAD"})) {
- \&{"${1}::AUTOLOAD"} == \&SelfLoader::AUTOLOAD ||
- die 'SelfLoader Error: attempt to specify Selfloading',
- " package $currpack which already has AUTOLOAD";
- } else {
- $self->export($currpack,'AUTOLOAD');
- }
- } else {
- push(@lines,$line);
- }
- }
- close($fh) unless defined($line) && $line =~ /^__END__\s*DATA/; # __END__
- push(@stubs, $self->_add_to_cache($name, $currpack, \@lines, $protoype));
- eval join('', @stubs) if @stubs;
-}
-
-
-sub _add_to_cache {
- my($self,$fullname,$pack,$lines, $protoype) = @_;
- return () unless $fullname;
- (require Carp), Carp::carp("Redefining sub $fullname")
- if exists $Cache{$fullname};
- $Cache{$fullname} = join('', "package $pack; ",@$lines);
- print STDERR "SelfLoader cached $fullname: $Cache{$fullname}" if $DEBUG;
- # return stub to be eval'd
- defined($protoype) ? "sub $fullname $protoype;" : "sub $fullname;"
-}
-
-sub _package_defined {}
-
-1;
-__END__
-
-=head1 NAME
-
-SelfLoader - load functions only on demand
-
-=head1 SYNOPSIS
-
- package FOOBAR;
- use SelfLoader;
-
- ... (initializing code)
-
- __DATA__
- sub {....
-
-
-=head1 DESCRIPTION
-
-This module tells its users that functions in the FOOBAR package are to be
-autoloaded from after the C<__DATA__> token. See also
-L<perlsub/"Autoloading">.
-
-=head2 The __DATA__ token
-
-The C<__DATA__> token tells the perl compiler that the perl code
-for compilation is finished. Everything after the C<__DATA__> token
-is available for reading via the filehandle FOOBAR::DATA,
-where FOOBAR is the name of the current package when the C<__DATA__>
-token is reached. This works just the same as C<__END__> does in
-package 'main', but for other modules data after C<__END__> is not
-automatically retrievable, whereas data after C<__DATA__> is.
-The C<__DATA__> token is not recognized in versions of perl prior to
-5.001m.
-
-Note that it is possible to have C<__DATA__> tokens in the same package
-in multiple files, and that the last C<__DATA__> token in a given
-package that is encountered by the compiler is the one accessible
-by the filehandle. This also applies to C<__END__> and main, i.e. if
-the 'main' program has an C<__END__>, but a module 'require'd (_not_ 'use'd)
-by that program has a 'package main;' declaration followed by an 'C<__DATA__>',
-then the C<DATA> filehandle is set to access the data after the C<__DATA__>
-in the module, _not_ the data after the C<__END__> token in the 'main'
-program, since the compiler encounters the 'require'd file later.
-
-=head2 SelfLoader autoloading
-
-The B<SelfLoader> works by the user placing the C<__DATA__>
-token I<after> perl code which needs to be compiled and
-run at 'require' time, but I<before> subroutine declarations
-that can be loaded in later - usually because they may never
-be called.
-
-The B<SelfLoader> will read from the FOOBAR::DATA filehandle to
-load in the data after C<__DATA__>, and load in any subroutine
-when it is called. The costs are the one-time parsing of the
-data after C<__DATA__>, and a load delay for the _first_
-call of any autoloaded function. The benefits (hopefully)
-are a speeded up compilation phase, with no need to load
-functions which are never used.
-
-The B<SelfLoader> will stop reading from C<__DATA__> if
-it encounters the C<__END__> token - just as you would expect.
-If the C<__END__> token is present, and is followed by the
-token DATA, then the B<SelfLoader> leaves the FOOBAR::DATA
-filehandle open on the line after that token.
-
-The B<SelfLoader> exports the C<AUTOLOAD> subroutine to the
-package using the B<SelfLoader>, and this loads the called
-subroutine when it is first called.
-
-There is no advantage to putting subroutines which will _always_
-be called after the C<__DATA__> token.
-
-=head2 Autoloading and package lexicals
-
-A 'my $pack_lexical' statement makes the variable $pack_lexical
-local _only_ to the file up to the C<__DATA__> token. Subroutines
-declared elsewhere _cannot_ see these types of variables,
-just as if you declared subroutines in the package but in another
-file, they cannot see these variables.
-
-So specifically, autoloaded functions cannot see package
-lexicals (this applies to both the B<SelfLoader> and the Autoloader).
-The C<vars> pragma provides an alternative to defining package-level
-globals that will be visible to autoloaded routines. See the documentation
-on B<vars> in the pragma section of L<perlmod>.
-
-=head2 SelfLoader and AutoLoader
-
-The B<SelfLoader> can replace the AutoLoader - just change 'use AutoLoader'
-to 'use SelfLoader' (though note that the B<SelfLoader> exports
-the AUTOLOAD function - but if you have your own AUTOLOAD and
-are using the AutoLoader too, you probably know what you're doing),
-and the C<__END__> token to C<__DATA__>. You will need perl version 5.001m
-or later to use this (version 5.001 with all patches up to patch m).
-
-There is no need to inherit from the B<SelfLoader>.
-
-The B<SelfLoader> works similarly to the AutoLoader, but picks up the
-subs from after the C<__DATA__> instead of in the 'lib/auto' directory.
-There is a maintenance gain in not needing to run AutoSplit on the module
-at installation, and a runtime gain in not needing to keep opening and
-closing files to load subs. There is a runtime loss in needing
-to parse the code after the C<__DATA__>. Details of the B<AutoLoader> and
-another view of these distinctions can be found in that module's
-documentation.
-
-=head2 __DATA__, __END__, and the FOOBAR::DATA filehandle.
-
-This section is only relevant if you want to use
-the C<FOOBAR::DATA> together with the B<SelfLoader>.
-
-Data after the C<__DATA__> token in a module is read using the
-FOOBAR::DATA filehandle. C<__END__> can still be used to denote the end
-of the C<__DATA__> section if followed by the token DATA - this is supported
-by the B<SelfLoader>. The C<FOOBAR::DATA> filehandle is left open if an
-C<__END__> followed by a DATA is found, with the filehandle positioned at
-the start of the line after the C<__END__> token. If no C<__END__> token is
-present, or an C<__END__> token with no DATA token on the same line, then
-the filehandle is closed.
-
-The B<SelfLoader> reads from wherever the current
-position of the C<FOOBAR::DATA> filehandle is, until the
-EOF or C<__END__>. This means that if you want to use
-that filehandle (and ONLY if you want to), you should either
-
-1. Put all your subroutine declarations immediately after
-the C<__DATA__> token and put your own data after those
-declarations, using the C<__END__> token to mark the end
-of subroutine declarations. You must also ensure that the B<SelfLoader>
-reads first by calling 'SelfLoader-E<gt>load_stubs();', or by using a
-function which is selfloaded;
-
-or
-
-2. You should read the C<FOOBAR::DATA> filehandle first, leaving
-the handle open and positioned at the first line of subroutine
-declarations.
-
-You could conceivably do both.
-
-=head2 Classes and inherited methods.
-
-For modules which are not classes, this section is not relevant.
-This section is only relevant if you have methods which could
-be inherited.
-
-A subroutine stub (or forward declaration) looks like
-
- sub stub;
-
-i.e. it is a subroutine declaration without the body of the
-subroutine. For modules which are not classes, there is no real
-need for stubs as far as autoloading is concerned.
-
-For modules which ARE classes, and need to handle inherited methods,
-stubs are needed to ensure that the method inheritance mechanism works
-properly. You can load the stubs into the module at 'require' time, by
-adding the statement 'SelfLoader-E<gt>load_stubs();' to the module to do
-this.
-
-The alternative is to put the stubs in before the C<__DATA__> token BEFORE
-releasing the module, and for this purpose the C<Devel::SelfStubber>
-module is available. However this does require the extra step of ensuring
-that the stubs are in the module. If this is done I strongly recommend
-that this is done BEFORE releasing the module - it should NOT be done
-at install time in general.
-
-=head1 Multiple packages and fully qualified subroutine names
-
-Subroutines in multiple packages within the same file are supported - but you
-should note that this requires exporting the C<SelfLoader::AUTOLOAD> to
-every package which requires it. This is done automatically by the
-B<SelfLoader> when it first loads the subs into the cache, but you should
-really specify it in the initialization before the C<__DATA__> by putting
-a 'use SelfLoader' statement in each package.
-
-Fully qualified subroutine names are also supported. For example,
-
- __DATA__
- sub foo::bar {23}
- package baz;
- sub dob {32}
-
-will all be loaded correctly by the B<SelfLoader>, and the B<SelfLoader>
-will ensure that the packages 'foo' and 'baz' correctly have the
-B<SelfLoader> C<AUTOLOAD> method when the data after C<__DATA__> is first
-parsed.
-
-=cut
diff --git a/contrib/perl5/lib/Shell.pm b/contrib/perl5/lib/Shell.pm
deleted file mode 100644
index c2f522c..0000000
--- a/contrib/perl5/lib/Shell.pm
+++ /dev/null
@@ -1,201 +0,0 @@
-package Shell;
-use 5.005_64;
-use strict;
-use warnings;
-our($capture_stderr, $VERSION, $AUTOLOAD);
-
-$VERSION = '0.3';
-
-sub new { bless \$VERSION, shift } # Nothing better to bless
-sub DESTROY { }
-
-sub import {
- my $self = shift;
- my ($callpack, $callfile, $callline) = caller;
- my @EXPORT;
- if (@_) {
- @EXPORT = @_;
- } else {
- @EXPORT = 'AUTOLOAD';
- }
- foreach my $sym (@EXPORT) {
- no strict 'refs';
- *{"${callpack}::$sym"} = \&{"Shell::$sym"};
- }
-}
-
-sub AUTOLOAD {
- shift if ref $_[0] && $_[0]->isa( 'Shell' );
- my $cmd = $AUTOLOAD;
- $cmd =~ s/^.*:://;
- eval <<"*END*";
- sub $AUTOLOAD {
- if (\@_ < 1) {
- \$Shell::capture_stderr ? `$cmd 2>&1` : `$cmd`;
- } elsif ('$^O' eq 'os2') {
- local(\*SAVEOUT, \*READ, \*WRITE);
-
- open SAVEOUT, '>&STDOUT' or die;
- pipe READ, WRITE or die;
- open STDOUT, '>&WRITE' or die;
- close WRITE;
-
- my \$pid = system(1, '$cmd', \@_);
- die "Can't execute $cmd: \$!\\n" if \$pid < 0;
-
- open STDOUT, '>&SAVEOUT' or die;
- close SAVEOUT;
-
- if (wantarray) {
- my \@ret = <READ>;
- close READ;
- waitpid \$pid, 0;
- \@ret;
- } else {
- local(\$/) = undef;
- my \$ret = <READ>;
- close READ;
- waitpid \$pid, 0;
- \$ret;
- }
- } else {
- my \$a;
- my \@arr = \@_;
- if ('$^O' eq 'MSWin32') {
- # XXX this special-casing should not be needed
- # if we do quoting right on Windows. :-(
- #
- # First, escape all quotes. Cover the case where we
- # want to pass along a quote preceded by a backslash
- # (i.e., C<"param \\""" end">).
- # Ugly, yup? You know, windoze.
- # Enclose in quotes only the parameters that need it:
- # try this: c:\> dir "/w"
- # and this: c:\> dir /w
- for (\@arr) {
- s/"/\\\\"/g;
- s/\\\\\\\\"/\\\\\\\\"""/g;
- \$_ = qq["\$_"] if /\\s/;
- }
- } else {
- for (\@arr) {
- s/(['\\\\])/\\\\\$1/g;
- \$_ = \$_;
- }
- }
- push \@arr, '2>&1' if \$Shell::capture_stderr;
- open(SUBPROC, join(' ', '$cmd', \@arr, '|'))
- or die "Can't exec $cmd: \$!\\n";
- if (wantarray) {
- my \@ret = <SUBPROC>;
- close SUBPROC; # XXX Oughta use a destructor.
- \@ret;
- } else {
- local(\$/) = undef;
- my \$ret = <SUBPROC>;
- close SUBPROC;
- \$ret;
- }
- }
- }
-*END*
-
- die "$@\n" if $@;
- goto &$AUTOLOAD;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Shell - run shell commands transparently within perl
-
-=head1 SYNOPSIS
-
-See below.
-
-=head1 DESCRIPTION
-
- Date: Thu, 22 Sep 94 16:18:16 -0700
- Message-Id: <9409222318.AA17072@scalpel.netlabs.com>
- To: perl5-porters@isu.edu
- From: Larry Wall <lwall@scalpel.netlabs.com>
- Subject: a new module I just wrote
-
-Here's one that'll whack your mind a little out.
-
- #!/usr/bin/perl
-
- use Shell;
-
- $foo = echo("howdy", "<funny>", "world");
- print $foo;
-
- $passwd = cat("</etc/passwd");
- print $passwd;
-
- sub ps;
- print ps -ww;
-
- cp("/etc/passwd", "/tmp/passwd");
-
-That's maybe too gonzo. It actually exports an AUTOLOAD to the current
-package (and uncovered a bug in Beta 3, by the way). Maybe the usual
-usage should be
-
- use Shell qw(echo cat ps cp);
-
-Larry
-
-
-If you set $Shell::capture_stderr to 1, the module will attempt to
-capture the STDERR of the process as well.
-
-The module now should work on Win32.
-
- Jenda
-
-There seemed to be a problem where all arguments to a shell command were
-quoted before being executed. As in the following example:
-
- cat('</etc/passwd');
- ls('*.pl');
-
-really turned into:
-
- cat '</etc/passwd'
- ls '*.pl'
-
-instead of:
-
- cat </etc/passwd
- ls *.pl
-
-and of course, this is wrong.
-
-I have fixed this bug, it was brought up by Wolfgang Laun [ID 20000326.008]
-
-Casey
-
-=head2 OBJECT ORIENTED SYNTAX
-
-Shell now has an OO interface. Good for namespace conservation
-and shell representation.
-
- use Shell;
- my $sh = Shell->new;
- print $sh->ls;
-
-Casey
-
-=head1 AUTHOR
-
-Larry Wall
-
-Changes by Jenda@Krynicky.cz and Dave Cottle <d.cottle@csc.canterbury.ac.nz>
-
-Changes and bug fixes by Casey Tweten <crt@kiski.net>
-
-=cut
diff --git a/contrib/perl5/lib/Symbol.pm b/contrib/perl5/lib/Symbol.pm
deleted file mode 100644
index a95383a..0000000
--- a/contrib/perl5/lib/Symbol.pm
+++ /dev/null
@@ -1,146 +0,0 @@
-package Symbol;
-
-=head1 NAME
-
-Symbol - manipulate Perl symbols and their names
-
-=head1 SYNOPSIS
-
- use Symbol;
-
- $sym = gensym;
- open($sym, "filename");
- $_ = <$sym>;
- # etc.
-
- ungensym $sym; # no effect
-
- print qualify("x"), "\n"; # "Test::x"
- print qualify("x", "FOO"), "\n" # "FOO::x"
- print qualify("BAR::x"), "\n"; # "BAR::x"
- print qualify("BAR::x", "FOO"), "\n"; # "BAR::x"
- print qualify("STDOUT", "FOO"), "\n"; # "main::STDOUT" (global)
- print qualify(\*x), "\n"; # returns \*x
- print qualify(\*x, "FOO"), "\n"; # returns \*x
-
- use strict refs;
- print { qualify_to_ref $fh } "foo!\n";
- $ref = qualify_to_ref $name, $pkg;
-
- use Symbol qw(delete_package);
- delete_package('Foo::Bar');
- print "deleted\n" unless exists $Foo::{'Bar::'};
-
-
-=head1 DESCRIPTION
-
-C<Symbol::gensym> creates an anonymous glob and returns a reference
-to it. Such a glob reference can be used as a file or directory
-handle.
-
-For backward compatibility with older implementations that didn't
-support anonymous globs, C<Symbol::ungensym> is also provided.
-But it doesn't do anything.
-
-C<Symbol::qualify> turns unqualified symbol names into qualified
-variable names (e.g. "myvar" -E<gt> "MyPackage::myvar"). If it is given a
-second parameter, C<qualify> uses it as the default package;
-otherwise, it uses the package of its caller. Regardless, global
-variable names (e.g. "STDOUT", "ENV", "SIG") are always qualified with
-"main::".
-
-Qualification applies only to symbol names (strings). References are
-left unchanged under the assumption that they are glob references,
-which are qualified by their nature.
-
-C<Symbol::qualify_to_ref> is just like C<Symbol::qualify> except that it
-returns a glob ref rather than a symbol name, so you can use the result
-even if C<use strict 'refs'> is in effect.
-
-C<Symbol::delete_package> wipes out a whole package namespace. Note
-this routine is not exported by default--you may want to import it
-explicitly.
-
-=cut
-
-BEGIN { require 5.002; }
-
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(gensym ungensym qualify qualify_to_ref);
-@EXPORT_OK = qw(delete_package);
-
-$VERSION = 1.02;
-
-my $genpkg = "Symbol::";
-my $genseq = 0;
-
-my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT);
-
-#
-# Note that we never _copy_ the glob; we just make a ref to it.
-# If we did copy it, then SVf_FAKE would be set on the copy, and
-# glob-specific behaviors (e.g. C<*$ref = \&func>) wouldn't work.
-#
-sub gensym () {
- my $name = "GEN" . $genseq++;
- my $ref = \*{$genpkg . $name};
- delete $$genpkg{$name};
- $ref;
-}
-
-sub ungensym ($) {}
-
-sub qualify ($;$) {
- my ($name) = @_;
- if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) {
- my $pkg;
- # Global names: special character, "^x", or other.
- if ($name =~ /^([^a-z])|(\^[a-z])$/i || $global{$name}) {
- $pkg = "main";
- }
- else {
- $pkg = (@_ > 1) ? $_[1] : caller;
- }
- $name = $pkg . "::" . $name;
- }
- $name;
-}
-
-sub qualify_to_ref ($;$) {
- return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller };
-}
-
-#
-# of Safe.pm lineage
-#
-sub delete_package ($) {
- my $pkg = shift;
-
- # expand to full symbol table name if needed
-
- unless ($pkg =~ /^main::.*::$/) {
- $pkg = "main$pkg" if $pkg =~ /^::/;
- $pkg = "main::$pkg" unless $pkg =~ /^main::/;
- $pkg .= '::' unless $pkg =~ /::$/;
- }
-
- my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/;
- my $stem_symtab = *{$stem}{HASH};
- return unless defined $stem_symtab and exists $stem_symtab->{$leaf};
-
-
- # free all the symbols in the package
-
- my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH};
- foreach my $name (keys %$leaf_symtab) {
- undef *{$pkg . $name};
- }
-
- # delete the symbol table
-
- %$leaf_symtab = ();
- delete $stem_symtab->{$leaf};
-}
-
-1;
diff --git a/contrib/perl5/lib/Term/ANSIColor.pm b/contrib/perl5/lib/Term/ANSIColor.pm
deleted file mode 100644
index b61efcb..0000000
--- a/contrib/perl5/lib/Term/ANSIColor.pm
+++ /dev/null
@@ -1,351 +0,0 @@
-# Term::ANSIColor -- Color screen output using ANSI escape sequences.
-# $Id: ANSIColor.pm,v 1.3 2000/08/06 18:28:10 eagle Exp $
-#
-# Copyright 1996, 1997, 1998, 2000
-# by Russ Allbery <rra@stanford.edu> and Zenin <zenin@best.com>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# Ah, September, when the sysadmins turn colors and fall off the trees....
-# -- Dave Van Domelen
-
-############################################################################
-# Modules and declarations
-############################################################################
-
-package Term::ANSIColor;
-require 5.001;
-
-use strict;
-use vars qw(@ISA @EXPORT %EXPORT_TAGS $VERSION $AUTOLOAD %attributes
- $AUTORESET $EACHLINE);
-
-use Exporter ();
-@ISA = qw(Exporter);
-@EXPORT = qw(color colored);
-%EXPORT_TAGS = (constants => [qw(CLEAR RESET BOLD UNDERLINE UNDERSCORE BLINK
- REVERSE CONCEALED BLACK RED GREEN YELLOW
- BLUE MAGENTA CYAN WHITE ON_BLACK ON_RED
- ON_GREEN ON_YELLOW ON_BLUE ON_MAGENTA
- ON_CYAN ON_WHITE)]);
-Exporter::export_ok_tags ('constants');
-
-# Don't use the CVS revision as the version, since this module is also in
-# Perl core and too many things could munge CVS magic revision strings.
-$VERSION = 1.03;
-
-
-############################################################################
-# Internal data structures
-############################################################################
-
-%attributes = ('clear' => 0,
- 'reset' => 0,
- 'bold' => 1,
- 'dark' => 2,
- 'underline' => 4,
- 'underscore' => 4,
- 'blink' => 5,
- 'reverse' => 7,
- 'concealed' => 8,
-
- 'black' => 30, 'on_black' => 40,
- 'red' => 31, 'on_red' => 41,
- 'green' => 32, 'on_green' => 42,
- 'yellow' => 33, 'on_yellow' => 43,
- 'blue' => 34, 'on_blue' => 44,
- 'magenta' => 35, 'on_magenta' => 45,
- 'cyan' => 36, 'on_cyan' => 46,
- 'white' => 37, 'on_white' => 47);
-
-
-############################################################################
-# Implementation (constant form)
-############################################################################
-
-# Time to have fun! We now want to define the constant subs, which are
-# named the same as the attributes above but in all caps. Each constant sub
-# needs to act differently depending on whether $AUTORESET is set. Without
-# autoreset:
-#
-# BLUE "text\n" ==> "\e[34mtext\n"
-#
-# If $AUTORESET is set, we should instead get:
-#
-# BLUE "text\n" ==> "\e[34mtext\n\e[0m"
-#
-# The sub also needs to handle the case where it has no arguments correctly.
-# Maintaining all of this as separate subs would be a major nightmare, as
-# well as duplicate the %attributes hash, so instead we define an AUTOLOAD
-# sub to define the constant subs on demand. To do that, we check the name
-# of the called sub against the list of attributes, and if it's an all-caps
-# version of one of them, we define the sub on the fly and then run it.
-sub AUTOLOAD {
- my $sub;
- ($sub = $AUTOLOAD) =~ s/^.*:://;
- my $attr = $attributes{lc $sub};
- if ($sub =~ /^[A-Z_]+$/ && defined $attr) {
- $attr = "\e[" . $attr . 'm';
- eval qq {
- sub $AUTOLOAD {
- if (\$AUTORESET && \@_) {
- '$attr' . "\@_" . "\e[0m";
- } else {
- ('$attr' . "\@_");
- }
- }
- };
- goto &$AUTOLOAD;
- } else {
- require Carp;
- Carp::croak ("undefined subroutine &$AUTOLOAD called");
- }
-}
-
-
-############################################################################
-# Implementation (attribute string form)
-############################################################################
-
-# Return the escape code for a given set of color attributes.
-sub color {
- my @codes = map { split } @_;
- my $attribute = '';
- foreach (@codes) {
- $_ = lc $_;
- unless (defined $attributes{$_}) {
- require Carp;
- Carp::croak ("Invalid attribute name $_");
- }
- $attribute .= $attributes{$_} . ';';
- }
- chop $attribute;
- ($attribute ne '') ? "\e[${attribute}m" : undef;
-}
-
-# Given a string and a set of attributes, returns the string surrounded by
-# escape codes to set those attributes and then clear them at the end of the
-# string. The attributes can be given either as an array ref as the first
-# argument or as a list as the second and subsequent arguments. If
-# $EACHLINE is set, insert a reset before each occurrence of the string
-# $EACHLINE and the starting attribute code after the string $EACHLINE, so
-# that no attribute crosses line delimiters (this is often desirable if the
-# output is to be piped to a pager or some other program).
-sub colored {
- my ($string, @codes);
- if (ref $_[0]) {
- @codes = @{+shift};
- $string = join ('', @_);
- } else {
- $string = shift;
- @codes = @_;
- }
- if (defined $EACHLINE) {
- my $attr = color (@codes);
- join '',
- map { $_ && $_ ne $EACHLINE ? $attr . $_ . "\e[0m" : $_ }
- split (/(\Q$EACHLINE\E)/, $string);
- } else {
- color (@codes) . $string . "\e[0m";
- }
-}
-
-
-############################################################################
-# Module return value and documentation
-############################################################################
-
-# Ensure we evaluate to true.
-1;
-__END__
-
-=head1 NAME
-
-Term::ANSIColor - Color screen output using ANSI escape sequences
-
-=head1 SYNOPSIS
-
- use Term::ANSIColor;
- print color 'bold blue';
- print "This text is bold blue.\n";
- print color 'reset';
- print "This text is normal.\n";
- print colored ("Yellow on magenta.\n", 'yellow on_magenta');
- print "This text is normal.\n";
- print colored ['yellow on_magenta'], "Yellow on magenta.\n";
-
- use Term::ANSIColor qw(:constants);
- print BOLD, BLUE, "This text is in bold blue.\n", RESET;
-
- use Term::ANSIColor qw(:constants);
- $Term::ANSIColor::AUTORESET = 1;
- print BOLD BLUE "This text is in bold blue.\n";
- print "This text is normal.\n";
-
-=head1 DESCRIPTION
-
-This module has two interfaces, one through color() and colored() and the
-other through constants.
-
-color() takes any number of strings as arguments and considers them to be
-space-separated lists of attributes. It then forms and returns the escape
-sequence to set those attributes. It doesn't print it out, just returns
-it, so you'll have to print it yourself if you want to (this is so that
-you can save it as a string, pass it to something else, send it to a file
-handle, or do anything else with it that you might care to).
-
-The recognized attributes (all of which should be fairly intuitive) are
-clear, reset, dark, bold, underline, underscore, blink, reverse,
-concealed, black, red, green, yellow, blue, magenta, on_black, on_red,
-on_green, on_yellow, on_blue, on_magenta, on_cyan, and on_white. Case is
-not significant. Underline and underscore are equivalent, as are clear
-and reset, so use whichever is the most intuitive to you. The color alone
-sets the foreground color, and on_color sets the background color.
-
-Note that not all attributes are supported by all terminal types, and some
-terminals may not support any of these sequences. Dark, blink, and
-concealed in particular are frequently not implemented.
-
-Attributes, once set, last until they are unset (by sending the attribute
-"reset"). Be careful to do this, or otherwise your attribute will last
-after your script is done running, and people get very annoyed at having
-their prompt and typing changed to weird colors.
-
-As an aid to help with this, colored() takes a scalar as the first
-argument and any number of attribute strings as the second argument and
-returns the scalar wrapped in escape codes so that the attributes will be
-set as requested before the string and reset to normal after the string.
-Alternately, you can pass a reference to an array as the first argument,
-and then the contents of that array will be taken as attributes and color
-codes and the remainder of the arguments as text to colorize.
-
-Normally, colored() just puts attribute codes at the beginning and end of
-the string, but if you set $Term::ANSIColor::EACHLINE to some string,
-that string will be considered the line delimiter and the attribute will
-be set at the beginning of each line of the passed string and reset at the
-end of each line. This is often desirable if the output is being sent to
-a program like a pager that can be confused by attributes that span lines.
-Normally you'll want to set $Term::ANSIColor::EACHLINE to C<"\n"> to use
-this feature.
-
-Alternately, if you import C<:constants>, you can use the constants CLEAR,
-RESET, BOLD, DARK, UNDERLINE, UNDERSCORE, BLINK, REVERSE, CONCEALED,
-BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, ON_BLACK, ON_RED, ON_GREEN,
-ON_YELLOW, ON_BLUE, ON_MAGENTA, ON_CYAN, and ON_WHITE directly. These are
-the same as color('attribute') and can be used if you prefer typing:
-
- print BOLD BLUE ON_WHITE "Text\n", RESET;
-
-to
-
- print colored ("Text\n", 'bold blue on_white');
-
-When using the constants, if you don't want to have to remember to add the
-C<, RESET> at the end of each print line, you can set
-$Term::ANSIColor::AUTORESET to a true value. Then, the display mode will
-automatically be reset if there is no comma after the constant. In other
-words, with that variable set:
-
- print BOLD BLUE "Text\n";
-
-will reset the display mode afterwards, whereas:
-
- print BOLD, BLUE, "Text\n";
-
-will not.
-
-The subroutine interface has the advantage over the constants interface in
-that only two subroutines are exported into your namespace, versus
-twenty-two in the constants interface. On the flip side, the constants
-interface has the advantage of better compile time error checking, since
-misspelled names of colors or attributes in calls to color() and colored()
-won't be caught until runtime whereas misspelled names of constants will
-be caught at compile time. So, polute your namespace with almost two
-dozen subroutines that you may not even use that often, or risk a silly
-bug by mistyping an attribute. Your choice, TMTOWTDI after all.
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item Invalid attribute name %s
-
-(F) You passed an invalid attribute name to either color() or colored().
-
-=item Name "%s" used only once: possible typo
-
-(W) You probably mistyped a constant color name such as:
-
- print FOOBAR "This text is color FOOBAR\n";
-
-It's probably better to always use commas after constant names in order to
-force the next error.
-
-=item No comma allowed after filehandle
-
-(F) You probably mistyped a constant color name such as:
-
- print FOOBAR, "This text is color FOOBAR\n";
-
-Generating this fatal compile error is one of the main advantages of using
-the constants interface, since you'll immediately know if you mistype a
-color name.
-
-=item Bareword "%s" not allowed while "strict subs" in use
-
-(F) You probably mistyped a constant color name such as:
-
- $Foobar = FOOBAR . "This line should be blue\n";
-
-or:
-
- @Foobar = FOOBAR, "This line should be blue\n";
-
-This will only show up under use strict (another good reason to run under
-use strict).
-
-=back
-
-=head1 RESTRICTIONS
-
-It would be nice if one could leave off the commas around the constants
-entirely and just say:
-
- print BOLD BLUE ON_WHITE "Text\n" RESET;
-
-but the syntax of Perl doesn't allow this. You need a comma after the
-string. (Of course, you may consider it a bug that commas between all the
-constants aren't required, in which case you may feel free to insert
-commas unless you're using $Term::ANSIColor::AUTORESET.)
-
-For easier debuging, you may prefer to always use the commas when not
-setting $Term::ANSIColor::AUTORESET so that you'll get a fatal compile
-error rather than a warning.
-
-=head1 NOTES
-
-Jean Delvare provided the following table of different common terminal
-emulators and their support for the various attributes:
-
- clear bold dark under blink reverse conceal
- ------------------------------------------------------------------------
- xterm yes yes no yes bold yes yes
- linux yes yes yes bold yes yes no
- rxvt yes yes no yes bold/black yes no
- dtterm yes yes yes yes reverse yes yes
- teraterm yes reverse no yes rev/red yes no
- aixterm kinda normal no yes no yes yes
-
-Where the entry is other than yes or no, that emulator interpret the given
-attribute as something else instead. Note that on an aixterm, clear
-doesn't reset colors; you have to explicitly set the colors back to what
-you want. More entries in this table are welcome.
-
-=head1 AUTHORS
-
-Original idea (using constants) by Zenin (zenin@best.com), reimplemented
-using subs by Russ Allbery (rra@stanford.edu), and then combined with the
-original idea by Russ with input from Zenin.
-
-=cut
diff --git a/contrib/perl5/lib/Term/Cap.pm b/contrib/perl5/lib/Term/Cap.pm
deleted file mode 100644
index 0954000..0000000
--- a/contrib/perl5/lib/Term/Cap.pm
+++ /dev/null
@@ -1,410 +0,0 @@
-package Term::Cap;
-use Carp;
-
-# Last updated: Thu Dec 14 20:02:42 CST 1995 by sanders@bsdi.com
-
-# TODO:
-# support Berkeley DB termcaps
-# should probably be a .xs module
-# force $FH into callers package?
-# keep $FH in object at Tgetent time?
-
-=head1 NAME
-
-Term::Cap - Perl termcap interface
-
-=head1 SYNOPSIS
-
- require Term::Cap;
- $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
- $terminal->Trequire(qw/ce ku kd/);
- $terminal->Tgoto('cm', $col, $row, $FH);
- $terminal->Tputs('dl', $count, $FH);
- $terminal->Tpad($string, $count, $FH);
-
-=head1 DESCRIPTION
-
-These are low-level functions to extract and use capabilities from
-a terminal capability (termcap) database.
-
-The B<Tgetent> function extracts the entry of the specified terminal
-type I<TERM> (defaults to the environment variable I<TERM>) from the
-database.
-
-It will look in the environment for a I<TERMCAP> variable. If
-found, and the value does not begin with a slash, and the terminal
-type name is the same as the environment string I<TERM>, the
-I<TERMCAP> string is used instead of reading a termcap file. If
-it does begin with a slash, the string is used as a path name of
-the termcap file to search. If I<TERMCAP> does not begin with a
-slash and name is different from I<TERM>, B<Tgetent> searches the
-files F<$HOME/.termcap>, F</etc/termcap>, and F</usr/share/misc/termcap>,
-in that order, unless the environment variable I<TERMPATH> exists,
-in which case it specifies a list of file pathnames (separated by
-spaces or colons) to be searched B<instead>. Whenever multiple
-files are searched and a tc field occurs in the requested entry,
-the entry it names must be found in the same file or one of the
-succeeding files. If there is a C<:tc=...:> in the I<TERMCAP>
-environment variable string it will continue the search in the
-files as above.
-
-I<OSPEED> is the terminal output bit rate (often mistakenly called
-the baud rate). I<OSPEED> can be specified as either a POSIX
-termios/SYSV termio speeds (where 9600 equals 9600) or an old
-BSD-style speeds (where 13 equals 9600).
-
-B<Tgetent> returns a blessed object reference which the user can
-then use to send the control strings to the terminal using B<Tputs>
-and B<Tgoto>. It calls C<croak> on failure.
-
-B<Tgoto> decodes a cursor addressing string with the given parameters.
-
-The output strings for B<Tputs> are cached for counts of 1 for performance.
-B<Tgoto> and B<Tpad> do not cache. C<$self-E<gt>{_xx}> is the raw termcap
-data and C<$self-E<gt>{xx}> is the cached version.
-
- print $terminal->Tpad($self->{_xx}, 1);
-
-B<Tgoto>, B<Tputs>, and B<Tpad> return the string and will also
-output the string to $FH if specified.
-
-The extracted termcap entry is available in the object
-as C<$self-E<gt>{TERMCAP}>.
-
-=head1 EXAMPLES
-
- # Get terminal output speed
- require POSIX;
- my $termios = new POSIX::Termios;
- $termios->getattr;
- my $ospeed = $termios->getospeed;
-
- # Old-style ioctl code to get ospeed:
- # require 'ioctl.pl';
- # ioctl(TTY,$TIOCGETP,$sgtty);
- # ($ispeed,$ospeed) = unpack('cc',$sgtty);
-
- # allocate and initialize a terminal structure
- $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
-
- # require certain capabilities to be available
- $terminal->Trequire(qw/ce ku kd/);
-
- # Output Routines, if $FH is undefined these just return the string
-
- # Tgoto does the % expansion stuff with the given args
- $terminal->Tgoto('cm', $col, $row, $FH);
-
- # Tputs doesn't do any % expansion.
- $terminal->Tputs('dl', $count = 1, $FH);
-
-=cut
-
-# Returns a list of termcap files to check.
-sub termcap_path { ## private
- my @termcap_path;
- # $TERMCAP, if it's a filespec
- push(@termcap_path, $ENV{TERMCAP})
- if ((exists $ENV{TERMCAP}) &&
- (($^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'dos')
- ? $ENV{TERMCAP} =~ /^[a-z]:[\\\/]/is
- : $ENV{TERMCAP} =~ /^\//s));
- if ((exists $ENV{TERMPATH}) && ($ENV{TERMPATH})) {
- # Add the users $TERMPATH
- push(@termcap_path, split(/(:|\s+)/, $ENV{TERMPATH}))
- }
- else {
- # Defaults
- push(@termcap_path,
- $ENV{'HOME'} . '/.termcap',
- '/etc/termcap',
- '/usr/share/misc/termcap',
- );
- }
- # return the list of those termcaps that exist
- grep(-f, @termcap_path);
-}
-
-sub Tgetent { ## public -- static method
- my $class = shift;
- my $self = bless shift, $class;
- my($term,$cap,$search,$field,$max,$tmp_term,$TERMCAP);
- local($termpat,$state,$first,$entry); # used inside eval
- local $_;
-
- # Compute PADDING factor from OSPEED (to be used by Tpad)
- if (! $self->{OSPEED}) {
- carp "OSPEED was not set, defaulting to 9600";
- $self->{OSPEED} = 9600;
- }
- if ($self->{OSPEED} < 16) {
- # delays for old style speeds
- my @pad = (0,200,133.3,90.9,74.3,66.7,50,33.3,16.7,8.3,5.5,4.1,2,1,.5,.2);
- $self->{PADDING} = $pad[$self->{OSPEED}];
- }
- else {
- $self->{PADDING} = 10000 / $self->{OSPEED};
- }
-
- $self->{TERM} = ($self->{TERM} || $ENV{TERM} || croak "TERM not set");
- $term = $self->{TERM}; # $term is the term type we are looking for
-
- # $tmp_term is always the next term (possibly :tc=...:) we are looking for
- $tmp_term = $self->{TERM};
- # protect any pattern metacharacters in $tmp_term
- $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
-
- my $foo = (exists $ENV{TERMCAP} ? $ENV{TERMCAP} : '');
-
- # $entry is the extracted termcap entry
- if (($foo !~ m:^/:s) && ($foo =~ m/(^|\|)${termpat}[:|]/s)) {
- $entry = $foo;
- }
-
- my @termcap_path = termcap_path;
- croak "Can't find a valid termcap file" unless @termcap_path || $entry;
-
- $state = 1; # 0 == finished
- # 1 == next file
- # 2 == search again
-
- $first = 0; # first entry (keeps term name)
-
- $max = 32; # max :tc=...:'s
-
- if ($entry) {
- # ok, we're starting with $TERMCAP
- $first++; # we're the first entry
- # do we need to continue?
- if ($entry =~ s/:tc=([^:]+):/:/) {
- $tmp_term = $1;
- # protect any pattern metacharacters in $tmp_term
- $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
- }
- else {
- $state = 0; # we're already finished
- }
- }
-
- # This is eval'ed inside the while loop for each file
- $search = q{
- while (<TERMCAP>) {
- next if /^\\t/ || /^#/;
- if ($_ =~ m/(^|\\|)${termpat}[:|]/o) {
- chomp;
- s/^[^:]*:// if $first++;
- $state = 0;
- while ($_ =~ s/\\\\$//) {
- defined(my $x = <TERMCAP>) or last;
- $_ .= $x; chomp;
- }
- last;
- }
- }
- defined $entry or $entry = '';
- $entry .= $_;
- };
-
- while ($state != 0) {
- if ($state == 1) {
- # get the next TERMCAP
- $TERMCAP = shift @termcap_path
- || croak "failed termcap lookup on $tmp_term";
- }
- else {
- # do the same file again
- # prevent endless recursion
- $max-- || croak "failed termcap loop at $tmp_term";
- $state = 1; # ok, maybe do a new file next time
- }
-
- open(TERMCAP,"< $TERMCAP\0") || croak "open $TERMCAP: $!";
- eval $search;
- die $@ if $@;
- close TERMCAP;
-
- # If :tc=...: found then search this file again
- $entry =~ s/:tc=([^:]+):/:/ && ($tmp_term = $1, $state = 2);
- # protect any pattern metacharacters in $tmp_term
- $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
- }
-
- croak "Can't find $term" if $entry eq '';
- $entry =~ s/:+\s*:+/:/g; # cleanup $entry
- $entry =~ s/:+/:/g; # cleanup $entry
- $self->{TERMCAP} = $entry; # save it
- # print STDERR "DEBUG: $entry = ", $entry, "\n";
-
- # Precompile $entry into the object
- $entry =~ s/^[^:]*://;
- foreach $field (split(/:[\s:\\]*/,$entry)) {
- if ($field =~ /^(\w\w)$/) {
- $self->{'_' . $field} = 1 unless defined $self->{'_' . $1};
- # print STDERR "DEBUG: flag $1\n";
- }
- elsif ($field =~ /^(\w\w)\@/) {
- $self->{'_' . $1} = "";
- # print STDERR "DEBUG: unset $1\n";
- }
- elsif ($field =~ /^(\w\w)#(.*)/) {
- $self->{'_' . $1} = $2 unless defined $self->{'_' . $1};
- # print STDERR "DEBUG: numeric $1 = $2\n";
- }
- elsif ($field =~ /^(\w\w)=(.*)/) {
- # print STDERR "DEBUG: string $1 = $2\n";
- next if defined $self->{'_' . ($cap = $1)};
- $_ = $2;
- s/\\E/\033/g;
- s/\\(\d\d\d)/pack('c',oct($1) & 0177)/eg;
- s/\\n/\n/g;
- s/\\r/\r/g;
- s/\\t/\t/g;
- s/\\b/\b/g;
- s/\\f/\f/g;
- s/\\\^/\377/g;
- s/\^\?/\177/g;
- s/\^(.)/pack('c',ord($1) & 31)/eg;
- s/\\(.)/$1/g;
- s/\377/^/g;
- $self->{'_' . $cap} = $_;
- }
- # else { carp "junk in $term ignored: $field"; }
- }
- $self->{'_pc'} = "\0" unless defined $self->{'_pc'};
- $self->{'_bc'} = "\b" unless defined $self->{'_bc'};
- $self;
-}
-
-# $terminal->Tpad($string, $cnt, $FH);
-sub Tpad { ## public
- my $self = shift;
- my($string, $cnt, $FH) = @_;
- my($decr, $ms);
-
- if ($string =~ /(^[\d.]+)(\*?)(.*)$/) {
- $ms = $1;
- $ms *= $cnt if $2;
- $string = $3;
- $decr = $self->{PADDING};
- if ($decr > .1) {
- $ms += $decr / 2;
- $string .= $self->{'_pc'} x ($ms / $decr);
- }
- }
- print $FH $string if $FH;
- $string;
-}
-
-# $terminal->Tputs($cap, $cnt, $FH);
-sub Tputs { ## public
- my $self = shift;
- my($cap, $cnt, $FH) = @_;
- my $string;
-
- if ($cnt > 1) {
- $string = Tpad($self, $self->{'_' . $cap}, $cnt);
- } else {
- # cache result because Tpad can be slow
- $string = defined $self->{$cap} ? $self->{$cap} :
- ($self->{$cap} = Tpad($self, $self->{'_' . $cap}, 1));
- }
- print $FH $string if $FH;
- $string;
-}
-
-# %% output `%'
-# %d output value as in printf %d
-# %2 output value as in printf %2d
-# %3 output value as in printf %3d
-# %. output value as in printf %c
-# %+x add x to value, then do %.
-#
-# %>xy if value > x then add y, no output
-# %r reverse order of two parameters, no output
-# %i increment by one, no output
-# %B BCD (16*(value/10)) + (value%10), no output
-#
-# %n exclusive-or all parameters with 0140 (Datamedia 2500)
-# %D Reverse coding (value - 2*(value%16)), no output (Delta Data)
-#
-# $terminal->Tgoto($cap, $col, $row, $FH);
-sub Tgoto { ## public
- my $self = shift;
- my($cap, $code, $tmp, $FH) = @_;
- my $string = $self->{'_' . $cap};
- my $result = '';
- my $after = '';
- my $online = 0;
- my @tmp = ($tmp,$code);
- my $cnt = $code;
-
- while ($string =~ /^([^%]*)%(.)(.*)/) {
- $result .= $1;
- $code = $2;
- $string = $3;
- if ($code eq 'd') {
- $result .= sprintf("%d",shift(@tmp));
- }
- elsif ($code eq '.') {
- $tmp = shift(@tmp);
- if ($tmp == 0 || $tmp == 4 || $tmp == 10) {
- if ($online) {
- ++$tmp, $after .= $self->{'_up'} if $self->{'_up'};
- }
- else {
- ++$tmp, $after .= $self->{'_bc'};
- }
- }
- $result .= sprintf("%c",$tmp);
- $online = !$online;
- }
- elsif ($code eq '+') {
- $result .= sprintf("%c",shift(@tmp)+ord($string));
- $string = substr($string,1,99);
- $online = !$online;
- }
- elsif ($code eq 'r') {
- ($code,$tmp) = @tmp;
- @tmp = ($tmp,$code);
- $online = !$online;
- }
- elsif ($code eq '>') {
- ($code,$tmp,$string) = unpack("CCa99",$string);
- if ($tmp[$[] > $code) {
- $tmp[$[] += $tmp;
- }
- }
- elsif ($code eq '2') {
- $result .= sprintf("%02d",shift(@tmp));
- $online = !$online;
- }
- elsif ($code eq '3') {
- $result .= sprintf("%03d",shift(@tmp));
- $online = !$online;
- }
- elsif ($code eq 'i') {
- ($code,$tmp) = @tmp;
- @tmp = ($code+1,$tmp+1);
- }
- else {
- return "OOPS";
- }
- }
- $string = Tpad($self, $result . $string . $after, $cnt);
- print $FH $string if $FH;
- $string;
-}
-
-# $terminal->Trequire(qw/ce ku kd/);
-sub Trequire { ## public
- my $self = shift;
- my($cap,@undefined);
- foreach $cap (@_) {
- push(@undefined, $cap)
- unless defined $self->{'_' . $cap} && $self->{'_' . $cap};
- }
- croak "Terminal does not support: (@undefined)" if @undefined;
-}
-
-1;
-
diff --git a/contrib/perl5/lib/Term/Complete.pm b/contrib/perl5/lib/Term/Complete.pm
deleted file mode 100644
index 445dfca..0000000
--- a/contrib/perl5/lib/Term/Complete.pm
+++ /dev/null
@@ -1,154 +0,0 @@
-package Term::Complete;
-require 5.000;
-require Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(Complete);
-
-# @(#)complete.pl,v1.2 (me@anywhere.EBay.Sun.COM) 09/23/91
-
-=head1 NAME
-
-Term::Complete - Perl word completion module
-
-=head1 SYNOPSIS
-
- $input = Complete('prompt_string', \@completion_list);
- $input = Complete('prompt_string', @completion_list);
-
-=head1 DESCRIPTION
-
-This routine provides word completion on the list of words in
-the array (or array ref).
-
-The tty driver is put into raw mode using the system command
-C<stty raw -echo> and restored using C<stty -raw echo>.
-
-The following command characters are defined:
-
-=over 4
-
-=item E<lt>tabE<gt>
-
-Attempts word completion.
-Cannot be changed.
-
-=item ^D
-
-Prints completion list.
-Defined by I<$Term::Complete::complete>.
-
-=item ^U
-
-Erases the current input.
-Defined by I<$Term::Complete::kill>.
-
-=item E<lt>delE<gt>, E<lt>bsE<gt>
-
-Erases one character.
-Defined by I<$Term::Complete::erase1> and I<$Term::Complete::erase2>.
-
-=back
-
-=head1 DIAGNOSTICS
-
-Bell sounds when word completion fails.
-
-=head1 BUGS
-
-The completion character E<lt>tabE<gt> cannot be changed.
-
-=head1 AUTHOR
-
-Wayne Thompson
-
-=cut
-
-CONFIG: {
- $complete = "\004";
- $kill = "\025";
- $erase1 = "\177";
- $erase2 = "\010";
-}
-
-sub Complete {
- my($prompt, @cmp_list, $cmp, $test, $l, @match);
- my ($return, $r) = ("", 0);
-
- $return = "";
- $r = 0;
-
- $prompt = shift;
- if (ref $_[0] || $_[0] =~ /^\*/) {
- @cmp_lst = sort @{$_[0]};
- }
- else {
- @cmp_lst = sort(@_);
- }
-
- system('stty raw -echo');
- LOOP: {
- print($prompt, $return);
- while (($_ = getc(STDIN)) ne "\r") {
- CASE: {
- # (TAB) attempt completion
- $_ eq "\t" && do {
- @match = grep(/^$return/, @cmp_lst);
- unless ($#match < 0) {
- $l = length($test = shift(@match));
- foreach $cmp (@match) {
- until (substr($cmp, 0, $l) eq substr($test, 0, $l)) {
- $l--;
- }
- }
- print("\a");
- print($test = substr($test, $r, $l - $r));
- $r = length($return .= $test);
- }
- last CASE;
- };
-
- # (^D) completion list
- $_ eq $complete && do {
- print(join("\r\n", '', grep(/^$return/, @cmp_lst)), "\r\n");
- redo LOOP;
- };
-
- # (^U) kill
- $_ eq $kill && do {
- if ($r) {
- $r = 0;
- $return = "";
- print("\r\n");
- redo LOOP;
- }
- last CASE;
- };
-
- # (DEL) || (BS) erase
- ($_ eq $erase1 || $_ eq $erase2) && do {
- if($r) {
- print("\b \b");
- chop($return);
- $r--;
- }
- last CASE;
- };
-
- # printable char
- ord >= 32 && do {
- $return .= $_;
- $r++;
- print;
- last CASE;
- };
- }
- }
- }
- system('stty -raw echo');
- print("\n");
- $return;
-}
-
-1;
-
diff --git a/contrib/perl5/lib/Term/ReadLine.pm b/contrib/perl5/lib/Term/ReadLine.pm
deleted file mode 100644
index fc78d7b..0000000
--- a/contrib/perl5/lib/Term/ReadLine.pm
+++ /dev/null
@@ -1,369 +0,0 @@
-=head1 NAME
-
-Term::ReadLine - Perl interface to various C<readline> packages. If
-no real package is found, substitutes stubs instead of basic functions.
-
-=head1 SYNOPSIS
-
- use Term::ReadLine;
- $term = new Term::ReadLine 'Simple Perl calc';
- $prompt = "Enter your arithmetic expression: ";
- $OUT = $term->OUT || STDOUT;
- while ( defined ($_ = $term->readline($prompt)) ) {
- $res = eval($_), "\n";
- warn $@ if $@;
- print $OUT $res, "\n" unless $@;
- $term->addhistory($_) if /\S/;
- }
-
-=head1 DESCRIPTION
-
-This package is just a front end to some other packages. At the moment
-this description is written, the only such package is Term-ReadLine,
-available on CPAN near you. The real target of this stub package is to
-set up a common interface to whatever Readline emerges with time.
-
-=head1 Minimal set of supported functions
-
-All the supported functions should be called as methods, i.e., either as
-
- $term = new Term::ReadLine 'name';
-
-or as
-
- $term->addhistory('row');
-
-where $term is a return value of Term::ReadLine-E<gt>Init.
-
-=over 12
-
-=item C<ReadLine>
-
-returns the actual package that executes the commands. Among possible
-values are C<Term::ReadLine::Gnu>, C<Term::ReadLine::Perl>,
-C<Term::ReadLine::Stub Exporter>.
-
-=item C<new>
-
-returns the handle for subsequent calls to following
-functions. Argument is the name of the application. Optionally can be
-followed by two arguments for C<IN> and C<OUT> filehandles. These
-arguments should be globs.
-
-=item C<readline>
-
-gets an input line, I<possibly> with actual C<readline>
-support. Trailing newline is removed. Returns C<undef> on C<EOF>.
-
-=item C<addhistory>
-
-adds the line to the history of input, from where it can be used if
-the actual C<readline> is present.
-
-=item C<IN>, $C<OUT>
-
-return the filehandles for input and output or C<undef> if C<readline>
-input and output cannot be used for Perl.
-
-=item C<MinLine>
-
-If argument is specified, it is an advice on minimal size of line to
-be included into history. C<undef> means do not include anything into
-history. Returns the old value.
-
-=item C<findConsole>
-
-returns an array with two strings that give most appropriate names for
-files for input and output using conventions C<"E<lt>$in">, C<"E<gt>out">.
-
-=item Attribs
-
-returns a reference to a hash which describes internal configuration
-of the package. Names of keys in this hash conform to standard
-conventions with the leading C<rl_> stripped.
-
-=item C<Features>
-
-Returns a reference to a hash with keys being features present in
-current implementation. Several optional features are used in the
-minimal interface: C<appname> should be present if the first argument
-to C<new> is recognized, and C<minline> should be present if
-C<MinLine> method is not dummy. C<autohistory> should be present if
-lines are put into history automatically (maybe subject to
-C<MinLine>), and C<addhistory> if C<addhistory> method is not dummy.
-
-If C<Features> method reports a feature C<attribs> as present, the
-method C<Attribs> is not dummy.
-
-=back
-
-=head1 Additional supported functions
-
-Actually C<Term::ReadLine> can use some other package, that will
-support reacher set of commands.
-
-All these commands are callable via method interface and have names
-which conform to standard conventions with the leading C<rl_> stripped.
-
-The stub package included with the perl distribution allows some
-additional methods:
-
-=over 12
-
-=item C<tkRunning>
-
-makes Tk event loop run when waiting for user input (i.e., during
-C<readline> method).
-
-=item C<ornaments>
-
-makes the command line stand out by using termcap data. The argument
-to C<ornaments> should be 0, 1, or a string of a form
-C<"aa,bb,cc,dd">. Four components of this string should be names of
-I<terminal capacities>, first two will be issued to make the prompt
-standout, last two to make the input line standout.
-
-=item C<newTTY>
-
-takes two arguments which are input filehandle and output filehandle.
-Switches to use these filehandles.
-
-=back
-
-One can check whether the currently loaded ReadLine package supports
-these methods by checking for corresponding C<Features>.
-
-=head1 EXPORTS
-
-None
-
-=head1 ENVIRONMENT
-
-The environment variable C<PERL_RL> governs which ReadLine clone is
-loaded. If the value is false, a dummy interface is used. If the value
-is true, it should be tail of the name of the package to use, such as
-C<Perl> or C<Gnu>.
-
-As a special case, if the value of this variable is space-separated,
-the tail might be used to disable the ornaments by setting the tail to
-be C<o=0> or C<ornaments=0>. The head should be as described above, say
-
-If the variable is not set, or if the head of space-separated list is
-empty, the best available package is loaded.
-
- export "PERL_RL=Perl o=0" # Use Perl ReadLine without ornaments
- export "PERL_RL= o=0" # Use best available ReadLine without ornaments
-
-(Note that processing of C<PERL_RL> for ornaments is in the discretion of the
-particular used C<Term::ReadLine::*> package).
-
-=cut
-
-package Term::ReadLine::Stub;
-@ISA = qw'Term::ReadLine::Tk Term::ReadLine::TermCap';
-
-$DB::emacs = $DB::emacs; # To peacify -w
-*rl_term_set = \@Term::ReadLine::TermCap::rl_term_set;
-
-sub ReadLine {'Term::ReadLine::Stub'}
-sub readline {
- my $self = shift;
- my ($in,$out,$str) = @$self;
- my $prompt = shift;
- print $out $rl_term_set[0], $prompt, $rl_term_set[1], $rl_term_set[2];
- $self->register_Tk
- if not $Term::ReadLine::registered and $Term::ReadLine::toloop
- and defined &Tk::DoOneEvent;
- #$str = scalar <$in>;
- $str = $self->get_line;
- $str =~ s/^\s*\Q$prompt\E// if ($^O eq 'MacOS');
- print $out $rl_term_set[3];
- # bug in 5.000: chomping empty string creats length -1:
- chomp $str if defined $str;
- $str;
-}
-sub addhistory {}
-
-sub findConsole {
- my $console;
-
- if ($^O eq 'MacOS') {
- $console = "Dev:Console";
- } elsif (-e "/dev/tty") {
- $console = "/dev/tty";
- } elsif (-e "con" or $^O eq 'MSWin32') {
- $console = "con";
- } else {
- $console = "sys\$command";
- }
-
- if (($^O eq 'amigaos') || ($^O eq 'beos') || ($^O eq 'epoc')) {
- $console = undef;
- }
- elsif ($^O eq 'os2') {
- if ($DB::emacs) {
- $console = undef;
- } else {
- $console = "/dev/con";
- }
- }
-
- $consoleOUT = $console;
- $console = "&STDIN" unless defined $console;
- if (!defined $consoleOUT) {
- $consoleOUT = defined fileno(STDERR) ? "&STDERR" : "&STDOUT";
- }
- ($console,$consoleOUT);
-}
-
-sub new {
- die "method new called with wrong number of arguments"
- unless @_==2 or @_==4;
- #local (*FIN, *FOUT);
- my ($FIN, $FOUT, $ret);
- if (@_==2) {
- ($console, $consoleOUT) = findConsole;
-
- open(FIN, "<$console");
- open(FOUT,">$consoleOUT");
- #OUT->autoflush(1); # Conflicts with debugger?
- $sel = select(FOUT);
- $| = 1; # for DB::OUT
- select($sel);
- $ret = bless [\*FIN, \*FOUT];
- } else { # Filehandles supplied
- $FIN = $_[2]; $FOUT = $_[3];
- #OUT->autoflush(1); # Conflicts with debugger?
- $sel = select($FOUT);
- $| = 1; # for DB::OUT
- select($sel);
- $ret = bless [$FIN, $FOUT];
- }
- if ($ret->Features->{ornaments}
- and not ($ENV{PERL_RL} and $ENV{PERL_RL} =~ /\bo\w*=0/)) {
- local $Term::ReadLine::termcap_nowarn = 1;
- $ret->ornaments(1);
- }
- return $ret;
-}
-
-sub newTTY {
- my ($self, $in, $out) = @_;
- $self->[0] = $in;
- $self->[1] = $out;
- my $sel = select($out);
- $| = 1; # for DB::OUT
- select($sel);
-}
-
-sub IN { shift->[0] }
-sub OUT { shift->[1] }
-sub MinLine { undef }
-sub Attribs { {} }
-
-my %features = (tkRunning => 1, ornaments => 1, 'newTTY' => 1);
-sub Features { \%features }
-
-package Term::ReadLine; # So late to allow the above code be defined?
-
-my ($which) = exists $ENV{PERL_RL} ? split /\s+/, $ENV{PERL_RL} : undef;
-if ($which) {
- if ($which =~ /\bgnu\b/i){
- eval "use Term::ReadLine::Gnu;";
- } elsif ($which =~ /\bperl\b/i) {
- eval "use Term::ReadLine::Perl;";
- } else {
- eval "use Term::ReadLine::$which;";
- }
-} elsif (defined $which and $which ne '') { # Defined but false
- # Do nothing fancy
-} else {
- eval "use Term::ReadLine::Gnu; 1" or eval "use Term::ReadLine::Perl; 1";
-}
-
-#require FileHandle;
-
-# To make possible switch off RL in debugger: (Not needed, work done
-# in debugger).
-
-if (defined &Term::ReadLine::Gnu::readline) {
- @ISA = qw(Term::ReadLine::Gnu Term::ReadLine::Stub);
-} elsif (defined &Term::ReadLine::Perl::readline) {
- @ISA = qw(Term::ReadLine::Perl Term::ReadLine::Stub);
-} else {
- @ISA = qw(Term::ReadLine::Stub);
-}
-
-package Term::ReadLine::TermCap;
-
-# Prompt-start, prompt-end, command-line-start, command-line-end
-# -- zero-width beautifies to emit around prompt and the command line.
-@rl_term_set = ("","","","");
-# string encoded:
-$rl_term_set = ',,,';
-
-sub LoadTermCap {
- return if defined $terminal;
-
- require Term::Cap;
- $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning.
-}
-
-sub ornaments {
- shift;
- return $rl_term_set unless @_;
- $rl_term_set = shift;
- $rl_term_set ||= ',,,';
- $rl_term_set = 'us,ue,md,me' if $rl_term_set eq '1';
- my @ts = split /,/, $rl_term_set, 4;
- eval { LoadTermCap };
- unless (defined $terminal) {
- warn("Cannot find termcap: $@\n") unless $Term::ReadLine::termcap_nowarn;
- $rl_term_set = ',,,';
- return;
- }
- @rl_term_set = map {$_ ? $terminal->Tputs($_,1) || '' : ''} @ts;
- return $rl_term_set;
-}
-
-
-package Term::ReadLine::Tk;
-
-$count_handle = $count_DoOne = $count_loop = 0;
-
-sub handle {$giveup = 1; $count_handle++}
-
-sub Tk_loop {
- # Tk->tkwait('variable',\$giveup); # needs Widget
- $count_DoOne++, Tk::DoOneEvent(0) until $giveup;
- $count_loop++;
- $giveup = 0;
-}
-
-sub register_Tk {
- my $self = shift;
- $Term::ReadLine::registered++
- or Tk->fileevent($self->IN,'readable',\&handle);
-}
-
-sub tkRunning {
- $Term::ReadLine::toloop = $_[1] if @_ > 1;
- $Term::ReadLine::toloop;
-}
-
-sub get_c {
- my $self = shift;
- $self->Tk_loop if $Term::ReadLine::toloop && defined &Tk::DoOneEvent;
- return getc $self->IN;
-}
-
-sub get_line {
- my $self = shift;
- $self->Tk_loop if $Term::ReadLine::toloop && defined &Tk::DoOneEvent;
- my $in = $self->IN;
- local ($/) = "\n";
- return scalar <$in>;
-}
-
-1;
-
diff --git a/contrib/perl5/lib/Test.pm b/contrib/perl5/lib/Test.pm
deleted file mode 100644
index 4a38d54..0000000
--- a/contrib/perl5/lib/Test.pm
+++ /dev/null
@@ -1,262 +0,0 @@
-use strict;
-package Test;
-use Test::Harness 1.1601 ();
-use Carp;
-our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $ntest, $TestLevel); #public-ish
-our($TESTOUT, $ONFAIL, %todo, %history, $planned, @FAILDETAIL); #private-ish
-$VERSION = '1.15';
-require Exporter;
-@ISA=('Exporter');
-@EXPORT=qw(&plan &ok &skip);
-@EXPORT_OK=qw($ntest $TESTOUT);
-
-$TestLevel = 0; # how many extra stack frames to skip
-$|=1;
-#$^W=1; ?
-$ntest=1;
-$TESTOUT = *STDOUT{IO};
-
-# Use of this variable is strongly discouraged. It is set mainly to
-# help test coverage analyzers know which test is running.
-$ENV{REGRESSION_TEST} = $0;
-
-sub plan {
- croak "Test::plan(%args): odd number of arguments" if @_ & 1;
- croak "Test::plan(): should not be called more than once" if $planned;
- my $max=0;
- for (my $x=0; $x < @_; $x+=2) {
- my ($k,$v) = @_[$x,$x+1];
- if ($k =~ /^test(s)?$/) { $max = $v; }
- elsif ($k eq 'todo' or
- $k eq 'failok') { for (@$v) { $todo{$_}=1; }; }
- elsif ($k eq 'onfail') {
- ref $v eq 'CODE' or croak "Test::plan(onfail => $v): must be CODE";
- $ONFAIL = $v;
- }
- else { carp "Test::plan(): skipping unrecognized directive '$k'" }
- }
- my @todo = sort { $a <=> $b } keys %todo;
- if (@todo) {
- print $TESTOUT "1..$max todo ".join(' ', @todo).";\n";
- } else {
- print $TESTOUT "1..$max\n";
- }
- ++$planned;
-}
-
-sub to_value {
- my ($v) = @_;
- (ref $v or '') eq 'CODE' ? $v->() : $v;
-}
-
-sub ok ($;$$) {
- croak "ok: plan before you test!" if !$planned;
- my ($pkg,$file,$line) = caller($TestLevel);
- my $repetition = ++$history{"$file:$line"};
- my $context = ("$file at line $line".
- ($repetition > 1 ? " fail \#$repetition" : ''));
- my $ok=0;
- my $result = to_value(shift);
- my ($expected,$diag);
- if (@_ == 0) {
- $ok = $result;
- } else {
- $expected = to_value(shift);
- my ($regex,$ignore);
- if (!defined $expected) {
- $ok = !defined $result;
- } elsif (!defined $result) {
- $ok = 0;
- } elsif ((ref($expected)||'') eq 'Regexp') {
- $ok = $result =~ /$expected/;
- } elsif (($regex) = ($expected =~ m,^ / (.+) / $,sx) or
- ($ignore, $regex) = ($expected =~ m,^ m([^\w\s]) (.+) \1 $,sx)) {
- $ok = $result =~ /$regex/;
- } else {
- $ok = $result eq $expected;
- }
- }
- my $todo = $todo{$ntest};
- if ($todo and $ok) {
- $context .= ' TODO?!' if $todo;
- print $TESTOUT "ok $ntest # ($context)\n";
- } else {
- # Issuing two separate print()s causes severe trouble with
- # Test::Harness on VMS. The "not "'s for failed tests occur
- # on a separate line and would not get counted as failures.
- #print $TESTOUT "not " if !$ok;
- #print $TESTOUT "ok $ntest\n";
- # Replace with a single print() as a workaround:
- my $okline = '';
- $okline = "not " if !$ok;
- $okline .= "ok $ntest\n";
- print $TESTOUT $okline;
-
- if (!$ok) {
- my $detail = { 'repetition' => $repetition, 'package' => $pkg,
- 'result' => $result, 'todo' => $todo };
- $$detail{expected} = $expected if defined $expected;
- $diag = $$detail{diagnostic} = to_value(shift) if @_;
- $context .= ' *TODO*' if $todo;
- if (!defined $expected) {
- if (!$diag) {
- print $TESTOUT "# Failed test $ntest in $context\n";
- } else {
- print $TESTOUT "# Failed test $ntest in $context: $diag\n";
- }
- } else {
- my $prefix = "Test $ntest";
- print $TESTOUT "# $prefix got: ".
- (defined $result? "'$result'":'<UNDEF>')." ($context)\n";
- $prefix = ' ' x (length($prefix) - 5);
- if ((ref($expected)||'') eq 'Regexp') {
- $expected = 'qr/'.$expected.'/'
- } else {
- $expected = "'$expected'";
- }
- if (!$diag) {
- print $TESTOUT "# $prefix Expected: $expected\n";
- } else {
- print $TESTOUT "# $prefix Expected: $expected ($diag)\n";
- }
- }
- push @FAILDETAIL, $detail;
- }
- }
- ++ $ntest;
- $ok;
-}
-
-sub skip ($$;$$) {
- my $whyskip = to_value(shift);
- if ($whyskip) {
- $whyskip = 'skip' if $whyskip =~ m/^\d+$/;
- print $TESTOUT "ok $ntest # $whyskip\n";
- ++ $ntest;
- 1;
- } else {
- local($TestLevel) = $TestLevel+1; #ignore this stack frame
- &ok;
- }
-}
-
-END {
- $ONFAIL->(\@FAILDETAIL) if @FAILDETAIL && $ONFAIL;
-}
-
-1;
-__END__
-
-=head1 NAME
-
- Test - provides a simple framework for writing test scripts
-
-=head1 SYNOPSIS
-
- use strict;
- use Test;
-
- # use a BEGIN block so we print our plan before MyModule is loaded
- BEGIN { plan tests => 14, todo => [3,4] }
-
- # load your module...
- use MyModule;
-
- ok(0); # failure
- ok(1); # success
-
- ok(0); # ok, expected failure (see todo list, above)
- ok(1); # surprise success!
-
- ok(0,1); # failure: '0' ne '1'
- ok('broke','fixed'); # failure: 'broke' ne 'fixed'
- ok('fixed','fixed'); # success: 'fixed' eq 'fixed'
- ok('fixed',qr/x/); # success: 'fixed' =~ qr/x/
-
- ok(sub { 1+1 }, 2); # success: '2' eq '2'
- ok(sub { 1+1 }, 3); # failure: '2' ne '3'
- ok(0, int(rand(2)); # (just kidding :-)
-
- my @list = (0,0);
- ok @list, 3, "\@list=".join(',',@list); #extra diagnostics
- ok 'segmentation fault', '/(?i)success/'; #regex match
-
- skip($feature_is_missing, ...); #do platform specific test
-
-=head1 DESCRIPTION
-
-L<Test::Harness|Test::Harness> expects to see particular output when it
-executes tests. This module aims to make writing proper test scripts just
-a little bit easier (and less error prone :-).
-
-=head1 TEST TYPES
-
-=over 4
-
-=item * NORMAL TESTS
-
-These tests are expected to succeed. If they don't something's
-screwed up!
-
-=item * SKIPPED TESTS
-
-Skip is for tests that might or might not be possible to run depending
-on the availability of platform specific features. The first argument
-should evaluate to true (think "yes, please skip") if the required
-feature is not available. After the first argument, skip works
-exactly the same way as do normal tests.
-
-=item * TODO TESTS
-
-TODO tests are designed for maintaining an B<executable TODO list>.
-These tests are expected NOT to succeed. If a TODO test does succeed,
-the feature in question should not be on the TODO list, now should it?
-
-Packages should NOT be released with succeeding TODO tests. As soon
-as a TODO test starts working, it should be promoted to a normal test
-and the newly working feature should be documented in the release
-notes or change log.
-
-=back
-
-=head1 RETURN VALUE
-
-Both C<ok> and C<skip> return true if their test succeeds and false
-otherwise in a scalar context.
-
-=head1 ONFAIL
-
- BEGIN { plan test => 4, onfail => sub { warn "CALL 911!" } }
-
-While test failures should be enough, extra diagnostics can be
-triggered at the end of a test run. C<onfail> is passed an array ref
-of hash refs that describe each test failure. Each hash will contain
-at least the following fields: C<package>, C<repetition>, and
-C<result>. (The file, line, and test number are not included because
-their correspondence to a particular test is tenuous.) If the test
-had an expected value or a diagnostic string, these will also be
-included.
-
-The B<optional> C<onfail> hook might be used simply to print out the
-version of your package and/or how to report problems. It might also
-be used to generate extremely sophisticated diagnostics for a
-particularly bizarre test failure. However it's not a panacea. Core
-dumps or other unrecoverable errors prevent the C<onfail> hook from
-running. (It is run inside an C<END> block.) Besides, C<onfail> is
-probably over-kill in most cases. (Your test code should be simpler
-than the code it is testing, yes?)
-
-=head1 SEE ALSO
-
-L<Test::Harness> and, perhaps, test coverage analysis tools.
-
-=head1 AUTHOR
-
-Copyright (c) 1998-1999 Joshua Nathaniel Pritikin. All rights reserved.
-
-This package is free software and is provided "as is" without express
-or implied warranty. It may be used, redistributed and/or modified
-under the terms of the Perl Artistic License (see
-http://www.perl.com/perl/misc/Artistic.html)
-
-=cut
diff --git a/contrib/perl5/lib/Test/Harness.pm b/contrib/perl5/lib/Test/Harness.pm
deleted file mode 100644
index f446e65..0000000
--- a/contrib/perl5/lib/Test/Harness.pm
+++ /dev/null
@@ -1,571 +0,0 @@
-package Test::Harness;
-
-use 5.005_64;
-use Exporter;
-use Benchmark;
-use Config;
-use FileHandle;
-use strict;
-
-our($VERSION, $verbose, $switches, $have_devel_corestack, $curtest,
- $columns, @ISA, @EXPORT, @EXPORT_OK);
-$have_devel_corestack = 0;
-
-$VERSION = "1.1604";
-
-$ENV{HARNESS_ACTIVE} = 1;
-
-# Some experimental versions of OS/2 build have broken $?
-my $ignore_exitcode = $ENV{HARNESS_IGNORE_EXITCODE};
-
-my $files_in_dir = $ENV{HARNESS_FILELEAK_IN_DIR};
-
-my $tests_skipped = 0;
-my $subtests_skipped = 0;
-
-@ISA=('Exporter');
-@EXPORT= qw(&runtests);
-@EXPORT_OK= qw($verbose $switches);
-
-$verbose = 0;
-$switches = "-w";
-$columns = $ENV{HARNESS_COLUMNS} || $ENV{COLUMNS} || 80;
-
-sub globdir { opendir DIRH, shift; my @f = readdir DIRH; closedir DIRH; @f }
-
-sub runtests {
- my(@tests) = @_;
- local($|) = 1;
- my($test,$te,$ok,$next,$max,$pct,$totbonus,@failed,%failedtests);
- my $totmax = 0;
- my $totok = 0;
- my $files = 0;
- my $bad = 0;
- my $good = 0;
- my $total = @tests;
-
- # pass -I flags to children
- my $old5lib = $ENV{PERL5LIB};
-
- # VMS has a 255-byte limit on the length of %ENV entries, so
- # toss the ones that involve perl_root, the install location
- # for VMS
- my $new5lib;
- if ($^O eq 'VMS') {
- $new5lib = join($Config{path_sep}, grep {!/perl_root/i;} @INC);
- $switches =~ s/-(\S*[A-Z]\S*)/"-$1"/g;
- }
- else {
- $new5lib = join($Config{path_sep}, @INC);
- }
-
- local($ENV{'PERL5LIB'}) = $new5lib;
-
- my @dir_files = globdir $files_in_dir if defined $files_in_dir;
- my $t_start = new Benchmark;
- while ($test = shift(@tests)) {
- $te = $test;
- chop($te);
- if ($^O eq 'VMS') { $te =~ s/^.*\.t\./[.t./s; }
- my $blank = (' ' x 77);
- my $leader = "$te" . '.' x (20 - length($te));
- my $ml = "";
- $ml = "\r$blank\r$leader"
- if -t STDOUT and not $ENV{HARNESS_NOTTY} and not $verbose;
- print $leader;
- my $fh = new FileHandle;
- $fh->open($test) or print "can't open $test. $!\n";
- my $first = <$fh>;
- my $s = $switches;
- $s .= " $ENV{'HARNESS_PERL_SWITCHES'}"
- if exists $ENV{'HARNESS_PERL_SWITCHES'};
- $s .= join " ", q[ "-T"], map {qq["-I$_"]} @INC
- if $first =~ /^#!.*\bperl.*-\w*T/;
- $fh->close or print "can't close $test. $!\n";
- my $cmd = ($ENV{'HARNESS_COMPILE_TEST'})
- ? "./perl -I../lib ../utils/perlcc $test "
- . "-r 2>> ./compilelog |"
- : "$^X $s $test|";
- $cmd = "MCR $cmd" if $^O eq 'VMS';
- $fh->open($cmd) or print "can't run $test. $!\n";
- $ok = $next = $max = 0;
- @failed = ();
- my %todo = ();
- my $bonus = 0;
- my $skipped = 0;
- my $skip_reason;
- while (<$fh>) {
- if( $verbose ){
- print $_;
- }
- if (/^1\.\.([0-9]+) todo([\d\s]+)\;/) {
- $max = $1;
- for (split(/\s+/, $2)) { $todo{$_} = 1; }
- $totmax += $max;
- $files++;
- $next = 1;
- } elsif (/^1\.\.([0-9]+)(\s*\#\s*[Ss]kip\S*(?>\s+)(.+))?/) {
- $max = $1;
- $totmax += $max;
- $files++;
- $next = 1;
- $skip_reason = $3 if not $max and defined $3;
- } elsif ($max && /^(not\s+)?ok\b/) {
- my $this = $next;
- if (/^not ok\s*(\d*)/){
- $this = $1 if $1 > 0;
- print "${ml}NOK $this" if $ml;
- if (!$todo{$this}) {
- push @failed, $this;
- } else {
- $ok++;
- $totok++;
- }
- } elsif (/^ok\s*(\d*)(\s*\#\s*[Ss]kip\S*(?:(?>\s+)(.+))?)?/) {
- $this = $1 if $1 > 0;
- print "${ml}ok $this/$max" if $ml;
- $ok++;
- $totok++;
- $skipped++ if defined $2;
- my $reason;
- $reason = 'unknown reason' if defined $2;
- $reason = $3 if defined $3;
- if (defined $reason and defined $skip_reason) {
- # print "was: '$skip_reason' new '$reason'\n";
- $skip_reason = 'various reasons'
- if $skip_reason ne $reason;
- } elsif (defined $reason) {
- $skip_reason = $reason;
- }
- $bonus++, $totbonus++ if $todo{$this};
- }
- if ($this > $next) {
- # print "Test output counter mismatch [test $this]\n";
- # no need to warn probably
- push @failed, $next..$this-1;
- } elsif ($this < $next) {
- #we have seen more "ok" lines than the number suggests
- print "Confused test output: test $this answered after test ", $next-1, "\n";
- $next = $this;
- }
- $next = $this + 1;
- }
- }
- $fh->close; # must close to reap child resource values
- my $wstatus = $ignore_exitcode ? 0 : $?; # Can trust $? ?
- my $estatus;
- $estatus = ($^O eq 'VMS'
- ? eval 'use vmsish "status"; $estatus = $?'
- : $wstatus >> 8);
- if ($wstatus) {
- my ($failed, $canon, $percent) = ('??', '??');
- printf "${ml}dubious\n\tTest returned status $estatus (wstat %d, 0x%x)\n",
- $wstatus,$wstatus;
- print "\t\t(VMS status is $estatus)\n" if $^O eq 'VMS';
- if (corestatus($wstatus)) { # until we have a wait module
- if ($have_devel_corestack) {
- Devel::CoreStack::stack($^X);
- } else {
- print "\ttest program seems to have generated a core\n";
- }
- }
- $bad++;
- if ($max) {
- if ($next == $max + 1 and not @failed) {
- print "\tafter all the subtests completed successfully\n";
- $percent = 0;
- $failed = 0; # But we do not set $canon!
- } else {
- push @failed, $next..$max;
- $failed = @failed;
- (my $txt, $canon) = canonfailed($max,$skipped,@failed);
- $percent = 100*(scalar @failed)/$max;
- print "DIED. ",$txt;
- }
- }
- $failedtests{$test} = { canon => $canon, max => $max || '??',
- failed => $failed,
- name => $test, percent => $percent,
- estat => $estatus, wstat => $wstatus,
- };
- } elsif ($ok == $max && $next == $max+1) {
- if ($max and $skipped + $bonus) {
- my @msg;
- push(@msg, "$skipped/$max skipped: $skip_reason")
- if $skipped;
- push(@msg, "$bonus/$max unexpectedly succeeded")
- if $bonus;
- print "${ml}ok, ".join(', ', @msg)."\n";
- } elsif ($max) {
- print "${ml}ok\n";
- } elsif (defined $skip_reason) {
- print "skipped: $skip_reason\n";
- $tests_skipped++;
- } else {
- print "skipped test on this platform\n";
- $tests_skipped++;
- }
- $good++;
- } elsif ($max) {
- if ($next <= $max) {
- push @failed, $next..$max;
- }
- if (@failed) {
- my ($txt, $canon) = canonfailed($max,$skipped,@failed);
- print "${ml}$txt";
- $failedtests{$test} = { canon => $canon, max => $max,
- failed => scalar @failed,
- name => $test, percent => 100*(scalar @failed)/$max,
- estat => '', wstat => '',
- };
- } else {
- print "Don't know which tests failed: got $ok ok, expected $max\n";
- $failedtests{$test} = { canon => '??', max => $max,
- failed => '??',
- name => $test, percent => undef,
- estat => '', wstat => '',
- };
- }
- $bad++;
- } elsif ($next == 0) {
- print "FAILED before any test output arrived\n";
- $bad++;
- $failedtests{$test} = { canon => '??', max => '??',
- failed => '??',
- name => $test, percent => undef,
- estat => '', wstat => '',
- };
- }
- $subtests_skipped += $skipped;
- if (defined $files_in_dir) {
- my @new_dir_files = globdir $files_in_dir;
- if (@new_dir_files != @dir_files) {
- my %f;
- @f{@new_dir_files} = (1) x @new_dir_files;
- delete @f{@dir_files};
- my @f = sort keys %f;
- print "LEAKED FILES: @f\n";
- @dir_files = @new_dir_files;
- }
- }
- }
- my $t_total = timediff(new Benchmark, $t_start);
-
- if ($^O eq 'VMS') {
- if (defined $old5lib) {
- $ENV{PERL5LIB} = $old5lib;
- } else {
- delete $ENV{PERL5LIB};
- }
- }
- my $bonusmsg = '';
- $bonusmsg = (" ($totbonus subtest".($totbonus>1?'s':'').
- " UNEXPECTEDLY SUCCEEDED)")
- if $totbonus;
- if ($tests_skipped) {
- $bonusmsg .= ", $tests_skipped test" . ($tests_skipped != 1 ? 's' : '');
- if ($subtests_skipped) {
- $bonusmsg .= " and $subtests_skipped subtest"
- . ($subtests_skipped != 1 ? 's' : '');
- }
- $bonusmsg .= ' skipped';
- }
- elsif ($subtests_skipped) {
- $bonusmsg .= ", $subtests_skipped subtest"
- . ($subtests_skipped != 1 ? 's' : '')
- . " skipped";
- }
- if ($bad == 0 && $totmax) {
- print "All tests successful$bonusmsg.\n";
- } elsif ($total==0){
- die "FAILED--no tests were run for some reason.\n";
- } elsif ($totmax==0) {
- my $blurb = $total==1 ? "script" : "scripts";
- die "FAILED--$total test $blurb could be run, alas--no output ever seen\n";
- } else {
- $pct = sprintf("%.2f", $good / $total * 100);
- my $subpct = sprintf " %d/%d subtests failed, %.2f%% okay.",
- $totmax - $totok, $totmax, 100*$totok/$totmax;
- # Create formats
- # First, figure out max length of test names
- my $failed_str = "Failed Test";
- my $middle_str = " Status Wstat Total Fail Failed ";
- my $list_str = "List of Failed";
- my $max_namelen = length($failed_str);
- my $script;
- foreach $script (keys %failedtests) {
- $max_namelen =
- (length $failedtests{$script}->{name} > $max_namelen) ?
- length $failedtests{$script}->{name} : $max_namelen;
- }
- my $list_len = $columns - length($middle_str) - $max_namelen;
- if ($list_len < length($list_str)) {
- $list_len = length($list_str);
- $max_namelen = $columns - length($middle_str) - $list_len;
- if ($max_namelen < length($failed_str)) {
- $max_namelen = length($failed_str);
- $columns = $max_namelen + length($middle_str) + $list_len;
- }
- }
-
- my $fmt_top = "format STDOUT_TOP =\n"
- . sprintf("%-${max_namelen}s", $failed_str)
- . $middle_str
- . $list_str . "\n"
- . "-" x $columns
- . "\n.\n";
- my $fmt = "format STDOUT =\n"
- . "@" . "<" x ($max_namelen - 1)
- . " @>> @>>>> @>>>> @>>> ^##.##% "
- . "^" . "<" x ($list_len - 1) . "\n"
- . '{ $curtest->{name}, $curtest->{estat},'
- . ' $curtest->{wstat}, $curtest->{max},'
- . ' $curtest->{failed}, $curtest->{percent},'
- . ' $curtest->{canon}'
- . "\n}\n"
- . "~~" . " " x ($columns - $list_len - 2) . "^"
- . "<" x ($list_len - 1) . "\n"
- . '$curtest->{canon}'
- . "\n.\n";
-
- eval $fmt_top;
- die $@ if $@;
- eval $fmt;
- die $@ if $@;
-
- # Now write to formats
- for $script (sort keys %failedtests) {
- $curtest = $failedtests{$script};
- write;
- }
- if ($bad) {
- $bonusmsg =~ s/^,\s*//;
- print "$bonusmsg.\n" if $bonusmsg;
- die "Failed $bad/$total test scripts, $pct% okay.$subpct\n";
- }
- }
- printf("Files=%d, Tests=%d, %s\n", $files, $totmax, timestr($t_total, 'nop'));
-
- return ($bad == 0 && $totmax) ;
-}
-
-my $tried_devel_corestack;
-sub corestatus {
- my($st) = @_;
-
- eval {require 'wait.ph'};
- my $ret = defined &WCOREDUMP ? WCOREDUMP($st) : $st & 0200;
-
- eval { require Devel::CoreStack; $have_devel_corestack++ }
- unless $tried_devel_corestack++;
-
- $ret;
-}
-
-sub canonfailed ($@) {
- my($max,$skipped,@failed) = @_;
- my %seen;
- @failed = sort {$a <=> $b} grep !$seen{$_}++, @failed;
- my $failed = @failed;
- my @result = ();
- my @canon = ();
- my $min;
- my $last = $min = shift @failed;
- my $canon;
- if (@failed) {
- for (@failed, $failed[-1]) { # don't forget the last one
- if ($_ > $last+1 || $_ == $last) {
- if ($min == $last) {
- push @canon, $last;
- } else {
- push @canon, "$min-$last";
- }
- $min = $_;
- }
- $last = $_;
- }
- local $" = ", ";
- push @result, "FAILED tests @canon\n";
- $canon = "@canon";
- } else {
- push @result, "FAILED test $last\n";
- $canon = $last;
- }
-
- push @result, "\tFailed $failed/$max tests, ";
- push @result, sprintf("%.2f",100*(1-$failed/$max)), "% okay";
- my $ender = 's' x ($skipped > 1);
- my $good = $max - $failed - $skipped;
- my $goodper = sprintf("%.2f",100*($good/$max));
- push @result, " (-$skipped skipped test$ender: $good okay, $goodper%)" if $skipped;
- push @result, "\n";
- my $txt = join "", @result;
- ($txt, $canon);
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Test::Harness - run perl standard test scripts with statistics
-
-=head1 SYNOPSIS
-
-use Test::Harness;
-
-runtests(@tests);
-
-=head1 DESCRIPTION
-
-(By using the L<Test> module, you can write test scripts without
-knowing the exact output this module expects. However, if you need to
-know the specifics, read on!)
-
-Perl test scripts print to standard output C<"ok N"> for each single
-test, where C<N> is an increasing sequence of integers. The first line
-output by a standard test script is C<"1..M"> with C<M> being the
-number of tests that should be run within the test
-script. Test::Harness::runtests(@tests) runs all the testscripts
-named as arguments and checks standard output for the expected
-C<"ok N"> strings.
-
-After all tests have been performed, runtests() prints some
-performance statistics that are computed by the Benchmark module.
-
-=head2 The test script output
-
-Any output from the testscript to standard error is ignored and
-bypassed, thus will be seen by the user. Lines written to standard
-output containing C</^(not\s+)?ok\b/> are interpreted as feedback for
-runtests(). All other lines are discarded.
-
-It is tolerated if the test numbers after C<ok> are omitted. In this
-case Test::Harness maintains temporarily its own counter until the
-script supplies test numbers again. So the following test script
-
- print <<END;
- 1..6
- not ok
- ok
- not ok
- ok
- ok
- END
-
-will generate
-
- FAILED tests 1, 3, 6
- Failed 3/6 tests, 50.00% okay
-
-The global variable $Test::Harness::verbose is exportable and can be
-used to let runtests() display the standard output of the script
-without altering the behavior otherwise.
-
-The global variable $Test::Harness::switches is exportable and can be
-used to set perl command line options used for running the test
-script(s). The default value is C<-w>.
-
-If the standard output line contains substring C< # Skip> (with
-variations in spacing and case) after C<ok> or C<ok NUMBER>, it is
-counted as a skipped test. If the whole testscript succeeds, the
-count of skipped tests is included in the generated output.
-
-C<Test::Harness> reports the text after C< # Skip(whatever)> as a
-reason for skipping. Similarly, one can include a similar explanation
-in a C<1..0> line emitted if the test is skipped completely:
-
- 1..0 # Skipped: no leverage found
-
-=head1 EXPORT
-
-C<&runtests> is exported by Test::Harness per default.
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item C<All tests successful.\nFiles=%d, Tests=%d, %s>
-
-If all tests are successful some statistics about the performance are
-printed.
-
-=item C<FAILED tests %s\n\tFailed %d/%d tests, %.2f%% okay.>
-
-For any single script that has failing subtests statistics like the
-above are printed.
-
-=item C<Test returned status %d (wstat %d)>
-
-Scripts that return a non-zero exit status, both C<$? E<gt>E<gt> 8> and C<$?> are
-printed in a message similar to the above.
-
-=item C<Failed 1 test, %.2f%% okay. %s>
-
-=item C<Failed %d/%d tests, %.2f%% okay. %s>
-
-If not all tests were successful, the script dies with one of the
-above messages.
-
-=back
-
-=head1 ENVIRONMENT
-
-Setting C<HARNESS_IGNORE_EXITCODE> makes harness ignore the exit status
-of child processes.
-
-Setting C<HARNESS_NOTTY> to a true value forces it to behave as though
-STDOUT were not a console. You may need to set this if you don't want
-harness to output more frequent progress messages using carriage returns.
-Some consoles may not handle carriage returns properly (which results
-in a somewhat messy output).
-
-Setting C<HARNESS_COMPILE_TEST> to a true value will make harness attempt
-to compile the test using C<perlcc> before running it.
-
-If C<HARNESS_FILELEAK_IN_DIR> is set to the name of a directory, harness
-will check after each test whether new files appeared in that directory,
-and report them as
-
- LEAKED FILES: scr.tmp 0 my.db
-
-If relative, directory name is with respect to the current directory at
-the moment runtests() was called. Putting absolute path into
-C<HARNESS_FILELEAK_IN_DIR> may give more predicatable results.
-
-The value of C<HARNESS_PERL_SWITCHES> will be prepended to the
-switches used to invoke perl on each test. For example, setting
-C<HARNESS_PERL_SWITCHES> to "-W" will run all tests with all
-warnings enabled.
-
-If C<HARNESS_COLUMNS> is set, then this value will be used for the
-width of the terminal. If it is not set then it will default to
-C<COLUMNS>. If this is not set, it will default to 80. Note that users
-of Bourne-sh based shells will need to C<export COLUMNS> for this
-module to use that variable.
-
-Harness sets C<HARNESS_ACTIVE> before executing the individual tests.
-This allows the tests to determine if they are being executed through the
-harness or by any other means.
-
-=head1 SEE ALSO
-
-L<Test> for writing test scripts and also L<Benchmark> for the
-underlying timing routines.
-
-=head1 AUTHORS
-
-Either Tim Bunce or Andreas Koenig, we don't know. What we know for
-sure is, that it was inspired by Larry Wall's TEST script that came
-with perl distributions for ages. Numerous anonymous contributors
-exist. Current maintainer is Andreas Koenig.
-
-=head1 BUGS
-
-Test::Harness uses $^X to determine the perl binary to run the tests
-with. Test scripts running via the shebang (C<#!>) line may not be
-portable because $^X is not consistent for shebang scripts across
-platforms. This is no problem when Test::Harness is run with an
-absolute path to the perl binary or when $^X can be found in the path.
-
-=cut
diff --git a/contrib/perl5/lib/Text/Abbrev.pm b/contrib/perl5/lib/Text/Abbrev.pm
deleted file mode 100644
index d4f12d0..0000000
--- a/contrib/perl5/lib/Text/Abbrev.pm
+++ /dev/null
@@ -1,81 +0,0 @@
-package Text::Abbrev;
-require 5.005; # Probably works on earlier versions too.
-require Exporter;
-
-=head1 NAME
-
-abbrev - create an abbreviation table from a list
-
-=head1 SYNOPSIS
-
- use Text::Abbrev;
- abbrev $hashref, LIST
-
-
-=head1 DESCRIPTION
-
-Stores all unambiguous truncations of each element of LIST
-as keys in the associative array referenced by C<$hashref>.
-The values are the original list elements.
-
-=head1 EXAMPLE
-
- $hashref = abbrev qw(list edit send abort gripe);
-
- %hash = abbrev qw(list edit send abort gripe);
-
- abbrev $hashref, qw(list edit send abort gripe);
-
- abbrev(*hash, qw(list edit send abort gripe));
-
-=cut
-
-@ISA = qw(Exporter);
-@EXPORT = qw(abbrev);
-
-# Usage:
-# abbrev \%foo, LIST;
-# ...
-# $long = $foo{$short};
-
-sub abbrev {
- my ($word, $hashref, $glob, %table, $returnvoid);
-
- if (ref($_[0])) { # hash reference preferably
- $hashref = shift;
- $returnvoid = 1;
- } elsif (ref \$_[0] eq 'GLOB') { # is actually a glob (deprecated)
- $hashref = \%{shift()};
- $returnvoid = 1;
- }
- %{$hashref} = ();
-
- WORD: foreach $word (@_) {
- for (my $len = (length $word) - 1; $len > 0; --$len) {
- my $abbrev = substr($word,0,$len);
- my $seen = ++$table{$abbrev};
- if ($seen == 1) { # We're the first word so far to have
- # this abbreviation.
- $hashref->{$abbrev} = $word;
- } elsif ($seen == 2) { # We're the second word to have this
- # abbreviation, so we can't use it.
- delete $hashref->{$abbrev};
- } else { # We're the third word to have this
- # abbreviation, so skip to the next word.
- next WORD;
- }
- }
- }
- # Non-abbreviations always get entered, even if they aren't unique
- foreach $word (@_) {
- $hashref->{$word} = $word;
- }
- return if $returnvoid;
- if (wantarray) {
- %{$hashref};
- } else {
- $hashref;
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/Text/ParseWords.pm b/contrib/perl5/lib/Text/ParseWords.pm
deleted file mode 100644
index 23eace9..0000000
--- a/contrib/perl5/lib/Text/ParseWords.pm
+++ /dev/null
@@ -1,262 +0,0 @@
-package Text::ParseWords;
-
-use vars qw($VERSION @ISA @EXPORT $PERL_SINGLE_QUOTE);
-$VERSION = "3.2";
-
-require 5.000;
-
-use Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(shellwords quotewords nested_quotewords parse_line);
-@EXPORT_OK = qw(old_shellwords);
-
-
-sub shellwords {
- local(@lines) = @_;
- $lines[$#lines] =~ s/\s+$//;
- return(quotewords('\s+', 0, @lines));
-}
-
-
-
-sub quotewords {
- my($delim, $keep, @lines) = @_;
- my($line, @words, @allwords);
-
-
- foreach $line (@lines) {
- @words = parse_line($delim, $keep, $line);
- return() unless (@words || !length($line));
- push(@allwords, @words);
- }
- return(@allwords);
-}
-
-
-
-sub nested_quotewords {
- my($delim, $keep, @lines) = @_;
- my($i, @allwords);
-
- for ($i = 0; $i < @lines; $i++) {
- @{$allwords[$i]} = parse_line($delim, $keep, $lines[$i]);
- return() unless (@{$allwords[$i]} || !length($lines[$i]));
- }
- return(@allwords);
-}
-
-
-
-sub parse_line {
- # We will be testing undef strings
- no warnings;
-
- my($delimiter, $keep, $line) = @_;
- my($quote, $quoted, $unquoted, $delim, $word, @pieces);
-
- while (length($line)) {
-
- ($quote, $quoted, undef, $unquoted, $delim, undef) =
- $line =~ m/^(["']) # a $quote
- ((?:\\.|(?!\1)[^\\])*) # and $quoted text
- \1 # followed by the same quote
- ([\000-\377]*) # and the rest
- | # --OR--
- ^((?:\\.|[^\\"'])*?) # an $unquoted text
- (\Z(?!\n)|(?-x:$delimiter)|(?!^)(?=["']))
- # plus EOL, delimiter, or quote
- ([\000-\377]*) # the rest
- /x; # extended layout
- return() unless( $quote || length($unquoted) || length($delim));
-
- $line = $+;
-
- if ($keep) {
- $quoted = "$quote$quoted$quote";
- }
- else {
- $unquoted =~ s/\\(.)/$1/g;
- if (defined $quote) {
- $quoted =~ s/\\(.)/$1/g if ($quote eq '"');
- $quoted =~ s/\\([\\'])/$1/g if ( $PERL_SINGLE_QUOTE && $quote eq "'");
- }
- }
- $word .= defined $quote ? $quoted : $unquoted;
-
- if (length($delim)) {
- push(@pieces, $word);
- push(@pieces, $delim) if ($keep eq 'delimiters');
- undef $word;
- }
- if (!length($line)) {
- push(@pieces, $word);
- }
- }
- return(@pieces);
-}
-
-
-
-sub old_shellwords {
-
- # Usage:
- # use ParseWords;
- # @words = old_shellwords($line);
- # or
- # @words = old_shellwords(@lines);
-
- local($_) = join('', @_);
- my(@words,$snippet,$field);
-
- s/^\s+//;
- while ($_ ne '') {
- $field = '';
- for (;;) {
- if (s/^"(([^"\\]|\\.)*)"//) {
- ($snippet = $1) =~ s#\\(.)#$1#g;
- }
- elsif (/^"/) {
- return();
- }
- elsif (s/^'(([^'\\]|\\.)*)'//) {
- ($snippet = $1) =~ s#\\(.)#$1#g;
- }
- elsif (/^'/) {
- return();
- }
- elsif (s/^\\(.)//) {
- $snippet = $1;
- }
- elsif (s/^([^\s\\'"]+)//) {
- $snippet = $1;
- }
- else {
- s/^\s+//;
- last;
- }
- $field .= $snippet;
- }
- push(@words, $field);
- }
- @words;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Text::ParseWords - parse text into an array of tokens or array of arrays
-
-=head1 SYNOPSIS
-
- use Text::ParseWords;
- @lists = &nested_quotewords($delim, $keep, @lines);
- @words = &quotewords($delim, $keep, @lines);
- @words = &shellwords(@lines);
- @words = &parse_line($delim, $keep, $line);
- @words = &old_shellwords(@lines); # DEPRECATED!
-
-=head1 DESCRIPTION
-
-The &nested_quotewords() and &quotewords() functions accept a delimiter
-(which can be a regular expression)
-and a list of lines and then breaks those lines up into a list of
-words ignoring delimiters that appear inside quotes. &quotewords()
-returns all of the tokens in a single long list, while &nested_quotewords()
-returns a list of token lists corresponding to the elements of @lines.
-&parse_line() does tokenizing on a single string. The &*quotewords()
-functions simply call &parse_lines(), so if you're only splitting
-one line you can call &parse_lines() directly and save a function
-call.
-
-The $keep argument is a boolean flag. If true, then the tokens are
-split on the specified delimiter, but all other characters (quotes,
-backslashes, etc.) are kept in the tokens. If $keep is false then the
-&*quotewords() functions remove all quotes and backslashes that are
-not themselves backslash-escaped or inside of single quotes (i.e.,
-&quotewords() tries to interpret these characters just like the Bourne
-shell). NB: these semantics are significantly different from the
-original version of this module shipped with Perl 5.000 through 5.004.
-As an additional feature, $keep may be the keyword "delimiters" which
-causes the functions to preserve the delimiters in each string as
-tokens in the token lists, in addition to preserving quote and
-backslash characters.
-
-&shellwords() is written as a special case of &quotewords(), and it
-does token parsing with whitespace as a delimiter-- similar to most
-Unix shells.
-
-=head1 EXAMPLES
-
-The sample program:
-
- use Text::ParseWords;
- @words = &quotewords('\s+', 0, q{this is "a test" of\ quotewords \"for you});
- $i = 0;
- foreach (@words) {
- print "$i: <$_>\n";
- $i++;
- }
-
-produces:
-
- 0: <this>
- 1: <is>
- 2: <a test>
- 3: <of quotewords>
- 4: <"for>
- 5: <you>
-
-demonstrating:
-
-=over 4
-
-=item 0
-
-a simple word
-
-=item 1
-
-multiple spaces are skipped because of our $delim
-
-=item 2
-
-use of quotes to include a space in a word
-
-=item 3
-
-use of a backslash to include a space in a word
-
-=item 4
-
-use of a backslash to remove the special meaning of a double-quote
-
-=item 5
-
-another simple word (note the lack of effect of the
-backslashed double-quote)
-
-=back
-
-Replacing C<&quotewords('\s+', 0, q{this is...})>
-with C<&shellwords(q{this is...})>
-is a simpler way to accomplish the same thing.
-
-=head1 AUTHORS
-
-Maintainer is Hal Pomeranz <pomeranz@netcom.com>, 1994-1997 (Original
-author unknown). Much of the code for &parse_line() (including the
-primary regexp) from Joerk Behrends <jbehrends@multimediaproduzenten.de>.
-
-Examples section another documentation provided by John Heidemann
-<johnh@ISI.EDU>
-
-Bug reports, patches, and nagging provided by lots of folks-- thanks
-everybody! Special thanks to Michael Schwern <schwern@envirolink.org>
-for assuring me that a &nested_quotewords() would be useful, and to
-Jeff Friedl <jfriedl@yahoo-inc.com> for telling me not to worry about
-error-checking (sort of-- you had to be there).
-
-=cut
diff --git a/contrib/perl5/lib/Text/Soundex.pm b/contrib/perl5/lib/Text/Soundex.pm
deleted file mode 100644
index d588764..0000000
--- a/contrib/perl5/lib/Text/Soundex.pm
+++ /dev/null
@@ -1,150 +0,0 @@
-package Text::Soundex;
-require 5.000;
-require Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(&soundex $soundex_nocode);
-
-$VERSION = '1.0';
-
-# $Id: soundex.pl,v 1.2 1994/03/24 00:30:27 mike Exp $
-#
-# Implementation of soundex algorithm as described by Knuth in volume
-# 3 of The Art of Computer Programming, with ideas stolen from Ian
-# Phillips <ian@pipex.net>.
-#
-# Mike Stok <Mike.Stok@meiko.concord.ma.us>, 2 March 1994.
-#
-# Knuth's test cases are:
-#
-# Euler, Ellery -> E460
-# Gauss, Ghosh -> G200
-# Hilbert, Heilbronn -> H416
-# Knuth, Kant -> K530
-# Lloyd, Ladd -> L300
-# Lukasiewicz, Lissajous -> L222
-#
-# $Log: soundex.pl,v $
-# Revision 1.2 1994/03/24 00:30:27 mike
-# Subtle bug (any excuse :-) spotted by Rich Pinder <rpinder@hsc.usc.edu>
-# in the way I handles leasing characters which were different but had
-# the same soundex code. This showed up comparing it with Oracle's
-# soundex output.
-#
-# Revision 1.1 1994/03/02 13:01:30 mike
-# Initial revision
-#
-#
-##############################################################################
-
-# $soundex_nocode is used to indicate a string doesn't have a soundex
-# code, I like undef other people may want to set it to 'Z000'.
-
-$soundex_nocode = undef;
-
-sub soundex
-{
- local (@s, $f, $fc, $_) = @_;
-
- push @s, '' unless @s; # handle no args as a single empty string
-
- foreach (@s)
- {
- $_ = uc $_;
- tr/A-Z//cd;
-
- if ($_ eq '')
- {
- $_ = $soundex_nocode;
- }
- else
- {
- ($f) = /^(.)/;
- tr/AEHIOUWYBFPVCGJKQSXZDTLMNR/00000000111122222222334556/;
- ($fc) = /^(.)/;
- s/^$fc+//;
- tr///cs;
- tr/0//d;
- $_ = $f . $_ . '000';
- s/^(.{4}).*/$1/;
- }
- }
-
- wantarray ? @s : shift @s;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Text::Soundex - Implementation of the Soundex Algorithm as Described by Knuth
-
-=head1 SYNOPSIS
-
- use Text::Soundex;
-
- $code = soundex $string; # get soundex code for a string
- @codes = soundex @list; # get list of codes for list of strings
-
- # set value to be returned for strings without soundex code
-
- $soundex_nocode = 'Z000';
-
-=head1 DESCRIPTION
-
-This module implements the soundex algorithm as described by Donald Knuth
-in Volume 3 of B<The Art of Computer Programming>. The algorithm is
-intended to hash words (in particular surnames) into a small space using a
-simple model which approximates the sound of the word when spoken by an English
-speaker. Each word is reduced to a four character string, the first
-character being an upper case letter and the remaining three being digits.
-
-If there is no soundex code representation for a string then the value of
-C<$soundex_nocode> is returned. This is initially set to C<undef>, but
-many people seem to prefer an I<unlikely> value like C<Z000>
-(how unlikely this is depends on the data set being dealt with.) Any value
-can be assigned to C<$soundex_nocode>.
-
-In scalar context C<soundex> returns the soundex code of its first
-argument, and in list context a list is returned in which each element is the
-soundex code for the corresponding argument passed to C<soundex> e.g.
-
- @codes = soundex qw(Mike Stok);
-
-leaves C<@codes> containing C<('M200', 'S320')>.
-
-=head1 EXAMPLES
-
-Knuth's examples of various names and the soundex codes they map to
-are listed below:
-
- Euler, Ellery -> E460
- Gauss, Ghosh -> G200
- Hilbert, Heilbronn -> H416
- Knuth, Kant -> K530
- Lloyd, Ladd -> L300
- Lukasiewicz, Lissajous -> L222
-
-so:
-
- $code = soundex 'Knuth'; # $code contains 'K530'
- @list = soundex qw(Lloyd Gauss); # @list contains 'L300', 'G200'
-
-=head1 LIMITATIONS
-
-As the soundex algorithm was originally used a B<long> time ago in the US
-it considers only the English alphabet and pronunciation.
-
-As it is mapping a large space (arbitrary length strings) onto a small
-space (single letter plus 3 digits) no inference can be made about the
-similarity of two strings which end up with the same soundex code. For
-example, both C<Hilbert> and C<Heilbronn> end up with a soundex code
-of C<H416>.
-
-=head1 AUTHOR
-
-This code was implemented by Mike Stok (C<stok@cybercom.net>) from the
-description given by Knuth. Ian Phillips (C<ian@pipex.net>) and Rich Pinder
-(C<rpinder@hsc.usc.edu>) supplied ideas and spotted mistakes.
diff --git a/contrib/perl5/lib/Text/Tabs.pm b/contrib/perl5/lib/Text/Tabs.pm
deleted file mode 100644
index c431019..0000000
--- a/contrib/perl5/lib/Text/Tabs.pm
+++ /dev/null
@@ -1,97 +0,0 @@
-
-package Text::Tabs;
-
-require Exporter;
-
-@ISA = (Exporter);
-@EXPORT = qw(expand unexpand $tabstop);
-
-use vars qw($VERSION $tabstop $debug);
-$VERSION = 98.112801;
-
-use strict;
-
-BEGIN {
- $tabstop = 8;
- $debug = 0;
-}
-
-sub expand
-{
- my (@l) = @_;
- for $_ (@l) {
- 1 while s/(^|\n)([^\t\n]*)(\t+)/
- $1. $2 . (" " x
- ($tabstop * length($3)
- - (length($2) % $tabstop)))
- /sex;
- }
- return @l if wantarray;
- return $l[0];
-}
-
-sub unexpand
-{
- my (@l) = @_;
- my @e;
- my $x;
- my $line;
- my @lines;
- my $lastbit;
- for $x (@l) {
- @lines = split("\n", $x, -1);
- for $line (@lines) {
- $line = expand($line);
- @e = split(/(.{$tabstop})/,$line,-1);
- $lastbit = pop(@e);
- $lastbit = '' unless defined $lastbit;
- $lastbit = "\t"
- if $lastbit eq " "x$tabstop;
- for $_ (@e) {
- if ($debug) {
- my $x = $_;
- $x =~ s/\t/^I\t/gs;
- print "sub on '$x'\n";
- }
- s/ +$/\t/;
- }
- $line = join('',@e, $lastbit);
- }
- $x = join("\n", @lines);
- }
- return @l if wantarray;
- return $l[0];
-}
-
-1;
-__END__
-
-
-=head1 NAME
-
-Text::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1)
-
-=head1 SYNOPSIS
-
-use Text::Tabs;
-
-$tabstop = 4;
-@lines_without_tabs = expand(@lines_with_tabs);
-@lines_with_tabs = unexpand(@lines_without_tabs);
-
-=head1 DESCRIPTION
-
-Text::Tabs does about what the unix utilities expand(1) and unexpand(1)
-do. Given a line with tabs in it, expand will replace the tabs with
-the appropriate number of spaces. Given a line with or without tabs in
-it, unexpand will add tabs when it can save bytes by doing so. Invisible
-compression with plain ascii!
-
-=head1 BUGS
-
-expand doesn't handle newlines very quickly -- do not feed it an
-entire document in one string. Instead feed it an array of lines.
-
-=head1 AUTHOR
-
-David Muir Sharnoff <muir@idiom.com>
diff --git a/contrib/perl5/lib/Text/Wrap.pm b/contrib/perl5/lib/Text/Wrap.pm
deleted file mode 100644
index 579e09b..0000000
--- a/contrib/perl5/lib/Text/Wrap.pm
+++ /dev/null
@@ -1,175 +0,0 @@
-package Text::Wrap;
-
-require Exporter;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(wrap fill);
-@EXPORT_OK = qw($columns $break $huge);
-
-$VERSION = 2001.0131;
-
-use vars qw($VERSION $columns $debug $break $huge);
-use strict;
-
-BEGIN {
- $columns = 76; # <= screen width
- $debug = 0;
- $break = '\s';
- $huge = 'wrap'; # alternatively: 'die' or 'overflow'
-}
-
-use Text::Tabs qw(expand unexpand);
-
-sub wrap
-{
- my ($ip, $xp, @t) = @_;
-
- my $r = "";
- my $tail = pop(@t);
- my $t = expand(join("", (map { /\s+\Z/ ? ( $_ ) : ($_, ' ') } @t), $tail));
- my $lead = $ip;
- my $ll = $columns - length(expand($ip)) - 1;
- my $nll = $columns - length(expand($xp)) - 1;
- my $nl = "";
- my $remainder = "";
-
- pos($t) = 0;
- while ($t !~ /\G\s*\Z/gc) {
- if ($t =~ /\G([^\n]{0,$ll})($break|\Z(?!\n))/xmgc) {
- $r .= unexpand($nl . $lead . $1);
- $remainder = $2;
- } elsif ($huge eq 'wrap' && $t =~ /\G([^\n]{$ll})/gc) {
- $r .= unexpand($nl . $lead . $1);
- $remainder = "\n";
- } elsif ($huge eq 'overflow' && $t =~ /\G([^\n]*?)($break|\Z(?!\n))/xmgc) {
- $r .= unexpand($nl . $lead . $1);
- $remainder = $2;
- } elsif ($huge eq 'die') {
- die "couldn't wrap '$t'";
- } else {
- die "This shouldn't happen";
- }
-
- $lead = $xp;
- $ll = $nll;
- $nl = "\n";
- }
- $r .= $remainder;
-
- print "-----------$r---------\n" if $debug;
-
- print "Finish up with '$lead'\n" if $debug;
-
- $r .= $lead . substr($t, pos($t), length($t)-pos($t))
- if pos($t) ne length($t);
-
- print "-----------$r---------\n" if $debug;;
-
- return $r;
-}
-
-sub fill
-{
- my ($ip, $xp, @raw) = @_;
- my @para;
- my $pp;
-
- for $pp (split(/\n\s+/, join("\n",@raw))) {
- $pp =~ s/\s+/ /g;
- my $x = wrap($ip, $xp, $pp);
- push(@para, $x);
- }
-
- # if paragraph_indent is the same as line_indent,
- # separate paragraphs with blank lines
-
- my $ps = ($ip eq $xp) ? "\n\n" : "\n";
- return join ($ps, @para);
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Text::Wrap - line wrapping to form simple paragraphs
-
-=head1 SYNOPSIS
-
-B<Example 1>
-
- use Text::Wrap
-
- $initial_tab = "\t"; # Tab before first line
- $subsequent_tab = ""; # All other lines flush left
-
- print wrap($initial_tab, $subsequent_tab, @text);
- print fill($initial_tab, $subsequent_tab, @text);
-
- @lines = wrap($initial_tab, $subsequent_tab, @text);
-
- @paragraphs = fill($initial_tab, $subsequent_tab, @text);
-
-B<Example 2>
-
- use Text::Wrap qw(wrap $columns $huge);
-
- $columns = 132; # Wrap at 132 characters
- $huge = 'die';
- $huge = 'wrap';
- $huge = 'overflow';
-
-B<Example 3>
-
- use Text::Wrap
-
- $Text::Wrap::columns = 72;
- print wrap('', '', @text);
-
-=head1 DESCRIPTION
-
-Text::Wrap::wrap() is a very simple paragraph formatter. It formats a
-single paragraph at a time by breaking lines at word boundries.
-Indentation is controlled for the first line (C<$initial_tab>) and
-all subsquent lines (C<$subsequent_tab>) independently. Please note:
-C<$initial_tab> and C<$subsequent_tab> are the literal strings that will
-be used: it is unlikley you would want to pass in a number.
-
-Lines are wrapped at C<$Text::Wrap::columns> columns. C<$Text::Wrap::columns>
-should be set to the full width of your output device. In fact,
-every resulting line will have length of no more than C<$columns - 1>.
-
-Beginner note: In example 2, above C<$columns> is imported into
-the local namespace, and set locally. In example 3,
-C<$Text::Wrap::columns> is set in its own namespace without importing it.
-
-When words that are longer than C<$columns> are encountered, they
-are broken up. C<wrap()> adds a C<"\n"> at column C<$columns>.
-This behavior can be overridden by setting C<$huge> to
-'die' or to 'overflow'. When set to 'die', large words will cause
-C<die()> to be called. When set to 'overflow', large words will be
-left intact.
-
-Text::Wrap::fill() is a simple multi-paragraph formatter. It formats
-each paragraph separately and then joins them together when it's done. It
-will destory any whitespace in the original text. It breaks text into
-paragraphs by looking for whitespace after a newline. In other respects
-it acts like wrap().
-
-When called in list context, C<wrap()> will return a list of lines and
-C<fill()> will return a list of paragraphs.
-
-Historical notes: Older versions of C<wrap()> and C<fill()> always
-returned strings. Also, 'die' used to be the default value of
-C<$huge>. Now, 'wrap' is the default value.
-
-=head1 EXAMPLE
-
- print wrap("\t","","This is a bit of text that forms
- a normal book-style paragraph");
-
-=head1 AUTHOR
-
-David Muir Sharnoff <muir@idiom.com> with help from Tim Pierce and
-many many others.
-
diff --git a/contrib/perl5/lib/Tie/Array.pm b/contrib/perl5/lib/Tie/Array.pm
deleted file mode 100644
index f4c6193..0000000
--- a/contrib/perl5/lib/Tie/Array.pm
+++ /dev/null
@@ -1,288 +0,0 @@
-package Tie::Array;
-
-use 5.005_64;
-use strict;
-use Carp;
-our $VERSION = '1.01';
-
-# Pod documentation after __END__ below.
-
-sub DESTROY { }
-sub EXTEND { }
-sub UNSHIFT { scalar shift->SPLICE(0,0,@_) }
-sub SHIFT { shift->SPLICE(0,1) }
-#sub SHIFT { (shift->SPLICE(0,1))[0] }
-sub CLEAR { shift->STORESIZE(0) }
-
-sub PUSH
-{
- my $obj = shift;
- my $i = $obj->FETCHSIZE;
- $obj->STORE($i++, shift) while (@_);
-}
-
-sub POP
-{
- my $obj = shift;
- my $newsize = $obj->FETCHSIZE - 1;
- my $val;
- if ($newsize >= 0)
- {
- $val = $obj->FETCH($newsize);
- $obj->STORESIZE($newsize);
- }
- $val;
-}
-
-sub SPLICE {
- my $obj = shift;
- my $sz = $obj->FETCHSIZE;
- my $off = (@_) ? shift : 0;
- $off += $sz if ($off < 0);
- my $len = (@_) ? shift : $sz - $off;
- $len += $sz - $off if $len < 0;
- my @result;
- for (my $i = 0; $i < $len; $i++) {
- push(@result,$obj->FETCH($off+$i));
- }
- $off = $sz if $off > $sz;
- $len -= $off + $len - $sz if $off + $len > $sz;
- if (@_ > $len) {
- # Move items up to make room
- my $d = @_ - $len;
- my $e = $off+$len;
- $obj->EXTEND($sz+$d);
- for (my $i=$sz-1; $i >= $e; $i--) {
- my $val = $obj->FETCH($i);
- $obj->STORE($i+$d,$val);
- }
- }
- elsif (@_ < $len) {
- # Move items down to close the gap
- my $d = $len - @_;
- my $e = $off+$len;
- for (my $i=$off+$len; $i < $sz; $i++) {
- my $val = $obj->FETCH($i);
- $obj->STORE($i-$d,$val);
- }
- $obj->STORESIZE($sz-$d);
- }
- for (my $i=0; $i < @_; $i++) {
- $obj->STORE($off+$i,$_[$i]);
- }
- return @result;
-}
-
-sub EXISTS {
- my $pkg = ref $_[0];
- croak "$pkg dosn't define an EXISTS method";
-}
-
-sub DELETE {
- my $pkg = ref $_[0];
- croak "$pkg dosn't define a DELETE method";
-}
-
-package Tie::StdArray;
-use vars qw(@ISA);
-@ISA = 'Tie::Array';
-
-sub TIEARRAY { bless [], $_[0] }
-sub FETCHSIZE { scalar @{$_[0]} }
-sub STORESIZE { $#{$_[0]} = $_[1]-1 }
-sub STORE { $_[0]->[$_[1]] = $_[2] }
-sub FETCH { $_[0]->[$_[1]] }
-sub CLEAR { @{$_[0]} = () }
-sub POP { pop(@{$_[0]}) }
-sub PUSH { my $o = shift; push(@$o,@_) }
-sub SHIFT { shift(@{$_[0]}) }
-sub UNSHIFT { my $o = shift; unshift(@$o,@_) }
-sub EXISTS { exists $_[0]->[$_[1]] }
-sub DELETE { delete $_[0]->[$_[1]] }
-
-sub SPLICE
-{
- my $ob = shift;
- my $sz = $ob->FETCHSIZE;
- my $off = @_ ? shift : 0;
- $off += $sz if $off < 0;
- my $len = @_ ? shift : $sz-$off;
- return splice(@$ob,$off,$len,@_);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Tie::Array - base class for tied arrays
-
-=head1 SYNOPSIS
-
- package NewArray;
- use Tie::Array;
- @ISA = ('Tie::Array');
-
- # mandatory methods
- sub TIEARRAY { ... }
- sub FETCH { ... }
- sub FETCHSIZE { ... }
-
- sub STORE { ... } # mandatory if elements writeable
- sub STORESIZE { ... } # mandatory if elements can be added/deleted
- sub EXISTS { ... } # mandatory if exists() expected to work
- sub DELETE { ... } # mandatory if delete() expected to work
-
- # optional methods - for efficiency
- sub CLEAR { ... }
- sub PUSH { ... }
- sub POP { ... }
- sub SHIFT { ... }
- sub UNSHIFT { ... }
- sub SPLICE { ... }
- sub EXTEND { ... }
- sub DESTROY { ... }
-
- package NewStdArray;
- use Tie::Array;
-
- @ISA = ('Tie::StdArray');
-
- # all methods provided by default
-
- package main;
-
- $object = tie @somearray,Tie::NewArray;
- $object = tie @somearray,Tie::StdArray;
- $object = tie @somearray,Tie::NewStdArray;
-
-
-
-=head1 DESCRIPTION
-
-This module provides methods for array-tying classes. See
-L<perltie> for a list of the functions required in order to tie an array
-to a package. The basic B<Tie::Array> package provides stub C<DESTROY>,
-and C<EXTEND> methods that do nothing, stub C<DELETE> and C<EXISTS>
-methods that croak() if the delete() or exists() builtins are ever called
-on the tied array, and implementations of C<PUSH>, C<POP>, C<SHIFT>,
-C<UNSHIFT>, C<SPLICE> and C<CLEAR> in terms of basic C<FETCH>, C<STORE>,
-C<FETCHSIZE>, C<STORESIZE>.
-
-The B<Tie::StdArray> package provides efficient methods required for tied arrays
-which are implemented as blessed references to an "inner" perl array.
-It inherits from B<Tie::Array>, and should cause tied arrays to behave exactly
-like standard arrays, allowing for selective overloading of methods.
-
-For developers wishing to write their own tied arrays, the required methods
-are briefly defined below. See the L<perltie> section for more detailed
-descriptive, as well as example code:
-
-=over
-
-=item TIEARRAY classname, LIST
-
-The class method is invoked by the command C<tie @array, classname>. Associates
-an array instance with the specified class. C<LIST> would represent
-additional arguments (along the lines of L<AnyDBM_File> and compatriots) needed
-to complete the association. The method should return an object of a class which
-provides the methods below.
-
-=item STORE this, index, value
-
-Store datum I<value> into I<index> for the tied array associated with
-object I<this>. If this makes the array larger then
-class's mapping of C<undef> should be returned for new positions.
-
-=item FETCH this, index
-
-Retrieve the datum in I<index> for the tied array associated with
-object I<this>.
-
-=item FETCHSIZE this
-
-Returns the total number of items in the tied array associated with
-object I<this>. (Equivalent to C<scalar(@array)>).
-
-=item STORESIZE this, count
-
-Sets the total number of items in the tied array associated with
-object I<this> to be I<count>. If this makes the array larger then
-class's mapping of C<undef> should be returned for new positions.
-If the array becomes smaller then entries beyond count should be
-deleted.
-
-=item EXTEND this, count
-
-Informative call that array is likely to grow to have I<count> entries.
-Can be used to optimize allocation. This method need do nothing.
-
-=item EXISTS this, key
-
-Verify that the element at index I<key> exists in the tied array I<this>.
-
-The B<Tie::Array> implementation is a stub that simply croaks.
-
-=item DELETE this, key
-
-Delete the element at index I<key> from the tied array I<this>.
-
-The B<Tie::Array> implementation is a stub that simply croaks.
-
-=item CLEAR this
-
-Clear (remove, delete, ...) all values from the tied array associated with
-object I<this>.
-
-=item DESTROY this
-
-Normal object destructor method.
-
-=item PUSH this, LIST
-
-Append elements of LIST to the array.
-
-=item POP this
-
-Remove last element of the array and return it.
-
-=item SHIFT this
-
-Remove the first element of the array (shifting other elements down)
-and return it.
-
-=item UNSHIFT this, LIST
-
-Insert LIST elements at the beginning of the array, moving existing elements
-up to make room.
-
-=item SPLICE this, offset, length, LIST
-
-Perform the equivalent of C<splice> on the array.
-
-I<offset> is optional and defaults to zero, negative values count back
-from the end of the array.
-
-I<length> is optional and defaults to rest of the array.
-
-I<LIST> may be empty.
-
-Returns a list of the original I<length> elements at I<offset>.
-
-=back
-
-=head1 CAVEATS
-
-There is no support at present for tied @ISA. There is a potential conflict
-between magic entries needed to notice setting of @ISA, and those needed to
-implement 'tie'.
-
-Very little consideration has been given to the behaviour of tied arrays
-when C<$[> is not default value of zero.
-
-=head1 AUTHOR
-
-Nick Ing-Simmons E<lt>nik@tiuk.ti.comE<gt>
-
-=cut
diff --git a/contrib/perl5/lib/Tie/Handle.pm b/contrib/perl5/lib/Tie/Handle.pm
deleted file mode 100644
index 81b0792..0000000
--- a/contrib/perl5/lib/Tie/Handle.pm
+++ /dev/null
@@ -1,234 +0,0 @@
-package Tie::Handle;
-
-use 5.005_64;
-our $VERSION = '4.0';
-
-=head1 NAME
-
-Tie::Handle, Tie::StdHandle - base class definitions for tied handles
-
-=head1 SYNOPSIS
-
- package NewHandle;
- require Tie::Handle;
-
- @ISA = (Tie::Handle);
-
- sub READ { ... } # Provide a needed method
- sub TIEHANDLE { ... } # Overrides inherited method
-
-
- package main;
-
- tie *FH, 'NewHandle';
-
-=head1 DESCRIPTION
-
-This module provides some skeletal methods for handle-tying classes. See
-L<perltie> for a list of the functions required in tying a handle to a package.
-The basic B<Tie::Handle> package provides a C<new> method, as well as methods
-C<TIEHANDLE>, C<PRINT>, C<PRINTF> and C<GETC>.
-
-For developers wishing to write their own tied-handle classes, the methods
-are summarized below. The L<perltie> section not only documents these, but
-has sample code as well:
-
-=over
-
-=item TIEHANDLE classname, LIST
-
-The method invoked by the command C<tie *glob, classname>. Associates a new
-glob instance with the specified class. C<LIST> would represent additional
-arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
-complete the association.
-
-=item WRITE this, scalar, length, offset
-
-Write I<length> bytes of data from I<scalar> starting at I<offset>.
-
-=item PRINT this, LIST
-
-Print the values in I<LIST>
-
-=item PRINTF this, format, LIST
-
-Print the values in I<LIST> using I<format>
-
-=item READ this, scalar, length, offset
-
-Read I<length> bytes of data into I<scalar> starting at I<offset>.
-
-=item READLINE this
-
-Read a single line
-
-=item GETC this
-
-Get a single character
-
-=item CLOSE this
-
-Close the handle
-
-=item OPEN this, filename
-
-(Re-)open the handle
-
-=item BINMODE this
-
-Specify content is binary
-
-=item EOF this
-
-Test for end of file.
-
-=item TELL this
-
-Return position in the file.
-
-=item SEEK this, offset, whence
-
-Position the file.
-
-Test for end of file.
-
-=item DESTROY this
-
-Free the storage associated with the tied handle referenced by I<this>.
-This is rarely needed, as Perl manages its memory quite well. But the
-option exists, should a class wish to perform specific actions upon the
-destruction of an instance.
-
-=back
-
-=head1 MORE INFORMATION
-
-The L<perltie> section contains an example of tying handles.
-
-=head1 COMPATIBILITY
-
-This version of Tie::Handle is neither related to nor compatible with
-the Tie::Handle (3.0) module available on CPAN. It was due to an
-accident that two modules with the same name appeared. The namespace
-clash has been cleared in favor of this module that comes with the
-perl core in September 2000 and accordingly the version number has
-been bumped up to 4.0.
-
-=cut
-
-use Carp;
-use warnings::register;
-
-sub new {
- my $pkg = shift;
- $pkg->TIEHANDLE(@_);
-}
-
-# "Grandfather" the new, a la Tie::Hash
-
-sub TIEHANDLE {
- my $pkg = shift;
- if (defined &{"{$pkg}::new"}) {
- warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIEHANDLE is missing");
- $pkg->new(@_);
- }
- else {
- croak "$pkg doesn't define a TIEHANDLE method";
- }
-}
-
-sub PRINT {
- my $self = shift;
- if($self->can('WRITE') != \&WRITE) {
- my $buf = join(defined $, ? $, : "",@_);
- $buf .= $\ if defined $\;
- $self->WRITE($buf,length($buf),0);
- }
- else {
- croak ref($self)," doesn't define a PRINT method";
- }
-}
-
-sub PRINTF {
- my $self = shift;
-
- if($self->can('WRITE') != \&WRITE) {
- my $buf = sprintf(shift,@_);
- $self->WRITE($buf,length($buf),0);
- }
- else {
- croak ref($self)," doesn't define a PRINTF method";
- }
-}
-
-sub READLINE {
- my $pkg = ref $_[0];
- croak "$pkg doesn't define a READLINE method";
-}
-
-sub GETC {
- my $self = shift;
-
- if($self->can('READ') != \&READ) {
- my $buf;
- $self->READ($buf,1);
- return $buf;
- }
- else {
- croak ref($self)," doesn't define a GETC method";
- }
-}
-
-sub READ {
- my $pkg = ref $_[0];
- croak "$pkg doesn't define a READ method";
-}
-
-sub WRITE {
- my $pkg = ref $_[0];
- croak "$pkg doesn't define a WRITE method";
-}
-
-sub CLOSE {
- my $pkg = ref $_[0];
- croak "$pkg doesn't define a CLOSE method";
-}
-
-package Tie::StdHandle;
-our @ISA = 'Tie::Handle';
-use Carp;
-
-sub TIEHANDLE
-{
- my $class = shift;
- my $fh = do { \local *HANDLE};
- bless $fh,$class;
- $fh->OPEN(@_) if (@_);
- return $fh;
-}
-
-sub EOF { eof($_[0]) }
-sub TELL { tell($_[0]) }
-sub FILENO { fileno($_[0]) }
-sub SEEK { seek($_[0],$_[1],$_[2]) }
-sub CLOSE { close($_[0]) }
-sub BINMODE { binmode($_[0]) }
-
-sub OPEN
-{
- $_[0]->CLOSE if defined($_[0]->FILENO);
- @_ == 2 ? open($_[0], $_[1]) : open($_[0], $_[1], $_[2]);
-}
-
-sub READ { read($_[0],$_[1],$_[2]) }
-sub READLINE { my $fh = $_[0]; <$fh> }
-sub GETC { getc($_[0]) }
-
-sub WRITE
-{
- my $fh = $_[0];
- print $fh substr($_[1],0,$_[2])
-}
-
-
-1;
diff --git a/contrib/perl5/lib/Tie/Hash.pm b/contrib/perl5/lib/Tie/Hash.pm
deleted file mode 100644
index 2244711..0000000
--- a/contrib/perl5/lib/Tie/Hash.pm
+++ /dev/null
@@ -1,160 +0,0 @@
-package Tie::Hash;
-
-=head1 NAME
-
-Tie::Hash, Tie::StdHash - base class definitions for tied hashes
-
-=head1 SYNOPSIS
-
- package NewHash;
- require Tie::Hash;
-
- @ISA = (Tie::Hash);
-
- sub DELETE { ... } # Provides needed method
- sub CLEAR { ... } # Overrides inherited method
-
-
- package NewStdHash;
- require Tie::Hash;
-
- @ISA = (Tie::StdHash);
-
- # All methods provided by default, define only those needing overrides
- sub DELETE { ... }
-
-
- package main;
-
- tie %new_hash, 'NewHash';
- tie %new_std_hash, 'NewStdHash';
-
-=head1 DESCRIPTION
-
-This module provides some skeletal methods for hash-tying classes. See
-L<perltie> for a list of the functions required in order to tie a hash
-to a package. The basic B<Tie::Hash> package provides a C<new> method, as well
-as methods C<TIEHASH>, C<EXISTS> and C<CLEAR>. The B<Tie::StdHash> package
-provides most methods required for hashes in L<perltie>. It inherits from
-B<Tie::Hash>, and causes tied hashes to behave exactly like standard hashes,
-allowing for selective overloading of methods. The C<new> method is provided
-as grandfathering in the case a class forgets to include a C<TIEHASH> method.
-
-For developers wishing to write their own tied hashes, the required methods
-are briefly defined below. See the L<perltie> section for more detailed
-descriptive, as well as example code:
-
-=over
-
-=item TIEHASH classname, LIST
-
-The method invoked by the command C<tie %hash, classname>. Associates a new
-hash instance with the specified class. C<LIST> would represent additional
-arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
-complete the association.
-
-=item STORE this, key, value
-
-Store datum I<value> into I<key> for the tied hash I<this>.
-
-=item FETCH this, key
-
-Retrieve the datum in I<key> for the tied hash I<this>.
-
-=item FIRSTKEY this
-
-Return the (key, value) pair for the first key in the hash.
-
-=item NEXTKEY this, lastkey
-
-Return the next key for the hash.
-
-=item EXISTS this, key
-
-Verify that I<key> exists with the tied hash I<this>.
-
-The B<Tie::Hash> implementation is a stub that simply croaks.
-
-=item DELETE this, key
-
-Delete the key I<key> from the tied hash I<this>.
-
-=item CLEAR this
-
-Clear all values from the tied hash I<this>.
-
-=back
-
-=head1 CAVEATS
-
-The L<perltie> documentation includes a method called C<DESTROY> as
-a necessary method for tied hashes. Neither B<Tie::Hash> nor B<Tie::StdHash>
-define a default for this method. This is a standard for class packages,
-but may be omitted in favor of a simple default.
-
-=head1 MORE INFORMATION
-
-The packages relating to various DBM-related implementations (F<DB_File>,
-F<NDBM_File>, etc.) show examples of general tied hashes, as does the
-L<Config> module. While these do not utilize B<Tie::Hash>, they serve as
-good working examples.
-
-=cut
-
-use Carp;
-use warnings::register;
-
-sub new {
- my $pkg = shift;
- $pkg->TIEHASH(@_);
-}
-
-# Grandfather "new"
-
-sub TIEHASH {
- my $pkg = shift;
- if (defined &{"${pkg}::new"}) {
- warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIEHASH is missing");
- $pkg->new(@_);
- }
- else {
- croak "$pkg doesn't define a TIEHASH method";
- }
-}
-
-sub EXISTS {
- my $pkg = ref $_[0];
- croak "$pkg doesn't define an EXISTS method";
-}
-
-sub CLEAR {
- my $self = shift;
- my $key = $self->FIRSTKEY(@_);
- my @keys;
-
- while (defined $key) {
- push @keys, $key;
- $key = $self->NEXTKEY(@_, $key);
- }
- foreach $key (@keys) {
- $self->DELETE(@_, $key);
- }
-}
-
-# The Tie::StdHash package implements standard perl hash behaviour.
-# It exists to act as a base class for classes which only wish to
-# alter some parts of their behaviour.
-
-package Tie::StdHash;
-@ISA = qw(Tie::Hash);
-
-sub TIEHASH { bless {}, $_[0] }
-sub STORE { $_[0]->{$_[1]} = $_[2] }
-sub FETCH { $_[0]->{$_[1]} }
-sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
-sub NEXTKEY { each %{$_[0]} }
-sub EXISTS { exists $_[0]->{$_[1]} }
-sub DELETE { delete $_[0]->{$_[1]} }
-sub CLEAR { %{$_[0]} = () }
-
-1;
diff --git a/contrib/perl5/lib/Tie/RefHash.pm b/contrib/perl5/lib/Tie/RefHash.pm
deleted file mode 100644
index 4611488..0000000
--- a/contrib/perl5/lib/Tie/RefHash.pm
+++ /dev/null
@@ -1,162 +0,0 @@
-package Tie::RefHash;
-
-=head1 NAME
-
-Tie::RefHash - use references as hash keys
-
-=head1 SYNOPSIS
-
- require 5.004;
- use Tie::RefHash;
- tie HASHVARIABLE, 'Tie::RefHash', LIST;
- tie HASHVARIABLE, 'Tie::RefHash::Nestable', LIST;
-
- untie HASHVARIABLE;
-
-=head1 DESCRIPTION
-
-This module provides the ability to use references as hash keys if you
-first C<tie> the hash variable to this module. Normally, only the
-keys of the tied hash itself are preserved as references; to use
-references as keys in hashes-of-hashes, use Tie::RefHash::Nestable,
-included as part of Tie::RefHash.
-
-It is implemented using the standard perl TIEHASH interface. Please
-see the C<tie> entry in perlfunc(1) and perltie(1) for more information.
-
-The Nestable version works by looking for hash references being stored
-and converting them to tied hashes so that they too can have
-references as keys. This will happen without warning whenever you
-store a reference to one of your own hashes in the tied hash.
-
-=head1 EXAMPLE
-
- use Tie::RefHash;
- tie %h, 'Tie::RefHash';
- $a = [];
- $b = {};
- $c = \*main;
- $d = \"gunk";
- $e = sub { 'foo' };
- %h = ($a => 1, $b => 2, $c => 3, $d => 4, $e => 5);
- $a->[0] = 'foo';
- $b->{foo} = 'bar';
- for (keys %h) {
- print ref($_), "\n";
- }
-
- tie %h, 'Tie::RefHash::Nestable';
- $h{$a}->{$b} = 1;
- for (keys %h, keys %{$h{$a}}) {
- print ref($_), "\n";
- }
-
-=head1 AUTHOR
-
-Gurusamy Sarathy gsar@activestate.com
-
-=head1 VERSION
-
-Version 1.3 8 Apr 2001
-
-=head1 SEE ALSO
-
-perl(1), perlfunc(1), perltie(1)
-
-=cut
-
-use v5.6.0;
-use Tie::Hash;
-use strict;
-
-our @ISA = qw(Tie::Hash);
-our $VERSION = '1.3';
-
-sub TIEHASH {
- my $c = shift;
- my $s = [];
- bless $s, $c;
- while (@_) {
- $s->STORE(shift, shift);
- }
- return $s;
-}
-
-sub FETCH {
- my($s, $k) = @_;
- if (ref $k) {
- if (defined $s->[0]{"$k"}) {
- $s->[0]{"$k"}[1];
- }
- else {
- undef;
- }
- }
- else {
- $s->[1]{$k};
- }
-}
-
-sub STORE {
- my($s, $k, $v) = @_;
- if (ref $k) {
- $s->[0]{"$k"} = [$k, $v];
- }
- else {
- $s->[1]{$k} = $v;
- }
- $v;
-}
-
-sub DELETE {
- my($s, $k) = @_;
- (ref $k) ? delete($s->[0]{"$k"}) : delete($s->[1]{$k});
-}
-
-sub EXISTS {
- my($s, $k) = @_;
- (ref $k) ? exists($s->[0]{"$k"}) : exists($s->[1]{$k});
-}
-
-sub FIRSTKEY {
- my $s = shift;
- keys %{$s->[0]}; # reset iterator
- keys %{$s->[1]}; # reset iterator
- $s->[2] = 0;
- $s->NEXTKEY;
-}
-
-sub NEXTKEY {
- my $s = shift;
- my ($k, $v);
- if (!$s->[2]) {
- if (($k, $v) = each %{$s->[0]}) {
- return $s->[0]{"$k"}[0];
- }
- else {
- $s->[2] = 1;
- }
- }
- return each %{$s->[1]};
-}
-
-sub CLEAR {
- my $s = shift;
- $s->[2] = 0;
- %{$s->[0]} = ();
- %{$s->[1]} = ();
-}
-
-package Tie::RefHash::Nestable;
-our @ISA = qw(Tie::RefHash);
-
-sub STORE {
- my($s, $k, $v) = @_;
- if (ref($v) eq 'HASH' and not tied %$v) {
- my @elems = %$v;
- tie %$v, ref($s), @elems;
- }
- $s->SUPER::STORE($k, $v);
-}
-
-1;
diff --git a/contrib/perl5/lib/Tie/Scalar.pm b/contrib/perl5/lib/Tie/Scalar.pm
deleted file mode 100644
index 89ad03e..0000000
--- a/contrib/perl5/lib/Tie/Scalar.pm
+++ /dev/null
@@ -1,138 +0,0 @@
-package Tie::Scalar;
-
-=head1 NAME
-
-Tie::Scalar, Tie::StdScalar - base class definitions for tied scalars
-
-=head1 SYNOPSIS
-
- package NewScalar;
- require Tie::Scalar;
-
- @ISA = (Tie::Scalar);
-
- sub FETCH { ... } # Provide a needed method
- sub TIESCALAR { ... } # Overrides inherited method
-
-
- package NewStdScalar;
- require Tie::Scalar;
-
- @ISA = (Tie::StdScalar);
-
- # All methods provided by default, so define only what needs be overridden
- sub FETCH { ... }
-
-
- package main;
-
- tie $new_scalar, 'NewScalar';
- tie $new_std_scalar, 'NewStdScalar';
-
-=head1 DESCRIPTION
-
-This module provides some skeletal methods for scalar-tying classes. See
-L<perltie> for a list of the functions required in tying a scalar to a
-package. The basic B<Tie::Scalar> package provides a C<new> method, as well
-as methods C<TIESCALAR>, C<FETCH> and C<STORE>. The B<Tie::StdScalar>
-package provides all the methods specified in L<perltie>. It inherits from
-B<Tie::Scalar> and causes scalars tied to it to behave exactly like the
-built-in scalars, allowing for selective overloading of methods. The C<new>
-method is provided as a means of grandfathering, for classes that forget to
-provide their own C<TIESCALAR> method.
-
-For developers wishing to write their own tied-scalar classes, the methods
-are summarized below. The L<perltie> section not only documents these, but
-has sample code as well:
-
-=over
-
-=item TIESCALAR classname, LIST
-
-The method invoked by the command C<tie $scalar, classname>. Associates a new
-scalar instance with the specified class. C<LIST> would represent additional
-arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
-complete the association.
-
-=item FETCH this
-
-Retrieve the value of the tied scalar referenced by I<this>.
-
-=item STORE this, value
-
-Store data I<value> in the tied scalar referenced by I<this>.
-
-=item DESTROY this
-
-Free the storage associated with the tied scalar referenced by I<this>.
-This is rarely needed, as Perl manages its memory quite well. But the
-option exists, should a class wish to perform specific actions upon the
-destruction of an instance.
-
-=back
-
-=head1 MORE INFORMATION
-
-The L<perltie> section uses a good example of tying scalars by associating
-process IDs with priority.
-
-=cut
-
-use Carp;
-use warnings::register;
-
-sub new {
- my $pkg = shift;
- $pkg->TIESCALAR(@_);
-}
-
-# "Grandfather" the new, a la Tie::Hash
-
-sub TIESCALAR {
- my $pkg = shift;
- if (defined &{"{$pkg}::new"}) {
- warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIESCALAR is missing");
- $pkg->new(@_);
- }
- else {
- croak "$pkg doesn't define a TIESCALAR method";
- }
-}
-
-sub FETCH {
- my $pkg = ref $_[0];
- croak "$pkg doesn't define a FETCH method";
-}
-
-sub STORE {
- my $pkg = ref $_[0];
- croak "$pkg doesn't define a STORE method";
-}
-
-#
-# The Tie::StdScalar package provides scalars that behave exactly like
-# Perl's built-in scalars. Good base to inherit from, if you're only going to
-# tweak a small bit.
-#
-package Tie::StdScalar;
-@ISA = (Tie::Scalar);
-
-sub TIESCALAR {
- my $class = shift;
- my $instance = shift || undef;
- return bless \$instance => $class;
-}
-
-sub FETCH {
- return ${$_[0]};
-}
-
-sub STORE {
- ${$_[0]} = $_[1];
-}
-
-sub DESTROY {
- undef ${$_[0]};
-}
-
-1;
diff --git a/contrib/perl5/lib/Tie/SubstrHash.pm b/contrib/perl5/lib/Tie/SubstrHash.pm
deleted file mode 100644
index 1c04c6f..0000000
--- a/contrib/perl5/lib/Tie/SubstrHash.pm
+++ /dev/null
@@ -1,213 +0,0 @@
-package Tie::SubstrHash;
-
-=head1 NAME
-
-Tie::SubstrHash - Fixed-table-size, fixed-key-length hashing
-
-=head1 SYNOPSIS
-
- require Tie::SubstrHash;
-
- tie %myhash, 'Tie::SubstrHash', $key_len, $value_len, $table_size;
-
-=head1 DESCRIPTION
-
-The B<Tie::SubstrHash> package provides a hash-table-like interface to
-an array of determinate size, with constant key size and record size.
-
-Upon tying a new hash to this package, the developer must specify the
-size of the keys that will be used, the size of the value fields that the
-keys will index, and the size of the overall table (in terms of key-value
-pairs, not size in hard memory). I<These values will not change for the
-duration of the tied hash>. The newly-allocated hash table may now have
-data stored and retrieved. Efforts to store more than C<$table_size>
-elements will result in a fatal error, as will efforts to store a value
-not exactly C<$value_len> characters in length, or reference through a
-key not exactly C<$key_len> characters in length. While these constraints
-may seem excessive, the result is a hash table using much less internal
-memory than an equivalent freely-allocated hash table.
-
-=head1 CAVEATS
-
-Because the current implementation uses the table and key sizes for the
-hashing algorithm, there is no means by which to dynamically change the
-value of any of the initialization parameters.
-
-The hash does not support exists().
-
-=cut
-
-use Carp;
-
-sub TIEHASH {
- my $pack = shift;
- my ($klen, $vlen, $tsize) = @_;
- my $rlen = 1 + $klen + $vlen;
- $tsize = [$tsize,
- findgteprime($tsize * 1.1)]; # Allow 10% empty.
- $self = bless ["\0", $klen, $vlen, $tsize, $rlen, 0, -1];
- $$self[0] x= $rlen * $tsize->[1];
- $self;
-}
-
-sub CLEAR {
- local($self) = @_;
- $$self[0] = "\0" x ($$self[4] * $$self[3]->[1]);
- $$self[5] = 0;
- $$self[6] = -1;
-}
-
-sub FETCH {
- local($self,$key) = @_;
- local($klen, $vlen, $tsize, $rlen) = @$self[1..4];
- &hashkey;
- for (;;) {
- $offset = $hash * $rlen;
- $record = substr($$self[0], $offset, $rlen);
- if (ord($record) == 0) {
- return undef;
- }
- elsif (ord($record) == 1) {
- }
- elsif (substr($record, 1, $klen) eq $key) {
- return substr($record, 1+$klen, $vlen);
- }
- &rehash;
- }
-}
-
-sub STORE {
- local($self,$key,$val) = @_;
- local($klen, $vlen, $tsize, $rlen) = @$self[1..4];
- croak("Table is full ($tsize->[0] elements)") if $$self[5] > $tsize->[0];
- croak(qq/Value "$val" is not $vlen characters long/)
- if length($val) != $vlen;
- my $writeoffset;
-
- &hashkey;
- for (;;) {
- $offset = $hash * $rlen;
- $record = substr($$self[0], $offset, $rlen);
- if (ord($record) == 0) {
- $record = "\2". $key . $val;
- die "panic" unless length($record) == $rlen;
- $writeoffset = $offset unless defined $writeoffset;
- substr($$self[0], $writeoffset, $rlen) = $record;
- ++$$self[5];
- return;
- }
- elsif (ord($record) == 1) {
- $writeoffset = $offset unless defined $writeoffset;
- }
- elsif (substr($record, 1, $klen) eq $key) {
- $record = "\2". $key . $val;
- die "panic" unless length($record) == $rlen;
- substr($$self[0], $offset, $rlen) = $record;
- return;
- }
- &rehash;
- }
-}
-
-sub DELETE {
- local($self,$key) = @_;
- local($klen, $vlen, $tsize, $rlen) = @$self[1..4];
- &hashkey;
- for (;;) {
- $offset = $hash * $rlen;
- $record = substr($$self[0], $offset, $rlen);
- if (ord($record) == 0) {
- return undef;
- }
- elsif (ord($record) == 1) {
- }
- elsif (substr($record, 1, $klen) eq $key) {
- substr($$self[0], $offset, 1) = "\1";
- return substr($record, 1+$klen, $vlen);
- --$$self[5];
- }
- &rehash;
- }
-}
-
-sub FIRSTKEY {
- local($self) = @_;
- $$self[6] = -1;
- &NEXTKEY;
-}
-
-sub NEXTKEY {
- local($self) = @_;
- local($klen, $vlen, $tsize, $rlen, $entries, $iterix) = @$self[1..6];
- for (++$iterix; $iterix < $tsize->[1]; ++$iterix) {
- next unless substr($$self[0], $iterix * $rlen, 1) eq "\2";
- $$self[6] = $iterix;
- return substr($$self[0], $iterix * $rlen + 1, $klen);
- }
- $$self[6] = -1;
- undef;
-}
-
-sub EXISTS {
- croak "Tie::SubstrHash does not support exists()";
-}
-
-sub hashkey {
- croak(qq/Key "$key" is not $klen characters long/)
- if length($key) != $klen;
- $hash = 2;
- for (unpack('C*', $key)) {
- $hash = $hash * 33 + $_;
- &_hashwrap if $hash >= 1e13;
- }
- &_hashwrap if $hash >= $tsize->[1];
- $hash = 1 unless $hash;
- $hashbase = $hash;
-}
-
-sub _hashwrap {
- $hash -= int($hash / $tsize->[1]) * $tsize->[1];
-}
-
-sub rehash {
- $hash += $hashbase;
- $hash -= $tsize->[1] if $hash >= $tsize->[1];
-}
-
-# using POSIX::ceil() would be too heavy, and not all platforms have it.
-sub ceil {
- my $num = shift;
- $num = int($num + 1) unless $num == int $num;
- return $num;
-}
-
-# See:
-#
-# http://www-groups.dcs.st-andrews.ac.uk/~history/HistTopics/Prime_numbers.html
-#
-
-sub findgteprime { # find the smallest prime integer greater than or equal to
- use integer;
-
- my $num = ceil(shift);
- return 2 if $num <= 2;
-
- $num++ unless $num % 2;
- my $i;
- my $sqrtnum = int sqrt $num;
- my $sqrtnumsquared = $sqrtnum * $sqrtnum;
-
- NUM:
- for (;; $num += 2) {
- if ($sqrtnumsquared < $num) {
- $sqrtnum++;
- $sqrtnumsquared = $sqrtnum * $sqrtnum;
- }
- for ($i = 3; $i <= $sqrtnum; $i += 2) {
- next NUM unless $num % $i;
- }
- return $num;
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/Time/Local.pm b/contrib/perl5/lib/Time/Local.pm
deleted file mode 100644
index a480884..0000000
--- a/contrib/perl5/lib/Time/Local.pm
+++ /dev/null
@@ -1,246 +0,0 @@
-package Time::Local;
-require 5.000;
-require Exporter;
-use Carp;
-
-@ISA = qw( Exporter );
-@EXPORT = qw( timegm timelocal );
-@EXPORT_OK = qw( timegm_nocheck timelocal_nocheck );
-
-# Set up constants
- $SEC = 1;
- $MIN = 60 * $SEC;
- $HR = 60 * $MIN;
- $DAY = 24 * $HR;
-# Determine breakpoint for rolling century
- my $thisYear = (localtime())[5];
- $nextCentury = int($thisYear / 100) * 100;
- $breakpoint = ($thisYear + 50) % 100;
- $nextCentury += 100 if $breakpoint < 50;
-
-my %options;
-
-sub timegm {
- my (@date) = @_;
- if ($date[5] > 999) {
- $date[5] -= 1900;
- }
- elsif ($date[5] >= 0 && $date[5] < 100) {
- $date[5] -= 100 if $date[5] > $breakpoint;
- $date[5] += $nextCentury;
- }
- $ym = pack(C2, @date[5,4]);
- $cheat = $cheat{$ym} || &cheat(@date);
- $cheat
- + $date[0] * $SEC
- + $date[1] * $MIN
- + $date[2] * $HR
- + ($date[3]-1) * $DAY;
-}
-
-sub timegm_nocheck {
- local $options{no_range_check} = 1;
- &timegm;
-}
-
-sub timelocal {
- my $t = &timegm;
- my $tt = $t;
-
- my (@lt) = localtime($t);
- my (@gt) = gmtime($t);
- if ($t < $DAY and ($lt[5] >= 70 or $gt[5] >= 70 )) {
- # Wrap error, too early a date
- # Try a safer date
- $tt += $DAY;
- @lt = localtime($tt);
- @gt = gmtime($tt);
- }
-
- my $tzsec = ($gt[1] - $lt[1]) * $MIN + ($gt[2] - $lt[2]) * $HR;
-
- if($lt[5] > $gt[5]) {
- $tzsec -= $DAY;
- }
- elsif($gt[5] > $lt[5]) {
- $tzsec += $DAY;
- }
- else {
- $tzsec += ($gt[7] - $lt[7]) * $DAY;
- }
-
- $tzsec += $HR if($lt[8]);
-
- $time = $t + $tzsec;
- @test = localtime($time + ($tt - $t));
- $time -= $HR if $test[2] != $_[2];
- $time;
-}
-
-sub timelocal_nocheck {
- local $options{no_range_check} = 1;
- &timelocal;
-}
-
-sub cheat {
- $year = $_[5];
- $month = $_[4];
- unless ($options{no_range_check}) {
- croak "Month '$month' out of range 0..11" if $month > 11 || $month < 0;
- croak "Day '$_[3]' out of range 1..31" if $_[3] > 31 || $_[3] < 1;
- croak "Hour '$_[2]' out of range 0..23" if $_[2] > 23 || $_[2] < 0;
- croak "Minute '$_[1]' out of range 0..59" if $_[1] > 59 || $_[1] < 0;
- croak "Second '$_[0]' out of range 0..59" if $_[0] > 59 || $_[0] < 0;
- }
- $guess = $^T;
- @g = gmtime($guess);
- $lastguess = "";
- $counter = 0;
- while ($diff = $year - $g[5]) {
- croak "Can't handle date (".join(", ",@_).")" if ++$counter > 255;
- $guess += $diff * (363 * $DAY);
- @g = gmtime($guess);
- if (($thisguess = "@g") eq $lastguess){
- croak "Can't handle date (".join(", ",@_).")";
- #date beyond this machine's integer limit
- }
- $lastguess = $thisguess;
- }
- while ($diff = $month - $g[4]) {
- croak "Can't handle date (".join(", ",@_).")" if ++$counter > 255;
- $guess += $diff * (27 * $DAY);
- @g = gmtime($guess);
- if (($thisguess = "@g") eq $lastguess){
- croak "Can't handle date (".join(", ",@_).")";
- #date beyond this machine's integer limit
- }
- $lastguess = $thisguess;
- }
- @gfake = gmtime($guess-1); #still being sceptic
- if ("@gfake" eq $lastguess){
- croak "Can't handle date (".join(", ",@_).")";
- #date beyond this machine's integer limit
- }
- $g[3]--;
- $guess -= $g[0] * $SEC + $g[1] * $MIN + $g[2] * $HR + $g[3] * $DAY;
- $cheat{$ym} = $guess;
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Time::Local - efficiently compute time from local and GMT time
-
-=head1 SYNOPSIS
-
- $time = timelocal($sec,$min,$hours,$mday,$mon,$year);
- $time = timegm($sec,$min,$hours,$mday,$mon,$year);
-
-=head1 DESCRIPTION
-
-These routines are the inverse of built-in perl fuctions localtime()
-and gmtime(). They accept a date as a six-element array, and return
-the corresponding time(2) value in seconds since the Epoch (Midnight,
-January 1, 1970). This value can be positive or negative.
-
-It is worth drawing particular attention to the expected ranges for
-the values provided. While the day of the month is expected to be in
-the range 1..31, the month should be in the range 0..11.
-This is consistent with the values returned from localtime() and gmtime().
-
-The timelocal() and timegm() functions perform range checking on the
-input $sec, $min, $hours, $mday, and $mon values by default. If you'd
-rather they didn't, you can explicitly import the timelocal_nocheck()
-and timegm_nocheck() functions.
-
- use Time::Local 'timelocal_nocheck';
-
- {
- # The 365th day of 1999
- print scalar localtime timelocal_nocheck 0,0,0,365,0,99;
-
- # The twenty thousandth day since 1970
- print scalar localtime timelocal_nocheck 0,0,0,20000,0,70;
-
- # And even the 10,000,000th second since 1999!
- print scalar localtime timelocal_nocheck 10000000,0,0,1,0,99;
- }
-
-Your mileage may vary when trying these with minutes and hours,
-and it doesn't work at all for months.
-
-Strictly speaking, the year should also be specified in a form consistent
-with localtime(), i.e. the offset from 1900.
-In order to make the interpretation of the year easier for humans,
-however, who are more accustomed to seeing years as two-digit or four-digit
-values, the following conventions are followed:
-
-=over 4
-
-=item *
-
-Years greater than 999 are interpreted as being the actual year,
-rather than the offset from 1900. Thus, 1963 would indicate the year
-Martin Luther King won the Nobel prize, not the year 2863.
-
-=item *
-
-Years in the range 100..999 are interpreted as offset from 1900,
-so that 112 indicates 2012. This rule also applies to years less than zero
-(but see note below regarding date range).
-
-=item *
-
-Years in the range 0..99 are interpreted as shorthand for years in the
-rolling "current century," defined as 50 years on either side of the current
-year. Thus, today, in 1999, 0 would refer to 2000, and 45 to 2045,
-but 55 would refer to 1955. Twenty years from now, 55 would instead refer
-to 2055. This is messy, but matches the way people currently think about
-two digit dates. Whenever possible, use an absolute four digit year instead.
-
-=back
-
-The scheme above allows interpretation of a wide range of dates, particularly
-if 4-digit years are used.
-
-Please note, however, that the range of dates that can be actually be handled
-depends on the size of an integer (time_t) on a given platform.
-Currently, this is 32 bits for most systems, yielding an approximate range
-from Dec 1901 to Jan 2038.
-
-Both timelocal() and timegm() croak if given dates outside the supported
-range.
-
-=head1 IMPLEMENTATION
-
-These routines are quite efficient and yet are always guaranteed to agree
-with localtime() and gmtime(). We manage this by caching the start times
-of any months we've seen before. If we know the start time of the month,
-we can always calculate any time within the month. The start times
-themselves are guessed by successive approximation starting at the
-current time, since most dates seen in practice are close to the
-current date. Unlike algorithms that do a binary search (calling gmtime
-once for each bit of the time value, resulting in 32 calls), this algorithm
-calls it at most 6 times, and usually only once or twice. If you hit
-the month cache, of course, it doesn't call it at all.
-
-timelocal() is implemented using the same cache. We just assume that we're
-translating a GMT time, and then fudge it when we're done for the timezone
-and daylight savings arguments. Note that the timezone is evaluated for
-each date because countries occasionally change their official timezones.
-Assuming that localtime() corrects for these changes, this routine will
-also be correct. The daylight savings offset is currently assumed
-to be one hour.
-
-=head1 BUGS
-
-The whole scheme for interpreting two-digit years can be considered a bug.
-
-Note that the cache currently handles only years from 1900 through 2155.
-
-The proclivity to croak() is probably a bug.
-
-=cut
diff --git a/contrib/perl5/lib/Time/gmtime.pm b/contrib/perl5/lib/Time/gmtime.pm
deleted file mode 100644
index 6ff4bc8..0000000
--- a/contrib/perl5/lib/Time/gmtime.pm
+++ /dev/null
@@ -1,89 +0,0 @@
-package Time::gmtime;
-use strict;
-use Time::tm;
-
-use 5.005_64;
-our(@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION);
-BEGIN {
- use Exporter ();
- @ISA = qw(Exporter Time::tm);
- @EXPORT = qw(gmtime gmctime);
- @EXPORT_OK = qw(
- $tm_sec $tm_min $tm_hour $tm_mday
- $tm_mon $tm_year $tm_wday $tm_yday
- $tm_isdst
- );
- %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
- $VERSION = 1.01;
-}
-use vars @EXPORT_OK;
-
-sub populate (@) {
- return unless @_;
- my $tmob = Time::tm->new();
- @$tmob = (
- $tm_sec, $tm_min, $tm_hour, $tm_mday,
- $tm_mon, $tm_year, $tm_wday, $tm_yday,
- $tm_isdst )
- = @_;
- return $tmob;
-}
-
-sub gmtime (;$) { populate CORE::gmtime(@_ ? shift : time)}
-sub gmctime (;$) { scalar CORE::gmtime(@_ ? shift : time)}
-
-1;
-__END__
-
-=head1 NAME
-
-Time::gmtime - by-name interface to Perl's built-in gmtime() function
-
-=head1 SYNOPSIS
-
- use Time::gmtime;
- $gm = gmtime();
- printf "The day in Greenwich is %s\n",
- (qw(Sun Mon Tue Wed Thu Fri Sat Sun))[ gm->wday() ];
-
- use Time::gmtime w(:FIELDS;
- printf "The day in Greenwich is %s\n",
- (qw(Sun Mon Tue Wed Thu Fri Sat Sun))[ gm_wday() ];
-
- $now = gmctime();
-
- use Time::gmtime;
- use File::stat;
- $date_string = gmctime(stat($file)->mtime);
-
-=head1 DESCRIPTION
-
-This module's default exports override the core gmtime() function,
-replacing it with a version that returns "Time::tm" objects.
-This object has methods that return the similarly named structure field
-name from the C's tm structure from F<time.h>; namely sec, min, hour,
-mday, mon, year, wday, yday, and isdst.
-
-You may also import all the structure fields directly into your namespace
-as regular variables using the :FIELDS import tag. (Note that this
-still overrides your core functions.) Access these fields as variables
-named with a preceding C<tm_> in front their method names. Thus,
-C<$tm_obj-E<gt>mday()> corresponds to $tm_mday if you import the fields.
-
-The gmctime() function provides a way of getting at the
-scalar sense of the original CORE::gmtime() function.
-
-To access this functionality without the core overrides,
-pass the C<use> an empty import list, and then access
-function functions with their full qualified names.
-On the other hand, the built-ins are still available
-via the C<CORE::> pseudo-package.
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/Time/localtime.pm b/contrib/perl5/lib/Time/localtime.pm
deleted file mode 100644
index 0ca07af..0000000
--- a/contrib/perl5/lib/Time/localtime.pm
+++ /dev/null
@@ -1,85 +0,0 @@
-package Time::localtime;
-use strict;
-use Time::tm;
-
-use 5.005_64;
-our(@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION);
-BEGIN {
- use Exporter ();
- @ISA = qw(Exporter Time::tm);
- @EXPORT = qw(localtime ctime);
- @EXPORT_OK = qw(
- $tm_sec $tm_min $tm_hour $tm_mday
- $tm_mon $tm_year $tm_wday $tm_yday
- $tm_isdst
- );
- %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
- $VERSION = 1.01;
-}
-use vars @EXPORT_OK;
-
-sub populate (@) {
- return unless @_;
- my $tmob = Time::tm->new();
- @$tmob = (
- $tm_sec, $tm_min, $tm_hour, $tm_mday,
- $tm_mon, $tm_year, $tm_wday, $tm_yday,
- $tm_isdst )
- = @_;
- return $tmob;
-}
-
-sub localtime (;$) { populate CORE::localtime(@_ ? shift : time)}
-sub ctime (;$) { scalar CORE::localtime(@_ ? shift : time) }
-
-1;
-
-__END__
-
-=head1 NAME
-
-Time::localtime - by-name interface to Perl's built-in localtime() function
-
-=head1 SYNOPSIS
-
- use Time::localtime;
- printf "Year is %d\n", localtime->year() + 1900;
-
- $now = ctime();
-
- use Time::localtime;
- use File::stat;
- $date_string = ctime(stat($file)->mtime);
-
-=head1 DESCRIPTION
-
-This module's default exports override the core localtime() function,
-replacing it with a version that returns "Time::tm" objects.
-This object has methods that return the similarly named structure field
-name from the C's tm structure from F<time.h>; namely sec, min, hour,
-mday, mon, year, wday, yday, and isdst.
-
-You may also import all the structure fields directly into your namespace
-as regular variables using the :FIELDS import tag. (Note that this still
-overrides your core functions.) Access these fields as
-variables named with a preceding C<tm_> in front their method names.
-Thus, C<$tm_obj-E<gt>mday()> corresponds to $tm_mday if you import
-the fields.
-
-The ctime() function provides a way of getting at the
-scalar sense of the original CORE::localtime() function.
-
-To access this functionality without the core overrides,
-pass the C<use> an empty import list, and then access
-function functions with their full qualified names.
-On the other hand, the built-ins are still available
-via the C<CORE::> pseudo-package.
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/Time/tm.pm b/contrib/perl5/lib/Time/tm.pm
deleted file mode 100644
index fd47ad1..0000000
--- a/contrib/perl5/lib/Time/tm.pm
+++ /dev/null
@@ -1,31 +0,0 @@
-package Time::tm;
-use strict;
-
-use Class::Struct qw(struct);
-struct('Time::tm' => [
- map { $_ => '$' } qw{ sec min hour mday mon year wday yday isdst }
-]);
-
-1;
-__END__
-
-=head1 NAME
-
-Time::tm - internal object used by Time::gmtime and Time::localtime
-
-=head1 SYNOPSIS
-
-Don't use this module directly.
-
-=head1 DESCRIPTION
-
-This module is used internally as a base class by Time::localtime And
-Time::gmtime functions. It creates a Time::tm struct object which is
-addressable just like's C's tm structure from F<time.h>; namely with sec,
-min, hour, mday, mon, year, wday, yday, and isdst.
-
-This class is an internal interface only.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/UNIVERSAL.pm b/contrib/perl5/lib/UNIVERSAL.pm
deleted file mode 100644
index f2f1fe9..0000000
--- a/contrib/perl5/lib/UNIVERSAL.pm
+++ /dev/null
@@ -1,101 +0,0 @@
-package UNIVERSAL;
-
-# UNIVERSAL should not contain any extra subs/methods beyond those
-# that it exists to define. The use of Exporter below is a historical
-# accident that should be fixed sometime.
-require Exporter;
-*import = \&Exporter::import;
-@EXPORT_OK = qw(isa can);
-
-1;
-__END__
-
-=head1 NAME
-
-UNIVERSAL - base class for ALL classes (blessed references)
-
-=head1 SYNOPSIS
-
- $io = $fd->isa("IO::Handle");
- $sub = $obj->can('print');
-
- $yes = UNIVERSAL::isa($ref, "HASH");
-
-=head1 DESCRIPTION
-
-C<UNIVERSAL> is the base class which all bless references will inherit from,
-see L<perlobj>
-
-C<UNIVERSAL> provides the following methods
-
-=over 4
-
-=item isa ( TYPE )
-
-C<isa> returns I<true> if C<REF> is blessed into package C<TYPE>
-or inherits from package C<TYPE>.
-
-C<isa> can be called as either a static or object method call.
-
-=item can ( METHOD )
-
-C<can> checks if the object has a method called C<METHOD>. If it does
-then a reference to the sub is returned. If it does not then I<undef>
-is returned.
-
-C<can> can be called as either a static or object method call.
-
-=item VERSION ( [ REQUIRE ] )
-
-C<VERSION> will return the value of the variable C<$VERSION> in the
-package the object is blessed into. If C<REQUIRE> is given then
-it will do a comparison and die if the package version is not
-greater than or equal to C<REQUIRE>.
-
-C<VERSION> can be called as either a static or object method call.
-
-=back
-
-The C<isa> and C<can> methods can also be called as subroutines
-
-=over 4
-
-=item UNIVERSAL::isa ( VAL, TYPE )
-
-C<isa> returns I<true> if one of the following statements is true.
-
-=over 8
-
-=item *
-
-C<VAL> is a reference blessed into either package C<TYPE> or a package
-which inherits from package C<TYPE>.
-
-=item *
-
-C<VAL> is a reference to a C<TYPE> of Perl variable (e.g. 'HASH').
-
-=item *
-
-C<VAL> is the name of a package that inherits from (or is itself)
-package C<TYPE>.
-
-=back
-
-=item UNIVERSAL::can ( VAL, METHOD )
-
-If C<VAL> is a blessed reference which has a method called C<METHOD>,
-C<can> returns a reference to the subroutine. If C<VAL> is not
-a blessed reference, or if it does not have a method C<METHOD>,
-I<undef> is returned.
-
-=back
-
-These subroutines should I<not> be imported via S<C<use UNIVERSAL qw(...)>>.
-If you want simple local access to them you can do
-
- *isa = \&UNIVERSAL::isa;
-
-to import isa into your package.
-
-=cut
diff --git a/contrib/perl5/lib/User/grent.pm b/contrib/perl5/lib/User/grent.pm
deleted file mode 100644
index 95e4189..0000000
--- a/contrib/perl5/lib/User/grent.pm
+++ /dev/null
@@ -1,94 +0,0 @@
-package User::grent;
-use strict;
-
-use 5.005_64;
-our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-BEGIN {
- use Exporter ();
- @EXPORT = qw(getgrent getgrgid getgrnam getgr);
- @EXPORT_OK = qw($gr_name $gr_gid $gr_passwd $gr_mem @gr_members);
- %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
-}
-use vars @EXPORT_OK;
-
-# Class::Struct forbids use of @ISA
-sub import { goto &Exporter::import }
-
-use Class::Struct qw(struct);
-struct 'User::grent' => [
- name => '$',
- passwd => '$',
- gid => '$',
- members => '@',
-];
-
-sub populate (@) {
- return unless @_;
- my $gob = new();
- ($gr_name, $gr_passwd, $gr_gid) = @$gob[0,1,2] = @_[0,1,2];
- @gr_members = @{$gob->[3]} = split ' ', $_[3];
- return $gob;
-}
-
-sub getgrent ( ) { populate(CORE::getgrent()) }
-sub getgrnam ($) { populate(CORE::getgrnam(shift)) }
-sub getgrgid ($) { populate(CORE::getgrgid(shift)) }
-sub getgr ($) { ($_[0] =~ /^\d+/) ? &getgrgid : &getgrnam }
-
-1;
-__END__
-
-=head1 NAME
-
-User::grent - by-name interface to Perl's built-in getgr*() functions
-
-=head1 SYNOPSIS
-
- use User::grent;
- $gr = getgrgid(0) or die "No group zero";
- if ( $gr->name eq 'wheel' && @{$gr->members} > 1 ) {
- print "gid zero name wheel, with other members";
- }
-
- use User::grent qw(:FIELDS;
- getgrgid(0) or die "No group zero";
- if ( $gr_name eq 'wheel' && @gr_members > 1 ) {
- print "gid zero name wheel, with other members";
- }
-
- $gr = getgr($whoever);
-
-=head1 DESCRIPTION
-
-This module's default exports override the core getgrent(), getgruid(),
-and getgrnam() functions, replacing them with versions that return
-"User::grent" objects. This object has methods that return the similarly
-named structure field name from the C's passwd structure from F<grp.h>;
-namely name, passwd, gid, and members (not mem). The first three
-return scalars, the last an array reference.
-
-You may also import all the structure fields directly into your namespace
-as regular variables using the :FIELDS import tag. (Note that this still
-overrides your core functions.) Access these fields as variables named
-with a preceding C<gr_>. Thus, C<$group_obj-E<gt>gid()> corresponds
-to $gr_gid if you import the fields. Array references are available as
-regular array variables, so C<@{ $group_obj-E<gt>members() }> would be
-simply @gr_members.
-
-The getpw() function is a simple front-end that forwards
-a numeric argument to getpwuid() and the rest to getpwnam().
-
-To access this functionality without the core overrides,
-pass the C<use> an empty import list, and then access
-function functions with their full qualified names.
-On the other hand, the built-ins are still available
-via the C<CORE::> pseudo-package.
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
diff --git a/contrib/perl5/lib/User/pwent.pm b/contrib/perl5/lib/User/pwent.pm
deleted file mode 100644
index 8c05926..0000000
--- a/contrib/perl5/lib/User/pwent.pm
+++ /dev/null
@@ -1,297 +0,0 @@
-package User::pwent;
-
-use 5.006;
-
-use strict;
-use warnings;
-
-use Config;
-use Carp;
-
-our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-BEGIN {
- use Exporter ();
- @EXPORT = qw(getpwent getpwuid getpwnam getpw);
- @EXPORT_OK = qw(
- pw_has
-
- $pw_name $pw_passwd $pw_uid $pw_gid
- $pw_gecos $pw_dir $pw_shell
- $pw_expire $pw_change $pw_class
- $pw_age
- $pw_quota $pw_comment
- $pw_expire
-
- );
- %EXPORT_TAGS = (
- FIELDS => [ grep(/^\$pw_/, @EXPORT_OK), @EXPORT ],
- ALL => [ @EXPORT, @EXPORT_OK ],
- );
-}
-use vars grep /^\$pw_/, @EXPORT_OK;
-
-#
-# XXX: these mean somebody hacked this module's source
-# without understanding the underlying assumptions.
-#
-my $IE = "[INTERNAL ERROR]";
-
-# Class::Struct forbids use of @ISA
-sub import { goto &Exporter::import }
-
-use Class::Struct qw(struct);
-struct 'User::pwent' => [
- name => '$', # pwent[0]
- passwd => '$', # pwent[1]
- uid => '$', # pwent[2]
- gid => '$', # pwent[3]
-
- # you'll only have one/none of these three
- change => '$', # pwent[4]
- age => '$', # pwent[4]
- quota => '$', # pwent[4]
-
- # you'll only have one/none of these two
- comment => '$', # pwent[5]
- class => '$', # pwent[5]
-
- # you might not have this one
- gecos => '$', # pwent[6]
-
- dir => '$', # pwent[7]
- shell => '$', # pwent[8]
-
- # you might not have this one
- expire => '$', # pwent[9]
-
-];
-
-
-# init our groks hash to be true if the built platform knew how
-# to do each struct pwd field that perl can ever under any circumstances
-# know about. we do not use /^pw_?/, but just the tails.
-sub _feature_init {
- our %Groks; # whether build system knew how to do this feature
- for my $feep ( qw{
- pwage pwchange pwclass pwcomment
- pwexpire pwgecos pwpasswd pwquota
- }
- )
- {
- my $short = $feep =~ /^pw(.*)/
- ? $1
- : do {
- # not cluck, as we know we called ourselves,
- # and a confession is probably imminent anyway
- warn("$IE $feep is a funny struct pwd field");
- $feep;
- };
-
- exists $Config{ "d_" . $feep }
- || confess("$IE Configure doesn't d_$feep");
- $Groks{$short} = defined $Config{ "d_" . $feep };
- }
- # assume that any that are left are always there
- for my $feep (grep /^\$pw_/s, @EXPORT_OK) {
- $feep =~ /^\$pw_(.*)/;
- $Groks{$1} = 1 unless defined $Groks{$1};
- }
-}
-
-# With arguments, reports whether one or more fields are all implemented
-# in the build machine's struct pwd pw_*. May be whitespace separated.
-# We do not use /^pw_?/, just the tails.
-#
-# Without arguments, returns the list of fields implemented on build
-# machine, space separated in scalar context.
-#
-# Takes exception to being asked whether this machine's struct pwd has
-# a field that Perl never knows how to provide under any circumstances.
-# If the module does this idiocy to itself, the explosion is noisier.
-#
-sub pw_has {
- our %Groks; # whether build system knew how to do this feature
- my $cando = 1;
- my $sploder = caller() ne __PACKAGE__
- ? \&croak
- : sub { confess("$IE @_") };
- if (@_ == 0) {
- my @valid = sort grep { $Groks{$_} } keys %Groks;
- return wantarray ? @valid : "@valid";
- }
- for my $feep (map { split } @_) {
- defined $Groks{$feep}
- || $sploder->("$feep is never a valid struct pwd field");
- $cando &&= $Groks{$feep};
- }
- return $cando;
-}
-
-sub _populate (@) {
- return unless @_;
- my $pwob = new();
-
- # Any that haven't been pw_had are assumed on "all" platforms of
- # course, this may not be so, but you can't get here otherwise,
- # since the underlying core call already took exception to your
- # impudence.
-
- $pw_name = $pwob->name ( $_[0] );
- $pw_passwd = $pwob->passwd ( $_[1] ) if pw_has("passwd");
- $pw_uid = $pwob->uid ( $_[2] );
- $pw_gid = $pwob->gid ( $_[3] );
-
- if (pw_has("change")) {
- $pw_change = $pwob->change ( $_[4] );
- }
- elsif (pw_has("age")) {
- $pw_age = $pwob->age ( $_[4] );
- }
- elsif (pw_has("quota")) {
- $pw_quota = $pwob->quota ( $_[4] );
- }
-
- if (pw_has("class")) {
- $pw_class = $pwob->class ( $_[5] );
- }
- elsif (pw_has("comment")) {
- $pw_comment = $pwob->comment( $_[5] );
- }
-
- $pw_gecos = $pwob->gecos ( $_[6] ) if pw_has("gecos");
-
- $pw_dir = $pwob->dir ( $_[7] );
- $pw_shell = $pwob->shell ( $_[8] );
-
- $pw_expire = $pwob->expire ( $_[9] ) if pw_has("expire");
-
- return $pwob;
-}
-
-sub getpwent ( ) { _populate(CORE::getpwent()) }
-sub getpwnam ($) { _populate(CORE::getpwnam(shift)) }
-sub getpwuid ($) { _populate(CORE::getpwuid(shift)) }
-sub getpw ($) { ($_[0] =~ /^\d+\z/s) ? &getpwuid : &getpwnam }
-
-_feature_init();
-
-1;
-__END__
-
-=head1 NAME
-
-User::pwent - by-name interface to Perl's built-in getpw*() functions
-
-=head1 SYNOPSIS
-
- use User::pwent;
- $pw = getpwnam('daemon') || die "No daemon user";
- if ( $pw->uid == 1 && $pw->dir =~ m#^/(bin|tmp)?\z#s ) {
- print "gid 1 on root dir";
- }
-
- $real_shell = $pw->shell || '/bin/sh';
-
- for (($fullname, $office, $workphone, $homephone) =
- split /\s*,\s*/, $pw->gecos)
- {
- s/&/ucfirst(lc($pw->name))/ge;
- }
-
- use User::pwent qw(:FIELDS);
- getpwnam('daemon') || die "No daemon user";
- if ( $pw_uid == 1 && $pw_dir =~ m#^/(bin|tmp)?\z#s ) {
- print "gid 1 on root dir";
- }
-
- $pw = getpw($whoever);
-
- use User::pwent qw/:DEFAULT pw_has/;
- if (pw_has(qw[gecos expire quota])) { .... }
- if (pw_has("name uid gid passwd")) { .... }
- print "Your struct pwd has: ", scalar pw_has(), "\n";
-
-=head1 DESCRIPTION
-
-This module's default exports override the core getpwent(), getpwuid(),
-and getpwnam() functions, replacing them with versions that return
-C<User::pwent> objects. This object has methods that return the
-similarly named structure field name from the C's passwd structure
-from F<pwd.h>, stripped of their leading "pw_" parts, namely C<name>,
-C<passwd>, C<uid>, C<gid>, C<change>, C<age>, C<quota>, C<comment>,
-C<class>, C<gecos>, C<dir>, C<shell>, and C<expire>. The C<passwd>,
-C<gecos>, and C<shell> fields are tainted when running in taint mode.
-
-You may also import all the structure fields directly into your
-namespace as regular variables using the :FIELDS import tag. (Note
-that this still overrides your core functions.) Access these fields
-as variables named with a preceding C<pw_> in front their method
-names. Thus, C<< $passwd_obj->shell >> corresponds to $pw_shell
-if you import the fields.
-
-The getpw() function is a simple front-end that forwards
-a numeric argument to getpwuid() and the rest to getpwnam().
-
-To access this functionality without the core overrides, pass the
-C<use> an empty import list, and then access function functions
-with their full qualified names. The built-ins are always still
-available via the C<CORE::> pseudo-package.
-
-=head2 System Specifics
-
-Perl believes that no machine ever has more than one of C<change>,
-C<age>, or C<quota> implemented, nor more than one of either
-C<comment> or C<class>. Some machines do not support C<expire>,
-C<gecos>, or allegedly, C<passwd>. You may call these methods
-no matter what machine you're on, but they return C<undef> if
-unimplemented.
-
-You may ask whether one of these was implemented on the system Perl
-was built on by asking the importable C<pw_has> function about them.
-This function returns true if all parameters are supported fields
-on the build platform, false if one or more were not, and raises
-an exception if you asked about a field that Perl never knows how
-to provide. Parameters may be in a space-separated string, or as
-separate arguments. If you pass no parameters, the function returns
-the list of C<struct pwd> fields supported by your build platform's
-C library, as a list in list context, or a space-separated string
-in scalar context. Note that just because your C library had
-a field doesn't necessarily mean that it's fully implemented on
-that system.
-
-Interpretation of the C<gecos> field varies between systems, but
-traditionally holds 4 comma-separated fields containing the user's
-full name, office location, work phone number, and home phone number.
-An C<&> in the gecos field should be replaced by the user's properly
-capitalized login C<name>. The C<shell> field, if blank, must be
-assumed to be F</bin/sh>. Perl does not do this for you. The
-C<passwd> is one-way hashed garble, not clear text, and may not be
-unhashed save by brute-force guessing. Secure systems use more a
-more secure hashing than DES. On systems supporting shadow password
-systems, Perl automatically returns the shadow password entry when
-called by a suitably empowered user, even if your underlying
-vendor-provided C library was too short-sighted to realize it should
-do this.
-
-See passwd(5) and getpwent(3) for details.
-
-=head1 NOTE
-
-While this class is currently implemented using the Class::Struct
-module to build a struct-like class, you shouldn't rely upon this.
-
-=head1 AUTHOR
-
-Tom Christiansen
-
-=head1 HISTORY
-
-=over
-
-=item March 18th, 2000
-
-Reworked internals to support better interface to dodgey fields
-than normal Perl function provides. Added pw_has() field. Improved
-documentation.
-
-=back
diff --git a/contrib/perl5/lib/Win32.pod b/contrib/perl5/lib/Win32.pod
deleted file mode 100644
index 842e484..0000000
--- a/contrib/perl5/lib/Win32.pod
+++ /dev/null
@@ -1,287 +0,0 @@
-=head1 NAME
-
-Win32 - Interfaces to some Win32 API Functions
-
-=head1 DESCRIPTION
-
-Perl on Win32 contains several functions to access Win32 APIs. Some
-are included in Perl itself (on Win32) and some are only available
-after explicitly requesting the Win32 module with:
-
- use Win32;
-
-The builtin functions are marked as [CORE] and the other ones
-as [EXT] in the following alphabetical listing. The C<Win32> module
-is not part of the Perl source distribution; it is distributed in
-the libwin32 bundle of Win32::* modules on CPAN. The module is
-already preinstalled in binary distributions like ActivePerl.
-
-=head2 Alphabetical Listing of Win32 Functions
-
-=over
-
-=item Win32::AbortSystemShutdown(MACHINE)
-
-[EXT] Aborts a system shutdown (started by the
-InitiateSystemShutdown function) on the specified MACHINE.
-
-=item Win32::BuildNumber()
-
-[CORE] Returns the ActivePerl build number. This function is
-only available in the ActivePerl binary distribution.
-
-=item Win32::CopyFile(FROM, TO, OVERWRITE)
-
-[CORE] The Win32::CopyFile() function copies an existing file to a new
-file. All file information like creation time and file attributes will
-be copied to the new file. However it will B<not> copy the security
-information. If the destination file already exists it will only be
-overwritten when the OVERWRITE parameter is true. But even this will
-not overwrite a read-only file; you have to unlink() it first
-yourself.
-
-=item Win32::DomainName()
-
-[CORE] Returns the name of the Microsoft Network domain that the
-owner of the current perl process is logged into. This function does
-B<not> work on Windows 9x.
-
-=item Win32::ExpandEnvironmentStrings(STRING)
-
-[EXT] Takes STRING and replaces all referenced environment variable
-names with their defined values. References to environment variables
-take the form C<%VariableName%>. Case is ignored when looking up the
-VariableName in the environment. If the variable is not found then the
-original C<%VariableName%> text is retained. Has the same effect
-as the following:
-
- $string =~ s/%([^%]*)%/$ENV{$1} || "%$1%"/eg
-
-=item Win32::FormatMessage(ERRORCODE)
-
-[CORE] Converts the supplied Win32 error number (e.g. returned by
-Win32::GetLastError()) to a descriptive string. Analogous to the
-perror() standard-C library function. Note that C<$^E> used
-in a string context has much the same effect.
-
- C:\> perl -e "$^E = 26; print $^E;"
- The specified disk or diskette cannot be accessed
-
-=item Win32::FsType()
-
-[CORE] Returns the name of the filesystem of the currently active
-drive (like 'FAT' or 'NTFS'). In list context it returns three values:
-(FSTYPE, FLAGS, MAXCOMPLEN). FSTYPE is the filesystem type as
-before. FLAGS is a combination of values of the following table:
-
- 0x00000001 supports case-sensitive filenames
- 0x00000002 preserves the case of filenames
- 0x00000004 supports Unicode in filenames
- 0x00000008 preserves and enforces ACLs
- 0x00000010 supports file-based compression
- 0x00000020 supports disk quotas
- 0x00000040 supports sparse files
- 0x00000080 supports reparse points
- 0x00000100 supports remote storage
- 0x00008000 is a compressed volume (e.g. DoubleSpace)
- 0x00010000 supports object identifiers
- 0x00020000 supports the Encrypted File System (EFS)
-
-MAXCOMPLEN is the maximum length of a filename component (the part
-between two backslashes) on this file system.
-
-=item Win32::FreeLibrary(HANDLE)
-
-[EXT] Unloads a previously loaded dynamic-link library. The HANDLE is
-no longer valid after this call. See L<LoadLibrary|Win32::LoadLibrary(LIBNAME)>
-for information on dynamically loading a library.
-
-=item Win32::GetArchName()
-
-[EXT] Use of this function is deprecated. It is equivalent with
-$ENV{PROCESSOR_ARCHITECTURE}. This might not work on Win9X.
-
-=item Win32::GetChipName()
-
-[EXT] Returns the processor type: 386, 486 or 586 for Intel processors,
-21064 for the Alpha chip.
-
-=item Win32::GetCwd()
-
-[CORE] Returns the current active drive and directory. This function
-does not return a UNC path, since the functionality required for such
-a feature is not available under Windows 95.
-
-=item Win32::GetFullPathName(FILENAME)
-
-[CORE] GetFullPathName combines the FILENAME with the current drive
-and directory name and returns a fully qualified (aka, absolute)
-path name. In list context it returns two elements: (PATH, FILE) where
-PATH is the complete pathname component (including trailing backslash)
-and FILE is just the filename part. Note that no attempt is made to
-convert 8.3 components in the supplied FILENAME to longnames or
-vice-versa. Compare with Win32::GetShortPathName and
-Win32::GetLongPathName.
-
-This function has been added for Perl 5.6.
-
-=item Win32::GetLastError()
-
-[CORE] Returns the last error value generated by a call to a Win32 API
-function. Note that C<$^E> used in a numeric context amounts to the
-same value.
-
-=item Win32::GetLongPathName(PATHNAME)
-
-[CORE] Returns a representation of PATHNAME composed of longname
-components (if any). The result may not necessarily be longer
-than PATHNAME. No attempt is made to convert PATHNAME to the
-absolute path. Compare with Win32::GetShortPathName and
-Win32::GetFullPathName.
-
-This function has been added for Perl 5.6.
-
-=item Win32::GetNextAvailDrive()
-
-[CORE] Returns a string in the form of "<d>:" where <d> is the first
-available drive letter.
-
-=item Win32::GetOSVersion()
-
-[CORE] Returns the array (STRING, MAJOR, MINOR, BUILD, ID), where
-the elements are, respectively: An arbitrary descriptive string, the
-major version number of the operating system, the minor version
-number, the build number, and a digit indicating the actual operating
-system. For ID, the values are 0 for Win32s, 1 for Windows 9X and 2
-for Windows NT. In scalar context it returns just the ID.
-
-=item Win32::GetShortPathName(PATHNAME)
-
-[CORE] Returns a representation of PATHNAME composed only of
-short (8.3) path components. The result may not necessarily be
-shorter than PATHNAME. Compare with Win32::GetFullPathName and
-Win32::GetLongPathName.
-
-=item Win32::GetProcAddress(INSTANCE, PROCNAME)
-
-[EXT] Returns the address of a function inside a loaded library. The
-information about what you can do with this address has been lost in
-the mist of time. Use the Win32::API module instead of this deprecated
-function.
-
-=item Win32::GetTickCount()
-
-[CORE] Returns the number of milliseconds elapsed since the last
-system boot. Resolution is limited to system timer ticks (about 10ms
-on WinNT and 55ms on Win9X).
-
-=item Win32::InitiateSystemShutdown
-
-(MACHINE, MESSAGE, TIMEOUT, FORCECLOSE, REBOOT)
-
-[EXT] Shutsdown the specified MACHINE, notifying users with the
-supplied MESSAGE, within the specified TIMEOUT interval. Forces
-closing of all documents without prompting the user if FORCECLOSE is
-true, and reboots the machine if REBOOT is true. This function works
-only on WinNT.
-
-=item Win32::IsWinNT()
-
-[CORE] Returns non zero if the Win32 subsystem is Windows NT.
-
-=item Win32::IsWin95()
-
-[CORE] Returns non zero if the Win32 subsystem is Windows 95.
-
-=item Win32::LoadLibrary(LIBNAME)
-
-[EXT] Loads a dynamic link library into memory and returns its module
-handle. This handle can be used with Win32::GetProcAddress and
-Win32::FreeLibrary. This function is deprecated. Use the Win32::API
-module instead.
-
-=item Win32::LoginName()
-
-[CORE] Returns the username of the owner of the current perl process.
-
-=item Win32::LookupAccountName(SYSTEM, ACCOUNT, DOMAIN, SID, SIDTYPE)
-
-[EXT] Looks up ACCOUNT on SYSTEM and returns the domain name the SID and
-the SID type.
-
-=item Win32::LookupAccountSID(SYSTEM, SID, ACCOUNT, DOMAIN, SIDTYPE)
-
-[EXT] Looks up SID on SYSTEM and returns the account name, domain name,
-and the SID type.
-
-=item Win32::MsgBox(MESSAGE [, FLAGS [, TITLE]])
-
-[EXT] Create a dialogbox containing MESSAGE. FLAGS specifies the
-required icon and buttons according to the following table:
-
- 0 = OK
- 1 = OK and Cancel
- 2 = Abort, Retry, and Ignore
- 3 = Yes, No and Cancel
- 4 = Yes and No
- 5 = Retry and Cancel
-
- MB_ICONSTOP "X" in a red circle
- MB_ICONQUESTION question mark in a bubble
- MB_ICONEXCLAMATION exclamation mark in a yellow triangle
- MB_ICONINFORMATION "i" in a bubble
-
-TITLE specifies an optional window title. The default is "Perl".
-
-The function returns the menu id of the selected push button:
-
- 0 Error
-
- 1 OK
- 2 Cancel
- 3 Abort
- 4 Retry
- 5 Ignore
- 6 Yes
- 7 No
-
-=item Win32::NodeName()
-
-[CORE] Returns the Microsoft Network node-name of the current machine.
-
-=item Win32::RegisterServer(LIBRARYNAME)
-
-[EXT] Loads the DLL LIBRARYNAME and calls the function DllRegisterServer.
-
-=item Win32::SetCwd(NEWDIRECTORY)
-
-[CORE] Sets the current active drive and directory. This function does not
-work with UNC paths, since the functionality required to required for
-such a feature is not available under Windows 95.
-
-=item Win32::SetLastError(ERROR)
-
-[CORE] Sets the value of the last error encountered to ERROR. This is
-that value that will be returned by the Win32::GetLastError()
-function. This functions has been added for Perl 5.6.
-
-=item Win32::Sleep(TIME)
-
-[CORE] Pauses for TIME milliseconds. The timeslices are made available
-to other processes and threads.
-
-=item Win32::Spawn(COMMAND, ARGS, PID)
-
-[CORE] Spawns a new process using the supplied COMMAND, passing in
-arguments in the string ARGS. The pid of the new process is stored in
-PID. This function is deprecated. Please use the Win32::Process module
-instead.
-
-=item Win32::UnregisterServer(LIBRARYNAME)
-
-[EXT] Loads the DLL LIBRARYNAME and calls the function
-DllUnregisterServer.
-
-=back
-
-=cut
diff --git a/contrib/perl5/lib/abbrev.pl b/contrib/perl5/lib/abbrev.pl
deleted file mode 100644
index c505a6f..0000000
--- a/contrib/perl5/lib/abbrev.pl
+++ /dev/null
@@ -1,43 +0,0 @@
-;# Usage:
-;# %foo = ();
-;# &abbrev(*foo,LIST);
-;# ...
-;# $long = $foo{$short};
-
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Text::Abbrev
-#
-
-package abbrev;
-
-sub main'abbrev {
- local(*domain) = @_;
- shift(@_);
- @cmp = @_;
- local($[) = 0;
- foreach $name (@_) {
- @extra = split(//,$name);
- $abbrev = shift(@extra);
- $len = 1;
- foreach $cmp (@cmp) {
- next if $cmp eq $name;
- while (@extra && substr($cmp,0,$len) eq $abbrev) {
- $abbrev .= shift(@extra);
- ++$len;
- }
- }
- $domain{$abbrev} = $name;
- while ($#extra >= 0) {
- $abbrev .= shift(@extra);
- $domain{$abbrev} = $name;
- }
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/assert.pl b/contrib/perl5/lib/assert.pl
deleted file mode 100644
index 4c9ebf2..0000000
--- a/contrib/perl5/lib/assert.pl
+++ /dev/null
@@ -1,55 +0,0 @@
-# assert.pl
-# tchrist@convex.com (Tom Christiansen)
-#
-# Usage:
-#
-# &assert('@x > @y');
-# &assert('$var > 10', $var, $othervar, @various_info);
-#
-# That is, if the first expression evals false, we blow up. The
-# rest of the args, if any, are nice to know because they will
-# be printed out by &panic, which is just the stack-backtrace
-# routine shamelessly borrowed from the perl debugger.
-
-sub assert {
- &panic("ASSERTION BOTCHED: $_[$[]",$@) unless eval $_[$[];
-}
-
-sub panic {
- package DB;
-
- select(STDERR);
-
- print "\npanic: @_\n";
-
- exit 1 if $] <= 4.003; # caller broken
-
- # stack traceback gratefully borrowed from perl debugger
-
- local $_;
- my $i;
- my ($p,$f,$l,$s,$h,$a,@a,@frames);
- for ($i = 0; ($p,$f,$l,$s,$h,$w) = caller($i); $i++) {
- @a = @args;
- for (@a) {
- if (/^StB\000/ && length($_) == length($_main{'_main'})) {
- $_ = sprintf("%s",$_);
- }
- else {
- s/'/\\'/g;
- s/([^\0]*)/'$1'/ unless /^-?[\d.]+$/;
- s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
- s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
- }
- }
- $w = $w ? '@ = ' : '$ = ';
- $a = $h ? '(' . join(', ', @a) . ')' : '';
- push(@frames, "$w&$s$a from file $f line $l\n");
- }
- for ($i=0; $i <= $#frames; $i++) {
- print $frames[$i];
- }
- exit 1;
-}
-
-1;
diff --git a/contrib/perl5/lib/attributes.pm b/contrib/perl5/lib/attributes.pm
deleted file mode 100644
index f111645..0000000
--- a/contrib/perl5/lib/attributes.pm
+++ /dev/null
@@ -1,399 +0,0 @@
-package attributes;
-
-$VERSION = 0.03;
-
-@EXPORT_OK = qw(get reftype);
-@EXPORT = ();
-%EXPORT_TAGS = (ALL => [@EXPORT, @EXPORT_OK]);
-
-use strict;
-
-sub croak {
- require Carp;
- goto &Carp::croak;
-}
-
-sub carp {
- require Carp;
- goto &Carp::carp;
-}
-
-## forward declaration(s) rather than wrapping the bootstrap call in BEGIN{}
-#sub reftype ($) ;
-#sub _fetch_attrs ($) ;
-#sub _guess_stash ($) ;
-#sub _modify_attrs ;
-#sub _warn_reserved () ;
-#
-# The extra trips through newATTRSUB in the interpreter wipe out any savings
-# from avoiding the BEGIN block. Just do the bootstrap now.
-BEGIN { bootstrap }
-
-sub import {
- @_ > 2 && ref $_[2] or do {
- require Exporter;
- goto &Exporter::import;
- };
- my (undef,$home_stash,$svref,@attrs) = @_;
-
- my $svtype = uc reftype($svref);
- my $pkgmeth;
- $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES")
- if defined $home_stash && $home_stash ne '';
- my @badattrs;
- if ($pkgmeth) {
- my @pkgattrs = _modify_attrs($svref, @attrs);
- @badattrs = $pkgmeth->($home_stash, $svref, @attrs);
- if (!@badattrs && @pkgattrs) {
- return unless _warn_reserved;
- @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs;
- if (@pkgattrs) {
- for my $attr (@pkgattrs) {
- $attr =~ s/\(.+\z//s;
- }
- my $s = ((@pkgattrs == 1) ? '' : 's');
- carp "$svtype package attribute$s " .
- "may clash with future reserved word$s: " .
- join(' : ' , @pkgattrs);
- }
- }
- }
- else {
- @badattrs = _modify_attrs($svref, @attrs);
- }
- if (@badattrs) {
- croak "Invalid $svtype attribute" .
- (( @badattrs == 1 ) ? '' : 's') .
- ": " .
- join(' : ', @badattrs);
- }
-}
-
-sub get ($) {
- @_ == 1 && ref $_[0] or
- croak 'Usage: '.__PACKAGE__.'::get $ref';
- my $svref = shift;
- my $svtype = uc reftype $svref;
- my $stash = _guess_stash $svref;
- $stash = caller unless defined $stash;
- my $pkgmeth;
- $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES")
- if defined $stash && $stash ne '';
- return $pkgmeth ?
- (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) :
- (_fetch_attrs($svref))
- ;
-}
-
-sub require_version { goto &UNIVERSAL::VERSION }
-
-1;
-__END__
-#The POD goes here
-
-=head1 NAME
-
-attributes - get/set subroutine or variable attributes
-
-=head1 SYNOPSIS
-
- sub foo : method ;
- my ($x,@y,%z) : Bent ;
- my $s = sub : method { ... };
-
- use attributes (); # optional, to get subroutine declarations
- my @attrlist = attributes::get(\&foo);
-
- use attributes 'get'; # import the attributes::get subroutine
- my @attrlist = get \&foo;
-
-=head1 DESCRIPTION
-
-Subroutine declarations and definitions may optionally have attribute lists
-associated with them. (Variable C<my> declarations also may, but see the
-warning below.) Perl handles these declarations by passing some information
-about the call site and the thing being declared along with the attribute
-list to this module. In particular, the first example above is equivalent to
-the following:
-
- use attributes __PACKAGE__, \&foo, 'method';
-
-The second example in the synopsis does something equivalent to this:
-
- use attributes __PACKAGE__, \$x, 'Bent';
- use attributes __PACKAGE__, \@y, 'Bent';
- use attributes __PACKAGE__, \%z, 'Bent';
-
-Yes, that's three invocations.
-
-B<WARNING>: attribute declarations for variables are an I<experimental>
-feature. The semantics of such declarations could change or be removed
-in future versions. They are present for purposes of experimentation
-with what the semantics ought to be. Do not rely on the current
-implementation of this feature.
-
-There are only a few attributes currently handled by Perl itself (or
-directly by this module, depending on how you look at it.) However,
-package-specific attributes are allowed by an extension mechanism.
-(See L<"Package-specific Attribute Handling"> below.)
-
-The setting of attributes happens at compile time. An attempt to set
-an unrecognized attribute is a fatal error. (The error is trappable, but
-it still stops the compilation within that C<eval>.) Setting an attribute
-with a name that's all lowercase letters that's not a built-in attribute
-(such as "foo")
-will result in a warning with B<-w> or C<use warnings 'reserved'>.
-
-=head2 Built-in Attributes
-
-The following are the built-in attributes for subroutines:
-
-=over 4
-
-=item locked
-
-Setting this attribute is only meaningful when the subroutine or
-method is to be called by multiple threads. When set on a method
-subroutine (i.e., one marked with the B<method> attribute below),
-Perl ensures that any invocation of it implicitly locks its first
-argument before execution. When set on a non-method subroutine,
-Perl ensures that a lock is taken on the subroutine itself before
-execution. The semantics of the lock are exactly those of one
-explicitly taken with the C<lock> operator immediately after the
-subroutine is entered.
-
-=item method
-
-Indicates that the referenced subroutine is a method.
-This has a meaning when taken together with the B<locked> attribute,
-as described there. It also means that a subroutine so marked
-will not trigger the "Ambiguous call resolved as CORE::%s" warning.
-
-=item lvalue
-
-Indicates that the referenced subroutine is a valid lvalue and can
-be assigned to. The subroutine must return a modifiable value such
-as a scalar variable, as described in L<perlsub>.
-
-=back
-
-There are no built-in attributes for anything other than subroutines.
-
-=head2 Available Subroutines
-
-The following subroutines are available for general use once this module
-has been loaded:
-
-=over 4
-
-=item get
-
-This routine expects a single parameter--a reference to a
-subroutine or variable. It returns a list of attributes, which may be
-empty. If passed invalid arguments, it uses die() (via L<Carp::croak|Carp>)
-to raise a fatal exception. If it can find an appropriate package name
-for a class method lookup, it will include the results from a
-C<FETCH_I<type>_ATTRIBUTES> call in its return list, as described in
-L<"Package-specific Attribute Handling"> below.
-Otherwise, only L<built-in attributes|"Built-in Attributes"> will be returned.
-
-=item reftype
-
-This routine expects a single parameter--a reference to a subroutine or
-variable. It returns the built-in type of the referenced variable,
-ignoring any package into which it might have been blessed.
-This can be useful for determining the I<type> value which forms part of
-the method names described in L<"Package-specific Attribute Handling"> below.
-
-=back
-
-Note that these routines are I<not> exported by default.
-
-=head2 Package-specific Attribute Handling
-
-B<WARNING>: the mechanisms described here are still experimental. Do not
-rely on the current implementation. In particular, there is no provision
-for applying package attributes to 'cloned' copies of subroutines used as
-closures. (See L<perlref/"Making References"> for information on closures.)
-Package-specific attribute handling may change incompatibly in a future
-release.
-
-When an attribute list is present in a declaration, a check is made to see
-whether an attribute 'modify' handler is present in the appropriate package
-(or its @ISA inheritance tree). Similarly, when C<attributes::get> is
-called on a valid reference, a check is made for an appropriate attribute
-'fetch' handler. See L<"EXAMPLES"> to see how the "appropriate package"
-determination works.
-
-The handler names are based on the underlying type of the variable being
-declared or of the reference passed. Because these attributes are
-associated with subroutine or variable declarations, this deliberately
-ignores any possibility of being blessed into some package. Thus, a
-subroutine declaration uses "CODE" as its I<type>, and even a blessed
-hash reference uses "HASH" as its I<type>.
-
-The class methods invoked for modifying and fetching are these:
-
-=over 4
-
-=item FETCH_I<type>_ATTRIBUTES
-
-This method receives a single argument, which is a reference to the
-variable or subroutine for which package-defined attributes are desired.
-The expected return value is a list of associated attributes.
-This list may be empty.
-
-=item MODIFY_I<type>_ATTRIBUTES
-
-This method is called with two fixed arguments, followed by the list of
-attributes from the relevant declaration. The two fixed arguments are
-the relevant package name and a reference to the declared subroutine or
-variable. The expected return value as a list of attributes which were
-not recognized by this handler. Note that this allows for a derived class
-to delegate a call to its base class, and then only examine the attributes
-which the base class didn't already handle for it.
-
-The call to this method is currently made I<during> the processing of the
-declaration. In particular, this means that a subroutine reference will
-probably be for an undefined subroutine, even if this declaration is
-actually part of the definition.
-
-=back
-
-Calling C<attributes::get()> from within the scope of a null package
-declaration C<package ;> for an unblessed variable reference will
-not provide any starting package name for the 'fetch' method lookup.
-Thus, this circumstance will not result in a method call for package-defined
-attributes. A named subroutine knows to which symbol table entry it belongs
-(or originally belonged), and it will use the corresponding package.
-An anonymous subroutine knows the package name into which it was compiled
-(unless it was also compiled with a null package declaration), and so it
-will use that package name.
-
-=head2 Syntax of Attribute Lists
-
-An attribute list is a sequence of attribute specifications, separated by
-whitespace or a colon (with optional whitespace).
-Each attribute specification is a simple
-name, optionally followed by a parenthesised parameter list.
-If such a parameter list is present, it is scanned past as for the rules
-for the C<q()> operator. (See L<perlop/"Quote and Quote-like Operators">.)
-The parameter list is passed as it was found, however, and not as per C<q()>.
-
-Some examples of syntactically valid attribute lists:
-
- switch(10,foo(7,3)) : expensive
- Ugly('\(") :Bad
- _5x5
- locked method
-
-Some examples of syntactically invalid attribute lists (with annotation):
-
- switch(10,foo() # ()-string not balanced
- Ugly('(') # ()-string not balanced
- 5x5 # "5x5" not a valid identifier
- Y2::north # "Y2::north" not a simple identifier
- foo + bar # "+" neither a colon nor whitespace
-
-=head1 EXPORTS
-
-=head2 Default exports
-
-None.
-
-=head2 Available exports
-
-The routines C<get> and C<reftype> are exportable.
-
-=head2 Export tags defined
-
-The C<:ALL> tag will get all of the above exports.
-
-=head1 EXAMPLES
-
-Here are some samples of syntactically valid declarations, with annotation
-as to how they resolve internally into C<use attributes> invocations by
-perl. These examples are primarily useful to see how the "appropriate
-package" is found for the possible method lookups for package-defined
-attributes.
-
-=over 4
-
-=item 1.
-
-Code:
-
- package Canine;
- package Dog;
- my Canine $spot : Watchful ;
-
-Effect:
-
- use attributes Canine => \$spot, "Watchful";
-
-=item 2.
-
-Code:
-
- package Felis;
- my $cat : Nervous;
-
-Effect:
-
- use attributes Felis => \$cat, "Nervous";
-
-=item 3.
-
-Code:
-
- package X;
- sub foo : locked ;
-
-Effect:
-
- use attributes X => \&foo, "locked";
-
-=item 4.
-
-Code:
-
- package X;
- sub Y::x : locked { 1 }
-
-Effect:
-
- use attributes Y => \&Y::x, "locked";
-
-=item 5.
-
-Code:
-
- package X;
- sub foo { 1 }
-
- package Y;
- BEGIN { *bar = \&X::foo; }
-
- package Z;
- sub Y::bar : locked ;
-
-Effect:
-
- use attributes X => \&X::foo, "locked";
-
-=back
-
-This last example is purely for purposes of completeness. You should not
-be trying to mess with the attributes of something in a package that's
-not your own.
-
-=head1 SEE ALSO
-
-L<perlsub/"Private Variables via my()"> and
-L<perlsub/"Subroutine Attributes"> for details on the basic declarations;
-L<attrs> for the obsolescent form of subroutine attribute specification
-which this module replaces;
-L<perlfunc/use> for details on the normal invocation mechanism.
-
-=cut
-
diff --git a/contrib/perl5/lib/autouse.pm b/contrib/perl5/lib/autouse.pm
deleted file mode 100644
index 179c382..0000000
--- a/contrib/perl5/lib/autouse.pm
+++ /dev/null
@@ -1,157 +0,0 @@
-package autouse;
-
-#use strict; # debugging only
-use 5.003_90; # ->can, for my $var
-
-$autouse::VERSION = '1.02';
-
-$autouse::DEBUG ||= 0;
-
-sub vet_import ($);
-
-sub croak {
- require Carp;
- Carp::croak(@_);
-}
-
-sub import {
- my $class = @_ ? shift : 'autouse';
- croak "usage: use $class MODULE [,SUBS...]" unless @_;
- my $module = shift;
-
- (my $pm = $module) =~ s{::}{/}g;
- $pm .= '.pm';
- if (exists $INC{$pm}) {
- vet_import $module;
- local $Exporter::ExportLevel = $Exporter::ExportLevel + 1;
- # $Exporter::Verbose = 1;
- return $module->import(map { (my $f = $_) =~ s/\(.*?\)$//; $f } @_);
- }
-
- # It is not loaded: need to do real work.
- my $callpkg = caller(0);
- print "autouse called from $callpkg\n" if $autouse::DEBUG;
-
- my $index;
- for my $f (@_) {
- my $proto;
- $proto = $1 if (my $func = $f) =~ s/\((.*)\)$//;
-
- my $closure_import_func = $func; # Full name
- my $closure_func = $func; # Name inside package
- my $index = index($func, '::');
- if ($index == -1) {
- $closure_import_func = "${callpkg}::$func";
- } else {
- $closure_func = substr $func, $index + 2;
- croak "autouse into different package attempted"
- unless substr($func, 0, $index) eq $module;
- }
-
- my $load_sub = sub {
- unless ($INC{$pm}) {
- eval {require $pm};
- die if $@;
- vet_import $module;
- }
- *$closure_import_func = \&{"${module}::$closure_func"};
- print "autousing $module; "
- ."imported $closure_func as $closure_import_func\n"
- if $autouse::DEBUG;
- goto &$closure_import_func;
- };
-
- if (defined $proto) {
- *$closure_import_func = eval "sub ($proto) { &\$load_sub }";
- } else {
- *$closure_import_func = $load_sub;
- }
- }
-}
-
-sub vet_import ($) {
- my $module = shift;
- if (my $import = $module->can('import')) {
- croak "autoused module has unique import() method"
- unless defined(&Exporter::import)
- && $import == \&Exporter::import;
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-autouse - postpone load of modules until a function is used
-
-=head1 SYNOPSIS
-
- use autouse 'Carp' => qw(carp croak);
- carp "this carp was predeclared and autoused ";
-
-=head1 DESCRIPTION
-
-If the module C<Module> is already loaded, then the declaration
-
- use autouse 'Module' => qw(func1 func2($;$) Module::func3);
-
-is equivalent to
-
- use Module qw(func1 func2);
-
-if C<Module> defines func2() with prototype C<($;$)>, and func1() and
-func3() have no prototypes. (At least if C<Module> uses C<Exporter>'s
-C<import>, otherwise it is a fatal error.)
-
-If the module C<Module> is not loaded yet, then the above declaration
-declares functions func1() and func2() in the current package, and
-declares a function Module::func3(). When these functions are called,
-they load the package C<Module> if needed, and substitute themselves
-with the correct definitions.
-
-=head1 WARNING
-
-Using C<autouse> will move important steps of your program's execution
-from compile time to runtime. This can
-
-=over
-
-=item *
-
-Break the execution of your program if the module you C<autouse>d has
-some initialization which it expects to be done early.
-
-=item *
-
-hide bugs in your code since important checks (like correctness of
-prototypes) is moved from compile time to runtime. In particular, if
-the prototype you specified on C<autouse> line is wrong, you will not
-find it out until the corresponding function is executed. This will be
-very unfortunate for functions which are not always called (note that
-for such functions C<autouse>ing gives biggest win, for a workaround
-see below).
-
-=back
-
-To alleviate the second problem (partially) it is advised to write
-your scripts like this:
-
- use Module;
- use autouse Module => qw(carp($) croak(&$));
- carp "this carp was predeclared and autoused ";
-
-The first line ensures that the errors in your argument specification
-are found early. When you ship your application you should comment
-out the first line, since it makes the second one useless.
-
-=head1 AUTHOR
-
-Ilya Zakharevich (ilya@math.ohio-state.edu)
-
-=head1 SEE ALSO
-
-perl(1).
-
-=cut
diff --git a/contrib/perl5/lib/base.pm b/contrib/perl5/lib/base.pm
deleted file mode 100644
index d055129..0000000
--- a/contrib/perl5/lib/base.pm
+++ /dev/null
@@ -1,92 +0,0 @@
-=head1 NAME
-
-base - Establish IS-A relationship with base class at compile time
-
-=head1 SYNOPSIS
-
- package Baz;
- use base qw(Foo Bar);
-
-=head1 DESCRIPTION
-
-Roughly similar in effect to
-
- BEGIN {
- require Foo;
- require Bar;
- push @ISA, qw(Foo Bar);
- }
-
-Will also initialize the %FIELDS hash if one of the base classes has
-it. Multiple inheritance of %FIELDS is not supported. The 'base'
-pragma will croak if multiple base classes have a %FIELDS hash. See
-L<fields> for a description of this feature.
-
-When strict 'vars' is in scope I<base> also let you assign to @ISA
-without having to declare @ISA with the 'vars' pragma first.
-
-If any of the base classes are not loaded yet, I<base> silently
-C<require>s them. Whether to C<require> a base class package is
-determined by the absence of a global $VERSION in the base package.
-If $VERSION is not detected even after loading it, <base> will
-define $VERSION in the base package, setting it to the string
-C<-1, set by base.pm>.
-
-=head1 HISTORY
-
-This module was introduced with Perl 5.004_04.
-
-=head1 SEE ALSO
-
-L<fields>
-
-=cut
-
-package base;
-
-use 5.005_64;
-our $VERSION = "1.01";
-
-sub import {
- my $class = shift;
- my $fields_base;
- my $pkg = caller(0);
-
- foreach my $base (@_) {
- next if $pkg->isa($base);
- push @{"$pkg\::ISA"}, $base;
- unless (exists ${"$base\::"}{VERSION}) {
- eval "require $base";
- # Only ignore "Can't locate" errors from our eval require.
- # Other fatal errors (syntax etc) must be reported.
- die if $@ && $@ !~ /^Can't locate .*? at \(eval /;
- unless (%{"$base\::"}) {
- require Carp;
- Carp::croak("Base class package \"$base\" is empty.\n",
- "\t(Perhaps you need to 'use' the module ",
- "which defines that package first.)");
- }
- ${"$base\::VERSION"} = "-1, set by base.pm"
- unless exists ${"$base\::"}{VERSION};
- }
-
- # A simple test like (defined %{"$base\::FIELDS"}) will
- # sometimes produce typo warnings because it would create
- # the hash if it was not present before.
- my $fglob;
- if ($fglob = ${"$base\::"}{"FIELDS"} and *$fglob{HASH}) {
- if ($fields_base) {
- require Carp;
- Carp::croak("Can't multiply inherit %FIELDS");
- } else {
- $fields_base = $base;
- }
- }
- }
- if ($fields_base) {
- require fields;
- fields::inherit($pkg, $fields_base);
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/bigfloat.pl b/contrib/perl5/lib/bigfloat.pl
deleted file mode 100644
index 8c28abd..0000000
--- a/contrib/perl5/lib/bigfloat.pl
+++ /dev/null
@@ -1,254 +0,0 @@
-package bigfloat;
-require "bigint.pl";
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Math::BigFloat
-#
-# Arbitrary length float math package
-#
-# by Mark Biggar
-#
-# number format
-# canonical strings have the form /[+-]\d+E[+-]\d+/
-# Input values can have embedded whitespace
-# Error returns
-# 'NaN' An input parameter was "Not a Number" or
-# divide by zero or sqrt of negative number
-# Division is computed to
-# max($div_scale,length(dividend)+length(divisor))
-# digits by default.
-# Also used for default sqrt scale
-
-$div_scale = 40;
-
-# Rounding modes one of 'even', 'odd', '+inf', '-inf', 'zero' or 'trunc'.
-
-$rnd_mode = 'even';
-
-# bigfloat routines
-#
-# fadd(NSTR, NSTR) return NSTR addition
-# fsub(NSTR, NSTR) return NSTR subtraction
-# fmul(NSTR, NSTR) return NSTR multiplication
-# fdiv(NSTR, NSTR[,SCALE]) returns NSTR division to SCALE places
-# fneg(NSTR) return NSTR negation
-# fabs(NSTR) return NSTR absolute value
-# fcmp(NSTR,NSTR) return CODE compare undef,<0,=0,>0
-# fround(NSTR, SCALE) return NSTR round to SCALE digits
-# ffround(NSTR, SCALE) return NSTR round at SCALEth place
-# fnorm(NSTR) return (NSTR) normalize
-# fsqrt(NSTR[, SCALE]) return NSTR sqrt to SCALE places
-
-# Convert a number to canonical string form.
-# Takes something that looks like a number and converts it to
-# the form /^[+-]\d+E[+-]\d+$/.
-sub main'fnorm { #(string) return fnum_str
- local($_) = @_;
- s/\s+//g; # strip white space
- if (/^([+-]?)(\d*)(\.(\d*))?([Ee]([+-]?\d+))?$/
- && ($2 ne '' || defined($4))) {
- my $x = defined($4) ? $4 : '';
- &norm(($1 ? "$1$2$x" : "+$2$x"), (($x ne '') ? $6-length($x) : $6));
- } else {
- 'NaN';
- }
-}
-
-# normalize number -- for internal use
-sub norm { #(mantissa, exponent) return fnum_str
- local($_, $exp) = @_;
- if ($_ eq 'NaN') {
- 'NaN';
- } else {
- s/^([+-])0+/$1/; # strip leading zeros
- if (length($_) == 1) {
- '+0E+0';
- } else {
- $exp += length($1) if (s/(0+)$//); # strip trailing zeros
- sprintf("%sE%+ld", $_, $exp);
- }
- }
-}
-
-# negation
-sub main'fneg { #(fnum_str) return fnum_str
- local($_) = &'fnorm($_[$[]);
- vec($_,0,8) ^= ord('+') ^ ord('-') unless $_ eq '+0E+0'; # flip sign
- if ( ord("\t") == 9 ) { # ascii
- s/^H/N/;
- }
- else { # ebcdic character set
- s/\373/N/;
- }
- $_;
-}
-
-# absolute value
-sub main'fabs { #(fnum_str) return fnum_str
- local($_) = &'fnorm($_[$[]);
- s/^-/+/; # mash sign
- $_;
-}
-
-# multiplication
-sub main'fmul { #(fnum_str, fnum_str) return fnum_str
- local($x,$y) = (&'fnorm($_[$[]),&'fnorm($_[$[+1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- &norm(&'bmul($xm,$ym),$xe+$ye);
- }
-}
-
-# addition
-sub main'fadd { #(fnum_str, fnum_str) return fnum_str
- local($x,$y) = (&'fnorm($_[$[]),&'fnorm($_[$[+1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- ($xm,$xe,$ym,$ye) = ($ym,$ye,$xm,$xe) if ($xe < $ye);
- &norm(&'badd($ym,$xm.('0' x ($xe-$ye))),$ye);
- }
-}
-
-# subtraction
-sub main'fsub { #(fnum_str, fnum_str) return fnum_str
- &'fadd($_[$[],&'fneg($_[$[+1]));
-}
-
-# division
-# args are dividend, divisor, scale (optional)
-# result has at most max(scale, length(dividend), length(divisor)) digits
-sub main'fdiv #(fnum_str, fnum_str[,scale]) return fnum_str
-{
- local($x,$y,$scale) = (&'fnorm($_[$[]),&'fnorm($_[$[+1]),$_[$[+2]);
- if ($x eq 'NaN' || $y eq 'NaN' || $y eq '+0E+0') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- local($ym,$ye) = split('E',$y);
- $scale = $div_scale if (!$scale);
- $scale = length($xm)-1 if (length($xm)-1 > $scale);
- $scale = length($ym)-1 if (length($ym)-1 > $scale);
- $scale = $scale + length($ym) - length($xm);
- &norm(&round(&'bdiv($xm.('0' x $scale),$ym),&'babs($ym)),
- $xe-$ye-$scale);
- }
-}
-
-# round int $q based on fraction $r/$base using $rnd_mode
-sub round { #(int_str, int_str, int_str) return int_str
- local($q,$r,$base) = @_;
- if ($q eq 'NaN' || $r eq 'NaN') {
- 'NaN';
- } elsif ($rnd_mode eq 'trunc') {
- $q; # just truncate
- } else {
- local($cmp) = &'bcmp(&'bmul($r,'+2'),$base);
- if ( $cmp < 0 ||
- ($cmp == 0 &&
- ( $rnd_mode eq 'zero' ||
- ($rnd_mode eq '-inf' && (substr($q,$[,1) eq '+')) ||
- ($rnd_mode eq '+inf' && (substr($q,$[,1) eq '-')) ||
- ($rnd_mode eq 'even' && $q =~ /[24680]$/) ||
- ($rnd_mode eq 'odd' && $q =~ /[13579]$/) )) ) {
- $q; # round down
- } else {
- &'badd($q, ((substr($q,$[,1) eq '-') ? '-1' : '+1'));
- # round up
- }
- }
-}
-
-# round the mantissa of $x to $scale digits
-sub main'fround { #(fnum_str, scale) return fnum_str
- local($x,$scale) = (&'fnorm($_[$[]),$_[$[+1]);
- if ($x eq 'NaN' || $scale <= 0) {
- $x;
- } else {
- local($xm,$xe) = split('E',$x);
- if (length($xm)-1 <= $scale) {
- $x;
- } else {
- &norm(&round(substr($xm,$[,$scale+1),
- "+0".substr($xm,$[+$scale+1,1),"+10"),
- $xe+length($xm)-$scale-1);
- }
- }
-}
-
-# round $x at the 10 to the $scale digit place
-sub main'ffround { #(fnum_str, scale) return fnum_str
- local($x,$scale) = (&'fnorm($_[$[]),$_[$[+1]);
- if ($x eq 'NaN') {
- 'NaN';
- } else {
- local($xm,$xe) = split('E',$x);
- if ($xe >= $scale) {
- $x;
- } else {
- $xe = length($xm)+$xe-$scale;
- if ($xe < 1) {
- '+0E+0';
- } elsif ($xe == 1) {
- # The first substr preserves the sign, which means that
- # we'll pass a non-normalized "-0" to &round when rounding
- # -0.006 (for example), purely so that &round won't lose
- # the sign.
- &norm(&round(substr($xm,$[,1).'0',
- "+0".substr($xm,$[+1,1),"+10"), $scale);
- } else {
- &norm(&round(substr($xm,$[,$xe),
- "+0".substr($xm,$[+$xe,1),"+10"), $scale);
- }
- }
- }
-}
-
-# compare 2 values returns one of undef, <0, =0, >0
-# returns undef if either or both input value are not numbers
-sub main'fcmp #(fnum_str, fnum_str) return cond_code
-{
- local($x, $y) = (&'fnorm($_[$[]),&'fnorm($_[$[+1]));
- if ($x eq "NaN" || $y eq "NaN") {
- undef;
- } else {
- ord($y) <=> ord($x)
- ||
- ( local($xm,$xe,$ym,$ye) = split('E', $x."E$y"),
- (($xe <=> $ye) * (substr($x,$[,1).'1')
- || &bigint'cmp($xm,$ym))
- );
- }
-}
-
-# square root by Newtons method.
-sub main'fsqrt { #(fnum_str[, scale]) return fnum_str
- local($x, $scale) = (&'fnorm($_[$[]), $_[$[+1]);
- if ($x eq 'NaN' || $x =~ /^-/) {
- 'NaN';
- } elsif ($x eq '+0E+0') {
- '+0E+0';
- } else {
- local($xm, $xe) = split('E',$x);
- $scale = $div_scale if (!$scale);
- $scale = length($xm)-1 if ($scale < length($xm)-1);
- local($gs, $guess) = (1, sprintf("1E%+d", (length($xm)+$xe-1)/2));
- while ($gs < 2*$scale) {
- $guess = &'fmul(&'fadd($guess,&'fdiv($x,$guess,$gs*2)),".5");
- $gs *= 2;
- }
- &'fround($guess, $scale);
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/bigint.pl b/contrib/perl5/lib/bigint.pl
deleted file mode 100644
index 9a3d50d..0000000
--- a/contrib/perl5/lib/bigint.pl
+++ /dev/null
@@ -1,320 +0,0 @@
-package bigint;
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Math::BigInt
-#
-# arbitrary size integer math package
-#
-# by Mark Biggar
-#
-# Canonical Big integer value are strings of the form
-# /^[+-]\d+$/ with leading zeros suppressed
-# Input values to these routines may be strings of the form
-# /^\s*[+-]?[\d\s]+$/.
-# Examples:
-# '+0' canonical zero value
-# ' -123 123 123' canonical value '-123123123'
-# '1 23 456 7890' canonical value '+1234567890'
-# Output values always always in canonical form
-#
-# Actual math is done in an internal format consisting of an array
-# whose first element is the sign (/^[+-]$/) and whose remaining
-# elements are base 100000 digits with the least significant digit first.
-# The string 'NaN' is used to represent the result when input arguments
-# are not numbers, as well as the result of dividing by zero
-#
-# routines provided are:
-#
-# bneg(BINT) return BINT negation
-# babs(BINT) return BINT absolute value
-# bcmp(BINT,BINT) return CODE compare numbers (undef,<0,=0,>0)
-# badd(BINT,BINT) return BINT addition
-# bsub(BINT,BINT) return BINT subtraction
-# bmul(BINT,BINT) return BINT multiplication
-# bdiv(BINT,BINT) return (BINT,BINT) division (quo,rem) just quo if scalar
-# bmod(BINT,BINT) return BINT modulus
-# bgcd(BINT,BINT) return BINT greatest common divisor
-# bnorm(BINT) return BINT normalization
-#
-
-# overcome a floating point problem on certain osnames (posix-bc, os390)
-BEGIN {
- my $x = 100000.0;
- my $use_mult = int($x*1e-5)*1e5 == $x ? 1 : 0;
-}
-
-$zero = 0;
-
-
-# normalize string form of number. Strip leading zeros. Strip any
-# white space and add a sign, if missing.
-# Strings that are not numbers result the value 'NaN'.
-
-sub main'bnorm { #(num_str) return num_str
- local($_) = @_;
- s/\s+//g; # strip white space
- if (s/^([+-]?)0*(\d+)$/$1$2/) { # test if number
- substr($_,$[,0) = '+' unless $1; # Add missing sign
- s/^-0/+0/;
- $_;
- } else {
- 'NaN';
- }
-}
-
-# Convert a number from string format to internal base 100000 format.
-# Assumes normalized value as input.
-sub internal { #(num_str) return int_num_array
- local($d) = @_;
- ($is,$il) = (substr($d,$[,1),length($d)-2);
- substr($d,$[,1) = '';
- ($is, reverse(unpack("a" . ($il%5+1) . ("a5" x ($il/5)), $d)));
-}
-
-# Convert a number from internal base 100000 format to string format.
-# This routine scribbles all over input array.
-sub external { #(int_num_array) return num_str
- $es = shift;
- grep($_ > 9999 || ($_ = substr('0000'.$_,-5)), @_); # zero pad
- &'bnorm(join('', $es, reverse(@_))); # reverse concat and normalize
-}
-
-# Negate input value.
-sub main'bneg { #(num_str) return num_str
- local($_) = &'bnorm(@_);
- vec($_,0,8) ^= ord('+') ^ ord('-') unless $_ eq '+0';
- s/^./N/ unless /^[-+]/; # works both in ASCII and EBCDIC
- $_;
-}
-
-# Returns the absolute value of the input.
-sub main'babs { #(num_str) return num_str
- &abs(&'bnorm(@_));
-}
-
-sub abs { # post-normalized abs for internal use
- local($_) = @_;
- s/^-/+/;
- $_;
-}
-
-# Compares 2 values. Returns one of undef, <0, =0, >0. (suitable for sort)
-sub main'bcmp { #(num_str, num_str) return cond_code
- local($x,$y) = (&'bnorm($_[$[]),&'bnorm($_[$[+1]));
- if ($x eq 'NaN') {
- undef;
- } elsif ($y eq 'NaN') {
- undef;
- } else {
- &cmp($x,$y);
- }
-}
-
-sub cmp { # post-normalized compare for internal use
- local($cx, $cy) = @_;
- return 0 if ($cx eq $cy);
-
- local($sx, $sy) = (substr($cx, 0, 1), substr($cy, 0, 1));
- local($ld);
-
- if ($sx eq '+') {
- return 1 if ($sy eq '-' || $cy eq '+0');
- $ld = length($cx) - length($cy);
- return $ld if ($ld);
- return $cx cmp $cy;
- } else { # $sx eq '-'
- return -1 if ($sy eq '+');
- $ld = length($cy) - length($cx);
- return $ld if ($ld);
- return $cy cmp $cx;
- }
-
-}
-
-sub main'badd { #(num_str, num_str) return num_str
- local(*x, *y); ($x, $y) = (&'bnorm($_[$[]),&'bnorm($_[$[+1]));
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($y eq 'NaN') {
- 'NaN';
- } else {
- @x = &internal($x); # convert to internal form
- @y = &internal($y);
- local($sx, $sy) = (shift @x, shift @y); # get signs
- if ($sx eq $sy) {
- &external($sx, &add(*x, *y)); # if same sign add
- } else {
- ($x, $y) = (&abs($x),&abs($y)); # make abs
- if (&cmp($y,$x) > 0) {
- &external($sy, &sub(*y, *x));
- } else {
- &external($sx, &sub(*x, *y));
- }
- }
- }
-}
-
-sub main'bsub { #(num_str, num_str) return num_str
- &'badd($_[$[],&'bneg($_[$[+1]));
-}
-
-# GCD -- Euclids algorithm Knuth Vol 2 pg 296
-sub main'bgcd { #(num_str, num_str) return num_str
- local($x,$y) = (&'bnorm($_[$[]),&'bnorm($_[$[+1]));
- if ($x eq 'NaN' || $y eq 'NaN') {
- 'NaN';
- } else {
- ($x, $y) = ($y,&'bmod($x,$y)) while $y ne '+0';
- $x;
- }
-}
-
-# routine to add two base 1e5 numbers
-# stolen from Knuth Vol 2 Algorithm A pg 231
-# there are separate routines to add and sub as per Kunth pg 233
-sub add { #(int_num_array, int_num_array) return int_num_array
- local(*x, *y) = @_;
- $car = 0;
- for $x (@x) {
- last unless @y || $car;
- $x -= 1e5 if $car = (($x += shift(@y) + $car) >= 1e5) ? 1 : 0;
- }
- for $y (@y) {
- last unless $car;
- $y -= 1e5 if $car = (($y += $car) >= 1e5) ? 1 : 0;
- }
- (@x, @y, $car);
-}
-
-# subtract base 1e5 numbers -- stolen from Knuth Vol 2 pg 232, $x > $y
-sub sub { #(int_num_array, int_num_array) return int_num_array
- local(*sx, *sy) = @_;
- $bar = 0;
- for $sx (@sx) {
- last unless @y || $bar;
- $sx += 1e5 if $bar = (($sx -= shift(@sy) + $bar) < 0);
- }
- @sx;
-}
-
-# multiply two numbers -- stolen from Knuth Vol 2 pg 233
-sub main'bmul { #(num_str, num_str) return num_str
- local(*x, *y); ($x, $y) = (&'bnorm($_[$[]), &'bnorm($_[$[+1]));
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($y eq 'NaN') {
- 'NaN';
- } else {
- @x = &internal($x);
- @y = &internal($y);
- local($signr) = (shift @x ne shift @y) ? '-' : '+';
- @prod = ();
- for $x (@x) {
- ($car, $cty) = (0, $[);
- for $y (@y) {
- $prod = $x * $y + $prod[$cty] + $car;
- if ($use_mult) {
- $prod[$cty++] =
- $prod - ($car = int($prod * 1e-5)) * 1e5;
- }
- else {
- $prod[$cty++] =
- $prod - ($car = int($prod / 1e5)) * 1e5;
- }
- }
- $prod[$cty] += $car if $car;
- $x = shift @prod;
- }
- &external($signr, @x, @prod);
- }
-}
-
-# modulus
-sub main'bmod { #(num_str, num_str) return num_str
- (&'bdiv(@_))[$[+1];
-}
-
-sub main'bdiv { #(dividend: num_str, divisor: num_str) return num_str
- local (*x, *y); ($x, $y) = (&'bnorm($_[$[]), &'bnorm($_[$[+1]));
- return wantarray ? ('NaN','NaN') : 'NaN'
- if ($x eq 'NaN' || $y eq 'NaN' || $y eq '+0');
- return wantarray ? ('+0',$x) : '+0' if (&cmp(&abs($x),&abs($y)) < 0);
- @x = &internal($x); @y = &internal($y);
- $srem = $y[$[];
- $sr = (shift @x ne shift @y) ? '-' : '+';
- $car = $bar = $prd = 0;
- if (($dd = int(1e5/($y[$#y]+1))) != 1) {
- for $x (@x) {
- $x = $x * $dd + $car;
- if ($use_mult) {
- $x -= ($car = int($x * 1e-5)) * 1e5;
- }
- else {
- $x -= ($car = int($x / 1e5)) * 1e5;
- }
- }
- push(@x, $car); $car = 0;
- for $y (@y) {
- $y = $y * $dd + $car;
- if ($use_mult) {
- $y -= ($car = int($y * 1e-5)) * 1e5;
- }
- else {
- $y -= ($car = int($y / 1e5)) * 1e5;
- }
- }
- }
- else {
- push(@x, 0);
- }
- @q = (); ($v2,$v1) = @y[-2,-1];
- while ($#x > $#y) {
- ($u2,$u1,$u0) = @x[-3..-1];
- $q = (($u0 == $v1) ? 99999 : int(($u0*1e5+$u1)/$v1));
- --$q while ($v2*$q > ($u0*1e5+$u1-$q*$v1)*1e5+$u2);
- if ($q) {
- ($car, $bar) = (0,0);
- for ($y = $[, $x = $#x-$#y+$[-1; $y <= $#y; ++$y,++$x) {
- $prd = $q * $y[$y] + $car;
- if ($use_mult) {
- $prd -= ($car = int($prd * 1e-5)) * 1e5;
- }
- else {
- $prd -= ($car = int($prd / 1e5)) * 1e5;
- }
- $x[$x] += 1e5 if ($bar = (($x[$x] -= $prd + $bar) < 0));
- }
- if ($x[$#x] < $car + $bar) {
- $car = 0; --$q;
- for ($y = $[, $x = $#x-$#y+$[-1; $y <= $#y; ++$y,++$x) {
- $x[$x] -= 1e5
- if ($car = (($x[$x] += $y[$y] + $car) > 1e5));
- }
- }
- }
- pop(@x); unshift(@q, $q);
- }
- if (wantarray) {
- @d = ();
- if ($dd != 1) {
- $car = 0;
- for $x (reverse @x) {
- $prd = $car * 1e5 + $x;
- $car = $prd - ($tmp = int($prd / $dd)) * $dd;
- unshift(@d, $tmp);
- }
- }
- else {
- @d = @x;
- }
- (&external($sr, @q), &external($srem, @d, $zero));
- } else {
- &external($sr, @q);
- }
-}
-1;
diff --git a/contrib/perl5/lib/bigrat.pl b/contrib/perl5/lib/bigrat.pl
deleted file mode 100644
index 2d3738f..0000000
--- a/contrib/perl5/lib/bigrat.pl
+++ /dev/null
@@ -1,155 +0,0 @@
-package bigrat;
-require "bigint.pl";
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Arbitrary size rational math package
-#
-# by Mark Biggar
-#
-# Input values to these routines consist of strings of the form
-# m|^\s*[+-]?[\d\s]+(/[\d\s]+)?$|.
-# Examples:
-# "+0/1" canonical zero value
-# "3" canonical value "+3/1"
-# " -123/123 123" canonical value "-1/1001"
-# "123 456/7890" canonical value "+20576/1315"
-# Output values always include a sign and no leading zeros or
-# white space.
-# This package makes use of the bigint package.
-# The string 'NaN' is used to represent the result when input arguments
-# that are not numbers, as well as the result of dividing by zero and
-# the sqrt of a negative number.
-# Extreamly naive algorthims are used.
-#
-# Routines provided are:
-#
-# rneg(RAT) return RAT negation
-# rabs(RAT) return RAT absolute value
-# rcmp(RAT,RAT) return CODE compare numbers (undef,<0,=0,>0)
-# radd(RAT,RAT) return RAT addition
-# rsub(RAT,RAT) return RAT subtraction
-# rmul(RAT,RAT) return RAT multiplication
-# rdiv(RAT,RAT) return RAT division
-# rmod(RAT) return (RAT,RAT) integer and fractional parts
-# rnorm(RAT) return RAT normalization
-# rsqrt(RAT, cycles) return RAT square root
-
-# Convert a number to the canonical string form m|^[+-]\d+/\d+|.
-sub main'rnorm { #(string) return rat_num
- local($_) = @_;
- s/\s+//g;
- if (m#^([+-]?\d+)(/(\d*[1-9]0*))?$#) {
- &norm($1, $3 ? $3 : '+1');
- } else {
- 'NaN';
- }
-}
-
-# Normalize by reducing to lowest terms
-sub norm { #(bint, bint) return rat_num
- local($num,$dom) = @_;
- if ($num eq 'NaN') {
- 'NaN';
- } elsif ($dom eq 'NaN') {
- 'NaN';
- } elsif ($dom =~ /^[+-]?0+$/) {
- 'NaN';
- } else {
- local($gcd) = &'bgcd($num,$dom);
- $gcd =~ s/^-/+/;
- if ($gcd ne '+1') {
- $num = &'bdiv($num,$gcd);
- $dom = &'bdiv($dom,$gcd);
- } else {
- $num = &'bnorm($num);
- $dom = &'bnorm($dom);
- }
- substr($dom,$[,1) = '';
- "$num/$dom";
- }
-}
-
-# negation
-sub main'rneg { #(rat_num) return rat_num
- local($_) = &'rnorm(@_);
- tr/-+/+-/ if ($_ ne '+0/1');
- $_;
-}
-
-# absolute value
-sub main'rabs { #(rat_num) return $rat_num
- local($_) = &'rnorm(@_);
- substr($_,$[,1) = '+' unless $_ eq 'NaN';
- $_;
-}
-
-# multipication
-sub main'rmul { #(rat_num, rat_num) return rat_num
- local($xn,$xd) = split('/',&'rnorm($_[$[]));
- local($yn,$yd) = split('/',&'rnorm($_[$[+1]));
- &norm(&'bmul($xn,$yn),&'bmul($xd,$yd));
-}
-
-# division
-sub main'rdiv { #(rat_num, rat_num) return rat_num
- local($xn,$xd) = split('/',&'rnorm($_[$[]));
- local($yn,$yd) = split('/',&'rnorm($_[$[+1]));
- &norm(&'bmul($xn,$yd),&'bmul($xd,$yn));
-}
-
-# addition
-sub main'radd { #(rat_num, rat_num) return rat_num
- local($xn,$xd) = split('/',&'rnorm($_[$[]));
- local($yn,$yd) = split('/',&'rnorm($_[$[+1]));
- &norm(&'badd(&'bmul($xn,$yd),&'bmul($yn,$xd)),&'bmul($xd,$yd));
-}
-
-# subtraction
-sub main'rsub { #(rat_num, rat_num) return rat_num
- local($xn,$xd) = split('/',&'rnorm($_[$[]));
- local($yn,$yd) = split('/',&'rnorm($_[$[+1]));
- &norm(&'bsub(&'bmul($xn,$yd),&'bmul($yn,$xd)),&'bmul($xd,$yd));
-}
-
-# comparison
-sub main'rcmp { #(rat_num, rat_num) return cond_code
- local($xn,$xd) = split('/',&'rnorm($_[$[]));
- local($yn,$yd) = split('/',&'rnorm($_[$[+1]));
- &bigint'cmp(&'bmul($xn,$yd),&'bmul($yn,$xd));
-}
-
-# int and frac parts
-sub main'rmod { #(rat_num) return (rat_num,rat_num)
- local($xn,$xd) = split('/',&'rnorm(@_));
- local($i,$f) = &'bdiv($xn,$xd);
- if (wantarray) {
- ("$i/1", "$f/$xd");
- } else {
- "$i/1";
- }
-}
-
-# square root by Newtons method.
-# cycles specifies the number of iterations default: 5
-sub main'rsqrt { #(fnum_str[, cycles]) return fnum_str
- local($x, $scale) = (&'rnorm($_[$[]), $_[$[+1]);
- if ($x eq 'NaN') {
- 'NaN';
- } elsif ($x =~ /^-/) {
- 'NaN';
- } else {
- local($gscale, $guess) = (0, '+1/1');
- $scale = 5 if (!$scale);
- while ($gscale++ < $scale) {
- $guess = &'rmul(&'radd($guess,&'rdiv($x,$guess)),"+1/2");
- }
- "$guess"; # quotes necessary due to perl bug
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/blib.pm b/contrib/perl5/lib/blib.pm
deleted file mode 100644
index 0916f79..0000000
--- a/contrib/perl5/lib/blib.pm
+++ /dev/null
@@ -1,72 +0,0 @@
-package blib;
-
-=head1 NAME
-
-blib - Use MakeMaker's uninstalled version of a package
-
-=head1 SYNOPSIS
-
- perl -Mblib script [args...]
-
- perl -Mblib=dir script [args...]
-
-=head1 DESCRIPTION
-
-Looks for MakeMaker-like I<'blib'> directory structure starting in
-I<dir> (or current directory) and working back up to five levels of '..'.
-
-Intended for use on command line with B<-M> option as a way of testing
-arbitary scripts against an uninstalled version of a package.
-
-However it is possible to :
-
- use blib;
- or
- use blib '..';
-
-etc. if you really must.
-
-=head1 BUGS
-
-Pollutes global name space for development only task.
-
-=head1 AUTHOR
-
-Nick Ing-Simmons nik@tiuk.ti.com
-
-=cut
-
-use Cwd;
-
-use vars qw($VERSION);
-$VERSION = '1.00';
-
-sub import
-{
- my $package = shift;
- my $dir = getcwd;
- if ($^O eq 'VMS') { ($dir = VMS::Filespec::unixify($dir)) =~ s-/\z--; }
- if (@_)
- {
- $dir = shift;
- $dir =~ s/blib\z//;
- $dir =~ s,/+\z,,;
- $dir = '.' unless ($dir);
- die "$dir is not a directory\n" unless (-d $dir);
- }
- my $i = 5;
- while ($i--)
- {
- my $blib = "${dir}/blib";
- if (-d $blib && -d "$blib/arch" && -d "$blib/lib")
- {
- unshift(@INC,"$blib/arch","$blib/lib");
- warn "Using $blib\n";
- return;
- }
- $dir .= "/..";
- }
- die "Cannot find blib even in $dir\n";
-}
-
-1;
diff --git a/contrib/perl5/lib/bytes.pm b/contrib/perl5/lib/bytes.pm
deleted file mode 100644
index f2f7e01..0000000
--- a/contrib/perl5/lib/bytes.pm
+++ /dev/null
@@ -1,69 +0,0 @@
-package bytes;
-
-$bytes::hint_bits = 0x00000008;
-
-sub import {
- $^H |= $bytes::hint_bits;
-}
-
-sub unimport {
- $^H &= ~$bytes::hint_bits;
-}
-
-sub AUTOLOAD {
- require "bytes_heavy.pl";
- goto &$AUTOLOAD;
-}
-
-sub length ($);
-
-1;
-__END__
-
-=head1 NAME
-
-bytes - Perl pragma to force byte semantics rather than character semantics
-
-=head1 SYNOPSIS
-
- use bytes;
- no bytes;
-
-=head1 DESCRIPTION
-
-WARNING: The implementation of Unicode support in Perl is incomplete.
-See L<perlunicode> for the exact details.
-
-The C<use bytes> pragma disables character semantics for the rest of the
-lexical scope in which it appears. C<no bytes> can be used to reverse
-the effect of C<use bytes> within the current lexical scope.
-
-Perl normally assumes character semantics in the presence of character
-data (i.e. data that has come from a source that has been marked as
-being of a particular character encoding). When C<use bytes> is in
-effect, the encoding is temporarily ignored, and each string is treated
-as a series of bytes.
-
-As an example, when Perl sees C<$x = chr(400)>, it encodes the character
-in UTF8 and stores it in $x. Then it is marked as character data, so,
-for instance, C<length $x> returns C<1>. However, in the scope of the
-C<bytes> pragma, $x is treated as a series of bytes - the bytes that make
-up the UTF8 encoding - and C<length $x> returns C<2>:
-
- $x = chr(400);
- print "Length is ", length $x, "\n"; # "Length is 1"
- printf "Contents are %vd\n", $x; # "Contents are 400"
- {
- use bytes;
- print "Length is ", length $x, "\n"; # "Length is 2"
- printf "Contents are %vd\n", $x; # "Contents are 198.144"
- }
-
-For more on the implications and differences between character
-semantics and byte semantics, see L<perlunicode>.
-
-=head1 SEE ALSO
-
-L<perlunicode>, L<utf8>
-
-=cut
diff --git a/contrib/perl5/lib/bytes_heavy.pl b/contrib/perl5/lib/bytes_heavy.pl
deleted file mode 100644
index 47bdbf9..0000000
--- a/contrib/perl5/lib/bytes_heavy.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-package bytes;
-
-sub length ($) {
- BEGIN { bytes::import() }
- return CORE::length($_[0]);
-}
-
-1;
diff --git a/contrib/perl5/lib/cacheout.pl b/contrib/perl5/lib/cacheout.pl
deleted file mode 100644
index d2669a1..0000000
--- a/contrib/perl5/lib/cacheout.pl
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: FileCache
-
-# Open in their package.
-
-sub cacheout'open {
- open($_[0], $_[1]);
-}
-
-# Close as well
-
-sub cacheout'close {
- close($_[0]);
-}
-
-# But only this sub name is visible to them.
-
-sub cacheout {
- package cacheout;
-
- ($file) = @_;
- if (!$isopen{$file}) {
- if (++$numopen > $maxopen) {
- local(@lru) = sort {$isopen{$a} <=> $isopen{$b};} keys(%isopen);
- splice(@lru, $maxopen / 3);
- $numopen -= @lru;
- for (@lru) { &close($_); delete $isopen{$_}; }
- }
- &open($file, ($saw{$file}++ ? '>>' : '>') . $file)
- || die "Can't create $file: $!\n";
- }
- $isopen{$file} = ++$seq;
-}
-
-package cacheout;
-
-$seq = 0;
-$numopen = 0;
-
-if (open(PARAM,'/usr/include/sys/param.h')) {
- local($_, $.);
- while (<PARAM>) {
- $maxopen = $1 - 4 if /^\s*#\s*define\s+NOFILE\s+(\d+)/;
- }
- close PARAM;
-}
-$maxopen = 16 unless $maxopen;
-
-1;
diff --git a/contrib/perl5/lib/charnames.pm b/contrib/perl5/lib/charnames.pm
deleted file mode 100644
index 5f0c95f..0000000
--- a/contrib/perl5/lib/charnames.pm
+++ /dev/null
@@ -1,146 +0,0 @@
-package charnames;
-use bytes (); # for $bytes::hint_bits
-use warnings();
-$charnames::hint_bits = 0x20000;
-
-my $txt;
-
-# This is not optimized in any way yet
-sub charnames {
- $name = shift;
- $txt = do "unicode/Name.pl" unless $txt;
- my @off;
- if ($^H{charnames_full} and $txt =~ /\t\t$name$/m) {
- @off = ($-[0], $+[0]);
- }
- unless (@off) {
- if ($^H{charnames_short} and $name =~ /^(.*?):(.*)/s) {
- my ($script, $cname) = ($1,$2);
- my $case = ( $cname =~ /[[:upper:]]/ ? "CAPITAL" : "SMALL");
- if ($txt =~ m/\t\t\U$script\E (?:$case )?LETTER \U$cname$/m) {
- @off = ($-[0], $+[0]);
- }
- }
- }
- unless (@off) {
- my $case = ( $name =~ /[[:upper:]]/ ? "CAPITAL" : "SMALL");
- for ( @{$^H{charnames_scripts}} ) {
- (@off = ($-[0], $+[0])), last
- if $txt =~ m/\t\t$_ (?:$case )?LETTER \U$name$/m;
- }
- }
- die "Unknown charname '$name'" unless @off;
-
- my $hexlen = 4; # Unicode guarantees 4-, 5-, or 6-digit format
- $hexlen++ while
- $hexlen < 6 && substr($txt, $off[0] - $hexlen - 1, 1) =~ /[0-9a-f]/;
- my $ord = hex substr $txt, $off[0] - $hexlen, $hexlen;
- if ($^H & $bytes::hint_bits) { # "use bytes" in effect?
- use bytes;
- return chr $ord if $ord <= 255;
- my $hex = sprintf '%X=0%o', $ord, $ord;
- my $fname = substr $txt, $off[0] + 2, $off[1] - $off[0] - 2;
- die "Character 0x$hex with name '$fname' is above 0xFF";
- }
- return chr $ord;
-}
-
-sub import {
- shift;
- die "`use charnames' needs explicit imports list" unless @_;
- $^H |= $charnames::hint_bits;
- $^H{charnames} = \&charnames ;
- my %h;
- @h{@_} = (1) x @_;
- $^H{charnames_full} = delete $h{':full'};
- $^H{charnames_short} = delete $h{':short'};
- $^H{charnames_scripts} = [map uc, keys %h];
- if (warnings::enabled('utf8') && @{$^H{charnames_scripts}}) {
- $txt = do "unicode/Name.pl" unless $txt;
- for (@{$^H{charnames_scripts}}) {
- warnings::warn('utf8', "No such script: '$_'") unless
- $txt =~ m/\t\t$_ (?:CAPITAL |SMALL )?LETTER /;
- }
- }
-}
-
-
-1;
-__END__
-
-=head1 NAME
-
-charnames - define character names for C<\N{named}> string literal escape.
-
-=head1 SYNOPSIS
-
- use charnames ':full';
- print "\N{GREEK SMALL LETTER SIGMA} is called sigma.\n";
-
- use charnames ':short';
- print "\N{greek:Sigma} is an upper-case sigma.\n";
-
- use charnames qw(cyrillic greek);
- print "\N{sigma} is Greek sigma, and \N{be} is Cyrillic b.\n";
-
-=head1 DESCRIPTION
-
-Pragma C<use charnames> supports arguments C<:full>, C<:short> and
-script names. If C<:full> is present, for expansion of
-C<\N{CHARNAME}}> string C<CHARNAME> is first looked in the list of
-standard Unicode names of chars. If C<:short> is present, and
-C<CHARNAME> has the form C<SCRIPT:CNAME>, then C<CNAME> is looked up
-as a letter in script C<SCRIPT>. If pragma C<use charnames> is used
-with script name arguments, then for C<\N{CHARNAME}}> the name
-C<CHARNAME> is looked up as a letter in the given scripts (in the
-specified order).
-
-For lookup of C<CHARNAME> inside a given script C<SCRIPTNAME>
-this pragma looks for the names
-
- SCRIPTNAME CAPITAL LETTER CHARNAME
- SCRIPTNAME SMALL LETTER CHARNAME
- SCRIPTNAME LETTER CHARNAME
-
-in the table of standard Unicode names. If C<CHARNAME> is lowercase,
-then the C<CAPITAL> variant is ignored, otherwise the C<SMALL> variant is
-ignored.
-
-=head1 CUSTOM TRANSLATORS
-
-The mechanism of translation of C<\N{...}> escapes is general and not
-hardwired into F<charnames.pm>. A module can install custom
-translations (inside the scope which C<use>s the module) with the
-following magic incantation:
-
- use charnames (); # for $charnames::hint_bits
- sub import {
- shift;
- $^H |= $charnames::hint_bits;
- $^H{charnames} = \&translator;
- }
-
-Here translator() is a subroutine which takes C<CHARNAME> as an
-argument, and returns text to insert into the string instead of the
-C<\N{CHARNAME}> escape. Since the text to insert should be different
-in C<bytes> mode and out of it, the function should check the current
-state of C<bytes>-flag as in:
-
- use bytes (); # for $bytes::hint_bits
- sub translator {
- if ($^H & $bytes::hint_bits) {
- return bytes_translator(@_);
- }
- else {
- return utf8_translator(@_);
- }
- }
-
-=head1 BUGS
-
-Since evaluation of the translation function happens in a middle of
-compilation (of a string literal), the translation function should not
-do any C<eval>s or C<require>s. This restriction should be lifted in
-a future version of Perl.
-
-=cut
diff --git a/contrib/perl5/lib/chat2.pl b/contrib/perl5/lib/chat2.pl
deleted file mode 100644
index 504fa7e..0000000
--- a/contrib/perl5/lib/chat2.pl
+++ /dev/null
@@ -1,379 +0,0 @@
-# chat.pl: chat with a server
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Socket
-#
-# Based on: V2.01.alpha.7 91/06/16
-# Randal L. Schwartz (was <merlyn@stonehenge.com>)
-# multihome additions by A.Macpherson@bnr.co.uk
-# allow for /dev/pts based systems by Joe Doupnik <JRD@CC.USU.EDU>
-
-package chat;
-
-require 'sys/socket.ph';
-
-if( defined( &main'PF_INET ) ){
- $pf_inet = &main'PF_INET;
- $sock_stream = &main'SOCK_STREAM;
- local($name, $aliases, $proto) = getprotobyname( 'tcp' );
- $tcp_proto = $proto;
-}
-else {
- # XXX hardwired $PF_INET, $SOCK_STREAM, 'tcp'
- # but who the heck would change these anyway? (:-)
- $pf_inet = 2;
- $sock_stream = 1;
- $tcp_proto = 6;
-}
-
-
-$sockaddr = 'S n a4 x8';
-chop($thishost = `hostname`);
-
-# *S = symbol for current I/O, gets assigned *chatsymbol....
-$next = "chatsymbol000000"; # next one
-$nextpat = "^chatsymbol"; # patterns that match next++, ++, ++, ++
-
-
-## $handle = &chat'open_port("server.address",$port_number);
-## opens a named or numbered TCP server
-
-sub open_port { ## public
- local($server, $port) = @_;
-
- local($serveraddr,$serverproc);
-
- # We may be multi-homed, start with 0, fixup once connexion is made
- $thisaddr = "\0\0\0\0" ;
- $thisproc = pack($sockaddr, 2, 0, $thisaddr);
-
- *S = ++$next;
- if ($server =~ /^(\d+)+\.(\d+)\.(\d+)\.(\d+)$/) {
- $serveraddr = pack('C4', $1, $2, $3, $4);
- } else {
- local(@x) = gethostbyname($server);
- return undef unless @x;
- $serveraddr = $x[4];
- }
- $serverproc = pack($sockaddr, 2, $port, $serveraddr);
- unless (socket(S, $pf_inet, $sock_stream, $tcp_proto)) {
- ($!) = ($!, close(S)); # close S while saving $!
- return undef;
- }
- unless (bind(S, $thisproc)) {
- ($!) = ($!, close(S)); # close S while saving $!
- return undef;
- }
- unless (connect(S, $serverproc)) {
- ($!) = ($!, close(S)); # close S while saving $!
- return undef;
- }
-# We opened with the local address set to ANY, at this stage we know
-# which interface we are using. This is critical if our machine is
-# multi-homed, with IP forwarding off, so fix-up.
- local($fam,$lport);
- ($fam,$lport,$thisaddr) = unpack($sockaddr, getsockname(S));
- $thisproc = pack($sockaddr, 2, 0, $thisaddr);
-# end of post-connect fixup
- select((select(S), $| = 1)[0]);
- $next; # return symbol for switcharound
-}
-
-## ($host, $port, $handle) = &chat'open_listen([$port_number]);
-## opens a TCP port on the current machine, ready to be listened to
-## if $port_number is absent or zero, pick a default port number
-## process must be uid 0 to listen to a low port number
-
-sub open_listen { ## public
-
- *S = ++$next;
- local($thisport) = shift || 0;
- local($thisproc_local) = pack($sockaddr, 2, $thisport, $thisaddr);
- local(*NS) = "__" . time;
- unless (socket(NS, $pf_inet, $sock_stream, $tcp_proto)) {
- ($!) = ($!, close(NS));
- return undef;
- }
- unless (bind(NS, $thisproc_local)) {
- ($!) = ($!, close(NS));
- return undef;
- }
- unless (listen(NS, 1)) {
- ($!) = ($!, close(NS));
- return undef;
- }
- select((select(NS), $| = 1)[0]);
- local($family, $port, @myaddr) =
- unpack("S n C C C C x8", getsockname(NS));
- $S{"needs_accept"} = *NS; # so expect will open it
- (@myaddr, $port, $next); # returning this
-}
-
-## $handle = &chat'open_proc("command","arg1","arg2",...);
-## opens a /bin/sh on a pseudo-tty
-
-sub open_proc { ## public
- local(@cmd) = @_;
-
- *S = ++$next;
- local(*TTY) = "__TTY" . time;
- local($pty,$tty) = &_getpty(S,TTY);
- die "Cannot find a new pty" unless defined $pty;
- $pid = fork;
- die "Cannot fork: $!" unless defined $pid;
- unless ($pid) {
- close STDIN; close STDOUT; close STDERR;
- setpgrp(0,$$);
- if (open(DEVTTY, "/dev/tty")) {
- ioctl(DEVTTY,0x20007471,0); # XXX s/b &TIOCNOTTY
- close DEVTTY;
- }
- open(STDIN,"<&TTY");
- open(STDOUT,">&TTY");
- open(STDERR,">&STDOUT");
- die "Oops" unless fileno(STDERR) == 2; # sanity
- close(S);
- exec @cmd;
- die "Cannot exec @cmd: $!";
- }
- close(TTY);
- $next; # return symbol for switcharound
-}
-
-# $S is the read-ahead buffer
-
-## $return = &chat'expect([$handle,] $timeout_time,
-## $pat1, $body1, $pat2, $body2, ... )
-## $handle is from previous &chat'open_*().
-## $timeout_time is the time (either relative to the current time, or
-## absolute, ala time(2)) at which a timeout event occurs.
-## $pat1, $pat2, and so on are regexs which are matched against the input
-## stream. If a match is found, the entire matched string is consumed,
-## and the corresponding body eval string is evaled.
-##
-## Each pat is a regular-expression (probably enclosed in single-quotes
-## in the invocation). ^ and $ will work, respecting the current value of $*.
-## If pat is 'TIMEOUT', the body is executed if the timeout is exceeded.
-## If pat is 'EOF', the body is executed if the process exits before
-## the other patterns are seen.
-##
-## Pats are scanned in the order given, so later pats can contain
-## general defaults that won't be examined unless the earlier pats
-## have failed.
-##
-## The result of eval'ing body is returned as the result of
-## the invocation. Recursive invocations are not thought
-## through, and may work only accidentally. :-)
-##
-## undef is returned if either a timeout or an eof occurs and no
-## corresponding body has been defined.
-## I/O errors of any sort are treated as eof.
-
-$nextsubname = "expectloop000000"; # used for subroutines
-
-sub expect { ## public
- if ($_[0] =~ /$nextpat/) {
- *S = shift;
- }
- local($endtime) = shift;
-
- local($timeout,$eof) = (1,1);
- local($caller) = caller;
- local($rmask, $nfound, $timeleft, $thisbuf);
- local($cases, $pattern, $action, $subname);
- $endtime += time if $endtime < 600_000_000;
-
- if (defined $S{"needs_accept"}) { # is it a listen socket?
- local(*NS) = $S{"needs_accept"};
- delete $S{"needs_accept"};
- $S{"needs_close"} = *NS;
- unless(accept(S,NS)) {
- ($!) = ($!, close(S), close(NS));
- return undef;
- }
- select((select(S), $| = 1)[0]);
- }
-
- # now see whether we need to create a new sub:
-
- unless ($subname = $expect_subname{$caller,@_}) {
- # nope. make a new one:
- $expect_subname{$caller,@_} = $subname = $nextsubname++;
-
- $cases .= <<"EDQ"; # header is funny to make everything elsif's
-sub $subname {
- LOOP: {
- if (0) { ; }
-EDQ
- while (@_) {
- ($pattern,$action) = splice(@_,0,2);
- if ($pattern =~ /^eof$/i) {
- $cases .= <<"EDQ";
- elsif (\$eof) {
- package $caller;
- $action;
- }
-EDQ
- $eof = 0;
- } elsif ($pattern =~ /^timeout$/i) {
- $cases .= <<"EDQ";
- elsif (\$timeout) {
- package $caller;
- $action;
- }
-EDQ
- $timeout = 0;
- } else {
- $pattern =~ s#/#\\/#g;
- $cases .= <<"EDQ";
- elsif (\$S =~ /$pattern/) {
- \$S = \$';
- package $caller;
- $action;
- }
-EDQ
- }
- }
- $cases .= <<"EDQ" if $eof;
- elsif (\$eof) {
- undef;
- }
-EDQ
- $cases .= <<"EDQ" if $timeout;
- elsif (\$timeout) {
- undef;
- }
-EDQ
- $cases .= <<'ESQ';
- else {
- $rmask = "";
- vec($rmask,fileno(S),1) = 1;
- ($nfound, $rmask) =
- select($rmask, undef, undef, $endtime - time);
- if ($nfound) {
- $nread = sysread(S, $thisbuf, 1024);
- if ($nread > 0) {
- $S .= $thisbuf;
- } else {
- $eof++, redo LOOP; # any error is also eof
- }
- } else {
- $timeout++, redo LOOP; # timeout
- }
- redo LOOP;
- }
- }
-}
-ESQ
- eval $cases; die "$cases:\n$@" if $@;
- }
- $eof = $timeout = 0;
- do $subname();
-}
-
-## &chat'print([$handle,] @data)
-## $handle is from previous &chat'open().
-## like print $handle @data
-
-sub print { ## public
- if ($_[0] =~ /$nextpat/) {
- *S = shift;
- }
-
- local $out = join $, , @_;
- syswrite(S, $out, length $out);
- if( $chat'debug ){
- print STDERR "printed:";
- print STDERR @_;
- }
-}
-
-## &chat'close([$handle,])
-## $handle is from previous &chat'open().
-## like close $handle
-
-sub close { ## public
- if ($_[0] =~ /$nextpat/) {
- *S = shift;
- }
- close(S);
- if (defined $S{"needs_close"}) { # is it a listen socket?
- local(*NS) = $S{"needs_close"};
- delete $S{"needs_close"};
- close(NS);
- }
-}
-
-## @ready_handles = &chat'select($timeout, @handles)
-## select()'s the handles with a timeout value of $timeout seconds.
-## Returns an array of handles that are ready for I/O.
-## Both user handles and chat handles are supported (but beware of
-## stdio's buffering for user handles).
-
-sub select { ## public
- local($timeout) = shift;
- local(@handles) = @_;
- local(%handlename) = ();
- local(%ready) = ();
- local($caller) = caller;
- local($rmask) = "";
- for (@handles) {
- if (/$nextpat/o) { # one of ours... see if ready
- local(*SYM) = $_;
- if (length($SYM)) {
- $timeout = 0; # we have a winner
- $ready{$_}++;
- }
- $handlename{fileno($_)} = $_;
- } else {
- $handlename{fileno(/'/ ? $_ : "$caller\'$_")} = $_;
- }
- }
- for (sort keys %handlename) {
- vec($rmask, $_, 1) = 1;
- }
- select($rmask, undef, undef, $timeout);
- for (sort keys %handlename) {
- $ready{$handlename{$_}}++ if vec($rmask,$_,1);
- }
- sort keys %ready;
-}
-
-# ($pty,$tty) = $chat'_getpty(PTY,TTY):
-# internal procedure to get the next available pty.
-# opens pty on handle PTY, and matching tty on handle TTY.
-# returns undef if can't find a pty.
-# Modify "/dev/pty" to "/dev/pts" for Dell Unix v2.2 (aka SVR4.04). Joe Doupnik.
-
-sub _getpty { ## private
- local($_PTY,$_TTY) = @_;
- $_PTY =~ s/^([^']+)$/(caller)[$[]."'".$1/e;
- $_TTY =~ s/^([^']+)$/(caller)[$[]."'".$1/e;
- local($pty, $tty, $kind);
- if( -e "/dev/pts000" ){ ## mods by Joe Doupnik Dec 1992
- $kind = "pts"; ## SVR4 Streams
- } else {
- $kind = "pty"; ## BSD Clist stuff
- }
- for $bank (112..127) {
- next unless -e sprintf("/dev/$kind%c0", $bank);
- for $unit (48..57) {
- $pty = sprintf("/dev/$kind%c%c", $bank, $unit);
- open($_PTY,"+>$pty") || next;
- select((select($_PTY), $| = 1)[0]);
- ($tty = $pty) =~ s/pty/tty/;
- open($_TTY,"+>$tty") || next;
- select((select($_TTY), $| = 1)[0]);
- system "stty nl>$tty";
- return ($pty,$tty);
- }
- }
- undef;
-}
-
-1;
diff --git a/contrib/perl5/lib/complete.pl b/contrib/perl5/lib/complete.pl
deleted file mode 100644
index 925ce86..0000000
--- a/contrib/perl5/lib/complete.pl
+++ /dev/null
@@ -1,120 +0,0 @@
-;#
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Term::Complete
-#
-;# @(#)complete.pl,v1.1 (me@anywhere.EBay.Sun.COM) 09/23/91
-;#
-;# Author: Wayne Thompson
-;#
-;# Description:
-;# This routine provides word completion.
-;# (TAB) attempts word completion.
-;# (^D) prints completion list.
-;# (These may be changed by setting $Complete'complete, etc.)
-;#
-;# Diagnostics:
-;# Bell when word completion fails.
-;#
-;# Dependencies:
-;# The tty driver is put into raw mode.
-;#
-;# Bugs:
-;#
-;# Usage:
-;# $input = &Complete('prompt_string', *completion_list);
-;# or
-;# $input = &Complete('prompt_string', @completion_list);
-;#
-
-CONFIG: {
- package Complete;
-
- $complete = "\004";
- $kill = "\025";
- $erase1 = "\177";
- $erase2 = "\010";
-}
-
-sub Complete {
- package Complete;
-
- local($prompt, @cmp_list, $return, @match, $l, $test, $cmp, $r);
- if ($_[1] =~ /^StB\0/) {
- ($prompt, *_) = @_;
- }
- else {
- $prompt = shift(@_);
- }
- @cmp_lst = sort(@_);
-
- system('stty raw -echo');
- LOOP: {
- print($prompt, $return);
- while (($_ = getc(STDIN)) ne "\r") {
- CASE: {
- # (TAB) attempt completion
- $_ eq "\t" && do {
- @match = grep(/^$return/, @cmp_lst);
- $l = length($test = shift(@match));
- unless ($#match < 0) {
- foreach $cmp (@match) {
- until (substr($cmp, 0, $l) eq substr($test, 0, $l)) {
- $l--;
- }
- }
- print("\a");
- }
- print($test = substr($test, $r, $l - $r));
- $r = length($return .= $test);
- last CASE;
- };
-
- # (^D) completion list
- $_ eq $complete && do {
- print(join("\r\n", '', grep(/^$return/, @cmp_lst)), "\r\n");
- redo LOOP;
- };
-
- # (^U) kill
- $_ eq $kill && do {
- if ($r) {
- undef $r;
- undef $return;
- print("\r\n");
- redo LOOP;
- }
- last CASE;
- };
-
- # (DEL) || (BS) erase
- ($_ eq $erase1 || $_ eq $erase2) && do {
- if($r) {
- print("\b \b");
- chop($return);
- $r--;
- }
- last CASE;
- };
-
- # printable char
- ord >= 32 && do {
- $return .= $_;
- $r++;
- print;
- last CASE;
- };
- }
- }
- }
- system('stty -raw echo');
- print("\n");
- $return;
-}
-
-1;
diff --git a/contrib/perl5/lib/constant.pm b/contrib/perl5/lib/constant.pm
deleted file mode 100644
index 72ad793..0000000
--- a/contrib/perl5/lib/constant.pm
+++ /dev/null
@@ -1,278 +0,0 @@
-package constant;
-
-use strict;
-use 5.005_64;
-use warnings::register;
-
-our($VERSION, %declared);
-$VERSION = '1.02';
-
-#=======================================================================
-
-# Some names are evil choices.
-my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD };
-
-my %forced_into_main = map +($_, 1),
- qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG };
-
-my %forbidden = (%keywords, %forced_into_main);
-
-#=======================================================================
-# import() - import symbols into user's namespace
-#
-# What we actually do is define a function in the caller's namespace
-# which returns the value. The function we create will normally
-# be inlined as a constant, thereby avoiding further sub calling
-# overhead.
-#=======================================================================
-sub import {
- my $class = shift;
- return unless @_; # Ignore 'use constant;'
- my $name = shift;
- unless (defined $name) {
- require Carp;
- Carp::croak("Can't use undef as constant name");
- }
- my $pkg = caller;
-
- # Normal constant name
- if ($name =~ /^_?[^\W_0-9]\w*\z/ and !$forbidden{$name}) {
- # Everything is okay
-
- # Name forced into main, but we're not in main. Fatal.
- } elsif ($forced_into_main{$name} and $pkg ne 'main') {
- require Carp;
- Carp::croak("Constant name '$name' is forced into main::");
-
- # Starts with double underscore. Fatal.
- } elsif ($name =~ /^__/) {
- require Carp;
- Carp::croak("Constant name '$name' begins with '__'");
-
- # Maybe the name is tolerable
- } elsif ($name =~ /^[A-Za-z_]\w*\z/) {
- # Then we'll warn only if you've asked for warnings
- if (warnings::enabled()) {
- if ($keywords{$name}) {
- warnings::warn("Constant name '$name' is a Perl keyword");
- } elsif ($forced_into_main{$name}) {
- warnings::warn("Constant name '$name' is " .
- "forced into package main::");
- } else {
- # Catch-all - what did I miss? If you get this error,
- # please let me know what your constant's name was.
- # Write to <rootbeer@redcat.com>. Thanks!
- warnings::warn("Constant name '$name' has unknown problems");
- }
- }
-
- # Looks like a boolean
- # use constant FRED == fred;
- } elsif ($name =~ /^[01]?\z/) {
- require Carp;
- if (@_) {
- Carp::croak("Constant name '$name' is invalid");
- } else {
- Carp::croak("Constant name looks like boolean value");
- }
-
- } else {
- # Must have bad characters
- require Carp;
- Carp::croak("Constant name '$name' has invalid characters");
- }
-
- {
- no strict 'refs';
- my $full_name = "${pkg}::$name";
- $declared{$full_name}++;
- if (@_ == 1) {
- my $scalar = $_[0];
- *$full_name = sub () { $scalar };
- } elsif (@_) {
- my @list = @_;
- *$full_name = sub () { @list };
- } else {
- *$full_name = sub () { };
- }
- }
-
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-constant - Perl pragma to declare constants
-
-=head1 SYNOPSIS
-
- use constant BUFFER_SIZE => 4096;
- use constant ONE_YEAR => 365.2425 * 24 * 60 * 60;
- use constant PI => 4 * atan2 1, 1;
- use constant DEBUGGING => 0;
- use constant ORACLE => 'oracle@cs.indiana.edu';
- use constant USERNAME => scalar getpwuid($<);
- use constant USERINFO => getpwuid($<);
-
- sub deg2rad { PI * $_[0] / 180 }
-
- print "This line does nothing" unless DEBUGGING;
-
- # references can be constants
- use constant CHASH => { foo => 42 };
- use constant CARRAY => [ 1,2,3,4 ];
- use constant CPSEUDOHASH => [ { foo => 1}, 42 ];
- use constant CCODE => sub { "bite $_[0]\n" };
-
- print CHASH->{foo};
- print CARRAY->[$i];
- print CPSEUDOHASH->{foo};
- print CCODE->("me");
- print CHASH->[10]; # compile-time error
-
-=head1 DESCRIPTION
-
-This will declare a symbol to be a constant with the given scalar
-or list value.
-
-When you declare a constant such as C<PI> using the method shown
-above, each machine your script runs upon can have as many digits
-of accuracy as it can use. Also, your program will be easier to
-read, more likely to be maintained (and maintained correctly), and
-far less likely to send a space probe to the wrong planet because
-nobody noticed the one equation in which you wrote C<3.14195>.
-
-=head1 NOTES
-
-The value or values are evaluated in a list context. You may override
-this with C<scalar> as shown above.
-
-These constants do not directly interpolate into double-quotish
-strings, although you may do so indirectly. (See L<perlref> for
-details about how this works.)
-
- print "The value of PI is @{[ PI ]}.\n";
-
-List constants are returned as lists, not as arrays.
-
- $homedir = USERINFO[7]; # WRONG
- $homedir = (USERINFO)[7]; # Right
-
-The use of all caps for constant names is merely a convention,
-although it is recommended in order to make constants stand out
-and to help avoid collisions with other barewords, keywords, and
-subroutine names. Constant names must begin with a letter or
-underscore. Names beginning with a double underscore are reserved. Some
-poor choices for names will generate warnings, if warnings are enabled at
-compile time.
-
-Constant symbols are package scoped (rather than block scoped, as
-C<use strict> is). That is, you can refer to a constant from package
-Other as C<Other::CONST>.
-
-As with all C<use> directives, defining a constant happens at
-compile time. Thus, it's probably not correct to put a constant
-declaration inside of a conditional statement (like C<if ($foo)
-{ use constant ... }>).
-
-Omitting the value for a symbol gives it the value of C<undef> in
-a scalar context or the empty list, C<()>, in a list context. This
-isn't so nice as it may sound, though, because in this case you
-must either quote the symbol name, or use a big arrow, (C<=E<gt>>),
-with nothing to point to. It is probably best to declare these
-explicitly.
-
- use constant UNICORNS => ();
- use constant LOGFILE => undef;
-
-The result from evaluating a list constant in a scalar context is
-not documented, and is B<not> guaranteed to be any particular value
-in the future. In particular, you should not rely upon it being
-the number of elements in the list, especially since it is not
-B<necessarily> that value in the current implementation.
-
-Magical values, tied values, and references can be made into
-constants at compile time, allowing for way cool stuff like this.
-(These error numbers aren't totally portable, alas.)
-
- use constant E2BIG => ($! = 7);
- print E2BIG, "\n"; # something like "Arg list too long"
- print 0+E2BIG, "\n"; # "7"
-
-Dereferencing constant references incorrectly (such as using an array
-subscript on a constant hash reference, or vice versa) will be trapped at
-compile time.
-
-In the rare case in which you need to discover at run time whether a
-particular constant has been declared via this module, you may use
-this function to examine the hash C<%constant::declared>. If the given
-constant name does not include a package name, the current package is
-used.
-
- sub declared ($) {
- use constant 1.01; # don't omit this!
- my $name = shift;
- $name =~ s/^::/main::/;
- my $pkg = caller;
- my $full_name = $name =~ /::/ ? $name : "${pkg}::$name";
- $constant::declared{$full_name};
- }
-
-=head1 TECHNICAL NOTE
-
-In the current implementation, scalar constants are actually
-inlinable subroutines. As of version 5.004 of Perl, the appropriate
-scalar constant is inserted directly in place of some subroutine
-calls, thereby saving the overhead of a subroutine call. See
-L<perlsub/"Constant Functions"> for details about how and when this
-happens.
-
-=head1 BUGS
-
-In the current version of Perl, list constants are not inlined
-and some symbols may be redefined without generating a warning.
-
-It is not possible to have a subroutine or keyword with the same
-name as a constant in the same package. This is probably a Good Thing.
-
-A constant with a name in the list C<STDIN STDOUT STDERR ARGV ARGVOUT
-ENV INC SIG> is not allowed anywhere but in package C<main::>, for
-technical reasons.
-
-Even though a reference may be declared as a constant, the reference may
-point to data which may be changed, as this code shows.
-
- use constant CARRAY => [ 1,2,3,4 ];
- print CARRAY->[1];
- CARRAY->[1] = " be changed";
- print CARRAY->[1];
-
-Unlike constants in some languages, these cannot be overridden
-on the command line or via environment variables.
-
-You can get into trouble if you use constants in a context which
-automatically quotes barewords (as is true for any subroutine call).
-For example, you can't say C<$hash{CONSTANT}> because C<CONSTANT> will
-be interpreted as a string. Use C<$hash{CONSTANT()}> or
-C<$hash{+CONSTANT}> to prevent the bareword quoting mechanism from
-kicking in. Similarly, since the C<=E<gt>> operator quotes a bareword
-immediately to its left, you have to say C<CONSTANT() =E<gt> 'value'>
-(or simply use a comma in place of the big arrow) instead of
-C<CONSTANT =E<gt> 'value'>.
-
-=head1 AUTHOR
-
-Tom Phoenix, E<lt>F<rootbeer@redcat.com>E<gt>, with help from
-many other folks.
-
-=head1 COPYRIGHT
-
-Copyright (C) 1997, 1999 Tom Phoenix
-
-This module is free software; you can redistribute it or modify it
-under the same terms as Perl itself.
-
-=cut
diff --git a/contrib/perl5/lib/ctime.pl b/contrib/perl5/lib/ctime.pl
deleted file mode 100644
index 6a3f295..0000000
--- a/contrib/perl5/lib/ctime.pl
+++ /dev/null
@@ -1,59 +0,0 @@
-;# ctime.pl is a simple Perl emulation for the well known ctime(3C) function.
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: the POSIX ctime function
-;#
-;# Waldemar Kebsch, Federal Republic of Germany, November 1988
-;# kebsch.pad@nixpbe.UUCP
-;# Modified March 1990, Feb 1991 to properly handle timezones
-;# $RCSfile: ctime.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:23:47 $
-;# Marion Hakanson (hakanson@cse.ogi.edu)
-;# Oregon Graduate Institute of Science and Technology
-;#
-;# usage:
-;#
-;# #include <ctime.pl> # see the -P and -I option in perl.man
-;# $Date = &ctime(time);
-
-CONFIG: {
- package ctime;
-
- @DoW = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
- @MoY = ('Jan','Feb','Mar','Apr','May','Jun',
- 'Jul','Aug','Sep','Oct','Nov','Dec');
-}
-
-sub ctime {
- package ctime;
-
- local($time) = @_;
- local($[) = 0;
- local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
-
- # Determine what time zone is in effect.
- # Use GMT if TZ is defined as null, local time if TZ undefined.
- # There's no portable way to find the system default timezone.
-
- $TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : '';
- ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
- ($TZ eq 'GMT') ? gmtime($time) : localtime($time);
-
- # Hack to deal with 'PST8PDT' format of TZ
- # Note that this can't deal with all the esoteric forms, but it
- # does recognize the most common: [:]STDoff[DST[off][,rule]]
-
- if($TZ=~/^([^:\d+\-,]{3,})([+-]?\d{1,2}(:\d{1,2}){0,2})([^\d+\-,]{3,})?/){
- $TZ = $isdst ? $4 : $1;
- }
- $TZ .= ' ' unless $TZ eq '';
-
- $year += 1900;
- sprintf("%s %s %2d %2d:%02d:%02d %s%4d\n",
- $DoW[$wday], $MoY[$mon], $mday, $hour, $min, $sec, $TZ, $year);
-}
-1;
diff --git a/contrib/perl5/lib/diagnostics.pm b/contrib/perl5/lib/diagnostics.pm
deleted file mode 100755
index 884ea3c..0000000
--- a/contrib/perl5/lib/diagnostics.pm
+++ /dev/null
@@ -1,559 +0,0 @@
-package diagnostics;
-
-=head1 NAME
-
-diagnostics - Perl compiler pragma to force verbose warning diagnostics
-
-splain - standalone program to do the same thing
-
-=head1 SYNOPSIS
-
-As a pragma:
-
- use diagnostics;
- use diagnostics -verbose;
-
- enable diagnostics;
- disable diagnostics;
-
-Aa a program:
-
- perl program 2>diag.out
- splain [-v] [-p] diag.out
-
-
-=head1 DESCRIPTION
-
-=head2 The C<diagnostics> Pragma
-
-This module extends the terse diagnostics normally emitted by both the
-perl compiler and the perl interpreter, augmenting them with the more
-explicative and endearing descriptions found in L<perldiag>. Like the
-other pragmata, it affects the compilation phase of your program rather
-than merely the execution phase.
-
-To use in your program as a pragma, merely invoke
-
- use diagnostics;
-
-at the start (or near the start) of your program. (Note
-that this I<does> enable perl's B<-w> flag.) Your whole
-compilation will then be subject(ed :-) to the enhanced diagnostics.
-These still go out B<STDERR>.
-
-Due to the interaction between runtime and compiletime issues,
-and because it's probably not a very good idea anyway,
-you may not use C<no diagnostics> to turn them off at compiletime.
-However, you may control their behaviour at runtime using the
-disable() and enable() methods to turn them off and on respectively.
-
-The B<-verbose> flag first prints out the L<perldiag> introduction before
-any other diagnostics. The $diagnostics::PRETTY variable can generate nicer
-escape sequences for pagers.
-
-Warnings dispatched from perl itself (or more accurately, those that match
-descriptions found in L<perldiag>) are only displayed once (no duplicate
-descriptions). User code generated warnings ala warn() are unaffected,
-allowing duplicate user messages to be displayed.
-
-=head2 The I<splain> Program
-
-While apparently a whole nuther program, I<splain> is actually nothing
-more than a link to the (executable) F<diagnostics.pm> module, as well as
-a link to the F<diagnostics.pod> documentation. The B<-v> flag is like
-the C<use diagnostics -verbose> directive.
-The B<-p> flag is like the
-$diagnostics::PRETTY variable. Since you're post-processing with
-I<splain>, there's no sense in being able to enable() or disable() processing.
-
-Output from I<splain> is directed to B<STDOUT>, unlike the pragma.
-
-=head1 EXAMPLES
-
-The following file is certain to trigger a few errors at both
-runtime and compiletime:
-
- use diagnostics;
- print NOWHERE "nothing\n";
- print STDERR "\n\tThis message should be unadorned.\n";
- warn "\tThis is a user warning";
- print "\nDIAGNOSTIC TESTER: Please enter a <CR> here: ";
- my $a, $b = scalar <STDIN>;
- print "\n";
- print $x/$y;
-
-If you prefer to run your program first and look at its problem
-afterwards, do this:
-
- perl -w test.pl 2>test.out
- ./splain < test.out
-
-Note that this is not in general possible in shells of more dubious heritage,
-as the theoretical
-
- (perl -w test.pl >/dev/tty) >& test.out
- ./splain < test.out
-
-Because you just moved the existing B<stdout> to somewhere else.
-
-If you don't want to modify your source code, but still have on-the-fly
-warnings, do this:
-
- exec 3>&1; perl -w test.pl 2>&1 1>&3 3>&- | splain 1>&2 3>&-
-
-Nifty, eh?
-
-If you want to control warnings on the fly, do something like this.
-Make sure you do the C<use> first, or you won't be able to get
-at the enable() or disable() methods.
-
- use diagnostics; # checks entire compilation phase
- print "\ntime for 1st bogus diags: SQUAWKINGS\n";
- print BOGUS1 'nada';
- print "done with 1st bogus\n";
-
- disable diagnostics; # only turns off runtime warnings
- print "\ntime for 2nd bogus: (squelched)\n";
- print BOGUS2 'nada';
- print "done with 2nd bogus\n";
-
- enable diagnostics; # turns back on runtime warnings
- print "\ntime for 3rd bogus: SQUAWKINGS\n";
- print BOGUS3 'nada';
- print "done with 3rd bogus\n";
-
- disable diagnostics;
- print "\ntime for 4th bogus: (squelched)\n";
- print BOGUS4 'nada';
- print "done with 4th bogus\n";
-
-=head1 INTERNALS
-
-Diagnostic messages derive from the F<perldiag.pod> file when available at
-runtime. Otherwise, they may be embedded in the file itself when the
-splain package is built. See the F<Makefile> for details.
-
-If an extant $SIG{__WARN__} handler is discovered, it will continue
-to be honored, but only after the diagnostics::splainthis() function
-(the module's $SIG{__WARN__} interceptor) has had its way with your
-warnings.
-
-There is a $diagnostics::DEBUG variable you may set if you're desperately
-curious what sorts of things are being intercepted.
-
- BEGIN { $diagnostics::DEBUG = 1 }
-
-
-=head1 BUGS
-
-Not being able to say "no diagnostics" is annoying, but may not be
-insurmountable.
-
-The C<-pretty> directive is called too late to affect matters.
-You have to do this instead, and I<before> you load the module.
-
- BEGIN { $diagnostics::PRETTY = 1 }
-
-I could start up faster by delaying compilation until it should be
-needed, but this gets a "panic: top_level" when using the pragma form
-in Perl 5.001e.
-
-While it's true that this documentation is somewhat subserious, if you use
-a program named I<splain>, you should expect a bit of whimsy.
-
-=head1 AUTHOR
-
-Tom Christiansen <F<tchrist@mox.perl.com>>, 25 June 1995.
-
-=cut
-
-use strict;
-use 5.005_64;
-use Carp;
-
-our $VERSION = v1.0;
-our $DEBUG;
-our $VERBOSE;
-our $PRETTY;
-
-use Config;
-my($privlib, $archlib) = @Config{qw(privlibexp archlibexp)};
-if ($^O eq 'VMS') {
- require VMS::Filespec;
- $privlib = VMS::Filespec::unixify($privlib);
- $archlib = VMS::Filespec::unixify($archlib);
-}
-my @trypod = (
- "$archlib/pod/perldiag.pod",
- "$privlib/pod/perldiag-$Config{version}.pod",
- "$privlib/pod/perldiag.pod",
- "$archlib/pods/perldiag.pod",
- "$privlib/pods/perldiag-$Config{version}.pod",
- "$privlib/pods/perldiag.pod",
- );
-# handy for development testing of new warnings etc
-unshift @trypod, "./pod/perldiag.pod" if -e "pod/perldiag.pod";
-(my $PODFILE) = ((grep { -e } @trypod), $trypod[$#trypod])[0];
-
-$DEBUG ||= 0;
-my $WHOAMI = ref bless []; # nobody's business, prolly not even mine
-
-local $| = 1;
-local $_;
-
-my $standalone;
-my(%HTML_2_Troff, %HTML_2_Latin_1, %HTML_2_ASCII_7);
-
-CONFIG: {
- our $opt_p = our $opt_d = our $opt_v = our $opt_f = '';
-
- unless (caller) {
- $standalone++;
- require Getopt::Std;
- Getopt::Std::getopts('pdvf:')
- or die "Usage: $0 [-v] [-p] [-f splainpod]";
- $PODFILE = $opt_f if $opt_f;
- $DEBUG = 2 if $opt_d;
- $VERBOSE = $opt_v;
- $PRETTY = $opt_p;
- }
-
- if (open(POD_DIAG, $PODFILE)) {
- warn "Happy happy podfile from real $PODFILE\n" if $DEBUG;
- last CONFIG;
- }
-
- if (caller) {
- INCPATH: {
- for my $file ( (map { "$_/$WHOAMI.pm" } @INC), $0) {
- warn "Checking $file\n" if $DEBUG;
- if (open(POD_DIAG, $file)) {
- while (<POD_DIAG>) {
- next unless
- /^__END__\s*# wish diag dbase were more accessible/;
- print STDERR "podfile is $file\n" if $DEBUG;
- last INCPATH;
- }
- }
- }
- }
- } else {
- print STDERR "podfile is <DATA>\n" if $DEBUG;
- *POD_DIAG = *main::DATA;
- }
-}
-if (eof(POD_DIAG)) {
- die "couldn't find diagnostic data in $PODFILE @INC $0";
-}
-
-
-%HTML_2_Troff = (
- 'amp' => '&', # ampersand
- 'lt' => '<', # left chevron, less-than
- 'gt' => '>', # right chevron, greater-than
- 'quot' => '"', # double quote
-
- "Aacute" => "A\\*'", # capital A, acute accent
- # etc
-
-);
-
-%HTML_2_Latin_1 = (
- 'amp' => '&', # ampersand
- 'lt' => '<', # left chevron, less-than
- 'gt' => '>', # right chevron, greater-than
- 'quot' => '"', # double quote
-
- "Aacute" => "\xC1" # capital A, acute accent
-
- # etc
-);
-
-%HTML_2_ASCII_7 = (
- 'amp' => '&', # ampersand
- 'lt' => '<', # left chevron, less-than
- 'gt' => '>', # right chevron, greater-than
- 'quot' => '"', # double quote
-
- "Aacute" => "A" # capital A, acute accent
- # etc
-);
-
-our %HTML_Escapes;
-*HTML_Escapes = do {
- if ($standalone) {
- $PRETTY ? \%HTML_2_Latin_1 : \%HTML_2_ASCII_7;
- } else {
- \%HTML_2_Latin_1;
- }
-};
-
-*THITHER = $standalone ? *STDOUT : *STDERR;
-
-my $transmo = <<EOFUNC;
-sub transmo {
- #local \$^W = 0; # recursive warnings we do NOT need!
- study;
-EOFUNC
-
-my %msg;
-{
- print STDERR "FINISHING COMPILATION for $_\n" if $DEBUG;
- local $/ = '';
- local $_;
- my $header;
- my $for_item;
- while (<POD_DIAG>) {
-
- unescape();
- if ($PRETTY) {
- sub noop { return $_[0] } # spensive for a noop
- sub bold { my $str =$_[0]; $str =~ s/(.)/$1\b$1/g; return $str; }
- sub italic { my $str = $_[0]; $str =~ s/(.)/_\b$1/g; return $str; }
- s/[BC]<(.*?)>/bold($1)/ges;
- s/[LIF]<(.*?)>/italic($1)/ges;
- } else {
- s/[BC]<(.*?)>/$1/gs;
- s/[LIF]<(.*?)>/$1/gs;
- }
- unless (/^=/) {
- if (defined $header) {
- if ( $header eq 'DESCRIPTION' &&
- ( /Optional warnings are enabled/
- || /Some of these messages are generic./
- ) )
- {
- next;
- }
- s/^/ /gm;
- $msg{$header} .= $_;
- undef $for_item;
- }
- next;
- }
- unless ( s/=item (.*?)\s*\z//) {
-
- if ( s/=head1\sDESCRIPTION//) {
- $msg{$header = 'DESCRIPTION'} = '';
- undef $for_item;
- }
- elsif( s/^=for\s+diagnostics\s*\n(.*?)\s*\z// ) {
- $for_item = $1;
- }
- next;
- }
-
- # strip formatting directives in =item line
- $header = $for_item || $1;
- undef $for_item;
- $header =~ s/[A-Z]<(.*?)>/$1/g;
-
- if ($header =~ /%[csd]/) {
- my $rhs = my $lhs = $header;
- if ($lhs =~ s/(.*?)%d(?!%d)(.*)/\Q$1\E-?\\d+\Q$2\E/g) {
- $lhs =~ s/\\%s/.*?/g;
- } else {
- # if i had lookbehind negations,
- # i wouldn't have to do this \377 noise
- $lhs =~ s/(.*?)%s/\Q$1\E.*?\377/g;
- $lhs =~ s/\377([^\377]*)$/\Q$1\E/;
- $lhs =~ s/\377//g;
- $lhs =~ s/\.\*\?$/.*/; # Allow %s at the end to eat it all
- }
- $lhs =~ s/\\%c/./g;
- $transmo .= " s{^$lhs}\n {\Q$rhs\E}s\n\t&& return 1;\n";
- } else {
- $transmo .= " m{^\Q$header\E} && return 1;\n";
- }
-
- print STDERR "$WHOAMI: Duplicate entry: \"$header\"\n"
- if $msg{$header};
-
- $msg{$header} = '';
- }
-
-
- close POD_DIAG unless *main::DATA eq *POD_DIAG;
-
- die "No diagnostics?" unless %msg;
-
- $transmo .= " return 0;\n}\n";
- print STDERR $transmo if $DEBUG;
- eval $transmo;
- die $@ if $@;
-}
-
-if ($standalone) {
- if (!@ARGV and -t STDIN) { print STDERR "$0: Reading from STDIN\n" }
- while (defined (my $error = <>)) {
- splainthis($error) || print THITHER $error;
- }
- exit;
-}
-
-my $olddie;
-my $oldwarn;
-
-sub import {
- shift;
- $^W = 1; # yup, clobbered the global variable;
- # tough, if you want diags, you want diags.
- return if $SIG{__WARN__} eq \&warn_trap;
-
- for (@_) {
-
- /^-d(ebug)?$/ && do {
- $DEBUG++;
- next;
- };
-
- /^-v(erbose)?$/ && do {
- $VERBOSE++;
- next;
- };
-
- /^-p(retty)?$/ && do {
- print STDERR "$0: I'm afraid it's too late for prettiness.\n";
- $PRETTY++;
- next;
- };
-
- warn "Unknown flag: $_";
- }
-
- $oldwarn = $SIG{__WARN__};
- $olddie = $SIG{__DIE__};
- $SIG{__WARN__} = \&warn_trap;
- $SIG{__DIE__} = \&death_trap;
-}
-
-sub enable { &import }
-
-sub disable {
- shift;
- return unless $SIG{__WARN__} eq \&warn_trap;
- $SIG{__WARN__} = $oldwarn || '';
- $SIG{__DIE__} = $olddie || '';
-}
-
-sub warn_trap {
- my $warning = $_[0];
- if (caller eq $WHOAMI or !splainthis($warning)) {
- print STDERR $warning;
- }
- &$oldwarn if defined $oldwarn and $oldwarn and $oldwarn ne \&warn_trap;
-};
-
-sub death_trap {
- my $exception = $_[0];
-
- # See if we are coming from anywhere within an eval. If so we don't
- # want to explain the exception because it's going to get caught.
- my $in_eval = 0;
- my $i = 0;
- while (1) {
- my $caller = (caller($i++))[3] or last;
- if ($caller eq '(eval)') {
- $in_eval = 1;
- last;
- }
- }
-
- splainthis($exception) unless $in_eval;
- if (caller eq $WHOAMI) { print STDERR "INTERNAL EXCEPTION: $exception"; }
- &$olddie if defined $olddie and $olddie and $olddie ne \&death_trap;
-
- # We don't want to unset these if we're coming from an eval because
- # then we've turned off diagnostics. (Actually what does this next
- # line do? -PSeibel)
- $SIG{__DIE__} = $SIG{__WARN__} = '' unless $in_eval;
- local($Carp::CarpLevel) = 1;
- confess "Uncaught exception from user code:\n\t$exception";
- # up we go; where we stop, nobody knows, but i think we die now
- # but i'm deeply afraid of the &$olddie guy reraising and us getting
- # into an indirect recursion loop
-};
-
-my %exact_duplicate;
-my %old_diag;
-my $count;
-my $wantspace;
-sub splainthis {
- local $_ = shift;
- local $\;
- ### &finish_compilation unless %msg;
- s/\.?\n+$//;
- my $orig = $_;
- # return unless defined;
- s/, <.*?> (?:line|chunk).*$//;
- my $real = s/(.*?) at .*? (?:line|chunk) \d+.*/$1/;
- s/^\((.*)\)$/$1/;
- if ($exact_duplicate{$orig}++) {
- return &transmo;
- }
- else {
- return 0 unless &transmo;
- }
- $orig = shorten($orig);
- if ($old_diag{$_}) {
- autodescribe();
- print THITHER "$orig (#$old_diag{$_})\n";
- $wantspace = 1;
- } else {
- autodescribe();
- $old_diag{$_} = ++$count;
- print THITHER "\n" if $wantspace;
- $wantspace = 0;
- print THITHER "$orig (#$old_diag{$_})\n";
- if ($msg{$_}) {
- print THITHER $msg{$_};
- } else {
- if (0 and $standalone) {
- print THITHER " **** Error #$old_diag{$_} ",
- ($real ? "is" : "appears to be"),
- " an unknown diagnostic message.\n\n";
- }
- return 0;
- }
- }
- return 1;
-}
-
-sub autodescribe {
- if ($VERBOSE and not $count) {
- print THITHER &{$PRETTY ? \&bold : \&noop}("DESCRIPTION OF DIAGNOSTICS"),
- "\n$msg{DESCRIPTION}\n";
- }
-}
-
-sub unescape {
- s {
- E<
- ( [A-Za-z]+ )
- >
- } {
- do {
- exists $HTML_Escapes{$1}
- ? do { $HTML_Escapes{$1} }
- : do {
- warn "Unknown escape: E<$1> in $_";
- "E<$1>";
- }
- }
- }egx;
-}
-
-sub shorten {
- my $line = $_[0];
- if (length($line) > 79 and index($line, "\n") == -1) {
- my $space_place = rindex($line, ' ', 79);
- if ($space_place != -1) {
- substr($line, $space_place, 1) = "\n\t";
- }
- }
- return $line;
-}
-
-
-1 unless $standalone; # or it'll complain about itself
-__END__ # wish diag dbase were more accessible
diff --git a/contrib/perl5/lib/dotsh.pl b/contrib/perl5/lib/dotsh.pl
deleted file mode 100644
index 5be2413..0000000
--- a/contrib/perl5/lib/dotsh.pl
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# @(#)dotsh.pl 03/19/94
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-#
-# Author: Charles Collins
-#
-# Description:
-# This routine takes a shell script and 'dots' it into the current perl
-# environment. This makes it possible to use existing system scripts
-# to alter environment variables on the fly.
-#
-# Usage:
-# &dotsh ('ShellScript', 'DependentVariable(s)');
-#
-# where
-#
-# 'ShellScript' is the full name of the shell script to be dotted
-#
-# 'DependentVariable(s)' is an optional list of shell variables in the
-# form VARIABLE=VALUE,VARIABLE=VALUE,... that 'ShellScript' is
-# dependent upon. These variables MUST be defined using shell syntax.
-#
-# Example:
-# &dotsh ('/tmp/foo', 'arg1');
-# &dotsh ('/tmp/foo');
-# &dotsh ('/tmp/foo arg1 ... argN');
-#
-sub dotsh {
- local(@sh) = @_;
- local($tmp,$key,$shell,$command,$args,$vars) = '';
- local(*dotsh);
- undef *dotsh;
- $dotsh = shift(@sh);
- @dotsh = split (/\s/, $dotsh);
- $command = shift (@dotsh);
- $args = join (" ", @dotsh);
- $vars = join ("\n", @sh);
- open (_SH_ENV, "$command") || die "Could not open $dotsh!\n";
- chop($_ = <_SH_ENV>);
- $shell = "$1 -c" if ($_ =~ /^\#\!\s*(\S+(\/sh|\/ksh|\/zsh|\/csh))\s*$/);
- close (_SH_ENV);
- if (!$shell) {
- if ($ENV{'SHELL'} =~ /\/sh$|\/ksh$|\/zsh$|\/bash$|\/csh$/) {
- $shell = "$ENV{'SHELL'} -c";
- } else {
- print "SHELL not recognized!\nUsing /bin/sh...\n";
- $shell = "/bin/sh -c";
- }
- }
- if (length($vars) > 0) {
- system "$shell \"$vars;. $command $args; set > /tmp/_sh_env$$\"";
- } else {
- system "$shell \". $command $args; set > /tmp/_sh_env$$\"";
- }
-
- open (_SH_ENV, "/tmp/_sh_env$$") || die "Could not open /tmp/_sh_env$$!\n";
- while (<_SH_ENV>) {
- chop;
- m/^([^=]*)=(.*)/s;
- $ENV{$1} = $2;
- }
- close (_SH_ENV);
- system "rm -f /tmp/_sh_env$$";
-
- foreach $key (keys(%ENV)) {
- $tmp .= "\$$key = \$ENV{'$key'};" if $key =~ /^[A-Za-z]\w*$/;
- }
- eval $tmp;
-}
-1;
diff --git a/contrib/perl5/lib/dumpvar.pl b/contrib/perl5/lib/dumpvar.pl
deleted file mode 100644
index 51e9c88..0000000
--- a/contrib/perl5/lib/dumpvar.pl
+++ /dev/null
@@ -1,443 +0,0 @@
-require 5.002; # For (defined ref)
-package dumpvar;
-
-# Needed for PrettyPrinter only:
-
-# require 5.001; # Well, it coredumps anyway undef DB in 5.000 (not now)
-
-# translate control chars to ^X - Randal Schwartz
-# Modifications to print types by Peter Gordon v1.0
-
-# Ilya Zakharevich -- patches after 5.001 (and some before ;-)
-
-# Won't dump symbol tables and contents of debugged files by default
-
-$winsize = 80 unless defined $winsize;
-
-
-# Defaults
-
-# $globPrint = 1;
-$printUndef = 1 unless defined $printUndef;
-$tick = "auto" unless defined $tick;
-$unctrl = 'quote' unless defined $unctrl;
-$subdump = 1;
-$dumpReused = 0 unless defined $dumpReused;
-$bareStringify = 1 unless defined $bareStringify;
-
-sub main::dumpValue {
- local %address;
- local $^W=0;
- (print "undef\n"), return unless defined $_[0];
- (print &stringify($_[0]), "\n"), return unless ref $_[0];
- dumpvar::unwrap($_[0],0);
-}
-
-# This one is good for variable names:
-
-sub unctrl {
- local($_) = @_;
- local($v) ;
-
- return \$_ if ref \$_ eq "GLOB";
- s/([\001-\037\177])/'^'.pack('c',ord($1)^64)/eg;
- $_;
-}
-
-sub stringify {
- local($_,$noticks) = @_;
- local($v) ;
- my $tick = $tick;
-
- return 'undef' unless defined $_ or not $printUndef;
- return $_ . "" if ref \$_ eq 'GLOB';
- $_ = &{'overload::StrVal'}($_)
- if $bareStringify and ref $_
- and %overload:: and defined &{'overload::StrVal'};
-
- if ($tick eq 'auto') {
- if (/[\000-\011\013-\037\177]/) {
- $tick = '"';
- }else {
- $tick = "'";
- }
- }
- if ($tick eq "'") {
- s/([\'\\])/\\$1/g;
- } elsif ($unctrl eq 'unctrl') {
- s/([\"\\])/\\$1/g ;
- s/([\000-\037\177])/'^'.pack('c',ord($1)^64)/eg;
- s/([\200-\377])/'\\0x'.sprintf('%2X',ord($1))/eg
- if $quoteHighBit;
- } elsif ($unctrl eq 'quote') {
- s/([\"\\\$\@])/\\$1/g if $tick eq '"';
- s/\033/\\e/g;
- s/([\000-\037\177])/'\\c'.chr(ord($1)^64)/eg;
- }
- s/([\200-\377])/'\\'.sprintf('%3o',ord($1))/eg if $quoteHighBit;
- ($noticks || /^\d+(\.\d*)?\Z/)
- ? $_
- : $tick . $_ . $tick;
-}
-
-sub ShortArray {
- my $tArrayDepth = $#{$_[0]} ;
- $tArrayDepth = $#{$_[0]} < $arrayDepth-1 ? $#{$_[0]} : $arrayDepth-1
- unless $arrayDepth eq '' ;
- my $shortmore = "";
- $shortmore = " ..." if $tArrayDepth < $#{$_[0]} ;
- if (!grep(ref $_, @{$_[0]})) {
- $short = "0..$#{$_[0]} '" .
- join("' '", @{$_[0]}[0..$tArrayDepth]) . "'$shortmore";
- return $short if length $short <= $compactDump;
- }
- undef;
-}
-
-sub DumpElem {
- my $short = &stringify($_[0], ref $_[0]);
- if ($veryCompact && ref $_[0]
- && (ref $_[0] eq 'ARRAY' and !grep(ref $_, @{$_[0]}) )) {
- my $end = "0..$#{$v} '" .
- join("' '", @{$_[0]}[0..$tArrayDepth]) . "'$shortmore";
- } elsif ($veryCompact && ref $_[0]
- && (ref $_[0] eq 'HASH') and !grep(ref $_, values %{$_[0]})) {
- my $end = 1;
- $short = $sp . "0..$#{$v} '" .
- join("' '", @{$v}[0..$tArrayDepth]) . "'$shortmore";
- } else {
- print "$short\n";
- unwrap($_[0],$_[1]);
- }
-}
-
-sub unwrap {
- return if $DB::signal;
- local($v) = shift ;
- local($s) = shift ; # extra no of spaces
- local(%v,@v,$sp,$value,$key,@sortKeys,$more,$shortmore,$short) ;
- local($tHashDepth,$tArrayDepth) ;
-
- $sp = " " x $s ;
- $s += 3 ;
-
- # Check for reused addresses
- if (ref $v) {
- my $val = $v;
- $val = &{'overload::StrVal'}($v)
- if %overload:: and defined &{'overload::StrVal'};
- ($address) = $val =~ /(0x[0-9a-f]+)\)$/ ;
- if (!$dumpReused && defined $address) {
- $address{$address}++ ;
- if ( $address{$address} > 1 ) {
- print "${sp}-> REUSED_ADDRESS\n" ;
- return ;
- }
- }
- } elsif (ref \$v eq 'GLOB') {
- $address = "$v" . ""; # To avoid a bug with globs
- $address{$address}++ ;
- if ( $address{$address} > 1 ) {
- print "${sp}*DUMPED_GLOB*\n" ;
- return ;
- }
- }
-
- if (ref $v eq 'Regexp') {
- my $re = "$v";
- $re =~ s,/,\\/,g;
- print "$sp-> qr/$re/\n";
- return;
- }
-
- if ( UNIVERSAL::isa($v, 'HASH') ) {
- @sortKeys = sort keys(%$v) ;
- undef $more ;
- $tHashDepth = $#sortKeys ;
- $tHashDepth = $#sortKeys < $hashDepth-1 ? $#sortKeys : $hashDepth-1
- unless $hashDepth eq '' ;
- $more = "....\n" if $tHashDepth < $#sortKeys ;
- $shortmore = "";
- $shortmore = ", ..." if $tHashDepth < $#sortKeys ;
- $#sortKeys = $tHashDepth ;
- if ($compactDump && !grep(ref $_, values %{$v})) {
- #$short = $sp .
- # (join ', ',
-# Next row core dumps during require from DB on 5.000, even with map {"_"}
- # map {&stringify($_) . " => " . &stringify($v->{$_})}
- # @sortKeys) . "'$shortmore";
- $short = $sp;
- my @keys;
- for (@sortKeys) {
- push @keys, &stringify($_) . " => " . &stringify($v->{$_});
- }
- $short .= join ', ', @keys;
- $short .= $shortmore;
- (print "$short\n"), return if length $short <= $compactDump;
- }
- for $key (@sortKeys) {
- return if $DB::signal;
- $value = $ {$v}{$key} ;
- print "$sp", &stringify($key), " => ";
- DumpElem $value, $s;
- }
- print "$sp empty hash\n" unless @sortKeys;
- print "$sp$more" if defined $more ;
- } elsif ( UNIVERSAL::isa($v, 'ARRAY') ) {
- $tArrayDepth = $#{$v} ;
- undef $more ;
- $tArrayDepth = $#{$v} < $arrayDepth-1 ? $#{$v} : $arrayDepth-1
- unless $arrayDepth eq '' ;
- $more = "....\n" if $tArrayDepth < $#{$v} ;
- $shortmore = "";
- $shortmore = " ..." if $tArrayDepth < $#{$v} ;
- if ($compactDump && !grep(ref $_, @{$v})) {
- if ($#$v >= 0) {
- $short = $sp . "0..$#{$v} " .
- join(" ",
- map {exists $v->[$_] ? stringify $v->[$_] : "empty"} ($[..$tArrayDepth)
- ) . "$shortmore";
- } else {
- $short = $sp . "empty array";
- }
- (print "$short\n"), return if length $short <= $compactDump;
- }
- #if ($compactDump && $short = ShortArray($v)) {
- # print "$short\n";
- # return;
- #}
- for $num ($[ .. $tArrayDepth) {
- return if $DB::signal;
- print "$sp$num ";
- if (exists $v->[$num]) {
- DumpElem $v->[$num], $s;
- } else {
- print "empty slot\n";
- }
- }
- print "$sp empty array\n" unless @$v;
- print "$sp$more" if defined $more ;
- } elsif ( UNIVERSAL::isa($v, 'SCALAR') or ref $v eq 'REF' ) {
- print "$sp-> ";
- DumpElem $$v, $s;
- } elsif ( UNIVERSAL::isa($v, 'CODE') ) {
- print "$sp-> ";
- dumpsub (0, $v);
- } elsif ( UNIVERSAL::isa($v, 'GLOB') ) {
- print "$sp-> ",&stringify($$v,1),"\n";
- if ($globPrint) {
- $s += 3;
- dumpglob($s, "{$$v}", $$v, 1);
- } elsif (defined ($fileno = fileno($v))) {
- print( (' ' x ($s+3)) . "FileHandle({$$v}) => fileno($fileno)\n" );
- }
- } elsif (ref \$v eq 'GLOB') {
- if ($globPrint) {
- dumpglob($s, "{$v}", $v, 1) if $globPrint;
- } elsif (defined ($fileno = fileno(\$v))) {
- print( (' ' x $s) . "FileHandle({$v}) => fileno($fileno)\n" );
- }
- }
-}
-
-sub matchvar {
- $_[0] eq $_[1] or
- ($_[1] =~ /^([!~])(.)([\x00-\xff]*)/) and
- ($1 eq '!') ^ (eval {($_[2] . "::" . $_[0]) =~ /$2$3/});
-}
-
-sub compactDump {
- $compactDump = shift if @_;
- $compactDump = 6*80-1 if $compactDump and $compactDump < 2;
- $compactDump;
-}
-
-sub veryCompact {
- $veryCompact = shift if @_;
- compactDump(1) if !$compactDump and $veryCompact;
- $veryCompact;
-}
-
-sub unctrlSet {
- if (@_) {
- my $in = shift;
- if ($in eq 'unctrl' or $in eq 'quote') {
- $unctrl = $in;
- } else {
- print "Unknown value for `unctrl'.\n";
- }
- }
- $unctrl;
-}
-
-sub quote {
- if (@_ and $_[0] eq '"') {
- $tick = '"';
- $unctrl = 'quote';
- } elsif (@_ and $_[0] eq 'auto') {
- $tick = 'auto';
- $unctrl = 'quote';
- } elsif (@_) { # Need to set
- $tick = "'";
- $unctrl = 'unctrl';
- }
- $tick;
-}
-
-sub dumpglob {
- return if $DB::signal;
- my ($off,$key, $val, $all) = @_;
- local(*entry) = $val;
- my $fileno;
- if (($key !~ /^_</ or $dumpDBFiles) and defined $entry) {
- print( (' ' x $off) . "\$", &unctrl($key), " = " );
- DumpElem $entry, 3+$off;
- }
- if (($key !~ /^_</ or $dumpDBFiles) and @entry) {
- print( (' ' x $off) . "\@$key = (\n" );
- unwrap(\@entry,3+$off) ;
- print( (' ' x $off) . ")\n" );
- }
- if ($key ne "main::" && $key ne "DB::" && %entry
- && ($dumpPackages or $key !~ /::$/)
- && ($key !~ /^_</ or $dumpDBFiles)
- && !($package eq "dumpvar" and $key eq "stab")) {
- print( (' ' x $off) . "\%$key = (\n" );
- unwrap(\%entry,3+$off) ;
- print( (' ' x $off) . ")\n" );
- }
- if (defined ($fileno = fileno(*entry))) {
- print( (' ' x $off) . "FileHandle($key) => fileno($fileno)\n" );
- }
- if ($all) {
- if (defined &entry) {
- dumpsub($off, $key);
- }
- }
-}
-
-sub CvGV_name_or_bust {
- my $in = shift;
- return if $skipCvGV; # Backdoor to avoid problems if XS broken...
- $in = \&$in; # Hard reference...
- eval {require Devel::Peek; 1} or return;
- my $gv = Devel::Peek::CvGV($in) or return;
- *$gv{PACKAGE} . '::' . *$gv{NAME};
-}
-
-sub dumpsub {
- my ($off,$sub) = @_;
- my $ini = $sub;
- my $s;
- $sub = $1 if $sub =~ /^\{\*(.*)\}$/;
- my $subref = defined $1 ? \&$sub : \&$ini;
- my $place = $DB::sub{$sub} || (($s = $subs{"$subref"}) && $DB::sub{$s})
- || (($s = CvGV_name_or_bust($subref)) && $DB::sub{$s})
- || ($subdump && ($s = findsubs("$subref")) && $DB::sub{$s});
- $place = '???' unless defined $place;
- $s = $sub unless defined $s;
- print( (' ' x $off) . "&$s in $place\n" );
-}
-
-sub findsubs {
- return undef unless %DB::sub;
- my ($addr, $name, $loc);
- while (($name, $loc) = each %DB::sub) {
- $addr = \&$name;
- $subs{"$addr"} = $name;
- }
- $subdump = 0;
- $subs{ shift() };
-}
-
-sub main::dumpvar {
- my ($package,@vars) = @_;
- local(%address,$key,$val,$^W);
- $package .= "::" unless $package =~ /::$/;
- *stab = *{"main::"};
- while ($package =~ /(\w+?::)/g){
- *stab = $ {stab}{$1};
- }
- local $TotalStrings = 0;
- local $Strings = 0;
- local $CompleteTotal = 0;
- while (($key,$val) = each(%stab)) {
- return if $DB::signal;
- next if @vars && !grep( matchvar($key, $_), @vars );
- if ($usageOnly) {
- globUsage(\$val, $key)
- if ($package ne 'dumpvar' or $key ne 'stab')
- and ref(\$val) eq 'GLOB';
- } else {
- dumpglob(0,$key, $val);
- }
- }
- if ($usageOnly) {
- print "String space: $TotalStrings bytes in $Strings strings.\n";
- $CompleteTotal += $TotalStrings;
- print "Grand total = $CompleteTotal bytes (1 level deep) + overhead.\n";
- }
-}
-
-sub scalarUsage {
- my $size = length($_[0]);
- $TotalStrings += $size;
- $Strings++;
- $size;
-}
-
-sub arrayUsage { # array ref, name
- my $size = 0;
- map {$size += scalarUsage($_)} @{$_[0]};
- my $len = @{$_[0]};
- print "\@$_[1] = $len item", ($len > 1 ? "s" : ""),
- " (data: $size bytes)\n"
- if defined $_[1];
- $CompleteTotal += $size;
- $size;
-}
-
-sub hashUsage { # hash ref, name
- my @keys = keys %{$_[0]};
- my @values = values %{$_[0]};
- my $keys = arrayUsage \@keys;
- my $values = arrayUsage \@values;
- my $len = @keys;
- my $total = $keys + $values;
- print "\%$_[1] = $len item", ($len > 1 ? "s" : ""),
- " (keys: $keys; values: $values; total: $total bytes)\n"
- if defined $_[1];
- $total;
-}
-
-sub globUsage { # glob ref, name
- local *name = *{$_[0]};
- $total = 0;
- $total += scalarUsage $name if defined $name;
- $total += arrayUsage \@name, $_[1] if @name;
- $total += hashUsage \%name, $_[1] if %name and $_[1] ne "main::"
- and $_[1] ne "DB::"; #and !($package eq "dumpvar" and $key eq "stab"));
- $total;
-}
-
-sub packageUsage {
- my ($package,@vars) = @_;
- $package .= "::" unless $package =~ /::$/;
- local *stab = *{"main::"};
- while ($package =~ /(\w+?::)/g){
- *stab = $ {stab}{$1};
- }
- local $TotalStrings = 0;
- local $CompleteTotal = 0;
- my ($key,$val);
- while (($key,$val) = each(%stab)) {
- next if @vars && !grep($key eq $_,@vars);
- globUsage \$val, $key unless $package eq 'dumpvar' and $key eq 'stab';
- }
- print "String space: $TotalStrings.\n";
- $CompleteTotal += $TotalStrings;
- print "\nGrand total = $CompleteTotal bytes\n";
-}
-
-1;
-
diff --git a/contrib/perl5/lib/exceptions.pl b/contrib/perl5/lib/exceptions.pl
deleted file mode 100644
index ed1f927..0000000
--- a/contrib/perl5/lib/exceptions.pl
+++ /dev/null
@@ -1,61 +0,0 @@
-# exceptions.pl
-# tchrist@convex.com
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-#
-# Here's a little code I use for exception handling. It's really just
-# glorfied eval/die. The way to use use it is when you might otherwise
-# exit, use &throw to raise an exception. The first enclosing &catch
-# handler looks at the exception and decides whether it can catch this kind
-# (catch takes a list of regexps to catch), and if so, it returns the one it
-# caught. If it *can't* catch it, then it will reraise the exception
-# for someone else to possibly see, or to die otherwise.
-#
-# I use oddly named variables in order to make darn sure I don't conflict
-# with my caller. I also hide in my own package, and eval the code in his.
-#
-# The EXCEPTION: prefix is so you can tell whether it's a user-raised
-# exception or a perl-raised one (eval error).
-#
-# --tom
-#
-# examples:
-# if (&catch('/$user_input/', 'regexp', 'syntax error') {
-# warn "oops try again";
-# redo;
-# }
-#
-# if ($error = &catch('&subroutine()')) { # catches anything
-#
-# &throw('bad input') if /^$/;
-
-sub catch {
- package exception;
- local($__code__, @__exceptions__) = @_;
- local($__package__) = caller;
- local($__exception__);
-
- eval "package $__package__; $__code__";
- if ($__exception__ = &'thrown) {
- for (@__exceptions__) {
- return $__exception__ if /$__exception__/;
- }
- &'throw($__exception__);
- }
-}
-
-sub throw {
- local($exception) = @_;
- die "EXCEPTION: $exception\n";
-}
-
-sub thrown {
- $@ =~ /^(EXCEPTION: )+(.+)/ && $2;
-}
-
-1;
diff --git a/contrib/perl5/lib/fastcwd.pl b/contrib/perl5/lib/fastcwd.pl
deleted file mode 100644
index ecd87c8..0000000
--- a/contrib/perl5/lib/fastcwd.pl
+++ /dev/null
@@ -1,43 +0,0 @@
-# By John Bazik
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Cwd
-#
-# Usage: $cwd = &fastcwd;
-#
-# This is a faster version of getcwd. It's also more dangerous because
-# you might chdir out of a directory that you can't chdir back into.
-
-sub fastcwd {
- local($odev, $oino, $cdev, $cino, $tdev, $tino);
- local(@path, $path);
- local(*DIR);
-
- ($cdev, $cino) = stat('.');
- for (;;) {
- ($odev, $oino) = ($cdev, $cino);
- chdir('..');
- ($cdev, $cino) = stat('.');
- last if $odev == $cdev && $oino == $cino;
- opendir(DIR, '.');
- for (;;) {
- $_ = readdir(DIR);
- next if $_ eq '.';
- next if $_ eq '..';
-
- last unless $_;
- ($tdev, $tino) = lstat($_);
- last unless $tdev != $odev || $tino != $oino;
- }
- closedir(DIR);
- unshift(@path, $_);
- }
- chdir($path = '/' . join('/', @path));
- $path;
-}
-1;
diff --git a/contrib/perl5/lib/fields.pm b/contrib/perl5/lib/fields.pm
deleted file mode 100644
index 37ff99d..0000000
--- a/contrib/perl5/lib/fields.pm
+++ /dev/null
@@ -1,285 +0,0 @@
-package fields;
-
-=head1 NAME
-
-fields - compile-time class fields
-
-=head1 SYNOPSIS
-
- {
- package Foo;
- use fields qw(foo bar _Foo_private);
- sub new {
- my Foo $self = shift;
- unless (ref $self) {
- $self = fields::new($self);
- $self->{_Foo_private} = "this is Foo's secret";
- }
- $self->{foo} = 10;
- $self->{bar} = 20;
- return $self;
- }
- }
-
- my Foo $var = Foo::->new;
- $var->{foo} = 42;
-
- # this will generate a compile-time error
- $var->{zap} = 42;
-
- # subclassing
- {
- package Bar;
- use base 'Foo';
- use fields qw(baz _Bar_private); # not shared with Foo
- sub new {
- my $class = shift;
- my $self = fields::new($class);
- $self->SUPER::new(); # init base fields
- $self->{baz} = 10; # init own fields
- $self->{_Bar_private} = "this is Bar's secret";
- return $self;
- }
- }
-
-=head1 DESCRIPTION
-
-The C<fields> pragma enables compile-time verified class fields.
-
-NOTE: The current implementation keeps the declared fields in the %FIELDS
-hash of the calling package, but this may change in future versions.
-Do B<not> update the %FIELDS hash directly, because it must be created
-at compile-time for it to be fully useful, as is done by this pragma.
-
-If a typed lexical variable holding a reference is used to access a
-hash element and a package with the same name as the type has declared
-class fields using this pragma, then the operation is turned into an
-array access at compile time.
-
-The related C<base> pragma will combine fields from base classes and any
-fields declared using the C<fields> pragma. This enables field
-inheritance to work properly.
-
-Field names that start with an underscore character are made private to
-the class and are not visible to subclasses. Inherited fields can be
-overridden but will generate a warning if used together with the C<-w>
-switch.
-
-The effect of all this is that you can have objects with named fields
-which are as compact and as fast arrays to access. This only works
-as long as the objects are accessed through properly typed variables.
-If the objects are not typed, access is only checked at run time.
-
-The following functions are supported:
-
-=over 8
-
-=item new
-
-fields::new() creates and blesses a pseudo-hash comprised of the fields
-declared using the C<fields> pragma into the specified class.
-This makes it possible to write a constructor like this:
-
- package Critter::Sounds;
- use fields qw(cat dog bird);
-
- sub new {
- my Critter::Sounds $self = shift;
- $self = fields::new($self) unless ref $self;
- $self->{cat} = 'meow'; # scalar element
- @$self{'dog','bird'} = ('bark','tweet'); # slice
- return $self;
- }
-
-=item phash
-
-fields::phash() can be used to create and initialize a plain (unblessed)
-pseudo-hash. This function should always be used instead of creating
-pseudo-hashes directly.
-
-If the first argument is a reference to an array, the pseudo-hash will
-be created with keys from that array. If a second argument is supplied,
-it must also be a reference to an array whose elements will be used as
-the values. If the second array contains less elements than the first,
-the trailing elements of the pseudo-hash will not be initialized.
-This makes it particularly useful for creating a pseudo-hash from
-subroutine arguments:
-
- sub dogtag {
- my $tag = fields::phash([qw(name rank ser_num)], [@_]);
- }
-
-fields::phash() also accepts a list of key-value pairs that will
-be used to construct the pseudo hash. Examples:
-
- my $tag = fields::phash(name => "Joe",
- rank => "captain",
- ser_num => 42);
-
- my $pseudohash = fields::phash(%args);
-
-=back
-
-=head1 SEE ALSO
-
-L<base>,
-L<perlref/Pseudo-hashes: Using an array as a hash>
-
-=cut
-
-use 5.005_64;
-use strict;
-no strict 'refs';
-use warnings::register;
-our(%attr, $VERSION);
-
-$VERSION = "1.01";
-
-# some constants
-sub _PUBLIC () { 1 }
-sub _PRIVATE () { 2 }
-
-# The %attr hash holds the attributes of the currently assigned fields
-# per class. The hash is indexed by class names and the hash value is
-# an array reference. The first element in the array is the lowest field
-# number not belonging to a base class. The remaining elements' indices
-# are the field numbers. The values are integer bit masks, or undef
-# in the case of base class private fields (which occupy a slot but are
-# otherwise irrelevant to the class).
-
-sub import {
- my $class = shift;
- return unless @_;
- my $package = caller(0);
- # avoid possible typo warnings
- %{"$package\::FIELDS"} = () unless %{"$package\::FIELDS"};
- my $fields = \%{"$package\::FIELDS"};
- my $fattr = ($attr{$package} ||= [1]);
- my $next = @$fattr;
-
- if ($next > $fattr->[0]
- and ($fields->{$_[0]} || 0) >= $fattr->[0])
- {
- # There are already fields not belonging to base classes.
- # Looks like a possible module reload...
- $next = $fattr->[0];
- }
- foreach my $f (@_) {
- my $fno = $fields->{$f};
-
- # Allow the module to be reloaded so long as field positions
- # have not changed.
- if ($fno and $fno != $next) {
- require Carp;
- if ($fno < $fattr->[0]) {
- warnings::warnif("Hides field '$f' in base class") ;
- } else {
- Carp::croak("Field name '$f' already in use");
- }
- }
- $fields->{$f} = $next;
- $fattr->[$next] = ($f =~ /^_/) ? _PRIVATE : _PUBLIC;
- $next += 1;
- }
- if (@$fattr > $next) {
- # Well, we gave them the benefit of the doubt by guessing the
- # module was reloaded, but they appear to be declaring fields
- # in more than one place. We can't be sure (without some extra
- # bookkeeping) that the rest of the fields will be declared or
- # have the same positions, so punt.
- require Carp;
- Carp::croak ("Reloaded module must declare all fields at once");
- }
-}
-
-sub inherit { # called by base.pm when $base_fields is nonempty
- my($derived, $base) = @_;
- my $base_attr = $attr{$base};
- my $derived_attr = $attr{$derived} ||= [];
- # avoid possible typo warnings
- %{"$base\::FIELDS"} = () unless %{"$base\::FIELDS"};
- %{"$derived\::FIELDS"} = () unless %{"$derived\::FIELDS"};
- my $base_fields = \%{"$base\::FIELDS"};
- my $derived_fields = \%{"$derived\::FIELDS"};
-
- $derived_attr->[0] = $base_attr ? scalar(@$base_attr) : 1;
- while (my($k,$v) = each %$base_fields) {
- my($fno);
- if ($fno = $derived_fields->{$k} and $fno != $v) {
- require Carp;
- Carp::croak ("Inherited %FIELDS can't override existing %FIELDS");
- }
- if ($base_attr->[$v] & _PRIVATE) {
- $derived_attr->[$v] = undef;
- } else {
- $derived_attr->[$v] = $base_attr->[$v];
- $derived_fields->{$k} = $v;
- }
- }
-}
-
-sub _dump # sometimes useful for debugging
-{
- for my $pkg (sort keys %attr) {
- print "\n$pkg";
- if (@{"$pkg\::ISA"}) {
- print " (", join(", ", @{"$pkg\::ISA"}), ")";
- }
- print "\n";
- my $fields = \%{"$pkg\::FIELDS"};
- for my $f (sort {$fields->{$a} <=> $fields->{$b}} keys %$fields) {
- my $no = $fields->{$f};
- print " $no: $f";
- my $fattr = $attr{$pkg}[$no];
- if (defined $fattr) {
- my @a;
- push(@a, "public") if $fattr & _PUBLIC;
- push(@a, "private") if $fattr & _PRIVATE;
- push(@a, "inherited") if $no < $attr{$pkg}[0];
- print "\t(", join(", ", @a), ")";
- }
- print "\n";
- }
- }
-}
-
-sub new {
- my $class = shift;
- $class = ref $class if ref $class;
- return bless [\%{$class . "::FIELDS"}], $class;
-}
-
-sub phash {
- my $h;
- my $v;
- if (@_) {
- if (ref $_[0] eq 'ARRAY') {
- my $a = shift;
- @$h{@$a} = 1 .. @$a;
- if (@_) {
- $v = shift;
- unless (! @_ and ref $v eq 'ARRAY') {
- require Carp;
- Carp::croak ("Expected at most two array refs\n");
- }
- }
- }
- else {
- if (@_ % 2) {
- require Carp;
- Carp::croak ("Odd number of elements initializing pseudo-hash\n");
- }
- my $i = 0;
- @$h{grep ++$i % 2, @_} = 1 .. @_ / 2;
- $i = 0;
- $v = [grep $i++ % 2, @_];
- }
- }
- else {
- $h = {};
- $v = [];
- }
- [ $h, @$v ];
-}
-
-1;
diff --git a/contrib/perl5/lib/filetest.pm b/contrib/perl5/lib/filetest.pm
deleted file mode 100644
index b52a9b48..0000000
--- a/contrib/perl5/lib/filetest.pm
+++ /dev/null
@@ -1,68 +0,0 @@
-package filetest;
-
-=head1 NAME
-
-filetest - Perl pragma to control the filetest permission operators
-
-=head1 SYNOPSIS
-
- $can_perhaps_read = -r "file"; # use the mode bits
- {
- use filetest 'access'; # intuit harder
- $can_really_read = -r "file";
- }
- $can_perhaps_read = -r "file"; # use the mode bits again
-
-=head1 DESCRIPTION
-
-This pragma tells the compiler to change the behaviour of the filetest
-permissions operators, the C<-r> C<-w> C<-x> C<-R> C<-W> C<-X>
-(see L<perlfunc>).
-
-The default behaviour to use the mode bits as returned by the stat()
-family of calls. This, however, may not be the right thing to do if
-for example various ACL (access control lists) schemes are in use.
-For such environments, C<use filetest> may help the permission
-operators to return results more consistent with other tools.
-
-Each "use filetest" or "no filetest" affects statements to the end of
-the enclosing block.
-
-There may be a slight performance decrease in the filetests
-when C<use filetest> is in effect, because in some systems
-the extended functionality needs to be emulated.
-
-B<NOTE>: using the file tests for security purposes is a lost cause
-from the start: there is a window open for race conditions (who is to
-say that the permissions will not change between the test and the real
-operation?). Therefore if you are serious about security, just try
-the real operation and test for its success. Think atomicity.
-
-=head2 subpragma access
-
-Currently only one subpragma, C<access> is implemented. It enables
-(or disables) the use of access() or similar system calls. This
-extended filetest functionality is used only when the argument of the
-operators is a filename, not when it is a filehandle.
-
-=cut
-
-$filetest::hint_bits = 0x00400000;
-
-sub import {
- if ( $_[1] eq 'access' ) {
- $^H |= $filetest::hint_bits;
- } else {
- die "filetest: the only implemented subpragma is 'access'.\n";
- }
-}
-
-sub unimport {
- if ( $_[1] eq 'access' ) {
- $^H &= ~$filetest::hint_bits;
- } else {
- die "filetest: the only implemented subpragma is 'access'.\n";
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/find.pl b/contrib/perl5/lib/find.pl
deleted file mode 100644
index ee5dc5d..0000000
--- a/contrib/perl5/lib/find.pl
+++ /dev/null
@@ -1,47 +0,0 @@
-# Usage:
-# require "find.pl";
-#
-# &find('/foo','/bar');
-#
-# sub wanted { ... }
-# where wanted does whatever you want. $dir contains the
-# current directory name, and $_ the current filename within
-# that directory. $name contains "$dir/$_". You are cd'ed
-# to $dir when the function is called. The function may
-# set $prune to prune the tree.
-#
-# This library is primarily for find2perl, which, when fed
-#
-# find2perl / -name .nfs\* -mtime +7 -exec rm -f {} \; -o -fstype nfs -prune
-#
-# spits out something like this
-#
-# sub wanted {
-# /^\.nfs.*$/ &&
-# (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-# int(-M _) > 7 &&
-# unlink($_)
-# ||
-# ($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) &&
-# $dev < 0 &&
-# ($prune = 1);
-# }
-#
-# Set the variable $dont_use_nlink if you're using AFS, since AFS cheats.
-
-use File::Find ();
-
-*name = *File::Find::name;
-*prune = *File::Find::prune;
-*dir = *File::Find::dir;
-*topdir = *File::Find::topdir;
-*topdev = *File::Find::topdev;
-*topino = *File::Find::topino;
-*topmode = *File::Find::topmode;
-*topnlink = *File::Find::topnlink;
-
-sub find {
- &File::Find::find(\&wanted, @_);
-}
-
-1;
diff --git a/contrib/perl5/lib/finddepth.pl b/contrib/perl5/lib/finddepth.pl
deleted file mode 100644
index bfa44bb..0000000
--- a/contrib/perl5/lib/finddepth.pl
+++ /dev/null
@@ -1,46 +0,0 @@
-# Usage:
-# require "finddepth.pl";
-#
-# &finddepth('/foo','/bar');
-#
-# sub wanted { ... }
-# where wanted does whatever you want. $dir contains the
-# current directory name, and $_ the current filename within
-# that directory. $name contains "$dir/$_". You are cd'ed
-# to $dir when the function is called. The function may
-# set $prune to prune the tree.
-#
-# This library is primarily for find2perl, which, when fed
-#
-# find2perl / -name .nfs\* -mtime +7 -exec rm -f {} \; -o -fstype nfs -prune
-#
-# spits out something like this
-#
-# sub wanted {
-# /^\.nfs.*$/ &&
-# (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-# int(-M _) > 7 &&
-# unlink($_)
-# ||
-# ($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) &&
-# $dev < 0 &&
-# ($prune = 1);
-# }
-
-
-use File::Find ();
-
-*name = *File::Find::name;
-*prune = *File::Find::prune;
-*dir = *File::Find::dir;
-*topdir = *File::Find::topdir;
-*topdev = *File::Find::topdev;
-*topino = *File::Find::topino;
-*topmode = *File::Find::topmode;
-*topnlink = *File::Find::topnlink;
-
-sub finddepth {
- &File::Find::finddepth(\&wanted, @_);
-}
-
-1;
diff --git a/contrib/perl5/lib/flush.pl b/contrib/perl5/lib/flush.pl
deleted file mode 100644
index 8aa6d55..0000000
--- a/contrib/perl5/lib/flush.pl
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: IO::Handle
-#
-;# Usage: &flush(FILEHANDLE)
-;# flushes the named filehandle
-
-;# Usage: &printflush(FILEHANDLE, "prompt: ")
-;# prints arguments and flushes filehandle
-
-sub flush {
- local($old) = select(shift);
- $| = 1;
- print "";
- $| = 0;
- select($old);
-}
-
-sub printflush {
- local($old) = select(shift);
- $| = 1;
- print @_;
- $| = 0;
- select($old);
-}
-
-1;
diff --git a/contrib/perl5/lib/ftp.pl b/contrib/perl5/lib/ftp.pl
deleted file mode 100644
index 3f0af1a..0000000
--- a/contrib/perl5/lib/ftp.pl
+++ /dev/null
@@ -1,1086 +0,0 @@
-#-*-perl-*-
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Net::FTP
-#
-# This is a wrapper to the chat2.pl routines that make life easier
-# to do ftp type work.
-# Mostly by Lee McLoughlin <lmjm@doc.ic.ac.uk>
-# based on original version by Alan R. Martello <al@ee.pitt.edu>
-# And by A.Macpherson@bnr.co.uk for multi-homed hosts
-#
-# $Header: /a/swan/home/swan/staff/csg/lmjm/src/perl/mirror/RCS/ftp.pl,v 1.17 1993/04/21 10:06:54 lmjm Exp lmjm $
-# $Log: ftp.pl,v $
-# Revision 1.17 1993/04/21 10:06:54 lmjm
-# Send all status reports to STDERR not to STDOUT (to allow use by ftpcat).
-# Allow target file to be '-' meaning STDOUT
-# Added ftp'quote
-#
-# Revision 1.16 1993/01/28 18:59:05 lmjm
-# Allow socket arguemtns to come from main.
-# Minor cleanups - removed old comments.
-#
-# Revision 1.15 1992/11/25 21:09:30 lmjm
-# Added another REST return code.
-#
-# Revision 1.14 1992/08/12 14:33:42 lmjm
-# Fail ftp'write if out of space.
-#
-# Revision 1.13 1992/03/20 21:01:03 lmjm
-# Added in the proxy ftp code from Edwards Reed <err@cinops.xerox.com>
-# Added ftp'delete from Aaron Wohl <aw0g+@andrew.cmu.edu>
-#
-# Revision 1.12 1992/02/06 23:25:56 lmjm
-# Moved code around so can use this as a lib for both mirror and ftpmail.
-# Time out opens. In case Unix doesn't bother to.
-#
-# Revision 1.11 1991/11/27 22:05:57 lmjm
-# Match the response code number at the start of a line allowing
-# for any leading junk.
-#
-# Revision 1.10 1991/10/23 22:42:20 lmjm
-# Added better timeout code.
-# Tried to optimise file transfer
-# Moved open/close code to not leak file handles.
-# Cleaned up the alarm code.
-# Added $fatalerror to show wether the ftp link is really dead.
-#
-# Revision 1.9 1991/10/07 18:30:35 lmjm
-# Made the timeout-read code work.
-# Added restarting file gets.
-# Be more verbose if ever have to call die.
-#
-# Revision 1.8 1991/09/17 22:53:16 lmjm
-# Spot when open_data_socket fails and return a failure rather than dying.
-#
-# Revision 1.7 1991/09/12 22:40:25 lmjm
-# Added Andrew Macpherson's patches for hosts without ip forwarding.
-#
-# Revision 1.6 1991/09/06 19:53:52 lmjm
-# Relaid out the code the way I like it!
-# Changed the debuggin to produce more "appropriate" messages
-# Fixed bugs in the ordering of put and dir listing.
-# Allow for hash printing when getting files (a la ftp).
-# Added the new commands from Al.
-# Don't print passwords in debugging.
-#
-# Revision 1.5 1991/08/29 16:23:49 lmjm
-# Timeout reads from the remote ftp server.
-# No longer call die expect on fatal errors. Just return fail codes.
-# Changed returns so higher up routines can tell whats happening.
-# Get expect/accept in correct order for dir listing.
-# When ftp_show is set then print hashes every 1k transferred (like ftp).
-# Allow for stripping returns out of incoming data.
-# Save last error in a global string.
-#
-# Revision 1.4 1991/08/14 21:04:58 lmjm
-# ftp'get now copes with ungetable files.
-# ftp'expect code changed such that the string_to_print is
-# ignored and the string sent back from the remote system is printed
-# instead.
-# Implemented patches from al. Removed spuiours tracing statements.
-#
-# Revision 1.3 1991/08/09 21:32:18 lmjm
-# Allow for another ok code on cwd's
-# Rejigger the log levels
-# Send \r\n for some odd ftp daemons
-#
-# Revision 1.2 1991/08/09 18:07:37 lmjm
-# Don't print messages unless ftp_show says to.
-#
-# Revision 1.1 1991/08/08 20:31:00 lmjm
-# Initial revision
-#
-
-require 'chat2.pl'; # into main
-eval "require 'socket.ph'" || eval "require 'sys/socket.ph'"
- || die "socket.ph missing: $!\n";
-
-
-package ftp;
-
-if( defined( &main'PF_INET ) ){
- $pf_inet = &main'PF_INET;
- $sock_stream = &main'SOCK_STREAM;
- local($name, $aliases, $proto) = getprotobyname( 'tcp' );
- $tcp_proto = $proto;
-}
-else {
- # XXX hardwired $PF_INET, $SOCK_STREAM, 'tcp'
- # but who the heck would change these anyway? (:-)
- $pf_inet = 2;
- $sock_stream = 1;
- $tcp_proto = 6;
-}
-
-# If the remote ftp daemon doesn't respond within this time presume its dead
-# or something.
-$timeout = 30;
-
-# Timeout a read if I don't get data back within this many seconds
-$timeout_read = 20 * $timeout;
-
-# Timeout an open
-$timeout_open = $timeout;
-
-# This is a "global" it contains the last response from the remote ftp server
-# for use in error messages
-$ftp'response = "";
-# Also ftp'NS is the socket containing the data coming in from the remote ls
-# command.
-
-# The size of block to be read or written when talking to the remote
-# ftp server
-$ftp'ftpbufsize = 4096;
-
-# How often to print a hash out, when debugging
-$ftp'hashevery = 1024;
-# Output a newline after this many hashes to prevent outputing very long lines
-$ftp'hashnl = 70;
-
-# If a proxy connection then who am I really talking to?
-$real_site = "";
-
-# This is just a tracing aid.
-$ftp_show = 0;
-sub ftp'debug
-{
- $ftp_show = $_[0];
-# if( $ftp_show ){
-# print STDERR "ftp debugging on\n";
-# }
-}
-
-sub ftp'set_timeout
-{
- $timeout = $_[0];
- $timeout_open = $timeout;
- $timeout_read = 20 * $timeout;
- if( $ftp_show ){
- print STDERR "ftp timeout set to $timeout\n";
- }
-}
-
-
-sub ftp'open_alarm
-{
- die "timeout: open";
-}
-
-sub ftp'timed_open
-{
- local( $site, $ftp_port, $retry_call, $attempts ) = @_;
- local( $connect_site, $connect_port );
- local( $res );
-
- alarm( $timeout_open );
-
- while( $attempts-- ){
- if( $ftp_show ){
- print STDERR "proxy connecting via $proxy_gateway [$proxy_ftp_port]\n" if $proxy;
- print STDERR "Connecting to $site";
- if( $ftp_port != 21 ){
- print STDERR " [port $ftp_port]";
- }
- print STDERR "\n";
- }
-
- if( $proxy ) {
- if( ! $proxy_gateway ) {
- # if not otherwise set
- $proxy_gateway = "internet-gateway";
- }
- if( $debug ) {
- print STDERR "using proxy services of $proxy_gateway, ";
- print STDERR "at $proxy_ftp_port\n";
- }
- $connect_site = $proxy_gateway;
- $connect_port = $proxy_ftp_port;
- $real_site = $site;
- }
- else {
- $connect_site = $site;
- $connect_port = $ftp_port;
- }
- if( ! &chat'open_port( $connect_site, $connect_port ) ){
- if( $retry_call ){
- print STDERR "Failed to connect\n" if $ftp_show;
- next;
- }
- else {
- print STDERR "proxy connection failed " if $proxy;
- print STDERR "Cannot open ftp to $connect_site\n" if $ftp_show;
- return 0;
- }
- }
- $res = &ftp'expect( $timeout,
- 120, "service unavailable to $site", 0,
- 220, "ready for login to $site", 1,
- 421, "service unavailable to $site, closing connection", 0);
- if( ! $res ){
- &chat'close();
- next;
- }
- return 1;
- }
- continue {
- print STDERR "Pausing between retries\n";
- sleep( $retry_pause );
- }
- return 0;
-}
-
-sub ftp'open
-{
- local( $site, $ftp_port, $retry_call, $attempts ) = @_;
-
- $SIG{ 'ALRM' } = "ftp\'open_alarm";
-
- local( $ret ) = eval "&timed_open( '$site', $ftp_port, $retry_call, $attempts )";
- alarm( 0 );
-
- if( $@ =~ /^timeout/ ){
- return -1;
- }
- return $ret;
-}
-
-sub ftp'login
-{
- local( $remote_user, $remote_password ) = @_;
-
- if( $proxy ){
- &ftp'send( "USER $remote_user\@$site" );
- }
- else {
- &ftp'send( "USER $remote_user" );
- }
- local( $val ) =
- &ftp'expect($timeout,
- 230, "$remote_user logged in", 1,
- 331, "send password for $remote_user", 2,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 530, "not logged in", 0,
- 332, "account for login not supported", 0,
-
- 421, "service unavailable, closing connection", 0);
- if( $val == 1 ){
- return 1;
- }
- if( $val == 2 ){
- # A password is needed
- &ftp'send( "PASS $remote_password" );
-
- $val = &ftp'expect( $timeout,
- 230, "$remote_user logged in", 1,
-
- 202, "command not implemented", 0,
- 332, "account for login not supported", 0,
-
- 530, "not logged in", 0,
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 503, "bad sequence of commands", 0,
-
- 421, "service unavailable, closing connection", 0);
- if( $val == 1){
- # Logged in
- return 1;
- }
- }
- # If I got here I failed to login
- return 0;
-}
-
-sub ftp'close
-{
- &ftp'quit();
- &chat'close();
-}
-
-# Change directory
-# return 1 if successful
-# 0 on a failure
-sub ftp'cwd
-{
- local( $dir ) = @_;
-
- &ftp'send( "CWD $dir" );
-
- return &ftp'expect( $timeout,
- 200, "working directory = $dir", 1,
- 250, "working directory = $dir", 1,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 502, "command not implemented", 0,
- 530, "not logged in", 0,
- 550, "cannot change directory", 0,
- 421, "service unavailable, closing connection", 0 );
-}
-
-# Get a full directory listing:
-# &ftp'dir( remote LIST options )
-# Start a list goin with the given options.
-# Presuming that the remote deamon uses the ls command to generate the
-# data to send back then then you can send it some extra options (eg: -lRa)
-# return 1 if sucessful and 0 on a failure
-sub ftp'dir_open
-{
- local( $options ) = @_;
- local( $ret );
-
- if( ! &ftp'open_data_socket() ){
- return 0;
- }
-
- if( $options ){
- &ftp'send( "LIST $options" );
- }
- else {
- &ftp'send( "LIST" );
- }
-
- $ret = &ftp'expect( $timeout,
- 150, "reading directory", 1,
-
- 125, "data connection already open?", 0,
-
- 450, "file unavailable", 0,
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 502, "command not implemented", 0,
- 530, "not logged in", 0,
-
- 421, "service unavailable, closing connection", 0 );
- if( ! $ret ){
- &ftp'close_data_socket;
- return 0;
- }
-
- #
- # the data should be coming at us now
- #
-
- # now accept
- accept(NS,S) || die "accept failed $!";
-
- return 1;
-}
-
-
-# Close down reading the result of a remote ls command
-# return 1 if successful and 0 on failure
-sub ftp'dir_close
-{
- local( $ret );
-
- # read the close
- #
- $ret = &ftp'expect($timeout,
- 226, "", 1, # transfer complete, closing connection
- 250, "", 1, # action completed
-
- 425, "can't open data connection", 0,
- 426, "connection closed, transfer aborted", 0,
- 451, "action aborted, local error", 0,
- 421, "service unavailable, closing connection", 0);
-
- # shut down our end of the socket
- &ftp'close_data_socket;
-
- if( ! $ret ){
- return 0;
- }
-
- return 1;
-}
-
-# Quit from the remote ftp server
-# return 1 if successful and 0 on failure
-sub ftp'quit
-{
- $site_command_check = 0;
- @site_command_list = ();
-
- &ftp'send("QUIT");
-
- return &ftp'expect($timeout,
- 221, "Goodbye", 1, # transfer complete, closing connection
-
- 500, "error quitting??", 0);
-}
-
-sub ftp'read_alarm
-{
- die "timeout: read";
-}
-
-sub ftp'timed_read
-{
- alarm( $timeout_read );
- return sysread( NS, $buf, $ftpbufsize );
-}
-
-sub ftp'read
-{
- $SIG{ 'ALRM' } = "ftp\'read_alarm";
-
- local( $ret ) = eval '&timed_read()';
- alarm( 0 );
-
- if( $@ =~ /^timeout/ ){
- return -1;
- }
- return $ret;
-}
-
-# Get a remote file back into a local file.
-# If no loc_fname passed then uses rem_fname.
-# returns 1 on success and 0 on failure
-sub ftp'get
-{
- local($rem_fname, $loc_fname, $restart ) = @_;
-
- if ($loc_fname eq "") {
- $loc_fname = $rem_fname;
- }
-
- if( ! &ftp'open_data_socket() ){
- print STDERR "Cannot open data socket\n";
- return 0;
- }
-
- if( $loc_fname ne '-' ){
- # Find the size of the target file
- local( $restart_at ) = &ftp'filesize( $loc_fname );
- if( $restart && $restart_at > 0 && &ftp'restart( $restart_at ) ){
- $restart = 1;
- # Make sure the file can be updated
- chmod( 0644, $loc_fname );
- }
- else {
- $restart = 0;
- unlink( $loc_fname );
- }
- }
-
- &ftp'send( "RETR $rem_fname" );
-
- local( $ret ) =
- &ftp'expect($timeout,
- 150, "receiving $rem_fname", 1,
-
- 125, "data connection already open?", 0,
-
- 450, "file unavailable", 2,
- 550, "file unavailable", 2,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 530, "not logged in", 0,
-
- 421, "service unavailable, closing connection", 0);
- if( $ret != 1 ){
- print STDERR "Failure on RETR command\n";
-
- # shut down our end of the socket
- &ftp'close_data_socket;
-
- return 0;
- }
-
- #
- # the data should be coming at us now
- #
-
- # now accept
- accept(NS,S) || die "accept failed: $!";
-
- #
- # open the local fname
- # concatenate on the end if restarting, else just overwrite
- if( !open(FH, ($restart ? '>>' : '>') . $loc_fname) ){
- print STDERR "Cannot create local file $loc_fname\n";
-
- # shut down our end of the socket
- &ftp'close_data_socket;
-
- return 0;
- }
-
-# while (<NS>) {
-# print FH ;
-# }
-
- local( $start_time ) = time;
- local( $bytes, $lasthash, $hashes ) = (0, 0, 0);
- while( ($len = &ftp'read()) > 0 ){
- $bytes += $len;
- if( $strip_cr ){
- $ftp'buf =~ s/\r//g;
- }
- if( $ftp_show ){
- while( $bytes > ($lasthash + $ftp'hashevery) ){
- print STDERR '#';
- $lasthash += $ftp'hashevery;
- $hashes++;
- if( ($hashes % $ftp'hashnl) == 0 ){
- print STDERR "\n";
- }
- }
- }
- if( ! print FH $ftp'buf ){
- print STDERR "\nfailed to write data";
- return 0;
- }
- }
- close( FH );
-
- # shut down our end of the socket
- &ftp'close_data_socket;
-
- if( $len < 0 ){
- print STDERR "\ntimed out reading data!\n";
-
- return 0;
- }
-
- if( $ftp_show ){
- if( $hashes && ($hashes % $ftp'hashnl) != 0 ){
- print STDERR "\n";
- }
- local( $secs ) = (time - $start_time);
- if( $secs <= 0 ){
- $secs = 1; # To avoid a divide by zero;
- }
-
- local( $rate ) = int( $bytes / $secs );
- print STDERR "Got $bytes bytes ($rate bytes/sec)\n";
- }
-
- #
- # read the close
- #
-
- $ret = &ftp'expect($timeout,
- 226, "Got file", 1, # transfer complete, closing connection
- 250, "Got file", 1, # action completed
-
- 110, "restart not supported", 0,
- 425, "can't open data connection", 0,
- 426, "connection closed, transfer aborted", 0,
- 451, "action aborted, local error", 0,
- 421, "service unavailable, closing connection", 0);
-
- return $ret;
-}
-
-sub ftp'delete
-{
- local( $rem_fname, $val ) = @_;
-
- &ftp'send("DELE $rem_fname" );
- $val = &ftp'expect( $timeout,
- 250,"Deleted $rem_fname", 1,
- 550,"Permission denied",0
- );
- return $val == 1;
-}
-
-sub ftp'deldir
-{
- local( $fname ) = @_;
-
- # not yet implemented
- # RMD
-}
-
-# UPDATE ME!!!!!!
-# Add in the hash printing and newline conversion
-sub ftp'put
-{
- local( $loc_fname, $rem_fname ) = @_;
- local( $strip_cr );
-
- if ($loc_fname eq "") {
- $loc_fname = $rem_fname;
- }
-
- if( ! &ftp'open_data_socket() ){
- return 0;
- }
-
- &ftp'send("STOR $rem_fname");
-
- #
- # the data should be coming at us now
- #
-
- local( $ret ) =
- &ftp'expect($timeout,
- 150, "sending $loc_fname", 1,
-
- 125, "data connection already open?", 0,
- 450, "file unavailable", 0,
-
- 532, "need account for storing files", 0,
- 452, "insufficient storage on system", 0,
- 553, "file name not allowed", 0,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 530, "not logged in", 0,
-
- 421, "service unavailable, closing connection", 0);
-
- if( $ret != 1 ){
- # shut down our end of the socket
- &ftp'close_data_socket;
-
- return 0;
- }
-
-
- #
- # the data should be coming at us now
- #
-
- # now accept
- accept(NS,S) || die "accept failed: $!";
-
- #
- # open the local fname
- #
- if( !open(FH, "<$loc_fname") ){
- print STDERR "Cannot open local file $loc_fname\n";
-
- # shut down our end of the socket
- &ftp'close_data_socket;
-
- return 0;
- }
-
- while (<FH>) {
- print NS ;
- }
- close(FH);
-
- # shut down our end of the socket to signal EOF
- &ftp'close_data_socket;
-
- #
- # read the close
- #
-
- $ret = &ftp'expect($timeout,
- 226, "file put", 1, # transfer complete, closing connection
- 250, "file put", 1, # action completed
-
- 110, "restart not supported", 0,
- 425, "can't open data connection", 0,
- 426, "connection closed, transfer aborted", 0,
- 451, "action aborted, local error", 0,
- 551, "page type unknown", 0,
- 552, "storage allocation exceeded", 0,
-
- 421, "service unavailable, closing connection", 0);
- if( ! $ret ){
- print STDERR "error putting $loc_fname\n";
- }
- return $ret;
-}
-
-sub ftp'restart
-{
- local( $restart_point, $ret ) = @_;
-
- &ftp'send("REST $restart_point");
-
- #
- # see what they say
-
- $ret = &ftp'expect($timeout,
- 350, "restarting at $restart_point", 1,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 502, "REST not implemented", 2,
- 530, "not logged in", 0,
- 554, "REST not implemented", 2,
-
- 421, "service unavailable, closing connection", 0);
- return $ret;
-}
-
-# Set the file transfer type
-sub ftp'type
-{
- local( $type ) = @_;
-
- &ftp'send("TYPE $type");
-
- #
- # see what they say
-
- $ret = &ftp'expect($timeout,
- 200, "file type set to $type", 1,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 504, "Invalid form or byte size for type $type", 0,
-
- 421, "service unavailable, closing connection", 0);
- return $ret;
-}
-
-$site_command_check = 0;
-@site_command_list = ();
-
-# routine to query the remote server for 'SITE' commands supported
-sub ftp'site_commands
-{
- local( $ret );
-
- # if we havent sent a 'HELP SITE', send it now
- if( !$site_command_check ){
-
- $site_command_check = 1;
-
- &ftp'send( "HELP SITE" );
-
- # assume the line in the HELP SITE response with the 'HELP'
- # command is the one for us
- $ret = &ftp'expect( $timeout,
- ".*HELP.*", "", "\$1",
- 214, "", "0",
- 202, "", "0" );
-
- if( $ret eq "0" ){
- print STDERR "No response from HELP SITE\n" if( $ftp_show );
- }
-
- @site_command_list = split(/\s+/, $ret);
- }
-
- return @site_command_list;
-}
-
-# return the pwd, or null if we can't get the pwd
-sub ftp'pwd
-{
- local( $ret, $cwd );
-
- &ftp'send( "PWD" );
-
- #
- # see what they say
-
- $ret = &ftp'expect( $timeout,
- 257, "working dir is", 1,
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 502, "PWD not implemented", 0,
- 550, "file unavailable", 0,
-
- 421, "service unavailable, closing connection", 0 );
- if( $ret ){
- if( $ftp'response =~ /^257\s"(.*)"\s.*$/ ){
- $cwd = $1;
- }
- }
- return $cwd;
-}
-
-# return 1 for success, 0 for failure
-sub ftp'mkdir
-{
- local( $path ) = @_;
- local( $ret );
-
- &ftp'send( "MKD $path" );
-
- #
- # see what they say
-
- $ret = &ftp'expect( $timeout,
- 257, "made directory $path", 1,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 502, "MKD not implemented", 0,
- 530, "not logged in", 0,
- 550, "file unavailable", 0,
-
- 421, "service unavailable, closing connection", 0 );
- return $ret;
-}
-
-# return 1 for success, 0 for failure
-sub ftp'chmod
-{
- local( $path, $mode ) = @_;
- local( $ret );
-
- &ftp'send( sprintf( "SITE CHMOD %o $path", $mode ) );
-
- #
- # see what they say
-
- $ret = &ftp'expect( $timeout,
- 200, "chmod $mode $path succeeded", 1,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 502, "CHMOD not implemented", 0,
- 530, "not logged in", 0,
- 550, "file unavailable", 0,
-
- 421, "service unavailable, closing connection", 0 );
- return $ret;
-}
-
-# rename a file
-sub ftp'rename
-{
- local( $old_name, $new_name ) = @_;
- local( $ret );
-
- &ftp'send( "RNFR $old_name" );
-
- #
- # see what they say
-
- $ret = &ftp'expect( $timeout,
- 350, "", 1,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 502, "RNFR not implemented", 0,
- 530, "not logged in", 0,
- 550, "file unavailable", 0,
- 450, "file unavailable", 0,
-
- 421, "service unavailable, closing connection", 0);
-
-
- # check if the "rename from" occurred ok
- if( $ret ) {
- &ftp'send( "RNTO $new_name" );
-
- #
- # see what they say
-
- $ret = &ftp'expect( $timeout,
- 250, "rename $old_name to $new_name", 1,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 502, "RNTO not implemented", 0,
- 503, "bad sequence of commands", 0,
- 530, "not logged in", 0,
- 532, "need account for storing files", 0,
- 553, "file name not allowed", 0,
-
- 421, "service unavailable, closing connection", 0);
- }
-
- return $ret;
-}
-
-
-sub ftp'quote
-{
- local( $cmd ) = @_;
-
- &ftp'send( $cmd );
-
- return &ftp'expect( $timeout,
- 200, "Remote '$cmd' OK", 1,
- 500, "error in remote '$cmd'", 0 );
-}
-
-# ------------------------------------------------------------------------------
-# These are the lower level support routines
-
-sub ftp'expectgot
-{
- ($ftp'response, $ftp'fatalerror) = @_;
- if( $ftp_show ){
- print STDERR "$ftp'response\n";
- }
-}
-
-#
-# create the list of parameters for chat'expect
-#
-# ftp'expect(time_out, {value, string_to_print, return value});
-# if the string_to_print is "" then nothing is printed
-# the last response is stored in $ftp'response
-#
-# NOTE: lmjm has changed this code such that the string_to_print is
-# ignored and the string sent back from the remote system is printed
-# instead.
-#
-sub ftp'expect {
- local( $ret );
- local( $time_out );
- local( $expect_args );
-
- $ftp'response = '';
- $ftp'fatalerror = 0;
-
- @expect_args = ();
-
- $time_out = shift(@_);
-
- while( @_ ){
- local( $code ) = shift( @_ );
- local( $pre ) = '^';
- if( $code =~ /^\d/ ){
- $pre =~ "[.|\n]*^";
- }
- push( @expect_args, "$pre(" . $code . " .*)\\015\\n" );
- shift( @_ );
- push( @expect_args,
- "&ftp'expectgot( \$1, 0 ); " . shift( @_ ) );
- }
-
- # Treat all unrecognised lines as continuations
- push( @expect_args, "^(.*)\\015\\n" );
- push( @expect_args, "&ftp'expectgot( \$1, 0 ); 100" );
-
- # add patterns TIMEOUT and EOF
-
- push( @expect_args, 'TIMEOUT' );
- push( @expect_args, "&ftp'expectgot( \"timed out\", 1 ); 0" );
-
- push( @expect_args, 'EOF' );
- push( @expect_args, "&ftp'expectgot( \"remote server gone away\", 1 ); 0" );
-
- if( $ftp_show > 9 ){
- &printargs( $time_out, @expect_args );
- }
-
- $ret = &chat'expect( $time_out, @expect_args );
- if( $ret == 100 ){
- # we saw a continuation line, wait for the end
- push( @expect_args, "^.*\n" );
- push( @expect_args, "100" );
-
- while( $ret == 100 ){
- $ret = &chat'expect( $time_out, @expect_args );
- }
- }
-
- return $ret;
-}
-
-#
-# opens NS for io
-#
-sub ftp'open_data_socket
-{
- local( $ret );
- local( $hostname );
- local( $sockaddr, $name, $aliases, $proto, $port );
- local( $type, $len, $thisaddr, $myaddr, $a, $b, $c, $d );
- local( $mysockaddr, $family, $hi, $lo );
-
-
- $sockaddr = 'S n a4 x8';
- chop( $hostname = `hostname` );
-
- $port = "ftp";
-
- ($name, $aliases, $proto) = getprotobyname( 'tcp' );
- ($name, $aliases, $port) = getservbyname( $port, 'tcp' );
-
-# ($name, $aliases, $type, $len, $thisaddr) =
-# gethostbyname( $hostname );
- ($a,$b,$c,$d) = unpack( 'C4', $chat'thisaddr );
-
-# $this = pack( $sockaddr, &main'AF_INET, 0, $thisaddr );
- $this = $chat'thisproc;
-
- socket(S, $pf_inet, $sock_stream, $proto ) || die "socket: $!";
- bind(S, $this) || die "bind: $!";
-
- # get the port number
- $mysockaddr = getsockname(S);
- ($family, $port, $myaddr) = unpack( $sockaddr, $mysockaddr );
-
- $hi = ($port >> 8) & 0x00ff;
- $lo = $port & 0x00ff;
-
- #
- # we MUST do a listen before sending the port otherwise
- # the PORT may fail
- #
- listen( S, 5 ) || die "listen";
-
- &ftp'send( "PORT $a,$b,$c,$d,$hi,$lo" );
-
- return &ftp'expect($timeout,
- 200, "PORT command successful", 1,
- 250, "PORT command successful", 1 ,
-
- 500, "syntax error", 0,
- 501, "syntax error", 0,
- 530, "not logged in", 0,
-
- 421, "service unavailable, closing connection", 0);
-}
-
-sub ftp'close_data_socket
-{
- close(NS);
-}
-
-sub ftp'send
-{
- local($send_cmd) = @_;
- if( $send_cmd =~ /\n/ ){
- print STDERR "ERROR, \\n in send string for $send_cmd\n";
- }
-
- if( $ftp_show ){
- local( $sc ) = $send_cmd;
-
- if( $send_cmd =~ /^PASS/){
- $sc = "PASS <somestring>";
- }
- print STDERR "---> $sc\n";
- }
-
- &chat'print( "$send_cmd\r\n" );
-}
-
-sub ftp'printargs
-{
- while( @_ ){
- print STDERR shift( @_ ) . "\n";
- }
-}
-
-sub ftp'filesize
-{
- local( $fname ) = @_;
-
- if( ! -f $fname ){
- return -1;
- }
-
- return (stat( _ ))[ 7 ];
-
-}
-
-# make this package return true
-1;
diff --git a/contrib/perl5/lib/getcwd.pl b/contrib/perl5/lib/getcwd.pl
deleted file mode 100644
index eca6ba1..0000000
--- a/contrib/perl5/lib/getcwd.pl
+++ /dev/null
@@ -1,71 +0,0 @@
-# By Brandon S. Allbery
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Cwd
-#
-#
-# Usage: $cwd = &getcwd;
-
-sub getcwd
-{
- local($dotdots, $cwd, @pst, @cst, $dir, @tst);
-
- unless (@cst = stat('.'))
- {
- warn "stat(.): $!";
- return '';
- }
- $cwd = '';
- do
- {
- $dotdots .= '/' if $dotdots;
- $dotdots .= '..';
- @pst = @cst;
- unless (opendir(getcwd'PARENT, $dotdots)) #'))
- {
- warn "opendir($dotdots): $!";
- return '';
- }
- unless (@cst = stat($dotdots))
- {
- warn "stat($dotdots): $!";
- closedir(getcwd'PARENT); #');
- return '';
- }
- if ($pst[$[] == $cst[$[] && $pst[$[ + 1] == $cst[$[ + 1])
- {
- $dir = '';
- }
- else
- {
- do
- {
- unless (defined ($dir = readdir(getcwd'PARENT))) #'))
- {
- warn "readdir($dotdots): $!";
- closedir(getcwd'PARENT); #');
- return '';
- }
- unless (@tst = lstat("$dotdots/$dir"))
- {
- # warn "lstat($dotdots/$dir): $!";
- # closedir(getcwd'PARENT); #');
- # return '';
- }
- }
- while ($dir eq '.' || $dir eq '..' || $tst[$[] != $pst[$[] ||
- $tst[$[ + 1] != $pst[$[ + 1]);
- }
- $cwd = "$dir/$cwd";
- closedir(getcwd'PARENT); #');
- } while ($dir ne '');
- chop($cwd);
- $cwd;
-}
-
-1;
diff --git a/contrib/perl5/lib/getopt.pl b/contrib/perl5/lib/getopt.pl
deleted file mode 100644
index 77d8d89..0000000
--- a/contrib/perl5/lib/getopt.pl
+++ /dev/null
@@ -1,49 +0,0 @@
-;# $RCSfile: getopt.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:23:58 $
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternatives: Getopt::Long or Getopt::Std
-#
-;# Process single-character switches with switch clustering. Pass one argument
-;# which is a string containing all switches that take an argument. For each
-;# switch found, sets $opt_x (where x is the switch name) to the value of the
-;# argument, or 1 if no argument. Switches which take an argument don't care
-;# whether there is a space between the switch and the argument.
-
-;# Usage:
-;# do Getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect.
-
-sub Getopt {
- local($argumentative) = @_;
- local($_,$first,$rest);
- local($[) = 0;
-
- while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
- ($first,$rest) = ($1,$2);
- if (index($argumentative,$first) >= $[) {
- if ($rest ne '') {
- shift(@ARGV);
- }
- else {
- shift(@ARGV);
- $rest = shift(@ARGV);
- }
- ${"opt_$first"} = $rest;
- }
- else {
- ${"opt_$first"} = 1;
- if ($rest ne '') {
- $ARGV[0] = "-$rest";
- }
- else {
- shift(@ARGV);
- }
- }
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/getopts.pl b/contrib/perl5/lib/getopts.pl
deleted file mode 100644
index 4a50b8f..0000000
--- a/contrib/perl5/lib/getopts.pl
+++ /dev/null
@@ -1,66 +0,0 @@
-;# getopts.pl - a better getopt.pl
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternatives: Getopt::Long or Getopt::Std
-#
-;# Usage:
-;# do Getopts('a:bc'); # -a takes arg. -b & -c not. Sets opt_* as a
-;# # side effect.
-
-sub Getopts {
- local($argumentative) = @_;
- local(@args,$_,$first,$rest);
- local($errs) = 0;
- local($[) = 0;
-
- @args = split( / */, $argumentative );
- while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
- ($first,$rest) = ($1,$2);
- $pos = index($argumentative,$first);
- if($pos >= $[) {
- if($args[$pos+1] eq ':') {
- shift(@ARGV);
- if($rest eq '') {
- ++$errs unless(@ARGV);
- $rest = shift(@ARGV);
- }
- eval "
- push(\@opt_$first, \$rest);
- if(\$opt_$first eq '') {
- \$opt_$first = \$rest;
- }
- else {
- \$opt_$first .= ' ' . \$rest;
- }
- ";
- }
- else {
- eval "\$opt_$first = 1";
- if($rest eq '') {
- shift(@ARGV);
- }
- else {
- $ARGV[0] = "-$rest";
- }
- }
- }
- else {
- print STDERR "Unknown option: $first\n";
- ++$errs;
- if($rest ne '') {
- $ARGV[0] = "-$rest";
- }
- else {
- shift(@ARGV);
- }
- }
- }
- $errs == 0;
-}
-
-1;
diff --git a/contrib/perl5/lib/hostname.pl b/contrib/perl5/lib/hostname.pl
deleted file mode 100644
index 63eea8f..0000000
--- a/contrib/perl5/lib/hostname.pl
+++ /dev/null
@@ -1,31 +0,0 @@
-# From: asherman@fmrco.com (Aaron Sherman)
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Sys::Hostname
-#
-sub hostname
-{
- local(*P,@tmp,$hostname,$_);
- if (open(P,"hostname 2>&1 |") && (@tmp = <P>) && close(P))
- {
- chop($hostname = $tmp[$#tmp]);
- }
- elsif (open(P,"uname -n 2>&1 |") && (@tmp = <P>) && close(P))
- {
- chop($hostname = $tmp[$#tmp]);
- }
- else
- {
- die "$0: Cannot get hostname from 'hostname' or 'uname -n'\n";
- }
- @tmp = ();
- close P; # Just in case we failed in an odd spot....
- $hostname;
-}
-
-1;
diff --git a/contrib/perl5/lib/importenv.pl b/contrib/perl5/lib/importenv.pl
deleted file mode 100644
index c28ffd0..0000000
--- a/contrib/perl5/lib/importenv.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-;# $RCSfile: importenv.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:02 $
-
-;# This file, when interpreted, pulls the environment into normal variables.
-;# Usage:
-;# require 'importenv.pl';
-;# or
-;# #include <importenv.pl>
-
-local($tmp,$key) = '';
-
-foreach $key (keys(%ENV)) {
- $tmp .= "\$$key = \$ENV{'$key'};" if $key =~ /^[A-Za-z]\w*$/;
-}
-eval $tmp;
-
-1;
diff --git a/contrib/perl5/lib/integer.pm b/contrib/perl5/lib/integer.pm
deleted file mode 100644
index 998574f..0000000
--- a/contrib/perl5/lib/integer.pm
+++ /dev/null
@@ -1,91 +0,0 @@
-package integer;
-
-=head1 NAME
-
-integer - Perl pragma to use integer arithmetic instead of floating point
-
-=head1 SYNOPSIS
-
- use integer;
- $x = 10/3;
- # $x is now 3, not 3.33333333333333333
-
-=head1 DESCRIPTION
-
-This tells the compiler to use integer operations from here to the end
-of the enclosing BLOCK. On many machines, this doesn't matter a great
-deal for most computations, but on those without floating point
-hardware, it can make a big difference in performance.
-
-Note that this only affects how most of the arithmetic and relational
-B<operators> handle their operands and results, and B<not> how all
-numbers everywhere are treated. Specifically, C<use integer;> has the
-effect that before computing the results of the arithmetic operators
-(+, -, *, /, %, +=, -=, *=, /=, %=, and unary minus), the comparison
-operators (<, <=, >, >=, ==, !=, <=>), and the bitwise operators (|, &,
-^, <<, >>, |=, &=, ^=, <<=, >>=), the operands have their fractional
-portions truncated (or floored), and the result will have its
-fractional portion truncated as well. In addition, the range of
-operands and results is restricted to that of familiar two's complement
-integers, i.e., -(2**31) .. (2**31-1) on 32-bit architectures, and
--(2**63) .. (2**63-1) on 64-bit architectures. For example, this code
-
- use integer;
- $x = 5.8;
- $y = 2.5;
- $z = 2.7;
- $a = 2**31 - 1; # Largest positive integer on 32-bit machines
- $, = ", ";
- print $x, -$x, $x + $y, $x - $y, $x / $y, $x * $y, $y == $z, $a, $a + 1;
-
-will print: 5.8, -5, 7, 3, 2, 10, 1, 2147483647, -2147483648
-
-Note that $x is still printed as having its true non-integer value of
-5.8 since it wasn't operated on. And note too the wrap-around from the
-largest positive integer to the largest negative one. Also, arguments
-passed to functions and the values returned by them are B<not> affected
-by C<use integer;>. E.g.,
-
- srand(1.5);
- $, = ", ";
- print sin(.5), cos(.5), atan2(1,2), sqrt(2), rand(10);
-
-will give the same result with or without C<use integer;> The power
-operator C<**> is also not affected, so that 2 ** .5 is always the
-square root of 2. Now, it so happens that the pre- and post- increment
-and decrement operators, ++ and --, are not affected by C<use integer;>
-either. Some may rightly consider this to be a bug -- but at least it's
-a long-standing one.
-
-Finally, C<use integer;> also has an additional affect on the bitwise
-operators. Normally, the operands and results are treated as
-B<unsigned> integers, but with C<use integer;> the operands and results
-are B<signed>. This means, among other things, that ~0 is -1, and -2 &
--5 is -6.
-
-Internally, native integer arithmetic (as provided by your C compiler)
-is used. This means that Perl's own semantics for arithmetic
-operations may not be preserved. One common source of trouble is the
-modulus of negative numbers, which Perl does one way, but your hardware
-may do another.
-
- % perl -le 'print (4 % -3)'
- -2
- % perl -Minteger -le 'print (4 % -3)'
- 1
-
-See L<perlmodlib/"Pragmatic Modules">, L<perlop/"Integer Arithmetic">
-
-=cut
-
-$integer::hint_bits = 0x1;
-
-sub import {
- $^H |= $integer::hint_bits;
-}
-
-sub unimport {
- $^H &= ~$integer::hint_bits;
-}
-
-1;
diff --git a/contrib/perl5/lib/less.pm b/contrib/perl5/lib/less.pm
deleted file mode 100644
index b3afef0..0000000
--- a/contrib/perl5/lib/less.pm
+++ /dev/null
@@ -1,23 +0,0 @@
-package less;
-
-=head1 NAME
-
-less - perl pragma to request less of something from the compiler
-
-=head1 SYNOPSIS
-
- use less; # unimplemented
-
-=head1 DESCRIPTION
-
-Currently unimplemented, this may someday be a compiler directive
-to make certain trade-offs, such as perhaps
-
- use less 'memory';
- use less 'CPU';
- use less 'fat';
-
-
-=cut
-
-1;
diff --git a/contrib/perl5/lib/lib.pm b/contrib/perl5/lib/lib.pm
deleted file mode 100644
index 077dd63..0000000
--- a/contrib/perl5/lib/lib.pm
+++ /dev/null
@@ -1,136 +0,0 @@
-package lib;
-
-use 5.005_64;
-use Config;
-
-my $archname = defined($Config{'archname'}) ? $Config{'archname'} : '';
-my $ver = defined($Config{'version'}) ? $Config{'version'} : '';
-my @inc_version_list = defined($Config{'inc_version_list'}) ?
- reverse split / /, $Config{'inc_version_list'} : ();
-
-our @ORIG_INC = @INC; # take a handy copy of 'original' value
-our $VERSION = '0.5564';
-
-sub import {
- shift;
-
- my %names;
- foreach (reverse @_) {
- if ($_ eq '') {
- require Carp;
- Carp::carp("Empty compile time value given to use lib");
- }
- if (-e && ! -d _) {
- require Carp;
- Carp::carp("Parameter to use lib must be directory, not file");
- }
- unshift(@INC, $_);
- # Add any previous version directories we found at configure time
- foreach my $incver (@inc_version_list)
- {
- unshift(@INC, "$_/$incver") if -d "$_/$incver";
- }
- # Put a corresponding archlib directory infront of $_ if it
- # looks like $_ has an archlib directory below it.
- unshift(@INC, "$_/$archname") if -d "$_/$archname/auto";
- unshift(@INC, "$_/$ver") if -d "$_/$ver";
- unshift(@INC, "$_/$ver/$archname") if -d "$_/$ver/$archname";
- }
-
- # remove trailing duplicates
- @INC = grep { ++$names{$_} == 1 } @INC;
- return;
-}
-
-
-sub unimport {
- shift;
-
- my %names;
- foreach (@_) {
- ++$names{$_};
- ++$names{"$_/$archname"} if -d "$_/$archname/auto";
- ++$names{"$_/$ver"} if -d "$_/$ver";
- ++$names{"$_/$ver/$archname"} if -d "$_/$ver/$archname";
- }
-
- # Remove ALL instances of each named directory.
- @INC = grep { !exists $names{$_} } @INC;
- return;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-lib - manipulate @INC at compile time
-
-=head1 SYNOPSIS
-
- use lib LIST;
-
- no lib LIST;
-
-=head1 DESCRIPTION
-
-This is a small simple module which simplifies the manipulation of @INC
-at compile time.
-
-It is typically used to add extra directories to perl's search path so
-that later C<use> or C<require> statements will find modules which are
-not located on perl's default search path.
-
-=head2 Adding directories to @INC
-
-The parameters to C<use lib> are added to the start of the perl search
-path. Saying
-
- use lib LIST;
-
-is I<almost> the same as saying
-
- BEGIN { unshift(@INC, LIST) }
-
-For each directory in LIST (called $dir here) the lib module also
-checks to see if a directory called $dir/$archname/auto exists.
-If so the $dir/$archname directory is assumed to be a corresponding
-architecture specific directory and is added to @INC in front of $dir.
-
-To avoid memory leaks, all trailing duplicate entries in @INC are
-removed.
-
-=head2 Deleting directories from @INC
-
-You should normally only add directories to @INC. If you need to
-delete directories from @INC take care to only delete those which you
-added yourself or which you are certain are not needed by other modules
-in your script. Other modules may have added directories which they
-need for correct operation.
-
-The C<no lib> statement deletes all instances of each named directory
-from @INC.
-
-For each directory in LIST (called $dir here) the lib module also
-checks to see if a directory called $dir/$archname/auto exists.
-If so the $dir/$archname directory is assumed to be a corresponding
-architecture specific directory and is also deleted from @INC.
-
-=head2 Restoring original @INC
-
-When the lib module is first loaded it records the current value of @INC
-in an array C<@lib::ORIG_INC>. To restore @INC to that value you
-can say
-
- @INC = @lib::ORIG_INC;
-
-
-=head1 SEE ALSO
-
-FindBin - optional module which deals with paths relative to the source file.
-
-=head1 AUTHOR
-
-Tim Bunce, 2nd June 1995.
-
-=cut
diff --git a/contrib/perl5/lib/locale.pm b/contrib/perl5/lib/locale.pm
deleted file mode 100644
index 6314aca..0000000
--- a/contrib/perl5/lib/locale.pm
+++ /dev/null
@@ -1,38 +0,0 @@
-package locale;
-
-=head1 NAME
-
-locale - Perl pragma to use and avoid POSIX locales for built-in operations
-
-=head1 SYNOPSIS
-
- @x = sort @y; # ASCII sorting order
- {
- use locale;
- @x = sort @y; # Locale-defined sorting order
- }
- @x = sort @y; # ASCII sorting order again
-
-=head1 DESCRIPTION
-
-This pragma tells the compiler to enable (or disable) the use of POSIX
-locales for built-in operations (LC_CTYPE for regular expressions, and
-LC_COLLATE for string comparison). Each "use locale" or "no locale"
-affects statements to the end of the enclosing BLOCK.
-
-See L<perllocale> for more detailed information on how Perl supports
-locales.
-
-=cut
-
-$locale::hint_bits = 0x800;
-
-sub import {
- $^H |= $locale::hint_bits;
-}
-
-sub unimport {
- $^H &= ~$locale::hint_bits;
-}
-
-1;
diff --git a/contrib/perl5/lib/look.pl b/contrib/perl5/lib/look.pl
deleted file mode 100644
index ccc9b61..0000000
--- a/contrib/perl5/lib/look.pl
+++ /dev/null
@@ -1,50 +0,0 @@
-;# Usage: &look(*FILEHANDLE,$key,$dict,$fold)
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-;# Sets file position in FILEHANDLE to be first line greater than or equal
-;# (stringwise) to $key. Pass flags for dictionary order and case folding.
-
-sub look {
- local(*FH,$key,$dict,$fold) = @_;
- local($max,$min,$mid,$_);
- local($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat(FH);
- $blksize = 8192 unless $blksize;
- $key =~ s/[^\w\s]//g if $dict;
- $key = lc $key if $fold;
- $max = int($size / $blksize);
- while ($max - $min > 1) {
- $mid = int(($max + $min) / 2);
- seek(FH,$mid * $blksize,0);
- $_ = <FH> if $mid; # probably a partial line
- $_ = <FH>;
- chop;
- s/[^\w\s]//g if $dict;
- $_ = lc $_ if $fold;
- if ($_ lt $key) {
- $min = $mid;
- }
- else {
- $max = $mid;
- }
- }
- $min *= $blksize;
- seek(FH,$min,0);
- <FH> if $min;
- while (<FH>) {
- chop;
- s/[^\w\s]//g if $dict;
- $_ = lc $_ if $fold;
- last if $_ ge $key;
- $min = tell(FH);
- }
- seek(FH,$min,0);
- $min;
-}
-
-1;
diff --git a/contrib/perl5/lib/newgetopt.pl b/contrib/perl5/lib/newgetopt.pl
deleted file mode 100644
index 0b7eed8..0000000
--- a/contrib/perl5/lib/newgetopt.pl
+++ /dev/null
@@ -1,68 +0,0 @@
-# newgetopt.pl -- new options parsing.
-# Now just a wrapper around the Getopt::Long module.
-# $Id: newgetopt.pl,v 1.17 1996-10-02 11:17:16+02 jv Exp $
-
-{ package newgetopt;
-
- # Values for $order. See GNU getopt.c for details.
- $REQUIRE_ORDER = 0;
- $PERMUTE = 1;
- $RETURN_IN_ORDER = 2;
-
- # Handle POSIX compliancy.
- if ( defined $ENV{"POSIXLY_CORRECT"} ) {
- $autoabbrev = 0; # no automatic abbrev of options (???)
- $getopt_compat = 0; # disallow '+' to start options
- $option_start = "(--|-)";
- $order = $REQUIRE_ORDER;
- $bundling = 0;
- $passthrough = 0;
- }
- else {
- $autoabbrev = 1; # automatic abbrev of options
- $getopt_compat = 1; # allow '+' to start options
- $option_start = "(--|-|\\+)";
- $order = $PERMUTE;
- $bundling = 0;
- $passthrough = 0;
- }
-
- # Other configurable settings.
- $debug = 0; # for debugging
- $ignorecase = 1; # ignore case when matching options
- $argv_end = "--"; # don't change this!
-}
-
-use Getopt::Long;
-
-################ Subroutines ################
-
-sub NGetOpt {
-
- $Getopt::Long::debug = $newgetopt::debug
- if defined $newgetopt::debug;
- $Getopt::Long::autoabbrev = $newgetopt::autoabbrev
- if defined $newgetopt::autoabbrev;
- $Getopt::Long::getopt_compat = $newgetopt::getopt_compat
- if defined $newgetopt::getopt_compat;
- $Getopt::Long::option_start = $newgetopt::option_start
- if defined $newgetopt::option_start;
- $Getopt::Long::order = $newgetopt::order
- if defined $newgetopt::order;
- $Getopt::Long::bundling = $newgetopt::bundling
- if defined $newgetopt::bundling;
- $Getopt::Long::ignorecase = $newgetopt::ignorecase
- if defined $newgetopt::ignorecase;
- $Getopt::Long::ignorecase = $newgetopt::ignorecase
- if defined $newgetopt::ignorecase;
- $Getopt::Long::passthrough = $newgetopt::passthrough
- if defined $newgetopt::passthrough;
-
- &GetOptions;
-}
-
-################ Package return ################
-
-1;
-
-################ End of newgetopt.pl ################
diff --git a/contrib/perl5/lib/open.pm b/contrib/perl5/lib/open.pm
deleted file mode 100644
index cdd20ac..0000000
--- a/contrib/perl5/lib/open.pm
+++ /dev/null
@@ -1,76 +0,0 @@
-package open;
-$open::hint_bits = 0x20000;
-
-sub import {
- shift;
- die "`use open' needs explicit list of disciplines" unless @_;
- $^H |= $open::hint_bits;
- while (@_) {
- my $type = shift;
- if ($type =~ /^(IN|OUT)\z/s) {
- my $discp = shift;
- unless ($discp =~ /^\s*:(raw|crlf)\s*\z/s) {
- die "Unknown discipline '$discp'";
- }
- $^H{"open_$type"} = $discp;
- }
- else {
- die "Unknown discipline class '$type'";
- }
- }
-}
-
-1;
-__END__
-
-=head1 NAME
-
-open - perl pragma to set default disciplines for input and output
-
-=head1 SYNOPSIS
-
- use open IN => ":crlf", OUT => ":raw";
-
-=head1 DESCRIPTION
-
-The open pragma is used to declare one or more default disciplines for
-I/O operations. Any open() and readpipe() (aka qx//) operators found
-within the lexical scope of this pragma will use the declared defaults.
-Neither open() with an explicit set of disciplines, nor sysopen() are
-influenced by this pragma.
-
-Only the two pseudo-disciplines ":raw" and ":crlf" are currently
-available.
-
-The ":raw" discipline corresponds to "binary mode" and the ":crlf"
-discipline corresponds to "text mode" on platforms that distinguish
-between the two modes when opening files (which is many DOS-like
-platforms, including Windows). These two disciplines are currently
-no-ops on platforms where binmode() is a no-op, but will be
-supported everywhere in future.
-
-=head1 UNIMPLEMENTED FUNCTIONALITY
-
-Full-fledged support for I/O disciplines is currently unimplemented.
-When they are eventually supported, this pragma will serve as one of
-the interfaces to declare default disciplines for all I/O.
-
-In future, any default disciplines declared by this pragma will be
-available by the special discipline name ":DEFAULT", and could be used
-within handle constructors that allow disciplines to be specified.
-This would make it possible to stack new disciplines over the default
-ones.
-
- open FH, "<:para :DEFAULT", $file or die "can't open $file: $!";
-
-Socket and directory handles will also support disciplines in
-future.
-
-Full support for I/O disciplines will enable all of the supported
-disciplines to work on all platforms.
-
-=head1 SEE ALSO
-
-L<perlfunc/"binmode">, L<perlfunc/"open">, L<perlunicode>
-
-=cut
diff --git a/contrib/perl5/lib/open2.pl b/contrib/perl5/lib/open2.pl
deleted file mode 100644
index 8cf08c2..0000000
--- a/contrib/perl5/lib/open2.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-# This is a compatibility interface to IPC::Open2. New programs should
-# do
-#
-# use IPC::Open2;
-#
-# instead of
-#
-# require 'open2.pl';
-
-package main;
-use IPC::Open2 'open2';
-1
diff --git a/contrib/perl5/lib/open3.pl b/contrib/perl5/lib/open3.pl
deleted file mode 100644
index 7fcc931..0000000
--- a/contrib/perl5/lib/open3.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-# This is a compatibility interface to IPC::Open3. New programs should
-# do
-#
-# use IPC::Open3;
-#
-# instead of
-#
-# require 'open3.pl';
-
-package main;
-use IPC::Open3 'open3';
-1
diff --git a/contrib/perl5/lib/overload.pm b/contrib/perl5/lib/overload.pm
deleted file mode 100644
index 70a5f88..0000000
--- a/contrib/perl5/lib/overload.pm
+++ /dev/null
@@ -1,1422 +0,0 @@
-package overload;
-
-$overload::hint_bits = 0x20000;
-
-sub nil {}
-
-sub OVERLOAD {
- $package = shift;
- my %arg = @_;
- my ($sub, $fb);
- $ {$package . "::OVERLOAD"}{dummy}++; # Register with magic by touching.
- *{$package . "::()"} = \&nil; # Make it findable via fetchmethod.
- for (keys %arg) {
- if ($_ eq 'fallback') {
- $fb = $arg{$_};
- } else {
- $sub = $arg{$_};
- if (not ref $sub and $sub !~ /::/) {
- $ {$package . "::(" . $_} = $sub;
- $sub = \&nil;
- }
- #print STDERR "Setting `$ {'package'}::\cO$_' to \\&`$sub'.\n";
- *{$package . "::(" . $_} = \&{ $sub };
- }
- }
- ${$package . "::()"} = $fb; # Make it findable too (fallback only).
-}
-
-sub import {
- $package = (caller())[0];
- # *{$package . "::OVERLOAD"} = \&OVERLOAD;
- shift;
- $package->overload::OVERLOAD(@_);
-}
-
-sub unimport {
- $package = (caller())[0];
- ${$package . "::OVERLOAD"}{dummy}++; # Upgrade the table
- shift;
- for (@_) {
- if ($_ eq 'fallback') {
- undef $ {$package . "::()"};
- } else {
- delete $ {$package . "::"}{"(" . $_};
- }
- }
-}
-
-sub Overloaded {
- my $package = shift;
- $package = ref $package if ref $package;
- $package->can('()');
-}
-
-sub ov_method {
- my $globref = shift;
- return undef unless $globref;
- my $sub = \&{*$globref};
- return $sub if $sub ne \&nil;
- return shift->can($ {*$globref});
-}
-
-sub OverloadedStringify {
- my $package = shift;
- $package = ref $package if ref $package;
- #$package->can('(""')
- ov_method mycan($package, '(""'), $package
- or ov_method mycan($package, '(0+'), $package
- or ov_method mycan($package, '(bool'), $package
- or ov_method mycan($package, '(nomethod'), $package;
-}
-
-sub Method {
- my $package = shift;
- $package = ref $package if ref $package;
- #my $meth = $package->can('(' . shift);
- ov_method mycan($package, '(' . shift), $package;
- #return $meth if $meth ne \&nil;
- #return $ {*{$meth}};
-}
-
-sub AddrRef {
- my $package = ref $_[0];
- return "$_[0]" unless $package;
- bless $_[0], overload::Fake; # Non-overloaded package
- my $str = "$_[0]";
- bless $_[0], $package; # Back
- $package . substr $str, index $str, '=';
-}
-
-sub StrVal {
- (OverloadedStringify($_[0]) or ref($_[0]) eq 'Regexp') ?
- (AddrRef(shift)) :
- "$_[0]";
-}
-
-sub mycan { # Real can would leave stubs.
- my ($package, $meth) = @_;
- return \*{$package . "::$meth"} if defined &{$package . "::$meth"};
- my $p;
- foreach $p (@{$package . "::ISA"}) {
- my $out = mycan($p, $meth);
- return $out if $out;
- }
- return undef;
-}
-
-%constants = (
- 'integer' => 0x1000,
- 'float' => 0x2000,
- 'binary' => 0x4000,
- 'q' => 0x8000,
- 'qr' => 0x10000,
- );
-
-%ops = ( with_assign => "+ - * / % ** << >> x .",
- assign => "+= -= *= /= %= **= <<= >>= x= .=",
- num_comparison => "< <= > >= == !=",
- '3way_comparison'=> "<=> cmp",
- str_comparison => "lt le gt ge eq ne",
- binary => "& | ^",
- unary => "neg ! ~",
- mutators => '++ --',
- func => "atan2 cos sin exp abs log sqrt",
- conversion => 'bool "" 0+',
- iterators => '<>',
- dereferencing => '${} @{} %{} &{} *{}',
- special => 'nomethod fallback =');
-
-use warnings::register;
-sub constant {
- # Arguments: what, sub
- while (@_) {
- if (@_ == 1) {
- warnings::warnif ("Odd number of arguments for overload::constant");
- last;
- }
- elsif (!exists $constants {$_ [0]}) {
- warnings::warnif ("`$_[0]' is not an overloadable type");
- }
- elsif (!ref $_ [1] || "$_[1]" !~ /CODE\(0x[\da-f]+\)$/) {
- # Can't use C<ref $_[1] eq "CODE"> above as code references can be
- # blessed, and C<ref> would return the package the ref is blessed into.
- if (warnings::enabled) {
- $_ [1] = "undef" unless defined $_ [1];
- warnings::warn ("`$_[1]' is not a code reference");
- }
- }
- else {
- $^H{$_[0]} = $_[1];
- $^H |= $constants{$_[0]} | $overload::hint_bits;
- }
- shift, shift;
- }
-}
-
-sub remove_constant {
- # Arguments: what, sub
- while (@_) {
- delete $^H{$_[0]};
- $^H &= ~ $constants{$_[0]};
- shift, shift;
- }
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-overload - Package for overloading perl operations
-
-=head1 SYNOPSIS
-
- package SomeThing;
-
- use overload
- '+' => \&myadd,
- '-' => \&mysub;
- # etc
- ...
-
- package main;
- $a = new SomeThing 57;
- $b=5+$a;
- ...
- if (overload::Overloaded $b) {...}
- ...
- $strval = overload::StrVal $b;
-
-=head1 DESCRIPTION
-
-=head2 Declaration of overloaded functions
-
-The compilation directive
-
- package Number;
- use overload
- "+" => \&add,
- "*=" => "muas";
-
-declares function Number::add() for addition, and method muas() in
-the "class" C<Number> (or one of its base classes)
-for the assignment form C<*=> of multiplication.
-
-Arguments of this directive come in (key, value) pairs. Legal values
-are values legal inside a C<&{ ... }> call, so the name of a
-subroutine, a reference to a subroutine, or an anonymous subroutine
-will all work. Note that values specified as strings are
-interpreted as methods, not subroutines. Legal keys are listed below.
-
-The subroutine C<add> will be called to execute C<$a+$b> if $a
-is a reference to an object blessed into the package C<Number>, or if $a is
-not an object from a package with defined mathemagic addition, but $b is a
-reference to a C<Number>. It can also be called in other situations, like
-C<$a+=7>, or C<$a++>. See L<MAGIC AUTOGENERATION>. (Mathemagical
-methods refer to methods triggered by an overloaded mathematical
-operator.)
-
-Since overloading respects inheritance via the @ISA hierarchy, the
-above declaration would also trigger overloading of C<+> and C<*=> in
-all the packages which inherit from C<Number>.
-
-=head2 Calling Conventions for Binary Operations
-
-The functions specified in the C<use overload ...> directive are called
-with three (in one particular case with four, see L<Last Resort>)
-arguments. If the corresponding operation is binary, then the first
-two arguments are the two arguments of the operation. However, due to
-general object calling conventions, the first argument should always be
-an object in the package, so in the situation of C<7+$a>, the
-order of the arguments is interchanged. It probably does not matter
-when implementing the addition method, but whether the arguments
-are reversed is vital to the subtraction method. The method can
-query this information by examining the third argument, which can take
-three different values:
-
-=over 7
-
-=item FALSE
-
-the order of arguments is as in the current operation.
-
-=item TRUE
-
-the arguments are reversed.
-
-=item C<undef>
-
-the current operation is an assignment variant (as in
-C<$a+=7>), but the usual function is called instead. This additional
-information can be used to generate some optimizations. Compare
-L<Calling Conventions for Mutators>.
-
-=back
-
-=head2 Calling Conventions for Unary Operations
-
-Unary operation are considered binary operations with the second
-argument being C<undef>. Thus the functions that overloads C<{"++"}>
-is called with arguments C<($a,undef,'')> when $a++ is executed.
-
-=head2 Calling Conventions for Mutators
-
-Two types of mutators have different calling conventions:
-
-=over
-
-=item C<++> and C<-->
-
-The routines which implement these operators are expected to actually
-I<mutate> their arguments. So, assuming that $obj is a reference to a
-number,
-
- sub incr { my $n = $ {$_[0]}; ++$n; $_[0] = bless \$n}
-
-is an appropriate implementation of overloaded C<++>. Note that
-
- sub incr { ++$ {$_[0]} ; shift }
-
-is OK if used with preincrement and with postincrement. (In the case
-of postincrement a copying will be performed, see L<Copy Constructor>.)
-
-=item C<x=> and other assignment versions
-
-There is nothing special about these methods. They may change the
-value of their arguments, and may leave it as is. The result is going
-to be assigned to the value in the left-hand-side if different from
-this value.
-
-This allows for the same method to be used as overloaded C<+=> and
-C<+>. Note that this is I<allowed>, but not recommended, since by the
-semantic of L<"Fallback"> Perl will call the method for C<+> anyway,
-if C<+=> is not overloaded.
-
-=back
-
-B<Warning.> Due to the presense of assignment versions of operations,
-routines which may be called in assignment context may create
-self-referential structures. Currently Perl will not free self-referential
-structures until cycles are C<explicitly> broken. You may get problems
-when traversing your structures too.
-
-Say,
-
- use overload '+' => sub { bless [ \$_[0], \$_[1] ] };
-
-is asking for trouble, since for code C<$obj += $foo> the subroutine
-is called as C<$obj = add($obj, $foo, undef)>, or C<$obj = [\$obj,
-\$foo]>. If using such a subroutine is an important optimization, one
-can overload C<+=> explicitly by a non-"optimized" version, or switch
-to non-optimized version if C<not defined $_[2]> (see
-L<Calling Conventions for Binary Operations>).
-
-Even if no I<explicit> assignment-variants of operators are present in
-the script, they may be generated by the optimizer. Say, C<",$obj,"> or
-C<',' . $obj . ','> may be both optimized to
-
- my $tmp = ',' . $obj; $tmp .= ',';
-
-=head2 Overloadable Operations
-
-The following symbols can be specified in C<use overload> directive:
-
-=over 5
-
-=item * I<Arithmetic operations>
-
- "+", "+=", "-", "-=", "*", "*=", "/", "/=", "%", "%=",
- "**", "**=", "<<", "<<=", ">>", ">>=", "x", "x=", ".", ".=",
-
-For these operations a substituted non-assignment variant can be called if
-the assignment variant is not available. Methods for operations "C<+>",
-"C<->", "C<+=>", and "C<-=>" can be called to automatically generate
-increment and decrement methods. The operation "C<->" can be used to
-autogenerate missing methods for unary minus or C<abs>.
-
-See L<"MAGIC AUTOGENERATION">, L<"Calling Conventions for Mutators"> and
-L<"Calling Conventions for Binary Operations">) for details of these
-substitutions.
-
-=item * I<Comparison operations>
-
- "<", "<=", ">", ">=", "==", "!=", "<=>",
- "lt", "le", "gt", "ge", "eq", "ne", "cmp",
-
-If the corresponding "spaceship" variant is available, it can be
-used to substitute for the missing operation. During C<sort>ing
-arrays, C<cmp> is used to compare values subject to C<use overload>.
-
-=item * I<Bit operations>
-
- "&", "^", "|", "neg", "!", "~",
-
-"C<neg>" stands for unary minus. If the method for C<neg> is not
-specified, it can be autogenerated using the method for
-subtraction. If the method for "C<!>" is not specified, it can be
-autogenerated using the methods for "C<bool>", or "C<\"\">", or "C<0+>".
-
-=item * I<Increment and decrement>
-
- "++", "--",
-
-If undefined, addition and subtraction methods can be
-used instead. These operations are called both in prefix and
-postfix form.
-
-=item * I<Transcendental functions>
-
- "atan2", "cos", "sin", "exp", "abs", "log", "sqrt",
-
-If C<abs> is unavailable, it can be autogenerated using methods
-for "E<lt>" or "E<lt>=E<gt>" combined with either unary minus or subtraction.
-
-=item * I<Boolean, string and numeric conversion>
-
- "bool", "\"\"", "0+",
-
-If one or two of these operations are not overloaded, the remaining ones can
-be used instead. C<bool> is used in the flow control operators
-(like C<while>) and for the ternary "C<?:>" operation. These functions can
-return any arbitrary Perl value. If the corresponding operation for this value
-is overloaded too, that operation will be called again with this value.
-
-As a special case if the overload returns the object itself then it will
-be used directly. An overloaded conversion returning the object is
-probably a bug, because you're likely to get something that looks like
-C<YourPackage=HASH(0x8172b34)>.
-
-=item * I<Iteration>
-
- "<>"
-
-If not overloaded, the argument will be converted to a filehandle or
-glob (which may require a stringification). The same overloading
-happens both for the I<read-filehandle> syntax C<E<lt>$varE<gt>> and
-I<globbing> syntax C<E<lt>${var}E<gt>>.
-
-=item * I<Dereferencing>
-
- '${}', '@{}', '%{}', '&{}', '*{}'.
-
-If not overloaded, the argument will be dereferenced I<as is>, thus
-should be of correct type. These functions should return a reference
-of correct type, or another object with overloaded dereferencing.
-
-As a special case if the overload returns the object itself then it
-will be used directly (provided it is the correct type).
-
-The dereference operators must be specified explicitly they will not be passed to
-"nomethod".
-
-=item * I<Special>
-
- "nomethod", "fallback", "=",
-
-see L<SPECIAL SYMBOLS FOR C<use overload>>.
-
-=back
-
-See L<"Fallback"> for an explanation of when a missing method can be
-autogenerated.
-
-A computer-readable form of the above table is available in the hash
-%overload::ops, with values being space-separated lists of names:
-
- with_assign => '+ - * / % ** << >> x .',
- assign => '+= -= *= /= %= **= <<= >>= x= .=',
- num_comparison => '< <= > >= == !=',
- '3way_comparison'=> '<=> cmp',
- str_comparison => 'lt le gt ge eq ne',
- binary => '& | ^',
- unary => 'neg ! ~',
- mutators => '++ --',
- func => 'atan2 cos sin exp abs log sqrt',
- conversion => 'bool "" 0+',
- iterators => '<>',
- dereferencing => '${} @{} %{} &{} *{}',
- special => 'nomethod fallback ='
-
-=head2 Inheritance and overloading
-
-Inheritance interacts with overloading in two ways.
-
-=over
-
-=item Strings as values of C<use overload> directive
-
-If C<value> in
-
- use overload key => value;
-
-is a string, it is interpreted as a method name.
-
-=item Overloading of an operation is inherited by derived classes
-
-Any class derived from an overloaded class is also overloaded. The
-set of overloaded methods is the union of overloaded methods of all
-the ancestors. If some method is overloaded in several ancestor, then
-which description will be used is decided by the usual inheritance
-rules:
-
-If C<A> inherits from C<B> and C<C> (in this order), C<B> overloads
-C<+> with C<\&D::plus_sub>, and C<C> overloads C<+> by C<"plus_meth">,
-then the subroutine C<D::plus_sub> will be called to implement
-operation C<+> for an object in package C<A>.
-
-=back
-
-Note that since the value of the C<fallback> key is not a subroutine,
-its inheritance is not governed by the above rules. In the current
-implementation, the value of C<fallback> in the first overloaded
-ancestor is used, but this is accidental and subject to change.
-
-=head1 SPECIAL SYMBOLS FOR C<use overload>
-
-Three keys are recognized by Perl that are not covered by the above
-description.
-
-=head2 Last Resort
-
-C<"nomethod"> should be followed by a reference to a function of four
-parameters. If defined, it is called when the overloading mechanism
-cannot find a method for some operation. The first three arguments of
-this function coincide with the arguments for the corresponding method if
-it were found, the fourth argument is the symbol
-corresponding to the missing method. If several methods are tried,
-the last one is used. Say, C<1-$a> can be equivalent to
-
- &nomethodMethod($a,1,1,"-")
-
-if the pair C<"nomethod" =E<gt> "nomethodMethod"> was specified in the
-C<use overload> directive.
-
-The C<"nomethod"> mechanism is I<not> used for the dereference operators
-( ${} @{} %{} &{} *{} ).
-
-
-If some operation cannot be resolved, and there is no function
-assigned to C<"nomethod">, then an exception will be raised via die()--
-unless C<"fallback"> was specified as a key in C<use overload> directive.
-
-
-=head2 Fallback
-
-The key C<"fallback"> governs what to do if a method for a particular
-operation is not found. Three different cases are possible depending on
-the value of C<"fallback">:
-
-=over 16
-
-=item * C<undef>
-
-Perl tries to use a
-substituted method (see L<MAGIC AUTOGENERATION>). If this fails, it
-then tries to calls C<"nomethod"> value; if missing, an exception
-will be raised.
-
-=item * TRUE
-
-The same as for the C<undef> value, but no exception is raised. Instead,
-it silently reverts to what it would have done were there no C<use overload>
-present.
-
-=item * defined, but FALSE
-
-No autogeneration is tried. Perl tries to call
-C<"nomethod"> value, and if this is missing, raises an exception.
-
-=back
-
-B<Note.> C<"fallback"> inheritance via @ISA is not carved in stone
-yet, see L<"Inheritance and overloading">.
-
-=head2 Copy Constructor
-
-The value for C<"="> is a reference to a function with three
-arguments, i.e., it looks like the other values in C<use
-overload>. However, it does not overload the Perl assignment
-operator. This would go against Camel hair.
-
-This operation is called in the situations when a mutator is applied
-to a reference that shares its object with some other reference, such
-as
-
- $a=$b;
- ++$a;
-
-To make this change $a and not change $b, a copy of C<$$a> is made,
-and $a is assigned a reference to this new object. This operation is
-done during execution of the C<++$a>, and not during the assignment,
-(so before the increment C<$$a> coincides with C<$$b>). This is only
-done if C<++> is expressed via a method for C<'++'> or C<'+='> (or
-C<nomethod>). Note that if this operation is expressed via C<'+'>
-a nonmutator, i.e., as in
-
- $a=$b;
- $a=$a+1;
-
-then C<$a> does not reference a new copy of C<$$a>, since $$a does not
-appear as lvalue when the above code is executed.
-
-If the copy constructor is required during the execution of some mutator,
-but a method for C<'='> was not specified, it can be autogenerated as a
-string copy if the object is a plain scalar.
-
-=over 5
-
-=item B<Example>
-
-The actually executed code for
-
- $a=$b;
- Something else which does not modify $a or $b....
- ++$a;
-
-may be
-
- $a=$b;
- Something else which does not modify $a or $b....
- $a = $a->clone(undef,"");
- $a->incr(undef,"");
-
-if $b was mathemagical, and C<'++'> was overloaded with C<\&incr>,
-C<'='> was overloaded with C<\&clone>.
-
-=back
-
-Same behaviour is triggered by C<$b = $a++>, which is consider a synonym for
-C<$b = $a; ++$a>.
-
-=head1 MAGIC AUTOGENERATION
-
-If a method for an operation is not found, and the value for C<"fallback"> is
-TRUE or undefined, Perl tries to autogenerate a substitute method for
-the missing operation based on the defined operations. Autogenerated method
-substitutions are possible for the following operations:
-
-=over 16
-
-=item I<Assignment forms of arithmetic operations>
-
-C<$a+=$b> can use the method for C<"+"> if the method for C<"+=">
-is not defined.
-
-=item I<Conversion operations>
-
-String, numeric, and boolean conversion are calculated in terms of one
-another if not all of them are defined.
-
-=item I<Increment and decrement>
-
-The C<++$a> operation can be expressed in terms of C<$a+=1> or C<$a+1>,
-and C<$a--> in terms of C<$a-=1> and C<$a-1>.
-
-=item C<abs($a)>
-
-can be expressed in terms of C<$aE<lt>0> and C<-$a> (or C<0-$a>).
-
-=item I<Unary minus>
-
-can be expressed in terms of subtraction.
-
-=item I<Negation>
-
-C<!> and C<not> can be expressed in terms of boolean conversion, or
-string or numerical conversion.
-
-=item I<Concatenation>
-
-can be expressed in terms of string conversion.
-
-=item I<Comparison operations>
-
-can be expressed in terms of its "spaceship" counterpart: either
-C<E<lt>=E<gt>> or C<cmp>:
-
- <, >, <=, >=, ==, != in terms of <=>
- lt, gt, le, ge, eq, ne in terms of cmp
-
-=item I<Iterator>
-
- <> in terms of builtin operations
-
-=item I<Dereferencing>
-
- ${} @{} %{} &{} *{} in terms of builtin operations
-
-=item I<Copy operator>
-
-can be expressed in terms of an assignment to the dereferenced value, if this
-value is a scalar and not a reference.
-
-=back
-
-=head1 Losing overloading
-
-The restriction for the comparison operation is that even if, for example,
-`C<cmp>' should return a blessed reference, the autogenerated `C<lt>'
-function will produce only a standard logical value based on the
-numerical value of the result of `C<cmp>'. In particular, a working
-numeric conversion is needed in this case (possibly expressed in terms of
-other conversions).
-
-Similarly, C<.=> and C<x=> operators lose their mathemagical properties
-if the string conversion substitution is applied.
-
-When you chop() a mathemagical object it is promoted to a string and its
-mathemagical properties are lost. The same can happen with other
-operations as well.
-
-=head1 Run-time Overloading
-
-Since all C<use> directives are executed at compile-time, the only way to
-change overloading during run-time is to
-
- eval 'use overload "+" => \&addmethod';
-
-You can also use
-
- eval 'no overload "+", "--", "<="';
-
-though the use of these constructs during run-time is questionable.
-
-=head1 Public functions
-
-Package C<overload.pm> provides the following public functions:
-
-=over 5
-
-=item overload::StrVal(arg)
-
-Gives string value of C<arg> as in absence of stringify overloading.
-
-=item overload::Overloaded(arg)
-
-Returns true if C<arg> is subject to overloading of some operations.
-
-=item overload::Method(obj,op)
-
-Returns C<undef> or a reference to the method that implements C<op>.
-
-=back
-
-=head1 Overloading constants
-
-For some application Perl parser mangles constants too much. It is possible
-to hook into this process via overload::constant() and overload::remove_constant()
-functions.
-
-These functions take a hash as an argument. The recognized keys of this hash
-are
-
-=over 8
-
-=item integer
-
-to overload integer constants,
-
-=item float
-
-to overload floating point constants,
-
-=item binary
-
-to overload octal and hexadecimal constants,
-
-=item q
-
-to overload C<q>-quoted strings, constant pieces of C<qq>- and C<qx>-quoted
-strings and here-documents,
-
-=item qr
-
-to overload constant pieces of regular expressions.
-
-=back
-
-The corresponding values are references to functions which take three arguments:
-the first one is the I<initial> string form of the constant, the second one
-is how Perl interprets this constant, the third one is how the constant is used.
-Note that the initial string form does not
-contain string delimiters, and has backslashes in backslash-delimiter
-combinations stripped (thus the value of delimiter is not relevant for
-processing of this string). The return value of this function is how this
-constant is going to be interpreted by Perl. The third argument is undefined
-unless for overloaded C<q>- and C<qr>- constants, it is C<q> in single-quote
-context (comes from strings, regular expressions, and single-quote HERE
-documents), it is C<tr> for arguments of C<tr>/C<y> operators,
-it is C<s> for right-hand side of C<s>-operator, and it is C<qq> otherwise.
-
-Since an expression C<"ab$cd,,"> is just a shortcut for C<'ab' . $cd . ',,'>,
-it is expected that overloaded constant strings are equipped with reasonable
-overloaded catenation operator, otherwise absurd results will result.
-Similarly, negative numbers are considered as negations of positive constants.
-
-Note that it is probably meaningless to call the functions overload::constant()
-and overload::remove_constant() from anywhere but import() and unimport() methods.
-From these methods they may be called as
-
- sub import {
- shift;
- return unless @_;
- die "unknown import: @_" unless @_ == 1 and $_[0] eq ':constant';
- overload::constant integer => sub {Math::BigInt->new(shift)};
- }
-
-B<BUGS> Currently overloaded-ness of constants does not propagate
-into C<eval '...'>.
-
-=head1 IMPLEMENTATION
-
-What follows is subject to change RSN.
-
-The table of methods for all operations is cached in magic for the
-symbol table hash for the package. The cache is invalidated during
-processing of C<use overload>, C<no overload>, new function
-definitions, and changes in @ISA. However, this invalidation remains
-unprocessed until the next C<bless>ing into the package. Hence if you
-want to change overloading structure dynamically, you'll need an
-additional (fake) C<bless>ing to update the table.
-
-(Every SVish thing has a magic queue, and magic is an entry in that
-queue. This is how a single variable may participate in multiple
-forms of magic simultaneously. For instance, environment variables
-regularly have two forms at once: their %ENV magic and their taint
-magic. However, the magic which implements overloading is applied to
-the stashes, which are rarely used directly, thus should not slow down
-Perl.)
-
-If an object belongs to a package using overload, it carries a special
-flag. Thus the only speed penalty during arithmetic operations without
-overloading is the checking of this flag.
-
-In fact, if C<use overload> is not present, there is almost no overhead
-for overloadable operations, so most programs should not suffer
-measurable performance penalties. A considerable effort was made to
-minimize the overhead when overload is used in some package, but the
-arguments in question do not belong to packages using overload. When
-in doubt, test your speed with C<use overload> and without it. So far
-there have been no reports of substantial speed degradation if Perl is
-compiled with optimization turned on.
-
-There is no size penalty for data if overload is not used. The only
-size penalty if overload is used in some package is that I<all> the
-packages acquire a magic during the next C<bless>ing into the
-package. This magic is three-words-long for packages without
-overloading, and carries the cache table if the package is overloaded.
-
-Copying (C<$a=$b>) is shallow; however, a one-level-deep copying is
-carried out before any operation that can imply an assignment to the
-object $a (or $b) refers to, like C<$a++>. You can override this
-behavior by defining your own copy constructor (see L<"Copy Constructor">).
-
-It is expected that arguments to methods that are not explicitly supposed
-to be changed are constant (but this is not enforced).
-
-=head1 Metaphor clash
-
-One may wonder why the semantic of overloaded C<=> is so counter intuitive.
-If it I<looks> counter intuitive to you, you are subject to a metaphor
-clash.
-
-Here is a Perl object metaphor:
-
-I< object is a reference to blessed data>
-
-and an arithmetic metaphor:
-
-I< object is a thing by itself>.
-
-The I<main> problem of overloading C<=> is the fact that these metaphors
-imply different actions on the assignment C<$a = $b> if $a and $b are
-objects. Perl-think implies that $a becomes a reference to whatever
-$b was referencing. Arithmetic-think implies that the value of "object"
-$a is changed to become the value of the object $b, preserving the fact
-that $a and $b are separate entities.
-
-The difference is not relevant in the absence of mutators. After
-a Perl-way assignment an operation which mutates the data referenced by $a
-would change the data referenced by $b too. Effectively, after
-C<$a = $b> values of $a and $b become I<indistinguishable>.
-
-On the other hand, anyone who has used algebraic notation knows the
-expressive power of the arithmetic metaphor. Overloading works hard
-to enable this metaphor while preserving the Perlian way as far as
-possible. Since it is not not possible to freely mix two contradicting
-metaphors, overloading allows the arithmetic way to write things I<as
-far as all the mutators are called via overloaded access only>. The
-way it is done is described in L<Copy Constructor>.
-
-If some mutator methods are directly applied to the overloaded values,
-one may need to I<explicitly unlink> other values which references the
-same value:
-
- $a = new Data 23;
- ...
- $b = $a; # $b is "linked" to $a
- ...
- $a = $a->clone; # Unlink $b from $a
- $a->increment_by(4);
-
-Note that overloaded access makes this transparent:
-
- $a = new Data 23;
- $b = $a; # $b is "linked" to $a
- $a += 4; # would unlink $b automagically
-
-However, it would not make
-
- $a = new Data 23;
- $a = 4; # Now $a is a plain 4, not 'Data'
-
-preserve "objectness" of $a. But Perl I<has> a way to make assignments
-to an object do whatever you want. It is just not the overload, but
-tie()ing interface (see L<perlfunc/tie>). Adding a FETCH() method
-which returns the object itself, and STORE() method which changes the
-value of the object, one can reproduce the arithmetic metaphor in its
-completeness, at least for variables which were tie()d from the start.
-
-(Note that a workaround for a bug may be needed, see L<"BUGS">.)
-
-=head1 Cookbook
-
-Please add examples to what follows!
-
-=head2 Two-face scalars
-
-Put this in F<two_face.pm> in your Perl library directory:
-
- package two_face; # Scalars with separate string and
- # numeric values.
- sub new { my $p = shift; bless [@_], $p }
- use overload '""' => \&str, '0+' => \&num, fallback => 1;
- sub num {shift->[1]}
- sub str {shift->[0]}
-
-Use it as follows:
-
- require two_face;
- my $seven = new two_face ("vii", 7);
- printf "seven=$seven, seven=%d, eight=%d\n", $seven, $seven+1;
- print "seven contains `i'\n" if $seven =~ /i/;
-
-(The second line creates a scalar which has both a string value, and a
-numeric value.) This prints:
-
- seven=vii, seven=7, eight=8
- seven contains `i'
-
-=head2 Two-face references
-
-Suppose you want to create an object which is accessible as both an
-array reference and a hash reference, similar to the
-L<pseudo-hash|perlref/"Pseudo-hashes: Using an array as a hash">
-builtin Perl type. Let's make it better than a pseudo-hash by
-allowing index 0 to be treated as a normal element.
-
- package two_refs;
- use overload '%{}' => \&gethash, '@{}' => sub { $ {shift()} };
- sub new {
- my $p = shift;
- bless \ [@_], $p;
- }
- sub gethash {
- my %h;
- my $self = shift;
- tie %h, ref $self, $self;
- \%h;
- }
-
- sub TIEHASH { my $p = shift; bless \ shift, $p }
- my %fields;
- my $i = 0;
- $fields{$_} = $i++ foreach qw{zero one two three};
- sub STORE {
- my $self = ${shift()};
- my $key = $fields{shift()};
- defined $key or die "Out of band access";
- $$self->[$key] = shift;
- }
- sub FETCH {
- my $self = ${shift()};
- my $key = $fields{shift()};
- defined $key or die "Out of band access";
- $$self->[$key];
- }
-
-Now one can access an object using both the array and hash syntax:
-
- my $bar = new two_refs 3,4,5,6;
- $bar->[2] = 11;
- $bar->{two} == 11 or die 'bad hash fetch';
-
-Note several important features of this example. First of all, the
-I<actual> type of $bar is a scalar reference, and we do not overload
-the scalar dereference. Thus we can get the I<actual> non-overloaded
-contents of $bar by just using C<$$bar> (what we do in functions which
-overload dereference). Similarly, the object returned by the
-TIEHASH() method is a scalar reference.
-
-Second, we create a new tied hash each time the hash syntax is used.
-This allows us not to worry about a possibility of a reference loop,
-would would lead to a memory leak.
-
-Both these problems can be cured. Say, if we want to overload hash
-dereference on a reference to an object which is I<implemented> as a
-hash itself, the only problem one has to circumvent is how to access
-this I<actual> hash (as opposed to the I<virtual> hash exhibited by the
-overloaded dereference operator). Here is one possible fetching routine:
-
- sub access_hash {
- my ($self, $key) = (shift, shift);
- my $class = ref $self;
- bless $self, 'overload::dummy'; # Disable overloading of %{}
- my $out = $self->{$key};
- bless $self, $class; # Restore overloading
- $out;
- }
-
-To remove creation of the tied hash on each access, one may an extra
-level of indirection which allows a non-circular structure of references:
-
- package two_refs1;
- use overload '%{}' => sub { ${shift()}->[1] },
- '@{}' => sub { ${shift()}->[0] };
- sub new {
- my $p = shift;
- my $a = [@_];
- my %h;
- tie %h, $p, $a;
- bless \ [$a, \%h], $p;
- }
- sub gethash {
- my %h;
- my $self = shift;
- tie %h, ref $self, $self;
- \%h;
- }
-
- sub TIEHASH { my $p = shift; bless \ shift, $p }
- my %fields;
- my $i = 0;
- $fields{$_} = $i++ foreach qw{zero one two three};
- sub STORE {
- my $a = ${shift()};
- my $key = $fields{shift()};
- defined $key or die "Out of band access";
- $a->[$key] = shift;
- }
- sub FETCH {
- my $a = ${shift()};
- my $key = $fields{shift()};
- defined $key or die "Out of band access";
- $a->[$key];
- }
-
-Now if $baz is overloaded like this, then C<$baz> is a reference to a
-reference to the intermediate array, which keeps a reference to an
-actual array, and the access hash. The tie()ing object for the access
-hash is a reference to a reference to the actual array, so
-
-=over
-
-=item *
-
-There are no loops of references.
-
-=item *
-
-Both "objects" which are blessed into the class C<two_refs1> are
-references to a reference to an array, thus references to a I<scalar>.
-Thus the accessor expression C<$$foo-E<gt>[$ind]> involves no
-overloaded operations.
-
-=back
-
-=head2 Symbolic calculator
-
-Put this in F<symbolic.pm> in your Perl library directory:
-
- package symbolic; # Primitive symbolic calculator
- use overload nomethod => \&wrap;
-
- sub new { shift; bless ['n', @_] }
- sub wrap {
- my ($obj, $other, $inv, $meth) = @_;
- ($obj, $other) = ($other, $obj) if $inv;
- bless [$meth, $obj, $other];
- }
-
-This module is very unusual as overloaded modules go: it does not
-provide any usual overloaded operators, instead it provides the L<Last
-Resort> operator C<nomethod>. In this example the corresponding
-subroutine returns an object which encapsulates operations done over
-the objects: C<new symbolic 3> contains C<['n', 3]>, C<2 + new
-symbolic 3> contains C<['+', 2, ['n', 3]]>.
-
-Here is an example of the script which "calculates" the side of
-circumscribed octagon using the above package:
-
- require symbolic;
- my $iter = 1; # 2**($iter+2) = 8
- my $side = new symbolic 1;
- my $cnt = $iter;
-
- while ($cnt--) {
- $side = (sqrt(1 + $side**2) - 1)/$side;
- }
- print "OK\n";
-
-The value of $side is
-
- ['/', ['-', ['sqrt', ['+', 1, ['**', ['n', 1], 2]],
- undef], 1], ['n', 1]]
-
-Note that while we obtained this value using a nice little script,
-there is no simple way to I<use> this value. In fact this value may
-be inspected in debugger (see L<perldebug>), but ony if
-C<bareStringify> B<O>ption is set, and not via C<p> command.
-
-If one attempts to print this value, then the overloaded operator
-C<""> will be called, which will call C<nomethod> operator. The
-result of this operator will be stringified again, but this result is
-again of type C<symbolic>, which will lead to an infinite loop.
-
-Add a pretty-printer method to the module F<symbolic.pm>:
-
- sub pretty {
- my ($meth, $a, $b) = @{+shift};
- $a = 'u' unless defined $a;
- $b = 'u' unless defined $b;
- $a = $a->pretty if ref $a;
- $b = $b->pretty if ref $b;
- "[$meth $a $b]";
- }
-
-Now one can finish the script by
-
- print "side = ", $side->pretty, "\n";
-
-The method C<pretty> is doing object-to-string conversion, so it
-is natural to overload the operator C<""> using this method. However,
-inside such a method it is not necessary to pretty-print the
-I<components> $a and $b of an object. In the above subroutine
-C<"[$meth $a $b]"> is a catenation of some strings and components $a
-and $b. If these components use overloading, the catenation operator
-will look for an overloaded operator C<.>; if not present, it will
-look for an overloaded operator C<"">. Thus it is enough to use
-
- use overload nomethod => \&wrap, '""' => \&str;
- sub str {
- my ($meth, $a, $b) = @{+shift};
- $a = 'u' unless defined $a;
- $b = 'u' unless defined $b;
- "[$meth $a $b]";
- }
-
-Now one can change the last line of the script to
-
- print "side = $side\n";
-
-which outputs
-
- side = [/ [- [sqrt [+ 1 [** [n 1 u] 2]] u] 1] [n 1 u]]
-
-and one can inspect the value in debugger using all the possible
-methods.
-
-Something is is still amiss: consider the loop variable $cnt of the
-script. It was a number, not an object. We cannot make this value of
-type C<symbolic>, since then the loop will not terminate.
-
-Indeed, to terminate the cycle, the $cnt should become false.
-However, the operator C<bool> for checking falsity is overloaded (this
-time via overloaded C<"">), and returns a long string, thus any object
-of type C<symbolic> is true. To overcome this, we need a way to
-compare an object to 0. In fact, it is easier to write a numeric
-conversion routine.
-
-Here is the text of F<symbolic.pm> with such a routine added (and
-slightly modified str()):
-
- package symbolic; # Primitive symbolic calculator
- use overload
- nomethod => \&wrap, '""' => \&str, '0+' => \&num;
-
- sub new { shift; bless ['n', @_] }
- sub wrap {
- my ($obj, $other, $inv, $meth) = @_;
- ($obj, $other) = ($other, $obj) if $inv;
- bless [$meth, $obj, $other];
- }
- sub str {
- my ($meth, $a, $b) = @{+shift};
- $a = 'u' unless defined $a;
- if (defined $b) {
- "[$meth $a $b]";
- } else {
- "[$meth $a]";
- }
- }
- my %subr = ( n => sub {$_[0]},
- sqrt => sub {sqrt $_[0]},
- '-' => sub {shift() - shift()},
- '+' => sub {shift() + shift()},
- '/' => sub {shift() / shift()},
- '*' => sub {shift() * shift()},
- '**' => sub {shift() ** shift()},
- );
- sub num {
- my ($meth, $a, $b) = @{+shift};
- my $subr = $subr{$meth}
- or die "Do not know how to ($meth) in symbolic";
- $a = $a->num if ref $a eq __PACKAGE__;
- $b = $b->num if ref $b eq __PACKAGE__;
- $subr->($a,$b);
- }
-
-All the work of numeric conversion is done in %subr and num(). Of
-course, %subr is not complete, it contains only operators used in the
-example below. Here is the extra-credit question: why do we need an
-explicit recursion in num()? (Answer is at the end of this section.)
-
-Use this module like this:
-
- require symbolic;
- my $iter = new symbolic 2; # 16-gon
- my $side = new symbolic 1;
- my $cnt = $iter;
-
- while ($cnt) {
- $cnt = $cnt - 1; # Mutator `--' not implemented
- $side = (sqrt(1 + $side**2) - 1)/$side;
- }
- printf "%s=%f\n", $side, $side;
- printf "pi=%f\n", $side*(2**($iter+2));
-
-It prints (without so many line breaks)
-
- [/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1]
- [n 1]] 2]]] 1]
- [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]=0.198912
- pi=3.182598
-
-The above module is very primitive. It does not implement
-mutator methods (C<++>, C<-=> and so on), does not do deep copying
-(not required without mutators!), and implements only those arithmetic
-operations which are used in the example.
-
-To implement most arithmetic operations is easy; one should just use
-the tables of operations, and change the code which fills %subr to
-
- my %subr = ( 'n' => sub {$_[0]} );
- foreach my $op (split " ", $overload::ops{with_assign}) {
- $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}";
- }
- my @bins = qw(binary 3way_comparison num_comparison str_comparison);
- foreach my $op (split " ", "@overload::ops{ @bins }") {
- $subr{$op} = eval "sub {shift() $op shift()}";
- }
- foreach my $op (split " ", "@overload::ops{qw(unary func)}") {
- print "defining `$op'\n";
- $subr{$op} = eval "sub {$op shift()}";
- }
-
-Due to L<Calling Conventions for Mutators>, we do not need anything
-special to make C<+=> and friends work, except filling C<+=> entry of
-%subr, and defining a copy constructor (needed since Perl has no
-way to know that the implementation of C<'+='> does not mutate
-the argument, compare L<Copy Constructor>).
-
-To implement a copy constructor, add C<< '=' => \&cpy >> to C<use overload>
-line, and code (this code assumes that mutators change things one level
-deep only, so recursive copying is not needed):
-
- sub cpy {
- my $self = shift;
- bless [@$self], ref $self;
- }
-
-To make C<++> and C<--> work, we need to implement actual mutators,
-either directly, or in C<nomethod>. We continue to do things inside
-C<nomethod>, thus add
-
- if ($meth eq '++' or $meth eq '--') {
- @$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference
- return $obj;
- }
-
-after the first line of wrap(). This is not a most effective
-implementation, one may consider
-
- sub inc { $_[0] = bless ['++', shift, 1]; }
-
-instead.
-
-As a final remark, note that one can fill %subr by
-
- my %subr = ( 'n' => sub {$_[0]} );
- foreach my $op (split " ", $overload::ops{with_assign}) {
- $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}";
- }
- my @bins = qw(binary 3way_comparison num_comparison str_comparison);
- foreach my $op (split " ", "@overload::ops{ @bins }") {
- $subr{$op} = eval "sub {shift() $op shift()}";
- }
- foreach my $op (split " ", "@overload::ops{qw(unary func)}") {
- $subr{$op} = eval "sub {$op shift()}";
- }
- $subr{'++'} = $subr{'+'};
- $subr{'--'} = $subr{'-'};
-
-This finishes implementation of a primitive symbolic calculator in
-50 lines of Perl code. Since the numeric values of subexpressions
-are not cached, the calculator is very slow.
-
-Here is the answer for the exercise: In the case of str(), we need no
-explicit recursion since the overloaded C<.>-operator will fall back
-to an existing overloaded operator C<"">. Overloaded arithmetic
-operators I<do not> fall back to numeric conversion if C<fallback> is
-not explicitly requested. Thus without an explicit recursion num()
-would convert C<['+', $a, $b]> to C<$a + $b>, which would just rebuild
-the argument of num().
-
-If you wonder why defaults for conversion are different for str() and
-num(), note how easy it was to write the symbolic calculator. This
-simplicity is due to an appropriate choice of defaults. One extra
-note: due to the explicit recursion num() is more fragile than sym():
-we need to explicitly check for the type of $a and $b. If components
-$a and $b happen to be of some related type, this may lead to problems.
-
-=head2 I<Really> symbolic calculator
-
-One may wonder why we call the above calculator symbolic. The reason
-is that the actual calculation of the value of expression is postponed
-until the value is I<used>.
-
-To see it in action, add a method
-
- sub STORE {
- my $obj = shift;
- $#$obj = 1;
- @$obj->[0,1] = ('=', shift);
- }
-
-to the package C<symbolic>. After this change one can do
-
- my $a = new symbolic 3;
- my $b = new symbolic 4;
- my $c = sqrt($a**2 + $b**2);
-
-and the numeric value of $c becomes 5. However, after calling
-
- $a->STORE(12); $b->STORE(5);
-
-the numeric value of $c becomes 13. There is no doubt now that the module
-symbolic provides a I<symbolic> calculator indeed.
-
-To hide the rough edges under the hood, provide a tie()d interface to the
-package C<symbolic> (compare with L<Metaphor clash>). Add methods
-
- sub TIESCALAR { my $pack = shift; $pack->new(@_) }
- sub FETCH { shift }
- sub nop { } # Around a bug
-
-(the bug is described in L<"BUGS">). One can use this new interface as
-
- tie $a, 'symbolic', 3;
- tie $b, 'symbolic', 4;
- $a->nop; $b->nop; # Around a bug
-
- my $c = sqrt($a**2 + $b**2);
-
-Now numeric value of $c is 5. After C<$a = 12; $b = 5> the numeric value
-of $c becomes 13. To insulate the user of the module add a method
-
- sub vars { my $p = shift; tie($_, $p), $_->nop foreach @_; }
-
-Now
-
- my ($a, $b);
- symbolic->vars($a, $b);
- my $c = sqrt($a**2 + $b**2);
-
- $a = 3; $b = 4;
- printf "c5 %s=%f\n", $c, $c;
-
- $a = 12; $b = 5;
- printf "c13 %s=%f\n", $c, $c;
-
-shows that the numeric value of $c follows changes to the values of $a
-and $b.
-
-=head1 AUTHOR
-
-Ilya Zakharevich E<lt>F<ilya@math.mps.ohio-state.edu>E<gt>.
-
-=head1 DIAGNOSTICS
-
-When Perl is run with the B<-Do> switch or its equivalent, overloading
-induces diagnostic messages.
-
-Using the C<m> command of Perl debugger (see L<perldebug>) one can
-deduce which operations are overloaded (and which ancestor triggers
-this overloading). Say, if C<eq> is overloaded, then the method C<(eq>
-is shown by debugger. The method C<()> corresponds to the C<fallback>
-key (in fact a presence of this method shows that this package has
-overloading enabled, and it is what is used by the C<Overloaded>
-function of module C<overload>).
-
-The module might issue the following warnings:
-
-=over 4
-
-=item Odd number of arguments for overload::constant
-
-(W) The call to overload::constant contained an odd number of arguments.
-The arguments should come in pairs.
-
-=item `%s' is not an overloadable type
-
-(W) You tried to overload a constant type the overload package is unaware of.
-
-=item `%s' is not a code reference
-
-(W) The second (fourth, sixth, ...) argument of overload::constant needs
-to be a code reference. Either an anonymous subroutine, or a reference
-to a subroutine.
-
-=back
-
-=head1 BUGS
-
-Because it is used for overloading, the per-package hash %OVERLOAD now
-has a special meaning in Perl. The symbol table is filled with names
-looking like line-noise.
-
-For the purpose of inheritance every overloaded package behaves as if
-C<fallback> is present (possibly undefined). This may create
-interesting effects if some package is not overloaded, but inherits
-from two overloaded packages.
-
-Relation between overloading and tie()ing is broken. Overloading is
-triggered or not basing on the I<previous> class of tie()d value.
-
-This happens because the presence of overloading is checked too early,
-before any tie()d access is attempted. If the FETCH()ed class of the
-tie()d value does not change, a simple workaround is to access the value
-immediately after tie()ing, so that after this call the I<previous> class
-coincides with the current one.
-
-B<Needed:> a way to fix this without a speed penalty.
-
-Barewords are not covered by overloaded string constants.
-
-This document is confusing. There are grammos and misleading language
-used in places. It would seem a total rewrite is needed.
-
-=cut
-
diff --git a/contrib/perl5/lib/perl5db.pl b/contrib/perl5/lib/perl5db.pl
deleted file mode 100644
index 63b4381..0000000
--- a/contrib/perl5/lib/perl5db.pl
+++ /dev/null
@@ -1,2708 +0,0 @@
-package DB;
-
-# Debugger for Perl 5.00x; perl5db.pl patch level:
-
-$VERSION = 1.07;
-$header = "perl5db.pl version $VERSION";
-
-#
-# This file is automatically included if you do perl -d.
-# It's probably not useful to include this yourself.
-#
-# Perl supplies the values for %sub. It effectively inserts
-# a &DB'DB(); in front of every place that can have a
-# breakpoint. Instead of a subroutine call it calls &DB::sub with
-# $DB::sub being the called subroutine. It also inserts a BEGIN
-# {require 'perl5db.pl'} before the first line.
-#
-# After each `require'd file is compiled, but before it is executed, a
-# call to DB::postponed($main::{'_<'.$filename}) is emulated. Here the
-# $filename is the expanded name of the `require'd file (as found as
-# value of %INC).
-#
-# Additional services from Perl interpreter:
-#
-# if caller() is called from the package DB, it provides some
-# additional data.
-#
-# The array @{$main::{'_<'.$filename}} is the line-by-line contents of
-# $filename.
-#
-# The hash %{'_<'.$filename} contains breakpoints and action (it is
-# keyed by line number), and individual entries are settable (as
-# opposed to the whole hash). Only true/false is important to the
-# interpreter, though the values used by perl5db.pl have the form
-# "$break_condition\0$action". Values are magical in numeric context.
-#
-# The scalar ${'_<'.$filename} contains $filename.
-#
-# Note that no subroutine call is possible until &DB::sub is defined
-# (for subroutines defined outside of the package DB). In fact the same is
-# true if $deep is not defined.
-#
-# $Log: perldb.pl,v $
-
-#
-# At start reads $rcfile that may set important options. This file
-# may define a subroutine &afterinit that will be executed after the
-# debugger is initialized.
-#
-# After $rcfile is read reads environment variable PERLDB_OPTS and parses
-# it as a rest of `O ...' line in debugger prompt.
-#
-# The options that can be specified only at startup:
-# [To set in $rcfile, call &parse_options("optionName=new_value").]
-#
-# TTY - the TTY to use for debugging i/o.
-#
-# noTTY - if set, goes in NonStop mode. On interrupt if TTY is not set
-# uses the value of noTTY or "/tmp/perldbtty$$" to find TTY using
-# Term::Rendezvous. Current variant is to have the name of TTY in this
-# file.
-#
-# ReadLine - If false, dummy ReadLine is used, so you can debug
-# ReadLine applications.
-#
-# NonStop - if true, no i/o is performed until interrupt.
-#
-# LineInfo - file or pipe to print line number info to. If it is a
-# pipe, a short "emacs like" message is used.
-#
-# RemotePort - host:port to connect to on remote host for remote debugging.
-#
-# Example $rcfile: (delete leading hashes!)
-#
-# &parse_options("NonStop=1 LineInfo=db.out");
-# sub afterinit { $trace = 1; }
-#
-# The script will run without human intervention, putting trace
-# information into db.out. (If you interrupt it, you would better
-# reset LineInfo to something "interactive"!)
-#
-##################################################################
-
-# Enhanced by ilya@math.ohio-state.edu (Ilya Zakharevich)
-# Latest version available: ftp://ftp.math.ohio-state.edu/pub/users/ilya/perl
-
-# modified Perl debugger, to be run from Emacs in perldb-mode
-# Ray Lischner (uunet!mntgfx!lisch) as of 5 Nov 1990
-# Johan Vromans -- upgrade to 4.0 pl 10
-# Ilya Zakharevich -- patches after 5.001 (and some before ;-)
-
-# Changelog:
-
-# A lot of things changed after 0.94. First of all, core now informs
-# debugger about entry into XSUBs, overloaded operators, tied operations,
-# BEGIN and END. Handy with `O f=2'.
-
-# This can make debugger a little bit too verbose, please be patient
-# and report your problems promptly.
-
-# Now the option frame has 3 values: 0,1,2.
-
-# Note that if DESTROY returns a reference to the object (or object),
-# the deletion of data may be postponed until the next function call,
-# due to the need to examine the return value.
-
-# Changes: 0.95: `v' command shows versions.
-# Changes: 0.96: `v' command shows version of readline.
-# primitive completion works (dynamic variables, subs for `b' and `l',
-# options). Can `p %var'
-# Better help (`h <' now works). New commands <<, >>, {, {{.
-# {dump|print}_trace() coded (to be able to do it from <<cmd).
-# `c sub' documented.
-# At last enough magic combined to stop after the end of debuggee.
-# !! should work now (thanks to Emacs bracket matching an extra
-# `]' in a regexp is caught).
-# `L', `D' and `A' span files now (as documented).
-# Breakpoints in `require'd code are possible (used in `R').
-# Some additional words on internal work of debugger.
-# `b load filename' implemented.
-# `b postpone subr' implemented.
-# now only `q' exits debugger (overwriteable on $inhibit_exit).
-# When restarting debugger breakpoints/actions persist.
-# Buglet: When restarting debugger only one breakpoint/action per
-# autoloaded function persists.
-# Changes: 0.97: NonStop will not stop in at_exit().
-# Option AutoTrace implemented.
-# Trace printed differently if frames are printed too.
-# new `inhibitExit' option.
-# printing of a very long statement interruptible.
-# Changes: 0.98: New command `m' for printing possible methods
-# 'l -' is a synonim for `-'.
-# Cosmetic bugs in printing stack trace.
-# `frame' & 8 to print "expanded args" in stack trace.
-# Can list/break in imported subs.
-# new `maxTraceLen' option.
-# frame & 4 and frame & 8 granted.
-# new command `m'
-# nonstoppable lines do not have `:' near the line number.
-# `b compile subname' implemented.
-# Will not use $` any more.
-# `-' behaves sane now.
-# Changes: 0.99: Completion for `f', `m'.
-# `m' will remove duplicate names instead of duplicate functions.
-# `b load' strips trailing whitespace.
-# completion ignores leading `|'; takes into account current package
-# when completing a subroutine name (same for `l').
-# Changes: 1.07: Many fixed by tchrist 13-March-2000
-# BUG FIXES:
-# + Added bare mimimal security checks on perldb rc files, plus
-# comments on what else is needed.
-# + Fixed the ornaments that made "|h" completely unusable.
-# They are not used in print_help if they will hurt. Strip pod
-# if we're paging to less.
-# + Fixed mis-formatting of help messages caused by ornaments
-# to restore Larry's original formatting.
-# + Fixed many other formatting errors. The code is still suboptimal,
-# and needs a lot of work at restructuing. It's also misindented
-# in many places.
-# + Fixed bug where trying to look at an option like your pager
-# shows "1".
-# + Fixed some $? processing. Note: if you use csh or tcsh, you will
-# lose. You should consider shell escapes not using their shell,
-# or else not caring about detailed status. This should really be
-# unified into one place, too.
-# + Fixed bug where invisible trailing whitespace on commands hoses you,
-# tricking Perl into thinking you wern't calling a debugger command!
-# + Fixed bug where leading whitespace on commands hoses you. (One
-# suggests a leading semicolon or any other irrelevant non-whitespace
-# to indicate literal Perl code.)
-# + Fixed bugs that ate warnings due to wrong selected handle.
-# + Fixed a precedence bug on signal stuff.
-# + Fixed some unseemly wording.
-# + Fixed bug in help command trying to call perl method code.
-# + Fixed to call dumpvar from exception handler. SIGPIPE killed us.
-# ENHANCEMENTS:
-# + Added some comments. This code is still nasty spaghetti.
-# + Added message if you clear your pre/post command stacks which was
-# very easy to do if you just typed a bare >, <, or {. (A command
-# without an argument should *never* be a destructive action; this
-# API is fundamentally screwed up; likewise option setting, which
-# is equally buggered.)
-# + Added command stack dump on argument of "?" for >, <, or {.
-# + Added a semi-built-in doc viewer command that calls man with the
-# proper %Config::Config path (and thus gets caching, man -k, etc),
-# or else perldoc on obstreperous platforms.
-# + Added to and rearranged the help information.
-# + Detected apparent misuse of { ... } to declare a block; this used
-# to work but now is a command, and mysteriously gave no complaint.
-
-####################################################################
-
-# Needed for the statement after exec():
-
-BEGIN { $ini_warn = $^W; $^W = 0 } # Switch compilation warnings off until another BEGIN.
-local($^W) = 0; # Switch run-time warnings off during init.
-warn ( # Do not ;-)
- $dumpvar::hashDepth,
- $dumpvar::arrayDepth,
- $dumpvar::dumpDBFiles,
- $dumpvar::dumpPackages,
- $dumpvar::quoteHighBit,
- $dumpvar::printUndef,
- $dumpvar::globPrint,
- $dumpvar::usageOnly,
- @ARGS,
- $Carp::CarpLevel,
- $panic,
- $second_time,
- ) if 0;
-
-# Command-line + PERLLIB:
-@ini_INC = @INC;
-
-# $prevwarn = $prevdie = $prevbus = $prevsegv = ''; # Does not help?!
-
-$trace = $signal = $single = 0; # Uninitialized warning suppression
- # (local $^W cannot help - other packages!).
-$inhibit_exit = $option{PrintRet} = 1;
-
-@options = qw(hashDepth arrayDepth DumpDBFiles DumpPackages DumpReused
- compactDump veryCompact quote HighBit undefPrint
- globPrint PrintRet UsageOnly frame AutoTrace
- TTY noTTY ReadLine NonStop LineInfo maxTraceLen
- recallCommand ShellBang pager tkRunning ornaments
- signalLevel warnLevel dieLevel inhibit_exit
- ImmediateStop bareStringify
- RemotePort);
-
-%optionVars = (
- hashDepth => \$dumpvar::hashDepth,
- arrayDepth => \$dumpvar::arrayDepth,
- DumpDBFiles => \$dumpvar::dumpDBFiles,
- DumpPackages => \$dumpvar::dumpPackages,
- DumpReused => \$dumpvar::dumpReused,
- HighBit => \$dumpvar::quoteHighBit,
- undefPrint => \$dumpvar::printUndef,
- globPrint => \$dumpvar::globPrint,
- UsageOnly => \$dumpvar::usageOnly,
- bareStringify => \$dumpvar::bareStringify,
- frame => \$frame,
- AutoTrace => \$trace,
- inhibit_exit => \$inhibit_exit,
- maxTraceLen => \$maxtrace,
- ImmediateStop => \$ImmediateStop,
- RemotePort => \$remoteport,
-);
-
-%optionAction = (
- compactDump => \&dumpvar::compactDump,
- veryCompact => \&dumpvar::veryCompact,
- quote => \&dumpvar::quote,
- TTY => \&TTY,
- noTTY => \&noTTY,
- ReadLine => \&ReadLine,
- NonStop => \&NonStop,
- LineInfo => \&LineInfo,
- recallCommand => \&recallCommand,
- ShellBang => \&shellBang,
- pager => \&pager,
- signalLevel => \&signalLevel,
- warnLevel => \&warnLevel,
- dieLevel => \&dieLevel,
- tkRunning => \&tkRunning,
- ornaments => \&ornaments,
- RemotePort => \&RemotePort,
- );
-
-%optionRequire = (
- compactDump => 'dumpvar.pl',
- veryCompact => 'dumpvar.pl',
- quote => 'dumpvar.pl',
- );
-
-# These guys may be defined in $ENV{PERL5DB} :
-$rl = 1 unless defined $rl;
-$warnLevel = 0 unless defined $warnLevel;
-$dieLevel = 0 unless defined $dieLevel;
-$signalLevel = 1 unless defined $signalLevel;
-$pre = [] unless defined $pre;
-$post = [] unless defined $post;
-$pretype = [] unless defined $pretype;
-
-warnLevel($warnLevel);
-dieLevel($dieLevel);
-signalLevel($signalLevel);
-
-&pager(
- (defined($ENV{PAGER})
- ? $ENV{PAGER}
- : ($^O eq 'os2'
- ? 'cmd /c more'
- : 'more'))) unless defined $pager;
-setman();
-&recallCommand("!") unless defined $prc;
-&shellBang("!") unless defined $psh;
-$maxtrace = 400 unless defined $maxtrace;
-
-if (-e "/dev/tty") { # this is the wrong metric!
- $rcfile=".perldb";
-} else {
- $rcfile="perldb.ini";
-}
-
-# This isn't really safe, because there's a race
-# between checking and opening. The solution is to
-# open and fstat the handle, but then you have to read and
-# eval the contents. But then the silly thing gets
-# your lexical scope, which is unfortunately at best.
-sub safe_do {
- my $file = shift;
-
- # Just exactly what part of the word "CORE::" don't you understand?
- local $SIG{__WARN__};
- local $SIG{__DIE__};
-
- unless (is_safe_file($file)) {
- CORE::warn <<EO_GRIPE;
-perldb: Must not source insecure rcfile $file.
- You or the superuser must be the owner, and it must not
- be writable by anyone but its owner.
-EO_GRIPE
- return;
- }
-
- do $file;
- CORE::warn("perldb: couldn't parse $file: $@") if $@;
-}
-
-
-# Verifies that owner is either real user or superuser and that no
-# one but owner may write to it. This function is of limited use
-# when called on a path instead of upon a handle, because there are
-# no guarantees that filename (by dirent) whose file (by ino) is
-# eventually accessed is the same as the one tested.
-# Assumes that the file's existence is not in doubt.
-sub is_safe_file {
- my $path = shift;
- stat($path) || return; # mysteriously vaporized
- my($dev,$ino,$mode,$nlink,$uid,$gid) = stat(_);
-
- return 0 if $uid != 0 && $uid != $<;
- return 0 if $mode & 022;
- return 1;
-}
-
-if (-f $rcfile) {
- safe_do("./$rcfile");
-}
-elsif (defined $ENV{HOME} && -f "$ENV{HOME}/$rcfile") {
- safe_do("$ENV{HOME}/$rcfile");
-}
-elsif (defined $ENV{LOGDIR} && -f "$ENV{LOGDIR}/$rcfile") {
- safe_do("$ENV{LOGDIR}/$rcfile");
-}
-
-if (defined $ENV{PERLDB_OPTS}) {
- parse_options($ENV{PERLDB_OPTS});
-}
-
-# Here begin the unreadable code. It needs fixing.
-
-if (exists $ENV{PERLDB_RESTART}) {
- delete $ENV{PERLDB_RESTART};
- # $restart = 1;
- @hist = get_list('PERLDB_HIST');
- %break_on_load = get_list("PERLDB_ON_LOAD");
- %postponed = get_list("PERLDB_POSTPONE");
- my @had_breakpoints= get_list("PERLDB_VISITED");
- for (0 .. $#had_breakpoints) {
- my %pf = get_list("PERLDB_FILE_$_");
- $postponed_file{$had_breakpoints[$_]} = \%pf if %pf;
- }
- my %opt = get_list("PERLDB_OPT");
- my ($opt,$val);
- while (($opt,$val) = each %opt) {
- $val =~ s/[\\\']/\\$1/g;
- parse_options("$opt'$val'");
- }
- @INC = get_list("PERLDB_INC");
- @ini_INC = @INC;
- $pretype = [get_list("PERLDB_PRETYPE")];
- $pre = [get_list("PERLDB_PRE")];
- $post = [get_list("PERLDB_POST")];
- @typeahead = get_list("PERLDB_TYPEAHEAD", @typeahead);
-}
-
-if ($notty) {
- $runnonstop = 1;
-} else {
- # Is Perl being run from a slave editor or graphical debugger?
- $slave_editor = ((defined $main::ARGV[0]) and ($main::ARGV[0] eq '-emacs'));
- $rl = 0, shift(@main::ARGV) if $slave_editor;
-
- #require Term::ReadLine;
-
- if ($^O eq 'cygwin') {
- # /dev/tty is binary. use stdin for textmode
- undef $console;
- } elsif (-e "/dev/tty") {
- $console = "/dev/tty";
- } elsif ($^O eq 'dos' or -e "con" or $^O eq 'MSWin32') {
- $console = "con";
- } elsif ($^O eq 'MacOS') {
- if ($MacPerl::Version !~ /MPW/) {
- $console = "Dev:Console:Perl Debug"; # Separate window for application
- } else {
- $console = "Dev:Console";
- }
- } else {
- $console = "sys\$command";
- }
-
- if (($^O eq 'MSWin32') and ($slave_editor or defined $ENV{EMACS})) {
- $console = undef;
- }
-
- # Around a bug:
- if (defined $ENV{OS2_SHELL} and ($slave_editor or $ENV{WINDOWID})) { # In OS/2
- $console = undef;
- }
-
- if ($^O eq 'epoc') {
- $console = undef;
- }
-
- $console = $tty if defined $tty;
-
- if (defined $remoteport) {
- require IO::Socket;
- $OUT = new IO::Socket::INET( Timeout => '10',
- PeerAddr => $remoteport,
- Proto => 'tcp',
- );
- if (!$OUT) { die "Unable to connect to remote host: $remoteport\n"; }
- $IN = $OUT;
- }
- else {
- if (defined $console) {
- open(IN,"+<$console") || open(IN,"<$console") || open(IN,"<&STDIN");
- open(OUT,"+>$console") || open(OUT,">$console") || open(OUT,">&STDERR")
- || open(OUT,">&STDOUT"); # so we don't dongle stdout
- } else {
- open(IN,"<&STDIN");
- open(OUT,">&STDERR") || open(OUT,">&STDOUT"); # so we don't dongle stdout
- $console = 'STDIN/OUT';
- }
- # so open("|more") can read from STDOUT and so we don't dingle stdin
- $IN = \*IN;
-
- $OUT = \*OUT;
- }
- select($OUT);
- $| = 1; # for DB::OUT
- select(STDOUT);
-
- $LINEINFO = $OUT unless defined $LINEINFO;
- $lineinfo = $console unless defined $lineinfo;
-
- $| = 1; # for real STDOUT
-
- $header =~ s/.Header: ([^,]+),v(\s+\S+\s+\S+).*$/$1$2/;
- unless ($runnonstop) {
- print $OUT "\nLoading DB routines from $header\n";
- print $OUT ("Editor support ",
- $slave_editor ? "enabled" : "available",
- ".\n");
- print $OUT "\nEnter h or `h h' for help, or `$doccmd perldebug' for more help.\n\n";
- }
-}
-
-@ARGS = @ARGV;
-for (@args) {
- s/\'/\\\'/g;
- s/(.*)/'$1'/ unless /^-?[\d.]+$/;
-}
-
-if (defined &afterinit) { # May be defined in $rcfile
- &afterinit();
-}
-
-$I_m_init = 1;
-
-############################################################ Subroutines
-
-sub DB {
- # _After_ the perl program is compiled, $single is set to 1:
- if ($single and not $second_time++) {
- if ($runnonstop) { # Disable until signal
- for ($i=0; $i <= $stack_depth; ) {
- $stack[$i++] &= ~1;
- }
- $single = 0;
- # return; # Would not print trace!
- } elsif ($ImmediateStop) {
- $ImmediateStop = 0;
- $signal = 1;
- }
- }
- $runnonstop = 0 if $single or $signal; # Disable it if interactive.
- &save;
- ($package, $filename, $line) = caller;
- $filename_ini = $filename;
- $usercontext = '($@, $!, $^E, $,, $/, $\, $^W) = @saved;' .
- "package $package;"; # this won't let them modify, alas
- local(*dbline) = $main::{'_<' . $filename};
- $max = $#dbline;
- if (($stop,$action) = split(/\0/,$dbline{$line})) {
- if ($stop eq '1') {
- $signal |= 1;
- } elsif ($stop) {
- $evalarg = "\$DB::signal |= 1 if do {$stop}"; &eval;
- $dbline{$line} =~ s/;9($|\0)/$1/;
- }
- }
- my $was_signal = $signal;
- if ($trace & 2) {
- for (my $n = 0; $n <= $#to_watch; $n++) {
- $evalarg = $to_watch[$n];
- local $onetimeDump; # Do not output results
- my ($val) = &eval; # Fix context (&eval is doing array)?
- $val = ( (defined $val) ? "'$val'" : 'undef' );
- if ($val ne $old_watch[$n]) {
- $signal = 1;
- print $OUT <<EOP;
-Watchpoint $n:\t$to_watch[$n] changed:
- old value:\t$old_watch[$n]
- new value:\t$val
-EOP
- $old_watch[$n] = $val;
- }
- }
- }
- if ($trace & 4) { # User-installed watch
- return if watchfunction($package, $filename, $line)
- and not $single and not $was_signal and not ($trace & ~4);
- }
- $was_signal = $signal;
- $signal = 0;
- if ($single || ($trace & 1) || $was_signal) {
- if ($slave_editor) {
- $position = "\032\032$filename:$line:0\n";
- print $LINEINFO $position;
- } elsif ($package eq 'DB::fake') {
- $term || &setterm;
- print_help(<<EOP);
-Debugged program terminated. Use B<q> to quit or B<R> to restart,
- use B<O> I<inhibit_exit> to avoid stopping after program termination,
- B<h q>, B<h R> or B<h O> to get additional info.
-EOP
- $package = 'main';
- $usercontext = '($@, $!, $^E, $,, $/, $\, $^W) = @saved;' .
- "package $package;"; # this won't let them modify, alas
- } else {
- $sub =~ s/\'/::/;
- $prefix = $sub =~ /::/ ? "" : "${'package'}::";
- $prefix .= "$sub($filename:";
- $after = ($dbline[$line] =~ /\n$/ ? '' : "\n");
- if (length($prefix) > 30) {
- $position = "$prefix$line):\n$line:\t$dbline[$line]$after";
- $prefix = "";
- $infix = ":\t";
- } else {
- $infix = "):\t";
- $position = "$prefix$line$infix$dbline[$line]$after";
- }
- if ($frame) {
- print $LINEINFO ' ' x $stack_depth, "$line:\t$dbline[$line]$after";
- } else {
- print $LINEINFO $position;
- }
- for ($i = $line + 1; $i <= $max && $dbline[$i] == 0; ++$i) { #{ vi
- last if $dbline[$i] =~ /^\s*[\;\}\#\n]/;
- last if $signal;
- $after = ($dbline[$i] =~ /\n$/ ? '' : "\n");
- $incr_pos = "$prefix$i$infix$dbline[$i]$after";
- $position .= $incr_pos;
- if ($frame) {
- print $LINEINFO ' ' x $stack_depth, "$i:\t$dbline[$i]$after";
- } else {
- print $LINEINFO $incr_pos;
- }
- }
- }
- }
- $evalarg = $action, &eval if $action;
- if ($single || $was_signal) {
- local $level = $level + 1;
- foreach $evalarg (@$pre) {
- &eval;
- }
- print $OUT $stack_depth . " levels deep in subroutine calls!\n"
- if $single & 4;
- $start = $line;
- $incr = -1; # for backward motion.
- @typeahead = (@$pretype, @typeahead);
- CMD:
- while (($term || &setterm),
- ($term_pid == $$ or &resetterm),
- defined ($cmd=&readline(" DB" . ('<' x $level) .
- ($#hist+1) . ('>' x $level) .
- " ")))
- {
- $single = 0;
- $signal = 0;
- $cmd =~ s/\\$/\n/ && do {
- $cmd .= &readline(" cont: ");
- redo CMD;
- };
- $cmd =~ /^$/ && ($cmd = $laststep);
- push(@hist,$cmd) if length($cmd) > 1;
- PIPE: {
- $cmd =~ s/^\s+//s; # trim annoying leading whitespace
- $cmd =~ s/\s+$//s; # trim annoying trailing whitespace
- ($i) = split(/\s+/,$cmd);
- if ($alias{$i}) {
- # squelch the sigmangler
- local $SIG{__DIE__};
- local $SIG{__WARN__};
- eval "\$cmd =~ $alias{$i}";
- if ($@) {
- print $OUT "Couldn't evaluate `$i' alias: $@";
- next CMD;
- }
- }
- $cmd =~ /^q$/ && ($fall_off_end = 1) && exit $?;
- $cmd =~ /^h$/ && do {
- print_help($help);
- next CMD; };
- $cmd =~ /^h\s+h$/ && do {
- print_help($summary);
- next CMD; };
- # support long commands; otherwise bogus errors
- # happen when you ask for h on <CR> for example
- $cmd =~ /^h\s+(\S.*)$/ && do {
- my $asked = $1; # for proper errmsg
- my $qasked = quotemeta($asked); # for searching
- # XXX: finds CR but not <CR>
- if ($help =~ /^<?(?:[IB]<)$qasked/m) {
- while ($help =~ /^(<?(?:[IB]<)$qasked([\s\S]*?)\n)(?!\s)/mg) {
- print_help($1);
- }
- } else {
- print_help("B<$asked> is not a debugger command.\n");
- }
- next CMD; };
- $cmd =~ /^t$/ && do {
- $trace ^= 1;
- print $OUT "Trace = " .
- (($trace & 1) ? "on" : "off" ) . "\n";
- next CMD; };
- $cmd =~ /^S(\s+(!)?(.+))?$/ && do {
- $Srev = defined $2; $Spatt = $3; $Snocheck = ! defined $1;
- foreach $subname (sort(keys %sub)) {
- if ($Snocheck or $Srev^($subname =~ /$Spatt/)) {
- print $OUT $subname,"\n";
- }
- }
- next CMD; };
- $cmd =~ /^v$/ && do {
- list_versions(); next CMD};
- $cmd =~ s/^X\b/V $package/;
- $cmd =~ /^V$/ && do {
- $cmd = "V $package"; };
- $cmd =~ /^V\b\s*(\S+)\s*(.*)/ && do {
- local ($savout) = select($OUT);
- $packname = $1;
- @vars = split(' ',$2);
- do 'dumpvar.pl' unless defined &main::dumpvar;
- if (defined &main::dumpvar) {
- local $frame = 0;
- local $doret = -2;
- # must detect sigpipe failures
- eval { &main::dumpvar($packname,@vars) };
- if ($@) {
- die unless $@ =~ /dumpvar print failed/;
- }
- } else {
- print $OUT "dumpvar.pl not available.\n";
- }
- select ($savout);
- next CMD; };
- $cmd =~ s/^x\b/ / && do { # So that will be evaled
- $onetimeDump = 'dump'; };
- $cmd =~ s/^m\s+([\w:]+)\s*$/ / && do {
- methods($1); next CMD};
- $cmd =~ s/^m\b/ / && do { # So this will be evaled
- $onetimeDump = 'methods'; };
- $cmd =~ /^f\b\s*(.*)/ && do {
- $file = $1;
- $file =~ s/\s+$//;
- if (!$file) {
- print $OUT "The old f command is now the r command.\n";
- print $OUT "The new f command switches filenames.\n";
- next CMD;
- }
- if (!defined $main::{'_<' . $file}) {
- if (($try) = grep(m#^_<.*$file#, keys %main::)) {{
- $try = substr($try,2);
- print $OUT "Choosing $try matching `$file':\n";
- $file = $try;
- }}
- }
- if (!defined $main::{'_<' . $file}) {
- print $OUT "No file matching `$file' is loaded.\n";
- next CMD;
- } elsif ($file ne $filename) {
- *dbline = $main::{'_<' . $file};
- $max = $#dbline;
- $filename = $file;
- $start = 1;
- $cmd = "l";
- } else {
- print $OUT "Already in $file.\n";
- next CMD;
- }
- };
- $cmd =~ s/^l\s+-\s*$/-/;
- $cmd =~ /^([lb])\b\s*(\$.*)/s && do {
- $evalarg = $2;
- my ($s) = &eval;
- print($OUT "Error: $@\n"), next CMD if $@;
- $s = CvGV_name($s);
- print($OUT "Interpreted as: $1 $s\n");
- $cmd = "$1 $s";
- };
- $cmd =~ /^l\b\s*([\':A-Za-z_][\':\w]*(\[.*\])?)/s && do {
- $subname = $1;
- $subname =~ s/\'/::/;
- $subname = $package."::".$subname
- unless $subname =~ /::/;
- $subname = "main".$subname if substr($subname,0,2) eq "::";
- @pieces = split(/:/,find_sub($subname) || $sub{$subname});
- $subrange = pop @pieces;
- $file = join(':', @pieces);
- if ($file ne $filename) {
- print $OUT "Switching to file '$file'.\n"
- unless $slave_editor;
- *dbline = $main::{'_<' . $file};
- $max = $#dbline;
- $filename = $file;
- }
- if ($subrange) {
- if (eval($subrange) < -$window) {
- $subrange =~ s/-.*/+/;
- }
- $cmd = "l $subrange";
- } else {
- print $OUT "Subroutine $subname not found.\n";
- next CMD;
- } };
- $cmd =~ /^\.$/ && do {
- $incr = -1; # for backward motion.
- $start = $line;
- $filename = $filename_ini;
- *dbline = $main::{'_<' . $filename};
- $max = $#dbline;
- print $LINEINFO $position;
- next CMD };
- $cmd =~ /^w\b\s*(\d*)$/ && do {
- $incr = $window - 1;
- $start = $1 if $1;
- $start -= $preview;
- #print $OUT 'l ' . $start . '-' . ($start + $incr);
- $cmd = 'l ' . $start . '-' . ($start + $incr); };
- $cmd =~ /^-$/ && do {
- $start -= $incr + $window + 1;
- $start = 1 if $start <= 0;
- $incr = $window - 1;
- $cmd = 'l ' . ($start) . '+'; };
- $cmd =~ /^l$/ && do {
- $incr = $window - 1;
- $cmd = 'l ' . $start . '-' . ($start + $incr); };
- $cmd =~ /^l\b\s*(\d*)\+(\d*)$/ && do {
- $start = $1 if $1;
- $incr = $2;
- $incr = $window - 1 unless $incr;
- $cmd = 'l ' . $start . '-' . ($start + $incr); };
- $cmd =~ /^l\b\s*((-?[\d\$\.]+)([-,]([\d\$\.]+))?)?/ && do {
- $end = (!defined $2) ? $max : ($4 ? $4 : $2);
- $end = $max if $end > $max;
- $i = $2;
- $i = $line if $i eq '.';
- $i = 1 if $i < 1;
- $incr = $end - $i;
- if ($slave_editor) {
- print $OUT "\032\032$filename:$i:0\n";
- $i = $end;
- } else {
- for (; $i <= $end; $i++) {
- ($stop,$action) = split(/\0/, $dbline{$i});
- $arrow = ($i==$line
- and $filename eq $filename_ini)
- ? '==>'
- : ($dbline[$i]+0 ? ':' : ' ') ;
- $arrow .= 'b' if $stop;
- $arrow .= 'a' if $action;
- print $OUT "$i$arrow\t", $dbline[$i];
- $i++, last if $signal;
- }
- print $OUT "\n" unless $dbline[$i-1] =~ /\n$/;
- }
- $start = $i; # remember in case they want more
- $start = $max if $start > $max;
- next CMD; };
- $cmd =~ /^D$/ && do {
- print $OUT "Deleting all breakpoints...\n";
- my $file;
- for $file (keys %had_breakpoints) {
- local *dbline = $main::{'_<' . $file};
- my $max = $#dbline;
- my $was;
-
- for ($i = 1; $i <= $max ; $i++) {
- if (defined $dbline{$i}) {
- $dbline{$i} =~ s/^[^\0]+//;
- if ($dbline{$i} =~ s/^\0?$//) {
- delete $dbline{$i};
- }
- }
- }
-
- if (not $had_breakpoints{$file} &= ~1) {
- delete $had_breakpoints{$file};
- }
- }
- undef %postponed;
- undef %postponed_file;
- undef %break_on_load;
- next CMD; };
- $cmd =~ /^L$/ && do {
- my $file;
- for $file (keys %had_breakpoints) {
- local *dbline = $main::{'_<' . $file};
- my $max = $#dbline;
- my $was;
-
- for ($i = 1; $i <= $max; $i++) {
- if (defined $dbline{$i}) {
- print $OUT "$file:\n" unless $was++;
- print $OUT " $i:\t", $dbline[$i];
- ($stop,$action) = split(/\0/, $dbline{$i});
- print $OUT " break if (", $stop, ")\n"
- if $stop;
- print $OUT " action: ", $action, "\n"
- if $action;
- last if $signal;
- }
- }
- }
- if (%postponed) {
- print $OUT "Postponed breakpoints in subroutines:\n";
- my $subname;
- for $subname (keys %postponed) {
- print $OUT " $subname\t$postponed{$subname}\n";
- last if $signal;
- }
- }
- my @have = map { # Combined keys
- keys %{$postponed_file{$_}}
- } keys %postponed_file;
- if (@have) {
- print $OUT "Postponed breakpoints in files:\n";
- my ($file, $line);
- for $file (keys %postponed_file) {
- my $db = $postponed_file{$file};
- print $OUT " $file:\n";
- for $line (sort {$a <=> $b} keys %$db) {
- print $OUT " $line:\n";
- my ($stop,$action) = split(/\0/, $$db{$line});
- print $OUT " break if (", $stop, ")\n"
- if $stop;
- print $OUT " action: ", $action, "\n"
- if $action;
- last if $signal;
- }
- last if $signal;
- }
- }
- if (%break_on_load) {
- print $OUT "Breakpoints on load:\n";
- my $file;
- for $file (keys %break_on_load) {
- print $OUT " $file\n";
- last if $signal;
- }
- }
- if ($trace & 2) {
- print $OUT "Watch-expressions:\n";
- my $expr;
- for $expr (@to_watch) {
- print $OUT " $expr\n";
- last if $signal;
- }
- }
- next CMD; };
- $cmd =~ /^b\b\s*load\b\s*(.*)/ && do {
- my $file = $1; $file =~ s/\s+$//;
- {
- $break_on_load{$file} = 1;
- $break_on_load{$::INC{$file}} = 1 if $::INC{$file};
- $file .= '.pm', redo unless $file =~ /\./;
- }
- $had_breakpoints{$file} |= 1;
- print $OUT "Will stop on load of `@{[join '\', `', sort keys %break_on_load]}'.\n";
- next CMD; };
- $cmd =~ /^b\b\s*(postpone|compile)\b\s*([':A-Za-z_][':\w]*)\s*(.*)/ && do {
- my $cond = length $3 ? $3 : '1';
- my ($subname, $break) = ($2, $1 eq 'postpone');
- $subname =~ s/\'/::/g;
- $subname = "${'package'}::" . $subname
- unless $subname =~ /::/;
- $subname = "main".$subname if substr($subname,0,2) eq "::";
- $postponed{$subname} = $break
- ? "break +0 if $cond" : "compile";
- next CMD; };
- $cmd =~ /^b\b\s*([':A-Za-z_][':\w]*(?:\[.*\])?)\s*(.*)/ && do {
- $subname = $1;
- $cond = length $2 ? $2 : '1';
- $subname =~ s/\'/::/g;
- $subname = "${'package'}::" . $subname
- unless $subname =~ /::/;
- $subname = "main".$subname if substr($subname,0,2) eq "::";
- # Filename below can contain ':'
- ($file,$i) = (find_sub($subname) =~ /^(.*):(.*)$/);
- $i += 0;
- if ($i) {
- local $filename = $file;
- local *dbline = $main::{'_<' . $filename};
- $had_breakpoints{$filename} |= 1;
- $max = $#dbline;
- ++$i while $dbline[$i] == 0 && $i < $max;
- $dbline{$i} =~ s/^[^\0]*/$cond/;
- } else {
- print $OUT "Subroutine $subname not found.\n";
- }
- next CMD; };
- $cmd =~ /^b\b\s*(\d*)\s*(.*)/ && do {
- $i = $1 || $line;
- $cond = length $2 ? $2 : '1';
- if ($dbline[$i] == 0) {
- print $OUT "Line $i not breakable.\n";
- } else {
- $had_breakpoints{$filename} |= 1;
- $dbline{$i} =~ s/^[^\0]*/$cond/;
- }
- next CMD; };
- $cmd =~ /^d\b\s*(\d*)/ && do {
- $i = $1 || $line;
- if ($dbline[$i] == 0) {
- print $OUT "Line $i not breakable.\n";
- } else {
- $dbline{$i} =~ s/^[^\0]*//;
- delete $dbline{$i} if $dbline{$i} eq '';
- }
- next CMD; };
- $cmd =~ /^A$/ && do {
- print $OUT "Deleting all actions...\n";
- my $file;
- for $file (keys %had_breakpoints) {
- local *dbline = $main::{'_<' . $file};
- my $max = $#dbline;
- my $was;
-
- for ($i = 1; $i <= $max ; $i++) {
- if (defined $dbline{$i}) {
- $dbline{$i} =~ s/\0[^\0]*//;
- delete $dbline{$i} if $dbline{$i} eq '';
- }
- }
-
- unless ($had_breakpoints{$file} &= ~2) {
- delete $had_breakpoints{$file};
- }
- }
- next CMD; };
- $cmd =~ /^O\s*$/ && do {
- for (@options) {
- &dump_option($_);
- }
- next CMD; };
- $cmd =~ /^O\s*(\S.*)/ && do {
- parse_options($1);
- next CMD; };
- $cmd =~ /^\<\<\s*(.*)/ && do { # \<\< for CPerl sake: not HERE
- push @$pre, action($1);
- next CMD; };
- $cmd =~ /^>>\s*(.*)/ && do {
- push @$post, action($1);
- next CMD; };
- $cmd =~ /^<\s*(.*)/ && do {
- unless ($1) {
- print $OUT "All < actions cleared.\n";
- $pre = [];
- next CMD;
- }
- if ($1 eq '?') {
- unless (@$pre) {
- print $OUT "No pre-prompt Perl actions.\n";
- next CMD;
- }
- print $OUT "Perl commands run before each prompt:\n";
- for my $action ( @$pre ) {
- print $OUT "\t< -- $action\n";
- }
- next CMD;
- }
- $pre = [action($1)];
- next CMD; };
- $cmd =~ /^>\s*(.*)/ && do {
- unless ($1) {
- print $OUT "All > actions cleared.\n";
- $post = [];
- next CMD;
- }
- if ($1 eq '?') {
- unless (@$post) {
- print $OUT "No post-prompt Perl actions.\n";
- next CMD;
- }
- print $OUT "Perl commands run after each prompt:\n";
- for my $action ( @$post ) {
- print $OUT "\t> -- $action\n";
- }
- next CMD;
- }
- $post = [action($1)];
- next CMD; };
- $cmd =~ /^\{\{\s*(.*)/ && do {
- if ($cmd =~ /^\{.*\}$/ && unbalanced(substr($cmd,2))) {
- print $OUT "{{ is now a debugger command\n",
- "use `;{{' if you mean Perl code\n";
- $cmd = "h {{";
- redo CMD;
- }
- push @$pretype, $1;
- next CMD; };
- $cmd =~ /^\{\s*(.*)/ && do {
- unless ($1) {
- print $OUT "All { actions cleared.\n";
- $pretype = [];
- next CMD;
- }
- if ($1 eq '?') {
- unless (@$pretype) {
- print $OUT "No pre-prompt debugger actions.\n";
- next CMD;
- }
- print $OUT "Debugger commands run before each prompt:\n";
- for my $action ( @$pretype ) {
- print $OUT "\t{ -- $action\n";
- }
- next CMD;
- }
- if ($cmd =~ /^\{.*\}$/ && unbalanced(substr($cmd,1))) {
- print $OUT "{ is now a debugger command\n",
- "use `;{' if you mean Perl code\n";
- $cmd = "h {";
- redo CMD;
- }
- $pretype = [$1];
- next CMD; };
- $cmd =~ /^a\b\s*(\d*)\s*(.*)/ && do {
- $i = $1 || $line; $j = $2;
- if (length $j) {
- if ($dbline[$i] == 0) {
- print $OUT "Line $i may not have an action.\n";
- } else {
- $had_breakpoints{$filename} |= 2;
- $dbline{$i} =~ s/\0[^\0]*//;
- $dbline{$i} .= "\0" . action($j);
- }
- } else {
- $dbline{$i} =~ s/\0[^\0]*//;
- delete $dbline{$i} if $dbline{$i} eq '';
- }
- next CMD; };
- $cmd =~ /^n$/ && do {
- end_report(), next CMD if $finished and $level <= 1;
- $single = 2;
- $laststep = $cmd;
- last CMD; };
- $cmd =~ /^s$/ && do {
- end_report(), next CMD if $finished and $level <= 1;
- $single = 1;
- $laststep = $cmd;
- last CMD; };
- $cmd =~ /^c\b\s*([\w:]*)\s*$/ && do {
- end_report(), next CMD if $finished and $level <= 1;
- $subname = $i = $1;
- # Probably not needed, since we finish an interactive
- # sub-session anyway...
- # local $filename = $filename;
- # local *dbline = *dbline; # XXX Would this work?!
- if ($i =~ /\D/) { # subroutine name
- $subname = $package."::".$subname
- unless $subname =~ /::/;
- ($file,$i) = (find_sub($subname) =~ /^(.*):(.*)$/);
- $i += 0;
- if ($i) {
- $filename = $file;
- *dbline = $main::{'_<' . $filename};
- $had_breakpoints{$filename} |= 1;
- $max = $#dbline;
- ++$i while $dbline[$i] == 0 && $i < $max;
- } else {
- print $OUT "Subroutine $subname not found.\n";
- next CMD;
- }
- }
- if ($i) {
- if ($dbline[$i] == 0) {
- print $OUT "Line $i not breakable.\n";
- next CMD;
- }
- $dbline{$i} =~ s/($|\0)/;9$1/; # add one-time-only b.p.
- }
- for ($i=0; $i <= $stack_depth; ) {
- $stack[$i++] &= ~1;
- }
- last CMD; };
- $cmd =~ /^r$/ && do {
- end_report(), next CMD if $finished and $level <= 1;
- $stack[$stack_depth] |= 1;
- $doret = $option{PrintRet} ? $stack_depth - 1 : -2;
- last CMD; };
- $cmd =~ /^R$/ && do {
- print $OUT "Warning: some settings and command-line options may be lost!\n";
- my (@script, @flags, $cl);
- push @flags, '-w' if $ini_warn;
- # Put all the old includes at the start to get
- # the same debugger.
- for (@ini_INC) {
- push @flags, '-I', $_;
- }
- # Arrange for setting the old INC:
- set_list("PERLDB_INC", @ini_INC);
- if ($0 eq '-e') {
- for (1..$#{'::_<-e'}) { # The first line is PERL5DB
- chomp ($cl = ${'::_<-e'}[$_]);
- push @script, '-e', $cl;
- }
- } else {
- @script = $0;
- }
- set_list("PERLDB_HIST",
- $term->Features->{getHistory}
- ? $term->GetHistory : @hist);
- my @had_breakpoints = keys %had_breakpoints;
- set_list("PERLDB_VISITED", @had_breakpoints);
- set_list("PERLDB_OPT", %option);
- set_list("PERLDB_ON_LOAD", %break_on_load);
- my @hard;
- for (0 .. $#had_breakpoints) {
- my $file = $had_breakpoints[$_];
- *dbline = $main::{'_<' . $file};
- next unless %dbline or $postponed_file{$file};
- (push @hard, $file), next
- if $file =~ /^\(eval \d+\)$/;
- my @add;
- @add = %{$postponed_file{$file}}
- if $postponed_file{$file};
- set_list("PERLDB_FILE_$_", %dbline, @add);
- }
- for (@hard) { # Yes, really-really...
- # Find the subroutines in this eval
- *dbline = $main::{'_<' . $_};
- my ($quoted, $sub, %subs, $line) = quotemeta $_;
- for $sub (keys %sub) {
- next unless $sub{$sub} =~ /^$quoted:(\d+)-(\d+)$/;
- $subs{$sub} = [$1, $2];
- }
- unless (%subs) {
- print $OUT
- "No subroutines in $_, ignoring breakpoints.\n";
- next;
- }
- LINES: for $line (keys %dbline) {
- # One breakpoint per sub only:
- my ($offset, $sub, $found);
- SUBS: for $sub (keys %subs) {
- if ($subs{$sub}->[1] >= $line # Not after the subroutine
- and (not defined $offset # Not caught
- or $offset < 0 )) { # or badly caught
- $found = $sub;
- $offset = $line - $subs{$sub}->[0];
- $offset = "+$offset", last SUBS if $offset >= 0;
- }
- }
- if (defined $offset) {
- $postponed{$found} =
- "break $offset if $dbline{$line}";
- } else {
- print $OUT "Breakpoint in $_:$line ignored: after all the subroutines.\n";
- }
- }
- }
- set_list("PERLDB_POSTPONE", %postponed);
- set_list("PERLDB_PRETYPE", @$pretype);
- set_list("PERLDB_PRE", @$pre);
- set_list("PERLDB_POST", @$post);
- set_list("PERLDB_TYPEAHEAD", @typeahead);
- $ENV{PERLDB_RESTART} = 1;
- #print "$^X, '-d', @flags, @script, ($slave_editor ? '-emacs' : ()), @ARGS";
- exec $^X, '-d', @flags, @script, ($slave_editor ? '-emacs' : ()), @ARGS;
- print $OUT "exec failed: $!\n";
- last CMD; };
- $cmd =~ /^T$/ && do {
- print_trace($OUT, 1); # skip DB
- next CMD; };
- $cmd =~ /^W\s*$/ && do {
- $trace &= ~2;
- @to_watch = @old_watch = ();
- next CMD; };
- $cmd =~ /^W\b\s*(.*)/s && do {
- push @to_watch, $1;
- $evalarg = $1;
- my ($val) = &eval;
- $val = (defined $val) ? "'$val'" : 'undef' ;
- push @old_watch, $val;
- $trace |= 2;
- next CMD; };
- $cmd =~ /^\/(.*)$/ && do {
- $inpat = $1;
- $inpat =~ s:([^\\])/$:$1:;
- if ($inpat ne "") {
- # squelch the sigmangler
- local $SIG{__DIE__};
- local $SIG{__WARN__};
- eval '$inpat =~ m'."\a$inpat\a";
- if ($@ ne "") {
- print $OUT "$@";
- next CMD;
- }
- $pat = $inpat;
- }
- $end = $start;
- $incr = -1;
- eval '
- for (;;) {
- ++$start;
- $start = 1 if ($start > $max);
- last if ($start == $end);
- if ($dbline[$start] =~ m' . "\a$pat\a" . 'i) {
- if ($slave_editor) {
- print $OUT "\032\032$filename:$start:0\n";
- } else {
- print $OUT "$start:\t", $dbline[$start], "\n";
- }
- last;
- }
- } ';
- print $OUT "/$pat/: not found\n" if ($start == $end);
- next CMD; };
- $cmd =~ /^\?(.*)$/ && do {
- $inpat = $1;
- $inpat =~ s:([^\\])\?$:$1:;
- if ($inpat ne "") {
- # squelch the sigmangler
- local $SIG{__DIE__};
- local $SIG{__WARN__};
- eval '$inpat =~ m'."\a$inpat\a";
- if ($@ ne "") {
- print $OUT $@;
- next CMD;
- }
- $pat = $inpat;
- }
- $end = $start;
- $incr = -1;
- eval '
- for (;;) {
- --$start;
- $start = $max if ($start <= 0);
- last if ($start == $end);
- if ($dbline[$start] =~ m' . "\a$pat\a" . 'i) {
- if ($slave_editor) {
- print $OUT "\032\032$filename:$start:0\n";
- } else {
- print $OUT "$start:\t", $dbline[$start], "\n";
- }
- last;
- }
- } ';
- print $OUT "?$pat?: not found\n" if ($start == $end);
- next CMD; };
- $cmd =~ /^$rc+\s*(-)?(\d+)?$/ && do {
- pop(@hist) if length($cmd) > 1;
- $i = $1 ? ($#hist-($2||1)) : ($2||$#hist);
- $cmd = $hist[$i];
- print $OUT $cmd, "\n";
- redo CMD; };
- $cmd =~ /^$sh$sh\s*([\x00-\xff]*)/ && do {
- &system($1);
- next CMD; };
- $cmd =~ /^$rc([^$rc].*)$/ && do {
- $pat = "^$1";
- pop(@hist) if length($cmd) > 1;
- for ($i = $#hist; $i; --$i) {
- last if $hist[$i] =~ /$pat/;
- }
- if (!$i) {
- print $OUT "No such command!\n\n";
- next CMD;
- }
- $cmd = $hist[$i];
- print $OUT $cmd, "\n";
- redo CMD; };
- $cmd =~ /^$sh$/ && do {
- &system($ENV{SHELL}||"/bin/sh");
- next CMD; };
- $cmd =~ /^$sh\s*([\x00-\xff]*)/ && do {
- # XXX: using csh or tcsh destroys sigint retvals!
- #&system($1); # use this instead
- &system($ENV{SHELL}||"/bin/sh","-c",$1);
- next CMD; };
- $cmd =~ /^H\b\s*(-(\d+))?/ && do {
- $end = $2 ? ($#hist-$2) : 0;
- $hist = 0 if $hist < 0;
- for ($i=$#hist; $i>$end; $i--) {
- print $OUT "$i: ",$hist[$i],"\n"
- unless $hist[$i] =~ /^.?$/;
- };
- next CMD; };
- $cmd =~ /^(?:man|(?:perl)?doc)\b(?:\s+([^(]*))?$/ && do {
- runman($1);
- next CMD; };
- $cmd =~ s/^p$/print {\$DB::OUT} \$_/;
- $cmd =~ s/^p\b/print {\$DB::OUT} /;
- $cmd =~ s/^=\s*// && do {
- my @keys;
- if (length $cmd == 0) {
- @keys = sort keys %alias;
- }
- elsif (my($k,$v) = ($cmd =~ /^(\S+)\s+(\S.*)/)) {
- # can't use $_ or kill //g state
- for my $x ($k, $v) { $x =~ s/\a/\\a/g }
- $alias{$k} = "s\a$k\a$v\a";
- # squelch the sigmangler
- local $SIG{__DIE__};
- local $SIG{__WARN__};
- unless (eval "sub { s\a$k\a$v\a }; 1") {
- print $OUT "Can't alias $k to $v: $@\n";
- delete $alias{$k};
- next CMD;
- }
- @keys = ($k);
- }
- else {
- @keys = ($cmd);
- }
- for my $k (@keys) {
- if ((my $v = $alias{$k}) =~ ss\a$k\a(.*)\a$1) {
- print $OUT "$k\t= $1\n";
- }
- elsif (defined $alias{$k}) {
- print $OUT "$k\t$alias{$k}\n";
- }
- else {
- print "No alias for $k\n";
- }
- }
- next CMD; };
- $cmd =~ /^\|\|?\s*[^|]/ && do {
- if ($pager =~ /^\|/) {
- open(SAVEOUT,">&STDOUT") || &warn("Can't save STDOUT");
- open(STDOUT,">&OUT") || &warn("Can't redirect STDOUT");
- } else {
- open(SAVEOUT,">&OUT") || &warn("Can't save DB::OUT");
- }
- fix_less();
- unless ($piped=open(OUT,$pager)) {
- &warn("Can't pipe output to `$pager'");
- if ($pager =~ /^\|/) {
- open(OUT,">&STDOUT") # XXX: lost message
- || &warn("Can't restore DB::OUT");
- open(STDOUT,">&SAVEOUT")
- || &warn("Can't restore STDOUT");
- close(SAVEOUT);
- } else {
- open(OUT,">&STDOUT") # XXX: lost message
- || &warn("Can't restore DB::OUT");
- }
- next CMD;
- }
- $SIG{PIPE}= \&DB::catch if $pager =~ /^\|/
- && ("" eq $SIG{PIPE} || "DEFAULT" eq $SIG{PIPE});
- $selected= select(OUT);
- $|= 1;
- select( $selected ), $selected= "" unless $cmd =~ /^\|\|/;
- $cmd =~ s/^\|+\s*//;
- redo PIPE;
- };
- # XXX Local variants do not work!
- $cmd =~ s/^t\s/\$DB::trace |= 1;\n/;
- $cmd =~ s/^s\s/\$DB::single = 1;\n/ && do {$laststep = 's'};
- $cmd =~ s/^n\s/\$DB::single = 2;\n/ && do {$laststep = 'n'};
- } # PIPE:
- $evalarg = "\$^D = \$^D | \$DB::db_stop;\n$cmd"; &eval;
- if ($onetimeDump) {
- $onetimeDump = undef;
- } elsif ($term_pid == $$) {
- print $OUT "\n";
- }
- } continue { # CMD:
- if ($piped) {
- if ($pager =~ /^\|/) {
- $? = 0;
- # we cannot warn here: the handle is missing --tchrist
- close(OUT) || print SAVEOUT "\nCan't close DB::OUT\n";
-
- # most of the $? crud was coping with broken cshisms
- if ($?) {
- print SAVEOUT "Pager `$pager' failed: ";
- if ($? == -1) {
- print SAVEOUT "shell returned -1\n";
- } elsif ($? >> 8) {
- print SAVEOUT
- ( $? & 127 ) ? " (SIG#".($?&127).")" : "",
- ( $? & 128 ) ? " -- core dumped" : "", "\n";
- } else {
- print SAVEOUT "status ", ($? >> 8), "\n";
- }
- }
-
- open(OUT,">&STDOUT") || &warn("Can't restore DB::OUT");
- open(STDOUT,">&SAVEOUT") || &warn("Can't restore STDOUT");
- $SIG{PIPE} = "DEFAULT" if $SIG{PIPE} eq \&DB::catch;
- # Will stop ignoring SIGPIPE if done like nohup(1)
- # does SIGINT but Perl doesn't give us a choice.
- } else {
- open(OUT,">&SAVEOUT") || &warn("Can't restore DB::OUT");
- }
- close(SAVEOUT);
- select($selected), $selected= "" unless $selected eq "";
- $piped= "";
- }
- } # CMD:
- $fall_off_end = 1 unless defined $cmd; # Emulate `q' on EOF
- foreach $evalarg (@$post) {
- &eval;
- }
- } # if ($single || $signal)
- ($@, $!, $^E, $,, $/, $\, $^W) = @saved;
- ();
-}
-
-# The following code may be executed now:
-# BEGIN {warn 4}
-
-sub sub {
- my ($al, $ret, @ret) = "";
- if (length($sub) > 10 && substr($sub, -10, 10) eq '::AUTOLOAD') {
- $al = " for $$sub";
- }
- local $stack_depth = $stack_depth + 1; # Protect from non-local exits
- $#stack = $stack_depth;
- $stack[-1] = $single;
- $single &= 1;
- $single |= 4 if $stack_depth == $deep;
- ($frame & 4
- ? ( (print $LINEINFO ' ' x ($stack_depth - 1), "in "),
- # Why -1? But it works! :-(
- print_trace($LINEINFO, -1, 1, 1, "$sub$al") )
- : print $LINEINFO ' ' x ($stack_depth - 1), "entering $sub$al\n") if $frame;
- if (wantarray) {
- @ret = &$sub;
- $single |= $stack[$stack_depth--];
- ($frame & 4
- ? ( (print $LINEINFO ' ' x $stack_depth, "out "),
- print_trace($LINEINFO, -1, 1, 1, "$sub$al") )
- : print $LINEINFO ' ' x $stack_depth, "exited $sub$al\n") if $frame & 2;
- if ($doret eq $stack_depth or $frame & 16) {
- my $fh = ($doret eq $stack_depth ? $OUT : $LINEINFO);
- print $fh ' ' x $stack_depth if $frame & 16;
- print $fh "list context return from $sub:\n";
- dumpit($fh, \@ret );
- $doret = -2;
- }
- @ret;
- } else {
- if (defined wantarray) {
- $ret = &$sub;
- } else {
- &$sub; undef $ret;
- };
- $single |= $stack[$stack_depth--];
- ($frame & 4
- ? ( (print $LINEINFO ' ' x $stack_depth, "out "),
- print_trace($LINEINFO, -1, 1, 1, "$sub$al") )
- : print $LINEINFO ' ' x $stack_depth, "exited $sub$al\n") if $frame & 2;
- if ($doret eq $stack_depth or $frame & 16 and defined wantarray) {
- my $fh = ($doret eq $stack_depth ? $OUT : $LINEINFO);
- print $fh (' ' x $stack_depth) if $frame & 16;
- print $fh (defined wantarray
- ? "scalar context return from $sub: "
- : "void context return from $sub\n");
- dumpit( $fh, $ret ) if defined wantarray;
- $doret = -2;
- }
- $ret;
- }
-}
-
-sub save {
- @saved = ($@, $!, $^E, $,, $/, $\, $^W);
- $, = ""; $/ = "\n"; $\ = ""; $^W = 0;
-}
-
-# The following takes its argument via $evalarg to preserve current @_
-
-sub eval {
- # 'my' would make it visible from user code
- # but so does local! --tchrist
- local @res;
- {
- local $otrace = $trace;
- local $osingle = $single;
- local $od = $^D;
- { ($evalarg) = $evalarg =~ /(.*)/s; }
- @res = eval "$usercontext $evalarg;\n"; # '\n' for nice recursive debug
- $trace = $otrace;
- $single = $osingle;
- $^D = $od;
- }
- my $at = $@;
- local $saved[0]; # Preserve the old value of $@
- eval { &DB::save };
- if ($at) {
- print $OUT $at;
- } elsif ($onetimeDump eq 'dump') {
- dumpit($OUT, \@res);
- } elsif ($onetimeDump eq 'methods') {
- methods($res[0]);
- }
- @res;
-}
-
-sub postponed_sub {
- my $subname = shift;
- if ($postponed{$subname} =~ s/^break\s([+-]?\d+)\s+if\s//) {
- my $offset = $1 || 0;
- # Filename below can contain ':'
- my ($file,$i) = (find_sub($subname) =~ /^(.*):(\d+)-.*$/);
- if ($i) {
- $i += $offset;
- local *dbline = $main::{'_<' . $file};
- local $^W = 0; # != 0 is magical below
- $had_breakpoints{$file} |= 1;
- my $max = $#dbline;
- ++$i until $dbline[$i] != 0 or $i >= $max;
- $dbline{$i} = delete $postponed{$subname};
- } else {
- print $OUT "Subroutine $subname not found.\n";
- }
- return;
- }
- elsif ($postponed{$subname} eq 'compile') { $signal = 1 }
- #print $OUT "In postponed_sub for `$subname'.\n";
-}
-
-sub postponed {
- if ($ImmediateStop) {
- $ImmediateStop = 0;
- $signal = 1;
- }
- return &postponed_sub
- unless ref \$_[0] eq 'GLOB'; # A subroutine is compiled.
- # Cannot be done before the file is compiled
- local *dbline = shift;
- my $filename = $dbline;
- $filename =~ s/^_<//;
- $signal = 1, print $OUT "'$filename' loaded...\n"
- if $break_on_load{$filename};
- print $LINEINFO ' ' x $stack_depth, "Package $filename.\n" if $frame;
- return unless $postponed_file{$filename};
- $had_breakpoints{$filename} |= 1;
- #%dbline = %{$postponed_file{$filename}}; # Cannot be done: unsufficient magic
- my $key;
- for $key (keys %{$postponed_file{$filename}}) {
- $dbline{$key} = ${$postponed_file{$filename}}{$key};
- }
- delete $postponed_file{$filename};
-}
-
-sub dumpit {
- local ($savout) = select(shift);
- my $osingle = $single;
- my $otrace = $trace;
- $single = $trace = 0;
- local $frame = 0;
- local $doret = -2;
- unless (defined &main::dumpValue) {
- do 'dumpvar.pl';
- }
- if (defined &main::dumpValue) {
- &main::dumpValue(shift);
- } else {
- print $OUT "dumpvar.pl not available.\n";
- }
- $single = $osingle;
- $trace = $otrace;
- select ($savout);
-}
-
-# Tied method do not create a context, so may get wrong message:
-
-sub print_trace {
- my $fh = shift;
- my @sub = dump_trace($_[0] + 1, $_[1]);
- my $short = $_[2]; # Print short report, next one for sub name
- my $s;
- for ($i=0; $i <= $#sub; $i++) {
- last if $signal;
- local $" = ', ';
- my $args = defined $sub[$i]{args}
- ? "(@{ $sub[$i]{args} })"
- : '' ;
- $args = (substr $args, 0, $maxtrace - 3) . '...'
- if length $args > $maxtrace;
- my $file = $sub[$i]{file};
- $file = $file eq '-e' ? $file : "file `$file'" unless $short;
- $s = $sub[$i]{sub};
- $s = (substr $s, 0, $maxtrace - 3) . '...' if length $s > $maxtrace;
- if ($short) {
- my $sub = @_ >= 4 ? $_[3] : $s;
- print $fh "$sub[$i]{context}=$sub$args from $file:$sub[$i]{line}\n";
- } else {
- print $fh "$sub[$i]{context} = $s$args" .
- " called from $file" .
- " line $sub[$i]{line}\n";
- }
- }
-}
-
-sub dump_trace {
- my $skip = shift;
- my $count = shift || 1e9;
- $skip++;
- $count += $skip;
- my ($p,$file,$line,$sub,$h,$args,$e,$r,@a,@sub,$context);
- my $nothard = not $frame & 8;
- local $frame = 0; # Do not want to trace this.
- my $otrace = $trace;
- $trace = 0;
- for ($i = $skip;
- $i < $count and ($p,$file,$line,$sub,$h,$context,$e,$r) = caller($i);
- $i++) {
- @a = ();
- for $arg (@args) {
- my $type;
- if (not defined $arg) {
- push @a, "undef";
- } elsif ($nothard and tied $arg) {
- push @a, "tied";
- } elsif ($nothard and $type = ref $arg) {
- push @a, "ref($type)";
- } else {
- local $_ = "$arg"; # Safe to stringify now - should not call f().
- s/([\'\\])/\\$1/g;
- s/(.*)/'$1'/s
- unless /^(?: -?[\d.]+ | \*[\w:]* )$/x;
- s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
- s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
- push(@a, $_);
- }
- }
- $context = $context ? '@' : (defined $context ? "\$" : '.');
- $args = $h ? [@a] : undef;
- $e =~ s/\n\s*\;\s*\Z// if $e;
- $e =~ s/([\\\'])/\\$1/g if $e;
- if ($r) {
- $sub = "require '$e'";
- } elsif (defined $r) {
- $sub = "eval '$e'";
- } elsif ($sub eq '(eval)') {
- $sub = "eval {...}";
- }
- push(@sub, {context => $context, sub => $sub, args => $args,
- file => $file, line => $line});
- last if $signal;
- }
- $trace = $otrace;
- @sub;
-}
-
-sub action {
- my $action = shift;
- while ($action =~ s/\\$//) {
- #print $OUT "+ ";
- #$action .= "\n";
- $action .= &gets;
- }
- $action;
-}
-
-sub unbalanced {
- # i hate using globals!
- $balanced_brace_re ||= qr{
- ^ \{
- (?:
- (?> [^{}] + ) # Non-parens without backtracking
- |
- (??{ $balanced_brace_re }) # Group with matching parens
- ) *
- \} $
- }x;
- return $_[0] !~ m/$balanced_brace_re/;
-}
-
-sub gets {
- &readline("cont: ");
-}
-
-sub system {
- # We save, change, then restore STDIN and STDOUT to avoid fork() since
- # some non-Unix systems can do system() but have problems with fork().
- open(SAVEIN,"<&STDIN") || &warn("Can't save STDIN");
- open(SAVEOUT,">&STDOUT") || &warn("Can't save STDOUT");
- open(STDIN,"<&IN") || &warn("Can't redirect STDIN");
- open(STDOUT,">&OUT") || &warn("Can't redirect STDOUT");
-
- # XXX: using csh or tcsh destroys sigint retvals!
- system(@_);
- open(STDIN,"<&SAVEIN") || &warn("Can't restore STDIN");
- open(STDOUT,">&SAVEOUT") || &warn("Can't restore STDOUT");
- close(SAVEIN);
- close(SAVEOUT);
-
-
- # most of the $? crud was coping with broken cshisms
- if ($? >> 8) {
- &warn("(Command exited ", ($? >> 8), ")\n");
- } elsif ($?) {
- &warn( "(Command died of SIG#", ($? & 127),
- (($? & 128) ? " -- core dumped" : "") , ")", "\n");
- }
-
- return $?;
-
-}
-
-sub setterm {
- local $frame = 0;
- local $doret = -2;
- eval { require Term::ReadLine } or die $@;
- if ($notty) {
- if ($tty) {
- open(IN,"<$tty") or die "Cannot open TTY `$TTY' for read: $!";
- open(OUT,">$tty") or die "Cannot open TTY `$TTY' for write: $!";
- $IN = \*IN;
- $OUT = \*OUT;
- my $sel = select($OUT);
- $| = 1;
- select($sel);
- } else {
- eval "require Term::Rendezvous;" or die;
- my $rv = $ENV{PERLDB_NOTTY} || "/tmp/perldbtty$$";
- my $term_rv = new Term::Rendezvous $rv;
- $IN = $term_rv->IN;
- $OUT = $term_rv->OUT;
- }
- }
- if (!$rl) {
- $term = new Term::ReadLine::Stub 'perldb', $IN, $OUT;
- } else {
- $term = new Term::ReadLine 'perldb', $IN, $OUT;
-
- $rl_attribs = $term->Attribs;
- $rl_attribs->{basic_word_break_characters} .= '-:+/*,[])}'
- if defined $rl_attribs->{basic_word_break_characters}
- and index($rl_attribs->{basic_word_break_characters}, ":") == -1;
- $rl_attribs->{special_prefixes} = '$@&%';
- $rl_attribs->{completer_word_break_characters} .= '$@&%';
- $rl_attribs->{completion_function} = \&db_complete;
- }
- $LINEINFO = $OUT unless defined $LINEINFO;
- $lineinfo = $console unless defined $lineinfo;
- $term->MinLine(2);
- if ($term->Features->{setHistory} and "@hist" ne "?") {
- $term->SetHistory(@hist);
- }
- ornaments($ornaments) if defined $ornaments;
- $term_pid = $$;
-}
-
-sub resetterm { # We forked, so we need a different TTY
- $term_pid = $$;
- if (defined &get_fork_TTY) {
- &get_fork_TTY;
- } elsif (not defined $fork_TTY
- and defined $ENV{TERM} and $ENV{TERM} eq 'xterm'
- and defined $ENV{WINDOWID} and defined $ENV{DISPLAY}) {
- # Possibly _inside_ XTERM
- open XT, q[3>&1 xterm -title 'Forked Perl debugger' -e sh -c 'tty 1>&3;\
- sleep 10000000' |];
- $fork_TTY = <XT>;
- chomp $fork_TTY;
- }
- if (defined $fork_TTY) {
- TTY($fork_TTY);
- undef $fork_TTY;
- } else {
- print_help(<<EOP);
-I<#########> Forked, but do not know how to change a B<TTY>. I<#########>
- Define B<\$DB::fork_TTY>
- - or a function B<DB::get_fork_TTY()> which will set B<\$DB::fork_TTY>.
- The value of B<\$DB::fork_TTY> should be the name of I<TTY> to use.
- On I<UNIX>-like systems one can get the name of a I<TTY> for the given window
- by typing B<tty>, and disconnect the I<shell> from I<TTY> by B<sleep 1000000>.
-EOP
- }
-}
-
-sub readline {
- local $.;
- if (@typeahead) {
- my $left = @typeahead;
- my $got = shift @typeahead;
- print $OUT "auto(-$left)", shift, $got, "\n";
- $term->AddHistory($got)
- if length($got) > 1 and defined $term->Features->{addHistory};
- return $got;
- }
- local $frame = 0;
- local $doret = -2;
- if (ref $OUT and UNIVERSAL::isa($OUT, 'IO::Socket::INET')) {
- $OUT->write(join('', @_));
- my $stuff;
- $IN->recv( $stuff, 2048 ); # XXX: what's wrong with sysread?
- $stuff;
- }
- else {
- $term->readline(@_);
- }
-}
-
-sub dump_option {
- my ($opt, $val)= @_;
- $val = option_val($opt,'N/A');
- $val =~ s/([\\\'])/\\$1/g;
- printf $OUT "%20s = '%s'\n", $opt, $val;
-}
-
-sub option_val {
- my ($opt, $default)= @_;
- my $val;
- if (defined $optionVars{$opt}
- and defined ${$optionVars{$opt}}) {
- $val = ${$optionVars{$opt}};
- } elsif (defined $optionAction{$opt}
- and defined &{$optionAction{$opt}}) {
- $val = &{$optionAction{$opt}}();
- } elsif (defined $optionAction{$opt}
- and not defined $option{$opt}
- or defined $optionVars{$opt}
- and not defined ${$optionVars{$opt}}) {
- $val = $default;
- } else {
- $val = $option{$opt};
- }
- $val
-}
-
-sub parse_options {
- local($_)= @_;
- # too dangerous to let intuitive usage overwrite important things
- # defaultion should never be the default
- my %opt_needs_val = map { ( $_ => 1 ) } qw{
- arrayDepth hashDepth LineInfo maxTraceLen ornaments
- pager quote ReadLine recallCommand RemotePort ShellBang TTY
- };
- while (length) {
- my $val_defaulted;
- s/^\s+// && next;
- s/^(\w+)(\W?)// or print($OUT "Invalid option `$_'\n"), last;
- my ($opt,$sep) = ($1,$2);
- my $val;
- if ("?" eq $sep) {
- print($OUT "Option query `$opt?' followed by non-space `$_'\n"), last
- if /^\S/;
- #&dump_option($opt);
- } elsif ($sep !~ /\S/) {
- $val_defaulted = 1;
- $val = "1"; # this is an evil default; make 'em set it!
- } elsif ($sep eq "=") {
-
- if (s/ (["']) ( (?: \\. | (?! \1 ) [^\\] )* ) \1 //x) {
- my $quote = $1;
- ($val = $2) =~ s/\\([$quote\\])/$1/g;
- } else {
- s/^(\S*)//;
- $val = $1;
- print OUT qq(Option better cleared using $opt=""\n)
- unless length $val;
- }
-
- } else { #{ to "let some poor schmuck bounce on the % key in B<vi>."
- my ($end) = "\\" . substr( ")]>}$sep", index("([<{",$sep), 1 ); #}
- s/^(([^\\$end]|\\[\\$end])*)$end($|\s+)// or
- print($OUT "Unclosed option value `$opt$sep$_'\n"), last;
- ($val = $1) =~ s/\\([\\$end])/$1/g;
- }
-
- my $option;
- my $matches = grep( /^\Q$opt/ && ($option = $_), @options )
- || grep( /^\Q$opt/i && ($option = $_), @options );
-
- print($OUT "Unknown option `$opt'\n"), next unless $matches;
- print($OUT "Ambiguous option `$opt'\n"), next if $matches > 1;
-
- if ($opt_needs_val{$option} && $val_defaulted) {
- print $OUT "Option `$opt' is non-boolean. Use `O $option=VAL' to set, `O $option?' to query\n";
- next;
- }
-
- $option{$option} = $val if defined $val;
-
- eval qq{
- local \$frame = 0;
- local \$doret = -2;
- require '$optionRequire{$option}';
- 1;
- } || die # XXX: shouldn't happen
- if defined $optionRequire{$option} &&
- defined $val;
-
- ${$optionVars{$option}} = $val
- if defined $optionVars{$option} &&
- defined $val;
-
- &{$optionAction{$option}} ($val)
- if defined $optionAction{$option} &&
- defined &{$optionAction{$option}} &&
- defined $val;
-
- # Not $rcfile
- dump_option($option) unless $OUT eq \*STDERR;
- }
-}
-
-sub set_list {
- my ($stem,@list) = @_;
- my $val;
- $ENV{"${stem}_n"} = @list;
- for $i (0 .. $#list) {
- $val = $list[$i];
- $val =~ s/\\/\\\\/g;
- $val =~ s/([\0-\37\177\200-\377])/"\\0x" . unpack('H2',$1)/eg;
- $ENV{"${stem}_$i"} = $val;
- }
-}
-
-sub get_list {
- my $stem = shift;
- my @list;
- my $n = delete $ENV{"${stem}_n"};
- my $val;
- for $i (0 .. $n - 1) {
- $val = delete $ENV{"${stem}_$i"};
- $val =~ s/\\((\\)|0x(..))/ $2 ? $2 : pack('H2', $3) /ge;
- push @list, $val;
- }
- @list;
-}
-
-sub catch {
- $signal = 1;
- return; # Put nothing on the stack - malloc/free land!
-}
-
-sub warn {
- my($msg)= join("",@_);
- $msg .= ": $!\n" unless $msg =~ /\n$/;
- print $OUT $msg;
-}
-
-sub TTY {
- if (@_ and $term and $term->Features->{newTTY}) {
- my ($in, $out) = shift;
- if ($in =~ /,/) {
- ($in, $out) = split /,/, $in, 2;
- } else {
- $out = $in;
- }
- open IN, $in or die "cannot open `$in' for read: $!";
- open OUT, ">$out" or die "cannot open `$out' for write: $!";
- $term->newTTY(\*IN, \*OUT);
- $IN = \*IN;
- $OUT = \*OUT;
- return $tty = $in;
- } elsif ($term and @_) {
- &warn("Too late to set TTY, enabled on next `R'!\n");
- }
- $tty = shift if @_;
- $tty or $console;
-}
-
-sub noTTY {
- if ($term) {
- &warn("Too late to set noTTY, enabled on next `R'!\n") if @_;
- }
- $notty = shift if @_;
- $notty;
-}
-
-sub ReadLine {
- if ($term) {
- &warn("Too late to set ReadLine, enabled on next `R'!\n") if @_;
- }
- $rl = shift if @_;
- $rl;
-}
-
-sub RemotePort {
- if ($term) {
- &warn("Too late to set RemotePort, enabled on next 'R'!\n") if @_;
- }
- $remoteport = shift if @_;
- $remoteport;
-}
-
-sub tkRunning {
- if (${$term->Features}{tkRunning}) {
- return $term->tkRunning(@_);
- } else {
- print $OUT "tkRunning not supported by current ReadLine package.\n";
- 0;
- }
-}
-
-sub NonStop {
- if ($term) {
- &warn("Too late to set up NonStop mode, enabled on next `R'!\n") if @_;
- }
- $runnonstop = shift if @_;
- $runnonstop;
-}
-
-sub pager {
- if (@_) {
- $pager = shift;
- $pager="|".$pager unless $pager =~ /^(\+?\>|\|)/;
- }
- $pager;
-}
-
-sub shellBang {
- if (@_) {
- $sh = quotemeta shift;
- $sh .= "\\b" if $sh =~ /\w$/;
- }
- $psh = $sh;
- $psh =~ s/\\b$//;
- $psh =~ s/\\(.)/$1/g;
- &sethelp;
- $psh;
-}
-
-sub ornaments {
- if (defined $term) {
- local ($warnLevel,$dieLevel) = (0, 1);
- return '' unless $term->Features->{ornaments};
- eval { $term->ornaments(@_) } || '';
- } else {
- $ornaments = shift;
- }
-}
-
-sub recallCommand {
- if (@_) {
- $rc = quotemeta shift;
- $rc .= "\\b" if $rc =~ /\w$/;
- }
- $prc = $rc;
- $prc =~ s/\\b$//;
- $prc =~ s/\\(.)/$1/g;
- &sethelp;
- $prc;
-}
-
-sub LineInfo {
- return $lineinfo unless @_;
- $lineinfo = shift;
- my $stream = ($lineinfo =~ /^(\+?\>|\|)/) ? $lineinfo : ">$lineinfo";
- $slave_editor = ($stream =~ /^\|/);
- open(LINEINFO, "$stream") || &warn("Cannot open `$stream' for write");
- $LINEINFO = \*LINEINFO;
- my $save = select($LINEINFO);
- $| = 1;
- select($save);
- $lineinfo;
-}
-
-sub list_versions {
- my %version;
- my $file;
- for (keys %INC) {
- $file = $_;
- s,\.p[lm]$,,i ;
- s,/,::,g ;
- s/^perl5db$/DB/;
- s/^Term::ReadLine::readline$/readline/;
- if (defined ${ $_ . '::VERSION' }) {
- $version{$file} = "${ $_ . '::VERSION' } from ";
- }
- $version{$file} .= $INC{$file};
- }
- dumpit($OUT,\%version);
-}
-
-sub sethelp {
- # XXX: make sure these are tabs between the command and explantion,
- # or print_help will screw up your formatting if you have
- # eeevil ornaments enabled. This is an insane mess.
-
- $help = "
-B<T> Stack trace.
-B<s> [I<expr>] Single step [in I<expr>].
-B<n> [I<expr>] Next, steps over subroutine calls [in I<expr>].
-<B<CR>> Repeat last B<n> or B<s> command.
-B<r> Return from current subroutine.
-B<c> [I<line>|I<sub>] Continue; optionally inserts a one-time-only breakpoint
- at the specified position.
-B<l> I<min>B<+>I<incr> List I<incr>+1 lines starting at I<min>.
-B<l> I<min>B<->I<max> List lines I<min> through I<max>.
-B<l> I<line> List single I<line>.
-B<l> I<subname> List first window of lines from subroutine.
-B<l> I<\$var> List first window of lines from subroutine referenced by I<\$var>.
-B<l> List next window of lines.
-B<-> List previous window of lines.
-B<w> [I<line>] List window around I<line>.
-B<.> Return to the executed line.
-B<f> I<filename> Switch to viewing I<filename>. File must be already loaded.
- I<filename> may be either the full name of the file, or a regular
- expression matching the full file name:
- B<f> I</home/me/foo.pl> and B<f> I<oo\\.> may access the same file.
- Evals (with saved bodies) are considered to be filenames:
- B<f> I<(eval 7)> and B<f> I<eval 7\\b> access the body of the 7th eval
- (in the order of execution).
-B</>I<pattern>B</> Search forwards for I<pattern>; final B</> is optional.
-B<?>I<pattern>B<?> Search backwards for I<pattern>; final B<?> is optional.
-B<L> List all breakpoints and actions.
-B<S> [[B<!>]I<pattern>] List subroutine names [not] matching I<pattern>.
-B<t> Toggle trace mode.
-B<t> I<expr> Trace through execution of I<expr>.
-B<b> [I<line>] [I<condition>]
- Set breakpoint; I<line> defaults to the current execution line;
- I<condition> breaks if it evaluates to true, defaults to '1'.
-B<b> I<subname> [I<condition>]
- Set breakpoint at first line of subroutine.
-B<b> I<\$var> Set breakpoint at first line of subroutine referenced by I<\$var>.
-B<b> B<load> I<filename> Set breakpoint on `require'ing the given file.
-B<b> B<postpone> I<subname> [I<condition>]
- Set breakpoint at first line of subroutine after
- it is compiled.
-B<b> B<compile> I<subname>
- Stop after the subroutine is compiled.
-B<d> [I<line>] Delete the breakpoint for I<line>.
-B<D> Delete all breakpoints.
-B<a> [I<line>] I<command>
- Set an action to be done before the I<line> is executed;
- I<line> defaults to the current execution line.
- Sequence is: check for breakpoint/watchpoint, print line
- if necessary, do action, prompt user if necessary,
- execute line.
-B<a> [I<line>] Delete the action for I<line>.
-B<A> Delete all actions.
-B<W> I<expr> Add a global watch-expression.
-B<W> Delete all watch-expressions.
-B<V> [I<pkg> [I<vars>]] List some (default all) variables in package (default current).
- Use B<~>I<pattern> and B<!>I<pattern> for positive and negative regexps.
-B<X> [I<vars>] Same as \"B<V> I<currentpackage> [I<vars>]\".
-B<x> I<expr> Evals expression in list context, dumps the result.
-B<m> I<expr> Evals expression in list context, prints methods callable
- on the first element of the result.
-B<m> I<class> Prints methods callable via the given class.
-
-B<<> ? List Perl commands to run before each prompt.
-B<<> I<expr> Define Perl command to run before each prompt.
-B<<<> I<expr> Add to the list of Perl commands to run before each prompt.
-B<>> ? List Perl commands to run after each prompt.
-B<>> I<expr> Define Perl command to run after each prompt.
-B<>>B<>> I<expr> Add to the list of Perl commands to run after each prompt.
-B<{> I<db_command> Define debugger command to run before each prompt.
-B<{> ? List debugger commands to run before each prompt.
-B<<> I<expr> Define Perl command to run before each prompt.
-B<{{> I<db_command> Add to the list of debugger commands to run before each prompt.
-B<$prc> I<number> Redo a previous command (default previous command).
-B<$prc> I<-number> Redo number'th-to-last command.
-B<$prc> I<pattern> Redo last command that started with I<pattern>.
- See 'B<O> I<recallCommand>' too.
-B<$psh$psh> I<cmd> Run cmd in a subprocess (reads from DB::IN, writes to DB::OUT)"
- . ( $rc eq $sh ? "" : "
-B<$psh> [I<cmd>] Run I<cmd> in subshell (forces \"\$SHELL -c 'cmd'\")." ) . "
- See 'B<O> I<shellBang>' too.
-B<H> I<-number> Display last number commands (default all).
-B<p> I<expr> Same as \"I<print {DB::OUT} expr>\" in current package.
-B<|>I<dbcmd> Run debugger command, piping DB::OUT to current pager.
-B<||>I<dbcmd> Same as B<|>I<dbcmd> but DB::OUT is temporarilly select()ed as well.
-B<\=> [I<alias> I<value>] Define a command alias, or list current aliases.
-I<command> Execute as a perl statement in current package.
-B<v> Show versions of loaded modules.
-B<R> Pure-man-restart of debugger, some of debugger state
- and command-line options may be lost.
- Currently the following setting are preserved:
- history, breakpoints and actions, debugger B<O>ptions
- and the following command-line options: I<-w>, I<-I>, I<-e>.
-
-B<O> [I<opt>] ... Set boolean option to true
-B<O> [I<opt>B<?>] Query options
-B<O> [I<opt>B<=>I<val>] [I<opt>=B<\">I<val>B<\">] ...
- Set options. Use quotes in spaces in value.
- I<recallCommand>, I<ShellBang> chars used to recall command or spawn shell;
- I<pager> program for output of \"|cmd\";
- I<tkRunning> run Tk while prompting (with ReadLine);
- I<signalLevel> I<warnLevel> I<dieLevel> level of verbosity;
- I<inhibit_exit> Allows stepping off the end of the script.
- I<ImmediateStop> Debugger should stop as early as possible.
- I<RemotePort> Remote hostname:port for remote debugging
- The following options affect what happens with B<V>, B<X>, and B<x> commands:
- I<arrayDepth>, I<hashDepth> print only first N elements ('' for all);
- I<compactDump>, I<veryCompact> change style of array and hash dump;
- I<globPrint> whether to print contents of globs;
- I<DumpDBFiles> dump arrays holding debugged files;
- I<DumpPackages> dump symbol tables of packages;
- I<DumpReused> dump contents of \"reused\" addresses;
- I<quote>, I<HighBit>, I<undefPrint> change style of string dump;
- I<bareStringify> Do not print the overload-stringified value;
- Other options include:
- I<PrintRet> affects printing of return value after B<r> command,
- I<frame> affects printing messages on entry and exit from subroutines.
- I<AutoTrace> affects printing messages on every possible breaking point.
- I<maxTraceLen> gives maximal length of evals/args listed in stack trace.
- I<ornaments> affects screen appearance of the command line.
- During startup options are initialized from \$ENV{PERLDB_OPTS}.
- You can put additional initialization options I<TTY>, I<noTTY>,
- I<ReadLine>, I<NonStop>, and I<RemotePort> there (or use
- `B<R>' after you set them).
-
-B<q> or B<^D> Quit. Set B<\$DB::finished = 0> to debug global destruction.
-B<h> [I<db_command>] Get help [on a specific debugger command], enter B<|h> to page.
-B<h h> Summary of debugger commands.
-B<$doccmd> I<manpage> Runs the external doc viewer B<$doccmd> command on the
- named Perl I<manpage>, or on B<$doccmd> itself if omitted.
- Set B<\$DB::doccmd> to change viewer.
-
-Type `|h' for a paged display if this was too hard to read.
-
-"; # Fix balance of vi % matching: } }}
-
- $summary = <<"END_SUM";
-I<List/search source lines:> I<Control script execution:>
- B<l> [I<ln>|I<sub>] List source code B<T> Stack trace
- B<-> or B<.> List previous/current line B<s> [I<expr>] Single step [in expr]
- B<w> [I<line>] List around line B<n> [I<expr>] Next, steps over subs
- B<f> I<filename> View source in file <B<CR>/B<Enter>> Repeat last B<n> or B<s>
- B</>I<pattern>B</> B<?>I<patt>B<?> Search forw/backw B<r> Return from subroutine
- B<v> Show versions of modules B<c> [I<ln>|I<sub>] Continue until position
-I<Debugger controls:> B<L> List break/watch/actions
- B<O> [...] Set debugger options B<t> [I<expr>] Toggle trace [trace expr]
- B<<>[B<<>]|B<{>[B<{>]|B<>>[B<>>] [I<cmd>] Do pre/post-prompt B<b> [I<ln>|I<event>|I<sub>] [I<cnd>] Set breakpoint
- B<$prc> [I<N>|I<pat>] Redo a previous command B<d> [I<ln>] or B<D> Delete a/all breakpoints
- B<H> [I<-num>] Display last num commands B<a> [I<ln>] I<cmd> Do cmd before line
- B<=> [I<a> I<val>] Define/list an alias B<W> I<expr> Add a watch expression
- B<h> [I<db_cmd>] Get help on command B<A> or B<W> Delete all actions/watch
- B<|>[B<|>]I<db_cmd> Send output to pager B<$psh>\[B<$psh>\] I<syscmd> Run cmd in a subprocess
- B<q> or B<^D> Quit B<R> Attempt a restart
-I<Data Examination:> B<expr> Execute perl code, also see: B<s>,B<n>,B<t> I<expr>
- B<x>|B<m> I<expr> Evals expr in list context, dumps the result or lists methods.
- B<p> I<expr> Print expression (uses script's current package).
- B<S> [[B<!>]I<pat>] List subroutine names [not] matching pattern
- B<V> [I<Pk> [I<Vars>]] List Variables in Package. Vars can be ~pattern or !pattern.
- B<X> [I<Vars>] Same as \"B<V> I<current_package> [I<Vars>]\".
-For more help, type B<h> I<cmd_letter>, or run B<$doccmd perldebug> for all docs.
-END_SUM
- # ')}}; # Fix balance of vi % matching
-}
-
-sub print_help {
- local $_ = shift;
-
- # Restore proper alignment destroyed by eeevil I<> and B<>
- # ornaments: A pox on both their houses!
- #
- # A help command will have everything up to and including
- # the first tab sequence paddeed into a field 16 (or if indented 20)
- # wide. If it's wide than that, an extra space will be added.
- s{
- ^ # only matters at start of line
- ( \040{4} | \t )* # some subcommands are indented
- ( < ? # so <CR> works
- [BI] < [^\t\n] + ) # find an eeevil ornament
- ( \t+ ) # original separation, discarded
- ( .* ) # this will now start (no earlier) than
- # column 16
- } {
- my($leadwhite, $command, $midwhite, $text) = ($1, $2, $3, $4);
- my $clean = $command;
- $clean =~ s/[BI]<([^>]*)>/$1/g;
- # replace with this whole string:
- (length($leadwhite) ? " " x 4 : "")
- . $command
- . ((" " x (16 + (length($leadwhite) ? 4 : 0) - length($clean))) || " ")
- . $text;
-
- }mgex;
-
- s{ # handle bold ornaments
- B < ( [^>] + | > ) >
- } {
- $Term::ReadLine::TermCap::rl_term_set[2]
- . $1
- . $Term::ReadLine::TermCap::rl_term_set[3]
- }gex;
-
- s{ # handle italic ornaments
- I < ( [^>] + | > ) >
- } {
- $Term::ReadLine::TermCap::rl_term_set[0]
- . $1
- . $Term::ReadLine::TermCap::rl_term_set[1]
- }gex;
-
- print $OUT $_;
-}
-
-sub fix_less {
- return if defined $ENV{LESS} && $ENV{LESS} =~ /r/;
- my $is_less = $pager =~ /\bless\b/;
- if ($pager =~ /\bmore\b/) {
- my @st_more = stat('/usr/bin/more');
- my @st_less = stat('/usr/bin/less');
- $is_less = @st_more && @st_less
- && $st_more[0] == $st_less[0]
- && $st_more[1] == $st_less[1];
- }
- # changes environment!
- $ENV{LESS} .= 'r' if $is_less;
-}
-
-sub diesignal {
- local $frame = 0;
- local $doret = -2;
- $SIG{'ABRT'} = 'DEFAULT';
- kill 'ABRT', $$ if $panic++;
- if (defined &Carp::longmess) {
- local $SIG{__WARN__} = '';
- local $Carp::CarpLevel = 2; # mydie + confess
- &warn(Carp::longmess("Signal @_"));
- }
- else {
- print $DB::OUT "Got signal @_\n";
- }
- kill 'ABRT', $$;
-}
-
-sub dbwarn {
- local $frame = 0;
- local $doret = -2;
- local $SIG{__WARN__} = '';
- local $SIG{__DIE__} = '';
- eval { require Carp } if defined $^S; # If error/warning during compilation,
- # require may be broken.
- warn(@_, "\nCannot print stack trace, load with -MCarp option to see stack"),
- return unless defined &Carp::longmess;
- my ($mysingle,$mytrace) = ($single,$trace);
- $single = 0; $trace = 0;
- my $mess = Carp::longmess(@_);
- ($single,$trace) = ($mysingle,$mytrace);
- &warn($mess);
-}
-
-sub dbdie {
- local $frame = 0;
- local $doret = -2;
- local $SIG{__DIE__} = '';
- local $SIG{__WARN__} = '';
- my $i = 0; my $ineval = 0; my $sub;
- if ($dieLevel > 2) {
- local $SIG{__WARN__} = \&dbwarn;
- &warn(@_); # Yell no matter what
- return;
- }
- if ($dieLevel < 2) {
- die @_ if $^S; # in eval propagate
- }
- eval { require Carp } if defined $^S; # If error/warning during compilation,
- # require may be broken.
-
- die(@_, "\nCannot print stack trace, load with -MCarp option to see stack")
- unless defined &Carp::longmess;
-
- # We do not want to debug this chunk (automatic disabling works
- # inside DB::DB, but not in Carp).
- my ($mysingle,$mytrace) = ($single,$trace);
- $single = 0; $trace = 0;
- my $mess = Carp::longmess(@_);
- ($single,$trace) = ($mysingle,$mytrace);
- die $mess;
-}
-
-sub warnLevel {
- if (@_) {
- $prevwarn = $SIG{__WARN__} unless $warnLevel;
- $warnLevel = shift;
- if ($warnLevel) {
- $SIG{__WARN__} = \&DB::dbwarn;
- } else {
- $SIG{__WARN__} = $prevwarn;
- }
- }
- $warnLevel;
-}
-
-sub dieLevel {
- if (@_) {
- $prevdie = $SIG{__DIE__} unless $dieLevel;
- $dieLevel = shift;
- if ($dieLevel) {
- $SIG{__DIE__} = \&DB::dbdie; # if $dieLevel < 2;
- #$SIG{__DIE__} = \&DB::diehard if $dieLevel >= 2;
- print $OUT "Stack dump during die enabled",
- ( $dieLevel == 1 ? " outside of evals" : ""), ".\n"
- if $I_m_init;
- print $OUT "Dump printed too.\n" if $dieLevel > 2;
- } else {
- $SIG{__DIE__} = $prevdie;
- print $OUT "Default die handler restored.\n";
- }
- }
- $dieLevel;
-}
-
-sub signalLevel {
- if (@_) {
- $prevsegv = $SIG{SEGV} unless $signalLevel;
- $prevbus = $SIG{BUS} unless $signalLevel;
- $signalLevel = shift;
- if ($signalLevel) {
- $SIG{SEGV} = \&DB::diesignal;
- $SIG{BUS} = \&DB::diesignal;
- } else {
- $SIG{SEGV} = $prevsegv;
- $SIG{BUS} = $prevbus;
- }
- }
- $signalLevel;
-}
-
-sub CvGV_name {
- my $in = shift;
- my $name = CvGV_name_or_bust($in);
- defined $name ? $name : $in;
-}
-
-sub CvGV_name_or_bust {
- my $in = shift;
- return if $skipCvGV; # Backdoor to avoid problems if XS broken...
- $in = \&$in; # Hard reference...
- eval {require Devel::Peek; 1} or return;
- my $gv = Devel::Peek::CvGV($in) or return;
- *$gv{PACKAGE} . '::' . *$gv{NAME};
-}
-
-sub find_sub {
- my $subr = shift;
- $sub{$subr} or do {
- return unless defined &$subr;
- my $name = CvGV_name_or_bust($subr);
- my $data;
- $data = $sub{$name} if defined $name;
- return $data if defined $data;
-
- # Old stupid way...
- $subr = \&$subr; # Hard reference
- my $s;
- for (keys %sub) {
- $s = $_, last if $subr eq \&$_;
- }
- $sub{$s} if $s;
- }
-}
-
-sub methods {
- my $class = shift;
- $class = ref $class if ref $class;
- local %seen;
- local %packs;
- methods_via($class, '', 1);
- methods_via('UNIVERSAL', 'UNIVERSAL', 0);
-}
-
-sub methods_via {
- my $class = shift;
- return if $packs{$class}++;
- my $prefix = shift;
- my $prepend = $prefix ? "via $prefix: " : '';
- my $name;
- for $name (grep {defined &{${"${class}::"}{$_}}}
- sort keys %{"${class}::"}) {
- next if $seen{ $name }++;
- print $DB::OUT "$prepend$name\n";
- }
- return unless shift; # Recurse?
- for $name (@{"${class}::ISA"}) {
- $prepend = $prefix ? $prefix . " -> $name" : $name;
- methods_via($name, $prepend, 1);
- }
-}
-
-sub setman {
- $doccmd = $^O !~ /^(?:MSWin32|VMS|os2|dos|amigaos|riscos|MacOS)\z/s
- ? "man" # O Happy Day!
- : "perldoc"; # Alas, poor unfortunates
-}
-
-sub runman {
- my $page = shift;
- unless ($page) {
- &system("$doccmd $doccmd");
- return;
- }
- # this way user can override, like with $doccmd="man -Mwhatever"
- # or even just "man " to disable the path check.
- unless ($doccmd eq 'man') {
- &system("$doccmd $page");
- return;
- }
-
- $page = 'perl' if lc($page) eq 'help';
-
- require Config;
- my $man1dir = $Config::Config{'man1dir'};
- my $man3dir = $Config::Config{'man3dir'};
- for ($man1dir, $man3dir) { s#/[^/]*\z## if /\S/ }
- my $manpath = '';
- $manpath .= "$man1dir:" if $man1dir =~ /\S/;
- $manpath .= "$man3dir:" if $man3dir =~ /\S/ && $man1dir ne $man3dir;
- chop $manpath if $manpath;
- # harmless if missing, I figure
- my $oldpath = $ENV{MANPATH};
- $ENV{MANPATH} = $manpath if $manpath;
- my $nopathopt = $^O =~ /dunno what goes here/;
- if (system($doccmd,
- # I just *know* there are men without -M
- (($manpath && !$nopathopt) ? ("-M", $manpath) : ()),
- split ' ', $page) )
- {
- unless ($page =~ /^perl\w/) {
- if (grep { $page eq $_ } qw{
- 5004delta 5005delta amiga api apio book boot bot call compile
- cygwin data dbmfilter debug debguts delta diag doc dos dsc embed
- faq faq1 faq2 faq3 faq4 faq5 faq6 faq7 faq8 faq9 filter fork
- form func guts hack hist hpux intern ipc lexwarn locale lol mod
- modinstall modlib number obj op opentut os2 os390 pod port
- ref reftut run sec style sub syn thrtut tie toc todo toot tootc
- trap unicode var vms win32 xs xstut
- })
- {
- $page =~ s/^/perl/;
- system($doccmd,
- (($manpath && !$nopathopt) ? ("-M", $manpath) : ()),
- $page);
- }
- }
- }
- if (defined $oldpath) {
- $ENV{MANPATH} = $manpath;
- } else {
- delete $ENV{MANPATH};
- }
-}
-
-# The following BEGIN is very handy if debugger goes havoc, debugging debugger?
-
-BEGIN { # This does not compile, alas.
- $IN = \*STDIN; # For bugs before DB::OUT has been opened
- $OUT = \*STDERR; # For errors before DB::OUT has been opened
- $sh = '!';
- $rc = ',';
- @hist = ('?');
- $deep = 100; # warning if stack gets this deep
- $window = 10;
- $preview = 3;
- $sub = '';
- $SIG{INT} = \&DB::catch;
- # This may be enabled to debug debugger:
- #$warnLevel = 1 unless defined $warnLevel;
- #$dieLevel = 1 unless defined $dieLevel;
- #$signalLevel = 1 unless defined $signalLevel;
-
- $db_stop = 0; # Compiler warning
- $db_stop = 1 << 30;
- $level = 0; # Level of recursive debugging
- # @stack and $doret are needed in sub sub, which is called for DB::postponed.
- # Triggers bug (?) in perl is we postpone this until runtime:
- @postponed = @stack = (0);
- $stack_depth = 0; # Localized $#stack
- $doret = -2;
- $frame = 0;
-}
-
-BEGIN {$^W = $ini_warn;} # Switch warnings back
-
-#use Carp; # This did break, left for debuggin
-
-sub db_complete {
- # Specific code for b c l V m f O, &blah, $blah, @blah, %blah
- my($text, $line, $start) = @_;
- my ($itext, $search, $prefix, $pack) =
- ($text, "^\Q${'package'}::\E([^:]+)\$");
-
- return sort grep /^\Q$text/, (keys %sub), qw(postpone load compile), # subroutines
- (map { /$search/ ? ($1) : () } keys %sub)
- if (substr $line, 0, $start) =~ /^\|*[blc]\s+((postpone|compile)\s+)?$/;
- return sort grep /^\Q$text/, values %INC # files
- if (substr $line, 0, $start) =~ /^\|*b\s+load\s+$/;
- return sort map {($_, db_complete($_ . "::", "V ", 2))}
- grep /^\Q$text/, map { /^(.*)::$/ ? ($1) : ()} keys %:: # top-packages
- if (substr $line, 0, $start) =~ /^\|*[Vm]\s+$/ and $text =~ /^\w*$/;
- return sort map {($_, db_complete($_ . "::", "V ", 2))}
- grep !/^main::/,
- grep /^\Q$text/, map { /^(.*)::$/ ? ($prefix . "::$1") : ()} keys %{$prefix . '::'}
- # packages
- if (substr $line, 0, $start) =~ /^\|*[Vm]\s+$/
- and $text =~ /^(.*[^:])::?(\w*)$/ and $prefix = $1;
- if ( $line =~ /^\|*f\s+(.*)/ ) { # Loaded files
- # We may want to complete to (eval 9), so $text may be wrong
- $prefix = length($1) - length($text);
- $text = $1;
- return sort
- map {substr $_, 2 + $prefix} grep /^_<\Q$text/, (keys %main::), $0
- }
- if ((substr $text, 0, 1) eq '&') { # subroutines
- $text = substr $text, 1;
- $prefix = "&";
- return sort map "$prefix$_",
- grep /^\Q$text/,
- (keys %sub),
- (map { /$search/ ? ($1) : () }
- keys %sub);
- }
- if ($text =~ /^[\$@%](.*)::(.*)/) { # symbols in a package
- $pack = ($1 eq 'main' ? '' : $1) . '::';
- $prefix = (substr $text, 0, 1) . $1 . '::';
- $text = $2;
- my @out
- = map "$prefix$_", grep /^\Q$text/, grep /^_?[a-zA-Z]/, keys %$pack ;
- if (@out == 1 and $out[0] =~ /::$/ and $out[0] ne $itext) {
- return db_complete($out[0], $line, $start);
- }
- return sort @out;
- }
- if ($text =~ /^[\$@%]/) { # symbols (in $package + packages in main)
- $pack = ($package eq 'main' ? '' : $package) . '::';
- $prefix = substr $text, 0, 1;
- $text = substr $text, 1;
- my @out = map "$prefix$_", grep /^\Q$text/,
- (grep /^_?[a-zA-Z]/, keys %$pack),
- ( $pack eq '::' ? () : (grep /::$/, keys %::) ) ;
- if (@out == 1 and $out[0] =~ /::$/ and $out[0] ne $itext) {
- return db_complete($out[0], $line, $start);
- }
- return sort @out;
- }
- if ((substr $line, 0, $start) =~ /^\|*O\b.*\s$/) { # Options after a space
- my @out = grep /^\Q$text/, @options;
- my $val = option_val($out[0], undef);
- my $out = '? ';
- if (not defined $val or $val =~ /[\n\r]/) {
- # Can do nothing better
- } elsif ($val =~ /\s/) {
- my $found;
- foreach $l (split //, qq/\"\'\#\|/) {
- $out = "$l$val$l ", last if (index $val, $l) == -1;
- }
- } else {
- $out = "=$val ";
- }
- # Default to value if one completion, to question if many
- $rl_attribs->{completer_terminator_character} = (@out == 1 ? $out : '? ');
- return sort @out;
- }
- return $term->filename_list($text); # filenames
-}
-
-sub end_report {
- print $OUT "Use `q' to quit or `R' to restart. `h q' for details.\n"
-}
-
-END {
- $finished = 1 if $inhibit_exit; # So that some keys may be disabled.
- $fall_off_end = 1 unless $inhibit_exit;
- # Do not stop in at_exit() and destructors on exit:
- $DB::single = !$fall_off_end && !$runnonstop;
- DB::fake::at_exit() unless $fall_off_end or $runnonstop;
-}
-
-package DB::fake;
-
-sub at_exit {
- "Debugged program terminated. Use `q' to quit or `R' to restart.";
-}
-
-package DB; # Do not trace this 1; below!
-
-1;
diff --git a/contrib/perl5/lib/pwd.pl b/contrib/perl5/lib/pwd.pl
deleted file mode 100644
index 6b429eb..0000000
--- a/contrib/perl5/lib/pwd.pl
+++ /dev/null
@@ -1,67 +0,0 @@
-;# pwd.pl - keeps track of current working directory in PWD environment var
-;#
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Cwd
-#
-;# $RCSfile: pwd.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:11 $
-;#
-;# $Log: pwd.pl,v $
-;#
-;# Usage:
-;# require "pwd.pl";
-;# &initpwd;
-;# ...
-;# &chdir($newdir);
-
-package pwd;
-
-sub main'initpwd {
- if ($ENV{'PWD'}) {
- local($dd,$di) = stat('.');
- local($pd,$pi) = stat($ENV{'PWD'});
- if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) {
- chop($ENV{'PWD'} = `pwd`);
- }
- }
- else {
- chop($ENV{'PWD'} = `pwd`);
- }
- if ($ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|) {
- local($pd,$pi) = stat($2);
- local($dd,$di) = stat($1);
- if (defined $pd and defined $dd and $di == $pi and $dd == $pd) {
- $ENV{'PWD'}="$2$3";
- }
- }
-}
-
-sub main'chdir {
- local($newdir) = shift;
- $newdir =~ s|/{2,}|/|g;
- if (chdir $newdir) {
- if ($newdir =~ m#^/#) {
- $ENV{'PWD'} = $newdir;
- }
- else {
- local(@curdir) = split(m#/#,$ENV{'PWD'});
- @curdir = '' unless @curdir;
- foreach $component (split(m#/#, $newdir)) {
- next if $component eq '.';
- pop(@curdir),next if $component eq '..';
- push(@curdir,$component);
- }
- $ENV{'PWD'} = join('/',@curdir) || '/';
- }
- }
- else {
- 0;
- }
-}
-
-1;
diff --git a/contrib/perl5/lib/shellwords.pl b/contrib/perl5/lib/shellwords.pl
deleted file mode 100644
index 1c45a5a..0000000
--- a/contrib/perl5/lib/shellwords.pl
+++ /dev/null
@@ -1,48 +0,0 @@
-;# shellwords.pl
-;#
-;# Usage:
-;# require 'shellwords.pl';
-;# @words = &shellwords($line);
-;# or
-;# @words = &shellwords(@lines);
-;# or
-;# @words = &shellwords; # defaults to $_ (and clobbers it)
-
-sub shellwords {
- package shellwords;
- local($_) = join('', @_) if @_;
- local(@words,$snippet,$field);
-
- s/^\s+//;
- while ($_ ne '') {
- $field = '';
- for (;;) {
- if (s/^"(([^"\\]|\\.)*)"//) {
- ($snippet = $1) =~ s#\\(.)#$1#g;
- }
- elsif (/^"/) {
- die "Unmatched double quote: $_\n";
- }
- elsif (s/^'(([^'\\]|\\.)*)'//) {
- ($snippet = $1) =~ s#\\(.)#$1#g;
- }
- elsif (/^'/) {
- die "Unmatched single quote: $_\n";
- }
- elsif (s/^\\(.)//) {
- $snippet = $1;
- }
- elsif (s/^([^\s\\'"]+)//) {
- $snippet = $1;
- }
- else {
- s/^\s+//;
- last;
- }
- $field .= $snippet;
- }
- push(@words, $field);
- }
- @words;
-}
-1;
diff --git a/contrib/perl5/lib/sigtrap.pm b/contrib/perl5/lib/sigtrap.pm
deleted file mode 100644
index c081123..0000000
--- a/contrib/perl5/lib/sigtrap.pm
+++ /dev/null
@@ -1,289 +0,0 @@
-package sigtrap;
-
-=head1 NAME
-
-sigtrap - Perl pragma to enable simple signal handling
-
-=cut
-
-use Carp;
-
-$VERSION = 1.02;
-$Verbose ||= 0;
-
-sub import {
- my $pkg = shift;
- my $handler = \&handler_traceback;
- my $saw_sig = 0;
- my $untrapped = 0;
- local $_;
-
- Arg_loop:
- while (@_) {
- $_ = shift;
- if (/^[A-Z][A-Z0-9]*$/) {
- $saw_sig++;
- unless ($untrapped and $SIG{$_} and $SIG{$_} ne 'DEFAULT') {
- print "Installing handler $handler for $_\n" if $Verbose;
- $SIG{$_} = $handler;
- }
- }
- elsif ($_ eq 'normal-signals') {
- unshift @_, grep(exists $SIG{$_}, qw(HUP INT PIPE TERM));
- }
- elsif ($_ eq 'error-signals') {
- unshift @_, grep(exists $SIG{$_},
- qw(ABRT BUS EMT FPE ILL QUIT SEGV SYS TRAP));
- }
- elsif ($_ eq 'old-interface-signals') {
- unshift @_,
- grep(exists $SIG{$_},
- qw(ABRT BUS EMT FPE ILL PIPE QUIT SEGV SYS TERM TRAP));
- }
- elsif ($_ eq 'stack-trace') {
- $handler = \&handler_traceback;
- }
- elsif ($_ eq 'die') {
- $handler = \&handler_die;
- }
- elsif ($_ eq 'handler') {
- @_ or croak "No argument specified after 'handler'";
- $handler = shift;
- unless (ref $handler or $handler eq 'IGNORE'
- or $handler eq 'DEFAULT') {
- require Symbol;
- $handler = Symbol::qualify($handler, (caller)[0]);
- }
- }
- elsif ($_ eq 'untrapped') {
- $untrapped = 1;
- }
- elsif ($_ eq 'any') {
- $untrapped = 0;
- }
- elsif ($_ =~ /^\d/) {
- $VERSION >= $_ or croak "sigtrap.pm version $_ required,"
- . " but this is only version $VERSION";
- }
- else {
- croak "Unrecognized argument $_";
- }
- }
- unless ($saw_sig) {
- @_ = qw(old-interface-signals);
- goto Arg_loop;
- }
-}
-
-sub handler_die {
- croak "Caught a SIG$_[0]";
-}
-
-sub handler_traceback {
- package DB; # To get subroutine args.
- $SIG{'ABRT'} = DEFAULT;
- kill 'ABRT', $$ if $panic++;
- syswrite(STDERR, 'Caught a SIG', 12);
- syswrite(STDERR, $_[0], length($_[0]));
- syswrite(STDERR, ' at ', 4);
- ($pack,$file,$line) = caller;
- syswrite(STDERR, $file, length($file));
- syswrite(STDERR, ' line ', 6);
- syswrite(STDERR, $line, length($line));
- syswrite(STDERR, "\n", 1);
-
- # Now go for broke.
- for ($i = 1; ($p,$f,$l,$s,$h,$w,$e,$r) = caller($i); $i++) {
- @a = ();
- for $arg (@args) {
- $_ = "$arg";
- s/([\'\\])/\\$1/g;
- s/([^\0]*)/'$1'/
- unless /^(?: -?[\d.]+ | \*[\w:]* )$/x;
- s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
- s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
- push(@a, $_);
- }
- $w = $w ? '@ = ' : '$ = ';
- $a = $h ? '(' . join(', ', @a) . ')' : '';
- $e =~ s/\n\s*\;\s*\Z// if $e;
- $e =~ s/[\\\']/\\$1/g if $e;
- if ($r) {
- $s = "require '$e'";
- } elsif (defined $r) {
- $s = "eval '$e'";
- } elsif ($s eq '(eval)') {
- $s = "eval {...}";
- }
- $f = "file `$f'" unless $f eq '-e';
- $mess = "$w$s$a called from $f line $l\n";
- syswrite(STDERR, $mess, length($mess));
- }
- kill 'ABRT', $$;
-}
-
-1;
-
-__END__
-
-=head1 SYNOPSIS
-
- use sigtrap;
- use sigtrap qw(stack-trace old-interface-signals); # equivalent
- use sigtrap qw(BUS SEGV PIPE ABRT);
- use sigtrap qw(die INT QUIT);
- use sigtrap qw(die normal-signals);
- use sigtrap qw(die untrapped normal-signals);
- use sigtrap qw(die untrapped normal-signals
- stack-trace any error-signals);
- use sigtrap 'handler' => \&my_handler, 'normal-signals';
- use sigtrap qw(handler my_handler normal-signals
- stack-trace error-signals);
-
-=head1 DESCRIPTION
-
-The B<sigtrap> pragma is a simple interface to installing signal
-handlers. You can have it install one of two handlers supplied by
-B<sigtrap> itself (one which provides a Perl stack trace and one which
-simply C<die()>s), or alternately you can supply your own handler for it
-to install. It can be told only to install a handler for signals which
-are either untrapped or ignored. It has a couple of lists of signals to
-trap, plus you can supply your own list of signals.
-
-The arguments passed to the C<use> statement which invokes B<sigtrap>
-are processed in order. When a signal name or the name of one of
-B<sigtrap>'s signal lists is encountered a handler is immediately
-installed, when an option is encountered it affects subsequently
-installed handlers.
-
-=head1 OPTIONS
-
-=head2 SIGNAL HANDLERS
-
-These options affect which handler will be used for subsequently
-installed signals.
-
-=over 4
-
-=item B<stack-trace>
-
-The handler used for subsequently installed signals outputs a Perl stack
-trace to STDERR and then tries to dump core. This is the default signal
-handler.
-
-=item B<die>
-
-The handler used for subsequently installed signals calls C<die>
-(actually C<croak>) with a message indicating which signal was caught.
-
-=item B<handler> I<your-handler>
-
-I<your-handler> will be used as the handler for subsequently installed
-signals. I<your-handler> can be any value which is valid as an
-assignment to an element of C<%SIG>.
-
-=back
-
-=head2 SIGNAL LISTS
-
-B<sigtrap> has a few built-in lists of signals to trap. They are:
-
-=over 4
-
-=item B<normal-signals>
-
-These are the signals which a program might normally expect to encounter
-and which by default cause it to terminate. They are HUP, INT, PIPE and
-TERM.
-
-=item B<error-signals>
-
-These signals usually indicate a serious problem with the Perl
-interpreter or with your script. They are ABRT, BUS, EMT, FPE, ILL,
-QUIT, SEGV, SYS and TRAP.
-
-=item B<old-interface-signals>
-
-These are the signals which were trapped by default by the old
-B<sigtrap> interface, they are ABRT, BUS, EMT, FPE, ILL, PIPE, QUIT,
-SEGV, SYS, TERM, and TRAP. If no signals or signals lists are passed to
-B<sigtrap>, this list is used.
-
-=back
-
-For each of these three lists, the collection of signals set to be
-trapped is checked before trapping; if your architecture does not
-implement a particular signal, it will not be trapped but rather
-silently ignored.
-
-=head2 OTHER
-
-=over 4
-
-=item B<untrapped>
-
-This token tells B<sigtrap> to install handlers only for subsequently
-listed signals which aren't already trapped or ignored.
-
-=item B<any>
-
-This token tells B<sigtrap> to install handlers for all subsequently
-listed signals. This is the default behavior.
-
-=item I<signal>
-
-Any argument which looks like a signal name (that is,
-C</^[A-Z][A-Z0-9]*$/>) indicates that B<sigtrap> should install a
-handler for that name.
-
-=item I<number>
-
-Require that at least version I<number> of B<sigtrap> is being used.
-
-=back
-
-=head1 EXAMPLES
-
-Provide a stack trace for the old-interface-signals:
-
- use sigtrap;
-
-Ditto:
-
- use sigtrap qw(stack-trace old-interface-signals);
-
-Provide a stack trace on the 4 listed signals only:
-
- use sigtrap qw(BUS SEGV PIPE ABRT);
-
-Die on INT or QUIT:
-
- use sigtrap qw(die INT QUIT);
-
-Die on HUP, INT, PIPE or TERM:
-
- use sigtrap qw(die normal-signals);
-
-Die on HUP, INT, PIPE or TERM, except don't change the behavior for
-signals which are already trapped or ignored:
-
- use sigtrap qw(die untrapped normal-signals);
-
-Die on receipt one of an of the B<normal-signals> which is currently
-B<untrapped>, provide a stack trace on receipt of B<any> of the
-B<error-signals>:
-
- use sigtrap qw(die untrapped normal-signals
- stack-trace any error-signals);
-
-Install my_handler() as the handler for the B<normal-signals>:
-
- use sigtrap 'handler', \&my_handler, 'normal-signals';
-
-Install my_handler() as the handler for the normal-signals, provide a
-Perl stack trace on receipt of one of the error-signals:
-
- use sigtrap qw(handler my_handler normal-signals
- stack-trace error-signals);
-
-=cut
diff --git a/contrib/perl5/lib/stat.pl b/contrib/perl5/lib/stat.pl
deleted file mode 100644
index f7c240a..0000000
--- a/contrib/perl5/lib/stat.pl
+++ /dev/null
@@ -1,31 +0,0 @@
-;# $RCSfile: stat.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:13 $
-
-;# Usage:
-;# require 'stat.pl';
-;# @ary = stat(foo);
-;# $st_dev = @ary[$ST_DEV];
-;#
-$ST_DEV = 0 + $[;
-$ST_INO = 1 + $[;
-$ST_MODE = 2 + $[;
-$ST_NLINK = 3 + $[;
-$ST_UID = 4 + $[;
-$ST_GID = 5 + $[;
-$ST_RDEV = 6 + $[;
-$ST_SIZE = 7 + $[;
-$ST_ATIME = 8 + $[;
-$ST_MTIME = 9 + $[;
-$ST_CTIME = 10 + $[;
-$ST_BLKSIZE = 11 + $[;
-$ST_BLOCKS = 12 + $[;
-
-;# Usage:
-;# require 'stat.pl';
-;# do Stat('foo'); # sets st_* as a side effect
-;#
-sub Stat {
- ($st_dev,$st_ino,$st_mode,$st_nlink,$st_uid,$st_gid,$st_rdev,$st_size,
- $st_atime,$st_mtime,$st_ctime,$st_blksize,$st_blocks) = stat(shift(@_));
-}
-
-1;
diff --git a/contrib/perl5/lib/strict.pm b/contrib/perl5/lib/strict.pm
deleted file mode 100644
index 8afb9a3..0000000
--- a/contrib/perl5/lib/strict.pm
+++ /dev/null
@@ -1,117 +0,0 @@
-package strict;
-
-=head1 NAME
-
-strict - Perl pragma to restrict unsafe constructs
-
-=head1 SYNOPSIS
-
- use strict;
-
- use strict "vars";
- use strict "refs";
- use strict "subs";
-
- use strict;
- no strict "vars";
-
-=head1 DESCRIPTION
-
-If no import list is supplied, all possible restrictions are assumed.
-(This is the safest mode to operate in, but is sometimes too strict for
-casual programming.) Currently, there are three possible things to be
-strict about: "subs", "vars", and "refs".
-
-=over 6
-
-=item C<strict refs>
-
-This generates a runtime error if you
-use symbolic references (see L<perlref>).
-
- use strict 'refs';
- $ref = \$foo;
- print $$ref; # ok
- $ref = "foo";
- print $$ref; # runtime error; normally ok
- $file = "STDOUT";
- print $file "Hi!"; # error; note: no comma after $file
-
-There is one exception to this rule:
-
- $bar = \&{'foo'};
- &$bar;
-
-is allowed so that C<goto &$AUTOLOAD> would not break under stricture.
-
-
-=item C<strict vars>
-
-This generates a compile-time error if you access a variable that wasn't
-declared via "our" or C<use vars>,
-localized via C<my()>, or wasn't fully qualified. Because this is to avoid
-variable suicide problems and subtle dynamic scoping issues, a merely
-local() variable isn't good enough. See L<perlfunc/my> and
-L<perlfunc/local>.
-
- use strict 'vars';
- $X::foo = 1; # ok, fully qualified
- my $foo = 10; # ok, my() var
- local $foo = 9; # blows up
-
- package Cinna;
- our $bar; # Declares $bar in current package
- $bar = 'HgS'; # ok, global declared via pragma
-
-The local() generated a compile-time error because you just touched a global
-name without fully qualifying it.
-
-Because of their special use by sort(), the variables $a and $b are
-exempted from this check.
-
-=item C<strict subs>
-
-This disables the poetry optimization, generating a compile-time error if
-you try to use a bareword identifier that's not a subroutine, unless it
-appears in curly braces or on the left hand side of the "=E<gt>" symbol.
-
-
- use strict 'subs';
- $SIG{PIPE} = Plumber; # blows up
- $SIG{PIPE} = "Plumber"; # just fine: bareword in curlies always ok
- $SIG{PIPE} = \&Plumber; # preferred form
-
-
-
-=back
-
-See L<perlmodlib/Pragmatic Modules>.
-
-
-=cut
-
-$strict::VERSION = "1.01";
-
-my %bitmask = (
-refs => 0x00000002,
-subs => 0x00000200,
-vars => 0x00000400
-);
-
-sub bits {
- my $bits = 0;
- foreach my $s (@_){ $bits |= $bitmask{$s} || 0; };
- $bits;
-}
-
-sub import {
- shift;
- $^H |= bits(@_ ? @_ : qw(refs subs vars));
-}
-
-sub unimport {
- shift;
- $^H &= ~ bits(@_ ? @_ : qw(refs subs vars));
-}
-
-1;
diff --git a/contrib/perl5/lib/subs.pm b/contrib/perl5/lib/subs.pm
deleted file mode 100644
index aa332a6..0000000
--- a/contrib/perl5/lib/subs.pm
+++ /dev/null
@@ -1,38 +0,0 @@
-package subs;
-
-=head1 NAME
-
-subs - Perl pragma to predeclare sub names
-
-=head1 SYNOPSIS
-
- use subs qw(frob);
- frob 3..10;
-
-=head1 DESCRIPTION
-
-This will predeclare all the subroutine whose names are
-in the list, allowing you to use them without parentheses
-even before they're declared.
-
-Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
-C<use subs> declarations are not BLOCK-scoped. They are thus effective
-for the entire file in which they appear. You may not rescind such
-declarations with C<no vars> or C<no subs>.
-
-See L<perlmodlib/Pragmatic Modules> and L<strict/strict subs>.
-
-=cut
-
-require 5.000;
-
-sub import {
- my $callpack = caller;
- my $pack = shift;
- my @imports = @_;
- foreach $sym (@imports) {
- *{"${callpack}::$sym"} = \&{"${callpack}::$sym"};
- }
-};
-
-1;
diff --git a/contrib/perl5/lib/syslog.pl b/contrib/perl5/lib/syslog.pl
deleted file mode 100644
index f0dbb1c..0000000
--- a/contrib/perl5/lib/syslog.pl
+++ /dev/null
@@ -1,199 +0,0 @@
-#
-# syslog.pl
-#
-# $Log: syslog.pl,v $
-#
-# tom christiansen <tchrist@convex.com>
-# modified to use sockets by Larry Wall <lwall@jpl-devvax.jpl.nasa.gov>
-# NOTE: openlog now takes three arguments, just like openlog(3)
-#
-# call syslog() with a string priority and a list of printf() args
-# like syslog(3)
-#
-# usage: require 'syslog.pl';
-#
-# then (put these all in a script to test function)
-#
-#
-# do openlog($program,'cons,pid','user');
-# do syslog('info','this is another test');
-# do syslog('mail|warning','this is a better test: %d', time);
-# do closelog();
-#
-# do syslog('debug','this is the last test');
-# do openlog("$program $$",'ndelay','user');
-# do syslog('notice','fooprogram: this is really done');
-#
-# $! = 55;
-# do syslog('info','problem was %m'); # %m == $! in syslog(3)
-
-package syslog;
-
-use warnings::register;
-
-$host = 'localhost' unless $host; # set $syslog'host to change
-
-if ($] >= 5 && warnings::enabled()) {
- warnings::warn("You should 'use Sys::Syslog' instead; continuing");
-}
-
-require 'syslog.ph';
-
- eval 'use Socket; 1' ||
- eval { require "socket.ph" } ||
- require "sys/socket.ph";
-
-$maskpri = &LOG_UPTO(&LOG_DEBUG);
-
-sub main'openlog {
- ($ident, $logopt, $facility) = @_; # package vars
- $lo_pid = $logopt =~ /\bpid\b/;
- $lo_ndelay = $logopt =~ /\bndelay\b/;
- $lo_cons = $logopt =~ /\bcons\b/;
- $lo_nowait = $logopt =~ /\bnowait\b/;
- &connect if $lo_ndelay;
-}
-
-sub main'closelog {
- $facility = $ident = '';
- &disconnect;
-}
-
-sub main'setlogmask {
- local($oldmask) = $maskpri;
- $maskpri = shift;
- $oldmask;
-}
-
-sub main'syslog {
- local($priority) = shift;
- local($mask) = shift;
- local($message, $whoami);
- local(@words, $num, $numpri, $numfac, $sum);
- local($facility) = $facility; # may need to change temporarily.
-
- die "syslog: expected both priority and mask" unless $mask && $priority;
-
- @words = split(/\W+/, $priority, 2);# Allow "level" or "level|facility".
- undef $numpri;
- undef $numfac;
- foreach (@words) {
- $num = &xlate($_); # Translate word to number.
- if (/^kern$/ || $num < 0) {
- die "syslog: invalid level/facility: $_\n";
- }
- elsif ($num <= &LOG_PRIMASK) {
- die "syslog: too many levels given: $_\n" if defined($numpri);
- $numpri = $num;
- return 0 unless &LOG_MASK($numpri) & $maskpri;
- }
- else {
- die "syslog: too many facilities given: $_\n" if defined($numfac);
- $facility = $_;
- $numfac = $num;
- }
- }
-
- die "syslog: level must be given\n" unless defined($numpri);
-
- if (!defined($numfac)) { # Facility not specified in this call.
- $facility = 'user' unless $facility;
- $numfac = &xlate($facility);
- }
-
- &connect unless $connected;
-
- $whoami = $ident;
-
- if (!$ident && $mask =~ /^(\S.*):\s?(.*)/) {
- $whoami = $1;
- $mask = $2;
- }
-
- unless ($whoami) {
- ($whoami = getlogin) ||
- ($whoami = getpwuid($<)) ||
- ($whoami = 'syslog');
- }
-
- $whoami .= "[$$]" if $lo_pid;
-
- $mask =~ s/%m/$!/g;
- $mask .= "\n" unless $mask =~ /\n$/;
- $message = sprintf ($mask, @_);
-
- $sum = $numpri + $numfac;
- unless (send(SYSLOG,"<$sum>$whoami: $message",0)) {
- if ($lo_cons) {
- if ($pid = fork) {
- unless ($lo_nowait) {
- do {$died = wait;} until $died == $pid || $died < 0;
- }
- }
- else {
- open(CONS,">/dev/console");
- print CONS "<$facility.$priority>$whoami: $message\r";
- exit if defined $pid; # if fork failed, we're parent
- close CONS;
- }
- }
- }
-}
-
-sub xlate {
- local($name) = @_;
- $name = uc $name;
- $name = "LOG_$name" unless $name =~ /^LOG_/;
- $name = "syslog'$name";
- defined &$name ? &$name : -1;
-}
-
-sub connect {
- $pat = 'S n C4 x8';
-
- $af_unix = &AF_UNIX;
- $af_inet = &AF_INET;
-
- $stream = &SOCK_STREAM;
- $datagram = &SOCK_DGRAM;
-
- ($name,$aliases,$proto) = getprotobyname('udp');
- $udp = $proto;
-
- ($name,$aliases,$port,$proto) = getservbyname('syslog','udp');
- $syslog = $port;
-
- if (chop($myname = `hostname`)) {
- ($name,$aliases,$addrtype,$length,@addrs) = gethostbyname($myname);
- die "Can't lookup $myname\n" unless $name;
- @bytes = unpack("C4",$addrs[0]);
- }
- else {
- @bytes = (0,0,0,0);
- }
- $this = pack($pat, $af_inet, 0, @bytes);
-
- if ($host =~ /^\d+\./) {
- @bytes = split(/\./,$host);
- }
- else {
- ($name,$aliases,$addrtype,$length,@addrs) = gethostbyname($host);
- die "Can't lookup $host\n" unless $name;
- @bytes = unpack("C4",$addrs[0]);
- }
- $that = pack($pat,$af_inet,$syslog,@bytes);
-
- socket(SYSLOG,$af_inet,$datagram,$udp) || die "socket: $!\n";
- bind(SYSLOG,$this) || die "bind: $!\n";
- connect(SYSLOG,$that) || die "connect: $!\n";
-
- local($old) = select(SYSLOG); $| = 1; select($old);
- $connected = 1;
-}
-
-sub disconnect {
- close SYSLOG;
- $connected = 0;
-}
-
-1;
diff --git a/contrib/perl5/lib/tainted.pl b/contrib/perl5/lib/tainted.pl
deleted file mode 100644
index 6e24867..0000000
--- a/contrib/perl5/lib/tainted.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-# This subroutine returns true if its argument is tainted, false otherwise.
-
-sub tainted {
- local($@);
- eval { kill 0 * $_[0] };
- $@ =~ /^Insecure/;
-}
-
-1;
diff --git a/contrib/perl5/lib/termcap.pl b/contrib/perl5/lib/termcap.pl
deleted file mode 100644
index f295a2d..0000000
--- a/contrib/perl5/lib/termcap.pl
+++ /dev/null
@@ -1,178 +0,0 @@
-;# $RCSfile: termcap.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:16 $
-#
-# This library is no longer being maintained, and is included for backward
-# compatibility with Perl 4 programs which may require it.
-#
-# In particular, this should not be used as an example of modern Perl
-# programming techniques.
-#
-# Suggested alternative: Term::Cap
-#
-;#
-;# Usage:
-;# require 'ioctl.pl';
-;# ioctl(TTY,$TIOCGETP,$foo);
-;# ($ispeed,$ospeed) = unpack('cc',$foo);
-;# require 'termcap.pl';
-;# &Tgetent('vt100'); # sets $TC{'cm'}, etc.
-;# &Tputs(&Tgoto($TC{'cm'},$col,$row), 0, 'FILEHANDLE');
-;# &Tputs($TC{'dl'},$affcnt,'FILEHANDLE');
-;#
-sub Tgetent {
- local($TERM) = @_;
- local($TERMCAP,$_,$entry,$loop,$field);
-
- # warn "Tgetent: no ospeed set" unless $ospeed;
- foreach $key (keys %TC) {
- delete $TC{$key};
- }
- $TERM = $ENV{'TERM'} unless $TERM;
- $TERM =~ s/(\W)/\\$1/g;
- $TERMCAP = $ENV{'TERMCAP'};
- $TERMCAP = '/etc/termcap' unless $TERMCAP;
- if ($TERMCAP !~ m:^/:) {
- if ($TERMCAP !~ /(^|\|)$TERM[:\|]/) {
- $TERMCAP = '/etc/termcap';
- }
- }
- if ($TERMCAP =~ m:^/:) {
- $entry = '';
- do {
- $loop = "
- open(TERMCAP,'<$TERMCAP') || die \"Can't open $TERMCAP\";
- while (<TERMCAP>) {
- next if /^#/;
- next if /^\t/;
- if (/(^|\\|)${TERM}[:\\|]/) {
- chop;
- while (chop eq '\\\\') {
- \$_ .= <TERMCAP>;
- chop;
- }
- \$_ .= ':';
- last;
- }
- }
- close TERMCAP;
- \$entry .= \$_;
- ";
- eval $loop;
- } while s/:tc=([^:]+):/:/ && ($TERM = $1);
- $TERMCAP = $entry;
- }
-
- foreach $field (split(/:[\s:\\]*/,$TERMCAP)) {
- if ($field =~ /^\w\w$/) {
- $TC{$field} = 1;
- }
- elsif ($field =~ /^(\w\w)#(.*)/) {
- $TC{$1} = $2 if $TC{$1} eq '';
- }
- elsif ($field =~ /^(\w\w)=(.*)/) {
- $entry = $1;
- $_ = $2;
- s/\\E/\033/g;
- s/\\(200)/pack('c',0)/eg; # NUL character
- s/\\(0\d\d)/pack('c',oct($1))/eg; # octal
- s/\\(0x[0-9A-Fa-f][0-9A-Fa-f])/pack('c',hex($1))/eg; # hex
- s/\\(\d\d\d)/pack('c',$1 & 0177)/eg;
- s/\\n/\n/g;
- s/\\r/\r/g;
- s/\\t/\t/g;
- s/\\b/\b/g;
- s/\\f/\f/g;
- s/\\\^/\377/g;
- s/\^\?/\177/g;
- s/\^(.)/pack('c',ord($1) & 31)/eg;
- s/\\(.)/$1/g;
- s/\377/^/g;
- $TC{$entry} = $_ if $TC{$entry} eq '';
- }
- }
- $TC{'pc'} = "\0" if $TC{'pc'} eq '';
- $TC{'bc'} = "\b" if $TC{'bc'} eq '';
-}
-
-@Tputs = (0,200,133.3,90.9,74.3,66.7,50,33.3,16.7,8.3,5.5,4.1,2,1,.5,.2);
-
-sub Tputs {
- local($string,$affcnt,$FH) = @_;
- local($ms);
- if ($string =~ /(^[\d.]+)(\*?)(.*)$/) {
- $ms = $1;
- $ms *= $affcnt if $2;
- $string = $3;
- $decr = $Tputs[$ospeed];
- if ($decr > .1) {
- $ms += $decr / 2;
- $string .= $TC{'pc'} x ($ms / $decr);
- }
- }
- print $FH $string if $FH;
- $string;
-}
-
-sub Tgoto {
- local($string) = shift(@_);
- local($result) = '';
- local($after) = '';
- local($code,$tmp) = @_;
- local(@tmp);
- @tmp = ($tmp,$code);
- local($online) = 0;
- while ($string =~ /^([^%]*)%(.)(.*)/) {
- $result .= $1;
- $code = $2;
- $string = $3;
- if ($code eq 'd') {
- $result .= sprintf("%d",shift(@tmp));
- }
- elsif ($code eq '.') {
- $tmp = shift(@tmp);
- if ($tmp == 0 || $tmp == 4 || $tmp == 10) {
- if ($online) {
- ++$tmp, $after .= $TC{'up'} if $TC{'up'};
- }
- else {
- ++$tmp, $after .= $TC{'bc'};
- }
- }
- $result .= sprintf("%c",$tmp);
- $online = !$online;
- }
- elsif ($code eq '+') {
- $result .= sprintf("%c",shift(@tmp)+ord($string));
- $string = substr($string,1,99);
- $online = !$online;
- }
- elsif ($code eq 'r') {
- ($code,$tmp) = @tmp;
- @tmp = ($tmp,$code);
- $online = !$online;
- }
- elsif ($code eq '>') {
- ($code,$tmp,$string) = unpack("CCa99",$string);
- if ($tmp[$[] > $code) {
- $tmp[$[] += $tmp;
- }
- }
- elsif ($code eq '2') {
- $result .= sprintf("%02d",shift(@tmp));
- $online = !$online;
- }
- elsif ($code eq '3') {
- $result .= sprintf("%03d",shift(@tmp));
- $online = !$online;
- }
- elsif ($code eq 'i') {
- ($code,$tmp) = @tmp;
- @tmp = ($code+1,$tmp+1);
- }
- else {
- return "OOPS";
- }
- }
- $result . $string . $after;
-}
-
-1;
diff --git a/contrib/perl5/lib/timelocal.pl b/contrib/perl5/lib/timelocal.pl
deleted file mode 100644
index ad32275..0000000
--- a/contrib/perl5/lib/timelocal.pl
+++ /dev/null
@@ -1,18 +0,0 @@
-;# timelocal.pl
-;#
-;# Usage:
-;# $time = timelocal($sec,$min,$hours,$mday,$mon,$year);
-;# $time = timegm($sec,$min,$hours,$mday,$mon,$year);
-
-;# This file has been superseded by the Time::Local library module.
-;# It is implemented as a call to that module for backwards compatibility
-;# with code written for perl4; new code should use Time::Local directly.
-
-;# The current implementation shares with the original the questionable
-;# behavior of defining the timelocal() and timegm() functions in the
-;# namespace of whatever package was current when the first instance of
-;# C<require 'timelocal.pl';> was executed in a program.
-
-use Time::Local;
-
-*timelocal::cheat = \&Time::Local::cheat;
diff --git a/contrib/perl5/lib/unicode/ArabLink.pl b/contrib/perl5/lib/unicode/ArabLink.pl
deleted file mode 100644
index 2ad1871..0000000
--- a/contrib/perl5/lib/unicode/ArabLink.pl
+++ /dev/null
@@ -1,45 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0622 0625 R
-0626 D
-0627 R
-0628 D
-0629 R
-062a 062e D
-062f 0632 R
-0633 063a D
-0640 C
-0641 0647 D
-0648 R
-0649 064a D
-0671 0673 R
-0674 U
-0675 0677 R
-0678 0687 D
-0688 0699 R
-069a 06bf D
-06c0 R
-06c1 D
-06c2 06cb R
-06cc D
-06cd R
-06ce D
-06cf R
-06d0 06d1 D
-06d2 06d3 R
-06d5 U
-06fa 06fc D
-0710 R
-0712 0714 D
-0715 0719 R
-071a 071d D
-071e R
-071f 0727 D
-0728 R
-0729 D
-072a R
-072b D
-072c R
-END
diff --git a/contrib/perl5/lib/unicode/ArabLnkGrp.pl b/contrib/perl5/lib/unicode/ArabLnkGrp.pl
deleted file mode 100644
index 1581a04..0000000
--- a/contrib/perl5/lib/unicode/ArabLnkGrp.pl
+++ /dev/null
@@ -1,93 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0622 0623 ALEF
-0624 WAW
-0625 ALEF
-0626 YEH
-0627 ALEF
-0628 BEH
-0629 TEH MARBUTA
-062a 062b BEH
-062c 062e HAH
-062f 0630 DAL
-0631 0632 REH
-0633 0634 SEEN
-0635 0636 SAD
-0637 0638 TAH
-0639 063a AIN
-0640 <no shaping>
-0641 FEH
-0642 QAF
-0643 KAF
-0644 LAM
-0645 MEEM
-0646 NOON
-0647 HEH
-0648 WAW
-0649 064a YEH
-0671 0673 ALEF
-0674 <no shaping>
-0675 ALEF
-0676 0677 WAW
-0678 YEH
-0679 0680 BEH
-0681 0687 HAH
-0688 0690 DAL
-0691 0699 REH
-069a 069c SEEN
-069d 069e SAD
-069f TAH
-06a0 AIN
-06a1 06a6 FEH
-06a7 06a8 QAF
-06a9 GAF
-06aa SWASH KAF
-06ab GAF
-06ac 06ae KAF
-06af 06b4 GAF
-06b5 06b8 LAM
-06b9 06bd NOON
-06be KNOTTED HEH
-06bf HAH
-06c0 TEH MARBUTA
-06c1 HEH GOAL
-06c2 06c3 HAMZA ON HEH GOAL
-06c4 06cb WAW
-06cc YEH
-06cd YEH WITH TAIL
-06ce YEH
-06cf WAW
-06d0 06d1 YEH
-06d2 06d3 YEH BARREE
-06d5 <no shaping>
-06fa SEEN
-06fb SAD
-06fc AIN
-0710 ALAPH
-0712 BETH
-0713 0714 GAMAL
-0715 0716 DALATH RISH
-0717 HE
-0718 WAW
-0719 ZAIN
-071a HETH
-071b 071c TETH
-071d YUDH
-071e YUDH HE
-071f KAPH
-0720 LAMADH
-0721 MIM
-0722 NUN
-0723 SEMKATH
-0724 FINAL SEMKATH
-0725 E
-0726 PE
-0727 REVERSED PE
-0728 SADHE
-0729 QAPH
-072a DALATH RISH
-072b SHIN
-072c TAW
-END
diff --git a/contrib/perl5/lib/unicode/ArabShap.txt b/contrib/perl5/lib/unicode/ArabShap.txt
deleted file mode 100644
index 9b60290..0000000
--- a/contrib/perl5/lib/unicode/ArabShap.txt
+++ /dev/null
@@ -1,199 +0,0 @@
-# ArabicShaping-3.txt
-#
-# This file is a normative contributory data file in the
-# Unicode Character Database.
-#
-# This file defines the shaping classes for Arabic and Syriac
-# positional shaping, repeating in machine readable form the
-# information printed in Tables 8-6, 8-7, 8-8, 8-10, 8-11, and
-# 8-13 of The Unicode Standard, Version 3.0.
-#
-# See sections 8.2 and 8.3 of The Unicode Standard, Version 3.0
-# for more information.
-#
-# Each line contains four fields, separated by a semicolon.
-#
-# The first field gives the code point, in 4-digit hexadecimal
-# form, of an Arabic or Syriac character.
-# The second field gives a short schematic name for that character,
-# abbreviated from the normative Unicode character name.
-# The third field defines the joining type: R right-joining,
-# D dual-joining, U non-joining
-# The fourth field defines the joining group.
-#
-# #############################################################
-
-# Unicode; Schematic Name; Joining Type; Joining Group
-
-# Arabic characters
-
-0622; MADDA ON ALEF; R; ALEF
-0623; HAMZA ON ALEF; R; ALEF
-0624; HAMZA ON WAW; R; WAW
-0625; HAMZA UNDER ALEF; R; ALEF
-0626; HAMZA ON YEH; D; YEH
-0627; ALEF; R; ALEF
-0628; BEH; D; BEH
-0629; TEH MARBUTA; R; TEH MARBUTA
-062A; TEH; D; BEH
-062B; THEH; D; BEH
-062C; JEEM; D; HAH
-062D; HAH; D; HAH
-062E; KHAH; D; HAH
-062F; DAL; R; DAL
-0630; THAL; R; DAL
-0631; REH; R; REH
-0632; ZAIN; R; REH
-0633; SEEN; D; SEEN
-0634; SHEEN; D; SEEN
-0635; SAD; D; SAD
-0636; DAD; D; SAD
-0637; TAH; D; TAH
-0638; ZAH; D; TAH
-0639; AIN; D; AIN
-063A; GHAIN; D; AIN
-0640; TATWEEL; C; <no shaping>
-0641; FEH; D; FEH
-0642; QAF; D; QAF
-0643; KAF; D; KAF
-0644; LAM; D; LAM
-0645; MEEM; D; MEEM
-0646; NOON; D; NOON
-0647; HEH; D; HEH
-0648; WAW; R; WAW
-0649; ALEF MAKSURA; D; YEH
-064A; YEH; D; YEH
-0671; HAMZAT WASL ON ALEF; R; ALEF
-0672; WAVY HAMZA ON ALEF; R; ALEF
-0673; WAVY HAMZA UNDER ALEF; R; ALEF
-0674; HIGH HAMZA; U; <no shaping>
-0675; HIGH HAMZA ALEF; R; ALEF
-0676; HIGH HAMZA WAW; R; WAW
-0677; HIGH HAMZA WAW WITH DAMMA; R; WAW
-0678; HIGH HAMZA YEH; D; YEH
-0679; TEH WITH SMALL TAH; D; BEH
-067A; TEH WITH 2 DOTS VERTICAL ABOVE; D; BEH
-067B; BEH WITH 2 DOTS VERTICAL BELOW; D; BEH
-067C; TEH WITH RING; D; BEH
-067D; TEH WITH 3 DOTS ABOVE DOWNWARD; D; BEH
-067E; TEH WITH 3 DOTS BELOW; D; BEH
-067F; TEH WITH 4 DOTS ABOVE; D; BEH
-0680; BEH WITH 4 DOTS BELOW; D; BEH
-0681; HAMZA ON HAH; D; HAH
-0682; HAH WITH 2 DOTS VERTICAL ABOVE; D; HAH
-0683; HAH WITH MIDDLE 2 DOTS; D; HAH
-0684; HAH WITH MIDDLE 2 DOTS VERTICAL; D; HAH
-0685; HAH WITH 3 DOTS ABOVE; D; HAH
-0686; HAH WITH MIDDLE 3 DOTS DOWNWARD; D; HAH
-0687; HAH WITH MIDDLE 4 DOTS; D; HAH
-0688; DAL WITH SMALL TAH; R; DAL
-0689; DAL WITH RING; R; DAL
-068A; DAL WITH DOT BELOW; R; DAL
-068B; DAL WITH DOT BELOW AND SMALL TAH; R; DAL
-068C; DAL WITH 2 DOTS ABOVE; R; DAL
-068D; DAL WITH 2 DOTS BELOW; R; DAL
-068E; DAL WITH 3 DOTS ABOVE; R; DAL
-068F; DAL WITH 3 DOTS ABOVE DOWNWARD; R; DAL
-0690; DAL WITH 4 DOTS ABOVE; R; DAL
-0691; REH WITH SMALL TAH; R; REH
-0692; REH WITH SMALL V; R; REH
-0693; REH WITH RING; R; REH
-0694; REH WITH DOT BELOW; R; REH
-0695; REH WITH SMALL V BELOW; R; REH
-0696; REH WITH DOT BELOW AND DOT ABOVE; R; REH
-0697; REH WITH 2 DOTS ABOVE; R; REH
-0698; REH WITH 3 DOTS ABOVE; R; REH
-0699; REH WITH 4 DOTS ABOVE; R; REH
-069A; SEEN WITH DOT BELOW AND DOT ABOVE; D; SEEN
-069B; SEEN WITH 3 DOTS BELOW; D; SEEN
-069C; SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE; D; SEEN
-069D; SAD WITH 2 DOTS BELOW; D; SAD
-069E; SAD WITH 3 DOTS ABOVE; D; SAD
-069F; TAH WITH 3 DOTS ABOVE; D; TAH
-06A0; AIN WITH 3 DOTS ABOVE; D; AIN
-06A1; DOTLESS FEH; D; FEH
-06A2; FEH WITH DOT MOVED BELOW; D; FEH
-06A3; FEH WITH DOT BELOW; D; FEH
-06A4; FEH WITH 3 DOTS ABOVE; D; FEH
-06A5; FEH WITH 3 DOTS BELOW; D; FEH
-06A6; FEH WITH 4 DOTS ABOVE; D; FEH
-06A7; QAF WITH DOT ABOVE; D; QAF
-06A8; QAF WITH 3 DOTS ABOVE; D; QAF
-06A9; OPEN KAF; D; GAF
-06AA; SWASH KAF; D; SWASH KAF
-06AB; KAF WITH RING; D; GAF
-06AC; KAF WITH DOT ABOVE; D; KAF
-06AD; KAF WITH 3 DOTS ABOVE; D; KAF
-06AE; KAF WITH 3 DOTS BELOW; D; KAF
-06AF; GAF; D; GAF
-06B0; GAF WITH RING; D; GAF
-06B1; GAF WITH 2 DOTS ABOVE; D; GAF
-06B2; GAF WITH 2 DOTS BELOW; D; GAF
-06B3; GAF WITH 2 DOTS VERTICAL BELOW; D; GAF
-06B4; GAF WITH 3 DOTS ABOVE; D; GAF
-06B5; LAM WITH SMALL V; D; LAM
-06B6; LAM WITH DOT ABOVE; D; LAM
-06B7; LAM WITH 3 DOTS ABOVE; D; LAM
-06B8; LAM WITH 3 DOTS BELOW; D; LAM
-06B9; NOON WITH DOT BELOW; D; NOON
-06BA; DOTLESS NOON; D; NOON
-06BB; DOTLESS NOON WITH SMALL TAH; D; NOON
-06BC; NOON WITH RING; D; NOON
-06BD; NOON WITH 3 DOTS ABOVE; D; NOON
-06BE; KNOTTED HEH; D; KNOTTED HEH
-06BF; HAH WITH MIDDLE 3 DOTS DOWNWARD AND DOT ABOVE; D; HAH
-06C0; HAMZA ON HEH; R; TEH MARBUTA
-06C1; HEH GOAL; D; HEH GOAL
-06C2; HAMZA ON HEH GOAL; R; HAMZA ON HEH GOAL
-06C3; TEH MARBUTA GOAL; R; HAMZA ON HEH GOAL
-06C4; WAW WITH RING; R; WAW
-06C5; WAW WITH BAR; R; WAW
-06C6; WAW WITH SMALL V; R; WAW
-06C7; WAW WITH DAMMA; R; WAW
-06C8; WAW WITH ALEF ABOVE; R; WAW
-06C9; WAW WITH INVERTED SMALL V; R; WAW
-06CA; WAW WITH 2 DOTS ABOVE; R; WAW
-06CB; WAW WITH 3 DOTS ABOVE; R; WAW
-06CC; DOTLESS YEH; D; YEH
-06CD; YEH WITH TAIL; R; YEH WITH TAIL
-06CE; YEH WITH SMALL V; D; YEH
-06CF; WAW WITH DOT ABOVE; R; WAW
-06D0; YEH WITH 2 DOTS VERTICAL BELOW; D; YEH
-06D1; YEH WITH 3 DOTS BELOW; D; YEH
-06D2; YEH BARREE; R; YEH BARREE
-06D3; HAMZA ON YEH BARREE; R; YEH BARREE
-06D5; AE; U; <no shaping>
-06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN
-06FB; DAD WITH DOT BELOW; D; SAD
-06FC; GHAIN WITH DOT BELOW; D; AIN
-
-# Syriac characters
-
-0710; ALAPH; R; ALAPH
-0712; BETH; D; BETH
-0713; GAMAL; D; GAMAL
-0714; GAMAL GARSHUNI; D; GAMAL
-0715; DALATH; R; DALATH RISH
-0716; DOTLESS DALATH RISH; R; DALATH RISH
-0717; HE; R; HE
-0718; WAW; R; WAW
-0719; ZAIN; R; ZAIN
-071A; HETH; D; HETH
-071B; TETH; D; TETH
-071C; TETH GARSHUNI; D; TETH
-071D; YUDH; D; YUDH
-071E; YUDH HE; R; YUDH HE
-071F; KAPH; D; KAPH
-0720; LAMADH; D; LAMADH
-0721; MIM; D; MIM
-0722; NUN; D; NUN
-0723; SEMKATH; D; SEMKATH
-0724; FINAL SEMKATH; D; FINAL SEMKATH
-0725; E; D; E
-0726; PE; D; PE
-0727; REVERSED PE; D; REVERSED PE
-0728; SADHE; R; SADHE
-0729; QAPH; D; QAPH
-072A; RISH; R; DALATH RISH
-072B; SHIN; D; SHIN
-072C; TAW; R; TAW
diff --git a/contrib/perl5/lib/unicode/BidiMirr.txt b/contrib/perl5/lib/unicode/BidiMirr.txt
deleted file mode 100644
index 8ac5be9..0000000
--- a/contrib/perl5/lib/unicode/BidiMirr.txt
+++ /dev/null
@@ -1,238 +0,0 @@
-# BidiMirroring-1.txt
-#
-# This file is an informative supplement to the UnicodeData file. It
-# lists characters that have the mirrored property
-# where there is another Unicode character that typically has a glyph
-# that is the mirror image of the original character's glyph.
-# The repertoire covered by the file is Unicode 3.0.1.
-#
-# The file contains a list of lines with mappings from one code point
-# to another one for character-based mirroring.
-# Note that for "real" mirroring, a rendering engine needs to select
-# appropriate alternative glyphs, and that many Unicode characters do not
-# have a mirror-image Unicode character.
-#
-# Each mapping line contains two fields, separated by a semicolon (';').
-# Each of the two fields contains a code point represented as a
-# variable-length hexadecimal value with 4 to 6 digits.
-# A comment indicates where the characters are "BEST FIT" mirroring.
-#
-# Code points with the "mirrored" property but no appropriate mirrors are
-# listed as comments at the end of the file.
-#
-# For information on bidi mirroring, see UTR #21: Bidirectional Algorithm,
-# at http://www.unicode.org/unicode/reports/tr9/
-#
-# Please address any comments to <errata@unicode.org>.
-# Note that this is an archival address: messages will be checked,
-# but do not expect an immediate response.
-#
-# This file was originally created by Markus Scherer
-#
-# ############################################################
-
-0028; 0029 # LEFT PARENTHESIS
-0029; 0028 # RIGHT PARENTHESIS
-003C; 003E # LESS-THAN SIGN
-003E; 003C # GREATER-THAN SIGN
-005B; 005D # LEFT SQUARE BRACKET
-005D; 005B # RIGHT SQUARE BRACKET
-007B; 007D # LEFT CURLY BRACKET
-007D; 007B # RIGHT CURLY BRACKET
-00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-2045; 2046 # LEFT SQUARE BRACKET WITH QUILL
-2046; 2045 # RIGHT SQUARE BRACKET WITH QUILL
-207D; 207E # SUPERSCRIPT LEFT PARENTHESIS
-207E; 207D # SUPERSCRIPT RIGHT PARENTHESIS
-208D; 208E # SUBSCRIPT LEFT PARENTHESIS
-208E; 208D # SUBSCRIPT RIGHT PARENTHESIS
-2208; 220B # ELEMENT OF
-2209; 220C # NOT AN ELEMENT OF
-220A; 220D # SMALL ELEMENT OF
-220B; 2208 # CONTAINS AS MEMBER
-220C; 2209 # DOES NOT CONTAIN AS MEMBER
-220D; 220A # SMALL CONTAINS AS MEMBER
-223C; 223D # TILDE OPERATOR
-223D; 223C # REVERSED TILDE
-2243; 22CD # ASYMPTOTICALLY EQUAL TO
-2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF
-2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO
-2254; 2255 # COLON EQUALS
-2255; 2254 # EQUALS COLON
-2264; 2265 # LESS-THAN OR EQUAL TO
-2265; 2264 # GREATER-THAN OR EQUAL TO
-2266; 2267 # LESS-THAN OVER EQUAL TO
-2267; 2266 # GREATER-THAN OVER EQUAL TO
-2268; 2269 # [BEST FIT] LESS-THAN BUT NOT EQUAL TO
-2269; 2268 # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO
-226A; 226B # MUCH LESS-THAN
-226B; 226A # MUCH GREATER-THAN
-226E; 226F # [BEST FIT] NOT LESS-THAN
-226F; 226E # [BEST FIT] NOT GREATER-THAN
-2270; 2271 # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO
-2271; 2270 # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO
-2272; 2273 # [BEST FIT] LESS-THAN OR EQUIVALENT TO
-2273; 2272 # [BEST FIT] GREATER-THAN OR EQUIVALENT TO
-2274; 2275 # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO
-2275; 2274 # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO
-2276; 2277 # LESS-THAN OR GREATER-THAN
-2277; 2276 # GREATER-THAN OR LESS-THAN
-2278; 2279 # NEITHER LESS-THAN NOR GREATER-THAN
-2279; 2278 # NEITHER GREATER-THAN NOR LESS-THAN
-227A; 227B # PRECEDES
-227B; 227A # SUCCEEDS
-227C; 227D # PRECEDES OR EQUAL TO
-227D; 227C # SUCCEEDS OR EQUAL TO
-227E; 227F # [BEST FIT] PRECEDES OR EQUIVALENT TO
-227F; 227E # [BEST FIT] SUCCEEDS OR EQUIVALENT TO
-2280; 2281 # [BEST FIT] DOES NOT PRECEDE
-2281; 2280 # [BEST FIT] DOES NOT SUCCEED
-2282; 2283 # SUBSET OF
-2283; 2282 # SUPERSET OF
-2284; 2285 # [BEST FIT] NOT A SUBSET OF
-2285; 2284 # [BEST FIT] NOT A SUPERSET OF
-2286; 2287 # SUBSET OF OR EQUAL TO
-2287; 2286 # SUPERSET OF OR EQUAL TO
-2288; 2289 # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO
-2289; 2288 # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO
-228A; 228B # [BEST FIT] SUBSET OF WITH NOT EQUAL TO
-228B; 228A # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO
-228F; 2290 # SQUARE IMAGE OF
-2290; 228F # SQUARE ORIGINAL OF
-2291; 2292 # SQUARE IMAGE OF OR EQUAL TO
-2292; 2291 # SQUARE ORIGINAL OF OR EQUAL TO
-22A2; 22A3 # RIGHT TACK
-22A3; 22A2 # LEFT TACK
-22B0; 22B1 # PRECEDES UNDER RELATION
-22B1; 22B0 # SUCCEEDS UNDER RELATION
-22B2; 22B3 # NORMAL SUBGROUP OF
-22B3; 22B2 # CONTAINS AS NORMAL SUBGROUP
-22B4; 22B5 # NORMAL SUBGROUP OF OR EQUAL TO
-22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
-22B6; 22B7 # ORIGINAL OF
-22B7; 22B6 # IMAGE OF
-22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
-22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
-22CB; 22CC # LEFT SEMIDIRECT PRODUCT
-22CC; 22CB # RIGHT SEMIDIRECT PRODUCT
-22CD; 2243 # REVERSED TILDE EQUALS
-22D0; 22D1 # DOUBLE SUBSET
-22D1; 22D0 # DOUBLE SUPERSET
-22D6; 22D7 # LESS-THAN WITH DOT
-22D7; 22D6 # GREATER-THAN WITH DOT
-22D8; 22D9 # VERY MUCH LESS-THAN
-22D9; 22D8 # VERY MUCH GREATER-THAN
-22DA; 22DB # LESS-THAN EQUAL TO OR GREATER-THAN
-22DB; 22DA # GREATER-THAN EQUAL TO OR LESS-THAN
-22DC; 22DD # EQUAL TO OR LESS-THAN
-22DD; 22DC # EQUAL TO OR GREATER-THAN
-22DE; 22DF # EQUAL TO OR PRECEDES
-22DF; 22DE # EQUAL TO OR SUCCEEDS
-22E0; 22E1 # [BEST FIT] DOES NOT PRECEDE OR EQUAL
-22E1; 22E0 # [BEST FIT] DOES NOT SUCCEED OR EQUAL
-22E2; 22E3 # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO
-22E3; 22E2 # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO
-22E4; 22E5 # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO
-22E5; 22E4 # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO
-22E6; 22E7 # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO
-22E7; 22E6 # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO
-22E8; 22E9 # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO
-22E9; 22E8 # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO
-22EA; 22EB # [BEST FIT] NOT NORMAL SUBGROUP OF
-22EB; 22EA # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP
-22EC; 22ED # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO
-22ED; 22EC # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
-22F0; 22F1 # UP RIGHT DIAGONAL ELLIPSIS
-22F1; 22F0 # DOWN RIGHT DIAGONAL ELLIPSIS
-2308; 2309 # LEFT CEILING
-2309; 2308 # RIGHT CEILING
-230A; 230B # LEFT FLOOR
-230B; 230A # RIGHT FLOOR
-2329; 232A # LEFT-POINTING ANGLE BRACKET
-232A; 2329 # RIGHT-POINTING ANGLE BRACKET
-3008; 3009 # LEFT ANGLE BRACKET
-3009; 3008 # RIGHT ANGLE BRACKET
-300A; 300B # LEFT DOUBLE ANGLE BRACKET
-300B; 300A # RIGHT DOUBLE ANGLE BRACKET
-300C; 300D # [BEST FIT] LEFT CORNER BRACKET
-300D; 300C # [BEST FIT] RIGHT CORNER BRACKET
-300E; 300F # [BEST FIT] LEFT WHITE CORNER BRACKET
-300F; 300E # [BEST FIT] RIGHT WHITE CORNER BRACKET
-3010; 3011 # LEFT BLACK LENTICULAR BRACKET
-3011; 3010 # RIGHT BLACK LENTICULAR BRACKET
-3014; 3015 # [BEST FIT] LEFT TORTOISE SHELL BRACKET
-3015; 3014 # [BEST FIT] RIGHT TORTOISE SHELL BRACKET
-3016; 3017 # LEFT WHITE LENTICULAR BRACKET
-3017; 3016 # RIGHT WHITE LENTICULAR BRACKET
-3018; 3019 # LEFT WHITE TORTOISE SHELL BRACKET
-3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET
-301A; 301B # LEFT WHITE SQUARE BRACKET
-301B; 301A # RIGHT WHITE SQUARE BRACKET
-
-# The following characters have no appropriate mirroring character
-
-# 2201; COMPLEMENT
-# 2202; PARTIAL DIFFERENTIAL
-# 2203; THERE EXISTS
-# 2204; THERE DOES NOT EXIST
-# 2211; N-ARY SUMMATION
-# 2215; DIVISION SLASH
-# 2216; SET MINUS
-# 221A; SQUARE ROOT
-# 221B; CUBE ROOT
-# 221C; FOURTH ROOT
-# 221D; PROPORTIONAL TO
-# 221F; RIGHT ANGLE
-# 2220; ANGLE
-# 2221; MEASURED ANGLE
-# 2222; SPHERICAL ANGLE
-# 2224; DOES NOT DIVIDE
-# 2226; NOT PARALLEL TO
-# 222B; INTEGRAL
-# 222C; DOUBLE INTEGRAL
-# 222D; TRIPLE INTEGRAL
-# 222E; CONTOUR INTEGRAL
-# 222F; SURFACE INTEGRAL
-# 2230; VOLUME INTEGRAL
-# 2231; CLOCKWISE INTEGRAL
-# 2232; CLOCKWISE CONTOUR INTEGRAL
-# 2233; ANTICLOCKWISE CONTOUR INTEGRAL
-# 2239; EXCESS
-# 223B; HOMOTHETIC
-# 223E; INVERTED LAZY S
-# 223F; SINE WAVE
-# 2240; WREATH PRODUCT
-# 2241; NOT TILDE
-# 2242; MINUS TILDE
-# 2244; NOT ASYMPTOTICALLY EQUAL TO
-# 2245; APPROXIMATELY EQUAL TO
-# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
-# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
-# 2248; ALMOST EQUAL TO
-# 2249; NOT ALMOST EQUAL TO
-# 224A; ALMOST EQUAL OR EQUAL TO
-# 224B; TRIPLE TILDE
-# 224C; ALL EQUAL TO
-# 225F; QUESTIONED EQUAL TO
-# 2260; NOT EQUAL TO
-# 2262; NOT IDENTICAL TO
-# 228C; MULTISET
-# 2298; CIRCLED DIVISION SLASH
-# 22A6; ASSERTION
-# 22A7; MODELS
-# 22A8; TRUE
-# 22A9; FORCES
-# 22AA; TRIPLE VERTICAL BAR RIGHT TURNSTILE
-# 22AB; DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-# 22AC; DOES NOT PROVE
-# 22AD; NOT TRUE
-# 22AE; DOES NOT FORCE
-# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-# 22B8; MULTIMAP
-# 22BE; RIGHT ANGLE WITH ARC
-# 22BF; RIGHT TRIANGLE
-# 2320; TOP HALF INTEGRAL
-# 2321; BOTTOM HALF INTEGRAL
diff --git a/contrib/perl5/lib/unicode/Bidirectional.pl b/contrib/perl5/lib/unicode/Bidirectional.pl
deleted file mode 100644
index 3cc2d0a..0000000
--- a/contrib/perl5/lib/unicode/Bidirectional.pl
+++ /dev/null
@@ -1,640 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 0008 BN
-0009 S
-000a B
-000b S
-000c WS
-000d B
-000e 001b BN
-001c 001e B
-001f S
-0020 WS
-0021 0022 ON
-0023 0025 ET
-0026 002a ON
-002b ET
-002c CS
-002d ET
-002e CS
-002f ES
-0030 0039 EN
-003a CS
-003b 0040 ON
-0041 005a L
-005b 0060 ON
-0061 007a L
-007b 007e ON
-007f 0084 BN
-0085 B
-0086 009f BN
-00a0 CS
-00a1 ON
-00a2 00a5 ET
-00a6 00a9 ON
-00aa L
-00ab 00af ON
-00b0 00b1 ET
-00b2 00b3 EN
-00b4 ON
-00b5 L
-00b6 00b8 ON
-00b9 EN
-00ba L
-00bb 00bf ON
-00c0 00d6 L
-00d7 ON
-00d8 00f6 L
-00f7 ON
-00f8 021f L
-0222 0233 L
-0250 02ad L
-02b0 02b8 L
-02b9 02ba ON
-02bb 02c1 L
-02c2 02cf ON
-02d0 02d1 L
-02d2 02df ON
-02e0 02e4 L
-02e5 02ed ON
-02ee L
-0300 034e NSM
-0360 0362 NSM
-0374 0375 ON
-037a L
-037e ON
-0384 0385 ON
-0386 L
-0387 ON
-0388 038a L
-038c L
-038e 03a1 L
-03a3 03ce L
-03d0 03d7 L
-03da 03f3 L
-0400 0482 L
-0483 0486 NSM
-0488 0489 NSM
-048c 04c4 L
-04c7 04c8 L
-04cb 04cc L
-04d0 04f5 L
-04f8 04f9 L
-0531 0556 L
-0559 055f L
-0561 0587 L
-0589 L
-058a ON
-0591 05a1 NSM
-05a3 05b9 NSM
-05bb 05bd NSM
-05be R
-05bf NSM
-05c0 R
-05c1 05c2 NSM
-05c3 R
-05c4 NSM
-05d0 05ea R
-05f0 05f4 R
-060c CS
-061b AL
-061f AL
-0621 063a AL
-0640 064a AL
-064b 0655 NSM
-0660 0669 AN
-066a ET
-066b 066c AN
-066d AL
-0670 NSM
-0671 06d5 AL
-06d6 06e4 NSM
-06e5 06e6 AL
-06e7 06e8 NSM
-06e9 ON
-06ea 06ed NSM
-06f0 06f9 EN
-06fa 06fe AL
-0700 070d AL
-070f BN
-0710 AL
-0711 NSM
-0712 072c AL
-0730 074a NSM
-0780 07a5 AL
-07a6 07b0 NSM
-0901 0902 NSM
-0903 L
-0905 0939 L
-093c NSM
-093d 0940 L
-0941 0948 NSM
-0949 094c L
-094d NSM
-0950 L
-0951 0954 NSM
-0958 0961 L
-0962 0963 NSM
-0964 0970 L
-0981 NSM
-0982 0983 L
-0985 098c L
-098f 0990 L
-0993 09a8 L
-09aa 09b0 L
-09b2 L
-09b6 09b9 L
-09bc NSM
-09be 09c0 L
-09c1 09c4 NSM
-09c7 09c8 L
-09cb 09cc L
-09cd NSM
-09d7 L
-09dc 09dd L
-09df 09e1 L
-09e2 09e3 NSM
-09e6 09f1 L
-09f2 09f3 ET
-09f4 09fa L
-0a02 NSM
-0a05 0a0a L
-0a0f 0a10 L
-0a13 0a28 L
-0a2a 0a30 L
-0a32 0a33 L
-0a35 0a36 L
-0a38 0a39 L
-0a3c NSM
-0a3e 0a40 L
-0a41 0a42 NSM
-0a47 0a48 NSM
-0a4b 0a4d NSM
-0a59 0a5c L
-0a5e L
-0a66 0a6f L
-0a70 0a71 NSM
-0a72 0a74 L
-0a81 0a82 NSM
-0a83 L
-0a85 0a8b L
-0a8d L
-0a8f 0a91 L
-0a93 0aa8 L
-0aaa 0ab0 L
-0ab2 0ab3 L
-0ab5 0ab9 L
-0abc NSM
-0abd 0ac0 L
-0ac1 0ac5 NSM
-0ac7 0ac8 NSM
-0ac9 L
-0acb 0acc L
-0acd NSM
-0ad0 L
-0ae0 L
-0ae6 0aef L
-0b01 NSM
-0b02 0b03 L
-0b05 0b0c L
-0b0f 0b10 L
-0b13 0b28 L
-0b2a 0b30 L
-0b32 0b33 L
-0b36 0b39 L
-0b3c NSM
-0b3d 0b3e L
-0b3f NSM
-0b40 L
-0b41 0b43 NSM
-0b47 0b48 L
-0b4b 0b4c L
-0b4d NSM
-0b56 NSM
-0b57 L
-0b5c 0b5d L
-0b5f 0b61 L
-0b66 0b70 L
-0b82 NSM
-0b83 L
-0b85 0b8a L
-0b8e 0b90 L
-0b92 0b95 L
-0b99 0b9a L
-0b9c L
-0b9e 0b9f L
-0ba3 0ba4 L
-0ba8 0baa L
-0bae 0bb5 L
-0bb7 0bb9 L
-0bbe 0bbf L
-0bc0 NSM
-0bc1 0bc2 L
-0bc6 0bc8 L
-0bca 0bcc L
-0bcd NSM
-0bd7 L
-0be7 0bf2 L
-0c01 0c03 L
-0c05 0c0c L
-0c0e 0c10 L
-0c12 0c28 L
-0c2a 0c33 L
-0c35 0c39 L
-0c3e 0c40 NSM
-0c41 0c44 L
-0c46 0c48 NSM
-0c4a 0c4d NSM
-0c55 0c56 NSM
-0c60 0c61 L
-0c66 0c6f L
-0c82 0c83 L
-0c85 0c8c L
-0c8e 0c90 L
-0c92 0ca8 L
-0caa 0cb3 L
-0cb5 0cb9 L
-0cbe L
-0cbf NSM
-0cc0 0cc4 L
-0cc6 NSM
-0cc7 0cc8 L
-0cca 0ccb L
-0ccc 0ccd NSM
-0cd5 0cd6 L
-0cde L
-0ce0 0ce1 L
-0ce6 0cef L
-0d02 0d03 L
-0d05 0d0c L
-0d0e 0d10 L
-0d12 0d28 L
-0d2a 0d39 L
-0d3e 0d40 L
-0d41 0d43 NSM
-0d46 0d48 L
-0d4a 0d4c L
-0d4d NSM
-0d57 L
-0d60 0d61 L
-0d66 0d6f L
-0d82 0d83 L
-0d85 0d96 L
-0d9a 0db1 L
-0db3 0dbb L
-0dbd L
-0dc0 0dc6 L
-0dca NSM
-0dcf 0dd1 L
-0dd2 0dd4 NSM
-0dd6 NSM
-0dd8 0ddf L
-0df2 0df4 L
-0e01 0e30 L
-0e31 NSM
-0e32 0e33 L
-0e34 0e3a NSM
-0e3f ET
-0e40 0e46 L
-0e47 0e4e NSM
-0e4f 0e5b L
-0e81 0e82 L
-0e84 L
-0e87 0e88 L
-0e8a L
-0e8d L
-0e94 0e97 L
-0e99 0e9f L
-0ea1 0ea3 L
-0ea5 L
-0ea7 L
-0eaa 0eab L
-0ead 0eb0 L
-0eb1 NSM
-0eb2 0eb3 L
-0eb4 0eb9 NSM
-0ebb 0ebc NSM
-0ebd L
-0ec0 0ec4 L
-0ec6 L
-0ec8 0ecd NSM
-0ed0 0ed9 L
-0edc 0edd L
-0f00 0f17 L
-0f18 0f19 NSM
-0f1a 0f34 L
-0f35 NSM
-0f36 L
-0f37 NSM
-0f38 L
-0f39 NSM
-0f3a 0f3d ON
-0f3e 0f47 L
-0f49 0f6a L
-0f71 0f7e NSM
-0f7f L
-0f80 0f84 NSM
-0f85 L
-0f86 0f87 NSM
-0f88 0f8b L
-0f90 0f97 NSM
-0f99 0fbc NSM
-0fbe 0fc5 L
-0fc6 NSM
-0fc7 0fcc L
-0fcf L
-1000 1021 L
-1023 1027 L
-1029 102a L
-102c L
-102d 1030 NSM
-1031 L
-1032 NSM
-1036 1037 NSM
-1038 L
-1039 NSM
-1040 1057 L
-1058 1059 NSM
-10a0 10c5 L
-10d0 10f6 L
-10fb L
-1100 1159 L
-115f 11a2 L
-11a8 11f9 L
-1200 1206 L
-1208 1246 L
-1248 L
-124a 124d L
-1250 1256 L
-1258 L
-125a 125d L
-1260 1286 L
-1288 L
-128a 128d L
-1290 12ae L
-12b0 L
-12b2 12b5 L
-12b8 12be L
-12c0 L
-12c2 12c5 L
-12c8 12ce L
-12d0 12d6 L
-12d8 12ee L
-12f0 130e L
-1310 L
-1312 1315 L
-1318 131e L
-1320 1346 L
-1348 135a L
-1361 137c L
-13a0 13f4 L
-1401 1676 L
-1680 WS
-1681 169a L
-169b 169c ON
-16a0 16f0 L
-1780 17b6 L
-17b7 17bd NSM
-17be 17c5 L
-17c6 NSM
-17c7 17c8 L
-17c9 17d3 NSM
-17d4 17da L
-17db ET
-17dc L
-17e0 17e9 L
-1800 180a ON
-180b 180e BN
-1810 1819 L
-1820 1877 L
-1880 18a8 L
-18a9 NSM
-1e00 1e9b L
-1ea0 1ef9 L
-1f00 1f15 L
-1f18 1f1d L
-1f20 1f45 L
-1f48 1f4d L
-1f50 1f57 L
-1f59 L
-1f5b L
-1f5d L
-1f5f 1f7d L
-1f80 1fb4 L
-1fb6 1fbc L
-1fbd ON
-1fbe L
-1fbf 1fc1 ON
-1fc2 1fc4 L
-1fc6 1fcc L
-1fcd 1fcf ON
-1fd0 1fd3 L
-1fd6 1fdb L
-1fdd 1fdf ON
-1fe0 1fec L
-1fed 1fef ON
-1ff2 1ff4 L
-1ff6 1ffc L
-1ffd 1ffe ON
-2000 200a WS
-200b 200d BN
-200e L
-200f R
-2010 2027 ON
-2028 WS
-2029 B
-202a LRE
-202b RLE
-202c PDF
-202d LRO
-202e RLO
-202f WS
-2030 2034 ET
-2035 2046 ON
-2048 204d ON
-206a 206f BN
-2070 EN
-2074 2079 EN
-207a 207b ET
-207c 207e ON
-207f L
-2080 2089 EN
-208a 208b ET
-208c 208e ON
-20a0 20af ET
-20d0 20e3 NSM
-2100 2101 ON
-2102 L
-2103 2106 ON
-2107 L
-2108 2109 ON
-210a 2113 L
-2114 ON
-2115 L
-2116 2118 ON
-2119 211d L
-211e 2123 ON
-2124 L
-2125 ON
-2126 L
-2127 ON
-2128 L
-2129 ON
-212a 212d L
-212e ET
-212f 2131 L
-2132 ON
-2133 2139 L
-213a ON
-2153 215f ON
-2160 2183 L
-2190 21f3 ON
-2200 2211 ON
-2212 2213 ET
-2214 22f1 ON
-2300 2335 ON
-2336 237a L
-237b ON
-237d 2394 ON
-2395 L
-2396 239a ON
-2400 2426 ON
-2440 244a ON
-2460 249b EN
-249c 24e9 L
-24ea EN
-2500 2595 ON
-25a0 25f7 ON
-2600 2613 ON
-2619 2671 ON
-2701 2704 ON
-2706 2709 ON
-270c 2727 ON
-2729 274b ON
-274d ON
-274f 2752 ON
-2756 ON
-2758 275e ON
-2761 2767 ON
-2776 2794 ON
-2798 27af ON
-27b1 27be ON
-2800 28ff ON
-2e80 2e99 ON
-2e9b 2ef3 ON
-2f00 2fd5 ON
-2ff0 2ffb ON
-3000 WS
-3001 3004 ON
-3005 3007 L
-3008 3020 ON
-3021 3029 L
-302a 302f NSM
-3030 ON
-3031 3035 L
-3036 3037 ON
-3038 303a L
-303e 303f ON
-3041 3094 L
-3099 309a NSM
-309b 309c ON
-309d 309e L
-30a1 30fa L
-30fb ON
-30fc 30fe L
-3105 312c L
-3131 318e L
-3190 31b7 L
-3200 321c L
-3220 3243 L
-3260 327b L
-327f 32b0 L
-32c0 32cb L
-32d0 32fe L
-3300 3376 L
-337b 33dd L
-33e0 33fe L
-3400 4db5 L
-4e00 9fa5 L
-a000 a48c L
-a490 a4a1 ON
-a4a4 a4b3 ON
-a4b5 a4c0 ON
-a4c2 a4c4 ON
-a4c6 ON
-ac00 d7a3 L
-d800 db7f L
-db80 dbff L
-dc00 dfff L
-e000 f8ff L
-f900 fa2d L
-fb00 fb06 L
-fb13 fb17 L
-fb1d R
-fb1e NSM
-fb1f fb28 R
-fb29 ET
-fb2a fb36 R
-fb38 fb3c R
-fb3e R
-fb40 fb41 R
-fb43 fb44 R
-fb46 fb4f R
-fb50 fbb1 AL
-fbd3 fd3d AL
-fd3e fd3f ON
-fd50 fd8f AL
-fd92 fdc7 AL
-fdf0 fdfb AL
-fe20 fe23 NSM
-fe30 fe44 ON
-fe49 fe4f ON
-fe50 CS
-fe51 ON
-fe52 CS
-fe54 ON
-fe55 CS
-fe56 fe5e ON
-fe5f ET
-fe60 fe61 ON
-fe62 fe63 ET
-fe64 fe66 ON
-fe68 ON
-fe69 fe6a ET
-fe6b ON
-fe70 fe72 AL
-fe74 AL
-fe76 fefc AL
-feff BN
-ff01 ff02 ON
-ff03 ff05 ET
-ff06 ff0a ON
-ff0b ET
-ff0c CS
-ff0d ET
-ff0e CS
-ff0f ES
-ff10 ff19 EN
-ff1a CS
-ff1b ff20 ON
-ff21 ff3a L
-ff3b ff40 ON
-ff41 ff5a L
-ff5b ff5e ON
-ff61 ff65 ON
-ff66 ffbe L
-ffc2 ffc7 L
-ffca ffcf L
-ffd2 ffd7 L
-ffda ffdc L
-ffe0 ffe1 ET
-ffe2 ffe4 ON
-ffe5 ffe6 ET
-ffe8 ffee ON
-fff9 fffb BN
-fffc fffd ON
-f0000 ffffd L
-100000 10fffd L
-END
diff --git a/contrib/perl5/lib/unicode/Block.pl b/contrib/perl5/lib/unicode/Block.pl
deleted file mode 100644
index 2b5bfce..0000000
--- a/contrib/perl5/lib/unicode/Block.pl
+++ /dev/null
@@ -1,93 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 007F Basic Latin
-0080 00FF Latin-1 Supplement
-0100 017F Latin Extended-A
-0180 024F Latin Extended-B
-0250 02AF IPA Extensions
-02B0 02FF Spacing Modifier Letters
-0300 036F Combining Diacritical Marks
-0370 03FF Greek
-0400 04FF Cyrillic
-0530 058F Armenian
-0590 05FF Hebrew
-0600 06FF Arabic
-0700 074F Syriac
-0780 07BF Thaana
-0900 097F Devanagari
-0980 09FF Bengali
-0A00 0A7F Gurmukhi
-0A80 0AFF Gujarati
-0B00 0B7F Oriya
-0B80 0BFF Tamil
-0C00 0C7F Telugu
-0C80 0CFF Kannada
-0D00 0D7F Malayalam
-0D80 0DFF Sinhala
-0E00 0E7F Thai
-0E80 0EFF Lao
-0F00 0FFF Tibetan
-1000 109F Myanmar
-10A0 10FF Georgian
-1100 11FF Hangul Jamo
-1200 137F Ethiopic
-13A0 13FF Cherokee
-1400 167F Unified Canadian Aboriginal Syllabics
-1680 169F Ogham
-16A0 16FF Runic
-1780 17FF Khmer
-1800 18AF Mongolian
-1E00 1EFF Latin Extended Additional
-1F00 1FFF Greek Extended
-2000 206F General Punctuation
-2070 209F Superscripts and Subscripts
-20A0 20CF Currency Symbols
-20D0 20FF Combining Marks for Symbols
-2100 214F Letterlike Symbols
-2150 218F Number Forms
-2190 21FF Arrows
-2200 22FF Mathematical Operators
-2300 23FF Miscellaneous Technical
-2400 243F Control Pictures
-2440 245F Optical Character Recognition
-2460 24FF Enclosed Alphanumerics
-2500 257F Box Drawing
-2580 259F Block Elements
-25A0 25FF Geometric Shapes
-2600 26FF Miscellaneous Symbols
-2700 27BF Dingbats
-2800 28FF Braille Patterns
-2E80 2EFF CJK Radicals Supplement
-2F00 2FDF Kangxi Radicals
-2FF0 2FFF Ideographic Description Characters
-3000 303F CJK Symbols and Punctuation
-3040 309F Hiragana
-30A0 30FF Katakana
-3100 312F Bopomofo
-3130 318F Hangul Compatibility Jamo
-3190 319F Kanbun
-31A0 31BF Bopomofo Extended
-3200 32FF Enclosed CJK Letters and Months
-3300 33FF CJK Compatibility
-3400 4DB5 CJK Unified Ideographs Extension A
-4E00 9FFF CJK Unified Ideographs
-A000 A48F Yi Syllables
-A490 A4CF Yi Radicals
-AC00 D7A3 Hangul Syllables
-D800 DB7F High Surrogates
-DB80 DBFF High Private Use Surrogates
-DC00 DFFF Low Surrogates
-E000 F8FF Private Use
-F900 FAFF CJK Compatibility Ideographs
-FB00 FB4F Alphabetic Presentation Forms
-FB50 FDFF Arabic Presentation Forms-A
-FE20 FE2F Combining Half Marks
-FE30 FE4F CJK Compatibility Forms
-FE50 FE6F Small Form Variants
-FE70 FEFE Arabic Presentation Forms-B
-FEFF FEFF Specials
-FF00 FFEF Halfwidth and Fullwidth Forms
-FFF0 FFFD Specials
-END
diff --git a/contrib/perl5/lib/unicode/Blocks.txt b/contrib/perl5/lib/unicode/Blocks.txt
deleted file mode 100644
index 15c8957..0000000
--- a/contrib/perl5/lib/unicode/Blocks.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-# Start Code; End Code; Block Name
-0000; 007F; Basic Latin
-0080; 00FF; Latin-1 Supplement
-0100; 017F; Latin Extended-A
-0180; 024F; Latin Extended-B
-0250; 02AF; IPA Extensions
-02B0; 02FF; Spacing Modifier Letters
-0300; 036F; Combining Diacritical Marks
-0370; 03FF; Greek
-0400; 04FF; Cyrillic
-0530; 058F; Armenian
-0590; 05FF; Hebrew
-0600; 06FF; Arabic
-0700; 074F; Syriac
-0780; 07BF; Thaana
-0900; 097F; Devanagari
-0980; 09FF; Bengali
-0A00; 0A7F; Gurmukhi
-0A80; 0AFF; Gujarati
-0B00; 0B7F; Oriya
-0B80; 0BFF; Tamil
-0C00; 0C7F; Telugu
-0C80; 0CFF; Kannada
-0D00; 0D7F; Malayalam
-0D80; 0DFF; Sinhala
-0E00; 0E7F; Thai
-0E80; 0EFF; Lao
-0F00; 0FFF; Tibetan
-1000; 109F; Myanmar
-10A0; 10FF; Georgian
-1100; 11FF; Hangul Jamo
-1200; 137F; Ethiopic
-13A0; 13FF; Cherokee
-1400; 167F; Unified Canadian Aboriginal Syllabics
-1680; 169F; Ogham
-16A0; 16FF; Runic
-1780; 17FF; Khmer
-1800; 18AF; Mongolian
-1E00; 1EFF; Latin Extended Additional
-1F00; 1FFF; Greek Extended
-2000; 206F; General Punctuation
-2070; 209F; Superscripts and Subscripts
-20A0; 20CF; Currency Symbols
-20D0; 20FF; Combining Marks for Symbols
-2100; 214F; Letterlike Symbols
-2150; 218F; Number Forms
-2190; 21FF; Arrows
-2200; 22FF; Mathematical Operators
-2300; 23FF; Miscellaneous Technical
-2400; 243F; Control Pictures
-2440; 245F; Optical Character Recognition
-2460; 24FF; Enclosed Alphanumerics
-2500; 257F; Box Drawing
-2580; 259F; Block Elements
-25A0; 25FF; Geometric Shapes
-2600; 26FF; Miscellaneous Symbols
-2700; 27BF; Dingbats
-2800; 28FF; Braille Patterns
-2E80; 2EFF; CJK Radicals Supplement
-2F00; 2FDF; Kangxi Radicals
-2FF0; 2FFF; Ideographic Description Characters
-3000; 303F; CJK Symbols and Punctuation
-3040; 309F; Hiragana
-30A0; 30FF; Katakana
-3100; 312F; Bopomofo
-3130; 318F; Hangul Compatibility Jamo
-3190; 319F; Kanbun
-31A0; 31BF; Bopomofo Extended
-3200; 32FF; Enclosed CJK Letters and Months
-3300; 33FF; CJK Compatibility
-3400; 4DB5; CJK Unified Ideographs Extension A
-4E00; 9FFF; CJK Unified Ideographs
-A000; A48F; Yi Syllables
-A490; A4CF; Yi Radicals
-AC00; D7A3; Hangul Syllables
-D800; DB7F; High Surrogates
-DB80; DBFF; High Private Use Surrogates
-DC00; DFFF; Low Surrogates
-E000; F8FF; Private Use
-F900; FAFF; CJK Compatibility Ideographs
-FB00; FB4F; Alphabetic Presentation Forms
-FB50; FDFF; Arabic Presentation Forms-A
-FE20; FE2F; Combining Half Marks
-FE30; FE4F; CJK Compatibility Forms
-FE50; FE6F; Small Form Variants
-FE70; FEFE; Arabic Presentation Forms-B
-FEFF; FEFF; Specials
-FF00; FFEF; Halfwidth and Fullwidth Forms
-FFF0; FFFD; Specials
-
diff --git a/contrib/perl5/lib/unicode/CaseFold.txt b/contrib/perl5/lib/unicode/CaseFold.txt
deleted file mode 100644
index 6529c41..0000000
--- a/contrib/perl5/lib/unicode/CaseFold.txt
+++ /dev/null
@@ -1,821 +0,0 @@
-# CaseFolding-2.txt
-#
-# Case Folding Properties
-#
-# This file is a supplement to the UnicodeData file.
-# It provides a case folding mapping generated from the Unicode Character Database.
-# If all characters are mapped according to this mapping, then
-# case differences (according to UnicodeData.txt and SpecialCasing.txt)
-# are eliminated.
-#
-# For information on case folding, see
-# UTR #21 Case Mappings, at http://www.unicode.org/unicode/reports/tr21/
-#
-# These are informative character properties.
-#
-# Send comments to mark@unicode.org
-#
-# ================================================================================
-# Format
-# ================================================================================
-# The entries in this file are in the following machine-readable format:
-#
-# <code>; <status>; <mapping>; # <name>
-#
-# The status is:
-# L (for Lowercase) if the case mapping matches the standard 1-1 lowercase mapping
-# E (for exception) if it does not.
-#
-# The mapping may consist of multiple characters.
-# If so, they are separated by spaces.
-#
-# =================================================================
-
-0041; L; 0061; #LATIN CAPITAL LETTER A
-0042; L; 0062; #LATIN CAPITAL LETTER B
-0043; L; 0063; #LATIN CAPITAL LETTER C
-0044; L; 0064; #LATIN CAPITAL LETTER D
-0045; L; 0065; #LATIN CAPITAL LETTER E
-0046; L; 0066; #LATIN CAPITAL LETTER F
-0047; L; 0067; #LATIN CAPITAL LETTER G
-0048; L; 0068; #LATIN CAPITAL LETTER H
-0049; L; 0069; #LATIN CAPITAL LETTER I
-004A; L; 006A; #LATIN CAPITAL LETTER J
-004B; L; 006B; #LATIN CAPITAL LETTER K
-004C; L; 006C; #LATIN CAPITAL LETTER L
-004D; L; 006D; #LATIN CAPITAL LETTER M
-004E; L; 006E; #LATIN CAPITAL LETTER N
-004F; L; 006F; #LATIN CAPITAL LETTER O
-0050; L; 0070; #LATIN CAPITAL LETTER P
-0051; L; 0071; #LATIN CAPITAL LETTER Q
-0052; L; 0072; #LATIN CAPITAL LETTER R
-0053; L; 0073; #LATIN CAPITAL LETTER S
-0054; L; 0074; #LATIN CAPITAL LETTER T
-0055; L; 0075; #LATIN CAPITAL LETTER U
-0056; L; 0076; #LATIN CAPITAL LETTER V
-0057; L; 0077; #LATIN CAPITAL LETTER W
-0058; L; 0078; #LATIN CAPITAL LETTER X
-0059; L; 0079; #LATIN CAPITAL LETTER Y
-005A; L; 007A; #LATIN CAPITAL LETTER Z
-00B5; E; 03BC; #MICRO SIGN
-00C0; L; 00E0; #LATIN CAPITAL LETTER A WITH GRAVE
-00C1; L; 00E1; #LATIN CAPITAL LETTER A WITH ACUTE
-00C2; L; 00E2; #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C3; L; 00E3; #LATIN CAPITAL LETTER A WITH TILDE
-00C4; L; 00E4; #LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5; L; 00E5; #LATIN CAPITAL LETTER A WITH RING ABOVE
-00C6; L; 00E6; #LATIN CAPITAL LETTER AE
-00C7; L; 00E7; #LATIN CAPITAL LETTER C WITH CEDILLA
-00C8; L; 00E8; #LATIN CAPITAL LETTER E WITH GRAVE
-00C9; L; 00E9; #LATIN CAPITAL LETTER E WITH ACUTE
-00CA; L; 00EA; #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CB; L; 00EB; #LATIN CAPITAL LETTER E WITH DIAERESIS
-00CC; L; 00EC; #LATIN CAPITAL LETTER I WITH GRAVE
-00CD; L; 00ED; #LATIN CAPITAL LETTER I WITH ACUTE
-00CE; L; 00EE; #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00CF; L; 00EF; #LATIN CAPITAL LETTER I WITH DIAERESIS
-00D0; L; 00F0; #LATIN CAPITAL LETTER ETH
-00D1; L; 00F1; #LATIN CAPITAL LETTER N WITH TILDE
-00D2; L; 00F2; #LATIN CAPITAL LETTER O WITH GRAVE
-00D3; L; 00F3; #LATIN CAPITAL LETTER O WITH ACUTE
-00D4; L; 00F4; #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00D5; L; 00F5; #LATIN CAPITAL LETTER O WITH TILDE
-00D6; L; 00F6; #LATIN CAPITAL LETTER O WITH DIAERESIS
-00D8; L; 00F8; #LATIN CAPITAL LETTER O WITH STROKE
-00D9; L; 00F9; #LATIN CAPITAL LETTER U WITH GRAVE
-00DA; L; 00FA; #LATIN CAPITAL LETTER U WITH ACUTE
-00DB; L; 00FB; #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00DC; L; 00FC; #LATIN CAPITAL LETTER U WITH DIAERESIS
-00DD; L; 00FD; #LATIN CAPITAL LETTER Y WITH ACUTE
-00DE; L; 00FE; #LATIN CAPITAL LETTER THORN
-00DF; E; 0073 0073; #LATIN SMALL LETTER SHARP S
-0100; L; 0101; #LATIN CAPITAL LETTER A WITH MACRON
-0102; L; 0103; #LATIN CAPITAL LETTER A WITH BREVE
-0104; L; 0105; #LATIN CAPITAL LETTER A WITH OGONEK
-0106; L; 0107; #LATIN CAPITAL LETTER C WITH ACUTE
-0108; L; 0109; #LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-010A; L; 010B; #LATIN CAPITAL LETTER C WITH DOT ABOVE
-010C; L; 010D; #LATIN CAPITAL LETTER C WITH CARON
-010E; L; 010F; #LATIN CAPITAL LETTER D WITH CARON
-0110; L; 0111; #LATIN CAPITAL LETTER D WITH STROKE
-0112; L; 0113; #LATIN CAPITAL LETTER E WITH MACRON
-0114; L; 0115; #LATIN CAPITAL LETTER E WITH BREVE
-0116; L; 0117; #LATIN CAPITAL LETTER E WITH DOT ABOVE
-0118; L; 0119; #LATIN CAPITAL LETTER E WITH OGONEK
-011A; L; 011B; #LATIN CAPITAL LETTER E WITH CARON
-011C; L; 011D; #LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-011E; L; 011F; #LATIN CAPITAL LETTER G WITH BREVE
-0120; L; 0121; #LATIN CAPITAL LETTER G WITH DOT ABOVE
-0122; L; 0123; #LATIN CAPITAL LETTER G WITH CEDILLA
-0124; L; 0125; #LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-0126; L; 0127; #LATIN CAPITAL LETTER H WITH STROKE
-0128; L; 0129; #LATIN CAPITAL LETTER I WITH TILDE
-012A; L; 012B; #LATIN CAPITAL LETTER I WITH MACRON
-012C; L; 012D; #LATIN CAPITAL LETTER I WITH BREVE
-012E; L; 012F; #LATIN CAPITAL LETTER I WITH OGONEK
-0130; L; 0069; #LATIN CAPITAL LETTER I WITH DOT ABOVE
-0131; E; 0069; #LATIN SMALL LETTER DOTLESS I
-0132; L; 0133; #LATIN CAPITAL LIGATURE IJ
-0134; L; 0135; #LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-0136; L; 0137; #LATIN CAPITAL LETTER K WITH CEDILLA
-0139; L; 013A; #LATIN CAPITAL LETTER L WITH ACUTE
-013B; L; 013C; #LATIN CAPITAL LETTER L WITH CEDILLA
-013D; L; 013E; #LATIN CAPITAL LETTER L WITH CARON
-013F; L; 0140; #LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0141; L; 0142; #LATIN CAPITAL LETTER L WITH STROKE
-0143; L; 0144; #LATIN CAPITAL LETTER N WITH ACUTE
-0145; L; 0146; #LATIN CAPITAL LETTER N WITH CEDILLA
-0147; L; 0148; #LATIN CAPITAL LETTER N WITH CARON
-0149; E; 02BC 006E; #LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-014A; L; 014B; #LATIN CAPITAL LETTER ENG
-014C; L; 014D; #LATIN CAPITAL LETTER O WITH MACRON
-014E; L; 014F; #LATIN CAPITAL LETTER O WITH BREVE
-0150; L; 0151; #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0152; L; 0153; #LATIN CAPITAL LIGATURE OE
-0154; L; 0155; #LATIN CAPITAL LETTER R WITH ACUTE
-0156; L; 0157; #LATIN CAPITAL LETTER R WITH CEDILLA
-0158; L; 0159; #LATIN CAPITAL LETTER R WITH CARON
-015A; L; 015B; #LATIN CAPITAL LETTER S WITH ACUTE
-015C; L; 015D; #LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-015E; L; 015F; #LATIN CAPITAL LETTER S WITH CEDILLA
-0160; L; 0161; #LATIN CAPITAL LETTER S WITH CARON
-0162; L; 0163; #LATIN CAPITAL LETTER T WITH CEDILLA
-0164; L; 0165; #LATIN CAPITAL LETTER T WITH CARON
-0166; L; 0167; #LATIN CAPITAL LETTER T WITH STROKE
-0168; L; 0169; #LATIN CAPITAL LETTER U WITH TILDE
-016A; L; 016B; #LATIN CAPITAL LETTER U WITH MACRON
-016C; L; 016D; #LATIN CAPITAL LETTER U WITH BREVE
-016E; L; 016F; #LATIN CAPITAL LETTER U WITH RING ABOVE
-0170; L; 0171; #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0172; L; 0173; #LATIN CAPITAL LETTER U WITH OGONEK
-0174; L; 0175; #LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0176; L; 0177; #LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0178; L; 00FF; #LATIN CAPITAL LETTER Y WITH DIAERESIS
-0179; L; 017A; #LATIN CAPITAL LETTER Z WITH ACUTE
-017B; L; 017C; #LATIN CAPITAL LETTER Z WITH DOT ABOVE
-017D; L; 017E; #LATIN CAPITAL LETTER Z WITH CARON
-017F; E; 0073; #LATIN SMALL LETTER LONG S
-0181; L; 0253; #LATIN CAPITAL LETTER B WITH HOOK
-0182; L; 0183; #LATIN CAPITAL LETTER B WITH TOPBAR
-0184; L; 0185; #LATIN CAPITAL LETTER TONE SIX
-0186; L; 0254; #LATIN CAPITAL LETTER OPEN O
-0187; L; 0188; #LATIN CAPITAL LETTER C WITH HOOK
-0189; L; 0256; #LATIN CAPITAL LETTER AFRICAN D
-018A; L; 0257; #LATIN CAPITAL LETTER D WITH HOOK
-018B; L; 018C; #LATIN CAPITAL LETTER D WITH TOPBAR
-018E; L; 01DD; #LATIN CAPITAL LETTER REVERSED E
-018F; L; 0259; #LATIN CAPITAL LETTER SCHWA
-0190; L; 025B; #LATIN CAPITAL LETTER OPEN E
-0191; L; 0192; #LATIN CAPITAL LETTER F WITH HOOK
-0193; L; 0260; #LATIN CAPITAL LETTER G WITH HOOK
-0194; L; 0263; #LATIN CAPITAL LETTER GAMMA
-0196; L; 0269; #LATIN CAPITAL LETTER IOTA
-0197; L; 0268; #LATIN CAPITAL LETTER I WITH STROKE
-0198; L; 0199; #LATIN CAPITAL LETTER K WITH HOOK
-019C; L; 026F; #LATIN CAPITAL LETTER TURNED M
-019D; L; 0272; #LATIN CAPITAL LETTER N WITH LEFT HOOK
-019F; L; 0275; #LATIN CAPITAL LETTER O WITH MIDDLE TILDE
-01A0; L; 01A1; #LATIN CAPITAL LETTER O WITH HORN
-01A2; L; 01A3; #LATIN CAPITAL LETTER OI
-01A4; L; 01A5; #LATIN CAPITAL LETTER P WITH HOOK
-01A6; L; 0280; #LATIN LETTER YR
-01A7; L; 01A8; #LATIN CAPITAL LETTER TONE TWO
-01A9; L; 0283; #LATIN CAPITAL LETTER ESH
-01AC; L; 01AD; #LATIN CAPITAL LETTER T WITH HOOK
-01AE; L; 0288; #LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
-01AF; L; 01B0; #LATIN CAPITAL LETTER U WITH HORN
-01B1; L; 028A; #LATIN CAPITAL LETTER UPSILON
-01B2; L; 028B; #LATIN CAPITAL LETTER V WITH HOOK
-01B3; L; 01B4; #LATIN CAPITAL LETTER Y WITH HOOK
-01B5; L; 01B6; #LATIN CAPITAL LETTER Z WITH STROKE
-01B7; L; 0292; #LATIN CAPITAL LETTER EZH
-01B8; L; 01B9; #LATIN CAPITAL LETTER EZH REVERSED
-01BC; L; 01BD; #LATIN CAPITAL LETTER TONE FIVE
-01C4; L; 01C6; #LATIN CAPITAL LETTER DZ WITH CARON
-01C5; L; 01C6; #LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-01C7; L; 01C9; #LATIN CAPITAL LETTER LJ
-01C8; L; 01C9; #LATIN CAPITAL LETTER L WITH SMALL LETTER J
-01CA; L; 01CC; #LATIN CAPITAL LETTER NJ
-01CB; L; 01CC; #LATIN CAPITAL LETTER N WITH SMALL LETTER J
-01CD; L; 01CE; #LATIN CAPITAL LETTER A WITH CARON
-01CF; L; 01D0; #LATIN CAPITAL LETTER I WITH CARON
-01D1; L; 01D2; #LATIN CAPITAL LETTER O WITH CARON
-01D3; L; 01D4; #LATIN CAPITAL LETTER U WITH CARON
-01D5; L; 01D6; #LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-01D7; L; 01D8; #LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-01D9; L; 01DA; #LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-01DB; L; 01DC; #LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-01DE; L; 01DF; #LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-01E0; L; 01E1; #LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-01E2; L; 01E3; #LATIN CAPITAL LETTER AE WITH MACRON
-01E4; L; 01E5; #LATIN CAPITAL LETTER G WITH STROKE
-01E6; L; 01E7; #LATIN CAPITAL LETTER G WITH CARON
-01E8; L; 01E9; #LATIN CAPITAL LETTER K WITH CARON
-01EA; L; 01EB; #LATIN CAPITAL LETTER O WITH OGONEK
-01EC; L; 01ED; #LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-01EE; L; 01EF; #LATIN CAPITAL LETTER EZH WITH CARON
-01F0; E; 006A 030C; #LATIN SMALL LETTER J WITH CARON
-01F1; L; 01F3; #LATIN CAPITAL LETTER DZ
-01F2; L; 01F3; #LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-01F4; L; 01F5; #LATIN CAPITAL LETTER G WITH ACUTE
-01F6; L; 0195; #LATIN CAPITAL LETTER HWAIR
-01F7; L; 01BF; #LATIN CAPITAL LETTER WYNN
-01F8; L; 01F9; #LATIN CAPITAL LETTER N WITH GRAVE
-01FA; L; 01FB; #LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-01FC; L; 01FD; #LATIN CAPITAL LETTER AE WITH ACUTE
-01FE; L; 01FF; #LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-0200; L; 0201; #LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
-0202; L; 0203; #LATIN CAPITAL LETTER A WITH INVERTED BREVE
-0204; L; 0205; #LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
-0206; L; 0207; #LATIN CAPITAL LETTER E WITH INVERTED BREVE
-0208; L; 0209; #LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
-020A; L; 020B; #LATIN CAPITAL LETTER I WITH INVERTED BREVE
-020C; L; 020D; #LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
-020E; L; 020F; #LATIN CAPITAL LETTER O WITH INVERTED BREVE
-0210; L; 0211; #LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
-0212; L; 0213; #LATIN CAPITAL LETTER R WITH INVERTED BREVE
-0214; L; 0215; #LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
-0216; L; 0217; #LATIN CAPITAL LETTER U WITH INVERTED BREVE
-0218; L; 0219; #LATIN CAPITAL LETTER S WITH COMMA BELOW
-021A; L; 021B; #LATIN CAPITAL LETTER T WITH COMMA BELOW
-021C; L; 021D; #LATIN CAPITAL LETTER YOGH
-021E; L; 021F; #LATIN CAPITAL LETTER H WITH CARON
-0222; L; 0223; #LATIN CAPITAL LETTER OU
-0224; L; 0225; #LATIN CAPITAL LETTER Z WITH HOOK
-0226; L; 0227; #LATIN CAPITAL LETTER A WITH DOT ABOVE
-0228; L; 0229; #LATIN CAPITAL LETTER E WITH CEDILLA
-022A; L; 022B; #LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
-022C; L; 022D; #LATIN CAPITAL LETTER O WITH TILDE AND MACRON
-022E; L; 022F; #LATIN CAPITAL LETTER O WITH DOT ABOVE
-0230; L; 0231; #LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
-0232; L; 0233; #LATIN CAPITAL LETTER Y WITH MACRON
-0345; E; 03B9; #COMBINING GREEK YPOGEGRAMMENI
-0386; L; 03AC; #GREEK CAPITAL LETTER ALPHA WITH TONOS
-0388; L; 03AD; #GREEK CAPITAL LETTER EPSILON WITH TONOS
-0389; L; 03AE; #GREEK CAPITAL LETTER ETA WITH TONOS
-038A; L; 03AF; #GREEK CAPITAL LETTER IOTA WITH TONOS
-038C; L; 03CC; #GREEK CAPITAL LETTER OMICRON WITH TONOS
-038E; L; 03CD; #GREEK CAPITAL LETTER UPSILON WITH TONOS
-038F; L; 03CE; #GREEK CAPITAL LETTER OMEGA WITH TONOS
-0390; E; 03B9 0308 0301; #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-0391; L; 03B1; #GREEK CAPITAL LETTER ALPHA
-0392; L; 03B2; #GREEK CAPITAL LETTER BETA
-0393; L; 03B3; #GREEK CAPITAL LETTER GAMMA
-0394; L; 03B4; #GREEK CAPITAL LETTER DELTA
-0395; L; 03B5; #GREEK CAPITAL LETTER EPSILON
-0396; L; 03B6; #GREEK CAPITAL LETTER ZETA
-0397; L; 03B7; #GREEK CAPITAL LETTER ETA
-0398; L; 03B8; #GREEK CAPITAL LETTER THETA
-0399; L; 03B9; #GREEK CAPITAL LETTER IOTA
-039A; L; 03BA; #GREEK CAPITAL LETTER KAPPA
-039B; L; 03BB; #GREEK CAPITAL LETTER LAMDA
-039C; L; 03BC; #GREEK CAPITAL LETTER MU
-039D; L; 03BD; #GREEK CAPITAL LETTER NU
-039E; L; 03BE; #GREEK CAPITAL LETTER XI
-039F; L; 03BF; #GREEK CAPITAL LETTER OMICRON
-03A0; L; 03C0; #GREEK CAPITAL LETTER PI
-03A1; L; 03C1; #GREEK CAPITAL LETTER RHO
-03A3; E; 03C2; #GREEK CAPITAL LETTER SIGMA
-03A4; L; 03C4; #GREEK CAPITAL LETTER TAU
-03A5; L; 03C5; #GREEK CAPITAL LETTER UPSILON
-03A6; L; 03C6; #GREEK CAPITAL LETTER PHI
-03A7; L; 03C7; #GREEK CAPITAL LETTER CHI
-03A8; L; 03C8; #GREEK CAPITAL LETTER PSI
-03A9; L; 03C9; #GREEK CAPITAL LETTER OMEGA
-03AA; L; 03CA; #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-03AB; L; 03CB; #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-03B0; E; 03C5 0308 0301; #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-03C2; L; 03C2; #GREEK SMALL LETTER FINAL SIGMA
-03C3; E; 03C2; #GREEK SMALL LETTER SIGMA
-03D0; E; 03B2; #GREEK BETA SYMBOL
-03D1; E; 03B8; #GREEK THETA SYMBOL
-03D5; E; 03C6; #GREEK PHI SYMBOL
-03D6; E; 03C0; #GREEK PI SYMBOL
-03DA; L; 03DB; #GREEK LETTER STIGMA
-03DC; L; 03DD; #GREEK LETTER DIGAMMA
-03DE; L; 03DF; #GREEK LETTER KOPPA
-03E0; L; 03E1; #GREEK LETTER SAMPI
-03E2; L; 03E3; #COPTIC CAPITAL LETTER SHEI
-03E4; L; 03E5; #COPTIC CAPITAL LETTER FEI
-03E6; L; 03E7; #COPTIC CAPITAL LETTER KHEI
-03E8; L; 03E9; #COPTIC CAPITAL LETTER HORI
-03EA; L; 03EB; #COPTIC CAPITAL LETTER GANGIA
-03EC; L; 03ED; #COPTIC CAPITAL LETTER SHIMA
-03EE; L; 03EF; #COPTIC CAPITAL LETTER DEI
-03F0; E; 03BA; #GREEK KAPPA SYMBOL
-03F1; E; 03C1; #GREEK RHO SYMBOL
-03F2; E; 03C2; #GREEK LUNATE SIGMA SYMBOL
-0400; L; 0450; #CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0401; L; 0451; #CYRILLIC CAPITAL LETTER IO
-0402; L; 0452; #CYRILLIC CAPITAL LETTER DJE
-0403; L; 0453; #CYRILLIC CAPITAL LETTER GJE
-0404; L; 0454; #CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0405; L; 0455; #CYRILLIC CAPITAL LETTER DZE
-0406; L; 0456; #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0407; L; 0457; #CYRILLIC CAPITAL LETTER YI
-0408; L; 0458; #CYRILLIC CAPITAL LETTER JE
-0409; L; 0459; #CYRILLIC CAPITAL LETTER LJE
-040A; L; 045A; #CYRILLIC CAPITAL LETTER NJE
-040B; L; 045B; #CYRILLIC CAPITAL LETTER TSHE
-040C; L; 045C; #CYRILLIC CAPITAL LETTER KJE
-040D; L; 045D; #CYRILLIC CAPITAL LETTER I WITH GRAVE
-040E; L; 045E; #CYRILLIC CAPITAL LETTER SHORT U
-040F; L; 045F; #CYRILLIC CAPITAL LETTER DZHE
-0410; L; 0430; #CYRILLIC CAPITAL LETTER A
-0411; L; 0431; #CYRILLIC CAPITAL LETTER BE
-0412; L; 0432; #CYRILLIC CAPITAL LETTER VE
-0413; L; 0433; #CYRILLIC CAPITAL LETTER GHE
-0414; L; 0434; #CYRILLIC CAPITAL LETTER DE
-0415; L; 0435; #CYRILLIC CAPITAL LETTER IE
-0416; L; 0436; #CYRILLIC CAPITAL LETTER ZHE
-0417; L; 0437; #CYRILLIC CAPITAL LETTER ZE
-0418; L; 0438; #CYRILLIC CAPITAL LETTER I
-0419; L; 0439; #CYRILLIC CAPITAL LETTER SHORT I
-041A; L; 043A; #CYRILLIC CAPITAL LETTER KA
-041B; L; 043B; #CYRILLIC CAPITAL LETTER EL
-041C; L; 043C; #CYRILLIC CAPITAL LETTER EM
-041D; L; 043D; #CYRILLIC CAPITAL LETTER EN
-041E; L; 043E; #CYRILLIC CAPITAL LETTER O
-041F; L; 043F; #CYRILLIC CAPITAL LETTER PE
-0420; L; 0440; #CYRILLIC CAPITAL LETTER ER
-0421; L; 0441; #CYRILLIC CAPITAL LETTER ES
-0422; L; 0442; #CYRILLIC CAPITAL LETTER TE
-0423; L; 0443; #CYRILLIC CAPITAL LETTER U
-0424; L; 0444; #CYRILLIC CAPITAL LETTER EF
-0425; L; 0445; #CYRILLIC CAPITAL LETTER HA
-0426; L; 0446; #CYRILLIC CAPITAL LETTER TSE
-0427; L; 0447; #CYRILLIC CAPITAL LETTER CHE
-0428; L; 0448; #CYRILLIC CAPITAL LETTER SHA
-0429; L; 0449; #CYRILLIC CAPITAL LETTER SHCHA
-042A; L; 044A; #CYRILLIC CAPITAL LETTER HARD SIGN
-042B; L; 044B; #CYRILLIC CAPITAL LETTER YERU
-042C; L; 044C; #CYRILLIC CAPITAL LETTER SOFT SIGN
-042D; L; 044D; #CYRILLIC CAPITAL LETTER E
-042E; L; 044E; #CYRILLIC CAPITAL LETTER YU
-042F; L; 044F; #CYRILLIC CAPITAL LETTER YA
-0460; L; 0461; #CYRILLIC CAPITAL LETTER OMEGA
-0462; L; 0463; #CYRILLIC CAPITAL LETTER YAT
-0464; L; 0465; #CYRILLIC CAPITAL LETTER IOTIFIED E
-0466; L; 0467; #CYRILLIC CAPITAL LETTER LITTLE YUS
-0468; L; 0469; #CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-046A; L; 046B; #CYRILLIC CAPITAL LETTER BIG YUS
-046C; L; 046D; #CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-046E; L; 046F; #CYRILLIC CAPITAL LETTER KSI
-0470; L; 0471; #CYRILLIC CAPITAL LETTER PSI
-0472; L; 0473; #CYRILLIC CAPITAL LETTER FITA
-0474; L; 0475; #CYRILLIC CAPITAL LETTER IZHITSA
-0476; L; 0477; #CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0478; L; 0479; #CYRILLIC CAPITAL LETTER UK
-047A; L; 047B; #CYRILLIC CAPITAL LETTER ROUND OMEGA
-047C; L; 047D; #CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-047E; L; 047F; #CYRILLIC CAPITAL LETTER OT
-0480; L; 0481; #CYRILLIC CAPITAL LETTER KOPPA
-048C; L; 048D; #CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-048E; L; 048F; #CYRILLIC CAPITAL LETTER ER WITH TICK
-0490; L; 0491; #CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-0492; L; 0493; #CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0494; L; 0495; #CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-0496; L; 0497; #CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-0498; L; 0499; #CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-049A; L; 049B; #CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-049C; L; 049D; #CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-049E; L; 049F; #CYRILLIC CAPITAL LETTER KA WITH STROKE
-04A0; L; 04A1; #CYRILLIC CAPITAL LETTER BASHKIR KA
-04A2; L; 04A3; #CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04A4; L; 04A5; #CYRILLIC CAPITAL LIGATURE EN GHE
-04A6; L; 04A7; #CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
-04A8; L; 04A9; #CYRILLIC CAPITAL LETTER ABKHASIAN HA
-04AA; L; 04AB; #CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04AC; L; 04AD; #CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-04AE; L; 04AF; #CYRILLIC CAPITAL LETTER STRAIGHT U
-04B0; L; 04B1; #CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-04B2; L; 04B3; #CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-04B4; L; 04B5; #CYRILLIC CAPITAL LIGATURE TE TSE
-04B6; L; 04B7; #CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-04B8; L; 04B9; #CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-04BA; L; 04BB; #CYRILLIC CAPITAL LETTER SHHA
-04BC; L; 04BD; #CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-04BE; L; 04BF; #CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-04C1; L; 04C2; #CYRILLIC CAPITAL LETTER ZHE WITH BREVE
-04C3; L; 04C4; #CYRILLIC CAPITAL LETTER KA WITH HOOK
-04C7; L; 04C8; #CYRILLIC CAPITAL LETTER EN WITH HOOK
-04CB; L; 04CC; #CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-04D0; L; 04D1; #CYRILLIC CAPITAL LETTER A WITH BREVE
-04D2; L; 04D3; #CYRILLIC CAPITAL LETTER A WITH DIAERESIS
-04D4; L; 04D5; #CYRILLIC CAPITAL LIGATURE A IE
-04D6; L; 04D7; #CYRILLIC CAPITAL LETTER IE WITH BREVE
-04D8; L; 04D9; #CYRILLIC CAPITAL LETTER SCHWA
-04DA; L; 04DB; #CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
-04DC; L; 04DD; #CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
-04DE; L; 04DF; #CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
-04E0; L; 04E1; #CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-04E2; L; 04E3; #CYRILLIC CAPITAL LETTER I WITH MACRON
-04E4; L; 04E5; #CYRILLIC CAPITAL LETTER I WITH DIAERESIS
-04E6; L; 04E7; #CYRILLIC CAPITAL LETTER O WITH DIAERESIS
-04E8; L; 04E9; #CYRILLIC CAPITAL LETTER BARRED O
-04EA; L; 04EB; #CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
-04EC; L; 04ED; #CYRILLIC CAPITAL LETTER E WITH DIAERESIS
-04EE; L; 04EF; #CYRILLIC CAPITAL LETTER U WITH MACRON
-04F0; L; 04F1; #CYRILLIC CAPITAL LETTER U WITH DIAERESIS
-04F2; L; 04F3; #CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
-04F4; L; 04F5; #CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
-04F8; L; 04F9; #CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
-0531; L; 0561; #ARMENIAN CAPITAL LETTER AYB
-0532; L; 0562; #ARMENIAN CAPITAL LETTER BEN
-0533; L; 0563; #ARMENIAN CAPITAL LETTER GIM
-0534; L; 0564; #ARMENIAN CAPITAL LETTER DA
-0535; L; 0565; #ARMENIAN CAPITAL LETTER ECH
-0536; L; 0566; #ARMENIAN CAPITAL LETTER ZA
-0537; L; 0567; #ARMENIAN CAPITAL LETTER EH
-0538; L; 0568; #ARMENIAN CAPITAL LETTER ET
-0539; L; 0569; #ARMENIAN CAPITAL LETTER TO
-053A; L; 056A; #ARMENIAN CAPITAL LETTER ZHE
-053B; L; 056B; #ARMENIAN CAPITAL LETTER INI
-053C; L; 056C; #ARMENIAN CAPITAL LETTER LIWN
-053D; L; 056D; #ARMENIAN CAPITAL LETTER XEH
-053E; L; 056E; #ARMENIAN CAPITAL LETTER CA
-053F; L; 056F; #ARMENIAN CAPITAL LETTER KEN
-0540; L; 0570; #ARMENIAN CAPITAL LETTER HO
-0541; L; 0571; #ARMENIAN CAPITAL LETTER JA
-0542; L; 0572; #ARMENIAN CAPITAL LETTER GHAD
-0543; L; 0573; #ARMENIAN CAPITAL LETTER CHEH
-0544; L; 0574; #ARMENIAN CAPITAL LETTER MEN
-0545; L; 0575; #ARMENIAN CAPITAL LETTER YI
-0546; L; 0576; #ARMENIAN CAPITAL LETTER NOW
-0547; L; 0577; #ARMENIAN CAPITAL LETTER SHA
-0548; L; 0578; #ARMENIAN CAPITAL LETTER VO
-0549; L; 0579; #ARMENIAN CAPITAL LETTER CHA
-054A; L; 057A; #ARMENIAN CAPITAL LETTER PEH
-054B; L; 057B; #ARMENIAN CAPITAL LETTER JHEH
-054C; L; 057C; #ARMENIAN CAPITAL LETTER RA
-054D; L; 057D; #ARMENIAN CAPITAL LETTER SEH
-054E; L; 057E; #ARMENIAN CAPITAL LETTER VEW
-054F; L; 057F; #ARMENIAN CAPITAL LETTER TIWN
-0550; L; 0580; #ARMENIAN CAPITAL LETTER REH
-0551; L; 0581; #ARMENIAN CAPITAL LETTER CO
-0552; L; 0582; #ARMENIAN CAPITAL LETTER YIWN
-0553; L; 0583; #ARMENIAN CAPITAL LETTER PIWR
-0554; L; 0584; #ARMENIAN CAPITAL LETTER KEH
-0555; L; 0585; #ARMENIAN CAPITAL LETTER OH
-0556; L; 0586; #ARMENIAN CAPITAL LETTER FEH
-0587; E; 0565 0582; #ARMENIAN SMALL LIGATURE ECH YIWN
-1E00; L; 1E01; #LATIN CAPITAL LETTER A WITH RING BELOW
-1E02; L; 1E03; #LATIN CAPITAL LETTER B WITH DOT ABOVE
-1E04; L; 1E05; #LATIN CAPITAL LETTER B WITH DOT BELOW
-1E06; L; 1E07; #LATIN CAPITAL LETTER B WITH LINE BELOW
-1E08; L; 1E09; #LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
-1E0A; L; 1E0B; #LATIN CAPITAL LETTER D WITH DOT ABOVE
-1E0C; L; 1E0D; #LATIN CAPITAL LETTER D WITH DOT BELOW
-1E0E; L; 1E0F; #LATIN CAPITAL LETTER D WITH LINE BELOW
-1E10; L; 1E11; #LATIN CAPITAL LETTER D WITH CEDILLA
-1E12; L; 1E13; #LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
-1E14; L; 1E15; #LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
-1E16; L; 1E17; #LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
-1E18; L; 1E19; #LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
-1E1A; L; 1E1B; #LATIN CAPITAL LETTER E WITH TILDE BELOW
-1E1C; L; 1E1D; #LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
-1E1E; L; 1E1F; #LATIN CAPITAL LETTER F WITH DOT ABOVE
-1E20; L; 1E21; #LATIN CAPITAL LETTER G WITH MACRON
-1E22; L; 1E23; #LATIN CAPITAL LETTER H WITH DOT ABOVE
-1E24; L; 1E25; #LATIN CAPITAL LETTER H WITH DOT BELOW
-1E26; L; 1E27; #LATIN CAPITAL LETTER H WITH DIAERESIS
-1E28; L; 1E29; #LATIN CAPITAL LETTER H WITH CEDILLA
-1E2A; L; 1E2B; #LATIN CAPITAL LETTER H WITH BREVE BELOW
-1E2C; L; 1E2D; #LATIN CAPITAL LETTER I WITH TILDE BELOW
-1E2E; L; 1E2F; #LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
-1E30; L; 1E31; #LATIN CAPITAL LETTER K WITH ACUTE
-1E32; L; 1E33; #LATIN CAPITAL LETTER K WITH DOT BELOW
-1E34; L; 1E35; #LATIN CAPITAL LETTER K WITH LINE BELOW
-1E36; L; 1E37; #LATIN CAPITAL LETTER L WITH DOT BELOW
-1E38; L; 1E39; #LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
-1E3A; L; 1E3B; #LATIN CAPITAL LETTER L WITH LINE BELOW
-1E3C; L; 1E3D; #LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
-1E3E; L; 1E3F; #LATIN CAPITAL LETTER M WITH ACUTE
-1E40; L; 1E41; #LATIN CAPITAL LETTER M WITH DOT ABOVE
-1E42; L; 1E43; #LATIN CAPITAL LETTER M WITH DOT BELOW
-1E44; L; 1E45; #LATIN CAPITAL LETTER N WITH DOT ABOVE
-1E46; L; 1E47; #LATIN CAPITAL LETTER N WITH DOT BELOW
-1E48; L; 1E49; #LATIN CAPITAL LETTER N WITH LINE BELOW
-1E4A; L; 1E4B; #LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
-1E4C; L; 1E4D; #LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
-1E4E; L; 1E4F; #LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
-1E50; L; 1E51; #LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
-1E52; L; 1E53; #LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
-1E54; L; 1E55; #LATIN CAPITAL LETTER P WITH ACUTE
-1E56; L; 1E57; #LATIN CAPITAL LETTER P WITH DOT ABOVE
-1E58; L; 1E59; #LATIN CAPITAL LETTER R WITH DOT ABOVE
-1E5A; L; 1E5B; #LATIN CAPITAL LETTER R WITH DOT BELOW
-1E5C; L; 1E5D; #LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
-1E5E; L; 1E5F; #LATIN CAPITAL LETTER R WITH LINE BELOW
-1E60; L; 1E61; #LATIN CAPITAL LETTER S WITH DOT ABOVE
-1E62; L; 1E63; #LATIN CAPITAL LETTER S WITH DOT BELOW
-1E64; L; 1E65; #LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
-1E66; L; 1E67; #LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
-1E68; L; 1E69; #LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
-1E6A; L; 1E6B; #LATIN CAPITAL LETTER T WITH DOT ABOVE
-1E6C; L; 1E6D; #LATIN CAPITAL LETTER T WITH DOT BELOW
-1E6E; L; 1E6F; #LATIN CAPITAL LETTER T WITH LINE BELOW
-1E70; L; 1E71; #LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
-1E72; L; 1E73; #LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
-1E74; L; 1E75; #LATIN CAPITAL LETTER U WITH TILDE BELOW
-1E76; L; 1E77; #LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
-1E78; L; 1E79; #LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
-1E7A; L; 1E7B; #LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
-1E7C; L; 1E7D; #LATIN CAPITAL LETTER V WITH TILDE
-1E7E; L; 1E7F; #LATIN CAPITAL LETTER V WITH DOT BELOW
-1E80; L; 1E81; #LATIN CAPITAL LETTER W WITH GRAVE
-1E82; L; 1E83; #LATIN CAPITAL LETTER W WITH ACUTE
-1E84; L; 1E85; #LATIN CAPITAL LETTER W WITH DIAERESIS
-1E86; L; 1E87; #LATIN CAPITAL LETTER W WITH DOT ABOVE
-1E88; L; 1E89; #LATIN CAPITAL LETTER W WITH DOT BELOW
-1E8A; L; 1E8B; #LATIN CAPITAL LETTER X WITH DOT ABOVE
-1E8C; L; 1E8D; #LATIN CAPITAL LETTER X WITH DIAERESIS
-1E8E; L; 1E8F; #LATIN CAPITAL LETTER Y WITH DOT ABOVE
-1E90; L; 1E91; #LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
-1E92; L; 1E93; #LATIN CAPITAL LETTER Z WITH DOT BELOW
-1E94; L; 1E95; #LATIN CAPITAL LETTER Z WITH LINE BELOW
-1E96; E; 0068 0331; #LATIN SMALL LETTER H WITH LINE BELOW
-1E97; E; 0074 0308; #LATIN SMALL LETTER T WITH DIAERESIS
-1E98; E; 0077 030A; #LATIN SMALL LETTER W WITH RING ABOVE
-1E99; E; 0079 030A; #LATIN SMALL LETTER Y WITH RING ABOVE
-1E9A; E; 0061 02BE; #LATIN SMALL LETTER A WITH RIGHT HALF RING
-1E9B; E; 1E61; #LATIN SMALL LETTER LONG S WITH DOT ABOVE
-1EA0; L; 1EA1; #LATIN CAPITAL LETTER A WITH DOT BELOW
-1EA2; L; 1EA3; #LATIN CAPITAL LETTER A WITH HOOK ABOVE
-1EA4; L; 1EA5; #LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-1EA6; L; 1EA7; #LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-1EA8; L; 1EA9; #LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1EAA; L; 1EAB; #LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-1EAC; L; 1EAD; #LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1EAE; L; 1EAF; #LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-1EB0; L; 1EB1; #LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-1EB2; L; 1EB3; #LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-1EB4; L; 1EB5; #LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-1EB6; L; 1EB7; #LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-1EB8; L; 1EB9; #LATIN CAPITAL LETTER E WITH DOT BELOW
-1EBA; L; 1EBB; #LATIN CAPITAL LETTER E WITH HOOK ABOVE
-1EBC; L; 1EBD; #LATIN CAPITAL LETTER E WITH TILDE
-1EBE; L; 1EBF; #LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-1EC0; L; 1EC1; #LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-1EC2; L; 1EC3; #LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1EC4; L; 1EC5; #LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-1EC6; L; 1EC7; #LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1EC8; L; 1EC9; #LATIN CAPITAL LETTER I WITH HOOK ABOVE
-1ECA; L; 1ECB; #LATIN CAPITAL LETTER I WITH DOT BELOW
-1ECC; L; 1ECD; #LATIN CAPITAL LETTER O WITH DOT BELOW
-1ECE; L; 1ECF; #LATIN CAPITAL LETTER O WITH HOOK ABOVE
-1ED0; L; 1ED1; #LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ED2; L; 1ED3; #LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ED4; L; 1ED5; #LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ED6; L; 1ED7; #LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-1ED8; L; 1ED9; #LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1EDA; L; 1EDB; #LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-1EDC; L; 1EDD; #LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-1EDE; L; 1EDF; #LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-1EE0; L; 1EE1; #LATIN CAPITAL LETTER O WITH HORN AND TILDE
-1EE2; L; 1EE3; #LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-1EE4; L; 1EE5; #LATIN CAPITAL LETTER U WITH DOT BELOW
-1EE6; L; 1EE7; #LATIN CAPITAL LETTER U WITH HOOK ABOVE
-1EE8; L; 1EE9; #LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-1EEA; L; 1EEB; #LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-1EEC; L; 1EED; #LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-1EEE; L; 1EEF; #LATIN CAPITAL LETTER U WITH HORN AND TILDE
-1EF0; L; 1EF1; #LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-1EF2; L; 1EF3; #LATIN CAPITAL LETTER Y WITH GRAVE
-1EF4; L; 1EF5; #LATIN CAPITAL LETTER Y WITH DOT BELOW
-1EF6; L; 1EF7; #LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-1EF8; L; 1EF9; #LATIN CAPITAL LETTER Y WITH TILDE
-1F08; L; 1F00; #GREEK CAPITAL LETTER ALPHA WITH PSILI
-1F09; L; 1F01; #GREEK CAPITAL LETTER ALPHA WITH DASIA
-1F0A; L; 1F02; #GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
-1F0B; L; 1F03; #GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
-1F0C; L; 1F04; #GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
-1F0D; L; 1F05; #GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
-1F0E; L; 1F06; #GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1F0F; L; 1F07; #GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1F18; L; 1F10; #GREEK CAPITAL LETTER EPSILON WITH PSILI
-1F19; L; 1F11; #GREEK CAPITAL LETTER EPSILON WITH DASIA
-1F1A; L; 1F12; #GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
-1F1B; L; 1F13; #GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
-1F1C; L; 1F14; #GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
-1F1D; L; 1F15; #GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-1F28; L; 1F20; #GREEK CAPITAL LETTER ETA WITH PSILI
-1F29; L; 1F21; #GREEK CAPITAL LETTER ETA WITH DASIA
-1F2A; L; 1F22; #GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
-1F2B; L; 1F23; #GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
-1F2C; L; 1F24; #GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
-1F2D; L; 1F25; #GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
-1F2E; L; 1F26; #GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
-1F2F; L; 1F27; #GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
-1F38; L; 1F30; #GREEK CAPITAL LETTER IOTA WITH PSILI
-1F39; L; 1F31; #GREEK CAPITAL LETTER IOTA WITH DASIA
-1F3A; L; 1F32; #GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
-1F3B; L; 1F33; #GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
-1F3C; L; 1F34; #GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
-1F3D; L; 1F35; #GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
-1F3E; L; 1F36; #GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
-1F3F; L; 1F37; #GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
-1F48; L; 1F40; #GREEK CAPITAL LETTER OMICRON WITH PSILI
-1F49; L; 1F41; #GREEK CAPITAL LETTER OMICRON WITH DASIA
-1F4A; L; 1F42; #GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
-1F4B; L; 1F43; #GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
-1F4C; L; 1F44; #GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
-1F4D; L; 1F45; #GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-1F50; E; 03C5 0313; #GREEK SMALL LETTER UPSILON WITH PSILI
-1F52; E; 03C5 0313 0300; #GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1F54; E; 03C5 0313 0301; #GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1F56; E; 03C5 0313 0342; #GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1F59; L; 1F51; #GREEK CAPITAL LETTER UPSILON WITH DASIA
-1F5B; L; 1F53; #GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-1F5D; L; 1F55; #GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-1F5F; L; 1F57; #GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1F68; L; 1F60; #GREEK CAPITAL LETTER OMEGA WITH PSILI
-1F69; L; 1F61; #GREEK CAPITAL LETTER OMEGA WITH DASIA
-1F6A; L; 1F62; #GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
-1F6B; L; 1F63; #GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
-1F6C; L; 1F64; #GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
-1F6D; L; 1F65; #GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
-1F6E; L; 1F66; #GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1F6F; L; 1F67; #GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1F80; E; 1F00 03B9; #GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1F81; E; 1F01 03B9; #GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1F82; E; 1F02 03B9; #GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F83; E; 1F03 03B9; #GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F84; E; 1F04 03B9; #GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F85; E; 1F05 03B9; #GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F86; E; 1F06 03B9; #GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F87; E; 1F07 03B9; #GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F88; E; 1F00 03B9; #GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F89; E; 1F01 03B9; #GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F8A; E; 1F02 03B9; #GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8B; E; 1F03 03B9; #GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8C; E; 1F04 03B9; #GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8D; E; 1F05 03B9; #GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8E; E; 1F06 03B9; #GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F; E; 1F07 03B9; #GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F90; E; 1F20 03B9; #GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1F91; E; 1F21 03B9; #GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1F92; E; 1F22 03B9; #GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F93; E; 1F23 03B9; #GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F94; E; 1F24 03B9; #GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F95; E; 1F25 03B9; #GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F96; E; 1F26 03B9; #GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F97; E; 1F27 03B9; #GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F98; E; 1F20 03B9; #GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F99; E; 1F21 03B9; #GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F9A; E; 1F22 03B9; #GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9B; E; 1F23 03B9; #GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9C; E; 1F24 03B9; #GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9D; E; 1F25 03B9; #GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9E; E; 1F26 03B9; #GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F; E; 1F27 03B9; #GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FA0; E; 1F60 03B9; #GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1FA1; E; 1F61 03B9; #GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1FA2; E; 1F62 03B9; #GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1FA3; E; 1F63 03B9; #GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1FA4; E; 1F64 03B9; #GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1FA5; E; 1F65 03B9; #GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1FA6; E; 1F66 03B9; #GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1FA7; E; 1F67 03B9; #GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1FA8; E; 1F60 03B9; #GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA9; E; 1F61 03B9; #GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FAA; E; 1F62 03B9; #GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAB; E; 1F63 03B9; #GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAC; E; 1F64 03B9; #GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAD; E; 1F65 03B9; #GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAE; E; 1F66 03B9; #GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF; E; 1F67 03B9; #GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FB2; E; 1F70 03B9; #GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1FB3; E; 03B1 03B9; #GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1FB4; E; 03AC 03B9; #GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FB6; E; 03B1 0342; #GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1FB7; E; 03B1 0342 03B9; #GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FB8; L; 1FB0; #GREEK CAPITAL LETTER ALPHA WITH VRACHY
-1FB9; L; 1FB1; #GREEK CAPITAL LETTER ALPHA WITH MACRON
-1FBA; L; 1F70; #GREEK CAPITAL LETTER ALPHA WITH VARIA
-1FBB; L; 1F71; #GREEK CAPITAL LETTER ALPHA WITH OXIA
-1FBC; E; 03B1 03B9; #GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FBE; E; 03B9; #GREEK PROSGEGRAMMENI
-1FC2; E; 1F74 03B9; #GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1FC3; E; 03B7 03B9; #GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1FC4; E; 03AE 03B9; #GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FC6; E; 03B7 0342; #GREEK SMALL LETTER ETA WITH PERISPOMENI
-1FC7; E; 03B7 0342 03B9; #GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FC8; L; 1F72; #GREEK CAPITAL LETTER EPSILON WITH VARIA
-1FC9; L; 1F73; #GREEK CAPITAL LETTER EPSILON WITH OXIA
-1FCA; L; 1F74; #GREEK CAPITAL LETTER ETA WITH VARIA
-1FCB; L; 1F75; #GREEK CAPITAL LETTER ETA WITH OXIA
-1FCC; E; 03B7 03B9; #GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FD2; E; 03B9 0308 0300; #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1FD3; E; 03B9 0308 0301; #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6; E; 03B9 0342; #GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1FD7; E; 03B9 0308 0342; #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1FD8; L; 1FD0; #GREEK CAPITAL LETTER IOTA WITH VRACHY
-1FD9; L; 1FD1; #GREEK CAPITAL LETTER IOTA WITH MACRON
-1FDA; L; 1F76; #GREEK CAPITAL LETTER IOTA WITH VARIA
-1FDB; L; 1F77; #GREEK CAPITAL LETTER IOTA WITH OXIA
-1FE2; E; 03C5 0308 0300; #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1FE3; E; 03C5 0308 0301; #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1FE4; E; 03C1 0313; #GREEK SMALL LETTER RHO WITH PSILI
-1FE6; E; 03C5 0342; #GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1FE7; E; 03C5 0308 0342; #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1FE8; L; 1FE0; #GREEK CAPITAL LETTER UPSILON WITH VRACHY
-1FE9; L; 1FE1; #GREEK CAPITAL LETTER UPSILON WITH MACRON
-1FEA; L; 1F7A; #GREEK CAPITAL LETTER UPSILON WITH VARIA
-1FEB; L; 1F7B; #GREEK CAPITAL LETTER UPSILON WITH OXIA
-1FEC; L; 1FE5; #GREEK CAPITAL LETTER RHO WITH DASIA
-1FF2; E; 1F7C 03B9; #GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1FF3; E; 03C9 03B9; #GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1FF4; E; 03CE 03B9; #GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-1FF6; E; 03C9 0342; #GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-1FF7; E; 03C9 0342 03B9; #GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FF8; L; 1F78; #GREEK CAPITAL LETTER OMICRON WITH VARIA
-1FF9; L; 1F79; #GREEK CAPITAL LETTER OMICRON WITH OXIA
-1FFA; L; 1F7C; #GREEK CAPITAL LETTER OMEGA WITH VARIA
-1FFB; L; 1F7D; #GREEK CAPITAL LETTER OMEGA WITH OXIA
-1FFC; E; 03C9 03B9; #GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-2126; L; 03C9; #OHM SIGN
-212A; L; 006B; #KELVIN SIGN
-212B; L; 00E5; #ANGSTROM SIGN
-2160; L; 2170; #ROMAN NUMERAL ONE
-2161; L; 2171; #ROMAN NUMERAL TWO
-2162; L; 2172; #ROMAN NUMERAL THREE
-2163; L; 2173; #ROMAN NUMERAL FOUR
-2164; L; 2174; #ROMAN NUMERAL FIVE
-2165; L; 2175; #ROMAN NUMERAL SIX
-2166; L; 2176; #ROMAN NUMERAL SEVEN
-2167; L; 2177; #ROMAN NUMERAL EIGHT
-2168; L; 2178; #ROMAN NUMERAL NINE
-2169; L; 2179; #ROMAN NUMERAL TEN
-216A; L; 217A; #ROMAN NUMERAL ELEVEN
-216B; L; 217B; #ROMAN NUMERAL TWELVE
-216C; L; 217C; #ROMAN NUMERAL FIFTY
-216D; L; 217D; #ROMAN NUMERAL ONE HUNDRED
-216E; L; 217E; #ROMAN NUMERAL FIVE HUNDRED
-216F; L; 217F; #ROMAN NUMERAL ONE THOUSAND
-24B6; L; 24D0; #CIRCLED LATIN CAPITAL LETTER A
-24B7; L; 24D1; #CIRCLED LATIN CAPITAL LETTER B
-24B8; L; 24D2; #CIRCLED LATIN CAPITAL LETTER C
-24B9; L; 24D3; #CIRCLED LATIN CAPITAL LETTER D
-24BA; L; 24D4; #CIRCLED LATIN CAPITAL LETTER E
-24BB; L; 24D5; #CIRCLED LATIN CAPITAL LETTER F
-24BC; L; 24D6; #CIRCLED LATIN CAPITAL LETTER G
-24BD; L; 24D7; #CIRCLED LATIN CAPITAL LETTER H
-24BE; L; 24D8; #CIRCLED LATIN CAPITAL LETTER I
-24BF; L; 24D9; #CIRCLED LATIN CAPITAL LETTER J
-24C0; L; 24DA; #CIRCLED LATIN CAPITAL LETTER K
-24C1; L; 24DB; #CIRCLED LATIN CAPITAL LETTER L
-24C2; L; 24DC; #CIRCLED LATIN CAPITAL LETTER M
-24C3; L; 24DD; #CIRCLED LATIN CAPITAL LETTER N
-24C4; L; 24DE; #CIRCLED LATIN CAPITAL LETTER O
-24C5; L; 24DF; #CIRCLED LATIN CAPITAL LETTER P
-24C6; L; 24E0; #CIRCLED LATIN CAPITAL LETTER Q
-24C7; L; 24E1; #CIRCLED LATIN CAPITAL LETTER R
-24C8; L; 24E2; #CIRCLED LATIN CAPITAL LETTER S
-24C9; L; 24E3; #CIRCLED LATIN CAPITAL LETTER T
-24CA; L; 24E4; #CIRCLED LATIN CAPITAL LETTER U
-24CB; L; 24E5; #CIRCLED LATIN CAPITAL LETTER V
-24CC; L; 24E6; #CIRCLED LATIN CAPITAL LETTER W
-24CD; L; 24E7; #CIRCLED LATIN CAPITAL LETTER X
-24CE; L; 24E8; #CIRCLED LATIN CAPITAL LETTER Y
-24CF; L; 24E9; #CIRCLED LATIN CAPITAL LETTER Z
-FB00; E; 0066 0066; #LATIN SMALL LIGATURE FF
-FB01; E; 0066 0069; #LATIN SMALL LIGATURE FI
-FB02; E; 0066 006C; #LATIN SMALL LIGATURE FL
-FB03; E; 0066 0066 0069; #LATIN SMALL LIGATURE FFI
-FB04; E; 0066 0066 006C; #LATIN SMALL LIGATURE FFL
-FB05; E; 0073 0074; #LATIN SMALL LIGATURE LONG S T
-FB06; E; 0073 0074; #LATIN SMALL LIGATURE ST
-FB13; E; 0574 0576; #ARMENIAN SMALL LIGATURE MEN NOW
-FB14; E; 0574 0565; #ARMENIAN SMALL LIGATURE MEN ECH
-FB15; E; 0574 056B; #ARMENIAN SMALL LIGATURE MEN INI
-FB16; E; 057E 0576; #ARMENIAN SMALL LIGATURE VEW NOW
-FB17; E; 0574 056D; #ARMENIAN SMALL LIGATURE MEN XEH
-FF21; L; FF41; #FULLWIDTH LATIN CAPITAL LETTER A
-FF22; L; FF42; #FULLWIDTH LATIN CAPITAL LETTER B
-FF23; L; FF43; #FULLWIDTH LATIN CAPITAL LETTER C
-FF24; L; FF44; #FULLWIDTH LATIN CAPITAL LETTER D
-FF25; L; FF45; #FULLWIDTH LATIN CAPITAL LETTER E
-FF26; L; FF46; #FULLWIDTH LATIN CAPITAL LETTER F
-FF27; L; FF47; #FULLWIDTH LATIN CAPITAL LETTER G
-FF28; L; FF48; #FULLWIDTH LATIN CAPITAL LETTER H
-FF29; L; FF49; #FULLWIDTH LATIN CAPITAL LETTER I
-FF2A; L; FF4A; #FULLWIDTH LATIN CAPITAL LETTER J
-FF2B; L; FF4B; #FULLWIDTH LATIN CAPITAL LETTER K
-FF2C; L; FF4C; #FULLWIDTH LATIN CAPITAL LETTER L
-FF2D; L; FF4D; #FULLWIDTH LATIN CAPITAL LETTER M
-FF2E; L; FF4E; #FULLWIDTH LATIN CAPITAL LETTER N
-FF2F; L; FF4F; #FULLWIDTH LATIN CAPITAL LETTER O
-FF30; L; FF50; #FULLWIDTH LATIN CAPITAL LETTER P
-FF31; L; FF51; #FULLWIDTH LATIN CAPITAL LETTER Q
-FF32; L; FF52; #FULLWIDTH LATIN CAPITAL LETTER R
-FF33; L; FF53; #FULLWIDTH LATIN CAPITAL LETTER S
-FF34; L; FF54; #FULLWIDTH LATIN CAPITAL LETTER T
-FF35; L; FF55; #FULLWIDTH LATIN CAPITAL LETTER U
-FF36; L; FF56; #FULLWIDTH LATIN CAPITAL LETTER V
-FF37; L; FF57; #FULLWIDTH LATIN CAPITAL LETTER W
-FF38; L; FF58; #FULLWIDTH LATIN CAPITAL LETTER X
-FF39; L; FF59; #FULLWIDTH LATIN CAPITAL LETTER Y
-FF3A; L; FF5A; #FULLWIDTH LATIN CAPITAL LETTER Z
-
-
diff --git a/contrib/perl5/lib/unicode/Category.pl b/contrib/perl5/lib/unicode/Category.pl
deleted file mode 100644
index 9c81514..0000000
--- a/contrib/perl5/lib/unicode/Category.pl
+++ /dev/null
@@ -1,1508 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 001f Cc
-0020 Zs
-0021 0023 Po
-0024 Sc
-0025 0027 Po
-0028 Ps
-0029 Pe
-002a Po
-002b Sm
-002c Po
-002d Pd
-002e 002f Po
-0030 0039 Nd
-003a 003b Po
-003c 003e Sm
-003f 0040 Po
-0041 005a Lu
-005b Ps
-005c Po
-005d Pe
-005e Sk
-005f Pc
-0060 Sk
-0061 007a Ll
-007b Ps
-007c Sm
-007d Pe
-007e Sm
-007f 009f Cc
-00a0 Zs
-00a1 Po
-00a2 00a5 Sc
-00a6 00a7 So
-00a8 Sk
-00a9 So
-00aa Ll
-00ab Pi
-00ac Sm
-00ad Pd
-00ae So
-00af Sk
-00b0 So
-00b1 Sm
-00b2 00b3 No
-00b4 Sk
-00b5 Ll
-00b6 So
-00b7 Po
-00b8 Sk
-00b9 No
-00ba Ll
-00bb Pf
-00bc 00be No
-00bf Po
-00c0 00d6 Lu
-00d7 Sm
-00d8 00de Lu
-00df 00f6 Ll
-00f7 Sm
-00f8 00ff Ll
-0100 Lu
-0101 Ll
-0102 Lu
-0103 Ll
-0104 Lu
-0105 Ll
-0106 Lu
-0107 Ll
-0108 Lu
-0109 Ll
-010a Lu
-010b Ll
-010c Lu
-010d Ll
-010e Lu
-010f Ll
-0110 Lu
-0111 Ll
-0112 Lu
-0113 Ll
-0114 Lu
-0115 Ll
-0116 Lu
-0117 Ll
-0118 Lu
-0119 Ll
-011a Lu
-011b Ll
-011c Lu
-011d Ll
-011e Lu
-011f Ll
-0120 Lu
-0121 Ll
-0122 Lu
-0123 Ll
-0124 Lu
-0125 Ll
-0126 Lu
-0127 Ll
-0128 Lu
-0129 Ll
-012a Lu
-012b Ll
-012c Lu
-012d Ll
-012e Lu
-012f Ll
-0130 Lu
-0131 Ll
-0132 Lu
-0133 Ll
-0134 Lu
-0135 Ll
-0136 Lu
-0137 0138 Ll
-0139 Lu
-013a Ll
-013b Lu
-013c Ll
-013d Lu
-013e Ll
-013f Lu
-0140 Ll
-0141 Lu
-0142 Ll
-0143 Lu
-0144 Ll
-0145 Lu
-0146 Ll
-0147 Lu
-0148 0149 Ll
-014a Lu
-014b Ll
-014c Lu
-014d Ll
-014e Lu
-014f Ll
-0150 Lu
-0151 Ll
-0152 Lu
-0153 Ll
-0154 Lu
-0155 Ll
-0156 Lu
-0157 Ll
-0158 Lu
-0159 Ll
-015a Lu
-015b Ll
-015c Lu
-015d Ll
-015e Lu
-015f Ll
-0160 Lu
-0161 Ll
-0162 Lu
-0163 Ll
-0164 Lu
-0165 Ll
-0166 Lu
-0167 Ll
-0168 Lu
-0169 Ll
-016a Lu
-016b Ll
-016c Lu
-016d Ll
-016e Lu
-016f Ll
-0170 Lu
-0171 Ll
-0172 Lu
-0173 Ll
-0174 Lu
-0175 Ll
-0176 Lu
-0177 Ll
-0178 0179 Lu
-017a Ll
-017b Lu
-017c Ll
-017d Lu
-017e 0180 Ll
-0181 0182 Lu
-0183 Ll
-0184 Lu
-0185 Ll
-0186 0187 Lu
-0188 Ll
-0189 018b Lu
-018c 018d Ll
-018e 0191 Lu
-0192 Ll
-0193 0194 Lu
-0195 Ll
-0196 0198 Lu
-0199 019b Ll
-019c 019d Lu
-019e Ll
-019f 01a0 Lu
-01a1 Ll
-01a2 Lu
-01a3 Ll
-01a4 Lu
-01a5 Ll
-01a6 01a7 Lu
-01a8 Ll
-01a9 Lu
-01aa 01ab Ll
-01ac Lu
-01ad Ll
-01ae 01af Lu
-01b0 Ll
-01b1 01b3 Lu
-01b4 Ll
-01b5 Lu
-01b6 Ll
-01b7 01b8 Lu
-01b9 01ba Ll
-01bb Lo
-01bc Lu
-01bd 01bf Ll
-01c0 01c3 Lo
-01c4 Lu
-01c5 Lt
-01c6 Ll
-01c7 Lu
-01c8 Lt
-01c9 Ll
-01ca Lu
-01cb Lt
-01cc Ll
-01cd Lu
-01ce Ll
-01cf Lu
-01d0 Ll
-01d1 Lu
-01d2 Ll
-01d3 Lu
-01d4 Ll
-01d5 Lu
-01d6 Ll
-01d7 Lu
-01d8 Ll
-01d9 Lu
-01da Ll
-01db Lu
-01dc 01dd Ll
-01de Lu
-01df Ll
-01e0 Lu
-01e1 Ll
-01e2 Lu
-01e3 Ll
-01e4 Lu
-01e5 Ll
-01e6 Lu
-01e7 Ll
-01e8 Lu
-01e9 Ll
-01ea Lu
-01eb Ll
-01ec Lu
-01ed Ll
-01ee Lu
-01ef 01f0 Ll
-01f1 Lu
-01f2 Lt
-01f3 Ll
-01f4 Lu
-01f5 Ll
-01f6 01f8 Lu
-01f9 Ll
-01fa Lu
-01fb Ll
-01fc Lu
-01fd Ll
-01fe Lu
-01ff Ll
-0200 Lu
-0201 Ll
-0202 Lu
-0203 Ll
-0204 Lu
-0205 Ll
-0206 Lu
-0207 Ll
-0208 Lu
-0209 Ll
-020a Lu
-020b Ll
-020c Lu
-020d Ll
-020e Lu
-020f Ll
-0210 Lu
-0211 Ll
-0212 Lu
-0213 Ll
-0214 Lu
-0215 Ll
-0216 Lu
-0217 Ll
-0218 Lu
-0219 Ll
-021a Lu
-021b Ll
-021c Lu
-021d Ll
-021e Lu
-021f Ll
-0222 Lu
-0223 Ll
-0224 Lu
-0225 Ll
-0226 Lu
-0227 Ll
-0228 Lu
-0229 Ll
-022a Lu
-022b Ll
-022c Lu
-022d Ll
-022e Lu
-022f Ll
-0230 Lu
-0231 Ll
-0232 Lu
-0233 Ll
-0250 02ad Ll
-02b0 02b8 Lm
-02b9 02ba Sk
-02bb 02c1 Lm
-02c2 02cf Sk
-02d0 02d1 Lm
-02d2 02df Sk
-02e0 02e4 Lm
-02e5 02ed Sk
-02ee Lm
-0300 034e Mn
-0360 0362 Mn
-0374 0375 Sk
-037a Lm
-037e Po
-0384 0385 Sk
-0386 Lu
-0387 Po
-0388 038a Lu
-038c Lu
-038e 038f Lu
-0390 Ll
-0391 03a1 Lu
-03a3 03ab Lu
-03ac 03ce Ll
-03d0 03d1 Ll
-03d2 03d4 Lu
-03d5 03d7 Ll
-03da Lu
-03db Ll
-03dc Lu
-03dd Ll
-03de Lu
-03df Ll
-03e0 Lu
-03e1 Ll
-03e2 Lu
-03e3 Ll
-03e4 Lu
-03e5 Ll
-03e6 Lu
-03e7 Ll
-03e8 Lu
-03e9 Ll
-03ea Lu
-03eb Ll
-03ec Lu
-03ed Ll
-03ee Lu
-03ef 03f3 Ll
-0400 042f Lu
-0430 045f Ll
-0460 Lu
-0461 Ll
-0462 Lu
-0463 Ll
-0464 Lu
-0465 Ll
-0466 Lu
-0467 Ll
-0468 Lu
-0469 Ll
-046a Lu
-046b Ll
-046c Lu
-046d Ll
-046e Lu
-046f Ll
-0470 Lu
-0471 Ll
-0472 Lu
-0473 Ll
-0474 Lu
-0475 Ll
-0476 Lu
-0477 Ll
-0478 Lu
-0479 Ll
-047a Lu
-047b Ll
-047c Lu
-047d Ll
-047e Lu
-047f Ll
-0480 Lu
-0481 Ll
-0482 So
-0483 0486 Mn
-0488 0489 Me
-048c Lu
-048d Ll
-048e Lu
-048f Ll
-0490 Lu
-0491 Ll
-0492 Lu
-0493 Ll
-0494 Lu
-0495 Ll
-0496 Lu
-0497 Ll
-0498 Lu
-0499 Ll
-049a Lu
-049b Ll
-049c Lu
-049d Ll
-049e Lu
-049f Ll
-04a0 Lu
-04a1 Ll
-04a2 Lu
-04a3 Ll
-04a4 Lu
-04a5 Ll
-04a6 Lu
-04a7 Ll
-04a8 Lu
-04a9 Ll
-04aa Lu
-04ab Ll
-04ac Lu
-04ad Ll
-04ae Lu
-04af Ll
-04b0 Lu
-04b1 Ll
-04b2 Lu
-04b3 Ll
-04b4 Lu
-04b5 Ll
-04b6 Lu
-04b7 Ll
-04b8 Lu
-04b9 Ll
-04ba Lu
-04bb Ll
-04bc Lu
-04bd Ll
-04be Lu
-04bf Ll
-04c0 04c1 Lu
-04c2 Ll
-04c3 Lu
-04c4 Ll
-04c7 Lu
-04c8 Ll
-04cb Lu
-04cc Ll
-04d0 Lu
-04d1 Ll
-04d2 Lu
-04d3 Ll
-04d4 Lu
-04d5 Ll
-04d6 Lu
-04d7 Ll
-04d8 Lu
-04d9 Ll
-04da Lu
-04db Ll
-04dc Lu
-04dd Ll
-04de Lu
-04df Ll
-04e0 Lu
-04e1 Ll
-04e2 Lu
-04e3 Ll
-04e4 Lu
-04e5 Ll
-04e6 Lu
-04e7 Ll
-04e8 Lu
-04e9 Ll
-04ea Lu
-04eb Ll
-04ec Lu
-04ed Ll
-04ee Lu
-04ef Ll
-04f0 Lu
-04f1 Ll
-04f2 Lu
-04f3 Ll
-04f4 Lu
-04f5 Ll
-04f8 Lu
-04f9 Ll
-0531 0556 Lu
-0559 Lm
-055a 055f Po
-0561 0587 Ll
-0589 Po
-058a Pd
-0591 05a1 Mn
-05a3 05b9 Mn
-05bb 05bd Mn
-05be Po
-05bf Mn
-05c0 Po
-05c1 05c2 Mn
-05c3 Po
-05c4 Mn
-05d0 05ea Lo
-05f0 05f2 Lo
-05f3 05f4 Po
-060c Po
-061b Po
-061f Po
-0621 063a Lo
-0640 Lm
-0641 064a Lo
-064b 0655 Mn
-0660 0669 Nd
-066a 066d Po
-0670 Mn
-0671 06d3 Lo
-06d4 Po
-06d5 Lo
-06d6 06dc Mn
-06dd 06de Me
-06df 06e4 Mn
-06e5 06e6 Lm
-06e7 06e8 Mn
-06e9 So
-06ea 06ed Mn
-06f0 06f9 Nd
-06fa 06fc Lo
-06fd 06fe So
-0700 070d Po
-070f Cf
-0710 Lo
-0711 Mn
-0712 072c Lo
-0730 074a Mn
-0780 07a5 Lo
-07a6 07b0 Mn
-0901 0902 Mn
-0903 Mc
-0905 0939 Lo
-093c Mn
-093d Lo
-093e 0940 Mc
-0941 0948 Mn
-0949 094c Mc
-094d Mn
-0950 Lo
-0951 0954 Mn
-0958 0961 Lo
-0962 0963 Mn
-0964 0965 Po
-0966 096f Nd
-0970 Po
-0981 Mn
-0982 0983 Mc
-0985 098c Lo
-098f 0990 Lo
-0993 09a8 Lo
-09aa 09b0 Lo
-09b2 Lo
-09b6 09b9 Lo
-09bc Mn
-09be 09c0 Mc
-09c1 09c4 Mn
-09c7 09c8 Mc
-09cb 09cc Mc
-09cd Mn
-09d7 Mc
-09dc 09dd Lo
-09df 09e1 Lo
-09e2 09e3 Mn
-09e6 09ef Nd
-09f0 09f1 Lo
-09f2 09f3 Sc
-09f4 09f9 No
-09fa So
-0a02 Mn
-0a05 0a0a Lo
-0a0f 0a10 Lo
-0a13 0a28 Lo
-0a2a 0a30 Lo
-0a32 0a33 Lo
-0a35 0a36 Lo
-0a38 0a39 Lo
-0a3c Mn
-0a3e 0a40 Mc
-0a41 0a42 Mn
-0a47 0a48 Mn
-0a4b 0a4d Mn
-0a59 0a5c Lo
-0a5e Lo
-0a66 0a6f Nd
-0a70 0a71 Mn
-0a72 0a74 Lo
-0a81 0a82 Mn
-0a83 Mc
-0a85 0a8b Lo
-0a8d Lo
-0a8f 0a91 Lo
-0a93 0aa8 Lo
-0aaa 0ab0 Lo
-0ab2 0ab3 Lo
-0ab5 0ab9 Lo
-0abc Mn
-0abd Lo
-0abe 0ac0 Mc
-0ac1 0ac5 Mn
-0ac7 0ac8 Mn
-0ac9 Mc
-0acb 0acc Mc
-0acd Mn
-0ad0 Lo
-0ae0 Lo
-0ae6 0aef Nd
-0b01 Mn
-0b02 0b03 Mc
-0b05 0b0c Lo
-0b0f 0b10 Lo
-0b13 0b28 Lo
-0b2a 0b30 Lo
-0b32 0b33 Lo
-0b36 0b39 Lo
-0b3c Mn
-0b3d Lo
-0b3e Mc
-0b3f Mn
-0b40 Mc
-0b41 0b43 Mn
-0b47 0b48 Mc
-0b4b 0b4c Mc
-0b4d Mn
-0b56 Mn
-0b57 Mc
-0b5c 0b5d Lo
-0b5f 0b61 Lo
-0b66 0b6f Nd
-0b70 So
-0b82 Mn
-0b83 Mc
-0b85 0b8a Lo
-0b8e 0b90 Lo
-0b92 0b95 Lo
-0b99 0b9a Lo
-0b9c Lo
-0b9e 0b9f Lo
-0ba3 0ba4 Lo
-0ba8 0baa Lo
-0bae 0bb5 Lo
-0bb7 0bb9 Lo
-0bbe 0bbf Mc
-0bc0 Mn
-0bc1 0bc2 Mc
-0bc6 0bc8 Mc
-0bca 0bcc Mc
-0bcd Mn
-0bd7 Mc
-0be7 0bef Nd
-0bf0 0bf2 No
-0c01 0c03 Mc
-0c05 0c0c Lo
-0c0e 0c10 Lo
-0c12 0c28 Lo
-0c2a 0c33 Lo
-0c35 0c39 Lo
-0c3e 0c40 Mn
-0c41 0c44 Mc
-0c46 0c48 Mn
-0c4a 0c4d Mn
-0c55 0c56 Mn
-0c60 0c61 Lo
-0c66 0c6f Nd
-0c82 0c83 Mc
-0c85 0c8c Lo
-0c8e 0c90 Lo
-0c92 0ca8 Lo
-0caa 0cb3 Lo
-0cb5 0cb9 Lo
-0cbe Mc
-0cbf Mn
-0cc0 0cc4 Mc
-0cc6 Mn
-0cc7 0cc8 Mc
-0cca 0ccb Mc
-0ccc 0ccd Mn
-0cd5 0cd6 Mc
-0cde Lo
-0ce0 0ce1 Lo
-0ce6 0cef Nd
-0d02 0d03 Mc
-0d05 0d0c Lo
-0d0e 0d10 Lo
-0d12 0d28 Lo
-0d2a 0d39 Lo
-0d3e 0d40 Mc
-0d41 0d43 Mn
-0d46 0d48 Mc
-0d4a 0d4c Mc
-0d4d Mn
-0d57 Mc
-0d60 0d61 Lo
-0d66 0d6f Nd
-0d82 0d83 Mc
-0d85 0d96 Lo
-0d9a 0db1 Lo
-0db3 0dbb Lo
-0dbd Lo
-0dc0 0dc6 Lo
-0dca Mn
-0dcf 0dd1 Mc
-0dd2 0dd4 Mn
-0dd6 Mn
-0dd8 0ddf Mc
-0df2 0df3 Mc
-0df4 Po
-0e01 0e30 Lo
-0e31 Mn
-0e32 0e33 Lo
-0e34 0e3a Mn
-0e3f Sc
-0e40 0e45 Lo
-0e46 Lm
-0e47 0e4e Mn
-0e4f Po
-0e50 0e59 Nd
-0e5a 0e5b Po
-0e81 0e82 Lo
-0e84 Lo
-0e87 0e88 Lo
-0e8a Lo
-0e8d Lo
-0e94 0e97 Lo
-0e99 0e9f Lo
-0ea1 0ea3 Lo
-0ea5 Lo
-0ea7 Lo
-0eaa 0eab Lo
-0ead 0eb0 Lo
-0eb1 Mn
-0eb2 0eb3 Lo
-0eb4 0eb9 Mn
-0ebb 0ebc Mn
-0ebd Lo
-0ec0 0ec4 Lo
-0ec6 Lm
-0ec8 0ecd Mn
-0ed0 0ed9 Nd
-0edc 0edd Lo
-0f00 Lo
-0f01 0f03 So
-0f04 0f12 Po
-0f13 0f17 So
-0f18 0f19 Mn
-0f1a 0f1f So
-0f20 0f29 Nd
-0f2a 0f33 No
-0f34 So
-0f35 Mn
-0f36 So
-0f37 Mn
-0f38 So
-0f39 Mn
-0f3a Ps
-0f3b Pe
-0f3c Ps
-0f3d Pe
-0f3e 0f3f Mc
-0f40 0f47 Lo
-0f49 0f6a Lo
-0f71 0f7e Mn
-0f7f Mc
-0f80 0f84 Mn
-0f85 Po
-0f86 0f87 Mn
-0f88 0f8b Lo
-0f90 0f97 Mn
-0f99 0fbc Mn
-0fbe 0fc5 So
-0fc6 Mn
-0fc7 0fcc So
-0fcf So
-1000 1021 Lo
-1023 1027 Lo
-1029 102a Lo
-102c Mc
-102d 1030 Mn
-1031 Mc
-1032 Mn
-1036 1037 Mn
-1038 Mc
-1039 Mn
-1040 1049 Nd
-104a 104f Po
-1050 1055 Lo
-1056 1057 Mc
-1058 1059 Mn
-10a0 10c5 Lu
-10d0 10f6 Lo
-10fb Po
-1100 1159 Lo
-115f 11a2 Lo
-11a8 11f9 Lo
-1200 1206 Lo
-1208 1246 Lo
-1248 Lo
-124a 124d Lo
-1250 1256 Lo
-1258 Lo
-125a 125d Lo
-1260 1286 Lo
-1288 Lo
-128a 128d Lo
-1290 12ae Lo
-12b0 Lo
-12b2 12b5 Lo
-12b8 12be Lo
-12c0 Lo
-12c2 12c5 Lo
-12c8 12ce Lo
-12d0 12d6 Lo
-12d8 12ee Lo
-12f0 130e Lo
-1310 Lo
-1312 1315 Lo
-1318 131e Lo
-1320 1346 Lo
-1348 135a Lo
-1361 1368 Po
-1369 1371 Nd
-1372 137c No
-13a0 13f4 Lo
-1401 166c Lo
-166d 166e Po
-166f 1676 Lo
-1680 Zs
-1681 169a Lo
-169b Ps
-169c Pe
-16a0 16ea Lo
-16eb 16ed Po
-16ee 16f0 No
-1780 17b3 Lo
-17b4 17b6 Mc
-17b7 17bd Mn
-17be 17c5 Mc
-17c6 Mn
-17c7 17c8 Mc
-17c9 17d3 Mn
-17d4 17da Po
-17db Sc
-17dc Po
-17e0 17e9 Nd
-1800 1805 Po
-1806 Pd
-1807 180a Po
-180b 180e Cf
-1810 1819 Nd
-1820 1842 Lo
-1843 Lm
-1844 1877 Lo
-1880 18a8 Lo
-18a9 Mn
-1e00 Lu
-1e01 Ll
-1e02 Lu
-1e03 Ll
-1e04 Lu
-1e05 Ll
-1e06 Lu
-1e07 Ll
-1e08 Lu
-1e09 Ll
-1e0a Lu
-1e0b Ll
-1e0c Lu
-1e0d Ll
-1e0e Lu
-1e0f Ll
-1e10 Lu
-1e11 Ll
-1e12 Lu
-1e13 Ll
-1e14 Lu
-1e15 Ll
-1e16 Lu
-1e17 Ll
-1e18 Lu
-1e19 Ll
-1e1a Lu
-1e1b Ll
-1e1c Lu
-1e1d Ll
-1e1e Lu
-1e1f Ll
-1e20 Lu
-1e21 Ll
-1e22 Lu
-1e23 Ll
-1e24 Lu
-1e25 Ll
-1e26 Lu
-1e27 Ll
-1e28 Lu
-1e29 Ll
-1e2a Lu
-1e2b Ll
-1e2c Lu
-1e2d Ll
-1e2e Lu
-1e2f Ll
-1e30 Lu
-1e31 Ll
-1e32 Lu
-1e33 Ll
-1e34 Lu
-1e35 Ll
-1e36 Lu
-1e37 Ll
-1e38 Lu
-1e39 Ll
-1e3a Lu
-1e3b Ll
-1e3c Lu
-1e3d Ll
-1e3e Lu
-1e3f Ll
-1e40 Lu
-1e41 Ll
-1e42 Lu
-1e43 Ll
-1e44 Lu
-1e45 Ll
-1e46 Lu
-1e47 Ll
-1e48 Lu
-1e49 Ll
-1e4a Lu
-1e4b Ll
-1e4c Lu
-1e4d Ll
-1e4e Lu
-1e4f Ll
-1e50 Lu
-1e51 Ll
-1e52 Lu
-1e53 Ll
-1e54 Lu
-1e55 Ll
-1e56 Lu
-1e57 Ll
-1e58 Lu
-1e59 Ll
-1e5a Lu
-1e5b Ll
-1e5c Lu
-1e5d Ll
-1e5e Lu
-1e5f Ll
-1e60 Lu
-1e61 Ll
-1e62 Lu
-1e63 Ll
-1e64 Lu
-1e65 Ll
-1e66 Lu
-1e67 Ll
-1e68 Lu
-1e69 Ll
-1e6a Lu
-1e6b Ll
-1e6c Lu
-1e6d Ll
-1e6e Lu
-1e6f Ll
-1e70 Lu
-1e71 Ll
-1e72 Lu
-1e73 Ll
-1e74 Lu
-1e75 Ll
-1e76 Lu
-1e77 Ll
-1e78 Lu
-1e79 Ll
-1e7a Lu
-1e7b Ll
-1e7c Lu
-1e7d Ll
-1e7e Lu
-1e7f Ll
-1e80 Lu
-1e81 Ll
-1e82 Lu
-1e83 Ll
-1e84 Lu
-1e85 Ll
-1e86 Lu
-1e87 Ll
-1e88 Lu
-1e89 Ll
-1e8a Lu
-1e8b Ll
-1e8c Lu
-1e8d Ll
-1e8e Lu
-1e8f Ll
-1e90 Lu
-1e91 Ll
-1e92 Lu
-1e93 Ll
-1e94 Lu
-1e95 1e9b Ll
-1ea0 Lu
-1ea1 Ll
-1ea2 Lu
-1ea3 Ll
-1ea4 Lu
-1ea5 Ll
-1ea6 Lu
-1ea7 Ll
-1ea8 Lu
-1ea9 Ll
-1eaa Lu
-1eab Ll
-1eac Lu
-1ead Ll
-1eae Lu
-1eaf Ll
-1eb0 Lu
-1eb1 Ll
-1eb2 Lu
-1eb3 Ll
-1eb4 Lu
-1eb5 Ll
-1eb6 Lu
-1eb7 Ll
-1eb8 Lu
-1eb9 Ll
-1eba Lu
-1ebb Ll
-1ebc Lu
-1ebd Ll
-1ebe Lu
-1ebf Ll
-1ec0 Lu
-1ec1 Ll
-1ec2 Lu
-1ec3 Ll
-1ec4 Lu
-1ec5 Ll
-1ec6 Lu
-1ec7 Ll
-1ec8 Lu
-1ec9 Ll
-1eca Lu
-1ecb Ll
-1ecc Lu
-1ecd Ll
-1ece Lu
-1ecf Ll
-1ed0 Lu
-1ed1 Ll
-1ed2 Lu
-1ed3 Ll
-1ed4 Lu
-1ed5 Ll
-1ed6 Lu
-1ed7 Ll
-1ed8 Lu
-1ed9 Ll
-1eda Lu
-1edb Ll
-1edc Lu
-1edd Ll
-1ede Lu
-1edf Ll
-1ee0 Lu
-1ee1 Ll
-1ee2 Lu
-1ee3 Ll
-1ee4 Lu
-1ee5 Ll
-1ee6 Lu
-1ee7 Ll
-1ee8 Lu
-1ee9 Ll
-1eea Lu
-1eeb Ll
-1eec Lu
-1eed Ll
-1eee Lu
-1eef Ll
-1ef0 Lu
-1ef1 Ll
-1ef2 Lu
-1ef3 Ll
-1ef4 Lu
-1ef5 Ll
-1ef6 Lu
-1ef7 Ll
-1ef8 Lu
-1ef9 Ll
-1f00 1f07 Ll
-1f08 1f0f Lu
-1f10 1f15 Ll
-1f18 1f1d Lu
-1f20 1f27 Ll
-1f28 1f2f Lu
-1f30 1f37 Ll
-1f38 1f3f Lu
-1f40 1f45 Ll
-1f48 1f4d Lu
-1f50 1f57 Ll
-1f59 Lu
-1f5b Lu
-1f5d Lu
-1f5f Lu
-1f60 1f67 Ll
-1f68 1f6f Lu
-1f70 1f7d Ll
-1f80 1f87 Ll
-1f88 1f8f Lt
-1f90 1f97 Ll
-1f98 1f9f Lt
-1fa0 1fa7 Ll
-1fa8 1faf Lt
-1fb0 1fb4 Ll
-1fb6 1fb7 Ll
-1fb8 1fbb Lu
-1fbc Lt
-1fbd Sk
-1fbe Ll
-1fbf 1fc1 Sk
-1fc2 1fc4 Ll
-1fc6 1fc7 Ll
-1fc8 1fcb Lu
-1fcc Lt
-1fcd 1fcf Sk
-1fd0 1fd3 Ll
-1fd6 1fd7 Ll
-1fd8 1fdb Lu
-1fdd 1fdf Sk
-1fe0 1fe7 Ll
-1fe8 1fec Lu
-1fed 1fef Sk
-1ff2 1ff4 Ll
-1ff6 1ff7 Ll
-1ff8 1ffb Lu
-1ffc Lt
-1ffd 1ffe Sk
-2000 200b Zs
-200c 200f Cf
-2010 2015 Pd
-2016 2017 Po
-2018 Pi
-2019 Pf
-201a Ps
-201b 201c Pi
-201d Pf
-201e Ps
-201f Pi
-2020 2027 Po
-2028 Zl
-2029 Zp
-202a 202e Cf
-202f Zs
-2030 2038 Po
-2039 Pi
-203a Pf
-203b 203e Po
-203f 2040 Pc
-2041 2043 Po
-2044 Sm
-2045 Ps
-2046 Pe
-2048 204d Po
-206a 206f Cf
-2070 No
-2074 2079 No
-207a 207c Sm
-207d Ps
-207e Pe
-207f Ll
-2080 2089 No
-208a 208c Sm
-208d Ps
-208e Pe
-20a0 20af Sc
-20d0 20dc Mn
-20dd 20e0 Me
-20e1 Mn
-20e2 20e3 Me
-2100 2101 So
-2102 Lu
-2103 2106 So
-2107 Lu
-2108 2109 So
-210a Ll
-210b 210d Lu
-210e 210f Ll
-2110 2112 Lu
-2113 Ll
-2114 So
-2115 Lu
-2116 2118 So
-2119 211d Lu
-211e 2123 So
-2124 Lu
-2125 So
-2126 Lu
-2127 So
-2128 Lu
-2129 So
-212a 212d Lu
-212e So
-212f Ll
-2130 2131 Lu
-2132 So
-2133 Lu
-2134 Ll
-2135 2138 Lo
-2139 Ll
-213a So
-2153 215f No
-2160 2183 Nl
-2190 2194 Sm
-2195 2199 So
-219a 219b Sm
-219c 219f So
-21a0 Sm
-21a1 21a2 So
-21a3 Sm
-21a4 21a5 So
-21a6 Sm
-21a7 21ad So
-21ae Sm
-21af 21cd So
-21ce 21cf Sm
-21d0 21d1 So
-21d2 Sm
-21d3 So
-21d4 Sm
-21d5 21f3 So
-2200 22f1 Sm
-2300 2307 So
-2308 230b Sm
-230c 231f So
-2320 2321 Sm
-2322 2328 So
-2329 Ps
-232a Pe
-232b 237b So
-237d 239a So
-2400 2426 So
-2440 244a So
-2460 249b No
-249c 24e9 So
-24ea No
-2500 2595 So
-25a0 25b6 So
-25b7 Sm
-25b8 25c0 So
-25c1 Sm
-25c2 25f7 So
-2600 2613 So
-2619 266e So
-266f Sm
-2670 2671 So
-2701 2704 So
-2706 2709 So
-270c 2727 So
-2729 274b So
-274d So
-274f 2752 So
-2756 So
-2758 275e So
-2761 2767 So
-2776 2793 No
-2794 So
-2798 27af So
-27b1 27be So
-2800 28ff So
-2e80 2e99 So
-2e9b 2ef3 So
-2f00 2fd5 So
-2ff0 2ffb So
-3000 Zs
-3001 3003 Po
-3004 So
-3005 Lm
-3006 Lo
-3007 Nl
-3008 Ps
-3009 Pe
-300a Ps
-300b Pe
-300c Ps
-300d Pe
-300e Ps
-300f Pe
-3010 Ps
-3011 Pe
-3012 3013 So
-3014 Ps
-3015 Pe
-3016 Ps
-3017 Pe
-3018 Ps
-3019 Pe
-301a Ps
-301b Pe
-301c Pd
-301d Ps
-301e 301f Pe
-3020 So
-3021 3029 Nl
-302a 302f Mn
-3030 Pd
-3031 3035 Lm
-3036 3037 So
-3038 303a Nl
-303e 303f So
-3041 3094 Lo
-3099 309a Mn
-309b 309c Sk
-309d 309e Lm
-30a1 30fa Lo
-30fb Pc
-30fc 30fe Lm
-3105 312c Lo
-3131 318e Lo
-3190 3191 So
-3192 3195 No
-3196 319f So
-31a0 31b7 Lo
-3200 321c So
-3220 3229 No
-322a 3243 So
-3260 327b So
-327f So
-3280 3289 No
-328a 32b0 So
-32c0 32cb So
-32d0 32fe So
-3300 3376 So
-337b 33dd So
-33e0 33fe So
-3400 4db5 Lo
-4e00 9fa5 Lo
-a000 a48c Lo
-a490 a4a1 So
-a4a4 a4b3 So
-a4b5 a4c0 So
-a4c2 a4c4 So
-a4c6 So
-ac00 d7a3 Lo
-d800 db7f Cs
-db80 dbff Cs
-dc00 dfff Cs
-e000 f8ff Co
-f900 fa2d Lo
-fb00 fb06 Ll
-fb13 fb17 Ll
-fb1d Lo
-fb1e Mn
-fb1f fb28 Lo
-fb29 Sm
-fb2a fb36 Lo
-fb38 fb3c Lo
-fb3e Lo
-fb40 fb41 Lo
-fb43 fb44 Lo
-fb46 fbb1 Lo
-fbd3 fd3d Lo
-fd3e Ps
-fd3f Pe
-fd50 fd8f Lo
-fd92 fdc7 Lo
-fdf0 fdfb Lo
-fe20 fe23 Mn
-fe30 Po
-fe31 fe32 Pd
-fe33 fe34 Pc
-fe35 Ps
-fe36 Pe
-fe37 Ps
-fe38 Pe
-fe39 Ps
-fe3a Pe
-fe3b Ps
-fe3c Pe
-fe3d Ps
-fe3e Pe
-fe3f Ps
-fe40 Pe
-fe41 Ps
-fe42 Pe
-fe43 Ps
-fe44 Pe
-fe49 fe4c Po
-fe4d fe4f Pc
-fe50 fe52 Po
-fe54 fe57 Po
-fe58 Pd
-fe59 Ps
-fe5a Pe
-fe5b Ps
-fe5c Pe
-fe5d Ps
-fe5e Pe
-fe5f fe61 Po
-fe62 Sm
-fe63 Pd
-fe64 fe66 Sm
-fe68 Po
-fe69 Sc
-fe6a fe6b Po
-fe70 fe72 Lo
-fe74 Lo
-fe76 fefc Lo
-feff Cf
-ff01 ff03 Po
-ff04 Sc
-ff05 ff07 Po
-ff08 Ps
-ff09 Pe
-ff0a Po
-ff0b Sm
-ff0c Po
-ff0d Pd
-ff0e ff0f Po
-ff10 ff19 Nd
-ff1a ff1b Po
-ff1c ff1e Sm
-ff1f ff20 Po
-ff21 ff3a Lu
-ff3b Ps
-ff3c Po
-ff3d Pe
-ff3e Sk
-ff3f Pc
-ff40 Sk
-ff41 ff5a Ll
-ff5b Ps
-ff5c Sm
-ff5d Pe
-ff5e Sm
-ff61 Po
-ff62 Ps
-ff63 Pe
-ff64 Po
-ff65 Pc
-ff66 ff6f Lo
-ff70 Lm
-ff71 ff9d Lo
-ff9e ff9f Lm
-ffa0 ffbe Lo
-ffc2 ffc7 Lo
-ffca ffcf Lo
-ffd2 ffd7 Lo
-ffda ffdc Lo
-ffe0 ffe1 Sc
-ffe2 Sm
-ffe3 Sk
-ffe4 So
-ffe5 ffe6 Sc
-ffe8 So
-ffe9 ffec Sm
-ffed ffee So
-fff9 fffb Cf
-fffc fffd So
-f0000 ffffd Co
-100000 10fffd Co
-END
diff --git a/contrib/perl5/lib/unicode/CombiningClass.pl b/contrib/perl5/lib/unicode/CombiningClass.pl
deleted file mode 100644
index 628b9c6..0000000
--- a/contrib/perl5/lib/unicode/CombiningClass.pl
+++ /dev/null
@@ -1,152 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0300 0314 230
-0315 232
-0316 0319 220
-031a 232
-031b 216
-031c 0320 220
-0321 0322 202
-0323 0326 220
-0327 0328 202
-0329 0333 220
-0334 0338 1
-0339 033c 220
-033d 0344 230
-0345 240
-0346 230
-0347 0349 220
-034a 034c 230
-034d 034e 220
-0360 0361 234
-0362 233
-0483 0486 230
-0591 220
-0592 0595 230
-0596 220
-0597 0599 230
-059a 222
-059b 220
-059c 05a1 230
-05a3 05a7 220
-05a8 05a9 230
-05aa 220
-05ab 05ac 230
-05ad 222
-05ae 228
-05af 230
-05b0 10
-05b1 11
-05b2 12
-05b3 13
-05b4 14
-05b5 15
-05b6 16
-05b7 17
-05b8 18
-05b9 19
-05bb 20
-05bc 21
-05bd 22
-05bf 23
-05c1 24
-05c2 25
-05c4 230
-064b 27
-064c 28
-064d 29
-064e 30
-064f 31
-0650 32
-0651 33
-0652 34
-0653 0654 230
-0655 220
-0670 35
-06d6 06dc 230
-06df 06e2 230
-06e3 220
-06e4 230
-06e7 06e8 230
-06ea 220
-06eb 06ec 230
-06ed 220
-0711 36
-0730 230
-0731 220
-0732 0733 230
-0734 220
-0735 0736 230
-0737 0739 220
-073a 230
-073b 073c 220
-073d 230
-073e 220
-073f 0741 230
-0742 220
-0743 230
-0744 220
-0745 230
-0746 220
-0747 230
-0748 220
-0749 074a 230
-093c 7
-094d 9
-0951 230
-0952 220
-0953 0954 230
-09bc 7
-09cd 9
-0a3c 7
-0a4d 9
-0abc 7
-0acd 9
-0b3c 7
-0b4d 9
-0bcd 9
-0c4d 9
-0c55 84
-0c56 91
-0ccd 9
-0d4d 9
-0dca 9
-0e38 0e39 103
-0e3a 9
-0e48 0e4b 107
-0eb8 0eb9 118
-0ec8 0ecb 122
-0f18 0f19 220
-0f35 220
-0f37 220
-0f39 216
-0f71 129
-0f72 130
-0f74 132
-0f7a 0f7d 130
-0f80 130
-0f82 0f83 230
-0f84 9
-0f86 0f87 230
-0fc6 220
-1037 7
-1039 9
-17d2 9
-18a9 228
-20d0 20d1 230
-20d2 20d3 1
-20d4 20d7 230
-20d8 20da 1
-20db 20dc 230
-20e1 230
-302a 218
-302b 228
-302c 232
-302d 222
-302e 302f 224
-3099 309a 8
-fb1e 26
-fe20 fe23 230
-END
diff --git a/contrib/perl5/lib/unicode/CompExcl.txt b/contrib/perl5/lib/unicode/CompExcl.txt
deleted file mode 100644
index 53f8467..0000000
--- a/contrib/perl5/lib/unicode/CompExcl.txt
+++ /dev/null
@@ -1,145 +0,0 @@
-# CompositionExclusions-2.txt
-#
-# Composition Exclusions
-# This file lists the characters from the UTR #15 Composition Exclusion Table.
-#
-# For more information, see
-# http://www.unicode.org/unicode/reports/tr15/#Primary Exclusion List Table
-
-# (1) Script Specifics
-# This list of characters cannot be derived from the UnicodeData file.
-
-0958 # DEVANAGARI LETTER QA
-0959 # DEVANAGARI LETTER KHHA
-095A # DEVANAGARI LETTER GHHA
-095B # DEVANAGARI LETTER ZA
-095C # DEVANAGARI LETTER DDDHA
-095D # DEVANAGARI LETTER RHA
-095E # DEVANAGARI LETTER FA
-095F # DEVANAGARI LETTER YYA
-09DC # BENGALI LETTER RRA
-09DD # BENGALI LETTER RHA
-09DF # BENGALI LETTER YYA
-0A33 # GURMUKHI LETTER LLA
-0A36 # GURMUKHI LETTER SHA
-0A59 # GURMUKHI LETTER KHHA
-0A5A # GURMUKHI LETTER GHHA
-0A5B # GURMUKHI LETTER ZA
-0A5E # GURMUKHI LETTER FA
-0B5C # ORIYA LETTER RRA
-0B5D # ORIYA LETTER RHA
-0F43 # TIBETAN LETTER GHA
-0F4D # TIBETAN LETTER DDHA
-0F52 # TIBETAN LETTER DHA
-0F57 # TIBETAN LETTER BHA
-0F5C # TIBETAN LETTER DZHA
-0F69 # TIBETAN LETTER KSSA
-0F76 # TIBETAN VOWEL SIGN VOCALIC R
-0F78 # TIBETAN VOWEL SIGN VOCALIC L
-0F93 # TIBETAN SUBJOINED LETTER GHA
-0F9D # TIBETAN SUBJOINED LETTER DDHA
-0FA2 # TIBETAN SUBJOINED LETTER DHA
-0FA7 # TIBETAN SUBJOINED LETTER BHA
-0FAC # TIBETAN SUBJOINED LETTER DZHA
-0FB9 # TIBETAN SUBJOINED LETTER KSSA
-FB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH
-FB2A # HEBREW LETTER SHIN WITH SHIN DOT
-FB2B # HEBREW LETTER SHIN WITH SIN DOT
-FB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
-FB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
-FB2E # HEBREW LETTER ALEF WITH PATAH
-FB2F # HEBREW LETTER ALEF WITH QAMATS
-FB30 # HEBREW LETTER ALEF WITH MAPIQ
-FB31 # HEBREW LETTER BET WITH DAGESH
-FB32 # HEBREW LETTER GIMEL WITH DAGESH
-FB33 # HEBREW LETTER DALET WITH DAGESH
-FB34 # HEBREW LETTER HE WITH MAPIQ
-FB35 # HEBREW LETTER VAV WITH DAGESH
-FB36 # HEBREW LETTER ZAYIN WITH DAGESH
-FB38 # HEBREW LETTER TET WITH DAGESH
-FB39 # HEBREW LETTER YOD WITH DAGESH
-FB3A # HEBREW LETTER FINAL KAF WITH DAGESH
-FB3B # HEBREW LETTER KAF WITH DAGESH
-FB3C # HEBREW LETTER LAMED WITH DAGESH
-FB3E # HEBREW LETTER MEM WITH DAGESH
-FB40 # HEBREW LETTER NUN WITH DAGESH
-FB41 # HEBREW LETTER SAMEKH WITH DAGESH
-FB43 # HEBREW LETTER FINAL PE WITH DAGESH
-FB44 # HEBREW LETTER PE WITH DAGESH
-FB46 # HEBREW LETTER TSADI WITH DAGESH
-FB47 # HEBREW LETTER QOF WITH DAGESH
-FB48 # HEBREW LETTER RESH WITH DAGESH
-FB49 # HEBREW LETTER SHIN WITH DAGESH
-FB4A # HEBREW LETTER TAV WITH DAGESH
-FB4B # HEBREW LETTER VAV WITH HOLAM
-FB4C # HEBREW LETTER BET WITH RAFE
-FB4D # HEBREW LETTER KAF WITH RAFE
-FB4E # HEBREW LETTER PE WITH RAFE
-
-# (2) Post Composition Version characters
-# These characters cannot be derived from the UnicodeData file.
-# (There are no characters in this category in this version of Unicode.)
-
-# (3) Singleton Decompositions
-# These characters can be derived from the UnicodeData file
-# by including all characters whose canonical decomposition
-# consists of a single character.
-# These characters are simply quoted here for reference.
-
-# 0340 COMBINING GRAVE TONE MARK
-# 0341 COMBINING ACUTE TONE MARK
-# 0343 COMBINING GREEK KORONIS
-# 0374 GREEK NUMERAL SIGN
-# 037E GREEK QUESTION MARK
-# 0387 GREEK ANO TELEIA
-# 1F71 GREEK SMALL LETTER ALPHA WITH OXIA
-# 1F73 GREEK SMALL LETTER EPSILON WITH OXIA
-# 1F75 GREEK SMALL LETTER ETA WITH OXIA
-# 1F77 GREEK SMALL LETTER IOTA WITH OXIA
-# 1F79 GREEK SMALL LETTER OMICRON WITH OXIA
-# 1F7B GREEK SMALL LETTER UPSILON WITH OXIA
-# 1F7D GREEK SMALL LETTER OMEGA WITH OXIA
-# 1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA
-# 1FBE GREEK PROSGEGRAMMENI
-# 1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA
-# 1FCB GREEK CAPITAL LETTER ETA WITH OXIA
-# 1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-# 1FDB GREEK CAPITAL LETTER IOTA WITH OXIA
-# 1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-# 1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA
-# 1FEE GREEK DIALYTIKA AND OXIA
-# 1FEF GREEK VARIA
-# 1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA
-# 1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA
-# 1FFD GREEK OXIA
-# 2000 EN QUAD
-# 2001 EM QUAD
-# 2126 OHM SIGN
-# 212A KELVIN SIGN
-# 212B ANGSTROM SIGN
-# 2329 LEFT-POINTING ANGLE BRACKET
-# 232A RIGHT-POINTING ANGLE BRACKET
-# F900 CJK COMPATIBILITY IDEOGRAPH-F900
-#.. FA0D CJK COMPATIBILITY IDEOGRAPH-FA0D
-# FA10 CJK COMPATIBILITY IDEOGRAPH-FA10
-# FA12 CJK COMPATIBILITY IDEOGRAPH-FA12
-# FA15 CJK COMPATIBILITY IDEOGRAPH-FA15
-#.. FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E
-# FA20 CJK COMPATIBILITY IDEOGRAPH-FA20
-# FA22 CJK COMPATIBILITY IDEOGRAPH-FA22
-# FA25 CJK COMPATIBILITY IDEOGRAPH-FA25
-# FA26 CJK COMPATIBILITY IDEOGRAPH-FA26
-# FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A
-#.. FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D
-
-# (4) Non-Starter Decompositions
-# These characters can be derived from the UnicodeData file
-# by including all characters whose canonical decomposition consists
-# of a sequence of characters, the first of which has a non-zero
-# combining class.
-# These characters are simply quoted here for reference.
-
-# 0344 COMBINING GREEK DIALYTIKA TONOS
-# 0F73 TIBETAN VOWEL SIGN II
-# 0F75 TIBETAN VOWEL SIGN UU
-# 0F81 TIBETAN VOWEL SIGN REVERSED II
diff --git a/contrib/perl5/lib/unicode/Decomposition.pl b/contrib/perl5/lib/unicode/Decomposition.pl
deleted file mode 100644
index 1fe29cd..0000000
--- a/contrib/perl5/lib/unicode/Decomposition.pl
+++ /dev/null
@@ -1,3470 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00a0 <noBreak> 0020
-00a8 <compat> 0020 0308
-00aa <super> 0061
-00af <compat> 0020 0304
-00b2 <super> 0032
-00b3 <super> 0033
-00b4 <compat> 0020 0301
-00b5 <compat> 03BC
-00b8 <compat> 0020 0327
-00b9 <super> 0031
-00ba <super> 006F
-00bc <fraction> 0031 2044 0034
-00bd <fraction> 0031 2044 0032
-00be <fraction> 0033 2044 0034
-00c0 0041 0300
-00c1 0041 0301
-00c2 0041 0302
-00c3 0041 0303
-00c4 0041 0308
-00c5 0041 030A
-00c7 0043 0327
-00c8 0045 0300
-00c9 0045 0301
-00ca 0045 0302
-00cb 0045 0308
-00cc 0049 0300
-00cd 0049 0301
-00ce 0049 0302
-00cf 0049 0308
-00d1 004E 0303
-00d2 004F 0300
-00d3 004F 0301
-00d4 004F 0302
-00d5 004F 0303
-00d6 004F 0308
-00d9 0055 0300
-00da 0055 0301
-00db 0055 0302
-00dc 0055 0308
-00dd 0059 0301
-00e0 0061 0300
-00e1 0061 0301
-00e2 0061 0302
-00e3 0061 0303
-00e4 0061 0308
-00e5 0061 030A
-00e7 0063 0327
-00e8 0065 0300
-00e9 0065 0301
-00ea 0065 0302
-00eb 0065 0308
-00ec 0069 0300
-00ed 0069 0301
-00ee 0069 0302
-00ef 0069 0308
-00f1 006E 0303
-00f2 006F 0300
-00f3 006F 0301
-00f4 006F 0302
-00f5 006F 0303
-00f6 006F 0308
-00f9 0075 0300
-00fa 0075 0301
-00fb 0075 0302
-00fc 0075 0308
-00fd 0079 0301
-00ff 0079 0308
-0100 0041 0304
-0101 0061 0304
-0102 0041 0306
-0103 0061 0306
-0104 0041 0328
-0105 0061 0328
-0106 0043 0301
-0107 0063 0301
-0108 0043 0302
-0109 0063 0302
-010a 0043 0307
-010b 0063 0307
-010c 0043 030C
-010d 0063 030C
-010e 0044 030C
-010f 0064 030C
-0112 0045 0304
-0113 0065 0304
-0114 0045 0306
-0115 0065 0306
-0116 0045 0307
-0117 0065 0307
-0118 0045 0328
-0119 0065 0328
-011a 0045 030C
-011b 0065 030C
-011c 0047 0302
-011d 0067 0302
-011e 0047 0306
-011f 0067 0306
-0120 0047 0307
-0121 0067 0307
-0122 0047 0327
-0123 0067 0327
-0124 0048 0302
-0125 0068 0302
-0128 0049 0303
-0129 0069 0303
-012a 0049 0304
-012b 0069 0304
-012c 0049 0306
-012d 0069 0306
-012e 0049 0328
-012f 0069 0328
-0130 0049 0307
-0132 <compat> 0049 004A
-0133 <compat> 0069 006A
-0134 004A 0302
-0135 006A 0302
-0136 004B 0327
-0137 006B 0327
-0139 004C 0301
-013a 006C 0301
-013b 004C 0327
-013c 006C 0327
-013d 004C 030C
-013e 006C 030C
-013f <compat> 004C 00B7
-0140 <compat> 006C 00B7
-0143 004E 0301
-0144 006E 0301
-0145 004E 0327
-0146 006E 0327
-0147 004E 030C
-0148 006E 030C
-0149 <compat> 02BC 006E
-014c 004F 0304
-014d 006F 0304
-014e 004F 0306
-014f 006F 0306
-0150 004F 030B
-0151 006F 030B
-0154 0052 0301
-0155 0072 0301
-0156 0052 0327
-0157 0072 0327
-0158 0052 030C
-0159 0072 030C
-015a 0053 0301
-015b 0073 0301
-015c 0053 0302
-015d 0073 0302
-015e 0053 0327
-015f 0073 0327
-0160 0053 030C
-0161 0073 030C
-0162 0054 0327
-0163 0074 0327
-0164 0054 030C
-0165 0074 030C
-0168 0055 0303
-0169 0075 0303
-016a 0055 0304
-016b 0075 0304
-016c 0055 0306
-016d 0075 0306
-016e 0055 030A
-016f 0075 030A
-0170 0055 030B
-0171 0075 030B
-0172 0055 0328
-0173 0075 0328
-0174 0057 0302
-0175 0077 0302
-0176 0059 0302
-0177 0079 0302
-0178 0059 0308
-0179 005A 0301
-017a 007A 0301
-017b 005A 0307
-017c 007A 0307
-017d 005A 030C
-017e 007A 030C
-017f <compat> 0073
-01a0 004F 031B
-01a1 006F 031B
-01af 0055 031B
-01b0 0075 031B
-01c4 <compat> 0044 017D
-01c5 <compat> 0044 017E
-01c6 <compat> 0064 017E
-01c7 <compat> 004C 004A
-01c8 <compat> 004C 006A
-01c9 <compat> 006C 006A
-01ca <compat> 004E 004A
-01cb <compat> 004E 006A
-01cc <compat> 006E 006A
-01cd 0041 030C
-01ce 0061 030C
-01cf 0049 030C
-01d0 0069 030C
-01d1 004F 030C
-01d2 006F 030C
-01d3 0055 030C
-01d4 0075 030C
-01d5 00DC 0304
-01d6 00FC 0304
-01d7 00DC 0301
-01d8 00FC 0301
-01d9 00DC 030C
-01da 00FC 030C
-01db 00DC 0300
-01dc 00FC 0300
-01de 00C4 0304
-01df 00E4 0304
-01e0 0226 0304
-01e1 0227 0304
-01e2 00C6 0304
-01e3 00E6 0304
-01e6 0047 030C
-01e7 0067 030C
-01e8 004B 030C
-01e9 006B 030C
-01ea 004F 0328
-01eb 006F 0328
-01ec 01EA 0304
-01ed 01EB 0304
-01ee 01B7 030C
-01ef 0292 030C
-01f0 006A 030C
-01f1 <compat> 0044 005A
-01f2 <compat> 0044 007A
-01f3 <compat> 0064 007A
-01f4 0047 0301
-01f5 0067 0301
-01f8 004E 0300
-01f9 006E 0300
-01fa 00C5 0301
-01fb 00E5 0301
-01fc 00C6 0301
-01fd 00E6 0301
-01fe 00D8 0301
-01ff 00F8 0301
-0200 0041 030F
-0201 0061 030F
-0202 0041 0311
-0203 0061 0311
-0204 0045 030F
-0205 0065 030F
-0206 0045 0311
-0207 0065 0311
-0208 0049 030F
-0209 0069 030F
-020a 0049 0311
-020b 0069 0311
-020c 004F 030F
-020d 006F 030F
-020e 004F 0311
-020f 006F 0311
-0210 0052 030F
-0211 0072 030F
-0212 0052 0311
-0213 0072 0311
-0214 0055 030F
-0215 0075 030F
-0216 0055 0311
-0217 0075 0311
-0218 0053 0326
-0219 0073 0326
-021a 0054 0326
-021b 0074 0326
-021e 0048 030C
-021f 0068 030C
-0226 0041 0307
-0227 0061 0307
-0228 0045 0327
-0229 0065 0327
-022a 00D6 0304
-022b 00F6 0304
-022c 00D5 0304
-022d 00F5 0304
-022e 004F 0307
-022f 006F 0307
-0230 022E 0304
-0231 022F 0304
-0232 0059 0304
-0233 0079 0304
-02b0 <super> 0068
-02b1 <super> 0266
-02b2 <super> 006A
-02b3 <super> 0072
-02b4 <super> 0279
-02b5 <super> 027B
-02b6 <super> 0281
-02b7 <super> 0077
-02b8 <super> 0079
-02d8 <compat> 0020 0306
-02d9 <compat> 0020 0307
-02da <compat> 0020 030A
-02db <compat> 0020 0328
-02dc <compat> 0020 0303
-02dd <compat> 0020 030B
-02e0 <super> 0263
-02e1 <super> 006C
-02e2 <super> 0073
-02e3 <super> 0078
-02e4 <super> 0295
-0340 0300
-0341 0301
-0343 0313
-0344 0308 0301
-0374 02B9
-037a <compat> 0020 0345
-037e 003B
-0384 <compat> 0020 0301
-0385 00A8 0301
-0386 0391 0301
-0387 00B7
-0388 0395 0301
-0389 0397 0301
-038a 0399 0301
-038c 039F 0301
-038e 03A5 0301
-038f 03A9 0301
-0390 03CA 0301
-03aa 0399 0308
-03ab 03A5 0308
-03ac 03B1 0301
-03ad 03B5 0301
-03ae 03B7 0301
-03af 03B9 0301
-03b0 03CB 0301
-03ca 03B9 0308
-03cb 03C5 0308
-03cc 03BF 0301
-03cd 03C5 0301
-03ce 03C9 0301
-03d0 <compat> 03B2
-03d1 <compat> 03B8
-03d2 <compat> 03A5
-03d3 03D2 0301
-03d4 03D2 0308
-03d5 <compat> 03C6
-03d6 <compat> 03C0
-03f0 <compat> 03BA
-03f1 <compat> 03C1
-03f2 <compat> 03C2
-0400 0415 0300
-0401 0415 0308
-0403 0413 0301
-0407 0406 0308
-040c 041A 0301
-040d 0418 0300
-040e 0423 0306
-0419 0418 0306
-0439 0438 0306
-0450 0435 0300
-0451 0435 0308
-0453 0433 0301
-0457 0456 0308
-045c 043A 0301
-045d 0438 0300
-045e 0443 0306
-0476 0474 030F
-0477 0475 030F
-04c1 0416 0306
-04c2 0436 0306
-04d0 0410 0306
-04d1 0430 0306
-04d2 0410 0308
-04d3 0430 0308
-04d6 0415 0306
-04d7 0435 0306
-04da 04D8 0308
-04db 04D9 0308
-04dc 0416 0308
-04dd 0436 0308
-04de 0417 0308
-04df 0437 0308
-04e2 0418 0304
-04e3 0438 0304
-04e4 0418 0308
-04e5 0438 0308
-04e6 041E 0308
-04e7 043E 0308
-04ea 04E8 0308
-04eb 04E9 0308
-04ec 042D 0308
-04ed 044D 0308
-04ee 0423 0304
-04ef 0443 0304
-04f0 0423 0308
-04f1 0443 0308
-04f2 0423 030B
-04f3 0443 030B
-04f4 0427 0308
-04f5 0447 0308
-04f8 042B 0308
-04f9 044B 0308
-0587 <compat> 0565 0582
-0622 0627 0653
-0623 0627 0654
-0624 0648 0654
-0625 0627 0655
-0626 064A 0654
-0675 <compat> 0627 0674
-0676 <compat> 0648 0674
-0677 <compat> 06C7 0674
-0678 <compat> 064A 0674
-06c0 06D5 0654
-06c2 06C1 0654
-06d3 06D2 0654
-0929 0928 093C
-0931 0930 093C
-0934 0933 093C
-0958 0915 093C
-0959 0916 093C
-095a 0917 093C
-095b 091C 093C
-095c 0921 093C
-095d 0922 093C
-095e 092B 093C
-095f 092F 093C
-09cb 09C7 09BE
-09cc 09C7 09D7
-09dc 09A1 09BC
-09dd 09A2 09BC
-09df 09AF 09BC
-0a33 0A32 0A3C
-0a36 0A38 0A3C
-0a59 0A16 0A3C
-0a5a 0A17 0A3C
-0a5b 0A1C 0A3C
-0a5e 0A2B 0A3C
-0b48 0B47 0B56
-0b4b 0B47 0B3E
-0b4c 0B47 0B57
-0b5c 0B21 0B3C
-0b5d 0B22 0B3C
-0b94 0B92 0BD7
-0bca 0BC6 0BBE
-0bcb 0BC7 0BBE
-0bcc 0BC6 0BD7
-0c48 0C46 0C56
-0cc0 0CBF 0CD5
-0cc7 0CC6 0CD5
-0cc8 0CC6 0CD6
-0cca 0CC6 0CC2
-0ccb 0CCA 0CD5
-0d4a 0D46 0D3E
-0d4b 0D47 0D3E
-0d4c 0D46 0D57
-0dda 0DD9 0DCA
-0ddc 0DD9 0DCF
-0ddd 0DDC 0DCA
-0dde 0DD9 0DDF
-0e33 <compat> 0E4D 0E32
-0eb3 <compat> 0ECD 0EB2
-0edc <compat> 0EAB 0E99
-0edd <compat> 0EAB 0EA1
-0f0c <noBreak> 0F0B
-0f43 0F42 0FB7
-0f4d 0F4C 0FB7
-0f52 0F51 0FB7
-0f57 0F56 0FB7
-0f5c 0F5B 0FB7
-0f69 0F40 0FB5
-0f73 0F71 0F72
-0f75 0F71 0F74
-0f76 0FB2 0F80
-0f77 <compat> 0FB2 0F81
-0f78 0FB3 0F80
-0f79 <compat> 0FB3 0F81
-0f81 0F71 0F80
-0f93 0F92 0FB7
-0f9d 0F9C 0FB7
-0fa2 0FA1 0FB7
-0fa7 0FA6 0FB7
-0fac 0FAB 0FB7
-0fb9 0F90 0FB5
-1026 1025 102E
-1e00 0041 0325
-1e01 0061 0325
-1e02 0042 0307
-1e03 0062 0307
-1e04 0042 0323
-1e05 0062 0323
-1e06 0042 0331
-1e07 0062 0331
-1e08 00C7 0301
-1e09 00E7 0301
-1e0a 0044 0307
-1e0b 0064 0307
-1e0c 0044 0323
-1e0d 0064 0323
-1e0e 0044 0331
-1e0f 0064 0331
-1e10 0044 0327
-1e11 0064 0327
-1e12 0044 032D
-1e13 0064 032D
-1e14 0112 0300
-1e15 0113 0300
-1e16 0112 0301
-1e17 0113 0301
-1e18 0045 032D
-1e19 0065 032D
-1e1a 0045 0330
-1e1b 0065 0330
-1e1c 0228 0306
-1e1d 0229 0306
-1e1e 0046 0307
-1e1f 0066 0307
-1e20 0047 0304
-1e21 0067 0304
-1e22 0048 0307
-1e23 0068 0307
-1e24 0048 0323
-1e25 0068 0323
-1e26 0048 0308
-1e27 0068 0308
-1e28 0048 0327
-1e29 0068 0327
-1e2a 0048 032E
-1e2b 0068 032E
-1e2c 0049 0330
-1e2d 0069 0330
-1e2e 00CF 0301
-1e2f 00EF 0301
-1e30 004B 0301
-1e31 006B 0301
-1e32 004B 0323
-1e33 006B 0323
-1e34 004B 0331
-1e35 006B 0331
-1e36 004C 0323
-1e37 006C 0323
-1e38 1E36 0304
-1e39 1E37 0304
-1e3a 004C 0331
-1e3b 006C 0331
-1e3c 004C 032D
-1e3d 006C 032D
-1e3e 004D 0301
-1e3f 006D 0301
-1e40 004D 0307
-1e41 006D 0307
-1e42 004D 0323
-1e43 006D 0323
-1e44 004E 0307
-1e45 006E 0307
-1e46 004E 0323
-1e47 006E 0323
-1e48 004E 0331
-1e49 006E 0331
-1e4a 004E 032D
-1e4b 006E 032D
-1e4c 00D5 0301
-1e4d 00F5 0301
-1e4e 00D5 0308
-1e4f 00F5 0308
-1e50 014C 0300
-1e51 014D 0300
-1e52 014C 0301
-1e53 014D 0301
-1e54 0050 0301
-1e55 0070 0301
-1e56 0050 0307
-1e57 0070 0307
-1e58 0052 0307
-1e59 0072 0307
-1e5a 0052 0323
-1e5b 0072 0323
-1e5c 1E5A 0304
-1e5d 1E5B 0304
-1e5e 0052 0331
-1e5f 0072 0331
-1e60 0053 0307
-1e61 0073 0307
-1e62 0053 0323
-1e63 0073 0323
-1e64 015A 0307
-1e65 015B 0307
-1e66 0160 0307
-1e67 0161 0307
-1e68 1E62 0307
-1e69 1E63 0307
-1e6a 0054 0307
-1e6b 0074 0307
-1e6c 0054 0323
-1e6d 0074 0323
-1e6e 0054 0331
-1e6f 0074 0331
-1e70 0054 032D
-1e71 0074 032D
-1e72 0055 0324
-1e73 0075 0324
-1e74 0055 0330
-1e75 0075 0330
-1e76 0055 032D
-1e77 0075 032D
-1e78 0168 0301
-1e79 0169 0301
-1e7a 016A 0308
-1e7b 016B 0308
-1e7c 0056 0303
-1e7d 0076 0303
-1e7e 0056 0323
-1e7f 0076 0323
-1e80 0057 0300
-1e81 0077 0300
-1e82 0057 0301
-1e83 0077 0301
-1e84 0057 0308
-1e85 0077 0308
-1e86 0057 0307
-1e87 0077 0307
-1e88 0057 0323
-1e89 0077 0323
-1e8a 0058 0307
-1e8b 0078 0307
-1e8c 0058 0308
-1e8d 0078 0308
-1e8e 0059 0307
-1e8f 0079 0307
-1e90 005A 0302
-1e91 007A 0302
-1e92 005A 0323
-1e93 007A 0323
-1e94 005A 0331
-1e95 007A 0331
-1e96 0068 0331
-1e97 0074 0308
-1e98 0077 030A
-1e99 0079 030A
-1e9a <compat> 0061 02BE
-1e9b 017F 0307
-1ea0 0041 0323
-1ea1 0061 0323
-1ea2 0041 0309
-1ea3 0061 0309
-1ea4 00C2 0301
-1ea5 00E2 0301
-1ea6 00C2 0300
-1ea7 00E2 0300
-1ea8 00C2 0309
-1ea9 00E2 0309
-1eaa 00C2 0303
-1eab 00E2 0303
-1eac 1EA0 0302
-1ead 1EA1 0302
-1eae 0102 0301
-1eaf 0103 0301
-1eb0 0102 0300
-1eb1 0103 0300
-1eb2 0102 0309
-1eb3 0103 0309
-1eb4 0102 0303
-1eb5 0103 0303
-1eb6 1EA0 0306
-1eb7 1EA1 0306
-1eb8 0045 0323
-1eb9 0065 0323
-1eba 0045 0309
-1ebb 0065 0309
-1ebc 0045 0303
-1ebd 0065 0303
-1ebe 00CA 0301
-1ebf 00EA 0301
-1ec0 00CA 0300
-1ec1 00EA 0300
-1ec2 00CA 0309
-1ec3 00EA 0309
-1ec4 00CA 0303
-1ec5 00EA 0303
-1ec6 1EB8 0302
-1ec7 1EB9 0302
-1ec8 0049 0309
-1ec9 0069 0309
-1eca 0049 0323
-1ecb 0069 0323
-1ecc 004F 0323
-1ecd 006F 0323
-1ece 004F 0309
-1ecf 006F 0309
-1ed0 00D4 0301
-1ed1 00F4 0301
-1ed2 00D4 0300
-1ed3 00F4 0300
-1ed4 00D4 0309
-1ed5 00F4 0309
-1ed6 00D4 0303
-1ed7 00F4 0303
-1ed8 1ECC 0302
-1ed9 1ECD 0302
-1eda 01A0 0301
-1edb 01A1 0301
-1edc 01A0 0300
-1edd 01A1 0300
-1ede 01A0 0309
-1edf 01A1 0309
-1ee0 01A0 0303
-1ee1 01A1 0303
-1ee2 01A0 0323
-1ee3 01A1 0323
-1ee4 0055 0323
-1ee5 0075 0323
-1ee6 0055 0309
-1ee7 0075 0309
-1ee8 01AF 0301
-1ee9 01B0 0301
-1eea 01AF 0300
-1eeb 01B0 0300
-1eec 01AF 0309
-1eed 01B0 0309
-1eee 01AF 0303
-1eef 01B0 0303
-1ef0 01AF 0323
-1ef1 01B0 0323
-1ef2 0059 0300
-1ef3 0079 0300
-1ef4 0059 0323
-1ef5 0079 0323
-1ef6 0059 0309
-1ef7 0079 0309
-1ef8 0059 0303
-1ef9 0079 0303
-1f00 03B1 0313
-1f01 03B1 0314
-1f02 1F00 0300
-1f03 1F01 0300
-1f04 1F00 0301
-1f05 1F01 0301
-1f06 1F00 0342
-1f07 1F01 0342
-1f08 0391 0313
-1f09 0391 0314
-1f0a 1F08 0300
-1f0b 1F09 0300
-1f0c 1F08 0301
-1f0d 1F09 0301
-1f0e 1F08 0342
-1f0f 1F09 0342
-1f10 03B5 0313
-1f11 03B5 0314
-1f12 1F10 0300
-1f13 1F11 0300
-1f14 1F10 0301
-1f15 1F11 0301
-1f18 0395 0313
-1f19 0395 0314
-1f1a 1F18 0300
-1f1b 1F19 0300
-1f1c 1F18 0301
-1f1d 1F19 0301
-1f20 03B7 0313
-1f21 03B7 0314
-1f22 1F20 0300
-1f23 1F21 0300
-1f24 1F20 0301
-1f25 1F21 0301
-1f26 1F20 0342
-1f27 1F21 0342
-1f28 0397 0313
-1f29 0397 0314
-1f2a 1F28 0300
-1f2b 1F29 0300
-1f2c 1F28 0301
-1f2d 1F29 0301
-1f2e 1F28 0342
-1f2f 1F29 0342
-1f30 03B9 0313
-1f31 03B9 0314
-1f32 1F30 0300
-1f33 1F31 0300
-1f34 1F30 0301
-1f35 1F31 0301
-1f36 1F30 0342
-1f37 1F31 0342
-1f38 0399 0313
-1f39 0399 0314
-1f3a 1F38 0300
-1f3b 1F39 0300
-1f3c 1F38 0301
-1f3d 1F39 0301
-1f3e 1F38 0342
-1f3f 1F39 0342
-1f40 03BF 0313
-1f41 03BF 0314
-1f42 1F40 0300
-1f43 1F41 0300
-1f44 1F40 0301
-1f45 1F41 0301
-1f48 039F 0313
-1f49 039F 0314
-1f4a 1F48 0300
-1f4b 1F49 0300
-1f4c 1F48 0301
-1f4d 1F49 0301
-1f50 03C5 0313
-1f51 03C5 0314
-1f52 1F50 0300
-1f53 1F51 0300
-1f54 1F50 0301
-1f55 1F51 0301
-1f56 1F50 0342
-1f57 1F51 0342
-1f59 03A5 0314
-1f5b 1F59 0300
-1f5d 1F59 0301
-1f5f 1F59 0342
-1f60 03C9 0313
-1f61 03C9 0314
-1f62 1F60 0300
-1f63 1F61 0300
-1f64 1F60 0301
-1f65 1F61 0301
-1f66 1F60 0342
-1f67 1F61 0342
-1f68 03A9 0313
-1f69 03A9 0314
-1f6a 1F68 0300
-1f6b 1F69 0300
-1f6c 1F68 0301
-1f6d 1F69 0301
-1f6e 1F68 0342
-1f6f 1F69 0342
-1f70 03B1 0300
-1f71 03AC
-1f72 03B5 0300
-1f73 03AD
-1f74 03B7 0300
-1f75 03AE
-1f76 03B9 0300
-1f77 03AF
-1f78 03BF 0300
-1f79 03CC
-1f7a 03C5 0300
-1f7b 03CD
-1f7c 03C9 0300
-1f7d 03CE
-1f80 1F00 0345
-1f81 1F01 0345
-1f82 1F02 0345
-1f83 1F03 0345
-1f84 1F04 0345
-1f85 1F05 0345
-1f86 1F06 0345
-1f87 1F07 0345
-1f88 1F08 0345
-1f89 1F09 0345
-1f8a 1F0A 0345
-1f8b 1F0B 0345
-1f8c 1F0C 0345
-1f8d 1F0D 0345
-1f8e 1F0E 0345
-1f8f 1F0F 0345
-1f90 1F20 0345
-1f91 1F21 0345
-1f92 1F22 0345
-1f93 1F23 0345
-1f94 1F24 0345
-1f95 1F25 0345
-1f96 1F26 0345
-1f97 1F27 0345
-1f98 1F28 0345
-1f99 1F29 0345
-1f9a 1F2A 0345
-1f9b 1F2B 0345
-1f9c 1F2C 0345
-1f9d 1F2D 0345
-1f9e 1F2E 0345
-1f9f 1F2F 0345
-1fa0 1F60 0345
-1fa1 1F61 0345
-1fa2 1F62 0345
-1fa3 1F63 0345
-1fa4 1F64 0345
-1fa5 1F65 0345
-1fa6 1F66 0345
-1fa7 1F67 0345
-1fa8 1F68 0345
-1fa9 1F69 0345
-1faa 1F6A 0345
-1fab 1F6B 0345
-1fac 1F6C 0345
-1fad 1F6D 0345
-1fae 1F6E 0345
-1faf 1F6F 0345
-1fb0 03B1 0306
-1fb1 03B1 0304
-1fb2 1F70 0345
-1fb3 03B1 0345
-1fb4 03AC 0345
-1fb6 03B1 0342
-1fb7 1FB6 0345
-1fb8 0391 0306
-1fb9 0391 0304
-1fba 0391 0300
-1fbb 0386
-1fbc 0391 0345
-1fbd <compat> 0020 0313
-1fbe 03B9
-1fbf <compat> 0020 0313
-1fc0 <compat> 0020 0342
-1fc1 00A8 0342
-1fc2 1F74 0345
-1fc3 03B7 0345
-1fc4 03AE 0345
-1fc6 03B7 0342
-1fc7 1FC6 0345
-1fc8 0395 0300
-1fc9 0388
-1fca 0397 0300
-1fcb 0389
-1fcc 0397 0345
-1fcd 1FBF 0300
-1fce 1FBF 0301
-1fcf 1FBF 0342
-1fd0 03B9 0306
-1fd1 03B9 0304
-1fd2 03CA 0300
-1fd3 0390
-1fd6 03B9 0342
-1fd7 03CA 0342
-1fd8 0399 0306
-1fd9 0399 0304
-1fda 0399 0300
-1fdb 038A
-1fdd 1FFE 0300
-1fde 1FFE 0301
-1fdf 1FFE 0342
-1fe0 03C5 0306
-1fe1 03C5 0304
-1fe2 03CB 0300
-1fe3 03B0
-1fe4 03C1 0313
-1fe5 03C1 0314
-1fe6 03C5 0342
-1fe7 03CB 0342
-1fe8 03A5 0306
-1fe9 03A5 0304
-1fea 03A5 0300
-1feb 038E
-1fec 03A1 0314
-1fed 00A8 0300
-1fee 0385
-1fef 0060
-1ff2 1F7C 0345
-1ff3 03C9 0345
-1ff4 03CE 0345
-1ff6 03C9 0342
-1ff7 1FF6 0345
-1ff8 039F 0300
-1ff9 038C
-1ffa 03A9 0300
-1ffb 038F
-1ffc 03A9 0345
-1ffd 00B4
-1ffe <compat> 0020 0314
-2000 2002
-2001 2003
-2002 2006 <compat> 0020
-2007 <noBreak> 0020
-2008 200a <compat> 0020
-2011 <noBreak> 2010
-2017 <compat> 0020 0333
-2024 <compat> 002E
-2025 <compat> 002E 002E
-2026 <compat> 002E 002E 002E
-202f <noBreak> 0020
-2033 <compat> 2032 2032
-2034 <compat> 2032 2032 2032
-2036 <compat> 2035 2035
-2037 <compat> 2035 2035 2035
-203c <compat> 0021 0021
-203e <compat> 0020 0305
-2048 <compat> 003F 0021
-2049 <compat> 0021 003F
-2070 <super> 0030
-2074 <super> 0034
-2075 <super> 0035
-2076 <super> 0036
-2077 <super> 0037
-2078 <super> 0038
-2079 <super> 0039
-207a <super> 002B
-207b <super> 2212
-207c <super> 003D
-207d <super> 0028
-207e <super> 0029
-207f <super> 006E
-2080 <sub> 0030
-2081 <sub> 0031
-2082 <sub> 0032
-2083 <sub> 0033
-2084 <sub> 0034
-2085 <sub> 0035
-2086 <sub> 0036
-2087 <sub> 0037
-2088 <sub> 0038
-2089 <sub> 0039
-208a <sub> 002B
-208b <sub> 2212
-208c <sub> 003D
-208d <sub> 0028
-208e <sub> 0029
-20a8 <compat> 0052 0073
-2100 <compat> 0061 002F 0063
-2101 <compat> 0061 002F 0073
-2102 <font> 0043
-2103 <compat> 00B0 0043
-2105 <compat> 0063 002F 006F
-2106 <compat> 0063 002F 0075
-2107 <compat> 0190
-2109 <compat> 00B0 0046
-210a <font> 0067
-210b 210d <font> 0048
-210e <font> 0068
-210f <font> 0127
-2110 2111 <font> 0049
-2112 <font> 004C
-2113 <font> 006C
-2115 <font> 004E
-2116 <compat> 004E 006F
-2119 <font> 0050
-211a <font> 0051
-211b 211d <font> 0052
-2120 <super> 0053 004D
-2121 <compat> 0054 0045 004C
-2122 <super> 0054 004D
-2124 <font> 005A
-2126 03A9
-2128 <font> 005A
-212a 004B
-212b 00C5
-212c <font> 0042
-212d <font> 0043
-212f <font> 0065
-2130 <font> 0045
-2131 <font> 0046
-2133 <font> 004D
-2134 <font> 006F
-2135 <compat> 05D0
-2136 <compat> 05D1
-2137 <compat> 05D2
-2138 <compat> 05D3
-2139 <font> 0069
-2153 <fraction> 0031 2044 0033
-2154 <fraction> 0032 2044 0033
-2155 <fraction> 0031 2044 0035
-2156 <fraction> 0032 2044 0035
-2157 <fraction> 0033 2044 0035
-2158 <fraction> 0034 2044 0035
-2159 <fraction> 0031 2044 0036
-215a <fraction> 0035 2044 0036
-215b <fraction> 0031 2044 0038
-215c <fraction> 0033 2044 0038
-215d <fraction> 0035 2044 0038
-215e <fraction> 0037 2044 0038
-215f <fraction> 0031 2044
-2160 <compat> 0049
-2161 <compat> 0049 0049
-2162 <compat> 0049 0049 0049
-2163 <compat> 0049 0056
-2164 <compat> 0056
-2165 <compat> 0056 0049
-2166 <compat> 0056 0049 0049
-2167 <compat> 0056 0049 0049 0049
-2168 <compat> 0049 0058
-2169 <compat> 0058
-216a <compat> 0058 0049
-216b <compat> 0058 0049 0049
-216c <compat> 004C
-216d <compat> 0043
-216e <compat> 0044
-216f <compat> 004D
-2170 <compat> 0069
-2171 <compat> 0069 0069
-2172 <compat> 0069 0069 0069
-2173 <compat> 0069 0076
-2174 <compat> 0076
-2175 <compat> 0076 0069
-2176 <compat> 0076 0069 0069
-2177 <compat> 0076 0069 0069 0069
-2178 <compat> 0069 0078
-2179 <compat> 0078
-217a <compat> 0078 0069
-217b <compat> 0078 0069 0069
-217c <compat> 006C
-217d <compat> 0063
-217e <compat> 0064
-217f <compat> 006D
-219a 2190 0338
-219b 2192 0338
-21ae 2194 0338
-21cd 21D0 0338
-21ce 21D4 0338
-21cf 21D2 0338
-2204 2203 0338
-2209 2208 0338
-220c 220B 0338
-2224 2223 0338
-2226 2225 0338
-222c <compat> 222B 222B
-222d <compat> 222B 222B 222B
-222f <compat> 222E 222E
-2230 <compat> 222E 222E 222E
-2241 223C 0338
-2244 2243 0338
-2247 2245 0338
-2249 2248 0338
-2260 003D 0338
-2262 2261 0338
-226d 224D 0338
-226e 003C 0338
-226f 003E 0338
-2270 2264 0338
-2271 2265 0338
-2274 2272 0338
-2275 2273 0338
-2278 2276 0338
-2279 2277 0338
-2280 227A 0338
-2281 227B 0338
-2284 2282 0338
-2285 2283 0338
-2288 2286 0338
-2289 2287 0338
-22ac 22A2 0338
-22ad 22A8 0338
-22ae 22A9 0338
-22af 22AB 0338
-22e0 227C 0338
-22e1 227D 0338
-22e2 2291 0338
-22e3 2292 0338
-22ea 22B2 0338
-22eb 22B3 0338
-22ec 22B4 0338
-22ed 22B5 0338
-2329 3008
-232a 3009
-2460 <circle> 0031
-2461 <circle> 0032
-2462 <circle> 0033
-2463 <circle> 0034
-2464 <circle> 0035
-2465 <circle> 0036
-2466 <circle> 0037
-2467 <circle> 0038
-2468 <circle> 0039
-2469 <circle> 0031 0030
-246a <circle> 0031 0031
-246b <circle> 0031 0032
-246c <circle> 0031 0033
-246d <circle> 0031 0034
-246e <circle> 0031 0035
-246f <circle> 0031 0036
-2470 <circle> 0031 0037
-2471 <circle> 0031 0038
-2472 <circle> 0031 0039
-2473 <circle> 0032 0030
-2474 <compat> 0028 0031 0029
-2475 <compat> 0028 0032 0029
-2476 <compat> 0028 0033 0029
-2477 <compat> 0028 0034 0029
-2478 <compat> 0028 0035 0029
-2479 <compat> 0028 0036 0029
-247a <compat> 0028 0037 0029
-247b <compat> 0028 0038 0029
-247c <compat> 0028 0039 0029
-247d <compat> 0028 0031 0030 0029
-247e <compat> 0028 0031 0031 0029
-247f <compat> 0028 0031 0032 0029
-2480 <compat> 0028 0031 0033 0029
-2481 <compat> 0028 0031 0034 0029
-2482 <compat> 0028 0031 0035 0029
-2483 <compat> 0028 0031 0036 0029
-2484 <compat> 0028 0031 0037 0029
-2485 <compat> 0028 0031 0038 0029
-2486 <compat> 0028 0031 0039 0029
-2487 <compat> 0028 0032 0030 0029
-2488 <compat> 0031 002E
-2489 <compat> 0032 002E
-248a <compat> 0033 002E
-248b <compat> 0034 002E
-248c <compat> 0035 002E
-248d <compat> 0036 002E
-248e <compat> 0037 002E
-248f <compat> 0038 002E
-2490 <compat> 0039 002E
-2491 <compat> 0031 0030 002E
-2492 <compat> 0031 0031 002E
-2493 <compat> 0031 0032 002E
-2494 <compat> 0031 0033 002E
-2495 <compat> 0031 0034 002E
-2496 <compat> 0031 0035 002E
-2497 <compat> 0031 0036 002E
-2498 <compat> 0031 0037 002E
-2499 <compat> 0031 0038 002E
-249a <compat> 0031 0039 002E
-249b <compat> 0032 0030 002E
-249c <compat> 0028 0061 0029
-249d <compat> 0028 0062 0029
-249e <compat> 0028 0063 0029
-249f <compat> 0028 0064 0029
-24a0 <compat> 0028 0065 0029
-24a1 <compat> 0028 0066 0029
-24a2 <compat> 0028 0067 0029
-24a3 <compat> 0028 0068 0029
-24a4 <compat> 0028 0069 0029
-24a5 <compat> 0028 006A 0029
-24a6 <compat> 0028 006B 0029
-24a7 <compat> 0028 006C 0029
-24a8 <compat> 0028 006D 0029
-24a9 <compat> 0028 006E 0029
-24aa <compat> 0028 006F 0029
-24ab <compat> 0028 0070 0029
-24ac <compat> 0028 0071 0029
-24ad <compat> 0028 0072 0029
-24ae <compat> 0028 0073 0029
-24af <compat> 0028 0074 0029
-24b0 <compat> 0028 0075 0029
-24b1 <compat> 0028 0076 0029
-24b2 <compat> 0028 0077 0029
-24b3 <compat> 0028 0078 0029
-24b4 <compat> 0028 0079 0029
-24b5 <compat> 0028 007A 0029
-24b6 <circle> 0041
-24b7 <circle> 0042
-24b8 <circle> 0043
-24b9 <circle> 0044
-24ba <circle> 0045
-24bb <circle> 0046
-24bc <circle> 0047
-24bd <circle> 0048
-24be <circle> 0049
-24bf <circle> 004A
-24c0 <circle> 004B
-24c1 <circle> 004C
-24c2 <circle> 004D
-24c3 <circle> 004E
-24c4 <circle> 004F
-24c5 <circle> 0050
-24c6 <circle> 0051
-24c7 <circle> 0052
-24c8 <circle> 0053
-24c9 <circle> 0054
-24ca <circle> 0055
-24cb <circle> 0056
-24cc <circle> 0057
-24cd <circle> 0058
-24ce <circle> 0059
-24cf <circle> 005A
-24d0 <circle> 0061
-24d1 <circle> 0062
-24d2 <circle> 0063
-24d3 <circle> 0064
-24d4 <circle> 0065
-24d5 <circle> 0066
-24d6 <circle> 0067
-24d7 <circle> 0068
-24d8 <circle> 0069
-24d9 <circle> 006A
-24da <circle> 006B
-24db <circle> 006C
-24dc <circle> 006D
-24dd <circle> 006E
-24de <circle> 006F
-24df <circle> 0070
-24e0 <circle> 0071
-24e1 <circle> 0072
-24e2 <circle> 0073
-24e3 <circle> 0074
-24e4 <circle> 0075
-24e5 <circle> 0076
-24e6 <circle> 0077
-24e7 <circle> 0078
-24e8 <circle> 0079
-24e9 <circle> 007A
-24ea <circle> 0030
-2e9f <compat> 6BCD
-2ef3 <compat> 9F9F
-2f00 <compat> 4E00
-2f01 <compat> 4E28
-2f02 <compat> 4E36
-2f03 <compat> 4E3F
-2f04 <compat> 4E59
-2f05 <compat> 4E85
-2f06 <compat> 4E8C
-2f07 <compat> 4EA0
-2f08 <compat> 4EBA
-2f09 <compat> 513F
-2f0a <compat> 5165
-2f0b <compat> 516B
-2f0c <compat> 5182
-2f0d <compat> 5196
-2f0e <compat> 51AB
-2f0f <compat> 51E0
-2f10 <compat> 51F5
-2f11 <compat> 5200
-2f12 <compat> 529B
-2f13 <compat> 52F9
-2f14 <compat> 5315
-2f15 <compat> 531A
-2f16 <compat> 5338
-2f17 <compat> 5341
-2f18 <compat> 535C
-2f19 <compat> 5369
-2f1a <compat> 5382
-2f1b <compat> 53B6
-2f1c <compat> 53C8
-2f1d <compat> 53E3
-2f1e <compat> 56D7
-2f1f <compat> 571F
-2f20 <compat> 58EB
-2f21 <compat> 5902
-2f22 <compat> 590A
-2f23 <compat> 5915
-2f24 <compat> 5927
-2f25 <compat> 5973
-2f26 <compat> 5B50
-2f27 <compat> 5B80
-2f28 <compat> 5BF8
-2f29 <compat> 5C0F
-2f2a <compat> 5C22
-2f2b <compat> 5C38
-2f2c <compat> 5C6E
-2f2d <compat> 5C71
-2f2e <compat> 5DDB
-2f2f <compat> 5DE5
-2f30 <compat> 5DF1
-2f31 <compat> 5DFE
-2f32 <compat> 5E72
-2f33 <compat> 5E7A
-2f34 <compat> 5E7F
-2f35 <compat> 5EF4
-2f36 <compat> 5EFE
-2f37 <compat> 5F0B
-2f38 <compat> 5F13
-2f39 <compat> 5F50
-2f3a <compat> 5F61
-2f3b <compat> 5F73
-2f3c <compat> 5FC3
-2f3d <compat> 6208
-2f3e <compat> 6236
-2f3f <compat> 624B
-2f40 <compat> 652F
-2f41 <compat> 6534
-2f42 <compat> 6587
-2f43 <compat> 6597
-2f44 <compat> 65A4
-2f45 <compat> 65B9
-2f46 <compat> 65E0
-2f47 <compat> 65E5
-2f48 <compat> 66F0
-2f49 <compat> 6708
-2f4a <compat> 6728
-2f4b <compat> 6B20
-2f4c <compat> 6B62
-2f4d <compat> 6B79
-2f4e <compat> 6BB3
-2f4f <compat> 6BCB
-2f50 <compat> 6BD4
-2f51 <compat> 6BDB
-2f52 <compat> 6C0F
-2f53 <compat> 6C14
-2f54 <compat> 6C34
-2f55 <compat> 706B
-2f56 <compat> 722A
-2f57 <compat> 7236
-2f58 <compat> 723B
-2f59 <compat> 723F
-2f5a <compat> 7247
-2f5b <compat> 7259
-2f5c <compat> 725B
-2f5d <compat> 72AC
-2f5e <compat> 7384
-2f5f <compat> 7389
-2f60 <compat> 74DC
-2f61 <compat> 74E6
-2f62 <compat> 7518
-2f63 <compat> 751F
-2f64 <compat> 7528
-2f65 <compat> 7530
-2f66 <compat> 758B
-2f67 <compat> 7592
-2f68 <compat> 7676
-2f69 <compat> 767D
-2f6a <compat> 76AE
-2f6b <compat> 76BF
-2f6c <compat> 76EE
-2f6d <compat> 77DB
-2f6e <compat> 77E2
-2f6f <compat> 77F3
-2f70 <compat> 793A
-2f71 <compat> 79B8
-2f72 <compat> 79BE
-2f73 <compat> 7A74
-2f74 <compat> 7ACB
-2f75 <compat> 7AF9
-2f76 <compat> 7C73
-2f77 <compat> 7CF8
-2f78 <compat> 7F36
-2f79 <compat> 7F51
-2f7a <compat> 7F8A
-2f7b <compat> 7FBD
-2f7c <compat> 8001
-2f7d <compat> 800C
-2f7e <compat> 8012
-2f7f <compat> 8033
-2f80 <compat> 807F
-2f81 <compat> 8089
-2f82 <compat> 81E3
-2f83 <compat> 81EA
-2f84 <compat> 81F3
-2f85 <compat> 81FC
-2f86 <compat> 820C
-2f87 <compat> 821B
-2f88 <compat> 821F
-2f89 <compat> 826E
-2f8a <compat> 8272
-2f8b <compat> 8278
-2f8c <compat> 864D
-2f8d <compat> 866B
-2f8e <compat> 8840
-2f8f <compat> 884C
-2f90 <compat> 8863
-2f91 <compat> 897E
-2f92 <compat> 898B
-2f93 <compat> 89D2
-2f94 <compat> 8A00
-2f95 <compat> 8C37
-2f96 <compat> 8C46
-2f97 <compat> 8C55
-2f98 <compat> 8C78
-2f99 <compat> 8C9D
-2f9a <compat> 8D64
-2f9b <compat> 8D70
-2f9c <compat> 8DB3
-2f9d <compat> 8EAB
-2f9e <compat> 8ECA
-2f9f <compat> 8F9B
-2fa0 <compat> 8FB0
-2fa1 <compat> 8FB5
-2fa2 <compat> 9091
-2fa3 <compat> 9149
-2fa4 <compat> 91C6
-2fa5 <compat> 91CC
-2fa6 <compat> 91D1
-2fa7 <compat> 9577
-2fa8 <compat> 9580
-2fa9 <compat> 961C
-2faa <compat> 96B6
-2fab <compat> 96B9
-2fac <compat> 96E8
-2fad <compat> 9751
-2fae <compat> 975E
-2faf <compat> 9762
-2fb0 <compat> 9769
-2fb1 <compat> 97CB
-2fb2 <compat> 97ED
-2fb3 <compat> 97F3
-2fb4 <compat> 9801
-2fb5 <compat> 98A8
-2fb6 <compat> 98DB
-2fb7 <compat> 98DF
-2fb8 <compat> 9996
-2fb9 <compat> 9999
-2fba <compat> 99AC
-2fbb <compat> 9AA8
-2fbc <compat> 9AD8
-2fbd <compat> 9ADF
-2fbe <compat> 9B25
-2fbf <compat> 9B2F
-2fc0 <compat> 9B32
-2fc1 <compat> 9B3C
-2fc2 <compat> 9B5A
-2fc3 <compat> 9CE5
-2fc4 <compat> 9E75
-2fc5 <compat> 9E7F
-2fc6 <compat> 9EA5
-2fc7 <compat> 9EBB
-2fc8 <compat> 9EC3
-2fc9 <compat> 9ECD
-2fca <compat> 9ED1
-2fcb <compat> 9EF9
-2fcc <compat> 9EFD
-2fcd <compat> 9F0E
-2fce <compat> 9F13
-2fcf <compat> 9F20
-2fd0 <compat> 9F3B
-2fd1 <compat> 9F4A
-2fd2 <compat> 9F52
-2fd3 <compat> 9F8D
-2fd4 <compat> 9F9C
-2fd5 <compat> 9FA0
-3000 <wide> 0020
-3036 <compat> 3012
-3038 <compat> 5341
-3039 <compat> 5344
-303a <compat> 5345
-304c 304B 3099
-304e 304D 3099
-3050 304F 3099
-3052 3051 3099
-3054 3053 3099
-3056 3055 3099
-3058 3057 3099
-305a 3059 3099
-305c 305B 3099
-305e 305D 3099
-3060 305F 3099
-3062 3061 3099
-3065 3064 3099
-3067 3066 3099
-3069 3068 3099
-3070 306F 3099
-3071 306F 309A
-3073 3072 3099
-3074 3072 309A
-3076 3075 3099
-3077 3075 309A
-3079 3078 3099
-307a 3078 309A
-307c 307B 3099
-307d 307B 309A
-3094 3046 3099
-309b <compat> 0020 3099
-309c <compat> 0020 309A
-309e 309D 3099
-30ac 30AB 3099
-30ae 30AD 3099
-30b0 30AF 3099
-30b2 30B1 3099
-30b4 30B3 3099
-30b6 30B5 3099
-30b8 30B7 3099
-30ba 30B9 3099
-30bc 30BB 3099
-30be 30BD 3099
-30c0 30BF 3099
-30c2 30C1 3099
-30c5 30C4 3099
-30c7 30C6 3099
-30c9 30C8 3099
-30d0 30CF 3099
-30d1 30CF 309A
-30d3 30D2 3099
-30d4 30D2 309A
-30d6 30D5 3099
-30d7 30D5 309A
-30d9 30D8 3099
-30da 30D8 309A
-30dc 30DB 3099
-30dd 30DB 309A
-30f4 30A6 3099
-30f7 30EF 3099
-30f8 30F0 3099
-30f9 30F1 3099
-30fa 30F2 3099
-30fe 30FD 3099
-3131 <compat> 1100
-3132 <compat> 1101
-3133 <compat> 11AA
-3134 <compat> 1102
-3135 <compat> 11AC
-3136 <compat> 11AD
-3137 <compat> 1103
-3138 <compat> 1104
-3139 <compat> 1105
-313a <compat> 11B0
-313b <compat> 11B1
-313c <compat> 11B2
-313d <compat> 11B3
-313e <compat> 11B4
-313f <compat> 11B5
-3140 <compat> 111A
-3141 <compat> 1106
-3142 <compat> 1107
-3143 <compat> 1108
-3144 <compat> 1121
-3145 <compat> 1109
-3146 <compat> 110A
-3147 <compat> 110B
-3148 <compat> 110C
-3149 <compat> 110D
-314a <compat> 110E
-314b <compat> 110F
-314c <compat> 1110
-314d <compat> 1111
-314e <compat> 1112
-314f <compat> 1161
-3150 <compat> 1162
-3151 <compat> 1163
-3152 <compat> 1164
-3153 <compat> 1165
-3154 <compat> 1166
-3155 <compat> 1167
-3156 <compat> 1168
-3157 <compat> 1169
-3158 <compat> 116A
-3159 <compat> 116B
-315a <compat> 116C
-315b <compat> 116D
-315c <compat> 116E
-315d <compat> 116F
-315e <compat> 1170
-315f <compat> 1171
-3160 <compat> 1172
-3161 <compat> 1173
-3162 <compat> 1174
-3163 <compat> 1175
-3164 <compat> 1160
-3165 <compat> 1114
-3166 <compat> 1115
-3167 <compat> 11C7
-3168 <compat> 11C8
-3169 <compat> 11CC
-316a <compat> 11CE
-316b <compat> 11D3
-316c <compat> 11D7
-316d <compat> 11D9
-316e <compat> 111C
-316f <compat> 11DD
-3170 <compat> 11DF
-3171 <compat> 111D
-3172 <compat> 111E
-3173 <compat> 1120
-3174 <compat> 1122
-3175 <compat> 1123
-3176 <compat> 1127
-3177 <compat> 1129
-3178 <compat> 112B
-3179 <compat> 112C
-317a <compat> 112D
-317b <compat> 112E
-317c <compat> 112F
-317d <compat> 1132
-317e <compat> 1136
-317f <compat> 1140
-3180 <compat> 1147
-3181 <compat> 114C
-3182 <compat> 11F1
-3183 <compat> 11F2
-3184 <compat> 1157
-3185 <compat> 1158
-3186 <compat> 1159
-3187 <compat> 1184
-3188 <compat> 1185
-3189 <compat> 1188
-318a <compat> 1191
-318b <compat> 1192
-318c <compat> 1194
-318d <compat> 119E
-318e <compat> 11A1
-3192 <super> 4E00
-3193 <super> 4E8C
-3194 <super> 4E09
-3195 <super> 56DB
-3196 <super> 4E0A
-3197 <super> 4E2D
-3198 <super> 4E0B
-3199 <super> 7532
-319a <super> 4E59
-319b <super> 4E19
-319c <super> 4E01
-319d <super> 5929
-319e <super> 5730
-319f <super> 4EBA
-3200 <compat> 0028 1100 0029
-3201 <compat> 0028 1102 0029
-3202 <compat> 0028 1103 0029
-3203 <compat> 0028 1105 0029
-3204 <compat> 0028 1106 0029
-3205 <compat> 0028 1107 0029
-3206 <compat> 0028 1109 0029
-3207 <compat> 0028 110B 0029
-3208 <compat> 0028 110C 0029
-3209 <compat> 0028 110E 0029
-320a <compat> 0028 110F 0029
-320b <compat> 0028 1110 0029
-320c <compat> 0028 1111 0029
-320d <compat> 0028 1112 0029
-320e <compat> 0028 1100 1161 0029
-320f <compat> 0028 1102 1161 0029
-3210 <compat> 0028 1103 1161 0029
-3211 <compat> 0028 1105 1161 0029
-3212 <compat> 0028 1106 1161 0029
-3213 <compat> 0028 1107 1161 0029
-3214 <compat> 0028 1109 1161 0029
-3215 <compat> 0028 110B 1161 0029
-3216 <compat> 0028 110C 1161 0029
-3217 <compat> 0028 110E 1161 0029
-3218 <compat> 0028 110F 1161 0029
-3219 <compat> 0028 1110 1161 0029
-321a <compat> 0028 1111 1161 0029
-321b <compat> 0028 1112 1161 0029
-321c <compat> 0028 110C 116E 0029
-3220 <compat> 0028 4E00 0029
-3221 <compat> 0028 4E8C 0029
-3222 <compat> 0028 4E09 0029
-3223 <compat> 0028 56DB 0029
-3224 <compat> 0028 4E94 0029
-3225 <compat> 0028 516D 0029
-3226 <compat> 0028 4E03 0029
-3227 <compat> 0028 516B 0029
-3228 <compat> 0028 4E5D 0029
-3229 <compat> 0028 5341 0029
-322a <compat> 0028 6708 0029
-322b <compat> 0028 706B 0029
-322c <compat> 0028 6C34 0029
-322d <compat> 0028 6728 0029
-322e <compat> 0028 91D1 0029
-322f <compat> 0028 571F 0029
-3230 <compat> 0028 65E5 0029
-3231 <compat> 0028 682A 0029
-3232 <compat> 0028 6709 0029
-3233 <compat> 0028 793E 0029
-3234 <compat> 0028 540D 0029
-3235 <compat> 0028 7279 0029
-3236 <compat> 0028 8CA1 0029
-3237 <compat> 0028 795D 0029
-3238 <compat> 0028 52B4 0029
-3239 <compat> 0028 4EE3 0029
-323a <compat> 0028 547C 0029
-323b <compat> 0028 5B66 0029
-323c <compat> 0028 76E3 0029
-323d <compat> 0028 4F01 0029
-323e <compat> 0028 8CC7 0029
-323f <compat> 0028 5354 0029
-3240 <compat> 0028 796D 0029
-3241 <compat> 0028 4F11 0029
-3242 <compat> 0028 81EA 0029
-3243 <compat> 0028 81F3 0029
-3260 <circle> 1100
-3261 <circle> 1102
-3262 <circle> 1103
-3263 <circle> 1105
-3264 <circle> 1106
-3265 <circle> 1107
-3266 <circle> 1109
-3267 <circle> 110B
-3268 <circle> 110C
-3269 <circle> 110E
-326a <circle> 110F
-326b <circle> 1110
-326c <circle> 1111
-326d <circle> 1112
-326e <circle> 1100 1161
-326f <circle> 1102 1161
-3270 <circle> 1103 1161
-3271 <circle> 1105 1161
-3272 <circle> 1106 1161
-3273 <circle> 1107 1161
-3274 <circle> 1109 1161
-3275 <circle> 110B 1161
-3276 <circle> 110C 1161
-3277 <circle> 110E 1161
-3278 <circle> 110F 1161
-3279 <circle> 1110 1161
-327a <circle> 1111 1161
-327b <circle> 1112 1161
-3280 <circle> 4E00
-3281 <circle> 4E8C
-3282 <circle> 4E09
-3283 <circle> 56DB
-3284 <circle> 4E94
-3285 <circle> 516D
-3286 <circle> 4E03
-3287 <circle> 516B
-3288 <circle> 4E5D
-3289 <circle> 5341
-328a <circle> 6708
-328b <circle> 706B
-328c <circle> 6C34
-328d <circle> 6728
-328e <circle> 91D1
-328f <circle> 571F
-3290 <circle> 65E5
-3291 <circle> 682A
-3292 <circle> 6709
-3293 <circle> 793E
-3294 <circle> 540D
-3295 <circle> 7279
-3296 <circle> 8CA1
-3297 <circle> 795D
-3298 <circle> 52B4
-3299 <circle> 79D8
-329a <circle> 7537
-329b <circle> 5973
-329c <circle> 9069
-329d <circle> 512A
-329e <circle> 5370
-329f <circle> 6CE8
-32a0 <circle> 9805
-32a1 <circle> 4F11
-32a2 <circle> 5199
-32a3 <circle> 6B63
-32a4 <circle> 4E0A
-32a5 <circle> 4E2D
-32a6 <circle> 4E0B
-32a7 <circle> 5DE6
-32a8 <circle> 53F3
-32a9 <circle> 533B
-32aa <circle> 5B97
-32ab <circle> 5B66
-32ac <circle> 76E3
-32ad <circle> 4F01
-32ae <circle> 8CC7
-32af <circle> 5354
-32b0 <circle> 591C
-32c0 <compat> 0031 6708
-32c1 <compat> 0032 6708
-32c2 <compat> 0033 6708
-32c3 <compat> 0034 6708
-32c4 <compat> 0035 6708
-32c5 <compat> 0036 6708
-32c6 <compat> 0037 6708
-32c7 <compat> 0038 6708
-32c8 <compat> 0039 6708
-32c9 <compat> 0031 0030 6708
-32ca <compat> 0031 0031 6708
-32cb <compat> 0031 0032 6708
-32d0 <circle> 30A2
-32d1 <circle> 30A4
-32d2 <circle> 30A6
-32d3 <circle> 30A8
-32d4 <circle> 30AA
-32d5 <circle> 30AB
-32d6 <circle> 30AD
-32d7 <circle> 30AF
-32d8 <circle> 30B1
-32d9 <circle> 30B3
-32da <circle> 30B5
-32db <circle> 30B7
-32dc <circle> 30B9
-32dd <circle> 30BB
-32de <circle> 30BD
-32df <circle> 30BF
-32e0 <circle> 30C1
-32e1 <circle> 30C4
-32e2 <circle> 30C6
-32e3 <circle> 30C8
-32e4 <circle> 30CA
-32e5 <circle> 30CB
-32e6 <circle> 30CC
-32e7 <circle> 30CD
-32e8 <circle> 30CE
-32e9 <circle> 30CF
-32ea <circle> 30D2
-32eb <circle> 30D5
-32ec <circle> 30D8
-32ed <circle> 30DB
-32ee <circle> 30DE
-32ef <circle> 30DF
-32f0 <circle> 30E0
-32f1 <circle> 30E1
-32f2 <circle> 30E2
-32f3 <circle> 30E4
-32f4 <circle> 30E6
-32f5 <circle> 30E8
-32f6 <circle> 30E9
-32f7 <circle> 30EA
-32f8 <circle> 30EB
-32f9 <circle> 30EC
-32fa <circle> 30ED
-32fb <circle> 30EF
-32fc <circle> 30F0
-32fd <circle> 30F1
-32fe <circle> 30F2
-3300 <square> 30A2 30D1 30FC 30C8
-3301 <square> 30A2 30EB 30D5 30A1
-3302 <square> 30A2 30F3 30DA 30A2
-3303 <square> 30A2 30FC 30EB
-3304 <square> 30A4 30CB 30F3 30B0
-3305 <square> 30A4 30F3 30C1
-3306 <square> 30A6 30A9 30F3
-3307 <square> 30A8 30B9 30AF 30FC 30C9
-3308 <square> 30A8 30FC 30AB 30FC
-3309 <square> 30AA 30F3 30B9
-330a <square> 30AA 30FC 30E0
-330b <square> 30AB 30A4 30EA
-330c <square> 30AB 30E9 30C3 30C8
-330d <square> 30AB 30ED 30EA 30FC
-330e <square> 30AC 30ED 30F3
-330f <square> 30AC 30F3 30DE
-3310 <square> 30AE 30AC
-3311 <square> 30AE 30CB 30FC
-3312 <square> 30AD 30E5 30EA 30FC
-3313 <square> 30AE 30EB 30C0 30FC
-3314 <square> 30AD 30ED
-3315 <square> 30AD 30ED 30B0 30E9 30E0
-3316 <square> 30AD 30ED 30E1 30FC 30C8 30EB
-3317 <square> 30AD 30ED 30EF 30C3 30C8
-3318 <square> 30B0 30E9 30E0
-3319 <square> 30B0 30E9 30E0 30C8 30F3
-331a <square> 30AF 30EB 30BC 30A4 30ED
-331b <square> 30AF 30ED 30FC 30CD
-331c <square> 30B1 30FC 30B9
-331d <square> 30B3 30EB 30CA
-331e <square> 30B3 30FC 30DD
-331f <square> 30B5 30A4 30AF 30EB
-3320 <square> 30B5 30F3 30C1 30FC 30E0
-3321 <square> 30B7 30EA 30F3 30B0
-3322 <square> 30BB 30F3 30C1
-3323 <square> 30BB 30F3 30C8
-3324 <square> 30C0 30FC 30B9
-3325 <square> 30C7 30B7
-3326 <square> 30C9 30EB
-3327 <square> 30C8 30F3
-3328 <square> 30CA 30CE
-3329 <square> 30CE 30C3 30C8
-332a <square> 30CF 30A4 30C4
-332b <square> 30D1 30FC 30BB 30F3 30C8
-332c <square> 30D1 30FC 30C4
-332d <square> 30D0 30FC 30EC 30EB
-332e <square> 30D4 30A2 30B9 30C8 30EB
-332f <square> 30D4 30AF 30EB
-3330 <square> 30D4 30B3
-3331 <square> 30D3 30EB
-3332 <square> 30D5 30A1 30E9 30C3 30C9
-3333 <square> 30D5 30A3 30FC 30C8
-3334 <square> 30D6 30C3 30B7 30A7 30EB
-3335 <square> 30D5 30E9 30F3
-3336 <square> 30D8 30AF 30BF 30FC 30EB
-3337 <square> 30DA 30BD
-3338 <square> 30DA 30CB 30D2
-3339 <square> 30D8 30EB 30C4
-333a <square> 30DA 30F3 30B9
-333b <square> 30DA 30FC 30B8
-333c <square> 30D9 30FC 30BF
-333d <square> 30DD 30A4 30F3 30C8
-333e <square> 30DC 30EB 30C8
-333f <square> 30DB 30F3
-3340 <square> 30DD 30F3 30C9
-3341 <square> 30DB 30FC 30EB
-3342 <square> 30DB 30FC 30F3
-3343 <square> 30DE 30A4 30AF 30ED
-3344 <square> 30DE 30A4 30EB
-3345 <square> 30DE 30C3 30CF
-3346 <square> 30DE 30EB 30AF
-3347 <square> 30DE 30F3 30B7 30E7 30F3
-3348 <square> 30DF 30AF 30ED 30F3
-3349 <square> 30DF 30EA
-334a <square> 30DF 30EA 30D0 30FC 30EB
-334b <square> 30E1 30AC
-334c <square> 30E1 30AC 30C8 30F3
-334d <square> 30E1 30FC 30C8 30EB
-334e <square> 30E4 30FC 30C9
-334f <square> 30E4 30FC 30EB
-3350 <square> 30E6 30A2 30F3
-3351 <square> 30EA 30C3 30C8 30EB
-3352 <square> 30EA 30E9
-3353 <square> 30EB 30D4 30FC
-3354 <square> 30EB 30FC 30D6 30EB
-3355 <square> 30EC 30E0
-3356 <square> 30EC 30F3 30C8 30B2 30F3
-3357 <square> 30EF 30C3 30C8
-3358 <compat> 0030 70B9
-3359 <compat> 0031 70B9
-335a <compat> 0032 70B9
-335b <compat> 0033 70B9
-335c <compat> 0034 70B9
-335d <compat> 0035 70B9
-335e <compat> 0036 70B9
-335f <compat> 0037 70B9
-3360 <compat> 0038 70B9
-3361 <compat> 0039 70B9
-3362 <compat> 0031 0030 70B9
-3363 <compat> 0031 0031 70B9
-3364 <compat> 0031 0032 70B9
-3365 <compat> 0031 0033 70B9
-3366 <compat> 0031 0034 70B9
-3367 <compat> 0031 0035 70B9
-3368 <compat> 0031 0036 70B9
-3369 <compat> 0031 0037 70B9
-336a <compat> 0031 0038 70B9
-336b <compat> 0031 0039 70B9
-336c <compat> 0032 0030 70B9
-336d <compat> 0032 0031 70B9
-336e <compat> 0032 0032 70B9
-336f <compat> 0032 0033 70B9
-3370 <compat> 0032 0034 70B9
-3371 <square> 0068 0050 0061
-3372 <square> 0064 0061
-3373 <square> 0041 0055
-3374 <square> 0062 0061 0072
-3375 <square> 006F 0056
-3376 <square> 0070 0063
-337b <square> 5E73 6210
-337c <square> 662D 548C
-337d <square> 5927 6B63
-337e <square> 660E 6CBB
-337f <square> 682A 5F0F 4F1A 793E
-3380 <square> 0070 0041
-3381 <square> 006E 0041
-3382 <square> 03BC 0041
-3383 <square> 006D 0041
-3384 <square> 006B 0041
-3385 <square> 004B 0042
-3386 <square> 004D 0042
-3387 <square> 0047 0042
-3388 <square> 0063 0061 006C
-3389 <square> 006B 0063 0061 006C
-338a <square> 0070 0046
-338b <square> 006E 0046
-338c <square> 03BC 0046
-338d <square> 03BC 0067
-338e <square> 006D 0067
-338f <square> 006B 0067
-3390 <square> 0048 007A
-3391 <square> 006B 0048 007A
-3392 <square> 004D 0048 007A
-3393 <square> 0047 0048 007A
-3394 <square> 0054 0048 007A
-3395 <square> 03BC 2113
-3396 <square> 006D 2113
-3397 <square> 0064 2113
-3398 <square> 006B 2113
-3399 <square> 0066 006D
-339a <square> 006E 006D
-339b <square> 03BC 006D
-339c <square> 006D 006D
-339d <square> 0063 006D
-339e <square> 006B 006D
-339f <square> 006D 006D 00B2
-33a0 <square> 0063 006D 00B2
-33a1 <square> 006D 00B2
-33a2 <square> 006B 006D 00B2
-33a3 <square> 006D 006D 00B3
-33a4 <square> 0063 006D 00B3
-33a5 <square> 006D 00B3
-33a6 <square> 006B 006D 00B3
-33a7 <square> 006D 2215 0073
-33a8 <square> 006D 2215 0073 00B2
-33a9 <square> 0050 0061
-33aa <square> 006B 0050 0061
-33ab <square> 004D 0050 0061
-33ac <square> 0047 0050 0061
-33ad <square> 0072 0061 0064
-33ae <square> 0072 0061 0064 2215 0073
-33af <square> 0072 0061 0064 2215 0073 00B2
-33b0 <square> 0070 0073
-33b1 <square> 006E 0073
-33b2 <square> 03BC 0073
-33b3 <square> 006D 0073
-33b4 <square> 0070 0056
-33b5 <square> 006E 0056
-33b6 <square> 03BC 0056
-33b7 <square> 006D 0056
-33b8 <square> 006B 0056
-33b9 <square> 004D 0056
-33ba <square> 0070 0057
-33bb <square> 006E 0057
-33bc <square> 03BC 0057
-33bd <square> 006D 0057
-33be <square> 006B 0057
-33bf <square> 004D 0057
-33c0 <square> 006B 03A9
-33c1 <square> 004D 03A9
-33c2 <square> 0061 002E 006D 002E
-33c3 <square> 0042 0071
-33c4 <square> 0063 0063
-33c5 <square> 0063 0064
-33c6 <square> 0043 2215 006B 0067
-33c7 <square> 0043 006F 002E
-33c8 <square> 0064 0042
-33c9 <square> 0047 0079
-33ca <square> 0068 0061
-33cb <square> 0048 0050
-33cc <square> 0069 006E
-33cd <square> 004B 004B
-33ce <square> 004B 004D
-33cf <square> 006B 0074
-33d0 <square> 006C 006D
-33d1 <square> 006C 006E
-33d2 <square> 006C 006F 0067
-33d3 <square> 006C 0078
-33d4 <square> 006D 0062
-33d5 <square> 006D 0069 006C
-33d6 <square> 006D 006F 006C
-33d7 <square> 0050 0048
-33d8 <square> 0070 002E 006D 002E
-33d9 <square> 0050 0050 004D
-33da <square> 0050 0052
-33db <square> 0073 0072
-33dc <square> 0053 0076
-33dd <square> 0057 0062
-33e0 <compat> 0031 65E5
-33e1 <compat> 0032 65E5
-33e2 <compat> 0033 65E5
-33e3 <compat> 0034 65E5
-33e4 <compat> 0035 65E5
-33e5 <compat> 0036 65E5
-33e6 <compat> 0037 65E5
-33e7 <compat> 0038 65E5
-33e8 <compat> 0039 65E5
-33e9 <compat> 0031 0030 65E5
-33ea <compat> 0031 0031 65E5
-33eb <compat> 0031 0032 65E5
-33ec <compat> 0031 0033 65E5
-33ed <compat> 0031 0034 65E5
-33ee <compat> 0031 0035 65E5
-33ef <compat> 0031 0036 65E5
-33f0 <compat> 0031 0037 65E5
-33f1 <compat> 0031 0038 65E5
-33f2 <compat> 0031 0039 65E5
-33f3 <compat> 0032 0030 65E5
-33f4 <compat> 0032 0031 65E5
-33f5 <compat> 0032 0032 65E5
-33f6 <compat> 0032 0033 65E5
-33f7 <compat> 0032 0034 65E5
-33f8 <compat> 0032 0035 65E5
-33f9 <compat> 0032 0036 65E5
-33fa <compat> 0032 0037 65E5
-33fb <compat> 0032 0038 65E5
-33fc <compat> 0032 0039 65E5
-33fd <compat> 0033 0030 65E5
-33fe <compat> 0033 0031 65E5
-f900 8C48
-f901 66F4
-f902 8ECA
-f903 8CC8
-f904 6ED1
-f905 4E32
-f906 53E5
-f907 f908 9F9C
-f909 5951
-f90a 91D1
-f90b 5587
-f90c 5948
-f90d 61F6
-f90e 7669
-f90f 7F85
-f910 863F
-f911 87BA
-f912 88F8
-f913 908F
-f914 6A02
-f915 6D1B
-f916 70D9
-f917 73DE
-f918 843D
-f919 916A
-f91a 99F1
-f91b 4E82
-f91c 5375
-f91d 6B04
-f91e 721B
-f91f 862D
-f920 9E1E
-f921 5D50
-f922 6FEB
-f923 85CD
-f924 8964
-f925 62C9
-f926 81D8
-f927 881F
-f928 5ECA
-f929 6717
-f92a 6D6A
-f92b 72FC
-f92c 90CE
-f92d 4F86
-f92e 51B7
-f92f 52DE
-f930 64C4
-f931 6AD3
-f932 7210
-f933 76E7
-f934 8001
-f935 8606
-f936 865C
-f937 8DEF
-f938 9732
-f939 9B6F
-f93a 9DFA
-f93b 788C
-f93c 797F
-f93d 7DA0
-f93e 83C9
-f93f 9304
-f940 9E7F
-f941 8AD6
-f942 58DF
-f943 5F04
-f944 7C60
-f945 807E
-f946 7262
-f947 78CA
-f948 8CC2
-f949 96F7
-f94a 58D8
-f94b 5C62
-f94c 6A13
-f94d 6DDA
-f94e 6F0F
-f94f 7D2F
-f950 7E37
-f951 96FB
-f952 52D2
-f953 808B
-f954 51DC
-f955 51CC
-f956 7A1C
-f957 7DBE
-f958 83F1
-f959 9675
-f95a 8B80
-f95b 62CF
-f95c 6A02
-f95d 8AFE
-f95e 4E39
-f95f 5BE7
-f960 6012
-f961 7387
-f962 7570
-f963 5317
-f964 78FB
-f965 4FBF
-f966 5FA9
-f967 4E0D
-f968 6CCC
-f969 6578
-f96a 7D22
-f96b 53C3
-f96c 585E
-f96d 7701
-f96e 8449
-f96f 8AAA
-f970 6BBA
-f971 8FB0
-f972 6C88
-f973 62FE
-f974 82E5
-f975 63A0
-f976 7565
-f977 4EAE
-f978 5169
-f979 51C9
-f97a 6881
-f97b 7CE7
-f97c 826F
-f97d 8AD2
-f97e 91CF
-f97f 52F5
-f980 5442
-f981 5973
-f982 5EEC
-f983 65C5
-f984 6FFE
-f985 792A
-f986 95AD
-f987 9A6A
-f988 9E97
-f989 9ECE
-f98a 529B
-f98b 66C6
-f98c 6B77
-f98d 8F62
-f98e 5E74
-f98f 6190
-f990 6200
-f991 649A
-f992 6F23
-f993 7149
-f994 7489
-f995 79CA
-f996 7DF4
-f997 806F
-f998 8F26
-f999 84EE
-f99a 9023
-f99b 934A
-f99c 5217
-f99d 52A3
-f99e 54BD
-f99f 70C8
-f9a0 88C2
-f9a1 8AAA
-f9a2 5EC9
-f9a3 5FF5
-f9a4 637B
-f9a5 6BAE
-f9a6 7C3E
-f9a7 7375
-f9a8 4EE4
-f9a9 56F9
-f9aa 5BE7
-f9ab 5DBA
-f9ac 601C
-f9ad 73B2
-f9ae 7469
-f9af 7F9A
-f9b0 8046
-f9b1 9234
-f9b2 96F6
-f9b3 9748
-f9b4 9818
-f9b5 4F8B
-f9b6 79AE
-f9b7 91B4
-f9b8 96B8
-f9b9 60E1
-f9ba 4E86
-f9bb 50DA
-f9bc 5BEE
-f9bd 5C3F
-f9be 6599
-f9bf 6A02
-f9c0 71CE
-f9c1 7642
-f9c2 84FC
-f9c3 907C
-f9c4 9F8D
-f9c5 6688
-f9c6 962E
-f9c7 5289
-f9c8 677B
-f9c9 67F3
-f9ca 6D41
-f9cb 6E9C
-f9cc 7409
-f9cd 7559
-f9ce 786B
-f9cf 7D10
-f9d0 985E
-f9d1 516D
-f9d2 622E
-f9d3 9678
-f9d4 502B
-f9d5 5D19
-f9d6 6DEA
-f9d7 8F2A
-f9d8 5F8B
-f9d9 6144
-f9da 6817
-f9db 7387
-f9dc 9686
-f9dd 5229
-f9de 540F
-f9df 5C65
-f9e0 6613
-f9e1 674E
-f9e2 68A8
-f9e3 6CE5
-f9e4 7406
-f9e5 75E2
-f9e6 7F79
-f9e7 88CF
-f9e8 88E1
-f9e9 91CC
-f9ea 96E2
-f9eb 533F
-f9ec 6EBA
-f9ed 541D
-f9ee 71D0
-f9ef 7498
-f9f0 85FA
-f9f1 96A3
-f9f2 9C57
-f9f3 9E9F
-f9f4 6797
-f9f5 6DCB
-f9f6 81E8
-f9f7 7ACB
-f9f8 7B20
-f9f9 7C92
-f9fa 72C0
-f9fb 7099
-f9fc 8B58
-f9fd 4EC0
-f9fe 8336
-f9ff 523A
-fa00 5207
-fa01 5EA6
-fa02 62D3
-fa03 7CD6
-fa04 5B85
-fa05 6D1E
-fa06 66B4
-fa07 8F3B
-fa08 884C
-fa09 964D
-fa0a 898B
-fa0b 5ED3
-fa0c 5140
-fa0d 55C0
-fa10 585A
-fa12 6674
-fa15 51DE
-fa16 732A
-fa17 76CA
-fa18 793C
-fa19 795E
-fa1a 7965
-fa1b 798F
-fa1c 9756
-fa1d 7CBE
-fa1e 7FBD
-fa20 8612
-fa22 8AF8
-fa25 9038
-fa26 90FD
-fa2a 98EF
-fa2b 98FC
-fa2c 9928
-fa2d 9DB4
-fb00 <compat> 0066 0066
-fb01 <compat> 0066 0069
-fb02 <compat> 0066 006C
-fb03 <compat> 0066 0066 0069
-fb04 <compat> 0066 0066 006C
-fb05 <compat> 017F 0074
-fb06 <compat> 0073 0074
-fb13 <compat> 0574 0576
-fb14 <compat> 0574 0565
-fb15 <compat> 0574 056B
-fb16 <compat> 057E 0576
-fb17 <compat> 0574 056D
-fb1d 05D9 05B4
-fb1f 05F2 05B7
-fb20 <font> 05E2
-fb21 <font> 05D0
-fb22 <font> 05D3
-fb23 <font> 05D4
-fb24 <font> 05DB
-fb25 <font> 05DC
-fb26 <font> 05DD
-fb27 <font> 05E8
-fb28 <font> 05EA
-fb29 <font> 002B
-fb2a 05E9 05C1
-fb2b 05E9 05C2
-fb2c FB49 05C1
-fb2d FB49 05C2
-fb2e 05D0 05B7
-fb2f 05D0 05B8
-fb30 05D0 05BC
-fb31 05D1 05BC
-fb32 05D2 05BC
-fb33 05D3 05BC
-fb34 05D4 05BC
-fb35 05D5 05BC
-fb36 05D6 05BC
-fb38 05D8 05BC
-fb39 05D9 05BC
-fb3a 05DA 05BC
-fb3b 05DB 05BC
-fb3c 05DC 05BC
-fb3e 05DE 05BC
-fb40 05E0 05BC
-fb41 05E1 05BC
-fb43 05E3 05BC
-fb44 05E4 05BC
-fb46 05E6 05BC
-fb47 05E7 05BC
-fb48 05E8 05BC
-fb49 05E9 05BC
-fb4a 05EA 05BC
-fb4b 05D5 05B9
-fb4c 05D1 05BF
-fb4d 05DB 05BF
-fb4e 05E4 05BF
-fb4f <compat> 05D0 05DC
-fb50 <isolated> 0671
-fb51 <final> 0671
-fb52 <isolated> 067B
-fb53 <final> 067B
-fb54 <initial> 067B
-fb55 <medial> 067B
-fb56 <isolated> 067E
-fb57 <final> 067E
-fb58 <initial> 067E
-fb59 <medial> 067E
-fb5a <isolated> 0680
-fb5b <final> 0680
-fb5c <initial> 0680
-fb5d <medial> 0680
-fb5e <isolated> 067A
-fb5f <final> 067A
-fb60 <initial> 067A
-fb61 <medial> 067A
-fb62 <isolated> 067F
-fb63 <final> 067F
-fb64 <initial> 067F
-fb65 <medial> 067F
-fb66 <isolated> 0679
-fb67 <final> 0679
-fb68 <initial> 0679
-fb69 <medial> 0679
-fb6a <isolated> 06A4
-fb6b <final> 06A4
-fb6c <initial> 06A4
-fb6d <medial> 06A4
-fb6e <isolated> 06A6
-fb6f <final> 06A6
-fb70 <initial> 06A6
-fb71 <medial> 06A6
-fb72 <isolated> 0684
-fb73 <final> 0684
-fb74 <initial> 0684
-fb75 <medial> 0684
-fb76 <isolated> 0683
-fb77 <final> 0683
-fb78 <initial> 0683
-fb79 <medial> 0683
-fb7a <isolated> 0686
-fb7b <final> 0686
-fb7c <initial> 0686
-fb7d <medial> 0686
-fb7e <isolated> 0687
-fb7f <final> 0687
-fb80 <initial> 0687
-fb81 <medial> 0687
-fb82 <isolated> 068D
-fb83 <final> 068D
-fb84 <isolated> 068C
-fb85 <final> 068C
-fb86 <isolated> 068E
-fb87 <final> 068E
-fb88 <isolated> 0688
-fb89 <final> 0688
-fb8a <isolated> 0698
-fb8b <final> 0698
-fb8c <isolated> 0691
-fb8d <final> 0691
-fb8e <isolated> 06A9
-fb8f <final> 06A9
-fb90 <initial> 06A9
-fb91 <medial> 06A9
-fb92 <isolated> 06AF
-fb93 <final> 06AF
-fb94 <initial> 06AF
-fb95 <medial> 06AF
-fb96 <isolated> 06B3
-fb97 <final> 06B3
-fb98 <initial> 06B3
-fb99 <medial> 06B3
-fb9a <isolated> 06B1
-fb9b <final> 06B1
-fb9c <initial> 06B1
-fb9d <medial> 06B1
-fb9e <isolated> 06BA
-fb9f <final> 06BA
-fba0 <isolated> 06BB
-fba1 <final> 06BB
-fba2 <initial> 06BB
-fba3 <medial> 06BB
-fba4 <isolated> 06C0
-fba5 <final> 06C0
-fba6 <isolated> 06C1
-fba7 <final> 06C1
-fba8 <initial> 06C1
-fba9 <medial> 06C1
-fbaa <isolated> 06BE
-fbab <final> 06BE
-fbac <initial> 06BE
-fbad <medial> 06BE
-fbae <isolated> 06D2
-fbaf <final> 06D2
-fbb0 <isolated> 06D3
-fbb1 <final> 06D3
-fbd3 <isolated> 06AD
-fbd4 <final> 06AD
-fbd5 <initial> 06AD
-fbd6 <medial> 06AD
-fbd7 <isolated> 06C7
-fbd8 <final> 06C7
-fbd9 <isolated> 06C6
-fbda <final> 06C6
-fbdb <isolated> 06C8
-fbdc <final> 06C8
-fbdd <isolated> 0677
-fbde <isolated> 06CB
-fbdf <final> 06CB
-fbe0 <isolated> 06C5
-fbe1 <final> 06C5
-fbe2 <isolated> 06C9
-fbe3 <final> 06C9
-fbe4 <isolated> 06D0
-fbe5 <final> 06D0
-fbe6 <initial> 06D0
-fbe7 <medial> 06D0
-fbe8 <initial> 0649
-fbe9 <medial> 0649
-fbea <isolated> 0626 0627
-fbeb <final> 0626 0627
-fbec <isolated> 0626 06D5
-fbed <final> 0626 06D5
-fbee <isolated> 0626 0648
-fbef <final> 0626 0648
-fbf0 <isolated> 0626 06C7
-fbf1 <final> 0626 06C7
-fbf2 <isolated> 0626 06C6
-fbf3 <final> 0626 06C6
-fbf4 <isolated> 0626 06C8
-fbf5 <final> 0626 06C8
-fbf6 <isolated> 0626 06D0
-fbf7 <final> 0626 06D0
-fbf8 <initial> 0626 06D0
-fbf9 <isolated> 0626 0649
-fbfa <final> 0626 0649
-fbfb <initial> 0626 0649
-fbfc <isolated> 06CC
-fbfd <final> 06CC
-fbfe <initial> 06CC
-fbff <medial> 06CC
-fc00 <isolated> 0626 062C
-fc01 <isolated> 0626 062D
-fc02 <isolated> 0626 0645
-fc03 <isolated> 0626 0649
-fc04 <isolated> 0626 064A
-fc05 <isolated> 0628 062C
-fc06 <isolated> 0628 062D
-fc07 <isolated> 0628 062E
-fc08 <isolated> 0628 0645
-fc09 <isolated> 0628 0649
-fc0a <isolated> 0628 064A
-fc0b <isolated> 062A 062C
-fc0c <isolated> 062A 062D
-fc0d <isolated> 062A 062E
-fc0e <isolated> 062A 0645
-fc0f <isolated> 062A 0649
-fc10 <isolated> 062A 064A
-fc11 <isolated> 062B 062C
-fc12 <isolated> 062B 0645
-fc13 <isolated> 062B 0649
-fc14 <isolated> 062B 064A
-fc15 <isolated> 062C 062D
-fc16 <isolated> 062C 0645
-fc17 <isolated> 062D 062C
-fc18 <isolated> 062D 0645
-fc19 <isolated> 062E 062C
-fc1a <isolated> 062E 062D
-fc1b <isolated> 062E 0645
-fc1c <isolated> 0633 062C
-fc1d <isolated> 0633 062D
-fc1e <isolated> 0633 062E
-fc1f <isolated> 0633 0645
-fc20 <isolated> 0635 062D
-fc21 <isolated> 0635 0645
-fc22 <isolated> 0636 062C
-fc23 <isolated> 0636 062D
-fc24 <isolated> 0636 062E
-fc25 <isolated> 0636 0645
-fc26 <isolated> 0637 062D
-fc27 <isolated> 0637 0645
-fc28 <isolated> 0638 0645
-fc29 <isolated> 0639 062C
-fc2a <isolated> 0639 0645
-fc2b <isolated> 063A 062C
-fc2c <isolated> 063A 0645
-fc2d <isolated> 0641 062C
-fc2e <isolated> 0641 062D
-fc2f <isolated> 0641 062E
-fc30 <isolated> 0641 0645
-fc31 <isolated> 0641 0649
-fc32 <isolated> 0641 064A
-fc33 <isolated> 0642 062D
-fc34 <isolated> 0642 0645
-fc35 <isolated> 0642 0649
-fc36 <isolated> 0642 064A
-fc37 <isolated> 0643 0627
-fc38 <isolated> 0643 062C
-fc39 <isolated> 0643 062D
-fc3a <isolated> 0643 062E
-fc3b <isolated> 0643 0644
-fc3c <isolated> 0643 0645
-fc3d <isolated> 0643 0649
-fc3e <isolated> 0643 064A
-fc3f <isolated> 0644 062C
-fc40 <isolated> 0644 062D
-fc41 <isolated> 0644 062E
-fc42 <isolated> 0644 0645
-fc43 <isolated> 0644 0649
-fc44 <isolated> 0644 064A
-fc45 <isolated> 0645 062C
-fc46 <isolated> 0645 062D
-fc47 <isolated> 0645 062E
-fc48 <isolated> 0645 0645
-fc49 <isolated> 0645 0649
-fc4a <isolated> 0645 064A
-fc4b <isolated> 0646 062C
-fc4c <isolated> 0646 062D
-fc4d <isolated> 0646 062E
-fc4e <isolated> 0646 0645
-fc4f <isolated> 0646 0649
-fc50 <isolated> 0646 064A
-fc51 <isolated> 0647 062C
-fc52 <isolated> 0647 0645
-fc53 <isolated> 0647 0649
-fc54 <isolated> 0647 064A
-fc55 <isolated> 064A 062C
-fc56 <isolated> 064A 062D
-fc57 <isolated> 064A 062E
-fc58 <isolated> 064A 0645
-fc59 <isolated> 064A 0649
-fc5a <isolated> 064A 064A
-fc5b <isolated> 0630 0670
-fc5c <isolated> 0631 0670
-fc5d <isolated> 0649 0670
-fc5e <isolated> 0020 064C 0651
-fc5f <isolated> 0020 064D 0651
-fc60 <isolated> 0020 064E 0651
-fc61 <isolated> 0020 064F 0651
-fc62 <isolated> 0020 0650 0651
-fc63 <isolated> 0020 0651 0670
-fc64 <final> 0626 0631
-fc65 <final> 0626 0632
-fc66 <final> 0626 0645
-fc67 <final> 0626 0646
-fc68 <final> 0626 0649
-fc69 <final> 0626 064A
-fc6a <final> 0628 0631
-fc6b <final> 0628 0632
-fc6c <final> 0628 0645
-fc6d <final> 0628 0646
-fc6e <final> 0628 0649
-fc6f <final> 0628 064A
-fc70 <final> 062A 0631
-fc71 <final> 062A 0632
-fc72 <final> 062A 0645
-fc73 <final> 062A 0646
-fc74 <final> 062A 0649
-fc75 <final> 062A 064A
-fc76 <final> 062B 0631
-fc77 <final> 062B 0632
-fc78 <final> 062B 0645
-fc79 <final> 062B 0646
-fc7a <final> 062B 0649
-fc7b <final> 062B 064A
-fc7c <final> 0641 0649
-fc7d <final> 0641 064A
-fc7e <final> 0642 0649
-fc7f <final> 0642 064A
-fc80 <final> 0643 0627
-fc81 <final> 0643 0644
-fc82 <final> 0643 0645
-fc83 <final> 0643 0649
-fc84 <final> 0643 064A
-fc85 <final> 0644 0645
-fc86 <final> 0644 0649
-fc87 <final> 0644 064A
-fc88 <final> 0645 0627
-fc89 <final> 0645 0645
-fc8a <final> 0646 0631
-fc8b <final> 0646 0632
-fc8c <final> 0646 0645
-fc8d <final> 0646 0646
-fc8e <final> 0646 0649
-fc8f <final> 0646 064A
-fc90 <final> 0649 0670
-fc91 <final> 064A 0631
-fc92 <final> 064A 0632
-fc93 <final> 064A 0645
-fc94 <final> 064A 0646
-fc95 <final> 064A 0649
-fc96 <final> 064A 064A
-fc97 <initial> 0626 062C
-fc98 <initial> 0626 062D
-fc99 <initial> 0626 062E
-fc9a <initial> 0626 0645
-fc9b <initial> 0626 0647
-fc9c <initial> 0628 062C
-fc9d <initial> 0628 062D
-fc9e <initial> 0628 062E
-fc9f <initial> 0628 0645
-fca0 <initial> 0628 0647
-fca1 <initial> 062A 062C
-fca2 <initial> 062A 062D
-fca3 <initial> 062A 062E
-fca4 <initial> 062A 0645
-fca5 <initial> 062A 0647
-fca6 <initial> 062B 0645
-fca7 <initial> 062C 062D
-fca8 <initial> 062C 0645
-fca9 <initial> 062D 062C
-fcaa <initial> 062D 0645
-fcab <initial> 062E 062C
-fcac <initial> 062E 0645
-fcad <initial> 0633 062C
-fcae <initial> 0633 062D
-fcaf <initial> 0633 062E
-fcb0 <initial> 0633 0645
-fcb1 <initial> 0635 062D
-fcb2 <initial> 0635 062E
-fcb3 <initial> 0635 0645
-fcb4 <initial> 0636 062C
-fcb5 <initial> 0636 062D
-fcb6 <initial> 0636 062E
-fcb7 <initial> 0636 0645
-fcb8 <initial> 0637 062D
-fcb9 <initial> 0638 0645
-fcba <initial> 0639 062C
-fcbb <initial> 0639 0645
-fcbc <initial> 063A 062C
-fcbd <initial> 063A 0645
-fcbe <initial> 0641 062C
-fcbf <initial> 0641 062D
-fcc0 <initial> 0641 062E
-fcc1 <initial> 0641 0645
-fcc2 <initial> 0642 062D
-fcc3 <initial> 0642 0645
-fcc4 <initial> 0643 062C
-fcc5 <initial> 0643 062D
-fcc6 <initial> 0643 062E
-fcc7 <initial> 0643 0644
-fcc8 <initial> 0643 0645
-fcc9 <initial> 0644 062C
-fcca <initial> 0644 062D
-fccb <initial> 0644 062E
-fccc <initial> 0644 0645
-fccd <initial> 0644 0647
-fcce <initial> 0645 062C
-fccf <initial> 0645 062D
-fcd0 <initial> 0645 062E
-fcd1 <initial> 0645 0645
-fcd2 <initial> 0646 062C
-fcd3 <initial> 0646 062D
-fcd4 <initial> 0646 062E
-fcd5 <initial> 0646 0645
-fcd6 <initial> 0646 0647
-fcd7 <initial> 0647 062C
-fcd8 <initial> 0647 0645
-fcd9 <initial> 0647 0670
-fcda <initial> 064A 062C
-fcdb <initial> 064A 062D
-fcdc <initial> 064A 062E
-fcdd <initial> 064A 0645
-fcde <initial> 064A 0647
-fcdf <medial> 0626 0645
-fce0 <medial> 0626 0647
-fce1 <medial> 0628 0645
-fce2 <medial> 0628 0647
-fce3 <medial> 062A 0645
-fce4 <medial> 062A 0647
-fce5 <medial> 062B 0645
-fce6 <medial> 062B 0647
-fce7 <medial> 0633 0645
-fce8 <medial> 0633 0647
-fce9 <medial> 0634 0645
-fcea <medial> 0634 0647
-fceb <medial> 0643 0644
-fcec <medial> 0643 0645
-fced <medial> 0644 0645
-fcee <medial> 0646 0645
-fcef <medial> 0646 0647
-fcf0 <medial> 064A 0645
-fcf1 <medial> 064A 0647
-fcf2 <medial> 0640 064E 0651
-fcf3 <medial> 0640 064F 0651
-fcf4 <medial> 0640 0650 0651
-fcf5 <isolated> 0637 0649
-fcf6 <isolated> 0637 064A
-fcf7 <isolated> 0639 0649
-fcf8 <isolated> 0639 064A
-fcf9 <isolated> 063A 0649
-fcfa <isolated> 063A 064A
-fcfb <isolated> 0633 0649
-fcfc <isolated> 0633 064A
-fcfd <isolated> 0634 0649
-fcfe <isolated> 0634 064A
-fcff <isolated> 062D 0649
-fd00 <isolated> 062D 064A
-fd01 <isolated> 062C 0649
-fd02 <isolated> 062C 064A
-fd03 <isolated> 062E 0649
-fd04 <isolated> 062E 064A
-fd05 <isolated> 0635 0649
-fd06 <isolated> 0635 064A
-fd07 <isolated> 0636 0649
-fd08 <isolated> 0636 064A
-fd09 <isolated> 0634 062C
-fd0a <isolated> 0634 062D
-fd0b <isolated> 0634 062E
-fd0c <isolated> 0634 0645
-fd0d <isolated> 0634 0631
-fd0e <isolated> 0633 0631
-fd0f <isolated> 0635 0631
-fd10 <isolated> 0636 0631
-fd11 <final> 0637 0649
-fd12 <final> 0637 064A
-fd13 <final> 0639 0649
-fd14 <final> 0639 064A
-fd15 <final> 063A 0649
-fd16 <final> 063A 064A
-fd17 <final> 0633 0649
-fd18 <final> 0633 064A
-fd19 <final> 0634 0649
-fd1a <final> 0634 064A
-fd1b <final> 062D 0649
-fd1c <final> 062D 064A
-fd1d <final> 062C 0649
-fd1e <final> 062C 064A
-fd1f <final> 062E 0649
-fd20 <final> 062E 064A
-fd21 <final> 0635 0649
-fd22 <final> 0635 064A
-fd23 <final> 0636 0649
-fd24 <final> 0636 064A
-fd25 <final> 0634 062C
-fd26 <final> 0634 062D
-fd27 <final> 0634 062E
-fd28 <final> 0634 0645
-fd29 <final> 0634 0631
-fd2a <final> 0633 0631
-fd2b <final> 0635 0631
-fd2c <final> 0636 0631
-fd2d <initial> 0634 062C
-fd2e <initial> 0634 062D
-fd2f <initial> 0634 062E
-fd30 <initial> 0634 0645
-fd31 <initial> 0633 0647
-fd32 <initial> 0634 0647
-fd33 <initial> 0637 0645
-fd34 <medial> 0633 062C
-fd35 <medial> 0633 062D
-fd36 <medial> 0633 062E
-fd37 <medial> 0634 062C
-fd38 <medial> 0634 062D
-fd39 <medial> 0634 062E
-fd3a <medial> 0637 0645
-fd3b <medial> 0638 0645
-fd3c <final> 0627 064B
-fd3d <isolated> 0627 064B
-fd50 <initial> 062A 062C 0645
-fd51 <final> 062A 062D 062C
-fd52 <initial> 062A 062D 062C
-fd53 <initial> 062A 062D 0645
-fd54 <initial> 062A 062E 0645
-fd55 <initial> 062A 0645 062C
-fd56 <initial> 062A 0645 062D
-fd57 <initial> 062A 0645 062E
-fd58 <final> 062C 0645 062D
-fd59 <initial> 062C 0645 062D
-fd5a <final> 062D 0645 064A
-fd5b <final> 062D 0645 0649
-fd5c <initial> 0633 062D 062C
-fd5d <initial> 0633 062C 062D
-fd5e <final> 0633 062C 0649
-fd5f <final> 0633 0645 062D
-fd60 <initial> 0633 0645 062D
-fd61 <initial> 0633 0645 062C
-fd62 <final> 0633 0645 0645
-fd63 <initial> 0633 0645 0645
-fd64 <final> 0635 062D 062D
-fd65 <initial> 0635 062D 062D
-fd66 <final> 0635 0645 0645
-fd67 <final> 0634 062D 0645
-fd68 <initial> 0634 062D 0645
-fd69 <final> 0634 062C 064A
-fd6a <final> 0634 0645 062E
-fd6b <initial> 0634 0645 062E
-fd6c <final> 0634 0645 0645
-fd6d <initial> 0634 0645 0645
-fd6e <final> 0636 062D 0649
-fd6f <final> 0636 062E 0645
-fd70 <initial> 0636 062E 0645
-fd71 <final> 0637 0645 062D
-fd72 <initial> 0637 0645 062D
-fd73 <initial> 0637 0645 0645
-fd74 <final> 0637 0645 064A
-fd75 <final> 0639 062C 0645
-fd76 <final> 0639 0645 0645
-fd77 <initial> 0639 0645 0645
-fd78 <final> 0639 0645 0649
-fd79 <final> 063A 0645 0645
-fd7a <final> 063A 0645 064A
-fd7b <final> 063A 0645 0649
-fd7c <final> 0641 062E 0645
-fd7d <initial> 0641 062E 0645
-fd7e <final> 0642 0645 062D
-fd7f <final> 0642 0645 0645
-fd80 <final> 0644 062D 0645
-fd81 <final> 0644 062D 064A
-fd82 <final> 0644 062D 0649
-fd83 <initial> 0644 062C 062C
-fd84 <final> 0644 062C 062C
-fd85 <final> 0644 062E 0645
-fd86 <initial> 0644 062E 0645
-fd87 <final> 0644 0645 062D
-fd88 <initial> 0644 0645 062D
-fd89 <initial> 0645 062D 062C
-fd8a <initial> 0645 062D 0645
-fd8b <final> 0645 062D 064A
-fd8c <initial> 0645 062C 062D
-fd8d <initial> 0645 062C 0645
-fd8e <initial> 0645 062E 062C
-fd8f <initial> 0645 062E 0645
-fd92 <initial> 0645 062C 062E
-fd93 <initial> 0647 0645 062C
-fd94 <initial> 0647 0645 0645
-fd95 <initial> 0646 062D 0645
-fd96 <final> 0646 062D 0649
-fd97 <final> 0646 062C 0645
-fd98 <initial> 0646 062C 0645
-fd99 <final> 0646 062C 0649
-fd9a <final> 0646 0645 064A
-fd9b <final> 0646 0645 0649
-fd9c <final> 064A 0645 0645
-fd9d <initial> 064A 0645 0645
-fd9e <final> 0628 062E 064A
-fd9f <final> 062A 062C 064A
-fda0 <final> 062A 062C 0649
-fda1 <final> 062A 062E 064A
-fda2 <final> 062A 062E 0649
-fda3 <final> 062A 0645 064A
-fda4 <final> 062A 0645 0649
-fda5 <final> 062C 0645 064A
-fda6 <final> 062C 062D 0649
-fda7 <final> 062C 0645 0649
-fda8 <final> 0633 062E 0649
-fda9 <final> 0635 062D 064A
-fdaa <final> 0634 062D 064A
-fdab <final> 0636 062D 064A
-fdac <final> 0644 062C 064A
-fdad <final> 0644 0645 064A
-fdae <final> 064A 062D 064A
-fdaf <final> 064A 062C 064A
-fdb0 <final> 064A 0645 064A
-fdb1 <final> 0645 0645 064A
-fdb2 <final> 0642 0645 064A
-fdb3 <final> 0646 062D 064A
-fdb4 <initial> 0642 0645 062D
-fdb5 <initial> 0644 062D 0645
-fdb6 <final> 0639 0645 064A
-fdb7 <final> 0643 0645 064A
-fdb8 <initial> 0646 062C 062D
-fdb9 <final> 0645 062E 064A
-fdba <initial> 0644 062C 0645
-fdbb <final> 0643 0645 0645
-fdbc <final> 0644 062C 0645
-fdbd <final> 0646 062C 062D
-fdbe <final> 062C 062D 064A
-fdbf <final> 062D 062C 064A
-fdc0 <final> 0645 062C 064A
-fdc1 <final> 0641 0645 064A
-fdc2 <final> 0628 062D 064A
-fdc3 <initial> 0643 0645 0645
-fdc4 <initial> 0639 062C 0645
-fdc5 <initial> 0635 0645 0645
-fdc6 <final> 0633 062E 064A
-fdc7 <final> 0646 062C 064A
-fdf0 <isolated> 0635 0644 06D2
-fdf1 <isolated> 0642 0644 06D2
-fdf2 <isolated> 0627 0644 0644 0647
-fdf3 <isolated> 0627 0643 0628 0631
-fdf4 <isolated> 0645 062D 0645 062F
-fdf5 <isolated> 0635 0644 0639 0645
-fdf6 <isolated> 0631 0633 0648 0644
-fdf7 <isolated> 0639 0644 064A 0647
-fdf8 <isolated> 0648 0633 0644 0645
-fdf9 <isolated> 0635 0644 0649
-fdfa <isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645
-fdfb <isolated> 062C 0644 0020 062C 0644 0627 0644 0647
-fe30 <vertical> 2025
-fe31 <vertical> 2014
-fe32 <vertical> 2013
-fe33 fe34 <vertical> 005F
-fe35 <vertical> 0028
-fe36 <vertical> 0029
-fe37 <vertical> 007B
-fe38 <vertical> 007D
-fe39 <vertical> 3014
-fe3a <vertical> 3015
-fe3b <vertical> 3010
-fe3c <vertical> 3011
-fe3d <vertical> 300A
-fe3e <vertical> 300B
-fe3f <vertical> 3008
-fe40 <vertical> 3009
-fe41 <vertical> 300C
-fe42 <vertical> 300D
-fe43 <vertical> 300E
-fe44 <vertical> 300F
-fe49 fe4c <compat> 203E
-fe4d fe4f <compat> 005F
-fe50 <small> 002C
-fe51 <small> 3001
-fe52 <small> 002E
-fe54 <small> 003B
-fe55 <small> 003A
-fe56 <small> 003F
-fe57 <small> 0021
-fe58 <small> 2014
-fe59 <small> 0028
-fe5a <small> 0029
-fe5b <small> 007B
-fe5c <small> 007D
-fe5d <small> 3014
-fe5e <small> 3015
-fe5f <small> 0023
-fe60 <small> 0026
-fe61 <small> 002A
-fe62 <small> 002B
-fe63 <small> 002D
-fe64 <small> 003C
-fe65 <small> 003E
-fe66 <small> 003D
-fe68 <small> 005C
-fe69 <small> 0024
-fe6a <small> 0025
-fe6b <small> 0040
-fe70 <isolated> 0020 064B
-fe71 <medial> 0640 064B
-fe72 <isolated> 0020 064C
-fe74 <isolated> 0020 064D
-fe76 <isolated> 0020 064E
-fe77 <medial> 0640 064E
-fe78 <isolated> 0020 064F
-fe79 <medial> 0640 064F
-fe7a <isolated> 0020 0650
-fe7b <medial> 0640 0650
-fe7c <isolated> 0020 0651
-fe7d <medial> 0640 0651
-fe7e <isolated> 0020 0652
-fe7f <medial> 0640 0652
-fe80 <isolated> 0621
-fe81 <isolated> 0622
-fe82 <final> 0622
-fe83 <isolated> 0623
-fe84 <final> 0623
-fe85 <isolated> 0624
-fe86 <final> 0624
-fe87 <isolated> 0625
-fe88 <final> 0625
-fe89 <isolated> 0626
-fe8a <final> 0626
-fe8b <initial> 0626
-fe8c <medial> 0626
-fe8d <isolated> 0627
-fe8e <final> 0627
-fe8f <isolated> 0628
-fe90 <final> 0628
-fe91 <initial> 0628
-fe92 <medial> 0628
-fe93 <isolated> 0629
-fe94 <final> 0629
-fe95 <isolated> 062A
-fe96 <final> 062A
-fe97 <initial> 062A
-fe98 <medial> 062A
-fe99 <isolated> 062B
-fe9a <final> 062B
-fe9b <initial> 062B
-fe9c <medial> 062B
-fe9d <isolated> 062C
-fe9e <final> 062C
-fe9f <initial> 062C
-fea0 <medial> 062C
-fea1 <isolated> 062D
-fea2 <final> 062D
-fea3 <initial> 062D
-fea4 <medial> 062D
-fea5 <isolated> 062E
-fea6 <final> 062E
-fea7 <initial> 062E
-fea8 <medial> 062E
-fea9 <isolated> 062F
-feaa <final> 062F
-feab <isolated> 0630
-feac <final> 0630
-fead <isolated> 0631
-feae <final> 0631
-feaf <isolated> 0632
-feb0 <final> 0632
-feb1 <isolated> 0633
-feb2 <final> 0633
-feb3 <initial> 0633
-feb4 <medial> 0633
-feb5 <isolated> 0634
-feb6 <final> 0634
-feb7 <initial> 0634
-feb8 <medial> 0634
-feb9 <isolated> 0635
-feba <final> 0635
-febb <initial> 0635
-febc <medial> 0635
-febd <isolated> 0636
-febe <final> 0636
-febf <initial> 0636
-fec0 <medial> 0636
-fec1 <isolated> 0637
-fec2 <final> 0637
-fec3 <initial> 0637
-fec4 <medial> 0637
-fec5 <isolated> 0638
-fec6 <final> 0638
-fec7 <initial> 0638
-fec8 <medial> 0638
-fec9 <isolated> 0639
-feca <final> 0639
-fecb <initial> 0639
-fecc <medial> 0639
-fecd <isolated> 063A
-fece <final> 063A
-fecf <initial> 063A
-fed0 <medial> 063A
-fed1 <isolated> 0641
-fed2 <final> 0641
-fed3 <initial> 0641
-fed4 <medial> 0641
-fed5 <isolated> 0642
-fed6 <final> 0642
-fed7 <initial> 0642
-fed8 <medial> 0642
-fed9 <isolated> 0643
-feda <final> 0643
-fedb <initial> 0643
-fedc <medial> 0643
-fedd <isolated> 0644
-fede <final> 0644
-fedf <initial> 0644
-fee0 <medial> 0644
-fee1 <isolated> 0645
-fee2 <final> 0645
-fee3 <initial> 0645
-fee4 <medial> 0645
-fee5 <isolated> 0646
-fee6 <final> 0646
-fee7 <initial> 0646
-fee8 <medial> 0646
-fee9 <isolated> 0647
-feea <final> 0647
-feeb <initial> 0647
-feec <medial> 0647
-feed <isolated> 0648
-feee <final> 0648
-feef <isolated> 0649
-fef0 <final> 0649
-fef1 <isolated> 064A
-fef2 <final> 064A
-fef3 <initial> 064A
-fef4 <medial> 064A
-fef5 <isolated> 0644 0622
-fef6 <final> 0644 0622
-fef7 <isolated> 0644 0623
-fef8 <final> 0644 0623
-fef9 <isolated> 0644 0625
-fefa <final> 0644 0625
-fefb <isolated> 0644 0627
-fefc <final> 0644 0627
-ff01 <wide> 0021
-ff02 <wide> 0022
-ff03 <wide> 0023
-ff04 <wide> 0024
-ff05 <wide> 0025
-ff06 <wide> 0026
-ff07 <wide> 0027
-ff08 <wide> 0028
-ff09 <wide> 0029
-ff0a <wide> 002A
-ff0b <wide> 002B
-ff0c <wide> 002C
-ff0d <wide> 002D
-ff0e <wide> 002E
-ff0f <wide> 002F
-ff10 <wide> 0030
-ff11 <wide> 0031
-ff12 <wide> 0032
-ff13 <wide> 0033
-ff14 <wide> 0034
-ff15 <wide> 0035
-ff16 <wide> 0036
-ff17 <wide> 0037
-ff18 <wide> 0038
-ff19 <wide> 0039
-ff1a <wide> 003A
-ff1b <wide> 003B
-ff1c <wide> 003C
-ff1d <wide> 003D
-ff1e <wide> 003E
-ff1f <wide> 003F
-ff20 <wide> 0040
-ff21 <wide> 0041
-ff22 <wide> 0042
-ff23 <wide> 0043
-ff24 <wide> 0044
-ff25 <wide> 0045
-ff26 <wide> 0046
-ff27 <wide> 0047
-ff28 <wide> 0048
-ff29 <wide> 0049
-ff2a <wide> 004A
-ff2b <wide> 004B
-ff2c <wide> 004C
-ff2d <wide> 004D
-ff2e <wide> 004E
-ff2f <wide> 004F
-ff30 <wide> 0050
-ff31 <wide> 0051
-ff32 <wide> 0052
-ff33 <wide> 0053
-ff34 <wide> 0054
-ff35 <wide> 0055
-ff36 <wide> 0056
-ff37 <wide> 0057
-ff38 <wide> 0058
-ff39 <wide> 0059
-ff3a <wide> 005A
-ff3b <wide> 005B
-ff3c <wide> 005C
-ff3d <wide> 005D
-ff3e <wide> 005E
-ff3f <wide> 005F
-ff40 <wide> 0060
-ff41 <wide> 0061
-ff42 <wide> 0062
-ff43 <wide> 0063
-ff44 <wide> 0064
-ff45 <wide> 0065
-ff46 <wide> 0066
-ff47 <wide> 0067
-ff48 <wide> 0068
-ff49 <wide> 0069
-ff4a <wide> 006A
-ff4b <wide> 006B
-ff4c <wide> 006C
-ff4d <wide> 006D
-ff4e <wide> 006E
-ff4f <wide> 006F
-ff50 <wide> 0070
-ff51 <wide> 0071
-ff52 <wide> 0072
-ff53 <wide> 0073
-ff54 <wide> 0074
-ff55 <wide> 0075
-ff56 <wide> 0076
-ff57 <wide> 0077
-ff58 <wide> 0078
-ff59 <wide> 0079
-ff5a <wide> 007A
-ff5b <wide> 007B
-ff5c <wide> 007C
-ff5d <wide> 007D
-ff5e <wide> 007E
-ff61 <narrow> 3002
-ff62 <narrow> 300C
-ff63 <narrow> 300D
-ff64 <narrow> 3001
-ff65 <narrow> 30FB
-ff66 <narrow> 30F2
-ff67 <narrow> 30A1
-ff68 <narrow> 30A3
-ff69 <narrow> 30A5
-ff6a <narrow> 30A7
-ff6b <narrow> 30A9
-ff6c <narrow> 30E3
-ff6d <narrow> 30E5
-ff6e <narrow> 30E7
-ff6f <narrow> 30C3
-ff70 <narrow> 30FC
-ff71 <narrow> 30A2
-ff72 <narrow> 30A4
-ff73 <narrow> 30A6
-ff74 <narrow> 30A8
-ff75 <narrow> 30AA
-ff76 <narrow> 30AB
-ff77 <narrow> 30AD
-ff78 <narrow> 30AF
-ff79 <narrow> 30B1
-ff7a <narrow> 30B3
-ff7b <narrow> 30B5
-ff7c <narrow> 30B7
-ff7d <narrow> 30B9
-ff7e <narrow> 30BB
-ff7f <narrow> 30BD
-ff80 <narrow> 30BF
-ff81 <narrow> 30C1
-ff82 <narrow> 30C4
-ff83 <narrow> 30C6
-ff84 <narrow> 30C8
-ff85 <narrow> 30CA
-ff86 <narrow> 30CB
-ff87 <narrow> 30CC
-ff88 <narrow> 30CD
-ff89 <narrow> 30CE
-ff8a <narrow> 30CF
-ff8b <narrow> 30D2
-ff8c <narrow> 30D5
-ff8d <narrow> 30D8
-ff8e <narrow> 30DB
-ff8f <narrow> 30DE
-ff90 <narrow> 30DF
-ff91 <narrow> 30E0
-ff92 <narrow> 30E1
-ff93 <narrow> 30E2
-ff94 <narrow> 30E4
-ff95 <narrow> 30E6
-ff96 <narrow> 30E8
-ff97 <narrow> 30E9
-ff98 <narrow> 30EA
-ff99 <narrow> 30EB
-ff9a <narrow> 30EC
-ff9b <narrow> 30ED
-ff9c <narrow> 30EF
-ff9d <narrow> 30F3
-ff9e <narrow> 3099
-ff9f <narrow> 309A
-ffa0 <narrow> 3164
-ffa1 <narrow> 3131
-ffa2 <narrow> 3132
-ffa3 <narrow> 3133
-ffa4 <narrow> 3134
-ffa5 <narrow> 3135
-ffa6 <narrow> 3136
-ffa7 <narrow> 3137
-ffa8 <narrow> 3138
-ffa9 <narrow> 3139
-ffaa <narrow> 313A
-ffab <narrow> 313B
-ffac <narrow> 313C
-ffad <narrow> 313D
-ffae <narrow> 313E
-ffaf <narrow> 313F
-ffb0 <narrow> 3140
-ffb1 <narrow> 3141
-ffb2 <narrow> 3142
-ffb3 <narrow> 3143
-ffb4 <narrow> 3144
-ffb5 <narrow> 3145
-ffb6 <narrow> 3146
-ffb7 <narrow> 3147
-ffb8 <narrow> 3148
-ffb9 <narrow> 3149
-ffba <narrow> 314A
-ffbb <narrow> 314B
-ffbc <narrow> 314C
-ffbd <narrow> 314D
-ffbe <narrow> 314E
-ffc2 <narrow> 314F
-ffc3 <narrow> 3150
-ffc4 <narrow> 3151
-ffc5 <narrow> 3152
-ffc6 <narrow> 3153
-ffc7 <narrow> 3154
-ffca <narrow> 3155
-ffcb <narrow> 3156
-ffcc <narrow> 3157
-ffcd <narrow> 3158
-ffce <narrow> 3159
-ffcf <narrow> 315A
-ffd2 <narrow> 315B
-ffd3 <narrow> 315C
-ffd4 <narrow> 315D
-ffd5 <narrow> 315E
-ffd6 <narrow> 315F
-ffd7 <narrow> 3160
-ffda <narrow> 3161
-ffdb <narrow> 3162
-ffdc <narrow> 3163
-ffe0 <wide> 00A2
-ffe1 <wide> 00A3
-ffe2 <wide> 00AC
-ffe3 <wide> 00AF
-ffe4 <wide> 00A6
-ffe5 <wide> 00A5
-ffe6 <wide> 20A9
-ffe8 <narrow> 2502
-ffe9 <narrow> 2190
-ffea <narrow> 2191
-ffeb <narrow> 2192
-ffec <narrow> 2193
-ffed <narrow> 25A0
-ffee <narrow> 25CB
-END
diff --git a/contrib/perl5/lib/unicode/EAWidth.txt b/contrib/perl5/lib/unicode/EAWidth.txt
deleted file mode 100644
index 2b3577b..0000000
--- a/contrib/perl5/lib/unicode/EAWidth.txt
+++ /dev/null
@@ -1,10636 +0,0 @@
-# EastAsianWidth-3.txt
-#
-# East Asian Width Properties
-#
-# This file is a supplement to the UnicodeData file.
-# It contains informative data only.
-# The format is three fields separated by semicolons.
-# Field 1: Unicode value
-# Field 2: East Asian Width property, consisting of one of the following values:
-# "N", "A", "H", "W", "F", "Na"
-# - Assigned characters that are not listed explicitly are given the value "N".
-# - Characters within ranges marked by "First>" and "Last>" are omitted,
-# as in UnicodeData.txt. For example, the following means that
-# all characters between 3400 and 4DB5 have the value "W"
-# 3400;W;<CJK Ideograph Extension A, First>
-# 4DB5;W;<CJK Ideograph Extension A, Last>
-# Field 3: Unicode name (this is purely informative)
-#
-# See UTR #11: East Asian Character Width for more information
-0000;N;<control>
-0001;N;<control>
-0002;N;<control>
-0003;N;<control>
-0004;N;<control>
-0005;N;<control>
-0006;N;<control>
-0007;N;<control>
-0008;N;<control>
-0009;N;<control>
-000A;N;<control>
-000B;N;<control>
-000C;N;<control>
-000D;N;<control>
-000E;N;<control>
-000F;N;<control>
-0010;N;<control>
-0011;N;<control>
-0012;N;<control>
-0013;N;<control>
-0014;N;<control>
-0015;N;<control>
-0016;N;<control>
-0017;N;<control>
-0018;N;<control>
-0019;N;<control>
-001A;N;<control>
-001B;N;<control>
-001C;N;<control>
-001D;N;<control>
-001E;N;<control>
-001F;N;<control>
-0020;Na;SPACE
-0021;Na;EXCLAMATION MARK
-0022;Na;QUOTATION MARK
-0023;Na;NUMBER SIGN
-0024;Na;DOLLAR SIGN
-0025;Na;PERCENT SIGN
-0026;Na;AMPERSAND
-0027;Na;APOSTROPHE
-0028;Na;LEFT PARENTHESIS
-0029;Na;RIGHT PARENTHESIS
-002A;Na;ASTERISK
-002B;Na;PLUS SIGN
-002C;Na;COMMA
-002D;Na;HYPHEN-MINUS
-002E;Na;FULL STOP
-002F;Na;SOLIDUS
-0030;Na;DIGIT ZERO
-0031;Na;DIGIT ONE
-0032;Na;DIGIT TWO
-0033;Na;DIGIT THREE
-0034;Na;DIGIT FOUR
-0035;Na;DIGIT FIVE
-0036;Na;DIGIT SIX
-0037;Na;DIGIT SEVEN
-0038;Na;DIGIT EIGHT
-0039;Na;DIGIT NINE
-003A;Na;COLON
-003B;Na;SEMICOLON
-003C;Na;LESS-THAN SIGN
-003D;Na;EQUALS SIGN
-003E;Na;GREATER-THAN SIGN
-003F;Na;QUESTION MARK
-0040;Na;COMMERCIAL AT
-0041;Na;LATIN CAPITAL LETTER A
-0042;Na;LATIN CAPITAL LETTER B
-0043;Na;LATIN CAPITAL LETTER C
-0044;Na;LATIN CAPITAL LETTER D
-0045;Na;LATIN CAPITAL LETTER E
-0046;Na;LATIN CAPITAL LETTER F
-0047;Na;LATIN CAPITAL LETTER G
-0048;Na;LATIN CAPITAL LETTER H
-0049;Na;LATIN CAPITAL LETTER I
-004A;Na;LATIN CAPITAL LETTER J
-004B;Na;LATIN CAPITAL LETTER K
-004C;Na;LATIN CAPITAL LETTER L
-004D;Na;LATIN CAPITAL LETTER M
-004E;Na;LATIN CAPITAL LETTER N
-004F;Na;LATIN CAPITAL LETTER O
-0050;Na;LATIN CAPITAL LETTER P
-0051;Na;LATIN CAPITAL LETTER Q
-0052;Na;LATIN CAPITAL LETTER R
-0053;Na;LATIN CAPITAL LETTER S
-0054;Na;LATIN CAPITAL LETTER T
-0055;Na;LATIN CAPITAL LETTER U
-0056;Na;LATIN CAPITAL LETTER V
-0057;Na;LATIN CAPITAL LETTER W
-0058;Na;LATIN CAPITAL LETTER X
-0059;Na;LATIN CAPITAL LETTER Y
-005A;Na;LATIN CAPITAL LETTER Z
-005B;Na;LEFT SQUARE BRACKET
-005C;Na;REVERSE SOLIDUS
-005D;Na;RIGHT SQUARE BRACKET
-005E;Na;CIRCUMFLEX ACCENT
-005F;Na;LOW LINE
-0060;Na;GRAVE ACCENT
-0061;Na;LATIN SMALL LETTER A
-0062;Na;LATIN SMALL LETTER B
-0063;Na;LATIN SMALL LETTER C
-0064;Na;LATIN SMALL LETTER D
-0065;Na;LATIN SMALL LETTER E
-0066;Na;LATIN SMALL LETTER F
-0067;Na;LATIN SMALL LETTER G
-0068;Na;LATIN SMALL LETTER H
-0069;Na;LATIN SMALL LETTER I
-006A;Na;LATIN SMALL LETTER J
-006B;Na;LATIN SMALL LETTER K
-006C;Na;LATIN SMALL LETTER L
-006D;Na;LATIN SMALL LETTER M
-006E;Na;LATIN SMALL LETTER N
-006F;Na;LATIN SMALL LETTER O
-0070;Na;LATIN SMALL LETTER P
-0071;Na;LATIN SMALL LETTER Q
-0072;Na;LATIN SMALL LETTER R
-0073;Na;LATIN SMALL LETTER S
-0074;Na;LATIN SMALL LETTER T
-0075;Na;LATIN SMALL LETTER U
-0076;Na;LATIN SMALL LETTER V
-0077;Na;LATIN SMALL LETTER W
-0078;Na;LATIN SMALL LETTER X
-0079;Na;LATIN SMALL LETTER Y
-007A;Na;LATIN SMALL LETTER Z
-007B;Na;LEFT CURLY BRACKET
-007C;Na;VERTICAL LINE
-007D;Na;RIGHT CURLY BRACKET
-007E;Na;TILDE
-007F;N;<control>
-0080;N;<control>
-0081;N;<control>
-0082;N;<control>
-0083;N;<control>
-0084;N;<control>
-0085;N;<control>
-0086;N;<control>
-0087;N;<control>
-0088;N;<control>
-0089;N;<control>
-008A;N;<control>
-008B;N;<control>
-008C;N;<control>
-008D;N;<control>
-008E;N;<control>
-008F;N;<control>
-0090;N;<control>
-0091;N;<control>
-0092;N;<control>
-0093;N;<control>
-0094;N;<control>
-0095;N;<control>
-0096;N;<control>
-0097;N;<control>
-0098;N;<control>
-0099;N;<control>
-009A;N;<control>
-009B;N;<control>
-009C;N;<control>
-009D;N;<control>
-009E;N;<control>
-009F;N;<control>
-00A0;N;NO-BREAK SPACE
-00A1;A;INVERTED EXCLAMATION MARK
-00A2;Na;CENT SIGN
-00A3;Na;POUND SIGN
-00A4;A;CURRENCY SIGN
-00A5;Na;YEN SIGN
-00A6;Na;BROKEN BAR
-00A7;A;SECTION SIGN
-00A8;A;DIAERESIS
-00A9;N;COPYRIGHT SIGN
-00AA;A;FEMININE ORDINAL INDICATOR
-00AB;N;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-00AC;Na;NOT SIGN
-00AD;A;SOFT HYPHEN
-00AE;N;REGISTERED SIGN
-00AF;Na;MACRON
-00B0;A;DEGREE SIGN
-00B1;A;PLUS-MINUS SIGN
-00B2;A;SUPERSCRIPT TWO
-00B3;A;SUPERSCRIPT THREE
-00B4;A;ACUTE ACCENT
-00B5;N;MICRO SIGN
-00B6;A;PILCROW SIGN
-00B7;A;MIDDLE DOT
-00B8;A;CEDILLA
-00B9;A;SUPERSCRIPT ONE
-00BA;A;MASCULINE ORDINAL INDICATOR
-00BB;N;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-00BC;A;VULGAR FRACTION ONE QUARTER
-00BD;A;VULGAR FRACTION ONE HALF
-00BE;A;VULGAR FRACTION THREE QUARTERS
-00BF;A;INVERTED QUESTION MARK
-00C0;N;LATIN CAPITAL LETTER A WITH GRAVE
-00C1;N;LATIN CAPITAL LETTER A WITH ACUTE
-00C2;N;LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C3;N;LATIN CAPITAL LETTER A WITH TILDE
-00C4;N;LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5;N;LATIN CAPITAL LETTER A WITH RING ABOVE
-00C6;A;LATIN CAPITAL LETTER AE
-00C7;N;LATIN CAPITAL LETTER C WITH CEDILLA
-00C8;N;LATIN CAPITAL LETTER E WITH GRAVE
-00C9;N;LATIN CAPITAL LETTER E WITH ACUTE
-00CA;N;LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CB;N;LATIN CAPITAL LETTER E WITH DIAERESIS
-00CC;N;LATIN CAPITAL LETTER I WITH GRAVE
-00CD;N;LATIN CAPITAL LETTER I WITH ACUTE
-00CE;N;LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00CF;N;LATIN CAPITAL LETTER I WITH DIAERESIS
-00D0;A;LATIN CAPITAL LETTER ETH
-00D1;N;LATIN CAPITAL LETTER N WITH TILDE
-00D2;N;LATIN CAPITAL LETTER O WITH GRAVE
-00D3;N;LATIN CAPITAL LETTER O WITH ACUTE
-00D4;N;LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00D5;N;LATIN CAPITAL LETTER O WITH TILDE
-00D6;N;LATIN CAPITAL LETTER O WITH DIAERESIS
-00D7;A;MULTIPLICATION SIGN
-00D8;A;LATIN CAPITAL LETTER O WITH STROKE
-00D9;N;LATIN CAPITAL LETTER U WITH GRAVE
-00DA;N;LATIN CAPITAL LETTER U WITH ACUTE
-00DB;N;LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00DC;N;LATIN CAPITAL LETTER U WITH DIAERESIS
-00DD;N;LATIN CAPITAL LETTER Y WITH ACUTE
-00DE;A;LATIN CAPITAL LETTER THORN
-00DF;A;LATIN SMALL LETTER SHARP S
-00E0;A;LATIN SMALL LETTER A WITH GRAVE
-00E1;A;LATIN SMALL LETTER A WITH ACUTE
-00E2;N;LATIN SMALL LETTER A WITH CIRCUMFLEX
-00E3;N;LATIN SMALL LETTER A WITH TILDE
-00E4;N;LATIN SMALL LETTER A WITH DIAERESIS
-00E5;N;LATIN SMALL LETTER A WITH RING ABOVE
-00E6;A;LATIN SMALL LETTER AE
-00E7;N;LATIN SMALL LETTER C WITH CEDILLA
-00E8;A;LATIN SMALL LETTER E WITH GRAVE
-00E9;A;LATIN SMALL LETTER E WITH ACUTE
-00EA;A;LATIN SMALL LETTER E WITH CIRCUMFLEX
-00EB;N;LATIN SMALL LETTER E WITH DIAERESIS
-00EC;A;LATIN SMALL LETTER I WITH GRAVE
-00ED;A;LATIN SMALL LETTER I WITH ACUTE
-00EE;N;LATIN SMALL LETTER I WITH CIRCUMFLEX
-00EF;N;LATIN SMALL LETTER I WITH DIAERESIS
-00F0;A;LATIN SMALL LETTER ETH
-00F1;N;LATIN SMALL LETTER N WITH TILDE
-00F2;A;LATIN SMALL LETTER O WITH GRAVE
-00F3;A;LATIN SMALL LETTER O WITH ACUTE
-00F4;N;LATIN SMALL LETTER O WITH CIRCUMFLEX
-00F5;N;LATIN SMALL LETTER O WITH TILDE
-00F6;N;LATIN SMALL LETTER O WITH DIAERESIS
-00F7;A;DIVISION SIGN
-00F8;A;LATIN SMALL LETTER O WITH STROKE
-00F9;A;LATIN SMALL LETTER U WITH GRAVE
-00FA;A;LATIN SMALL LETTER U WITH ACUTE
-00FB;N;LATIN SMALL LETTER U WITH CIRCUMFLEX
-00FC;A;LATIN SMALL LETTER U WITH DIAERESIS
-00FD;N;LATIN SMALL LETTER Y WITH ACUTE
-00FE;A;LATIN SMALL LETTER THORN
-00FF;N;LATIN SMALL LETTER Y WITH DIAERESIS
-0100;N;LATIN CAPITAL LETTER A WITH MACRON
-0101;A;LATIN SMALL LETTER A WITH MACRON
-0102;N;LATIN CAPITAL LETTER A WITH BREVE
-0103;N;LATIN SMALL LETTER A WITH BREVE
-0104;N;LATIN CAPITAL LETTER A WITH OGONEK
-0105;N;LATIN SMALL LETTER A WITH OGONEK
-0106;N;LATIN CAPITAL LETTER C WITH ACUTE
-0107;N;LATIN SMALL LETTER C WITH ACUTE
-0108;N;LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-0109;N;LATIN SMALL LETTER C WITH CIRCUMFLEX
-010A;N;LATIN CAPITAL LETTER C WITH DOT ABOVE
-010B;N;LATIN SMALL LETTER C WITH DOT ABOVE
-010C;N;LATIN CAPITAL LETTER C WITH CARON
-010D;N;LATIN SMALL LETTER C WITH CARON
-010E;N;LATIN CAPITAL LETTER D WITH CARON
-010F;N;LATIN SMALL LETTER D WITH CARON
-0110;N;LATIN CAPITAL LETTER D WITH STROKE
-0111;A;LATIN SMALL LETTER D WITH STROKE
-0112;N;LATIN CAPITAL LETTER E WITH MACRON
-0113;A;LATIN SMALL LETTER E WITH MACRON
-0114;N;LATIN CAPITAL LETTER E WITH BREVE
-0115;N;LATIN SMALL LETTER E WITH BREVE
-0116;N;LATIN CAPITAL LETTER E WITH DOT ABOVE
-0117;N;LATIN SMALL LETTER E WITH DOT ABOVE
-0118;N;LATIN CAPITAL LETTER E WITH OGONEK
-0119;N;LATIN SMALL LETTER E WITH OGONEK
-011A;N;LATIN CAPITAL LETTER E WITH CARON
-011B;A;LATIN SMALL LETTER E WITH CARON
-011C;N;LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-011D;N;LATIN SMALL LETTER G WITH CIRCUMFLEX
-011E;N;LATIN CAPITAL LETTER G WITH BREVE
-011F;N;LATIN SMALL LETTER G WITH BREVE
-0120;N;LATIN CAPITAL LETTER G WITH DOT ABOVE
-0121;N;LATIN SMALL LETTER G WITH DOT ABOVE
-0122;N;LATIN CAPITAL LETTER G WITH CEDILLA
-0123;N;LATIN SMALL LETTER G WITH CEDILLA
-0124;N;LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-0125;N;LATIN SMALL LETTER H WITH CIRCUMFLEX
-0126;A;LATIN CAPITAL LETTER H WITH STROKE
-0127;A;LATIN SMALL LETTER H WITH STROKE
-0128;N;LATIN CAPITAL LETTER I WITH TILDE
-0129;N;LATIN SMALL LETTER I WITH TILDE
-012A;N;LATIN CAPITAL LETTER I WITH MACRON
-012B;A;LATIN SMALL LETTER I WITH MACRON
-012C;N;LATIN CAPITAL LETTER I WITH BREVE
-012D;N;LATIN SMALL LETTER I WITH BREVE
-012E;N;LATIN CAPITAL LETTER I WITH OGONEK
-012F;N;LATIN SMALL LETTER I WITH OGONEK
-0130;N;LATIN CAPITAL LETTER I WITH DOT ABOVE
-0131;A;LATIN SMALL LETTER DOTLESS I
-0132;A;LATIN CAPITAL LIGATURE IJ
-0133;A;LATIN SMALL LIGATURE IJ
-0134;N;LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-0135;N;LATIN SMALL LETTER J WITH CIRCUMFLEX
-0136;N;LATIN CAPITAL LETTER K WITH CEDILLA
-0137;N;LATIN SMALL LETTER K WITH CEDILLA
-0138;A;LATIN SMALL LETTER KRA
-0139;N;LATIN CAPITAL LETTER L WITH ACUTE
-013A;N;LATIN SMALL LETTER L WITH ACUTE
-013B;N;LATIN CAPITAL LETTER L WITH CEDILLA
-013C;N;LATIN SMALL LETTER L WITH CEDILLA
-013D;N;LATIN CAPITAL LETTER L WITH CARON
-013E;N;LATIN SMALL LETTER L WITH CARON
-013F;A;LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0140;A;LATIN SMALL LETTER L WITH MIDDLE DOT
-0141;A;LATIN CAPITAL LETTER L WITH STROKE
-0142;A;LATIN SMALL LETTER L WITH STROKE
-0143;N;LATIN CAPITAL LETTER N WITH ACUTE
-0144;A;LATIN SMALL LETTER N WITH ACUTE
-0145;N;LATIN CAPITAL LETTER N WITH CEDILLA
-0146;N;LATIN SMALL LETTER N WITH CEDILLA
-0147;N;LATIN CAPITAL LETTER N WITH CARON
-0148;A;LATIN SMALL LETTER N WITH CARON
-0149;A;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-014A;A;LATIN CAPITAL LETTER ENG
-014B;N;LATIN SMALL LETTER ENG
-014C;N;LATIN CAPITAL LETTER O WITH MACRON
-014D;A;LATIN SMALL LETTER O WITH MACRON
-014E;N;LATIN CAPITAL LETTER O WITH BREVE
-014F;N;LATIN SMALL LETTER O WITH BREVE
-0150;N;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0151;N;LATIN SMALL LETTER O WITH DOUBLE ACUTE
-0152;A;LATIN CAPITAL LIGATURE OE
-0153;A;LATIN SMALL LIGATURE OE
-0154;N;LATIN CAPITAL LETTER R WITH ACUTE
-0155;N;LATIN SMALL LETTER R WITH ACUTE
-0156;N;LATIN CAPITAL LETTER R WITH CEDILLA
-0157;N;LATIN SMALL LETTER R WITH CEDILLA
-0158;N;LATIN CAPITAL LETTER R WITH CARON
-0159;N;LATIN SMALL LETTER R WITH CARON
-015A;N;LATIN CAPITAL LETTER S WITH ACUTE
-015B;N;LATIN SMALL LETTER S WITH ACUTE
-015C;N;LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-015D;N;LATIN SMALL LETTER S WITH CIRCUMFLEX
-015E;N;LATIN CAPITAL LETTER S WITH CEDILLA
-015F;N;LATIN SMALL LETTER S WITH CEDILLA
-0160;N;LATIN CAPITAL LETTER S WITH CARON
-0161;N;LATIN SMALL LETTER S WITH CARON
-0162;N;LATIN CAPITAL LETTER T WITH CEDILLA
-0163;N;LATIN SMALL LETTER T WITH CEDILLA
-0164;N;LATIN CAPITAL LETTER T WITH CARON
-0165;N;LATIN SMALL LETTER T WITH CARON
-0166;A;LATIN CAPITAL LETTER T WITH STROKE
-0167;A;LATIN SMALL LETTER T WITH STROKE
-0168;N;LATIN CAPITAL LETTER U WITH TILDE
-0169;N;LATIN SMALL LETTER U WITH TILDE
-016A;N;LATIN CAPITAL LETTER U WITH MACRON
-016B;A;LATIN SMALL LETTER U WITH MACRON
-016C;N;LATIN CAPITAL LETTER U WITH BREVE
-016D;N;LATIN SMALL LETTER U WITH BREVE
-016E;N;LATIN CAPITAL LETTER U WITH RING ABOVE
-016F;N;LATIN SMALL LETTER U WITH RING ABOVE
-0170;N;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0171;N;LATIN SMALL LETTER U WITH DOUBLE ACUTE
-0172;N;LATIN CAPITAL LETTER U WITH OGONEK
-0173;N;LATIN SMALL LETTER U WITH OGONEK
-0174;N;LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0175;N;LATIN SMALL LETTER W WITH CIRCUMFLEX
-0176;N;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0177;N;LATIN SMALL LETTER Y WITH CIRCUMFLEX
-0178;N;LATIN CAPITAL LETTER Y WITH DIAERESIS
-0179;N;LATIN CAPITAL LETTER Z WITH ACUTE
-017A;N;LATIN SMALL LETTER Z WITH ACUTE
-017B;N;LATIN CAPITAL LETTER Z WITH DOT ABOVE
-017C;N;LATIN SMALL LETTER Z WITH DOT ABOVE
-017D;N;LATIN CAPITAL LETTER Z WITH CARON
-017E;N;LATIN SMALL LETTER Z WITH CARON
-017F;N;LATIN SMALL LETTER LONG S
-0180;N;LATIN SMALL LETTER B WITH STROKE
-0181;N;LATIN CAPITAL LETTER B WITH HOOK
-0182;N;LATIN CAPITAL LETTER B WITH TOPBAR
-0183;N;LATIN SMALL LETTER B WITH TOPBAR
-0184;N;LATIN CAPITAL LETTER TONE SIX
-0185;N;LATIN SMALL LETTER TONE SIX
-0186;N;LATIN CAPITAL LETTER OPEN O
-0187;N;LATIN CAPITAL LETTER C WITH HOOK
-0188;N;LATIN SMALL LETTER C WITH HOOK
-0189;N;LATIN CAPITAL LETTER AFRICAN D
-018A;N;LATIN CAPITAL LETTER D WITH HOOK
-018B;N;LATIN CAPITAL LETTER D WITH TOPBAR
-018C;N;LATIN SMALL LETTER D WITH TOPBAR
-018D;N;LATIN SMALL LETTER TURNED DELTA
-018E;N;LATIN CAPITAL LETTER REVERSED E
-018F;N;LATIN CAPITAL LETTER SCHWA
-0190;N;LATIN CAPITAL LETTER OPEN E
-0191;N;LATIN CAPITAL LETTER F WITH HOOK
-0192;N;LATIN SMALL LETTER F WITH HOOK
-0193;N;LATIN CAPITAL LETTER G WITH HOOK
-0194;N;LATIN CAPITAL LETTER GAMMA
-0195;N;LATIN SMALL LETTER HV
-0196;N;LATIN CAPITAL LETTER IOTA
-0197;N;LATIN CAPITAL LETTER I WITH STROKE
-0198;N;LATIN CAPITAL LETTER K WITH HOOK
-0199;N;LATIN SMALL LETTER K WITH HOOK
-019A;N;LATIN SMALL LETTER L WITH BAR
-019B;N;LATIN SMALL LETTER LAMBDA WITH STROKE
-019C;N;LATIN CAPITAL LETTER TURNED M
-019D;N;LATIN CAPITAL LETTER N WITH LEFT HOOK
-019E;N;LATIN SMALL LETTER N WITH LONG RIGHT LEG
-019F;N;LATIN CAPITAL LETTER O WITH MIDDLE TILDE
-01A0;N;LATIN CAPITAL LETTER O WITH HORN
-01A1;N;LATIN SMALL LETTER O WITH HORN
-01A2;N;LATIN CAPITAL LETTER OI
-01A3;N;LATIN SMALL LETTER OI
-01A4;N;LATIN CAPITAL LETTER P WITH HOOK
-01A5;N;LATIN SMALL LETTER P WITH HOOK
-01A6;N;LATIN LETTER YR
-01A7;N;LATIN CAPITAL LETTER TONE TWO
-01A8;N;LATIN SMALL LETTER TONE TWO
-01A9;N;LATIN CAPITAL LETTER ESH
-01AA;N;LATIN LETTER REVERSED ESH LOOP
-01AB;N;LATIN SMALL LETTER T WITH PALATAL HOOK
-01AC;N;LATIN CAPITAL LETTER T WITH HOOK
-01AD;N;LATIN SMALL LETTER T WITH HOOK
-01AE;N;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
-01AF;N;LATIN CAPITAL LETTER U WITH HORN
-01B0;N;LATIN SMALL LETTER U WITH HORN
-01B1;N;LATIN CAPITAL LETTER UPSILON
-01B2;N;LATIN CAPITAL LETTER V WITH HOOK
-01B3;N;LATIN CAPITAL LETTER Y WITH HOOK
-01B4;N;LATIN SMALL LETTER Y WITH HOOK
-01B5;N;LATIN CAPITAL LETTER Z WITH STROKE
-01B6;N;LATIN SMALL LETTER Z WITH STROKE
-01B7;N;LATIN CAPITAL LETTER EZH
-01B8;N;LATIN CAPITAL LETTER EZH REVERSED
-01B9;N;LATIN SMALL LETTER EZH REVERSED
-01BA;N;LATIN SMALL LETTER EZH WITH TAIL
-01BB;N;LATIN LETTER TWO WITH STROKE
-01BC;N;LATIN CAPITAL LETTER TONE FIVE
-01BD;N;LATIN SMALL LETTER TONE FIVE
-01BE;N;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
-01BF;N;LATIN LETTER WYNN
-01C0;N;LATIN LETTER DENTAL CLICK
-01C1;N;LATIN LETTER LATERAL CLICK
-01C2;N;LATIN LETTER ALVEOLAR CLICK
-01C3;N;LATIN LETTER RETROFLEX CLICK
-01C4;N;LATIN CAPITAL LETTER DZ WITH CARON
-01C5;N;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-01C6;N;LATIN SMALL LETTER DZ WITH CARON
-01C7;N;LATIN CAPITAL LETTER LJ
-01C8;N;LATIN CAPITAL LETTER L WITH SMALL LETTER J
-01C9;N;LATIN SMALL LETTER LJ
-01CA;N;LATIN CAPITAL LETTER NJ
-01CB;N;LATIN CAPITAL LETTER N WITH SMALL LETTER J
-01CC;N;LATIN SMALL LETTER NJ
-01CD;N;LATIN CAPITAL LETTER A WITH CARON
-01CE;A;LATIN SMALL LETTER A WITH CARON
-01CF;N;LATIN CAPITAL LETTER I WITH CARON
-01D0;A;LATIN SMALL LETTER I WITH CARON
-01D1;N;LATIN CAPITAL LETTER O WITH CARON
-01D2;A;LATIN SMALL LETTER O WITH CARON
-01D3;N;LATIN CAPITAL LETTER U WITH CARON
-01D4;A;LATIN SMALL LETTER U WITH CARON
-01D5;N;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-01D6;A;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
-01D7;N;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-01D8;A;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
-01D9;N;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-01DA;A;LATIN SMALL LETTER U WITH DIAERESIS AND CARON
-01DB;N;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-01DC;A;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
-01DD;N;LATIN SMALL LETTER TURNED E
-01DE;N;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-01DF;N;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-01E0;N;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-01E1;N;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
-01E2;N;LATIN CAPITAL LETTER AE WITH MACRON
-01E3;N;LATIN SMALL LETTER AE WITH MACRON
-01E4;N;LATIN CAPITAL LETTER G WITH STROKE
-01E5;N;LATIN SMALL LETTER G WITH STROKE
-01E6;N;LATIN CAPITAL LETTER G WITH CARON
-01E7;N;LATIN SMALL LETTER G WITH CARON
-01E8;N;LATIN CAPITAL LETTER K WITH CARON
-01E9;N;LATIN SMALL LETTER K WITH CARON
-01EA;N;LATIN CAPITAL LETTER O WITH OGONEK
-01EB;N;LATIN SMALL LETTER O WITH OGONEK
-01EC;N;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-01ED;N;LATIN SMALL LETTER O WITH OGONEK AND MACRON
-01EE;N;LATIN CAPITAL LETTER EZH WITH CARON
-01EF;N;LATIN SMALL LETTER EZH WITH CARON
-01F0;N;LATIN SMALL LETTER J WITH CARON
-01F1;N;LATIN CAPITAL LETTER DZ
-01F2;N;LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-01F3;N;LATIN SMALL LETTER DZ
-01F4;N;LATIN CAPITAL LETTER G WITH ACUTE
-01F5;N;LATIN SMALL LETTER G WITH ACUTE
-01F6;N;LATIN CAPITAL LETTER HWAIR
-01F7;N;LATIN CAPITAL LETTER WYNN
-01F8;N;LATIN CAPITAL LETTER N WITH GRAVE
-01F9;N;LATIN SMALL LETTER N WITH GRAVE
-01FA;N;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-01FB;N;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-01FC;N;LATIN CAPITAL LETTER AE WITH ACUTE
-01FD;N;LATIN SMALL LETTER AE WITH ACUTE
-01FE;N;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-01FF;N;LATIN SMALL LETTER O WITH STROKE AND ACUTE
-0200;N;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
-0201;N;LATIN SMALL LETTER A WITH DOUBLE GRAVE
-0202;N;LATIN CAPITAL LETTER A WITH INVERTED BREVE
-0203;N;LATIN SMALL LETTER A WITH INVERTED BREVE
-0204;N;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
-0205;N;LATIN SMALL LETTER E WITH DOUBLE GRAVE
-0206;N;LATIN CAPITAL LETTER E WITH INVERTED BREVE
-0207;N;LATIN SMALL LETTER E WITH INVERTED BREVE
-0208;N;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
-0209;N;LATIN SMALL LETTER I WITH DOUBLE GRAVE
-020A;N;LATIN CAPITAL LETTER I WITH INVERTED BREVE
-020B;N;LATIN SMALL LETTER I WITH INVERTED BREVE
-020C;N;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
-020D;N;LATIN SMALL LETTER O WITH DOUBLE GRAVE
-020E;N;LATIN CAPITAL LETTER O WITH INVERTED BREVE
-020F;N;LATIN SMALL LETTER O WITH INVERTED BREVE
-0210;N;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
-0211;N;LATIN SMALL LETTER R WITH DOUBLE GRAVE
-0212;N;LATIN CAPITAL LETTER R WITH INVERTED BREVE
-0213;N;LATIN SMALL LETTER R WITH INVERTED BREVE
-0214;N;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
-0215;N;LATIN SMALL LETTER U WITH DOUBLE GRAVE
-0216;N;LATIN CAPITAL LETTER U WITH INVERTED BREVE
-0217;N;LATIN SMALL LETTER U WITH INVERTED BREVE
-0218;N;LATIN CAPITAL LETTER S WITH COMMA BELOW
-0219;N;LATIN SMALL LETTER S WITH COMMA BELOW
-021A;N;LATIN CAPITAL LETTER T WITH COMMA BELOW
-021B;N;LATIN SMALL LETTER T WITH COMMA BELOW
-021C;N;LATIN CAPITAL LETTER YOGH
-021D;N;LATIN SMALL LETTER YOGH
-021E;N;LATIN CAPITAL LETTER H WITH CARON
-021F;N;LATIN SMALL LETTER H WITH CARON
-0222;N;LATIN CAPITAL LETTER OU
-0223;N;LATIN SMALL LETTER OU
-0224;N;LATIN CAPITAL LETTER Z WITH HOOK
-0225;N;LATIN SMALL LETTER Z WITH HOOK
-0226;N;LATIN CAPITAL LETTER A WITH DOT ABOVE
-0227;N;LATIN SMALL LETTER A WITH DOT ABOVE
-0228;N;LATIN CAPITAL LETTER E WITH CEDILLA
-0229;N;LATIN SMALL LETTER E WITH CEDILLA
-022A;N;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
-022B;N;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
-022C;N;LATIN CAPITAL LETTER O WITH TILDE AND MACRON
-022D;N;LATIN SMALL LETTER O WITH TILDE AND MACRON
-022E;N;LATIN CAPITAL LETTER O WITH DOT ABOVE
-022F;N;LATIN SMALL LETTER O WITH DOT ABOVE
-0230;N;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
-0231;N;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
-0232;N;LATIN CAPITAL LETTER Y WITH MACRON
-0233;N;LATIN SMALL LETTER Y WITH MACRON
-0250;N;LATIN SMALL LETTER TURNED A
-0251;A;LATIN SMALL LETTER ALPHA
-0252;N;LATIN SMALL LETTER TURNED ALPHA
-0253;N;LATIN SMALL LETTER B WITH HOOK
-0254;N;LATIN SMALL LETTER OPEN O
-0255;N;LATIN SMALL LETTER C WITH CURL
-0256;N;LATIN SMALL LETTER D WITH TAIL
-0257;N;LATIN SMALL LETTER D WITH HOOK
-0258;N;LATIN SMALL LETTER REVERSED E
-0259;N;LATIN SMALL LETTER SCHWA
-025A;N;LATIN SMALL LETTER SCHWA WITH HOOK
-025B;N;LATIN SMALL LETTER OPEN E
-025C;N;LATIN SMALL LETTER REVERSED OPEN E
-025D;N;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
-025E;N;LATIN SMALL LETTER CLOSED REVERSED OPEN E
-025F;N;LATIN SMALL LETTER DOTLESS J WITH STROKE
-0260;N;LATIN SMALL LETTER G WITH HOOK
-0261;A;LATIN SMALL LETTER SCRIPT G
-0262;N;LATIN LETTER SMALL CAPITAL G
-0263;N;LATIN SMALL LETTER GAMMA
-0264;N;LATIN SMALL LETTER RAMS HORN
-0265;N;LATIN SMALL LETTER TURNED H
-0266;N;LATIN SMALL LETTER H WITH HOOK
-0267;N;LATIN SMALL LETTER HENG WITH HOOK
-0268;N;LATIN SMALL LETTER I WITH STROKE
-0269;N;LATIN SMALL LETTER IOTA
-026A;N;LATIN LETTER SMALL CAPITAL I
-026B;N;LATIN SMALL LETTER L WITH MIDDLE TILDE
-026C;N;LATIN SMALL LETTER L WITH BELT
-026D;N;LATIN SMALL LETTER L WITH RETROFLEX HOOK
-026E;N;LATIN SMALL LETTER LEZH
-026F;N;LATIN SMALL LETTER TURNED M
-0270;N;LATIN SMALL LETTER TURNED M WITH LONG LEG
-0271;N;LATIN SMALL LETTER M WITH HOOK
-0272;N;LATIN SMALL LETTER N WITH LEFT HOOK
-0273;N;LATIN SMALL LETTER N WITH RETROFLEX HOOK
-0274;N;LATIN LETTER SMALL CAPITAL N
-0275;N;LATIN SMALL LETTER BARRED O
-0276;N;LATIN LETTER SMALL CAPITAL OE
-0277;N;LATIN SMALL LETTER CLOSED OMEGA
-0278;N;LATIN SMALL LETTER PHI
-0279;N;LATIN SMALL LETTER TURNED R
-027A;N;LATIN SMALL LETTER TURNED R WITH LONG LEG
-027B;N;LATIN SMALL LETTER TURNED R WITH HOOK
-027C;N;LATIN SMALL LETTER R WITH LONG LEG
-027D;N;LATIN SMALL LETTER R WITH TAIL
-027E;N;LATIN SMALL LETTER R WITH FISHHOOK
-027F;N;LATIN SMALL LETTER REVERSED R WITH FISHHOOK
-0280;N;LATIN LETTER SMALL CAPITAL R
-0281;N;LATIN LETTER SMALL CAPITAL INVERTED R
-0282;N;LATIN SMALL LETTER S WITH HOOK
-0283;N;LATIN SMALL LETTER ESH
-0284;N;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
-0285;N;LATIN SMALL LETTER SQUAT REVERSED ESH
-0286;N;LATIN SMALL LETTER ESH WITH CURL
-0287;N;LATIN SMALL LETTER TURNED T
-0288;N;LATIN SMALL LETTER T WITH RETROFLEX HOOK
-0289;N;LATIN SMALL LETTER U BAR
-028A;N;LATIN SMALL LETTER UPSILON
-028B;N;LATIN SMALL LETTER V WITH HOOK
-028C;N;LATIN SMALL LETTER TURNED V
-028D;N;LATIN SMALL LETTER TURNED W
-028E;N;LATIN SMALL LETTER TURNED Y
-028F;N;LATIN LETTER SMALL CAPITAL Y
-0290;N;LATIN SMALL LETTER Z WITH RETROFLEX HOOK
-0291;N;LATIN SMALL LETTER Z WITH CURL
-0292;N;LATIN SMALL LETTER EZH
-0293;N;LATIN SMALL LETTER EZH WITH CURL
-0294;N;LATIN LETTER GLOTTAL STOP
-0295;N;LATIN LETTER PHARYNGEAL VOICED FRICATIVE
-0296;N;LATIN LETTER INVERTED GLOTTAL STOP
-0297;N;LATIN LETTER STRETCHED C
-0298;N;LATIN LETTER BILABIAL CLICK
-0299;N;LATIN LETTER SMALL CAPITAL B
-029A;N;LATIN SMALL LETTER CLOSED OPEN E
-029B;N;LATIN LETTER SMALL CAPITAL G WITH HOOK
-029C;N;LATIN LETTER SMALL CAPITAL H
-029D;N;LATIN SMALL LETTER J WITH CROSSED-TAIL
-029E;N;LATIN SMALL LETTER TURNED K
-029F;N;LATIN LETTER SMALL CAPITAL L
-02A0;N;LATIN SMALL LETTER Q WITH HOOK
-02A1;N;LATIN LETTER GLOTTAL STOP WITH STROKE
-02A2;N;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
-02A3;N;LATIN SMALL LETTER DZ DIGRAPH
-02A4;N;LATIN SMALL LETTER DEZH DIGRAPH
-02A5;N;LATIN SMALL LETTER DZ DIGRAPH WITH CURL
-02A6;N;LATIN SMALL LETTER TS DIGRAPH
-02A7;N;LATIN SMALL LETTER TESH DIGRAPH
-02A8;N;LATIN SMALL LETTER TC DIGRAPH WITH CURL
-02A9;N;LATIN SMALL LETTER FENG DIGRAPH
-02AA;N;LATIN SMALL LETTER LS DIGRAPH
-02AB;N;LATIN SMALL LETTER LZ DIGRAPH
-02AC;N;LATIN LETTER BILABIAL PERCUSSIVE
-02AD;N;LATIN LETTER BIDENTAL PERCUSSIVE
-02B0;N;MODIFIER LETTER SMALL H
-02B1;N;MODIFIER LETTER SMALL H WITH HOOK
-02B2;N;MODIFIER LETTER SMALL J
-02B3;N;MODIFIER LETTER SMALL R
-02B4;N;MODIFIER LETTER SMALL TURNED R
-02B5;N;MODIFIER LETTER SMALL TURNED R WITH HOOK
-02B6;N;MODIFIER LETTER SMALL CAPITAL INVERTED R
-02B7;N;MODIFIER LETTER SMALL W
-02B8;N;MODIFIER LETTER SMALL Y
-02B9;N;MODIFIER LETTER PRIME
-02BA;N;MODIFIER LETTER DOUBLE PRIME
-02BB;N;MODIFIER LETTER TURNED COMMA
-02BC;N;MODIFIER LETTER APOSTROPHE
-02BD;N;MODIFIER LETTER REVERSED COMMA
-02BE;N;MODIFIER LETTER RIGHT HALF RING
-02BF;N;MODIFIER LETTER LEFT HALF RING
-02C0;N;MODIFIER LETTER GLOTTAL STOP
-02C1;N;MODIFIER LETTER REVERSED GLOTTAL STOP
-02C2;N;MODIFIER LETTER LEFT ARROWHEAD
-02C3;N;MODIFIER LETTER RIGHT ARROWHEAD
-02C4;N;MODIFIER LETTER UP ARROWHEAD
-02C5;N;MODIFIER LETTER DOWN ARROWHEAD
-02C6;N;MODIFIER LETTER CIRCUMFLEX ACCENT
-02C7;A;CARON
-02C8;N;MODIFIER LETTER VERTICAL LINE
-02C9;A;MODIFIER LETTER MACRON
-02CA;A;MODIFIER LETTER ACUTE ACCENT
-02CB;A;MODIFIER LETTER GRAVE ACCENT
-02CC;N;MODIFIER LETTER LOW VERTICAL LINE
-02CD;A;MODIFIER LETTER LOW MACRON
-02CE;N;MODIFIER LETTER LOW GRAVE ACCENT
-02CF;N;MODIFIER LETTER LOW ACUTE ACCENT
-02D0;A;MODIFIER LETTER TRIANGULAR COLON
-02D1;N;MODIFIER LETTER HALF TRIANGULAR COLON
-02D2;N;MODIFIER LETTER CENTRED RIGHT HALF RING
-02D3;N;MODIFIER LETTER CENTRED LEFT HALF RING
-02D4;N;MODIFIER LETTER UP TACK
-02D5;N;MODIFIER LETTER DOWN TACK
-02D6;N;MODIFIER LETTER PLUS SIGN
-02D7;N;MODIFIER LETTER MINUS SIGN
-02D8;A;BREVE
-02D9;A;DOT ABOVE
-02DA;A;RING ABOVE
-02DB;A;OGONEK
-02DC;N;SMALL TILDE
-02DD;A;DOUBLE ACUTE ACCENT
-02DE;N;MODIFIER LETTER RHOTIC HOOK
-02DF;N;MODIFIER LETTER CROSS ACCENT
-02E0;N;MODIFIER LETTER SMALL GAMMA
-02E1;N;MODIFIER LETTER SMALL L
-02E2;N;MODIFIER LETTER SMALL S
-02E3;N;MODIFIER LETTER SMALL X
-02E4;N;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
-02E5;N;MODIFIER LETTER EXTRA-HIGH TONE BAR
-02E6;N;MODIFIER LETTER HIGH TONE BAR
-02E7;N;MODIFIER LETTER MID TONE BAR
-02E8;N;MODIFIER LETTER LOW TONE BAR
-02E9;N;MODIFIER LETTER EXTRA-LOW TONE BAR
-02EA;N;MODIFIER LETTER YIN DEPARTING TONE MARK
-02EB;N;MODIFIER LETTER YANG DEPARTING TONE MARK
-02EC;N;MODIFIER LETTER VOICING
-02ED;N;MODIFIER LETTER UNASPIRATED
-02EE;N;MODIFIER LETTER DOUBLE APOSTROPHE
-0300;A;COMBINING GRAVE ACCENT
-0301;A;COMBINING ACUTE ACCENT
-0302;A;COMBINING CIRCUMFLEX ACCENT
-0303;A;COMBINING TILDE
-0304;A;COMBINING MACRON
-0305;A;COMBINING OVERLINE
-0306;A;COMBINING BREVE
-0307;A;COMBINING DOT ABOVE
-0308;A;COMBINING DIAERESIS
-0309;A;COMBINING HOOK ABOVE
-030A;A;COMBINING RING ABOVE
-030B;A;COMBINING DOUBLE ACUTE ACCENT
-030C;A;COMBINING CARON
-030D;A;COMBINING VERTICAL LINE ABOVE
-030E;A;COMBINING DOUBLE VERTICAL LINE ABOVE
-030F;A;COMBINING DOUBLE GRAVE ACCENT
-0310;A;COMBINING CANDRABINDU
-0311;A;COMBINING INVERTED BREVE
-0312;A;COMBINING TURNED COMMA ABOVE
-0313;A;COMBINING COMMA ABOVE
-0314;A;COMBINING REVERSED COMMA ABOVE
-0315;A;COMBINING COMMA ABOVE RIGHT
-0316;A;COMBINING GRAVE ACCENT BELOW
-0317;A;COMBINING ACUTE ACCENT BELOW
-0318;A;COMBINING LEFT TACK BELOW
-0319;A;COMBINING RIGHT TACK BELOW
-031A;A;COMBINING LEFT ANGLE ABOVE
-031B;A;COMBINING HORN
-031C;A;COMBINING LEFT HALF RING BELOW
-031D;A;COMBINING UP TACK BELOW
-031E;A;COMBINING DOWN TACK BELOW
-031F;A;COMBINING PLUS SIGN BELOW
-0320;A;COMBINING MINUS SIGN BELOW
-0321;A;COMBINING PALATALIZED HOOK BELOW
-0322;A;COMBINING RETROFLEX HOOK BELOW
-0323;A;COMBINING DOT BELOW
-0324;A;COMBINING DIAERESIS BELOW
-0325;A;COMBINING RING BELOW
-0326;A;COMBINING COMMA BELOW
-0327;A;COMBINING CEDILLA
-0328;A;COMBINING OGONEK
-0329;A;COMBINING VERTICAL LINE BELOW
-032A;A;COMBINING BRIDGE BELOW
-032B;A;COMBINING INVERTED DOUBLE ARCH BELOW
-032C;A;COMBINING CARON BELOW
-032D;A;COMBINING CIRCUMFLEX ACCENT BELOW
-032E;A;COMBINING BREVE BELOW
-032F;A;COMBINING INVERTED BREVE BELOW
-0330;A;COMBINING TILDE BELOW
-0331;A;COMBINING MACRON BELOW
-0332;A;COMBINING LOW LINE
-0333;A;COMBINING DOUBLE LOW LINE
-0334;A;COMBINING TILDE OVERLAY
-0335;A;COMBINING SHORT STROKE OVERLAY
-0336;A;COMBINING LONG STROKE OVERLAY
-0337;A;COMBINING SHORT SOLIDUS OVERLAY
-0338;A;COMBINING LONG SOLIDUS OVERLAY
-0339;A;COMBINING RIGHT HALF RING BELOW
-033A;A;COMBINING INVERTED BRIDGE BELOW
-033B;A;COMBINING SQUARE BELOW
-033C;A;COMBINING SEAGULL BELOW
-033D;A;COMBINING X ABOVE
-033E;A;COMBINING VERTICAL TILDE
-033F;A;COMBINING DOUBLE OVERLINE
-0340;A;COMBINING GRAVE TONE MARK
-0341;A;COMBINING ACUTE TONE MARK
-0342;A;COMBINING GREEK PERISPOMENI
-0343;A;COMBINING GREEK KORONIS
-0344;A;COMBINING GREEK DIALYTIKA TONOS
-0345;A;COMBINING GREEK YPOGEGRAMMENI
-0346;A;COMBINING BRIDGE ABOVE
-0347;A;COMBINING EQUALS SIGN BELOW
-0348;A;COMBINING DOUBLE VERTICAL LINE BELOW
-0349;A;COMBINING LEFT ANGLE BELOW
-034A;A;COMBINING NOT TILDE ABOVE
-034B;A;COMBINING HOMOTHETIC ABOVE
-034C;A;COMBINING ALMOST EQUAL TO ABOVE
-034D;A;COMBINING LEFT RIGHT ARROW BELOW
-034E;A;COMBINING UPWARDS ARROW BELOW
-0360;A;COMBINING DOUBLE TILDE
-0361;A;COMBINING DOUBLE INVERTED BREVE
-0362;A;COMBINING DOUBLE RIGHTWARDS ARROW BELOW
-0374;N;GREEK NUMERAL SIGN
-0375;N;GREEK LOWER NUMERAL SIGN
-037A;N;GREEK YPOGEGRAMMENI
-037E;N;GREEK QUESTION MARK
-0384;N;GREEK TONOS
-0385;N;GREEK DIALYTIKA TONOS
-0386;N;GREEK CAPITAL LETTER ALPHA WITH TONOS
-0387;N;GREEK ANO TELEIA
-0388;N;GREEK CAPITAL LETTER EPSILON WITH TONOS
-0389;N;GREEK CAPITAL LETTER ETA WITH TONOS
-038A;N;GREEK CAPITAL LETTER IOTA WITH TONOS
-038C;N;GREEK CAPITAL LETTER OMICRON WITH TONOS
-038E;N;GREEK CAPITAL LETTER UPSILON WITH TONOS
-038F;N;GREEK CAPITAL LETTER OMEGA WITH TONOS
-0390;N;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-0391;A;GREEK CAPITAL LETTER ALPHA
-0392;A;GREEK CAPITAL LETTER BETA
-0393;A;GREEK CAPITAL LETTER GAMMA
-0394;A;GREEK CAPITAL LETTER DELTA
-0395;A;GREEK CAPITAL LETTER EPSILON
-0396;A;GREEK CAPITAL LETTER ZETA
-0397;A;GREEK CAPITAL LETTER ETA
-0398;A;GREEK CAPITAL LETTER THETA
-0399;A;GREEK CAPITAL LETTER IOTA
-039A;A;GREEK CAPITAL LETTER KAPPA
-039B;A;GREEK CAPITAL LETTER LAMDA
-039C;A;GREEK CAPITAL LETTER MU
-039D;A;GREEK CAPITAL LETTER NU
-039E;A;GREEK CAPITAL LETTER XI
-039F;A;GREEK CAPITAL LETTER OMICRON
-03A0;A;GREEK CAPITAL LETTER PI
-03A1;A;GREEK CAPITAL LETTER RHO
-03A3;A;GREEK CAPITAL LETTER SIGMA
-03A4;A;GREEK CAPITAL LETTER TAU
-03A5;A;GREEK CAPITAL LETTER UPSILON
-03A6;A;GREEK CAPITAL LETTER PHI
-03A7;A;GREEK CAPITAL LETTER CHI
-03A8;A;GREEK CAPITAL LETTER PSI
-03A9;A;GREEK CAPITAL LETTER OMEGA
-03AA;N;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-03AB;N;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-03AC;N;GREEK SMALL LETTER ALPHA WITH TONOS
-03AD;N;GREEK SMALL LETTER EPSILON WITH TONOS
-03AE;N;GREEK SMALL LETTER ETA WITH TONOS
-03AF;N;GREEK SMALL LETTER IOTA WITH TONOS
-03B0;N;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-03B1;A;GREEK SMALL LETTER ALPHA
-03B2;A;GREEK SMALL LETTER BETA
-03B3;A;GREEK SMALL LETTER GAMMA
-03B4;A;GREEK SMALL LETTER DELTA
-03B5;A;GREEK SMALL LETTER EPSILON
-03B6;A;GREEK SMALL LETTER ZETA
-03B7;A;GREEK SMALL LETTER ETA
-03B8;A;GREEK SMALL LETTER THETA
-03B9;A;GREEK SMALL LETTER IOTA
-03BA;A;GREEK SMALL LETTER KAPPA
-03BB;A;GREEK SMALL LETTER LAMDA
-03BC;A;GREEK SMALL LETTER MU
-03BD;A;GREEK SMALL LETTER NU
-03BE;A;GREEK SMALL LETTER XI
-03BF;A;GREEK SMALL LETTER OMICRON
-03C0;A;GREEK SMALL LETTER PI
-03C1;A;GREEK SMALL LETTER RHO
-03C2;N;GREEK SMALL LETTER FINAL SIGMA
-03C3;A;GREEK SMALL LETTER SIGMA
-03C4;A;GREEK SMALL LETTER TAU
-03C5;A;GREEK SMALL LETTER UPSILON
-03C6;A;GREEK SMALL LETTER PHI
-03C7;A;GREEK SMALL LETTER CHI
-03C8;A;GREEK SMALL LETTER PSI
-03C9;A;GREEK SMALL LETTER OMEGA
-03CA;N;GREEK SMALL LETTER IOTA WITH DIALYTIKA
-03CB;N;GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-03CC;N;GREEK SMALL LETTER OMICRON WITH TONOS
-03CD;N;GREEK SMALL LETTER UPSILON WITH TONOS
-03CE;N;GREEK SMALL LETTER OMEGA WITH TONOS
-03D0;N;GREEK BETA SYMBOL
-03D1;N;GREEK THETA SYMBOL
-03D2;N;GREEK UPSILON WITH HOOK SYMBOL
-03D3;N;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
-03D4;N;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
-03D5;N;GREEK PHI SYMBOL
-03D6;N;GREEK PI SYMBOL
-03D7;N;GREEK KAI SYMBOL
-03DA;N;GREEK LETTER STIGMA
-03DB;N;GREEK SMALL LETTER STIGMA
-03DC;N;GREEK LETTER DIGAMMA
-03DD;N;GREEK SMALL LETTER DIGAMMA
-03DE;N;GREEK LETTER KOPPA
-03DF;N;GREEK SMALL LETTER KOPPA
-03E0;N;GREEK LETTER SAMPI
-03E1;N;GREEK SMALL LETTER SAMPI
-03E2;N;COPTIC CAPITAL LETTER SHEI
-03E3;N;COPTIC SMALL LETTER SHEI
-03E4;N;COPTIC CAPITAL LETTER FEI
-03E5;N;COPTIC SMALL LETTER FEI
-03E6;N;COPTIC CAPITAL LETTER KHEI
-03E7;N;COPTIC SMALL LETTER KHEI
-03E8;N;COPTIC CAPITAL LETTER HORI
-03E9;N;COPTIC SMALL LETTER HORI
-03EA;N;COPTIC CAPITAL LETTER GANGIA
-03EB;N;COPTIC SMALL LETTER GANGIA
-03EC;N;COPTIC CAPITAL LETTER SHIMA
-03ED;N;COPTIC SMALL LETTER SHIMA
-03EE;N;COPTIC CAPITAL LETTER DEI
-03EF;N;COPTIC SMALL LETTER DEI
-03F0;N;GREEK KAPPA SYMBOL
-03F1;N;GREEK RHO SYMBOL
-03F2;N;GREEK LUNATE SIGMA SYMBOL
-03F3;N;GREEK LETTER YOT
-0400;N;CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0401;A;CYRILLIC CAPITAL LETTER IO
-0402;N;CYRILLIC CAPITAL LETTER DJE
-0403;N;CYRILLIC CAPITAL LETTER GJE
-0404;N;CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0405;N;CYRILLIC CAPITAL LETTER DZE
-0406;N;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0407;N;CYRILLIC CAPITAL LETTER YI
-0408;N;CYRILLIC CAPITAL LETTER JE
-0409;N;CYRILLIC CAPITAL LETTER LJE
-040A;N;CYRILLIC CAPITAL LETTER NJE
-040B;N;CYRILLIC CAPITAL LETTER TSHE
-040C;N;CYRILLIC CAPITAL LETTER KJE
-040D;N;CYRILLIC CAPITAL LETTER I WITH GRAVE
-040E;N;CYRILLIC CAPITAL LETTER SHORT U
-040F;N;CYRILLIC CAPITAL LETTER DZHE
-0410;A;CYRILLIC CAPITAL LETTER A
-0411;A;CYRILLIC CAPITAL LETTER BE
-0412;A;CYRILLIC CAPITAL LETTER VE
-0413;A;CYRILLIC CAPITAL LETTER GHE
-0414;A;CYRILLIC CAPITAL LETTER DE
-0415;A;CYRILLIC CAPITAL LETTER IE
-0416;A;CYRILLIC CAPITAL LETTER ZHE
-0417;A;CYRILLIC CAPITAL LETTER ZE
-0418;A;CYRILLIC CAPITAL LETTER I
-0419;A;CYRILLIC CAPITAL LETTER SHORT I
-041A;A;CYRILLIC CAPITAL LETTER KA
-041B;A;CYRILLIC CAPITAL LETTER EL
-041C;A;CYRILLIC CAPITAL LETTER EM
-041D;A;CYRILLIC CAPITAL LETTER EN
-041E;A;CYRILLIC CAPITAL LETTER O
-041F;A;CYRILLIC CAPITAL LETTER PE
-0420;A;CYRILLIC CAPITAL LETTER ER
-0421;A;CYRILLIC CAPITAL LETTER ES
-0422;A;CYRILLIC CAPITAL LETTER TE
-0423;A;CYRILLIC CAPITAL LETTER U
-0424;A;CYRILLIC CAPITAL LETTER EF
-0425;A;CYRILLIC CAPITAL LETTER HA
-0426;A;CYRILLIC CAPITAL LETTER TSE
-0427;A;CYRILLIC CAPITAL LETTER CHE
-0428;A;CYRILLIC CAPITAL LETTER SHA
-0429;A;CYRILLIC CAPITAL LETTER SHCHA
-042A;A;CYRILLIC CAPITAL LETTER HARD SIGN
-042B;A;CYRILLIC CAPITAL LETTER YERU
-042C;A;CYRILLIC CAPITAL LETTER SOFT SIGN
-042D;A;CYRILLIC CAPITAL LETTER E
-042E;A;CYRILLIC CAPITAL LETTER YU
-042F;A;CYRILLIC CAPITAL LETTER YA
-0430;A;CYRILLIC SMALL LETTER A
-0431;A;CYRILLIC SMALL LETTER BE
-0432;A;CYRILLIC SMALL LETTER VE
-0433;A;CYRILLIC SMALL LETTER GHE
-0434;A;CYRILLIC SMALL LETTER DE
-0435;A;CYRILLIC SMALL LETTER IE
-0436;A;CYRILLIC SMALL LETTER ZHE
-0437;A;CYRILLIC SMALL LETTER ZE
-0438;A;CYRILLIC SMALL LETTER I
-0439;A;CYRILLIC SMALL LETTER SHORT I
-043A;A;CYRILLIC SMALL LETTER KA
-043B;A;CYRILLIC SMALL LETTER EL
-043C;A;CYRILLIC SMALL LETTER EM
-043D;A;CYRILLIC SMALL LETTER EN
-043E;A;CYRILLIC SMALL LETTER O
-043F;A;CYRILLIC SMALL LETTER PE
-0440;A;CYRILLIC SMALL LETTER ER
-0441;A;CYRILLIC SMALL LETTER ES
-0442;A;CYRILLIC SMALL LETTER TE
-0443;A;CYRILLIC SMALL LETTER U
-0444;A;CYRILLIC SMALL LETTER EF
-0445;A;CYRILLIC SMALL LETTER HA
-0446;A;CYRILLIC SMALL LETTER TSE
-0447;A;CYRILLIC SMALL LETTER CHE
-0448;A;CYRILLIC SMALL LETTER SHA
-0449;A;CYRILLIC SMALL LETTER SHCHA
-044A;A;CYRILLIC SMALL LETTER HARD SIGN
-044B;A;CYRILLIC SMALL LETTER YERU
-044C;A;CYRILLIC SMALL LETTER SOFT SIGN
-044D;A;CYRILLIC SMALL LETTER E
-044E;A;CYRILLIC SMALL LETTER YU
-044F;A;CYRILLIC SMALL LETTER YA
-0450;N;CYRILLIC SMALL LETTER IE WITH GRAVE
-0451;A;CYRILLIC SMALL LETTER IO
-0452;N;CYRILLIC SMALL LETTER DJE
-0453;N;CYRILLIC SMALL LETTER GJE
-0454;N;CYRILLIC SMALL LETTER UKRAINIAN IE
-0455;N;CYRILLIC SMALL LETTER DZE
-0456;N;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-0457;N;CYRILLIC SMALL LETTER YI
-0458;N;CYRILLIC SMALL LETTER JE
-0459;N;CYRILLIC SMALL LETTER LJE
-045A;N;CYRILLIC SMALL LETTER NJE
-045B;N;CYRILLIC SMALL LETTER TSHE
-045C;N;CYRILLIC SMALL LETTER KJE
-045D;N;CYRILLIC SMALL LETTER I WITH GRAVE
-045E;N;CYRILLIC SMALL LETTER SHORT U
-045F;N;CYRILLIC SMALL LETTER DZHE
-0460;N;CYRILLIC CAPITAL LETTER OMEGA
-0461;N;CYRILLIC SMALL LETTER OMEGA
-0462;N;CYRILLIC CAPITAL LETTER YAT
-0463;N;CYRILLIC SMALL LETTER YAT
-0464;N;CYRILLIC CAPITAL LETTER IOTIFIED E
-0465;N;CYRILLIC SMALL LETTER IOTIFIED E
-0466;N;CYRILLIC CAPITAL LETTER LITTLE YUS
-0467;N;CYRILLIC SMALL LETTER LITTLE YUS
-0468;N;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-0469;N;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
-046A;N;CYRILLIC CAPITAL LETTER BIG YUS
-046B;N;CYRILLIC SMALL LETTER BIG YUS
-046C;N;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-046D;N;CYRILLIC SMALL LETTER IOTIFIED BIG YUS
-046E;N;CYRILLIC CAPITAL LETTER KSI
-046F;N;CYRILLIC SMALL LETTER KSI
-0470;N;CYRILLIC CAPITAL LETTER PSI
-0471;N;CYRILLIC SMALL LETTER PSI
-0472;N;CYRILLIC CAPITAL LETTER FITA
-0473;N;CYRILLIC SMALL LETTER FITA
-0474;N;CYRILLIC CAPITAL LETTER IZHITSA
-0475;N;CYRILLIC SMALL LETTER IZHITSA
-0476;N;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0477;N;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0478;N;CYRILLIC CAPITAL LETTER UK
-0479;N;CYRILLIC SMALL LETTER UK
-047A;N;CYRILLIC CAPITAL LETTER ROUND OMEGA
-047B;N;CYRILLIC SMALL LETTER ROUND OMEGA
-047C;N;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-047D;N;CYRILLIC SMALL LETTER OMEGA WITH TITLO
-047E;N;CYRILLIC CAPITAL LETTER OT
-047F;N;CYRILLIC SMALL LETTER OT
-0480;N;CYRILLIC CAPITAL LETTER KOPPA
-0481;N;CYRILLIC SMALL LETTER KOPPA
-0482;N;CYRILLIC THOUSANDS SIGN
-0483;N;COMBINING CYRILLIC TITLO
-0484;N;COMBINING CYRILLIC PALATALIZATION
-0485;N;COMBINING CYRILLIC DASIA PNEUMATA
-0486;N;COMBINING CYRILLIC PSILI PNEUMATA
-0488;N;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
-0489;N;COMBINING CYRILLIC MILLIONS SIGN
-048C;N;CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-048D;N;CYRILLIC SMALL LETTER SEMISOFT SIGN
-048E;N;CYRILLIC CAPITAL LETTER ER WITH TICK
-048F;N;CYRILLIC SMALL LETTER ER WITH TICK
-0490;N;CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-0491;N;CYRILLIC SMALL LETTER GHE WITH UPTURN
-0492;N;CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0493;N;CYRILLIC SMALL LETTER GHE WITH STROKE
-0494;N;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-0495;N;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
-0496;N;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-0497;N;CYRILLIC SMALL LETTER ZHE WITH DESCENDER
-0498;N;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-0499;N;CYRILLIC SMALL LETTER ZE WITH DESCENDER
-049A;N;CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-049B;N;CYRILLIC SMALL LETTER KA WITH DESCENDER
-049C;N;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-049D;N;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
-049E;N;CYRILLIC CAPITAL LETTER KA WITH STROKE
-049F;N;CYRILLIC SMALL LETTER KA WITH STROKE
-04A0;N;CYRILLIC CAPITAL LETTER BASHKIR KA
-04A1;N;CYRILLIC SMALL LETTER BASHKIR KA
-04A2;N;CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04A3;N;CYRILLIC SMALL LETTER EN WITH DESCENDER
-04A4;N;CYRILLIC CAPITAL LIGATURE EN GHE
-04A5;N;CYRILLIC SMALL LIGATURE EN GHE
-04A6;N;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
-04A7;N;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
-04A8;N;CYRILLIC CAPITAL LETTER ABKHASIAN HA
-04A9;N;CYRILLIC SMALL LETTER ABKHASIAN HA
-04AA;N;CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04AB;N;CYRILLIC SMALL LETTER ES WITH DESCENDER
-04AC;N;CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-04AD;N;CYRILLIC SMALL LETTER TE WITH DESCENDER
-04AE;N;CYRILLIC CAPITAL LETTER STRAIGHT U
-04AF;N;CYRILLIC SMALL LETTER STRAIGHT U
-04B0;N;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-04B1;N;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
-04B2;N;CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-04B3;N;CYRILLIC SMALL LETTER HA WITH DESCENDER
-04B4;N;CYRILLIC CAPITAL LIGATURE TE TSE
-04B5;N;CYRILLIC SMALL LIGATURE TE TSE
-04B6;N;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-04B7;N;CYRILLIC SMALL LETTER CHE WITH DESCENDER
-04B8;N;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-04B9;N;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
-04BA;N;CYRILLIC CAPITAL LETTER SHHA
-04BB;N;CYRILLIC SMALL LETTER SHHA
-04BC;N;CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-04BD;N;CYRILLIC SMALL LETTER ABKHASIAN CHE
-04BE;N;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-04BF;N;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
-04C0;N;CYRILLIC LETTER PALOCHKA
-04C1;N;CYRILLIC CAPITAL LETTER ZHE WITH BREVE
-04C2;N;CYRILLIC SMALL LETTER ZHE WITH BREVE
-04C3;N;CYRILLIC CAPITAL LETTER KA WITH HOOK
-04C4;N;CYRILLIC SMALL LETTER KA WITH HOOK
-04C7;N;CYRILLIC CAPITAL LETTER EN WITH HOOK
-04C8;N;CYRILLIC SMALL LETTER EN WITH HOOK
-04CB;N;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-04CC;N;CYRILLIC SMALL LETTER KHAKASSIAN CHE
-04D0;N;CYRILLIC CAPITAL LETTER A WITH BREVE
-04D1;N;CYRILLIC SMALL LETTER A WITH BREVE
-04D2;N;CYRILLIC CAPITAL LETTER A WITH DIAERESIS
-04D3;N;CYRILLIC SMALL LETTER A WITH DIAERESIS
-04D4;N;CYRILLIC CAPITAL LIGATURE A IE
-04D5;N;CYRILLIC SMALL LIGATURE A IE
-04D6;N;CYRILLIC CAPITAL LETTER IE WITH BREVE
-04D7;N;CYRILLIC SMALL LETTER IE WITH BREVE
-04D8;N;CYRILLIC CAPITAL LETTER SCHWA
-04D9;N;CYRILLIC SMALL LETTER SCHWA
-04DA;N;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
-04DB;N;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
-04DC;N;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
-04DD;N;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
-04DE;N;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
-04DF;N;CYRILLIC SMALL LETTER ZE WITH DIAERESIS
-04E0;N;CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-04E1;N;CYRILLIC SMALL LETTER ABKHASIAN DZE
-04E2;N;CYRILLIC CAPITAL LETTER I WITH MACRON
-04E3;N;CYRILLIC SMALL LETTER I WITH MACRON
-04E4;N;CYRILLIC CAPITAL LETTER I WITH DIAERESIS
-04E5;N;CYRILLIC SMALL LETTER I WITH DIAERESIS
-04E6;N;CYRILLIC CAPITAL LETTER O WITH DIAERESIS
-04E7;N;CYRILLIC SMALL LETTER O WITH DIAERESIS
-04E8;N;CYRILLIC CAPITAL LETTER BARRED O
-04E9;N;CYRILLIC SMALL LETTER BARRED O
-04EA;N;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
-04EB;N;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
-04EC;N;CYRILLIC CAPITAL LETTER E WITH DIAERESIS
-04ED;N;CYRILLIC SMALL LETTER E WITH DIAERESIS
-04EE;N;CYRILLIC CAPITAL LETTER U WITH MACRON
-04EF;N;CYRILLIC SMALL LETTER U WITH MACRON
-04F0;N;CYRILLIC CAPITAL LETTER U WITH DIAERESIS
-04F1;N;CYRILLIC SMALL LETTER U WITH DIAERESIS
-04F2;N;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
-04F3;N;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
-04F4;N;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
-04F5;N;CYRILLIC SMALL LETTER CHE WITH DIAERESIS
-04F8;N;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
-04F9;N;CYRILLIC SMALL LETTER YERU WITH DIAERESIS
-0531;N;ARMENIAN CAPITAL LETTER AYB
-0532;N;ARMENIAN CAPITAL LETTER BEN
-0533;N;ARMENIAN CAPITAL LETTER GIM
-0534;N;ARMENIAN CAPITAL LETTER DA
-0535;N;ARMENIAN CAPITAL LETTER ECH
-0536;N;ARMENIAN CAPITAL LETTER ZA
-0537;N;ARMENIAN CAPITAL LETTER EH
-0538;N;ARMENIAN CAPITAL LETTER ET
-0539;N;ARMENIAN CAPITAL LETTER TO
-053A;N;ARMENIAN CAPITAL LETTER ZHE
-053B;N;ARMENIAN CAPITAL LETTER INI
-053C;N;ARMENIAN CAPITAL LETTER LIWN
-053D;N;ARMENIAN CAPITAL LETTER XEH
-053E;N;ARMENIAN CAPITAL LETTER CA
-053F;N;ARMENIAN CAPITAL LETTER KEN
-0540;N;ARMENIAN CAPITAL LETTER HO
-0541;N;ARMENIAN CAPITAL LETTER JA
-0542;N;ARMENIAN CAPITAL LETTER GHAD
-0543;N;ARMENIAN CAPITAL LETTER CHEH
-0544;N;ARMENIAN CAPITAL LETTER MEN
-0545;N;ARMENIAN CAPITAL LETTER YI
-0546;N;ARMENIAN CAPITAL LETTER NOW
-0547;N;ARMENIAN CAPITAL LETTER SHA
-0548;N;ARMENIAN CAPITAL LETTER VO
-0549;N;ARMENIAN CAPITAL LETTER CHA
-054A;N;ARMENIAN CAPITAL LETTER PEH
-054B;N;ARMENIAN CAPITAL LETTER JHEH
-054C;N;ARMENIAN CAPITAL LETTER RA
-054D;N;ARMENIAN CAPITAL LETTER SEH
-054E;N;ARMENIAN CAPITAL LETTER VEW
-054F;N;ARMENIAN CAPITAL LETTER TIWN
-0550;N;ARMENIAN CAPITAL LETTER REH
-0551;N;ARMENIAN CAPITAL LETTER CO
-0552;N;ARMENIAN CAPITAL LETTER YIWN
-0553;N;ARMENIAN CAPITAL LETTER PIWR
-0554;N;ARMENIAN CAPITAL LETTER KEH
-0555;N;ARMENIAN CAPITAL LETTER OH
-0556;N;ARMENIAN CAPITAL LETTER FEH
-0559;N;ARMENIAN MODIFIER LETTER LEFT HALF RING
-055A;N;ARMENIAN APOSTROPHE
-055B;N;ARMENIAN EMPHASIS MARK
-055C;N;ARMENIAN EXCLAMATION MARK
-055D;N;ARMENIAN COMMA
-055E;N;ARMENIAN QUESTION MARK
-055F;N;ARMENIAN ABBREVIATION MARK
-0561;N;ARMENIAN SMALL LETTER AYB
-0562;N;ARMENIAN SMALL LETTER BEN
-0563;N;ARMENIAN SMALL LETTER GIM
-0564;N;ARMENIAN SMALL LETTER DA
-0565;N;ARMENIAN SMALL LETTER ECH
-0566;N;ARMENIAN SMALL LETTER ZA
-0567;N;ARMENIAN SMALL LETTER EH
-0568;N;ARMENIAN SMALL LETTER ET
-0569;N;ARMENIAN SMALL LETTER TO
-056A;N;ARMENIAN SMALL LETTER ZHE
-056B;N;ARMENIAN SMALL LETTER INI
-056C;N;ARMENIAN SMALL LETTER LIWN
-056D;N;ARMENIAN SMALL LETTER XEH
-056E;N;ARMENIAN SMALL LETTER CA
-056F;N;ARMENIAN SMALL LETTER KEN
-0570;N;ARMENIAN SMALL LETTER HO
-0571;N;ARMENIAN SMALL LETTER JA
-0572;N;ARMENIAN SMALL LETTER GHAD
-0573;N;ARMENIAN SMALL LETTER CHEH
-0574;N;ARMENIAN SMALL LETTER MEN
-0575;N;ARMENIAN SMALL LETTER YI
-0576;N;ARMENIAN SMALL LETTER NOW
-0577;N;ARMENIAN SMALL LETTER SHA
-0578;N;ARMENIAN SMALL LETTER VO
-0579;N;ARMENIAN SMALL LETTER CHA
-057A;N;ARMENIAN SMALL LETTER PEH
-057B;N;ARMENIAN SMALL LETTER JHEH
-057C;N;ARMENIAN SMALL LETTER RA
-057D;N;ARMENIAN SMALL LETTER SEH
-057E;N;ARMENIAN SMALL LETTER VEW
-057F;N;ARMENIAN SMALL LETTER TIWN
-0580;N;ARMENIAN SMALL LETTER REH
-0581;N;ARMENIAN SMALL LETTER CO
-0582;N;ARMENIAN SMALL LETTER YIWN
-0583;N;ARMENIAN SMALL LETTER PIWR
-0584;N;ARMENIAN SMALL LETTER KEH
-0585;N;ARMENIAN SMALL LETTER OH
-0586;N;ARMENIAN SMALL LETTER FEH
-0587;N;ARMENIAN SMALL LIGATURE ECH YIWN
-0589;N;ARMENIAN FULL STOP
-058A;N;ARMENIAN HYPHEN
-0591;N;HEBREW ACCENT ETNAHTA
-0592;N;HEBREW ACCENT SEGOL
-0593;N;HEBREW ACCENT SHALSHELET
-0594;N;HEBREW ACCENT ZAQEF QATAN
-0595;N;HEBREW ACCENT ZAQEF GADOL
-0596;N;HEBREW ACCENT TIPEHA
-0597;N;HEBREW ACCENT REVIA
-0598;N;HEBREW ACCENT ZARQA
-0599;N;HEBREW ACCENT PASHTA
-059A;N;HEBREW ACCENT YETIV
-059B;N;HEBREW ACCENT TEVIR
-059C;N;HEBREW ACCENT GERESH
-059D;N;HEBREW ACCENT GERESH MUQDAM
-059E;N;HEBREW ACCENT GERSHAYIM
-059F;N;HEBREW ACCENT QARNEY PARA
-05A0;N;HEBREW ACCENT TELISHA GEDOLA
-05A1;N;HEBREW ACCENT PAZER
-05A3;N;HEBREW ACCENT MUNAH
-05A4;N;HEBREW ACCENT MAHAPAKH
-05A5;N;HEBREW ACCENT MERKHA
-05A6;N;HEBREW ACCENT MERKHA KEFULA
-05A7;N;HEBREW ACCENT DARGA
-05A8;N;HEBREW ACCENT QADMA
-05A9;N;HEBREW ACCENT TELISHA QETANA
-05AA;N;HEBREW ACCENT YERAH BEN YOMO
-05AB;N;HEBREW ACCENT OLE
-05AC;N;HEBREW ACCENT ILUY
-05AD;N;HEBREW ACCENT DEHI
-05AE;N;HEBREW ACCENT ZINOR
-05AF;N;HEBREW MARK MASORA CIRCLE
-05B0;N;HEBREW POINT SHEVA
-05B1;N;HEBREW POINT HATAF SEGOL
-05B2;N;HEBREW POINT HATAF PATAH
-05B3;N;HEBREW POINT HATAF QAMATS
-05B4;N;HEBREW POINT HIRIQ
-05B5;N;HEBREW POINT TSERE
-05B6;N;HEBREW POINT SEGOL
-05B7;N;HEBREW POINT PATAH
-05B8;N;HEBREW POINT QAMATS
-05B9;N;HEBREW POINT HOLAM
-05BB;N;HEBREW POINT QUBUTS
-05BC;N;HEBREW POINT DAGESH OR MAPIQ
-05BD;N;HEBREW POINT METEG
-05BE;N;HEBREW PUNCTUATION MAQAF
-05BF;N;HEBREW POINT RAFE
-05C0;N;HEBREW PUNCTUATION PASEQ
-05C1;N;HEBREW POINT SHIN DOT
-05C2;N;HEBREW POINT SIN DOT
-05C3;N;HEBREW PUNCTUATION SOF PASUQ
-05C4;N;HEBREW MARK UPPER DOT
-05D0;N;HEBREW LETTER ALEF
-05D1;N;HEBREW LETTER BET
-05D2;N;HEBREW LETTER GIMEL
-05D3;N;HEBREW LETTER DALET
-05D4;N;HEBREW LETTER HE
-05D5;N;HEBREW LETTER VAV
-05D6;N;HEBREW LETTER ZAYIN
-05D7;N;HEBREW LETTER HET
-05D8;N;HEBREW LETTER TET
-05D9;N;HEBREW LETTER YOD
-05DA;N;HEBREW LETTER FINAL KAF
-05DB;N;HEBREW LETTER KAF
-05DC;N;HEBREW LETTER LAMED
-05DD;N;HEBREW LETTER FINAL MEM
-05DE;N;HEBREW LETTER MEM
-05DF;N;HEBREW LETTER FINAL NUN
-05E0;N;HEBREW LETTER NUN
-05E1;N;HEBREW LETTER SAMEKH
-05E2;N;HEBREW LETTER AYIN
-05E3;N;HEBREW LETTER FINAL PE
-05E4;N;HEBREW LETTER PE
-05E5;N;HEBREW LETTER FINAL TSADI
-05E6;N;HEBREW LETTER TSADI
-05E7;N;HEBREW LETTER QOF
-05E8;N;HEBREW LETTER RESH
-05E9;N;HEBREW LETTER SHIN
-05EA;N;HEBREW LETTER TAV
-05F0;N;HEBREW LIGATURE YIDDISH DOUBLE VAV
-05F1;N;HEBREW LIGATURE YIDDISH VAV YOD
-05F2;N;HEBREW LIGATURE YIDDISH DOUBLE YOD
-05F3;N;HEBREW PUNCTUATION GERESH
-05F4;N;HEBREW PUNCTUATION GERSHAYIM
-060C;N;ARABIC COMMA
-061B;N;ARABIC SEMICOLON
-061F;N;ARABIC QUESTION MARK
-0621;N;ARABIC LETTER HAMZA
-0622;N;ARABIC LETTER ALEF WITH MADDA ABOVE
-0623;N;ARABIC LETTER ALEF WITH HAMZA ABOVE
-0624;N;ARABIC LETTER WAW WITH HAMZA ABOVE
-0625;N;ARABIC LETTER ALEF WITH HAMZA BELOW
-0626;N;ARABIC LETTER YEH WITH HAMZA ABOVE
-0627;N;ARABIC LETTER ALEF
-0628;N;ARABIC LETTER BEH
-0629;N;ARABIC LETTER TEH MARBUTA
-062A;N;ARABIC LETTER TEH
-062B;N;ARABIC LETTER THEH
-062C;N;ARABIC LETTER JEEM
-062D;N;ARABIC LETTER HAH
-062E;N;ARABIC LETTER KHAH
-062F;N;ARABIC LETTER DAL
-0630;N;ARABIC LETTER THAL
-0631;N;ARABIC LETTER REH
-0632;N;ARABIC LETTER ZAIN
-0633;N;ARABIC LETTER SEEN
-0634;N;ARABIC LETTER SHEEN
-0635;N;ARABIC LETTER SAD
-0636;N;ARABIC LETTER DAD
-0637;N;ARABIC LETTER TAH
-0638;N;ARABIC LETTER ZAH
-0639;N;ARABIC LETTER AIN
-063A;N;ARABIC LETTER GHAIN
-0640;N;ARABIC TATWEEL
-0641;N;ARABIC LETTER FEH
-0642;N;ARABIC LETTER QAF
-0643;N;ARABIC LETTER KAF
-0644;N;ARABIC LETTER LAM
-0645;N;ARABIC LETTER MEEM
-0646;N;ARABIC LETTER NOON
-0647;N;ARABIC LETTER HEH
-0648;N;ARABIC LETTER WAW
-0649;N;ARABIC LETTER ALEF MAKSURA
-064A;N;ARABIC LETTER YEH
-064B;N;ARABIC FATHATAN
-064C;N;ARABIC DAMMATAN
-064D;N;ARABIC KASRATAN
-064E;N;ARABIC FATHA
-064F;N;ARABIC DAMMA
-0650;N;ARABIC KASRA
-0651;N;ARABIC SHADDA
-0652;N;ARABIC SUKUN
-0653;N;ARABIC MADDAH ABOVE
-0654;N;ARABIC HAMZA ABOVE
-0655;N;ARABIC HAMZA BELOW
-0660;N;ARABIC-INDIC DIGIT ZERO
-0661;N;ARABIC-INDIC DIGIT ONE
-0662;N;ARABIC-INDIC DIGIT TWO
-0663;N;ARABIC-INDIC DIGIT THREE
-0664;N;ARABIC-INDIC DIGIT FOUR
-0665;N;ARABIC-INDIC DIGIT FIVE
-0666;N;ARABIC-INDIC DIGIT SIX
-0667;N;ARABIC-INDIC DIGIT SEVEN
-0668;N;ARABIC-INDIC DIGIT EIGHT
-0669;N;ARABIC-INDIC DIGIT NINE
-066A;N;ARABIC PERCENT SIGN
-066B;N;ARABIC DECIMAL SEPARATOR
-066C;N;ARABIC THOUSANDS SEPARATOR
-066D;N;ARABIC FIVE POINTED STAR
-0670;N;ARABIC LETTER SUPERSCRIPT ALEF
-0671;N;ARABIC LETTER ALEF WASLA
-0672;N;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
-0673;N;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
-0674;N;ARABIC LETTER HIGH HAMZA
-0675;N;ARABIC LETTER HIGH HAMZA ALEF
-0676;N;ARABIC LETTER HIGH HAMZA WAW
-0677;N;ARABIC LETTER U WITH HAMZA ABOVE
-0678;N;ARABIC LETTER HIGH HAMZA YEH
-0679;N;ARABIC LETTER TTEH
-067A;N;ARABIC LETTER TTEHEH
-067B;N;ARABIC LETTER BEEH
-067C;N;ARABIC LETTER TEH WITH RING
-067D;N;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
-067E;N;ARABIC LETTER PEH
-067F;N;ARABIC LETTER TEHEH
-0680;N;ARABIC LETTER BEHEH
-0681;N;ARABIC LETTER HAH WITH HAMZA ABOVE
-0682;N;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
-0683;N;ARABIC LETTER NYEH
-0684;N;ARABIC LETTER DYEH
-0685;N;ARABIC LETTER HAH WITH THREE DOTS ABOVE
-0686;N;ARABIC LETTER TCHEH
-0687;N;ARABIC LETTER TCHEHEH
-0688;N;ARABIC LETTER DDAL
-0689;N;ARABIC LETTER DAL WITH RING
-068A;N;ARABIC LETTER DAL WITH DOT BELOW
-068B;N;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
-068C;N;ARABIC LETTER DAHAL
-068D;N;ARABIC LETTER DDAHAL
-068E;N;ARABIC LETTER DUL
-068F;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
-0690;N;ARABIC LETTER DAL WITH FOUR DOTS ABOVE
-0691;N;ARABIC LETTER RREH
-0692;N;ARABIC LETTER REH WITH SMALL V
-0693;N;ARABIC LETTER REH WITH RING
-0694;N;ARABIC LETTER REH WITH DOT BELOW
-0695;N;ARABIC LETTER REH WITH SMALL V BELOW
-0696;N;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
-0697;N;ARABIC LETTER REH WITH TWO DOTS ABOVE
-0698;N;ARABIC LETTER JEH
-0699;N;ARABIC LETTER REH WITH FOUR DOTS ABOVE
-069A;N;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
-069B;N;ARABIC LETTER SEEN WITH THREE DOTS BELOW
-069C;N;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
-069D;N;ARABIC LETTER SAD WITH TWO DOTS BELOW
-069E;N;ARABIC LETTER SAD WITH THREE DOTS ABOVE
-069F;N;ARABIC LETTER TAH WITH THREE DOTS ABOVE
-06A0;N;ARABIC LETTER AIN WITH THREE DOTS ABOVE
-06A1;N;ARABIC LETTER DOTLESS FEH
-06A2;N;ARABIC LETTER FEH WITH DOT MOVED BELOW
-06A3;N;ARABIC LETTER FEH WITH DOT BELOW
-06A4;N;ARABIC LETTER VEH
-06A5;N;ARABIC LETTER FEH WITH THREE DOTS BELOW
-06A6;N;ARABIC LETTER PEHEH
-06A7;N;ARABIC LETTER QAF WITH DOT ABOVE
-06A8;N;ARABIC LETTER QAF WITH THREE DOTS ABOVE
-06A9;N;ARABIC LETTER KEHEH
-06AA;N;ARABIC LETTER SWASH KAF
-06AB;N;ARABIC LETTER KAF WITH RING
-06AC;N;ARABIC LETTER KAF WITH DOT ABOVE
-06AD;N;ARABIC LETTER NG
-06AE;N;ARABIC LETTER KAF WITH THREE DOTS BELOW
-06AF;N;ARABIC LETTER GAF
-06B0;N;ARABIC LETTER GAF WITH RING
-06B1;N;ARABIC LETTER NGOEH
-06B2;N;ARABIC LETTER GAF WITH TWO DOTS BELOW
-06B3;N;ARABIC LETTER GUEH
-06B4;N;ARABIC LETTER GAF WITH THREE DOTS ABOVE
-06B5;N;ARABIC LETTER LAM WITH SMALL V
-06B6;N;ARABIC LETTER LAM WITH DOT ABOVE
-06B7;N;ARABIC LETTER LAM WITH THREE DOTS ABOVE
-06B8;N;ARABIC LETTER LAM WITH THREE DOTS BELOW
-06B9;N;ARABIC LETTER NOON WITH DOT BELOW
-06BA;N;ARABIC LETTER NOON GHUNNA
-06BB;N;ARABIC LETTER RNOON
-06BC;N;ARABIC LETTER NOON WITH RING
-06BD;N;ARABIC LETTER NOON WITH THREE DOTS ABOVE
-06BE;N;ARABIC LETTER HEH DOACHASHMEE
-06BF;N;ARABIC LETTER TCHEH WITH DOT ABOVE
-06C0;N;ARABIC LETTER HEH WITH YEH ABOVE
-06C1;N;ARABIC LETTER HEH GOAL
-06C2;N;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
-06C3;N;ARABIC LETTER TEH MARBUTA GOAL
-06C4;N;ARABIC LETTER WAW WITH RING
-06C5;N;ARABIC LETTER KIRGHIZ OE
-06C6;N;ARABIC LETTER OE
-06C7;N;ARABIC LETTER U
-06C8;N;ARABIC LETTER YU
-06C9;N;ARABIC LETTER KIRGHIZ YU
-06CA;N;ARABIC LETTER WAW WITH TWO DOTS ABOVE
-06CB;N;ARABIC LETTER VE
-06CC;N;ARABIC LETTER FARSI YEH
-06CD;N;ARABIC LETTER YEH WITH TAIL
-06CE;N;ARABIC LETTER YEH WITH SMALL V
-06CF;N;ARABIC LETTER WAW WITH DOT ABOVE
-06D0;N;ARABIC LETTER E
-06D1;N;ARABIC LETTER YEH WITH THREE DOTS BELOW
-06D2;N;ARABIC LETTER YEH BARREE
-06D3;N;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-06D4;N;ARABIC FULL STOP
-06D5;N;ARABIC LETTER AE
-06D6;N;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
-06D7;N;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
-06D8;N;ARABIC SMALL HIGH MEEM INITIAL FORM
-06D9;N;ARABIC SMALL HIGH LAM ALEF
-06DA;N;ARABIC SMALL HIGH JEEM
-06DB;N;ARABIC SMALL HIGH THREE DOTS
-06DC;N;ARABIC SMALL HIGH SEEN
-06DD;N;ARABIC END OF AYAH
-06DE;N;ARABIC START OF RUB EL HIZB
-06DF;N;ARABIC SMALL HIGH ROUNDED ZERO
-06E0;N;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
-06E1;N;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
-06E2;N;ARABIC SMALL HIGH MEEM ISOLATED FORM
-06E3;N;ARABIC SMALL LOW SEEN
-06E4;N;ARABIC SMALL HIGH MADDA
-06E5;N;ARABIC SMALL WAW
-06E6;N;ARABIC SMALL YEH
-06E7;N;ARABIC SMALL HIGH YEH
-06E8;N;ARABIC SMALL HIGH NOON
-06E9;N;ARABIC PLACE OF SAJDAH
-06EA;N;ARABIC EMPTY CENTRE LOW STOP
-06EB;N;ARABIC EMPTY CENTRE HIGH STOP
-06EC;N;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
-06ED;N;ARABIC SMALL LOW MEEM
-06F0;N;EXTENDED ARABIC-INDIC DIGIT ZERO
-06F1;N;EXTENDED ARABIC-INDIC DIGIT ONE
-06F2;N;EXTENDED ARABIC-INDIC DIGIT TWO
-06F3;N;EXTENDED ARABIC-INDIC DIGIT THREE
-06F4;N;EXTENDED ARABIC-INDIC DIGIT FOUR
-06F5;N;EXTENDED ARABIC-INDIC DIGIT FIVE
-06F6;N;EXTENDED ARABIC-INDIC DIGIT SIX
-06F7;N;EXTENDED ARABIC-INDIC DIGIT SEVEN
-06F8;N;EXTENDED ARABIC-INDIC DIGIT EIGHT
-06F9;N;EXTENDED ARABIC-INDIC DIGIT NINE
-06FA;N;ARABIC LETTER SHEEN WITH DOT BELOW
-06FB;N;ARABIC LETTER DAD WITH DOT BELOW
-06FC;N;ARABIC LETTER GHAIN WITH DOT BELOW
-06FD;N;ARABIC SIGN SINDHI AMPERSAND
-06FE;N;ARABIC SIGN SINDHI POSTPOSITION MEN
-0700;N;SYRIAC END OF PARAGRAPH
-0701;N;SYRIAC SUPRALINEAR FULL STOP
-0702;N;SYRIAC SUBLINEAR FULL STOP
-0703;N;SYRIAC SUPRALINEAR COLON
-0704;N;SYRIAC SUBLINEAR COLON
-0705;N;SYRIAC HORIZONTAL COLON
-0706;N;SYRIAC COLON SKEWED LEFT
-0707;N;SYRIAC COLON SKEWED RIGHT
-0708;N;SYRIAC SUPRALINEAR COLON SKEWED LEFT
-0709;N;SYRIAC SUBLINEAR COLON SKEWED RIGHT
-070A;N;SYRIAC CONTRACTION
-070B;N;SYRIAC HARKLEAN OBELUS
-070C;N;SYRIAC HARKLEAN METOBELUS
-070D;N;SYRIAC HARKLEAN ASTERISCUS
-070F;N;SYRIAC ABBREVIATION MARK
-0710;N;SYRIAC LETTER ALAPH
-0711;N;SYRIAC LETTER SUPERSCRIPT ALAPH
-0712;N;SYRIAC LETTER BETH
-0713;N;SYRIAC LETTER GAMAL
-0714;N;SYRIAC LETTER GAMAL GARSHUNI
-0715;N;SYRIAC LETTER DALATH
-0716;N;SYRIAC LETTER DOTLESS DALATH RISH
-0717;N;SYRIAC LETTER HE
-0718;N;SYRIAC LETTER WAW
-0719;N;SYRIAC LETTER ZAIN
-071A;N;SYRIAC LETTER HETH
-071B;N;SYRIAC LETTER TETH
-071C;N;SYRIAC LETTER TETH GARSHUNI
-071D;N;SYRIAC LETTER YUDH
-071E;N;SYRIAC LETTER YUDH HE
-071F;N;SYRIAC LETTER KAPH
-0720;N;SYRIAC LETTER LAMADH
-0721;N;SYRIAC LETTER MIM
-0722;N;SYRIAC LETTER NUN
-0723;N;SYRIAC LETTER SEMKATH
-0724;N;SYRIAC LETTER FINAL SEMKATH
-0725;N;SYRIAC LETTER E
-0726;N;SYRIAC LETTER PE
-0727;N;SYRIAC LETTER REVERSED PE
-0728;N;SYRIAC LETTER SADHE
-0729;N;SYRIAC LETTER QAPH
-072A;N;SYRIAC LETTER RISH
-072B;N;SYRIAC LETTER SHIN
-072C;N;SYRIAC LETTER TAW
-0730;N;SYRIAC PTHAHA ABOVE
-0731;N;SYRIAC PTHAHA BELOW
-0732;N;SYRIAC PTHAHA DOTTED
-0733;N;SYRIAC ZQAPHA ABOVE
-0734;N;SYRIAC ZQAPHA BELOW
-0735;N;SYRIAC ZQAPHA DOTTED
-0736;N;SYRIAC RBASA ABOVE
-0737;N;SYRIAC RBASA BELOW
-0738;N;SYRIAC DOTTED ZLAMA HORIZONTAL
-0739;N;SYRIAC DOTTED ZLAMA ANGULAR
-073A;N;SYRIAC HBASA ABOVE
-073B;N;SYRIAC HBASA BELOW
-073C;N;SYRIAC HBASA-ESASA DOTTED
-073D;N;SYRIAC ESASA ABOVE
-073E;N;SYRIAC ESASA BELOW
-073F;N;SYRIAC RWAHA
-0740;N;SYRIAC FEMININE DOT
-0741;N;SYRIAC QUSHSHAYA
-0742;N;SYRIAC RUKKAKHA
-0743;N;SYRIAC TWO VERTICAL DOTS ABOVE
-0744;N;SYRIAC TWO VERTICAL DOTS BELOW
-0745;N;SYRIAC THREE DOTS ABOVE
-0746;N;SYRIAC THREE DOTS BELOW
-0747;N;SYRIAC OBLIQUE LINE ABOVE
-0748;N;SYRIAC OBLIQUE LINE BELOW
-0749;N;SYRIAC MUSIC
-074A;N;SYRIAC BARREKH
-0780;N;THAANA LETTER HAA
-0781;N;THAANA LETTER SHAVIYANI
-0782;N;THAANA LETTER NOONU
-0783;N;THAANA LETTER RAA
-0784;N;THAANA LETTER BAA
-0785;N;THAANA LETTER LHAVIYANI
-0786;N;THAANA LETTER KAAFU
-0787;N;THAANA LETTER ALIFU
-0788;N;THAANA LETTER VAAVU
-0789;N;THAANA LETTER MEEMU
-078A;N;THAANA LETTER FAAFU
-078B;N;THAANA LETTER DHAALU
-078C;N;THAANA LETTER THAA
-078D;N;THAANA LETTER LAAMU
-078E;N;THAANA LETTER GAAFU
-078F;N;THAANA LETTER GNAVIYANI
-0790;N;THAANA LETTER SEENU
-0791;N;THAANA LETTER DAVIYANI
-0792;N;THAANA LETTER ZAVIYANI
-0793;N;THAANA LETTER TAVIYANI
-0794;N;THAANA LETTER YAA
-0795;N;THAANA LETTER PAVIYANI
-0796;N;THAANA LETTER JAVIYANI
-0797;N;THAANA LETTER CHAVIYANI
-0798;N;THAANA LETTER TTAA
-0799;N;THAANA LETTER HHAA
-079A;N;THAANA LETTER KHAA
-079B;N;THAANA LETTER THAALU
-079C;N;THAANA LETTER ZAA
-079D;N;THAANA LETTER SHEENU
-079E;N;THAANA LETTER SAADHU
-079F;N;THAANA LETTER DAADHU
-07A0;N;THAANA LETTER TO
-07A1;N;THAANA LETTER ZO
-07A2;N;THAANA LETTER AINU
-07A3;N;THAANA LETTER GHAINU
-07A4;N;THAANA LETTER QAAFU
-07A5;N;THAANA LETTER WAAVU
-07A6;N;THAANA ABAFILI
-07A7;N;THAANA AABAAFILI
-07A8;N;THAANA IBIFILI
-07A9;N;THAANA EEBEEFILI
-07AA;N;THAANA UBUFILI
-07AB;N;THAANA OOBOOFILI
-07AC;N;THAANA EBEFILI
-07AD;N;THAANA EYBEYFILI
-07AE;N;THAANA OBOFILI
-07AF;N;THAANA OABOAFILI
-07B0;N;THAANA SUKUN
-0901;N;DEVANAGARI SIGN CANDRABINDU
-0902;N;DEVANAGARI SIGN ANUSVARA
-0903;N;DEVANAGARI SIGN VISARGA
-0905;N;DEVANAGARI LETTER A
-0906;N;DEVANAGARI LETTER AA
-0907;N;DEVANAGARI LETTER I
-0908;N;DEVANAGARI LETTER II
-0909;N;DEVANAGARI LETTER U
-090A;N;DEVANAGARI LETTER UU
-090B;N;DEVANAGARI LETTER VOCALIC R
-090C;N;DEVANAGARI LETTER VOCALIC L
-090D;N;DEVANAGARI LETTER CANDRA E
-090E;N;DEVANAGARI LETTER SHORT E
-090F;N;DEVANAGARI LETTER E
-0910;N;DEVANAGARI LETTER AI
-0911;N;DEVANAGARI LETTER CANDRA O
-0912;N;DEVANAGARI LETTER SHORT O
-0913;N;DEVANAGARI LETTER O
-0914;N;DEVANAGARI LETTER AU
-0915;N;DEVANAGARI LETTER KA
-0916;N;DEVANAGARI LETTER KHA
-0917;N;DEVANAGARI LETTER GA
-0918;N;DEVANAGARI LETTER GHA
-0919;N;DEVANAGARI LETTER NGA
-091A;N;DEVANAGARI LETTER CA
-091B;N;DEVANAGARI LETTER CHA
-091C;N;DEVANAGARI LETTER JA
-091D;N;DEVANAGARI LETTER JHA
-091E;N;DEVANAGARI LETTER NYA
-091F;N;DEVANAGARI LETTER TTA
-0920;N;DEVANAGARI LETTER TTHA
-0921;N;DEVANAGARI LETTER DDA
-0922;N;DEVANAGARI LETTER DDHA
-0923;N;DEVANAGARI LETTER NNA
-0924;N;DEVANAGARI LETTER TA
-0925;N;DEVANAGARI LETTER THA
-0926;N;DEVANAGARI LETTER DA
-0927;N;DEVANAGARI LETTER DHA
-0928;N;DEVANAGARI LETTER NA
-0929;N;DEVANAGARI LETTER NNNA
-092A;N;DEVANAGARI LETTER PA
-092B;N;DEVANAGARI LETTER PHA
-092C;N;DEVANAGARI LETTER BA
-092D;N;DEVANAGARI LETTER BHA
-092E;N;DEVANAGARI LETTER MA
-092F;N;DEVANAGARI LETTER YA
-0930;N;DEVANAGARI LETTER RA
-0931;N;DEVANAGARI LETTER RRA
-0932;N;DEVANAGARI LETTER LA
-0933;N;DEVANAGARI LETTER LLA
-0934;N;DEVANAGARI LETTER LLLA
-0935;N;DEVANAGARI LETTER VA
-0936;N;DEVANAGARI LETTER SHA
-0937;N;DEVANAGARI LETTER SSA
-0938;N;DEVANAGARI LETTER SA
-0939;N;DEVANAGARI LETTER HA
-093C;N;DEVANAGARI SIGN NUKTA
-093D;N;DEVANAGARI SIGN AVAGRAHA
-093E;N;DEVANAGARI VOWEL SIGN AA
-093F;N;DEVANAGARI VOWEL SIGN I
-0940;N;DEVANAGARI VOWEL SIGN II
-0941;N;DEVANAGARI VOWEL SIGN U
-0942;N;DEVANAGARI VOWEL SIGN UU
-0943;N;DEVANAGARI VOWEL SIGN VOCALIC R
-0944;N;DEVANAGARI VOWEL SIGN VOCALIC RR
-0945;N;DEVANAGARI VOWEL SIGN CANDRA E
-0946;N;DEVANAGARI VOWEL SIGN SHORT E
-0947;N;DEVANAGARI VOWEL SIGN E
-0948;N;DEVANAGARI VOWEL SIGN AI
-0949;N;DEVANAGARI VOWEL SIGN CANDRA O
-094A;N;DEVANAGARI VOWEL SIGN SHORT O
-094B;N;DEVANAGARI VOWEL SIGN O
-094C;N;DEVANAGARI VOWEL SIGN AU
-094D;N;DEVANAGARI SIGN VIRAMA
-0950;N;DEVANAGARI OM
-0951;N;DEVANAGARI STRESS SIGN UDATTA
-0952;N;DEVANAGARI STRESS SIGN ANUDATTA
-0953;N;DEVANAGARI GRAVE ACCENT
-0954;N;DEVANAGARI ACUTE ACCENT
-0958;N;DEVANAGARI LETTER QA
-0959;N;DEVANAGARI LETTER KHHA
-095A;N;DEVANAGARI LETTER GHHA
-095B;N;DEVANAGARI LETTER ZA
-095C;N;DEVANAGARI LETTER DDDHA
-095D;N;DEVANAGARI LETTER RHA
-095E;N;DEVANAGARI LETTER FA
-095F;N;DEVANAGARI LETTER YYA
-0960;N;DEVANAGARI LETTER VOCALIC RR
-0961;N;DEVANAGARI LETTER VOCALIC LL
-0962;N;DEVANAGARI VOWEL SIGN VOCALIC L
-0963;N;DEVANAGARI VOWEL SIGN VOCALIC LL
-0964;N;DEVANAGARI DANDA
-0965;N;DEVANAGARI DOUBLE DANDA
-0966;N;DEVANAGARI DIGIT ZERO
-0967;N;DEVANAGARI DIGIT ONE
-0968;N;DEVANAGARI DIGIT TWO
-0969;N;DEVANAGARI DIGIT THREE
-096A;N;DEVANAGARI DIGIT FOUR
-096B;N;DEVANAGARI DIGIT FIVE
-096C;N;DEVANAGARI DIGIT SIX
-096D;N;DEVANAGARI DIGIT SEVEN
-096E;N;DEVANAGARI DIGIT EIGHT
-096F;N;DEVANAGARI DIGIT NINE
-0970;N;DEVANAGARI ABBREVIATION SIGN
-0981;N;BENGALI SIGN CANDRABINDU
-0982;N;BENGALI SIGN ANUSVARA
-0983;N;BENGALI SIGN VISARGA
-0985;N;BENGALI LETTER A
-0986;N;BENGALI LETTER AA
-0987;N;BENGALI LETTER I
-0988;N;BENGALI LETTER II
-0989;N;BENGALI LETTER U
-098A;N;BENGALI LETTER UU
-098B;N;BENGALI LETTER VOCALIC R
-098C;N;BENGALI LETTER VOCALIC L
-098F;N;BENGALI LETTER E
-0990;N;BENGALI LETTER AI
-0993;N;BENGALI LETTER O
-0994;N;BENGALI LETTER AU
-0995;N;BENGALI LETTER KA
-0996;N;BENGALI LETTER KHA
-0997;N;BENGALI LETTER GA
-0998;N;BENGALI LETTER GHA
-0999;N;BENGALI LETTER NGA
-099A;N;BENGALI LETTER CA
-099B;N;BENGALI LETTER CHA
-099C;N;BENGALI LETTER JA
-099D;N;BENGALI LETTER JHA
-099E;N;BENGALI LETTER NYA
-099F;N;BENGALI LETTER TTA
-09A0;N;BENGALI LETTER TTHA
-09A1;N;BENGALI LETTER DDA
-09A2;N;BENGALI LETTER DDHA
-09A3;N;BENGALI LETTER NNA
-09A4;N;BENGALI LETTER TA
-09A5;N;BENGALI LETTER THA
-09A6;N;BENGALI LETTER DA
-09A7;N;BENGALI LETTER DHA
-09A8;N;BENGALI LETTER NA
-09AA;N;BENGALI LETTER PA
-09AB;N;BENGALI LETTER PHA
-09AC;N;BENGALI LETTER BA
-09AD;N;BENGALI LETTER BHA
-09AE;N;BENGALI LETTER MA
-09AF;N;BENGALI LETTER YA
-09B0;N;BENGALI LETTER RA
-09B2;N;BENGALI LETTER LA
-09B6;N;BENGALI LETTER SHA
-09B7;N;BENGALI LETTER SSA
-09B8;N;BENGALI LETTER SA
-09B9;N;BENGALI LETTER HA
-09BC;N;BENGALI SIGN NUKTA
-09BE;N;BENGALI VOWEL SIGN AA
-09BF;N;BENGALI VOWEL SIGN I
-09C0;N;BENGALI VOWEL SIGN II
-09C1;N;BENGALI VOWEL SIGN U
-09C2;N;BENGALI VOWEL SIGN UU
-09C3;N;BENGALI VOWEL SIGN VOCALIC R
-09C4;N;BENGALI VOWEL SIGN VOCALIC RR
-09C7;N;BENGALI VOWEL SIGN E
-09C8;N;BENGALI VOWEL SIGN AI
-09CB;N;BENGALI VOWEL SIGN O
-09CC;N;BENGALI VOWEL SIGN AU
-09CD;N;BENGALI SIGN VIRAMA
-09D7;N;BENGALI AU LENGTH MARK
-09DC;N;BENGALI LETTER RRA
-09DD;N;BENGALI LETTER RHA
-09DF;N;BENGALI LETTER YYA
-09E0;N;BENGALI LETTER VOCALIC RR
-09E1;N;BENGALI LETTER VOCALIC LL
-09E2;N;BENGALI VOWEL SIGN VOCALIC L
-09E3;N;BENGALI VOWEL SIGN VOCALIC LL
-09E6;N;BENGALI DIGIT ZERO
-09E7;N;BENGALI DIGIT ONE
-09E8;N;BENGALI DIGIT TWO
-09E9;N;BENGALI DIGIT THREE
-09EA;N;BENGALI DIGIT FOUR
-09EB;N;BENGALI DIGIT FIVE
-09EC;N;BENGALI DIGIT SIX
-09ED;N;BENGALI DIGIT SEVEN
-09EE;N;BENGALI DIGIT EIGHT
-09EF;N;BENGALI DIGIT NINE
-09F0;N;BENGALI LETTER RA WITH MIDDLE DIAGONAL
-09F1;N;BENGALI LETTER RA WITH LOWER DIAGONAL
-09F2;N;BENGALI RUPEE MARK
-09F3;N;BENGALI RUPEE SIGN
-09F4;N;BENGALI CURRENCY NUMERATOR ONE
-09F5;N;BENGALI CURRENCY NUMERATOR TWO
-09F6;N;BENGALI CURRENCY NUMERATOR THREE
-09F7;N;BENGALI CURRENCY NUMERATOR FOUR
-09F8;N;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
-09F9;N;BENGALI CURRENCY DENOMINATOR SIXTEEN
-09FA;N;BENGALI ISSHAR
-0A02;N;GURMUKHI SIGN BINDI
-0A05;N;GURMUKHI LETTER A
-0A06;N;GURMUKHI LETTER AA
-0A07;N;GURMUKHI LETTER I
-0A08;N;GURMUKHI LETTER II
-0A09;N;GURMUKHI LETTER U
-0A0A;N;GURMUKHI LETTER UU
-0A0F;N;GURMUKHI LETTER EE
-0A10;N;GURMUKHI LETTER AI
-0A13;N;GURMUKHI LETTER OO
-0A14;N;GURMUKHI LETTER AU
-0A15;N;GURMUKHI LETTER KA
-0A16;N;GURMUKHI LETTER KHA
-0A17;N;GURMUKHI LETTER GA
-0A18;N;GURMUKHI LETTER GHA
-0A19;N;GURMUKHI LETTER NGA
-0A1A;N;GURMUKHI LETTER CA
-0A1B;N;GURMUKHI LETTER CHA
-0A1C;N;GURMUKHI LETTER JA
-0A1D;N;GURMUKHI LETTER JHA
-0A1E;N;GURMUKHI LETTER NYA
-0A1F;N;GURMUKHI LETTER TTA
-0A20;N;GURMUKHI LETTER TTHA
-0A21;N;GURMUKHI LETTER DDA
-0A22;N;GURMUKHI LETTER DDHA
-0A23;N;GURMUKHI LETTER NNA
-0A24;N;GURMUKHI LETTER TA
-0A25;N;GURMUKHI LETTER THA
-0A26;N;GURMUKHI LETTER DA
-0A27;N;GURMUKHI LETTER DHA
-0A28;N;GURMUKHI LETTER NA
-0A2A;N;GURMUKHI LETTER PA
-0A2B;N;GURMUKHI LETTER PHA
-0A2C;N;GURMUKHI LETTER BA
-0A2D;N;GURMUKHI LETTER BHA
-0A2E;N;GURMUKHI LETTER MA
-0A2F;N;GURMUKHI LETTER YA
-0A30;N;GURMUKHI LETTER RA
-0A32;N;GURMUKHI LETTER LA
-0A33;N;GURMUKHI LETTER LLA
-0A35;N;GURMUKHI LETTER VA
-0A36;N;GURMUKHI LETTER SHA
-0A38;N;GURMUKHI LETTER SA
-0A39;N;GURMUKHI LETTER HA
-0A3C;N;GURMUKHI SIGN NUKTA
-0A3E;N;GURMUKHI VOWEL SIGN AA
-0A3F;N;GURMUKHI VOWEL SIGN I
-0A40;N;GURMUKHI VOWEL SIGN II
-0A41;N;GURMUKHI VOWEL SIGN U
-0A42;N;GURMUKHI VOWEL SIGN UU
-0A47;N;GURMUKHI VOWEL SIGN EE
-0A48;N;GURMUKHI VOWEL SIGN AI
-0A4B;N;GURMUKHI VOWEL SIGN OO
-0A4C;N;GURMUKHI VOWEL SIGN AU
-0A4D;N;GURMUKHI SIGN VIRAMA
-0A59;N;GURMUKHI LETTER KHHA
-0A5A;N;GURMUKHI LETTER GHHA
-0A5B;N;GURMUKHI LETTER ZA
-0A5C;N;GURMUKHI LETTER RRA
-0A5E;N;GURMUKHI LETTER FA
-0A66;N;GURMUKHI DIGIT ZERO
-0A67;N;GURMUKHI DIGIT ONE
-0A68;N;GURMUKHI DIGIT TWO
-0A69;N;GURMUKHI DIGIT THREE
-0A6A;N;GURMUKHI DIGIT FOUR
-0A6B;N;GURMUKHI DIGIT FIVE
-0A6C;N;GURMUKHI DIGIT SIX
-0A6D;N;GURMUKHI DIGIT SEVEN
-0A6E;N;GURMUKHI DIGIT EIGHT
-0A6F;N;GURMUKHI DIGIT NINE
-0A70;N;GURMUKHI TIPPI
-0A71;N;GURMUKHI ADDAK
-0A72;N;GURMUKHI IRI
-0A73;N;GURMUKHI URA
-0A74;N;GURMUKHI EK ONKAR
-0A81;N;GUJARATI SIGN CANDRABINDU
-0A82;N;GUJARATI SIGN ANUSVARA
-0A83;N;GUJARATI SIGN VISARGA
-0A85;N;GUJARATI LETTER A
-0A86;N;GUJARATI LETTER AA
-0A87;N;GUJARATI LETTER I
-0A88;N;GUJARATI LETTER II
-0A89;N;GUJARATI LETTER U
-0A8A;N;GUJARATI LETTER UU
-0A8B;N;GUJARATI LETTER VOCALIC R
-0A8D;N;GUJARATI VOWEL CANDRA E
-0A8F;N;GUJARATI LETTER E
-0A90;N;GUJARATI LETTER AI
-0A91;N;GUJARATI VOWEL CANDRA O
-0A93;N;GUJARATI LETTER O
-0A94;N;GUJARATI LETTER AU
-0A95;N;GUJARATI LETTER KA
-0A96;N;GUJARATI LETTER KHA
-0A97;N;GUJARATI LETTER GA
-0A98;N;GUJARATI LETTER GHA
-0A99;N;GUJARATI LETTER NGA
-0A9A;N;GUJARATI LETTER CA
-0A9B;N;GUJARATI LETTER CHA
-0A9C;N;GUJARATI LETTER JA
-0A9D;N;GUJARATI LETTER JHA
-0A9E;N;GUJARATI LETTER NYA
-0A9F;N;GUJARATI LETTER TTA
-0AA0;N;GUJARATI LETTER TTHA
-0AA1;N;GUJARATI LETTER DDA
-0AA2;N;GUJARATI LETTER DDHA
-0AA3;N;GUJARATI LETTER NNA
-0AA4;N;GUJARATI LETTER TA
-0AA5;N;GUJARATI LETTER THA
-0AA6;N;GUJARATI LETTER DA
-0AA7;N;GUJARATI LETTER DHA
-0AA8;N;GUJARATI LETTER NA
-0AAA;N;GUJARATI LETTER PA
-0AAB;N;GUJARATI LETTER PHA
-0AAC;N;GUJARATI LETTER BA
-0AAD;N;GUJARATI LETTER BHA
-0AAE;N;GUJARATI LETTER MA
-0AAF;N;GUJARATI LETTER YA
-0AB0;N;GUJARATI LETTER RA
-0AB2;N;GUJARATI LETTER LA
-0AB3;N;GUJARATI LETTER LLA
-0AB5;N;GUJARATI LETTER VA
-0AB6;N;GUJARATI LETTER SHA
-0AB7;N;GUJARATI LETTER SSA
-0AB8;N;GUJARATI LETTER SA
-0AB9;N;GUJARATI LETTER HA
-0ABC;N;GUJARATI SIGN NUKTA
-0ABD;N;GUJARATI SIGN AVAGRAHA
-0ABE;N;GUJARATI VOWEL SIGN AA
-0ABF;N;GUJARATI VOWEL SIGN I
-0AC0;N;GUJARATI VOWEL SIGN II
-0AC1;N;GUJARATI VOWEL SIGN U
-0AC2;N;GUJARATI VOWEL SIGN UU
-0AC3;N;GUJARATI VOWEL SIGN VOCALIC R
-0AC4;N;GUJARATI VOWEL SIGN VOCALIC RR
-0AC5;N;GUJARATI VOWEL SIGN CANDRA E
-0AC7;N;GUJARATI VOWEL SIGN E
-0AC8;N;GUJARATI VOWEL SIGN AI
-0AC9;N;GUJARATI VOWEL SIGN CANDRA O
-0ACB;N;GUJARATI VOWEL SIGN O
-0ACC;N;GUJARATI VOWEL SIGN AU
-0ACD;N;GUJARATI SIGN VIRAMA
-0AD0;N;GUJARATI OM
-0AE0;N;GUJARATI LETTER VOCALIC RR
-0AE6;N;GUJARATI DIGIT ZERO
-0AE7;N;GUJARATI DIGIT ONE
-0AE8;N;GUJARATI DIGIT TWO
-0AE9;N;GUJARATI DIGIT THREE
-0AEA;N;GUJARATI DIGIT FOUR
-0AEB;N;GUJARATI DIGIT FIVE
-0AEC;N;GUJARATI DIGIT SIX
-0AED;N;GUJARATI DIGIT SEVEN
-0AEE;N;GUJARATI DIGIT EIGHT
-0AEF;N;GUJARATI DIGIT NINE
-0B01;N;ORIYA SIGN CANDRABINDU
-0B02;N;ORIYA SIGN ANUSVARA
-0B03;N;ORIYA SIGN VISARGA
-0B05;N;ORIYA LETTER A
-0B06;N;ORIYA LETTER AA
-0B07;N;ORIYA LETTER I
-0B08;N;ORIYA LETTER II
-0B09;N;ORIYA LETTER U
-0B0A;N;ORIYA LETTER UU
-0B0B;N;ORIYA LETTER VOCALIC R
-0B0C;N;ORIYA LETTER VOCALIC L
-0B0F;N;ORIYA LETTER E
-0B10;N;ORIYA LETTER AI
-0B13;N;ORIYA LETTER O
-0B14;N;ORIYA LETTER AU
-0B15;N;ORIYA LETTER KA
-0B16;N;ORIYA LETTER KHA
-0B17;N;ORIYA LETTER GA
-0B18;N;ORIYA LETTER GHA
-0B19;N;ORIYA LETTER NGA
-0B1A;N;ORIYA LETTER CA
-0B1B;N;ORIYA LETTER CHA
-0B1C;N;ORIYA LETTER JA
-0B1D;N;ORIYA LETTER JHA
-0B1E;N;ORIYA LETTER NYA
-0B1F;N;ORIYA LETTER TTA
-0B20;N;ORIYA LETTER TTHA
-0B21;N;ORIYA LETTER DDA
-0B22;N;ORIYA LETTER DDHA
-0B23;N;ORIYA LETTER NNA
-0B24;N;ORIYA LETTER TA
-0B25;N;ORIYA LETTER THA
-0B26;N;ORIYA LETTER DA
-0B27;N;ORIYA LETTER DHA
-0B28;N;ORIYA LETTER NA
-0B2A;N;ORIYA LETTER PA
-0B2B;N;ORIYA LETTER PHA
-0B2C;N;ORIYA LETTER BA
-0B2D;N;ORIYA LETTER BHA
-0B2E;N;ORIYA LETTER MA
-0B2F;N;ORIYA LETTER YA
-0B30;N;ORIYA LETTER RA
-0B32;N;ORIYA LETTER LA
-0B33;N;ORIYA LETTER LLA
-0B36;N;ORIYA LETTER SHA
-0B37;N;ORIYA LETTER SSA
-0B38;N;ORIYA LETTER SA
-0B39;N;ORIYA LETTER HA
-0B3C;N;ORIYA SIGN NUKTA
-0B3D;N;ORIYA SIGN AVAGRAHA
-0B3E;N;ORIYA VOWEL SIGN AA
-0B3F;N;ORIYA VOWEL SIGN I
-0B40;N;ORIYA VOWEL SIGN II
-0B41;N;ORIYA VOWEL SIGN U
-0B42;N;ORIYA VOWEL SIGN UU
-0B43;N;ORIYA VOWEL SIGN VOCALIC R
-0B47;N;ORIYA VOWEL SIGN E
-0B48;N;ORIYA VOWEL SIGN AI
-0B4B;N;ORIYA VOWEL SIGN O
-0B4C;N;ORIYA VOWEL SIGN AU
-0B4D;N;ORIYA SIGN VIRAMA
-0B56;N;ORIYA AI LENGTH MARK
-0B57;N;ORIYA AU LENGTH MARK
-0B5C;N;ORIYA LETTER RRA
-0B5D;N;ORIYA LETTER RHA
-0B5F;N;ORIYA LETTER YYA
-0B60;N;ORIYA LETTER VOCALIC RR
-0B61;N;ORIYA LETTER VOCALIC LL
-0B66;N;ORIYA DIGIT ZERO
-0B67;N;ORIYA DIGIT ONE
-0B68;N;ORIYA DIGIT TWO
-0B69;N;ORIYA DIGIT THREE
-0B6A;N;ORIYA DIGIT FOUR
-0B6B;N;ORIYA DIGIT FIVE
-0B6C;N;ORIYA DIGIT SIX
-0B6D;N;ORIYA DIGIT SEVEN
-0B6E;N;ORIYA DIGIT EIGHT
-0B6F;N;ORIYA DIGIT NINE
-0B70;N;ORIYA ISSHAR
-0B82;N;TAMIL SIGN ANUSVARA
-0B83;N;TAMIL SIGN VISARGA
-0B85;N;TAMIL LETTER A
-0B86;N;TAMIL LETTER AA
-0B87;N;TAMIL LETTER I
-0B88;N;TAMIL LETTER II
-0B89;N;TAMIL LETTER U
-0B8A;N;TAMIL LETTER UU
-0B8E;N;TAMIL LETTER E
-0B8F;N;TAMIL LETTER EE
-0B90;N;TAMIL LETTER AI
-0B92;N;TAMIL LETTER O
-0B93;N;TAMIL LETTER OO
-0B94;N;TAMIL LETTER AU
-0B95;N;TAMIL LETTER KA
-0B99;N;TAMIL LETTER NGA
-0B9A;N;TAMIL LETTER CA
-0B9C;N;TAMIL LETTER JA
-0B9E;N;TAMIL LETTER NYA
-0B9F;N;TAMIL LETTER TTA
-0BA3;N;TAMIL LETTER NNA
-0BA4;N;TAMIL LETTER TA
-0BA8;N;TAMIL LETTER NA
-0BA9;N;TAMIL LETTER NNNA
-0BAA;N;TAMIL LETTER PA
-0BAE;N;TAMIL LETTER MA
-0BAF;N;TAMIL LETTER YA
-0BB0;N;TAMIL LETTER RA
-0BB1;N;TAMIL LETTER RRA
-0BB2;N;TAMIL LETTER LA
-0BB3;N;TAMIL LETTER LLA
-0BB4;N;TAMIL LETTER LLLA
-0BB5;N;TAMIL LETTER VA
-0BB7;N;TAMIL LETTER SSA
-0BB8;N;TAMIL LETTER SA
-0BB9;N;TAMIL LETTER HA
-0BBE;N;TAMIL VOWEL SIGN AA
-0BBF;N;TAMIL VOWEL SIGN I
-0BC0;N;TAMIL VOWEL SIGN II
-0BC1;N;TAMIL VOWEL SIGN U
-0BC2;N;TAMIL VOWEL SIGN UU
-0BC6;N;TAMIL VOWEL SIGN E
-0BC7;N;TAMIL VOWEL SIGN EE
-0BC8;N;TAMIL VOWEL SIGN AI
-0BCA;N;TAMIL VOWEL SIGN O
-0BCB;N;TAMIL VOWEL SIGN OO
-0BCC;N;TAMIL VOWEL SIGN AU
-0BCD;N;TAMIL SIGN VIRAMA
-0BD7;N;TAMIL AU LENGTH MARK
-0BE7;N;TAMIL DIGIT ONE
-0BE8;N;TAMIL DIGIT TWO
-0BE9;N;TAMIL DIGIT THREE
-0BEA;N;TAMIL DIGIT FOUR
-0BEB;N;TAMIL DIGIT FIVE
-0BEC;N;TAMIL DIGIT SIX
-0BED;N;TAMIL DIGIT SEVEN
-0BEE;N;TAMIL DIGIT EIGHT
-0BEF;N;TAMIL DIGIT NINE
-0BF0;N;TAMIL NUMBER TEN
-0BF1;N;TAMIL NUMBER ONE HUNDRED
-0BF2;N;TAMIL NUMBER ONE THOUSAND
-0C01;N;TELUGU SIGN CANDRABINDU
-0C02;N;TELUGU SIGN ANUSVARA
-0C03;N;TELUGU SIGN VISARGA
-0C05;N;TELUGU LETTER A
-0C06;N;TELUGU LETTER AA
-0C07;N;TELUGU LETTER I
-0C08;N;TELUGU LETTER II
-0C09;N;TELUGU LETTER U
-0C0A;N;TELUGU LETTER UU
-0C0B;N;TELUGU LETTER VOCALIC R
-0C0C;N;TELUGU LETTER VOCALIC L
-0C0E;N;TELUGU LETTER E
-0C0F;N;TELUGU LETTER EE
-0C10;N;TELUGU LETTER AI
-0C12;N;TELUGU LETTER O
-0C13;N;TELUGU LETTER OO
-0C14;N;TELUGU LETTER AU
-0C15;N;TELUGU LETTER KA
-0C16;N;TELUGU LETTER KHA
-0C17;N;TELUGU LETTER GA
-0C18;N;TELUGU LETTER GHA
-0C19;N;TELUGU LETTER NGA
-0C1A;N;TELUGU LETTER CA
-0C1B;N;TELUGU LETTER CHA
-0C1C;N;TELUGU LETTER JA
-0C1D;N;TELUGU LETTER JHA
-0C1E;N;TELUGU LETTER NYA
-0C1F;N;TELUGU LETTER TTA
-0C20;N;TELUGU LETTER TTHA
-0C21;N;TELUGU LETTER DDA
-0C22;N;TELUGU LETTER DDHA
-0C23;N;TELUGU LETTER NNA
-0C24;N;TELUGU LETTER TA
-0C25;N;TELUGU LETTER THA
-0C26;N;TELUGU LETTER DA
-0C27;N;TELUGU LETTER DHA
-0C28;N;TELUGU LETTER NA
-0C2A;N;TELUGU LETTER PA
-0C2B;N;TELUGU LETTER PHA
-0C2C;N;TELUGU LETTER BA
-0C2D;N;TELUGU LETTER BHA
-0C2E;N;TELUGU LETTER MA
-0C2F;N;TELUGU LETTER YA
-0C30;N;TELUGU LETTER RA
-0C31;N;TELUGU LETTER RRA
-0C32;N;TELUGU LETTER LA
-0C33;N;TELUGU LETTER LLA
-0C35;N;TELUGU LETTER VA
-0C36;N;TELUGU LETTER SHA
-0C37;N;TELUGU LETTER SSA
-0C38;N;TELUGU LETTER SA
-0C39;N;TELUGU LETTER HA
-0C3E;N;TELUGU VOWEL SIGN AA
-0C3F;N;TELUGU VOWEL SIGN I
-0C40;N;TELUGU VOWEL SIGN II
-0C41;N;TELUGU VOWEL SIGN U
-0C42;N;TELUGU VOWEL SIGN UU
-0C43;N;TELUGU VOWEL SIGN VOCALIC R
-0C44;N;TELUGU VOWEL SIGN VOCALIC RR
-0C46;N;TELUGU VOWEL SIGN E
-0C47;N;TELUGU VOWEL SIGN EE
-0C48;N;TELUGU VOWEL SIGN AI
-0C4A;N;TELUGU VOWEL SIGN O
-0C4B;N;TELUGU VOWEL SIGN OO
-0C4C;N;TELUGU VOWEL SIGN AU
-0C4D;N;TELUGU SIGN VIRAMA
-0C55;N;TELUGU LENGTH MARK
-0C56;N;TELUGU AI LENGTH MARK
-0C60;N;TELUGU LETTER VOCALIC RR
-0C61;N;TELUGU LETTER VOCALIC LL
-0C66;N;TELUGU DIGIT ZERO
-0C67;N;TELUGU DIGIT ONE
-0C68;N;TELUGU DIGIT TWO
-0C69;N;TELUGU DIGIT THREE
-0C6A;N;TELUGU DIGIT FOUR
-0C6B;N;TELUGU DIGIT FIVE
-0C6C;N;TELUGU DIGIT SIX
-0C6D;N;TELUGU DIGIT SEVEN
-0C6E;N;TELUGU DIGIT EIGHT
-0C6F;N;TELUGU DIGIT NINE
-0C82;N;KANNADA SIGN ANUSVARA
-0C83;N;KANNADA SIGN VISARGA
-0C85;N;KANNADA LETTER A
-0C86;N;KANNADA LETTER AA
-0C87;N;KANNADA LETTER I
-0C88;N;KANNADA LETTER II
-0C89;N;KANNADA LETTER U
-0C8A;N;KANNADA LETTER UU
-0C8B;N;KANNADA LETTER VOCALIC R
-0C8C;N;KANNADA LETTER VOCALIC L
-0C8E;N;KANNADA LETTER E
-0C8F;N;KANNADA LETTER EE
-0C90;N;KANNADA LETTER AI
-0C92;N;KANNADA LETTER O
-0C93;N;KANNADA LETTER OO
-0C94;N;KANNADA LETTER AU
-0C95;N;KANNADA LETTER KA
-0C96;N;KANNADA LETTER KHA
-0C97;N;KANNADA LETTER GA
-0C98;N;KANNADA LETTER GHA
-0C99;N;KANNADA LETTER NGA
-0C9A;N;KANNADA LETTER CA
-0C9B;N;KANNADA LETTER CHA
-0C9C;N;KANNADA LETTER JA
-0C9D;N;KANNADA LETTER JHA
-0C9E;N;KANNADA LETTER NYA
-0C9F;N;KANNADA LETTER TTA
-0CA0;N;KANNADA LETTER TTHA
-0CA1;N;KANNADA LETTER DDA
-0CA2;N;KANNADA LETTER DDHA
-0CA3;N;KANNADA LETTER NNA
-0CA4;N;KANNADA LETTER TA
-0CA5;N;KANNADA LETTER THA
-0CA6;N;KANNADA LETTER DA
-0CA7;N;KANNADA LETTER DHA
-0CA8;N;KANNADA LETTER NA
-0CAA;N;KANNADA LETTER PA
-0CAB;N;KANNADA LETTER PHA
-0CAC;N;KANNADA LETTER BA
-0CAD;N;KANNADA LETTER BHA
-0CAE;N;KANNADA LETTER MA
-0CAF;N;KANNADA LETTER YA
-0CB0;N;KANNADA LETTER RA
-0CB1;N;KANNADA LETTER RRA
-0CB2;N;KANNADA LETTER LA
-0CB3;N;KANNADA LETTER LLA
-0CB5;N;KANNADA LETTER VA
-0CB6;N;KANNADA LETTER SHA
-0CB7;N;KANNADA LETTER SSA
-0CB8;N;KANNADA LETTER SA
-0CB9;N;KANNADA LETTER HA
-0CBE;N;KANNADA VOWEL SIGN AA
-0CBF;N;KANNADA VOWEL SIGN I
-0CC0;N;KANNADA VOWEL SIGN II
-0CC1;N;KANNADA VOWEL SIGN U
-0CC2;N;KANNADA VOWEL SIGN UU
-0CC3;N;KANNADA VOWEL SIGN VOCALIC R
-0CC4;N;KANNADA VOWEL SIGN VOCALIC RR
-0CC6;N;KANNADA VOWEL SIGN E
-0CC7;N;KANNADA VOWEL SIGN EE
-0CC8;N;KANNADA VOWEL SIGN AI
-0CCA;N;KANNADA VOWEL SIGN O
-0CCB;N;KANNADA VOWEL SIGN OO
-0CCC;N;KANNADA VOWEL SIGN AU
-0CCD;N;KANNADA SIGN VIRAMA
-0CD5;N;KANNADA LENGTH MARK
-0CD6;N;KANNADA AI LENGTH MARK
-0CDE;N;KANNADA LETTER FA
-0CE0;N;KANNADA LETTER VOCALIC RR
-0CE1;N;KANNADA LETTER VOCALIC LL
-0CE6;N;KANNADA DIGIT ZERO
-0CE7;N;KANNADA DIGIT ONE
-0CE8;N;KANNADA DIGIT TWO
-0CE9;N;KANNADA DIGIT THREE
-0CEA;N;KANNADA DIGIT FOUR
-0CEB;N;KANNADA DIGIT FIVE
-0CEC;N;KANNADA DIGIT SIX
-0CED;N;KANNADA DIGIT SEVEN
-0CEE;N;KANNADA DIGIT EIGHT
-0CEF;N;KANNADA DIGIT NINE
-0D02;N;MALAYALAM SIGN ANUSVARA
-0D03;N;MALAYALAM SIGN VISARGA
-0D05;N;MALAYALAM LETTER A
-0D06;N;MALAYALAM LETTER AA
-0D07;N;MALAYALAM LETTER I
-0D08;N;MALAYALAM LETTER II
-0D09;N;MALAYALAM LETTER U
-0D0A;N;MALAYALAM LETTER UU
-0D0B;N;MALAYALAM LETTER VOCALIC R
-0D0C;N;MALAYALAM LETTER VOCALIC L
-0D0E;N;MALAYALAM LETTER E
-0D0F;N;MALAYALAM LETTER EE
-0D10;N;MALAYALAM LETTER AI
-0D12;N;MALAYALAM LETTER O
-0D13;N;MALAYALAM LETTER OO
-0D14;N;MALAYALAM LETTER AU
-0D15;N;MALAYALAM LETTER KA
-0D16;N;MALAYALAM LETTER KHA
-0D17;N;MALAYALAM LETTER GA
-0D18;N;MALAYALAM LETTER GHA
-0D19;N;MALAYALAM LETTER NGA
-0D1A;N;MALAYALAM LETTER CA
-0D1B;N;MALAYALAM LETTER CHA
-0D1C;N;MALAYALAM LETTER JA
-0D1D;N;MALAYALAM LETTER JHA
-0D1E;N;MALAYALAM LETTER NYA
-0D1F;N;MALAYALAM LETTER TTA
-0D20;N;MALAYALAM LETTER TTHA
-0D21;N;MALAYALAM LETTER DDA
-0D22;N;MALAYALAM LETTER DDHA
-0D23;N;MALAYALAM LETTER NNA
-0D24;N;MALAYALAM LETTER TA
-0D25;N;MALAYALAM LETTER THA
-0D26;N;MALAYALAM LETTER DA
-0D27;N;MALAYALAM LETTER DHA
-0D28;N;MALAYALAM LETTER NA
-0D2A;N;MALAYALAM LETTER PA
-0D2B;N;MALAYALAM LETTER PHA
-0D2C;N;MALAYALAM LETTER BA
-0D2D;N;MALAYALAM LETTER BHA
-0D2E;N;MALAYALAM LETTER MA
-0D2F;N;MALAYALAM LETTER YA
-0D30;N;MALAYALAM LETTER RA
-0D31;N;MALAYALAM LETTER RRA
-0D32;N;MALAYALAM LETTER LA
-0D33;N;MALAYALAM LETTER LLA
-0D34;N;MALAYALAM LETTER LLLA
-0D35;N;MALAYALAM LETTER VA
-0D36;N;MALAYALAM LETTER SHA
-0D37;N;MALAYALAM LETTER SSA
-0D38;N;MALAYALAM LETTER SA
-0D39;N;MALAYALAM LETTER HA
-0D3E;N;MALAYALAM VOWEL SIGN AA
-0D3F;N;MALAYALAM VOWEL SIGN I
-0D40;N;MALAYALAM VOWEL SIGN II
-0D41;N;MALAYALAM VOWEL SIGN U
-0D42;N;MALAYALAM VOWEL SIGN UU
-0D43;N;MALAYALAM VOWEL SIGN VOCALIC R
-0D46;N;MALAYALAM VOWEL SIGN E
-0D47;N;MALAYALAM VOWEL SIGN EE
-0D48;N;MALAYALAM VOWEL SIGN AI
-0D4A;N;MALAYALAM VOWEL SIGN O
-0D4B;N;MALAYALAM VOWEL SIGN OO
-0D4C;N;MALAYALAM VOWEL SIGN AU
-0D4D;N;MALAYALAM SIGN VIRAMA
-0D57;N;MALAYALAM AU LENGTH MARK
-0D60;N;MALAYALAM LETTER VOCALIC RR
-0D61;N;MALAYALAM LETTER VOCALIC LL
-0D66;N;MALAYALAM DIGIT ZERO
-0D67;N;MALAYALAM DIGIT ONE
-0D68;N;MALAYALAM DIGIT TWO
-0D69;N;MALAYALAM DIGIT THREE
-0D6A;N;MALAYALAM DIGIT FOUR
-0D6B;N;MALAYALAM DIGIT FIVE
-0D6C;N;MALAYALAM DIGIT SIX
-0D6D;N;MALAYALAM DIGIT SEVEN
-0D6E;N;MALAYALAM DIGIT EIGHT
-0D6F;N;MALAYALAM DIGIT NINE
-0D82;N;SINHALA SIGN ANUSVARAYA
-0D83;N;SINHALA SIGN VISARGAYA
-0D85;N;SINHALA LETTER AYANNA
-0D86;N;SINHALA LETTER AAYANNA
-0D87;N;SINHALA LETTER AEYANNA
-0D88;N;SINHALA LETTER AEEYANNA
-0D89;N;SINHALA LETTER IYANNA
-0D8A;N;SINHALA LETTER IIYANNA
-0D8B;N;SINHALA LETTER UYANNA
-0D8C;N;SINHALA LETTER UUYANNA
-0D8D;N;SINHALA LETTER IRUYANNA
-0D8E;N;SINHALA LETTER IRUUYANNA
-0D8F;N;SINHALA LETTER ILUYANNA
-0D90;N;SINHALA LETTER ILUUYANNA
-0D91;N;SINHALA LETTER EYANNA
-0D92;N;SINHALA LETTER EEYANNA
-0D93;N;SINHALA LETTER AIYANNA
-0D94;N;SINHALA LETTER OYANNA
-0D95;N;SINHALA LETTER OOYANNA
-0D96;N;SINHALA LETTER AUYANNA
-0D9A;N;SINHALA LETTER ALPAPRAANA KAYANNA
-0D9B;N;SINHALA LETTER MAHAAPRAANA KAYANNA
-0D9C;N;SINHALA LETTER ALPAPRAANA GAYANNA
-0D9D;N;SINHALA LETTER MAHAAPRAANA GAYANNA
-0D9E;N;SINHALA LETTER KANTAJA NAASIKYAYA
-0D9F;N;SINHALA LETTER SANYAKA GAYANNA
-0DA0;N;SINHALA LETTER ALPAPRAANA CAYANNA
-0DA1;N;SINHALA LETTER MAHAAPRAANA CAYANNA
-0DA2;N;SINHALA LETTER ALPAPRAANA JAYANNA
-0DA3;N;SINHALA LETTER MAHAAPRAANA JAYANNA
-0DA4;N;SINHALA LETTER TAALUJA NAASIKYAYA
-0DA5;N;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
-0DA6;N;SINHALA LETTER SANYAKA JAYANNA
-0DA7;N;SINHALA LETTER ALPAPRAANA TTAYANNA
-0DA8;N;SINHALA LETTER MAHAAPRAANA TTAYANNA
-0DA9;N;SINHALA LETTER ALPAPRAANA DDAYANNA
-0DAA;N;SINHALA LETTER MAHAAPRAANA DDAYANNA
-0DAB;N;SINHALA LETTER MUURDHAJA NAYANNA
-0DAC;N;SINHALA LETTER SANYAKA DDAYANNA
-0DAD;N;SINHALA LETTER ALPAPRAANA TAYANNA
-0DAE;N;SINHALA LETTER MAHAAPRAANA TAYANNA
-0DAF;N;SINHALA LETTER ALPAPRAANA DAYANNA
-0DB0;N;SINHALA LETTER MAHAAPRAANA DAYANNA
-0DB1;N;SINHALA LETTER DANTAJA NAYANNA
-0DB3;N;SINHALA LETTER SANYAKA DAYANNA
-0DB4;N;SINHALA LETTER ALPAPRAANA PAYANNA
-0DB5;N;SINHALA LETTER MAHAAPRAANA PAYANNA
-0DB6;N;SINHALA LETTER ALPAPRAANA BAYANNA
-0DB7;N;SINHALA LETTER MAHAAPRAANA BAYANNA
-0DB8;N;SINHALA LETTER MAYANNA
-0DB9;N;SINHALA LETTER AMBA BAYANNA
-0DBA;N;SINHALA LETTER YAYANNA
-0DBB;N;SINHALA LETTER RAYANNA
-0DBD;N;SINHALA LETTER DANTAJA LAYANNA
-0DC0;N;SINHALA LETTER VAYANNA
-0DC1;N;SINHALA LETTER TAALUJA SAYANNA
-0DC2;N;SINHALA LETTER MUURDHAJA SAYANNA
-0DC3;N;SINHALA LETTER DANTAJA SAYANNA
-0DC4;N;SINHALA LETTER HAYANNA
-0DC5;N;SINHALA LETTER MUURDHAJA LAYANNA
-0DC6;N;SINHALA LETTER FAYANNA
-0DCA;N;SINHALA SIGN AL-LAKUNA
-0DCF;N;SINHALA VOWEL SIGN AELA-PILLA
-0DD0;N;SINHALA VOWEL SIGN KETTI AEDA-PILLA
-0DD1;N;SINHALA VOWEL SIGN DIGA AEDA-PILLA
-0DD2;N;SINHALA VOWEL SIGN KETTI IS-PILLA
-0DD3;N;SINHALA VOWEL SIGN DIGA IS-PILLA
-0DD4;N;SINHALA VOWEL SIGN KETTI PAA-PILLA
-0DD6;N;SINHALA VOWEL SIGN DIGA PAA-PILLA
-0DD8;N;SINHALA VOWEL SIGN GAETTA-PILLA
-0DD9;N;SINHALA VOWEL SIGN KOMBUVA
-0DDA;N;SINHALA VOWEL SIGN DIGA KOMBUVA
-0DDB;N;SINHALA VOWEL SIGN KOMBU DEKA
-0DDC;N;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
-0DDD;N;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
-0DDE;N;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
-0DDF;N;SINHALA VOWEL SIGN GAYANUKITTA
-0DF2;N;SINHALA VOWEL SIGN DIGA GAETTA-PILLA
-0DF3;N;SINHALA VOWEL SIGN DIGA GAYANUKITTA
-0DF4;N;SINHALA PUNCTUATION KUNDDALIYA
-0E01;N;THAI CHARACTER KO KAI
-0E02;N;THAI CHARACTER KHO KHAI
-0E03;N;THAI CHARACTER KHO KHUAT
-0E04;N;THAI CHARACTER KHO KHWAI
-0E05;N;THAI CHARACTER KHO KHON
-0E06;N;THAI CHARACTER KHO RAKHANG
-0E07;N;THAI CHARACTER NGO NGU
-0E08;N;THAI CHARACTER CHO CHAN
-0E09;N;THAI CHARACTER CHO CHING
-0E0A;N;THAI CHARACTER CHO CHANG
-0E0B;N;THAI CHARACTER SO SO
-0E0C;N;THAI CHARACTER CHO CHOE
-0E0D;N;THAI CHARACTER YO YING
-0E0E;N;THAI CHARACTER DO CHADA
-0E0F;N;THAI CHARACTER TO PATAK
-0E10;N;THAI CHARACTER THO THAN
-0E11;N;THAI CHARACTER THO NANGMONTHO
-0E12;N;THAI CHARACTER THO PHUTHAO
-0E13;N;THAI CHARACTER NO NEN
-0E14;N;THAI CHARACTER DO DEK
-0E15;N;THAI CHARACTER TO TAO
-0E16;N;THAI CHARACTER THO THUNG
-0E17;N;THAI CHARACTER THO THAHAN
-0E18;N;THAI CHARACTER THO THONG
-0E19;N;THAI CHARACTER NO NU
-0E1A;N;THAI CHARACTER BO BAIMAI
-0E1B;N;THAI CHARACTER PO PLA
-0E1C;N;THAI CHARACTER PHO PHUNG
-0E1D;N;THAI CHARACTER FO FA
-0E1E;N;THAI CHARACTER PHO PHAN
-0E1F;N;THAI CHARACTER FO FAN
-0E20;N;THAI CHARACTER PHO SAMPHAO
-0E21;N;THAI CHARACTER MO MA
-0E22;N;THAI CHARACTER YO YAK
-0E23;N;THAI CHARACTER RO RUA
-0E24;N;THAI CHARACTER RU
-0E25;N;THAI CHARACTER LO LING
-0E26;N;THAI CHARACTER LU
-0E27;N;THAI CHARACTER WO WAEN
-0E28;N;THAI CHARACTER SO SALA
-0E29;N;THAI CHARACTER SO RUSI
-0E2A;N;THAI CHARACTER SO SUA
-0E2B;N;THAI CHARACTER HO HIP
-0E2C;N;THAI CHARACTER LO CHULA
-0E2D;N;THAI CHARACTER O ANG
-0E2E;N;THAI CHARACTER HO NOKHUK
-0E2F;N;THAI CHARACTER PAIYANNOI
-0E30;N;THAI CHARACTER SARA A
-0E31;N;THAI CHARACTER MAI HAN-AKAT
-0E32;N;THAI CHARACTER SARA AA
-0E33;N;THAI CHARACTER SARA AM
-0E34;N;THAI CHARACTER SARA I
-0E35;N;THAI CHARACTER SARA II
-0E36;N;THAI CHARACTER SARA UE
-0E37;N;THAI CHARACTER SARA UEE
-0E38;N;THAI CHARACTER SARA U
-0E39;N;THAI CHARACTER SARA UU
-0E3A;N;THAI CHARACTER PHINTHU
-0E3F;N;THAI CURRENCY SYMBOL BAHT
-0E40;N;THAI CHARACTER SARA E
-0E41;N;THAI CHARACTER SARA AE
-0E42;N;THAI CHARACTER SARA O
-0E43;N;THAI CHARACTER SARA AI MAIMUAN
-0E44;N;THAI CHARACTER SARA AI MAIMALAI
-0E45;N;THAI CHARACTER LAKKHANGYAO
-0E46;N;THAI CHARACTER MAIYAMOK
-0E47;N;THAI CHARACTER MAITAIKHU
-0E48;N;THAI CHARACTER MAI EK
-0E49;N;THAI CHARACTER MAI THO
-0E4A;N;THAI CHARACTER MAI TRI
-0E4B;N;THAI CHARACTER MAI CHATTAWA
-0E4C;N;THAI CHARACTER THANTHAKHAT
-0E4D;N;THAI CHARACTER NIKHAHIT
-0E4E;N;THAI CHARACTER YAMAKKAN
-0E4F;N;THAI CHARACTER FONGMAN
-0E50;N;THAI DIGIT ZERO
-0E51;N;THAI DIGIT ONE
-0E52;N;THAI DIGIT TWO
-0E53;N;THAI DIGIT THREE
-0E54;N;THAI DIGIT FOUR
-0E55;N;THAI DIGIT FIVE
-0E56;N;THAI DIGIT SIX
-0E57;N;THAI DIGIT SEVEN
-0E58;N;THAI DIGIT EIGHT
-0E59;N;THAI DIGIT NINE
-0E5A;N;THAI CHARACTER ANGKHANKHU
-0E5B;N;THAI CHARACTER KHOMUT
-0E81;N;LAO LETTER KO
-0E82;N;LAO LETTER KHO SUNG
-0E84;N;LAO LETTER KHO TAM
-0E87;N;LAO LETTER NGO
-0E88;N;LAO LETTER CO
-0E8A;N;LAO LETTER SO TAM
-0E8D;N;LAO LETTER NYO
-0E94;N;LAO LETTER DO
-0E95;N;LAO LETTER TO
-0E96;N;LAO LETTER THO SUNG
-0E97;N;LAO LETTER THO TAM
-0E99;N;LAO LETTER NO
-0E9A;N;LAO LETTER BO
-0E9B;N;LAO LETTER PO
-0E9C;N;LAO LETTER PHO SUNG
-0E9D;N;LAO LETTER FO TAM
-0E9E;N;LAO LETTER PHO TAM
-0E9F;N;LAO LETTER FO SUNG
-0EA1;N;LAO LETTER MO
-0EA2;N;LAO LETTER YO
-0EA3;N;LAO LETTER LO LING
-0EA5;N;LAO LETTER LO LOOT
-0EA7;N;LAO LETTER WO
-0EAA;N;LAO LETTER SO SUNG
-0EAB;N;LAO LETTER HO SUNG
-0EAD;N;LAO LETTER O
-0EAE;N;LAO LETTER HO TAM
-0EAF;N;LAO ELLIPSIS
-0EB0;N;LAO VOWEL SIGN A
-0EB1;N;LAO VOWEL SIGN MAI KAN
-0EB2;N;LAO VOWEL SIGN AA
-0EB3;N;LAO VOWEL SIGN AM
-0EB4;N;LAO VOWEL SIGN I
-0EB5;N;LAO VOWEL SIGN II
-0EB6;N;LAO VOWEL SIGN Y
-0EB7;N;LAO VOWEL SIGN YY
-0EB8;N;LAO VOWEL SIGN U
-0EB9;N;LAO VOWEL SIGN UU
-0EBB;N;LAO VOWEL SIGN MAI KON
-0EBC;N;LAO SEMIVOWEL SIGN LO
-0EBD;N;LAO SEMIVOWEL SIGN NYO
-0EC0;N;LAO VOWEL SIGN E
-0EC1;N;LAO VOWEL SIGN EI
-0EC2;N;LAO VOWEL SIGN O
-0EC3;N;LAO VOWEL SIGN AY
-0EC4;N;LAO VOWEL SIGN AI
-0EC6;N;LAO KO LA
-0EC8;N;LAO TONE MAI EK
-0EC9;N;LAO TONE MAI THO
-0ECA;N;LAO TONE MAI TI
-0ECB;N;LAO TONE MAI CATAWA
-0ECC;N;LAO CANCELLATION MARK
-0ECD;N;LAO NIGGAHITA
-0ED0;N;LAO DIGIT ZERO
-0ED1;N;LAO DIGIT ONE
-0ED2;N;LAO DIGIT TWO
-0ED3;N;LAO DIGIT THREE
-0ED4;N;LAO DIGIT FOUR
-0ED5;N;LAO DIGIT FIVE
-0ED6;N;LAO DIGIT SIX
-0ED7;N;LAO DIGIT SEVEN
-0ED8;N;LAO DIGIT EIGHT
-0ED9;N;LAO DIGIT NINE
-0EDC;N;LAO HO NO
-0EDD;N;LAO HO MO
-0F00;N;TIBETAN SYLLABLE OM
-0F01;N;TIBETAN MARK GTER YIG MGO TRUNCATED A
-0F02;N;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
-0F03;N;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
-0F04;N;TIBETAN MARK INITIAL YIG MGO MDUN MA
-0F05;N;TIBETAN MARK CLOSING YIG MGO SGAB MA
-0F06;N;TIBETAN MARK CARET YIG MGO PHUR SHAD MA
-0F07;N;TIBETAN MARK YIG MGO TSHEG SHAD MA
-0F08;N;TIBETAN MARK SBRUL SHAD
-0F09;N;TIBETAN MARK BSKUR YIG MGO
-0F0A;N;TIBETAN MARK BKA- SHOG YIG MGO
-0F0B;N;TIBETAN MARK INTERSYLLABIC TSHEG
-0F0C;N;TIBETAN MARK DELIMITER TSHEG BSTAR
-0F0D;N;TIBETAN MARK SHAD
-0F0E;N;TIBETAN MARK NYIS SHAD
-0F0F;N;TIBETAN MARK TSHEG SHAD
-0F10;N;TIBETAN MARK NYIS TSHEG SHAD
-0F11;N;TIBETAN MARK RIN CHEN SPUNGS SHAD
-0F12;N;TIBETAN MARK RGYA GRAM SHAD
-0F13;N;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
-0F14;N;TIBETAN MARK GTER TSHEG
-0F15;N;TIBETAN LOGOTYPE SIGN CHAD RTAGS
-0F16;N;TIBETAN LOGOTYPE SIGN LHAG RTAGS
-0F17;N;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
-0F18;N;TIBETAN ASTROLOGICAL SIGN -KHYUD PA
-0F19;N;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-0F1A;N;TIBETAN SIGN RDEL DKAR GCIG
-0F1B;N;TIBETAN SIGN RDEL DKAR GNYIS
-0F1C;N;TIBETAN SIGN RDEL DKAR GSUM
-0F1D;N;TIBETAN SIGN RDEL NAG GCIG
-0F1E;N;TIBETAN SIGN RDEL NAG GNYIS
-0F1F;N;TIBETAN SIGN RDEL DKAR RDEL NAG
-0F20;N;TIBETAN DIGIT ZERO
-0F21;N;TIBETAN DIGIT ONE
-0F22;N;TIBETAN DIGIT TWO
-0F23;N;TIBETAN DIGIT THREE
-0F24;N;TIBETAN DIGIT FOUR
-0F25;N;TIBETAN DIGIT FIVE
-0F26;N;TIBETAN DIGIT SIX
-0F27;N;TIBETAN DIGIT SEVEN
-0F28;N;TIBETAN DIGIT EIGHT
-0F29;N;TIBETAN DIGIT NINE
-0F2A;N;TIBETAN DIGIT HALF ONE
-0F2B;N;TIBETAN DIGIT HALF TWO
-0F2C;N;TIBETAN DIGIT HALF THREE
-0F2D;N;TIBETAN DIGIT HALF FOUR
-0F2E;N;TIBETAN DIGIT HALF FIVE
-0F2F;N;TIBETAN DIGIT HALF SIX
-0F30;N;TIBETAN DIGIT HALF SEVEN
-0F31;N;TIBETAN DIGIT HALF EIGHT
-0F32;N;TIBETAN DIGIT HALF NINE
-0F33;N;TIBETAN DIGIT HALF ZERO
-0F34;N;TIBETAN MARK BSDUS RTAGS
-0F35;N;TIBETAN MARK NGAS BZUNG NYI ZLA
-0F36;N;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
-0F37;N;TIBETAN MARK NGAS BZUNG SGOR RTAGS
-0F38;N;TIBETAN MARK CHE MGO
-0F39;N;TIBETAN MARK TSA -PHRU
-0F3A;N;TIBETAN MARK GUG RTAGS GYON
-0F3B;N;TIBETAN MARK GUG RTAGS GYAS
-0F3C;N;TIBETAN MARK ANG KHANG GYON
-0F3D;N;TIBETAN MARK ANG KHANG GYAS
-0F3E;N;TIBETAN SIGN YAR TSHES
-0F3F;N;TIBETAN SIGN MAR TSHES
-0F40;N;TIBETAN LETTER KA
-0F41;N;TIBETAN LETTER KHA
-0F42;N;TIBETAN LETTER GA
-0F43;N;TIBETAN LETTER GHA
-0F44;N;TIBETAN LETTER NGA
-0F45;N;TIBETAN LETTER CA
-0F46;N;TIBETAN LETTER CHA
-0F47;N;TIBETAN LETTER JA
-0F49;N;TIBETAN LETTER NYA
-0F4A;N;TIBETAN LETTER TTA
-0F4B;N;TIBETAN LETTER TTHA
-0F4C;N;TIBETAN LETTER DDA
-0F4D;N;TIBETAN LETTER DDHA
-0F4E;N;TIBETAN LETTER NNA
-0F4F;N;TIBETAN LETTER TA
-0F50;N;TIBETAN LETTER THA
-0F51;N;TIBETAN LETTER DA
-0F52;N;TIBETAN LETTER DHA
-0F53;N;TIBETAN LETTER NA
-0F54;N;TIBETAN LETTER PA
-0F55;N;TIBETAN LETTER PHA
-0F56;N;TIBETAN LETTER BA
-0F57;N;TIBETAN LETTER BHA
-0F58;N;TIBETAN LETTER MA
-0F59;N;TIBETAN LETTER TSA
-0F5A;N;TIBETAN LETTER TSHA
-0F5B;N;TIBETAN LETTER DZA
-0F5C;N;TIBETAN LETTER DZHA
-0F5D;N;TIBETAN LETTER WA
-0F5E;N;TIBETAN LETTER ZHA
-0F5F;N;TIBETAN LETTER ZA
-0F60;N;TIBETAN LETTER -A
-0F61;N;TIBETAN LETTER YA
-0F62;N;TIBETAN LETTER RA
-0F63;N;TIBETAN LETTER LA
-0F64;N;TIBETAN LETTER SHA
-0F65;N;TIBETAN LETTER SSA
-0F66;N;TIBETAN LETTER SA
-0F67;N;TIBETAN LETTER HA
-0F68;N;TIBETAN LETTER A
-0F69;N;TIBETAN LETTER KSSA
-0F6A;N;TIBETAN LETTER FIXED-FORM RA
-0F71;N;TIBETAN VOWEL SIGN AA
-0F72;N;TIBETAN VOWEL SIGN I
-0F73;N;TIBETAN VOWEL SIGN II
-0F74;N;TIBETAN VOWEL SIGN U
-0F75;N;TIBETAN VOWEL SIGN UU
-0F76;N;TIBETAN VOWEL SIGN VOCALIC R
-0F77;N;TIBETAN VOWEL SIGN VOCALIC RR
-0F78;N;TIBETAN VOWEL SIGN VOCALIC L
-0F79;N;TIBETAN VOWEL SIGN VOCALIC LL
-0F7A;N;TIBETAN VOWEL SIGN E
-0F7B;N;TIBETAN VOWEL SIGN EE
-0F7C;N;TIBETAN VOWEL SIGN O
-0F7D;N;TIBETAN VOWEL SIGN OO
-0F7E;N;TIBETAN SIGN RJES SU NGA RO
-0F7F;N;TIBETAN SIGN RNAM BCAD
-0F80;N;TIBETAN VOWEL SIGN REVERSED I
-0F81;N;TIBETAN VOWEL SIGN REVERSED II
-0F82;N;TIBETAN SIGN NYI ZLA NAA DA
-0F83;N;TIBETAN SIGN SNA LDAN
-0F84;N;TIBETAN MARK HALANTA
-0F85;N;TIBETAN MARK PALUTA
-0F86;N;TIBETAN SIGN LCI RTAGS
-0F87;N;TIBETAN SIGN YANG RTAGS
-0F88;N;TIBETAN SIGN LCE TSA CAN
-0F89;N;TIBETAN SIGN MCHU CAN
-0F8A;N;TIBETAN SIGN GRU CAN RGYINGS
-0F8B;N;TIBETAN SIGN GRU MED RGYINGS
-0F90;N;TIBETAN SUBJOINED LETTER KA
-0F91;N;TIBETAN SUBJOINED LETTER KHA
-0F92;N;TIBETAN SUBJOINED LETTER GA
-0F93;N;TIBETAN SUBJOINED LETTER GHA
-0F94;N;TIBETAN SUBJOINED LETTER NGA
-0F95;N;TIBETAN SUBJOINED LETTER CA
-0F96;N;TIBETAN SUBJOINED LETTER CHA
-0F97;N;TIBETAN SUBJOINED LETTER JA
-0F99;N;TIBETAN SUBJOINED LETTER NYA
-0F9A;N;TIBETAN SUBJOINED LETTER TTA
-0F9B;N;TIBETAN SUBJOINED LETTER TTHA
-0F9C;N;TIBETAN SUBJOINED LETTER DDA
-0F9D;N;TIBETAN SUBJOINED LETTER DDHA
-0F9E;N;TIBETAN SUBJOINED LETTER NNA
-0F9F;N;TIBETAN SUBJOINED LETTER TA
-0FA0;N;TIBETAN SUBJOINED LETTER THA
-0FA1;N;TIBETAN SUBJOINED LETTER DA
-0FA2;N;TIBETAN SUBJOINED LETTER DHA
-0FA3;N;TIBETAN SUBJOINED LETTER NA
-0FA4;N;TIBETAN SUBJOINED LETTER PA
-0FA5;N;TIBETAN SUBJOINED LETTER PHA
-0FA6;N;TIBETAN SUBJOINED LETTER BA
-0FA7;N;TIBETAN SUBJOINED LETTER BHA
-0FA8;N;TIBETAN SUBJOINED LETTER MA
-0FA9;N;TIBETAN SUBJOINED LETTER TSA
-0FAA;N;TIBETAN SUBJOINED LETTER TSHA
-0FAB;N;TIBETAN SUBJOINED LETTER DZA
-0FAC;N;TIBETAN SUBJOINED LETTER DZHA
-0FAD;N;TIBETAN SUBJOINED LETTER WA
-0FAE;N;TIBETAN SUBJOINED LETTER ZHA
-0FAF;N;TIBETAN SUBJOINED LETTER ZA
-0FB0;N;TIBETAN SUBJOINED LETTER -A
-0FB1;N;TIBETAN SUBJOINED LETTER YA
-0FB2;N;TIBETAN SUBJOINED LETTER RA
-0FB3;N;TIBETAN SUBJOINED LETTER LA
-0FB4;N;TIBETAN SUBJOINED LETTER SHA
-0FB5;N;TIBETAN SUBJOINED LETTER SSA
-0FB6;N;TIBETAN SUBJOINED LETTER SA
-0FB7;N;TIBETAN SUBJOINED LETTER HA
-0FB8;N;TIBETAN SUBJOINED LETTER A
-0FB9;N;TIBETAN SUBJOINED LETTER KSSA
-0FBA;N;TIBETAN SUBJOINED LETTER FIXED-FORM WA
-0FBB;N;TIBETAN SUBJOINED LETTER FIXED-FORM YA
-0FBC;N;TIBETAN SUBJOINED LETTER FIXED-FORM RA
-0FBE;N;TIBETAN KU RU KHA
-0FBF;N;TIBETAN KU RU KHA BZHI MIG CAN
-0FC0;N;TIBETAN CANTILLATION SIGN HEAVY BEAT
-0FC1;N;TIBETAN CANTILLATION SIGN LIGHT BEAT
-0FC2;N;TIBETAN CANTILLATION SIGN CANG TE-U
-0FC3;N;TIBETAN CANTILLATION SIGN SBUB -CHAL
-0FC4;N;TIBETAN SYMBOL DRIL BU
-0FC5;N;TIBETAN SYMBOL RDO RJE
-0FC6;N;TIBETAN SYMBOL PADMA GDAN
-0FC7;N;TIBETAN SYMBOL RDO RJE RGYA GRAM
-0FC8;N;TIBETAN SYMBOL PHUR PA
-0FC9;N;TIBETAN SYMBOL NOR BU
-0FCA;N;TIBETAN SYMBOL NOR BU NYIS -KHYIL
-0FCB;N;TIBETAN SYMBOL NOR BU GSUM -KHYIL
-0FCC;N;TIBETAN SYMBOL NOR BU BZHI -KHYIL
-0FCF;N;TIBETAN SIGN RDEL NAG GSUM
-1000;N;MYANMAR LETTER KA
-1001;N;MYANMAR LETTER KHA
-1002;N;MYANMAR LETTER GA
-1003;N;MYANMAR LETTER GHA
-1004;N;MYANMAR LETTER NGA
-1005;N;MYANMAR LETTER CA
-1006;N;MYANMAR LETTER CHA
-1007;N;MYANMAR LETTER JA
-1008;N;MYANMAR LETTER JHA
-1009;N;MYANMAR LETTER NYA
-100A;N;MYANMAR LETTER NNYA
-100B;N;MYANMAR LETTER TTA
-100C;N;MYANMAR LETTER TTHA
-100D;N;MYANMAR LETTER DDA
-100E;N;MYANMAR LETTER DDHA
-100F;N;MYANMAR LETTER NNA
-1010;N;MYANMAR LETTER TA
-1011;N;MYANMAR LETTER THA
-1012;N;MYANMAR LETTER DA
-1013;N;MYANMAR LETTER DHA
-1014;N;MYANMAR LETTER NA
-1015;N;MYANMAR LETTER PA
-1016;N;MYANMAR LETTER PHA
-1017;N;MYANMAR LETTER BA
-1018;N;MYANMAR LETTER BHA
-1019;N;MYANMAR LETTER MA
-101A;N;MYANMAR LETTER YA
-101B;N;MYANMAR LETTER RA
-101C;N;MYANMAR LETTER LA
-101D;N;MYANMAR LETTER WA
-101E;N;MYANMAR LETTER SA
-101F;N;MYANMAR LETTER HA
-1020;N;MYANMAR LETTER LLA
-1021;N;MYANMAR LETTER A
-1023;N;MYANMAR LETTER I
-1024;N;MYANMAR LETTER II
-1025;N;MYANMAR LETTER U
-1026;N;MYANMAR LETTER UU
-1027;N;MYANMAR LETTER E
-1029;N;MYANMAR LETTER O
-102A;N;MYANMAR LETTER AU
-102C;N;MYANMAR VOWEL SIGN AA
-102D;N;MYANMAR VOWEL SIGN I
-102E;N;MYANMAR VOWEL SIGN II
-102F;N;MYANMAR VOWEL SIGN U
-1030;N;MYANMAR VOWEL SIGN UU
-1031;N;MYANMAR VOWEL SIGN E
-1032;N;MYANMAR VOWEL SIGN AI
-1036;N;MYANMAR SIGN ANUSVARA
-1037;N;MYANMAR SIGN DOT BELOW
-1038;N;MYANMAR SIGN VISARGA
-1039;N;MYANMAR SIGN VIRAMA
-1040;N;MYANMAR DIGIT ZERO
-1041;N;MYANMAR DIGIT ONE
-1042;N;MYANMAR DIGIT TWO
-1043;N;MYANMAR DIGIT THREE
-1044;N;MYANMAR DIGIT FOUR
-1045;N;MYANMAR DIGIT FIVE
-1046;N;MYANMAR DIGIT SIX
-1047;N;MYANMAR DIGIT SEVEN
-1048;N;MYANMAR DIGIT EIGHT
-1049;N;MYANMAR DIGIT NINE
-104A;N;MYANMAR SIGN LITTLE SECTION
-104B;N;MYANMAR SIGN SECTION
-104C;N;MYANMAR SYMBOL LOCATIVE
-104D;N;MYANMAR SYMBOL COMPLETED
-104E;N;MYANMAR SYMBOL AFOREMENTIONED
-104F;N;MYANMAR SYMBOL GENITIVE
-1050;N;MYANMAR LETTER SHA
-1051;N;MYANMAR LETTER SSA
-1052;N;MYANMAR LETTER VOCALIC R
-1053;N;MYANMAR LETTER VOCALIC RR
-1054;N;MYANMAR LETTER VOCALIC L
-1055;N;MYANMAR LETTER VOCALIC LL
-1056;N;MYANMAR VOWEL SIGN VOCALIC R
-1057;N;MYANMAR VOWEL SIGN VOCALIC RR
-1058;N;MYANMAR VOWEL SIGN VOCALIC L
-1059;N;MYANMAR VOWEL SIGN VOCALIC LL
-10A0;N;GEORGIAN CAPITAL LETTER AN
-10A1;N;GEORGIAN CAPITAL LETTER BAN
-10A2;N;GEORGIAN CAPITAL LETTER GAN
-10A3;N;GEORGIAN CAPITAL LETTER DON
-10A4;N;GEORGIAN CAPITAL LETTER EN
-10A5;N;GEORGIAN CAPITAL LETTER VIN
-10A6;N;GEORGIAN CAPITAL LETTER ZEN
-10A7;N;GEORGIAN CAPITAL LETTER TAN
-10A8;N;GEORGIAN CAPITAL LETTER IN
-10A9;N;GEORGIAN CAPITAL LETTER KAN
-10AA;N;GEORGIAN CAPITAL LETTER LAS
-10AB;N;GEORGIAN CAPITAL LETTER MAN
-10AC;N;GEORGIAN CAPITAL LETTER NAR
-10AD;N;GEORGIAN CAPITAL LETTER ON
-10AE;N;GEORGIAN CAPITAL LETTER PAR
-10AF;N;GEORGIAN CAPITAL LETTER ZHAR
-10B0;N;GEORGIAN CAPITAL LETTER RAE
-10B1;N;GEORGIAN CAPITAL LETTER SAN
-10B2;N;GEORGIAN CAPITAL LETTER TAR
-10B3;N;GEORGIAN CAPITAL LETTER UN
-10B4;N;GEORGIAN CAPITAL LETTER PHAR
-10B5;N;GEORGIAN CAPITAL LETTER KHAR
-10B6;N;GEORGIAN CAPITAL LETTER GHAN
-10B7;N;GEORGIAN CAPITAL LETTER QAR
-10B8;N;GEORGIAN CAPITAL LETTER SHIN
-10B9;N;GEORGIAN CAPITAL LETTER CHIN
-10BA;N;GEORGIAN CAPITAL LETTER CAN
-10BB;N;GEORGIAN CAPITAL LETTER JIL
-10BC;N;GEORGIAN CAPITAL LETTER CIL
-10BD;N;GEORGIAN CAPITAL LETTER CHAR
-10BE;N;GEORGIAN CAPITAL LETTER XAN
-10BF;N;GEORGIAN CAPITAL LETTER JHAN
-10C0;N;GEORGIAN CAPITAL LETTER HAE
-10C1;N;GEORGIAN CAPITAL LETTER HE
-10C2;N;GEORGIAN CAPITAL LETTER HIE
-10C3;N;GEORGIAN CAPITAL LETTER WE
-10C4;N;GEORGIAN CAPITAL LETTER HAR
-10C5;N;GEORGIAN CAPITAL LETTER HOE
-10D0;N;GEORGIAN LETTER AN
-10D1;N;GEORGIAN LETTER BAN
-10D2;N;GEORGIAN LETTER GAN
-10D3;N;GEORGIAN LETTER DON
-10D4;N;GEORGIAN LETTER EN
-10D5;N;GEORGIAN LETTER VIN
-10D6;N;GEORGIAN LETTER ZEN
-10D7;N;GEORGIAN LETTER TAN
-10D8;N;GEORGIAN LETTER IN
-10D9;N;GEORGIAN LETTER KAN
-10DA;N;GEORGIAN LETTER LAS
-10DB;N;GEORGIAN LETTER MAN
-10DC;N;GEORGIAN LETTER NAR
-10DD;N;GEORGIAN LETTER ON
-10DE;N;GEORGIAN LETTER PAR
-10DF;N;GEORGIAN LETTER ZHAR
-10E0;N;GEORGIAN LETTER RAE
-10E1;N;GEORGIAN LETTER SAN
-10E2;N;GEORGIAN LETTER TAR
-10E3;N;GEORGIAN LETTER UN
-10E4;N;GEORGIAN LETTER PHAR
-10E5;N;GEORGIAN LETTER KHAR
-10E6;N;GEORGIAN LETTER GHAN
-10E7;N;GEORGIAN LETTER QAR
-10E8;N;GEORGIAN LETTER SHIN
-10E9;N;GEORGIAN LETTER CHIN
-10EA;N;GEORGIAN LETTER CAN
-10EB;N;GEORGIAN LETTER JIL
-10EC;N;GEORGIAN LETTER CIL
-10ED;N;GEORGIAN LETTER CHAR
-10EE;N;GEORGIAN LETTER XAN
-10EF;N;GEORGIAN LETTER JHAN
-10F0;N;GEORGIAN LETTER HAE
-10F1;N;GEORGIAN LETTER HE
-10F2;N;GEORGIAN LETTER HIE
-10F3;N;GEORGIAN LETTER WE
-10F4;N;GEORGIAN LETTER HAR
-10F5;N;GEORGIAN LETTER HOE
-10F6;N;GEORGIAN LETTER FI
-10FB;N;GEORGIAN PARAGRAPH SEPARATOR
-1100;W;HANGUL CHOSEONG KIYEOK
-1101;W;HANGUL CHOSEONG SSANGKIYEOK
-1102;W;HANGUL CHOSEONG NIEUN
-1103;W;HANGUL CHOSEONG TIKEUT
-1104;W;HANGUL CHOSEONG SSANGTIKEUT
-1105;W;HANGUL CHOSEONG RIEUL
-1106;W;HANGUL CHOSEONG MIEUM
-1107;W;HANGUL CHOSEONG PIEUP
-1108;W;HANGUL CHOSEONG SSANGPIEUP
-1109;W;HANGUL CHOSEONG SIOS
-110A;W;HANGUL CHOSEONG SSANGSIOS
-110B;W;HANGUL CHOSEONG IEUNG
-110C;W;HANGUL CHOSEONG CIEUC
-110D;W;HANGUL CHOSEONG SSANGCIEUC
-110E;W;HANGUL CHOSEONG CHIEUCH
-110F;W;HANGUL CHOSEONG KHIEUKH
-1110;W;HANGUL CHOSEONG THIEUTH
-1111;W;HANGUL CHOSEONG PHIEUPH
-1112;W;HANGUL CHOSEONG HIEUH
-1113;W;HANGUL CHOSEONG NIEUN-KIYEOK
-1114;W;HANGUL CHOSEONG SSANGNIEUN
-1115;W;HANGUL CHOSEONG NIEUN-TIKEUT
-1116;W;HANGUL CHOSEONG NIEUN-PIEUP
-1117;W;HANGUL CHOSEONG TIKEUT-KIYEOK
-1118;W;HANGUL CHOSEONG RIEUL-NIEUN
-1119;W;HANGUL CHOSEONG SSANGRIEUL
-111A;W;HANGUL CHOSEONG RIEUL-HIEUH
-111B;W;HANGUL CHOSEONG KAPYEOUNRIEUL
-111C;W;HANGUL CHOSEONG MIEUM-PIEUP
-111D;W;HANGUL CHOSEONG KAPYEOUNMIEUM
-111E;W;HANGUL CHOSEONG PIEUP-KIYEOK
-111F;W;HANGUL CHOSEONG PIEUP-NIEUN
-1120;W;HANGUL CHOSEONG PIEUP-TIKEUT
-1121;W;HANGUL CHOSEONG PIEUP-SIOS
-1122;W;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
-1123;W;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
-1124;W;HANGUL CHOSEONG PIEUP-SIOS-PIEUP
-1125;W;HANGUL CHOSEONG PIEUP-SSANGSIOS
-1126;W;HANGUL CHOSEONG PIEUP-SIOS-CIEUC
-1127;W;HANGUL CHOSEONG PIEUP-CIEUC
-1128;W;HANGUL CHOSEONG PIEUP-CHIEUCH
-1129;W;HANGUL CHOSEONG PIEUP-THIEUTH
-112A;W;HANGUL CHOSEONG PIEUP-PHIEUPH
-112B;W;HANGUL CHOSEONG KAPYEOUNPIEUP
-112C;W;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
-112D;W;HANGUL CHOSEONG SIOS-KIYEOK
-112E;W;HANGUL CHOSEONG SIOS-NIEUN
-112F;W;HANGUL CHOSEONG SIOS-TIKEUT
-1130;W;HANGUL CHOSEONG SIOS-RIEUL
-1131;W;HANGUL CHOSEONG SIOS-MIEUM
-1132;W;HANGUL CHOSEONG SIOS-PIEUP
-1133;W;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
-1134;W;HANGUL CHOSEONG SIOS-SSANGSIOS
-1135;W;HANGUL CHOSEONG SIOS-IEUNG
-1136;W;HANGUL CHOSEONG SIOS-CIEUC
-1137;W;HANGUL CHOSEONG SIOS-CHIEUCH
-1138;W;HANGUL CHOSEONG SIOS-KHIEUKH
-1139;W;HANGUL CHOSEONG SIOS-THIEUTH
-113A;W;HANGUL CHOSEONG SIOS-PHIEUPH
-113B;W;HANGUL CHOSEONG SIOS-HIEUH
-113C;W;HANGUL CHOSEONG CHITUEUMSIOS
-113D;W;HANGUL CHOSEONG CHITUEUMSSANGSIOS
-113E;W;HANGUL CHOSEONG CEONGCHIEUMSIOS
-113F;W;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
-1140;W;HANGUL CHOSEONG PANSIOS
-1141;W;HANGUL CHOSEONG IEUNG-KIYEOK
-1142;W;HANGUL CHOSEONG IEUNG-TIKEUT
-1143;W;HANGUL CHOSEONG IEUNG-MIEUM
-1144;W;HANGUL CHOSEONG IEUNG-PIEUP
-1145;W;HANGUL CHOSEONG IEUNG-SIOS
-1146;W;HANGUL CHOSEONG IEUNG-PANSIOS
-1147;W;HANGUL CHOSEONG SSANGIEUNG
-1148;W;HANGUL CHOSEONG IEUNG-CIEUC
-1149;W;HANGUL CHOSEONG IEUNG-CHIEUCH
-114A;W;HANGUL CHOSEONG IEUNG-THIEUTH
-114B;W;HANGUL CHOSEONG IEUNG-PHIEUPH
-114C;W;HANGUL CHOSEONG YESIEUNG
-114D;W;HANGUL CHOSEONG CIEUC-IEUNG
-114E;W;HANGUL CHOSEONG CHITUEUMCIEUC
-114F;W;HANGUL CHOSEONG CHITUEUMSSANGCIEUC
-1150;W;HANGUL CHOSEONG CEONGCHIEUMCIEUC
-1151;W;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
-1152;W;HANGUL CHOSEONG CHIEUCH-KHIEUKH
-1153;W;HANGUL CHOSEONG CHIEUCH-HIEUH
-1154;W;HANGUL CHOSEONG CHITUEUMCHIEUCH
-1155;W;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
-1156;W;HANGUL CHOSEONG PHIEUPH-PIEUP
-1157;W;HANGUL CHOSEONG KAPYEOUNPHIEUPH
-1158;W;HANGUL CHOSEONG SSANGHIEUH
-1159;W;HANGUL CHOSEONG YEORINHIEUH
-115F;W;HANGUL CHOSEONG FILLER
-1160;N;HANGUL JUNGSEONG FILLER
-1161;N;HANGUL JUNGSEONG A
-1162;N;HANGUL JUNGSEONG AE
-1163;N;HANGUL JUNGSEONG YA
-1164;N;HANGUL JUNGSEONG YAE
-1165;N;HANGUL JUNGSEONG EO
-1166;N;HANGUL JUNGSEONG E
-1167;N;HANGUL JUNGSEONG YEO
-1168;N;HANGUL JUNGSEONG YE
-1169;N;HANGUL JUNGSEONG O
-116A;N;HANGUL JUNGSEONG WA
-116B;N;HANGUL JUNGSEONG WAE
-116C;N;HANGUL JUNGSEONG OE
-116D;N;HANGUL JUNGSEONG YO
-116E;N;HANGUL JUNGSEONG U
-116F;N;HANGUL JUNGSEONG WEO
-1170;N;HANGUL JUNGSEONG WE
-1171;N;HANGUL JUNGSEONG WI
-1172;N;HANGUL JUNGSEONG YU
-1173;N;HANGUL JUNGSEONG EU
-1174;N;HANGUL JUNGSEONG YI
-1175;N;HANGUL JUNGSEONG I
-1176;N;HANGUL JUNGSEONG A-O
-1177;N;HANGUL JUNGSEONG A-U
-1178;N;HANGUL JUNGSEONG YA-O
-1179;N;HANGUL JUNGSEONG YA-YO
-117A;N;HANGUL JUNGSEONG EO-O
-117B;N;HANGUL JUNGSEONG EO-U
-117C;N;HANGUL JUNGSEONG EO-EU
-117D;N;HANGUL JUNGSEONG YEO-O
-117E;N;HANGUL JUNGSEONG YEO-U
-117F;N;HANGUL JUNGSEONG O-EO
-1180;N;HANGUL JUNGSEONG O-E
-1181;N;HANGUL JUNGSEONG O-YE
-1182;N;HANGUL JUNGSEONG O-O
-1183;N;HANGUL JUNGSEONG O-U
-1184;N;HANGUL JUNGSEONG YO-YA
-1185;N;HANGUL JUNGSEONG YO-YAE
-1186;N;HANGUL JUNGSEONG YO-YEO
-1187;N;HANGUL JUNGSEONG YO-O
-1188;N;HANGUL JUNGSEONG YO-I
-1189;N;HANGUL JUNGSEONG U-A
-118A;N;HANGUL JUNGSEONG U-AE
-118B;N;HANGUL JUNGSEONG U-EO-EU
-118C;N;HANGUL JUNGSEONG U-YE
-118D;N;HANGUL JUNGSEONG U-U
-118E;N;HANGUL JUNGSEONG YU-A
-118F;N;HANGUL JUNGSEONG YU-EO
-1190;N;HANGUL JUNGSEONG YU-E
-1191;N;HANGUL JUNGSEONG YU-YEO
-1192;N;HANGUL JUNGSEONG YU-YE
-1193;N;HANGUL JUNGSEONG YU-U
-1194;N;HANGUL JUNGSEONG YU-I
-1195;N;HANGUL JUNGSEONG EU-U
-1196;N;HANGUL JUNGSEONG EU-EU
-1197;N;HANGUL JUNGSEONG YI-U
-1198;N;HANGUL JUNGSEONG I-A
-1199;N;HANGUL JUNGSEONG I-YA
-119A;N;HANGUL JUNGSEONG I-O
-119B;N;HANGUL JUNGSEONG I-U
-119C;N;HANGUL JUNGSEONG I-EU
-119D;N;HANGUL JUNGSEONG I-ARAEA
-119E;N;HANGUL JUNGSEONG ARAEA
-119F;N;HANGUL JUNGSEONG ARAEA-EO
-11A0;N;HANGUL JUNGSEONG ARAEA-U
-11A1;N;HANGUL JUNGSEONG ARAEA-I
-11A2;N;HANGUL JUNGSEONG SSANGARAEA
-11A8;N;HANGUL JONGSEONG KIYEOK
-11A9;N;HANGUL JONGSEONG SSANGKIYEOK
-11AA;N;HANGUL JONGSEONG KIYEOK-SIOS
-11AB;N;HANGUL JONGSEONG NIEUN
-11AC;N;HANGUL JONGSEONG NIEUN-CIEUC
-11AD;N;HANGUL JONGSEONG NIEUN-HIEUH
-11AE;N;HANGUL JONGSEONG TIKEUT
-11AF;N;HANGUL JONGSEONG RIEUL
-11B0;N;HANGUL JONGSEONG RIEUL-KIYEOK
-11B1;N;HANGUL JONGSEONG RIEUL-MIEUM
-11B2;N;HANGUL JONGSEONG RIEUL-PIEUP
-11B3;N;HANGUL JONGSEONG RIEUL-SIOS
-11B4;N;HANGUL JONGSEONG RIEUL-THIEUTH
-11B5;N;HANGUL JONGSEONG RIEUL-PHIEUPH
-11B6;N;HANGUL JONGSEONG RIEUL-HIEUH
-11B7;N;HANGUL JONGSEONG MIEUM
-11B8;N;HANGUL JONGSEONG PIEUP
-11B9;N;HANGUL JONGSEONG PIEUP-SIOS
-11BA;N;HANGUL JONGSEONG SIOS
-11BB;N;HANGUL JONGSEONG SSANGSIOS
-11BC;N;HANGUL JONGSEONG IEUNG
-11BD;N;HANGUL JONGSEONG CIEUC
-11BE;N;HANGUL JONGSEONG CHIEUCH
-11BF;N;HANGUL JONGSEONG KHIEUKH
-11C0;N;HANGUL JONGSEONG THIEUTH
-11C1;N;HANGUL JONGSEONG PHIEUPH
-11C2;N;HANGUL JONGSEONG HIEUH
-11C3;N;HANGUL JONGSEONG KIYEOK-RIEUL
-11C4;N;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
-11C5;N;HANGUL JONGSEONG NIEUN-KIYEOK
-11C6;N;HANGUL JONGSEONG NIEUN-TIKEUT
-11C7;N;HANGUL JONGSEONG NIEUN-SIOS
-11C8;N;HANGUL JONGSEONG NIEUN-PANSIOS
-11C9;N;HANGUL JONGSEONG NIEUN-THIEUTH
-11CA;N;HANGUL JONGSEONG TIKEUT-KIYEOK
-11CB;N;HANGUL JONGSEONG TIKEUT-RIEUL
-11CC;N;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
-11CD;N;HANGUL JONGSEONG RIEUL-NIEUN
-11CE;N;HANGUL JONGSEONG RIEUL-TIKEUT
-11CF;N;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
-11D0;N;HANGUL JONGSEONG SSANGRIEUL
-11D1;N;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
-11D2;N;HANGUL JONGSEONG RIEUL-MIEUM-SIOS
-11D3;N;HANGUL JONGSEONG RIEUL-PIEUP-SIOS
-11D4;N;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
-11D5;N;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
-11D6;N;HANGUL JONGSEONG RIEUL-SSANGSIOS
-11D7;N;HANGUL JONGSEONG RIEUL-PANSIOS
-11D8;N;HANGUL JONGSEONG RIEUL-KHIEUKH
-11D9;N;HANGUL JONGSEONG RIEUL-YEORINHIEUH
-11DA;N;HANGUL JONGSEONG MIEUM-KIYEOK
-11DB;N;HANGUL JONGSEONG MIEUM-RIEUL
-11DC;N;HANGUL JONGSEONG MIEUM-PIEUP
-11DD;N;HANGUL JONGSEONG MIEUM-SIOS
-11DE;N;HANGUL JONGSEONG MIEUM-SSANGSIOS
-11DF;N;HANGUL JONGSEONG MIEUM-PANSIOS
-11E0;N;HANGUL JONGSEONG MIEUM-CHIEUCH
-11E1;N;HANGUL JONGSEONG MIEUM-HIEUH
-11E2;N;HANGUL JONGSEONG KAPYEOUNMIEUM
-11E3;N;HANGUL JONGSEONG PIEUP-RIEUL
-11E4;N;HANGUL JONGSEONG PIEUP-PHIEUPH
-11E5;N;HANGUL JONGSEONG PIEUP-HIEUH
-11E6;N;HANGUL JONGSEONG KAPYEOUNPIEUP
-11E7;N;HANGUL JONGSEONG SIOS-KIYEOK
-11E8;N;HANGUL JONGSEONG SIOS-TIKEUT
-11E9;N;HANGUL JONGSEONG SIOS-RIEUL
-11EA;N;HANGUL JONGSEONG SIOS-PIEUP
-11EB;N;HANGUL JONGSEONG PANSIOS
-11EC;N;HANGUL JONGSEONG IEUNG-KIYEOK
-11ED;N;HANGUL JONGSEONG IEUNG-SSANGKIYEOK
-11EE;N;HANGUL JONGSEONG SSANGIEUNG
-11EF;N;HANGUL JONGSEONG IEUNG-KHIEUKH
-11F0;N;HANGUL JONGSEONG YESIEUNG
-11F1;N;HANGUL JONGSEONG YESIEUNG-SIOS
-11F2;N;HANGUL JONGSEONG YESIEUNG-PANSIOS
-11F3;N;HANGUL JONGSEONG PHIEUPH-PIEUP
-11F4;N;HANGUL JONGSEONG KAPYEOUNPHIEUPH
-11F5;N;HANGUL JONGSEONG HIEUH-NIEUN
-11F6;N;HANGUL JONGSEONG HIEUH-RIEUL
-11F7;N;HANGUL JONGSEONG HIEUH-MIEUM
-11F8;N;HANGUL JONGSEONG HIEUH-PIEUP
-11F9;N;HANGUL JONGSEONG YEORINHIEUH
-1200;N;ETHIOPIC SYLLABLE HA
-1201;N;ETHIOPIC SYLLABLE HU
-1202;N;ETHIOPIC SYLLABLE HI
-1203;N;ETHIOPIC SYLLABLE HAA
-1204;N;ETHIOPIC SYLLABLE HEE
-1205;N;ETHIOPIC SYLLABLE HE
-1206;N;ETHIOPIC SYLLABLE HO
-1208;N;ETHIOPIC SYLLABLE LA
-1209;N;ETHIOPIC SYLLABLE LU
-120A;N;ETHIOPIC SYLLABLE LI
-120B;N;ETHIOPIC SYLLABLE LAA
-120C;N;ETHIOPIC SYLLABLE LEE
-120D;N;ETHIOPIC SYLLABLE LE
-120E;N;ETHIOPIC SYLLABLE LO
-120F;N;ETHIOPIC SYLLABLE LWA
-1210;N;ETHIOPIC SYLLABLE HHA
-1211;N;ETHIOPIC SYLLABLE HHU
-1212;N;ETHIOPIC SYLLABLE HHI
-1213;N;ETHIOPIC SYLLABLE HHAA
-1214;N;ETHIOPIC SYLLABLE HHEE
-1215;N;ETHIOPIC SYLLABLE HHE
-1216;N;ETHIOPIC SYLLABLE HHO
-1217;N;ETHIOPIC SYLLABLE HHWA
-1218;N;ETHIOPIC SYLLABLE MA
-1219;N;ETHIOPIC SYLLABLE MU
-121A;N;ETHIOPIC SYLLABLE MI
-121B;N;ETHIOPIC SYLLABLE MAA
-121C;N;ETHIOPIC SYLLABLE MEE
-121D;N;ETHIOPIC SYLLABLE ME
-121E;N;ETHIOPIC SYLLABLE MO
-121F;N;ETHIOPIC SYLLABLE MWA
-1220;N;ETHIOPIC SYLLABLE SZA
-1221;N;ETHIOPIC SYLLABLE SZU
-1222;N;ETHIOPIC SYLLABLE SZI
-1223;N;ETHIOPIC SYLLABLE SZAA
-1224;N;ETHIOPIC SYLLABLE SZEE
-1225;N;ETHIOPIC SYLLABLE SZE
-1226;N;ETHIOPIC SYLLABLE SZO
-1227;N;ETHIOPIC SYLLABLE SZWA
-1228;N;ETHIOPIC SYLLABLE RA
-1229;N;ETHIOPIC SYLLABLE RU
-122A;N;ETHIOPIC SYLLABLE RI
-122B;N;ETHIOPIC SYLLABLE RAA
-122C;N;ETHIOPIC SYLLABLE REE
-122D;N;ETHIOPIC SYLLABLE RE
-122E;N;ETHIOPIC SYLLABLE RO
-122F;N;ETHIOPIC SYLLABLE RWA
-1230;N;ETHIOPIC SYLLABLE SA
-1231;N;ETHIOPIC SYLLABLE SU
-1232;N;ETHIOPIC SYLLABLE SI
-1233;N;ETHIOPIC SYLLABLE SAA
-1234;N;ETHIOPIC SYLLABLE SEE
-1235;N;ETHIOPIC SYLLABLE SE
-1236;N;ETHIOPIC SYLLABLE SO
-1237;N;ETHIOPIC SYLLABLE SWA
-1238;N;ETHIOPIC SYLLABLE SHA
-1239;N;ETHIOPIC SYLLABLE SHU
-123A;N;ETHIOPIC SYLLABLE SHI
-123B;N;ETHIOPIC SYLLABLE SHAA
-123C;N;ETHIOPIC SYLLABLE SHEE
-123D;N;ETHIOPIC SYLLABLE SHE
-123E;N;ETHIOPIC SYLLABLE SHO
-123F;N;ETHIOPIC SYLLABLE SHWA
-1240;N;ETHIOPIC SYLLABLE QA
-1241;N;ETHIOPIC SYLLABLE QU
-1242;N;ETHIOPIC SYLLABLE QI
-1243;N;ETHIOPIC SYLLABLE QAA
-1244;N;ETHIOPIC SYLLABLE QEE
-1245;N;ETHIOPIC SYLLABLE QE
-1246;N;ETHIOPIC SYLLABLE QO
-1248;N;ETHIOPIC SYLLABLE QWA
-124A;N;ETHIOPIC SYLLABLE QWI
-124B;N;ETHIOPIC SYLLABLE QWAA
-124C;N;ETHIOPIC SYLLABLE QWEE
-124D;N;ETHIOPIC SYLLABLE QWE
-1250;N;ETHIOPIC SYLLABLE QHA
-1251;N;ETHIOPIC SYLLABLE QHU
-1252;N;ETHIOPIC SYLLABLE QHI
-1253;N;ETHIOPIC SYLLABLE QHAA
-1254;N;ETHIOPIC SYLLABLE QHEE
-1255;N;ETHIOPIC SYLLABLE QHE
-1256;N;ETHIOPIC SYLLABLE QHO
-1258;N;ETHIOPIC SYLLABLE QHWA
-125A;N;ETHIOPIC SYLLABLE QHWI
-125B;N;ETHIOPIC SYLLABLE QHWAA
-125C;N;ETHIOPIC SYLLABLE QHWEE
-125D;N;ETHIOPIC SYLLABLE QHWE
-1260;N;ETHIOPIC SYLLABLE BA
-1261;N;ETHIOPIC SYLLABLE BU
-1262;N;ETHIOPIC SYLLABLE BI
-1263;N;ETHIOPIC SYLLABLE BAA
-1264;N;ETHIOPIC SYLLABLE BEE
-1265;N;ETHIOPIC SYLLABLE BE
-1266;N;ETHIOPIC SYLLABLE BO
-1267;N;ETHIOPIC SYLLABLE BWA
-1268;N;ETHIOPIC SYLLABLE VA
-1269;N;ETHIOPIC SYLLABLE VU
-126A;N;ETHIOPIC SYLLABLE VI
-126B;N;ETHIOPIC SYLLABLE VAA
-126C;N;ETHIOPIC SYLLABLE VEE
-126D;N;ETHIOPIC SYLLABLE VE
-126E;N;ETHIOPIC SYLLABLE VO
-126F;N;ETHIOPIC SYLLABLE VWA
-1270;N;ETHIOPIC SYLLABLE TA
-1271;N;ETHIOPIC SYLLABLE TU
-1272;N;ETHIOPIC SYLLABLE TI
-1273;N;ETHIOPIC SYLLABLE TAA
-1274;N;ETHIOPIC SYLLABLE TEE
-1275;N;ETHIOPIC SYLLABLE TE
-1276;N;ETHIOPIC SYLLABLE TO
-1277;N;ETHIOPIC SYLLABLE TWA
-1278;N;ETHIOPIC SYLLABLE CA
-1279;N;ETHIOPIC SYLLABLE CU
-127A;N;ETHIOPIC SYLLABLE CI
-127B;N;ETHIOPIC SYLLABLE CAA
-127C;N;ETHIOPIC SYLLABLE CEE
-127D;N;ETHIOPIC SYLLABLE CE
-127E;N;ETHIOPIC SYLLABLE CO
-127F;N;ETHIOPIC SYLLABLE CWA
-1280;N;ETHIOPIC SYLLABLE XA
-1281;N;ETHIOPIC SYLLABLE XU
-1282;N;ETHIOPIC SYLLABLE XI
-1283;N;ETHIOPIC SYLLABLE XAA
-1284;N;ETHIOPIC SYLLABLE XEE
-1285;N;ETHIOPIC SYLLABLE XE
-1286;N;ETHIOPIC SYLLABLE XO
-1288;N;ETHIOPIC SYLLABLE XWA
-128A;N;ETHIOPIC SYLLABLE XWI
-128B;N;ETHIOPIC SYLLABLE XWAA
-128C;N;ETHIOPIC SYLLABLE XWEE
-128D;N;ETHIOPIC SYLLABLE XWE
-1290;N;ETHIOPIC SYLLABLE NA
-1291;N;ETHIOPIC SYLLABLE NU
-1292;N;ETHIOPIC SYLLABLE NI
-1293;N;ETHIOPIC SYLLABLE NAA
-1294;N;ETHIOPIC SYLLABLE NEE
-1295;N;ETHIOPIC SYLLABLE NE
-1296;N;ETHIOPIC SYLLABLE NO
-1297;N;ETHIOPIC SYLLABLE NWA
-1298;N;ETHIOPIC SYLLABLE NYA
-1299;N;ETHIOPIC SYLLABLE NYU
-129A;N;ETHIOPIC SYLLABLE NYI
-129B;N;ETHIOPIC SYLLABLE NYAA
-129C;N;ETHIOPIC SYLLABLE NYEE
-129D;N;ETHIOPIC SYLLABLE NYE
-129E;N;ETHIOPIC SYLLABLE NYO
-129F;N;ETHIOPIC SYLLABLE NYWA
-12A0;N;ETHIOPIC SYLLABLE GLOTTAL A
-12A1;N;ETHIOPIC SYLLABLE GLOTTAL U
-12A2;N;ETHIOPIC SYLLABLE GLOTTAL I
-12A3;N;ETHIOPIC SYLLABLE GLOTTAL AA
-12A4;N;ETHIOPIC SYLLABLE GLOTTAL EE
-12A5;N;ETHIOPIC SYLLABLE GLOTTAL E
-12A6;N;ETHIOPIC SYLLABLE GLOTTAL O
-12A7;N;ETHIOPIC SYLLABLE GLOTTAL WA
-12A8;N;ETHIOPIC SYLLABLE KA
-12A9;N;ETHIOPIC SYLLABLE KU
-12AA;N;ETHIOPIC SYLLABLE KI
-12AB;N;ETHIOPIC SYLLABLE KAA
-12AC;N;ETHIOPIC SYLLABLE KEE
-12AD;N;ETHIOPIC SYLLABLE KE
-12AE;N;ETHIOPIC SYLLABLE KO
-12B0;N;ETHIOPIC SYLLABLE KWA
-12B2;N;ETHIOPIC SYLLABLE KWI
-12B3;N;ETHIOPIC SYLLABLE KWAA
-12B4;N;ETHIOPIC SYLLABLE KWEE
-12B5;N;ETHIOPIC SYLLABLE KWE
-12B8;N;ETHIOPIC SYLLABLE KXA
-12B9;N;ETHIOPIC SYLLABLE KXU
-12BA;N;ETHIOPIC SYLLABLE KXI
-12BB;N;ETHIOPIC SYLLABLE KXAA
-12BC;N;ETHIOPIC SYLLABLE KXEE
-12BD;N;ETHIOPIC SYLLABLE KXE
-12BE;N;ETHIOPIC SYLLABLE KXO
-12C0;N;ETHIOPIC SYLLABLE KXWA
-12C2;N;ETHIOPIC SYLLABLE KXWI
-12C3;N;ETHIOPIC SYLLABLE KXWAA
-12C4;N;ETHIOPIC SYLLABLE KXWEE
-12C5;N;ETHIOPIC SYLLABLE KXWE
-12C8;N;ETHIOPIC SYLLABLE WA
-12C9;N;ETHIOPIC SYLLABLE WU
-12CA;N;ETHIOPIC SYLLABLE WI
-12CB;N;ETHIOPIC SYLLABLE WAA
-12CC;N;ETHIOPIC SYLLABLE WEE
-12CD;N;ETHIOPIC SYLLABLE WE
-12CE;N;ETHIOPIC SYLLABLE WO
-12D0;N;ETHIOPIC SYLLABLE PHARYNGEAL A
-12D1;N;ETHIOPIC SYLLABLE PHARYNGEAL U
-12D2;N;ETHIOPIC SYLLABLE PHARYNGEAL I
-12D3;N;ETHIOPIC SYLLABLE PHARYNGEAL AA
-12D4;N;ETHIOPIC SYLLABLE PHARYNGEAL EE
-12D5;N;ETHIOPIC SYLLABLE PHARYNGEAL E
-12D6;N;ETHIOPIC SYLLABLE PHARYNGEAL O
-12D8;N;ETHIOPIC SYLLABLE ZA
-12D9;N;ETHIOPIC SYLLABLE ZU
-12DA;N;ETHIOPIC SYLLABLE ZI
-12DB;N;ETHIOPIC SYLLABLE ZAA
-12DC;N;ETHIOPIC SYLLABLE ZEE
-12DD;N;ETHIOPIC SYLLABLE ZE
-12DE;N;ETHIOPIC SYLLABLE ZO
-12DF;N;ETHIOPIC SYLLABLE ZWA
-12E0;N;ETHIOPIC SYLLABLE ZHA
-12E1;N;ETHIOPIC SYLLABLE ZHU
-12E2;N;ETHIOPIC SYLLABLE ZHI
-12E3;N;ETHIOPIC SYLLABLE ZHAA
-12E4;N;ETHIOPIC SYLLABLE ZHEE
-12E5;N;ETHIOPIC SYLLABLE ZHE
-12E6;N;ETHIOPIC SYLLABLE ZHO
-12E7;N;ETHIOPIC SYLLABLE ZHWA
-12E8;N;ETHIOPIC SYLLABLE YA
-12E9;N;ETHIOPIC SYLLABLE YU
-12EA;N;ETHIOPIC SYLLABLE YI
-12EB;N;ETHIOPIC SYLLABLE YAA
-12EC;N;ETHIOPIC SYLLABLE YEE
-12ED;N;ETHIOPIC SYLLABLE YE
-12EE;N;ETHIOPIC SYLLABLE YO
-12F0;N;ETHIOPIC SYLLABLE DA
-12F1;N;ETHIOPIC SYLLABLE DU
-12F2;N;ETHIOPIC SYLLABLE DI
-12F3;N;ETHIOPIC SYLLABLE DAA
-12F4;N;ETHIOPIC SYLLABLE DEE
-12F5;N;ETHIOPIC SYLLABLE DE
-12F6;N;ETHIOPIC SYLLABLE DO
-12F7;N;ETHIOPIC SYLLABLE DWA
-12F8;N;ETHIOPIC SYLLABLE DDA
-12F9;N;ETHIOPIC SYLLABLE DDU
-12FA;N;ETHIOPIC SYLLABLE DDI
-12FB;N;ETHIOPIC SYLLABLE DDAA
-12FC;N;ETHIOPIC SYLLABLE DDEE
-12FD;N;ETHIOPIC SYLLABLE DDE
-12FE;N;ETHIOPIC SYLLABLE DDO
-12FF;N;ETHIOPIC SYLLABLE DDWA
-1300;N;ETHIOPIC SYLLABLE JA
-1301;N;ETHIOPIC SYLLABLE JU
-1302;N;ETHIOPIC SYLLABLE JI
-1303;N;ETHIOPIC SYLLABLE JAA
-1304;N;ETHIOPIC SYLLABLE JEE
-1305;N;ETHIOPIC SYLLABLE JE
-1306;N;ETHIOPIC SYLLABLE JO
-1307;N;ETHIOPIC SYLLABLE JWA
-1308;N;ETHIOPIC SYLLABLE GA
-1309;N;ETHIOPIC SYLLABLE GU
-130A;N;ETHIOPIC SYLLABLE GI
-130B;N;ETHIOPIC SYLLABLE GAA
-130C;N;ETHIOPIC SYLLABLE GEE
-130D;N;ETHIOPIC SYLLABLE GE
-130E;N;ETHIOPIC SYLLABLE GO
-1310;N;ETHIOPIC SYLLABLE GWA
-1312;N;ETHIOPIC SYLLABLE GWI
-1313;N;ETHIOPIC SYLLABLE GWAA
-1314;N;ETHIOPIC SYLLABLE GWEE
-1315;N;ETHIOPIC SYLLABLE GWE
-1318;N;ETHIOPIC SYLLABLE GGA
-1319;N;ETHIOPIC SYLLABLE GGU
-131A;N;ETHIOPIC SYLLABLE GGI
-131B;N;ETHIOPIC SYLLABLE GGAA
-131C;N;ETHIOPIC SYLLABLE GGEE
-131D;N;ETHIOPIC SYLLABLE GGE
-131E;N;ETHIOPIC SYLLABLE GGO
-1320;N;ETHIOPIC SYLLABLE THA
-1321;N;ETHIOPIC SYLLABLE THU
-1322;N;ETHIOPIC SYLLABLE THI
-1323;N;ETHIOPIC SYLLABLE THAA
-1324;N;ETHIOPIC SYLLABLE THEE
-1325;N;ETHIOPIC SYLLABLE THE
-1326;N;ETHIOPIC SYLLABLE THO
-1327;N;ETHIOPIC SYLLABLE THWA
-1328;N;ETHIOPIC SYLLABLE CHA
-1329;N;ETHIOPIC SYLLABLE CHU
-132A;N;ETHIOPIC SYLLABLE CHI
-132B;N;ETHIOPIC SYLLABLE CHAA
-132C;N;ETHIOPIC SYLLABLE CHEE
-132D;N;ETHIOPIC SYLLABLE CHE
-132E;N;ETHIOPIC SYLLABLE CHO
-132F;N;ETHIOPIC SYLLABLE CHWA
-1330;N;ETHIOPIC SYLLABLE PHA
-1331;N;ETHIOPIC SYLLABLE PHU
-1332;N;ETHIOPIC SYLLABLE PHI
-1333;N;ETHIOPIC SYLLABLE PHAA
-1334;N;ETHIOPIC SYLLABLE PHEE
-1335;N;ETHIOPIC SYLLABLE PHE
-1336;N;ETHIOPIC SYLLABLE PHO
-1337;N;ETHIOPIC SYLLABLE PHWA
-1338;N;ETHIOPIC SYLLABLE TSA
-1339;N;ETHIOPIC SYLLABLE TSU
-133A;N;ETHIOPIC SYLLABLE TSI
-133B;N;ETHIOPIC SYLLABLE TSAA
-133C;N;ETHIOPIC SYLLABLE TSEE
-133D;N;ETHIOPIC SYLLABLE TSE
-133E;N;ETHIOPIC SYLLABLE TSO
-133F;N;ETHIOPIC SYLLABLE TSWA
-1340;N;ETHIOPIC SYLLABLE TZA
-1341;N;ETHIOPIC SYLLABLE TZU
-1342;N;ETHIOPIC SYLLABLE TZI
-1343;N;ETHIOPIC SYLLABLE TZAA
-1344;N;ETHIOPIC SYLLABLE TZEE
-1345;N;ETHIOPIC SYLLABLE TZE
-1346;N;ETHIOPIC SYLLABLE TZO
-1348;N;ETHIOPIC SYLLABLE FA
-1349;N;ETHIOPIC SYLLABLE FU
-134A;N;ETHIOPIC SYLLABLE FI
-134B;N;ETHIOPIC SYLLABLE FAA
-134C;N;ETHIOPIC SYLLABLE FEE
-134D;N;ETHIOPIC SYLLABLE FE
-134E;N;ETHIOPIC SYLLABLE FO
-134F;N;ETHIOPIC SYLLABLE FWA
-1350;N;ETHIOPIC SYLLABLE PA
-1351;N;ETHIOPIC SYLLABLE PU
-1352;N;ETHIOPIC SYLLABLE PI
-1353;N;ETHIOPIC SYLLABLE PAA
-1354;N;ETHIOPIC SYLLABLE PEE
-1355;N;ETHIOPIC SYLLABLE PE
-1356;N;ETHIOPIC SYLLABLE PO
-1357;N;ETHIOPIC SYLLABLE PWA
-1358;N;ETHIOPIC SYLLABLE RYA
-1359;N;ETHIOPIC SYLLABLE MYA
-135A;N;ETHIOPIC SYLLABLE FYA
-1361;N;ETHIOPIC WORDSPACE
-1362;N;ETHIOPIC FULL STOP
-1363;N;ETHIOPIC COMMA
-1364;N;ETHIOPIC SEMICOLON
-1365;N;ETHIOPIC COLON
-1366;N;ETHIOPIC PREFACE COLON
-1367;N;ETHIOPIC QUESTION MARK
-1368;N;ETHIOPIC PARAGRAPH SEPARATOR
-1369;N;ETHIOPIC DIGIT ONE
-136A;N;ETHIOPIC DIGIT TWO
-136B;N;ETHIOPIC DIGIT THREE
-136C;N;ETHIOPIC DIGIT FOUR
-136D;N;ETHIOPIC DIGIT FIVE
-136E;N;ETHIOPIC DIGIT SIX
-136F;N;ETHIOPIC DIGIT SEVEN
-1370;N;ETHIOPIC DIGIT EIGHT
-1371;N;ETHIOPIC DIGIT NINE
-1372;N;ETHIOPIC NUMBER TEN
-1373;N;ETHIOPIC NUMBER TWENTY
-1374;N;ETHIOPIC NUMBER THIRTY
-1375;N;ETHIOPIC NUMBER FORTY
-1376;N;ETHIOPIC NUMBER FIFTY
-1377;N;ETHIOPIC NUMBER SIXTY
-1378;N;ETHIOPIC NUMBER SEVENTY
-1379;N;ETHIOPIC NUMBER EIGHTY
-137A;N;ETHIOPIC NUMBER NINETY
-137B;N;ETHIOPIC NUMBER HUNDRED
-137C;N;ETHIOPIC NUMBER TEN THOUSAND
-13A0;N;CHEROKEE LETTER A
-13A1;N;CHEROKEE LETTER E
-13A2;N;CHEROKEE LETTER I
-13A3;N;CHEROKEE LETTER O
-13A4;N;CHEROKEE LETTER U
-13A5;N;CHEROKEE LETTER V
-13A6;N;CHEROKEE LETTER GA
-13A7;N;CHEROKEE LETTER KA
-13A8;N;CHEROKEE LETTER GE
-13A9;N;CHEROKEE LETTER GI
-13AA;N;CHEROKEE LETTER GO
-13AB;N;CHEROKEE LETTER GU
-13AC;N;CHEROKEE LETTER GV
-13AD;N;CHEROKEE LETTER HA
-13AE;N;CHEROKEE LETTER HE
-13AF;N;CHEROKEE LETTER HI
-13B0;N;CHEROKEE LETTER HO
-13B1;N;CHEROKEE LETTER HU
-13B2;N;CHEROKEE LETTER HV
-13B3;N;CHEROKEE LETTER LA
-13B4;N;CHEROKEE LETTER LE
-13B5;N;CHEROKEE LETTER LI
-13B6;N;CHEROKEE LETTER LO
-13B7;N;CHEROKEE LETTER LU
-13B8;N;CHEROKEE LETTER LV
-13B9;N;CHEROKEE LETTER MA
-13BA;N;CHEROKEE LETTER ME
-13BB;N;CHEROKEE LETTER MI
-13BC;N;CHEROKEE LETTER MO
-13BD;N;CHEROKEE LETTER MU
-13BE;N;CHEROKEE LETTER NA
-13BF;N;CHEROKEE LETTER HNA
-13C0;N;CHEROKEE LETTER NAH
-13C1;N;CHEROKEE LETTER NE
-13C2;N;CHEROKEE LETTER NI
-13C3;N;CHEROKEE LETTER NO
-13C4;N;CHEROKEE LETTER NU
-13C5;N;CHEROKEE LETTER NV
-13C6;N;CHEROKEE LETTER QUA
-13C7;N;CHEROKEE LETTER QUE
-13C8;N;CHEROKEE LETTER QUI
-13C9;N;CHEROKEE LETTER QUO
-13CA;N;CHEROKEE LETTER QUU
-13CB;N;CHEROKEE LETTER QUV
-13CC;N;CHEROKEE LETTER SA
-13CD;N;CHEROKEE LETTER S
-13CE;N;CHEROKEE LETTER SE
-13CF;N;CHEROKEE LETTER SI
-13D0;N;CHEROKEE LETTER SO
-13D1;N;CHEROKEE LETTER SU
-13D2;N;CHEROKEE LETTER SV
-13D3;N;CHEROKEE LETTER DA
-13D4;N;CHEROKEE LETTER TA
-13D5;N;CHEROKEE LETTER DE
-13D6;N;CHEROKEE LETTER TE
-13D7;N;CHEROKEE LETTER DI
-13D8;N;CHEROKEE LETTER TI
-13D9;N;CHEROKEE LETTER DO
-13DA;N;CHEROKEE LETTER DU
-13DB;N;CHEROKEE LETTER DV
-13DC;N;CHEROKEE LETTER DLA
-13DD;N;CHEROKEE LETTER TLA
-13DE;N;CHEROKEE LETTER TLE
-13DF;N;CHEROKEE LETTER TLI
-13E0;N;CHEROKEE LETTER TLO
-13E1;N;CHEROKEE LETTER TLU
-13E2;N;CHEROKEE LETTER TLV
-13E3;N;CHEROKEE LETTER TSA
-13E4;N;CHEROKEE LETTER TSE
-13E5;N;CHEROKEE LETTER TSI
-13E6;N;CHEROKEE LETTER TSO
-13E7;N;CHEROKEE LETTER TSU
-13E8;N;CHEROKEE LETTER TSV
-13E9;N;CHEROKEE LETTER WA
-13EA;N;CHEROKEE LETTER WE
-13EB;N;CHEROKEE LETTER WI
-13EC;N;CHEROKEE LETTER WO
-13ED;N;CHEROKEE LETTER WU
-13EE;N;CHEROKEE LETTER WV
-13EF;N;CHEROKEE LETTER YA
-13F0;N;CHEROKEE LETTER YE
-13F1;N;CHEROKEE LETTER YI
-13F2;N;CHEROKEE LETTER YO
-13F3;N;CHEROKEE LETTER YU
-13F4;N;CHEROKEE LETTER YV
-1401;N;CANADIAN SYLLABICS E
-1402;N;CANADIAN SYLLABICS AAI
-1403;N;CANADIAN SYLLABICS I
-1404;N;CANADIAN SYLLABICS II
-1405;N;CANADIAN SYLLABICS O
-1406;N;CANADIAN SYLLABICS OO
-1407;N;CANADIAN SYLLABICS Y-CREE OO
-1408;N;CANADIAN SYLLABICS CARRIER EE
-1409;N;CANADIAN SYLLABICS CARRIER I
-140A;N;CANADIAN SYLLABICS A
-140B;N;CANADIAN SYLLABICS AA
-140C;N;CANADIAN SYLLABICS WE
-140D;N;CANADIAN SYLLABICS WEST-CREE WE
-140E;N;CANADIAN SYLLABICS WI
-140F;N;CANADIAN SYLLABICS WEST-CREE WI
-1410;N;CANADIAN SYLLABICS WII
-1411;N;CANADIAN SYLLABICS WEST-CREE WII
-1412;N;CANADIAN SYLLABICS WO
-1413;N;CANADIAN SYLLABICS WEST-CREE WO
-1414;N;CANADIAN SYLLABICS WOO
-1415;N;CANADIAN SYLLABICS WEST-CREE WOO
-1416;N;CANADIAN SYLLABICS NASKAPI WOO
-1417;N;CANADIAN SYLLABICS WA
-1418;N;CANADIAN SYLLABICS WEST-CREE WA
-1419;N;CANADIAN SYLLABICS WAA
-141A;N;CANADIAN SYLLABICS WEST-CREE WAA
-141B;N;CANADIAN SYLLABICS NASKAPI WAA
-141C;N;CANADIAN SYLLABICS AI
-141D;N;CANADIAN SYLLABICS Y-CREE W
-141E;N;CANADIAN SYLLABICS GLOTTAL STOP
-141F;N;CANADIAN SYLLABICS FINAL ACUTE
-1420;N;CANADIAN SYLLABICS FINAL GRAVE
-1421;N;CANADIAN SYLLABICS FINAL BOTTOM HALF RING
-1422;N;CANADIAN SYLLABICS FINAL TOP HALF RING
-1423;N;CANADIAN SYLLABICS FINAL RIGHT HALF RING
-1424;N;CANADIAN SYLLABICS FINAL RING
-1425;N;CANADIAN SYLLABICS FINAL DOUBLE ACUTE
-1426;N;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
-1427;N;CANADIAN SYLLABICS FINAL MIDDLE DOT
-1428;N;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
-1429;N;CANADIAN SYLLABICS FINAL PLUS
-142A;N;CANADIAN SYLLABICS FINAL DOWN TACK
-142B;N;CANADIAN SYLLABICS EN
-142C;N;CANADIAN SYLLABICS IN
-142D;N;CANADIAN SYLLABICS ON
-142E;N;CANADIAN SYLLABICS AN
-142F;N;CANADIAN SYLLABICS PE
-1430;N;CANADIAN SYLLABICS PAAI
-1431;N;CANADIAN SYLLABICS PI
-1432;N;CANADIAN SYLLABICS PII
-1433;N;CANADIAN SYLLABICS PO
-1434;N;CANADIAN SYLLABICS POO
-1435;N;CANADIAN SYLLABICS Y-CREE POO
-1436;N;CANADIAN SYLLABICS CARRIER HEE
-1437;N;CANADIAN SYLLABICS CARRIER HI
-1438;N;CANADIAN SYLLABICS PA
-1439;N;CANADIAN SYLLABICS PAA
-143A;N;CANADIAN SYLLABICS PWE
-143B;N;CANADIAN SYLLABICS WEST-CREE PWE
-143C;N;CANADIAN SYLLABICS PWI
-143D;N;CANADIAN SYLLABICS WEST-CREE PWI
-143E;N;CANADIAN SYLLABICS PWII
-143F;N;CANADIAN SYLLABICS WEST-CREE PWII
-1440;N;CANADIAN SYLLABICS PWO
-1441;N;CANADIAN SYLLABICS WEST-CREE PWO
-1442;N;CANADIAN SYLLABICS PWOO
-1443;N;CANADIAN SYLLABICS WEST-CREE PWOO
-1444;N;CANADIAN SYLLABICS PWA
-1445;N;CANADIAN SYLLABICS WEST-CREE PWA
-1446;N;CANADIAN SYLLABICS PWAA
-1447;N;CANADIAN SYLLABICS WEST-CREE PWAA
-1448;N;CANADIAN SYLLABICS Y-CREE PWAA
-1449;N;CANADIAN SYLLABICS P
-144A;N;CANADIAN SYLLABICS WEST-CREE P
-144B;N;CANADIAN SYLLABICS CARRIER H
-144C;N;CANADIAN SYLLABICS TE
-144D;N;CANADIAN SYLLABICS TAAI
-144E;N;CANADIAN SYLLABICS TI
-144F;N;CANADIAN SYLLABICS TII
-1450;N;CANADIAN SYLLABICS TO
-1451;N;CANADIAN SYLLABICS TOO
-1452;N;CANADIAN SYLLABICS Y-CREE TOO
-1453;N;CANADIAN SYLLABICS CARRIER DEE
-1454;N;CANADIAN SYLLABICS CARRIER DI
-1455;N;CANADIAN SYLLABICS TA
-1456;N;CANADIAN SYLLABICS TAA
-1457;N;CANADIAN SYLLABICS TWE
-1458;N;CANADIAN SYLLABICS WEST-CREE TWE
-1459;N;CANADIAN SYLLABICS TWI
-145A;N;CANADIAN SYLLABICS WEST-CREE TWI
-145B;N;CANADIAN SYLLABICS TWII
-145C;N;CANADIAN SYLLABICS WEST-CREE TWII
-145D;N;CANADIAN SYLLABICS TWO
-145E;N;CANADIAN SYLLABICS WEST-CREE TWO
-145F;N;CANADIAN SYLLABICS TWOO
-1460;N;CANADIAN SYLLABICS WEST-CREE TWOO
-1461;N;CANADIAN SYLLABICS TWA
-1462;N;CANADIAN SYLLABICS WEST-CREE TWA
-1463;N;CANADIAN SYLLABICS TWAA
-1464;N;CANADIAN SYLLABICS WEST-CREE TWAA
-1465;N;CANADIAN SYLLABICS NASKAPI TWAA
-1466;N;CANADIAN SYLLABICS T
-1467;N;CANADIAN SYLLABICS TTE
-1468;N;CANADIAN SYLLABICS TTI
-1469;N;CANADIAN SYLLABICS TTO
-146A;N;CANADIAN SYLLABICS TTA
-146B;N;CANADIAN SYLLABICS KE
-146C;N;CANADIAN SYLLABICS KAAI
-146D;N;CANADIAN SYLLABICS KI
-146E;N;CANADIAN SYLLABICS KII
-146F;N;CANADIAN SYLLABICS KO
-1470;N;CANADIAN SYLLABICS KOO
-1471;N;CANADIAN SYLLABICS Y-CREE KOO
-1472;N;CANADIAN SYLLABICS KA
-1473;N;CANADIAN SYLLABICS KAA
-1474;N;CANADIAN SYLLABICS KWE
-1475;N;CANADIAN SYLLABICS WEST-CREE KWE
-1476;N;CANADIAN SYLLABICS KWI
-1477;N;CANADIAN SYLLABICS WEST-CREE KWI
-1478;N;CANADIAN SYLLABICS KWII
-1479;N;CANADIAN SYLLABICS WEST-CREE KWII
-147A;N;CANADIAN SYLLABICS KWO
-147B;N;CANADIAN SYLLABICS WEST-CREE KWO
-147C;N;CANADIAN SYLLABICS KWOO
-147D;N;CANADIAN SYLLABICS WEST-CREE KWOO
-147E;N;CANADIAN SYLLABICS KWA
-147F;N;CANADIAN SYLLABICS WEST-CREE KWA
-1480;N;CANADIAN SYLLABICS KWAA
-1481;N;CANADIAN SYLLABICS WEST-CREE KWAA
-1482;N;CANADIAN SYLLABICS NASKAPI KWAA
-1483;N;CANADIAN SYLLABICS K
-1484;N;CANADIAN SYLLABICS KW
-1485;N;CANADIAN SYLLABICS SOUTH-SLAVEY KEH
-1486;N;CANADIAN SYLLABICS SOUTH-SLAVEY KIH
-1487;N;CANADIAN SYLLABICS SOUTH-SLAVEY KOH
-1488;N;CANADIAN SYLLABICS SOUTH-SLAVEY KAH
-1489;N;CANADIAN SYLLABICS CE
-148A;N;CANADIAN SYLLABICS CAAI
-148B;N;CANADIAN SYLLABICS CI
-148C;N;CANADIAN SYLLABICS CII
-148D;N;CANADIAN SYLLABICS CO
-148E;N;CANADIAN SYLLABICS COO
-148F;N;CANADIAN SYLLABICS Y-CREE COO
-1490;N;CANADIAN SYLLABICS CA
-1491;N;CANADIAN SYLLABICS CAA
-1492;N;CANADIAN SYLLABICS CWE
-1493;N;CANADIAN SYLLABICS WEST-CREE CWE
-1494;N;CANADIAN SYLLABICS CWI
-1495;N;CANADIAN SYLLABICS WEST-CREE CWI
-1496;N;CANADIAN SYLLABICS CWII
-1497;N;CANADIAN SYLLABICS WEST-CREE CWII
-1498;N;CANADIAN SYLLABICS CWO
-1499;N;CANADIAN SYLLABICS WEST-CREE CWO
-149A;N;CANADIAN SYLLABICS CWOO
-149B;N;CANADIAN SYLLABICS WEST-CREE CWOO
-149C;N;CANADIAN SYLLABICS CWA
-149D;N;CANADIAN SYLLABICS WEST-CREE CWA
-149E;N;CANADIAN SYLLABICS CWAA
-149F;N;CANADIAN SYLLABICS WEST-CREE CWAA
-14A0;N;CANADIAN SYLLABICS NASKAPI CWAA
-14A1;N;CANADIAN SYLLABICS C
-14A2;N;CANADIAN SYLLABICS SAYISI TH
-14A3;N;CANADIAN SYLLABICS ME
-14A4;N;CANADIAN SYLLABICS MAAI
-14A5;N;CANADIAN SYLLABICS MI
-14A6;N;CANADIAN SYLLABICS MII
-14A7;N;CANADIAN SYLLABICS MO
-14A8;N;CANADIAN SYLLABICS MOO
-14A9;N;CANADIAN SYLLABICS Y-CREE MOO
-14AA;N;CANADIAN SYLLABICS MA
-14AB;N;CANADIAN SYLLABICS MAA
-14AC;N;CANADIAN SYLLABICS MWE
-14AD;N;CANADIAN SYLLABICS WEST-CREE MWE
-14AE;N;CANADIAN SYLLABICS MWI
-14AF;N;CANADIAN SYLLABICS WEST-CREE MWI
-14B0;N;CANADIAN SYLLABICS MWII
-14B1;N;CANADIAN SYLLABICS WEST-CREE MWII
-14B2;N;CANADIAN SYLLABICS MWO
-14B3;N;CANADIAN SYLLABICS WEST-CREE MWO
-14B4;N;CANADIAN SYLLABICS MWOO
-14B5;N;CANADIAN SYLLABICS WEST-CREE MWOO
-14B6;N;CANADIAN SYLLABICS MWA
-14B7;N;CANADIAN SYLLABICS WEST-CREE MWA
-14B8;N;CANADIAN SYLLABICS MWAA
-14B9;N;CANADIAN SYLLABICS WEST-CREE MWAA
-14BA;N;CANADIAN SYLLABICS NASKAPI MWAA
-14BB;N;CANADIAN SYLLABICS M
-14BC;N;CANADIAN SYLLABICS WEST-CREE M
-14BD;N;CANADIAN SYLLABICS MH
-14BE;N;CANADIAN SYLLABICS ATHAPASCAN M
-14BF;N;CANADIAN SYLLABICS SAYISI M
-14C0;N;CANADIAN SYLLABICS NE
-14C1;N;CANADIAN SYLLABICS NAAI
-14C2;N;CANADIAN SYLLABICS NI
-14C3;N;CANADIAN SYLLABICS NII
-14C4;N;CANADIAN SYLLABICS NO
-14C5;N;CANADIAN SYLLABICS NOO
-14C6;N;CANADIAN SYLLABICS Y-CREE NOO
-14C7;N;CANADIAN SYLLABICS NA
-14C8;N;CANADIAN SYLLABICS NAA
-14C9;N;CANADIAN SYLLABICS NWE
-14CA;N;CANADIAN SYLLABICS WEST-CREE NWE
-14CB;N;CANADIAN SYLLABICS NWA
-14CC;N;CANADIAN SYLLABICS WEST-CREE NWA
-14CD;N;CANADIAN SYLLABICS NWAA
-14CE;N;CANADIAN SYLLABICS WEST-CREE NWAA
-14CF;N;CANADIAN SYLLABICS NASKAPI NWAA
-14D0;N;CANADIAN SYLLABICS N
-14D1;N;CANADIAN SYLLABICS CARRIER NG
-14D2;N;CANADIAN SYLLABICS NH
-14D3;N;CANADIAN SYLLABICS LE
-14D4;N;CANADIAN SYLLABICS LAAI
-14D5;N;CANADIAN SYLLABICS LI
-14D6;N;CANADIAN SYLLABICS LII
-14D7;N;CANADIAN SYLLABICS LO
-14D8;N;CANADIAN SYLLABICS LOO
-14D9;N;CANADIAN SYLLABICS Y-CREE LOO
-14DA;N;CANADIAN SYLLABICS LA
-14DB;N;CANADIAN SYLLABICS LAA
-14DC;N;CANADIAN SYLLABICS LWE
-14DD;N;CANADIAN SYLLABICS WEST-CREE LWE
-14DE;N;CANADIAN SYLLABICS LWI
-14DF;N;CANADIAN SYLLABICS WEST-CREE LWI
-14E0;N;CANADIAN SYLLABICS LWII
-14E1;N;CANADIAN SYLLABICS WEST-CREE LWII
-14E2;N;CANADIAN SYLLABICS LWO
-14E3;N;CANADIAN SYLLABICS WEST-CREE LWO
-14E4;N;CANADIAN SYLLABICS LWOO
-14E5;N;CANADIAN SYLLABICS WEST-CREE LWOO
-14E6;N;CANADIAN SYLLABICS LWA
-14E7;N;CANADIAN SYLLABICS WEST-CREE LWA
-14E8;N;CANADIAN SYLLABICS LWAA
-14E9;N;CANADIAN SYLLABICS WEST-CREE LWAA
-14EA;N;CANADIAN SYLLABICS L
-14EB;N;CANADIAN SYLLABICS WEST-CREE L
-14EC;N;CANADIAN SYLLABICS MEDIAL L
-14ED;N;CANADIAN SYLLABICS SE
-14EE;N;CANADIAN SYLLABICS SAAI
-14EF;N;CANADIAN SYLLABICS SI
-14F0;N;CANADIAN SYLLABICS SII
-14F1;N;CANADIAN SYLLABICS SO
-14F2;N;CANADIAN SYLLABICS SOO
-14F3;N;CANADIAN SYLLABICS Y-CREE SOO
-14F4;N;CANADIAN SYLLABICS SA
-14F5;N;CANADIAN SYLLABICS SAA
-14F6;N;CANADIAN SYLLABICS SWE
-14F7;N;CANADIAN SYLLABICS WEST-CREE SWE
-14F8;N;CANADIAN SYLLABICS SWI
-14F9;N;CANADIAN SYLLABICS WEST-CREE SWI
-14FA;N;CANADIAN SYLLABICS SWII
-14FB;N;CANADIAN SYLLABICS WEST-CREE SWII
-14FC;N;CANADIAN SYLLABICS SWO
-14FD;N;CANADIAN SYLLABICS WEST-CREE SWO
-14FE;N;CANADIAN SYLLABICS SWOO
-14FF;N;CANADIAN SYLLABICS WEST-CREE SWOO
-1500;N;CANADIAN SYLLABICS SWA
-1501;N;CANADIAN SYLLABICS WEST-CREE SWA
-1502;N;CANADIAN SYLLABICS SWAA
-1503;N;CANADIAN SYLLABICS WEST-CREE SWAA
-1504;N;CANADIAN SYLLABICS NASKAPI SWAA
-1505;N;CANADIAN SYLLABICS S
-1506;N;CANADIAN SYLLABICS ATHAPASCAN S
-1507;N;CANADIAN SYLLABICS SW
-1508;N;CANADIAN SYLLABICS BLACKFOOT S
-1509;N;CANADIAN SYLLABICS MOOSE-CREE SK
-150A;N;CANADIAN SYLLABICS NASKAPI SKW
-150B;N;CANADIAN SYLLABICS NASKAPI S-W
-150C;N;CANADIAN SYLLABICS NASKAPI SPWA
-150D;N;CANADIAN SYLLABICS NASKAPI STWA
-150E;N;CANADIAN SYLLABICS NASKAPI SKWA
-150F;N;CANADIAN SYLLABICS NASKAPI SCWA
-1510;N;CANADIAN SYLLABICS SHE
-1511;N;CANADIAN SYLLABICS SHI
-1512;N;CANADIAN SYLLABICS SHII
-1513;N;CANADIAN SYLLABICS SHO
-1514;N;CANADIAN SYLLABICS SHOO
-1515;N;CANADIAN SYLLABICS SHA
-1516;N;CANADIAN SYLLABICS SHAA
-1517;N;CANADIAN SYLLABICS SHWE
-1518;N;CANADIAN SYLLABICS WEST-CREE SHWE
-1519;N;CANADIAN SYLLABICS SHWI
-151A;N;CANADIAN SYLLABICS WEST-CREE SHWI
-151B;N;CANADIAN SYLLABICS SHWII
-151C;N;CANADIAN SYLLABICS WEST-CREE SHWII
-151D;N;CANADIAN SYLLABICS SHWO
-151E;N;CANADIAN SYLLABICS WEST-CREE SHWO
-151F;N;CANADIAN SYLLABICS SHWOO
-1520;N;CANADIAN SYLLABICS WEST-CREE SHWOO
-1521;N;CANADIAN SYLLABICS SHWA
-1522;N;CANADIAN SYLLABICS WEST-CREE SHWA
-1523;N;CANADIAN SYLLABICS SHWAA
-1524;N;CANADIAN SYLLABICS WEST-CREE SHWAA
-1525;N;CANADIAN SYLLABICS SH
-1526;N;CANADIAN SYLLABICS YE
-1527;N;CANADIAN SYLLABICS YAAI
-1528;N;CANADIAN SYLLABICS YI
-1529;N;CANADIAN SYLLABICS YII
-152A;N;CANADIAN SYLLABICS YO
-152B;N;CANADIAN SYLLABICS YOO
-152C;N;CANADIAN SYLLABICS Y-CREE YOO
-152D;N;CANADIAN SYLLABICS YA
-152E;N;CANADIAN SYLLABICS YAA
-152F;N;CANADIAN SYLLABICS YWE
-1530;N;CANADIAN SYLLABICS WEST-CREE YWE
-1531;N;CANADIAN SYLLABICS YWI
-1532;N;CANADIAN SYLLABICS WEST-CREE YWI
-1533;N;CANADIAN SYLLABICS YWII
-1534;N;CANADIAN SYLLABICS WEST-CREE YWII
-1535;N;CANADIAN SYLLABICS YWO
-1536;N;CANADIAN SYLLABICS WEST-CREE YWO
-1537;N;CANADIAN SYLLABICS YWOO
-1538;N;CANADIAN SYLLABICS WEST-CREE YWOO
-1539;N;CANADIAN SYLLABICS YWA
-153A;N;CANADIAN SYLLABICS WEST-CREE YWA
-153B;N;CANADIAN SYLLABICS YWAA
-153C;N;CANADIAN SYLLABICS WEST-CREE YWAA
-153D;N;CANADIAN SYLLABICS NASKAPI YWAA
-153E;N;CANADIAN SYLLABICS Y
-153F;N;CANADIAN SYLLABICS BIBLE-CREE Y
-1540;N;CANADIAN SYLLABICS WEST-CREE Y
-1541;N;CANADIAN SYLLABICS SAYISI YI
-1542;N;CANADIAN SYLLABICS RE
-1543;N;CANADIAN SYLLABICS R-CREE RE
-1544;N;CANADIAN SYLLABICS WEST-CREE LE
-1545;N;CANADIAN SYLLABICS RAAI
-1546;N;CANADIAN SYLLABICS RI
-1547;N;CANADIAN SYLLABICS RII
-1548;N;CANADIAN SYLLABICS RO
-1549;N;CANADIAN SYLLABICS ROO
-154A;N;CANADIAN SYLLABICS WEST-CREE LO
-154B;N;CANADIAN SYLLABICS RA
-154C;N;CANADIAN SYLLABICS RAA
-154D;N;CANADIAN SYLLABICS WEST-CREE LA
-154E;N;CANADIAN SYLLABICS RWAA
-154F;N;CANADIAN SYLLABICS WEST-CREE RWAA
-1550;N;CANADIAN SYLLABICS R
-1551;N;CANADIAN SYLLABICS WEST-CREE R
-1552;N;CANADIAN SYLLABICS MEDIAL R
-1553;N;CANADIAN SYLLABICS FE
-1554;N;CANADIAN SYLLABICS FAAI
-1555;N;CANADIAN SYLLABICS FI
-1556;N;CANADIAN SYLLABICS FII
-1557;N;CANADIAN SYLLABICS FO
-1558;N;CANADIAN SYLLABICS FOO
-1559;N;CANADIAN SYLLABICS FA
-155A;N;CANADIAN SYLLABICS FAA
-155B;N;CANADIAN SYLLABICS FWAA
-155C;N;CANADIAN SYLLABICS WEST-CREE FWAA
-155D;N;CANADIAN SYLLABICS F
-155E;N;CANADIAN SYLLABICS THE
-155F;N;CANADIAN SYLLABICS N-CREE THE
-1560;N;CANADIAN SYLLABICS THI
-1561;N;CANADIAN SYLLABICS N-CREE THI
-1562;N;CANADIAN SYLLABICS THII
-1563;N;CANADIAN SYLLABICS N-CREE THII
-1564;N;CANADIAN SYLLABICS THO
-1565;N;CANADIAN SYLLABICS THOO
-1566;N;CANADIAN SYLLABICS THA
-1567;N;CANADIAN SYLLABICS THAA
-1568;N;CANADIAN SYLLABICS THWAA
-1569;N;CANADIAN SYLLABICS WEST-CREE THWAA
-156A;N;CANADIAN SYLLABICS TH
-156B;N;CANADIAN SYLLABICS TTHE
-156C;N;CANADIAN SYLLABICS TTHI
-156D;N;CANADIAN SYLLABICS TTHO
-156E;N;CANADIAN SYLLABICS TTHA
-156F;N;CANADIAN SYLLABICS TTH
-1570;N;CANADIAN SYLLABICS TYE
-1571;N;CANADIAN SYLLABICS TYI
-1572;N;CANADIAN SYLLABICS TYO
-1573;N;CANADIAN SYLLABICS TYA
-1574;N;CANADIAN SYLLABICS NUNAVIK HE
-1575;N;CANADIAN SYLLABICS NUNAVIK HI
-1576;N;CANADIAN SYLLABICS NUNAVIK HII
-1577;N;CANADIAN SYLLABICS NUNAVIK HO
-1578;N;CANADIAN SYLLABICS NUNAVIK HOO
-1579;N;CANADIAN SYLLABICS NUNAVIK HA
-157A;N;CANADIAN SYLLABICS NUNAVIK HAA
-157B;N;CANADIAN SYLLABICS NUNAVIK H
-157C;N;CANADIAN SYLLABICS NUNAVUT H
-157D;N;CANADIAN SYLLABICS HK
-157E;N;CANADIAN SYLLABICS QAAI
-157F;N;CANADIAN SYLLABICS QI
-1580;N;CANADIAN SYLLABICS QII
-1581;N;CANADIAN SYLLABICS QO
-1582;N;CANADIAN SYLLABICS QOO
-1583;N;CANADIAN SYLLABICS QA
-1584;N;CANADIAN SYLLABICS QAA
-1585;N;CANADIAN SYLLABICS Q
-1586;N;CANADIAN SYLLABICS TLHE
-1587;N;CANADIAN SYLLABICS TLHI
-1588;N;CANADIAN SYLLABICS TLHO
-1589;N;CANADIAN SYLLABICS TLHA
-158A;N;CANADIAN SYLLABICS WEST-CREE RE
-158B;N;CANADIAN SYLLABICS WEST-CREE RI
-158C;N;CANADIAN SYLLABICS WEST-CREE RO
-158D;N;CANADIAN SYLLABICS WEST-CREE RA
-158E;N;CANADIAN SYLLABICS NGAAI
-158F;N;CANADIAN SYLLABICS NGI
-1590;N;CANADIAN SYLLABICS NGII
-1591;N;CANADIAN SYLLABICS NGO
-1592;N;CANADIAN SYLLABICS NGOO
-1593;N;CANADIAN SYLLABICS NGA
-1594;N;CANADIAN SYLLABICS NGAA
-1595;N;CANADIAN SYLLABICS NG
-1596;N;CANADIAN SYLLABICS NNG
-1597;N;CANADIAN SYLLABICS SAYISI SHE
-1598;N;CANADIAN SYLLABICS SAYISI SHI
-1599;N;CANADIAN SYLLABICS SAYISI SHO
-159A;N;CANADIAN SYLLABICS SAYISI SHA
-159B;N;CANADIAN SYLLABICS WOODS-CREE THE
-159C;N;CANADIAN SYLLABICS WOODS-CREE THI
-159D;N;CANADIAN SYLLABICS WOODS-CREE THO
-159E;N;CANADIAN SYLLABICS WOODS-CREE THA
-159F;N;CANADIAN SYLLABICS WOODS-CREE TH
-15A0;N;CANADIAN SYLLABICS LHI
-15A1;N;CANADIAN SYLLABICS LHII
-15A2;N;CANADIAN SYLLABICS LHO
-15A3;N;CANADIAN SYLLABICS LHOO
-15A4;N;CANADIAN SYLLABICS LHA
-15A5;N;CANADIAN SYLLABICS LHAA
-15A6;N;CANADIAN SYLLABICS LH
-15A7;N;CANADIAN SYLLABICS TH-CREE THE
-15A8;N;CANADIAN SYLLABICS TH-CREE THI
-15A9;N;CANADIAN SYLLABICS TH-CREE THII
-15AA;N;CANADIAN SYLLABICS TH-CREE THO
-15AB;N;CANADIAN SYLLABICS TH-CREE THOO
-15AC;N;CANADIAN SYLLABICS TH-CREE THA
-15AD;N;CANADIAN SYLLABICS TH-CREE THAA
-15AE;N;CANADIAN SYLLABICS TH-CREE TH
-15AF;N;CANADIAN SYLLABICS AIVILIK B
-15B0;N;CANADIAN SYLLABICS BLACKFOOT E
-15B1;N;CANADIAN SYLLABICS BLACKFOOT I
-15B2;N;CANADIAN SYLLABICS BLACKFOOT O
-15B3;N;CANADIAN SYLLABICS BLACKFOOT A
-15B4;N;CANADIAN SYLLABICS BLACKFOOT WE
-15B5;N;CANADIAN SYLLABICS BLACKFOOT WI
-15B6;N;CANADIAN SYLLABICS BLACKFOOT WO
-15B7;N;CANADIAN SYLLABICS BLACKFOOT WA
-15B8;N;CANADIAN SYLLABICS BLACKFOOT NE
-15B9;N;CANADIAN SYLLABICS BLACKFOOT NI
-15BA;N;CANADIAN SYLLABICS BLACKFOOT NO
-15BB;N;CANADIAN SYLLABICS BLACKFOOT NA
-15BC;N;CANADIAN SYLLABICS BLACKFOOT KE
-15BD;N;CANADIAN SYLLABICS BLACKFOOT KI
-15BE;N;CANADIAN SYLLABICS BLACKFOOT KO
-15BF;N;CANADIAN SYLLABICS BLACKFOOT KA
-15C0;N;CANADIAN SYLLABICS SAYISI HE
-15C1;N;CANADIAN SYLLABICS SAYISI HI
-15C2;N;CANADIAN SYLLABICS SAYISI HO
-15C3;N;CANADIAN SYLLABICS SAYISI HA
-15C4;N;CANADIAN SYLLABICS CARRIER GHU
-15C5;N;CANADIAN SYLLABICS CARRIER GHO
-15C6;N;CANADIAN SYLLABICS CARRIER GHE
-15C7;N;CANADIAN SYLLABICS CARRIER GHEE
-15C8;N;CANADIAN SYLLABICS CARRIER GHI
-15C9;N;CANADIAN SYLLABICS CARRIER GHA
-15CA;N;CANADIAN SYLLABICS CARRIER RU
-15CB;N;CANADIAN SYLLABICS CARRIER RO
-15CC;N;CANADIAN SYLLABICS CARRIER RE
-15CD;N;CANADIAN SYLLABICS CARRIER REE
-15CE;N;CANADIAN SYLLABICS CARRIER RI
-15CF;N;CANADIAN SYLLABICS CARRIER RA
-15D0;N;CANADIAN SYLLABICS CARRIER WU
-15D1;N;CANADIAN SYLLABICS CARRIER WO
-15D2;N;CANADIAN SYLLABICS CARRIER WE
-15D3;N;CANADIAN SYLLABICS CARRIER WEE
-15D4;N;CANADIAN SYLLABICS CARRIER WI
-15D5;N;CANADIAN SYLLABICS CARRIER WA
-15D6;N;CANADIAN SYLLABICS CARRIER HWU
-15D7;N;CANADIAN SYLLABICS CARRIER HWO
-15D8;N;CANADIAN SYLLABICS CARRIER HWE
-15D9;N;CANADIAN SYLLABICS CARRIER HWEE
-15DA;N;CANADIAN SYLLABICS CARRIER HWI
-15DB;N;CANADIAN SYLLABICS CARRIER HWA
-15DC;N;CANADIAN SYLLABICS CARRIER THU
-15DD;N;CANADIAN SYLLABICS CARRIER THO
-15DE;N;CANADIAN SYLLABICS CARRIER THE
-15DF;N;CANADIAN SYLLABICS CARRIER THEE
-15E0;N;CANADIAN SYLLABICS CARRIER THI
-15E1;N;CANADIAN SYLLABICS CARRIER THA
-15E2;N;CANADIAN SYLLABICS CARRIER TTU
-15E3;N;CANADIAN SYLLABICS CARRIER TTO
-15E4;N;CANADIAN SYLLABICS CARRIER TTE
-15E5;N;CANADIAN SYLLABICS CARRIER TTEE
-15E6;N;CANADIAN SYLLABICS CARRIER TTI
-15E7;N;CANADIAN SYLLABICS CARRIER TTA
-15E8;N;CANADIAN SYLLABICS CARRIER PU
-15E9;N;CANADIAN SYLLABICS CARRIER PO
-15EA;N;CANADIAN SYLLABICS CARRIER PE
-15EB;N;CANADIAN SYLLABICS CARRIER PEE
-15EC;N;CANADIAN SYLLABICS CARRIER PI
-15ED;N;CANADIAN SYLLABICS CARRIER PA
-15EE;N;CANADIAN SYLLABICS CARRIER P
-15EF;N;CANADIAN SYLLABICS CARRIER GU
-15F0;N;CANADIAN SYLLABICS CARRIER GO
-15F1;N;CANADIAN SYLLABICS CARRIER GE
-15F2;N;CANADIAN SYLLABICS CARRIER GEE
-15F3;N;CANADIAN SYLLABICS CARRIER GI
-15F4;N;CANADIAN SYLLABICS CARRIER GA
-15F5;N;CANADIAN SYLLABICS CARRIER KHU
-15F6;N;CANADIAN SYLLABICS CARRIER KHO
-15F7;N;CANADIAN SYLLABICS CARRIER KHE
-15F8;N;CANADIAN SYLLABICS CARRIER KHEE
-15F9;N;CANADIAN SYLLABICS CARRIER KHI
-15FA;N;CANADIAN SYLLABICS CARRIER KHA
-15FB;N;CANADIAN SYLLABICS CARRIER KKU
-15FC;N;CANADIAN SYLLABICS CARRIER KKO
-15FD;N;CANADIAN SYLLABICS CARRIER KKE
-15FE;N;CANADIAN SYLLABICS CARRIER KKEE
-15FF;N;CANADIAN SYLLABICS CARRIER KKI
-1600;N;CANADIAN SYLLABICS CARRIER KKA
-1601;N;CANADIAN SYLLABICS CARRIER KK
-1602;N;CANADIAN SYLLABICS CARRIER NU
-1603;N;CANADIAN SYLLABICS CARRIER NO
-1604;N;CANADIAN SYLLABICS CARRIER NE
-1605;N;CANADIAN SYLLABICS CARRIER NEE
-1606;N;CANADIAN SYLLABICS CARRIER NI
-1607;N;CANADIAN SYLLABICS CARRIER NA
-1608;N;CANADIAN SYLLABICS CARRIER MU
-1609;N;CANADIAN SYLLABICS CARRIER MO
-160A;N;CANADIAN SYLLABICS CARRIER ME
-160B;N;CANADIAN SYLLABICS CARRIER MEE
-160C;N;CANADIAN SYLLABICS CARRIER MI
-160D;N;CANADIAN SYLLABICS CARRIER MA
-160E;N;CANADIAN SYLLABICS CARRIER YU
-160F;N;CANADIAN SYLLABICS CARRIER YO
-1610;N;CANADIAN SYLLABICS CARRIER YE
-1611;N;CANADIAN SYLLABICS CARRIER YEE
-1612;N;CANADIAN SYLLABICS CARRIER YI
-1613;N;CANADIAN SYLLABICS CARRIER YA
-1614;N;CANADIAN SYLLABICS CARRIER JU
-1615;N;CANADIAN SYLLABICS SAYISI JU
-1616;N;CANADIAN SYLLABICS CARRIER JO
-1617;N;CANADIAN SYLLABICS CARRIER JE
-1618;N;CANADIAN SYLLABICS CARRIER JEE
-1619;N;CANADIAN SYLLABICS CARRIER JI
-161A;N;CANADIAN SYLLABICS SAYISI JI
-161B;N;CANADIAN SYLLABICS CARRIER JA
-161C;N;CANADIAN SYLLABICS CARRIER JJU
-161D;N;CANADIAN SYLLABICS CARRIER JJO
-161E;N;CANADIAN SYLLABICS CARRIER JJE
-161F;N;CANADIAN SYLLABICS CARRIER JJEE
-1620;N;CANADIAN SYLLABICS CARRIER JJI
-1621;N;CANADIAN SYLLABICS CARRIER JJA
-1622;N;CANADIAN SYLLABICS CARRIER LU
-1623;N;CANADIAN SYLLABICS CARRIER LO
-1624;N;CANADIAN SYLLABICS CARRIER LE
-1625;N;CANADIAN SYLLABICS CARRIER LEE
-1626;N;CANADIAN SYLLABICS CARRIER LI
-1627;N;CANADIAN SYLLABICS CARRIER LA
-1628;N;CANADIAN SYLLABICS CARRIER DLU
-1629;N;CANADIAN SYLLABICS CARRIER DLO
-162A;N;CANADIAN SYLLABICS CARRIER DLE
-162B;N;CANADIAN SYLLABICS CARRIER DLEE
-162C;N;CANADIAN SYLLABICS CARRIER DLI
-162D;N;CANADIAN SYLLABICS CARRIER DLA
-162E;N;CANADIAN SYLLABICS CARRIER LHU
-162F;N;CANADIAN SYLLABICS CARRIER LHO
-1630;N;CANADIAN SYLLABICS CARRIER LHE
-1631;N;CANADIAN SYLLABICS CARRIER LHEE
-1632;N;CANADIAN SYLLABICS CARRIER LHI
-1633;N;CANADIAN SYLLABICS CARRIER LHA
-1634;N;CANADIAN SYLLABICS CARRIER TLHU
-1635;N;CANADIAN SYLLABICS CARRIER TLHO
-1636;N;CANADIAN SYLLABICS CARRIER TLHE
-1637;N;CANADIAN SYLLABICS CARRIER TLHEE
-1638;N;CANADIAN SYLLABICS CARRIER TLHI
-1639;N;CANADIAN SYLLABICS CARRIER TLHA
-163A;N;CANADIAN SYLLABICS CARRIER TLU
-163B;N;CANADIAN SYLLABICS CARRIER TLO
-163C;N;CANADIAN SYLLABICS CARRIER TLE
-163D;N;CANADIAN SYLLABICS CARRIER TLEE
-163E;N;CANADIAN SYLLABICS CARRIER TLI
-163F;N;CANADIAN SYLLABICS CARRIER TLA
-1640;N;CANADIAN SYLLABICS CARRIER ZU
-1641;N;CANADIAN SYLLABICS CARRIER ZO
-1642;N;CANADIAN SYLLABICS CARRIER ZE
-1643;N;CANADIAN SYLLABICS CARRIER ZEE
-1644;N;CANADIAN SYLLABICS CARRIER ZI
-1645;N;CANADIAN SYLLABICS CARRIER ZA
-1646;N;CANADIAN SYLLABICS CARRIER Z
-1647;N;CANADIAN SYLLABICS CARRIER INITIAL Z
-1648;N;CANADIAN SYLLABICS CARRIER DZU
-1649;N;CANADIAN SYLLABICS CARRIER DZO
-164A;N;CANADIAN SYLLABICS CARRIER DZE
-164B;N;CANADIAN SYLLABICS CARRIER DZEE
-164C;N;CANADIAN SYLLABICS CARRIER DZI
-164D;N;CANADIAN SYLLABICS CARRIER DZA
-164E;N;CANADIAN SYLLABICS CARRIER SU
-164F;N;CANADIAN SYLLABICS CARRIER SO
-1650;N;CANADIAN SYLLABICS CARRIER SE
-1651;N;CANADIAN SYLLABICS CARRIER SEE
-1652;N;CANADIAN SYLLABICS CARRIER SI
-1653;N;CANADIAN SYLLABICS CARRIER SA
-1654;N;CANADIAN SYLLABICS CARRIER SHU
-1655;N;CANADIAN SYLLABICS CARRIER SHO
-1656;N;CANADIAN SYLLABICS CARRIER SHE
-1657;N;CANADIAN SYLLABICS CARRIER SHEE
-1658;N;CANADIAN SYLLABICS CARRIER SHI
-1659;N;CANADIAN SYLLABICS CARRIER SHA
-165A;N;CANADIAN SYLLABICS CARRIER SH
-165B;N;CANADIAN SYLLABICS CARRIER TSU
-165C;N;CANADIAN SYLLABICS CARRIER TSO
-165D;N;CANADIAN SYLLABICS CARRIER TSE
-165E;N;CANADIAN SYLLABICS CARRIER TSEE
-165F;N;CANADIAN SYLLABICS CARRIER TSI
-1660;N;CANADIAN SYLLABICS CARRIER TSA
-1661;N;CANADIAN SYLLABICS CARRIER CHU
-1662;N;CANADIAN SYLLABICS CARRIER CHO
-1663;N;CANADIAN SYLLABICS CARRIER CHE
-1664;N;CANADIAN SYLLABICS CARRIER CHEE
-1665;N;CANADIAN SYLLABICS CARRIER CHI
-1666;N;CANADIAN SYLLABICS CARRIER CHA
-1667;N;CANADIAN SYLLABICS CARRIER TTSU
-1668;N;CANADIAN SYLLABICS CARRIER TTSO
-1669;N;CANADIAN SYLLABICS CARRIER TTSE
-166A;N;CANADIAN SYLLABICS CARRIER TTSEE
-166B;N;CANADIAN SYLLABICS CARRIER TTSI
-166C;N;CANADIAN SYLLABICS CARRIER TTSA
-166D;N;CANADIAN SYLLABICS CHI SIGN
-166E;N;CANADIAN SYLLABICS FULL STOP
-166F;N;CANADIAN SYLLABICS QAI
-1670;N;CANADIAN SYLLABICS NGAI
-1671;N;CANADIAN SYLLABICS NNGI
-1672;N;CANADIAN SYLLABICS NNGII
-1673;N;CANADIAN SYLLABICS NNGO
-1674;N;CANADIAN SYLLABICS NNGOO
-1675;N;CANADIAN SYLLABICS NNGA
-1676;N;CANADIAN SYLLABICS NNGAA
-1680;N;OGHAM SPACE MARK
-1681;N;OGHAM LETTER BEITH
-1682;N;OGHAM LETTER LUIS
-1683;N;OGHAM LETTER FEARN
-1684;N;OGHAM LETTER SAIL
-1685;N;OGHAM LETTER NION
-1686;N;OGHAM LETTER UATH
-1687;N;OGHAM LETTER DAIR
-1688;N;OGHAM LETTER TINNE
-1689;N;OGHAM LETTER COLL
-168A;N;OGHAM LETTER CEIRT
-168B;N;OGHAM LETTER MUIN
-168C;N;OGHAM LETTER GORT
-168D;N;OGHAM LETTER NGEADAL
-168E;N;OGHAM LETTER STRAIF
-168F;N;OGHAM LETTER RUIS
-1690;N;OGHAM LETTER AILM
-1691;N;OGHAM LETTER ONN
-1692;N;OGHAM LETTER UR
-1693;N;OGHAM LETTER EADHADH
-1694;N;OGHAM LETTER IODHADH
-1695;N;OGHAM LETTER EABHADH
-1696;N;OGHAM LETTER OR
-1697;N;OGHAM LETTER UILLEANN
-1698;N;OGHAM LETTER IFIN
-1699;N;OGHAM LETTER EAMHANCHOLL
-169A;N;OGHAM LETTER PEITH
-169B;N;OGHAM FEATHER MARK
-169C;N;OGHAM REVERSED FEATHER MARK
-16A0;N;RUNIC LETTER FEHU FEOH FE F
-16A1;N;RUNIC LETTER V
-16A2;N;RUNIC LETTER URUZ UR U
-16A3;N;RUNIC LETTER YR
-16A4;N;RUNIC LETTER Y
-16A5;N;RUNIC LETTER W
-16A6;N;RUNIC LETTER THURISAZ THURS THORN
-16A7;N;RUNIC LETTER ETH
-16A8;N;RUNIC LETTER ANSUZ A
-16A9;N;RUNIC LETTER OS O
-16AA;N;RUNIC LETTER AC A
-16AB;N;RUNIC LETTER AESC
-16AC;N;RUNIC LETTER LONG-BRANCH-OSS O
-16AD;N;RUNIC LETTER SHORT-TWIG-OSS O
-16AE;N;RUNIC LETTER O
-16AF;N;RUNIC LETTER OE
-16B0;N;RUNIC LETTER ON
-16B1;N;RUNIC LETTER RAIDO RAD REID R
-16B2;N;RUNIC LETTER KAUNA
-16B3;N;RUNIC LETTER CEN
-16B4;N;RUNIC LETTER KAUN K
-16B5;N;RUNIC LETTER G
-16B6;N;RUNIC LETTER ENG
-16B7;N;RUNIC LETTER GEBO GYFU G
-16B8;N;RUNIC LETTER GAR
-16B9;N;RUNIC LETTER WUNJO WYNN W
-16BA;N;RUNIC LETTER HAGLAZ H
-16BB;N;RUNIC LETTER HAEGL H
-16BC;N;RUNIC LETTER LONG-BRANCH-HAGALL H
-16BD;N;RUNIC LETTER SHORT-TWIG-HAGALL H
-16BE;N;RUNIC LETTER NAUDIZ NYD NAUD N
-16BF;N;RUNIC LETTER SHORT-TWIG-NAUD N
-16C0;N;RUNIC LETTER DOTTED-N
-16C1;N;RUNIC LETTER ISAZ IS ISS I
-16C2;N;RUNIC LETTER E
-16C3;N;RUNIC LETTER JERAN J
-16C4;N;RUNIC LETTER GER
-16C5;N;RUNIC LETTER LONG-BRANCH-AR AE
-16C6;N;RUNIC LETTER SHORT-TWIG-AR A
-16C7;N;RUNIC LETTER IWAZ EOH
-16C8;N;RUNIC LETTER PERTHO PEORTH P
-16C9;N;RUNIC LETTER ALGIZ EOLHX
-16CA;N;RUNIC LETTER SOWILO S
-16CB;N;RUNIC LETTER SIGEL LONG-BRANCH-SOL S
-16CC;N;RUNIC LETTER SHORT-TWIG-SOL S
-16CD;N;RUNIC LETTER C
-16CE;N;RUNIC LETTER Z
-16CF;N;RUNIC LETTER TIWAZ TIR TYR T
-16D0;N;RUNIC LETTER SHORT-TWIG-TYR T
-16D1;N;RUNIC LETTER D
-16D2;N;RUNIC LETTER BERKANAN BEORC BJARKAN B
-16D3;N;RUNIC LETTER SHORT-TWIG-BJARKAN B
-16D4;N;RUNIC LETTER DOTTED-P
-16D5;N;RUNIC LETTER OPEN-P
-16D6;N;RUNIC LETTER EHWAZ EH E
-16D7;N;RUNIC LETTER MANNAZ MAN M
-16D8;N;RUNIC LETTER LONG-BRANCH-MADR M
-16D9;N;RUNIC LETTER SHORT-TWIG-MADR M
-16DA;N;RUNIC LETTER LAUKAZ LAGU LOGR L
-16DB;N;RUNIC LETTER DOTTED-L
-16DC;N;RUNIC LETTER INGWAZ
-16DD;N;RUNIC LETTER ING
-16DE;N;RUNIC LETTER DAGAZ DAEG D
-16DF;N;RUNIC LETTER OTHALAN ETHEL O
-16E0;N;RUNIC LETTER EAR
-16E1;N;RUNIC LETTER IOR
-16E2;N;RUNIC LETTER CWEORTH
-16E3;N;RUNIC LETTER CALC
-16E4;N;RUNIC LETTER CEALC
-16E5;N;RUNIC LETTER STAN
-16E6;N;RUNIC LETTER LONG-BRANCH-YR
-16E7;N;RUNIC LETTER SHORT-TWIG-YR
-16E8;N;RUNIC LETTER ICELANDIC-YR
-16E9;N;RUNIC LETTER Q
-16EA;N;RUNIC LETTER X
-16EB;N;RUNIC SINGLE PUNCTUATION
-16EC;N;RUNIC MULTIPLE PUNCTUATION
-16ED;N;RUNIC CROSS PUNCTUATION
-16EE;N;RUNIC ARLAUG SYMBOL
-16EF;N;RUNIC TVIMADUR SYMBOL
-16F0;N;RUNIC BELGTHOR SYMBOL
-1780;N;KHMER LETTER KA
-1781;N;KHMER LETTER KHA
-1782;N;KHMER LETTER KO
-1783;N;KHMER LETTER KHO
-1784;N;KHMER LETTER NGO
-1785;N;KHMER LETTER CA
-1786;N;KHMER LETTER CHA
-1787;N;KHMER LETTER CO
-1788;N;KHMER LETTER CHO
-1789;N;KHMER LETTER NYO
-178A;N;KHMER LETTER DA
-178B;N;KHMER LETTER TTHA
-178C;N;KHMER LETTER DO
-178D;N;KHMER LETTER TTHO
-178E;N;KHMER LETTER NNO
-178F;N;KHMER LETTER TA
-1790;N;KHMER LETTER THA
-1791;N;KHMER LETTER TO
-1792;N;KHMER LETTER THO
-1793;N;KHMER LETTER NO
-1794;N;KHMER LETTER BA
-1795;N;KHMER LETTER PHA
-1796;N;KHMER LETTER PO
-1797;N;KHMER LETTER PHO
-1798;N;KHMER LETTER MO
-1799;N;KHMER LETTER YO
-179A;N;KHMER LETTER RO
-179B;N;KHMER LETTER LO
-179C;N;KHMER LETTER VO
-179D;N;KHMER LETTER SHA
-179E;N;KHMER LETTER SSO
-179F;N;KHMER LETTER SA
-17A0;N;KHMER LETTER HA
-17A1;N;KHMER LETTER LA
-17A2;N;KHMER LETTER QA
-17A3;N;KHMER INDEPENDENT VOWEL QAQ
-17A4;N;KHMER INDEPENDENT VOWEL QAA
-17A5;N;KHMER INDEPENDENT VOWEL QI
-17A6;N;KHMER INDEPENDENT VOWEL QII
-17A7;N;KHMER INDEPENDENT VOWEL QU
-17A8;N;KHMER INDEPENDENT VOWEL QUK
-17A9;N;KHMER INDEPENDENT VOWEL QUU
-17AA;N;KHMER INDEPENDENT VOWEL QUUV
-17AB;N;KHMER INDEPENDENT VOWEL RY
-17AC;N;KHMER INDEPENDENT VOWEL RYY
-17AD;N;KHMER INDEPENDENT VOWEL LY
-17AE;N;KHMER INDEPENDENT VOWEL LYY
-17AF;N;KHMER INDEPENDENT VOWEL QE
-17B0;N;KHMER INDEPENDENT VOWEL QAI
-17B1;N;KHMER INDEPENDENT VOWEL QOO TYPE ONE
-17B2;N;KHMER INDEPENDENT VOWEL QOO TYPE TWO
-17B3;N;KHMER INDEPENDENT VOWEL QAU
-17B4;N;KHMER VOWEL INHERENT AQ
-17B5;N;KHMER VOWEL INHERENT AA
-17B6;N;KHMER VOWEL SIGN AA
-17B7;N;KHMER VOWEL SIGN I
-17B8;N;KHMER VOWEL SIGN II
-17B9;N;KHMER VOWEL SIGN Y
-17BA;N;KHMER VOWEL SIGN YY
-17BB;N;KHMER VOWEL SIGN U
-17BC;N;KHMER VOWEL SIGN UU
-17BD;N;KHMER VOWEL SIGN UA
-17BE;N;KHMER VOWEL SIGN OE
-17BF;N;KHMER VOWEL SIGN YA
-17C0;N;KHMER VOWEL SIGN IE
-17C1;N;KHMER VOWEL SIGN E
-17C2;N;KHMER VOWEL SIGN AE
-17C3;N;KHMER VOWEL SIGN AI
-17C4;N;KHMER VOWEL SIGN OO
-17C5;N;KHMER VOWEL SIGN AU
-17C6;N;KHMER SIGN NIKAHIT
-17C7;N;KHMER SIGN REAHMUK
-17C8;N;KHMER SIGN YUUKALEAPINTU
-17C9;N;KHMER SIGN MUUSIKATOAN
-17CA;N;KHMER SIGN TRIISAP
-17CB;N;KHMER SIGN BANTOC
-17CC;N;KHMER SIGN ROBAT
-17CD;N;KHMER SIGN TOANDAKHIAT
-17CE;N;KHMER SIGN KAKABAT
-17CF;N;KHMER SIGN AHSDA
-17D0;N;KHMER SIGN SAMYOK SANNYA
-17D1;N;KHMER SIGN VIRIAM
-17D2;N;KHMER SIGN COENG
-17D3;N;KHMER SIGN BATHAMASAT
-17D4;N;KHMER SIGN KHAN
-17D5;N;KHMER SIGN BARIYOOSAN
-17D6;N;KHMER SIGN CAMNUC PII KUUH
-17D7;N;KHMER SIGN LEK TOO
-17D8;N;KHMER SIGN BEYYAL
-17D9;N;KHMER SIGN PHNAEK MUAN
-17DA;N;KHMER SIGN KOOMUUT
-17DB;N;KHMER CURRENCY SYMBOL RIEL
-17DC;N;KHMER SIGN AVAKRAHASANYA
-17E0;N;KHMER DIGIT ZERO
-17E1;N;KHMER DIGIT ONE
-17E2;N;KHMER DIGIT TWO
-17E3;N;KHMER DIGIT THREE
-17E4;N;KHMER DIGIT FOUR
-17E5;N;KHMER DIGIT FIVE
-17E6;N;KHMER DIGIT SIX
-17E7;N;KHMER DIGIT SEVEN
-17E8;N;KHMER DIGIT EIGHT
-17E9;N;KHMER DIGIT NINE
-1800;N;MONGOLIAN BIRGA
-1801;N;MONGOLIAN ELLIPSIS
-1802;N;MONGOLIAN COMMA
-1803;N;MONGOLIAN FULL STOP
-1804;N;MONGOLIAN COLON
-1805;N;MONGOLIAN FOUR DOTS
-1806;N;MONGOLIAN TODO SOFT HYPHEN
-1807;N;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
-1808;N;MONGOLIAN MANCHU COMMA
-1809;N;MONGOLIAN MANCHU FULL STOP
-180A;N;MONGOLIAN NIRUGU
-180B;N;MONGOLIAN FREE VARIATION SELECTOR ONE
-180C;N;MONGOLIAN FREE VARIATION SELECTOR TWO
-180D;N;MONGOLIAN FREE VARIATION SELECTOR THREE
-180E;N;MONGOLIAN VOWEL SEPARATOR
-1810;N;MONGOLIAN DIGIT ZERO
-1811;N;MONGOLIAN DIGIT ONE
-1812;N;MONGOLIAN DIGIT TWO
-1813;N;MONGOLIAN DIGIT THREE
-1814;N;MONGOLIAN DIGIT FOUR
-1815;N;MONGOLIAN DIGIT FIVE
-1816;N;MONGOLIAN DIGIT SIX
-1817;N;MONGOLIAN DIGIT SEVEN
-1818;N;MONGOLIAN DIGIT EIGHT
-1819;N;MONGOLIAN DIGIT NINE
-1820;N;MONGOLIAN LETTER A
-1821;N;MONGOLIAN LETTER E
-1822;N;MONGOLIAN LETTER I
-1823;N;MONGOLIAN LETTER O
-1824;N;MONGOLIAN LETTER U
-1825;N;MONGOLIAN LETTER OE
-1826;N;MONGOLIAN LETTER UE
-1827;N;MONGOLIAN LETTER EE
-1828;N;MONGOLIAN LETTER NA
-1829;N;MONGOLIAN LETTER ANG
-182A;N;MONGOLIAN LETTER BA
-182B;N;MONGOLIAN LETTER PA
-182C;N;MONGOLIAN LETTER QA
-182D;N;MONGOLIAN LETTER GA
-182E;N;MONGOLIAN LETTER MA
-182F;N;MONGOLIAN LETTER LA
-1830;N;MONGOLIAN LETTER SA
-1831;N;MONGOLIAN LETTER SHA
-1832;N;MONGOLIAN LETTER TA
-1833;N;MONGOLIAN LETTER DA
-1834;N;MONGOLIAN LETTER CHA
-1835;N;MONGOLIAN LETTER JA
-1836;N;MONGOLIAN LETTER YA
-1837;N;MONGOLIAN LETTER RA
-1838;N;MONGOLIAN LETTER WA
-1839;N;MONGOLIAN LETTER FA
-183A;N;MONGOLIAN LETTER KA
-183B;N;MONGOLIAN LETTER KHA
-183C;N;MONGOLIAN LETTER TSA
-183D;N;MONGOLIAN LETTER ZA
-183E;N;MONGOLIAN LETTER HAA
-183F;N;MONGOLIAN LETTER ZRA
-1840;N;MONGOLIAN LETTER LHA
-1841;N;MONGOLIAN LETTER ZHI
-1842;N;MONGOLIAN LETTER CHI
-1843;N;MONGOLIAN LETTER TODO LONG VOWEL SIGN
-1844;N;MONGOLIAN LETTER TODO E
-1845;N;MONGOLIAN LETTER TODO I
-1846;N;MONGOLIAN LETTER TODO O
-1847;N;MONGOLIAN LETTER TODO U
-1848;N;MONGOLIAN LETTER TODO OE
-1849;N;MONGOLIAN LETTER TODO UE
-184A;N;MONGOLIAN LETTER TODO ANG
-184B;N;MONGOLIAN LETTER TODO BA
-184C;N;MONGOLIAN LETTER TODO PA
-184D;N;MONGOLIAN LETTER TODO QA
-184E;N;MONGOLIAN LETTER TODO GA
-184F;N;MONGOLIAN LETTER TODO MA
-1850;N;MONGOLIAN LETTER TODO TA
-1851;N;MONGOLIAN LETTER TODO DA
-1852;N;MONGOLIAN LETTER TODO CHA
-1853;N;MONGOLIAN LETTER TODO JA
-1854;N;MONGOLIAN LETTER TODO TSA
-1855;N;MONGOLIAN LETTER TODO YA
-1856;N;MONGOLIAN LETTER TODO WA
-1857;N;MONGOLIAN LETTER TODO KA
-1858;N;MONGOLIAN LETTER TODO GAA
-1859;N;MONGOLIAN LETTER TODO HAA
-185A;N;MONGOLIAN LETTER TODO JIA
-185B;N;MONGOLIAN LETTER TODO NIA
-185C;N;MONGOLIAN LETTER TODO DZA
-185D;N;MONGOLIAN LETTER SIBE E
-185E;N;MONGOLIAN LETTER SIBE I
-185F;N;MONGOLIAN LETTER SIBE IY
-1860;N;MONGOLIAN LETTER SIBE UE
-1861;N;MONGOLIAN LETTER SIBE U
-1862;N;MONGOLIAN LETTER SIBE ANG
-1863;N;MONGOLIAN LETTER SIBE KA
-1864;N;MONGOLIAN LETTER SIBE GA
-1865;N;MONGOLIAN LETTER SIBE HA
-1866;N;MONGOLIAN LETTER SIBE PA
-1867;N;MONGOLIAN LETTER SIBE SHA
-1868;N;MONGOLIAN LETTER SIBE TA
-1869;N;MONGOLIAN LETTER SIBE DA
-186A;N;MONGOLIAN LETTER SIBE JA
-186B;N;MONGOLIAN LETTER SIBE FA
-186C;N;MONGOLIAN LETTER SIBE GAA
-186D;N;MONGOLIAN LETTER SIBE HAA
-186E;N;MONGOLIAN LETTER SIBE TSA
-186F;N;MONGOLIAN LETTER SIBE ZA
-1870;N;MONGOLIAN LETTER SIBE RAA
-1871;N;MONGOLIAN LETTER SIBE CHA
-1872;N;MONGOLIAN LETTER SIBE ZHA
-1873;N;MONGOLIAN LETTER MANCHU I
-1874;N;MONGOLIAN LETTER MANCHU KA
-1875;N;MONGOLIAN LETTER MANCHU RA
-1876;N;MONGOLIAN LETTER MANCHU FA
-1877;N;MONGOLIAN LETTER MANCHU ZHA
-1880;N;MONGOLIAN LETTER ALI GALI ANUSVARA ONE
-1881;N;MONGOLIAN LETTER ALI GALI VISARGA ONE
-1882;N;MONGOLIAN LETTER ALI GALI DAMARU
-1883;N;MONGOLIAN LETTER ALI GALI UBADAMA
-1884;N;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
-1885;N;MONGOLIAN LETTER ALI GALI BALUDA
-1886;N;MONGOLIAN LETTER ALI GALI THREE BALUDA
-1887;N;MONGOLIAN LETTER ALI GALI A
-1888;N;MONGOLIAN LETTER ALI GALI I
-1889;N;MONGOLIAN LETTER ALI GALI KA
-188A;N;MONGOLIAN LETTER ALI GALI NGA
-188B;N;MONGOLIAN LETTER ALI GALI CA
-188C;N;MONGOLIAN LETTER ALI GALI TTA
-188D;N;MONGOLIAN LETTER ALI GALI TTHA
-188E;N;MONGOLIAN LETTER ALI GALI DDA
-188F;N;MONGOLIAN LETTER ALI GALI NNA
-1890;N;MONGOLIAN LETTER ALI GALI TA
-1891;N;MONGOLIAN LETTER ALI GALI DA
-1892;N;MONGOLIAN LETTER ALI GALI PA
-1893;N;MONGOLIAN LETTER ALI GALI PHA
-1894;N;MONGOLIAN LETTER ALI GALI SSA
-1895;N;MONGOLIAN LETTER ALI GALI ZHA
-1896;N;MONGOLIAN LETTER ALI GALI ZA
-1897;N;MONGOLIAN LETTER ALI GALI AH
-1898;N;MONGOLIAN LETTER TODO ALI GALI TA
-1899;N;MONGOLIAN LETTER TODO ALI GALI ZHA
-189A;N;MONGOLIAN LETTER MANCHU ALI GALI GHA
-189B;N;MONGOLIAN LETTER MANCHU ALI GALI NGA
-189C;N;MONGOLIAN LETTER MANCHU ALI GALI CA
-189D;N;MONGOLIAN LETTER MANCHU ALI GALI JHA
-189E;N;MONGOLIAN LETTER MANCHU ALI GALI TTA
-189F;N;MONGOLIAN LETTER MANCHU ALI GALI DDHA
-18A0;N;MONGOLIAN LETTER MANCHU ALI GALI TA
-18A1;N;MONGOLIAN LETTER MANCHU ALI GALI DHA
-18A2;N;MONGOLIAN LETTER MANCHU ALI GALI SSA
-18A3;N;MONGOLIAN LETTER MANCHU ALI GALI CYA
-18A4;N;MONGOLIAN LETTER MANCHU ALI GALI ZHA
-18A5;N;MONGOLIAN LETTER MANCHU ALI GALI ZA
-18A6;N;MONGOLIAN LETTER ALI GALI HALF U
-18A7;N;MONGOLIAN LETTER ALI GALI HALF YA
-18A8;N;MONGOLIAN LETTER MANCHU ALI GALI BHA
-18A9;N;MONGOLIAN LETTER ALI GALI DAGALGA
-1E00;N;LATIN CAPITAL LETTER A WITH RING BELOW
-1E01;N;LATIN SMALL LETTER A WITH RING BELOW
-1E02;N;LATIN CAPITAL LETTER B WITH DOT ABOVE
-1E03;N;LATIN SMALL LETTER B WITH DOT ABOVE
-1E04;N;LATIN CAPITAL LETTER B WITH DOT BELOW
-1E05;N;LATIN SMALL LETTER B WITH DOT BELOW
-1E06;N;LATIN CAPITAL LETTER B WITH LINE BELOW
-1E07;N;LATIN SMALL LETTER B WITH LINE BELOW
-1E08;N;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
-1E09;N;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
-1E0A;N;LATIN CAPITAL LETTER D WITH DOT ABOVE
-1E0B;N;LATIN SMALL LETTER D WITH DOT ABOVE
-1E0C;N;LATIN CAPITAL LETTER D WITH DOT BELOW
-1E0D;N;LATIN SMALL LETTER D WITH DOT BELOW
-1E0E;N;LATIN CAPITAL LETTER D WITH LINE BELOW
-1E0F;N;LATIN SMALL LETTER D WITH LINE BELOW
-1E10;N;LATIN CAPITAL LETTER D WITH CEDILLA
-1E11;N;LATIN SMALL LETTER D WITH CEDILLA
-1E12;N;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
-1E13;N;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
-1E14;N;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
-1E15;N;LATIN SMALL LETTER E WITH MACRON AND GRAVE
-1E16;N;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
-1E17;N;LATIN SMALL LETTER E WITH MACRON AND ACUTE
-1E18;N;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
-1E19;N;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
-1E1A;N;LATIN CAPITAL LETTER E WITH TILDE BELOW
-1E1B;N;LATIN SMALL LETTER E WITH TILDE BELOW
-1E1C;N;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
-1E1D;N;LATIN SMALL LETTER E WITH CEDILLA AND BREVE
-1E1E;N;LATIN CAPITAL LETTER F WITH DOT ABOVE
-1E1F;N;LATIN SMALL LETTER F WITH DOT ABOVE
-1E20;N;LATIN CAPITAL LETTER G WITH MACRON
-1E21;N;LATIN SMALL LETTER G WITH MACRON
-1E22;N;LATIN CAPITAL LETTER H WITH DOT ABOVE
-1E23;N;LATIN SMALL LETTER H WITH DOT ABOVE
-1E24;N;LATIN CAPITAL LETTER H WITH DOT BELOW
-1E25;N;LATIN SMALL LETTER H WITH DOT BELOW
-1E26;N;LATIN CAPITAL LETTER H WITH DIAERESIS
-1E27;N;LATIN SMALL LETTER H WITH DIAERESIS
-1E28;N;LATIN CAPITAL LETTER H WITH CEDILLA
-1E29;N;LATIN SMALL LETTER H WITH CEDILLA
-1E2A;N;LATIN CAPITAL LETTER H WITH BREVE BELOW
-1E2B;N;LATIN SMALL LETTER H WITH BREVE BELOW
-1E2C;N;LATIN CAPITAL LETTER I WITH TILDE BELOW
-1E2D;N;LATIN SMALL LETTER I WITH TILDE BELOW
-1E2E;N;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
-1E2F;N;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
-1E30;N;LATIN CAPITAL LETTER K WITH ACUTE
-1E31;N;LATIN SMALL LETTER K WITH ACUTE
-1E32;N;LATIN CAPITAL LETTER K WITH DOT BELOW
-1E33;N;LATIN SMALL LETTER K WITH DOT BELOW
-1E34;N;LATIN CAPITAL LETTER K WITH LINE BELOW
-1E35;N;LATIN SMALL LETTER K WITH LINE BELOW
-1E36;N;LATIN CAPITAL LETTER L WITH DOT BELOW
-1E37;N;LATIN SMALL LETTER L WITH DOT BELOW
-1E38;N;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
-1E39;N;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
-1E3A;N;LATIN CAPITAL LETTER L WITH LINE BELOW
-1E3B;N;LATIN SMALL LETTER L WITH LINE BELOW
-1E3C;N;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
-1E3D;N;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
-1E3E;N;LATIN CAPITAL LETTER M WITH ACUTE
-1E3F;N;LATIN SMALL LETTER M WITH ACUTE
-1E40;N;LATIN CAPITAL LETTER M WITH DOT ABOVE
-1E41;N;LATIN SMALL LETTER M WITH DOT ABOVE
-1E42;N;LATIN CAPITAL LETTER M WITH DOT BELOW
-1E43;N;LATIN SMALL LETTER M WITH DOT BELOW
-1E44;N;LATIN CAPITAL LETTER N WITH DOT ABOVE
-1E45;N;LATIN SMALL LETTER N WITH DOT ABOVE
-1E46;N;LATIN CAPITAL LETTER N WITH DOT BELOW
-1E47;N;LATIN SMALL LETTER N WITH DOT BELOW
-1E48;N;LATIN CAPITAL LETTER N WITH LINE BELOW
-1E49;N;LATIN SMALL LETTER N WITH LINE BELOW
-1E4A;N;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
-1E4B;N;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
-1E4C;N;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
-1E4D;N;LATIN SMALL LETTER O WITH TILDE AND ACUTE
-1E4E;N;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
-1E4F;N;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
-1E50;N;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
-1E51;N;LATIN SMALL LETTER O WITH MACRON AND GRAVE
-1E52;N;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
-1E53;N;LATIN SMALL LETTER O WITH MACRON AND ACUTE
-1E54;N;LATIN CAPITAL LETTER P WITH ACUTE
-1E55;N;LATIN SMALL LETTER P WITH ACUTE
-1E56;N;LATIN CAPITAL LETTER P WITH DOT ABOVE
-1E57;N;LATIN SMALL LETTER P WITH DOT ABOVE
-1E58;N;LATIN CAPITAL LETTER R WITH DOT ABOVE
-1E59;N;LATIN SMALL LETTER R WITH DOT ABOVE
-1E5A;N;LATIN CAPITAL LETTER R WITH DOT BELOW
-1E5B;N;LATIN SMALL LETTER R WITH DOT BELOW
-1E5C;N;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
-1E5D;N;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
-1E5E;N;LATIN CAPITAL LETTER R WITH LINE BELOW
-1E5F;N;LATIN SMALL LETTER R WITH LINE BELOW
-1E60;N;LATIN CAPITAL LETTER S WITH DOT ABOVE
-1E61;N;LATIN SMALL LETTER S WITH DOT ABOVE
-1E62;N;LATIN CAPITAL LETTER S WITH DOT BELOW
-1E63;N;LATIN SMALL LETTER S WITH DOT BELOW
-1E64;N;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
-1E65;N;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
-1E66;N;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
-1E67;N;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
-1E68;N;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
-1E69;N;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
-1E6A;N;LATIN CAPITAL LETTER T WITH DOT ABOVE
-1E6B;N;LATIN SMALL LETTER T WITH DOT ABOVE
-1E6C;N;LATIN CAPITAL LETTER T WITH DOT BELOW
-1E6D;N;LATIN SMALL LETTER T WITH DOT BELOW
-1E6E;N;LATIN CAPITAL LETTER T WITH LINE BELOW
-1E6F;N;LATIN SMALL LETTER T WITH LINE BELOW
-1E70;N;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
-1E71;N;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
-1E72;N;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
-1E73;N;LATIN SMALL LETTER U WITH DIAERESIS BELOW
-1E74;N;LATIN CAPITAL LETTER U WITH TILDE BELOW
-1E75;N;LATIN SMALL LETTER U WITH TILDE BELOW
-1E76;N;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
-1E77;N;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
-1E78;N;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
-1E79;N;LATIN SMALL LETTER U WITH TILDE AND ACUTE
-1E7A;N;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
-1E7B;N;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
-1E7C;N;LATIN CAPITAL LETTER V WITH TILDE
-1E7D;N;LATIN SMALL LETTER V WITH TILDE
-1E7E;N;LATIN CAPITAL LETTER V WITH DOT BELOW
-1E7F;N;LATIN SMALL LETTER V WITH DOT BELOW
-1E80;N;LATIN CAPITAL LETTER W WITH GRAVE
-1E81;N;LATIN SMALL LETTER W WITH GRAVE
-1E82;N;LATIN CAPITAL LETTER W WITH ACUTE
-1E83;N;LATIN SMALL LETTER W WITH ACUTE
-1E84;N;LATIN CAPITAL LETTER W WITH DIAERESIS
-1E85;N;LATIN SMALL LETTER W WITH DIAERESIS
-1E86;N;LATIN CAPITAL LETTER W WITH DOT ABOVE
-1E87;N;LATIN SMALL LETTER W WITH DOT ABOVE
-1E88;N;LATIN CAPITAL LETTER W WITH DOT BELOW
-1E89;N;LATIN SMALL LETTER W WITH DOT BELOW
-1E8A;N;LATIN CAPITAL LETTER X WITH DOT ABOVE
-1E8B;N;LATIN SMALL LETTER X WITH DOT ABOVE
-1E8C;N;LATIN CAPITAL LETTER X WITH DIAERESIS
-1E8D;N;LATIN SMALL LETTER X WITH DIAERESIS
-1E8E;N;LATIN CAPITAL LETTER Y WITH DOT ABOVE
-1E8F;N;LATIN SMALL LETTER Y WITH DOT ABOVE
-1E90;N;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
-1E91;N;LATIN SMALL LETTER Z WITH CIRCUMFLEX
-1E92;N;LATIN CAPITAL LETTER Z WITH DOT BELOW
-1E93;N;LATIN SMALL LETTER Z WITH DOT BELOW
-1E94;N;LATIN CAPITAL LETTER Z WITH LINE BELOW
-1E95;N;LATIN SMALL LETTER Z WITH LINE BELOW
-1E96;N;LATIN SMALL LETTER H WITH LINE BELOW
-1E97;N;LATIN SMALL LETTER T WITH DIAERESIS
-1E98;N;LATIN SMALL LETTER W WITH RING ABOVE
-1E99;N;LATIN SMALL LETTER Y WITH RING ABOVE
-1E9A;N;LATIN SMALL LETTER A WITH RIGHT HALF RING
-1E9B;N;LATIN SMALL LETTER LONG S WITH DOT ABOVE
-1EA0;N;LATIN CAPITAL LETTER A WITH DOT BELOW
-1EA1;N;LATIN SMALL LETTER A WITH DOT BELOW
-1EA2;N;LATIN CAPITAL LETTER A WITH HOOK ABOVE
-1EA3;N;LATIN SMALL LETTER A WITH HOOK ABOVE
-1EA4;N;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-1EA5;N;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
-1EA6;N;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-1EA7;N;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
-1EA8;N;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1EA9;N;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1EAA;N;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-1EAB;N;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
-1EAC;N;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1EAD;N;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1EAE;N;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-1EAF;N;LATIN SMALL LETTER A WITH BREVE AND ACUTE
-1EB0;N;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-1EB1;N;LATIN SMALL LETTER A WITH BREVE AND GRAVE
-1EB2;N;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-1EB3;N;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
-1EB4;N;LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-1EB5;N;LATIN SMALL LETTER A WITH BREVE AND TILDE
-1EB6;N;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-1EB7;N;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
-1EB8;N;LATIN CAPITAL LETTER E WITH DOT BELOW
-1EB9;N;LATIN SMALL LETTER E WITH DOT BELOW
-1EBA;N;LATIN CAPITAL LETTER E WITH HOOK ABOVE
-1EBB;N;LATIN SMALL LETTER E WITH HOOK ABOVE
-1EBC;N;LATIN CAPITAL LETTER E WITH TILDE
-1EBD;N;LATIN SMALL LETTER E WITH TILDE
-1EBE;N;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-1EBF;N;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
-1EC0;N;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-1EC1;N;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
-1EC2;N;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1EC3;N;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1EC4;N;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-1EC5;N;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
-1EC6;N;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1EC7;N;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1EC8;N;LATIN CAPITAL LETTER I WITH HOOK ABOVE
-1EC9;N;LATIN SMALL LETTER I WITH HOOK ABOVE
-1ECA;N;LATIN CAPITAL LETTER I WITH DOT BELOW
-1ECB;N;LATIN SMALL LETTER I WITH DOT BELOW
-1ECC;N;LATIN CAPITAL LETTER O WITH DOT BELOW
-1ECD;N;LATIN SMALL LETTER O WITH DOT BELOW
-1ECE;N;LATIN CAPITAL LETTER O WITH HOOK ABOVE
-1ECF;N;LATIN SMALL LETTER O WITH HOOK ABOVE
-1ED0;N;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ED1;N;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ED2;N;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ED3;N;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ED4;N;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ED5;N;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ED6;N;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-1ED7;N;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
-1ED8;N;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1ED9;N;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1EDA;N;LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-1EDB;N;LATIN SMALL LETTER O WITH HORN AND ACUTE
-1EDC;N;LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-1EDD;N;LATIN SMALL LETTER O WITH HORN AND GRAVE
-1EDE;N;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-1EDF;N;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
-1EE0;N;LATIN CAPITAL LETTER O WITH HORN AND TILDE
-1EE1;N;LATIN SMALL LETTER O WITH HORN AND TILDE
-1EE2;N;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-1EE3;N;LATIN SMALL LETTER O WITH HORN AND DOT BELOW
-1EE4;N;LATIN CAPITAL LETTER U WITH DOT BELOW
-1EE5;N;LATIN SMALL LETTER U WITH DOT BELOW
-1EE6;N;LATIN CAPITAL LETTER U WITH HOOK ABOVE
-1EE7;N;LATIN SMALL LETTER U WITH HOOK ABOVE
-1EE8;N;LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-1EE9;N;LATIN SMALL LETTER U WITH HORN AND ACUTE
-1EEA;N;LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-1EEB;N;LATIN SMALL LETTER U WITH HORN AND GRAVE
-1EEC;N;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-1EED;N;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
-1EEE;N;LATIN CAPITAL LETTER U WITH HORN AND TILDE
-1EEF;N;LATIN SMALL LETTER U WITH HORN AND TILDE
-1EF0;N;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-1EF1;N;LATIN SMALL LETTER U WITH HORN AND DOT BELOW
-1EF2;N;LATIN CAPITAL LETTER Y WITH GRAVE
-1EF3;N;LATIN SMALL LETTER Y WITH GRAVE
-1EF4;N;LATIN CAPITAL LETTER Y WITH DOT BELOW
-1EF5;N;LATIN SMALL LETTER Y WITH DOT BELOW
-1EF6;N;LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-1EF7;N;LATIN SMALL LETTER Y WITH HOOK ABOVE
-1EF8;N;LATIN CAPITAL LETTER Y WITH TILDE
-1EF9;N;LATIN SMALL LETTER Y WITH TILDE
-1F00;N;GREEK SMALL LETTER ALPHA WITH PSILI
-1F01;N;GREEK SMALL LETTER ALPHA WITH DASIA
-1F02;N;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
-1F03;N;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
-1F04;N;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
-1F05;N;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
-1F06;N;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1F07;N;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1F08;N;GREEK CAPITAL LETTER ALPHA WITH PSILI
-1F09;N;GREEK CAPITAL LETTER ALPHA WITH DASIA
-1F0A;N;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
-1F0B;N;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
-1F0C;N;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
-1F0D;N;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
-1F0E;N;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1F0F;N;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1F10;N;GREEK SMALL LETTER EPSILON WITH PSILI
-1F11;N;GREEK SMALL LETTER EPSILON WITH DASIA
-1F12;N;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
-1F13;N;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
-1F14;N;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
-1F15;N;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-1F18;N;GREEK CAPITAL LETTER EPSILON WITH PSILI
-1F19;N;GREEK CAPITAL LETTER EPSILON WITH DASIA
-1F1A;N;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
-1F1B;N;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
-1F1C;N;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
-1F1D;N;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-1F20;N;GREEK SMALL LETTER ETA WITH PSILI
-1F21;N;GREEK SMALL LETTER ETA WITH DASIA
-1F22;N;GREEK SMALL LETTER ETA WITH PSILI AND VARIA
-1F23;N;GREEK SMALL LETTER ETA WITH DASIA AND VARIA
-1F24;N;GREEK SMALL LETTER ETA WITH PSILI AND OXIA
-1F25;N;GREEK SMALL LETTER ETA WITH DASIA AND OXIA
-1F26;N;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
-1F27;N;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
-1F28;N;GREEK CAPITAL LETTER ETA WITH PSILI
-1F29;N;GREEK CAPITAL LETTER ETA WITH DASIA
-1F2A;N;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
-1F2B;N;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
-1F2C;N;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
-1F2D;N;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
-1F2E;N;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
-1F2F;N;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
-1F30;N;GREEK SMALL LETTER IOTA WITH PSILI
-1F31;N;GREEK SMALL LETTER IOTA WITH DASIA
-1F32;N;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
-1F33;N;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
-1F34;N;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
-1F35;N;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
-1F36;N;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
-1F37;N;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
-1F38;N;GREEK CAPITAL LETTER IOTA WITH PSILI
-1F39;N;GREEK CAPITAL LETTER IOTA WITH DASIA
-1F3A;N;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
-1F3B;N;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
-1F3C;N;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
-1F3D;N;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
-1F3E;N;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
-1F3F;N;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
-1F40;N;GREEK SMALL LETTER OMICRON WITH PSILI
-1F41;N;GREEK SMALL LETTER OMICRON WITH DASIA
-1F42;N;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
-1F43;N;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
-1F44;N;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
-1F45;N;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-1F48;N;GREEK CAPITAL LETTER OMICRON WITH PSILI
-1F49;N;GREEK CAPITAL LETTER OMICRON WITH DASIA
-1F4A;N;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
-1F4B;N;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
-1F4C;N;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
-1F4D;N;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-1F50;N;GREEK SMALL LETTER UPSILON WITH PSILI
-1F51;N;GREEK SMALL LETTER UPSILON WITH DASIA
-1F52;N;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1F53;N;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
-1F54;N;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1F55;N;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
-1F56;N;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1F57;N;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1F59;N;GREEK CAPITAL LETTER UPSILON WITH DASIA
-1F5B;N;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-1F5D;N;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-1F5F;N;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1F60;N;GREEK SMALL LETTER OMEGA WITH PSILI
-1F61;N;GREEK SMALL LETTER OMEGA WITH DASIA
-1F62;N;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
-1F63;N;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
-1F64;N;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
-1F65;N;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
-1F66;N;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1F67;N;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1F68;N;GREEK CAPITAL LETTER OMEGA WITH PSILI
-1F69;N;GREEK CAPITAL LETTER OMEGA WITH DASIA
-1F6A;N;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
-1F6B;N;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
-1F6C;N;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
-1F6D;N;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
-1F6E;N;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1F6F;N;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1F70;N;GREEK SMALL LETTER ALPHA WITH VARIA
-1F71;N;GREEK SMALL LETTER ALPHA WITH OXIA
-1F72;N;GREEK SMALL LETTER EPSILON WITH VARIA
-1F73;N;GREEK SMALL LETTER EPSILON WITH OXIA
-1F74;N;GREEK SMALL LETTER ETA WITH VARIA
-1F75;N;GREEK SMALL LETTER ETA WITH OXIA
-1F76;N;GREEK SMALL LETTER IOTA WITH VARIA
-1F77;N;GREEK SMALL LETTER IOTA WITH OXIA
-1F78;N;GREEK SMALL LETTER OMICRON WITH VARIA
-1F79;N;GREEK SMALL LETTER OMICRON WITH OXIA
-1F7A;N;GREEK SMALL LETTER UPSILON WITH VARIA
-1F7B;N;GREEK SMALL LETTER UPSILON WITH OXIA
-1F7C;N;GREEK SMALL LETTER OMEGA WITH VARIA
-1F7D;N;GREEK SMALL LETTER OMEGA WITH OXIA
-1F80;N;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1F81;N;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1F82;N;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F83;N;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F84;N;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F85;N;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F86;N;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F87;N;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F88;N;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F89;N;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F8A;N;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8B;N;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8C;N;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8D;N;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8E;N;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F;N;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F90;N;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1F91;N;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1F92;N;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F93;N;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F94;N;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F95;N;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F96;N;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F97;N;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F98;N;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F99;N;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F9A;N;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9B;N;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9C;N;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9D;N;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9E;N;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F;N;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FA0;N;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1FA1;N;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1FA2;N;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1FA3;N;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1FA4;N;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1FA5;N;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1FA6;N;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1FA7;N;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1FA8;N;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA9;N;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FAA;N;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAB;N;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAC;N;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAD;N;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAE;N;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF;N;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FB0;N;GREEK SMALL LETTER ALPHA WITH VRACHY
-1FB1;N;GREEK SMALL LETTER ALPHA WITH MACRON
-1FB2;N;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1FB3;N;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1FB4;N;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FB6;N;GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1FB7;N;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FB8;N;GREEK CAPITAL LETTER ALPHA WITH VRACHY
-1FB9;N;GREEK CAPITAL LETTER ALPHA WITH MACRON
-1FBA;N;GREEK CAPITAL LETTER ALPHA WITH VARIA
-1FBB;N;GREEK CAPITAL LETTER ALPHA WITH OXIA
-1FBC;N;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FBD;N;GREEK KORONIS
-1FBE;N;GREEK PROSGEGRAMMENI
-1FBF;N;GREEK PSILI
-1FC0;N;GREEK PERISPOMENI
-1FC1;N;GREEK DIALYTIKA AND PERISPOMENI
-1FC2;N;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1FC3;N;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1FC4;N;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FC6;N;GREEK SMALL LETTER ETA WITH PERISPOMENI
-1FC7;N;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FC8;N;GREEK CAPITAL LETTER EPSILON WITH VARIA
-1FC9;N;GREEK CAPITAL LETTER EPSILON WITH OXIA
-1FCA;N;GREEK CAPITAL LETTER ETA WITH VARIA
-1FCB;N;GREEK CAPITAL LETTER ETA WITH OXIA
-1FCC;N;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FCD;N;GREEK PSILI AND VARIA
-1FCE;N;GREEK PSILI AND OXIA
-1FCF;N;GREEK PSILI AND PERISPOMENI
-1FD0;N;GREEK SMALL LETTER IOTA WITH VRACHY
-1FD1;N;GREEK SMALL LETTER IOTA WITH MACRON
-1FD2;N;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1FD3;N;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6;N;GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1FD7;N;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1FD8;N;GREEK CAPITAL LETTER IOTA WITH VRACHY
-1FD9;N;GREEK CAPITAL LETTER IOTA WITH MACRON
-1FDA;N;GREEK CAPITAL LETTER IOTA WITH VARIA
-1FDB;N;GREEK CAPITAL LETTER IOTA WITH OXIA
-1FDD;N;GREEK DASIA AND VARIA
-1FDE;N;GREEK DASIA AND OXIA
-1FDF;N;GREEK DASIA AND PERISPOMENI
-1FE0;N;GREEK SMALL LETTER UPSILON WITH VRACHY
-1FE1;N;GREEK SMALL LETTER UPSILON WITH MACRON
-1FE2;N;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1FE3;N;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1FE4;N;GREEK SMALL LETTER RHO WITH PSILI
-1FE5;N;GREEK SMALL LETTER RHO WITH DASIA
-1FE6;N;GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1FE7;N;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1FE8;N;GREEK CAPITAL LETTER UPSILON WITH VRACHY
-1FE9;N;GREEK CAPITAL LETTER UPSILON WITH MACRON
-1FEA;N;GREEK CAPITAL LETTER UPSILON WITH VARIA
-1FEB;N;GREEK CAPITAL LETTER UPSILON WITH OXIA
-1FEC;N;GREEK CAPITAL LETTER RHO WITH DASIA
-1FED;N;GREEK DIALYTIKA AND VARIA
-1FEE;N;GREEK DIALYTIKA AND OXIA
-1FEF;N;GREEK VARIA
-1FF2;N;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1FF3;N;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1FF4;N;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-1FF6;N;GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-1FF7;N;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FF8;N;GREEK CAPITAL LETTER OMICRON WITH VARIA
-1FF9;N;GREEK CAPITAL LETTER OMICRON WITH OXIA
-1FFA;N;GREEK CAPITAL LETTER OMEGA WITH VARIA
-1FFB;N;GREEK CAPITAL LETTER OMEGA WITH OXIA
-1FFC;N;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-1FFD;N;GREEK OXIA
-1FFE;N;GREEK DASIA
-2000;N;EN QUAD
-2001;N;EM QUAD
-2002;N;EN SPACE
-2003;N;EM SPACE
-2004;N;THREE-PER-EM SPACE
-2005;N;FOUR-PER-EM SPACE
-2006;N;SIX-PER-EM SPACE
-2007;N;FIGURE SPACE
-2008;N;PUNCTUATION SPACE
-2009;N;THIN SPACE
-200A;N;HAIR SPACE
-200B;N;ZERO WIDTH SPACE
-200C;N;ZERO WIDTH NON-JOINER
-200D;N;ZERO WIDTH JOINER
-200E;N;LEFT-TO-RIGHT MARK
-200F;N;RIGHT-TO-LEFT MARK
-2010;A;HYPHEN
-2011;N;NON-BREAKING HYPHEN
-2012;N;FIGURE DASH
-2013;A;EN DASH
-2014;A;EM DASH
-2015;A;HORIZONTAL BAR
-2016;A;DOUBLE VERTICAL LINE
-2017;N;DOUBLE LOW LINE
-2018;A;LEFT SINGLE QUOTATION MARK
-2019;A;RIGHT SINGLE QUOTATION MARK
-201A;N;SINGLE LOW-9 QUOTATION MARK
-201B;N;SINGLE HIGH-REVERSED-9 QUOTATION MARK
-201C;A;LEFT DOUBLE QUOTATION MARK
-201D;A;RIGHT DOUBLE QUOTATION MARK
-201E;N;DOUBLE LOW-9 QUOTATION MARK
-201F;N;DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-2020;A;DAGGER
-2021;A;DOUBLE DAGGER
-2022;N;BULLET
-2023;N;TRIANGULAR BULLET
-2024;N;ONE DOT LEADER
-2025;A;TWO DOT LEADER
-2026;A;HORIZONTAL ELLIPSIS
-2027;A;HYPHENATION POINT
-2028;N;LINE SEPARATOR
-2029;N;PARAGRAPH SEPARATOR
-202A;N;LEFT-TO-RIGHT EMBEDDING
-202B;N;RIGHT-TO-LEFT EMBEDDING
-202C;N;POP DIRECTIONAL FORMATTING
-202D;N;LEFT-TO-RIGHT OVERRIDE
-202E;N;RIGHT-TO-LEFT OVERRIDE
-202F;N;NARROW NO-BREAK SPACE
-2030;A;PER MILLE SIGN
-2031;N;PER TEN THOUSAND SIGN
-2032;A;PRIME
-2033;A;DOUBLE PRIME
-2034;N;TRIPLE PRIME
-2035;A;REVERSED PRIME
-2036;N;REVERSED DOUBLE PRIME
-2037;N;REVERSED TRIPLE PRIME
-2038;N;CARET
-2039;N;SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-203A;N;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-203B;A;REFERENCE MARK
-203C;N;DOUBLE EXCLAMATION MARK
-203D;N;INTERROBANG
-203E;N;OVERLINE
-203F;N;UNDERTIE
-2040;N;CHARACTER TIE
-2041;N;CARET INSERTION POINT
-2042;N;ASTERISM
-2043;N;HYPHEN BULLET
-2044;N;FRACTION SLASH
-2045;N;LEFT SQUARE BRACKET WITH QUILL
-2046;N;RIGHT SQUARE BRACKET WITH QUILL
-2048;N;QUESTION EXCLAMATION MARK
-2049;N;EXCLAMATION QUESTION MARK
-204A;N;TIRONIAN SIGN ET
-204B;N;REVERSED PILCROW SIGN
-204C;N;BLACK LEFTWARDS BULLET
-204D;N;BLACK RIGHTWARDS BULLET
-206A;N;INHIBIT SYMMETRIC SWAPPING
-206B;N;ACTIVATE SYMMETRIC SWAPPING
-206C;N;INHIBIT ARABIC FORM SHAPING
-206D;N;ACTIVATE ARABIC FORM SHAPING
-206E;N;NATIONAL DIGIT SHAPES
-206F;N;NOMINAL DIGIT SHAPES
-2070;N;SUPERSCRIPT ZERO
-2074;A;SUPERSCRIPT FOUR
-2075;N;SUPERSCRIPT FIVE
-2076;N;SUPERSCRIPT SIX
-2077;N;SUPERSCRIPT SEVEN
-2078;N;SUPERSCRIPT EIGHT
-2079;N;SUPERSCRIPT NINE
-207A;N;SUPERSCRIPT PLUS SIGN
-207B;N;SUPERSCRIPT MINUS
-207C;N;SUPERSCRIPT EQUALS SIGN
-207D;N;SUPERSCRIPT LEFT PARENTHESIS
-207E;N;SUPERSCRIPT RIGHT PARENTHESIS
-207F;A;SUPERSCRIPT LATIN SMALL LETTER N
-2080;N;SUBSCRIPT ZERO
-2081;A;SUBSCRIPT ONE
-2082;A;SUBSCRIPT TWO
-2083;A;SUBSCRIPT THREE
-2084;A;SUBSCRIPT FOUR
-2085;N;SUBSCRIPT FIVE
-2086;N;SUBSCRIPT SIX
-2087;N;SUBSCRIPT SEVEN
-2088;N;SUBSCRIPT EIGHT
-2089;N;SUBSCRIPT NINE
-208A;N;SUBSCRIPT PLUS SIGN
-208B;N;SUBSCRIPT MINUS
-208C;N;SUBSCRIPT EQUALS SIGN
-208D;N;SUBSCRIPT LEFT PARENTHESIS
-208E;N;SUBSCRIPT RIGHT PARENTHESIS
-20A0;N;EURO-CURRENCY SIGN
-20A1;N;COLON SIGN
-20A2;N;CRUZEIRO SIGN
-20A3;N;FRENCH FRANC SIGN
-20A4;N;LIRA SIGN
-20A5;N;MILL SIGN
-20A6;N;NAIRA SIGN
-20A7;N;PESETA SIGN
-20A8;N;RUPEE SIGN
-20A9;H;WON SIGN
-20AA;N;NEW SHEQEL SIGN
-20AB;N;DONG SIGN
-20AC;A;EURO SIGN
-20AD;N;KIP SIGN
-20AE;N;TUGRIK SIGN
-20AF;N;DRACHMA SIGN
-20D0;N;COMBINING LEFT HARPOON ABOVE
-20D1;N;COMBINING RIGHT HARPOON ABOVE
-20D2;N;COMBINING LONG VERTICAL LINE OVERLAY
-20D3;N;COMBINING SHORT VERTICAL LINE OVERLAY
-20D4;N;COMBINING ANTICLOCKWISE ARROW ABOVE
-20D5;N;COMBINING CLOCKWISE ARROW ABOVE
-20D6;N;COMBINING LEFT ARROW ABOVE
-20D7;N;COMBINING RIGHT ARROW ABOVE
-20D8;N;COMBINING RING OVERLAY
-20D9;N;COMBINING CLOCKWISE RING OVERLAY
-20DA;N;COMBINING ANTICLOCKWISE RING OVERLAY
-20DB;N;COMBINING THREE DOTS ABOVE
-20DC;N;COMBINING FOUR DOTS ABOVE
-20DD;N;COMBINING ENCLOSING CIRCLE
-20DE;N;COMBINING ENCLOSING SQUARE
-20DF;N;COMBINING ENCLOSING DIAMOND
-20E0;N;COMBINING ENCLOSING CIRCLE BACKSLASH
-20E1;N;COMBINING LEFT RIGHT ARROW ABOVE
-20E2;N;COMBINING ENCLOSING SCREEN
-20E3;N;COMBINING ENCLOSING KEYCAP
-2100;N;ACCOUNT OF
-2101;N;ADDRESSED TO THE SUBJECT
-2102;N;DOUBLE-STRUCK CAPITAL C
-2103;A;DEGREE CELSIUS
-2104;N;CENTRE LINE SYMBOL
-2105;A;CARE OF
-2106;N;CADA UNA
-2107;N;EULER CONSTANT
-2108;N;SCRUPLE
-2109;A;DEGREE FAHRENHEIT
-210A;N;SCRIPT SMALL G
-210B;N;SCRIPT CAPITAL H
-210C;N;BLACK-LETTER CAPITAL H
-210D;N;DOUBLE-STRUCK CAPITAL H
-210E;N;PLANCK CONSTANT
-210F;N;PLANCK CONSTANT OVER TWO PI
-2110;N;SCRIPT CAPITAL I
-2111;N;BLACK-LETTER CAPITAL I
-2112;N;SCRIPT CAPITAL L
-2113;A;SCRIPT SMALL L
-2114;N;L B BAR SYMBOL
-2115;N;DOUBLE-STRUCK CAPITAL N
-2116;N;NUMERO SIGN
-2117;N;SOUND RECORDING COPYRIGHT
-2118;N;SCRIPT CAPITAL P
-2119;N;DOUBLE-STRUCK CAPITAL P
-211A;N;DOUBLE-STRUCK CAPITAL Q
-211B;N;SCRIPT CAPITAL R
-211C;N;BLACK-LETTER CAPITAL R
-211D;N;DOUBLE-STRUCK CAPITAL R
-211E;N;PRESCRIPTION TAKE
-211F;N;RESPONSE
-2120;N;SERVICE MARK
-2121;A;TELEPHONE SIGN
-2122;A;TRADE MARK SIGN
-2123;N;VERSICLE
-2124;N;DOUBLE-STRUCK CAPITAL Z
-2125;N;OUNCE SIGN
-2126;A;OHM SIGN
-2127;N;INVERTED OHM SIGN
-2128;N;BLACK-LETTER CAPITAL Z
-2129;N;TURNED GREEK SMALL LETTER IOTA
-212A;N;KELVIN SIGN
-212B;A;ANGSTROM SIGN
-212C;N;SCRIPT CAPITAL B
-212D;N;BLACK-LETTER CAPITAL C
-212E;N;ESTIMATED SYMBOL
-212F;N;SCRIPT SMALL E
-2130;N;SCRIPT CAPITAL E
-2131;N;SCRIPT CAPITAL F
-2132;N;TURNED CAPITAL F
-2133;N;SCRIPT CAPITAL M
-2134;N;SCRIPT SMALL O
-2135;N;ALEF SYMBOL
-2136;N;BET SYMBOL
-2137;N;GIMEL SYMBOL
-2138;N;DALET SYMBOL
-2139;N;INFORMATION SOURCE
-213A;N;ROTATED CAPITAL Q
-2153;N;VULGAR FRACTION ONE THIRD
-2154;A;VULGAR FRACTION TWO THIRDS
-2155;A;VULGAR FRACTION ONE FIFTH
-2156;N;VULGAR FRACTION TWO FIFTHS
-2157;N;VULGAR FRACTION THREE FIFTHS
-2158;N;VULGAR FRACTION FOUR FIFTHS
-2159;N;VULGAR FRACTION ONE SIXTH
-215A;N;VULGAR FRACTION FIVE SIXTHS
-215B;A;VULGAR FRACTION ONE EIGHTH
-215C;N;VULGAR FRACTION THREE EIGHTHS
-215D;N;VULGAR FRACTION FIVE EIGHTHS
-215E;A;VULGAR FRACTION SEVEN EIGHTHS
-215F;N;FRACTION NUMERATOR ONE
-2160;A;ROMAN NUMERAL ONE
-2161;A;ROMAN NUMERAL TWO
-2162;A;ROMAN NUMERAL THREE
-2163;A;ROMAN NUMERAL FOUR
-2164;A;ROMAN NUMERAL FIVE
-2165;A;ROMAN NUMERAL SIX
-2166;A;ROMAN NUMERAL SEVEN
-2167;A;ROMAN NUMERAL EIGHT
-2168;A;ROMAN NUMERAL NINE
-2169;A;ROMAN NUMERAL TEN
-216A;A;ROMAN NUMERAL ELEVEN
-216B;A;ROMAN NUMERAL TWELVE
-216C;N;ROMAN NUMERAL FIFTY
-216D;N;ROMAN NUMERAL ONE HUNDRED
-216E;N;ROMAN NUMERAL FIVE HUNDRED
-216F;N;ROMAN NUMERAL ONE THOUSAND
-2170;A;SMALL ROMAN NUMERAL ONE
-2171;A;SMALL ROMAN NUMERAL TWO
-2172;A;SMALL ROMAN NUMERAL THREE
-2173;A;SMALL ROMAN NUMERAL FOUR
-2174;A;SMALL ROMAN NUMERAL FIVE
-2175;A;SMALL ROMAN NUMERAL SIX
-2176;A;SMALL ROMAN NUMERAL SEVEN
-2177;A;SMALL ROMAN NUMERAL EIGHT
-2178;A;SMALL ROMAN NUMERAL NINE
-2179;A;SMALL ROMAN NUMERAL TEN
-217A;N;SMALL ROMAN NUMERAL ELEVEN
-217B;N;SMALL ROMAN NUMERAL TWELVE
-217C;N;SMALL ROMAN NUMERAL FIFTY
-217D;N;SMALL ROMAN NUMERAL ONE HUNDRED
-217E;N;SMALL ROMAN NUMERAL FIVE HUNDRED
-217F;N;SMALL ROMAN NUMERAL ONE THOUSAND
-2180;N;ROMAN NUMERAL ONE THOUSAND C D
-2181;N;ROMAN NUMERAL FIVE THOUSAND
-2182;N;ROMAN NUMERAL TEN THOUSAND
-2183;N;ROMAN NUMERAL REVERSED ONE HUNDRED
-2190;A;LEFTWARDS ARROW
-2191;A;UPWARDS ARROW
-2192;A;RIGHTWARDS ARROW
-2193;A;DOWNWARDS ARROW
-2194;A;LEFT RIGHT ARROW
-2195;A;UP DOWN ARROW
-2196;A;NORTH WEST ARROW
-2197;A;NORTH EAST ARROW
-2198;A;SOUTH EAST ARROW
-2199;A;SOUTH WEST ARROW
-219A;N;LEFTWARDS ARROW WITH STROKE
-219B;N;RIGHTWARDS ARROW WITH STROKE
-219C;N;LEFTWARDS WAVE ARROW
-219D;N;RIGHTWARDS WAVE ARROW
-219E;N;LEFTWARDS TWO HEADED ARROW
-219F;N;UPWARDS TWO HEADED ARROW
-21A0;N;RIGHTWARDS TWO HEADED ARROW
-21A1;N;DOWNWARDS TWO HEADED ARROW
-21A2;N;LEFTWARDS ARROW WITH TAIL
-21A3;N;RIGHTWARDS ARROW WITH TAIL
-21A4;N;LEFTWARDS ARROW FROM BAR
-21A5;N;UPWARDS ARROW FROM BAR
-21A6;N;RIGHTWARDS ARROW FROM BAR
-21A7;N;DOWNWARDS ARROW FROM BAR
-21A8;N;UP DOWN ARROW WITH BASE
-21A9;N;LEFTWARDS ARROW WITH HOOK
-21AA;N;RIGHTWARDS ARROW WITH HOOK
-21AB;N;LEFTWARDS ARROW WITH LOOP
-21AC;N;RIGHTWARDS ARROW WITH LOOP
-21AD;N;LEFT RIGHT WAVE ARROW
-21AE;N;LEFT RIGHT ARROW WITH STROKE
-21AF;N;DOWNWARDS ZIGZAG ARROW
-21B0;N;UPWARDS ARROW WITH TIP LEFTWARDS
-21B1;N;UPWARDS ARROW WITH TIP RIGHTWARDS
-21B2;N;DOWNWARDS ARROW WITH TIP LEFTWARDS
-21B3;N;DOWNWARDS ARROW WITH TIP RIGHTWARDS
-21B4;N;RIGHTWARDS ARROW WITH CORNER DOWNWARDS
-21B5;N;DOWNWARDS ARROW WITH CORNER LEFTWARDS
-21B6;N;ANTICLOCKWISE TOP SEMICIRCLE ARROW
-21B7;N;CLOCKWISE TOP SEMICIRCLE ARROW
-21B8;N;NORTH WEST ARROW TO LONG BAR
-21B9;N;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
-21BA;N;ANTICLOCKWISE OPEN CIRCLE ARROW
-21BB;N;CLOCKWISE OPEN CIRCLE ARROW
-21BC;N;LEFTWARDS HARPOON WITH BARB UPWARDS
-21BD;N;LEFTWARDS HARPOON WITH BARB DOWNWARDS
-21BE;N;UPWARDS HARPOON WITH BARB RIGHTWARDS
-21BF;N;UPWARDS HARPOON WITH BARB LEFTWARDS
-21C0;N;RIGHTWARDS HARPOON WITH BARB UPWARDS
-21C1;N;RIGHTWARDS HARPOON WITH BARB DOWNWARDS
-21C2;N;DOWNWARDS HARPOON WITH BARB RIGHTWARDS
-21C3;N;DOWNWARDS HARPOON WITH BARB LEFTWARDS
-21C4;N;RIGHTWARDS ARROW OVER LEFTWARDS ARROW
-21C5;N;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
-21C6;N;LEFTWARDS ARROW OVER RIGHTWARDS ARROW
-21C7;N;LEFTWARDS PAIRED ARROWS
-21C8;N;UPWARDS PAIRED ARROWS
-21C9;N;RIGHTWARDS PAIRED ARROWS
-21CA;N;DOWNWARDS PAIRED ARROWS
-21CB;N;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
-21CC;N;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
-21CD;N;LEFTWARDS DOUBLE ARROW WITH STROKE
-21CE;N;LEFT RIGHT DOUBLE ARROW WITH STROKE
-21CF;N;RIGHTWARDS DOUBLE ARROW WITH STROKE
-21D0;N;LEFTWARDS DOUBLE ARROW
-21D1;N;UPWARDS DOUBLE ARROW
-21D2;A;RIGHTWARDS DOUBLE ARROW
-21D3;N;DOWNWARDS DOUBLE ARROW
-21D4;A;LEFT RIGHT DOUBLE ARROW
-21D5;N;UP DOWN DOUBLE ARROW
-21D6;N;NORTH WEST DOUBLE ARROW
-21D7;N;NORTH EAST DOUBLE ARROW
-21D8;N;SOUTH EAST DOUBLE ARROW
-21D9;N;SOUTH WEST DOUBLE ARROW
-21DA;N;LEFTWARDS TRIPLE ARROW
-21DB;N;RIGHTWARDS TRIPLE ARROW
-21DC;N;LEFTWARDS SQUIGGLE ARROW
-21DD;N;RIGHTWARDS SQUIGGLE ARROW
-21DE;N;UPWARDS ARROW WITH DOUBLE STROKE
-21DF;N;DOWNWARDS ARROW WITH DOUBLE STROKE
-21E0;N;LEFTWARDS DASHED ARROW
-21E1;N;UPWARDS DASHED ARROW
-21E2;N;RIGHTWARDS DASHED ARROW
-21E3;N;DOWNWARDS DASHED ARROW
-21E4;N;LEFTWARDS ARROW TO BAR
-21E5;N;RIGHTWARDS ARROW TO BAR
-21E6;N;LEFTWARDS WHITE ARROW
-21E7;N;UPWARDS WHITE ARROW
-21E8;N;RIGHTWARDS WHITE ARROW
-21E9;N;DOWNWARDS WHITE ARROW
-21EA;N;UPWARDS WHITE ARROW FROM BAR
-21EB;N;UPWARDS WHITE ARROW ON PEDESTAL
-21EC;N;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
-21ED;N;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
-21EE;N;UPWARDS WHITE DOUBLE ARROW
-21EF;N;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
-21F0;N;RIGHTWARDS WHITE ARROW FROM WALL
-21F1;N;NORTH WEST ARROW TO CORNER
-21F2;N;SOUTH EAST ARROW TO CORNER
-21F3;N;UP DOWN WHITE ARROW
-2200;A;FOR ALL
-2201;N;COMPLEMENT
-2202;A;PARTIAL DIFFERENTIAL
-2203;A;THERE EXISTS
-2204;N;THERE DOES NOT EXIST
-2205;N;EMPTY SET
-2206;N;INCREMENT
-2207;A;NABLA
-2208;A;ELEMENT OF
-2209;N;NOT AN ELEMENT OF
-220A;N;SMALL ELEMENT OF
-220B;A;CONTAINS AS MEMBER
-220C;N;DOES NOT CONTAIN AS MEMBER
-220D;N;SMALL CONTAINS AS MEMBER
-220E;N;END OF PROOF
-220F;A;N-ARY PRODUCT
-2210;N;N-ARY COPRODUCT
-2211;A;N-ARY SUMMATION
-2212;N;MINUS SIGN
-2213;N;MINUS-OR-PLUS SIGN
-2214;N;DOT PLUS
-2215;A;DIVISION SLASH
-2216;N;SET MINUS
-2217;N;ASTERISK OPERATOR
-2218;N;RING OPERATOR
-2219;N;BULLET OPERATOR
-221A;A;SQUARE ROOT
-221B;N;CUBE ROOT
-221C;N;FOURTH ROOT
-221D;A;PROPORTIONAL TO
-221E;A;INFINITY
-221F;A;RIGHT ANGLE
-2220;A;ANGLE
-2221;N;MEASURED ANGLE
-2222;N;SPHERICAL ANGLE
-2223;A;DIVIDES
-2224;N;DOES NOT DIVIDE
-2225;A;PARALLEL TO
-2226;N;NOT PARALLEL TO
-2227;A;LOGICAL AND
-2228;A;LOGICAL OR
-2229;A;INTERSECTION
-222A;A;UNION
-222B;A;INTEGRAL
-222C;A;DOUBLE INTEGRAL
-222D;N;TRIPLE INTEGRAL
-222E;A;CONTOUR INTEGRAL
-222F;N;SURFACE INTEGRAL
-2230;N;VOLUME INTEGRAL
-2231;N;CLOCKWISE INTEGRAL
-2232;N;CLOCKWISE CONTOUR INTEGRAL
-2233;N;ANTICLOCKWISE CONTOUR INTEGRAL
-2234;A;THEREFORE
-2235;A;BECAUSE
-2236;A;RATIO
-2237;A;PROPORTION
-2238;N;DOT MINUS
-2239;N;EXCESS
-223A;N;GEOMETRIC PROPORTION
-223B;N;HOMOTHETIC
-223C;A;TILDE OPERATOR
-223D;A;REVERSED TILDE
-223E;N;INVERTED LAZY S
-223F;N;SINE WAVE
-2240;N;WREATH PRODUCT
-2241;N;NOT TILDE
-2242;N;MINUS TILDE
-2243;N;ASYMPTOTICALLY EQUAL TO
-2244;N;NOT ASYMPTOTICALLY EQUAL TO
-2245;N;APPROXIMATELY EQUAL TO
-2246;N;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
-2247;N;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
-2248;A;ALMOST EQUAL TO
-2249;N;NOT ALMOST EQUAL TO
-224A;N;ALMOST EQUAL OR EQUAL TO
-224B;N;TRIPLE TILDE
-224C;A;ALL EQUAL TO
-224D;N;EQUIVALENT TO
-224E;N;GEOMETRICALLY EQUIVALENT TO
-224F;N;DIFFERENCE BETWEEN
-2250;N;APPROACHES THE LIMIT
-2251;N;GEOMETRICALLY EQUAL TO
-2252;A;APPROXIMATELY EQUAL TO OR THE IMAGE OF
-2253;N;IMAGE OF OR APPROXIMATELY EQUAL TO
-2254;N;COLON EQUALS
-2255;N;EQUALS COLON
-2256;N;RING IN EQUAL TO
-2257;N;RING EQUAL TO
-2258;N;CORRESPONDS TO
-2259;N;ESTIMATES
-225A;N;EQUIANGULAR TO
-225B;N;STAR EQUALS
-225C;N;DELTA EQUAL TO
-225D;N;EQUAL TO BY DEFINITION
-225E;N;MEASURED BY
-225F;N;QUESTIONED EQUAL TO
-2260;A;NOT EQUAL TO
-2261;A;IDENTICAL TO
-2262;N;NOT IDENTICAL TO
-2263;N;STRICTLY EQUIVALENT TO
-2264;A;LESS-THAN OR EQUAL TO
-2265;A;GREATER-THAN OR EQUAL TO
-2266;A;LESS-THAN OVER EQUAL TO
-2267;A;GREATER-THAN OVER EQUAL TO
-2268;N;LESS-THAN BUT NOT EQUAL TO
-2269;N;GREATER-THAN BUT NOT EQUAL TO
-226A;A;MUCH LESS-THAN
-226B;A;MUCH GREATER-THAN
-226C;N;BETWEEN
-226D;N;NOT EQUIVALENT TO
-226E;A;NOT LESS-THAN
-226F;A;NOT GREATER-THAN
-2270;N;NEITHER LESS-THAN NOR EQUAL TO
-2271;N;NEITHER GREATER-THAN NOR EQUAL TO
-2272;N;LESS-THAN OR EQUIVALENT TO
-2273;N;GREATER-THAN OR EQUIVALENT TO
-2274;N;NEITHER LESS-THAN NOR EQUIVALENT TO
-2275;N;NEITHER GREATER-THAN NOR EQUIVALENT TO
-2276;N;LESS-THAN OR GREATER-THAN
-2277;N;GREATER-THAN OR LESS-THAN
-2278;N;NEITHER LESS-THAN NOR GREATER-THAN
-2279;N;NEITHER GREATER-THAN NOR LESS-THAN
-227A;N;PRECEDES
-227B;N;SUCCEEDS
-227C;N;PRECEDES OR EQUAL TO
-227D;N;SUCCEEDS OR EQUAL TO
-227E;N;PRECEDES OR EQUIVALENT TO
-227F;N;SUCCEEDS OR EQUIVALENT TO
-2280;N;DOES NOT PRECEDE
-2281;N;DOES NOT SUCCEED
-2282;A;SUBSET OF
-2283;A;SUPERSET OF
-2284;N;NOT A SUBSET OF
-2285;N;NOT A SUPERSET OF
-2286;A;SUBSET OF OR EQUAL TO
-2287;A;SUPERSET OF OR EQUAL TO
-2288;N;NEITHER A SUBSET OF NOR EQUAL TO
-2289;N;NEITHER A SUPERSET OF NOR EQUAL TO
-228A;N;SUBSET OF WITH NOT EQUAL TO
-228B;N;SUPERSET OF WITH NOT EQUAL TO
-228C;N;MULTISET
-228D;N;MULTISET MULTIPLICATION
-228E;N;MULTISET UNION
-228F;N;SQUARE IMAGE OF
-2290;N;SQUARE ORIGINAL OF
-2291;N;SQUARE IMAGE OF OR EQUAL TO
-2292;N;SQUARE ORIGINAL OF OR EQUAL TO
-2293;N;SQUARE CAP
-2294;N;SQUARE CUP
-2295;A;CIRCLED PLUS
-2296;N;CIRCLED MINUS
-2297;N;CIRCLED TIMES
-2298;N;CIRCLED DIVISION SLASH
-2299;A;CIRCLED DOT OPERATOR
-229A;N;CIRCLED RING OPERATOR
-229B;N;CIRCLED ASTERISK OPERATOR
-229C;N;CIRCLED EQUALS
-229D;N;CIRCLED DASH
-229E;N;SQUARED PLUS
-229F;N;SQUARED MINUS
-22A0;N;SQUARED TIMES
-22A1;N;SQUARED DOT OPERATOR
-22A2;N;RIGHT TACK
-22A3;N;LEFT TACK
-22A4;N;DOWN TACK
-22A5;A;UP TACK
-22A6;N;ASSERTION
-22A7;N;MODELS
-22A8;N;TRUE
-22A9;N;FORCES
-22AA;N;TRIPLE VERTICAL BAR RIGHT TURNSTILE
-22AB;N;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-22AC;N;DOES NOT PROVE
-22AD;N;NOT TRUE
-22AE;N;DOES NOT FORCE
-22AF;N;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-22B0;N;PRECEDES UNDER RELATION
-22B1;N;SUCCEEDS UNDER RELATION
-22B2;N;NORMAL SUBGROUP OF
-22B3;N;CONTAINS AS NORMAL SUBGROUP
-22B4;N;NORMAL SUBGROUP OF OR EQUAL TO
-22B5;N;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
-22B6;N;ORIGINAL OF
-22B7;N;IMAGE OF
-22B8;N;MULTIMAP
-22B9;N;HERMITIAN CONJUGATE MATRIX
-22BA;N;INTERCALATE
-22BB;N;XOR
-22BC;N;NAND
-22BD;N;NOR
-22BE;N;RIGHT ANGLE WITH ARC
-22BF;A;RIGHT TRIANGLE
-22C0;N;N-ARY LOGICAL AND
-22C1;N;N-ARY LOGICAL OR
-22C2;N;N-ARY INTERSECTION
-22C3;N;N-ARY UNION
-22C4;N;DIAMOND OPERATOR
-22C5;N;DOT OPERATOR
-22C6;N;STAR OPERATOR
-22C7;N;DIVISION TIMES
-22C8;N;BOWTIE
-22C9;N;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
-22CA;N;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
-22CB;N;LEFT SEMIDIRECT PRODUCT
-22CC;N;RIGHT SEMIDIRECT PRODUCT
-22CD;N;REVERSED TILDE EQUALS
-22CE;N;CURLY LOGICAL OR
-22CF;N;CURLY LOGICAL AND
-22D0;N;DOUBLE SUBSET
-22D1;N;DOUBLE SUPERSET
-22D2;N;DOUBLE INTERSECTION
-22D3;N;DOUBLE UNION
-22D4;N;PITCHFORK
-22D5;N;EQUAL AND PARALLEL TO
-22D6;N;LESS-THAN WITH DOT
-22D7;N;GREATER-THAN WITH DOT
-22D8;N;VERY MUCH LESS-THAN
-22D9;N;VERY MUCH GREATER-THAN
-22DA;N;LESS-THAN EQUAL TO OR GREATER-THAN
-22DB;N;GREATER-THAN EQUAL TO OR LESS-THAN
-22DC;N;EQUAL TO OR LESS-THAN
-22DD;N;EQUAL TO OR GREATER-THAN
-22DE;N;EQUAL TO OR PRECEDES
-22DF;N;EQUAL TO OR SUCCEEDS
-22E0;N;DOES NOT PRECEDE OR EQUAL
-22E1;N;DOES NOT SUCCEED OR EQUAL
-22E2;N;NOT SQUARE IMAGE OF OR EQUAL TO
-22E3;N;NOT SQUARE ORIGINAL OF OR EQUAL TO
-22E4;N;SQUARE IMAGE OF OR NOT EQUAL TO
-22E5;N;SQUARE ORIGINAL OF OR NOT EQUAL TO
-22E6;N;LESS-THAN BUT NOT EQUIVALENT TO
-22E7;N;GREATER-THAN BUT NOT EQUIVALENT TO
-22E8;N;PRECEDES BUT NOT EQUIVALENT TO
-22E9;N;SUCCEEDS BUT NOT EQUIVALENT TO
-22EA;N;NOT NORMAL SUBGROUP OF
-22EB;N;DOES NOT CONTAIN AS NORMAL SUBGROUP
-22EC;N;NOT NORMAL SUBGROUP OF OR EQUAL TO
-22ED;N;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
-22EE;N;VERTICAL ELLIPSIS
-22EF;N;MIDLINE HORIZONTAL ELLIPSIS
-22F0;N;UP RIGHT DIAGONAL ELLIPSIS
-22F1;N;DOWN RIGHT DIAGONAL ELLIPSIS
-2300;N;DIAMETER SIGN
-2301;N;ELECTRIC ARROW
-2302;N;HOUSE
-2303;N;UP ARROWHEAD
-2304;N;DOWN ARROWHEAD
-2305;N;PROJECTIVE
-2306;N;PERSPECTIVE
-2307;N;WAVY LINE
-2308;N;LEFT CEILING
-2309;N;RIGHT CEILING
-230A;N;LEFT FLOOR
-230B;N;RIGHT FLOOR
-230C;N;BOTTOM RIGHT CROP
-230D;N;BOTTOM LEFT CROP
-230E;N;TOP RIGHT CROP
-230F;N;TOP LEFT CROP
-2310;N;REVERSED NOT SIGN
-2311;N;SQUARE LOZENGE
-2312;A;ARC
-2313;N;SEGMENT
-2314;N;SECTOR
-2315;N;TELEPHONE RECORDER
-2316;N;POSITION INDICATOR
-2317;N;VIEWDATA SQUARE
-2318;N;PLACE OF INTEREST SIGN
-2319;N;TURNED NOT SIGN
-231A;N;WATCH
-231B;N;HOURGLASS
-231C;N;TOP LEFT CORNER
-231D;N;TOP RIGHT CORNER
-231E;N;BOTTOM LEFT CORNER
-231F;N;BOTTOM RIGHT CORNER
-2320;N;TOP HALF INTEGRAL
-2321;N;BOTTOM HALF INTEGRAL
-2322;N;FROWN
-2323;N;SMILE
-2324;N;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
-2325;N;OPTION KEY
-2326;N;ERASE TO THE RIGHT
-2327;N;X IN A RECTANGLE BOX
-2328;N;KEYBOARD
-2329;N;LEFT-POINTING ANGLE BRACKET
-232A;N;RIGHT-POINTING ANGLE BRACKET
-232B;N;ERASE TO THE LEFT
-232C;N;BENZENE RING
-232D;N;CYLINDRICITY
-232E;N;ALL AROUND-PROFILE
-232F;N;SYMMETRY
-2330;N;TOTAL RUNOUT
-2331;N;DIMENSION ORIGIN
-2332;N;CONICAL TAPER
-2333;N;SLOPE
-2334;N;COUNTERBORE
-2335;N;COUNTERSINK
-2336;N;APL FUNCTIONAL SYMBOL I-BEAM
-2337;N;APL FUNCTIONAL SYMBOL SQUISH QUAD
-2338;N;APL FUNCTIONAL SYMBOL QUAD EQUAL
-2339;N;APL FUNCTIONAL SYMBOL QUAD DIVIDE
-233A;N;APL FUNCTIONAL SYMBOL QUAD DIAMOND
-233B;N;APL FUNCTIONAL SYMBOL QUAD JOT
-233C;N;APL FUNCTIONAL SYMBOL QUAD CIRCLE
-233D;N;APL FUNCTIONAL SYMBOL CIRCLE STILE
-233E;N;APL FUNCTIONAL SYMBOL CIRCLE JOT
-233F;N;APL FUNCTIONAL SYMBOL SLASH BAR
-2340;N;APL FUNCTIONAL SYMBOL BACKSLASH BAR
-2341;N;APL FUNCTIONAL SYMBOL QUAD SLASH
-2342;N;APL FUNCTIONAL SYMBOL QUAD BACKSLASH
-2343;N;APL FUNCTIONAL SYMBOL QUAD LESS-THAN
-2344;N;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
-2345;N;APL FUNCTIONAL SYMBOL LEFTWARDS VANE
-2346;N;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
-2347;N;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
-2348;N;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
-2349;N;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
-234A;N;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
-234B;N;APL FUNCTIONAL SYMBOL DELTA STILE
-234C;N;APL FUNCTIONAL SYMBOL QUAD DOWN CARET
-234D;N;APL FUNCTIONAL SYMBOL QUAD DELTA
-234E;N;APL FUNCTIONAL SYMBOL DOWN TACK JOT
-234F;N;APL FUNCTIONAL SYMBOL UPWARDS VANE
-2350;N;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
-2351;N;APL FUNCTIONAL SYMBOL UP TACK OVERBAR
-2352;N;APL FUNCTIONAL SYMBOL DEL STILE
-2353;N;APL FUNCTIONAL SYMBOL QUAD UP CARET
-2354;N;APL FUNCTIONAL SYMBOL QUAD DEL
-2355;N;APL FUNCTIONAL SYMBOL UP TACK JOT
-2356;N;APL FUNCTIONAL SYMBOL DOWNWARDS VANE
-2357;N;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
-2358;N;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
-2359;N;APL FUNCTIONAL SYMBOL DELTA UNDERBAR
-235A;N;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
-235B;N;APL FUNCTIONAL SYMBOL JOT UNDERBAR
-235C;N;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
-235D;N;APL FUNCTIONAL SYMBOL UP SHOE JOT
-235E;N;APL FUNCTIONAL SYMBOL QUOTE QUAD
-235F;N;APL FUNCTIONAL SYMBOL CIRCLE STAR
-2360;N;APL FUNCTIONAL SYMBOL QUAD COLON
-2361;N;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
-2362;N;APL FUNCTIONAL SYMBOL DEL DIAERESIS
-2363;N;APL FUNCTIONAL SYMBOL STAR DIAERESIS
-2364;N;APL FUNCTIONAL SYMBOL JOT DIAERESIS
-2365;N;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
-2366;N;APL FUNCTIONAL SYMBOL DOWN SHOE STILE
-2367;N;APL FUNCTIONAL SYMBOL LEFT SHOE STILE
-2368;N;APL FUNCTIONAL SYMBOL TILDE DIAERESIS
-2369;N;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
-236A;N;APL FUNCTIONAL SYMBOL COMMA BAR
-236B;N;APL FUNCTIONAL SYMBOL DEL TILDE
-236C;N;APL FUNCTIONAL SYMBOL ZILDE
-236D;N;APL FUNCTIONAL SYMBOL STILE TILDE
-236E;N;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
-236F;N;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
-2370;N;APL FUNCTIONAL SYMBOL QUAD QUESTION
-2371;N;APL FUNCTIONAL SYMBOL DOWN CARET TILDE
-2372;N;APL FUNCTIONAL SYMBOL UP CARET TILDE
-2373;N;APL FUNCTIONAL SYMBOL IOTA
-2374;N;APL FUNCTIONAL SYMBOL RHO
-2375;N;APL FUNCTIONAL SYMBOL OMEGA
-2376;N;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
-2377;N;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
-2378;N;APL FUNCTIONAL SYMBOL IOTA UNDERBAR
-2379;N;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
-237A;N;APL FUNCTIONAL SYMBOL ALPHA
-237B;N;NOT CHECK MARK
-237D;N;SHOULDERED OPEN BOX
-237E;N;BELL SYMBOL
-237F;N;VERTICAL LINE WITH MIDDLE DOT
-2380;N;INSERTION SYMBOL
-2381;N;CONTINUOUS UNDERLINE SYMBOL
-2382;N;DISCONTINUOUS UNDERLINE SYMBOL
-2383;N;EMPHASIS SYMBOL
-2384;N;COMPOSITION SYMBOL
-2385;N;WHITE SQUARE WITH CENTRE VERTICAL LINE
-2386;N;ENTER SYMBOL
-2387;N;ALTERNATIVE KEY SYMBOL
-2388;N;HELM SYMBOL
-2389;N;CIRCLED HORIZONTAL BAR WITH NOTCH
-238A;N;CIRCLED TRIANGLE DOWN
-238B;N;BROKEN CIRCLE WITH NORTHWEST ARROW
-238C;N;UNDO SYMBOL
-238D;N;MONOSTABLE SYMBOL
-238E;N;HYSTERESIS SYMBOL
-238F;N;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
-2390;N;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
-2391;N;PASSIVE-PULL-DOWN-OUTPUT SYMBOL
-2392;N;PASSIVE-PULL-UP-OUTPUT SYMBOL
-2393;N;DIRECT CURRENT SYMBOL FORM TWO
-2394;N;SOFTWARE-FUNCTION SYMBOL
-2395;N;APL FUNCTIONAL SYMBOL QUAD
-2396;N;DECIMAL SEPARATOR KEY SYMBOL
-2397;N;PREVIOUS PAGE
-2398;N;NEXT PAGE
-2399;N;PRINT SCREEN SYMBOL
-239A;N;CLEAR SCREEN SYMBOL
-2400;N;SYMBOL FOR NULL
-2401;N;SYMBOL FOR START OF HEADING
-2402;N;SYMBOL FOR START OF TEXT
-2403;N;SYMBOL FOR END OF TEXT
-2404;N;SYMBOL FOR END OF TRANSMISSION
-2405;N;SYMBOL FOR ENQUIRY
-2406;N;SYMBOL FOR ACKNOWLEDGE
-2407;N;SYMBOL FOR BELL
-2408;N;SYMBOL FOR BACKSPACE
-2409;N;SYMBOL FOR HORIZONTAL TABULATION
-240A;N;SYMBOL FOR LINE FEED
-240B;N;SYMBOL FOR VERTICAL TABULATION
-240C;N;SYMBOL FOR FORM FEED
-240D;N;SYMBOL FOR CARRIAGE RETURN
-240E;N;SYMBOL FOR SHIFT OUT
-240F;N;SYMBOL FOR SHIFT IN
-2410;N;SYMBOL FOR DATA LINK ESCAPE
-2411;N;SYMBOL FOR DEVICE CONTROL ONE
-2412;N;SYMBOL FOR DEVICE CONTROL TWO
-2413;N;SYMBOL FOR DEVICE CONTROL THREE
-2414;N;SYMBOL FOR DEVICE CONTROL FOUR
-2415;N;SYMBOL FOR NEGATIVE ACKNOWLEDGE
-2416;N;SYMBOL FOR SYNCHRONOUS IDLE
-2417;N;SYMBOL FOR END OF TRANSMISSION BLOCK
-2418;N;SYMBOL FOR CANCEL
-2419;N;SYMBOL FOR END OF MEDIUM
-241A;N;SYMBOL FOR SUBSTITUTE
-241B;N;SYMBOL FOR ESCAPE
-241C;N;SYMBOL FOR FILE SEPARATOR
-241D;N;SYMBOL FOR GROUP SEPARATOR
-241E;N;SYMBOL FOR RECORD SEPARATOR
-241F;N;SYMBOL FOR UNIT SEPARATOR
-2420;N;SYMBOL FOR SPACE
-2421;N;SYMBOL FOR DELETE
-2422;N;BLANK SYMBOL
-2423;N;OPEN BOX
-2424;N;SYMBOL FOR NEWLINE
-2425;N;SYMBOL FOR DELETE FORM TWO
-2426;N;SYMBOL FOR SUBSTITUTE FORM TWO
-2440;N;OCR HOOK
-2441;N;OCR CHAIR
-2442;N;OCR FORK
-2443;N;OCR INVERTED FORK
-2444;N;OCR BELT BUCKLE
-2445;N;OCR BOW TIE
-2446;N;OCR BRANCH BANK IDENTIFICATION
-2447;N;OCR AMOUNT OF CHECK
-2448;N;OCR DASH
-2449;N;OCR CUSTOMER ACCOUNT NUMBER
-244A;N;OCR DOUBLE BACKSLASH
-2460;A;CIRCLED DIGIT ONE
-2461;A;CIRCLED DIGIT TWO
-2462;A;CIRCLED DIGIT THREE
-2463;A;CIRCLED DIGIT FOUR
-2464;A;CIRCLED DIGIT FIVE
-2465;A;CIRCLED DIGIT SIX
-2466;A;CIRCLED DIGIT SEVEN
-2467;A;CIRCLED DIGIT EIGHT
-2468;A;CIRCLED DIGIT NINE
-2469;A;CIRCLED NUMBER TEN
-246A;A;CIRCLED NUMBER ELEVEN
-246B;A;CIRCLED NUMBER TWELVE
-246C;A;CIRCLED NUMBER THIRTEEN
-246D;A;CIRCLED NUMBER FOURTEEN
-246E;A;CIRCLED NUMBER FIFTEEN
-246F;A;CIRCLED NUMBER SIXTEEN
-2470;A;CIRCLED NUMBER SEVENTEEN
-2471;A;CIRCLED NUMBER EIGHTEEN
-2472;A;CIRCLED NUMBER NINETEEN
-2473;A;CIRCLED NUMBER TWENTY
-2474;A;PARENTHESIZED DIGIT ONE
-2475;A;PARENTHESIZED DIGIT TWO
-2476;A;PARENTHESIZED DIGIT THREE
-2477;A;PARENTHESIZED DIGIT FOUR
-2478;A;PARENTHESIZED DIGIT FIVE
-2479;A;PARENTHESIZED DIGIT SIX
-247A;A;PARENTHESIZED DIGIT SEVEN
-247B;A;PARENTHESIZED DIGIT EIGHT
-247C;A;PARENTHESIZED DIGIT NINE
-247D;A;PARENTHESIZED NUMBER TEN
-247E;A;PARENTHESIZED NUMBER ELEVEN
-247F;A;PARENTHESIZED NUMBER TWELVE
-2480;A;PARENTHESIZED NUMBER THIRTEEN
-2481;A;PARENTHESIZED NUMBER FOURTEEN
-2482;A;PARENTHESIZED NUMBER FIFTEEN
-2483;A;PARENTHESIZED NUMBER SIXTEEN
-2484;A;PARENTHESIZED NUMBER SEVENTEEN
-2485;A;PARENTHESIZED NUMBER EIGHTEEN
-2486;A;PARENTHESIZED NUMBER NINETEEN
-2487;A;PARENTHESIZED NUMBER TWENTY
-2488;A;DIGIT ONE FULL STOP
-2489;A;DIGIT TWO FULL STOP
-248A;A;DIGIT THREE FULL STOP
-248B;A;DIGIT FOUR FULL STOP
-248C;A;DIGIT FIVE FULL STOP
-248D;A;DIGIT SIX FULL STOP
-248E;A;DIGIT SEVEN FULL STOP
-248F;A;DIGIT EIGHT FULL STOP
-2490;A;DIGIT NINE FULL STOP
-2491;A;NUMBER TEN FULL STOP
-2492;A;NUMBER ELEVEN FULL STOP
-2493;A;NUMBER TWELVE FULL STOP
-2494;A;NUMBER THIRTEEN FULL STOP
-2495;A;NUMBER FOURTEEN FULL STOP
-2496;A;NUMBER FIFTEEN FULL STOP
-2497;A;NUMBER SIXTEEN FULL STOP
-2498;A;NUMBER SEVENTEEN FULL STOP
-2499;A;NUMBER EIGHTEEN FULL STOP
-249A;A;NUMBER NINETEEN FULL STOP
-249B;A;NUMBER TWENTY FULL STOP
-249C;A;PARENTHESIZED LATIN SMALL LETTER A
-249D;A;PARENTHESIZED LATIN SMALL LETTER B
-249E;A;PARENTHESIZED LATIN SMALL LETTER C
-249F;A;PARENTHESIZED LATIN SMALL LETTER D
-24A0;A;PARENTHESIZED LATIN SMALL LETTER E
-24A1;A;PARENTHESIZED LATIN SMALL LETTER F
-24A2;A;PARENTHESIZED LATIN SMALL LETTER G
-24A3;A;PARENTHESIZED LATIN SMALL LETTER H
-24A4;A;PARENTHESIZED LATIN SMALL LETTER I
-24A5;A;PARENTHESIZED LATIN SMALL LETTER J
-24A6;A;PARENTHESIZED LATIN SMALL LETTER K
-24A7;A;PARENTHESIZED LATIN SMALL LETTER L
-24A8;A;PARENTHESIZED LATIN SMALL LETTER M
-24A9;A;PARENTHESIZED LATIN SMALL LETTER N
-24AA;A;PARENTHESIZED LATIN SMALL LETTER O
-24AB;A;PARENTHESIZED LATIN SMALL LETTER P
-24AC;A;PARENTHESIZED LATIN SMALL LETTER Q
-24AD;A;PARENTHESIZED LATIN SMALL LETTER R
-24AE;A;PARENTHESIZED LATIN SMALL LETTER S
-24AF;A;PARENTHESIZED LATIN SMALL LETTER T
-24B0;A;PARENTHESIZED LATIN SMALL LETTER U
-24B1;A;PARENTHESIZED LATIN SMALL LETTER V
-24B2;A;PARENTHESIZED LATIN SMALL LETTER W
-24B3;A;PARENTHESIZED LATIN SMALL LETTER X
-24B4;A;PARENTHESIZED LATIN SMALL LETTER Y
-24B5;A;PARENTHESIZED LATIN SMALL LETTER Z
-24B6;A;CIRCLED LATIN CAPITAL LETTER A
-24B7;A;CIRCLED LATIN CAPITAL LETTER B
-24B8;A;CIRCLED LATIN CAPITAL LETTER C
-24B9;A;CIRCLED LATIN CAPITAL LETTER D
-24BA;A;CIRCLED LATIN CAPITAL LETTER E
-24BB;A;CIRCLED LATIN CAPITAL LETTER F
-24BC;A;CIRCLED LATIN CAPITAL LETTER G
-24BD;A;CIRCLED LATIN CAPITAL LETTER H
-24BE;A;CIRCLED LATIN CAPITAL LETTER I
-24BF;A;CIRCLED LATIN CAPITAL LETTER J
-24C0;N;CIRCLED LATIN CAPITAL LETTER K
-24C1;N;CIRCLED LATIN CAPITAL LETTER L
-24C2;N;CIRCLED LATIN CAPITAL LETTER M
-24C3;N;CIRCLED LATIN CAPITAL LETTER N
-24C4;N;CIRCLED LATIN CAPITAL LETTER O
-24C5;N;CIRCLED LATIN CAPITAL LETTER P
-24C6;N;CIRCLED LATIN CAPITAL LETTER Q
-24C7;N;CIRCLED LATIN CAPITAL LETTER R
-24C8;N;CIRCLED LATIN CAPITAL LETTER S
-24C9;N;CIRCLED LATIN CAPITAL LETTER T
-24CA;N;CIRCLED LATIN CAPITAL LETTER U
-24CB;N;CIRCLED LATIN CAPITAL LETTER V
-24CC;N;CIRCLED LATIN CAPITAL LETTER W
-24CD;N;CIRCLED LATIN CAPITAL LETTER X
-24CE;N;CIRCLED LATIN CAPITAL LETTER Y
-24CF;N;CIRCLED LATIN CAPITAL LETTER Z
-24D0;A;CIRCLED LATIN SMALL LETTER A
-24D1;A;CIRCLED LATIN SMALL LETTER B
-24D2;A;CIRCLED LATIN SMALL LETTER C
-24D3;A;CIRCLED LATIN SMALL LETTER D
-24D4;A;CIRCLED LATIN SMALL LETTER E
-24D5;A;CIRCLED LATIN SMALL LETTER F
-24D6;A;CIRCLED LATIN SMALL LETTER G
-24D7;A;CIRCLED LATIN SMALL LETTER H
-24D8;A;CIRCLED LATIN SMALL LETTER I
-24D9;A;CIRCLED LATIN SMALL LETTER J
-24DA;A;CIRCLED LATIN SMALL LETTER K
-24DB;A;CIRCLED LATIN SMALL LETTER L
-24DC;A;CIRCLED LATIN SMALL LETTER M
-24DD;A;CIRCLED LATIN SMALL LETTER N
-24DE;A;CIRCLED LATIN SMALL LETTER O
-24DF;A;CIRCLED LATIN SMALL LETTER P
-24E0;A;CIRCLED LATIN SMALL LETTER Q
-24E1;A;CIRCLED LATIN SMALL LETTER R
-24E2;A;CIRCLED LATIN SMALL LETTER S
-24E3;A;CIRCLED LATIN SMALL LETTER T
-24E4;A;CIRCLED LATIN SMALL LETTER U
-24E5;A;CIRCLED LATIN SMALL LETTER V
-24E6;A;CIRCLED LATIN SMALL LETTER W
-24E7;A;CIRCLED LATIN SMALL LETTER X
-24E8;A;CIRCLED LATIN SMALL LETTER Y
-24E9;A;CIRCLED LATIN SMALL LETTER Z
-24EA;N;CIRCLED DIGIT ZERO
-2500;A;BOX DRAWINGS LIGHT HORIZONTAL
-2501;A;BOX DRAWINGS HEAVY HORIZONTAL
-2502;A;BOX DRAWINGS LIGHT VERTICAL
-2503;A;BOX DRAWINGS HEAVY VERTICAL
-2504;A;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
-2505;A;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
-2506;A;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
-2507;A;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
-2508;A;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
-2509;A;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
-250A;A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
-250B;A;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
-250C;A;BOX DRAWINGS LIGHT DOWN AND RIGHT
-250D;A;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
-250E;A;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
-250F;A;BOX DRAWINGS HEAVY DOWN AND RIGHT
-2510;A;BOX DRAWINGS LIGHT DOWN AND LEFT
-2511;A;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
-2512;A;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
-2513;A;BOX DRAWINGS HEAVY DOWN AND LEFT
-2514;A;BOX DRAWINGS LIGHT UP AND RIGHT
-2515;A;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
-2516;A;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
-2517;A;BOX DRAWINGS HEAVY UP AND RIGHT
-2518;A;BOX DRAWINGS LIGHT UP AND LEFT
-2519;A;BOX DRAWINGS UP LIGHT AND LEFT HEAVY
-251A;A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT
-251B;A;BOX DRAWINGS HEAVY UP AND LEFT
-251C;A;BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-251D;A;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
-251E;A;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
-251F;A;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
-2520;A;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
-2521;A;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
-2522;A;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
-2523;A;BOX DRAWINGS HEAVY VERTICAL AND RIGHT
-2524;A;BOX DRAWINGS LIGHT VERTICAL AND LEFT
-2525;A;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
-2526;A;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
-2527;A;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
-2528;A;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
-2529;A;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
-252A;A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
-252B;A;BOX DRAWINGS HEAVY VERTICAL AND LEFT
-252C;A;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-252D;A;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
-252E;A;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
-252F;A;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
-2530;A;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
-2531;A;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
-2532;A;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
-2533;A;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
-2534;A;BOX DRAWINGS LIGHT UP AND HORIZONTAL
-2535;A;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
-2536;A;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
-2537;A;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
-2538;A;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
-2539;A;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
-253A;A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
-253B;A;BOX DRAWINGS HEAVY UP AND HORIZONTAL
-253C;A;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-253D;A;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
-253E;A;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
-253F;A;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
-2540;A;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
-2541;A;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
-2542;A;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
-2543;A;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
-2544;A;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
-2545;A;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
-2546;A;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
-2547;A;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
-2548;A;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
-2549;A;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
-254A;A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
-254B;A;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
-254C;N;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
-254D;N;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
-254E;N;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
-254F;N;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
-2550;A;BOX DRAWINGS DOUBLE HORIZONTAL
-2551;A;BOX DRAWINGS DOUBLE VERTICAL
-2552;A;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-2553;A;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-2554;A;BOX DRAWINGS DOUBLE DOWN AND RIGHT
-2555;A;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-2556;A;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-2557;A;BOX DRAWINGS DOUBLE DOWN AND LEFT
-2558;A;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-2559;A;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-255A;A;BOX DRAWINGS DOUBLE UP AND RIGHT
-255B;A;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-255C;A;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-255D;A;BOX DRAWINGS DOUBLE UP AND LEFT
-255E;A;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-255F;A;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-2560;A;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-2561;A;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-2562;A;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-2563;A;BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-2564;A;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-2565;A;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-2566;A;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-2567;A;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-2568;A;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-2569;A;BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-256A;A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-256B;A;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-256C;A;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-256D;A;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
-256E;A;BOX DRAWINGS LIGHT ARC DOWN AND LEFT
-256F;A;BOX DRAWINGS LIGHT ARC UP AND LEFT
-2570;A;BOX DRAWINGS LIGHT ARC UP AND RIGHT
-2571;A;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
-2572;A;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
-2573;A;BOX DRAWINGS LIGHT DIAGONAL CROSS
-2574;A;BOX DRAWINGS LIGHT LEFT
-2575;N;BOX DRAWINGS LIGHT UP
-2576;N;BOX DRAWINGS LIGHT RIGHT
-2577;N;BOX DRAWINGS LIGHT DOWN
-2578;N;BOX DRAWINGS HEAVY LEFT
-2579;N;BOX DRAWINGS HEAVY UP
-257A;N;BOX DRAWINGS HEAVY RIGHT
-257B;N;BOX DRAWINGS HEAVY DOWN
-257C;N;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
-257D;N;BOX DRAWINGS LIGHT UP AND HEAVY DOWN
-257E;N;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
-257F;N;BOX DRAWINGS HEAVY UP AND LIGHT DOWN
-2580;A;UPPER HALF BLOCK
-2581;A;LOWER ONE EIGHTH BLOCK
-2582;A;LOWER ONE QUARTER BLOCK
-2583;A;LOWER THREE EIGHTHS BLOCK
-2584;A;LOWER HALF BLOCK
-2585;A;LOWER FIVE EIGHTHS BLOCK
-2586;A;LOWER THREE QUARTERS BLOCK
-2587;A;LOWER SEVEN EIGHTHS BLOCK
-2588;A;FULL BLOCK
-2589;A;LEFT SEVEN EIGHTHS BLOCK
-258A;A;LEFT THREE QUARTERS BLOCK
-258B;A;LEFT FIVE EIGHTHS BLOCK
-258C;A;LEFT HALF BLOCK
-258D;A;LEFT THREE EIGHTHS BLOCK
-258E;A;LEFT ONE QUARTER BLOCK
-258F;A;LEFT ONE EIGHTH BLOCK
-2590;N;RIGHT HALF BLOCK
-2591;N;LIGHT SHADE
-2592;A;MEDIUM SHADE
-2593;A;DARK SHADE
-2594;A;UPPER ONE EIGHTH BLOCK
-2595;A;RIGHT ONE EIGHTH BLOCK
-25A0;A;BLACK SQUARE
-25A1;A;WHITE SQUARE
-25A2;N;WHITE SQUARE WITH ROUNDED CORNERS
-25A3;A;WHITE SQUARE CONTAINING BLACK SMALL SQUARE
-25A4;A;SQUARE WITH HORIZONTAL FILL
-25A5;A;SQUARE WITH VERTICAL FILL
-25A6;A;SQUARE WITH ORTHOGONAL CROSSHATCH FILL
-25A7;A;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
-25A8;A;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
-25A9;A;SQUARE WITH DIAGONAL CROSSHATCH FILL
-25AA;N;BLACK SMALL SQUARE
-25AB;N;WHITE SMALL SQUARE
-25AC;N;BLACK RECTANGLE
-25AD;N;WHITE RECTANGLE
-25AE;N;BLACK VERTICAL RECTANGLE
-25AF;N;WHITE VERTICAL RECTANGLE
-25B0;N;BLACK PARALLELOGRAM
-25B1;N;WHITE PARALLELOGRAM
-25B2;A;BLACK UP-POINTING TRIANGLE
-25B3;A;WHITE UP-POINTING TRIANGLE
-25B4;N;BLACK UP-POINTING SMALL TRIANGLE
-25B5;N;WHITE UP-POINTING SMALL TRIANGLE
-25B6;A;BLACK RIGHT-POINTING TRIANGLE
-25B7;A;WHITE RIGHT-POINTING TRIANGLE
-25B8;N;BLACK RIGHT-POINTING SMALL TRIANGLE
-25B9;N;WHITE RIGHT-POINTING SMALL TRIANGLE
-25BA;N;BLACK RIGHT-POINTING POINTER
-25BB;N;WHITE RIGHT-POINTING POINTER
-25BC;A;BLACK DOWN-POINTING TRIANGLE
-25BD;A;WHITE DOWN-POINTING TRIANGLE
-25BE;N;BLACK DOWN-POINTING SMALL TRIANGLE
-25BF;N;WHITE DOWN-POINTING SMALL TRIANGLE
-25C0;A;BLACK LEFT-POINTING TRIANGLE
-25C1;A;WHITE LEFT-POINTING TRIANGLE
-25C2;N;BLACK LEFT-POINTING SMALL TRIANGLE
-25C3;N;WHITE LEFT-POINTING SMALL TRIANGLE
-25C4;N;BLACK LEFT-POINTING POINTER
-25C5;N;WHITE LEFT-POINTING POINTER
-25C6;A;BLACK DIAMOND
-25C7;A;WHITE DIAMOND
-25C8;A;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-25C9;N;FISHEYE
-25CA;N;LOZENGE
-25CB;A;WHITE CIRCLE
-25CC;N;DOTTED CIRCLE
-25CD;N;CIRCLE WITH VERTICAL FILL
-25CE;A;BULLSEYE
-25CF;A;BLACK CIRCLE
-25D0;A;CIRCLE WITH LEFT HALF BLACK
-25D1;A;CIRCLE WITH RIGHT HALF BLACK
-25D2;N;CIRCLE WITH LOWER HALF BLACK
-25D3;N;CIRCLE WITH UPPER HALF BLACK
-25D4;N;CIRCLE WITH UPPER RIGHT QUADRANT BLACK
-25D5;N;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
-25D6;N;LEFT HALF BLACK CIRCLE
-25D7;N;RIGHT HALF BLACK CIRCLE
-25D8;N;INVERSE BULLET
-25D9;N;INVERSE WHITE CIRCLE
-25DA;N;UPPER HALF INVERSE WHITE CIRCLE
-25DB;N;LOWER HALF INVERSE WHITE CIRCLE
-25DC;N;UPPER LEFT QUADRANT CIRCULAR ARC
-25DD;N;UPPER RIGHT QUADRANT CIRCULAR ARC
-25DE;N;LOWER RIGHT QUADRANT CIRCULAR ARC
-25DF;N;LOWER LEFT QUADRANT CIRCULAR ARC
-25E0;N;UPPER HALF CIRCLE
-25E1;N;LOWER HALF CIRCLE
-25E2;A;BLACK LOWER RIGHT TRIANGLE
-25E3;A;BLACK LOWER LEFT TRIANGLE
-25E4;A;BLACK UPPER LEFT TRIANGLE
-25E5;A;BLACK UPPER RIGHT TRIANGLE
-25E6;N;WHITE BULLET
-25E7;N;SQUARE WITH LEFT HALF BLACK
-25E8;N;SQUARE WITH RIGHT HALF BLACK
-25E9;N;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
-25EA;N;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
-25EB;N;WHITE SQUARE WITH VERTICAL BISECTING LINE
-25EC;N;WHITE UP-POINTING TRIANGLE WITH DOT
-25ED;N;UP-POINTING TRIANGLE WITH LEFT HALF BLACK
-25EE;N;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
-25EF;A;LARGE CIRCLE
-25F0;N;WHITE SQUARE WITH UPPER LEFT QUADRANT
-25F1;N;WHITE SQUARE WITH LOWER LEFT QUADRANT
-25F2;N;WHITE SQUARE WITH LOWER RIGHT QUADRANT
-25F3;N;WHITE SQUARE WITH UPPER RIGHT QUADRANT
-25F4;N;WHITE CIRCLE WITH UPPER LEFT QUADRANT
-25F5;N;WHITE CIRCLE WITH LOWER LEFT QUADRANT
-25F6;N;WHITE CIRCLE WITH LOWER RIGHT QUADRANT
-25F7;N;WHITE CIRCLE WITH UPPER RIGHT QUADRANT
-2600;N;BLACK SUN WITH RAYS
-2601;N;CLOUD
-2602;N;UMBRELLA
-2603;N;SNOWMAN
-2604;N;COMET
-2605;A;BLACK STAR
-2606;A;WHITE STAR
-2607;N;LIGHTNING
-2608;N;THUNDERSTORM
-2609;A;SUN
-260A;N;ASCENDING NODE
-260B;N;DESCENDING NODE
-260C;N;CONJUNCTION
-260D;N;OPPOSITION
-260E;A;BLACK TELEPHONE
-260F;A;WHITE TELEPHONE
-2610;N;BALLOT BOX
-2611;N;BALLOT BOX WITH CHECK
-2612;N;BALLOT BOX WITH X
-2613;N;SALTIRE
-2619;N;REVERSED ROTATED FLORAL HEART BULLET
-261A;N;BLACK LEFT POINTING INDEX
-261B;N;BLACK RIGHT POINTING INDEX
-261C;A;WHITE LEFT POINTING INDEX
-261D;N;WHITE UP POINTING INDEX
-261E;A;WHITE RIGHT POINTING INDEX
-261F;N;WHITE DOWN POINTING INDEX
-2620;N;SKULL AND CROSSBONES
-2621;N;CAUTION SIGN
-2622;N;RADIOACTIVE SIGN
-2623;N;BIOHAZARD SIGN
-2624;N;CADUCEUS
-2625;N;ANKH
-2626;N;ORTHODOX CROSS
-2627;N;CHI RHO
-2628;N;CROSS OF LORRAINE
-2629;N;CROSS OF JERUSALEM
-262A;N;STAR AND CRESCENT
-262B;N;FARSI SYMBOL
-262C;N;ADI SHAKTI
-262D;N;HAMMER AND SICKLE
-262E;N;PEACE SYMBOL
-262F;N;YIN YANG
-2630;N;TRIGRAM FOR HEAVEN
-2631;N;TRIGRAM FOR LAKE
-2632;N;TRIGRAM FOR FIRE
-2633;N;TRIGRAM FOR THUNDER
-2634;N;TRIGRAM FOR WIND
-2635;N;TRIGRAM FOR WATER
-2636;N;TRIGRAM FOR MOUNTAIN
-2637;N;TRIGRAM FOR EARTH
-2638;N;WHEEL OF DHARMA
-2639;N;WHITE FROWNING FACE
-263A;N;WHITE SMILING FACE
-263B;N;BLACK SMILING FACE
-263C;N;WHITE SUN WITH RAYS
-263D;N;FIRST QUARTER MOON
-263E;N;LAST QUARTER MOON
-263F;N;MERCURY
-2640;A;FEMALE SIGN
-2641;N;EARTH
-2642;A;MALE SIGN
-2643;N;JUPITER
-2644;N;SATURN
-2645;N;URANUS
-2646;N;NEPTUNE
-2647;N;PLUTO
-2648;N;ARIES
-2649;N;TAURUS
-264A;N;GEMINI
-264B;N;CANCER
-264C;N;LEO
-264D;N;VIRGO
-264E;N;LIBRA
-264F;N;SCORPIUS
-2650;N;SAGITTARIUS
-2651;N;CAPRICORN
-2652;N;AQUARIUS
-2653;N;PISCES
-2654;N;WHITE CHESS KING
-2655;N;WHITE CHESS QUEEN
-2656;N;WHITE CHESS ROOK
-2657;N;WHITE CHESS BISHOP
-2658;N;WHITE CHESS KNIGHT
-2659;N;WHITE CHESS PAWN
-265A;N;BLACK CHESS KING
-265B;N;BLACK CHESS QUEEN
-265C;N;BLACK CHESS ROOK
-265D;N;BLACK CHESS BISHOP
-265E;N;BLACK CHESS KNIGHT
-265F;N;BLACK CHESS PAWN
-2660;A;BLACK SPADE SUIT
-2661;A;WHITE HEART SUIT
-2662;N;WHITE DIAMOND SUIT
-2663;A;BLACK CLUB SUIT
-2664;A;WHITE SPADE SUIT
-2665;A;BLACK HEART SUIT
-2666;N;BLACK DIAMOND SUIT
-2667;A;WHITE CLUB SUIT
-2668;A;HOT SPRINGS
-2669;A;QUARTER NOTE
-266A;A;EIGHTH NOTE
-266B;N;BEAMED EIGHTH NOTES
-266C;A;BEAMED SIXTEENTH NOTES
-266D;A;MUSIC FLAT SIGN
-266E;N;MUSIC NATURAL SIGN
-266F;A;MUSIC SHARP SIGN
-2670;N;WEST SYRIAC CROSS
-2671;N;EAST SYRIAC CROSS
-2701;N;UPPER BLADE SCISSORS
-2702;N;BLACK SCISSORS
-2703;N;LOWER BLADE SCISSORS
-2704;N;WHITE SCISSORS
-2706;N;TELEPHONE LOCATION SIGN
-2707;N;TAPE DRIVE
-2708;N;AIRPLANE
-2709;N;ENVELOPE
-270C;N;VICTORY HAND
-270D;N;WRITING HAND
-270E;N;LOWER RIGHT PENCIL
-270F;N;PENCIL
-2710;N;UPPER RIGHT PENCIL
-2711;N;WHITE NIB
-2712;N;BLACK NIB
-2713;N;CHECK MARK
-2714;N;HEAVY CHECK MARK
-2715;N;MULTIPLICATION X
-2716;N;HEAVY MULTIPLICATION X
-2717;N;BALLOT X
-2718;N;HEAVY BALLOT X
-2719;N;OUTLINED GREEK CROSS
-271A;N;HEAVY GREEK CROSS
-271B;N;OPEN CENTRE CROSS
-271C;N;HEAVY OPEN CENTRE CROSS
-271D;N;LATIN CROSS
-271E;N;SHADOWED WHITE LATIN CROSS
-271F;N;OUTLINED LATIN CROSS
-2720;N;MALTESE CROSS
-2721;N;STAR OF DAVID
-2722;N;FOUR TEARDROP-SPOKED ASTERISK
-2723;N;FOUR BALLOON-SPOKED ASTERISK
-2724;N;HEAVY FOUR BALLOON-SPOKED ASTERISK
-2725;N;FOUR CLUB-SPOKED ASTERISK
-2726;N;BLACK FOUR POINTED STAR
-2727;N;WHITE FOUR POINTED STAR
-2729;N;STRESS OUTLINED WHITE STAR
-272A;N;CIRCLED WHITE STAR
-272B;N;OPEN CENTRE BLACK STAR
-272C;N;BLACK CENTRE WHITE STAR
-272D;N;OUTLINED BLACK STAR
-272E;N;HEAVY OUTLINED BLACK STAR
-272F;N;PINWHEEL STAR
-2730;N;SHADOWED WHITE STAR
-2731;N;HEAVY ASTERISK
-2732;N;OPEN CENTRE ASTERISK
-2733;N;EIGHT SPOKED ASTERISK
-2734;N;EIGHT POINTED BLACK STAR
-2735;N;EIGHT POINTED PINWHEEL STAR
-2736;N;SIX POINTED BLACK STAR
-2737;N;EIGHT POINTED RECTILINEAR BLACK STAR
-2738;N;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
-2739;N;TWELVE POINTED BLACK STAR
-273A;N;SIXTEEN POINTED ASTERISK
-273B;N;TEARDROP-SPOKED ASTERISK
-273C;N;OPEN CENTRE TEARDROP-SPOKED ASTERISK
-273D;N;HEAVY TEARDROP-SPOKED ASTERISK
-273E;N;SIX PETALLED BLACK AND WHITE FLORETTE
-273F;N;BLACK FLORETTE
-2740;N;WHITE FLORETTE
-2741;N;EIGHT PETALLED OUTLINED BLACK FLORETTE
-2742;N;CIRCLED OPEN CENTRE EIGHT POINTED STAR
-2743;N;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
-2744;N;SNOWFLAKE
-2745;N;TIGHT TRIFOLIATE SNOWFLAKE
-2746;N;HEAVY CHEVRON SNOWFLAKE
-2747;N;SPARKLE
-2748;N;HEAVY SPARKLE
-2749;N;BALLOON-SPOKED ASTERISK
-274A;N;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-274B;N;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-274D;N;SHADOWED WHITE CIRCLE
-274F;N;LOWER RIGHT DROP-SHADOWED WHITE SQUARE
-2750;N;UPPER RIGHT DROP-SHADOWED WHITE SQUARE
-2751;N;LOWER RIGHT SHADOWED WHITE SQUARE
-2752;N;UPPER RIGHT SHADOWED WHITE SQUARE
-2756;N;BLACK DIAMOND MINUS WHITE X
-2758;N;LIGHT VERTICAL BAR
-2759;N;MEDIUM VERTICAL BAR
-275A;N;HEAVY VERTICAL BAR
-275B;N;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
-275C;N;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
-275D;N;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
-275E;N;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
-2761;N;CURVED STEM PARAGRAPH SIGN ORNAMENT
-2762;N;HEAVY EXCLAMATION MARK ORNAMENT
-2763;N;HEAVY HEART EXCLAMATION MARK ORNAMENT
-2764;N;HEAVY BLACK HEART
-2765;N;ROTATED HEAVY BLACK HEART BULLET
-2766;N;FLORAL HEART
-2767;N;ROTATED FLORAL HEART BULLET
-2776;N;DINGBAT NEGATIVE CIRCLED DIGIT ONE
-2777;N;DINGBAT NEGATIVE CIRCLED DIGIT TWO
-2778;N;DINGBAT NEGATIVE CIRCLED DIGIT THREE
-2779;N;DINGBAT NEGATIVE CIRCLED DIGIT FOUR
-277A;N;DINGBAT NEGATIVE CIRCLED DIGIT FIVE
-277B;N;DINGBAT NEGATIVE CIRCLED DIGIT SIX
-277C;N;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
-277D;N;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
-277E;N;DINGBAT NEGATIVE CIRCLED DIGIT NINE
-277F;N;DINGBAT NEGATIVE CIRCLED NUMBER TEN
-2780;N;DINGBAT CIRCLED SANS-SERIF DIGIT ONE
-2781;N;DINGBAT CIRCLED SANS-SERIF DIGIT TWO
-2782;N;DINGBAT CIRCLED SANS-SERIF DIGIT THREE
-2783;N;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
-2784;N;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
-2785;N;DINGBAT CIRCLED SANS-SERIF DIGIT SIX
-2786;N;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
-2787;N;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
-2788;N;DINGBAT CIRCLED SANS-SERIF DIGIT NINE
-2789;N;DINGBAT CIRCLED SANS-SERIF NUMBER TEN
-278A;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
-278B;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
-278C;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
-278D;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
-278E;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
-278F;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
-2790;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
-2791;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
-2792;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
-2793;N;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
-2794;N;HEAVY WIDE-HEADED RIGHTWARDS ARROW
-2798;N;HEAVY SOUTH EAST ARROW
-2799;N;HEAVY RIGHTWARDS ARROW
-279A;N;HEAVY NORTH EAST ARROW
-279B;N;DRAFTING POINT RIGHTWARDS ARROW
-279C;N;HEAVY ROUND-TIPPED RIGHTWARDS ARROW
-279D;N;TRIANGLE-HEADED RIGHTWARDS ARROW
-279E;N;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
-279F;N;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
-27A0;N;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
-27A1;N;BLACK RIGHTWARDS ARROW
-27A2;N;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
-27A3;N;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
-27A4;N;BLACK RIGHTWARDS ARROWHEAD
-27A5;N;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
-27A6;N;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
-27A7;N;SQUAT BLACK RIGHTWARDS ARROW
-27A8;N;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
-27A9;N;RIGHT-SHADED WHITE RIGHTWARDS ARROW
-27AA;N;LEFT-SHADED WHITE RIGHTWARDS ARROW
-27AB;N;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
-27AC;N;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
-27AD;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27AE;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27AF;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27B1;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27B2;N;CIRCLED HEAVY WHITE RIGHTWARDS ARROW
-27B3;N;WHITE-FEATHERED RIGHTWARDS ARROW
-27B4;N;BLACK-FEATHERED SOUTH EAST ARROW
-27B5;N;BLACK-FEATHERED RIGHTWARDS ARROW
-27B6;N;BLACK-FEATHERED NORTH EAST ARROW
-27B7;N;HEAVY BLACK-FEATHERED SOUTH EAST ARROW
-27B8;N;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
-27B9;N;HEAVY BLACK-FEATHERED NORTH EAST ARROW
-27BA;N;TEARDROP-BARBED RIGHTWARDS ARROW
-27BB;N;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
-27BC;N;WEDGE-TAILED RIGHTWARDS ARROW
-27BD;N;HEAVY WEDGE-TAILED RIGHTWARDS ARROW
-27BE;N;OPEN-OUTLINED RIGHTWARDS ARROW
-2800;N;BRAILLE PATTERN BLANK
-2801;N;BRAILLE PATTERN DOTS-1
-2802;N;BRAILLE PATTERN DOTS-2
-2803;N;BRAILLE PATTERN DOTS-12
-2804;N;BRAILLE PATTERN DOTS-3
-2805;N;BRAILLE PATTERN DOTS-13
-2806;N;BRAILLE PATTERN DOTS-23
-2807;N;BRAILLE PATTERN DOTS-123
-2808;N;BRAILLE PATTERN DOTS-4
-2809;N;BRAILLE PATTERN DOTS-14
-280A;N;BRAILLE PATTERN DOTS-24
-280B;N;BRAILLE PATTERN DOTS-124
-280C;N;BRAILLE PATTERN DOTS-34
-280D;N;BRAILLE PATTERN DOTS-134
-280E;N;BRAILLE PATTERN DOTS-234
-280F;N;BRAILLE PATTERN DOTS-1234
-2810;N;BRAILLE PATTERN DOTS-5
-2811;N;BRAILLE PATTERN DOTS-15
-2812;N;BRAILLE PATTERN DOTS-25
-2813;N;BRAILLE PATTERN DOTS-125
-2814;N;BRAILLE PATTERN DOTS-35
-2815;N;BRAILLE PATTERN DOTS-135
-2816;N;BRAILLE PATTERN DOTS-235
-2817;N;BRAILLE PATTERN DOTS-1235
-2818;N;BRAILLE PATTERN DOTS-45
-2819;N;BRAILLE PATTERN DOTS-145
-281A;N;BRAILLE PATTERN DOTS-245
-281B;N;BRAILLE PATTERN DOTS-1245
-281C;N;BRAILLE PATTERN DOTS-345
-281D;N;BRAILLE PATTERN DOTS-1345
-281E;N;BRAILLE PATTERN DOTS-2345
-281F;N;BRAILLE PATTERN DOTS-12345
-2820;N;BRAILLE PATTERN DOTS-6
-2821;N;BRAILLE PATTERN DOTS-16
-2822;N;BRAILLE PATTERN DOTS-26
-2823;N;BRAILLE PATTERN DOTS-126
-2824;N;BRAILLE PATTERN DOTS-36
-2825;N;BRAILLE PATTERN DOTS-136
-2826;N;BRAILLE PATTERN DOTS-236
-2827;N;BRAILLE PATTERN DOTS-1236
-2828;N;BRAILLE PATTERN DOTS-46
-2829;N;BRAILLE PATTERN DOTS-146
-282A;N;BRAILLE PATTERN DOTS-246
-282B;N;BRAILLE PATTERN DOTS-1246
-282C;N;BRAILLE PATTERN DOTS-346
-282D;N;BRAILLE PATTERN DOTS-1346
-282E;N;BRAILLE PATTERN DOTS-2346
-282F;N;BRAILLE PATTERN DOTS-12346
-2830;N;BRAILLE PATTERN DOTS-56
-2831;N;BRAILLE PATTERN DOTS-156
-2832;N;BRAILLE PATTERN DOTS-256
-2833;N;BRAILLE PATTERN DOTS-1256
-2834;N;BRAILLE PATTERN DOTS-356
-2835;N;BRAILLE PATTERN DOTS-1356
-2836;N;BRAILLE PATTERN DOTS-2356
-2837;N;BRAILLE PATTERN DOTS-12356
-2838;N;BRAILLE PATTERN DOTS-456
-2839;N;BRAILLE PATTERN DOTS-1456
-283A;N;BRAILLE PATTERN DOTS-2456
-283B;N;BRAILLE PATTERN DOTS-12456
-283C;N;BRAILLE PATTERN DOTS-3456
-283D;N;BRAILLE PATTERN DOTS-13456
-283E;N;BRAILLE PATTERN DOTS-23456
-283F;N;BRAILLE PATTERN DOTS-123456
-2840;N;BRAILLE PATTERN DOTS-7
-2841;N;BRAILLE PATTERN DOTS-17
-2842;N;BRAILLE PATTERN DOTS-27
-2843;N;BRAILLE PATTERN DOTS-127
-2844;N;BRAILLE PATTERN DOTS-37
-2845;N;BRAILLE PATTERN DOTS-137
-2846;N;BRAILLE PATTERN DOTS-237
-2847;N;BRAILLE PATTERN DOTS-1237
-2848;N;BRAILLE PATTERN DOTS-47
-2849;N;BRAILLE PATTERN DOTS-147
-284A;N;BRAILLE PATTERN DOTS-247
-284B;N;BRAILLE PATTERN DOTS-1247
-284C;N;BRAILLE PATTERN DOTS-347
-284D;N;BRAILLE PATTERN DOTS-1347
-284E;N;BRAILLE PATTERN DOTS-2347
-284F;N;BRAILLE PATTERN DOTS-12347
-2850;N;BRAILLE PATTERN DOTS-57
-2851;N;BRAILLE PATTERN DOTS-157
-2852;N;BRAILLE PATTERN DOTS-257
-2853;N;BRAILLE PATTERN DOTS-1257
-2854;N;BRAILLE PATTERN DOTS-357
-2855;N;BRAILLE PATTERN DOTS-1357
-2856;N;BRAILLE PATTERN DOTS-2357
-2857;N;BRAILLE PATTERN DOTS-12357
-2858;N;BRAILLE PATTERN DOTS-457
-2859;N;BRAILLE PATTERN DOTS-1457
-285A;N;BRAILLE PATTERN DOTS-2457
-285B;N;BRAILLE PATTERN DOTS-12457
-285C;N;BRAILLE PATTERN DOTS-3457
-285D;N;BRAILLE PATTERN DOTS-13457
-285E;N;BRAILLE PATTERN DOTS-23457
-285F;N;BRAILLE PATTERN DOTS-123457
-2860;N;BRAILLE PATTERN DOTS-67
-2861;N;BRAILLE PATTERN DOTS-167
-2862;N;BRAILLE PATTERN DOTS-267
-2863;N;BRAILLE PATTERN DOTS-1267
-2864;N;BRAILLE PATTERN DOTS-367
-2865;N;BRAILLE PATTERN DOTS-1367
-2866;N;BRAILLE PATTERN DOTS-2367
-2867;N;BRAILLE PATTERN DOTS-12367
-2868;N;BRAILLE PATTERN DOTS-467
-2869;N;BRAILLE PATTERN DOTS-1467
-286A;N;BRAILLE PATTERN DOTS-2467
-286B;N;BRAILLE PATTERN DOTS-12467
-286C;N;BRAILLE PATTERN DOTS-3467
-286D;N;BRAILLE PATTERN DOTS-13467
-286E;N;BRAILLE PATTERN DOTS-23467
-286F;N;BRAILLE PATTERN DOTS-123467
-2870;N;BRAILLE PATTERN DOTS-567
-2871;N;BRAILLE PATTERN DOTS-1567
-2872;N;BRAILLE PATTERN DOTS-2567
-2873;N;BRAILLE PATTERN DOTS-12567
-2874;N;BRAILLE PATTERN DOTS-3567
-2875;N;BRAILLE PATTERN DOTS-13567
-2876;N;BRAILLE PATTERN DOTS-23567
-2877;N;BRAILLE PATTERN DOTS-123567
-2878;N;BRAILLE PATTERN DOTS-4567
-2879;N;BRAILLE PATTERN DOTS-14567
-287A;N;BRAILLE PATTERN DOTS-24567
-287B;N;BRAILLE PATTERN DOTS-124567
-287C;N;BRAILLE PATTERN DOTS-34567
-287D;N;BRAILLE PATTERN DOTS-134567
-287E;N;BRAILLE PATTERN DOTS-234567
-287F;N;BRAILLE PATTERN DOTS-1234567
-2880;N;BRAILLE PATTERN DOTS-8
-2881;N;BRAILLE PATTERN DOTS-18
-2882;N;BRAILLE PATTERN DOTS-28
-2883;N;BRAILLE PATTERN DOTS-128
-2884;N;BRAILLE PATTERN DOTS-38
-2885;N;BRAILLE PATTERN DOTS-138
-2886;N;BRAILLE PATTERN DOTS-238
-2887;N;BRAILLE PATTERN DOTS-1238
-2888;N;BRAILLE PATTERN DOTS-48
-2889;N;BRAILLE PATTERN DOTS-148
-288A;N;BRAILLE PATTERN DOTS-248
-288B;N;BRAILLE PATTERN DOTS-1248
-288C;N;BRAILLE PATTERN DOTS-348
-288D;N;BRAILLE PATTERN DOTS-1348
-288E;N;BRAILLE PATTERN DOTS-2348
-288F;N;BRAILLE PATTERN DOTS-12348
-2890;N;BRAILLE PATTERN DOTS-58
-2891;N;BRAILLE PATTERN DOTS-158
-2892;N;BRAILLE PATTERN DOTS-258
-2893;N;BRAILLE PATTERN DOTS-1258
-2894;N;BRAILLE PATTERN DOTS-358
-2895;N;BRAILLE PATTERN DOTS-1358
-2896;N;BRAILLE PATTERN DOTS-2358
-2897;N;BRAILLE PATTERN DOTS-12358
-2898;N;BRAILLE PATTERN DOTS-458
-2899;N;BRAILLE PATTERN DOTS-1458
-289A;N;BRAILLE PATTERN DOTS-2458
-289B;N;BRAILLE PATTERN DOTS-12458
-289C;N;BRAILLE PATTERN DOTS-3458
-289D;N;BRAILLE PATTERN DOTS-13458
-289E;N;BRAILLE PATTERN DOTS-23458
-289F;N;BRAILLE PATTERN DOTS-123458
-28A0;N;BRAILLE PATTERN DOTS-68
-28A1;N;BRAILLE PATTERN DOTS-168
-28A2;N;BRAILLE PATTERN DOTS-268
-28A3;N;BRAILLE PATTERN DOTS-1268
-28A4;N;BRAILLE PATTERN DOTS-368
-28A5;N;BRAILLE PATTERN DOTS-1368
-28A6;N;BRAILLE PATTERN DOTS-2368
-28A7;N;BRAILLE PATTERN DOTS-12368
-28A8;N;BRAILLE PATTERN DOTS-468
-28A9;N;BRAILLE PATTERN DOTS-1468
-28AA;N;BRAILLE PATTERN DOTS-2468
-28AB;N;BRAILLE PATTERN DOTS-12468
-28AC;N;BRAILLE PATTERN DOTS-3468
-28AD;N;BRAILLE PATTERN DOTS-13468
-28AE;N;BRAILLE PATTERN DOTS-23468
-28AF;N;BRAILLE PATTERN DOTS-123468
-28B0;N;BRAILLE PATTERN DOTS-568
-28B1;N;BRAILLE PATTERN DOTS-1568
-28B2;N;BRAILLE PATTERN DOTS-2568
-28B3;N;BRAILLE PATTERN DOTS-12568
-28B4;N;BRAILLE PATTERN DOTS-3568
-28B5;N;BRAILLE PATTERN DOTS-13568
-28B6;N;BRAILLE PATTERN DOTS-23568
-28B7;N;BRAILLE PATTERN DOTS-123568
-28B8;N;BRAILLE PATTERN DOTS-4568
-28B9;N;BRAILLE PATTERN DOTS-14568
-28BA;N;BRAILLE PATTERN DOTS-24568
-28BB;N;BRAILLE PATTERN DOTS-124568
-28BC;N;BRAILLE PATTERN DOTS-34568
-28BD;N;BRAILLE PATTERN DOTS-134568
-28BE;N;BRAILLE PATTERN DOTS-234568
-28BF;N;BRAILLE PATTERN DOTS-1234568
-28C0;N;BRAILLE PATTERN DOTS-78
-28C1;N;BRAILLE PATTERN DOTS-178
-28C2;N;BRAILLE PATTERN DOTS-278
-28C3;N;BRAILLE PATTERN DOTS-1278
-28C4;N;BRAILLE PATTERN DOTS-378
-28C5;N;BRAILLE PATTERN DOTS-1378
-28C6;N;BRAILLE PATTERN DOTS-2378
-28C7;N;BRAILLE PATTERN DOTS-12378
-28C8;N;BRAILLE PATTERN DOTS-478
-28C9;N;BRAILLE PATTERN DOTS-1478
-28CA;N;BRAILLE PATTERN DOTS-2478
-28CB;N;BRAILLE PATTERN DOTS-12478
-28CC;N;BRAILLE PATTERN DOTS-3478
-28CD;N;BRAILLE PATTERN DOTS-13478
-28CE;N;BRAILLE PATTERN DOTS-23478
-28CF;N;BRAILLE PATTERN DOTS-123478
-28D0;N;BRAILLE PATTERN DOTS-578
-28D1;N;BRAILLE PATTERN DOTS-1578
-28D2;N;BRAILLE PATTERN DOTS-2578
-28D3;N;BRAILLE PATTERN DOTS-12578
-28D4;N;BRAILLE PATTERN DOTS-3578
-28D5;N;BRAILLE PATTERN DOTS-13578
-28D6;N;BRAILLE PATTERN DOTS-23578
-28D7;N;BRAILLE PATTERN DOTS-123578
-28D8;N;BRAILLE PATTERN DOTS-4578
-28D9;N;BRAILLE PATTERN DOTS-14578
-28DA;N;BRAILLE PATTERN DOTS-24578
-28DB;N;BRAILLE PATTERN DOTS-124578
-28DC;N;BRAILLE PATTERN DOTS-34578
-28DD;N;BRAILLE PATTERN DOTS-134578
-28DE;N;BRAILLE PATTERN DOTS-234578
-28DF;N;BRAILLE PATTERN DOTS-1234578
-28E0;N;BRAILLE PATTERN DOTS-678
-28E1;N;BRAILLE PATTERN DOTS-1678
-28E2;N;BRAILLE PATTERN DOTS-2678
-28E3;N;BRAILLE PATTERN DOTS-12678
-28E4;N;BRAILLE PATTERN DOTS-3678
-28E5;N;BRAILLE PATTERN DOTS-13678
-28E6;N;BRAILLE PATTERN DOTS-23678
-28E7;N;BRAILLE PATTERN DOTS-123678
-28E8;N;BRAILLE PATTERN DOTS-4678
-28E9;N;BRAILLE PATTERN DOTS-14678
-28EA;N;BRAILLE PATTERN DOTS-24678
-28EB;N;BRAILLE PATTERN DOTS-124678
-28EC;N;BRAILLE PATTERN DOTS-34678
-28ED;N;BRAILLE PATTERN DOTS-134678
-28EE;N;BRAILLE PATTERN DOTS-234678
-28EF;N;BRAILLE PATTERN DOTS-1234678
-28F0;N;BRAILLE PATTERN DOTS-5678
-28F1;N;BRAILLE PATTERN DOTS-15678
-28F2;N;BRAILLE PATTERN DOTS-25678
-28F3;N;BRAILLE PATTERN DOTS-125678
-28F4;N;BRAILLE PATTERN DOTS-35678
-28F5;N;BRAILLE PATTERN DOTS-135678
-28F6;N;BRAILLE PATTERN DOTS-235678
-28F7;N;BRAILLE PATTERN DOTS-1235678
-28F8;N;BRAILLE PATTERN DOTS-45678
-28F9;N;BRAILLE PATTERN DOTS-145678
-28FA;N;BRAILLE PATTERN DOTS-245678
-28FB;N;BRAILLE PATTERN DOTS-1245678
-28FC;N;BRAILLE PATTERN DOTS-345678
-28FD;N;BRAILLE PATTERN DOTS-1345678
-28FE;N;BRAILLE PATTERN DOTS-2345678
-28FF;N;BRAILLE PATTERN DOTS-12345678
-2E80;W;CJK RADICAL REPEAT
-2E81;W;CJK RADICAL CLIFF
-2E82;W;CJK RADICAL SECOND ONE
-2E83;W;CJK RADICAL SECOND TWO
-2E84;W;CJK RADICAL SECOND THREE
-2E85;W;CJK RADICAL PERSON
-2E86;W;CJK RADICAL BOX
-2E87;W;CJK RADICAL TABLE
-2E88;W;CJK RADICAL KNIFE ONE
-2E89;W;CJK RADICAL KNIFE TWO
-2E8A;W;CJK RADICAL DIVINATION
-2E8B;W;CJK RADICAL SEAL
-2E8C;W;CJK RADICAL SMALL ONE
-2E8D;W;CJK RADICAL SMALL TWO
-2E8E;W;CJK RADICAL LAME ONE
-2E8F;W;CJK RADICAL LAME TWO
-2E90;W;CJK RADICAL LAME THREE
-2E91;W;CJK RADICAL LAME FOUR
-2E92;W;CJK RADICAL SNAKE
-2E93;W;CJK RADICAL THREAD
-2E94;W;CJK RADICAL SNOUT ONE
-2E95;W;CJK RADICAL SNOUT TWO
-2E96;W;CJK RADICAL HEART ONE
-2E97;W;CJK RADICAL HEART TWO
-2E98;W;CJK RADICAL HAND
-2E99;W;CJK RADICAL RAP
-2E9B;W;CJK RADICAL CHOKE
-2E9C;W;CJK RADICAL SUN
-2E9D;W;CJK RADICAL MOON
-2E9E;W;CJK RADICAL DEATH
-2E9F;W;CJK RADICAL MOTHER
-2EA0;W;CJK RADICAL CIVILIAN
-2EA1;W;CJK RADICAL WATER ONE
-2EA2;W;CJK RADICAL WATER TWO
-2EA3;W;CJK RADICAL FIRE
-2EA4;W;CJK RADICAL PAW ONE
-2EA5;W;CJK RADICAL PAW TWO
-2EA6;W;CJK RADICAL SIMPLIFIED HALF TREE TRUNK
-2EA7;W;CJK RADICAL COW
-2EA8;W;CJK RADICAL DOG
-2EA9;W;CJK RADICAL JADE
-2EAA;W;CJK RADICAL BOLT OF CLOTH
-2EAB;W;CJK RADICAL EYE
-2EAC;W;CJK RADICAL SPIRIT ONE
-2EAD;W;CJK RADICAL SPIRIT TWO
-2EAE;W;CJK RADICAL BAMBOO
-2EAF;W;CJK RADICAL SILK
-2EB0;W;CJK RADICAL C-SIMPLIFIED SILK
-2EB1;W;CJK RADICAL NET ONE
-2EB2;W;CJK RADICAL NET TWO
-2EB3;W;CJK RADICAL NET THREE
-2EB4;W;CJK RADICAL NET FOUR
-2EB5;W;CJK RADICAL MESH
-2EB6;W;CJK RADICAL SHEEP
-2EB7;W;CJK RADICAL RAM
-2EB8;W;CJK RADICAL EWE
-2EB9;W;CJK RADICAL OLD
-2EBA;W;CJK RADICAL BRUSH ONE
-2EBB;W;CJK RADICAL BRUSH TWO
-2EBC;W;CJK RADICAL MEAT
-2EBD;W;CJK RADICAL MORTAR
-2EBE;W;CJK RADICAL GRASS ONE
-2EBF;W;CJK RADICAL GRASS TWO
-2EC0;W;CJK RADICAL GRASS THREE
-2EC1;W;CJK RADICAL TIGER
-2EC2;W;CJK RADICAL CLOTHES
-2EC3;W;CJK RADICAL WEST ONE
-2EC4;W;CJK RADICAL WEST TWO
-2EC5;W;CJK RADICAL C-SIMPLIFIED SEE
-2EC6;W;CJK RADICAL SIMPLIFIED HORN
-2EC7;W;CJK RADICAL HORN
-2EC8;W;CJK RADICAL C-SIMPLIFIED SPEECH
-2EC9;W;CJK RADICAL C-SIMPLIFIED SHELL
-2ECA;W;CJK RADICAL FOOT
-2ECB;W;CJK RADICAL C-SIMPLIFIED CART
-2ECC;W;CJK RADICAL SIMPLIFIED WALK
-2ECD;W;CJK RADICAL WALK ONE
-2ECE;W;CJK RADICAL WALK TWO
-2ECF;W;CJK RADICAL CITY
-2ED0;W;CJK RADICAL C-SIMPLIFIED GOLD
-2ED1;W;CJK RADICAL LONG ONE
-2ED2;W;CJK RADICAL LONG TWO
-2ED3;W;CJK RADICAL C-SIMPLIFIED LONG
-2ED4;W;CJK RADICAL C-SIMPLIFIED GATE
-2ED5;W;CJK RADICAL MOUND ONE
-2ED6;W;CJK RADICAL MOUND TWO
-2ED7;W;CJK RADICAL RAIN
-2ED8;W;CJK RADICAL BLUE
-2ED9;W;CJK RADICAL C-SIMPLIFIED TANNED LEATHER
-2EDA;W;CJK RADICAL C-SIMPLIFIED LEAF
-2EDB;W;CJK RADICAL C-SIMPLIFIED WIND
-2EDC;W;CJK RADICAL C-SIMPLIFIED FLY
-2EDD;W;CJK RADICAL EAT ONE
-2EDE;W;CJK RADICAL EAT TWO
-2EDF;W;CJK RADICAL EAT THREE
-2EE0;W;CJK RADICAL C-SIMPLIFIED EAT
-2EE1;W;CJK RADICAL HEAD
-2EE2;W;CJK RADICAL C-SIMPLIFIED HORSE
-2EE3;W;CJK RADICAL BONE
-2EE4;W;CJK RADICAL GHOST
-2EE5;W;CJK RADICAL C-SIMPLIFIED FISH
-2EE6;W;CJK RADICAL C-SIMPLIFIED BIRD
-2EE7;W;CJK RADICAL C-SIMPLIFIED SALT
-2EE8;W;CJK RADICAL SIMPLIFIED WHEAT
-2EE9;W;CJK RADICAL SIMPLIFIED YELLOW
-2EEA;W;CJK RADICAL C-SIMPLIFIED FROG
-2EEB;W;CJK RADICAL J-SIMPLIFIED EVEN
-2EEC;W;CJK RADICAL C-SIMPLIFIED EVEN
-2EED;W;CJK RADICAL J-SIMPLIFIED TOOTH
-2EEE;W;CJK RADICAL C-SIMPLIFIED TOOTH
-2EEF;W;CJK RADICAL J-SIMPLIFIED DRAGON
-2EF0;W;CJK RADICAL C-SIMPLIFIED DRAGON
-2EF1;W;CJK RADICAL TURTLE
-2EF2;W;CJK RADICAL J-SIMPLIFIED TURTLE
-2EF3;W;CJK RADICAL C-SIMPLIFIED TURTLE
-2F00;W;KANGXI RADICAL ONE
-2F01;W;KANGXI RADICAL LINE
-2F02;W;KANGXI RADICAL DOT
-2F03;W;KANGXI RADICAL SLASH
-2F04;W;KANGXI RADICAL SECOND
-2F05;W;KANGXI RADICAL HOOK
-2F06;W;KANGXI RADICAL TWO
-2F07;W;KANGXI RADICAL LID
-2F08;W;KANGXI RADICAL MAN
-2F09;W;KANGXI RADICAL LEGS
-2F0A;W;KANGXI RADICAL ENTER
-2F0B;W;KANGXI RADICAL EIGHT
-2F0C;W;KANGXI RADICAL DOWN BOX
-2F0D;W;KANGXI RADICAL COVER
-2F0E;W;KANGXI RADICAL ICE
-2F0F;W;KANGXI RADICAL TABLE
-2F10;W;KANGXI RADICAL OPEN BOX
-2F11;W;KANGXI RADICAL KNIFE
-2F12;W;KANGXI RADICAL POWER
-2F13;W;KANGXI RADICAL WRAP
-2F14;W;KANGXI RADICAL SPOON
-2F15;W;KANGXI RADICAL RIGHT OPEN BOX
-2F16;W;KANGXI RADICAL HIDING ENCLOSURE
-2F17;W;KANGXI RADICAL TEN
-2F18;W;KANGXI RADICAL DIVINATION
-2F19;W;KANGXI RADICAL SEAL
-2F1A;W;KANGXI RADICAL CLIFF
-2F1B;W;KANGXI RADICAL PRIVATE
-2F1C;W;KANGXI RADICAL AGAIN
-2F1D;W;KANGXI RADICAL MOUTH
-2F1E;W;KANGXI RADICAL ENCLOSURE
-2F1F;W;KANGXI RADICAL EARTH
-2F20;W;KANGXI RADICAL SCHOLAR
-2F21;W;KANGXI RADICAL GO
-2F22;W;KANGXI RADICAL GO SLOWLY
-2F23;W;KANGXI RADICAL EVENING
-2F24;W;KANGXI RADICAL BIG
-2F25;W;KANGXI RADICAL WOMAN
-2F26;W;KANGXI RADICAL CHILD
-2F27;W;KANGXI RADICAL ROOF
-2F28;W;KANGXI RADICAL INCH
-2F29;W;KANGXI RADICAL SMALL
-2F2A;W;KANGXI RADICAL LAME
-2F2B;W;KANGXI RADICAL CORPSE
-2F2C;W;KANGXI RADICAL SPROUT
-2F2D;W;KANGXI RADICAL MOUNTAIN
-2F2E;W;KANGXI RADICAL RIVER
-2F2F;W;KANGXI RADICAL WORK
-2F30;W;KANGXI RADICAL ONESELF
-2F31;W;KANGXI RADICAL TURBAN
-2F32;W;KANGXI RADICAL DRY
-2F33;W;KANGXI RADICAL SHORT THREAD
-2F34;W;KANGXI RADICAL DOTTED CLIFF
-2F35;W;KANGXI RADICAL LONG STRIDE
-2F36;W;KANGXI RADICAL TWO HANDS
-2F37;W;KANGXI RADICAL SHOOT
-2F38;W;KANGXI RADICAL BOW
-2F39;W;KANGXI RADICAL SNOUT
-2F3A;W;KANGXI RADICAL BRISTLE
-2F3B;W;KANGXI RADICAL STEP
-2F3C;W;KANGXI RADICAL HEART
-2F3D;W;KANGXI RADICAL HALBERD
-2F3E;W;KANGXI RADICAL DOOR
-2F3F;W;KANGXI RADICAL HAND
-2F40;W;KANGXI RADICAL BRANCH
-2F41;W;KANGXI RADICAL RAP
-2F42;W;KANGXI RADICAL SCRIPT
-2F43;W;KANGXI RADICAL DIPPER
-2F44;W;KANGXI RADICAL AXE
-2F45;W;KANGXI RADICAL SQUARE
-2F46;W;KANGXI RADICAL NOT
-2F47;W;KANGXI RADICAL SUN
-2F48;W;KANGXI RADICAL SAY
-2F49;W;KANGXI RADICAL MOON
-2F4A;W;KANGXI RADICAL TREE
-2F4B;W;KANGXI RADICAL LACK
-2F4C;W;KANGXI RADICAL STOP
-2F4D;W;KANGXI RADICAL DEATH
-2F4E;W;KANGXI RADICAL WEAPON
-2F4F;W;KANGXI RADICAL DO NOT
-2F50;W;KANGXI RADICAL COMPARE
-2F51;W;KANGXI RADICAL FUR
-2F52;W;KANGXI RADICAL CLAN
-2F53;W;KANGXI RADICAL STEAM
-2F54;W;KANGXI RADICAL WATER
-2F55;W;KANGXI RADICAL FIRE
-2F56;W;KANGXI RADICAL CLAW
-2F57;W;KANGXI RADICAL FATHER
-2F58;W;KANGXI RADICAL DOUBLE X
-2F59;W;KANGXI RADICAL HALF TREE TRUNK
-2F5A;W;KANGXI RADICAL SLICE
-2F5B;W;KANGXI RADICAL FANG
-2F5C;W;KANGXI RADICAL COW
-2F5D;W;KANGXI RADICAL DOG
-2F5E;W;KANGXI RADICAL PROFOUND
-2F5F;W;KANGXI RADICAL JADE
-2F60;W;KANGXI RADICAL MELON
-2F61;W;KANGXI RADICAL TILE
-2F62;W;KANGXI RADICAL SWEET
-2F63;W;KANGXI RADICAL LIFE
-2F64;W;KANGXI RADICAL USE
-2F65;W;KANGXI RADICAL FIELD
-2F66;W;KANGXI RADICAL BOLT OF CLOTH
-2F67;W;KANGXI RADICAL SICKNESS
-2F68;W;KANGXI RADICAL DOTTED TENT
-2F69;W;KANGXI RADICAL WHITE
-2F6A;W;KANGXI RADICAL SKIN
-2F6B;W;KANGXI RADICAL DISH
-2F6C;W;KANGXI RADICAL EYE
-2F6D;W;KANGXI RADICAL SPEAR
-2F6E;W;KANGXI RADICAL ARROW
-2F6F;W;KANGXI RADICAL STONE
-2F70;W;KANGXI RADICAL SPIRIT
-2F71;W;KANGXI RADICAL TRACK
-2F72;W;KANGXI RADICAL GRAIN
-2F73;W;KANGXI RADICAL CAVE
-2F74;W;KANGXI RADICAL STAND
-2F75;W;KANGXI RADICAL BAMBOO
-2F76;W;KANGXI RADICAL RICE
-2F77;W;KANGXI RADICAL SILK
-2F78;W;KANGXI RADICAL JAR
-2F79;W;KANGXI RADICAL NET
-2F7A;W;KANGXI RADICAL SHEEP
-2F7B;W;KANGXI RADICAL FEATHER
-2F7C;W;KANGXI RADICAL OLD
-2F7D;W;KANGXI RADICAL AND
-2F7E;W;KANGXI RADICAL PLOW
-2F7F;W;KANGXI RADICAL EAR
-2F80;W;KANGXI RADICAL BRUSH
-2F81;W;KANGXI RADICAL MEAT
-2F82;W;KANGXI RADICAL MINISTER
-2F83;W;KANGXI RADICAL SELF
-2F84;W;KANGXI RADICAL ARRIVE
-2F85;W;KANGXI RADICAL MORTAR
-2F86;W;KANGXI RADICAL TONGUE
-2F87;W;KANGXI RADICAL OPPOSE
-2F88;W;KANGXI RADICAL BOAT
-2F89;W;KANGXI RADICAL STOPPING
-2F8A;W;KANGXI RADICAL COLOR
-2F8B;W;KANGXI RADICAL GRASS
-2F8C;W;KANGXI RADICAL TIGER
-2F8D;W;KANGXI RADICAL INSECT
-2F8E;W;KANGXI RADICAL BLOOD
-2F8F;W;KANGXI RADICAL WALK ENCLOSURE
-2F90;W;KANGXI RADICAL CLOTHES
-2F91;W;KANGXI RADICAL WEST
-2F92;W;KANGXI RADICAL SEE
-2F93;W;KANGXI RADICAL HORN
-2F94;W;KANGXI RADICAL SPEECH
-2F95;W;KANGXI RADICAL VALLEY
-2F96;W;KANGXI RADICAL BEAN
-2F97;W;KANGXI RADICAL PIG
-2F98;W;KANGXI RADICAL BADGER
-2F99;W;KANGXI RADICAL SHELL
-2F9A;W;KANGXI RADICAL RED
-2F9B;W;KANGXI RADICAL RUN
-2F9C;W;KANGXI RADICAL FOOT
-2F9D;W;KANGXI RADICAL BODY
-2F9E;W;KANGXI RADICAL CART
-2F9F;W;KANGXI RADICAL BITTER
-2FA0;W;KANGXI RADICAL MORNING
-2FA1;W;KANGXI RADICAL WALK
-2FA2;W;KANGXI RADICAL CITY
-2FA3;W;KANGXI RADICAL WINE
-2FA4;W;KANGXI RADICAL DISTINGUISH
-2FA5;W;KANGXI RADICAL VILLAGE
-2FA6;W;KANGXI RADICAL GOLD
-2FA7;W;KANGXI RADICAL LONG
-2FA8;W;KANGXI RADICAL GATE
-2FA9;W;KANGXI RADICAL MOUND
-2FAA;W;KANGXI RADICAL SLAVE
-2FAB;W;KANGXI RADICAL SHORT TAILED BIRD
-2FAC;W;KANGXI RADICAL RAIN
-2FAD;W;KANGXI RADICAL BLUE
-2FAE;W;KANGXI RADICAL WRONG
-2FAF;W;KANGXI RADICAL FACE
-2FB0;W;KANGXI RADICAL LEATHER
-2FB1;W;KANGXI RADICAL TANNED LEATHER
-2FB2;W;KANGXI RADICAL LEEK
-2FB3;W;KANGXI RADICAL SOUND
-2FB4;W;KANGXI RADICAL LEAF
-2FB5;W;KANGXI RADICAL WIND
-2FB6;W;KANGXI RADICAL FLY
-2FB7;W;KANGXI RADICAL EAT
-2FB8;W;KANGXI RADICAL HEAD
-2FB9;W;KANGXI RADICAL FRAGRANT
-2FBA;W;KANGXI RADICAL HORSE
-2FBB;W;KANGXI RADICAL BONE
-2FBC;W;KANGXI RADICAL TALL
-2FBD;W;KANGXI RADICAL HAIR
-2FBE;W;KANGXI RADICAL FIGHT
-2FBF;W;KANGXI RADICAL SACRIFICIAL WINE
-2FC0;W;KANGXI RADICAL CAULDRON
-2FC1;W;KANGXI RADICAL GHOST
-2FC2;W;KANGXI RADICAL FISH
-2FC3;W;KANGXI RADICAL BIRD
-2FC4;W;KANGXI RADICAL SALT
-2FC5;W;KANGXI RADICAL DEER
-2FC6;W;KANGXI RADICAL WHEAT
-2FC7;W;KANGXI RADICAL HEMP
-2FC8;W;KANGXI RADICAL YELLOW
-2FC9;W;KANGXI RADICAL MILLET
-2FCA;W;KANGXI RADICAL BLACK
-2FCB;W;KANGXI RADICAL EMBROIDERY
-2FCC;W;KANGXI RADICAL FROG
-2FCD;W;KANGXI RADICAL TRIPOD
-2FCE;W;KANGXI RADICAL DRUM
-2FCF;W;KANGXI RADICAL RAT
-2FD0;W;KANGXI RADICAL NOSE
-2FD1;W;KANGXI RADICAL EVEN
-2FD2;W;KANGXI RADICAL TOOTH
-2FD3;W;KANGXI RADICAL DRAGON
-2FD4;W;KANGXI RADICAL TURTLE
-2FD5;W;KANGXI RADICAL FLUTE
-2FF0;W;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
-2FF1;W;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
-2FF2;W;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
-2FF3;W;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
-2FF4;W;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
-2FF5;W;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
-2FF6;W;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
-2FF7;W;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
-2FF8;W;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
-2FF9;W;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
-2FFA;W;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
-2FFB;W;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
-3000;W;IDEOGRAPHIC SPACE
-3001;W;IDEOGRAPHIC COMMA
-3002;W;IDEOGRAPHIC FULL STOP
-3003;W;DITTO MARK
-3004;W;JAPANESE INDUSTRIAL STANDARD SYMBOL
-3005;W;IDEOGRAPHIC ITERATION MARK
-3006;W;IDEOGRAPHIC CLOSING MARK
-3007;W;IDEOGRAPHIC NUMBER ZERO
-3008;W;LEFT ANGLE BRACKET
-3009;W;RIGHT ANGLE BRACKET
-300A;A;LEFT DOUBLE ANGLE BRACKET
-300B;A;RIGHT DOUBLE ANGLE BRACKET
-300C;W;LEFT CORNER BRACKET
-300D;W;RIGHT CORNER BRACKET
-300E;W;LEFT WHITE CORNER BRACKET
-300F;W;RIGHT WHITE CORNER BRACKET
-3010;W;LEFT BLACK LENTICULAR BRACKET
-3011;W;RIGHT BLACK LENTICULAR BRACKET
-3012;W;POSTAL MARK
-3013;W;GETA MARK
-3014;W;LEFT TORTOISE SHELL BRACKET
-3015;W;RIGHT TORTOISE SHELL BRACKET
-3016;W;LEFT WHITE LENTICULAR BRACKET
-3017;W;RIGHT WHITE LENTICULAR BRACKET
-3018;W;LEFT WHITE TORTOISE SHELL BRACKET
-3019;W;RIGHT WHITE TORTOISE SHELL BRACKET
-301A;A;LEFT WHITE SQUARE BRACKET
-301B;A;RIGHT WHITE SQUARE BRACKET
-301C;W;WAVE DASH
-301D;W;REVERSED DOUBLE PRIME QUOTATION MARK
-301E;W;DOUBLE PRIME QUOTATION MARK
-301F;W;LOW DOUBLE PRIME QUOTATION MARK
-3020;W;POSTAL MARK FACE
-3021;W;HANGZHOU NUMERAL ONE
-3022;W;HANGZHOU NUMERAL TWO
-3023;W;HANGZHOU NUMERAL THREE
-3024;W;HANGZHOU NUMERAL FOUR
-3025;W;HANGZHOU NUMERAL FIVE
-3026;W;HANGZHOU NUMERAL SIX
-3027;W;HANGZHOU NUMERAL SEVEN
-3028;W;HANGZHOU NUMERAL EIGHT
-3029;W;HANGZHOU NUMERAL NINE
-302A;W;IDEOGRAPHIC LEVEL TONE MARK
-302B;W;IDEOGRAPHIC RISING TONE MARK
-302C;W;IDEOGRAPHIC DEPARTING TONE MARK
-302D;W;IDEOGRAPHIC ENTERING TONE MARK
-302E;W;HANGUL SINGLE DOT TONE MARK
-302F;W;HANGUL DOUBLE DOT TONE MARK
-3030;W;WAVY DASH
-3031;W;VERTICAL KANA REPEAT MARK
-3032;W;VERTICAL KANA REPEAT WITH VOICED SOUND MARK
-3033;W;VERTICAL KANA REPEAT MARK UPPER HALF
-3034;W;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
-3035;W;VERTICAL KANA REPEAT MARK LOWER HALF
-3036;W;CIRCLED POSTAL MARK
-3037;W;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
-3038;W;HANGZHOU NUMERAL TEN
-3039;W;HANGZHOU NUMERAL TWENTY
-303A;W;HANGZHOU NUMERAL THIRTY
-303E;W;IDEOGRAPHIC VARIATION INDICATOR
-303F;N;IDEOGRAPHIC HALF FILL SPACE
-3041;W;HIRAGANA LETTER SMALL A
-3042;W;HIRAGANA LETTER A
-3043;W;HIRAGANA LETTER SMALL I
-3044;W;HIRAGANA LETTER I
-3045;W;HIRAGANA LETTER SMALL U
-3046;W;HIRAGANA LETTER U
-3047;W;HIRAGANA LETTER SMALL E
-3048;W;HIRAGANA LETTER E
-3049;W;HIRAGANA LETTER SMALL O
-304A;W;HIRAGANA LETTER O
-304B;W;HIRAGANA LETTER KA
-304C;W;HIRAGANA LETTER GA
-304D;W;HIRAGANA LETTER KI
-304E;W;HIRAGANA LETTER GI
-304F;W;HIRAGANA LETTER KU
-3050;W;HIRAGANA LETTER GU
-3051;W;HIRAGANA LETTER KE
-3052;W;HIRAGANA LETTER GE
-3053;W;HIRAGANA LETTER KO
-3054;W;HIRAGANA LETTER GO
-3055;W;HIRAGANA LETTER SA
-3056;W;HIRAGANA LETTER ZA
-3057;W;HIRAGANA LETTER SI
-3058;W;HIRAGANA LETTER ZI
-3059;W;HIRAGANA LETTER SU
-305A;W;HIRAGANA LETTER ZU
-305B;W;HIRAGANA LETTER SE
-305C;W;HIRAGANA LETTER ZE
-305D;W;HIRAGANA LETTER SO
-305E;W;HIRAGANA LETTER ZO
-305F;W;HIRAGANA LETTER TA
-3060;W;HIRAGANA LETTER DA
-3061;W;HIRAGANA LETTER TI
-3062;W;HIRAGANA LETTER DI
-3063;W;HIRAGANA LETTER SMALL TU
-3064;W;HIRAGANA LETTER TU
-3065;W;HIRAGANA LETTER DU
-3066;W;HIRAGANA LETTER TE
-3067;W;HIRAGANA LETTER DE
-3068;W;HIRAGANA LETTER TO
-3069;W;HIRAGANA LETTER DO
-306A;W;HIRAGANA LETTER NA
-306B;W;HIRAGANA LETTER NI
-306C;W;HIRAGANA LETTER NU
-306D;W;HIRAGANA LETTER NE
-306E;W;HIRAGANA LETTER NO
-306F;W;HIRAGANA LETTER HA
-3070;W;HIRAGANA LETTER BA
-3071;W;HIRAGANA LETTER PA
-3072;W;HIRAGANA LETTER HI
-3073;W;HIRAGANA LETTER BI
-3074;W;HIRAGANA LETTER PI
-3075;W;HIRAGANA LETTER HU
-3076;W;HIRAGANA LETTER BU
-3077;W;HIRAGANA LETTER PU
-3078;W;HIRAGANA LETTER HE
-3079;W;HIRAGANA LETTER BE
-307A;W;HIRAGANA LETTER PE
-307B;W;HIRAGANA LETTER HO
-307C;W;HIRAGANA LETTER BO
-307D;W;HIRAGANA LETTER PO
-307E;W;HIRAGANA LETTER MA
-307F;W;HIRAGANA LETTER MI
-3080;W;HIRAGANA LETTER MU
-3081;W;HIRAGANA LETTER ME
-3082;W;HIRAGANA LETTER MO
-3083;W;HIRAGANA LETTER SMALL YA
-3084;W;HIRAGANA LETTER YA
-3085;W;HIRAGANA LETTER SMALL YU
-3086;W;HIRAGANA LETTER YU
-3087;W;HIRAGANA LETTER SMALL YO
-3088;W;HIRAGANA LETTER YO
-3089;W;HIRAGANA LETTER RA
-308A;W;HIRAGANA LETTER RI
-308B;W;HIRAGANA LETTER RU
-308C;W;HIRAGANA LETTER RE
-308D;W;HIRAGANA LETTER RO
-308E;W;HIRAGANA LETTER SMALL WA
-308F;W;HIRAGANA LETTER WA
-3090;W;HIRAGANA LETTER WI
-3091;W;HIRAGANA LETTER WE
-3092;W;HIRAGANA LETTER WO
-3093;W;HIRAGANA LETTER N
-3094;W;HIRAGANA LETTER VU
-3099;W;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
-309A;W;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-309B;W;KATAKANA-HIRAGANA VOICED SOUND MARK
-309C;W;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-309D;W;HIRAGANA ITERATION MARK
-309E;W;HIRAGANA VOICED ITERATION MARK
-30A1;W;KATAKANA LETTER SMALL A
-30A2;W;KATAKANA LETTER A
-30A3;W;KATAKANA LETTER SMALL I
-30A4;W;KATAKANA LETTER I
-30A5;W;KATAKANA LETTER SMALL U
-30A6;W;KATAKANA LETTER U
-30A7;W;KATAKANA LETTER SMALL E
-30A8;W;KATAKANA LETTER E
-30A9;W;KATAKANA LETTER SMALL O
-30AA;W;KATAKANA LETTER O
-30AB;W;KATAKANA LETTER KA
-30AC;W;KATAKANA LETTER GA
-30AD;W;KATAKANA LETTER KI
-30AE;W;KATAKANA LETTER GI
-30AF;W;KATAKANA LETTER KU
-30B0;W;KATAKANA LETTER GU
-30B1;W;KATAKANA LETTER KE
-30B2;W;KATAKANA LETTER GE
-30B3;W;KATAKANA LETTER KO
-30B4;W;KATAKANA LETTER GO
-30B5;W;KATAKANA LETTER SA
-30B6;W;KATAKANA LETTER ZA
-30B7;W;KATAKANA LETTER SI
-30B8;W;KATAKANA LETTER ZI
-30B9;W;KATAKANA LETTER SU
-30BA;W;KATAKANA LETTER ZU
-30BB;W;KATAKANA LETTER SE
-30BC;W;KATAKANA LETTER ZE
-30BD;W;KATAKANA LETTER SO
-30BE;W;KATAKANA LETTER ZO
-30BF;W;KATAKANA LETTER TA
-30C0;W;KATAKANA LETTER DA
-30C1;W;KATAKANA LETTER TI
-30C2;W;KATAKANA LETTER DI
-30C3;W;KATAKANA LETTER SMALL TU
-30C4;W;KATAKANA LETTER TU
-30C5;W;KATAKANA LETTER DU
-30C6;W;KATAKANA LETTER TE
-30C7;W;KATAKANA LETTER DE
-30C8;W;KATAKANA LETTER TO
-30C9;W;KATAKANA LETTER DO
-30CA;W;KATAKANA LETTER NA
-30CB;W;KATAKANA LETTER NI
-30CC;W;KATAKANA LETTER NU
-30CD;W;KATAKANA LETTER NE
-30CE;W;KATAKANA LETTER NO
-30CF;W;KATAKANA LETTER HA
-30D0;W;KATAKANA LETTER BA
-30D1;W;KATAKANA LETTER PA
-30D2;W;KATAKANA LETTER HI
-30D3;W;KATAKANA LETTER BI
-30D4;W;KATAKANA LETTER PI
-30D5;W;KATAKANA LETTER HU
-30D6;W;KATAKANA LETTER BU
-30D7;W;KATAKANA LETTER PU
-30D8;W;KATAKANA LETTER HE
-30D9;W;KATAKANA LETTER BE
-30DA;W;KATAKANA LETTER PE
-30DB;W;KATAKANA LETTER HO
-30DC;W;KATAKANA LETTER BO
-30DD;W;KATAKANA LETTER PO
-30DE;W;KATAKANA LETTER MA
-30DF;W;KATAKANA LETTER MI
-30E0;W;KATAKANA LETTER MU
-30E1;W;KATAKANA LETTER ME
-30E2;W;KATAKANA LETTER MO
-30E3;W;KATAKANA LETTER SMALL YA
-30E4;W;KATAKANA LETTER YA
-30E5;W;KATAKANA LETTER SMALL YU
-30E6;W;KATAKANA LETTER YU
-30E7;W;KATAKANA LETTER SMALL YO
-30E8;W;KATAKANA LETTER YO
-30E9;W;KATAKANA LETTER RA
-30EA;W;KATAKANA LETTER RI
-30EB;W;KATAKANA LETTER RU
-30EC;W;KATAKANA LETTER RE
-30ED;W;KATAKANA LETTER RO
-30EE;W;KATAKANA LETTER SMALL WA
-30EF;W;KATAKANA LETTER WA
-30F0;W;KATAKANA LETTER WI
-30F1;W;KATAKANA LETTER WE
-30F2;W;KATAKANA LETTER WO
-30F3;W;KATAKANA LETTER N
-30F4;W;KATAKANA LETTER VU
-30F5;W;KATAKANA LETTER SMALL KA
-30F6;W;KATAKANA LETTER SMALL KE
-30F7;W;KATAKANA LETTER VA
-30F8;W;KATAKANA LETTER VI
-30F9;W;KATAKANA LETTER VE
-30FA;W;KATAKANA LETTER VO
-30FB;W;KATAKANA MIDDLE DOT
-30FC;W;KATAKANA-HIRAGANA PROLONGED SOUND MARK
-30FD;W;KATAKANA ITERATION MARK
-30FE;W;KATAKANA VOICED ITERATION MARK
-3105;W;BOPOMOFO LETTER B
-3106;W;BOPOMOFO LETTER P
-3107;W;BOPOMOFO LETTER M
-3108;W;BOPOMOFO LETTER F
-3109;W;BOPOMOFO LETTER D
-310A;W;BOPOMOFO LETTER T
-310B;W;BOPOMOFO LETTER N
-310C;W;BOPOMOFO LETTER L
-310D;W;BOPOMOFO LETTER G
-310E;W;BOPOMOFO LETTER K
-310F;W;BOPOMOFO LETTER H
-3110;W;BOPOMOFO LETTER J
-3111;W;BOPOMOFO LETTER Q
-3112;W;BOPOMOFO LETTER X
-3113;W;BOPOMOFO LETTER ZH
-3114;W;BOPOMOFO LETTER CH
-3115;W;BOPOMOFO LETTER SH
-3116;W;BOPOMOFO LETTER R
-3117;W;BOPOMOFO LETTER Z
-3118;W;BOPOMOFO LETTER C
-3119;W;BOPOMOFO LETTER S
-311A;W;BOPOMOFO LETTER A
-311B;W;BOPOMOFO LETTER O
-311C;W;BOPOMOFO LETTER E
-311D;W;BOPOMOFO LETTER EH
-311E;W;BOPOMOFO LETTER AI
-311F;W;BOPOMOFO LETTER EI
-3120;W;BOPOMOFO LETTER AU
-3121;W;BOPOMOFO LETTER OU
-3122;W;BOPOMOFO LETTER AN
-3123;W;BOPOMOFO LETTER EN
-3124;W;BOPOMOFO LETTER ANG
-3125;W;BOPOMOFO LETTER ENG
-3126;W;BOPOMOFO LETTER ER
-3127;W;BOPOMOFO LETTER I
-3128;W;BOPOMOFO LETTER U
-3129;W;BOPOMOFO LETTER IU
-312A;W;BOPOMOFO LETTER V
-312B;W;BOPOMOFO LETTER NG
-312C;W;BOPOMOFO LETTER GN
-3131;W;HANGUL LETTER KIYEOK
-3132;W;HANGUL LETTER SSANGKIYEOK
-3133;W;HANGUL LETTER KIYEOK-SIOS
-3134;W;HANGUL LETTER NIEUN
-3135;W;HANGUL LETTER NIEUN-CIEUC
-3136;W;HANGUL LETTER NIEUN-HIEUH
-3137;W;HANGUL LETTER TIKEUT
-3138;W;HANGUL LETTER SSANGTIKEUT
-3139;W;HANGUL LETTER RIEUL
-313A;W;HANGUL LETTER RIEUL-KIYEOK
-313B;W;HANGUL LETTER RIEUL-MIEUM
-313C;W;HANGUL LETTER RIEUL-PIEUP
-313D;W;HANGUL LETTER RIEUL-SIOS
-313E;W;HANGUL LETTER RIEUL-THIEUTH
-313F;W;HANGUL LETTER RIEUL-PHIEUPH
-3140;W;HANGUL LETTER RIEUL-HIEUH
-3141;W;HANGUL LETTER MIEUM
-3142;W;HANGUL LETTER PIEUP
-3143;W;HANGUL LETTER SSANGPIEUP
-3144;W;HANGUL LETTER PIEUP-SIOS
-3145;W;HANGUL LETTER SIOS
-3146;W;HANGUL LETTER SSANGSIOS
-3147;W;HANGUL LETTER IEUNG
-3148;W;HANGUL LETTER CIEUC
-3149;W;HANGUL LETTER SSANGCIEUC
-314A;W;HANGUL LETTER CHIEUCH
-314B;W;HANGUL LETTER KHIEUKH
-314C;W;HANGUL LETTER THIEUTH
-314D;W;HANGUL LETTER PHIEUPH
-314E;W;HANGUL LETTER HIEUH
-314F;W;HANGUL LETTER A
-3150;W;HANGUL LETTER AE
-3151;W;HANGUL LETTER YA
-3152;W;HANGUL LETTER YAE
-3153;W;HANGUL LETTER EO
-3154;W;HANGUL LETTER E
-3155;W;HANGUL LETTER YEO
-3156;W;HANGUL LETTER YE
-3157;W;HANGUL LETTER O
-3158;W;HANGUL LETTER WA
-3159;W;HANGUL LETTER WAE
-315A;W;HANGUL LETTER OE
-315B;W;HANGUL LETTER YO
-315C;W;HANGUL LETTER U
-315D;W;HANGUL LETTER WEO
-315E;W;HANGUL LETTER WE
-315F;W;HANGUL LETTER WI
-3160;W;HANGUL LETTER YU
-3161;W;HANGUL LETTER EU
-3162;W;HANGUL LETTER YI
-3163;W;HANGUL LETTER I
-3164;W;HANGUL FILLER
-3165;W;HANGUL LETTER SSANGNIEUN
-3166;W;HANGUL LETTER NIEUN-TIKEUT
-3167;W;HANGUL LETTER NIEUN-SIOS
-3168;W;HANGUL LETTER NIEUN-PANSIOS
-3169;W;HANGUL LETTER RIEUL-KIYEOK-SIOS
-316A;W;HANGUL LETTER RIEUL-TIKEUT
-316B;W;HANGUL LETTER RIEUL-PIEUP-SIOS
-316C;W;HANGUL LETTER RIEUL-PANSIOS
-316D;W;HANGUL LETTER RIEUL-YEORINHIEUH
-316E;W;HANGUL LETTER MIEUM-PIEUP
-316F;W;HANGUL LETTER MIEUM-SIOS
-3170;W;HANGUL LETTER MIEUM-PANSIOS
-3171;W;HANGUL LETTER KAPYEOUNMIEUM
-3172;W;HANGUL LETTER PIEUP-KIYEOK
-3173;W;HANGUL LETTER PIEUP-TIKEUT
-3174;W;HANGUL LETTER PIEUP-SIOS-KIYEOK
-3175;W;HANGUL LETTER PIEUP-SIOS-TIKEUT
-3176;W;HANGUL LETTER PIEUP-CIEUC
-3177;W;HANGUL LETTER PIEUP-THIEUTH
-3178;W;HANGUL LETTER KAPYEOUNPIEUP
-3179;W;HANGUL LETTER KAPYEOUNSSANGPIEUP
-317A;W;HANGUL LETTER SIOS-KIYEOK
-317B;W;HANGUL LETTER SIOS-NIEUN
-317C;W;HANGUL LETTER SIOS-TIKEUT
-317D;W;HANGUL LETTER SIOS-PIEUP
-317E;W;HANGUL LETTER SIOS-CIEUC
-317F;W;HANGUL LETTER PANSIOS
-3180;W;HANGUL LETTER SSANGIEUNG
-3181;W;HANGUL LETTER YESIEUNG
-3182;W;HANGUL LETTER YESIEUNG-SIOS
-3183;W;HANGUL LETTER YESIEUNG-PANSIOS
-3184;W;HANGUL LETTER KAPYEOUNPHIEUPH
-3185;W;HANGUL LETTER SSANGHIEUH
-3186;W;HANGUL LETTER YEORINHIEUH
-3187;W;HANGUL LETTER YO-YA
-3188;W;HANGUL LETTER YO-YAE
-3189;W;HANGUL LETTER YO-I
-318A;W;HANGUL LETTER YU-YEO
-318B;W;HANGUL LETTER YU-YE
-318C;W;HANGUL LETTER YU-I
-318D;W;HANGUL LETTER ARAEA
-318E;W;HANGUL LETTER ARAEAE
-3190;W;IDEOGRAPHIC ANNOTATION LINKING MARK
-3191;W;IDEOGRAPHIC ANNOTATION REVERSE MARK
-3192;W;IDEOGRAPHIC ANNOTATION ONE MARK
-3193;W;IDEOGRAPHIC ANNOTATION TWO MARK
-3194;W;IDEOGRAPHIC ANNOTATION THREE MARK
-3195;W;IDEOGRAPHIC ANNOTATION FOUR MARK
-3196;W;IDEOGRAPHIC ANNOTATION TOP MARK
-3197;W;IDEOGRAPHIC ANNOTATION MIDDLE MARK
-3198;W;IDEOGRAPHIC ANNOTATION BOTTOM MARK
-3199;W;IDEOGRAPHIC ANNOTATION FIRST MARK
-319A;W;IDEOGRAPHIC ANNOTATION SECOND MARK
-319B;W;IDEOGRAPHIC ANNOTATION THIRD MARK
-319C;W;IDEOGRAPHIC ANNOTATION FOURTH MARK
-319D;W;IDEOGRAPHIC ANNOTATION HEAVEN MARK
-319E;W;IDEOGRAPHIC ANNOTATION EARTH MARK
-319F;W;IDEOGRAPHIC ANNOTATION MAN MARK
-31A0;W;BOPOMOFO LETTER BU
-31A1;W;BOPOMOFO LETTER ZI
-31A2;W;BOPOMOFO LETTER JI
-31A3;W;BOPOMOFO LETTER GU
-31A4;W;BOPOMOFO LETTER EE
-31A5;W;BOPOMOFO LETTER ENN
-31A6;W;BOPOMOFO LETTER OO
-31A7;W;BOPOMOFO LETTER ONN
-31A8;W;BOPOMOFO LETTER IR
-31A9;W;BOPOMOFO LETTER ANN
-31AA;W;BOPOMOFO LETTER INN
-31AB;W;BOPOMOFO LETTER UNN
-31AC;W;BOPOMOFO LETTER IM
-31AD;W;BOPOMOFO LETTER NGG
-31AE;W;BOPOMOFO LETTER AINN
-31AF;W;BOPOMOFO LETTER AUNN
-31B0;W;BOPOMOFO LETTER AM
-31B1;W;BOPOMOFO LETTER OM
-31B2;W;BOPOMOFO LETTER ONG
-31B3;W;BOPOMOFO LETTER INNN
-31B4;W;BOPOMOFO FINAL LETTER P
-31B5;W;BOPOMOFO FINAL LETTER T
-31B6;W;BOPOMOFO FINAL LETTER K
-31B7;W;BOPOMOFO FINAL LETTER H
-3200;W;PARENTHESIZED HANGUL KIYEOK
-3201;W;PARENTHESIZED HANGUL NIEUN
-3202;W;PARENTHESIZED HANGUL TIKEUT
-3203;W;PARENTHESIZED HANGUL RIEUL
-3204;W;PARENTHESIZED HANGUL MIEUM
-3205;W;PARENTHESIZED HANGUL PIEUP
-3206;W;PARENTHESIZED HANGUL SIOS
-3207;W;PARENTHESIZED HANGUL IEUNG
-3208;W;PARENTHESIZED HANGUL CIEUC
-3209;W;PARENTHESIZED HANGUL CHIEUCH
-320A;W;PARENTHESIZED HANGUL KHIEUKH
-320B;W;PARENTHESIZED HANGUL THIEUTH
-320C;W;PARENTHESIZED HANGUL PHIEUPH
-320D;W;PARENTHESIZED HANGUL HIEUH
-320E;W;PARENTHESIZED HANGUL KIYEOK A
-320F;W;PARENTHESIZED HANGUL NIEUN A
-3210;W;PARENTHESIZED HANGUL TIKEUT A
-3211;W;PARENTHESIZED HANGUL RIEUL A
-3212;W;PARENTHESIZED HANGUL MIEUM A
-3213;W;PARENTHESIZED HANGUL PIEUP A
-3214;W;PARENTHESIZED HANGUL SIOS A
-3215;W;PARENTHESIZED HANGUL IEUNG A
-3216;W;PARENTHESIZED HANGUL CIEUC A
-3217;W;PARENTHESIZED HANGUL CHIEUCH A
-3218;W;PARENTHESIZED HANGUL KHIEUKH A
-3219;W;PARENTHESIZED HANGUL THIEUTH A
-321A;W;PARENTHESIZED HANGUL PHIEUPH A
-321B;W;PARENTHESIZED HANGUL HIEUH A
-321C;W;PARENTHESIZED HANGUL CIEUC U
-3220;W;PARENTHESIZED IDEOGRAPH ONE
-3221;W;PARENTHESIZED IDEOGRAPH TWO
-3222;W;PARENTHESIZED IDEOGRAPH THREE
-3223;W;PARENTHESIZED IDEOGRAPH FOUR
-3224;W;PARENTHESIZED IDEOGRAPH FIVE
-3225;W;PARENTHESIZED IDEOGRAPH SIX
-3226;W;PARENTHESIZED IDEOGRAPH SEVEN
-3227;W;PARENTHESIZED IDEOGRAPH EIGHT
-3228;W;PARENTHESIZED IDEOGRAPH NINE
-3229;W;PARENTHESIZED IDEOGRAPH TEN
-322A;W;PARENTHESIZED IDEOGRAPH MOON
-322B;W;PARENTHESIZED IDEOGRAPH FIRE
-322C;W;PARENTHESIZED IDEOGRAPH WATER
-322D;W;PARENTHESIZED IDEOGRAPH WOOD
-322E;W;PARENTHESIZED IDEOGRAPH METAL
-322F;W;PARENTHESIZED IDEOGRAPH EARTH
-3230;W;PARENTHESIZED IDEOGRAPH SUN
-3231;W;PARENTHESIZED IDEOGRAPH STOCK
-3232;W;PARENTHESIZED IDEOGRAPH HAVE
-3233;W;PARENTHESIZED IDEOGRAPH SOCIETY
-3234;W;PARENTHESIZED IDEOGRAPH NAME
-3235;W;PARENTHESIZED IDEOGRAPH SPECIAL
-3236;W;PARENTHESIZED IDEOGRAPH FINANCIAL
-3237;W;PARENTHESIZED IDEOGRAPH CONGRATULATION
-3238;W;PARENTHESIZED IDEOGRAPH LABOR
-3239;W;PARENTHESIZED IDEOGRAPH REPRESENT
-323A;W;PARENTHESIZED IDEOGRAPH CALL
-323B;W;PARENTHESIZED IDEOGRAPH STUDY
-323C;W;PARENTHESIZED IDEOGRAPH SUPERVISE
-323D;W;PARENTHESIZED IDEOGRAPH ENTERPRISE
-323E;W;PARENTHESIZED IDEOGRAPH RESOURCE
-323F;W;PARENTHESIZED IDEOGRAPH ALLIANCE
-3240;W;PARENTHESIZED IDEOGRAPH FESTIVAL
-3241;W;PARENTHESIZED IDEOGRAPH REST
-3242;W;PARENTHESIZED IDEOGRAPH SELF
-3243;W;PARENTHESIZED IDEOGRAPH REACH
-3260;W;CIRCLED HANGUL KIYEOK
-3261;W;CIRCLED HANGUL NIEUN
-3262;W;CIRCLED HANGUL TIKEUT
-3263;W;CIRCLED HANGUL RIEUL
-3264;W;CIRCLED HANGUL MIEUM
-3265;W;CIRCLED HANGUL PIEUP
-3266;W;CIRCLED HANGUL SIOS
-3267;W;CIRCLED HANGUL IEUNG
-3268;W;CIRCLED HANGUL CIEUC
-3269;W;CIRCLED HANGUL CHIEUCH
-326A;W;CIRCLED HANGUL KHIEUKH
-326B;W;CIRCLED HANGUL THIEUTH
-326C;W;CIRCLED HANGUL PHIEUPH
-326D;W;CIRCLED HANGUL HIEUH
-326E;W;CIRCLED HANGUL KIYEOK A
-326F;W;CIRCLED HANGUL NIEUN A
-3270;W;CIRCLED HANGUL TIKEUT A
-3271;W;CIRCLED HANGUL RIEUL A
-3272;W;CIRCLED HANGUL MIEUM A
-3273;W;CIRCLED HANGUL PIEUP A
-3274;W;CIRCLED HANGUL SIOS A
-3275;W;CIRCLED HANGUL IEUNG A
-3276;W;CIRCLED HANGUL CIEUC A
-3277;W;CIRCLED HANGUL CHIEUCH A
-3278;W;CIRCLED HANGUL KHIEUKH A
-3279;W;CIRCLED HANGUL THIEUTH A
-327A;W;CIRCLED HANGUL PHIEUPH A
-327B;W;CIRCLED HANGUL HIEUH A
-327F;W;KOREAN STANDARD SYMBOL
-3280;W;CIRCLED IDEOGRAPH ONE
-3281;W;CIRCLED IDEOGRAPH TWO
-3282;W;CIRCLED IDEOGRAPH THREE
-3283;W;CIRCLED IDEOGRAPH FOUR
-3284;W;CIRCLED IDEOGRAPH FIVE
-3285;W;CIRCLED IDEOGRAPH SIX
-3286;W;CIRCLED IDEOGRAPH SEVEN
-3287;W;CIRCLED IDEOGRAPH EIGHT
-3288;W;CIRCLED IDEOGRAPH NINE
-3289;W;CIRCLED IDEOGRAPH TEN
-328A;W;CIRCLED IDEOGRAPH MOON
-328B;W;CIRCLED IDEOGRAPH FIRE
-328C;W;CIRCLED IDEOGRAPH WATER
-328D;W;CIRCLED IDEOGRAPH WOOD
-328E;W;CIRCLED IDEOGRAPH METAL
-328F;W;CIRCLED IDEOGRAPH EARTH
-3290;W;CIRCLED IDEOGRAPH SUN
-3291;W;CIRCLED IDEOGRAPH STOCK
-3292;W;CIRCLED IDEOGRAPH HAVE
-3293;W;CIRCLED IDEOGRAPH SOCIETY
-3294;W;CIRCLED IDEOGRAPH NAME
-3295;W;CIRCLED IDEOGRAPH SPECIAL
-3296;W;CIRCLED IDEOGRAPH FINANCIAL
-3297;W;CIRCLED IDEOGRAPH CONGRATULATION
-3298;W;CIRCLED IDEOGRAPH LABOR
-3299;W;CIRCLED IDEOGRAPH SECRET
-329A;W;CIRCLED IDEOGRAPH MALE
-329B;W;CIRCLED IDEOGRAPH FEMALE
-329C;W;CIRCLED IDEOGRAPH SUITABLE
-329D;W;CIRCLED IDEOGRAPH EXCELLENT
-329E;W;CIRCLED IDEOGRAPH PRINT
-329F;W;CIRCLED IDEOGRAPH ATTENTION
-32A0;W;CIRCLED IDEOGRAPH ITEM
-32A1;W;CIRCLED IDEOGRAPH REST
-32A2;W;CIRCLED IDEOGRAPH COPY
-32A3;W;CIRCLED IDEOGRAPH CORRECT
-32A4;W;CIRCLED IDEOGRAPH HIGH
-32A5;W;CIRCLED IDEOGRAPH CENTRE
-32A6;W;CIRCLED IDEOGRAPH LOW
-32A7;W;CIRCLED IDEOGRAPH LEFT
-32A8;W;CIRCLED IDEOGRAPH RIGHT
-32A9;W;CIRCLED IDEOGRAPH MEDICINE
-32AA;W;CIRCLED IDEOGRAPH RELIGION
-32AB;W;CIRCLED IDEOGRAPH STUDY
-32AC;W;CIRCLED IDEOGRAPH SUPERVISE
-32AD;W;CIRCLED IDEOGRAPH ENTERPRISE
-32AE;W;CIRCLED IDEOGRAPH RESOURCE
-32AF;W;CIRCLED IDEOGRAPH ALLIANCE
-32B0;W;CIRCLED IDEOGRAPH NIGHT
-32C0;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
-32C1;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
-32C2;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
-32C3;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
-32C4;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
-32C5;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
-32C6;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
-32C7;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
-32C8;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
-32C9;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
-32CA;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
-32CB;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
-32D0;W;CIRCLED KATAKANA A
-32D1;W;CIRCLED KATAKANA I
-32D2;W;CIRCLED KATAKANA U
-32D3;W;CIRCLED KATAKANA E
-32D4;W;CIRCLED KATAKANA O
-32D5;W;CIRCLED KATAKANA KA
-32D6;W;CIRCLED KATAKANA KI
-32D7;W;CIRCLED KATAKANA KU
-32D8;W;CIRCLED KATAKANA KE
-32D9;W;CIRCLED KATAKANA KO
-32DA;W;CIRCLED KATAKANA SA
-32DB;W;CIRCLED KATAKANA SI
-32DC;W;CIRCLED KATAKANA SU
-32DD;W;CIRCLED KATAKANA SE
-32DE;W;CIRCLED KATAKANA SO
-32DF;W;CIRCLED KATAKANA TA
-32E0;W;CIRCLED KATAKANA TI
-32E1;W;CIRCLED KATAKANA TU
-32E2;W;CIRCLED KATAKANA TE
-32E3;W;CIRCLED KATAKANA TO
-32E4;W;CIRCLED KATAKANA NA
-32E5;W;CIRCLED KATAKANA NI
-32E6;W;CIRCLED KATAKANA NU
-32E7;W;CIRCLED KATAKANA NE
-32E8;W;CIRCLED KATAKANA NO
-32E9;W;CIRCLED KATAKANA HA
-32EA;W;CIRCLED KATAKANA HI
-32EB;W;CIRCLED KATAKANA HU
-32EC;W;CIRCLED KATAKANA HE
-32ED;W;CIRCLED KATAKANA HO
-32EE;W;CIRCLED KATAKANA MA
-32EF;W;CIRCLED KATAKANA MI
-32F0;W;CIRCLED KATAKANA MU
-32F1;W;CIRCLED KATAKANA ME
-32F2;W;CIRCLED KATAKANA MO
-32F3;W;CIRCLED KATAKANA YA
-32F4;W;CIRCLED KATAKANA YU
-32F5;W;CIRCLED KATAKANA YO
-32F6;W;CIRCLED KATAKANA RA
-32F7;W;CIRCLED KATAKANA RI
-32F8;W;CIRCLED KATAKANA RU
-32F9;W;CIRCLED KATAKANA RE
-32FA;W;CIRCLED KATAKANA RO
-32FB;W;CIRCLED KATAKANA WA
-32FC;W;CIRCLED KATAKANA WI
-32FD;W;CIRCLED KATAKANA WE
-32FE;W;CIRCLED KATAKANA WO
-3300;W;SQUARE APAATO
-3301;W;SQUARE ARUHUA
-3302;W;SQUARE ANPEA
-3303;W;SQUARE AARU
-3304;W;SQUARE ININGU
-3305;W;SQUARE INTI
-3306;W;SQUARE UON
-3307;W;SQUARE ESUKUUDO
-3308;W;SQUARE EEKAA
-3309;W;SQUARE ONSU
-330A;W;SQUARE OOMU
-330B;W;SQUARE KAIRI
-330C;W;SQUARE KARATTO
-330D;W;SQUARE KARORII
-330E;W;SQUARE GARON
-330F;W;SQUARE GANMA
-3310;W;SQUARE GIGA
-3311;W;SQUARE GINII
-3312;W;SQUARE KYURII
-3313;W;SQUARE GIRUDAA
-3314;W;SQUARE KIRO
-3315;W;SQUARE KIROGURAMU
-3316;W;SQUARE KIROMEETORU
-3317;W;SQUARE KIROWATTO
-3318;W;SQUARE GURAMU
-3319;W;SQUARE GURAMUTON
-331A;W;SQUARE KURUZEIRO
-331B;W;SQUARE KUROONE
-331C;W;SQUARE KEESU
-331D;W;SQUARE KORUNA
-331E;W;SQUARE KOOPO
-331F;W;SQUARE SAIKURU
-3320;W;SQUARE SANTIIMU
-3321;W;SQUARE SIRINGU
-3322;W;SQUARE SENTI
-3323;W;SQUARE SENTO
-3324;W;SQUARE DAASU
-3325;W;SQUARE DESI
-3326;W;SQUARE DORU
-3327;W;SQUARE TON
-3328;W;SQUARE NANO
-3329;W;SQUARE NOTTO
-332A;W;SQUARE HAITU
-332B;W;SQUARE PAASENTO
-332C;W;SQUARE PAATU
-332D;W;SQUARE BAARERU
-332E;W;SQUARE PIASUTORU
-332F;W;SQUARE PIKURU
-3330;W;SQUARE PIKO
-3331;W;SQUARE BIRU
-3332;W;SQUARE HUARADDO
-3333;W;SQUARE HUIITO
-3334;W;SQUARE BUSSYERU
-3335;W;SQUARE HURAN
-3336;W;SQUARE HEKUTAARU
-3337;W;SQUARE PESO
-3338;W;SQUARE PENIHI
-3339;W;SQUARE HERUTU
-333A;W;SQUARE PENSU
-333B;W;SQUARE PEEZI
-333C;W;SQUARE BEETA
-333D;W;SQUARE POINTO
-333E;W;SQUARE BORUTO
-333F;W;SQUARE HON
-3340;W;SQUARE PONDO
-3341;W;SQUARE HOORU
-3342;W;SQUARE HOON
-3343;W;SQUARE MAIKURO
-3344;W;SQUARE MAIRU
-3345;W;SQUARE MAHHA
-3346;W;SQUARE MARUKU
-3347;W;SQUARE MANSYON
-3348;W;SQUARE MIKURON
-3349;W;SQUARE MIRI
-334A;W;SQUARE MIRIBAARU
-334B;W;SQUARE MEGA
-334C;W;SQUARE MEGATON
-334D;W;SQUARE MEETORU
-334E;W;SQUARE YAADO
-334F;W;SQUARE YAARU
-3350;W;SQUARE YUAN
-3351;W;SQUARE RITTORU
-3352;W;SQUARE RIRA
-3353;W;SQUARE RUPII
-3354;W;SQUARE RUUBURU
-3355;W;SQUARE REMU
-3356;W;SQUARE RENTOGEN
-3357;W;SQUARE WATTO
-3358;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
-3359;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
-335A;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
-335B;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
-335C;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
-335D;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
-335E;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
-335F;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
-3360;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
-3361;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
-3362;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
-3363;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
-3364;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
-3365;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
-3366;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
-3367;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
-3368;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
-3369;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
-336A;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
-336B;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
-336C;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
-336D;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
-336E;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
-336F;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
-3370;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
-3371;W;SQUARE HPA
-3372;W;SQUARE DA
-3373;W;SQUARE AU
-3374;W;SQUARE BAR
-3375;W;SQUARE OV
-3376;W;SQUARE PC
-337B;W;SQUARE ERA NAME HEISEI
-337C;W;SQUARE ERA NAME SYOUWA
-337D;W;SQUARE ERA NAME TAISYOU
-337E;W;SQUARE ERA NAME MEIZI
-337F;W;SQUARE CORPORATION
-3380;W;SQUARE PA AMPS
-3381;W;SQUARE NA
-3382;W;SQUARE MU A
-3383;W;SQUARE MA
-3384;W;SQUARE KA
-3385;W;SQUARE KB
-3386;W;SQUARE MB
-3387;W;SQUARE GB
-3388;W;SQUARE CAL
-3389;W;SQUARE KCAL
-338A;W;SQUARE PF
-338B;W;SQUARE NF
-338C;W;SQUARE MU F
-338D;W;SQUARE MU G
-338E;W;SQUARE MG
-338F;W;SQUARE KG
-3390;W;SQUARE HZ
-3391;W;SQUARE KHZ
-3392;W;SQUARE MHZ
-3393;W;SQUARE GHZ
-3394;W;SQUARE THZ
-3395;W;SQUARE MU L
-3396;W;SQUARE ML
-3397;W;SQUARE DL
-3398;W;SQUARE KL
-3399;W;SQUARE FM
-339A;W;SQUARE NM
-339B;W;SQUARE MU M
-339C;W;SQUARE MM
-339D;W;SQUARE CM
-339E;W;SQUARE KM
-339F;W;SQUARE MM SQUARED
-33A0;W;SQUARE CM SQUARED
-33A1;W;SQUARE M SQUARED
-33A2;W;SQUARE KM SQUARED
-33A3;W;SQUARE MM CUBED
-33A4;W;SQUARE CM CUBED
-33A5;W;SQUARE M CUBED
-33A6;W;SQUARE KM CUBED
-33A7;W;SQUARE M OVER S
-33A8;W;SQUARE M OVER S SQUARED
-33A9;W;SQUARE PA
-33AA;W;SQUARE KPA
-33AB;W;SQUARE MPA
-33AC;W;SQUARE GPA
-33AD;W;SQUARE RAD
-33AE;W;SQUARE RAD OVER S
-33AF;W;SQUARE RAD OVER S SQUARED
-33B0;W;SQUARE PS
-33B1;W;SQUARE NS
-33B2;W;SQUARE MU S
-33B3;W;SQUARE MS
-33B4;W;SQUARE PV
-33B5;W;SQUARE NV
-33B6;W;SQUARE MU V
-33B7;W;SQUARE MV
-33B8;W;SQUARE KV
-33B9;W;SQUARE MV MEGA
-33BA;W;SQUARE PW
-33BB;W;SQUARE NW
-33BC;W;SQUARE MU W
-33BD;W;SQUARE MW
-33BE;W;SQUARE KW
-33BF;W;SQUARE MW MEGA
-33C0;W;SQUARE K OHM
-33C1;W;SQUARE M OHM
-33C2;W;SQUARE AM
-33C3;W;SQUARE BQ
-33C4;W;SQUARE CC
-33C5;W;SQUARE CD
-33C6;W;SQUARE C OVER KG
-33C7;W;SQUARE CO
-33C8;W;SQUARE DB
-33C9;W;SQUARE GY
-33CA;W;SQUARE HA
-33CB;W;SQUARE HP
-33CC;W;SQUARE IN
-33CD;W;SQUARE KK
-33CE;W;SQUARE KM CAPITAL
-33CF;W;SQUARE KT
-33D0;W;SQUARE LM
-33D1;W;SQUARE LN
-33D2;W;SQUARE LOG
-33D3;W;SQUARE LX
-33D4;W;SQUARE MB SMALL
-33D5;W;SQUARE MIL
-33D6;W;SQUARE MOL
-33D7;W;SQUARE PH
-33D8;W;SQUARE PM
-33D9;W;SQUARE PPM
-33DA;W;SQUARE PR
-33DB;W;SQUARE SR
-33DC;W;SQUARE SV
-33DD;W;SQUARE WB
-33E0;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
-33E1;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
-33E2;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
-33E3;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
-33E4;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
-33E5;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
-33E6;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
-33E7;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
-33E8;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
-33E9;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
-33EA;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
-33EB;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
-33EC;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
-33ED;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
-33EE;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
-33EF;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
-33F0;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
-33F1;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
-33F2;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
-33F3;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
-33F4;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
-33F5;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
-33F6;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
-33F7;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
-33F8;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
-33F9;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
-33FA;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
-33FB;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
-33FC;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
-33FD;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
-33FE;W;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
-3400;W;<CJK Ideograph Extension A, First>
-4DB5;W;<CJK Ideograph Extension A, Last>
-4E00;W;<CJK Ideograph, First>
-9FA5;W;<CJK Ideograph, Last>
-A000;W;YI SYLLABLE IT
-A001;W;YI SYLLABLE IX
-A002;W;YI SYLLABLE I
-A003;W;YI SYLLABLE IP
-A004;W;YI SYLLABLE IET
-A005;W;YI SYLLABLE IEX
-A006;W;YI SYLLABLE IE
-A007;W;YI SYLLABLE IEP
-A008;W;YI SYLLABLE AT
-A009;W;YI SYLLABLE AX
-A00A;W;YI SYLLABLE A
-A00B;W;YI SYLLABLE AP
-A00C;W;YI SYLLABLE UOX
-A00D;W;YI SYLLABLE UO
-A00E;W;YI SYLLABLE UOP
-A00F;W;YI SYLLABLE OT
-A010;W;YI SYLLABLE OX
-A011;W;YI SYLLABLE O
-A012;W;YI SYLLABLE OP
-A013;W;YI SYLLABLE EX
-A014;W;YI SYLLABLE E
-A015;W;YI SYLLABLE WU
-A016;W;YI SYLLABLE BIT
-A017;W;YI SYLLABLE BIX
-A018;W;YI SYLLABLE BI
-A019;W;YI SYLLABLE BIP
-A01A;W;YI SYLLABLE BIET
-A01B;W;YI SYLLABLE BIEX
-A01C;W;YI SYLLABLE BIE
-A01D;W;YI SYLLABLE BIEP
-A01E;W;YI SYLLABLE BAT
-A01F;W;YI SYLLABLE BAX
-A020;W;YI SYLLABLE BA
-A021;W;YI SYLLABLE BAP
-A022;W;YI SYLLABLE BUOX
-A023;W;YI SYLLABLE BUO
-A024;W;YI SYLLABLE BUOP
-A025;W;YI SYLLABLE BOT
-A026;W;YI SYLLABLE BOX
-A027;W;YI SYLLABLE BO
-A028;W;YI SYLLABLE BOP
-A029;W;YI SYLLABLE BEX
-A02A;W;YI SYLLABLE BE
-A02B;W;YI SYLLABLE BEP
-A02C;W;YI SYLLABLE BUT
-A02D;W;YI SYLLABLE BUX
-A02E;W;YI SYLLABLE BU
-A02F;W;YI SYLLABLE BUP
-A030;W;YI SYLLABLE BURX
-A031;W;YI SYLLABLE BUR
-A032;W;YI SYLLABLE BYT
-A033;W;YI SYLLABLE BYX
-A034;W;YI SYLLABLE BY
-A035;W;YI SYLLABLE BYP
-A036;W;YI SYLLABLE BYRX
-A037;W;YI SYLLABLE BYR
-A038;W;YI SYLLABLE PIT
-A039;W;YI SYLLABLE PIX
-A03A;W;YI SYLLABLE PI
-A03B;W;YI SYLLABLE PIP
-A03C;W;YI SYLLABLE PIEX
-A03D;W;YI SYLLABLE PIE
-A03E;W;YI SYLLABLE PIEP
-A03F;W;YI SYLLABLE PAT
-A040;W;YI SYLLABLE PAX
-A041;W;YI SYLLABLE PA
-A042;W;YI SYLLABLE PAP
-A043;W;YI SYLLABLE PUOX
-A044;W;YI SYLLABLE PUO
-A045;W;YI SYLLABLE PUOP
-A046;W;YI SYLLABLE POT
-A047;W;YI SYLLABLE POX
-A048;W;YI SYLLABLE PO
-A049;W;YI SYLLABLE POP
-A04A;W;YI SYLLABLE PUT
-A04B;W;YI SYLLABLE PUX
-A04C;W;YI SYLLABLE PU
-A04D;W;YI SYLLABLE PUP
-A04E;W;YI SYLLABLE PURX
-A04F;W;YI SYLLABLE PUR
-A050;W;YI SYLLABLE PYT
-A051;W;YI SYLLABLE PYX
-A052;W;YI SYLLABLE PY
-A053;W;YI SYLLABLE PYP
-A054;W;YI SYLLABLE PYRX
-A055;W;YI SYLLABLE PYR
-A056;W;YI SYLLABLE BBIT
-A057;W;YI SYLLABLE BBIX
-A058;W;YI SYLLABLE BBI
-A059;W;YI SYLLABLE BBIP
-A05A;W;YI SYLLABLE BBIET
-A05B;W;YI SYLLABLE BBIEX
-A05C;W;YI SYLLABLE BBIE
-A05D;W;YI SYLLABLE BBIEP
-A05E;W;YI SYLLABLE BBAT
-A05F;W;YI SYLLABLE BBAX
-A060;W;YI SYLLABLE BBA
-A061;W;YI SYLLABLE BBAP
-A062;W;YI SYLLABLE BBUOX
-A063;W;YI SYLLABLE BBUO
-A064;W;YI SYLLABLE BBUOP
-A065;W;YI SYLLABLE BBOT
-A066;W;YI SYLLABLE BBOX
-A067;W;YI SYLLABLE BBO
-A068;W;YI SYLLABLE BBOP
-A069;W;YI SYLLABLE BBEX
-A06A;W;YI SYLLABLE BBE
-A06B;W;YI SYLLABLE BBEP
-A06C;W;YI SYLLABLE BBUT
-A06D;W;YI SYLLABLE BBUX
-A06E;W;YI SYLLABLE BBU
-A06F;W;YI SYLLABLE BBUP
-A070;W;YI SYLLABLE BBURX
-A071;W;YI SYLLABLE BBUR
-A072;W;YI SYLLABLE BBYT
-A073;W;YI SYLLABLE BBYX
-A074;W;YI SYLLABLE BBY
-A075;W;YI SYLLABLE BBYP
-A076;W;YI SYLLABLE NBIT
-A077;W;YI SYLLABLE NBIX
-A078;W;YI SYLLABLE NBI
-A079;W;YI SYLLABLE NBIP
-A07A;W;YI SYLLABLE NBIEX
-A07B;W;YI SYLLABLE NBIE
-A07C;W;YI SYLLABLE NBIEP
-A07D;W;YI SYLLABLE NBAT
-A07E;W;YI SYLLABLE NBAX
-A07F;W;YI SYLLABLE NBA
-A080;W;YI SYLLABLE NBAP
-A081;W;YI SYLLABLE NBOT
-A082;W;YI SYLLABLE NBOX
-A083;W;YI SYLLABLE NBO
-A084;W;YI SYLLABLE NBOP
-A085;W;YI SYLLABLE NBUT
-A086;W;YI SYLLABLE NBUX
-A087;W;YI SYLLABLE NBU
-A088;W;YI SYLLABLE NBUP
-A089;W;YI SYLLABLE NBURX
-A08A;W;YI SYLLABLE NBUR
-A08B;W;YI SYLLABLE NBYT
-A08C;W;YI SYLLABLE NBYX
-A08D;W;YI SYLLABLE NBY
-A08E;W;YI SYLLABLE NBYP
-A08F;W;YI SYLLABLE NBYRX
-A090;W;YI SYLLABLE NBYR
-A091;W;YI SYLLABLE HMIT
-A092;W;YI SYLLABLE HMIX
-A093;W;YI SYLLABLE HMI
-A094;W;YI SYLLABLE HMIP
-A095;W;YI SYLLABLE HMIEX
-A096;W;YI SYLLABLE HMIE
-A097;W;YI SYLLABLE HMIEP
-A098;W;YI SYLLABLE HMAT
-A099;W;YI SYLLABLE HMAX
-A09A;W;YI SYLLABLE HMA
-A09B;W;YI SYLLABLE HMAP
-A09C;W;YI SYLLABLE HMUOX
-A09D;W;YI SYLLABLE HMUO
-A09E;W;YI SYLLABLE HMUOP
-A09F;W;YI SYLLABLE HMOT
-A0A0;W;YI SYLLABLE HMOX
-A0A1;W;YI SYLLABLE HMO
-A0A2;W;YI SYLLABLE HMOP
-A0A3;W;YI SYLLABLE HMUT
-A0A4;W;YI SYLLABLE HMUX
-A0A5;W;YI SYLLABLE HMU
-A0A6;W;YI SYLLABLE HMUP
-A0A7;W;YI SYLLABLE HMURX
-A0A8;W;YI SYLLABLE HMUR
-A0A9;W;YI SYLLABLE HMYX
-A0AA;W;YI SYLLABLE HMY
-A0AB;W;YI SYLLABLE HMYP
-A0AC;W;YI SYLLABLE HMYRX
-A0AD;W;YI SYLLABLE HMYR
-A0AE;W;YI SYLLABLE MIT
-A0AF;W;YI SYLLABLE MIX
-A0B0;W;YI SYLLABLE MI
-A0B1;W;YI SYLLABLE MIP
-A0B2;W;YI SYLLABLE MIEX
-A0B3;W;YI SYLLABLE MIE
-A0B4;W;YI SYLLABLE MIEP
-A0B5;W;YI SYLLABLE MAT
-A0B6;W;YI SYLLABLE MAX
-A0B7;W;YI SYLLABLE MA
-A0B8;W;YI SYLLABLE MAP
-A0B9;W;YI SYLLABLE MUOT
-A0BA;W;YI SYLLABLE MUOX
-A0BB;W;YI SYLLABLE MUO
-A0BC;W;YI SYLLABLE MUOP
-A0BD;W;YI SYLLABLE MOT
-A0BE;W;YI SYLLABLE MOX
-A0BF;W;YI SYLLABLE MO
-A0C0;W;YI SYLLABLE MOP
-A0C1;W;YI SYLLABLE MEX
-A0C2;W;YI SYLLABLE ME
-A0C3;W;YI SYLLABLE MUT
-A0C4;W;YI SYLLABLE MUX
-A0C5;W;YI SYLLABLE MU
-A0C6;W;YI SYLLABLE MUP
-A0C7;W;YI SYLLABLE MURX
-A0C8;W;YI SYLLABLE MUR
-A0C9;W;YI SYLLABLE MYT
-A0CA;W;YI SYLLABLE MYX
-A0CB;W;YI SYLLABLE MY
-A0CC;W;YI SYLLABLE MYP
-A0CD;W;YI SYLLABLE FIT
-A0CE;W;YI SYLLABLE FIX
-A0CF;W;YI SYLLABLE FI
-A0D0;W;YI SYLLABLE FIP
-A0D1;W;YI SYLLABLE FAT
-A0D2;W;YI SYLLABLE FAX
-A0D3;W;YI SYLLABLE FA
-A0D4;W;YI SYLLABLE FAP
-A0D5;W;YI SYLLABLE FOX
-A0D6;W;YI SYLLABLE FO
-A0D7;W;YI SYLLABLE FOP
-A0D8;W;YI SYLLABLE FUT
-A0D9;W;YI SYLLABLE FUX
-A0DA;W;YI SYLLABLE FU
-A0DB;W;YI SYLLABLE FUP
-A0DC;W;YI SYLLABLE FURX
-A0DD;W;YI SYLLABLE FUR
-A0DE;W;YI SYLLABLE FYT
-A0DF;W;YI SYLLABLE FYX
-A0E0;W;YI SYLLABLE FY
-A0E1;W;YI SYLLABLE FYP
-A0E2;W;YI SYLLABLE VIT
-A0E3;W;YI SYLLABLE VIX
-A0E4;W;YI SYLLABLE VI
-A0E5;W;YI SYLLABLE VIP
-A0E6;W;YI SYLLABLE VIET
-A0E7;W;YI SYLLABLE VIEX
-A0E8;W;YI SYLLABLE VIE
-A0E9;W;YI SYLLABLE VIEP
-A0EA;W;YI SYLLABLE VAT
-A0EB;W;YI SYLLABLE VAX
-A0EC;W;YI SYLLABLE VA
-A0ED;W;YI SYLLABLE VAP
-A0EE;W;YI SYLLABLE VOT
-A0EF;W;YI SYLLABLE VOX
-A0F0;W;YI SYLLABLE VO
-A0F1;W;YI SYLLABLE VOP
-A0F2;W;YI SYLLABLE VEX
-A0F3;W;YI SYLLABLE VEP
-A0F4;W;YI SYLLABLE VUT
-A0F5;W;YI SYLLABLE VUX
-A0F6;W;YI SYLLABLE VU
-A0F7;W;YI SYLLABLE VUP
-A0F8;W;YI SYLLABLE VURX
-A0F9;W;YI SYLLABLE VUR
-A0FA;W;YI SYLLABLE VYT
-A0FB;W;YI SYLLABLE VYX
-A0FC;W;YI SYLLABLE VY
-A0FD;W;YI SYLLABLE VYP
-A0FE;W;YI SYLLABLE VYRX
-A0FF;W;YI SYLLABLE VYR
-A100;W;YI SYLLABLE DIT
-A101;W;YI SYLLABLE DIX
-A102;W;YI SYLLABLE DI
-A103;W;YI SYLLABLE DIP
-A104;W;YI SYLLABLE DIEX
-A105;W;YI SYLLABLE DIE
-A106;W;YI SYLLABLE DIEP
-A107;W;YI SYLLABLE DAT
-A108;W;YI SYLLABLE DAX
-A109;W;YI SYLLABLE DA
-A10A;W;YI SYLLABLE DAP
-A10B;W;YI SYLLABLE DUOX
-A10C;W;YI SYLLABLE DUO
-A10D;W;YI SYLLABLE DOT
-A10E;W;YI SYLLABLE DOX
-A10F;W;YI SYLLABLE DO
-A110;W;YI SYLLABLE DOP
-A111;W;YI SYLLABLE DEX
-A112;W;YI SYLLABLE DE
-A113;W;YI SYLLABLE DEP
-A114;W;YI SYLLABLE DUT
-A115;W;YI SYLLABLE DUX
-A116;W;YI SYLLABLE DU
-A117;W;YI SYLLABLE DUP
-A118;W;YI SYLLABLE DURX
-A119;W;YI SYLLABLE DUR
-A11A;W;YI SYLLABLE TIT
-A11B;W;YI SYLLABLE TIX
-A11C;W;YI SYLLABLE TI
-A11D;W;YI SYLLABLE TIP
-A11E;W;YI SYLLABLE TIEX
-A11F;W;YI SYLLABLE TIE
-A120;W;YI SYLLABLE TIEP
-A121;W;YI SYLLABLE TAT
-A122;W;YI SYLLABLE TAX
-A123;W;YI SYLLABLE TA
-A124;W;YI SYLLABLE TAP
-A125;W;YI SYLLABLE TUOT
-A126;W;YI SYLLABLE TUOX
-A127;W;YI SYLLABLE TUO
-A128;W;YI SYLLABLE TUOP
-A129;W;YI SYLLABLE TOT
-A12A;W;YI SYLLABLE TOX
-A12B;W;YI SYLLABLE TO
-A12C;W;YI SYLLABLE TOP
-A12D;W;YI SYLLABLE TEX
-A12E;W;YI SYLLABLE TE
-A12F;W;YI SYLLABLE TEP
-A130;W;YI SYLLABLE TUT
-A131;W;YI SYLLABLE TUX
-A132;W;YI SYLLABLE TU
-A133;W;YI SYLLABLE TUP
-A134;W;YI SYLLABLE TURX
-A135;W;YI SYLLABLE TUR
-A136;W;YI SYLLABLE DDIT
-A137;W;YI SYLLABLE DDIX
-A138;W;YI SYLLABLE DDI
-A139;W;YI SYLLABLE DDIP
-A13A;W;YI SYLLABLE DDIEX
-A13B;W;YI SYLLABLE DDIE
-A13C;W;YI SYLLABLE DDIEP
-A13D;W;YI SYLLABLE DDAT
-A13E;W;YI SYLLABLE DDAX
-A13F;W;YI SYLLABLE DDA
-A140;W;YI SYLLABLE DDAP
-A141;W;YI SYLLABLE DDUOX
-A142;W;YI SYLLABLE DDUO
-A143;W;YI SYLLABLE DDUOP
-A144;W;YI SYLLABLE DDOT
-A145;W;YI SYLLABLE DDOX
-A146;W;YI SYLLABLE DDO
-A147;W;YI SYLLABLE DDOP
-A148;W;YI SYLLABLE DDEX
-A149;W;YI SYLLABLE DDE
-A14A;W;YI SYLLABLE DDEP
-A14B;W;YI SYLLABLE DDUT
-A14C;W;YI SYLLABLE DDUX
-A14D;W;YI SYLLABLE DDU
-A14E;W;YI SYLLABLE DDUP
-A14F;W;YI SYLLABLE DDURX
-A150;W;YI SYLLABLE DDUR
-A151;W;YI SYLLABLE NDIT
-A152;W;YI SYLLABLE NDIX
-A153;W;YI SYLLABLE NDI
-A154;W;YI SYLLABLE NDIP
-A155;W;YI SYLLABLE NDIEX
-A156;W;YI SYLLABLE NDIE
-A157;W;YI SYLLABLE NDAT
-A158;W;YI SYLLABLE NDAX
-A159;W;YI SYLLABLE NDA
-A15A;W;YI SYLLABLE NDAP
-A15B;W;YI SYLLABLE NDOT
-A15C;W;YI SYLLABLE NDOX
-A15D;W;YI SYLLABLE NDO
-A15E;W;YI SYLLABLE NDOP
-A15F;W;YI SYLLABLE NDEX
-A160;W;YI SYLLABLE NDE
-A161;W;YI SYLLABLE NDEP
-A162;W;YI SYLLABLE NDUT
-A163;W;YI SYLLABLE NDUX
-A164;W;YI SYLLABLE NDU
-A165;W;YI SYLLABLE NDUP
-A166;W;YI SYLLABLE NDURX
-A167;W;YI SYLLABLE NDUR
-A168;W;YI SYLLABLE HNIT
-A169;W;YI SYLLABLE HNIX
-A16A;W;YI SYLLABLE HNI
-A16B;W;YI SYLLABLE HNIP
-A16C;W;YI SYLLABLE HNIET
-A16D;W;YI SYLLABLE HNIEX
-A16E;W;YI SYLLABLE HNIE
-A16F;W;YI SYLLABLE HNIEP
-A170;W;YI SYLLABLE HNAT
-A171;W;YI SYLLABLE HNAX
-A172;W;YI SYLLABLE HNA
-A173;W;YI SYLLABLE HNAP
-A174;W;YI SYLLABLE HNUOX
-A175;W;YI SYLLABLE HNUO
-A176;W;YI SYLLABLE HNOT
-A177;W;YI SYLLABLE HNOX
-A178;W;YI SYLLABLE HNOP
-A179;W;YI SYLLABLE HNEX
-A17A;W;YI SYLLABLE HNE
-A17B;W;YI SYLLABLE HNEP
-A17C;W;YI SYLLABLE HNUT
-A17D;W;YI SYLLABLE NIT
-A17E;W;YI SYLLABLE NIX
-A17F;W;YI SYLLABLE NI
-A180;W;YI SYLLABLE NIP
-A181;W;YI SYLLABLE NIEX
-A182;W;YI SYLLABLE NIE
-A183;W;YI SYLLABLE NIEP
-A184;W;YI SYLLABLE NAX
-A185;W;YI SYLLABLE NA
-A186;W;YI SYLLABLE NAP
-A187;W;YI SYLLABLE NUOX
-A188;W;YI SYLLABLE NUO
-A189;W;YI SYLLABLE NUOP
-A18A;W;YI SYLLABLE NOT
-A18B;W;YI SYLLABLE NOX
-A18C;W;YI SYLLABLE NO
-A18D;W;YI SYLLABLE NOP
-A18E;W;YI SYLLABLE NEX
-A18F;W;YI SYLLABLE NE
-A190;W;YI SYLLABLE NEP
-A191;W;YI SYLLABLE NUT
-A192;W;YI SYLLABLE NUX
-A193;W;YI SYLLABLE NU
-A194;W;YI SYLLABLE NUP
-A195;W;YI SYLLABLE NURX
-A196;W;YI SYLLABLE NUR
-A197;W;YI SYLLABLE HLIT
-A198;W;YI SYLLABLE HLIX
-A199;W;YI SYLLABLE HLI
-A19A;W;YI SYLLABLE HLIP
-A19B;W;YI SYLLABLE HLIEX
-A19C;W;YI SYLLABLE HLIE
-A19D;W;YI SYLLABLE HLIEP
-A19E;W;YI SYLLABLE HLAT
-A19F;W;YI SYLLABLE HLAX
-A1A0;W;YI SYLLABLE HLA
-A1A1;W;YI SYLLABLE HLAP
-A1A2;W;YI SYLLABLE HLUOX
-A1A3;W;YI SYLLABLE HLUO
-A1A4;W;YI SYLLABLE HLUOP
-A1A5;W;YI SYLLABLE HLOX
-A1A6;W;YI SYLLABLE HLO
-A1A7;W;YI SYLLABLE HLOP
-A1A8;W;YI SYLLABLE HLEX
-A1A9;W;YI SYLLABLE HLE
-A1AA;W;YI SYLLABLE HLEP
-A1AB;W;YI SYLLABLE HLUT
-A1AC;W;YI SYLLABLE HLUX
-A1AD;W;YI SYLLABLE HLU
-A1AE;W;YI SYLLABLE HLUP
-A1AF;W;YI SYLLABLE HLURX
-A1B0;W;YI SYLLABLE HLUR
-A1B1;W;YI SYLLABLE HLYT
-A1B2;W;YI SYLLABLE HLYX
-A1B3;W;YI SYLLABLE HLY
-A1B4;W;YI SYLLABLE HLYP
-A1B5;W;YI SYLLABLE HLYRX
-A1B6;W;YI SYLLABLE HLYR
-A1B7;W;YI SYLLABLE LIT
-A1B8;W;YI SYLLABLE LIX
-A1B9;W;YI SYLLABLE LI
-A1BA;W;YI SYLLABLE LIP
-A1BB;W;YI SYLLABLE LIET
-A1BC;W;YI SYLLABLE LIEX
-A1BD;W;YI SYLLABLE LIE
-A1BE;W;YI SYLLABLE LIEP
-A1BF;W;YI SYLLABLE LAT
-A1C0;W;YI SYLLABLE LAX
-A1C1;W;YI SYLLABLE LA
-A1C2;W;YI SYLLABLE LAP
-A1C3;W;YI SYLLABLE LUOT
-A1C4;W;YI SYLLABLE LUOX
-A1C5;W;YI SYLLABLE LUO
-A1C6;W;YI SYLLABLE LUOP
-A1C7;W;YI SYLLABLE LOT
-A1C8;W;YI SYLLABLE LOX
-A1C9;W;YI SYLLABLE LO
-A1CA;W;YI SYLLABLE LOP
-A1CB;W;YI SYLLABLE LEX
-A1CC;W;YI SYLLABLE LE
-A1CD;W;YI SYLLABLE LEP
-A1CE;W;YI SYLLABLE LUT
-A1CF;W;YI SYLLABLE LUX
-A1D0;W;YI SYLLABLE LU
-A1D1;W;YI SYLLABLE LUP
-A1D2;W;YI SYLLABLE LURX
-A1D3;W;YI SYLLABLE LUR
-A1D4;W;YI SYLLABLE LYT
-A1D5;W;YI SYLLABLE LYX
-A1D6;W;YI SYLLABLE LY
-A1D7;W;YI SYLLABLE LYP
-A1D8;W;YI SYLLABLE LYRX
-A1D9;W;YI SYLLABLE LYR
-A1DA;W;YI SYLLABLE GIT
-A1DB;W;YI SYLLABLE GIX
-A1DC;W;YI SYLLABLE GI
-A1DD;W;YI SYLLABLE GIP
-A1DE;W;YI SYLLABLE GIET
-A1DF;W;YI SYLLABLE GIEX
-A1E0;W;YI SYLLABLE GIE
-A1E1;W;YI SYLLABLE GIEP
-A1E2;W;YI SYLLABLE GAT
-A1E3;W;YI SYLLABLE GAX
-A1E4;W;YI SYLLABLE GA
-A1E5;W;YI SYLLABLE GAP
-A1E6;W;YI SYLLABLE GUOT
-A1E7;W;YI SYLLABLE GUOX
-A1E8;W;YI SYLLABLE GUO
-A1E9;W;YI SYLLABLE GUOP
-A1EA;W;YI SYLLABLE GOT
-A1EB;W;YI SYLLABLE GOX
-A1EC;W;YI SYLLABLE GO
-A1ED;W;YI SYLLABLE GOP
-A1EE;W;YI SYLLABLE GET
-A1EF;W;YI SYLLABLE GEX
-A1F0;W;YI SYLLABLE GE
-A1F1;W;YI SYLLABLE GEP
-A1F2;W;YI SYLLABLE GUT
-A1F3;W;YI SYLLABLE GUX
-A1F4;W;YI SYLLABLE GU
-A1F5;W;YI SYLLABLE GUP
-A1F6;W;YI SYLLABLE GURX
-A1F7;W;YI SYLLABLE GUR
-A1F8;W;YI SYLLABLE KIT
-A1F9;W;YI SYLLABLE KIX
-A1FA;W;YI SYLLABLE KI
-A1FB;W;YI SYLLABLE KIP
-A1FC;W;YI SYLLABLE KIEX
-A1FD;W;YI SYLLABLE KIE
-A1FE;W;YI SYLLABLE KIEP
-A1FF;W;YI SYLLABLE KAT
-A200;W;YI SYLLABLE KAX
-A201;W;YI SYLLABLE KA
-A202;W;YI SYLLABLE KAP
-A203;W;YI SYLLABLE KUOX
-A204;W;YI SYLLABLE KUO
-A205;W;YI SYLLABLE KUOP
-A206;W;YI SYLLABLE KOT
-A207;W;YI SYLLABLE KOX
-A208;W;YI SYLLABLE KO
-A209;W;YI SYLLABLE KOP
-A20A;W;YI SYLLABLE KET
-A20B;W;YI SYLLABLE KEX
-A20C;W;YI SYLLABLE KE
-A20D;W;YI SYLLABLE KEP
-A20E;W;YI SYLLABLE KUT
-A20F;W;YI SYLLABLE KUX
-A210;W;YI SYLLABLE KU
-A211;W;YI SYLLABLE KUP
-A212;W;YI SYLLABLE KURX
-A213;W;YI SYLLABLE KUR
-A214;W;YI SYLLABLE GGIT
-A215;W;YI SYLLABLE GGIX
-A216;W;YI SYLLABLE GGI
-A217;W;YI SYLLABLE GGIEX
-A218;W;YI SYLLABLE GGIE
-A219;W;YI SYLLABLE GGIEP
-A21A;W;YI SYLLABLE GGAT
-A21B;W;YI SYLLABLE GGAX
-A21C;W;YI SYLLABLE GGA
-A21D;W;YI SYLLABLE GGAP
-A21E;W;YI SYLLABLE GGUOT
-A21F;W;YI SYLLABLE GGUOX
-A220;W;YI SYLLABLE GGUO
-A221;W;YI SYLLABLE GGUOP
-A222;W;YI SYLLABLE GGOT
-A223;W;YI SYLLABLE GGOX
-A224;W;YI SYLLABLE GGO
-A225;W;YI SYLLABLE GGOP
-A226;W;YI SYLLABLE GGET
-A227;W;YI SYLLABLE GGEX
-A228;W;YI SYLLABLE GGE
-A229;W;YI SYLLABLE GGEP
-A22A;W;YI SYLLABLE GGUT
-A22B;W;YI SYLLABLE GGUX
-A22C;W;YI SYLLABLE GGU
-A22D;W;YI SYLLABLE GGUP
-A22E;W;YI SYLLABLE GGURX
-A22F;W;YI SYLLABLE GGUR
-A230;W;YI SYLLABLE MGIEX
-A231;W;YI SYLLABLE MGIE
-A232;W;YI SYLLABLE MGAT
-A233;W;YI SYLLABLE MGAX
-A234;W;YI SYLLABLE MGA
-A235;W;YI SYLLABLE MGAP
-A236;W;YI SYLLABLE MGUOX
-A237;W;YI SYLLABLE MGUO
-A238;W;YI SYLLABLE MGUOP
-A239;W;YI SYLLABLE MGOT
-A23A;W;YI SYLLABLE MGOX
-A23B;W;YI SYLLABLE MGO
-A23C;W;YI SYLLABLE MGOP
-A23D;W;YI SYLLABLE MGEX
-A23E;W;YI SYLLABLE MGE
-A23F;W;YI SYLLABLE MGEP
-A240;W;YI SYLLABLE MGUT
-A241;W;YI SYLLABLE MGUX
-A242;W;YI SYLLABLE MGU
-A243;W;YI SYLLABLE MGUP
-A244;W;YI SYLLABLE MGURX
-A245;W;YI SYLLABLE MGUR
-A246;W;YI SYLLABLE HXIT
-A247;W;YI SYLLABLE HXIX
-A248;W;YI SYLLABLE HXI
-A249;W;YI SYLLABLE HXIP
-A24A;W;YI SYLLABLE HXIET
-A24B;W;YI SYLLABLE HXIEX
-A24C;W;YI SYLLABLE HXIE
-A24D;W;YI SYLLABLE HXIEP
-A24E;W;YI SYLLABLE HXAT
-A24F;W;YI SYLLABLE HXAX
-A250;W;YI SYLLABLE HXA
-A251;W;YI SYLLABLE HXAP
-A252;W;YI SYLLABLE HXUOT
-A253;W;YI SYLLABLE HXUOX
-A254;W;YI SYLLABLE HXUO
-A255;W;YI SYLLABLE HXUOP
-A256;W;YI SYLLABLE HXOT
-A257;W;YI SYLLABLE HXOX
-A258;W;YI SYLLABLE HXO
-A259;W;YI SYLLABLE HXOP
-A25A;W;YI SYLLABLE HXEX
-A25B;W;YI SYLLABLE HXE
-A25C;W;YI SYLLABLE HXEP
-A25D;W;YI SYLLABLE NGIEX
-A25E;W;YI SYLLABLE NGIE
-A25F;W;YI SYLLABLE NGIEP
-A260;W;YI SYLLABLE NGAT
-A261;W;YI SYLLABLE NGAX
-A262;W;YI SYLLABLE NGA
-A263;W;YI SYLLABLE NGAP
-A264;W;YI SYLLABLE NGUOT
-A265;W;YI SYLLABLE NGUOX
-A266;W;YI SYLLABLE NGUO
-A267;W;YI SYLLABLE NGOT
-A268;W;YI SYLLABLE NGOX
-A269;W;YI SYLLABLE NGO
-A26A;W;YI SYLLABLE NGOP
-A26B;W;YI SYLLABLE NGEX
-A26C;W;YI SYLLABLE NGE
-A26D;W;YI SYLLABLE NGEP
-A26E;W;YI SYLLABLE HIT
-A26F;W;YI SYLLABLE HIEX
-A270;W;YI SYLLABLE HIE
-A271;W;YI SYLLABLE HAT
-A272;W;YI SYLLABLE HAX
-A273;W;YI SYLLABLE HA
-A274;W;YI SYLLABLE HAP
-A275;W;YI SYLLABLE HUOT
-A276;W;YI SYLLABLE HUOX
-A277;W;YI SYLLABLE HUO
-A278;W;YI SYLLABLE HUOP
-A279;W;YI SYLLABLE HOT
-A27A;W;YI SYLLABLE HOX
-A27B;W;YI SYLLABLE HO
-A27C;W;YI SYLLABLE HOP
-A27D;W;YI SYLLABLE HEX
-A27E;W;YI SYLLABLE HE
-A27F;W;YI SYLLABLE HEP
-A280;W;YI SYLLABLE WAT
-A281;W;YI SYLLABLE WAX
-A282;W;YI SYLLABLE WA
-A283;W;YI SYLLABLE WAP
-A284;W;YI SYLLABLE WUOX
-A285;W;YI SYLLABLE WUO
-A286;W;YI SYLLABLE WUOP
-A287;W;YI SYLLABLE WOX
-A288;W;YI SYLLABLE WO
-A289;W;YI SYLLABLE WOP
-A28A;W;YI SYLLABLE WEX
-A28B;W;YI SYLLABLE WE
-A28C;W;YI SYLLABLE WEP
-A28D;W;YI SYLLABLE ZIT
-A28E;W;YI SYLLABLE ZIX
-A28F;W;YI SYLLABLE ZI
-A290;W;YI SYLLABLE ZIP
-A291;W;YI SYLLABLE ZIEX
-A292;W;YI SYLLABLE ZIE
-A293;W;YI SYLLABLE ZIEP
-A294;W;YI SYLLABLE ZAT
-A295;W;YI SYLLABLE ZAX
-A296;W;YI SYLLABLE ZA
-A297;W;YI SYLLABLE ZAP
-A298;W;YI SYLLABLE ZUOX
-A299;W;YI SYLLABLE ZUO
-A29A;W;YI SYLLABLE ZUOP
-A29B;W;YI SYLLABLE ZOT
-A29C;W;YI SYLLABLE ZOX
-A29D;W;YI SYLLABLE ZO
-A29E;W;YI SYLLABLE ZOP
-A29F;W;YI SYLLABLE ZEX
-A2A0;W;YI SYLLABLE ZE
-A2A1;W;YI SYLLABLE ZEP
-A2A2;W;YI SYLLABLE ZUT
-A2A3;W;YI SYLLABLE ZUX
-A2A4;W;YI SYLLABLE ZU
-A2A5;W;YI SYLLABLE ZUP
-A2A6;W;YI SYLLABLE ZURX
-A2A7;W;YI SYLLABLE ZUR
-A2A8;W;YI SYLLABLE ZYT
-A2A9;W;YI SYLLABLE ZYX
-A2AA;W;YI SYLLABLE ZY
-A2AB;W;YI SYLLABLE ZYP
-A2AC;W;YI SYLLABLE ZYRX
-A2AD;W;YI SYLLABLE ZYR
-A2AE;W;YI SYLLABLE CIT
-A2AF;W;YI SYLLABLE CIX
-A2B0;W;YI SYLLABLE CI
-A2B1;W;YI SYLLABLE CIP
-A2B2;W;YI SYLLABLE CIET
-A2B3;W;YI SYLLABLE CIEX
-A2B4;W;YI SYLLABLE CIE
-A2B5;W;YI SYLLABLE CIEP
-A2B6;W;YI SYLLABLE CAT
-A2B7;W;YI SYLLABLE CAX
-A2B8;W;YI SYLLABLE CA
-A2B9;W;YI SYLLABLE CAP
-A2BA;W;YI SYLLABLE CUOX
-A2BB;W;YI SYLLABLE CUO
-A2BC;W;YI SYLLABLE CUOP
-A2BD;W;YI SYLLABLE COT
-A2BE;W;YI SYLLABLE COX
-A2BF;W;YI SYLLABLE CO
-A2C0;W;YI SYLLABLE COP
-A2C1;W;YI SYLLABLE CEX
-A2C2;W;YI SYLLABLE CE
-A2C3;W;YI SYLLABLE CEP
-A2C4;W;YI SYLLABLE CUT
-A2C5;W;YI SYLLABLE CUX
-A2C6;W;YI SYLLABLE CU
-A2C7;W;YI SYLLABLE CUP
-A2C8;W;YI SYLLABLE CURX
-A2C9;W;YI SYLLABLE CUR
-A2CA;W;YI SYLLABLE CYT
-A2CB;W;YI SYLLABLE CYX
-A2CC;W;YI SYLLABLE CY
-A2CD;W;YI SYLLABLE CYP
-A2CE;W;YI SYLLABLE CYRX
-A2CF;W;YI SYLLABLE CYR
-A2D0;W;YI SYLLABLE ZZIT
-A2D1;W;YI SYLLABLE ZZIX
-A2D2;W;YI SYLLABLE ZZI
-A2D3;W;YI SYLLABLE ZZIP
-A2D4;W;YI SYLLABLE ZZIET
-A2D5;W;YI SYLLABLE ZZIEX
-A2D6;W;YI SYLLABLE ZZIE
-A2D7;W;YI SYLLABLE ZZIEP
-A2D8;W;YI SYLLABLE ZZAT
-A2D9;W;YI SYLLABLE ZZAX
-A2DA;W;YI SYLLABLE ZZA
-A2DB;W;YI SYLLABLE ZZAP
-A2DC;W;YI SYLLABLE ZZOX
-A2DD;W;YI SYLLABLE ZZO
-A2DE;W;YI SYLLABLE ZZOP
-A2DF;W;YI SYLLABLE ZZEX
-A2E0;W;YI SYLLABLE ZZE
-A2E1;W;YI SYLLABLE ZZEP
-A2E2;W;YI SYLLABLE ZZUX
-A2E3;W;YI SYLLABLE ZZU
-A2E4;W;YI SYLLABLE ZZUP
-A2E5;W;YI SYLLABLE ZZURX
-A2E6;W;YI SYLLABLE ZZUR
-A2E7;W;YI SYLLABLE ZZYT
-A2E8;W;YI SYLLABLE ZZYX
-A2E9;W;YI SYLLABLE ZZY
-A2EA;W;YI SYLLABLE ZZYP
-A2EB;W;YI SYLLABLE ZZYRX
-A2EC;W;YI SYLLABLE ZZYR
-A2ED;W;YI SYLLABLE NZIT
-A2EE;W;YI SYLLABLE NZIX
-A2EF;W;YI SYLLABLE NZI
-A2F0;W;YI SYLLABLE NZIP
-A2F1;W;YI SYLLABLE NZIEX
-A2F2;W;YI SYLLABLE NZIE
-A2F3;W;YI SYLLABLE NZIEP
-A2F4;W;YI SYLLABLE NZAT
-A2F5;W;YI SYLLABLE NZAX
-A2F6;W;YI SYLLABLE NZA
-A2F7;W;YI SYLLABLE NZAP
-A2F8;W;YI SYLLABLE NZUOX
-A2F9;W;YI SYLLABLE NZUO
-A2FA;W;YI SYLLABLE NZOX
-A2FB;W;YI SYLLABLE NZOP
-A2FC;W;YI SYLLABLE NZEX
-A2FD;W;YI SYLLABLE NZE
-A2FE;W;YI SYLLABLE NZUX
-A2FF;W;YI SYLLABLE NZU
-A300;W;YI SYLLABLE NZUP
-A301;W;YI SYLLABLE NZURX
-A302;W;YI SYLLABLE NZUR
-A303;W;YI SYLLABLE NZYT
-A304;W;YI SYLLABLE NZYX
-A305;W;YI SYLLABLE NZY
-A306;W;YI SYLLABLE NZYP
-A307;W;YI SYLLABLE NZYRX
-A308;W;YI SYLLABLE NZYR
-A309;W;YI SYLLABLE SIT
-A30A;W;YI SYLLABLE SIX
-A30B;W;YI SYLLABLE SI
-A30C;W;YI SYLLABLE SIP
-A30D;W;YI SYLLABLE SIEX
-A30E;W;YI SYLLABLE SIE
-A30F;W;YI SYLLABLE SIEP
-A310;W;YI SYLLABLE SAT
-A311;W;YI SYLLABLE SAX
-A312;W;YI SYLLABLE SA
-A313;W;YI SYLLABLE SAP
-A314;W;YI SYLLABLE SUOX
-A315;W;YI SYLLABLE SUO
-A316;W;YI SYLLABLE SUOP
-A317;W;YI SYLLABLE SOT
-A318;W;YI SYLLABLE SOX
-A319;W;YI SYLLABLE SO
-A31A;W;YI SYLLABLE SOP
-A31B;W;YI SYLLABLE SEX
-A31C;W;YI SYLLABLE SE
-A31D;W;YI SYLLABLE SEP
-A31E;W;YI SYLLABLE SUT
-A31F;W;YI SYLLABLE SUX
-A320;W;YI SYLLABLE SU
-A321;W;YI SYLLABLE SUP
-A322;W;YI SYLLABLE SURX
-A323;W;YI SYLLABLE SUR
-A324;W;YI SYLLABLE SYT
-A325;W;YI SYLLABLE SYX
-A326;W;YI SYLLABLE SY
-A327;W;YI SYLLABLE SYP
-A328;W;YI SYLLABLE SYRX
-A329;W;YI SYLLABLE SYR
-A32A;W;YI SYLLABLE SSIT
-A32B;W;YI SYLLABLE SSIX
-A32C;W;YI SYLLABLE SSI
-A32D;W;YI SYLLABLE SSIP
-A32E;W;YI SYLLABLE SSIEX
-A32F;W;YI SYLLABLE SSIE
-A330;W;YI SYLLABLE SSIEP
-A331;W;YI SYLLABLE SSAT
-A332;W;YI SYLLABLE SSAX
-A333;W;YI SYLLABLE SSA
-A334;W;YI SYLLABLE SSAP
-A335;W;YI SYLLABLE SSOT
-A336;W;YI SYLLABLE SSOX
-A337;W;YI SYLLABLE SSO
-A338;W;YI SYLLABLE SSOP
-A339;W;YI SYLLABLE SSEX
-A33A;W;YI SYLLABLE SSE
-A33B;W;YI SYLLABLE SSEP
-A33C;W;YI SYLLABLE SSUT
-A33D;W;YI SYLLABLE SSUX
-A33E;W;YI SYLLABLE SSU
-A33F;W;YI SYLLABLE SSUP
-A340;W;YI SYLLABLE SSYT
-A341;W;YI SYLLABLE SSYX
-A342;W;YI SYLLABLE SSY
-A343;W;YI SYLLABLE SSYP
-A344;W;YI SYLLABLE SSYRX
-A345;W;YI SYLLABLE SSYR
-A346;W;YI SYLLABLE ZHAT
-A347;W;YI SYLLABLE ZHAX
-A348;W;YI SYLLABLE ZHA
-A349;W;YI SYLLABLE ZHAP
-A34A;W;YI SYLLABLE ZHUOX
-A34B;W;YI SYLLABLE ZHUO
-A34C;W;YI SYLLABLE ZHUOP
-A34D;W;YI SYLLABLE ZHOT
-A34E;W;YI SYLLABLE ZHOX
-A34F;W;YI SYLLABLE ZHO
-A350;W;YI SYLLABLE ZHOP
-A351;W;YI SYLLABLE ZHET
-A352;W;YI SYLLABLE ZHEX
-A353;W;YI SYLLABLE ZHE
-A354;W;YI SYLLABLE ZHEP
-A355;W;YI SYLLABLE ZHUT
-A356;W;YI SYLLABLE ZHUX
-A357;W;YI SYLLABLE ZHU
-A358;W;YI SYLLABLE ZHUP
-A359;W;YI SYLLABLE ZHURX
-A35A;W;YI SYLLABLE ZHUR
-A35B;W;YI SYLLABLE ZHYT
-A35C;W;YI SYLLABLE ZHYX
-A35D;W;YI SYLLABLE ZHY
-A35E;W;YI SYLLABLE ZHYP
-A35F;W;YI SYLLABLE ZHYRX
-A360;W;YI SYLLABLE ZHYR
-A361;W;YI SYLLABLE CHAT
-A362;W;YI SYLLABLE CHAX
-A363;W;YI SYLLABLE CHA
-A364;W;YI SYLLABLE CHAP
-A365;W;YI SYLLABLE CHUOT
-A366;W;YI SYLLABLE CHUOX
-A367;W;YI SYLLABLE CHUO
-A368;W;YI SYLLABLE CHUOP
-A369;W;YI SYLLABLE CHOT
-A36A;W;YI SYLLABLE CHOX
-A36B;W;YI SYLLABLE CHO
-A36C;W;YI SYLLABLE CHOP
-A36D;W;YI SYLLABLE CHET
-A36E;W;YI SYLLABLE CHEX
-A36F;W;YI SYLLABLE CHE
-A370;W;YI SYLLABLE CHEP
-A371;W;YI SYLLABLE CHUX
-A372;W;YI SYLLABLE CHU
-A373;W;YI SYLLABLE CHUP
-A374;W;YI SYLLABLE CHURX
-A375;W;YI SYLLABLE CHUR
-A376;W;YI SYLLABLE CHYT
-A377;W;YI SYLLABLE CHYX
-A378;W;YI SYLLABLE CHY
-A379;W;YI SYLLABLE CHYP
-A37A;W;YI SYLLABLE CHYRX
-A37B;W;YI SYLLABLE CHYR
-A37C;W;YI SYLLABLE RRAX
-A37D;W;YI SYLLABLE RRA
-A37E;W;YI SYLLABLE RRUOX
-A37F;W;YI SYLLABLE RRUO
-A380;W;YI SYLLABLE RROT
-A381;W;YI SYLLABLE RROX
-A382;W;YI SYLLABLE RRO
-A383;W;YI SYLLABLE RROP
-A384;W;YI SYLLABLE RRET
-A385;W;YI SYLLABLE RREX
-A386;W;YI SYLLABLE RRE
-A387;W;YI SYLLABLE RREP
-A388;W;YI SYLLABLE RRUT
-A389;W;YI SYLLABLE RRUX
-A38A;W;YI SYLLABLE RRU
-A38B;W;YI SYLLABLE RRUP
-A38C;W;YI SYLLABLE RRURX
-A38D;W;YI SYLLABLE RRUR
-A38E;W;YI SYLLABLE RRYT
-A38F;W;YI SYLLABLE RRYX
-A390;W;YI SYLLABLE RRY
-A391;W;YI SYLLABLE RRYP
-A392;W;YI SYLLABLE RRYRX
-A393;W;YI SYLLABLE RRYR
-A394;W;YI SYLLABLE NRAT
-A395;W;YI SYLLABLE NRAX
-A396;W;YI SYLLABLE NRA
-A397;W;YI SYLLABLE NRAP
-A398;W;YI SYLLABLE NROX
-A399;W;YI SYLLABLE NRO
-A39A;W;YI SYLLABLE NROP
-A39B;W;YI SYLLABLE NRET
-A39C;W;YI SYLLABLE NREX
-A39D;W;YI SYLLABLE NRE
-A39E;W;YI SYLLABLE NREP
-A39F;W;YI SYLLABLE NRUT
-A3A0;W;YI SYLLABLE NRUX
-A3A1;W;YI SYLLABLE NRU
-A3A2;W;YI SYLLABLE NRUP
-A3A3;W;YI SYLLABLE NRURX
-A3A4;W;YI SYLLABLE NRUR
-A3A5;W;YI SYLLABLE NRYT
-A3A6;W;YI SYLLABLE NRYX
-A3A7;W;YI SYLLABLE NRY
-A3A8;W;YI SYLLABLE NRYP
-A3A9;W;YI SYLLABLE NRYRX
-A3AA;W;YI SYLLABLE NRYR
-A3AB;W;YI SYLLABLE SHAT
-A3AC;W;YI SYLLABLE SHAX
-A3AD;W;YI SYLLABLE SHA
-A3AE;W;YI SYLLABLE SHAP
-A3AF;W;YI SYLLABLE SHUOX
-A3B0;W;YI SYLLABLE SHUO
-A3B1;W;YI SYLLABLE SHUOP
-A3B2;W;YI SYLLABLE SHOT
-A3B3;W;YI SYLLABLE SHOX
-A3B4;W;YI SYLLABLE SHO
-A3B5;W;YI SYLLABLE SHOP
-A3B6;W;YI SYLLABLE SHET
-A3B7;W;YI SYLLABLE SHEX
-A3B8;W;YI SYLLABLE SHE
-A3B9;W;YI SYLLABLE SHEP
-A3BA;W;YI SYLLABLE SHUT
-A3BB;W;YI SYLLABLE SHUX
-A3BC;W;YI SYLLABLE SHU
-A3BD;W;YI SYLLABLE SHUP
-A3BE;W;YI SYLLABLE SHURX
-A3BF;W;YI SYLLABLE SHUR
-A3C0;W;YI SYLLABLE SHYT
-A3C1;W;YI SYLLABLE SHYX
-A3C2;W;YI SYLLABLE SHY
-A3C3;W;YI SYLLABLE SHYP
-A3C4;W;YI SYLLABLE SHYRX
-A3C5;W;YI SYLLABLE SHYR
-A3C6;W;YI SYLLABLE RAT
-A3C7;W;YI SYLLABLE RAX
-A3C8;W;YI SYLLABLE RA
-A3C9;W;YI SYLLABLE RAP
-A3CA;W;YI SYLLABLE RUOX
-A3CB;W;YI SYLLABLE RUO
-A3CC;W;YI SYLLABLE RUOP
-A3CD;W;YI SYLLABLE ROT
-A3CE;W;YI SYLLABLE ROX
-A3CF;W;YI SYLLABLE RO
-A3D0;W;YI SYLLABLE ROP
-A3D1;W;YI SYLLABLE REX
-A3D2;W;YI SYLLABLE RE
-A3D3;W;YI SYLLABLE REP
-A3D4;W;YI SYLLABLE RUT
-A3D5;W;YI SYLLABLE RUX
-A3D6;W;YI SYLLABLE RU
-A3D7;W;YI SYLLABLE RUP
-A3D8;W;YI SYLLABLE RURX
-A3D9;W;YI SYLLABLE RUR
-A3DA;W;YI SYLLABLE RYT
-A3DB;W;YI SYLLABLE RYX
-A3DC;W;YI SYLLABLE RY
-A3DD;W;YI SYLLABLE RYP
-A3DE;W;YI SYLLABLE RYRX
-A3DF;W;YI SYLLABLE RYR
-A3E0;W;YI SYLLABLE JIT
-A3E1;W;YI SYLLABLE JIX
-A3E2;W;YI SYLLABLE JI
-A3E3;W;YI SYLLABLE JIP
-A3E4;W;YI SYLLABLE JIET
-A3E5;W;YI SYLLABLE JIEX
-A3E6;W;YI SYLLABLE JIE
-A3E7;W;YI SYLLABLE JIEP
-A3E8;W;YI SYLLABLE JUOT
-A3E9;W;YI SYLLABLE JUOX
-A3EA;W;YI SYLLABLE JUO
-A3EB;W;YI SYLLABLE JUOP
-A3EC;W;YI SYLLABLE JOT
-A3ED;W;YI SYLLABLE JOX
-A3EE;W;YI SYLLABLE JO
-A3EF;W;YI SYLLABLE JOP
-A3F0;W;YI SYLLABLE JUT
-A3F1;W;YI SYLLABLE JUX
-A3F2;W;YI SYLLABLE JU
-A3F3;W;YI SYLLABLE JUP
-A3F4;W;YI SYLLABLE JURX
-A3F5;W;YI SYLLABLE JUR
-A3F6;W;YI SYLLABLE JYT
-A3F7;W;YI SYLLABLE JYX
-A3F8;W;YI SYLLABLE JY
-A3F9;W;YI SYLLABLE JYP
-A3FA;W;YI SYLLABLE JYRX
-A3FB;W;YI SYLLABLE JYR
-A3FC;W;YI SYLLABLE QIT
-A3FD;W;YI SYLLABLE QIX
-A3FE;W;YI SYLLABLE QI
-A3FF;W;YI SYLLABLE QIP
-A400;W;YI SYLLABLE QIET
-A401;W;YI SYLLABLE QIEX
-A402;W;YI SYLLABLE QIE
-A403;W;YI SYLLABLE QIEP
-A404;W;YI SYLLABLE QUOT
-A405;W;YI SYLLABLE QUOX
-A406;W;YI SYLLABLE QUO
-A407;W;YI SYLLABLE QUOP
-A408;W;YI SYLLABLE QOT
-A409;W;YI SYLLABLE QOX
-A40A;W;YI SYLLABLE QO
-A40B;W;YI SYLLABLE QOP
-A40C;W;YI SYLLABLE QUT
-A40D;W;YI SYLLABLE QUX
-A40E;W;YI SYLLABLE QU
-A40F;W;YI SYLLABLE QUP
-A410;W;YI SYLLABLE QURX
-A411;W;YI SYLLABLE QUR
-A412;W;YI SYLLABLE QYT
-A413;W;YI SYLLABLE QYX
-A414;W;YI SYLLABLE QY
-A415;W;YI SYLLABLE QYP
-A416;W;YI SYLLABLE QYRX
-A417;W;YI SYLLABLE QYR
-A418;W;YI SYLLABLE JJIT
-A419;W;YI SYLLABLE JJIX
-A41A;W;YI SYLLABLE JJI
-A41B;W;YI SYLLABLE JJIP
-A41C;W;YI SYLLABLE JJIET
-A41D;W;YI SYLLABLE JJIEX
-A41E;W;YI SYLLABLE JJIE
-A41F;W;YI SYLLABLE JJIEP
-A420;W;YI SYLLABLE JJUOX
-A421;W;YI SYLLABLE JJUO
-A422;W;YI SYLLABLE JJUOP
-A423;W;YI SYLLABLE JJOT
-A424;W;YI SYLLABLE JJOX
-A425;W;YI SYLLABLE JJO
-A426;W;YI SYLLABLE JJOP
-A427;W;YI SYLLABLE JJUT
-A428;W;YI SYLLABLE JJUX
-A429;W;YI SYLLABLE JJU
-A42A;W;YI SYLLABLE JJUP
-A42B;W;YI SYLLABLE JJURX
-A42C;W;YI SYLLABLE JJUR
-A42D;W;YI SYLLABLE JJYT
-A42E;W;YI SYLLABLE JJYX
-A42F;W;YI SYLLABLE JJY
-A430;W;YI SYLLABLE JJYP
-A431;W;YI SYLLABLE NJIT
-A432;W;YI SYLLABLE NJIX
-A433;W;YI SYLLABLE NJI
-A434;W;YI SYLLABLE NJIP
-A435;W;YI SYLLABLE NJIET
-A436;W;YI SYLLABLE NJIEX
-A437;W;YI SYLLABLE NJIE
-A438;W;YI SYLLABLE NJIEP
-A439;W;YI SYLLABLE NJUOX
-A43A;W;YI SYLLABLE NJUO
-A43B;W;YI SYLLABLE NJOT
-A43C;W;YI SYLLABLE NJOX
-A43D;W;YI SYLLABLE NJO
-A43E;W;YI SYLLABLE NJOP
-A43F;W;YI SYLLABLE NJUX
-A440;W;YI SYLLABLE NJU
-A441;W;YI SYLLABLE NJUP
-A442;W;YI SYLLABLE NJURX
-A443;W;YI SYLLABLE NJUR
-A444;W;YI SYLLABLE NJYT
-A445;W;YI SYLLABLE NJYX
-A446;W;YI SYLLABLE NJY
-A447;W;YI SYLLABLE NJYP
-A448;W;YI SYLLABLE NJYRX
-A449;W;YI SYLLABLE NJYR
-A44A;W;YI SYLLABLE NYIT
-A44B;W;YI SYLLABLE NYIX
-A44C;W;YI SYLLABLE NYI
-A44D;W;YI SYLLABLE NYIP
-A44E;W;YI SYLLABLE NYIET
-A44F;W;YI SYLLABLE NYIEX
-A450;W;YI SYLLABLE NYIE
-A451;W;YI SYLLABLE NYIEP
-A452;W;YI SYLLABLE NYUOX
-A453;W;YI SYLLABLE NYUO
-A454;W;YI SYLLABLE NYUOP
-A455;W;YI SYLLABLE NYOT
-A456;W;YI SYLLABLE NYOX
-A457;W;YI SYLLABLE NYO
-A458;W;YI SYLLABLE NYOP
-A459;W;YI SYLLABLE NYUT
-A45A;W;YI SYLLABLE NYUX
-A45B;W;YI SYLLABLE NYU
-A45C;W;YI SYLLABLE NYUP
-A45D;W;YI SYLLABLE XIT
-A45E;W;YI SYLLABLE XIX
-A45F;W;YI SYLLABLE XI
-A460;W;YI SYLLABLE XIP
-A461;W;YI SYLLABLE XIET
-A462;W;YI SYLLABLE XIEX
-A463;W;YI SYLLABLE XIE
-A464;W;YI SYLLABLE XIEP
-A465;W;YI SYLLABLE XUOX
-A466;W;YI SYLLABLE XUO
-A467;W;YI SYLLABLE XOT
-A468;W;YI SYLLABLE XOX
-A469;W;YI SYLLABLE XO
-A46A;W;YI SYLLABLE XOP
-A46B;W;YI SYLLABLE XYT
-A46C;W;YI SYLLABLE XYX
-A46D;W;YI SYLLABLE XY
-A46E;W;YI SYLLABLE XYP
-A46F;W;YI SYLLABLE XYRX
-A470;W;YI SYLLABLE XYR
-A471;W;YI SYLLABLE YIT
-A472;W;YI SYLLABLE YIX
-A473;W;YI SYLLABLE YI
-A474;W;YI SYLLABLE YIP
-A475;W;YI SYLLABLE YIET
-A476;W;YI SYLLABLE YIEX
-A477;W;YI SYLLABLE YIE
-A478;W;YI SYLLABLE YIEP
-A479;W;YI SYLLABLE YUOT
-A47A;W;YI SYLLABLE YUOX
-A47B;W;YI SYLLABLE YUO
-A47C;W;YI SYLLABLE YUOP
-A47D;W;YI SYLLABLE YOT
-A47E;W;YI SYLLABLE YOX
-A47F;W;YI SYLLABLE YO
-A480;W;YI SYLLABLE YOP
-A481;W;YI SYLLABLE YUT
-A482;W;YI SYLLABLE YUX
-A483;W;YI SYLLABLE YU
-A484;W;YI SYLLABLE YUP
-A485;W;YI SYLLABLE YURX
-A486;W;YI SYLLABLE YUR
-A487;W;YI SYLLABLE YYT
-A488;W;YI SYLLABLE YYX
-A489;W;YI SYLLABLE YY
-A48A;W;YI SYLLABLE YYP
-A48B;W;YI SYLLABLE YYRX
-A48C;W;YI SYLLABLE YYR
-A490;W;YI RADICAL QOT
-A491;W;YI RADICAL LI
-A492;W;YI RADICAL KIT
-A493;W;YI RADICAL NYIP
-A494;W;YI RADICAL CYP
-A495;W;YI RADICAL SSI
-A496;W;YI RADICAL GGOP
-A497;W;YI RADICAL GEP
-A498;W;YI RADICAL MI
-A499;W;YI RADICAL HXIT
-A49A;W;YI RADICAL LYR
-A49B;W;YI RADICAL BBUT
-A49C;W;YI RADICAL MOP
-A49D;W;YI RADICAL YO
-A49E;W;YI RADICAL PUT
-A49F;W;YI RADICAL HXUO
-A4A0;W;YI RADICAL TAT
-A4A1;W;YI RADICAL GA
-A4A4;W;YI RADICAL DDUR
-A4A5;W;YI RADICAL BUR
-A4A6;W;YI RADICAL GGUO
-A4A7;W;YI RADICAL NYOP
-A4A8;W;YI RADICAL TU
-A4A9;W;YI RADICAL OP
-A4AA;W;YI RADICAL JJUT
-A4AB;W;YI RADICAL ZOT
-A4AC;W;YI RADICAL PYT
-A4AD;W;YI RADICAL HMO
-A4AE;W;YI RADICAL YIT
-A4AF;W;YI RADICAL VUR
-A4B0;W;YI RADICAL SHY
-A4B1;W;YI RADICAL VEP
-A4B2;W;YI RADICAL ZA
-A4B3;W;YI RADICAL JO
-A4B5;W;YI RADICAL JJY
-A4B6;W;YI RADICAL GOT
-A4B7;W;YI RADICAL JJIE
-A4B8;W;YI RADICAL WO
-A4B9;W;YI RADICAL DU
-A4BA;W;YI RADICAL SHUR
-A4BB;W;YI RADICAL LIE
-A4BC;W;YI RADICAL CY
-A4BD;W;YI RADICAL CUOP
-A4BE;W;YI RADICAL CIP
-A4BF;W;YI RADICAL HXOP
-A4C0;W;YI RADICAL SHAT
-A4C2;W;YI RADICAL SHOP
-A4C3;W;YI RADICAL CHE
-A4C4;W;YI RADICAL ZZIET
-A4C6;W;YI RADICAL KE
-AC00;W;<Hangul Syllable, First>
-D7A3;W;<Hangul Syllable, Last>
-D800;N;<Non Private Use High Surrogate, First>
-DB7F;N;<Non Private Use High Surrogate, Last>
-DB80;N;<Private Use High Surrogate, First>
-DBFF;N;<Private Use High Surrogate, Last>
-DC00;N;<Low Surrogate, First>
-DFFF;N;<Low Surrogate, Last>
-E000;A;<Private Use, First>
-F8FF;A;<Private Use, Last>
-F900;W;CJK COMPATIBILITY IDEOGRAPH-F900
-F901;W;CJK COMPATIBILITY IDEOGRAPH-F901
-F902;W;CJK COMPATIBILITY IDEOGRAPH-F902
-F903;W;CJK COMPATIBILITY IDEOGRAPH-F903
-F904;W;CJK COMPATIBILITY IDEOGRAPH-F904
-F905;W;CJK COMPATIBILITY IDEOGRAPH-F905
-F906;W;CJK COMPATIBILITY IDEOGRAPH-F906
-F907;W;CJK COMPATIBILITY IDEOGRAPH-F907
-F908;W;CJK COMPATIBILITY IDEOGRAPH-F908
-F909;W;CJK COMPATIBILITY IDEOGRAPH-F909
-F90A;W;CJK COMPATIBILITY IDEOGRAPH-F90A
-F90B;W;CJK COMPATIBILITY IDEOGRAPH-F90B
-F90C;W;CJK COMPATIBILITY IDEOGRAPH-F90C
-F90D;W;CJK COMPATIBILITY IDEOGRAPH-F90D
-F90E;W;CJK COMPATIBILITY IDEOGRAPH-F90E
-F90F;W;CJK COMPATIBILITY IDEOGRAPH-F90F
-F910;W;CJK COMPATIBILITY IDEOGRAPH-F910
-F911;W;CJK COMPATIBILITY IDEOGRAPH-F911
-F912;W;CJK COMPATIBILITY IDEOGRAPH-F912
-F913;W;CJK COMPATIBILITY IDEOGRAPH-F913
-F914;W;CJK COMPATIBILITY IDEOGRAPH-F914
-F915;W;CJK COMPATIBILITY IDEOGRAPH-F915
-F916;W;CJK COMPATIBILITY IDEOGRAPH-F916
-F917;W;CJK COMPATIBILITY IDEOGRAPH-F917
-F918;W;CJK COMPATIBILITY IDEOGRAPH-F918
-F919;W;CJK COMPATIBILITY IDEOGRAPH-F919
-F91A;W;CJK COMPATIBILITY IDEOGRAPH-F91A
-F91B;W;CJK COMPATIBILITY IDEOGRAPH-F91B
-F91C;W;CJK COMPATIBILITY IDEOGRAPH-F91C
-F91D;W;CJK COMPATIBILITY IDEOGRAPH-F91D
-F91E;W;CJK COMPATIBILITY IDEOGRAPH-F91E
-F91F;W;CJK COMPATIBILITY IDEOGRAPH-F91F
-F920;W;CJK COMPATIBILITY IDEOGRAPH-F920
-F921;W;CJK COMPATIBILITY IDEOGRAPH-F921
-F922;W;CJK COMPATIBILITY IDEOGRAPH-F922
-F923;W;CJK COMPATIBILITY IDEOGRAPH-F923
-F924;W;CJK COMPATIBILITY IDEOGRAPH-F924
-F925;W;CJK COMPATIBILITY IDEOGRAPH-F925
-F926;W;CJK COMPATIBILITY IDEOGRAPH-F926
-F927;W;CJK COMPATIBILITY IDEOGRAPH-F927
-F928;W;CJK COMPATIBILITY IDEOGRAPH-F928
-F929;W;CJK COMPATIBILITY IDEOGRAPH-F929
-F92A;W;CJK COMPATIBILITY IDEOGRAPH-F92A
-F92B;W;CJK COMPATIBILITY IDEOGRAPH-F92B
-F92C;W;CJK COMPATIBILITY IDEOGRAPH-F92C
-F92D;W;CJK COMPATIBILITY IDEOGRAPH-F92D
-F92E;W;CJK COMPATIBILITY IDEOGRAPH-F92E
-F92F;W;CJK COMPATIBILITY IDEOGRAPH-F92F
-F930;W;CJK COMPATIBILITY IDEOGRAPH-F930
-F931;W;CJK COMPATIBILITY IDEOGRAPH-F931
-F932;W;CJK COMPATIBILITY IDEOGRAPH-F932
-F933;W;CJK COMPATIBILITY IDEOGRAPH-F933
-F934;W;CJK COMPATIBILITY IDEOGRAPH-F934
-F935;W;CJK COMPATIBILITY IDEOGRAPH-F935
-F936;W;CJK COMPATIBILITY IDEOGRAPH-F936
-F937;W;CJK COMPATIBILITY IDEOGRAPH-F937
-F938;W;CJK COMPATIBILITY IDEOGRAPH-F938
-F939;W;CJK COMPATIBILITY IDEOGRAPH-F939
-F93A;W;CJK COMPATIBILITY IDEOGRAPH-F93A
-F93B;W;CJK COMPATIBILITY IDEOGRAPH-F93B
-F93C;W;CJK COMPATIBILITY IDEOGRAPH-F93C
-F93D;W;CJK COMPATIBILITY IDEOGRAPH-F93D
-F93E;W;CJK COMPATIBILITY IDEOGRAPH-F93E
-F93F;W;CJK COMPATIBILITY IDEOGRAPH-F93F
-F940;W;CJK COMPATIBILITY IDEOGRAPH-F940
-F941;W;CJK COMPATIBILITY IDEOGRAPH-F941
-F942;W;CJK COMPATIBILITY IDEOGRAPH-F942
-F943;W;CJK COMPATIBILITY IDEOGRAPH-F943
-F944;W;CJK COMPATIBILITY IDEOGRAPH-F944
-F945;W;CJK COMPATIBILITY IDEOGRAPH-F945
-F946;W;CJK COMPATIBILITY IDEOGRAPH-F946
-F947;W;CJK COMPATIBILITY IDEOGRAPH-F947
-F948;W;CJK COMPATIBILITY IDEOGRAPH-F948
-F949;W;CJK COMPATIBILITY IDEOGRAPH-F949
-F94A;W;CJK COMPATIBILITY IDEOGRAPH-F94A
-F94B;W;CJK COMPATIBILITY IDEOGRAPH-F94B
-F94C;W;CJK COMPATIBILITY IDEOGRAPH-F94C
-F94D;W;CJK COMPATIBILITY IDEOGRAPH-F94D
-F94E;W;CJK COMPATIBILITY IDEOGRAPH-F94E
-F94F;W;CJK COMPATIBILITY IDEOGRAPH-F94F
-F950;W;CJK COMPATIBILITY IDEOGRAPH-F950
-F951;W;CJK COMPATIBILITY IDEOGRAPH-F951
-F952;W;CJK COMPATIBILITY IDEOGRAPH-F952
-F953;W;CJK COMPATIBILITY IDEOGRAPH-F953
-F954;W;CJK COMPATIBILITY IDEOGRAPH-F954
-F955;W;CJK COMPATIBILITY IDEOGRAPH-F955
-F956;W;CJK COMPATIBILITY IDEOGRAPH-F956
-F957;W;CJK COMPATIBILITY IDEOGRAPH-F957
-F958;W;CJK COMPATIBILITY IDEOGRAPH-F958
-F959;W;CJK COMPATIBILITY IDEOGRAPH-F959
-F95A;W;CJK COMPATIBILITY IDEOGRAPH-F95A
-F95B;W;CJK COMPATIBILITY IDEOGRAPH-F95B
-F95C;W;CJK COMPATIBILITY IDEOGRAPH-F95C
-F95D;W;CJK COMPATIBILITY IDEOGRAPH-F95D
-F95E;W;CJK COMPATIBILITY IDEOGRAPH-F95E
-F95F;W;CJK COMPATIBILITY IDEOGRAPH-F95F
-F960;W;CJK COMPATIBILITY IDEOGRAPH-F960
-F961;W;CJK COMPATIBILITY IDEOGRAPH-F961
-F962;W;CJK COMPATIBILITY IDEOGRAPH-F962
-F963;W;CJK COMPATIBILITY IDEOGRAPH-F963
-F964;W;CJK COMPATIBILITY IDEOGRAPH-F964
-F965;W;CJK COMPATIBILITY IDEOGRAPH-F965
-F966;W;CJK COMPATIBILITY IDEOGRAPH-F966
-F967;W;CJK COMPATIBILITY IDEOGRAPH-F967
-F968;W;CJK COMPATIBILITY IDEOGRAPH-F968
-F969;W;CJK COMPATIBILITY IDEOGRAPH-F969
-F96A;W;CJK COMPATIBILITY IDEOGRAPH-F96A
-F96B;W;CJK COMPATIBILITY IDEOGRAPH-F96B
-F96C;W;CJK COMPATIBILITY IDEOGRAPH-F96C
-F96D;W;CJK COMPATIBILITY IDEOGRAPH-F96D
-F96E;W;CJK COMPATIBILITY IDEOGRAPH-F96E
-F96F;W;CJK COMPATIBILITY IDEOGRAPH-F96F
-F970;W;CJK COMPATIBILITY IDEOGRAPH-F970
-F971;W;CJK COMPATIBILITY IDEOGRAPH-F971
-F972;W;CJK COMPATIBILITY IDEOGRAPH-F972
-F973;W;CJK COMPATIBILITY IDEOGRAPH-F973
-F974;W;CJK COMPATIBILITY IDEOGRAPH-F974
-F975;W;CJK COMPATIBILITY IDEOGRAPH-F975
-F976;W;CJK COMPATIBILITY IDEOGRAPH-F976
-F977;W;CJK COMPATIBILITY IDEOGRAPH-F977
-F978;W;CJK COMPATIBILITY IDEOGRAPH-F978
-F979;W;CJK COMPATIBILITY IDEOGRAPH-F979
-F97A;W;CJK COMPATIBILITY IDEOGRAPH-F97A
-F97B;W;CJK COMPATIBILITY IDEOGRAPH-F97B
-F97C;W;CJK COMPATIBILITY IDEOGRAPH-F97C
-F97D;W;CJK COMPATIBILITY IDEOGRAPH-F97D
-F97E;W;CJK COMPATIBILITY IDEOGRAPH-F97E
-F97F;W;CJK COMPATIBILITY IDEOGRAPH-F97F
-F980;W;CJK COMPATIBILITY IDEOGRAPH-F980
-F981;W;CJK COMPATIBILITY IDEOGRAPH-F981
-F982;W;CJK COMPATIBILITY IDEOGRAPH-F982
-F983;W;CJK COMPATIBILITY IDEOGRAPH-F983
-F984;W;CJK COMPATIBILITY IDEOGRAPH-F984
-F985;W;CJK COMPATIBILITY IDEOGRAPH-F985
-F986;W;CJK COMPATIBILITY IDEOGRAPH-F986
-F987;W;CJK COMPATIBILITY IDEOGRAPH-F987
-F988;W;CJK COMPATIBILITY IDEOGRAPH-F988
-F989;W;CJK COMPATIBILITY IDEOGRAPH-F989
-F98A;W;CJK COMPATIBILITY IDEOGRAPH-F98A
-F98B;W;CJK COMPATIBILITY IDEOGRAPH-F98B
-F98C;W;CJK COMPATIBILITY IDEOGRAPH-F98C
-F98D;W;CJK COMPATIBILITY IDEOGRAPH-F98D
-F98E;W;CJK COMPATIBILITY IDEOGRAPH-F98E
-F98F;W;CJK COMPATIBILITY IDEOGRAPH-F98F
-F990;W;CJK COMPATIBILITY IDEOGRAPH-F990
-F991;W;CJK COMPATIBILITY IDEOGRAPH-F991
-F992;W;CJK COMPATIBILITY IDEOGRAPH-F992
-F993;W;CJK COMPATIBILITY IDEOGRAPH-F993
-F994;W;CJK COMPATIBILITY IDEOGRAPH-F994
-F995;W;CJK COMPATIBILITY IDEOGRAPH-F995
-F996;W;CJK COMPATIBILITY IDEOGRAPH-F996
-F997;W;CJK COMPATIBILITY IDEOGRAPH-F997
-F998;W;CJK COMPATIBILITY IDEOGRAPH-F998
-F999;W;CJK COMPATIBILITY IDEOGRAPH-F999
-F99A;W;CJK COMPATIBILITY IDEOGRAPH-F99A
-F99B;W;CJK COMPATIBILITY IDEOGRAPH-F99B
-F99C;W;CJK COMPATIBILITY IDEOGRAPH-F99C
-F99D;W;CJK COMPATIBILITY IDEOGRAPH-F99D
-F99E;W;CJK COMPATIBILITY IDEOGRAPH-F99E
-F99F;W;CJK COMPATIBILITY IDEOGRAPH-F99F
-F9A0;W;CJK COMPATIBILITY IDEOGRAPH-F9A0
-F9A1;W;CJK COMPATIBILITY IDEOGRAPH-F9A1
-F9A2;W;CJK COMPATIBILITY IDEOGRAPH-F9A2
-F9A3;W;CJK COMPATIBILITY IDEOGRAPH-F9A3
-F9A4;W;CJK COMPATIBILITY IDEOGRAPH-F9A4
-F9A5;W;CJK COMPATIBILITY IDEOGRAPH-F9A5
-F9A6;W;CJK COMPATIBILITY IDEOGRAPH-F9A6
-F9A7;W;CJK COMPATIBILITY IDEOGRAPH-F9A7
-F9A8;W;CJK COMPATIBILITY IDEOGRAPH-F9A8
-F9A9;W;CJK COMPATIBILITY IDEOGRAPH-F9A9
-F9AA;W;CJK COMPATIBILITY IDEOGRAPH-F9AA
-F9AB;W;CJK COMPATIBILITY IDEOGRAPH-F9AB
-F9AC;W;CJK COMPATIBILITY IDEOGRAPH-F9AC
-F9AD;W;CJK COMPATIBILITY IDEOGRAPH-F9AD
-F9AE;W;CJK COMPATIBILITY IDEOGRAPH-F9AE
-F9AF;W;CJK COMPATIBILITY IDEOGRAPH-F9AF
-F9B0;W;CJK COMPATIBILITY IDEOGRAPH-F9B0
-F9B1;W;CJK COMPATIBILITY IDEOGRAPH-F9B1
-F9B2;W;CJK COMPATIBILITY IDEOGRAPH-F9B2
-F9B3;W;CJK COMPATIBILITY IDEOGRAPH-F9B3
-F9B4;W;CJK COMPATIBILITY IDEOGRAPH-F9B4
-F9B5;W;CJK COMPATIBILITY IDEOGRAPH-F9B5
-F9B6;W;CJK COMPATIBILITY IDEOGRAPH-F9B6
-F9B7;W;CJK COMPATIBILITY IDEOGRAPH-F9B7
-F9B8;W;CJK COMPATIBILITY IDEOGRAPH-F9B8
-F9B9;W;CJK COMPATIBILITY IDEOGRAPH-F9B9
-F9BA;W;CJK COMPATIBILITY IDEOGRAPH-F9BA
-F9BB;W;CJK COMPATIBILITY IDEOGRAPH-F9BB
-F9BC;W;CJK COMPATIBILITY IDEOGRAPH-F9BC
-F9BD;W;CJK COMPATIBILITY IDEOGRAPH-F9BD
-F9BE;W;CJK COMPATIBILITY IDEOGRAPH-F9BE
-F9BF;W;CJK COMPATIBILITY IDEOGRAPH-F9BF
-F9C0;W;CJK COMPATIBILITY IDEOGRAPH-F9C0
-F9C1;W;CJK COMPATIBILITY IDEOGRAPH-F9C1
-F9C2;W;CJK COMPATIBILITY IDEOGRAPH-F9C2
-F9C3;W;CJK COMPATIBILITY IDEOGRAPH-F9C3
-F9C4;W;CJK COMPATIBILITY IDEOGRAPH-F9C4
-F9C5;W;CJK COMPATIBILITY IDEOGRAPH-F9C5
-F9C6;W;CJK COMPATIBILITY IDEOGRAPH-F9C6
-F9C7;W;CJK COMPATIBILITY IDEOGRAPH-F9C7
-F9C8;W;CJK COMPATIBILITY IDEOGRAPH-F9C8
-F9C9;W;CJK COMPATIBILITY IDEOGRAPH-F9C9
-F9CA;W;CJK COMPATIBILITY IDEOGRAPH-F9CA
-F9CB;W;CJK COMPATIBILITY IDEOGRAPH-F9CB
-F9CC;W;CJK COMPATIBILITY IDEOGRAPH-F9CC
-F9CD;W;CJK COMPATIBILITY IDEOGRAPH-F9CD
-F9CE;W;CJK COMPATIBILITY IDEOGRAPH-F9CE
-F9CF;W;CJK COMPATIBILITY IDEOGRAPH-F9CF
-F9D0;W;CJK COMPATIBILITY IDEOGRAPH-F9D0
-F9D1;W;CJK COMPATIBILITY IDEOGRAPH-F9D1
-F9D2;W;CJK COMPATIBILITY IDEOGRAPH-F9D2
-F9D3;W;CJK COMPATIBILITY IDEOGRAPH-F9D3
-F9D4;W;CJK COMPATIBILITY IDEOGRAPH-F9D4
-F9D5;W;CJK COMPATIBILITY IDEOGRAPH-F9D5
-F9D6;W;CJK COMPATIBILITY IDEOGRAPH-F9D6
-F9D7;W;CJK COMPATIBILITY IDEOGRAPH-F9D7
-F9D8;W;CJK COMPATIBILITY IDEOGRAPH-F9D8
-F9D9;W;CJK COMPATIBILITY IDEOGRAPH-F9D9
-F9DA;W;CJK COMPATIBILITY IDEOGRAPH-F9DA
-F9DB;W;CJK COMPATIBILITY IDEOGRAPH-F9DB
-F9DC;W;CJK COMPATIBILITY IDEOGRAPH-F9DC
-F9DD;W;CJK COMPATIBILITY IDEOGRAPH-F9DD
-F9DE;W;CJK COMPATIBILITY IDEOGRAPH-F9DE
-F9DF;W;CJK COMPATIBILITY IDEOGRAPH-F9DF
-F9E0;W;CJK COMPATIBILITY IDEOGRAPH-F9E0
-F9E1;W;CJK COMPATIBILITY IDEOGRAPH-F9E1
-F9E2;W;CJK COMPATIBILITY IDEOGRAPH-F9E2
-F9E3;W;CJK COMPATIBILITY IDEOGRAPH-F9E3
-F9E4;W;CJK COMPATIBILITY IDEOGRAPH-F9E4
-F9E5;W;CJK COMPATIBILITY IDEOGRAPH-F9E5
-F9E6;W;CJK COMPATIBILITY IDEOGRAPH-F9E6
-F9E7;W;CJK COMPATIBILITY IDEOGRAPH-F9E7
-F9E8;W;CJK COMPATIBILITY IDEOGRAPH-F9E8
-F9E9;W;CJK COMPATIBILITY IDEOGRAPH-F9E9
-F9EA;W;CJK COMPATIBILITY IDEOGRAPH-F9EA
-F9EB;W;CJK COMPATIBILITY IDEOGRAPH-F9EB
-F9EC;W;CJK COMPATIBILITY IDEOGRAPH-F9EC
-F9ED;W;CJK COMPATIBILITY IDEOGRAPH-F9ED
-F9EE;W;CJK COMPATIBILITY IDEOGRAPH-F9EE
-F9EF;W;CJK COMPATIBILITY IDEOGRAPH-F9EF
-F9F0;W;CJK COMPATIBILITY IDEOGRAPH-F9F0
-F9F1;W;CJK COMPATIBILITY IDEOGRAPH-F9F1
-F9F2;W;CJK COMPATIBILITY IDEOGRAPH-F9F2
-F9F3;W;CJK COMPATIBILITY IDEOGRAPH-F9F3
-F9F4;W;CJK COMPATIBILITY IDEOGRAPH-F9F4
-F9F5;W;CJK COMPATIBILITY IDEOGRAPH-F9F5
-F9F6;W;CJK COMPATIBILITY IDEOGRAPH-F9F6
-F9F7;W;CJK COMPATIBILITY IDEOGRAPH-F9F7
-F9F8;W;CJK COMPATIBILITY IDEOGRAPH-F9F8
-F9F9;W;CJK COMPATIBILITY IDEOGRAPH-F9F9
-F9FA;W;CJK COMPATIBILITY IDEOGRAPH-F9FA
-F9FB;W;CJK COMPATIBILITY IDEOGRAPH-F9FB
-F9FC;W;CJK COMPATIBILITY IDEOGRAPH-F9FC
-F9FD;W;CJK COMPATIBILITY IDEOGRAPH-F9FD
-F9FE;W;CJK COMPATIBILITY IDEOGRAPH-F9FE
-F9FF;W;CJK COMPATIBILITY IDEOGRAPH-F9FF
-FA00;W;CJK COMPATIBILITY IDEOGRAPH-FA00
-FA01;W;CJK COMPATIBILITY IDEOGRAPH-FA01
-FA02;W;CJK COMPATIBILITY IDEOGRAPH-FA02
-FA03;W;CJK COMPATIBILITY IDEOGRAPH-FA03
-FA04;W;CJK COMPATIBILITY IDEOGRAPH-FA04
-FA05;W;CJK COMPATIBILITY IDEOGRAPH-FA05
-FA06;W;CJK COMPATIBILITY IDEOGRAPH-FA06
-FA07;W;CJK COMPATIBILITY IDEOGRAPH-FA07
-FA08;W;CJK COMPATIBILITY IDEOGRAPH-FA08
-FA09;W;CJK COMPATIBILITY IDEOGRAPH-FA09
-FA0A;W;CJK COMPATIBILITY IDEOGRAPH-FA0A
-FA0B;W;CJK COMPATIBILITY IDEOGRAPH-FA0B
-FA0C;W;CJK COMPATIBILITY IDEOGRAPH-FA0C
-FA0D;W;CJK COMPATIBILITY IDEOGRAPH-FA0D
-FA0E;W;CJK COMPATIBILITY IDEOGRAPH-FA0E
-FA0F;W;CJK COMPATIBILITY IDEOGRAPH-FA0F
-FA10;W;CJK COMPATIBILITY IDEOGRAPH-FA10
-FA11;W;CJK COMPATIBILITY IDEOGRAPH-FA11
-FA12;W;CJK COMPATIBILITY IDEOGRAPH-FA12
-FA13;W;CJK COMPATIBILITY IDEOGRAPH-FA13
-FA14;W;CJK COMPATIBILITY IDEOGRAPH-FA14
-FA15;W;CJK COMPATIBILITY IDEOGRAPH-FA15
-FA16;W;CJK COMPATIBILITY IDEOGRAPH-FA16
-FA17;W;CJK COMPATIBILITY IDEOGRAPH-FA17
-FA18;W;CJK COMPATIBILITY IDEOGRAPH-FA18
-FA19;W;CJK COMPATIBILITY IDEOGRAPH-FA19
-FA1A;W;CJK COMPATIBILITY IDEOGRAPH-FA1A
-FA1B;W;CJK COMPATIBILITY IDEOGRAPH-FA1B
-FA1C;W;CJK COMPATIBILITY IDEOGRAPH-FA1C
-FA1D;W;CJK COMPATIBILITY IDEOGRAPH-FA1D
-FA1E;W;CJK COMPATIBILITY IDEOGRAPH-FA1E
-FA1F;W;CJK COMPATIBILITY IDEOGRAPH-FA1F
-FA20;W;CJK COMPATIBILITY IDEOGRAPH-FA20
-FA21;W;CJK COMPATIBILITY IDEOGRAPH-FA21
-FA22;W;CJK COMPATIBILITY IDEOGRAPH-FA22
-FA23;W;CJK COMPATIBILITY IDEOGRAPH-FA23
-FA24;W;CJK COMPATIBILITY IDEOGRAPH-FA24
-FA25;W;CJK COMPATIBILITY IDEOGRAPH-FA25
-FA26;W;CJK COMPATIBILITY IDEOGRAPH-FA26
-FA27;W;CJK COMPATIBILITY IDEOGRAPH-FA27
-FA28;W;CJK COMPATIBILITY IDEOGRAPH-FA28
-FA29;W;CJK COMPATIBILITY IDEOGRAPH-FA29
-FA2A;W;CJK COMPATIBILITY IDEOGRAPH-FA2A
-FA2B;W;CJK COMPATIBILITY IDEOGRAPH-FA2B
-FA2C;W;CJK COMPATIBILITY IDEOGRAPH-FA2C
-FA2D;W;CJK COMPATIBILITY IDEOGRAPH-FA2D
-FB00;N;LATIN SMALL LIGATURE FF
-FB01;N;LATIN SMALL LIGATURE FI
-FB02;N;LATIN SMALL LIGATURE FL
-FB03;N;LATIN SMALL LIGATURE FFI
-FB04;N;LATIN SMALL LIGATURE FFL
-FB05;N;LATIN SMALL LIGATURE LONG S T
-FB06;N;LATIN SMALL LIGATURE ST
-FB13;N;ARMENIAN SMALL LIGATURE MEN NOW
-FB14;N;ARMENIAN SMALL LIGATURE MEN ECH
-FB15;N;ARMENIAN SMALL LIGATURE MEN INI
-FB16;N;ARMENIAN SMALL LIGATURE VEW NOW
-FB17;N;ARMENIAN SMALL LIGATURE MEN XEH
-FB1D;N;HEBREW LETTER YOD WITH HIRIQ
-FB1E;N;HEBREW POINT JUDEO-SPANISH VARIKA
-FB1F;N;HEBREW LIGATURE YIDDISH YOD YOD PATAH
-FB20;N;HEBREW LETTER ALTERNATIVE AYIN
-FB21;N;HEBREW LETTER WIDE ALEF
-FB22;N;HEBREW LETTER WIDE DALET
-FB23;N;HEBREW LETTER WIDE HE
-FB24;N;HEBREW LETTER WIDE KAF
-FB25;N;HEBREW LETTER WIDE LAMED
-FB26;N;HEBREW LETTER WIDE FINAL MEM
-FB27;N;HEBREW LETTER WIDE RESH
-FB28;N;HEBREW LETTER WIDE TAV
-FB29;N;HEBREW LETTER ALTERNATIVE PLUS SIGN
-FB2A;N;HEBREW LETTER SHIN WITH SHIN DOT
-FB2B;N;HEBREW LETTER SHIN WITH SIN DOT
-FB2C;N;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
-FB2D;N;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
-FB2E;N;HEBREW LETTER ALEF WITH PATAH
-FB2F;N;HEBREW LETTER ALEF WITH QAMATS
-FB30;N;HEBREW LETTER ALEF WITH MAPIQ
-FB31;N;HEBREW LETTER BET WITH DAGESH
-FB32;N;HEBREW LETTER GIMEL WITH DAGESH
-FB33;N;HEBREW LETTER DALET WITH DAGESH
-FB34;N;HEBREW LETTER HE WITH MAPIQ
-FB35;N;HEBREW LETTER VAV WITH DAGESH
-FB36;N;HEBREW LETTER ZAYIN WITH DAGESH
-FB38;N;HEBREW LETTER TET WITH DAGESH
-FB39;N;HEBREW LETTER YOD WITH DAGESH
-FB3A;N;HEBREW LETTER FINAL KAF WITH DAGESH
-FB3B;N;HEBREW LETTER KAF WITH DAGESH
-FB3C;N;HEBREW LETTER LAMED WITH DAGESH
-FB3E;N;HEBREW LETTER MEM WITH DAGESH
-FB40;N;HEBREW LETTER NUN WITH DAGESH
-FB41;N;HEBREW LETTER SAMEKH WITH DAGESH
-FB43;N;HEBREW LETTER FINAL PE WITH DAGESH
-FB44;N;HEBREW LETTER PE WITH DAGESH
-FB46;N;HEBREW LETTER TSADI WITH DAGESH
-FB47;N;HEBREW LETTER QOF WITH DAGESH
-FB48;N;HEBREW LETTER RESH WITH DAGESH
-FB49;N;HEBREW LETTER SHIN WITH DAGESH
-FB4A;N;HEBREW LETTER TAV WITH DAGESH
-FB4B;N;HEBREW LETTER VAV WITH HOLAM
-FB4C;N;HEBREW LETTER BET WITH RAFE
-FB4D;N;HEBREW LETTER KAF WITH RAFE
-FB4E;N;HEBREW LETTER PE WITH RAFE
-FB4F;N;HEBREW LIGATURE ALEF LAMED
-FB50;N;ARABIC LETTER ALEF WASLA ISOLATED FORM
-FB51;N;ARABIC LETTER ALEF WASLA FINAL FORM
-FB52;N;ARABIC LETTER BEEH ISOLATED FORM
-FB53;N;ARABIC LETTER BEEH FINAL FORM
-FB54;N;ARABIC LETTER BEEH INITIAL FORM
-FB55;N;ARABIC LETTER BEEH MEDIAL FORM
-FB56;N;ARABIC LETTER PEH ISOLATED FORM
-FB57;N;ARABIC LETTER PEH FINAL FORM
-FB58;N;ARABIC LETTER PEH INITIAL FORM
-FB59;N;ARABIC LETTER PEH MEDIAL FORM
-FB5A;N;ARABIC LETTER BEHEH ISOLATED FORM
-FB5B;N;ARABIC LETTER BEHEH FINAL FORM
-FB5C;N;ARABIC LETTER BEHEH INITIAL FORM
-FB5D;N;ARABIC LETTER BEHEH MEDIAL FORM
-FB5E;N;ARABIC LETTER TTEHEH ISOLATED FORM
-FB5F;N;ARABIC LETTER TTEHEH FINAL FORM
-FB60;N;ARABIC LETTER TTEHEH INITIAL FORM
-FB61;N;ARABIC LETTER TTEHEH MEDIAL FORM
-FB62;N;ARABIC LETTER TEHEH ISOLATED FORM
-FB63;N;ARABIC LETTER TEHEH FINAL FORM
-FB64;N;ARABIC LETTER TEHEH INITIAL FORM
-FB65;N;ARABIC LETTER TEHEH MEDIAL FORM
-FB66;N;ARABIC LETTER TTEH ISOLATED FORM
-FB67;N;ARABIC LETTER TTEH FINAL FORM
-FB68;N;ARABIC LETTER TTEH INITIAL FORM
-FB69;N;ARABIC LETTER TTEH MEDIAL FORM
-FB6A;N;ARABIC LETTER VEH ISOLATED FORM
-FB6B;N;ARABIC LETTER VEH FINAL FORM
-FB6C;N;ARABIC LETTER VEH INITIAL FORM
-FB6D;N;ARABIC LETTER VEH MEDIAL FORM
-FB6E;N;ARABIC LETTER PEHEH ISOLATED FORM
-FB6F;N;ARABIC LETTER PEHEH FINAL FORM
-FB70;N;ARABIC LETTER PEHEH INITIAL FORM
-FB71;N;ARABIC LETTER PEHEH MEDIAL FORM
-FB72;N;ARABIC LETTER DYEH ISOLATED FORM
-FB73;N;ARABIC LETTER DYEH FINAL FORM
-FB74;N;ARABIC LETTER DYEH INITIAL FORM
-FB75;N;ARABIC LETTER DYEH MEDIAL FORM
-FB76;N;ARABIC LETTER NYEH ISOLATED FORM
-FB77;N;ARABIC LETTER NYEH FINAL FORM
-FB78;N;ARABIC LETTER NYEH INITIAL FORM
-FB79;N;ARABIC LETTER NYEH MEDIAL FORM
-FB7A;N;ARABIC LETTER TCHEH ISOLATED FORM
-FB7B;N;ARABIC LETTER TCHEH FINAL FORM
-FB7C;N;ARABIC LETTER TCHEH INITIAL FORM
-FB7D;N;ARABIC LETTER TCHEH MEDIAL FORM
-FB7E;N;ARABIC LETTER TCHEHEH ISOLATED FORM
-FB7F;N;ARABIC LETTER TCHEHEH FINAL FORM
-FB80;N;ARABIC LETTER TCHEHEH INITIAL FORM
-FB81;N;ARABIC LETTER TCHEHEH MEDIAL FORM
-FB82;N;ARABIC LETTER DDAHAL ISOLATED FORM
-FB83;N;ARABIC LETTER DDAHAL FINAL FORM
-FB84;N;ARABIC LETTER DAHAL ISOLATED FORM
-FB85;N;ARABIC LETTER DAHAL FINAL FORM
-FB86;N;ARABIC LETTER DUL ISOLATED FORM
-FB87;N;ARABIC LETTER DUL FINAL FORM
-FB88;N;ARABIC LETTER DDAL ISOLATED FORM
-FB89;N;ARABIC LETTER DDAL FINAL FORM
-FB8A;N;ARABIC LETTER JEH ISOLATED FORM
-FB8B;N;ARABIC LETTER JEH FINAL FORM
-FB8C;N;ARABIC LETTER RREH ISOLATED FORM
-FB8D;N;ARABIC LETTER RREH FINAL FORM
-FB8E;N;ARABIC LETTER KEHEH ISOLATED FORM
-FB8F;N;ARABIC LETTER KEHEH FINAL FORM
-FB90;N;ARABIC LETTER KEHEH INITIAL FORM
-FB91;N;ARABIC LETTER KEHEH MEDIAL FORM
-FB92;N;ARABIC LETTER GAF ISOLATED FORM
-FB93;N;ARABIC LETTER GAF FINAL FORM
-FB94;N;ARABIC LETTER GAF INITIAL FORM
-FB95;N;ARABIC LETTER GAF MEDIAL FORM
-FB96;N;ARABIC LETTER GUEH ISOLATED FORM
-FB97;N;ARABIC LETTER GUEH FINAL FORM
-FB98;N;ARABIC LETTER GUEH INITIAL FORM
-FB99;N;ARABIC LETTER GUEH MEDIAL FORM
-FB9A;N;ARABIC LETTER NGOEH ISOLATED FORM
-FB9B;N;ARABIC LETTER NGOEH FINAL FORM
-FB9C;N;ARABIC LETTER NGOEH INITIAL FORM
-FB9D;N;ARABIC LETTER NGOEH MEDIAL FORM
-FB9E;N;ARABIC LETTER NOON GHUNNA ISOLATED FORM
-FB9F;N;ARABIC LETTER NOON GHUNNA FINAL FORM
-FBA0;N;ARABIC LETTER RNOON ISOLATED FORM
-FBA1;N;ARABIC LETTER RNOON FINAL FORM
-FBA2;N;ARABIC LETTER RNOON INITIAL FORM
-FBA3;N;ARABIC LETTER RNOON MEDIAL FORM
-FBA4;N;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
-FBA5;N;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
-FBA6;N;ARABIC LETTER HEH GOAL ISOLATED FORM
-FBA7;N;ARABIC LETTER HEH GOAL FINAL FORM
-FBA8;N;ARABIC LETTER HEH GOAL INITIAL FORM
-FBA9;N;ARABIC LETTER HEH GOAL MEDIAL FORM
-FBAA;N;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
-FBAB;N;ARABIC LETTER HEH DOACHASHMEE FINAL FORM
-FBAC;N;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
-FBAD;N;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
-FBAE;N;ARABIC LETTER YEH BARREE ISOLATED FORM
-FBAF;N;ARABIC LETTER YEH BARREE FINAL FORM
-FBB0;N;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
-FBB1;N;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-FBD3;N;ARABIC LETTER NG ISOLATED FORM
-FBD4;N;ARABIC LETTER NG FINAL FORM
-FBD5;N;ARABIC LETTER NG INITIAL FORM
-FBD6;N;ARABIC LETTER NG MEDIAL FORM
-FBD7;N;ARABIC LETTER U ISOLATED FORM
-FBD8;N;ARABIC LETTER U FINAL FORM
-FBD9;N;ARABIC LETTER OE ISOLATED FORM
-FBDA;N;ARABIC LETTER OE FINAL FORM
-FBDB;N;ARABIC LETTER YU ISOLATED FORM
-FBDC;N;ARABIC LETTER YU FINAL FORM
-FBDD;N;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
-FBDE;N;ARABIC LETTER VE ISOLATED FORM
-FBDF;N;ARABIC LETTER VE FINAL FORM
-FBE0;N;ARABIC LETTER KIRGHIZ OE ISOLATED FORM
-FBE1;N;ARABIC LETTER KIRGHIZ OE FINAL FORM
-FBE2;N;ARABIC LETTER KIRGHIZ YU ISOLATED FORM
-FBE3;N;ARABIC LETTER KIRGHIZ YU FINAL FORM
-FBE4;N;ARABIC LETTER E ISOLATED FORM
-FBE5;N;ARABIC LETTER E FINAL FORM
-FBE6;N;ARABIC LETTER E INITIAL FORM
-FBE7;N;ARABIC LETTER E MEDIAL FORM
-FBE8;N;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
-FBE9;N;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
-FBEA;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
-FBEB;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
-FBEC;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
-FBED;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
-FBEE;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
-FBEF;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
-FBF0;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
-FBF1;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
-FBF2;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
-FBF3;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
-FBF4;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
-FBF5;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
-FBF6;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
-FBF7;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
-FBF8;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
-FBF9;N;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
-FBFA;N;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
-FBFB;N;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
-FBFC;N;ARABIC LETTER FARSI YEH ISOLATED FORM
-FBFD;N;ARABIC LETTER FARSI YEH FINAL FORM
-FBFE;N;ARABIC LETTER FARSI YEH INITIAL FORM
-FBFF;N;ARABIC LETTER FARSI YEH MEDIAL FORM
-FC00;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
-FC01;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
-FC02;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
-FC03;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
-FC04;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
-FC05;N;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
-FC06;N;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
-FC07;N;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
-FC08;N;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
-FC09;N;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
-FC0A;N;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
-FC0B;N;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
-FC0C;N;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
-FC0D;N;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
-FC0E;N;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
-FC0F;N;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
-FC10;N;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
-FC11;N;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
-FC12;N;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
-FC13;N;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
-FC14;N;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
-FC15;N;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
-FC16;N;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
-FC17;N;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
-FC18;N;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
-FC19;N;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
-FC1A;N;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
-FC1B;N;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
-FC1C;N;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
-FC1D;N;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
-FC1E;N;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
-FC1F;N;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
-FC20;N;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
-FC21;N;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
-FC22;N;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
-FC23;N;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
-FC24;N;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
-FC25;N;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
-FC26;N;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
-FC27;N;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
-FC28;N;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
-FC29;N;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
-FC2A;N;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
-FC2B;N;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
-FC2C;N;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
-FC2D;N;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
-FC2E;N;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
-FC2F;N;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
-FC30;N;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
-FC31;N;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
-FC32;N;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
-FC33;N;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
-FC34;N;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
-FC35;N;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
-FC36;N;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
-FC37;N;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
-FC38;N;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
-FC39;N;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
-FC3A;N;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
-FC3B;N;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
-FC3C;N;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
-FC3D;N;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
-FC3E;N;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
-FC3F;N;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
-FC40;N;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
-FC41;N;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
-FC42;N;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
-FC43;N;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
-FC44;N;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
-FC45;N;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
-FC46;N;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
-FC47;N;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
-FC48;N;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
-FC49;N;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
-FC4A;N;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
-FC4B;N;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
-FC4C;N;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
-FC4D;N;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
-FC4E;N;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
-FC4F;N;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
-FC50;N;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
-FC51;N;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
-FC52;N;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
-FC53;N;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
-FC54;N;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
-FC55;N;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
-FC56;N;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
-FC57;N;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
-FC58;N;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
-FC59;N;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
-FC5A;N;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
-FC5B;N;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
-FC5C;N;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
-FC5D;N;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
-FC5E;N;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
-FC5F;N;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
-FC60;N;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
-FC61;N;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
-FC62;N;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
-FC63;N;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
-FC64;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
-FC65;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
-FC66;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
-FC67;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
-FC68;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
-FC69;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
-FC6A;N;ARABIC LIGATURE BEH WITH REH FINAL FORM
-FC6B;N;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
-FC6C;N;ARABIC LIGATURE BEH WITH MEEM FINAL FORM
-FC6D;N;ARABIC LIGATURE BEH WITH NOON FINAL FORM
-FC6E;N;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
-FC6F;N;ARABIC LIGATURE BEH WITH YEH FINAL FORM
-FC70;N;ARABIC LIGATURE TEH WITH REH FINAL FORM
-FC71;N;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
-FC72;N;ARABIC LIGATURE TEH WITH MEEM FINAL FORM
-FC73;N;ARABIC LIGATURE TEH WITH NOON FINAL FORM
-FC74;N;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
-FC75;N;ARABIC LIGATURE TEH WITH YEH FINAL FORM
-FC76;N;ARABIC LIGATURE THEH WITH REH FINAL FORM
-FC77;N;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
-FC78;N;ARABIC LIGATURE THEH WITH MEEM FINAL FORM
-FC79;N;ARABIC LIGATURE THEH WITH NOON FINAL FORM
-FC7A;N;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
-FC7B;N;ARABIC LIGATURE THEH WITH YEH FINAL FORM
-FC7C;N;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
-FC7D;N;ARABIC LIGATURE FEH WITH YEH FINAL FORM
-FC7E;N;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
-FC7F;N;ARABIC LIGATURE QAF WITH YEH FINAL FORM
-FC80;N;ARABIC LIGATURE KAF WITH ALEF FINAL FORM
-FC81;N;ARABIC LIGATURE KAF WITH LAM FINAL FORM
-FC82;N;ARABIC LIGATURE KAF WITH MEEM FINAL FORM
-FC83;N;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
-FC84;N;ARABIC LIGATURE KAF WITH YEH FINAL FORM
-FC85;N;ARABIC LIGATURE LAM WITH MEEM FINAL FORM
-FC86;N;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
-FC87;N;ARABIC LIGATURE LAM WITH YEH FINAL FORM
-FC88;N;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
-FC89;N;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
-FC8A;N;ARABIC LIGATURE NOON WITH REH FINAL FORM
-FC8B;N;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
-FC8C;N;ARABIC LIGATURE NOON WITH MEEM FINAL FORM
-FC8D;N;ARABIC LIGATURE NOON WITH NOON FINAL FORM
-FC8E;N;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
-FC8F;N;ARABIC LIGATURE NOON WITH YEH FINAL FORM
-FC90;N;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
-FC91;N;ARABIC LIGATURE YEH WITH REH FINAL FORM
-FC92;N;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
-FC93;N;ARABIC LIGATURE YEH WITH MEEM FINAL FORM
-FC94;N;ARABIC LIGATURE YEH WITH NOON FINAL FORM
-FC95;N;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
-FC96;N;ARABIC LIGATURE YEH WITH YEH FINAL FORM
-FC97;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
-FC98;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
-FC99;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
-FC9A;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
-FC9B;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
-FC9C;N;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
-FC9D;N;ARABIC LIGATURE BEH WITH HAH INITIAL FORM
-FC9E;N;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
-FC9F;N;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
-FCA0;N;ARABIC LIGATURE BEH WITH HEH INITIAL FORM
-FCA1;N;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
-FCA2;N;ARABIC LIGATURE TEH WITH HAH INITIAL FORM
-FCA3;N;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
-FCA4;N;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
-FCA5;N;ARABIC LIGATURE TEH WITH HEH INITIAL FORM
-FCA6;N;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
-FCA7;N;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
-FCA8;N;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
-FCA9;N;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
-FCAA;N;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
-FCAB;N;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
-FCAC;N;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
-FCAD;N;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
-FCAE;N;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
-FCAF;N;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
-FCB0;N;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
-FCB1;N;ARABIC LIGATURE SAD WITH HAH INITIAL FORM
-FCB2;N;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
-FCB3;N;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
-FCB4;N;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
-FCB5;N;ARABIC LIGATURE DAD WITH HAH INITIAL FORM
-FCB6;N;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
-FCB7;N;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
-FCB8;N;ARABIC LIGATURE TAH WITH HAH INITIAL FORM
-FCB9;N;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
-FCBA;N;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
-FCBB;N;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
-FCBC;N;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
-FCBD;N;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
-FCBE;N;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
-FCBF;N;ARABIC LIGATURE FEH WITH HAH INITIAL FORM
-FCC0;N;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
-FCC1;N;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
-FCC2;N;ARABIC LIGATURE QAF WITH HAH INITIAL FORM
-FCC3;N;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
-FCC4;N;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
-FCC5;N;ARABIC LIGATURE KAF WITH HAH INITIAL FORM
-FCC6;N;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
-FCC7;N;ARABIC LIGATURE KAF WITH LAM INITIAL FORM
-FCC8;N;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
-FCC9;N;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
-FCCA;N;ARABIC LIGATURE LAM WITH HAH INITIAL FORM
-FCCB;N;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
-FCCC;N;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
-FCCD;N;ARABIC LIGATURE LAM WITH HEH INITIAL FORM
-FCCE;N;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
-FCCF;N;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
-FCD0;N;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
-FCD1;N;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
-FCD2;N;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
-FCD3;N;ARABIC LIGATURE NOON WITH HAH INITIAL FORM
-FCD4;N;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
-FCD5;N;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
-FCD6;N;ARABIC LIGATURE NOON WITH HEH INITIAL FORM
-FCD7;N;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
-FCD8;N;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
-FCD9;N;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
-FCDA;N;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
-FCDB;N;ARABIC LIGATURE YEH WITH HAH INITIAL FORM
-FCDC;N;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
-FCDD;N;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
-FCDE;N;ARABIC LIGATURE YEH WITH HEH INITIAL FORM
-FCDF;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
-FCE0;N;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
-FCE1;N;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
-FCE2;N;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
-FCE3;N;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
-FCE4;N;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
-FCE5;N;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
-FCE6;N;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
-FCE7;N;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
-FCE8;N;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
-FCE9;N;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
-FCEA;N;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
-FCEB;N;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
-FCEC;N;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
-FCED;N;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
-FCEE;N;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
-FCEF;N;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
-FCF0;N;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
-FCF1;N;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
-FCF2;N;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
-FCF3;N;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
-FCF4;N;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
-FCF5;N;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
-FCF6;N;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
-FCF7;N;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
-FCF8;N;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
-FCF9;N;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
-FCFA;N;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
-FCFB;N;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
-FCFC;N;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
-FCFD;N;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
-FCFE;N;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
-FCFF;N;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
-FD00;N;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
-FD01;N;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
-FD02;N;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
-FD03;N;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
-FD04;N;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
-FD05;N;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
-FD06;N;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
-FD07;N;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
-FD08;N;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
-FD09;N;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
-FD0A;N;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
-FD0B;N;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
-FD0C;N;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
-FD0D;N;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
-FD0E;N;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
-FD0F;N;ARABIC LIGATURE SAD WITH REH ISOLATED FORM
-FD10;N;ARABIC LIGATURE DAD WITH REH ISOLATED FORM
-FD11;N;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
-FD12;N;ARABIC LIGATURE TAH WITH YEH FINAL FORM
-FD13;N;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
-FD14;N;ARABIC LIGATURE AIN WITH YEH FINAL FORM
-FD15;N;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
-FD16;N;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
-FD17;N;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
-FD18;N;ARABIC LIGATURE SEEN WITH YEH FINAL FORM
-FD19;N;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
-FD1A;N;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
-FD1B;N;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
-FD1C;N;ARABIC LIGATURE HAH WITH YEH FINAL FORM
-FD1D;N;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
-FD1E;N;ARABIC LIGATURE JEEM WITH YEH FINAL FORM
-FD1F;N;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
-FD20;N;ARABIC LIGATURE KHAH WITH YEH FINAL FORM
-FD21;N;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
-FD22;N;ARABIC LIGATURE SAD WITH YEH FINAL FORM
-FD23;N;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
-FD24;N;ARABIC LIGATURE DAD WITH YEH FINAL FORM
-FD25;N;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
-FD26;N;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
-FD27;N;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
-FD28;N;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
-FD29;N;ARABIC LIGATURE SHEEN WITH REH FINAL FORM
-FD2A;N;ARABIC LIGATURE SEEN WITH REH FINAL FORM
-FD2B;N;ARABIC LIGATURE SAD WITH REH FINAL FORM
-FD2C;N;ARABIC LIGATURE DAD WITH REH FINAL FORM
-FD2D;N;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
-FD2E;N;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
-FD2F;N;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
-FD30;N;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
-FD31;N;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
-FD32;N;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
-FD33;N;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
-FD34;N;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
-FD35;N;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
-FD36;N;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
-FD37;N;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
-FD38;N;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
-FD39;N;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
-FD3A;N;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
-FD3B;N;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
-FD3C;N;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
-FD3D;N;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
-FD3E;N;ORNATE LEFT PARENTHESIS
-FD3F;N;ORNATE RIGHT PARENTHESIS
-FD50;N;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
-FD51;N;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
-FD52;N;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
-FD53;N;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
-FD54;N;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
-FD55;N;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
-FD56;N;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
-FD57;N;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
-FD58;N;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
-FD59;N;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
-FD5A;N;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
-FD5B;N;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FD5C;N;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
-FD5D;N;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
-FD5E;N;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
-FD5F;N;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
-FD60;N;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
-FD61;N;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
-FD62;N;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
-FD63;N;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
-FD64;N;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
-FD65;N;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
-FD66;N;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
-FD67;N;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
-FD68;N;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
-FD69;N;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
-FD6A;N;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
-FD6B;N;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
-FD6C;N;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
-FD6D;N;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
-FD6E;N;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
-FD6F;N;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
-FD70;N;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
-FD71;N;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
-FD72;N;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
-FD73;N;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
-FD74;N;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
-FD75;N;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
-FD76;N;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
-FD77;N;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
-FD78;N;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FD79;N;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
-FD7A;N;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
-FD7B;N;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FD7C;N;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
-FD7D;N;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
-FD7E;N;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
-FD7F;N;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
-FD80;N;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
-FD81;N;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
-FD82;N;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
-FD83;N;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
-FD84;N;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
-FD85;N;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
-FD86;N;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
-FD87;N;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
-FD88;N;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
-FD89;N;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
-FD8A;N;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
-FD8B;N;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
-FD8C;N;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
-FD8D;N;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
-FD8E;N;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
-FD8F;N;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
-FD92;N;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
-FD93;N;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
-FD94;N;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
-FD95;N;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
-FD96;N;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
-FD97;N;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
-FD98;N;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
-FD99;N;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
-FD9A;N;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
-FD9B;N;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FD9C;N;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
-FD9D;N;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
-FD9E;N;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
-FD9F;N;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
-FDA0;N;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
-FDA1;N;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
-FDA2;N;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
-FDA3;N;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
-FDA4;N;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FDA5;N;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
-FDA6;N;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
-FDA7;N;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FDA8;N;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
-FDA9;N;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
-FDAA;N;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
-FDAB;N;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
-FDAC;N;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
-FDAD;N;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
-FDAE;N;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
-FDAF;N;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
-FDB0;N;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
-FDB1;N;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
-FDB2;N;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
-FDB3;N;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
-FDB4;N;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
-FDB5;N;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
-FDB6;N;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
-FDB7;N;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
-FDB8;N;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
-FDB9;N;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
-FDBA;N;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
-FDBB;N;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
-FDBC;N;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
-FDBD;N;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
-FDBE;N;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
-FDBF;N;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
-FDC0;N;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
-FDC1;N;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
-FDC2;N;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
-FDC3;N;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
-FDC4;N;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
-FDC5;N;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
-FDC6;N;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
-FDC7;N;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-FDF0;N;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
-FDF1;N;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
-FDF2;N;ARABIC LIGATURE ALLAH ISOLATED FORM
-FDF3;N;ARABIC LIGATURE AKBAR ISOLATED FORM
-FDF4;N;ARABIC LIGATURE MOHAMMAD ISOLATED FORM
-FDF5;N;ARABIC LIGATURE SALAM ISOLATED FORM
-FDF6;N;ARABIC LIGATURE RASOUL ISOLATED FORM
-FDF7;N;ARABIC LIGATURE ALAYHE ISOLATED FORM
-FDF8;N;ARABIC LIGATURE WASALLAM ISOLATED FORM
-FDF9;N;ARABIC LIGATURE SALLA ISOLATED FORM
-FDFA;N;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
-FDFB;N;ARABIC LIGATURE JALLAJALALOUHOU
-FE20;N;COMBINING LIGATURE LEFT HALF
-FE21;N;COMBINING LIGATURE RIGHT HALF
-FE22;N;COMBINING DOUBLE TILDE LEFT HALF
-FE23;N;COMBINING DOUBLE TILDE RIGHT HALF
-FE30;W;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
-FE31;W;PRESENTATION FORM FOR VERTICAL EM DASH
-FE32;W;PRESENTATION FORM FOR VERTICAL EN DASH
-FE33;W;PRESENTATION FORM FOR VERTICAL LOW LINE
-FE34;W;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
-FE35;W;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
-FE36;W;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
-FE37;W;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
-FE38;W;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
-FE39;W;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
-FE3A;W;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
-FE3B;W;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
-FE3C;W;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
-FE3D;W;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
-FE3E;W;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
-FE3F;W;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
-FE40;W;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
-FE41;W;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
-FE42;W;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
-FE43;W;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
-FE44;W;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
-FE49;W;DASHED OVERLINE
-FE4A;W;CENTRELINE OVERLINE
-FE4B;W;WAVY OVERLINE
-FE4C;W;DOUBLE WAVY OVERLINE
-FE4D;W;DASHED LOW LINE
-FE4E;W;CENTRELINE LOW LINE
-FE4F;W;WAVY LOW LINE
-FE50;W;SMALL COMMA
-FE51;W;SMALL IDEOGRAPHIC COMMA
-FE52;W;SMALL FULL STOP
-FE54;W;SMALL SEMICOLON
-FE55;W;SMALL COLON
-FE56;W;SMALL QUESTION MARK
-FE57;W;SMALL EXCLAMATION MARK
-FE58;W;SMALL EM DASH
-FE59;W;SMALL LEFT PARENTHESIS
-FE5A;W;SMALL RIGHT PARENTHESIS
-FE5B;W;SMALL LEFT CURLY BRACKET
-FE5C;W;SMALL RIGHT CURLY BRACKET
-FE5D;W;SMALL LEFT TORTOISE SHELL BRACKET
-FE5E;W;SMALL RIGHT TORTOISE SHELL BRACKET
-FE5F;W;SMALL NUMBER SIGN
-FE60;W;SMALL AMPERSAND
-FE61;W;SMALL ASTERISK
-FE62;W;SMALL PLUS SIGN
-FE63;W;SMALL HYPHEN-MINUS
-FE64;W;SMALL LESS-THAN SIGN
-FE65;W;SMALL GREATER-THAN SIGN
-FE66;W;SMALL EQUALS SIGN
-FE68;W;SMALL REVERSE SOLIDUS
-FE69;W;SMALL DOLLAR SIGN
-FE6A;W;SMALL PERCENT SIGN
-FE6B;W;SMALL COMMERCIAL AT
-FE70;N;ARABIC FATHATAN ISOLATED FORM
-FE71;N;ARABIC TATWEEL WITH FATHATAN ABOVE
-FE72;N;ARABIC DAMMATAN ISOLATED FORM
-FE74;N;ARABIC KASRATAN ISOLATED FORM
-FE76;N;ARABIC FATHA ISOLATED FORM
-FE77;N;ARABIC FATHA MEDIAL FORM
-FE78;N;ARABIC DAMMA ISOLATED FORM
-FE79;N;ARABIC DAMMA MEDIAL FORM
-FE7A;N;ARABIC KASRA ISOLATED FORM
-FE7B;N;ARABIC KASRA MEDIAL FORM
-FE7C;N;ARABIC SHADDA ISOLATED FORM
-FE7D;N;ARABIC SHADDA MEDIAL FORM
-FE7E;N;ARABIC SUKUN ISOLATED FORM
-FE7F;N;ARABIC SUKUN MEDIAL FORM
-FE80;N;ARABIC LETTER HAMZA ISOLATED FORM
-FE81;N;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
-FE82;N;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
-FE83;N;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
-FE84;N;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
-FE85;N;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
-FE86;N;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
-FE87;N;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
-FE88;N;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
-FE89;N;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
-FE8A;N;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
-FE8B;N;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
-FE8C;N;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
-FE8D;N;ARABIC LETTER ALEF ISOLATED FORM
-FE8E;N;ARABIC LETTER ALEF FINAL FORM
-FE8F;N;ARABIC LETTER BEH ISOLATED FORM
-FE90;N;ARABIC LETTER BEH FINAL FORM
-FE91;N;ARABIC LETTER BEH INITIAL FORM
-FE92;N;ARABIC LETTER BEH MEDIAL FORM
-FE93;N;ARABIC LETTER TEH MARBUTA ISOLATED FORM
-FE94;N;ARABIC LETTER TEH MARBUTA FINAL FORM
-FE95;N;ARABIC LETTER TEH ISOLATED FORM
-FE96;N;ARABIC LETTER TEH FINAL FORM
-FE97;N;ARABIC LETTER TEH INITIAL FORM
-FE98;N;ARABIC LETTER TEH MEDIAL FORM
-FE99;N;ARABIC LETTER THEH ISOLATED FORM
-FE9A;N;ARABIC LETTER THEH FINAL FORM
-FE9B;N;ARABIC LETTER THEH INITIAL FORM
-FE9C;N;ARABIC LETTER THEH MEDIAL FORM
-FE9D;N;ARABIC LETTER JEEM ISOLATED FORM
-FE9E;N;ARABIC LETTER JEEM FINAL FORM
-FE9F;N;ARABIC LETTER JEEM INITIAL FORM
-FEA0;N;ARABIC LETTER JEEM MEDIAL FORM
-FEA1;N;ARABIC LETTER HAH ISOLATED FORM
-FEA2;N;ARABIC LETTER HAH FINAL FORM
-FEA3;N;ARABIC LETTER HAH INITIAL FORM
-FEA4;N;ARABIC LETTER HAH MEDIAL FORM
-FEA5;N;ARABIC LETTER KHAH ISOLATED FORM
-FEA6;N;ARABIC LETTER KHAH FINAL FORM
-FEA7;N;ARABIC LETTER KHAH INITIAL FORM
-FEA8;N;ARABIC LETTER KHAH MEDIAL FORM
-FEA9;N;ARABIC LETTER DAL ISOLATED FORM
-FEAA;N;ARABIC LETTER DAL FINAL FORM
-FEAB;N;ARABIC LETTER THAL ISOLATED FORM
-FEAC;N;ARABIC LETTER THAL FINAL FORM
-FEAD;N;ARABIC LETTER REH ISOLATED FORM
-FEAE;N;ARABIC LETTER REH FINAL FORM
-FEAF;N;ARABIC LETTER ZAIN ISOLATED FORM
-FEB0;N;ARABIC LETTER ZAIN FINAL FORM
-FEB1;N;ARABIC LETTER SEEN ISOLATED FORM
-FEB2;N;ARABIC LETTER SEEN FINAL FORM
-FEB3;N;ARABIC LETTER SEEN INITIAL FORM
-FEB4;N;ARABIC LETTER SEEN MEDIAL FORM
-FEB5;N;ARABIC LETTER SHEEN ISOLATED FORM
-FEB6;N;ARABIC LETTER SHEEN FINAL FORM
-FEB7;N;ARABIC LETTER SHEEN INITIAL FORM
-FEB8;N;ARABIC LETTER SHEEN MEDIAL FORM
-FEB9;N;ARABIC LETTER SAD ISOLATED FORM
-FEBA;N;ARABIC LETTER SAD FINAL FORM
-FEBB;N;ARABIC LETTER SAD INITIAL FORM
-FEBC;N;ARABIC LETTER SAD MEDIAL FORM
-FEBD;N;ARABIC LETTER DAD ISOLATED FORM
-FEBE;N;ARABIC LETTER DAD FINAL FORM
-FEBF;N;ARABIC LETTER DAD INITIAL FORM
-FEC0;N;ARABIC LETTER DAD MEDIAL FORM
-FEC1;N;ARABIC LETTER TAH ISOLATED FORM
-FEC2;N;ARABIC LETTER TAH FINAL FORM
-FEC3;N;ARABIC LETTER TAH INITIAL FORM
-FEC4;N;ARABIC LETTER TAH MEDIAL FORM
-FEC5;N;ARABIC LETTER ZAH ISOLATED FORM
-FEC6;N;ARABIC LETTER ZAH FINAL FORM
-FEC7;N;ARABIC LETTER ZAH INITIAL FORM
-FEC8;N;ARABIC LETTER ZAH MEDIAL FORM
-FEC9;N;ARABIC LETTER AIN ISOLATED FORM
-FECA;N;ARABIC LETTER AIN FINAL FORM
-FECB;N;ARABIC LETTER AIN INITIAL FORM
-FECC;N;ARABIC LETTER AIN MEDIAL FORM
-FECD;N;ARABIC LETTER GHAIN ISOLATED FORM
-FECE;N;ARABIC LETTER GHAIN FINAL FORM
-FECF;N;ARABIC LETTER GHAIN INITIAL FORM
-FED0;N;ARABIC LETTER GHAIN MEDIAL FORM
-FED1;N;ARABIC LETTER FEH ISOLATED FORM
-FED2;N;ARABIC LETTER FEH FINAL FORM
-FED3;N;ARABIC LETTER FEH INITIAL FORM
-FED4;N;ARABIC LETTER FEH MEDIAL FORM
-FED5;N;ARABIC LETTER QAF ISOLATED FORM
-FED6;N;ARABIC LETTER QAF FINAL FORM
-FED7;N;ARABIC LETTER QAF INITIAL FORM
-FED8;N;ARABIC LETTER QAF MEDIAL FORM
-FED9;N;ARABIC LETTER KAF ISOLATED FORM
-FEDA;N;ARABIC LETTER KAF FINAL FORM
-FEDB;N;ARABIC LETTER KAF INITIAL FORM
-FEDC;N;ARABIC LETTER KAF MEDIAL FORM
-FEDD;N;ARABIC LETTER LAM ISOLATED FORM
-FEDE;N;ARABIC LETTER LAM FINAL FORM
-FEDF;N;ARABIC LETTER LAM INITIAL FORM
-FEE0;N;ARABIC LETTER LAM MEDIAL FORM
-FEE1;N;ARABIC LETTER MEEM ISOLATED FORM
-FEE2;N;ARABIC LETTER MEEM FINAL FORM
-FEE3;N;ARABIC LETTER MEEM INITIAL FORM
-FEE4;N;ARABIC LETTER MEEM MEDIAL FORM
-FEE5;N;ARABIC LETTER NOON ISOLATED FORM
-FEE6;N;ARABIC LETTER NOON FINAL FORM
-FEE7;N;ARABIC LETTER NOON INITIAL FORM
-FEE8;N;ARABIC LETTER NOON MEDIAL FORM
-FEE9;N;ARABIC LETTER HEH ISOLATED FORM
-FEEA;N;ARABIC LETTER HEH FINAL FORM
-FEEB;N;ARABIC LETTER HEH INITIAL FORM
-FEEC;N;ARABIC LETTER HEH MEDIAL FORM
-FEED;N;ARABIC LETTER WAW ISOLATED FORM
-FEEE;N;ARABIC LETTER WAW FINAL FORM
-FEEF;N;ARABIC LETTER ALEF MAKSURA ISOLATED FORM
-FEF0;N;ARABIC LETTER ALEF MAKSURA FINAL FORM
-FEF1;N;ARABIC LETTER YEH ISOLATED FORM
-FEF2;N;ARABIC LETTER YEH FINAL FORM
-FEF3;N;ARABIC LETTER YEH INITIAL FORM
-FEF4;N;ARABIC LETTER YEH MEDIAL FORM
-FEF5;N;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
-FEF6;N;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
-FEF7;N;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
-FEF8;N;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
-FEF9;N;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
-FEFA;N;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
-FEFB;N;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-FEFC;N;ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-FEFF;N;ZERO WIDTH NO-BREAK SPACE
-FF01;F;FULLWIDTH EXCLAMATION MARK
-FF02;F;FULLWIDTH QUOTATION MARK
-FF03;F;FULLWIDTH NUMBER SIGN
-FF04;F;FULLWIDTH DOLLAR SIGN
-FF05;F;FULLWIDTH PERCENT SIGN
-FF06;F;FULLWIDTH AMPERSAND
-FF07;F;FULLWIDTH APOSTROPHE
-FF08;F;FULLWIDTH LEFT PARENTHESIS
-FF09;F;FULLWIDTH RIGHT PARENTHESIS
-FF0A;F;FULLWIDTH ASTERISK
-FF0B;F;FULLWIDTH PLUS SIGN
-FF0C;F;FULLWIDTH COMMA
-FF0D;F;FULLWIDTH HYPHEN-MINUS
-FF0E;F;FULLWIDTH FULL STOP
-FF0F;F;FULLWIDTH SOLIDUS
-FF10;F;FULLWIDTH DIGIT ZERO
-FF11;F;FULLWIDTH DIGIT ONE
-FF12;F;FULLWIDTH DIGIT TWO
-FF13;F;FULLWIDTH DIGIT THREE
-FF14;F;FULLWIDTH DIGIT FOUR
-FF15;F;FULLWIDTH DIGIT FIVE
-FF16;F;FULLWIDTH DIGIT SIX
-FF17;F;FULLWIDTH DIGIT SEVEN
-FF18;F;FULLWIDTH DIGIT EIGHT
-FF19;F;FULLWIDTH DIGIT NINE
-FF1A;F;FULLWIDTH COLON
-FF1B;F;FULLWIDTH SEMICOLON
-FF1C;F;FULLWIDTH LESS-THAN SIGN
-FF1D;F;FULLWIDTH EQUALS SIGN
-FF1E;F;FULLWIDTH GREATER-THAN SIGN
-FF1F;F;FULLWIDTH QUESTION MARK
-FF20;F;FULLWIDTH COMMERCIAL AT
-FF21;F;FULLWIDTH LATIN CAPITAL LETTER A
-FF22;F;FULLWIDTH LATIN CAPITAL LETTER B
-FF23;F;FULLWIDTH LATIN CAPITAL LETTER C
-FF24;F;FULLWIDTH LATIN CAPITAL LETTER D
-FF25;F;FULLWIDTH LATIN CAPITAL LETTER E
-FF26;F;FULLWIDTH LATIN CAPITAL LETTER F
-FF27;F;FULLWIDTH LATIN CAPITAL LETTER G
-FF28;F;FULLWIDTH LATIN CAPITAL LETTER H
-FF29;F;FULLWIDTH LATIN CAPITAL LETTER I
-FF2A;F;FULLWIDTH LATIN CAPITAL LETTER J
-FF2B;F;FULLWIDTH LATIN CAPITAL LETTER K
-FF2C;F;FULLWIDTH LATIN CAPITAL LETTER L
-FF2D;F;FULLWIDTH LATIN CAPITAL LETTER M
-FF2E;F;FULLWIDTH LATIN CAPITAL LETTER N
-FF2F;F;FULLWIDTH LATIN CAPITAL LETTER O
-FF30;F;FULLWIDTH LATIN CAPITAL LETTER P
-FF31;F;FULLWIDTH LATIN CAPITAL LETTER Q
-FF32;F;FULLWIDTH LATIN CAPITAL LETTER R
-FF33;F;FULLWIDTH LATIN CAPITAL LETTER S
-FF34;F;FULLWIDTH LATIN CAPITAL LETTER T
-FF35;F;FULLWIDTH LATIN CAPITAL LETTER U
-FF36;F;FULLWIDTH LATIN CAPITAL LETTER V
-FF37;F;FULLWIDTH LATIN CAPITAL LETTER W
-FF38;F;FULLWIDTH LATIN CAPITAL LETTER X
-FF39;F;FULLWIDTH LATIN CAPITAL LETTER Y
-FF3A;F;FULLWIDTH LATIN CAPITAL LETTER Z
-FF3B;F;FULLWIDTH LEFT SQUARE BRACKET
-FF3C;F;FULLWIDTH REVERSE SOLIDUS
-FF3D;F;FULLWIDTH RIGHT SQUARE BRACKET
-FF3E;F;FULLWIDTH CIRCUMFLEX ACCENT
-FF3F;F;FULLWIDTH LOW LINE
-FF40;F;FULLWIDTH GRAVE ACCENT
-FF41;F;FULLWIDTH LATIN SMALL LETTER A
-FF42;F;FULLWIDTH LATIN SMALL LETTER B
-FF43;F;FULLWIDTH LATIN SMALL LETTER C
-FF44;F;FULLWIDTH LATIN SMALL LETTER D
-FF45;F;FULLWIDTH LATIN SMALL LETTER E
-FF46;F;FULLWIDTH LATIN SMALL LETTER F
-FF47;F;FULLWIDTH LATIN SMALL LETTER G
-FF48;F;FULLWIDTH LATIN SMALL LETTER H
-FF49;F;FULLWIDTH LATIN SMALL LETTER I
-FF4A;F;FULLWIDTH LATIN SMALL LETTER J
-FF4B;F;FULLWIDTH LATIN SMALL LETTER K
-FF4C;F;FULLWIDTH LATIN SMALL LETTER L
-FF4D;F;FULLWIDTH LATIN SMALL LETTER M
-FF4E;F;FULLWIDTH LATIN SMALL LETTER N
-FF4F;F;FULLWIDTH LATIN SMALL LETTER O
-FF50;F;FULLWIDTH LATIN SMALL LETTER P
-FF51;F;FULLWIDTH LATIN SMALL LETTER Q
-FF52;F;FULLWIDTH LATIN SMALL LETTER R
-FF53;F;FULLWIDTH LATIN SMALL LETTER S
-FF54;F;FULLWIDTH LATIN SMALL LETTER T
-FF55;F;FULLWIDTH LATIN SMALL LETTER U
-FF56;F;FULLWIDTH LATIN SMALL LETTER V
-FF57;F;FULLWIDTH LATIN SMALL LETTER W
-FF58;F;FULLWIDTH LATIN SMALL LETTER X
-FF59;F;FULLWIDTH LATIN SMALL LETTER Y
-FF5A;F;FULLWIDTH LATIN SMALL LETTER Z
-FF5B;F;FULLWIDTH LEFT CURLY BRACKET
-FF5C;F;FULLWIDTH VERTICAL LINE
-FF5D;F;FULLWIDTH RIGHT CURLY BRACKET
-FF5E;F;FULLWIDTH TILDE
-FF61;H;HALFWIDTH IDEOGRAPHIC FULL STOP
-FF62;H;HALFWIDTH LEFT CORNER BRACKET
-FF63;H;HALFWIDTH RIGHT CORNER BRACKET
-FF64;H;HALFWIDTH IDEOGRAPHIC COMMA
-FF65;H;HALFWIDTH KATAKANA MIDDLE DOT
-FF66;H;HALFWIDTH KATAKANA LETTER WO
-FF67;H;HALFWIDTH KATAKANA LETTER SMALL A
-FF68;H;HALFWIDTH KATAKANA LETTER SMALL I
-FF69;H;HALFWIDTH KATAKANA LETTER SMALL U
-FF6A;H;HALFWIDTH KATAKANA LETTER SMALL E
-FF6B;H;HALFWIDTH KATAKANA LETTER SMALL O
-FF6C;H;HALFWIDTH KATAKANA LETTER SMALL YA
-FF6D;H;HALFWIDTH KATAKANA LETTER SMALL YU
-FF6E;H;HALFWIDTH KATAKANA LETTER SMALL YO
-FF6F;H;HALFWIDTH KATAKANA LETTER SMALL TU
-FF70;H;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-FF71;H;HALFWIDTH KATAKANA LETTER A
-FF72;H;HALFWIDTH KATAKANA LETTER I
-FF73;H;HALFWIDTH KATAKANA LETTER U
-FF74;H;HALFWIDTH KATAKANA LETTER E
-FF75;H;HALFWIDTH KATAKANA LETTER O
-FF76;H;HALFWIDTH KATAKANA LETTER KA
-FF77;H;HALFWIDTH KATAKANA LETTER KI
-FF78;H;HALFWIDTH KATAKANA LETTER KU
-FF79;H;HALFWIDTH KATAKANA LETTER KE
-FF7A;H;HALFWIDTH KATAKANA LETTER KO
-FF7B;H;HALFWIDTH KATAKANA LETTER SA
-FF7C;H;HALFWIDTH KATAKANA LETTER SI
-FF7D;H;HALFWIDTH KATAKANA LETTER SU
-FF7E;H;HALFWIDTH KATAKANA LETTER SE
-FF7F;H;HALFWIDTH KATAKANA LETTER SO
-FF80;H;HALFWIDTH KATAKANA LETTER TA
-FF81;H;HALFWIDTH KATAKANA LETTER TI
-FF82;H;HALFWIDTH KATAKANA LETTER TU
-FF83;H;HALFWIDTH KATAKANA LETTER TE
-FF84;H;HALFWIDTH KATAKANA LETTER TO
-FF85;H;HALFWIDTH KATAKANA LETTER NA
-FF86;H;HALFWIDTH KATAKANA LETTER NI
-FF87;H;HALFWIDTH KATAKANA LETTER NU
-FF88;H;HALFWIDTH KATAKANA LETTER NE
-FF89;H;HALFWIDTH KATAKANA LETTER NO
-FF8A;H;HALFWIDTH KATAKANA LETTER HA
-FF8B;H;HALFWIDTH KATAKANA LETTER HI
-FF8C;H;HALFWIDTH KATAKANA LETTER HU
-FF8D;H;HALFWIDTH KATAKANA LETTER HE
-FF8E;H;HALFWIDTH KATAKANA LETTER HO
-FF8F;H;HALFWIDTH KATAKANA LETTER MA
-FF90;H;HALFWIDTH KATAKANA LETTER MI
-FF91;H;HALFWIDTH KATAKANA LETTER MU
-FF92;H;HALFWIDTH KATAKANA LETTER ME
-FF93;H;HALFWIDTH KATAKANA LETTER MO
-FF94;H;HALFWIDTH KATAKANA LETTER YA
-FF95;H;HALFWIDTH KATAKANA LETTER YU
-FF96;H;HALFWIDTH KATAKANA LETTER YO
-FF97;H;HALFWIDTH KATAKANA LETTER RA
-FF98;H;HALFWIDTH KATAKANA LETTER RI
-FF99;H;HALFWIDTH KATAKANA LETTER RU
-FF9A;H;HALFWIDTH KATAKANA LETTER RE
-FF9B;H;HALFWIDTH KATAKANA LETTER RO
-FF9C;H;HALFWIDTH KATAKANA LETTER WA
-FF9D;H;HALFWIDTH KATAKANA LETTER N
-FF9E;H;HALFWIDTH KATAKANA VOICED SOUND MARK
-FF9F;H;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-FFA0;H;HALFWIDTH HANGUL FILLER
-FFA1;H;HALFWIDTH HANGUL LETTER KIYEOK
-FFA2;H;HALFWIDTH HANGUL LETTER SSANGKIYEOK
-FFA3;H;HALFWIDTH HANGUL LETTER KIYEOK-SIOS
-FFA4;H;HALFWIDTH HANGUL LETTER NIEUN
-FFA5;H;HALFWIDTH HANGUL LETTER NIEUN-CIEUC
-FFA6;H;HALFWIDTH HANGUL LETTER NIEUN-HIEUH
-FFA7;H;HALFWIDTH HANGUL LETTER TIKEUT
-FFA8;H;HALFWIDTH HANGUL LETTER SSANGTIKEUT
-FFA9;H;HALFWIDTH HANGUL LETTER RIEUL
-FFAA;H;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
-FFAB;H;HALFWIDTH HANGUL LETTER RIEUL-MIEUM
-FFAC;H;HALFWIDTH HANGUL LETTER RIEUL-PIEUP
-FFAD;H;HALFWIDTH HANGUL LETTER RIEUL-SIOS
-FFAE;H;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
-FFAF;H;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
-FFB0;H;HALFWIDTH HANGUL LETTER RIEUL-HIEUH
-FFB1;H;HALFWIDTH HANGUL LETTER MIEUM
-FFB2;H;HALFWIDTH HANGUL LETTER PIEUP
-FFB3;H;HALFWIDTH HANGUL LETTER SSANGPIEUP
-FFB4;H;HALFWIDTH HANGUL LETTER PIEUP-SIOS
-FFB5;H;HALFWIDTH HANGUL LETTER SIOS
-FFB6;H;HALFWIDTH HANGUL LETTER SSANGSIOS
-FFB7;H;HALFWIDTH HANGUL LETTER IEUNG
-FFB8;H;HALFWIDTH HANGUL LETTER CIEUC
-FFB9;H;HALFWIDTH HANGUL LETTER SSANGCIEUC
-FFBA;H;HALFWIDTH HANGUL LETTER CHIEUCH
-FFBB;H;HALFWIDTH HANGUL LETTER KHIEUKH
-FFBC;H;HALFWIDTH HANGUL LETTER THIEUTH
-FFBD;H;HALFWIDTH HANGUL LETTER PHIEUPH
-FFBE;H;HALFWIDTH HANGUL LETTER HIEUH
-FFC2;H;HALFWIDTH HANGUL LETTER A
-FFC3;H;HALFWIDTH HANGUL LETTER AE
-FFC4;H;HALFWIDTH HANGUL LETTER YA
-FFC5;H;HALFWIDTH HANGUL LETTER YAE
-FFC6;H;HALFWIDTH HANGUL LETTER EO
-FFC7;H;HALFWIDTH HANGUL LETTER E
-FFCA;H;HALFWIDTH HANGUL LETTER YEO
-FFCB;H;HALFWIDTH HANGUL LETTER YE
-FFCC;H;HALFWIDTH HANGUL LETTER O
-FFCD;H;HALFWIDTH HANGUL LETTER WA
-FFCE;H;HALFWIDTH HANGUL LETTER WAE
-FFCF;H;HALFWIDTH HANGUL LETTER OE
-FFD2;H;HALFWIDTH HANGUL LETTER YO
-FFD3;H;HALFWIDTH HANGUL LETTER U
-FFD4;H;HALFWIDTH HANGUL LETTER WEO
-FFD5;H;HALFWIDTH HANGUL LETTER WE
-FFD6;H;HALFWIDTH HANGUL LETTER WI
-FFD7;H;HALFWIDTH HANGUL LETTER YU
-FFDA;H;HALFWIDTH HANGUL LETTER EU
-FFDB;H;HALFWIDTH HANGUL LETTER YI
-FFDC;H;HALFWIDTH HANGUL LETTER I
-FFE0;F;FULLWIDTH CENT SIGN
-FFE1;F;FULLWIDTH POUND SIGN
-FFE2;F;FULLWIDTH NOT SIGN
-FFE3;F;FULLWIDTH MACRON
-FFE4;F;FULLWIDTH BROKEN BAR
-FFE5;F;FULLWIDTH YEN SIGN
-FFE6;F;FULLWIDTH WON SIGN
-FFE8;H;HALFWIDTH FORMS LIGHT VERTICAL
-FFE9;H;HALFWIDTH LEFTWARDS ARROW
-FFEA;H;HALFWIDTH UPWARDS ARROW
-FFEB;H;HALFWIDTH RIGHTWARDS ARROW
-FFEC;H;HALFWIDTH DOWNWARDS ARROW
-FFED;H;HALFWIDTH BLACK SQUARE
-FFEE;H;HALFWIDTH WHITE CIRCLE
-FFF9;N;INTERLINEAR ANNOTATION ANCHOR
-FFFA;N;INTERLINEAR ANNOTATION SEPARATOR
-FFFB;N;INTERLINEAR ANNOTATION TERMINATOR
-FFFC;N;OBJECT REPLACEMENT CHARACTER
-FFFD;A;REPLACEMENT CHARACTER
diff --git a/contrib/perl5/lib/unicode/In/AlphabeticPresentationForms.pl b/contrib/perl5/lib/unicode/In/AlphabeticPresentationForms.pl
deleted file mode 100644
index a85b9ca..0000000
--- a/contrib/perl5/lib/unicode/In/AlphabeticPresentationForms.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-FB00 FB4F
-END
diff --git a/contrib/perl5/lib/unicode/In/Arabic.pl b/contrib/perl5/lib/unicode/In/Arabic.pl
deleted file mode 100644
index 5fbbbfa..0000000
--- a/contrib/perl5/lib/unicode/In/Arabic.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0600 06FF
-END
diff --git a/contrib/perl5/lib/unicode/In/ArabicPresentationForms-A.pl b/contrib/perl5/lib/unicode/In/ArabicPresentationForms-A.pl
deleted file mode 100644
index 62521bb..0000000
--- a/contrib/perl5/lib/unicode/In/ArabicPresentationForms-A.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-FB50 FDFF
-END
diff --git a/contrib/perl5/lib/unicode/In/ArabicPresentationForms-B.pl b/contrib/perl5/lib/unicode/In/ArabicPresentationForms-B.pl
deleted file mode 100644
index 6b2d447..0000000
--- a/contrib/perl5/lib/unicode/In/ArabicPresentationForms-B.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-FE70 FEFE
-END
diff --git a/contrib/perl5/lib/unicode/In/Armenian.pl b/contrib/perl5/lib/unicode/In/Armenian.pl
deleted file mode 100644
index d4736a7..0000000
--- a/contrib/perl5/lib/unicode/In/Armenian.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0530 058F
-END
diff --git a/contrib/perl5/lib/unicode/In/Arrows.pl b/contrib/perl5/lib/unicode/In/Arrows.pl
deleted file mode 100644
index a7ef468..0000000
--- a/contrib/perl5/lib/unicode/In/Arrows.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2190 21FF
-END
diff --git a/contrib/perl5/lib/unicode/In/BasicLatin.pl b/contrib/perl5/lib/unicode/In/BasicLatin.pl
deleted file mode 100644
index 36d6456..0000000
--- a/contrib/perl5/lib/unicode/In/BasicLatin.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 007F
-END
diff --git a/contrib/perl5/lib/unicode/In/Bengali.pl b/contrib/perl5/lib/unicode/In/Bengali.pl
deleted file mode 100644
index 07dc6ac..0000000
--- a/contrib/perl5/lib/unicode/In/Bengali.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0980 09FF
-END
diff --git a/contrib/perl5/lib/unicode/In/BlockElements.pl b/contrib/perl5/lib/unicode/In/BlockElements.pl
deleted file mode 100644
index 495629b..0000000
--- a/contrib/perl5/lib/unicode/In/BlockElements.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2580 259F
-END
diff --git a/contrib/perl5/lib/unicode/In/Bopomofo.pl b/contrib/perl5/lib/unicode/In/Bopomofo.pl
deleted file mode 100644
index 3dbf73a..0000000
--- a/contrib/perl5/lib/unicode/In/Bopomofo.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3100 312F
-END
diff --git a/contrib/perl5/lib/unicode/In/BopomofoExtended.pl b/contrib/perl5/lib/unicode/In/BopomofoExtended.pl
deleted file mode 100644
index f2ca6de..0000000
--- a/contrib/perl5/lib/unicode/In/BopomofoExtended.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-31A0 31BF
-END
diff --git a/contrib/perl5/lib/unicode/In/BoxDrawing.pl b/contrib/perl5/lib/unicode/In/BoxDrawing.pl
deleted file mode 100644
index a3cd897..0000000
--- a/contrib/perl5/lib/unicode/In/BoxDrawing.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2500 257F
-END
diff --git a/contrib/perl5/lib/unicode/In/BraillePatterns.pl b/contrib/perl5/lib/unicode/In/BraillePatterns.pl
deleted file mode 100644
index 58afc05..0000000
--- a/contrib/perl5/lib/unicode/In/BraillePatterns.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2800 28FF
-END
diff --git a/contrib/perl5/lib/unicode/In/CJKCompatibility.pl b/contrib/perl5/lib/unicode/In/CJKCompatibility.pl
deleted file mode 100644
index 793520f..0000000
--- a/contrib/perl5/lib/unicode/In/CJKCompatibility.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3300 33FF
-END
diff --git a/contrib/perl5/lib/unicode/In/CJKCompatibilityForms.pl b/contrib/perl5/lib/unicode/In/CJKCompatibilityForms.pl
deleted file mode 100644
index a9ba270..0000000
--- a/contrib/perl5/lib/unicode/In/CJKCompatibilityForms.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-FE30 FE4F
-END
diff --git a/contrib/perl5/lib/unicode/In/CJKCompatibilityIdeographs.pl b/contrib/perl5/lib/unicode/In/CJKCompatibilityIdeographs.pl
deleted file mode 100644
index d841bc5..0000000
--- a/contrib/perl5/lib/unicode/In/CJKCompatibilityIdeographs.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-F900 FAFF
-END
diff --git a/contrib/perl5/lib/unicode/In/CJKRadicalsSupplement.pl b/contrib/perl5/lib/unicode/In/CJKRadicalsSupplement.pl
deleted file mode 100644
index 2d13707..0000000
--- a/contrib/perl5/lib/unicode/In/CJKRadicalsSupplement.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2E80 2EFF
-END
diff --git a/contrib/perl5/lib/unicode/In/CJKSymbolsandPunctuation.pl b/contrib/perl5/lib/unicode/In/CJKSymbolsandPunctuation.pl
deleted file mode 100644
index ca525ae..0000000
--- a/contrib/perl5/lib/unicode/In/CJKSymbolsandPunctuation.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3000 303F
-END
diff --git a/contrib/perl5/lib/unicode/In/CJKUnifiedIdeographs.pl b/contrib/perl5/lib/unicode/In/CJKUnifiedIdeographs.pl
deleted file mode 100644
index 729f4c6..0000000
--- a/contrib/perl5/lib/unicode/In/CJKUnifiedIdeographs.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-4E00 9FFF
-END
diff --git a/contrib/perl5/lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl b/contrib/perl5/lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl
deleted file mode 100644
index e92f091..0000000
--- a/contrib/perl5/lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3400 4DB5
-END
diff --git a/contrib/perl5/lib/unicode/In/Cherokee.pl b/contrib/perl5/lib/unicode/In/Cherokee.pl
deleted file mode 100644
index 1e9ad74..0000000
--- a/contrib/perl5/lib/unicode/In/Cherokee.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-13A0 13FF
-END
diff --git a/contrib/perl5/lib/unicode/In/CombiningDiacriticalMarks.pl b/contrib/perl5/lib/unicode/In/CombiningDiacriticalMarks.pl
deleted file mode 100644
index d3a45d4..0000000
--- a/contrib/perl5/lib/unicode/In/CombiningDiacriticalMarks.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0300 036F
-END
diff --git a/contrib/perl5/lib/unicode/In/CombiningHalfMarks.pl b/contrib/perl5/lib/unicode/In/CombiningHalfMarks.pl
deleted file mode 100644
index 4f0a573..0000000
--- a/contrib/perl5/lib/unicode/In/CombiningHalfMarks.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-FE20 FE2F
-END
diff --git a/contrib/perl5/lib/unicode/In/CombiningMarksforSymbols.pl b/contrib/perl5/lib/unicode/In/CombiningMarksforSymbols.pl
deleted file mode 100644
index 9dde706..0000000
--- a/contrib/perl5/lib/unicode/In/CombiningMarksforSymbols.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-20D0 20FF
-END
diff --git a/contrib/perl5/lib/unicode/In/ControlPictures.pl b/contrib/perl5/lib/unicode/In/ControlPictures.pl
deleted file mode 100644
index 78113e8..0000000
--- a/contrib/perl5/lib/unicode/In/ControlPictures.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2400 243F
-END
diff --git a/contrib/perl5/lib/unicode/In/CurrencySymbols.pl b/contrib/perl5/lib/unicode/In/CurrencySymbols.pl
deleted file mode 100644
index 8cbc160..0000000
--- a/contrib/perl5/lib/unicode/In/CurrencySymbols.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-20A0 20CF
-END
diff --git a/contrib/perl5/lib/unicode/In/Cyrillic.pl b/contrib/perl5/lib/unicode/In/Cyrillic.pl
deleted file mode 100644
index f057731..0000000
--- a/contrib/perl5/lib/unicode/In/Cyrillic.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0400 04FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Devanagari.pl b/contrib/perl5/lib/unicode/In/Devanagari.pl
deleted file mode 100644
index c99eff1..0000000
--- a/contrib/perl5/lib/unicode/In/Devanagari.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0900 097F
-END
diff --git a/contrib/perl5/lib/unicode/In/Dingbats.pl b/contrib/perl5/lib/unicode/In/Dingbats.pl
deleted file mode 100644
index 1bbb102..0000000
--- a/contrib/perl5/lib/unicode/In/Dingbats.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2700 27BF
-END
diff --git a/contrib/perl5/lib/unicode/In/EnclosedAlphanumerics.pl b/contrib/perl5/lib/unicode/In/EnclosedAlphanumerics.pl
deleted file mode 100644
index 46b4cf5..0000000
--- a/contrib/perl5/lib/unicode/In/EnclosedAlphanumerics.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2460 24FF
-END
diff --git a/contrib/perl5/lib/unicode/In/EnclosedCJKLettersandMonths.pl b/contrib/perl5/lib/unicode/In/EnclosedCJKLettersandMonths.pl
deleted file mode 100644
index da5a7a1..0000000
--- a/contrib/perl5/lib/unicode/In/EnclosedCJKLettersandMonths.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3200 32FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Ethiopic.pl b/contrib/perl5/lib/unicode/In/Ethiopic.pl
deleted file mode 100644
index 5b472c4..0000000
--- a/contrib/perl5/lib/unicode/In/Ethiopic.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1200 137F
-END
diff --git a/contrib/perl5/lib/unicode/In/GeneralPunctuation.pl b/contrib/perl5/lib/unicode/In/GeneralPunctuation.pl
deleted file mode 100644
index aa82c30..0000000
--- a/contrib/perl5/lib/unicode/In/GeneralPunctuation.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2000 206F
-END
diff --git a/contrib/perl5/lib/unicode/In/GeometricShapes.pl b/contrib/perl5/lib/unicode/In/GeometricShapes.pl
deleted file mode 100644
index 6cf8ea7..0000000
--- a/contrib/perl5/lib/unicode/In/GeometricShapes.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-25A0 25FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Georgian.pl b/contrib/perl5/lib/unicode/In/Georgian.pl
deleted file mode 100644
index 493f570..0000000
--- a/contrib/perl5/lib/unicode/In/Georgian.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-10A0 10FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Greek.pl b/contrib/perl5/lib/unicode/In/Greek.pl
deleted file mode 100644
index ac4bbee..0000000
--- a/contrib/perl5/lib/unicode/In/Greek.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0370 03FF
-END
diff --git a/contrib/perl5/lib/unicode/In/GreekExtended.pl b/contrib/perl5/lib/unicode/In/GreekExtended.pl
deleted file mode 100644
index acd43be..0000000
--- a/contrib/perl5/lib/unicode/In/GreekExtended.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1F00 1FFF
-END
diff --git a/contrib/perl5/lib/unicode/In/Gujarati.pl b/contrib/perl5/lib/unicode/In/Gujarati.pl
deleted file mode 100644
index 0e3c8e9..0000000
--- a/contrib/perl5/lib/unicode/In/Gujarati.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0A80 0AFF
-END
diff --git a/contrib/perl5/lib/unicode/In/Gurmukhi.pl b/contrib/perl5/lib/unicode/In/Gurmukhi.pl
deleted file mode 100644
index 32ff239..0000000
--- a/contrib/perl5/lib/unicode/In/Gurmukhi.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0A00 0A7F
-END
diff --git a/contrib/perl5/lib/unicode/In/HalfwidthandFullwidthForms.pl b/contrib/perl5/lib/unicode/In/HalfwidthandFullwidthForms.pl
deleted file mode 100644
index fd3ba32..0000000
--- a/contrib/perl5/lib/unicode/In/HalfwidthandFullwidthForms.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-FF00 FFEF
-END
diff --git a/contrib/perl5/lib/unicode/In/HangulCompatibilityJamo.pl b/contrib/perl5/lib/unicode/In/HangulCompatibilityJamo.pl
deleted file mode 100644
index 744e572..0000000
--- a/contrib/perl5/lib/unicode/In/HangulCompatibilityJamo.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3130 318F
-END
diff --git a/contrib/perl5/lib/unicode/In/HangulJamo.pl b/contrib/perl5/lib/unicode/In/HangulJamo.pl
deleted file mode 100644
index a1d1c67..0000000
--- a/contrib/perl5/lib/unicode/In/HangulJamo.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1100 11FF
-END
diff --git a/contrib/perl5/lib/unicode/In/HangulSyllables.pl b/contrib/perl5/lib/unicode/In/HangulSyllables.pl
deleted file mode 100644
index 80cd4a4..0000000
--- a/contrib/perl5/lib/unicode/In/HangulSyllables.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-AC00 D7A3
-END
diff --git a/contrib/perl5/lib/unicode/In/Hebrew.pl b/contrib/perl5/lib/unicode/In/Hebrew.pl
deleted file mode 100644
index 2e29a28..0000000
--- a/contrib/perl5/lib/unicode/In/Hebrew.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0590 05FF
-END
diff --git a/contrib/perl5/lib/unicode/In/HighPrivateUseSurrogates.pl b/contrib/perl5/lib/unicode/In/HighPrivateUseSurrogates.pl
deleted file mode 100644
index 0e1320d..0000000
--- a/contrib/perl5/lib/unicode/In/HighPrivateUseSurrogates.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-DB80 DBFF
-END
diff --git a/contrib/perl5/lib/unicode/In/HighSurrogates.pl b/contrib/perl5/lib/unicode/In/HighSurrogates.pl
deleted file mode 100644
index 6acc6c4..0000000
--- a/contrib/perl5/lib/unicode/In/HighSurrogates.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-D800 DB7F
-END
diff --git a/contrib/perl5/lib/unicode/In/Hiragana.pl b/contrib/perl5/lib/unicode/In/Hiragana.pl
deleted file mode 100644
index 5905fe9..0000000
--- a/contrib/perl5/lib/unicode/In/Hiragana.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3040 309F
-END
diff --git a/contrib/perl5/lib/unicode/In/IPAExtensions.pl b/contrib/perl5/lib/unicode/In/IPAExtensions.pl
deleted file mode 100644
index 5365373..0000000
--- a/contrib/perl5/lib/unicode/In/IPAExtensions.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0250 02AF
-END
diff --git a/contrib/perl5/lib/unicode/In/IdeographicDescriptionCharacters.pl b/contrib/perl5/lib/unicode/In/IdeographicDescriptionCharacters.pl
deleted file mode 100644
index dafb5b4..0000000
--- a/contrib/perl5/lib/unicode/In/IdeographicDescriptionCharacters.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2FF0 2FFF
-END
diff --git a/contrib/perl5/lib/unicode/In/Kanbun.pl b/contrib/perl5/lib/unicode/In/Kanbun.pl
deleted file mode 100644
index 9ad03a6..0000000
--- a/contrib/perl5/lib/unicode/In/Kanbun.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3190 319F
-END
diff --git a/contrib/perl5/lib/unicode/In/KangxiRadicals.pl b/contrib/perl5/lib/unicode/In/KangxiRadicals.pl
deleted file mode 100644
index 165398c..0000000
--- a/contrib/perl5/lib/unicode/In/KangxiRadicals.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2F00 2FDF
-END
diff --git a/contrib/perl5/lib/unicode/In/Kannada.pl b/contrib/perl5/lib/unicode/In/Kannada.pl
deleted file mode 100644
index a679445..0000000
--- a/contrib/perl5/lib/unicode/In/Kannada.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0C80 0CFF
-END
diff --git a/contrib/perl5/lib/unicode/In/Katakana.pl b/contrib/perl5/lib/unicode/In/Katakana.pl
deleted file mode 100644
index 2976d25..0000000
--- a/contrib/perl5/lib/unicode/In/Katakana.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-30A0 30FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Khmer.pl b/contrib/perl5/lib/unicode/In/Khmer.pl
deleted file mode 100644
index 6a85224..0000000
--- a/contrib/perl5/lib/unicode/In/Khmer.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1780 17FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Lao.pl b/contrib/perl5/lib/unicode/In/Lao.pl
deleted file mode 100644
index fdddd86..0000000
--- a/contrib/perl5/lib/unicode/In/Lao.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0E80 0EFF
-END
diff --git a/contrib/perl5/lib/unicode/In/Latin-1Supplement.pl b/contrib/perl5/lib/unicode/In/Latin-1Supplement.pl
deleted file mode 100644
index 6a901fb..0000000
--- a/contrib/perl5/lib/unicode/In/Latin-1Supplement.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0080 00FF
-END
diff --git a/contrib/perl5/lib/unicode/In/LatinExtended-A.pl b/contrib/perl5/lib/unicode/In/LatinExtended-A.pl
deleted file mode 100644
index a042350..0000000
--- a/contrib/perl5/lib/unicode/In/LatinExtended-A.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0100 017F
-END
diff --git a/contrib/perl5/lib/unicode/In/LatinExtended-B.pl b/contrib/perl5/lib/unicode/In/LatinExtended-B.pl
deleted file mode 100644
index b7106c6..0000000
--- a/contrib/perl5/lib/unicode/In/LatinExtended-B.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0180 024F
-END
diff --git a/contrib/perl5/lib/unicode/In/LatinExtendedAdditional.pl b/contrib/perl5/lib/unicode/In/LatinExtendedAdditional.pl
deleted file mode 100644
index e17cc3d..0000000
--- a/contrib/perl5/lib/unicode/In/LatinExtendedAdditional.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1E00 1EFF
-END
diff --git a/contrib/perl5/lib/unicode/In/LetterlikeSymbols.pl b/contrib/perl5/lib/unicode/In/LetterlikeSymbols.pl
deleted file mode 100644
index c2249a7..0000000
--- a/contrib/perl5/lib/unicode/In/LetterlikeSymbols.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2100 214F
-END
diff --git a/contrib/perl5/lib/unicode/In/LowSurrogates.pl b/contrib/perl5/lib/unicode/In/LowSurrogates.pl
deleted file mode 100644
index 025bd13..0000000
--- a/contrib/perl5/lib/unicode/In/LowSurrogates.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-DC00 DFFF
-END
diff --git a/contrib/perl5/lib/unicode/In/Malayalam.pl b/contrib/perl5/lib/unicode/In/Malayalam.pl
deleted file mode 100644
index 5a01d40..0000000
--- a/contrib/perl5/lib/unicode/In/Malayalam.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0D00 0D7F
-END
diff --git a/contrib/perl5/lib/unicode/In/MathematicalOperators.pl b/contrib/perl5/lib/unicode/In/MathematicalOperators.pl
deleted file mode 100644
index 8b45e18..0000000
--- a/contrib/perl5/lib/unicode/In/MathematicalOperators.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2200 22FF
-END
diff --git a/contrib/perl5/lib/unicode/In/MiscellaneousSymbols.pl b/contrib/perl5/lib/unicode/In/MiscellaneousSymbols.pl
deleted file mode 100644
index cc5b02f..0000000
--- a/contrib/perl5/lib/unicode/In/MiscellaneousSymbols.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2600 26FF
-END
diff --git a/contrib/perl5/lib/unicode/In/MiscellaneousTechnical.pl b/contrib/perl5/lib/unicode/In/MiscellaneousTechnical.pl
deleted file mode 100644
index a1058a0..0000000
--- a/contrib/perl5/lib/unicode/In/MiscellaneousTechnical.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2300 23FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Mongolian.pl b/contrib/perl5/lib/unicode/In/Mongolian.pl
deleted file mode 100644
index 98a4914..0000000
--- a/contrib/perl5/lib/unicode/In/Mongolian.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1800 18AF
-END
diff --git a/contrib/perl5/lib/unicode/In/Myanmar.pl b/contrib/perl5/lib/unicode/In/Myanmar.pl
deleted file mode 100644
index 3aa2f41..0000000
--- a/contrib/perl5/lib/unicode/In/Myanmar.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1000 109F
-END
diff --git a/contrib/perl5/lib/unicode/In/NumberForms.pl b/contrib/perl5/lib/unicode/In/NumberForms.pl
deleted file mode 100644
index 2a606a6..0000000
--- a/contrib/perl5/lib/unicode/In/NumberForms.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2150 218F
-END
diff --git a/contrib/perl5/lib/unicode/In/Ogham.pl b/contrib/perl5/lib/unicode/In/Ogham.pl
deleted file mode 100644
index de320a9..0000000
--- a/contrib/perl5/lib/unicode/In/Ogham.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1680 169F
-END
diff --git a/contrib/perl5/lib/unicode/In/OpticalCharacterRecognition.pl b/contrib/perl5/lib/unicode/In/OpticalCharacterRecognition.pl
deleted file mode 100644
index 7f0aff8..0000000
--- a/contrib/perl5/lib/unicode/In/OpticalCharacterRecognition.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2440 245F
-END
diff --git a/contrib/perl5/lib/unicode/In/Oriya.pl b/contrib/perl5/lib/unicode/In/Oriya.pl
deleted file mode 100644
index 771a245..0000000
--- a/contrib/perl5/lib/unicode/In/Oriya.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0B00 0B7F
-END
diff --git a/contrib/perl5/lib/unicode/In/PrivateUse.pl b/contrib/perl5/lib/unicode/In/PrivateUse.pl
deleted file mode 100644
index 0b0c004..0000000
--- a/contrib/perl5/lib/unicode/In/PrivateUse.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-E000 F8FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Runic.pl b/contrib/perl5/lib/unicode/In/Runic.pl
deleted file mode 100644
index 52ca7aa..0000000
--- a/contrib/perl5/lib/unicode/In/Runic.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-16A0 16FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Sinhala.pl b/contrib/perl5/lib/unicode/In/Sinhala.pl
deleted file mode 100644
index 5a892fd..0000000
--- a/contrib/perl5/lib/unicode/In/Sinhala.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0D80 0DFF
-END
diff --git a/contrib/perl5/lib/unicode/In/SmallFormVariants.pl b/contrib/perl5/lib/unicode/In/SmallFormVariants.pl
deleted file mode 100644
index 148e6e8..0000000
--- a/contrib/perl5/lib/unicode/In/SmallFormVariants.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-FE50 FE6F
-END
diff --git a/contrib/perl5/lib/unicode/In/SpacingModifierLetters.pl b/contrib/perl5/lib/unicode/In/SpacingModifierLetters.pl
deleted file mode 100644
index 0e31fea..0000000
--- a/contrib/perl5/lib/unicode/In/SpacingModifierLetters.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-02B0 02FF
-END
diff --git a/contrib/perl5/lib/unicode/In/Specials.pl b/contrib/perl5/lib/unicode/In/Specials.pl
deleted file mode 100644
index 03f69a3..0000000
--- a/contrib/perl5/lib/unicode/In/Specials.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-FFF0 FFFD
-END
diff --git a/contrib/perl5/lib/unicode/In/SuperscriptsandSubscripts.pl b/contrib/perl5/lib/unicode/In/SuperscriptsandSubscripts.pl
deleted file mode 100644
index b0f90cd..0000000
--- a/contrib/perl5/lib/unicode/In/SuperscriptsandSubscripts.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2070 209F
-END
diff --git a/contrib/perl5/lib/unicode/In/Syriac.pl b/contrib/perl5/lib/unicode/In/Syriac.pl
deleted file mode 100644
index f85f1a9..0000000
--- a/contrib/perl5/lib/unicode/In/Syriac.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0700 074F
-END
diff --git a/contrib/perl5/lib/unicode/In/Tamil.pl b/contrib/perl5/lib/unicode/In/Tamil.pl
deleted file mode 100644
index 71fa923..0000000
--- a/contrib/perl5/lib/unicode/In/Tamil.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0B80 0BFF
-END
diff --git a/contrib/perl5/lib/unicode/In/Telugu.pl b/contrib/perl5/lib/unicode/In/Telugu.pl
deleted file mode 100644
index ff09b1e..0000000
--- a/contrib/perl5/lib/unicode/In/Telugu.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0C00 0C7F
-END
diff --git a/contrib/perl5/lib/unicode/In/Thaana.pl b/contrib/perl5/lib/unicode/In/Thaana.pl
deleted file mode 100644
index f88768c..0000000
--- a/contrib/perl5/lib/unicode/In/Thaana.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0780 07BF
-END
diff --git a/contrib/perl5/lib/unicode/In/Thai.pl b/contrib/perl5/lib/unicode/In/Thai.pl
deleted file mode 100644
index e77c0c5..0000000
--- a/contrib/perl5/lib/unicode/In/Thai.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0E00 0E7F
-END
diff --git a/contrib/perl5/lib/unicode/In/Tibetan.pl b/contrib/perl5/lib/unicode/In/Tibetan.pl
deleted file mode 100644
index 35436b3..0000000
--- a/contrib/perl5/lib/unicode/In/Tibetan.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0F00 0FFF
-END
diff --git a/contrib/perl5/lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl b/contrib/perl5/lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl
deleted file mode 100644
index 83c6a78..0000000
--- a/contrib/perl5/lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1400 167F
-END
diff --git a/contrib/perl5/lib/unicode/In/YiRadicals.pl b/contrib/perl5/lib/unicode/In/YiRadicals.pl
deleted file mode 100644
index 7350871..0000000
--- a/contrib/perl5/lib/unicode/In/YiRadicals.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-A490 A4CF
-END
diff --git a/contrib/perl5/lib/unicode/In/YiSyllables.pl b/contrib/perl5/lib/unicode/In/YiSyllables.pl
deleted file mode 100644
index baa038e..0000000
--- a/contrib/perl5/lib/unicode/In/YiSyllables.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-A000 A48F
-END
diff --git a/contrib/perl5/lib/unicode/Index.txt b/contrib/perl5/lib/unicode/Index.txt
deleted file mode 100644
index 1ebeea6..0000000
--- a/contrib/perl5/lib/unicode/Index.txt
+++ /dev/null
@@ -1,3055 +0,0 @@
-8859-1 (Latin-1), Based on ISO 00A0
-8859-2, -3, -4, -9 (European Latin), Based on ISO 0100
-8859-5 (Cyrillic), Based on ISO 0400
-8859-6 (Arabic), Based on ISO 0600
-8859-7 (Greek), Based on ISO 0370
-8859-8 (Hebrew), Based on ISO 05D0
-a, latin small letter script 0251
-A, LATIN SMALL LETTER TURNED 0250
-ABBREVIATION MARK, ARMENIAN 055F
-ABBREVIATION SIGN, DEVANAGARI 0970
-Abbreviations, Squared Latin 3371
-Aboriginal Syllabics, Unified Canadian 1400
-ABOVE RIGHT, COMBINING COMMA 0315
-above, cedilla 0312
-ABOVE, COMBINING ALMOST EQUAL TO 034C
-ABOVE, COMBINING BRIDGE 0346
-ABOVE, COMBINING CLOCKWISE ARROW 20D5
-ABOVE, COMBINING COMMA 0313
-ABOVE, COMBINING DOT 0307
-ABOVE, COMBINING DOUBLE VERTICAL LINE 030E
-ABOVE, COMBINING FOUR DOTS 20DC
-ABOVE, COMBINING HOMOTHETIC 034B
-ABOVE, COMBINING HOOK 0309
-ABOVE, COMBINING LEFT ANGLE 031A
-ABOVE, COMBINING LEFT ARROW 20D6
-ABOVE, COMBINING LEFT HARPOON 20D0
-ABOVE, COMBINING LEFT RIGHT ARROW 20E1
-ABOVE, COMBINING NOT TILDE 034A
-ABOVE, COMBINING REVERSED COMMA 0314
-ABOVE, COMBINING RING 030A
-ABOVE, COMBINING THREE DOTS 20DB
-ABOVE, COMBINING TURNED COMMA 0312
-ABOVE, COMBINING VERTICAL LINE 030D
-ABOVE, COMBINING X 033D
-ABOVE, DOT 02D9
-above, double dot 0308
-ABOVE, RING 02DA
-above, vee 030C
-ACCENT BELOW, COMBINING ACUTE 0317
-ACCENT BELOW, COMBINING CIRCUMFLEX 032D
-ACCENT BELOW, COMBINING GRAVE 0316
-ACCENT, ACUTE 00B4
-ACCENT, CIRCUMFLEX 005E
-ACCENT, COMBINING ACUTE 0301
-ACCENT, COMBINING CIRCUMFLEX 0302
-ACCENT, COMBINING DOUBLE ACUTE 030B
-ACCENT, COMBINING DOUBLE GRAVE 030F
-ACCENT, COMBINING GRAVE 0300
-ACCENT, DOUBLE ACUTE 02DD
-ACCENT, GRAVE 0060
-ACCENT, MODIFIER LETTER ACUTE 02CA
-ACCENT, MODIFIER LETTER CIRCUMFLEX 02C6
-ACCENT, MODIFIER LETTER CROSS 02DF
-ACCENT, MODIFIER LETTER GRAVE 02CB
-ACCENT, MODIFIER LETTER LOW ACUTE 02CF
-ACCENT, MODIFIER LETTER LOW GRAVE 02CE
-accent, swedish grave 02DF
-ACCOUNT OF 2100
-acknowledge 0006
-acknowledge, graphic for negative 237B
-acknowledge, negative 0015
-ACKNOWLEDGE, SYMBOL FOR 2406
-ACKNOWLEDGE, SYMBOL FOR NEGATIVE 2415
-ACTIVATE ARABIC FORM SHAPING 206D
-ACTIVATE SYMMETRIC SWAPPING 206B
-ACUTE ACCENT 00B4
-ACUTE ACCENT BELOW, COMBINING 0317
-ACUTE ACCENT, COMBINING 0301
-ACUTE ACCENT, COMBINING DOUBLE 030B
-ACUTE ACCENT, DEVANAGARI 0954
-ACUTE ACCENT, DOUBLE 02DD
-ACUTE ACCENT, MODIFIER LETTER 02CA
-ACUTE ACCENT, MODIFIER LETTER LOW 02CF
-ACUTE TONE MARK, COMBINING 0341
-acute, spacing 00B4
-ADDRESSED TO THE SUBJECT 2101
-AE, LATIN SMALL LETTER 00E6
-AIRPLANE 2708
-aldus leaf 2766
-ALEF SYMBOL 2135
-ALL AROUND-PROFILE 232E
-ALL EQUAL TO 224C
-ALL, FOR 2200
-ALMOST EQUAL TO 2248
-ALMOST EQUAL TO ABOVE, COMBINING 034C
-ALPHA, LATIN SMALL LETTER 0251
-ALPHA, LATIN SMALL LETTER TURNED 0252
-Alphabetic Presentation Forms FB00
-Alphanumerics, Enclosed 2460
-alternating current 223F
-ALTERNATIVE KEY SYMBOL 2387
-ALVEOLAR CLICK, LATIN LETTER 01C2
-AMPERSAND 0026
-AND, CURLY LOGICAL 22CF
-AND, LOGICAL 2227
-AND, N-ARY LOGICAL 22C0
-ANGLE 2220
-ANGLE ABOVE, COMBINING LEFT 031A
-angle arc 2222
-ANGLE BELOW, COMBINING LEFT 0349
-ANGLE BRACKET, LEFT 3008
-ANGLE BRACKET, LEFT DOUBLE 300A
-ANGLE BRACKET, LEFT-POINTING 2329
-ANGLE BRACKET, RIGHT-POINTING 232A
-ANGLE QUOTATION MARK, LEFT-POINTING DOUBLE 00AB
-ANGLE QUOTATION MARK, RIGHT-POINTING DOUBLE 00BB
-ANGLE QUOTATION MARK, SINGLE LEFT-POINTING 2039
-ANGLE QUOTATION MARK, SINGLE RIGHT-POINTING 203A
-ANGLE WITH ARC, RIGHT 22BE
-ANGLE, MEASURED 2221
-ANGLE, RIGHT 221F
-ANGLE, SPHERICAL 2222
-angled dash 00AC
-ANGSTROM SIGN 212B
-ANKH 2625
-Annotation Signs, Koranic 06D6
-Annotation, Interlinear FFF9
-Annotation, Kanbun Ideographic 3190
-APL 2336
-APL Functional Symbols 2336
-apl jot 2218
-apl overbar 00AF
-apl quote 0022
-apl stile 2223
-apl tilde 223C
-apl upstile 2308
-APOSTROPHE 0027
-apostrophe 02BC
-apostrophe 2019
-APOSTROPHE, ARMENIAN 055A
-APOSTROPHE, MODIFIER LETTER 02BC
-APOSTROPHE, MODIFIER LETTER DOUBLE 02EE
-apostrophe-quote 0027
-application program command 009F
-APPROACHES THE LIMIT 2250
-APPROXIMATELY EQUAL TO 2245
-approximately equal to 2257
-AQUARIUS 2652
-Arabic 0600
-ARABIC COMMA 060C
-ARABIC DECIMAL SEPARATOR 066B
-ARABIC FIVE POINTED STAR 066D
-ARABIC FORM SHAPING, ACTIVATE 206D
-ARABIC FORM SHAPING, INHIBIT 206C
-ARABIC FULL STOP 06D4
-Arabic Letters 0627
-ARABIC PERCENT SIGN 066A
-Arabic Points 064B
-Arabic Presentation Forms-A FB50
-Arabic Presentation Forms-B FE70
-ARABIC QUESTION MARK 061F
-ARABIC SEMICOLON 061B
-ARABIC THOUSANDS SEPARATOR 066C
-Arabic, Extended 0671
-Arabic-Indic Digits 0660
-Arabic-Indic Digits for Persian and Urdu, Eastern 06F0
-ARC 2312
-arc, angle 2222
-ARC, RIGHT ANGLE WITH 22BE
-ARCH BELOW, COMBINING INVERTED DOUBLE 032B
-Arcs 25DC
-area, end of guarded 0097
-area, end of selected 0087
-area, start of guarded 0096
-area, start of selected 0086
-ARIES 2648
-Armenian 0530
-ARMENIAN ABBREVIATION MARK 055F
-ARMENIAN APOSTROPHE 055A
-Armenian Capital Letters 0531
-ARMENIAN COMMA 055D
-ARMENIAN EMPHASIS MARK 055B
-ARMENIAN EXCLAMATION MARK 055C
-ARMENIAN FULL STOP 0589
-ARMENIAN HYPHEN 058A
-Armenian Ligatures FB13
-ARMENIAN QUESTION MARK 055E
-Armenian Small Letters 0561
-ARROW ABOVE, COMBINING CLOCKWISE 20D5
-ARROW ABOVE, COMBINING LEFT 20D6
-ARROW ABOVE, COMBINING LEFT RIGHT 20E1
-ARROW BELOW, COMBINING DOUBLE RIGHTWARDS 0362
-ARROW BELOW, COMBINING LEFT RIGHT 034D
-ARROW BELOW, COMBINING UPWARDS 034E
-Arrow Dingbats 2794
-ARROW, ELECTRIC 2301
-ARROWHEAD, UP 2303
-Arrowheads, Modifier Letter 02C2
-Arrows 2190
-ASCENDING NODE 260A
-ASCII 0020
-ASCII C0 Control Codes 0000
-ASCII Digits 0030
-ASCII Variants, Fullwidth FF01
-ash 00E6
-ASSERTION 22A6
-ASTERISK 002A
-Asterisk Dingbats 2722
-ASTERISK OPERATOR 2217
-ASTERISK OPERATOR, CIRCLED 229B
-Asterisks and Snowflakes, Stars, 2721
-ASTERISM 2042
-Astrological Symbols 263D
-asymptotic to 2248
-ASYMPTOTICALLY EQUAL TO 2243
-AT, COMMERCIAL 0040
-B, LATIN LETTER SMALL CAPITAL 0299
-B, SCRIPT CAPITAL 212C
-baby gamma, latin small letter 0264
-backslash 005C
-BACKSLASH, COMBINING ENCLOSING CIRCLE 20E0
-backspace 0008
-BACKSPACE, SYMBOL FOR 2408
-backward difference 2207
-BAHT, THAI CURRENCY SYMBOL 0E3F
-BALLOT BOX 2610
-BALLOT BOX WITH CHECK 2611
-BALLOT BOX WITH X 2612
-BALLOT X 2717
-BALLOT X, HEAVY 2718
-bang 0021
-Bar Dingbats, Vertical 2758
-bar, broken vertical 00A6
-BAR, HORIZONTAL 2015
-bar, vertical 007C
-barred o, latin capital letter 019F
-BARRED O, LATIN SMALL LETTER 0275
-Basic Latin, C0 Controls and 0000
-Basic Russian Alphabet 0410
-BEAMED EIGHTH NOTES 266B
-BEAMED SIXTEENTH NOTES 266C
-BECAUSE 2235
-beginning of line 2310
-bell 0007
-BELL SYMBOL 237E
-BELL, SYMBOL FOR 2407
-BELOW, COMBINING ACUTE ACCENT 0317
-BELOW, COMBINING BREVE 032E
-BELOW, COMBINING BRIDGE 032A
-BELOW, COMBINING CARON 032C
-BELOW, COMBINING CIRCUMFLEX ACCENT 032D
-BELOW, COMBINING COMMA 0326
-BELOW, COMBINING DIAERESIS 0324
-BELOW, COMBINING DOT 0323
-BELOW, COMBINING DOUBLE RIGHTWARDS ARROW 0362
-BELOW, COMBINING DOUBLE VERTICAL LINE 0348
-BELOW, COMBINING EQUALS SIGN 0347
-BELOW, COMBINING GRAVE ACCENT 0316
-BELOW, COMBINING INVERTED BREVE 032F
-BELOW, COMBINING INVERTED BRIDGE 033A
-BELOW, COMBINING INVERTED DOUBLE ARCH 032B
-BELOW, COMBINING LEFT ANGLE 0349
-BELOW, COMBINING LEFT HALF RING 031C
-BELOW, COMBINING LEFT RIGHT ARROW 034D
-BELOW, COMBINING LEFT TACK 0318
-BELOW, COMBINING MACRON 0331
-BELOW, COMBINING MINUS SIGN 0320
-BELOW, COMBINING PALATALIZED HOOK 0321
-BELOW, COMBINING PLUS SIGN 031F
-BELOW, COMBINING RETROFLEX HOOK 0322
-BELOW, COMBINING RIGHT HALF RING 0339
-BELOW, COMBINING RING 0325
-BELOW, COMBINING SEAGULL 033C
-BELOW, COMBINING SQUARE 033B
-BELOW, COMBINING TILDE 0330
-BELOW, COMBINING UP TACK 031D
-BELOW, COMBINING UPWARDS ARROW 034E
-BELOW, COMBINING VERTICAL LINE 0329
-below, greek non-spacing iota 0345
-Bengali 0980
-Bengali Currency Signs 09F2
-Bengali Digits 09E6
-Bengali Letters 0985
-BENGALI RUPEE MARK 09F2
-BENGALI RUPEE SIGN 09F3
-BENZENE RING 232C
-bernoulli function 212C
-BET SYMBOL 2136
-Betty BOOP
-BETWEEN 226C
-BIDENTAL PERCUSSIVE, LATIN LETTER 02AD
-Bidirectional Formatting Controls 202A
-Big 5, Duplicates from FA0C
-BILABIAL CLICK, LATIN LETTER 0298
-BILABIAL PERCUSSIVE, LATIN LETTER 02AC
-BIOHAZARD SIGN 2623
-BLACK LEFT POINTING INDEX 261A
-BLACK LEFTWARDS BULLET 204C
-BLACK LENTICULAR BRACKET, LEFT 3010
-BLACK NIB 2712
-BLACK PARALLELOGRAM 25B0
-BLACK SCISSORS 2702
-black small circle 2022
-BLACK SMILING FACE 263B
-BLACK STAR 2605
-BLACK SUN WITH RAYS 2600
-BLACK TELEPHONE 260E
-BLACK-LETTER CAPITAL C 212D
-BLACK-LETTER CAPITAL H 210C
-BLACK-LETTER CAPITAL I 2111
-BLACK-LETTER CAPITAL R 211C
-BLACK-LETTER CAPITAL Z 2128
-BLANK SYMBOL 2422
-Block Elements 2580
-block, end of transmission 0017
-BLOCK, SYMBOL FOR END OF TRANSMISSION 2417
-bom FEFF
-Bopomofo Extended for Minnan and Hakka, Chinese 31A0
-Bopomofo, Chinese 3100
-BOWTIE 22C8
-Box Drawing 2500
-BOX WITH CHECK, BALLOT 2611
-BOX WITH X, BALLOT 2612
-BOX, BALLOT 2610
-BOX, OPEN 2423
-BOX, SHOULDERED OPEN 237D
-BOX, X IN A RECTANGLE 2327
-bra 2329
-brace, closing 007D
-brace, opening 007B
-BRACKET WITH QUILL, LEFT SQUARE 2045
-bracket, closing curly 007D
-bracket, closing square 005D
-BRACKET, LEFT ANGLE 3008
-BRACKET, LEFT BLACK LENTICULAR 3010
-BRACKET, LEFT CORNER 300C
-BRACKET, LEFT CURLY 007B
-BRACKET, LEFT DOUBLE ANGLE 300A
-BRACKET, LEFT SQUARE 005B
-BRACKET, LEFT TORTOISE SHELL 3014
-BRACKET, LEFT WHITE CORNER 300E
-BRACKET, LEFT WHITE LENTICULAR 3016
-BRACKET, LEFT WHITE SQUARE 301A
-BRACKET, LEFT WHITE TORTOISE SHELL 3018
-BRACKET, LEFT-POINTING ANGLE 2329
-bracket, opening curly 007B
-bracket, opening square 005B
-BRACKET, RIGHT CURLY 007D
-BRACKET, RIGHT SQUARE 005D
-Braille Patterns 2800
-brazilian currency 20A2
-break here, no 0083
-break permitted here 0082
-breathing, rough 0314
-breathing, smooth 0313
-BREVE 02D8
-BREVE BELOW, COMBINING 032E
-BREVE BELOW, COMBINING INVERTED 032F
-BREVE, COMBINING 0306
-BREVE, COMBINING DOUBLE INVERTED 0361
-BREVE, COMBINING INVERTED 0311
-BRIDGE ABOVE, COMBINING 0346
-BRIDGE BELOW, COMBINING 032A
-BRIDGE BELOW, COMBINING INVERTED 033A
-broken vertical bar 00A6
-BULLET 2022
-BULLET OPERATOR 2219
-BULLET, BLACK LEFTWARDS 204C
-BULLET, HYPHEN 2043
-BULLET, REVERSED ROTATED FLORAL HEART 2619
-bullet, tainome (japanese, a kind of) 25C9
-BULLET, TRIANGULAR 2023
-BULLET, WHITE 25E6
-BULLSEYE 25CE
-bullseye, latin letter 0298
-by definition, equal to 225C
-BY DEFINITION, EQUAL TO 225D
-BY, MEASURED 225E
-byte order mark FEFF
-C, BLACK-LETTER CAPITAL 212D
-C, DOUBLE-STRUCK CAPITAL 2102
-C, LATIN LETTER STRETCHED 0297
-C0 Controls and Basic Latin 0000
-C1 Controls and Latin-1 Supplement 0080
-CADA UNA 2106
-CADUCEUS 2624
-Canadian Aboriginal Syllabics, Unified 1400
-cancel 0018
-cancel character 0094
-CANCEL, SYMBOL FOR 2418
-CANCER 264B
-CANDRABINDU, COMBINING 0310
-Cantillation Marks, Hebrew 0591
-cap 2229
-CAP, SQUARE 2293
-Capital Letters, Armenian 0531
-Capital Letters, Cyrillic 0401
-Capital Letters, Georgian 10A0
-Capital Letters, Greek 0391
-Capital Letters, Latin 0041
-CAPRICORN 2651
-caps lock 21EA
-caps lock 21EC
-Card Suits, Playing 2660
-cardinal (countable), first transfinite 2135
-cardinal (functions of a real variable), third transfinite 2137
-cardinal (the continuum), second transfinite 2136
-CARE OF 2105
-caret 028C
-CARET 2038
-CARET INSERTION POINT 2041
-CARON 02C7
-CARON BELOW, COMBINING 032C
-CARON, COMBINING 030C
-carriage return 000D
-carriage return 21B5
-CARRIAGE RETURN, SYMBOL FOR 240D
-CAUTION SIGN 2621
-CEDILLA 00B8
-cedilla above 0312
-CEDILLA, COMBINING 0327
-cedilla, spacing 00B8
-CEILING, LEFT 2308
-CELSIUS, DEGREE 2103
-CENT SIGN 00A2
-centigrade, degrees 2103
-CENTRE LINE SYMBOL 2104
-CENTRED LEFT HALF RING, MODIFIER LETTER 02D3
-CENTRELINE LOW LINE FE4E
-CENTRELINE OVERLINE FE4A
-character introducer, single 009A
-character tabulation set 0088
-character tabulation with justification 0089
-CHARACTER TIE 2040
-Chart Components, Form and 2500
-CHECK MARK 2713
-CHECK MARK, HEAVY 2714
-CHECK MARK, NOT 237B
-CHECK, BALLOT BOX WITH 2611
-Cherokee 13A0
-Chess Pieces 2654
-chevrons 00AB
-CHI RHO 2627
-Chinese Bopomofo 3100
-Chinese Bopomofo Extended for Minnan and Hakka 31A0
-CIRCLE BACKSLASH, COMBINING ENCLOSING 20E0
-CIRCLE, BLACK 25CF
-circle, black small 2022
-CIRCLE, COMBINING ENCLOSING 20DD
-circle, jis composition 20DD
-CIRCLE, LARGE 25EF
-CIRCLED ASTERISK OPERATOR 229B
-CIRCLED DASH 229D
-CIRCLED DIGIT ZERO 24EA
-Circled Digits, Dingbat 2776
-CIRCLED DIVISION SLASH 2298
-CIRCLED DOT OPERATOR 2299
-CIRCLED EQUALS 229C
-Circled Ideographs 3280
-Circled Inverse Numbers 2776
-Circled Japanese Katakana 32D0
-Circled Korean Hangul Elements 3260
-Circled Korean Hangul Syllables 326E
-Circled Latin Letters 24B6
-CIRCLED MINUS 2296
-Circled Numbers 2460
-CIRCLED PLUS 2295
-CIRCLED POSTAL MARK 3036
-CIRCLED RING OPERATOR 229A
-CIRCLED TIMES 2297
-Circles 25CB
-CIRCUMFLEX ACCENT 005E
-CIRCUMFLEX ACCENT BELOW, COMBINING 032D
-CIRCUMFLEX ACCENT, COMBINING 0302
-CIRCUMFLEX ACCENT, MODIFIER LETTER 02C6
-circumflex, spacing 005E
-CJK Compatibility 3300
-CJK Compatibility Forms FE30
-CJK Compatibility Ideographs F900
-CJK Compatibility Ideographs, IBM FA0E
-CJK Ideographs Area 3400
-CJK Letters and Ideographs, Enclosed 3200
-CJK Phonetics and Symbols Area 2E00
-CJK Radicals Supplement 2E80
-CJK Symbols and Punctuation 3000
-CJK Unified Ideographs 4E00
-CJK Unified Ideographs Extension A 3400
-clear key 2327
-CLEAR SCREEN SYMBOL 239A
-clear weather 2600
-CLICK, LATIN LETTER ALVEOLAR 01C2
-CLICK, LATIN LETTER BILABIAL 0298
-CLICK, LATIN LETTER DENTAL 01C0
-CLICK, LATIN LETTER LATERAL 01C1
-CLICK, LATIN LETTER RETROFLEX 01C3
-CLOCKWISE ARROW ABOVE, COMBINING 20D5
-CLOCKWISE CONTOUR INTEGRAL 2232
-CLOCKWISE INTEGRAL 2231
-CLOCKWISE RING OVERLAY, COMBINING 20D9
-clone 2104
-Clones of Diacritics, Spacing 02D8
-closed epsilon, latin small letter 029A
-CLOSED OMEGA, LATIN SMALL LETTER 0277
-CLOSED OPEN E, LATIN SMALL LETTER 029A
-closed reversed epsilon, latin small letter 025E
-CLOSED REVERSED OPEN E, LATIN SMALL LETTER 025E
-closing brace 007D
-closing curly bracket 007D
-CLOSING MARK, IDEOGRAPHIC 3006
-closing parenthesis 0029
-closing square bracket 005D
-CLOUD 2601
-cloudy weather 2601
-COLON 003A
-COLON EQUALS 2254
-COLON SIGN 20A1
-COLON, ETHIOPIC 1365
-COLON, MODIFIER LETTER HALF TRIANGULAR 02D1
-COLON, MODIFIER LETTER TRIANGULAR 02D0
-COLON, MONGOLIAN 1804
-COMBINING ACUTE ACCENT 0301
-COMBINING ACUTE ACCENT BELOW 0317
-COMBINING ACUTE TONE MARK 0341
-COMBINING ALMOST EQUAL TO ABOVE 034C
-Combining Alphabet, Korean Hangul Jamo 1100
-COMBINING BREVE 0306
-COMBINING BREVE BELOW 032E
-COMBINING BRIDGE ABOVE 0346
-COMBINING BRIDGE BELOW 032A
-COMBINING CANDRABINDU 0310
-COMBINING CARON 030C
-COMBINING CARON BELOW 032C
-COMBINING CEDILLA 0327
-Combining Characters, Cyrillic 0483
-COMBINING CIRCUMFLEX ACCENT 0302
-COMBINING CIRCUMFLEX ACCENT BELOW 032D
-COMBINING CLOCKWISE ARROW ABOVE 20D5
-COMBINING CLOCKWISE RING OVERLAY 20D9
-COMBINING COMMA ABOVE 0313
-COMBINING COMMA ABOVE RIGHT 0315
-COMBINING COMMA BELOW 0326
-Combining Diacritical Marks 0300
-Combining Diacritical Marks for Symbols 20D0
-COMBINING DIAERESIS 0308
-COMBINING DIAERESIS BELOW 0324
-COMBINING DOT ABOVE 0307
-COMBINING DOT BELOW 0323
-COMBINING DOUBLE ACUTE ACCENT 030B
-COMBINING DOUBLE GRAVE ACCENT 030F
-COMBINING DOUBLE INVERTED BREVE 0361
-COMBINING DOUBLE LOW LINE 0333
-COMBINING DOUBLE OVERLINE 033F
-COMBINING DOUBLE RIGHTWARDS ARROW BELOW 0362
-COMBINING DOUBLE TILDE 0360
-COMBINING DOUBLE TILDE LEFT HALF FE22
-COMBINING DOUBLE VERTICAL LINE ABOVE 030E
-COMBINING DOUBLE VERTICAL LINE BELOW 0348
-COMBINING DOWN TACK BELOW 031E
-COMBINING ENCLOSING CIRCLE 20DD
-COMBINING ENCLOSING CIRCLE BACKSLASH 20E0
-COMBINING ENCLOSING DIAMOND 20DF
-COMBINING ENCLOSING KEYCAP 20E3
-COMBINING ENCLOSING SCREEN 20E2
-COMBINING ENCLOSING SQUARE 20DE
-COMBINING EQUALS SIGN BELOW 0347
-COMBINING FOUR DOTS ABOVE 20DC
-COMBINING GRAVE ACCENT 0300
-COMBINING GRAVE ACCENT BELOW 0316
-COMBINING GRAVE TONE MARK 0340
-COMBINING GREEK DIALYTIKA TONOS 0344
-COMBINING GREEK KORONIS 0343
-COMBINING GREEK PERISPOMENI 0342
-COMBINING GREEK YPOGEGRAMMENI 0345
-combining hacek 030C
-Combining Half Marks FE20
-COMBINING HOMOTHETIC ABOVE 034B
-COMBINING HOOK ABOVE 0309
-COMBINING HORN 031B
-COMBINING INVERTED BREVE 0311
-COMBINING INVERTED BREVE BELOW 032F
-COMBINING INVERTED BRIDGE BELOW 033A
-COMBINING INVERTED DOUBLE ARCH BELOW 032B
-COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK 3099
-COMBINING LEFT ANGLE ABOVE 031A
-COMBINING LEFT ANGLE BELOW 0349
-COMBINING LEFT ARROW ABOVE 20D6
-COMBINING LEFT HALF RING BELOW 031C
-COMBINING LEFT HARPOON ABOVE 20D0
-COMBINING LEFT RIGHT ARROW ABOVE 20E1
-COMBINING LEFT RIGHT ARROW BELOW 034D
-COMBINING LEFT TACK BELOW 0318
-COMBINING LIGATURE LEFT HALF FE20
-COMBINING LONG SOLIDUS OVERLAY 0338
-COMBINING LONG STROKE OVERLAY 0336
-COMBINING LONG VERTICAL LINE OVERLAY 20D2
-COMBINING LOW LINE 0332
-COMBINING MACRON 0304
-COMBINING MACRON BELOW 0331
-COMBINING MINUS SIGN BELOW 0320
-COMBINING NOT TILDE ABOVE 034A
-COMBINING OGONEK 0328
-COMBINING OVERLINE 0305
-COMBINING PALATALIZED HOOK BELOW 0321
-COMBINING PLUS SIGN BELOW 031F
-COMBINING RETROFLEX HOOK BELOW 0322
-COMBINING REVERSED COMMA ABOVE 0314
-COMBINING RIGHT HALF RING BELOW 0339
-COMBINING RING ABOVE 030A
-COMBINING RING BELOW 0325
-COMBINING RING OVERLAY 20D8
-COMBINING SEAGULL BELOW 033C
-COMBINING SHORT SOLIDUS OVERLAY 0337
-COMBINING SHORT STROKE OVERLAY 0335
-COMBINING SHORT VERTICAL LINE OVERLAY 20D3
-COMBINING SQUARE BELOW 033B
-COMBINING THREE DOTS ABOVE 20DB
-COMBINING TILDE 0303
-COMBINING TILDE BELOW 0330
-COMBINING TILDE OVERLAY 0334
-COMBINING TURNED COMMA ABOVE 0312
-COMBINING UP TACK BELOW 031D
-COMBINING UPWARDS ARROW BELOW 034E
-COMBINING VERTICAL LINE ABOVE 030D
-COMBINING VERTICAL LINE BELOW 0329
-COMBINING VERTICAL TILDE 033E
-COMBINING X ABOVE 033D
-COMET 2604
-COMMA 002C
-COMMA ABOVE RIGHT, COMBINING 0315
-COMMA ABOVE, COMBINING 0313
-COMMA ABOVE, COMBINING REVERSED 0314
-COMMA ABOVE, COMBINING TURNED 0312
-COMMA BELOW, COMBINING 0326
-comma quotation mark, double 201D
-comma quotation mark, double reversed 201F
-comma quotation mark, double turned 201C
-comma quotation mark, low double 201E
-comma quotation mark, low single 201A
-comma quotation mark, single 2019
-comma quotation mark, single reversed 201B
-comma quotation mark, single turned 2018
-COMMA, ARABIC 060C
-COMMA, ARMENIAN 055D
-COMMA, ETHIOPIC 1363
-comma, georgian 00B7
-COMMA, IDEOGRAPHIC 3001
-COMMA, MODIFIER LETTER REVERSED 02BD
-COMMA, MODIFIER LETTER TURNED 02BB
-COMMA, MONGOLIAN 1802
-command key 2318
-command, application program 009F
-command, operating system 009D
-COMMERCIAL AT 0040
-compass 263C
-Compatibility and Specials Area F900
-Compatibility Forms, CJK FE30
-Compatibility Ideographs, CJK F900
-Compatibility Ideographs, IBM CJK FA0E
-Compatibility Jamo, Korean Hangul 3130
-Compatibility, CJK 3300
-COMPLEMENT 2201
-complex numbers, the set of 2102
-Components, Form and Chart 2500
-composite function 2218
-composition circle, jis 20DD
-COMPOSITION SYMBOL 2384
-conductance 2127
-CONICAL TAPER 2332
-CONJUGATE MATRIX, HERMITIAN 22B9
-conjunction 2227
-CONJUNCTION 260C
-CONTAINS AS MEMBER 220B
-CONTAINS AS MEMBER, SMALL 220D
-CONTAINS AS NORMAL SUBGROUP 22B3
-CONTINUOUS UNDERLINE SYMBOL 2381
-continuum, second transfinite cardinal 2136
-CONTOUR INTEGRAL 222E
-CONTOUR INTEGRAL, CLOCKWISE 2232
-Control Code Graphics 25F0
-Control Codes, ASCII C0 0000
-Control Codes, C1 0080
-Control Codes, Graphic Pictures for 2400
-Control Codes, Graphics for 237B
-control sequence introducer 009B
-control string, device 0090
-control, graphic for 2388
-Control, Syriac Format 070F
-Controls and Basic Latin, C0 0000
-Controls and Latin-1 Supplement, C1 0080
-Controls, Bidirectional Formatting 202A
-Controls, Mongolian Format 180B
-COPRODUCT, N-ARY 2210
-Coptic, Greek and 0370
-Coptic-unique Letters 03E2
-COPYRIGHT SIGN 00A9
-COPYRIGHT, SOUND RECORDING 2117
-CORNER BRACKET, LEFT 300C
-CORNER BRACKET, LEFT WHITE 300E
-CORNER, TOP LEFT 231C
-CORPORATION, SQUARE 337F
-CORRESPONDS TO 2258
-corresponds to 2259
-costa rican currency 20A1
-countable, first transfinite cardinal 2135
-COUNTERBORE 2334
-COUNTERSINK 2335
-cr 000D
-CRESCENT, STAR AND 262A
-Croatian Digraphs Matching Serbian Cyrillic Letters 01C4
-Croatian, Additions for Slovenian and 0200
-CROP, TOP LEFT 230F
-CROSS ACCENT, MODIFIER LETTER 02DF
-Cross Dingbats 2719
-CROSS OF JERUSALEM 2629
-CROSS OF LORRAINE 2628
-cross ratio 211E
-CROSS, EAST SYRIAC 2671
-CROSS, LATIN 271D
-cross, long 2020
-CROSS, MALTESE 2720
-CROSS, ORTHODOX 2626
-cross, st. andrew's 2613
-CROSS, WEST SYRIAC 2670
-CROSSBONES, SKULL AND 2620
-crosshatch 0023
-CRUZEIRO SIGN 20A2
-CUBE ROOT 221B
-cubed 00B3
-cup 222A
-CUP, SQUARE 2294
-curly bracket, closing 007D
-CURLY BRACKET, LEFT 007B
-curly bracket, opening 007B
-CURLY BRACKET, RIGHT 007D
-CURLY LOGICAL AND 22CF
-CURLY LOGICAL OR 22CE
-CURRENCY SIGN 00A4
-Currency Signs, Bengali 09F2
-CURRENCY SYMBOL BAHT, THAI 0E3F
-currency symbol, florin 0192
-Currency Symbols 20A0
-currency, brazilian 20A2
-currency, costa rican 20A1
-currency, el salvadorian 20A1
-currency, euro european 20AC
-currency, french 20A3
-currency, greek 20AF
-currency, hebrew 20AA
-currency, indian 20A8
-currency, israeli 20AA
-currency, italian 20A4
-currency, korean 20A9
-currency, laotian 20AD
-currency, mongolian 20AE
-currency, nigerian 20A6
-currency, spanish 20A7
-currency, turkish 20A4
-currency, vietnamese 20AB
-CURRENT SYMBOL FORM TWO, DIRECT 2393
-current, alternating 223F
-cycle 223C
-CYLINDRICITY 232D
-Cyrillic 0400
-Cyrillic Capital Letters 0401
-Cyrillic Combining Characters 0483
-Cyrillic Extensions 0450
-Cyrillic Historic Letters 0460
-Cyrillic Small Letters 0430
-Cyrillic, Extended 048C
-d retroflex hook, latin small letter 0256
-D WITH TAIL, LATIN SMALL LETTER 0256
-D, LATIN CAPITAL LETTER AFRICAN 0189
-DAGGER 2020
-DAGGER, DOUBLE 2021
-DALET SYMBOL 2138
-DANDA, DEVANAGARI 0964
-DANDA, DEVANAGARI DOUBLE 0965
-dash, angled 00AC
-DASH, CIRCLED 229D
-DASH, EM 2014
-DASH, EN 2013
-DASH, FIGURE 2012
-dash, long 2015
-dash, quotation 2015
-dash, swung 007E
-DASH, WAVE 301C
-DASH, WAVY 3030
-DASHED LOW LINE FE4D
-DASHED OVERLINE FE49
-Dashes 2010
-dasia 0314
-data link escape 0010
-DATA LINK ESCAPE, SYMBOL FOR 2410
-DAVID, STAR OF 2721
-Days, Telegraph Symbols for 33E0
-decimal point 002E
-decimal separator 002C
-DECIMAL SEPARATOR KEY SYMBOL 2396
-DECIMAL SEPARATOR, ARABIC 066B
-definition, equal to by 225C
-DEFINITION, EQUAL TO BY 225D
-DEGREE CELSIUS 2103
-DEGREE FAHRENHEIT 2109
-DEGREE SIGN 00B0
-degrees centigrade 2103
-degrees kelvin 212A
-del 2207
-delete 007F
-DELETE FORM TWO, SYMBOL FOR 2425
-delete to the left key 232B
-delete to the right key 2326
-DELETE, SYMBOL FOR 2421
-delete, undoable 2425
-DELTA EQUAL TO 225C
-DELTA, LATIN SMALL LETTER TURNED 018D
-DENTAL CLICK, LATIN LETTER 01C0
-depth symbol 21A7
-derivative 0307
-derivative, double 0308
-derivative, fourth 20DC
-derivative, third 20DB
-DESCENDING NODE 260B
-Description Characters, Ideographic 2FF0
-Devanagari 0900
-DEVANAGARI DANDA 0964
-Devanagari Digits 0966
-DEVANAGARI DOUBLE DANDA 0965
-Devanagari Letters 0905
-DEVANAGARI OM 0950
-device control four 0014
-DEVICE CONTROL FOUR, SYMBOL FOR 2414
-device control one 0011
-DEVICE CONTROL ONE, SYMBOL FOR 2411
-device control string 0090
-device control three 0013
-DEVICE CONTROL THREE, SYMBOL FOR 2413
-device control two 0012
-DEVICE CONTROL TWO, SYMBOL FOR 2412
-DHARMA, WHEEL OF 2638
-Diacritic-vowel Combinations, Pinyin 01CD
-Diacritical Marks for Symbols, Combining 20D0
-Diacritical Marks, Combining 0300
-Diacritics for Greek 0342
-Diacritics for IPA 0346
-Diacritics, Double 0360
-Diacritics, Enclosing 20DD
-Diacritics, Overstruck 0334
-Diacritics, Spacing Clones of 02D8
-DIAERESIS 00A8
-DIAERESIS BELOW, COMBINING 0324
-DIAERESIS, COMBINING 0308
-diaeresis, spacing 00A8
-DIAGONAL ELLIPSIS, UP RIGHT 22F0
-dialytika 0308
-DIALYTIKA TONOS, COMBINING GREEK 0344
-DIAMETER SIGN 2300
-diameter symbol 2205
-DIAMOND OPERATOR 22C4
-DIAMOND, COMBINING ENCLOSING 20DF
-Diamonds 25C6
-diesis 2021
-difference between 223C
-DIFFERENCE BETWEEN 224F
-difference, backward 2207
-difference, forward 2206
-difference, symmetric 2238
-difference, symmetric 2296
-DIFFERENTIAL, PARTIAL 2202
-DIGIT SHAPES, NATIONAL 206E
-DIGIT SHAPES, NOMINAL 206F
-Digits for Persian and Urdu, Eastern Arabic-Indic 06F0
-Digits, Arabic-Indic 0660
-Digits, ASCII 0030
-Digits, Bengali 09E6
-Digits, Devanagari 0966
-Digits, Dingbat Circled 2776
-Digits, Ethiopic 1369
-Digits, Gujarati 0AE6
-Digits, Gurmukhi 0A66
-Digits, Kannada 0CE6
-Digits, Khmer 17E0
-Digits, Lao 0ED0
-Digits, Malayalam 0D66
-Digits, Mongolian 1810
-Digits, Myanmar 1040
-Digits, Oriya 0B66
-Digits, Subscript 2080
-Digits, Superscript 2070
-Digits, Tamil 0BE7
-Digits, Telugu 0C66
-Digits, Thai 0E50
-Digits, Tibetan 0F20
-Digraphs Matching Serbian Cyrillic Letters, Croatian 01C4
-Digraphs, Phonetic 02A3
-Digraphs, Yiddish 05F0
-DIMENSION ORIGIN 2331
-Dingbat Circled Digits 2776
-Dingbats 2700
-Dingbats Series 100, ITC Zapf 2700
-Dingbats, Arrow 2794
-Dingbats, Asterisk 2722
-Dingbats, Cross 2719
-Dingbats, Drop-Shadowed 274D
-Dingbats, Hazard 2620
-Dingbats, Heart 2763
-Dingbats, Miscellaneous 2600
-Dingbats, Music 2669
-Dingbats, Pencil 270E
-Dingbats, Pointing Index Finger 261A
-Dingbats, Quotation Mark 275B
-Dingbats, Scissors 2701
-Dingbats, Snowflake 2744
-Dingbats, Star 2726
-Dingbats, Vertical Bar 2758
-Dingbats, Warning 2620
-Dingbats, Weather 2600
-Dingbats, Zapf 2700
-DIRECT CURRENT SYMBOL FORM TWO 2393
-direct product 2299
-direct sum 2295
-Directional Formatting Controls 202A
-DIRECTIONAL FORMATTING, POP 202C
-DISCONTINUOUS UNDERLINE SYMBOL 2382
-discretionary hyphen 00AD
-disjunction 2228
-DITTO MARK 3003
-DIVIDES 2223
-DIVISION SIGN 00F7
-DIVISION SLASH 2215
-DIVISION SLASH, CIRCLED 2298
-DIVISION TIMES 22C7
-does not yield 22A3
-DOLLAR SIGN 0024
-DONG SIGN 20AB
-dot 002E
-DOT ABOVE 02D9
-DOT ABOVE, COMBINING 0307
-dot above, double 0308
-DOT ABOVE, LATIN CAPITAL LETTER I WITH 0130
-DOT BELOW, COMBINING 0323
-DOT MINUS 2238
-DOT OPERATOR 22C5
-DOT OPERATOR, CIRCLED 2299
-DOT OPERATOR, SQUARED 22A1
-DOT PLUS 2214
-dot, greek middle 00B7
-DOT, KATAKANA MIDDLE 30FB
-DOT, MIDDLE 00B7
-DOTLESS I, LATIN SMALL LETTER 0131
-DOTS ABOVE, COMBINING FOUR 20DC
-DOTS ABOVE, COMBINING THREE 20DB
-DOUBLE ACUTE ACCENT 02DD
-DOUBLE ACUTE ACCENT, COMBINING 030B
-DOUBLE ANGLE BRACKET, LEFT 300A
-DOUBLE ANGLE QUOTATION MARK, LEFT-POINTING 00AB
-DOUBLE ANGLE QUOTATION MARK, RIGHT-POINTING 00BB
-DOUBLE APOSTROPHE, MODIFIER LETTER 02EE
-DOUBLE ARCH BELOW, COMBINING INVERTED 032B
-double bar, latin letter pipe 01C2
-double comma quotation mark 201D
-double comma quotation mark, low 201E
-DOUBLE DAGGER 2021
-DOUBLE DANDA, DEVANAGARI 0965
-double derivative 0308
-Double Diacritics 0360
-double dot above 0308
-DOUBLE EXCLAMATION MARK 203C
-DOUBLE GRAVE ACCENT, COMBINING 030F
-DOUBLE HIGH-REVERSED-9 QUOTATION MARK 201F
-DOUBLE INTEGRAL 222C
-DOUBLE INTERSECTION 22D2
-DOUBLE INVERTED BREVE, COMBINING 0361
-DOUBLE LOW LINE 2017
-DOUBLE LOW LINE, COMBINING 0333
-DOUBLE LOW-9 QUOTATION MARK 201E
-double obelisk 2021
-DOUBLE OVERLINE, COMBINING 033F
-double pipe 01C1
-DOUBLE PRIME 2033
-DOUBLE PRIME QUOTATION MARK 301E
-DOUBLE PRIME QUOTATION MARK, LOW 301F
-DOUBLE PRIME QUOTATION MARK, REVERSED 301D
-DOUBLE PRIME, MODIFIER LETTER 02BA
-DOUBLE PRIME, REVERSED 2036
-DOUBLE QUOTATION MARK, LEFT 201C
-DOUBLE QUOTATION MARK, RIGHT 201D
-double reversed comma quotation mark 201F
-DOUBLE RIGHTWARDS ARROW BELOW, COMBINING 0362
-DOUBLE SUBSET 22D0
-DOUBLE SUPERSET 22D1
-DOUBLE TILDE LEFT HALF, COMBINING FE22
-DOUBLE TILDE, COMBINING 0360
-double turned comma quotation mark 201C
-double underline 0333
-double underscore 0333
-double underscore, spacing 2017
-DOUBLE UNION 22D3
-DOUBLE VERTICAL LINE 2016
-DOUBLE VERTICAL LINE ABOVE, COMBINING 030E
-DOUBLE VERTICAL LINE BELOW, COMBINING 0348
-DOUBLE WAVY OVERLINE FE4C
-double-barred pipe 01C2
-DOUBLE-STRUCK CAPITAL C 2102
-DOUBLE-STRUCK CAPITAL H 210D
-DOUBLE-STRUCK CAPITAL N 2115
-DOUBLE-STRUCK CAPITAL P 2119
-DOUBLE-STRUCK CAPITAL Q 211A
-DOUBLE-STRUCK CAPITAL R 211D
-DOUBLE-STRUCK CAPITAL Z 2124
-DOWN TACK 22A4
-DOWN TACK BELOW, COMBINING 031E
-down, page 21DF
-DRACHMA SIGN 20AF
-dram 0292
-drop 264F
-Duplicates from Big 5 FA0C
-E, LATIN CAPITAL LETTER OPEN 0190
-E, LATIN CAPITAL LETTER REVERSED 018E
-e, latin capital letter turned 018E
-E, LATIN SMALL LETTER CLOSED OPEN 029A
-E, LATIN SMALL LETTER CLOSED REVERSED OPEN 025E
-E, LATIN SMALL LETTER OPEN 025B
-E, LATIN SMALL LETTER REVERSED 0258
-E, LATIN SMALL LETTER REVERSED OPEN 025C
-E, LATIN SMALL LETTER TURNED 01DD
-E, SCRIPT CAPITAL 2130
-E, SCRIPT SMALL 212F
-EARTH 2641
-Eastern Arabic-Indic Digits for Persian and Urdu 06F0
-ecu 20A0
-EIGHTH NOTE 266A
-EIGHTH NOTES, BEAMED 266B
-Eighths, Fractions 215B
-EK ONKAR, GURMUKHI 0A74
-el salvadorian currency 20A1
-ELECTRIC ARROW 2301
-electro-magnetic force, emf 2130
-electrolysis 21AF
-Electrotechnical Symbols from IR 181 238D
-ELEMENT OF 2208
-ELEMENT OF, NOT AN 2209
-ELEMENT OF, SMALL 220A
-element, unique 2129
-ELLIPSIS, HORIZONTAL 2026
-ELLIPSIS, MIDLINE HORIZONTAL 22EF
-ELLIPSIS, UP RIGHT DIAGONAL 22F0
-ELLIPSIS, VERTICAL 22EE
-elliptic function, weierstrass 2118
-EM DASH 2014
-EM QUAD 2001
-EM SPACE 2003
-EMBEDDING, LEFT-TO-RIGHT 202A
-EMBEDDING, RIGHT-TO-LEFT 202B
-emf 2130
-EMPHASIS MARK, ARMENIAN 055B
-EMPHASIS SYMBOL 2383
-EMPTY SET 2205
-EN DASH 2013
-EN QUAD 2000
-EN SPACE 2002
-Enclosed Alphanumerics 2460
-Enclosed CJK Letters and Ideographs 3200
-ENCLOSING CIRCLE BACKSLASH, COMBINING 20E0
-ENCLOSING CIRCLE, COMBINING 20DD
-Enclosing Diacritics 20DD
-ENCLOSING DIAMOND, COMBINING 20DF
-ENCLOSING KEYCAP, COMBINING 20E3
-ENCLOSING SCREEN, COMBINING 20E2
-ENCLOSING SQUARE, COMBINING 20DE
-end 21F2
-end of guarded area 0097
-end of medium 0019
-end of medium, graphic for 237F
-END OF MEDIUM, SYMBOL FOR 2419
-END OF PROOF 220E
-end of selected area 0087
-end of text 0003
-END OF TEXT, SYMBOL FOR 2403
-end of transmission 0004
-end of transmission block 0017
-END OF TRANSMISSION BLOCK, SYMBOL FOR 2417
-end of transmission, graphic for 2301
-END OF TRANSMISSION, SYMBOL FOR 2404
-ENG, LATIN SMALL LETTER 014B
-enotikon, greek 203F
-enquiry 0005
-ENQUIRY, SYMBOL FOR 2405
-enter key 2324
-ENTER SYMBOL 2386
-ENVELOPE 2709
-epsilon, latin capital letter 0190
-epsilon, latin small letter 025B
-epsilon, latin small letter closed 029A
-epsilon, latin small letter closed reversed 025E
-epsilon, reversed straight 220D
-epsilon, straight 220A
-EQUAL TO ABOVE, COMBINING ALMOST 034C
-equal to by definition 225C
-EQUAL TO BY DEFINITION 225D
-EQUAL TO, ALL 224C
-EQUAL TO, ALMOST 2248
-EQUAL TO, APPROXIMATELY 2245
-equal to, approximately 2257
-EQUAL TO, ASYMPTOTICALLY 2243
-EQUAL TO, DELTA 225C
-EQUAL TO, GEOMETRICALLY 2251
-EQUAL TO, GREATER-THAN OR 2265
-EQUAL TO, LESS-THAN OR 2264
-EQUAL TO, NOT 2260
-EQUAL TO, QUESTIONED 225F
-EQUAL TO, RING 2257
-EQUAL TO, RING IN 2256
-EQUALS COLON 2255
-EQUALS SIGN 003D
-EQUALS SIGN BELOW, COMBINING 0347
-EQUALS SIGN, SUBSCRIPT 208C
-EQUALS SIGN, SUPERSCRIPT 207C
-EQUALS, CIRCLED 229C
-EQUALS, REVERSED TILDE 22CD
-EQUALS, STAR 225B
-equiangular 225C
-EQUIANGULAR TO 225A
-EQUIVALENT TO 224D
-EQUIVALENT TO, GEOMETRICALLY 224E
-EQUIVALENT TO, STRICTLY 2263
-Era Names, Japanese 337B
-ERASE TO THE LEFT 232B
-ERASE TO THE RIGHT 2326
-error 212F
-escape 001B
-escape, data link 0010
-ESCAPE, SYMBOL FOR 241B
-ESCAPE, SYMBOL FOR DATA LINK 2410
-escudo 0024
-ESH LOOP, LATIN LETTER REVERSED 01AA
-ESH, LATIN CAPITAL LETTER 01A9
-ESH, LATIN SMALL LETTER 0283
-ESH, LATIN SMALL LETTER SQUAT REVERSED 0285
-ESTIMATED SYMBOL 212E
-ESTIMATES 2259
-eszett 00DF
-ET, TIRONIAN SIGN 204A
-ETH, LATIN SMALL LETTER 00F0
-ethel 0153
-Ethiopic 1200
-ETHIOPIC COLON 1365
-ETHIOPIC COMMA 1363
-Ethiopic Digits 1369
-ETHIOPIC FULL STOP 1362
-ETHIOPIC QUESTION MARK 1367
-ETHIOPIC SEMICOLON 1364
-ETHIOPIC WORDSPACE 1361
-EULER CONSTANT 2107
-EURO SIGN 20AC
-European Latin 0100
-european paragraph sign 00A7
-european section sign 00B6
-EXCESS 2239
-EXCLAMATION MARK 0021
-EXCLAMATION MARK ORNAMENT, HEAVY 2762
-EXCLAMATION MARK, ARMENIAN 055C
-EXCLAMATION MARK, DOUBLE 203C
-EXCLAMATION MARK, INVERTED 00A1
-exclamation mark, latin letter 01C3
-EXCLAMATION MARK, QUESTION 2048
-EXCLAMATION QUESTION MARK 2049
-EXISTS, THERE 2203
-Extended Additional, Latin 1E00
-Extended Arabic 0671
-Extended Cyrillic 048C
-Extended for Minnan and Hakka, Chinese Bopomofo 31A0
-Extended Greek 1F00
-Extended-A, Latin 0100
-Extended-B, Latin 0180
-Extension A, CJK Unified Ideographs 3400
-Extensions for Sanskrit and Tibetan, Mongolian 1880
-Extensions for Vietnamese, Latin 1EA0
-Extensions, Cyrillic 0450
-Extensions, IPA 0250
-EZH REVERSED, LATIN SMALL LETTER 01B9
-EZH, LATIN CAPITAL LETTER 01B7
-EZH, LATIN SMALL LETTER 0292
-F WITH HOOK, LATIN SMALL LETTER 0192
-F, SCRIPT CAPITAL 2131
-F, TURNED CAPITAL 2132
-FACE, BLACK SMILING 263B
-FACE, POSTAL MARK 3020
-FACE, WHITE FROWNING 2639
-FACE, WHITE SMILING 263A
-factorial 0021
-FAHRENHEIT, DEGREE 2109
-feet 2032
-FEMALE SIGN 2640
-FEMININE ORDINAL INDICATOR 00AA
-Fifths, Fractions 2155
-FIGURE DASH 2012
-FIGURE SPACE 2007
-file separator 001C
-FILE SEPARATOR, SYMBOL FOR 241C
-Finger Dingbats, Pointing Index 261A
-FIRST QUARTER MOON 263D
-first transfinite cardinal (countable) 2135
-FISHEYE 25C9
-fist 261E
-FIVE POINTED STAR, ARABIC 066D
-FIVE, LATIN SMALL LETTER TONE 01BD
-FLAT SIGN, MUSIC 266D
-FLOOR, LEFT 230A
-FLORAL HEART BULLET, REVERSED ROTATED 2619
-florin currency symbol 0192
-folder 0192
-FOR ALL 2200
-FORCES 22A9
-Form and Chart Components 2500
-form feed 000C
-form feed 21A1
-FORM FEED, SYMBOL FOR 240C
-Format Control, Syriac 070F
-Format Controls, Mongolian 180B
-Formatting Characters 200C
-Formatting Characters 2028
-Formatting Controls, Bidirectional 202A
-FORMATTING, POP DIRECTIONAL 202C
-forward difference 2206
-FOUR DOTS ABOVE, COMBINING 20DC
-FOUR-PER-EM SPACE 2005
-fourier transform 2131
-fourth derivative 20DC
-FOURTH ROOT 221C
-fourth transfinite cardinal 2138
-Fourths, Fractions 00BC
-FRACTION NUMERATOR ONE 215F
-FRACTION ONE HALF, VULGAR 00BD
-FRACTION ONE QUARTER, VULGAR 00BC
-FRACTION SLASH 2044
-FRACTION THREE QUARTERS, VULGAR 00BE
-Fractions 2153
-FRANC SIGN, FRENCH 20A3
-FRICATIVE, LATIN LETTER PHARYNGEAL VOICED 0295
-FROWN 2322
-FROWNING FACE, WHITE 2639
-FULL BLOCK 2588
-FULL STOP 002E
-FULL STOP, ARABIC 06D4
-FULL STOP, ARMENIAN 0589
-FULL STOP, ETHIOPIC 1362
-full stop, georgian 0589
-FULL STOP, IDEOGRAPHIC 3002
-FULL STOP, MONGOLIAN 1803
-Fullwidth ASCII Variants FF01
-Fullwidth Forms, Halfwidth and FF00
-Fullwidth Symbol Variants FFE0
-function symbol 0192
-function, gamma 0393
-G, LATIN LETTER SMALL CAPITAL 0262
-G, LATIN SMALL LETTER SCRIPT 0261
-G, SCRIPT SMALL 210A
-gamma function 0393
-GAMMA, LATIN CAPITAL LETTER 0194
-GAMMA, LATIN SMALL LETTER 0263
-gamma, latin small letter baby 0264
-GAMMA, MODIFIER LETTER SMALL 02E0
-GB 2312 (Chinese), Based on 3100
-GEMINI 264A
-General Punctuation 2000
-General Scripts Area 0000
-GEOMETRIC PROPORTION 223A
-Geometric Shapes 25A0
-GEOMETRICALLY EQUAL TO 2251
-GEOMETRICALLY EQUIVALENT TO 224E
-Georgian 10A0
-Georgian Capital Letters 10A0
-georgian comma 00B7
-georgian full stop 0589
-GEORGIAN PARAGRAPH SEPARATOR 10FB
-Georgian Small Letters 10D0
-german mark 2133
-GETA MARK 3013
-GIMEL SYMBOL 2137
-glottal stop 02BC
-GLOTTAL STOP, LATIN LETTER 0294
-GLOTTAL STOP, LATIN LETTER INVERTED 0296
-glottal stop, latin letter reversed 0295
-GLOTTAL STOP, MODIFIER LETTER 02C0
-GLOTTAL STOP, MODIFIER LETTER REVERSED 02C1
-GLOTTAL STOP, MODIFIER LETTER SMALL REVERSED 02E4
-Golden Number Runes 16EE
-Graphic Pictures for Control Codes 2400
-Graphics for Control Codes 237B
-Graphics, Control Code 25F0
-GRAVE ACCENT 0060
-GRAVE ACCENT BELOW, COMBINING 0316
-GRAVE ACCENT, COMBINING 0300
-GRAVE ACCENT, COMBINING DOUBLE 030F
-GRAVE ACCENT, DEVANAGARI 0953
-GRAVE ACCENT, MODIFIER LETTER 02CB
-GRAVE ACCENT, MODIFIER LETTER LOW 02CE
-grave accent, swedish 02DF
-GRAVE TONE MARK, COMBINING 0340
-grave, spacing 0060
-GREATER-THAN OR EQUAL TO 2265
-GREATER-THAN SIGN 003E
-GREATER-THAN, MUCH 226B
-GREATER-THAN, VERY MUCH 22D9
-Greek and Coptic 0370
-Greek Capital Letters 0391
-greek currency 20AF
-GREEK DIALYTIKA TONOS, COMBINING 0344
-greek enotikon 203F
-GREEK KORONIS, COMBINING 0343
-greek middle dot 00B7
-greek non-spacing iota below 0345
-GREEK PERISPOMENI, COMBINING 0342
-GREEK QUESTION MARK 037E
-GREEK SMALL LETTER IOTA, TURNED 2129
-Greek Small Letters 03B1
-Greek Symbols 03D0
-GREEK YPOGEGRAMMENI, COMBINING 0345
-Greek, Diacritics for 0342
-Greek, Extended 1F00
-group lock 21F0
-group separator 001D
-GROUP SEPARATOR, SYMBOL FOR 241D
-guarded area, end of 0097
-guarded area, start of 0096
-guillemet, left pointing 00AB
-guillemet, left pointing single 2039
-guillemet, right pointing 00BB
-guillemet, right pointing single 203A
-Gujarati 0A80
-Gujarati Digits 0AE6
-Gujarati Letters 0A85
-Gurmukhi 0A00
-Gurmukhi Digits 0A66
-Gurmukhi Letters 0A05
-H, BLACK-LETTER CAPITAL 210C
-H, DOUBLE-STRUCK CAPITAL 210D
-H, LATIN LETTER SMALL CAPITAL 029C
-H, LATIN SMALL LETTER TURNED 0265
-H, MODIFIER LETTER SMALL 02B0
-H, SCRIPT CAPITAL 210B
-hacek, combining 030C
-hacek, modifier letter 02C7
-HAIR SPACE 200A
-Hakka, Chinese Bopomofo Extended for Minnan and 31A0
-halant, bengali 09CD
-halant, devanagari 094D
-HALF FILL SPACE, IDEOGRAPHIC 303F
-HALF INTEGRAL, TOP 2320
-Half Marks, Combining FE20
-HALF RING BELOW, COMBINING LEFT 031C
-HALF RING BELOW, COMBINING RIGHT 0339
-HALF RING, MODIFIER LETTER CENTRED LEFT 02D3
-HALF RING, MODIFIER LETTER LEFT 02BF
-HALF TRIANGULAR COLON, MODIFIER LETTER 02D1
-HALF, COMBINING DOUBLE TILDE LEFT FE22
-HALF, COMBINING LIGATURE LEFT FE20
-HALF, VULGAR FRACTION ONE 00BD
-Halfwidth and Fullwidth Forms FF00
-Halfwidth Japanese Katakana Variants FF61
-Halfwidth Korean Hangul Variants FFA0
-hamiltonian function 210B
-HAMMER AND SICKLE 262D
-Han Ideographs 4E00
-Hand Symbols, Pointing 261A
-HAND, VICTORY 270C
-HAND, WRITING 270D
-HANGUL CHOSEONG FILLER 115F
-Hangul Compatibility Jamo, Korean 3130
-Hangul Elements, Circled Korean 3260
-Hangul Elements, Parenthesized Korean 3200
-HANGUL FILLER 3164
-Hangul Jamo Combining Alphabet, Korean 1100
-HANGUL JUNGSEONG FILLER 1160
-Hangul Syllables Area, Korean AC00
-Hangul Syllables, Circled Korean 326E
-Hangul Syllables, Parenthesized Korean 320E
-Hangul Variants, Halfwidth Korean FFA0
-Hangul, Based on KS C 5601 (Korean) 3130
-Hangzhou-style Numerals 3021
-HARPOON ABOVE, COMBINING LEFT 20D0
-hash 0023
-hat 0302
-hat 2229
-have a nice day! 263A
-Hazard Dingbats 2620
-heading, start of 0001
-HEADING, SYMBOL FOR START OF 2401
-Heart Ornaments 2763
-HEAVY BALLOT X 2718
-HEAVY CHECK MARK 2714
-HEAVY MULTIPLICATION X 2716
-Hebrew 0590
-Hebrew Cantillation Marks 0591
-hebrew currency 20AA
-Hebrew Letters 05D0
-Hebrew Points 05B0
-Hebrew Presentation Forms FB1D
-HELM SYMBOL 2388
-HERMITIAN CONJUGATE MATRIX 22B9
-High Surrogates D800
-HIGH-REVERSED-9 QUOTATION MARK, DOUBLE 201F
-HIGH-REVERSED-9 QUOTATION MARK, SINGLE 201B
-higher rank than 227B
-hilbert space 210C
-HIRAGANA ITERATION MARK 309D
-Hiragana, Based on JIS X 0208 (Japanese) 3040
-histogram marker 25AE
-Historic Letters, Cyrillic 0460
-home 21B8
-home 21F1
-HOMOTHETIC 223B
-HOMOTHETIC ABOVE, COMBINING 034B
-HOOK ABOVE, COMBINING 0309
-HOOK BELOW, COMBINING PALATALIZED 0321
-HOOK BELOW, COMBINING RETROFLEX 0322
-HOOK, MODIFIER LETTER RHOTIC 02DE
-hook, nasal 0328
-HORIZONTAL BAR 2015
-HORIZONTAL ELLIPSIS 2026
-HORIZONTAL ELLIPSIS, MIDLINE 22EF
-horizontal tabulation 0009
-HORIZONTAL TABULATION, SYMBOL FOR 2409
-HORN, COMBINING 031B
-HORN, LATIN SMALL LETTER RAMS 0264
-HOT SPRINGS 2668
-HOURGLASS 231B
-Hours, Telegraph Symbols for 3358
-HOUSE 2302
-HV, LATIN SMALL LETTER 0195
-HWAIR, LATIN CAPITAL LETTER 01F6
-HYPHEN 2010
-HYPHEN BULLET 2043
-hyphen or minus sign 002D
-HYPHEN, ARMENIAN 058A
-hyphen, discretionary 00AD
-HYPHEN, NON-BREAKING 2011
-HYPHEN, SOFT 00AD
-HYPHEN-MINUS 002D
-HYPHENATION POINT 2027
-hyphus 002D
-HYSTERESIS SYMBOL 238E
-I WITH DOT ABOVE, LATIN CAPITAL LETTER 0130
-I, BLACK-LETTER CAPITAL 2111
-I, LATIN LETTER SMALL CAPITAL 026A
-I, LATIN SMALL LETTER DOTLESS 0131
-I, SCRIPT CAPITAL 2110
-IBM CJK Compatibility Ideographs FA0E
-IDENTICAL TO 2261
-Ideographic Annotation, Japanese Kanbun 3190
-IDEOGRAPHIC CLOSING MARK 3006
-IDEOGRAPHIC COMMA 3001
-Ideographic Description Characters 2FF0
-IDEOGRAPHIC FULL STOP 3002
-IDEOGRAPHIC HALF FILL SPACE 303F
-IDEOGRAPHIC ITERATION MARK 3005
-IDEOGRAPHIC NUMBER ZERO 3007
-IDEOGRAPHIC SPACE 3000
-Ideographic Tone Marks 302A
-Ideographs Area, CJK 3400
-Ideographs Extension A, CJK Unified 3400
-Ideographs, Circled 3280
-Ideographs, CJK Compatibility F900
-Ideographs, CJK Unified 4E00
-Ideographs, Enclosed CJK Letters and 3200
-Ideographs, Han 4E00
-Ideographs, IBM CJK Compatibility FA0E
-Ideographs, Parenthesized 3220
-IDLE, SYMBOL FOR SYNCHRONOUS 2416
-idle, synchronous 0016
-IJ, LATIN SMALL LIGATURE 0133
-IMAGE OF 22B7
-IMAGE OF, SQUARE 228F
-imaginary part 2111
-implies 22A2
-inches 2033
-included in set 2282
-includes in set 2283
-incorporated, japanese 337F
-INCREMENT 2206
-index 0084
-Index Finger Dingbats, Pointing 261A
-indian currency 20A8
-inferior order to, of 2134
-INFINITY 221E
-INFORMATION SOURCE 2139
-INHIBIT ARABIC FORM SHAPING 206C
-INHIBIT SYMMETRIC SWAPPING 206A
-INSERTION POINT, CARET 2041
-INSERTION SYMBOL 2380
-integers, the set of 2124
-INTEGRAL 222B
-INTEGRAL, CLOCKWISE 2231
-INTEGRAL, CLOCKWISE CONTOUR 2232
-INTEGRAL, CONTOUR 222E
-INTEGRAL, DOUBLE 222C
-integral, riemann 211B
-INTEGRAL, SURFACE 222F
-INTEGRAL, TOP HALF 2320
-INTEGRAL, TRIPLE 222D
-INTEGRAL, VOLUME 2230
-INTERCALATE 22BA
-Interlinear Annotation FFF9
-International Phonetic Alphabet 0250
-INTERROBANG 203D
-INTERSECTION 2229
-INTERSECTION, DOUBLE 22D2
-INTERSECTION, N-ARY 22C2
-intersection, proper 22D4
-introducer, control sequence 009B
-introducer, single character 009A
-Inverse Numbers, Circled 2776
-INVERTED BREVE BELOW, COMBINING 032F
-INVERTED BREVE, COMBINING 0311
-INVERTED BREVE, COMBINING DOUBLE 0361
-INVERTED BRIDGE BELOW, COMBINING 033A
-INVERTED DOUBLE ARCH BELOW, COMBINING 032B
-INVERTED EXCLAMATION MARK 00A1
-INVERTED GLOTTAL STOP, LATIN LETTER 0296
-INVERTED LAZY S 223E
-INVERTED OHM SIGN 2127
-INVERTED QUESTION MARK 00BF
-INVERTED R, LATIN LETTER SMALL CAPITAL 0281
-INVERTED R, MODIFIER LETTER SMALL CAPITAL 02B6
-iota below, greek non-spacing 0345
-IOTA, LATIN CAPITAL LETTER 0196
-IOTA, LATIN SMALL LETTER 0269
-IOTA, TURNED GREEK SMALL LETTER 2129
-IPA Extensions 0250
-IPA, Diacritics for 0346
-IR 181, Electrotechnical Symbols from 238D
-iran, symbol of 262B
-irish punt 00A3
-ISCII 1988 (Devanagari), Based on 0901
-ISO 8859-1 (Latin-1), Based on 00A0
-ISO 8859-2, -3, -4, -9 (European Latin), Based on 0100
-ISO 8859-5 (Cyrillic), Based on 0400
-ISO 8859-6 (Arabic), Based on 0600
-ISO 8859-7 (Greek), Based on 0370
-ISO 8859-8 (Hebrew), Based on 05D0
-ISO 9995-7, Keyboard Symbols from 2380
-ISO 9995-7, Keyboard Symbols from 2396
-israeli currency 20AA
-italian currency 20A4
-ITC Zapf Dingbats Series 100 2700
-ITERATION MARK, HIRAGANA 309D
-ITERATION MARK, IDEOGRAPHIC 3005
-ITERATION MARK, KATAKANA 30FD
-ivy leaf 2767
-J, MODIFIER LETTER SMALL 02B2
-jack 2749
-Jamo Combining Alphabet, Korean Hangul 1100
-Jamo, Korean Hangul Compatibility 3130
-Japanese Era Names 337B
-Japanese Hiragana 3040
-japanese incorporated 337F
-JAPANESE INDUSTRIAL STANDARD SYMBOL 3004
-Japanese Kanbun (Ideographic Annotation) 3190
-Japanese Katakana 30A0
-Japanese Katakana Variants, Halfwidth FF61
-Japanese Katakana Words, Squared 3300
-Japanese Katakana, Circled 32D0
-japanese kome 203B
-JERUSALEM, CROSS OF 2629
-jis composition circle 20DD
-JIS X 0208, Based on 3040
-JOINER, ZERO WIDTH 200D
-jot, apl 2218
-JUPITER 2643
-justification, character tabulation with 0089
-K, LATIN SMALL LETTER TURNED 029E
-kabusiki-gaisya 337F
-Kana Repeat Marks 3031
-Kanbun (Ideographic Annotation), Japanese 3190
-Kangxi Radicals 2F00
-Kannada 0C80
-Kannada Digits 0CE6
-Kannada Letters 0C85
-KATAKANA ITERATION MARK 30FD
-KATAKANA MIDDLE DOT 30FB
-Katakana Variants, Halfwidth Japanese FF61
-Katakana Words, Squared Japanese 3300
-Katakana, Circled Japanese 32D0
-Katakana, Japanese 30A0
-KATAKANA-HIRAGANA PROLONGED SOUND MARK 30FC
-KATAKANA-HIRAGANA VOICED SOUND MARK 309B
-KATAKANA-HIRAGANA VOICED SOUND MARK, COMBINING 3099
-KELVIN SIGN 212A
-ket 232A
-KEY SYMBOL, ALTERNATIVE 2387
-KEY SYMBOL, DECIMAL SEPARATOR 2396
-key, clear 2327
-key, command 2318
-key, delete to the left 232B
-key, delete to the right 2326
-key, enter 2324
-KEY, OPTION 2325
-KEYBOARD 2328
-Keyboard Symbols from ISO 9995-7 2380
-Keyboard Symbols from ISO 9995-7 2396
-KEYCAP, COMBINING ENCLOSING 20E3
-Khmer 1780
-Khmer Digits 17E0
-KIP SIGN 20AD
-kome, japanese 203B
-Koranic Annotation Signs 06D6
-korean currency 20A9
-Korean Hangul Compatibility Jamo 3130
-Korean Hangul Elements, Circled 3260
-Korean Hangul Elements, Parenthesized 3200
-Korean Hangul Jamo Combining Alphabet 1100
-Korean Hangul Syllables Area AC00
-Korean Hangul Syllables, Circled 326E
-Korean Hangul Syllables, Parenthesized 320E
-Korean Hangul Variants, Halfwidth FFA0
-KOREAN STANDARD SYMBOL 327F
-KORONIS, COMBINING GREEK 0343
-KRA, LATIN SMALL LETTER 0138
-KS C 5601 (Korean Hangul), Based on 3130
-L B BAR SYMBOL 2114
-L WITH MIDDLE DOT, LATIN SMALL LETTER 0140
-L WITH MIDDLE TILDE, LATIN SMALL LETTER 026B
-L, LATIN LETTER SMALL CAPITAL 029F
-L, MODIFIER LETTER SMALL 02E1
-L, SCRIPT CAPITAL 2112
-L, SCRIPT SMALL 2113
-lambda bar, latin letter 019B
-Lao 0E80
-Lao Digits 0ED0
-Lao Letters 0E81
-laotian currency 20AD
-laplace operator 2206
-laplace operator 2207
-laplace symbol 2112
-LAST QUARTER MOON 263E
-LATERAL CLICK, LATIN LETTER 01C1
-Latin Abbreviations, Squared 3371
-Latin Capital Letters 0041
-LATIN CROSS 271D
-Latin Extended Additional 1E00
-Latin Extended-A 0100
-Latin Extended-B 0180
-Latin Extensions for Vietnamese 1EA0
-Latin Letters, Circled 24B6
-Latin Letters, Parenthesized 249C
-Latin Letters, Phonetic Modifiers Derived from 02B0
-Latin Ligatures FB00
-Latin Small Letters 0061
-Latin, Based on ISO 8859-2, -3, -4, -9 (European) 0100
-Latin, C0 Controls and Basic 0000
-Latin, European 0100
-Latin-1 Supplement, C1 Controls and 0080
-Latin-1, ISO 8859-1 aka 00A0
-lazy s 223D
-LAZY S, INVERTED 223E
-LEADER, ONE DOT 2024
-leader, three dot 2026
-LEADER, TWO DOT 2025
-leaf, aldus 2766
-leaf, ivy 2767
-LEFT ANGLE ABOVE, COMBINING 031A
-LEFT ANGLE BELOW, COMBINING 0349
-LEFT ANGLE BRACKET 3008
-LEFT ARROW ABOVE, COMBINING 20D6
-LEFT BLACK LENTICULAR BRACKET 3010
-LEFT CEILING 2308
-LEFT CORNER BRACKET 300C
-LEFT CORNER, TOP 231C
-LEFT CROP, TOP 230F
-LEFT CURLY BRACKET 007B
-LEFT DOUBLE ANGLE BRACKET 300A
-LEFT DOUBLE QUOTATION MARK 201C
-LEFT FLOOR 230A
-LEFT HALF RING BELOW, COMBINING 031C
-LEFT HALF RING, MODIFIER LETTER 02BF
-LEFT HALF RING, MODIFIER LETTER CENTRED 02D3
-LEFT HALF, COMBINING DOUBLE TILDE FE22
-LEFT HALF, COMBINING LIGATURE FE20
-LEFT HARPOON ABOVE, COMBINING 20D0
-left key, delete to the 232B
-LEFT PARENTHESIS 0028
-LEFT PARENTHESIS, ORNATE FD3E
-LEFT PARENTHESIS, SUBSCRIPT 208D
-LEFT PARENTHESIS, SUPERSCRIPT 207D
-left pointing guillemet 00AB
-LEFT POINTING INDEX, BLACK 261A
-left pointing single guillemet 2039
-LEFT RIGHT ARROW ABOVE, COMBINING 20E1
-LEFT RIGHT ARROW BELOW, COMBINING 034D
-LEFT SEMIDIRECT PRODUCT 22CB
-LEFT SINGLE QUOTATION MARK 2018
-LEFT SQUARE BRACKET 005B
-LEFT SQUARE BRACKET WITH QUILL 2045
-LEFT TACK 22A3
-LEFT TACK BELOW, COMBINING 0318
-LEFT TORTOISE SHELL BRACKET 3014
-LEFT WHITE CORNER BRACKET 300E
-LEFT WHITE LENTICULAR BRACKET 3016
-LEFT WHITE SQUARE BRACKET 301A
-LEFT WHITE TORTOISE SHELL BRACKET 3018
-LEFT-POINTING ANGLE BRACKET 2329
-LEFT-POINTING ANGLE QUOTATION MARK, SINGLE 2039
-LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 00AB
-LEFT-TO-RIGHT EMBEDDING 202A
-LEFT-TO-RIGHT MARK 200E
-LEFT-TO-RIGHT OVERRIDE 202D
-leftward tab 21E4
-LEFTWARDS BULLET, BLACK 204C
-LENTICULAR BRACKET, LEFT BLACK 3010
-LENTICULAR BRACKET, LEFT WHITE 3016
-LEO 264C
-LESS-THAN OR EQUAL TO 2264
-LESS-THAN SIGN 003C
-LESS-THAN, MUCH 226A
-LESS-THAN, VERY MUCH 22D8
-Letterlike Symbols 2100
-level 2 lock 21EB
-level 3 lock 21EF
-level 3 select 21EE
-LEZH, LATIN SMALL LETTER 026E
-lf 000A
-LIBRA 264E
-ligature ae, latin small 00E6
-LIGATURE IJ, LATIN SMALL 0133
-LIGATURE LEFT HALF, COMBINING FE20
-LIGATURE OE, LATIN SMALL 0153
-Ligatures, Armenian FB13
-Ligatures, Latin FB00
-LIGHTNING 2607
-LIMIT, APPROACHES THE 2250
-LINE ABOVE, COMBINING DOUBLE VERTICAL 030E
-LINE ABOVE, COMBINING VERTICAL 030D
-LINE BELOW, COMBINING DOUBLE VERTICAL 0348
-LINE BELOW, COMBINING VERTICAL 0329
-line down, partial 008B
-line feed 000A
-line feed 21B4
-line feed, reverse 008D
-LINE FEED, SYMBOL FOR 240A
-line marker 2319
-LINE OVERLAY, COMBINING LONG VERTICAL 20D2
-LINE OVERLAY, COMBINING SHORT VERTICAL 20D3
-LINE SEPARATOR 2028
-LINE SYMBOL, CENTRE 2104
-line tabulation set 008A
-line up, partial 008C
-LINE WITH MIDDLE DOT, VERTICAL 237F
-line, beginning of 2310
-LINE, CENTRELINE LOW FE4E
-LINE, COMBINING DOUBLE LOW 0333
-LINE, COMBINING LOW 0332
-LINE, DASHED LOW FE4D
-LINE, DOUBLE LOW 2017
-LINE, DOUBLE VERTICAL 2016
-LINE, LOW 005F
-LINE, MODIFIER LETTER LOW VERTICAL 02CC
-LINE, MODIFIER LETTER VERTICAL 02C8
-line, new 21B5
-line, next 0085
-LINE, VERTICAL 007C
-LINE, WAVY 2307
-LINE, WAVY LOW FE4F
-LIRA SIGN 20A4
-liter 2113
-Livonian, Additions for 022A
-LOCATION SIGN, TELEPHONE 2706
-lock, caps 21EA
-lock, caps 21EC
-lock, group 21F0
-lock, level 2 21EB
-lock, level 3 21EF
-lock, numerics 21ED
-LOGICAL AND 2227
-LOGICAL AND, CURLY 22CF
-LOGICAL AND, N-ARY 22C0
-LOGICAL OR 2228
-LOGICAL OR, CURLY 22CE
-LOGICAL OR, N-ARY 22C1
-long 0304
-long cross 2020
-long dash 2015
-LONG S, LATIN SMALL LETTER 017F
-long slash overlay 0338
-LONG SOLIDUS OVERLAY, COMBINING 0338
-LONG STROKE OVERLAY, COMBINING 0336
-LONG VERTICAL LINE OVERLAY, COMBINING 20D2
-LORRAINE, CROSS OF 2628
-LOW ACUTE ACCENT, MODIFIER LETTER 02CF
-low double comma quotation mark 201E
-LOW DOUBLE PRIME QUOTATION MARK 301F
-LOW GRAVE ACCENT, MODIFIER LETTER 02CE
-LOW LINE 005F
-LOW LINE, CENTRELINE FE4E
-LOW LINE, COMBINING 0332
-LOW LINE, COMBINING DOUBLE 0333
-LOW LINE, DASHED FE4D
-LOW LINE, DOUBLE 2017
-LOW LINE, WAVY FE4F
-LOW MACRON, MODIFIER LETTER 02CD
-low single comma quotation mark 201A
-Low Surrogates DC00
-LOW VERTICAL LINE, MODIFIER LETTER 02CC
-LOW-9 QUOTATION MARK, DOUBLE 201E
-LOW-9 QUOTATION MARK, SINGLE 201A
-lower rank than 227A
-LOZENGE 25CA
-LOZENGE, SQUARE 2311
-lre 202A
-lrm 200E
-lro 202D
-M, LATIN CAPITAL LETTER TURNED 019C
-M, LATIN SMALL LETTER TURNED 026F
-M, SCRIPT CAPITAL 2133
-m-matrix 2133
-MACRON 00AF
-MACRON BELOW, COMBINING 0331
-MACRON, COMBINING 0304
-MACRON, MODIFIER LETTER 02C9
-MACRON, MODIFIER LETTER LOW 02CD
-macron, spacing 00AF
-Malayalam 0D00
-Malayalam Digits 0D66
-Malayalam Letters 0D05
-MALE SIGN 2642
-MALTESE CROSS 2720
-Manchu Letters, Mongolian 1873
-mark, german 2133
-marker, histogram 25AE
-mars 2642
-MASCULINE ORDINAL INDICATOR 00BA
-Mathematical Operators 2200
-MATRIX, HERMITIAN CONJUGATE 22B9
-MEASURED ANGLE 2221
-MEASURED BY 225E
-medium, end of 0019
-MEDIUM, SYMBOL FOR END OF 2419
-MEMBER, CONTAINS AS 220B
-MEMBER, SMALL CONTAINS AS 220D
-MERCURY 263F
-message waiting 0095
-message, privacy 009E
-mho 2127
-MICRO SIGN 00B5
-mid space 2005
-MIDDLE DOT 00B7
-middle dot, greek 00B7
-MIDDLE DOT, KATAKANA 30FB
-MIDDLE DOT, LATIN SMALL LETTER L WITH 0140
-MIDDLE DOT, VERTICAL LINE WITH 237F
-MIDDLE TILDE, LATIN CAPITAL LETTER O WITH 019F
-MIDDLE TILDE, LATIN SMALL LETTER L WITH 026B
-MIDLINE HORIZONTAL ELLIPSIS 22EF
-midpoint 00B7
-MILL SIGN 20A5
-MILLE SIGN, PER 2030
-milreis 0024
-minim 264F
-minim (alternate glyph) 264D
-Minnan and Hakka, Chinese Bopomofo Extended for 31A0
-MINUS SIGN 2212
-MINUS SIGN BELOW, COMBINING 0320
-minus sign, hyphen or 002D
-MINUS SIGN, MODIFIER LETTER 02D7
-MINUS TILDE 2242
-MINUS, CIRCLED 2296
-MINUS, DOT 2238
-MINUS, SET 2216
-MINUS, SQUARED 229F
-MINUS, SUBSCRIPT 208B
-MINUS, SUPERSCRIPT 207B
-MINUS-OR-PLUS SIGN 2213
-minutes 2032
-Miscellaneous Symbols 2600
-Miscellaneous Technical 2300
-MODELS 22A7
-Modifier Letters, Spacing 02B0
-Mongolian 1800
-MONGOLIAN COLON 1804
-MONGOLIAN COMMA 1802
-mongolian currency 20AE
-Mongolian Digits 1810
-Mongolian Extensions for Sanskrit and Tibetan 1880
-Mongolian Format Controls 180B
-MONGOLIAN FULL STOP 1803
-Mongolian Manchu Letters 1873
-Mongolian Sibe Letters 185D
-Mongolian Todo Letters 1843
-MONOSTABLE SYMBOL 238D
-Months, Enclosed CJK Letters and 3200
-Months, Telegraph Symbols for 32C0
-MOON, FIRST QUARTER 263D
-MOON, LAST QUARTER 263E
-most positive 223E
-MUCH GREATER-THAN 226B
-MUCH GREATER-THAN, VERY 22D9
-MUCH LESS-THAN 226A
-MUCH LESS-THAN, VERY 22D8
-MULTIMAP 22B8
-MULTIPLICATION SIGN 00D7
-MULTIPLICATION X 2715
-MULTIPLICATION X, HEAVY 2716
-MULTIPLICATION, MULTISET 228D
-MULTISET 228C
-MULTISET MULTIPLICATION 228D
-MULTISET UNION 228E
-MUSIC FLAT SIGN 266D
-MUSIC NATURAL SIGN 266E
-MUSIC SHARP SIGN 266F
-Musical Symbols 2669
-mutton 2003
-mutton quad 2001
-Myanmar 1000
-Myanmar Digits 1040
-N, DOUBLE-STRUCK CAPITAL 2115
-N, LATIN LETTER SMALL CAPITAL 0274
-N-ARY COPRODUCT 2210
-N-ARY INTERSECTION 22C2
-N-ARY LOGICAL AND 22C0
-N-ARY LOGICAL OR 22C1
-N-ARY PRODUCT 220F
-N-ARY SUMMATION 2211
-N-ARY UNION 22C3
-NABLA 2207
-NAIRA SIGN 20A6
-NAND 22BC
-nang 0323
-NARROW NO-BREAK SPACE 202F
-nasal hook 0328
-NATIONAL DIGIT SHAPES 206E
-natural number 2115
-NATURAL SIGN, MUSIC 266E
-negation 20D3
-negative acknowledge 0015
-negative acknowledge, graphic for 237B
-NEGATIVE ACKNOWLEDGE, SYMBOL FOR 2415
-NEPTUNE 2646
-new line 21B5
-NEW SHEQEL SIGN 20AA
-NEWLINE, SYMBOL FOR 2424
-next line 0085
-NEXT PAGE 2398
-NIB, BLACK 2712
-nigerian currency 20A6
-no break here 0083
-no break space, graphic for 237D
-NO-BREAK SPACE 00A0
-NO-BREAK SPACE, NARROW 202F
-NO-BREAK SPACE, ZERO WIDTH FEFF
-NODE, ASCENDING 260A
-NODE, DESCENDING 260B
-NOMINAL DIGIT SHAPES 206F
-NON-BREAKING HYPHEN 2011
-non-breaking space 00A0
-NON-JOINER, ZERO WIDTH 200C
-non-theorem 22A3
-NOR 22BD
-NORMAL SUBGROUP OF 22B2
-NORMAL SUBGROUP, CONTAINS AS 22B3
-not 223C
-Not a Character FFFE
-Not a Character FFFF
-NOT AN ELEMENT OF 2209
-NOT CHECK MARK 237B
-NOT EQUAL TO 2260
-NOT SIGN 00AC
-NOT SIGN, REVERSED 2310
-NOT SIGN, TURNED 2319
-NOT TILDE ABOVE, COMBINING 034A
-not yield, does 22A3
-NOTE, EIGHTH 266A
-NOTE, QUARTER 2669
-NOTES, BEAMED EIGHTH 266B
-NOTES, BEAMED SIXTEENTH 266C
-null 0000
-null set 2205
-NULL, SYMBOL FOR 2400
-Number Forms 2150
-Number Runes, Golden 16EE
-NUMBER SIGN 0023
-number symbol, real 210A
-NUMBER ZERO, IDEOGRAPHIC 3007
-number, natural 2115
-Numbers Period 2488
-Numbers, Circled 2460
-Numbers, Circled Inverse 2776
-Numbers, Parenthesized 2474
-numbers, the set of complex 2102
-numbers, the set of rational 211A
-numbers, the set of real 211D
-Numerals, Hangzhou-style 3021
-Numerals, Roman 2160
-NUMERATOR ONE, FRACTION 215F
-numerics lock 21ED
-NUMERO SIGN 2116
-nut 2002
-o bar 019F
-o bar 0275
-o e, latin small letter 0153
-O WITH MIDDLE TILDE, LATIN CAPITAL LETTER 019F
-o, latin capital letter barred 019F
-O, LATIN CAPITAL LETTER OPEN 0186
-O, LATIN SMALL LETTER BARRED 0275
-O, LATIN SMALL LETTER OPEN 0254
-O, SCRIPT SMALL 2134
-obelisk 2020
-obelisk, double 2021
-OBJECT REPLACEMENT CHARACTER FFFC
-OCR, Optical Character Recognition 2440
-octothorpe 0023
-OE, LATIN LETTER SMALL CAPITAL 0276
-OE, LATIN SMALL LIGATURE 0153
-Ogham 1680
-OGHAM SPACE MARK 1680
-OGONEK 02DB
-OGONEK, COMBINING 0328
-OHM SIGN 2126
-OHM SIGN, INVERTED 2127
-OI, LATIN SMALL LETTER 01A3
-OM, DEVANAGARI 0950
-OMEGA, LATIN SMALL LETTER CLOSED 0277
-ONE DOT LEADER 2024
-ONE HALF, VULGAR FRACTION 00BD
-ONE QUARTER, VULGAR FRACTION 00BC
-ONE, FRACTION NUMERATOR 215F
-ONE, SUPERSCRIPT 00B9
-OPEN BOX 2423
-OPEN BOX, SHOULDERED 237D
-OPEN E, LATIN CAPITAL LETTER 0190
-OPEN E, LATIN SMALL LETTER 025B
-OPEN E, LATIN SMALL LETTER CLOSED 029A
-OPEN E, LATIN SMALL LETTER CLOSED REVERSED 025E
-OPEN E, LATIN SMALL LETTER REVERSED 025C
-OPEN O, LATIN CAPITAL LETTER 0186
-OPEN O, LATIN SMALL LETTER 0254
-opening brace 007B
-opening curly bracket 007B
-opening parenthesis 0028
-opening square bracket 005B
-operating system command 009D
-OPERATOR, ASTERISK 2217
-OPERATOR, BULLET 2219
-OPERATOR, CIRCLED ASTERISK 229B
-OPERATOR, CIRCLED DOT 2299
-OPERATOR, CIRCLED RING 229A
-OPERATOR, DIAMOND 22C4
-OPERATOR, DOT 22C5
-OPERATOR, RING 2218
-OPERATOR, SQUARED DOT 22A1
-OPERATOR, STAR 22C6
-OPERATOR, TILDE 223C
-Operators, Mathematical 2200
-OPPOSITION 260D
-Optical Character Recognition (OCR) 2440
-OPTION KEY 2325
-OR, CURLY LOGICAL 22CE
-OR, LOGICAL 2228
-OR, N-ARY LOGICAL 22C1
-order 2134
-ORDINAL INDICATOR, FEMININE 00AA
-ORDINAL INDICATOR, MASCULINE 00BA
-ORIGIN, DIMENSION 2331
-ORIGINAL OF 22B6
-ORIGINAL OF, SQUARE 2290
-Oriya 0B00
-Oriya Digits 0B66
-Oriya Letters 0B05
-Ornaments, Heart 2763
-Ornaments, Punctuation 275B
-ORNATE LEFT PARENTHESIS FD3E
-ORTHODOX CROSS 2626
-orthogonal to 22A5
-OU, LATIN SMALL LETTER 0223
-OUNCE SIGN 2125
-overbar, apl 00AF
-OVERLAY, COMBINING CLOCKWISE RING 20D9
-OVERLAY, COMBINING LONG SOLIDUS 0338
-OVERLAY, COMBINING LONG STROKE 0336
-OVERLAY, COMBINING LONG VERTICAL LINE 20D2
-OVERLAY, COMBINING RING 20D8
-OVERLAY, COMBINING SHORT SOLIDUS 0337
-OVERLAY, COMBINING SHORT STROKE 0335
-OVERLAY, COMBINING SHORT VERTICAL LINE 20D3
-OVERLAY, COMBINING TILDE 0334
-overlay, long slash 0338
-overlay, short slash 0337
-overline 00AF
-OVERLINE 203E
-OVERLINE, CENTRELINE FE4A
-OVERLINE, COMBINING 0305
-OVERLINE, COMBINING DOUBLE 033F
-OVERLINE, DASHED FE49
-OVERLINE, DOUBLE WAVY FE4C
-OVERLINE, WAVY FE4B
-OVERRIDE, LEFT-TO-RIGHT 202D
-OVERRIDE, RIGHT-TO-LEFT 202E
-overscore 0305
-overscore, spacing 203E
-Overscores and Underscores FE49
-Overstruck Diacritics 0334
-oxia 0301
-P, DOUBLE-STRUCK CAPITAL 2119
-P, SCRIPT CAPITAL 2118
-page down 21DF
-page up 21DE
-PAGE, NEXT 2398
-PAGE, PREVIOUS 2397
-PALATALIZED HOOK BELOW, COMBINING 0321
-PARAGRAPH SEPARATOR 2029
-PARAGRAPH SEPARATOR, GEORGIAN 10FB
-paragraph separator, urdu 203B
-paragraph sign 00B6
-PARAGRAPH SIGN ORNAMENT, CURVED STEM 2761
-paragraph sign, european 00A7
-PARALLEL TO 2225
-PARALLELOGRAM, BLACK 25B0
-parenthesis, closing 0029
-PARENTHESIS, LEFT 0028
-parenthesis, opening 0028
-PARENTHESIS, ORNATE LEFT FD3E
-PARENTHESIS, RIGHT 0029
-PARENTHESIS, SUBSCRIPT LEFT 208D
-PARENTHESIS, SUPERSCRIPT LEFT 207D
-Parenthesized Ideographs 3220
-Parenthesized Korean Hangul Elements 3200
-Parenthesized Korean Hangul Syllables 320E
-Parenthesized Latin Letters 249C
-Parenthesized Numbers 2474
-parted rule 00A6
-PARTIAL DIFFERENTIAL 2202
-partial line down 008B
-partial line up 008C
-pdf 202C
-PEACE SYMBOL 262E
-Pencil Dingbats 270E
-PENCIL, UPPER RIGHT 2710
-per 2118
-PER MILLE SIGN 2030
-PER TEN THOUSAND SIGN 2031
-PERCENT SIGN 0025
-PERCENT SIGN, ARABIC 066A
-PERCUSSIVE, LATIN LETTER BIDENTAL 02AD
-PERCUSSIVE, LATIN LETTER BILABIAL 02AC
-period 002E
-PERISPOMENI, COMBINING GREEK 0342
-perpendicular 22A5
-Persian and Urdu, Eastern Arabic-Indic Digits for 06F0
-PERSPECTIVE 2306
-PESETA SIGN 20A7
-PHARYNGEAL VOICED FRICATIVE, LATIN LETTER 0295
-PHI, LATIN SMALL LETTER 0278
-Phonetic Alphabet, International 0250
-Phonetic Modifiers Derived from Latin Letters 02B0
-Phonetics and Symbols Area, CJK 2E00
-phonorecord sign 2117
-pi, mathematical constant 03C0
-Pictures for Control Codes, Graphic 2400
-PILCROW SIGN 00B6
-PILCROW SIGN, REVERSED 204B
-Pinyin Diacritic-vowel Combinations 01CD
-pipe 01C0
-pipe, double 01C1
-pipe, double-barred 01C2
-PISCES 2653
-PITCHFORK 22D4
-PLACE OF INTEREST SIGN 2318
-plaintiff 226C
-PLANCK CONSTANT 210E
-PLANCK CONSTANT OVER TWO PI 210F
-Planet Symbols 263F
-Playing Card Suits 2660
-PLUS SIGN 002B
-PLUS SIGN BELOW, COMBINING 031F
-PLUS SIGN, MODIFIER LETTER 02D6
-PLUS SIGN, SUBSCRIPT 208A
-PLUS SIGN, SUPERSCRIPT 207A
-PLUS, CIRCLED 2295
-PLUS, DOT 2214
-PLUS, SQUARED 229E
-PLUS-MINUS SIGN 00B1
-PLUTO 2647
-Pointers 25BA
-Points, Arabic 064B
-Points, Hebrew 05B0
-poison 2620
-Political Symbols, Religious and 2626
-POP DIRECTIONAL FORMATTING 202C
-POSITION INDICATOR 2316
-positive, most 223E
-POSTAL MARK 3012
-POSTAL MARK FACE 3020
-POSTAL MARK, CIRCLED 3036
-pound sign 0023
-POUND SIGN 00A3
-pound sterling 00A3
-pounds 2114
-power set 2118
-PRECEDES 227A
-PRECEDES UNDER RELATION 22B0
-PRESCRIPTION TAKE 211E
-Presentation Forms, Alphabetic FB00
-Presentation Forms, Hebrew FB1D
-Presentation Forms-A, Arabic FB50
-Presentation Forms-B, Arabic FE70
-PREVIOUS PAGE 2397
-PRIME 2032
-PRIME QUOTATION MARK, DOUBLE 301E
-PRIME QUOTATION MARK, LOW DOUBLE 301F
-PRIME QUOTATION MARK, REVERSED DOUBLE 301D
-PRIME, DOUBLE 2033
-PRIME, MODIFIER LETTER 02B9
-PRIME, MODIFIER LETTER DOUBLE 02BA
-PRIME, REVERSED 2035
-PRIME, REVERSED DOUBLE 2036
-PRIME, REVERSED TRIPLE 2037
-PRIME, TRIPLE 2034
-PRINT SCREEN SYMBOL 2399
-privacy message 009E
-Private Use Area E000
-private use one 0091
-private use two 0092
-product, direct 2299
-PRODUCT, LEFT SEMIDIRECT 22CB
-PRODUCT, N-ARY 220F
-product, tensor 2297
-PRODUCT, WREATH 2240
-PROFILE, ALL AROUND- 232E
-prohibition 20E0
-PROJECTIVE 2305
-PROOF, END OF 220E
-PROPORTION 2237
-PROPORTION, GEOMETRIC 223A
-PROPORTIONAL TO 221D
-proportional to, varies with 223C
-proves 22A2
-psili 0313
-published 2117
-Punctuation Ornaments 275B
-PUNCTUATION SPACE 2008
-Punctuation, CJK Symbols and 3000
-Punctuation, General 2000
-punt, irish 00A3
-Q, DOUBLE-STRUCK CAPITAL 211A
-Q, ROTATED CAPITAL 213A
-qed 220E
-QUAD, EM 2001
-QUAD, EN 2000
-quad, mutton 2001
-quadrature 25A1
-quantic 226C
-QUARTER MOON, FIRST 263D
-QUARTER MOON, LAST 263E
-QUARTER NOTE 2669
-Quarters, Fractions 00BC
-QUESTION EXCLAMATION MARK 2048
-QUESTION MARK 003F
-QUESTION MARK, ARABIC 061F
-QUESTION MARK, ARMENIAN 055E
-QUESTION MARK, ETHIOPIC 1367
-QUESTION MARK, EXCLAMATION 2049
-QUESTION MARK, GREEK 037E
-QUESTION MARK, INVERTED 00BF
-QUESTIONED EQUAL TO 225F
-QUILL, LEFT SQUARE BRACKET WITH 2045
-quotation dash 2015
-QUOTATION MARK 0022
-Quotation Mark Ornaments 275B
-quotation mark, double comma 201D
-QUOTATION MARK, DOUBLE HIGH-REVERSED-9 201F
-QUOTATION MARK, DOUBLE LOW-9 201E
-QUOTATION MARK, DOUBLE PRIME 301E
-quotation mark, double reversed comma 201F
-quotation mark, double turned comma 201C
-QUOTATION MARK, LEFT DOUBLE 201C
-QUOTATION MARK, LEFT SINGLE 2018
-QUOTATION MARK, LEFT-POINTING DOUBLE ANGLE 00AB
-quotation mark, low double comma 201E
-QUOTATION MARK, LOW DOUBLE PRIME 301F
-quotation mark, low single comma 201A
-QUOTATION MARK, REVERSED DOUBLE PRIME 301D
-QUOTATION MARK, RIGHT DOUBLE 201D
-QUOTATION MARK, RIGHT SINGLE 2019
-QUOTATION MARK, RIGHT-POINTING DOUBLE ANGLE 00BB
-quotation mark, single comma 2019
-QUOTATION MARK, SINGLE HIGH-REVERSED-9 201B
-QUOTATION MARK, SINGLE LEFT-POINTING ANGLE 2039
-QUOTATION MARK, SINGLE LOW-9 201A
-quotation mark, single reversed comma 201B
-QUOTATION MARK, SINGLE RIGHT-POINTING ANGLE 203A
-quotation mark, single turned comma 2018
-quote, apl 0022
-R, BLACK-LETTER CAPITAL 211C
-R, DOUBLE-STRUCK CAPITAL 211D
-R, LATIN LETTER SMALL CAPITAL 0280
-R, LATIN LETTER SMALL CAPITAL INVERTED 0281
-R, LATIN SMALL LETTER TURNED 0279
-R, MODIFIER LETTER SMALL 02B3
-R, MODIFIER LETTER SMALL CAPITAL INVERTED 02B6
-R, MODIFIER LETTER SMALL TURNED 02B4
-R, SCRIPT CAPITAL 211B
-radical sign 221A
-Radicals Supplement, CJK 2E80
-Radicals, Kangxi 2F00
-Radicals, Yi A490
-RADIOACTIVE SIGN 2622
-rainy weather 2602
-RAMS HORN, LATIN SMALL LETTER 0264
-RATIO 2236
-ratio, cross 211E
-rational numbers, the set of 211A
-real number symbol 210A
-real numbers, the set of 211D
-real part 211C
-recipe 211E
-record separator 001E
-RECORD SEPARATOR, SYMBOL FOR 241E
-RECORDER, TELEPHONE 2315
-RECORDING COPYRIGHT, SOUND 2117
-Rectangles 25AC
-reduces to 22A6
-reducible 22A2
-REFERENCE MARK 203B
-registered trade mark sign 00AE
-Religious and Political Symbols 2626
-Repeat Marks, Kana 3031
-REPLACEMENT CHARACTER FFFD
-REPLACEMENT CHARACTER, OBJECT FFFC
-resistance 2126
-RESPONSE 211F
-results in 22A8
-RETROFLEX CLICK, LATIN LETTER 01C3
-RETROFLEX HOOK BELOW, COMBINING 0322
-retroflex hook, latin small letter d 0256
-return, carriage 000D
-return, carriage 21B5
-RETURN, SYMBOL FOR CARRIAGE 240D
-reverse line feed 008D
-REVERSE SOLIDUS 005C
-reverse turnstile 22A3
-REVERSED COMMA ABOVE, COMBINING 0314
-reversed comma quotation mark, double 201F
-reversed comma quotation mark, single 201B
-REVERSED COMMA, MODIFIER LETTER 02BD
-REVERSED DOUBLE PRIME 2036
-REVERSED DOUBLE PRIME QUOTATION MARK 301D
-REVERSED E, LATIN CAPITAL LETTER 018E
-REVERSED E, LATIN SMALL LETTER 0258
-reversed epsilon, latin small letter closed 025E
-REVERSED ESH LOOP, LATIN LETTER 01AA
-REVERSED ESH, LATIN SMALL LETTER SQUAT 0285
-reversed glottal stop, latin letter 0295
-REVERSED GLOTTAL STOP, MODIFIER LETTER 02C1
-REVERSED GLOTTAL STOP, MODIFIER LETTER SMALL 02E4
-REVERSED NOT SIGN 2310
-REVERSED OPEN E, LATIN SMALL LETTER 025C
-REVERSED OPEN E, LATIN SMALL LETTER CLOSED 025E
-REVERSED PILCROW SIGN 204B
-REVERSED PRIME 2035
-reversed straight epsilon 220D
-REVERSED TILDE 223D
-REVERSED TILDE EQUALS 22CD
-REVERSED TRIPLE PRIME 2037
-REVERSED, LATIN SMALL LETTER EZH 01B9
-RHOTIC HOOK, MODIFIER LETTER 02DE
-riemann integral 211B
-RIGHT ANGLE 221F
-RIGHT ANGLE WITH ARC 22BE
-RIGHT CURLY BRACKET 007D
-RIGHT PARENTHESIS 0029
-right pointing guillemet 00BB
-right pointing single guillemet 203A
-RIGHT SQUARE BRACKET 005D
-RIGHT TRIANGLE 22BF
-RIGHT-POINTING ANGLE QUOTATION MARK, SINGLE 203A
-RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 00BB
-RIGHT-TO-LEFT EMBEDDING 202B
-RIGHT-TO-LEFT MARK 200F
-RIGHT-TO-LEFT OVERRIDE 202E
-RING ABOVE 02DA
-RING ABOVE, COMBINING 030A
-RING BELOW, COMBINING 0325
-RING BELOW, COMBINING LEFT HALF 031C
-RING BELOW, COMBINING RIGHT HALF 0339
-RING EQUAL TO 2257
-RING IN EQUAL TO 2256
-RING OPERATOR 2218
-RING OPERATOR, CIRCLED 229A
-RING OVERLAY, COMBINING 20D8
-RING OVERLAY, COMBINING CLOCKWISE 20D9
-RING, BENZENE 232C
-RING, MODIFIER LETTER CENTRED LEFT HALF 02D3
-RING, MODIFIER LETTER LEFT HALF 02BF
-rle 202B
-rlm 200F
-rlo 202E
-Roman Numerals 2160
-Romanian, Additions for 0218
-ROOT, CUBE 221B
-ROOT, FOURTH 221C
-ROOT, SQUARE 221A
-ROTATED CAPITAL Q 213A
-rotation 20D5
-rough breathing 0314
-rule, parted 00A6
-Runes, Golden Number 16EE
-Runic 16A0
-RUNOUT, TOTAL 2330
-RUPEE MARK, BENGALI 09F2
-RUPEE SIGN 20A8
-RUPEE SIGN, BENGALI 09F3
-Russian Alphabet, Basic 0410
-S, INVERTED LAZY 223E
-S, LATIN SMALL LETTER LONG 017F
-S, LATIN SMALL LETTER SHARP 00DF
-s, lazy 223D
-S, MODIFIER LETTER SMALL 02E2
-SAGITTARIUS 2650
-SALTIRE 2613
-Sanskrit and Tibetan, Mongolian Extensions for 1880
-satisfies 22A8
-SATURN 2644
-SCHWA, LATIN CAPITAL LETTER 018F
-SCHWA, LATIN SMALL LETTER 0259
-Scissors Dingbats 2701
-SCORPIUS 264F
-SCREEN, COMBINING ENCLOSING 20E2
-script a, latin small letter 0251
-SCRIPT CAPITAL B 212C
-SCRIPT CAPITAL E 2130
-SCRIPT CAPITAL F 2131
-SCRIPT CAPITAL H 210B
-SCRIPT CAPITAL I 2110
-SCRIPT CAPITAL L 2112
-SCRIPT CAPITAL M 2133
-SCRIPT CAPITAL P 2118
-SCRIPT CAPITAL R 211B
-script f, latin small letter 0192
-SCRIPT G, LATIN SMALL LETTER 0261
-SCRIPT SMALL E 212F
-SCRIPT SMALL G 210A
-SCRIPT SMALL L 2113
-SCRIPT SMALL O 2134
-script v, latin capital letter 01B2
-script v, latin small letter 028B
-Scripts Area, General 0000
-scrolling 21F3
-SCRUPLE 2108
-SEAGULL BELOW, COMBINING 033C
-second transfinite cardinal (the continuum) 2136
-seconds 2033
-SECTION SIGN 00A7
-section sign, european 00B6
-SECTOR 2314
-SEGMENT 2313
-selected area, end of 0087
-selected area, start of 0086
-SEMICOLON 003B
-SEMICOLON, ARABIC 061B
-SEMICOLON, ETHIOPIC 1364
-SEMIDIRECT PRODUCT, LEFT 22CB
-SEPARATOR KEY SYMBOL, DECIMAL 2396
-SEPARATOR, ARABIC DECIMAL 066B
-SEPARATOR, ARABIC THOUSANDS 066C
-separator, decimal 002C
-separator, devanagari phrase 0964
-separator, file 001C
-SEPARATOR, GEORGIAN PARAGRAPH 10FB
-separator, group 001D
-SEPARATOR, LINE 2028
-SEPARATOR, PARAGRAPH 2029
-separator, record 001E
-SEPARATOR, SYMBOL FOR FILE 241C
-SEPARATOR, SYMBOL FOR GROUP 241D
-SEPARATOR, SYMBOL FOR RECORD 241E
-SEPARATOR, SYMBOL FOR UNIT 241F
-separator, unit 001F
-separator, urdu paragraph 203B
-sequence introducer, control 009B
-Serbian Cyrillic Letters, Croatian Digraphs Matching 01C4
-SERVICE MARK 2120
-SET MINUS 2216
-set of complex numbers, the 2102
-set of integers, the 2124
-set of rational numbers, the 211A
-set of real numbers, the 211D
-set transmit state 0093
-SET, EMPTY 2205
-set, included in 2282
-set, includes in 2283
-set, null 2205
-set, power 2118
-sextile 2736
-Shade Characters 2591
-shamrock 2663
-Shapes, Geometric 25A0
-SHARP S, LATIN SMALL LETTER 00DF
-SHARP SIGN, MUSIC 266F
-SHEQEL SIGN, NEW 20AA
-shift 21E7
-shift in 000F
-SHIFT IN, SYMBOL FOR 240F
-shift out 000E
-SHIFT OUT, SYMBOL FOR 240E
-shilling 002F
-short 0306
-short slash overlay 0337
-SHORT SOLIDUS OVERLAY, COMBINING 0337
-SHORT STROKE OVERLAY, COMBINING 0335
-SHORT VERTICAL LINE OVERLAY, COMBINING 20D3
-SHOULDERED OPEN BOX 237D
-Sibe Letters, Mongolian 185D
-similar to 223C
-SINE WAVE 223F
-single character introducer 009A
-single comma quotation mark 2019
-single comma quotation mark, low 201A
-single guillemet, left pointing 2039
-single guillemet, right pointing 203A
-SINGLE HIGH-REVERSED-9 QUOTATION MARK 201B
-SINGLE LEFT-POINTING ANGLE QUOTATION MARK 2039
-SINGLE LOW-9 QUOTATION MARK 201A
-SINGLE QUOTATION MARK, LEFT 2018
-SINGLE QUOTATION MARK, RIGHT 2019
-single reversed comma quotation mark 201B
-SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 203A
-single shift three 008F
-single shift two 008E
-single turned comma quotation mark 2018
-Sinhala 0D80
-SIX-PER-EM SPACE 2006
-SIXTEENTH NOTES, BEAMED 266C
-Sixths, Fractions 2159
-SKULL AND CROSSBONES 2620
-slash 002F
-slash overlay, long 0338
-slash overlay, short 0337
-SLASH, CIRCLED DIVISION 2298
-SLASH, DIVISION 2215
-SLASH, FRACTION 2044
-SLOPE 2333
-Slovenian and Croatian, Additions for 0200
-SMALL CAPITAL B, LATIN LETTER 0299
-SMALL CAPITAL G, LATIN LETTER 0262
-SMALL CAPITAL H, LATIN LETTER 029C
-SMALL CAPITAL I, LATIN LETTER 026A
-SMALL CAPITAL INVERTED R, LATIN LETTER 0281
-SMALL CAPITAL INVERTED R, MODIFIER LETTER 02B6
-SMALL CAPITAL L, LATIN LETTER 029F
-SMALL CAPITAL N, LATIN LETTER 0274
-SMALL CAPITAL OE, LATIN LETTER 0276
-SMALL CAPITAL R, LATIN LETTER 0280
-SMALL CAPITAL Y, LATIN LETTER 028F
-small circle, black 2022
-SMALL CONTAINS AS MEMBER 220D
-SMALL ELEMENT OF 220A
-Small Form Variants FE50
-Small Letters, Armenian 0561
-Small Letters, Cyrillic 0430
-Small Letters, Georgian 10D0
-Small Letters, Greek 03B1
-Small Letters, Latin 0061
-SMILE 2323
-SMILING FACE, BLACK 263B
-SMILING FACE, WHITE 263A
-smooth breathing 0313
-Snowflake Dingbats 2744
-Snowflakes, Stars, Asterisks and 2721
-SNOWMAN 2603
-snowy weather 2603
-SOFT HYPHEN 00AD
-SOFTWARE-FUNCTION SYMBOL 2394
-solid 2588
-SOLIDUS 002F
-solidus 2044
-SOLIDUS OVERLAY, COMBINING LONG 0338
-SOLIDUS OVERLAY, COMBINING SHORT 0337
-SOLIDUS, REVERSE 005C
-SOUND RECORDING COPYRIGHT 2117
-SOURCE, INFORMATION 2139
-SPACE 0020
-SPACE MARK, OGHAM 1680
-SPACE, EM 2003
-SPACE, EN 2002
-SPACE, FIGURE 2007
-SPACE, FOUR-PER-EM 2005
-space, graphic for 2422
-space, graphic for 2423
-space, graphic for no break 237D
-SPACE, HAIR 200A
-SPACE, IDEOGRAPHIC 3000
-space, mid 2005
-SPACE, NARROW NO-BREAK 202F
-SPACE, NO-BREAK 00A0
-SPACE, PUNCTUATION 2008
-SPACE, SIX-PER-EM 2006
-SPACE, SYMBOL FOR 2420
-space, thick 2004
-SPACE, THIN 2009
-SPACE, THREE-PER-EM 2004
-SPACE, ZERO WIDTH 200B
-SPACE, ZERO WIDTH NO-BREAK FEFF
-Spaces 2000
-spacing acute 00B4
-spacing cedilla 00B8
-spacing circumflex 005E
-Spacing Clones of Diacritics 02D8
-spacing diaeresis 00A8
-spacing double underscore 2017
-spacing grave 0060
-spacing macron 00AF
-Spacing Modifier Letters 02B0
-spacing overscore 203E
-spacing underscore 005F
-spanish currency 20A7
-Specials FFF0
-Specials Area, Compatibility and F900
-SPHERICAL ANGLE 2222
-SQUARE BELOW, COMBINING 033B
-SQUARE BRACKET WITH QUILL, LEFT 2045
-square bracket, closing 005D
-SQUARE BRACKET, LEFT 005B
-SQUARE BRACKET, LEFT WHITE 301A
-square bracket, opening 005B
-SQUARE BRACKET, RIGHT 005D
-SQUARE CAP 2293
-SQUARE CORPORATION 337F
-SQUARE CUP 2294
-SQUARE IMAGE OF 228F
-SQUARE LOZENGE 2311
-SQUARE ORIGINAL OF 2290
-SQUARE ROOT 221A
-SQUARE, COMBINING ENCLOSING 20DE
-SQUARE, VIEWDATA 2317
-squared 00B2
-SQUARED DOT OPERATOR 22A1
-Squared Japanese Katakana Words 3300
-Squared Latin Abbreviations 3371
-SQUARED MINUS 229F
-SQUARED PLUS 229E
-SQUARED TIMES 22A0
-Squares 25A0
-SQUAT REVERSED ESH, LATIN SMALL LETTER 0285
-st. andrew's cross 2613
-star 002A
-STAR AND CRESCENT 262A
-Star Dingbats 2726
-STAR EQUALS 225B
-STAR OF DAVID 2721
-STAR OPERATOR 22C6
-STAR, ARABIC FIVE POINTED 066D
-STAR, BLACK 2605
-starburst 273A
-Stars, Asterisks and Snowflakes 2721
-start of guarded area 0096
-start of heading 0001
-START OF HEADING, SYMBOL FOR 2401
-start of selected area 0086
-start of string 0098
-start of text 0002
-START OF TEXT, SYMBOL FOR 2402
-statement is true 22A8
-sterling, pound 00A3
-stile, apl 2223
-straight epsilon 220A
-straight epsilon, reversed 220D
-stress mark 0301
-STRETCHED C, LATIN LETTER 0297
-STRICTLY EQUIVALENT TO 2263
-string terminator 009C
-string, device control 0090
-string, start of 0098
-STROKE OVERLAY, COMBINING LONG 0336
-STROKE OVERLAY, COMBINING SHORT 0335
-SUBGROUP OF, NORMAL 22B2
-SUBGROUP, CONTAINS AS NORMAL 22B3
-Subscript Digits 2080
-SUBSCRIPT EQUALS SIGN 208C
-SUBSCRIPT LEFT PARENTHESIS 208D
-SUBSCRIPT MINUS 208B
-SUBSCRIPT PLUS SIGN 208A
-subscript, iota 0345
-Subscripts 2080
-SUBSET OF 2282
-SUBSET, DOUBLE 22D0
-substitute 001A
-SUBSTITUTE FORM TWO, SYMBOL FOR 2426
-SUBSTITUTE, SYMBOL FOR 241A
-SUCCEEDS 227B
-SUCCEEDS UNDER RELATION 22B1
-such that 220B
-such that 2223
-Suits, Playing Card 2660
-sum, direct 2295
-SUMMATION, N-ARY 2211
-SUN 2609
-SUN WITH RAYS, BLACK 2600
-SUPERSCRIPT ALEF, ARABIC LETTER 0670
-Superscript Digits 2070
-SUPERSCRIPT EQUALS SIGN 207C
-SUPERSCRIPT LEFT PARENTHESIS 207D
-SUPERSCRIPT MINUS 207B
-SUPERSCRIPT ONE 00B9
-SUPERSCRIPT PLUS SIGN 207A
-SUPERSCRIPT THREE 00B3
-SUPERSCRIPT TWO 00B2
-SUPERSCRIPT ZERO 2070
-Superscripts 2070
-Superscripts and Subscripts 2070
-SUPERSET OF 2283
-SUPERSET, DOUBLE 22D1
-SURFACE INTEGRAL 222F
-Surrogates Area D800
-Surrogates, High D800
-Surrogates, Low DC00
-swedish grave accent 02DF
-swung dash 007E
-Syllabics, Unified Canadian Aboriginal 1400
-Syllables Area, Korean Hangul AC00
-Syllables, Yi A000
-Symbol Variants, Fullwidth FFE0
-Symbols and Punctuation, CJK 3000
-Symbols Area 2000
-Symbols Area, CJK Phonetics and 2E00
-Symbols for Control Codes, Graphic 2400
-Symbols, Combining Diacritical Marks for 20D0
-Symbols, Greek 03D0
-Symbols, Letterlike 2100
-Symbols, Miscellaneous 2600
-symmetric difference 2238
-symmetric difference 2296
-SYMMETRIC SWAPPING, ACTIVATE 206B
-SYMMETRIC SWAPPING, INHIBIT 206A
-SYMMETRY 232F
-synchronous idle 0016
-SYNCHRONOUS IDLE, SYMBOL FOR 2416
-Syriac 0700
-SYRIAC CROSS, EAST 2671
-SYRIAC CROSS, WEST 2670
-Syriac Format Control 070F
-T, LATIN SMALL LETTER TURNED 0287
-tab 0009
-tab with shift tab 21B9
-tab, leftward 21E4
-tab, rightward 21E5
-tab, symbol for 2409
-tabulation set, character 0088
-tabulation set, line 008A
-tabulation with justification, character 0089
-tabulation, horizontal 0009
-TABULATION, SYMBOL FOR HORIZONTAL 2409
-TABULATION, SYMBOL FOR VERTICAL 240B
-tabulation, vertical 000B
-TACK BELOW, COMBINING LEFT 0318
-TACK BELOW, COMBINING UP 031D
-TACK, LEFT 22A3
-TACK, MODIFIER LETTER UP 02D4
-TACK, RIGHT 22A2
-TACK, UP 22A5
-tainome (japanese, a kind of bullet) 25C9
-TAKE, PRESCRIPTION 211E
-Tamil 0B80
-Tamil Digits 0BE7
-Tamil Letters 0B85
-TAPE DRIVE 2707
-TAPER, CONICAL 2332
-TAURUS 2649
-tautology 22A8
-Technical, Miscellaneous 2300
-Telegraph Symbols for Days 33E0
-Telegraph Symbols for Hours 3358
-Telegraph Symbols for Months 32C0
-TELEPHONE LOCATION SIGN 2706
-TELEPHONE RECORDER 2315
-TELEPHONE SIGN 2121
-TELEPHONE, BLACK 260E
-Telugu 0C00
-Telugu Digits 0C66
-Telugu Letters 0C05
-TEN THOUSAND SIGN, PER 2031
-tensor 20E1
-tensor product 2297
-terminator, string 009C
-text, end of 0003
-text, start of 0002
-TEXT, SYMBOL FOR END OF 2403
-TEXT, SYMBOL FOR START OF 2402
-Thaana 0780
-Thai 0E00
-THAI CURRENCY SYMBOL BAHT 0E3F
-Thai Digits 0E50
-Thai Letters 0E01
-THERE EXISTS 2203
-THEREFORE 2234
-thick space 2004
-THIN SPACE 2009
-third derivative 20DB
-third transfinite cardinal (functions of a real variable) 2137
-Thirds, Fractions 2153
-THORN, LATIN CAPITAL LETTER 00DE
-THORN, LATIN SMALL LETTER 00FE
-THOUSANDS SEPARATOR, ARABIC 066C
-THOUSANDS SIGN, CYRILLIC 0482
-three dot leader 2026
-THREE DOTS ABOVE, COMBINING 20DB
-THREE QUARTERS, VULGAR FRACTION 00BE
-THREE, SUPERSCRIPT 00B3
-THREE-PER-EM SPACE 2004
-THUNDERSTORM 2608
-Tibetan 0F00
-Tibetan Digits 0F20
-Tibetan Letters 0F40
-Tibetan, Mongolian Extensions for Sanskrit and 1880
-TIE, CHARACTER 2040
-TILDE 007E
-TILDE ABOVE, COMBINING NOT 034A
-TILDE BELOW, COMBINING 0330
-TILDE EQUALS, REVERSED 22CD
-TILDE LEFT HALF, COMBINING DOUBLE FE22
-TILDE OPERATOR 223C
-TILDE OVERLAY, COMBINING 0334
-tilde, apl 223C
-TILDE, COMBINING 0303
-TILDE, COMBINING DOUBLE 0360
-TILDE, COMBINING VERTICAL 033E
-TILDE, MINUS 2242
-TILDE, REVERSED 223D
-TILDE, SMALL 02DC
-TILDE, TRIPLE 224B
-TIMES, CIRCLED 2297
-TIMES, DIVISION 22C7
-TIMES, SQUARED 22A0
-TIRONIAN SIGN ET 204A
-TIS 620-2529 (Thai), Based on 0E01
-Todo Letters, Mongolian 1843
-Tone Bar Letters 02E5
-TONE FIVE, LATIN SMALL LETTER 01BD
-TONE MARK, COMBINING ACUTE 0341
-TONE MARK, COMBINING GRAVE 0340
-Tone Marks, Ideographic 302A
-Tone Marks, Vietnamese 0340
-TONE SIX, LATIN SMALL LETTER 0185
-TONE TWO, LATIN SMALL LETTER 01A8
-tonos 0301
-TONOS, COMBINING GREEK DIALYTIKA 0344
-TOP HALF INTEGRAL 2320
-TOP LEFT CORNER 231C
-TOP LEFT CROP 230F
-TORTOISE SHELL BRACKET, LEFT 3014
-TORTOISE SHELL BRACKET, LEFT WHITE 3018
-TOTAL RUNOUT 2330
-TRADE MARK SIGN 2122
-trade mark sign, registered 00AE
-transfinite cardinal (countable), first 2135
-transfinite cardinal (functions of a real variable), third 2137
-transfinite cardinal (the continuum), second 2136
-transfinite cardinal, fourth 2138
-transmission block, end of 0017
-TRANSMISSION BLOCK, SYMBOL FOR END OF 2417
-transmission, end of 0004
-transmission, graphic for end of 2301
-TRANSMISSION, SYMBOL FOR END OF 2404
-transmit state, set 0093
-TRIANGLE, RIGHT 22BF
-Triangles 25B2
-TRIANGULAR BULLET 2023
-TRIANGULAR COLON, MODIFIER LETTER 02D0
-TRIANGULAR COLON, MODIFIER LETTER HALF 02D1
-Trigram Symbols, Yijing 2630
-trine 25B3
-TRIPLE INTEGRAL 222D
-TRIPLE PRIME 2034
-TRIPLE PRIME, REVERSED 2037
-TRIPLE TILDE 224B
-TRUE 22A8
-TUGRIK SIGN 20AE
-turbofan 274B
-turkish currency 20A4
-TURNED A, LATIN SMALL LETTER 0250
-TURNED ALPHA, LATIN SMALL LETTER 0252
-TURNED CAPITAL F 2132
-TURNED COMMA ABOVE, COMBINING 0312
-turned comma quotation mark, double 201C
-turned comma quotation mark, single 2018
-TURNED COMMA, MODIFIER LETTER 02BB
-TURNED DELTA, LATIN SMALL LETTER 018D
-turned e, latin capital letter 018E
-TURNED E, LATIN SMALL LETTER 01DD
-TURNED GREEK SMALL LETTER IOTA 2129
-TURNED H, LATIN SMALL LETTER 0265
-TURNED K, LATIN SMALL LETTER 029E
-TURNED M, LATIN CAPITAL LETTER 019C
-TURNED M, LATIN SMALL LETTER 026F
-TURNED NOT SIGN 2319
-turned question mark 00BF
-TURNED R, LATIN SMALL LETTER 0279
-TURNED R, MODIFIER LETTER SMALL 02B4
-TURNED T, LATIN SMALL LETTER 0287
-TURNED V, LATIN SMALL LETTER 028C
-TURNED W, LATIN SMALL LETTER 028D
-TURNED Y, LATIN SMALL LETTER 028E
-turnstile 22A2
-turnstile, reverse 22A3
-TWO DOT LEADER 2025
-TWO, SUPERSCRIPT 00B2
-UMBRELLA 2602
-umlaut 0308
-UNASPIRATED, MODIFIER LETTER 02ED
-underline 0332
-UNDERLINE SYMBOL, CONTINUOUS 2381
-UNDERLINE SYMBOL, DISCONTINUOUS 2382
-underline, double 0333
-underscore 0332
-underscore, double 0333
-underscore, spacing 005F
-underscore, spacing double 2017
-Underscores, Overscores and FE49
-UNDERTIE 203F
-UNDO SYMBOL 238C
-undoable delete 2425
-UNION 222A
-UNION, DOUBLE 22D3
-UNION, MULTISET 228E
-UNION, N-ARY 22C3
-unique element 2129
-unit separator 001F
-UNIT SEPARATOR, SYMBOL FOR 241F
-UP ARROWHEAD 2303
-UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS 2324
-UP RIGHT DIAGONAL ELLIPSIS 22F0
-UP TACK 22A5
-UP TACK BELOW, COMBINING 031D
-UP TACK, MODIFIER LETTER 02D4
-up, page 21DE
-UPPER BLADE SCISSORS 2701
-UPPER RIGHT PENCIL 2710
-UPSILON, LATIN CAPITAL LETTER 01B1
-UPSILON, LATIN SMALL LETTER 028A
-upstile, apl 2308
-UPWARDS ARROW BELOW, COMBINING 034E
-URANUS 2645
-urdu paragraph separator 203B
-Urdu, Eastern Arabic-Indic Digits for Persian and 06F0
-V WITH HOOK, LATIN CAPITAL LETTER 01B2
-v, latin capital letter script 01B2
-v, latin small letter script 028B
-V, LATIN SMALL LETTER TURNED 028C
-valentine 2665
-valid 22A8
-varia 0300
-varies with (proportional to) 223C
-vector 20D0
-vector 20D6
-vector pointing into page 2295
-vector pointing into page 2297
-vector pointing out of page 2299
-vee 2228
-vee above 030C
-venus 2640
-VERSICLE 2123
-vertical bar 007C
-Vertical Bar Dingbats 2758
-vertical bar, broken 00A6
-VERTICAL ELLIPSIS 22EE
-VERTICAL KANA REPEAT MARK 3031
-VERTICAL LINE 007C
-VERTICAL LINE ABOVE, COMBINING 030D
-VERTICAL LINE ABOVE, COMBINING DOUBLE 030E
-VERTICAL LINE BELOW, COMBINING 0329
-VERTICAL LINE BELOW, COMBINING DOUBLE 0348
-VERTICAL LINE OVERLAY, COMBINING LONG 20D2
-VERTICAL LINE OVERLAY, COMBINING SHORT 20D3
-VERTICAL LINE WITH MIDDLE DOT 237F
-VERTICAL LINE, DOUBLE 2016
-VERTICAL LINE, MODIFIER LETTER 02C8
-VERTICAL LINE, MODIFIER LETTER LOW 02CC
-vertical tabulation 000B
-VERTICAL TABULATION, SYMBOL FOR 240B
-VERTICAL TILDE, COMBINING 033E
-Vertical Variants, Glyphs for FE30
-VERY MUCH GREATER-THAN 22D9
-VERY MUCH LESS-THAN 22D8
-VICTORY HAND 270C
-vietnamese currency 20AB
-Vietnamese Tone Marks 0340
-Vietnamese, Latin Extensions for 1EA0
-VIEWDATA SQUARE 2317
-vinculum 0305
-VIRAMA, BENGALI SIGN 09CD
-VIRAMA, DEVANAGARI SIGN 094D
-VIRAMA, GUJARATI SIGN 0ACD
-VIRAMA, GURMUKHI SIGN 0A4D
-VIRAMA, KANNADA SIGN 0CCD
-VIRAMA, MALAYALAM SIGN 0D4D
-VIRAMA, ORIYA SIGN 0B4D
-VIRAMA, TAMIL SIGN 0BCD
-VIRAMA, TELUGU SIGN 0C4D
-VIRGO 264D
-virgule 002F
-VOICED FRICATIVE, LATIN LETTER PHARYNGEAL 0295
-VOICED SOUND MARK, COMBINING KATAKANA-HIRAGANA 3099
-VOICED SOUND MARK, KATAKANA-HIRAGANA 309B
-VOICING, MODIFIER LETTER 02EC
-VOLUME INTEGRAL 2230
-vrachy 0306
-W, LATIN SMALL LETTER TURNED 028D
-W, MODIFIER LETTER SMALL 02B7
-Warning Signs 2620
-WATCH 231A
-WAVE DASH 301C
-WAVE, SINE 223F
-WAVY DASH 3030
-WAVY LINE 2307
-WAVY LOW LINE FE4F
-WAVY OVERLINE FE4B
-WAVY OVERLINE, DOUBLE FE4C
-Weather and Astrological Symbols 2600
-wedge 028C
-wedge 2227
-weierstrass elliptic function 2118
-WHEEL OF DHARMA 2638
-WON SIGN 20A9
-Words, Squared Japanese Katakana 3300
-WORDSPACE, ETHIOPIC 1361
-WREATH PRODUCT 2240
-WRITING HAND 270D
-WYNN, LATIN CAPITAL LETTER 01F7
-WYNN, LATIN LETTER 01BF
-X ABOVE, COMBINING 033D
-X IN A RECTANGLE BOX 2327
-X, BALLOT 2717
-X, BALLOT BOX WITH 2612
-X, HEAVY BALLOT 2718
-X, HEAVY MULTIPLICATION 2716
-X, MODIFIER LETTER SMALL 02E3
-X, MULTIPLICATION 2715
-XOR 22BB
-Y, LATIN LETTER SMALL CAPITAL 028F
-Y, LATIN SMALL LETTER TURNED 028E
-Y, MODIFIER LETTER SMALL 02B8
-YANG, YIN 262F
-YEN SIGN 00A5
-Yi Radicals A490
-Yi Syllables A000
-Yiddish Digraphs 05F0
-yields 22A2
-Yijing Trigram Symbols 2630
-YIN YANG 262F
-yogh, latin capital letter 01B7
-YOGH, LATIN SMALL LETTER 021D
-yogh, latin small letter 0292
-YPOGEGRAMMENI, COMBINING GREEK 0345
-YR, LATIN LETTER 01A6
-yuan sign 00A5
-Z, BLACK-LETTER CAPITAL 2128
-Z, DOUBLE-STRUCK CAPITAL 2124
-Zapf Dingbats Series 100, ITC 2700
-ZERO WIDTH JOINER 200D
-ZERO WIDTH NO-BREAK SPACE FEFF
-ZERO WIDTH NON-JOINER 200C
-ZERO WIDTH SPACE 200B
-ZERO, CIRCLED DIGIT 24EA
-ZERO, IDEOGRAPHIC NUMBER 3007
-ZERO, SUPERSCRIPT 2070
-Zodiacal Symbols 2648
-zwj 200D
-zwnj 200C
diff --git a/contrib/perl5/lib/unicode/Is/ASCII.pl b/contrib/perl5/lib/unicode/Is/ASCII.pl
deleted file mode 100644
index 1434a55..0000000
--- a/contrib/perl5/lib/unicode/Is/ASCII.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 007f
-END
diff --git a/contrib/perl5/lib/unicode/Is/Alnum.pl b/contrib/perl5/lib/unicode/Is/Alnum.pl
deleted file mode 100644
index a0aac62..0000000
--- a/contrib/perl5/lib/unicode/Is/Alnum.pl
+++ /dev/null
@@ -1,358 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039
-0041 005a
-0061 007a
-00aa
-00b2 00b3
-00b5
-00b9 00ba
-00bc 00be
-00c0 00d6
-00d8 00f6
-00f8 021f
-0222 0233
-0250 02ad
-02b0 02b8
-02bb 02c1
-02d0 02d1
-02e0 02e4
-02ee
-0300 034e
-0360 0362
-037a
-0386
-0388 038a
-038c
-038e 03a1
-03a3 03ce
-03d0 03d7
-03da 03f3
-0400 0481
-0483 0486
-0488 0489
-048c 04c4
-04c7 04c8
-04cb 04cc
-04d0 04f5
-04f8 04f9
-0531 0556
-0559
-0561 0587
-0591 05a1
-05a3 05b9
-05bb 05bd
-05bf
-05c1 05c2
-05c4
-05d0 05ea
-05f0 05f2
-0621 063a
-0640 0655
-0660 0669
-0670 06d3
-06d5 06e8
-06ea 06ed
-06f0 06fc
-0710 072c
-0730 074a
-0780 07b0
-0901 0903
-0905 0939
-093c 094d
-0950 0954
-0958 0963
-0966 096f
-0981 0983
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09bc
-09be 09c4
-09c7 09c8
-09cb 09cd
-09d7
-09dc 09dd
-09df 09e3
-09e6 09f1
-09f4 09f9
-0a02
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a3c
-0a3e 0a42
-0a47 0a48
-0a4b 0a4d
-0a59 0a5c
-0a5e
-0a66 0a74
-0a81 0a83
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abc 0ac5
-0ac7 0ac9
-0acb 0acd
-0ad0
-0ae0
-0ae6 0aef
-0b01 0b03
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3c 0b43
-0b47 0b48
-0b4b 0b4d
-0b56 0b57
-0b5c 0b5d
-0b5f 0b61
-0b66 0b6f
-0b82 0b83
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0bbe 0bc2
-0bc6 0bc8
-0bca 0bcd
-0bd7
-0be7 0bf2
-0c01 0c03
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c3e 0c44
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0c60 0c61
-0c66 0c6f
-0c82 0c83
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cbe 0cc4
-0cc6 0cc8
-0cca 0ccd
-0cd5 0cd6
-0cde
-0ce0 0ce1
-0ce6 0cef
-0d02 0d03
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d3e 0d43
-0d46 0d48
-0d4a 0d4d
-0d57
-0d60 0d61
-0d66 0d6f
-0d82 0d83
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0dca
-0dcf 0dd4
-0dd6
-0dd8 0ddf
-0df2 0df3
-0e01 0e3a
-0e40 0e4e
-0e50 0e59
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb9
-0ebb 0ebd
-0ec0 0ec4
-0ec6
-0ec8 0ecd
-0ed0 0ed9
-0edc 0edd
-0f00
-0f18 0f19
-0f20 0f33
-0f35
-0f37
-0f39
-0f3e 0f47
-0f49 0f6a
-0f71 0f84
-0f86 0f8b
-0f90 0f97
-0f99 0fbc
-0fc6
-1000 1021
-1023 1027
-1029 102a
-102c 1032
-1036 1039
-1040 1049
-1050 1059
-10a0 10c5
-10d0 10f6
-1100 1159
-115f 11a2
-11a8 11f9
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-1369 137c
-13a0 13f4
-1401 166c
-166f 1676
-1681 169a
-16a0 16ea
-16ee 16f0
-1780 17d3
-17e0 17e9
-1810 1819
-1820 1877
-1880 18a9
-1e00 1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fbc
-1fbe
-1fc2 1fc4
-1fc6 1fcc
-1fd0 1fd3
-1fd6 1fdb
-1fe0 1fec
-1ff2 1ff4
-1ff6 1ffc
-2070
-2074 2079
-207f 2089
-20d0 20e3
-2102
-2107
-210a 2113
-2115
-2119 211d
-2124
-2126
-2128
-212a 212d
-212f 2131
-2133 2139
-2153 2183
-2460 249b
-24ea
-2776 2793
-3005 3007
-3021 302f
-3031 3035
-3038 303a
-3041 3094
-3099 309a
-309d 309e
-30a1 30fa
-30fc 30fe
-3105 312c
-3131 318e
-3192 3195
-31a0 31b7
-3220 3229
-3280 3289
-3400 4db5
-4e00 9fa5
-a000 a48c
-ac00 d7a3
-f900 fa2d
-fb00 fb06
-fb13 fb17
-fb1d fb28
-fb2a fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fbb1
-fbd3 fd3d
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe20 fe23
-fe70 fe72
-fe74
-fe76 fefc
-ff10 ff19
-ff21 ff3a
-ff41 ff5a
-ff66 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-END
diff --git a/contrib/perl5/lib/unicode/Is/Alpha.pl b/contrib/perl5/lib/unicode/Is/Alpha.pl
deleted file mode 100644
index 13dc003..0000000
--- a/contrib/perl5/lib/unicode/Is/Alpha.pl
+++ /dev/null
@@ -1,327 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0041 005a
-0061 007a
-00aa
-00b5
-00ba
-00c0 00d6
-00d8 00f6
-00f8 021f
-0222 0233
-0250 02ad
-02b0 02b8
-02bb 02c1
-02d0 02d1
-02e0 02e4
-02ee
-0300 034e
-0360 0362
-037a
-0386
-0388 038a
-038c
-038e 03a1
-03a3 03ce
-03d0 03d7
-03da 03f3
-0400 0481
-0483 0486
-0488 0489
-048c 04c4
-04c7 04c8
-04cb 04cc
-04d0 04f5
-04f8 04f9
-0531 0556
-0559
-0561 0587
-0591 05a1
-05a3 05b9
-05bb 05bd
-05bf
-05c1 05c2
-05c4
-05d0 05ea
-05f0 05f2
-0621 063a
-0640 0655
-0670 06d3
-06d5 06e8
-06ea 06ed
-06fa 06fc
-0710 072c
-0730 074a
-0780 07b0
-0901 0903
-0905 0939
-093c 094d
-0950 0954
-0958 0963
-0981 0983
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09bc
-09be 09c4
-09c7 09c8
-09cb 09cd
-09d7
-09dc 09dd
-09df 09e3
-09f0 09f1
-0a02
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a3c
-0a3e 0a42
-0a47 0a48
-0a4b 0a4d
-0a59 0a5c
-0a5e
-0a70 0a74
-0a81 0a83
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abc 0ac5
-0ac7 0ac9
-0acb 0acd
-0ad0
-0ae0
-0b01 0b03
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3c 0b43
-0b47 0b48
-0b4b 0b4d
-0b56 0b57
-0b5c 0b5d
-0b5f 0b61
-0b82 0b83
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0bbe 0bc2
-0bc6 0bc8
-0bca 0bcd
-0bd7
-0c01 0c03
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c3e 0c44
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0c60 0c61
-0c82 0c83
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cbe 0cc4
-0cc6 0cc8
-0cca 0ccd
-0cd5 0cd6
-0cde
-0ce0 0ce1
-0d02 0d03
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d3e 0d43
-0d46 0d48
-0d4a 0d4d
-0d57
-0d60 0d61
-0d82 0d83
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0dca
-0dcf 0dd4
-0dd6
-0dd8 0ddf
-0df2 0df3
-0e01 0e3a
-0e40 0e4e
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb9
-0ebb 0ebd
-0ec0 0ec4
-0ec6
-0ec8 0ecd
-0edc 0edd
-0f00
-0f18 0f19
-0f35
-0f37
-0f39
-0f3e 0f47
-0f49 0f6a
-0f71 0f84
-0f86 0f8b
-0f90 0f97
-0f99 0fbc
-0fc6
-1000 1021
-1023 1027
-1029 102a
-102c 1032
-1036 1039
-1050 1059
-10a0 10c5
-10d0 10f6
-1100 1159
-115f 11a2
-11a8 11f9
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-13a0 13f4
-1401 166c
-166f 1676
-1681 169a
-16a0 16ea
-1780 17d3
-1820 1877
-1880 18a9
-1e00 1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fbc
-1fbe
-1fc2 1fc4
-1fc6 1fcc
-1fd0 1fd3
-1fd6 1fdb
-1fe0 1fec
-1ff2 1ff4
-1ff6 1ffc
-207f
-20d0 20e3
-2102
-2107
-210a 2113
-2115
-2119 211d
-2124
-2126
-2128
-212a 212d
-212f 2131
-2133 2139
-3005 3006
-302a 302f
-3031 3035
-3041 3094
-3099 309a
-309d 309e
-30a1 30fa
-30fc 30fe
-3105 312c
-3131 318e
-31a0 31b7
-3400 4db5
-4e00 9fa5
-a000 a48c
-ac00 d7a3
-f900 fa2d
-fb00 fb06
-fb13 fb17
-fb1d fb28
-fb2a fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fbb1
-fbd3 fd3d
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe20 fe23
-fe70 fe72
-fe74
-fe76 fefc
-ff21 ff3a
-ff41 ff5a
-ff66 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiAL.pl b/contrib/perl5/lib/unicode/Is/BidiAL.pl
deleted file mode 100644
index a8d43b8..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiAL.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-061b
-061f
-0621 063a
-0640 064a
-066d
-0671 06d5
-06e5 06e6
-06fa 06fe
-0700 070d
-0710
-0712 072c
-0780 07a5
-fb50 fbb1
-fbd3 fd3d
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe70 fe72
-fe74
-fe76 fefc
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiAN.pl b/contrib/perl5/lib/unicode/Is/BidiAN.pl
deleted file mode 100644
index 4519c6d..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiAN.pl
+++ /dev/null
@@ -1,7 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0660 0669
-066b 066c
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiB.pl b/contrib/perl5/lib/unicode/Is/BidiB.pl
deleted file mode 100644
index 33bdb45..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiB.pl
+++ /dev/null
@@ -1,10 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-000a
-000d
-001c 001e
-0085
-2029
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiBN.pl b/contrib/perl5/lib/unicode/Is/BidiBN.pl
deleted file mode 100644
index 75b8871..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiBN.pl
+++ /dev/null
@@ -1,15 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 0008
-000e 001b
-007f 0084
-0086 009f
-070f
-180b 180e
-200b 200d
-206a 206f
-feff
-fff9 fffb
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiCS.pl b/contrib/perl5/lib/unicode/Is/BidiCS.pl
deleted file mode 100644
index e217653..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiCS.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-002c
-002e
-003a
-00a0
-060c
-fe50
-fe52
-fe55
-ff0c
-ff0e
-ff1a
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiEN.pl b/contrib/perl5/lib/unicode/Is/BidiEN.pl
deleted file mode 100644
index 113de87..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiEN.pl
+++ /dev/null
@@ -1,15 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039
-00b2 00b3
-00b9
-06f0 06f9
-2070
-2074 2079
-2080 2089
-2460 249b
-24ea
-ff10 ff19
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiES.pl b/contrib/perl5/lib/unicode/Is/BidiES.pl
deleted file mode 100644
index d1cd305..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiES.pl
+++ /dev/null
@@ -1,7 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-002f
-ff0f
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiET.pl b/contrib/perl5/lib/unicode/Is/BidiET.pl
deleted file mode 100644
index 0a66fa8..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiET.pl
+++ /dev/null
@@ -1,29 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0023 0025
-002b
-002d
-00a2 00a5
-00b0 00b1
-066a
-09f2 09f3
-0e3f
-17db
-2030 2034
-207a 207b
-208a 208b
-20a0 20af
-212e
-2212 2213
-fb29
-fe5f
-fe62 fe63
-fe69 fe6a
-ff03 ff05
-ff0b
-ff0d
-ffe0 ffe1
-ffe5 ffe6
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiL.pl b/contrib/perl5/lib/unicode/Is/BidiL.pl
deleted file mode 100644
index a08d8b8..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiL.pl
+++ /dev/null
@@ -1,325 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0041 005a
-0061 007a
-00aa
-00b5
-00ba
-00c0 00d6
-00d8 00f6
-00f8 021f
-0222 0233
-0250 02ad
-02b0 02b8
-02bb 02c1
-02d0 02d1
-02e0 02e4
-02ee
-037a
-0386
-0388 038a
-038c
-038e 03a1
-03a3 03ce
-03d0 03d7
-03da 03f3
-0400 0482
-048c 04c4
-04c7 04c8
-04cb 04cc
-04d0 04f5
-04f8 04f9
-0531 0556
-0559 055f
-0561 0587
-0589
-0903
-0905 0939
-093d 0940
-0949 094c
-0950
-0958 0961
-0964 0970
-0982 0983
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09be 09c0
-09c7 09c8
-09cb 09cc
-09d7
-09dc 09dd
-09df 09e1
-09e6 09f1
-09f4 09fa
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a3e 0a40
-0a59 0a5c
-0a5e
-0a66 0a6f
-0a72 0a74
-0a83
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abd 0ac0
-0ac9
-0acb 0acc
-0ad0
-0ae0
-0ae6 0aef
-0b02 0b03
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3d 0b3e
-0b40
-0b47 0b48
-0b4b 0b4c
-0b57
-0b5c 0b5d
-0b5f 0b61
-0b66 0b70
-0b83
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0bbe 0bbf
-0bc1 0bc2
-0bc6 0bc8
-0bca 0bcc
-0bd7
-0be7 0bf2
-0c01 0c03
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c41 0c44
-0c60 0c61
-0c66 0c6f
-0c82 0c83
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cbe
-0cc0 0cc4
-0cc7 0cc8
-0cca 0ccb
-0cd5 0cd6
-0cde
-0ce0 0ce1
-0ce6 0cef
-0d02 0d03
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d3e 0d40
-0d46 0d48
-0d4a 0d4c
-0d57
-0d60 0d61
-0d66 0d6f
-0d82 0d83
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0dcf 0dd1
-0dd8 0ddf
-0df2 0df4
-0e01 0e30
-0e32 0e33
-0e40 0e46
-0e4f 0e5b
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb0
-0eb2 0eb3
-0ebd
-0ec0 0ec4
-0ec6
-0ed0 0ed9
-0edc 0edd
-0f00 0f17
-0f1a 0f34
-0f36
-0f38
-0f3e 0f47
-0f49 0f6a
-0f7f
-0f85
-0f88 0f8b
-0fbe 0fc5
-0fc7 0fcc
-0fcf
-1000 1021
-1023 1027
-1029 102a
-102c
-1031
-1038
-1040 1057
-10a0 10c5
-10d0 10f6
-10fb
-1100 1159
-115f 11a2
-11a8 11f9
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-1361 137c
-13a0 13f4
-1401 1676
-1681 169a
-16a0 16f0
-1780 17b6
-17be 17c5
-17c7 17c8
-17d4 17da
-17dc
-17e0 17e9
-1810 1819
-1820 1877
-1880 18a8
-1e00 1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fbc
-1fbe
-1fc2 1fc4
-1fc6 1fcc
-1fd0 1fd3
-1fd6 1fdb
-1fe0 1fec
-1ff2 1ff4
-1ff6 1ffc
-200e
-207f
-2102
-2107
-210a 2113
-2115
-2119 211d
-2124
-2126
-2128
-212a 212d
-212f 2131
-2133 2139
-2160 2183
-2336 237a
-2395
-249c 24e9
-3005 3007
-3021 3029
-3031 3035
-3038 303a
-3041 3094
-309d 309e
-30a1 30fa
-30fc 30fe
-3105 312c
-3131 318e
-3190 31b7
-3200 321c
-3220 3243
-3260 327b
-327f 32b0
-32c0 32cb
-32d0 32fe
-3300 3376
-337b 33dd
-33e0 33fe
-3400 4db5
-4e00 9fa5
-a000 a48c
-ac00 d7a3
-d800 db7f
-db80 dbff
-dc00 dfff
-e000 f8ff
-f900 fa2d
-fb00 fb06
-fb13 fb17
-ff21 ff3a
-ff41 ff5a
-ff66 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-f0000 ffffd
-100000 10fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiLRE.pl b/contrib/perl5/lib/unicode/Is/BidiLRE.pl
deleted file mode 100644
index 2570421..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiLRE.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-202a
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiLRO.pl b/contrib/perl5/lib/unicode/Is/BidiLRO.pl
deleted file mode 100644
index 721a223..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiLRO.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-202d
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiNSM.pl b/contrib/perl5/lib/unicode/Is/BidiNSM.pl
deleted file mode 100644
index a5c3af4..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiNSM.pl
+++ /dev/null
@@ -1,97 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0300 034e
-0360 0362
-0483 0486
-0488 0489
-0591 05a1
-05a3 05b9
-05bb 05bd
-05bf
-05c1 05c2
-05c4
-064b 0655
-0670
-06d6 06e4
-06e7 06e8
-06ea 06ed
-0711
-0730 074a
-07a6 07b0
-0901 0902
-093c
-0941 0948
-094d
-0951 0954
-0962 0963
-0981
-09bc
-09c1 09c4
-09cd
-09e2 09e3
-0a02
-0a3c
-0a41 0a42
-0a47 0a48
-0a4b 0a4d
-0a70 0a71
-0a81 0a82
-0abc
-0ac1 0ac5
-0ac7 0ac8
-0acd
-0b01
-0b3c
-0b3f
-0b41 0b43
-0b4d
-0b56
-0b82
-0bc0
-0bcd
-0c3e 0c40
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0cbf
-0cc6
-0ccc 0ccd
-0d41 0d43
-0d4d
-0dca
-0dd2 0dd4
-0dd6
-0e31
-0e34 0e3a
-0e47 0e4e
-0eb1
-0eb4 0eb9
-0ebb 0ebc
-0ec8 0ecd
-0f18 0f19
-0f35
-0f37
-0f39
-0f71 0f7e
-0f80 0f84
-0f86 0f87
-0f90 0f97
-0f99 0fbc
-0fc6
-102d 1030
-1032
-1036 1037
-1039
-1058 1059
-17b7 17bd
-17c6
-17c9 17d3
-18a9
-20d0 20e3
-302a 302f
-3099 309a
-fb1e
-fe20 fe23
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiON.pl b/contrib/perl5/lib/unicode/Is/BidiON.pl
deleted file mode 100644
index ec0f18f..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiON.pl
+++ /dev/null
@@ -1,115 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0021 0022
-0026 002a
-003b 0040
-005b 0060
-007b 007e
-00a1
-00a6 00a9
-00ab 00af
-00b4
-00b6 00b8
-00bb 00bf
-00d7
-00f7
-02b9 02ba
-02c2 02cf
-02d2 02df
-02e5 02ed
-0374 0375
-037e
-0384 0385
-0387
-058a
-06e9
-0f3a 0f3d
-169b 169c
-1800 180a
-1fbd
-1fbf 1fc1
-1fcd 1fcf
-1fdd 1fdf
-1fed 1fef
-1ffd 1ffe
-2010 2027
-2035 2046
-2048 204d
-207c 207e
-208c 208e
-2100 2101
-2103 2106
-2108 2109
-2114
-2116 2118
-211e 2123
-2125
-2127
-2129
-2132
-213a
-2153 215f
-2190 21f3
-2200 2211
-2214 22f1
-2300 2335
-237b
-237d 2394
-2396 239a
-2400 2426
-2440 244a
-2500 2595
-25a0 25f7
-2600 2613
-2619 2671
-2701 2704
-2706 2709
-270c 2727
-2729 274b
-274d
-274f 2752
-2756
-2758 275e
-2761 2767
-2776 2794
-2798 27af
-27b1 27be
-2800 28ff
-2e80 2e99
-2e9b 2ef3
-2f00 2fd5
-2ff0 2ffb
-3001 3004
-3008 3020
-3030
-3036 3037
-303e 303f
-309b 309c
-30fb
-a490 a4a1
-a4a4 a4b3
-a4b5 a4c0
-a4c2 a4c4
-a4c6
-fd3e fd3f
-fe30 fe44
-fe49 fe4f
-fe51
-fe54
-fe56 fe5e
-fe60 fe61
-fe64 fe66
-fe68
-fe6b
-ff01 ff02
-ff06 ff0a
-ff1b ff20
-ff3b ff40
-ff5b ff5e
-ff61 ff65
-ffe2 ffe4
-ffe8 ffee
-fffc fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiPDF.pl b/contrib/perl5/lib/unicode/Is/BidiPDF.pl
deleted file mode 100644
index 20e3d9d..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiPDF.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-202c
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiR.pl b/contrib/perl5/lib/unicode/Is/BidiR.pl
deleted file mode 100644
index 9f776ae..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiR.pl
+++ /dev/null
@@ -1,19 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-05be
-05c0
-05c3
-05d0 05ea
-05f0 05f4
-200f
-fb1d
-fb1f fb28
-fb2a fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fb4f
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiRLE.pl b/contrib/perl5/lib/unicode/Is/BidiRLE.pl
deleted file mode 100644
index eaf7ab7..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiRLE.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-202b
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiRLO.pl b/contrib/perl5/lib/unicode/Is/BidiRLO.pl
deleted file mode 100644
index 8974dd9..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiRLO.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-202e
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiS.pl b/contrib/perl5/lib/unicode/Is/BidiS.pl
deleted file mode 100644
index ac2655d..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiS.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0009
-000b
-001f
-END
diff --git a/contrib/perl5/lib/unicode/Is/BidiWS.pl b/contrib/perl5/lib/unicode/Is/BidiWS.pl
deleted file mode 100644
index ebd24e5..0000000
--- a/contrib/perl5/lib/unicode/Is/BidiWS.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-000c
-0020
-1680
-2000 200a
-2028
-202f
-3000
-END
diff --git a/contrib/perl5/lib/unicode/Is/Blank.pl b/contrib/perl5/lib/unicode/Is/Blank.pl
deleted file mode 100644
index 8642921..0000000
--- a/contrib/perl5/lib/unicode/Is/Blank.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0009
-0020
-00a0
-1680
-2000 200b
-202f
-3000
-END
diff --git a/contrib/perl5/lib/unicode/Is/C.pl b/contrib/perl5/lib/unicode/Is/C.pl
deleted file mode 100644
index 51e4ede..0000000
--- a/contrib/perl5/lib/unicode/Is/C.pl
+++ /dev/null
@@ -1,20 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 001f
-007f 009f
-070f
-180b 180e
-200c 200f
-202a 202e
-206a 206f
-d800 db7f
-db80 dbff
-dc00 dfff
-e000 f8ff
-feff
-fff9 fffb
-f0000 ffffd
-100000 10fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/Cc.pl b/contrib/perl5/lib/unicode/Is/Cc.pl
deleted file mode 100644
index 6b97adc..0000000
--- a/contrib/perl5/lib/unicode/Is/Cc.pl
+++ /dev/null
@@ -1,7 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 001f
-007f 009f
-END
diff --git a/contrib/perl5/lib/unicode/Is/Cf.pl b/contrib/perl5/lib/unicode/Is/Cf.pl
deleted file mode 100644
index cef5ac4..0000000
--- a/contrib/perl5/lib/unicode/Is/Cf.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-070f
-180b 180e
-200c 200f
-202a 202e
-206a 206f
-feff
-fff9 fffb
-END
diff --git a/contrib/perl5/lib/unicode/Is/Cn.pl b/contrib/perl5/lib/unicode/Is/Cn.pl
deleted file mode 100644
index fb75e87..0000000
--- a/contrib/perl5/lib/unicode/Is/Cn.pl
+++ /dev/null
@@ -1,373 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0220 0221
-0234 024f
-02ae 02af
-02ef 02ff
-034f 035f
-0363 0373
-0376 0379
-037b 037d
-037f 0383
-038b
-038d
-03a2
-03cf
-03d8 03d9
-03f4 03ff
-0487
-048a 048b
-04c5 04c6
-04c9 04ca
-04cd 04cf
-04f6 04f7
-04fa 0530
-0557 0558
-0560
-0588
-058b 0590
-05a2
-05ba
-05c5 05cf
-05eb 05ef
-05f5 060b
-060d 061a
-061c 061e
-0620
-063b 063f
-0656 065f
-066e 066f
-06ee 06ef
-06ff
-070e
-072d 072f
-074b 077f
-07b1 0900
-0904
-093a 093b
-094e 094f
-0955 0957
-0971 0980
-0984
-098d 098e
-0991 0992
-09a9
-09b1
-09b3 09b5
-09ba 09bb
-09bd
-09c5 09c6
-09c9 09ca
-09ce 09d6
-09d8 09db
-09de
-09e4 09e5
-09fb 0a01
-0a03 0a04
-0a0b 0a0e
-0a11 0a12
-0a29
-0a31
-0a34
-0a37
-0a3a 0a3b
-0a3d
-0a43 0a46
-0a49 0a4a
-0a4e 0a58
-0a5d
-0a5f 0a65
-0a75 0a80
-0a84
-0a8c
-0a8e
-0a92
-0aa9
-0ab1
-0ab4
-0aba 0abb
-0ac6
-0aca
-0ace 0acf
-0ad1 0adf
-0ae1 0ae5
-0af0 0b00
-0b04
-0b0d 0b0e
-0b11 0b12
-0b29
-0b31
-0b34 0b35
-0b3a 0b3b
-0b44 0b46
-0b49 0b4a
-0b4e 0b55
-0b58 0b5b
-0b5e
-0b62 0b65
-0b71 0b81
-0b84
-0b8b 0b8d
-0b91
-0b96 0b98
-0b9b
-0b9d
-0ba0 0ba2
-0ba5 0ba7
-0bab 0bad
-0bb6
-0bba 0bbd
-0bc3 0bc5
-0bc9
-0bce 0bd6
-0bd8 0be6
-0bf3 0c00
-0c04
-0c0d
-0c11
-0c29
-0c34
-0c3a 0c3d
-0c45
-0c49
-0c4e 0c54
-0c57 0c5f
-0c62 0c65
-0c70 0c81
-0c84
-0c8d
-0c91
-0ca9
-0cb4
-0cba 0cbd
-0cc5
-0cc9
-0cce 0cd4
-0cd7 0cdd
-0cdf
-0ce2 0ce5
-0cf0 0d01
-0d04
-0d0d
-0d11
-0d29
-0d3a 0d3d
-0d44 0d45
-0d49
-0d4e 0d56
-0d58 0d5f
-0d62 0d65
-0d70 0d81
-0d84
-0d97 0d99
-0db2
-0dbc
-0dbe 0dbf
-0dc7 0dc9
-0dcb 0dce
-0dd5
-0dd7
-0de0 0df1
-0df5 0e00
-0e3b 0e3e
-0e5c 0e80
-0e83
-0e85 0e86
-0e89
-0e8b 0e8c
-0e8e 0e93
-0e98
-0ea0
-0ea4
-0ea6
-0ea8 0ea9
-0eac
-0eba
-0ebe 0ebf
-0ec5
-0ec7
-0ece 0ecf
-0eda 0edb
-0ede 0eff
-0f48
-0f6b 0f70
-0f8c 0f8f
-0f98
-0fbd
-0fcd 0fce
-0fd0 0fff
-1022
-1028
-102b
-1033 1035
-103a 103f
-105a 109f
-10c6 10cf
-10f7 10fa
-10fc 10ff
-115a 115e
-11a3 11a7
-11fa 11ff
-1207
-1247
-1249
-124e 124f
-1257
-1259
-125e 125f
-1287
-1289
-128e 128f
-12af
-12b1
-12b6 12b7
-12bf
-12c1
-12c6 12c7
-12cf
-12d7
-12ef
-130f
-1311
-1316 1317
-131f
-1347
-135b 1360
-137d 139f
-13f5 1400
-1677 167f
-169d 169f
-16f1 177f
-17dd 17df
-17ea 17ff
-180f
-181a 181f
-1878 187f
-18aa 1dff
-1e9c 1e9f
-1efa 1eff
-1f16 1f17
-1f1e 1f1f
-1f46 1f47
-1f4e 1f4f
-1f58
-1f5a
-1f5c
-1f5e
-1f7e 1f7f
-1fb5
-1fc5
-1fd4 1fd5
-1fdc
-1ff0 1ff1
-1ff5
-1fff
-2047
-204e 2069
-2071 2073
-208f 209f
-20b0 20cf
-20e4 20ff
-213b 2152
-2184 218f
-21f4 21ff
-22f2 22ff
-237c
-239b 23ff
-2427 243f
-244b 245f
-24eb 24ff
-2596 259f
-25f8 25ff
-2614 2618
-2672 2700
-2705
-270a 270b
-2728
-274c
-274e
-2753 2755
-2757
-275f 2760
-2768 2775
-2795 2797
-27b0
-27bf 27ff
-2900 2e7f
-2e9a
-2ef4 2eff
-2fd6 2fef
-2ffc 2fff
-303b 303d
-3040
-3095 3098
-309f 30a0
-30ff 3104
-312d 3130
-318f
-31b8 31ff
-321d 321f
-3244 325f
-327c 327e
-32b1 32bf
-32cc 32cf
-32ff
-3377 337a
-33de 33df
-33ff
-4db6 4dff
-9fa6 9fff
-a48d a48f
-a4a2 a4a3
-a4b4
-a4c1
-a4c5
-a4c7 abff
-d7a4 d7ff
-fa2e faff
-fb07 fb12
-fb18 fb1c
-fb37
-fb3d
-fb3f
-fb42
-fb45
-fbb2 fbd2
-fd40 fd4f
-fd90 fd91
-fdc8 fdef
-fdfc fe1f
-fe24 fe2f
-fe45 fe48
-fe53
-fe67
-fe6c fe6f
-fe73
-fe75
-fefd fefe
-ff00
-ff5f ff60
-ffbf ffc1
-ffc8 ffc9
-ffd0 ffd1
-ffd8 ffd9
-ffdd ffdf
-ffe7
-ffef fff8
-10000 1fffd
-20000 2fffd
-30000 3fffd
-40000 4fffd
-50000 5fffd
-60000 6fffd
-70000 7fffd
-80000 8fffd
-90000 9fffd
-a0000 afffd
-b0000 bfffd
-c0000 cfffd
-d0000 dfffd
-e0000 efffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/Cntrl.pl b/contrib/perl5/lib/unicode/Is/Cntrl.pl
deleted file mode 100644
index 51e4ede..0000000
--- a/contrib/perl5/lib/unicode/Is/Cntrl.pl
+++ /dev/null
@@ -1,20 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 001f
-007f 009f
-070f
-180b 180e
-200c 200f
-202a 202e
-206a 206f
-d800 db7f
-db80 dbff
-dc00 dfff
-e000 f8ff
-feff
-fff9 fffb
-f0000 ffffd
-100000 10fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/Co.pl b/contrib/perl5/lib/unicode/Is/Co.pl
deleted file mode 100644
index d077fd2..0000000
--- a/contrib/perl5/lib/unicode/Is/Co.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-e000 f8ff
-f0000 ffffd
-100000 10fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/Cs.pl b/contrib/perl5/lib/unicode/Is/Cs.pl
deleted file mode 100644
index 33e1dac..0000000
--- a/contrib/perl5/lib/unicode/Is/Cs.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-d800 db7f
-db80 dbff
-dc00 dfff
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCcircle.pl b/contrib/perl5/lib/unicode/Is/DCcircle.pl
deleted file mode 100644
index 82c9edc..0000000
--- a/contrib/perl5/lib/unicode/Is/DCcircle.pl
+++ /dev/null
@@ -1,10 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2460 2473
-24b6 24ea
-3260 327b
-3280 32b0
-32d0 32fe
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCcompat.pl b/contrib/perl5/lib/unicode/Is/DCcompat.pl
deleted file mode 100644
index 5ae2b6a..0000000
--- a/contrib/perl5/lib/unicode/Is/DCcompat.pl
+++ /dev/null
@@ -1,69 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00a8
-00af
-00b4 00b5
-00b8
-0132 0133
-013f 0140
-0149
-017f
-01c4 01cc
-01f1 01f3
-02d8 02dd
-037a
-0384
-03d0 03d2
-03d5 03d6
-03f0 03f2
-0587
-0675 0678
-0e33
-0eb3
-0edc 0edd
-0f77
-0f79
-1e9a
-1fbd
-1fbf 1fc0
-1ffe
-2002 2006
-2008 200a
-2017
-2024 2026
-2033 2034
-2036 2037
-203c
-203e
-2048 2049
-20a8
-2100 2101
-2103
-2105 2107
-2109
-2116
-2121
-2135 2138
-2160 217f
-222c 222d
-222f 2230
-2474 24b5
-2e9f
-2ef3
-2f00 2fd5
-3036
-3038 303a
-309b 309c
-3131 318e
-3200 321c
-3220 3243
-32c0 32cb
-3358 3370
-33e0 33fe
-fb00 fb06
-fb13 fb17
-fb4f
-fe49 fe4f
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCfinal.pl b/contrib/perl5/lib/unicode/Is/DCfinal.pl
deleted file mode 100644
index 3c81bcc..0000000
--- a/contrib/perl5/lib/unicode/Is/DCfinal.pl
+++ /dev/null
@@ -1,118 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-fb51
-fb53
-fb57
-fb5b
-fb5f
-fb63
-fb67
-fb6b
-fb6f
-fb73
-fb77
-fb7b
-fb7f
-fb83
-fb85
-fb87
-fb89
-fb8b
-fb8d
-fb8f
-fb93
-fb97
-fb9b
-fb9f
-fba1
-fba5
-fba7
-fbab
-fbaf
-fbb1
-fbd4
-fbd8
-fbda
-fbdc
-fbdf
-fbe1
-fbe3
-fbe5
-fbeb
-fbed
-fbef
-fbf1
-fbf3
-fbf5
-fbf7
-fbfa
-fbfd
-fc64 fc96
-fd11 fd2c
-fd3c
-fd51
-fd58
-fd5a fd5b
-fd5e fd5f
-fd62
-fd64
-fd66 fd67
-fd69 fd6a
-fd6c
-fd6e fd6f
-fd71
-fd74 fd76
-fd78 fd7c
-fd7e fd82
-fd84 fd85
-fd87
-fd8b
-fd96 fd97
-fd99 fd9c
-fd9e fdb3
-fdb6 fdb7
-fdb9
-fdbb fdc2
-fdc6 fdc7
-fe82
-fe84
-fe86
-fe88
-fe8a
-fe8e
-fe90
-fe94
-fe96
-fe9a
-fe9e
-fea2
-fea6
-feaa
-feac
-feae
-feb0
-feb2
-feb6
-feba
-febe
-fec2
-fec6
-feca
-fece
-fed2
-fed6
-feda
-fede
-fee2
-fee6
-feea
-feee
-fef0
-fef2
-fef6
-fef8
-fefa
-fefc
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCfont.pl b/contrib/perl5/lib/unicode/Is/DCfont.pl
deleted file mode 100644
index 7feff18..0000000
--- a/contrib/perl5/lib/unicode/Is/DCfont.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2102
-210a 2113
-2115
-2119 211d
-2124
-2128
-212c 212d
-212f 2131
-2133 2134
-2139
-fb20 fb29
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCfraction.pl b/contrib/perl5/lib/unicode/Is/DCfraction.pl
deleted file mode 100644
index abac9d9..0000000
--- a/contrib/perl5/lib/unicode/Is/DCfraction.pl
+++ /dev/null
@@ -1,7 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00bc 00be
-2153 215f
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCinitial.pl b/contrib/perl5/lib/unicode/Is/DCinitial.pl
deleted file mode 100644
index c6d7802..0000000
--- a/contrib/perl5/lib/unicode/Is/DCinitial.pl
+++ /dev/null
@@ -1,80 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-fb54
-fb58
-fb5c
-fb60
-fb64
-fb68
-fb6c
-fb70
-fb74
-fb78
-fb7c
-fb80
-fb90
-fb94
-fb98
-fb9c
-fba2
-fba8
-fbac
-fbd5
-fbe6
-fbe8
-fbf8
-fbfb
-fbfe
-fc97 fcde
-fd2d fd33
-fd50
-fd52 fd57
-fd59
-fd5c fd5d
-fd60 fd61
-fd63
-fd65
-fd68
-fd6b
-fd6d
-fd70
-fd72 fd73
-fd77
-fd7d
-fd83
-fd86
-fd88 fd8a
-fd8c fd8f
-fd92 fd95
-fd98
-fd9d
-fdb4 fdb5
-fdb8
-fdba
-fdc3 fdc5
-fe8b
-fe91
-fe97
-fe9b
-fe9f
-fea3
-fea7
-feb3
-feb7
-febb
-febf
-fec3
-fec7
-fecb
-fecf
-fed3
-fed7
-fedb
-fedf
-fee3
-fee7
-feeb
-fef3
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCisolated.pl b/contrib/perl5/lib/unicode/Is/DCisolated.pl
deleted file mode 100644
index e4e24f7..0000000
--- a/contrib/perl5/lib/unicode/Is/DCisolated.pl
+++ /dev/null
@@ -1,103 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-fb50
-fb52
-fb56
-fb5a
-fb5e
-fb62
-fb66
-fb6a
-fb6e
-fb72
-fb76
-fb7a
-fb7e
-fb82
-fb84
-fb86
-fb88
-fb8a
-fb8c
-fb8e
-fb92
-fb96
-fb9a
-fb9e
-fba0
-fba4
-fba6
-fbaa
-fbae
-fbb0
-fbd3
-fbd7
-fbd9
-fbdb
-fbdd fbde
-fbe0
-fbe2
-fbe4
-fbea
-fbec
-fbee
-fbf0
-fbf2
-fbf4
-fbf6
-fbf9
-fbfc
-fc00 fc63
-fcf5 fd10
-fd3d
-fdf0 fdfb
-fe70
-fe72
-fe74
-fe76
-fe78
-fe7a
-fe7c
-fe7e
-fe80 fe81
-fe83
-fe85
-fe87
-fe89
-fe8d
-fe8f
-fe93
-fe95
-fe99
-fe9d
-fea1
-fea5
-fea9
-feab
-fead
-feaf
-feb1
-feb5
-feb9
-febd
-fec1
-fec5
-fec9
-fecd
-fed1
-fed5
-fed9
-fedd
-fee1
-fee5
-fee9
-feed
-feef
-fef1
-fef5
-fef7
-fef9
-fefb
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCmedial.pl b/contrib/perl5/lib/unicode/Is/DCmedial.pl
deleted file mode 100644
index 8778a75..0000000
--- a/contrib/perl5/lib/unicode/Is/DCmedial.pl
+++ /dev/null
@@ -1,59 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-fb55
-fb59
-fb5d
-fb61
-fb65
-fb69
-fb6d
-fb71
-fb75
-fb79
-fb7d
-fb81
-fb91
-fb95
-fb99
-fb9d
-fba3
-fba9
-fbad
-fbd6
-fbe7
-fbe9
-fbff
-fcdf fcf4
-fd34 fd3b
-fe71
-fe77
-fe79
-fe7b
-fe7d
-fe7f
-fe8c
-fe92
-fe98
-fe9c
-fea0
-fea4
-fea8
-feb4
-feb8
-febc
-fec0
-fec4
-fec8
-fecc
-fed0
-fed4
-fed8
-fedc
-fee0
-fee4
-fee8
-feec
-fef4
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCnarrow.pl b/contrib/perl5/lib/unicode/Is/DCnarrow.pl
deleted file mode 100644
index 78874521..0000000
--- a/contrib/perl5/lib/unicode/Is/DCnarrow.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-ff61 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-ffe8 ffee
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCnoBreak.pl b/contrib/perl5/lib/unicode/Is/DCnoBreak.pl
deleted file mode 100644
index 18c0105..0000000
--- a/contrib/perl5/lib/unicode/Is/DCnoBreak.pl
+++ /dev/null
@@ -1,10 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00a0
-0f0c
-2007
-2011
-202f
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCsmall.pl b/contrib/perl5/lib/unicode/Is/DCsmall.pl
deleted file mode 100644
index 3a37931..0000000
--- a/contrib/perl5/lib/unicode/Is/DCsmall.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-fe50 fe52
-fe54 fe66
-fe68 fe6b
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCsquare.pl b/contrib/perl5/lib/unicode/Is/DCsquare.pl
deleted file mode 100644
index f27993d..0000000
--- a/contrib/perl5/lib/unicode/Is/DCsquare.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3300 3357
-3371 3376
-337b 33dd
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCsub.pl b/contrib/perl5/lib/unicode/Is/DCsub.pl
deleted file mode 100644
index f709a22..0000000
--- a/contrib/perl5/lib/unicode/Is/DCsub.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2080 208e
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCsuper.pl b/contrib/perl5/lib/unicode/Is/DCsuper.pl
deleted file mode 100644
index 1e6a0c5..0000000
--- a/contrib/perl5/lib/unicode/Is/DCsuper.pl
+++ /dev/null
@@ -1,15 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00aa
-00b2 00b3
-00b9 00ba
-02b0 02b8
-02e0 02e4
-2070
-2074 207f
-2120
-2122
-3192 319f
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCvertical.pl b/contrib/perl5/lib/unicode/Is/DCvertical.pl
deleted file mode 100644
index 33b9feb..0000000
--- a/contrib/perl5/lib/unicode/Is/DCvertical.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-fe30 fe44
-END
diff --git a/contrib/perl5/lib/unicode/Is/DCwide.pl b/contrib/perl5/lib/unicode/Is/DCwide.pl
deleted file mode 100644
index afe1e06b..0000000
--- a/contrib/perl5/lib/unicode/Is/DCwide.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3000
-ff01 ff5e
-ffe0 ffe6
-END
diff --git a/contrib/perl5/lib/unicode/Is/DecoCanon.pl b/contrib/perl5/lib/unicode/Is/DecoCanon.pl
deleted file mode 100644
index 57c167b..0000000
--- a/contrib/perl5/lib/unicode/Is/DecoCanon.pl
+++ /dev/null
@@ -1,212 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00c0 00c5
-00c7 00cf
-00d1 00d6
-00d9 00dd
-00e0 00e5
-00e7 00ef
-00f1 00f6
-00f9 00fd
-00ff 010f
-0112 0125
-0128 0130
-0134 0137
-0139 013e
-0143 0148
-014c 0151
-0154 0165
-0168 017e
-01a0 01a1
-01af 01b0
-01cd 01dc
-01de 01e3
-01e6 01f0
-01f4 01f5
-01f8 021b
-021e 021f
-0226 0233
-0340 0341
-0343 0344
-0374
-037e
-0385 038a
-038c
-038e 0390
-03aa 03b0
-03ca 03ce
-03d3 03d4
-0400 0401
-0403
-0407
-040c 040e
-0419
-0439
-0450 0451
-0453
-0457
-045c 045e
-0476 0477
-04c1 04c2
-04d0 04d3
-04d6 04d7
-04da 04df
-04e2 04e7
-04ea 04f5
-04f8 04f9
-0622 0626
-06c0
-06c2
-06d3
-0929
-0931
-0934
-0958 095f
-09cb 09cc
-09dc 09dd
-09df
-0a33
-0a36
-0a59 0a5b
-0a5e
-0b48
-0b4b 0b4c
-0b5c 0b5d
-0b94
-0bca 0bcc
-0c48
-0cc0
-0cc7 0cc8
-0cca 0ccb
-0d4a 0d4c
-0dda
-0ddc 0dde
-0f43
-0f4d
-0f52
-0f57
-0f5c
-0f69
-0f73
-0f75 0f76
-0f78
-0f81
-0f93
-0f9d
-0fa2
-0fa7
-0fac
-0fb9
-1026
-1e00 1e99
-1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fbc
-1fbe
-1fc1 1fc4
-1fc6 1fd3
-1fd6 1fdb
-1fdd 1fef
-1ff2 1ff4
-1ff6 1ffd
-2000 2001
-2126
-212a 212b
-219a 219b
-21ae
-21cd 21cf
-2204
-2209
-220c
-2224
-2226
-2241
-2244
-2247
-2249
-2260
-2262
-226d 2271
-2274 2275
-2278 2279
-2280 2281
-2284 2285
-2288 2289
-22ac 22af
-22e0 22e3
-22ea 22ed
-2329 232a
-304c
-304e
-3050
-3052
-3054
-3056
-3058
-305a
-305c
-305e
-3060
-3062
-3065
-3067
-3069
-3070 3071
-3073 3074
-3076 3077
-3079 307a
-307c 307d
-3094
-309e
-30ac
-30ae
-30b0
-30b2
-30b4
-30b6
-30b8
-30ba
-30bc
-30be
-30c0
-30c2
-30c5
-30c7
-30c9
-30d0 30d1
-30d3 30d4
-30d6 30d7
-30d9 30da
-30dc 30dd
-30f4
-30f7 30fa
-30fe
-f900 fa0d
-fa10
-fa12
-fa15 fa1e
-fa20
-fa22
-fa25 fa26
-fa2a fa2d
-fb1d
-fb1f
-fb2a fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fb4e
-END
diff --git a/contrib/perl5/lib/unicode/Is/DecoCompat.pl b/contrib/perl5/lib/unicode/Is/DecoCompat.pl
deleted file mode 100644
index 940d956..0000000
--- a/contrib/perl5/lib/unicode/Is/DecoCompat.pl
+++ /dev/null
@@ -1,107 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00a0
-00a8
-00aa
-00af
-00b2 00b5
-00b8 00ba
-00bc 00be
-0132 0133
-013f 0140
-0149
-017f
-01c4 01cc
-01f1 01f3
-02b0 02b8
-02d8 02dd
-02e0 02e4
-037a
-0384
-03d0 03d2
-03d5 03d6
-03f0 03f2
-0587
-0675 0678
-0e33
-0eb3
-0edc 0edd
-0f0c
-0f77
-0f79
-1e9a
-1fbd
-1fbf 1fc0
-1ffe
-2002 200a
-2011
-2017
-2024 2026
-202f
-2033 2034
-2036 2037
-203c
-203e
-2048 2049
-2070
-2074 208e
-20a8
-2100 2103
-2105 2107
-2109 2113
-2115 2116
-2119 211d
-2120 2122
-2124
-2128
-212c 212d
-212f 2131
-2133 2139
-2153 217f
-222c 222d
-222f 2230
-2460 24ea
-2e9f
-2ef3
-2f00 2fd5
-3000
-3036
-3038 303a
-309b 309c
-3131 318e
-3192 319f
-3200 321c
-3220 3243
-3260 327b
-3280 32b0
-32c0 32cb
-32d0 32fe
-3300 3376
-337b 33dd
-33e0 33fe
-fb00 fb06
-fb13 fb17
-fb20 fb29
-fb4f fbb1
-fbd3 fd3d
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe30 fe44
-fe49 fe52
-fe54 fe66
-fe68 fe6b
-fe70 fe72
-fe74
-fe76 fefc
-ff01 ff5e
-ff61 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-ffe0 ffe6
-ffe8 ffee
-END
diff --git a/contrib/perl5/lib/unicode/Is/Digit.pl b/contrib/perl5/lib/unicode/Is/Digit.pl
deleted file mode 100644
index 259bb89..0000000
--- a/contrib/perl5/lib/unicode/Is/Digit.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039
-0660 0669
-06f0 06f9
-0966 096f
-09e6 09ef
-0a66 0a6f
-0ae6 0aef
-0b66 0b6f
-0be7 0bef
-0c66 0c6f
-0ce6 0cef
-0d66 0d6f
-0e50 0e59
-0ed0 0ed9
-0f20 0f29
-1040 1049
-1369 1371
-17e0 17e9
-1810 1819
-ff10 ff19
-END
diff --git a/contrib/perl5/lib/unicode/Is/Graph.pl b/contrib/perl5/lib/unicode/Is/Graph.pl
deleted file mode 100644
index 238cc56..0000000
--- a/contrib/perl5/lib/unicode/Is/Graph.pl
+++ /dev/null
@@ -1,364 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0021 007e
-00a1 021f
-0222 0233
-0250 02ad
-02b0 02ee
-0300 034e
-0360 0362
-0374 0375
-037a
-037e
-0384 038a
-038c
-038e 03a1
-03a3 03ce
-03d0 03d7
-03da 03f3
-0400 0486
-0488 0489
-048c 04c4
-04c7 04c8
-04cb 04cc
-04d0 04f5
-04f8 04f9
-0531 0556
-0559 055f
-0561 0587
-0589 058a
-0591 05a1
-05a3 05b9
-05bb 05c4
-05d0 05ea
-05f0 05f4
-060c
-061b
-061f
-0621 063a
-0640 0655
-0660 066d
-0670 06ed
-06f0 06fe
-0700 070d
-0710 072c
-0730 074a
-0780 07b0
-0901 0903
-0905 0939
-093c 094d
-0950 0954
-0958 0970
-0981 0983
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09bc
-09be 09c4
-09c7 09c8
-09cb 09cd
-09d7
-09dc 09dd
-09df 09e3
-09e6 09fa
-0a02
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a3c
-0a3e 0a42
-0a47 0a48
-0a4b 0a4d
-0a59 0a5c
-0a5e
-0a66 0a74
-0a81 0a83
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abc 0ac5
-0ac7 0ac9
-0acb 0acd
-0ad0
-0ae0
-0ae6 0aef
-0b01 0b03
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3c 0b43
-0b47 0b48
-0b4b 0b4d
-0b56 0b57
-0b5c 0b5d
-0b5f 0b61
-0b66 0b70
-0b82 0b83
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0bbe 0bc2
-0bc6 0bc8
-0bca 0bcd
-0bd7
-0be7 0bf2
-0c01 0c03
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c3e 0c44
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0c60 0c61
-0c66 0c6f
-0c82 0c83
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cbe 0cc4
-0cc6 0cc8
-0cca 0ccd
-0cd5 0cd6
-0cde
-0ce0 0ce1
-0ce6 0cef
-0d02 0d03
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d3e 0d43
-0d46 0d48
-0d4a 0d4d
-0d57
-0d60 0d61
-0d66 0d6f
-0d82 0d83
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0dca
-0dcf 0dd4
-0dd6
-0dd8 0ddf
-0df2 0df4
-0e01 0e3a
-0e3f 0e5b
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb9
-0ebb 0ebd
-0ec0 0ec4
-0ec6
-0ec8 0ecd
-0ed0 0ed9
-0edc 0edd
-0f00 0f47
-0f49 0f6a
-0f71 0f8b
-0f90 0f97
-0f99 0fbc
-0fbe 0fcc
-0fcf
-1000 1021
-1023 1027
-1029 102a
-102c 1032
-1036 1039
-1040 1059
-10a0 10c5
-10d0 10f6
-10fb
-1100 1159
-115f 11a2
-11a8 11f9
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-1361 137c
-13a0 13f4
-1401 1676
-1681 169c
-16a0 16f0
-1780 17dc
-17e0 17e9
-1800 180a
-1810 1819
-1820 1877
-1880 18a9
-1e00 1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fc4
-1fc6 1fd3
-1fd6 1fdb
-1fdd 1fef
-1ff2 1ff4
-1ff6 1ffe
-2010 2027
-2030 2046
-2048 204d
-2070
-2074 208e
-20a0 20af
-20d0 20e3
-2100 213a
-2153 2183
-2190 21f3
-2200 22f1
-2300 237b
-237d 239a
-2400 2426
-2440 244a
-2460 24ea
-2500 2595
-25a0 25f7
-2600 2613
-2619 2671
-2701 2704
-2706 2709
-270c 2727
-2729 274b
-274d
-274f 2752
-2756
-2758 275e
-2761 2767
-2776 2794
-2798 27af
-27b1 27be
-2800 28ff
-2e80 2e99
-2e9b 2ef3
-2f00 2fd5
-2ff0 2ffb
-3001 303a
-303e 303f
-3041 3094
-3099 309e
-30a1 30fe
-3105 312c
-3131 318e
-3190 31b7
-3200 321c
-3220 3243
-3260 327b
-327f 32b0
-32c0 32cb
-32d0 32fe
-3300 3376
-337b 33dd
-33e0 33fe
-3400 4db5
-4e00 9fa5
-a000 a48c
-a490 a4a1
-a4a4 a4b3
-a4b5 a4c0
-a4c2 a4c4
-a4c6
-ac00 d7a3
-e000 f8ff
-f900 fa2d
-fb00 fb06
-fb13 fb17
-fb1d fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fbb1
-fbd3 fd3f
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe20 fe23
-fe30 fe44
-fe49 fe52
-fe54 fe66
-fe68 fe6b
-fe70 fe72
-fe74
-fe76 fefc
-ff01 ff5e
-ff61 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-ffe0 ffe6
-ffe8 ffee
-fffc fffd
-f0000 ffffd
-100000 10fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/L.pl b/contrib/perl5/lib/unicode/Is/L.pl
deleted file mode 100644
index bfe2c27..0000000
--- a/contrib/perl5/lib/unicode/Is/L.pl
+++ /dev/null
@@ -1,260 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0041 005a
-0061 007a
-00aa
-00b5
-00ba
-00c0 00d6
-00d8 00f6
-00f8 021f
-0222 0233
-0250 02ad
-02b0 02b8
-02bb 02c1
-02d0 02d1
-02e0 02e4
-02ee
-037a
-0386
-0388 038a
-038c
-038e 03a1
-03a3 03ce
-03d0 03d7
-03da 03f3
-0400 0481
-048c 04c4
-04c7 04c8
-04cb 04cc
-04d0 04f5
-04f8 04f9
-0531 0556
-0559
-0561 0587
-05d0 05ea
-05f0 05f2
-0621 063a
-0640 064a
-0671 06d3
-06d5
-06e5 06e6
-06fa 06fc
-0710
-0712 072c
-0780 07a5
-0905 0939
-093d
-0950
-0958 0961
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09dc 09dd
-09df 09e1
-09f0 09f1
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a59 0a5c
-0a5e
-0a72 0a74
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abd
-0ad0
-0ae0
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3d
-0b5c 0b5d
-0b5f 0b61
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c60 0c61
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cde
-0ce0 0ce1
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d60 0d61
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0e01 0e30
-0e32 0e33
-0e40 0e46
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb0
-0eb2 0eb3
-0ebd
-0ec0 0ec4
-0ec6
-0edc 0edd
-0f00
-0f40 0f47
-0f49 0f6a
-0f88 0f8b
-1000 1021
-1023 1027
-1029 102a
-1050 1055
-10a0 10c5
-10d0 10f6
-1100 1159
-115f 11a2
-11a8 11f9
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-13a0 13f4
-1401 166c
-166f 1676
-1681 169a
-16a0 16ea
-1780 17b3
-1820 1877
-1880 18a8
-1e00 1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fbc
-1fbe
-1fc2 1fc4
-1fc6 1fcc
-1fd0 1fd3
-1fd6 1fdb
-1fe0 1fec
-1ff2 1ff4
-1ff6 1ffc
-207f
-2102
-2107
-210a 2113
-2115
-2119 211d
-2124
-2126
-2128
-212a 212d
-212f 2131
-2133 2139
-3005 3006
-3031 3035
-3041 3094
-309d 309e
-30a1 30fa
-30fc 30fe
-3105 312c
-3131 318e
-31a0 31b7
-3400 4db5
-4e00 9fa5
-a000 a48c
-ac00 d7a3
-f900 fa2d
-fb00 fb06
-fb13 fb17
-fb1d
-fb1f fb28
-fb2a fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fbb1
-fbd3 fd3d
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe70 fe72
-fe74
-fe76 fefc
-ff21 ff3a
-ff41 ff5a
-ff66 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkAI.pl b/contrib/perl5/lib/unicode/Is/LbrkAI.pl
deleted file mode 100644
index 297f5cf..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkAI.pl
+++ /dev/null
@@ -1,139 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00a1
-00a7 00a8
-00aa
-00b2 00b3
-00b6 00ba
-00bc 00bf
-00c6
-00d0
-00d7 00d8
-00de 00e1
-00e6
-00e8 00ea
-00ec 00ed
-00f0
-00f2 00f3
-00f7 00fa
-00fc
-00fe
-0101
-0111
-0113
-011b
-0126 0127
-012b
-0131 0133
-0138
-013f 0142
-0144
-0148 014a
-014d
-0152 0153
-0166 0167
-016b
-01ce
-01d0
-01d2
-01d4
-01d6
-01d8
-01da
-01dc
-0251
-0261
-02c7
-02c9 02cb
-02cd
-02d0
-02d8 02db
-02dd
-0391 03a1
-03a3 03a9
-03b1 03c1
-03c3 03c9
-0401
-0410 044f
-0451
-2016
-2020 2021
-203b
-2074
-207f
-2081 2084
-2105
-2113
-2121 2122
-212b
-2154 2155
-215b
-215e
-2160 216b
-2170 2179
-2190 2199
-21d2
-21d4
-2200
-2202 2203
-2207 2208
-220b
-220f
-2211
-2215
-221a
-221d 2220
-2223
-2225
-2227 222c
-222e
-2234 2237
-223c 223d
-2248
-224c
-2252
-2260 2261
-2264 2267
-226a 226b
-226e 226f
-2282 2283
-2286 2287
-2295
-2299
-22a5
-22bf
-2312
-2460 24bf
-24d0 24e9
-2500 254b
-2550 2574
-2580 258f
-2592 2595
-25a0 25a1
-25a3 25a9
-25b2 25b3
-25b6 25b7
-25bc 25bd
-25c0 25c1
-25c6 25c7
-25cb
-25ce 25d1
-25e2 25e5
-25ef
-2605 2606
-2609
-260e 260f
-261c
-261e
-2640
-2642
-2660 2661
-2663 2665
-2667 266a
-266c 266d
-266f
-e000 f8ff
-fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkAL.pl b/contrib/perl5/lib/unicode/Is/LbrkAL.pl
deleted file mode 100644
index c1fc416..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkAL.pl
+++ /dev/null
@@ -1,387 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0023
-0026
-002a
-003c 003e
-0040 005a
-005e 007a
-007e
-00a6
-00a9
-00ac
-00ae 00af
-00b5
-00c0 00c5
-00c7 00cf
-00d1 00d6
-00d9 00dd
-00e2 00e5
-00e7
-00eb
-00ee 00ef
-00f1
-00f4 00f6
-00fb
-00fd
-00ff 0100
-0102 0110
-0112
-0114 011a
-011c 0125
-0128 012a
-012c 0130
-0134 0137
-0139 013e
-0143
-0145 0147
-014b 014c
-014e 0151
-0154 0165
-0168 016a
-016c 01cd
-01cf
-01d1
-01d3
-01d5
-01d7
-01d9
-01db
-01dd 021f
-0222 0233
-0250
-0252 0260
-0262 02ad
-02b0 02c6
-02ce 02cf
-02d1 02d7
-02dc
-02de 02ee
-0374 0375
-037a
-037e
-0384 038a
-038c
-038e 0390
-03aa 03b0
-03c2
-03ca 03ce
-03d0 03d7
-03da 03f3
-0400
-0402 040f
-0450
-0452 0482
-048c 04c4
-04c7 04c8
-04cb 04cc
-04d0 04f5
-04f8 04f9
-0531 0556
-0559 055f
-0561 0587
-05be
-05c0
-05c3
-05d0 05ea
-05f0 05f4
-060c
-061b
-061f
-0621 063a
-0640 064a
-066a 066d
-0671 06d5
-06e5 06e6
-06e9
-06fa 06fe
-0700 070d
-0710
-0712 072c
-0780 07a5
-0905 0939
-093d
-0950
-0958 0961
-0964 0965
-0970
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09dc 09dd
-09df 09e1
-09f0 09f1
-09f4 09fa
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a59 0a5c
-0a5e
-0a72 0a74
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abd
-0ad0
-0ae0
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3d
-0b5c 0b5d
-0b5f 0b61
-0b70
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0bf0 0bf2
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c60 0c61
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cde
-0ce0 0ce1
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d60 0d61
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0df4
-0e4f
-0f00 0f0a
-0f0d 0f17
-0f1a 0f1f
-0f2a 0f34
-0f36
-0f38
-0f40 0f47
-0f49 0f6a
-0f85
-0f88 0f8b
-0fbe 0fc5
-0fc7 0fcc
-0fcf
-104a 104f
-10a0 10c5
-10d0 10f6
-10fb
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-1362 1368
-1372 137c
-13a0 13f4
-1401 1676
-1681 169a
-16a0 16f0
-17dc
-1800 1805
-1807 180a
-1820 1877
-1880 18a8
-1e00 1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fc4
-1fc6 1fd3
-1fd6 1fdb
-1fdd 1fef
-1ff2 1ff4
-1ff6 1ffe
-2015
-2017
-2022 2023
-2038
-203d 2043
-2048 204d
-2070
-2075 207c
-2080
-2085 208c
-2100 2102
-2104
-2106 2108
-210a 2112
-2114 2115
-2117 2120
-2123 2125
-2127 212a
-212c 213a
-2153
-2156 215a
-215c 215d
-215f
-216c 216f
-217a 2183
-219a 21d1
-21d3
-21d5 21f3
-2201
-2204 2206
-2209 220a
-220c 220e
-2210
-2214
-2216 2219
-221b 221c
-2221 2222
-2224
-2226
-222d
-222f 2233
-2238 223b
-223e 2247
-2249 224b
-224d 2251
-2253 225f
-2262 2263
-2268 2269
-226c 226d
-2270 2281
-2284 2285
-2288 2294
-2296 2298
-229a 22a4
-22a6 22be
-22c0 22f1
-2300 2311
-2313 2328
-232b 237b
-237d 239a
-2400 2426
-2440 244a
-24c0 24cf
-24ea
-254c 254f
-2575 257f
-2590 2591
-25a2
-25aa 25b1
-25b4 25b5
-25b8 25bb
-25be 25bf
-25c2 25c5
-25c8 25ca
-25cc 25cd
-25d2 25e1
-25e6 25ee
-25f0 25f7
-2600 2604
-2607 2608
-260a 260d
-2610 2613
-2619 261b
-261d
-261f 263f
-2641
-2643 265f
-2662
-2666
-266b
-266e
-2670 2671
-2701 2704
-2706 2709
-270c 2727
-2729 274b
-274d
-274f 2752
-2756
-2758 275e
-2761 2767
-2776 2794
-2798 27af
-27b1 27be
-2800 28ff
-fb00 fb06
-fb13 fb17
-fb1d
-fb1f fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fbb1
-fbd3 fd3d
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe6b
-fe70 fe72
-fe74
-fe76 fefc
-ff66
-ff71 ff9d
-ffa0 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-ffe8 ffee
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkB2.pl b/contrib/perl5/lib/unicode/Is/LbrkB2.pl
deleted file mode 100644
index a1410da..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkB2.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2014
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkBA.pl b/contrib/perl5/lib/unicode/Is/LbrkBA.pl
deleted file mode 100644
index 93ec04e..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkBA.pl
+++ /dev/null
@@ -1,19 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0009
-007c
-00ad
-00b4
-058a
-0f0b
-1361
-1680
-17d5
-2000 2006
-2008 200a
-2010
-2012 2013
-2027
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkBB.pl b/contrib/perl5/lib/unicode/Is/LbrkBB.pl
deleted file mode 100644
index b9bc7e8..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkBB.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-02c8
-02cc
-1806
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkBK.pl b/contrib/perl5/lib/unicode/Is/LbrkBK.pl
deleted file mode 100644
index 17bb551..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkBK.pl
+++ /dev/null
@@ -1,7 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-000c
-2028 2029
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkCB.pl b/contrib/perl5/lib/unicode/Is/LbrkCB.pl
deleted file mode 100644
index 8da9eba..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkCB.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-fffc
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkCL.pl b/contrib/perl5/lib/unicode/Is/LbrkCL.pl
deleted file mode 100644
index 353c594..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkCL.pl
+++ /dev/null
@@ -1,47 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0029
-005d
-007d
-0f3b
-0f3d
-169c
-2046
-207e
-208e
-232a
-3001 3002
-3009
-300b
-300d
-300f
-3011
-3015
-3017
-3019
-301b
-301e 301f
-fd3f
-fe36
-fe38
-fe3a
-fe3c
-fe3e
-fe40
-fe42
-fe44
-fe50
-fe52
-fe5a
-fe5c
-fe5e
-ff09
-ff0c
-ff0e
-ff3d
-ff5d
-ff61
-ff63 ff64
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkCM.pl b/contrib/perl5/lib/unicode/Is/LbrkCM.pl
deleted file mode 100644
index 87c7833..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkCM.pl
+++ /dev/null
@@ -1,117 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 0008
-000b
-000e 001f
-007f 009f
-0300 034e
-0360 0362
-0483 0486
-0488 0489
-0591 05a1
-05a3 05b9
-05bb 05bd
-05bf
-05c1 05c2
-05c4
-064b 0655
-0670
-06d6 06e4
-06e7 06e8
-06ea 06ed
-070f
-0711
-0730 074a
-07a6 07b0
-0901 0903
-093c
-093e 094d
-0951 0954
-0962 0963
-0981 0983
-09bc
-09be 09c4
-09c7 09c8
-09cb 09cd
-09d7
-09e2 09e3
-0a02
-0a3c
-0a3e 0a42
-0a47 0a48
-0a4b 0a4d
-0a70 0a71
-0a81 0a83
-0abc
-0abe 0ac5
-0ac7 0ac9
-0acb 0acd
-0b01 0b03
-0b3c
-0b3e 0b43
-0b47 0b48
-0b4b 0b4d
-0b56 0b57
-0b82 0b83
-0bbe 0bc2
-0bc6 0bc8
-0bca 0bcd
-0bd7
-0c01 0c03
-0c3e 0c44
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0c82 0c83
-0cbe 0cc4
-0cc6 0cc8
-0cca 0ccd
-0cd5 0cd6
-0d02 0d03
-0d3e 0d43
-0d46 0d48
-0d4a 0d4d
-0d57
-0d82 0d83
-0dca
-0dcf 0dd4
-0dd6
-0dd8 0ddf
-0df2 0df3
-0e31
-0e34 0e3a
-0e47 0e4e
-0eb1
-0eb4 0eb9
-0ebb 0ebc
-0ec8 0ecd
-0f18 0f19
-0f35
-0f37
-0f39
-0f3e 0f3f
-0f71 0f84
-0f86 0f87
-0f90 0f97
-0f99 0fbc
-0fc6
-102c 1032
-1036 1039
-1056 1059
-1160 11a2
-11a8 11f9
-17b4 17d3
-180b 180e
-18a9
-200c 200f
-202a 202e
-206a 206f
-20d0 20e3
-302a 302f
-3099 309a
-fb1e
-fe20 fe23
-fff9 fffb
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkCR.pl b/contrib/perl5/lib/unicode/Is/LbrkCR.pl
deleted file mode 100644
index 2548269..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkCR.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-000d
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkEX.pl b/contrib/perl5/lib/unicode/Is/LbrkEX.pl
deleted file mode 100644
index 173bf58..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkEX.pl
+++ /dev/null
@@ -1,10 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0021
-003f
-fe56 fe57
-ff01
-ff1f
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkGL.pl b/contrib/perl5/lib/unicode/Is/LbrkGL.pl
deleted file mode 100644
index 49bb985..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkGL.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00a0
-0f0c
-2007
-2011
-202f
-feff
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkHY.pl b/contrib/perl5/lib/unicode/Is/LbrkHY.pl
deleted file mode 100644
index 71e5886..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkHY.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-002d
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkID.pl b/contrib/perl5/lib/unicode/Is/LbrkID.pl
deleted file mode 100644
index 6e6100c..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkID.pl
+++ /dev/null
@@ -1,81 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1100 1159
-115f
-2e80 2e99
-2e9b 2ef3
-2f00 2fd5
-2ff0 2ffb
-3000
-3003 3004
-3006 3007
-3012 3013
-3020 3029
-3030 303a
-303e 303f
-3042
-3044
-3046
-3048
-304a 3062
-3064 3082
-3084
-3086
-3088 308d
-308f 3094
-30a2
-30a4
-30a6
-30a8
-30aa 30c2
-30c4 30e2
-30e4
-30e6
-30e8 30ed
-30ef 30f4
-30f7 30fa
-30fc
-30fe
-3105 312c
-3131 318e
-3190 31b7
-3200 321c
-3220 3243
-3260 327b
-327f 32b0
-32c0 32cb
-32d0 32fe
-3300 3376
-337b 33dd
-33e0 33fe
-3400 4db5
-4e00 9fa5
-a000 a48c
-a490 a4a1
-a4a4 a4b3
-a4b5 a4c0
-a4c2 a4c4
-a4c6
-ac00 d7a3
-f900 fa2d
-fe30 fe34
-fe49 fe4f
-fe51
-fe58
-fe5f fe66
-fe68
-ff02 ff03
-ff06 ff07
-ff0a ff0b
-ff0d
-ff0f ff19
-ff1c ff1e
-ff20 ff3a
-ff3c
-ff3e ff5a
-ff5c
-ff5e
-ffe2 ffe4
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkIN.pl b/contrib/perl5/lib/unicode/Is/LbrkIN.pl
deleted file mode 100644
index 1758673..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkIN.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2024 2026
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkIS.pl b/contrib/perl5/lib/unicode/Is/LbrkIS.pl
deleted file mode 100644
index 32dcfb0..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkIS.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-002c
-002e
-003a 003b
-0589
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkLF.pl b/contrib/perl5/lib/unicode/Is/LbrkLF.pl
deleted file mode 100644
index 9b845ae..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkLF.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-000a
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkNS.pl b/contrib/perl5/lib/unicode/Is/LbrkNS.pl
deleted file mode 100644
index b7ff279..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkNS.pl
+++ /dev/null
@@ -1,41 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0e5a 0e5b
-17d4
-17d6 17da
-203c
-2044
-3005
-301c
-3041
-3043
-3045
-3047
-3049
-3063
-3083
-3085
-3087
-308e
-309b 309e
-30a1
-30a3
-30a5
-30a7
-30a9
-30c3
-30e3
-30e5
-30e7
-30ee
-30f5 30f6
-30fb
-30fd
-fe54 fe55
-ff1a ff1b
-ff65
-ff67 ff70
-ff9e ff9f
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkNU.pl b/contrib/perl5/lib/unicode/Is/LbrkNU.pl
deleted file mode 100644
index eb51418..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkNU.pl
+++ /dev/null
@@ -1,24 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039
-0660 0669
-06f0 06f9
-0966 096f
-09e6 09ef
-0a66 0a6f
-0ae6 0aef
-0b66 0b6f
-0be7 0bef
-0c66 0c6f
-0ce6 0cef
-0d66 0d6f
-0e50 0e59
-0ed0 0ed9
-0f20 0f29
-1040 1049
-1369 1371
-17e0 17e9
-1810 1819
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkOP.pl b/contrib/perl5/lib/unicode/Is/LbrkOP.pl
deleted file mode 100644
index 90f1809..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkOP.pl
+++ /dev/null
@@ -1,43 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0028
-005b
-007b
-0f3a
-0f3c
-169b
-201a
-201e
-2045
-207d
-208d
-2329
-3008
-300a
-300c
-300e
-3010
-3014
-3016
-3018
-301a
-301d
-fd3e
-fe35
-fe37
-fe39
-fe3b
-fe3d
-fe3f
-fe41
-fe43
-fe59
-fe5b
-fe5d
-ff08
-ff3b
-ff5b
-ff62
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkPO.pl b/contrib/perl5/lib/unicode/Is/LbrkPO.pl
deleted file mode 100644
index 07f7bf7..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkPO.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0025
-00a2
-00b0
-2030 2037
-20a7
-2103
-2109
-2126
-fe6a
-ff05
-ffe0
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkPR.pl b/contrib/perl5/lib/unicode/Is/LbrkPR.pl
deleted file mode 100644
index 03466c9..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkPR.pl
+++ /dev/null
@@ -1,21 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0024
-002b
-005c
-00a3 00a5
-00b1
-09f2 09f3
-0e3f
-17db
-20a0 20a6
-20a8 20af
-2116
-2212 2213
-fe69
-ff04
-ffe1
-ffe5 ffe6
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkQU.pl b/contrib/perl5/lib/unicode/Is/LbrkQU.pl
deleted file mode 100644
index 35dac98..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkQU.pl
+++ /dev/null
@@ -1,13 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0022
-0027
-00ab
-00bb
-2018 2019
-201b 201d
-201f
-2039 203a
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkSA.pl b/contrib/perl5/lib/unicode/Is/LbrkSA.pl
deleted file mode 100644
index 4539e09..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkSA.pl
+++ /dev/null
@@ -1,30 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0e01 0e30
-0e32 0e33
-0e40 0e46
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb0
-0eb2 0eb3
-0ebd
-0ec0 0ec4
-0ec6
-0edc 0edd
-1000 1021
-1023 1027
-1029 102a
-1050 1055
-1780 17b3
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkSG.pl b/contrib/perl5/lib/unicode/Is/LbrkSG.pl
deleted file mode 100644
index 33e1dac..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkSG.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-d800 db7f
-db80 dbff
-dc00 dfff
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkSP.pl b/contrib/perl5/lib/unicode/Is/LbrkSP.pl
deleted file mode 100644
index 2153e12..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkSP.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0020
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkSY.pl b/contrib/perl5/lib/unicode/Is/LbrkSY.pl
deleted file mode 100644
index ce65fe1..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkSY.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-002f
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkXX.pl b/contrib/perl5/lib/unicode/Is/LbrkXX.pl
deleted file mode 100644
index c3b32ac..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkXX.pl
+++ /dev/null
@@ -1,5 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-END
diff --git a/contrib/perl5/lib/unicode/Is/LbrkZW.pl b/contrib/perl5/lib/unicode/Is/LbrkZW.pl
deleted file mode 100644
index 63c9dcf..0000000
--- a/contrib/perl5/lib/unicode/Is/LbrkZW.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-200b
-END
diff --git a/contrib/perl5/lib/unicode/Is/Ll.pl b/contrib/perl5/lib/unicode/Is/Ll.pl
deleted file mode 100644
index 03dafcc..0000000
--- a/contrib/perl5/lib/unicode/Is/Ll.pl
+++ /dev/null
@@ -1,379 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0061 007a
-00aa
-00b5
-00ba
-00df 00f6
-00f8 00ff
-0101
-0103
-0105
-0107
-0109
-010b
-010d
-010f
-0111
-0113
-0115
-0117
-0119
-011b
-011d
-011f
-0121
-0123
-0125
-0127
-0129
-012b
-012d
-012f
-0131
-0133
-0135
-0137 0138
-013a
-013c
-013e
-0140
-0142
-0144
-0146
-0148 0149
-014b
-014d
-014f
-0151
-0153
-0155
-0157
-0159
-015b
-015d
-015f
-0161
-0163
-0165
-0167
-0169
-016b
-016d
-016f
-0171
-0173
-0175
-0177
-017a
-017c
-017e 0180
-0183
-0185
-0188
-018c 018d
-0192
-0195
-0199 019b
-019e
-01a1
-01a3
-01a5
-01a8
-01aa 01ab
-01ad
-01b0
-01b4
-01b6
-01b9 01ba
-01bd 01bf
-01c6
-01c9
-01cc
-01ce
-01d0
-01d2
-01d4
-01d6
-01d8
-01da
-01dc 01dd
-01df
-01e1
-01e3
-01e5
-01e7
-01e9
-01eb
-01ed
-01ef 01f0
-01f3
-01f5
-01f9
-01fb
-01fd
-01ff
-0201
-0203
-0205
-0207
-0209
-020b
-020d
-020f
-0211
-0213
-0215
-0217
-0219
-021b
-021d
-021f
-0223
-0225
-0227
-0229
-022b
-022d
-022f
-0231
-0233
-0250 02ad
-0390
-03ac 03ce
-03d0 03d1
-03d5 03d7
-03db
-03dd
-03df
-03e1
-03e3
-03e5
-03e7
-03e9
-03eb
-03ed
-03ef 03f3
-0430 045f
-0461
-0463
-0465
-0467
-0469
-046b
-046d
-046f
-0471
-0473
-0475
-0477
-0479
-047b
-047d
-047f
-0481
-048d
-048f
-0491
-0493
-0495
-0497
-0499
-049b
-049d
-049f
-04a1
-04a3
-04a5
-04a7
-04a9
-04ab
-04ad
-04af
-04b1
-04b3
-04b5
-04b7
-04b9
-04bb
-04bd
-04bf
-04c2
-04c4
-04c8
-04cc
-04d1
-04d3
-04d5
-04d7
-04d9
-04db
-04dd
-04df
-04e1
-04e3
-04e5
-04e7
-04e9
-04eb
-04ed
-04ef
-04f1
-04f3
-04f5
-04f9
-0561 0587
-1e01
-1e03
-1e05
-1e07
-1e09
-1e0b
-1e0d
-1e0f
-1e11
-1e13
-1e15
-1e17
-1e19
-1e1b
-1e1d
-1e1f
-1e21
-1e23
-1e25
-1e27
-1e29
-1e2b
-1e2d
-1e2f
-1e31
-1e33
-1e35
-1e37
-1e39
-1e3b
-1e3d
-1e3f
-1e41
-1e43
-1e45
-1e47
-1e49
-1e4b
-1e4d
-1e4f
-1e51
-1e53
-1e55
-1e57
-1e59
-1e5b
-1e5d
-1e5f
-1e61
-1e63
-1e65
-1e67
-1e69
-1e6b
-1e6d
-1e6f
-1e71
-1e73
-1e75
-1e77
-1e79
-1e7b
-1e7d
-1e7f
-1e81
-1e83
-1e85
-1e87
-1e89
-1e8b
-1e8d
-1e8f
-1e91
-1e93
-1e95 1e9b
-1ea1
-1ea3
-1ea5
-1ea7
-1ea9
-1eab
-1ead
-1eaf
-1eb1
-1eb3
-1eb5
-1eb7
-1eb9
-1ebb
-1ebd
-1ebf
-1ec1
-1ec3
-1ec5
-1ec7
-1ec9
-1ecb
-1ecd
-1ecf
-1ed1
-1ed3
-1ed5
-1ed7
-1ed9
-1edb
-1edd
-1edf
-1ee1
-1ee3
-1ee5
-1ee7
-1ee9
-1eeb
-1eed
-1eef
-1ef1
-1ef3
-1ef5
-1ef7
-1ef9
-1f00 1f07
-1f10 1f15
-1f20 1f27
-1f30 1f37
-1f40 1f45
-1f50 1f57
-1f60 1f67
-1f70 1f7d
-1f80 1f87
-1f90 1f97
-1fa0 1fa7
-1fb0 1fb4
-1fb6 1fb7
-1fbe
-1fc2 1fc4
-1fc6 1fc7
-1fd0 1fd3
-1fd6 1fd7
-1fe0 1fe7
-1ff2 1ff4
-1ff6 1ff7
-207f
-210a
-210e 210f
-2113
-212f
-2134
-2139
-fb00 fb06
-fb13 fb17
-ff41 ff5a
-END
diff --git a/contrib/perl5/lib/unicode/Is/Lm.pl b/contrib/perl5/lib/unicode/Is/Lm.pl
deleted file mode 100644
index 23a3c55..0000000
--- a/contrib/perl5/lib/unicode/Is/Lm.pl
+++ /dev/null
@@ -1,23 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-02b0 02b8
-02bb 02c1
-02d0 02d1
-02e0 02e4
-02ee
-037a
-0559
-0640
-06e5 06e6
-0e46
-0ec6
-1843
-3005
-3031 3035
-309d 309e
-30fc 30fe
-ff70
-ff9e ff9f
-END
diff --git a/contrib/perl5/lib/unicode/Is/Lo.pl b/contrib/perl5/lib/unicode/Is/Lo.pl
deleted file mode 100644
index d82c6bb..0000000
--- a/contrib/perl5/lib/unicode/Is/Lo.pl
+++ /dev/null
@@ -1,191 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-01bb
-01c0 01c3
-05d0 05ea
-05f0 05f2
-0621 063a
-0641 064a
-0671 06d3
-06d5
-06fa 06fc
-0710
-0712 072c
-0780 07a5
-0905 0939
-093d
-0950
-0958 0961
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09dc 09dd
-09df 09e1
-09f0 09f1
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a59 0a5c
-0a5e
-0a72 0a74
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abd
-0ad0
-0ae0
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3d
-0b5c 0b5d
-0b5f 0b61
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c60 0c61
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cde
-0ce0 0ce1
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d60 0d61
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0e01 0e30
-0e32 0e33
-0e40 0e45
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb0
-0eb2 0eb3
-0ebd
-0ec0 0ec4
-0edc 0edd
-0f00
-0f40 0f47
-0f49 0f6a
-0f88 0f8b
-1000 1021
-1023 1027
-1029 102a
-1050 1055
-10d0 10f6
-1100 1159
-115f 11a2
-11a8 11f9
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-13a0 13f4
-1401 166c
-166f 1676
-1681 169a
-16a0 16ea
-1780 17b3
-1820 1842
-1844 1877
-1880 18a8
-2135 2138
-3006
-3041 3094
-30a1 30fa
-3105 312c
-3131 318e
-31a0 31b7
-3400 4db5
-4e00 9fa5
-a000 a48c
-ac00 d7a3
-f900 fa2d
-fb1d
-fb1f fb28
-fb2a fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fbb1
-fbd3 fd3d
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe70 fe72
-fe74
-fe76 fefc
-ff66 ff6f
-ff71 ff9d
-ffa0 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-END
diff --git a/contrib/perl5/lib/unicode/Is/Lower.pl b/contrib/perl5/lib/unicode/Is/Lower.pl
deleted file mode 100644
index 03dafcc..0000000
--- a/contrib/perl5/lib/unicode/Is/Lower.pl
+++ /dev/null
@@ -1,379 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0061 007a
-00aa
-00b5
-00ba
-00df 00f6
-00f8 00ff
-0101
-0103
-0105
-0107
-0109
-010b
-010d
-010f
-0111
-0113
-0115
-0117
-0119
-011b
-011d
-011f
-0121
-0123
-0125
-0127
-0129
-012b
-012d
-012f
-0131
-0133
-0135
-0137 0138
-013a
-013c
-013e
-0140
-0142
-0144
-0146
-0148 0149
-014b
-014d
-014f
-0151
-0153
-0155
-0157
-0159
-015b
-015d
-015f
-0161
-0163
-0165
-0167
-0169
-016b
-016d
-016f
-0171
-0173
-0175
-0177
-017a
-017c
-017e 0180
-0183
-0185
-0188
-018c 018d
-0192
-0195
-0199 019b
-019e
-01a1
-01a3
-01a5
-01a8
-01aa 01ab
-01ad
-01b0
-01b4
-01b6
-01b9 01ba
-01bd 01bf
-01c6
-01c9
-01cc
-01ce
-01d0
-01d2
-01d4
-01d6
-01d8
-01da
-01dc 01dd
-01df
-01e1
-01e3
-01e5
-01e7
-01e9
-01eb
-01ed
-01ef 01f0
-01f3
-01f5
-01f9
-01fb
-01fd
-01ff
-0201
-0203
-0205
-0207
-0209
-020b
-020d
-020f
-0211
-0213
-0215
-0217
-0219
-021b
-021d
-021f
-0223
-0225
-0227
-0229
-022b
-022d
-022f
-0231
-0233
-0250 02ad
-0390
-03ac 03ce
-03d0 03d1
-03d5 03d7
-03db
-03dd
-03df
-03e1
-03e3
-03e5
-03e7
-03e9
-03eb
-03ed
-03ef 03f3
-0430 045f
-0461
-0463
-0465
-0467
-0469
-046b
-046d
-046f
-0471
-0473
-0475
-0477
-0479
-047b
-047d
-047f
-0481
-048d
-048f
-0491
-0493
-0495
-0497
-0499
-049b
-049d
-049f
-04a1
-04a3
-04a5
-04a7
-04a9
-04ab
-04ad
-04af
-04b1
-04b3
-04b5
-04b7
-04b9
-04bb
-04bd
-04bf
-04c2
-04c4
-04c8
-04cc
-04d1
-04d3
-04d5
-04d7
-04d9
-04db
-04dd
-04df
-04e1
-04e3
-04e5
-04e7
-04e9
-04eb
-04ed
-04ef
-04f1
-04f3
-04f5
-04f9
-0561 0587
-1e01
-1e03
-1e05
-1e07
-1e09
-1e0b
-1e0d
-1e0f
-1e11
-1e13
-1e15
-1e17
-1e19
-1e1b
-1e1d
-1e1f
-1e21
-1e23
-1e25
-1e27
-1e29
-1e2b
-1e2d
-1e2f
-1e31
-1e33
-1e35
-1e37
-1e39
-1e3b
-1e3d
-1e3f
-1e41
-1e43
-1e45
-1e47
-1e49
-1e4b
-1e4d
-1e4f
-1e51
-1e53
-1e55
-1e57
-1e59
-1e5b
-1e5d
-1e5f
-1e61
-1e63
-1e65
-1e67
-1e69
-1e6b
-1e6d
-1e6f
-1e71
-1e73
-1e75
-1e77
-1e79
-1e7b
-1e7d
-1e7f
-1e81
-1e83
-1e85
-1e87
-1e89
-1e8b
-1e8d
-1e8f
-1e91
-1e93
-1e95 1e9b
-1ea1
-1ea3
-1ea5
-1ea7
-1ea9
-1eab
-1ead
-1eaf
-1eb1
-1eb3
-1eb5
-1eb7
-1eb9
-1ebb
-1ebd
-1ebf
-1ec1
-1ec3
-1ec5
-1ec7
-1ec9
-1ecb
-1ecd
-1ecf
-1ed1
-1ed3
-1ed5
-1ed7
-1ed9
-1edb
-1edd
-1edf
-1ee1
-1ee3
-1ee5
-1ee7
-1ee9
-1eeb
-1eed
-1eef
-1ef1
-1ef3
-1ef5
-1ef7
-1ef9
-1f00 1f07
-1f10 1f15
-1f20 1f27
-1f30 1f37
-1f40 1f45
-1f50 1f57
-1f60 1f67
-1f70 1f7d
-1f80 1f87
-1f90 1f97
-1fa0 1fa7
-1fb0 1fb4
-1fb6 1fb7
-1fbe
-1fc2 1fc4
-1fc6 1fc7
-1fd0 1fd3
-1fd6 1fd7
-1fe0 1fe7
-1ff2 1ff4
-1ff6 1ff7
-207f
-210a
-210e 210f
-2113
-212f
-2134
-2139
-fb00 fb06
-fb13 fb17
-ff41 ff5a
-END
diff --git a/contrib/perl5/lib/unicode/Is/Lt.pl b/contrib/perl5/lib/unicode/Is/Lt.pl
deleted file mode 100644
index b19755c..0000000
--- a/contrib/perl5/lib/unicode/Is/Lt.pl
+++ /dev/null
@@ -1,15 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-01c5
-01c8
-01cb
-01f2
-1f88 1f8f
-1f98 1f9f
-1fa8 1faf
-1fbc
-1fcc
-1ffc
-END
diff --git a/contrib/perl5/lib/unicode/Is/Lu.pl b/contrib/perl5/lib/unicode/Is/Lu.pl
deleted file mode 100644
index 07dee48..0000000
--- a/contrib/perl5/lib/unicode/Is/Lu.pl
+++ /dev/null
@@ -1,376 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0041 005a
-00c0 00d6
-00d8 00de
-0100
-0102
-0104
-0106
-0108
-010a
-010c
-010e
-0110
-0112
-0114
-0116
-0118
-011a
-011c
-011e
-0120
-0122
-0124
-0126
-0128
-012a
-012c
-012e
-0130
-0132
-0134
-0136
-0139
-013b
-013d
-013f
-0141
-0143
-0145
-0147
-014a
-014c
-014e
-0150
-0152
-0154
-0156
-0158
-015a
-015c
-015e
-0160
-0162
-0164
-0166
-0168
-016a
-016c
-016e
-0170
-0172
-0174
-0176
-0178 0179
-017b
-017d
-0181 0182
-0184
-0186 0187
-0189 018b
-018e 0191
-0193 0194
-0196 0198
-019c 019d
-019f 01a0
-01a2
-01a4
-01a6 01a7
-01a9
-01ac
-01ae 01af
-01b1 01b3
-01b5
-01b7 01b8
-01bc
-01c4
-01c7
-01ca
-01cd
-01cf
-01d1
-01d3
-01d5
-01d7
-01d9
-01db
-01de
-01e0
-01e2
-01e4
-01e6
-01e8
-01ea
-01ec
-01ee
-01f1
-01f4
-01f6 01f8
-01fa
-01fc
-01fe
-0200
-0202
-0204
-0206
-0208
-020a
-020c
-020e
-0210
-0212
-0214
-0216
-0218
-021a
-021c
-021e
-0222
-0224
-0226
-0228
-022a
-022c
-022e
-0230
-0232
-0386
-0388 038a
-038c
-038e 038f
-0391 03a1
-03a3 03ab
-03d2 03d4
-03da
-03dc
-03de
-03e0
-03e2
-03e4
-03e6
-03e8
-03ea
-03ec
-03ee
-0400 042f
-0460
-0462
-0464
-0466
-0468
-046a
-046c
-046e
-0470
-0472
-0474
-0476
-0478
-047a
-047c
-047e
-0480
-048c
-048e
-0490
-0492
-0494
-0496
-0498
-049a
-049c
-049e
-04a0
-04a2
-04a4
-04a6
-04a8
-04aa
-04ac
-04ae
-04b0
-04b2
-04b4
-04b6
-04b8
-04ba
-04bc
-04be
-04c0 04c1
-04c3
-04c7
-04cb
-04d0
-04d2
-04d4
-04d6
-04d8
-04da
-04dc
-04de
-04e0
-04e2
-04e4
-04e6
-04e8
-04ea
-04ec
-04ee
-04f0
-04f2
-04f4
-04f8
-0531 0556
-10a0 10c5
-1e00
-1e02
-1e04
-1e06
-1e08
-1e0a
-1e0c
-1e0e
-1e10
-1e12
-1e14
-1e16
-1e18
-1e1a
-1e1c
-1e1e
-1e20
-1e22
-1e24
-1e26
-1e28
-1e2a
-1e2c
-1e2e
-1e30
-1e32
-1e34
-1e36
-1e38
-1e3a
-1e3c
-1e3e
-1e40
-1e42
-1e44
-1e46
-1e48
-1e4a
-1e4c
-1e4e
-1e50
-1e52
-1e54
-1e56
-1e58
-1e5a
-1e5c
-1e5e
-1e60
-1e62
-1e64
-1e66
-1e68
-1e6a
-1e6c
-1e6e
-1e70
-1e72
-1e74
-1e76
-1e78
-1e7a
-1e7c
-1e7e
-1e80
-1e82
-1e84
-1e86
-1e88
-1e8a
-1e8c
-1e8e
-1e90
-1e92
-1e94
-1ea0
-1ea2
-1ea4
-1ea6
-1ea8
-1eaa
-1eac
-1eae
-1eb0
-1eb2
-1eb4
-1eb6
-1eb8
-1eba
-1ebc
-1ebe
-1ec0
-1ec2
-1ec4
-1ec6
-1ec8
-1eca
-1ecc
-1ece
-1ed0
-1ed2
-1ed4
-1ed6
-1ed8
-1eda
-1edc
-1ede
-1ee0
-1ee2
-1ee4
-1ee6
-1ee8
-1eea
-1eec
-1eee
-1ef0
-1ef2
-1ef4
-1ef6
-1ef8
-1f08 1f0f
-1f18 1f1d
-1f28 1f2f
-1f38 1f3f
-1f48 1f4d
-1f59
-1f5b
-1f5d
-1f5f
-1f68 1f6f
-1fb8 1fbb
-1fc8 1fcb
-1fd8 1fdb
-1fe8 1fec
-1ff8 1ffb
-2102
-2107
-210b 210d
-2110 2112
-2115
-2119 211d
-2124
-2126
-2128
-212a 212d
-2130 2131
-2133
-ff21 ff3a
-END
diff --git a/contrib/perl5/lib/unicode/Is/M.pl b/contrib/perl5/lib/unicode/Is/M.pl
deleted file mode 100644
index e3ef7f3..0000000
--- a/contrib/perl5/lib/unicode/Is/M.pl
+++ /dev/null
@@ -1,105 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0300 034e
-0360 0362
-0483 0486
-0488 0489
-0591 05a1
-05a3 05b9
-05bb 05bd
-05bf
-05c1 05c2
-05c4
-064b 0655
-0670
-06d6 06e4
-06e7 06e8
-06ea 06ed
-0711
-0730 074a
-07a6 07b0
-0901 0903
-093c
-093e 094d
-0951 0954
-0962 0963
-0981 0983
-09bc
-09be 09c4
-09c7 09c8
-09cb 09cd
-09d7
-09e2 09e3
-0a02
-0a3c
-0a3e 0a42
-0a47 0a48
-0a4b 0a4d
-0a70 0a71
-0a81 0a83
-0abc
-0abe 0ac5
-0ac7 0ac9
-0acb 0acd
-0b01 0b03
-0b3c
-0b3e 0b43
-0b47 0b48
-0b4b 0b4d
-0b56 0b57
-0b82 0b83
-0bbe 0bc2
-0bc6 0bc8
-0bca 0bcd
-0bd7
-0c01 0c03
-0c3e 0c44
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0c82 0c83
-0cbe 0cc4
-0cc6 0cc8
-0cca 0ccd
-0cd5 0cd6
-0d02 0d03
-0d3e 0d43
-0d46 0d48
-0d4a 0d4d
-0d57
-0d82 0d83
-0dca
-0dcf 0dd4
-0dd6
-0dd8 0ddf
-0df2 0df3
-0e31
-0e34 0e3a
-0e47 0e4e
-0eb1
-0eb4 0eb9
-0ebb 0ebc
-0ec8 0ecd
-0f18 0f19
-0f35
-0f37
-0f39
-0f3e 0f3f
-0f71 0f84
-0f86 0f87
-0f90 0f97
-0f99 0fbc
-0fc6
-102c 1032
-1036 1039
-1056 1059
-17b4 17d3
-18a9
-20d0 20e3
-302a 302f
-3099 309a
-fb1e
-fe20 fe23
-END
diff --git a/contrib/perl5/lib/unicode/Is/Mc.pl b/contrib/perl5/lib/unicode/Is/Mc.pl
deleted file mode 100644
index a76d66c..0000000
--- a/contrib/perl5/lib/unicode/Is/Mc.pl
+++ /dev/null
@@ -1,56 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0903
-093e 0940
-0949 094c
-0982 0983
-09be 09c0
-09c7 09c8
-09cb 09cc
-09d7
-0a3e 0a40
-0a83
-0abe 0ac0
-0ac9
-0acb 0acc
-0b02 0b03
-0b3e
-0b40
-0b47 0b48
-0b4b 0b4c
-0b57
-0b83
-0bbe 0bbf
-0bc1 0bc2
-0bc6 0bc8
-0bca 0bcc
-0bd7
-0c01 0c03
-0c41 0c44
-0c82 0c83
-0cbe
-0cc0 0cc4
-0cc7 0cc8
-0cca 0ccb
-0cd5 0cd6
-0d02 0d03
-0d3e 0d40
-0d46 0d48
-0d4a 0d4c
-0d57
-0d82 0d83
-0dcf 0dd1
-0dd8 0ddf
-0df2 0df3
-0f3e 0f3f
-0f7f
-102c
-1031
-1038
-1056 1057
-17b4 17b6
-17be 17c5
-17c7 17c8
-END
diff --git a/contrib/perl5/lib/unicode/Is/Me.pl b/contrib/perl5/lib/unicode/Is/Me.pl
deleted file mode 100644
index 23ef860..0000000
--- a/contrib/perl5/lib/unicode/Is/Me.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0488 0489
-06dd 06de
-20dd 20e0
-20e2 20e3
-END
diff --git a/contrib/perl5/lib/unicode/Is/Mirrored.pl b/contrib/perl5/lib/unicode/Is/Mirrored.pl
deleted file mode 100644
index d324f50..0000000
--- a/contrib/perl5/lib/unicode/Is/Mirrored.pl
+++ /dev/null
@@ -1,48 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0028 0029
-003c
-003e
-005b
-005d
-007b
-007d
-00ab
-00bb
-2039 203a
-2045 2046
-207d 207e
-208d 208e
-2201 2204
-2208 220d
-2211
-2215 2216
-221a 221d
-221f 2222
-2224
-2226
-222b 2233
-2239
-223b 224c
-2252 2255
-225f 2260
-2262
-2264 226b
-226e 228c
-228f 2292
-2298
-22a2 22a3
-22a6 22b8
-22be 22bf
-22c9 22cd
-22d0 22d1
-22d6 22ed
-22f0 22f1
-2308 230b
-2320 2321
-2329 232a
-3008 3011
-3014 301b
-END
diff --git a/contrib/perl5/lib/unicode/Is/Mn.pl b/contrib/perl5/lib/unicode/Is/Mn.pl
deleted file mode 100644
index 803e038..0000000
--- a/contrib/perl5/lib/unicode/Is/Mn.pl
+++ /dev/null
@@ -1,98 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0300 034e
-0360 0362
-0483 0486
-0591 05a1
-05a3 05b9
-05bb 05bd
-05bf
-05c1 05c2
-05c4
-064b 0655
-0670
-06d6 06dc
-06df 06e4
-06e7 06e8
-06ea 06ed
-0711
-0730 074a
-07a6 07b0
-0901 0902
-093c
-0941 0948
-094d
-0951 0954
-0962 0963
-0981
-09bc
-09c1 09c4
-09cd
-09e2 09e3
-0a02
-0a3c
-0a41 0a42
-0a47 0a48
-0a4b 0a4d
-0a70 0a71
-0a81 0a82
-0abc
-0ac1 0ac5
-0ac7 0ac8
-0acd
-0b01
-0b3c
-0b3f
-0b41 0b43
-0b4d
-0b56
-0b82
-0bc0
-0bcd
-0c3e 0c40
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0cbf
-0cc6
-0ccc 0ccd
-0d41 0d43
-0d4d
-0dca
-0dd2 0dd4
-0dd6
-0e31
-0e34 0e3a
-0e47 0e4e
-0eb1
-0eb4 0eb9
-0ebb 0ebc
-0ec8 0ecd
-0f18 0f19
-0f35
-0f37
-0f39
-0f71 0f7e
-0f80 0f84
-0f86 0f87
-0f90 0f97
-0f99 0fbc
-0fc6
-102d 1030
-1032
-1036 1037
-1039
-1058 1059
-17b7 17bd
-17c6
-17c9 17d3
-18a9
-20d0 20dc
-20e1
-302a 302f
-3099 309a
-fb1e
-fe20 fe23
-END
diff --git a/contrib/perl5/lib/unicode/Is/N.pl b/contrib/perl5/lib/unicode/Is/N.pl
deleted file mode 100644
index 8667e77..0000000
--- a/contrib/perl5/lib/unicode/Is/N.pl
+++ /dev/null
@@ -1,43 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039
-00b2 00b3
-00b9
-00bc 00be
-0660 0669
-06f0 06f9
-0966 096f
-09e6 09ef
-09f4 09f9
-0a66 0a6f
-0ae6 0aef
-0b66 0b6f
-0be7 0bf2
-0c66 0c6f
-0ce6 0cef
-0d66 0d6f
-0e50 0e59
-0ed0 0ed9
-0f20 0f33
-1040 1049
-1369 137c
-16ee 16f0
-17e0 17e9
-1810 1819
-2070
-2074 2079
-2080 2089
-2153 2183
-2460 249b
-24ea
-2776 2793
-3007
-3021 3029
-3038 303a
-3192 3195
-3220 3229
-3280 3289
-ff10 ff19
-END
diff --git a/contrib/perl5/lib/unicode/Is/Nd.pl b/contrib/perl5/lib/unicode/Is/Nd.pl
deleted file mode 100644
index 259bb89..0000000
--- a/contrib/perl5/lib/unicode/Is/Nd.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039
-0660 0669
-06f0 06f9
-0966 096f
-09e6 09ef
-0a66 0a6f
-0ae6 0aef
-0b66 0b6f
-0be7 0bef
-0c66 0c6f
-0ce6 0cef
-0d66 0d6f
-0e50 0e59
-0ed0 0ed9
-0f20 0f29
-1040 1049
-1369 1371
-17e0 17e9
-1810 1819
-ff10 ff19
-END
diff --git a/contrib/perl5/lib/unicode/Is/Nl.pl b/contrib/perl5/lib/unicode/Is/Nl.pl
deleted file mode 100644
index bdeefd5..0000000
--- a/contrib/perl5/lib/unicode/Is/Nl.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2160 2183
-3007
-3021 3029
-3038 303a
-END
diff --git a/contrib/perl5/lib/unicode/Is/No.pl b/contrib/perl5/lib/unicode/Is/No.pl
deleted file mode 100644
index 13cac3b..0000000
--- a/contrib/perl5/lib/unicode/Is/No.pl
+++ /dev/null
@@ -1,23 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00b2 00b3
-00b9
-00bc 00be
-09f4 09f9
-0bf0 0bf2
-0f2a 0f33
-1372 137c
-16ee 16f0
-2070
-2074 2079
-2080 2089
-2153 215f
-2460 249b
-24ea
-2776 2793
-3192 3195
-3220 3229
-3280 3289
-END
diff --git a/contrib/perl5/lib/unicode/Is/P.pl b/contrib/perl5/lib/unicode/Is/P.pl
deleted file mode 100644
index 97330ec..0000000
--- a/contrib/perl5/lib/unicode/Is/P.pl
+++ /dev/null
@@ -1,80 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0021 0023
-0025 002a
-002c 002f
-003a 003b
-003f 0040
-005b 005d
-005f
-007b
-007d
-00a1
-00ab
-00ad
-00b7
-00bb
-00bf
-037e
-0387
-055a 055f
-0589 058a
-05be
-05c0
-05c3
-05f3 05f4
-060c
-061b
-061f
-066a 066d
-06d4
-0700 070d
-0964 0965
-0970
-0df4
-0e4f
-0e5a 0e5b
-0f04 0f12
-0f3a 0f3d
-0f85
-104a 104f
-10fb
-1361 1368
-166d 166e
-169b 169c
-16eb 16ed
-17d4 17da
-17dc
-1800 180a
-2010 2027
-2030 2043
-2045 2046
-2048 204d
-207d 207e
-208d 208e
-2329 232a
-3001 3003
-3008 3011
-3014 301f
-3030
-30fb
-fd3e fd3f
-fe30 fe44
-fe49 fe52
-fe54 fe61
-fe63
-fe68
-fe6a fe6b
-ff01 ff03
-ff05 ff0a
-ff0c ff0f
-ff1a ff1b
-ff1f ff20
-ff3b ff3d
-ff3f
-ff5b
-ff5d
-ff61 ff65
-END
diff --git a/contrib/perl5/lib/unicode/Is/Pc.pl b/contrib/perl5/lib/unicode/Is/Pc.pl
deleted file mode 100644
index e14874d..0000000
--- a/contrib/perl5/lib/unicode/Is/Pc.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-005f
-203f 2040
-30fb
-fe33 fe34
-fe4d fe4f
-ff3f
-ff65
-END
diff --git a/contrib/perl5/lib/unicode/Is/Pd.pl b/contrib/perl5/lib/unicode/Is/Pd.pl
deleted file mode 100644
index b4a2ffb..0000000
--- a/contrib/perl5/lib/unicode/Is/Pd.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-002d
-00ad
-058a
-1806
-2010 2015
-301c
-3030
-fe31 fe32
-fe58
-fe63
-ff0d
-END
diff --git a/contrib/perl5/lib/unicode/Is/Pe.pl b/contrib/perl5/lib/unicode/Is/Pe.pl
deleted file mode 100644
index 2b5bd3e..0000000
--- a/contrib/perl5/lib/unicode/Is/Pe.pl
+++ /dev/null
@@ -1,41 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0029
-005d
-007d
-0f3b
-0f3d
-169c
-2046
-207e
-208e
-232a
-3009
-300b
-300d
-300f
-3011
-3015
-3017
-3019
-301b
-301e 301f
-fd3f
-fe36
-fe38
-fe3a
-fe3c
-fe3e
-fe40
-fe42
-fe44
-fe5a
-fe5c
-fe5e
-ff09
-ff3d
-ff5d
-ff63
-END
diff --git a/contrib/perl5/lib/unicode/Is/Pf.pl b/contrib/perl5/lib/unicode/Is/Pf.pl
deleted file mode 100644
index b27a4f6..0000000
--- a/contrib/perl5/lib/unicode/Is/Pf.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00bb
-2019
-201d
-203a
-END
diff --git a/contrib/perl5/lib/unicode/Is/Pi.pl b/contrib/perl5/lib/unicode/Is/Pi.pl
deleted file mode 100644
index dbbae44..0000000
--- a/contrib/perl5/lib/unicode/Is/Pi.pl
+++ /dev/null
@@ -1,10 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00ab
-2018
-201b 201c
-201f
-2039
-END
diff --git a/contrib/perl5/lib/unicode/Is/Po.pl b/contrib/perl5/lib/unicode/Is/Po.pl
deleted file mode 100644
index 849ee17..0000000
--- a/contrib/perl5/lib/unicode/Is/Po.pl
+++ /dev/null
@@ -1,70 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0021 0023
-0025 0027
-002a
-002c
-002e 002f
-003a 003b
-003f 0040
-005c
-00a1
-00b7
-00bf
-037e
-0387
-055a 055f
-0589
-05be
-05c0
-05c3
-05f3 05f4
-060c
-061b
-061f
-066a 066d
-06d4
-0700 070d
-0964 0965
-0970
-0df4
-0e4f
-0e5a 0e5b
-0f04 0f12
-0f85
-104a 104f
-10fb
-1361 1368
-166d 166e
-16eb 16ed
-17d4 17da
-17dc
-1800 1805
-1807 180a
-2016 2017
-2020 2027
-2030 2038
-203b 203e
-2041 2043
-2048 204d
-3001 3003
-fe30
-fe49 fe4c
-fe50 fe52
-fe54 fe57
-fe5f fe61
-fe68
-fe6a fe6b
-ff01 ff03
-ff05 ff07
-ff0a
-ff0c
-ff0e ff0f
-ff1a ff1b
-ff1f ff20
-ff3c
-ff61
-ff64
-END
diff --git a/contrib/perl5/lib/unicode/Is/Print.pl b/contrib/perl5/lib/unicode/Is/Print.pl
deleted file mode 100644
index 1229a28..0000000
--- a/contrib/perl5/lib/unicode/Is/Print.pl
+++ /dev/null
@@ -1,365 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0020 007e
-00a0 021f
-0222 0233
-0250 02ad
-02b0 02ee
-0300 034e
-0360 0362
-0374 0375
-037a
-037e
-0384 038a
-038c
-038e 03a1
-03a3 03ce
-03d0 03d7
-03da 03f3
-0400 0486
-0488 0489
-048c 04c4
-04c7 04c8
-04cb 04cc
-04d0 04f5
-04f8 04f9
-0531 0556
-0559 055f
-0561 0587
-0589 058a
-0591 05a1
-05a3 05b9
-05bb 05c4
-05d0 05ea
-05f0 05f4
-060c
-061b
-061f
-0621 063a
-0640 0655
-0660 066d
-0670 06ed
-06f0 06fe
-0700 070d
-0710 072c
-0730 074a
-0780 07b0
-0901 0903
-0905 0939
-093c 094d
-0950 0954
-0958 0970
-0981 0983
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09bc
-09be 09c4
-09c7 09c8
-09cb 09cd
-09d7
-09dc 09dd
-09df 09e3
-09e6 09fa
-0a02
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a3c
-0a3e 0a42
-0a47 0a48
-0a4b 0a4d
-0a59 0a5c
-0a5e
-0a66 0a74
-0a81 0a83
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abc 0ac5
-0ac7 0ac9
-0acb 0acd
-0ad0
-0ae0
-0ae6 0aef
-0b01 0b03
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3c 0b43
-0b47 0b48
-0b4b 0b4d
-0b56 0b57
-0b5c 0b5d
-0b5f 0b61
-0b66 0b70
-0b82 0b83
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0bbe 0bc2
-0bc6 0bc8
-0bca 0bcd
-0bd7
-0be7 0bf2
-0c01 0c03
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c3e 0c44
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0c60 0c61
-0c66 0c6f
-0c82 0c83
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cbe 0cc4
-0cc6 0cc8
-0cca 0ccd
-0cd5 0cd6
-0cde
-0ce0 0ce1
-0ce6 0cef
-0d02 0d03
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d3e 0d43
-0d46 0d48
-0d4a 0d4d
-0d57
-0d60 0d61
-0d66 0d6f
-0d82 0d83
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0dca
-0dcf 0dd4
-0dd6
-0dd8 0ddf
-0df2 0df4
-0e01 0e3a
-0e3f 0e5b
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb9
-0ebb 0ebd
-0ec0 0ec4
-0ec6
-0ec8 0ecd
-0ed0 0ed9
-0edc 0edd
-0f00 0f47
-0f49 0f6a
-0f71 0f8b
-0f90 0f97
-0f99 0fbc
-0fbe 0fcc
-0fcf
-1000 1021
-1023 1027
-1029 102a
-102c 1032
-1036 1039
-1040 1059
-10a0 10c5
-10d0 10f6
-10fb
-1100 1159
-115f 11a2
-11a8 11f9
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-1361 137c
-13a0 13f4
-1401 1676
-1680 169c
-16a0 16f0
-1780 17dc
-17e0 17e9
-1800 180a
-1810 1819
-1820 1877
-1880 18a9
-1e00 1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fc4
-1fc6 1fd3
-1fd6 1fdb
-1fdd 1fef
-1ff2 1ff4
-1ff6 1ffe
-2000 200b
-2010 2027
-202f 2046
-2048 204d
-2070
-2074 208e
-20a0 20af
-20d0 20e3
-2100 213a
-2153 2183
-2190 21f3
-2200 22f1
-2300 237b
-237d 239a
-2400 2426
-2440 244a
-2460 24ea
-2500 2595
-25a0 25f7
-2600 2613
-2619 2671
-2701 2704
-2706 2709
-270c 2727
-2729 274b
-274d
-274f 2752
-2756
-2758 275e
-2761 2767
-2776 2794
-2798 27af
-27b1 27be
-2800 28ff
-2e80 2e99
-2e9b 2ef3
-2f00 2fd5
-2ff0 2ffb
-3000 303a
-303e 303f
-3041 3094
-3099 309e
-30a1 30fe
-3105 312c
-3131 318e
-3190 31b7
-3200 321c
-3220 3243
-3260 327b
-327f 32b0
-32c0 32cb
-32d0 32fe
-3300 3376
-337b 33dd
-33e0 33fe
-3400 4db5
-4e00 9fa5
-a000 a48c
-a490 a4a1
-a4a4 a4b3
-a4b5 a4c0
-a4c2 a4c4
-a4c6
-ac00 d7a3
-e000 f8ff
-f900 fa2d
-fb00 fb06
-fb13 fb17
-fb1d fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fbb1
-fbd3 fd3f
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe20 fe23
-fe30 fe44
-fe49 fe52
-fe54 fe66
-fe68 fe6b
-fe70 fe72
-fe74
-fe76 fefc
-ff01 ff5e
-ff61 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-ffe0 ffe6
-ffe8 ffee
-fffc fffd
-f0000 ffffd
-100000 10fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/Ps.pl b/contrib/perl5/lib/unicode/Is/Ps.pl
deleted file mode 100644
index 90f1809..0000000
--- a/contrib/perl5/lib/unicode/Is/Ps.pl
+++ /dev/null
@@ -1,43 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0028
-005b
-007b
-0f3a
-0f3c
-169b
-201a
-201e
-2045
-207d
-208d
-2329
-3008
-300a
-300c
-300e
-3010
-3014
-3016
-3018
-301a
-301d
-fd3e
-fe35
-fe37
-fe39
-fe3b
-fe3d
-fe3f
-fe41
-fe43
-fe59
-fe5b
-fe5d
-ff08
-ff3b
-ff5b
-ff62
-END
diff --git a/contrib/perl5/lib/unicode/Is/Punct.pl b/contrib/perl5/lib/unicode/Is/Punct.pl
deleted file mode 100644
index 97330ec..0000000
--- a/contrib/perl5/lib/unicode/Is/Punct.pl
+++ /dev/null
@@ -1,80 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0021 0023
-0025 002a
-002c 002f
-003a 003b
-003f 0040
-005b 005d
-005f
-007b
-007d
-00a1
-00ab
-00ad
-00b7
-00bb
-00bf
-037e
-0387
-055a 055f
-0589 058a
-05be
-05c0
-05c3
-05f3 05f4
-060c
-061b
-061f
-066a 066d
-06d4
-0700 070d
-0964 0965
-0970
-0df4
-0e4f
-0e5a 0e5b
-0f04 0f12
-0f3a 0f3d
-0f85
-104a 104f
-10fb
-1361 1368
-166d 166e
-169b 169c
-16eb 16ed
-17d4 17da
-17dc
-1800 180a
-2010 2027
-2030 2043
-2045 2046
-2048 204d
-207d 207e
-208d 208e
-2329 232a
-3001 3003
-3008 3011
-3014 301f
-3030
-30fb
-fd3e fd3f
-fe30 fe44
-fe49 fe52
-fe54 fe61
-fe63
-fe68
-fe6a fe6b
-ff01 ff03
-ff05 ff0a
-ff0c ff0f
-ff1a ff1b
-ff1f ff20
-ff3b ff3d
-ff3f
-ff5b
-ff5d
-ff61 ff65
-END
diff --git a/contrib/perl5/lib/unicode/Is/S.pl b/contrib/perl5/lib/unicode/Is/S.pl
deleted file mode 100644
index a304e17..0000000
--- a/contrib/perl5/lib/unicode/Is/S.pl
+++ /dev/null
@@ -1,131 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0024
-002b
-003c 003e
-005e
-0060
-007c
-007e
-00a2 00a9
-00ac
-00ae 00b1
-00b4
-00b6
-00b8
-00d7
-00f7
-02b9 02ba
-02c2 02cf
-02d2 02df
-02e5 02ed
-0374 0375
-0384 0385
-0482
-06e9
-06fd 06fe
-09f2 09f3
-09fa
-0b70
-0e3f
-0f01 0f03
-0f13 0f17
-0f1a 0f1f
-0f34
-0f36
-0f38
-0fbe 0fc5
-0fc7 0fcc
-0fcf
-17db
-1fbd
-1fbf 1fc1
-1fcd 1fcf
-1fdd 1fdf
-1fed 1fef
-1ffd 1ffe
-2044
-207a 207c
-208a 208c
-20a0 20af
-2100 2101
-2103 2106
-2108 2109
-2114
-2116 2118
-211e 2123
-2125
-2127
-2129
-212e
-2132
-213a
-2190 21f3
-2200 22f1
-2300 2328
-232b 237b
-237d 239a
-2400 2426
-2440 244a
-249c 24e9
-2500 2595
-25a0 25f7
-2600 2613
-2619 2671
-2701 2704
-2706 2709
-270c 2727
-2729 274b
-274d
-274f 2752
-2756
-2758 275e
-2761 2767
-2794
-2798 27af
-27b1 27be
-2800 28ff
-2e80 2e99
-2e9b 2ef3
-2f00 2fd5
-2ff0 2ffb
-3004
-3012 3013
-3020
-3036 3037
-303e 303f
-309b 309c
-3190 3191
-3196 319f
-3200 321c
-322a 3243
-3260 327b
-327f
-328a 32b0
-32c0 32cb
-32d0 32fe
-3300 3376
-337b 33dd
-33e0 33fe
-a490 a4a1
-a4a4 a4b3
-a4b5 a4c0
-a4c2 a4c4
-a4c6
-fb29
-fe62
-fe64 fe66
-fe69
-ff04
-ff0b
-ff1c ff1e
-ff3e
-ff40
-ff5c
-ff5e
-ffe0 ffe6
-ffe8 ffee
-fffc fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/Sc.pl b/contrib/perl5/lib/unicode/Is/Sc.pl
deleted file mode 100644
index adeb3e4..0000000
--- a/contrib/perl5/lib/unicode/Is/Sc.pl
+++ /dev/null
@@ -1,15 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0024
-00a2 00a5
-09f2 09f3
-0e3f
-17db
-20a0 20af
-fe69
-ff04
-ffe0 ffe1
-ffe5 ffe6
-END
diff --git a/contrib/perl5/lib/unicode/Is/Sk.pl b/contrib/perl5/lib/unicode/Is/Sk.pl
deleted file mode 100644
index 52f88ae..0000000
--- a/contrib/perl5/lib/unicode/Is/Sk.pl
+++ /dev/null
@@ -1,27 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-005e
-0060
-00a8
-00af
-00b4
-00b8
-02b9 02ba
-02c2 02cf
-02d2 02df
-02e5 02ed
-0374 0375
-0384 0385
-1fbd
-1fbf 1fc1
-1fcd 1fcf
-1fdd 1fdf
-1fed 1fef
-1ffd 1ffe
-309b 309c
-ff3e
-ff40
-ffe3
-END
diff --git a/contrib/perl5/lib/unicode/Is/Sm.pl b/contrib/perl5/lib/unicode/Is/Sm.pl
deleted file mode 100644
index 540da63..0000000
--- a/contrib/perl5/lib/unicode/Is/Sm.pl
+++ /dev/null
@@ -1,40 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-002b
-003c 003e
-007c
-007e
-00ac
-00b1
-00d7
-00f7
-2044
-207a 207c
-208a 208c
-2190 2194
-219a 219b
-21a0
-21a3
-21a6
-21ae
-21ce 21cf
-21d2
-21d4
-2200 22f1
-2308 230b
-2320 2321
-25b7
-25c1
-266f
-fb29
-fe62
-fe64 fe66
-ff0b
-ff1c ff1e
-ff5c
-ff5e
-ffe2
-ffe9 ffec
-END
diff --git a/contrib/perl5/lib/unicode/Is/So.pl b/contrib/perl5/lib/unicode/Is/So.pl
deleted file mode 100644
index 3caf617..0000000
--- a/contrib/perl5/lib/unicode/Is/So.pl
+++ /dev/null
@@ -1,103 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-00a6 00a7
-00a9
-00ae
-00b0
-00b6
-0482
-06e9
-06fd 06fe
-09fa
-0b70
-0f01 0f03
-0f13 0f17
-0f1a 0f1f
-0f34
-0f36
-0f38
-0fbe 0fc5
-0fc7 0fcc
-0fcf
-2100 2101
-2103 2106
-2108 2109
-2114
-2116 2118
-211e 2123
-2125
-2127
-2129
-212e
-2132
-213a
-2195 2199
-219c 219f
-21a1 21a2
-21a4 21a5
-21a7 21ad
-21af 21cd
-21d0 21d1
-21d3
-21d5 21f3
-2300 2307
-230c 231f
-2322 2328
-232b 237b
-237d 239a
-2400 2426
-2440 244a
-249c 24e9
-2500 2595
-25a0 25b6
-25b8 25c0
-25c2 25f7
-2600 2613
-2619 266e
-2670 2671
-2701 2704
-2706 2709
-270c 2727
-2729 274b
-274d
-274f 2752
-2756
-2758 275e
-2761 2767
-2794
-2798 27af
-27b1 27be
-2800 28ff
-2e80 2e99
-2e9b 2ef3
-2f00 2fd5
-2ff0 2ffb
-3004
-3012 3013
-3020
-3036 3037
-303e 303f
-3190 3191
-3196 319f
-3200 321c
-322a 3243
-3260 327b
-327f
-328a 32b0
-32c0 32cb
-32d0 32fe
-3300 3376
-337b 33dd
-33e0 33fe
-a490 a4a1
-a4a4 a4b3
-a4b5 a4c0
-a4c2 a4c4
-a4c6
-ffe4
-ffe8
-ffed ffee
-fffc fffd
-END
diff --git a/contrib/perl5/lib/unicode/Is/Space.pl b/contrib/perl5/lib/unicode/Is/Space.pl
deleted file mode 100644
index 9971082..0000000
--- a/contrib/perl5/lib/unicode/Is/Space.pl
+++ /dev/null
@@ -1,13 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0009 000d
-0020
-00a0
-1680
-2000 200b
-2028 2029
-202f
-3000
-END
diff --git a/contrib/perl5/lib/unicode/Is/SpacePerl.pl b/contrib/perl5/lib/unicode/Is/SpacePerl.pl
deleted file mode 100644
index 2bb74de..0000000
--- a/contrib/perl5/lib/unicode/Is/SpacePerl.pl
+++ /dev/null
@@ -1,14 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0009 000a
-000c 000d
-0020
-00a0
-1680
-2000 200b
-2028 2029
-202f
-3000
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylA.pl b/contrib/perl5/lib/unicode/Is/SylA.pl
deleted file mode 100644
index 6a3fc47..0000000
--- a/contrib/perl5/lib/unicode/Is/SylA.pl
+++ /dev/null
@@ -1,158 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1203
-120b
-1213
-121b
-1223
-122b
-1233
-123b
-1243
-1253
-1263
-126b
-1273
-127b
-1283
-1293
-129b
-12a3
-12ab
-12bb
-12cb
-12d3
-12db
-12e3
-12eb
-12f3
-12fb
-1303
-130b
-131b
-1323
-132b
-1333
-133b
-1343
-134b
-1353
-13a0
-13a6 13a7
-13ad
-13b3
-13b9
-13be 13bf
-13c6
-13cc
-13d3 13d4
-13dc 13dd
-13e3
-13e9
-13ef
-140a
-1438
-1455
-146a
-1472
-1490
-14aa
-14c7
-14da
-14f4
-1515
-152d
-154b
-154d
-1559
-1566
-156e
-1573
-1579
-1583
-1589
-158d
-1593
-159a
-159e
-15a4
-15ac
-15b3
-15b7
-15bb
-15bf
-15c3
-15c9
-15cf
-15d5
-15e1
-15e7
-15ed
-15f4
-15fa
-1600
-1607
-160d
-1613
-161b
-1621
-1627
-162d
-1633
-1639
-163f
-1645
-164d
-1653
-1659
-1660
-1666
-166c
-1675
-30a1 30a2
-30ab 30ac
-30b5 30b6
-30bf 30c0
-30ca
-30cf 30d1
-30de
-30e3 30e4
-30e9
-30ee 30ef
-30f5
-30f7
-32d0
-32d5
-32da
-32df
-32e4
-32e9
-32ee
-32f3
-32f6
-32fb
-ff67
-ff6c
-ff71
-ff76
-ff7b
-ff80
-ff85
-ff8a
-ff8f
-ff94
-ff97
-ff9c
-3041 3042
-304b 304c
-3055 3056
-305f 3060
-306a
-306f 3071
-307e
-3083 3084
-3089
-308e 308f
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylAA.pl b/contrib/perl5/lib/unicode/Is/SylAA.pl
deleted file mode 100644
index 6d1bd6d..0000000
--- a/contrib/perl5/lib/unicode/Is/SylAA.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-140b
-1439
-1456
-1473
-1491
-14ab
-14c8
-14db
-14f5
-1516
-152e
-154c
-155a
-1567
-157a
-1584
-1594
-15a5
-15ad
-1676
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylAAI.pl b/contrib/perl5/lib/unicode/Is/SylAAI.pl
deleted file mode 100644
index 83134b6..0000000
--- a/contrib/perl5/lib/unicode/Is/SylAAI.pl
+++ /dev/null
@@ -1,19 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1402
-1430
-144d
-146c
-148a
-14a4
-14c1
-14d4
-14ee
-1527
-1545
-1554
-157e
-158e
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylAI.pl b/contrib/perl5/lib/unicode/Is/SylAI.pl
deleted file mode 100644
index e639bd0..0000000
--- a/contrib/perl5/lib/unicode/Is/SylAI.pl
+++ /dev/null
@@ -1,7 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-141c
-166f 1670
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylC.pl b/contrib/perl5/lib/unicode/Is/SylC.pl
deleted file mode 100644
index fb8b08e..0000000
--- a/contrib/perl5/lib/unicode/Is/SylC.pl
+++ /dev/null
@@ -1,70 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1205
-120d
-1215
-121d
-1225
-122d
-1235
-123d
-1245
-1255
-1265
-126d
-1275
-127d
-1285
-1295
-129d
-12a5
-12ad
-12bd
-12cd
-12d5
-12dd
-12e5
-12ed
-12f5
-12fd
-1305
-130d
-131d
-1325
-132d
-1335
-133d
-1345
-134d
-1355
-13c0
-13cd
-141d
-142b 142e
-1449 144b
-1466
-1483
-1485 1488
-14a1
-14bb 14bf
-14d0 14d2
-14ea 14ec
-1505 1506
-1508 150b
-1525
-153e 1540
-1550 1552
-155d
-156a
-156f
-157b 157d
-1585
-1595 1596
-159f
-15a6
-15ae 15af
-30f3
-ff9d
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylE.pl b/contrib/perl5/lib/unicode/Is/SylE.pl
deleted file mode 100644
index d762748..0000000
--- a/contrib/perl5/lib/unicode/Is/SylE.pl
+++ /dev/null
@@ -1,147 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1204
-120c
-1214
-121c
-1224
-122c
-1234
-123c
-1244
-1254
-1264
-126c
-1274
-127c
-1284
-1294
-129c
-12a4
-12ac
-12bc
-12cc
-12d4
-12dc
-12e4
-12ec
-12f4
-12fc
-1304
-130c
-131c
-1324
-132c
-1334
-133c
-1344
-134c
-1354
-13a1
-13a8
-13ae
-13b4
-13ba
-13c1
-13c7
-13ce
-13d5 13d6
-13de
-13e4
-13ea
-13f0
-1401
-142f
-144c
-1467
-146b
-1489
-14a3
-14c0
-14d3
-14ed
-1510
-1526
-1542 1544
-1553
-155e 155f
-156b
-1570
-1574
-1586
-158a
-1597
-159b
-15a7
-15b0
-15b4
-15b8
-15bc
-15c0
-15c6
-15cc
-15d2
-15de
-15e4
-15ea
-15f1
-15f7
-15fd
-1604
-160a
-1610
-1617
-161e
-1624
-162a
-1630
-1636
-163c
-1642
-164a
-1650
-1656
-165d
-1663
-1669
-30a7 30a8
-30b1 30b2
-30bb 30bc
-30c6 30c7
-30cd
-30d8 30da
-30e1
-30ec
-30f1
-30f6
-30f9
-32d3
-32d8
-32dd
-32e2
-32e7
-32ec
-32f1
-32f9
-32fd
-ff6a
-ff74
-ff79
-ff7e
-ff83
-ff88
-ff8d
-ff92
-ff9a
-3047 3048
-3051 3052
-305b 305c
-3066 3067
-306d
-3078 307a
-3081
-308c
-3091
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylEE.pl b/contrib/perl5/lib/unicode/Is/SylEE.pl
deleted file mode 100644
index 9f8ff07..0000000
--- a/contrib/perl5/lib/unicode/Is/SylEE.pl
+++ /dev/null
@@ -1,34 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1408
-1436
-1453
-15c7
-15cd
-15d3
-15df
-15e5
-15eb
-15f2
-15f8
-15fe
-1605
-160b
-1611
-1618
-161f
-1625
-162b
-1631
-1637
-163d
-1643
-164b
-1651
-1657
-165e
-1664
-166a
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylI.pl b/contrib/perl5/lib/unicode/Is/SylI.pl
deleted file mode 100644
index 29bc70f..0000000
--- a/contrib/perl5/lib/unicode/Is/SylI.pl
+++ /dev/null
@@ -1,154 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1202
-120a
-1212
-121a
-1222
-122a
-1232
-123a
-1242
-1252
-1262
-126a
-1272
-127a
-1282
-1292
-129a
-12a2
-12aa
-12ba
-12ca
-12d2
-12da
-12e2
-12ea
-12f2
-12fa
-1302
-130a
-131a
-1322
-132a
-1332
-133a
-1342
-134a
-1352
-13a2
-13a9
-13af
-13b5
-13bb
-13c2
-13c8
-13cf
-13d7 13d8
-13df
-13e5
-13eb
-13f1
-1403
-1409
-1431
-1437
-144e
-1454
-1468
-146d
-148b
-14a5
-14c2
-14d5
-14ef
-1511
-1528
-1541
-1546
-1555
-1560 1561
-156c
-1571
-1575
-157f
-1587
-158b
-158f
-1598
-159c
-15a0
-15a8
-15b1
-15b5
-15b9
-15bd
-15c1
-15c8
-15ce
-15d4
-15e0
-15e6
-15ec
-15f3
-15f9
-15ff
-1606
-160c
-1612
-1619 161a
-1620
-1626
-162c
-1632
-1638
-163e
-1644
-164c
-1652
-1658
-165f
-1665
-166b
-1671
-30a3 30a4
-30ad 30ae
-30b7 30b8
-30c1 30c2
-30cb
-30d2 30d4
-30df
-30ea
-30f0
-30f8
-32d1
-32d6
-32db
-32e0
-32e5
-32ea
-32ef
-32f7
-32fc
-ff68
-ff72
-ff77
-ff7c
-ff81
-ff86
-ff8b
-ff90
-ff98
-3043 3044
-304d 304e
-3057 3058
-3061 3062
-306b
-3072 3074
-307f
-308a
-3090
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylII.pl b/contrib/perl5/lib/unicode/Is/SylII.pl
deleted file mode 100644
index 2dcd49f..0000000
--- a/contrib/perl5/lib/unicode/Is/SylII.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1404
-1432
-144f
-146e
-148c
-14a6
-14c3
-14d6
-14f0
-1512
-1529
-1547
-1556
-1562 1563
-1576
-1580
-1590
-15a1
-15a9
-1672
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylN.pl b/contrib/perl5/lib/unicode/Is/SylN.pl
deleted file mode 100644
index d7d90c7..0000000
--- a/contrib/perl5/lib/unicode/Is/SylN.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-3093
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylO.pl b/contrib/perl5/lib/unicode/Is/SylO.pl
deleted file mode 100644
index 2c795f0..0000000
--- a/contrib/perl5/lib/unicode/Is/SylO.pl
+++ /dev/null
@@ -1,157 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1206
-120e
-1216
-121e
-1226
-122e
-1236
-123e
-1246
-1256
-1266
-126e
-1276
-127e
-1286
-1296
-129e
-12a6
-12ae
-12be
-12ce
-12d6
-12de
-12e6
-12ee
-12f6
-12fe
-1306
-130e
-131e
-1326
-132e
-1336
-133e
-1346
-134e
-1356
-13a3
-13aa
-13b0
-13b6
-13bc
-13c3
-13c9
-13d0
-13d9
-13e0
-13e6
-13ec
-13f2
-1405
-1433
-1450
-1469
-146f
-148d
-14a7
-14c4
-14d7
-14f1
-1513
-152a
-1548
-154a
-1557
-1564
-156d
-1572
-1577
-1581
-1588
-158c
-1591
-1599
-159d
-15a2
-15aa
-15b2
-15b6
-15ba
-15be
-15c2
-15c5
-15cb
-15d1
-15dd
-15e3
-15e9
-15f0
-15f6
-15fc
-1603
-1609
-160f
-1616
-161d
-1623
-1629
-162f
-1635
-163b
-1641
-1649
-164f
-1655
-165c
-1662
-1668
-1673
-30a9 30aa
-30b3 30b4
-30bd 30be
-30c8 30c9
-30ce
-30db 30dd
-30e2
-30e7 30e8
-30ed
-30f2
-30fa
-32d4
-32d9
-32de
-32e3
-32e8
-32ed
-32f2
-32f5
-32fa
-32fe
-ff66
-ff6b
-ff6e
-ff75
-ff7a
-ff7f
-ff84
-ff89
-ff8e
-ff93
-ff96
-ff9b
-3049 304a
-3053 3054
-305d 305e
-3068 3069
-306e
-307b 307d
-3082
-3087 3088
-308d
-3092
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylOO.pl b/contrib/perl5/lib/unicode/Is/SylOO.pl
deleted file mode 100644
index 27c8032..0000000
--- a/contrib/perl5/lib/unicode/Is/SylOO.pl
+++ /dev/null
@@ -1,25 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1406 1407
-1434 1435
-1451 1452
-1470 1471
-148e 148f
-14a8 14a9
-14c5 14c6
-14d8 14d9
-14f2 14f3
-1514
-152b 152c
-1549
-1558
-1565
-1578
-1582
-1592
-15a3
-15ab
-1674
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylU.pl b/contrib/perl5/lib/unicode/Is/SylU.pl
deleted file mode 100644
index 117d981..0000000
--- a/contrib/perl5/lib/unicode/Is/SylU.pl
+++ /dev/null
@@ -1,122 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1201
-1209
-1211
-1219
-1221
-1229
-1231
-1239
-1241
-1251
-1261
-1269
-1271
-1279
-1281
-1291
-1299
-12a1
-12a9
-12b9
-12c9
-12d1
-12d9
-12e1
-12e9
-12f1
-12f9
-1301
-1309
-1319
-1321
-1329
-1331
-1339
-1341
-1349
-1351
-13a4
-13ab
-13b1
-13b7
-13bd
-13c4
-13ca
-13d1
-13da
-13e1
-13e7
-13ed
-13f3
-15c4
-15ca
-15d0
-15dc
-15e2
-15e8
-15ef
-15f5
-15fb
-1602
-1608
-160e
-1614 1615
-161c
-1622
-1628
-162e
-1634
-163a
-1640
-1648
-164e
-1654
-165b
-1661
-1667
-30a5 30a6
-30af 30b0
-30b9 30ba
-30c3 30c5
-30cc
-30d5 30d7
-30e0
-30e5 30e6
-30eb
-30f4
-32d2
-32d7
-32dc
-32e1
-32e6
-32eb
-32f0
-32f4
-32f8
-ff69
-ff6d
-ff6f
-ff73
-ff78
-ff7d
-ff82
-ff87
-ff8c
-ff91
-ff95
-ff99
-3045 3046
-304f 3050
-3059 305a
-3063 3065
-306c
-3075 3077
-3080
-3085 3086
-308b
-3094
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylV.pl b/contrib/perl5/lib/unicode/Is/SylV.pl
deleted file mode 100644
index e5a39ed..0000000
--- a/contrib/perl5/lib/unicode/Is/SylV.pl
+++ /dev/null
@@ -1,54 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1200
-1208
-1210
-1218
-1220
-1228
-1230
-1238
-1240
-1250
-1260
-1268
-1270
-1278
-1280
-1290
-1298
-12a0
-12a8
-12b8
-12c8
-12d0
-12d8
-12e0
-12e8
-12f0
-12f8
-1300
-1308
-1318
-1320
-1328
-1330
-1338
-1340
-1348
-1350
-13a5
-13ac
-13b2
-13b8
-13c5
-13cb
-13d2
-13db
-13e2
-13e8
-13ee
-13f4
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWA.pl b/contrib/perl5/lib/unicode/Is/SylWA.pl
deleted file mode 100644
index 39e94ca..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWA.pl
+++ /dev/null
@@ -1,49 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-120f
-1217
-121f
-1227
-122f
-1237
-123f
-124b
-125b
-1267
-126f
-1277
-127f
-128b
-1297
-129f
-12a7
-12b3
-12c3
-12df
-12e7
-12f7
-12ff
-1307
-1313
-1327
-132f
-1337
-133f
-134f
-1357
-1417 1418
-1444 1445
-1461 1462
-147e 147f
-149c 149d
-14b6 14b7
-14cb 14cc
-14e6 14e7
-1500 1501
-150c 150f
-1521 1522
-1539 153a
-15db
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWAA.pl b/contrib/perl5/lib/unicode/Is/SylWAA.pl
deleted file mode 100644
index cd560eb..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWAA.pl
+++ /dev/null
@@ -1,19 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1419 141b
-1446 1448
-1463 1465
-1480 1482
-149e 14a0
-14b8 14ba
-14cd 14cf
-14e8 14e9
-1502 1504
-1523 1524
-153b 153d
-154e 154f
-155b 155c
-1568 1569
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWC.pl b/contrib/perl5/lib/unicode/Is/SylWC.pl
deleted file mode 100644
index 4272b89..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWC.pl
+++ /dev/null
@@ -1,13 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-124d
-125d
-128d
-12b5
-12c5
-1315
-1484
-1507
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWE.pl b/contrib/perl5/lib/unicode/Is/SylWE.pl
deleted file mode 100644
index c4c5ba9..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWE.pl
+++ /dev/null
@@ -1,23 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-124c
-125c
-128c
-12b4
-12c4
-1314
-140c 140d
-143a 143b
-1457 1458
-1474 1475
-1492 1493
-14ac 14ad
-14c9 14ca
-14dc 14dd
-14f6 14f7
-1517 1518
-152f 1530
-15d8
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWEE.pl b/contrib/perl5/lib/unicode/Is/SylWEE.pl
deleted file mode 100644
index d316029..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWEE.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-15d9
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWI.pl b/contrib/perl5/lib/unicode/Is/SylWI.pl
deleted file mode 100644
index c914b07..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWI.pl
+++ /dev/null
@@ -1,22 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-124a
-125a
-128a
-12b2
-12c2
-1312
-140e 140f
-143c 143d
-1459 145a
-1476 1477
-1494 1495
-14ae 14af
-14de 14df
-14f8 14f9
-1519 151a
-1531 1532
-15da
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWII.pl b/contrib/perl5/lib/unicode/Is/SylWII.pl
deleted file mode 100644
index c990e43..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWII.pl
+++ /dev/null
@@ -1,15 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1410 1411
-143e 143f
-145b 145c
-1478 1479
-1496 1497
-14b0 14b1
-14e0 14e1
-14fa 14fb
-151b 151c
-1533 1534
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWO.pl b/contrib/perl5/lib/unicode/Is/SylWO.pl
deleted file mode 100644
index a73cbdd..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWO.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1412 1413
-1440 1441
-145d 145e
-147a 147b
-1498 1499
-14b2 14b3
-14e2 14e3
-14fc 14fd
-151d 151e
-1535 1536
-15d7
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWOO.pl b/contrib/perl5/lib/unicode/Is/SylWOO.pl
deleted file mode 100644
index 6e92f85..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWOO.pl
+++ /dev/null
@@ -1,15 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1414 1416
-1442 1443
-145f 1460
-147c 147d
-149a 149b
-14b4 14b5
-14e4 14e5
-14fe 14ff
-151f 1520
-1537 1538
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWU.pl b/contrib/perl5/lib/unicode/Is/SylWU.pl
deleted file mode 100644
index d165f41..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWU.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-15d6
-END
diff --git a/contrib/perl5/lib/unicode/Is/SylWV.pl b/contrib/perl5/lib/unicode/Is/SylWV.pl
deleted file mode 100644
index 6a06ae9..0000000
--- a/contrib/perl5/lib/unicode/Is/SylWV.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1248
-1258
-1288
-12b0
-12c0
-1310
-END
diff --git a/contrib/perl5/lib/unicode/Is/Syllable.pl b/contrib/perl5/lib/unicode/Is/Syllable.pl
deleted file mode 100644
index 707ad94..0000000
--- a/contrib/perl5/lib/unicode/Is/Syllable.pl
+++ /dev/null
@@ -1,4 +0,0 @@
-return <<'END';
-0d00 0d7f
-1200 135a
-END
diff --git a/contrib/perl5/lib/unicode/Is/Upper.pl b/contrib/perl5/lib/unicode/Is/Upper.pl
deleted file mode 100644
index 16f8752..0000000
--- a/contrib/perl5/lib/unicode/Is/Upper.pl
+++ /dev/null
@@ -1,379 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0041 005a
-00c0 00d6
-00d8 00de
-0100
-0102
-0104
-0106
-0108
-010a
-010c
-010e
-0110
-0112
-0114
-0116
-0118
-011a
-011c
-011e
-0120
-0122
-0124
-0126
-0128
-012a
-012c
-012e
-0130
-0132
-0134
-0136
-0139
-013b
-013d
-013f
-0141
-0143
-0145
-0147
-014a
-014c
-014e
-0150
-0152
-0154
-0156
-0158
-015a
-015c
-015e
-0160
-0162
-0164
-0166
-0168
-016a
-016c
-016e
-0170
-0172
-0174
-0176
-0178 0179
-017b
-017d
-0181 0182
-0184
-0186 0187
-0189 018b
-018e 0191
-0193 0194
-0196 0198
-019c 019d
-019f 01a0
-01a2
-01a4
-01a6 01a7
-01a9
-01ac
-01ae 01af
-01b1 01b3
-01b5
-01b7 01b8
-01bc
-01c4 01c5
-01c7 01c8
-01ca 01cb
-01cd
-01cf
-01d1
-01d3
-01d5
-01d7
-01d9
-01db
-01de
-01e0
-01e2
-01e4
-01e6
-01e8
-01ea
-01ec
-01ee
-01f1 01f2
-01f4
-01f6 01f8
-01fa
-01fc
-01fe
-0200
-0202
-0204
-0206
-0208
-020a
-020c
-020e
-0210
-0212
-0214
-0216
-0218
-021a
-021c
-021e
-0222
-0224
-0226
-0228
-022a
-022c
-022e
-0230
-0232
-0386
-0388 038a
-038c
-038e 038f
-0391 03a1
-03a3 03ab
-03d2 03d4
-03da
-03dc
-03de
-03e0
-03e2
-03e4
-03e6
-03e8
-03ea
-03ec
-03ee
-0400 042f
-0460
-0462
-0464
-0466
-0468
-046a
-046c
-046e
-0470
-0472
-0474
-0476
-0478
-047a
-047c
-047e
-0480
-048c
-048e
-0490
-0492
-0494
-0496
-0498
-049a
-049c
-049e
-04a0
-04a2
-04a4
-04a6
-04a8
-04aa
-04ac
-04ae
-04b0
-04b2
-04b4
-04b6
-04b8
-04ba
-04bc
-04be
-04c0 04c1
-04c3
-04c7
-04cb
-04d0
-04d2
-04d4
-04d6
-04d8
-04da
-04dc
-04de
-04e0
-04e2
-04e4
-04e6
-04e8
-04ea
-04ec
-04ee
-04f0
-04f2
-04f4
-04f8
-0531 0556
-10a0 10c5
-1e00
-1e02
-1e04
-1e06
-1e08
-1e0a
-1e0c
-1e0e
-1e10
-1e12
-1e14
-1e16
-1e18
-1e1a
-1e1c
-1e1e
-1e20
-1e22
-1e24
-1e26
-1e28
-1e2a
-1e2c
-1e2e
-1e30
-1e32
-1e34
-1e36
-1e38
-1e3a
-1e3c
-1e3e
-1e40
-1e42
-1e44
-1e46
-1e48
-1e4a
-1e4c
-1e4e
-1e50
-1e52
-1e54
-1e56
-1e58
-1e5a
-1e5c
-1e5e
-1e60
-1e62
-1e64
-1e66
-1e68
-1e6a
-1e6c
-1e6e
-1e70
-1e72
-1e74
-1e76
-1e78
-1e7a
-1e7c
-1e7e
-1e80
-1e82
-1e84
-1e86
-1e88
-1e8a
-1e8c
-1e8e
-1e90
-1e92
-1e94
-1ea0
-1ea2
-1ea4
-1ea6
-1ea8
-1eaa
-1eac
-1eae
-1eb0
-1eb2
-1eb4
-1eb6
-1eb8
-1eba
-1ebc
-1ebe
-1ec0
-1ec2
-1ec4
-1ec6
-1ec8
-1eca
-1ecc
-1ece
-1ed0
-1ed2
-1ed4
-1ed6
-1ed8
-1eda
-1edc
-1ede
-1ee0
-1ee2
-1ee4
-1ee6
-1ee8
-1eea
-1eec
-1eee
-1ef0
-1ef2
-1ef4
-1ef6
-1ef8
-1f08 1f0f
-1f18 1f1d
-1f28 1f2f
-1f38 1f3f
-1f48 1f4d
-1f59
-1f5b
-1f5d
-1f5f
-1f68 1f6f
-1f88 1f8f
-1f98 1f9f
-1fa8 1faf
-1fb8 1fbc
-1fc8 1fcc
-1fd8 1fdb
-1fe8 1fec
-1ff8 1ffc
-2102
-2107
-210b 210d
-2110 2112
-2115
-2119 211d
-2124
-2126
-2128
-212a 212d
-2130 2131
-2133
-ff21 ff3a
-END
diff --git a/contrib/perl5/lib/unicode/Is/Word.pl b/contrib/perl5/lib/unicode/Is/Word.pl
deleted file mode 100644
index 6ea32e6..0000000
--- a/contrib/perl5/lib/unicode/Is/Word.pl
+++ /dev/null
@@ -1,359 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039
-0041 005a
-005f
-0061 007a
-00aa
-00b2 00b3
-00b5
-00b9 00ba
-00bc 00be
-00c0 00d6
-00d8 00f6
-00f8 021f
-0222 0233
-0250 02ad
-02b0 02b8
-02bb 02c1
-02d0 02d1
-02e0 02e4
-02ee
-0300 034e
-0360 0362
-037a
-0386
-0388 038a
-038c
-038e 03a1
-03a3 03ce
-03d0 03d7
-03da 03f3
-0400 0481
-0483 0486
-0488 0489
-048c 04c4
-04c7 04c8
-04cb 04cc
-04d0 04f5
-04f8 04f9
-0531 0556
-0559
-0561 0587
-0591 05a1
-05a3 05b9
-05bb 05bd
-05bf
-05c1 05c2
-05c4
-05d0 05ea
-05f0 05f2
-0621 063a
-0640 0655
-0660 0669
-0670 06d3
-06d5 06e8
-06ea 06ed
-06f0 06fc
-0710 072c
-0730 074a
-0780 07b0
-0901 0903
-0905 0939
-093c 094d
-0950 0954
-0958 0963
-0966 096f
-0981 0983
-0985 098c
-098f 0990
-0993 09a8
-09aa 09b0
-09b2
-09b6 09b9
-09bc
-09be 09c4
-09c7 09c8
-09cb 09cd
-09d7
-09dc 09dd
-09df 09e3
-09e6 09f1
-09f4 09f9
-0a02
-0a05 0a0a
-0a0f 0a10
-0a13 0a28
-0a2a 0a30
-0a32 0a33
-0a35 0a36
-0a38 0a39
-0a3c
-0a3e 0a42
-0a47 0a48
-0a4b 0a4d
-0a59 0a5c
-0a5e
-0a66 0a74
-0a81 0a83
-0a85 0a8b
-0a8d
-0a8f 0a91
-0a93 0aa8
-0aaa 0ab0
-0ab2 0ab3
-0ab5 0ab9
-0abc 0ac5
-0ac7 0ac9
-0acb 0acd
-0ad0
-0ae0
-0ae6 0aef
-0b01 0b03
-0b05 0b0c
-0b0f 0b10
-0b13 0b28
-0b2a 0b30
-0b32 0b33
-0b36 0b39
-0b3c 0b43
-0b47 0b48
-0b4b 0b4d
-0b56 0b57
-0b5c 0b5d
-0b5f 0b61
-0b66 0b6f
-0b82 0b83
-0b85 0b8a
-0b8e 0b90
-0b92 0b95
-0b99 0b9a
-0b9c
-0b9e 0b9f
-0ba3 0ba4
-0ba8 0baa
-0bae 0bb5
-0bb7 0bb9
-0bbe 0bc2
-0bc6 0bc8
-0bca 0bcd
-0bd7
-0be7 0bf2
-0c01 0c03
-0c05 0c0c
-0c0e 0c10
-0c12 0c28
-0c2a 0c33
-0c35 0c39
-0c3e 0c44
-0c46 0c48
-0c4a 0c4d
-0c55 0c56
-0c60 0c61
-0c66 0c6f
-0c82 0c83
-0c85 0c8c
-0c8e 0c90
-0c92 0ca8
-0caa 0cb3
-0cb5 0cb9
-0cbe 0cc4
-0cc6 0cc8
-0cca 0ccd
-0cd5 0cd6
-0cde
-0ce0 0ce1
-0ce6 0cef
-0d02 0d03
-0d05 0d0c
-0d0e 0d10
-0d12 0d28
-0d2a 0d39
-0d3e 0d43
-0d46 0d48
-0d4a 0d4d
-0d57
-0d60 0d61
-0d66 0d6f
-0d82 0d83
-0d85 0d96
-0d9a 0db1
-0db3 0dbb
-0dbd
-0dc0 0dc6
-0dca
-0dcf 0dd4
-0dd6
-0dd8 0ddf
-0df2 0df3
-0e01 0e3a
-0e40 0e4e
-0e50 0e59
-0e81 0e82
-0e84
-0e87 0e88
-0e8a
-0e8d
-0e94 0e97
-0e99 0e9f
-0ea1 0ea3
-0ea5
-0ea7
-0eaa 0eab
-0ead 0eb9
-0ebb 0ebd
-0ec0 0ec4
-0ec6
-0ec8 0ecd
-0ed0 0ed9
-0edc 0edd
-0f00
-0f18 0f19
-0f20 0f33
-0f35
-0f37
-0f39
-0f3e 0f47
-0f49 0f6a
-0f71 0f84
-0f86 0f8b
-0f90 0f97
-0f99 0fbc
-0fc6
-1000 1021
-1023 1027
-1029 102a
-102c 1032
-1036 1039
-1040 1049
-1050 1059
-10a0 10c5
-10d0 10f6
-1100 1159
-115f 11a2
-11a8 11f9
-1200 1206
-1208 1246
-1248
-124a 124d
-1250 1256
-1258
-125a 125d
-1260 1286
-1288
-128a 128d
-1290 12ae
-12b0
-12b2 12b5
-12b8 12be
-12c0
-12c2 12c5
-12c8 12ce
-12d0 12d6
-12d8 12ee
-12f0 130e
-1310
-1312 1315
-1318 131e
-1320 1346
-1348 135a
-1369 137c
-13a0 13f4
-1401 166c
-166f 1676
-1681 169a
-16a0 16ea
-16ee 16f0
-1780 17d3
-17e0 17e9
-1810 1819
-1820 1877
-1880 18a9
-1e00 1e9b
-1ea0 1ef9
-1f00 1f15
-1f18 1f1d
-1f20 1f45
-1f48 1f4d
-1f50 1f57
-1f59
-1f5b
-1f5d
-1f5f 1f7d
-1f80 1fb4
-1fb6 1fbc
-1fbe
-1fc2 1fc4
-1fc6 1fcc
-1fd0 1fd3
-1fd6 1fdb
-1fe0 1fec
-1ff2 1ff4
-1ff6 1ffc
-2070
-2074 2079
-207f 2089
-20d0 20e3
-2102
-2107
-210a 2113
-2115
-2119 211d
-2124
-2126
-2128
-212a 212d
-212f 2131
-2133 2139
-2153 2183
-2460 249b
-24ea
-2776 2793
-3005 3007
-3021 302f
-3031 3035
-3038 303a
-3041 3094
-3099 309a
-309d 309e
-30a1 30fa
-30fc 30fe
-3105 312c
-3131 318e
-3192 3195
-31a0 31b7
-3220 3229
-3280 3289
-3400 4db5
-4e00 9fa5
-a000 a48c
-ac00 d7a3
-f900 fa2d
-fb00 fb06
-fb13 fb17
-fb1d fb28
-fb2a fb36
-fb38 fb3c
-fb3e
-fb40 fb41
-fb43 fb44
-fb46 fbb1
-fbd3 fd3d
-fd50 fd8f
-fd92 fdc7
-fdf0 fdfb
-fe20 fe23
-fe70 fe72
-fe74
-fe76 fefc
-ff10 ff19
-ff21 ff3a
-ff41 ff5a
-ff66 ffbe
-ffc2 ffc7
-ffca ffcf
-ffd2 ffd7
-ffda ffdc
-END
diff --git a/contrib/perl5/lib/unicode/Is/XDigit.pl b/contrib/perl5/lib/unicode/Is/XDigit.pl
deleted file mode 100644
index b26a3b4..0000000
--- a/contrib/perl5/lib/unicode/Is/XDigit.pl
+++ /dev/null
@@ -1,8 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039
-0041 0046
-0061 0066
-END
diff --git a/contrib/perl5/lib/unicode/Is/Z.pl b/contrib/perl5/lib/unicode/Is/Z.pl
deleted file mode 100644
index 03416c0..0000000
--- a/contrib/perl5/lib/unicode/Is/Z.pl
+++ /dev/null
@@ -1,12 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0020
-00a0
-1680
-2000 200b
-2028 2029
-202f
-3000
-END
diff --git a/contrib/perl5/lib/unicode/Is/Zl.pl b/contrib/perl5/lib/unicode/Is/Zl.pl
deleted file mode 100644
index 5f127ce..0000000
--- a/contrib/perl5/lib/unicode/Is/Zl.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2028
-END
diff --git a/contrib/perl5/lib/unicode/Is/Zp.pl b/contrib/perl5/lib/unicode/Is/Zp.pl
deleted file mode 100644
index 4e38303..0000000
--- a/contrib/perl5/lib/unicode/Is/Zp.pl
+++ /dev/null
@@ -1,6 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-2029
-END
diff --git a/contrib/perl5/lib/unicode/Is/Zs.pl b/contrib/perl5/lib/unicode/Is/Zs.pl
deleted file mode 100644
index 56cf9e4..0000000
--- a/contrib/perl5/lib/unicode/Is/Zs.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0020
-00a0
-1680
-2000 200b
-202f
-3000
-END
diff --git a/contrib/perl5/lib/unicode/Jamo.txt b/contrib/perl5/lib/unicode/Jamo.txt
deleted file mode 100644
index ea288f03..0000000
--- a/contrib/perl5/lib/unicode/Jamo.txt
+++ /dev/null
@@ -1,91 +0,0 @@
-# Jamo-3.txt
-#
-# This file is a normative contributory data file in the
-# Unicode Character Database.
-#
-# This file defines the Jamo Short Name property, repeating
-# in machine readable form the information printed in Table 4-4
-# of The Unicode Standard, Version 3.0.
-#
-# See sections 3.11 and 4.4 of The Unicode Standard, Version 3.0
-# for more information.
-#
-# Each line contains two fields, separated by a semicolon.
-#
-# The first field gives the code point, in 4-digit hexadecimal
-# form, of a combining jamo character that participates in
-# the algorithmic determination Hangul syllable character names.
-# The second field gives the Jamo Short Name as a one-, two-,
-# or three-character ASCII string (or in one case, for U+110B,
-# the null string).
-#
-# #############################################################
-
-1100; G # HANGUL CHOSEONG KIYEOK
-1101; GG # HANGUL CHOSEONG SSANGKIYEOK
-1102; N # HANGUL CHOSEONG NIEUN
-1103; D # HANGUL CHOSEONG TIKEUT
-1104; DD # HANGUL CHOSEONG SSANGTIKEUT
-1105; R # HANGUL CHOSEONG RIEUL
-1106; M # HANGUL CHOSEONG MIEUM
-1107; B # HANGUL CHOSEONG PIEUP
-1108; BB # HANGUL CHOSEONG SSANGPIEUP
-1109; S # HANGUL CHOSEONG SIOS
-110A; SS # HANGUL CHOSEONG SSANGSIOS
-110B; # HANGUL CHOSEONG IEUNG
-110C; J # HANGUL CHOSEONG CIEUC
-110D; JJ # HANGUL CHOSEONG SSANGCIEUC
-110E; C # HANGUL CHOSEONG CHIEUCH
-110F; K # HANGUL CHOSEONG KHIEUKH
-1110; T # HANGUL CHOSEONG THIEUTH
-1111; P # HANGUL CHOSEONG PHIEUPH
-1112; H # HANGUL CHOSEONG HIEUH
-1161; A # HANGUL JUNGSEONG A
-1162; AE # HANGUL JUNGSEONG AE
-1163; YA # HANGUL JUNGSEONG YA
-1164; YAE # HANGUL JUNGSEONG YAE
-1165; EO # HANGUL JUNGSEONG EO
-1166; E # HANGUL JUNGSEONG E
-1167; YEO # HANGUL JUNGSEONG YEO
-1168; YE # HANGUL JUNGSEONG YE
-1169; O # HANGUL JUNGSEONG O
-116A; WA # HANGUL JUNGSEONG WA
-116B; WAE # HANGUL JUNGSEONG WAE
-116C; OE # HANGUL JUNGSEONG OE
-116D; YO # HANGUL JUNGSEONG YO
-116E; U # HANGUL JUNGSEONG U
-116F; WEO # HANGUL JUNGSEONG WEO
-1170; WE # HANGUL JUNGSEONG WE
-1171; WI # HANGUL JUNGSEONG WI
-1172; YU # HANGUL JUNGSEONG YU
-1173; EU # HANGUL JUNGSEONG EU
-1174; YI # HANGUL JUNGSEONG YI
-1175; I # HANGUL JUNGSEONG I
-11A8; G # HANGUL JONGSEONG KIYEOK
-11A9; GG # HANGUL JONGSEONG SSANGKIYEOK
-11AA; GS # HANGUL JONGSEONG KIYEOK-SIOS
-11AB; N # HANGUL JONGSEONG NIEUN
-11AC; NJ # HANGUL JONGSEONG NIEUN-CIEUC
-11AD; NH # HANGUL JONGSEONG NIEUN-HIEUH
-11AE; D # HANGUL JONGSEONG TIKEUT
-11AF; L # HANGUL JONGSEONG RIEUL
-11B0; LG # HANGUL JONGSEONG RIEUL-KIYEOK
-11B1; LM # HANGUL JONGSEONG RIEUL-MIEUM
-11B2; LB # HANGUL JONGSEONG RIEUL-PIEUP
-11B3; LS # HANGUL JONGSEONG RIEUL-SIOS
-11B4; LT # HANGUL JONGSEONG RIEUL-THIEUTH
-11B5; LP # HANGUL JONGSEONG RIEUL-PHIEUPH
-11B6; LH # HANGUL JONGSEONG RIEUL-HIEUH
-11B7; M # HANGUL JONGSEONG MIEUM
-11B8; B # HANGUL JONGSEONG PIEUP
-11B9; BS # HANGUL JONGSEONG PIEUP-SIOS
-11BA; S # HANGUL JONGSEONG SIOS
-11BB; SS # HANGUL JONGSEONG SSANGSIOS
-11BC; NG # HANGUL JONGSEONG IEUNG
-11BD; J # HANGUL JONGSEONG CIEUC
-11BE; C # HANGUL JONGSEONG CHIEUCH
-11BF; K # HANGUL JONGSEONG KHIEUKH
-11C0; T # HANGUL JONGSEONG THIEUTH
-11C1; P # HANGUL JONGSEONG PHIEUPH
-11C2; H # HANGUL JONGSEONG HIEUH
-
diff --git a/contrib/perl5/lib/unicode/JamoShort.pl b/contrib/perl5/lib/unicode/JamoShort.pl
deleted file mode 100644
index 19cd429..0000000
--- a/contrib/perl5/lib/unicode/JamoShort.pl
+++ /dev/null
@@ -1,72 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-1100 G # HANGUL CHOSEONG KIYEOK
-1101 GG # HANGUL CHOSEONG SSANGKIYEOK
-1102 N # HANGUL CHOSEONG NIEUN
-1103 D # HANGUL CHOSEONG TIKEUT
-1104 DD # HANGUL CHOSEONG SSANGTIKEUT
-1105 R # HANGUL CHOSEONG RIEUL
-1106 M # HANGUL CHOSEONG MIEUM
-1107 B # HANGUL CHOSEONG PIEUP
-1108 BB # HANGUL CHOSEONG SSANGPIEUP
-1109 S # HANGUL CHOSEONG SIOS
-110a SS # HANGUL CHOSEONG SSANGSIOS
-110b # HANGUL CHOSEONG IEUNG
-110c J # HANGUL CHOSEONG CIEUC
-110d JJ # HANGUL CHOSEONG SSANGCIEUC
-110e C # HANGUL CHOSEONG CHIEUCH
-110f K # HANGUL CHOSEONG KHIEUKH
-1110 T # HANGUL CHOSEONG THIEUTH
-1111 P # HANGUL CHOSEONG PHIEUPH
-1112 H # HANGUL CHOSEONG HIEUH
-1161 A # HANGUL JUNGSEONG A
-1162 AE # HANGUL JUNGSEONG AE
-1163 YA # HANGUL JUNGSEONG YA
-1164 YAE # HANGUL JUNGSEONG YAE
-1165 EO # HANGUL JUNGSEONG EO
-1166 E # HANGUL JUNGSEONG E
-1167 YEO # HANGUL JUNGSEONG YEO
-1168 YE # HANGUL JUNGSEONG YE
-1169 O # HANGUL JUNGSEONG O
-116a WA # HANGUL JUNGSEONG WA
-116b WAE # HANGUL JUNGSEONG WAE
-116c OE # HANGUL JUNGSEONG OE
-116d YO # HANGUL JUNGSEONG YO
-116e U # HANGUL JUNGSEONG U
-116f WEO # HANGUL JUNGSEONG WEO
-1170 WE # HANGUL JUNGSEONG WE
-1171 WI # HANGUL JUNGSEONG WI
-1172 YU # HANGUL JUNGSEONG YU
-1173 EU # HANGUL JUNGSEONG EU
-1174 YI # HANGUL JUNGSEONG YI
-1175 I # HANGUL JUNGSEONG I
-11a8 G # HANGUL JONGSEONG KIYEOK
-11a9 GG # HANGUL JONGSEONG SSANGKIYEOK
-11aa GS # HANGUL JONGSEONG KIYEOK-SIOS
-11ab N # HANGUL JONGSEONG NIEUN
-11ac NJ # HANGUL JONGSEONG NIEUN-CIEUC
-11ad NH # HANGUL JONGSEONG NIEUN-HIEUH
-11ae D # HANGUL JONGSEONG TIKEUT
-11af L # HANGUL JONGSEONG RIEUL
-11b0 LG # HANGUL JONGSEONG RIEUL-KIYEOK
-11b1 LM # HANGUL JONGSEONG RIEUL-MIEUM
-11b2 LB # HANGUL JONGSEONG RIEUL-PIEUP
-11b3 LS # HANGUL JONGSEONG RIEUL-SIOS
-11b4 LT # HANGUL JONGSEONG RIEUL-THIEUTH
-11b5 LP # HANGUL JONGSEONG RIEUL-PHIEUPH
-11b6 LH # HANGUL JONGSEONG RIEUL-HIEUH
-11b7 M # HANGUL JONGSEONG MIEUM
-11b8 B # HANGUL JONGSEONG PIEUP
-11b9 BS # HANGUL JONGSEONG PIEUP-SIOS
-11ba S # HANGUL JONGSEONG SIOS
-11bb SS # HANGUL JONGSEONG SSANGSIOS
-11bc NG # HANGUL JONGSEONG IEUNG
-11bd J # HANGUL JONGSEONG CIEUC
-11be C # HANGUL JONGSEONG CHIEUCH
-11bf K # HANGUL JONGSEONG KHIEUKH
-11c0 T # HANGUL JONGSEONG THIEUTH
-11c1 P # HANGUL JONGSEONG PHIEUPH
-11c2 H # HANGUL JONGSEONG HIEUH
-END
diff --git a/contrib/perl5/lib/unicode/LineBrk.txt b/contrib/perl5/lib/unicode/LineBrk.txt
deleted file mode 100644
index 48f6c50..0000000
--- a/contrib/perl5/lib/unicode/LineBrk.txt
+++ /dev/null
@@ -1,10643 +0,0 @@
-# LineBreak-5.txt
-#
-# Line Break Properties
-#
-# This file is a supplement to the UnicodeData file.
-# It contains both normative and informative data.
-# The format is three fields separated by semicolons.
-# Field 1: Unicode value
-# Field 2: LineBreak property, consisting of one of the following values:
-# Normative:
-# "BK", "CR", "LF", "CM", "SG", "GL", "CB", "SP", "ZW"
-# Informative:
-# "XX", "OP", "CL", "QU", "NS", "EX", "SY",
-# "IS", "PR", "PO", "NU", "AL", "ID", "IN", "HY",
-# "BB", "BA", "SA", "AI", "B2"
-# - Assigned characters that are not listed explicitly are given the value
-# "AL".
-# - Unassigned characters are given the value "XX".
-# - Characters within ranges marked by "First>" and "Last>" are omitted,
-# as in UnicodeData.txt. For example, the following means that
-# all characters between 3400 and 4DB5 have the value "ID"
-# 3400;ID;<CJK Ideograph Extension A, First>
-# 4DB5;ID;<CJK Ideograph Extension A, Last>
-# Field 3: Unicode name (this is purely informative)
-#
-# See UTR #14: Line Breaking Properties for more information
-0000;CM;<control>
-0001;CM;<control>
-0002;CM;<control>
-0003;CM;<control>
-0004;CM;<control>
-0005;CM;<control>
-0006;CM;<control>
-0007;CM;<control>
-0008;CM;<control>
-0009;BA;<control>
-000A;LF;<control>
-000B;CM;<control>
-000C;BK;<control>
-000D;CR;<control>
-000E;CM;<control>
-000F;CM;<control>
-0010;CM;<control>
-0011;CM;<control>
-0012;CM;<control>
-0013;CM;<control>
-0014;CM;<control>
-0015;CM;<control>
-0016;CM;<control>
-0017;CM;<control>
-0018;CM;<control>
-0019;CM;<control>
-001A;CM;<control>
-001B;CM;<control>
-001C;CM;<control>
-001D;CM;<control>
-001E;CM;<control>
-001F;CM;<control>
-0020;SP;SPACE
-0021;EX;EXCLAMATION MARK
-0022;QU;QUOTATION MARK
-0023;AL;NUMBER SIGN
-0024;PR;DOLLAR SIGN
-0025;PO;PERCENT SIGN
-0026;AL;AMPERSAND
-0027;QU;APOSTROPHE
-0028;OP;LEFT PARENTHESIS
-0029;CL;RIGHT PARENTHESIS
-002A;AL;ASTERISK
-002B;PR;PLUS SIGN
-002C;IS;COMMA
-002D;HY;HYPHEN-MINUS
-002E;IS;FULL STOP
-002F;SY;SOLIDUS
-0030;NU;DIGIT ZERO
-0031;NU;DIGIT ONE
-0032;NU;DIGIT TWO
-0033;NU;DIGIT THREE
-0034;NU;DIGIT FOUR
-0035;NU;DIGIT FIVE
-0036;NU;DIGIT SIX
-0037;NU;DIGIT SEVEN
-0038;NU;DIGIT EIGHT
-0039;NU;DIGIT NINE
-003A;IS;COLON
-003B;IS;SEMICOLON
-003C;AL;LESS-THAN SIGN
-003D;AL;EQUALS SIGN
-003E;AL;GREATER-THAN SIGN
-003F;EX;QUESTION MARK
-0040;AL;COMMERCIAL AT
-0041;AL;LATIN CAPITAL LETTER A
-0042;AL;LATIN CAPITAL LETTER B
-0043;AL;LATIN CAPITAL LETTER C
-0044;AL;LATIN CAPITAL LETTER D
-0045;AL;LATIN CAPITAL LETTER E
-0046;AL;LATIN CAPITAL LETTER F
-0047;AL;LATIN CAPITAL LETTER G
-0048;AL;LATIN CAPITAL LETTER H
-0049;AL;LATIN CAPITAL LETTER I
-004A;AL;LATIN CAPITAL LETTER J
-004B;AL;LATIN CAPITAL LETTER K
-004C;AL;LATIN CAPITAL LETTER L
-004D;AL;LATIN CAPITAL LETTER M
-004E;AL;LATIN CAPITAL LETTER N
-004F;AL;LATIN CAPITAL LETTER O
-0050;AL;LATIN CAPITAL LETTER P
-0051;AL;LATIN CAPITAL LETTER Q
-0052;AL;LATIN CAPITAL LETTER R
-0053;AL;LATIN CAPITAL LETTER S
-0054;AL;LATIN CAPITAL LETTER T
-0055;AL;LATIN CAPITAL LETTER U
-0056;AL;LATIN CAPITAL LETTER V
-0057;AL;LATIN CAPITAL LETTER W
-0058;AL;LATIN CAPITAL LETTER X
-0059;AL;LATIN CAPITAL LETTER Y
-005A;AL;LATIN CAPITAL LETTER Z
-005B;OP;LEFT SQUARE BRACKET
-005C;PR;REVERSE SOLIDUS
-005D;CL;RIGHT SQUARE BRACKET
-005E;AL;CIRCUMFLEX ACCENT
-005F;AL;LOW LINE
-0060;AL;GRAVE ACCENT
-0061;AL;LATIN SMALL LETTER A
-0062;AL;LATIN SMALL LETTER B
-0063;AL;LATIN SMALL LETTER C
-0064;AL;LATIN SMALL LETTER D
-0065;AL;LATIN SMALL LETTER E
-0066;AL;LATIN SMALL LETTER F
-0067;AL;LATIN SMALL LETTER G
-0068;AL;LATIN SMALL LETTER H
-0069;AL;LATIN SMALL LETTER I
-006A;AL;LATIN SMALL LETTER J
-006B;AL;LATIN SMALL LETTER K
-006C;AL;LATIN SMALL LETTER L
-006D;AL;LATIN SMALL LETTER M
-006E;AL;LATIN SMALL LETTER N
-006F;AL;LATIN SMALL LETTER O
-0070;AL;LATIN SMALL LETTER P
-0071;AL;LATIN SMALL LETTER Q
-0072;AL;LATIN SMALL LETTER R
-0073;AL;LATIN SMALL LETTER S
-0074;AL;LATIN SMALL LETTER T
-0075;AL;LATIN SMALL LETTER U
-0076;AL;LATIN SMALL LETTER V
-0077;AL;LATIN SMALL LETTER W
-0078;AL;LATIN SMALL LETTER X
-0079;AL;LATIN SMALL LETTER Y
-007A;AL;LATIN SMALL LETTER Z
-007B;OP;LEFT CURLY BRACKET
-007C;BA;VERTICAL LINE
-007D;CL;RIGHT CURLY BRACKET
-007E;AL;TILDE
-007F;CM;<control>
-0080;CM;<control>
-0081;CM;<control>
-0082;CM;<control>
-0083;CM;<control>
-0084;CM;<control>
-0085;CM;<control>
-0086;CM;<control>
-0087;CM;<control>
-0088;CM;<control>
-0089;CM;<control>
-008A;CM;<control>
-008B;CM;<control>
-008C;CM;<control>
-008D;CM;<control>
-008E;CM;<control>
-008F;CM;<control>
-0090;CM;<control>
-0091;CM;<control>
-0092;CM;<control>
-0093;CM;<control>
-0094;CM;<control>
-0095;CM;<control>
-0096;CM;<control>
-0097;CM;<control>
-0098;CM;<control>
-0099;CM;<control>
-009A;CM;<control>
-009B;CM;<control>
-009C;CM;<control>
-009D;CM;<control>
-009E;CM;<control>
-009F;CM;<control>
-00A0;GL;NO-BREAK SPACE
-00A1;AI;INVERTED EXCLAMATION MARK
-00A2;PO;CENT SIGN
-00A3;PR;POUND SIGN
-00A4;PR;CURRENCY SIGN
-00A5;PR;YEN SIGN
-00A6;AL;BROKEN BAR
-00A7;AI;SECTION SIGN
-00A8;AI;DIAERESIS
-00A9;AL;COPYRIGHT SIGN
-00AA;AI;FEMININE ORDINAL INDICATOR
-00AB;QU;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-00AC;AL;NOT SIGN
-00AD;BA;SOFT HYPHEN
-00AE;AL;REGISTERED SIGN
-00AF;AL;MACRON
-00B0;PO;DEGREE SIGN
-00B1;PR;PLUS-MINUS SIGN
-00B2;AI;SUPERSCRIPT TWO
-00B3;AI;SUPERSCRIPT THREE
-00B4;BA;ACUTE ACCENT
-00B5;AL;MICRO SIGN
-00B6;AI;PILCROW SIGN
-00B7;AI;MIDDLE DOT
-00B8;AI;CEDILLA
-00B9;AI;SUPERSCRIPT ONE
-00BA;AI;MASCULINE ORDINAL INDICATOR
-00BB;QU;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-00BC;AI;VULGAR FRACTION ONE QUARTER
-00BD;AI;VULGAR FRACTION ONE HALF
-00BE;AI;VULGAR FRACTION THREE QUARTERS
-00BF;AI;INVERTED QUESTION MARK
-00C0;AL;LATIN CAPITAL LETTER A WITH GRAVE
-00C1;AL;LATIN CAPITAL LETTER A WITH ACUTE
-00C2;AL;LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C3;AL;LATIN CAPITAL LETTER A WITH TILDE
-00C4;AL;LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5;AL;LATIN CAPITAL LETTER A WITH RING ABOVE
-00C6;AI;LATIN CAPITAL LETTER AE
-00C7;AL;LATIN CAPITAL LETTER C WITH CEDILLA
-00C8;AL;LATIN CAPITAL LETTER E WITH GRAVE
-00C9;AL;LATIN CAPITAL LETTER E WITH ACUTE
-00CA;AL;LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CB;AL;LATIN CAPITAL LETTER E WITH DIAERESIS
-00CC;AL;LATIN CAPITAL LETTER I WITH GRAVE
-00CD;AL;LATIN CAPITAL LETTER I WITH ACUTE
-00CE;AL;LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00CF;AL;LATIN CAPITAL LETTER I WITH DIAERESIS
-00D0;AI;LATIN CAPITAL LETTER ETH
-00D1;AL;LATIN CAPITAL LETTER N WITH TILDE
-00D2;AL;LATIN CAPITAL LETTER O WITH GRAVE
-00D3;AL;LATIN CAPITAL LETTER O WITH ACUTE
-00D4;AL;LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00D5;AL;LATIN CAPITAL LETTER O WITH TILDE
-00D6;AL;LATIN CAPITAL LETTER O WITH DIAERESIS
-00D7;AI;MULTIPLICATION SIGN
-00D8;AI;LATIN CAPITAL LETTER O WITH STROKE
-00D9;AL;LATIN CAPITAL LETTER U WITH GRAVE
-00DA;AL;LATIN CAPITAL LETTER U WITH ACUTE
-00DB;AL;LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00DC;AL;LATIN CAPITAL LETTER U WITH DIAERESIS
-00DD;AL;LATIN CAPITAL LETTER Y WITH ACUTE
-00DE;AI;LATIN CAPITAL LETTER THORN
-00DF;AI;LATIN SMALL LETTER SHARP S
-00E0;AI;LATIN SMALL LETTER A WITH GRAVE
-00E1;AI;LATIN SMALL LETTER A WITH ACUTE
-00E2;AL;LATIN SMALL LETTER A WITH CIRCUMFLEX
-00E3;AL;LATIN SMALL LETTER A WITH TILDE
-00E4;AL;LATIN SMALL LETTER A WITH DIAERESIS
-00E5;AL;LATIN SMALL LETTER A WITH RING ABOVE
-00E6;AI;LATIN SMALL LETTER AE
-00E7;AL;LATIN SMALL LETTER C WITH CEDILLA
-00E8;AI;LATIN SMALL LETTER E WITH GRAVE
-00E9;AI;LATIN SMALL LETTER E WITH ACUTE
-00EA;AI;LATIN SMALL LETTER E WITH CIRCUMFLEX
-00EB;AL;LATIN SMALL LETTER E WITH DIAERESIS
-00EC;AI;LATIN SMALL LETTER I WITH GRAVE
-00ED;AI;LATIN SMALL LETTER I WITH ACUTE
-00EE;AL;LATIN SMALL LETTER I WITH CIRCUMFLEX
-00EF;AL;LATIN SMALL LETTER I WITH DIAERESIS
-00F0;AI;LATIN SMALL LETTER ETH
-00F1;AL;LATIN SMALL LETTER N WITH TILDE
-00F2;AI;LATIN SMALL LETTER O WITH GRAVE
-00F3;AI;LATIN SMALL LETTER O WITH ACUTE
-00F4;AL;LATIN SMALL LETTER O WITH CIRCUMFLEX
-00F5;AL;LATIN SMALL LETTER O WITH TILDE
-00F6;AL;LATIN SMALL LETTER O WITH DIAERESIS
-00F7;AI;DIVISION SIGN
-00F8;AI;LATIN SMALL LETTER O WITH STROKE
-00F9;AI;LATIN SMALL LETTER U WITH GRAVE
-00FA;AI;LATIN SMALL LETTER U WITH ACUTE
-00FB;AL;LATIN SMALL LETTER U WITH CIRCUMFLEX
-00FC;AI;LATIN SMALL LETTER U WITH DIAERESIS
-00FD;AL;LATIN SMALL LETTER Y WITH ACUTE
-00FE;AI;LATIN SMALL LETTER THORN
-00FF;AL;LATIN SMALL LETTER Y WITH DIAERESIS
-0100;AL;LATIN CAPITAL LETTER A WITH MACRON
-0101;AI;LATIN SMALL LETTER A WITH MACRON
-0102;AL;LATIN CAPITAL LETTER A WITH BREVE
-0103;AL;LATIN SMALL LETTER A WITH BREVE
-0104;AL;LATIN CAPITAL LETTER A WITH OGONEK
-0105;AL;LATIN SMALL LETTER A WITH OGONEK
-0106;AL;LATIN CAPITAL LETTER C WITH ACUTE
-0107;AL;LATIN SMALL LETTER C WITH ACUTE
-0108;AL;LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-0109;AL;LATIN SMALL LETTER C WITH CIRCUMFLEX
-010A;AL;LATIN CAPITAL LETTER C WITH DOT ABOVE
-010B;AL;LATIN SMALL LETTER C WITH DOT ABOVE
-010C;AL;LATIN CAPITAL LETTER C WITH CARON
-010D;AL;LATIN SMALL LETTER C WITH CARON
-010E;AL;LATIN CAPITAL LETTER D WITH CARON
-010F;AL;LATIN SMALL LETTER D WITH CARON
-0110;AL;LATIN CAPITAL LETTER D WITH STROKE
-0111;AI;LATIN SMALL LETTER D WITH STROKE
-0112;AL;LATIN CAPITAL LETTER E WITH MACRON
-0113;AI;LATIN SMALL LETTER E WITH MACRON
-0114;AL;LATIN CAPITAL LETTER E WITH BREVE
-0115;AL;LATIN SMALL LETTER E WITH BREVE
-0116;AL;LATIN CAPITAL LETTER E WITH DOT ABOVE
-0117;AL;LATIN SMALL LETTER E WITH DOT ABOVE
-0118;AL;LATIN CAPITAL LETTER E WITH OGONEK
-0119;AL;LATIN SMALL LETTER E WITH OGONEK
-011A;AL;LATIN CAPITAL LETTER E WITH CARON
-011B;AI;LATIN SMALL LETTER E WITH CARON
-011C;AL;LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-011D;AL;LATIN SMALL LETTER G WITH CIRCUMFLEX
-011E;AL;LATIN CAPITAL LETTER G WITH BREVE
-011F;AL;LATIN SMALL LETTER G WITH BREVE
-0120;AL;LATIN CAPITAL LETTER G WITH DOT ABOVE
-0121;AL;LATIN SMALL LETTER G WITH DOT ABOVE
-0122;AL;LATIN CAPITAL LETTER G WITH CEDILLA
-0123;AL;LATIN SMALL LETTER G WITH CEDILLA
-0124;AL;LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-0125;AL;LATIN SMALL LETTER H WITH CIRCUMFLEX
-0126;AI;LATIN CAPITAL LETTER H WITH STROKE
-0127;AI;LATIN SMALL LETTER H WITH STROKE
-0128;AL;LATIN CAPITAL LETTER I WITH TILDE
-0129;AL;LATIN SMALL LETTER I WITH TILDE
-012A;AL;LATIN CAPITAL LETTER I WITH MACRON
-012B;AI;LATIN SMALL LETTER I WITH MACRON
-012C;AL;LATIN CAPITAL LETTER I WITH BREVE
-012D;AL;LATIN SMALL LETTER I WITH BREVE
-012E;AL;LATIN CAPITAL LETTER I WITH OGONEK
-012F;AL;LATIN SMALL LETTER I WITH OGONEK
-0130;AL;LATIN CAPITAL LETTER I WITH DOT ABOVE
-0131;AI;LATIN SMALL LETTER DOTLESS I
-0132;AI;LATIN CAPITAL LIGATURE IJ
-0133;AI;LATIN SMALL LIGATURE IJ
-0134;AL;LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-0135;AL;LATIN SMALL LETTER J WITH CIRCUMFLEX
-0136;AL;LATIN CAPITAL LETTER K WITH CEDILLA
-0137;AL;LATIN SMALL LETTER K WITH CEDILLA
-0138;AI;LATIN SMALL LETTER KRA
-0139;AL;LATIN CAPITAL LETTER L WITH ACUTE
-013A;AL;LATIN SMALL LETTER L WITH ACUTE
-013B;AL;LATIN CAPITAL LETTER L WITH CEDILLA
-013C;AL;LATIN SMALL LETTER L WITH CEDILLA
-013D;AL;LATIN CAPITAL LETTER L WITH CARON
-013E;AL;LATIN SMALL LETTER L WITH CARON
-013F;AI;LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0140;AI;LATIN SMALL LETTER L WITH MIDDLE DOT
-0141;AI;LATIN CAPITAL LETTER L WITH STROKE
-0142;AI;LATIN SMALL LETTER L WITH STROKE
-0143;AL;LATIN CAPITAL LETTER N WITH ACUTE
-0144;AI;LATIN SMALL LETTER N WITH ACUTE
-0145;AL;LATIN CAPITAL LETTER N WITH CEDILLA
-0146;AL;LATIN SMALL LETTER N WITH CEDILLA
-0147;AL;LATIN CAPITAL LETTER N WITH CARON
-0148;AI;LATIN SMALL LETTER N WITH CARON
-0149;AI;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-014A;AI;LATIN CAPITAL LETTER ENG
-014B;AL;LATIN SMALL LETTER ENG
-014C;AL;LATIN CAPITAL LETTER O WITH MACRON
-014D;AI;LATIN SMALL LETTER O WITH MACRON
-014E;AL;LATIN CAPITAL LETTER O WITH BREVE
-014F;AL;LATIN SMALL LETTER O WITH BREVE
-0150;AL;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0151;AL;LATIN SMALL LETTER O WITH DOUBLE ACUTE
-0152;AI;LATIN CAPITAL LIGATURE OE
-0153;AI;LATIN SMALL LIGATURE OE
-0154;AL;LATIN CAPITAL LETTER R WITH ACUTE
-0155;AL;LATIN SMALL LETTER R WITH ACUTE
-0156;AL;LATIN CAPITAL LETTER R WITH CEDILLA
-0157;AL;LATIN SMALL LETTER R WITH CEDILLA
-0158;AL;LATIN CAPITAL LETTER R WITH CARON
-0159;AL;LATIN SMALL LETTER R WITH CARON
-015A;AL;LATIN CAPITAL LETTER S WITH ACUTE
-015B;AL;LATIN SMALL LETTER S WITH ACUTE
-015C;AL;LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-015D;AL;LATIN SMALL LETTER S WITH CIRCUMFLEX
-015E;AL;LATIN CAPITAL LETTER S WITH CEDILLA
-015F;AL;LATIN SMALL LETTER S WITH CEDILLA
-0160;AL;LATIN CAPITAL LETTER S WITH CARON
-0161;AL;LATIN SMALL LETTER S WITH CARON
-0162;AL;LATIN CAPITAL LETTER T WITH CEDILLA
-0163;AL;LATIN SMALL LETTER T WITH CEDILLA
-0164;AL;LATIN CAPITAL LETTER T WITH CARON
-0165;AL;LATIN SMALL LETTER T WITH CARON
-0166;AI;LATIN CAPITAL LETTER T WITH STROKE
-0167;AI;LATIN SMALL LETTER T WITH STROKE
-0168;AL;LATIN CAPITAL LETTER U WITH TILDE
-0169;AL;LATIN SMALL LETTER U WITH TILDE
-016A;AL;LATIN CAPITAL LETTER U WITH MACRON
-016B;AI;LATIN SMALL LETTER U WITH MACRON
-016C;AL;LATIN CAPITAL LETTER U WITH BREVE
-016D;AL;LATIN SMALL LETTER U WITH BREVE
-016E;AL;LATIN CAPITAL LETTER U WITH RING ABOVE
-016F;AL;LATIN SMALL LETTER U WITH RING ABOVE
-0170;AL;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0171;AL;LATIN SMALL LETTER U WITH DOUBLE ACUTE
-0172;AL;LATIN CAPITAL LETTER U WITH OGONEK
-0173;AL;LATIN SMALL LETTER U WITH OGONEK
-0174;AL;LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0175;AL;LATIN SMALL LETTER W WITH CIRCUMFLEX
-0176;AL;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0177;AL;LATIN SMALL LETTER Y WITH CIRCUMFLEX
-0178;AL;LATIN CAPITAL LETTER Y WITH DIAERESIS
-0179;AL;LATIN CAPITAL LETTER Z WITH ACUTE
-017A;AL;LATIN SMALL LETTER Z WITH ACUTE
-017B;AL;LATIN CAPITAL LETTER Z WITH DOT ABOVE
-017C;AL;LATIN SMALL LETTER Z WITH DOT ABOVE
-017D;AL;LATIN CAPITAL LETTER Z WITH CARON
-017E;AL;LATIN SMALL LETTER Z WITH CARON
-017F;AL;LATIN SMALL LETTER LONG S
-0180;AL;LATIN SMALL LETTER B WITH STROKE
-0181;AL;LATIN CAPITAL LETTER B WITH HOOK
-0182;AL;LATIN CAPITAL LETTER B WITH TOPBAR
-0183;AL;LATIN SMALL LETTER B WITH TOPBAR
-0184;AL;LATIN CAPITAL LETTER TONE SIX
-0185;AL;LATIN SMALL LETTER TONE SIX
-0186;AL;LATIN CAPITAL LETTER OPEN O
-0187;AL;LATIN CAPITAL LETTER C WITH HOOK
-0188;AL;LATIN SMALL LETTER C WITH HOOK
-0189;AL;LATIN CAPITAL LETTER AFRICAN D
-018A;AL;LATIN CAPITAL LETTER D WITH HOOK
-018B;AL;LATIN CAPITAL LETTER D WITH TOPBAR
-018C;AL;LATIN SMALL LETTER D WITH TOPBAR
-018D;AL;LATIN SMALL LETTER TURNED DELTA
-018E;AL;LATIN CAPITAL LETTER REVERSED E
-018F;AL;LATIN CAPITAL LETTER SCHWA
-0190;AL;LATIN CAPITAL LETTER OPEN E
-0191;AL;LATIN CAPITAL LETTER F WITH HOOK
-0192;AL;LATIN SMALL LETTER F WITH HOOK
-0193;AL;LATIN CAPITAL LETTER G WITH HOOK
-0194;AL;LATIN CAPITAL LETTER GAMMA
-0195;AL;LATIN SMALL LETTER HV
-0196;AL;LATIN CAPITAL LETTER IOTA
-0197;AL;LATIN CAPITAL LETTER I WITH STROKE
-0198;AL;LATIN CAPITAL LETTER K WITH HOOK
-0199;AL;LATIN SMALL LETTER K WITH HOOK
-019A;AL;LATIN SMALL LETTER L WITH BAR
-019B;AL;LATIN SMALL LETTER LAMBDA WITH STROKE
-019C;AL;LATIN CAPITAL LETTER TURNED M
-019D;AL;LATIN CAPITAL LETTER N WITH LEFT HOOK
-019E;AL;LATIN SMALL LETTER N WITH LONG RIGHT LEG
-019F;AL;LATIN CAPITAL LETTER O WITH MIDDLE TILDE
-01A0;AL;LATIN CAPITAL LETTER O WITH HORN
-01A1;AL;LATIN SMALL LETTER O WITH HORN
-01A2;AL;LATIN CAPITAL LETTER OI
-01A3;AL;LATIN SMALL LETTER OI
-01A4;AL;LATIN CAPITAL LETTER P WITH HOOK
-01A5;AL;LATIN SMALL LETTER P WITH HOOK
-01A6;AL;LATIN LETTER YR
-01A7;AL;LATIN CAPITAL LETTER TONE TWO
-01A8;AL;LATIN SMALL LETTER TONE TWO
-01A9;AL;LATIN CAPITAL LETTER ESH
-01AA;AL;LATIN LETTER REVERSED ESH LOOP
-01AB;AL;LATIN SMALL LETTER T WITH PALATAL HOOK
-01AC;AL;LATIN CAPITAL LETTER T WITH HOOK
-01AD;AL;LATIN SMALL LETTER T WITH HOOK
-01AE;AL;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
-01AF;AL;LATIN CAPITAL LETTER U WITH HORN
-01B0;AL;LATIN SMALL LETTER U WITH HORN
-01B1;AL;LATIN CAPITAL LETTER UPSILON
-01B2;AL;LATIN CAPITAL LETTER V WITH HOOK
-01B3;AL;LATIN CAPITAL LETTER Y WITH HOOK
-01B4;AL;LATIN SMALL LETTER Y WITH HOOK
-01B5;AL;LATIN CAPITAL LETTER Z WITH STROKE
-01B6;AL;LATIN SMALL LETTER Z WITH STROKE
-01B7;AL;LATIN CAPITAL LETTER EZH
-01B8;AL;LATIN CAPITAL LETTER EZH REVERSED
-01B9;AL;LATIN SMALL LETTER EZH REVERSED
-01BA;AL;LATIN SMALL LETTER EZH WITH TAIL
-01BB;AL;LATIN LETTER TWO WITH STROKE
-01BC;AL;LATIN CAPITAL LETTER TONE FIVE
-01BD;AL;LATIN SMALL LETTER TONE FIVE
-01BE;AL;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
-01BF;AL;LATIN LETTER WYNN
-01C0;AL;LATIN LETTER DENTAL CLICK
-01C1;AL;LATIN LETTER LATERAL CLICK
-01C2;AL;LATIN LETTER ALVEOLAR CLICK
-01C3;AL;LATIN LETTER RETROFLEX CLICK
-01C4;AL;LATIN CAPITAL LETTER DZ WITH CARON
-01C5;AL;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-01C6;AL;LATIN SMALL LETTER DZ WITH CARON
-01C7;AL;LATIN CAPITAL LETTER LJ
-01C8;AL;LATIN CAPITAL LETTER L WITH SMALL LETTER J
-01C9;AL;LATIN SMALL LETTER LJ
-01CA;AL;LATIN CAPITAL LETTER NJ
-01CB;AL;LATIN CAPITAL LETTER N WITH SMALL LETTER J
-01CC;AL;LATIN SMALL LETTER NJ
-01CD;AL;LATIN CAPITAL LETTER A WITH CARON
-01CE;AI;LATIN SMALL LETTER A WITH CARON
-01CF;AL;LATIN CAPITAL LETTER I WITH CARON
-01D0;AI;LATIN SMALL LETTER I WITH CARON
-01D1;AL;LATIN CAPITAL LETTER O WITH CARON
-01D2;AI;LATIN SMALL LETTER O WITH CARON
-01D3;AL;LATIN CAPITAL LETTER U WITH CARON
-01D4;AI;LATIN SMALL LETTER U WITH CARON
-01D5;AL;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-01D6;AI;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
-01D7;AL;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-01D8;AI;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
-01D9;AL;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-01DA;AI;LATIN SMALL LETTER U WITH DIAERESIS AND CARON
-01DB;AL;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-01DC;AI;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
-01DD;AL;LATIN SMALL LETTER TURNED E
-01DE;AL;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-01DF;AL;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-01E0;AL;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-01E1;AL;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
-01E2;AL;LATIN CAPITAL LETTER AE WITH MACRON
-01E3;AL;LATIN SMALL LETTER AE WITH MACRON
-01E4;AL;LATIN CAPITAL LETTER G WITH STROKE
-01E5;AL;LATIN SMALL LETTER G WITH STROKE
-01E6;AL;LATIN CAPITAL LETTER G WITH CARON
-01E7;AL;LATIN SMALL LETTER G WITH CARON
-01E8;AL;LATIN CAPITAL LETTER K WITH CARON
-01E9;AL;LATIN SMALL LETTER K WITH CARON
-01EA;AL;LATIN CAPITAL LETTER O WITH OGONEK
-01EB;AL;LATIN SMALL LETTER O WITH OGONEK
-01EC;AL;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-01ED;AL;LATIN SMALL LETTER O WITH OGONEK AND MACRON
-01EE;AL;LATIN CAPITAL LETTER EZH WITH CARON
-01EF;AL;LATIN SMALL LETTER EZH WITH CARON
-01F0;AL;LATIN SMALL LETTER J WITH CARON
-01F1;AL;LATIN CAPITAL LETTER DZ
-01F2;AL;LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-01F3;AL;LATIN SMALL LETTER DZ
-01F4;AL;LATIN CAPITAL LETTER G WITH ACUTE
-01F5;AL;LATIN SMALL LETTER G WITH ACUTE
-01F6;AL;LATIN CAPITAL LETTER HWAIR
-01F7;AL;LATIN CAPITAL LETTER WYNN
-01F8;AL;LATIN CAPITAL LETTER N WITH GRAVE
-01F9;AL;LATIN SMALL LETTER N WITH GRAVE
-01FA;AL;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-01FB;AL;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-01FC;AL;LATIN CAPITAL LETTER AE WITH ACUTE
-01FD;AL;LATIN SMALL LETTER AE WITH ACUTE
-01FE;AL;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-01FF;AL;LATIN SMALL LETTER O WITH STROKE AND ACUTE
-0200;AL;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
-0201;AL;LATIN SMALL LETTER A WITH DOUBLE GRAVE
-0202;AL;LATIN CAPITAL LETTER A WITH INVERTED BREVE
-0203;AL;LATIN SMALL LETTER A WITH INVERTED BREVE
-0204;AL;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
-0205;AL;LATIN SMALL LETTER E WITH DOUBLE GRAVE
-0206;AL;LATIN CAPITAL LETTER E WITH INVERTED BREVE
-0207;AL;LATIN SMALL LETTER E WITH INVERTED BREVE
-0208;AL;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
-0209;AL;LATIN SMALL LETTER I WITH DOUBLE GRAVE
-020A;AL;LATIN CAPITAL LETTER I WITH INVERTED BREVE
-020B;AL;LATIN SMALL LETTER I WITH INVERTED BREVE
-020C;AL;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
-020D;AL;LATIN SMALL LETTER O WITH DOUBLE GRAVE
-020E;AL;LATIN CAPITAL LETTER O WITH INVERTED BREVE
-020F;AL;LATIN SMALL LETTER O WITH INVERTED BREVE
-0210;AL;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
-0211;AL;LATIN SMALL LETTER R WITH DOUBLE GRAVE
-0212;AL;LATIN CAPITAL LETTER R WITH INVERTED BREVE
-0213;AL;LATIN SMALL LETTER R WITH INVERTED BREVE
-0214;AL;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
-0215;AL;LATIN SMALL LETTER U WITH DOUBLE GRAVE
-0216;AL;LATIN CAPITAL LETTER U WITH INVERTED BREVE
-0217;AL;LATIN SMALL LETTER U WITH INVERTED BREVE
-0218;AL;LATIN CAPITAL LETTER S WITH COMMA BELOW
-0219;AL;LATIN SMALL LETTER S WITH COMMA BELOW
-021A;AL;LATIN CAPITAL LETTER T WITH COMMA BELOW
-021B;AL;LATIN SMALL LETTER T WITH COMMA BELOW
-021C;AL;LATIN CAPITAL LETTER YOGH
-021D;AL;LATIN SMALL LETTER YOGH
-021E;AL;LATIN CAPITAL LETTER H WITH CARON
-021F;AL;LATIN SMALL LETTER H WITH CARON
-0222;AL;LATIN CAPITAL LETTER OU
-0223;AL;LATIN SMALL LETTER OU
-0224;AL;LATIN CAPITAL LETTER Z WITH HOOK
-0225;AL;LATIN SMALL LETTER Z WITH HOOK
-0226;AL;LATIN CAPITAL LETTER A WITH DOT ABOVE
-0227;AL;LATIN SMALL LETTER A WITH DOT ABOVE
-0228;AL;LATIN CAPITAL LETTER E WITH CEDILLA
-0229;AL;LATIN SMALL LETTER E WITH CEDILLA
-022A;AL;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
-022B;AL;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
-022C;AL;LATIN CAPITAL LETTER O WITH TILDE AND MACRON
-022D;AL;LATIN SMALL LETTER O WITH TILDE AND MACRON
-022E;AL;LATIN CAPITAL LETTER O WITH DOT ABOVE
-022F;AL;LATIN SMALL LETTER O WITH DOT ABOVE
-0230;AL;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
-0231;AL;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
-0232;AL;LATIN CAPITAL LETTER Y WITH MACRON
-0233;AL;LATIN SMALL LETTER Y WITH MACRON
-0250;AL;LATIN SMALL LETTER TURNED A
-0251;AI;LATIN SMALL LETTER ALPHA
-0252;AL;LATIN SMALL LETTER TURNED ALPHA
-0253;AL;LATIN SMALL LETTER B WITH HOOK
-0254;AL;LATIN SMALL LETTER OPEN O
-0255;AL;LATIN SMALL LETTER C WITH CURL
-0256;AL;LATIN SMALL LETTER D WITH TAIL
-0257;AL;LATIN SMALL LETTER D WITH HOOK
-0258;AL;LATIN SMALL LETTER REVERSED E
-0259;AL;LATIN SMALL LETTER SCHWA
-025A;AL;LATIN SMALL LETTER SCHWA WITH HOOK
-025B;AL;LATIN SMALL LETTER OPEN E
-025C;AL;LATIN SMALL LETTER REVERSED OPEN E
-025D;AL;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
-025E;AL;LATIN SMALL LETTER CLOSED REVERSED OPEN E
-025F;AL;LATIN SMALL LETTER DOTLESS J WITH STROKE
-0260;AL;LATIN SMALL LETTER G WITH HOOK
-0261;AI;LATIN SMALL LETTER SCRIPT G
-0262;AL;LATIN LETTER SMALL CAPITAL G
-0263;AL;LATIN SMALL LETTER GAMMA
-0264;AL;LATIN SMALL LETTER RAMS HORN
-0265;AL;LATIN SMALL LETTER TURNED H
-0266;AL;LATIN SMALL LETTER H WITH HOOK
-0267;AL;LATIN SMALL LETTER HENG WITH HOOK
-0268;AL;LATIN SMALL LETTER I WITH STROKE
-0269;AL;LATIN SMALL LETTER IOTA
-026A;AL;LATIN LETTER SMALL CAPITAL I
-026B;AL;LATIN SMALL LETTER L WITH MIDDLE TILDE
-026C;AL;LATIN SMALL LETTER L WITH BELT
-026D;AL;LATIN SMALL LETTER L WITH RETROFLEX HOOK
-026E;AL;LATIN SMALL LETTER LEZH
-026F;AL;LATIN SMALL LETTER TURNED M
-0270;AL;LATIN SMALL LETTER TURNED M WITH LONG LEG
-0271;AL;LATIN SMALL LETTER M WITH HOOK
-0272;AL;LATIN SMALL LETTER N WITH LEFT HOOK
-0273;AL;LATIN SMALL LETTER N WITH RETROFLEX HOOK
-0274;AL;LATIN LETTER SMALL CAPITAL N
-0275;AL;LATIN SMALL LETTER BARRED O
-0276;AL;LATIN LETTER SMALL CAPITAL OE
-0277;AL;LATIN SMALL LETTER CLOSED OMEGA
-0278;AL;LATIN SMALL LETTER PHI
-0279;AL;LATIN SMALL LETTER TURNED R
-027A;AL;LATIN SMALL LETTER TURNED R WITH LONG LEG
-027B;AL;LATIN SMALL LETTER TURNED R WITH HOOK
-027C;AL;LATIN SMALL LETTER R WITH LONG LEG
-027D;AL;LATIN SMALL LETTER R WITH TAIL
-027E;AL;LATIN SMALL LETTER R WITH FISHHOOK
-027F;AL;LATIN SMALL LETTER REVERSED R WITH FISHHOOK
-0280;AL;LATIN LETTER SMALL CAPITAL R
-0281;AL;LATIN LETTER SMALL CAPITAL INVERTED R
-0282;AL;LATIN SMALL LETTER S WITH HOOK
-0283;AL;LATIN SMALL LETTER ESH
-0284;AL;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
-0285;AL;LATIN SMALL LETTER SQUAT REVERSED ESH
-0286;AL;LATIN SMALL LETTER ESH WITH CURL
-0287;AL;LATIN SMALL LETTER TURNED T
-0288;AL;LATIN SMALL LETTER T WITH RETROFLEX HOOK
-0289;AL;LATIN SMALL LETTER U BAR
-028A;AL;LATIN SMALL LETTER UPSILON
-028B;AL;LATIN SMALL LETTER V WITH HOOK
-028C;AL;LATIN SMALL LETTER TURNED V
-028D;AL;LATIN SMALL LETTER TURNED W
-028E;AL;LATIN SMALL LETTER TURNED Y
-028F;AL;LATIN LETTER SMALL CAPITAL Y
-0290;AL;LATIN SMALL LETTER Z WITH RETROFLEX HOOK
-0291;AL;LATIN SMALL LETTER Z WITH CURL
-0292;AL;LATIN SMALL LETTER EZH
-0293;AL;LATIN SMALL LETTER EZH WITH CURL
-0294;AL;LATIN LETTER GLOTTAL STOP
-0295;AL;LATIN LETTER PHARYNGEAL VOICED FRICATIVE
-0296;AL;LATIN LETTER INVERTED GLOTTAL STOP
-0297;AL;LATIN LETTER STRETCHED C
-0298;AL;LATIN LETTER BILABIAL CLICK
-0299;AL;LATIN LETTER SMALL CAPITAL B
-029A;AL;LATIN SMALL LETTER CLOSED OPEN E
-029B;AL;LATIN LETTER SMALL CAPITAL G WITH HOOK
-029C;AL;LATIN LETTER SMALL CAPITAL H
-029D;AL;LATIN SMALL LETTER J WITH CROSSED-TAIL
-029E;AL;LATIN SMALL LETTER TURNED K
-029F;AL;LATIN LETTER SMALL CAPITAL L
-02A0;AL;LATIN SMALL LETTER Q WITH HOOK
-02A1;AL;LATIN LETTER GLOTTAL STOP WITH STROKE
-02A2;AL;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
-02A3;AL;LATIN SMALL LETTER DZ DIGRAPH
-02A4;AL;LATIN SMALL LETTER DEZH DIGRAPH
-02A5;AL;LATIN SMALL LETTER DZ DIGRAPH WITH CURL
-02A6;AL;LATIN SMALL LETTER TS DIGRAPH
-02A7;AL;LATIN SMALL LETTER TESH DIGRAPH
-02A8;AL;LATIN SMALL LETTER TC DIGRAPH WITH CURL
-02A9;AL;LATIN SMALL LETTER FENG DIGRAPH
-02AA;AL;LATIN SMALL LETTER LS DIGRAPH
-02AB;AL;LATIN SMALL LETTER LZ DIGRAPH
-02AC;AL;LATIN LETTER BILABIAL PERCUSSIVE
-02AD;AL;LATIN LETTER BIDENTAL PERCUSSIVE
-02B0;AL;MODIFIER LETTER SMALL H
-02B1;AL;MODIFIER LETTER SMALL H WITH HOOK
-02B2;AL;MODIFIER LETTER SMALL J
-02B3;AL;MODIFIER LETTER SMALL R
-02B4;AL;MODIFIER LETTER SMALL TURNED R
-02B5;AL;MODIFIER LETTER SMALL TURNED R WITH HOOK
-02B6;AL;MODIFIER LETTER SMALL CAPITAL INVERTED R
-02B7;AL;MODIFIER LETTER SMALL W
-02B8;AL;MODIFIER LETTER SMALL Y
-02B9;AL;MODIFIER LETTER PRIME
-02BA;AL;MODIFIER LETTER DOUBLE PRIME
-02BB;AL;MODIFIER LETTER TURNED COMMA
-02BC;AL;MODIFIER LETTER APOSTROPHE
-02BD;AL;MODIFIER LETTER REVERSED COMMA
-02BE;AL;MODIFIER LETTER RIGHT HALF RING
-02BF;AL;MODIFIER LETTER LEFT HALF RING
-02C0;AL;MODIFIER LETTER GLOTTAL STOP
-02C1;AL;MODIFIER LETTER REVERSED GLOTTAL STOP
-02C2;AL;MODIFIER LETTER LEFT ARROWHEAD
-02C3;AL;MODIFIER LETTER RIGHT ARROWHEAD
-02C4;AL;MODIFIER LETTER UP ARROWHEAD
-02C5;AL;MODIFIER LETTER DOWN ARROWHEAD
-02C6;AL;MODIFIER LETTER CIRCUMFLEX ACCENT
-02C7;AI;CARON
-02C8;BB;MODIFIER LETTER VERTICAL LINE
-02C9;AI;MODIFIER LETTER MACRON
-02CA;AI;MODIFIER LETTER ACUTE ACCENT
-02CB;AI;MODIFIER LETTER GRAVE ACCENT
-02CC;BB;MODIFIER LETTER LOW VERTICAL LINE
-02CD;AI;MODIFIER LETTER LOW MACRON
-02CE;AL;MODIFIER LETTER LOW GRAVE ACCENT
-02CF;AL;MODIFIER LETTER LOW ACUTE ACCENT
-02D0;AI;MODIFIER LETTER TRIANGULAR COLON
-02D1;AL;MODIFIER LETTER HALF TRIANGULAR COLON
-02D2;AL;MODIFIER LETTER CENTRED RIGHT HALF RING
-02D3;AL;MODIFIER LETTER CENTRED LEFT HALF RING
-02D4;AL;MODIFIER LETTER UP TACK
-02D5;AL;MODIFIER LETTER DOWN TACK
-02D6;AL;MODIFIER LETTER PLUS SIGN
-02D7;AL;MODIFIER LETTER MINUS SIGN
-02D8;AI;BREVE
-02D9;AI;DOT ABOVE
-02DA;AI;RING ABOVE
-02DB;AI;OGONEK
-02DC;AL;SMALL TILDE
-02DD;AI;DOUBLE ACUTE ACCENT
-02DE;AL;MODIFIER LETTER RHOTIC HOOK
-02DF;AL;MODIFIER LETTER CROSS ACCENT
-02E0;AL;MODIFIER LETTER SMALL GAMMA
-02E1;AL;MODIFIER LETTER SMALL L
-02E2;AL;MODIFIER LETTER SMALL S
-02E3;AL;MODIFIER LETTER SMALL X
-02E4;AL;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
-02E5;AL;MODIFIER LETTER EXTRA-HIGH TONE BAR
-02E6;AL;MODIFIER LETTER HIGH TONE BAR
-02E7;AL;MODIFIER LETTER MID TONE BAR
-02E8;AL;MODIFIER LETTER LOW TONE BAR
-02E9;AL;MODIFIER LETTER EXTRA-LOW TONE BAR
-02EA;AL;MODIFIER LETTER YIN DEPARTING TONE MARK
-02EB;AL;MODIFIER LETTER YANG DEPARTING TONE MARK
-02EC;AL;MODIFIER LETTER VOICING
-02ED;AL;MODIFIER LETTER UNASPIRATED
-02EE;AL;MODIFIER LETTER DOUBLE APOSTROPHE
-0300;CM;COMBINING GRAVE ACCENT
-0301;CM;COMBINING ACUTE ACCENT
-0302;CM;COMBINING CIRCUMFLEX ACCENT
-0303;CM;COMBINING TILDE
-0304;CM;COMBINING MACRON
-0305;CM;COMBINING OVERLINE
-0306;CM;COMBINING BREVE
-0307;CM;COMBINING DOT ABOVE
-0308;CM;COMBINING DIAERESIS
-0309;CM;COMBINING HOOK ABOVE
-030A;CM;COMBINING RING ABOVE
-030B;CM;COMBINING DOUBLE ACUTE ACCENT
-030C;CM;COMBINING CARON
-030D;CM;COMBINING VERTICAL LINE ABOVE
-030E;CM;COMBINING DOUBLE VERTICAL LINE ABOVE
-030F;CM;COMBINING DOUBLE GRAVE ACCENT
-0310;CM;COMBINING CANDRABINDU
-0311;CM;COMBINING INVERTED BREVE
-0312;CM;COMBINING TURNED COMMA ABOVE
-0313;CM;COMBINING COMMA ABOVE
-0314;CM;COMBINING REVERSED COMMA ABOVE
-0315;CM;COMBINING COMMA ABOVE RIGHT
-0316;CM;COMBINING GRAVE ACCENT BELOW
-0317;CM;COMBINING ACUTE ACCENT BELOW
-0318;CM;COMBINING LEFT TACK BELOW
-0319;CM;COMBINING RIGHT TACK BELOW
-031A;CM;COMBINING LEFT ANGLE ABOVE
-031B;CM;COMBINING HORN
-031C;CM;COMBINING LEFT HALF RING BELOW
-031D;CM;COMBINING UP TACK BELOW
-031E;CM;COMBINING DOWN TACK BELOW
-031F;CM;COMBINING PLUS SIGN BELOW
-0320;CM;COMBINING MINUS SIGN BELOW
-0321;CM;COMBINING PALATALIZED HOOK BELOW
-0322;CM;COMBINING RETROFLEX HOOK BELOW
-0323;CM;COMBINING DOT BELOW
-0324;CM;COMBINING DIAERESIS BELOW
-0325;CM;COMBINING RING BELOW
-0326;CM;COMBINING COMMA BELOW
-0327;CM;COMBINING CEDILLA
-0328;CM;COMBINING OGONEK
-0329;CM;COMBINING VERTICAL LINE BELOW
-032A;CM;COMBINING BRIDGE BELOW
-032B;CM;COMBINING INVERTED DOUBLE ARCH BELOW
-032C;CM;COMBINING CARON BELOW
-032D;CM;COMBINING CIRCUMFLEX ACCENT BELOW
-032E;CM;COMBINING BREVE BELOW
-032F;CM;COMBINING INVERTED BREVE BELOW
-0330;CM;COMBINING TILDE BELOW
-0331;CM;COMBINING MACRON BELOW
-0332;CM;COMBINING LOW LINE
-0333;CM;COMBINING DOUBLE LOW LINE
-0334;CM;COMBINING TILDE OVERLAY
-0335;CM;COMBINING SHORT STROKE OVERLAY
-0336;CM;COMBINING LONG STROKE OVERLAY
-0337;CM;COMBINING SHORT SOLIDUS OVERLAY
-0338;CM;COMBINING LONG SOLIDUS OVERLAY
-0339;CM;COMBINING RIGHT HALF RING BELOW
-033A;CM;COMBINING INVERTED BRIDGE BELOW
-033B;CM;COMBINING SQUARE BELOW
-033C;CM;COMBINING SEAGULL BELOW
-033D;CM;COMBINING X ABOVE
-033E;CM;COMBINING VERTICAL TILDE
-033F;CM;COMBINING DOUBLE OVERLINE
-0340;CM;COMBINING GRAVE TONE MARK
-0341;CM;COMBINING ACUTE TONE MARK
-0342;CM;COMBINING GREEK PERISPOMENI
-0343;CM;COMBINING GREEK KORONIS
-0344;CM;COMBINING GREEK DIALYTIKA TONOS
-0345;CM;COMBINING GREEK YPOGEGRAMMENI
-0346;CM;COMBINING BRIDGE ABOVE
-0347;CM;COMBINING EQUALS SIGN BELOW
-0348;CM;COMBINING DOUBLE VERTICAL LINE BELOW
-0349;CM;COMBINING LEFT ANGLE BELOW
-034A;CM;COMBINING NOT TILDE ABOVE
-034B;CM;COMBINING HOMOTHETIC ABOVE
-034C;CM;COMBINING ALMOST EQUAL TO ABOVE
-034D;CM;COMBINING LEFT RIGHT ARROW BELOW
-034E;CM;COMBINING UPWARDS ARROW BELOW
-0360;CM;COMBINING DOUBLE TILDE
-0361;CM;COMBINING DOUBLE INVERTED BREVE
-0362;CM;COMBINING DOUBLE RIGHTWARDS ARROW BELOW
-0374;AL;GREEK NUMERAL SIGN
-0375;AL;GREEK LOWER NUMERAL SIGN
-037A;AL;GREEK YPOGEGRAMMENI
-037E;AL;GREEK QUESTION MARK
-0384;AL;GREEK TONOS
-0385;AL;GREEK DIALYTIKA TONOS
-0386;AL;GREEK CAPITAL LETTER ALPHA WITH TONOS
-0387;AL;GREEK ANO TELEIA
-0388;AL;GREEK CAPITAL LETTER EPSILON WITH TONOS
-0389;AL;GREEK CAPITAL LETTER ETA WITH TONOS
-038A;AL;GREEK CAPITAL LETTER IOTA WITH TONOS
-038C;AL;GREEK CAPITAL LETTER OMICRON WITH TONOS
-038E;AL;GREEK CAPITAL LETTER UPSILON WITH TONOS
-038F;AL;GREEK CAPITAL LETTER OMEGA WITH TONOS
-0390;AL;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-0391;AI;GREEK CAPITAL LETTER ALPHA
-0392;AI;GREEK CAPITAL LETTER BETA
-0393;AI;GREEK CAPITAL LETTER GAMMA
-0394;AI;GREEK CAPITAL LETTER DELTA
-0395;AI;GREEK CAPITAL LETTER EPSILON
-0396;AI;GREEK CAPITAL LETTER ZETA
-0397;AI;GREEK CAPITAL LETTER ETA
-0398;AI;GREEK CAPITAL LETTER THETA
-0399;AI;GREEK CAPITAL LETTER IOTA
-039A;AI;GREEK CAPITAL LETTER KAPPA
-039B;AI;GREEK CAPITAL LETTER LAMDA
-039C;AI;GREEK CAPITAL LETTER MU
-039D;AI;GREEK CAPITAL LETTER NU
-039E;AI;GREEK CAPITAL LETTER XI
-039F;AI;GREEK CAPITAL LETTER OMICRON
-03A0;AI;GREEK CAPITAL LETTER PI
-03A1;AI;GREEK CAPITAL LETTER RHO
-03A3;AI;GREEK CAPITAL LETTER SIGMA
-03A4;AI;GREEK CAPITAL LETTER TAU
-03A5;AI;GREEK CAPITAL LETTER UPSILON
-03A6;AI;GREEK CAPITAL LETTER PHI
-03A7;AI;GREEK CAPITAL LETTER CHI
-03A8;AI;GREEK CAPITAL LETTER PSI
-03A9;AI;GREEK CAPITAL LETTER OMEGA
-03AA;AL;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-03AB;AL;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-03AC;AL;GREEK SMALL LETTER ALPHA WITH TONOS
-03AD;AL;GREEK SMALL LETTER EPSILON WITH TONOS
-03AE;AL;GREEK SMALL LETTER ETA WITH TONOS
-03AF;AL;GREEK SMALL LETTER IOTA WITH TONOS
-03B0;AL;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-03B1;AI;GREEK SMALL LETTER ALPHA
-03B2;AI;GREEK SMALL LETTER BETA
-03B3;AI;GREEK SMALL LETTER GAMMA
-03B4;AI;GREEK SMALL LETTER DELTA
-03B5;AI;GREEK SMALL LETTER EPSILON
-03B6;AI;GREEK SMALL LETTER ZETA
-03B7;AI;GREEK SMALL LETTER ETA
-03B8;AI;GREEK SMALL LETTER THETA
-03B9;AI;GREEK SMALL LETTER IOTA
-03BA;AI;GREEK SMALL LETTER KAPPA
-03BB;AI;GREEK SMALL LETTER LAMDA
-03BC;AI;GREEK SMALL LETTER MU
-03BD;AI;GREEK SMALL LETTER NU
-03BE;AI;GREEK SMALL LETTER XI
-03BF;AI;GREEK SMALL LETTER OMICRON
-03C0;AI;GREEK SMALL LETTER PI
-03C1;AI;GREEK SMALL LETTER RHO
-03C2;AL;GREEK SMALL LETTER FINAL SIGMA
-03C3;AI;GREEK SMALL LETTER SIGMA
-03C4;AI;GREEK SMALL LETTER TAU
-03C5;AI;GREEK SMALL LETTER UPSILON
-03C6;AI;GREEK SMALL LETTER PHI
-03C7;AI;GREEK SMALL LETTER CHI
-03C8;AI;GREEK SMALL LETTER PSI
-03C9;AI;GREEK SMALL LETTER OMEGA
-03CA;AL;GREEK SMALL LETTER IOTA WITH DIALYTIKA
-03CB;AL;GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-03CC;AL;GREEK SMALL LETTER OMICRON WITH TONOS
-03CD;AL;GREEK SMALL LETTER UPSILON WITH TONOS
-03CE;AL;GREEK SMALL LETTER OMEGA WITH TONOS
-03D0;AL;GREEK BETA SYMBOL
-03D1;AL;GREEK THETA SYMBOL
-03D2;AL;GREEK UPSILON WITH HOOK SYMBOL
-03D3;AL;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
-03D4;AL;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
-03D5;AL;GREEK PHI SYMBOL
-03D6;AL;GREEK PI SYMBOL
-03D7;AL;GREEK KAI SYMBOL
-03DA;AL;GREEK LETTER STIGMA
-03DB;AL;GREEK SMALL LETTER STIGMA
-03DC;AL;GREEK LETTER DIGAMMA
-03DD;AL;GREEK SMALL LETTER DIGAMMA
-03DE;AL;GREEK LETTER KOPPA
-03DF;AL;GREEK SMALL LETTER KOPPA
-03E0;AL;GREEK LETTER SAMPI
-03E1;AL;GREEK SMALL LETTER SAMPI
-03E2;AL;COPTIC CAPITAL LETTER SHEI
-03E3;AL;COPTIC SMALL LETTER SHEI
-03E4;AL;COPTIC CAPITAL LETTER FEI
-03E5;AL;COPTIC SMALL LETTER FEI
-03E6;AL;COPTIC CAPITAL LETTER KHEI
-03E7;AL;COPTIC SMALL LETTER KHEI
-03E8;AL;COPTIC CAPITAL LETTER HORI
-03E9;AL;COPTIC SMALL LETTER HORI
-03EA;AL;COPTIC CAPITAL LETTER GANGIA
-03EB;AL;COPTIC SMALL LETTER GANGIA
-03EC;AL;COPTIC CAPITAL LETTER SHIMA
-03ED;AL;COPTIC SMALL LETTER SHIMA
-03EE;AL;COPTIC CAPITAL LETTER DEI
-03EF;AL;COPTIC SMALL LETTER DEI
-03F0;AL;GREEK KAPPA SYMBOL
-03F1;AL;GREEK RHO SYMBOL
-03F2;AL;GREEK LUNATE SIGMA SYMBOL
-03F3;AL;GREEK LETTER YOT
-0400;AL;CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0401;AI;CYRILLIC CAPITAL LETTER IO
-0402;AL;CYRILLIC CAPITAL LETTER DJE
-0403;AL;CYRILLIC CAPITAL LETTER GJE
-0404;AL;CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0405;AL;CYRILLIC CAPITAL LETTER DZE
-0406;AL;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0407;AL;CYRILLIC CAPITAL LETTER YI
-0408;AL;CYRILLIC CAPITAL LETTER JE
-0409;AL;CYRILLIC CAPITAL LETTER LJE
-040A;AL;CYRILLIC CAPITAL LETTER NJE
-040B;AL;CYRILLIC CAPITAL LETTER TSHE
-040C;AL;CYRILLIC CAPITAL LETTER KJE
-040D;AL;CYRILLIC CAPITAL LETTER I WITH GRAVE
-040E;AL;CYRILLIC CAPITAL LETTER SHORT U
-040F;AL;CYRILLIC CAPITAL LETTER DZHE
-0410;AI;CYRILLIC CAPITAL LETTER A
-0411;AI;CYRILLIC CAPITAL LETTER BE
-0412;AI;CYRILLIC CAPITAL LETTER VE
-0413;AI;CYRILLIC CAPITAL LETTER GHE
-0414;AI;CYRILLIC CAPITAL LETTER DE
-0415;AI;CYRILLIC CAPITAL LETTER IE
-0416;AI;CYRILLIC CAPITAL LETTER ZHE
-0417;AI;CYRILLIC CAPITAL LETTER ZE
-0418;AI;CYRILLIC CAPITAL LETTER I
-0419;AI;CYRILLIC CAPITAL LETTER SHORT I
-041A;AI;CYRILLIC CAPITAL LETTER KA
-041B;AI;CYRILLIC CAPITAL LETTER EL
-041C;AI;CYRILLIC CAPITAL LETTER EM
-041D;AI;CYRILLIC CAPITAL LETTER EN
-041E;AI;CYRILLIC CAPITAL LETTER O
-041F;AI;CYRILLIC CAPITAL LETTER PE
-0420;AI;CYRILLIC CAPITAL LETTER ER
-0421;AI;CYRILLIC CAPITAL LETTER ES
-0422;AI;CYRILLIC CAPITAL LETTER TE
-0423;AI;CYRILLIC CAPITAL LETTER U
-0424;AI;CYRILLIC CAPITAL LETTER EF
-0425;AI;CYRILLIC CAPITAL LETTER HA
-0426;AI;CYRILLIC CAPITAL LETTER TSE
-0427;AI;CYRILLIC CAPITAL LETTER CHE
-0428;AI;CYRILLIC CAPITAL LETTER SHA
-0429;AI;CYRILLIC CAPITAL LETTER SHCHA
-042A;AI;CYRILLIC CAPITAL LETTER HARD SIGN
-042B;AI;CYRILLIC CAPITAL LETTER YERU
-042C;AI;CYRILLIC CAPITAL LETTER SOFT SIGN
-042D;AI;CYRILLIC CAPITAL LETTER E
-042E;AI;CYRILLIC CAPITAL LETTER YU
-042F;AI;CYRILLIC CAPITAL LETTER YA
-0430;AI;CYRILLIC SMALL LETTER A
-0431;AI;CYRILLIC SMALL LETTER BE
-0432;AI;CYRILLIC SMALL LETTER VE
-0433;AI;CYRILLIC SMALL LETTER GHE
-0434;AI;CYRILLIC SMALL LETTER DE
-0435;AI;CYRILLIC SMALL LETTER IE
-0436;AI;CYRILLIC SMALL LETTER ZHE
-0437;AI;CYRILLIC SMALL LETTER ZE
-0438;AI;CYRILLIC SMALL LETTER I
-0439;AI;CYRILLIC SMALL LETTER SHORT I
-043A;AI;CYRILLIC SMALL LETTER KA
-043B;AI;CYRILLIC SMALL LETTER EL
-043C;AI;CYRILLIC SMALL LETTER EM
-043D;AI;CYRILLIC SMALL LETTER EN
-043E;AI;CYRILLIC SMALL LETTER O
-043F;AI;CYRILLIC SMALL LETTER PE
-0440;AI;CYRILLIC SMALL LETTER ER
-0441;AI;CYRILLIC SMALL LETTER ES
-0442;AI;CYRILLIC SMALL LETTER TE
-0443;AI;CYRILLIC SMALL LETTER U
-0444;AI;CYRILLIC SMALL LETTER EF
-0445;AI;CYRILLIC SMALL LETTER HA
-0446;AI;CYRILLIC SMALL LETTER TSE
-0447;AI;CYRILLIC SMALL LETTER CHE
-0448;AI;CYRILLIC SMALL LETTER SHA
-0449;AI;CYRILLIC SMALL LETTER SHCHA
-044A;AI;CYRILLIC SMALL LETTER HARD SIGN
-044B;AI;CYRILLIC SMALL LETTER YERU
-044C;AI;CYRILLIC SMALL LETTER SOFT SIGN
-044D;AI;CYRILLIC SMALL LETTER E
-044E;AI;CYRILLIC SMALL LETTER YU
-044F;AI;CYRILLIC SMALL LETTER YA
-0450;AL;CYRILLIC SMALL LETTER IE WITH GRAVE
-0451;AI;CYRILLIC SMALL LETTER IO
-0452;AL;CYRILLIC SMALL LETTER DJE
-0453;AL;CYRILLIC SMALL LETTER GJE
-0454;AL;CYRILLIC SMALL LETTER UKRAINIAN IE
-0455;AL;CYRILLIC SMALL LETTER DZE
-0456;AL;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-0457;AL;CYRILLIC SMALL LETTER YI
-0458;AL;CYRILLIC SMALL LETTER JE
-0459;AL;CYRILLIC SMALL LETTER LJE
-045A;AL;CYRILLIC SMALL LETTER NJE
-045B;AL;CYRILLIC SMALL LETTER TSHE
-045C;AL;CYRILLIC SMALL LETTER KJE
-045D;AL;CYRILLIC SMALL LETTER I WITH GRAVE
-045E;AL;CYRILLIC SMALL LETTER SHORT U
-045F;AL;CYRILLIC SMALL LETTER DZHE
-0460;AL;CYRILLIC CAPITAL LETTER OMEGA
-0461;AL;CYRILLIC SMALL LETTER OMEGA
-0462;AL;CYRILLIC CAPITAL LETTER YAT
-0463;AL;CYRILLIC SMALL LETTER YAT
-0464;AL;CYRILLIC CAPITAL LETTER IOTIFIED E
-0465;AL;CYRILLIC SMALL LETTER IOTIFIED E
-0466;AL;CYRILLIC CAPITAL LETTER LITTLE YUS
-0467;AL;CYRILLIC SMALL LETTER LITTLE YUS
-0468;AL;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-0469;AL;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
-046A;AL;CYRILLIC CAPITAL LETTER BIG YUS
-046B;AL;CYRILLIC SMALL LETTER BIG YUS
-046C;AL;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-046D;AL;CYRILLIC SMALL LETTER IOTIFIED BIG YUS
-046E;AL;CYRILLIC CAPITAL LETTER KSI
-046F;AL;CYRILLIC SMALL LETTER KSI
-0470;AL;CYRILLIC CAPITAL LETTER PSI
-0471;AL;CYRILLIC SMALL LETTER PSI
-0472;AL;CYRILLIC CAPITAL LETTER FITA
-0473;AL;CYRILLIC SMALL LETTER FITA
-0474;AL;CYRILLIC CAPITAL LETTER IZHITSA
-0475;AL;CYRILLIC SMALL LETTER IZHITSA
-0476;AL;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0477;AL;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0478;AL;CYRILLIC CAPITAL LETTER UK
-0479;AL;CYRILLIC SMALL LETTER UK
-047A;AL;CYRILLIC CAPITAL LETTER ROUND OMEGA
-047B;AL;CYRILLIC SMALL LETTER ROUND OMEGA
-047C;AL;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-047D;AL;CYRILLIC SMALL LETTER OMEGA WITH TITLO
-047E;AL;CYRILLIC CAPITAL LETTER OT
-047F;AL;CYRILLIC SMALL LETTER OT
-0480;AL;CYRILLIC CAPITAL LETTER KOPPA
-0481;AL;CYRILLIC SMALL LETTER KOPPA
-0482;AL;CYRILLIC THOUSANDS SIGN
-0483;CM;COMBINING CYRILLIC TITLO
-0484;CM;COMBINING CYRILLIC PALATALIZATION
-0485;CM;COMBINING CYRILLIC DASIA PNEUMATA
-0486;CM;COMBINING CYRILLIC PSILI PNEUMATA
-0488;CM;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
-0489;CM;COMBINING CYRILLIC MILLIONS SIGN
-048C;AL;CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-048D;AL;CYRILLIC SMALL LETTER SEMISOFT SIGN
-048E;AL;CYRILLIC CAPITAL LETTER ER WITH TICK
-048F;AL;CYRILLIC SMALL LETTER ER WITH TICK
-0490;AL;CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-0491;AL;CYRILLIC SMALL LETTER GHE WITH UPTURN
-0492;AL;CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0493;AL;CYRILLIC SMALL LETTER GHE WITH STROKE
-0494;AL;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-0495;AL;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
-0496;AL;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-0497;AL;CYRILLIC SMALL LETTER ZHE WITH DESCENDER
-0498;AL;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-0499;AL;CYRILLIC SMALL LETTER ZE WITH DESCENDER
-049A;AL;CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-049B;AL;CYRILLIC SMALL LETTER KA WITH DESCENDER
-049C;AL;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-049D;AL;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
-049E;AL;CYRILLIC CAPITAL LETTER KA WITH STROKE
-049F;AL;CYRILLIC SMALL LETTER KA WITH STROKE
-04A0;AL;CYRILLIC CAPITAL LETTER BASHKIR KA
-04A1;AL;CYRILLIC SMALL LETTER BASHKIR KA
-04A2;AL;CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04A3;AL;CYRILLIC SMALL LETTER EN WITH DESCENDER
-04A4;AL;CYRILLIC CAPITAL LIGATURE EN GHE
-04A5;AL;CYRILLIC SMALL LIGATURE EN GHE
-04A6;AL;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
-04A7;AL;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
-04A8;AL;CYRILLIC CAPITAL LETTER ABKHASIAN HA
-04A9;AL;CYRILLIC SMALL LETTER ABKHASIAN HA
-04AA;AL;CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04AB;AL;CYRILLIC SMALL LETTER ES WITH DESCENDER
-04AC;AL;CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-04AD;AL;CYRILLIC SMALL LETTER TE WITH DESCENDER
-04AE;AL;CYRILLIC CAPITAL LETTER STRAIGHT U
-04AF;AL;CYRILLIC SMALL LETTER STRAIGHT U
-04B0;AL;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-04B1;AL;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
-04B2;AL;CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-04B3;AL;CYRILLIC SMALL LETTER HA WITH DESCENDER
-04B4;AL;CYRILLIC CAPITAL LIGATURE TE TSE
-04B5;AL;CYRILLIC SMALL LIGATURE TE TSE
-04B6;AL;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-04B7;AL;CYRILLIC SMALL LETTER CHE WITH DESCENDER
-04B8;AL;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-04B9;AL;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
-04BA;AL;CYRILLIC CAPITAL LETTER SHHA
-04BB;AL;CYRILLIC SMALL LETTER SHHA
-04BC;AL;CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-04BD;AL;CYRILLIC SMALL LETTER ABKHASIAN CHE
-04BE;AL;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-04BF;AL;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
-04C0;AL;CYRILLIC LETTER PALOCHKA
-04C1;AL;CYRILLIC CAPITAL LETTER ZHE WITH BREVE
-04C2;AL;CYRILLIC SMALL LETTER ZHE WITH BREVE
-04C3;AL;CYRILLIC CAPITAL LETTER KA WITH HOOK
-04C4;AL;CYRILLIC SMALL LETTER KA WITH HOOK
-04C7;AL;CYRILLIC CAPITAL LETTER EN WITH HOOK
-04C8;AL;CYRILLIC SMALL LETTER EN WITH HOOK
-04CB;AL;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-04CC;AL;CYRILLIC SMALL LETTER KHAKASSIAN CHE
-04D0;AL;CYRILLIC CAPITAL LETTER A WITH BREVE
-04D1;AL;CYRILLIC SMALL LETTER A WITH BREVE
-04D2;AL;CYRILLIC CAPITAL LETTER A WITH DIAERESIS
-04D3;AL;CYRILLIC SMALL LETTER A WITH DIAERESIS
-04D4;AL;CYRILLIC CAPITAL LIGATURE A IE
-04D5;AL;CYRILLIC SMALL LIGATURE A IE
-04D6;AL;CYRILLIC CAPITAL LETTER IE WITH BREVE
-04D7;AL;CYRILLIC SMALL LETTER IE WITH BREVE
-04D8;AL;CYRILLIC CAPITAL LETTER SCHWA
-04D9;AL;CYRILLIC SMALL LETTER SCHWA
-04DA;AL;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
-04DB;AL;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
-04DC;AL;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
-04DD;AL;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
-04DE;AL;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
-04DF;AL;CYRILLIC SMALL LETTER ZE WITH DIAERESIS
-04E0;AL;CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-04E1;AL;CYRILLIC SMALL LETTER ABKHASIAN DZE
-04E2;AL;CYRILLIC CAPITAL LETTER I WITH MACRON
-04E3;AL;CYRILLIC SMALL LETTER I WITH MACRON
-04E4;AL;CYRILLIC CAPITAL LETTER I WITH DIAERESIS
-04E5;AL;CYRILLIC SMALL LETTER I WITH DIAERESIS
-04E6;AL;CYRILLIC CAPITAL LETTER O WITH DIAERESIS
-04E7;AL;CYRILLIC SMALL LETTER O WITH DIAERESIS
-04E8;AL;CYRILLIC CAPITAL LETTER BARRED O
-04E9;AL;CYRILLIC SMALL LETTER BARRED O
-04EA;AL;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
-04EB;AL;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
-04EC;AL;CYRILLIC CAPITAL LETTER E WITH DIAERESIS
-04ED;AL;CYRILLIC SMALL LETTER E WITH DIAERESIS
-04EE;AL;CYRILLIC CAPITAL LETTER U WITH MACRON
-04EF;AL;CYRILLIC SMALL LETTER U WITH MACRON
-04F0;AL;CYRILLIC CAPITAL LETTER U WITH DIAERESIS
-04F1;AL;CYRILLIC SMALL LETTER U WITH DIAERESIS
-04F2;AL;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
-04F3;AL;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
-04F4;AL;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
-04F5;AL;CYRILLIC SMALL LETTER CHE WITH DIAERESIS
-04F8;AL;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
-04F9;AL;CYRILLIC SMALL LETTER YERU WITH DIAERESIS
-0531;AL;ARMENIAN CAPITAL LETTER AYB
-0532;AL;ARMENIAN CAPITAL LETTER BEN
-0533;AL;ARMENIAN CAPITAL LETTER GIM
-0534;AL;ARMENIAN CAPITAL LETTER DA
-0535;AL;ARMENIAN CAPITAL LETTER ECH
-0536;AL;ARMENIAN CAPITAL LETTER ZA
-0537;AL;ARMENIAN CAPITAL LETTER EH
-0538;AL;ARMENIAN CAPITAL LETTER ET
-0539;AL;ARMENIAN CAPITAL LETTER TO
-053A;AL;ARMENIAN CAPITAL LETTER ZHE
-053B;AL;ARMENIAN CAPITAL LETTER INI
-053C;AL;ARMENIAN CAPITAL LETTER LIWN
-053D;AL;ARMENIAN CAPITAL LETTER XEH
-053E;AL;ARMENIAN CAPITAL LETTER CA
-053F;AL;ARMENIAN CAPITAL LETTER KEN
-0540;AL;ARMENIAN CAPITAL LETTER HO
-0541;AL;ARMENIAN CAPITAL LETTER JA
-0542;AL;ARMENIAN CAPITAL LETTER GHAD
-0543;AL;ARMENIAN CAPITAL LETTER CHEH
-0544;AL;ARMENIAN CAPITAL LETTER MEN
-0545;AL;ARMENIAN CAPITAL LETTER YI
-0546;AL;ARMENIAN CAPITAL LETTER NOW
-0547;AL;ARMENIAN CAPITAL LETTER SHA
-0548;AL;ARMENIAN CAPITAL LETTER VO
-0549;AL;ARMENIAN CAPITAL LETTER CHA
-054A;AL;ARMENIAN CAPITAL LETTER PEH
-054B;AL;ARMENIAN CAPITAL LETTER JHEH
-054C;AL;ARMENIAN CAPITAL LETTER RA
-054D;AL;ARMENIAN CAPITAL LETTER SEH
-054E;AL;ARMENIAN CAPITAL LETTER VEW
-054F;AL;ARMENIAN CAPITAL LETTER TIWN
-0550;AL;ARMENIAN CAPITAL LETTER REH
-0551;AL;ARMENIAN CAPITAL LETTER CO
-0552;AL;ARMENIAN CAPITAL LETTER YIWN
-0553;AL;ARMENIAN CAPITAL LETTER PIWR
-0554;AL;ARMENIAN CAPITAL LETTER KEH
-0555;AL;ARMENIAN CAPITAL LETTER OH
-0556;AL;ARMENIAN CAPITAL LETTER FEH
-0559;AL;ARMENIAN MODIFIER LETTER LEFT HALF RING
-055A;AL;ARMENIAN APOSTROPHE
-055B;AL;ARMENIAN EMPHASIS MARK
-055C;AL;ARMENIAN EXCLAMATION MARK
-055D;AL;ARMENIAN COMMA
-055E;AL;ARMENIAN QUESTION MARK
-055F;AL;ARMENIAN ABBREVIATION MARK
-0561;AL;ARMENIAN SMALL LETTER AYB
-0562;AL;ARMENIAN SMALL LETTER BEN
-0563;AL;ARMENIAN SMALL LETTER GIM
-0564;AL;ARMENIAN SMALL LETTER DA
-0565;AL;ARMENIAN SMALL LETTER ECH
-0566;AL;ARMENIAN SMALL LETTER ZA
-0567;AL;ARMENIAN SMALL LETTER EH
-0568;AL;ARMENIAN SMALL LETTER ET
-0569;AL;ARMENIAN SMALL LETTER TO
-056A;AL;ARMENIAN SMALL LETTER ZHE
-056B;AL;ARMENIAN SMALL LETTER INI
-056C;AL;ARMENIAN SMALL LETTER LIWN
-056D;AL;ARMENIAN SMALL LETTER XEH
-056E;AL;ARMENIAN SMALL LETTER CA
-056F;AL;ARMENIAN SMALL LETTER KEN
-0570;AL;ARMENIAN SMALL LETTER HO
-0571;AL;ARMENIAN SMALL LETTER JA
-0572;AL;ARMENIAN SMALL LETTER GHAD
-0573;AL;ARMENIAN SMALL LETTER CHEH
-0574;AL;ARMENIAN SMALL LETTER MEN
-0575;AL;ARMENIAN SMALL LETTER YI
-0576;AL;ARMENIAN SMALL LETTER NOW
-0577;AL;ARMENIAN SMALL LETTER SHA
-0578;AL;ARMENIAN SMALL LETTER VO
-0579;AL;ARMENIAN SMALL LETTER CHA
-057A;AL;ARMENIAN SMALL LETTER PEH
-057B;AL;ARMENIAN SMALL LETTER JHEH
-057C;AL;ARMENIAN SMALL LETTER RA
-057D;AL;ARMENIAN SMALL LETTER SEH
-057E;AL;ARMENIAN SMALL LETTER VEW
-057F;AL;ARMENIAN SMALL LETTER TIWN
-0580;AL;ARMENIAN SMALL LETTER REH
-0581;AL;ARMENIAN SMALL LETTER CO
-0582;AL;ARMENIAN SMALL LETTER YIWN
-0583;AL;ARMENIAN SMALL LETTER PIWR
-0584;AL;ARMENIAN SMALL LETTER KEH
-0585;AL;ARMENIAN SMALL LETTER OH
-0586;AL;ARMENIAN SMALL LETTER FEH
-0587;AL;ARMENIAN SMALL LIGATURE ECH YIWN
-0589;IS;ARMENIAN FULL STOP
-058A;BA;ARMENIAN HYPHEN
-0591;CM;HEBREW ACCENT ETNAHTA
-0592;CM;HEBREW ACCENT SEGOL
-0593;CM;HEBREW ACCENT SHALSHELET
-0594;CM;HEBREW ACCENT ZAQEF QATAN
-0595;CM;HEBREW ACCENT ZAQEF GADOL
-0596;CM;HEBREW ACCENT TIPEHA
-0597;CM;HEBREW ACCENT REVIA
-0598;CM;HEBREW ACCENT ZARQA
-0599;CM;HEBREW ACCENT PASHTA
-059A;CM;HEBREW ACCENT YETIV
-059B;CM;HEBREW ACCENT TEVIR
-059C;CM;HEBREW ACCENT GERESH
-059D;CM;HEBREW ACCENT GERESH MUQDAM
-059E;CM;HEBREW ACCENT GERSHAYIM
-059F;CM;HEBREW ACCENT QARNEY PARA
-05A0;CM;HEBREW ACCENT TELISHA GEDOLA
-05A1;CM;HEBREW ACCENT PAZER
-05A3;CM;HEBREW ACCENT MUNAH
-05A4;CM;HEBREW ACCENT MAHAPAKH
-05A5;CM;HEBREW ACCENT MERKHA
-05A6;CM;HEBREW ACCENT MERKHA KEFULA
-05A7;CM;HEBREW ACCENT DARGA
-05A8;CM;HEBREW ACCENT QADMA
-05A9;CM;HEBREW ACCENT TELISHA QETANA
-05AA;CM;HEBREW ACCENT YERAH BEN YOMO
-05AB;CM;HEBREW ACCENT OLE
-05AC;CM;HEBREW ACCENT ILUY
-05AD;CM;HEBREW ACCENT DEHI
-05AE;CM;HEBREW ACCENT ZINOR
-05AF;CM;HEBREW MARK MASORA CIRCLE
-05B0;CM;HEBREW POINT SHEVA
-05B1;CM;HEBREW POINT HATAF SEGOL
-05B2;CM;HEBREW POINT HATAF PATAH
-05B3;CM;HEBREW POINT HATAF QAMATS
-05B4;CM;HEBREW POINT HIRIQ
-05B5;CM;HEBREW POINT TSERE
-05B6;CM;HEBREW POINT SEGOL
-05B7;CM;HEBREW POINT PATAH
-05B8;CM;HEBREW POINT QAMATS
-05B9;CM;HEBREW POINT HOLAM
-05BB;CM;HEBREW POINT QUBUTS
-05BC;CM;HEBREW POINT DAGESH OR MAPIQ
-05BD;CM;HEBREW POINT METEG
-05BE;AL;HEBREW PUNCTUATION MAQAF
-05BF;CM;HEBREW POINT RAFE
-05C0;AL;HEBREW PUNCTUATION PASEQ
-05C1;CM;HEBREW POINT SHIN DOT
-05C2;CM;HEBREW POINT SIN DOT
-05C3;AL;HEBREW PUNCTUATION SOF PASUQ
-05C4;CM;HEBREW MARK UPPER DOT
-05D0;AL;HEBREW LETTER ALEF
-05D1;AL;HEBREW LETTER BET
-05D2;AL;HEBREW LETTER GIMEL
-05D3;AL;HEBREW LETTER DALET
-05D4;AL;HEBREW LETTER HE
-05D5;AL;HEBREW LETTER VAV
-05D6;AL;HEBREW LETTER ZAYIN
-05D7;AL;HEBREW LETTER HET
-05D8;AL;HEBREW LETTER TET
-05D9;AL;HEBREW LETTER YOD
-05DA;AL;HEBREW LETTER FINAL KAF
-05DB;AL;HEBREW LETTER KAF
-05DC;AL;HEBREW LETTER LAMED
-05DD;AL;HEBREW LETTER FINAL MEM
-05DE;AL;HEBREW LETTER MEM
-05DF;AL;HEBREW LETTER FINAL NUN
-05E0;AL;HEBREW LETTER NUN
-05E1;AL;HEBREW LETTER SAMEKH
-05E2;AL;HEBREW LETTER AYIN
-05E3;AL;HEBREW LETTER FINAL PE
-05E4;AL;HEBREW LETTER PE
-05E5;AL;HEBREW LETTER FINAL TSADI
-05E6;AL;HEBREW LETTER TSADI
-05E7;AL;HEBREW LETTER QOF
-05E8;AL;HEBREW LETTER RESH
-05E9;AL;HEBREW LETTER SHIN
-05EA;AL;HEBREW LETTER TAV
-05F0;AL;HEBREW LIGATURE YIDDISH DOUBLE VAV
-05F1;AL;HEBREW LIGATURE YIDDISH VAV YOD
-05F2;AL;HEBREW LIGATURE YIDDISH DOUBLE YOD
-05F3;AL;HEBREW PUNCTUATION GERESH
-05F4;AL;HEBREW PUNCTUATION GERSHAYIM
-060C;AL;ARABIC COMMA
-061B;AL;ARABIC SEMICOLON
-061F;AL;ARABIC QUESTION MARK
-0621;AL;ARABIC LETTER HAMZA
-0622;AL;ARABIC LETTER ALEF WITH MADDA ABOVE
-0623;AL;ARABIC LETTER ALEF WITH HAMZA ABOVE
-0624;AL;ARABIC LETTER WAW WITH HAMZA ABOVE
-0625;AL;ARABIC LETTER ALEF WITH HAMZA BELOW
-0626;AL;ARABIC LETTER YEH WITH HAMZA ABOVE
-0627;AL;ARABIC LETTER ALEF
-0628;AL;ARABIC LETTER BEH
-0629;AL;ARABIC LETTER TEH MARBUTA
-062A;AL;ARABIC LETTER TEH
-062B;AL;ARABIC LETTER THEH
-062C;AL;ARABIC LETTER JEEM
-062D;AL;ARABIC LETTER HAH
-062E;AL;ARABIC LETTER KHAH
-062F;AL;ARABIC LETTER DAL
-0630;AL;ARABIC LETTER THAL
-0631;AL;ARABIC LETTER REH
-0632;AL;ARABIC LETTER ZAIN
-0633;AL;ARABIC LETTER SEEN
-0634;AL;ARABIC LETTER SHEEN
-0635;AL;ARABIC LETTER SAD
-0636;AL;ARABIC LETTER DAD
-0637;AL;ARABIC LETTER TAH
-0638;AL;ARABIC LETTER ZAH
-0639;AL;ARABIC LETTER AIN
-063A;AL;ARABIC LETTER GHAIN
-0640;AL;ARABIC TATWEEL
-0641;AL;ARABIC LETTER FEH
-0642;AL;ARABIC LETTER QAF
-0643;AL;ARABIC LETTER KAF
-0644;AL;ARABIC LETTER LAM
-0645;AL;ARABIC LETTER MEEM
-0646;AL;ARABIC LETTER NOON
-0647;AL;ARABIC LETTER HEH
-0648;AL;ARABIC LETTER WAW
-0649;AL;ARABIC LETTER ALEF MAKSURA
-064A;AL;ARABIC LETTER YEH
-064B;CM;ARABIC FATHATAN
-064C;CM;ARABIC DAMMATAN
-064D;CM;ARABIC KASRATAN
-064E;CM;ARABIC FATHA
-064F;CM;ARABIC DAMMA
-0650;CM;ARABIC KASRA
-0651;CM;ARABIC SHADDA
-0652;CM;ARABIC SUKUN
-0653;CM;ARABIC MADDAH ABOVE
-0654;CM;ARABIC HAMZA ABOVE
-0655;CM;ARABIC HAMZA BELOW
-0660;NU;ARABIC-INDIC DIGIT ZERO
-0661;NU;ARABIC-INDIC DIGIT ONE
-0662;NU;ARABIC-INDIC DIGIT TWO
-0663;NU;ARABIC-INDIC DIGIT THREE
-0664;NU;ARABIC-INDIC DIGIT FOUR
-0665;NU;ARABIC-INDIC DIGIT FIVE
-0666;NU;ARABIC-INDIC DIGIT SIX
-0667;NU;ARABIC-INDIC DIGIT SEVEN
-0668;NU;ARABIC-INDIC DIGIT EIGHT
-0669;NU;ARABIC-INDIC DIGIT NINE
-066A;AL;ARABIC PERCENT SIGN
-066B;AL;ARABIC DECIMAL SEPARATOR
-066C;AL;ARABIC THOUSANDS SEPARATOR
-066D;AL;ARABIC FIVE POINTED STAR
-0670;CM;ARABIC LETTER SUPERSCRIPT ALEF
-0671;AL;ARABIC LETTER ALEF WASLA
-0672;AL;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
-0673;AL;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
-0674;AL;ARABIC LETTER HIGH HAMZA
-0675;AL;ARABIC LETTER HIGH HAMZA ALEF
-0676;AL;ARABIC LETTER HIGH HAMZA WAW
-0677;AL;ARABIC LETTER U WITH HAMZA ABOVE
-0678;AL;ARABIC LETTER HIGH HAMZA YEH
-0679;AL;ARABIC LETTER TTEH
-067A;AL;ARABIC LETTER TTEHEH
-067B;AL;ARABIC LETTER BEEH
-067C;AL;ARABIC LETTER TEH WITH RING
-067D;AL;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
-067E;AL;ARABIC LETTER PEH
-067F;AL;ARABIC LETTER TEHEH
-0680;AL;ARABIC LETTER BEHEH
-0681;AL;ARABIC LETTER HAH WITH HAMZA ABOVE
-0682;AL;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
-0683;AL;ARABIC LETTER NYEH
-0684;AL;ARABIC LETTER DYEH
-0685;AL;ARABIC LETTER HAH WITH THREE DOTS ABOVE
-0686;AL;ARABIC LETTER TCHEH
-0687;AL;ARABIC LETTER TCHEHEH
-0688;AL;ARABIC LETTER DDAL
-0689;AL;ARABIC LETTER DAL WITH RING
-068A;AL;ARABIC LETTER DAL WITH DOT BELOW
-068B;AL;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
-068C;AL;ARABIC LETTER DAHAL
-068D;AL;ARABIC LETTER DDAHAL
-068E;AL;ARABIC LETTER DUL
-068F;AL;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
-0690;AL;ARABIC LETTER DAL WITH FOUR DOTS ABOVE
-0691;AL;ARABIC LETTER RREH
-0692;AL;ARABIC LETTER REH WITH SMALL V
-0693;AL;ARABIC LETTER REH WITH RING
-0694;AL;ARABIC LETTER REH WITH DOT BELOW
-0695;AL;ARABIC LETTER REH WITH SMALL V BELOW
-0696;AL;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
-0697;AL;ARABIC LETTER REH WITH TWO DOTS ABOVE
-0698;AL;ARABIC LETTER JEH
-0699;AL;ARABIC LETTER REH WITH FOUR DOTS ABOVE
-069A;AL;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
-069B;AL;ARABIC LETTER SEEN WITH THREE DOTS BELOW
-069C;AL;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
-069D;AL;ARABIC LETTER SAD WITH TWO DOTS BELOW
-069E;AL;ARABIC LETTER SAD WITH THREE DOTS ABOVE
-069F;AL;ARABIC LETTER TAH WITH THREE DOTS ABOVE
-06A0;AL;ARABIC LETTER AIN WITH THREE DOTS ABOVE
-06A1;AL;ARABIC LETTER DOTLESS FEH
-06A2;AL;ARABIC LETTER FEH WITH DOT MOVED BELOW
-06A3;AL;ARABIC LETTER FEH WITH DOT BELOW
-06A4;AL;ARABIC LETTER VEH
-06A5;AL;ARABIC LETTER FEH WITH THREE DOTS BELOW
-06A6;AL;ARABIC LETTER PEHEH
-06A7;AL;ARABIC LETTER QAF WITH DOT ABOVE
-06A8;AL;ARABIC LETTER QAF WITH THREE DOTS ABOVE
-06A9;AL;ARABIC LETTER KEHEH
-06AA;AL;ARABIC LETTER SWASH KAF
-06AB;AL;ARABIC LETTER KAF WITH RING
-06AC;AL;ARABIC LETTER KAF WITH DOT ABOVE
-06AD;AL;ARABIC LETTER NG
-06AE;AL;ARABIC LETTER KAF WITH THREE DOTS BELOW
-06AF;AL;ARABIC LETTER GAF
-06B0;AL;ARABIC LETTER GAF WITH RING
-06B1;AL;ARABIC LETTER NGOEH
-06B2;AL;ARABIC LETTER GAF WITH TWO DOTS BELOW
-06B3;AL;ARABIC LETTER GUEH
-06B4;AL;ARABIC LETTER GAF WITH THREE DOTS ABOVE
-06B5;AL;ARABIC LETTER LAM WITH SMALL V
-06B6;AL;ARABIC LETTER LAM WITH DOT ABOVE
-06B7;AL;ARABIC LETTER LAM WITH THREE DOTS ABOVE
-06B8;AL;ARABIC LETTER LAM WITH THREE DOTS BELOW
-06B9;AL;ARABIC LETTER NOON WITH DOT BELOW
-06BA;AL;ARABIC LETTER NOON GHUNNA
-06BB;AL;ARABIC LETTER RNOON
-06BC;AL;ARABIC LETTER NOON WITH RING
-06BD;AL;ARABIC LETTER NOON WITH THREE DOTS ABOVE
-06BE;AL;ARABIC LETTER HEH DOACHASHMEE
-06BF;AL;ARABIC LETTER TCHEH WITH DOT ABOVE
-06C0;AL;ARABIC LETTER HEH WITH YEH ABOVE
-06C1;AL;ARABIC LETTER HEH GOAL
-06C2;AL;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
-06C3;AL;ARABIC LETTER TEH MARBUTA GOAL
-06C4;AL;ARABIC LETTER WAW WITH RING
-06C5;AL;ARABIC LETTER KIRGHIZ OE
-06C6;AL;ARABIC LETTER OE
-06C7;AL;ARABIC LETTER U
-06C8;AL;ARABIC LETTER YU
-06C9;AL;ARABIC LETTER KIRGHIZ YU
-06CA;AL;ARABIC LETTER WAW WITH TWO DOTS ABOVE
-06CB;AL;ARABIC LETTER VE
-06CC;AL;ARABIC LETTER FARSI YEH
-06CD;AL;ARABIC LETTER YEH WITH TAIL
-06CE;AL;ARABIC LETTER YEH WITH SMALL V
-06CF;AL;ARABIC LETTER WAW WITH DOT ABOVE
-06D0;AL;ARABIC LETTER E
-06D1;AL;ARABIC LETTER YEH WITH THREE DOTS BELOW
-06D2;AL;ARABIC LETTER YEH BARREE
-06D3;AL;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-06D4;AL;ARABIC FULL STOP
-06D5;AL;ARABIC LETTER AE
-06D6;CM;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
-06D7;CM;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
-06D8;CM;ARABIC SMALL HIGH MEEM INITIAL FORM
-06D9;CM;ARABIC SMALL HIGH LAM ALEF
-06DA;CM;ARABIC SMALL HIGH JEEM
-06DB;CM;ARABIC SMALL HIGH THREE DOTS
-06DC;CM;ARABIC SMALL HIGH SEEN
-06DD;CM;ARABIC END OF AYAH
-06DE;CM;ARABIC START OF RUB EL HIZB
-06DF;CM;ARABIC SMALL HIGH ROUNDED ZERO
-06E0;CM;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
-06E1;CM;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
-06E2;CM;ARABIC SMALL HIGH MEEM ISOLATED FORM
-06E3;CM;ARABIC SMALL LOW SEEN
-06E4;CM;ARABIC SMALL HIGH MADDA
-06E5;AL;ARABIC SMALL WAW
-06E6;AL;ARABIC SMALL YEH
-06E7;CM;ARABIC SMALL HIGH YEH
-06E8;CM;ARABIC SMALL HIGH NOON
-06E9;AL;ARABIC PLACE OF SAJDAH
-06EA;CM;ARABIC EMPTY CENTRE LOW STOP
-06EB;CM;ARABIC EMPTY CENTRE HIGH STOP
-06EC;CM;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
-06ED;CM;ARABIC SMALL LOW MEEM
-06F0;NU;EXTENDED ARABIC-INDIC DIGIT ZERO
-06F1;NU;EXTENDED ARABIC-INDIC DIGIT ONE
-06F2;NU;EXTENDED ARABIC-INDIC DIGIT TWO
-06F3;NU;EXTENDED ARABIC-INDIC DIGIT THREE
-06F4;NU;EXTENDED ARABIC-INDIC DIGIT FOUR
-06F5;NU;EXTENDED ARABIC-INDIC DIGIT FIVE
-06F6;NU;EXTENDED ARABIC-INDIC DIGIT SIX
-06F7;NU;EXTENDED ARABIC-INDIC DIGIT SEVEN
-06F8;NU;EXTENDED ARABIC-INDIC DIGIT EIGHT
-06F9;NU;EXTENDED ARABIC-INDIC DIGIT NINE
-06FA;AL;ARABIC LETTER SHEEN WITH DOT BELOW
-06FB;AL;ARABIC LETTER DAD WITH DOT BELOW
-06FC;AL;ARABIC LETTER GHAIN WITH DOT BELOW
-06FD;AL;ARABIC SIGN SINDHI AMPERSAND
-06FE;AL;ARABIC SIGN SINDHI POSTPOSITION MEN
-0700;AL;SYRIAC END OF PARAGRAPH
-0701;AL;SYRIAC SUPRALINEAR FULL STOP
-0702;AL;SYRIAC SUBLINEAR FULL STOP
-0703;AL;SYRIAC SUPRALINEAR COLON
-0704;AL;SYRIAC SUBLINEAR COLON
-0705;AL;SYRIAC HORIZONTAL COLON
-0706;AL;SYRIAC COLON SKEWED LEFT
-0707;AL;SYRIAC COLON SKEWED RIGHT
-0708;AL;SYRIAC SUPRALINEAR COLON SKEWED LEFT
-0709;AL;SYRIAC SUBLINEAR COLON SKEWED RIGHT
-070A;AL;SYRIAC CONTRACTION
-070B;AL;SYRIAC HARKLEAN OBELUS
-070C;AL;SYRIAC HARKLEAN METOBELUS
-070D;AL;SYRIAC HARKLEAN ASTERISCUS
-070F;CM;SYRIAC ABBREVIATION MARK
-0710;AL;SYRIAC LETTER ALAPH
-0711;CM;SYRIAC LETTER SUPERSCRIPT ALAPH
-0712;AL;SYRIAC LETTER BETH
-0713;AL;SYRIAC LETTER GAMAL
-0714;AL;SYRIAC LETTER GAMAL GARSHUNI
-0715;AL;SYRIAC LETTER DALATH
-0716;AL;SYRIAC LETTER DOTLESS DALATH RISH
-0717;AL;SYRIAC LETTER HE
-0718;AL;SYRIAC LETTER WAW
-0719;AL;SYRIAC LETTER ZAIN
-071A;AL;SYRIAC LETTER HETH
-071B;AL;SYRIAC LETTER TETH
-071C;AL;SYRIAC LETTER TETH GARSHUNI
-071D;AL;SYRIAC LETTER YUDH
-071E;AL;SYRIAC LETTER YUDH HE
-071F;AL;SYRIAC LETTER KAPH
-0720;AL;SYRIAC LETTER LAMADH
-0721;AL;SYRIAC LETTER MIM
-0722;AL;SYRIAC LETTER NUN
-0723;AL;SYRIAC LETTER SEMKATH
-0724;AL;SYRIAC LETTER FINAL SEMKATH
-0725;AL;SYRIAC LETTER E
-0726;AL;SYRIAC LETTER PE
-0727;AL;SYRIAC LETTER REVERSED PE
-0728;AL;SYRIAC LETTER SADHE
-0729;AL;SYRIAC LETTER QAPH
-072A;AL;SYRIAC LETTER RISH
-072B;AL;SYRIAC LETTER SHIN
-072C;AL;SYRIAC LETTER TAW
-0730;CM;SYRIAC PTHAHA ABOVE
-0731;CM;SYRIAC PTHAHA BELOW
-0732;CM;SYRIAC PTHAHA DOTTED
-0733;CM;SYRIAC ZQAPHA ABOVE
-0734;CM;SYRIAC ZQAPHA BELOW
-0735;CM;SYRIAC ZQAPHA DOTTED
-0736;CM;SYRIAC RBASA ABOVE
-0737;CM;SYRIAC RBASA BELOW
-0738;CM;SYRIAC DOTTED ZLAMA HORIZONTAL
-0739;CM;SYRIAC DOTTED ZLAMA ANGULAR
-073A;CM;SYRIAC HBASA ABOVE
-073B;CM;SYRIAC HBASA BELOW
-073C;CM;SYRIAC HBASA-ESASA DOTTED
-073D;CM;SYRIAC ESASA ABOVE
-073E;CM;SYRIAC ESASA BELOW
-073F;CM;SYRIAC RWAHA
-0740;CM;SYRIAC FEMININE DOT
-0741;CM;SYRIAC QUSHSHAYA
-0742;CM;SYRIAC RUKKAKHA
-0743;CM;SYRIAC TWO VERTICAL DOTS ABOVE
-0744;CM;SYRIAC TWO VERTICAL DOTS BELOW
-0745;CM;SYRIAC THREE DOTS ABOVE
-0746;CM;SYRIAC THREE DOTS BELOW
-0747;CM;SYRIAC OBLIQUE LINE ABOVE
-0748;CM;SYRIAC OBLIQUE LINE BELOW
-0749;CM;SYRIAC MUSIC
-074A;CM;SYRIAC BARREKH
-0780;AL;THAANA LETTER HAA
-0781;AL;THAANA LETTER SHAVIYANI
-0782;AL;THAANA LETTER NOONU
-0783;AL;THAANA LETTER RAA
-0784;AL;THAANA LETTER BAA
-0785;AL;THAANA LETTER LHAVIYANI
-0786;AL;THAANA LETTER KAAFU
-0787;AL;THAANA LETTER ALIFU
-0788;AL;THAANA LETTER VAAVU
-0789;AL;THAANA LETTER MEEMU
-078A;AL;THAANA LETTER FAAFU
-078B;AL;THAANA LETTER DHAALU
-078C;AL;THAANA LETTER THAA
-078D;AL;THAANA LETTER LAAMU
-078E;AL;THAANA LETTER GAAFU
-078F;AL;THAANA LETTER GNAVIYANI
-0790;AL;THAANA LETTER SEENU
-0791;AL;THAANA LETTER DAVIYANI
-0792;AL;THAANA LETTER ZAVIYANI
-0793;AL;THAANA LETTER TAVIYANI
-0794;AL;THAANA LETTER YAA
-0795;AL;THAANA LETTER PAVIYANI
-0796;AL;THAANA LETTER JAVIYANI
-0797;AL;THAANA LETTER CHAVIYANI
-0798;AL;THAANA LETTER TTAA
-0799;AL;THAANA LETTER HHAA
-079A;AL;THAANA LETTER KHAA
-079B;AL;THAANA LETTER THAALU
-079C;AL;THAANA LETTER ZAA
-079D;AL;THAANA LETTER SHEENU
-079E;AL;THAANA LETTER SAADHU
-079F;AL;THAANA LETTER DAADHU
-07A0;AL;THAANA LETTER TO
-07A1;AL;THAANA LETTER ZO
-07A2;AL;THAANA LETTER AINU
-07A3;AL;THAANA LETTER GHAINU
-07A4;AL;THAANA LETTER QAAFU
-07A5;AL;THAANA LETTER WAAVU
-07A6;CM;THAANA ABAFILI
-07A7;CM;THAANA AABAAFILI
-07A8;CM;THAANA IBIFILI
-07A9;CM;THAANA EEBEEFILI
-07AA;CM;THAANA UBUFILI
-07AB;CM;THAANA OOBOOFILI
-07AC;CM;THAANA EBEFILI
-07AD;CM;THAANA EYBEYFILI
-07AE;CM;THAANA OBOFILI
-07AF;CM;THAANA OABOAFILI
-07B0;CM;THAANA SUKUN
-0901;CM;DEVANAGARI SIGN CANDRABINDU
-0902;CM;DEVANAGARI SIGN ANUSVARA
-0903;CM;DEVANAGARI SIGN VISARGA
-0905;AL;DEVANAGARI LETTER A
-0906;AL;DEVANAGARI LETTER AA
-0907;AL;DEVANAGARI LETTER I
-0908;AL;DEVANAGARI LETTER II
-0909;AL;DEVANAGARI LETTER U
-090A;AL;DEVANAGARI LETTER UU
-090B;AL;DEVANAGARI LETTER VOCALIC R
-090C;AL;DEVANAGARI LETTER VOCALIC L
-090D;AL;DEVANAGARI LETTER CANDRA E
-090E;AL;DEVANAGARI LETTER SHORT E
-090F;AL;DEVANAGARI LETTER E
-0910;AL;DEVANAGARI LETTER AI
-0911;AL;DEVANAGARI LETTER CANDRA O
-0912;AL;DEVANAGARI LETTER SHORT O
-0913;AL;DEVANAGARI LETTER O
-0914;AL;DEVANAGARI LETTER AU
-0915;AL;DEVANAGARI LETTER KA
-0916;AL;DEVANAGARI LETTER KHA
-0917;AL;DEVANAGARI LETTER GA
-0918;AL;DEVANAGARI LETTER GHA
-0919;AL;DEVANAGARI LETTER NGA
-091A;AL;DEVANAGARI LETTER CA
-091B;AL;DEVANAGARI LETTER CHA
-091C;AL;DEVANAGARI LETTER JA
-091D;AL;DEVANAGARI LETTER JHA
-091E;AL;DEVANAGARI LETTER NYA
-091F;AL;DEVANAGARI LETTER TTA
-0920;AL;DEVANAGARI LETTER TTHA
-0921;AL;DEVANAGARI LETTER DDA
-0922;AL;DEVANAGARI LETTER DDHA
-0923;AL;DEVANAGARI LETTER NNA
-0924;AL;DEVANAGARI LETTER TA
-0925;AL;DEVANAGARI LETTER THA
-0926;AL;DEVANAGARI LETTER DA
-0927;AL;DEVANAGARI LETTER DHA
-0928;AL;DEVANAGARI LETTER NA
-0929;AL;DEVANAGARI LETTER NNNA
-092A;AL;DEVANAGARI LETTER PA
-092B;AL;DEVANAGARI LETTER PHA
-092C;AL;DEVANAGARI LETTER BA
-092D;AL;DEVANAGARI LETTER BHA
-092E;AL;DEVANAGARI LETTER MA
-092F;AL;DEVANAGARI LETTER YA
-0930;AL;DEVANAGARI LETTER RA
-0931;AL;DEVANAGARI LETTER RRA
-0932;AL;DEVANAGARI LETTER LA
-0933;AL;DEVANAGARI LETTER LLA
-0934;AL;DEVANAGARI LETTER LLLA
-0935;AL;DEVANAGARI LETTER VA
-0936;AL;DEVANAGARI LETTER SHA
-0937;AL;DEVANAGARI LETTER SSA
-0938;AL;DEVANAGARI LETTER SA
-0939;AL;DEVANAGARI LETTER HA
-093C;CM;DEVANAGARI SIGN NUKTA
-093D;AL;DEVANAGARI SIGN AVAGRAHA
-093E;CM;DEVANAGARI VOWEL SIGN AA
-093F;CM;DEVANAGARI VOWEL SIGN I
-0940;CM;DEVANAGARI VOWEL SIGN II
-0941;CM;DEVANAGARI VOWEL SIGN U
-0942;CM;DEVANAGARI VOWEL SIGN UU
-0943;CM;DEVANAGARI VOWEL SIGN VOCALIC R
-0944;CM;DEVANAGARI VOWEL SIGN VOCALIC RR
-0945;CM;DEVANAGARI VOWEL SIGN CANDRA E
-0946;CM;DEVANAGARI VOWEL SIGN SHORT E
-0947;CM;DEVANAGARI VOWEL SIGN E
-0948;CM;DEVANAGARI VOWEL SIGN AI
-0949;CM;DEVANAGARI VOWEL SIGN CANDRA O
-094A;CM;DEVANAGARI VOWEL SIGN SHORT O
-094B;CM;DEVANAGARI VOWEL SIGN O
-094C;CM;DEVANAGARI VOWEL SIGN AU
-094D;CM;DEVANAGARI SIGN VIRAMA
-0950;AL;DEVANAGARI OM
-0951;CM;DEVANAGARI STRESS SIGN UDATTA
-0952;CM;DEVANAGARI STRESS SIGN ANUDATTA
-0953;CM;DEVANAGARI GRAVE ACCENT
-0954;CM;DEVANAGARI ACUTE ACCENT
-0958;AL;DEVANAGARI LETTER QA
-0959;AL;DEVANAGARI LETTER KHHA
-095A;AL;DEVANAGARI LETTER GHHA
-095B;AL;DEVANAGARI LETTER ZA
-095C;AL;DEVANAGARI LETTER DDDHA
-095D;AL;DEVANAGARI LETTER RHA
-095E;AL;DEVANAGARI LETTER FA
-095F;AL;DEVANAGARI LETTER YYA
-0960;AL;DEVANAGARI LETTER VOCALIC RR
-0961;AL;DEVANAGARI LETTER VOCALIC LL
-0962;CM;DEVANAGARI VOWEL SIGN VOCALIC L
-0963;CM;DEVANAGARI VOWEL SIGN VOCALIC LL
-0964;AL;DEVANAGARI DANDA
-0965;AL;DEVANAGARI DOUBLE DANDA
-0966;NU;DEVANAGARI DIGIT ZERO
-0967;NU;DEVANAGARI DIGIT ONE
-0968;NU;DEVANAGARI DIGIT TWO
-0969;NU;DEVANAGARI DIGIT THREE
-096A;NU;DEVANAGARI DIGIT FOUR
-096B;NU;DEVANAGARI DIGIT FIVE
-096C;NU;DEVANAGARI DIGIT SIX
-096D;NU;DEVANAGARI DIGIT SEVEN
-096E;NU;DEVANAGARI DIGIT EIGHT
-096F;NU;DEVANAGARI DIGIT NINE
-0970;AL;DEVANAGARI ABBREVIATION SIGN
-0981;CM;BENGALI SIGN CANDRABINDU
-0982;CM;BENGALI SIGN ANUSVARA
-0983;CM;BENGALI SIGN VISARGA
-0985;AL;BENGALI LETTER A
-0986;AL;BENGALI LETTER AA
-0987;AL;BENGALI LETTER I
-0988;AL;BENGALI LETTER II
-0989;AL;BENGALI LETTER U
-098A;AL;BENGALI LETTER UU
-098B;AL;BENGALI LETTER VOCALIC R
-098C;AL;BENGALI LETTER VOCALIC L
-098F;AL;BENGALI LETTER E
-0990;AL;BENGALI LETTER AI
-0993;AL;BENGALI LETTER O
-0994;AL;BENGALI LETTER AU
-0995;AL;BENGALI LETTER KA
-0996;AL;BENGALI LETTER KHA
-0997;AL;BENGALI LETTER GA
-0998;AL;BENGALI LETTER GHA
-0999;AL;BENGALI LETTER NGA
-099A;AL;BENGALI LETTER CA
-099B;AL;BENGALI LETTER CHA
-099C;AL;BENGALI LETTER JA
-099D;AL;BENGALI LETTER JHA
-099E;AL;BENGALI LETTER NYA
-099F;AL;BENGALI LETTER TTA
-09A0;AL;BENGALI LETTER TTHA
-09A1;AL;BENGALI LETTER DDA
-09A2;AL;BENGALI LETTER DDHA
-09A3;AL;BENGALI LETTER NNA
-09A4;AL;BENGALI LETTER TA
-09A5;AL;BENGALI LETTER THA
-09A6;AL;BENGALI LETTER DA
-09A7;AL;BENGALI LETTER DHA
-09A8;AL;BENGALI LETTER NA
-09AA;AL;BENGALI LETTER PA
-09AB;AL;BENGALI LETTER PHA
-09AC;AL;BENGALI LETTER BA
-09AD;AL;BENGALI LETTER BHA
-09AE;AL;BENGALI LETTER MA
-09AF;AL;BENGALI LETTER YA
-09B0;AL;BENGALI LETTER RA
-09B2;AL;BENGALI LETTER LA
-09B6;AL;BENGALI LETTER SHA
-09B7;AL;BENGALI LETTER SSA
-09B8;AL;BENGALI LETTER SA
-09B9;AL;BENGALI LETTER HA
-09BC;CM;BENGALI SIGN NUKTA
-09BE;CM;BENGALI VOWEL SIGN AA
-09BF;CM;BENGALI VOWEL SIGN I
-09C0;CM;BENGALI VOWEL SIGN II
-09C1;CM;BENGALI VOWEL SIGN U
-09C2;CM;BENGALI VOWEL SIGN UU
-09C3;CM;BENGALI VOWEL SIGN VOCALIC R
-09C4;CM;BENGALI VOWEL SIGN VOCALIC RR
-09C7;CM;BENGALI VOWEL SIGN E
-09C8;CM;BENGALI VOWEL SIGN AI
-09CB;CM;BENGALI VOWEL SIGN O
-09CC;CM;BENGALI VOWEL SIGN AU
-09CD;CM;BENGALI SIGN VIRAMA
-09D7;CM;BENGALI AU LENGTH MARK
-09DC;AL;BENGALI LETTER RRA
-09DD;AL;BENGALI LETTER RHA
-09DF;AL;BENGALI LETTER YYA
-09E0;AL;BENGALI LETTER VOCALIC RR
-09E1;AL;BENGALI LETTER VOCALIC LL
-09E2;CM;BENGALI VOWEL SIGN VOCALIC L
-09E3;CM;BENGALI VOWEL SIGN VOCALIC LL
-09E6;NU;BENGALI DIGIT ZERO
-09E7;NU;BENGALI DIGIT ONE
-09E8;NU;BENGALI DIGIT TWO
-09E9;NU;BENGALI DIGIT THREE
-09EA;NU;BENGALI DIGIT FOUR
-09EB;NU;BENGALI DIGIT FIVE
-09EC;NU;BENGALI DIGIT SIX
-09ED;NU;BENGALI DIGIT SEVEN
-09EE;NU;BENGALI DIGIT EIGHT
-09EF;NU;BENGALI DIGIT NINE
-09F0;AL;BENGALI LETTER RA WITH MIDDLE DIAGONAL
-09F1;AL;BENGALI LETTER RA WITH LOWER DIAGONAL
-09F2;PR;BENGALI RUPEE MARK
-09F3;PR;BENGALI RUPEE SIGN
-09F4;AL;BENGALI CURRENCY NUMERATOR ONE
-09F5;AL;BENGALI CURRENCY NUMERATOR TWO
-09F6;AL;BENGALI CURRENCY NUMERATOR THREE
-09F7;AL;BENGALI CURRENCY NUMERATOR FOUR
-09F8;AL;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
-09F9;AL;BENGALI CURRENCY DENOMINATOR SIXTEEN
-09FA;AL;BENGALI ISSHAR
-0A02;CM;GURMUKHI SIGN BINDI
-0A05;AL;GURMUKHI LETTER A
-0A06;AL;GURMUKHI LETTER AA
-0A07;AL;GURMUKHI LETTER I
-0A08;AL;GURMUKHI LETTER II
-0A09;AL;GURMUKHI LETTER U
-0A0A;AL;GURMUKHI LETTER UU
-0A0F;AL;GURMUKHI LETTER EE
-0A10;AL;GURMUKHI LETTER AI
-0A13;AL;GURMUKHI LETTER OO
-0A14;AL;GURMUKHI LETTER AU
-0A15;AL;GURMUKHI LETTER KA
-0A16;AL;GURMUKHI LETTER KHA
-0A17;AL;GURMUKHI LETTER GA
-0A18;AL;GURMUKHI LETTER GHA
-0A19;AL;GURMUKHI LETTER NGA
-0A1A;AL;GURMUKHI LETTER CA
-0A1B;AL;GURMUKHI LETTER CHA
-0A1C;AL;GURMUKHI LETTER JA
-0A1D;AL;GURMUKHI LETTER JHA
-0A1E;AL;GURMUKHI LETTER NYA
-0A1F;AL;GURMUKHI LETTER TTA
-0A20;AL;GURMUKHI LETTER TTHA
-0A21;AL;GURMUKHI LETTER DDA
-0A22;AL;GURMUKHI LETTER DDHA
-0A23;AL;GURMUKHI LETTER NNA
-0A24;AL;GURMUKHI LETTER TA
-0A25;AL;GURMUKHI LETTER THA
-0A26;AL;GURMUKHI LETTER DA
-0A27;AL;GURMUKHI LETTER DHA
-0A28;AL;GURMUKHI LETTER NA
-0A2A;AL;GURMUKHI LETTER PA
-0A2B;AL;GURMUKHI LETTER PHA
-0A2C;AL;GURMUKHI LETTER BA
-0A2D;AL;GURMUKHI LETTER BHA
-0A2E;AL;GURMUKHI LETTER MA
-0A2F;AL;GURMUKHI LETTER YA
-0A30;AL;GURMUKHI LETTER RA
-0A32;AL;GURMUKHI LETTER LA
-0A33;AL;GURMUKHI LETTER LLA
-0A35;AL;GURMUKHI LETTER VA
-0A36;AL;GURMUKHI LETTER SHA
-0A38;AL;GURMUKHI LETTER SA
-0A39;AL;GURMUKHI LETTER HA
-0A3C;CM;GURMUKHI SIGN NUKTA
-0A3E;CM;GURMUKHI VOWEL SIGN AA
-0A3F;CM;GURMUKHI VOWEL SIGN I
-0A40;CM;GURMUKHI VOWEL SIGN II
-0A41;CM;GURMUKHI VOWEL SIGN U
-0A42;CM;GURMUKHI VOWEL SIGN UU
-0A47;CM;GURMUKHI VOWEL SIGN EE
-0A48;CM;GURMUKHI VOWEL SIGN AI
-0A4B;CM;GURMUKHI VOWEL SIGN OO
-0A4C;CM;GURMUKHI VOWEL SIGN AU
-0A4D;CM;GURMUKHI SIGN VIRAMA
-0A59;AL;GURMUKHI LETTER KHHA
-0A5A;AL;GURMUKHI LETTER GHHA
-0A5B;AL;GURMUKHI LETTER ZA
-0A5C;AL;GURMUKHI LETTER RRA
-0A5E;AL;GURMUKHI LETTER FA
-0A66;NU;GURMUKHI DIGIT ZERO
-0A67;NU;GURMUKHI DIGIT ONE
-0A68;NU;GURMUKHI DIGIT TWO
-0A69;NU;GURMUKHI DIGIT THREE
-0A6A;NU;GURMUKHI DIGIT FOUR
-0A6B;NU;GURMUKHI DIGIT FIVE
-0A6C;NU;GURMUKHI DIGIT SIX
-0A6D;NU;GURMUKHI DIGIT SEVEN
-0A6E;NU;GURMUKHI DIGIT EIGHT
-0A6F;NU;GURMUKHI DIGIT NINE
-0A70;CM;GURMUKHI TIPPI
-0A71;CM;GURMUKHI ADDAK
-0A72;AL;GURMUKHI IRI
-0A73;AL;GURMUKHI URA
-0A74;AL;GURMUKHI EK ONKAR
-0A81;CM;GUJARATI SIGN CANDRABINDU
-0A82;CM;GUJARATI SIGN ANUSVARA
-0A83;CM;GUJARATI SIGN VISARGA
-0A85;AL;GUJARATI LETTER A
-0A86;AL;GUJARATI LETTER AA
-0A87;AL;GUJARATI LETTER I
-0A88;AL;GUJARATI LETTER II
-0A89;AL;GUJARATI LETTER U
-0A8A;AL;GUJARATI LETTER UU
-0A8B;AL;GUJARATI LETTER VOCALIC R
-0A8D;AL;GUJARATI VOWEL CANDRA E
-0A8F;AL;GUJARATI LETTER E
-0A90;AL;GUJARATI LETTER AI
-0A91;AL;GUJARATI VOWEL CANDRA O
-0A93;AL;GUJARATI LETTER O
-0A94;AL;GUJARATI LETTER AU
-0A95;AL;GUJARATI LETTER KA
-0A96;AL;GUJARATI LETTER KHA
-0A97;AL;GUJARATI LETTER GA
-0A98;AL;GUJARATI LETTER GHA
-0A99;AL;GUJARATI LETTER NGA
-0A9A;AL;GUJARATI LETTER CA
-0A9B;AL;GUJARATI LETTER CHA
-0A9C;AL;GUJARATI LETTER JA
-0A9D;AL;GUJARATI LETTER JHA
-0A9E;AL;GUJARATI LETTER NYA
-0A9F;AL;GUJARATI LETTER TTA
-0AA0;AL;GUJARATI LETTER TTHA
-0AA1;AL;GUJARATI LETTER DDA
-0AA2;AL;GUJARATI LETTER DDHA
-0AA3;AL;GUJARATI LETTER NNA
-0AA4;AL;GUJARATI LETTER TA
-0AA5;AL;GUJARATI LETTER THA
-0AA6;AL;GUJARATI LETTER DA
-0AA7;AL;GUJARATI LETTER DHA
-0AA8;AL;GUJARATI LETTER NA
-0AAA;AL;GUJARATI LETTER PA
-0AAB;AL;GUJARATI LETTER PHA
-0AAC;AL;GUJARATI LETTER BA
-0AAD;AL;GUJARATI LETTER BHA
-0AAE;AL;GUJARATI LETTER MA
-0AAF;AL;GUJARATI LETTER YA
-0AB0;AL;GUJARATI LETTER RA
-0AB2;AL;GUJARATI LETTER LA
-0AB3;AL;GUJARATI LETTER LLA
-0AB5;AL;GUJARATI LETTER VA
-0AB6;AL;GUJARATI LETTER SHA
-0AB7;AL;GUJARATI LETTER SSA
-0AB8;AL;GUJARATI LETTER SA
-0AB9;AL;GUJARATI LETTER HA
-0ABC;CM;GUJARATI SIGN NUKTA
-0ABD;AL;GUJARATI SIGN AVAGRAHA
-0ABE;CM;GUJARATI VOWEL SIGN AA
-0ABF;CM;GUJARATI VOWEL SIGN I
-0AC0;CM;GUJARATI VOWEL SIGN II
-0AC1;CM;GUJARATI VOWEL SIGN U
-0AC2;CM;GUJARATI VOWEL SIGN UU
-0AC3;CM;GUJARATI VOWEL SIGN VOCALIC R
-0AC4;CM;GUJARATI VOWEL SIGN VOCALIC RR
-0AC5;CM;GUJARATI VOWEL SIGN CANDRA E
-0AC7;CM;GUJARATI VOWEL SIGN E
-0AC8;CM;GUJARATI VOWEL SIGN AI
-0AC9;CM;GUJARATI VOWEL SIGN CANDRA O
-0ACB;CM;GUJARATI VOWEL SIGN O
-0ACC;CM;GUJARATI VOWEL SIGN AU
-0ACD;CM;GUJARATI SIGN VIRAMA
-0AD0;AL;GUJARATI OM
-0AE0;AL;GUJARATI LETTER VOCALIC RR
-0AE6;NU;GUJARATI DIGIT ZERO
-0AE7;NU;GUJARATI DIGIT ONE
-0AE8;NU;GUJARATI DIGIT TWO
-0AE9;NU;GUJARATI DIGIT THREE
-0AEA;NU;GUJARATI DIGIT FOUR
-0AEB;NU;GUJARATI DIGIT FIVE
-0AEC;NU;GUJARATI DIGIT SIX
-0AED;NU;GUJARATI DIGIT SEVEN
-0AEE;NU;GUJARATI DIGIT EIGHT
-0AEF;NU;GUJARATI DIGIT NINE
-0B01;CM;ORIYA SIGN CANDRABINDU
-0B02;CM;ORIYA SIGN ANUSVARA
-0B03;CM;ORIYA SIGN VISARGA
-0B05;AL;ORIYA LETTER A
-0B06;AL;ORIYA LETTER AA
-0B07;AL;ORIYA LETTER I
-0B08;AL;ORIYA LETTER II
-0B09;AL;ORIYA LETTER U
-0B0A;AL;ORIYA LETTER UU
-0B0B;AL;ORIYA LETTER VOCALIC R
-0B0C;AL;ORIYA LETTER VOCALIC L
-0B0F;AL;ORIYA LETTER E
-0B10;AL;ORIYA LETTER AI
-0B13;AL;ORIYA LETTER O
-0B14;AL;ORIYA LETTER AU
-0B15;AL;ORIYA LETTER KA
-0B16;AL;ORIYA LETTER KHA
-0B17;AL;ORIYA LETTER GA
-0B18;AL;ORIYA LETTER GHA
-0B19;AL;ORIYA LETTER NGA
-0B1A;AL;ORIYA LETTER CA
-0B1B;AL;ORIYA LETTER CHA
-0B1C;AL;ORIYA LETTER JA
-0B1D;AL;ORIYA LETTER JHA
-0B1E;AL;ORIYA LETTER NYA
-0B1F;AL;ORIYA LETTER TTA
-0B20;AL;ORIYA LETTER TTHA
-0B21;AL;ORIYA LETTER DDA
-0B22;AL;ORIYA LETTER DDHA
-0B23;AL;ORIYA LETTER NNA
-0B24;AL;ORIYA LETTER TA
-0B25;AL;ORIYA LETTER THA
-0B26;AL;ORIYA LETTER DA
-0B27;AL;ORIYA LETTER DHA
-0B28;AL;ORIYA LETTER NA
-0B2A;AL;ORIYA LETTER PA
-0B2B;AL;ORIYA LETTER PHA
-0B2C;AL;ORIYA LETTER BA
-0B2D;AL;ORIYA LETTER BHA
-0B2E;AL;ORIYA LETTER MA
-0B2F;AL;ORIYA LETTER YA
-0B30;AL;ORIYA LETTER RA
-0B32;AL;ORIYA LETTER LA
-0B33;AL;ORIYA LETTER LLA
-0B36;AL;ORIYA LETTER SHA
-0B37;AL;ORIYA LETTER SSA
-0B38;AL;ORIYA LETTER SA
-0B39;AL;ORIYA LETTER HA
-0B3C;CM;ORIYA SIGN NUKTA
-0B3D;AL;ORIYA SIGN AVAGRAHA
-0B3E;CM;ORIYA VOWEL SIGN AA
-0B3F;CM;ORIYA VOWEL SIGN I
-0B40;CM;ORIYA VOWEL SIGN II
-0B41;CM;ORIYA VOWEL SIGN U
-0B42;CM;ORIYA VOWEL SIGN UU
-0B43;CM;ORIYA VOWEL SIGN VOCALIC R
-0B47;CM;ORIYA VOWEL SIGN E
-0B48;CM;ORIYA VOWEL SIGN AI
-0B4B;CM;ORIYA VOWEL SIGN O
-0B4C;CM;ORIYA VOWEL SIGN AU
-0B4D;CM;ORIYA SIGN VIRAMA
-0B56;CM;ORIYA AI LENGTH MARK
-0B57;CM;ORIYA AU LENGTH MARK
-0B5C;AL;ORIYA LETTER RRA
-0B5D;AL;ORIYA LETTER RHA
-0B5F;AL;ORIYA LETTER YYA
-0B60;AL;ORIYA LETTER VOCALIC RR
-0B61;AL;ORIYA LETTER VOCALIC LL
-0B66;NU;ORIYA DIGIT ZERO
-0B67;NU;ORIYA DIGIT ONE
-0B68;NU;ORIYA DIGIT TWO
-0B69;NU;ORIYA DIGIT THREE
-0B6A;NU;ORIYA DIGIT FOUR
-0B6B;NU;ORIYA DIGIT FIVE
-0B6C;NU;ORIYA DIGIT SIX
-0B6D;NU;ORIYA DIGIT SEVEN
-0B6E;NU;ORIYA DIGIT EIGHT
-0B6F;NU;ORIYA DIGIT NINE
-0B70;AL;ORIYA ISSHAR
-0B82;CM;TAMIL SIGN ANUSVARA
-0B83;CM;TAMIL SIGN VISARGA
-0B85;AL;TAMIL LETTER A
-0B86;AL;TAMIL LETTER AA
-0B87;AL;TAMIL LETTER I
-0B88;AL;TAMIL LETTER II
-0B89;AL;TAMIL LETTER U
-0B8A;AL;TAMIL LETTER UU
-0B8E;AL;TAMIL LETTER E
-0B8F;AL;TAMIL LETTER EE
-0B90;AL;TAMIL LETTER AI
-0B92;AL;TAMIL LETTER O
-0B93;AL;TAMIL LETTER OO
-0B94;AL;TAMIL LETTER AU
-0B95;AL;TAMIL LETTER KA
-0B99;AL;TAMIL LETTER NGA
-0B9A;AL;TAMIL LETTER CA
-0B9C;AL;TAMIL LETTER JA
-0B9E;AL;TAMIL LETTER NYA
-0B9F;AL;TAMIL LETTER TTA
-0BA3;AL;TAMIL LETTER NNA
-0BA4;AL;TAMIL LETTER TA
-0BA8;AL;TAMIL LETTER NA
-0BA9;AL;TAMIL LETTER NNNA
-0BAA;AL;TAMIL LETTER PA
-0BAE;AL;TAMIL LETTER MA
-0BAF;AL;TAMIL LETTER YA
-0BB0;AL;TAMIL LETTER RA
-0BB1;AL;TAMIL LETTER RRA
-0BB2;AL;TAMIL LETTER LA
-0BB3;AL;TAMIL LETTER LLA
-0BB4;AL;TAMIL LETTER LLLA
-0BB5;AL;TAMIL LETTER VA
-0BB7;AL;TAMIL LETTER SSA
-0BB8;AL;TAMIL LETTER SA
-0BB9;AL;TAMIL LETTER HA
-0BBE;CM;TAMIL VOWEL SIGN AA
-0BBF;CM;TAMIL VOWEL SIGN I
-0BC0;CM;TAMIL VOWEL SIGN II
-0BC1;CM;TAMIL VOWEL SIGN U
-0BC2;CM;TAMIL VOWEL SIGN UU
-0BC6;CM;TAMIL VOWEL SIGN E
-0BC7;CM;TAMIL VOWEL SIGN EE
-0BC8;CM;TAMIL VOWEL SIGN AI
-0BCA;CM;TAMIL VOWEL SIGN O
-0BCB;CM;TAMIL VOWEL SIGN OO
-0BCC;CM;TAMIL VOWEL SIGN AU
-0BCD;CM;TAMIL SIGN VIRAMA
-0BD7;CM;TAMIL AU LENGTH MARK
-0BE7;NU;TAMIL DIGIT ONE
-0BE8;NU;TAMIL DIGIT TWO
-0BE9;NU;TAMIL DIGIT THREE
-0BEA;NU;TAMIL DIGIT FOUR
-0BEB;NU;TAMIL DIGIT FIVE
-0BEC;NU;TAMIL DIGIT SIX
-0BED;NU;TAMIL DIGIT SEVEN
-0BEE;NU;TAMIL DIGIT EIGHT
-0BEF;NU;TAMIL DIGIT NINE
-0BF0;AL;TAMIL NUMBER TEN
-0BF1;AL;TAMIL NUMBER ONE HUNDRED
-0BF2;AL;TAMIL NUMBER ONE THOUSAND
-0C01;CM;TELUGU SIGN CANDRABINDU
-0C02;CM;TELUGU SIGN ANUSVARA
-0C03;CM;TELUGU SIGN VISARGA
-0C05;AL;TELUGU LETTER A
-0C06;AL;TELUGU LETTER AA
-0C07;AL;TELUGU LETTER I
-0C08;AL;TELUGU LETTER II
-0C09;AL;TELUGU LETTER U
-0C0A;AL;TELUGU LETTER UU
-0C0B;AL;TELUGU LETTER VOCALIC R
-0C0C;AL;TELUGU LETTER VOCALIC L
-0C0E;AL;TELUGU LETTER E
-0C0F;AL;TELUGU LETTER EE
-0C10;AL;TELUGU LETTER AI
-0C12;AL;TELUGU LETTER O
-0C13;AL;TELUGU LETTER OO
-0C14;AL;TELUGU LETTER AU
-0C15;AL;TELUGU LETTER KA
-0C16;AL;TELUGU LETTER KHA
-0C17;AL;TELUGU LETTER GA
-0C18;AL;TELUGU LETTER GHA
-0C19;AL;TELUGU LETTER NGA
-0C1A;AL;TELUGU LETTER CA
-0C1B;AL;TELUGU LETTER CHA
-0C1C;AL;TELUGU LETTER JA
-0C1D;AL;TELUGU LETTER JHA
-0C1E;AL;TELUGU LETTER NYA
-0C1F;AL;TELUGU LETTER TTA
-0C20;AL;TELUGU LETTER TTHA
-0C21;AL;TELUGU LETTER DDA
-0C22;AL;TELUGU LETTER DDHA
-0C23;AL;TELUGU LETTER NNA
-0C24;AL;TELUGU LETTER TA
-0C25;AL;TELUGU LETTER THA
-0C26;AL;TELUGU LETTER DA
-0C27;AL;TELUGU LETTER DHA
-0C28;AL;TELUGU LETTER NA
-0C2A;AL;TELUGU LETTER PA
-0C2B;AL;TELUGU LETTER PHA
-0C2C;AL;TELUGU LETTER BA
-0C2D;AL;TELUGU LETTER BHA
-0C2E;AL;TELUGU LETTER MA
-0C2F;AL;TELUGU LETTER YA
-0C30;AL;TELUGU LETTER RA
-0C31;AL;TELUGU LETTER RRA
-0C32;AL;TELUGU LETTER LA
-0C33;AL;TELUGU LETTER LLA
-0C35;AL;TELUGU LETTER VA
-0C36;AL;TELUGU LETTER SHA
-0C37;AL;TELUGU LETTER SSA
-0C38;AL;TELUGU LETTER SA
-0C39;AL;TELUGU LETTER HA
-0C3E;CM;TELUGU VOWEL SIGN AA
-0C3F;CM;TELUGU VOWEL SIGN I
-0C40;CM;TELUGU VOWEL SIGN II
-0C41;CM;TELUGU VOWEL SIGN U
-0C42;CM;TELUGU VOWEL SIGN UU
-0C43;CM;TELUGU VOWEL SIGN VOCALIC R
-0C44;CM;TELUGU VOWEL SIGN VOCALIC RR
-0C46;CM;TELUGU VOWEL SIGN E
-0C47;CM;TELUGU VOWEL SIGN EE
-0C48;CM;TELUGU VOWEL SIGN AI
-0C4A;CM;TELUGU VOWEL SIGN O
-0C4B;CM;TELUGU VOWEL SIGN OO
-0C4C;CM;TELUGU VOWEL SIGN AU
-0C4D;CM;TELUGU SIGN VIRAMA
-0C55;CM;TELUGU LENGTH MARK
-0C56;CM;TELUGU AI LENGTH MARK
-0C60;AL;TELUGU LETTER VOCALIC RR
-0C61;AL;TELUGU LETTER VOCALIC LL
-0C66;NU;TELUGU DIGIT ZERO
-0C67;NU;TELUGU DIGIT ONE
-0C68;NU;TELUGU DIGIT TWO
-0C69;NU;TELUGU DIGIT THREE
-0C6A;NU;TELUGU DIGIT FOUR
-0C6B;NU;TELUGU DIGIT FIVE
-0C6C;NU;TELUGU DIGIT SIX
-0C6D;NU;TELUGU DIGIT SEVEN
-0C6E;NU;TELUGU DIGIT EIGHT
-0C6F;NU;TELUGU DIGIT NINE
-0C82;CM;KANNADA SIGN ANUSVARA
-0C83;CM;KANNADA SIGN VISARGA
-0C85;AL;KANNADA LETTER A
-0C86;AL;KANNADA LETTER AA
-0C87;AL;KANNADA LETTER I
-0C88;AL;KANNADA LETTER II
-0C89;AL;KANNADA LETTER U
-0C8A;AL;KANNADA LETTER UU
-0C8B;AL;KANNADA LETTER VOCALIC R
-0C8C;AL;KANNADA LETTER VOCALIC L
-0C8E;AL;KANNADA LETTER E
-0C8F;AL;KANNADA LETTER EE
-0C90;AL;KANNADA LETTER AI
-0C92;AL;KANNADA LETTER O
-0C93;AL;KANNADA LETTER OO
-0C94;AL;KANNADA LETTER AU
-0C95;AL;KANNADA LETTER KA
-0C96;AL;KANNADA LETTER KHA
-0C97;AL;KANNADA LETTER GA
-0C98;AL;KANNADA LETTER GHA
-0C99;AL;KANNADA LETTER NGA
-0C9A;AL;KANNADA LETTER CA
-0C9B;AL;KANNADA LETTER CHA
-0C9C;AL;KANNADA LETTER JA
-0C9D;AL;KANNADA LETTER JHA
-0C9E;AL;KANNADA LETTER NYA
-0C9F;AL;KANNADA LETTER TTA
-0CA0;AL;KANNADA LETTER TTHA
-0CA1;AL;KANNADA LETTER DDA
-0CA2;AL;KANNADA LETTER DDHA
-0CA3;AL;KANNADA LETTER NNA
-0CA4;AL;KANNADA LETTER TA
-0CA5;AL;KANNADA LETTER THA
-0CA6;AL;KANNADA LETTER DA
-0CA7;AL;KANNADA LETTER DHA
-0CA8;AL;KANNADA LETTER NA
-0CAA;AL;KANNADA LETTER PA
-0CAB;AL;KANNADA LETTER PHA
-0CAC;AL;KANNADA LETTER BA
-0CAD;AL;KANNADA LETTER BHA
-0CAE;AL;KANNADA LETTER MA
-0CAF;AL;KANNADA LETTER YA
-0CB0;AL;KANNADA LETTER RA
-0CB1;AL;KANNADA LETTER RRA
-0CB2;AL;KANNADA LETTER LA
-0CB3;AL;KANNADA LETTER LLA
-0CB5;AL;KANNADA LETTER VA
-0CB6;AL;KANNADA LETTER SHA
-0CB7;AL;KANNADA LETTER SSA
-0CB8;AL;KANNADA LETTER SA
-0CB9;AL;KANNADA LETTER HA
-0CBE;CM;KANNADA VOWEL SIGN AA
-0CBF;CM;KANNADA VOWEL SIGN I
-0CC0;CM;KANNADA VOWEL SIGN II
-0CC1;CM;KANNADA VOWEL SIGN U
-0CC2;CM;KANNADA VOWEL SIGN UU
-0CC3;CM;KANNADA VOWEL SIGN VOCALIC R
-0CC4;CM;KANNADA VOWEL SIGN VOCALIC RR
-0CC6;CM;KANNADA VOWEL SIGN E
-0CC7;CM;KANNADA VOWEL SIGN EE
-0CC8;CM;KANNADA VOWEL SIGN AI
-0CCA;CM;KANNADA VOWEL SIGN O
-0CCB;CM;KANNADA VOWEL SIGN OO
-0CCC;CM;KANNADA VOWEL SIGN AU
-0CCD;CM;KANNADA SIGN VIRAMA
-0CD5;CM;KANNADA LENGTH MARK
-0CD6;CM;KANNADA AI LENGTH MARK
-0CDE;AL;KANNADA LETTER FA
-0CE0;AL;KANNADA LETTER VOCALIC RR
-0CE1;AL;KANNADA LETTER VOCALIC LL
-0CE6;NU;KANNADA DIGIT ZERO
-0CE7;NU;KANNADA DIGIT ONE
-0CE8;NU;KANNADA DIGIT TWO
-0CE9;NU;KANNADA DIGIT THREE
-0CEA;NU;KANNADA DIGIT FOUR
-0CEB;NU;KANNADA DIGIT FIVE
-0CEC;NU;KANNADA DIGIT SIX
-0CED;NU;KANNADA DIGIT SEVEN
-0CEE;NU;KANNADA DIGIT EIGHT
-0CEF;NU;KANNADA DIGIT NINE
-0D02;CM;MALAYALAM SIGN ANUSVARA
-0D03;CM;MALAYALAM SIGN VISARGA
-0D05;AL;MALAYALAM LETTER A
-0D06;AL;MALAYALAM LETTER AA
-0D07;AL;MALAYALAM LETTER I
-0D08;AL;MALAYALAM LETTER II
-0D09;AL;MALAYALAM LETTER U
-0D0A;AL;MALAYALAM LETTER UU
-0D0B;AL;MALAYALAM LETTER VOCALIC R
-0D0C;AL;MALAYALAM LETTER VOCALIC L
-0D0E;AL;MALAYALAM LETTER E
-0D0F;AL;MALAYALAM LETTER EE
-0D10;AL;MALAYALAM LETTER AI
-0D12;AL;MALAYALAM LETTER O
-0D13;AL;MALAYALAM LETTER OO
-0D14;AL;MALAYALAM LETTER AU
-0D15;AL;MALAYALAM LETTER KA
-0D16;AL;MALAYALAM LETTER KHA
-0D17;AL;MALAYALAM LETTER GA
-0D18;AL;MALAYALAM LETTER GHA
-0D19;AL;MALAYALAM LETTER NGA
-0D1A;AL;MALAYALAM LETTER CA
-0D1B;AL;MALAYALAM LETTER CHA
-0D1C;AL;MALAYALAM LETTER JA
-0D1D;AL;MALAYALAM LETTER JHA
-0D1E;AL;MALAYALAM LETTER NYA
-0D1F;AL;MALAYALAM LETTER TTA
-0D20;AL;MALAYALAM LETTER TTHA
-0D21;AL;MALAYALAM LETTER DDA
-0D22;AL;MALAYALAM LETTER DDHA
-0D23;AL;MALAYALAM LETTER NNA
-0D24;AL;MALAYALAM LETTER TA
-0D25;AL;MALAYALAM LETTER THA
-0D26;AL;MALAYALAM LETTER DA
-0D27;AL;MALAYALAM LETTER DHA
-0D28;AL;MALAYALAM LETTER NA
-0D2A;AL;MALAYALAM LETTER PA
-0D2B;AL;MALAYALAM LETTER PHA
-0D2C;AL;MALAYALAM LETTER BA
-0D2D;AL;MALAYALAM LETTER BHA
-0D2E;AL;MALAYALAM LETTER MA
-0D2F;AL;MALAYALAM LETTER YA
-0D30;AL;MALAYALAM LETTER RA
-0D31;AL;MALAYALAM LETTER RRA
-0D32;AL;MALAYALAM LETTER LA
-0D33;AL;MALAYALAM LETTER LLA
-0D34;AL;MALAYALAM LETTER LLLA
-0D35;AL;MALAYALAM LETTER VA
-0D36;AL;MALAYALAM LETTER SHA
-0D37;AL;MALAYALAM LETTER SSA
-0D38;AL;MALAYALAM LETTER SA
-0D39;AL;MALAYALAM LETTER HA
-0D3E;CM;MALAYALAM VOWEL SIGN AA
-0D3F;CM;MALAYALAM VOWEL SIGN I
-0D40;CM;MALAYALAM VOWEL SIGN II
-0D41;CM;MALAYALAM VOWEL SIGN U
-0D42;CM;MALAYALAM VOWEL SIGN UU
-0D43;CM;MALAYALAM VOWEL SIGN VOCALIC R
-0D46;CM;MALAYALAM VOWEL SIGN E
-0D47;CM;MALAYALAM VOWEL SIGN EE
-0D48;CM;MALAYALAM VOWEL SIGN AI
-0D4A;CM;MALAYALAM VOWEL SIGN O
-0D4B;CM;MALAYALAM VOWEL SIGN OO
-0D4C;CM;MALAYALAM VOWEL SIGN AU
-0D4D;CM;MALAYALAM SIGN VIRAMA
-0D57;CM;MALAYALAM AU LENGTH MARK
-0D60;AL;MALAYALAM LETTER VOCALIC RR
-0D61;AL;MALAYALAM LETTER VOCALIC LL
-0D66;NU;MALAYALAM DIGIT ZERO
-0D67;NU;MALAYALAM DIGIT ONE
-0D68;NU;MALAYALAM DIGIT TWO
-0D69;NU;MALAYALAM DIGIT THREE
-0D6A;NU;MALAYALAM DIGIT FOUR
-0D6B;NU;MALAYALAM DIGIT FIVE
-0D6C;NU;MALAYALAM DIGIT SIX
-0D6D;NU;MALAYALAM DIGIT SEVEN
-0D6E;NU;MALAYALAM DIGIT EIGHT
-0D6F;NU;MALAYALAM DIGIT NINE
-0D82;CM;SINHALA SIGN ANUSVARAYA
-0D83;CM;SINHALA SIGN VISARGAYA
-0D85;AL;SINHALA LETTER AYANNA
-0D86;AL;SINHALA LETTER AAYANNA
-0D87;AL;SINHALA LETTER AEYANNA
-0D88;AL;SINHALA LETTER AEEYANNA
-0D89;AL;SINHALA LETTER IYANNA
-0D8A;AL;SINHALA LETTER IIYANNA
-0D8B;AL;SINHALA LETTER UYANNA
-0D8C;AL;SINHALA LETTER UUYANNA
-0D8D;AL;SINHALA LETTER IRUYANNA
-0D8E;AL;SINHALA LETTER IRUUYANNA
-0D8F;AL;SINHALA LETTER ILUYANNA
-0D90;AL;SINHALA LETTER ILUUYANNA
-0D91;AL;SINHALA LETTER EYANNA
-0D92;AL;SINHALA LETTER EEYANNA
-0D93;AL;SINHALA LETTER AIYANNA
-0D94;AL;SINHALA LETTER OYANNA
-0D95;AL;SINHALA LETTER OOYANNA
-0D96;AL;SINHALA LETTER AUYANNA
-0D9A;AL;SINHALA LETTER ALPAPRAANA KAYANNA
-0D9B;AL;SINHALA LETTER MAHAAPRAANA KAYANNA
-0D9C;AL;SINHALA LETTER ALPAPRAANA GAYANNA
-0D9D;AL;SINHALA LETTER MAHAAPRAANA GAYANNA
-0D9E;AL;SINHALA LETTER KANTAJA NAASIKYAYA
-0D9F;AL;SINHALA LETTER SANYAKA GAYANNA
-0DA0;AL;SINHALA LETTER ALPAPRAANA CAYANNA
-0DA1;AL;SINHALA LETTER MAHAAPRAANA CAYANNA
-0DA2;AL;SINHALA LETTER ALPAPRAANA JAYANNA
-0DA3;AL;SINHALA LETTER MAHAAPRAANA JAYANNA
-0DA4;AL;SINHALA LETTER TAALUJA NAASIKYAYA
-0DA5;AL;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
-0DA6;AL;SINHALA LETTER SANYAKA JAYANNA
-0DA7;AL;SINHALA LETTER ALPAPRAANA TTAYANNA
-0DA8;AL;SINHALA LETTER MAHAAPRAANA TTAYANNA
-0DA9;AL;SINHALA LETTER ALPAPRAANA DDAYANNA
-0DAA;AL;SINHALA LETTER MAHAAPRAANA DDAYANNA
-0DAB;AL;SINHALA LETTER MUURDHAJA NAYANNA
-0DAC;AL;SINHALA LETTER SANYAKA DDAYANNA
-0DAD;AL;SINHALA LETTER ALPAPRAANA TAYANNA
-0DAE;AL;SINHALA LETTER MAHAAPRAANA TAYANNA
-0DAF;AL;SINHALA LETTER ALPAPRAANA DAYANNA
-0DB0;AL;SINHALA LETTER MAHAAPRAANA DAYANNA
-0DB1;AL;SINHALA LETTER DANTAJA NAYANNA
-0DB3;AL;SINHALA LETTER SANYAKA DAYANNA
-0DB4;AL;SINHALA LETTER ALPAPRAANA PAYANNA
-0DB5;AL;SINHALA LETTER MAHAAPRAANA PAYANNA
-0DB6;AL;SINHALA LETTER ALPAPRAANA BAYANNA
-0DB7;AL;SINHALA LETTER MAHAAPRAANA BAYANNA
-0DB8;AL;SINHALA LETTER MAYANNA
-0DB9;AL;SINHALA LETTER AMBA BAYANNA
-0DBA;AL;SINHALA LETTER YAYANNA
-0DBB;AL;SINHALA LETTER RAYANNA
-0DBD;AL;SINHALA LETTER DANTAJA LAYANNA
-0DC0;AL;SINHALA LETTER VAYANNA
-0DC1;AL;SINHALA LETTER TAALUJA SAYANNA
-0DC2;AL;SINHALA LETTER MUURDHAJA SAYANNA
-0DC3;AL;SINHALA LETTER DANTAJA SAYANNA
-0DC4;AL;SINHALA LETTER HAYANNA
-0DC5;AL;SINHALA LETTER MUURDHAJA LAYANNA
-0DC6;AL;SINHALA LETTER FAYANNA
-0DCA;CM;SINHALA SIGN AL-LAKUNA
-0DCF;CM;SINHALA VOWEL SIGN AELA-PILLA
-0DD0;CM;SINHALA VOWEL SIGN KETTI AEDA-PILLA
-0DD1;CM;SINHALA VOWEL SIGN DIGA AEDA-PILLA
-0DD2;CM;SINHALA VOWEL SIGN KETTI IS-PILLA
-0DD3;CM;SINHALA VOWEL SIGN DIGA IS-PILLA
-0DD4;CM;SINHALA VOWEL SIGN KETTI PAA-PILLA
-0DD6;CM;SINHALA VOWEL SIGN DIGA PAA-PILLA
-0DD8;CM;SINHALA VOWEL SIGN GAETTA-PILLA
-0DD9;CM;SINHALA VOWEL SIGN KOMBUVA
-0DDA;CM;SINHALA VOWEL SIGN DIGA KOMBUVA
-0DDB;CM;SINHALA VOWEL SIGN KOMBU DEKA
-0DDC;CM;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
-0DDD;CM;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
-0DDE;CM;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
-0DDF;CM;SINHALA VOWEL SIGN GAYANUKITTA
-0DF2;CM;SINHALA VOWEL SIGN DIGA GAETTA-PILLA
-0DF3;CM;SINHALA VOWEL SIGN DIGA GAYANUKITTA
-0DF4;AL;SINHALA PUNCTUATION KUNDDALIYA
-0E01;SA;THAI CHARACTER KO KAI
-0E02;SA;THAI CHARACTER KHO KHAI
-0E03;SA;THAI CHARACTER KHO KHUAT
-0E04;SA;THAI CHARACTER KHO KHWAI
-0E05;SA;THAI CHARACTER KHO KHON
-0E06;SA;THAI CHARACTER KHO RAKHANG
-0E07;SA;THAI CHARACTER NGO NGU
-0E08;SA;THAI CHARACTER CHO CHAN
-0E09;SA;THAI CHARACTER CHO CHING
-0E0A;SA;THAI CHARACTER CHO CHANG
-0E0B;SA;THAI CHARACTER SO SO
-0E0C;SA;THAI CHARACTER CHO CHOE
-0E0D;SA;THAI CHARACTER YO YING
-0E0E;SA;THAI CHARACTER DO CHADA
-0E0F;SA;THAI CHARACTER TO PATAK
-0E10;SA;THAI CHARACTER THO THAN
-0E11;SA;THAI CHARACTER THO NANGMONTHO
-0E12;SA;THAI CHARACTER THO PHUTHAO
-0E13;SA;THAI CHARACTER NO NEN
-0E14;SA;THAI CHARACTER DO DEK
-0E15;SA;THAI CHARACTER TO TAO
-0E16;SA;THAI CHARACTER THO THUNG
-0E17;SA;THAI CHARACTER THO THAHAN
-0E18;SA;THAI CHARACTER THO THONG
-0E19;SA;THAI CHARACTER NO NU
-0E1A;SA;THAI CHARACTER BO BAIMAI
-0E1B;SA;THAI CHARACTER PO PLA
-0E1C;SA;THAI CHARACTER PHO PHUNG
-0E1D;SA;THAI CHARACTER FO FA
-0E1E;SA;THAI CHARACTER PHO PHAN
-0E1F;SA;THAI CHARACTER FO FAN
-0E20;SA;THAI CHARACTER PHO SAMPHAO
-0E21;SA;THAI CHARACTER MO MA
-0E22;SA;THAI CHARACTER YO YAK
-0E23;SA;THAI CHARACTER RO RUA
-0E24;SA;THAI CHARACTER RU
-0E25;SA;THAI CHARACTER LO LING
-0E26;SA;THAI CHARACTER LU
-0E27;SA;THAI CHARACTER WO WAEN
-0E28;SA;THAI CHARACTER SO SALA
-0E29;SA;THAI CHARACTER SO RUSI
-0E2A;SA;THAI CHARACTER SO SUA
-0E2B;SA;THAI CHARACTER HO HIP
-0E2C;SA;THAI CHARACTER LO CHULA
-0E2D;SA;THAI CHARACTER O ANG
-0E2E;SA;THAI CHARACTER HO NOKHUK
-0E2F;SA;THAI CHARACTER PAIYANNOI
-0E30;SA;THAI CHARACTER SARA A
-0E31;CM;THAI CHARACTER MAI HAN-AKAT
-0E32;SA;THAI CHARACTER SARA AA
-0E33;SA;THAI CHARACTER SARA AM
-0E34;CM;THAI CHARACTER SARA I
-0E35;CM;THAI CHARACTER SARA II
-0E36;CM;THAI CHARACTER SARA UE
-0E37;CM;THAI CHARACTER SARA UEE
-0E38;CM;THAI CHARACTER SARA U
-0E39;CM;THAI CHARACTER SARA UU
-0E3A;CM;THAI CHARACTER PHINTHU
-0E3F;PR;THAI CURRENCY SYMBOL BAHT
-0E40;SA;THAI CHARACTER SARA E
-0E41;SA;THAI CHARACTER SARA AE
-0E42;SA;THAI CHARACTER SARA O
-0E43;SA;THAI CHARACTER SARA AI MAIMUAN
-0E44;SA;THAI CHARACTER SARA AI MAIMALAI
-0E45;SA;THAI CHARACTER LAKKHANGYAO
-0E46;SA;THAI CHARACTER MAIYAMOK
-0E47;CM;THAI CHARACTER MAITAIKHU
-0E48;CM;THAI CHARACTER MAI EK
-0E49;CM;THAI CHARACTER MAI THO
-0E4A;CM;THAI CHARACTER MAI TRI
-0E4B;CM;THAI CHARACTER MAI CHATTAWA
-0E4C;CM;THAI CHARACTER THANTHAKHAT
-0E4D;CM;THAI CHARACTER NIKHAHIT
-0E4E;CM;THAI CHARACTER YAMAKKAN
-0E4F;AL;THAI CHARACTER FONGMAN
-0E50;NU;THAI DIGIT ZERO
-0E51;NU;THAI DIGIT ONE
-0E52;NU;THAI DIGIT TWO
-0E53;NU;THAI DIGIT THREE
-0E54;NU;THAI DIGIT FOUR
-0E55;NU;THAI DIGIT FIVE
-0E56;NU;THAI DIGIT SIX
-0E57;NU;THAI DIGIT SEVEN
-0E58;NU;THAI DIGIT EIGHT
-0E59;NU;THAI DIGIT NINE
-0E5A;NS;THAI CHARACTER ANGKHANKHU
-0E5B;NS;THAI CHARACTER KHOMUT
-0E81;SA;LAO LETTER KO
-0E82;SA;LAO LETTER KHO SUNG
-0E84;SA;LAO LETTER KHO TAM
-0E87;SA;LAO LETTER NGO
-0E88;SA;LAO LETTER CO
-0E8A;SA;LAO LETTER SO TAM
-0E8D;SA;LAO LETTER NYO
-0E94;SA;LAO LETTER DO
-0E95;SA;LAO LETTER TO
-0E96;SA;LAO LETTER THO SUNG
-0E97;SA;LAO LETTER THO TAM
-0E99;SA;LAO LETTER NO
-0E9A;SA;LAO LETTER BO
-0E9B;SA;LAO LETTER PO
-0E9C;SA;LAO LETTER PHO SUNG
-0E9D;SA;LAO LETTER FO TAM
-0E9E;SA;LAO LETTER PHO TAM
-0E9F;SA;LAO LETTER FO SUNG
-0EA1;SA;LAO LETTER MO
-0EA2;SA;LAO LETTER YO
-0EA3;SA;LAO LETTER LO LING
-0EA5;SA;LAO LETTER LO LOOT
-0EA7;SA;LAO LETTER WO
-0EAA;SA;LAO LETTER SO SUNG
-0EAB;SA;LAO LETTER HO SUNG
-0EAD;SA;LAO LETTER O
-0EAE;SA;LAO LETTER HO TAM
-0EAF;SA;LAO ELLIPSIS
-0EB0;SA;LAO VOWEL SIGN A
-0EB1;CM;LAO VOWEL SIGN MAI KAN
-0EB2;SA;LAO VOWEL SIGN AA
-0EB3;SA;LAO VOWEL SIGN AM
-0EB4;CM;LAO VOWEL SIGN I
-0EB5;CM;LAO VOWEL SIGN II
-0EB6;CM;LAO VOWEL SIGN Y
-0EB7;CM;LAO VOWEL SIGN YY
-0EB8;CM;LAO VOWEL SIGN U
-0EB9;CM;LAO VOWEL SIGN UU
-0EBB;CM;LAO VOWEL SIGN MAI KON
-0EBC;CM;LAO SEMIVOWEL SIGN LO
-0EBD;SA;LAO SEMIVOWEL SIGN NYO
-0EC0;SA;LAO VOWEL SIGN E
-0EC1;SA;LAO VOWEL SIGN EI
-0EC2;SA;LAO VOWEL SIGN O
-0EC3;SA;LAO VOWEL SIGN AY
-0EC4;SA;LAO VOWEL SIGN AI
-0EC6;SA;LAO KO LA
-0EC8;CM;LAO TONE MAI EK
-0EC9;CM;LAO TONE MAI THO
-0ECA;CM;LAO TONE MAI TI
-0ECB;CM;LAO TONE MAI CATAWA
-0ECC;CM;LAO CANCELLATION MARK
-0ECD;CM;LAO NIGGAHITA
-0ED0;NU;LAO DIGIT ZERO
-0ED1;NU;LAO DIGIT ONE
-0ED2;NU;LAO DIGIT TWO
-0ED3;NU;LAO DIGIT THREE
-0ED4;NU;LAO DIGIT FOUR
-0ED5;NU;LAO DIGIT FIVE
-0ED6;NU;LAO DIGIT SIX
-0ED7;NU;LAO DIGIT SEVEN
-0ED8;NU;LAO DIGIT EIGHT
-0ED9;NU;LAO DIGIT NINE
-0EDC;SA;LAO HO NO
-0EDD;SA;LAO HO MO
-0F00;AL;TIBETAN SYLLABLE OM
-0F01;AL;TIBETAN MARK GTER YIG MGO TRUNCATED A
-0F02;AL;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
-0F03;AL;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
-0F04;AL;TIBETAN MARK INITIAL YIG MGO MDUN MA
-0F05;AL;TIBETAN MARK CLOSING YIG MGO SGAB MA
-0F06;AL;TIBETAN MARK CARET YIG MGO PHUR SHAD MA
-0F07;AL;TIBETAN MARK YIG MGO TSHEG SHAD MA
-0F08;AL;TIBETAN MARK SBRUL SHAD
-0F09;AL;TIBETAN MARK BSKUR YIG MGO
-0F0A;AL;TIBETAN MARK BKA- SHOG YIG MGO
-0F0B;BA;TIBETAN MARK INTERSYLLABIC TSHEG
-0F0C;GL;TIBETAN MARK DELIMITER TSHEG BSTAR
-0F0D;AL;TIBETAN MARK SHAD
-0F0E;AL;TIBETAN MARK NYIS SHAD
-0F0F;AL;TIBETAN MARK TSHEG SHAD
-0F10;AL;TIBETAN MARK NYIS TSHEG SHAD
-0F11;AL;TIBETAN MARK RIN CHEN SPUNGS SHAD
-0F12;AL;TIBETAN MARK RGYA GRAM SHAD
-0F13;AL;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
-0F14;AL;TIBETAN MARK GTER TSHEG
-0F15;AL;TIBETAN LOGOTYPE SIGN CHAD RTAGS
-0F16;AL;TIBETAN LOGOTYPE SIGN LHAG RTAGS
-0F17;AL;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
-0F18;CM;TIBETAN ASTROLOGICAL SIGN -KHYUD PA
-0F19;CM;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-0F1A;AL;TIBETAN SIGN RDEL DKAR GCIG
-0F1B;AL;TIBETAN SIGN RDEL DKAR GNYIS
-0F1C;AL;TIBETAN SIGN RDEL DKAR GSUM
-0F1D;AL;TIBETAN SIGN RDEL NAG GCIG
-0F1E;AL;TIBETAN SIGN RDEL NAG GNYIS
-0F1F;AL;TIBETAN SIGN RDEL DKAR RDEL NAG
-0F20;NU;TIBETAN DIGIT ZERO
-0F21;NU;TIBETAN DIGIT ONE
-0F22;NU;TIBETAN DIGIT TWO
-0F23;NU;TIBETAN DIGIT THREE
-0F24;NU;TIBETAN DIGIT FOUR
-0F25;NU;TIBETAN DIGIT FIVE
-0F26;NU;TIBETAN DIGIT SIX
-0F27;NU;TIBETAN DIGIT SEVEN
-0F28;NU;TIBETAN DIGIT EIGHT
-0F29;NU;TIBETAN DIGIT NINE
-0F2A;AL;TIBETAN DIGIT HALF ONE
-0F2B;AL;TIBETAN DIGIT HALF TWO
-0F2C;AL;TIBETAN DIGIT HALF THREE
-0F2D;AL;TIBETAN DIGIT HALF FOUR
-0F2E;AL;TIBETAN DIGIT HALF FIVE
-0F2F;AL;TIBETAN DIGIT HALF SIX
-0F30;AL;TIBETAN DIGIT HALF SEVEN
-0F31;AL;TIBETAN DIGIT HALF EIGHT
-0F32;AL;TIBETAN DIGIT HALF NINE
-0F33;AL;TIBETAN DIGIT HALF ZERO
-0F34;AL;TIBETAN MARK BSDUS RTAGS
-0F35;CM;TIBETAN MARK NGAS BZUNG NYI ZLA
-0F36;AL;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
-0F37;CM;TIBETAN MARK NGAS BZUNG SGOR RTAGS
-0F38;AL;TIBETAN MARK CHE MGO
-0F39;CM;TIBETAN MARK TSA -PHRU
-0F3A;OP;TIBETAN MARK GUG RTAGS GYON
-0F3B;CL;TIBETAN MARK GUG RTAGS GYAS
-0F3C;OP;TIBETAN MARK ANG KHANG GYON
-0F3D;CL;TIBETAN MARK ANG KHANG GYAS
-0F3E;CM;TIBETAN SIGN YAR TSHES
-0F3F;CM;TIBETAN SIGN MAR TSHES
-0F40;AL;TIBETAN LETTER KA
-0F41;AL;TIBETAN LETTER KHA
-0F42;AL;TIBETAN LETTER GA
-0F43;AL;TIBETAN LETTER GHA
-0F44;AL;TIBETAN LETTER NGA
-0F45;AL;TIBETAN LETTER CA
-0F46;AL;TIBETAN LETTER CHA
-0F47;AL;TIBETAN LETTER JA
-0F49;AL;TIBETAN LETTER NYA
-0F4A;AL;TIBETAN LETTER TTA
-0F4B;AL;TIBETAN LETTER TTHA
-0F4C;AL;TIBETAN LETTER DDA
-0F4D;AL;TIBETAN LETTER DDHA
-0F4E;AL;TIBETAN LETTER NNA
-0F4F;AL;TIBETAN LETTER TA
-0F50;AL;TIBETAN LETTER THA
-0F51;AL;TIBETAN LETTER DA
-0F52;AL;TIBETAN LETTER DHA
-0F53;AL;TIBETAN LETTER NA
-0F54;AL;TIBETAN LETTER PA
-0F55;AL;TIBETAN LETTER PHA
-0F56;AL;TIBETAN LETTER BA
-0F57;AL;TIBETAN LETTER BHA
-0F58;AL;TIBETAN LETTER MA
-0F59;AL;TIBETAN LETTER TSA
-0F5A;AL;TIBETAN LETTER TSHA
-0F5B;AL;TIBETAN LETTER DZA
-0F5C;AL;TIBETAN LETTER DZHA
-0F5D;AL;TIBETAN LETTER WA
-0F5E;AL;TIBETAN LETTER ZHA
-0F5F;AL;TIBETAN LETTER ZA
-0F60;AL;TIBETAN LETTER -A
-0F61;AL;TIBETAN LETTER YA
-0F62;AL;TIBETAN LETTER RA
-0F63;AL;TIBETAN LETTER LA
-0F64;AL;TIBETAN LETTER SHA
-0F65;AL;TIBETAN LETTER SSA
-0F66;AL;TIBETAN LETTER SA
-0F67;AL;TIBETAN LETTER HA
-0F68;AL;TIBETAN LETTER A
-0F69;AL;TIBETAN LETTER KSSA
-0F6A;AL;TIBETAN LETTER FIXED-FORM RA
-0F71;CM;TIBETAN VOWEL SIGN AA
-0F72;CM;TIBETAN VOWEL SIGN I
-0F73;CM;TIBETAN VOWEL SIGN II
-0F74;CM;TIBETAN VOWEL SIGN U
-0F75;CM;TIBETAN VOWEL SIGN UU
-0F76;CM;TIBETAN VOWEL SIGN VOCALIC R
-0F77;CM;TIBETAN VOWEL SIGN VOCALIC RR
-0F78;CM;TIBETAN VOWEL SIGN VOCALIC L
-0F79;CM;TIBETAN VOWEL SIGN VOCALIC LL
-0F7A;CM;TIBETAN VOWEL SIGN E
-0F7B;CM;TIBETAN VOWEL SIGN EE
-0F7C;CM;TIBETAN VOWEL SIGN O
-0F7D;CM;TIBETAN VOWEL SIGN OO
-0F7E;CM;TIBETAN SIGN RJES SU NGA RO
-0F7F;CM;TIBETAN SIGN RNAM BCAD
-0F80;CM;TIBETAN VOWEL SIGN REVERSED I
-0F81;CM;TIBETAN VOWEL SIGN REVERSED II
-0F82;CM;TIBETAN SIGN NYI ZLA NAA DA
-0F83;CM;TIBETAN SIGN SNA LDAN
-0F84;CM;TIBETAN MARK HALANTA
-0F85;AL;TIBETAN MARK PALUTA
-0F86;CM;TIBETAN SIGN LCI RTAGS
-0F87;CM;TIBETAN SIGN YANG RTAGS
-0F88;AL;TIBETAN SIGN LCE TSA CAN
-0F89;AL;TIBETAN SIGN MCHU CAN
-0F8A;AL;TIBETAN SIGN GRU CAN RGYINGS
-0F8B;AL;TIBETAN SIGN GRU MED RGYINGS
-0F90;CM;TIBETAN SUBJOINED LETTER KA
-0F91;CM;TIBETAN SUBJOINED LETTER KHA
-0F92;CM;TIBETAN SUBJOINED LETTER GA
-0F93;CM;TIBETAN SUBJOINED LETTER GHA
-0F94;CM;TIBETAN SUBJOINED LETTER NGA
-0F95;CM;TIBETAN SUBJOINED LETTER CA
-0F96;CM;TIBETAN SUBJOINED LETTER CHA
-0F97;CM;TIBETAN SUBJOINED LETTER JA
-0F99;CM;TIBETAN SUBJOINED LETTER NYA
-0F9A;CM;TIBETAN SUBJOINED LETTER TTA
-0F9B;CM;TIBETAN SUBJOINED LETTER TTHA
-0F9C;CM;TIBETAN SUBJOINED LETTER DDA
-0F9D;CM;TIBETAN SUBJOINED LETTER DDHA
-0F9E;CM;TIBETAN SUBJOINED LETTER NNA
-0F9F;CM;TIBETAN SUBJOINED LETTER TA
-0FA0;CM;TIBETAN SUBJOINED LETTER THA
-0FA1;CM;TIBETAN SUBJOINED LETTER DA
-0FA2;CM;TIBETAN SUBJOINED LETTER DHA
-0FA3;CM;TIBETAN SUBJOINED LETTER NA
-0FA4;CM;TIBETAN SUBJOINED LETTER PA
-0FA5;CM;TIBETAN SUBJOINED LETTER PHA
-0FA6;CM;TIBETAN SUBJOINED LETTER BA
-0FA7;CM;TIBETAN SUBJOINED LETTER BHA
-0FA8;CM;TIBETAN SUBJOINED LETTER MA
-0FA9;CM;TIBETAN SUBJOINED LETTER TSA
-0FAA;CM;TIBETAN SUBJOINED LETTER TSHA
-0FAB;CM;TIBETAN SUBJOINED LETTER DZA
-0FAC;CM;TIBETAN SUBJOINED LETTER DZHA
-0FAD;CM;TIBETAN SUBJOINED LETTER WA
-0FAE;CM;TIBETAN SUBJOINED LETTER ZHA
-0FAF;CM;TIBETAN SUBJOINED LETTER ZA
-0FB0;CM;TIBETAN SUBJOINED LETTER -A
-0FB1;CM;TIBETAN SUBJOINED LETTER YA
-0FB2;CM;TIBETAN SUBJOINED LETTER RA
-0FB3;CM;TIBETAN SUBJOINED LETTER LA
-0FB4;CM;TIBETAN SUBJOINED LETTER SHA
-0FB5;CM;TIBETAN SUBJOINED LETTER SSA
-0FB6;CM;TIBETAN SUBJOINED LETTER SA
-0FB7;CM;TIBETAN SUBJOINED LETTER HA
-0FB8;CM;TIBETAN SUBJOINED LETTER A
-0FB9;CM;TIBETAN SUBJOINED LETTER KSSA
-0FBA;CM;TIBETAN SUBJOINED LETTER FIXED-FORM WA
-0FBB;CM;TIBETAN SUBJOINED LETTER FIXED-FORM YA
-0FBC;CM;TIBETAN SUBJOINED LETTER FIXED-FORM RA
-0FBE;AL;TIBETAN KU RU KHA
-0FBF;AL;TIBETAN KU RU KHA BZHI MIG CAN
-0FC0;AL;TIBETAN CANTILLATION SIGN HEAVY BEAT
-0FC1;AL;TIBETAN CANTILLATION SIGN LIGHT BEAT
-0FC2;AL;TIBETAN CANTILLATION SIGN CANG TE-U
-0FC3;AL;TIBETAN CANTILLATION SIGN SBUB -CHAL
-0FC4;AL;TIBETAN SYMBOL DRIL BU
-0FC5;AL;TIBETAN SYMBOL RDO RJE
-0FC6;CM;TIBETAN SYMBOL PADMA GDAN
-0FC7;AL;TIBETAN SYMBOL RDO RJE RGYA GRAM
-0FC8;AL;TIBETAN SYMBOL PHUR PA
-0FC9;AL;TIBETAN SYMBOL NOR BU
-0FCA;AL;TIBETAN SYMBOL NOR BU NYIS -KHYIL
-0FCB;AL;TIBETAN SYMBOL NOR BU GSUM -KHYIL
-0FCC;AL;TIBETAN SYMBOL NOR BU BZHI -KHYIL
-0FCF;AL;TIBETAN SIGN RDEL NAG GSUM
-1000;SA;MYANMAR LETTER KA
-1001;SA;MYANMAR LETTER KHA
-1002;SA;MYANMAR LETTER GA
-1003;SA;MYANMAR LETTER GHA
-1004;SA;MYANMAR LETTER NGA
-1005;SA;MYANMAR LETTER CA
-1006;SA;MYANMAR LETTER CHA
-1007;SA;MYANMAR LETTER JA
-1008;SA;MYANMAR LETTER JHA
-1009;SA;MYANMAR LETTER NYA
-100A;SA;MYANMAR LETTER NNYA
-100B;SA;MYANMAR LETTER TTA
-100C;SA;MYANMAR LETTER TTHA
-100D;SA;MYANMAR LETTER DDA
-100E;SA;MYANMAR LETTER DDHA
-100F;SA;MYANMAR LETTER NNA
-1010;SA;MYANMAR LETTER TA
-1011;SA;MYANMAR LETTER THA
-1012;SA;MYANMAR LETTER DA
-1013;SA;MYANMAR LETTER DHA
-1014;SA;MYANMAR LETTER NA
-1015;SA;MYANMAR LETTER PA
-1016;SA;MYANMAR LETTER PHA
-1017;SA;MYANMAR LETTER BA
-1018;SA;MYANMAR LETTER BHA
-1019;SA;MYANMAR LETTER MA
-101A;SA;MYANMAR LETTER YA
-101B;SA;MYANMAR LETTER RA
-101C;SA;MYANMAR LETTER LA
-101D;SA;MYANMAR LETTER WA
-101E;SA;MYANMAR LETTER SA
-101F;SA;MYANMAR LETTER HA
-1020;SA;MYANMAR LETTER LLA
-1021;SA;MYANMAR LETTER A
-1023;SA;MYANMAR LETTER I
-1024;SA;MYANMAR LETTER II
-1025;SA;MYANMAR LETTER U
-1026;SA;MYANMAR LETTER UU
-1027;SA;MYANMAR LETTER E
-1029;SA;MYANMAR LETTER O
-102A;SA;MYANMAR LETTER AU
-102C;CM;MYANMAR VOWEL SIGN AA
-102D;CM;MYANMAR VOWEL SIGN I
-102E;CM;MYANMAR VOWEL SIGN II
-102F;CM;MYANMAR VOWEL SIGN U
-1030;CM;MYANMAR VOWEL SIGN UU
-1031;CM;MYANMAR VOWEL SIGN E
-1032;CM;MYANMAR VOWEL SIGN AI
-1036;CM;MYANMAR SIGN ANUSVARA
-1037;CM;MYANMAR SIGN DOT BELOW
-1038;CM;MYANMAR SIGN VISARGA
-1039;CM;MYANMAR SIGN VIRAMA
-1040;NU;MYANMAR DIGIT ZERO
-1041;NU;MYANMAR DIGIT ONE
-1042;NU;MYANMAR DIGIT TWO
-1043;NU;MYANMAR DIGIT THREE
-1044;NU;MYANMAR DIGIT FOUR
-1045;NU;MYANMAR DIGIT FIVE
-1046;NU;MYANMAR DIGIT SIX
-1047;NU;MYANMAR DIGIT SEVEN
-1048;NU;MYANMAR DIGIT EIGHT
-1049;NU;MYANMAR DIGIT NINE
-104A;AL;MYANMAR SIGN LITTLE SECTION
-104B;AL;MYANMAR SIGN SECTION
-104C;AL;MYANMAR SYMBOL LOCATIVE
-104D;AL;MYANMAR SYMBOL COMPLETED
-104E;AL;MYANMAR SYMBOL AFOREMENTIONED
-104F;AL;MYANMAR SYMBOL GENITIVE
-1050;SA;MYANMAR LETTER SHA
-1051;SA;MYANMAR LETTER SSA
-1052;SA;MYANMAR LETTER VOCALIC R
-1053;SA;MYANMAR LETTER VOCALIC RR
-1054;SA;MYANMAR LETTER VOCALIC L
-1055;SA;MYANMAR LETTER VOCALIC LL
-1056;CM;MYANMAR VOWEL SIGN VOCALIC R
-1057;CM;MYANMAR VOWEL SIGN VOCALIC RR
-1058;CM;MYANMAR VOWEL SIGN VOCALIC L
-1059;CM;MYANMAR VOWEL SIGN VOCALIC LL
-10A0;AL;GEORGIAN CAPITAL LETTER AN
-10A1;AL;GEORGIAN CAPITAL LETTER BAN
-10A2;AL;GEORGIAN CAPITAL LETTER GAN
-10A3;AL;GEORGIAN CAPITAL LETTER DON
-10A4;AL;GEORGIAN CAPITAL LETTER EN
-10A5;AL;GEORGIAN CAPITAL LETTER VIN
-10A6;AL;GEORGIAN CAPITAL LETTER ZEN
-10A7;AL;GEORGIAN CAPITAL LETTER TAN
-10A8;AL;GEORGIAN CAPITAL LETTER IN
-10A9;AL;GEORGIAN CAPITAL LETTER KAN
-10AA;AL;GEORGIAN CAPITAL LETTER LAS
-10AB;AL;GEORGIAN CAPITAL LETTER MAN
-10AC;AL;GEORGIAN CAPITAL LETTER NAR
-10AD;AL;GEORGIAN CAPITAL LETTER ON
-10AE;AL;GEORGIAN CAPITAL LETTER PAR
-10AF;AL;GEORGIAN CAPITAL LETTER ZHAR
-10B0;AL;GEORGIAN CAPITAL LETTER RAE
-10B1;AL;GEORGIAN CAPITAL LETTER SAN
-10B2;AL;GEORGIAN CAPITAL LETTER TAR
-10B3;AL;GEORGIAN CAPITAL LETTER UN
-10B4;AL;GEORGIAN CAPITAL LETTER PHAR
-10B5;AL;GEORGIAN CAPITAL LETTER KHAR
-10B6;AL;GEORGIAN CAPITAL LETTER GHAN
-10B7;AL;GEORGIAN CAPITAL LETTER QAR
-10B8;AL;GEORGIAN CAPITAL LETTER SHIN
-10B9;AL;GEORGIAN CAPITAL LETTER CHIN
-10BA;AL;GEORGIAN CAPITAL LETTER CAN
-10BB;AL;GEORGIAN CAPITAL LETTER JIL
-10BC;AL;GEORGIAN CAPITAL LETTER CIL
-10BD;AL;GEORGIAN CAPITAL LETTER CHAR
-10BE;AL;GEORGIAN CAPITAL LETTER XAN
-10BF;AL;GEORGIAN CAPITAL LETTER JHAN
-10C0;AL;GEORGIAN CAPITAL LETTER HAE
-10C1;AL;GEORGIAN CAPITAL LETTER HE
-10C2;AL;GEORGIAN CAPITAL LETTER HIE
-10C3;AL;GEORGIAN CAPITAL LETTER WE
-10C4;AL;GEORGIAN CAPITAL LETTER HAR
-10C5;AL;GEORGIAN CAPITAL LETTER HOE
-10D0;AL;GEORGIAN LETTER AN
-10D1;AL;GEORGIAN LETTER BAN
-10D2;AL;GEORGIAN LETTER GAN
-10D3;AL;GEORGIAN LETTER DON
-10D4;AL;GEORGIAN LETTER EN
-10D5;AL;GEORGIAN LETTER VIN
-10D6;AL;GEORGIAN LETTER ZEN
-10D7;AL;GEORGIAN LETTER TAN
-10D8;AL;GEORGIAN LETTER IN
-10D9;AL;GEORGIAN LETTER KAN
-10DA;AL;GEORGIAN LETTER LAS
-10DB;AL;GEORGIAN LETTER MAN
-10DC;AL;GEORGIAN LETTER NAR
-10DD;AL;GEORGIAN LETTER ON
-10DE;AL;GEORGIAN LETTER PAR
-10DF;AL;GEORGIAN LETTER ZHAR
-10E0;AL;GEORGIAN LETTER RAE
-10E1;AL;GEORGIAN LETTER SAN
-10E2;AL;GEORGIAN LETTER TAR
-10E3;AL;GEORGIAN LETTER UN
-10E4;AL;GEORGIAN LETTER PHAR
-10E5;AL;GEORGIAN LETTER KHAR
-10E6;AL;GEORGIAN LETTER GHAN
-10E7;AL;GEORGIAN LETTER QAR
-10E8;AL;GEORGIAN LETTER SHIN
-10E9;AL;GEORGIAN LETTER CHIN
-10EA;AL;GEORGIAN LETTER CAN
-10EB;AL;GEORGIAN LETTER JIL
-10EC;AL;GEORGIAN LETTER CIL
-10ED;AL;GEORGIAN LETTER CHAR
-10EE;AL;GEORGIAN LETTER XAN
-10EF;AL;GEORGIAN LETTER JHAN
-10F0;AL;GEORGIAN LETTER HAE
-10F1;AL;GEORGIAN LETTER HE
-10F2;AL;GEORGIAN LETTER HIE
-10F3;AL;GEORGIAN LETTER WE
-10F4;AL;GEORGIAN LETTER HAR
-10F5;AL;GEORGIAN LETTER HOE
-10F6;AL;GEORGIAN LETTER FI
-10FB;AL;GEORGIAN PARAGRAPH SEPARATOR
-1100;ID;HANGUL CHOSEONG KIYEOK
-1101;ID;HANGUL CHOSEONG SSANGKIYEOK
-1102;ID;HANGUL CHOSEONG NIEUN
-1103;ID;HANGUL CHOSEONG TIKEUT
-1104;ID;HANGUL CHOSEONG SSANGTIKEUT
-1105;ID;HANGUL CHOSEONG RIEUL
-1106;ID;HANGUL CHOSEONG MIEUM
-1107;ID;HANGUL CHOSEONG PIEUP
-1108;ID;HANGUL CHOSEONG SSANGPIEUP
-1109;ID;HANGUL CHOSEONG SIOS
-110A;ID;HANGUL CHOSEONG SSANGSIOS
-110B;ID;HANGUL CHOSEONG IEUNG
-110C;ID;HANGUL CHOSEONG CIEUC
-110D;ID;HANGUL CHOSEONG SSANGCIEUC
-110E;ID;HANGUL CHOSEONG CHIEUCH
-110F;ID;HANGUL CHOSEONG KHIEUKH
-1110;ID;HANGUL CHOSEONG THIEUTH
-1111;ID;HANGUL CHOSEONG PHIEUPH
-1112;ID;HANGUL CHOSEONG HIEUH
-1113;ID;HANGUL CHOSEONG NIEUN-KIYEOK
-1114;ID;HANGUL CHOSEONG SSANGNIEUN
-1115;ID;HANGUL CHOSEONG NIEUN-TIKEUT
-1116;ID;HANGUL CHOSEONG NIEUN-PIEUP
-1117;ID;HANGUL CHOSEONG TIKEUT-KIYEOK
-1118;ID;HANGUL CHOSEONG RIEUL-NIEUN
-1119;ID;HANGUL CHOSEONG SSANGRIEUL
-111A;ID;HANGUL CHOSEONG RIEUL-HIEUH
-111B;ID;HANGUL CHOSEONG KAPYEOUNRIEUL
-111C;ID;HANGUL CHOSEONG MIEUM-PIEUP
-111D;ID;HANGUL CHOSEONG KAPYEOUNMIEUM
-111E;ID;HANGUL CHOSEONG PIEUP-KIYEOK
-111F;ID;HANGUL CHOSEONG PIEUP-NIEUN
-1120;ID;HANGUL CHOSEONG PIEUP-TIKEUT
-1121;ID;HANGUL CHOSEONG PIEUP-SIOS
-1122;ID;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
-1123;ID;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
-1124;ID;HANGUL CHOSEONG PIEUP-SIOS-PIEUP
-1125;ID;HANGUL CHOSEONG PIEUP-SSANGSIOS
-1126;ID;HANGUL CHOSEONG PIEUP-SIOS-CIEUC
-1127;ID;HANGUL CHOSEONG PIEUP-CIEUC
-1128;ID;HANGUL CHOSEONG PIEUP-CHIEUCH
-1129;ID;HANGUL CHOSEONG PIEUP-THIEUTH
-112A;ID;HANGUL CHOSEONG PIEUP-PHIEUPH
-112B;ID;HANGUL CHOSEONG KAPYEOUNPIEUP
-112C;ID;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
-112D;ID;HANGUL CHOSEONG SIOS-KIYEOK
-112E;ID;HANGUL CHOSEONG SIOS-NIEUN
-112F;ID;HANGUL CHOSEONG SIOS-TIKEUT
-1130;ID;HANGUL CHOSEONG SIOS-RIEUL
-1131;ID;HANGUL CHOSEONG SIOS-MIEUM
-1132;ID;HANGUL CHOSEONG SIOS-PIEUP
-1133;ID;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
-1134;ID;HANGUL CHOSEONG SIOS-SSANGSIOS
-1135;ID;HANGUL CHOSEONG SIOS-IEUNG
-1136;ID;HANGUL CHOSEONG SIOS-CIEUC
-1137;ID;HANGUL CHOSEONG SIOS-CHIEUCH
-1138;ID;HANGUL CHOSEONG SIOS-KHIEUKH
-1139;ID;HANGUL CHOSEONG SIOS-THIEUTH
-113A;ID;HANGUL CHOSEONG SIOS-PHIEUPH
-113B;ID;HANGUL CHOSEONG SIOS-HIEUH
-113C;ID;HANGUL CHOSEONG CHITUEUMSIOS
-113D;ID;HANGUL CHOSEONG CHITUEUMSSANGSIOS
-113E;ID;HANGUL CHOSEONG CEONGCHIEUMSIOS
-113F;ID;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
-1140;ID;HANGUL CHOSEONG PANSIOS
-1141;ID;HANGUL CHOSEONG IEUNG-KIYEOK
-1142;ID;HANGUL CHOSEONG IEUNG-TIKEUT
-1143;ID;HANGUL CHOSEONG IEUNG-MIEUM
-1144;ID;HANGUL CHOSEONG IEUNG-PIEUP
-1145;ID;HANGUL CHOSEONG IEUNG-SIOS
-1146;ID;HANGUL CHOSEONG IEUNG-PANSIOS
-1147;ID;HANGUL CHOSEONG SSANGIEUNG
-1148;ID;HANGUL CHOSEONG IEUNG-CIEUC
-1149;ID;HANGUL CHOSEONG IEUNG-CHIEUCH
-114A;ID;HANGUL CHOSEONG IEUNG-THIEUTH
-114B;ID;HANGUL CHOSEONG IEUNG-PHIEUPH
-114C;ID;HANGUL CHOSEONG YESIEUNG
-114D;ID;HANGUL CHOSEONG CIEUC-IEUNG
-114E;ID;HANGUL CHOSEONG CHITUEUMCIEUC
-114F;ID;HANGUL CHOSEONG CHITUEUMSSANGCIEUC
-1150;ID;HANGUL CHOSEONG CEONGCHIEUMCIEUC
-1151;ID;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
-1152;ID;HANGUL CHOSEONG CHIEUCH-KHIEUKH
-1153;ID;HANGUL CHOSEONG CHIEUCH-HIEUH
-1154;ID;HANGUL CHOSEONG CHITUEUMCHIEUCH
-1155;ID;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
-1156;ID;HANGUL CHOSEONG PHIEUPH-PIEUP
-1157;ID;HANGUL CHOSEONG KAPYEOUNPHIEUPH
-1158;ID;HANGUL CHOSEONG SSANGHIEUH
-1159;ID;HANGUL CHOSEONG YEORINHIEUH
-115F;ID;HANGUL CHOSEONG FILLER
-1160;CM;HANGUL JUNGSEONG FILLER
-1161;CM;HANGUL JUNGSEONG A
-1162;CM;HANGUL JUNGSEONG AE
-1163;CM;HANGUL JUNGSEONG YA
-1164;CM;HANGUL JUNGSEONG YAE
-1165;CM;HANGUL JUNGSEONG EO
-1166;CM;HANGUL JUNGSEONG E
-1167;CM;HANGUL JUNGSEONG YEO
-1168;CM;HANGUL JUNGSEONG YE
-1169;CM;HANGUL JUNGSEONG O
-116A;CM;HANGUL JUNGSEONG WA
-116B;CM;HANGUL JUNGSEONG WAE
-116C;CM;HANGUL JUNGSEONG OE
-116D;CM;HANGUL JUNGSEONG YO
-116E;CM;HANGUL JUNGSEONG U
-116F;CM;HANGUL JUNGSEONG WEO
-1170;CM;HANGUL JUNGSEONG WE
-1171;CM;HANGUL JUNGSEONG WI
-1172;CM;HANGUL JUNGSEONG YU
-1173;CM;HANGUL JUNGSEONG EU
-1174;CM;HANGUL JUNGSEONG YI
-1175;CM;HANGUL JUNGSEONG I
-1176;CM;HANGUL JUNGSEONG A-O
-1177;CM;HANGUL JUNGSEONG A-U
-1178;CM;HANGUL JUNGSEONG YA-O
-1179;CM;HANGUL JUNGSEONG YA-YO
-117A;CM;HANGUL JUNGSEONG EO-O
-117B;CM;HANGUL JUNGSEONG EO-U
-117C;CM;HANGUL JUNGSEONG EO-EU
-117D;CM;HANGUL JUNGSEONG YEO-O
-117E;CM;HANGUL JUNGSEONG YEO-U
-117F;CM;HANGUL JUNGSEONG O-EO
-1180;CM;HANGUL JUNGSEONG O-E
-1181;CM;HANGUL JUNGSEONG O-YE
-1182;CM;HANGUL JUNGSEONG O-O
-1183;CM;HANGUL JUNGSEONG O-U
-1184;CM;HANGUL JUNGSEONG YO-YA
-1185;CM;HANGUL JUNGSEONG YO-YAE
-1186;CM;HANGUL JUNGSEONG YO-YEO
-1187;CM;HANGUL JUNGSEONG YO-O
-1188;CM;HANGUL JUNGSEONG YO-I
-1189;CM;HANGUL JUNGSEONG U-A
-118A;CM;HANGUL JUNGSEONG U-AE
-118B;CM;HANGUL JUNGSEONG U-EO-EU
-118C;CM;HANGUL JUNGSEONG U-YE
-118D;CM;HANGUL JUNGSEONG U-U
-118E;CM;HANGUL JUNGSEONG YU-A
-118F;CM;HANGUL JUNGSEONG YU-EO
-1190;CM;HANGUL JUNGSEONG YU-E
-1191;CM;HANGUL JUNGSEONG YU-YEO
-1192;CM;HANGUL JUNGSEONG YU-YE
-1193;CM;HANGUL JUNGSEONG YU-U
-1194;CM;HANGUL JUNGSEONG YU-I
-1195;CM;HANGUL JUNGSEONG EU-U
-1196;CM;HANGUL JUNGSEONG EU-EU
-1197;CM;HANGUL JUNGSEONG YI-U
-1198;CM;HANGUL JUNGSEONG I-A
-1199;CM;HANGUL JUNGSEONG I-YA
-119A;CM;HANGUL JUNGSEONG I-O
-119B;CM;HANGUL JUNGSEONG I-U
-119C;CM;HANGUL JUNGSEONG I-EU
-119D;CM;HANGUL JUNGSEONG I-ARAEA
-119E;CM;HANGUL JUNGSEONG ARAEA
-119F;CM;HANGUL JUNGSEONG ARAEA-EO
-11A0;CM;HANGUL JUNGSEONG ARAEA-U
-11A1;CM;HANGUL JUNGSEONG ARAEA-I
-11A2;CM;HANGUL JUNGSEONG SSANGARAEA
-11A8;CM;HANGUL JONGSEONG KIYEOK
-11A9;CM;HANGUL JONGSEONG SSANGKIYEOK
-11AA;CM;HANGUL JONGSEONG KIYEOK-SIOS
-11AB;CM;HANGUL JONGSEONG NIEUN
-11AC;CM;HANGUL JONGSEONG NIEUN-CIEUC
-11AD;CM;HANGUL JONGSEONG NIEUN-HIEUH
-11AE;CM;HANGUL JONGSEONG TIKEUT
-11AF;CM;HANGUL JONGSEONG RIEUL
-11B0;CM;HANGUL JONGSEONG RIEUL-KIYEOK
-11B1;CM;HANGUL JONGSEONG RIEUL-MIEUM
-11B2;CM;HANGUL JONGSEONG RIEUL-PIEUP
-11B3;CM;HANGUL JONGSEONG RIEUL-SIOS
-11B4;CM;HANGUL JONGSEONG RIEUL-THIEUTH
-11B5;CM;HANGUL JONGSEONG RIEUL-PHIEUPH
-11B6;CM;HANGUL JONGSEONG RIEUL-HIEUH
-11B7;CM;HANGUL JONGSEONG MIEUM
-11B8;CM;HANGUL JONGSEONG PIEUP
-11B9;CM;HANGUL JONGSEONG PIEUP-SIOS
-11BA;CM;HANGUL JONGSEONG SIOS
-11BB;CM;HANGUL JONGSEONG SSANGSIOS
-11BC;CM;HANGUL JONGSEONG IEUNG
-11BD;CM;HANGUL JONGSEONG CIEUC
-11BE;CM;HANGUL JONGSEONG CHIEUCH
-11BF;CM;HANGUL JONGSEONG KHIEUKH
-11C0;CM;HANGUL JONGSEONG THIEUTH
-11C1;CM;HANGUL JONGSEONG PHIEUPH
-11C2;CM;HANGUL JONGSEONG HIEUH
-11C3;CM;HANGUL JONGSEONG KIYEOK-RIEUL
-11C4;CM;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
-11C5;CM;HANGUL JONGSEONG NIEUN-KIYEOK
-11C6;CM;HANGUL JONGSEONG NIEUN-TIKEUT
-11C7;CM;HANGUL JONGSEONG NIEUN-SIOS
-11C8;CM;HANGUL JONGSEONG NIEUN-PANSIOS
-11C9;CM;HANGUL JONGSEONG NIEUN-THIEUTH
-11CA;CM;HANGUL JONGSEONG TIKEUT-KIYEOK
-11CB;CM;HANGUL JONGSEONG TIKEUT-RIEUL
-11CC;CM;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
-11CD;CM;HANGUL JONGSEONG RIEUL-NIEUN
-11CE;CM;HANGUL JONGSEONG RIEUL-TIKEUT
-11CF;CM;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
-11D0;CM;HANGUL JONGSEONG SSANGRIEUL
-11D1;CM;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
-11D2;CM;HANGUL JONGSEONG RIEUL-MIEUM-SIOS
-11D3;CM;HANGUL JONGSEONG RIEUL-PIEUP-SIOS
-11D4;CM;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
-11D5;CM;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
-11D6;CM;HANGUL JONGSEONG RIEUL-SSANGSIOS
-11D7;CM;HANGUL JONGSEONG RIEUL-PANSIOS
-11D8;CM;HANGUL JONGSEONG RIEUL-KHIEUKH
-11D9;CM;HANGUL JONGSEONG RIEUL-YEORINHIEUH
-11DA;CM;HANGUL JONGSEONG MIEUM-KIYEOK
-11DB;CM;HANGUL JONGSEONG MIEUM-RIEUL
-11DC;CM;HANGUL JONGSEONG MIEUM-PIEUP
-11DD;CM;HANGUL JONGSEONG MIEUM-SIOS
-11DE;CM;HANGUL JONGSEONG MIEUM-SSANGSIOS
-11DF;CM;HANGUL JONGSEONG MIEUM-PANSIOS
-11E0;CM;HANGUL JONGSEONG MIEUM-CHIEUCH
-11E1;CM;HANGUL JONGSEONG MIEUM-HIEUH
-11E2;CM;HANGUL JONGSEONG KAPYEOUNMIEUM
-11E3;CM;HANGUL JONGSEONG PIEUP-RIEUL
-11E4;CM;HANGUL JONGSEONG PIEUP-PHIEUPH
-11E5;CM;HANGUL JONGSEONG PIEUP-HIEUH
-11E6;CM;HANGUL JONGSEONG KAPYEOUNPIEUP
-11E7;CM;HANGUL JONGSEONG SIOS-KIYEOK
-11E8;CM;HANGUL JONGSEONG SIOS-TIKEUT
-11E9;CM;HANGUL JONGSEONG SIOS-RIEUL
-11EA;CM;HANGUL JONGSEONG SIOS-PIEUP
-11EB;CM;HANGUL JONGSEONG PANSIOS
-11EC;CM;HANGUL JONGSEONG IEUNG-KIYEOK
-11ED;CM;HANGUL JONGSEONG IEUNG-SSANGKIYEOK
-11EE;CM;HANGUL JONGSEONG SSANGIEUNG
-11EF;CM;HANGUL JONGSEONG IEUNG-KHIEUKH
-11F0;CM;HANGUL JONGSEONG YESIEUNG
-11F1;CM;HANGUL JONGSEONG YESIEUNG-SIOS
-11F2;CM;HANGUL JONGSEONG YESIEUNG-PANSIOS
-11F3;CM;HANGUL JONGSEONG PHIEUPH-PIEUP
-11F4;CM;HANGUL JONGSEONG KAPYEOUNPHIEUPH
-11F5;CM;HANGUL JONGSEONG HIEUH-NIEUN
-11F6;CM;HANGUL JONGSEONG HIEUH-RIEUL
-11F7;CM;HANGUL JONGSEONG HIEUH-MIEUM
-11F8;CM;HANGUL JONGSEONG HIEUH-PIEUP
-11F9;CM;HANGUL JONGSEONG YEORINHIEUH
-1200;AL;ETHIOPIC SYLLABLE HA
-1201;AL;ETHIOPIC SYLLABLE HU
-1202;AL;ETHIOPIC SYLLABLE HI
-1203;AL;ETHIOPIC SYLLABLE HAA
-1204;AL;ETHIOPIC SYLLABLE HEE
-1205;AL;ETHIOPIC SYLLABLE HE
-1206;AL;ETHIOPIC SYLLABLE HO
-1208;AL;ETHIOPIC SYLLABLE LA
-1209;AL;ETHIOPIC SYLLABLE LU
-120A;AL;ETHIOPIC SYLLABLE LI
-120B;AL;ETHIOPIC SYLLABLE LAA
-120C;AL;ETHIOPIC SYLLABLE LEE
-120D;AL;ETHIOPIC SYLLABLE LE
-120E;AL;ETHIOPIC SYLLABLE LO
-120F;AL;ETHIOPIC SYLLABLE LWA
-1210;AL;ETHIOPIC SYLLABLE HHA
-1211;AL;ETHIOPIC SYLLABLE HHU
-1212;AL;ETHIOPIC SYLLABLE HHI
-1213;AL;ETHIOPIC SYLLABLE HHAA
-1214;AL;ETHIOPIC SYLLABLE HHEE
-1215;AL;ETHIOPIC SYLLABLE HHE
-1216;AL;ETHIOPIC SYLLABLE HHO
-1217;AL;ETHIOPIC SYLLABLE HHWA
-1218;AL;ETHIOPIC SYLLABLE MA
-1219;AL;ETHIOPIC SYLLABLE MU
-121A;AL;ETHIOPIC SYLLABLE MI
-121B;AL;ETHIOPIC SYLLABLE MAA
-121C;AL;ETHIOPIC SYLLABLE MEE
-121D;AL;ETHIOPIC SYLLABLE ME
-121E;AL;ETHIOPIC SYLLABLE MO
-121F;AL;ETHIOPIC SYLLABLE MWA
-1220;AL;ETHIOPIC SYLLABLE SZA
-1221;AL;ETHIOPIC SYLLABLE SZU
-1222;AL;ETHIOPIC SYLLABLE SZI
-1223;AL;ETHIOPIC SYLLABLE SZAA
-1224;AL;ETHIOPIC SYLLABLE SZEE
-1225;AL;ETHIOPIC SYLLABLE SZE
-1226;AL;ETHIOPIC SYLLABLE SZO
-1227;AL;ETHIOPIC SYLLABLE SZWA
-1228;AL;ETHIOPIC SYLLABLE RA
-1229;AL;ETHIOPIC SYLLABLE RU
-122A;AL;ETHIOPIC SYLLABLE RI
-122B;AL;ETHIOPIC SYLLABLE RAA
-122C;AL;ETHIOPIC SYLLABLE REE
-122D;AL;ETHIOPIC SYLLABLE RE
-122E;AL;ETHIOPIC SYLLABLE RO
-122F;AL;ETHIOPIC SYLLABLE RWA
-1230;AL;ETHIOPIC SYLLABLE SA
-1231;AL;ETHIOPIC SYLLABLE SU
-1232;AL;ETHIOPIC SYLLABLE SI
-1233;AL;ETHIOPIC SYLLABLE SAA
-1234;AL;ETHIOPIC SYLLABLE SEE
-1235;AL;ETHIOPIC SYLLABLE SE
-1236;AL;ETHIOPIC SYLLABLE SO
-1237;AL;ETHIOPIC SYLLABLE SWA
-1238;AL;ETHIOPIC SYLLABLE SHA
-1239;AL;ETHIOPIC SYLLABLE SHU
-123A;AL;ETHIOPIC SYLLABLE SHI
-123B;AL;ETHIOPIC SYLLABLE SHAA
-123C;AL;ETHIOPIC SYLLABLE SHEE
-123D;AL;ETHIOPIC SYLLABLE SHE
-123E;AL;ETHIOPIC SYLLABLE SHO
-123F;AL;ETHIOPIC SYLLABLE SHWA
-1240;AL;ETHIOPIC SYLLABLE QA
-1241;AL;ETHIOPIC SYLLABLE QU
-1242;AL;ETHIOPIC SYLLABLE QI
-1243;AL;ETHIOPIC SYLLABLE QAA
-1244;AL;ETHIOPIC SYLLABLE QEE
-1245;AL;ETHIOPIC SYLLABLE QE
-1246;AL;ETHIOPIC SYLLABLE QO
-1248;AL;ETHIOPIC SYLLABLE QWA
-124A;AL;ETHIOPIC SYLLABLE QWI
-124B;AL;ETHIOPIC SYLLABLE QWAA
-124C;AL;ETHIOPIC SYLLABLE QWEE
-124D;AL;ETHIOPIC SYLLABLE QWE
-1250;AL;ETHIOPIC SYLLABLE QHA
-1251;AL;ETHIOPIC SYLLABLE QHU
-1252;AL;ETHIOPIC SYLLABLE QHI
-1253;AL;ETHIOPIC SYLLABLE QHAA
-1254;AL;ETHIOPIC SYLLABLE QHEE
-1255;AL;ETHIOPIC SYLLABLE QHE
-1256;AL;ETHIOPIC SYLLABLE QHO
-1258;AL;ETHIOPIC SYLLABLE QHWA
-125A;AL;ETHIOPIC SYLLABLE QHWI
-125B;AL;ETHIOPIC SYLLABLE QHWAA
-125C;AL;ETHIOPIC SYLLABLE QHWEE
-125D;AL;ETHIOPIC SYLLABLE QHWE
-1260;AL;ETHIOPIC SYLLABLE BA
-1261;AL;ETHIOPIC SYLLABLE BU
-1262;AL;ETHIOPIC SYLLABLE BI
-1263;AL;ETHIOPIC SYLLABLE BAA
-1264;AL;ETHIOPIC SYLLABLE BEE
-1265;AL;ETHIOPIC SYLLABLE BE
-1266;AL;ETHIOPIC SYLLABLE BO
-1267;AL;ETHIOPIC SYLLABLE BWA
-1268;AL;ETHIOPIC SYLLABLE VA
-1269;AL;ETHIOPIC SYLLABLE VU
-126A;AL;ETHIOPIC SYLLABLE VI
-126B;AL;ETHIOPIC SYLLABLE VAA
-126C;AL;ETHIOPIC SYLLABLE VEE
-126D;AL;ETHIOPIC SYLLABLE VE
-126E;AL;ETHIOPIC SYLLABLE VO
-126F;AL;ETHIOPIC SYLLABLE VWA
-1270;AL;ETHIOPIC SYLLABLE TA
-1271;AL;ETHIOPIC SYLLABLE TU
-1272;AL;ETHIOPIC SYLLABLE TI
-1273;AL;ETHIOPIC SYLLABLE TAA
-1274;AL;ETHIOPIC SYLLABLE TEE
-1275;AL;ETHIOPIC SYLLABLE TE
-1276;AL;ETHIOPIC SYLLABLE TO
-1277;AL;ETHIOPIC SYLLABLE TWA
-1278;AL;ETHIOPIC SYLLABLE CA
-1279;AL;ETHIOPIC SYLLABLE CU
-127A;AL;ETHIOPIC SYLLABLE CI
-127B;AL;ETHIOPIC SYLLABLE CAA
-127C;AL;ETHIOPIC SYLLABLE CEE
-127D;AL;ETHIOPIC SYLLABLE CE
-127E;AL;ETHIOPIC SYLLABLE CO
-127F;AL;ETHIOPIC SYLLABLE CWA
-1280;AL;ETHIOPIC SYLLABLE XA
-1281;AL;ETHIOPIC SYLLABLE XU
-1282;AL;ETHIOPIC SYLLABLE XI
-1283;AL;ETHIOPIC SYLLABLE XAA
-1284;AL;ETHIOPIC SYLLABLE XEE
-1285;AL;ETHIOPIC SYLLABLE XE
-1286;AL;ETHIOPIC SYLLABLE XO
-1288;AL;ETHIOPIC SYLLABLE XWA
-128A;AL;ETHIOPIC SYLLABLE XWI
-128B;AL;ETHIOPIC SYLLABLE XWAA
-128C;AL;ETHIOPIC SYLLABLE XWEE
-128D;AL;ETHIOPIC SYLLABLE XWE
-1290;AL;ETHIOPIC SYLLABLE NA
-1291;AL;ETHIOPIC SYLLABLE NU
-1292;AL;ETHIOPIC SYLLABLE NI
-1293;AL;ETHIOPIC SYLLABLE NAA
-1294;AL;ETHIOPIC SYLLABLE NEE
-1295;AL;ETHIOPIC SYLLABLE NE
-1296;AL;ETHIOPIC SYLLABLE NO
-1297;AL;ETHIOPIC SYLLABLE NWA
-1298;AL;ETHIOPIC SYLLABLE NYA
-1299;AL;ETHIOPIC SYLLABLE NYU
-129A;AL;ETHIOPIC SYLLABLE NYI
-129B;AL;ETHIOPIC SYLLABLE NYAA
-129C;AL;ETHIOPIC SYLLABLE NYEE
-129D;AL;ETHIOPIC SYLLABLE NYE
-129E;AL;ETHIOPIC SYLLABLE NYO
-129F;AL;ETHIOPIC SYLLABLE NYWA
-12A0;AL;ETHIOPIC SYLLABLE GLOTTAL A
-12A1;AL;ETHIOPIC SYLLABLE GLOTTAL U
-12A2;AL;ETHIOPIC SYLLABLE GLOTTAL I
-12A3;AL;ETHIOPIC SYLLABLE GLOTTAL AA
-12A4;AL;ETHIOPIC SYLLABLE GLOTTAL EE
-12A5;AL;ETHIOPIC SYLLABLE GLOTTAL E
-12A6;AL;ETHIOPIC SYLLABLE GLOTTAL O
-12A7;AL;ETHIOPIC SYLLABLE GLOTTAL WA
-12A8;AL;ETHIOPIC SYLLABLE KA
-12A9;AL;ETHIOPIC SYLLABLE KU
-12AA;AL;ETHIOPIC SYLLABLE KI
-12AB;AL;ETHIOPIC SYLLABLE KAA
-12AC;AL;ETHIOPIC SYLLABLE KEE
-12AD;AL;ETHIOPIC SYLLABLE KE
-12AE;AL;ETHIOPIC SYLLABLE KO
-12B0;AL;ETHIOPIC SYLLABLE KWA
-12B2;AL;ETHIOPIC SYLLABLE KWI
-12B3;AL;ETHIOPIC SYLLABLE KWAA
-12B4;AL;ETHIOPIC SYLLABLE KWEE
-12B5;AL;ETHIOPIC SYLLABLE KWE
-12B8;AL;ETHIOPIC SYLLABLE KXA
-12B9;AL;ETHIOPIC SYLLABLE KXU
-12BA;AL;ETHIOPIC SYLLABLE KXI
-12BB;AL;ETHIOPIC SYLLABLE KXAA
-12BC;AL;ETHIOPIC SYLLABLE KXEE
-12BD;AL;ETHIOPIC SYLLABLE KXE
-12BE;AL;ETHIOPIC SYLLABLE KXO
-12C0;AL;ETHIOPIC SYLLABLE KXWA
-12C2;AL;ETHIOPIC SYLLABLE KXWI
-12C3;AL;ETHIOPIC SYLLABLE KXWAA
-12C4;AL;ETHIOPIC SYLLABLE KXWEE
-12C5;AL;ETHIOPIC SYLLABLE KXWE
-12C8;AL;ETHIOPIC SYLLABLE WA
-12C9;AL;ETHIOPIC SYLLABLE WU
-12CA;AL;ETHIOPIC SYLLABLE WI
-12CB;AL;ETHIOPIC SYLLABLE WAA
-12CC;AL;ETHIOPIC SYLLABLE WEE
-12CD;AL;ETHIOPIC SYLLABLE WE
-12CE;AL;ETHIOPIC SYLLABLE WO
-12D0;AL;ETHIOPIC SYLLABLE PHARYNGEAL A
-12D1;AL;ETHIOPIC SYLLABLE PHARYNGEAL U
-12D2;AL;ETHIOPIC SYLLABLE PHARYNGEAL I
-12D3;AL;ETHIOPIC SYLLABLE PHARYNGEAL AA
-12D4;AL;ETHIOPIC SYLLABLE PHARYNGEAL EE
-12D5;AL;ETHIOPIC SYLLABLE PHARYNGEAL E
-12D6;AL;ETHIOPIC SYLLABLE PHARYNGEAL O
-12D8;AL;ETHIOPIC SYLLABLE ZA
-12D9;AL;ETHIOPIC SYLLABLE ZU
-12DA;AL;ETHIOPIC SYLLABLE ZI
-12DB;AL;ETHIOPIC SYLLABLE ZAA
-12DC;AL;ETHIOPIC SYLLABLE ZEE
-12DD;AL;ETHIOPIC SYLLABLE ZE
-12DE;AL;ETHIOPIC SYLLABLE ZO
-12DF;AL;ETHIOPIC SYLLABLE ZWA
-12E0;AL;ETHIOPIC SYLLABLE ZHA
-12E1;AL;ETHIOPIC SYLLABLE ZHU
-12E2;AL;ETHIOPIC SYLLABLE ZHI
-12E3;AL;ETHIOPIC SYLLABLE ZHAA
-12E4;AL;ETHIOPIC SYLLABLE ZHEE
-12E5;AL;ETHIOPIC SYLLABLE ZHE
-12E6;AL;ETHIOPIC SYLLABLE ZHO
-12E7;AL;ETHIOPIC SYLLABLE ZHWA
-12E8;AL;ETHIOPIC SYLLABLE YA
-12E9;AL;ETHIOPIC SYLLABLE YU
-12EA;AL;ETHIOPIC SYLLABLE YI
-12EB;AL;ETHIOPIC SYLLABLE YAA
-12EC;AL;ETHIOPIC SYLLABLE YEE
-12ED;AL;ETHIOPIC SYLLABLE YE
-12EE;AL;ETHIOPIC SYLLABLE YO
-12F0;AL;ETHIOPIC SYLLABLE DA
-12F1;AL;ETHIOPIC SYLLABLE DU
-12F2;AL;ETHIOPIC SYLLABLE DI
-12F3;AL;ETHIOPIC SYLLABLE DAA
-12F4;AL;ETHIOPIC SYLLABLE DEE
-12F5;AL;ETHIOPIC SYLLABLE DE
-12F6;AL;ETHIOPIC SYLLABLE DO
-12F7;AL;ETHIOPIC SYLLABLE DWA
-12F8;AL;ETHIOPIC SYLLABLE DDA
-12F9;AL;ETHIOPIC SYLLABLE DDU
-12FA;AL;ETHIOPIC SYLLABLE DDI
-12FB;AL;ETHIOPIC SYLLABLE DDAA
-12FC;AL;ETHIOPIC SYLLABLE DDEE
-12FD;AL;ETHIOPIC SYLLABLE DDE
-12FE;AL;ETHIOPIC SYLLABLE DDO
-12FF;AL;ETHIOPIC SYLLABLE DDWA
-1300;AL;ETHIOPIC SYLLABLE JA
-1301;AL;ETHIOPIC SYLLABLE JU
-1302;AL;ETHIOPIC SYLLABLE JI
-1303;AL;ETHIOPIC SYLLABLE JAA
-1304;AL;ETHIOPIC SYLLABLE JEE
-1305;AL;ETHIOPIC SYLLABLE JE
-1306;AL;ETHIOPIC SYLLABLE JO
-1307;AL;ETHIOPIC SYLLABLE JWA
-1308;AL;ETHIOPIC SYLLABLE GA
-1309;AL;ETHIOPIC SYLLABLE GU
-130A;AL;ETHIOPIC SYLLABLE GI
-130B;AL;ETHIOPIC SYLLABLE GAA
-130C;AL;ETHIOPIC SYLLABLE GEE
-130D;AL;ETHIOPIC SYLLABLE GE
-130E;AL;ETHIOPIC SYLLABLE GO
-1310;AL;ETHIOPIC SYLLABLE GWA
-1312;AL;ETHIOPIC SYLLABLE GWI
-1313;AL;ETHIOPIC SYLLABLE GWAA
-1314;AL;ETHIOPIC SYLLABLE GWEE
-1315;AL;ETHIOPIC SYLLABLE GWE
-1318;AL;ETHIOPIC SYLLABLE GGA
-1319;AL;ETHIOPIC SYLLABLE GGU
-131A;AL;ETHIOPIC SYLLABLE GGI
-131B;AL;ETHIOPIC SYLLABLE GGAA
-131C;AL;ETHIOPIC SYLLABLE GGEE
-131D;AL;ETHIOPIC SYLLABLE GGE
-131E;AL;ETHIOPIC SYLLABLE GGO
-1320;AL;ETHIOPIC SYLLABLE THA
-1321;AL;ETHIOPIC SYLLABLE THU
-1322;AL;ETHIOPIC SYLLABLE THI
-1323;AL;ETHIOPIC SYLLABLE THAA
-1324;AL;ETHIOPIC SYLLABLE THEE
-1325;AL;ETHIOPIC SYLLABLE THE
-1326;AL;ETHIOPIC SYLLABLE THO
-1327;AL;ETHIOPIC SYLLABLE THWA
-1328;AL;ETHIOPIC SYLLABLE CHA
-1329;AL;ETHIOPIC SYLLABLE CHU
-132A;AL;ETHIOPIC SYLLABLE CHI
-132B;AL;ETHIOPIC SYLLABLE CHAA
-132C;AL;ETHIOPIC SYLLABLE CHEE
-132D;AL;ETHIOPIC SYLLABLE CHE
-132E;AL;ETHIOPIC SYLLABLE CHO
-132F;AL;ETHIOPIC SYLLABLE CHWA
-1330;AL;ETHIOPIC SYLLABLE PHA
-1331;AL;ETHIOPIC SYLLABLE PHU
-1332;AL;ETHIOPIC SYLLABLE PHI
-1333;AL;ETHIOPIC SYLLABLE PHAA
-1334;AL;ETHIOPIC SYLLABLE PHEE
-1335;AL;ETHIOPIC SYLLABLE PHE
-1336;AL;ETHIOPIC SYLLABLE PHO
-1337;AL;ETHIOPIC SYLLABLE PHWA
-1338;AL;ETHIOPIC SYLLABLE TSA
-1339;AL;ETHIOPIC SYLLABLE TSU
-133A;AL;ETHIOPIC SYLLABLE TSI
-133B;AL;ETHIOPIC SYLLABLE TSAA
-133C;AL;ETHIOPIC SYLLABLE TSEE
-133D;AL;ETHIOPIC SYLLABLE TSE
-133E;AL;ETHIOPIC SYLLABLE TSO
-133F;AL;ETHIOPIC SYLLABLE TSWA
-1340;AL;ETHIOPIC SYLLABLE TZA
-1341;AL;ETHIOPIC SYLLABLE TZU
-1342;AL;ETHIOPIC SYLLABLE TZI
-1343;AL;ETHIOPIC SYLLABLE TZAA
-1344;AL;ETHIOPIC SYLLABLE TZEE
-1345;AL;ETHIOPIC SYLLABLE TZE
-1346;AL;ETHIOPIC SYLLABLE TZO
-1348;AL;ETHIOPIC SYLLABLE FA
-1349;AL;ETHIOPIC SYLLABLE FU
-134A;AL;ETHIOPIC SYLLABLE FI
-134B;AL;ETHIOPIC SYLLABLE FAA
-134C;AL;ETHIOPIC SYLLABLE FEE
-134D;AL;ETHIOPIC SYLLABLE FE
-134E;AL;ETHIOPIC SYLLABLE FO
-134F;AL;ETHIOPIC SYLLABLE FWA
-1350;AL;ETHIOPIC SYLLABLE PA
-1351;AL;ETHIOPIC SYLLABLE PU
-1352;AL;ETHIOPIC SYLLABLE PI
-1353;AL;ETHIOPIC SYLLABLE PAA
-1354;AL;ETHIOPIC SYLLABLE PEE
-1355;AL;ETHIOPIC SYLLABLE PE
-1356;AL;ETHIOPIC SYLLABLE PO
-1357;AL;ETHIOPIC SYLLABLE PWA
-1358;AL;ETHIOPIC SYLLABLE RYA
-1359;AL;ETHIOPIC SYLLABLE MYA
-135A;AL;ETHIOPIC SYLLABLE FYA
-1361;BA;ETHIOPIC WORDSPACE
-1362;AL;ETHIOPIC FULL STOP
-1363;AL;ETHIOPIC COMMA
-1364;AL;ETHIOPIC SEMICOLON
-1365;AL;ETHIOPIC COLON
-1366;AL;ETHIOPIC PREFACE COLON
-1367;AL;ETHIOPIC QUESTION MARK
-1368;AL;ETHIOPIC PARAGRAPH SEPARATOR
-1369;NU;ETHIOPIC DIGIT ONE
-136A;NU;ETHIOPIC DIGIT TWO
-136B;NU;ETHIOPIC DIGIT THREE
-136C;NU;ETHIOPIC DIGIT FOUR
-136D;NU;ETHIOPIC DIGIT FIVE
-136E;NU;ETHIOPIC DIGIT SIX
-136F;NU;ETHIOPIC DIGIT SEVEN
-1370;NU;ETHIOPIC DIGIT EIGHT
-1371;NU;ETHIOPIC DIGIT NINE
-1372;AL;ETHIOPIC NUMBER TEN
-1373;AL;ETHIOPIC NUMBER TWENTY
-1374;AL;ETHIOPIC NUMBER THIRTY
-1375;AL;ETHIOPIC NUMBER FORTY
-1376;AL;ETHIOPIC NUMBER FIFTY
-1377;AL;ETHIOPIC NUMBER SIXTY
-1378;AL;ETHIOPIC NUMBER SEVENTY
-1379;AL;ETHIOPIC NUMBER EIGHTY
-137A;AL;ETHIOPIC NUMBER NINETY
-137B;AL;ETHIOPIC NUMBER HUNDRED
-137C;AL;ETHIOPIC NUMBER TEN THOUSAND
-13A0;AL;CHEROKEE LETTER A
-13A1;AL;CHEROKEE LETTER E
-13A2;AL;CHEROKEE LETTER I
-13A3;AL;CHEROKEE LETTER O
-13A4;AL;CHEROKEE LETTER U
-13A5;AL;CHEROKEE LETTER V
-13A6;AL;CHEROKEE LETTER GA
-13A7;AL;CHEROKEE LETTER KA
-13A8;AL;CHEROKEE LETTER GE
-13A9;AL;CHEROKEE LETTER GI
-13AA;AL;CHEROKEE LETTER GO
-13AB;AL;CHEROKEE LETTER GU
-13AC;AL;CHEROKEE LETTER GV
-13AD;AL;CHEROKEE LETTER HA
-13AE;AL;CHEROKEE LETTER HE
-13AF;AL;CHEROKEE LETTER HI
-13B0;AL;CHEROKEE LETTER HO
-13B1;AL;CHEROKEE LETTER HU
-13B2;AL;CHEROKEE LETTER HV
-13B3;AL;CHEROKEE LETTER LA
-13B4;AL;CHEROKEE LETTER LE
-13B5;AL;CHEROKEE LETTER LI
-13B6;AL;CHEROKEE LETTER LO
-13B7;AL;CHEROKEE LETTER LU
-13B8;AL;CHEROKEE LETTER LV
-13B9;AL;CHEROKEE LETTER MA
-13BA;AL;CHEROKEE LETTER ME
-13BB;AL;CHEROKEE LETTER MI
-13BC;AL;CHEROKEE LETTER MO
-13BD;AL;CHEROKEE LETTER MU
-13BE;AL;CHEROKEE LETTER NA
-13BF;AL;CHEROKEE LETTER HNA
-13C0;AL;CHEROKEE LETTER NAH
-13C1;AL;CHEROKEE LETTER NE
-13C2;AL;CHEROKEE LETTER NI
-13C3;AL;CHEROKEE LETTER NO
-13C4;AL;CHEROKEE LETTER NU
-13C5;AL;CHEROKEE LETTER NV
-13C6;AL;CHEROKEE LETTER QUA
-13C7;AL;CHEROKEE LETTER QUE
-13C8;AL;CHEROKEE LETTER QUI
-13C9;AL;CHEROKEE LETTER QUO
-13CA;AL;CHEROKEE LETTER QUU
-13CB;AL;CHEROKEE LETTER QUV
-13CC;AL;CHEROKEE LETTER SA
-13CD;AL;CHEROKEE LETTER S
-13CE;AL;CHEROKEE LETTER SE
-13CF;AL;CHEROKEE LETTER SI
-13D0;AL;CHEROKEE LETTER SO
-13D1;AL;CHEROKEE LETTER SU
-13D2;AL;CHEROKEE LETTER SV
-13D3;AL;CHEROKEE LETTER DA
-13D4;AL;CHEROKEE LETTER TA
-13D5;AL;CHEROKEE LETTER DE
-13D6;AL;CHEROKEE LETTER TE
-13D7;AL;CHEROKEE LETTER DI
-13D8;AL;CHEROKEE LETTER TI
-13D9;AL;CHEROKEE LETTER DO
-13DA;AL;CHEROKEE LETTER DU
-13DB;AL;CHEROKEE LETTER DV
-13DC;AL;CHEROKEE LETTER DLA
-13DD;AL;CHEROKEE LETTER TLA
-13DE;AL;CHEROKEE LETTER TLE
-13DF;AL;CHEROKEE LETTER TLI
-13E0;AL;CHEROKEE LETTER TLO
-13E1;AL;CHEROKEE LETTER TLU
-13E2;AL;CHEROKEE LETTER TLV
-13E3;AL;CHEROKEE LETTER TSA
-13E4;AL;CHEROKEE LETTER TSE
-13E5;AL;CHEROKEE LETTER TSI
-13E6;AL;CHEROKEE LETTER TSO
-13E7;AL;CHEROKEE LETTER TSU
-13E8;AL;CHEROKEE LETTER TSV
-13E9;AL;CHEROKEE LETTER WA
-13EA;AL;CHEROKEE LETTER WE
-13EB;AL;CHEROKEE LETTER WI
-13EC;AL;CHEROKEE LETTER WO
-13ED;AL;CHEROKEE LETTER WU
-13EE;AL;CHEROKEE LETTER WV
-13EF;AL;CHEROKEE LETTER YA
-13F0;AL;CHEROKEE LETTER YE
-13F1;AL;CHEROKEE LETTER YI
-13F2;AL;CHEROKEE LETTER YO
-13F3;AL;CHEROKEE LETTER YU
-13F4;AL;CHEROKEE LETTER YV
-1401;AL;CANADIAN SYLLABICS E
-1402;AL;CANADIAN SYLLABICS AAI
-1403;AL;CANADIAN SYLLABICS I
-1404;AL;CANADIAN SYLLABICS II
-1405;AL;CANADIAN SYLLABICS O
-1406;AL;CANADIAN SYLLABICS OO
-1407;AL;CANADIAN SYLLABICS Y-CREE OO
-1408;AL;CANADIAN SYLLABICS CARRIER EE
-1409;AL;CANADIAN SYLLABICS CARRIER I
-140A;AL;CANADIAN SYLLABICS A
-140B;AL;CANADIAN SYLLABICS AA
-140C;AL;CANADIAN SYLLABICS WE
-140D;AL;CANADIAN SYLLABICS WEST-CREE WE
-140E;AL;CANADIAN SYLLABICS WI
-140F;AL;CANADIAN SYLLABICS WEST-CREE WI
-1410;AL;CANADIAN SYLLABICS WII
-1411;AL;CANADIAN SYLLABICS WEST-CREE WII
-1412;AL;CANADIAN SYLLABICS WO
-1413;AL;CANADIAN SYLLABICS WEST-CREE WO
-1414;AL;CANADIAN SYLLABICS WOO
-1415;AL;CANADIAN SYLLABICS WEST-CREE WOO
-1416;AL;CANADIAN SYLLABICS NASKAPI WOO
-1417;AL;CANADIAN SYLLABICS WA
-1418;AL;CANADIAN SYLLABICS WEST-CREE WA
-1419;AL;CANADIAN SYLLABICS WAA
-141A;AL;CANADIAN SYLLABICS WEST-CREE WAA
-141B;AL;CANADIAN SYLLABICS NASKAPI WAA
-141C;AL;CANADIAN SYLLABICS AI
-141D;AL;CANADIAN SYLLABICS Y-CREE W
-141E;AL;CANADIAN SYLLABICS GLOTTAL STOP
-141F;AL;CANADIAN SYLLABICS FINAL ACUTE
-1420;AL;CANADIAN SYLLABICS FINAL GRAVE
-1421;AL;CANADIAN SYLLABICS FINAL BOTTOM HALF RING
-1422;AL;CANADIAN SYLLABICS FINAL TOP HALF RING
-1423;AL;CANADIAN SYLLABICS FINAL RIGHT HALF RING
-1424;AL;CANADIAN SYLLABICS FINAL RING
-1425;AL;CANADIAN SYLLABICS FINAL DOUBLE ACUTE
-1426;AL;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
-1427;AL;CANADIAN SYLLABICS FINAL MIDDLE DOT
-1428;AL;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
-1429;AL;CANADIAN SYLLABICS FINAL PLUS
-142A;AL;CANADIAN SYLLABICS FINAL DOWN TACK
-142B;AL;CANADIAN SYLLABICS EN
-142C;AL;CANADIAN SYLLABICS IN
-142D;AL;CANADIAN SYLLABICS ON
-142E;AL;CANADIAN SYLLABICS AN
-142F;AL;CANADIAN SYLLABICS PE
-1430;AL;CANADIAN SYLLABICS PAAI
-1431;AL;CANADIAN SYLLABICS PI
-1432;AL;CANADIAN SYLLABICS PII
-1433;AL;CANADIAN SYLLABICS PO
-1434;AL;CANADIAN SYLLABICS POO
-1435;AL;CANADIAN SYLLABICS Y-CREE POO
-1436;AL;CANADIAN SYLLABICS CARRIER HEE
-1437;AL;CANADIAN SYLLABICS CARRIER HI
-1438;AL;CANADIAN SYLLABICS PA
-1439;AL;CANADIAN SYLLABICS PAA
-143A;AL;CANADIAN SYLLABICS PWE
-143B;AL;CANADIAN SYLLABICS WEST-CREE PWE
-143C;AL;CANADIAN SYLLABICS PWI
-143D;AL;CANADIAN SYLLABICS WEST-CREE PWI
-143E;AL;CANADIAN SYLLABICS PWII
-143F;AL;CANADIAN SYLLABICS WEST-CREE PWII
-1440;AL;CANADIAN SYLLABICS PWO
-1441;AL;CANADIAN SYLLABICS WEST-CREE PWO
-1442;AL;CANADIAN SYLLABICS PWOO
-1443;AL;CANADIAN SYLLABICS WEST-CREE PWOO
-1444;AL;CANADIAN SYLLABICS PWA
-1445;AL;CANADIAN SYLLABICS WEST-CREE PWA
-1446;AL;CANADIAN SYLLABICS PWAA
-1447;AL;CANADIAN SYLLABICS WEST-CREE PWAA
-1448;AL;CANADIAN SYLLABICS Y-CREE PWAA
-1449;AL;CANADIAN SYLLABICS P
-144A;AL;CANADIAN SYLLABICS WEST-CREE P
-144B;AL;CANADIAN SYLLABICS CARRIER H
-144C;AL;CANADIAN SYLLABICS TE
-144D;AL;CANADIAN SYLLABICS TAAI
-144E;AL;CANADIAN SYLLABICS TI
-144F;AL;CANADIAN SYLLABICS TII
-1450;AL;CANADIAN SYLLABICS TO
-1451;AL;CANADIAN SYLLABICS TOO
-1452;AL;CANADIAN SYLLABICS Y-CREE TOO
-1453;AL;CANADIAN SYLLABICS CARRIER DEE
-1454;AL;CANADIAN SYLLABICS CARRIER DI
-1455;AL;CANADIAN SYLLABICS TA
-1456;AL;CANADIAN SYLLABICS TAA
-1457;AL;CANADIAN SYLLABICS TWE
-1458;AL;CANADIAN SYLLABICS WEST-CREE TWE
-1459;AL;CANADIAN SYLLABICS TWI
-145A;AL;CANADIAN SYLLABICS WEST-CREE TWI
-145B;AL;CANADIAN SYLLABICS TWII
-145C;AL;CANADIAN SYLLABICS WEST-CREE TWII
-145D;AL;CANADIAN SYLLABICS TWO
-145E;AL;CANADIAN SYLLABICS WEST-CREE TWO
-145F;AL;CANADIAN SYLLABICS TWOO
-1460;AL;CANADIAN SYLLABICS WEST-CREE TWOO
-1461;AL;CANADIAN SYLLABICS TWA
-1462;AL;CANADIAN SYLLABICS WEST-CREE TWA
-1463;AL;CANADIAN SYLLABICS TWAA
-1464;AL;CANADIAN SYLLABICS WEST-CREE TWAA
-1465;AL;CANADIAN SYLLABICS NASKAPI TWAA
-1466;AL;CANADIAN SYLLABICS T
-1467;AL;CANADIAN SYLLABICS TTE
-1468;AL;CANADIAN SYLLABICS TTI
-1469;AL;CANADIAN SYLLABICS TTO
-146A;AL;CANADIAN SYLLABICS TTA
-146B;AL;CANADIAN SYLLABICS KE
-146C;AL;CANADIAN SYLLABICS KAAI
-146D;AL;CANADIAN SYLLABICS KI
-146E;AL;CANADIAN SYLLABICS KII
-146F;AL;CANADIAN SYLLABICS KO
-1470;AL;CANADIAN SYLLABICS KOO
-1471;AL;CANADIAN SYLLABICS Y-CREE KOO
-1472;AL;CANADIAN SYLLABICS KA
-1473;AL;CANADIAN SYLLABICS KAA
-1474;AL;CANADIAN SYLLABICS KWE
-1475;AL;CANADIAN SYLLABICS WEST-CREE KWE
-1476;AL;CANADIAN SYLLABICS KWI
-1477;AL;CANADIAN SYLLABICS WEST-CREE KWI
-1478;AL;CANADIAN SYLLABICS KWII
-1479;AL;CANADIAN SYLLABICS WEST-CREE KWII
-147A;AL;CANADIAN SYLLABICS KWO
-147B;AL;CANADIAN SYLLABICS WEST-CREE KWO
-147C;AL;CANADIAN SYLLABICS KWOO
-147D;AL;CANADIAN SYLLABICS WEST-CREE KWOO
-147E;AL;CANADIAN SYLLABICS KWA
-147F;AL;CANADIAN SYLLABICS WEST-CREE KWA
-1480;AL;CANADIAN SYLLABICS KWAA
-1481;AL;CANADIAN SYLLABICS WEST-CREE KWAA
-1482;AL;CANADIAN SYLLABICS NASKAPI KWAA
-1483;AL;CANADIAN SYLLABICS K
-1484;AL;CANADIAN SYLLABICS KW
-1485;AL;CANADIAN SYLLABICS SOUTH-SLAVEY KEH
-1486;AL;CANADIAN SYLLABICS SOUTH-SLAVEY KIH
-1487;AL;CANADIAN SYLLABICS SOUTH-SLAVEY KOH
-1488;AL;CANADIAN SYLLABICS SOUTH-SLAVEY KAH
-1489;AL;CANADIAN SYLLABICS CE
-148A;AL;CANADIAN SYLLABICS CAAI
-148B;AL;CANADIAN SYLLABICS CI
-148C;AL;CANADIAN SYLLABICS CII
-148D;AL;CANADIAN SYLLABICS CO
-148E;AL;CANADIAN SYLLABICS COO
-148F;AL;CANADIAN SYLLABICS Y-CREE COO
-1490;AL;CANADIAN SYLLABICS CA
-1491;AL;CANADIAN SYLLABICS CAA
-1492;AL;CANADIAN SYLLABICS CWE
-1493;AL;CANADIAN SYLLABICS WEST-CREE CWE
-1494;AL;CANADIAN SYLLABICS CWI
-1495;AL;CANADIAN SYLLABICS WEST-CREE CWI
-1496;AL;CANADIAN SYLLABICS CWII
-1497;AL;CANADIAN SYLLABICS WEST-CREE CWII
-1498;AL;CANADIAN SYLLABICS CWO
-1499;AL;CANADIAN SYLLABICS WEST-CREE CWO
-149A;AL;CANADIAN SYLLABICS CWOO
-149B;AL;CANADIAN SYLLABICS WEST-CREE CWOO
-149C;AL;CANADIAN SYLLABICS CWA
-149D;AL;CANADIAN SYLLABICS WEST-CREE CWA
-149E;AL;CANADIAN SYLLABICS CWAA
-149F;AL;CANADIAN SYLLABICS WEST-CREE CWAA
-14A0;AL;CANADIAN SYLLABICS NASKAPI CWAA
-14A1;AL;CANADIAN SYLLABICS C
-14A2;AL;CANADIAN SYLLABICS SAYISI TH
-14A3;AL;CANADIAN SYLLABICS ME
-14A4;AL;CANADIAN SYLLABICS MAAI
-14A5;AL;CANADIAN SYLLABICS MI
-14A6;AL;CANADIAN SYLLABICS MII
-14A7;AL;CANADIAN SYLLABICS MO
-14A8;AL;CANADIAN SYLLABICS MOO
-14A9;AL;CANADIAN SYLLABICS Y-CREE MOO
-14AA;AL;CANADIAN SYLLABICS MA
-14AB;AL;CANADIAN SYLLABICS MAA
-14AC;AL;CANADIAN SYLLABICS MWE
-14AD;AL;CANADIAN SYLLABICS WEST-CREE MWE
-14AE;AL;CANADIAN SYLLABICS MWI
-14AF;AL;CANADIAN SYLLABICS WEST-CREE MWI
-14B0;AL;CANADIAN SYLLABICS MWII
-14B1;AL;CANADIAN SYLLABICS WEST-CREE MWII
-14B2;AL;CANADIAN SYLLABICS MWO
-14B3;AL;CANADIAN SYLLABICS WEST-CREE MWO
-14B4;AL;CANADIAN SYLLABICS MWOO
-14B5;AL;CANADIAN SYLLABICS WEST-CREE MWOO
-14B6;AL;CANADIAN SYLLABICS MWA
-14B7;AL;CANADIAN SYLLABICS WEST-CREE MWA
-14B8;AL;CANADIAN SYLLABICS MWAA
-14B9;AL;CANADIAN SYLLABICS WEST-CREE MWAA
-14BA;AL;CANADIAN SYLLABICS NASKAPI MWAA
-14BB;AL;CANADIAN SYLLABICS M
-14BC;AL;CANADIAN SYLLABICS WEST-CREE M
-14BD;AL;CANADIAN SYLLABICS MH
-14BE;AL;CANADIAN SYLLABICS ATHAPASCAN M
-14BF;AL;CANADIAN SYLLABICS SAYISI M
-14C0;AL;CANADIAN SYLLABICS NE
-14C1;AL;CANADIAN SYLLABICS NAAI
-14C2;AL;CANADIAN SYLLABICS NI
-14C3;AL;CANADIAN SYLLABICS NII
-14C4;AL;CANADIAN SYLLABICS NO
-14C5;AL;CANADIAN SYLLABICS NOO
-14C6;AL;CANADIAN SYLLABICS Y-CREE NOO
-14C7;AL;CANADIAN SYLLABICS NA
-14C8;AL;CANADIAN SYLLABICS NAA
-14C9;AL;CANADIAN SYLLABICS NWE
-14CA;AL;CANADIAN SYLLABICS WEST-CREE NWE
-14CB;AL;CANADIAN SYLLABICS NWA
-14CC;AL;CANADIAN SYLLABICS WEST-CREE NWA
-14CD;AL;CANADIAN SYLLABICS NWAA
-14CE;AL;CANADIAN SYLLABICS WEST-CREE NWAA
-14CF;AL;CANADIAN SYLLABICS NASKAPI NWAA
-14D0;AL;CANADIAN SYLLABICS N
-14D1;AL;CANADIAN SYLLABICS CARRIER NG
-14D2;AL;CANADIAN SYLLABICS NH
-14D3;AL;CANADIAN SYLLABICS LE
-14D4;AL;CANADIAN SYLLABICS LAAI
-14D5;AL;CANADIAN SYLLABICS LI
-14D6;AL;CANADIAN SYLLABICS LII
-14D7;AL;CANADIAN SYLLABICS LO
-14D8;AL;CANADIAN SYLLABICS LOO
-14D9;AL;CANADIAN SYLLABICS Y-CREE LOO
-14DA;AL;CANADIAN SYLLABICS LA
-14DB;AL;CANADIAN SYLLABICS LAA
-14DC;AL;CANADIAN SYLLABICS LWE
-14DD;AL;CANADIAN SYLLABICS WEST-CREE LWE
-14DE;AL;CANADIAN SYLLABICS LWI
-14DF;AL;CANADIAN SYLLABICS WEST-CREE LWI
-14E0;AL;CANADIAN SYLLABICS LWII
-14E1;AL;CANADIAN SYLLABICS WEST-CREE LWII
-14E2;AL;CANADIAN SYLLABICS LWO
-14E3;AL;CANADIAN SYLLABICS WEST-CREE LWO
-14E4;AL;CANADIAN SYLLABICS LWOO
-14E5;AL;CANADIAN SYLLABICS WEST-CREE LWOO
-14E6;AL;CANADIAN SYLLABICS LWA
-14E7;AL;CANADIAN SYLLABICS WEST-CREE LWA
-14E8;AL;CANADIAN SYLLABICS LWAA
-14E9;AL;CANADIAN SYLLABICS WEST-CREE LWAA
-14EA;AL;CANADIAN SYLLABICS L
-14EB;AL;CANADIAN SYLLABICS WEST-CREE L
-14EC;AL;CANADIAN SYLLABICS MEDIAL L
-14ED;AL;CANADIAN SYLLABICS SE
-14EE;AL;CANADIAN SYLLABICS SAAI
-14EF;AL;CANADIAN SYLLABICS SI
-14F0;AL;CANADIAN SYLLABICS SII
-14F1;AL;CANADIAN SYLLABICS SO
-14F2;AL;CANADIAN SYLLABICS SOO
-14F3;AL;CANADIAN SYLLABICS Y-CREE SOO
-14F4;AL;CANADIAN SYLLABICS SA
-14F5;AL;CANADIAN SYLLABICS SAA
-14F6;AL;CANADIAN SYLLABICS SWE
-14F7;AL;CANADIAN SYLLABICS WEST-CREE SWE
-14F8;AL;CANADIAN SYLLABICS SWI
-14F9;AL;CANADIAN SYLLABICS WEST-CREE SWI
-14FA;AL;CANADIAN SYLLABICS SWII
-14FB;AL;CANADIAN SYLLABICS WEST-CREE SWII
-14FC;AL;CANADIAN SYLLABICS SWO
-14FD;AL;CANADIAN SYLLABICS WEST-CREE SWO
-14FE;AL;CANADIAN SYLLABICS SWOO
-14FF;AL;CANADIAN SYLLABICS WEST-CREE SWOO
-1500;AL;CANADIAN SYLLABICS SWA
-1501;AL;CANADIAN SYLLABICS WEST-CREE SWA
-1502;AL;CANADIAN SYLLABICS SWAA
-1503;AL;CANADIAN SYLLABICS WEST-CREE SWAA
-1504;AL;CANADIAN SYLLABICS NASKAPI SWAA
-1505;AL;CANADIAN SYLLABICS S
-1506;AL;CANADIAN SYLLABICS ATHAPASCAN S
-1507;AL;CANADIAN SYLLABICS SW
-1508;AL;CANADIAN SYLLABICS BLACKFOOT S
-1509;AL;CANADIAN SYLLABICS MOOSE-CREE SK
-150A;AL;CANADIAN SYLLABICS NASKAPI SKW
-150B;AL;CANADIAN SYLLABICS NASKAPI S-W
-150C;AL;CANADIAN SYLLABICS NASKAPI SPWA
-150D;AL;CANADIAN SYLLABICS NASKAPI STWA
-150E;AL;CANADIAN SYLLABICS NASKAPI SKWA
-150F;AL;CANADIAN SYLLABICS NASKAPI SCWA
-1510;AL;CANADIAN SYLLABICS SHE
-1511;AL;CANADIAN SYLLABICS SHI
-1512;AL;CANADIAN SYLLABICS SHII
-1513;AL;CANADIAN SYLLABICS SHO
-1514;AL;CANADIAN SYLLABICS SHOO
-1515;AL;CANADIAN SYLLABICS SHA
-1516;AL;CANADIAN SYLLABICS SHAA
-1517;AL;CANADIAN SYLLABICS SHWE
-1518;AL;CANADIAN SYLLABICS WEST-CREE SHWE
-1519;AL;CANADIAN SYLLABICS SHWI
-151A;AL;CANADIAN SYLLABICS WEST-CREE SHWI
-151B;AL;CANADIAN SYLLABICS SHWII
-151C;AL;CANADIAN SYLLABICS WEST-CREE SHWII
-151D;AL;CANADIAN SYLLABICS SHWO
-151E;AL;CANADIAN SYLLABICS WEST-CREE SHWO
-151F;AL;CANADIAN SYLLABICS SHWOO
-1520;AL;CANADIAN SYLLABICS WEST-CREE SHWOO
-1521;AL;CANADIAN SYLLABICS SHWA
-1522;AL;CANADIAN SYLLABICS WEST-CREE SHWA
-1523;AL;CANADIAN SYLLABICS SHWAA
-1524;AL;CANADIAN SYLLABICS WEST-CREE SHWAA
-1525;AL;CANADIAN SYLLABICS SH
-1526;AL;CANADIAN SYLLABICS YE
-1527;AL;CANADIAN SYLLABICS YAAI
-1528;AL;CANADIAN SYLLABICS YI
-1529;AL;CANADIAN SYLLABICS YII
-152A;AL;CANADIAN SYLLABICS YO
-152B;AL;CANADIAN SYLLABICS YOO
-152C;AL;CANADIAN SYLLABICS Y-CREE YOO
-152D;AL;CANADIAN SYLLABICS YA
-152E;AL;CANADIAN SYLLABICS YAA
-152F;AL;CANADIAN SYLLABICS YWE
-1530;AL;CANADIAN SYLLABICS WEST-CREE YWE
-1531;AL;CANADIAN SYLLABICS YWI
-1532;AL;CANADIAN SYLLABICS WEST-CREE YWI
-1533;AL;CANADIAN SYLLABICS YWII
-1534;AL;CANADIAN SYLLABICS WEST-CREE YWII
-1535;AL;CANADIAN SYLLABICS YWO
-1536;AL;CANADIAN SYLLABICS WEST-CREE YWO
-1537;AL;CANADIAN SYLLABICS YWOO
-1538;AL;CANADIAN SYLLABICS WEST-CREE YWOO
-1539;AL;CANADIAN SYLLABICS YWA
-153A;AL;CANADIAN SYLLABICS WEST-CREE YWA
-153B;AL;CANADIAN SYLLABICS YWAA
-153C;AL;CANADIAN SYLLABICS WEST-CREE YWAA
-153D;AL;CANADIAN SYLLABICS NASKAPI YWAA
-153E;AL;CANADIAN SYLLABICS Y
-153F;AL;CANADIAN SYLLABICS BIBLE-CREE Y
-1540;AL;CANADIAN SYLLABICS WEST-CREE Y
-1541;AL;CANADIAN SYLLABICS SAYISI YI
-1542;AL;CANADIAN SYLLABICS RE
-1543;AL;CANADIAN SYLLABICS R-CREE RE
-1544;AL;CANADIAN SYLLABICS WEST-CREE LE
-1545;AL;CANADIAN SYLLABICS RAAI
-1546;AL;CANADIAN SYLLABICS RI
-1547;AL;CANADIAN SYLLABICS RII
-1548;AL;CANADIAN SYLLABICS RO
-1549;AL;CANADIAN SYLLABICS ROO
-154A;AL;CANADIAN SYLLABICS WEST-CREE LO
-154B;AL;CANADIAN SYLLABICS RA
-154C;AL;CANADIAN SYLLABICS RAA
-154D;AL;CANADIAN SYLLABICS WEST-CREE LA
-154E;AL;CANADIAN SYLLABICS RWAA
-154F;AL;CANADIAN SYLLABICS WEST-CREE RWAA
-1550;AL;CANADIAN SYLLABICS R
-1551;AL;CANADIAN SYLLABICS WEST-CREE R
-1552;AL;CANADIAN SYLLABICS MEDIAL R
-1553;AL;CANADIAN SYLLABICS FE
-1554;AL;CANADIAN SYLLABICS FAAI
-1555;AL;CANADIAN SYLLABICS FI
-1556;AL;CANADIAN SYLLABICS FII
-1557;AL;CANADIAN SYLLABICS FO
-1558;AL;CANADIAN SYLLABICS FOO
-1559;AL;CANADIAN SYLLABICS FA
-155A;AL;CANADIAN SYLLABICS FAA
-155B;AL;CANADIAN SYLLABICS FWAA
-155C;AL;CANADIAN SYLLABICS WEST-CREE FWAA
-155D;AL;CANADIAN SYLLABICS F
-155E;AL;CANADIAN SYLLABICS THE
-155F;AL;CANADIAN SYLLABICS N-CREE THE
-1560;AL;CANADIAN SYLLABICS THI
-1561;AL;CANADIAN SYLLABICS N-CREE THI
-1562;AL;CANADIAN SYLLABICS THII
-1563;AL;CANADIAN SYLLABICS N-CREE THII
-1564;AL;CANADIAN SYLLABICS THO
-1565;AL;CANADIAN SYLLABICS THOO
-1566;AL;CANADIAN SYLLABICS THA
-1567;AL;CANADIAN SYLLABICS THAA
-1568;AL;CANADIAN SYLLABICS THWAA
-1569;AL;CANADIAN SYLLABICS WEST-CREE THWAA
-156A;AL;CANADIAN SYLLABICS TH
-156B;AL;CANADIAN SYLLABICS TTHE
-156C;AL;CANADIAN SYLLABICS TTHI
-156D;AL;CANADIAN SYLLABICS TTHO
-156E;AL;CANADIAN SYLLABICS TTHA
-156F;AL;CANADIAN SYLLABICS TTH
-1570;AL;CANADIAN SYLLABICS TYE
-1571;AL;CANADIAN SYLLABICS TYI
-1572;AL;CANADIAN SYLLABICS TYO
-1573;AL;CANADIAN SYLLABICS TYA
-1574;AL;CANADIAN SYLLABICS NUNAVIK HE
-1575;AL;CANADIAN SYLLABICS NUNAVIK HI
-1576;AL;CANADIAN SYLLABICS NUNAVIK HII
-1577;AL;CANADIAN SYLLABICS NUNAVIK HO
-1578;AL;CANADIAN SYLLABICS NUNAVIK HOO
-1579;AL;CANADIAN SYLLABICS NUNAVIK HA
-157A;AL;CANADIAN SYLLABICS NUNAVIK HAA
-157B;AL;CANADIAN SYLLABICS NUNAVIK H
-157C;AL;CANADIAN SYLLABICS NUNAVUT H
-157D;AL;CANADIAN SYLLABICS HK
-157E;AL;CANADIAN SYLLABICS QAAI
-157F;AL;CANADIAN SYLLABICS QI
-1580;AL;CANADIAN SYLLABICS QII
-1581;AL;CANADIAN SYLLABICS QO
-1582;AL;CANADIAN SYLLABICS QOO
-1583;AL;CANADIAN SYLLABICS QA
-1584;AL;CANADIAN SYLLABICS QAA
-1585;AL;CANADIAN SYLLABICS Q
-1586;AL;CANADIAN SYLLABICS TLHE
-1587;AL;CANADIAN SYLLABICS TLHI
-1588;AL;CANADIAN SYLLABICS TLHO
-1589;AL;CANADIAN SYLLABICS TLHA
-158A;AL;CANADIAN SYLLABICS WEST-CREE RE
-158B;AL;CANADIAN SYLLABICS WEST-CREE RI
-158C;AL;CANADIAN SYLLABICS WEST-CREE RO
-158D;AL;CANADIAN SYLLABICS WEST-CREE RA
-158E;AL;CANADIAN SYLLABICS NGAAI
-158F;AL;CANADIAN SYLLABICS NGI
-1590;AL;CANADIAN SYLLABICS NGII
-1591;AL;CANADIAN SYLLABICS NGO
-1592;AL;CANADIAN SYLLABICS NGOO
-1593;AL;CANADIAN SYLLABICS NGA
-1594;AL;CANADIAN SYLLABICS NGAA
-1595;AL;CANADIAN SYLLABICS NG
-1596;AL;CANADIAN SYLLABICS NNG
-1597;AL;CANADIAN SYLLABICS SAYISI SHE
-1598;AL;CANADIAN SYLLABICS SAYISI SHI
-1599;AL;CANADIAN SYLLABICS SAYISI SHO
-159A;AL;CANADIAN SYLLABICS SAYISI SHA
-159B;AL;CANADIAN SYLLABICS WOODS-CREE THE
-159C;AL;CANADIAN SYLLABICS WOODS-CREE THI
-159D;AL;CANADIAN SYLLABICS WOODS-CREE THO
-159E;AL;CANADIAN SYLLABICS WOODS-CREE THA
-159F;AL;CANADIAN SYLLABICS WOODS-CREE TH
-15A0;AL;CANADIAN SYLLABICS LHI
-15A1;AL;CANADIAN SYLLABICS LHII
-15A2;AL;CANADIAN SYLLABICS LHO
-15A3;AL;CANADIAN SYLLABICS LHOO
-15A4;AL;CANADIAN SYLLABICS LHA
-15A5;AL;CANADIAN SYLLABICS LHAA
-15A6;AL;CANADIAN SYLLABICS LH
-15A7;AL;CANADIAN SYLLABICS TH-CREE THE
-15A8;AL;CANADIAN SYLLABICS TH-CREE THI
-15A9;AL;CANADIAN SYLLABICS TH-CREE THII
-15AA;AL;CANADIAN SYLLABICS TH-CREE THO
-15AB;AL;CANADIAN SYLLABICS TH-CREE THOO
-15AC;AL;CANADIAN SYLLABICS TH-CREE THA
-15AD;AL;CANADIAN SYLLABICS TH-CREE THAA
-15AE;AL;CANADIAN SYLLABICS TH-CREE TH
-15AF;AL;CANADIAN SYLLABICS AIVILIK B
-15B0;AL;CANADIAN SYLLABICS BLACKFOOT E
-15B1;AL;CANADIAN SYLLABICS BLACKFOOT I
-15B2;AL;CANADIAN SYLLABICS BLACKFOOT O
-15B3;AL;CANADIAN SYLLABICS BLACKFOOT A
-15B4;AL;CANADIAN SYLLABICS BLACKFOOT WE
-15B5;AL;CANADIAN SYLLABICS BLACKFOOT WI
-15B6;AL;CANADIAN SYLLABICS BLACKFOOT WO
-15B7;AL;CANADIAN SYLLABICS BLACKFOOT WA
-15B8;AL;CANADIAN SYLLABICS BLACKFOOT NE
-15B9;AL;CANADIAN SYLLABICS BLACKFOOT NI
-15BA;AL;CANADIAN SYLLABICS BLACKFOOT NO
-15BB;AL;CANADIAN SYLLABICS BLACKFOOT NA
-15BC;AL;CANADIAN SYLLABICS BLACKFOOT KE
-15BD;AL;CANADIAN SYLLABICS BLACKFOOT KI
-15BE;AL;CANADIAN SYLLABICS BLACKFOOT KO
-15BF;AL;CANADIAN SYLLABICS BLACKFOOT KA
-15C0;AL;CANADIAN SYLLABICS SAYISI HE
-15C1;AL;CANADIAN SYLLABICS SAYISI HI
-15C2;AL;CANADIAN SYLLABICS SAYISI HO
-15C3;AL;CANADIAN SYLLABICS SAYISI HA
-15C4;AL;CANADIAN SYLLABICS CARRIER GHU
-15C5;AL;CANADIAN SYLLABICS CARRIER GHO
-15C6;AL;CANADIAN SYLLABICS CARRIER GHE
-15C7;AL;CANADIAN SYLLABICS CARRIER GHEE
-15C8;AL;CANADIAN SYLLABICS CARRIER GHI
-15C9;AL;CANADIAN SYLLABICS CARRIER GHA
-15CA;AL;CANADIAN SYLLABICS CARRIER RU
-15CB;AL;CANADIAN SYLLABICS CARRIER RO
-15CC;AL;CANADIAN SYLLABICS CARRIER RE
-15CD;AL;CANADIAN SYLLABICS CARRIER REE
-15CE;AL;CANADIAN SYLLABICS CARRIER RI
-15CF;AL;CANADIAN SYLLABICS CARRIER RA
-15D0;AL;CANADIAN SYLLABICS CARRIER WU
-15D1;AL;CANADIAN SYLLABICS CARRIER WO
-15D2;AL;CANADIAN SYLLABICS CARRIER WE
-15D3;AL;CANADIAN SYLLABICS CARRIER WEE
-15D4;AL;CANADIAN SYLLABICS CARRIER WI
-15D5;AL;CANADIAN SYLLABICS CARRIER WA
-15D6;AL;CANADIAN SYLLABICS CARRIER HWU
-15D7;AL;CANADIAN SYLLABICS CARRIER HWO
-15D8;AL;CANADIAN SYLLABICS CARRIER HWE
-15D9;AL;CANADIAN SYLLABICS CARRIER HWEE
-15DA;AL;CANADIAN SYLLABICS CARRIER HWI
-15DB;AL;CANADIAN SYLLABICS CARRIER HWA
-15DC;AL;CANADIAN SYLLABICS CARRIER THU
-15DD;AL;CANADIAN SYLLABICS CARRIER THO
-15DE;AL;CANADIAN SYLLABICS CARRIER THE
-15DF;AL;CANADIAN SYLLABICS CARRIER THEE
-15E0;AL;CANADIAN SYLLABICS CARRIER THI
-15E1;AL;CANADIAN SYLLABICS CARRIER THA
-15E2;AL;CANADIAN SYLLABICS CARRIER TTU
-15E3;AL;CANADIAN SYLLABICS CARRIER TTO
-15E4;AL;CANADIAN SYLLABICS CARRIER TTE
-15E5;AL;CANADIAN SYLLABICS CARRIER TTEE
-15E6;AL;CANADIAN SYLLABICS CARRIER TTI
-15E7;AL;CANADIAN SYLLABICS CARRIER TTA
-15E8;AL;CANADIAN SYLLABICS CARRIER PU
-15E9;AL;CANADIAN SYLLABICS CARRIER PO
-15EA;AL;CANADIAN SYLLABICS CARRIER PE
-15EB;AL;CANADIAN SYLLABICS CARRIER PEE
-15EC;AL;CANADIAN SYLLABICS CARRIER PI
-15ED;AL;CANADIAN SYLLABICS CARRIER PA
-15EE;AL;CANADIAN SYLLABICS CARRIER P
-15EF;AL;CANADIAN SYLLABICS CARRIER GU
-15F0;AL;CANADIAN SYLLABICS CARRIER GO
-15F1;AL;CANADIAN SYLLABICS CARRIER GE
-15F2;AL;CANADIAN SYLLABICS CARRIER GEE
-15F3;AL;CANADIAN SYLLABICS CARRIER GI
-15F4;AL;CANADIAN SYLLABICS CARRIER GA
-15F5;AL;CANADIAN SYLLABICS CARRIER KHU
-15F6;AL;CANADIAN SYLLABICS CARRIER KHO
-15F7;AL;CANADIAN SYLLABICS CARRIER KHE
-15F8;AL;CANADIAN SYLLABICS CARRIER KHEE
-15F9;AL;CANADIAN SYLLABICS CARRIER KHI
-15FA;AL;CANADIAN SYLLABICS CARRIER KHA
-15FB;AL;CANADIAN SYLLABICS CARRIER KKU
-15FC;AL;CANADIAN SYLLABICS CARRIER KKO
-15FD;AL;CANADIAN SYLLABICS CARRIER KKE
-15FE;AL;CANADIAN SYLLABICS CARRIER KKEE
-15FF;AL;CANADIAN SYLLABICS CARRIER KKI
-1600;AL;CANADIAN SYLLABICS CARRIER KKA
-1601;AL;CANADIAN SYLLABICS CARRIER KK
-1602;AL;CANADIAN SYLLABICS CARRIER NU
-1603;AL;CANADIAN SYLLABICS CARRIER NO
-1604;AL;CANADIAN SYLLABICS CARRIER NE
-1605;AL;CANADIAN SYLLABICS CARRIER NEE
-1606;AL;CANADIAN SYLLABICS CARRIER NI
-1607;AL;CANADIAN SYLLABICS CARRIER NA
-1608;AL;CANADIAN SYLLABICS CARRIER MU
-1609;AL;CANADIAN SYLLABICS CARRIER MO
-160A;AL;CANADIAN SYLLABICS CARRIER ME
-160B;AL;CANADIAN SYLLABICS CARRIER MEE
-160C;AL;CANADIAN SYLLABICS CARRIER MI
-160D;AL;CANADIAN SYLLABICS CARRIER MA
-160E;AL;CANADIAN SYLLABICS CARRIER YU
-160F;AL;CANADIAN SYLLABICS CARRIER YO
-1610;AL;CANADIAN SYLLABICS CARRIER YE
-1611;AL;CANADIAN SYLLABICS CARRIER YEE
-1612;AL;CANADIAN SYLLABICS CARRIER YI
-1613;AL;CANADIAN SYLLABICS CARRIER YA
-1614;AL;CANADIAN SYLLABICS CARRIER JU
-1615;AL;CANADIAN SYLLABICS SAYISI JU
-1616;AL;CANADIAN SYLLABICS CARRIER JO
-1617;AL;CANADIAN SYLLABICS CARRIER JE
-1618;AL;CANADIAN SYLLABICS CARRIER JEE
-1619;AL;CANADIAN SYLLABICS CARRIER JI
-161A;AL;CANADIAN SYLLABICS SAYISI JI
-161B;AL;CANADIAN SYLLABICS CARRIER JA
-161C;AL;CANADIAN SYLLABICS CARRIER JJU
-161D;AL;CANADIAN SYLLABICS CARRIER JJO
-161E;AL;CANADIAN SYLLABICS CARRIER JJE
-161F;AL;CANADIAN SYLLABICS CARRIER JJEE
-1620;AL;CANADIAN SYLLABICS CARRIER JJI
-1621;AL;CANADIAN SYLLABICS CARRIER JJA
-1622;AL;CANADIAN SYLLABICS CARRIER LU
-1623;AL;CANADIAN SYLLABICS CARRIER LO
-1624;AL;CANADIAN SYLLABICS CARRIER LE
-1625;AL;CANADIAN SYLLABICS CARRIER LEE
-1626;AL;CANADIAN SYLLABICS CARRIER LI
-1627;AL;CANADIAN SYLLABICS CARRIER LA
-1628;AL;CANADIAN SYLLABICS CARRIER DLU
-1629;AL;CANADIAN SYLLABICS CARRIER DLO
-162A;AL;CANADIAN SYLLABICS CARRIER DLE
-162B;AL;CANADIAN SYLLABICS CARRIER DLEE
-162C;AL;CANADIAN SYLLABICS CARRIER DLI
-162D;AL;CANADIAN SYLLABICS CARRIER DLA
-162E;AL;CANADIAN SYLLABICS CARRIER LHU
-162F;AL;CANADIAN SYLLABICS CARRIER LHO
-1630;AL;CANADIAN SYLLABICS CARRIER LHE
-1631;AL;CANADIAN SYLLABICS CARRIER LHEE
-1632;AL;CANADIAN SYLLABICS CARRIER LHI
-1633;AL;CANADIAN SYLLABICS CARRIER LHA
-1634;AL;CANADIAN SYLLABICS CARRIER TLHU
-1635;AL;CANADIAN SYLLABICS CARRIER TLHO
-1636;AL;CANADIAN SYLLABICS CARRIER TLHE
-1637;AL;CANADIAN SYLLABICS CARRIER TLHEE
-1638;AL;CANADIAN SYLLABICS CARRIER TLHI
-1639;AL;CANADIAN SYLLABICS CARRIER TLHA
-163A;AL;CANADIAN SYLLABICS CARRIER TLU
-163B;AL;CANADIAN SYLLABICS CARRIER TLO
-163C;AL;CANADIAN SYLLABICS CARRIER TLE
-163D;AL;CANADIAN SYLLABICS CARRIER TLEE
-163E;AL;CANADIAN SYLLABICS CARRIER TLI
-163F;AL;CANADIAN SYLLABICS CARRIER TLA
-1640;AL;CANADIAN SYLLABICS CARRIER ZU
-1641;AL;CANADIAN SYLLABICS CARRIER ZO
-1642;AL;CANADIAN SYLLABICS CARRIER ZE
-1643;AL;CANADIAN SYLLABICS CARRIER ZEE
-1644;AL;CANADIAN SYLLABICS CARRIER ZI
-1645;AL;CANADIAN SYLLABICS CARRIER ZA
-1646;AL;CANADIAN SYLLABICS CARRIER Z
-1647;AL;CANADIAN SYLLABICS CARRIER INITIAL Z
-1648;AL;CANADIAN SYLLABICS CARRIER DZU
-1649;AL;CANADIAN SYLLABICS CARRIER DZO
-164A;AL;CANADIAN SYLLABICS CARRIER DZE
-164B;AL;CANADIAN SYLLABICS CARRIER DZEE
-164C;AL;CANADIAN SYLLABICS CARRIER DZI
-164D;AL;CANADIAN SYLLABICS CARRIER DZA
-164E;AL;CANADIAN SYLLABICS CARRIER SU
-164F;AL;CANADIAN SYLLABICS CARRIER SO
-1650;AL;CANADIAN SYLLABICS CARRIER SE
-1651;AL;CANADIAN SYLLABICS CARRIER SEE
-1652;AL;CANADIAN SYLLABICS CARRIER SI
-1653;AL;CANADIAN SYLLABICS CARRIER SA
-1654;AL;CANADIAN SYLLABICS CARRIER SHU
-1655;AL;CANADIAN SYLLABICS CARRIER SHO
-1656;AL;CANADIAN SYLLABICS CARRIER SHE
-1657;AL;CANADIAN SYLLABICS CARRIER SHEE
-1658;AL;CANADIAN SYLLABICS CARRIER SHI
-1659;AL;CANADIAN SYLLABICS CARRIER SHA
-165A;AL;CANADIAN SYLLABICS CARRIER SH
-165B;AL;CANADIAN SYLLABICS CARRIER TSU
-165C;AL;CANADIAN SYLLABICS CARRIER TSO
-165D;AL;CANADIAN SYLLABICS CARRIER TSE
-165E;AL;CANADIAN SYLLABICS CARRIER TSEE
-165F;AL;CANADIAN SYLLABICS CARRIER TSI
-1660;AL;CANADIAN SYLLABICS CARRIER TSA
-1661;AL;CANADIAN SYLLABICS CARRIER CHU
-1662;AL;CANADIAN SYLLABICS CARRIER CHO
-1663;AL;CANADIAN SYLLABICS CARRIER CHE
-1664;AL;CANADIAN SYLLABICS CARRIER CHEE
-1665;AL;CANADIAN SYLLABICS CARRIER CHI
-1666;AL;CANADIAN SYLLABICS CARRIER CHA
-1667;AL;CANADIAN SYLLABICS CARRIER TTSU
-1668;AL;CANADIAN SYLLABICS CARRIER TTSO
-1669;AL;CANADIAN SYLLABICS CARRIER TTSE
-166A;AL;CANADIAN SYLLABICS CARRIER TTSEE
-166B;AL;CANADIAN SYLLABICS CARRIER TTSI
-166C;AL;CANADIAN SYLLABICS CARRIER TTSA
-166D;AL;CANADIAN SYLLABICS CHI SIGN
-166E;AL;CANADIAN SYLLABICS FULL STOP
-166F;AL;CANADIAN SYLLABICS QAI
-1670;AL;CANADIAN SYLLABICS NGAI
-1671;AL;CANADIAN SYLLABICS NNGI
-1672;AL;CANADIAN SYLLABICS NNGII
-1673;AL;CANADIAN SYLLABICS NNGO
-1674;AL;CANADIAN SYLLABICS NNGOO
-1675;AL;CANADIAN SYLLABICS NNGA
-1676;AL;CANADIAN SYLLABICS NNGAA
-1680;BA;OGHAM SPACE MARK
-1681;AL;OGHAM LETTER BEITH
-1682;AL;OGHAM LETTER LUIS
-1683;AL;OGHAM LETTER FEARN
-1684;AL;OGHAM LETTER SAIL
-1685;AL;OGHAM LETTER NION
-1686;AL;OGHAM LETTER UATH
-1687;AL;OGHAM LETTER DAIR
-1688;AL;OGHAM LETTER TINNE
-1689;AL;OGHAM LETTER COLL
-168A;AL;OGHAM LETTER CEIRT
-168B;AL;OGHAM LETTER MUIN
-168C;AL;OGHAM LETTER GORT
-168D;AL;OGHAM LETTER NGEADAL
-168E;AL;OGHAM LETTER STRAIF
-168F;AL;OGHAM LETTER RUIS
-1690;AL;OGHAM LETTER AILM
-1691;AL;OGHAM LETTER ONN
-1692;AL;OGHAM LETTER UR
-1693;AL;OGHAM LETTER EADHADH
-1694;AL;OGHAM LETTER IODHADH
-1695;AL;OGHAM LETTER EABHADH
-1696;AL;OGHAM LETTER OR
-1697;AL;OGHAM LETTER UILLEANN
-1698;AL;OGHAM LETTER IFIN
-1699;AL;OGHAM LETTER EAMHANCHOLL
-169A;AL;OGHAM LETTER PEITH
-169B;OP;OGHAM FEATHER MARK
-169C;CL;OGHAM REVERSED FEATHER MARK
-16A0;AL;RUNIC LETTER FEHU FEOH FE F
-16A1;AL;RUNIC LETTER V
-16A2;AL;RUNIC LETTER URUZ UR U
-16A3;AL;RUNIC LETTER YR
-16A4;AL;RUNIC LETTER Y
-16A5;AL;RUNIC LETTER W
-16A6;AL;RUNIC LETTER THURISAZ THURS THORN
-16A7;AL;RUNIC LETTER ETH
-16A8;AL;RUNIC LETTER ANSUZ A
-16A9;AL;RUNIC LETTER OS O
-16AA;AL;RUNIC LETTER AC A
-16AB;AL;RUNIC LETTER AESC
-16AC;AL;RUNIC LETTER LONG-BRANCH-OSS O
-16AD;AL;RUNIC LETTER SHORT-TWIG-OSS O
-16AE;AL;RUNIC LETTER O
-16AF;AL;RUNIC LETTER OE
-16B0;AL;RUNIC LETTER ON
-16B1;AL;RUNIC LETTER RAIDO RAD REID R
-16B2;AL;RUNIC LETTER KAUNA
-16B3;AL;RUNIC LETTER CEN
-16B4;AL;RUNIC LETTER KAUN K
-16B5;AL;RUNIC LETTER G
-16B6;AL;RUNIC LETTER ENG
-16B7;AL;RUNIC LETTER GEBO GYFU G
-16B8;AL;RUNIC LETTER GAR
-16B9;AL;RUNIC LETTER WUNJO WYNN W
-16BA;AL;RUNIC LETTER HAGLAZ H
-16BB;AL;RUNIC LETTER HAEGL H
-16BC;AL;RUNIC LETTER LONG-BRANCH-HAGALL H
-16BD;AL;RUNIC LETTER SHORT-TWIG-HAGALL H
-16BE;AL;RUNIC LETTER NAUDIZ NYD NAUD N
-16BF;AL;RUNIC LETTER SHORT-TWIG-NAUD N
-16C0;AL;RUNIC LETTER DOTTED-N
-16C1;AL;RUNIC LETTER ISAZ IS ISS I
-16C2;AL;RUNIC LETTER E
-16C3;AL;RUNIC LETTER JERAN J
-16C4;AL;RUNIC LETTER GER
-16C5;AL;RUNIC LETTER LONG-BRANCH-AR AE
-16C6;AL;RUNIC LETTER SHORT-TWIG-AR A
-16C7;AL;RUNIC LETTER IWAZ EOH
-16C8;AL;RUNIC LETTER PERTHO PEORTH P
-16C9;AL;RUNIC LETTER ALGIZ EOLHX
-16CA;AL;RUNIC LETTER SOWILO S
-16CB;AL;RUNIC LETTER SIGEL LONG-BRANCH-SOL S
-16CC;AL;RUNIC LETTER SHORT-TWIG-SOL S
-16CD;AL;RUNIC LETTER C
-16CE;AL;RUNIC LETTER Z
-16CF;AL;RUNIC LETTER TIWAZ TIR TYR T
-16D0;AL;RUNIC LETTER SHORT-TWIG-TYR T
-16D1;AL;RUNIC LETTER D
-16D2;AL;RUNIC LETTER BERKANAN BEORC BJARKAN B
-16D3;AL;RUNIC LETTER SHORT-TWIG-BJARKAN B
-16D4;AL;RUNIC LETTER DOTTED-P
-16D5;AL;RUNIC LETTER OPEN-P
-16D6;AL;RUNIC LETTER EHWAZ EH E
-16D7;AL;RUNIC LETTER MANNAZ MAN M
-16D8;AL;RUNIC LETTER LONG-BRANCH-MADR M
-16D9;AL;RUNIC LETTER SHORT-TWIG-MADR M
-16DA;AL;RUNIC LETTER LAUKAZ LAGU LOGR L
-16DB;AL;RUNIC LETTER DOTTED-L
-16DC;AL;RUNIC LETTER INGWAZ
-16DD;AL;RUNIC LETTER ING
-16DE;AL;RUNIC LETTER DAGAZ DAEG D
-16DF;AL;RUNIC LETTER OTHALAN ETHEL O
-16E0;AL;RUNIC LETTER EAR
-16E1;AL;RUNIC LETTER IOR
-16E2;AL;RUNIC LETTER CWEORTH
-16E3;AL;RUNIC LETTER CALC
-16E4;AL;RUNIC LETTER CEALC
-16E5;AL;RUNIC LETTER STAN
-16E6;AL;RUNIC LETTER LONG-BRANCH-YR
-16E7;AL;RUNIC LETTER SHORT-TWIG-YR
-16E8;AL;RUNIC LETTER ICELANDIC-YR
-16E9;AL;RUNIC LETTER Q
-16EA;AL;RUNIC LETTER X
-16EB;AL;RUNIC SINGLE PUNCTUATION
-16EC;AL;RUNIC MULTIPLE PUNCTUATION
-16ED;AL;RUNIC CROSS PUNCTUATION
-16EE;AL;RUNIC ARLAUG SYMBOL
-16EF;AL;RUNIC TVIMADUR SYMBOL
-16F0;AL;RUNIC BELGTHOR SYMBOL
-1780;SA;KHMER LETTER KA
-1781;SA;KHMER LETTER KHA
-1782;SA;KHMER LETTER KO
-1783;SA;KHMER LETTER KHO
-1784;SA;KHMER LETTER NGO
-1785;SA;KHMER LETTER CA
-1786;SA;KHMER LETTER CHA
-1787;SA;KHMER LETTER CO
-1788;SA;KHMER LETTER CHO
-1789;SA;KHMER LETTER NYO
-178A;SA;KHMER LETTER DA
-178B;SA;KHMER LETTER TTHA
-178C;SA;KHMER LETTER DO
-178D;SA;KHMER LETTER TTHO
-178E;SA;KHMER LETTER NNO
-178F;SA;KHMER LETTER TA
-1790;SA;KHMER LETTER THA
-1791;SA;KHMER LETTER TO
-1792;SA;KHMER LETTER THO
-1793;SA;KHMER LETTER NO
-1794;SA;KHMER LETTER BA
-1795;SA;KHMER LETTER PHA
-1796;SA;KHMER LETTER PO
-1797;SA;KHMER LETTER PHO
-1798;SA;KHMER LETTER MO
-1799;SA;KHMER LETTER YO
-179A;SA;KHMER LETTER RO
-179B;SA;KHMER LETTER LO
-179C;SA;KHMER LETTER VO
-179D;SA;KHMER LETTER SHA
-179E;SA;KHMER LETTER SSO
-179F;SA;KHMER LETTER SA
-17A0;SA;KHMER LETTER HA
-17A1;SA;KHMER LETTER LA
-17A2;SA;KHMER LETTER QA
-17A3;SA;KHMER INDEPENDENT VOWEL QAQ
-17A4;SA;KHMER INDEPENDENT VOWEL QAA
-17A5;SA;KHMER INDEPENDENT VOWEL QI
-17A6;SA;KHMER INDEPENDENT VOWEL QII
-17A7;SA;KHMER INDEPENDENT VOWEL QU
-17A8;SA;KHMER INDEPENDENT VOWEL QUK
-17A9;SA;KHMER INDEPENDENT VOWEL QUU
-17AA;SA;KHMER INDEPENDENT VOWEL QUUV
-17AB;SA;KHMER INDEPENDENT VOWEL RY
-17AC;SA;KHMER INDEPENDENT VOWEL RYY
-17AD;SA;KHMER INDEPENDENT VOWEL LY
-17AE;SA;KHMER INDEPENDENT VOWEL LYY
-17AF;SA;KHMER INDEPENDENT VOWEL QE
-17B0;SA;KHMER INDEPENDENT VOWEL QAI
-17B1;SA;KHMER INDEPENDENT VOWEL QOO TYPE ONE
-17B2;SA;KHMER INDEPENDENT VOWEL QOO TYPE TWO
-17B3;SA;KHMER INDEPENDENT VOWEL QAU
-17B4;CM;KHMER VOWEL INHERENT AQ
-17B5;CM;KHMER VOWEL INHERENT AA
-17B6;CM;KHMER VOWEL SIGN AA
-17B7;CM;KHMER VOWEL SIGN I
-17B8;CM;KHMER VOWEL SIGN II
-17B9;CM;KHMER VOWEL SIGN Y
-17BA;CM;KHMER VOWEL SIGN YY
-17BB;CM;KHMER VOWEL SIGN U
-17BC;CM;KHMER VOWEL SIGN UU
-17BD;CM;KHMER VOWEL SIGN UA
-17BE;CM;KHMER VOWEL SIGN OE
-17BF;CM;KHMER VOWEL SIGN YA
-17C0;CM;KHMER VOWEL SIGN IE
-17C1;CM;KHMER VOWEL SIGN E
-17C2;CM;KHMER VOWEL SIGN AE
-17C3;CM;KHMER VOWEL SIGN AI
-17C4;CM;KHMER VOWEL SIGN OO
-17C5;CM;KHMER VOWEL SIGN AU
-17C6;CM;KHMER SIGN NIKAHIT
-17C7;CM;KHMER SIGN REAHMUK
-17C8;CM;KHMER SIGN YUUKALEAPINTU
-17C9;CM;KHMER SIGN MUUSIKATOAN
-17CA;CM;KHMER SIGN TRIISAP
-17CB;CM;KHMER SIGN BANTOC
-17CC;CM;KHMER SIGN ROBAT
-17CD;CM;KHMER SIGN TOANDAKHIAT
-17CE;CM;KHMER SIGN KAKABAT
-17CF;CM;KHMER SIGN AHSDA
-17D0;CM;KHMER SIGN SAMYOK SANNYA
-17D1;CM;KHMER SIGN VIRIAM
-17D2;CM;KHMER SIGN COENG
-17D3;CM;KHMER SIGN BATHAMASAT
-17D4;NS;KHMER SIGN KHAN
-17D5;BA;KHMER SIGN BARIYOOSAN
-17D6;NS;KHMER SIGN CAMNUC PII KUUH
-17D7;NS;KHMER SIGN LEK TOO
-17D8;NS;KHMER SIGN BEYYAL
-17D9;NS;KHMER SIGN PHNAEK MUAN
-17DA;NS;KHMER SIGN KOOMUUT
-17DB;PR;KHMER CURRENCY SYMBOL RIEL
-17DC;AL;KHMER SIGN AVAKRAHASANYA
-17E0;NU;KHMER DIGIT ZERO
-17E1;NU;KHMER DIGIT ONE
-17E2;NU;KHMER DIGIT TWO
-17E3;NU;KHMER DIGIT THREE
-17E4;NU;KHMER DIGIT FOUR
-17E5;NU;KHMER DIGIT FIVE
-17E6;NU;KHMER DIGIT SIX
-17E7;NU;KHMER DIGIT SEVEN
-17E8;NU;KHMER DIGIT EIGHT
-17E9;NU;KHMER DIGIT NINE
-1800;AL;MONGOLIAN BIRGA
-1801;AL;MONGOLIAN ELLIPSIS
-1802;AL;MONGOLIAN COMMA
-1803;AL;MONGOLIAN FULL STOP
-1804;AL;MONGOLIAN COLON
-1805;AL;MONGOLIAN FOUR DOTS
-1806;BB;MONGOLIAN TODO SOFT HYPHEN
-1807;AL;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
-1808;AL;MONGOLIAN MANCHU COMMA
-1809;AL;MONGOLIAN MANCHU FULL STOP
-180A;AL;MONGOLIAN NIRUGU
-180B;CM;MONGOLIAN FREE VARIATION SELECTOR ONE
-180C;CM;MONGOLIAN FREE VARIATION SELECTOR TWO
-180D;CM;MONGOLIAN FREE VARIATION SELECTOR THREE
-180E;CM;MONGOLIAN VOWEL SEPARATOR
-1810;NU;MONGOLIAN DIGIT ZERO
-1811;NU;MONGOLIAN DIGIT ONE
-1812;NU;MONGOLIAN DIGIT TWO
-1813;NU;MONGOLIAN DIGIT THREE
-1814;NU;MONGOLIAN DIGIT FOUR
-1815;NU;MONGOLIAN DIGIT FIVE
-1816;NU;MONGOLIAN DIGIT SIX
-1817;NU;MONGOLIAN DIGIT SEVEN
-1818;NU;MONGOLIAN DIGIT EIGHT
-1819;NU;MONGOLIAN DIGIT NINE
-1820;AL;MONGOLIAN LETTER A
-1821;AL;MONGOLIAN LETTER E
-1822;AL;MONGOLIAN LETTER I
-1823;AL;MONGOLIAN LETTER O
-1824;AL;MONGOLIAN LETTER U
-1825;AL;MONGOLIAN LETTER OE
-1826;AL;MONGOLIAN LETTER UE
-1827;AL;MONGOLIAN LETTER EE
-1828;AL;MONGOLIAN LETTER NA
-1829;AL;MONGOLIAN LETTER ANG
-182A;AL;MONGOLIAN LETTER BA
-182B;AL;MONGOLIAN LETTER PA
-182C;AL;MONGOLIAN LETTER QA
-182D;AL;MONGOLIAN LETTER GA
-182E;AL;MONGOLIAN LETTER MA
-182F;AL;MONGOLIAN LETTER LA
-1830;AL;MONGOLIAN LETTER SA
-1831;AL;MONGOLIAN LETTER SHA
-1832;AL;MONGOLIAN LETTER TA
-1833;AL;MONGOLIAN LETTER DA
-1834;AL;MONGOLIAN LETTER CHA
-1835;AL;MONGOLIAN LETTER JA
-1836;AL;MONGOLIAN LETTER YA
-1837;AL;MONGOLIAN LETTER RA
-1838;AL;MONGOLIAN LETTER WA
-1839;AL;MONGOLIAN LETTER FA
-183A;AL;MONGOLIAN LETTER KA
-183B;AL;MONGOLIAN LETTER KHA
-183C;AL;MONGOLIAN LETTER TSA
-183D;AL;MONGOLIAN LETTER ZA
-183E;AL;MONGOLIAN LETTER HAA
-183F;AL;MONGOLIAN LETTER ZRA
-1840;AL;MONGOLIAN LETTER LHA
-1841;AL;MONGOLIAN LETTER ZHI
-1842;AL;MONGOLIAN LETTER CHI
-1843;AL;MONGOLIAN LETTER TODO LONG VOWEL SIGN
-1844;AL;MONGOLIAN LETTER TODO E
-1845;AL;MONGOLIAN LETTER TODO I
-1846;AL;MONGOLIAN LETTER TODO O
-1847;AL;MONGOLIAN LETTER TODO U
-1848;AL;MONGOLIAN LETTER TODO OE
-1849;AL;MONGOLIAN LETTER TODO UE
-184A;AL;MONGOLIAN LETTER TODO ANG
-184B;AL;MONGOLIAN LETTER TODO BA
-184C;AL;MONGOLIAN LETTER TODO PA
-184D;AL;MONGOLIAN LETTER TODO QA
-184E;AL;MONGOLIAN LETTER TODO GA
-184F;AL;MONGOLIAN LETTER TODO MA
-1850;AL;MONGOLIAN LETTER TODO TA
-1851;AL;MONGOLIAN LETTER TODO DA
-1852;AL;MONGOLIAN LETTER TODO CHA
-1853;AL;MONGOLIAN LETTER TODO JA
-1854;AL;MONGOLIAN LETTER TODO TSA
-1855;AL;MONGOLIAN LETTER TODO YA
-1856;AL;MONGOLIAN LETTER TODO WA
-1857;AL;MONGOLIAN LETTER TODO KA
-1858;AL;MONGOLIAN LETTER TODO GAA
-1859;AL;MONGOLIAN LETTER TODO HAA
-185A;AL;MONGOLIAN LETTER TODO JIA
-185B;AL;MONGOLIAN LETTER TODO NIA
-185C;AL;MONGOLIAN LETTER TODO DZA
-185D;AL;MONGOLIAN LETTER SIBE E
-185E;AL;MONGOLIAN LETTER SIBE I
-185F;AL;MONGOLIAN LETTER SIBE IY
-1860;AL;MONGOLIAN LETTER SIBE UE
-1861;AL;MONGOLIAN LETTER SIBE U
-1862;AL;MONGOLIAN LETTER SIBE ANG
-1863;AL;MONGOLIAN LETTER SIBE KA
-1864;AL;MONGOLIAN LETTER SIBE GA
-1865;AL;MONGOLIAN LETTER SIBE HA
-1866;AL;MONGOLIAN LETTER SIBE PA
-1867;AL;MONGOLIAN LETTER SIBE SHA
-1868;AL;MONGOLIAN LETTER SIBE TA
-1869;AL;MONGOLIAN LETTER SIBE DA
-186A;AL;MONGOLIAN LETTER SIBE JA
-186B;AL;MONGOLIAN LETTER SIBE FA
-186C;AL;MONGOLIAN LETTER SIBE GAA
-186D;AL;MONGOLIAN LETTER SIBE HAA
-186E;AL;MONGOLIAN LETTER SIBE TSA
-186F;AL;MONGOLIAN LETTER SIBE ZA
-1870;AL;MONGOLIAN LETTER SIBE RAA
-1871;AL;MONGOLIAN LETTER SIBE CHA
-1872;AL;MONGOLIAN LETTER SIBE ZHA
-1873;AL;MONGOLIAN LETTER MANCHU I
-1874;AL;MONGOLIAN LETTER MANCHU KA
-1875;AL;MONGOLIAN LETTER MANCHU RA
-1876;AL;MONGOLIAN LETTER MANCHU FA
-1877;AL;MONGOLIAN LETTER MANCHU ZHA
-1880;AL;MONGOLIAN LETTER ALI GALI ANUSVARA ONE
-1881;AL;MONGOLIAN LETTER ALI GALI VISARGA ONE
-1882;AL;MONGOLIAN LETTER ALI GALI DAMARU
-1883;AL;MONGOLIAN LETTER ALI GALI UBADAMA
-1884;AL;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
-1885;AL;MONGOLIAN LETTER ALI GALI BALUDA
-1886;AL;MONGOLIAN LETTER ALI GALI THREE BALUDA
-1887;AL;MONGOLIAN LETTER ALI GALI A
-1888;AL;MONGOLIAN LETTER ALI GALI I
-1889;AL;MONGOLIAN LETTER ALI GALI KA
-188A;AL;MONGOLIAN LETTER ALI GALI NGA
-188B;AL;MONGOLIAN LETTER ALI GALI CA
-188C;AL;MONGOLIAN LETTER ALI GALI TTA
-188D;AL;MONGOLIAN LETTER ALI GALI TTHA
-188E;AL;MONGOLIAN LETTER ALI GALI DDA
-188F;AL;MONGOLIAN LETTER ALI GALI NNA
-1890;AL;MONGOLIAN LETTER ALI GALI TA
-1891;AL;MONGOLIAN LETTER ALI GALI DA
-1892;AL;MONGOLIAN LETTER ALI GALI PA
-1893;AL;MONGOLIAN LETTER ALI GALI PHA
-1894;AL;MONGOLIAN LETTER ALI GALI SSA
-1895;AL;MONGOLIAN LETTER ALI GALI ZHA
-1896;AL;MONGOLIAN LETTER ALI GALI ZA
-1897;AL;MONGOLIAN LETTER ALI GALI AH
-1898;AL;MONGOLIAN LETTER TODO ALI GALI TA
-1899;AL;MONGOLIAN LETTER TODO ALI GALI ZHA
-189A;AL;MONGOLIAN LETTER MANCHU ALI GALI GHA
-189B;AL;MONGOLIAN LETTER MANCHU ALI GALI NGA
-189C;AL;MONGOLIAN LETTER MANCHU ALI GALI CA
-189D;AL;MONGOLIAN LETTER MANCHU ALI GALI JHA
-189E;AL;MONGOLIAN LETTER MANCHU ALI GALI TTA
-189F;AL;MONGOLIAN LETTER MANCHU ALI GALI DDHA
-18A0;AL;MONGOLIAN LETTER MANCHU ALI GALI TA
-18A1;AL;MONGOLIAN LETTER MANCHU ALI GALI DHA
-18A2;AL;MONGOLIAN LETTER MANCHU ALI GALI SSA
-18A3;AL;MONGOLIAN LETTER MANCHU ALI GALI CYA
-18A4;AL;MONGOLIAN LETTER MANCHU ALI GALI ZHA
-18A5;AL;MONGOLIAN LETTER MANCHU ALI GALI ZA
-18A6;AL;MONGOLIAN LETTER ALI GALI HALF U
-18A7;AL;MONGOLIAN LETTER ALI GALI HALF YA
-18A8;AL;MONGOLIAN LETTER MANCHU ALI GALI BHA
-18A9;CM;MONGOLIAN LETTER ALI GALI DAGALGA
-1E00;AL;LATIN CAPITAL LETTER A WITH RING BELOW
-1E01;AL;LATIN SMALL LETTER A WITH RING BELOW
-1E02;AL;LATIN CAPITAL LETTER B WITH DOT ABOVE
-1E03;AL;LATIN SMALL LETTER B WITH DOT ABOVE
-1E04;AL;LATIN CAPITAL LETTER B WITH DOT BELOW
-1E05;AL;LATIN SMALL LETTER B WITH DOT BELOW
-1E06;AL;LATIN CAPITAL LETTER B WITH LINE BELOW
-1E07;AL;LATIN SMALL LETTER B WITH LINE BELOW
-1E08;AL;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
-1E09;AL;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
-1E0A;AL;LATIN CAPITAL LETTER D WITH DOT ABOVE
-1E0B;AL;LATIN SMALL LETTER D WITH DOT ABOVE
-1E0C;AL;LATIN CAPITAL LETTER D WITH DOT BELOW
-1E0D;AL;LATIN SMALL LETTER D WITH DOT BELOW
-1E0E;AL;LATIN CAPITAL LETTER D WITH LINE BELOW
-1E0F;AL;LATIN SMALL LETTER D WITH LINE BELOW
-1E10;AL;LATIN CAPITAL LETTER D WITH CEDILLA
-1E11;AL;LATIN SMALL LETTER D WITH CEDILLA
-1E12;AL;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
-1E13;AL;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
-1E14;AL;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
-1E15;AL;LATIN SMALL LETTER E WITH MACRON AND GRAVE
-1E16;AL;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
-1E17;AL;LATIN SMALL LETTER E WITH MACRON AND ACUTE
-1E18;AL;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
-1E19;AL;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
-1E1A;AL;LATIN CAPITAL LETTER E WITH TILDE BELOW
-1E1B;AL;LATIN SMALL LETTER E WITH TILDE BELOW
-1E1C;AL;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
-1E1D;AL;LATIN SMALL LETTER E WITH CEDILLA AND BREVE
-1E1E;AL;LATIN CAPITAL LETTER F WITH DOT ABOVE
-1E1F;AL;LATIN SMALL LETTER F WITH DOT ABOVE
-1E20;AL;LATIN CAPITAL LETTER G WITH MACRON
-1E21;AL;LATIN SMALL LETTER G WITH MACRON
-1E22;AL;LATIN CAPITAL LETTER H WITH DOT ABOVE
-1E23;AL;LATIN SMALL LETTER H WITH DOT ABOVE
-1E24;AL;LATIN CAPITAL LETTER H WITH DOT BELOW
-1E25;AL;LATIN SMALL LETTER H WITH DOT BELOW
-1E26;AL;LATIN CAPITAL LETTER H WITH DIAERESIS
-1E27;AL;LATIN SMALL LETTER H WITH DIAERESIS
-1E28;AL;LATIN CAPITAL LETTER H WITH CEDILLA
-1E29;AL;LATIN SMALL LETTER H WITH CEDILLA
-1E2A;AL;LATIN CAPITAL LETTER H WITH BREVE BELOW
-1E2B;AL;LATIN SMALL LETTER H WITH BREVE BELOW
-1E2C;AL;LATIN CAPITAL LETTER I WITH TILDE BELOW
-1E2D;AL;LATIN SMALL LETTER I WITH TILDE BELOW
-1E2E;AL;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
-1E2F;AL;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
-1E30;AL;LATIN CAPITAL LETTER K WITH ACUTE
-1E31;AL;LATIN SMALL LETTER K WITH ACUTE
-1E32;AL;LATIN CAPITAL LETTER K WITH DOT BELOW
-1E33;AL;LATIN SMALL LETTER K WITH DOT BELOW
-1E34;AL;LATIN CAPITAL LETTER K WITH LINE BELOW
-1E35;AL;LATIN SMALL LETTER K WITH LINE BELOW
-1E36;AL;LATIN CAPITAL LETTER L WITH DOT BELOW
-1E37;AL;LATIN SMALL LETTER L WITH DOT BELOW
-1E38;AL;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
-1E39;AL;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
-1E3A;AL;LATIN CAPITAL LETTER L WITH LINE BELOW
-1E3B;AL;LATIN SMALL LETTER L WITH LINE BELOW
-1E3C;AL;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
-1E3D;AL;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
-1E3E;AL;LATIN CAPITAL LETTER M WITH ACUTE
-1E3F;AL;LATIN SMALL LETTER M WITH ACUTE
-1E40;AL;LATIN CAPITAL LETTER M WITH DOT ABOVE
-1E41;AL;LATIN SMALL LETTER M WITH DOT ABOVE
-1E42;AL;LATIN CAPITAL LETTER M WITH DOT BELOW
-1E43;AL;LATIN SMALL LETTER M WITH DOT BELOW
-1E44;AL;LATIN CAPITAL LETTER N WITH DOT ABOVE
-1E45;AL;LATIN SMALL LETTER N WITH DOT ABOVE
-1E46;AL;LATIN CAPITAL LETTER N WITH DOT BELOW
-1E47;AL;LATIN SMALL LETTER N WITH DOT BELOW
-1E48;AL;LATIN CAPITAL LETTER N WITH LINE BELOW
-1E49;AL;LATIN SMALL LETTER N WITH LINE BELOW
-1E4A;AL;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
-1E4B;AL;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
-1E4C;AL;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
-1E4D;AL;LATIN SMALL LETTER O WITH TILDE AND ACUTE
-1E4E;AL;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
-1E4F;AL;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
-1E50;AL;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
-1E51;AL;LATIN SMALL LETTER O WITH MACRON AND GRAVE
-1E52;AL;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
-1E53;AL;LATIN SMALL LETTER O WITH MACRON AND ACUTE
-1E54;AL;LATIN CAPITAL LETTER P WITH ACUTE
-1E55;AL;LATIN SMALL LETTER P WITH ACUTE
-1E56;AL;LATIN CAPITAL LETTER P WITH DOT ABOVE
-1E57;AL;LATIN SMALL LETTER P WITH DOT ABOVE
-1E58;AL;LATIN CAPITAL LETTER R WITH DOT ABOVE
-1E59;AL;LATIN SMALL LETTER R WITH DOT ABOVE
-1E5A;AL;LATIN CAPITAL LETTER R WITH DOT BELOW
-1E5B;AL;LATIN SMALL LETTER R WITH DOT BELOW
-1E5C;AL;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
-1E5D;AL;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
-1E5E;AL;LATIN CAPITAL LETTER R WITH LINE BELOW
-1E5F;AL;LATIN SMALL LETTER R WITH LINE BELOW
-1E60;AL;LATIN CAPITAL LETTER S WITH DOT ABOVE
-1E61;AL;LATIN SMALL LETTER S WITH DOT ABOVE
-1E62;AL;LATIN CAPITAL LETTER S WITH DOT BELOW
-1E63;AL;LATIN SMALL LETTER S WITH DOT BELOW
-1E64;AL;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
-1E65;AL;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
-1E66;AL;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
-1E67;AL;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
-1E68;AL;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
-1E69;AL;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
-1E6A;AL;LATIN CAPITAL LETTER T WITH DOT ABOVE
-1E6B;AL;LATIN SMALL LETTER T WITH DOT ABOVE
-1E6C;AL;LATIN CAPITAL LETTER T WITH DOT BELOW
-1E6D;AL;LATIN SMALL LETTER T WITH DOT BELOW
-1E6E;AL;LATIN CAPITAL LETTER T WITH LINE BELOW
-1E6F;AL;LATIN SMALL LETTER T WITH LINE BELOW
-1E70;AL;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
-1E71;AL;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
-1E72;AL;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
-1E73;AL;LATIN SMALL LETTER U WITH DIAERESIS BELOW
-1E74;AL;LATIN CAPITAL LETTER U WITH TILDE BELOW
-1E75;AL;LATIN SMALL LETTER U WITH TILDE BELOW
-1E76;AL;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
-1E77;AL;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
-1E78;AL;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
-1E79;AL;LATIN SMALL LETTER U WITH TILDE AND ACUTE
-1E7A;AL;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
-1E7B;AL;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
-1E7C;AL;LATIN CAPITAL LETTER V WITH TILDE
-1E7D;AL;LATIN SMALL LETTER V WITH TILDE
-1E7E;AL;LATIN CAPITAL LETTER V WITH DOT BELOW
-1E7F;AL;LATIN SMALL LETTER V WITH DOT BELOW
-1E80;AL;LATIN CAPITAL LETTER W WITH GRAVE
-1E81;AL;LATIN SMALL LETTER W WITH GRAVE
-1E82;AL;LATIN CAPITAL LETTER W WITH ACUTE
-1E83;AL;LATIN SMALL LETTER W WITH ACUTE
-1E84;AL;LATIN CAPITAL LETTER W WITH DIAERESIS
-1E85;AL;LATIN SMALL LETTER W WITH DIAERESIS
-1E86;AL;LATIN CAPITAL LETTER W WITH DOT ABOVE
-1E87;AL;LATIN SMALL LETTER W WITH DOT ABOVE
-1E88;AL;LATIN CAPITAL LETTER W WITH DOT BELOW
-1E89;AL;LATIN SMALL LETTER W WITH DOT BELOW
-1E8A;AL;LATIN CAPITAL LETTER X WITH DOT ABOVE
-1E8B;AL;LATIN SMALL LETTER X WITH DOT ABOVE
-1E8C;AL;LATIN CAPITAL LETTER X WITH DIAERESIS
-1E8D;AL;LATIN SMALL LETTER X WITH DIAERESIS
-1E8E;AL;LATIN CAPITAL LETTER Y WITH DOT ABOVE
-1E8F;AL;LATIN SMALL LETTER Y WITH DOT ABOVE
-1E90;AL;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
-1E91;AL;LATIN SMALL LETTER Z WITH CIRCUMFLEX
-1E92;AL;LATIN CAPITAL LETTER Z WITH DOT BELOW
-1E93;AL;LATIN SMALL LETTER Z WITH DOT BELOW
-1E94;AL;LATIN CAPITAL LETTER Z WITH LINE BELOW
-1E95;AL;LATIN SMALL LETTER Z WITH LINE BELOW
-1E96;AL;LATIN SMALL LETTER H WITH LINE BELOW
-1E97;AL;LATIN SMALL LETTER T WITH DIAERESIS
-1E98;AL;LATIN SMALL LETTER W WITH RING ABOVE
-1E99;AL;LATIN SMALL LETTER Y WITH RING ABOVE
-1E9A;AL;LATIN SMALL LETTER A WITH RIGHT HALF RING
-1E9B;AL;LATIN SMALL LETTER LONG S WITH DOT ABOVE
-1EA0;AL;LATIN CAPITAL LETTER A WITH DOT BELOW
-1EA1;AL;LATIN SMALL LETTER A WITH DOT BELOW
-1EA2;AL;LATIN CAPITAL LETTER A WITH HOOK ABOVE
-1EA3;AL;LATIN SMALL LETTER A WITH HOOK ABOVE
-1EA4;AL;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-1EA5;AL;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
-1EA6;AL;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-1EA7;AL;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
-1EA8;AL;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1EA9;AL;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1EAA;AL;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-1EAB;AL;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
-1EAC;AL;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1EAD;AL;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1EAE;AL;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-1EAF;AL;LATIN SMALL LETTER A WITH BREVE AND ACUTE
-1EB0;AL;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-1EB1;AL;LATIN SMALL LETTER A WITH BREVE AND GRAVE
-1EB2;AL;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-1EB3;AL;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
-1EB4;AL;LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-1EB5;AL;LATIN SMALL LETTER A WITH BREVE AND TILDE
-1EB6;AL;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-1EB7;AL;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
-1EB8;AL;LATIN CAPITAL LETTER E WITH DOT BELOW
-1EB9;AL;LATIN SMALL LETTER E WITH DOT BELOW
-1EBA;AL;LATIN CAPITAL LETTER E WITH HOOK ABOVE
-1EBB;AL;LATIN SMALL LETTER E WITH HOOK ABOVE
-1EBC;AL;LATIN CAPITAL LETTER E WITH TILDE
-1EBD;AL;LATIN SMALL LETTER E WITH TILDE
-1EBE;AL;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-1EBF;AL;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
-1EC0;AL;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-1EC1;AL;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
-1EC2;AL;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1EC3;AL;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1EC4;AL;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-1EC5;AL;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
-1EC6;AL;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1EC7;AL;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1EC8;AL;LATIN CAPITAL LETTER I WITH HOOK ABOVE
-1EC9;AL;LATIN SMALL LETTER I WITH HOOK ABOVE
-1ECA;AL;LATIN CAPITAL LETTER I WITH DOT BELOW
-1ECB;AL;LATIN SMALL LETTER I WITH DOT BELOW
-1ECC;AL;LATIN CAPITAL LETTER O WITH DOT BELOW
-1ECD;AL;LATIN SMALL LETTER O WITH DOT BELOW
-1ECE;AL;LATIN CAPITAL LETTER O WITH HOOK ABOVE
-1ECF;AL;LATIN SMALL LETTER O WITH HOOK ABOVE
-1ED0;AL;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ED1;AL;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ED2;AL;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ED3;AL;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ED4;AL;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ED5;AL;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ED6;AL;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-1ED7;AL;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
-1ED8;AL;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1ED9;AL;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1EDA;AL;LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-1EDB;AL;LATIN SMALL LETTER O WITH HORN AND ACUTE
-1EDC;AL;LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-1EDD;AL;LATIN SMALL LETTER O WITH HORN AND GRAVE
-1EDE;AL;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-1EDF;AL;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
-1EE0;AL;LATIN CAPITAL LETTER O WITH HORN AND TILDE
-1EE1;AL;LATIN SMALL LETTER O WITH HORN AND TILDE
-1EE2;AL;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-1EE3;AL;LATIN SMALL LETTER O WITH HORN AND DOT BELOW
-1EE4;AL;LATIN CAPITAL LETTER U WITH DOT BELOW
-1EE5;AL;LATIN SMALL LETTER U WITH DOT BELOW
-1EE6;AL;LATIN CAPITAL LETTER U WITH HOOK ABOVE
-1EE7;AL;LATIN SMALL LETTER U WITH HOOK ABOVE
-1EE8;AL;LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-1EE9;AL;LATIN SMALL LETTER U WITH HORN AND ACUTE
-1EEA;AL;LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-1EEB;AL;LATIN SMALL LETTER U WITH HORN AND GRAVE
-1EEC;AL;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-1EED;AL;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
-1EEE;AL;LATIN CAPITAL LETTER U WITH HORN AND TILDE
-1EEF;AL;LATIN SMALL LETTER U WITH HORN AND TILDE
-1EF0;AL;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-1EF1;AL;LATIN SMALL LETTER U WITH HORN AND DOT BELOW
-1EF2;AL;LATIN CAPITAL LETTER Y WITH GRAVE
-1EF3;AL;LATIN SMALL LETTER Y WITH GRAVE
-1EF4;AL;LATIN CAPITAL LETTER Y WITH DOT BELOW
-1EF5;AL;LATIN SMALL LETTER Y WITH DOT BELOW
-1EF6;AL;LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-1EF7;AL;LATIN SMALL LETTER Y WITH HOOK ABOVE
-1EF8;AL;LATIN CAPITAL LETTER Y WITH TILDE
-1EF9;AL;LATIN SMALL LETTER Y WITH TILDE
-1F00;AL;GREEK SMALL LETTER ALPHA WITH PSILI
-1F01;AL;GREEK SMALL LETTER ALPHA WITH DASIA
-1F02;AL;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
-1F03;AL;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
-1F04;AL;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
-1F05;AL;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
-1F06;AL;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1F07;AL;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1F08;AL;GREEK CAPITAL LETTER ALPHA WITH PSILI
-1F09;AL;GREEK CAPITAL LETTER ALPHA WITH DASIA
-1F0A;AL;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
-1F0B;AL;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
-1F0C;AL;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
-1F0D;AL;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
-1F0E;AL;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1F0F;AL;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1F10;AL;GREEK SMALL LETTER EPSILON WITH PSILI
-1F11;AL;GREEK SMALL LETTER EPSILON WITH DASIA
-1F12;AL;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
-1F13;AL;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
-1F14;AL;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
-1F15;AL;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-1F18;AL;GREEK CAPITAL LETTER EPSILON WITH PSILI
-1F19;AL;GREEK CAPITAL LETTER EPSILON WITH DASIA
-1F1A;AL;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
-1F1B;AL;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
-1F1C;AL;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
-1F1D;AL;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-1F20;AL;GREEK SMALL LETTER ETA WITH PSILI
-1F21;AL;GREEK SMALL LETTER ETA WITH DASIA
-1F22;AL;GREEK SMALL LETTER ETA WITH PSILI AND VARIA
-1F23;AL;GREEK SMALL LETTER ETA WITH DASIA AND VARIA
-1F24;AL;GREEK SMALL LETTER ETA WITH PSILI AND OXIA
-1F25;AL;GREEK SMALL LETTER ETA WITH DASIA AND OXIA
-1F26;AL;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
-1F27;AL;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
-1F28;AL;GREEK CAPITAL LETTER ETA WITH PSILI
-1F29;AL;GREEK CAPITAL LETTER ETA WITH DASIA
-1F2A;AL;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
-1F2B;AL;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
-1F2C;AL;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
-1F2D;AL;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
-1F2E;AL;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
-1F2F;AL;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
-1F30;AL;GREEK SMALL LETTER IOTA WITH PSILI
-1F31;AL;GREEK SMALL LETTER IOTA WITH DASIA
-1F32;AL;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
-1F33;AL;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
-1F34;AL;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
-1F35;AL;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
-1F36;AL;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
-1F37;AL;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
-1F38;AL;GREEK CAPITAL LETTER IOTA WITH PSILI
-1F39;AL;GREEK CAPITAL LETTER IOTA WITH DASIA
-1F3A;AL;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
-1F3B;AL;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
-1F3C;AL;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
-1F3D;AL;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
-1F3E;AL;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
-1F3F;AL;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
-1F40;AL;GREEK SMALL LETTER OMICRON WITH PSILI
-1F41;AL;GREEK SMALL LETTER OMICRON WITH DASIA
-1F42;AL;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
-1F43;AL;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
-1F44;AL;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
-1F45;AL;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-1F48;AL;GREEK CAPITAL LETTER OMICRON WITH PSILI
-1F49;AL;GREEK CAPITAL LETTER OMICRON WITH DASIA
-1F4A;AL;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
-1F4B;AL;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
-1F4C;AL;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
-1F4D;AL;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-1F50;AL;GREEK SMALL LETTER UPSILON WITH PSILI
-1F51;AL;GREEK SMALL LETTER UPSILON WITH DASIA
-1F52;AL;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1F53;AL;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
-1F54;AL;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1F55;AL;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
-1F56;AL;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1F57;AL;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1F59;AL;GREEK CAPITAL LETTER UPSILON WITH DASIA
-1F5B;AL;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-1F5D;AL;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-1F5F;AL;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1F60;AL;GREEK SMALL LETTER OMEGA WITH PSILI
-1F61;AL;GREEK SMALL LETTER OMEGA WITH DASIA
-1F62;AL;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
-1F63;AL;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
-1F64;AL;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
-1F65;AL;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
-1F66;AL;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1F67;AL;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1F68;AL;GREEK CAPITAL LETTER OMEGA WITH PSILI
-1F69;AL;GREEK CAPITAL LETTER OMEGA WITH DASIA
-1F6A;AL;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
-1F6B;AL;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
-1F6C;AL;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
-1F6D;AL;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
-1F6E;AL;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1F6F;AL;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1F70;AL;GREEK SMALL LETTER ALPHA WITH VARIA
-1F71;AL;GREEK SMALL LETTER ALPHA WITH OXIA
-1F72;AL;GREEK SMALL LETTER EPSILON WITH VARIA
-1F73;AL;GREEK SMALL LETTER EPSILON WITH OXIA
-1F74;AL;GREEK SMALL LETTER ETA WITH VARIA
-1F75;AL;GREEK SMALL LETTER ETA WITH OXIA
-1F76;AL;GREEK SMALL LETTER IOTA WITH VARIA
-1F77;AL;GREEK SMALL LETTER IOTA WITH OXIA
-1F78;AL;GREEK SMALL LETTER OMICRON WITH VARIA
-1F79;AL;GREEK SMALL LETTER OMICRON WITH OXIA
-1F7A;AL;GREEK SMALL LETTER UPSILON WITH VARIA
-1F7B;AL;GREEK SMALL LETTER UPSILON WITH OXIA
-1F7C;AL;GREEK SMALL LETTER OMEGA WITH VARIA
-1F7D;AL;GREEK SMALL LETTER OMEGA WITH OXIA
-1F80;AL;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1F81;AL;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1F82;AL;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F83;AL;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F84;AL;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F85;AL;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F86;AL;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F87;AL;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F88;AL;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F89;AL;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F8A;AL;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8B;AL;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8C;AL;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8D;AL;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8E;AL;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F;AL;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F90;AL;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1F91;AL;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1F92;AL;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F93;AL;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F94;AL;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F95;AL;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F96;AL;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F97;AL;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F98;AL;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F99;AL;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F9A;AL;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9B;AL;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9C;AL;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9D;AL;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9E;AL;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F;AL;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FA0;AL;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1FA1;AL;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1FA2;AL;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1FA3;AL;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1FA4;AL;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1FA5;AL;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1FA6;AL;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1FA7;AL;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1FA8;AL;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA9;AL;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FAA;AL;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAB;AL;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAC;AL;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAD;AL;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAE;AL;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF;AL;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FB0;AL;GREEK SMALL LETTER ALPHA WITH VRACHY
-1FB1;AL;GREEK SMALL LETTER ALPHA WITH MACRON
-1FB2;AL;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1FB3;AL;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1FB4;AL;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FB6;AL;GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1FB7;AL;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FB8;AL;GREEK CAPITAL LETTER ALPHA WITH VRACHY
-1FB9;AL;GREEK CAPITAL LETTER ALPHA WITH MACRON
-1FBA;AL;GREEK CAPITAL LETTER ALPHA WITH VARIA
-1FBB;AL;GREEK CAPITAL LETTER ALPHA WITH OXIA
-1FBC;AL;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FBD;AL;GREEK KORONIS
-1FBE;AL;GREEK PROSGEGRAMMENI
-1FBF;AL;GREEK PSILI
-1FC0;AL;GREEK PERISPOMENI
-1FC1;AL;GREEK DIALYTIKA AND PERISPOMENI
-1FC2;AL;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1FC3;AL;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1FC4;AL;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FC6;AL;GREEK SMALL LETTER ETA WITH PERISPOMENI
-1FC7;AL;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FC8;AL;GREEK CAPITAL LETTER EPSILON WITH VARIA
-1FC9;AL;GREEK CAPITAL LETTER EPSILON WITH OXIA
-1FCA;AL;GREEK CAPITAL LETTER ETA WITH VARIA
-1FCB;AL;GREEK CAPITAL LETTER ETA WITH OXIA
-1FCC;AL;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FCD;AL;GREEK PSILI AND VARIA
-1FCE;AL;GREEK PSILI AND OXIA
-1FCF;AL;GREEK PSILI AND PERISPOMENI
-1FD0;AL;GREEK SMALL LETTER IOTA WITH VRACHY
-1FD1;AL;GREEK SMALL LETTER IOTA WITH MACRON
-1FD2;AL;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1FD3;AL;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6;AL;GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1FD7;AL;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1FD8;AL;GREEK CAPITAL LETTER IOTA WITH VRACHY
-1FD9;AL;GREEK CAPITAL LETTER IOTA WITH MACRON
-1FDA;AL;GREEK CAPITAL LETTER IOTA WITH VARIA
-1FDB;AL;GREEK CAPITAL LETTER IOTA WITH OXIA
-1FDD;AL;GREEK DASIA AND VARIA
-1FDE;AL;GREEK DASIA AND OXIA
-1FDF;AL;GREEK DASIA AND PERISPOMENI
-1FE0;AL;GREEK SMALL LETTER UPSILON WITH VRACHY
-1FE1;AL;GREEK SMALL LETTER UPSILON WITH MACRON
-1FE2;AL;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1FE3;AL;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1FE4;AL;GREEK SMALL LETTER RHO WITH PSILI
-1FE5;AL;GREEK SMALL LETTER RHO WITH DASIA
-1FE6;AL;GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1FE7;AL;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1FE8;AL;GREEK CAPITAL LETTER UPSILON WITH VRACHY
-1FE9;AL;GREEK CAPITAL LETTER UPSILON WITH MACRON
-1FEA;AL;GREEK CAPITAL LETTER UPSILON WITH VARIA
-1FEB;AL;GREEK CAPITAL LETTER UPSILON WITH OXIA
-1FEC;AL;GREEK CAPITAL LETTER RHO WITH DASIA
-1FED;AL;GREEK DIALYTIKA AND VARIA
-1FEE;AL;GREEK DIALYTIKA AND OXIA
-1FEF;AL;GREEK VARIA
-1FF2;AL;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1FF3;AL;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1FF4;AL;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-1FF6;AL;GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-1FF7;AL;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FF8;AL;GREEK CAPITAL LETTER OMICRON WITH VARIA
-1FF9;AL;GREEK CAPITAL LETTER OMICRON WITH OXIA
-1FFA;AL;GREEK CAPITAL LETTER OMEGA WITH VARIA
-1FFB;AL;GREEK CAPITAL LETTER OMEGA WITH OXIA
-1FFC;AL;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-1FFD;AL;GREEK OXIA
-1FFE;AL;GREEK DASIA
-2000;BA;EN QUAD
-2001;BA;EM QUAD
-2002;BA;EN SPACE
-2003;BA;EM SPACE
-2004;BA;THREE-PER-EM SPACE
-2005;BA;FOUR-PER-EM SPACE
-2006;BA;SIX-PER-EM SPACE
-2007;GL;FIGURE SPACE
-2008;BA;PUNCTUATION SPACE
-2009;BA;THIN SPACE
-200A;BA;HAIR SPACE
-200B;ZW;ZERO WIDTH SPACE
-200C;CM;ZERO WIDTH NON-JOINER
-200D;CM;ZERO WIDTH JOINER
-200E;CM;LEFT-TO-RIGHT MARK
-200F;CM;RIGHT-TO-LEFT MARK
-2010;BA;HYPHEN
-2011;GL;NON-BREAKING HYPHEN
-2012;BA;FIGURE DASH
-2013;BA;EN DASH
-2014;B2;EM DASH
-2015;AL;HORIZONTAL BAR
-2016;AI;DOUBLE VERTICAL LINE
-2017;AL;DOUBLE LOW LINE
-2018;QU;LEFT SINGLE QUOTATION MARK
-2019;QU;RIGHT SINGLE QUOTATION MARK
-201A;OP;SINGLE LOW-9 QUOTATION MARK
-201B;QU;SINGLE HIGH-REVERSED-9 QUOTATION MARK
-201C;QU;LEFT DOUBLE QUOTATION MARK
-201D;QU;RIGHT DOUBLE QUOTATION MARK
-201E;OP;DOUBLE LOW-9 QUOTATION MARK
-201F;QU;DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-2020;AI;DAGGER
-2021;AI;DOUBLE DAGGER
-2022;AL;BULLET
-2023;AL;TRIANGULAR BULLET
-2024;IN;ONE DOT LEADER
-2025;IN;TWO DOT LEADER
-2026;IN;HORIZONTAL ELLIPSIS
-2027;BA;HYPHENATION POINT
-2028;BK;LINE SEPARATOR
-2029;BK;PARAGRAPH SEPARATOR
-202A;CM;LEFT-TO-RIGHT EMBEDDING
-202B;CM;RIGHT-TO-LEFT EMBEDDING
-202C;CM;POP DIRECTIONAL FORMATTING
-202D;CM;LEFT-TO-RIGHT OVERRIDE
-202E;CM;RIGHT-TO-LEFT OVERRIDE
-202F;GL;NARROW NO-BREAK SPACE
-2030;PO;PER MILLE SIGN
-2031;PO;PER TEN THOUSAND SIGN
-2032;PO;PRIME
-2033;PO;DOUBLE PRIME
-2034;PO;TRIPLE PRIME
-2035;PO;REVERSED PRIME
-2036;PO;REVERSED DOUBLE PRIME
-2037;PO;REVERSED TRIPLE PRIME
-2038;AL;CARET
-2039;QU;SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-203A;QU;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-203B;AI;REFERENCE MARK
-203C;NS;DOUBLE EXCLAMATION MARK
-203D;AL;INTERROBANG
-203E;AL;OVERLINE
-203F;AL;UNDERTIE
-2040;AL;CHARACTER TIE
-2041;AL;CARET INSERTION POINT
-2042;AL;ASTERISM
-2043;AL;HYPHEN BULLET
-2044;NS;FRACTION SLASH
-2045;OP;LEFT SQUARE BRACKET WITH QUILL
-2046;CL;RIGHT SQUARE BRACKET WITH QUILL
-2048;AL;QUESTION EXCLAMATION MARK
-2049;AL;EXCLAMATION QUESTION MARK
-204A;AL;TIRONIAN SIGN ET
-204B;AL;REVERSED PILCROW SIGN
-204C;AL;BLACK LEFTWARDS BULLET
-204D;AL;BLACK RIGHTWARDS BULLET
-206A;CM;INHIBIT SYMMETRIC SWAPPING
-206B;CM;ACTIVATE SYMMETRIC SWAPPING
-206C;CM;INHIBIT ARABIC FORM SHAPING
-206D;CM;ACTIVATE ARABIC FORM SHAPING
-206E;CM;NATIONAL DIGIT SHAPES
-206F;CM;NOMINAL DIGIT SHAPES
-2070;AL;SUPERSCRIPT ZERO
-2074;AI;SUPERSCRIPT FOUR
-2075;AL;SUPERSCRIPT FIVE
-2076;AL;SUPERSCRIPT SIX
-2077;AL;SUPERSCRIPT SEVEN
-2078;AL;SUPERSCRIPT EIGHT
-2079;AL;SUPERSCRIPT NINE
-207A;AL;SUPERSCRIPT PLUS SIGN
-207B;AL;SUPERSCRIPT MINUS
-207C;AL;SUPERSCRIPT EQUALS SIGN
-207D;OP;SUPERSCRIPT LEFT PARENTHESIS
-207E;CL;SUPERSCRIPT RIGHT PARENTHESIS
-207F;AI;SUPERSCRIPT LATIN SMALL LETTER N
-2080;AL;SUBSCRIPT ZERO
-2081;AI;SUBSCRIPT ONE
-2082;AI;SUBSCRIPT TWO
-2083;AI;SUBSCRIPT THREE
-2084;AI;SUBSCRIPT FOUR
-2085;AL;SUBSCRIPT FIVE
-2086;AL;SUBSCRIPT SIX
-2087;AL;SUBSCRIPT SEVEN
-2088;AL;SUBSCRIPT EIGHT
-2089;AL;SUBSCRIPT NINE
-208A;AL;SUBSCRIPT PLUS SIGN
-208B;AL;SUBSCRIPT MINUS
-208C;AL;SUBSCRIPT EQUALS SIGN
-208D;OP;SUBSCRIPT LEFT PARENTHESIS
-208E;CL;SUBSCRIPT RIGHT PARENTHESIS
-20A0;PR;EURO-CURRENCY SIGN
-20A1;PR;COLON SIGN
-20A2;PR;CRUZEIRO SIGN
-20A3;PR;FRENCH FRANC SIGN
-20A4;PR;LIRA SIGN
-20A5;PR;MILL SIGN
-20A6;PR;NAIRA SIGN
-20A7;PO;PESETA SIGN
-20A8;PR;RUPEE SIGN
-20A9;PR;WON SIGN
-20AA;PR;NEW SHEQEL SIGN
-20AB;PR;DONG SIGN
-20AC;PR;EURO SIGN
-20AD;PR;KIP SIGN
-20AE;PR;TUGRIK SIGN
-20AF;PR;DRACHMA SIGN
-20D0;CM;COMBINING LEFT HARPOON ABOVE
-20D1;CM;COMBINING RIGHT HARPOON ABOVE
-20D2;CM;COMBINING LONG VERTICAL LINE OVERLAY
-20D3;CM;COMBINING SHORT VERTICAL LINE OVERLAY
-20D4;CM;COMBINING ANTICLOCKWISE ARROW ABOVE
-20D5;CM;COMBINING CLOCKWISE ARROW ABOVE
-20D6;CM;COMBINING LEFT ARROW ABOVE
-20D7;CM;COMBINING RIGHT ARROW ABOVE
-20D8;CM;COMBINING RING OVERLAY
-20D9;CM;COMBINING CLOCKWISE RING OVERLAY
-20DA;CM;COMBINING ANTICLOCKWISE RING OVERLAY
-20DB;CM;COMBINING THREE DOTS ABOVE
-20DC;CM;COMBINING FOUR DOTS ABOVE
-20DD;CM;COMBINING ENCLOSING CIRCLE
-20DE;CM;COMBINING ENCLOSING SQUARE
-20DF;CM;COMBINING ENCLOSING DIAMOND
-20E0;CM;COMBINING ENCLOSING CIRCLE BACKSLASH
-20E1;CM;COMBINING LEFT RIGHT ARROW ABOVE
-20E2;CM;COMBINING ENCLOSING SCREEN
-20E3;CM;COMBINING ENCLOSING KEYCAP
-2100;AL;ACCOUNT OF
-2101;AL;ADDRESSED TO THE SUBJECT
-2102;AL;DOUBLE-STRUCK CAPITAL C
-2103;PO;DEGREE CELSIUS
-2104;AL;CENTRE LINE SYMBOL
-2105;AI;CARE OF
-2106;AL;CADA UNA
-2107;AL;EULER CONSTANT
-2108;AL;SCRUPLE
-2109;PO;DEGREE FAHRENHEIT
-210A;AL;SCRIPT SMALL G
-210B;AL;SCRIPT CAPITAL H
-210C;AL;BLACK-LETTER CAPITAL H
-210D;AL;DOUBLE-STRUCK CAPITAL H
-210E;AL;PLANCK CONSTANT
-210F;AL;PLANCK CONSTANT OVER TWO PI
-2110;AL;SCRIPT CAPITAL I
-2111;AL;BLACK-LETTER CAPITAL I
-2112;AL;SCRIPT CAPITAL L
-2113;AI;SCRIPT SMALL L
-2114;AL;L B BAR SYMBOL
-2115;AL;DOUBLE-STRUCK CAPITAL N
-2116;PR;NUMERO SIGN
-2117;AL;SOUND RECORDING COPYRIGHT
-2118;AL;SCRIPT CAPITAL P
-2119;AL;DOUBLE-STRUCK CAPITAL P
-211A;AL;DOUBLE-STRUCK CAPITAL Q
-211B;AL;SCRIPT CAPITAL R
-211C;AL;BLACK-LETTER CAPITAL R
-211D;AL;DOUBLE-STRUCK CAPITAL R
-211E;AL;PRESCRIPTION TAKE
-211F;AL;RESPONSE
-2120;AL;SERVICE MARK
-2121;AI;TELEPHONE SIGN
-2122;AI;TRADE MARK SIGN
-2123;AL;VERSICLE
-2124;AL;DOUBLE-STRUCK CAPITAL Z
-2125;AL;OUNCE SIGN
-2126;PO;OHM SIGN
-2127;AL;INVERTED OHM SIGN
-2128;AL;BLACK-LETTER CAPITAL Z
-2129;AL;TURNED GREEK SMALL LETTER IOTA
-212A;AL;KELVIN SIGN
-212B;AI;ANGSTROM SIGN
-212C;AL;SCRIPT CAPITAL B
-212D;AL;BLACK-LETTER CAPITAL C
-212E;AL;ESTIMATED SYMBOL
-212F;AL;SCRIPT SMALL E
-2130;AL;SCRIPT CAPITAL E
-2131;AL;SCRIPT CAPITAL F
-2132;AL;TURNED CAPITAL F
-2133;AL;SCRIPT CAPITAL M
-2134;AL;SCRIPT SMALL O
-2135;AL;ALEF SYMBOL
-2136;AL;BET SYMBOL
-2137;AL;GIMEL SYMBOL
-2138;AL;DALET SYMBOL
-2139;AL;INFORMATION SOURCE
-213A;AL;ROTATED CAPITAL Q
-2153;AL;VULGAR FRACTION ONE THIRD
-2154;AI;VULGAR FRACTION TWO THIRDS
-2155;AI;VULGAR FRACTION ONE FIFTH
-2156;AL;VULGAR FRACTION TWO FIFTHS
-2157;AL;VULGAR FRACTION THREE FIFTHS
-2158;AL;VULGAR FRACTION FOUR FIFTHS
-2159;AL;VULGAR FRACTION ONE SIXTH
-215A;AL;VULGAR FRACTION FIVE SIXTHS
-215B;AI;VULGAR FRACTION ONE EIGHTH
-215C;AL;VULGAR FRACTION THREE EIGHTHS
-215D;AL;VULGAR FRACTION FIVE EIGHTHS
-215E;AI;VULGAR FRACTION SEVEN EIGHTHS
-215F;AL;FRACTION NUMERATOR ONE
-2160;AI;ROMAN NUMERAL ONE
-2161;AI;ROMAN NUMERAL TWO
-2162;AI;ROMAN NUMERAL THREE
-2163;AI;ROMAN NUMERAL FOUR
-2164;AI;ROMAN NUMERAL FIVE
-2165;AI;ROMAN NUMERAL SIX
-2166;AI;ROMAN NUMERAL SEVEN
-2167;AI;ROMAN NUMERAL EIGHT
-2168;AI;ROMAN NUMERAL NINE
-2169;AI;ROMAN NUMERAL TEN
-216A;AI;ROMAN NUMERAL ELEVEN
-216B;AI;ROMAN NUMERAL TWELVE
-216C;AL;ROMAN NUMERAL FIFTY
-216D;AL;ROMAN NUMERAL ONE HUNDRED
-216E;AL;ROMAN NUMERAL FIVE HUNDRED
-216F;AL;ROMAN NUMERAL ONE THOUSAND
-2170;AI;SMALL ROMAN NUMERAL ONE
-2171;AI;SMALL ROMAN NUMERAL TWO
-2172;AI;SMALL ROMAN NUMERAL THREE
-2173;AI;SMALL ROMAN NUMERAL FOUR
-2174;AI;SMALL ROMAN NUMERAL FIVE
-2175;AI;SMALL ROMAN NUMERAL SIX
-2176;AI;SMALL ROMAN NUMERAL SEVEN
-2177;AI;SMALL ROMAN NUMERAL EIGHT
-2178;AI;SMALL ROMAN NUMERAL NINE
-2179;AI;SMALL ROMAN NUMERAL TEN
-217A;AL;SMALL ROMAN NUMERAL ELEVEN
-217B;AL;SMALL ROMAN NUMERAL TWELVE
-217C;AL;SMALL ROMAN NUMERAL FIFTY
-217D;AL;SMALL ROMAN NUMERAL ONE HUNDRED
-217E;AL;SMALL ROMAN NUMERAL FIVE HUNDRED
-217F;AL;SMALL ROMAN NUMERAL ONE THOUSAND
-2180;AL;ROMAN NUMERAL ONE THOUSAND C D
-2181;AL;ROMAN NUMERAL FIVE THOUSAND
-2182;AL;ROMAN NUMERAL TEN THOUSAND
-2183;AL;ROMAN NUMERAL REVERSED ONE HUNDRED
-2190;AI;LEFTWARDS ARROW
-2191;AI;UPWARDS ARROW
-2192;AI;RIGHTWARDS ARROW
-2193;AI;DOWNWARDS ARROW
-2194;AI;LEFT RIGHT ARROW
-2195;AI;UP DOWN ARROW
-2196;AI;NORTH WEST ARROW
-2197;AI;NORTH EAST ARROW
-2198;AI;SOUTH EAST ARROW
-2199;AI;SOUTH WEST ARROW
-219A;AL;LEFTWARDS ARROW WITH STROKE
-219B;AL;RIGHTWARDS ARROW WITH STROKE
-219C;AL;LEFTWARDS WAVE ARROW
-219D;AL;RIGHTWARDS WAVE ARROW
-219E;AL;LEFTWARDS TWO HEADED ARROW
-219F;AL;UPWARDS TWO HEADED ARROW
-21A0;AL;RIGHTWARDS TWO HEADED ARROW
-21A1;AL;DOWNWARDS TWO HEADED ARROW
-21A2;AL;LEFTWARDS ARROW WITH TAIL
-21A3;AL;RIGHTWARDS ARROW WITH TAIL
-21A4;AL;LEFTWARDS ARROW FROM BAR
-21A5;AL;UPWARDS ARROW FROM BAR
-21A6;AL;RIGHTWARDS ARROW FROM BAR
-21A7;AL;DOWNWARDS ARROW FROM BAR
-21A8;AL;UP DOWN ARROW WITH BASE
-21A9;AL;LEFTWARDS ARROW WITH HOOK
-21AA;AL;RIGHTWARDS ARROW WITH HOOK
-21AB;AL;LEFTWARDS ARROW WITH LOOP
-21AC;AL;RIGHTWARDS ARROW WITH LOOP
-21AD;AL;LEFT RIGHT WAVE ARROW
-21AE;AL;LEFT RIGHT ARROW WITH STROKE
-21AF;AL;DOWNWARDS ZIGZAG ARROW
-21B0;AL;UPWARDS ARROW WITH TIP LEFTWARDS
-21B1;AL;UPWARDS ARROW WITH TIP RIGHTWARDS
-21B2;AL;DOWNWARDS ARROW WITH TIP LEFTWARDS
-21B3;AL;DOWNWARDS ARROW WITH TIP RIGHTWARDS
-21B4;AL;RIGHTWARDS ARROW WITH CORNER DOWNWARDS
-21B5;AL;DOWNWARDS ARROW WITH CORNER LEFTWARDS
-21B6;AL;ANTICLOCKWISE TOP SEMICIRCLE ARROW
-21B7;AL;CLOCKWISE TOP SEMICIRCLE ARROW
-21B8;AL;NORTH WEST ARROW TO LONG BAR
-21B9;AL;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
-21BA;AL;ANTICLOCKWISE OPEN CIRCLE ARROW
-21BB;AL;CLOCKWISE OPEN CIRCLE ARROW
-21BC;AL;LEFTWARDS HARPOON WITH BARB UPWARDS
-21BD;AL;LEFTWARDS HARPOON WITH BARB DOWNWARDS
-21BE;AL;UPWARDS HARPOON WITH BARB RIGHTWARDS
-21BF;AL;UPWARDS HARPOON WITH BARB LEFTWARDS
-21C0;AL;RIGHTWARDS HARPOON WITH BARB UPWARDS
-21C1;AL;RIGHTWARDS HARPOON WITH BARB DOWNWARDS
-21C2;AL;DOWNWARDS HARPOON WITH BARB RIGHTWARDS
-21C3;AL;DOWNWARDS HARPOON WITH BARB LEFTWARDS
-21C4;AL;RIGHTWARDS ARROW OVER LEFTWARDS ARROW
-21C5;AL;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
-21C6;AL;LEFTWARDS ARROW OVER RIGHTWARDS ARROW
-21C7;AL;LEFTWARDS PAIRED ARROWS
-21C8;AL;UPWARDS PAIRED ARROWS
-21C9;AL;RIGHTWARDS PAIRED ARROWS
-21CA;AL;DOWNWARDS PAIRED ARROWS
-21CB;AL;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
-21CC;AL;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
-21CD;AL;LEFTWARDS DOUBLE ARROW WITH STROKE
-21CE;AL;LEFT RIGHT DOUBLE ARROW WITH STROKE
-21CF;AL;RIGHTWARDS DOUBLE ARROW WITH STROKE
-21D0;AL;LEFTWARDS DOUBLE ARROW
-21D1;AL;UPWARDS DOUBLE ARROW
-21D2;AI;RIGHTWARDS DOUBLE ARROW
-21D3;AL;DOWNWARDS DOUBLE ARROW
-21D4;AI;LEFT RIGHT DOUBLE ARROW
-21D5;AL;UP DOWN DOUBLE ARROW
-21D6;AL;NORTH WEST DOUBLE ARROW
-21D7;AL;NORTH EAST DOUBLE ARROW
-21D8;AL;SOUTH EAST DOUBLE ARROW
-21D9;AL;SOUTH WEST DOUBLE ARROW
-21DA;AL;LEFTWARDS TRIPLE ARROW
-21DB;AL;RIGHTWARDS TRIPLE ARROW
-21DC;AL;LEFTWARDS SQUIGGLE ARROW
-21DD;AL;RIGHTWARDS SQUIGGLE ARROW
-21DE;AL;UPWARDS ARROW WITH DOUBLE STROKE
-21DF;AL;DOWNWARDS ARROW WITH DOUBLE STROKE
-21E0;AL;LEFTWARDS DASHED ARROW
-21E1;AL;UPWARDS DASHED ARROW
-21E2;AL;RIGHTWARDS DASHED ARROW
-21E3;AL;DOWNWARDS DASHED ARROW
-21E4;AL;LEFTWARDS ARROW TO BAR
-21E5;AL;RIGHTWARDS ARROW TO BAR
-21E6;AL;LEFTWARDS WHITE ARROW
-21E7;AL;UPWARDS WHITE ARROW
-21E8;AL;RIGHTWARDS WHITE ARROW
-21E9;AL;DOWNWARDS WHITE ARROW
-21EA;AL;UPWARDS WHITE ARROW FROM BAR
-21EB;AL;UPWARDS WHITE ARROW ON PEDESTAL
-21EC;AL;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
-21ED;AL;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
-21EE;AL;UPWARDS WHITE DOUBLE ARROW
-21EF;AL;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
-21F0;AL;RIGHTWARDS WHITE ARROW FROM WALL
-21F1;AL;NORTH WEST ARROW TO CORNER
-21F2;AL;SOUTH EAST ARROW TO CORNER
-21F3;AL;UP DOWN WHITE ARROW
-2200;AI;FOR ALL
-2201;AL;COMPLEMENT
-2202;AI;PARTIAL DIFFERENTIAL
-2203;AI;THERE EXISTS
-2204;AL;THERE DOES NOT EXIST
-2205;AL;EMPTY SET
-2206;AL;INCREMENT
-2207;AI;NABLA
-2208;AI;ELEMENT OF
-2209;AL;NOT AN ELEMENT OF
-220A;AL;SMALL ELEMENT OF
-220B;AI;CONTAINS AS MEMBER
-220C;AL;DOES NOT CONTAIN AS MEMBER
-220D;AL;SMALL CONTAINS AS MEMBER
-220E;AL;END OF PROOF
-220F;AI;N-ARY PRODUCT
-2210;AL;N-ARY COPRODUCT
-2211;AI;N-ARY SUMMATION
-2212;PR;MINUS SIGN
-2213;PR;MINUS-OR-PLUS SIGN
-2214;AL;DOT PLUS
-2215;AI;DIVISION SLASH
-2216;AL;SET MINUS
-2217;AL;ASTERISK OPERATOR
-2218;AL;RING OPERATOR
-2219;AL;BULLET OPERATOR
-221A;AI;SQUARE ROOT
-221B;AL;CUBE ROOT
-221C;AL;FOURTH ROOT
-221D;AI;PROPORTIONAL TO
-221E;AI;INFINITY
-221F;AI;RIGHT ANGLE
-2220;AI;ANGLE
-2221;AL;MEASURED ANGLE
-2222;AL;SPHERICAL ANGLE
-2223;AI;DIVIDES
-2224;AL;DOES NOT DIVIDE
-2225;AI;PARALLEL TO
-2226;AL;NOT PARALLEL TO
-2227;AI;LOGICAL AND
-2228;AI;LOGICAL OR
-2229;AI;INTERSECTION
-222A;AI;UNION
-222B;AI;INTEGRAL
-222C;AI;DOUBLE INTEGRAL
-222D;AL;TRIPLE INTEGRAL
-222E;AI;CONTOUR INTEGRAL
-222F;AL;SURFACE INTEGRAL
-2230;AL;VOLUME INTEGRAL
-2231;AL;CLOCKWISE INTEGRAL
-2232;AL;CLOCKWISE CONTOUR INTEGRAL
-2233;AL;ANTICLOCKWISE CONTOUR INTEGRAL
-2234;AI;THEREFORE
-2235;AI;BECAUSE
-2236;AI;RATIO
-2237;AI;PROPORTION
-2238;AL;DOT MINUS
-2239;AL;EXCESS
-223A;AL;GEOMETRIC PROPORTION
-223B;AL;HOMOTHETIC
-223C;AI;TILDE OPERATOR
-223D;AI;REVERSED TILDE
-223E;AL;INVERTED LAZY S
-223F;AL;SINE WAVE
-2240;AL;WREATH PRODUCT
-2241;AL;NOT TILDE
-2242;AL;MINUS TILDE
-2243;AL;ASYMPTOTICALLY EQUAL TO
-2244;AL;NOT ASYMPTOTICALLY EQUAL TO
-2245;AL;APPROXIMATELY EQUAL TO
-2246;AL;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
-2247;AL;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
-2248;AI;ALMOST EQUAL TO
-2249;AL;NOT ALMOST EQUAL TO
-224A;AL;ALMOST EQUAL OR EQUAL TO
-224B;AL;TRIPLE TILDE
-224C;AI;ALL EQUAL TO
-224D;AL;EQUIVALENT TO
-224E;AL;GEOMETRICALLY EQUIVALENT TO
-224F;AL;DIFFERENCE BETWEEN
-2250;AL;APPROACHES THE LIMIT
-2251;AL;GEOMETRICALLY EQUAL TO
-2252;AI;APPROXIMATELY EQUAL TO OR THE IMAGE OF
-2253;AL;IMAGE OF OR APPROXIMATELY EQUAL TO
-2254;AL;COLON EQUALS
-2255;AL;EQUALS COLON
-2256;AL;RING IN EQUAL TO
-2257;AL;RING EQUAL TO
-2258;AL;CORRESPONDS TO
-2259;AL;ESTIMATES
-225A;AL;EQUIANGULAR TO
-225B;AL;STAR EQUALS
-225C;AL;DELTA EQUAL TO
-225D;AL;EQUAL TO BY DEFINITION
-225E;AL;MEASURED BY
-225F;AL;QUESTIONED EQUAL TO
-2260;AI;NOT EQUAL TO
-2261;AI;IDENTICAL TO
-2262;AL;NOT IDENTICAL TO
-2263;AL;STRICTLY EQUIVALENT TO
-2264;AI;LESS-THAN OR EQUAL TO
-2265;AI;GREATER-THAN OR EQUAL TO
-2266;AI;LESS-THAN OVER EQUAL TO
-2267;AI;GREATER-THAN OVER EQUAL TO
-2268;AL;LESS-THAN BUT NOT EQUAL TO
-2269;AL;GREATER-THAN BUT NOT EQUAL TO
-226A;AI;MUCH LESS-THAN
-226B;AI;MUCH GREATER-THAN
-226C;AL;BETWEEN
-226D;AL;NOT EQUIVALENT TO
-226E;AI;NOT LESS-THAN
-226F;AI;NOT GREATER-THAN
-2270;AL;NEITHER LESS-THAN NOR EQUAL TO
-2271;AL;NEITHER GREATER-THAN NOR EQUAL TO
-2272;AL;LESS-THAN OR EQUIVALENT TO
-2273;AL;GREATER-THAN OR EQUIVALENT TO
-2274;AL;NEITHER LESS-THAN NOR EQUIVALENT TO
-2275;AL;NEITHER GREATER-THAN NOR EQUIVALENT TO
-2276;AL;LESS-THAN OR GREATER-THAN
-2277;AL;GREATER-THAN OR LESS-THAN
-2278;AL;NEITHER LESS-THAN NOR GREATER-THAN
-2279;AL;NEITHER GREATER-THAN NOR LESS-THAN
-227A;AL;PRECEDES
-227B;AL;SUCCEEDS
-227C;AL;PRECEDES OR EQUAL TO
-227D;AL;SUCCEEDS OR EQUAL TO
-227E;AL;PRECEDES OR EQUIVALENT TO
-227F;AL;SUCCEEDS OR EQUIVALENT TO
-2280;AL;DOES NOT PRECEDE
-2281;AL;DOES NOT SUCCEED
-2282;AI;SUBSET OF
-2283;AI;SUPERSET OF
-2284;AL;NOT A SUBSET OF
-2285;AL;NOT A SUPERSET OF
-2286;AI;SUBSET OF OR EQUAL TO
-2287;AI;SUPERSET OF OR EQUAL TO
-2288;AL;NEITHER A SUBSET OF NOR EQUAL TO
-2289;AL;NEITHER A SUPERSET OF NOR EQUAL TO
-228A;AL;SUBSET OF WITH NOT EQUAL TO
-228B;AL;SUPERSET OF WITH NOT EQUAL TO
-228C;AL;MULTISET
-228D;AL;MULTISET MULTIPLICATION
-228E;AL;MULTISET UNION
-228F;AL;SQUARE IMAGE OF
-2290;AL;SQUARE ORIGINAL OF
-2291;AL;SQUARE IMAGE OF OR EQUAL TO
-2292;AL;SQUARE ORIGINAL OF OR EQUAL TO
-2293;AL;SQUARE CAP
-2294;AL;SQUARE CUP
-2295;AI;CIRCLED PLUS
-2296;AL;CIRCLED MINUS
-2297;AL;CIRCLED TIMES
-2298;AL;CIRCLED DIVISION SLASH
-2299;AI;CIRCLED DOT OPERATOR
-229A;AL;CIRCLED RING OPERATOR
-229B;AL;CIRCLED ASTERISK OPERATOR
-229C;AL;CIRCLED EQUALS
-229D;AL;CIRCLED DASH
-229E;AL;SQUARED PLUS
-229F;AL;SQUARED MINUS
-22A0;AL;SQUARED TIMES
-22A1;AL;SQUARED DOT OPERATOR
-22A2;AL;RIGHT TACK
-22A3;AL;LEFT TACK
-22A4;AL;DOWN TACK
-22A5;AI;UP TACK
-22A6;AL;ASSERTION
-22A7;AL;MODELS
-22A8;AL;TRUE
-22A9;AL;FORCES
-22AA;AL;TRIPLE VERTICAL BAR RIGHT TURNSTILE
-22AB;AL;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-22AC;AL;DOES NOT PROVE
-22AD;AL;NOT TRUE
-22AE;AL;DOES NOT FORCE
-22AF;AL;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-22B0;AL;PRECEDES UNDER RELATION
-22B1;AL;SUCCEEDS UNDER RELATION
-22B2;AL;NORMAL SUBGROUP OF
-22B3;AL;CONTAINS AS NORMAL SUBGROUP
-22B4;AL;NORMAL SUBGROUP OF OR EQUAL TO
-22B5;AL;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
-22B6;AL;ORIGINAL OF
-22B7;AL;IMAGE OF
-22B8;AL;MULTIMAP
-22B9;AL;HERMITIAN CONJUGATE MATRIX
-22BA;AL;INTERCALATE
-22BB;AL;XOR
-22BC;AL;NAND
-22BD;AL;NOR
-22BE;AL;RIGHT ANGLE WITH ARC
-22BF;AI;RIGHT TRIANGLE
-22C0;AL;N-ARY LOGICAL AND
-22C1;AL;N-ARY LOGICAL OR
-22C2;AL;N-ARY INTERSECTION
-22C3;AL;N-ARY UNION
-22C4;AL;DIAMOND OPERATOR
-22C5;AL;DOT OPERATOR
-22C6;AL;STAR OPERATOR
-22C7;AL;DIVISION TIMES
-22C8;AL;BOWTIE
-22C9;AL;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
-22CA;AL;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
-22CB;AL;LEFT SEMIDIRECT PRODUCT
-22CC;AL;RIGHT SEMIDIRECT PRODUCT
-22CD;AL;REVERSED TILDE EQUALS
-22CE;AL;CURLY LOGICAL OR
-22CF;AL;CURLY LOGICAL AND
-22D0;AL;DOUBLE SUBSET
-22D1;AL;DOUBLE SUPERSET
-22D2;AL;DOUBLE INTERSECTION
-22D3;AL;DOUBLE UNION
-22D4;AL;PITCHFORK
-22D5;AL;EQUAL AND PARALLEL TO
-22D6;AL;LESS-THAN WITH DOT
-22D7;AL;GREATER-THAN WITH DOT
-22D8;AL;VERY MUCH LESS-THAN
-22D9;AL;VERY MUCH GREATER-THAN
-22DA;AL;LESS-THAN EQUAL TO OR GREATER-THAN
-22DB;AL;GREATER-THAN EQUAL TO OR LESS-THAN
-22DC;AL;EQUAL TO OR LESS-THAN
-22DD;AL;EQUAL TO OR GREATER-THAN
-22DE;AL;EQUAL TO OR PRECEDES
-22DF;AL;EQUAL TO OR SUCCEEDS
-22E0;AL;DOES NOT PRECEDE OR EQUAL
-22E1;AL;DOES NOT SUCCEED OR EQUAL
-22E2;AL;NOT SQUARE IMAGE OF OR EQUAL TO
-22E3;AL;NOT SQUARE ORIGINAL OF OR EQUAL TO
-22E4;AL;SQUARE IMAGE OF OR NOT EQUAL TO
-22E5;AL;SQUARE ORIGINAL OF OR NOT EQUAL TO
-22E6;AL;LESS-THAN BUT NOT EQUIVALENT TO
-22E7;AL;GREATER-THAN BUT NOT EQUIVALENT TO
-22E8;AL;PRECEDES BUT NOT EQUIVALENT TO
-22E9;AL;SUCCEEDS BUT NOT EQUIVALENT TO
-22EA;AL;NOT NORMAL SUBGROUP OF
-22EB;AL;DOES NOT CONTAIN AS NORMAL SUBGROUP
-22EC;AL;NOT NORMAL SUBGROUP OF OR EQUAL TO
-22ED;AL;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
-22EE;AL;VERTICAL ELLIPSIS
-22EF;AL;MIDLINE HORIZONTAL ELLIPSIS
-22F0;AL;UP RIGHT DIAGONAL ELLIPSIS
-22F1;AL;DOWN RIGHT DIAGONAL ELLIPSIS
-2300;AL;DIAMETER SIGN
-2301;AL;ELECTRIC ARROW
-2302;AL;HOUSE
-2303;AL;UP ARROWHEAD
-2304;AL;DOWN ARROWHEAD
-2305;AL;PROJECTIVE
-2306;AL;PERSPECTIVE
-2307;AL;WAVY LINE
-2308;AL;LEFT CEILING
-2309;AL;RIGHT CEILING
-230A;AL;LEFT FLOOR
-230B;AL;RIGHT FLOOR
-230C;AL;BOTTOM RIGHT CROP
-230D;AL;BOTTOM LEFT CROP
-230E;AL;TOP RIGHT CROP
-230F;AL;TOP LEFT CROP
-2310;AL;REVERSED NOT SIGN
-2311;AL;SQUARE LOZENGE
-2312;AI;ARC
-2313;AL;SEGMENT
-2314;AL;SECTOR
-2315;AL;TELEPHONE RECORDER
-2316;AL;POSITION INDICATOR
-2317;AL;VIEWDATA SQUARE
-2318;AL;PLACE OF INTEREST SIGN
-2319;AL;TURNED NOT SIGN
-231A;AL;WATCH
-231B;AL;HOURGLASS
-231C;AL;TOP LEFT CORNER
-231D;AL;TOP RIGHT CORNER
-231E;AL;BOTTOM LEFT CORNER
-231F;AL;BOTTOM RIGHT CORNER
-2320;AL;TOP HALF INTEGRAL
-2321;AL;BOTTOM HALF INTEGRAL
-2322;AL;FROWN
-2323;AL;SMILE
-2324;AL;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
-2325;AL;OPTION KEY
-2326;AL;ERASE TO THE RIGHT
-2327;AL;X IN A RECTANGLE BOX
-2328;AL;KEYBOARD
-2329;OP;LEFT-POINTING ANGLE BRACKET
-232A;CL;RIGHT-POINTING ANGLE BRACKET
-232B;AL;ERASE TO THE LEFT
-232C;AL;BENZENE RING
-232D;AL;CYLINDRICITY
-232E;AL;ALL AROUND-PROFILE
-232F;AL;SYMMETRY
-2330;AL;TOTAL RUNOUT
-2331;AL;DIMENSION ORIGIN
-2332;AL;CONICAL TAPER
-2333;AL;SLOPE
-2334;AL;COUNTERBORE
-2335;AL;COUNTERSINK
-2336;AL;APL FUNCTIONAL SYMBOL I-BEAM
-2337;AL;APL FUNCTIONAL SYMBOL SQUISH QUAD
-2338;AL;APL FUNCTIONAL SYMBOL QUAD EQUAL
-2339;AL;APL FUNCTIONAL SYMBOL QUAD DIVIDE
-233A;AL;APL FUNCTIONAL SYMBOL QUAD DIAMOND
-233B;AL;APL FUNCTIONAL SYMBOL QUAD JOT
-233C;AL;APL FUNCTIONAL SYMBOL QUAD CIRCLE
-233D;AL;APL FUNCTIONAL SYMBOL CIRCLE STILE
-233E;AL;APL FUNCTIONAL SYMBOL CIRCLE JOT
-233F;AL;APL FUNCTIONAL SYMBOL SLASH BAR
-2340;AL;APL FUNCTIONAL SYMBOL BACKSLASH BAR
-2341;AL;APL FUNCTIONAL SYMBOL QUAD SLASH
-2342;AL;APL FUNCTIONAL SYMBOL QUAD BACKSLASH
-2343;AL;APL FUNCTIONAL SYMBOL QUAD LESS-THAN
-2344;AL;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
-2345;AL;APL FUNCTIONAL SYMBOL LEFTWARDS VANE
-2346;AL;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
-2347;AL;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
-2348;AL;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
-2349;AL;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
-234A;AL;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
-234B;AL;APL FUNCTIONAL SYMBOL DELTA STILE
-234C;AL;APL FUNCTIONAL SYMBOL QUAD DOWN CARET
-234D;AL;APL FUNCTIONAL SYMBOL QUAD DELTA
-234E;AL;APL FUNCTIONAL SYMBOL DOWN TACK JOT
-234F;AL;APL FUNCTIONAL SYMBOL UPWARDS VANE
-2350;AL;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
-2351;AL;APL FUNCTIONAL SYMBOL UP TACK OVERBAR
-2352;AL;APL FUNCTIONAL SYMBOL DEL STILE
-2353;AL;APL FUNCTIONAL SYMBOL QUAD UP CARET
-2354;AL;APL FUNCTIONAL SYMBOL QUAD DEL
-2355;AL;APL FUNCTIONAL SYMBOL UP TACK JOT
-2356;AL;APL FUNCTIONAL SYMBOL DOWNWARDS VANE
-2357;AL;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
-2358;AL;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
-2359;AL;APL FUNCTIONAL SYMBOL DELTA UNDERBAR
-235A;AL;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
-235B;AL;APL FUNCTIONAL SYMBOL JOT UNDERBAR
-235C;AL;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
-235D;AL;APL FUNCTIONAL SYMBOL UP SHOE JOT
-235E;AL;APL FUNCTIONAL SYMBOL QUOTE QUAD
-235F;AL;APL FUNCTIONAL SYMBOL CIRCLE STAR
-2360;AL;APL FUNCTIONAL SYMBOL QUAD COLON
-2361;AL;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
-2362;AL;APL FUNCTIONAL SYMBOL DEL DIAERESIS
-2363;AL;APL FUNCTIONAL SYMBOL STAR DIAERESIS
-2364;AL;APL FUNCTIONAL SYMBOL JOT DIAERESIS
-2365;AL;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
-2366;AL;APL FUNCTIONAL SYMBOL DOWN SHOE STILE
-2367;AL;APL FUNCTIONAL SYMBOL LEFT SHOE STILE
-2368;AL;APL FUNCTIONAL SYMBOL TILDE DIAERESIS
-2369;AL;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
-236A;AL;APL FUNCTIONAL SYMBOL COMMA BAR
-236B;AL;APL FUNCTIONAL SYMBOL DEL TILDE
-236C;AL;APL FUNCTIONAL SYMBOL ZILDE
-236D;AL;APL FUNCTIONAL SYMBOL STILE TILDE
-236E;AL;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
-236F;AL;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
-2370;AL;APL FUNCTIONAL SYMBOL QUAD QUESTION
-2371;AL;APL FUNCTIONAL SYMBOL DOWN CARET TILDE
-2372;AL;APL FUNCTIONAL SYMBOL UP CARET TILDE
-2373;AL;APL FUNCTIONAL SYMBOL IOTA
-2374;AL;APL FUNCTIONAL SYMBOL RHO
-2375;AL;APL FUNCTIONAL SYMBOL OMEGA
-2376;AL;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
-2377;AL;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
-2378;AL;APL FUNCTIONAL SYMBOL IOTA UNDERBAR
-2379;AL;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
-237A;AL;APL FUNCTIONAL SYMBOL ALPHA
-237B;AL;NOT CHECK MARK
-237D;AL;SHOULDERED OPEN BOX
-237E;AL;BELL SYMBOL
-237F;AL;VERTICAL LINE WITH MIDDLE DOT
-2380;AL;INSERTION SYMBOL
-2381;AL;CONTINUOUS UNDERLINE SYMBOL
-2382;AL;DISCONTINUOUS UNDERLINE SYMBOL
-2383;AL;EMPHASIS SYMBOL
-2384;AL;COMPOSITION SYMBOL
-2385;AL;WHITE SQUARE WITH CENTRE VERTICAL LINE
-2386;AL;ENTER SYMBOL
-2387;AL;ALTERNATIVE KEY SYMBOL
-2388;AL;HELM SYMBOL
-2389;AL;CIRCLED HORIZONTAL BAR WITH NOTCH
-238A;AL;CIRCLED TRIANGLE DOWN
-238B;AL;BROKEN CIRCLE WITH NORTHWEST ARROW
-238C;AL;UNDO SYMBOL
-238D;AL;MONOSTABLE SYMBOL
-238E;AL;HYSTERESIS SYMBOL
-238F;AL;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
-2390;AL;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
-2391;AL;PASSIVE-PULL-DOWN-OUTPUT SYMBOL
-2392;AL;PASSIVE-PULL-UP-OUTPUT SYMBOL
-2393;AL;DIRECT CURRENT SYMBOL FORM TWO
-2394;AL;SOFTWARE-FUNCTION SYMBOL
-2395;AL;APL FUNCTIONAL SYMBOL QUAD
-2396;AL;DECIMAL SEPARATOR KEY SYMBOL
-2397;AL;PREVIOUS PAGE
-2398;AL;NEXT PAGE
-2399;AL;PRINT SCREEN SYMBOL
-239A;AL;CLEAR SCREEN SYMBOL
-2400;AL;SYMBOL FOR NULL
-2401;AL;SYMBOL FOR START OF HEADING
-2402;AL;SYMBOL FOR START OF TEXT
-2403;AL;SYMBOL FOR END OF TEXT
-2404;AL;SYMBOL FOR END OF TRANSMISSION
-2405;AL;SYMBOL FOR ENQUIRY
-2406;AL;SYMBOL FOR ACKNOWLEDGE
-2407;AL;SYMBOL FOR BELL
-2408;AL;SYMBOL FOR BACKSPACE
-2409;AL;SYMBOL FOR HORIZONTAL TABULATION
-240A;AL;SYMBOL FOR LINE FEED
-240B;AL;SYMBOL FOR VERTICAL TABULATION
-240C;AL;SYMBOL FOR FORM FEED
-240D;AL;SYMBOL FOR CARRIAGE RETURN
-240E;AL;SYMBOL FOR SHIFT OUT
-240F;AL;SYMBOL FOR SHIFT IN
-2410;AL;SYMBOL FOR DATA LINK ESCAPE
-2411;AL;SYMBOL FOR DEVICE CONTROL ONE
-2412;AL;SYMBOL FOR DEVICE CONTROL TWO
-2413;AL;SYMBOL FOR DEVICE CONTROL THREE
-2414;AL;SYMBOL FOR DEVICE CONTROL FOUR
-2415;AL;SYMBOL FOR NEGATIVE ACKNOWLEDGE
-2416;AL;SYMBOL FOR SYNCHRONOUS IDLE
-2417;AL;SYMBOL FOR END OF TRANSMISSION BLOCK
-2418;AL;SYMBOL FOR CANCEL
-2419;AL;SYMBOL FOR END OF MEDIUM
-241A;AL;SYMBOL FOR SUBSTITUTE
-241B;AL;SYMBOL FOR ESCAPE
-241C;AL;SYMBOL FOR FILE SEPARATOR
-241D;AL;SYMBOL FOR GROUP SEPARATOR
-241E;AL;SYMBOL FOR RECORD SEPARATOR
-241F;AL;SYMBOL FOR UNIT SEPARATOR
-2420;AL;SYMBOL FOR SPACE
-2421;AL;SYMBOL FOR DELETE
-2422;AL;BLANK SYMBOL
-2423;AL;OPEN BOX
-2424;AL;SYMBOL FOR NEWLINE
-2425;AL;SYMBOL FOR DELETE FORM TWO
-2426;AL;SYMBOL FOR SUBSTITUTE FORM TWO
-2440;AL;OCR HOOK
-2441;AL;OCR CHAIR
-2442;AL;OCR FORK
-2443;AL;OCR INVERTED FORK
-2444;AL;OCR BELT BUCKLE
-2445;AL;OCR BOW TIE
-2446;AL;OCR BRANCH BANK IDENTIFICATION
-2447;AL;OCR AMOUNT OF CHECK
-2448;AL;OCR DASH
-2449;AL;OCR CUSTOMER ACCOUNT NUMBER
-244A;AL;OCR DOUBLE BACKSLASH
-2460;AI;CIRCLED DIGIT ONE
-2461;AI;CIRCLED DIGIT TWO
-2462;AI;CIRCLED DIGIT THREE
-2463;AI;CIRCLED DIGIT FOUR
-2464;AI;CIRCLED DIGIT FIVE
-2465;AI;CIRCLED DIGIT SIX
-2466;AI;CIRCLED DIGIT SEVEN
-2467;AI;CIRCLED DIGIT EIGHT
-2468;AI;CIRCLED DIGIT NINE
-2469;AI;CIRCLED NUMBER TEN
-246A;AI;CIRCLED NUMBER ELEVEN
-246B;AI;CIRCLED NUMBER TWELVE
-246C;AI;CIRCLED NUMBER THIRTEEN
-246D;AI;CIRCLED NUMBER FOURTEEN
-246E;AI;CIRCLED NUMBER FIFTEEN
-246F;AI;CIRCLED NUMBER SIXTEEN
-2470;AI;CIRCLED NUMBER SEVENTEEN
-2471;AI;CIRCLED NUMBER EIGHTEEN
-2472;AI;CIRCLED NUMBER NINETEEN
-2473;AI;CIRCLED NUMBER TWENTY
-2474;AI;PARENTHESIZED DIGIT ONE
-2475;AI;PARENTHESIZED DIGIT TWO
-2476;AI;PARENTHESIZED DIGIT THREE
-2477;AI;PARENTHESIZED DIGIT FOUR
-2478;AI;PARENTHESIZED DIGIT FIVE
-2479;AI;PARENTHESIZED DIGIT SIX
-247A;AI;PARENTHESIZED DIGIT SEVEN
-247B;AI;PARENTHESIZED DIGIT EIGHT
-247C;AI;PARENTHESIZED DIGIT NINE
-247D;AI;PARENTHESIZED NUMBER TEN
-247E;AI;PARENTHESIZED NUMBER ELEVEN
-247F;AI;PARENTHESIZED NUMBER TWELVE
-2480;AI;PARENTHESIZED NUMBER THIRTEEN
-2481;AI;PARENTHESIZED NUMBER FOURTEEN
-2482;AI;PARENTHESIZED NUMBER FIFTEEN
-2483;AI;PARENTHESIZED NUMBER SIXTEEN
-2484;AI;PARENTHESIZED NUMBER SEVENTEEN
-2485;AI;PARENTHESIZED NUMBER EIGHTEEN
-2486;AI;PARENTHESIZED NUMBER NINETEEN
-2487;AI;PARENTHESIZED NUMBER TWENTY
-2488;AI;DIGIT ONE FULL STOP
-2489;AI;DIGIT TWO FULL STOP
-248A;AI;DIGIT THREE FULL STOP
-248B;AI;DIGIT FOUR FULL STOP
-248C;AI;DIGIT FIVE FULL STOP
-248D;AI;DIGIT SIX FULL STOP
-248E;AI;DIGIT SEVEN FULL STOP
-248F;AI;DIGIT EIGHT FULL STOP
-2490;AI;DIGIT NINE FULL STOP
-2491;AI;NUMBER TEN FULL STOP
-2492;AI;NUMBER ELEVEN FULL STOP
-2493;AI;NUMBER TWELVE FULL STOP
-2494;AI;NUMBER THIRTEEN FULL STOP
-2495;AI;NUMBER FOURTEEN FULL STOP
-2496;AI;NUMBER FIFTEEN FULL STOP
-2497;AI;NUMBER SIXTEEN FULL STOP
-2498;AI;NUMBER SEVENTEEN FULL STOP
-2499;AI;NUMBER EIGHTEEN FULL STOP
-249A;AI;NUMBER NINETEEN FULL STOP
-249B;AI;NUMBER TWENTY FULL STOP
-249C;AI;PARENTHESIZED LATIN SMALL LETTER A
-249D;AI;PARENTHESIZED LATIN SMALL LETTER B
-249E;AI;PARENTHESIZED LATIN SMALL LETTER C
-249F;AI;PARENTHESIZED LATIN SMALL LETTER D
-24A0;AI;PARENTHESIZED LATIN SMALL LETTER E
-24A1;AI;PARENTHESIZED LATIN SMALL LETTER F
-24A2;AI;PARENTHESIZED LATIN SMALL LETTER G
-24A3;AI;PARENTHESIZED LATIN SMALL LETTER H
-24A4;AI;PARENTHESIZED LATIN SMALL LETTER I
-24A5;AI;PARENTHESIZED LATIN SMALL LETTER J
-24A6;AI;PARENTHESIZED LATIN SMALL LETTER K
-24A7;AI;PARENTHESIZED LATIN SMALL LETTER L
-24A8;AI;PARENTHESIZED LATIN SMALL LETTER M
-24A9;AI;PARENTHESIZED LATIN SMALL LETTER N
-24AA;AI;PARENTHESIZED LATIN SMALL LETTER O
-24AB;AI;PARENTHESIZED LATIN SMALL LETTER P
-24AC;AI;PARENTHESIZED LATIN SMALL LETTER Q
-24AD;AI;PARENTHESIZED LATIN SMALL LETTER R
-24AE;AI;PARENTHESIZED LATIN SMALL LETTER S
-24AF;AI;PARENTHESIZED LATIN SMALL LETTER T
-24B0;AI;PARENTHESIZED LATIN SMALL LETTER U
-24B1;AI;PARENTHESIZED LATIN SMALL LETTER V
-24B2;AI;PARENTHESIZED LATIN SMALL LETTER W
-24B3;AI;PARENTHESIZED LATIN SMALL LETTER X
-24B4;AI;PARENTHESIZED LATIN SMALL LETTER Y
-24B5;AI;PARENTHESIZED LATIN SMALL LETTER Z
-24B6;AI;CIRCLED LATIN CAPITAL LETTER A
-24B7;AI;CIRCLED LATIN CAPITAL LETTER B
-24B8;AI;CIRCLED LATIN CAPITAL LETTER C
-24B9;AI;CIRCLED LATIN CAPITAL LETTER D
-24BA;AI;CIRCLED LATIN CAPITAL LETTER E
-24BB;AI;CIRCLED LATIN CAPITAL LETTER F
-24BC;AI;CIRCLED LATIN CAPITAL LETTER G
-24BD;AI;CIRCLED LATIN CAPITAL LETTER H
-24BE;AI;CIRCLED LATIN CAPITAL LETTER I
-24BF;AI;CIRCLED LATIN CAPITAL LETTER J
-24C0;AL;CIRCLED LATIN CAPITAL LETTER K
-24C1;AL;CIRCLED LATIN CAPITAL LETTER L
-24C2;AL;CIRCLED LATIN CAPITAL LETTER M
-24C3;AL;CIRCLED LATIN CAPITAL LETTER N
-24C4;AL;CIRCLED LATIN CAPITAL LETTER O
-24C5;AL;CIRCLED LATIN CAPITAL LETTER P
-24C6;AL;CIRCLED LATIN CAPITAL LETTER Q
-24C7;AL;CIRCLED LATIN CAPITAL LETTER R
-24C8;AL;CIRCLED LATIN CAPITAL LETTER S
-24C9;AL;CIRCLED LATIN CAPITAL LETTER T
-24CA;AL;CIRCLED LATIN CAPITAL LETTER U
-24CB;AL;CIRCLED LATIN CAPITAL LETTER V
-24CC;AL;CIRCLED LATIN CAPITAL LETTER W
-24CD;AL;CIRCLED LATIN CAPITAL LETTER X
-24CE;AL;CIRCLED LATIN CAPITAL LETTER Y
-24CF;AL;CIRCLED LATIN CAPITAL LETTER Z
-24D0;AI;CIRCLED LATIN SMALL LETTER A
-24D1;AI;CIRCLED LATIN SMALL LETTER B
-24D2;AI;CIRCLED LATIN SMALL LETTER C
-24D3;AI;CIRCLED LATIN SMALL LETTER D
-24D4;AI;CIRCLED LATIN SMALL LETTER E
-24D5;AI;CIRCLED LATIN SMALL LETTER F
-24D6;AI;CIRCLED LATIN SMALL LETTER G
-24D7;AI;CIRCLED LATIN SMALL LETTER H
-24D8;AI;CIRCLED LATIN SMALL LETTER I
-24D9;AI;CIRCLED LATIN SMALL LETTER J
-24DA;AI;CIRCLED LATIN SMALL LETTER K
-24DB;AI;CIRCLED LATIN SMALL LETTER L
-24DC;AI;CIRCLED LATIN SMALL LETTER M
-24DD;AI;CIRCLED LATIN SMALL LETTER N
-24DE;AI;CIRCLED LATIN SMALL LETTER O
-24DF;AI;CIRCLED LATIN SMALL LETTER P
-24E0;AI;CIRCLED LATIN SMALL LETTER Q
-24E1;AI;CIRCLED LATIN SMALL LETTER R
-24E2;AI;CIRCLED LATIN SMALL LETTER S
-24E3;AI;CIRCLED LATIN SMALL LETTER T
-24E4;AI;CIRCLED LATIN SMALL LETTER U
-24E5;AI;CIRCLED LATIN SMALL LETTER V
-24E6;AI;CIRCLED LATIN SMALL LETTER W
-24E7;AI;CIRCLED LATIN SMALL LETTER X
-24E8;AI;CIRCLED LATIN SMALL LETTER Y
-24E9;AI;CIRCLED LATIN SMALL LETTER Z
-24EA;AL;CIRCLED DIGIT ZERO
-2500;AI;BOX DRAWINGS LIGHT HORIZONTAL
-2501;AI;BOX DRAWINGS HEAVY HORIZONTAL
-2502;AI;BOX DRAWINGS LIGHT VERTICAL
-2503;AI;BOX DRAWINGS HEAVY VERTICAL
-2504;AI;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
-2505;AI;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
-2506;AI;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
-2507;AI;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
-2508;AI;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
-2509;AI;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
-250A;AI;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
-250B;AI;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
-250C;AI;BOX DRAWINGS LIGHT DOWN AND RIGHT
-250D;AI;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
-250E;AI;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
-250F;AI;BOX DRAWINGS HEAVY DOWN AND RIGHT
-2510;AI;BOX DRAWINGS LIGHT DOWN AND LEFT
-2511;AI;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
-2512;AI;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
-2513;AI;BOX DRAWINGS HEAVY DOWN AND LEFT
-2514;AI;BOX DRAWINGS LIGHT UP AND RIGHT
-2515;AI;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
-2516;AI;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
-2517;AI;BOX DRAWINGS HEAVY UP AND RIGHT
-2518;AI;BOX DRAWINGS LIGHT UP AND LEFT
-2519;AI;BOX DRAWINGS UP LIGHT AND LEFT HEAVY
-251A;AI;BOX DRAWINGS UP HEAVY AND LEFT LIGHT
-251B;AI;BOX DRAWINGS HEAVY UP AND LEFT
-251C;AI;BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-251D;AI;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
-251E;AI;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
-251F;AI;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
-2520;AI;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
-2521;AI;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
-2522;AI;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
-2523;AI;BOX DRAWINGS HEAVY VERTICAL AND RIGHT
-2524;AI;BOX DRAWINGS LIGHT VERTICAL AND LEFT
-2525;AI;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
-2526;AI;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
-2527;AI;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
-2528;AI;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
-2529;AI;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
-252A;AI;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
-252B;AI;BOX DRAWINGS HEAVY VERTICAL AND LEFT
-252C;AI;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-252D;AI;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
-252E;AI;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
-252F;AI;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
-2530;AI;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
-2531;AI;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
-2532;AI;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
-2533;AI;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
-2534;AI;BOX DRAWINGS LIGHT UP AND HORIZONTAL
-2535;AI;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
-2536;AI;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
-2537;AI;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
-2538;AI;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
-2539;AI;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
-253A;AI;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
-253B;AI;BOX DRAWINGS HEAVY UP AND HORIZONTAL
-253C;AI;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-253D;AI;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
-253E;AI;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
-253F;AI;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
-2540;AI;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
-2541;AI;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
-2542;AI;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
-2543;AI;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
-2544;AI;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
-2545;AI;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
-2546;AI;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
-2547;AI;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
-2548;AI;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
-2549;AI;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
-254A;AI;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
-254B;AI;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
-254C;AL;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
-254D;AL;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
-254E;AL;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
-254F;AL;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
-2550;AI;BOX DRAWINGS DOUBLE HORIZONTAL
-2551;AI;BOX DRAWINGS DOUBLE VERTICAL
-2552;AI;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-2553;AI;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-2554;AI;BOX DRAWINGS DOUBLE DOWN AND RIGHT
-2555;AI;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-2556;AI;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-2557;AI;BOX DRAWINGS DOUBLE DOWN AND LEFT
-2558;AI;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-2559;AI;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-255A;AI;BOX DRAWINGS DOUBLE UP AND RIGHT
-255B;AI;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-255C;AI;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-255D;AI;BOX DRAWINGS DOUBLE UP AND LEFT
-255E;AI;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-255F;AI;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-2560;AI;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-2561;AI;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-2562;AI;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-2563;AI;BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-2564;AI;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-2565;AI;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-2566;AI;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-2567;AI;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-2568;AI;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-2569;AI;BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-256A;AI;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-256B;AI;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-256C;AI;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-256D;AI;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
-256E;AI;BOX DRAWINGS LIGHT ARC DOWN AND LEFT
-256F;AI;BOX DRAWINGS LIGHT ARC UP AND LEFT
-2570;AI;BOX DRAWINGS LIGHT ARC UP AND RIGHT
-2571;AI;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
-2572;AI;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
-2573;AI;BOX DRAWINGS LIGHT DIAGONAL CROSS
-2574;AI;BOX DRAWINGS LIGHT LEFT
-2575;AL;BOX DRAWINGS LIGHT UP
-2576;AL;BOX DRAWINGS LIGHT RIGHT
-2577;AL;BOX DRAWINGS LIGHT DOWN
-2578;AL;BOX DRAWINGS HEAVY LEFT
-2579;AL;BOX DRAWINGS HEAVY UP
-257A;AL;BOX DRAWINGS HEAVY RIGHT
-257B;AL;BOX DRAWINGS HEAVY DOWN
-257C;AL;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
-257D;AL;BOX DRAWINGS LIGHT UP AND HEAVY DOWN
-257E;AL;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
-257F;AL;BOX DRAWINGS HEAVY UP AND LIGHT DOWN
-2580;AI;UPPER HALF BLOCK
-2581;AI;LOWER ONE EIGHTH BLOCK
-2582;AI;LOWER ONE QUARTER BLOCK
-2583;AI;LOWER THREE EIGHTHS BLOCK
-2584;AI;LOWER HALF BLOCK
-2585;AI;LOWER FIVE EIGHTHS BLOCK
-2586;AI;LOWER THREE QUARTERS BLOCK
-2587;AI;LOWER SEVEN EIGHTHS BLOCK
-2588;AI;FULL BLOCK
-2589;AI;LEFT SEVEN EIGHTHS BLOCK
-258A;AI;LEFT THREE QUARTERS BLOCK
-258B;AI;LEFT FIVE EIGHTHS BLOCK
-258C;AI;LEFT HALF BLOCK
-258D;AI;LEFT THREE EIGHTHS BLOCK
-258E;AI;LEFT ONE QUARTER BLOCK
-258F;AI;LEFT ONE EIGHTH BLOCK
-2590;AL;RIGHT HALF BLOCK
-2591;AL;LIGHT SHADE
-2592;AI;MEDIUM SHADE
-2593;AI;DARK SHADE
-2594;AI;UPPER ONE EIGHTH BLOCK
-2595;AI;RIGHT ONE EIGHTH BLOCK
-25A0;AI;BLACK SQUARE
-25A1;AI;WHITE SQUARE
-25A2;AL;WHITE SQUARE WITH ROUNDED CORNERS
-25A3;AI;WHITE SQUARE CONTAINING BLACK SMALL SQUARE
-25A4;AI;SQUARE WITH HORIZONTAL FILL
-25A5;AI;SQUARE WITH VERTICAL FILL
-25A6;AI;SQUARE WITH ORTHOGONAL CROSSHATCH FILL
-25A7;AI;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
-25A8;AI;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
-25A9;AI;SQUARE WITH DIAGONAL CROSSHATCH FILL
-25AA;AL;BLACK SMALL SQUARE
-25AB;AL;WHITE SMALL SQUARE
-25AC;AL;BLACK RECTANGLE
-25AD;AL;WHITE RECTANGLE
-25AE;AL;BLACK VERTICAL RECTANGLE
-25AF;AL;WHITE VERTICAL RECTANGLE
-25B0;AL;BLACK PARALLELOGRAM
-25B1;AL;WHITE PARALLELOGRAM
-25B2;AI;BLACK UP-POINTING TRIANGLE
-25B3;AI;WHITE UP-POINTING TRIANGLE
-25B4;AL;BLACK UP-POINTING SMALL TRIANGLE
-25B5;AL;WHITE UP-POINTING SMALL TRIANGLE
-25B6;AI;BLACK RIGHT-POINTING TRIANGLE
-25B7;AI;WHITE RIGHT-POINTING TRIANGLE
-25B8;AL;BLACK RIGHT-POINTING SMALL TRIANGLE
-25B9;AL;WHITE RIGHT-POINTING SMALL TRIANGLE
-25BA;AL;BLACK RIGHT-POINTING POINTER
-25BB;AL;WHITE RIGHT-POINTING POINTER
-25BC;AI;BLACK DOWN-POINTING TRIANGLE
-25BD;AI;WHITE DOWN-POINTING TRIANGLE
-25BE;AL;BLACK DOWN-POINTING SMALL TRIANGLE
-25BF;AL;WHITE DOWN-POINTING SMALL TRIANGLE
-25C0;AI;BLACK LEFT-POINTING TRIANGLE
-25C1;AI;WHITE LEFT-POINTING TRIANGLE
-25C2;AL;BLACK LEFT-POINTING SMALL TRIANGLE
-25C3;AL;WHITE LEFT-POINTING SMALL TRIANGLE
-25C4;AL;BLACK LEFT-POINTING POINTER
-25C5;AL;WHITE LEFT-POINTING POINTER
-25C6;AI;BLACK DIAMOND
-25C7;AI;WHITE DIAMOND
-25C8;AL;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-25C9;AL;FISHEYE
-25CA;AL;LOZENGE
-25CB;AI;WHITE CIRCLE
-25CC;AL;DOTTED CIRCLE
-25CD;AL;CIRCLE WITH VERTICAL FILL
-25CE;AI;BULLSEYE
-25CF;AI;BLACK CIRCLE
-25D0;AI;CIRCLE WITH LEFT HALF BLACK
-25D1;AI;CIRCLE WITH RIGHT HALF BLACK
-25D2;AL;CIRCLE WITH LOWER HALF BLACK
-25D3;AL;CIRCLE WITH UPPER HALF BLACK
-25D4;AL;CIRCLE WITH UPPER RIGHT QUADRANT BLACK
-25D5;AL;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
-25D6;AL;LEFT HALF BLACK CIRCLE
-25D7;AL;RIGHT HALF BLACK CIRCLE
-25D8;AL;INVERSE BULLET
-25D9;AL;INVERSE WHITE CIRCLE
-25DA;AL;UPPER HALF INVERSE WHITE CIRCLE
-25DB;AL;LOWER HALF INVERSE WHITE CIRCLE
-25DC;AL;UPPER LEFT QUADRANT CIRCULAR ARC
-25DD;AL;UPPER RIGHT QUADRANT CIRCULAR ARC
-25DE;AL;LOWER RIGHT QUADRANT CIRCULAR ARC
-25DF;AL;LOWER LEFT QUADRANT CIRCULAR ARC
-25E0;AL;UPPER HALF CIRCLE
-25E1;AL;LOWER HALF CIRCLE
-25E2;AI;BLACK LOWER RIGHT TRIANGLE
-25E3;AI;BLACK LOWER LEFT TRIANGLE
-25E4;AI;BLACK UPPER LEFT TRIANGLE
-25E5;AI;BLACK UPPER RIGHT TRIANGLE
-25E6;AL;WHITE BULLET
-25E7;AL;SQUARE WITH LEFT HALF BLACK
-25E8;AL;SQUARE WITH RIGHT HALF BLACK
-25E9;AL;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
-25EA;AL;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
-25EB;AL;WHITE SQUARE WITH VERTICAL BISECTING LINE
-25EC;AL;WHITE UP-POINTING TRIANGLE WITH DOT
-25ED;AL;UP-POINTING TRIANGLE WITH LEFT HALF BLACK
-25EE;AL;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
-25EF;AI;LARGE CIRCLE
-25F0;AL;WHITE SQUARE WITH UPPER LEFT QUADRANT
-25F1;AL;WHITE SQUARE WITH LOWER LEFT QUADRANT
-25F2;AL;WHITE SQUARE WITH LOWER RIGHT QUADRANT
-25F3;AL;WHITE SQUARE WITH UPPER RIGHT QUADRANT
-25F4;AL;WHITE CIRCLE WITH UPPER LEFT QUADRANT
-25F5;AL;WHITE CIRCLE WITH LOWER LEFT QUADRANT
-25F6;AL;WHITE CIRCLE WITH LOWER RIGHT QUADRANT
-25F7;AL;WHITE CIRCLE WITH UPPER RIGHT QUADRANT
-2600;AL;BLACK SUN WITH RAYS
-2601;AL;CLOUD
-2602;AL;UMBRELLA
-2603;AL;SNOWMAN
-2604;AL;COMET
-2605;AI;BLACK STAR
-2606;AI;WHITE STAR
-2607;AL;LIGHTNING
-2608;AL;THUNDERSTORM
-2609;AI;SUN
-260A;AL;ASCENDING NODE
-260B;AL;DESCENDING NODE
-260C;AL;CONJUNCTION
-260D;AL;OPPOSITION
-260E;AI;BLACK TELEPHONE
-260F;AI;WHITE TELEPHONE
-2610;AL;BALLOT BOX
-2611;AL;BALLOT BOX WITH CHECK
-2612;AL;BALLOT BOX WITH X
-2613;AL;SALTIRE
-2619;AL;REVERSED ROTATED FLORAL HEART BULLET
-261A;AL;BLACK LEFT POINTING INDEX
-261B;AL;BLACK RIGHT POINTING INDEX
-261C;AI;WHITE LEFT POINTING INDEX
-261D;AL;WHITE UP POINTING INDEX
-261E;AI;WHITE RIGHT POINTING INDEX
-261F;AL;WHITE DOWN POINTING INDEX
-2620;AL;SKULL AND CROSSBONES
-2621;AL;CAUTION SIGN
-2622;AL;RADIOACTIVE SIGN
-2623;AL;BIOHAZARD SIGN
-2624;AL;CADUCEUS
-2625;AL;ANKH
-2626;AL;ORTHODOX CROSS
-2627;AL;CHI RHO
-2628;AL;CROSS OF LORRAINE
-2629;AL;CROSS OF JERUSALEM
-262A;AL;STAR AND CRESCENT
-262B;AL;FARSI SYMBOL
-262C;AL;ADI SHAKTI
-262D;AL;HAMMER AND SICKLE
-262E;AL;PEACE SYMBOL
-262F;AL;YIN YANG
-2630;AL;TRIGRAM FOR HEAVEN
-2631;AL;TRIGRAM FOR LAKE
-2632;AL;TRIGRAM FOR FIRE
-2633;AL;TRIGRAM FOR THUNDER
-2634;AL;TRIGRAM FOR WIND
-2635;AL;TRIGRAM FOR WATER
-2636;AL;TRIGRAM FOR MOUNTAIN
-2637;AL;TRIGRAM FOR EARTH
-2638;AL;WHEEL OF DHARMA
-2639;AL;WHITE FROWNING FACE
-263A;AL;WHITE SMILING FACE
-263B;AL;BLACK SMILING FACE
-263C;AL;WHITE SUN WITH RAYS
-263D;AL;FIRST QUARTER MOON
-263E;AL;LAST QUARTER MOON
-263F;AL;MERCURY
-2640;AI;FEMALE SIGN
-2641;AL;EARTH
-2642;AI;MALE SIGN
-2643;AL;JUPITER
-2644;AL;SATURN
-2645;AL;URANUS
-2646;AL;NEPTUNE
-2647;AL;PLUTO
-2648;AL;ARIES
-2649;AL;TAURUS
-264A;AL;GEMINI
-264B;AL;CANCER
-264C;AL;LEO
-264D;AL;VIRGO
-264E;AL;LIBRA
-264F;AL;SCORPIUS
-2650;AL;SAGITTARIUS
-2651;AL;CAPRICORN
-2652;AL;AQUARIUS
-2653;AL;PISCES
-2654;AL;WHITE CHESS KING
-2655;AL;WHITE CHESS QUEEN
-2656;AL;WHITE CHESS ROOK
-2657;AL;WHITE CHESS BISHOP
-2658;AL;WHITE CHESS KNIGHT
-2659;AL;WHITE CHESS PAWN
-265A;AL;BLACK CHESS KING
-265B;AL;BLACK CHESS QUEEN
-265C;AL;BLACK CHESS ROOK
-265D;AL;BLACK CHESS BISHOP
-265E;AL;BLACK CHESS KNIGHT
-265F;AL;BLACK CHESS PAWN
-2660;AI;BLACK SPADE SUIT
-2661;AI;WHITE HEART SUIT
-2662;AL;WHITE DIAMOND SUIT
-2663;AI;BLACK CLUB SUIT
-2664;AI;WHITE SPADE SUIT
-2665;AI;BLACK HEART SUIT
-2666;AL;BLACK DIAMOND SUIT
-2667;AI;WHITE CLUB SUIT
-2668;AI;HOT SPRINGS
-2669;AI;QUARTER NOTE
-266A;AI;EIGHTH NOTE
-266B;AL;BEAMED EIGHTH NOTES
-266C;AI;BEAMED SIXTEENTH NOTES
-266D;AI;MUSIC FLAT SIGN
-266E;AL;MUSIC NATURAL SIGN
-266F;AI;MUSIC SHARP SIGN
-2670;AL;WEST SYRIAC CROSS
-2671;AL;EAST SYRIAC CROSS
-2701;AL;UPPER BLADE SCISSORS
-2702;AL;BLACK SCISSORS
-2703;AL;LOWER BLADE SCISSORS
-2704;AL;WHITE SCISSORS
-2706;AL;TELEPHONE LOCATION SIGN
-2707;AL;TAPE DRIVE
-2708;AL;AIRPLANE
-2709;AL;ENVELOPE
-270C;AL;VICTORY HAND
-270D;AL;WRITING HAND
-270E;AL;LOWER RIGHT PENCIL
-270F;AL;PENCIL
-2710;AL;UPPER RIGHT PENCIL
-2711;AL;WHITE NIB
-2712;AL;BLACK NIB
-2713;AL;CHECK MARK
-2714;AL;HEAVY CHECK MARK
-2715;AL;MULTIPLICATION X
-2716;AL;HEAVY MULTIPLICATION X
-2717;AL;BALLOT X
-2718;AL;HEAVY BALLOT X
-2719;AL;OUTLINED GREEK CROSS
-271A;AL;HEAVY GREEK CROSS
-271B;AL;OPEN CENTRE CROSS
-271C;AL;HEAVY OPEN CENTRE CROSS
-271D;AL;LATIN CROSS
-271E;AL;SHADOWED WHITE LATIN CROSS
-271F;AL;OUTLINED LATIN CROSS
-2720;AL;MALTESE CROSS
-2721;AL;STAR OF DAVID
-2722;AL;FOUR TEARDROP-SPOKED ASTERISK
-2723;AL;FOUR BALLOON-SPOKED ASTERISK
-2724;AL;HEAVY FOUR BALLOON-SPOKED ASTERISK
-2725;AL;FOUR CLUB-SPOKED ASTERISK
-2726;AL;BLACK FOUR POINTED STAR
-2727;AL;WHITE FOUR POINTED STAR
-2729;AL;STRESS OUTLINED WHITE STAR
-272A;AL;CIRCLED WHITE STAR
-272B;AL;OPEN CENTRE BLACK STAR
-272C;AL;BLACK CENTRE WHITE STAR
-272D;AL;OUTLINED BLACK STAR
-272E;AL;HEAVY OUTLINED BLACK STAR
-272F;AL;PINWHEEL STAR
-2730;AL;SHADOWED WHITE STAR
-2731;AL;HEAVY ASTERISK
-2732;AL;OPEN CENTRE ASTERISK
-2733;AL;EIGHT SPOKED ASTERISK
-2734;AL;EIGHT POINTED BLACK STAR
-2735;AL;EIGHT POINTED PINWHEEL STAR
-2736;AL;SIX POINTED BLACK STAR
-2737;AL;EIGHT POINTED RECTILINEAR BLACK STAR
-2738;AL;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
-2739;AL;TWELVE POINTED BLACK STAR
-273A;AL;SIXTEEN POINTED ASTERISK
-273B;AL;TEARDROP-SPOKED ASTERISK
-273C;AL;OPEN CENTRE TEARDROP-SPOKED ASTERISK
-273D;AL;HEAVY TEARDROP-SPOKED ASTERISK
-273E;AL;SIX PETALLED BLACK AND WHITE FLORETTE
-273F;AL;BLACK FLORETTE
-2740;AL;WHITE FLORETTE
-2741;AL;EIGHT PETALLED OUTLINED BLACK FLORETTE
-2742;AL;CIRCLED OPEN CENTRE EIGHT POINTED STAR
-2743;AL;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
-2744;AL;SNOWFLAKE
-2745;AL;TIGHT TRIFOLIATE SNOWFLAKE
-2746;AL;HEAVY CHEVRON SNOWFLAKE
-2747;AL;SPARKLE
-2748;AL;HEAVY SPARKLE
-2749;AL;BALLOON-SPOKED ASTERISK
-274A;AL;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-274B;AL;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-274D;AL;SHADOWED WHITE CIRCLE
-274F;AL;LOWER RIGHT DROP-SHADOWED WHITE SQUARE
-2750;AL;UPPER RIGHT DROP-SHADOWED WHITE SQUARE
-2751;AL;LOWER RIGHT SHADOWED WHITE SQUARE
-2752;AL;UPPER RIGHT SHADOWED WHITE SQUARE
-2756;AL;BLACK DIAMOND MINUS WHITE X
-2758;AL;LIGHT VERTICAL BAR
-2759;AL;MEDIUM VERTICAL BAR
-275A;AL;HEAVY VERTICAL BAR
-275B;AL;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
-275C;AL;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
-275D;AL;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
-275E;AL;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
-2761;AL;CURVED STEM PARAGRAPH SIGN ORNAMENT
-2762;AL;HEAVY EXCLAMATION MARK ORNAMENT
-2763;AL;HEAVY HEART EXCLAMATION MARK ORNAMENT
-2764;AL;HEAVY BLACK HEART
-2765;AL;ROTATED HEAVY BLACK HEART BULLET
-2766;AL;FLORAL HEART
-2767;AL;ROTATED FLORAL HEART BULLET
-2776;AL;DINGBAT NEGATIVE CIRCLED DIGIT ONE
-2777;AL;DINGBAT NEGATIVE CIRCLED DIGIT TWO
-2778;AL;DINGBAT NEGATIVE CIRCLED DIGIT THREE
-2779;AL;DINGBAT NEGATIVE CIRCLED DIGIT FOUR
-277A;AL;DINGBAT NEGATIVE CIRCLED DIGIT FIVE
-277B;AL;DINGBAT NEGATIVE CIRCLED DIGIT SIX
-277C;AL;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
-277D;AL;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
-277E;AL;DINGBAT NEGATIVE CIRCLED DIGIT NINE
-277F;AL;DINGBAT NEGATIVE CIRCLED NUMBER TEN
-2780;AL;DINGBAT CIRCLED SANS-SERIF DIGIT ONE
-2781;AL;DINGBAT CIRCLED SANS-SERIF DIGIT TWO
-2782;AL;DINGBAT CIRCLED SANS-SERIF DIGIT THREE
-2783;AL;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
-2784;AL;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
-2785;AL;DINGBAT CIRCLED SANS-SERIF DIGIT SIX
-2786;AL;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
-2787;AL;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
-2788;AL;DINGBAT CIRCLED SANS-SERIF DIGIT NINE
-2789;AL;DINGBAT CIRCLED SANS-SERIF NUMBER TEN
-278A;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
-278B;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
-278C;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
-278D;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
-278E;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
-278F;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
-2790;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
-2791;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
-2792;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
-2793;AL;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
-2794;AL;HEAVY WIDE-HEADED RIGHTWARDS ARROW
-2798;AL;HEAVY SOUTH EAST ARROW
-2799;AL;HEAVY RIGHTWARDS ARROW
-279A;AL;HEAVY NORTH EAST ARROW
-279B;AL;DRAFTING POINT RIGHTWARDS ARROW
-279C;AL;HEAVY ROUND-TIPPED RIGHTWARDS ARROW
-279D;AL;TRIANGLE-HEADED RIGHTWARDS ARROW
-279E;AL;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
-279F;AL;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
-27A0;AL;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
-27A1;AL;BLACK RIGHTWARDS ARROW
-27A2;AL;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
-27A3;AL;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
-27A4;AL;BLACK RIGHTWARDS ARROWHEAD
-27A5;AL;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
-27A6;AL;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
-27A7;AL;SQUAT BLACK RIGHTWARDS ARROW
-27A8;AL;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
-27A9;AL;RIGHT-SHADED WHITE RIGHTWARDS ARROW
-27AA;AL;LEFT-SHADED WHITE RIGHTWARDS ARROW
-27AB;AL;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
-27AC;AL;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
-27AD;AL;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27AE;AL;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27AF;AL;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27B1;AL;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27B2;AL;CIRCLED HEAVY WHITE RIGHTWARDS ARROW
-27B3;AL;WHITE-FEATHERED RIGHTWARDS ARROW
-27B4;AL;BLACK-FEATHERED SOUTH EAST ARROW
-27B5;AL;BLACK-FEATHERED RIGHTWARDS ARROW
-27B6;AL;BLACK-FEATHERED NORTH EAST ARROW
-27B7;AL;HEAVY BLACK-FEATHERED SOUTH EAST ARROW
-27B8;AL;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
-27B9;AL;HEAVY BLACK-FEATHERED NORTH EAST ARROW
-27BA;AL;TEARDROP-BARBED RIGHTWARDS ARROW
-27BB;AL;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
-27BC;AL;WEDGE-TAILED RIGHTWARDS ARROW
-27BD;AL;HEAVY WEDGE-TAILED RIGHTWARDS ARROW
-27BE;AL;OPEN-OUTLINED RIGHTWARDS ARROW
-2800;AL;BRAILLE PATTERN BLANK
-2801;AL;BRAILLE PATTERN DOTS-1
-2802;AL;BRAILLE PATTERN DOTS-2
-2803;AL;BRAILLE PATTERN DOTS-12
-2804;AL;BRAILLE PATTERN DOTS-3
-2805;AL;BRAILLE PATTERN DOTS-13
-2806;AL;BRAILLE PATTERN DOTS-23
-2807;AL;BRAILLE PATTERN DOTS-123
-2808;AL;BRAILLE PATTERN DOTS-4
-2809;AL;BRAILLE PATTERN DOTS-14
-280A;AL;BRAILLE PATTERN DOTS-24
-280B;AL;BRAILLE PATTERN DOTS-124
-280C;AL;BRAILLE PATTERN DOTS-34
-280D;AL;BRAILLE PATTERN DOTS-134
-280E;AL;BRAILLE PATTERN DOTS-234
-280F;AL;BRAILLE PATTERN DOTS-1234
-2810;AL;BRAILLE PATTERN DOTS-5
-2811;AL;BRAILLE PATTERN DOTS-15
-2812;AL;BRAILLE PATTERN DOTS-25
-2813;AL;BRAILLE PATTERN DOTS-125
-2814;AL;BRAILLE PATTERN DOTS-35
-2815;AL;BRAILLE PATTERN DOTS-135
-2816;AL;BRAILLE PATTERN DOTS-235
-2817;AL;BRAILLE PATTERN DOTS-1235
-2818;AL;BRAILLE PATTERN DOTS-45
-2819;AL;BRAILLE PATTERN DOTS-145
-281A;AL;BRAILLE PATTERN DOTS-245
-281B;AL;BRAILLE PATTERN DOTS-1245
-281C;AL;BRAILLE PATTERN DOTS-345
-281D;AL;BRAILLE PATTERN DOTS-1345
-281E;AL;BRAILLE PATTERN DOTS-2345
-281F;AL;BRAILLE PATTERN DOTS-12345
-2820;AL;BRAILLE PATTERN DOTS-6
-2821;AL;BRAILLE PATTERN DOTS-16
-2822;AL;BRAILLE PATTERN DOTS-26
-2823;AL;BRAILLE PATTERN DOTS-126
-2824;AL;BRAILLE PATTERN DOTS-36
-2825;AL;BRAILLE PATTERN DOTS-136
-2826;AL;BRAILLE PATTERN DOTS-236
-2827;AL;BRAILLE PATTERN DOTS-1236
-2828;AL;BRAILLE PATTERN DOTS-46
-2829;AL;BRAILLE PATTERN DOTS-146
-282A;AL;BRAILLE PATTERN DOTS-246
-282B;AL;BRAILLE PATTERN DOTS-1246
-282C;AL;BRAILLE PATTERN DOTS-346
-282D;AL;BRAILLE PATTERN DOTS-1346
-282E;AL;BRAILLE PATTERN DOTS-2346
-282F;AL;BRAILLE PATTERN DOTS-12346
-2830;AL;BRAILLE PATTERN DOTS-56
-2831;AL;BRAILLE PATTERN DOTS-156
-2832;AL;BRAILLE PATTERN DOTS-256
-2833;AL;BRAILLE PATTERN DOTS-1256
-2834;AL;BRAILLE PATTERN DOTS-356
-2835;AL;BRAILLE PATTERN DOTS-1356
-2836;AL;BRAILLE PATTERN DOTS-2356
-2837;AL;BRAILLE PATTERN DOTS-12356
-2838;AL;BRAILLE PATTERN DOTS-456
-2839;AL;BRAILLE PATTERN DOTS-1456
-283A;AL;BRAILLE PATTERN DOTS-2456
-283B;AL;BRAILLE PATTERN DOTS-12456
-283C;AL;BRAILLE PATTERN DOTS-3456
-283D;AL;BRAILLE PATTERN DOTS-13456
-283E;AL;BRAILLE PATTERN DOTS-23456
-283F;AL;BRAILLE PATTERN DOTS-123456
-2840;AL;BRAILLE PATTERN DOTS-7
-2841;AL;BRAILLE PATTERN DOTS-17
-2842;AL;BRAILLE PATTERN DOTS-27
-2843;AL;BRAILLE PATTERN DOTS-127
-2844;AL;BRAILLE PATTERN DOTS-37
-2845;AL;BRAILLE PATTERN DOTS-137
-2846;AL;BRAILLE PATTERN DOTS-237
-2847;AL;BRAILLE PATTERN DOTS-1237
-2848;AL;BRAILLE PATTERN DOTS-47
-2849;AL;BRAILLE PATTERN DOTS-147
-284A;AL;BRAILLE PATTERN DOTS-247
-284B;AL;BRAILLE PATTERN DOTS-1247
-284C;AL;BRAILLE PATTERN DOTS-347
-284D;AL;BRAILLE PATTERN DOTS-1347
-284E;AL;BRAILLE PATTERN DOTS-2347
-284F;AL;BRAILLE PATTERN DOTS-12347
-2850;AL;BRAILLE PATTERN DOTS-57
-2851;AL;BRAILLE PATTERN DOTS-157
-2852;AL;BRAILLE PATTERN DOTS-257
-2853;AL;BRAILLE PATTERN DOTS-1257
-2854;AL;BRAILLE PATTERN DOTS-357
-2855;AL;BRAILLE PATTERN DOTS-1357
-2856;AL;BRAILLE PATTERN DOTS-2357
-2857;AL;BRAILLE PATTERN DOTS-12357
-2858;AL;BRAILLE PATTERN DOTS-457
-2859;AL;BRAILLE PATTERN DOTS-1457
-285A;AL;BRAILLE PATTERN DOTS-2457
-285B;AL;BRAILLE PATTERN DOTS-12457
-285C;AL;BRAILLE PATTERN DOTS-3457
-285D;AL;BRAILLE PATTERN DOTS-13457
-285E;AL;BRAILLE PATTERN DOTS-23457
-285F;AL;BRAILLE PATTERN DOTS-123457
-2860;AL;BRAILLE PATTERN DOTS-67
-2861;AL;BRAILLE PATTERN DOTS-167
-2862;AL;BRAILLE PATTERN DOTS-267
-2863;AL;BRAILLE PATTERN DOTS-1267
-2864;AL;BRAILLE PATTERN DOTS-367
-2865;AL;BRAILLE PATTERN DOTS-1367
-2866;AL;BRAILLE PATTERN DOTS-2367
-2867;AL;BRAILLE PATTERN DOTS-12367
-2868;AL;BRAILLE PATTERN DOTS-467
-2869;AL;BRAILLE PATTERN DOTS-1467
-286A;AL;BRAILLE PATTERN DOTS-2467
-286B;AL;BRAILLE PATTERN DOTS-12467
-286C;AL;BRAILLE PATTERN DOTS-3467
-286D;AL;BRAILLE PATTERN DOTS-13467
-286E;AL;BRAILLE PATTERN DOTS-23467
-286F;AL;BRAILLE PATTERN DOTS-123467
-2870;AL;BRAILLE PATTERN DOTS-567
-2871;AL;BRAILLE PATTERN DOTS-1567
-2872;AL;BRAILLE PATTERN DOTS-2567
-2873;AL;BRAILLE PATTERN DOTS-12567
-2874;AL;BRAILLE PATTERN DOTS-3567
-2875;AL;BRAILLE PATTERN DOTS-13567
-2876;AL;BRAILLE PATTERN DOTS-23567
-2877;AL;BRAILLE PATTERN DOTS-123567
-2878;AL;BRAILLE PATTERN DOTS-4567
-2879;AL;BRAILLE PATTERN DOTS-14567
-287A;AL;BRAILLE PATTERN DOTS-24567
-287B;AL;BRAILLE PATTERN DOTS-124567
-287C;AL;BRAILLE PATTERN DOTS-34567
-287D;AL;BRAILLE PATTERN DOTS-134567
-287E;AL;BRAILLE PATTERN DOTS-234567
-287F;AL;BRAILLE PATTERN DOTS-1234567
-2880;AL;BRAILLE PATTERN DOTS-8
-2881;AL;BRAILLE PATTERN DOTS-18
-2882;AL;BRAILLE PATTERN DOTS-28
-2883;AL;BRAILLE PATTERN DOTS-128
-2884;AL;BRAILLE PATTERN DOTS-38
-2885;AL;BRAILLE PATTERN DOTS-138
-2886;AL;BRAILLE PATTERN DOTS-238
-2887;AL;BRAILLE PATTERN DOTS-1238
-2888;AL;BRAILLE PATTERN DOTS-48
-2889;AL;BRAILLE PATTERN DOTS-148
-288A;AL;BRAILLE PATTERN DOTS-248
-288B;AL;BRAILLE PATTERN DOTS-1248
-288C;AL;BRAILLE PATTERN DOTS-348
-288D;AL;BRAILLE PATTERN DOTS-1348
-288E;AL;BRAILLE PATTERN DOTS-2348
-288F;AL;BRAILLE PATTERN DOTS-12348
-2890;AL;BRAILLE PATTERN DOTS-58
-2891;AL;BRAILLE PATTERN DOTS-158
-2892;AL;BRAILLE PATTERN DOTS-258
-2893;AL;BRAILLE PATTERN DOTS-1258
-2894;AL;BRAILLE PATTERN DOTS-358
-2895;AL;BRAILLE PATTERN DOTS-1358
-2896;AL;BRAILLE PATTERN DOTS-2358
-2897;AL;BRAILLE PATTERN DOTS-12358
-2898;AL;BRAILLE PATTERN DOTS-458
-2899;AL;BRAILLE PATTERN DOTS-1458
-289A;AL;BRAILLE PATTERN DOTS-2458
-289B;AL;BRAILLE PATTERN DOTS-12458
-289C;AL;BRAILLE PATTERN DOTS-3458
-289D;AL;BRAILLE PATTERN DOTS-13458
-289E;AL;BRAILLE PATTERN DOTS-23458
-289F;AL;BRAILLE PATTERN DOTS-123458
-28A0;AL;BRAILLE PATTERN DOTS-68
-28A1;AL;BRAILLE PATTERN DOTS-168
-28A2;AL;BRAILLE PATTERN DOTS-268
-28A3;AL;BRAILLE PATTERN DOTS-1268
-28A4;AL;BRAILLE PATTERN DOTS-368
-28A5;AL;BRAILLE PATTERN DOTS-1368
-28A6;AL;BRAILLE PATTERN DOTS-2368
-28A7;AL;BRAILLE PATTERN DOTS-12368
-28A8;AL;BRAILLE PATTERN DOTS-468
-28A9;AL;BRAILLE PATTERN DOTS-1468
-28AA;AL;BRAILLE PATTERN DOTS-2468
-28AB;AL;BRAILLE PATTERN DOTS-12468
-28AC;AL;BRAILLE PATTERN DOTS-3468
-28AD;AL;BRAILLE PATTERN DOTS-13468
-28AE;AL;BRAILLE PATTERN DOTS-23468
-28AF;AL;BRAILLE PATTERN DOTS-123468
-28B0;AL;BRAILLE PATTERN DOTS-568
-28B1;AL;BRAILLE PATTERN DOTS-1568
-28B2;AL;BRAILLE PATTERN DOTS-2568
-28B3;AL;BRAILLE PATTERN DOTS-12568
-28B4;AL;BRAILLE PATTERN DOTS-3568
-28B5;AL;BRAILLE PATTERN DOTS-13568
-28B6;AL;BRAILLE PATTERN DOTS-23568
-28B7;AL;BRAILLE PATTERN DOTS-123568
-28B8;AL;BRAILLE PATTERN DOTS-4568
-28B9;AL;BRAILLE PATTERN DOTS-14568
-28BA;AL;BRAILLE PATTERN DOTS-24568
-28BB;AL;BRAILLE PATTERN DOTS-124568
-28BC;AL;BRAILLE PATTERN DOTS-34568
-28BD;AL;BRAILLE PATTERN DOTS-134568
-28BE;AL;BRAILLE PATTERN DOTS-234568
-28BF;AL;BRAILLE PATTERN DOTS-1234568
-28C0;AL;BRAILLE PATTERN DOTS-78
-28C1;AL;BRAILLE PATTERN DOTS-178
-28C2;AL;BRAILLE PATTERN DOTS-278
-28C3;AL;BRAILLE PATTERN DOTS-1278
-28C4;AL;BRAILLE PATTERN DOTS-378
-28C5;AL;BRAILLE PATTERN DOTS-1378
-28C6;AL;BRAILLE PATTERN DOTS-2378
-28C7;AL;BRAILLE PATTERN DOTS-12378
-28C8;AL;BRAILLE PATTERN DOTS-478
-28C9;AL;BRAILLE PATTERN DOTS-1478
-28CA;AL;BRAILLE PATTERN DOTS-2478
-28CB;AL;BRAILLE PATTERN DOTS-12478
-28CC;AL;BRAILLE PATTERN DOTS-3478
-28CD;AL;BRAILLE PATTERN DOTS-13478
-28CE;AL;BRAILLE PATTERN DOTS-23478
-28CF;AL;BRAILLE PATTERN DOTS-123478
-28D0;AL;BRAILLE PATTERN DOTS-578
-28D1;AL;BRAILLE PATTERN DOTS-1578
-28D2;AL;BRAILLE PATTERN DOTS-2578
-28D3;AL;BRAILLE PATTERN DOTS-12578
-28D4;AL;BRAILLE PATTERN DOTS-3578
-28D5;AL;BRAILLE PATTERN DOTS-13578
-28D6;AL;BRAILLE PATTERN DOTS-23578
-28D7;AL;BRAILLE PATTERN DOTS-123578
-28D8;AL;BRAILLE PATTERN DOTS-4578
-28D9;AL;BRAILLE PATTERN DOTS-14578
-28DA;AL;BRAILLE PATTERN DOTS-24578
-28DB;AL;BRAILLE PATTERN DOTS-124578
-28DC;AL;BRAILLE PATTERN DOTS-34578
-28DD;AL;BRAILLE PATTERN DOTS-134578
-28DE;AL;BRAILLE PATTERN DOTS-234578
-28DF;AL;BRAILLE PATTERN DOTS-1234578
-28E0;AL;BRAILLE PATTERN DOTS-678
-28E1;AL;BRAILLE PATTERN DOTS-1678
-28E2;AL;BRAILLE PATTERN DOTS-2678
-28E3;AL;BRAILLE PATTERN DOTS-12678
-28E4;AL;BRAILLE PATTERN DOTS-3678
-28E5;AL;BRAILLE PATTERN DOTS-13678
-28E6;AL;BRAILLE PATTERN DOTS-23678
-28E7;AL;BRAILLE PATTERN DOTS-123678
-28E8;AL;BRAILLE PATTERN DOTS-4678
-28E9;AL;BRAILLE PATTERN DOTS-14678
-28EA;AL;BRAILLE PATTERN DOTS-24678
-28EB;AL;BRAILLE PATTERN DOTS-124678
-28EC;AL;BRAILLE PATTERN DOTS-34678
-28ED;AL;BRAILLE PATTERN DOTS-134678
-28EE;AL;BRAILLE PATTERN DOTS-234678
-28EF;AL;BRAILLE PATTERN DOTS-1234678
-28F0;AL;BRAILLE PATTERN DOTS-5678
-28F1;AL;BRAILLE PATTERN DOTS-15678
-28F2;AL;BRAILLE PATTERN DOTS-25678
-28F3;AL;BRAILLE PATTERN DOTS-125678
-28F4;AL;BRAILLE PATTERN DOTS-35678
-28F5;AL;BRAILLE PATTERN DOTS-135678
-28F6;AL;BRAILLE PATTERN DOTS-235678
-28F7;AL;BRAILLE PATTERN DOTS-1235678
-28F8;AL;BRAILLE PATTERN DOTS-45678
-28F9;AL;BRAILLE PATTERN DOTS-145678
-28FA;AL;BRAILLE PATTERN DOTS-245678
-28FB;AL;BRAILLE PATTERN DOTS-1245678
-28FC;AL;BRAILLE PATTERN DOTS-345678
-28FD;AL;BRAILLE PATTERN DOTS-1345678
-28FE;AL;BRAILLE PATTERN DOTS-2345678
-28FF;AL;BRAILLE PATTERN DOTS-12345678
-2E80;ID;CJK RADICAL REPEAT
-2E81;ID;CJK RADICAL CLIFF
-2E82;ID;CJK RADICAL SECOND ONE
-2E83;ID;CJK RADICAL SECOND TWO
-2E84;ID;CJK RADICAL SECOND THREE
-2E85;ID;CJK RADICAL PERSON
-2E86;ID;CJK RADICAL BOX
-2E87;ID;CJK RADICAL TABLE
-2E88;ID;CJK RADICAL KNIFE ONE
-2E89;ID;CJK RADICAL KNIFE TWO
-2E8A;ID;CJK RADICAL DIVINATION
-2E8B;ID;CJK RADICAL SEAL
-2E8C;ID;CJK RADICAL SMALL ONE
-2E8D;ID;CJK RADICAL SMALL TWO
-2E8E;ID;CJK RADICAL LAME ONE
-2E8F;ID;CJK RADICAL LAME TWO
-2E90;ID;CJK RADICAL LAME THREE
-2E91;ID;CJK RADICAL LAME FOUR
-2E92;ID;CJK RADICAL SNAKE
-2E93;ID;CJK RADICAL THREAD
-2E94;ID;CJK RADICAL SNOUT ONE
-2E95;ID;CJK RADICAL SNOUT TWO
-2E96;ID;CJK RADICAL HEART ONE
-2E97;ID;CJK RADICAL HEART TWO
-2E98;ID;CJK RADICAL HAND
-2E99;ID;CJK RADICAL RAP
-2E9B;ID;CJK RADICAL CHOKE
-2E9C;ID;CJK RADICAL SUN
-2E9D;ID;CJK RADICAL MOON
-2E9E;ID;CJK RADICAL DEATH
-2E9F;ID;CJK RADICAL MOTHER
-2EA0;ID;CJK RADICAL CIVILIAN
-2EA1;ID;CJK RADICAL WATER ONE
-2EA2;ID;CJK RADICAL WATER TWO
-2EA3;ID;CJK RADICAL FIRE
-2EA4;ID;CJK RADICAL PAW ONE
-2EA5;ID;CJK RADICAL PAW TWO
-2EA6;ID;CJK RADICAL SIMPLIFIED HALF TREE TRUNK
-2EA7;ID;CJK RADICAL COW
-2EA8;ID;CJK RADICAL DOG
-2EA9;ID;CJK RADICAL JADE
-2EAA;ID;CJK RADICAL BOLT OF CLOTH
-2EAB;ID;CJK RADICAL EYE
-2EAC;ID;CJK RADICAL SPIRIT ONE
-2EAD;ID;CJK RADICAL SPIRIT TWO
-2EAE;ID;CJK RADICAL BAMBOO
-2EAF;ID;CJK RADICAL SILK
-2EB0;ID;CJK RADICAL C-SIMPLIFIED SILK
-2EB1;ID;CJK RADICAL NET ONE
-2EB2;ID;CJK RADICAL NET TWO
-2EB3;ID;CJK RADICAL NET THREE
-2EB4;ID;CJK RADICAL NET FOUR
-2EB5;ID;CJK RADICAL MESH
-2EB6;ID;CJK RADICAL SHEEP
-2EB7;ID;CJK RADICAL RAM
-2EB8;ID;CJK RADICAL EWE
-2EB9;ID;CJK RADICAL OLD
-2EBA;ID;CJK RADICAL BRUSH ONE
-2EBB;ID;CJK RADICAL BRUSH TWO
-2EBC;ID;CJK RADICAL MEAT
-2EBD;ID;CJK RADICAL MORTAR
-2EBE;ID;CJK RADICAL GRASS ONE
-2EBF;ID;CJK RADICAL GRASS TWO
-2EC0;ID;CJK RADICAL GRASS THREE
-2EC1;ID;CJK RADICAL TIGER
-2EC2;ID;CJK RADICAL CLOTHES
-2EC3;ID;CJK RADICAL WEST ONE
-2EC4;ID;CJK RADICAL WEST TWO
-2EC5;ID;CJK RADICAL C-SIMPLIFIED SEE
-2EC6;ID;CJK RADICAL SIMPLIFIED HORN
-2EC7;ID;CJK RADICAL HORN
-2EC8;ID;CJK RADICAL C-SIMPLIFIED SPEECH
-2EC9;ID;CJK RADICAL C-SIMPLIFIED SHELL
-2ECA;ID;CJK RADICAL FOOT
-2ECB;ID;CJK RADICAL C-SIMPLIFIED CART
-2ECC;ID;CJK RADICAL SIMPLIFIED WALK
-2ECD;ID;CJK RADICAL WALK ONE
-2ECE;ID;CJK RADICAL WALK TWO
-2ECF;ID;CJK RADICAL CITY
-2ED0;ID;CJK RADICAL C-SIMPLIFIED GOLD
-2ED1;ID;CJK RADICAL LONG ONE
-2ED2;ID;CJK RADICAL LONG TWO
-2ED3;ID;CJK RADICAL C-SIMPLIFIED LONG
-2ED4;ID;CJK RADICAL C-SIMPLIFIED GATE
-2ED5;ID;CJK RADICAL MOUND ONE
-2ED6;ID;CJK RADICAL MOUND TWO
-2ED7;ID;CJK RADICAL RAIN
-2ED8;ID;CJK RADICAL BLUE
-2ED9;ID;CJK RADICAL C-SIMPLIFIED TANNED LEATHER
-2EDA;ID;CJK RADICAL C-SIMPLIFIED LEAF
-2EDB;ID;CJK RADICAL C-SIMPLIFIED WIND
-2EDC;ID;CJK RADICAL C-SIMPLIFIED FLY
-2EDD;ID;CJK RADICAL EAT ONE
-2EDE;ID;CJK RADICAL EAT TWO
-2EDF;ID;CJK RADICAL EAT THREE
-2EE0;ID;CJK RADICAL C-SIMPLIFIED EAT
-2EE1;ID;CJK RADICAL HEAD
-2EE2;ID;CJK RADICAL C-SIMPLIFIED HORSE
-2EE3;ID;CJK RADICAL BONE
-2EE4;ID;CJK RADICAL GHOST
-2EE5;ID;CJK RADICAL C-SIMPLIFIED FISH
-2EE6;ID;CJK RADICAL C-SIMPLIFIED BIRD
-2EE7;ID;CJK RADICAL C-SIMPLIFIED SALT
-2EE8;ID;CJK RADICAL SIMPLIFIED WHEAT
-2EE9;ID;CJK RADICAL SIMPLIFIED YELLOW
-2EEA;ID;CJK RADICAL C-SIMPLIFIED FROG
-2EEB;ID;CJK RADICAL J-SIMPLIFIED EVEN
-2EEC;ID;CJK RADICAL C-SIMPLIFIED EVEN
-2EED;ID;CJK RADICAL J-SIMPLIFIED TOOTH
-2EEE;ID;CJK RADICAL C-SIMPLIFIED TOOTH
-2EEF;ID;CJK RADICAL J-SIMPLIFIED DRAGON
-2EF0;ID;CJK RADICAL C-SIMPLIFIED DRAGON
-2EF1;ID;CJK RADICAL TURTLE
-2EF2;ID;CJK RADICAL J-SIMPLIFIED TURTLE
-2EF3;ID;CJK RADICAL C-SIMPLIFIED TURTLE
-2F00;ID;KANGXI RADICAL ONE
-2F01;ID;KANGXI RADICAL LINE
-2F02;ID;KANGXI RADICAL DOT
-2F03;ID;KANGXI RADICAL SLASH
-2F04;ID;KANGXI RADICAL SECOND
-2F05;ID;KANGXI RADICAL HOOK
-2F06;ID;KANGXI RADICAL TWO
-2F07;ID;KANGXI RADICAL LID
-2F08;ID;KANGXI RADICAL MAN
-2F09;ID;KANGXI RADICAL LEGS
-2F0A;ID;KANGXI RADICAL ENTER
-2F0B;ID;KANGXI RADICAL EIGHT
-2F0C;ID;KANGXI RADICAL DOWN BOX
-2F0D;ID;KANGXI RADICAL COVER
-2F0E;ID;KANGXI RADICAL ICE
-2F0F;ID;KANGXI RADICAL TABLE
-2F10;ID;KANGXI RADICAL OPEN BOX
-2F11;ID;KANGXI RADICAL KNIFE
-2F12;ID;KANGXI RADICAL POWER
-2F13;ID;KANGXI RADICAL WRAP
-2F14;ID;KANGXI RADICAL SPOON
-2F15;ID;KANGXI RADICAL RIGHT OPEN BOX
-2F16;ID;KANGXI RADICAL HIDING ENCLOSURE
-2F17;ID;KANGXI RADICAL TEN
-2F18;ID;KANGXI RADICAL DIVINATION
-2F19;ID;KANGXI RADICAL SEAL
-2F1A;ID;KANGXI RADICAL CLIFF
-2F1B;ID;KANGXI RADICAL PRIVATE
-2F1C;ID;KANGXI RADICAL AGAIN
-2F1D;ID;KANGXI RADICAL MOUTH
-2F1E;ID;KANGXI RADICAL ENCLOSURE
-2F1F;ID;KANGXI RADICAL EARTH
-2F20;ID;KANGXI RADICAL SCHOLAR
-2F21;ID;KANGXI RADICAL GO
-2F22;ID;KANGXI RADICAL GO SLOWLY
-2F23;ID;KANGXI RADICAL EVENING
-2F24;ID;KANGXI RADICAL BIG
-2F25;ID;KANGXI RADICAL WOMAN
-2F26;ID;KANGXI RADICAL CHILD
-2F27;ID;KANGXI RADICAL ROOF
-2F28;ID;KANGXI RADICAL INCH
-2F29;ID;KANGXI RADICAL SMALL
-2F2A;ID;KANGXI RADICAL LAME
-2F2B;ID;KANGXI RADICAL CORPSE
-2F2C;ID;KANGXI RADICAL SPROUT
-2F2D;ID;KANGXI RADICAL MOUNTAIN
-2F2E;ID;KANGXI RADICAL RIVER
-2F2F;ID;KANGXI RADICAL WORK
-2F30;ID;KANGXI RADICAL ONESELF
-2F31;ID;KANGXI RADICAL TURBAN
-2F32;ID;KANGXI RADICAL DRY
-2F33;ID;KANGXI RADICAL SHORT THREAD
-2F34;ID;KANGXI RADICAL DOTTED CLIFF
-2F35;ID;KANGXI RADICAL LONG STRIDE
-2F36;ID;KANGXI RADICAL TWO HANDS
-2F37;ID;KANGXI RADICAL SHOOT
-2F38;ID;KANGXI RADICAL BOW
-2F39;ID;KANGXI RADICAL SNOUT
-2F3A;ID;KANGXI RADICAL BRISTLE
-2F3B;ID;KANGXI RADICAL STEP
-2F3C;ID;KANGXI RADICAL HEART
-2F3D;ID;KANGXI RADICAL HALBERD
-2F3E;ID;KANGXI RADICAL DOOR
-2F3F;ID;KANGXI RADICAL HAND
-2F40;ID;KANGXI RADICAL BRANCH
-2F41;ID;KANGXI RADICAL RAP
-2F42;ID;KANGXI RADICAL SCRIPT
-2F43;ID;KANGXI RADICAL DIPPER
-2F44;ID;KANGXI RADICAL AXE
-2F45;ID;KANGXI RADICAL SQUARE
-2F46;ID;KANGXI RADICAL NOT
-2F47;ID;KANGXI RADICAL SUN
-2F48;ID;KANGXI RADICAL SAY
-2F49;ID;KANGXI RADICAL MOON
-2F4A;ID;KANGXI RADICAL TREE
-2F4B;ID;KANGXI RADICAL LACK
-2F4C;ID;KANGXI RADICAL STOP
-2F4D;ID;KANGXI RADICAL DEATH
-2F4E;ID;KANGXI RADICAL WEAPON
-2F4F;ID;KANGXI RADICAL DO NOT
-2F50;ID;KANGXI RADICAL COMPARE
-2F51;ID;KANGXI RADICAL FUR
-2F52;ID;KANGXI RADICAL CLAN
-2F53;ID;KANGXI RADICAL STEAM
-2F54;ID;KANGXI RADICAL WATER
-2F55;ID;KANGXI RADICAL FIRE
-2F56;ID;KANGXI RADICAL CLAW
-2F57;ID;KANGXI RADICAL FATHER
-2F58;ID;KANGXI RADICAL DOUBLE X
-2F59;ID;KANGXI RADICAL HALF TREE TRUNK
-2F5A;ID;KANGXI RADICAL SLICE
-2F5B;ID;KANGXI RADICAL FANG
-2F5C;ID;KANGXI RADICAL COW
-2F5D;ID;KANGXI RADICAL DOG
-2F5E;ID;KANGXI RADICAL PROFOUND
-2F5F;ID;KANGXI RADICAL JADE
-2F60;ID;KANGXI RADICAL MELON
-2F61;ID;KANGXI RADICAL TILE
-2F62;ID;KANGXI RADICAL SWEET
-2F63;ID;KANGXI RADICAL LIFE
-2F64;ID;KANGXI RADICAL USE
-2F65;ID;KANGXI RADICAL FIELD
-2F66;ID;KANGXI RADICAL BOLT OF CLOTH
-2F67;ID;KANGXI RADICAL SICKNESS
-2F68;ID;KANGXI RADICAL DOTTED TENT
-2F69;ID;KANGXI RADICAL WHITE
-2F6A;ID;KANGXI RADICAL SKIN
-2F6B;ID;KANGXI RADICAL DISH
-2F6C;ID;KANGXI RADICAL EYE
-2F6D;ID;KANGXI RADICAL SPEAR
-2F6E;ID;KANGXI RADICAL ARROW
-2F6F;ID;KANGXI RADICAL STONE
-2F70;ID;KANGXI RADICAL SPIRIT
-2F71;ID;KANGXI RADICAL TRACK
-2F72;ID;KANGXI RADICAL GRAIN
-2F73;ID;KANGXI RADICAL CAVE
-2F74;ID;KANGXI RADICAL STAND
-2F75;ID;KANGXI RADICAL BAMBOO
-2F76;ID;KANGXI RADICAL RICE
-2F77;ID;KANGXI RADICAL SILK
-2F78;ID;KANGXI RADICAL JAR
-2F79;ID;KANGXI RADICAL NET
-2F7A;ID;KANGXI RADICAL SHEEP
-2F7B;ID;KANGXI RADICAL FEATHER
-2F7C;ID;KANGXI RADICAL OLD
-2F7D;ID;KANGXI RADICAL AND
-2F7E;ID;KANGXI RADICAL PLOW
-2F7F;ID;KANGXI RADICAL EAR
-2F80;ID;KANGXI RADICAL BRUSH
-2F81;ID;KANGXI RADICAL MEAT
-2F82;ID;KANGXI RADICAL MINISTER
-2F83;ID;KANGXI RADICAL SELF
-2F84;ID;KANGXI RADICAL ARRIVE
-2F85;ID;KANGXI RADICAL MORTAR
-2F86;ID;KANGXI RADICAL TONGUE
-2F87;ID;KANGXI RADICAL OPPOSE
-2F88;ID;KANGXI RADICAL BOAT
-2F89;ID;KANGXI RADICAL STOPPING
-2F8A;ID;KANGXI RADICAL COLOR
-2F8B;ID;KANGXI RADICAL GRASS
-2F8C;ID;KANGXI RADICAL TIGER
-2F8D;ID;KANGXI RADICAL INSECT
-2F8E;ID;KANGXI RADICAL BLOOD
-2F8F;ID;KANGXI RADICAL WALK ENCLOSURE
-2F90;ID;KANGXI RADICAL CLOTHES
-2F91;ID;KANGXI RADICAL WEST
-2F92;ID;KANGXI RADICAL SEE
-2F93;ID;KANGXI RADICAL HORN
-2F94;ID;KANGXI RADICAL SPEECH
-2F95;ID;KANGXI RADICAL VALLEY
-2F96;ID;KANGXI RADICAL BEAN
-2F97;ID;KANGXI RADICAL PIG
-2F98;ID;KANGXI RADICAL BADGER
-2F99;ID;KANGXI RADICAL SHELL
-2F9A;ID;KANGXI RADICAL RED
-2F9B;ID;KANGXI RADICAL RUN
-2F9C;ID;KANGXI RADICAL FOOT
-2F9D;ID;KANGXI RADICAL BODY
-2F9E;ID;KANGXI RADICAL CART
-2F9F;ID;KANGXI RADICAL BITTER
-2FA0;ID;KANGXI RADICAL MORNING
-2FA1;ID;KANGXI RADICAL WALK
-2FA2;ID;KANGXI RADICAL CITY
-2FA3;ID;KANGXI RADICAL WINE
-2FA4;ID;KANGXI RADICAL DISTINGUISH
-2FA5;ID;KANGXI RADICAL VILLAGE
-2FA6;ID;KANGXI RADICAL GOLD
-2FA7;ID;KANGXI RADICAL LONG
-2FA8;ID;KANGXI RADICAL GATE
-2FA9;ID;KANGXI RADICAL MOUND
-2FAA;ID;KANGXI RADICAL SLAVE
-2FAB;ID;KANGXI RADICAL SHORT TAILED BIRD
-2FAC;ID;KANGXI RADICAL RAIN
-2FAD;ID;KANGXI RADICAL BLUE
-2FAE;ID;KANGXI RADICAL WRONG
-2FAF;ID;KANGXI RADICAL FACE
-2FB0;ID;KANGXI RADICAL LEATHER
-2FB1;ID;KANGXI RADICAL TANNED LEATHER
-2FB2;ID;KANGXI RADICAL LEEK
-2FB3;ID;KANGXI RADICAL SOUND
-2FB4;ID;KANGXI RADICAL LEAF
-2FB5;ID;KANGXI RADICAL WIND
-2FB6;ID;KANGXI RADICAL FLY
-2FB7;ID;KANGXI RADICAL EAT
-2FB8;ID;KANGXI RADICAL HEAD
-2FB9;ID;KANGXI RADICAL FRAGRANT
-2FBA;ID;KANGXI RADICAL HORSE
-2FBB;ID;KANGXI RADICAL BONE
-2FBC;ID;KANGXI RADICAL TALL
-2FBD;ID;KANGXI RADICAL HAIR
-2FBE;ID;KANGXI RADICAL FIGHT
-2FBF;ID;KANGXI RADICAL SACRIFICIAL WINE
-2FC0;ID;KANGXI RADICAL CAULDRON
-2FC1;ID;KANGXI RADICAL GHOST
-2FC2;ID;KANGXI RADICAL FISH
-2FC3;ID;KANGXI RADICAL BIRD
-2FC4;ID;KANGXI RADICAL SALT
-2FC5;ID;KANGXI RADICAL DEER
-2FC6;ID;KANGXI RADICAL WHEAT
-2FC7;ID;KANGXI RADICAL HEMP
-2FC8;ID;KANGXI RADICAL YELLOW
-2FC9;ID;KANGXI RADICAL MILLET
-2FCA;ID;KANGXI RADICAL BLACK
-2FCB;ID;KANGXI RADICAL EMBROIDERY
-2FCC;ID;KANGXI RADICAL FROG
-2FCD;ID;KANGXI RADICAL TRIPOD
-2FCE;ID;KANGXI RADICAL DRUM
-2FCF;ID;KANGXI RADICAL RAT
-2FD0;ID;KANGXI RADICAL NOSE
-2FD1;ID;KANGXI RADICAL EVEN
-2FD2;ID;KANGXI RADICAL TOOTH
-2FD3;ID;KANGXI RADICAL DRAGON
-2FD4;ID;KANGXI RADICAL TURTLE
-2FD5;ID;KANGXI RADICAL FLUTE
-2FF0;ID;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
-2FF1;ID;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
-2FF2;ID;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
-2FF3;ID;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
-2FF4;ID;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
-2FF5;ID;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
-2FF6;ID;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
-2FF7;ID;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
-2FF8;ID;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
-2FF9;ID;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
-2FFA;ID;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
-2FFB;ID;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
-3000;ID;IDEOGRAPHIC SPACE
-3001;CL;IDEOGRAPHIC COMMA
-3002;CL;IDEOGRAPHIC FULL STOP
-3003;ID;DITTO MARK
-3004;ID;JAPANESE INDUSTRIAL STANDARD SYMBOL
-3005;NS;IDEOGRAPHIC ITERATION MARK
-3006;ID;IDEOGRAPHIC CLOSING MARK
-3007;ID;IDEOGRAPHIC NUMBER ZERO
-3008;OP;LEFT ANGLE BRACKET
-3009;CL;RIGHT ANGLE BRACKET
-300A;OP;LEFT DOUBLE ANGLE BRACKET
-300B;CL;RIGHT DOUBLE ANGLE BRACKET
-300C;OP;LEFT CORNER BRACKET
-300D;CL;RIGHT CORNER BRACKET
-300E;OP;LEFT WHITE CORNER BRACKET
-300F;CL;RIGHT WHITE CORNER BRACKET
-3010;OP;LEFT BLACK LENTICULAR BRACKET
-3011;CL;RIGHT BLACK LENTICULAR BRACKET
-3012;ID;POSTAL MARK
-3013;ID;GETA MARK
-3014;OP;LEFT TORTOISE SHELL BRACKET
-3015;CL;RIGHT TORTOISE SHELL BRACKET
-3016;OP;LEFT WHITE LENTICULAR BRACKET
-3017;CL;RIGHT WHITE LENTICULAR BRACKET
-3018;OP;LEFT WHITE TORTOISE SHELL BRACKET
-3019;CL;RIGHT WHITE TORTOISE SHELL BRACKET
-301A;OP;LEFT WHITE SQUARE BRACKET
-301B;CL;RIGHT WHITE SQUARE BRACKET
-301C;NS;WAVE DASH
-301D;OP;REVERSED DOUBLE PRIME QUOTATION MARK
-301E;CL;DOUBLE PRIME QUOTATION MARK
-301F;CL;LOW DOUBLE PRIME QUOTATION MARK
-3020;ID;POSTAL MARK FACE
-3021;ID;HANGZHOU NUMERAL ONE
-3022;ID;HANGZHOU NUMERAL TWO
-3023;ID;HANGZHOU NUMERAL THREE
-3024;ID;HANGZHOU NUMERAL FOUR
-3025;ID;HANGZHOU NUMERAL FIVE
-3026;ID;HANGZHOU NUMERAL SIX
-3027;ID;HANGZHOU NUMERAL SEVEN
-3028;ID;HANGZHOU NUMERAL EIGHT
-3029;ID;HANGZHOU NUMERAL NINE
-302A;CM;IDEOGRAPHIC LEVEL TONE MARK
-302B;CM;IDEOGRAPHIC RISING TONE MARK
-302C;CM;IDEOGRAPHIC DEPARTING TONE MARK
-302D;CM;IDEOGRAPHIC ENTERING TONE MARK
-302E;CM;HANGUL SINGLE DOT TONE MARK
-302F;CM;HANGUL DOUBLE DOT TONE MARK
-3030;ID;WAVY DASH
-3031;ID;VERTICAL KANA REPEAT MARK
-3032;ID;VERTICAL KANA REPEAT WITH VOICED SOUND MARK
-3033;ID;VERTICAL KANA REPEAT MARK UPPER HALF
-3034;ID;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
-3035;ID;VERTICAL KANA REPEAT MARK LOWER HALF
-3036;ID;CIRCLED POSTAL MARK
-3037;ID;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
-3038;ID;HANGZHOU NUMERAL TEN
-3039;ID;HANGZHOU NUMERAL TWENTY
-303A;ID;HANGZHOU NUMERAL THIRTY
-303E;ID;IDEOGRAPHIC VARIATION INDICATOR
-303F;ID;IDEOGRAPHIC HALF FILL SPACE
-3041;NS;HIRAGANA LETTER SMALL A
-3042;ID;HIRAGANA LETTER A
-3043;NS;HIRAGANA LETTER SMALL I
-3044;ID;HIRAGANA LETTER I
-3045;NS;HIRAGANA LETTER SMALL U
-3046;ID;HIRAGANA LETTER U
-3047;NS;HIRAGANA LETTER SMALL E
-3048;ID;HIRAGANA LETTER E
-3049;NS;HIRAGANA LETTER SMALL O
-304A;ID;HIRAGANA LETTER O
-304B;ID;HIRAGANA LETTER KA
-304C;ID;HIRAGANA LETTER GA
-304D;ID;HIRAGANA LETTER KI
-304E;ID;HIRAGANA LETTER GI
-304F;ID;HIRAGANA LETTER KU
-3050;ID;HIRAGANA LETTER GU
-3051;ID;HIRAGANA LETTER KE
-3052;ID;HIRAGANA LETTER GE
-3053;ID;HIRAGANA LETTER KO
-3054;ID;HIRAGANA LETTER GO
-3055;ID;HIRAGANA LETTER SA
-3056;ID;HIRAGANA LETTER ZA
-3057;ID;HIRAGANA LETTER SI
-3058;ID;HIRAGANA LETTER ZI
-3059;ID;HIRAGANA LETTER SU
-305A;ID;HIRAGANA LETTER ZU
-305B;ID;HIRAGANA LETTER SE
-305C;ID;HIRAGANA LETTER ZE
-305D;ID;HIRAGANA LETTER SO
-305E;ID;HIRAGANA LETTER ZO
-305F;ID;HIRAGANA LETTER TA
-3060;ID;HIRAGANA LETTER DA
-3061;ID;HIRAGANA LETTER TI
-3062;ID;HIRAGANA LETTER DI
-3063;NS;HIRAGANA LETTER SMALL TU
-3064;ID;HIRAGANA LETTER TU
-3065;ID;HIRAGANA LETTER DU
-3066;ID;HIRAGANA LETTER TE
-3067;ID;HIRAGANA LETTER DE
-3068;ID;HIRAGANA LETTER TO
-3069;ID;HIRAGANA LETTER DO
-306A;ID;HIRAGANA LETTER NA
-306B;ID;HIRAGANA LETTER NI
-306C;ID;HIRAGANA LETTER NU
-306D;ID;HIRAGANA LETTER NE
-306E;ID;HIRAGANA LETTER NO
-306F;ID;HIRAGANA LETTER HA
-3070;ID;HIRAGANA LETTER BA
-3071;ID;HIRAGANA LETTER PA
-3072;ID;HIRAGANA LETTER HI
-3073;ID;HIRAGANA LETTER BI
-3074;ID;HIRAGANA LETTER PI
-3075;ID;HIRAGANA LETTER HU
-3076;ID;HIRAGANA LETTER BU
-3077;ID;HIRAGANA LETTER PU
-3078;ID;HIRAGANA LETTER HE
-3079;ID;HIRAGANA LETTER BE
-307A;ID;HIRAGANA LETTER PE
-307B;ID;HIRAGANA LETTER HO
-307C;ID;HIRAGANA LETTER BO
-307D;ID;HIRAGANA LETTER PO
-307E;ID;HIRAGANA LETTER MA
-307F;ID;HIRAGANA LETTER MI
-3080;ID;HIRAGANA LETTER MU
-3081;ID;HIRAGANA LETTER ME
-3082;ID;HIRAGANA LETTER MO
-3083;NS;HIRAGANA LETTER SMALL YA
-3084;ID;HIRAGANA LETTER YA
-3085;NS;HIRAGANA LETTER SMALL YU
-3086;ID;HIRAGANA LETTER YU
-3087;NS;HIRAGANA LETTER SMALL YO
-3088;ID;HIRAGANA LETTER YO
-3089;ID;HIRAGANA LETTER RA
-308A;ID;HIRAGANA LETTER RI
-308B;ID;HIRAGANA LETTER RU
-308C;ID;HIRAGANA LETTER RE
-308D;ID;HIRAGANA LETTER RO
-308E;NS;HIRAGANA LETTER SMALL WA
-308F;ID;HIRAGANA LETTER WA
-3090;ID;HIRAGANA LETTER WI
-3091;ID;HIRAGANA LETTER WE
-3092;ID;HIRAGANA LETTER WO
-3093;ID;HIRAGANA LETTER N
-3094;ID;HIRAGANA LETTER VU
-3099;CM;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
-309A;CM;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-309B;NS;KATAKANA-HIRAGANA VOICED SOUND MARK
-309C;NS;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-309D;NS;HIRAGANA ITERATION MARK
-309E;NS;HIRAGANA VOICED ITERATION MARK
-30A1;NS;KATAKANA LETTER SMALL A
-30A2;ID;KATAKANA LETTER A
-30A3;NS;KATAKANA LETTER SMALL I
-30A4;ID;KATAKANA LETTER I
-30A5;NS;KATAKANA LETTER SMALL U
-30A6;ID;KATAKANA LETTER U
-30A7;NS;KATAKANA LETTER SMALL E
-30A8;ID;KATAKANA LETTER E
-30A9;NS;KATAKANA LETTER SMALL O
-30AA;ID;KATAKANA LETTER O
-30AB;ID;KATAKANA LETTER KA
-30AC;ID;KATAKANA LETTER GA
-30AD;ID;KATAKANA LETTER KI
-30AE;ID;KATAKANA LETTER GI
-30AF;ID;KATAKANA LETTER KU
-30B0;ID;KATAKANA LETTER GU
-30B1;ID;KATAKANA LETTER KE
-30B2;ID;KATAKANA LETTER GE
-30B3;ID;KATAKANA LETTER KO
-30B4;ID;KATAKANA LETTER GO
-30B5;ID;KATAKANA LETTER SA
-30B6;ID;KATAKANA LETTER ZA
-30B7;ID;KATAKANA LETTER SI
-30B8;ID;KATAKANA LETTER ZI
-30B9;ID;KATAKANA LETTER SU
-30BA;ID;KATAKANA LETTER ZU
-30BB;ID;KATAKANA LETTER SE
-30BC;ID;KATAKANA LETTER ZE
-30BD;ID;KATAKANA LETTER SO
-30BE;ID;KATAKANA LETTER ZO
-30BF;ID;KATAKANA LETTER TA
-30C0;ID;KATAKANA LETTER DA
-30C1;ID;KATAKANA LETTER TI
-30C2;ID;KATAKANA LETTER DI
-30C3;NS;KATAKANA LETTER SMALL TU
-30C4;ID;KATAKANA LETTER TU
-30C5;ID;KATAKANA LETTER DU
-30C6;ID;KATAKANA LETTER TE
-30C7;ID;KATAKANA LETTER DE
-30C8;ID;KATAKANA LETTER TO
-30C9;ID;KATAKANA LETTER DO
-30CA;ID;KATAKANA LETTER NA
-30CB;ID;KATAKANA LETTER NI
-30CC;ID;KATAKANA LETTER NU
-30CD;ID;KATAKANA LETTER NE
-30CE;ID;KATAKANA LETTER NO
-30CF;ID;KATAKANA LETTER HA
-30D0;ID;KATAKANA LETTER BA
-30D1;ID;KATAKANA LETTER PA
-30D2;ID;KATAKANA LETTER HI
-30D3;ID;KATAKANA LETTER BI
-30D4;ID;KATAKANA LETTER PI
-30D5;ID;KATAKANA LETTER HU
-30D6;ID;KATAKANA LETTER BU
-30D7;ID;KATAKANA LETTER PU
-30D8;ID;KATAKANA LETTER HE
-30D9;ID;KATAKANA LETTER BE
-30DA;ID;KATAKANA LETTER PE
-30DB;ID;KATAKANA LETTER HO
-30DC;ID;KATAKANA LETTER BO
-30DD;ID;KATAKANA LETTER PO
-30DE;ID;KATAKANA LETTER MA
-30DF;ID;KATAKANA LETTER MI
-30E0;ID;KATAKANA LETTER MU
-30E1;ID;KATAKANA LETTER ME
-30E2;ID;KATAKANA LETTER MO
-30E3;NS;KATAKANA LETTER SMALL YA
-30E4;ID;KATAKANA LETTER YA
-30E5;NS;KATAKANA LETTER SMALL YU
-30E6;ID;KATAKANA LETTER YU
-30E7;NS;KATAKANA LETTER SMALL YO
-30E8;ID;KATAKANA LETTER YO
-30E9;ID;KATAKANA LETTER RA
-30EA;ID;KATAKANA LETTER RI
-30EB;ID;KATAKANA LETTER RU
-30EC;ID;KATAKANA LETTER RE
-30ED;ID;KATAKANA LETTER RO
-30EE;NS;KATAKANA LETTER SMALL WA
-30EF;ID;KATAKANA LETTER WA
-30F0;ID;KATAKANA LETTER WI
-30F1;ID;KATAKANA LETTER WE
-30F2;ID;KATAKANA LETTER WO
-30F3;ID;KATAKANA LETTER N
-30F4;ID;KATAKANA LETTER VU
-30F5;NS;KATAKANA LETTER SMALL KA
-30F6;NS;KATAKANA LETTER SMALL KE
-30F7;ID;KATAKANA LETTER VA
-30F8;ID;KATAKANA LETTER VI
-30F9;ID;KATAKANA LETTER VE
-30FA;ID;KATAKANA LETTER VO
-30FB;NS;KATAKANA MIDDLE DOT
-30FC;ID;KATAKANA-HIRAGANA PROLONGED SOUND MARK
-30FD;NS;KATAKANA ITERATION MARK
-30FE;ID;KATAKANA VOICED ITERATION MARK
-3105;ID;BOPOMOFO LETTER B
-3106;ID;BOPOMOFO LETTER P
-3107;ID;BOPOMOFO LETTER M
-3108;ID;BOPOMOFO LETTER F
-3109;ID;BOPOMOFO LETTER D
-310A;ID;BOPOMOFO LETTER T
-310B;ID;BOPOMOFO LETTER N
-310C;ID;BOPOMOFO LETTER L
-310D;ID;BOPOMOFO LETTER G
-310E;ID;BOPOMOFO LETTER K
-310F;ID;BOPOMOFO LETTER H
-3110;ID;BOPOMOFO LETTER J
-3111;ID;BOPOMOFO LETTER Q
-3112;ID;BOPOMOFO LETTER X
-3113;ID;BOPOMOFO LETTER ZH
-3114;ID;BOPOMOFO LETTER CH
-3115;ID;BOPOMOFO LETTER SH
-3116;ID;BOPOMOFO LETTER R
-3117;ID;BOPOMOFO LETTER Z
-3118;ID;BOPOMOFO LETTER C
-3119;ID;BOPOMOFO LETTER S
-311A;ID;BOPOMOFO LETTER A
-311B;ID;BOPOMOFO LETTER O
-311C;ID;BOPOMOFO LETTER E
-311D;ID;BOPOMOFO LETTER EH
-311E;ID;BOPOMOFO LETTER AI
-311F;ID;BOPOMOFO LETTER EI
-3120;ID;BOPOMOFO LETTER AU
-3121;ID;BOPOMOFO LETTER OU
-3122;ID;BOPOMOFO LETTER AN
-3123;ID;BOPOMOFO LETTER EN
-3124;ID;BOPOMOFO LETTER ANG
-3125;ID;BOPOMOFO LETTER ENG
-3126;ID;BOPOMOFO LETTER ER
-3127;ID;BOPOMOFO LETTER I
-3128;ID;BOPOMOFO LETTER U
-3129;ID;BOPOMOFO LETTER IU
-312A;ID;BOPOMOFO LETTER V
-312B;ID;BOPOMOFO LETTER NG
-312C;ID;BOPOMOFO LETTER GN
-3131;ID;HANGUL LETTER KIYEOK
-3132;ID;HANGUL LETTER SSANGKIYEOK
-3133;ID;HANGUL LETTER KIYEOK-SIOS
-3134;ID;HANGUL LETTER NIEUN
-3135;ID;HANGUL LETTER NIEUN-CIEUC
-3136;ID;HANGUL LETTER NIEUN-HIEUH
-3137;ID;HANGUL LETTER TIKEUT
-3138;ID;HANGUL LETTER SSANGTIKEUT
-3139;ID;HANGUL LETTER RIEUL
-313A;ID;HANGUL LETTER RIEUL-KIYEOK
-313B;ID;HANGUL LETTER RIEUL-MIEUM
-313C;ID;HANGUL LETTER RIEUL-PIEUP
-313D;ID;HANGUL LETTER RIEUL-SIOS
-313E;ID;HANGUL LETTER RIEUL-THIEUTH
-313F;ID;HANGUL LETTER RIEUL-PHIEUPH
-3140;ID;HANGUL LETTER RIEUL-HIEUH
-3141;ID;HANGUL LETTER MIEUM
-3142;ID;HANGUL LETTER PIEUP
-3143;ID;HANGUL LETTER SSANGPIEUP
-3144;ID;HANGUL LETTER PIEUP-SIOS
-3145;ID;HANGUL LETTER SIOS
-3146;ID;HANGUL LETTER SSANGSIOS
-3147;ID;HANGUL LETTER IEUNG
-3148;ID;HANGUL LETTER CIEUC
-3149;ID;HANGUL LETTER SSANGCIEUC
-314A;ID;HANGUL LETTER CHIEUCH
-314B;ID;HANGUL LETTER KHIEUKH
-314C;ID;HANGUL LETTER THIEUTH
-314D;ID;HANGUL LETTER PHIEUPH
-314E;ID;HANGUL LETTER HIEUH
-314F;ID;HANGUL LETTER A
-3150;ID;HANGUL LETTER AE
-3151;ID;HANGUL LETTER YA
-3152;ID;HANGUL LETTER YAE
-3153;ID;HANGUL LETTER EO
-3154;ID;HANGUL LETTER E
-3155;ID;HANGUL LETTER YEO
-3156;ID;HANGUL LETTER YE
-3157;ID;HANGUL LETTER O
-3158;ID;HANGUL LETTER WA
-3159;ID;HANGUL LETTER WAE
-315A;ID;HANGUL LETTER OE
-315B;ID;HANGUL LETTER YO
-315C;ID;HANGUL LETTER U
-315D;ID;HANGUL LETTER WEO
-315E;ID;HANGUL LETTER WE
-315F;ID;HANGUL LETTER WI
-3160;ID;HANGUL LETTER YU
-3161;ID;HANGUL LETTER EU
-3162;ID;HANGUL LETTER YI
-3163;ID;HANGUL LETTER I
-3164;ID;HANGUL FILLER
-3165;ID;HANGUL LETTER SSANGNIEUN
-3166;ID;HANGUL LETTER NIEUN-TIKEUT
-3167;ID;HANGUL LETTER NIEUN-SIOS
-3168;ID;HANGUL LETTER NIEUN-PANSIOS
-3169;ID;HANGUL LETTER RIEUL-KIYEOK-SIOS
-316A;ID;HANGUL LETTER RIEUL-TIKEUT
-316B;ID;HANGUL LETTER RIEUL-PIEUP-SIOS
-316C;ID;HANGUL LETTER RIEUL-PANSIOS
-316D;ID;HANGUL LETTER RIEUL-YEORINHIEUH
-316E;ID;HANGUL LETTER MIEUM-PIEUP
-316F;ID;HANGUL LETTER MIEUM-SIOS
-3170;ID;HANGUL LETTER MIEUM-PANSIOS
-3171;ID;HANGUL LETTER KAPYEOUNMIEUM
-3172;ID;HANGUL LETTER PIEUP-KIYEOK
-3173;ID;HANGUL LETTER PIEUP-TIKEUT
-3174;ID;HANGUL LETTER PIEUP-SIOS-KIYEOK
-3175;ID;HANGUL LETTER PIEUP-SIOS-TIKEUT
-3176;ID;HANGUL LETTER PIEUP-CIEUC
-3177;ID;HANGUL LETTER PIEUP-THIEUTH
-3178;ID;HANGUL LETTER KAPYEOUNPIEUP
-3179;ID;HANGUL LETTER KAPYEOUNSSANGPIEUP
-317A;ID;HANGUL LETTER SIOS-KIYEOK
-317B;ID;HANGUL LETTER SIOS-NIEUN
-317C;ID;HANGUL LETTER SIOS-TIKEUT
-317D;ID;HANGUL LETTER SIOS-PIEUP
-317E;ID;HANGUL LETTER SIOS-CIEUC
-317F;ID;HANGUL LETTER PANSIOS
-3180;ID;HANGUL LETTER SSANGIEUNG
-3181;ID;HANGUL LETTER YESIEUNG
-3182;ID;HANGUL LETTER YESIEUNG-SIOS
-3183;ID;HANGUL LETTER YESIEUNG-PANSIOS
-3184;ID;HANGUL LETTER KAPYEOUNPHIEUPH
-3185;ID;HANGUL LETTER SSANGHIEUH
-3186;ID;HANGUL LETTER YEORINHIEUH
-3187;ID;HANGUL LETTER YO-YA
-3188;ID;HANGUL LETTER YO-YAE
-3189;ID;HANGUL LETTER YO-I
-318A;ID;HANGUL LETTER YU-YEO
-318B;ID;HANGUL LETTER YU-YE
-318C;ID;HANGUL LETTER YU-I
-318D;ID;HANGUL LETTER ARAEA
-318E;ID;HANGUL LETTER ARAEAE
-3190;ID;IDEOGRAPHIC ANNOTATION LINKING MARK
-3191;ID;IDEOGRAPHIC ANNOTATION REVERSE MARK
-3192;ID;IDEOGRAPHIC ANNOTATION ONE MARK
-3193;ID;IDEOGRAPHIC ANNOTATION TWO MARK
-3194;ID;IDEOGRAPHIC ANNOTATION THREE MARK
-3195;ID;IDEOGRAPHIC ANNOTATION FOUR MARK
-3196;ID;IDEOGRAPHIC ANNOTATION TOP MARK
-3197;ID;IDEOGRAPHIC ANNOTATION MIDDLE MARK
-3198;ID;IDEOGRAPHIC ANNOTATION BOTTOM MARK
-3199;ID;IDEOGRAPHIC ANNOTATION FIRST MARK
-319A;ID;IDEOGRAPHIC ANNOTATION SECOND MARK
-319B;ID;IDEOGRAPHIC ANNOTATION THIRD MARK
-319C;ID;IDEOGRAPHIC ANNOTATION FOURTH MARK
-319D;ID;IDEOGRAPHIC ANNOTATION HEAVEN MARK
-319E;ID;IDEOGRAPHIC ANNOTATION EARTH MARK
-319F;ID;IDEOGRAPHIC ANNOTATION MAN MARK
-31A0;ID;BOPOMOFO LETTER BU
-31A1;ID;BOPOMOFO LETTER ZI
-31A2;ID;BOPOMOFO LETTER JI
-31A3;ID;BOPOMOFO LETTER GU
-31A4;ID;BOPOMOFO LETTER EE
-31A5;ID;BOPOMOFO LETTER ENN
-31A6;ID;BOPOMOFO LETTER OO
-31A7;ID;BOPOMOFO LETTER ONN
-31A8;ID;BOPOMOFO LETTER IR
-31A9;ID;BOPOMOFO LETTER ANN
-31AA;ID;BOPOMOFO LETTER INN
-31AB;ID;BOPOMOFO LETTER UNN
-31AC;ID;BOPOMOFO LETTER IM
-31AD;ID;BOPOMOFO LETTER NGG
-31AE;ID;BOPOMOFO LETTER AINN
-31AF;ID;BOPOMOFO LETTER AUNN
-31B0;ID;BOPOMOFO LETTER AM
-31B1;ID;BOPOMOFO LETTER OM
-31B2;ID;BOPOMOFO LETTER ONG
-31B3;ID;BOPOMOFO LETTER INNN
-31B4;ID;BOPOMOFO FINAL LETTER P
-31B5;ID;BOPOMOFO FINAL LETTER T
-31B6;ID;BOPOMOFO FINAL LETTER K
-31B7;ID;BOPOMOFO FINAL LETTER H
-3200;ID;PARENTHESIZED HANGUL KIYEOK
-3201;ID;PARENTHESIZED HANGUL NIEUN
-3202;ID;PARENTHESIZED HANGUL TIKEUT
-3203;ID;PARENTHESIZED HANGUL RIEUL
-3204;ID;PARENTHESIZED HANGUL MIEUM
-3205;ID;PARENTHESIZED HANGUL PIEUP
-3206;ID;PARENTHESIZED HANGUL SIOS
-3207;ID;PARENTHESIZED HANGUL IEUNG
-3208;ID;PARENTHESIZED HANGUL CIEUC
-3209;ID;PARENTHESIZED HANGUL CHIEUCH
-320A;ID;PARENTHESIZED HANGUL KHIEUKH
-320B;ID;PARENTHESIZED HANGUL THIEUTH
-320C;ID;PARENTHESIZED HANGUL PHIEUPH
-320D;ID;PARENTHESIZED HANGUL HIEUH
-320E;ID;PARENTHESIZED HANGUL KIYEOK A
-320F;ID;PARENTHESIZED HANGUL NIEUN A
-3210;ID;PARENTHESIZED HANGUL TIKEUT A
-3211;ID;PARENTHESIZED HANGUL RIEUL A
-3212;ID;PARENTHESIZED HANGUL MIEUM A
-3213;ID;PARENTHESIZED HANGUL PIEUP A
-3214;ID;PARENTHESIZED HANGUL SIOS A
-3215;ID;PARENTHESIZED HANGUL IEUNG A
-3216;ID;PARENTHESIZED HANGUL CIEUC A
-3217;ID;PARENTHESIZED HANGUL CHIEUCH A
-3218;ID;PARENTHESIZED HANGUL KHIEUKH A
-3219;ID;PARENTHESIZED HANGUL THIEUTH A
-321A;ID;PARENTHESIZED HANGUL PHIEUPH A
-321B;ID;PARENTHESIZED HANGUL HIEUH A
-321C;ID;PARENTHESIZED HANGUL CIEUC U
-3220;ID;PARENTHESIZED IDEOGRAPH ONE
-3221;ID;PARENTHESIZED IDEOGRAPH TWO
-3222;ID;PARENTHESIZED IDEOGRAPH THREE
-3223;ID;PARENTHESIZED IDEOGRAPH FOUR
-3224;ID;PARENTHESIZED IDEOGRAPH FIVE
-3225;ID;PARENTHESIZED IDEOGRAPH SIX
-3226;ID;PARENTHESIZED IDEOGRAPH SEVEN
-3227;ID;PARENTHESIZED IDEOGRAPH EIGHT
-3228;ID;PARENTHESIZED IDEOGRAPH NINE
-3229;ID;PARENTHESIZED IDEOGRAPH TEN
-322A;ID;PARENTHESIZED IDEOGRAPH MOON
-322B;ID;PARENTHESIZED IDEOGRAPH FIRE
-322C;ID;PARENTHESIZED IDEOGRAPH WATER
-322D;ID;PARENTHESIZED IDEOGRAPH WOOD
-322E;ID;PARENTHESIZED IDEOGRAPH METAL
-322F;ID;PARENTHESIZED IDEOGRAPH EARTH
-3230;ID;PARENTHESIZED IDEOGRAPH SUN
-3231;ID;PARENTHESIZED IDEOGRAPH STOCK
-3232;ID;PARENTHESIZED IDEOGRAPH HAVE
-3233;ID;PARENTHESIZED IDEOGRAPH SOCIETY
-3234;ID;PARENTHESIZED IDEOGRAPH NAME
-3235;ID;PARENTHESIZED IDEOGRAPH SPECIAL
-3236;ID;PARENTHESIZED IDEOGRAPH FINANCIAL
-3237;ID;PARENTHESIZED IDEOGRAPH CONGRATULATION
-3238;ID;PARENTHESIZED IDEOGRAPH LABOR
-3239;ID;PARENTHESIZED IDEOGRAPH REPRESENT
-323A;ID;PARENTHESIZED IDEOGRAPH CALL
-323B;ID;PARENTHESIZED IDEOGRAPH STUDY
-323C;ID;PARENTHESIZED IDEOGRAPH SUPERVISE
-323D;ID;PARENTHESIZED IDEOGRAPH ENTERPRISE
-323E;ID;PARENTHESIZED IDEOGRAPH RESOURCE
-323F;ID;PARENTHESIZED IDEOGRAPH ALLIANCE
-3240;ID;PARENTHESIZED IDEOGRAPH FESTIVAL
-3241;ID;PARENTHESIZED IDEOGRAPH REST
-3242;ID;PARENTHESIZED IDEOGRAPH SELF
-3243;ID;PARENTHESIZED IDEOGRAPH REACH
-3260;ID;CIRCLED HANGUL KIYEOK
-3261;ID;CIRCLED HANGUL NIEUN
-3262;ID;CIRCLED HANGUL TIKEUT
-3263;ID;CIRCLED HANGUL RIEUL
-3264;ID;CIRCLED HANGUL MIEUM
-3265;ID;CIRCLED HANGUL PIEUP
-3266;ID;CIRCLED HANGUL SIOS
-3267;ID;CIRCLED HANGUL IEUNG
-3268;ID;CIRCLED HANGUL CIEUC
-3269;ID;CIRCLED HANGUL CHIEUCH
-326A;ID;CIRCLED HANGUL KHIEUKH
-326B;ID;CIRCLED HANGUL THIEUTH
-326C;ID;CIRCLED HANGUL PHIEUPH
-326D;ID;CIRCLED HANGUL HIEUH
-326E;ID;CIRCLED HANGUL KIYEOK A
-326F;ID;CIRCLED HANGUL NIEUN A
-3270;ID;CIRCLED HANGUL TIKEUT A
-3271;ID;CIRCLED HANGUL RIEUL A
-3272;ID;CIRCLED HANGUL MIEUM A
-3273;ID;CIRCLED HANGUL PIEUP A
-3274;ID;CIRCLED HANGUL SIOS A
-3275;ID;CIRCLED HANGUL IEUNG A
-3276;ID;CIRCLED HANGUL CIEUC A
-3277;ID;CIRCLED HANGUL CHIEUCH A
-3278;ID;CIRCLED HANGUL KHIEUKH A
-3279;ID;CIRCLED HANGUL THIEUTH A
-327A;ID;CIRCLED HANGUL PHIEUPH A
-327B;ID;CIRCLED HANGUL HIEUH A
-327F;ID;KOREAN STANDARD SYMBOL
-3280;ID;CIRCLED IDEOGRAPH ONE
-3281;ID;CIRCLED IDEOGRAPH TWO
-3282;ID;CIRCLED IDEOGRAPH THREE
-3283;ID;CIRCLED IDEOGRAPH FOUR
-3284;ID;CIRCLED IDEOGRAPH FIVE
-3285;ID;CIRCLED IDEOGRAPH SIX
-3286;ID;CIRCLED IDEOGRAPH SEVEN
-3287;ID;CIRCLED IDEOGRAPH EIGHT
-3288;ID;CIRCLED IDEOGRAPH NINE
-3289;ID;CIRCLED IDEOGRAPH TEN
-328A;ID;CIRCLED IDEOGRAPH MOON
-328B;ID;CIRCLED IDEOGRAPH FIRE
-328C;ID;CIRCLED IDEOGRAPH WATER
-328D;ID;CIRCLED IDEOGRAPH WOOD
-328E;ID;CIRCLED IDEOGRAPH METAL
-328F;ID;CIRCLED IDEOGRAPH EARTH
-3290;ID;CIRCLED IDEOGRAPH SUN
-3291;ID;CIRCLED IDEOGRAPH STOCK
-3292;ID;CIRCLED IDEOGRAPH HAVE
-3293;ID;CIRCLED IDEOGRAPH SOCIETY
-3294;ID;CIRCLED IDEOGRAPH NAME
-3295;ID;CIRCLED IDEOGRAPH SPECIAL
-3296;ID;CIRCLED IDEOGRAPH FINANCIAL
-3297;ID;CIRCLED IDEOGRAPH CONGRATULATION
-3298;ID;CIRCLED IDEOGRAPH LABOR
-3299;ID;CIRCLED IDEOGRAPH SECRET
-329A;ID;CIRCLED IDEOGRAPH MALE
-329B;ID;CIRCLED IDEOGRAPH FEMALE
-329C;ID;CIRCLED IDEOGRAPH SUITABLE
-329D;ID;CIRCLED IDEOGRAPH EXCELLENT
-329E;ID;CIRCLED IDEOGRAPH PRINT
-329F;ID;CIRCLED IDEOGRAPH ATTENTION
-32A0;ID;CIRCLED IDEOGRAPH ITEM
-32A1;ID;CIRCLED IDEOGRAPH REST
-32A2;ID;CIRCLED IDEOGRAPH COPY
-32A3;ID;CIRCLED IDEOGRAPH CORRECT
-32A4;ID;CIRCLED IDEOGRAPH HIGH
-32A5;ID;CIRCLED IDEOGRAPH CENTRE
-32A6;ID;CIRCLED IDEOGRAPH LOW
-32A7;ID;CIRCLED IDEOGRAPH LEFT
-32A8;ID;CIRCLED IDEOGRAPH RIGHT
-32A9;ID;CIRCLED IDEOGRAPH MEDICINE
-32AA;ID;CIRCLED IDEOGRAPH RELIGION
-32AB;ID;CIRCLED IDEOGRAPH STUDY
-32AC;ID;CIRCLED IDEOGRAPH SUPERVISE
-32AD;ID;CIRCLED IDEOGRAPH ENTERPRISE
-32AE;ID;CIRCLED IDEOGRAPH RESOURCE
-32AF;ID;CIRCLED IDEOGRAPH ALLIANCE
-32B0;ID;CIRCLED IDEOGRAPH NIGHT
-32C0;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
-32C1;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
-32C2;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
-32C3;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
-32C4;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
-32C5;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
-32C6;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
-32C7;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
-32C8;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
-32C9;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
-32CA;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
-32CB;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
-32D0;ID;CIRCLED KATAKANA A
-32D1;ID;CIRCLED KATAKANA I
-32D2;ID;CIRCLED KATAKANA U
-32D3;ID;CIRCLED KATAKANA E
-32D4;ID;CIRCLED KATAKANA O
-32D5;ID;CIRCLED KATAKANA KA
-32D6;ID;CIRCLED KATAKANA KI
-32D7;ID;CIRCLED KATAKANA KU
-32D8;ID;CIRCLED KATAKANA KE
-32D9;ID;CIRCLED KATAKANA KO
-32DA;ID;CIRCLED KATAKANA SA
-32DB;ID;CIRCLED KATAKANA SI
-32DC;ID;CIRCLED KATAKANA SU
-32DD;ID;CIRCLED KATAKANA SE
-32DE;ID;CIRCLED KATAKANA SO
-32DF;ID;CIRCLED KATAKANA TA
-32E0;ID;CIRCLED KATAKANA TI
-32E1;ID;CIRCLED KATAKANA TU
-32E2;ID;CIRCLED KATAKANA TE
-32E3;ID;CIRCLED KATAKANA TO
-32E4;ID;CIRCLED KATAKANA NA
-32E5;ID;CIRCLED KATAKANA NI
-32E6;ID;CIRCLED KATAKANA NU
-32E7;ID;CIRCLED KATAKANA NE
-32E8;ID;CIRCLED KATAKANA NO
-32E9;ID;CIRCLED KATAKANA HA
-32EA;ID;CIRCLED KATAKANA HI
-32EB;ID;CIRCLED KATAKANA HU
-32EC;ID;CIRCLED KATAKANA HE
-32ED;ID;CIRCLED KATAKANA HO
-32EE;ID;CIRCLED KATAKANA MA
-32EF;ID;CIRCLED KATAKANA MI
-32F0;ID;CIRCLED KATAKANA MU
-32F1;ID;CIRCLED KATAKANA ME
-32F2;ID;CIRCLED KATAKANA MO
-32F3;ID;CIRCLED KATAKANA YA
-32F4;ID;CIRCLED KATAKANA YU
-32F5;ID;CIRCLED KATAKANA YO
-32F6;ID;CIRCLED KATAKANA RA
-32F7;ID;CIRCLED KATAKANA RI
-32F8;ID;CIRCLED KATAKANA RU
-32F9;ID;CIRCLED KATAKANA RE
-32FA;ID;CIRCLED KATAKANA RO
-32FB;ID;CIRCLED KATAKANA WA
-32FC;ID;CIRCLED KATAKANA WI
-32FD;ID;CIRCLED KATAKANA WE
-32FE;ID;CIRCLED KATAKANA WO
-3300;ID;SQUARE APAATO
-3301;ID;SQUARE ARUHUA
-3302;ID;SQUARE ANPEA
-3303;ID;SQUARE AARU
-3304;ID;SQUARE ININGU
-3305;ID;SQUARE INTI
-3306;ID;SQUARE UON
-3307;ID;SQUARE ESUKUUDO
-3308;ID;SQUARE EEKAA
-3309;ID;SQUARE ONSU
-330A;ID;SQUARE OOMU
-330B;ID;SQUARE KAIRI
-330C;ID;SQUARE KARATTO
-330D;ID;SQUARE KARORII
-330E;ID;SQUARE GARON
-330F;ID;SQUARE GANMA
-3310;ID;SQUARE GIGA
-3311;ID;SQUARE GINII
-3312;ID;SQUARE KYURII
-3313;ID;SQUARE GIRUDAA
-3314;ID;SQUARE KIRO
-3315;ID;SQUARE KIROGURAMU
-3316;ID;SQUARE KIROMEETORU
-3317;ID;SQUARE KIROWATTO
-3318;ID;SQUARE GURAMU
-3319;ID;SQUARE GURAMUTON
-331A;ID;SQUARE KURUZEIRO
-331B;ID;SQUARE KUROONE
-331C;ID;SQUARE KEESU
-331D;ID;SQUARE KORUNA
-331E;ID;SQUARE KOOPO
-331F;ID;SQUARE SAIKURU
-3320;ID;SQUARE SANTIIMU
-3321;ID;SQUARE SIRINGU
-3322;ID;SQUARE SENTI
-3323;ID;SQUARE SENTO
-3324;ID;SQUARE DAASU
-3325;ID;SQUARE DESI
-3326;ID;SQUARE DORU
-3327;ID;SQUARE TON
-3328;ID;SQUARE NANO
-3329;ID;SQUARE NOTTO
-332A;ID;SQUARE HAITU
-332B;ID;SQUARE PAASENTO
-332C;ID;SQUARE PAATU
-332D;ID;SQUARE BAARERU
-332E;ID;SQUARE PIASUTORU
-332F;ID;SQUARE PIKURU
-3330;ID;SQUARE PIKO
-3331;ID;SQUARE BIRU
-3332;ID;SQUARE HUARADDO
-3333;ID;SQUARE HUIITO
-3334;ID;SQUARE BUSSYERU
-3335;ID;SQUARE HURAN
-3336;ID;SQUARE HEKUTAARU
-3337;ID;SQUARE PESO
-3338;ID;SQUARE PENIHI
-3339;ID;SQUARE HERUTU
-333A;ID;SQUARE PENSU
-333B;ID;SQUARE PEEZI
-333C;ID;SQUARE BEETA
-333D;ID;SQUARE POINTO
-333E;ID;SQUARE BORUTO
-333F;ID;SQUARE HON
-3340;ID;SQUARE PONDO
-3341;ID;SQUARE HOORU
-3342;ID;SQUARE HOON
-3343;ID;SQUARE MAIKURO
-3344;ID;SQUARE MAIRU
-3345;ID;SQUARE MAHHA
-3346;ID;SQUARE MARUKU
-3347;ID;SQUARE MANSYON
-3348;ID;SQUARE MIKURON
-3349;ID;SQUARE MIRI
-334A;ID;SQUARE MIRIBAARU
-334B;ID;SQUARE MEGA
-334C;ID;SQUARE MEGATON
-334D;ID;SQUARE MEETORU
-334E;ID;SQUARE YAADO
-334F;ID;SQUARE YAARU
-3350;ID;SQUARE YUAN
-3351;ID;SQUARE RITTORU
-3352;ID;SQUARE RIRA
-3353;ID;SQUARE RUPII
-3354;ID;SQUARE RUUBURU
-3355;ID;SQUARE REMU
-3356;ID;SQUARE RENTOGEN
-3357;ID;SQUARE WATTO
-3358;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
-3359;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
-335A;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
-335B;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
-335C;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
-335D;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
-335E;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
-335F;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
-3360;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
-3361;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
-3362;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
-3363;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
-3364;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
-3365;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
-3366;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
-3367;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
-3368;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
-3369;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
-336A;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
-336B;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
-336C;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
-336D;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
-336E;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
-336F;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
-3370;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
-3371;ID;SQUARE HPA
-3372;ID;SQUARE DA
-3373;ID;SQUARE AU
-3374;ID;SQUARE BAR
-3375;ID;SQUARE OV
-3376;ID;SQUARE PC
-337B;ID;SQUARE ERA NAME HEISEI
-337C;ID;SQUARE ERA NAME SYOUWA
-337D;ID;SQUARE ERA NAME TAISYOU
-337E;ID;SQUARE ERA NAME MEIZI
-337F;ID;SQUARE CORPORATION
-3380;ID;SQUARE PA AMPS
-3381;ID;SQUARE NA
-3382;ID;SQUARE MU A
-3383;ID;SQUARE MA
-3384;ID;SQUARE KA
-3385;ID;SQUARE KB
-3386;ID;SQUARE MB
-3387;ID;SQUARE GB
-3388;ID;SQUARE CAL
-3389;ID;SQUARE KCAL
-338A;ID;SQUARE PF
-338B;ID;SQUARE NF
-338C;ID;SQUARE MU F
-338D;ID;SQUARE MU G
-338E;ID;SQUARE MG
-338F;ID;SQUARE KG
-3390;ID;SQUARE HZ
-3391;ID;SQUARE KHZ
-3392;ID;SQUARE MHZ
-3393;ID;SQUARE GHZ
-3394;ID;SQUARE THZ
-3395;ID;SQUARE MU L
-3396;ID;SQUARE ML
-3397;ID;SQUARE DL
-3398;ID;SQUARE KL
-3399;ID;SQUARE FM
-339A;ID;SQUARE NM
-339B;ID;SQUARE MU M
-339C;ID;SQUARE MM
-339D;ID;SQUARE CM
-339E;ID;SQUARE KM
-339F;ID;SQUARE MM SQUARED
-33A0;ID;SQUARE CM SQUARED
-33A1;ID;SQUARE M SQUARED
-33A2;ID;SQUARE KM SQUARED
-33A3;ID;SQUARE MM CUBED
-33A4;ID;SQUARE CM CUBED
-33A5;ID;SQUARE M CUBED
-33A6;ID;SQUARE KM CUBED
-33A7;ID;SQUARE M OVER S
-33A8;ID;SQUARE M OVER S SQUARED
-33A9;ID;SQUARE PA
-33AA;ID;SQUARE KPA
-33AB;ID;SQUARE MPA
-33AC;ID;SQUARE GPA
-33AD;ID;SQUARE RAD
-33AE;ID;SQUARE RAD OVER S
-33AF;ID;SQUARE RAD OVER S SQUARED
-33B0;ID;SQUARE PS
-33B1;ID;SQUARE NS
-33B2;ID;SQUARE MU S
-33B3;ID;SQUARE MS
-33B4;ID;SQUARE PV
-33B5;ID;SQUARE NV
-33B6;ID;SQUARE MU V
-33B7;ID;SQUARE MV
-33B8;ID;SQUARE KV
-33B9;ID;SQUARE MV MEGA
-33BA;ID;SQUARE PW
-33BB;ID;SQUARE NW
-33BC;ID;SQUARE MU W
-33BD;ID;SQUARE MW
-33BE;ID;SQUARE KW
-33BF;ID;SQUARE MW MEGA
-33C0;ID;SQUARE K OHM
-33C1;ID;SQUARE M OHM
-33C2;ID;SQUARE AM
-33C3;ID;SQUARE BQ
-33C4;ID;SQUARE CC
-33C5;ID;SQUARE CD
-33C6;ID;SQUARE C OVER KG
-33C7;ID;SQUARE CO
-33C8;ID;SQUARE DB
-33C9;ID;SQUARE GY
-33CA;ID;SQUARE HA
-33CB;ID;SQUARE HP
-33CC;ID;SQUARE IN
-33CD;ID;SQUARE KK
-33CE;ID;SQUARE KM CAPITAL
-33CF;ID;SQUARE KT
-33D0;ID;SQUARE LM
-33D1;ID;SQUARE LN
-33D2;ID;SQUARE LOG
-33D3;ID;SQUARE LX
-33D4;ID;SQUARE MB SMALL
-33D5;ID;SQUARE MIL
-33D6;ID;SQUARE MOL
-33D7;ID;SQUARE PH
-33D8;ID;SQUARE PM
-33D9;ID;SQUARE PPM
-33DA;ID;SQUARE PR
-33DB;ID;SQUARE SR
-33DC;ID;SQUARE SV
-33DD;ID;SQUARE WB
-33E0;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
-33E1;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
-33E2;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
-33E3;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
-33E4;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
-33E5;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
-33E6;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
-33E7;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
-33E8;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
-33E9;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
-33EA;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
-33EB;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
-33EC;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
-33ED;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
-33EE;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
-33EF;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
-33F0;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
-33F1;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
-33F2;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
-33F3;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
-33F4;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
-33F5;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
-33F6;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
-33F7;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
-33F8;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
-33F9;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
-33FA;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
-33FB;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
-33FC;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
-33FD;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
-33FE;ID;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
-3400;ID;<CJK Ideograph Extension A, First>
-4DB5;ID;<CJK Ideograph Extension A, Last>
-4E00;ID;<CJK Ideograph, First>
-9FA5;ID;<CJK Ideograph, Last>
-A000;ID;YI SYLLABLE IT
-A001;ID;YI SYLLABLE IX
-A002;ID;YI SYLLABLE I
-A003;ID;YI SYLLABLE IP
-A004;ID;YI SYLLABLE IET
-A005;ID;YI SYLLABLE IEX
-A006;ID;YI SYLLABLE IE
-A007;ID;YI SYLLABLE IEP
-A008;ID;YI SYLLABLE AT
-A009;ID;YI SYLLABLE AX
-A00A;ID;YI SYLLABLE A
-A00B;ID;YI SYLLABLE AP
-A00C;ID;YI SYLLABLE UOX
-A00D;ID;YI SYLLABLE UO
-A00E;ID;YI SYLLABLE UOP
-A00F;ID;YI SYLLABLE OT
-A010;ID;YI SYLLABLE OX
-A011;ID;YI SYLLABLE O
-A012;ID;YI SYLLABLE OP
-A013;ID;YI SYLLABLE EX
-A014;ID;YI SYLLABLE E
-A015;ID;YI SYLLABLE WU
-A016;ID;YI SYLLABLE BIT
-A017;ID;YI SYLLABLE BIX
-A018;ID;YI SYLLABLE BI
-A019;ID;YI SYLLABLE BIP
-A01A;ID;YI SYLLABLE BIET
-A01B;ID;YI SYLLABLE BIEX
-A01C;ID;YI SYLLABLE BIE
-A01D;ID;YI SYLLABLE BIEP
-A01E;ID;YI SYLLABLE BAT
-A01F;ID;YI SYLLABLE BAX
-A020;ID;YI SYLLABLE BA
-A021;ID;YI SYLLABLE BAP
-A022;ID;YI SYLLABLE BUOX
-A023;ID;YI SYLLABLE BUO
-A024;ID;YI SYLLABLE BUOP
-A025;ID;YI SYLLABLE BOT
-A026;ID;YI SYLLABLE BOX
-A027;ID;YI SYLLABLE BO
-A028;ID;YI SYLLABLE BOP
-A029;ID;YI SYLLABLE BEX
-A02A;ID;YI SYLLABLE BE
-A02B;ID;YI SYLLABLE BEP
-A02C;ID;YI SYLLABLE BUT
-A02D;ID;YI SYLLABLE BUX
-A02E;ID;YI SYLLABLE BU
-A02F;ID;YI SYLLABLE BUP
-A030;ID;YI SYLLABLE BURX
-A031;ID;YI SYLLABLE BUR
-A032;ID;YI SYLLABLE BYT
-A033;ID;YI SYLLABLE BYX
-A034;ID;YI SYLLABLE BY
-A035;ID;YI SYLLABLE BYP
-A036;ID;YI SYLLABLE BYRX
-A037;ID;YI SYLLABLE BYR
-A038;ID;YI SYLLABLE PIT
-A039;ID;YI SYLLABLE PIX
-A03A;ID;YI SYLLABLE PI
-A03B;ID;YI SYLLABLE PIP
-A03C;ID;YI SYLLABLE PIEX
-A03D;ID;YI SYLLABLE PIE
-A03E;ID;YI SYLLABLE PIEP
-A03F;ID;YI SYLLABLE PAT
-A040;ID;YI SYLLABLE PAX
-A041;ID;YI SYLLABLE PA
-A042;ID;YI SYLLABLE PAP
-A043;ID;YI SYLLABLE PUOX
-A044;ID;YI SYLLABLE PUO
-A045;ID;YI SYLLABLE PUOP
-A046;ID;YI SYLLABLE POT
-A047;ID;YI SYLLABLE POX
-A048;ID;YI SYLLABLE PO
-A049;ID;YI SYLLABLE POP
-A04A;ID;YI SYLLABLE PUT
-A04B;ID;YI SYLLABLE PUX
-A04C;ID;YI SYLLABLE PU
-A04D;ID;YI SYLLABLE PUP
-A04E;ID;YI SYLLABLE PURX
-A04F;ID;YI SYLLABLE PUR
-A050;ID;YI SYLLABLE PYT
-A051;ID;YI SYLLABLE PYX
-A052;ID;YI SYLLABLE PY
-A053;ID;YI SYLLABLE PYP
-A054;ID;YI SYLLABLE PYRX
-A055;ID;YI SYLLABLE PYR
-A056;ID;YI SYLLABLE BBIT
-A057;ID;YI SYLLABLE BBIX
-A058;ID;YI SYLLABLE BBI
-A059;ID;YI SYLLABLE BBIP
-A05A;ID;YI SYLLABLE BBIET
-A05B;ID;YI SYLLABLE BBIEX
-A05C;ID;YI SYLLABLE BBIE
-A05D;ID;YI SYLLABLE BBIEP
-A05E;ID;YI SYLLABLE BBAT
-A05F;ID;YI SYLLABLE BBAX
-A060;ID;YI SYLLABLE BBA
-A061;ID;YI SYLLABLE BBAP
-A062;ID;YI SYLLABLE BBUOX
-A063;ID;YI SYLLABLE BBUO
-A064;ID;YI SYLLABLE BBUOP
-A065;ID;YI SYLLABLE BBOT
-A066;ID;YI SYLLABLE BBOX
-A067;ID;YI SYLLABLE BBO
-A068;ID;YI SYLLABLE BBOP
-A069;ID;YI SYLLABLE BBEX
-A06A;ID;YI SYLLABLE BBE
-A06B;ID;YI SYLLABLE BBEP
-A06C;ID;YI SYLLABLE BBUT
-A06D;ID;YI SYLLABLE BBUX
-A06E;ID;YI SYLLABLE BBU
-A06F;ID;YI SYLLABLE BBUP
-A070;ID;YI SYLLABLE BBURX
-A071;ID;YI SYLLABLE BBUR
-A072;ID;YI SYLLABLE BBYT
-A073;ID;YI SYLLABLE BBYX
-A074;ID;YI SYLLABLE BBY
-A075;ID;YI SYLLABLE BBYP
-A076;ID;YI SYLLABLE NBIT
-A077;ID;YI SYLLABLE NBIX
-A078;ID;YI SYLLABLE NBI
-A079;ID;YI SYLLABLE NBIP
-A07A;ID;YI SYLLABLE NBIEX
-A07B;ID;YI SYLLABLE NBIE
-A07C;ID;YI SYLLABLE NBIEP
-A07D;ID;YI SYLLABLE NBAT
-A07E;ID;YI SYLLABLE NBAX
-A07F;ID;YI SYLLABLE NBA
-A080;ID;YI SYLLABLE NBAP
-A081;ID;YI SYLLABLE NBOT
-A082;ID;YI SYLLABLE NBOX
-A083;ID;YI SYLLABLE NBO
-A084;ID;YI SYLLABLE NBOP
-A085;ID;YI SYLLABLE NBUT
-A086;ID;YI SYLLABLE NBUX
-A087;ID;YI SYLLABLE NBU
-A088;ID;YI SYLLABLE NBUP
-A089;ID;YI SYLLABLE NBURX
-A08A;ID;YI SYLLABLE NBUR
-A08B;ID;YI SYLLABLE NBYT
-A08C;ID;YI SYLLABLE NBYX
-A08D;ID;YI SYLLABLE NBY
-A08E;ID;YI SYLLABLE NBYP
-A08F;ID;YI SYLLABLE NBYRX
-A090;ID;YI SYLLABLE NBYR
-A091;ID;YI SYLLABLE HMIT
-A092;ID;YI SYLLABLE HMIX
-A093;ID;YI SYLLABLE HMI
-A094;ID;YI SYLLABLE HMIP
-A095;ID;YI SYLLABLE HMIEX
-A096;ID;YI SYLLABLE HMIE
-A097;ID;YI SYLLABLE HMIEP
-A098;ID;YI SYLLABLE HMAT
-A099;ID;YI SYLLABLE HMAX
-A09A;ID;YI SYLLABLE HMA
-A09B;ID;YI SYLLABLE HMAP
-A09C;ID;YI SYLLABLE HMUOX
-A09D;ID;YI SYLLABLE HMUO
-A09E;ID;YI SYLLABLE HMUOP
-A09F;ID;YI SYLLABLE HMOT
-A0A0;ID;YI SYLLABLE HMOX
-A0A1;ID;YI SYLLABLE HMO
-A0A2;ID;YI SYLLABLE HMOP
-A0A3;ID;YI SYLLABLE HMUT
-A0A4;ID;YI SYLLABLE HMUX
-A0A5;ID;YI SYLLABLE HMU
-A0A6;ID;YI SYLLABLE HMUP
-A0A7;ID;YI SYLLABLE HMURX
-A0A8;ID;YI SYLLABLE HMUR
-A0A9;ID;YI SYLLABLE HMYX
-A0AA;ID;YI SYLLABLE HMY
-A0AB;ID;YI SYLLABLE HMYP
-A0AC;ID;YI SYLLABLE HMYRX
-A0AD;ID;YI SYLLABLE HMYR
-A0AE;ID;YI SYLLABLE MIT
-A0AF;ID;YI SYLLABLE MIX
-A0B0;ID;YI SYLLABLE MI
-A0B1;ID;YI SYLLABLE MIP
-A0B2;ID;YI SYLLABLE MIEX
-A0B3;ID;YI SYLLABLE MIE
-A0B4;ID;YI SYLLABLE MIEP
-A0B5;ID;YI SYLLABLE MAT
-A0B6;ID;YI SYLLABLE MAX
-A0B7;ID;YI SYLLABLE MA
-A0B8;ID;YI SYLLABLE MAP
-A0B9;ID;YI SYLLABLE MUOT
-A0BA;ID;YI SYLLABLE MUOX
-A0BB;ID;YI SYLLABLE MUO
-A0BC;ID;YI SYLLABLE MUOP
-A0BD;ID;YI SYLLABLE MOT
-A0BE;ID;YI SYLLABLE MOX
-A0BF;ID;YI SYLLABLE MO
-A0C0;ID;YI SYLLABLE MOP
-A0C1;ID;YI SYLLABLE MEX
-A0C2;ID;YI SYLLABLE ME
-A0C3;ID;YI SYLLABLE MUT
-A0C4;ID;YI SYLLABLE MUX
-A0C5;ID;YI SYLLABLE MU
-A0C6;ID;YI SYLLABLE MUP
-A0C7;ID;YI SYLLABLE MURX
-A0C8;ID;YI SYLLABLE MUR
-A0C9;ID;YI SYLLABLE MYT
-A0CA;ID;YI SYLLABLE MYX
-A0CB;ID;YI SYLLABLE MY
-A0CC;ID;YI SYLLABLE MYP
-A0CD;ID;YI SYLLABLE FIT
-A0CE;ID;YI SYLLABLE FIX
-A0CF;ID;YI SYLLABLE FI
-A0D0;ID;YI SYLLABLE FIP
-A0D1;ID;YI SYLLABLE FAT
-A0D2;ID;YI SYLLABLE FAX
-A0D3;ID;YI SYLLABLE FA
-A0D4;ID;YI SYLLABLE FAP
-A0D5;ID;YI SYLLABLE FOX
-A0D6;ID;YI SYLLABLE FO
-A0D7;ID;YI SYLLABLE FOP
-A0D8;ID;YI SYLLABLE FUT
-A0D9;ID;YI SYLLABLE FUX
-A0DA;ID;YI SYLLABLE FU
-A0DB;ID;YI SYLLABLE FUP
-A0DC;ID;YI SYLLABLE FURX
-A0DD;ID;YI SYLLABLE FUR
-A0DE;ID;YI SYLLABLE FYT
-A0DF;ID;YI SYLLABLE FYX
-A0E0;ID;YI SYLLABLE FY
-A0E1;ID;YI SYLLABLE FYP
-A0E2;ID;YI SYLLABLE VIT
-A0E3;ID;YI SYLLABLE VIX
-A0E4;ID;YI SYLLABLE VI
-A0E5;ID;YI SYLLABLE VIP
-A0E6;ID;YI SYLLABLE VIET
-A0E7;ID;YI SYLLABLE VIEX
-A0E8;ID;YI SYLLABLE VIE
-A0E9;ID;YI SYLLABLE VIEP
-A0EA;ID;YI SYLLABLE VAT
-A0EB;ID;YI SYLLABLE VAX
-A0EC;ID;YI SYLLABLE VA
-A0ED;ID;YI SYLLABLE VAP
-A0EE;ID;YI SYLLABLE VOT
-A0EF;ID;YI SYLLABLE VOX
-A0F0;ID;YI SYLLABLE VO
-A0F1;ID;YI SYLLABLE VOP
-A0F2;ID;YI SYLLABLE VEX
-A0F3;ID;YI SYLLABLE VEP
-A0F4;ID;YI SYLLABLE VUT
-A0F5;ID;YI SYLLABLE VUX
-A0F6;ID;YI SYLLABLE VU
-A0F7;ID;YI SYLLABLE VUP
-A0F8;ID;YI SYLLABLE VURX
-A0F9;ID;YI SYLLABLE VUR
-A0FA;ID;YI SYLLABLE VYT
-A0FB;ID;YI SYLLABLE VYX
-A0FC;ID;YI SYLLABLE VY
-A0FD;ID;YI SYLLABLE VYP
-A0FE;ID;YI SYLLABLE VYRX
-A0FF;ID;YI SYLLABLE VYR
-A100;ID;YI SYLLABLE DIT
-A101;ID;YI SYLLABLE DIX
-A102;ID;YI SYLLABLE DI
-A103;ID;YI SYLLABLE DIP
-A104;ID;YI SYLLABLE DIEX
-A105;ID;YI SYLLABLE DIE
-A106;ID;YI SYLLABLE DIEP
-A107;ID;YI SYLLABLE DAT
-A108;ID;YI SYLLABLE DAX
-A109;ID;YI SYLLABLE DA
-A10A;ID;YI SYLLABLE DAP
-A10B;ID;YI SYLLABLE DUOX
-A10C;ID;YI SYLLABLE DUO
-A10D;ID;YI SYLLABLE DOT
-A10E;ID;YI SYLLABLE DOX
-A10F;ID;YI SYLLABLE DO
-A110;ID;YI SYLLABLE DOP
-A111;ID;YI SYLLABLE DEX
-A112;ID;YI SYLLABLE DE
-A113;ID;YI SYLLABLE DEP
-A114;ID;YI SYLLABLE DUT
-A115;ID;YI SYLLABLE DUX
-A116;ID;YI SYLLABLE DU
-A117;ID;YI SYLLABLE DUP
-A118;ID;YI SYLLABLE DURX
-A119;ID;YI SYLLABLE DUR
-A11A;ID;YI SYLLABLE TIT
-A11B;ID;YI SYLLABLE TIX
-A11C;ID;YI SYLLABLE TI
-A11D;ID;YI SYLLABLE TIP
-A11E;ID;YI SYLLABLE TIEX
-A11F;ID;YI SYLLABLE TIE
-A120;ID;YI SYLLABLE TIEP
-A121;ID;YI SYLLABLE TAT
-A122;ID;YI SYLLABLE TAX
-A123;ID;YI SYLLABLE TA
-A124;ID;YI SYLLABLE TAP
-A125;ID;YI SYLLABLE TUOT
-A126;ID;YI SYLLABLE TUOX
-A127;ID;YI SYLLABLE TUO
-A128;ID;YI SYLLABLE TUOP
-A129;ID;YI SYLLABLE TOT
-A12A;ID;YI SYLLABLE TOX
-A12B;ID;YI SYLLABLE TO
-A12C;ID;YI SYLLABLE TOP
-A12D;ID;YI SYLLABLE TEX
-A12E;ID;YI SYLLABLE TE
-A12F;ID;YI SYLLABLE TEP
-A130;ID;YI SYLLABLE TUT
-A131;ID;YI SYLLABLE TUX
-A132;ID;YI SYLLABLE TU
-A133;ID;YI SYLLABLE TUP
-A134;ID;YI SYLLABLE TURX
-A135;ID;YI SYLLABLE TUR
-A136;ID;YI SYLLABLE DDIT
-A137;ID;YI SYLLABLE DDIX
-A138;ID;YI SYLLABLE DDI
-A139;ID;YI SYLLABLE DDIP
-A13A;ID;YI SYLLABLE DDIEX
-A13B;ID;YI SYLLABLE DDIE
-A13C;ID;YI SYLLABLE DDIEP
-A13D;ID;YI SYLLABLE DDAT
-A13E;ID;YI SYLLABLE DDAX
-A13F;ID;YI SYLLABLE DDA
-A140;ID;YI SYLLABLE DDAP
-A141;ID;YI SYLLABLE DDUOX
-A142;ID;YI SYLLABLE DDUO
-A143;ID;YI SYLLABLE DDUOP
-A144;ID;YI SYLLABLE DDOT
-A145;ID;YI SYLLABLE DDOX
-A146;ID;YI SYLLABLE DDO
-A147;ID;YI SYLLABLE DDOP
-A148;ID;YI SYLLABLE DDEX
-A149;ID;YI SYLLABLE DDE
-A14A;ID;YI SYLLABLE DDEP
-A14B;ID;YI SYLLABLE DDUT
-A14C;ID;YI SYLLABLE DDUX
-A14D;ID;YI SYLLABLE DDU
-A14E;ID;YI SYLLABLE DDUP
-A14F;ID;YI SYLLABLE DDURX
-A150;ID;YI SYLLABLE DDUR
-A151;ID;YI SYLLABLE NDIT
-A152;ID;YI SYLLABLE NDIX
-A153;ID;YI SYLLABLE NDI
-A154;ID;YI SYLLABLE NDIP
-A155;ID;YI SYLLABLE NDIEX
-A156;ID;YI SYLLABLE NDIE
-A157;ID;YI SYLLABLE NDAT
-A158;ID;YI SYLLABLE NDAX
-A159;ID;YI SYLLABLE NDA
-A15A;ID;YI SYLLABLE NDAP
-A15B;ID;YI SYLLABLE NDOT
-A15C;ID;YI SYLLABLE NDOX
-A15D;ID;YI SYLLABLE NDO
-A15E;ID;YI SYLLABLE NDOP
-A15F;ID;YI SYLLABLE NDEX
-A160;ID;YI SYLLABLE NDE
-A161;ID;YI SYLLABLE NDEP
-A162;ID;YI SYLLABLE NDUT
-A163;ID;YI SYLLABLE NDUX
-A164;ID;YI SYLLABLE NDU
-A165;ID;YI SYLLABLE NDUP
-A166;ID;YI SYLLABLE NDURX
-A167;ID;YI SYLLABLE NDUR
-A168;ID;YI SYLLABLE HNIT
-A169;ID;YI SYLLABLE HNIX
-A16A;ID;YI SYLLABLE HNI
-A16B;ID;YI SYLLABLE HNIP
-A16C;ID;YI SYLLABLE HNIET
-A16D;ID;YI SYLLABLE HNIEX
-A16E;ID;YI SYLLABLE HNIE
-A16F;ID;YI SYLLABLE HNIEP
-A170;ID;YI SYLLABLE HNAT
-A171;ID;YI SYLLABLE HNAX
-A172;ID;YI SYLLABLE HNA
-A173;ID;YI SYLLABLE HNAP
-A174;ID;YI SYLLABLE HNUOX
-A175;ID;YI SYLLABLE HNUO
-A176;ID;YI SYLLABLE HNOT
-A177;ID;YI SYLLABLE HNOX
-A178;ID;YI SYLLABLE HNOP
-A179;ID;YI SYLLABLE HNEX
-A17A;ID;YI SYLLABLE HNE
-A17B;ID;YI SYLLABLE HNEP
-A17C;ID;YI SYLLABLE HNUT
-A17D;ID;YI SYLLABLE NIT
-A17E;ID;YI SYLLABLE NIX
-A17F;ID;YI SYLLABLE NI
-A180;ID;YI SYLLABLE NIP
-A181;ID;YI SYLLABLE NIEX
-A182;ID;YI SYLLABLE NIE
-A183;ID;YI SYLLABLE NIEP
-A184;ID;YI SYLLABLE NAX
-A185;ID;YI SYLLABLE NA
-A186;ID;YI SYLLABLE NAP
-A187;ID;YI SYLLABLE NUOX
-A188;ID;YI SYLLABLE NUO
-A189;ID;YI SYLLABLE NUOP
-A18A;ID;YI SYLLABLE NOT
-A18B;ID;YI SYLLABLE NOX
-A18C;ID;YI SYLLABLE NO
-A18D;ID;YI SYLLABLE NOP
-A18E;ID;YI SYLLABLE NEX
-A18F;ID;YI SYLLABLE NE
-A190;ID;YI SYLLABLE NEP
-A191;ID;YI SYLLABLE NUT
-A192;ID;YI SYLLABLE NUX
-A193;ID;YI SYLLABLE NU
-A194;ID;YI SYLLABLE NUP
-A195;ID;YI SYLLABLE NURX
-A196;ID;YI SYLLABLE NUR
-A197;ID;YI SYLLABLE HLIT
-A198;ID;YI SYLLABLE HLIX
-A199;ID;YI SYLLABLE HLI
-A19A;ID;YI SYLLABLE HLIP
-A19B;ID;YI SYLLABLE HLIEX
-A19C;ID;YI SYLLABLE HLIE
-A19D;ID;YI SYLLABLE HLIEP
-A19E;ID;YI SYLLABLE HLAT
-A19F;ID;YI SYLLABLE HLAX
-A1A0;ID;YI SYLLABLE HLA
-A1A1;ID;YI SYLLABLE HLAP
-A1A2;ID;YI SYLLABLE HLUOX
-A1A3;ID;YI SYLLABLE HLUO
-A1A4;ID;YI SYLLABLE HLUOP
-A1A5;ID;YI SYLLABLE HLOX
-A1A6;ID;YI SYLLABLE HLO
-A1A7;ID;YI SYLLABLE HLOP
-A1A8;ID;YI SYLLABLE HLEX
-A1A9;ID;YI SYLLABLE HLE
-A1AA;ID;YI SYLLABLE HLEP
-A1AB;ID;YI SYLLABLE HLUT
-A1AC;ID;YI SYLLABLE HLUX
-A1AD;ID;YI SYLLABLE HLU
-A1AE;ID;YI SYLLABLE HLUP
-A1AF;ID;YI SYLLABLE HLURX
-A1B0;ID;YI SYLLABLE HLUR
-A1B1;ID;YI SYLLABLE HLYT
-A1B2;ID;YI SYLLABLE HLYX
-A1B3;ID;YI SYLLABLE HLY
-A1B4;ID;YI SYLLABLE HLYP
-A1B5;ID;YI SYLLABLE HLYRX
-A1B6;ID;YI SYLLABLE HLYR
-A1B7;ID;YI SYLLABLE LIT
-A1B8;ID;YI SYLLABLE LIX
-A1B9;ID;YI SYLLABLE LI
-A1BA;ID;YI SYLLABLE LIP
-A1BB;ID;YI SYLLABLE LIET
-A1BC;ID;YI SYLLABLE LIEX
-A1BD;ID;YI SYLLABLE LIE
-A1BE;ID;YI SYLLABLE LIEP
-A1BF;ID;YI SYLLABLE LAT
-A1C0;ID;YI SYLLABLE LAX
-A1C1;ID;YI SYLLABLE LA
-A1C2;ID;YI SYLLABLE LAP
-A1C3;ID;YI SYLLABLE LUOT
-A1C4;ID;YI SYLLABLE LUOX
-A1C5;ID;YI SYLLABLE LUO
-A1C6;ID;YI SYLLABLE LUOP
-A1C7;ID;YI SYLLABLE LOT
-A1C8;ID;YI SYLLABLE LOX
-A1C9;ID;YI SYLLABLE LO
-A1CA;ID;YI SYLLABLE LOP
-A1CB;ID;YI SYLLABLE LEX
-A1CC;ID;YI SYLLABLE LE
-A1CD;ID;YI SYLLABLE LEP
-A1CE;ID;YI SYLLABLE LUT
-A1CF;ID;YI SYLLABLE LUX
-A1D0;ID;YI SYLLABLE LU
-A1D1;ID;YI SYLLABLE LUP
-A1D2;ID;YI SYLLABLE LURX
-A1D3;ID;YI SYLLABLE LUR
-A1D4;ID;YI SYLLABLE LYT
-A1D5;ID;YI SYLLABLE LYX
-A1D6;ID;YI SYLLABLE LY
-A1D7;ID;YI SYLLABLE LYP
-A1D8;ID;YI SYLLABLE LYRX
-A1D9;ID;YI SYLLABLE LYR
-A1DA;ID;YI SYLLABLE GIT
-A1DB;ID;YI SYLLABLE GIX
-A1DC;ID;YI SYLLABLE GI
-A1DD;ID;YI SYLLABLE GIP
-A1DE;ID;YI SYLLABLE GIET
-A1DF;ID;YI SYLLABLE GIEX
-A1E0;ID;YI SYLLABLE GIE
-A1E1;ID;YI SYLLABLE GIEP
-A1E2;ID;YI SYLLABLE GAT
-A1E3;ID;YI SYLLABLE GAX
-A1E4;ID;YI SYLLABLE GA
-A1E5;ID;YI SYLLABLE GAP
-A1E6;ID;YI SYLLABLE GUOT
-A1E7;ID;YI SYLLABLE GUOX
-A1E8;ID;YI SYLLABLE GUO
-A1E9;ID;YI SYLLABLE GUOP
-A1EA;ID;YI SYLLABLE GOT
-A1EB;ID;YI SYLLABLE GOX
-A1EC;ID;YI SYLLABLE GO
-A1ED;ID;YI SYLLABLE GOP
-A1EE;ID;YI SYLLABLE GET
-A1EF;ID;YI SYLLABLE GEX
-A1F0;ID;YI SYLLABLE GE
-A1F1;ID;YI SYLLABLE GEP
-A1F2;ID;YI SYLLABLE GUT
-A1F3;ID;YI SYLLABLE GUX
-A1F4;ID;YI SYLLABLE GU
-A1F5;ID;YI SYLLABLE GUP
-A1F6;ID;YI SYLLABLE GURX
-A1F7;ID;YI SYLLABLE GUR
-A1F8;ID;YI SYLLABLE KIT
-A1F9;ID;YI SYLLABLE KIX
-A1FA;ID;YI SYLLABLE KI
-A1FB;ID;YI SYLLABLE KIP
-A1FC;ID;YI SYLLABLE KIEX
-A1FD;ID;YI SYLLABLE KIE
-A1FE;ID;YI SYLLABLE KIEP
-A1FF;ID;YI SYLLABLE KAT
-A200;ID;YI SYLLABLE KAX
-A201;ID;YI SYLLABLE KA
-A202;ID;YI SYLLABLE KAP
-A203;ID;YI SYLLABLE KUOX
-A204;ID;YI SYLLABLE KUO
-A205;ID;YI SYLLABLE KUOP
-A206;ID;YI SYLLABLE KOT
-A207;ID;YI SYLLABLE KOX
-A208;ID;YI SYLLABLE KO
-A209;ID;YI SYLLABLE KOP
-A20A;ID;YI SYLLABLE KET
-A20B;ID;YI SYLLABLE KEX
-A20C;ID;YI SYLLABLE KE
-A20D;ID;YI SYLLABLE KEP
-A20E;ID;YI SYLLABLE KUT
-A20F;ID;YI SYLLABLE KUX
-A210;ID;YI SYLLABLE KU
-A211;ID;YI SYLLABLE KUP
-A212;ID;YI SYLLABLE KURX
-A213;ID;YI SYLLABLE KUR
-A214;ID;YI SYLLABLE GGIT
-A215;ID;YI SYLLABLE GGIX
-A216;ID;YI SYLLABLE GGI
-A217;ID;YI SYLLABLE GGIEX
-A218;ID;YI SYLLABLE GGIE
-A219;ID;YI SYLLABLE GGIEP
-A21A;ID;YI SYLLABLE GGAT
-A21B;ID;YI SYLLABLE GGAX
-A21C;ID;YI SYLLABLE GGA
-A21D;ID;YI SYLLABLE GGAP
-A21E;ID;YI SYLLABLE GGUOT
-A21F;ID;YI SYLLABLE GGUOX
-A220;ID;YI SYLLABLE GGUO
-A221;ID;YI SYLLABLE GGUOP
-A222;ID;YI SYLLABLE GGOT
-A223;ID;YI SYLLABLE GGOX
-A224;ID;YI SYLLABLE GGO
-A225;ID;YI SYLLABLE GGOP
-A226;ID;YI SYLLABLE GGET
-A227;ID;YI SYLLABLE GGEX
-A228;ID;YI SYLLABLE GGE
-A229;ID;YI SYLLABLE GGEP
-A22A;ID;YI SYLLABLE GGUT
-A22B;ID;YI SYLLABLE GGUX
-A22C;ID;YI SYLLABLE GGU
-A22D;ID;YI SYLLABLE GGUP
-A22E;ID;YI SYLLABLE GGURX
-A22F;ID;YI SYLLABLE GGUR
-A230;ID;YI SYLLABLE MGIEX
-A231;ID;YI SYLLABLE MGIE
-A232;ID;YI SYLLABLE MGAT
-A233;ID;YI SYLLABLE MGAX
-A234;ID;YI SYLLABLE MGA
-A235;ID;YI SYLLABLE MGAP
-A236;ID;YI SYLLABLE MGUOX
-A237;ID;YI SYLLABLE MGUO
-A238;ID;YI SYLLABLE MGUOP
-A239;ID;YI SYLLABLE MGOT
-A23A;ID;YI SYLLABLE MGOX
-A23B;ID;YI SYLLABLE MGO
-A23C;ID;YI SYLLABLE MGOP
-A23D;ID;YI SYLLABLE MGEX
-A23E;ID;YI SYLLABLE MGE
-A23F;ID;YI SYLLABLE MGEP
-A240;ID;YI SYLLABLE MGUT
-A241;ID;YI SYLLABLE MGUX
-A242;ID;YI SYLLABLE MGU
-A243;ID;YI SYLLABLE MGUP
-A244;ID;YI SYLLABLE MGURX
-A245;ID;YI SYLLABLE MGUR
-A246;ID;YI SYLLABLE HXIT
-A247;ID;YI SYLLABLE HXIX
-A248;ID;YI SYLLABLE HXI
-A249;ID;YI SYLLABLE HXIP
-A24A;ID;YI SYLLABLE HXIET
-A24B;ID;YI SYLLABLE HXIEX
-A24C;ID;YI SYLLABLE HXIE
-A24D;ID;YI SYLLABLE HXIEP
-A24E;ID;YI SYLLABLE HXAT
-A24F;ID;YI SYLLABLE HXAX
-A250;ID;YI SYLLABLE HXA
-A251;ID;YI SYLLABLE HXAP
-A252;ID;YI SYLLABLE HXUOT
-A253;ID;YI SYLLABLE HXUOX
-A254;ID;YI SYLLABLE HXUO
-A255;ID;YI SYLLABLE HXUOP
-A256;ID;YI SYLLABLE HXOT
-A257;ID;YI SYLLABLE HXOX
-A258;ID;YI SYLLABLE HXO
-A259;ID;YI SYLLABLE HXOP
-A25A;ID;YI SYLLABLE HXEX
-A25B;ID;YI SYLLABLE HXE
-A25C;ID;YI SYLLABLE HXEP
-A25D;ID;YI SYLLABLE NGIEX
-A25E;ID;YI SYLLABLE NGIE
-A25F;ID;YI SYLLABLE NGIEP
-A260;ID;YI SYLLABLE NGAT
-A261;ID;YI SYLLABLE NGAX
-A262;ID;YI SYLLABLE NGA
-A263;ID;YI SYLLABLE NGAP
-A264;ID;YI SYLLABLE NGUOT
-A265;ID;YI SYLLABLE NGUOX
-A266;ID;YI SYLLABLE NGUO
-A267;ID;YI SYLLABLE NGOT
-A268;ID;YI SYLLABLE NGOX
-A269;ID;YI SYLLABLE NGO
-A26A;ID;YI SYLLABLE NGOP
-A26B;ID;YI SYLLABLE NGEX
-A26C;ID;YI SYLLABLE NGE
-A26D;ID;YI SYLLABLE NGEP
-A26E;ID;YI SYLLABLE HIT
-A26F;ID;YI SYLLABLE HIEX
-A270;ID;YI SYLLABLE HIE
-A271;ID;YI SYLLABLE HAT
-A272;ID;YI SYLLABLE HAX
-A273;ID;YI SYLLABLE HA
-A274;ID;YI SYLLABLE HAP
-A275;ID;YI SYLLABLE HUOT
-A276;ID;YI SYLLABLE HUOX
-A277;ID;YI SYLLABLE HUO
-A278;ID;YI SYLLABLE HUOP
-A279;ID;YI SYLLABLE HOT
-A27A;ID;YI SYLLABLE HOX
-A27B;ID;YI SYLLABLE HO
-A27C;ID;YI SYLLABLE HOP
-A27D;ID;YI SYLLABLE HEX
-A27E;ID;YI SYLLABLE HE
-A27F;ID;YI SYLLABLE HEP
-A280;ID;YI SYLLABLE WAT
-A281;ID;YI SYLLABLE WAX
-A282;ID;YI SYLLABLE WA
-A283;ID;YI SYLLABLE WAP
-A284;ID;YI SYLLABLE WUOX
-A285;ID;YI SYLLABLE WUO
-A286;ID;YI SYLLABLE WUOP
-A287;ID;YI SYLLABLE WOX
-A288;ID;YI SYLLABLE WO
-A289;ID;YI SYLLABLE WOP
-A28A;ID;YI SYLLABLE WEX
-A28B;ID;YI SYLLABLE WE
-A28C;ID;YI SYLLABLE WEP
-A28D;ID;YI SYLLABLE ZIT
-A28E;ID;YI SYLLABLE ZIX
-A28F;ID;YI SYLLABLE ZI
-A290;ID;YI SYLLABLE ZIP
-A291;ID;YI SYLLABLE ZIEX
-A292;ID;YI SYLLABLE ZIE
-A293;ID;YI SYLLABLE ZIEP
-A294;ID;YI SYLLABLE ZAT
-A295;ID;YI SYLLABLE ZAX
-A296;ID;YI SYLLABLE ZA
-A297;ID;YI SYLLABLE ZAP
-A298;ID;YI SYLLABLE ZUOX
-A299;ID;YI SYLLABLE ZUO
-A29A;ID;YI SYLLABLE ZUOP
-A29B;ID;YI SYLLABLE ZOT
-A29C;ID;YI SYLLABLE ZOX
-A29D;ID;YI SYLLABLE ZO
-A29E;ID;YI SYLLABLE ZOP
-A29F;ID;YI SYLLABLE ZEX
-A2A0;ID;YI SYLLABLE ZE
-A2A1;ID;YI SYLLABLE ZEP
-A2A2;ID;YI SYLLABLE ZUT
-A2A3;ID;YI SYLLABLE ZUX
-A2A4;ID;YI SYLLABLE ZU
-A2A5;ID;YI SYLLABLE ZUP
-A2A6;ID;YI SYLLABLE ZURX
-A2A7;ID;YI SYLLABLE ZUR
-A2A8;ID;YI SYLLABLE ZYT
-A2A9;ID;YI SYLLABLE ZYX
-A2AA;ID;YI SYLLABLE ZY
-A2AB;ID;YI SYLLABLE ZYP
-A2AC;ID;YI SYLLABLE ZYRX
-A2AD;ID;YI SYLLABLE ZYR
-A2AE;ID;YI SYLLABLE CIT
-A2AF;ID;YI SYLLABLE CIX
-A2B0;ID;YI SYLLABLE CI
-A2B1;ID;YI SYLLABLE CIP
-A2B2;ID;YI SYLLABLE CIET
-A2B3;ID;YI SYLLABLE CIEX
-A2B4;ID;YI SYLLABLE CIE
-A2B5;ID;YI SYLLABLE CIEP
-A2B6;ID;YI SYLLABLE CAT
-A2B7;ID;YI SYLLABLE CAX
-A2B8;ID;YI SYLLABLE CA
-A2B9;ID;YI SYLLABLE CAP
-A2BA;ID;YI SYLLABLE CUOX
-A2BB;ID;YI SYLLABLE CUO
-A2BC;ID;YI SYLLABLE CUOP
-A2BD;ID;YI SYLLABLE COT
-A2BE;ID;YI SYLLABLE COX
-A2BF;ID;YI SYLLABLE CO
-A2C0;ID;YI SYLLABLE COP
-A2C1;ID;YI SYLLABLE CEX
-A2C2;ID;YI SYLLABLE CE
-A2C3;ID;YI SYLLABLE CEP
-A2C4;ID;YI SYLLABLE CUT
-A2C5;ID;YI SYLLABLE CUX
-A2C6;ID;YI SYLLABLE CU
-A2C7;ID;YI SYLLABLE CUP
-A2C8;ID;YI SYLLABLE CURX
-A2C9;ID;YI SYLLABLE CUR
-A2CA;ID;YI SYLLABLE CYT
-A2CB;ID;YI SYLLABLE CYX
-A2CC;ID;YI SYLLABLE CY
-A2CD;ID;YI SYLLABLE CYP
-A2CE;ID;YI SYLLABLE CYRX
-A2CF;ID;YI SYLLABLE CYR
-A2D0;ID;YI SYLLABLE ZZIT
-A2D1;ID;YI SYLLABLE ZZIX
-A2D2;ID;YI SYLLABLE ZZI
-A2D3;ID;YI SYLLABLE ZZIP
-A2D4;ID;YI SYLLABLE ZZIET
-A2D5;ID;YI SYLLABLE ZZIEX
-A2D6;ID;YI SYLLABLE ZZIE
-A2D7;ID;YI SYLLABLE ZZIEP
-A2D8;ID;YI SYLLABLE ZZAT
-A2D9;ID;YI SYLLABLE ZZAX
-A2DA;ID;YI SYLLABLE ZZA
-A2DB;ID;YI SYLLABLE ZZAP
-A2DC;ID;YI SYLLABLE ZZOX
-A2DD;ID;YI SYLLABLE ZZO
-A2DE;ID;YI SYLLABLE ZZOP
-A2DF;ID;YI SYLLABLE ZZEX
-A2E0;ID;YI SYLLABLE ZZE
-A2E1;ID;YI SYLLABLE ZZEP
-A2E2;ID;YI SYLLABLE ZZUX
-A2E3;ID;YI SYLLABLE ZZU
-A2E4;ID;YI SYLLABLE ZZUP
-A2E5;ID;YI SYLLABLE ZZURX
-A2E6;ID;YI SYLLABLE ZZUR
-A2E7;ID;YI SYLLABLE ZZYT
-A2E8;ID;YI SYLLABLE ZZYX
-A2E9;ID;YI SYLLABLE ZZY
-A2EA;ID;YI SYLLABLE ZZYP
-A2EB;ID;YI SYLLABLE ZZYRX
-A2EC;ID;YI SYLLABLE ZZYR
-A2ED;ID;YI SYLLABLE NZIT
-A2EE;ID;YI SYLLABLE NZIX
-A2EF;ID;YI SYLLABLE NZI
-A2F0;ID;YI SYLLABLE NZIP
-A2F1;ID;YI SYLLABLE NZIEX
-A2F2;ID;YI SYLLABLE NZIE
-A2F3;ID;YI SYLLABLE NZIEP
-A2F4;ID;YI SYLLABLE NZAT
-A2F5;ID;YI SYLLABLE NZAX
-A2F6;ID;YI SYLLABLE NZA
-A2F7;ID;YI SYLLABLE NZAP
-A2F8;ID;YI SYLLABLE NZUOX
-A2F9;ID;YI SYLLABLE NZUO
-A2FA;ID;YI SYLLABLE NZOX
-A2FB;ID;YI SYLLABLE NZOP
-A2FC;ID;YI SYLLABLE NZEX
-A2FD;ID;YI SYLLABLE NZE
-A2FE;ID;YI SYLLABLE NZUX
-A2FF;ID;YI SYLLABLE NZU
-A300;ID;YI SYLLABLE NZUP
-A301;ID;YI SYLLABLE NZURX
-A302;ID;YI SYLLABLE NZUR
-A303;ID;YI SYLLABLE NZYT
-A304;ID;YI SYLLABLE NZYX
-A305;ID;YI SYLLABLE NZY
-A306;ID;YI SYLLABLE NZYP
-A307;ID;YI SYLLABLE NZYRX
-A308;ID;YI SYLLABLE NZYR
-A309;ID;YI SYLLABLE SIT
-A30A;ID;YI SYLLABLE SIX
-A30B;ID;YI SYLLABLE SI
-A30C;ID;YI SYLLABLE SIP
-A30D;ID;YI SYLLABLE SIEX
-A30E;ID;YI SYLLABLE SIE
-A30F;ID;YI SYLLABLE SIEP
-A310;ID;YI SYLLABLE SAT
-A311;ID;YI SYLLABLE SAX
-A312;ID;YI SYLLABLE SA
-A313;ID;YI SYLLABLE SAP
-A314;ID;YI SYLLABLE SUOX
-A315;ID;YI SYLLABLE SUO
-A316;ID;YI SYLLABLE SUOP
-A317;ID;YI SYLLABLE SOT
-A318;ID;YI SYLLABLE SOX
-A319;ID;YI SYLLABLE SO
-A31A;ID;YI SYLLABLE SOP
-A31B;ID;YI SYLLABLE SEX
-A31C;ID;YI SYLLABLE SE
-A31D;ID;YI SYLLABLE SEP
-A31E;ID;YI SYLLABLE SUT
-A31F;ID;YI SYLLABLE SUX
-A320;ID;YI SYLLABLE SU
-A321;ID;YI SYLLABLE SUP
-A322;ID;YI SYLLABLE SURX
-A323;ID;YI SYLLABLE SUR
-A324;ID;YI SYLLABLE SYT
-A325;ID;YI SYLLABLE SYX
-A326;ID;YI SYLLABLE SY
-A327;ID;YI SYLLABLE SYP
-A328;ID;YI SYLLABLE SYRX
-A329;ID;YI SYLLABLE SYR
-A32A;ID;YI SYLLABLE SSIT
-A32B;ID;YI SYLLABLE SSIX
-A32C;ID;YI SYLLABLE SSI
-A32D;ID;YI SYLLABLE SSIP
-A32E;ID;YI SYLLABLE SSIEX
-A32F;ID;YI SYLLABLE SSIE
-A330;ID;YI SYLLABLE SSIEP
-A331;ID;YI SYLLABLE SSAT
-A332;ID;YI SYLLABLE SSAX
-A333;ID;YI SYLLABLE SSA
-A334;ID;YI SYLLABLE SSAP
-A335;ID;YI SYLLABLE SSOT
-A336;ID;YI SYLLABLE SSOX
-A337;ID;YI SYLLABLE SSO
-A338;ID;YI SYLLABLE SSOP
-A339;ID;YI SYLLABLE SSEX
-A33A;ID;YI SYLLABLE SSE
-A33B;ID;YI SYLLABLE SSEP
-A33C;ID;YI SYLLABLE SSUT
-A33D;ID;YI SYLLABLE SSUX
-A33E;ID;YI SYLLABLE SSU
-A33F;ID;YI SYLLABLE SSUP
-A340;ID;YI SYLLABLE SSYT
-A341;ID;YI SYLLABLE SSYX
-A342;ID;YI SYLLABLE SSY
-A343;ID;YI SYLLABLE SSYP
-A344;ID;YI SYLLABLE SSYRX
-A345;ID;YI SYLLABLE SSYR
-A346;ID;YI SYLLABLE ZHAT
-A347;ID;YI SYLLABLE ZHAX
-A348;ID;YI SYLLABLE ZHA
-A349;ID;YI SYLLABLE ZHAP
-A34A;ID;YI SYLLABLE ZHUOX
-A34B;ID;YI SYLLABLE ZHUO
-A34C;ID;YI SYLLABLE ZHUOP
-A34D;ID;YI SYLLABLE ZHOT
-A34E;ID;YI SYLLABLE ZHOX
-A34F;ID;YI SYLLABLE ZHO
-A350;ID;YI SYLLABLE ZHOP
-A351;ID;YI SYLLABLE ZHET
-A352;ID;YI SYLLABLE ZHEX
-A353;ID;YI SYLLABLE ZHE
-A354;ID;YI SYLLABLE ZHEP
-A355;ID;YI SYLLABLE ZHUT
-A356;ID;YI SYLLABLE ZHUX
-A357;ID;YI SYLLABLE ZHU
-A358;ID;YI SYLLABLE ZHUP
-A359;ID;YI SYLLABLE ZHURX
-A35A;ID;YI SYLLABLE ZHUR
-A35B;ID;YI SYLLABLE ZHYT
-A35C;ID;YI SYLLABLE ZHYX
-A35D;ID;YI SYLLABLE ZHY
-A35E;ID;YI SYLLABLE ZHYP
-A35F;ID;YI SYLLABLE ZHYRX
-A360;ID;YI SYLLABLE ZHYR
-A361;ID;YI SYLLABLE CHAT
-A362;ID;YI SYLLABLE CHAX
-A363;ID;YI SYLLABLE CHA
-A364;ID;YI SYLLABLE CHAP
-A365;ID;YI SYLLABLE CHUOT
-A366;ID;YI SYLLABLE CHUOX
-A367;ID;YI SYLLABLE CHUO
-A368;ID;YI SYLLABLE CHUOP
-A369;ID;YI SYLLABLE CHOT
-A36A;ID;YI SYLLABLE CHOX
-A36B;ID;YI SYLLABLE CHO
-A36C;ID;YI SYLLABLE CHOP
-A36D;ID;YI SYLLABLE CHET
-A36E;ID;YI SYLLABLE CHEX
-A36F;ID;YI SYLLABLE CHE
-A370;ID;YI SYLLABLE CHEP
-A371;ID;YI SYLLABLE CHUX
-A372;ID;YI SYLLABLE CHU
-A373;ID;YI SYLLABLE CHUP
-A374;ID;YI SYLLABLE CHURX
-A375;ID;YI SYLLABLE CHUR
-A376;ID;YI SYLLABLE CHYT
-A377;ID;YI SYLLABLE CHYX
-A378;ID;YI SYLLABLE CHY
-A379;ID;YI SYLLABLE CHYP
-A37A;ID;YI SYLLABLE CHYRX
-A37B;ID;YI SYLLABLE CHYR
-A37C;ID;YI SYLLABLE RRAX
-A37D;ID;YI SYLLABLE RRA
-A37E;ID;YI SYLLABLE RRUOX
-A37F;ID;YI SYLLABLE RRUO
-A380;ID;YI SYLLABLE RROT
-A381;ID;YI SYLLABLE RROX
-A382;ID;YI SYLLABLE RRO
-A383;ID;YI SYLLABLE RROP
-A384;ID;YI SYLLABLE RRET
-A385;ID;YI SYLLABLE RREX
-A386;ID;YI SYLLABLE RRE
-A387;ID;YI SYLLABLE RREP
-A388;ID;YI SYLLABLE RRUT
-A389;ID;YI SYLLABLE RRUX
-A38A;ID;YI SYLLABLE RRU
-A38B;ID;YI SYLLABLE RRUP
-A38C;ID;YI SYLLABLE RRURX
-A38D;ID;YI SYLLABLE RRUR
-A38E;ID;YI SYLLABLE RRYT
-A38F;ID;YI SYLLABLE RRYX
-A390;ID;YI SYLLABLE RRY
-A391;ID;YI SYLLABLE RRYP
-A392;ID;YI SYLLABLE RRYRX
-A393;ID;YI SYLLABLE RRYR
-A394;ID;YI SYLLABLE NRAT
-A395;ID;YI SYLLABLE NRAX
-A396;ID;YI SYLLABLE NRA
-A397;ID;YI SYLLABLE NRAP
-A398;ID;YI SYLLABLE NROX
-A399;ID;YI SYLLABLE NRO
-A39A;ID;YI SYLLABLE NROP
-A39B;ID;YI SYLLABLE NRET
-A39C;ID;YI SYLLABLE NREX
-A39D;ID;YI SYLLABLE NRE
-A39E;ID;YI SYLLABLE NREP
-A39F;ID;YI SYLLABLE NRUT
-A3A0;ID;YI SYLLABLE NRUX
-A3A1;ID;YI SYLLABLE NRU
-A3A2;ID;YI SYLLABLE NRUP
-A3A3;ID;YI SYLLABLE NRURX
-A3A4;ID;YI SYLLABLE NRUR
-A3A5;ID;YI SYLLABLE NRYT
-A3A6;ID;YI SYLLABLE NRYX
-A3A7;ID;YI SYLLABLE NRY
-A3A8;ID;YI SYLLABLE NRYP
-A3A9;ID;YI SYLLABLE NRYRX
-A3AA;ID;YI SYLLABLE NRYR
-A3AB;ID;YI SYLLABLE SHAT
-A3AC;ID;YI SYLLABLE SHAX
-A3AD;ID;YI SYLLABLE SHA
-A3AE;ID;YI SYLLABLE SHAP
-A3AF;ID;YI SYLLABLE SHUOX
-A3B0;ID;YI SYLLABLE SHUO
-A3B1;ID;YI SYLLABLE SHUOP
-A3B2;ID;YI SYLLABLE SHOT
-A3B3;ID;YI SYLLABLE SHOX
-A3B4;ID;YI SYLLABLE SHO
-A3B5;ID;YI SYLLABLE SHOP
-A3B6;ID;YI SYLLABLE SHET
-A3B7;ID;YI SYLLABLE SHEX
-A3B8;ID;YI SYLLABLE SHE
-A3B9;ID;YI SYLLABLE SHEP
-A3BA;ID;YI SYLLABLE SHUT
-A3BB;ID;YI SYLLABLE SHUX
-A3BC;ID;YI SYLLABLE SHU
-A3BD;ID;YI SYLLABLE SHUP
-A3BE;ID;YI SYLLABLE SHURX
-A3BF;ID;YI SYLLABLE SHUR
-A3C0;ID;YI SYLLABLE SHYT
-A3C1;ID;YI SYLLABLE SHYX
-A3C2;ID;YI SYLLABLE SHY
-A3C3;ID;YI SYLLABLE SHYP
-A3C4;ID;YI SYLLABLE SHYRX
-A3C5;ID;YI SYLLABLE SHYR
-A3C6;ID;YI SYLLABLE RAT
-A3C7;ID;YI SYLLABLE RAX
-A3C8;ID;YI SYLLABLE RA
-A3C9;ID;YI SYLLABLE RAP
-A3CA;ID;YI SYLLABLE RUOX
-A3CB;ID;YI SYLLABLE RUO
-A3CC;ID;YI SYLLABLE RUOP
-A3CD;ID;YI SYLLABLE ROT
-A3CE;ID;YI SYLLABLE ROX
-A3CF;ID;YI SYLLABLE RO
-A3D0;ID;YI SYLLABLE ROP
-A3D1;ID;YI SYLLABLE REX
-A3D2;ID;YI SYLLABLE RE
-A3D3;ID;YI SYLLABLE REP
-A3D4;ID;YI SYLLABLE RUT
-A3D5;ID;YI SYLLABLE RUX
-A3D6;ID;YI SYLLABLE RU
-A3D7;ID;YI SYLLABLE RUP
-A3D8;ID;YI SYLLABLE RURX
-A3D9;ID;YI SYLLABLE RUR
-A3DA;ID;YI SYLLABLE RYT
-A3DB;ID;YI SYLLABLE RYX
-A3DC;ID;YI SYLLABLE RY
-A3DD;ID;YI SYLLABLE RYP
-A3DE;ID;YI SYLLABLE RYRX
-A3DF;ID;YI SYLLABLE RYR
-A3E0;ID;YI SYLLABLE JIT
-A3E1;ID;YI SYLLABLE JIX
-A3E2;ID;YI SYLLABLE JI
-A3E3;ID;YI SYLLABLE JIP
-A3E4;ID;YI SYLLABLE JIET
-A3E5;ID;YI SYLLABLE JIEX
-A3E6;ID;YI SYLLABLE JIE
-A3E7;ID;YI SYLLABLE JIEP
-A3E8;ID;YI SYLLABLE JUOT
-A3E9;ID;YI SYLLABLE JUOX
-A3EA;ID;YI SYLLABLE JUO
-A3EB;ID;YI SYLLABLE JUOP
-A3EC;ID;YI SYLLABLE JOT
-A3ED;ID;YI SYLLABLE JOX
-A3EE;ID;YI SYLLABLE JO
-A3EF;ID;YI SYLLABLE JOP
-A3F0;ID;YI SYLLABLE JUT
-A3F1;ID;YI SYLLABLE JUX
-A3F2;ID;YI SYLLABLE JU
-A3F3;ID;YI SYLLABLE JUP
-A3F4;ID;YI SYLLABLE JURX
-A3F5;ID;YI SYLLABLE JUR
-A3F6;ID;YI SYLLABLE JYT
-A3F7;ID;YI SYLLABLE JYX
-A3F8;ID;YI SYLLABLE JY
-A3F9;ID;YI SYLLABLE JYP
-A3FA;ID;YI SYLLABLE JYRX
-A3FB;ID;YI SYLLABLE JYR
-A3FC;ID;YI SYLLABLE QIT
-A3FD;ID;YI SYLLABLE QIX
-A3FE;ID;YI SYLLABLE QI
-A3FF;ID;YI SYLLABLE QIP
-A400;ID;YI SYLLABLE QIET
-A401;ID;YI SYLLABLE QIEX
-A402;ID;YI SYLLABLE QIE
-A403;ID;YI SYLLABLE QIEP
-A404;ID;YI SYLLABLE QUOT
-A405;ID;YI SYLLABLE QUOX
-A406;ID;YI SYLLABLE QUO
-A407;ID;YI SYLLABLE QUOP
-A408;ID;YI SYLLABLE QOT
-A409;ID;YI SYLLABLE QOX
-A40A;ID;YI SYLLABLE QO
-A40B;ID;YI SYLLABLE QOP
-A40C;ID;YI SYLLABLE QUT
-A40D;ID;YI SYLLABLE QUX
-A40E;ID;YI SYLLABLE QU
-A40F;ID;YI SYLLABLE QUP
-A410;ID;YI SYLLABLE QURX
-A411;ID;YI SYLLABLE QUR
-A412;ID;YI SYLLABLE QYT
-A413;ID;YI SYLLABLE QYX
-A414;ID;YI SYLLABLE QY
-A415;ID;YI SYLLABLE QYP
-A416;ID;YI SYLLABLE QYRX
-A417;ID;YI SYLLABLE QYR
-A418;ID;YI SYLLABLE JJIT
-A419;ID;YI SYLLABLE JJIX
-A41A;ID;YI SYLLABLE JJI
-A41B;ID;YI SYLLABLE JJIP
-A41C;ID;YI SYLLABLE JJIET
-A41D;ID;YI SYLLABLE JJIEX
-A41E;ID;YI SYLLABLE JJIE
-A41F;ID;YI SYLLABLE JJIEP
-A420;ID;YI SYLLABLE JJUOX
-A421;ID;YI SYLLABLE JJUO
-A422;ID;YI SYLLABLE JJUOP
-A423;ID;YI SYLLABLE JJOT
-A424;ID;YI SYLLABLE JJOX
-A425;ID;YI SYLLABLE JJO
-A426;ID;YI SYLLABLE JJOP
-A427;ID;YI SYLLABLE JJUT
-A428;ID;YI SYLLABLE JJUX
-A429;ID;YI SYLLABLE JJU
-A42A;ID;YI SYLLABLE JJUP
-A42B;ID;YI SYLLABLE JJURX
-A42C;ID;YI SYLLABLE JJUR
-A42D;ID;YI SYLLABLE JJYT
-A42E;ID;YI SYLLABLE JJYX
-A42F;ID;YI SYLLABLE JJY
-A430;ID;YI SYLLABLE JJYP
-A431;ID;YI SYLLABLE NJIT
-A432;ID;YI SYLLABLE NJIX
-A433;ID;YI SYLLABLE NJI
-A434;ID;YI SYLLABLE NJIP
-A435;ID;YI SYLLABLE NJIET
-A436;ID;YI SYLLABLE NJIEX
-A437;ID;YI SYLLABLE NJIE
-A438;ID;YI SYLLABLE NJIEP
-A439;ID;YI SYLLABLE NJUOX
-A43A;ID;YI SYLLABLE NJUO
-A43B;ID;YI SYLLABLE NJOT
-A43C;ID;YI SYLLABLE NJOX
-A43D;ID;YI SYLLABLE NJO
-A43E;ID;YI SYLLABLE NJOP
-A43F;ID;YI SYLLABLE NJUX
-A440;ID;YI SYLLABLE NJU
-A441;ID;YI SYLLABLE NJUP
-A442;ID;YI SYLLABLE NJURX
-A443;ID;YI SYLLABLE NJUR
-A444;ID;YI SYLLABLE NJYT
-A445;ID;YI SYLLABLE NJYX
-A446;ID;YI SYLLABLE NJY
-A447;ID;YI SYLLABLE NJYP
-A448;ID;YI SYLLABLE NJYRX
-A449;ID;YI SYLLABLE NJYR
-A44A;ID;YI SYLLABLE NYIT
-A44B;ID;YI SYLLABLE NYIX
-A44C;ID;YI SYLLABLE NYI
-A44D;ID;YI SYLLABLE NYIP
-A44E;ID;YI SYLLABLE NYIET
-A44F;ID;YI SYLLABLE NYIEX
-A450;ID;YI SYLLABLE NYIE
-A451;ID;YI SYLLABLE NYIEP
-A452;ID;YI SYLLABLE NYUOX
-A453;ID;YI SYLLABLE NYUO
-A454;ID;YI SYLLABLE NYUOP
-A455;ID;YI SYLLABLE NYOT
-A456;ID;YI SYLLABLE NYOX
-A457;ID;YI SYLLABLE NYO
-A458;ID;YI SYLLABLE NYOP
-A459;ID;YI SYLLABLE NYUT
-A45A;ID;YI SYLLABLE NYUX
-A45B;ID;YI SYLLABLE NYU
-A45C;ID;YI SYLLABLE NYUP
-A45D;ID;YI SYLLABLE XIT
-A45E;ID;YI SYLLABLE XIX
-A45F;ID;YI SYLLABLE XI
-A460;ID;YI SYLLABLE XIP
-A461;ID;YI SYLLABLE XIET
-A462;ID;YI SYLLABLE XIEX
-A463;ID;YI SYLLABLE XIE
-A464;ID;YI SYLLABLE XIEP
-A465;ID;YI SYLLABLE XUOX
-A466;ID;YI SYLLABLE XUO
-A467;ID;YI SYLLABLE XOT
-A468;ID;YI SYLLABLE XOX
-A469;ID;YI SYLLABLE XO
-A46A;ID;YI SYLLABLE XOP
-A46B;ID;YI SYLLABLE XYT
-A46C;ID;YI SYLLABLE XYX
-A46D;ID;YI SYLLABLE XY
-A46E;ID;YI SYLLABLE XYP
-A46F;ID;YI SYLLABLE XYRX
-A470;ID;YI SYLLABLE XYR
-A471;ID;YI SYLLABLE YIT
-A472;ID;YI SYLLABLE YIX
-A473;ID;YI SYLLABLE YI
-A474;ID;YI SYLLABLE YIP
-A475;ID;YI SYLLABLE YIET
-A476;ID;YI SYLLABLE YIEX
-A477;ID;YI SYLLABLE YIE
-A478;ID;YI SYLLABLE YIEP
-A479;ID;YI SYLLABLE YUOT
-A47A;ID;YI SYLLABLE YUOX
-A47B;ID;YI SYLLABLE YUO
-A47C;ID;YI SYLLABLE YUOP
-A47D;ID;YI SYLLABLE YOT
-A47E;ID;YI SYLLABLE YOX
-A47F;ID;YI SYLLABLE YO
-A480;ID;YI SYLLABLE YOP
-A481;ID;YI SYLLABLE YUT
-A482;ID;YI SYLLABLE YUX
-A483;ID;YI SYLLABLE YU
-A484;ID;YI SYLLABLE YUP
-A485;ID;YI SYLLABLE YURX
-A486;ID;YI SYLLABLE YUR
-A487;ID;YI SYLLABLE YYT
-A488;ID;YI SYLLABLE YYX
-A489;ID;YI SYLLABLE YY
-A48A;ID;YI SYLLABLE YYP
-A48B;ID;YI SYLLABLE YYRX
-A48C;ID;YI SYLLABLE YYR
-A490;ID;YI RADICAL QOT
-A491;ID;YI RADICAL LI
-A492;ID;YI RADICAL KIT
-A493;ID;YI RADICAL NYIP
-A494;ID;YI RADICAL CYP
-A495;ID;YI RADICAL SSI
-A496;ID;YI RADICAL GGOP
-A497;ID;YI RADICAL GEP
-A498;ID;YI RADICAL MI
-A499;ID;YI RADICAL HXIT
-A49A;ID;YI RADICAL LYR
-A49B;ID;YI RADICAL BBUT
-A49C;ID;YI RADICAL MOP
-A49D;ID;YI RADICAL YO
-A49E;ID;YI RADICAL PUT
-A49F;ID;YI RADICAL HXUO
-A4A0;ID;YI RADICAL TAT
-A4A1;ID;YI RADICAL GA
-A4A4;ID;YI RADICAL DDUR
-A4A5;ID;YI RADICAL BUR
-A4A6;ID;YI RADICAL GGUO
-A4A7;ID;YI RADICAL NYOP
-A4A8;ID;YI RADICAL TU
-A4A9;ID;YI RADICAL OP
-A4AA;ID;YI RADICAL JJUT
-A4AB;ID;YI RADICAL ZOT
-A4AC;ID;YI RADICAL PYT
-A4AD;ID;YI RADICAL HMO
-A4AE;ID;YI RADICAL YIT
-A4AF;ID;YI RADICAL VUR
-A4B0;ID;YI RADICAL SHY
-A4B1;ID;YI RADICAL VEP
-A4B2;ID;YI RADICAL ZA
-A4B3;ID;YI RADICAL JO
-A4B5;ID;YI RADICAL JJY
-A4B6;ID;YI RADICAL GOT
-A4B7;ID;YI RADICAL JJIE
-A4B8;ID;YI RADICAL WO
-A4B9;ID;YI RADICAL DU
-A4BA;ID;YI RADICAL SHUR
-A4BB;ID;YI RADICAL LIE
-A4BC;ID;YI RADICAL CY
-A4BD;ID;YI RADICAL CUOP
-A4BE;ID;YI RADICAL CIP
-A4BF;ID;YI RADICAL HXOP
-A4C0;ID;YI RADICAL SHAT
-A4C2;ID;YI RADICAL SHOP
-A4C3;ID;YI RADICAL CHE
-A4C4;ID;YI RADICAL ZZIET
-A4C6;ID;YI RADICAL KE
-AC00;ID;<Hangul Syllable, First>
-D7A3;ID;<Hangul Syllable, Last>
-D800;SG;<Non Private Use High Surrogate, First>
-DB7F;SG;<Non Private Use High Surrogate, Last>
-DB80;SG;<Private Use High Surrogate, First>
-DBFF;SG;<Private Use High Surrogate, Last>
-DC00;SG;<Low Surrogate, First>
-DFFF;SG;<Low Surrogate, Last>
-E000;AI;<Private Use, First>
-F8FF;AI;<Private Use, Last>
-F900;ID;CJK COMPATIBILITY IDEOGRAPH-F900
-F901;ID;CJK COMPATIBILITY IDEOGRAPH-F901
-F902;ID;CJK COMPATIBILITY IDEOGRAPH-F902
-F903;ID;CJK COMPATIBILITY IDEOGRAPH-F903
-F904;ID;CJK COMPATIBILITY IDEOGRAPH-F904
-F905;ID;CJK COMPATIBILITY IDEOGRAPH-F905
-F906;ID;CJK COMPATIBILITY IDEOGRAPH-F906
-F907;ID;CJK COMPATIBILITY IDEOGRAPH-F907
-F908;ID;CJK COMPATIBILITY IDEOGRAPH-F908
-F909;ID;CJK COMPATIBILITY IDEOGRAPH-F909
-F90A;ID;CJK COMPATIBILITY IDEOGRAPH-F90A
-F90B;ID;CJK COMPATIBILITY IDEOGRAPH-F90B
-F90C;ID;CJK COMPATIBILITY IDEOGRAPH-F90C
-F90D;ID;CJK COMPATIBILITY IDEOGRAPH-F90D
-F90E;ID;CJK COMPATIBILITY IDEOGRAPH-F90E
-F90F;ID;CJK COMPATIBILITY IDEOGRAPH-F90F
-F910;ID;CJK COMPATIBILITY IDEOGRAPH-F910
-F911;ID;CJK COMPATIBILITY IDEOGRAPH-F911
-F912;ID;CJK COMPATIBILITY IDEOGRAPH-F912
-F913;ID;CJK COMPATIBILITY IDEOGRAPH-F913
-F914;ID;CJK COMPATIBILITY IDEOGRAPH-F914
-F915;ID;CJK COMPATIBILITY IDEOGRAPH-F915
-F916;ID;CJK COMPATIBILITY IDEOGRAPH-F916
-F917;ID;CJK COMPATIBILITY IDEOGRAPH-F917
-F918;ID;CJK COMPATIBILITY IDEOGRAPH-F918
-F919;ID;CJK COMPATIBILITY IDEOGRAPH-F919
-F91A;ID;CJK COMPATIBILITY IDEOGRAPH-F91A
-F91B;ID;CJK COMPATIBILITY IDEOGRAPH-F91B
-F91C;ID;CJK COMPATIBILITY IDEOGRAPH-F91C
-F91D;ID;CJK COMPATIBILITY IDEOGRAPH-F91D
-F91E;ID;CJK COMPATIBILITY IDEOGRAPH-F91E
-F91F;ID;CJK COMPATIBILITY IDEOGRAPH-F91F
-F920;ID;CJK COMPATIBILITY IDEOGRAPH-F920
-F921;ID;CJK COMPATIBILITY IDEOGRAPH-F921
-F922;ID;CJK COMPATIBILITY IDEOGRAPH-F922
-F923;ID;CJK COMPATIBILITY IDEOGRAPH-F923
-F924;ID;CJK COMPATIBILITY IDEOGRAPH-F924
-F925;ID;CJK COMPATIBILITY IDEOGRAPH-F925
-F926;ID;CJK COMPATIBILITY IDEOGRAPH-F926
-F927;ID;CJK COMPATIBILITY IDEOGRAPH-F927
-F928;ID;CJK COMPATIBILITY IDEOGRAPH-F928
-F929;ID;CJK COMPATIBILITY IDEOGRAPH-F929
-F92A;ID;CJK COMPATIBILITY IDEOGRAPH-F92A
-F92B;ID;CJK COMPATIBILITY IDEOGRAPH-F92B
-F92C;ID;CJK COMPATIBILITY IDEOGRAPH-F92C
-F92D;ID;CJK COMPATIBILITY IDEOGRAPH-F92D
-F92E;ID;CJK COMPATIBILITY IDEOGRAPH-F92E
-F92F;ID;CJK COMPATIBILITY IDEOGRAPH-F92F
-F930;ID;CJK COMPATIBILITY IDEOGRAPH-F930
-F931;ID;CJK COMPATIBILITY IDEOGRAPH-F931
-F932;ID;CJK COMPATIBILITY IDEOGRAPH-F932
-F933;ID;CJK COMPATIBILITY IDEOGRAPH-F933
-F934;ID;CJK COMPATIBILITY IDEOGRAPH-F934
-F935;ID;CJK COMPATIBILITY IDEOGRAPH-F935
-F936;ID;CJK COMPATIBILITY IDEOGRAPH-F936
-F937;ID;CJK COMPATIBILITY IDEOGRAPH-F937
-F938;ID;CJK COMPATIBILITY IDEOGRAPH-F938
-F939;ID;CJK COMPATIBILITY IDEOGRAPH-F939
-F93A;ID;CJK COMPATIBILITY IDEOGRAPH-F93A
-F93B;ID;CJK COMPATIBILITY IDEOGRAPH-F93B
-F93C;ID;CJK COMPATIBILITY IDEOGRAPH-F93C
-F93D;ID;CJK COMPATIBILITY IDEOGRAPH-F93D
-F93E;ID;CJK COMPATIBILITY IDEOGRAPH-F93E
-F93F;ID;CJK COMPATIBILITY IDEOGRAPH-F93F
-F940;ID;CJK COMPATIBILITY IDEOGRAPH-F940
-F941;ID;CJK COMPATIBILITY IDEOGRAPH-F941
-F942;ID;CJK COMPATIBILITY IDEOGRAPH-F942
-F943;ID;CJK COMPATIBILITY IDEOGRAPH-F943
-F944;ID;CJK COMPATIBILITY IDEOGRAPH-F944
-F945;ID;CJK COMPATIBILITY IDEOGRAPH-F945
-F946;ID;CJK COMPATIBILITY IDEOGRAPH-F946
-F947;ID;CJK COMPATIBILITY IDEOGRAPH-F947
-F948;ID;CJK COMPATIBILITY IDEOGRAPH-F948
-F949;ID;CJK COMPATIBILITY IDEOGRAPH-F949
-F94A;ID;CJK COMPATIBILITY IDEOGRAPH-F94A
-F94B;ID;CJK COMPATIBILITY IDEOGRAPH-F94B
-F94C;ID;CJK COMPATIBILITY IDEOGRAPH-F94C
-F94D;ID;CJK COMPATIBILITY IDEOGRAPH-F94D
-F94E;ID;CJK COMPATIBILITY IDEOGRAPH-F94E
-F94F;ID;CJK COMPATIBILITY IDEOGRAPH-F94F
-F950;ID;CJK COMPATIBILITY IDEOGRAPH-F950
-F951;ID;CJK COMPATIBILITY IDEOGRAPH-F951
-F952;ID;CJK COMPATIBILITY IDEOGRAPH-F952
-F953;ID;CJK COMPATIBILITY IDEOGRAPH-F953
-F954;ID;CJK COMPATIBILITY IDEOGRAPH-F954
-F955;ID;CJK COMPATIBILITY IDEOGRAPH-F955
-F956;ID;CJK COMPATIBILITY IDEOGRAPH-F956
-F957;ID;CJK COMPATIBILITY IDEOGRAPH-F957
-F958;ID;CJK COMPATIBILITY IDEOGRAPH-F958
-F959;ID;CJK COMPATIBILITY IDEOGRAPH-F959
-F95A;ID;CJK COMPATIBILITY IDEOGRAPH-F95A
-F95B;ID;CJK COMPATIBILITY IDEOGRAPH-F95B
-F95C;ID;CJK COMPATIBILITY IDEOGRAPH-F95C
-F95D;ID;CJK COMPATIBILITY IDEOGRAPH-F95D
-F95E;ID;CJK COMPATIBILITY IDEOGRAPH-F95E
-F95F;ID;CJK COMPATIBILITY IDEOGRAPH-F95F
-F960;ID;CJK COMPATIBILITY IDEOGRAPH-F960
-F961;ID;CJK COMPATIBILITY IDEOGRAPH-F961
-F962;ID;CJK COMPATIBILITY IDEOGRAPH-F962
-F963;ID;CJK COMPATIBILITY IDEOGRAPH-F963
-F964;ID;CJK COMPATIBILITY IDEOGRAPH-F964
-F965;ID;CJK COMPATIBILITY IDEOGRAPH-F965
-F966;ID;CJK COMPATIBILITY IDEOGRAPH-F966
-F967;ID;CJK COMPATIBILITY IDEOGRAPH-F967
-F968;ID;CJK COMPATIBILITY IDEOGRAPH-F968
-F969;ID;CJK COMPATIBILITY IDEOGRAPH-F969
-F96A;ID;CJK COMPATIBILITY IDEOGRAPH-F96A
-F96B;ID;CJK COMPATIBILITY IDEOGRAPH-F96B
-F96C;ID;CJK COMPATIBILITY IDEOGRAPH-F96C
-F96D;ID;CJK COMPATIBILITY IDEOGRAPH-F96D
-F96E;ID;CJK COMPATIBILITY IDEOGRAPH-F96E
-F96F;ID;CJK COMPATIBILITY IDEOGRAPH-F96F
-F970;ID;CJK COMPATIBILITY IDEOGRAPH-F970
-F971;ID;CJK COMPATIBILITY IDEOGRAPH-F971
-F972;ID;CJK COMPATIBILITY IDEOGRAPH-F972
-F973;ID;CJK COMPATIBILITY IDEOGRAPH-F973
-F974;ID;CJK COMPATIBILITY IDEOGRAPH-F974
-F975;ID;CJK COMPATIBILITY IDEOGRAPH-F975
-F976;ID;CJK COMPATIBILITY IDEOGRAPH-F976
-F977;ID;CJK COMPATIBILITY IDEOGRAPH-F977
-F978;ID;CJK COMPATIBILITY IDEOGRAPH-F978
-F979;ID;CJK COMPATIBILITY IDEOGRAPH-F979
-F97A;ID;CJK COMPATIBILITY IDEOGRAPH-F97A
-F97B;ID;CJK COMPATIBILITY IDEOGRAPH-F97B
-F97C;ID;CJK COMPATIBILITY IDEOGRAPH-F97C
-F97D;ID;CJK COMPATIBILITY IDEOGRAPH-F97D
-F97E;ID;CJK COMPATIBILITY IDEOGRAPH-F97E
-F97F;ID;CJK COMPATIBILITY IDEOGRAPH-F97F
-F980;ID;CJK COMPATIBILITY IDEOGRAPH-F980
-F981;ID;CJK COMPATIBILITY IDEOGRAPH-F981
-F982;ID;CJK COMPATIBILITY IDEOGRAPH-F982
-F983;ID;CJK COMPATIBILITY IDEOGRAPH-F983
-F984;ID;CJK COMPATIBILITY IDEOGRAPH-F984
-F985;ID;CJK COMPATIBILITY IDEOGRAPH-F985
-F986;ID;CJK COMPATIBILITY IDEOGRAPH-F986
-F987;ID;CJK COMPATIBILITY IDEOGRAPH-F987
-F988;ID;CJK COMPATIBILITY IDEOGRAPH-F988
-F989;ID;CJK COMPATIBILITY IDEOGRAPH-F989
-F98A;ID;CJK COMPATIBILITY IDEOGRAPH-F98A
-F98B;ID;CJK COMPATIBILITY IDEOGRAPH-F98B
-F98C;ID;CJK COMPATIBILITY IDEOGRAPH-F98C
-F98D;ID;CJK COMPATIBILITY IDEOGRAPH-F98D
-F98E;ID;CJK COMPATIBILITY IDEOGRAPH-F98E
-F98F;ID;CJK COMPATIBILITY IDEOGRAPH-F98F
-F990;ID;CJK COMPATIBILITY IDEOGRAPH-F990
-F991;ID;CJK COMPATIBILITY IDEOGRAPH-F991
-F992;ID;CJK COMPATIBILITY IDEOGRAPH-F992
-F993;ID;CJK COMPATIBILITY IDEOGRAPH-F993
-F994;ID;CJK COMPATIBILITY IDEOGRAPH-F994
-F995;ID;CJK COMPATIBILITY IDEOGRAPH-F995
-F996;ID;CJK COMPATIBILITY IDEOGRAPH-F996
-F997;ID;CJK COMPATIBILITY IDEOGRAPH-F997
-F998;ID;CJK COMPATIBILITY IDEOGRAPH-F998
-F999;ID;CJK COMPATIBILITY IDEOGRAPH-F999
-F99A;ID;CJK COMPATIBILITY IDEOGRAPH-F99A
-F99B;ID;CJK COMPATIBILITY IDEOGRAPH-F99B
-F99C;ID;CJK COMPATIBILITY IDEOGRAPH-F99C
-F99D;ID;CJK COMPATIBILITY IDEOGRAPH-F99D
-F99E;ID;CJK COMPATIBILITY IDEOGRAPH-F99E
-F99F;ID;CJK COMPATIBILITY IDEOGRAPH-F99F
-F9A0;ID;CJK COMPATIBILITY IDEOGRAPH-F9A0
-F9A1;ID;CJK COMPATIBILITY IDEOGRAPH-F9A1
-F9A2;ID;CJK COMPATIBILITY IDEOGRAPH-F9A2
-F9A3;ID;CJK COMPATIBILITY IDEOGRAPH-F9A3
-F9A4;ID;CJK COMPATIBILITY IDEOGRAPH-F9A4
-F9A5;ID;CJK COMPATIBILITY IDEOGRAPH-F9A5
-F9A6;ID;CJK COMPATIBILITY IDEOGRAPH-F9A6
-F9A7;ID;CJK COMPATIBILITY IDEOGRAPH-F9A7
-F9A8;ID;CJK COMPATIBILITY IDEOGRAPH-F9A8
-F9A9;ID;CJK COMPATIBILITY IDEOGRAPH-F9A9
-F9AA;ID;CJK COMPATIBILITY IDEOGRAPH-F9AA
-F9AB;ID;CJK COMPATIBILITY IDEOGRAPH-F9AB
-F9AC;ID;CJK COMPATIBILITY IDEOGRAPH-F9AC
-F9AD;ID;CJK COMPATIBILITY IDEOGRAPH-F9AD
-F9AE;ID;CJK COMPATIBILITY IDEOGRAPH-F9AE
-F9AF;ID;CJK COMPATIBILITY IDEOGRAPH-F9AF
-F9B0;ID;CJK COMPATIBILITY IDEOGRAPH-F9B0
-F9B1;ID;CJK COMPATIBILITY IDEOGRAPH-F9B1
-F9B2;ID;CJK COMPATIBILITY IDEOGRAPH-F9B2
-F9B3;ID;CJK COMPATIBILITY IDEOGRAPH-F9B3
-F9B4;ID;CJK COMPATIBILITY IDEOGRAPH-F9B4
-F9B5;ID;CJK COMPATIBILITY IDEOGRAPH-F9B5
-F9B6;ID;CJK COMPATIBILITY IDEOGRAPH-F9B6
-F9B7;ID;CJK COMPATIBILITY IDEOGRAPH-F9B7
-F9B8;ID;CJK COMPATIBILITY IDEOGRAPH-F9B8
-F9B9;ID;CJK COMPATIBILITY IDEOGRAPH-F9B9
-F9BA;ID;CJK COMPATIBILITY IDEOGRAPH-F9BA
-F9BB;ID;CJK COMPATIBILITY IDEOGRAPH-F9BB
-F9BC;ID;CJK COMPATIBILITY IDEOGRAPH-F9BC
-F9BD;ID;CJK COMPATIBILITY IDEOGRAPH-F9BD
-F9BE;ID;CJK COMPATIBILITY IDEOGRAPH-F9BE
-F9BF;ID;CJK COMPATIBILITY IDEOGRAPH-F9BF
-F9C0;ID;CJK COMPATIBILITY IDEOGRAPH-F9C0
-F9C1;ID;CJK COMPATIBILITY IDEOGRAPH-F9C1
-F9C2;ID;CJK COMPATIBILITY IDEOGRAPH-F9C2
-F9C3;ID;CJK COMPATIBILITY IDEOGRAPH-F9C3
-F9C4;ID;CJK COMPATIBILITY IDEOGRAPH-F9C4
-F9C5;ID;CJK COMPATIBILITY IDEOGRAPH-F9C5
-F9C6;ID;CJK COMPATIBILITY IDEOGRAPH-F9C6
-F9C7;ID;CJK COMPATIBILITY IDEOGRAPH-F9C7
-F9C8;ID;CJK COMPATIBILITY IDEOGRAPH-F9C8
-F9C9;ID;CJK COMPATIBILITY IDEOGRAPH-F9C9
-F9CA;ID;CJK COMPATIBILITY IDEOGRAPH-F9CA
-F9CB;ID;CJK COMPATIBILITY IDEOGRAPH-F9CB
-F9CC;ID;CJK COMPATIBILITY IDEOGRAPH-F9CC
-F9CD;ID;CJK COMPATIBILITY IDEOGRAPH-F9CD
-F9CE;ID;CJK COMPATIBILITY IDEOGRAPH-F9CE
-F9CF;ID;CJK COMPATIBILITY IDEOGRAPH-F9CF
-F9D0;ID;CJK COMPATIBILITY IDEOGRAPH-F9D0
-F9D1;ID;CJK COMPATIBILITY IDEOGRAPH-F9D1
-F9D2;ID;CJK COMPATIBILITY IDEOGRAPH-F9D2
-F9D3;ID;CJK COMPATIBILITY IDEOGRAPH-F9D3
-F9D4;ID;CJK COMPATIBILITY IDEOGRAPH-F9D4
-F9D5;ID;CJK COMPATIBILITY IDEOGRAPH-F9D5
-F9D6;ID;CJK COMPATIBILITY IDEOGRAPH-F9D6
-F9D7;ID;CJK COMPATIBILITY IDEOGRAPH-F9D7
-F9D8;ID;CJK COMPATIBILITY IDEOGRAPH-F9D8
-F9D9;ID;CJK COMPATIBILITY IDEOGRAPH-F9D9
-F9DA;ID;CJK COMPATIBILITY IDEOGRAPH-F9DA
-F9DB;ID;CJK COMPATIBILITY IDEOGRAPH-F9DB
-F9DC;ID;CJK COMPATIBILITY IDEOGRAPH-F9DC
-F9DD;ID;CJK COMPATIBILITY IDEOGRAPH-F9DD
-F9DE;ID;CJK COMPATIBILITY IDEOGRAPH-F9DE
-F9DF;ID;CJK COMPATIBILITY IDEOGRAPH-F9DF
-F9E0;ID;CJK COMPATIBILITY IDEOGRAPH-F9E0
-F9E1;ID;CJK COMPATIBILITY IDEOGRAPH-F9E1
-F9E2;ID;CJK COMPATIBILITY IDEOGRAPH-F9E2
-F9E3;ID;CJK COMPATIBILITY IDEOGRAPH-F9E3
-F9E4;ID;CJK COMPATIBILITY IDEOGRAPH-F9E4
-F9E5;ID;CJK COMPATIBILITY IDEOGRAPH-F9E5
-F9E6;ID;CJK COMPATIBILITY IDEOGRAPH-F9E6
-F9E7;ID;CJK COMPATIBILITY IDEOGRAPH-F9E7
-F9E8;ID;CJK COMPATIBILITY IDEOGRAPH-F9E8
-F9E9;ID;CJK COMPATIBILITY IDEOGRAPH-F9E9
-F9EA;ID;CJK COMPATIBILITY IDEOGRAPH-F9EA
-F9EB;ID;CJK COMPATIBILITY IDEOGRAPH-F9EB
-F9EC;ID;CJK COMPATIBILITY IDEOGRAPH-F9EC
-F9ED;ID;CJK COMPATIBILITY IDEOGRAPH-F9ED
-F9EE;ID;CJK COMPATIBILITY IDEOGRAPH-F9EE
-F9EF;ID;CJK COMPATIBILITY IDEOGRAPH-F9EF
-F9F0;ID;CJK COMPATIBILITY IDEOGRAPH-F9F0
-F9F1;ID;CJK COMPATIBILITY IDEOGRAPH-F9F1
-F9F2;ID;CJK COMPATIBILITY IDEOGRAPH-F9F2
-F9F3;ID;CJK COMPATIBILITY IDEOGRAPH-F9F3
-F9F4;ID;CJK COMPATIBILITY IDEOGRAPH-F9F4
-F9F5;ID;CJK COMPATIBILITY IDEOGRAPH-F9F5
-F9F6;ID;CJK COMPATIBILITY IDEOGRAPH-F9F6
-F9F7;ID;CJK COMPATIBILITY IDEOGRAPH-F9F7
-F9F8;ID;CJK COMPATIBILITY IDEOGRAPH-F9F8
-F9F9;ID;CJK COMPATIBILITY IDEOGRAPH-F9F9
-F9FA;ID;CJK COMPATIBILITY IDEOGRAPH-F9FA
-F9FB;ID;CJK COMPATIBILITY IDEOGRAPH-F9FB
-F9FC;ID;CJK COMPATIBILITY IDEOGRAPH-F9FC
-F9FD;ID;CJK COMPATIBILITY IDEOGRAPH-F9FD
-F9FE;ID;CJK COMPATIBILITY IDEOGRAPH-F9FE
-F9FF;ID;CJK COMPATIBILITY IDEOGRAPH-F9FF
-FA00;ID;CJK COMPATIBILITY IDEOGRAPH-FA00
-FA01;ID;CJK COMPATIBILITY IDEOGRAPH-FA01
-FA02;ID;CJK COMPATIBILITY IDEOGRAPH-FA02
-FA03;ID;CJK COMPATIBILITY IDEOGRAPH-FA03
-FA04;ID;CJK COMPATIBILITY IDEOGRAPH-FA04
-FA05;ID;CJK COMPATIBILITY IDEOGRAPH-FA05
-FA06;ID;CJK COMPATIBILITY IDEOGRAPH-FA06
-FA07;ID;CJK COMPATIBILITY IDEOGRAPH-FA07
-FA08;ID;CJK COMPATIBILITY IDEOGRAPH-FA08
-FA09;ID;CJK COMPATIBILITY IDEOGRAPH-FA09
-FA0A;ID;CJK COMPATIBILITY IDEOGRAPH-FA0A
-FA0B;ID;CJK COMPATIBILITY IDEOGRAPH-FA0B
-FA0C;ID;CJK COMPATIBILITY IDEOGRAPH-FA0C
-FA0D;ID;CJK COMPATIBILITY IDEOGRAPH-FA0D
-FA0E;ID;CJK COMPATIBILITY IDEOGRAPH-FA0E
-FA0F;ID;CJK COMPATIBILITY IDEOGRAPH-FA0F
-FA10;ID;CJK COMPATIBILITY IDEOGRAPH-FA10
-FA11;ID;CJK COMPATIBILITY IDEOGRAPH-FA11
-FA12;ID;CJK COMPATIBILITY IDEOGRAPH-FA12
-FA13;ID;CJK COMPATIBILITY IDEOGRAPH-FA13
-FA14;ID;CJK COMPATIBILITY IDEOGRAPH-FA14
-FA15;ID;CJK COMPATIBILITY IDEOGRAPH-FA15
-FA16;ID;CJK COMPATIBILITY IDEOGRAPH-FA16
-FA17;ID;CJK COMPATIBILITY IDEOGRAPH-FA17
-FA18;ID;CJK COMPATIBILITY IDEOGRAPH-FA18
-FA19;ID;CJK COMPATIBILITY IDEOGRAPH-FA19
-FA1A;ID;CJK COMPATIBILITY IDEOGRAPH-FA1A
-FA1B;ID;CJK COMPATIBILITY IDEOGRAPH-FA1B
-FA1C;ID;CJK COMPATIBILITY IDEOGRAPH-FA1C
-FA1D;ID;CJK COMPATIBILITY IDEOGRAPH-FA1D
-FA1E;ID;CJK COMPATIBILITY IDEOGRAPH-FA1E
-FA1F;ID;CJK COMPATIBILITY IDEOGRAPH-FA1F
-FA20;ID;CJK COMPATIBILITY IDEOGRAPH-FA20
-FA21;ID;CJK COMPATIBILITY IDEOGRAPH-FA21
-FA22;ID;CJK COMPATIBILITY IDEOGRAPH-FA22
-FA23;ID;CJK COMPATIBILITY IDEOGRAPH-FA23
-FA24;ID;CJK COMPATIBILITY IDEOGRAPH-FA24
-FA25;ID;CJK COMPATIBILITY IDEOGRAPH-FA25
-FA26;ID;CJK COMPATIBILITY IDEOGRAPH-FA26
-FA27;ID;CJK COMPATIBILITY IDEOGRAPH-FA27
-FA28;ID;CJK COMPATIBILITY IDEOGRAPH-FA28
-FA29;ID;CJK COMPATIBILITY IDEOGRAPH-FA29
-FA2A;ID;CJK COMPATIBILITY IDEOGRAPH-FA2A
-FA2B;ID;CJK COMPATIBILITY IDEOGRAPH-FA2B
-FA2C;ID;CJK COMPATIBILITY IDEOGRAPH-FA2C
-FA2D;ID;CJK COMPATIBILITY IDEOGRAPH-FA2D
-FB00;AL;LATIN SMALL LIGATURE FF
-FB01;AL;LATIN SMALL LIGATURE FI
-FB02;AL;LATIN SMALL LIGATURE FL
-FB03;AL;LATIN SMALL LIGATURE FFI
-FB04;AL;LATIN SMALL LIGATURE FFL
-FB05;AL;LATIN SMALL LIGATURE LONG S T
-FB06;AL;LATIN SMALL LIGATURE ST
-FB13;AL;ARMENIAN SMALL LIGATURE MEN NOW
-FB14;AL;ARMENIAN SMALL LIGATURE MEN ECH
-FB15;AL;ARMENIAN SMALL LIGATURE MEN INI
-FB16;AL;ARMENIAN SMALL LIGATURE VEW NOW
-FB17;AL;ARMENIAN SMALL LIGATURE MEN XEH
-FB1D;AL;HEBREW LETTER YOD WITH HIRIQ
-FB1E;CM;HEBREW POINT JUDEO-SPANISH VARIKA
-FB1F;AL;HEBREW LIGATURE YIDDISH YOD YOD PATAH
-FB20;AL;HEBREW LETTER ALTERNATIVE AYIN
-FB21;AL;HEBREW LETTER WIDE ALEF
-FB22;AL;HEBREW LETTER WIDE DALET
-FB23;AL;HEBREW LETTER WIDE HE
-FB24;AL;HEBREW LETTER WIDE KAF
-FB25;AL;HEBREW LETTER WIDE LAMED
-FB26;AL;HEBREW LETTER WIDE FINAL MEM
-FB27;AL;HEBREW LETTER WIDE RESH
-FB28;AL;HEBREW LETTER WIDE TAV
-FB29;AL;HEBREW LETTER ALTERNATIVE PLUS SIGN
-FB2A;AL;HEBREW LETTER SHIN WITH SHIN DOT
-FB2B;AL;HEBREW LETTER SHIN WITH SIN DOT
-FB2C;AL;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
-FB2D;AL;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
-FB2E;AL;HEBREW LETTER ALEF WITH PATAH
-FB2F;AL;HEBREW LETTER ALEF WITH QAMATS
-FB30;AL;HEBREW LETTER ALEF WITH MAPIQ
-FB31;AL;HEBREW LETTER BET WITH DAGESH
-FB32;AL;HEBREW LETTER GIMEL WITH DAGESH
-FB33;AL;HEBREW LETTER DALET WITH DAGESH
-FB34;AL;HEBREW LETTER HE WITH MAPIQ
-FB35;AL;HEBREW LETTER VAV WITH DAGESH
-FB36;AL;HEBREW LETTER ZAYIN WITH DAGESH
-FB38;AL;HEBREW LETTER TET WITH DAGESH
-FB39;AL;HEBREW LETTER YOD WITH DAGESH
-FB3A;AL;HEBREW LETTER FINAL KAF WITH DAGESH
-FB3B;AL;HEBREW LETTER KAF WITH DAGESH
-FB3C;AL;HEBREW LETTER LAMED WITH DAGESH
-FB3E;AL;HEBREW LETTER MEM WITH DAGESH
-FB40;AL;HEBREW LETTER NUN WITH DAGESH
-FB41;AL;HEBREW LETTER SAMEKH WITH DAGESH
-FB43;AL;HEBREW LETTER FINAL PE WITH DAGESH
-FB44;AL;HEBREW LETTER PE WITH DAGESH
-FB46;AL;HEBREW LETTER TSADI WITH DAGESH
-FB47;AL;HEBREW LETTER QOF WITH DAGESH
-FB48;AL;HEBREW LETTER RESH WITH DAGESH
-FB49;AL;HEBREW LETTER SHIN WITH DAGESH
-FB4A;AL;HEBREW LETTER TAV WITH DAGESH
-FB4B;AL;HEBREW LETTER VAV WITH HOLAM
-FB4C;AL;HEBREW LETTER BET WITH RAFE
-FB4D;AL;HEBREW LETTER KAF WITH RAFE
-FB4E;AL;HEBREW LETTER PE WITH RAFE
-FB4F;AL;HEBREW LIGATURE ALEF LAMED
-FB50;AL;ARABIC LETTER ALEF WASLA ISOLATED FORM
-FB51;AL;ARABIC LETTER ALEF WASLA FINAL FORM
-FB52;AL;ARABIC LETTER BEEH ISOLATED FORM
-FB53;AL;ARABIC LETTER BEEH FINAL FORM
-FB54;AL;ARABIC LETTER BEEH INITIAL FORM
-FB55;AL;ARABIC LETTER BEEH MEDIAL FORM
-FB56;AL;ARABIC LETTER PEH ISOLATED FORM
-FB57;AL;ARABIC LETTER PEH FINAL FORM
-FB58;AL;ARABIC LETTER PEH INITIAL FORM
-FB59;AL;ARABIC LETTER PEH MEDIAL FORM
-FB5A;AL;ARABIC LETTER BEHEH ISOLATED FORM
-FB5B;AL;ARABIC LETTER BEHEH FINAL FORM
-FB5C;AL;ARABIC LETTER BEHEH INITIAL FORM
-FB5D;AL;ARABIC LETTER BEHEH MEDIAL FORM
-FB5E;AL;ARABIC LETTER TTEHEH ISOLATED FORM
-FB5F;AL;ARABIC LETTER TTEHEH FINAL FORM
-FB60;AL;ARABIC LETTER TTEHEH INITIAL FORM
-FB61;AL;ARABIC LETTER TTEHEH MEDIAL FORM
-FB62;AL;ARABIC LETTER TEHEH ISOLATED FORM
-FB63;AL;ARABIC LETTER TEHEH FINAL FORM
-FB64;AL;ARABIC LETTER TEHEH INITIAL FORM
-FB65;AL;ARABIC LETTER TEHEH MEDIAL FORM
-FB66;AL;ARABIC LETTER TTEH ISOLATED FORM
-FB67;AL;ARABIC LETTER TTEH FINAL FORM
-FB68;AL;ARABIC LETTER TTEH INITIAL FORM
-FB69;AL;ARABIC LETTER TTEH MEDIAL FORM
-FB6A;AL;ARABIC LETTER VEH ISOLATED FORM
-FB6B;AL;ARABIC LETTER VEH FINAL FORM
-FB6C;AL;ARABIC LETTER VEH INITIAL FORM
-FB6D;AL;ARABIC LETTER VEH MEDIAL FORM
-FB6E;AL;ARABIC LETTER PEHEH ISOLATED FORM
-FB6F;AL;ARABIC LETTER PEHEH FINAL FORM
-FB70;AL;ARABIC LETTER PEHEH INITIAL FORM
-FB71;AL;ARABIC LETTER PEHEH MEDIAL FORM
-FB72;AL;ARABIC LETTER DYEH ISOLATED FORM
-FB73;AL;ARABIC LETTER DYEH FINAL FORM
-FB74;AL;ARABIC LETTER DYEH INITIAL FORM
-FB75;AL;ARABIC LETTER DYEH MEDIAL FORM
-FB76;AL;ARABIC LETTER NYEH ISOLATED FORM
-FB77;AL;ARABIC LETTER NYEH FINAL FORM
-FB78;AL;ARABIC LETTER NYEH INITIAL FORM
-FB79;AL;ARABIC LETTER NYEH MEDIAL FORM
-FB7A;AL;ARABIC LETTER TCHEH ISOLATED FORM
-FB7B;AL;ARABIC LETTER TCHEH FINAL FORM
-FB7C;AL;ARABIC LETTER TCHEH INITIAL FORM
-FB7D;AL;ARABIC LETTER TCHEH MEDIAL FORM
-FB7E;AL;ARABIC LETTER TCHEHEH ISOLATED FORM
-FB7F;AL;ARABIC LETTER TCHEHEH FINAL FORM
-FB80;AL;ARABIC LETTER TCHEHEH INITIAL FORM
-FB81;AL;ARABIC LETTER TCHEHEH MEDIAL FORM
-FB82;AL;ARABIC LETTER DDAHAL ISOLATED FORM
-FB83;AL;ARABIC LETTER DDAHAL FINAL FORM
-FB84;AL;ARABIC LETTER DAHAL ISOLATED FORM
-FB85;AL;ARABIC LETTER DAHAL FINAL FORM
-FB86;AL;ARABIC LETTER DUL ISOLATED FORM
-FB87;AL;ARABIC LETTER DUL FINAL FORM
-FB88;AL;ARABIC LETTER DDAL ISOLATED FORM
-FB89;AL;ARABIC LETTER DDAL FINAL FORM
-FB8A;AL;ARABIC LETTER JEH ISOLATED FORM
-FB8B;AL;ARABIC LETTER JEH FINAL FORM
-FB8C;AL;ARABIC LETTER RREH ISOLATED FORM
-FB8D;AL;ARABIC LETTER RREH FINAL FORM
-FB8E;AL;ARABIC LETTER KEHEH ISOLATED FORM
-FB8F;AL;ARABIC LETTER KEHEH FINAL FORM
-FB90;AL;ARABIC LETTER KEHEH INITIAL FORM
-FB91;AL;ARABIC LETTER KEHEH MEDIAL FORM
-FB92;AL;ARABIC LETTER GAF ISOLATED FORM
-FB93;AL;ARABIC LETTER GAF FINAL FORM
-FB94;AL;ARABIC LETTER GAF INITIAL FORM
-FB95;AL;ARABIC LETTER GAF MEDIAL FORM
-FB96;AL;ARABIC LETTER GUEH ISOLATED FORM
-FB97;AL;ARABIC LETTER GUEH FINAL FORM
-FB98;AL;ARABIC LETTER GUEH INITIAL FORM
-FB99;AL;ARABIC LETTER GUEH MEDIAL FORM
-FB9A;AL;ARABIC LETTER NGOEH ISOLATED FORM
-FB9B;AL;ARABIC LETTER NGOEH FINAL FORM
-FB9C;AL;ARABIC LETTER NGOEH INITIAL FORM
-FB9D;AL;ARABIC LETTER NGOEH MEDIAL FORM
-FB9E;AL;ARABIC LETTER NOON GHUNNA ISOLATED FORM
-FB9F;AL;ARABIC LETTER NOON GHUNNA FINAL FORM
-FBA0;AL;ARABIC LETTER RNOON ISOLATED FORM
-FBA1;AL;ARABIC LETTER RNOON FINAL FORM
-FBA2;AL;ARABIC LETTER RNOON INITIAL FORM
-FBA3;AL;ARABIC LETTER RNOON MEDIAL FORM
-FBA4;AL;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
-FBA5;AL;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
-FBA6;AL;ARABIC LETTER HEH GOAL ISOLATED FORM
-FBA7;AL;ARABIC LETTER HEH GOAL FINAL FORM
-FBA8;AL;ARABIC LETTER HEH GOAL INITIAL FORM
-FBA9;AL;ARABIC LETTER HEH GOAL MEDIAL FORM
-FBAA;AL;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
-FBAB;AL;ARABIC LETTER HEH DOACHASHMEE FINAL FORM
-FBAC;AL;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
-FBAD;AL;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
-FBAE;AL;ARABIC LETTER YEH BARREE ISOLATED FORM
-FBAF;AL;ARABIC LETTER YEH BARREE FINAL FORM
-FBB0;AL;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
-FBB1;AL;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-FBD3;AL;ARABIC LETTER NG ISOLATED FORM
-FBD4;AL;ARABIC LETTER NG FINAL FORM
-FBD5;AL;ARABIC LETTER NG INITIAL FORM
-FBD6;AL;ARABIC LETTER NG MEDIAL FORM
-FBD7;AL;ARABIC LETTER U ISOLATED FORM
-FBD8;AL;ARABIC LETTER U FINAL FORM
-FBD9;AL;ARABIC LETTER OE ISOLATED FORM
-FBDA;AL;ARABIC LETTER OE FINAL FORM
-FBDB;AL;ARABIC LETTER YU ISOLATED FORM
-FBDC;AL;ARABIC LETTER YU FINAL FORM
-FBDD;AL;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
-FBDE;AL;ARABIC LETTER VE ISOLATED FORM
-FBDF;AL;ARABIC LETTER VE FINAL FORM
-FBE0;AL;ARABIC LETTER KIRGHIZ OE ISOLATED FORM
-FBE1;AL;ARABIC LETTER KIRGHIZ OE FINAL FORM
-FBE2;AL;ARABIC LETTER KIRGHIZ YU ISOLATED FORM
-FBE3;AL;ARABIC LETTER KIRGHIZ YU FINAL FORM
-FBE4;AL;ARABIC LETTER E ISOLATED FORM
-FBE5;AL;ARABIC LETTER E FINAL FORM
-FBE6;AL;ARABIC LETTER E INITIAL FORM
-FBE7;AL;ARABIC LETTER E MEDIAL FORM
-FBE8;AL;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
-FBE9;AL;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
-FBEA;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
-FBEB;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
-FBEC;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
-FBED;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
-FBEE;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
-FBEF;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
-FBF0;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
-FBF1;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
-FBF2;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
-FBF3;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
-FBF4;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
-FBF5;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
-FBF6;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
-FBF7;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
-FBF8;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
-FBF9;AL;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
-FBFA;AL;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
-FBFB;AL;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
-FBFC;AL;ARABIC LETTER FARSI YEH ISOLATED FORM
-FBFD;AL;ARABIC LETTER FARSI YEH FINAL FORM
-FBFE;AL;ARABIC LETTER FARSI YEH INITIAL FORM
-FBFF;AL;ARABIC LETTER FARSI YEH MEDIAL FORM
-FC00;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
-FC01;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
-FC02;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
-FC03;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
-FC04;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
-FC05;AL;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
-FC06;AL;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
-FC07;AL;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
-FC08;AL;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
-FC09;AL;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
-FC0A;AL;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
-FC0B;AL;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
-FC0C;AL;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
-FC0D;AL;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
-FC0E;AL;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
-FC0F;AL;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
-FC10;AL;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
-FC11;AL;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
-FC12;AL;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
-FC13;AL;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
-FC14;AL;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
-FC15;AL;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
-FC16;AL;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
-FC17;AL;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
-FC18;AL;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
-FC19;AL;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
-FC1A;AL;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
-FC1B;AL;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
-FC1C;AL;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
-FC1D;AL;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
-FC1E;AL;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
-FC1F;AL;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
-FC20;AL;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
-FC21;AL;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
-FC22;AL;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
-FC23;AL;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
-FC24;AL;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
-FC25;AL;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
-FC26;AL;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
-FC27;AL;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
-FC28;AL;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
-FC29;AL;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
-FC2A;AL;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
-FC2B;AL;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
-FC2C;AL;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
-FC2D;AL;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
-FC2E;AL;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
-FC2F;AL;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
-FC30;AL;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
-FC31;AL;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
-FC32;AL;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
-FC33;AL;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
-FC34;AL;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
-FC35;AL;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
-FC36;AL;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
-FC37;AL;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
-FC38;AL;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
-FC39;AL;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
-FC3A;AL;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
-FC3B;AL;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
-FC3C;AL;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
-FC3D;AL;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
-FC3E;AL;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
-FC3F;AL;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
-FC40;AL;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
-FC41;AL;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
-FC42;AL;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
-FC43;AL;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
-FC44;AL;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
-FC45;AL;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
-FC46;AL;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
-FC47;AL;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
-FC48;AL;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
-FC49;AL;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
-FC4A;AL;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
-FC4B;AL;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
-FC4C;AL;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
-FC4D;AL;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
-FC4E;AL;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
-FC4F;AL;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
-FC50;AL;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
-FC51;AL;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
-FC52;AL;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
-FC53;AL;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
-FC54;AL;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
-FC55;AL;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
-FC56;AL;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
-FC57;AL;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
-FC58;AL;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
-FC59;AL;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
-FC5A;AL;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
-FC5B;AL;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
-FC5C;AL;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
-FC5D;AL;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
-FC5E;AL;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
-FC5F;AL;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
-FC60;AL;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
-FC61;AL;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
-FC62;AL;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
-FC63;AL;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
-FC64;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
-FC65;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
-FC66;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
-FC67;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
-FC68;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
-FC69;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
-FC6A;AL;ARABIC LIGATURE BEH WITH REH FINAL FORM
-FC6B;AL;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
-FC6C;AL;ARABIC LIGATURE BEH WITH MEEM FINAL FORM
-FC6D;AL;ARABIC LIGATURE BEH WITH NOON FINAL FORM
-FC6E;AL;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
-FC6F;AL;ARABIC LIGATURE BEH WITH YEH FINAL FORM
-FC70;AL;ARABIC LIGATURE TEH WITH REH FINAL FORM
-FC71;AL;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
-FC72;AL;ARABIC LIGATURE TEH WITH MEEM FINAL FORM
-FC73;AL;ARABIC LIGATURE TEH WITH NOON FINAL FORM
-FC74;AL;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
-FC75;AL;ARABIC LIGATURE TEH WITH YEH FINAL FORM
-FC76;AL;ARABIC LIGATURE THEH WITH REH FINAL FORM
-FC77;AL;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
-FC78;AL;ARABIC LIGATURE THEH WITH MEEM FINAL FORM
-FC79;AL;ARABIC LIGATURE THEH WITH NOON FINAL FORM
-FC7A;AL;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
-FC7B;AL;ARABIC LIGATURE THEH WITH YEH FINAL FORM
-FC7C;AL;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
-FC7D;AL;ARABIC LIGATURE FEH WITH YEH FINAL FORM
-FC7E;AL;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
-FC7F;AL;ARABIC LIGATURE QAF WITH YEH FINAL FORM
-FC80;AL;ARABIC LIGATURE KAF WITH ALEF FINAL FORM
-FC81;AL;ARABIC LIGATURE KAF WITH LAM FINAL FORM
-FC82;AL;ARABIC LIGATURE KAF WITH MEEM FINAL FORM
-FC83;AL;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
-FC84;AL;ARABIC LIGATURE KAF WITH YEH FINAL FORM
-FC85;AL;ARABIC LIGATURE LAM WITH MEEM FINAL FORM
-FC86;AL;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
-FC87;AL;ARABIC LIGATURE LAM WITH YEH FINAL FORM
-FC88;AL;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
-FC89;AL;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
-FC8A;AL;ARABIC LIGATURE NOON WITH REH FINAL FORM
-FC8B;AL;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
-FC8C;AL;ARABIC LIGATURE NOON WITH MEEM FINAL FORM
-FC8D;AL;ARABIC LIGATURE NOON WITH NOON FINAL FORM
-FC8E;AL;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
-FC8F;AL;ARABIC LIGATURE NOON WITH YEH FINAL FORM
-FC90;AL;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
-FC91;AL;ARABIC LIGATURE YEH WITH REH FINAL FORM
-FC92;AL;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
-FC93;AL;ARABIC LIGATURE YEH WITH MEEM FINAL FORM
-FC94;AL;ARABIC LIGATURE YEH WITH NOON FINAL FORM
-FC95;AL;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
-FC96;AL;ARABIC LIGATURE YEH WITH YEH FINAL FORM
-FC97;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
-FC98;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
-FC99;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
-FC9A;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
-FC9B;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
-FC9C;AL;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
-FC9D;AL;ARABIC LIGATURE BEH WITH HAH INITIAL FORM
-FC9E;AL;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
-FC9F;AL;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
-FCA0;AL;ARABIC LIGATURE BEH WITH HEH INITIAL FORM
-FCA1;AL;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
-FCA2;AL;ARABIC LIGATURE TEH WITH HAH INITIAL FORM
-FCA3;AL;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
-FCA4;AL;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
-FCA5;AL;ARABIC LIGATURE TEH WITH HEH INITIAL FORM
-FCA6;AL;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
-FCA7;AL;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
-FCA8;AL;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
-FCA9;AL;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
-FCAA;AL;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
-FCAB;AL;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
-FCAC;AL;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
-FCAD;AL;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
-FCAE;AL;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
-FCAF;AL;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
-FCB0;AL;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
-FCB1;AL;ARABIC LIGATURE SAD WITH HAH INITIAL FORM
-FCB2;AL;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
-FCB3;AL;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
-FCB4;AL;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
-FCB5;AL;ARABIC LIGATURE DAD WITH HAH INITIAL FORM
-FCB6;AL;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
-FCB7;AL;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
-FCB8;AL;ARABIC LIGATURE TAH WITH HAH INITIAL FORM
-FCB9;AL;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
-FCBA;AL;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
-FCBB;AL;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
-FCBC;AL;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
-FCBD;AL;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
-FCBE;AL;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
-FCBF;AL;ARABIC LIGATURE FEH WITH HAH INITIAL FORM
-FCC0;AL;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
-FCC1;AL;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
-FCC2;AL;ARABIC LIGATURE QAF WITH HAH INITIAL FORM
-FCC3;AL;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
-FCC4;AL;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
-FCC5;AL;ARABIC LIGATURE KAF WITH HAH INITIAL FORM
-FCC6;AL;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
-FCC7;AL;ARABIC LIGATURE KAF WITH LAM INITIAL FORM
-FCC8;AL;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
-FCC9;AL;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
-FCCA;AL;ARABIC LIGATURE LAM WITH HAH INITIAL FORM
-FCCB;AL;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
-FCCC;AL;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
-FCCD;AL;ARABIC LIGATURE LAM WITH HEH INITIAL FORM
-FCCE;AL;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
-FCCF;AL;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
-FCD0;AL;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
-FCD1;AL;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
-FCD2;AL;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
-FCD3;AL;ARABIC LIGATURE NOON WITH HAH INITIAL FORM
-FCD4;AL;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
-FCD5;AL;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
-FCD6;AL;ARABIC LIGATURE NOON WITH HEH INITIAL FORM
-FCD7;AL;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
-FCD8;AL;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
-FCD9;AL;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
-FCDA;AL;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
-FCDB;AL;ARABIC LIGATURE YEH WITH HAH INITIAL FORM
-FCDC;AL;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
-FCDD;AL;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
-FCDE;AL;ARABIC LIGATURE YEH WITH HEH INITIAL FORM
-FCDF;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
-FCE0;AL;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
-FCE1;AL;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
-FCE2;AL;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
-FCE3;AL;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
-FCE4;AL;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
-FCE5;AL;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
-FCE6;AL;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
-FCE7;AL;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
-FCE8;AL;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
-FCE9;AL;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
-FCEA;AL;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
-FCEB;AL;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
-FCEC;AL;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
-FCED;AL;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
-FCEE;AL;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
-FCEF;AL;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
-FCF0;AL;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
-FCF1;AL;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
-FCF2;AL;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
-FCF3;AL;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
-FCF4;AL;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
-FCF5;AL;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
-FCF6;AL;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
-FCF7;AL;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
-FCF8;AL;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
-FCF9;AL;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
-FCFA;AL;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
-FCFB;AL;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
-FCFC;AL;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
-FCFD;AL;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
-FCFE;AL;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
-FCFF;AL;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
-FD00;AL;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
-FD01;AL;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
-FD02;AL;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
-FD03;AL;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
-FD04;AL;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
-FD05;AL;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
-FD06;AL;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
-FD07;AL;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
-FD08;AL;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
-FD09;AL;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
-FD0A;AL;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
-FD0B;AL;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
-FD0C;AL;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
-FD0D;AL;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
-FD0E;AL;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
-FD0F;AL;ARABIC LIGATURE SAD WITH REH ISOLATED FORM
-FD10;AL;ARABIC LIGATURE DAD WITH REH ISOLATED FORM
-FD11;AL;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
-FD12;AL;ARABIC LIGATURE TAH WITH YEH FINAL FORM
-FD13;AL;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
-FD14;AL;ARABIC LIGATURE AIN WITH YEH FINAL FORM
-FD15;AL;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
-FD16;AL;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
-FD17;AL;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
-FD18;AL;ARABIC LIGATURE SEEN WITH YEH FINAL FORM
-FD19;AL;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
-FD1A;AL;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
-FD1B;AL;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
-FD1C;AL;ARABIC LIGATURE HAH WITH YEH FINAL FORM
-FD1D;AL;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
-FD1E;AL;ARABIC LIGATURE JEEM WITH YEH FINAL FORM
-FD1F;AL;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
-FD20;AL;ARABIC LIGATURE KHAH WITH YEH FINAL FORM
-FD21;AL;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
-FD22;AL;ARABIC LIGATURE SAD WITH YEH FINAL FORM
-FD23;AL;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
-FD24;AL;ARABIC LIGATURE DAD WITH YEH FINAL FORM
-FD25;AL;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
-FD26;AL;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
-FD27;AL;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
-FD28;AL;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
-FD29;AL;ARABIC LIGATURE SHEEN WITH REH FINAL FORM
-FD2A;AL;ARABIC LIGATURE SEEN WITH REH FINAL FORM
-FD2B;AL;ARABIC LIGATURE SAD WITH REH FINAL FORM
-FD2C;AL;ARABIC LIGATURE DAD WITH REH FINAL FORM
-FD2D;AL;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
-FD2E;AL;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
-FD2F;AL;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
-FD30;AL;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
-FD31;AL;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
-FD32;AL;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
-FD33;AL;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
-FD34;AL;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
-FD35;AL;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
-FD36;AL;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
-FD37;AL;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
-FD38;AL;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
-FD39;AL;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
-FD3A;AL;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
-FD3B;AL;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
-FD3C;AL;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
-FD3D;AL;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
-FD3E;OP;ORNATE LEFT PARENTHESIS
-FD3F;CL;ORNATE RIGHT PARENTHESIS
-FD50;AL;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
-FD51;AL;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
-FD52;AL;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
-FD53;AL;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
-FD54;AL;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
-FD55;AL;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
-FD56;AL;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
-FD57;AL;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
-FD58;AL;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
-FD59;AL;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
-FD5A;AL;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
-FD5B;AL;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FD5C;AL;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
-FD5D;AL;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
-FD5E;AL;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
-FD5F;AL;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
-FD60;AL;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
-FD61;AL;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
-FD62;AL;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
-FD63;AL;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
-FD64;AL;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
-FD65;AL;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
-FD66;AL;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
-FD67;AL;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
-FD68;AL;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
-FD69;AL;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
-FD6A;AL;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
-FD6B;AL;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
-FD6C;AL;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
-FD6D;AL;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
-FD6E;AL;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
-FD6F;AL;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
-FD70;AL;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
-FD71;AL;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
-FD72;AL;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
-FD73;AL;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
-FD74;AL;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
-FD75;AL;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
-FD76;AL;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
-FD77;AL;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
-FD78;AL;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FD79;AL;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
-FD7A;AL;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
-FD7B;AL;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FD7C;AL;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
-FD7D;AL;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
-FD7E;AL;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
-FD7F;AL;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
-FD80;AL;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
-FD81;AL;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
-FD82;AL;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
-FD83;AL;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
-FD84;AL;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
-FD85;AL;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
-FD86;AL;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
-FD87;AL;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
-FD88;AL;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
-FD89;AL;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
-FD8A;AL;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
-FD8B;AL;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
-FD8C;AL;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
-FD8D;AL;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
-FD8E;AL;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
-FD8F;AL;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
-FD92;AL;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
-FD93;AL;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
-FD94;AL;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
-FD95;AL;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
-FD96;AL;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
-FD97;AL;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
-FD98;AL;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
-FD99;AL;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
-FD9A;AL;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
-FD9B;AL;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FD9C;AL;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
-FD9D;AL;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
-FD9E;AL;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
-FD9F;AL;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
-FDA0;AL;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
-FDA1;AL;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
-FDA2;AL;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
-FDA3;AL;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
-FDA4;AL;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FDA5;AL;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
-FDA6;AL;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
-FDA7;AL;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
-FDA8;AL;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
-FDA9;AL;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
-FDAA;AL;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
-FDAB;AL;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
-FDAC;AL;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
-FDAD;AL;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
-FDAE;AL;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
-FDAF;AL;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
-FDB0;AL;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
-FDB1;AL;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
-FDB2;AL;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
-FDB3;AL;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
-FDB4;AL;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
-FDB5;AL;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
-FDB6;AL;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
-FDB7;AL;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
-FDB8;AL;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
-FDB9;AL;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
-FDBA;AL;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
-FDBB;AL;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
-FDBC;AL;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
-FDBD;AL;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
-FDBE;AL;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
-FDBF;AL;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
-FDC0;AL;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
-FDC1;AL;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
-FDC2;AL;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
-FDC3;AL;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
-FDC4;AL;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
-FDC5;AL;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
-FDC6;AL;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
-FDC7;AL;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-FDF0;AL;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
-FDF1;AL;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
-FDF2;AL;ARABIC LIGATURE ALLAH ISOLATED FORM
-FDF3;AL;ARABIC LIGATURE AKBAR ISOLATED FORM
-FDF4;AL;ARABIC LIGATURE MOHAMMAD ISOLATED FORM
-FDF5;AL;ARABIC LIGATURE SALAM ISOLATED FORM
-FDF6;AL;ARABIC LIGATURE RASOUL ISOLATED FORM
-FDF7;AL;ARABIC LIGATURE ALAYHE ISOLATED FORM
-FDF8;AL;ARABIC LIGATURE WASALLAM ISOLATED FORM
-FDF9;AL;ARABIC LIGATURE SALLA ISOLATED FORM
-FDFA;AL;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
-FDFB;AL;ARABIC LIGATURE JALLAJALALOUHOU
-FE20;CM;COMBINING LIGATURE LEFT HALF
-FE21;CM;COMBINING LIGATURE RIGHT HALF
-FE22;CM;COMBINING DOUBLE TILDE LEFT HALF
-FE23;CM;COMBINING DOUBLE TILDE RIGHT HALF
-FE30;ID;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
-FE31;ID;PRESENTATION FORM FOR VERTICAL EM DASH
-FE32;ID;PRESENTATION FORM FOR VERTICAL EN DASH
-FE33;ID;PRESENTATION FORM FOR VERTICAL LOW LINE
-FE34;ID;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
-FE35;OP;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
-FE36;CL;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
-FE37;OP;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
-FE38;CL;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
-FE39;OP;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
-FE3A;CL;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
-FE3B;OP;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
-FE3C;CL;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
-FE3D;OP;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
-FE3E;CL;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
-FE3F;OP;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
-FE40;CL;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
-FE41;OP;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
-FE42;CL;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
-FE43;OP;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
-FE44;CL;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
-FE49;ID;DASHED OVERLINE
-FE4A;ID;CENTRELINE OVERLINE
-FE4B;ID;WAVY OVERLINE
-FE4C;ID;DOUBLE WAVY OVERLINE
-FE4D;ID;DASHED LOW LINE
-FE4E;ID;CENTRELINE LOW LINE
-FE4F;ID;WAVY LOW LINE
-FE50;CL;SMALL COMMA
-FE51;ID;SMALL IDEOGRAPHIC COMMA
-FE52;CL;SMALL FULL STOP
-FE54;NS;SMALL SEMICOLON
-FE55;NS;SMALL COLON
-FE56;EX;SMALL QUESTION MARK
-FE57;EX;SMALL EXCLAMATION MARK
-FE58;ID;SMALL EM DASH
-FE59;OP;SMALL LEFT PARENTHESIS
-FE5A;CL;SMALL RIGHT PARENTHESIS
-FE5B;OP;SMALL LEFT CURLY BRACKET
-FE5C;CL;SMALL RIGHT CURLY BRACKET
-FE5D;OP;SMALL LEFT TORTOISE SHELL BRACKET
-FE5E;CL;SMALL RIGHT TORTOISE SHELL BRACKET
-FE5F;ID;SMALL NUMBER SIGN
-FE60;ID;SMALL AMPERSAND
-FE61;ID;SMALL ASTERISK
-FE62;ID;SMALL PLUS SIGN
-FE63;ID;SMALL HYPHEN-MINUS
-FE64;ID;SMALL LESS-THAN SIGN
-FE65;ID;SMALL GREATER-THAN SIGN
-FE66;ID;SMALL EQUALS SIGN
-FE68;ID;SMALL REVERSE SOLIDUS
-FE69;PR;SMALL DOLLAR SIGN
-FE6A;PO;SMALL PERCENT SIGN
-FE6B;AL;SMALL COMMERCIAL AT
-FE70;AL;ARABIC FATHATAN ISOLATED FORM
-FE71;AL;ARABIC TATWEEL WITH FATHATAN ABOVE
-FE72;AL;ARABIC DAMMATAN ISOLATED FORM
-FE74;AL;ARABIC KASRATAN ISOLATED FORM
-FE76;AL;ARABIC FATHA ISOLATED FORM
-FE77;AL;ARABIC FATHA MEDIAL FORM
-FE78;AL;ARABIC DAMMA ISOLATED FORM
-FE79;AL;ARABIC DAMMA MEDIAL FORM
-FE7A;AL;ARABIC KASRA ISOLATED FORM
-FE7B;AL;ARABIC KASRA MEDIAL FORM
-FE7C;AL;ARABIC SHADDA ISOLATED FORM
-FE7D;AL;ARABIC SHADDA MEDIAL FORM
-FE7E;AL;ARABIC SUKUN ISOLATED FORM
-FE7F;AL;ARABIC SUKUN MEDIAL FORM
-FE80;AL;ARABIC LETTER HAMZA ISOLATED FORM
-FE81;AL;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
-FE82;AL;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
-FE83;AL;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
-FE84;AL;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
-FE85;AL;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
-FE86;AL;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
-FE87;AL;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
-FE88;AL;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
-FE89;AL;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
-FE8A;AL;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
-FE8B;AL;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
-FE8C;AL;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
-FE8D;AL;ARABIC LETTER ALEF ISOLATED FORM
-FE8E;AL;ARABIC LETTER ALEF FINAL FORM
-FE8F;AL;ARABIC LETTER BEH ISOLATED FORM
-FE90;AL;ARABIC LETTER BEH FINAL FORM
-FE91;AL;ARABIC LETTER BEH INITIAL FORM
-FE92;AL;ARABIC LETTER BEH MEDIAL FORM
-FE93;AL;ARABIC LETTER TEH MARBUTA ISOLATED FORM
-FE94;AL;ARABIC LETTER TEH MARBUTA FINAL FORM
-FE95;AL;ARABIC LETTER TEH ISOLATED FORM
-FE96;AL;ARABIC LETTER TEH FINAL FORM
-FE97;AL;ARABIC LETTER TEH INITIAL FORM
-FE98;AL;ARABIC LETTER TEH MEDIAL FORM
-FE99;AL;ARABIC LETTER THEH ISOLATED FORM
-FE9A;AL;ARABIC LETTER THEH FINAL FORM
-FE9B;AL;ARABIC LETTER THEH INITIAL FORM
-FE9C;AL;ARABIC LETTER THEH MEDIAL FORM
-FE9D;AL;ARABIC LETTER JEEM ISOLATED FORM
-FE9E;AL;ARABIC LETTER JEEM FINAL FORM
-FE9F;AL;ARABIC LETTER JEEM INITIAL FORM
-FEA0;AL;ARABIC LETTER JEEM MEDIAL FORM
-FEA1;AL;ARABIC LETTER HAH ISOLATED FORM
-FEA2;AL;ARABIC LETTER HAH FINAL FORM
-FEA3;AL;ARABIC LETTER HAH INITIAL FORM
-FEA4;AL;ARABIC LETTER HAH MEDIAL FORM
-FEA5;AL;ARABIC LETTER KHAH ISOLATED FORM
-FEA6;AL;ARABIC LETTER KHAH FINAL FORM
-FEA7;AL;ARABIC LETTER KHAH INITIAL FORM
-FEA8;AL;ARABIC LETTER KHAH MEDIAL FORM
-FEA9;AL;ARABIC LETTER DAL ISOLATED FORM
-FEAA;AL;ARABIC LETTER DAL FINAL FORM
-FEAB;AL;ARABIC LETTER THAL ISOLATED FORM
-FEAC;AL;ARABIC LETTER THAL FINAL FORM
-FEAD;AL;ARABIC LETTER REH ISOLATED FORM
-FEAE;AL;ARABIC LETTER REH FINAL FORM
-FEAF;AL;ARABIC LETTER ZAIN ISOLATED FORM
-FEB0;AL;ARABIC LETTER ZAIN FINAL FORM
-FEB1;AL;ARABIC LETTER SEEN ISOLATED FORM
-FEB2;AL;ARABIC LETTER SEEN FINAL FORM
-FEB3;AL;ARABIC LETTER SEEN INITIAL FORM
-FEB4;AL;ARABIC LETTER SEEN MEDIAL FORM
-FEB5;AL;ARABIC LETTER SHEEN ISOLATED FORM
-FEB6;AL;ARABIC LETTER SHEEN FINAL FORM
-FEB7;AL;ARABIC LETTER SHEEN INITIAL FORM
-FEB8;AL;ARABIC LETTER SHEEN MEDIAL FORM
-FEB9;AL;ARABIC LETTER SAD ISOLATED FORM
-FEBA;AL;ARABIC LETTER SAD FINAL FORM
-FEBB;AL;ARABIC LETTER SAD INITIAL FORM
-FEBC;AL;ARABIC LETTER SAD MEDIAL FORM
-FEBD;AL;ARABIC LETTER DAD ISOLATED FORM
-FEBE;AL;ARABIC LETTER DAD FINAL FORM
-FEBF;AL;ARABIC LETTER DAD INITIAL FORM
-FEC0;AL;ARABIC LETTER DAD MEDIAL FORM
-FEC1;AL;ARABIC LETTER TAH ISOLATED FORM
-FEC2;AL;ARABIC LETTER TAH FINAL FORM
-FEC3;AL;ARABIC LETTER TAH INITIAL FORM
-FEC4;AL;ARABIC LETTER TAH MEDIAL FORM
-FEC5;AL;ARABIC LETTER ZAH ISOLATED FORM
-FEC6;AL;ARABIC LETTER ZAH FINAL FORM
-FEC7;AL;ARABIC LETTER ZAH INITIAL FORM
-FEC8;AL;ARABIC LETTER ZAH MEDIAL FORM
-FEC9;AL;ARABIC LETTER AIN ISOLATED FORM
-FECA;AL;ARABIC LETTER AIN FINAL FORM
-FECB;AL;ARABIC LETTER AIN INITIAL FORM
-FECC;AL;ARABIC LETTER AIN MEDIAL FORM
-FECD;AL;ARABIC LETTER GHAIN ISOLATED FORM
-FECE;AL;ARABIC LETTER GHAIN FINAL FORM
-FECF;AL;ARABIC LETTER GHAIN INITIAL FORM
-FED0;AL;ARABIC LETTER GHAIN MEDIAL FORM
-FED1;AL;ARABIC LETTER FEH ISOLATED FORM
-FED2;AL;ARABIC LETTER FEH FINAL FORM
-FED3;AL;ARABIC LETTER FEH INITIAL FORM
-FED4;AL;ARABIC LETTER FEH MEDIAL FORM
-FED5;AL;ARABIC LETTER QAF ISOLATED FORM
-FED6;AL;ARABIC LETTER QAF FINAL FORM
-FED7;AL;ARABIC LETTER QAF INITIAL FORM
-FED8;AL;ARABIC LETTER QAF MEDIAL FORM
-FED9;AL;ARABIC LETTER KAF ISOLATED FORM
-FEDA;AL;ARABIC LETTER KAF FINAL FORM
-FEDB;AL;ARABIC LETTER KAF INITIAL FORM
-FEDC;AL;ARABIC LETTER KAF MEDIAL FORM
-FEDD;AL;ARABIC LETTER LAM ISOLATED FORM
-FEDE;AL;ARABIC LETTER LAM FINAL FORM
-FEDF;AL;ARABIC LETTER LAM INITIAL FORM
-FEE0;AL;ARABIC LETTER LAM MEDIAL FORM
-FEE1;AL;ARABIC LETTER MEEM ISOLATED FORM
-FEE2;AL;ARABIC LETTER MEEM FINAL FORM
-FEE3;AL;ARABIC LETTER MEEM INITIAL FORM
-FEE4;AL;ARABIC LETTER MEEM MEDIAL FORM
-FEE5;AL;ARABIC LETTER NOON ISOLATED FORM
-FEE6;AL;ARABIC LETTER NOON FINAL FORM
-FEE7;AL;ARABIC LETTER NOON INITIAL FORM
-FEE8;AL;ARABIC LETTER NOON MEDIAL FORM
-FEE9;AL;ARABIC LETTER HEH ISOLATED FORM
-FEEA;AL;ARABIC LETTER HEH FINAL FORM
-FEEB;AL;ARABIC LETTER HEH INITIAL FORM
-FEEC;AL;ARABIC LETTER HEH MEDIAL FORM
-FEED;AL;ARABIC LETTER WAW ISOLATED FORM
-FEEE;AL;ARABIC LETTER WAW FINAL FORM
-FEEF;AL;ARABIC LETTER ALEF MAKSURA ISOLATED FORM
-FEF0;AL;ARABIC LETTER ALEF MAKSURA FINAL FORM
-FEF1;AL;ARABIC LETTER YEH ISOLATED FORM
-FEF2;AL;ARABIC LETTER YEH FINAL FORM
-FEF3;AL;ARABIC LETTER YEH INITIAL FORM
-FEF4;AL;ARABIC LETTER YEH MEDIAL FORM
-FEF5;AL;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
-FEF6;AL;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
-FEF7;AL;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
-FEF8;AL;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
-FEF9;AL;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
-FEFA;AL;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
-FEFB;AL;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-FEFC;AL;ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-FEFF;GL;ZERO WIDTH NO-BREAK SPACE
-FF01;EX;FULLWIDTH EXCLAMATION MARK
-FF02;ID;FULLWIDTH QUOTATION MARK
-FF03;ID;FULLWIDTH NUMBER SIGN
-FF04;PR;FULLWIDTH DOLLAR SIGN
-FF05;PO;FULLWIDTH PERCENT SIGN
-FF06;ID;FULLWIDTH AMPERSAND
-FF07;ID;FULLWIDTH APOSTROPHE
-FF08;OP;FULLWIDTH LEFT PARENTHESIS
-FF09;CL;FULLWIDTH RIGHT PARENTHESIS
-FF0A;ID;FULLWIDTH ASTERISK
-FF0B;ID;FULLWIDTH PLUS SIGN
-FF0C;CL;FULLWIDTH COMMA
-FF0D;ID;FULLWIDTH HYPHEN-MINUS
-FF0E;CL;FULLWIDTH FULL STOP
-FF0F;ID;FULLWIDTH SOLIDUS
-FF10;ID;FULLWIDTH DIGIT ZERO
-FF11;ID;FULLWIDTH DIGIT ONE
-FF12;ID;FULLWIDTH DIGIT TWO
-FF13;ID;FULLWIDTH DIGIT THREE
-FF14;ID;FULLWIDTH DIGIT FOUR
-FF15;ID;FULLWIDTH DIGIT FIVE
-FF16;ID;FULLWIDTH DIGIT SIX
-FF17;ID;FULLWIDTH DIGIT SEVEN
-FF18;ID;FULLWIDTH DIGIT EIGHT
-FF19;ID;FULLWIDTH DIGIT NINE
-FF1A;NS;FULLWIDTH COLON
-FF1B;NS;FULLWIDTH SEMICOLON
-FF1C;ID;FULLWIDTH LESS-THAN SIGN
-FF1D;ID;FULLWIDTH EQUALS SIGN
-FF1E;ID;FULLWIDTH GREATER-THAN SIGN
-FF1F;EX;FULLWIDTH QUESTION MARK
-FF20;ID;FULLWIDTH COMMERCIAL AT
-FF21;ID;FULLWIDTH LATIN CAPITAL LETTER A
-FF22;ID;FULLWIDTH LATIN CAPITAL LETTER B
-FF23;ID;FULLWIDTH LATIN CAPITAL LETTER C
-FF24;ID;FULLWIDTH LATIN CAPITAL LETTER D
-FF25;ID;FULLWIDTH LATIN CAPITAL LETTER E
-FF26;ID;FULLWIDTH LATIN CAPITAL LETTER F
-FF27;ID;FULLWIDTH LATIN CAPITAL LETTER G
-FF28;ID;FULLWIDTH LATIN CAPITAL LETTER H
-FF29;ID;FULLWIDTH LATIN CAPITAL LETTER I
-FF2A;ID;FULLWIDTH LATIN CAPITAL LETTER J
-FF2B;ID;FULLWIDTH LATIN CAPITAL LETTER K
-FF2C;ID;FULLWIDTH LATIN CAPITAL LETTER L
-FF2D;ID;FULLWIDTH LATIN CAPITAL LETTER M
-FF2E;ID;FULLWIDTH LATIN CAPITAL LETTER N
-FF2F;ID;FULLWIDTH LATIN CAPITAL LETTER O
-FF30;ID;FULLWIDTH LATIN CAPITAL LETTER P
-FF31;ID;FULLWIDTH LATIN CAPITAL LETTER Q
-FF32;ID;FULLWIDTH LATIN CAPITAL LETTER R
-FF33;ID;FULLWIDTH LATIN CAPITAL LETTER S
-FF34;ID;FULLWIDTH LATIN CAPITAL LETTER T
-FF35;ID;FULLWIDTH LATIN CAPITAL LETTER U
-FF36;ID;FULLWIDTH LATIN CAPITAL LETTER V
-FF37;ID;FULLWIDTH LATIN CAPITAL LETTER W
-FF38;ID;FULLWIDTH LATIN CAPITAL LETTER X
-FF39;ID;FULLWIDTH LATIN CAPITAL LETTER Y
-FF3A;ID;FULLWIDTH LATIN CAPITAL LETTER Z
-FF3B;OP;FULLWIDTH LEFT SQUARE BRACKET
-FF3C;ID;FULLWIDTH REVERSE SOLIDUS
-FF3D;CL;FULLWIDTH RIGHT SQUARE BRACKET
-FF3E;ID;FULLWIDTH CIRCUMFLEX ACCENT
-FF3F;ID;FULLWIDTH LOW LINE
-FF40;ID;FULLWIDTH GRAVE ACCENT
-FF41;ID;FULLWIDTH LATIN SMALL LETTER A
-FF42;ID;FULLWIDTH LATIN SMALL LETTER B
-FF43;ID;FULLWIDTH LATIN SMALL LETTER C
-FF44;ID;FULLWIDTH LATIN SMALL LETTER D
-FF45;ID;FULLWIDTH LATIN SMALL LETTER E
-FF46;ID;FULLWIDTH LATIN SMALL LETTER F
-FF47;ID;FULLWIDTH LATIN SMALL LETTER G
-FF48;ID;FULLWIDTH LATIN SMALL LETTER H
-FF49;ID;FULLWIDTH LATIN SMALL LETTER I
-FF4A;ID;FULLWIDTH LATIN SMALL LETTER J
-FF4B;ID;FULLWIDTH LATIN SMALL LETTER K
-FF4C;ID;FULLWIDTH LATIN SMALL LETTER L
-FF4D;ID;FULLWIDTH LATIN SMALL LETTER M
-FF4E;ID;FULLWIDTH LATIN SMALL LETTER N
-FF4F;ID;FULLWIDTH LATIN SMALL LETTER O
-FF50;ID;FULLWIDTH LATIN SMALL LETTER P
-FF51;ID;FULLWIDTH LATIN SMALL LETTER Q
-FF52;ID;FULLWIDTH LATIN SMALL LETTER R
-FF53;ID;FULLWIDTH LATIN SMALL LETTER S
-FF54;ID;FULLWIDTH LATIN SMALL LETTER T
-FF55;ID;FULLWIDTH LATIN SMALL LETTER U
-FF56;ID;FULLWIDTH LATIN SMALL LETTER V
-FF57;ID;FULLWIDTH LATIN SMALL LETTER W
-FF58;ID;FULLWIDTH LATIN SMALL LETTER X
-FF59;ID;FULLWIDTH LATIN SMALL LETTER Y
-FF5A;ID;FULLWIDTH LATIN SMALL LETTER Z
-FF5B;OP;FULLWIDTH LEFT CURLY BRACKET
-FF5C;ID;FULLWIDTH VERTICAL LINE
-FF5D;CL;FULLWIDTH RIGHT CURLY BRACKET
-FF5E;ID;FULLWIDTH TILDE
-FF61;CL;HALFWIDTH IDEOGRAPHIC FULL STOP
-FF62;OP;HALFWIDTH LEFT CORNER BRACKET
-FF63;CL;HALFWIDTH RIGHT CORNER BRACKET
-FF64;CL;HALFWIDTH IDEOGRAPHIC COMMA
-FF65;NS;HALFWIDTH KATAKANA MIDDLE DOT
-FF66;AL;HALFWIDTH KATAKANA LETTER WO
-FF67;NS;HALFWIDTH KATAKANA LETTER SMALL A
-FF68;NS;HALFWIDTH KATAKANA LETTER SMALL I
-FF69;NS;HALFWIDTH KATAKANA LETTER SMALL U
-FF6A;NS;HALFWIDTH KATAKANA LETTER SMALL E
-FF6B;NS;HALFWIDTH KATAKANA LETTER SMALL O
-FF6C;NS;HALFWIDTH KATAKANA LETTER SMALL YA
-FF6D;NS;HALFWIDTH KATAKANA LETTER SMALL YU
-FF6E;NS;HALFWIDTH KATAKANA LETTER SMALL YO
-FF6F;NS;HALFWIDTH KATAKANA LETTER SMALL TU
-FF70;NS;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-FF71;AL;HALFWIDTH KATAKANA LETTER A
-FF72;AL;HALFWIDTH KATAKANA LETTER I
-FF73;AL;HALFWIDTH KATAKANA LETTER U
-FF74;AL;HALFWIDTH KATAKANA LETTER E
-FF75;AL;HALFWIDTH KATAKANA LETTER O
-FF76;AL;HALFWIDTH KATAKANA LETTER KA
-FF77;AL;HALFWIDTH KATAKANA LETTER KI
-FF78;AL;HALFWIDTH KATAKANA LETTER KU
-FF79;AL;HALFWIDTH KATAKANA LETTER KE
-FF7A;AL;HALFWIDTH KATAKANA LETTER KO
-FF7B;AL;HALFWIDTH KATAKANA LETTER SA
-FF7C;AL;HALFWIDTH KATAKANA LETTER SI
-FF7D;AL;HALFWIDTH KATAKANA LETTER SU
-FF7E;AL;HALFWIDTH KATAKANA LETTER SE
-FF7F;AL;HALFWIDTH KATAKANA LETTER SO
-FF80;AL;HALFWIDTH KATAKANA LETTER TA
-FF81;AL;HALFWIDTH KATAKANA LETTER TI
-FF82;AL;HALFWIDTH KATAKANA LETTER TU
-FF83;AL;HALFWIDTH KATAKANA LETTER TE
-FF84;AL;HALFWIDTH KATAKANA LETTER TO
-FF85;AL;HALFWIDTH KATAKANA LETTER NA
-FF86;AL;HALFWIDTH KATAKANA LETTER NI
-FF87;AL;HALFWIDTH KATAKANA LETTER NU
-FF88;AL;HALFWIDTH KATAKANA LETTER NE
-FF89;AL;HALFWIDTH KATAKANA LETTER NO
-FF8A;AL;HALFWIDTH KATAKANA LETTER HA
-FF8B;AL;HALFWIDTH KATAKANA LETTER HI
-FF8C;AL;HALFWIDTH KATAKANA LETTER HU
-FF8D;AL;HALFWIDTH KATAKANA LETTER HE
-FF8E;AL;HALFWIDTH KATAKANA LETTER HO
-FF8F;AL;HALFWIDTH KATAKANA LETTER MA
-FF90;AL;HALFWIDTH KATAKANA LETTER MI
-FF91;AL;HALFWIDTH KATAKANA LETTER MU
-FF92;AL;HALFWIDTH KATAKANA LETTER ME
-FF93;AL;HALFWIDTH KATAKANA LETTER MO
-FF94;AL;HALFWIDTH KATAKANA LETTER YA
-FF95;AL;HALFWIDTH KATAKANA LETTER YU
-FF96;AL;HALFWIDTH KATAKANA LETTER YO
-FF97;AL;HALFWIDTH KATAKANA LETTER RA
-FF98;AL;HALFWIDTH KATAKANA LETTER RI
-FF99;AL;HALFWIDTH KATAKANA LETTER RU
-FF9A;AL;HALFWIDTH KATAKANA LETTER RE
-FF9B;AL;HALFWIDTH KATAKANA LETTER RO
-FF9C;AL;HALFWIDTH KATAKANA LETTER WA
-FF9D;AL;HALFWIDTH KATAKANA LETTER N
-FF9E;NS;HALFWIDTH KATAKANA VOICED SOUND MARK
-FF9F;NS;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-FFA0;AL;HALFWIDTH HANGUL FILLER
-FFA1;AL;HALFWIDTH HANGUL LETTER KIYEOK
-FFA2;AL;HALFWIDTH HANGUL LETTER SSANGKIYEOK
-FFA3;AL;HALFWIDTH HANGUL LETTER KIYEOK-SIOS
-FFA4;AL;HALFWIDTH HANGUL LETTER NIEUN
-FFA5;AL;HALFWIDTH HANGUL LETTER NIEUN-CIEUC
-FFA6;AL;HALFWIDTH HANGUL LETTER NIEUN-HIEUH
-FFA7;AL;HALFWIDTH HANGUL LETTER TIKEUT
-FFA8;AL;HALFWIDTH HANGUL LETTER SSANGTIKEUT
-FFA9;AL;HALFWIDTH HANGUL LETTER RIEUL
-FFAA;AL;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
-FFAB;AL;HALFWIDTH HANGUL LETTER RIEUL-MIEUM
-FFAC;AL;HALFWIDTH HANGUL LETTER RIEUL-PIEUP
-FFAD;AL;HALFWIDTH HANGUL LETTER RIEUL-SIOS
-FFAE;AL;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
-FFAF;AL;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
-FFB0;AL;HALFWIDTH HANGUL LETTER RIEUL-HIEUH
-FFB1;AL;HALFWIDTH HANGUL LETTER MIEUM
-FFB2;AL;HALFWIDTH HANGUL LETTER PIEUP
-FFB3;AL;HALFWIDTH HANGUL LETTER SSANGPIEUP
-FFB4;AL;HALFWIDTH HANGUL LETTER PIEUP-SIOS
-FFB5;AL;HALFWIDTH HANGUL LETTER SIOS
-FFB6;AL;HALFWIDTH HANGUL LETTER SSANGSIOS
-FFB7;AL;HALFWIDTH HANGUL LETTER IEUNG
-FFB8;AL;HALFWIDTH HANGUL LETTER CIEUC
-FFB9;AL;HALFWIDTH HANGUL LETTER SSANGCIEUC
-FFBA;AL;HALFWIDTH HANGUL LETTER CHIEUCH
-FFBB;AL;HALFWIDTH HANGUL LETTER KHIEUKH
-FFBC;AL;HALFWIDTH HANGUL LETTER THIEUTH
-FFBD;AL;HALFWIDTH HANGUL LETTER PHIEUPH
-FFBE;AL;HALFWIDTH HANGUL LETTER HIEUH
-FFC2;AL;HALFWIDTH HANGUL LETTER A
-FFC3;AL;HALFWIDTH HANGUL LETTER AE
-FFC4;AL;HALFWIDTH HANGUL LETTER YA
-FFC5;AL;HALFWIDTH HANGUL LETTER YAE
-FFC6;AL;HALFWIDTH HANGUL LETTER EO
-FFC7;AL;HALFWIDTH HANGUL LETTER E
-FFCA;AL;HALFWIDTH HANGUL LETTER YEO
-FFCB;AL;HALFWIDTH HANGUL LETTER YE
-FFCC;AL;HALFWIDTH HANGUL LETTER O
-FFCD;AL;HALFWIDTH HANGUL LETTER WA
-FFCE;AL;HALFWIDTH HANGUL LETTER WAE
-FFCF;AL;HALFWIDTH HANGUL LETTER OE
-FFD2;AL;HALFWIDTH HANGUL LETTER YO
-FFD3;AL;HALFWIDTH HANGUL LETTER U
-FFD4;AL;HALFWIDTH HANGUL LETTER WEO
-FFD5;AL;HALFWIDTH HANGUL LETTER WE
-FFD6;AL;HALFWIDTH HANGUL LETTER WI
-FFD7;AL;HALFWIDTH HANGUL LETTER YU
-FFDA;AL;HALFWIDTH HANGUL LETTER EU
-FFDB;AL;HALFWIDTH HANGUL LETTER YI
-FFDC;AL;HALFWIDTH HANGUL LETTER I
-FFE0;PO;FULLWIDTH CENT SIGN
-FFE1;PR;FULLWIDTH POUND SIGN
-FFE2;ID;FULLWIDTH NOT SIGN
-FFE3;ID;FULLWIDTH MACRON
-FFE4;ID;FULLWIDTH BROKEN BAR
-FFE5;PR;FULLWIDTH YEN SIGN
-FFE6;PR;FULLWIDTH WON SIGN
-FFE8;AL;HALFWIDTH FORMS LIGHT VERTICAL
-FFE9;AL;HALFWIDTH LEFTWARDS ARROW
-FFEA;AL;HALFWIDTH UPWARDS ARROW
-FFEB;AL;HALFWIDTH RIGHTWARDS ARROW
-FFEC;AL;HALFWIDTH DOWNWARDS ARROW
-FFED;AL;HALFWIDTH BLACK SQUARE
-FFEE;AL;HALFWIDTH WHITE CIRCLE
-FFF9;CM;INTERLINEAR ANNOTATION ANCHOR
-FFFA;CM;INTERLINEAR ANNOTATION SEPARATOR
-FFFB;CM;INTERLINEAR ANNOTATION TERMINATOR
-FFFC;CB;OBJECT REPLACEMENT CHARACTER
-FFFD;AI;REPLACEMENT CHARACTER
diff --git a/contrib/perl5/lib/unicode/Makefile b/contrib/perl5/lib/unicode/Makefile
deleted file mode 100644
index af5e77b..0000000
--- a/contrib/perl5/lib/unicode/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-all:
- ../../miniperl -I../../lib ./mktables.PL
-
-clean:
- rm -f *.pl */*.pl
diff --git a/contrib/perl5/lib/unicode/Name.pl b/contrib/perl5/lib/unicode/Name.pl
deleted file mode 100644
index f5c4c56..0000000
--- a/contrib/perl5/lib/unicode/Name.pl
+++ /dev/null
@@ -1,10554 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0000 001f <control>
-0020 SPACE
-0021 EXCLAMATION MARK
-0022 QUOTATION MARK
-0023 NUMBER SIGN
-0024 DOLLAR SIGN
-0025 PERCENT SIGN
-0026 AMPERSAND
-0027 APOSTROPHE
-0028 LEFT PARENTHESIS
-0029 RIGHT PARENTHESIS
-002a ASTERISK
-002b PLUS SIGN
-002c COMMA
-002d HYPHEN-MINUS
-002e FULL STOP
-002f SOLIDUS
-0030 DIGIT ZERO
-0031 DIGIT ONE
-0032 DIGIT TWO
-0033 DIGIT THREE
-0034 DIGIT FOUR
-0035 DIGIT FIVE
-0036 DIGIT SIX
-0037 DIGIT SEVEN
-0038 DIGIT EIGHT
-0039 DIGIT NINE
-003a COLON
-003b SEMICOLON
-003c LESS-THAN SIGN
-003d EQUALS SIGN
-003e GREATER-THAN SIGN
-003f QUESTION MARK
-0040 COMMERCIAL AT
-0041 LATIN CAPITAL LETTER A
-0042 LATIN CAPITAL LETTER B
-0043 LATIN CAPITAL LETTER C
-0044 LATIN CAPITAL LETTER D
-0045 LATIN CAPITAL LETTER E
-0046 LATIN CAPITAL LETTER F
-0047 LATIN CAPITAL LETTER G
-0048 LATIN CAPITAL LETTER H
-0049 LATIN CAPITAL LETTER I
-004a LATIN CAPITAL LETTER J
-004b LATIN CAPITAL LETTER K
-004c LATIN CAPITAL LETTER L
-004d LATIN CAPITAL LETTER M
-004e LATIN CAPITAL LETTER N
-004f LATIN CAPITAL LETTER O
-0050 LATIN CAPITAL LETTER P
-0051 LATIN CAPITAL LETTER Q
-0052 LATIN CAPITAL LETTER R
-0053 LATIN CAPITAL LETTER S
-0054 LATIN CAPITAL LETTER T
-0055 LATIN CAPITAL LETTER U
-0056 LATIN CAPITAL LETTER V
-0057 LATIN CAPITAL LETTER W
-0058 LATIN CAPITAL LETTER X
-0059 LATIN CAPITAL LETTER Y
-005a LATIN CAPITAL LETTER Z
-005b LEFT SQUARE BRACKET
-005c REVERSE SOLIDUS
-005d RIGHT SQUARE BRACKET
-005e CIRCUMFLEX ACCENT
-005f LOW LINE
-0060 GRAVE ACCENT
-0061 LATIN SMALL LETTER A
-0062 LATIN SMALL LETTER B
-0063 LATIN SMALL LETTER C
-0064 LATIN SMALL LETTER D
-0065 LATIN SMALL LETTER E
-0066 LATIN SMALL LETTER F
-0067 LATIN SMALL LETTER G
-0068 LATIN SMALL LETTER H
-0069 LATIN SMALL LETTER I
-006a LATIN SMALL LETTER J
-006b LATIN SMALL LETTER K
-006c LATIN SMALL LETTER L
-006d LATIN SMALL LETTER M
-006e LATIN SMALL LETTER N
-006f LATIN SMALL LETTER O
-0070 LATIN SMALL LETTER P
-0071 LATIN SMALL LETTER Q
-0072 LATIN SMALL LETTER R
-0073 LATIN SMALL LETTER S
-0074 LATIN SMALL LETTER T
-0075 LATIN SMALL LETTER U
-0076 LATIN SMALL LETTER V
-0077 LATIN SMALL LETTER W
-0078 LATIN SMALL LETTER X
-0079 LATIN SMALL LETTER Y
-007a LATIN SMALL LETTER Z
-007b LEFT CURLY BRACKET
-007c VERTICAL LINE
-007d RIGHT CURLY BRACKET
-007e TILDE
-007f 009f <control>
-00a0 NO-BREAK SPACE
-00a1 INVERTED EXCLAMATION MARK
-00a2 CENT SIGN
-00a3 POUND SIGN
-00a4 CURRENCY SIGN
-00a5 YEN SIGN
-00a6 BROKEN BAR
-00a7 SECTION SIGN
-00a8 DIAERESIS
-00a9 COPYRIGHT SIGN
-00aa FEMININE ORDINAL INDICATOR
-00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-00ac NOT SIGN
-00ad SOFT HYPHEN
-00ae REGISTERED SIGN
-00af MACRON
-00b0 DEGREE SIGN
-00b1 PLUS-MINUS SIGN
-00b2 SUPERSCRIPT TWO
-00b3 SUPERSCRIPT THREE
-00b4 ACUTE ACCENT
-00b5 MICRO SIGN
-00b6 PILCROW SIGN
-00b7 MIDDLE DOT
-00b8 CEDILLA
-00b9 SUPERSCRIPT ONE
-00ba MASCULINE ORDINAL INDICATOR
-00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-00bc VULGAR FRACTION ONE QUARTER
-00bd VULGAR FRACTION ONE HALF
-00be VULGAR FRACTION THREE QUARTERS
-00bf INVERTED QUESTION MARK
-00c0 LATIN CAPITAL LETTER A WITH GRAVE
-00c1 LATIN CAPITAL LETTER A WITH ACUTE
-00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00c3 LATIN CAPITAL LETTER A WITH TILDE
-00c4 LATIN CAPITAL LETTER A WITH DIAERESIS
-00c5 LATIN CAPITAL LETTER A WITH RING ABOVE
-00c6 LATIN CAPITAL LETTER AE
-00c7 LATIN CAPITAL LETTER C WITH CEDILLA
-00c8 LATIN CAPITAL LETTER E WITH GRAVE
-00c9 LATIN CAPITAL LETTER E WITH ACUTE
-00ca LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00cb LATIN CAPITAL LETTER E WITH DIAERESIS
-00cc LATIN CAPITAL LETTER I WITH GRAVE
-00cd LATIN CAPITAL LETTER I WITH ACUTE
-00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00cf LATIN CAPITAL LETTER I WITH DIAERESIS
-00d0 LATIN CAPITAL LETTER ETH
-00d1 LATIN CAPITAL LETTER N WITH TILDE
-00d2 LATIN CAPITAL LETTER O WITH GRAVE
-00d3 LATIN CAPITAL LETTER O WITH ACUTE
-00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00d5 LATIN CAPITAL LETTER O WITH TILDE
-00d6 LATIN CAPITAL LETTER O WITH DIAERESIS
-00d7 MULTIPLICATION SIGN
-00d8 LATIN CAPITAL LETTER O WITH STROKE
-00d9 LATIN CAPITAL LETTER U WITH GRAVE
-00da LATIN CAPITAL LETTER U WITH ACUTE
-00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00dc LATIN CAPITAL LETTER U WITH DIAERESIS
-00dd LATIN CAPITAL LETTER Y WITH ACUTE
-00de LATIN CAPITAL LETTER THORN
-00df LATIN SMALL LETTER SHARP S
-00e0 LATIN SMALL LETTER A WITH GRAVE
-00e1 LATIN SMALL LETTER A WITH ACUTE
-00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX
-00e3 LATIN SMALL LETTER A WITH TILDE
-00e4 LATIN SMALL LETTER A WITH DIAERESIS
-00e5 LATIN SMALL LETTER A WITH RING ABOVE
-00e6 LATIN SMALL LETTER AE
-00e7 LATIN SMALL LETTER C WITH CEDILLA
-00e8 LATIN SMALL LETTER E WITH GRAVE
-00e9 LATIN SMALL LETTER E WITH ACUTE
-00ea LATIN SMALL LETTER E WITH CIRCUMFLEX
-00eb LATIN SMALL LETTER E WITH DIAERESIS
-00ec LATIN SMALL LETTER I WITH GRAVE
-00ed LATIN SMALL LETTER I WITH ACUTE
-00ee LATIN SMALL LETTER I WITH CIRCUMFLEX
-00ef LATIN SMALL LETTER I WITH DIAERESIS
-00f0 LATIN SMALL LETTER ETH
-00f1 LATIN SMALL LETTER N WITH TILDE
-00f2 LATIN SMALL LETTER O WITH GRAVE
-00f3 LATIN SMALL LETTER O WITH ACUTE
-00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX
-00f5 LATIN SMALL LETTER O WITH TILDE
-00f6 LATIN SMALL LETTER O WITH DIAERESIS
-00f7 DIVISION SIGN
-00f8 LATIN SMALL LETTER O WITH STROKE
-00f9 LATIN SMALL LETTER U WITH GRAVE
-00fa LATIN SMALL LETTER U WITH ACUTE
-00fb LATIN SMALL LETTER U WITH CIRCUMFLEX
-00fc LATIN SMALL LETTER U WITH DIAERESIS
-00fd LATIN SMALL LETTER Y WITH ACUTE
-00fe LATIN SMALL LETTER THORN
-00ff LATIN SMALL LETTER Y WITH DIAERESIS
-0100 LATIN CAPITAL LETTER A WITH MACRON
-0101 LATIN SMALL LETTER A WITH MACRON
-0102 LATIN CAPITAL LETTER A WITH BREVE
-0103 LATIN SMALL LETTER A WITH BREVE
-0104 LATIN CAPITAL LETTER A WITH OGONEK
-0105 LATIN SMALL LETTER A WITH OGONEK
-0106 LATIN CAPITAL LETTER C WITH ACUTE
-0107 LATIN SMALL LETTER C WITH ACUTE
-0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
-010a LATIN CAPITAL LETTER C WITH DOT ABOVE
-010b LATIN SMALL LETTER C WITH DOT ABOVE
-010c LATIN CAPITAL LETTER C WITH CARON
-010d LATIN SMALL LETTER C WITH CARON
-010e LATIN CAPITAL LETTER D WITH CARON
-010f LATIN SMALL LETTER D WITH CARON
-0110 LATIN CAPITAL LETTER D WITH STROKE
-0111 LATIN SMALL LETTER D WITH STROKE
-0112 LATIN CAPITAL LETTER E WITH MACRON
-0113 LATIN SMALL LETTER E WITH MACRON
-0114 LATIN CAPITAL LETTER E WITH BREVE
-0115 LATIN SMALL LETTER E WITH BREVE
-0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
-0117 LATIN SMALL LETTER E WITH DOT ABOVE
-0118 LATIN CAPITAL LETTER E WITH OGONEK
-0119 LATIN SMALL LETTER E WITH OGONEK
-011a LATIN CAPITAL LETTER E WITH CARON
-011b LATIN SMALL LETTER E WITH CARON
-011c LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-011d LATIN SMALL LETTER G WITH CIRCUMFLEX
-011e LATIN CAPITAL LETTER G WITH BREVE
-011f LATIN SMALL LETTER G WITH BREVE
-0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
-0121 LATIN SMALL LETTER G WITH DOT ABOVE
-0122 LATIN CAPITAL LETTER G WITH CEDILLA
-0123 LATIN SMALL LETTER G WITH CEDILLA
-0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
-0126 LATIN CAPITAL LETTER H WITH STROKE
-0127 LATIN SMALL LETTER H WITH STROKE
-0128 LATIN CAPITAL LETTER I WITH TILDE
-0129 LATIN SMALL LETTER I WITH TILDE
-012a LATIN CAPITAL LETTER I WITH MACRON
-012b LATIN SMALL LETTER I WITH MACRON
-012c LATIN CAPITAL LETTER I WITH BREVE
-012d LATIN SMALL LETTER I WITH BREVE
-012e LATIN CAPITAL LETTER I WITH OGONEK
-012f LATIN SMALL LETTER I WITH OGONEK
-0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
-0131 LATIN SMALL LETTER DOTLESS I
-0132 LATIN CAPITAL LIGATURE IJ
-0133 LATIN SMALL LIGATURE IJ
-0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
-0136 LATIN CAPITAL LETTER K WITH CEDILLA
-0137 LATIN SMALL LETTER K WITH CEDILLA
-0138 LATIN SMALL LETTER KRA
-0139 LATIN CAPITAL LETTER L WITH ACUTE
-013a LATIN SMALL LETTER L WITH ACUTE
-013b LATIN CAPITAL LETTER L WITH CEDILLA
-013c LATIN SMALL LETTER L WITH CEDILLA
-013d LATIN CAPITAL LETTER L WITH CARON
-013e LATIN SMALL LETTER L WITH CARON
-013f LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0140 LATIN SMALL LETTER L WITH MIDDLE DOT
-0141 LATIN CAPITAL LETTER L WITH STROKE
-0142 LATIN SMALL LETTER L WITH STROKE
-0143 LATIN CAPITAL LETTER N WITH ACUTE
-0144 LATIN SMALL LETTER N WITH ACUTE
-0145 LATIN CAPITAL LETTER N WITH CEDILLA
-0146 LATIN SMALL LETTER N WITH CEDILLA
-0147 LATIN CAPITAL LETTER N WITH CARON
-0148 LATIN SMALL LETTER N WITH CARON
-0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-014a LATIN CAPITAL LETTER ENG
-014b LATIN SMALL LETTER ENG
-014c LATIN CAPITAL LETTER O WITH MACRON
-014d LATIN SMALL LETTER O WITH MACRON
-014e LATIN CAPITAL LETTER O WITH BREVE
-014f LATIN SMALL LETTER O WITH BREVE
-0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
-0152 LATIN CAPITAL LIGATURE OE
-0153 LATIN SMALL LIGATURE OE
-0154 LATIN CAPITAL LETTER R WITH ACUTE
-0155 LATIN SMALL LETTER R WITH ACUTE
-0156 LATIN CAPITAL LETTER R WITH CEDILLA
-0157 LATIN SMALL LETTER R WITH CEDILLA
-0158 LATIN CAPITAL LETTER R WITH CARON
-0159 LATIN SMALL LETTER R WITH CARON
-015a LATIN CAPITAL LETTER S WITH ACUTE
-015b LATIN SMALL LETTER S WITH ACUTE
-015c LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-015d LATIN SMALL LETTER S WITH CIRCUMFLEX
-015e LATIN CAPITAL LETTER S WITH CEDILLA
-015f LATIN SMALL LETTER S WITH CEDILLA
-0160 LATIN CAPITAL LETTER S WITH CARON
-0161 LATIN SMALL LETTER S WITH CARON
-0162 LATIN CAPITAL LETTER T WITH CEDILLA
-0163 LATIN SMALL LETTER T WITH CEDILLA
-0164 LATIN CAPITAL LETTER T WITH CARON
-0165 LATIN SMALL LETTER T WITH CARON
-0166 LATIN CAPITAL LETTER T WITH STROKE
-0167 LATIN SMALL LETTER T WITH STROKE
-0168 LATIN CAPITAL LETTER U WITH TILDE
-0169 LATIN SMALL LETTER U WITH TILDE
-016a LATIN CAPITAL LETTER U WITH MACRON
-016b LATIN SMALL LETTER U WITH MACRON
-016c LATIN CAPITAL LETTER U WITH BREVE
-016d LATIN SMALL LETTER U WITH BREVE
-016e LATIN CAPITAL LETTER U WITH RING ABOVE
-016f LATIN SMALL LETTER U WITH RING ABOVE
-0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
-0172 LATIN CAPITAL LETTER U WITH OGONEK
-0173 LATIN SMALL LETTER U WITH OGONEK
-0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
-0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
-0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
-0179 LATIN CAPITAL LETTER Z WITH ACUTE
-017a LATIN SMALL LETTER Z WITH ACUTE
-017b LATIN CAPITAL LETTER Z WITH DOT ABOVE
-017c LATIN SMALL LETTER Z WITH DOT ABOVE
-017d LATIN CAPITAL LETTER Z WITH CARON
-017e LATIN SMALL LETTER Z WITH CARON
-017f LATIN SMALL LETTER LONG S
-0180 LATIN SMALL LETTER B WITH STROKE
-0181 LATIN CAPITAL LETTER B WITH HOOK
-0182 LATIN CAPITAL LETTER B WITH TOPBAR
-0183 LATIN SMALL LETTER B WITH TOPBAR
-0184 LATIN CAPITAL LETTER TONE SIX
-0185 LATIN SMALL LETTER TONE SIX
-0186 LATIN CAPITAL LETTER OPEN O
-0187 LATIN CAPITAL LETTER C WITH HOOK
-0188 LATIN SMALL LETTER C WITH HOOK
-0189 LATIN CAPITAL LETTER AFRICAN D
-018a LATIN CAPITAL LETTER D WITH HOOK
-018b LATIN CAPITAL LETTER D WITH TOPBAR
-018c LATIN SMALL LETTER D WITH TOPBAR
-018d LATIN SMALL LETTER TURNED DELTA
-018e LATIN CAPITAL LETTER REVERSED E
-018f LATIN CAPITAL LETTER SCHWA
-0190 LATIN CAPITAL LETTER OPEN E
-0191 LATIN CAPITAL LETTER F WITH HOOK
-0192 LATIN SMALL LETTER F WITH HOOK
-0193 LATIN CAPITAL LETTER G WITH HOOK
-0194 LATIN CAPITAL LETTER GAMMA
-0195 LATIN SMALL LETTER HV
-0196 LATIN CAPITAL LETTER IOTA
-0197 LATIN CAPITAL LETTER I WITH STROKE
-0198 LATIN CAPITAL LETTER K WITH HOOK
-0199 LATIN SMALL LETTER K WITH HOOK
-019a LATIN SMALL LETTER L WITH BAR
-019b LATIN SMALL LETTER LAMBDA WITH STROKE
-019c LATIN CAPITAL LETTER TURNED M
-019d LATIN CAPITAL LETTER N WITH LEFT HOOK
-019e LATIN SMALL LETTER N WITH LONG RIGHT LEG
-019f LATIN CAPITAL LETTER O WITH MIDDLE TILDE
-01a0 LATIN CAPITAL LETTER O WITH HORN
-01a1 LATIN SMALL LETTER O WITH HORN
-01a2 LATIN CAPITAL LETTER OI
-01a3 LATIN SMALL LETTER OI
-01a4 LATIN CAPITAL LETTER P WITH HOOK
-01a5 LATIN SMALL LETTER P WITH HOOK
-01a6 LATIN LETTER YR
-01a7 LATIN CAPITAL LETTER TONE TWO
-01a8 LATIN SMALL LETTER TONE TWO
-01a9 LATIN CAPITAL LETTER ESH
-01aa LATIN LETTER REVERSED ESH LOOP
-01ab LATIN SMALL LETTER T WITH PALATAL HOOK
-01ac LATIN CAPITAL LETTER T WITH HOOK
-01ad LATIN SMALL LETTER T WITH HOOK
-01ae LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
-01af LATIN CAPITAL LETTER U WITH HORN
-01b0 LATIN SMALL LETTER U WITH HORN
-01b1 LATIN CAPITAL LETTER UPSILON
-01b2 LATIN CAPITAL LETTER V WITH HOOK
-01b3 LATIN CAPITAL LETTER Y WITH HOOK
-01b4 LATIN SMALL LETTER Y WITH HOOK
-01b5 LATIN CAPITAL LETTER Z WITH STROKE
-01b6 LATIN SMALL LETTER Z WITH STROKE
-01b7 LATIN CAPITAL LETTER EZH
-01b8 LATIN CAPITAL LETTER EZH REVERSED
-01b9 LATIN SMALL LETTER EZH REVERSED
-01ba LATIN SMALL LETTER EZH WITH TAIL
-01bb LATIN LETTER TWO WITH STROKE
-01bc LATIN CAPITAL LETTER TONE FIVE
-01bd LATIN SMALL LETTER TONE FIVE
-01be LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
-01bf LATIN LETTER WYNN
-01c0 LATIN LETTER DENTAL CLICK
-01c1 LATIN LETTER LATERAL CLICK
-01c2 LATIN LETTER ALVEOLAR CLICK
-01c3 LATIN LETTER RETROFLEX CLICK
-01c4 LATIN CAPITAL LETTER DZ WITH CARON
-01c5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-01c6 LATIN SMALL LETTER DZ WITH CARON
-01c7 LATIN CAPITAL LETTER LJ
-01c8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
-01c9 LATIN SMALL LETTER LJ
-01ca LATIN CAPITAL LETTER NJ
-01cb LATIN CAPITAL LETTER N WITH SMALL LETTER J
-01cc LATIN SMALL LETTER NJ
-01cd LATIN CAPITAL LETTER A WITH CARON
-01ce LATIN SMALL LETTER A WITH CARON
-01cf LATIN CAPITAL LETTER I WITH CARON
-01d0 LATIN SMALL LETTER I WITH CARON
-01d1 LATIN CAPITAL LETTER O WITH CARON
-01d2 LATIN SMALL LETTER O WITH CARON
-01d3 LATIN CAPITAL LETTER U WITH CARON
-01d4 LATIN SMALL LETTER U WITH CARON
-01d5 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-01d6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
-01d7 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-01d8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
-01d9 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-01da LATIN SMALL LETTER U WITH DIAERESIS AND CARON
-01db LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-01dc LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
-01dd LATIN SMALL LETTER TURNED E
-01de LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-01df LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-01e0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-01e1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
-01e2 LATIN CAPITAL LETTER AE WITH MACRON
-01e3 LATIN SMALL LETTER AE WITH MACRON
-01e4 LATIN CAPITAL LETTER G WITH STROKE
-01e5 LATIN SMALL LETTER G WITH STROKE
-01e6 LATIN CAPITAL LETTER G WITH CARON
-01e7 LATIN SMALL LETTER G WITH CARON
-01e8 LATIN CAPITAL LETTER K WITH CARON
-01e9 LATIN SMALL LETTER K WITH CARON
-01ea LATIN CAPITAL LETTER O WITH OGONEK
-01eb LATIN SMALL LETTER O WITH OGONEK
-01ec LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-01ed LATIN SMALL LETTER O WITH OGONEK AND MACRON
-01ee LATIN CAPITAL LETTER EZH WITH CARON
-01ef LATIN SMALL LETTER EZH WITH CARON
-01f0 LATIN SMALL LETTER J WITH CARON
-01f1 LATIN CAPITAL LETTER DZ
-01f2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-01f3 LATIN SMALL LETTER DZ
-01f4 LATIN CAPITAL LETTER G WITH ACUTE
-01f5 LATIN SMALL LETTER G WITH ACUTE
-01f6 LATIN CAPITAL LETTER HWAIR
-01f7 LATIN CAPITAL LETTER WYNN
-01f8 LATIN CAPITAL LETTER N WITH GRAVE
-01f9 LATIN SMALL LETTER N WITH GRAVE
-01fa LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-01fb LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-01fc LATIN CAPITAL LETTER AE WITH ACUTE
-01fd LATIN SMALL LETTER AE WITH ACUTE
-01fe LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-01ff LATIN SMALL LETTER O WITH STROKE AND ACUTE
-0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
-0201 LATIN SMALL LETTER A WITH DOUBLE GRAVE
-0202 LATIN CAPITAL LETTER A WITH INVERTED BREVE
-0203 LATIN SMALL LETTER A WITH INVERTED BREVE
-0204 LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
-0205 LATIN SMALL LETTER E WITH DOUBLE GRAVE
-0206 LATIN CAPITAL LETTER E WITH INVERTED BREVE
-0207 LATIN SMALL LETTER E WITH INVERTED BREVE
-0208 LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
-0209 LATIN SMALL LETTER I WITH DOUBLE GRAVE
-020a LATIN CAPITAL LETTER I WITH INVERTED BREVE
-020b LATIN SMALL LETTER I WITH INVERTED BREVE
-020c LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
-020d LATIN SMALL LETTER O WITH DOUBLE GRAVE
-020e LATIN CAPITAL LETTER O WITH INVERTED BREVE
-020f LATIN SMALL LETTER O WITH INVERTED BREVE
-0210 LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
-0211 LATIN SMALL LETTER R WITH DOUBLE GRAVE
-0212 LATIN CAPITAL LETTER R WITH INVERTED BREVE
-0213 LATIN SMALL LETTER R WITH INVERTED BREVE
-0214 LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
-0215 LATIN SMALL LETTER U WITH DOUBLE GRAVE
-0216 LATIN CAPITAL LETTER U WITH INVERTED BREVE
-0217 LATIN SMALL LETTER U WITH INVERTED BREVE
-0218 LATIN CAPITAL LETTER S WITH COMMA BELOW
-0219 LATIN SMALL LETTER S WITH COMMA BELOW
-021a LATIN CAPITAL LETTER T WITH COMMA BELOW
-021b LATIN SMALL LETTER T WITH COMMA BELOW
-021c LATIN CAPITAL LETTER YOGH
-021d LATIN SMALL LETTER YOGH
-021e LATIN CAPITAL LETTER H WITH CARON
-021f LATIN SMALL LETTER H WITH CARON
-0222 LATIN CAPITAL LETTER OU
-0223 LATIN SMALL LETTER OU
-0224 LATIN CAPITAL LETTER Z WITH HOOK
-0225 LATIN SMALL LETTER Z WITH HOOK
-0226 LATIN CAPITAL LETTER A WITH DOT ABOVE
-0227 LATIN SMALL LETTER A WITH DOT ABOVE
-0228 LATIN CAPITAL LETTER E WITH CEDILLA
-0229 LATIN SMALL LETTER E WITH CEDILLA
-022a LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
-022b LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
-022c LATIN CAPITAL LETTER O WITH TILDE AND MACRON
-022d LATIN SMALL LETTER O WITH TILDE AND MACRON
-022e LATIN CAPITAL LETTER O WITH DOT ABOVE
-022f LATIN SMALL LETTER O WITH DOT ABOVE
-0230 LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
-0231 LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
-0232 LATIN CAPITAL LETTER Y WITH MACRON
-0233 LATIN SMALL LETTER Y WITH MACRON
-0250 LATIN SMALL LETTER TURNED A
-0251 LATIN SMALL LETTER ALPHA
-0252 LATIN SMALL LETTER TURNED ALPHA
-0253 LATIN SMALL LETTER B WITH HOOK
-0254 LATIN SMALL LETTER OPEN O
-0255 LATIN SMALL LETTER C WITH CURL
-0256 LATIN SMALL LETTER D WITH TAIL
-0257 LATIN SMALL LETTER D WITH HOOK
-0258 LATIN SMALL LETTER REVERSED E
-0259 LATIN SMALL LETTER SCHWA
-025a LATIN SMALL LETTER SCHWA WITH HOOK
-025b LATIN SMALL LETTER OPEN E
-025c LATIN SMALL LETTER REVERSED OPEN E
-025d LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
-025e LATIN SMALL LETTER CLOSED REVERSED OPEN E
-025f LATIN SMALL LETTER DOTLESS J WITH STROKE
-0260 LATIN SMALL LETTER G WITH HOOK
-0261 LATIN SMALL LETTER SCRIPT G
-0262 LATIN LETTER SMALL CAPITAL G
-0263 LATIN SMALL LETTER GAMMA
-0264 LATIN SMALL LETTER RAMS HORN
-0265 LATIN SMALL LETTER TURNED H
-0266 LATIN SMALL LETTER H WITH HOOK
-0267 LATIN SMALL LETTER HENG WITH HOOK
-0268 LATIN SMALL LETTER I WITH STROKE
-0269 LATIN SMALL LETTER IOTA
-026a LATIN LETTER SMALL CAPITAL I
-026b LATIN SMALL LETTER L WITH MIDDLE TILDE
-026c LATIN SMALL LETTER L WITH BELT
-026d LATIN SMALL LETTER L WITH RETROFLEX HOOK
-026e LATIN SMALL LETTER LEZH
-026f LATIN SMALL LETTER TURNED M
-0270 LATIN SMALL LETTER TURNED M WITH LONG LEG
-0271 LATIN SMALL LETTER M WITH HOOK
-0272 LATIN SMALL LETTER N WITH LEFT HOOK
-0273 LATIN SMALL LETTER N WITH RETROFLEX HOOK
-0274 LATIN LETTER SMALL CAPITAL N
-0275 LATIN SMALL LETTER BARRED O
-0276 LATIN LETTER SMALL CAPITAL OE
-0277 LATIN SMALL LETTER CLOSED OMEGA
-0278 LATIN SMALL LETTER PHI
-0279 LATIN SMALL LETTER TURNED R
-027a LATIN SMALL LETTER TURNED R WITH LONG LEG
-027b LATIN SMALL LETTER TURNED R WITH HOOK
-027c LATIN SMALL LETTER R WITH LONG LEG
-027d LATIN SMALL LETTER R WITH TAIL
-027e LATIN SMALL LETTER R WITH FISHHOOK
-027f LATIN SMALL LETTER REVERSED R WITH FISHHOOK
-0280 LATIN LETTER SMALL CAPITAL R
-0281 LATIN LETTER SMALL CAPITAL INVERTED R
-0282 LATIN SMALL LETTER S WITH HOOK
-0283 LATIN SMALL LETTER ESH
-0284 LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
-0285 LATIN SMALL LETTER SQUAT REVERSED ESH
-0286 LATIN SMALL LETTER ESH WITH CURL
-0287 LATIN SMALL LETTER TURNED T
-0288 LATIN SMALL LETTER T WITH RETROFLEX HOOK
-0289 LATIN SMALL LETTER U BAR
-028a LATIN SMALL LETTER UPSILON
-028b LATIN SMALL LETTER V WITH HOOK
-028c LATIN SMALL LETTER TURNED V
-028d LATIN SMALL LETTER TURNED W
-028e LATIN SMALL LETTER TURNED Y
-028f LATIN LETTER SMALL CAPITAL Y
-0290 LATIN SMALL LETTER Z WITH RETROFLEX HOOK
-0291 LATIN SMALL LETTER Z WITH CURL
-0292 LATIN SMALL LETTER EZH
-0293 LATIN SMALL LETTER EZH WITH CURL
-0294 LATIN LETTER GLOTTAL STOP
-0295 LATIN LETTER PHARYNGEAL VOICED FRICATIVE
-0296 LATIN LETTER INVERTED GLOTTAL STOP
-0297 LATIN LETTER STRETCHED C
-0298 LATIN LETTER BILABIAL CLICK
-0299 LATIN LETTER SMALL CAPITAL B
-029a LATIN SMALL LETTER CLOSED OPEN E
-029b LATIN LETTER SMALL CAPITAL G WITH HOOK
-029c LATIN LETTER SMALL CAPITAL H
-029d LATIN SMALL LETTER J WITH CROSSED-TAIL
-029e LATIN SMALL LETTER TURNED K
-029f LATIN LETTER SMALL CAPITAL L
-02a0 LATIN SMALL LETTER Q WITH HOOK
-02a1 LATIN LETTER GLOTTAL STOP WITH STROKE
-02a2 LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
-02a3 LATIN SMALL LETTER DZ DIGRAPH
-02a4 LATIN SMALL LETTER DEZH DIGRAPH
-02a5 LATIN SMALL LETTER DZ DIGRAPH WITH CURL
-02a6 LATIN SMALL LETTER TS DIGRAPH
-02a7 LATIN SMALL LETTER TESH DIGRAPH
-02a8 LATIN SMALL LETTER TC DIGRAPH WITH CURL
-02a9 LATIN SMALL LETTER FENG DIGRAPH
-02aa LATIN SMALL LETTER LS DIGRAPH
-02ab LATIN SMALL LETTER LZ DIGRAPH
-02ac LATIN LETTER BILABIAL PERCUSSIVE
-02ad LATIN LETTER BIDENTAL PERCUSSIVE
-02b0 MODIFIER LETTER SMALL H
-02b1 MODIFIER LETTER SMALL H WITH HOOK
-02b2 MODIFIER LETTER SMALL J
-02b3 MODIFIER LETTER SMALL R
-02b4 MODIFIER LETTER SMALL TURNED R
-02b5 MODIFIER LETTER SMALL TURNED R WITH HOOK
-02b6 MODIFIER LETTER SMALL CAPITAL INVERTED R
-02b7 MODIFIER LETTER SMALL W
-02b8 MODIFIER LETTER SMALL Y
-02b9 MODIFIER LETTER PRIME
-02ba MODIFIER LETTER DOUBLE PRIME
-02bb MODIFIER LETTER TURNED COMMA
-02bc MODIFIER LETTER APOSTROPHE
-02bd MODIFIER LETTER REVERSED COMMA
-02be MODIFIER LETTER RIGHT HALF RING
-02bf MODIFIER LETTER LEFT HALF RING
-02c0 MODIFIER LETTER GLOTTAL STOP
-02c1 MODIFIER LETTER REVERSED GLOTTAL STOP
-02c2 MODIFIER LETTER LEFT ARROWHEAD
-02c3 MODIFIER LETTER RIGHT ARROWHEAD
-02c4 MODIFIER LETTER UP ARROWHEAD
-02c5 MODIFIER LETTER DOWN ARROWHEAD
-02c6 MODIFIER LETTER CIRCUMFLEX ACCENT
-02c7 CARON
-02c8 MODIFIER LETTER VERTICAL LINE
-02c9 MODIFIER LETTER MACRON
-02ca MODIFIER LETTER ACUTE ACCENT
-02cb MODIFIER LETTER GRAVE ACCENT
-02cc MODIFIER LETTER LOW VERTICAL LINE
-02cd MODIFIER LETTER LOW MACRON
-02ce MODIFIER LETTER LOW GRAVE ACCENT
-02cf MODIFIER LETTER LOW ACUTE ACCENT
-02d0 MODIFIER LETTER TRIANGULAR COLON
-02d1 MODIFIER LETTER HALF TRIANGULAR COLON
-02d2 MODIFIER LETTER CENTRED RIGHT HALF RING
-02d3 MODIFIER LETTER CENTRED LEFT HALF RING
-02d4 MODIFIER LETTER UP TACK
-02d5 MODIFIER LETTER DOWN TACK
-02d6 MODIFIER LETTER PLUS SIGN
-02d7 MODIFIER LETTER MINUS SIGN
-02d8 BREVE
-02d9 DOT ABOVE
-02da RING ABOVE
-02db OGONEK
-02dc SMALL TILDE
-02dd DOUBLE ACUTE ACCENT
-02de MODIFIER LETTER RHOTIC HOOK
-02df MODIFIER LETTER CROSS ACCENT
-02e0 MODIFIER LETTER SMALL GAMMA
-02e1 MODIFIER LETTER SMALL L
-02e2 MODIFIER LETTER SMALL S
-02e3 MODIFIER LETTER SMALL X
-02e4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
-02e5 MODIFIER LETTER EXTRA-HIGH TONE BAR
-02e6 MODIFIER LETTER HIGH TONE BAR
-02e7 MODIFIER LETTER MID TONE BAR
-02e8 MODIFIER LETTER LOW TONE BAR
-02e9 MODIFIER LETTER EXTRA-LOW TONE BAR
-02ea MODIFIER LETTER YIN DEPARTING TONE MARK
-02eb MODIFIER LETTER YANG DEPARTING TONE MARK
-02ec MODIFIER LETTER VOICING
-02ed MODIFIER LETTER UNASPIRATED
-02ee MODIFIER LETTER DOUBLE APOSTROPHE
-0300 COMBINING GRAVE ACCENT
-0301 COMBINING ACUTE ACCENT
-0302 COMBINING CIRCUMFLEX ACCENT
-0303 COMBINING TILDE
-0304 COMBINING MACRON
-0305 COMBINING OVERLINE
-0306 COMBINING BREVE
-0307 COMBINING DOT ABOVE
-0308 COMBINING DIAERESIS
-0309 COMBINING HOOK ABOVE
-030a COMBINING RING ABOVE
-030b COMBINING DOUBLE ACUTE ACCENT
-030c COMBINING CARON
-030d COMBINING VERTICAL LINE ABOVE
-030e COMBINING DOUBLE VERTICAL LINE ABOVE
-030f COMBINING DOUBLE GRAVE ACCENT
-0310 COMBINING CANDRABINDU
-0311 COMBINING INVERTED BREVE
-0312 COMBINING TURNED COMMA ABOVE
-0313 COMBINING COMMA ABOVE
-0314 COMBINING REVERSED COMMA ABOVE
-0315 COMBINING COMMA ABOVE RIGHT
-0316 COMBINING GRAVE ACCENT BELOW
-0317 COMBINING ACUTE ACCENT BELOW
-0318 COMBINING LEFT TACK BELOW
-0319 COMBINING RIGHT TACK BELOW
-031a COMBINING LEFT ANGLE ABOVE
-031b COMBINING HORN
-031c COMBINING LEFT HALF RING BELOW
-031d COMBINING UP TACK BELOW
-031e COMBINING DOWN TACK BELOW
-031f COMBINING PLUS SIGN BELOW
-0320 COMBINING MINUS SIGN BELOW
-0321 COMBINING PALATALIZED HOOK BELOW
-0322 COMBINING RETROFLEX HOOK BELOW
-0323 COMBINING DOT BELOW
-0324 COMBINING DIAERESIS BELOW
-0325 COMBINING RING BELOW
-0326 COMBINING COMMA BELOW
-0327 COMBINING CEDILLA
-0328 COMBINING OGONEK
-0329 COMBINING VERTICAL LINE BELOW
-032a COMBINING BRIDGE BELOW
-032b COMBINING INVERTED DOUBLE ARCH BELOW
-032c COMBINING CARON BELOW
-032d COMBINING CIRCUMFLEX ACCENT BELOW
-032e COMBINING BREVE BELOW
-032f COMBINING INVERTED BREVE BELOW
-0330 COMBINING TILDE BELOW
-0331 COMBINING MACRON BELOW
-0332 COMBINING LOW LINE
-0333 COMBINING DOUBLE LOW LINE
-0334 COMBINING TILDE OVERLAY
-0335 COMBINING SHORT STROKE OVERLAY
-0336 COMBINING LONG STROKE OVERLAY
-0337 COMBINING SHORT SOLIDUS OVERLAY
-0338 COMBINING LONG SOLIDUS OVERLAY
-0339 COMBINING RIGHT HALF RING BELOW
-033a COMBINING INVERTED BRIDGE BELOW
-033b COMBINING SQUARE BELOW
-033c COMBINING SEAGULL BELOW
-033d COMBINING X ABOVE
-033e COMBINING VERTICAL TILDE
-033f COMBINING DOUBLE OVERLINE
-0340 COMBINING GRAVE TONE MARK
-0341 COMBINING ACUTE TONE MARK
-0342 COMBINING GREEK PERISPOMENI
-0343 COMBINING GREEK KORONIS
-0344 COMBINING GREEK DIALYTIKA TONOS
-0345 COMBINING GREEK YPOGEGRAMMENI
-0346 COMBINING BRIDGE ABOVE
-0347 COMBINING EQUALS SIGN BELOW
-0348 COMBINING DOUBLE VERTICAL LINE BELOW
-0349 COMBINING LEFT ANGLE BELOW
-034a COMBINING NOT TILDE ABOVE
-034b COMBINING HOMOTHETIC ABOVE
-034c COMBINING ALMOST EQUAL TO ABOVE
-034d COMBINING LEFT RIGHT ARROW BELOW
-034e COMBINING UPWARDS ARROW BELOW
-0360 COMBINING DOUBLE TILDE
-0361 COMBINING DOUBLE INVERTED BREVE
-0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW
-0374 GREEK NUMERAL SIGN
-0375 GREEK LOWER NUMERAL SIGN
-037a GREEK YPOGEGRAMMENI
-037e GREEK QUESTION MARK
-0384 GREEK TONOS
-0385 GREEK DIALYTIKA TONOS
-0386 GREEK CAPITAL LETTER ALPHA WITH TONOS
-0387 GREEK ANO TELEIA
-0388 GREEK CAPITAL LETTER EPSILON WITH TONOS
-0389 GREEK CAPITAL LETTER ETA WITH TONOS
-038a GREEK CAPITAL LETTER IOTA WITH TONOS
-038c GREEK CAPITAL LETTER OMICRON WITH TONOS
-038e GREEK CAPITAL LETTER UPSILON WITH TONOS
-038f GREEK CAPITAL LETTER OMEGA WITH TONOS
-0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-0391 GREEK CAPITAL LETTER ALPHA
-0392 GREEK CAPITAL LETTER BETA
-0393 GREEK CAPITAL LETTER GAMMA
-0394 GREEK CAPITAL LETTER DELTA
-0395 GREEK CAPITAL LETTER EPSILON
-0396 GREEK CAPITAL LETTER ZETA
-0397 GREEK CAPITAL LETTER ETA
-0398 GREEK CAPITAL LETTER THETA
-0399 GREEK CAPITAL LETTER IOTA
-039a GREEK CAPITAL LETTER KAPPA
-039b GREEK CAPITAL LETTER LAMDA
-039c GREEK CAPITAL LETTER MU
-039d GREEK CAPITAL LETTER NU
-039e GREEK CAPITAL LETTER XI
-039f GREEK CAPITAL LETTER OMICRON
-03a0 GREEK CAPITAL LETTER PI
-03a1 GREEK CAPITAL LETTER RHO
-03a3 GREEK CAPITAL LETTER SIGMA
-03a4 GREEK CAPITAL LETTER TAU
-03a5 GREEK CAPITAL LETTER UPSILON
-03a6 GREEK CAPITAL LETTER PHI
-03a7 GREEK CAPITAL LETTER CHI
-03a8 GREEK CAPITAL LETTER PSI
-03a9 GREEK CAPITAL LETTER OMEGA
-03aa GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-03ab GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-03ac GREEK SMALL LETTER ALPHA WITH TONOS
-03ad GREEK SMALL LETTER EPSILON WITH TONOS
-03ae GREEK SMALL LETTER ETA WITH TONOS
-03af GREEK SMALL LETTER IOTA WITH TONOS
-03b0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-03b1 GREEK SMALL LETTER ALPHA
-03b2 GREEK SMALL LETTER BETA
-03b3 GREEK SMALL LETTER GAMMA
-03b4 GREEK SMALL LETTER DELTA
-03b5 GREEK SMALL LETTER EPSILON
-03b6 GREEK SMALL LETTER ZETA
-03b7 GREEK SMALL LETTER ETA
-03b8 GREEK SMALL LETTER THETA
-03b9 GREEK SMALL LETTER IOTA
-03ba GREEK SMALL LETTER KAPPA
-03bb GREEK SMALL LETTER LAMDA
-03bc GREEK SMALL LETTER MU
-03bd GREEK SMALL LETTER NU
-03be GREEK SMALL LETTER XI
-03bf GREEK SMALL LETTER OMICRON
-03c0 GREEK SMALL LETTER PI
-03c1 GREEK SMALL LETTER RHO
-03c2 GREEK SMALL LETTER FINAL SIGMA
-03c3 GREEK SMALL LETTER SIGMA
-03c4 GREEK SMALL LETTER TAU
-03c5 GREEK SMALL LETTER UPSILON
-03c6 GREEK SMALL LETTER PHI
-03c7 GREEK SMALL LETTER CHI
-03c8 GREEK SMALL LETTER PSI
-03c9 GREEK SMALL LETTER OMEGA
-03ca GREEK SMALL LETTER IOTA WITH DIALYTIKA
-03cb GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-03cc GREEK SMALL LETTER OMICRON WITH TONOS
-03cd GREEK SMALL LETTER UPSILON WITH TONOS
-03ce GREEK SMALL LETTER OMEGA WITH TONOS
-03d0 GREEK BETA SYMBOL
-03d1 GREEK THETA SYMBOL
-03d2 GREEK UPSILON WITH HOOK SYMBOL
-03d3 GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
-03d4 GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
-03d5 GREEK PHI SYMBOL
-03d6 GREEK PI SYMBOL
-03d7 GREEK KAI SYMBOL
-03da GREEK LETTER STIGMA
-03db GREEK SMALL LETTER STIGMA
-03dc GREEK LETTER DIGAMMA
-03dd GREEK SMALL LETTER DIGAMMA
-03de GREEK LETTER KOPPA
-03df GREEK SMALL LETTER KOPPA
-03e0 GREEK LETTER SAMPI
-03e1 GREEK SMALL LETTER SAMPI
-03e2 COPTIC CAPITAL LETTER SHEI
-03e3 COPTIC SMALL LETTER SHEI
-03e4 COPTIC CAPITAL LETTER FEI
-03e5 COPTIC SMALL LETTER FEI
-03e6 COPTIC CAPITAL LETTER KHEI
-03e7 COPTIC SMALL LETTER KHEI
-03e8 COPTIC CAPITAL LETTER HORI
-03e9 COPTIC SMALL LETTER HORI
-03ea COPTIC CAPITAL LETTER GANGIA
-03eb COPTIC SMALL LETTER GANGIA
-03ec COPTIC CAPITAL LETTER SHIMA
-03ed COPTIC SMALL LETTER SHIMA
-03ee COPTIC CAPITAL LETTER DEI
-03ef COPTIC SMALL LETTER DEI
-03f0 GREEK KAPPA SYMBOL
-03f1 GREEK RHO SYMBOL
-03f2 GREEK LUNATE SIGMA SYMBOL
-03f3 GREEK LETTER YOT
-0400 CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0401 CYRILLIC CAPITAL LETTER IO
-0402 CYRILLIC CAPITAL LETTER DJE
-0403 CYRILLIC CAPITAL LETTER GJE
-0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0405 CYRILLIC CAPITAL LETTER DZE
-0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0407 CYRILLIC CAPITAL LETTER YI
-0408 CYRILLIC CAPITAL LETTER JE
-0409 CYRILLIC CAPITAL LETTER LJE
-040a CYRILLIC CAPITAL LETTER NJE
-040b CYRILLIC CAPITAL LETTER TSHE
-040c CYRILLIC CAPITAL LETTER KJE
-040d CYRILLIC CAPITAL LETTER I WITH GRAVE
-040e CYRILLIC CAPITAL LETTER SHORT U
-040f CYRILLIC CAPITAL LETTER DZHE
-0410 CYRILLIC CAPITAL LETTER A
-0411 CYRILLIC CAPITAL LETTER BE
-0412 CYRILLIC CAPITAL LETTER VE
-0413 CYRILLIC CAPITAL LETTER GHE
-0414 CYRILLIC CAPITAL LETTER DE
-0415 CYRILLIC CAPITAL LETTER IE
-0416 CYRILLIC CAPITAL LETTER ZHE
-0417 CYRILLIC CAPITAL LETTER ZE
-0418 CYRILLIC CAPITAL LETTER I
-0419 CYRILLIC CAPITAL LETTER SHORT I
-041a CYRILLIC CAPITAL LETTER KA
-041b CYRILLIC CAPITAL LETTER EL
-041c CYRILLIC CAPITAL LETTER EM
-041d CYRILLIC CAPITAL LETTER EN
-041e CYRILLIC CAPITAL LETTER O
-041f CYRILLIC CAPITAL LETTER PE
-0420 CYRILLIC CAPITAL LETTER ER
-0421 CYRILLIC CAPITAL LETTER ES
-0422 CYRILLIC CAPITAL LETTER TE
-0423 CYRILLIC CAPITAL LETTER U
-0424 CYRILLIC CAPITAL LETTER EF
-0425 CYRILLIC CAPITAL LETTER HA
-0426 CYRILLIC CAPITAL LETTER TSE
-0427 CYRILLIC CAPITAL LETTER CHE
-0428 CYRILLIC CAPITAL LETTER SHA
-0429 CYRILLIC CAPITAL LETTER SHCHA
-042a CYRILLIC CAPITAL LETTER HARD SIGN
-042b CYRILLIC CAPITAL LETTER YERU
-042c CYRILLIC CAPITAL LETTER SOFT SIGN
-042d CYRILLIC CAPITAL LETTER E
-042e CYRILLIC CAPITAL LETTER YU
-042f CYRILLIC CAPITAL LETTER YA
-0430 CYRILLIC SMALL LETTER A
-0431 CYRILLIC SMALL LETTER BE
-0432 CYRILLIC SMALL LETTER VE
-0433 CYRILLIC SMALL LETTER GHE
-0434 CYRILLIC SMALL LETTER DE
-0435 CYRILLIC SMALL LETTER IE
-0436 CYRILLIC SMALL LETTER ZHE
-0437 CYRILLIC SMALL LETTER ZE
-0438 CYRILLIC SMALL LETTER I
-0439 CYRILLIC SMALL LETTER SHORT I
-043a CYRILLIC SMALL LETTER KA
-043b CYRILLIC SMALL LETTER EL
-043c CYRILLIC SMALL LETTER EM
-043d CYRILLIC SMALL LETTER EN
-043e CYRILLIC SMALL LETTER O
-043f CYRILLIC SMALL LETTER PE
-0440 CYRILLIC SMALL LETTER ER
-0441 CYRILLIC SMALL LETTER ES
-0442 CYRILLIC SMALL LETTER TE
-0443 CYRILLIC SMALL LETTER U
-0444 CYRILLIC SMALL LETTER EF
-0445 CYRILLIC SMALL LETTER HA
-0446 CYRILLIC SMALL LETTER TSE
-0447 CYRILLIC SMALL LETTER CHE
-0448 CYRILLIC SMALL LETTER SHA
-0449 CYRILLIC SMALL LETTER SHCHA
-044a CYRILLIC SMALL LETTER HARD SIGN
-044b CYRILLIC SMALL LETTER YERU
-044c CYRILLIC SMALL LETTER SOFT SIGN
-044d CYRILLIC SMALL LETTER E
-044e CYRILLIC SMALL LETTER YU
-044f CYRILLIC SMALL LETTER YA
-0450 CYRILLIC SMALL LETTER IE WITH GRAVE
-0451 CYRILLIC SMALL LETTER IO
-0452 CYRILLIC SMALL LETTER DJE
-0453 CYRILLIC SMALL LETTER GJE
-0454 CYRILLIC SMALL LETTER UKRAINIAN IE
-0455 CYRILLIC SMALL LETTER DZE
-0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-0457 CYRILLIC SMALL LETTER YI
-0458 CYRILLIC SMALL LETTER JE
-0459 CYRILLIC SMALL LETTER LJE
-045a CYRILLIC SMALL LETTER NJE
-045b CYRILLIC SMALL LETTER TSHE
-045c CYRILLIC SMALL LETTER KJE
-045d CYRILLIC SMALL LETTER I WITH GRAVE
-045e CYRILLIC SMALL LETTER SHORT U
-045f CYRILLIC SMALL LETTER DZHE
-0460 CYRILLIC CAPITAL LETTER OMEGA
-0461 CYRILLIC SMALL LETTER OMEGA
-0462 CYRILLIC CAPITAL LETTER YAT
-0463 CYRILLIC SMALL LETTER YAT
-0464 CYRILLIC CAPITAL LETTER IOTIFIED E
-0465 CYRILLIC SMALL LETTER IOTIFIED E
-0466 CYRILLIC CAPITAL LETTER LITTLE YUS
-0467 CYRILLIC SMALL LETTER LITTLE YUS
-0468 CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-0469 CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
-046a CYRILLIC CAPITAL LETTER BIG YUS
-046b CYRILLIC SMALL LETTER BIG YUS
-046c CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-046d CYRILLIC SMALL LETTER IOTIFIED BIG YUS
-046e CYRILLIC CAPITAL LETTER KSI
-046f CYRILLIC SMALL LETTER KSI
-0470 CYRILLIC CAPITAL LETTER PSI
-0471 CYRILLIC SMALL LETTER PSI
-0472 CYRILLIC CAPITAL LETTER FITA
-0473 CYRILLIC SMALL LETTER FITA
-0474 CYRILLIC CAPITAL LETTER IZHITSA
-0475 CYRILLIC SMALL LETTER IZHITSA
-0476 CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0477 CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0478 CYRILLIC CAPITAL LETTER UK
-0479 CYRILLIC SMALL LETTER UK
-047a CYRILLIC CAPITAL LETTER ROUND OMEGA
-047b CYRILLIC SMALL LETTER ROUND OMEGA
-047c CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-047d CYRILLIC SMALL LETTER OMEGA WITH TITLO
-047e CYRILLIC CAPITAL LETTER OT
-047f CYRILLIC SMALL LETTER OT
-0480 CYRILLIC CAPITAL LETTER KOPPA
-0481 CYRILLIC SMALL LETTER KOPPA
-0482 CYRILLIC THOUSANDS SIGN
-0483 COMBINING CYRILLIC TITLO
-0484 COMBINING CYRILLIC PALATALIZATION
-0485 COMBINING CYRILLIC DASIA PNEUMATA
-0486 COMBINING CYRILLIC PSILI PNEUMATA
-0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
-0489 COMBINING CYRILLIC MILLIONS SIGN
-048c CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-048d CYRILLIC SMALL LETTER SEMISOFT SIGN
-048e CYRILLIC CAPITAL LETTER ER WITH TICK
-048f CYRILLIC SMALL LETTER ER WITH TICK
-0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-0491 CYRILLIC SMALL LETTER GHE WITH UPTURN
-0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0493 CYRILLIC SMALL LETTER GHE WITH STROKE
-0494 CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-0495 CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
-0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER
-0498 CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-0499 CYRILLIC SMALL LETTER ZE WITH DESCENDER
-049a CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-049b CYRILLIC SMALL LETTER KA WITH DESCENDER
-049c CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-049d CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
-049e CYRILLIC CAPITAL LETTER KA WITH STROKE
-049f CYRILLIC SMALL LETTER KA WITH STROKE
-04a0 CYRILLIC CAPITAL LETTER BASHKIR KA
-04a1 CYRILLIC SMALL LETTER BASHKIR KA
-04a2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04a3 CYRILLIC SMALL LETTER EN WITH DESCENDER
-04a4 CYRILLIC CAPITAL LIGATURE EN GHE
-04a5 CYRILLIC SMALL LIGATURE EN GHE
-04a6 CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
-04a7 CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
-04a8 CYRILLIC CAPITAL LETTER ABKHASIAN HA
-04a9 CYRILLIC SMALL LETTER ABKHASIAN HA
-04aa CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04ab CYRILLIC SMALL LETTER ES WITH DESCENDER
-04ac CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-04ad CYRILLIC SMALL LETTER TE WITH DESCENDER
-04ae CYRILLIC CAPITAL LETTER STRAIGHT U
-04af CYRILLIC SMALL LETTER STRAIGHT U
-04b0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-04b1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
-04b2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-04b3 CYRILLIC SMALL LETTER HA WITH DESCENDER
-04b4 CYRILLIC CAPITAL LIGATURE TE TSE
-04b5 CYRILLIC SMALL LIGATURE TE TSE
-04b6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-04b7 CYRILLIC SMALL LETTER CHE WITH DESCENDER
-04b8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-04b9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
-04ba CYRILLIC CAPITAL LETTER SHHA
-04bb CYRILLIC SMALL LETTER SHHA
-04bc CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-04bd CYRILLIC SMALL LETTER ABKHASIAN CHE
-04be CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-04bf CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
-04c0 CYRILLIC LETTER PALOCHKA
-04c1 CYRILLIC CAPITAL LETTER ZHE WITH BREVE
-04c2 CYRILLIC SMALL LETTER ZHE WITH BREVE
-04c3 CYRILLIC CAPITAL LETTER KA WITH HOOK
-04c4 CYRILLIC SMALL LETTER KA WITH HOOK
-04c7 CYRILLIC CAPITAL LETTER EN WITH HOOK
-04c8 CYRILLIC SMALL LETTER EN WITH HOOK
-04cb CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-04cc CYRILLIC SMALL LETTER KHAKASSIAN CHE
-04d0 CYRILLIC CAPITAL LETTER A WITH BREVE
-04d1 CYRILLIC SMALL LETTER A WITH BREVE
-04d2 CYRILLIC CAPITAL LETTER A WITH DIAERESIS
-04d3 CYRILLIC SMALL LETTER A WITH DIAERESIS
-04d4 CYRILLIC CAPITAL LIGATURE A IE
-04d5 CYRILLIC SMALL LIGATURE A IE
-04d6 CYRILLIC CAPITAL LETTER IE WITH BREVE
-04d7 CYRILLIC SMALL LETTER IE WITH BREVE
-04d8 CYRILLIC CAPITAL LETTER SCHWA
-04d9 CYRILLIC SMALL LETTER SCHWA
-04da CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
-04db CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
-04dc CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
-04dd CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
-04de CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
-04df CYRILLIC SMALL LETTER ZE WITH DIAERESIS
-04e0 CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-04e1 CYRILLIC SMALL LETTER ABKHASIAN DZE
-04e2 CYRILLIC CAPITAL LETTER I WITH MACRON
-04e3 CYRILLIC SMALL LETTER I WITH MACRON
-04e4 CYRILLIC CAPITAL LETTER I WITH DIAERESIS
-04e5 CYRILLIC SMALL LETTER I WITH DIAERESIS
-04e6 CYRILLIC CAPITAL LETTER O WITH DIAERESIS
-04e7 CYRILLIC SMALL LETTER O WITH DIAERESIS
-04e8 CYRILLIC CAPITAL LETTER BARRED O
-04e9 CYRILLIC SMALL LETTER BARRED O
-04ea CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
-04eb CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
-04ec CYRILLIC CAPITAL LETTER E WITH DIAERESIS
-04ed CYRILLIC SMALL LETTER E WITH DIAERESIS
-04ee CYRILLIC CAPITAL LETTER U WITH MACRON
-04ef CYRILLIC SMALL LETTER U WITH MACRON
-04f0 CYRILLIC CAPITAL LETTER U WITH DIAERESIS
-04f1 CYRILLIC SMALL LETTER U WITH DIAERESIS
-04f2 CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
-04f3 CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
-04f4 CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
-04f5 CYRILLIC SMALL LETTER CHE WITH DIAERESIS
-04f8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
-04f9 CYRILLIC SMALL LETTER YERU WITH DIAERESIS
-0531 ARMENIAN CAPITAL LETTER AYB
-0532 ARMENIAN CAPITAL LETTER BEN
-0533 ARMENIAN CAPITAL LETTER GIM
-0534 ARMENIAN CAPITAL LETTER DA
-0535 ARMENIAN CAPITAL LETTER ECH
-0536 ARMENIAN CAPITAL LETTER ZA
-0537 ARMENIAN CAPITAL LETTER EH
-0538 ARMENIAN CAPITAL LETTER ET
-0539 ARMENIAN CAPITAL LETTER TO
-053a ARMENIAN CAPITAL LETTER ZHE
-053b ARMENIAN CAPITAL LETTER INI
-053c ARMENIAN CAPITAL LETTER LIWN
-053d ARMENIAN CAPITAL LETTER XEH
-053e ARMENIAN CAPITAL LETTER CA
-053f ARMENIAN CAPITAL LETTER KEN
-0540 ARMENIAN CAPITAL LETTER HO
-0541 ARMENIAN CAPITAL LETTER JA
-0542 ARMENIAN CAPITAL LETTER GHAD
-0543 ARMENIAN CAPITAL LETTER CHEH
-0544 ARMENIAN CAPITAL LETTER MEN
-0545 ARMENIAN CAPITAL LETTER YI
-0546 ARMENIAN CAPITAL LETTER NOW
-0547 ARMENIAN CAPITAL LETTER SHA
-0548 ARMENIAN CAPITAL LETTER VO
-0549 ARMENIAN CAPITAL LETTER CHA
-054a ARMENIAN CAPITAL LETTER PEH
-054b ARMENIAN CAPITAL LETTER JHEH
-054c ARMENIAN CAPITAL LETTER RA
-054d ARMENIAN CAPITAL LETTER SEH
-054e ARMENIAN CAPITAL LETTER VEW
-054f ARMENIAN CAPITAL LETTER TIWN
-0550 ARMENIAN CAPITAL LETTER REH
-0551 ARMENIAN CAPITAL LETTER CO
-0552 ARMENIAN CAPITAL LETTER YIWN
-0553 ARMENIAN CAPITAL LETTER PIWR
-0554 ARMENIAN CAPITAL LETTER KEH
-0555 ARMENIAN CAPITAL LETTER OH
-0556 ARMENIAN CAPITAL LETTER FEH
-0559 ARMENIAN MODIFIER LETTER LEFT HALF RING
-055a ARMENIAN APOSTROPHE
-055b ARMENIAN EMPHASIS MARK
-055c ARMENIAN EXCLAMATION MARK
-055d ARMENIAN COMMA
-055e ARMENIAN QUESTION MARK
-055f ARMENIAN ABBREVIATION MARK
-0561 ARMENIAN SMALL LETTER AYB
-0562 ARMENIAN SMALL LETTER BEN
-0563 ARMENIAN SMALL LETTER GIM
-0564 ARMENIAN SMALL LETTER DA
-0565 ARMENIAN SMALL LETTER ECH
-0566 ARMENIAN SMALL LETTER ZA
-0567 ARMENIAN SMALL LETTER EH
-0568 ARMENIAN SMALL LETTER ET
-0569 ARMENIAN SMALL LETTER TO
-056a ARMENIAN SMALL LETTER ZHE
-056b ARMENIAN SMALL LETTER INI
-056c ARMENIAN SMALL LETTER LIWN
-056d ARMENIAN SMALL LETTER XEH
-056e ARMENIAN SMALL LETTER CA
-056f ARMENIAN SMALL LETTER KEN
-0570 ARMENIAN SMALL LETTER HO
-0571 ARMENIAN SMALL LETTER JA
-0572 ARMENIAN SMALL LETTER GHAD
-0573 ARMENIAN SMALL LETTER CHEH
-0574 ARMENIAN SMALL LETTER MEN
-0575 ARMENIAN SMALL LETTER YI
-0576 ARMENIAN SMALL LETTER NOW
-0577 ARMENIAN SMALL LETTER SHA
-0578 ARMENIAN SMALL LETTER VO
-0579 ARMENIAN SMALL LETTER CHA
-057a ARMENIAN SMALL LETTER PEH
-057b ARMENIAN SMALL LETTER JHEH
-057c ARMENIAN SMALL LETTER RA
-057d ARMENIAN SMALL LETTER SEH
-057e ARMENIAN SMALL LETTER VEW
-057f ARMENIAN SMALL LETTER TIWN
-0580 ARMENIAN SMALL LETTER REH
-0581 ARMENIAN SMALL LETTER CO
-0582 ARMENIAN SMALL LETTER YIWN
-0583 ARMENIAN SMALL LETTER PIWR
-0584 ARMENIAN SMALL LETTER KEH
-0585 ARMENIAN SMALL LETTER OH
-0586 ARMENIAN SMALL LETTER FEH
-0587 ARMENIAN SMALL LIGATURE ECH YIWN
-0589 ARMENIAN FULL STOP
-058a ARMENIAN HYPHEN
-0591 HEBREW ACCENT ETNAHTA
-0592 HEBREW ACCENT SEGOL
-0593 HEBREW ACCENT SHALSHELET
-0594 HEBREW ACCENT ZAQEF QATAN
-0595 HEBREW ACCENT ZAQEF GADOL
-0596 HEBREW ACCENT TIPEHA
-0597 HEBREW ACCENT REVIA
-0598 HEBREW ACCENT ZARQA
-0599 HEBREW ACCENT PASHTA
-059a HEBREW ACCENT YETIV
-059b HEBREW ACCENT TEVIR
-059c HEBREW ACCENT GERESH
-059d HEBREW ACCENT GERESH MUQDAM
-059e HEBREW ACCENT GERSHAYIM
-059f HEBREW ACCENT QARNEY PARA
-05a0 HEBREW ACCENT TELISHA GEDOLA
-05a1 HEBREW ACCENT PAZER
-05a3 HEBREW ACCENT MUNAH
-05a4 HEBREW ACCENT MAHAPAKH
-05a5 HEBREW ACCENT MERKHA
-05a6 HEBREW ACCENT MERKHA KEFULA
-05a7 HEBREW ACCENT DARGA
-05a8 HEBREW ACCENT QADMA
-05a9 HEBREW ACCENT TELISHA QETANA
-05aa HEBREW ACCENT YERAH BEN YOMO
-05ab HEBREW ACCENT OLE
-05ac HEBREW ACCENT ILUY
-05ad HEBREW ACCENT DEHI
-05ae HEBREW ACCENT ZINOR
-05af HEBREW MARK MASORA CIRCLE
-05b0 HEBREW POINT SHEVA
-05b1 HEBREW POINT HATAF SEGOL
-05b2 HEBREW POINT HATAF PATAH
-05b3 HEBREW POINT HATAF QAMATS
-05b4 HEBREW POINT HIRIQ
-05b5 HEBREW POINT TSERE
-05b6 HEBREW POINT SEGOL
-05b7 HEBREW POINT PATAH
-05b8 HEBREW POINT QAMATS
-05b9 HEBREW POINT HOLAM
-05bb HEBREW POINT QUBUTS
-05bc HEBREW POINT DAGESH OR MAPIQ
-05bd HEBREW POINT METEG
-05be HEBREW PUNCTUATION MAQAF
-05bf HEBREW POINT RAFE
-05c0 HEBREW PUNCTUATION PASEQ
-05c1 HEBREW POINT SHIN DOT
-05c2 HEBREW POINT SIN DOT
-05c3 HEBREW PUNCTUATION SOF PASUQ
-05c4 HEBREW MARK UPPER DOT
-05d0 HEBREW LETTER ALEF
-05d1 HEBREW LETTER BET
-05d2 HEBREW LETTER GIMEL
-05d3 HEBREW LETTER DALET
-05d4 HEBREW LETTER HE
-05d5 HEBREW LETTER VAV
-05d6 HEBREW LETTER ZAYIN
-05d7 HEBREW LETTER HET
-05d8 HEBREW LETTER TET
-05d9 HEBREW LETTER YOD
-05da HEBREW LETTER FINAL KAF
-05db HEBREW LETTER KAF
-05dc HEBREW LETTER LAMED
-05dd HEBREW LETTER FINAL MEM
-05de HEBREW LETTER MEM
-05df HEBREW LETTER FINAL NUN
-05e0 HEBREW LETTER NUN
-05e1 HEBREW LETTER SAMEKH
-05e2 HEBREW LETTER AYIN
-05e3 HEBREW LETTER FINAL PE
-05e4 HEBREW LETTER PE
-05e5 HEBREW LETTER FINAL TSADI
-05e6 HEBREW LETTER TSADI
-05e7 HEBREW LETTER QOF
-05e8 HEBREW LETTER RESH
-05e9 HEBREW LETTER SHIN
-05ea HEBREW LETTER TAV
-05f0 HEBREW LIGATURE YIDDISH DOUBLE VAV
-05f1 HEBREW LIGATURE YIDDISH VAV YOD
-05f2 HEBREW LIGATURE YIDDISH DOUBLE YOD
-05f3 HEBREW PUNCTUATION GERESH
-05f4 HEBREW PUNCTUATION GERSHAYIM
-060c ARABIC COMMA
-061b ARABIC SEMICOLON
-061f ARABIC QUESTION MARK
-0621 ARABIC LETTER HAMZA
-0622 ARABIC LETTER ALEF WITH MADDA ABOVE
-0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
-0624 ARABIC LETTER WAW WITH HAMZA ABOVE
-0625 ARABIC LETTER ALEF WITH HAMZA BELOW
-0626 ARABIC LETTER YEH WITH HAMZA ABOVE
-0627 ARABIC LETTER ALEF
-0628 ARABIC LETTER BEH
-0629 ARABIC LETTER TEH MARBUTA
-062a ARABIC LETTER TEH
-062b ARABIC LETTER THEH
-062c ARABIC LETTER JEEM
-062d ARABIC LETTER HAH
-062e ARABIC LETTER KHAH
-062f ARABIC LETTER DAL
-0630 ARABIC LETTER THAL
-0631 ARABIC LETTER REH
-0632 ARABIC LETTER ZAIN
-0633 ARABIC LETTER SEEN
-0634 ARABIC LETTER SHEEN
-0635 ARABIC LETTER SAD
-0636 ARABIC LETTER DAD
-0637 ARABIC LETTER TAH
-0638 ARABIC LETTER ZAH
-0639 ARABIC LETTER AIN
-063a ARABIC LETTER GHAIN
-0640 ARABIC TATWEEL
-0641 ARABIC LETTER FEH
-0642 ARABIC LETTER QAF
-0643 ARABIC LETTER KAF
-0644 ARABIC LETTER LAM
-0645 ARABIC LETTER MEEM
-0646 ARABIC LETTER NOON
-0647 ARABIC LETTER HEH
-0648 ARABIC LETTER WAW
-0649 ARABIC LETTER ALEF MAKSURA
-064a ARABIC LETTER YEH
-064b ARABIC FATHATAN
-064c ARABIC DAMMATAN
-064d ARABIC KASRATAN
-064e ARABIC FATHA
-064f ARABIC DAMMA
-0650 ARABIC KASRA
-0651 ARABIC SHADDA
-0652 ARABIC SUKUN
-0653 ARABIC MADDAH ABOVE
-0654 ARABIC HAMZA ABOVE
-0655 ARABIC HAMZA BELOW
-0660 ARABIC-INDIC DIGIT ZERO
-0661 ARABIC-INDIC DIGIT ONE
-0662 ARABIC-INDIC DIGIT TWO
-0663 ARABIC-INDIC DIGIT THREE
-0664 ARABIC-INDIC DIGIT FOUR
-0665 ARABIC-INDIC DIGIT FIVE
-0666 ARABIC-INDIC DIGIT SIX
-0667 ARABIC-INDIC DIGIT SEVEN
-0668 ARABIC-INDIC DIGIT EIGHT
-0669 ARABIC-INDIC DIGIT NINE
-066a ARABIC PERCENT SIGN
-066b ARABIC DECIMAL SEPARATOR
-066c ARABIC THOUSANDS SEPARATOR
-066d ARABIC FIVE POINTED STAR
-0670 ARABIC LETTER SUPERSCRIPT ALEF
-0671 ARABIC LETTER ALEF WASLA
-0672 ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
-0673 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
-0674 ARABIC LETTER HIGH HAMZA
-0675 ARABIC LETTER HIGH HAMZA ALEF
-0676 ARABIC LETTER HIGH HAMZA WAW
-0677 ARABIC LETTER U WITH HAMZA ABOVE
-0678 ARABIC LETTER HIGH HAMZA YEH
-0679 ARABIC LETTER TTEH
-067a ARABIC LETTER TTEHEH
-067b ARABIC LETTER BEEH
-067c ARABIC LETTER TEH WITH RING
-067d ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
-067e ARABIC LETTER PEH
-067f ARABIC LETTER TEHEH
-0680 ARABIC LETTER BEHEH
-0681 ARABIC LETTER HAH WITH HAMZA ABOVE
-0682 ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
-0683 ARABIC LETTER NYEH
-0684 ARABIC LETTER DYEH
-0685 ARABIC LETTER HAH WITH THREE DOTS ABOVE
-0686 ARABIC LETTER TCHEH
-0687 ARABIC LETTER TCHEHEH
-0688 ARABIC LETTER DDAL
-0689 ARABIC LETTER DAL WITH RING
-068a ARABIC LETTER DAL WITH DOT BELOW
-068b ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
-068c ARABIC LETTER DAHAL
-068d ARABIC LETTER DDAHAL
-068e ARABIC LETTER DUL
-068f ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
-0690 ARABIC LETTER DAL WITH FOUR DOTS ABOVE
-0691 ARABIC LETTER RREH
-0692 ARABIC LETTER REH WITH SMALL V
-0693 ARABIC LETTER REH WITH RING
-0694 ARABIC LETTER REH WITH DOT BELOW
-0695 ARABIC LETTER REH WITH SMALL V BELOW
-0696 ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
-0697 ARABIC LETTER REH WITH TWO DOTS ABOVE
-0698 ARABIC LETTER JEH
-0699 ARABIC LETTER REH WITH FOUR DOTS ABOVE
-069a ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
-069b ARABIC LETTER SEEN WITH THREE DOTS BELOW
-069c ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
-069d ARABIC LETTER SAD WITH TWO DOTS BELOW
-069e ARABIC LETTER SAD WITH THREE DOTS ABOVE
-069f ARABIC LETTER TAH WITH THREE DOTS ABOVE
-06a0 ARABIC LETTER AIN WITH THREE DOTS ABOVE
-06a1 ARABIC LETTER DOTLESS FEH
-06a2 ARABIC LETTER FEH WITH DOT MOVED BELOW
-06a3 ARABIC LETTER FEH WITH DOT BELOW
-06a4 ARABIC LETTER VEH
-06a5 ARABIC LETTER FEH WITH THREE DOTS BELOW
-06a6 ARABIC LETTER PEHEH
-06a7 ARABIC LETTER QAF WITH DOT ABOVE
-06a8 ARABIC LETTER QAF WITH THREE DOTS ABOVE
-06a9 ARABIC LETTER KEHEH
-06aa ARABIC LETTER SWASH KAF
-06ab ARABIC LETTER KAF WITH RING
-06ac ARABIC LETTER KAF WITH DOT ABOVE
-06ad ARABIC LETTER NG
-06ae ARABIC LETTER KAF WITH THREE DOTS BELOW
-06af ARABIC LETTER GAF
-06b0 ARABIC LETTER GAF WITH RING
-06b1 ARABIC LETTER NGOEH
-06b2 ARABIC LETTER GAF WITH TWO DOTS BELOW
-06b3 ARABIC LETTER GUEH
-06b4 ARABIC LETTER GAF WITH THREE DOTS ABOVE
-06b5 ARABIC LETTER LAM WITH SMALL V
-06b6 ARABIC LETTER LAM WITH DOT ABOVE
-06b7 ARABIC LETTER LAM WITH THREE DOTS ABOVE
-06b8 ARABIC LETTER LAM WITH THREE DOTS BELOW
-06b9 ARABIC LETTER NOON WITH DOT BELOW
-06ba ARABIC LETTER NOON GHUNNA
-06bb ARABIC LETTER RNOON
-06bc ARABIC LETTER NOON WITH RING
-06bd ARABIC LETTER NOON WITH THREE DOTS ABOVE
-06be ARABIC LETTER HEH DOACHASHMEE
-06bf ARABIC LETTER TCHEH WITH DOT ABOVE
-06c0 ARABIC LETTER HEH WITH YEH ABOVE
-06c1 ARABIC LETTER HEH GOAL
-06c2 ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
-06c3 ARABIC LETTER TEH MARBUTA GOAL
-06c4 ARABIC LETTER WAW WITH RING
-06c5 ARABIC LETTER KIRGHIZ OE
-06c6 ARABIC LETTER OE
-06c7 ARABIC LETTER U
-06c8 ARABIC LETTER YU
-06c9 ARABIC LETTER KIRGHIZ YU
-06ca ARABIC LETTER WAW WITH TWO DOTS ABOVE
-06cb ARABIC LETTER VE
-06cc ARABIC LETTER FARSI YEH
-06cd ARABIC LETTER YEH WITH TAIL
-06ce ARABIC LETTER YEH WITH SMALL V
-06cf ARABIC LETTER WAW WITH DOT ABOVE
-06d0 ARABIC LETTER E
-06d1 ARABIC LETTER YEH WITH THREE DOTS BELOW
-06d2 ARABIC LETTER YEH BARREE
-06d3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
-06d4 ARABIC FULL STOP
-06d5 ARABIC LETTER AE
-06d6 ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
-06d7 ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
-06d8 ARABIC SMALL HIGH MEEM INITIAL FORM
-06d9 ARABIC SMALL HIGH LAM ALEF
-06da ARABIC SMALL HIGH JEEM
-06db ARABIC SMALL HIGH THREE DOTS
-06dc ARABIC SMALL HIGH SEEN
-06dd ARABIC END OF AYAH
-06de ARABIC START OF RUB EL HIZB
-06df ARABIC SMALL HIGH ROUNDED ZERO
-06e0 ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
-06e1 ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
-06e2 ARABIC SMALL HIGH MEEM ISOLATED FORM
-06e3 ARABIC SMALL LOW SEEN
-06e4 ARABIC SMALL HIGH MADDA
-06e5 ARABIC SMALL WAW
-06e6 ARABIC SMALL YEH
-06e7 ARABIC SMALL HIGH YEH
-06e8 ARABIC SMALL HIGH NOON
-06e9 ARABIC PLACE OF SAJDAH
-06ea ARABIC EMPTY CENTRE LOW STOP
-06eb ARABIC EMPTY CENTRE HIGH STOP
-06ec ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
-06ed ARABIC SMALL LOW MEEM
-06f0 EXTENDED ARABIC-INDIC DIGIT ZERO
-06f1 EXTENDED ARABIC-INDIC DIGIT ONE
-06f2 EXTENDED ARABIC-INDIC DIGIT TWO
-06f3 EXTENDED ARABIC-INDIC DIGIT THREE
-06f4 EXTENDED ARABIC-INDIC DIGIT FOUR
-06f5 EXTENDED ARABIC-INDIC DIGIT FIVE
-06f6 EXTENDED ARABIC-INDIC DIGIT SIX
-06f7 EXTENDED ARABIC-INDIC DIGIT SEVEN
-06f8 EXTENDED ARABIC-INDIC DIGIT EIGHT
-06f9 EXTENDED ARABIC-INDIC DIGIT NINE
-06fa ARABIC LETTER SHEEN WITH DOT BELOW
-06fb ARABIC LETTER DAD WITH DOT BELOW
-06fc ARABIC LETTER GHAIN WITH DOT BELOW
-06fd ARABIC SIGN SINDHI AMPERSAND
-06fe ARABIC SIGN SINDHI POSTPOSITION MEN
-0700 SYRIAC END OF PARAGRAPH
-0701 SYRIAC SUPRALINEAR FULL STOP
-0702 SYRIAC SUBLINEAR FULL STOP
-0703 SYRIAC SUPRALINEAR COLON
-0704 SYRIAC SUBLINEAR COLON
-0705 SYRIAC HORIZONTAL COLON
-0706 SYRIAC COLON SKEWED LEFT
-0707 SYRIAC COLON SKEWED RIGHT
-0708 SYRIAC SUPRALINEAR COLON SKEWED LEFT
-0709 SYRIAC SUBLINEAR COLON SKEWED RIGHT
-070a SYRIAC CONTRACTION
-070b SYRIAC HARKLEAN OBELUS
-070c SYRIAC HARKLEAN METOBELUS
-070d SYRIAC HARKLEAN ASTERISCUS
-070f SYRIAC ABBREVIATION MARK
-0710 SYRIAC LETTER ALAPH
-0711 SYRIAC LETTER SUPERSCRIPT ALAPH
-0712 SYRIAC LETTER BETH
-0713 SYRIAC LETTER GAMAL
-0714 SYRIAC LETTER GAMAL GARSHUNI
-0715 SYRIAC LETTER DALATH
-0716 SYRIAC LETTER DOTLESS DALATH RISH
-0717 SYRIAC LETTER HE
-0718 SYRIAC LETTER WAW
-0719 SYRIAC LETTER ZAIN
-071a SYRIAC LETTER HETH
-071b SYRIAC LETTER TETH
-071c SYRIAC LETTER TETH GARSHUNI
-071d SYRIAC LETTER YUDH
-071e SYRIAC LETTER YUDH HE
-071f SYRIAC LETTER KAPH
-0720 SYRIAC LETTER LAMADH
-0721 SYRIAC LETTER MIM
-0722 SYRIAC LETTER NUN
-0723 SYRIAC LETTER SEMKATH
-0724 SYRIAC LETTER FINAL SEMKATH
-0725 SYRIAC LETTER E
-0726 SYRIAC LETTER PE
-0727 SYRIAC LETTER REVERSED PE
-0728 SYRIAC LETTER SADHE
-0729 SYRIAC LETTER QAPH
-072a SYRIAC LETTER RISH
-072b SYRIAC LETTER SHIN
-072c SYRIAC LETTER TAW
-0730 SYRIAC PTHAHA ABOVE
-0731 SYRIAC PTHAHA BELOW
-0732 SYRIAC PTHAHA DOTTED
-0733 SYRIAC ZQAPHA ABOVE
-0734 SYRIAC ZQAPHA BELOW
-0735 SYRIAC ZQAPHA DOTTED
-0736 SYRIAC RBASA ABOVE
-0737 SYRIAC RBASA BELOW
-0738 SYRIAC DOTTED ZLAMA HORIZONTAL
-0739 SYRIAC DOTTED ZLAMA ANGULAR
-073a SYRIAC HBASA ABOVE
-073b SYRIAC HBASA BELOW
-073c SYRIAC HBASA-ESASA DOTTED
-073d SYRIAC ESASA ABOVE
-073e SYRIAC ESASA BELOW
-073f SYRIAC RWAHA
-0740 SYRIAC FEMININE DOT
-0741 SYRIAC QUSHSHAYA
-0742 SYRIAC RUKKAKHA
-0743 SYRIAC TWO VERTICAL DOTS ABOVE
-0744 SYRIAC TWO VERTICAL DOTS BELOW
-0745 SYRIAC THREE DOTS ABOVE
-0746 SYRIAC THREE DOTS BELOW
-0747 SYRIAC OBLIQUE LINE ABOVE
-0748 SYRIAC OBLIQUE LINE BELOW
-0749 SYRIAC MUSIC
-074a SYRIAC BARREKH
-0780 THAANA LETTER HAA
-0781 THAANA LETTER SHAVIYANI
-0782 THAANA LETTER NOONU
-0783 THAANA LETTER RAA
-0784 THAANA LETTER BAA
-0785 THAANA LETTER LHAVIYANI
-0786 THAANA LETTER KAAFU
-0787 THAANA LETTER ALIFU
-0788 THAANA LETTER VAAVU
-0789 THAANA LETTER MEEMU
-078a THAANA LETTER FAAFU
-078b THAANA LETTER DHAALU
-078c THAANA LETTER THAA
-078d THAANA LETTER LAAMU
-078e THAANA LETTER GAAFU
-078f THAANA LETTER GNAVIYANI
-0790 THAANA LETTER SEENU
-0791 THAANA LETTER DAVIYANI
-0792 THAANA LETTER ZAVIYANI
-0793 THAANA LETTER TAVIYANI
-0794 THAANA LETTER YAA
-0795 THAANA LETTER PAVIYANI
-0796 THAANA LETTER JAVIYANI
-0797 THAANA LETTER CHAVIYANI
-0798 THAANA LETTER TTAA
-0799 THAANA LETTER HHAA
-079a THAANA LETTER KHAA
-079b THAANA LETTER THAALU
-079c THAANA LETTER ZAA
-079d THAANA LETTER SHEENU
-079e THAANA LETTER SAADHU
-079f THAANA LETTER DAADHU
-07a0 THAANA LETTER TO
-07a1 THAANA LETTER ZO
-07a2 THAANA LETTER AINU
-07a3 THAANA LETTER GHAINU
-07a4 THAANA LETTER QAAFU
-07a5 THAANA LETTER WAAVU
-07a6 THAANA ABAFILI
-07a7 THAANA AABAAFILI
-07a8 THAANA IBIFILI
-07a9 THAANA EEBEEFILI
-07aa THAANA UBUFILI
-07ab THAANA OOBOOFILI
-07ac THAANA EBEFILI
-07ad THAANA EYBEYFILI
-07ae THAANA OBOFILI
-07af THAANA OABOAFILI
-07b0 THAANA SUKUN
-0901 DEVANAGARI SIGN CANDRABINDU
-0902 DEVANAGARI SIGN ANUSVARA
-0903 DEVANAGARI SIGN VISARGA
-0905 DEVANAGARI LETTER A
-0906 DEVANAGARI LETTER AA
-0907 DEVANAGARI LETTER I
-0908 DEVANAGARI LETTER II
-0909 DEVANAGARI LETTER U
-090a DEVANAGARI LETTER UU
-090b DEVANAGARI LETTER VOCALIC R
-090c DEVANAGARI LETTER VOCALIC L
-090d DEVANAGARI LETTER CANDRA E
-090e DEVANAGARI LETTER SHORT E
-090f DEVANAGARI LETTER E
-0910 DEVANAGARI LETTER AI
-0911 DEVANAGARI LETTER CANDRA O
-0912 DEVANAGARI LETTER SHORT O
-0913 DEVANAGARI LETTER O
-0914 DEVANAGARI LETTER AU
-0915 DEVANAGARI LETTER KA
-0916 DEVANAGARI LETTER KHA
-0917 DEVANAGARI LETTER GA
-0918 DEVANAGARI LETTER GHA
-0919 DEVANAGARI LETTER NGA
-091a DEVANAGARI LETTER CA
-091b DEVANAGARI LETTER CHA
-091c DEVANAGARI LETTER JA
-091d DEVANAGARI LETTER JHA
-091e DEVANAGARI LETTER NYA
-091f DEVANAGARI LETTER TTA
-0920 DEVANAGARI LETTER TTHA
-0921 DEVANAGARI LETTER DDA
-0922 DEVANAGARI LETTER DDHA
-0923 DEVANAGARI LETTER NNA
-0924 DEVANAGARI LETTER TA
-0925 DEVANAGARI LETTER THA
-0926 DEVANAGARI LETTER DA
-0927 DEVANAGARI LETTER DHA
-0928 DEVANAGARI LETTER NA
-0929 DEVANAGARI LETTER NNNA
-092a DEVANAGARI LETTER PA
-092b DEVANAGARI LETTER PHA
-092c DEVANAGARI LETTER BA
-092d DEVANAGARI LETTER BHA
-092e DEVANAGARI LETTER MA
-092f DEVANAGARI LETTER YA
-0930 DEVANAGARI LETTER RA
-0931 DEVANAGARI LETTER RRA
-0932 DEVANAGARI LETTER LA
-0933 DEVANAGARI LETTER LLA
-0934 DEVANAGARI LETTER LLLA
-0935 DEVANAGARI LETTER VA
-0936 DEVANAGARI LETTER SHA
-0937 DEVANAGARI LETTER SSA
-0938 DEVANAGARI LETTER SA
-0939 DEVANAGARI LETTER HA
-093c DEVANAGARI SIGN NUKTA
-093d DEVANAGARI SIGN AVAGRAHA
-093e DEVANAGARI VOWEL SIGN AA
-093f DEVANAGARI VOWEL SIGN I
-0940 DEVANAGARI VOWEL SIGN II
-0941 DEVANAGARI VOWEL SIGN U
-0942 DEVANAGARI VOWEL SIGN UU
-0943 DEVANAGARI VOWEL SIGN VOCALIC R
-0944 DEVANAGARI VOWEL SIGN VOCALIC RR
-0945 DEVANAGARI VOWEL SIGN CANDRA E
-0946 DEVANAGARI VOWEL SIGN SHORT E
-0947 DEVANAGARI VOWEL SIGN E
-0948 DEVANAGARI VOWEL SIGN AI
-0949 DEVANAGARI VOWEL SIGN CANDRA O
-094a DEVANAGARI VOWEL SIGN SHORT O
-094b DEVANAGARI VOWEL SIGN O
-094c DEVANAGARI VOWEL SIGN AU
-094d DEVANAGARI SIGN VIRAMA
-0950 DEVANAGARI OM
-0951 DEVANAGARI STRESS SIGN UDATTA
-0952 DEVANAGARI STRESS SIGN ANUDATTA
-0953 DEVANAGARI GRAVE ACCENT
-0954 DEVANAGARI ACUTE ACCENT
-0958 DEVANAGARI LETTER QA
-0959 DEVANAGARI LETTER KHHA
-095a DEVANAGARI LETTER GHHA
-095b DEVANAGARI LETTER ZA
-095c DEVANAGARI LETTER DDDHA
-095d DEVANAGARI LETTER RHA
-095e DEVANAGARI LETTER FA
-095f DEVANAGARI LETTER YYA
-0960 DEVANAGARI LETTER VOCALIC RR
-0961 DEVANAGARI LETTER VOCALIC LL
-0962 DEVANAGARI VOWEL SIGN VOCALIC L
-0963 DEVANAGARI VOWEL SIGN VOCALIC LL
-0964 DEVANAGARI DANDA
-0965 DEVANAGARI DOUBLE DANDA
-0966 DEVANAGARI DIGIT ZERO
-0967 DEVANAGARI DIGIT ONE
-0968 DEVANAGARI DIGIT TWO
-0969 DEVANAGARI DIGIT THREE
-096a DEVANAGARI DIGIT FOUR
-096b DEVANAGARI DIGIT FIVE
-096c DEVANAGARI DIGIT SIX
-096d DEVANAGARI DIGIT SEVEN
-096e DEVANAGARI DIGIT EIGHT
-096f DEVANAGARI DIGIT NINE
-0970 DEVANAGARI ABBREVIATION SIGN
-0981 BENGALI SIGN CANDRABINDU
-0982 BENGALI SIGN ANUSVARA
-0983 BENGALI SIGN VISARGA
-0985 BENGALI LETTER A
-0986 BENGALI LETTER AA
-0987 BENGALI LETTER I
-0988 BENGALI LETTER II
-0989 BENGALI LETTER U
-098a BENGALI LETTER UU
-098b BENGALI LETTER VOCALIC R
-098c BENGALI LETTER VOCALIC L
-098f BENGALI LETTER E
-0990 BENGALI LETTER AI
-0993 BENGALI LETTER O
-0994 BENGALI LETTER AU
-0995 BENGALI LETTER KA
-0996 BENGALI LETTER KHA
-0997 BENGALI LETTER GA
-0998 BENGALI LETTER GHA
-0999 BENGALI LETTER NGA
-099a BENGALI LETTER CA
-099b BENGALI LETTER CHA
-099c BENGALI LETTER JA
-099d BENGALI LETTER JHA
-099e BENGALI LETTER NYA
-099f BENGALI LETTER TTA
-09a0 BENGALI LETTER TTHA
-09a1 BENGALI LETTER DDA
-09a2 BENGALI LETTER DDHA
-09a3 BENGALI LETTER NNA
-09a4 BENGALI LETTER TA
-09a5 BENGALI LETTER THA
-09a6 BENGALI LETTER DA
-09a7 BENGALI LETTER DHA
-09a8 BENGALI LETTER NA
-09aa BENGALI LETTER PA
-09ab BENGALI LETTER PHA
-09ac BENGALI LETTER BA
-09ad BENGALI LETTER BHA
-09ae BENGALI LETTER MA
-09af BENGALI LETTER YA
-09b0 BENGALI LETTER RA
-09b2 BENGALI LETTER LA
-09b6 BENGALI LETTER SHA
-09b7 BENGALI LETTER SSA
-09b8 BENGALI LETTER SA
-09b9 BENGALI LETTER HA
-09bc BENGALI SIGN NUKTA
-09be BENGALI VOWEL SIGN AA
-09bf BENGALI VOWEL SIGN I
-09c0 BENGALI VOWEL SIGN II
-09c1 BENGALI VOWEL SIGN U
-09c2 BENGALI VOWEL SIGN UU
-09c3 BENGALI VOWEL SIGN VOCALIC R
-09c4 BENGALI VOWEL SIGN VOCALIC RR
-09c7 BENGALI VOWEL SIGN E
-09c8 BENGALI VOWEL SIGN AI
-09cb BENGALI VOWEL SIGN O
-09cc BENGALI VOWEL SIGN AU
-09cd BENGALI SIGN VIRAMA
-09d7 BENGALI AU LENGTH MARK
-09dc BENGALI LETTER RRA
-09dd BENGALI LETTER RHA
-09df BENGALI LETTER YYA
-09e0 BENGALI LETTER VOCALIC RR
-09e1 BENGALI LETTER VOCALIC LL
-09e2 BENGALI VOWEL SIGN VOCALIC L
-09e3 BENGALI VOWEL SIGN VOCALIC LL
-09e6 BENGALI DIGIT ZERO
-09e7 BENGALI DIGIT ONE
-09e8 BENGALI DIGIT TWO
-09e9 BENGALI DIGIT THREE
-09ea BENGALI DIGIT FOUR
-09eb BENGALI DIGIT FIVE
-09ec BENGALI DIGIT SIX
-09ed BENGALI DIGIT SEVEN
-09ee BENGALI DIGIT EIGHT
-09ef BENGALI DIGIT NINE
-09f0 BENGALI LETTER RA WITH MIDDLE DIAGONAL
-09f1 BENGALI LETTER RA WITH LOWER DIAGONAL
-09f2 BENGALI RUPEE MARK
-09f3 BENGALI RUPEE SIGN
-09f4 BENGALI CURRENCY NUMERATOR ONE
-09f5 BENGALI CURRENCY NUMERATOR TWO
-09f6 BENGALI CURRENCY NUMERATOR THREE
-09f7 BENGALI CURRENCY NUMERATOR FOUR
-09f8 BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
-09f9 BENGALI CURRENCY DENOMINATOR SIXTEEN
-09fa BENGALI ISSHAR
-0a02 GURMUKHI SIGN BINDI
-0a05 GURMUKHI LETTER A
-0a06 GURMUKHI LETTER AA
-0a07 GURMUKHI LETTER I
-0a08 GURMUKHI LETTER II
-0a09 GURMUKHI LETTER U
-0a0a GURMUKHI LETTER UU
-0a0f GURMUKHI LETTER EE
-0a10 GURMUKHI LETTER AI
-0a13 GURMUKHI LETTER OO
-0a14 GURMUKHI LETTER AU
-0a15 GURMUKHI LETTER KA
-0a16 GURMUKHI LETTER KHA
-0a17 GURMUKHI LETTER GA
-0a18 GURMUKHI LETTER GHA
-0a19 GURMUKHI LETTER NGA
-0a1a GURMUKHI LETTER CA
-0a1b GURMUKHI LETTER CHA
-0a1c GURMUKHI LETTER JA
-0a1d GURMUKHI LETTER JHA
-0a1e GURMUKHI LETTER NYA
-0a1f GURMUKHI LETTER TTA
-0a20 GURMUKHI LETTER TTHA
-0a21 GURMUKHI LETTER DDA
-0a22 GURMUKHI LETTER DDHA
-0a23 GURMUKHI LETTER NNA
-0a24 GURMUKHI LETTER TA
-0a25 GURMUKHI LETTER THA
-0a26 GURMUKHI LETTER DA
-0a27 GURMUKHI LETTER DHA
-0a28 GURMUKHI LETTER NA
-0a2a GURMUKHI LETTER PA
-0a2b GURMUKHI LETTER PHA
-0a2c GURMUKHI LETTER BA
-0a2d GURMUKHI LETTER BHA
-0a2e GURMUKHI LETTER MA
-0a2f GURMUKHI LETTER YA
-0a30 GURMUKHI LETTER RA
-0a32 GURMUKHI LETTER LA
-0a33 GURMUKHI LETTER LLA
-0a35 GURMUKHI LETTER VA
-0a36 GURMUKHI LETTER SHA
-0a38 GURMUKHI LETTER SA
-0a39 GURMUKHI LETTER HA
-0a3c GURMUKHI SIGN NUKTA
-0a3e GURMUKHI VOWEL SIGN AA
-0a3f GURMUKHI VOWEL SIGN I
-0a40 GURMUKHI VOWEL SIGN II
-0a41 GURMUKHI VOWEL SIGN U
-0a42 GURMUKHI VOWEL SIGN UU
-0a47 GURMUKHI VOWEL SIGN EE
-0a48 GURMUKHI VOWEL SIGN AI
-0a4b GURMUKHI VOWEL SIGN OO
-0a4c GURMUKHI VOWEL SIGN AU
-0a4d GURMUKHI SIGN VIRAMA
-0a59 GURMUKHI LETTER KHHA
-0a5a GURMUKHI LETTER GHHA
-0a5b GURMUKHI LETTER ZA
-0a5c GURMUKHI LETTER RRA
-0a5e GURMUKHI LETTER FA
-0a66 GURMUKHI DIGIT ZERO
-0a67 GURMUKHI DIGIT ONE
-0a68 GURMUKHI DIGIT TWO
-0a69 GURMUKHI DIGIT THREE
-0a6a GURMUKHI DIGIT FOUR
-0a6b GURMUKHI DIGIT FIVE
-0a6c GURMUKHI DIGIT SIX
-0a6d GURMUKHI DIGIT SEVEN
-0a6e GURMUKHI DIGIT EIGHT
-0a6f GURMUKHI DIGIT NINE
-0a70 GURMUKHI TIPPI
-0a71 GURMUKHI ADDAK
-0a72 GURMUKHI IRI
-0a73 GURMUKHI URA
-0a74 GURMUKHI EK ONKAR
-0a81 GUJARATI SIGN CANDRABINDU
-0a82 GUJARATI SIGN ANUSVARA
-0a83 GUJARATI SIGN VISARGA
-0a85 GUJARATI LETTER A
-0a86 GUJARATI LETTER AA
-0a87 GUJARATI LETTER I
-0a88 GUJARATI LETTER II
-0a89 GUJARATI LETTER U
-0a8a GUJARATI LETTER UU
-0a8b GUJARATI LETTER VOCALIC R
-0a8d GUJARATI VOWEL CANDRA E
-0a8f GUJARATI LETTER E
-0a90 GUJARATI LETTER AI
-0a91 GUJARATI VOWEL CANDRA O
-0a93 GUJARATI LETTER O
-0a94 GUJARATI LETTER AU
-0a95 GUJARATI LETTER KA
-0a96 GUJARATI LETTER KHA
-0a97 GUJARATI LETTER GA
-0a98 GUJARATI LETTER GHA
-0a99 GUJARATI LETTER NGA
-0a9a GUJARATI LETTER CA
-0a9b GUJARATI LETTER CHA
-0a9c GUJARATI LETTER JA
-0a9d GUJARATI LETTER JHA
-0a9e GUJARATI LETTER NYA
-0a9f GUJARATI LETTER TTA
-0aa0 GUJARATI LETTER TTHA
-0aa1 GUJARATI LETTER DDA
-0aa2 GUJARATI LETTER DDHA
-0aa3 GUJARATI LETTER NNA
-0aa4 GUJARATI LETTER TA
-0aa5 GUJARATI LETTER THA
-0aa6 GUJARATI LETTER DA
-0aa7 GUJARATI LETTER DHA
-0aa8 GUJARATI LETTER NA
-0aaa GUJARATI LETTER PA
-0aab GUJARATI LETTER PHA
-0aac GUJARATI LETTER BA
-0aad GUJARATI LETTER BHA
-0aae GUJARATI LETTER MA
-0aaf GUJARATI LETTER YA
-0ab0 GUJARATI LETTER RA
-0ab2 GUJARATI LETTER LA
-0ab3 GUJARATI LETTER LLA
-0ab5 GUJARATI LETTER VA
-0ab6 GUJARATI LETTER SHA
-0ab7 GUJARATI LETTER SSA
-0ab8 GUJARATI LETTER SA
-0ab9 GUJARATI LETTER HA
-0abc GUJARATI SIGN NUKTA
-0abd GUJARATI SIGN AVAGRAHA
-0abe GUJARATI VOWEL SIGN AA
-0abf GUJARATI VOWEL SIGN I
-0ac0 GUJARATI VOWEL SIGN II
-0ac1 GUJARATI VOWEL SIGN U
-0ac2 GUJARATI VOWEL SIGN UU
-0ac3 GUJARATI VOWEL SIGN VOCALIC R
-0ac4 GUJARATI VOWEL SIGN VOCALIC RR
-0ac5 GUJARATI VOWEL SIGN CANDRA E
-0ac7 GUJARATI VOWEL SIGN E
-0ac8 GUJARATI VOWEL SIGN AI
-0ac9 GUJARATI VOWEL SIGN CANDRA O
-0acb GUJARATI VOWEL SIGN O
-0acc GUJARATI VOWEL SIGN AU
-0acd GUJARATI SIGN VIRAMA
-0ad0 GUJARATI OM
-0ae0 GUJARATI LETTER VOCALIC RR
-0ae6 GUJARATI DIGIT ZERO
-0ae7 GUJARATI DIGIT ONE
-0ae8 GUJARATI DIGIT TWO
-0ae9 GUJARATI DIGIT THREE
-0aea GUJARATI DIGIT FOUR
-0aeb GUJARATI DIGIT FIVE
-0aec GUJARATI DIGIT SIX
-0aed GUJARATI DIGIT SEVEN
-0aee GUJARATI DIGIT EIGHT
-0aef GUJARATI DIGIT NINE
-0b01 ORIYA SIGN CANDRABINDU
-0b02 ORIYA SIGN ANUSVARA
-0b03 ORIYA SIGN VISARGA
-0b05 ORIYA LETTER A
-0b06 ORIYA LETTER AA
-0b07 ORIYA LETTER I
-0b08 ORIYA LETTER II
-0b09 ORIYA LETTER U
-0b0a ORIYA LETTER UU
-0b0b ORIYA LETTER VOCALIC R
-0b0c ORIYA LETTER VOCALIC L
-0b0f ORIYA LETTER E
-0b10 ORIYA LETTER AI
-0b13 ORIYA LETTER O
-0b14 ORIYA LETTER AU
-0b15 ORIYA LETTER KA
-0b16 ORIYA LETTER KHA
-0b17 ORIYA LETTER GA
-0b18 ORIYA LETTER GHA
-0b19 ORIYA LETTER NGA
-0b1a ORIYA LETTER CA
-0b1b ORIYA LETTER CHA
-0b1c ORIYA LETTER JA
-0b1d ORIYA LETTER JHA
-0b1e ORIYA LETTER NYA
-0b1f ORIYA LETTER TTA
-0b20 ORIYA LETTER TTHA
-0b21 ORIYA LETTER DDA
-0b22 ORIYA LETTER DDHA
-0b23 ORIYA LETTER NNA
-0b24 ORIYA LETTER TA
-0b25 ORIYA LETTER THA
-0b26 ORIYA LETTER DA
-0b27 ORIYA LETTER DHA
-0b28 ORIYA LETTER NA
-0b2a ORIYA LETTER PA
-0b2b ORIYA LETTER PHA
-0b2c ORIYA LETTER BA
-0b2d ORIYA LETTER BHA
-0b2e ORIYA LETTER MA
-0b2f ORIYA LETTER YA
-0b30 ORIYA LETTER RA
-0b32 ORIYA LETTER LA
-0b33 ORIYA LETTER LLA
-0b36 ORIYA LETTER SHA
-0b37 ORIYA LETTER SSA
-0b38 ORIYA LETTER SA
-0b39 ORIYA LETTER HA
-0b3c ORIYA SIGN NUKTA
-0b3d ORIYA SIGN AVAGRAHA
-0b3e ORIYA VOWEL SIGN AA
-0b3f ORIYA VOWEL SIGN I
-0b40 ORIYA VOWEL SIGN II
-0b41 ORIYA VOWEL SIGN U
-0b42 ORIYA VOWEL SIGN UU
-0b43 ORIYA VOWEL SIGN VOCALIC R
-0b47 ORIYA VOWEL SIGN E
-0b48 ORIYA VOWEL SIGN AI
-0b4b ORIYA VOWEL SIGN O
-0b4c ORIYA VOWEL SIGN AU
-0b4d ORIYA SIGN VIRAMA
-0b56 ORIYA AI LENGTH MARK
-0b57 ORIYA AU LENGTH MARK
-0b5c ORIYA LETTER RRA
-0b5d ORIYA LETTER RHA
-0b5f ORIYA LETTER YYA
-0b60 ORIYA LETTER VOCALIC RR
-0b61 ORIYA LETTER VOCALIC LL
-0b66 ORIYA DIGIT ZERO
-0b67 ORIYA DIGIT ONE
-0b68 ORIYA DIGIT TWO
-0b69 ORIYA DIGIT THREE
-0b6a ORIYA DIGIT FOUR
-0b6b ORIYA DIGIT FIVE
-0b6c ORIYA DIGIT SIX
-0b6d ORIYA DIGIT SEVEN
-0b6e ORIYA DIGIT EIGHT
-0b6f ORIYA DIGIT NINE
-0b70 ORIYA ISSHAR
-0b82 TAMIL SIGN ANUSVARA
-0b83 TAMIL SIGN VISARGA
-0b85 TAMIL LETTER A
-0b86 TAMIL LETTER AA
-0b87 TAMIL LETTER I
-0b88 TAMIL LETTER II
-0b89 TAMIL LETTER U
-0b8a TAMIL LETTER UU
-0b8e TAMIL LETTER E
-0b8f TAMIL LETTER EE
-0b90 TAMIL LETTER AI
-0b92 TAMIL LETTER O
-0b93 TAMIL LETTER OO
-0b94 TAMIL LETTER AU
-0b95 TAMIL LETTER KA
-0b99 TAMIL LETTER NGA
-0b9a TAMIL LETTER CA
-0b9c TAMIL LETTER JA
-0b9e TAMIL LETTER NYA
-0b9f TAMIL LETTER TTA
-0ba3 TAMIL LETTER NNA
-0ba4 TAMIL LETTER TA
-0ba8 TAMIL LETTER NA
-0ba9 TAMIL LETTER NNNA
-0baa TAMIL LETTER PA
-0bae TAMIL LETTER MA
-0baf TAMIL LETTER YA
-0bb0 TAMIL LETTER RA
-0bb1 TAMIL LETTER RRA
-0bb2 TAMIL LETTER LA
-0bb3 TAMIL LETTER LLA
-0bb4 TAMIL LETTER LLLA
-0bb5 TAMIL LETTER VA
-0bb7 TAMIL LETTER SSA
-0bb8 TAMIL LETTER SA
-0bb9 TAMIL LETTER HA
-0bbe TAMIL VOWEL SIGN AA
-0bbf TAMIL VOWEL SIGN I
-0bc0 TAMIL VOWEL SIGN II
-0bc1 TAMIL VOWEL SIGN U
-0bc2 TAMIL VOWEL SIGN UU
-0bc6 TAMIL VOWEL SIGN E
-0bc7 TAMIL VOWEL SIGN EE
-0bc8 TAMIL VOWEL SIGN AI
-0bca TAMIL VOWEL SIGN O
-0bcb TAMIL VOWEL SIGN OO
-0bcc TAMIL VOWEL SIGN AU
-0bcd TAMIL SIGN VIRAMA
-0bd7 TAMIL AU LENGTH MARK
-0be7 TAMIL DIGIT ONE
-0be8 TAMIL DIGIT TWO
-0be9 TAMIL DIGIT THREE
-0bea TAMIL DIGIT FOUR
-0beb TAMIL DIGIT FIVE
-0bec TAMIL DIGIT SIX
-0bed TAMIL DIGIT SEVEN
-0bee TAMIL DIGIT EIGHT
-0bef TAMIL DIGIT NINE
-0bf0 TAMIL NUMBER TEN
-0bf1 TAMIL NUMBER ONE HUNDRED
-0bf2 TAMIL NUMBER ONE THOUSAND
-0c01 TELUGU SIGN CANDRABINDU
-0c02 TELUGU SIGN ANUSVARA
-0c03 TELUGU SIGN VISARGA
-0c05 TELUGU LETTER A
-0c06 TELUGU LETTER AA
-0c07 TELUGU LETTER I
-0c08 TELUGU LETTER II
-0c09 TELUGU LETTER U
-0c0a TELUGU LETTER UU
-0c0b TELUGU LETTER VOCALIC R
-0c0c TELUGU LETTER VOCALIC L
-0c0e TELUGU LETTER E
-0c0f TELUGU LETTER EE
-0c10 TELUGU LETTER AI
-0c12 TELUGU LETTER O
-0c13 TELUGU LETTER OO
-0c14 TELUGU LETTER AU
-0c15 TELUGU LETTER KA
-0c16 TELUGU LETTER KHA
-0c17 TELUGU LETTER GA
-0c18 TELUGU LETTER GHA
-0c19 TELUGU LETTER NGA
-0c1a TELUGU LETTER CA
-0c1b TELUGU LETTER CHA
-0c1c TELUGU LETTER JA
-0c1d TELUGU LETTER JHA
-0c1e TELUGU LETTER NYA
-0c1f TELUGU LETTER TTA
-0c20 TELUGU LETTER TTHA
-0c21 TELUGU LETTER DDA
-0c22 TELUGU LETTER DDHA
-0c23 TELUGU LETTER NNA
-0c24 TELUGU LETTER TA
-0c25 TELUGU LETTER THA
-0c26 TELUGU LETTER DA
-0c27 TELUGU LETTER DHA
-0c28 TELUGU LETTER NA
-0c2a TELUGU LETTER PA
-0c2b TELUGU LETTER PHA
-0c2c TELUGU LETTER BA
-0c2d TELUGU LETTER BHA
-0c2e TELUGU LETTER MA
-0c2f TELUGU LETTER YA
-0c30 TELUGU LETTER RA
-0c31 TELUGU LETTER RRA
-0c32 TELUGU LETTER LA
-0c33 TELUGU LETTER LLA
-0c35 TELUGU LETTER VA
-0c36 TELUGU LETTER SHA
-0c37 TELUGU LETTER SSA
-0c38 TELUGU LETTER SA
-0c39 TELUGU LETTER HA
-0c3e TELUGU VOWEL SIGN AA
-0c3f TELUGU VOWEL SIGN I
-0c40 TELUGU VOWEL SIGN II
-0c41 TELUGU VOWEL SIGN U
-0c42 TELUGU VOWEL SIGN UU
-0c43 TELUGU VOWEL SIGN VOCALIC R
-0c44 TELUGU VOWEL SIGN VOCALIC RR
-0c46 TELUGU VOWEL SIGN E
-0c47 TELUGU VOWEL SIGN EE
-0c48 TELUGU VOWEL SIGN AI
-0c4a TELUGU VOWEL SIGN O
-0c4b TELUGU VOWEL SIGN OO
-0c4c TELUGU VOWEL SIGN AU
-0c4d TELUGU SIGN VIRAMA
-0c55 TELUGU LENGTH MARK
-0c56 TELUGU AI LENGTH MARK
-0c60 TELUGU LETTER VOCALIC RR
-0c61 TELUGU LETTER VOCALIC LL
-0c66 TELUGU DIGIT ZERO
-0c67 TELUGU DIGIT ONE
-0c68 TELUGU DIGIT TWO
-0c69 TELUGU DIGIT THREE
-0c6a TELUGU DIGIT FOUR
-0c6b TELUGU DIGIT FIVE
-0c6c TELUGU DIGIT SIX
-0c6d TELUGU DIGIT SEVEN
-0c6e TELUGU DIGIT EIGHT
-0c6f TELUGU DIGIT NINE
-0c82 KANNADA SIGN ANUSVARA
-0c83 KANNADA SIGN VISARGA
-0c85 KANNADA LETTER A
-0c86 KANNADA LETTER AA
-0c87 KANNADA LETTER I
-0c88 KANNADA LETTER II
-0c89 KANNADA LETTER U
-0c8a KANNADA LETTER UU
-0c8b KANNADA LETTER VOCALIC R
-0c8c KANNADA LETTER VOCALIC L
-0c8e KANNADA LETTER E
-0c8f KANNADA LETTER EE
-0c90 KANNADA LETTER AI
-0c92 KANNADA LETTER O
-0c93 KANNADA LETTER OO
-0c94 KANNADA LETTER AU
-0c95 KANNADA LETTER KA
-0c96 KANNADA LETTER KHA
-0c97 KANNADA LETTER GA
-0c98 KANNADA LETTER GHA
-0c99 KANNADA LETTER NGA
-0c9a KANNADA LETTER CA
-0c9b KANNADA LETTER CHA
-0c9c KANNADA LETTER JA
-0c9d KANNADA LETTER JHA
-0c9e KANNADA LETTER NYA
-0c9f KANNADA LETTER TTA
-0ca0 KANNADA LETTER TTHA
-0ca1 KANNADA LETTER DDA
-0ca2 KANNADA LETTER DDHA
-0ca3 KANNADA LETTER NNA
-0ca4 KANNADA LETTER TA
-0ca5 KANNADA LETTER THA
-0ca6 KANNADA LETTER DA
-0ca7 KANNADA LETTER DHA
-0ca8 KANNADA LETTER NA
-0caa KANNADA LETTER PA
-0cab KANNADA LETTER PHA
-0cac KANNADA LETTER BA
-0cad KANNADA LETTER BHA
-0cae KANNADA LETTER MA
-0caf KANNADA LETTER YA
-0cb0 KANNADA LETTER RA
-0cb1 KANNADA LETTER RRA
-0cb2 KANNADA LETTER LA
-0cb3 KANNADA LETTER LLA
-0cb5 KANNADA LETTER VA
-0cb6 KANNADA LETTER SHA
-0cb7 KANNADA LETTER SSA
-0cb8 KANNADA LETTER SA
-0cb9 KANNADA LETTER HA
-0cbe KANNADA VOWEL SIGN AA
-0cbf KANNADA VOWEL SIGN I
-0cc0 KANNADA VOWEL SIGN II
-0cc1 KANNADA VOWEL SIGN U
-0cc2 KANNADA VOWEL SIGN UU
-0cc3 KANNADA VOWEL SIGN VOCALIC R
-0cc4 KANNADA VOWEL SIGN VOCALIC RR
-0cc6 KANNADA VOWEL SIGN E
-0cc7 KANNADA VOWEL SIGN EE
-0cc8 KANNADA VOWEL SIGN AI
-0cca KANNADA VOWEL SIGN O
-0ccb KANNADA VOWEL SIGN OO
-0ccc KANNADA VOWEL SIGN AU
-0ccd KANNADA SIGN VIRAMA
-0cd5 KANNADA LENGTH MARK
-0cd6 KANNADA AI LENGTH MARK
-0cde KANNADA LETTER FA
-0ce0 KANNADA LETTER VOCALIC RR
-0ce1 KANNADA LETTER VOCALIC LL
-0ce6 KANNADA DIGIT ZERO
-0ce7 KANNADA DIGIT ONE
-0ce8 KANNADA DIGIT TWO
-0ce9 KANNADA DIGIT THREE
-0cea KANNADA DIGIT FOUR
-0ceb KANNADA DIGIT FIVE
-0cec KANNADA DIGIT SIX
-0ced KANNADA DIGIT SEVEN
-0cee KANNADA DIGIT EIGHT
-0cef KANNADA DIGIT NINE
-0d02 MALAYALAM SIGN ANUSVARA
-0d03 MALAYALAM SIGN VISARGA
-0d05 MALAYALAM LETTER A
-0d06 MALAYALAM LETTER AA
-0d07 MALAYALAM LETTER I
-0d08 MALAYALAM LETTER II
-0d09 MALAYALAM LETTER U
-0d0a MALAYALAM LETTER UU
-0d0b MALAYALAM LETTER VOCALIC R
-0d0c MALAYALAM LETTER VOCALIC L
-0d0e MALAYALAM LETTER E
-0d0f MALAYALAM LETTER EE
-0d10 MALAYALAM LETTER AI
-0d12 MALAYALAM LETTER O
-0d13 MALAYALAM LETTER OO
-0d14 MALAYALAM LETTER AU
-0d15 MALAYALAM LETTER KA
-0d16 MALAYALAM LETTER KHA
-0d17 MALAYALAM LETTER GA
-0d18 MALAYALAM LETTER GHA
-0d19 MALAYALAM LETTER NGA
-0d1a MALAYALAM LETTER CA
-0d1b MALAYALAM LETTER CHA
-0d1c MALAYALAM LETTER JA
-0d1d MALAYALAM LETTER JHA
-0d1e MALAYALAM LETTER NYA
-0d1f MALAYALAM LETTER TTA
-0d20 MALAYALAM LETTER TTHA
-0d21 MALAYALAM LETTER DDA
-0d22 MALAYALAM LETTER DDHA
-0d23 MALAYALAM LETTER NNA
-0d24 MALAYALAM LETTER TA
-0d25 MALAYALAM LETTER THA
-0d26 MALAYALAM LETTER DA
-0d27 MALAYALAM LETTER DHA
-0d28 MALAYALAM LETTER NA
-0d2a MALAYALAM LETTER PA
-0d2b MALAYALAM LETTER PHA
-0d2c MALAYALAM LETTER BA
-0d2d MALAYALAM LETTER BHA
-0d2e MALAYALAM LETTER MA
-0d2f MALAYALAM LETTER YA
-0d30 MALAYALAM LETTER RA
-0d31 MALAYALAM LETTER RRA
-0d32 MALAYALAM LETTER LA
-0d33 MALAYALAM LETTER LLA
-0d34 MALAYALAM LETTER LLLA
-0d35 MALAYALAM LETTER VA
-0d36 MALAYALAM LETTER SHA
-0d37 MALAYALAM LETTER SSA
-0d38 MALAYALAM LETTER SA
-0d39 MALAYALAM LETTER HA
-0d3e MALAYALAM VOWEL SIGN AA
-0d3f MALAYALAM VOWEL SIGN I
-0d40 MALAYALAM VOWEL SIGN II
-0d41 MALAYALAM VOWEL SIGN U
-0d42 MALAYALAM VOWEL SIGN UU
-0d43 MALAYALAM VOWEL SIGN VOCALIC R
-0d46 MALAYALAM VOWEL SIGN E
-0d47 MALAYALAM VOWEL SIGN EE
-0d48 MALAYALAM VOWEL SIGN AI
-0d4a MALAYALAM VOWEL SIGN O
-0d4b MALAYALAM VOWEL SIGN OO
-0d4c MALAYALAM VOWEL SIGN AU
-0d4d MALAYALAM SIGN VIRAMA
-0d57 MALAYALAM AU LENGTH MARK
-0d60 MALAYALAM LETTER VOCALIC RR
-0d61 MALAYALAM LETTER VOCALIC LL
-0d66 MALAYALAM DIGIT ZERO
-0d67 MALAYALAM DIGIT ONE
-0d68 MALAYALAM DIGIT TWO
-0d69 MALAYALAM DIGIT THREE
-0d6a MALAYALAM DIGIT FOUR
-0d6b MALAYALAM DIGIT FIVE
-0d6c MALAYALAM DIGIT SIX
-0d6d MALAYALAM DIGIT SEVEN
-0d6e MALAYALAM DIGIT EIGHT
-0d6f MALAYALAM DIGIT NINE
-0d82 SINHALA SIGN ANUSVARAYA
-0d83 SINHALA SIGN VISARGAYA
-0d85 SINHALA LETTER AYANNA
-0d86 SINHALA LETTER AAYANNA
-0d87 SINHALA LETTER AEYANNA
-0d88 SINHALA LETTER AEEYANNA
-0d89 SINHALA LETTER IYANNA
-0d8a SINHALA LETTER IIYANNA
-0d8b SINHALA LETTER UYANNA
-0d8c SINHALA LETTER UUYANNA
-0d8d SINHALA LETTER IRUYANNA
-0d8e SINHALA LETTER IRUUYANNA
-0d8f SINHALA LETTER ILUYANNA
-0d90 SINHALA LETTER ILUUYANNA
-0d91 SINHALA LETTER EYANNA
-0d92 SINHALA LETTER EEYANNA
-0d93 SINHALA LETTER AIYANNA
-0d94 SINHALA LETTER OYANNA
-0d95 SINHALA LETTER OOYANNA
-0d96 SINHALA LETTER AUYANNA
-0d9a SINHALA LETTER ALPAPRAANA KAYANNA
-0d9b SINHALA LETTER MAHAAPRAANA KAYANNA
-0d9c SINHALA LETTER ALPAPRAANA GAYANNA
-0d9d SINHALA LETTER MAHAAPRAANA GAYANNA
-0d9e SINHALA LETTER KANTAJA NAASIKYAYA
-0d9f SINHALA LETTER SANYAKA GAYANNA
-0da0 SINHALA LETTER ALPAPRAANA CAYANNA
-0da1 SINHALA LETTER MAHAAPRAANA CAYANNA
-0da2 SINHALA LETTER ALPAPRAANA JAYANNA
-0da3 SINHALA LETTER MAHAAPRAANA JAYANNA
-0da4 SINHALA LETTER TAALUJA NAASIKYAYA
-0da5 SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
-0da6 SINHALA LETTER SANYAKA JAYANNA
-0da7 SINHALA LETTER ALPAPRAANA TTAYANNA
-0da8 SINHALA LETTER MAHAAPRAANA TTAYANNA
-0da9 SINHALA LETTER ALPAPRAANA DDAYANNA
-0daa SINHALA LETTER MAHAAPRAANA DDAYANNA
-0dab SINHALA LETTER MUURDHAJA NAYANNA
-0dac SINHALA LETTER SANYAKA DDAYANNA
-0dad SINHALA LETTER ALPAPRAANA TAYANNA
-0dae SINHALA LETTER MAHAAPRAANA TAYANNA
-0daf SINHALA LETTER ALPAPRAANA DAYANNA
-0db0 SINHALA LETTER MAHAAPRAANA DAYANNA
-0db1 SINHALA LETTER DANTAJA NAYANNA
-0db3 SINHALA LETTER SANYAKA DAYANNA
-0db4 SINHALA LETTER ALPAPRAANA PAYANNA
-0db5 SINHALA LETTER MAHAAPRAANA PAYANNA
-0db6 SINHALA LETTER ALPAPRAANA BAYANNA
-0db7 SINHALA LETTER MAHAAPRAANA BAYANNA
-0db8 SINHALA LETTER MAYANNA
-0db9 SINHALA LETTER AMBA BAYANNA
-0dba SINHALA LETTER YAYANNA
-0dbb SINHALA LETTER RAYANNA
-0dbd SINHALA LETTER DANTAJA LAYANNA
-0dc0 SINHALA LETTER VAYANNA
-0dc1 SINHALA LETTER TAALUJA SAYANNA
-0dc2 SINHALA LETTER MUURDHAJA SAYANNA
-0dc3 SINHALA LETTER DANTAJA SAYANNA
-0dc4 SINHALA LETTER HAYANNA
-0dc5 SINHALA LETTER MUURDHAJA LAYANNA
-0dc6 SINHALA LETTER FAYANNA
-0dca SINHALA SIGN AL-LAKUNA
-0dcf SINHALA VOWEL SIGN AELA-PILLA
-0dd0 SINHALA VOWEL SIGN KETTI AEDA-PILLA
-0dd1 SINHALA VOWEL SIGN DIGA AEDA-PILLA
-0dd2 SINHALA VOWEL SIGN KETTI IS-PILLA
-0dd3 SINHALA VOWEL SIGN DIGA IS-PILLA
-0dd4 SINHALA VOWEL SIGN KETTI PAA-PILLA
-0dd6 SINHALA VOWEL SIGN DIGA PAA-PILLA
-0dd8 SINHALA VOWEL SIGN GAETTA-PILLA
-0dd9 SINHALA VOWEL SIGN KOMBUVA
-0dda SINHALA VOWEL SIGN DIGA KOMBUVA
-0ddb SINHALA VOWEL SIGN KOMBU DEKA
-0ddc SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
-0ddd SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
-0dde SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
-0ddf SINHALA VOWEL SIGN GAYANUKITTA
-0df2 SINHALA VOWEL SIGN DIGA GAETTA-PILLA
-0df3 SINHALA VOWEL SIGN DIGA GAYANUKITTA
-0df4 SINHALA PUNCTUATION KUNDDALIYA
-0e01 THAI CHARACTER KO KAI
-0e02 THAI CHARACTER KHO KHAI
-0e03 THAI CHARACTER KHO KHUAT
-0e04 THAI CHARACTER KHO KHWAI
-0e05 THAI CHARACTER KHO KHON
-0e06 THAI CHARACTER KHO RAKHANG
-0e07 THAI CHARACTER NGO NGU
-0e08 THAI CHARACTER CHO CHAN
-0e09 THAI CHARACTER CHO CHING
-0e0a THAI CHARACTER CHO CHANG
-0e0b THAI CHARACTER SO SO
-0e0c THAI CHARACTER CHO CHOE
-0e0d THAI CHARACTER YO YING
-0e0e THAI CHARACTER DO CHADA
-0e0f THAI CHARACTER TO PATAK
-0e10 THAI CHARACTER THO THAN
-0e11 THAI CHARACTER THO NANGMONTHO
-0e12 THAI CHARACTER THO PHUTHAO
-0e13 THAI CHARACTER NO NEN
-0e14 THAI CHARACTER DO DEK
-0e15 THAI CHARACTER TO TAO
-0e16 THAI CHARACTER THO THUNG
-0e17 THAI CHARACTER THO THAHAN
-0e18 THAI CHARACTER THO THONG
-0e19 THAI CHARACTER NO NU
-0e1a THAI CHARACTER BO BAIMAI
-0e1b THAI CHARACTER PO PLA
-0e1c THAI CHARACTER PHO PHUNG
-0e1d THAI CHARACTER FO FA
-0e1e THAI CHARACTER PHO PHAN
-0e1f THAI CHARACTER FO FAN
-0e20 THAI CHARACTER PHO SAMPHAO
-0e21 THAI CHARACTER MO MA
-0e22 THAI CHARACTER YO YAK
-0e23 THAI CHARACTER RO RUA
-0e24 THAI CHARACTER RU
-0e25 THAI CHARACTER LO LING
-0e26 THAI CHARACTER LU
-0e27 THAI CHARACTER WO WAEN
-0e28 THAI CHARACTER SO SALA
-0e29 THAI CHARACTER SO RUSI
-0e2a THAI CHARACTER SO SUA
-0e2b THAI CHARACTER HO HIP
-0e2c THAI CHARACTER LO CHULA
-0e2d THAI CHARACTER O ANG
-0e2e THAI CHARACTER HO NOKHUK
-0e2f THAI CHARACTER PAIYANNOI
-0e30 THAI CHARACTER SARA A
-0e31 THAI CHARACTER MAI HAN-AKAT
-0e32 THAI CHARACTER SARA AA
-0e33 THAI CHARACTER SARA AM
-0e34 THAI CHARACTER SARA I
-0e35 THAI CHARACTER SARA II
-0e36 THAI CHARACTER SARA UE
-0e37 THAI CHARACTER SARA UEE
-0e38 THAI CHARACTER SARA U
-0e39 THAI CHARACTER SARA UU
-0e3a THAI CHARACTER PHINTHU
-0e3f THAI CURRENCY SYMBOL BAHT
-0e40 THAI CHARACTER SARA E
-0e41 THAI CHARACTER SARA AE
-0e42 THAI CHARACTER SARA O
-0e43 THAI CHARACTER SARA AI MAIMUAN
-0e44 THAI CHARACTER SARA AI MAIMALAI
-0e45 THAI CHARACTER LAKKHANGYAO
-0e46 THAI CHARACTER MAIYAMOK
-0e47 THAI CHARACTER MAITAIKHU
-0e48 THAI CHARACTER MAI EK
-0e49 THAI CHARACTER MAI THO
-0e4a THAI CHARACTER MAI TRI
-0e4b THAI CHARACTER MAI CHATTAWA
-0e4c THAI CHARACTER THANTHAKHAT
-0e4d THAI CHARACTER NIKHAHIT
-0e4e THAI CHARACTER YAMAKKAN
-0e4f THAI CHARACTER FONGMAN
-0e50 THAI DIGIT ZERO
-0e51 THAI DIGIT ONE
-0e52 THAI DIGIT TWO
-0e53 THAI DIGIT THREE
-0e54 THAI DIGIT FOUR
-0e55 THAI DIGIT FIVE
-0e56 THAI DIGIT SIX
-0e57 THAI DIGIT SEVEN
-0e58 THAI DIGIT EIGHT
-0e59 THAI DIGIT NINE
-0e5a THAI CHARACTER ANGKHANKHU
-0e5b THAI CHARACTER KHOMUT
-0e81 LAO LETTER KO
-0e82 LAO LETTER KHO SUNG
-0e84 LAO LETTER KHO TAM
-0e87 LAO LETTER NGO
-0e88 LAO LETTER CO
-0e8a LAO LETTER SO TAM
-0e8d LAO LETTER NYO
-0e94 LAO LETTER DO
-0e95 LAO LETTER TO
-0e96 LAO LETTER THO SUNG
-0e97 LAO LETTER THO TAM
-0e99 LAO LETTER NO
-0e9a LAO LETTER BO
-0e9b LAO LETTER PO
-0e9c LAO LETTER PHO SUNG
-0e9d LAO LETTER FO TAM
-0e9e LAO LETTER PHO TAM
-0e9f LAO LETTER FO SUNG
-0ea1 LAO LETTER MO
-0ea2 LAO LETTER YO
-0ea3 LAO LETTER LO LING
-0ea5 LAO LETTER LO LOOT
-0ea7 LAO LETTER WO
-0eaa LAO LETTER SO SUNG
-0eab LAO LETTER HO SUNG
-0ead LAO LETTER O
-0eae LAO LETTER HO TAM
-0eaf LAO ELLIPSIS
-0eb0 LAO VOWEL SIGN A
-0eb1 LAO VOWEL SIGN MAI KAN
-0eb2 LAO VOWEL SIGN AA
-0eb3 LAO VOWEL SIGN AM
-0eb4 LAO VOWEL SIGN I
-0eb5 LAO VOWEL SIGN II
-0eb6 LAO VOWEL SIGN Y
-0eb7 LAO VOWEL SIGN YY
-0eb8 LAO VOWEL SIGN U
-0eb9 LAO VOWEL SIGN UU
-0ebb LAO VOWEL SIGN MAI KON
-0ebc LAO SEMIVOWEL SIGN LO
-0ebd LAO SEMIVOWEL SIGN NYO
-0ec0 LAO VOWEL SIGN E
-0ec1 LAO VOWEL SIGN EI
-0ec2 LAO VOWEL SIGN O
-0ec3 LAO VOWEL SIGN AY
-0ec4 LAO VOWEL SIGN AI
-0ec6 LAO KO LA
-0ec8 LAO TONE MAI EK
-0ec9 LAO TONE MAI THO
-0eca LAO TONE MAI TI
-0ecb LAO TONE MAI CATAWA
-0ecc LAO CANCELLATION MARK
-0ecd LAO NIGGAHITA
-0ed0 LAO DIGIT ZERO
-0ed1 LAO DIGIT ONE
-0ed2 LAO DIGIT TWO
-0ed3 LAO DIGIT THREE
-0ed4 LAO DIGIT FOUR
-0ed5 LAO DIGIT FIVE
-0ed6 LAO DIGIT SIX
-0ed7 LAO DIGIT SEVEN
-0ed8 LAO DIGIT EIGHT
-0ed9 LAO DIGIT NINE
-0edc LAO HO NO
-0edd LAO HO MO
-0f00 TIBETAN SYLLABLE OM
-0f01 TIBETAN MARK GTER YIG MGO TRUNCATED A
-0f02 TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
-0f03 TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
-0f04 TIBETAN MARK INITIAL YIG MGO MDUN MA
-0f05 TIBETAN MARK CLOSING YIG MGO SGAB MA
-0f06 TIBETAN MARK CARET YIG MGO PHUR SHAD MA
-0f07 TIBETAN MARK YIG MGO TSHEG SHAD MA
-0f08 TIBETAN MARK SBRUL SHAD
-0f09 TIBETAN MARK BSKUR YIG MGO
-0f0a TIBETAN MARK BKA- SHOG YIG MGO
-0f0b TIBETAN MARK INTERSYLLABIC TSHEG
-0f0c TIBETAN MARK DELIMITER TSHEG BSTAR
-0f0d TIBETAN MARK SHAD
-0f0e TIBETAN MARK NYIS SHAD
-0f0f TIBETAN MARK TSHEG SHAD
-0f10 TIBETAN MARK NYIS TSHEG SHAD
-0f11 TIBETAN MARK RIN CHEN SPUNGS SHAD
-0f12 TIBETAN MARK RGYA GRAM SHAD
-0f13 TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
-0f14 TIBETAN MARK GTER TSHEG
-0f15 TIBETAN LOGOTYPE SIGN CHAD RTAGS
-0f16 TIBETAN LOGOTYPE SIGN LHAG RTAGS
-0f17 TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
-0f18 TIBETAN ASTROLOGICAL SIGN -KHYUD PA
-0f19 TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
-0f1a TIBETAN SIGN RDEL DKAR GCIG
-0f1b TIBETAN SIGN RDEL DKAR GNYIS
-0f1c TIBETAN SIGN RDEL DKAR GSUM
-0f1d TIBETAN SIGN RDEL NAG GCIG
-0f1e TIBETAN SIGN RDEL NAG GNYIS
-0f1f TIBETAN SIGN RDEL DKAR RDEL NAG
-0f20 TIBETAN DIGIT ZERO
-0f21 TIBETAN DIGIT ONE
-0f22 TIBETAN DIGIT TWO
-0f23 TIBETAN DIGIT THREE
-0f24 TIBETAN DIGIT FOUR
-0f25 TIBETAN DIGIT FIVE
-0f26 TIBETAN DIGIT SIX
-0f27 TIBETAN DIGIT SEVEN
-0f28 TIBETAN DIGIT EIGHT
-0f29 TIBETAN DIGIT NINE
-0f2a TIBETAN DIGIT HALF ONE
-0f2b TIBETAN DIGIT HALF TWO
-0f2c TIBETAN DIGIT HALF THREE
-0f2d TIBETAN DIGIT HALF FOUR
-0f2e TIBETAN DIGIT HALF FIVE
-0f2f TIBETAN DIGIT HALF SIX
-0f30 TIBETAN DIGIT HALF SEVEN
-0f31 TIBETAN DIGIT HALF EIGHT
-0f32 TIBETAN DIGIT HALF NINE
-0f33 TIBETAN DIGIT HALF ZERO
-0f34 TIBETAN MARK BSDUS RTAGS
-0f35 TIBETAN MARK NGAS BZUNG NYI ZLA
-0f36 TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
-0f37 TIBETAN MARK NGAS BZUNG SGOR RTAGS
-0f38 TIBETAN MARK CHE MGO
-0f39 TIBETAN MARK TSA -PHRU
-0f3a TIBETAN MARK GUG RTAGS GYON
-0f3b TIBETAN MARK GUG RTAGS GYAS
-0f3c TIBETAN MARK ANG KHANG GYON
-0f3d TIBETAN MARK ANG KHANG GYAS
-0f3e TIBETAN SIGN YAR TSHES
-0f3f TIBETAN SIGN MAR TSHES
-0f40 TIBETAN LETTER KA
-0f41 TIBETAN LETTER KHA
-0f42 TIBETAN LETTER GA
-0f43 TIBETAN LETTER GHA
-0f44 TIBETAN LETTER NGA
-0f45 TIBETAN LETTER CA
-0f46 TIBETAN LETTER CHA
-0f47 TIBETAN LETTER JA
-0f49 TIBETAN LETTER NYA
-0f4a TIBETAN LETTER TTA
-0f4b TIBETAN LETTER TTHA
-0f4c TIBETAN LETTER DDA
-0f4d TIBETAN LETTER DDHA
-0f4e TIBETAN LETTER NNA
-0f4f TIBETAN LETTER TA
-0f50 TIBETAN LETTER THA
-0f51 TIBETAN LETTER DA
-0f52 TIBETAN LETTER DHA
-0f53 TIBETAN LETTER NA
-0f54 TIBETAN LETTER PA
-0f55 TIBETAN LETTER PHA
-0f56 TIBETAN LETTER BA
-0f57 TIBETAN LETTER BHA
-0f58 TIBETAN LETTER MA
-0f59 TIBETAN LETTER TSA
-0f5a TIBETAN LETTER TSHA
-0f5b TIBETAN LETTER DZA
-0f5c TIBETAN LETTER DZHA
-0f5d TIBETAN LETTER WA
-0f5e TIBETAN LETTER ZHA
-0f5f TIBETAN LETTER ZA
-0f60 TIBETAN LETTER -A
-0f61 TIBETAN LETTER YA
-0f62 TIBETAN LETTER RA
-0f63 TIBETAN LETTER LA
-0f64 TIBETAN LETTER SHA
-0f65 TIBETAN LETTER SSA
-0f66 TIBETAN LETTER SA
-0f67 TIBETAN LETTER HA
-0f68 TIBETAN LETTER A
-0f69 TIBETAN LETTER KSSA
-0f6a TIBETAN LETTER FIXED-FORM RA
-0f71 TIBETAN VOWEL SIGN AA
-0f72 TIBETAN VOWEL SIGN I
-0f73 TIBETAN VOWEL SIGN II
-0f74 TIBETAN VOWEL SIGN U
-0f75 TIBETAN VOWEL SIGN UU
-0f76 TIBETAN VOWEL SIGN VOCALIC R
-0f77 TIBETAN VOWEL SIGN VOCALIC RR
-0f78 TIBETAN VOWEL SIGN VOCALIC L
-0f79 TIBETAN VOWEL SIGN VOCALIC LL
-0f7a TIBETAN VOWEL SIGN E
-0f7b TIBETAN VOWEL SIGN EE
-0f7c TIBETAN VOWEL SIGN O
-0f7d TIBETAN VOWEL SIGN OO
-0f7e TIBETAN SIGN RJES SU NGA RO
-0f7f TIBETAN SIGN RNAM BCAD
-0f80 TIBETAN VOWEL SIGN REVERSED I
-0f81 TIBETAN VOWEL SIGN REVERSED II
-0f82 TIBETAN SIGN NYI ZLA NAA DA
-0f83 TIBETAN SIGN SNA LDAN
-0f84 TIBETAN MARK HALANTA
-0f85 TIBETAN MARK PALUTA
-0f86 TIBETAN SIGN LCI RTAGS
-0f87 TIBETAN SIGN YANG RTAGS
-0f88 TIBETAN SIGN LCE TSA CAN
-0f89 TIBETAN SIGN MCHU CAN
-0f8a TIBETAN SIGN GRU CAN RGYINGS
-0f8b TIBETAN SIGN GRU MED RGYINGS
-0f90 TIBETAN SUBJOINED LETTER KA
-0f91 TIBETAN SUBJOINED LETTER KHA
-0f92 TIBETAN SUBJOINED LETTER GA
-0f93 TIBETAN SUBJOINED LETTER GHA
-0f94 TIBETAN SUBJOINED LETTER NGA
-0f95 TIBETAN SUBJOINED LETTER CA
-0f96 TIBETAN SUBJOINED LETTER CHA
-0f97 TIBETAN SUBJOINED LETTER JA
-0f99 TIBETAN SUBJOINED LETTER NYA
-0f9a TIBETAN SUBJOINED LETTER TTA
-0f9b TIBETAN SUBJOINED LETTER TTHA
-0f9c TIBETAN SUBJOINED LETTER DDA
-0f9d TIBETAN SUBJOINED LETTER DDHA
-0f9e TIBETAN SUBJOINED LETTER NNA
-0f9f TIBETAN SUBJOINED LETTER TA
-0fa0 TIBETAN SUBJOINED LETTER THA
-0fa1 TIBETAN SUBJOINED LETTER DA
-0fa2 TIBETAN SUBJOINED LETTER DHA
-0fa3 TIBETAN SUBJOINED LETTER NA
-0fa4 TIBETAN SUBJOINED LETTER PA
-0fa5 TIBETAN SUBJOINED LETTER PHA
-0fa6 TIBETAN SUBJOINED LETTER BA
-0fa7 TIBETAN SUBJOINED LETTER BHA
-0fa8 TIBETAN SUBJOINED LETTER MA
-0fa9 TIBETAN SUBJOINED LETTER TSA
-0faa TIBETAN SUBJOINED LETTER TSHA
-0fab TIBETAN SUBJOINED LETTER DZA
-0fac TIBETAN SUBJOINED LETTER DZHA
-0fad TIBETAN SUBJOINED LETTER WA
-0fae TIBETAN SUBJOINED LETTER ZHA
-0faf TIBETAN SUBJOINED LETTER ZA
-0fb0 TIBETAN SUBJOINED LETTER -A
-0fb1 TIBETAN SUBJOINED LETTER YA
-0fb2 TIBETAN SUBJOINED LETTER RA
-0fb3 TIBETAN SUBJOINED LETTER LA
-0fb4 TIBETAN SUBJOINED LETTER SHA
-0fb5 TIBETAN SUBJOINED LETTER SSA
-0fb6 TIBETAN SUBJOINED LETTER SA
-0fb7 TIBETAN SUBJOINED LETTER HA
-0fb8 TIBETAN SUBJOINED LETTER A
-0fb9 TIBETAN SUBJOINED LETTER KSSA
-0fba TIBETAN SUBJOINED LETTER FIXED-FORM WA
-0fbb TIBETAN SUBJOINED LETTER FIXED-FORM YA
-0fbc TIBETAN SUBJOINED LETTER FIXED-FORM RA
-0fbe TIBETAN KU RU KHA
-0fbf TIBETAN KU RU KHA BZHI MIG CAN
-0fc0 TIBETAN CANTILLATION SIGN HEAVY BEAT
-0fc1 TIBETAN CANTILLATION SIGN LIGHT BEAT
-0fc2 TIBETAN CANTILLATION SIGN CANG TE-U
-0fc3 TIBETAN CANTILLATION SIGN SBUB -CHAL
-0fc4 TIBETAN SYMBOL DRIL BU
-0fc5 TIBETAN SYMBOL RDO RJE
-0fc6 TIBETAN SYMBOL PADMA GDAN
-0fc7 TIBETAN SYMBOL RDO RJE RGYA GRAM
-0fc8 TIBETAN SYMBOL PHUR PA
-0fc9 TIBETAN SYMBOL NOR BU
-0fca TIBETAN SYMBOL NOR BU NYIS -KHYIL
-0fcb TIBETAN SYMBOL NOR BU GSUM -KHYIL
-0fcc TIBETAN SYMBOL NOR BU BZHI -KHYIL
-0fcf TIBETAN SIGN RDEL NAG GSUM
-1000 MYANMAR LETTER KA
-1001 MYANMAR LETTER KHA
-1002 MYANMAR LETTER GA
-1003 MYANMAR LETTER GHA
-1004 MYANMAR LETTER NGA
-1005 MYANMAR LETTER CA
-1006 MYANMAR LETTER CHA
-1007 MYANMAR LETTER JA
-1008 MYANMAR LETTER JHA
-1009 MYANMAR LETTER NYA
-100a MYANMAR LETTER NNYA
-100b MYANMAR LETTER TTA
-100c MYANMAR LETTER TTHA
-100d MYANMAR LETTER DDA
-100e MYANMAR LETTER DDHA
-100f MYANMAR LETTER NNA
-1010 MYANMAR LETTER TA
-1011 MYANMAR LETTER THA
-1012 MYANMAR LETTER DA
-1013 MYANMAR LETTER DHA
-1014 MYANMAR LETTER NA
-1015 MYANMAR LETTER PA
-1016 MYANMAR LETTER PHA
-1017 MYANMAR LETTER BA
-1018 MYANMAR LETTER BHA
-1019 MYANMAR LETTER MA
-101a MYANMAR LETTER YA
-101b MYANMAR LETTER RA
-101c MYANMAR LETTER LA
-101d MYANMAR LETTER WA
-101e MYANMAR LETTER SA
-101f MYANMAR LETTER HA
-1020 MYANMAR LETTER LLA
-1021 MYANMAR LETTER A
-1023 MYANMAR LETTER I
-1024 MYANMAR LETTER II
-1025 MYANMAR LETTER U
-1026 MYANMAR LETTER UU
-1027 MYANMAR LETTER E
-1029 MYANMAR LETTER O
-102a MYANMAR LETTER AU
-102c MYANMAR VOWEL SIGN AA
-102d MYANMAR VOWEL SIGN I
-102e MYANMAR VOWEL SIGN II
-102f MYANMAR VOWEL SIGN U
-1030 MYANMAR VOWEL SIGN UU
-1031 MYANMAR VOWEL SIGN E
-1032 MYANMAR VOWEL SIGN AI
-1036 MYANMAR SIGN ANUSVARA
-1037 MYANMAR SIGN DOT BELOW
-1038 MYANMAR SIGN VISARGA
-1039 MYANMAR SIGN VIRAMA
-1040 MYANMAR DIGIT ZERO
-1041 MYANMAR DIGIT ONE
-1042 MYANMAR DIGIT TWO
-1043 MYANMAR DIGIT THREE
-1044 MYANMAR DIGIT FOUR
-1045 MYANMAR DIGIT FIVE
-1046 MYANMAR DIGIT SIX
-1047 MYANMAR DIGIT SEVEN
-1048 MYANMAR DIGIT EIGHT
-1049 MYANMAR DIGIT NINE
-104a MYANMAR SIGN LITTLE SECTION
-104b MYANMAR SIGN SECTION
-104c MYANMAR SYMBOL LOCATIVE
-104d MYANMAR SYMBOL COMPLETED
-104e MYANMAR SYMBOL AFOREMENTIONED
-104f MYANMAR SYMBOL GENITIVE
-1050 MYANMAR LETTER SHA
-1051 MYANMAR LETTER SSA
-1052 MYANMAR LETTER VOCALIC R
-1053 MYANMAR LETTER VOCALIC RR
-1054 MYANMAR LETTER VOCALIC L
-1055 MYANMAR LETTER VOCALIC LL
-1056 MYANMAR VOWEL SIGN VOCALIC R
-1057 MYANMAR VOWEL SIGN VOCALIC RR
-1058 MYANMAR VOWEL SIGN VOCALIC L
-1059 MYANMAR VOWEL SIGN VOCALIC LL
-10a0 GEORGIAN CAPITAL LETTER AN
-10a1 GEORGIAN CAPITAL LETTER BAN
-10a2 GEORGIAN CAPITAL LETTER GAN
-10a3 GEORGIAN CAPITAL LETTER DON
-10a4 GEORGIAN CAPITAL LETTER EN
-10a5 GEORGIAN CAPITAL LETTER VIN
-10a6 GEORGIAN CAPITAL LETTER ZEN
-10a7 GEORGIAN CAPITAL LETTER TAN
-10a8 GEORGIAN CAPITAL LETTER IN
-10a9 GEORGIAN CAPITAL LETTER KAN
-10aa GEORGIAN CAPITAL LETTER LAS
-10ab GEORGIAN CAPITAL LETTER MAN
-10ac GEORGIAN CAPITAL LETTER NAR
-10ad GEORGIAN CAPITAL LETTER ON
-10ae GEORGIAN CAPITAL LETTER PAR
-10af GEORGIAN CAPITAL LETTER ZHAR
-10b0 GEORGIAN CAPITAL LETTER RAE
-10b1 GEORGIAN CAPITAL LETTER SAN
-10b2 GEORGIAN CAPITAL LETTER TAR
-10b3 GEORGIAN CAPITAL LETTER UN
-10b4 GEORGIAN CAPITAL LETTER PHAR
-10b5 GEORGIAN CAPITAL LETTER KHAR
-10b6 GEORGIAN CAPITAL LETTER GHAN
-10b7 GEORGIAN CAPITAL LETTER QAR
-10b8 GEORGIAN CAPITAL LETTER SHIN
-10b9 GEORGIAN CAPITAL LETTER CHIN
-10ba GEORGIAN CAPITAL LETTER CAN
-10bb GEORGIAN CAPITAL LETTER JIL
-10bc GEORGIAN CAPITAL LETTER CIL
-10bd GEORGIAN CAPITAL LETTER CHAR
-10be GEORGIAN CAPITAL LETTER XAN
-10bf GEORGIAN CAPITAL LETTER JHAN
-10c0 GEORGIAN CAPITAL LETTER HAE
-10c1 GEORGIAN CAPITAL LETTER HE
-10c2 GEORGIAN CAPITAL LETTER HIE
-10c3 GEORGIAN CAPITAL LETTER WE
-10c4 GEORGIAN CAPITAL LETTER HAR
-10c5 GEORGIAN CAPITAL LETTER HOE
-10d0 GEORGIAN LETTER AN
-10d1 GEORGIAN LETTER BAN
-10d2 GEORGIAN LETTER GAN
-10d3 GEORGIAN LETTER DON
-10d4 GEORGIAN LETTER EN
-10d5 GEORGIAN LETTER VIN
-10d6 GEORGIAN LETTER ZEN
-10d7 GEORGIAN LETTER TAN
-10d8 GEORGIAN LETTER IN
-10d9 GEORGIAN LETTER KAN
-10da GEORGIAN LETTER LAS
-10db GEORGIAN LETTER MAN
-10dc GEORGIAN LETTER NAR
-10dd GEORGIAN LETTER ON
-10de GEORGIAN LETTER PAR
-10df GEORGIAN LETTER ZHAR
-10e0 GEORGIAN LETTER RAE
-10e1 GEORGIAN LETTER SAN
-10e2 GEORGIAN LETTER TAR
-10e3 GEORGIAN LETTER UN
-10e4 GEORGIAN LETTER PHAR
-10e5 GEORGIAN LETTER KHAR
-10e6 GEORGIAN LETTER GHAN
-10e7 GEORGIAN LETTER QAR
-10e8 GEORGIAN LETTER SHIN
-10e9 GEORGIAN LETTER CHIN
-10ea GEORGIAN LETTER CAN
-10eb GEORGIAN LETTER JIL
-10ec GEORGIAN LETTER CIL
-10ed GEORGIAN LETTER CHAR
-10ee GEORGIAN LETTER XAN
-10ef GEORGIAN LETTER JHAN
-10f0 GEORGIAN LETTER HAE
-10f1 GEORGIAN LETTER HE
-10f2 GEORGIAN LETTER HIE
-10f3 GEORGIAN LETTER WE
-10f4 GEORGIAN LETTER HAR
-10f5 GEORGIAN LETTER HOE
-10f6 GEORGIAN LETTER FI
-10fb GEORGIAN PARAGRAPH SEPARATOR
-1100 HANGUL CHOSEONG KIYEOK
-1101 HANGUL CHOSEONG SSANGKIYEOK
-1102 HANGUL CHOSEONG NIEUN
-1103 HANGUL CHOSEONG TIKEUT
-1104 HANGUL CHOSEONG SSANGTIKEUT
-1105 HANGUL CHOSEONG RIEUL
-1106 HANGUL CHOSEONG MIEUM
-1107 HANGUL CHOSEONG PIEUP
-1108 HANGUL CHOSEONG SSANGPIEUP
-1109 HANGUL CHOSEONG SIOS
-110a HANGUL CHOSEONG SSANGSIOS
-110b HANGUL CHOSEONG IEUNG
-110c HANGUL CHOSEONG CIEUC
-110d HANGUL CHOSEONG SSANGCIEUC
-110e HANGUL CHOSEONG CHIEUCH
-110f HANGUL CHOSEONG KHIEUKH
-1110 HANGUL CHOSEONG THIEUTH
-1111 HANGUL CHOSEONG PHIEUPH
-1112 HANGUL CHOSEONG HIEUH
-1113 HANGUL CHOSEONG NIEUN-KIYEOK
-1114 HANGUL CHOSEONG SSANGNIEUN
-1115 HANGUL CHOSEONG NIEUN-TIKEUT
-1116 HANGUL CHOSEONG NIEUN-PIEUP
-1117 HANGUL CHOSEONG TIKEUT-KIYEOK
-1118 HANGUL CHOSEONG RIEUL-NIEUN
-1119 HANGUL CHOSEONG SSANGRIEUL
-111a HANGUL CHOSEONG RIEUL-HIEUH
-111b HANGUL CHOSEONG KAPYEOUNRIEUL
-111c HANGUL CHOSEONG MIEUM-PIEUP
-111d HANGUL CHOSEONG KAPYEOUNMIEUM
-111e HANGUL CHOSEONG PIEUP-KIYEOK
-111f HANGUL CHOSEONG PIEUP-NIEUN
-1120 HANGUL CHOSEONG PIEUP-TIKEUT
-1121 HANGUL CHOSEONG PIEUP-SIOS
-1122 HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
-1123 HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
-1124 HANGUL CHOSEONG PIEUP-SIOS-PIEUP
-1125 HANGUL CHOSEONG PIEUP-SSANGSIOS
-1126 HANGUL CHOSEONG PIEUP-SIOS-CIEUC
-1127 HANGUL CHOSEONG PIEUP-CIEUC
-1128 HANGUL CHOSEONG PIEUP-CHIEUCH
-1129 HANGUL CHOSEONG PIEUP-THIEUTH
-112a HANGUL CHOSEONG PIEUP-PHIEUPH
-112b HANGUL CHOSEONG KAPYEOUNPIEUP
-112c HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
-112d HANGUL CHOSEONG SIOS-KIYEOK
-112e HANGUL CHOSEONG SIOS-NIEUN
-112f HANGUL CHOSEONG SIOS-TIKEUT
-1130 HANGUL CHOSEONG SIOS-RIEUL
-1131 HANGUL CHOSEONG SIOS-MIEUM
-1132 HANGUL CHOSEONG SIOS-PIEUP
-1133 HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
-1134 HANGUL CHOSEONG SIOS-SSANGSIOS
-1135 HANGUL CHOSEONG SIOS-IEUNG
-1136 HANGUL CHOSEONG SIOS-CIEUC
-1137 HANGUL CHOSEONG SIOS-CHIEUCH
-1138 HANGUL CHOSEONG SIOS-KHIEUKH
-1139 HANGUL CHOSEONG SIOS-THIEUTH
-113a HANGUL CHOSEONG SIOS-PHIEUPH
-113b HANGUL CHOSEONG SIOS-HIEUH
-113c HANGUL CHOSEONG CHITUEUMSIOS
-113d HANGUL CHOSEONG CHITUEUMSSANGSIOS
-113e HANGUL CHOSEONG CEONGCHIEUMSIOS
-113f HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
-1140 HANGUL CHOSEONG PANSIOS
-1141 HANGUL CHOSEONG IEUNG-KIYEOK
-1142 HANGUL CHOSEONG IEUNG-TIKEUT
-1143 HANGUL CHOSEONG IEUNG-MIEUM
-1144 HANGUL CHOSEONG IEUNG-PIEUP
-1145 HANGUL CHOSEONG IEUNG-SIOS
-1146 HANGUL CHOSEONG IEUNG-PANSIOS
-1147 HANGUL CHOSEONG SSANGIEUNG
-1148 HANGUL CHOSEONG IEUNG-CIEUC
-1149 HANGUL CHOSEONG IEUNG-CHIEUCH
-114a HANGUL CHOSEONG IEUNG-THIEUTH
-114b HANGUL CHOSEONG IEUNG-PHIEUPH
-114c HANGUL CHOSEONG YESIEUNG
-114d HANGUL CHOSEONG CIEUC-IEUNG
-114e HANGUL CHOSEONG CHITUEUMCIEUC
-114f HANGUL CHOSEONG CHITUEUMSSANGCIEUC
-1150 HANGUL CHOSEONG CEONGCHIEUMCIEUC
-1151 HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
-1152 HANGUL CHOSEONG CHIEUCH-KHIEUKH
-1153 HANGUL CHOSEONG CHIEUCH-HIEUH
-1154 HANGUL CHOSEONG CHITUEUMCHIEUCH
-1155 HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
-1156 HANGUL CHOSEONG PHIEUPH-PIEUP
-1157 HANGUL CHOSEONG KAPYEOUNPHIEUPH
-1158 HANGUL CHOSEONG SSANGHIEUH
-1159 HANGUL CHOSEONG YEORINHIEUH
-115f HANGUL CHOSEONG FILLER
-1160 HANGUL JUNGSEONG FILLER
-1161 HANGUL JUNGSEONG A
-1162 HANGUL JUNGSEONG AE
-1163 HANGUL JUNGSEONG YA
-1164 HANGUL JUNGSEONG YAE
-1165 HANGUL JUNGSEONG EO
-1166 HANGUL JUNGSEONG E
-1167 HANGUL JUNGSEONG YEO
-1168 HANGUL JUNGSEONG YE
-1169 HANGUL JUNGSEONG O
-116a HANGUL JUNGSEONG WA
-116b HANGUL JUNGSEONG WAE
-116c HANGUL JUNGSEONG OE
-116d HANGUL JUNGSEONG YO
-116e HANGUL JUNGSEONG U
-116f HANGUL JUNGSEONG WEO
-1170 HANGUL JUNGSEONG WE
-1171 HANGUL JUNGSEONG WI
-1172 HANGUL JUNGSEONG YU
-1173 HANGUL JUNGSEONG EU
-1174 HANGUL JUNGSEONG YI
-1175 HANGUL JUNGSEONG I
-1176 HANGUL JUNGSEONG A-O
-1177 HANGUL JUNGSEONG A-U
-1178 HANGUL JUNGSEONG YA-O
-1179 HANGUL JUNGSEONG YA-YO
-117a HANGUL JUNGSEONG EO-O
-117b HANGUL JUNGSEONG EO-U
-117c HANGUL JUNGSEONG EO-EU
-117d HANGUL JUNGSEONG YEO-O
-117e HANGUL JUNGSEONG YEO-U
-117f HANGUL JUNGSEONG O-EO
-1180 HANGUL JUNGSEONG O-E
-1181 HANGUL JUNGSEONG O-YE
-1182 HANGUL JUNGSEONG O-O
-1183 HANGUL JUNGSEONG O-U
-1184 HANGUL JUNGSEONG YO-YA
-1185 HANGUL JUNGSEONG YO-YAE
-1186 HANGUL JUNGSEONG YO-YEO
-1187 HANGUL JUNGSEONG YO-O
-1188 HANGUL JUNGSEONG YO-I
-1189 HANGUL JUNGSEONG U-A
-118a HANGUL JUNGSEONG U-AE
-118b HANGUL JUNGSEONG U-EO-EU
-118c HANGUL JUNGSEONG U-YE
-118d HANGUL JUNGSEONG U-U
-118e HANGUL JUNGSEONG YU-A
-118f HANGUL JUNGSEONG YU-EO
-1190 HANGUL JUNGSEONG YU-E
-1191 HANGUL JUNGSEONG YU-YEO
-1192 HANGUL JUNGSEONG YU-YE
-1193 HANGUL JUNGSEONG YU-U
-1194 HANGUL JUNGSEONG YU-I
-1195 HANGUL JUNGSEONG EU-U
-1196 HANGUL JUNGSEONG EU-EU
-1197 HANGUL JUNGSEONG YI-U
-1198 HANGUL JUNGSEONG I-A
-1199 HANGUL JUNGSEONG I-YA
-119a HANGUL JUNGSEONG I-O
-119b HANGUL JUNGSEONG I-U
-119c HANGUL JUNGSEONG I-EU
-119d HANGUL JUNGSEONG I-ARAEA
-119e HANGUL JUNGSEONG ARAEA
-119f HANGUL JUNGSEONG ARAEA-EO
-11a0 HANGUL JUNGSEONG ARAEA-U
-11a1 HANGUL JUNGSEONG ARAEA-I
-11a2 HANGUL JUNGSEONG SSANGARAEA
-11a8 HANGUL JONGSEONG KIYEOK
-11a9 HANGUL JONGSEONG SSANGKIYEOK
-11aa HANGUL JONGSEONG KIYEOK-SIOS
-11ab HANGUL JONGSEONG NIEUN
-11ac HANGUL JONGSEONG NIEUN-CIEUC
-11ad HANGUL JONGSEONG NIEUN-HIEUH
-11ae HANGUL JONGSEONG TIKEUT
-11af HANGUL JONGSEONG RIEUL
-11b0 HANGUL JONGSEONG RIEUL-KIYEOK
-11b1 HANGUL JONGSEONG RIEUL-MIEUM
-11b2 HANGUL JONGSEONG RIEUL-PIEUP
-11b3 HANGUL JONGSEONG RIEUL-SIOS
-11b4 HANGUL JONGSEONG RIEUL-THIEUTH
-11b5 HANGUL JONGSEONG RIEUL-PHIEUPH
-11b6 HANGUL JONGSEONG RIEUL-HIEUH
-11b7 HANGUL JONGSEONG MIEUM
-11b8 HANGUL JONGSEONG PIEUP
-11b9 HANGUL JONGSEONG PIEUP-SIOS
-11ba HANGUL JONGSEONG SIOS
-11bb HANGUL JONGSEONG SSANGSIOS
-11bc HANGUL JONGSEONG IEUNG
-11bd HANGUL JONGSEONG CIEUC
-11be HANGUL JONGSEONG CHIEUCH
-11bf HANGUL JONGSEONG KHIEUKH
-11c0 HANGUL JONGSEONG THIEUTH
-11c1 HANGUL JONGSEONG PHIEUPH
-11c2 HANGUL JONGSEONG HIEUH
-11c3 HANGUL JONGSEONG KIYEOK-RIEUL
-11c4 HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
-11c5 HANGUL JONGSEONG NIEUN-KIYEOK
-11c6 HANGUL JONGSEONG NIEUN-TIKEUT
-11c7 HANGUL JONGSEONG NIEUN-SIOS
-11c8 HANGUL JONGSEONG NIEUN-PANSIOS
-11c9 HANGUL JONGSEONG NIEUN-THIEUTH
-11ca HANGUL JONGSEONG TIKEUT-KIYEOK
-11cb HANGUL JONGSEONG TIKEUT-RIEUL
-11cc HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
-11cd HANGUL JONGSEONG RIEUL-NIEUN
-11ce HANGUL JONGSEONG RIEUL-TIKEUT
-11cf HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
-11d0 HANGUL JONGSEONG SSANGRIEUL
-11d1 HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
-11d2 HANGUL JONGSEONG RIEUL-MIEUM-SIOS
-11d3 HANGUL JONGSEONG RIEUL-PIEUP-SIOS
-11d4 HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
-11d5 HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
-11d6 HANGUL JONGSEONG RIEUL-SSANGSIOS
-11d7 HANGUL JONGSEONG RIEUL-PANSIOS
-11d8 HANGUL JONGSEONG RIEUL-KHIEUKH
-11d9 HANGUL JONGSEONG RIEUL-YEORINHIEUH
-11da HANGUL JONGSEONG MIEUM-KIYEOK
-11db HANGUL JONGSEONG MIEUM-RIEUL
-11dc HANGUL JONGSEONG MIEUM-PIEUP
-11dd HANGUL JONGSEONG MIEUM-SIOS
-11de HANGUL JONGSEONG MIEUM-SSANGSIOS
-11df HANGUL JONGSEONG MIEUM-PANSIOS
-11e0 HANGUL JONGSEONG MIEUM-CHIEUCH
-11e1 HANGUL JONGSEONG MIEUM-HIEUH
-11e2 HANGUL JONGSEONG KAPYEOUNMIEUM
-11e3 HANGUL JONGSEONG PIEUP-RIEUL
-11e4 HANGUL JONGSEONG PIEUP-PHIEUPH
-11e5 HANGUL JONGSEONG PIEUP-HIEUH
-11e6 HANGUL JONGSEONG KAPYEOUNPIEUP
-11e7 HANGUL JONGSEONG SIOS-KIYEOK
-11e8 HANGUL JONGSEONG SIOS-TIKEUT
-11e9 HANGUL JONGSEONG SIOS-RIEUL
-11ea HANGUL JONGSEONG SIOS-PIEUP
-11eb HANGUL JONGSEONG PANSIOS
-11ec HANGUL JONGSEONG IEUNG-KIYEOK
-11ed HANGUL JONGSEONG IEUNG-SSANGKIYEOK
-11ee HANGUL JONGSEONG SSANGIEUNG
-11ef HANGUL JONGSEONG IEUNG-KHIEUKH
-11f0 HANGUL JONGSEONG YESIEUNG
-11f1 HANGUL JONGSEONG YESIEUNG-SIOS
-11f2 HANGUL JONGSEONG YESIEUNG-PANSIOS
-11f3 HANGUL JONGSEONG PHIEUPH-PIEUP
-11f4 HANGUL JONGSEONG KAPYEOUNPHIEUPH
-11f5 HANGUL JONGSEONG HIEUH-NIEUN
-11f6 HANGUL JONGSEONG HIEUH-RIEUL
-11f7 HANGUL JONGSEONG HIEUH-MIEUM
-11f8 HANGUL JONGSEONG HIEUH-PIEUP
-11f9 HANGUL JONGSEONG YEORINHIEUH
-1200 ETHIOPIC SYLLABLE HA
-1201 ETHIOPIC SYLLABLE HU
-1202 ETHIOPIC SYLLABLE HI
-1203 ETHIOPIC SYLLABLE HAA
-1204 ETHIOPIC SYLLABLE HEE
-1205 ETHIOPIC SYLLABLE HE
-1206 ETHIOPIC SYLLABLE HO
-1208 ETHIOPIC SYLLABLE LA
-1209 ETHIOPIC SYLLABLE LU
-120a ETHIOPIC SYLLABLE LI
-120b ETHIOPIC SYLLABLE LAA
-120c ETHIOPIC SYLLABLE LEE
-120d ETHIOPIC SYLLABLE LE
-120e ETHIOPIC SYLLABLE LO
-120f ETHIOPIC SYLLABLE LWA
-1210 ETHIOPIC SYLLABLE HHA
-1211 ETHIOPIC SYLLABLE HHU
-1212 ETHIOPIC SYLLABLE HHI
-1213 ETHIOPIC SYLLABLE HHAA
-1214 ETHIOPIC SYLLABLE HHEE
-1215 ETHIOPIC SYLLABLE HHE
-1216 ETHIOPIC SYLLABLE HHO
-1217 ETHIOPIC SYLLABLE HHWA
-1218 ETHIOPIC SYLLABLE MA
-1219 ETHIOPIC SYLLABLE MU
-121a ETHIOPIC SYLLABLE MI
-121b ETHIOPIC SYLLABLE MAA
-121c ETHIOPIC SYLLABLE MEE
-121d ETHIOPIC SYLLABLE ME
-121e ETHIOPIC SYLLABLE MO
-121f ETHIOPIC SYLLABLE MWA
-1220 ETHIOPIC SYLLABLE SZA
-1221 ETHIOPIC SYLLABLE SZU
-1222 ETHIOPIC SYLLABLE SZI
-1223 ETHIOPIC SYLLABLE SZAA
-1224 ETHIOPIC SYLLABLE SZEE
-1225 ETHIOPIC SYLLABLE SZE
-1226 ETHIOPIC SYLLABLE SZO
-1227 ETHIOPIC SYLLABLE SZWA
-1228 ETHIOPIC SYLLABLE RA
-1229 ETHIOPIC SYLLABLE RU
-122a ETHIOPIC SYLLABLE RI
-122b ETHIOPIC SYLLABLE RAA
-122c ETHIOPIC SYLLABLE REE
-122d ETHIOPIC SYLLABLE RE
-122e ETHIOPIC SYLLABLE RO
-122f ETHIOPIC SYLLABLE RWA
-1230 ETHIOPIC SYLLABLE SA
-1231 ETHIOPIC SYLLABLE SU
-1232 ETHIOPIC SYLLABLE SI
-1233 ETHIOPIC SYLLABLE SAA
-1234 ETHIOPIC SYLLABLE SEE
-1235 ETHIOPIC SYLLABLE SE
-1236 ETHIOPIC SYLLABLE SO
-1237 ETHIOPIC SYLLABLE SWA
-1238 ETHIOPIC SYLLABLE SHA
-1239 ETHIOPIC SYLLABLE SHU
-123a ETHIOPIC SYLLABLE SHI
-123b ETHIOPIC SYLLABLE SHAA
-123c ETHIOPIC SYLLABLE SHEE
-123d ETHIOPIC SYLLABLE SHE
-123e ETHIOPIC SYLLABLE SHO
-123f ETHIOPIC SYLLABLE SHWA
-1240 ETHIOPIC SYLLABLE QA
-1241 ETHIOPIC SYLLABLE QU
-1242 ETHIOPIC SYLLABLE QI
-1243 ETHIOPIC SYLLABLE QAA
-1244 ETHIOPIC SYLLABLE QEE
-1245 ETHIOPIC SYLLABLE QE
-1246 ETHIOPIC SYLLABLE QO
-1248 ETHIOPIC SYLLABLE QWA
-124a ETHIOPIC SYLLABLE QWI
-124b ETHIOPIC SYLLABLE QWAA
-124c ETHIOPIC SYLLABLE QWEE
-124d ETHIOPIC SYLLABLE QWE
-1250 ETHIOPIC SYLLABLE QHA
-1251 ETHIOPIC SYLLABLE QHU
-1252 ETHIOPIC SYLLABLE QHI
-1253 ETHIOPIC SYLLABLE QHAA
-1254 ETHIOPIC SYLLABLE QHEE
-1255 ETHIOPIC SYLLABLE QHE
-1256 ETHIOPIC SYLLABLE QHO
-1258 ETHIOPIC SYLLABLE QHWA
-125a ETHIOPIC SYLLABLE QHWI
-125b ETHIOPIC SYLLABLE QHWAA
-125c ETHIOPIC SYLLABLE QHWEE
-125d ETHIOPIC SYLLABLE QHWE
-1260 ETHIOPIC SYLLABLE BA
-1261 ETHIOPIC SYLLABLE BU
-1262 ETHIOPIC SYLLABLE BI
-1263 ETHIOPIC SYLLABLE BAA
-1264 ETHIOPIC SYLLABLE BEE
-1265 ETHIOPIC SYLLABLE BE
-1266 ETHIOPIC SYLLABLE BO
-1267 ETHIOPIC SYLLABLE BWA
-1268 ETHIOPIC SYLLABLE VA
-1269 ETHIOPIC SYLLABLE VU
-126a ETHIOPIC SYLLABLE VI
-126b ETHIOPIC SYLLABLE VAA
-126c ETHIOPIC SYLLABLE VEE
-126d ETHIOPIC SYLLABLE VE
-126e ETHIOPIC SYLLABLE VO
-126f ETHIOPIC SYLLABLE VWA
-1270 ETHIOPIC SYLLABLE TA
-1271 ETHIOPIC SYLLABLE TU
-1272 ETHIOPIC SYLLABLE TI
-1273 ETHIOPIC SYLLABLE TAA
-1274 ETHIOPIC SYLLABLE TEE
-1275 ETHIOPIC SYLLABLE TE
-1276 ETHIOPIC SYLLABLE TO
-1277 ETHIOPIC SYLLABLE TWA
-1278 ETHIOPIC SYLLABLE CA
-1279 ETHIOPIC SYLLABLE CU
-127a ETHIOPIC SYLLABLE CI
-127b ETHIOPIC SYLLABLE CAA
-127c ETHIOPIC SYLLABLE CEE
-127d ETHIOPIC SYLLABLE CE
-127e ETHIOPIC SYLLABLE CO
-127f ETHIOPIC SYLLABLE CWA
-1280 ETHIOPIC SYLLABLE XA
-1281 ETHIOPIC SYLLABLE XU
-1282 ETHIOPIC SYLLABLE XI
-1283 ETHIOPIC SYLLABLE XAA
-1284 ETHIOPIC SYLLABLE XEE
-1285 ETHIOPIC SYLLABLE XE
-1286 ETHIOPIC SYLLABLE XO
-1288 ETHIOPIC SYLLABLE XWA
-128a ETHIOPIC SYLLABLE XWI
-128b ETHIOPIC SYLLABLE XWAA
-128c ETHIOPIC SYLLABLE XWEE
-128d ETHIOPIC SYLLABLE XWE
-1290 ETHIOPIC SYLLABLE NA
-1291 ETHIOPIC SYLLABLE NU
-1292 ETHIOPIC SYLLABLE NI
-1293 ETHIOPIC SYLLABLE NAA
-1294 ETHIOPIC SYLLABLE NEE
-1295 ETHIOPIC SYLLABLE NE
-1296 ETHIOPIC SYLLABLE NO
-1297 ETHIOPIC SYLLABLE NWA
-1298 ETHIOPIC SYLLABLE NYA
-1299 ETHIOPIC SYLLABLE NYU
-129a ETHIOPIC SYLLABLE NYI
-129b ETHIOPIC SYLLABLE NYAA
-129c ETHIOPIC SYLLABLE NYEE
-129d ETHIOPIC SYLLABLE NYE
-129e ETHIOPIC SYLLABLE NYO
-129f ETHIOPIC SYLLABLE NYWA
-12a0 ETHIOPIC SYLLABLE GLOTTAL A
-12a1 ETHIOPIC SYLLABLE GLOTTAL U
-12a2 ETHIOPIC SYLLABLE GLOTTAL I
-12a3 ETHIOPIC SYLLABLE GLOTTAL AA
-12a4 ETHIOPIC SYLLABLE GLOTTAL EE
-12a5 ETHIOPIC SYLLABLE GLOTTAL E
-12a6 ETHIOPIC SYLLABLE GLOTTAL O
-12a7 ETHIOPIC SYLLABLE GLOTTAL WA
-12a8 ETHIOPIC SYLLABLE KA
-12a9 ETHIOPIC SYLLABLE KU
-12aa ETHIOPIC SYLLABLE KI
-12ab ETHIOPIC SYLLABLE KAA
-12ac ETHIOPIC SYLLABLE KEE
-12ad ETHIOPIC SYLLABLE KE
-12ae ETHIOPIC SYLLABLE KO
-12b0 ETHIOPIC SYLLABLE KWA
-12b2 ETHIOPIC SYLLABLE KWI
-12b3 ETHIOPIC SYLLABLE KWAA
-12b4 ETHIOPIC SYLLABLE KWEE
-12b5 ETHIOPIC SYLLABLE KWE
-12b8 ETHIOPIC SYLLABLE KXA
-12b9 ETHIOPIC SYLLABLE KXU
-12ba ETHIOPIC SYLLABLE KXI
-12bb ETHIOPIC SYLLABLE KXAA
-12bc ETHIOPIC SYLLABLE KXEE
-12bd ETHIOPIC SYLLABLE KXE
-12be ETHIOPIC SYLLABLE KXO
-12c0 ETHIOPIC SYLLABLE KXWA
-12c2 ETHIOPIC SYLLABLE KXWI
-12c3 ETHIOPIC SYLLABLE KXWAA
-12c4 ETHIOPIC SYLLABLE KXWEE
-12c5 ETHIOPIC SYLLABLE KXWE
-12c8 ETHIOPIC SYLLABLE WA
-12c9 ETHIOPIC SYLLABLE WU
-12ca ETHIOPIC SYLLABLE WI
-12cb ETHIOPIC SYLLABLE WAA
-12cc ETHIOPIC SYLLABLE WEE
-12cd ETHIOPIC SYLLABLE WE
-12ce ETHIOPIC SYLLABLE WO
-12d0 ETHIOPIC SYLLABLE PHARYNGEAL A
-12d1 ETHIOPIC SYLLABLE PHARYNGEAL U
-12d2 ETHIOPIC SYLLABLE PHARYNGEAL I
-12d3 ETHIOPIC SYLLABLE PHARYNGEAL AA
-12d4 ETHIOPIC SYLLABLE PHARYNGEAL EE
-12d5 ETHIOPIC SYLLABLE PHARYNGEAL E
-12d6 ETHIOPIC SYLLABLE PHARYNGEAL O
-12d8 ETHIOPIC SYLLABLE ZA
-12d9 ETHIOPIC SYLLABLE ZU
-12da ETHIOPIC SYLLABLE ZI
-12db ETHIOPIC SYLLABLE ZAA
-12dc ETHIOPIC SYLLABLE ZEE
-12dd ETHIOPIC SYLLABLE ZE
-12de ETHIOPIC SYLLABLE ZO
-12df ETHIOPIC SYLLABLE ZWA
-12e0 ETHIOPIC SYLLABLE ZHA
-12e1 ETHIOPIC SYLLABLE ZHU
-12e2 ETHIOPIC SYLLABLE ZHI
-12e3 ETHIOPIC SYLLABLE ZHAA
-12e4 ETHIOPIC SYLLABLE ZHEE
-12e5 ETHIOPIC SYLLABLE ZHE
-12e6 ETHIOPIC SYLLABLE ZHO
-12e7 ETHIOPIC SYLLABLE ZHWA
-12e8 ETHIOPIC SYLLABLE YA
-12e9 ETHIOPIC SYLLABLE YU
-12ea ETHIOPIC SYLLABLE YI
-12eb ETHIOPIC SYLLABLE YAA
-12ec ETHIOPIC SYLLABLE YEE
-12ed ETHIOPIC SYLLABLE YE
-12ee ETHIOPIC SYLLABLE YO
-12f0 ETHIOPIC SYLLABLE DA
-12f1 ETHIOPIC SYLLABLE DU
-12f2 ETHIOPIC SYLLABLE DI
-12f3 ETHIOPIC SYLLABLE DAA
-12f4 ETHIOPIC SYLLABLE DEE
-12f5 ETHIOPIC SYLLABLE DE
-12f6 ETHIOPIC SYLLABLE DO
-12f7 ETHIOPIC SYLLABLE DWA
-12f8 ETHIOPIC SYLLABLE DDA
-12f9 ETHIOPIC SYLLABLE DDU
-12fa ETHIOPIC SYLLABLE DDI
-12fb ETHIOPIC SYLLABLE DDAA
-12fc ETHIOPIC SYLLABLE DDEE
-12fd ETHIOPIC SYLLABLE DDE
-12fe ETHIOPIC SYLLABLE DDO
-12ff ETHIOPIC SYLLABLE DDWA
-1300 ETHIOPIC SYLLABLE JA
-1301 ETHIOPIC SYLLABLE JU
-1302 ETHIOPIC SYLLABLE JI
-1303 ETHIOPIC SYLLABLE JAA
-1304 ETHIOPIC SYLLABLE JEE
-1305 ETHIOPIC SYLLABLE JE
-1306 ETHIOPIC SYLLABLE JO
-1307 ETHIOPIC SYLLABLE JWA
-1308 ETHIOPIC SYLLABLE GA
-1309 ETHIOPIC SYLLABLE GU
-130a ETHIOPIC SYLLABLE GI
-130b ETHIOPIC SYLLABLE GAA
-130c ETHIOPIC SYLLABLE GEE
-130d ETHIOPIC SYLLABLE GE
-130e ETHIOPIC SYLLABLE GO
-1310 ETHIOPIC SYLLABLE GWA
-1312 ETHIOPIC SYLLABLE GWI
-1313 ETHIOPIC SYLLABLE GWAA
-1314 ETHIOPIC SYLLABLE GWEE
-1315 ETHIOPIC SYLLABLE GWE
-1318 ETHIOPIC SYLLABLE GGA
-1319 ETHIOPIC SYLLABLE GGU
-131a ETHIOPIC SYLLABLE GGI
-131b ETHIOPIC SYLLABLE GGAA
-131c ETHIOPIC SYLLABLE GGEE
-131d ETHIOPIC SYLLABLE GGE
-131e ETHIOPIC SYLLABLE GGO
-1320 ETHIOPIC SYLLABLE THA
-1321 ETHIOPIC SYLLABLE THU
-1322 ETHIOPIC SYLLABLE THI
-1323 ETHIOPIC SYLLABLE THAA
-1324 ETHIOPIC SYLLABLE THEE
-1325 ETHIOPIC SYLLABLE THE
-1326 ETHIOPIC SYLLABLE THO
-1327 ETHIOPIC SYLLABLE THWA
-1328 ETHIOPIC SYLLABLE CHA
-1329 ETHIOPIC SYLLABLE CHU
-132a ETHIOPIC SYLLABLE CHI
-132b ETHIOPIC SYLLABLE CHAA
-132c ETHIOPIC SYLLABLE CHEE
-132d ETHIOPIC SYLLABLE CHE
-132e ETHIOPIC SYLLABLE CHO
-132f ETHIOPIC SYLLABLE CHWA
-1330 ETHIOPIC SYLLABLE PHA
-1331 ETHIOPIC SYLLABLE PHU
-1332 ETHIOPIC SYLLABLE PHI
-1333 ETHIOPIC SYLLABLE PHAA
-1334 ETHIOPIC SYLLABLE PHEE
-1335 ETHIOPIC SYLLABLE PHE
-1336 ETHIOPIC SYLLABLE PHO
-1337 ETHIOPIC SYLLABLE PHWA
-1338 ETHIOPIC SYLLABLE TSA
-1339 ETHIOPIC SYLLABLE TSU
-133a ETHIOPIC SYLLABLE TSI
-133b ETHIOPIC SYLLABLE TSAA
-133c ETHIOPIC SYLLABLE TSEE
-133d ETHIOPIC SYLLABLE TSE
-133e ETHIOPIC SYLLABLE TSO
-133f ETHIOPIC SYLLABLE TSWA
-1340 ETHIOPIC SYLLABLE TZA
-1341 ETHIOPIC SYLLABLE TZU
-1342 ETHIOPIC SYLLABLE TZI
-1343 ETHIOPIC SYLLABLE TZAA
-1344 ETHIOPIC SYLLABLE TZEE
-1345 ETHIOPIC SYLLABLE TZE
-1346 ETHIOPIC SYLLABLE TZO
-1348 ETHIOPIC SYLLABLE FA
-1349 ETHIOPIC SYLLABLE FU
-134a ETHIOPIC SYLLABLE FI
-134b ETHIOPIC SYLLABLE FAA
-134c ETHIOPIC SYLLABLE FEE
-134d ETHIOPIC SYLLABLE FE
-134e ETHIOPIC SYLLABLE FO
-134f ETHIOPIC SYLLABLE FWA
-1350 ETHIOPIC SYLLABLE PA
-1351 ETHIOPIC SYLLABLE PU
-1352 ETHIOPIC SYLLABLE PI
-1353 ETHIOPIC SYLLABLE PAA
-1354 ETHIOPIC SYLLABLE PEE
-1355 ETHIOPIC SYLLABLE PE
-1356 ETHIOPIC SYLLABLE PO
-1357 ETHIOPIC SYLLABLE PWA
-1358 ETHIOPIC SYLLABLE RYA
-1359 ETHIOPIC SYLLABLE MYA
-135a ETHIOPIC SYLLABLE FYA
-1361 ETHIOPIC WORDSPACE
-1362 ETHIOPIC FULL STOP
-1363 ETHIOPIC COMMA
-1364 ETHIOPIC SEMICOLON
-1365 ETHIOPIC COLON
-1366 ETHIOPIC PREFACE COLON
-1367 ETHIOPIC QUESTION MARK
-1368 ETHIOPIC PARAGRAPH SEPARATOR
-1369 ETHIOPIC DIGIT ONE
-136a ETHIOPIC DIGIT TWO
-136b ETHIOPIC DIGIT THREE
-136c ETHIOPIC DIGIT FOUR
-136d ETHIOPIC DIGIT FIVE
-136e ETHIOPIC DIGIT SIX
-136f ETHIOPIC DIGIT SEVEN
-1370 ETHIOPIC DIGIT EIGHT
-1371 ETHIOPIC DIGIT NINE
-1372 ETHIOPIC NUMBER TEN
-1373 ETHIOPIC NUMBER TWENTY
-1374 ETHIOPIC NUMBER THIRTY
-1375 ETHIOPIC NUMBER FORTY
-1376 ETHIOPIC NUMBER FIFTY
-1377 ETHIOPIC NUMBER SIXTY
-1378 ETHIOPIC NUMBER SEVENTY
-1379 ETHIOPIC NUMBER EIGHTY
-137a ETHIOPIC NUMBER NINETY
-137b ETHIOPIC NUMBER HUNDRED
-137c ETHIOPIC NUMBER TEN THOUSAND
-13a0 CHEROKEE LETTER A
-13a1 CHEROKEE LETTER E
-13a2 CHEROKEE LETTER I
-13a3 CHEROKEE LETTER O
-13a4 CHEROKEE LETTER U
-13a5 CHEROKEE LETTER V
-13a6 CHEROKEE LETTER GA
-13a7 CHEROKEE LETTER KA
-13a8 CHEROKEE LETTER GE
-13a9 CHEROKEE LETTER GI
-13aa CHEROKEE LETTER GO
-13ab CHEROKEE LETTER GU
-13ac CHEROKEE LETTER GV
-13ad CHEROKEE LETTER HA
-13ae CHEROKEE LETTER HE
-13af CHEROKEE LETTER HI
-13b0 CHEROKEE LETTER HO
-13b1 CHEROKEE LETTER HU
-13b2 CHEROKEE LETTER HV
-13b3 CHEROKEE LETTER LA
-13b4 CHEROKEE LETTER LE
-13b5 CHEROKEE LETTER LI
-13b6 CHEROKEE LETTER LO
-13b7 CHEROKEE LETTER LU
-13b8 CHEROKEE LETTER LV
-13b9 CHEROKEE LETTER MA
-13ba CHEROKEE LETTER ME
-13bb CHEROKEE LETTER MI
-13bc CHEROKEE LETTER MO
-13bd CHEROKEE LETTER MU
-13be CHEROKEE LETTER NA
-13bf CHEROKEE LETTER HNA
-13c0 CHEROKEE LETTER NAH
-13c1 CHEROKEE LETTER NE
-13c2 CHEROKEE LETTER NI
-13c3 CHEROKEE LETTER NO
-13c4 CHEROKEE LETTER NU
-13c5 CHEROKEE LETTER NV
-13c6 CHEROKEE LETTER QUA
-13c7 CHEROKEE LETTER QUE
-13c8 CHEROKEE LETTER QUI
-13c9 CHEROKEE LETTER QUO
-13ca CHEROKEE LETTER QUU
-13cb CHEROKEE LETTER QUV
-13cc CHEROKEE LETTER SA
-13cd CHEROKEE LETTER S
-13ce CHEROKEE LETTER SE
-13cf CHEROKEE LETTER SI
-13d0 CHEROKEE LETTER SO
-13d1 CHEROKEE LETTER SU
-13d2 CHEROKEE LETTER SV
-13d3 CHEROKEE LETTER DA
-13d4 CHEROKEE LETTER TA
-13d5 CHEROKEE LETTER DE
-13d6 CHEROKEE LETTER TE
-13d7 CHEROKEE LETTER DI
-13d8 CHEROKEE LETTER TI
-13d9 CHEROKEE LETTER DO
-13da CHEROKEE LETTER DU
-13db CHEROKEE LETTER DV
-13dc CHEROKEE LETTER DLA
-13dd CHEROKEE LETTER TLA
-13de CHEROKEE LETTER TLE
-13df CHEROKEE LETTER TLI
-13e0 CHEROKEE LETTER TLO
-13e1 CHEROKEE LETTER TLU
-13e2 CHEROKEE LETTER TLV
-13e3 CHEROKEE LETTER TSA
-13e4 CHEROKEE LETTER TSE
-13e5 CHEROKEE LETTER TSI
-13e6 CHEROKEE LETTER TSO
-13e7 CHEROKEE LETTER TSU
-13e8 CHEROKEE LETTER TSV
-13e9 CHEROKEE LETTER WA
-13ea CHEROKEE LETTER WE
-13eb CHEROKEE LETTER WI
-13ec CHEROKEE LETTER WO
-13ed CHEROKEE LETTER WU
-13ee CHEROKEE LETTER WV
-13ef CHEROKEE LETTER YA
-13f0 CHEROKEE LETTER YE
-13f1 CHEROKEE LETTER YI
-13f2 CHEROKEE LETTER YO
-13f3 CHEROKEE LETTER YU
-13f4 CHEROKEE LETTER YV
-1401 CANADIAN SYLLABICS E
-1402 CANADIAN SYLLABICS AAI
-1403 CANADIAN SYLLABICS I
-1404 CANADIAN SYLLABICS II
-1405 CANADIAN SYLLABICS O
-1406 CANADIAN SYLLABICS OO
-1407 CANADIAN SYLLABICS Y-CREE OO
-1408 CANADIAN SYLLABICS CARRIER EE
-1409 CANADIAN SYLLABICS CARRIER I
-140a CANADIAN SYLLABICS A
-140b CANADIAN SYLLABICS AA
-140c CANADIAN SYLLABICS WE
-140d CANADIAN SYLLABICS WEST-CREE WE
-140e CANADIAN SYLLABICS WI
-140f CANADIAN SYLLABICS WEST-CREE WI
-1410 CANADIAN SYLLABICS WII
-1411 CANADIAN SYLLABICS WEST-CREE WII
-1412 CANADIAN SYLLABICS WO
-1413 CANADIAN SYLLABICS WEST-CREE WO
-1414 CANADIAN SYLLABICS WOO
-1415 CANADIAN SYLLABICS WEST-CREE WOO
-1416 CANADIAN SYLLABICS NASKAPI WOO
-1417 CANADIAN SYLLABICS WA
-1418 CANADIAN SYLLABICS WEST-CREE WA
-1419 CANADIAN SYLLABICS WAA
-141a CANADIAN SYLLABICS WEST-CREE WAA
-141b CANADIAN SYLLABICS NASKAPI WAA
-141c CANADIAN SYLLABICS AI
-141d CANADIAN SYLLABICS Y-CREE W
-141e CANADIAN SYLLABICS GLOTTAL STOP
-141f CANADIAN SYLLABICS FINAL ACUTE
-1420 CANADIAN SYLLABICS FINAL GRAVE
-1421 CANADIAN SYLLABICS FINAL BOTTOM HALF RING
-1422 CANADIAN SYLLABICS FINAL TOP HALF RING
-1423 CANADIAN SYLLABICS FINAL RIGHT HALF RING
-1424 CANADIAN SYLLABICS FINAL RING
-1425 CANADIAN SYLLABICS FINAL DOUBLE ACUTE
-1426 CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
-1427 CANADIAN SYLLABICS FINAL MIDDLE DOT
-1428 CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
-1429 CANADIAN SYLLABICS FINAL PLUS
-142a CANADIAN SYLLABICS FINAL DOWN TACK
-142b CANADIAN SYLLABICS EN
-142c CANADIAN SYLLABICS IN
-142d CANADIAN SYLLABICS ON
-142e CANADIAN SYLLABICS AN
-142f CANADIAN SYLLABICS PE
-1430 CANADIAN SYLLABICS PAAI
-1431 CANADIAN SYLLABICS PI
-1432 CANADIAN SYLLABICS PII
-1433 CANADIAN SYLLABICS PO
-1434 CANADIAN SYLLABICS POO
-1435 CANADIAN SYLLABICS Y-CREE POO
-1436 CANADIAN SYLLABICS CARRIER HEE
-1437 CANADIAN SYLLABICS CARRIER HI
-1438 CANADIAN SYLLABICS PA
-1439 CANADIAN SYLLABICS PAA
-143a CANADIAN SYLLABICS PWE
-143b CANADIAN SYLLABICS WEST-CREE PWE
-143c CANADIAN SYLLABICS PWI
-143d CANADIAN SYLLABICS WEST-CREE PWI
-143e CANADIAN SYLLABICS PWII
-143f CANADIAN SYLLABICS WEST-CREE PWII
-1440 CANADIAN SYLLABICS PWO
-1441 CANADIAN SYLLABICS WEST-CREE PWO
-1442 CANADIAN SYLLABICS PWOO
-1443 CANADIAN SYLLABICS WEST-CREE PWOO
-1444 CANADIAN SYLLABICS PWA
-1445 CANADIAN SYLLABICS WEST-CREE PWA
-1446 CANADIAN SYLLABICS PWAA
-1447 CANADIAN SYLLABICS WEST-CREE PWAA
-1448 CANADIAN SYLLABICS Y-CREE PWAA
-1449 CANADIAN SYLLABICS P
-144a CANADIAN SYLLABICS WEST-CREE P
-144b CANADIAN SYLLABICS CARRIER H
-144c CANADIAN SYLLABICS TE
-144d CANADIAN SYLLABICS TAAI
-144e CANADIAN SYLLABICS TI
-144f CANADIAN SYLLABICS TII
-1450 CANADIAN SYLLABICS TO
-1451 CANADIAN SYLLABICS TOO
-1452 CANADIAN SYLLABICS Y-CREE TOO
-1453 CANADIAN SYLLABICS CARRIER DEE
-1454 CANADIAN SYLLABICS CARRIER DI
-1455 CANADIAN SYLLABICS TA
-1456 CANADIAN SYLLABICS TAA
-1457 CANADIAN SYLLABICS TWE
-1458 CANADIAN SYLLABICS WEST-CREE TWE
-1459 CANADIAN SYLLABICS TWI
-145a CANADIAN SYLLABICS WEST-CREE TWI
-145b CANADIAN SYLLABICS TWII
-145c CANADIAN SYLLABICS WEST-CREE TWII
-145d CANADIAN SYLLABICS TWO
-145e CANADIAN SYLLABICS WEST-CREE TWO
-145f CANADIAN SYLLABICS TWOO
-1460 CANADIAN SYLLABICS WEST-CREE TWOO
-1461 CANADIAN SYLLABICS TWA
-1462 CANADIAN SYLLABICS WEST-CREE TWA
-1463 CANADIAN SYLLABICS TWAA
-1464 CANADIAN SYLLABICS WEST-CREE TWAA
-1465 CANADIAN SYLLABICS NASKAPI TWAA
-1466 CANADIAN SYLLABICS T
-1467 CANADIAN SYLLABICS TTE
-1468 CANADIAN SYLLABICS TTI
-1469 CANADIAN SYLLABICS TTO
-146a CANADIAN SYLLABICS TTA
-146b CANADIAN SYLLABICS KE
-146c CANADIAN SYLLABICS KAAI
-146d CANADIAN SYLLABICS KI
-146e CANADIAN SYLLABICS KII
-146f CANADIAN SYLLABICS KO
-1470 CANADIAN SYLLABICS KOO
-1471 CANADIAN SYLLABICS Y-CREE KOO
-1472 CANADIAN SYLLABICS KA
-1473 CANADIAN SYLLABICS KAA
-1474 CANADIAN SYLLABICS KWE
-1475 CANADIAN SYLLABICS WEST-CREE KWE
-1476 CANADIAN SYLLABICS KWI
-1477 CANADIAN SYLLABICS WEST-CREE KWI
-1478 CANADIAN SYLLABICS KWII
-1479 CANADIAN SYLLABICS WEST-CREE KWII
-147a CANADIAN SYLLABICS KWO
-147b CANADIAN SYLLABICS WEST-CREE KWO
-147c CANADIAN SYLLABICS KWOO
-147d CANADIAN SYLLABICS WEST-CREE KWOO
-147e CANADIAN SYLLABICS KWA
-147f CANADIAN SYLLABICS WEST-CREE KWA
-1480 CANADIAN SYLLABICS KWAA
-1481 CANADIAN SYLLABICS WEST-CREE KWAA
-1482 CANADIAN SYLLABICS NASKAPI KWAA
-1483 CANADIAN SYLLABICS K
-1484 CANADIAN SYLLABICS KW
-1485 CANADIAN SYLLABICS SOUTH-SLAVEY KEH
-1486 CANADIAN SYLLABICS SOUTH-SLAVEY KIH
-1487 CANADIAN SYLLABICS SOUTH-SLAVEY KOH
-1488 CANADIAN SYLLABICS SOUTH-SLAVEY KAH
-1489 CANADIAN SYLLABICS CE
-148a CANADIAN SYLLABICS CAAI
-148b CANADIAN SYLLABICS CI
-148c CANADIAN SYLLABICS CII
-148d CANADIAN SYLLABICS CO
-148e CANADIAN SYLLABICS COO
-148f CANADIAN SYLLABICS Y-CREE COO
-1490 CANADIAN SYLLABICS CA
-1491 CANADIAN SYLLABICS CAA
-1492 CANADIAN SYLLABICS CWE
-1493 CANADIAN SYLLABICS WEST-CREE CWE
-1494 CANADIAN SYLLABICS CWI
-1495 CANADIAN SYLLABICS WEST-CREE CWI
-1496 CANADIAN SYLLABICS CWII
-1497 CANADIAN SYLLABICS WEST-CREE CWII
-1498 CANADIAN SYLLABICS CWO
-1499 CANADIAN SYLLABICS WEST-CREE CWO
-149a CANADIAN SYLLABICS CWOO
-149b CANADIAN SYLLABICS WEST-CREE CWOO
-149c CANADIAN SYLLABICS CWA
-149d CANADIAN SYLLABICS WEST-CREE CWA
-149e CANADIAN SYLLABICS CWAA
-149f CANADIAN SYLLABICS WEST-CREE CWAA
-14a0 CANADIAN SYLLABICS NASKAPI CWAA
-14a1 CANADIAN SYLLABICS C
-14a2 CANADIAN SYLLABICS SAYISI TH
-14a3 CANADIAN SYLLABICS ME
-14a4 CANADIAN SYLLABICS MAAI
-14a5 CANADIAN SYLLABICS MI
-14a6 CANADIAN SYLLABICS MII
-14a7 CANADIAN SYLLABICS MO
-14a8 CANADIAN SYLLABICS MOO
-14a9 CANADIAN SYLLABICS Y-CREE MOO
-14aa CANADIAN SYLLABICS MA
-14ab CANADIAN SYLLABICS MAA
-14ac CANADIAN SYLLABICS MWE
-14ad CANADIAN SYLLABICS WEST-CREE MWE
-14ae CANADIAN SYLLABICS MWI
-14af CANADIAN SYLLABICS WEST-CREE MWI
-14b0 CANADIAN SYLLABICS MWII
-14b1 CANADIAN SYLLABICS WEST-CREE MWII
-14b2 CANADIAN SYLLABICS MWO
-14b3 CANADIAN SYLLABICS WEST-CREE MWO
-14b4 CANADIAN SYLLABICS MWOO
-14b5 CANADIAN SYLLABICS WEST-CREE MWOO
-14b6 CANADIAN SYLLABICS MWA
-14b7 CANADIAN SYLLABICS WEST-CREE MWA
-14b8 CANADIAN SYLLABICS MWAA
-14b9 CANADIAN SYLLABICS WEST-CREE MWAA
-14ba CANADIAN SYLLABICS NASKAPI MWAA
-14bb CANADIAN SYLLABICS M
-14bc CANADIAN SYLLABICS WEST-CREE M
-14bd CANADIAN SYLLABICS MH
-14be CANADIAN SYLLABICS ATHAPASCAN M
-14bf CANADIAN SYLLABICS SAYISI M
-14c0 CANADIAN SYLLABICS NE
-14c1 CANADIAN SYLLABICS NAAI
-14c2 CANADIAN SYLLABICS NI
-14c3 CANADIAN SYLLABICS NII
-14c4 CANADIAN SYLLABICS NO
-14c5 CANADIAN SYLLABICS NOO
-14c6 CANADIAN SYLLABICS Y-CREE NOO
-14c7 CANADIAN SYLLABICS NA
-14c8 CANADIAN SYLLABICS NAA
-14c9 CANADIAN SYLLABICS NWE
-14ca CANADIAN SYLLABICS WEST-CREE NWE
-14cb CANADIAN SYLLABICS NWA
-14cc CANADIAN SYLLABICS WEST-CREE NWA
-14cd CANADIAN SYLLABICS NWAA
-14ce CANADIAN SYLLABICS WEST-CREE NWAA
-14cf CANADIAN SYLLABICS NASKAPI NWAA
-14d0 CANADIAN SYLLABICS N
-14d1 CANADIAN SYLLABICS CARRIER NG
-14d2 CANADIAN SYLLABICS NH
-14d3 CANADIAN SYLLABICS LE
-14d4 CANADIAN SYLLABICS LAAI
-14d5 CANADIAN SYLLABICS LI
-14d6 CANADIAN SYLLABICS LII
-14d7 CANADIAN SYLLABICS LO
-14d8 CANADIAN SYLLABICS LOO
-14d9 CANADIAN SYLLABICS Y-CREE LOO
-14da CANADIAN SYLLABICS LA
-14db CANADIAN SYLLABICS LAA
-14dc CANADIAN SYLLABICS LWE
-14dd CANADIAN SYLLABICS WEST-CREE LWE
-14de CANADIAN SYLLABICS LWI
-14df CANADIAN SYLLABICS WEST-CREE LWI
-14e0 CANADIAN SYLLABICS LWII
-14e1 CANADIAN SYLLABICS WEST-CREE LWII
-14e2 CANADIAN SYLLABICS LWO
-14e3 CANADIAN SYLLABICS WEST-CREE LWO
-14e4 CANADIAN SYLLABICS LWOO
-14e5 CANADIAN SYLLABICS WEST-CREE LWOO
-14e6 CANADIAN SYLLABICS LWA
-14e7 CANADIAN SYLLABICS WEST-CREE LWA
-14e8 CANADIAN SYLLABICS LWAA
-14e9 CANADIAN SYLLABICS WEST-CREE LWAA
-14ea CANADIAN SYLLABICS L
-14eb CANADIAN SYLLABICS WEST-CREE L
-14ec CANADIAN SYLLABICS MEDIAL L
-14ed CANADIAN SYLLABICS SE
-14ee CANADIAN SYLLABICS SAAI
-14ef CANADIAN SYLLABICS SI
-14f0 CANADIAN SYLLABICS SII
-14f1 CANADIAN SYLLABICS SO
-14f2 CANADIAN SYLLABICS SOO
-14f3 CANADIAN SYLLABICS Y-CREE SOO
-14f4 CANADIAN SYLLABICS SA
-14f5 CANADIAN SYLLABICS SAA
-14f6 CANADIAN SYLLABICS SWE
-14f7 CANADIAN SYLLABICS WEST-CREE SWE
-14f8 CANADIAN SYLLABICS SWI
-14f9 CANADIAN SYLLABICS WEST-CREE SWI
-14fa CANADIAN SYLLABICS SWII
-14fb CANADIAN SYLLABICS WEST-CREE SWII
-14fc CANADIAN SYLLABICS SWO
-14fd CANADIAN SYLLABICS WEST-CREE SWO
-14fe CANADIAN SYLLABICS SWOO
-14ff CANADIAN SYLLABICS WEST-CREE SWOO
-1500 CANADIAN SYLLABICS SWA
-1501 CANADIAN SYLLABICS WEST-CREE SWA
-1502 CANADIAN SYLLABICS SWAA
-1503 CANADIAN SYLLABICS WEST-CREE SWAA
-1504 CANADIAN SYLLABICS NASKAPI SWAA
-1505 CANADIAN SYLLABICS S
-1506 CANADIAN SYLLABICS ATHAPASCAN S
-1507 CANADIAN SYLLABICS SW
-1508 CANADIAN SYLLABICS BLACKFOOT S
-1509 CANADIAN SYLLABICS MOOSE-CREE SK
-150a CANADIAN SYLLABICS NASKAPI SKW
-150b CANADIAN SYLLABICS NASKAPI S-W
-150c CANADIAN SYLLABICS NASKAPI SPWA
-150d CANADIAN SYLLABICS NASKAPI STWA
-150e CANADIAN SYLLABICS NASKAPI SKWA
-150f CANADIAN SYLLABICS NASKAPI SCWA
-1510 CANADIAN SYLLABICS SHE
-1511 CANADIAN SYLLABICS SHI
-1512 CANADIAN SYLLABICS SHII
-1513 CANADIAN SYLLABICS SHO
-1514 CANADIAN SYLLABICS SHOO
-1515 CANADIAN SYLLABICS SHA
-1516 CANADIAN SYLLABICS SHAA
-1517 CANADIAN SYLLABICS SHWE
-1518 CANADIAN SYLLABICS WEST-CREE SHWE
-1519 CANADIAN SYLLABICS SHWI
-151a CANADIAN SYLLABICS WEST-CREE SHWI
-151b CANADIAN SYLLABICS SHWII
-151c CANADIAN SYLLABICS WEST-CREE SHWII
-151d CANADIAN SYLLABICS SHWO
-151e CANADIAN SYLLABICS WEST-CREE SHWO
-151f CANADIAN SYLLABICS SHWOO
-1520 CANADIAN SYLLABICS WEST-CREE SHWOO
-1521 CANADIAN SYLLABICS SHWA
-1522 CANADIAN SYLLABICS WEST-CREE SHWA
-1523 CANADIAN SYLLABICS SHWAA
-1524 CANADIAN SYLLABICS WEST-CREE SHWAA
-1525 CANADIAN SYLLABICS SH
-1526 CANADIAN SYLLABICS YE
-1527 CANADIAN SYLLABICS YAAI
-1528 CANADIAN SYLLABICS YI
-1529 CANADIAN SYLLABICS YII
-152a CANADIAN SYLLABICS YO
-152b CANADIAN SYLLABICS YOO
-152c CANADIAN SYLLABICS Y-CREE YOO
-152d CANADIAN SYLLABICS YA
-152e CANADIAN SYLLABICS YAA
-152f CANADIAN SYLLABICS YWE
-1530 CANADIAN SYLLABICS WEST-CREE YWE
-1531 CANADIAN SYLLABICS YWI
-1532 CANADIAN SYLLABICS WEST-CREE YWI
-1533 CANADIAN SYLLABICS YWII
-1534 CANADIAN SYLLABICS WEST-CREE YWII
-1535 CANADIAN SYLLABICS YWO
-1536 CANADIAN SYLLABICS WEST-CREE YWO
-1537 CANADIAN SYLLABICS YWOO
-1538 CANADIAN SYLLABICS WEST-CREE YWOO
-1539 CANADIAN SYLLABICS YWA
-153a CANADIAN SYLLABICS WEST-CREE YWA
-153b CANADIAN SYLLABICS YWAA
-153c CANADIAN SYLLABICS WEST-CREE YWAA
-153d CANADIAN SYLLABICS NASKAPI YWAA
-153e CANADIAN SYLLABICS Y
-153f CANADIAN SYLLABICS BIBLE-CREE Y
-1540 CANADIAN SYLLABICS WEST-CREE Y
-1541 CANADIAN SYLLABICS SAYISI YI
-1542 CANADIAN SYLLABICS RE
-1543 CANADIAN SYLLABICS R-CREE RE
-1544 CANADIAN SYLLABICS WEST-CREE LE
-1545 CANADIAN SYLLABICS RAAI
-1546 CANADIAN SYLLABICS RI
-1547 CANADIAN SYLLABICS RII
-1548 CANADIAN SYLLABICS RO
-1549 CANADIAN SYLLABICS ROO
-154a CANADIAN SYLLABICS WEST-CREE LO
-154b CANADIAN SYLLABICS RA
-154c CANADIAN SYLLABICS RAA
-154d CANADIAN SYLLABICS WEST-CREE LA
-154e CANADIAN SYLLABICS RWAA
-154f CANADIAN SYLLABICS WEST-CREE RWAA
-1550 CANADIAN SYLLABICS R
-1551 CANADIAN SYLLABICS WEST-CREE R
-1552 CANADIAN SYLLABICS MEDIAL R
-1553 CANADIAN SYLLABICS FE
-1554 CANADIAN SYLLABICS FAAI
-1555 CANADIAN SYLLABICS FI
-1556 CANADIAN SYLLABICS FII
-1557 CANADIAN SYLLABICS FO
-1558 CANADIAN SYLLABICS FOO
-1559 CANADIAN SYLLABICS FA
-155a CANADIAN SYLLABICS FAA
-155b CANADIAN SYLLABICS FWAA
-155c CANADIAN SYLLABICS WEST-CREE FWAA
-155d CANADIAN SYLLABICS F
-155e CANADIAN SYLLABICS THE
-155f CANADIAN SYLLABICS N-CREE THE
-1560 CANADIAN SYLLABICS THI
-1561 CANADIAN SYLLABICS N-CREE THI
-1562 CANADIAN SYLLABICS THII
-1563 CANADIAN SYLLABICS N-CREE THII
-1564 CANADIAN SYLLABICS THO
-1565 CANADIAN SYLLABICS THOO
-1566 CANADIAN SYLLABICS THA
-1567 CANADIAN SYLLABICS THAA
-1568 CANADIAN SYLLABICS THWAA
-1569 CANADIAN SYLLABICS WEST-CREE THWAA
-156a CANADIAN SYLLABICS TH
-156b CANADIAN SYLLABICS TTHE
-156c CANADIAN SYLLABICS TTHI
-156d CANADIAN SYLLABICS TTHO
-156e CANADIAN SYLLABICS TTHA
-156f CANADIAN SYLLABICS TTH
-1570 CANADIAN SYLLABICS TYE
-1571 CANADIAN SYLLABICS TYI
-1572 CANADIAN SYLLABICS TYO
-1573 CANADIAN SYLLABICS TYA
-1574 CANADIAN SYLLABICS NUNAVIK HE
-1575 CANADIAN SYLLABICS NUNAVIK HI
-1576 CANADIAN SYLLABICS NUNAVIK HII
-1577 CANADIAN SYLLABICS NUNAVIK HO
-1578 CANADIAN SYLLABICS NUNAVIK HOO
-1579 CANADIAN SYLLABICS NUNAVIK HA
-157a CANADIAN SYLLABICS NUNAVIK HAA
-157b CANADIAN SYLLABICS NUNAVIK H
-157c CANADIAN SYLLABICS NUNAVUT H
-157d CANADIAN SYLLABICS HK
-157e CANADIAN SYLLABICS QAAI
-157f CANADIAN SYLLABICS QI
-1580 CANADIAN SYLLABICS QII
-1581 CANADIAN SYLLABICS QO
-1582 CANADIAN SYLLABICS QOO
-1583 CANADIAN SYLLABICS QA
-1584 CANADIAN SYLLABICS QAA
-1585 CANADIAN SYLLABICS Q
-1586 CANADIAN SYLLABICS TLHE
-1587 CANADIAN SYLLABICS TLHI
-1588 CANADIAN SYLLABICS TLHO
-1589 CANADIAN SYLLABICS TLHA
-158a CANADIAN SYLLABICS WEST-CREE RE
-158b CANADIAN SYLLABICS WEST-CREE RI
-158c CANADIAN SYLLABICS WEST-CREE RO
-158d CANADIAN SYLLABICS WEST-CREE RA
-158e CANADIAN SYLLABICS NGAAI
-158f CANADIAN SYLLABICS NGI
-1590 CANADIAN SYLLABICS NGII
-1591 CANADIAN SYLLABICS NGO
-1592 CANADIAN SYLLABICS NGOO
-1593 CANADIAN SYLLABICS NGA
-1594 CANADIAN SYLLABICS NGAA
-1595 CANADIAN SYLLABICS NG
-1596 CANADIAN SYLLABICS NNG
-1597 CANADIAN SYLLABICS SAYISI SHE
-1598 CANADIAN SYLLABICS SAYISI SHI
-1599 CANADIAN SYLLABICS SAYISI SHO
-159a CANADIAN SYLLABICS SAYISI SHA
-159b CANADIAN SYLLABICS WOODS-CREE THE
-159c CANADIAN SYLLABICS WOODS-CREE THI
-159d CANADIAN SYLLABICS WOODS-CREE THO
-159e CANADIAN SYLLABICS WOODS-CREE THA
-159f CANADIAN SYLLABICS WOODS-CREE TH
-15a0 CANADIAN SYLLABICS LHI
-15a1 CANADIAN SYLLABICS LHII
-15a2 CANADIAN SYLLABICS LHO
-15a3 CANADIAN SYLLABICS LHOO
-15a4 CANADIAN SYLLABICS LHA
-15a5 CANADIAN SYLLABICS LHAA
-15a6 CANADIAN SYLLABICS LH
-15a7 CANADIAN SYLLABICS TH-CREE THE
-15a8 CANADIAN SYLLABICS TH-CREE THI
-15a9 CANADIAN SYLLABICS TH-CREE THII
-15aa CANADIAN SYLLABICS TH-CREE THO
-15ab CANADIAN SYLLABICS TH-CREE THOO
-15ac CANADIAN SYLLABICS TH-CREE THA
-15ad CANADIAN SYLLABICS TH-CREE THAA
-15ae CANADIAN SYLLABICS TH-CREE TH
-15af CANADIAN SYLLABICS AIVILIK B
-15b0 CANADIAN SYLLABICS BLACKFOOT E
-15b1 CANADIAN SYLLABICS BLACKFOOT I
-15b2 CANADIAN SYLLABICS BLACKFOOT O
-15b3 CANADIAN SYLLABICS BLACKFOOT A
-15b4 CANADIAN SYLLABICS BLACKFOOT WE
-15b5 CANADIAN SYLLABICS BLACKFOOT WI
-15b6 CANADIAN SYLLABICS BLACKFOOT WO
-15b7 CANADIAN SYLLABICS BLACKFOOT WA
-15b8 CANADIAN SYLLABICS BLACKFOOT NE
-15b9 CANADIAN SYLLABICS BLACKFOOT NI
-15ba CANADIAN SYLLABICS BLACKFOOT NO
-15bb CANADIAN SYLLABICS BLACKFOOT NA
-15bc CANADIAN SYLLABICS BLACKFOOT KE
-15bd CANADIAN SYLLABICS BLACKFOOT KI
-15be CANADIAN SYLLABICS BLACKFOOT KO
-15bf CANADIAN SYLLABICS BLACKFOOT KA
-15c0 CANADIAN SYLLABICS SAYISI HE
-15c1 CANADIAN SYLLABICS SAYISI HI
-15c2 CANADIAN SYLLABICS SAYISI HO
-15c3 CANADIAN SYLLABICS SAYISI HA
-15c4 CANADIAN SYLLABICS CARRIER GHU
-15c5 CANADIAN SYLLABICS CARRIER GHO
-15c6 CANADIAN SYLLABICS CARRIER GHE
-15c7 CANADIAN SYLLABICS CARRIER GHEE
-15c8 CANADIAN SYLLABICS CARRIER GHI
-15c9 CANADIAN SYLLABICS CARRIER GHA
-15ca CANADIAN SYLLABICS CARRIER RU
-15cb CANADIAN SYLLABICS CARRIER RO
-15cc CANADIAN SYLLABICS CARRIER RE
-15cd CANADIAN SYLLABICS CARRIER REE
-15ce CANADIAN SYLLABICS CARRIER RI
-15cf CANADIAN SYLLABICS CARRIER RA
-15d0 CANADIAN SYLLABICS CARRIER WU
-15d1 CANADIAN SYLLABICS CARRIER WO
-15d2 CANADIAN SYLLABICS CARRIER WE
-15d3 CANADIAN SYLLABICS CARRIER WEE
-15d4 CANADIAN SYLLABICS CARRIER WI
-15d5 CANADIAN SYLLABICS CARRIER WA
-15d6 CANADIAN SYLLABICS CARRIER HWU
-15d7 CANADIAN SYLLABICS CARRIER HWO
-15d8 CANADIAN SYLLABICS CARRIER HWE
-15d9 CANADIAN SYLLABICS CARRIER HWEE
-15da CANADIAN SYLLABICS CARRIER HWI
-15db CANADIAN SYLLABICS CARRIER HWA
-15dc CANADIAN SYLLABICS CARRIER THU
-15dd CANADIAN SYLLABICS CARRIER THO
-15de CANADIAN SYLLABICS CARRIER THE
-15df CANADIAN SYLLABICS CARRIER THEE
-15e0 CANADIAN SYLLABICS CARRIER THI
-15e1 CANADIAN SYLLABICS CARRIER THA
-15e2 CANADIAN SYLLABICS CARRIER TTU
-15e3 CANADIAN SYLLABICS CARRIER TTO
-15e4 CANADIAN SYLLABICS CARRIER TTE
-15e5 CANADIAN SYLLABICS CARRIER TTEE
-15e6 CANADIAN SYLLABICS CARRIER TTI
-15e7 CANADIAN SYLLABICS CARRIER TTA
-15e8 CANADIAN SYLLABICS CARRIER PU
-15e9 CANADIAN SYLLABICS CARRIER PO
-15ea CANADIAN SYLLABICS CARRIER PE
-15eb CANADIAN SYLLABICS CARRIER PEE
-15ec CANADIAN SYLLABICS CARRIER PI
-15ed CANADIAN SYLLABICS CARRIER PA
-15ee CANADIAN SYLLABICS CARRIER P
-15ef CANADIAN SYLLABICS CARRIER GU
-15f0 CANADIAN SYLLABICS CARRIER GO
-15f1 CANADIAN SYLLABICS CARRIER GE
-15f2 CANADIAN SYLLABICS CARRIER GEE
-15f3 CANADIAN SYLLABICS CARRIER GI
-15f4 CANADIAN SYLLABICS CARRIER GA
-15f5 CANADIAN SYLLABICS CARRIER KHU
-15f6 CANADIAN SYLLABICS CARRIER KHO
-15f7 CANADIAN SYLLABICS CARRIER KHE
-15f8 CANADIAN SYLLABICS CARRIER KHEE
-15f9 CANADIAN SYLLABICS CARRIER KHI
-15fa CANADIAN SYLLABICS CARRIER KHA
-15fb CANADIAN SYLLABICS CARRIER KKU
-15fc CANADIAN SYLLABICS CARRIER KKO
-15fd CANADIAN SYLLABICS CARRIER KKE
-15fe CANADIAN SYLLABICS CARRIER KKEE
-15ff CANADIAN SYLLABICS CARRIER KKI
-1600 CANADIAN SYLLABICS CARRIER KKA
-1601 CANADIAN SYLLABICS CARRIER KK
-1602 CANADIAN SYLLABICS CARRIER NU
-1603 CANADIAN SYLLABICS CARRIER NO
-1604 CANADIAN SYLLABICS CARRIER NE
-1605 CANADIAN SYLLABICS CARRIER NEE
-1606 CANADIAN SYLLABICS CARRIER NI
-1607 CANADIAN SYLLABICS CARRIER NA
-1608 CANADIAN SYLLABICS CARRIER MU
-1609 CANADIAN SYLLABICS CARRIER MO
-160a CANADIAN SYLLABICS CARRIER ME
-160b CANADIAN SYLLABICS CARRIER MEE
-160c CANADIAN SYLLABICS CARRIER MI
-160d CANADIAN SYLLABICS CARRIER MA
-160e CANADIAN SYLLABICS CARRIER YU
-160f CANADIAN SYLLABICS CARRIER YO
-1610 CANADIAN SYLLABICS CARRIER YE
-1611 CANADIAN SYLLABICS CARRIER YEE
-1612 CANADIAN SYLLABICS CARRIER YI
-1613 CANADIAN SYLLABICS CARRIER YA
-1614 CANADIAN SYLLABICS CARRIER JU
-1615 CANADIAN SYLLABICS SAYISI JU
-1616 CANADIAN SYLLABICS CARRIER JO
-1617 CANADIAN SYLLABICS CARRIER JE
-1618 CANADIAN SYLLABICS CARRIER JEE
-1619 CANADIAN SYLLABICS CARRIER JI
-161a CANADIAN SYLLABICS SAYISI JI
-161b CANADIAN SYLLABICS CARRIER JA
-161c CANADIAN SYLLABICS CARRIER JJU
-161d CANADIAN SYLLABICS CARRIER JJO
-161e CANADIAN SYLLABICS CARRIER JJE
-161f CANADIAN SYLLABICS CARRIER JJEE
-1620 CANADIAN SYLLABICS CARRIER JJI
-1621 CANADIAN SYLLABICS CARRIER JJA
-1622 CANADIAN SYLLABICS CARRIER LU
-1623 CANADIAN SYLLABICS CARRIER LO
-1624 CANADIAN SYLLABICS CARRIER LE
-1625 CANADIAN SYLLABICS CARRIER LEE
-1626 CANADIAN SYLLABICS CARRIER LI
-1627 CANADIAN SYLLABICS CARRIER LA
-1628 CANADIAN SYLLABICS CARRIER DLU
-1629 CANADIAN SYLLABICS CARRIER DLO
-162a CANADIAN SYLLABICS CARRIER DLE
-162b CANADIAN SYLLABICS CARRIER DLEE
-162c CANADIAN SYLLABICS CARRIER DLI
-162d CANADIAN SYLLABICS CARRIER DLA
-162e CANADIAN SYLLABICS CARRIER LHU
-162f CANADIAN SYLLABICS CARRIER LHO
-1630 CANADIAN SYLLABICS CARRIER LHE
-1631 CANADIAN SYLLABICS CARRIER LHEE
-1632 CANADIAN SYLLABICS CARRIER LHI
-1633 CANADIAN SYLLABICS CARRIER LHA
-1634 CANADIAN SYLLABICS CARRIER TLHU
-1635 CANADIAN SYLLABICS CARRIER TLHO
-1636 CANADIAN SYLLABICS CARRIER TLHE
-1637 CANADIAN SYLLABICS CARRIER TLHEE
-1638 CANADIAN SYLLABICS CARRIER TLHI
-1639 CANADIAN SYLLABICS CARRIER TLHA
-163a CANADIAN SYLLABICS CARRIER TLU
-163b CANADIAN SYLLABICS CARRIER TLO
-163c CANADIAN SYLLABICS CARRIER TLE
-163d CANADIAN SYLLABICS CARRIER TLEE
-163e CANADIAN SYLLABICS CARRIER TLI
-163f CANADIAN SYLLABICS CARRIER TLA
-1640 CANADIAN SYLLABICS CARRIER ZU
-1641 CANADIAN SYLLABICS CARRIER ZO
-1642 CANADIAN SYLLABICS CARRIER ZE
-1643 CANADIAN SYLLABICS CARRIER ZEE
-1644 CANADIAN SYLLABICS CARRIER ZI
-1645 CANADIAN SYLLABICS CARRIER ZA
-1646 CANADIAN SYLLABICS CARRIER Z
-1647 CANADIAN SYLLABICS CARRIER INITIAL Z
-1648 CANADIAN SYLLABICS CARRIER DZU
-1649 CANADIAN SYLLABICS CARRIER DZO
-164a CANADIAN SYLLABICS CARRIER DZE
-164b CANADIAN SYLLABICS CARRIER DZEE
-164c CANADIAN SYLLABICS CARRIER DZI
-164d CANADIAN SYLLABICS CARRIER DZA
-164e CANADIAN SYLLABICS CARRIER SU
-164f CANADIAN SYLLABICS CARRIER SO
-1650 CANADIAN SYLLABICS CARRIER SE
-1651 CANADIAN SYLLABICS CARRIER SEE
-1652 CANADIAN SYLLABICS CARRIER SI
-1653 CANADIAN SYLLABICS CARRIER SA
-1654 CANADIAN SYLLABICS CARRIER SHU
-1655 CANADIAN SYLLABICS CARRIER SHO
-1656 CANADIAN SYLLABICS CARRIER SHE
-1657 CANADIAN SYLLABICS CARRIER SHEE
-1658 CANADIAN SYLLABICS CARRIER SHI
-1659 CANADIAN SYLLABICS CARRIER SHA
-165a CANADIAN SYLLABICS CARRIER SH
-165b CANADIAN SYLLABICS CARRIER TSU
-165c CANADIAN SYLLABICS CARRIER TSO
-165d CANADIAN SYLLABICS CARRIER TSE
-165e CANADIAN SYLLABICS CARRIER TSEE
-165f CANADIAN SYLLABICS CARRIER TSI
-1660 CANADIAN SYLLABICS CARRIER TSA
-1661 CANADIAN SYLLABICS CARRIER CHU
-1662 CANADIAN SYLLABICS CARRIER CHO
-1663 CANADIAN SYLLABICS CARRIER CHE
-1664 CANADIAN SYLLABICS CARRIER CHEE
-1665 CANADIAN SYLLABICS CARRIER CHI
-1666 CANADIAN SYLLABICS CARRIER CHA
-1667 CANADIAN SYLLABICS CARRIER TTSU
-1668 CANADIAN SYLLABICS CARRIER TTSO
-1669 CANADIAN SYLLABICS CARRIER TTSE
-166a CANADIAN SYLLABICS CARRIER TTSEE
-166b CANADIAN SYLLABICS CARRIER TTSI
-166c CANADIAN SYLLABICS CARRIER TTSA
-166d CANADIAN SYLLABICS CHI SIGN
-166e CANADIAN SYLLABICS FULL STOP
-166f CANADIAN SYLLABICS QAI
-1670 CANADIAN SYLLABICS NGAI
-1671 CANADIAN SYLLABICS NNGI
-1672 CANADIAN SYLLABICS NNGII
-1673 CANADIAN SYLLABICS NNGO
-1674 CANADIAN SYLLABICS NNGOO
-1675 CANADIAN SYLLABICS NNGA
-1676 CANADIAN SYLLABICS NNGAA
-1680 OGHAM SPACE MARK
-1681 OGHAM LETTER BEITH
-1682 OGHAM LETTER LUIS
-1683 OGHAM LETTER FEARN
-1684 OGHAM LETTER SAIL
-1685 OGHAM LETTER NION
-1686 OGHAM LETTER UATH
-1687 OGHAM LETTER DAIR
-1688 OGHAM LETTER TINNE
-1689 OGHAM LETTER COLL
-168a OGHAM LETTER CEIRT
-168b OGHAM LETTER MUIN
-168c OGHAM LETTER GORT
-168d OGHAM LETTER NGEADAL
-168e OGHAM LETTER STRAIF
-168f OGHAM LETTER RUIS
-1690 OGHAM LETTER AILM
-1691 OGHAM LETTER ONN
-1692 OGHAM LETTER UR
-1693 OGHAM LETTER EADHADH
-1694 OGHAM LETTER IODHADH
-1695 OGHAM LETTER EABHADH
-1696 OGHAM LETTER OR
-1697 OGHAM LETTER UILLEANN
-1698 OGHAM LETTER IFIN
-1699 OGHAM LETTER EAMHANCHOLL
-169a OGHAM LETTER PEITH
-169b OGHAM FEATHER MARK
-169c OGHAM REVERSED FEATHER MARK
-16a0 RUNIC LETTER FEHU FEOH FE F
-16a1 RUNIC LETTER V
-16a2 RUNIC LETTER URUZ UR U
-16a3 RUNIC LETTER YR
-16a4 RUNIC LETTER Y
-16a5 RUNIC LETTER W
-16a6 RUNIC LETTER THURISAZ THURS THORN
-16a7 RUNIC LETTER ETH
-16a8 RUNIC LETTER ANSUZ A
-16a9 RUNIC LETTER OS O
-16aa RUNIC LETTER AC A
-16ab RUNIC LETTER AESC
-16ac RUNIC LETTER LONG-BRANCH-OSS O
-16ad RUNIC LETTER SHORT-TWIG-OSS O
-16ae RUNIC LETTER O
-16af RUNIC LETTER OE
-16b0 RUNIC LETTER ON
-16b1 RUNIC LETTER RAIDO RAD REID R
-16b2 RUNIC LETTER KAUNA
-16b3 RUNIC LETTER CEN
-16b4 RUNIC LETTER KAUN K
-16b5 RUNIC LETTER G
-16b6 RUNIC LETTER ENG
-16b7 RUNIC LETTER GEBO GYFU G
-16b8 RUNIC LETTER GAR
-16b9 RUNIC LETTER WUNJO WYNN W
-16ba RUNIC LETTER HAGLAZ H
-16bb RUNIC LETTER HAEGL H
-16bc RUNIC LETTER LONG-BRANCH-HAGALL H
-16bd RUNIC LETTER SHORT-TWIG-HAGALL H
-16be RUNIC LETTER NAUDIZ NYD NAUD N
-16bf RUNIC LETTER SHORT-TWIG-NAUD N
-16c0 RUNIC LETTER DOTTED-N
-16c1 RUNIC LETTER ISAZ IS ISS I
-16c2 RUNIC LETTER E
-16c3 RUNIC LETTER JERAN J
-16c4 RUNIC LETTER GER
-16c5 RUNIC LETTER LONG-BRANCH-AR AE
-16c6 RUNIC LETTER SHORT-TWIG-AR A
-16c7 RUNIC LETTER IWAZ EOH
-16c8 RUNIC LETTER PERTHO PEORTH P
-16c9 RUNIC LETTER ALGIZ EOLHX
-16ca RUNIC LETTER SOWILO S
-16cb RUNIC LETTER SIGEL LONG-BRANCH-SOL S
-16cc RUNIC LETTER SHORT-TWIG-SOL S
-16cd RUNIC LETTER C
-16ce RUNIC LETTER Z
-16cf RUNIC LETTER TIWAZ TIR TYR T
-16d0 RUNIC LETTER SHORT-TWIG-TYR T
-16d1 RUNIC LETTER D
-16d2 RUNIC LETTER BERKANAN BEORC BJARKAN B
-16d3 RUNIC LETTER SHORT-TWIG-BJARKAN B
-16d4 RUNIC LETTER DOTTED-P
-16d5 RUNIC LETTER OPEN-P
-16d6 RUNIC LETTER EHWAZ EH E
-16d7 RUNIC LETTER MANNAZ MAN M
-16d8 RUNIC LETTER LONG-BRANCH-MADR M
-16d9 RUNIC LETTER SHORT-TWIG-MADR M
-16da RUNIC LETTER LAUKAZ LAGU LOGR L
-16db RUNIC LETTER DOTTED-L
-16dc RUNIC LETTER INGWAZ
-16dd RUNIC LETTER ING
-16de RUNIC LETTER DAGAZ DAEG D
-16df RUNIC LETTER OTHALAN ETHEL O
-16e0 RUNIC LETTER EAR
-16e1 RUNIC LETTER IOR
-16e2 RUNIC LETTER CWEORTH
-16e3 RUNIC LETTER CALC
-16e4 RUNIC LETTER CEALC
-16e5 RUNIC LETTER STAN
-16e6 RUNIC LETTER LONG-BRANCH-YR
-16e7 RUNIC LETTER SHORT-TWIG-YR
-16e8 RUNIC LETTER ICELANDIC-YR
-16e9 RUNIC LETTER Q
-16ea RUNIC LETTER X
-16eb RUNIC SINGLE PUNCTUATION
-16ec RUNIC MULTIPLE PUNCTUATION
-16ed RUNIC CROSS PUNCTUATION
-16ee RUNIC ARLAUG SYMBOL
-16ef RUNIC TVIMADUR SYMBOL
-16f0 RUNIC BELGTHOR SYMBOL
-1780 KHMER LETTER KA
-1781 KHMER LETTER KHA
-1782 KHMER LETTER KO
-1783 KHMER LETTER KHO
-1784 KHMER LETTER NGO
-1785 KHMER LETTER CA
-1786 KHMER LETTER CHA
-1787 KHMER LETTER CO
-1788 KHMER LETTER CHO
-1789 KHMER LETTER NYO
-178a KHMER LETTER DA
-178b KHMER LETTER TTHA
-178c KHMER LETTER DO
-178d KHMER LETTER TTHO
-178e KHMER LETTER NNO
-178f KHMER LETTER TA
-1790 KHMER LETTER THA
-1791 KHMER LETTER TO
-1792 KHMER LETTER THO
-1793 KHMER LETTER NO
-1794 KHMER LETTER BA
-1795 KHMER LETTER PHA
-1796 KHMER LETTER PO
-1797 KHMER LETTER PHO
-1798 KHMER LETTER MO
-1799 KHMER LETTER YO
-179a KHMER LETTER RO
-179b KHMER LETTER LO
-179c KHMER LETTER VO
-179d KHMER LETTER SHA
-179e KHMER LETTER SSO
-179f KHMER LETTER SA
-17a0 KHMER LETTER HA
-17a1 KHMER LETTER LA
-17a2 KHMER LETTER QA
-17a3 KHMER INDEPENDENT VOWEL QAQ
-17a4 KHMER INDEPENDENT VOWEL QAA
-17a5 KHMER INDEPENDENT VOWEL QI
-17a6 KHMER INDEPENDENT VOWEL QII
-17a7 KHMER INDEPENDENT VOWEL QU
-17a8 KHMER INDEPENDENT VOWEL QUK
-17a9 KHMER INDEPENDENT VOWEL QUU
-17aa KHMER INDEPENDENT VOWEL QUUV
-17ab KHMER INDEPENDENT VOWEL RY
-17ac KHMER INDEPENDENT VOWEL RYY
-17ad KHMER INDEPENDENT VOWEL LY
-17ae KHMER INDEPENDENT VOWEL LYY
-17af KHMER INDEPENDENT VOWEL QE
-17b0 KHMER INDEPENDENT VOWEL QAI
-17b1 KHMER INDEPENDENT VOWEL QOO TYPE ONE
-17b2 KHMER INDEPENDENT VOWEL QOO TYPE TWO
-17b3 KHMER INDEPENDENT VOWEL QAU
-17b4 KHMER VOWEL INHERENT AQ
-17b5 KHMER VOWEL INHERENT AA
-17b6 KHMER VOWEL SIGN AA
-17b7 KHMER VOWEL SIGN I
-17b8 KHMER VOWEL SIGN II
-17b9 KHMER VOWEL SIGN Y
-17ba KHMER VOWEL SIGN YY
-17bb KHMER VOWEL SIGN U
-17bc KHMER VOWEL SIGN UU
-17bd KHMER VOWEL SIGN UA
-17be KHMER VOWEL SIGN OE
-17bf KHMER VOWEL SIGN YA
-17c0 KHMER VOWEL SIGN IE
-17c1 KHMER VOWEL SIGN E
-17c2 KHMER VOWEL SIGN AE
-17c3 KHMER VOWEL SIGN AI
-17c4 KHMER VOWEL SIGN OO
-17c5 KHMER VOWEL SIGN AU
-17c6 KHMER SIGN NIKAHIT
-17c7 KHMER SIGN REAHMUK
-17c8 KHMER SIGN YUUKALEAPINTU
-17c9 KHMER SIGN MUUSIKATOAN
-17ca KHMER SIGN TRIISAP
-17cb KHMER SIGN BANTOC
-17cc KHMER SIGN ROBAT
-17cd KHMER SIGN TOANDAKHIAT
-17ce KHMER SIGN KAKABAT
-17cf KHMER SIGN AHSDA
-17d0 KHMER SIGN SAMYOK SANNYA
-17d1 KHMER SIGN VIRIAM
-17d2 KHMER SIGN COENG
-17d3 KHMER SIGN BATHAMASAT
-17d4 KHMER SIGN KHAN
-17d5 KHMER SIGN BARIYOOSAN
-17d6 KHMER SIGN CAMNUC PII KUUH
-17d7 KHMER SIGN LEK TOO
-17d8 KHMER SIGN BEYYAL
-17d9 KHMER SIGN PHNAEK MUAN
-17da KHMER SIGN KOOMUUT
-17db KHMER CURRENCY SYMBOL RIEL
-17dc KHMER SIGN AVAKRAHASANYA
-17e0 KHMER DIGIT ZERO
-17e1 KHMER DIGIT ONE
-17e2 KHMER DIGIT TWO
-17e3 KHMER DIGIT THREE
-17e4 KHMER DIGIT FOUR
-17e5 KHMER DIGIT FIVE
-17e6 KHMER DIGIT SIX
-17e7 KHMER DIGIT SEVEN
-17e8 KHMER DIGIT EIGHT
-17e9 KHMER DIGIT NINE
-1800 MONGOLIAN BIRGA
-1801 MONGOLIAN ELLIPSIS
-1802 MONGOLIAN COMMA
-1803 MONGOLIAN FULL STOP
-1804 MONGOLIAN COLON
-1805 MONGOLIAN FOUR DOTS
-1806 MONGOLIAN TODO SOFT HYPHEN
-1807 MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
-1808 MONGOLIAN MANCHU COMMA
-1809 MONGOLIAN MANCHU FULL STOP
-180a MONGOLIAN NIRUGU
-180b MONGOLIAN FREE VARIATION SELECTOR ONE
-180c MONGOLIAN FREE VARIATION SELECTOR TWO
-180d MONGOLIAN FREE VARIATION SELECTOR THREE
-180e MONGOLIAN VOWEL SEPARATOR
-1810 MONGOLIAN DIGIT ZERO
-1811 MONGOLIAN DIGIT ONE
-1812 MONGOLIAN DIGIT TWO
-1813 MONGOLIAN DIGIT THREE
-1814 MONGOLIAN DIGIT FOUR
-1815 MONGOLIAN DIGIT FIVE
-1816 MONGOLIAN DIGIT SIX
-1817 MONGOLIAN DIGIT SEVEN
-1818 MONGOLIAN DIGIT EIGHT
-1819 MONGOLIAN DIGIT NINE
-1820 MONGOLIAN LETTER A
-1821 MONGOLIAN LETTER E
-1822 MONGOLIAN LETTER I
-1823 MONGOLIAN LETTER O
-1824 MONGOLIAN LETTER U
-1825 MONGOLIAN LETTER OE
-1826 MONGOLIAN LETTER UE
-1827 MONGOLIAN LETTER EE
-1828 MONGOLIAN LETTER NA
-1829 MONGOLIAN LETTER ANG
-182a MONGOLIAN LETTER BA
-182b MONGOLIAN LETTER PA
-182c MONGOLIAN LETTER QA
-182d MONGOLIAN LETTER GA
-182e MONGOLIAN LETTER MA
-182f MONGOLIAN LETTER LA
-1830 MONGOLIAN LETTER SA
-1831 MONGOLIAN LETTER SHA
-1832 MONGOLIAN LETTER TA
-1833 MONGOLIAN LETTER DA
-1834 MONGOLIAN LETTER CHA
-1835 MONGOLIAN LETTER JA
-1836 MONGOLIAN LETTER YA
-1837 MONGOLIAN LETTER RA
-1838 MONGOLIAN LETTER WA
-1839 MONGOLIAN LETTER FA
-183a MONGOLIAN LETTER KA
-183b MONGOLIAN LETTER KHA
-183c MONGOLIAN LETTER TSA
-183d MONGOLIAN LETTER ZA
-183e MONGOLIAN LETTER HAA
-183f MONGOLIAN LETTER ZRA
-1840 MONGOLIAN LETTER LHA
-1841 MONGOLIAN LETTER ZHI
-1842 MONGOLIAN LETTER CHI
-1843 MONGOLIAN LETTER TODO LONG VOWEL SIGN
-1844 MONGOLIAN LETTER TODO E
-1845 MONGOLIAN LETTER TODO I
-1846 MONGOLIAN LETTER TODO O
-1847 MONGOLIAN LETTER TODO U
-1848 MONGOLIAN LETTER TODO OE
-1849 MONGOLIAN LETTER TODO UE
-184a MONGOLIAN LETTER TODO ANG
-184b MONGOLIAN LETTER TODO BA
-184c MONGOLIAN LETTER TODO PA
-184d MONGOLIAN LETTER TODO QA
-184e MONGOLIAN LETTER TODO GA
-184f MONGOLIAN LETTER TODO MA
-1850 MONGOLIAN LETTER TODO TA
-1851 MONGOLIAN LETTER TODO DA
-1852 MONGOLIAN LETTER TODO CHA
-1853 MONGOLIAN LETTER TODO JA
-1854 MONGOLIAN LETTER TODO TSA
-1855 MONGOLIAN LETTER TODO YA
-1856 MONGOLIAN LETTER TODO WA
-1857 MONGOLIAN LETTER TODO KA
-1858 MONGOLIAN LETTER TODO GAA
-1859 MONGOLIAN LETTER TODO HAA
-185a MONGOLIAN LETTER TODO JIA
-185b MONGOLIAN LETTER TODO NIA
-185c MONGOLIAN LETTER TODO DZA
-185d MONGOLIAN LETTER SIBE E
-185e MONGOLIAN LETTER SIBE I
-185f MONGOLIAN LETTER SIBE IY
-1860 MONGOLIAN LETTER SIBE UE
-1861 MONGOLIAN LETTER SIBE U
-1862 MONGOLIAN LETTER SIBE ANG
-1863 MONGOLIAN LETTER SIBE KA
-1864 MONGOLIAN LETTER SIBE GA
-1865 MONGOLIAN LETTER SIBE HA
-1866 MONGOLIAN LETTER SIBE PA
-1867 MONGOLIAN LETTER SIBE SHA
-1868 MONGOLIAN LETTER SIBE TA
-1869 MONGOLIAN LETTER SIBE DA
-186a MONGOLIAN LETTER SIBE JA
-186b MONGOLIAN LETTER SIBE FA
-186c MONGOLIAN LETTER SIBE GAA
-186d MONGOLIAN LETTER SIBE HAA
-186e MONGOLIAN LETTER SIBE TSA
-186f MONGOLIAN LETTER SIBE ZA
-1870 MONGOLIAN LETTER SIBE RAA
-1871 MONGOLIAN LETTER SIBE CHA
-1872 MONGOLIAN LETTER SIBE ZHA
-1873 MONGOLIAN LETTER MANCHU I
-1874 MONGOLIAN LETTER MANCHU KA
-1875 MONGOLIAN LETTER MANCHU RA
-1876 MONGOLIAN LETTER MANCHU FA
-1877 MONGOLIAN LETTER MANCHU ZHA
-1880 MONGOLIAN LETTER ALI GALI ANUSVARA ONE
-1881 MONGOLIAN LETTER ALI GALI VISARGA ONE
-1882 MONGOLIAN LETTER ALI GALI DAMARU
-1883 MONGOLIAN LETTER ALI GALI UBADAMA
-1884 MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
-1885 MONGOLIAN LETTER ALI GALI BALUDA
-1886 MONGOLIAN LETTER ALI GALI THREE BALUDA
-1887 MONGOLIAN LETTER ALI GALI A
-1888 MONGOLIAN LETTER ALI GALI I
-1889 MONGOLIAN LETTER ALI GALI KA
-188a MONGOLIAN LETTER ALI GALI NGA
-188b MONGOLIAN LETTER ALI GALI CA
-188c MONGOLIAN LETTER ALI GALI TTA
-188d MONGOLIAN LETTER ALI GALI TTHA
-188e MONGOLIAN LETTER ALI GALI DDA
-188f MONGOLIAN LETTER ALI GALI NNA
-1890 MONGOLIAN LETTER ALI GALI TA
-1891 MONGOLIAN LETTER ALI GALI DA
-1892 MONGOLIAN LETTER ALI GALI PA
-1893 MONGOLIAN LETTER ALI GALI PHA
-1894 MONGOLIAN LETTER ALI GALI SSA
-1895 MONGOLIAN LETTER ALI GALI ZHA
-1896 MONGOLIAN LETTER ALI GALI ZA
-1897 MONGOLIAN LETTER ALI GALI AH
-1898 MONGOLIAN LETTER TODO ALI GALI TA
-1899 MONGOLIAN LETTER TODO ALI GALI ZHA
-189a MONGOLIAN LETTER MANCHU ALI GALI GHA
-189b MONGOLIAN LETTER MANCHU ALI GALI NGA
-189c MONGOLIAN LETTER MANCHU ALI GALI CA
-189d MONGOLIAN LETTER MANCHU ALI GALI JHA
-189e MONGOLIAN LETTER MANCHU ALI GALI TTA
-189f MONGOLIAN LETTER MANCHU ALI GALI DDHA
-18a0 MONGOLIAN LETTER MANCHU ALI GALI TA
-18a1 MONGOLIAN LETTER MANCHU ALI GALI DHA
-18a2 MONGOLIAN LETTER MANCHU ALI GALI SSA
-18a3 MONGOLIAN LETTER MANCHU ALI GALI CYA
-18a4 MONGOLIAN LETTER MANCHU ALI GALI ZHA
-18a5 MONGOLIAN LETTER MANCHU ALI GALI ZA
-18a6 MONGOLIAN LETTER ALI GALI HALF U
-18a7 MONGOLIAN LETTER ALI GALI HALF YA
-18a8 MONGOLIAN LETTER MANCHU ALI GALI BHA
-18a9 MONGOLIAN LETTER ALI GALI DAGALGA
-1e00 LATIN CAPITAL LETTER A WITH RING BELOW
-1e01 LATIN SMALL LETTER A WITH RING BELOW
-1e02 LATIN CAPITAL LETTER B WITH DOT ABOVE
-1e03 LATIN SMALL LETTER B WITH DOT ABOVE
-1e04 LATIN CAPITAL LETTER B WITH DOT BELOW
-1e05 LATIN SMALL LETTER B WITH DOT BELOW
-1e06 LATIN CAPITAL LETTER B WITH LINE BELOW
-1e07 LATIN SMALL LETTER B WITH LINE BELOW
-1e08 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
-1e09 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
-1e0a LATIN CAPITAL LETTER D WITH DOT ABOVE
-1e0b LATIN SMALL LETTER D WITH DOT ABOVE
-1e0c LATIN CAPITAL LETTER D WITH DOT BELOW
-1e0d LATIN SMALL LETTER D WITH DOT BELOW
-1e0e LATIN CAPITAL LETTER D WITH LINE BELOW
-1e0f LATIN SMALL LETTER D WITH LINE BELOW
-1e10 LATIN CAPITAL LETTER D WITH CEDILLA
-1e11 LATIN SMALL LETTER D WITH CEDILLA
-1e12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
-1e13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
-1e14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
-1e15 LATIN SMALL LETTER E WITH MACRON AND GRAVE
-1e16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
-1e17 LATIN SMALL LETTER E WITH MACRON AND ACUTE
-1e18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
-1e19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
-1e1a LATIN CAPITAL LETTER E WITH TILDE BELOW
-1e1b LATIN SMALL LETTER E WITH TILDE BELOW
-1e1c LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
-1e1d LATIN SMALL LETTER E WITH CEDILLA AND BREVE
-1e1e LATIN CAPITAL LETTER F WITH DOT ABOVE
-1e1f LATIN SMALL LETTER F WITH DOT ABOVE
-1e20 LATIN CAPITAL LETTER G WITH MACRON
-1e21 LATIN SMALL LETTER G WITH MACRON
-1e22 LATIN CAPITAL LETTER H WITH DOT ABOVE
-1e23 LATIN SMALL LETTER H WITH DOT ABOVE
-1e24 LATIN CAPITAL LETTER H WITH DOT BELOW
-1e25 LATIN SMALL LETTER H WITH DOT BELOW
-1e26 LATIN CAPITAL LETTER H WITH DIAERESIS
-1e27 LATIN SMALL LETTER H WITH DIAERESIS
-1e28 LATIN CAPITAL LETTER H WITH CEDILLA
-1e29 LATIN SMALL LETTER H WITH CEDILLA
-1e2a LATIN CAPITAL LETTER H WITH BREVE BELOW
-1e2b LATIN SMALL LETTER H WITH BREVE BELOW
-1e2c LATIN CAPITAL LETTER I WITH TILDE BELOW
-1e2d LATIN SMALL LETTER I WITH TILDE BELOW
-1e2e LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
-1e2f LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
-1e30 LATIN CAPITAL LETTER K WITH ACUTE
-1e31 LATIN SMALL LETTER K WITH ACUTE
-1e32 LATIN CAPITAL LETTER K WITH DOT BELOW
-1e33 LATIN SMALL LETTER K WITH DOT BELOW
-1e34 LATIN CAPITAL LETTER K WITH LINE BELOW
-1e35 LATIN SMALL LETTER K WITH LINE BELOW
-1e36 LATIN CAPITAL LETTER L WITH DOT BELOW
-1e37 LATIN SMALL LETTER L WITH DOT BELOW
-1e38 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
-1e39 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
-1e3a LATIN CAPITAL LETTER L WITH LINE BELOW
-1e3b LATIN SMALL LETTER L WITH LINE BELOW
-1e3c LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
-1e3d LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
-1e3e LATIN CAPITAL LETTER M WITH ACUTE
-1e3f LATIN SMALL LETTER M WITH ACUTE
-1e40 LATIN CAPITAL LETTER M WITH DOT ABOVE
-1e41 LATIN SMALL LETTER M WITH DOT ABOVE
-1e42 LATIN CAPITAL LETTER M WITH DOT BELOW
-1e43 LATIN SMALL LETTER M WITH DOT BELOW
-1e44 LATIN CAPITAL LETTER N WITH DOT ABOVE
-1e45 LATIN SMALL LETTER N WITH DOT ABOVE
-1e46 LATIN CAPITAL LETTER N WITH DOT BELOW
-1e47 LATIN SMALL LETTER N WITH DOT BELOW
-1e48 LATIN CAPITAL LETTER N WITH LINE BELOW
-1e49 LATIN SMALL LETTER N WITH LINE BELOW
-1e4a LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
-1e4b LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
-1e4c LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
-1e4d LATIN SMALL LETTER O WITH TILDE AND ACUTE
-1e4e LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
-1e4f LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
-1e50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
-1e51 LATIN SMALL LETTER O WITH MACRON AND GRAVE
-1e52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
-1e53 LATIN SMALL LETTER O WITH MACRON AND ACUTE
-1e54 LATIN CAPITAL LETTER P WITH ACUTE
-1e55 LATIN SMALL LETTER P WITH ACUTE
-1e56 LATIN CAPITAL LETTER P WITH DOT ABOVE
-1e57 LATIN SMALL LETTER P WITH DOT ABOVE
-1e58 LATIN CAPITAL LETTER R WITH DOT ABOVE
-1e59 LATIN SMALL LETTER R WITH DOT ABOVE
-1e5a LATIN CAPITAL LETTER R WITH DOT BELOW
-1e5b LATIN SMALL LETTER R WITH DOT BELOW
-1e5c LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
-1e5d LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
-1e5e LATIN CAPITAL LETTER R WITH LINE BELOW
-1e5f LATIN SMALL LETTER R WITH LINE BELOW
-1e60 LATIN CAPITAL LETTER S WITH DOT ABOVE
-1e61 LATIN SMALL LETTER S WITH DOT ABOVE
-1e62 LATIN CAPITAL LETTER S WITH DOT BELOW
-1e63 LATIN SMALL LETTER S WITH DOT BELOW
-1e64 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
-1e65 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
-1e66 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
-1e67 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
-1e68 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
-1e69 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
-1e6a LATIN CAPITAL LETTER T WITH DOT ABOVE
-1e6b LATIN SMALL LETTER T WITH DOT ABOVE
-1e6c LATIN CAPITAL LETTER T WITH DOT BELOW
-1e6d LATIN SMALL LETTER T WITH DOT BELOW
-1e6e LATIN CAPITAL LETTER T WITH LINE BELOW
-1e6f LATIN SMALL LETTER T WITH LINE BELOW
-1e70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
-1e71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
-1e72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
-1e73 LATIN SMALL LETTER U WITH DIAERESIS BELOW
-1e74 LATIN CAPITAL LETTER U WITH TILDE BELOW
-1e75 LATIN SMALL LETTER U WITH TILDE BELOW
-1e76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
-1e77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
-1e78 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
-1e79 LATIN SMALL LETTER U WITH TILDE AND ACUTE
-1e7a LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
-1e7b LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
-1e7c LATIN CAPITAL LETTER V WITH TILDE
-1e7d LATIN SMALL LETTER V WITH TILDE
-1e7e LATIN CAPITAL LETTER V WITH DOT BELOW
-1e7f LATIN SMALL LETTER V WITH DOT BELOW
-1e80 LATIN CAPITAL LETTER W WITH GRAVE
-1e81 LATIN SMALL LETTER W WITH GRAVE
-1e82 LATIN CAPITAL LETTER W WITH ACUTE
-1e83 LATIN SMALL LETTER W WITH ACUTE
-1e84 LATIN CAPITAL LETTER W WITH DIAERESIS
-1e85 LATIN SMALL LETTER W WITH DIAERESIS
-1e86 LATIN CAPITAL LETTER W WITH DOT ABOVE
-1e87 LATIN SMALL LETTER W WITH DOT ABOVE
-1e88 LATIN CAPITAL LETTER W WITH DOT BELOW
-1e89 LATIN SMALL LETTER W WITH DOT BELOW
-1e8a LATIN CAPITAL LETTER X WITH DOT ABOVE
-1e8b LATIN SMALL LETTER X WITH DOT ABOVE
-1e8c LATIN CAPITAL LETTER X WITH DIAERESIS
-1e8d LATIN SMALL LETTER X WITH DIAERESIS
-1e8e LATIN CAPITAL LETTER Y WITH DOT ABOVE
-1e8f LATIN SMALL LETTER Y WITH DOT ABOVE
-1e90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
-1e91 LATIN SMALL LETTER Z WITH CIRCUMFLEX
-1e92 LATIN CAPITAL LETTER Z WITH DOT BELOW
-1e93 LATIN SMALL LETTER Z WITH DOT BELOW
-1e94 LATIN CAPITAL LETTER Z WITH LINE BELOW
-1e95 LATIN SMALL LETTER Z WITH LINE BELOW
-1e96 LATIN SMALL LETTER H WITH LINE BELOW
-1e97 LATIN SMALL LETTER T WITH DIAERESIS
-1e98 LATIN SMALL LETTER W WITH RING ABOVE
-1e99 LATIN SMALL LETTER Y WITH RING ABOVE
-1e9a LATIN SMALL LETTER A WITH RIGHT HALF RING
-1e9b LATIN SMALL LETTER LONG S WITH DOT ABOVE
-1ea0 LATIN CAPITAL LETTER A WITH DOT BELOW
-1ea1 LATIN SMALL LETTER A WITH DOT BELOW
-1ea2 LATIN CAPITAL LETTER A WITH HOOK ABOVE
-1ea3 LATIN SMALL LETTER A WITH HOOK ABOVE
-1ea4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-1ea5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
-1ea6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-1ea7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
-1ea8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1ea9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1eaa LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-1eab LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
-1eac LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1ead LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1eae LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-1eaf LATIN SMALL LETTER A WITH BREVE AND ACUTE
-1eb0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-1eb1 LATIN SMALL LETTER A WITH BREVE AND GRAVE
-1eb2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-1eb3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
-1eb4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-1eb5 LATIN SMALL LETTER A WITH BREVE AND TILDE
-1eb6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-1eb7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
-1eb8 LATIN CAPITAL LETTER E WITH DOT BELOW
-1eb9 LATIN SMALL LETTER E WITH DOT BELOW
-1eba LATIN CAPITAL LETTER E WITH HOOK ABOVE
-1ebb LATIN SMALL LETTER E WITH HOOK ABOVE
-1ebc LATIN CAPITAL LETTER E WITH TILDE
-1ebd LATIN SMALL LETTER E WITH TILDE
-1ebe LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-1ebf LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
-1ec0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-1ec1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
-1ec2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1ec3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1ec4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-1ec5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
-1ec6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1ec7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1ec8 LATIN CAPITAL LETTER I WITH HOOK ABOVE
-1ec9 LATIN SMALL LETTER I WITH HOOK ABOVE
-1eca LATIN CAPITAL LETTER I WITH DOT BELOW
-1ecb LATIN SMALL LETTER I WITH DOT BELOW
-1ecc LATIN CAPITAL LETTER O WITH DOT BELOW
-1ecd LATIN SMALL LETTER O WITH DOT BELOW
-1ece LATIN CAPITAL LETTER O WITH HOOK ABOVE
-1ecf LATIN SMALL LETTER O WITH HOOK ABOVE
-1ed0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ed1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ed2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ed3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ed4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ed5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ed6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-1ed7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
-1ed8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1ed9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1eda LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-1edb LATIN SMALL LETTER O WITH HORN AND ACUTE
-1edc LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-1edd LATIN SMALL LETTER O WITH HORN AND GRAVE
-1ede LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-1edf LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
-1ee0 LATIN CAPITAL LETTER O WITH HORN AND TILDE
-1ee1 LATIN SMALL LETTER O WITH HORN AND TILDE
-1ee2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-1ee3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW
-1ee4 LATIN CAPITAL LETTER U WITH DOT BELOW
-1ee5 LATIN SMALL LETTER U WITH DOT BELOW
-1ee6 LATIN CAPITAL LETTER U WITH HOOK ABOVE
-1ee7 LATIN SMALL LETTER U WITH HOOK ABOVE
-1ee8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-1ee9 LATIN SMALL LETTER U WITH HORN AND ACUTE
-1eea LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-1eeb LATIN SMALL LETTER U WITH HORN AND GRAVE
-1eec LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-1eed LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
-1eee LATIN CAPITAL LETTER U WITH HORN AND TILDE
-1eef LATIN SMALL LETTER U WITH HORN AND TILDE
-1ef0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-1ef1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW
-1ef2 LATIN CAPITAL LETTER Y WITH GRAVE
-1ef3 LATIN SMALL LETTER Y WITH GRAVE
-1ef4 LATIN CAPITAL LETTER Y WITH DOT BELOW
-1ef5 LATIN SMALL LETTER Y WITH DOT BELOW
-1ef6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-1ef7 LATIN SMALL LETTER Y WITH HOOK ABOVE
-1ef8 LATIN CAPITAL LETTER Y WITH TILDE
-1ef9 LATIN SMALL LETTER Y WITH TILDE
-1f00 GREEK SMALL LETTER ALPHA WITH PSILI
-1f01 GREEK SMALL LETTER ALPHA WITH DASIA
-1f02 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
-1f03 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
-1f04 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
-1f05 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
-1f06 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1f07 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1f08 GREEK CAPITAL LETTER ALPHA WITH PSILI
-1f09 GREEK CAPITAL LETTER ALPHA WITH DASIA
-1f0a GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
-1f0b GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
-1f0c GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
-1f0d GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
-1f0e GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1f0f GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1f10 GREEK SMALL LETTER EPSILON WITH PSILI
-1f11 GREEK SMALL LETTER EPSILON WITH DASIA
-1f12 GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
-1f13 GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
-1f14 GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
-1f15 GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-1f18 GREEK CAPITAL LETTER EPSILON WITH PSILI
-1f19 GREEK CAPITAL LETTER EPSILON WITH DASIA
-1f1a GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
-1f1b GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
-1f1c GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
-1f1d GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-1f20 GREEK SMALL LETTER ETA WITH PSILI
-1f21 GREEK SMALL LETTER ETA WITH DASIA
-1f22 GREEK SMALL LETTER ETA WITH PSILI AND VARIA
-1f23 GREEK SMALL LETTER ETA WITH DASIA AND VARIA
-1f24 GREEK SMALL LETTER ETA WITH PSILI AND OXIA
-1f25 GREEK SMALL LETTER ETA WITH DASIA AND OXIA
-1f26 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
-1f27 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
-1f28 GREEK CAPITAL LETTER ETA WITH PSILI
-1f29 GREEK CAPITAL LETTER ETA WITH DASIA
-1f2a GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
-1f2b GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
-1f2c GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
-1f2d GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
-1f2e GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
-1f2f GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
-1f30 GREEK SMALL LETTER IOTA WITH PSILI
-1f31 GREEK SMALL LETTER IOTA WITH DASIA
-1f32 GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
-1f33 GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
-1f34 GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
-1f35 GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
-1f36 GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
-1f37 GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
-1f38 GREEK CAPITAL LETTER IOTA WITH PSILI
-1f39 GREEK CAPITAL LETTER IOTA WITH DASIA
-1f3a GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
-1f3b GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
-1f3c GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
-1f3d GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
-1f3e GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
-1f3f GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
-1f40 GREEK SMALL LETTER OMICRON WITH PSILI
-1f41 GREEK SMALL LETTER OMICRON WITH DASIA
-1f42 GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
-1f43 GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
-1f44 GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
-1f45 GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-1f48 GREEK CAPITAL LETTER OMICRON WITH PSILI
-1f49 GREEK CAPITAL LETTER OMICRON WITH DASIA
-1f4a GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
-1f4b GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
-1f4c GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
-1f4d GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-1f50 GREEK SMALL LETTER UPSILON WITH PSILI
-1f51 GREEK SMALL LETTER UPSILON WITH DASIA
-1f52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1f53 GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
-1f54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1f55 GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
-1f56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1f57 GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1f59 GREEK CAPITAL LETTER UPSILON WITH DASIA
-1f5b GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-1f5d GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-1f5f GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1f60 GREEK SMALL LETTER OMEGA WITH PSILI
-1f61 GREEK SMALL LETTER OMEGA WITH DASIA
-1f62 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
-1f63 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
-1f64 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
-1f65 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
-1f66 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1f67 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1f68 GREEK CAPITAL LETTER OMEGA WITH PSILI
-1f69 GREEK CAPITAL LETTER OMEGA WITH DASIA
-1f6a GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
-1f6b GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
-1f6c GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
-1f6d GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
-1f6e GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1f6f GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1f70 GREEK SMALL LETTER ALPHA WITH VARIA
-1f71 GREEK SMALL LETTER ALPHA WITH OXIA
-1f72 GREEK SMALL LETTER EPSILON WITH VARIA
-1f73 GREEK SMALL LETTER EPSILON WITH OXIA
-1f74 GREEK SMALL LETTER ETA WITH VARIA
-1f75 GREEK SMALL LETTER ETA WITH OXIA
-1f76 GREEK SMALL LETTER IOTA WITH VARIA
-1f77 GREEK SMALL LETTER IOTA WITH OXIA
-1f78 GREEK SMALL LETTER OMICRON WITH VARIA
-1f79 GREEK SMALL LETTER OMICRON WITH OXIA
-1f7a GREEK SMALL LETTER UPSILON WITH VARIA
-1f7b GREEK SMALL LETTER UPSILON WITH OXIA
-1f7c GREEK SMALL LETTER OMEGA WITH VARIA
-1f7d GREEK SMALL LETTER OMEGA WITH OXIA
-1f80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1f81 GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1f82 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1f83 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1f84 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1f85 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1f86 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1f87 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1f88 GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1f89 GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1f8a GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1f8b GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1f8c GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1f8d GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1f8e GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1f8f GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1f90 GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1f91 GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1f92 GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1f93 GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1f94 GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1f95 GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1f96 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1f97 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1f98 GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1f99 GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1f9a GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1f9b GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1f9c GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1f9d GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1f9e GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1f9f GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1fa0 GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1fa1 GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1fa2 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1fa3 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1fa4 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1fa5 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1fa6 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1fa7 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1fa8 GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1fa9 GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1faa GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1fab GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1fac GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1fad GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1fae GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1faf GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1fb0 GREEK SMALL LETTER ALPHA WITH VRACHY
-1fb1 GREEK SMALL LETTER ALPHA WITH MACRON
-1fb2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1fb3 GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1fb4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1fb6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1fb7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1fb8 GREEK CAPITAL LETTER ALPHA WITH VRACHY
-1fb9 GREEK CAPITAL LETTER ALPHA WITH MACRON
-1fba GREEK CAPITAL LETTER ALPHA WITH VARIA
-1fbb GREEK CAPITAL LETTER ALPHA WITH OXIA
-1fbc GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1fbd GREEK KORONIS
-1fbe GREEK PROSGEGRAMMENI
-1fbf GREEK PSILI
-1fc0 GREEK PERISPOMENI
-1fc1 GREEK DIALYTIKA AND PERISPOMENI
-1fc2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1fc3 GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1fc4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1fc6 GREEK SMALL LETTER ETA WITH PERISPOMENI
-1fc7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1fc8 GREEK CAPITAL LETTER EPSILON WITH VARIA
-1fc9 GREEK CAPITAL LETTER EPSILON WITH OXIA
-1fca GREEK CAPITAL LETTER ETA WITH VARIA
-1fcb GREEK CAPITAL LETTER ETA WITH OXIA
-1fcc GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1fcd GREEK PSILI AND VARIA
-1fce GREEK PSILI AND OXIA
-1fcf GREEK PSILI AND PERISPOMENI
-1fd0 GREEK SMALL LETTER IOTA WITH VRACHY
-1fd1 GREEK SMALL LETTER IOTA WITH MACRON
-1fd2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1fd3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1fd6 GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1fd7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1fd8 GREEK CAPITAL LETTER IOTA WITH VRACHY
-1fd9 GREEK CAPITAL LETTER IOTA WITH MACRON
-1fda GREEK CAPITAL LETTER IOTA WITH VARIA
-1fdb GREEK CAPITAL LETTER IOTA WITH OXIA
-1fdd GREEK DASIA AND VARIA
-1fde GREEK DASIA AND OXIA
-1fdf GREEK DASIA AND PERISPOMENI
-1fe0 GREEK SMALL LETTER UPSILON WITH VRACHY
-1fe1 GREEK SMALL LETTER UPSILON WITH MACRON
-1fe2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1fe3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1fe4 GREEK SMALL LETTER RHO WITH PSILI
-1fe5 GREEK SMALL LETTER RHO WITH DASIA
-1fe6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1fe7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1fe8 GREEK CAPITAL LETTER UPSILON WITH VRACHY
-1fe9 GREEK CAPITAL LETTER UPSILON WITH MACRON
-1fea GREEK CAPITAL LETTER UPSILON WITH VARIA
-1feb GREEK CAPITAL LETTER UPSILON WITH OXIA
-1fec GREEK CAPITAL LETTER RHO WITH DASIA
-1fed GREEK DIALYTIKA AND VARIA
-1fee GREEK DIALYTIKA AND OXIA
-1fef GREEK VARIA
-1ff2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1ff3 GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1ff4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-1ff6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-1ff7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-1ff8 GREEK CAPITAL LETTER OMICRON WITH VARIA
-1ff9 GREEK CAPITAL LETTER OMICRON WITH OXIA
-1ffa GREEK CAPITAL LETTER OMEGA WITH VARIA
-1ffb GREEK CAPITAL LETTER OMEGA WITH OXIA
-1ffc GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-1ffd GREEK OXIA
-1ffe GREEK DASIA
-2000 EN QUAD
-2001 EM QUAD
-2002 EN SPACE
-2003 EM SPACE
-2004 THREE-PER-EM SPACE
-2005 FOUR-PER-EM SPACE
-2006 SIX-PER-EM SPACE
-2007 FIGURE SPACE
-2008 PUNCTUATION SPACE
-2009 THIN SPACE
-200a HAIR SPACE
-200b ZERO WIDTH SPACE
-200c ZERO WIDTH NON-JOINER
-200d ZERO WIDTH JOINER
-200e LEFT-TO-RIGHT MARK
-200f RIGHT-TO-LEFT MARK
-2010 HYPHEN
-2011 NON-BREAKING HYPHEN
-2012 FIGURE DASH
-2013 EN DASH
-2014 EM DASH
-2015 HORIZONTAL BAR
-2016 DOUBLE VERTICAL LINE
-2017 DOUBLE LOW LINE
-2018 LEFT SINGLE QUOTATION MARK
-2019 RIGHT SINGLE QUOTATION MARK
-201a SINGLE LOW-9 QUOTATION MARK
-201b SINGLE HIGH-REVERSED-9 QUOTATION MARK
-201c LEFT DOUBLE QUOTATION MARK
-201d RIGHT DOUBLE QUOTATION MARK
-201e DOUBLE LOW-9 QUOTATION MARK
-201f DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-2020 DAGGER
-2021 DOUBLE DAGGER
-2022 BULLET
-2023 TRIANGULAR BULLET
-2024 ONE DOT LEADER
-2025 TWO DOT LEADER
-2026 HORIZONTAL ELLIPSIS
-2027 HYPHENATION POINT
-2028 LINE SEPARATOR
-2029 PARAGRAPH SEPARATOR
-202a LEFT-TO-RIGHT EMBEDDING
-202b RIGHT-TO-LEFT EMBEDDING
-202c POP DIRECTIONAL FORMATTING
-202d LEFT-TO-RIGHT OVERRIDE
-202e RIGHT-TO-LEFT OVERRIDE
-202f NARROW NO-BREAK SPACE
-2030 PER MILLE SIGN
-2031 PER TEN THOUSAND SIGN
-2032 PRIME
-2033 DOUBLE PRIME
-2034 TRIPLE PRIME
-2035 REVERSED PRIME
-2036 REVERSED DOUBLE PRIME
-2037 REVERSED TRIPLE PRIME
-2038 CARET
-2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-203a SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-203b REFERENCE MARK
-203c DOUBLE EXCLAMATION MARK
-203d INTERROBANG
-203e OVERLINE
-203f UNDERTIE
-2040 CHARACTER TIE
-2041 CARET INSERTION POINT
-2042 ASTERISM
-2043 HYPHEN BULLET
-2044 FRACTION SLASH
-2045 LEFT SQUARE BRACKET WITH QUILL
-2046 RIGHT SQUARE BRACKET WITH QUILL
-2048 QUESTION EXCLAMATION MARK
-2049 EXCLAMATION QUESTION MARK
-204a TIRONIAN SIGN ET
-204b REVERSED PILCROW SIGN
-204c BLACK LEFTWARDS BULLET
-204d BLACK RIGHTWARDS BULLET
-206a INHIBIT SYMMETRIC SWAPPING
-206b ACTIVATE SYMMETRIC SWAPPING
-206c INHIBIT ARABIC FORM SHAPING
-206d ACTIVATE ARABIC FORM SHAPING
-206e NATIONAL DIGIT SHAPES
-206f NOMINAL DIGIT SHAPES
-2070 SUPERSCRIPT ZERO
-2074 SUPERSCRIPT FOUR
-2075 SUPERSCRIPT FIVE
-2076 SUPERSCRIPT SIX
-2077 SUPERSCRIPT SEVEN
-2078 SUPERSCRIPT EIGHT
-2079 SUPERSCRIPT NINE
-207a SUPERSCRIPT PLUS SIGN
-207b SUPERSCRIPT MINUS
-207c SUPERSCRIPT EQUALS SIGN
-207d SUPERSCRIPT LEFT PARENTHESIS
-207e SUPERSCRIPT RIGHT PARENTHESIS
-207f SUPERSCRIPT LATIN SMALL LETTER N
-2080 SUBSCRIPT ZERO
-2081 SUBSCRIPT ONE
-2082 SUBSCRIPT TWO
-2083 SUBSCRIPT THREE
-2084 SUBSCRIPT FOUR
-2085 SUBSCRIPT FIVE
-2086 SUBSCRIPT SIX
-2087 SUBSCRIPT SEVEN
-2088 SUBSCRIPT EIGHT
-2089 SUBSCRIPT NINE
-208a SUBSCRIPT PLUS SIGN
-208b SUBSCRIPT MINUS
-208c SUBSCRIPT EQUALS SIGN
-208d SUBSCRIPT LEFT PARENTHESIS
-208e SUBSCRIPT RIGHT PARENTHESIS
-20a0 EURO-CURRENCY SIGN
-20a1 COLON SIGN
-20a2 CRUZEIRO SIGN
-20a3 FRENCH FRANC SIGN
-20a4 LIRA SIGN
-20a5 MILL SIGN
-20a6 NAIRA SIGN
-20a7 PESETA SIGN
-20a8 RUPEE SIGN
-20a9 WON SIGN
-20aa NEW SHEQEL SIGN
-20ab DONG SIGN
-20ac EURO SIGN
-20ad KIP SIGN
-20ae TUGRIK SIGN
-20af DRACHMA SIGN
-20d0 COMBINING LEFT HARPOON ABOVE
-20d1 COMBINING RIGHT HARPOON ABOVE
-20d2 COMBINING LONG VERTICAL LINE OVERLAY
-20d3 COMBINING SHORT VERTICAL LINE OVERLAY
-20d4 COMBINING ANTICLOCKWISE ARROW ABOVE
-20d5 COMBINING CLOCKWISE ARROW ABOVE
-20d6 COMBINING LEFT ARROW ABOVE
-20d7 COMBINING RIGHT ARROW ABOVE
-20d8 COMBINING RING OVERLAY
-20d9 COMBINING CLOCKWISE RING OVERLAY
-20da COMBINING ANTICLOCKWISE RING OVERLAY
-20db COMBINING THREE DOTS ABOVE
-20dc COMBINING FOUR DOTS ABOVE
-20dd COMBINING ENCLOSING CIRCLE
-20de COMBINING ENCLOSING SQUARE
-20df COMBINING ENCLOSING DIAMOND
-20e0 COMBINING ENCLOSING CIRCLE BACKSLASH
-20e1 COMBINING LEFT RIGHT ARROW ABOVE
-20e2 COMBINING ENCLOSING SCREEN
-20e3 COMBINING ENCLOSING KEYCAP
-2100 ACCOUNT OF
-2101 ADDRESSED TO THE SUBJECT
-2102 DOUBLE-STRUCK CAPITAL C
-2103 DEGREE CELSIUS
-2104 CENTRE LINE SYMBOL
-2105 CARE OF
-2106 CADA UNA
-2107 EULER CONSTANT
-2108 SCRUPLE
-2109 DEGREE FAHRENHEIT
-210a SCRIPT SMALL G
-210b SCRIPT CAPITAL H
-210c BLACK-LETTER CAPITAL H
-210d DOUBLE-STRUCK CAPITAL H
-210e PLANCK CONSTANT
-210f PLANCK CONSTANT OVER TWO PI
-2110 SCRIPT CAPITAL I
-2111 BLACK-LETTER CAPITAL I
-2112 SCRIPT CAPITAL L
-2113 SCRIPT SMALL L
-2114 L B BAR SYMBOL
-2115 DOUBLE-STRUCK CAPITAL N
-2116 NUMERO SIGN
-2117 SOUND RECORDING COPYRIGHT
-2118 SCRIPT CAPITAL P
-2119 DOUBLE-STRUCK CAPITAL P
-211a DOUBLE-STRUCK CAPITAL Q
-211b SCRIPT CAPITAL R
-211c BLACK-LETTER CAPITAL R
-211d DOUBLE-STRUCK CAPITAL R
-211e PRESCRIPTION TAKE
-211f RESPONSE
-2120 SERVICE MARK
-2121 TELEPHONE SIGN
-2122 TRADE MARK SIGN
-2123 VERSICLE
-2124 DOUBLE-STRUCK CAPITAL Z
-2125 OUNCE SIGN
-2126 OHM SIGN
-2127 INVERTED OHM SIGN
-2128 BLACK-LETTER CAPITAL Z
-2129 TURNED GREEK SMALL LETTER IOTA
-212a KELVIN SIGN
-212b ANGSTROM SIGN
-212c SCRIPT CAPITAL B
-212d BLACK-LETTER CAPITAL C
-212e ESTIMATED SYMBOL
-212f SCRIPT SMALL E
-2130 SCRIPT CAPITAL E
-2131 SCRIPT CAPITAL F
-2132 TURNED CAPITAL F
-2133 SCRIPT CAPITAL M
-2134 SCRIPT SMALL O
-2135 ALEF SYMBOL
-2136 BET SYMBOL
-2137 GIMEL SYMBOL
-2138 DALET SYMBOL
-2139 INFORMATION SOURCE
-213a ROTATED CAPITAL Q
-2153 VULGAR FRACTION ONE THIRD
-2154 VULGAR FRACTION TWO THIRDS
-2155 VULGAR FRACTION ONE FIFTH
-2156 VULGAR FRACTION TWO FIFTHS
-2157 VULGAR FRACTION THREE FIFTHS
-2158 VULGAR FRACTION FOUR FIFTHS
-2159 VULGAR FRACTION ONE SIXTH
-215a VULGAR FRACTION FIVE SIXTHS
-215b VULGAR FRACTION ONE EIGHTH
-215c VULGAR FRACTION THREE EIGHTHS
-215d VULGAR FRACTION FIVE EIGHTHS
-215e VULGAR FRACTION SEVEN EIGHTHS
-215f FRACTION NUMERATOR ONE
-2160 ROMAN NUMERAL ONE
-2161 ROMAN NUMERAL TWO
-2162 ROMAN NUMERAL THREE
-2163 ROMAN NUMERAL FOUR
-2164 ROMAN NUMERAL FIVE
-2165 ROMAN NUMERAL SIX
-2166 ROMAN NUMERAL SEVEN
-2167 ROMAN NUMERAL EIGHT
-2168 ROMAN NUMERAL NINE
-2169 ROMAN NUMERAL TEN
-216a ROMAN NUMERAL ELEVEN
-216b ROMAN NUMERAL TWELVE
-216c ROMAN NUMERAL FIFTY
-216d ROMAN NUMERAL ONE HUNDRED
-216e ROMAN NUMERAL FIVE HUNDRED
-216f ROMAN NUMERAL ONE THOUSAND
-2170 SMALL ROMAN NUMERAL ONE
-2171 SMALL ROMAN NUMERAL TWO
-2172 SMALL ROMAN NUMERAL THREE
-2173 SMALL ROMAN NUMERAL FOUR
-2174 SMALL ROMAN NUMERAL FIVE
-2175 SMALL ROMAN NUMERAL SIX
-2176 SMALL ROMAN NUMERAL SEVEN
-2177 SMALL ROMAN NUMERAL EIGHT
-2178 SMALL ROMAN NUMERAL NINE
-2179 SMALL ROMAN NUMERAL TEN
-217a SMALL ROMAN NUMERAL ELEVEN
-217b SMALL ROMAN NUMERAL TWELVE
-217c SMALL ROMAN NUMERAL FIFTY
-217d SMALL ROMAN NUMERAL ONE HUNDRED
-217e SMALL ROMAN NUMERAL FIVE HUNDRED
-217f SMALL ROMAN NUMERAL ONE THOUSAND
-2180 ROMAN NUMERAL ONE THOUSAND C D
-2181 ROMAN NUMERAL FIVE THOUSAND
-2182 ROMAN NUMERAL TEN THOUSAND
-2183 ROMAN NUMERAL REVERSED ONE HUNDRED
-2190 LEFTWARDS ARROW
-2191 UPWARDS ARROW
-2192 RIGHTWARDS ARROW
-2193 DOWNWARDS ARROW
-2194 LEFT RIGHT ARROW
-2195 UP DOWN ARROW
-2196 NORTH WEST ARROW
-2197 NORTH EAST ARROW
-2198 SOUTH EAST ARROW
-2199 SOUTH WEST ARROW
-219a LEFTWARDS ARROW WITH STROKE
-219b RIGHTWARDS ARROW WITH STROKE
-219c LEFTWARDS WAVE ARROW
-219d RIGHTWARDS WAVE ARROW
-219e LEFTWARDS TWO HEADED ARROW
-219f UPWARDS TWO HEADED ARROW
-21a0 RIGHTWARDS TWO HEADED ARROW
-21a1 DOWNWARDS TWO HEADED ARROW
-21a2 LEFTWARDS ARROW WITH TAIL
-21a3 RIGHTWARDS ARROW WITH TAIL
-21a4 LEFTWARDS ARROW FROM BAR
-21a5 UPWARDS ARROW FROM BAR
-21a6 RIGHTWARDS ARROW FROM BAR
-21a7 DOWNWARDS ARROW FROM BAR
-21a8 UP DOWN ARROW WITH BASE
-21a9 LEFTWARDS ARROW WITH HOOK
-21aa RIGHTWARDS ARROW WITH HOOK
-21ab LEFTWARDS ARROW WITH LOOP
-21ac RIGHTWARDS ARROW WITH LOOP
-21ad LEFT RIGHT WAVE ARROW
-21ae LEFT RIGHT ARROW WITH STROKE
-21af DOWNWARDS ZIGZAG ARROW
-21b0 UPWARDS ARROW WITH TIP LEFTWARDS
-21b1 UPWARDS ARROW WITH TIP RIGHTWARDS
-21b2 DOWNWARDS ARROW WITH TIP LEFTWARDS
-21b3 DOWNWARDS ARROW WITH TIP RIGHTWARDS
-21b4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS
-21b5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
-21b6 ANTICLOCKWISE TOP SEMICIRCLE ARROW
-21b7 CLOCKWISE TOP SEMICIRCLE ARROW
-21b8 NORTH WEST ARROW TO LONG BAR
-21b9 LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
-21ba ANTICLOCKWISE OPEN CIRCLE ARROW
-21bb CLOCKWISE OPEN CIRCLE ARROW
-21bc LEFTWARDS HARPOON WITH BARB UPWARDS
-21bd LEFTWARDS HARPOON WITH BARB DOWNWARDS
-21be UPWARDS HARPOON WITH BARB RIGHTWARDS
-21bf UPWARDS HARPOON WITH BARB LEFTWARDS
-21c0 RIGHTWARDS HARPOON WITH BARB UPWARDS
-21c1 RIGHTWARDS HARPOON WITH BARB DOWNWARDS
-21c2 DOWNWARDS HARPOON WITH BARB RIGHTWARDS
-21c3 DOWNWARDS HARPOON WITH BARB LEFTWARDS
-21c4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW
-21c5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
-21c6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW
-21c7 LEFTWARDS PAIRED ARROWS
-21c8 UPWARDS PAIRED ARROWS
-21c9 RIGHTWARDS PAIRED ARROWS
-21ca DOWNWARDS PAIRED ARROWS
-21cb LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
-21cc RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
-21cd LEFTWARDS DOUBLE ARROW WITH STROKE
-21ce LEFT RIGHT DOUBLE ARROW WITH STROKE
-21cf RIGHTWARDS DOUBLE ARROW WITH STROKE
-21d0 LEFTWARDS DOUBLE ARROW
-21d1 UPWARDS DOUBLE ARROW
-21d2 RIGHTWARDS DOUBLE ARROW
-21d3 DOWNWARDS DOUBLE ARROW
-21d4 LEFT RIGHT DOUBLE ARROW
-21d5 UP DOWN DOUBLE ARROW
-21d6 NORTH WEST DOUBLE ARROW
-21d7 NORTH EAST DOUBLE ARROW
-21d8 SOUTH EAST DOUBLE ARROW
-21d9 SOUTH WEST DOUBLE ARROW
-21da LEFTWARDS TRIPLE ARROW
-21db RIGHTWARDS TRIPLE ARROW
-21dc LEFTWARDS SQUIGGLE ARROW
-21dd RIGHTWARDS SQUIGGLE ARROW
-21de UPWARDS ARROW WITH DOUBLE STROKE
-21df DOWNWARDS ARROW WITH DOUBLE STROKE
-21e0 LEFTWARDS DASHED ARROW
-21e1 UPWARDS DASHED ARROW
-21e2 RIGHTWARDS DASHED ARROW
-21e3 DOWNWARDS DASHED ARROW
-21e4 LEFTWARDS ARROW TO BAR
-21e5 RIGHTWARDS ARROW TO BAR
-21e6 LEFTWARDS WHITE ARROW
-21e7 UPWARDS WHITE ARROW
-21e8 RIGHTWARDS WHITE ARROW
-21e9 DOWNWARDS WHITE ARROW
-21ea UPWARDS WHITE ARROW FROM BAR
-21eb UPWARDS WHITE ARROW ON PEDESTAL
-21ec UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
-21ed UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
-21ee UPWARDS WHITE DOUBLE ARROW
-21ef UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
-21f0 RIGHTWARDS WHITE ARROW FROM WALL
-21f1 NORTH WEST ARROW TO CORNER
-21f2 SOUTH EAST ARROW TO CORNER
-21f3 UP DOWN WHITE ARROW
-2200 FOR ALL
-2201 COMPLEMENT
-2202 PARTIAL DIFFERENTIAL
-2203 THERE EXISTS
-2204 THERE DOES NOT EXIST
-2205 EMPTY SET
-2206 INCREMENT
-2207 NABLA
-2208 ELEMENT OF
-2209 NOT AN ELEMENT OF
-220a SMALL ELEMENT OF
-220b CONTAINS AS MEMBER
-220c DOES NOT CONTAIN AS MEMBER
-220d SMALL CONTAINS AS MEMBER
-220e END OF PROOF
-220f N-ARY PRODUCT
-2210 N-ARY COPRODUCT
-2211 N-ARY SUMMATION
-2212 MINUS SIGN
-2213 MINUS-OR-PLUS SIGN
-2214 DOT PLUS
-2215 DIVISION SLASH
-2216 SET MINUS
-2217 ASTERISK OPERATOR
-2218 RING OPERATOR
-2219 BULLET OPERATOR
-221a SQUARE ROOT
-221b CUBE ROOT
-221c FOURTH ROOT
-221d PROPORTIONAL TO
-221e INFINITY
-221f RIGHT ANGLE
-2220 ANGLE
-2221 MEASURED ANGLE
-2222 SPHERICAL ANGLE
-2223 DIVIDES
-2224 DOES NOT DIVIDE
-2225 PARALLEL TO
-2226 NOT PARALLEL TO
-2227 LOGICAL AND
-2228 LOGICAL OR
-2229 INTERSECTION
-222a UNION
-222b INTEGRAL
-222c DOUBLE INTEGRAL
-222d TRIPLE INTEGRAL
-222e CONTOUR INTEGRAL
-222f SURFACE INTEGRAL
-2230 VOLUME INTEGRAL
-2231 CLOCKWISE INTEGRAL
-2232 CLOCKWISE CONTOUR INTEGRAL
-2233 ANTICLOCKWISE CONTOUR INTEGRAL
-2234 THEREFORE
-2235 BECAUSE
-2236 RATIO
-2237 PROPORTION
-2238 DOT MINUS
-2239 EXCESS
-223a GEOMETRIC PROPORTION
-223b HOMOTHETIC
-223c TILDE OPERATOR
-223d REVERSED TILDE
-223e INVERTED LAZY S
-223f SINE WAVE
-2240 WREATH PRODUCT
-2241 NOT TILDE
-2242 MINUS TILDE
-2243 ASYMPTOTICALLY EQUAL TO
-2244 NOT ASYMPTOTICALLY EQUAL TO
-2245 APPROXIMATELY EQUAL TO
-2246 APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
-2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
-2248 ALMOST EQUAL TO
-2249 NOT ALMOST EQUAL TO
-224a ALMOST EQUAL OR EQUAL TO
-224b TRIPLE TILDE
-224c ALL EQUAL TO
-224d EQUIVALENT TO
-224e GEOMETRICALLY EQUIVALENT TO
-224f DIFFERENCE BETWEEN
-2250 APPROACHES THE LIMIT
-2251 GEOMETRICALLY EQUAL TO
-2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF
-2253 IMAGE OF OR APPROXIMATELY EQUAL TO
-2254 COLON EQUALS
-2255 EQUALS COLON
-2256 RING IN EQUAL TO
-2257 RING EQUAL TO
-2258 CORRESPONDS TO
-2259 ESTIMATES
-225a EQUIANGULAR TO
-225b STAR EQUALS
-225c DELTA EQUAL TO
-225d EQUAL TO BY DEFINITION
-225e MEASURED BY
-225f QUESTIONED EQUAL TO
-2260 NOT EQUAL TO
-2261 IDENTICAL TO
-2262 NOT IDENTICAL TO
-2263 STRICTLY EQUIVALENT TO
-2264 LESS-THAN OR EQUAL TO
-2265 GREATER-THAN OR EQUAL TO
-2266 LESS-THAN OVER EQUAL TO
-2267 GREATER-THAN OVER EQUAL TO
-2268 LESS-THAN BUT NOT EQUAL TO
-2269 GREATER-THAN BUT NOT EQUAL TO
-226a MUCH LESS-THAN
-226b MUCH GREATER-THAN
-226c BETWEEN
-226d NOT EQUIVALENT TO
-226e NOT LESS-THAN
-226f NOT GREATER-THAN
-2270 NEITHER LESS-THAN NOR EQUAL TO
-2271 NEITHER GREATER-THAN NOR EQUAL TO
-2272 LESS-THAN OR EQUIVALENT TO
-2273 GREATER-THAN OR EQUIVALENT TO
-2274 NEITHER LESS-THAN NOR EQUIVALENT TO
-2275 NEITHER GREATER-THAN NOR EQUIVALENT TO
-2276 LESS-THAN OR GREATER-THAN
-2277 GREATER-THAN OR LESS-THAN
-2278 NEITHER LESS-THAN NOR GREATER-THAN
-2279 NEITHER GREATER-THAN NOR LESS-THAN
-227a PRECEDES
-227b SUCCEEDS
-227c PRECEDES OR EQUAL TO
-227d SUCCEEDS OR EQUAL TO
-227e PRECEDES OR EQUIVALENT TO
-227f SUCCEEDS OR EQUIVALENT TO
-2280 DOES NOT PRECEDE
-2281 DOES NOT SUCCEED
-2282 SUBSET OF
-2283 SUPERSET OF
-2284 NOT A SUBSET OF
-2285 NOT A SUPERSET OF
-2286 SUBSET OF OR EQUAL TO
-2287 SUPERSET OF OR EQUAL TO
-2288 NEITHER A SUBSET OF NOR EQUAL TO
-2289 NEITHER A SUPERSET OF NOR EQUAL TO
-228a SUBSET OF WITH NOT EQUAL TO
-228b SUPERSET OF WITH NOT EQUAL TO
-228c MULTISET
-228d MULTISET MULTIPLICATION
-228e MULTISET UNION
-228f SQUARE IMAGE OF
-2290 SQUARE ORIGINAL OF
-2291 SQUARE IMAGE OF OR EQUAL TO
-2292 SQUARE ORIGINAL OF OR EQUAL TO
-2293 SQUARE CAP
-2294 SQUARE CUP
-2295 CIRCLED PLUS
-2296 CIRCLED MINUS
-2297 CIRCLED TIMES
-2298 CIRCLED DIVISION SLASH
-2299 CIRCLED DOT OPERATOR
-229a CIRCLED RING OPERATOR
-229b CIRCLED ASTERISK OPERATOR
-229c CIRCLED EQUALS
-229d CIRCLED DASH
-229e SQUARED PLUS
-229f SQUARED MINUS
-22a0 SQUARED TIMES
-22a1 SQUARED DOT OPERATOR
-22a2 RIGHT TACK
-22a3 LEFT TACK
-22a4 DOWN TACK
-22a5 UP TACK
-22a6 ASSERTION
-22a7 MODELS
-22a8 TRUE
-22a9 FORCES
-22aa TRIPLE VERTICAL BAR RIGHT TURNSTILE
-22ab DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-22ac DOES NOT PROVE
-22ad NOT TRUE
-22ae DOES NOT FORCE
-22af NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-22b0 PRECEDES UNDER RELATION
-22b1 SUCCEEDS UNDER RELATION
-22b2 NORMAL SUBGROUP OF
-22b3 CONTAINS AS NORMAL SUBGROUP
-22b4 NORMAL SUBGROUP OF OR EQUAL TO
-22b5 CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
-22b6 ORIGINAL OF
-22b7 IMAGE OF
-22b8 MULTIMAP
-22b9 HERMITIAN CONJUGATE MATRIX
-22ba INTERCALATE
-22bb XOR
-22bc NAND
-22bd NOR
-22be RIGHT ANGLE WITH ARC
-22bf RIGHT TRIANGLE
-22c0 N-ARY LOGICAL AND
-22c1 N-ARY LOGICAL OR
-22c2 N-ARY INTERSECTION
-22c3 N-ARY UNION
-22c4 DIAMOND OPERATOR
-22c5 DOT OPERATOR
-22c6 STAR OPERATOR
-22c7 DIVISION TIMES
-22c8 BOWTIE
-22c9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
-22ca RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
-22cb LEFT SEMIDIRECT PRODUCT
-22cc RIGHT SEMIDIRECT PRODUCT
-22cd REVERSED TILDE EQUALS
-22ce CURLY LOGICAL OR
-22cf CURLY LOGICAL AND
-22d0 DOUBLE SUBSET
-22d1 DOUBLE SUPERSET
-22d2 DOUBLE INTERSECTION
-22d3 DOUBLE UNION
-22d4 PITCHFORK
-22d5 EQUAL AND PARALLEL TO
-22d6 LESS-THAN WITH DOT
-22d7 GREATER-THAN WITH DOT
-22d8 VERY MUCH LESS-THAN
-22d9 VERY MUCH GREATER-THAN
-22da LESS-THAN EQUAL TO OR GREATER-THAN
-22db GREATER-THAN EQUAL TO OR LESS-THAN
-22dc EQUAL TO OR LESS-THAN
-22dd EQUAL TO OR GREATER-THAN
-22de EQUAL TO OR PRECEDES
-22df EQUAL TO OR SUCCEEDS
-22e0 DOES NOT PRECEDE OR EQUAL
-22e1 DOES NOT SUCCEED OR EQUAL
-22e2 NOT SQUARE IMAGE OF OR EQUAL TO
-22e3 NOT SQUARE ORIGINAL OF OR EQUAL TO
-22e4 SQUARE IMAGE OF OR NOT EQUAL TO
-22e5 SQUARE ORIGINAL OF OR NOT EQUAL TO
-22e6 LESS-THAN BUT NOT EQUIVALENT TO
-22e7 GREATER-THAN BUT NOT EQUIVALENT TO
-22e8 PRECEDES BUT NOT EQUIVALENT TO
-22e9 SUCCEEDS BUT NOT EQUIVALENT TO
-22ea NOT NORMAL SUBGROUP OF
-22eb DOES NOT CONTAIN AS NORMAL SUBGROUP
-22ec NOT NORMAL SUBGROUP OF OR EQUAL TO
-22ed DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
-22ee VERTICAL ELLIPSIS
-22ef MIDLINE HORIZONTAL ELLIPSIS
-22f0 UP RIGHT DIAGONAL ELLIPSIS
-22f1 DOWN RIGHT DIAGONAL ELLIPSIS
-2300 DIAMETER SIGN
-2301 ELECTRIC ARROW
-2302 HOUSE
-2303 UP ARROWHEAD
-2304 DOWN ARROWHEAD
-2305 PROJECTIVE
-2306 PERSPECTIVE
-2307 WAVY LINE
-2308 LEFT CEILING
-2309 RIGHT CEILING
-230a LEFT FLOOR
-230b RIGHT FLOOR
-230c BOTTOM RIGHT CROP
-230d BOTTOM LEFT CROP
-230e TOP RIGHT CROP
-230f TOP LEFT CROP
-2310 REVERSED NOT SIGN
-2311 SQUARE LOZENGE
-2312 ARC
-2313 SEGMENT
-2314 SECTOR
-2315 TELEPHONE RECORDER
-2316 POSITION INDICATOR
-2317 VIEWDATA SQUARE
-2318 PLACE OF INTEREST SIGN
-2319 TURNED NOT SIGN
-231a WATCH
-231b HOURGLASS
-231c TOP LEFT CORNER
-231d TOP RIGHT CORNER
-231e BOTTOM LEFT CORNER
-231f BOTTOM RIGHT CORNER
-2320 TOP HALF INTEGRAL
-2321 BOTTOM HALF INTEGRAL
-2322 FROWN
-2323 SMILE
-2324 UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
-2325 OPTION KEY
-2326 ERASE TO THE RIGHT
-2327 X IN A RECTANGLE BOX
-2328 KEYBOARD
-2329 LEFT-POINTING ANGLE BRACKET
-232a RIGHT-POINTING ANGLE BRACKET
-232b ERASE TO THE LEFT
-232c BENZENE RING
-232d CYLINDRICITY
-232e ALL AROUND-PROFILE
-232f SYMMETRY
-2330 TOTAL RUNOUT
-2331 DIMENSION ORIGIN
-2332 CONICAL TAPER
-2333 SLOPE
-2334 COUNTERBORE
-2335 COUNTERSINK
-2336 APL FUNCTIONAL SYMBOL I-BEAM
-2337 APL FUNCTIONAL SYMBOL SQUISH QUAD
-2338 APL FUNCTIONAL SYMBOL QUAD EQUAL
-2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
-233a APL FUNCTIONAL SYMBOL QUAD DIAMOND
-233b APL FUNCTIONAL SYMBOL QUAD JOT
-233c APL FUNCTIONAL SYMBOL QUAD CIRCLE
-233d APL FUNCTIONAL SYMBOL CIRCLE STILE
-233e APL FUNCTIONAL SYMBOL CIRCLE JOT
-233f APL FUNCTIONAL SYMBOL SLASH BAR
-2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR
-2341 APL FUNCTIONAL SYMBOL QUAD SLASH
-2342 APL FUNCTIONAL SYMBOL QUAD BACKSLASH
-2343 APL FUNCTIONAL SYMBOL QUAD LESS-THAN
-2344 APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
-2345 APL FUNCTIONAL SYMBOL LEFTWARDS VANE
-2346 APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
-2347 APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
-2348 APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
-2349 APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
-234a APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
-234b APL FUNCTIONAL SYMBOL DELTA STILE
-234c APL FUNCTIONAL SYMBOL QUAD DOWN CARET
-234d APL FUNCTIONAL SYMBOL QUAD DELTA
-234e APL FUNCTIONAL SYMBOL DOWN TACK JOT
-234f APL FUNCTIONAL SYMBOL UPWARDS VANE
-2350 APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
-2351 APL FUNCTIONAL SYMBOL UP TACK OVERBAR
-2352 APL FUNCTIONAL SYMBOL DEL STILE
-2353 APL FUNCTIONAL SYMBOL QUAD UP CARET
-2354 APL FUNCTIONAL SYMBOL QUAD DEL
-2355 APL FUNCTIONAL SYMBOL UP TACK JOT
-2356 APL FUNCTIONAL SYMBOL DOWNWARDS VANE
-2357 APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
-2358 APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
-2359 APL FUNCTIONAL SYMBOL DELTA UNDERBAR
-235a APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
-235b APL FUNCTIONAL SYMBOL JOT UNDERBAR
-235c APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
-235d APL FUNCTIONAL SYMBOL UP SHOE JOT
-235e APL FUNCTIONAL SYMBOL QUOTE QUAD
-235f APL FUNCTIONAL SYMBOL CIRCLE STAR
-2360 APL FUNCTIONAL SYMBOL QUAD COLON
-2361 APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
-2362 APL FUNCTIONAL SYMBOL DEL DIAERESIS
-2363 APL FUNCTIONAL SYMBOL STAR DIAERESIS
-2364 APL FUNCTIONAL SYMBOL JOT DIAERESIS
-2365 APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
-2366 APL FUNCTIONAL SYMBOL DOWN SHOE STILE
-2367 APL FUNCTIONAL SYMBOL LEFT SHOE STILE
-2368 APL FUNCTIONAL SYMBOL TILDE DIAERESIS
-2369 APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
-236a APL FUNCTIONAL SYMBOL COMMA BAR
-236b APL FUNCTIONAL SYMBOL DEL TILDE
-236c APL FUNCTIONAL SYMBOL ZILDE
-236d APL FUNCTIONAL SYMBOL STILE TILDE
-236e APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
-236f APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
-2370 APL FUNCTIONAL SYMBOL QUAD QUESTION
-2371 APL FUNCTIONAL SYMBOL DOWN CARET TILDE
-2372 APL FUNCTIONAL SYMBOL UP CARET TILDE
-2373 APL FUNCTIONAL SYMBOL IOTA
-2374 APL FUNCTIONAL SYMBOL RHO
-2375 APL FUNCTIONAL SYMBOL OMEGA
-2376 APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
-2377 APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
-2378 APL FUNCTIONAL SYMBOL IOTA UNDERBAR
-2379 APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
-237a APL FUNCTIONAL SYMBOL ALPHA
-237b NOT CHECK MARK
-237d SHOULDERED OPEN BOX
-237e BELL SYMBOL
-237f VERTICAL LINE WITH MIDDLE DOT
-2380 INSERTION SYMBOL
-2381 CONTINUOUS UNDERLINE SYMBOL
-2382 DISCONTINUOUS UNDERLINE SYMBOL
-2383 EMPHASIS SYMBOL
-2384 COMPOSITION SYMBOL
-2385 WHITE SQUARE WITH CENTRE VERTICAL LINE
-2386 ENTER SYMBOL
-2387 ALTERNATIVE KEY SYMBOL
-2388 HELM SYMBOL
-2389 CIRCLED HORIZONTAL BAR WITH NOTCH
-238a CIRCLED TRIANGLE DOWN
-238b BROKEN CIRCLE WITH NORTHWEST ARROW
-238c UNDO SYMBOL
-238d MONOSTABLE SYMBOL
-238e HYSTERESIS SYMBOL
-238f OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
-2390 OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
-2391 PASSIVE-PULL-DOWN-OUTPUT SYMBOL
-2392 PASSIVE-PULL-UP-OUTPUT SYMBOL
-2393 DIRECT CURRENT SYMBOL FORM TWO
-2394 SOFTWARE-FUNCTION SYMBOL
-2395 APL FUNCTIONAL SYMBOL QUAD
-2396 DECIMAL SEPARATOR KEY SYMBOL
-2397 PREVIOUS PAGE
-2398 NEXT PAGE
-2399 PRINT SCREEN SYMBOL
-239a CLEAR SCREEN SYMBOL
-2400 SYMBOL FOR NULL
-2401 SYMBOL FOR START OF HEADING
-2402 SYMBOL FOR START OF TEXT
-2403 SYMBOL FOR END OF TEXT
-2404 SYMBOL FOR END OF TRANSMISSION
-2405 SYMBOL FOR ENQUIRY
-2406 SYMBOL FOR ACKNOWLEDGE
-2407 SYMBOL FOR BELL
-2408 SYMBOL FOR BACKSPACE
-2409 SYMBOL FOR HORIZONTAL TABULATION
-240a SYMBOL FOR LINE FEED
-240b SYMBOL FOR VERTICAL TABULATION
-240c SYMBOL FOR FORM FEED
-240d SYMBOL FOR CARRIAGE RETURN
-240e SYMBOL FOR SHIFT OUT
-240f SYMBOL FOR SHIFT IN
-2410 SYMBOL FOR DATA LINK ESCAPE
-2411 SYMBOL FOR DEVICE CONTROL ONE
-2412 SYMBOL FOR DEVICE CONTROL TWO
-2413 SYMBOL FOR DEVICE CONTROL THREE
-2414 SYMBOL FOR DEVICE CONTROL FOUR
-2415 SYMBOL FOR NEGATIVE ACKNOWLEDGE
-2416 SYMBOL FOR SYNCHRONOUS IDLE
-2417 SYMBOL FOR END OF TRANSMISSION BLOCK
-2418 SYMBOL FOR CANCEL
-2419 SYMBOL FOR END OF MEDIUM
-241a SYMBOL FOR SUBSTITUTE
-241b SYMBOL FOR ESCAPE
-241c SYMBOL FOR FILE SEPARATOR
-241d SYMBOL FOR GROUP SEPARATOR
-241e SYMBOL FOR RECORD SEPARATOR
-241f SYMBOL FOR UNIT SEPARATOR
-2420 SYMBOL FOR SPACE
-2421 SYMBOL FOR DELETE
-2422 BLANK SYMBOL
-2423 OPEN BOX
-2424 SYMBOL FOR NEWLINE
-2425 SYMBOL FOR DELETE FORM TWO
-2426 SYMBOL FOR SUBSTITUTE FORM TWO
-2440 OCR HOOK
-2441 OCR CHAIR
-2442 OCR FORK
-2443 OCR INVERTED FORK
-2444 OCR BELT BUCKLE
-2445 OCR BOW TIE
-2446 OCR BRANCH BANK IDENTIFICATION
-2447 OCR AMOUNT OF CHECK
-2448 OCR DASH
-2449 OCR CUSTOMER ACCOUNT NUMBER
-244a OCR DOUBLE BACKSLASH
-2460 CIRCLED DIGIT ONE
-2461 CIRCLED DIGIT TWO
-2462 CIRCLED DIGIT THREE
-2463 CIRCLED DIGIT FOUR
-2464 CIRCLED DIGIT FIVE
-2465 CIRCLED DIGIT SIX
-2466 CIRCLED DIGIT SEVEN
-2467 CIRCLED DIGIT EIGHT
-2468 CIRCLED DIGIT NINE
-2469 CIRCLED NUMBER TEN
-246a CIRCLED NUMBER ELEVEN
-246b CIRCLED NUMBER TWELVE
-246c CIRCLED NUMBER THIRTEEN
-246d CIRCLED NUMBER FOURTEEN
-246e CIRCLED NUMBER FIFTEEN
-246f CIRCLED NUMBER SIXTEEN
-2470 CIRCLED NUMBER SEVENTEEN
-2471 CIRCLED NUMBER EIGHTEEN
-2472 CIRCLED NUMBER NINETEEN
-2473 CIRCLED NUMBER TWENTY
-2474 PARENTHESIZED DIGIT ONE
-2475 PARENTHESIZED DIGIT TWO
-2476 PARENTHESIZED DIGIT THREE
-2477 PARENTHESIZED DIGIT FOUR
-2478 PARENTHESIZED DIGIT FIVE
-2479 PARENTHESIZED DIGIT SIX
-247a PARENTHESIZED DIGIT SEVEN
-247b PARENTHESIZED DIGIT EIGHT
-247c PARENTHESIZED DIGIT NINE
-247d PARENTHESIZED NUMBER TEN
-247e PARENTHESIZED NUMBER ELEVEN
-247f PARENTHESIZED NUMBER TWELVE
-2480 PARENTHESIZED NUMBER THIRTEEN
-2481 PARENTHESIZED NUMBER FOURTEEN
-2482 PARENTHESIZED NUMBER FIFTEEN
-2483 PARENTHESIZED NUMBER SIXTEEN
-2484 PARENTHESIZED NUMBER SEVENTEEN
-2485 PARENTHESIZED NUMBER EIGHTEEN
-2486 PARENTHESIZED NUMBER NINETEEN
-2487 PARENTHESIZED NUMBER TWENTY
-2488 DIGIT ONE FULL STOP
-2489 DIGIT TWO FULL STOP
-248a DIGIT THREE FULL STOP
-248b DIGIT FOUR FULL STOP
-248c DIGIT FIVE FULL STOP
-248d DIGIT SIX FULL STOP
-248e DIGIT SEVEN FULL STOP
-248f DIGIT EIGHT FULL STOP
-2490 DIGIT NINE FULL STOP
-2491 NUMBER TEN FULL STOP
-2492 NUMBER ELEVEN FULL STOP
-2493 NUMBER TWELVE FULL STOP
-2494 NUMBER THIRTEEN FULL STOP
-2495 NUMBER FOURTEEN FULL STOP
-2496 NUMBER FIFTEEN FULL STOP
-2497 NUMBER SIXTEEN FULL STOP
-2498 NUMBER SEVENTEEN FULL STOP
-2499 NUMBER EIGHTEEN FULL STOP
-249a NUMBER NINETEEN FULL STOP
-249b NUMBER TWENTY FULL STOP
-249c PARENTHESIZED LATIN SMALL LETTER A
-249d PARENTHESIZED LATIN SMALL LETTER B
-249e PARENTHESIZED LATIN SMALL LETTER C
-249f PARENTHESIZED LATIN SMALL LETTER D
-24a0 PARENTHESIZED LATIN SMALL LETTER E
-24a1 PARENTHESIZED LATIN SMALL LETTER F
-24a2 PARENTHESIZED LATIN SMALL LETTER G
-24a3 PARENTHESIZED LATIN SMALL LETTER H
-24a4 PARENTHESIZED LATIN SMALL LETTER I
-24a5 PARENTHESIZED LATIN SMALL LETTER J
-24a6 PARENTHESIZED LATIN SMALL LETTER K
-24a7 PARENTHESIZED LATIN SMALL LETTER L
-24a8 PARENTHESIZED LATIN SMALL LETTER M
-24a9 PARENTHESIZED LATIN SMALL LETTER N
-24aa PARENTHESIZED LATIN SMALL LETTER O
-24ab PARENTHESIZED LATIN SMALL LETTER P
-24ac PARENTHESIZED LATIN SMALL LETTER Q
-24ad PARENTHESIZED LATIN SMALL LETTER R
-24ae PARENTHESIZED LATIN SMALL LETTER S
-24af PARENTHESIZED LATIN SMALL LETTER T
-24b0 PARENTHESIZED LATIN SMALL LETTER U
-24b1 PARENTHESIZED LATIN SMALL LETTER V
-24b2 PARENTHESIZED LATIN SMALL LETTER W
-24b3 PARENTHESIZED LATIN SMALL LETTER X
-24b4 PARENTHESIZED LATIN SMALL LETTER Y
-24b5 PARENTHESIZED LATIN SMALL LETTER Z
-24b6 CIRCLED LATIN CAPITAL LETTER A
-24b7 CIRCLED LATIN CAPITAL LETTER B
-24b8 CIRCLED LATIN CAPITAL LETTER C
-24b9 CIRCLED LATIN CAPITAL LETTER D
-24ba CIRCLED LATIN CAPITAL LETTER E
-24bb CIRCLED LATIN CAPITAL LETTER F
-24bc CIRCLED LATIN CAPITAL LETTER G
-24bd CIRCLED LATIN CAPITAL LETTER H
-24be CIRCLED LATIN CAPITAL LETTER I
-24bf CIRCLED LATIN CAPITAL LETTER J
-24c0 CIRCLED LATIN CAPITAL LETTER K
-24c1 CIRCLED LATIN CAPITAL LETTER L
-24c2 CIRCLED LATIN CAPITAL LETTER M
-24c3 CIRCLED LATIN CAPITAL LETTER N
-24c4 CIRCLED LATIN CAPITAL LETTER O
-24c5 CIRCLED LATIN CAPITAL LETTER P
-24c6 CIRCLED LATIN CAPITAL LETTER Q
-24c7 CIRCLED LATIN CAPITAL LETTER R
-24c8 CIRCLED LATIN CAPITAL LETTER S
-24c9 CIRCLED LATIN CAPITAL LETTER T
-24ca CIRCLED LATIN CAPITAL LETTER U
-24cb CIRCLED LATIN CAPITAL LETTER V
-24cc CIRCLED LATIN CAPITAL LETTER W
-24cd CIRCLED LATIN CAPITAL LETTER X
-24ce CIRCLED LATIN CAPITAL LETTER Y
-24cf CIRCLED LATIN CAPITAL LETTER Z
-24d0 CIRCLED LATIN SMALL LETTER A
-24d1 CIRCLED LATIN SMALL LETTER B
-24d2 CIRCLED LATIN SMALL LETTER C
-24d3 CIRCLED LATIN SMALL LETTER D
-24d4 CIRCLED LATIN SMALL LETTER E
-24d5 CIRCLED LATIN SMALL LETTER F
-24d6 CIRCLED LATIN SMALL LETTER G
-24d7 CIRCLED LATIN SMALL LETTER H
-24d8 CIRCLED LATIN SMALL LETTER I
-24d9 CIRCLED LATIN SMALL LETTER J
-24da CIRCLED LATIN SMALL LETTER K
-24db CIRCLED LATIN SMALL LETTER L
-24dc CIRCLED LATIN SMALL LETTER M
-24dd CIRCLED LATIN SMALL LETTER N
-24de CIRCLED LATIN SMALL LETTER O
-24df CIRCLED LATIN SMALL LETTER P
-24e0 CIRCLED LATIN SMALL LETTER Q
-24e1 CIRCLED LATIN SMALL LETTER R
-24e2 CIRCLED LATIN SMALL LETTER S
-24e3 CIRCLED LATIN SMALL LETTER T
-24e4 CIRCLED LATIN SMALL LETTER U
-24e5 CIRCLED LATIN SMALL LETTER V
-24e6 CIRCLED LATIN SMALL LETTER W
-24e7 CIRCLED LATIN SMALL LETTER X
-24e8 CIRCLED LATIN SMALL LETTER Y
-24e9 CIRCLED LATIN SMALL LETTER Z
-24ea CIRCLED DIGIT ZERO
-2500 BOX DRAWINGS LIGHT HORIZONTAL
-2501 BOX DRAWINGS HEAVY HORIZONTAL
-2502 BOX DRAWINGS LIGHT VERTICAL
-2503 BOX DRAWINGS HEAVY VERTICAL
-2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
-2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
-2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
-2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
-2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
-2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
-250a BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
-250b BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
-250c BOX DRAWINGS LIGHT DOWN AND RIGHT
-250d BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
-250e BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
-250f BOX DRAWINGS HEAVY DOWN AND RIGHT
-2510 BOX DRAWINGS LIGHT DOWN AND LEFT
-2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
-2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
-2513 BOX DRAWINGS HEAVY DOWN AND LEFT
-2514 BOX DRAWINGS LIGHT UP AND RIGHT
-2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
-2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
-2517 BOX DRAWINGS HEAVY UP AND RIGHT
-2518 BOX DRAWINGS LIGHT UP AND LEFT
-2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY
-251a BOX DRAWINGS UP HEAVY AND LEFT LIGHT
-251b BOX DRAWINGS HEAVY UP AND LEFT
-251c BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-251d BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
-251e BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
-251f BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
-2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
-2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
-2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
-2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT
-2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
-2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
-2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
-2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
-2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
-2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
-252a BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
-252b BOX DRAWINGS HEAVY VERTICAL AND LEFT
-252c BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-252d BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
-252e BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
-252f BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
-2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
-2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
-2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
-2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
-2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
-2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
-2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
-2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
-2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
-2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
-253a BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
-253b BOX DRAWINGS HEAVY UP AND HORIZONTAL
-253c BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-253d BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
-253e BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
-253f BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
-2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
-2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
-2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
-2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
-2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
-2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
-2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
-2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
-2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
-2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
-254a BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
-254b BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
-254c BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
-254d BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
-254e BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
-254f BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
-2550 BOX DRAWINGS DOUBLE HORIZONTAL
-2551 BOX DRAWINGS DOUBLE VERTICAL
-2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT
-2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-2557 BOX DRAWINGS DOUBLE DOWN AND LEFT
-2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-255a BOX DRAWINGS DOUBLE UP AND RIGHT
-255b BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-255c BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-255d BOX DRAWINGS DOUBLE UP AND LEFT
-255e BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-255f BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-256a BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-256b BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-256c BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-256d BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
-256e BOX DRAWINGS LIGHT ARC DOWN AND LEFT
-256f BOX DRAWINGS LIGHT ARC UP AND LEFT
-2570 BOX DRAWINGS LIGHT ARC UP AND RIGHT
-2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
-2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
-2573 BOX DRAWINGS LIGHT DIAGONAL CROSS
-2574 BOX DRAWINGS LIGHT LEFT
-2575 BOX DRAWINGS LIGHT UP
-2576 BOX DRAWINGS LIGHT RIGHT
-2577 BOX DRAWINGS LIGHT DOWN
-2578 BOX DRAWINGS HEAVY LEFT
-2579 BOX DRAWINGS HEAVY UP
-257a BOX DRAWINGS HEAVY RIGHT
-257b BOX DRAWINGS HEAVY DOWN
-257c BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
-257d BOX DRAWINGS LIGHT UP AND HEAVY DOWN
-257e BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
-257f BOX DRAWINGS HEAVY UP AND LIGHT DOWN
-2580 UPPER HALF BLOCK
-2581 LOWER ONE EIGHTH BLOCK
-2582 LOWER ONE QUARTER BLOCK
-2583 LOWER THREE EIGHTHS BLOCK
-2584 LOWER HALF BLOCK
-2585 LOWER FIVE EIGHTHS BLOCK
-2586 LOWER THREE QUARTERS BLOCK
-2587 LOWER SEVEN EIGHTHS BLOCK
-2588 FULL BLOCK
-2589 LEFT SEVEN EIGHTHS BLOCK
-258a LEFT THREE QUARTERS BLOCK
-258b LEFT FIVE EIGHTHS BLOCK
-258c LEFT HALF BLOCK
-258d LEFT THREE EIGHTHS BLOCK
-258e LEFT ONE QUARTER BLOCK
-258f LEFT ONE EIGHTH BLOCK
-2590 RIGHT HALF BLOCK
-2591 LIGHT SHADE
-2592 MEDIUM SHADE
-2593 DARK SHADE
-2594 UPPER ONE EIGHTH BLOCK
-2595 RIGHT ONE EIGHTH BLOCK
-25a0 BLACK SQUARE
-25a1 WHITE SQUARE
-25a2 WHITE SQUARE WITH ROUNDED CORNERS
-25a3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
-25a4 SQUARE WITH HORIZONTAL FILL
-25a5 SQUARE WITH VERTICAL FILL
-25a6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
-25a7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
-25a8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
-25a9 SQUARE WITH DIAGONAL CROSSHATCH FILL
-25aa BLACK SMALL SQUARE
-25ab WHITE SMALL SQUARE
-25ac BLACK RECTANGLE
-25ad WHITE RECTANGLE
-25ae BLACK VERTICAL RECTANGLE
-25af WHITE VERTICAL RECTANGLE
-25b0 BLACK PARALLELOGRAM
-25b1 WHITE PARALLELOGRAM
-25b2 BLACK UP-POINTING TRIANGLE
-25b3 WHITE UP-POINTING TRIANGLE
-25b4 BLACK UP-POINTING SMALL TRIANGLE
-25b5 WHITE UP-POINTING SMALL TRIANGLE
-25b6 BLACK RIGHT-POINTING TRIANGLE
-25b7 WHITE RIGHT-POINTING TRIANGLE
-25b8 BLACK RIGHT-POINTING SMALL TRIANGLE
-25b9 WHITE RIGHT-POINTING SMALL TRIANGLE
-25ba BLACK RIGHT-POINTING POINTER
-25bb WHITE RIGHT-POINTING POINTER
-25bc BLACK DOWN-POINTING TRIANGLE
-25bd WHITE DOWN-POINTING TRIANGLE
-25be BLACK DOWN-POINTING SMALL TRIANGLE
-25bf WHITE DOWN-POINTING SMALL TRIANGLE
-25c0 BLACK LEFT-POINTING TRIANGLE
-25c1 WHITE LEFT-POINTING TRIANGLE
-25c2 BLACK LEFT-POINTING SMALL TRIANGLE
-25c3 WHITE LEFT-POINTING SMALL TRIANGLE
-25c4 BLACK LEFT-POINTING POINTER
-25c5 WHITE LEFT-POINTING POINTER
-25c6 BLACK DIAMOND
-25c7 WHITE DIAMOND
-25c8 WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-25c9 FISHEYE
-25ca LOZENGE
-25cb WHITE CIRCLE
-25cc DOTTED CIRCLE
-25cd CIRCLE WITH VERTICAL FILL
-25ce BULLSEYE
-25cf BLACK CIRCLE
-25d0 CIRCLE WITH LEFT HALF BLACK
-25d1 CIRCLE WITH RIGHT HALF BLACK
-25d2 CIRCLE WITH LOWER HALF BLACK
-25d3 CIRCLE WITH UPPER HALF BLACK
-25d4 CIRCLE WITH UPPER RIGHT QUADRANT BLACK
-25d5 CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
-25d6 LEFT HALF BLACK CIRCLE
-25d7 RIGHT HALF BLACK CIRCLE
-25d8 INVERSE BULLET
-25d9 INVERSE WHITE CIRCLE
-25da UPPER HALF INVERSE WHITE CIRCLE
-25db LOWER HALF INVERSE WHITE CIRCLE
-25dc UPPER LEFT QUADRANT CIRCULAR ARC
-25dd UPPER RIGHT QUADRANT CIRCULAR ARC
-25de LOWER RIGHT QUADRANT CIRCULAR ARC
-25df LOWER LEFT QUADRANT CIRCULAR ARC
-25e0 UPPER HALF CIRCLE
-25e1 LOWER HALF CIRCLE
-25e2 BLACK LOWER RIGHT TRIANGLE
-25e3 BLACK LOWER LEFT TRIANGLE
-25e4 BLACK UPPER LEFT TRIANGLE
-25e5 BLACK UPPER RIGHT TRIANGLE
-25e6 WHITE BULLET
-25e7 SQUARE WITH LEFT HALF BLACK
-25e8 SQUARE WITH RIGHT HALF BLACK
-25e9 SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
-25ea SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
-25eb WHITE SQUARE WITH VERTICAL BISECTING LINE
-25ec WHITE UP-POINTING TRIANGLE WITH DOT
-25ed UP-POINTING TRIANGLE WITH LEFT HALF BLACK
-25ee UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
-25ef LARGE CIRCLE
-25f0 WHITE SQUARE WITH UPPER LEFT QUADRANT
-25f1 WHITE SQUARE WITH LOWER LEFT QUADRANT
-25f2 WHITE SQUARE WITH LOWER RIGHT QUADRANT
-25f3 WHITE SQUARE WITH UPPER RIGHT QUADRANT
-25f4 WHITE CIRCLE WITH UPPER LEFT QUADRANT
-25f5 WHITE CIRCLE WITH LOWER LEFT QUADRANT
-25f6 WHITE CIRCLE WITH LOWER RIGHT QUADRANT
-25f7 WHITE CIRCLE WITH UPPER RIGHT QUADRANT
-2600 BLACK SUN WITH RAYS
-2601 CLOUD
-2602 UMBRELLA
-2603 SNOWMAN
-2604 COMET
-2605 BLACK STAR
-2606 WHITE STAR
-2607 LIGHTNING
-2608 THUNDERSTORM
-2609 SUN
-260a ASCENDING NODE
-260b DESCENDING NODE
-260c CONJUNCTION
-260d OPPOSITION
-260e BLACK TELEPHONE
-260f WHITE TELEPHONE
-2610 BALLOT BOX
-2611 BALLOT BOX WITH CHECK
-2612 BALLOT BOX WITH X
-2613 SALTIRE
-2619 REVERSED ROTATED FLORAL HEART BULLET
-261a BLACK LEFT POINTING INDEX
-261b BLACK RIGHT POINTING INDEX
-261c WHITE LEFT POINTING INDEX
-261d WHITE UP POINTING INDEX
-261e WHITE RIGHT POINTING INDEX
-261f WHITE DOWN POINTING INDEX
-2620 SKULL AND CROSSBONES
-2621 CAUTION SIGN
-2622 RADIOACTIVE SIGN
-2623 BIOHAZARD SIGN
-2624 CADUCEUS
-2625 ANKH
-2626 ORTHODOX CROSS
-2627 CHI RHO
-2628 CROSS OF LORRAINE
-2629 CROSS OF JERUSALEM
-262a STAR AND CRESCENT
-262b FARSI SYMBOL
-262c ADI SHAKTI
-262d HAMMER AND SICKLE
-262e PEACE SYMBOL
-262f YIN YANG
-2630 TRIGRAM FOR HEAVEN
-2631 TRIGRAM FOR LAKE
-2632 TRIGRAM FOR FIRE
-2633 TRIGRAM FOR THUNDER
-2634 TRIGRAM FOR WIND
-2635 TRIGRAM FOR WATER
-2636 TRIGRAM FOR MOUNTAIN
-2637 TRIGRAM FOR EARTH
-2638 WHEEL OF DHARMA
-2639 WHITE FROWNING FACE
-263a WHITE SMILING FACE
-263b BLACK SMILING FACE
-263c WHITE SUN WITH RAYS
-263d FIRST QUARTER MOON
-263e LAST QUARTER MOON
-263f MERCURY
-2640 FEMALE SIGN
-2641 EARTH
-2642 MALE SIGN
-2643 JUPITER
-2644 SATURN
-2645 URANUS
-2646 NEPTUNE
-2647 PLUTO
-2648 ARIES
-2649 TAURUS
-264a GEMINI
-264b CANCER
-264c LEO
-264d VIRGO
-264e LIBRA
-264f SCORPIUS
-2650 SAGITTARIUS
-2651 CAPRICORN
-2652 AQUARIUS
-2653 PISCES
-2654 WHITE CHESS KING
-2655 WHITE CHESS QUEEN
-2656 WHITE CHESS ROOK
-2657 WHITE CHESS BISHOP
-2658 WHITE CHESS KNIGHT
-2659 WHITE CHESS PAWN
-265a BLACK CHESS KING
-265b BLACK CHESS QUEEN
-265c BLACK CHESS ROOK
-265d BLACK CHESS BISHOP
-265e BLACK CHESS KNIGHT
-265f BLACK CHESS PAWN
-2660 BLACK SPADE SUIT
-2661 WHITE HEART SUIT
-2662 WHITE DIAMOND SUIT
-2663 BLACK CLUB SUIT
-2664 WHITE SPADE SUIT
-2665 BLACK HEART SUIT
-2666 BLACK DIAMOND SUIT
-2667 WHITE CLUB SUIT
-2668 HOT SPRINGS
-2669 QUARTER NOTE
-266a EIGHTH NOTE
-266b BEAMED EIGHTH NOTES
-266c BEAMED SIXTEENTH NOTES
-266d MUSIC FLAT SIGN
-266e MUSIC NATURAL SIGN
-266f MUSIC SHARP SIGN
-2670 WEST SYRIAC CROSS
-2671 EAST SYRIAC CROSS
-2701 UPPER BLADE SCISSORS
-2702 BLACK SCISSORS
-2703 LOWER BLADE SCISSORS
-2704 WHITE SCISSORS
-2706 TELEPHONE LOCATION SIGN
-2707 TAPE DRIVE
-2708 AIRPLANE
-2709 ENVELOPE
-270c VICTORY HAND
-270d WRITING HAND
-270e LOWER RIGHT PENCIL
-270f PENCIL
-2710 UPPER RIGHT PENCIL
-2711 WHITE NIB
-2712 BLACK NIB
-2713 CHECK MARK
-2714 HEAVY CHECK MARK
-2715 MULTIPLICATION X
-2716 HEAVY MULTIPLICATION X
-2717 BALLOT X
-2718 HEAVY BALLOT X
-2719 OUTLINED GREEK CROSS
-271a HEAVY GREEK CROSS
-271b OPEN CENTRE CROSS
-271c HEAVY OPEN CENTRE CROSS
-271d LATIN CROSS
-271e SHADOWED WHITE LATIN CROSS
-271f OUTLINED LATIN CROSS
-2720 MALTESE CROSS
-2721 STAR OF DAVID
-2722 FOUR TEARDROP-SPOKED ASTERISK
-2723 FOUR BALLOON-SPOKED ASTERISK
-2724 HEAVY FOUR BALLOON-SPOKED ASTERISK
-2725 FOUR CLUB-SPOKED ASTERISK
-2726 BLACK FOUR POINTED STAR
-2727 WHITE FOUR POINTED STAR
-2729 STRESS OUTLINED WHITE STAR
-272a CIRCLED WHITE STAR
-272b OPEN CENTRE BLACK STAR
-272c BLACK CENTRE WHITE STAR
-272d OUTLINED BLACK STAR
-272e HEAVY OUTLINED BLACK STAR
-272f PINWHEEL STAR
-2730 SHADOWED WHITE STAR
-2731 HEAVY ASTERISK
-2732 OPEN CENTRE ASTERISK
-2733 EIGHT SPOKED ASTERISK
-2734 EIGHT POINTED BLACK STAR
-2735 EIGHT POINTED PINWHEEL STAR
-2736 SIX POINTED BLACK STAR
-2737 EIGHT POINTED RECTILINEAR BLACK STAR
-2738 HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
-2739 TWELVE POINTED BLACK STAR
-273a SIXTEEN POINTED ASTERISK
-273b TEARDROP-SPOKED ASTERISK
-273c OPEN CENTRE TEARDROP-SPOKED ASTERISK
-273d HEAVY TEARDROP-SPOKED ASTERISK
-273e SIX PETALLED BLACK AND WHITE FLORETTE
-273f BLACK FLORETTE
-2740 WHITE FLORETTE
-2741 EIGHT PETALLED OUTLINED BLACK FLORETTE
-2742 CIRCLED OPEN CENTRE EIGHT POINTED STAR
-2743 HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
-2744 SNOWFLAKE
-2745 TIGHT TRIFOLIATE SNOWFLAKE
-2746 HEAVY CHEVRON SNOWFLAKE
-2747 SPARKLE
-2748 HEAVY SPARKLE
-2749 BALLOON-SPOKED ASTERISK
-274a EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-274b HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-274d SHADOWED WHITE CIRCLE
-274f LOWER RIGHT DROP-SHADOWED WHITE SQUARE
-2750 UPPER RIGHT DROP-SHADOWED WHITE SQUARE
-2751 LOWER RIGHT SHADOWED WHITE SQUARE
-2752 UPPER RIGHT SHADOWED WHITE SQUARE
-2756 BLACK DIAMOND MINUS WHITE X
-2758 LIGHT VERTICAL BAR
-2759 MEDIUM VERTICAL BAR
-275a HEAVY VERTICAL BAR
-275b HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
-275c HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
-275d HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
-275e HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
-2761 CURVED STEM PARAGRAPH SIGN ORNAMENT
-2762 HEAVY EXCLAMATION MARK ORNAMENT
-2763 HEAVY HEART EXCLAMATION MARK ORNAMENT
-2764 HEAVY BLACK HEART
-2765 ROTATED HEAVY BLACK HEART BULLET
-2766 FLORAL HEART
-2767 ROTATED FLORAL HEART BULLET
-2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE
-2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO
-2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE
-2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR
-277a DINGBAT NEGATIVE CIRCLED DIGIT FIVE
-277b DINGBAT NEGATIVE CIRCLED DIGIT SIX
-277c DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
-277d DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
-277e DINGBAT NEGATIVE CIRCLED DIGIT NINE
-277f DINGBAT NEGATIVE CIRCLED NUMBER TEN
-2780 DINGBAT CIRCLED SANS-SERIF DIGIT ONE
-2781 DINGBAT CIRCLED SANS-SERIF DIGIT TWO
-2782 DINGBAT CIRCLED SANS-SERIF DIGIT THREE
-2783 DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
-2784 DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
-2785 DINGBAT CIRCLED SANS-SERIF DIGIT SIX
-2786 DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
-2787 DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
-2788 DINGBAT CIRCLED SANS-SERIF DIGIT NINE
-2789 DINGBAT CIRCLED SANS-SERIF NUMBER TEN
-278a DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
-278b DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
-278c DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
-278d DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
-278e DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
-278f DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
-2790 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
-2791 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
-2792 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
-2793 DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
-2794 HEAVY WIDE-HEADED RIGHTWARDS ARROW
-2798 HEAVY SOUTH EAST ARROW
-2799 HEAVY RIGHTWARDS ARROW
-279a HEAVY NORTH EAST ARROW
-279b DRAFTING POINT RIGHTWARDS ARROW
-279c HEAVY ROUND-TIPPED RIGHTWARDS ARROW
-279d TRIANGLE-HEADED RIGHTWARDS ARROW
-279e HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
-279f DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
-27a0 HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
-27a1 BLACK RIGHTWARDS ARROW
-27a2 THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
-27a3 THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
-27a4 BLACK RIGHTWARDS ARROWHEAD
-27a5 HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
-27a6 HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
-27a7 SQUAT BLACK RIGHTWARDS ARROW
-27a8 HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
-27a9 RIGHT-SHADED WHITE RIGHTWARDS ARROW
-27aa LEFT-SHADED WHITE RIGHTWARDS ARROW
-27ab BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
-27ac FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
-27ad HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27ae HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27af NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27b1 NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27b2 CIRCLED HEAVY WHITE RIGHTWARDS ARROW
-27b3 WHITE-FEATHERED RIGHTWARDS ARROW
-27b4 BLACK-FEATHERED SOUTH EAST ARROW
-27b5 BLACK-FEATHERED RIGHTWARDS ARROW
-27b6 BLACK-FEATHERED NORTH EAST ARROW
-27b7 HEAVY BLACK-FEATHERED SOUTH EAST ARROW
-27b8 HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
-27b9 HEAVY BLACK-FEATHERED NORTH EAST ARROW
-27ba TEARDROP-BARBED RIGHTWARDS ARROW
-27bb HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
-27bc WEDGE-TAILED RIGHTWARDS ARROW
-27bd HEAVY WEDGE-TAILED RIGHTWARDS ARROW
-27be OPEN-OUTLINED RIGHTWARDS ARROW
-2800 BRAILLE PATTERN BLANK
-2801 BRAILLE PATTERN DOTS-1
-2802 BRAILLE PATTERN DOTS-2
-2803 BRAILLE PATTERN DOTS-12
-2804 BRAILLE PATTERN DOTS-3
-2805 BRAILLE PATTERN DOTS-13
-2806 BRAILLE PATTERN DOTS-23
-2807 BRAILLE PATTERN DOTS-123
-2808 BRAILLE PATTERN DOTS-4
-2809 BRAILLE PATTERN DOTS-14
-280a BRAILLE PATTERN DOTS-24
-280b BRAILLE PATTERN DOTS-124
-280c BRAILLE PATTERN DOTS-34
-280d BRAILLE PATTERN DOTS-134
-280e BRAILLE PATTERN DOTS-234
-280f BRAILLE PATTERN DOTS-1234
-2810 BRAILLE PATTERN DOTS-5
-2811 BRAILLE PATTERN DOTS-15
-2812 BRAILLE PATTERN DOTS-25
-2813 BRAILLE PATTERN DOTS-125
-2814 BRAILLE PATTERN DOTS-35
-2815 BRAILLE PATTERN DOTS-135
-2816 BRAILLE PATTERN DOTS-235
-2817 BRAILLE PATTERN DOTS-1235
-2818 BRAILLE PATTERN DOTS-45
-2819 BRAILLE PATTERN DOTS-145
-281a BRAILLE PATTERN DOTS-245
-281b BRAILLE PATTERN DOTS-1245
-281c BRAILLE PATTERN DOTS-345
-281d BRAILLE PATTERN DOTS-1345
-281e BRAILLE PATTERN DOTS-2345
-281f BRAILLE PATTERN DOTS-12345
-2820 BRAILLE PATTERN DOTS-6
-2821 BRAILLE PATTERN DOTS-16
-2822 BRAILLE PATTERN DOTS-26
-2823 BRAILLE PATTERN DOTS-126
-2824 BRAILLE PATTERN DOTS-36
-2825 BRAILLE PATTERN DOTS-136
-2826 BRAILLE PATTERN DOTS-236
-2827 BRAILLE PATTERN DOTS-1236
-2828 BRAILLE PATTERN DOTS-46
-2829 BRAILLE PATTERN DOTS-146
-282a BRAILLE PATTERN DOTS-246
-282b BRAILLE PATTERN DOTS-1246
-282c BRAILLE PATTERN DOTS-346
-282d BRAILLE PATTERN DOTS-1346
-282e BRAILLE PATTERN DOTS-2346
-282f BRAILLE PATTERN DOTS-12346
-2830 BRAILLE PATTERN DOTS-56
-2831 BRAILLE PATTERN DOTS-156
-2832 BRAILLE PATTERN DOTS-256
-2833 BRAILLE PATTERN DOTS-1256
-2834 BRAILLE PATTERN DOTS-356
-2835 BRAILLE PATTERN DOTS-1356
-2836 BRAILLE PATTERN DOTS-2356
-2837 BRAILLE PATTERN DOTS-12356
-2838 BRAILLE PATTERN DOTS-456
-2839 BRAILLE PATTERN DOTS-1456
-283a BRAILLE PATTERN DOTS-2456
-283b BRAILLE PATTERN DOTS-12456
-283c BRAILLE PATTERN DOTS-3456
-283d BRAILLE PATTERN DOTS-13456
-283e BRAILLE PATTERN DOTS-23456
-283f BRAILLE PATTERN DOTS-123456
-2840 BRAILLE PATTERN DOTS-7
-2841 BRAILLE PATTERN DOTS-17
-2842 BRAILLE PATTERN DOTS-27
-2843 BRAILLE PATTERN DOTS-127
-2844 BRAILLE PATTERN DOTS-37
-2845 BRAILLE PATTERN DOTS-137
-2846 BRAILLE PATTERN DOTS-237
-2847 BRAILLE PATTERN DOTS-1237
-2848 BRAILLE PATTERN DOTS-47
-2849 BRAILLE PATTERN DOTS-147
-284a BRAILLE PATTERN DOTS-247
-284b BRAILLE PATTERN DOTS-1247
-284c BRAILLE PATTERN DOTS-347
-284d BRAILLE PATTERN DOTS-1347
-284e BRAILLE PATTERN DOTS-2347
-284f BRAILLE PATTERN DOTS-12347
-2850 BRAILLE PATTERN DOTS-57
-2851 BRAILLE PATTERN DOTS-157
-2852 BRAILLE PATTERN DOTS-257
-2853 BRAILLE PATTERN DOTS-1257
-2854 BRAILLE PATTERN DOTS-357
-2855 BRAILLE PATTERN DOTS-1357
-2856 BRAILLE PATTERN DOTS-2357
-2857 BRAILLE PATTERN DOTS-12357
-2858 BRAILLE PATTERN DOTS-457
-2859 BRAILLE PATTERN DOTS-1457
-285a BRAILLE PATTERN DOTS-2457
-285b BRAILLE PATTERN DOTS-12457
-285c BRAILLE PATTERN DOTS-3457
-285d BRAILLE PATTERN DOTS-13457
-285e BRAILLE PATTERN DOTS-23457
-285f BRAILLE PATTERN DOTS-123457
-2860 BRAILLE PATTERN DOTS-67
-2861 BRAILLE PATTERN DOTS-167
-2862 BRAILLE PATTERN DOTS-267
-2863 BRAILLE PATTERN DOTS-1267
-2864 BRAILLE PATTERN DOTS-367
-2865 BRAILLE PATTERN DOTS-1367
-2866 BRAILLE PATTERN DOTS-2367
-2867 BRAILLE PATTERN DOTS-12367
-2868 BRAILLE PATTERN DOTS-467
-2869 BRAILLE PATTERN DOTS-1467
-286a BRAILLE PATTERN DOTS-2467
-286b BRAILLE PATTERN DOTS-12467
-286c BRAILLE PATTERN DOTS-3467
-286d BRAILLE PATTERN DOTS-13467
-286e BRAILLE PATTERN DOTS-23467
-286f BRAILLE PATTERN DOTS-123467
-2870 BRAILLE PATTERN DOTS-567
-2871 BRAILLE PATTERN DOTS-1567
-2872 BRAILLE PATTERN DOTS-2567
-2873 BRAILLE PATTERN DOTS-12567
-2874 BRAILLE PATTERN DOTS-3567
-2875 BRAILLE PATTERN DOTS-13567
-2876 BRAILLE PATTERN DOTS-23567
-2877 BRAILLE PATTERN DOTS-123567
-2878 BRAILLE PATTERN DOTS-4567
-2879 BRAILLE PATTERN DOTS-14567
-287a BRAILLE PATTERN DOTS-24567
-287b BRAILLE PATTERN DOTS-124567
-287c BRAILLE PATTERN DOTS-34567
-287d BRAILLE PATTERN DOTS-134567
-287e BRAILLE PATTERN DOTS-234567
-287f BRAILLE PATTERN DOTS-1234567
-2880 BRAILLE PATTERN DOTS-8
-2881 BRAILLE PATTERN DOTS-18
-2882 BRAILLE PATTERN DOTS-28
-2883 BRAILLE PATTERN DOTS-128
-2884 BRAILLE PATTERN DOTS-38
-2885 BRAILLE PATTERN DOTS-138
-2886 BRAILLE PATTERN DOTS-238
-2887 BRAILLE PATTERN DOTS-1238
-2888 BRAILLE PATTERN DOTS-48
-2889 BRAILLE PATTERN DOTS-148
-288a BRAILLE PATTERN DOTS-248
-288b BRAILLE PATTERN DOTS-1248
-288c BRAILLE PATTERN DOTS-348
-288d BRAILLE PATTERN DOTS-1348
-288e BRAILLE PATTERN DOTS-2348
-288f BRAILLE PATTERN DOTS-12348
-2890 BRAILLE PATTERN DOTS-58
-2891 BRAILLE PATTERN DOTS-158
-2892 BRAILLE PATTERN DOTS-258
-2893 BRAILLE PATTERN DOTS-1258
-2894 BRAILLE PATTERN DOTS-358
-2895 BRAILLE PATTERN DOTS-1358
-2896 BRAILLE PATTERN DOTS-2358
-2897 BRAILLE PATTERN DOTS-12358
-2898 BRAILLE PATTERN DOTS-458
-2899 BRAILLE PATTERN DOTS-1458
-289a BRAILLE PATTERN DOTS-2458
-289b BRAILLE PATTERN DOTS-12458
-289c BRAILLE PATTERN DOTS-3458
-289d BRAILLE PATTERN DOTS-13458
-289e BRAILLE PATTERN DOTS-23458
-289f BRAILLE PATTERN DOTS-123458
-28a0 BRAILLE PATTERN DOTS-68
-28a1 BRAILLE PATTERN DOTS-168
-28a2 BRAILLE PATTERN DOTS-268
-28a3 BRAILLE PATTERN DOTS-1268
-28a4 BRAILLE PATTERN DOTS-368
-28a5 BRAILLE PATTERN DOTS-1368
-28a6 BRAILLE PATTERN DOTS-2368
-28a7 BRAILLE PATTERN DOTS-12368
-28a8 BRAILLE PATTERN DOTS-468
-28a9 BRAILLE PATTERN DOTS-1468
-28aa BRAILLE PATTERN DOTS-2468
-28ab BRAILLE PATTERN DOTS-12468
-28ac BRAILLE PATTERN DOTS-3468
-28ad BRAILLE PATTERN DOTS-13468
-28ae BRAILLE PATTERN DOTS-23468
-28af BRAILLE PATTERN DOTS-123468
-28b0 BRAILLE PATTERN DOTS-568
-28b1 BRAILLE PATTERN DOTS-1568
-28b2 BRAILLE PATTERN DOTS-2568
-28b3 BRAILLE PATTERN DOTS-12568
-28b4 BRAILLE PATTERN DOTS-3568
-28b5 BRAILLE PATTERN DOTS-13568
-28b6 BRAILLE PATTERN DOTS-23568
-28b7 BRAILLE PATTERN DOTS-123568
-28b8 BRAILLE PATTERN DOTS-4568
-28b9 BRAILLE PATTERN DOTS-14568
-28ba BRAILLE PATTERN DOTS-24568
-28bb BRAILLE PATTERN DOTS-124568
-28bc BRAILLE PATTERN DOTS-34568
-28bd BRAILLE PATTERN DOTS-134568
-28be BRAILLE PATTERN DOTS-234568
-28bf BRAILLE PATTERN DOTS-1234568
-28c0 BRAILLE PATTERN DOTS-78
-28c1 BRAILLE PATTERN DOTS-178
-28c2 BRAILLE PATTERN DOTS-278
-28c3 BRAILLE PATTERN DOTS-1278
-28c4 BRAILLE PATTERN DOTS-378
-28c5 BRAILLE PATTERN DOTS-1378
-28c6 BRAILLE PATTERN DOTS-2378
-28c7 BRAILLE PATTERN DOTS-12378
-28c8 BRAILLE PATTERN DOTS-478
-28c9 BRAILLE PATTERN DOTS-1478
-28ca BRAILLE PATTERN DOTS-2478
-28cb BRAILLE PATTERN DOTS-12478
-28cc BRAILLE PATTERN DOTS-3478
-28cd BRAILLE PATTERN DOTS-13478
-28ce BRAILLE PATTERN DOTS-23478
-28cf BRAILLE PATTERN DOTS-123478
-28d0 BRAILLE PATTERN DOTS-578
-28d1 BRAILLE PATTERN DOTS-1578
-28d2 BRAILLE PATTERN DOTS-2578
-28d3 BRAILLE PATTERN DOTS-12578
-28d4 BRAILLE PATTERN DOTS-3578
-28d5 BRAILLE PATTERN DOTS-13578
-28d6 BRAILLE PATTERN DOTS-23578
-28d7 BRAILLE PATTERN DOTS-123578
-28d8 BRAILLE PATTERN DOTS-4578
-28d9 BRAILLE PATTERN DOTS-14578
-28da BRAILLE PATTERN DOTS-24578
-28db BRAILLE PATTERN DOTS-124578
-28dc BRAILLE PATTERN DOTS-34578
-28dd BRAILLE PATTERN DOTS-134578
-28de BRAILLE PATTERN DOTS-234578
-28df BRAILLE PATTERN DOTS-1234578
-28e0 BRAILLE PATTERN DOTS-678
-28e1 BRAILLE PATTERN DOTS-1678
-28e2 BRAILLE PATTERN DOTS-2678
-28e3 BRAILLE PATTERN DOTS-12678
-28e4 BRAILLE PATTERN DOTS-3678
-28e5 BRAILLE PATTERN DOTS-13678
-28e6 BRAILLE PATTERN DOTS-23678
-28e7 BRAILLE PATTERN DOTS-123678
-28e8 BRAILLE PATTERN DOTS-4678
-28e9 BRAILLE PATTERN DOTS-14678
-28ea BRAILLE PATTERN DOTS-24678
-28eb BRAILLE PATTERN DOTS-124678
-28ec BRAILLE PATTERN DOTS-34678
-28ed BRAILLE PATTERN DOTS-134678
-28ee BRAILLE PATTERN DOTS-234678
-28ef BRAILLE PATTERN DOTS-1234678
-28f0 BRAILLE PATTERN DOTS-5678
-28f1 BRAILLE PATTERN DOTS-15678
-28f2 BRAILLE PATTERN DOTS-25678
-28f3 BRAILLE PATTERN DOTS-125678
-28f4 BRAILLE PATTERN DOTS-35678
-28f5 BRAILLE PATTERN DOTS-135678
-28f6 BRAILLE PATTERN DOTS-235678
-28f7 BRAILLE PATTERN DOTS-1235678
-28f8 BRAILLE PATTERN DOTS-45678
-28f9 BRAILLE PATTERN DOTS-145678
-28fa BRAILLE PATTERN DOTS-245678
-28fb BRAILLE PATTERN DOTS-1245678
-28fc BRAILLE PATTERN DOTS-345678
-28fd BRAILLE PATTERN DOTS-1345678
-28fe BRAILLE PATTERN DOTS-2345678
-28ff BRAILLE PATTERN DOTS-12345678
-2e80 CJK RADICAL REPEAT
-2e81 CJK RADICAL CLIFF
-2e82 CJK RADICAL SECOND ONE
-2e83 CJK RADICAL SECOND TWO
-2e84 CJK RADICAL SECOND THREE
-2e85 CJK RADICAL PERSON
-2e86 CJK RADICAL BOX
-2e87 CJK RADICAL TABLE
-2e88 CJK RADICAL KNIFE ONE
-2e89 CJK RADICAL KNIFE TWO
-2e8a CJK RADICAL DIVINATION
-2e8b CJK RADICAL SEAL
-2e8c CJK RADICAL SMALL ONE
-2e8d CJK RADICAL SMALL TWO
-2e8e CJK RADICAL LAME ONE
-2e8f CJK RADICAL LAME TWO
-2e90 CJK RADICAL LAME THREE
-2e91 CJK RADICAL LAME FOUR
-2e92 CJK RADICAL SNAKE
-2e93 CJK RADICAL THREAD
-2e94 CJK RADICAL SNOUT ONE
-2e95 CJK RADICAL SNOUT TWO
-2e96 CJK RADICAL HEART ONE
-2e97 CJK RADICAL HEART TWO
-2e98 CJK RADICAL HAND
-2e99 CJK RADICAL RAP
-2e9b CJK RADICAL CHOKE
-2e9c CJK RADICAL SUN
-2e9d CJK RADICAL MOON
-2e9e CJK RADICAL DEATH
-2e9f CJK RADICAL MOTHER
-2ea0 CJK RADICAL CIVILIAN
-2ea1 CJK RADICAL WATER ONE
-2ea2 CJK RADICAL WATER TWO
-2ea3 CJK RADICAL FIRE
-2ea4 CJK RADICAL PAW ONE
-2ea5 CJK RADICAL PAW TWO
-2ea6 CJK RADICAL SIMPLIFIED HALF TREE TRUNK
-2ea7 CJK RADICAL COW
-2ea8 CJK RADICAL DOG
-2ea9 CJK RADICAL JADE
-2eaa CJK RADICAL BOLT OF CLOTH
-2eab CJK RADICAL EYE
-2eac CJK RADICAL SPIRIT ONE
-2ead CJK RADICAL SPIRIT TWO
-2eae CJK RADICAL BAMBOO
-2eaf CJK RADICAL SILK
-2eb0 CJK RADICAL C-SIMPLIFIED SILK
-2eb1 CJK RADICAL NET ONE
-2eb2 CJK RADICAL NET TWO
-2eb3 CJK RADICAL NET THREE
-2eb4 CJK RADICAL NET FOUR
-2eb5 CJK RADICAL MESH
-2eb6 CJK RADICAL SHEEP
-2eb7 CJK RADICAL RAM
-2eb8 CJK RADICAL EWE
-2eb9 CJK RADICAL OLD
-2eba CJK RADICAL BRUSH ONE
-2ebb CJK RADICAL BRUSH TWO
-2ebc CJK RADICAL MEAT
-2ebd CJK RADICAL MORTAR
-2ebe CJK RADICAL GRASS ONE
-2ebf CJK RADICAL GRASS TWO
-2ec0 CJK RADICAL GRASS THREE
-2ec1 CJK RADICAL TIGER
-2ec2 CJK RADICAL CLOTHES
-2ec3 CJK RADICAL WEST ONE
-2ec4 CJK RADICAL WEST TWO
-2ec5 CJK RADICAL C-SIMPLIFIED SEE
-2ec6 CJK RADICAL SIMPLIFIED HORN
-2ec7 CJK RADICAL HORN
-2ec8 CJK RADICAL C-SIMPLIFIED SPEECH
-2ec9 CJK RADICAL C-SIMPLIFIED SHELL
-2eca CJK RADICAL FOOT
-2ecb CJK RADICAL C-SIMPLIFIED CART
-2ecc CJK RADICAL SIMPLIFIED WALK
-2ecd CJK RADICAL WALK ONE
-2ece CJK RADICAL WALK TWO
-2ecf CJK RADICAL CITY
-2ed0 CJK RADICAL C-SIMPLIFIED GOLD
-2ed1 CJK RADICAL LONG ONE
-2ed2 CJK RADICAL LONG TWO
-2ed3 CJK RADICAL C-SIMPLIFIED LONG
-2ed4 CJK RADICAL C-SIMPLIFIED GATE
-2ed5 CJK RADICAL MOUND ONE
-2ed6 CJK RADICAL MOUND TWO
-2ed7 CJK RADICAL RAIN
-2ed8 CJK RADICAL BLUE
-2ed9 CJK RADICAL C-SIMPLIFIED TANNED LEATHER
-2eda CJK RADICAL C-SIMPLIFIED LEAF
-2edb CJK RADICAL C-SIMPLIFIED WIND
-2edc CJK RADICAL C-SIMPLIFIED FLY
-2edd CJK RADICAL EAT ONE
-2ede CJK RADICAL EAT TWO
-2edf CJK RADICAL EAT THREE
-2ee0 CJK RADICAL C-SIMPLIFIED EAT
-2ee1 CJK RADICAL HEAD
-2ee2 CJK RADICAL C-SIMPLIFIED HORSE
-2ee3 CJK RADICAL BONE
-2ee4 CJK RADICAL GHOST
-2ee5 CJK RADICAL C-SIMPLIFIED FISH
-2ee6 CJK RADICAL C-SIMPLIFIED BIRD
-2ee7 CJK RADICAL C-SIMPLIFIED SALT
-2ee8 CJK RADICAL SIMPLIFIED WHEAT
-2ee9 CJK RADICAL SIMPLIFIED YELLOW
-2eea CJK RADICAL C-SIMPLIFIED FROG
-2eeb CJK RADICAL J-SIMPLIFIED EVEN
-2eec CJK RADICAL C-SIMPLIFIED EVEN
-2eed CJK RADICAL J-SIMPLIFIED TOOTH
-2eee CJK RADICAL C-SIMPLIFIED TOOTH
-2eef CJK RADICAL J-SIMPLIFIED DRAGON
-2ef0 CJK RADICAL C-SIMPLIFIED DRAGON
-2ef1 CJK RADICAL TURTLE
-2ef2 CJK RADICAL J-SIMPLIFIED TURTLE
-2ef3 CJK RADICAL C-SIMPLIFIED TURTLE
-2f00 KANGXI RADICAL ONE
-2f01 KANGXI RADICAL LINE
-2f02 KANGXI RADICAL DOT
-2f03 KANGXI RADICAL SLASH
-2f04 KANGXI RADICAL SECOND
-2f05 KANGXI RADICAL HOOK
-2f06 KANGXI RADICAL TWO
-2f07 KANGXI RADICAL LID
-2f08 KANGXI RADICAL MAN
-2f09 KANGXI RADICAL LEGS
-2f0a KANGXI RADICAL ENTER
-2f0b KANGXI RADICAL EIGHT
-2f0c KANGXI RADICAL DOWN BOX
-2f0d KANGXI RADICAL COVER
-2f0e KANGXI RADICAL ICE
-2f0f KANGXI RADICAL TABLE
-2f10 KANGXI RADICAL OPEN BOX
-2f11 KANGXI RADICAL KNIFE
-2f12 KANGXI RADICAL POWER
-2f13 KANGXI RADICAL WRAP
-2f14 KANGXI RADICAL SPOON
-2f15 KANGXI RADICAL RIGHT OPEN BOX
-2f16 KANGXI RADICAL HIDING ENCLOSURE
-2f17 KANGXI RADICAL TEN
-2f18 KANGXI RADICAL DIVINATION
-2f19 KANGXI RADICAL SEAL
-2f1a KANGXI RADICAL CLIFF
-2f1b KANGXI RADICAL PRIVATE
-2f1c KANGXI RADICAL AGAIN
-2f1d KANGXI RADICAL MOUTH
-2f1e KANGXI RADICAL ENCLOSURE
-2f1f KANGXI RADICAL EARTH
-2f20 KANGXI RADICAL SCHOLAR
-2f21 KANGXI RADICAL GO
-2f22 KANGXI RADICAL GO SLOWLY
-2f23 KANGXI RADICAL EVENING
-2f24 KANGXI RADICAL BIG
-2f25 KANGXI RADICAL WOMAN
-2f26 KANGXI RADICAL CHILD
-2f27 KANGXI RADICAL ROOF
-2f28 KANGXI RADICAL INCH
-2f29 KANGXI RADICAL SMALL
-2f2a KANGXI RADICAL LAME
-2f2b KANGXI RADICAL CORPSE
-2f2c KANGXI RADICAL SPROUT
-2f2d KANGXI RADICAL MOUNTAIN
-2f2e KANGXI RADICAL RIVER
-2f2f KANGXI RADICAL WORK
-2f30 KANGXI RADICAL ONESELF
-2f31 KANGXI RADICAL TURBAN
-2f32 KANGXI RADICAL DRY
-2f33 KANGXI RADICAL SHORT THREAD
-2f34 KANGXI RADICAL DOTTED CLIFF
-2f35 KANGXI RADICAL LONG STRIDE
-2f36 KANGXI RADICAL TWO HANDS
-2f37 KANGXI RADICAL SHOOT
-2f38 KANGXI RADICAL BOW
-2f39 KANGXI RADICAL SNOUT
-2f3a KANGXI RADICAL BRISTLE
-2f3b KANGXI RADICAL STEP
-2f3c KANGXI RADICAL HEART
-2f3d KANGXI RADICAL HALBERD
-2f3e KANGXI RADICAL DOOR
-2f3f KANGXI RADICAL HAND
-2f40 KANGXI RADICAL BRANCH
-2f41 KANGXI RADICAL RAP
-2f42 KANGXI RADICAL SCRIPT
-2f43 KANGXI RADICAL DIPPER
-2f44 KANGXI RADICAL AXE
-2f45 KANGXI RADICAL SQUARE
-2f46 KANGXI RADICAL NOT
-2f47 KANGXI RADICAL SUN
-2f48 KANGXI RADICAL SAY
-2f49 KANGXI RADICAL MOON
-2f4a KANGXI RADICAL TREE
-2f4b KANGXI RADICAL LACK
-2f4c KANGXI RADICAL STOP
-2f4d KANGXI RADICAL DEATH
-2f4e KANGXI RADICAL WEAPON
-2f4f KANGXI RADICAL DO NOT
-2f50 KANGXI RADICAL COMPARE
-2f51 KANGXI RADICAL FUR
-2f52 KANGXI RADICAL CLAN
-2f53 KANGXI RADICAL STEAM
-2f54 KANGXI RADICAL WATER
-2f55 KANGXI RADICAL FIRE
-2f56 KANGXI RADICAL CLAW
-2f57 KANGXI RADICAL FATHER
-2f58 KANGXI RADICAL DOUBLE X
-2f59 KANGXI RADICAL HALF TREE TRUNK
-2f5a KANGXI RADICAL SLICE
-2f5b KANGXI RADICAL FANG
-2f5c KANGXI RADICAL COW
-2f5d KANGXI RADICAL DOG
-2f5e KANGXI RADICAL PROFOUND
-2f5f KANGXI RADICAL JADE
-2f60 KANGXI RADICAL MELON
-2f61 KANGXI RADICAL TILE
-2f62 KANGXI RADICAL SWEET
-2f63 KANGXI RADICAL LIFE
-2f64 KANGXI RADICAL USE
-2f65 KANGXI RADICAL FIELD
-2f66 KANGXI RADICAL BOLT OF CLOTH
-2f67 KANGXI RADICAL SICKNESS
-2f68 KANGXI RADICAL DOTTED TENT
-2f69 KANGXI RADICAL WHITE
-2f6a KANGXI RADICAL SKIN
-2f6b KANGXI RADICAL DISH
-2f6c KANGXI RADICAL EYE
-2f6d KANGXI RADICAL SPEAR
-2f6e KANGXI RADICAL ARROW
-2f6f KANGXI RADICAL STONE
-2f70 KANGXI RADICAL SPIRIT
-2f71 KANGXI RADICAL TRACK
-2f72 KANGXI RADICAL GRAIN
-2f73 KANGXI RADICAL CAVE
-2f74 KANGXI RADICAL STAND
-2f75 KANGXI RADICAL BAMBOO
-2f76 KANGXI RADICAL RICE
-2f77 KANGXI RADICAL SILK
-2f78 KANGXI RADICAL JAR
-2f79 KANGXI RADICAL NET
-2f7a KANGXI RADICAL SHEEP
-2f7b KANGXI RADICAL FEATHER
-2f7c KANGXI RADICAL OLD
-2f7d KANGXI RADICAL AND
-2f7e KANGXI RADICAL PLOW
-2f7f KANGXI RADICAL EAR
-2f80 KANGXI RADICAL BRUSH
-2f81 KANGXI RADICAL MEAT
-2f82 KANGXI RADICAL MINISTER
-2f83 KANGXI RADICAL SELF
-2f84 KANGXI RADICAL ARRIVE
-2f85 KANGXI RADICAL MORTAR
-2f86 KANGXI RADICAL TONGUE
-2f87 KANGXI RADICAL OPPOSE
-2f88 KANGXI RADICAL BOAT
-2f89 KANGXI RADICAL STOPPING
-2f8a KANGXI RADICAL COLOR
-2f8b KANGXI RADICAL GRASS
-2f8c KANGXI RADICAL TIGER
-2f8d KANGXI RADICAL INSECT
-2f8e KANGXI RADICAL BLOOD
-2f8f KANGXI RADICAL WALK ENCLOSURE
-2f90 KANGXI RADICAL CLOTHES
-2f91 KANGXI RADICAL WEST
-2f92 KANGXI RADICAL SEE
-2f93 KANGXI RADICAL HORN
-2f94 KANGXI RADICAL SPEECH
-2f95 KANGXI RADICAL VALLEY
-2f96 KANGXI RADICAL BEAN
-2f97 KANGXI RADICAL PIG
-2f98 KANGXI RADICAL BADGER
-2f99 KANGXI RADICAL SHELL
-2f9a KANGXI RADICAL RED
-2f9b KANGXI RADICAL RUN
-2f9c KANGXI RADICAL FOOT
-2f9d KANGXI RADICAL BODY
-2f9e KANGXI RADICAL CART
-2f9f KANGXI RADICAL BITTER
-2fa0 KANGXI RADICAL MORNING
-2fa1 KANGXI RADICAL WALK
-2fa2 KANGXI RADICAL CITY
-2fa3 KANGXI RADICAL WINE
-2fa4 KANGXI RADICAL DISTINGUISH
-2fa5 KANGXI RADICAL VILLAGE
-2fa6 KANGXI RADICAL GOLD
-2fa7 KANGXI RADICAL LONG
-2fa8 KANGXI RADICAL GATE
-2fa9 KANGXI RADICAL MOUND
-2faa KANGXI RADICAL SLAVE
-2fab KANGXI RADICAL SHORT TAILED BIRD
-2fac KANGXI RADICAL RAIN
-2fad KANGXI RADICAL BLUE
-2fae KANGXI RADICAL WRONG
-2faf KANGXI RADICAL FACE
-2fb0 KANGXI RADICAL LEATHER
-2fb1 KANGXI RADICAL TANNED LEATHER
-2fb2 KANGXI RADICAL LEEK
-2fb3 KANGXI RADICAL SOUND
-2fb4 KANGXI RADICAL LEAF
-2fb5 KANGXI RADICAL WIND
-2fb6 KANGXI RADICAL FLY
-2fb7 KANGXI RADICAL EAT
-2fb8 KANGXI RADICAL HEAD
-2fb9 KANGXI RADICAL FRAGRANT
-2fba KANGXI RADICAL HORSE
-2fbb KANGXI RADICAL BONE
-2fbc KANGXI RADICAL TALL
-2fbd KANGXI RADICAL HAIR
-2fbe KANGXI RADICAL FIGHT
-2fbf KANGXI RADICAL SACRIFICIAL WINE
-2fc0 KANGXI RADICAL CAULDRON
-2fc1 KANGXI RADICAL GHOST
-2fc2 KANGXI RADICAL FISH
-2fc3 KANGXI RADICAL BIRD
-2fc4 KANGXI RADICAL SALT
-2fc5 KANGXI RADICAL DEER
-2fc6 KANGXI RADICAL WHEAT
-2fc7 KANGXI RADICAL HEMP
-2fc8 KANGXI RADICAL YELLOW
-2fc9 KANGXI RADICAL MILLET
-2fca KANGXI RADICAL BLACK
-2fcb KANGXI RADICAL EMBROIDERY
-2fcc KANGXI RADICAL FROG
-2fcd KANGXI RADICAL TRIPOD
-2fce KANGXI RADICAL DRUM
-2fcf KANGXI RADICAL RAT
-2fd0 KANGXI RADICAL NOSE
-2fd1 KANGXI RADICAL EVEN
-2fd2 KANGXI RADICAL TOOTH
-2fd3 KANGXI RADICAL DRAGON
-2fd4 KANGXI RADICAL TURTLE
-2fd5 KANGXI RADICAL FLUTE
-2ff0 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
-2ff1 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
-2ff2 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
-2ff3 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
-2ff4 IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
-2ff5 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
-2ff6 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
-2ff7 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
-2ff8 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
-2ff9 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
-2ffa IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
-2ffb IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
-3000 IDEOGRAPHIC SPACE
-3001 IDEOGRAPHIC COMMA
-3002 IDEOGRAPHIC FULL STOP
-3003 DITTO MARK
-3004 JAPANESE INDUSTRIAL STANDARD SYMBOL
-3005 IDEOGRAPHIC ITERATION MARK
-3006 IDEOGRAPHIC CLOSING MARK
-3007 IDEOGRAPHIC NUMBER ZERO
-3008 LEFT ANGLE BRACKET
-3009 RIGHT ANGLE BRACKET
-300a LEFT DOUBLE ANGLE BRACKET
-300b RIGHT DOUBLE ANGLE BRACKET
-300c LEFT CORNER BRACKET
-300d RIGHT CORNER BRACKET
-300e LEFT WHITE CORNER BRACKET
-300f RIGHT WHITE CORNER BRACKET
-3010 LEFT BLACK LENTICULAR BRACKET
-3011 RIGHT BLACK LENTICULAR BRACKET
-3012 POSTAL MARK
-3013 GETA MARK
-3014 LEFT TORTOISE SHELL BRACKET
-3015 RIGHT TORTOISE SHELL BRACKET
-3016 LEFT WHITE LENTICULAR BRACKET
-3017 RIGHT WHITE LENTICULAR BRACKET
-3018 LEFT WHITE TORTOISE SHELL BRACKET
-3019 RIGHT WHITE TORTOISE SHELL BRACKET
-301a LEFT WHITE SQUARE BRACKET
-301b RIGHT WHITE SQUARE BRACKET
-301c WAVE DASH
-301d REVERSED DOUBLE PRIME QUOTATION MARK
-301e DOUBLE PRIME QUOTATION MARK
-301f LOW DOUBLE PRIME QUOTATION MARK
-3020 POSTAL MARK FACE
-3021 HANGZHOU NUMERAL ONE
-3022 HANGZHOU NUMERAL TWO
-3023 HANGZHOU NUMERAL THREE
-3024 HANGZHOU NUMERAL FOUR
-3025 HANGZHOU NUMERAL FIVE
-3026 HANGZHOU NUMERAL SIX
-3027 HANGZHOU NUMERAL SEVEN
-3028 HANGZHOU NUMERAL EIGHT
-3029 HANGZHOU NUMERAL NINE
-302a IDEOGRAPHIC LEVEL TONE MARK
-302b IDEOGRAPHIC RISING TONE MARK
-302c IDEOGRAPHIC DEPARTING TONE MARK
-302d IDEOGRAPHIC ENTERING TONE MARK
-302e HANGUL SINGLE DOT TONE MARK
-302f HANGUL DOUBLE DOT TONE MARK
-3030 WAVY DASH
-3031 VERTICAL KANA REPEAT MARK
-3032 VERTICAL KANA REPEAT WITH VOICED SOUND MARK
-3033 VERTICAL KANA REPEAT MARK UPPER HALF
-3034 VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
-3035 VERTICAL KANA REPEAT MARK LOWER HALF
-3036 CIRCLED POSTAL MARK
-3037 IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
-3038 HANGZHOU NUMERAL TEN
-3039 HANGZHOU NUMERAL TWENTY
-303a HANGZHOU NUMERAL THIRTY
-303e IDEOGRAPHIC VARIATION INDICATOR
-303f IDEOGRAPHIC HALF FILL SPACE
-3041 HIRAGANA LETTER SMALL A
-3042 HIRAGANA LETTER A
-3043 HIRAGANA LETTER SMALL I
-3044 HIRAGANA LETTER I
-3045 HIRAGANA LETTER SMALL U
-3046 HIRAGANA LETTER U
-3047 HIRAGANA LETTER SMALL E
-3048 HIRAGANA LETTER E
-3049 HIRAGANA LETTER SMALL O
-304a HIRAGANA LETTER O
-304b HIRAGANA LETTER KA
-304c HIRAGANA LETTER GA
-304d HIRAGANA LETTER KI
-304e HIRAGANA LETTER GI
-304f HIRAGANA LETTER KU
-3050 HIRAGANA LETTER GU
-3051 HIRAGANA LETTER KE
-3052 HIRAGANA LETTER GE
-3053 HIRAGANA LETTER KO
-3054 HIRAGANA LETTER GO
-3055 HIRAGANA LETTER SA
-3056 HIRAGANA LETTER ZA
-3057 HIRAGANA LETTER SI
-3058 HIRAGANA LETTER ZI
-3059 HIRAGANA LETTER SU
-305a HIRAGANA LETTER ZU
-305b HIRAGANA LETTER SE
-305c HIRAGANA LETTER ZE
-305d HIRAGANA LETTER SO
-305e HIRAGANA LETTER ZO
-305f HIRAGANA LETTER TA
-3060 HIRAGANA LETTER DA
-3061 HIRAGANA LETTER TI
-3062 HIRAGANA LETTER DI
-3063 HIRAGANA LETTER SMALL TU
-3064 HIRAGANA LETTER TU
-3065 HIRAGANA LETTER DU
-3066 HIRAGANA LETTER TE
-3067 HIRAGANA LETTER DE
-3068 HIRAGANA LETTER TO
-3069 HIRAGANA LETTER DO
-306a HIRAGANA LETTER NA
-306b HIRAGANA LETTER NI
-306c HIRAGANA LETTER NU
-306d HIRAGANA LETTER NE
-306e HIRAGANA LETTER NO
-306f HIRAGANA LETTER HA
-3070 HIRAGANA LETTER BA
-3071 HIRAGANA LETTER PA
-3072 HIRAGANA LETTER HI
-3073 HIRAGANA LETTER BI
-3074 HIRAGANA LETTER PI
-3075 HIRAGANA LETTER HU
-3076 HIRAGANA LETTER BU
-3077 HIRAGANA LETTER PU
-3078 HIRAGANA LETTER HE
-3079 HIRAGANA LETTER BE
-307a HIRAGANA LETTER PE
-307b HIRAGANA LETTER HO
-307c HIRAGANA LETTER BO
-307d HIRAGANA LETTER PO
-307e HIRAGANA LETTER MA
-307f HIRAGANA LETTER MI
-3080 HIRAGANA LETTER MU
-3081 HIRAGANA LETTER ME
-3082 HIRAGANA LETTER MO
-3083 HIRAGANA LETTER SMALL YA
-3084 HIRAGANA LETTER YA
-3085 HIRAGANA LETTER SMALL YU
-3086 HIRAGANA LETTER YU
-3087 HIRAGANA LETTER SMALL YO
-3088 HIRAGANA LETTER YO
-3089 HIRAGANA LETTER RA
-308a HIRAGANA LETTER RI
-308b HIRAGANA LETTER RU
-308c HIRAGANA LETTER RE
-308d HIRAGANA LETTER RO
-308e HIRAGANA LETTER SMALL WA
-308f HIRAGANA LETTER WA
-3090 HIRAGANA LETTER WI
-3091 HIRAGANA LETTER WE
-3092 HIRAGANA LETTER WO
-3093 HIRAGANA LETTER N
-3094 HIRAGANA LETTER VU
-3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
-309a COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-309b KATAKANA-HIRAGANA VOICED SOUND MARK
-309c KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-309d HIRAGANA ITERATION MARK
-309e HIRAGANA VOICED ITERATION MARK
-30a1 KATAKANA LETTER SMALL A
-30a2 KATAKANA LETTER A
-30a3 KATAKANA LETTER SMALL I
-30a4 KATAKANA LETTER I
-30a5 KATAKANA LETTER SMALL U
-30a6 KATAKANA LETTER U
-30a7 KATAKANA LETTER SMALL E
-30a8 KATAKANA LETTER E
-30a9 KATAKANA LETTER SMALL O
-30aa KATAKANA LETTER O
-30ab KATAKANA LETTER KA
-30ac KATAKANA LETTER GA
-30ad KATAKANA LETTER KI
-30ae KATAKANA LETTER GI
-30af KATAKANA LETTER KU
-30b0 KATAKANA LETTER GU
-30b1 KATAKANA LETTER KE
-30b2 KATAKANA LETTER GE
-30b3 KATAKANA LETTER KO
-30b4 KATAKANA LETTER GO
-30b5 KATAKANA LETTER SA
-30b6 KATAKANA LETTER ZA
-30b7 KATAKANA LETTER SI
-30b8 KATAKANA LETTER ZI
-30b9 KATAKANA LETTER SU
-30ba KATAKANA LETTER ZU
-30bb KATAKANA LETTER SE
-30bc KATAKANA LETTER ZE
-30bd KATAKANA LETTER SO
-30be KATAKANA LETTER ZO
-30bf KATAKANA LETTER TA
-30c0 KATAKANA LETTER DA
-30c1 KATAKANA LETTER TI
-30c2 KATAKANA LETTER DI
-30c3 KATAKANA LETTER SMALL TU
-30c4 KATAKANA LETTER TU
-30c5 KATAKANA LETTER DU
-30c6 KATAKANA LETTER TE
-30c7 KATAKANA LETTER DE
-30c8 KATAKANA LETTER TO
-30c9 KATAKANA LETTER DO
-30ca KATAKANA LETTER NA
-30cb KATAKANA LETTER NI
-30cc KATAKANA LETTER NU
-30cd KATAKANA LETTER NE
-30ce KATAKANA LETTER NO
-30cf KATAKANA LETTER HA
-30d0 KATAKANA LETTER BA
-30d1 KATAKANA LETTER PA
-30d2 KATAKANA LETTER HI
-30d3 KATAKANA LETTER BI
-30d4 KATAKANA LETTER PI
-30d5 KATAKANA LETTER HU
-30d6 KATAKANA LETTER BU
-30d7 KATAKANA LETTER PU
-30d8 KATAKANA LETTER HE
-30d9 KATAKANA LETTER BE
-30da KATAKANA LETTER PE
-30db KATAKANA LETTER HO
-30dc KATAKANA LETTER BO
-30dd KATAKANA LETTER PO
-30de KATAKANA LETTER MA
-30df KATAKANA LETTER MI
-30e0 KATAKANA LETTER MU
-30e1 KATAKANA LETTER ME
-30e2 KATAKANA LETTER MO
-30e3 KATAKANA LETTER SMALL YA
-30e4 KATAKANA LETTER YA
-30e5 KATAKANA LETTER SMALL YU
-30e6 KATAKANA LETTER YU
-30e7 KATAKANA LETTER SMALL YO
-30e8 KATAKANA LETTER YO
-30e9 KATAKANA LETTER RA
-30ea KATAKANA LETTER RI
-30eb KATAKANA LETTER RU
-30ec KATAKANA LETTER RE
-30ed KATAKANA LETTER RO
-30ee KATAKANA LETTER SMALL WA
-30ef KATAKANA LETTER WA
-30f0 KATAKANA LETTER WI
-30f1 KATAKANA LETTER WE
-30f2 KATAKANA LETTER WO
-30f3 KATAKANA LETTER N
-30f4 KATAKANA LETTER VU
-30f5 KATAKANA LETTER SMALL KA
-30f6 KATAKANA LETTER SMALL KE
-30f7 KATAKANA LETTER VA
-30f8 KATAKANA LETTER VI
-30f9 KATAKANA LETTER VE
-30fa KATAKANA LETTER VO
-30fb KATAKANA MIDDLE DOT
-30fc KATAKANA-HIRAGANA PROLONGED SOUND MARK
-30fd KATAKANA ITERATION MARK
-30fe KATAKANA VOICED ITERATION MARK
-3105 BOPOMOFO LETTER B
-3106 BOPOMOFO LETTER P
-3107 BOPOMOFO LETTER M
-3108 BOPOMOFO LETTER F
-3109 BOPOMOFO LETTER D
-310a BOPOMOFO LETTER T
-310b BOPOMOFO LETTER N
-310c BOPOMOFO LETTER L
-310d BOPOMOFO LETTER G
-310e BOPOMOFO LETTER K
-310f BOPOMOFO LETTER H
-3110 BOPOMOFO LETTER J
-3111 BOPOMOFO LETTER Q
-3112 BOPOMOFO LETTER X
-3113 BOPOMOFO LETTER ZH
-3114 BOPOMOFO LETTER CH
-3115 BOPOMOFO LETTER SH
-3116 BOPOMOFO LETTER R
-3117 BOPOMOFO LETTER Z
-3118 BOPOMOFO LETTER C
-3119 BOPOMOFO LETTER S
-311a BOPOMOFO LETTER A
-311b BOPOMOFO LETTER O
-311c BOPOMOFO LETTER E
-311d BOPOMOFO LETTER EH
-311e BOPOMOFO LETTER AI
-311f BOPOMOFO LETTER EI
-3120 BOPOMOFO LETTER AU
-3121 BOPOMOFO LETTER OU
-3122 BOPOMOFO LETTER AN
-3123 BOPOMOFO LETTER EN
-3124 BOPOMOFO LETTER ANG
-3125 BOPOMOFO LETTER ENG
-3126 BOPOMOFO LETTER ER
-3127 BOPOMOFO LETTER I
-3128 BOPOMOFO LETTER U
-3129 BOPOMOFO LETTER IU
-312a BOPOMOFO LETTER V
-312b BOPOMOFO LETTER NG
-312c BOPOMOFO LETTER GN
-3131 HANGUL LETTER KIYEOK
-3132 HANGUL LETTER SSANGKIYEOK
-3133 HANGUL LETTER KIYEOK-SIOS
-3134 HANGUL LETTER NIEUN
-3135 HANGUL LETTER NIEUN-CIEUC
-3136 HANGUL LETTER NIEUN-HIEUH
-3137 HANGUL LETTER TIKEUT
-3138 HANGUL LETTER SSANGTIKEUT
-3139 HANGUL LETTER RIEUL
-313a HANGUL LETTER RIEUL-KIYEOK
-313b HANGUL LETTER RIEUL-MIEUM
-313c HANGUL LETTER RIEUL-PIEUP
-313d HANGUL LETTER RIEUL-SIOS
-313e HANGUL LETTER RIEUL-THIEUTH
-313f HANGUL LETTER RIEUL-PHIEUPH
-3140 HANGUL LETTER RIEUL-HIEUH
-3141 HANGUL LETTER MIEUM
-3142 HANGUL LETTER PIEUP
-3143 HANGUL LETTER SSANGPIEUP
-3144 HANGUL LETTER PIEUP-SIOS
-3145 HANGUL LETTER SIOS
-3146 HANGUL LETTER SSANGSIOS
-3147 HANGUL LETTER IEUNG
-3148 HANGUL LETTER CIEUC
-3149 HANGUL LETTER SSANGCIEUC
-314a HANGUL LETTER CHIEUCH
-314b HANGUL LETTER KHIEUKH
-314c HANGUL LETTER THIEUTH
-314d HANGUL LETTER PHIEUPH
-314e HANGUL LETTER HIEUH
-314f HANGUL LETTER A
-3150 HANGUL LETTER AE
-3151 HANGUL LETTER YA
-3152 HANGUL LETTER YAE
-3153 HANGUL LETTER EO
-3154 HANGUL LETTER E
-3155 HANGUL LETTER YEO
-3156 HANGUL LETTER YE
-3157 HANGUL LETTER O
-3158 HANGUL LETTER WA
-3159 HANGUL LETTER WAE
-315a HANGUL LETTER OE
-315b HANGUL LETTER YO
-315c HANGUL LETTER U
-315d HANGUL LETTER WEO
-315e HANGUL LETTER WE
-315f HANGUL LETTER WI
-3160 HANGUL LETTER YU
-3161 HANGUL LETTER EU
-3162 HANGUL LETTER YI
-3163 HANGUL LETTER I
-3164 HANGUL FILLER
-3165 HANGUL LETTER SSANGNIEUN
-3166 HANGUL LETTER NIEUN-TIKEUT
-3167 HANGUL LETTER NIEUN-SIOS
-3168 HANGUL LETTER NIEUN-PANSIOS
-3169 HANGUL LETTER RIEUL-KIYEOK-SIOS
-316a HANGUL LETTER RIEUL-TIKEUT
-316b HANGUL LETTER RIEUL-PIEUP-SIOS
-316c HANGUL LETTER RIEUL-PANSIOS
-316d HANGUL LETTER RIEUL-YEORINHIEUH
-316e HANGUL LETTER MIEUM-PIEUP
-316f HANGUL LETTER MIEUM-SIOS
-3170 HANGUL LETTER MIEUM-PANSIOS
-3171 HANGUL LETTER KAPYEOUNMIEUM
-3172 HANGUL LETTER PIEUP-KIYEOK
-3173 HANGUL LETTER PIEUP-TIKEUT
-3174 HANGUL LETTER PIEUP-SIOS-KIYEOK
-3175 HANGUL LETTER PIEUP-SIOS-TIKEUT
-3176 HANGUL LETTER PIEUP-CIEUC
-3177 HANGUL LETTER PIEUP-THIEUTH
-3178 HANGUL LETTER KAPYEOUNPIEUP
-3179 HANGUL LETTER KAPYEOUNSSANGPIEUP
-317a HANGUL LETTER SIOS-KIYEOK
-317b HANGUL LETTER SIOS-NIEUN
-317c HANGUL LETTER SIOS-TIKEUT
-317d HANGUL LETTER SIOS-PIEUP
-317e HANGUL LETTER SIOS-CIEUC
-317f HANGUL LETTER PANSIOS
-3180 HANGUL LETTER SSANGIEUNG
-3181 HANGUL LETTER YESIEUNG
-3182 HANGUL LETTER YESIEUNG-SIOS
-3183 HANGUL LETTER YESIEUNG-PANSIOS
-3184 HANGUL LETTER KAPYEOUNPHIEUPH
-3185 HANGUL LETTER SSANGHIEUH
-3186 HANGUL LETTER YEORINHIEUH
-3187 HANGUL LETTER YO-YA
-3188 HANGUL LETTER YO-YAE
-3189 HANGUL LETTER YO-I
-318a HANGUL LETTER YU-YEO
-318b HANGUL LETTER YU-YE
-318c HANGUL LETTER YU-I
-318d HANGUL LETTER ARAEA
-318e HANGUL LETTER ARAEAE
-3190 IDEOGRAPHIC ANNOTATION LINKING MARK
-3191 IDEOGRAPHIC ANNOTATION REVERSE MARK
-3192 IDEOGRAPHIC ANNOTATION ONE MARK
-3193 IDEOGRAPHIC ANNOTATION TWO MARK
-3194 IDEOGRAPHIC ANNOTATION THREE MARK
-3195 IDEOGRAPHIC ANNOTATION FOUR MARK
-3196 IDEOGRAPHIC ANNOTATION TOP MARK
-3197 IDEOGRAPHIC ANNOTATION MIDDLE MARK
-3198 IDEOGRAPHIC ANNOTATION BOTTOM MARK
-3199 IDEOGRAPHIC ANNOTATION FIRST MARK
-319a IDEOGRAPHIC ANNOTATION SECOND MARK
-319b IDEOGRAPHIC ANNOTATION THIRD MARK
-319c IDEOGRAPHIC ANNOTATION FOURTH MARK
-319d IDEOGRAPHIC ANNOTATION HEAVEN MARK
-319e IDEOGRAPHIC ANNOTATION EARTH MARK
-319f IDEOGRAPHIC ANNOTATION MAN MARK
-31a0 BOPOMOFO LETTER BU
-31a1 BOPOMOFO LETTER ZI
-31a2 BOPOMOFO LETTER JI
-31a3 BOPOMOFO LETTER GU
-31a4 BOPOMOFO LETTER EE
-31a5 BOPOMOFO LETTER ENN
-31a6 BOPOMOFO LETTER OO
-31a7 BOPOMOFO LETTER ONN
-31a8 BOPOMOFO LETTER IR
-31a9 BOPOMOFO LETTER ANN
-31aa BOPOMOFO LETTER INN
-31ab BOPOMOFO LETTER UNN
-31ac BOPOMOFO LETTER IM
-31ad BOPOMOFO LETTER NGG
-31ae BOPOMOFO LETTER AINN
-31af BOPOMOFO LETTER AUNN
-31b0 BOPOMOFO LETTER AM
-31b1 BOPOMOFO LETTER OM
-31b2 BOPOMOFO LETTER ONG
-31b3 BOPOMOFO LETTER INNN
-31b4 BOPOMOFO FINAL LETTER P
-31b5 BOPOMOFO FINAL LETTER T
-31b6 BOPOMOFO FINAL LETTER K
-31b7 BOPOMOFO FINAL LETTER H
-3200 PARENTHESIZED HANGUL KIYEOK
-3201 PARENTHESIZED HANGUL NIEUN
-3202 PARENTHESIZED HANGUL TIKEUT
-3203 PARENTHESIZED HANGUL RIEUL
-3204 PARENTHESIZED HANGUL MIEUM
-3205 PARENTHESIZED HANGUL PIEUP
-3206 PARENTHESIZED HANGUL SIOS
-3207 PARENTHESIZED HANGUL IEUNG
-3208 PARENTHESIZED HANGUL CIEUC
-3209 PARENTHESIZED HANGUL CHIEUCH
-320a PARENTHESIZED HANGUL KHIEUKH
-320b PARENTHESIZED HANGUL THIEUTH
-320c PARENTHESIZED HANGUL PHIEUPH
-320d PARENTHESIZED HANGUL HIEUH
-320e PARENTHESIZED HANGUL KIYEOK A
-320f PARENTHESIZED HANGUL NIEUN A
-3210 PARENTHESIZED HANGUL TIKEUT A
-3211 PARENTHESIZED HANGUL RIEUL A
-3212 PARENTHESIZED HANGUL MIEUM A
-3213 PARENTHESIZED HANGUL PIEUP A
-3214 PARENTHESIZED HANGUL SIOS A
-3215 PARENTHESIZED HANGUL IEUNG A
-3216 PARENTHESIZED HANGUL CIEUC A
-3217 PARENTHESIZED HANGUL CHIEUCH A
-3218 PARENTHESIZED HANGUL KHIEUKH A
-3219 PARENTHESIZED HANGUL THIEUTH A
-321a PARENTHESIZED HANGUL PHIEUPH A
-321b PARENTHESIZED HANGUL HIEUH A
-321c PARENTHESIZED HANGUL CIEUC U
-3220 PARENTHESIZED IDEOGRAPH ONE
-3221 PARENTHESIZED IDEOGRAPH TWO
-3222 PARENTHESIZED IDEOGRAPH THREE
-3223 PARENTHESIZED IDEOGRAPH FOUR
-3224 PARENTHESIZED IDEOGRAPH FIVE
-3225 PARENTHESIZED IDEOGRAPH SIX
-3226 PARENTHESIZED IDEOGRAPH SEVEN
-3227 PARENTHESIZED IDEOGRAPH EIGHT
-3228 PARENTHESIZED IDEOGRAPH NINE
-3229 PARENTHESIZED IDEOGRAPH TEN
-322a PARENTHESIZED IDEOGRAPH MOON
-322b PARENTHESIZED IDEOGRAPH FIRE
-322c PARENTHESIZED IDEOGRAPH WATER
-322d PARENTHESIZED IDEOGRAPH WOOD
-322e PARENTHESIZED IDEOGRAPH METAL
-322f PARENTHESIZED IDEOGRAPH EARTH
-3230 PARENTHESIZED IDEOGRAPH SUN
-3231 PARENTHESIZED IDEOGRAPH STOCK
-3232 PARENTHESIZED IDEOGRAPH HAVE
-3233 PARENTHESIZED IDEOGRAPH SOCIETY
-3234 PARENTHESIZED IDEOGRAPH NAME
-3235 PARENTHESIZED IDEOGRAPH SPECIAL
-3236 PARENTHESIZED IDEOGRAPH FINANCIAL
-3237 PARENTHESIZED IDEOGRAPH CONGRATULATION
-3238 PARENTHESIZED IDEOGRAPH LABOR
-3239 PARENTHESIZED IDEOGRAPH REPRESENT
-323a PARENTHESIZED IDEOGRAPH CALL
-323b PARENTHESIZED IDEOGRAPH STUDY
-323c PARENTHESIZED IDEOGRAPH SUPERVISE
-323d PARENTHESIZED IDEOGRAPH ENTERPRISE
-323e PARENTHESIZED IDEOGRAPH RESOURCE
-323f PARENTHESIZED IDEOGRAPH ALLIANCE
-3240 PARENTHESIZED IDEOGRAPH FESTIVAL
-3241 PARENTHESIZED IDEOGRAPH REST
-3242 PARENTHESIZED IDEOGRAPH SELF
-3243 PARENTHESIZED IDEOGRAPH REACH
-3260 CIRCLED HANGUL KIYEOK
-3261 CIRCLED HANGUL NIEUN
-3262 CIRCLED HANGUL TIKEUT
-3263 CIRCLED HANGUL RIEUL
-3264 CIRCLED HANGUL MIEUM
-3265 CIRCLED HANGUL PIEUP
-3266 CIRCLED HANGUL SIOS
-3267 CIRCLED HANGUL IEUNG
-3268 CIRCLED HANGUL CIEUC
-3269 CIRCLED HANGUL CHIEUCH
-326a CIRCLED HANGUL KHIEUKH
-326b CIRCLED HANGUL THIEUTH
-326c CIRCLED HANGUL PHIEUPH
-326d CIRCLED HANGUL HIEUH
-326e CIRCLED HANGUL KIYEOK A
-326f CIRCLED HANGUL NIEUN A
-3270 CIRCLED HANGUL TIKEUT A
-3271 CIRCLED HANGUL RIEUL A
-3272 CIRCLED HANGUL MIEUM A
-3273 CIRCLED HANGUL PIEUP A
-3274 CIRCLED HANGUL SIOS A
-3275 CIRCLED HANGUL IEUNG A
-3276 CIRCLED HANGUL CIEUC A
-3277 CIRCLED HANGUL CHIEUCH A
-3278 CIRCLED HANGUL KHIEUKH A
-3279 CIRCLED HANGUL THIEUTH A
-327a CIRCLED HANGUL PHIEUPH A
-327b CIRCLED HANGUL HIEUH A
-327f KOREAN STANDARD SYMBOL
-3280 CIRCLED IDEOGRAPH ONE
-3281 CIRCLED IDEOGRAPH TWO
-3282 CIRCLED IDEOGRAPH THREE
-3283 CIRCLED IDEOGRAPH FOUR
-3284 CIRCLED IDEOGRAPH FIVE
-3285 CIRCLED IDEOGRAPH SIX
-3286 CIRCLED IDEOGRAPH SEVEN
-3287 CIRCLED IDEOGRAPH EIGHT
-3288 CIRCLED IDEOGRAPH NINE
-3289 CIRCLED IDEOGRAPH TEN
-328a CIRCLED IDEOGRAPH MOON
-328b CIRCLED IDEOGRAPH FIRE
-328c CIRCLED IDEOGRAPH WATER
-328d CIRCLED IDEOGRAPH WOOD
-328e CIRCLED IDEOGRAPH METAL
-328f CIRCLED IDEOGRAPH EARTH
-3290 CIRCLED IDEOGRAPH SUN
-3291 CIRCLED IDEOGRAPH STOCK
-3292 CIRCLED IDEOGRAPH HAVE
-3293 CIRCLED IDEOGRAPH SOCIETY
-3294 CIRCLED IDEOGRAPH NAME
-3295 CIRCLED IDEOGRAPH SPECIAL
-3296 CIRCLED IDEOGRAPH FINANCIAL
-3297 CIRCLED IDEOGRAPH CONGRATULATION
-3298 CIRCLED IDEOGRAPH LABOR
-3299 CIRCLED IDEOGRAPH SECRET
-329a CIRCLED IDEOGRAPH MALE
-329b CIRCLED IDEOGRAPH FEMALE
-329c CIRCLED IDEOGRAPH SUITABLE
-329d CIRCLED IDEOGRAPH EXCELLENT
-329e CIRCLED IDEOGRAPH PRINT
-329f CIRCLED IDEOGRAPH ATTENTION
-32a0 CIRCLED IDEOGRAPH ITEM
-32a1 CIRCLED IDEOGRAPH REST
-32a2 CIRCLED IDEOGRAPH COPY
-32a3 CIRCLED IDEOGRAPH CORRECT
-32a4 CIRCLED IDEOGRAPH HIGH
-32a5 CIRCLED IDEOGRAPH CENTRE
-32a6 CIRCLED IDEOGRAPH LOW
-32a7 CIRCLED IDEOGRAPH LEFT
-32a8 CIRCLED IDEOGRAPH RIGHT
-32a9 CIRCLED IDEOGRAPH MEDICINE
-32aa CIRCLED IDEOGRAPH RELIGION
-32ab CIRCLED IDEOGRAPH STUDY
-32ac CIRCLED IDEOGRAPH SUPERVISE
-32ad CIRCLED IDEOGRAPH ENTERPRISE
-32ae CIRCLED IDEOGRAPH RESOURCE
-32af CIRCLED IDEOGRAPH ALLIANCE
-32b0 CIRCLED IDEOGRAPH NIGHT
-32c0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
-32c1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
-32c2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
-32c3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
-32c4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
-32c5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
-32c6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
-32c7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
-32c8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
-32c9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
-32ca IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
-32cb IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
-32d0 CIRCLED KATAKANA A
-32d1 CIRCLED KATAKANA I
-32d2 CIRCLED KATAKANA U
-32d3 CIRCLED KATAKANA E
-32d4 CIRCLED KATAKANA O
-32d5 CIRCLED KATAKANA KA
-32d6 CIRCLED KATAKANA KI
-32d7 CIRCLED KATAKANA KU
-32d8 CIRCLED KATAKANA KE
-32d9 CIRCLED KATAKANA KO
-32da CIRCLED KATAKANA SA
-32db CIRCLED KATAKANA SI
-32dc CIRCLED KATAKANA SU
-32dd CIRCLED KATAKANA SE
-32de CIRCLED KATAKANA SO
-32df CIRCLED KATAKANA TA
-32e0 CIRCLED KATAKANA TI
-32e1 CIRCLED KATAKANA TU
-32e2 CIRCLED KATAKANA TE
-32e3 CIRCLED KATAKANA TO
-32e4 CIRCLED KATAKANA NA
-32e5 CIRCLED KATAKANA NI
-32e6 CIRCLED KATAKANA NU
-32e7 CIRCLED KATAKANA NE
-32e8 CIRCLED KATAKANA NO
-32e9 CIRCLED KATAKANA HA
-32ea CIRCLED KATAKANA HI
-32eb CIRCLED KATAKANA HU
-32ec CIRCLED KATAKANA HE
-32ed CIRCLED KATAKANA HO
-32ee CIRCLED KATAKANA MA
-32ef CIRCLED KATAKANA MI
-32f0 CIRCLED KATAKANA MU
-32f1 CIRCLED KATAKANA ME
-32f2 CIRCLED KATAKANA MO
-32f3 CIRCLED KATAKANA YA
-32f4 CIRCLED KATAKANA YU
-32f5 CIRCLED KATAKANA YO
-32f6 CIRCLED KATAKANA RA
-32f7 CIRCLED KATAKANA RI
-32f8 CIRCLED KATAKANA RU
-32f9 CIRCLED KATAKANA RE
-32fa CIRCLED KATAKANA RO
-32fb CIRCLED KATAKANA WA
-32fc CIRCLED KATAKANA WI
-32fd CIRCLED KATAKANA WE
-32fe CIRCLED KATAKANA WO
-3300 SQUARE APAATO
-3301 SQUARE ARUHUA
-3302 SQUARE ANPEA
-3303 SQUARE AARU
-3304 SQUARE ININGU
-3305 SQUARE INTI
-3306 SQUARE UON
-3307 SQUARE ESUKUUDO
-3308 SQUARE EEKAA
-3309 SQUARE ONSU
-330a SQUARE OOMU
-330b SQUARE KAIRI
-330c SQUARE KARATTO
-330d SQUARE KARORII
-330e SQUARE GARON
-330f SQUARE GANMA
-3310 SQUARE GIGA
-3311 SQUARE GINII
-3312 SQUARE KYURII
-3313 SQUARE GIRUDAA
-3314 SQUARE KIRO
-3315 SQUARE KIROGURAMU
-3316 SQUARE KIROMEETORU
-3317 SQUARE KIROWATTO
-3318 SQUARE GURAMU
-3319 SQUARE GURAMUTON
-331a SQUARE KURUZEIRO
-331b SQUARE KUROONE
-331c SQUARE KEESU
-331d SQUARE KORUNA
-331e SQUARE KOOPO
-331f SQUARE SAIKURU
-3320 SQUARE SANTIIMU
-3321 SQUARE SIRINGU
-3322 SQUARE SENTI
-3323 SQUARE SENTO
-3324 SQUARE DAASU
-3325 SQUARE DESI
-3326 SQUARE DORU
-3327 SQUARE TON
-3328 SQUARE NANO
-3329 SQUARE NOTTO
-332a SQUARE HAITU
-332b SQUARE PAASENTO
-332c SQUARE PAATU
-332d SQUARE BAARERU
-332e SQUARE PIASUTORU
-332f SQUARE PIKURU
-3330 SQUARE PIKO
-3331 SQUARE BIRU
-3332 SQUARE HUARADDO
-3333 SQUARE HUIITO
-3334 SQUARE BUSSYERU
-3335 SQUARE HURAN
-3336 SQUARE HEKUTAARU
-3337 SQUARE PESO
-3338 SQUARE PENIHI
-3339 SQUARE HERUTU
-333a SQUARE PENSU
-333b SQUARE PEEZI
-333c SQUARE BEETA
-333d SQUARE POINTO
-333e SQUARE BORUTO
-333f SQUARE HON
-3340 SQUARE PONDO
-3341 SQUARE HOORU
-3342 SQUARE HOON
-3343 SQUARE MAIKURO
-3344 SQUARE MAIRU
-3345 SQUARE MAHHA
-3346 SQUARE MARUKU
-3347 SQUARE MANSYON
-3348 SQUARE MIKURON
-3349 SQUARE MIRI
-334a SQUARE MIRIBAARU
-334b SQUARE MEGA
-334c SQUARE MEGATON
-334d SQUARE MEETORU
-334e SQUARE YAADO
-334f SQUARE YAARU
-3350 SQUARE YUAN
-3351 SQUARE RITTORU
-3352 SQUARE RIRA
-3353 SQUARE RUPII
-3354 SQUARE RUUBURU
-3355 SQUARE REMU
-3356 SQUARE RENTOGEN
-3357 SQUARE WATTO
-3358 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
-3359 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
-335a IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
-335b IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
-335c IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
-335d IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
-335e IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
-335f IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
-3360 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
-3361 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
-3362 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
-3363 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
-3364 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
-3365 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
-3366 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
-3367 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
-3368 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
-3369 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
-336a IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
-336b IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
-336c IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
-336d IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
-336e IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
-336f IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
-3370 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
-3371 SQUARE HPA
-3372 SQUARE DA
-3373 SQUARE AU
-3374 SQUARE BAR
-3375 SQUARE OV
-3376 SQUARE PC
-337b SQUARE ERA NAME HEISEI
-337c SQUARE ERA NAME SYOUWA
-337d SQUARE ERA NAME TAISYOU
-337e SQUARE ERA NAME MEIZI
-337f SQUARE CORPORATION
-3380 SQUARE PA AMPS
-3381 SQUARE NA
-3382 SQUARE MU A
-3383 SQUARE MA
-3384 SQUARE KA
-3385 SQUARE KB
-3386 SQUARE MB
-3387 SQUARE GB
-3388 SQUARE CAL
-3389 SQUARE KCAL
-338a SQUARE PF
-338b SQUARE NF
-338c SQUARE MU F
-338d SQUARE MU G
-338e SQUARE MG
-338f SQUARE KG
-3390 SQUARE HZ
-3391 SQUARE KHZ
-3392 SQUARE MHZ
-3393 SQUARE GHZ
-3394 SQUARE THZ
-3395 SQUARE MU L
-3396 SQUARE ML
-3397 SQUARE DL
-3398 SQUARE KL
-3399 SQUARE FM
-339a SQUARE NM
-339b SQUARE MU M
-339c SQUARE MM
-339d SQUARE CM
-339e SQUARE KM
-339f SQUARE MM SQUARED
-33a0 SQUARE CM SQUARED
-33a1 SQUARE M SQUARED
-33a2 SQUARE KM SQUARED
-33a3 SQUARE MM CUBED
-33a4 SQUARE CM CUBED
-33a5 SQUARE M CUBED
-33a6 SQUARE KM CUBED
-33a7 SQUARE M OVER S
-33a8 SQUARE M OVER S SQUARED
-33a9 SQUARE PA
-33aa SQUARE KPA
-33ab SQUARE MPA
-33ac SQUARE GPA
-33ad SQUARE RAD
-33ae SQUARE RAD OVER S
-33af SQUARE RAD OVER S SQUARED
-33b0 SQUARE PS
-33b1 SQUARE NS
-33b2 SQUARE MU S
-33b3 SQUARE MS
-33b4 SQUARE PV
-33b5 SQUARE NV
-33b6 SQUARE MU V
-33b7 SQUARE MV
-33b8 SQUARE KV
-33b9 SQUARE MV MEGA
-33ba SQUARE PW
-33bb SQUARE NW
-33bc SQUARE MU W
-33bd SQUARE MW
-33be SQUARE KW
-33bf SQUARE MW MEGA
-33c0 SQUARE K OHM
-33c1 SQUARE M OHM
-33c2 SQUARE AM
-33c3 SQUARE BQ
-33c4 SQUARE CC
-33c5 SQUARE CD
-33c6 SQUARE C OVER KG
-33c7 SQUARE CO
-33c8 SQUARE DB
-33c9 SQUARE GY
-33ca SQUARE HA
-33cb SQUARE HP
-33cc SQUARE IN
-33cd SQUARE KK
-33ce SQUARE KM CAPITAL
-33cf SQUARE KT
-33d0 SQUARE LM
-33d1 SQUARE LN
-33d2 SQUARE LOG
-33d3 SQUARE LX
-33d4 SQUARE MB SMALL
-33d5 SQUARE MIL
-33d6 SQUARE MOL
-33d7 SQUARE PH
-33d8 SQUARE PM
-33d9 SQUARE PPM
-33da SQUARE PR
-33db SQUARE SR
-33dc SQUARE SV
-33dd SQUARE WB
-33e0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
-33e1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
-33e2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
-33e3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
-33e4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
-33e5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
-33e6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
-33e7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
-33e8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
-33e9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
-33ea IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
-33eb IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
-33ec IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
-33ed IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
-33ee IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
-33ef IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
-33f0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
-33f1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
-33f2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
-33f3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
-33f4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
-33f5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
-33f6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
-33f7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
-33f8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
-33f9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
-33fa IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
-33fb IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
-33fc IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
-33fd IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
-33fe IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
-3400 4db5 <CJK Ideograph Extension A, First>
-4e00 9fa5 <CJK Ideograph, First>
-a000 YI SYLLABLE IT
-a001 YI SYLLABLE IX
-a002 YI SYLLABLE I
-a003 YI SYLLABLE IP
-a004 YI SYLLABLE IET
-a005 YI SYLLABLE IEX
-a006 YI SYLLABLE IE
-a007 YI SYLLABLE IEP
-a008 YI SYLLABLE AT
-a009 YI SYLLABLE AX
-a00a YI SYLLABLE A
-a00b YI SYLLABLE AP
-a00c YI SYLLABLE UOX
-a00d YI SYLLABLE UO
-a00e YI SYLLABLE UOP
-a00f YI SYLLABLE OT
-a010 YI SYLLABLE OX
-a011 YI SYLLABLE O
-a012 YI SYLLABLE OP
-a013 YI SYLLABLE EX
-a014 YI SYLLABLE E
-a015 YI SYLLABLE WU
-a016 YI SYLLABLE BIT
-a017 YI SYLLABLE BIX
-a018 YI SYLLABLE BI
-a019 YI SYLLABLE BIP
-a01a YI SYLLABLE BIET
-a01b YI SYLLABLE BIEX
-a01c YI SYLLABLE BIE
-a01d YI SYLLABLE BIEP
-a01e YI SYLLABLE BAT
-a01f YI SYLLABLE BAX
-a020 YI SYLLABLE BA
-a021 YI SYLLABLE BAP
-a022 YI SYLLABLE BUOX
-a023 YI SYLLABLE BUO
-a024 YI SYLLABLE BUOP
-a025 YI SYLLABLE BOT
-a026 YI SYLLABLE BOX
-a027 YI SYLLABLE BO
-a028 YI SYLLABLE BOP
-a029 YI SYLLABLE BEX
-a02a YI SYLLABLE BE
-a02b YI SYLLABLE BEP
-a02c YI SYLLABLE BUT
-a02d YI SYLLABLE BUX
-a02e YI SYLLABLE BU
-a02f YI SYLLABLE BUP
-a030 YI SYLLABLE BURX
-a031 YI SYLLABLE BUR
-a032 YI SYLLABLE BYT
-a033 YI SYLLABLE BYX
-a034 YI SYLLABLE BY
-a035 YI SYLLABLE BYP
-a036 YI SYLLABLE BYRX
-a037 YI SYLLABLE BYR
-a038 YI SYLLABLE PIT
-a039 YI SYLLABLE PIX
-a03a YI SYLLABLE PI
-a03b YI SYLLABLE PIP
-a03c YI SYLLABLE PIEX
-a03d YI SYLLABLE PIE
-a03e YI SYLLABLE PIEP
-a03f YI SYLLABLE PAT
-a040 YI SYLLABLE PAX
-a041 YI SYLLABLE PA
-a042 YI SYLLABLE PAP
-a043 YI SYLLABLE PUOX
-a044 YI SYLLABLE PUO
-a045 YI SYLLABLE PUOP
-a046 YI SYLLABLE POT
-a047 YI SYLLABLE POX
-a048 YI SYLLABLE PO
-a049 YI SYLLABLE POP
-a04a YI SYLLABLE PUT
-a04b YI SYLLABLE PUX
-a04c YI SYLLABLE PU
-a04d YI SYLLABLE PUP
-a04e YI SYLLABLE PURX
-a04f YI SYLLABLE PUR
-a050 YI SYLLABLE PYT
-a051 YI SYLLABLE PYX
-a052 YI SYLLABLE PY
-a053 YI SYLLABLE PYP
-a054 YI SYLLABLE PYRX
-a055 YI SYLLABLE PYR
-a056 YI SYLLABLE BBIT
-a057 YI SYLLABLE BBIX
-a058 YI SYLLABLE BBI
-a059 YI SYLLABLE BBIP
-a05a YI SYLLABLE BBIET
-a05b YI SYLLABLE BBIEX
-a05c YI SYLLABLE BBIE
-a05d YI SYLLABLE BBIEP
-a05e YI SYLLABLE BBAT
-a05f YI SYLLABLE BBAX
-a060 YI SYLLABLE BBA
-a061 YI SYLLABLE BBAP
-a062 YI SYLLABLE BBUOX
-a063 YI SYLLABLE BBUO
-a064 YI SYLLABLE BBUOP
-a065 YI SYLLABLE BBOT
-a066 YI SYLLABLE BBOX
-a067 YI SYLLABLE BBO
-a068 YI SYLLABLE BBOP
-a069 YI SYLLABLE BBEX
-a06a YI SYLLABLE BBE
-a06b YI SYLLABLE BBEP
-a06c YI SYLLABLE BBUT
-a06d YI SYLLABLE BBUX
-a06e YI SYLLABLE BBU
-a06f YI SYLLABLE BBUP
-a070 YI SYLLABLE BBURX
-a071 YI SYLLABLE BBUR
-a072 YI SYLLABLE BBYT
-a073 YI SYLLABLE BBYX
-a074 YI SYLLABLE BBY
-a075 YI SYLLABLE BBYP
-a076 YI SYLLABLE NBIT
-a077 YI SYLLABLE NBIX
-a078 YI SYLLABLE NBI
-a079 YI SYLLABLE NBIP
-a07a YI SYLLABLE NBIEX
-a07b YI SYLLABLE NBIE
-a07c YI SYLLABLE NBIEP
-a07d YI SYLLABLE NBAT
-a07e YI SYLLABLE NBAX
-a07f YI SYLLABLE NBA
-a080 YI SYLLABLE NBAP
-a081 YI SYLLABLE NBOT
-a082 YI SYLLABLE NBOX
-a083 YI SYLLABLE NBO
-a084 YI SYLLABLE NBOP
-a085 YI SYLLABLE NBUT
-a086 YI SYLLABLE NBUX
-a087 YI SYLLABLE NBU
-a088 YI SYLLABLE NBUP
-a089 YI SYLLABLE NBURX
-a08a YI SYLLABLE NBUR
-a08b YI SYLLABLE NBYT
-a08c YI SYLLABLE NBYX
-a08d YI SYLLABLE NBY
-a08e YI SYLLABLE NBYP
-a08f YI SYLLABLE NBYRX
-a090 YI SYLLABLE NBYR
-a091 YI SYLLABLE HMIT
-a092 YI SYLLABLE HMIX
-a093 YI SYLLABLE HMI
-a094 YI SYLLABLE HMIP
-a095 YI SYLLABLE HMIEX
-a096 YI SYLLABLE HMIE
-a097 YI SYLLABLE HMIEP
-a098 YI SYLLABLE HMAT
-a099 YI SYLLABLE HMAX
-a09a YI SYLLABLE HMA
-a09b YI SYLLABLE HMAP
-a09c YI SYLLABLE HMUOX
-a09d YI SYLLABLE HMUO
-a09e YI SYLLABLE HMUOP
-a09f YI SYLLABLE HMOT
-a0a0 YI SYLLABLE HMOX
-a0a1 YI SYLLABLE HMO
-a0a2 YI SYLLABLE HMOP
-a0a3 YI SYLLABLE HMUT
-a0a4 YI SYLLABLE HMUX
-a0a5 YI SYLLABLE HMU
-a0a6 YI SYLLABLE HMUP
-a0a7 YI SYLLABLE HMURX
-a0a8 YI SYLLABLE HMUR
-a0a9 YI SYLLABLE HMYX
-a0aa YI SYLLABLE HMY
-a0ab YI SYLLABLE HMYP
-a0ac YI SYLLABLE HMYRX
-a0ad YI SYLLABLE HMYR
-a0ae YI SYLLABLE MIT
-a0af YI SYLLABLE MIX
-a0b0 YI SYLLABLE MI
-a0b1 YI SYLLABLE MIP
-a0b2 YI SYLLABLE MIEX
-a0b3 YI SYLLABLE MIE
-a0b4 YI SYLLABLE MIEP
-a0b5 YI SYLLABLE MAT
-a0b6 YI SYLLABLE MAX
-a0b7 YI SYLLABLE MA
-a0b8 YI SYLLABLE MAP
-a0b9 YI SYLLABLE MUOT
-a0ba YI SYLLABLE MUOX
-a0bb YI SYLLABLE MUO
-a0bc YI SYLLABLE MUOP
-a0bd YI SYLLABLE MOT
-a0be YI SYLLABLE MOX
-a0bf YI SYLLABLE MO
-a0c0 YI SYLLABLE MOP
-a0c1 YI SYLLABLE MEX
-a0c2 YI SYLLABLE ME
-a0c3 YI SYLLABLE MUT
-a0c4 YI SYLLABLE MUX
-a0c5 YI SYLLABLE MU
-a0c6 YI SYLLABLE MUP
-a0c7 YI SYLLABLE MURX
-a0c8 YI SYLLABLE MUR
-a0c9 YI SYLLABLE MYT
-a0ca YI SYLLABLE MYX
-a0cb YI SYLLABLE MY
-a0cc YI SYLLABLE MYP
-a0cd YI SYLLABLE FIT
-a0ce YI SYLLABLE FIX
-a0cf YI SYLLABLE FI
-a0d0 YI SYLLABLE FIP
-a0d1 YI SYLLABLE FAT
-a0d2 YI SYLLABLE FAX
-a0d3 YI SYLLABLE FA
-a0d4 YI SYLLABLE FAP
-a0d5 YI SYLLABLE FOX
-a0d6 YI SYLLABLE FO
-a0d7 YI SYLLABLE FOP
-a0d8 YI SYLLABLE FUT
-a0d9 YI SYLLABLE FUX
-a0da YI SYLLABLE FU
-a0db YI SYLLABLE FUP
-a0dc YI SYLLABLE FURX
-a0dd YI SYLLABLE FUR
-a0de YI SYLLABLE FYT
-a0df YI SYLLABLE FYX
-a0e0 YI SYLLABLE FY
-a0e1 YI SYLLABLE FYP
-a0e2 YI SYLLABLE VIT
-a0e3 YI SYLLABLE VIX
-a0e4 YI SYLLABLE VI
-a0e5 YI SYLLABLE VIP
-a0e6 YI SYLLABLE VIET
-a0e7 YI SYLLABLE VIEX
-a0e8 YI SYLLABLE VIE
-a0e9 YI SYLLABLE VIEP
-a0ea YI SYLLABLE VAT
-a0eb YI SYLLABLE VAX
-a0ec YI SYLLABLE VA
-a0ed YI SYLLABLE VAP
-a0ee YI SYLLABLE VOT
-a0ef YI SYLLABLE VOX
-a0f0 YI SYLLABLE VO
-a0f1 YI SYLLABLE VOP
-a0f2 YI SYLLABLE VEX
-a0f3 YI SYLLABLE VEP
-a0f4 YI SYLLABLE VUT
-a0f5 YI SYLLABLE VUX
-a0f6 YI SYLLABLE VU
-a0f7 YI SYLLABLE VUP
-a0f8 YI SYLLABLE VURX
-a0f9 YI SYLLABLE VUR
-a0fa YI SYLLABLE VYT
-a0fb YI SYLLABLE VYX
-a0fc YI SYLLABLE VY
-a0fd YI SYLLABLE VYP
-a0fe YI SYLLABLE VYRX
-a0ff YI SYLLABLE VYR
-a100 YI SYLLABLE DIT
-a101 YI SYLLABLE DIX
-a102 YI SYLLABLE DI
-a103 YI SYLLABLE DIP
-a104 YI SYLLABLE DIEX
-a105 YI SYLLABLE DIE
-a106 YI SYLLABLE DIEP
-a107 YI SYLLABLE DAT
-a108 YI SYLLABLE DAX
-a109 YI SYLLABLE DA
-a10a YI SYLLABLE DAP
-a10b YI SYLLABLE DUOX
-a10c YI SYLLABLE DUO
-a10d YI SYLLABLE DOT
-a10e YI SYLLABLE DOX
-a10f YI SYLLABLE DO
-a110 YI SYLLABLE DOP
-a111 YI SYLLABLE DEX
-a112 YI SYLLABLE DE
-a113 YI SYLLABLE DEP
-a114 YI SYLLABLE DUT
-a115 YI SYLLABLE DUX
-a116 YI SYLLABLE DU
-a117 YI SYLLABLE DUP
-a118 YI SYLLABLE DURX
-a119 YI SYLLABLE DUR
-a11a YI SYLLABLE TIT
-a11b YI SYLLABLE TIX
-a11c YI SYLLABLE TI
-a11d YI SYLLABLE TIP
-a11e YI SYLLABLE TIEX
-a11f YI SYLLABLE TIE
-a120 YI SYLLABLE TIEP
-a121 YI SYLLABLE TAT
-a122 YI SYLLABLE TAX
-a123 YI SYLLABLE TA
-a124 YI SYLLABLE TAP
-a125 YI SYLLABLE TUOT
-a126 YI SYLLABLE TUOX
-a127 YI SYLLABLE TUO
-a128 YI SYLLABLE TUOP
-a129 YI SYLLABLE TOT
-a12a YI SYLLABLE TOX
-a12b YI SYLLABLE TO
-a12c YI SYLLABLE TOP
-a12d YI SYLLABLE TEX
-a12e YI SYLLABLE TE
-a12f YI SYLLABLE TEP
-a130 YI SYLLABLE TUT
-a131 YI SYLLABLE TUX
-a132 YI SYLLABLE TU
-a133 YI SYLLABLE TUP
-a134 YI SYLLABLE TURX
-a135 YI SYLLABLE TUR
-a136 YI SYLLABLE DDIT
-a137 YI SYLLABLE DDIX
-a138 YI SYLLABLE DDI
-a139 YI SYLLABLE DDIP
-a13a YI SYLLABLE DDIEX
-a13b YI SYLLABLE DDIE
-a13c YI SYLLABLE DDIEP
-a13d YI SYLLABLE DDAT
-a13e YI SYLLABLE DDAX
-a13f YI SYLLABLE DDA
-a140 YI SYLLABLE DDAP
-a141 YI SYLLABLE DDUOX
-a142 YI SYLLABLE DDUO
-a143 YI SYLLABLE DDUOP
-a144 YI SYLLABLE DDOT
-a145 YI SYLLABLE DDOX
-a146 YI SYLLABLE DDO
-a147 YI SYLLABLE DDOP
-a148 YI SYLLABLE DDEX
-a149 YI SYLLABLE DDE
-a14a YI SYLLABLE DDEP
-a14b YI SYLLABLE DDUT
-a14c YI SYLLABLE DDUX
-a14d YI SYLLABLE DDU
-a14e YI SYLLABLE DDUP
-a14f YI SYLLABLE DDURX
-a150 YI SYLLABLE DDUR
-a151 YI SYLLABLE NDIT
-a152 YI SYLLABLE NDIX
-a153 YI SYLLABLE NDI
-a154 YI SYLLABLE NDIP
-a155 YI SYLLABLE NDIEX
-a156 YI SYLLABLE NDIE
-a157 YI SYLLABLE NDAT
-a158 YI SYLLABLE NDAX
-a159 YI SYLLABLE NDA
-a15a YI SYLLABLE NDAP
-a15b YI SYLLABLE NDOT
-a15c YI SYLLABLE NDOX
-a15d YI SYLLABLE NDO
-a15e YI SYLLABLE NDOP
-a15f YI SYLLABLE NDEX
-a160 YI SYLLABLE NDE
-a161 YI SYLLABLE NDEP
-a162 YI SYLLABLE NDUT
-a163 YI SYLLABLE NDUX
-a164 YI SYLLABLE NDU
-a165 YI SYLLABLE NDUP
-a166 YI SYLLABLE NDURX
-a167 YI SYLLABLE NDUR
-a168 YI SYLLABLE HNIT
-a169 YI SYLLABLE HNIX
-a16a YI SYLLABLE HNI
-a16b YI SYLLABLE HNIP
-a16c YI SYLLABLE HNIET
-a16d YI SYLLABLE HNIEX
-a16e YI SYLLABLE HNIE
-a16f YI SYLLABLE HNIEP
-a170 YI SYLLABLE HNAT
-a171 YI SYLLABLE HNAX
-a172 YI SYLLABLE HNA
-a173 YI SYLLABLE HNAP
-a174 YI SYLLABLE HNUOX
-a175 YI SYLLABLE HNUO
-a176 YI SYLLABLE HNOT
-a177 YI SYLLABLE HNOX
-a178 YI SYLLABLE HNOP
-a179 YI SYLLABLE HNEX
-a17a YI SYLLABLE HNE
-a17b YI SYLLABLE HNEP
-a17c YI SYLLABLE HNUT
-a17d YI SYLLABLE NIT
-a17e YI SYLLABLE NIX
-a17f YI SYLLABLE NI
-a180 YI SYLLABLE NIP
-a181 YI SYLLABLE NIEX
-a182 YI SYLLABLE NIE
-a183 YI SYLLABLE NIEP
-a184 YI SYLLABLE NAX
-a185 YI SYLLABLE NA
-a186 YI SYLLABLE NAP
-a187 YI SYLLABLE NUOX
-a188 YI SYLLABLE NUO
-a189 YI SYLLABLE NUOP
-a18a YI SYLLABLE NOT
-a18b YI SYLLABLE NOX
-a18c YI SYLLABLE NO
-a18d YI SYLLABLE NOP
-a18e YI SYLLABLE NEX
-a18f YI SYLLABLE NE
-a190 YI SYLLABLE NEP
-a191 YI SYLLABLE NUT
-a192 YI SYLLABLE NUX
-a193 YI SYLLABLE NU
-a194 YI SYLLABLE NUP
-a195 YI SYLLABLE NURX
-a196 YI SYLLABLE NUR
-a197 YI SYLLABLE HLIT
-a198 YI SYLLABLE HLIX
-a199 YI SYLLABLE HLI
-a19a YI SYLLABLE HLIP
-a19b YI SYLLABLE HLIEX
-a19c YI SYLLABLE HLIE
-a19d YI SYLLABLE HLIEP
-a19e YI SYLLABLE HLAT
-a19f YI SYLLABLE HLAX
-a1a0 YI SYLLABLE HLA
-a1a1 YI SYLLABLE HLAP
-a1a2 YI SYLLABLE HLUOX
-a1a3 YI SYLLABLE HLUO
-a1a4 YI SYLLABLE HLUOP
-a1a5 YI SYLLABLE HLOX
-a1a6 YI SYLLABLE HLO
-a1a7 YI SYLLABLE HLOP
-a1a8 YI SYLLABLE HLEX
-a1a9 YI SYLLABLE HLE
-a1aa YI SYLLABLE HLEP
-a1ab YI SYLLABLE HLUT
-a1ac YI SYLLABLE HLUX
-a1ad YI SYLLABLE HLU
-a1ae YI SYLLABLE HLUP
-a1af YI SYLLABLE HLURX
-a1b0 YI SYLLABLE HLUR
-a1b1 YI SYLLABLE HLYT
-a1b2 YI SYLLABLE HLYX
-a1b3 YI SYLLABLE HLY
-a1b4 YI SYLLABLE HLYP
-a1b5 YI SYLLABLE HLYRX
-a1b6 YI SYLLABLE HLYR
-a1b7 YI SYLLABLE LIT
-a1b8 YI SYLLABLE LIX
-a1b9 YI SYLLABLE LI
-a1ba YI SYLLABLE LIP
-a1bb YI SYLLABLE LIET
-a1bc YI SYLLABLE LIEX
-a1bd YI SYLLABLE LIE
-a1be YI SYLLABLE LIEP
-a1bf YI SYLLABLE LAT
-a1c0 YI SYLLABLE LAX
-a1c1 YI SYLLABLE LA
-a1c2 YI SYLLABLE LAP
-a1c3 YI SYLLABLE LUOT
-a1c4 YI SYLLABLE LUOX
-a1c5 YI SYLLABLE LUO
-a1c6 YI SYLLABLE LUOP
-a1c7 YI SYLLABLE LOT
-a1c8 YI SYLLABLE LOX
-a1c9 YI SYLLABLE LO
-a1ca YI SYLLABLE LOP
-a1cb YI SYLLABLE LEX
-a1cc YI SYLLABLE LE
-a1cd YI SYLLABLE LEP
-a1ce YI SYLLABLE LUT
-a1cf YI SYLLABLE LUX
-a1d0 YI SYLLABLE LU
-a1d1 YI SYLLABLE LUP
-a1d2 YI SYLLABLE LURX
-a1d3 YI SYLLABLE LUR
-a1d4 YI SYLLABLE LYT
-a1d5 YI SYLLABLE LYX
-a1d6 YI SYLLABLE LY
-a1d7 YI SYLLABLE LYP
-a1d8 YI SYLLABLE LYRX
-a1d9 YI SYLLABLE LYR
-a1da YI SYLLABLE GIT
-a1db YI SYLLABLE GIX
-a1dc YI SYLLABLE GI
-a1dd YI SYLLABLE GIP
-a1de YI SYLLABLE GIET
-a1df YI SYLLABLE GIEX
-a1e0 YI SYLLABLE GIE
-a1e1 YI SYLLABLE GIEP
-a1e2 YI SYLLABLE GAT
-a1e3 YI SYLLABLE GAX
-a1e4 YI SYLLABLE GA
-a1e5 YI SYLLABLE GAP
-a1e6 YI SYLLABLE GUOT
-a1e7 YI SYLLABLE GUOX
-a1e8 YI SYLLABLE GUO
-a1e9 YI SYLLABLE GUOP
-a1ea YI SYLLABLE GOT
-a1eb YI SYLLABLE GOX
-a1ec YI SYLLABLE GO
-a1ed YI SYLLABLE GOP
-a1ee YI SYLLABLE GET
-a1ef YI SYLLABLE GEX
-a1f0 YI SYLLABLE GE
-a1f1 YI SYLLABLE GEP
-a1f2 YI SYLLABLE GUT
-a1f3 YI SYLLABLE GUX
-a1f4 YI SYLLABLE GU
-a1f5 YI SYLLABLE GUP
-a1f6 YI SYLLABLE GURX
-a1f7 YI SYLLABLE GUR
-a1f8 YI SYLLABLE KIT
-a1f9 YI SYLLABLE KIX
-a1fa YI SYLLABLE KI
-a1fb YI SYLLABLE KIP
-a1fc YI SYLLABLE KIEX
-a1fd YI SYLLABLE KIE
-a1fe YI SYLLABLE KIEP
-a1ff YI SYLLABLE KAT
-a200 YI SYLLABLE KAX
-a201 YI SYLLABLE KA
-a202 YI SYLLABLE KAP
-a203 YI SYLLABLE KUOX
-a204 YI SYLLABLE KUO
-a205 YI SYLLABLE KUOP
-a206 YI SYLLABLE KOT
-a207 YI SYLLABLE KOX
-a208 YI SYLLABLE KO
-a209 YI SYLLABLE KOP
-a20a YI SYLLABLE KET
-a20b YI SYLLABLE KEX
-a20c YI SYLLABLE KE
-a20d YI SYLLABLE KEP
-a20e YI SYLLABLE KUT
-a20f YI SYLLABLE KUX
-a210 YI SYLLABLE KU
-a211 YI SYLLABLE KUP
-a212 YI SYLLABLE KURX
-a213 YI SYLLABLE KUR
-a214 YI SYLLABLE GGIT
-a215 YI SYLLABLE GGIX
-a216 YI SYLLABLE GGI
-a217 YI SYLLABLE GGIEX
-a218 YI SYLLABLE GGIE
-a219 YI SYLLABLE GGIEP
-a21a YI SYLLABLE GGAT
-a21b YI SYLLABLE GGAX
-a21c YI SYLLABLE GGA
-a21d YI SYLLABLE GGAP
-a21e YI SYLLABLE GGUOT
-a21f YI SYLLABLE GGUOX
-a220 YI SYLLABLE GGUO
-a221 YI SYLLABLE GGUOP
-a222 YI SYLLABLE GGOT
-a223 YI SYLLABLE GGOX
-a224 YI SYLLABLE GGO
-a225 YI SYLLABLE GGOP
-a226 YI SYLLABLE GGET
-a227 YI SYLLABLE GGEX
-a228 YI SYLLABLE GGE
-a229 YI SYLLABLE GGEP
-a22a YI SYLLABLE GGUT
-a22b YI SYLLABLE GGUX
-a22c YI SYLLABLE GGU
-a22d YI SYLLABLE GGUP
-a22e YI SYLLABLE GGURX
-a22f YI SYLLABLE GGUR
-a230 YI SYLLABLE MGIEX
-a231 YI SYLLABLE MGIE
-a232 YI SYLLABLE MGAT
-a233 YI SYLLABLE MGAX
-a234 YI SYLLABLE MGA
-a235 YI SYLLABLE MGAP
-a236 YI SYLLABLE MGUOX
-a237 YI SYLLABLE MGUO
-a238 YI SYLLABLE MGUOP
-a239 YI SYLLABLE MGOT
-a23a YI SYLLABLE MGOX
-a23b YI SYLLABLE MGO
-a23c YI SYLLABLE MGOP
-a23d YI SYLLABLE MGEX
-a23e YI SYLLABLE MGE
-a23f YI SYLLABLE MGEP
-a240 YI SYLLABLE MGUT
-a241 YI SYLLABLE MGUX
-a242 YI SYLLABLE MGU
-a243 YI SYLLABLE MGUP
-a244 YI SYLLABLE MGURX
-a245 YI SYLLABLE MGUR
-a246 YI SYLLABLE HXIT
-a247 YI SYLLABLE HXIX
-a248 YI SYLLABLE HXI
-a249 YI SYLLABLE HXIP
-a24a YI SYLLABLE HXIET
-a24b YI SYLLABLE HXIEX
-a24c YI SYLLABLE HXIE
-a24d YI SYLLABLE HXIEP
-a24e YI SYLLABLE HXAT
-a24f YI SYLLABLE HXAX
-a250 YI SYLLABLE HXA
-a251 YI SYLLABLE HXAP
-a252 YI SYLLABLE HXUOT
-a253 YI SYLLABLE HXUOX
-a254 YI SYLLABLE HXUO
-a255 YI SYLLABLE HXUOP
-a256 YI SYLLABLE HXOT
-a257 YI SYLLABLE HXOX
-a258 YI SYLLABLE HXO
-a259 YI SYLLABLE HXOP
-a25a YI SYLLABLE HXEX
-a25b YI SYLLABLE HXE
-a25c YI SYLLABLE HXEP
-a25d YI SYLLABLE NGIEX
-a25e YI SYLLABLE NGIE
-a25f YI SYLLABLE NGIEP
-a260 YI SYLLABLE NGAT
-a261 YI SYLLABLE NGAX
-a262 YI SYLLABLE NGA
-a263 YI SYLLABLE NGAP
-a264 YI SYLLABLE NGUOT
-a265 YI SYLLABLE NGUOX
-a266 YI SYLLABLE NGUO
-a267 YI SYLLABLE NGOT
-a268 YI SYLLABLE NGOX
-a269 YI SYLLABLE NGO
-a26a YI SYLLABLE NGOP
-a26b YI SYLLABLE NGEX
-a26c YI SYLLABLE NGE
-a26d YI SYLLABLE NGEP
-a26e YI SYLLABLE HIT
-a26f YI SYLLABLE HIEX
-a270 YI SYLLABLE HIE
-a271 YI SYLLABLE HAT
-a272 YI SYLLABLE HAX
-a273 YI SYLLABLE HA
-a274 YI SYLLABLE HAP
-a275 YI SYLLABLE HUOT
-a276 YI SYLLABLE HUOX
-a277 YI SYLLABLE HUO
-a278 YI SYLLABLE HUOP
-a279 YI SYLLABLE HOT
-a27a YI SYLLABLE HOX
-a27b YI SYLLABLE HO
-a27c YI SYLLABLE HOP
-a27d YI SYLLABLE HEX
-a27e YI SYLLABLE HE
-a27f YI SYLLABLE HEP
-a280 YI SYLLABLE WAT
-a281 YI SYLLABLE WAX
-a282 YI SYLLABLE WA
-a283 YI SYLLABLE WAP
-a284 YI SYLLABLE WUOX
-a285 YI SYLLABLE WUO
-a286 YI SYLLABLE WUOP
-a287 YI SYLLABLE WOX
-a288 YI SYLLABLE WO
-a289 YI SYLLABLE WOP
-a28a YI SYLLABLE WEX
-a28b YI SYLLABLE WE
-a28c YI SYLLABLE WEP
-a28d YI SYLLABLE ZIT
-a28e YI SYLLABLE ZIX
-a28f YI SYLLABLE ZI
-a290 YI SYLLABLE ZIP
-a291 YI SYLLABLE ZIEX
-a292 YI SYLLABLE ZIE
-a293 YI SYLLABLE ZIEP
-a294 YI SYLLABLE ZAT
-a295 YI SYLLABLE ZAX
-a296 YI SYLLABLE ZA
-a297 YI SYLLABLE ZAP
-a298 YI SYLLABLE ZUOX
-a299 YI SYLLABLE ZUO
-a29a YI SYLLABLE ZUOP
-a29b YI SYLLABLE ZOT
-a29c YI SYLLABLE ZOX
-a29d YI SYLLABLE ZO
-a29e YI SYLLABLE ZOP
-a29f YI SYLLABLE ZEX
-a2a0 YI SYLLABLE ZE
-a2a1 YI SYLLABLE ZEP
-a2a2 YI SYLLABLE ZUT
-a2a3 YI SYLLABLE ZUX
-a2a4 YI SYLLABLE ZU
-a2a5 YI SYLLABLE ZUP
-a2a6 YI SYLLABLE ZURX
-a2a7 YI SYLLABLE ZUR
-a2a8 YI SYLLABLE ZYT
-a2a9 YI SYLLABLE ZYX
-a2aa YI SYLLABLE ZY
-a2ab YI SYLLABLE ZYP
-a2ac YI SYLLABLE ZYRX
-a2ad YI SYLLABLE ZYR
-a2ae YI SYLLABLE CIT
-a2af YI SYLLABLE CIX
-a2b0 YI SYLLABLE CI
-a2b1 YI SYLLABLE CIP
-a2b2 YI SYLLABLE CIET
-a2b3 YI SYLLABLE CIEX
-a2b4 YI SYLLABLE CIE
-a2b5 YI SYLLABLE CIEP
-a2b6 YI SYLLABLE CAT
-a2b7 YI SYLLABLE CAX
-a2b8 YI SYLLABLE CA
-a2b9 YI SYLLABLE CAP
-a2ba YI SYLLABLE CUOX
-a2bb YI SYLLABLE CUO
-a2bc YI SYLLABLE CUOP
-a2bd YI SYLLABLE COT
-a2be YI SYLLABLE COX
-a2bf YI SYLLABLE CO
-a2c0 YI SYLLABLE COP
-a2c1 YI SYLLABLE CEX
-a2c2 YI SYLLABLE CE
-a2c3 YI SYLLABLE CEP
-a2c4 YI SYLLABLE CUT
-a2c5 YI SYLLABLE CUX
-a2c6 YI SYLLABLE CU
-a2c7 YI SYLLABLE CUP
-a2c8 YI SYLLABLE CURX
-a2c9 YI SYLLABLE CUR
-a2ca YI SYLLABLE CYT
-a2cb YI SYLLABLE CYX
-a2cc YI SYLLABLE CY
-a2cd YI SYLLABLE CYP
-a2ce YI SYLLABLE CYRX
-a2cf YI SYLLABLE CYR
-a2d0 YI SYLLABLE ZZIT
-a2d1 YI SYLLABLE ZZIX
-a2d2 YI SYLLABLE ZZI
-a2d3 YI SYLLABLE ZZIP
-a2d4 YI SYLLABLE ZZIET
-a2d5 YI SYLLABLE ZZIEX
-a2d6 YI SYLLABLE ZZIE
-a2d7 YI SYLLABLE ZZIEP
-a2d8 YI SYLLABLE ZZAT
-a2d9 YI SYLLABLE ZZAX
-a2da YI SYLLABLE ZZA
-a2db YI SYLLABLE ZZAP
-a2dc YI SYLLABLE ZZOX
-a2dd YI SYLLABLE ZZO
-a2de YI SYLLABLE ZZOP
-a2df YI SYLLABLE ZZEX
-a2e0 YI SYLLABLE ZZE
-a2e1 YI SYLLABLE ZZEP
-a2e2 YI SYLLABLE ZZUX
-a2e3 YI SYLLABLE ZZU
-a2e4 YI SYLLABLE ZZUP
-a2e5 YI SYLLABLE ZZURX
-a2e6 YI SYLLABLE ZZUR
-a2e7 YI SYLLABLE ZZYT
-a2e8 YI SYLLABLE ZZYX
-a2e9 YI SYLLABLE ZZY
-a2ea YI SYLLABLE ZZYP
-a2eb YI SYLLABLE ZZYRX
-a2ec YI SYLLABLE ZZYR
-a2ed YI SYLLABLE NZIT
-a2ee YI SYLLABLE NZIX
-a2ef YI SYLLABLE NZI
-a2f0 YI SYLLABLE NZIP
-a2f1 YI SYLLABLE NZIEX
-a2f2 YI SYLLABLE NZIE
-a2f3 YI SYLLABLE NZIEP
-a2f4 YI SYLLABLE NZAT
-a2f5 YI SYLLABLE NZAX
-a2f6 YI SYLLABLE NZA
-a2f7 YI SYLLABLE NZAP
-a2f8 YI SYLLABLE NZUOX
-a2f9 YI SYLLABLE NZUO
-a2fa YI SYLLABLE NZOX
-a2fb YI SYLLABLE NZOP
-a2fc YI SYLLABLE NZEX
-a2fd YI SYLLABLE NZE
-a2fe YI SYLLABLE NZUX
-a2ff YI SYLLABLE NZU
-a300 YI SYLLABLE NZUP
-a301 YI SYLLABLE NZURX
-a302 YI SYLLABLE NZUR
-a303 YI SYLLABLE NZYT
-a304 YI SYLLABLE NZYX
-a305 YI SYLLABLE NZY
-a306 YI SYLLABLE NZYP
-a307 YI SYLLABLE NZYRX
-a308 YI SYLLABLE NZYR
-a309 YI SYLLABLE SIT
-a30a YI SYLLABLE SIX
-a30b YI SYLLABLE SI
-a30c YI SYLLABLE SIP
-a30d YI SYLLABLE SIEX
-a30e YI SYLLABLE SIE
-a30f YI SYLLABLE SIEP
-a310 YI SYLLABLE SAT
-a311 YI SYLLABLE SAX
-a312 YI SYLLABLE SA
-a313 YI SYLLABLE SAP
-a314 YI SYLLABLE SUOX
-a315 YI SYLLABLE SUO
-a316 YI SYLLABLE SUOP
-a317 YI SYLLABLE SOT
-a318 YI SYLLABLE SOX
-a319 YI SYLLABLE SO
-a31a YI SYLLABLE SOP
-a31b YI SYLLABLE SEX
-a31c YI SYLLABLE SE
-a31d YI SYLLABLE SEP
-a31e YI SYLLABLE SUT
-a31f YI SYLLABLE SUX
-a320 YI SYLLABLE SU
-a321 YI SYLLABLE SUP
-a322 YI SYLLABLE SURX
-a323 YI SYLLABLE SUR
-a324 YI SYLLABLE SYT
-a325 YI SYLLABLE SYX
-a326 YI SYLLABLE SY
-a327 YI SYLLABLE SYP
-a328 YI SYLLABLE SYRX
-a329 YI SYLLABLE SYR
-a32a YI SYLLABLE SSIT
-a32b YI SYLLABLE SSIX
-a32c YI SYLLABLE SSI
-a32d YI SYLLABLE SSIP
-a32e YI SYLLABLE SSIEX
-a32f YI SYLLABLE SSIE
-a330 YI SYLLABLE SSIEP
-a331 YI SYLLABLE SSAT
-a332 YI SYLLABLE SSAX
-a333 YI SYLLABLE SSA
-a334 YI SYLLABLE SSAP
-a335 YI SYLLABLE SSOT
-a336 YI SYLLABLE SSOX
-a337 YI SYLLABLE SSO
-a338 YI SYLLABLE SSOP
-a339 YI SYLLABLE SSEX
-a33a YI SYLLABLE SSE
-a33b YI SYLLABLE SSEP
-a33c YI SYLLABLE SSUT
-a33d YI SYLLABLE SSUX
-a33e YI SYLLABLE SSU
-a33f YI SYLLABLE SSUP
-a340 YI SYLLABLE SSYT
-a341 YI SYLLABLE SSYX
-a342 YI SYLLABLE SSY
-a343 YI SYLLABLE SSYP
-a344 YI SYLLABLE SSYRX
-a345 YI SYLLABLE SSYR
-a346 YI SYLLABLE ZHAT
-a347 YI SYLLABLE ZHAX
-a348 YI SYLLABLE ZHA
-a349 YI SYLLABLE ZHAP
-a34a YI SYLLABLE ZHUOX
-a34b YI SYLLABLE ZHUO
-a34c YI SYLLABLE ZHUOP
-a34d YI SYLLABLE ZHOT
-a34e YI SYLLABLE ZHOX
-a34f YI SYLLABLE ZHO
-a350 YI SYLLABLE ZHOP
-a351 YI SYLLABLE ZHET
-a352 YI SYLLABLE ZHEX
-a353 YI SYLLABLE ZHE
-a354 YI SYLLABLE ZHEP
-a355 YI SYLLABLE ZHUT
-a356 YI SYLLABLE ZHUX
-a357 YI SYLLABLE ZHU
-a358 YI SYLLABLE ZHUP
-a359 YI SYLLABLE ZHURX
-a35a YI SYLLABLE ZHUR
-a35b YI SYLLABLE ZHYT
-a35c YI SYLLABLE ZHYX
-a35d YI SYLLABLE ZHY
-a35e YI SYLLABLE ZHYP
-a35f YI SYLLABLE ZHYRX
-a360 YI SYLLABLE ZHYR
-a361 YI SYLLABLE CHAT
-a362 YI SYLLABLE CHAX
-a363 YI SYLLABLE CHA
-a364 YI SYLLABLE CHAP
-a365 YI SYLLABLE CHUOT
-a366 YI SYLLABLE CHUOX
-a367 YI SYLLABLE CHUO
-a368 YI SYLLABLE CHUOP
-a369 YI SYLLABLE CHOT
-a36a YI SYLLABLE CHOX
-a36b YI SYLLABLE CHO
-a36c YI SYLLABLE CHOP
-a36d YI SYLLABLE CHET
-a36e YI SYLLABLE CHEX
-a36f YI SYLLABLE CHE
-a370 YI SYLLABLE CHEP
-a371 YI SYLLABLE CHUX
-a372 YI SYLLABLE CHU
-a373 YI SYLLABLE CHUP
-a374 YI SYLLABLE CHURX
-a375 YI SYLLABLE CHUR
-a376 YI SYLLABLE CHYT
-a377 YI SYLLABLE CHYX
-a378 YI SYLLABLE CHY
-a379 YI SYLLABLE CHYP
-a37a YI SYLLABLE CHYRX
-a37b YI SYLLABLE CHYR
-a37c YI SYLLABLE RRAX
-a37d YI SYLLABLE RRA
-a37e YI SYLLABLE RRUOX
-a37f YI SYLLABLE RRUO
-a380 YI SYLLABLE RROT
-a381 YI SYLLABLE RROX
-a382 YI SYLLABLE RRO
-a383 YI SYLLABLE RROP
-a384 YI SYLLABLE RRET
-a385 YI SYLLABLE RREX
-a386 YI SYLLABLE RRE
-a387 YI SYLLABLE RREP
-a388 YI SYLLABLE RRUT
-a389 YI SYLLABLE RRUX
-a38a YI SYLLABLE RRU
-a38b YI SYLLABLE RRUP
-a38c YI SYLLABLE RRURX
-a38d YI SYLLABLE RRUR
-a38e YI SYLLABLE RRYT
-a38f YI SYLLABLE RRYX
-a390 YI SYLLABLE RRY
-a391 YI SYLLABLE RRYP
-a392 YI SYLLABLE RRYRX
-a393 YI SYLLABLE RRYR
-a394 YI SYLLABLE NRAT
-a395 YI SYLLABLE NRAX
-a396 YI SYLLABLE NRA
-a397 YI SYLLABLE NRAP
-a398 YI SYLLABLE NROX
-a399 YI SYLLABLE NRO
-a39a YI SYLLABLE NROP
-a39b YI SYLLABLE NRET
-a39c YI SYLLABLE NREX
-a39d YI SYLLABLE NRE
-a39e YI SYLLABLE NREP
-a39f YI SYLLABLE NRUT
-a3a0 YI SYLLABLE NRUX
-a3a1 YI SYLLABLE NRU
-a3a2 YI SYLLABLE NRUP
-a3a3 YI SYLLABLE NRURX
-a3a4 YI SYLLABLE NRUR
-a3a5 YI SYLLABLE NRYT
-a3a6 YI SYLLABLE NRYX
-a3a7 YI SYLLABLE NRY
-a3a8 YI SYLLABLE NRYP
-a3a9 YI SYLLABLE NRYRX
-a3aa YI SYLLABLE NRYR
-a3ab YI SYLLABLE SHAT
-a3ac YI SYLLABLE SHAX
-a3ad YI SYLLABLE SHA
-a3ae YI SYLLABLE SHAP
-a3af YI SYLLABLE SHUOX
-a3b0 YI SYLLABLE SHUO
-a3b1 YI SYLLABLE SHUOP
-a3b2 YI SYLLABLE SHOT
-a3b3 YI SYLLABLE SHOX
-a3b4 YI SYLLABLE SHO
-a3b5 YI SYLLABLE SHOP
-a3b6 YI SYLLABLE SHET
-a3b7 YI SYLLABLE SHEX
-a3b8 YI SYLLABLE SHE
-a3b9 YI SYLLABLE SHEP
-a3ba YI SYLLABLE SHUT
-a3bb YI SYLLABLE SHUX
-a3bc YI SYLLABLE SHU
-a3bd YI SYLLABLE SHUP
-a3be YI SYLLABLE SHURX
-a3bf YI SYLLABLE SHUR
-a3c0 YI SYLLABLE SHYT
-a3c1 YI SYLLABLE SHYX
-a3c2 YI SYLLABLE SHY
-a3c3 YI SYLLABLE SHYP
-a3c4 YI SYLLABLE SHYRX
-a3c5 YI SYLLABLE SHYR
-a3c6 YI SYLLABLE RAT
-a3c7 YI SYLLABLE RAX
-a3c8 YI SYLLABLE RA
-a3c9 YI SYLLABLE RAP
-a3ca YI SYLLABLE RUOX
-a3cb YI SYLLABLE RUO
-a3cc YI SYLLABLE RUOP
-a3cd YI SYLLABLE ROT
-a3ce YI SYLLABLE ROX
-a3cf YI SYLLABLE RO
-a3d0 YI SYLLABLE ROP
-a3d1 YI SYLLABLE REX
-a3d2 YI SYLLABLE RE
-a3d3 YI SYLLABLE REP
-a3d4 YI SYLLABLE RUT
-a3d5 YI SYLLABLE RUX
-a3d6 YI SYLLABLE RU
-a3d7 YI SYLLABLE RUP
-a3d8 YI SYLLABLE RURX
-a3d9 YI SYLLABLE RUR
-a3da YI SYLLABLE RYT
-a3db YI SYLLABLE RYX
-a3dc YI SYLLABLE RY
-a3dd YI SYLLABLE RYP
-a3de YI SYLLABLE RYRX
-a3df YI SYLLABLE RYR
-a3e0 YI SYLLABLE JIT
-a3e1 YI SYLLABLE JIX
-a3e2 YI SYLLABLE JI
-a3e3 YI SYLLABLE JIP
-a3e4 YI SYLLABLE JIET
-a3e5 YI SYLLABLE JIEX
-a3e6 YI SYLLABLE JIE
-a3e7 YI SYLLABLE JIEP
-a3e8 YI SYLLABLE JUOT
-a3e9 YI SYLLABLE JUOX
-a3ea YI SYLLABLE JUO
-a3eb YI SYLLABLE JUOP
-a3ec YI SYLLABLE JOT
-a3ed YI SYLLABLE JOX
-a3ee YI SYLLABLE JO
-a3ef YI SYLLABLE JOP
-a3f0 YI SYLLABLE JUT
-a3f1 YI SYLLABLE JUX
-a3f2 YI SYLLABLE JU
-a3f3 YI SYLLABLE JUP
-a3f4 YI SYLLABLE JURX
-a3f5 YI SYLLABLE JUR
-a3f6 YI SYLLABLE JYT
-a3f7 YI SYLLABLE JYX
-a3f8 YI SYLLABLE JY
-a3f9 YI SYLLABLE JYP
-a3fa YI SYLLABLE JYRX
-a3fb YI SYLLABLE JYR
-a3fc YI SYLLABLE QIT
-a3fd YI SYLLABLE QIX
-a3fe YI SYLLABLE QI
-a3ff YI SYLLABLE QIP
-a400 YI SYLLABLE QIET
-a401 YI SYLLABLE QIEX
-a402 YI SYLLABLE QIE
-a403 YI SYLLABLE QIEP
-a404 YI SYLLABLE QUOT
-a405 YI SYLLABLE QUOX
-a406 YI SYLLABLE QUO
-a407 YI SYLLABLE QUOP
-a408 YI SYLLABLE QOT
-a409 YI SYLLABLE QOX
-a40a YI SYLLABLE QO
-a40b YI SYLLABLE QOP
-a40c YI SYLLABLE QUT
-a40d YI SYLLABLE QUX
-a40e YI SYLLABLE QU
-a40f YI SYLLABLE QUP
-a410 YI SYLLABLE QURX
-a411 YI SYLLABLE QUR
-a412 YI SYLLABLE QYT
-a413 YI SYLLABLE QYX
-a414 YI SYLLABLE QY
-a415 YI SYLLABLE QYP
-a416 YI SYLLABLE QYRX
-a417 YI SYLLABLE QYR
-a418 YI SYLLABLE JJIT
-a419 YI SYLLABLE JJIX
-a41a YI SYLLABLE JJI
-a41b YI SYLLABLE JJIP
-a41c YI SYLLABLE JJIET
-a41d YI SYLLABLE JJIEX
-a41e YI SYLLABLE JJIE
-a41f YI SYLLABLE JJIEP
-a420 YI SYLLABLE JJUOX
-a421 YI SYLLABLE JJUO
-a422 YI SYLLABLE JJUOP
-a423 YI SYLLABLE JJOT
-a424 YI SYLLABLE JJOX
-a425 YI SYLLABLE JJO
-a426 YI SYLLABLE JJOP
-a427 YI SYLLABLE JJUT
-a428 YI SYLLABLE JJUX
-a429 YI SYLLABLE JJU
-a42a YI SYLLABLE JJUP
-a42b YI SYLLABLE JJURX
-a42c YI SYLLABLE JJUR
-a42d YI SYLLABLE JJYT
-a42e YI SYLLABLE JJYX
-a42f YI SYLLABLE JJY
-a430 YI SYLLABLE JJYP
-a431 YI SYLLABLE NJIT
-a432 YI SYLLABLE NJIX
-a433 YI SYLLABLE NJI
-a434 YI SYLLABLE NJIP
-a435 YI SYLLABLE NJIET
-a436 YI SYLLABLE NJIEX
-a437 YI SYLLABLE NJIE
-a438 YI SYLLABLE NJIEP
-a439 YI SYLLABLE NJUOX
-a43a YI SYLLABLE NJUO
-a43b YI SYLLABLE NJOT
-a43c YI SYLLABLE NJOX
-a43d YI SYLLABLE NJO
-a43e YI SYLLABLE NJOP
-a43f YI SYLLABLE NJUX
-a440 YI SYLLABLE NJU
-a441 YI SYLLABLE NJUP
-a442 YI SYLLABLE NJURX
-a443 YI SYLLABLE NJUR
-a444 YI SYLLABLE NJYT
-a445 YI SYLLABLE NJYX
-a446 YI SYLLABLE NJY
-a447 YI SYLLABLE NJYP
-a448 YI SYLLABLE NJYRX
-a449 YI SYLLABLE NJYR
-a44a YI SYLLABLE NYIT
-a44b YI SYLLABLE NYIX
-a44c YI SYLLABLE NYI
-a44d YI SYLLABLE NYIP
-a44e YI SYLLABLE NYIET
-a44f YI SYLLABLE NYIEX
-a450 YI SYLLABLE NYIE
-a451 YI SYLLABLE NYIEP
-a452 YI SYLLABLE NYUOX
-a453 YI SYLLABLE NYUO
-a454 YI SYLLABLE NYUOP
-a455 YI SYLLABLE NYOT
-a456 YI SYLLABLE NYOX
-a457 YI SYLLABLE NYO
-a458 YI SYLLABLE NYOP
-a459 YI SYLLABLE NYUT
-a45a YI SYLLABLE NYUX
-a45b YI SYLLABLE NYU
-a45c YI SYLLABLE NYUP
-a45d YI SYLLABLE XIT
-a45e YI SYLLABLE XIX
-a45f YI SYLLABLE XI
-a460 YI SYLLABLE XIP
-a461 YI SYLLABLE XIET
-a462 YI SYLLABLE XIEX
-a463 YI SYLLABLE XIE
-a464 YI SYLLABLE XIEP
-a465 YI SYLLABLE XUOX
-a466 YI SYLLABLE XUO
-a467 YI SYLLABLE XOT
-a468 YI SYLLABLE XOX
-a469 YI SYLLABLE XO
-a46a YI SYLLABLE XOP
-a46b YI SYLLABLE XYT
-a46c YI SYLLABLE XYX
-a46d YI SYLLABLE XY
-a46e YI SYLLABLE XYP
-a46f YI SYLLABLE XYRX
-a470 YI SYLLABLE XYR
-a471 YI SYLLABLE YIT
-a472 YI SYLLABLE YIX
-a473 YI SYLLABLE YI
-a474 YI SYLLABLE YIP
-a475 YI SYLLABLE YIET
-a476 YI SYLLABLE YIEX
-a477 YI SYLLABLE YIE
-a478 YI SYLLABLE YIEP
-a479 YI SYLLABLE YUOT
-a47a YI SYLLABLE YUOX
-a47b YI SYLLABLE YUO
-a47c YI SYLLABLE YUOP
-a47d YI SYLLABLE YOT
-a47e YI SYLLABLE YOX
-a47f YI SYLLABLE YO
-a480 YI SYLLABLE YOP
-a481 YI SYLLABLE YUT
-a482 YI SYLLABLE YUX
-a483 YI SYLLABLE YU
-a484 YI SYLLABLE YUP
-a485 YI SYLLABLE YURX
-a486 YI SYLLABLE YUR
-a487 YI SYLLABLE YYT
-a488 YI SYLLABLE YYX
-a489 YI SYLLABLE YY
-a48a YI SYLLABLE YYP
-a48b YI SYLLABLE YYRX
-a48c YI SYLLABLE YYR
-a490 YI RADICAL QOT
-a491 YI RADICAL LI
-a492 YI RADICAL KIT
-a493 YI RADICAL NYIP
-a494 YI RADICAL CYP
-a495 YI RADICAL SSI
-a496 YI RADICAL GGOP
-a497 YI RADICAL GEP
-a498 YI RADICAL MI
-a499 YI RADICAL HXIT
-a49a YI RADICAL LYR
-a49b YI RADICAL BBUT
-a49c YI RADICAL MOP
-a49d YI RADICAL YO
-a49e YI RADICAL PUT
-a49f YI RADICAL HXUO
-a4a0 YI RADICAL TAT
-a4a1 YI RADICAL GA
-a4a4 YI RADICAL DDUR
-a4a5 YI RADICAL BUR
-a4a6 YI RADICAL GGUO
-a4a7 YI RADICAL NYOP
-a4a8 YI RADICAL TU
-a4a9 YI RADICAL OP
-a4aa YI RADICAL JJUT
-a4ab YI RADICAL ZOT
-a4ac YI RADICAL PYT
-a4ad YI RADICAL HMO
-a4ae YI RADICAL YIT
-a4af YI RADICAL VUR
-a4b0 YI RADICAL SHY
-a4b1 YI RADICAL VEP
-a4b2 YI RADICAL ZA
-a4b3 YI RADICAL JO
-a4b5 YI RADICAL JJY
-a4b6 YI RADICAL GOT
-a4b7 YI RADICAL JJIE
-a4b8 YI RADICAL WO
-a4b9 YI RADICAL DU
-a4ba YI RADICAL SHUR
-a4bb YI RADICAL LIE
-a4bc YI RADICAL CY
-a4bd YI RADICAL CUOP
-a4be YI RADICAL CIP
-a4bf YI RADICAL HXOP
-a4c0 YI RADICAL SHAT
-a4c2 YI RADICAL SHOP
-a4c3 YI RADICAL CHE
-a4c4 YI RADICAL ZZIET
-a4c6 YI RADICAL KE
-ac00 d7a3 <Hangul Syllable, First>
-d800 db7f <Non Private Use High Surrogate, First>
-db80 dbff <Private Use High Surrogate, First>
-dc00 dfff <Low Surrogate, First>
-e000 f8ff <Private Use, First>
-f900 CJK COMPATIBILITY IDEOGRAPH-F900
-f901 CJK COMPATIBILITY IDEOGRAPH-F901
-f902 CJK COMPATIBILITY IDEOGRAPH-F902
-f903 CJK COMPATIBILITY IDEOGRAPH-F903
-f904 CJK COMPATIBILITY IDEOGRAPH-F904
-f905 CJK COMPATIBILITY IDEOGRAPH-F905
-f906 CJK COMPATIBILITY IDEOGRAPH-F906
-f907 CJK COMPATIBILITY IDEOGRAPH-F907
-f908 CJK COMPATIBILITY IDEOGRAPH-F908
-f909 CJK COMPATIBILITY IDEOGRAPH-F909
-f90a CJK COMPATIBILITY IDEOGRAPH-F90A
-f90b CJK COMPATIBILITY IDEOGRAPH-F90B
-f90c CJK COMPATIBILITY IDEOGRAPH-F90C
-f90d CJK COMPATIBILITY IDEOGRAPH-F90D
-f90e CJK COMPATIBILITY IDEOGRAPH-F90E
-f90f CJK COMPATIBILITY IDEOGRAPH-F90F
-f910 CJK COMPATIBILITY IDEOGRAPH-F910
-f911 CJK COMPATIBILITY IDEOGRAPH-F911
-f912 CJK COMPATIBILITY IDEOGRAPH-F912
-f913 CJK COMPATIBILITY IDEOGRAPH-F913
-f914 CJK COMPATIBILITY IDEOGRAPH-F914
-f915 CJK COMPATIBILITY IDEOGRAPH-F915
-f916 CJK COMPATIBILITY IDEOGRAPH-F916
-f917 CJK COMPATIBILITY IDEOGRAPH-F917
-f918 CJK COMPATIBILITY IDEOGRAPH-F918
-f919 CJK COMPATIBILITY IDEOGRAPH-F919
-f91a CJK COMPATIBILITY IDEOGRAPH-F91A
-f91b CJK COMPATIBILITY IDEOGRAPH-F91B
-f91c CJK COMPATIBILITY IDEOGRAPH-F91C
-f91d CJK COMPATIBILITY IDEOGRAPH-F91D
-f91e CJK COMPATIBILITY IDEOGRAPH-F91E
-f91f CJK COMPATIBILITY IDEOGRAPH-F91F
-f920 CJK COMPATIBILITY IDEOGRAPH-F920
-f921 CJK COMPATIBILITY IDEOGRAPH-F921
-f922 CJK COMPATIBILITY IDEOGRAPH-F922
-f923 CJK COMPATIBILITY IDEOGRAPH-F923
-f924 CJK COMPATIBILITY IDEOGRAPH-F924
-f925 CJK COMPATIBILITY IDEOGRAPH-F925
-f926 CJK COMPATIBILITY IDEOGRAPH-F926
-f927 CJK COMPATIBILITY IDEOGRAPH-F927
-f928 CJK COMPATIBILITY IDEOGRAPH-F928
-f929 CJK COMPATIBILITY IDEOGRAPH-F929
-f92a CJK COMPATIBILITY IDEOGRAPH-F92A
-f92b CJK COMPATIBILITY IDEOGRAPH-F92B
-f92c CJK COMPATIBILITY IDEOGRAPH-F92C
-f92d CJK COMPATIBILITY IDEOGRAPH-F92D
-f92e CJK COMPATIBILITY IDEOGRAPH-F92E
-f92f CJK COMPATIBILITY IDEOGRAPH-F92F
-f930 CJK COMPATIBILITY IDEOGRAPH-F930
-f931 CJK COMPATIBILITY IDEOGRAPH-F931
-f932 CJK COMPATIBILITY IDEOGRAPH-F932
-f933 CJK COMPATIBILITY IDEOGRAPH-F933
-f934 CJK COMPATIBILITY IDEOGRAPH-F934
-f935 CJK COMPATIBILITY IDEOGRAPH-F935
-f936 CJK COMPATIBILITY IDEOGRAPH-F936
-f937 CJK COMPATIBILITY IDEOGRAPH-F937
-f938 CJK COMPATIBILITY IDEOGRAPH-F938
-f939 CJK COMPATIBILITY IDEOGRAPH-F939
-f93a CJK COMPATIBILITY IDEOGRAPH-F93A
-f93b CJK COMPATIBILITY IDEOGRAPH-F93B
-f93c CJK COMPATIBILITY IDEOGRAPH-F93C
-f93d CJK COMPATIBILITY IDEOGRAPH-F93D
-f93e CJK COMPATIBILITY IDEOGRAPH-F93E
-f93f CJK COMPATIBILITY IDEOGRAPH-F93F
-f940 CJK COMPATIBILITY IDEOGRAPH-F940
-f941 CJK COMPATIBILITY IDEOGRAPH-F941
-f942 CJK COMPATIBILITY IDEOGRAPH-F942
-f943 CJK COMPATIBILITY IDEOGRAPH-F943
-f944 CJK COMPATIBILITY IDEOGRAPH-F944
-f945 CJK COMPATIBILITY IDEOGRAPH-F945
-f946 CJK COMPATIBILITY IDEOGRAPH-F946
-f947 CJK COMPATIBILITY IDEOGRAPH-F947
-f948 CJK COMPATIBILITY IDEOGRAPH-F948
-f949 CJK COMPATIBILITY IDEOGRAPH-F949
-f94a CJK COMPATIBILITY IDEOGRAPH-F94A
-f94b CJK COMPATIBILITY IDEOGRAPH-F94B
-f94c CJK COMPATIBILITY IDEOGRAPH-F94C
-f94d CJK COMPATIBILITY IDEOGRAPH-F94D
-f94e CJK COMPATIBILITY IDEOGRAPH-F94E
-f94f CJK COMPATIBILITY IDEOGRAPH-F94F
-f950 CJK COMPATIBILITY IDEOGRAPH-F950
-f951 CJK COMPATIBILITY IDEOGRAPH-F951
-f952 CJK COMPATIBILITY IDEOGRAPH-F952
-f953 CJK COMPATIBILITY IDEOGRAPH-F953
-f954 CJK COMPATIBILITY IDEOGRAPH-F954
-f955 CJK COMPATIBILITY IDEOGRAPH-F955
-f956 CJK COMPATIBILITY IDEOGRAPH-F956
-f957 CJK COMPATIBILITY IDEOGRAPH-F957
-f958 CJK COMPATIBILITY IDEOGRAPH-F958
-f959 CJK COMPATIBILITY IDEOGRAPH-F959
-f95a CJK COMPATIBILITY IDEOGRAPH-F95A
-f95b CJK COMPATIBILITY IDEOGRAPH-F95B
-f95c CJK COMPATIBILITY IDEOGRAPH-F95C
-f95d CJK COMPATIBILITY IDEOGRAPH-F95D
-f95e CJK COMPATIBILITY IDEOGRAPH-F95E
-f95f CJK COMPATIBILITY IDEOGRAPH-F95F
-f960 CJK COMPATIBILITY IDEOGRAPH-F960
-f961 CJK COMPATIBILITY IDEOGRAPH-F961
-f962 CJK COMPATIBILITY IDEOGRAPH-F962
-f963 CJK COMPATIBILITY IDEOGRAPH-F963
-f964 CJK COMPATIBILITY IDEOGRAPH-F964
-f965 CJK COMPATIBILITY IDEOGRAPH-F965
-f966 CJK COMPATIBILITY IDEOGRAPH-F966
-f967 CJK COMPATIBILITY IDEOGRAPH-F967
-f968 CJK COMPATIBILITY IDEOGRAPH-F968
-f969 CJK COMPATIBILITY IDEOGRAPH-F969
-f96a CJK COMPATIBILITY IDEOGRAPH-F96A
-f96b CJK COMPATIBILITY IDEOGRAPH-F96B
-f96c CJK COMPATIBILITY IDEOGRAPH-F96C
-f96d CJK COMPATIBILITY IDEOGRAPH-F96D
-f96e CJK COMPATIBILITY IDEOGRAPH-F96E
-f96f CJK COMPATIBILITY IDEOGRAPH-F96F
-f970 CJK COMPATIBILITY IDEOGRAPH-F970
-f971 CJK COMPATIBILITY IDEOGRAPH-F971
-f972 CJK COMPATIBILITY IDEOGRAPH-F972
-f973 CJK COMPATIBILITY IDEOGRAPH-F973
-f974 CJK COMPATIBILITY IDEOGRAPH-F974
-f975 CJK COMPATIBILITY IDEOGRAPH-F975
-f976 CJK COMPATIBILITY IDEOGRAPH-F976
-f977 CJK COMPATIBILITY IDEOGRAPH-F977
-f978 CJK COMPATIBILITY IDEOGRAPH-F978
-f979 CJK COMPATIBILITY IDEOGRAPH-F979
-f97a CJK COMPATIBILITY IDEOGRAPH-F97A
-f97b CJK COMPATIBILITY IDEOGRAPH-F97B
-f97c CJK COMPATIBILITY IDEOGRAPH-F97C
-f97d CJK COMPATIBILITY IDEOGRAPH-F97D
-f97e CJK COMPATIBILITY IDEOGRAPH-F97E
-f97f CJK COMPATIBILITY IDEOGRAPH-F97F
-f980 CJK COMPATIBILITY IDEOGRAPH-F980
-f981 CJK COMPATIBILITY IDEOGRAPH-F981
-f982 CJK COMPATIBILITY IDEOGRAPH-F982
-f983 CJK COMPATIBILITY IDEOGRAPH-F983
-f984 CJK COMPATIBILITY IDEOGRAPH-F984
-f985 CJK COMPATIBILITY IDEOGRAPH-F985
-f986 CJK COMPATIBILITY IDEOGRAPH-F986
-f987 CJK COMPATIBILITY IDEOGRAPH-F987
-f988 CJK COMPATIBILITY IDEOGRAPH-F988
-f989 CJK COMPATIBILITY IDEOGRAPH-F989
-f98a CJK COMPATIBILITY IDEOGRAPH-F98A
-f98b CJK COMPATIBILITY IDEOGRAPH-F98B
-f98c CJK COMPATIBILITY IDEOGRAPH-F98C
-f98d CJK COMPATIBILITY IDEOGRAPH-F98D
-f98e CJK COMPATIBILITY IDEOGRAPH-F98E
-f98f CJK COMPATIBILITY IDEOGRAPH-F98F
-f990 CJK COMPATIBILITY IDEOGRAPH-F990
-f991 CJK COMPATIBILITY IDEOGRAPH-F991
-f992 CJK COMPATIBILITY IDEOGRAPH-F992
-f993 CJK COMPATIBILITY IDEOGRAPH-F993
-f994 CJK COMPATIBILITY IDEOGRAPH-F994
-f995 CJK COMPATIBILITY IDEOGRAPH-F995
-f996 CJK COMPATIBILITY IDEOGRAPH-F996
-f997 CJK COMPATIBILITY IDEOGRAPH-F997
-f998 CJK COMPATIBILITY IDEOGRAPH-F998
-f999 CJK COMPATIBILITY IDEOGRAPH-F999
-f99a CJK COMPATIBILITY IDEOGRAPH-F99A
-f99b CJK COMPATIBILITY IDEOGRAPH-F99B
-f99c CJK COMPATIBILITY IDEOGRAPH-F99C
-f99d CJK COMPATIBILITY IDEOGRAPH-F99D
-f99e CJK COMPATIBILITY IDEOGRAPH-F99E
-f99f CJK COMPATIBILITY IDEOGRAPH-F99F
-f9a0 CJK COMPATIBILITY IDEOGRAPH-F9A0
-f9a1 CJK COMPATIBILITY IDEOGRAPH-F9A1
-f9a2 CJK COMPATIBILITY IDEOGRAPH-F9A2
-f9a3 CJK COMPATIBILITY IDEOGRAPH-F9A3
-f9a4 CJK COMPATIBILITY IDEOGRAPH-F9A4
-f9a5 CJK COMPATIBILITY IDEOGRAPH-F9A5
-f9a6 CJK COMPATIBILITY IDEOGRAPH-F9A6
-f9a7 CJK COMPATIBILITY IDEOGRAPH-F9A7
-f9a8 CJK COMPATIBILITY IDEOGRAPH-F9A8
-f9a9 CJK COMPATIBILITY IDEOGRAPH-F9A9
-f9aa CJK COMPATIBILITY IDEOGRAPH-F9AA
-f9ab CJK COMPATIBILITY IDEOGRAPH-F9AB
-f9ac CJK COMPATIBILITY IDEOGRAPH-F9AC
-f9ad CJK COMPATIBILITY IDEOGRAPH-F9AD
-f9ae CJK COMPATIBILITY IDEOGRAPH-F9AE
-f9af CJK COMPATIBILITY IDEOGRAPH-F9AF
-f9b0 CJK COMPATIBILITY IDEOGRAPH-F9B0
-f9b1 CJK COMPATIBILITY IDEOGRAPH-F9B1
-f9b2 CJK COMPATIBILITY IDEOGRAPH-F9B2
-f9b3 CJK COMPATIBILITY IDEOGRAPH-F9B3
-f9b4 CJK COMPATIBILITY IDEOGRAPH-F9B4
-f9b5 CJK COMPATIBILITY IDEOGRAPH-F9B5
-f9b6 CJK COMPATIBILITY IDEOGRAPH-F9B6
-f9b7 CJK COMPATIBILITY IDEOGRAPH-F9B7
-f9b8 CJK COMPATIBILITY IDEOGRAPH-F9B8
-f9b9 CJK COMPATIBILITY IDEOGRAPH-F9B9
-f9ba CJK COMPATIBILITY IDEOGRAPH-F9BA
-f9bb CJK COMPATIBILITY IDEOGRAPH-F9BB
-f9bc CJK COMPATIBILITY IDEOGRAPH-F9BC
-f9bd CJK COMPATIBILITY IDEOGRAPH-F9BD
-f9be CJK COMPATIBILITY IDEOGRAPH-F9BE
-f9bf CJK COMPATIBILITY IDEOGRAPH-F9BF
-f9c0 CJK COMPATIBILITY IDEOGRAPH-F9C0
-f9c1 CJK COMPATIBILITY IDEOGRAPH-F9C1
-f9c2 CJK COMPATIBILITY IDEOGRAPH-F9C2
-f9c3 CJK COMPATIBILITY IDEOGRAPH-F9C3
-f9c4 CJK COMPATIBILITY IDEOGRAPH-F9C4
-f9c5 CJK COMPATIBILITY IDEOGRAPH-F9C5
-f9c6 CJK COMPATIBILITY IDEOGRAPH-F9C6
-f9c7 CJK COMPATIBILITY IDEOGRAPH-F9C7
-f9c8 CJK COMPATIBILITY IDEOGRAPH-F9C8
-f9c9 CJK COMPATIBILITY IDEOGRAPH-F9C9
-f9ca CJK COMPATIBILITY IDEOGRAPH-F9CA
-f9cb CJK COMPATIBILITY IDEOGRAPH-F9CB
-f9cc CJK COMPATIBILITY IDEOGRAPH-F9CC
-f9cd CJK COMPATIBILITY IDEOGRAPH-F9CD
-f9ce CJK COMPATIBILITY IDEOGRAPH-F9CE
-f9cf CJK COMPATIBILITY IDEOGRAPH-F9CF
-f9d0 CJK COMPATIBILITY IDEOGRAPH-F9D0
-f9d1 CJK COMPATIBILITY IDEOGRAPH-F9D1
-f9d2 CJK COMPATIBILITY IDEOGRAPH-F9D2
-f9d3 CJK COMPATIBILITY IDEOGRAPH-F9D3
-f9d4 CJK COMPATIBILITY IDEOGRAPH-F9D4
-f9d5 CJK COMPATIBILITY IDEOGRAPH-F9D5
-f9d6 CJK COMPATIBILITY IDEOGRAPH-F9D6
-f9d7 CJK COMPATIBILITY IDEOGRAPH-F9D7
-f9d8 CJK COMPATIBILITY IDEOGRAPH-F9D8
-f9d9 CJK COMPATIBILITY IDEOGRAPH-F9D9
-f9da CJK COMPATIBILITY IDEOGRAPH-F9DA
-f9db CJK COMPATIBILITY IDEOGRAPH-F9DB
-f9dc CJK COMPATIBILITY IDEOGRAPH-F9DC
-f9dd CJK COMPATIBILITY IDEOGRAPH-F9DD
-f9de CJK COMPATIBILITY IDEOGRAPH-F9DE
-f9df CJK COMPATIBILITY IDEOGRAPH-F9DF
-f9e0 CJK COMPATIBILITY IDEOGRAPH-F9E0
-f9e1 CJK COMPATIBILITY IDEOGRAPH-F9E1
-f9e2 CJK COMPATIBILITY IDEOGRAPH-F9E2
-f9e3 CJK COMPATIBILITY IDEOGRAPH-F9E3
-f9e4 CJK COMPATIBILITY IDEOGRAPH-F9E4
-f9e5 CJK COMPATIBILITY IDEOGRAPH-F9E5
-f9e6 CJK COMPATIBILITY IDEOGRAPH-F9E6
-f9e7 CJK COMPATIBILITY IDEOGRAPH-F9E7
-f9e8 CJK COMPATIBILITY IDEOGRAPH-F9E8
-f9e9 CJK COMPATIBILITY IDEOGRAPH-F9E9
-f9ea CJK COMPATIBILITY IDEOGRAPH-F9EA
-f9eb CJK COMPATIBILITY IDEOGRAPH-F9EB
-f9ec CJK COMPATIBILITY IDEOGRAPH-F9EC
-f9ed CJK COMPATIBILITY IDEOGRAPH-F9ED
-f9ee CJK COMPATIBILITY IDEOGRAPH-F9EE
-f9ef CJK COMPATIBILITY IDEOGRAPH-F9EF
-f9f0 CJK COMPATIBILITY IDEOGRAPH-F9F0
-f9f1 CJK COMPATIBILITY IDEOGRAPH-F9F1
-f9f2 CJK COMPATIBILITY IDEOGRAPH-F9F2
-f9f3 CJK COMPATIBILITY IDEOGRAPH-F9F3
-f9f4 CJK COMPATIBILITY IDEOGRAPH-F9F4
-f9f5 CJK COMPATIBILITY IDEOGRAPH-F9F5
-f9f6 CJK COMPATIBILITY IDEOGRAPH-F9F6
-f9f7 CJK COMPATIBILITY IDEOGRAPH-F9F7
-f9f8 CJK COMPATIBILITY IDEOGRAPH-F9F8
-f9f9 CJK COMPATIBILITY IDEOGRAPH-F9F9
-f9fa CJK COMPATIBILITY IDEOGRAPH-F9FA
-f9fb CJK COMPATIBILITY IDEOGRAPH-F9FB
-f9fc CJK COMPATIBILITY IDEOGRAPH-F9FC
-f9fd CJK COMPATIBILITY IDEOGRAPH-F9FD
-f9fe CJK COMPATIBILITY IDEOGRAPH-F9FE
-f9ff CJK COMPATIBILITY IDEOGRAPH-F9FF
-fa00 CJK COMPATIBILITY IDEOGRAPH-FA00
-fa01 CJK COMPATIBILITY IDEOGRAPH-FA01
-fa02 CJK COMPATIBILITY IDEOGRAPH-FA02
-fa03 CJK COMPATIBILITY IDEOGRAPH-FA03
-fa04 CJK COMPATIBILITY IDEOGRAPH-FA04
-fa05 CJK COMPATIBILITY IDEOGRAPH-FA05
-fa06 CJK COMPATIBILITY IDEOGRAPH-FA06
-fa07 CJK COMPATIBILITY IDEOGRAPH-FA07
-fa08 CJK COMPATIBILITY IDEOGRAPH-FA08
-fa09 CJK COMPATIBILITY IDEOGRAPH-FA09
-fa0a CJK COMPATIBILITY IDEOGRAPH-FA0A
-fa0b CJK COMPATIBILITY IDEOGRAPH-FA0B
-fa0c CJK COMPATIBILITY IDEOGRAPH-FA0C
-fa0d CJK COMPATIBILITY IDEOGRAPH-FA0D
-fa0e CJK COMPATIBILITY IDEOGRAPH-FA0E
-fa0f CJK COMPATIBILITY IDEOGRAPH-FA0F
-fa10 CJK COMPATIBILITY IDEOGRAPH-FA10
-fa11 CJK COMPATIBILITY IDEOGRAPH-FA11
-fa12 CJK COMPATIBILITY IDEOGRAPH-FA12
-fa13 CJK COMPATIBILITY IDEOGRAPH-FA13
-fa14 CJK COMPATIBILITY IDEOGRAPH-FA14
-fa15 CJK COMPATIBILITY IDEOGRAPH-FA15
-fa16 CJK COMPATIBILITY IDEOGRAPH-FA16
-fa17 CJK COMPATIBILITY IDEOGRAPH-FA17
-fa18 CJK COMPATIBILITY IDEOGRAPH-FA18
-fa19 CJK COMPATIBILITY IDEOGRAPH-FA19
-fa1a CJK COMPATIBILITY IDEOGRAPH-FA1A
-fa1b CJK COMPATIBILITY IDEOGRAPH-FA1B
-fa1c CJK COMPATIBILITY IDEOGRAPH-FA1C
-fa1d CJK COMPATIBILITY IDEOGRAPH-FA1D
-fa1e CJK COMPATIBILITY IDEOGRAPH-FA1E
-fa1f CJK COMPATIBILITY IDEOGRAPH-FA1F
-fa20 CJK COMPATIBILITY IDEOGRAPH-FA20
-fa21 CJK COMPATIBILITY IDEOGRAPH-FA21
-fa22 CJK COMPATIBILITY IDEOGRAPH-FA22
-fa23 CJK COMPATIBILITY IDEOGRAPH-FA23
-fa24 CJK COMPATIBILITY IDEOGRAPH-FA24
-fa25 CJK COMPATIBILITY IDEOGRAPH-FA25
-fa26 CJK COMPATIBILITY IDEOGRAPH-FA26
-fa27 CJK COMPATIBILITY IDEOGRAPH-FA27
-fa28 CJK COMPATIBILITY IDEOGRAPH-FA28
-fa29 CJK COMPATIBILITY IDEOGRAPH-FA29
-fa2a CJK COMPATIBILITY IDEOGRAPH-FA2A
-fa2b CJK COMPATIBILITY IDEOGRAPH-FA2B
-fa2c CJK COMPATIBILITY IDEOGRAPH-FA2C
-fa2d CJK COMPATIBILITY IDEOGRAPH-FA2D
-fb00 LATIN SMALL LIGATURE FF
-fb01 LATIN SMALL LIGATURE FI
-fb02 LATIN SMALL LIGATURE FL
-fb03 LATIN SMALL LIGATURE FFI
-fb04 LATIN SMALL LIGATURE FFL
-fb05 LATIN SMALL LIGATURE LONG S T
-fb06 LATIN SMALL LIGATURE ST
-fb13 ARMENIAN SMALL LIGATURE MEN NOW
-fb14 ARMENIAN SMALL LIGATURE MEN ECH
-fb15 ARMENIAN SMALL LIGATURE MEN INI
-fb16 ARMENIAN SMALL LIGATURE VEW NOW
-fb17 ARMENIAN SMALL LIGATURE MEN XEH
-fb1d HEBREW LETTER YOD WITH HIRIQ
-fb1e HEBREW POINT JUDEO-SPANISH VARIKA
-fb1f HEBREW LIGATURE YIDDISH YOD YOD PATAH
-fb20 HEBREW LETTER ALTERNATIVE AYIN
-fb21 HEBREW LETTER WIDE ALEF
-fb22 HEBREW LETTER WIDE DALET
-fb23 HEBREW LETTER WIDE HE
-fb24 HEBREW LETTER WIDE KAF
-fb25 HEBREW LETTER WIDE LAMED
-fb26 HEBREW LETTER WIDE FINAL MEM
-fb27 HEBREW LETTER WIDE RESH
-fb28 HEBREW LETTER WIDE TAV
-fb29 HEBREW LETTER ALTERNATIVE PLUS SIGN
-fb2a HEBREW LETTER SHIN WITH SHIN DOT
-fb2b HEBREW LETTER SHIN WITH SIN DOT
-fb2c HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
-fb2d HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
-fb2e HEBREW LETTER ALEF WITH PATAH
-fb2f HEBREW LETTER ALEF WITH QAMATS
-fb30 HEBREW LETTER ALEF WITH MAPIQ
-fb31 HEBREW LETTER BET WITH DAGESH
-fb32 HEBREW LETTER GIMEL WITH DAGESH
-fb33 HEBREW LETTER DALET WITH DAGESH
-fb34 HEBREW LETTER HE WITH MAPIQ
-fb35 HEBREW LETTER VAV WITH DAGESH
-fb36 HEBREW LETTER ZAYIN WITH DAGESH
-fb38 HEBREW LETTER TET WITH DAGESH
-fb39 HEBREW LETTER YOD WITH DAGESH
-fb3a HEBREW LETTER FINAL KAF WITH DAGESH
-fb3b HEBREW LETTER KAF WITH DAGESH
-fb3c HEBREW LETTER LAMED WITH DAGESH
-fb3e HEBREW LETTER MEM WITH DAGESH
-fb40 HEBREW LETTER NUN WITH DAGESH
-fb41 HEBREW LETTER SAMEKH WITH DAGESH
-fb43 HEBREW LETTER FINAL PE WITH DAGESH
-fb44 HEBREW LETTER PE WITH DAGESH
-fb46 HEBREW LETTER TSADI WITH DAGESH
-fb47 HEBREW LETTER QOF WITH DAGESH
-fb48 HEBREW LETTER RESH WITH DAGESH
-fb49 HEBREW LETTER SHIN WITH DAGESH
-fb4a HEBREW LETTER TAV WITH DAGESH
-fb4b HEBREW LETTER VAV WITH HOLAM
-fb4c HEBREW LETTER BET WITH RAFE
-fb4d HEBREW LETTER KAF WITH RAFE
-fb4e HEBREW LETTER PE WITH RAFE
-fb4f HEBREW LIGATURE ALEF LAMED
-fb50 ARABIC LETTER ALEF WASLA ISOLATED FORM
-fb51 ARABIC LETTER ALEF WASLA FINAL FORM
-fb52 ARABIC LETTER BEEH ISOLATED FORM
-fb53 ARABIC LETTER BEEH FINAL FORM
-fb54 ARABIC LETTER BEEH INITIAL FORM
-fb55 ARABIC LETTER BEEH MEDIAL FORM
-fb56 ARABIC LETTER PEH ISOLATED FORM
-fb57 ARABIC LETTER PEH FINAL FORM
-fb58 ARABIC LETTER PEH INITIAL FORM
-fb59 ARABIC LETTER PEH MEDIAL FORM
-fb5a ARABIC LETTER BEHEH ISOLATED FORM
-fb5b ARABIC LETTER BEHEH FINAL FORM
-fb5c ARABIC LETTER BEHEH INITIAL FORM
-fb5d ARABIC LETTER BEHEH MEDIAL FORM
-fb5e ARABIC LETTER TTEHEH ISOLATED FORM
-fb5f ARABIC LETTER TTEHEH FINAL FORM
-fb60 ARABIC LETTER TTEHEH INITIAL FORM
-fb61 ARABIC LETTER TTEHEH MEDIAL FORM
-fb62 ARABIC LETTER TEHEH ISOLATED FORM
-fb63 ARABIC LETTER TEHEH FINAL FORM
-fb64 ARABIC LETTER TEHEH INITIAL FORM
-fb65 ARABIC LETTER TEHEH MEDIAL FORM
-fb66 ARABIC LETTER TTEH ISOLATED FORM
-fb67 ARABIC LETTER TTEH FINAL FORM
-fb68 ARABIC LETTER TTEH INITIAL FORM
-fb69 ARABIC LETTER TTEH MEDIAL FORM
-fb6a ARABIC LETTER VEH ISOLATED FORM
-fb6b ARABIC LETTER VEH FINAL FORM
-fb6c ARABIC LETTER VEH INITIAL FORM
-fb6d ARABIC LETTER VEH MEDIAL FORM
-fb6e ARABIC LETTER PEHEH ISOLATED FORM
-fb6f ARABIC LETTER PEHEH FINAL FORM
-fb70 ARABIC LETTER PEHEH INITIAL FORM
-fb71 ARABIC LETTER PEHEH MEDIAL FORM
-fb72 ARABIC LETTER DYEH ISOLATED FORM
-fb73 ARABIC LETTER DYEH FINAL FORM
-fb74 ARABIC LETTER DYEH INITIAL FORM
-fb75 ARABIC LETTER DYEH MEDIAL FORM
-fb76 ARABIC LETTER NYEH ISOLATED FORM
-fb77 ARABIC LETTER NYEH FINAL FORM
-fb78 ARABIC LETTER NYEH INITIAL FORM
-fb79 ARABIC LETTER NYEH MEDIAL FORM
-fb7a ARABIC LETTER TCHEH ISOLATED FORM
-fb7b ARABIC LETTER TCHEH FINAL FORM
-fb7c ARABIC LETTER TCHEH INITIAL FORM
-fb7d ARABIC LETTER TCHEH MEDIAL FORM
-fb7e ARABIC LETTER TCHEHEH ISOLATED FORM
-fb7f ARABIC LETTER TCHEHEH FINAL FORM
-fb80 ARABIC LETTER TCHEHEH INITIAL FORM
-fb81 ARABIC LETTER TCHEHEH MEDIAL FORM
-fb82 ARABIC LETTER DDAHAL ISOLATED FORM
-fb83 ARABIC LETTER DDAHAL FINAL FORM
-fb84 ARABIC LETTER DAHAL ISOLATED FORM
-fb85 ARABIC LETTER DAHAL FINAL FORM
-fb86 ARABIC LETTER DUL ISOLATED FORM
-fb87 ARABIC LETTER DUL FINAL FORM
-fb88 ARABIC LETTER DDAL ISOLATED FORM
-fb89 ARABIC LETTER DDAL FINAL FORM
-fb8a ARABIC LETTER JEH ISOLATED FORM
-fb8b ARABIC LETTER JEH FINAL FORM
-fb8c ARABIC LETTER RREH ISOLATED FORM
-fb8d ARABIC LETTER RREH FINAL FORM
-fb8e ARABIC LETTER KEHEH ISOLATED FORM
-fb8f ARABIC LETTER KEHEH FINAL FORM
-fb90 ARABIC LETTER KEHEH INITIAL FORM
-fb91 ARABIC LETTER KEHEH MEDIAL FORM
-fb92 ARABIC LETTER GAF ISOLATED FORM
-fb93 ARABIC LETTER GAF FINAL FORM
-fb94 ARABIC LETTER GAF INITIAL FORM
-fb95 ARABIC LETTER GAF MEDIAL FORM
-fb96 ARABIC LETTER GUEH ISOLATED FORM
-fb97 ARABIC LETTER GUEH FINAL FORM
-fb98 ARABIC LETTER GUEH INITIAL FORM
-fb99 ARABIC LETTER GUEH MEDIAL FORM
-fb9a ARABIC LETTER NGOEH ISOLATED FORM
-fb9b ARABIC LETTER NGOEH FINAL FORM
-fb9c ARABIC LETTER NGOEH INITIAL FORM
-fb9d ARABIC LETTER NGOEH MEDIAL FORM
-fb9e ARABIC LETTER NOON GHUNNA ISOLATED FORM
-fb9f ARABIC LETTER NOON GHUNNA FINAL FORM
-fba0 ARABIC LETTER RNOON ISOLATED FORM
-fba1 ARABIC LETTER RNOON FINAL FORM
-fba2 ARABIC LETTER RNOON INITIAL FORM
-fba3 ARABIC LETTER RNOON MEDIAL FORM
-fba4 ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
-fba5 ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
-fba6 ARABIC LETTER HEH GOAL ISOLATED FORM
-fba7 ARABIC LETTER HEH GOAL FINAL FORM
-fba8 ARABIC LETTER HEH GOAL INITIAL FORM
-fba9 ARABIC LETTER HEH GOAL MEDIAL FORM
-fbaa ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
-fbab ARABIC LETTER HEH DOACHASHMEE FINAL FORM
-fbac ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
-fbad ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
-fbae ARABIC LETTER YEH BARREE ISOLATED FORM
-fbaf ARABIC LETTER YEH BARREE FINAL FORM
-fbb0 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
-fbb1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-fbd3 ARABIC LETTER NG ISOLATED FORM
-fbd4 ARABIC LETTER NG FINAL FORM
-fbd5 ARABIC LETTER NG INITIAL FORM
-fbd6 ARABIC LETTER NG MEDIAL FORM
-fbd7 ARABIC LETTER U ISOLATED FORM
-fbd8 ARABIC LETTER U FINAL FORM
-fbd9 ARABIC LETTER OE ISOLATED FORM
-fbda ARABIC LETTER OE FINAL FORM
-fbdb ARABIC LETTER YU ISOLATED FORM
-fbdc ARABIC LETTER YU FINAL FORM
-fbdd ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
-fbde ARABIC LETTER VE ISOLATED FORM
-fbdf ARABIC LETTER VE FINAL FORM
-fbe0 ARABIC LETTER KIRGHIZ OE ISOLATED FORM
-fbe1 ARABIC LETTER KIRGHIZ OE FINAL FORM
-fbe2 ARABIC LETTER KIRGHIZ YU ISOLATED FORM
-fbe3 ARABIC LETTER KIRGHIZ YU FINAL FORM
-fbe4 ARABIC LETTER E ISOLATED FORM
-fbe5 ARABIC LETTER E FINAL FORM
-fbe6 ARABIC LETTER E INITIAL FORM
-fbe7 ARABIC LETTER E MEDIAL FORM
-fbe8 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
-fbe9 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
-fbea ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
-fbeb ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
-fbec ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
-fbed ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
-fbee ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
-fbef ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
-fbf0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
-fbf1 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
-fbf2 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
-fbf3 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
-fbf4 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
-fbf5 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
-fbf6 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
-fbf7 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
-fbf8 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
-fbf9 ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
-fbfa ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
-fbfb ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
-fbfc ARABIC LETTER FARSI YEH ISOLATED FORM
-fbfd ARABIC LETTER FARSI YEH FINAL FORM
-fbfe ARABIC LETTER FARSI YEH INITIAL FORM
-fbff ARABIC LETTER FARSI YEH MEDIAL FORM
-fc00 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
-fc01 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
-fc02 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
-fc03 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
-fc04 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
-fc05 ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
-fc06 ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
-fc07 ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
-fc08 ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
-fc09 ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
-fc0a ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
-fc0b ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
-fc0c ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
-fc0d ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
-fc0e ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
-fc0f ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
-fc10 ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
-fc11 ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
-fc12 ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
-fc13 ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
-fc14 ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
-fc15 ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
-fc16 ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
-fc17 ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
-fc18 ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
-fc19 ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
-fc1a ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
-fc1b ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
-fc1c ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
-fc1d ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
-fc1e ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
-fc1f ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
-fc20 ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
-fc21 ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
-fc22 ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
-fc23 ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
-fc24 ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
-fc25 ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
-fc26 ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
-fc27 ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
-fc28 ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
-fc29 ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
-fc2a ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
-fc2b ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
-fc2c ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
-fc2d ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
-fc2e ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
-fc2f ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
-fc30 ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
-fc31 ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
-fc32 ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
-fc33 ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
-fc34 ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
-fc35 ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
-fc36 ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
-fc37 ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
-fc38 ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
-fc39 ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
-fc3a ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
-fc3b ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
-fc3c ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
-fc3d ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
-fc3e ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
-fc3f ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
-fc40 ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
-fc41 ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
-fc42 ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
-fc43 ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
-fc44 ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
-fc45 ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
-fc46 ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
-fc47 ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
-fc48 ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
-fc49 ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
-fc4a ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
-fc4b ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
-fc4c ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
-fc4d ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
-fc4e ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
-fc4f ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
-fc50 ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
-fc51 ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
-fc52 ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
-fc53 ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
-fc54 ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
-fc55 ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
-fc56 ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
-fc57 ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
-fc58 ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
-fc59 ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
-fc5a ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
-fc5b ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
-fc5c ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
-fc5d ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
-fc5e ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
-fc5f ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
-fc60 ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
-fc61 ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
-fc62 ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
-fc63 ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
-fc64 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
-fc65 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
-fc66 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
-fc67 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
-fc68 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
-fc69 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
-fc6a ARABIC LIGATURE BEH WITH REH FINAL FORM
-fc6b ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
-fc6c ARABIC LIGATURE BEH WITH MEEM FINAL FORM
-fc6d ARABIC LIGATURE BEH WITH NOON FINAL FORM
-fc6e ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
-fc6f ARABIC LIGATURE BEH WITH YEH FINAL FORM
-fc70 ARABIC LIGATURE TEH WITH REH FINAL FORM
-fc71 ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
-fc72 ARABIC LIGATURE TEH WITH MEEM FINAL FORM
-fc73 ARABIC LIGATURE TEH WITH NOON FINAL FORM
-fc74 ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
-fc75 ARABIC LIGATURE TEH WITH YEH FINAL FORM
-fc76 ARABIC LIGATURE THEH WITH REH FINAL FORM
-fc77 ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
-fc78 ARABIC LIGATURE THEH WITH MEEM FINAL FORM
-fc79 ARABIC LIGATURE THEH WITH NOON FINAL FORM
-fc7a ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
-fc7b ARABIC LIGATURE THEH WITH YEH FINAL FORM
-fc7c ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
-fc7d ARABIC LIGATURE FEH WITH YEH FINAL FORM
-fc7e ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
-fc7f ARABIC LIGATURE QAF WITH YEH FINAL FORM
-fc80 ARABIC LIGATURE KAF WITH ALEF FINAL FORM
-fc81 ARABIC LIGATURE KAF WITH LAM FINAL FORM
-fc82 ARABIC LIGATURE KAF WITH MEEM FINAL FORM
-fc83 ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
-fc84 ARABIC LIGATURE KAF WITH YEH FINAL FORM
-fc85 ARABIC LIGATURE LAM WITH MEEM FINAL FORM
-fc86 ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
-fc87 ARABIC LIGATURE LAM WITH YEH FINAL FORM
-fc88 ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
-fc89 ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
-fc8a ARABIC LIGATURE NOON WITH REH FINAL FORM
-fc8b ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
-fc8c ARABIC LIGATURE NOON WITH MEEM FINAL FORM
-fc8d ARABIC LIGATURE NOON WITH NOON FINAL FORM
-fc8e ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
-fc8f ARABIC LIGATURE NOON WITH YEH FINAL FORM
-fc90 ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
-fc91 ARABIC LIGATURE YEH WITH REH FINAL FORM
-fc92 ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
-fc93 ARABIC LIGATURE YEH WITH MEEM FINAL FORM
-fc94 ARABIC LIGATURE YEH WITH NOON FINAL FORM
-fc95 ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
-fc96 ARABIC LIGATURE YEH WITH YEH FINAL FORM
-fc97 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
-fc98 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
-fc99 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
-fc9a ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
-fc9b ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
-fc9c ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
-fc9d ARABIC LIGATURE BEH WITH HAH INITIAL FORM
-fc9e ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
-fc9f ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
-fca0 ARABIC LIGATURE BEH WITH HEH INITIAL FORM
-fca1 ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
-fca2 ARABIC LIGATURE TEH WITH HAH INITIAL FORM
-fca3 ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
-fca4 ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
-fca5 ARABIC LIGATURE TEH WITH HEH INITIAL FORM
-fca6 ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
-fca7 ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
-fca8 ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
-fca9 ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
-fcaa ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
-fcab ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
-fcac ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
-fcad ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
-fcae ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
-fcaf ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
-fcb0 ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
-fcb1 ARABIC LIGATURE SAD WITH HAH INITIAL FORM
-fcb2 ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
-fcb3 ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
-fcb4 ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
-fcb5 ARABIC LIGATURE DAD WITH HAH INITIAL FORM
-fcb6 ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
-fcb7 ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
-fcb8 ARABIC LIGATURE TAH WITH HAH INITIAL FORM
-fcb9 ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
-fcba ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
-fcbb ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
-fcbc ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
-fcbd ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
-fcbe ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
-fcbf ARABIC LIGATURE FEH WITH HAH INITIAL FORM
-fcc0 ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
-fcc1 ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
-fcc2 ARABIC LIGATURE QAF WITH HAH INITIAL FORM
-fcc3 ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
-fcc4 ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
-fcc5 ARABIC LIGATURE KAF WITH HAH INITIAL FORM
-fcc6 ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
-fcc7 ARABIC LIGATURE KAF WITH LAM INITIAL FORM
-fcc8 ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
-fcc9 ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
-fcca ARABIC LIGATURE LAM WITH HAH INITIAL FORM
-fccb ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
-fccc ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
-fccd ARABIC LIGATURE LAM WITH HEH INITIAL FORM
-fcce ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
-fccf ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
-fcd0 ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
-fcd1 ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
-fcd2 ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
-fcd3 ARABIC LIGATURE NOON WITH HAH INITIAL FORM
-fcd4 ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
-fcd5 ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
-fcd6 ARABIC LIGATURE NOON WITH HEH INITIAL FORM
-fcd7 ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
-fcd8 ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
-fcd9 ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
-fcda ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
-fcdb ARABIC LIGATURE YEH WITH HAH INITIAL FORM
-fcdc ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
-fcdd ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
-fcde ARABIC LIGATURE YEH WITH HEH INITIAL FORM
-fcdf ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
-fce0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
-fce1 ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
-fce2 ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
-fce3 ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
-fce4 ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
-fce5 ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
-fce6 ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
-fce7 ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
-fce8 ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
-fce9 ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
-fcea ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
-fceb ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
-fcec ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
-fced ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
-fcee ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
-fcef ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
-fcf0 ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
-fcf1 ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
-fcf2 ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
-fcf3 ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
-fcf4 ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
-fcf5 ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
-fcf6 ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
-fcf7 ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
-fcf8 ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
-fcf9 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
-fcfa ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
-fcfb ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
-fcfc ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
-fcfd ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
-fcfe ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
-fcff ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
-fd00 ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
-fd01 ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
-fd02 ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
-fd03 ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
-fd04 ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
-fd05 ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
-fd06 ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
-fd07 ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
-fd08 ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
-fd09 ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
-fd0a ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
-fd0b ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
-fd0c ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
-fd0d ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
-fd0e ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
-fd0f ARABIC LIGATURE SAD WITH REH ISOLATED FORM
-fd10 ARABIC LIGATURE DAD WITH REH ISOLATED FORM
-fd11 ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
-fd12 ARABIC LIGATURE TAH WITH YEH FINAL FORM
-fd13 ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
-fd14 ARABIC LIGATURE AIN WITH YEH FINAL FORM
-fd15 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
-fd16 ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
-fd17 ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
-fd18 ARABIC LIGATURE SEEN WITH YEH FINAL FORM
-fd19 ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
-fd1a ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
-fd1b ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
-fd1c ARABIC LIGATURE HAH WITH YEH FINAL FORM
-fd1d ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
-fd1e ARABIC LIGATURE JEEM WITH YEH FINAL FORM
-fd1f ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
-fd20 ARABIC LIGATURE KHAH WITH YEH FINAL FORM
-fd21 ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
-fd22 ARABIC LIGATURE SAD WITH YEH FINAL FORM
-fd23 ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
-fd24 ARABIC LIGATURE DAD WITH YEH FINAL FORM
-fd25 ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
-fd26 ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
-fd27 ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
-fd28 ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
-fd29 ARABIC LIGATURE SHEEN WITH REH FINAL FORM
-fd2a ARABIC LIGATURE SEEN WITH REH FINAL FORM
-fd2b ARABIC LIGATURE SAD WITH REH FINAL FORM
-fd2c ARABIC LIGATURE DAD WITH REH FINAL FORM
-fd2d ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
-fd2e ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
-fd2f ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
-fd30 ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
-fd31 ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
-fd32 ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
-fd33 ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
-fd34 ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
-fd35 ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
-fd36 ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
-fd37 ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
-fd38 ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
-fd39 ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
-fd3a ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
-fd3b ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
-fd3c ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
-fd3d ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
-fd3e ORNATE LEFT PARENTHESIS
-fd3f ORNATE RIGHT PARENTHESIS
-fd50 ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
-fd51 ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
-fd52 ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
-fd53 ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
-fd54 ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
-fd55 ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
-fd56 ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
-fd57 ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
-fd58 ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
-fd59 ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
-fd5a ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
-fd5b ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
-fd5c ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
-fd5d ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
-fd5e ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
-fd5f ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
-fd60 ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
-fd61 ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
-fd62 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
-fd63 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
-fd64 ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
-fd65 ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
-fd66 ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
-fd67 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
-fd68 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
-fd69 ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
-fd6a ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
-fd6b ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
-fd6c ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
-fd6d ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
-fd6e ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
-fd6f ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
-fd70 ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
-fd71 ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
-fd72 ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
-fd73 ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
-fd74 ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
-fd75 ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
-fd76 ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
-fd77 ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
-fd78 ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
-fd79 ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
-fd7a ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
-fd7b ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
-fd7c ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
-fd7d ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
-fd7e ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
-fd7f ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
-fd80 ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
-fd81 ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
-fd82 ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
-fd83 ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
-fd84 ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
-fd85 ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
-fd86 ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
-fd87 ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
-fd88 ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
-fd89 ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
-fd8a ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
-fd8b ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
-fd8c ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
-fd8d ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
-fd8e ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
-fd8f ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
-fd92 ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
-fd93 ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
-fd94 ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
-fd95 ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
-fd96 ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
-fd97 ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
-fd98 ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
-fd99 ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
-fd9a ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
-fd9b ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
-fd9c ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
-fd9d ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
-fd9e ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
-fd9f ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
-fda0 ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
-fda1 ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
-fda2 ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
-fda3 ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
-fda4 ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
-fda5 ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
-fda6 ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
-fda7 ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
-fda8 ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
-fda9 ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
-fdaa ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
-fdab ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
-fdac ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
-fdad ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
-fdae ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
-fdaf ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
-fdb0 ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
-fdb1 ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
-fdb2 ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
-fdb3 ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
-fdb4 ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
-fdb5 ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
-fdb6 ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
-fdb7 ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
-fdb8 ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
-fdb9 ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
-fdba ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
-fdbb ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
-fdbc ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
-fdbd ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
-fdbe ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
-fdbf ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
-fdc0 ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
-fdc1 ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
-fdc2 ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
-fdc3 ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
-fdc4 ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
-fdc5 ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
-fdc6 ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
-fdc7 ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-fdf0 ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
-fdf1 ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
-fdf2 ARABIC LIGATURE ALLAH ISOLATED FORM
-fdf3 ARABIC LIGATURE AKBAR ISOLATED FORM
-fdf4 ARABIC LIGATURE MOHAMMAD ISOLATED FORM
-fdf5 ARABIC LIGATURE SALAM ISOLATED FORM
-fdf6 ARABIC LIGATURE RASOUL ISOLATED FORM
-fdf7 ARABIC LIGATURE ALAYHE ISOLATED FORM
-fdf8 ARABIC LIGATURE WASALLAM ISOLATED FORM
-fdf9 ARABIC LIGATURE SALLA ISOLATED FORM
-fdfa ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
-fdfb ARABIC LIGATURE JALLAJALALOUHOU
-fe20 COMBINING LIGATURE LEFT HALF
-fe21 COMBINING LIGATURE RIGHT HALF
-fe22 COMBINING DOUBLE TILDE LEFT HALF
-fe23 COMBINING DOUBLE TILDE RIGHT HALF
-fe30 PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
-fe31 PRESENTATION FORM FOR VERTICAL EM DASH
-fe32 PRESENTATION FORM FOR VERTICAL EN DASH
-fe33 PRESENTATION FORM FOR VERTICAL LOW LINE
-fe34 PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
-fe35 PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
-fe36 PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
-fe37 PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
-fe38 PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
-fe39 PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
-fe3a PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
-fe3b PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
-fe3c PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
-fe3d PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
-fe3e PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
-fe3f PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
-fe40 PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
-fe41 PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
-fe42 PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
-fe43 PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
-fe44 PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
-fe49 DASHED OVERLINE
-fe4a CENTRELINE OVERLINE
-fe4b WAVY OVERLINE
-fe4c DOUBLE WAVY OVERLINE
-fe4d DASHED LOW LINE
-fe4e CENTRELINE LOW LINE
-fe4f WAVY LOW LINE
-fe50 SMALL COMMA
-fe51 SMALL IDEOGRAPHIC COMMA
-fe52 SMALL FULL STOP
-fe54 SMALL SEMICOLON
-fe55 SMALL COLON
-fe56 SMALL QUESTION MARK
-fe57 SMALL EXCLAMATION MARK
-fe58 SMALL EM DASH
-fe59 SMALL LEFT PARENTHESIS
-fe5a SMALL RIGHT PARENTHESIS
-fe5b SMALL LEFT CURLY BRACKET
-fe5c SMALL RIGHT CURLY BRACKET
-fe5d SMALL LEFT TORTOISE SHELL BRACKET
-fe5e SMALL RIGHT TORTOISE SHELL BRACKET
-fe5f SMALL NUMBER SIGN
-fe60 SMALL AMPERSAND
-fe61 SMALL ASTERISK
-fe62 SMALL PLUS SIGN
-fe63 SMALL HYPHEN-MINUS
-fe64 SMALL LESS-THAN SIGN
-fe65 SMALL GREATER-THAN SIGN
-fe66 SMALL EQUALS SIGN
-fe68 SMALL REVERSE SOLIDUS
-fe69 SMALL DOLLAR SIGN
-fe6a SMALL PERCENT SIGN
-fe6b SMALL COMMERCIAL AT
-fe70 ARABIC FATHATAN ISOLATED FORM
-fe71 ARABIC TATWEEL WITH FATHATAN ABOVE
-fe72 ARABIC DAMMATAN ISOLATED FORM
-fe74 ARABIC KASRATAN ISOLATED FORM
-fe76 ARABIC FATHA ISOLATED FORM
-fe77 ARABIC FATHA MEDIAL FORM
-fe78 ARABIC DAMMA ISOLATED FORM
-fe79 ARABIC DAMMA MEDIAL FORM
-fe7a ARABIC KASRA ISOLATED FORM
-fe7b ARABIC KASRA MEDIAL FORM
-fe7c ARABIC SHADDA ISOLATED FORM
-fe7d ARABIC SHADDA MEDIAL FORM
-fe7e ARABIC SUKUN ISOLATED FORM
-fe7f ARABIC SUKUN MEDIAL FORM
-fe80 ARABIC LETTER HAMZA ISOLATED FORM
-fe81 ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
-fe82 ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
-fe83 ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
-fe84 ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
-fe85 ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
-fe86 ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
-fe87 ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
-fe88 ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
-fe89 ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
-fe8a ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
-fe8b ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
-fe8c ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
-fe8d ARABIC LETTER ALEF ISOLATED FORM
-fe8e ARABIC LETTER ALEF FINAL FORM
-fe8f ARABIC LETTER BEH ISOLATED FORM
-fe90 ARABIC LETTER BEH FINAL FORM
-fe91 ARABIC LETTER BEH INITIAL FORM
-fe92 ARABIC LETTER BEH MEDIAL FORM
-fe93 ARABIC LETTER TEH MARBUTA ISOLATED FORM
-fe94 ARABIC LETTER TEH MARBUTA FINAL FORM
-fe95 ARABIC LETTER TEH ISOLATED FORM
-fe96 ARABIC LETTER TEH FINAL FORM
-fe97 ARABIC LETTER TEH INITIAL FORM
-fe98 ARABIC LETTER TEH MEDIAL FORM
-fe99 ARABIC LETTER THEH ISOLATED FORM
-fe9a ARABIC LETTER THEH FINAL FORM
-fe9b ARABIC LETTER THEH INITIAL FORM
-fe9c ARABIC LETTER THEH MEDIAL FORM
-fe9d ARABIC LETTER JEEM ISOLATED FORM
-fe9e ARABIC LETTER JEEM FINAL FORM
-fe9f ARABIC LETTER JEEM INITIAL FORM
-fea0 ARABIC LETTER JEEM MEDIAL FORM
-fea1 ARABIC LETTER HAH ISOLATED FORM
-fea2 ARABIC LETTER HAH FINAL FORM
-fea3 ARABIC LETTER HAH INITIAL FORM
-fea4 ARABIC LETTER HAH MEDIAL FORM
-fea5 ARABIC LETTER KHAH ISOLATED FORM
-fea6 ARABIC LETTER KHAH FINAL FORM
-fea7 ARABIC LETTER KHAH INITIAL FORM
-fea8 ARABIC LETTER KHAH MEDIAL FORM
-fea9 ARABIC LETTER DAL ISOLATED FORM
-feaa ARABIC LETTER DAL FINAL FORM
-feab ARABIC LETTER THAL ISOLATED FORM
-feac ARABIC LETTER THAL FINAL FORM
-fead ARABIC LETTER REH ISOLATED FORM
-feae ARABIC LETTER REH FINAL FORM
-feaf ARABIC LETTER ZAIN ISOLATED FORM
-feb0 ARABIC LETTER ZAIN FINAL FORM
-feb1 ARABIC LETTER SEEN ISOLATED FORM
-feb2 ARABIC LETTER SEEN FINAL FORM
-feb3 ARABIC LETTER SEEN INITIAL FORM
-feb4 ARABIC LETTER SEEN MEDIAL FORM
-feb5 ARABIC LETTER SHEEN ISOLATED FORM
-feb6 ARABIC LETTER SHEEN FINAL FORM
-feb7 ARABIC LETTER SHEEN INITIAL FORM
-feb8 ARABIC LETTER SHEEN MEDIAL FORM
-feb9 ARABIC LETTER SAD ISOLATED FORM
-feba ARABIC LETTER SAD FINAL FORM
-febb ARABIC LETTER SAD INITIAL FORM
-febc ARABIC LETTER SAD MEDIAL FORM
-febd ARABIC LETTER DAD ISOLATED FORM
-febe ARABIC LETTER DAD FINAL FORM
-febf ARABIC LETTER DAD INITIAL FORM
-fec0 ARABIC LETTER DAD MEDIAL FORM
-fec1 ARABIC LETTER TAH ISOLATED FORM
-fec2 ARABIC LETTER TAH FINAL FORM
-fec3 ARABIC LETTER TAH INITIAL FORM
-fec4 ARABIC LETTER TAH MEDIAL FORM
-fec5 ARABIC LETTER ZAH ISOLATED FORM
-fec6 ARABIC LETTER ZAH FINAL FORM
-fec7 ARABIC LETTER ZAH INITIAL FORM
-fec8 ARABIC LETTER ZAH MEDIAL FORM
-fec9 ARABIC LETTER AIN ISOLATED FORM
-feca ARABIC LETTER AIN FINAL FORM
-fecb ARABIC LETTER AIN INITIAL FORM
-fecc ARABIC LETTER AIN MEDIAL FORM
-fecd ARABIC LETTER GHAIN ISOLATED FORM
-fece ARABIC LETTER GHAIN FINAL FORM
-fecf ARABIC LETTER GHAIN INITIAL FORM
-fed0 ARABIC LETTER GHAIN MEDIAL FORM
-fed1 ARABIC LETTER FEH ISOLATED FORM
-fed2 ARABIC LETTER FEH FINAL FORM
-fed3 ARABIC LETTER FEH INITIAL FORM
-fed4 ARABIC LETTER FEH MEDIAL FORM
-fed5 ARABIC LETTER QAF ISOLATED FORM
-fed6 ARABIC LETTER QAF FINAL FORM
-fed7 ARABIC LETTER QAF INITIAL FORM
-fed8 ARABIC LETTER QAF MEDIAL FORM
-fed9 ARABIC LETTER KAF ISOLATED FORM
-feda ARABIC LETTER KAF FINAL FORM
-fedb ARABIC LETTER KAF INITIAL FORM
-fedc ARABIC LETTER KAF MEDIAL FORM
-fedd ARABIC LETTER LAM ISOLATED FORM
-fede ARABIC LETTER LAM FINAL FORM
-fedf ARABIC LETTER LAM INITIAL FORM
-fee0 ARABIC LETTER LAM MEDIAL FORM
-fee1 ARABIC LETTER MEEM ISOLATED FORM
-fee2 ARABIC LETTER MEEM FINAL FORM
-fee3 ARABIC LETTER MEEM INITIAL FORM
-fee4 ARABIC LETTER MEEM MEDIAL FORM
-fee5 ARABIC LETTER NOON ISOLATED FORM
-fee6 ARABIC LETTER NOON FINAL FORM
-fee7 ARABIC LETTER NOON INITIAL FORM
-fee8 ARABIC LETTER NOON MEDIAL FORM
-fee9 ARABIC LETTER HEH ISOLATED FORM
-feea ARABIC LETTER HEH FINAL FORM
-feeb ARABIC LETTER HEH INITIAL FORM
-feec ARABIC LETTER HEH MEDIAL FORM
-feed ARABIC LETTER WAW ISOLATED FORM
-feee ARABIC LETTER WAW FINAL FORM
-feef ARABIC LETTER ALEF MAKSURA ISOLATED FORM
-fef0 ARABIC LETTER ALEF MAKSURA FINAL FORM
-fef1 ARABIC LETTER YEH ISOLATED FORM
-fef2 ARABIC LETTER YEH FINAL FORM
-fef3 ARABIC LETTER YEH INITIAL FORM
-fef4 ARABIC LETTER YEH MEDIAL FORM
-fef5 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
-fef6 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
-fef7 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
-fef8 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
-fef9 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
-fefa ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
-fefb ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-fefc ARABIC LIGATURE LAM WITH ALEF FINAL FORM
-feff ZERO WIDTH NO-BREAK SPACE
-ff01 FULLWIDTH EXCLAMATION MARK
-ff02 FULLWIDTH QUOTATION MARK
-ff03 FULLWIDTH NUMBER SIGN
-ff04 FULLWIDTH DOLLAR SIGN
-ff05 FULLWIDTH PERCENT SIGN
-ff06 FULLWIDTH AMPERSAND
-ff07 FULLWIDTH APOSTROPHE
-ff08 FULLWIDTH LEFT PARENTHESIS
-ff09 FULLWIDTH RIGHT PARENTHESIS
-ff0a FULLWIDTH ASTERISK
-ff0b FULLWIDTH PLUS SIGN
-ff0c FULLWIDTH COMMA
-ff0d FULLWIDTH HYPHEN-MINUS
-ff0e FULLWIDTH FULL STOP
-ff0f FULLWIDTH SOLIDUS
-ff10 FULLWIDTH DIGIT ZERO
-ff11 FULLWIDTH DIGIT ONE
-ff12 FULLWIDTH DIGIT TWO
-ff13 FULLWIDTH DIGIT THREE
-ff14 FULLWIDTH DIGIT FOUR
-ff15 FULLWIDTH DIGIT FIVE
-ff16 FULLWIDTH DIGIT SIX
-ff17 FULLWIDTH DIGIT SEVEN
-ff18 FULLWIDTH DIGIT EIGHT
-ff19 FULLWIDTH DIGIT NINE
-ff1a FULLWIDTH COLON
-ff1b FULLWIDTH SEMICOLON
-ff1c FULLWIDTH LESS-THAN SIGN
-ff1d FULLWIDTH EQUALS SIGN
-ff1e FULLWIDTH GREATER-THAN SIGN
-ff1f FULLWIDTH QUESTION MARK
-ff20 FULLWIDTH COMMERCIAL AT
-ff21 FULLWIDTH LATIN CAPITAL LETTER A
-ff22 FULLWIDTH LATIN CAPITAL LETTER B
-ff23 FULLWIDTH LATIN CAPITAL LETTER C
-ff24 FULLWIDTH LATIN CAPITAL LETTER D
-ff25 FULLWIDTH LATIN CAPITAL LETTER E
-ff26 FULLWIDTH LATIN CAPITAL LETTER F
-ff27 FULLWIDTH LATIN CAPITAL LETTER G
-ff28 FULLWIDTH LATIN CAPITAL LETTER H
-ff29 FULLWIDTH LATIN CAPITAL LETTER I
-ff2a FULLWIDTH LATIN CAPITAL LETTER J
-ff2b FULLWIDTH LATIN CAPITAL LETTER K
-ff2c FULLWIDTH LATIN CAPITAL LETTER L
-ff2d FULLWIDTH LATIN CAPITAL LETTER M
-ff2e FULLWIDTH LATIN CAPITAL LETTER N
-ff2f FULLWIDTH LATIN CAPITAL LETTER O
-ff30 FULLWIDTH LATIN CAPITAL LETTER P
-ff31 FULLWIDTH LATIN CAPITAL LETTER Q
-ff32 FULLWIDTH LATIN CAPITAL LETTER R
-ff33 FULLWIDTH LATIN CAPITAL LETTER S
-ff34 FULLWIDTH LATIN CAPITAL LETTER T
-ff35 FULLWIDTH LATIN CAPITAL LETTER U
-ff36 FULLWIDTH LATIN CAPITAL LETTER V
-ff37 FULLWIDTH LATIN CAPITAL LETTER W
-ff38 FULLWIDTH LATIN CAPITAL LETTER X
-ff39 FULLWIDTH LATIN CAPITAL LETTER Y
-ff3a FULLWIDTH LATIN CAPITAL LETTER Z
-ff3b FULLWIDTH LEFT SQUARE BRACKET
-ff3c FULLWIDTH REVERSE SOLIDUS
-ff3d FULLWIDTH RIGHT SQUARE BRACKET
-ff3e FULLWIDTH CIRCUMFLEX ACCENT
-ff3f FULLWIDTH LOW LINE
-ff40 FULLWIDTH GRAVE ACCENT
-ff41 FULLWIDTH LATIN SMALL LETTER A
-ff42 FULLWIDTH LATIN SMALL LETTER B
-ff43 FULLWIDTH LATIN SMALL LETTER C
-ff44 FULLWIDTH LATIN SMALL LETTER D
-ff45 FULLWIDTH LATIN SMALL LETTER E
-ff46 FULLWIDTH LATIN SMALL LETTER F
-ff47 FULLWIDTH LATIN SMALL LETTER G
-ff48 FULLWIDTH LATIN SMALL LETTER H
-ff49 FULLWIDTH LATIN SMALL LETTER I
-ff4a FULLWIDTH LATIN SMALL LETTER J
-ff4b FULLWIDTH LATIN SMALL LETTER K
-ff4c FULLWIDTH LATIN SMALL LETTER L
-ff4d FULLWIDTH LATIN SMALL LETTER M
-ff4e FULLWIDTH LATIN SMALL LETTER N
-ff4f FULLWIDTH LATIN SMALL LETTER O
-ff50 FULLWIDTH LATIN SMALL LETTER P
-ff51 FULLWIDTH LATIN SMALL LETTER Q
-ff52 FULLWIDTH LATIN SMALL LETTER R
-ff53 FULLWIDTH LATIN SMALL LETTER S
-ff54 FULLWIDTH LATIN SMALL LETTER T
-ff55 FULLWIDTH LATIN SMALL LETTER U
-ff56 FULLWIDTH LATIN SMALL LETTER V
-ff57 FULLWIDTH LATIN SMALL LETTER W
-ff58 FULLWIDTH LATIN SMALL LETTER X
-ff59 FULLWIDTH LATIN SMALL LETTER Y
-ff5a FULLWIDTH LATIN SMALL LETTER Z
-ff5b FULLWIDTH LEFT CURLY BRACKET
-ff5c FULLWIDTH VERTICAL LINE
-ff5d FULLWIDTH RIGHT CURLY BRACKET
-ff5e FULLWIDTH TILDE
-ff61 HALFWIDTH IDEOGRAPHIC FULL STOP
-ff62 HALFWIDTH LEFT CORNER BRACKET
-ff63 HALFWIDTH RIGHT CORNER BRACKET
-ff64 HALFWIDTH IDEOGRAPHIC COMMA
-ff65 HALFWIDTH KATAKANA MIDDLE DOT
-ff66 HALFWIDTH KATAKANA LETTER WO
-ff67 HALFWIDTH KATAKANA LETTER SMALL A
-ff68 HALFWIDTH KATAKANA LETTER SMALL I
-ff69 HALFWIDTH KATAKANA LETTER SMALL U
-ff6a HALFWIDTH KATAKANA LETTER SMALL E
-ff6b HALFWIDTH KATAKANA LETTER SMALL O
-ff6c HALFWIDTH KATAKANA LETTER SMALL YA
-ff6d HALFWIDTH KATAKANA LETTER SMALL YU
-ff6e HALFWIDTH KATAKANA LETTER SMALL YO
-ff6f HALFWIDTH KATAKANA LETTER SMALL TU
-ff70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-ff71 HALFWIDTH KATAKANA LETTER A
-ff72 HALFWIDTH KATAKANA LETTER I
-ff73 HALFWIDTH KATAKANA LETTER U
-ff74 HALFWIDTH KATAKANA LETTER E
-ff75 HALFWIDTH KATAKANA LETTER O
-ff76 HALFWIDTH KATAKANA LETTER KA
-ff77 HALFWIDTH KATAKANA LETTER KI
-ff78 HALFWIDTH KATAKANA LETTER KU
-ff79 HALFWIDTH KATAKANA LETTER KE
-ff7a HALFWIDTH KATAKANA LETTER KO
-ff7b HALFWIDTH KATAKANA LETTER SA
-ff7c HALFWIDTH KATAKANA LETTER SI
-ff7d HALFWIDTH KATAKANA LETTER SU
-ff7e HALFWIDTH KATAKANA LETTER SE
-ff7f HALFWIDTH KATAKANA LETTER SO
-ff80 HALFWIDTH KATAKANA LETTER TA
-ff81 HALFWIDTH KATAKANA LETTER TI
-ff82 HALFWIDTH KATAKANA LETTER TU
-ff83 HALFWIDTH KATAKANA LETTER TE
-ff84 HALFWIDTH KATAKANA LETTER TO
-ff85 HALFWIDTH KATAKANA LETTER NA
-ff86 HALFWIDTH KATAKANA LETTER NI
-ff87 HALFWIDTH KATAKANA LETTER NU
-ff88 HALFWIDTH KATAKANA LETTER NE
-ff89 HALFWIDTH KATAKANA LETTER NO
-ff8a HALFWIDTH KATAKANA LETTER HA
-ff8b HALFWIDTH KATAKANA LETTER HI
-ff8c HALFWIDTH KATAKANA LETTER HU
-ff8d HALFWIDTH KATAKANA LETTER HE
-ff8e HALFWIDTH KATAKANA LETTER HO
-ff8f HALFWIDTH KATAKANA LETTER MA
-ff90 HALFWIDTH KATAKANA LETTER MI
-ff91 HALFWIDTH KATAKANA LETTER MU
-ff92 HALFWIDTH KATAKANA LETTER ME
-ff93 HALFWIDTH KATAKANA LETTER MO
-ff94 HALFWIDTH KATAKANA LETTER YA
-ff95 HALFWIDTH KATAKANA LETTER YU
-ff96 HALFWIDTH KATAKANA LETTER YO
-ff97 HALFWIDTH KATAKANA LETTER RA
-ff98 HALFWIDTH KATAKANA LETTER RI
-ff99 HALFWIDTH KATAKANA LETTER RU
-ff9a HALFWIDTH KATAKANA LETTER RE
-ff9b HALFWIDTH KATAKANA LETTER RO
-ff9c HALFWIDTH KATAKANA LETTER WA
-ff9d HALFWIDTH KATAKANA LETTER N
-ff9e HALFWIDTH KATAKANA VOICED SOUND MARK
-ff9f HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-ffa0 HALFWIDTH HANGUL FILLER
-ffa1 HALFWIDTH HANGUL LETTER KIYEOK
-ffa2 HALFWIDTH HANGUL LETTER SSANGKIYEOK
-ffa3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS
-ffa4 HALFWIDTH HANGUL LETTER NIEUN
-ffa5 HALFWIDTH HANGUL LETTER NIEUN-CIEUC
-ffa6 HALFWIDTH HANGUL LETTER NIEUN-HIEUH
-ffa7 HALFWIDTH HANGUL LETTER TIKEUT
-ffa8 HALFWIDTH HANGUL LETTER SSANGTIKEUT
-ffa9 HALFWIDTH HANGUL LETTER RIEUL
-ffaa HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
-ffab HALFWIDTH HANGUL LETTER RIEUL-MIEUM
-ffac HALFWIDTH HANGUL LETTER RIEUL-PIEUP
-ffad HALFWIDTH HANGUL LETTER RIEUL-SIOS
-ffae HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
-ffaf HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
-ffb0 HALFWIDTH HANGUL LETTER RIEUL-HIEUH
-ffb1 HALFWIDTH HANGUL LETTER MIEUM
-ffb2 HALFWIDTH HANGUL LETTER PIEUP
-ffb3 HALFWIDTH HANGUL LETTER SSANGPIEUP
-ffb4 HALFWIDTH HANGUL LETTER PIEUP-SIOS
-ffb5 HALFWIDTH HANGUL LETTER SIOS
-ffb6 HALFWIDTH HANGUL LETTER SSANGSIOS
-ffb7 HALFWIDTH HANGUL LETTER IEUNG
-ffb8 HALFWIDTH HANGUL LETTER CIEUC
-ffb9 HALFWIDTH HANGUL LETTER SSANGCIEUC
-ffba HALFWIDTH HANGUL LETTER CHIEUCH
-ffbb HALFWIDTH HANGUL LETTER KHIEUKH
-ffbc HALFWIDTH HANGUL LETTER THIEUTH
-ffbd HALFWIDTH HANGUL LETTER PHIEUPH
-ffbe HALFWIDTH HANGUL LETTER HIEUH
-ffc2 HALFWIDTH HANGUL LETTER A
-ffc3 HALFWIDTH HANGUL LETTER AE
-ffc4 HALFWIDTH HANGUL LETTER YA
-ffc5 HALFWIDTH HANGUL LETTER YAE
-ffc6 HALFWIDTH HANGUL LETTER EO
-ffc7 HALFWIDTH HANGUL LETTER E
-ffca HALFWIDTH HANGUL LETTER YEO
-ffcb HALFWIDTH HANGUL LETTER YE
-ffcc HALFWIDTH HANGUL LETTER O
-ffcd HALFWIDTH HANGUL LETTER WA
-ffce HALFWIDTH HANGUL LETTER WAE
-ffcf HALFWIDTH HANGUL LETTER OE
-ffd2 HALFWIDTH HANGUL LETTER YO
-ffd3 HALFWIDTH HANGUL LETTER U
-ffd4 HALFWIDTH HANGUL LETTER WEO
-ffd5 HALFWIDTH HANGUL LETTER WE
-ffd6 HALFWIDTH HANGUL LETTER WI
-ffd7 HALFWIDTH HANGUL LETTER YU
-ffda HALFWIDTH HANGUL LETTER EU
-ffdb HALFWIDTH HANGUL LETTER YI
-ffdc HALFWIDTH HANGUL LETTER I
-ffe0 FULLWIDTH CENT SIGN
-ffe1 FULLWIDTH POUND SIGN
-ffe2 FULLWIDTH NOT SIGN
-ffe3 FULLWIDTH MACRON
-ffe4 FULLWIDTH BROKEN BAR
-ffe5 FULLWIDTH YEN SIGN
-ffe6 FULLWIDTH WON SIGN
-ffe8 HALFWIDTH FORMS LIGHT VERTICAL
-ffe9 HALFWIDTH LEFTWARDS ARROW
-ffea HALFWIDTH UPWARDS ARROW
-ffeb HALFWIDTH RIGHTWARDS ARROW
-ffec HALFWIDTH DOWNWARDS ARROW
-ffed HALFWIDTH BLACK SQUARE
-ffee HALFWIDTH WHITE CIRCLE
-fff9 INTERLINEAR ANNOTATION ANCHOR
-fffa INTERLINEAR ANNOTATION SEPARATOR
-fffb INTERLINEAR ANNOTATION TERMINATOR
-fffc OBJECT REPLACEMENT CHARACTER
-fffd REPLACEMENT CHARACTER
-f0000 ffffd <Plane 15 Private Use, First>
-100000 10fffd <Plane 16 Private Use, First>
-END
diff --git a/contrib/perl5/lib/unicode/Names.txt b/contrib/perl5/lib/unicode/Names.txt
deleted file mode 100644
index aa3dce0..0000000
--- a/contrib/perl5/lib/unicode/Names.txt
+++ /dev/null
@@ -1,17271 +0,0 @@
-@@@ The Unicode Standard 3.0
-@@@+ Final Draft UC3M990825.lst
- More annotation fixes for Tibetan.
- Annotation added for 2231..2233.
-@@ 0000 C0 Controls and Basic Latin (Basic Latin) 007F
-@ C0 controls
-@+ Alias names are those for ISO 6429.
-0000 <control>
- = NULL
-0001 <control>
- = START OF HEADING
-0002 <control>
- = START OF TEXT
-0003 <control>
- = END OF TEXT
-0004 <control>
- = END OF TRANSMISSION
-0005 <control>
- = ENQUIRY
-0006 <control>
- = ACKNOWLEDGE
-0007 <control>
- = BELL
-0008 <control>
- = BACKSPACE
-0009 <control>
- = HORIZONTAL TABULATION
-000A <control>
- = LINE FEED
-000B <control>
- = VERTICAL TABULATION
-000C <control>
- = FORM FEED
-000D <control>
- = CARRIAGE RETURN
-000E <control>
- = SHIFT OUT
-000F <control>
- = SHIFT IN
-0010 <control>
- = DATA LINK ESCAPE
-0011 <control>
- = DEVICE CONTROL ONE
-0012 <control>
- = DEVICE CONTROL TWO
-0013 <control>
- = DEVICE CONTROL THREE
-0014 <control>
- = DEVICE CONTROL FOUR
-0015 <control>
- = NEGATIVE ACKNOWLEDGE
-0016 <control>
- = SYNCHRONOUS IDLE
-0017 <control>
- = END OF TRANSMISSION BLOCK
-0018 <control>
- = CANCEL
-0019 <control>
- = END OF MEDIUM
-001A <control>
- = SUBSTITUTE
- x (replacement character - FFFD)
-001B <control>
- = ESCAPE
-001C <control>
- = FILE SEPARATOR
-001D <control>
- = GROUP SEPARATOR
-001E <control>
- = RECORD SEPARATOR
-001F <control>
- = UNIT SEPARATOR
-@ ASCII
-0020 SPACE
- * sometimes considered a control code
- * other space characters: 2000-200A
- x (no-break space - 00A0)
- x (zero width space - 200B)
- x (ideographic space - 3000)
- x (zero width no-break space - FEFF)
-0021 EXCLAMATION MARK
- = factorial
- = bang
- x (inverted exclamation mark - 00A1)
- x (latin letter retroflex click - 01C3)
- x (double exclamation mark - 203C)
- x (interrobang - 203D)
- x (heavy exclamation mark ornament - 2762)
-0022 QUOTATION MARK
- = APL quote
- * neutral (vertical), used as opening or closing quotation mark
- * preferred characters in English for paired quotation marks are 201C & 201D
- x (modifier letter double prime - 02BA)
- x (combining double acute accent - 030B)
- x (combining double vertical line above - 030E)
- x (double prime - 2033)
- x (ditto mark - 3003)
-0023 NUMBER SIGN
- = pound sign, hash, crosshatch, octothorpe
-0024 DOLLAR SIGN
- = milreis, escudo
- * glyph may have one or two vertical bars
- * other currency symbol characters: 20A0-20AF
- x (currency sign - 00A4)
-0025 PERCENT SIGN
- x (arabic percent sign - 066A)
- x (per mille sign - 2030)
- x (per ten thousand sign - 2031)
-0026 AMPERSAND
-0027 APOSTROPHE
- = APOSTROPHE-QUOTE
- * neutral (vertical) glyph having mixed usage
- * preferred character for apostrophe is 2019
- * preferred characters in English for paired quotation marks are 2018 & 2019
- x (modifier letter prime - 02B9)
- x (modifier letter apostrophe - 02BC)
- x (modifier letter vertical line - 02C8)
- x (combining acute accent - 0301)
- x (prime - 2032)
-0028 LEFT PARENTHESIS
- = OPENING PARENTHESIS
-0029 RIGHT PARENTHESIS
- = CLOSING PARENTHESIS
- * see discussion on semantics of paired bracketing characters
-002A ASTERISK
- = star (on phone keypads)
- x (arabic five pointed star - 066D)
- x (asterisk operator - 2217)
- x (heavy asterisk - 2731)
-002B PLUS SIGN
-002C COMMA
- = decimal separator
- x (arabic comma - 060C)
- x (single low-9 quotation mark - 201A)
- x (ideographic comma - 3001)
-002D HYPHEN-MINUS
- = hyphen or minus sign
- * used for either hyphen or minus sign
- x (hyphen - 2010)
- x (non-breaking hyphen - 2011)
- x (figure dash - 2012)
- x (en dash - 2013)
- x (minus sign - 2212)
-002E FULL STOP
- = PERIOD
- = dot, decimal point
- * may be rendered as a raised decimal point in old style numbers
- x (arabic full stop - 06D4)
- x (ideographic full stop - 3002)
-002F SOLIDUS
- = SLASH
- = virgule, shilling (British)
- x (latin letter dental click - 01C0)
- x (combining long solidus overlay - 0338)
- x (fraction slash - 2044)
- x (division slash - 2215)
-0030 DIGIT ZERO
-0031 DIGIT ONE
-0032 DIGIT TWO
-0033 DIGIT THREE
-0034 DIGIT FOUR
-0035 DIGIT FIVE
-0036 DIGIT SIX
-0037 DIGIT SEVEN
-0038 DIGIT EIGHT
-0039 DIGIT NINE
-003A COLON
- x (armenian full stop - 0589)
- x (ratio - 2236)
-003B SEMICOLON
- x (greek question mark - 037E)
- x (arabic semicolon - 061B)
-003C LESS-THAN SIGN
- x (single left-pointing angle quotation mark - 2039)
- x (left-pointing angle bracket - 2329)
- x (left angle bracket - 3008)
-003D EQUALS SIGN
- * other related characters: 2241-2263
- x (not equal to - 2260)
- x (identical to - 2261)
-003E GREATER-THAN SIGN
- x (single right-pointing angle quotation mark - 203A)
- x (right-pointing angle bracket - 232A)
- x (right angle bracket - 3009)
-003F QUESTION MARK
- x (inverted question mark - 00BF)
- x (greek question mark - 037E)
- x (arabic question mark - 061F)
- x (interrobang - 203D)
- x (question exclamation mark - 2048)
- x (exclamation question mark - 2049)
-0040 COMMERCIAL AT
-0041 LATIN CAPITAL LETTER A
-0042 LATIN CAPITAL LETTER B
- x (script capital b - 212C)
-0043 LATIN CAPITAL LETTER C
- x (double-struck capital c - 2102)
- x (black-letter capital c - 212D)
-0044 LATIN CAPITAL LETTER D
-0045 LATIN CAPITAL LETTER E
- x (euler constant - 2107)
- x (script capital e - 2130)
-0046 LATIN CAPITAL LETTER F
- x (script capital f - 2131)
- x (turned capital f - 2132)
-0047 LATIN CAPITAL LETTER G
-0048 LATIN CAPITAL LETTER H
- x (script capital h - 210B)
- x (black-letter capital h - 210C)
- x (double-struck capital h - 210D)
-0049 LATIN CAPITAL LETTER I
- * Turkish and Azerbaijani use 0131 for lowercase
- x (latin capital letter i with dot above - 0130)
- x (cyrillic capital letter byelorussian-ukrainian i - 0406)
- x (cyrillic letter palochka - 04C0)
- x (script capital i - 2110)
- x (black-letter capital i - 2111)
- x (roman numeral one - 2160)
-004A LATIN CAPITAL LETTER J
-004B LATIN CAPITAL LETTER K
- x (kelvin sign - 212A)
-004C LATIN CAPITAL LETTER L
- x (script capital l - 2112)
-004D LATIN CAPITAL LETTER M
- x (script capital m - 2133)
-004E LATIN CAPITAL LETTER N
- x (double-struck capital n - 2115)
-004F LATIN CAPITAL LETTER O
-0050 LATIN CAPITAL LETTER P
- x (double-struck capital p - 2119)
-0051 LATIN CAPITAL LETTER Q
- x (double-struck capital q - 211A)
-0052 LATIN CAPITAL LETTER R
- x (script capital r - 211B)
- x (black-letter capital r - 211C)
- x (double-struck capital r - 211D)
-0053 LATIN CAPITAL LETTER S
-0054 LATIN CAPITAL LETTER T
-0055 LATIN CAPITAL LETTER U
-0056 LATIN CAPITAL LETTER V
-0057 LATIN CAPITAL LETTER W
-0058 LATIN CAPITAL LETTER X
-0059 LATIN CAPITAL LETTER Y
-005A LATIN CAPITAL LETTER Z
- x (double-struck capital z - 2124)
- x (black-letter capital z - 2128)
-005B LEFT SQUARE BRACKET
- = OPENING SQUARE BRACKET
- * other bracket characters: 3008-301B
-005C REVERSE SOLIDUS
- = BACKSLASH
- x (set minus - 2216)
-005D RIGHT SQUARE BRACKET
- = CLOSING SQUARE BRACKET
-005E CIRCUMFLEX ACCENT
- * this is a spacing character
- x (modifier letter up arrowhead - 02C4)
- x (modifier letter circumflex accent - 02C6)
- x (combining circumflex accent - 0302)
- x (up arrowhead - 2303)
-005F LOW LINE
- = SPACING UNDERSCORE
- * this is a spacing character
- x (modifier letter low macron - 02CD)
- x (combining macron below - 0331)
- x (combining low line - 0332)
- x (double low line - 2017)
-0060 GRAVE ACCENT
- * this is a spacing character
- x (modifier letter grave accent - 02CB)
- x (combining grave accent - 0300)
- x (reversed prime - 2035)
-0061 LATIN SMALL LETTER A
-0062 LATIN SMALL LETTER B
-0063 LATIN SMALL LETTER C
-0064 LATIN SMALL LETTER D
-0065 LATIN SMALL LETTER E
- x (estimated symbol - 212E)
- x (script small e - 212F)
-0066 LATIN SMALL LETTER F
-0067 LATIN SMALL LETTER G
- x (latin small letter script g - 0261)
- x (script small g - 210A)
-0068 LATIN SMALL LETTER H
- x (cyrillic small letter shha - 04BB)
- x (planck constant - 210E)
-0069 LATIN SMALL LETTER I
- * Turkish and Azerbaijani use 0130 for uppercase
- x (latin small letter dotless i - 0131)
-006A LATIN SMALL LETTER J
-006B LATIN SMALL LETTER K
-006C LATIN SMALL LETTER L
- x (script small l - 2113)
-006D LATIN SMALL LETTER M
-006E LATIN SMALL LETTER N
- x (superscript latin small letter n - 207F)
-006F LATIN SMALL LETTER O
- x (script small o - 2134)
-0070 LATIN SMALL LETTER P
-0071 LATIN SMALL LETTER Q
-0072 LATIN SMALL LETTER R
-0073 LATIN SMALL LETTER S
-0074 LATIN SMALL LETTER T
-0075 LATIN SMALL LETTER U
-0076 LATIN SMALL LETTER V
-0077 LATIN SMALL LETTER W
-0078 LATIN SMALL LETTER X
-0079 LATIN SMALL LETTER Y
-007A LATIN SMALL LETTER Z
- x (latin small letter z with stroke - 01B6)
-007B LEFT CURLY BRACKET
- = OPENING CURLY BRACKET
- = opening brace
-007C VERTICAL LINE
- = VERTICAL BAR
- * used in pairs to indicate absolute value
- x (latin letter dental click - 01C0)
- x (divides - 2223)
- x (light vertical bar - 2758)
-007D RIGHT CURLY BRACKET
- = CLOSING CURLY BRACKET
- = closing brace
-007E TILDE
- * this is a spacing character
- x (small tilde - 02DC)
- x (combining tilde - 0303)
- x (tilde operator - 223C)
- x (fullwidth tilde - FF5E)
-007F <control>
- = DELETE
-@@ 0080 C1 Controls and Latin-1 Supplement (Latin-1 Supplement) 00FF
-@ C1 controls
-@+ Alias names are those for ISO 6429.
-0080 <control>
-0081 <control>
-0082 <control>
- = BREAK PERMITTED HERE
-0083 <control>
- = NO BREAK HERE
-0084 <control>
- = INDEX
-0085 <control>
- = NEXT LINE
-0086 <control>
- = START OF SELECTED AREA
-0087 <control>
- = END OF SELECTED AREA
-0088 <control>
- = CHARACTER TABULATION SET
-0089 <control>
- = CHARACTER TABULATION WITH JUSTIFICATION
-008A <control>
- = LINE TABULATION SET
-008B <control>
- = PARTIAL LINE DOWN
-008C <control>
- = PARTIAL LINE UP
-008D <control>
- = REVERSE LINE FEED
-008E <control>
- = SINGLE SHIFT TWO
-008F <control>
- = SINGLE SHIFT THREE
-0090 <control>
- = DEVICE CONTROL STRING
-0091 <control>
- = PRIVATE USE ONE
-0092 <control>
- = PRIVATE USE TWO
-0093 <control>
- = SET TRANSMIT STATE
-0094 <control>
- = CANCEL CHARACTER
-0095 <control>
- = MESSAGE WAITING
-0096 <control>
- = START OF GUARDED AREA
-0097 <control>
- = END OF GUARDED AREA
-0098 <control>
- = START OF STRING
-0099 <control>
-009A <control>
- = SINGLE CHARACTER INTRODUCER
-009B <control>
- = CONTROL SEQUENCE INTRODUCER
-009C <control>
- = STRING TERMINATOR
-009D <control>
- = OPERATING SYSTEM COMMAND
-009E <control>
- = PRIVACY MESSAGE
-009F <control>
- = APPLICATION PROGRAM COMMAND
-@ ISO 8859-1 (aka Latin-1)
-00A0 NO-BREAK SPACE
- x (space - 0020)
- x (figure space - 2007)
- x (narrow no-break space - 202F)
- x (zero width no-break space - FEFF)
- # <noBreak> 0020
-00A1 INVERTED EXCLAMATION MARK
- * Spanish, Asturian, Galician
- x (exclamation mark - 0021)
-00A2 CENT SIGN
-00A3 POUND SIGN
- = pound sterling, Irish punt
- x (lira sign - 20A4)
-00A4 CURRENCY SIGN
- * other currency symbol characters: 20A0-20AF
- x (dollar sign - 0024)
-00A5 YEN SIGN
- = yuan sign
- * glyph may have one or two crossbars
-00A6 BROKEN BAR
- = BROKEN VERTICAL BAR
- = parted rule (in typography)
-00A7 SECTION SIGN
- * paragraph sign in some European usage
-00A8 DIAERESIS
- * this is a spacing character
- x (combining diaeresis - 0308)
- # 0020 0308
-00A9 COPYRIGHT SIGN
- x (sound recording copyright - 2117)
-00AA FEMININE ORDINAL INDICATOR
- * Spanish
- # <super> 0061
-00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK *
- = LEFT POINTING GUILLEMET
- = chevrons (in typography)
- * usually opening, sometimes closing
- x (much less-than - 226A)
- x (left double angle bracket - 300A)
-00AC NOT SIGN
- = angled dash (in typography)
- x (reversed not sign - 2310)
-00AD SOFT HYPHEN
- = discretionary hyphen
- x (mongolian todo soft hyphen - 1806)
-00AE REGISTERED SIGN
- = REGISTERED TRADE MARK SIGN
-00AF MACRON
- = overline, APL overbar
- * this is a spacing character
- x (modifier letter macron - 02C9)
- x (combining macron - 0304)
- x (combining overline - 0305)
- # 0020 0304
-00B0 DEGREE SIGN
- * this is a spacing character
- x (ring above - 02DA)
- x (combining ring above - 030A)
- x (superscript zero - 2070)
- x (ring operator - 2218)
-00B1 PLUS-MINUS SIGN
- x (minus-or-plus sign - 2213)
-00B2 SUPERSCRIPT TWO
- = squared
- * other superscript digit characters: 2070-2079
- x (superscript one - 00B9)
- # <super> 0032
-00B3 SUPERSCRIPT THREE
- = cubed
- x (superscript one - 00B9)
- # <super> 0033
-00B4 ACUTE ACCENT
- * this is a spacing character
- x (modifier letter prime - 02B9)
- x (modifier letter acute accent - 02CA)
- x (combining acute accent - 0301)
- x (prime - 2032)
- # 0020 0301
-00B5 MICRO SIGN
- # 03BC greek small letter mu
-00B6 PILCROW SIGN
- = PARAGRAPH SIGN
- * section sign in some European usage
- x (reversed pilcrow sign - 204B)
- x (curved stem paragraph sign ornament - 2761)
-00B7 MIDDLE DOT
- = midpoint (in typography)
- = Georgian comma
- = Greek middle dot
- x (bullet - 2022)
- x (one dot leader - 2024)
- x (hyphenation point - 2027)
- x (bullet operator - 2219)
- x (dot operator - 22C5)
- x (katakana middle dot - 30FB)
-00B8 CEDILLA
- * this is a spacing character
- * other spacing accent characters: 02D8-02DB
- x (combining cedilla - 0327)
- # 0020 0327
-00B9 SUPERSCRIPT ONE
- x (superscript two - 00B2)
- x (superscript three - 00B3)
- # <super> 0031
-00BA MASCULINE ORDINAL INDICATOR
- * Spanish
- # <super> 006F
-00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
- = RIGHT POINTING GUILLEMET
- * usually closing, sometimes opening
- x (much greater-than - 226B)
- x (right double angle bracket - 300B)
-00BC VULGAR FRACTION ONE QUARTER
- * bar may be horizontal or slanted
- * other fraction characters: 2153-215E
- # 0031 2044 0034
-00BD VULGAR FRACTION ONE HALF
- * bar may be horizontal or slanted
- # 0031 2044 0032
-00BE VULGAR FRACTION THREE QUARTERS
- * bar may be horizontal or slanted
- # 0033 2044 0034
-00BF INVERTED QUESTION MARK
- = turned question mark
- * Spanish
- x (question mark - 003F)
-00C0 LATIN CAPITAL LETTER A WITH GRAVE
- : 0041 0300
-00C1 LATIN CAPITAL LETTER A WITH ACUTE
- : 0041 0301
-00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
- : 0041 0302
-00C3 LATIN CAPITAL LETTER A WITH TILDE
- : 0041 0303
-00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
- : 0041 0308
-00C5 LATIN CAPITAL LETTER A WITH RING ABOVE
- x (angstrom sign - 212B)
- : 0041 030A
-00C6 LATIN CAPITAL LETTER AE (ash) *
- = LATIN CAPITAL LIGATURE AE
-00C7 LATIN CAPITAL LETTER C WITH CEDILLA
- : 0043 0327
-00C8 LATIN CAPITAL LETTER E WITH GRAVE
- : 0045 0300
-00C9 LATIN CAPITAL LETTER E WITH ACUTE
- : 0045 0301
-00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX
- : 0045 0302
-00CB LATIN CAPITAL LETTER E WITH DIAERESIS
- : 0045 0308
-00CC LATIN CAPITAL LETTER I WITH GRAVE
- : 0049 0300
-00CD LATIN CAPITAL LETTER I WITH ACUTE
- : 0049 0301
-00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
- : 0049 0302
-00CF LATIN CAPITAL LETTER I WITH DIAERESIS
- : 0049 0308
-00D0 LATIN CAPITAL LETTER ETH (Icelandic)
- x (latin small letter eth - 00F0)
- x (latin capital letter d with stroke - 0110)
- x (latin capital letter african d - 0189)
-00D1 LATIN CAPITAL LETTER N WITH TILDE
- : 004E 0303
-00D2 LATIN CAPITAL LETTER O WITH GRAVE
- : 004F 0300
-00D3 LATIN CAPITAL LETTER O WITH ACUTE
- : 004F 0301
-00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
- : 004F 0302
-00D5 LATIN CAPITAL LETTER O WITH TILDE
- : 004F 0303
-00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
- : 004F 0308
-00D7 MULTIPLICATION SIGN
- = z notation Cartesian product
-00D8 LATIN CAPITAL LETTER O WITH STROKE
- = LATIN CAPITAL LETTER O SLASH
- x (empty set - 2205)
-00D9 LATIN CAPITAL LETTER U WITH GRAVE
- : 0055 0300
-00DA LATIN CAPITAL LETTER U WITH ACUTE
- : 0055 0301
-00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
- : 0055 0302
-00DC LATIN CAPITAL LETTER U WITH DIAERESIS
- : 0055 0308
-00DD LATIN CAPITAL LETTER Y WITH ACUTE
- : 0059 0301
-00DE LATIN CAPITAL LETTER THORN (Icelandic)
-00DF LATIN SMALL LETTER SHARP S (German)
- = Eszett
- * German
- * uppercase is "SS"
- * in origin a ligature of 017F and 0073
- x (greek small letter beta - 03B2)
-00E0 LATIN SMALL LETTER A WITH GRAVE
- : 0061 0300
-00E1 LATIN SMALL LETTER A WITH ACUTE
- : 0061 0301
-00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
- : 0061 0302
-00E3 LATIN SMALL LETTER A WITH TILDE
- * Portuguese
- : 0061 0303
-00E4 LATIN SMALL LETTER A WITH DIAERESIS
- : 0061 0308
-00E5 LATIN SMALL LETTER A WITH RING ABOVE
- * Danish, Norwegian, Swedish, Walloon
- : 0061 030A
-00E6 LATIN SMALL LETTER AE (ash) *
- = LATIN SMALL LIGATURE AE
- = ash (from Old English æsc)
- * Danish, Norwegian, Icelandic, Faroese, Old English, French, IPA
- x (latin small ligature oe - 0153)
- x (cyrillic small ligature a ie - 04D5)
-00E7 LATIN SMALL LETTER C WITH CEDILLA
- : 0063 0327
-00E8 LATIN SMALL LETTER E WITH GRAVE
- : 0065 0300
-00E9 LATIN SMALL LETTER E WITH ACUTE
- : 0065 0301
-00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
- : 0065 0302
-00EB LATIN SMALL LETTER E WITH DIAERESIS
- : 0065 0308
-00EC LATIN SMALL LETTER I WITH GRAVE
- * Italian, Malagasy
- : 0069 0300
-00ED LATIN SMALL LETTER I WITH ACUTE
- : 0069 0301
-00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
- : 0069 0302
-00EF LATIN SMALL LETTER I WITH DIAERESIS
- : 0069 0308
-00F0 LATIN SMALL LETTER ETH (Icelandic)
- * Icelandic, Faroese, Old English, IPA
- x (latin capital letter eth - 00D0)
- x (greek small letter delta - 03B4)
- x (partial differential - 2202)
-00F1 LATIN SMALL LETTER N WITH TILDE
- : 006E 0303
-00F2 LATIN SMALL LETTER O WITH GRAVE
- : 006F 0300
-00F3 LATIN SMALL LETTER O WITH ACUTE
- : 006F 0301
-00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX
- : 006F 0302
-00F5 LATIN SMALL LETTER O WITH TILDE
- * Portuguese, Estonian
- : 006F 0303
-00F6 LATIN SMALL LETTER O WITH DIAERESIS
- : 006F 0308
-00F7 DIVISION SIGN
-00F8 LATIN SMALL LETTER O WITH STROKE
- = LATIN SMALL LETTER O SLASH
- * Danish, Norwegian, Faroese, IPA
-00F9 LATIN SMALL LETTER U WITH GRAVE
- * French, Italian
- : 0075 0300
-00FA LATIN SMALL LETTER U WITH ACUTE
- : 0075 0301
-00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
- : 0075 0302
-00FC LATIN SMALL LETTER U WITH DIAERESIS
- : 0075 0308
-00FD LATIN SMALL LETTER Y WITH ACUTE
- * Czech, Slovak, Icelandic, Faroese, Welsh, Malagasy
- : 0079 0301
-00FE LATIN SMALL LETTER THORN (Icelandic)
- * Icelandic, Old English, phonetics
- * Runic letter borrowed into Latin script
- x (runic letter thurisaz thurs thorn - 16A6)
-00FF LATIN SMALL LETTER Y WITH DIAERESIS
- * French
- x (latin capital letter y with diaeresis - 0178)
- : 0079 0308
-@@ 0100 Latin Extended-A 017F
-@ European Latin
-0100 LATIN CAPITAL LETTER A WITH MACRON
- : 0041 0304
-0101 LATIN SMALL LETTER A WITH MACRON
- * Latvian, Latin, ...
- : 0061 0304
-0102 LATIN CAPITAL LETTER A WITH BREVE
- : 0041 0306
-0103 LATIN SMALL LETTER A WITH BREVE
- * Romanian, Vietnamese, Latin, ...
- : 0061 0306
-0104 LATIN CAPITAL LETTER A WITH OGONEK
- : 0041 0328
-0105 LATIN SMALL LETTER A WITH OGONEK
- * Polish, Lithuanian, ...
- : 0061 0328
-0106 LATIN CAPITAL LETTER C WITH ACUTE
- : 0043 0301
-0107 LATIN SMALL LETTER C WITH ACUTE
- * Polish, Croatian, ...
- x (cyrillic small letter tshe - 045B)
- : 0063 0301
-0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
- : 0043 0302
-0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
- * Esperanto
- : 0063 0302
-010A LATIN CAPITAL LETTER C WITH DOT ABOVE
- : 0043 0307
-010B LATIN SMALL LETTER C WITH DOT ABOVE
- * Maltese, Irish Gaelic (old orthography)
- : 0063 0307
-010C LATIN CAPITAL LETTER C WITH CARON
- : 0043 030C
-010D LATIN SMALL LETTER C WITH CARON
- * Czech, Slovak, Slovenian, and many other languages
- : 0063 030C
-010E LATIN CAPITAL LETTER D WITH CARON
- * the form using caron/hacek is preferred in all contexts
- : 0044 030C
-010F LATIN SMALL LETTER D WITH CARON
- * Czech, Slovak
- * the form using apostrophe is preferred in typesetting
- : 0064 030C
-0110 LATIN CAPITAL LETTER D WITH STROKE
- x (latin capital letter eth - 00D0)
- x (latin small letter d with stroke - 0111)
- x (latin capital letter african d - 0189)
-0111 LATIN SMALL LETTER D WITH STROKE
- * Croatian, Vietnamese, Sámi
- x (latin capital letter d with stroke - 0110)
- x (cyrillic small letter dje - 0452)
-0112 LATIN CAPITAL LETTER E WITH MACRON
- : 0045 0304
-0113 LATIN SMALL LETTER E WITH MACRON
- * Latvian, Latin, ...
- : 0065 0304
-0114 LATIN CAPITAL LETTER E WITH BREVE
- : 0045 0306
-0115 LATIN SMALL LETTER E WITH BREVE
- * Malay, Latin, ...
- : 0065 0306
-0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
- : 0045 0307
-0117 LATIN SMALL LETTER E WITH DOT ABOVE
- * Lithuanian
- : 0065 0307
-0118 LATIN CAPITAL LETTER E WITH OGONEK
- : 0045 0328
-0119 LATIN SMALL LETTER E WITH OGONEK
- * Polish, Lithuanian, ...
- : 0065 0328
-011A LATIN CAPITAL LETTER E WITH CARON
- : 0045 030C
-011B LATIN SMALL LETTER E WITH CARON
- * Czech, ...
- : 0065 030C
-011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
- : 0047 0302
-011D LATIN SMALL LETTER G WITH CIRCUMFLEX
- * Esperanto
- : 0067 0302
-011E LATIN CAPITAL LETTER G WITH BREVE
- : 0047 0306
-011F LATIN SMALL LETTER G WITH BREVE
- * Turkish, Azerbaijani
- x (latin small letter g with caron - 01E7)
- : 0067 0306
-0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
- : 0047 0307
-0121 LATIN SMALL LETTER G WITH DOT ABOVE
- * Maltese, Irish Gaelic (old orthography)
- : 0067 0307
-0122 LATIN CAPITAL LETTER G WITH CEDILLA
- : 0047 0327
-0123 LATIN SMALL LETTER G WITH CEDILLA
- * Latvian
- * there are three major glyph variants
- : 0067 0327
-0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
- : 0048 0302
-0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
- * Esperanto
- : 0068 0302
-0126 LATIN CAPITAL LETTER H WITH STROKE
-0127 LATIN SMALL LETTER H WITH STROKE
- * Maltese, IPA, ...
- x (cyrillic small letter tshe - 045B)
- x (planck constant over two pi - 210F)
-0128 LATIN CAPITAL LETTER I WITH TILDE
- : 0049 0303
-0129 LATIN SMALL LETTER I WITH TILDE
- * Greenlandic (old orthography)
- : 0069 0303
-012A LATIN CAPITAL LETTER I WITH MACRON
- : 0049 0304
-012B LATIN SMALL LETTER I WITH MACRON
- * Latvian, Latin, ...
- : 0069 0304
-012C LATIN CAPITAL LETTER I WITH BREVE
- : 0049 0306
-012D LATIN SMALL LETTER I WITH BREVE
- * Latin, ...
- : 0069 0306
-012E LATIN CAPITAL LETTER I WITH OGONEK
- : 0049 0328
-012F LATIN SMALL LETTER I WITH OGONEK
- * Lithuanian, ...
- : 0069 0328
-0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
- = LATIN CAPITAL LETTER I DOT
- * Turkish, Azerbaijani
- * lowercase is 0069
- x (latin capital letter i - 0049)
- : 0049 0307
-0131 LATIN SMALL LETTER DOTLESS I
- * Turkish, Azerbaijani
- * uppercase is 0049
- x (latin small letter i - 0069)
-0132 LATIN CAPITAL LIGATURE IJ
- # 0049 004A
-0133 LATIN SMALL LIGATURE IJ
- * Dutch
- # 0069 006A
-0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
- : 004A 0302
-0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
- * Esperanto
- : 006A 0302
-0136 LATIN CAPITAL LETTER K WITH CEDILLA
- : 004B 0327
-0137 LATIN SMALL LETTER K WITH CEDILLA
- * Latvian
- : 006B 0327
-0138 LATIN SMALL LETTER KRA (Greenlandic)
- * Greenlandic (old orthography)
-0139 LATIN CAPITAL LETTER L WITH ACUTE
- : 004C 0301
-013A LATIN SMALL LETTER L WITH ACUTE
- * Slovak
- : 006C 0301
-013B LATIN CAPITAL LETTER L WITH CEDILLA
- : 004C 0327
-013C LATIN SMALL LETTER L WITH CEDILLA
- * Latvian
- : 006C 0327
-013D LATIN CAPITAL LETTER L WITH CARON
- : 004C 030C
-013E LATIN SMALL LETTER L WITH CARON
- * Slovak
- * the form using apostrophe is preferred in typesetting
- : 006C 030C
-013F LATIN CAPITAL LETTER L WITH MIDDLE DOT
- * some fonts show the middle dot inside the L, but the preferred form has the dot following the L
- # 004C 00B7
-0140 LATIN SMALL LETTER L WITH MIDDLE DOT
- * Catalan
- # 006C 00B7
-0141 LATIN CAPITAL LETTER L WITH STROKE
-0142 LATIN SMALL LETTER L WITH STROKE
- * Polish, ...
- x (latin small letter l with bar - 019A)
-0143 LATIN CAPITAL LETTER N WITH ACUTE
- : 004E 0301
-0144 LATIN SMALL LETTER N WITH ACUTE
- * Polish, ...
- : 006E 0301
-0145 LATIN CAPITAL LETTER N WITH CEDILLA
- : 004E 0327
-0146 LATIN SMALL LETTER N WITH CEDILLA
- * Latvian
- : 006E 0327
-0147 LATIN CAPITAL LETTER N WITH CARON
- : 004E 030C
-0148 LATIN SMALL LETTER N WITH CARON
- * Czech, Slovak
- : 006E 030C
-0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
- = LATIN SMALL LETTER APOSTROPHE N
- * Afrikaans
- * this is not actually a single letter
- # 02BC 006E
-014A LATIN CAPITAL LETTER ENG (Sami)
- * glyph may also have appearance of large form of the small letter
-014B LATIN SMALL LETTER ENG (Sami)
- * Sámi, Mende, IPA, ...
-014C LATIN CAPITAL LETTER O WITH MACRON
- : 004F 0304
-014D LATIN SMALL LETTER O WITH MACRON
- * Latvian, Latin, ...
- : 006F 0304
-014E LATIN CAPITAL LETTER O WITH BREVE
- : 004F 0306
-014F LATIN SMALL LETTER O WITH BREVE
- * Latin
- : 006F 0306
-0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
- : 004F 030B
-0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
- * Hungarian
- : 006F 030B
-0152 LATIN CAPITAL LIGATURE OE
-0153 LATIN SMALL LIGATURE OE
- = LATIN SMALL LETTER O E
- = ethel (from Old English eðel)
- * French, IPA, Old Icelandic, Old English, ...
- x (latin small letter ae - 00E6)
- x (latin letter small capital oe - 0276)
-0154 LATIN CAPITAL LETTER R WITH ACUTE
- : 0052 0301
-0155 LATIN SMALL LETTER R WITH ACUTE
- * Slovak, ...
- : 0072 0301
-0156 LATIN CAPITAL LETTER R WITH CEDILLA
- : 0052 0327
-0157 LATIN SMALL LETTER R WITH CEDILLA
- * Latvian
- : 0072 0327
-0158 LATIN CAPITAL LETTER R WITH CARON
- : 0052 030C
-0159 LATIN SMALL LETTER R WITH CARON
- * Czech, ...
- : 0072 030C
-015A LATIN CAPITAL LETTER S WITH ACUTE
- : 0053 0301
-015B LATIN SMALL LETTER S WITH ACUTE
- * Polish, Indic transliteration, ...
- : 0073 0301
-015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
- : 0053 0302
-015D LATIN SMALL LETTER S WITH CIRCUMFLEX
- * Esperanto
- : 0073 0302
-015E LATIN CAPITAL LETTER S WITH CEDILLA *
- : 0053 0327
-015F LATIN SMALL LETTER S WITH CEDILLA *
- * Turkish, Azerbaijani, Romanian, ...
- * this character is used in both Turkish and Romanian data
- * a glyph variant with comma below is preferred for Romanian
- x (latin small letter s with comma below - 0219)
- : 0073 0327
-0160 LATIN CAPITAL LETTER S WITH CARON
- : 0053 030C
-0161 LATIN SMALL LETTER S WITH CARON
- * Czech, Estonian, Finnish, Slovak, and many other languages
- : 0073 030C
-0162 LATIN CAPITAL LETTER T WITH CEDILLA *
- : 0054 0327
-0163 LATIN SMALL LETTER T WITH CEDILLA *
- * Romanian, Semitic transliteration, ...
- * this character is used in Romanian data
- * a glyph variant with comma below is preferred for Romanian
- x (latin small letter t with comma below - 021B)
- : 0074 0327
-0164 LATIN CAPITAL LETTER T WITH CARON
- * the form using caron/hacek is preferred in all contexts
- : 0054 030C
-0165 LATIN SMALL LETTER T WITH CARON
- * Czech, Slovak
- * the form using apostrophe is preferred in typesetting
- : 0074 030C
-0166 LATIN CAPITAL LETTER T WITH STROKE
-0167 LATIN SMALL LETTER T WITH STROKE
- * Sámi
-0168 LATIN CAPITAL LETTER U WITH TILDE
- : 0055 0303
-0169 LATIN SMALL LETTER U WITH TILDE
- * Greenlandic (old orthography)
- : 0075 0303
-016A LATIN CAPITAL LETTER U WITH MACRON
- : 0055 0304
-016B LATIN SMALL LETTER U WITH MACRON
- * Latvian, Lithuanian, Latin, ...
- : 0075 0304
-016C LATIN CAPITAL LETTER U WITH BREVE
- : 0055 0306
-016D LATIN SMALL LETTER U WITH BREVE
- * Latin, Esperanto, ...
- : 0075 0306
-016E LATIN CAPITAL LETTER U WITH RING ABOVE
- : 0055 030A
-016F LATIN SMALL LETTER U WITH RING ABOVE
- * Czech, ...
- : 0075 030A
-0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
- : 0055 030B
-0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
- * Hungarian
- : 0075 030B
-0172 LATIN CAPITAL LETTER U WITH OGONEK
- : 0055 0328
-0173 LATIN SMALL LETTER U WITH OGONEK
- * Lithuanian
- : 0075 0328
-0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
- : 0057 0302
-0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
- * Welsh
- : 0077 0302
-0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
- : 0059 0302
-0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
- * Welsh
- : 0079 0302
-0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
- * French, Igbo
- x (latin small letter y with diaeresis - 00FF)
- : 0059 0308
-0179 LATIN CAPITAL LETTER Z WITH ACUTE
- : 005A 0301
-017A LATIN SMALL LETTER Z WITH ACUTE
- * Polish, ...
- : 007A 0301
-017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
- : 005A 0307
-017C LATIN SMALL LETTER Z WITH DOT ABOVE
- * Polish, ...
- : 007A 0307
-017D LATIN CAPITAL LETTER Z WITH CARON
- : 005A 030C
-017E LATIN SMALL LETTER Z WITH CARON
- * Czech, Estonian, Finnish, Slovak, Slovenian, and many other languages
- : 007A 030C
-017F LATIN SMALL LETTER LONG S
- * in common use in Roman types until the 18th century
- * in current use in Fraktur and Gaelic types
- # 0073 latin small letter s
-@@ 0180 Latin Extended-B 024F
-@ Latin extended-B
-0180 LATIN SMALL LETTER B WITH STROKE
- * Americanist and Indo-Europeanist usage for phonetic beta
- * Old Saxon
- x (greek small letter beta - 03B2)
- x (blank symbol - 2422)
-0181 LATIN CAPITAL LETTER B WITH HOOK
- * Zulu, Pan-Nigerian alphabet
- x (latin small letter b with hook - 0253)
-0182 LATIN CAPITAL LETTER B WITH TOPBAR
-0183 LATIN SMALL LETTER B WITH TOPBAR
- * Zhuang
- * former Soviet minority language scripts
- x (cyrillic capital letter be - 0411)
-0184 LATIN CAPITAL LETTER TONE SIX
-0185 LATIN SMALL LETTER TONE SIX
- * Zhuang
- * Zhuang tone three is Cyrillic ze
- * Zhuang tone four is Cyrillic che
- x (latin small letter tone two - 01A8)
- x (latin small letter tone five - 01BD)
- x (cyrillic small letter ze - 0437)
- x (cyrillic small letter che - 0447)
- x (cyrillic small letter soft sign - 044C)
-0186 LATIN CAPITAL LETTER OPEN O
- * typographically a turned C
- x (latin small letter open o - 0254)
-0187 LATIN CAPITAL LETTER C WITH HOOK
-0188 LATIN SMALL LETTER C WITH HOOK
- * African
-0189 LATIN CAPITAL LETTER AFRICAN D *
- * Ewe
- x (latin capital letter eth - 00D0)
- x (latin capital letter d with stroke - 0110)
- x (latin small letter d with tail - 0256)
-018A LATIN CAPITAL LETTER D WITH HOOK
- * Pan-Nigerian alphabet
- x (latin small letter d with hook - 0257)
-018B LATIN CAPITAL LETTER D WITH TOPBAR
-018C LATIN SMALL LETTER D WITH TOPBAR
- * former-Soviet minority language scripts
-018D LATIN SMALL LETTER TURNED DELTA
- * archaic phonetic for labialized dental fricative
- * recommended spellings 007A 02B7 or 007A 032B
-018E LATIN CAPITAL LETTER REVERSED E
- = LATIN CAPITAL LETTER TURNED E
- * Pan-Nigerian alphabet
- * lowercase is 01DD
-018F LATIN CAPITAL LETTER SCHWA
- * Azerbaijani, ...
- x (latin small letter schwa - 0259)
- x (cyrillic capital letter schwa - 04D8)
-0190 LATIN CAPITAL LETTER OPEN E
- = LATIN CAPITAL LETTER EPSILON
- * African
- x (latin small letter open e - 025B)
- x (euler constant - 2107)
-0191 LATIN CAPITAL LETTER F WITH HOOK
- * African
-0192 LATIN SMALL LETTER F WITH HOOK
- = LATIN SMALL LETTER SCRIPT F
- = Florin currency symbol (Netherlands)
- = function symbol
- = abbreviation convention for folder
-0193 LATIN CAPITAL LETTER G WITH HOOK
- * African
- x (latin small letter g with hook - 0260)
-0194 LATIN CAPITAL LETTER GAMMA
- * African
- x (latin small letter gamma - 0263)
-0195 LATIN SMALL LETTER HV (hwair)
- * Gothic transliteration
- * uppercase is 01F6
-0196 LATIN CAPITAL LETTER IOTA
- * African
- x (latin small letter iota - 0269)
-0197 LATIN CAPITAL LETTER I WITH STROKE
- = barred i, i bar
- * African
- * ISO 6438 gives lowercase as 026A, not 0268
- x (latin letter small capital i - 026A)
-0198 LATIN CAPITAL LETTER K WITH HOOK
-0199 LATIN SMALL LETTER K WITH HOOK
- * Hausa, Pan-Nigerian alphabet
-019A LATIN SMALL LETTER L WITH BAR
- = barred l
- * Americanist phonetic usage for 026C
- x (latin small letter l with stroke - 0142)
-019B LATIN SMALL LETTER LAMBDA WITH STROKE
- = barred lambda, lambda bar
- * Americanist phonetic usage
-019C LATIN CAPITAL LETTER TURNED M
- * Zhuang
- x (latin small letter turned m - 026F)
-019D LATIN CAPITAL LETTER N WITH LEFT HOOK
- * African
- x (latin small letter n with left hook - 0272)
-019E LATIN SMALL LETTER N WITH LONG RIGHT LEG
- * archaic phonetic for Japanese syllabic "n"
- * recommended spelling 006E 0329
-019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE *
- = barred o, o bar
- * lowercase is 0275
- * African
- x (cyrillic capital letter barred o - 04E8)
-01A0 LATIN CAPITAL LETTER O WITH HORN
- : 004F 031B
-01A1 LATIN SMALL LETTER O WITH HORN
- * Vietnamese
- : 006F 031B
-01A2 LATIN CAPITAL LETTER OI (gha)
-01A3 LATIN SMALL LETTER OI (gha)
- = gha
- * Pan-Turkic Latin alphabets
-01A4 LATIN CAPITAL LETTER P WITH HOOK
-01A5 LATIN SMALL LETTER P WITH HOOK
- * African
-01A6 LATIN LETTER YR
- * old Norse
- * from German Standard DIN 31624 and ISO 5246-2
- * lowercase is 0280
-01A7 LATIN CAPITAL LETTER TONE TWO
-01A8 LATIN SMALL LETTER TONE TWO
- * Zhuang
- * typographically a reversed S
- x (latin small letter tone six - 0185)
-01A9 LATIN CAPITAL LETTER ESH
- * African
- x (latin small letter esh - 0283)
- x (greek capital letter sigma - 03A3)
-01AA LATIN LETTER REVERSED ESH LOOP
- * archaic phonetic for labialized palatoalveolar or palatal fricative
- * Twi
- * recommended spellings 0283 02B7, 00E7 02B7, 0068 0265, etc.
-01AB LATIN SMALL LETTER T WITH PALATAL HOOK
- * archaic phonetic for palatalized alveolar or dental stop
- * recommended spelling 0074 02B2
-01AC LATIN CAPITAL LETTER T WITH HOOK
-01AD LATIN SMALL LETTER T WITH HOOK
- * African
-01AE LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
- * African
- x (latin small letter t with retroflex hook - 0288)
-01AF LATIN CAPITAL LETTER U WITH HORN
- : 0055 031B
-01B0 LATIN SMALL LETTER U WITH HORN
- * Vietnamese
- : 0075 031B
-01B1 LATIN CAPITAL LETTER UPSILON
- * African
- * typographically based on turned capital Greek omega
- x (latin small letter upsilon - 028A)
- x (inverted ohm sign - 2127)
-01B2 LATIN CAPITAL LETTER V WITH HOOK
- = LATIN CAPITAL LETTER SCRIPT V
- * African
- x (latin small letter v with hook - 028B)
-01B3 LATIN CAPITAL LETTER Y WITH HOOK
-01B4 LATIN SMALL LETTER Y WITH HOOK
- * Bini, Esoko, and other Edo languages in West Africa
-01B5 LATIN CAPITAL LETTER Z WITH STROKE
-01B6 LATIN SMALL LETTER Z WITH STROKE
- = barred z, z bar
- * Pan-Turkic Latin orthography
- * handwritten variant of Latin "z"
- x (latin small letter z - 007A)
-01B7 LATIN CAPITAL LETTER EZH
- * African, Skolt Sámi
- * lowercase is 0292
- x (latin capital letter yogh - 021C)
- x (cyrillic capital letter abkhasian dze - 04E0)
-01B8 LATIN CAPITAL LETTER EZH REVERSED
-01B9 LATIN SMALL LETTER EZH REVERSED
- * archaic phonetic for voiced pharyngeal fricative
- * sometimes typographically rendered with a turned digit 3
- * recommended spelling 0295
- x (latin letter pharyngeal voiced fricative - 0295)
- x (arabic letter ain - 0639)
-01BA LATIN SMALL LETTER EZH WITH TAIL
- * archaic phonetic for labialized voiced palatoalveolar or palatal fricative
- * Twi
- * recommended spellings 0292 02B7 or 006A 02B7
-01BB LATIN LETTER TWO WITH STROKE
- * archaic phonetic for [dz] affricate
- * recommended spellings 0292 or 0064 007A
-01BC LATIN CAPITAL LETTER TONE FIVE
-01BD LATIN SMALL LETTER TONE FIVE
- * Zhuang
- x (latin small letter tone six - 0185)
-01BE LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
- * archaic phonetic for [ts] affricate
- * recommended spelling 0074 0073
- * letter form is actually derived from ligation of ts, rather than inverted glottal stop
-01BF LATIN LETTER WYNN
- = wen
- * Runic letter borrowed into Latin script
- * replaced by "w" in modern transcriptions of Old English
- * uppercase is 01F7
- x (runic letter wunjo wynn w - 16B9)
-01C0 LATIN LETTER DENTAL CLICK
- = pipe
- * Khoisan tradition
- * "c" in Zulu orthography
- x (solidus - 002F)
- x (vertical line - 007C)
- x (latin small letter turned t - 0287)
- x (divides - 2223)
-01C1 LATIN LETTER LATERAL CLICK
- = double pipe
- * Khoisan tradition
- * "x" in Zulu orthography
- x (latin letter inverted glottal stop - 0296)
- x (parallel to - 2225)
-01C2 LATIN LETTER ALVEOLAR CLICK
- = double-barred pipe
- * Khoisan tradition
- x (not equal to - 2260)
-01C3 LATIN LETTER RETROFLEX CLICK
- = LATIN LETTER EXCLAMATION MARK
- * Khoisan tradition
- * "q" in Zulu orthography
- x (exclamation mark - 0021)
- x (latin letter stretched c - 0297)
-@ Croatian digraphs matching Serbian Cyrillic letters
-01C4 LATIN CAPITAL LETTER DZ WITH CARON
- # 0044 017D
-01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
- # 0044 017E
-01C6 LATIN SMALL LETTER DZ WITH CARON
- x (cyrillic small letter dzhe - 045F)
- # 0064 017E
-01C7 LATIN CAPITAL LETTER LJ
- # 004C 004A
-01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
- # 004C 006A
-01C9 LATIN SMALL LETTER LJ
- x (cyrillic small letter lje - 0459)
- # 006C 006A
-01CA LATIN CAPITAL LETTER NJ
- # 004E 004A
-01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J
- # 004E 006A
-01CC LATIN SMALL LETTER NJ
- x (cyrillic small letter nje - 045A)
- # 006E 006A
-@ Pinyin diacritic-vowel combinations
-01CD LATIN CAPITAL LETTER A WITH CARON
- : 0041 030C
-01CE LATIN SMALL LETTER A WITH CARON
- * Pinyin third tone
- : 0061 030C
-01CF LATIN CAPITAL LETTER I WITH CARON
- : 0049 030C
-01D0 LATIN SMALL LETTER I WITH CARON
- * Pinyin third tone
- : 0069 030C
-01D1 LATIN CAPITAL LETTER O WITH CARON
- : 004F 030C
-01D2 LATIN SMALL LETTER O WITH CARON
- * Pinyin third tone
- : 006F 030C
-01D3 LATIN CAPITAL LETTER U WITH CARON
- : 0055 030C
-01D4 LATIN SMALL LETTER U WITH CARON
- * Pinyin third tone
- : 0075 030C
-01D5 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
- : 00DC 0304
-01D6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
- * Pinyin first tone
- : 00FC 0304
-01D7 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
- : 00DC 0301
-01D8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
- * Pinyin second tone
- : 00FC 0301
-01D9 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
- : 00DC 030C
-01DA LATIN SMALL LETTER U WITH DIAERESIS AND CARON
- * Pinyin third tone
- : 00FC 030C
-01DB LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
- : 00DC 0300
-01DC LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
- * Pinyin fourth tone
- : 00FC 0300
-@ Additions
-01DD LATIN SMALL LETTER TURNED E
- * Pan-Nigerian alphabet
- * all other usages of schwa are 0259
- * uppercase is 018E
- x (latin small letter schwa - 0259)
-01DE LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
- : 00C4 0304
-01DF LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
- * Livonian, Uralicist usage
- : 00E4 0304
-01E0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
- : 0226 0304
-01E1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
- * Uralicist usage
- : 0227 0304
-01E2 LATIN CAPITAL LETTER AE WITH MACRON (ash) *
- : 00C6 0304
-01E3 LATIN SMALL LETTER AE WITH MACRON (ash) *
- * Old Norse, Old English
- : 00E6 0304
-01E4 LATIN CAPITAL LETTER G WITH STROKE
-01E5 LATIN SMALL LETTER G WITH STROKE
- * Skolt Sámi
-01E6 LATIN CAPITAL LETTER G WITH CARON
- : 0047 030C
-01E7 LATIN SMALL LETTER G WITH CARON
- * Skolt Sámi
- x (latin small letter g with breve - 011F)
- : 0067 030C
-01E8 LATIN CAPITAL LETTER K WITH CARON
- : 004B 030C
-01E9 LATIN SMALL LETTER K WITH CARON
- * Skolt Sámi
- : 006B 030C
-01EA LATIN CAPITAL LETTER O WITH OGONEK
- : 004F 0328
-01EB LATIN SMALL LETTER O WITH OGONEK
- * Sámi, Iroquoian, Old Icelandic
- : 006F 0328
-01EC LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
- : 01EA 0304
-01ED LATIN SMALL LETTER O WITH OGONEK AND MACRON
- * Old Icelandic
- : 01EB 0304
-01EE LATIN CAPITAL LETTER EZH WITH CARON
- : 01B7 030C
-01EF LATIN SMALL LETTER EZH WITH CARON
- * Skolt Sámi
- : 0292 030C
-01F0 LATIN SMALL LETTER J WITH CARON
- * IPA and many languages
- : 006A 030C
-01F1 LATIN CAPITAL LETTER DZ
- # 0044 005A
-01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
- # 0044 007A
-01F3 LATIN SMALL LETTER DZ
- # 0064 007A
-01F4 LATIN CAPITAL LETTER G WITH ACUTE
- : 0047 0301
-01F5 LATIN SMALL LETTER G WITH ACUTE
- : 0067 0301
-01F6 LATIN CAPITAL LETTER HWAIR
- * lowercase is 0195
-01F7 LATIN CAPITAL LETTER WYNN
- = wen
- * lowercase is 01BF
-01F8 LATIN CAPITAL LETTER N WITH GRAVE
- : 004E 0300
-01F9 LATIN SMALL LETTER N WITH GRAVE
- * Pinyin
- : 006E 0300
-01FA LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
- : 00C5 0301
-01FB LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
- : 00E5 0301
-01FC LATIN CAPITAL LETTER AE WITH ACUTE (ash) *
- : 00C6 0301
-01FD LATIN SMALL LETTER AE WITH ACUTE (ash) *
- : 00E6 0301
-01FE LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
- : 00D8 0301
-01FF LATIN SMALL LETTER O WITH STROKE AND ACUTE
- : 00F8 0301
-@ Additions for Slovenian and Croatian
-0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
- : 0041 030F
-0201 LATIN SMALL LETTER A WITH DOUBLE GRAVE
- : 0061 030F
-0202 LATIN CAPITAL LETTER A WITH INVERTED BREVE
- : 0041 0311
-0203 LATIN SMALL LETTER A WITH INVERTED BREVE
- : 0061 0311
-0204 LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
- : 0045 030F
-0205 LATIN SMALL LETTER E WITH DOUBLE GRAVE
- : 0065 030F
-0206 LATIN CAPITAL LETTER E WITH INVERTED BREVE
- : 0045 0311
-0207 LATIN SMALL LETTER E WITH INVERTED BREVE
- : 0065 0311
-0208 LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
- : 0049 030F
-0209 LATIN SMALL LETTER I WITH DOUBLE GRAVE
- : 0069 030F
-020A LATIN CAPITAL LETTER I WITH INVERTED BREVE
- : 0049 0311
-020B LATIN SMALL LETTER I WITH INVERTED BREVE
- : 0069 0311
-020C LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
- : 004F 030F
-020D LATIN SMALL LETTER O WITH DOUBLE GRAVE
- : 006F 030F
-020E LATIN CAPITAL LETTER O WITH INVERTED BREVE
- : 004F 0311
-020F LATIN SMALL LETTER O WITH INVERTED BREVE
- : 006F 0311
-0210 LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
- : 0052 030F
-0211 LATIN SMALL LETTER R WITH DOUBLE GRAVE
- : 0072 030F
-0212 LATIN CAPITAL LETTER R WITH INVERTED BREVE
- : 0052 0311
-0213 LATIN SMALL LETTER R WITH INVERTED BREVE
- : 0072 0311
-0214 LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
- : 0055 030F
-0215 LATIN SMALL LETTER U WITH DOUBLE GRAVE
- : 0075 030F
-0216 LATIN CAPITAL LETTER U WITH INVERTED BREVE
- : 0055 0311
-0217 LATIN SMALL LETTER U WITH INVERTED BREVE
- : 0075 0311
-@ Additions for Romanian
-0218 LATIN CAPITAL LETTER S WITH COMMA BELOW *
- : 0053 0326
-0219 LATIN SMALL LETTER S WITH COMMA BELOW *
- * Romanian, when distinct comma below form is required
- x (latin small letter s with cedilla - 015F)
- : 0073 0326
-021A LATIN CAPITAL LETTER T WITH COMMA BELOW *
- : 0054 0326
-021B LATIN SMALL LETTER T WITH COMMA BELOW *
- * Romanian, when distinct comma below form is required
- x (latin small letter t with cedilla - 0163)
- : 0074 0326
-@ Miscellaneous additions
-021C LATIN CAPITAL LETTER YOGH
- x (latin capital letter ezh - 01B7)
-021D LATIN SMALL LETTER YOGH
- * Middle English, Scots
- x (latin small letter ezh - 0292)
- x (ounce sign - 2125)
-021E LATIN CAPITAL LETTER H WITH CARON
- : 0048 030C
-021F LATIN SMALL LETTER H WITH CARON
- * Finnish Romany
- : 0068 030C
-0222 LATIN CAPITAL LETTER OU
-0223 LATIN SMALL LETTER OU
- * Algonquin, Huron
- x (digit eight - 0038)
-0224 LATIN CAPITAL LETTER Z WITH HOOK
-0225 LATIN SMALL LETTER Z WITH HOOK
- * Middle High German
-0226 LATIN CAPITAL LETTER A WITH DOT ABOVE
- : 0041 0307
-0227 LATIN SMALL LETTER A WITH DOT ABOVE
- * Uralicist usage
- : 0061 0307
-0228 LATIN CAPITAL LETTER E WITH CEDILLA
- : 0045 0327
-0229 LATIN SMALL LETTER E WITH CEDILLA
- : 0065 0327
-@ Additions for Livonian
-022A LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
- : 00D6 0304
-022B LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
- * Livonian
- : 00F6 0304
-022C LATIN CAPITAL LETTER O WITH TILDE AND MACRON
- : 00D5 0304
-022D LATIN SMALL LETTER O WITH TILDE AND MACRON
- * Livonian
- : 00F5 0304
-022E LATIN CAPITAL LETTER O WITH DOT ABOVE
- : 004F 0307
-022F LATIN SMALL LETTER O WITH DOT ABOVE
- * Livonian
- : 006F 0307
-0230 LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
- : 022E 0304
-0231 LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
- * Livonian
- : 022F 0304
-0232 LATIN CAPITAL LETTER Y WITH MACRON
- : 0059 0304
-0233 LATIN SMALL LETTER Y WITH MACRON
- * Livonian, Cornish
- : 0079 0304
-@@ 0250 IPA Extensions 02AF
-@ IPA extensions
-@+ IPA includes basic Latin letters and a number of Latin letters from other blocks.
- x (latin small letter ae - 00E6)
- x (latin small letter c with cedilla - 00E7)
- x (latin small letter eth - 00F0)
- x (latin small letter o with stroke - 00F8)
- x (latin small letter h with stroke - 0127)
- x (latin small letter eng - 014B)
- x (latin small ligature oe - 0153)
- x (greek small letter beta - 03B2)
- x (greek small letter theta - 03B8)
- x (greek small letter lamda - 03BB)
- x (greek small letter chi - 03C7)
-0250 LATIN SMALL LETTER TURNED A
- * low central unrounded vowel
-0251 LATIN SMALL LETTER ALPHA
- = LATIN SMALL LETTER SCRIPT A
- * low back unrounded vowel
- x (greek small letter alpha - 03B1)
-0252 LATIN SMALL LETTER TURNED ALPHA
- * low back rounded vowel
-0253 LATIN SMALL LETTER B WITH HOOK
- * implosive bilabial stop
- * Pan-Nigerian alphabet
- x (latin capital letter b with hook - 0181)
-0254 LATIN SMALL LETTER OPEN O
- * typographically a turned c
- * lower-mid back rounded vowel
- x (latin capital letter open o - 0186)
-0255 LATIN SMALL LETTER C WITH CURL
- * voiceless alveolo-palatal laminal fricative
- * used in transcription of Mandarin Chinese
- * sound spelled with 015B in Polish
-0256 LATIN SMALL LETTER D WITH TAIL
- = LATIN SMALL LETTER D RETROFLEX HOOK
- * voiced retroflex stop
- x (latin capital letter african d - 0189)
-0257 LATIN SMALL LETTER D WITH HOOK
- * implosive dental or alveolar stop
- * Ewe, Pan-Nigerian alphabet
- x (latin capital letter d with hook - 018A)
-0258 LATIN SMALL LETTER REVERSED E
- * upper-mid central unrounded vowel
-0259 LATIN SMALL LETTER SCHWA
- * mid-central unrounded vowel
- * variant uppercase form 018E is associated with 01DD
- x (latin capital letter schwa - 018F)
- x (latin small letter turned e - 01DD)
- x (cyrillic small letter schwa - 04D9)
-025A LATIN SMALL LETTER SCHWA WITH HOOK
- * rhotacized schwa
-025B LATIN SMALL LETTER OPEN E
- = LATIN SMALL LETTER EPSILON
- * lower-mid front unrounded vowel
- x (latin capital letter open e - 0190)
- x (greek small letter epsilon - 03B5)
-025C LATIN SMALL LETTER REVERSED OPEN E
- * lower-mid central unrounded vowel
-025D LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
- * rhotacized lower-mid central vowel
-025E LATIN SMALL LETTER CLOSED REVERSED OPEN E
- = LATIN SMALL LETTER CLOSED REVERSED EPSILON
- * lower-mid central rounded vowel
-025F LATIN SMALL LETTER DOTLESS J WITH STROKE
- * voiced palatal stop
- * typographically a turned f, but better thought of as a form of j
- * "gy" in Hungarian orthography
- * also archaic phonetic for palatoalveolar affricate 02A4
-0260 LATIN SMALL LETTER G WITH HOOK
- * implosive velar stop
- x (latin capital letter g with hook - 0193)
-0261 LATIN SMALL LETTER SCRIPT G
- * voiced velar stop
- x (latin small letter g - 0067)
-0262 LATIN LETTER SMALL CAPITAL G
- * voiced uvular stop
-0263 LATIN SMALL LETTER GAMMA
- * voiced velar fricative
- x (latin capital letter gamma - 0194)
- x (greek small letter gamma - 03B3)
-0264 LATIN SMALL LETTER RAMS HORN
- = LATIN SMALL LETTER BABY GAMMA
- * upper-mid back unrounded vowel
-0265 LATIN SMALL LETTER TURNED H
- * voiced rounded palatal approximant
-0266 LATIN SMALL LETTER H WITH HOOK
- * breathy-voiced glottal fricative
- x (modifier letter small h with hook - 02B1)
-0267 LATIN SMALL LETTER HENG WITH HOOK
- * voiceless coarticulated velar and palatoalveolar fricative
- * "tj" or "kj" or "sj" in some Swedish dialects
-0268 LATIN SMALL LETTER I WITH STROKE
- = barred i, i bar
- * high central unrounded vowel
- * ISO 6438 gives lowercase of 0197 as 026A, not 0268
-0269 LATIN SMALL LETTER IOTA
- * semi-high front unrounded vowel
-@+ * obsoleted by IPA in 1989
- * preferred use is 026A LATIN LETTER SMALL CAPITAL I
- x (latin capital letter iota - 0196)
- x (greek small letter iota - 03B9)
-026A LATIN LETTER SMALL CAPITAL I
- * semi-high front unrounded vowel
- * preferred IPA alternate for 0269
- x (latin capital letter i with stroke - 0197)
-026B LATIN SMALL LETTER L WITH MIDDLE TILDE
- * velarized voiced alveolar lateral approximant
-026C LATIN SMALL LETTER L WITH BELT
- * voiceless alveolar lateral fricative
-026D LATIN SMALL LETTER L WITH RETROFLEX HOOK
- * voiced retroflex lateral
-026E LATIN SMALL LETTER LEZH
- * voiced lateral fricative
- * "dhl" in Zulu orthography
-026F LATIN SMALL LETTER TURNED M
- * high back unrounded vowel
- x (latin capital letter turned m - 019C)
-0270 LATIN SMALL LETTER TURNED M WITH LONG LEG
- * voiced velar approximant
-0271 LATIN SMALL LETTER M WITH HOOK
- * voiced labiodental nasal
-0272 LATIN SMALL LETTER N WITH LEFT HOOK
- * voiced palatal nasal
- x (latin capital letter n with left hook - 019D)
-0273 LATIN SMALL LETTER N WITH RETROFLEX HOOK
- * voiced retroflex nasal
-0274 LATIN LETTER SMALL CAPITAL N
- * voiced uvular nasal
-0275 LATIN SMALL LETTER BARRED O
- = o bar
- * rounded mid-central vowel, i.e. rounded schwa
- * uppercase is 019F
- x (greek small letter theta - 03B8)
- x (cyrillic small letter fita - 0473)
- x (cyrillic small letter barred o - 04E9)
-0276 LATIN LETTER SMALL CAPITAL OE
- * low front rounded vowel
- x (latin small ligature oe - 0153)
-0277 LATIN SMALL LETTER CLOSED OMEGA
- * semi-high back rounded vowel
-@+ * obsoleted by IPA in 1989
- * preferred use is 028A latin small letter upsilon
-0278 LATIN SMALL LETTER PHI
- * voiceless bilabial fricative
- x (greek small letter phi - 03C6)
-0279 LATIN SMALL LETTER TURNED R
- * voiced alveolar approximant
- x (modifier letter small turned r - 02B4)
-027A LATIN SMALL LETTER TURNED R WITH LONG LEG
- * voiced lateral flap
-027B LATIN SMALL LETTER TURNED R WITH HOOK
- * voiced retroflex approximant
- x (modifier letter small turned r with hook - 02B5)
-027C LATIN SMALL LETTER R WITH LONG LEG
- * voiced strident apico-alveolar trill
-@+ * obsoleted by IPA in 1989
- * sound spelled with 0159 in Czech
- * preferred phonetic representation for Czech is 0072 031D
- * in current use in Gaelic types (as glyph variant of 0072)
-027D LATIN SMALL LETTER R WITH TAIL
- * voiced retroflex flap
-027E LATIN SMALL LETTER R WITH FISHHOOK
- * voiced alveolar flap or tap
-027F LATIN SMALL LETTER REVERSED R WITH FISHHOOK
- * apical dental vowel
- * used in Sinological tradition
- * IPA spelling - 007A 0329
-0280 LATIN LETTER SMALL CAPITAL R
- * voiced uvular trill
- * Germanic, Old Norse
- * uppercase is 01A6
-0281 LATIN LETTER SMALL CAPITAL INVERTED R
- * voiced uvular fricative or approximant
- x (modifier letter small capital inverted r - 02B6)
-0282 LATIN SMALL LETTER S WITH HOOK
- * voiceless retroflex fricative
-0283 LATIN SMALL LETTER ESH
- * voiceless postalveolar fricative
- x (latin capital letter esh - 01A9)
- x (integral - 222B)
-0284 LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
- * implosive palatal stop
- * typographically based on 025F, not on 0283
-0285 LATIN SMALL LETTER SQUAT REVERSED ESH
- * apical retroflex vowel
- * used in Sinological tradition
- * IPA spelling - 0290 0329
-0286 LATIN SMALL LETTER ESH WITH CURL
- * palatalized voiceless postalveolar fricative
- * suggested spelling - 0283 02B2
-0287 LATIN SMALL LETTER TURNED T
- * dental click (sound of "tsk tsk")
- x (latin letter dental click - 01C0)
-0288 LATIN SMALL LETTER T WITH RETROFLEX HOOK
- * voiceless retroflex stop
- x (latin capital letter t with retroflex hook - 01AE)
-0289 LATIN SMALL LETTER U BAR
- * high central rounded vowel
-028A LATIN SMALL LETTER UPSILON
- * semi-high back rounded vowel
- * preferred IPA alternate to 0277
- x (latin capital letter upsilon - 01B1)
- x (greek small letter upsilon - 03C5)
-028B LATIN SMALL LETTER V WITH HOOK
- = LATIN SMALL LETTER SCRIPT V
- * voiced labiodental approximant
- x (latin capital letter v with hook - 01B2)
- x (greek small letter upsilon - 03C5)
-028C LATIN SMALL LETTER TURNED V
- = caret, wedge
- * lower-mid back unrounded vowel
- x (greek capital letter lamda - 039B)
- x (caret - 2038)
- x (logical and - 2227)
-028D LATIN SMALL LETTER TURNED W
- * voiceless rounded labiovelar approximant
-028E LATIN SMALL LETTER TURNED Y
- * voiced lateral approximant
-028F LATIN LETTER SMALL CAPITAL Y
- * semi-high front rounded vowel
-0290 LATIN SMALL LETTER Z WITH RETROFLEX HOOK
- * voiced retroflex fricative
-0291 LATIN SMALL LETTER Z WITH CURL
- * voiced alveolo-palatal laminal fricative
- * sound spelled with 017A in Polish
-0292 LATIN SMALL LETTER EZH
- = LATIN SMALL LETTER YOGH
- = dram
- * voiced postalveolar fricative
- * uppercase is 01B7
- * Skolt Sámi
- x (latin small letter yogh - 021D)
- x (cyrillic small letter abkhasian dze - 04E1)
- x (ounce sign - 2125)
-0293 LATIN SMALL LETTER EZH WITH CURL
- * palatalized voiced postalveolar fricative
-0294 LATIN LETTER GLOTTAL STOP
- x (modifier letter glottal stop - 02C0)
-0295 LATIN LETTER PHARYNGEAL VOICED FRICATIVE
- = LATIN LETTER REVERSED GLOTTAL STOP
- * voiced pharyngeal fricative
- * ain
- x (latin small letter ezh reversed - 01B9)
- x (modifier letter reversed glottal stop - 02C1)
-0296 LATIN LETTER INVERTED GLOTTAL STOP
- * lateral click
- x (latin letter lateral click - 01C1)
-0297 LATIN LETTER STRETCHED C
- * palatal (or alveolar) click
- x (latin letter retroflex click - 01C3)
- x (complement - 2201)
-0298 LATIN LETTER BILABIAL CLICK
- = LATIN LETTER BULLSEYE
- x (circled dot operator - 2299)
-0299 LATIN LETTER SMALL CAPITAL B
- * bilabial trill
-029A LATIN SMALL LETTER CLOSED OPEN E
- = LATIN SMALL LETTER CLOSED EPSILON
- * lower-mid front rounded vowel
- * non-IPA alternate for the preferred 0153
-029B LATIN LETTER SMALL CAPITAL G WITH HOOK
- * voiced uvular implosive
-029C LATIN LETTER SMALL CAPITAL H
- * voiceless epiglottal fricative
-029D LATIN SMALL LETTER J WITH CROSSED-TAIL
- * voiced palatal fricative
-029E LATIN SMALL LETTER TURNED K
- * proposed for velar click
-@+ * withdrawn by IPA in 1970
-029F LATIN LETTER SMALL CAPITAL L
- * velar lateral approximant
-02A0 LATIN SMALL LETTER Q WITH HOOK
- * voiceless uvular implosive
-02A1 LATIN LETTER GLOTTAL STOP WITH STROKE
- * voiced epiglottal stop
-02A2 LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
- * voiced epiglottal fricative
-02A3 LATIN SMALL LETTER DZ DIGRAPH
- * voiced dental affricate
-02A4 LATIN SMALL LETTER DEZH DIGRAPH
- * voiced postalveolar affricate
-02A5 LATIN SMALL LETTER DZ DIGRAPH WITH CURL
- * voiced alveolo-palatal affricate
-02A6 LATIN SMALL LETTER TS DIGRAPH
- * voiceless dental affricate
-02A7 LATIN SMALL LETTER TESH DIGRAPH
- * voiceless postalveolar affricate
-02A8 LATIN SMALL LETTER TC DIGRAPH WITH CURL
- * voiceless alveolo-palatal affricate
-@ IPA characters for disordered speech
-02A9 LATIN SMALL LETTER FENG DIGRAPH
- * velopharyngeal fricative
-02AA LATIN SMALL LETTER LS DIGRAPH
- * lateral alveolar fricative (lisp)
-02AB LATIN SMALL LETTER LZ DIGRAPH
- * voiced lateral alveolar fricative
-02AC LATIN LETTER BILABIAL PERCUSSIVE
- * audible lip smack
-02AD LATIN LETTER BIDENTAL PERCUSSIVE
- * audible teeth gnashing
-@@ 02B0 Spacing Modifier Letters 02FF
-@ Phonetic modifiers derived from Latin letters
-02B0 MODIFIER LETTER SMALL H
- * aspiration
- # <super> 0068
-02B1 MODIFIER LETTER SMALL H WITH HOOK
- * breathy voiced, murmured
- x (latin small letter h with hook - 0266)
- x (combining diaeresis below - 0324)
- # <super> 0266
-02B2 MODIFIER LETTER SMALL J
- * palatalization
- x (combining palatalized hook below - 0321)
- # <super> 006A
-02B3 MODIFIER LETTER SMALL R
- # <super> 0072
-02B4 MODIFIER LETTER SMALL TURNED R
- x (latin small letter turned r - 0279)
- # <super> 0279
-02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK
- x (latin small letter turned r with hook - 027B)
- # <super> 027B
-02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R
- * preceding four used for r-coloring or r-offglides
- x (latin letter small capital inverted r - 0281)
- # <super> 0281
-02B7 MODIFIER LETTER SMALL W
- * labialization
- x (combining inverted double arch below - 032B)
- # <super> 0077
-02B8 MODIFIER LETTER SMALL Y
- * palatalization
- * common Americanist substitution for 02B2
- # <super> 0079
-@ Miscellaneous phonetic modifiers
-02B9 MODIFIER LETTER PRIME
- * primary stress, emphasis
- * transliteration of mjagkij znak (Cyrillic soft sign: palatalization)
- x (apostrophe - 0027)
- x (acute accent - 00B4)
- x (modifier letter acute accent - 02CA)
- x (combining acute accent - 0301)
- x (greek numeral sign - 0374)
- x (prime - 2032)
-02BA MODIFIER LETTER DOUBLE PRIME
- * exaggerated stress, contrastive stress
- * transliteration of tverdyj znak (Cyrillic hard sign: no palatalization)
- x (quotation mark - 0022)
- x (combining double acute accent - 030B)
- x (double prime - 2033)
-02BB MODIFIER LETTER TURNED COMMA
- * typographical alternate for 02BD or 02BF
- x (combining turned comma above - 0312)
- x (left single quotation mark - 2018)
-02BC MODIFIER LETTER APOSTROPHE
- = apostrophe
- * glottal stop, glottalization, ejective
- * spacing clone of Greek smooth breathing mark
- * many languages use this as a letter of their alphabets
- x (apostrophe - 0027)
- x (combining comma above - 0313)
- x (combining comma above right - 0315)
- x (armenian apostrophe - 055A)
- x (right single quotation mark - 2019)
-02BD MODIFIER LETTER REVERSED COMMA
- * weak aspiration
- * spacing clone of Greek rough breathing mark
- x (combining reversed comma above - 0314)
- x (armenian modifier letter left half ring - 0559)
- x (single high-reversed-9 quotation mark - 201B)
-02BE MODIFIER LETTER RIGHT HALF RING
- * transliteration of Arabic hamza (glottal stop)
- x (armenian apostrophe - 055A)
- x (arabic letter hamza - 0621)
-02BF MODIFIER LETTER LEFT HALF RING
- * transliteration of Arabic ain (voiced pharyngeal fricative)
- x (armenian modifier letter left half ring - 0559)
- x (arabic letter ain - 0639)
-02C0 MODIFIER LETTER GLOTTAL STOP
- * ejective or glottalized
- * typographical alternate for 02BC or 02BE
- x (latin letter glottal stop - 0294)
- x (combining hook above - 0309)
-02C1 MODIFIER LETTER REVERSED GLOTTAL STOP
- * typographical alternate for 02BF
- x (latin letter pharyngeal voiced fricative - 0295)
-02C2 MODIFIER LETTER LEFT ARROWHEAD
- * fronted articulation
-02C3 MODIFIER LETTER RIGHT ARROWHEAD
- * backed articulation
-02C4 MODIFIER LETTER UP ARROWHEAD
- * raised articulation
- x (circumflex accent - 005E)
- x (up arrowhead - 2303)
-02C5 MODIFIER LETTER DOWN ARROWHEAD
- * lowered articulation
-02C6 MODIFIER LETTER CIRCUMFLEX ACCENT
- * rising-falling tone, falling tone, secondary stress, etc.
- x (circumflex accent - 005E)
- x (combining circumflex accent - 0302)
-02C7 CARON (Mandarin Chinese third tone)
- = hacek
- * falling-rising tone
- * Mandarin Chinese third tone
- x (combining caron - 030C)
-02C8 MODIFIER LETTER VERTICAL LINE
- * primary stress, downstep
- * precedes letter or syllable modified
- x (apostrophe - 0027)
- x (combining vertical line above - 030D)
-02C9 MODIFIER LETTER MACRON (Mandarin Chinese first tone)
- * high level tone
- * precedes or follows letter or syllable modified
- * Mandarin Chinese first tone
- x (macron - 00AF)
- x (combining macron - 0304)
-02CA MODIFIER LETTER ACUTE ACCENT (Mandarin Chinese second tone)
- * high-rising tone (IPA), high tone, primary stress
- * Mandarin Chinese second tone
- x (acute accent - 00B4)
- x (modifier letter prime - 02B9)
- x (combining acute accent - 0301)
- x (greek numeral sign - 0374)
- x (armenian emphasis mark - 055B)
-02CB MODIFIER LETTER GRAVE ACCENT (Mandarin Chinese fourth tone)
- * high-falling tone (IPA), low tone, secondary or tertiary stress
- * Mandarin Chinese fourth tone
- x (grave accent - 0060)
- x (combining grave accent - 0300)
- x (armenian comma - 055D)
-02CC MODIFIER LETTER LOW VERTICAL LINE
- * secondary stress
- * precedes letter or syllable modified
- x (combining vertical line below - 0329)
-02CD MODIFIER LETTER LOW MACRON
- * low level tone
- x (low line - 005F)
- x (combining macron below - 0331)
-02CE MODIFIER LETTER LOW GRAVE ACCENT
- * low-falling tone
-02CF MODIFIER LETTER LOW ACUTE ACCENT
- * low-rising tone
- x (greek lower numeral sign - 0375)
-02D0 MODIFIER LETTER TRIANGULAR COLON
- * length mark
- x (colon - 003A)
-02D1 MODIFIER LETTER HALF TRIANGULAR COLON
- * half-length mark
- x (middle dot - 00B7)
-02D2 MODIFIER LETTER CENTRED RIGHT HALF RING
- * more rounded articulation
-02D3 MODIFIER LETTER CENTRED LEFT HALF RING
- * less rounded articulation
-02D4 MODIFIER LETTER UP TACK
- * vowel raising or closing
- x (combining up tack below - 031D)
- x (combining dot below - 0323)
-02D5 MODIFIER LETTER DOWN TACK
- * vowel lowering or opening
- x (combining left half ring below - 031C)
- x (combining down tack below - 031E)
-02D6 MODIFIER LETTER PLUS SIGN
- * advanced or fronted articulation
- x (combining plus sign below - 031F)
-02D7 MODIFIER LETTER MINUS SIGN
- * retracted or backed articulation
- * glyph may have small end-serifs
- x (combining minus sign below - 0320)
-@ Spacing clones of diacritics
-02D8 BREVE
- x (combining breve - 0306)
- # 0020 0306
-02D9 DOT ABOVE (Mandarin Chinese light tone)
- * Mandarin Chinese fifth tone (light or neutral)
- x (combining dot above - 0307)
- # 0020 0307
-02DA RING ABOVE
- x (degree sign - 00B0)
- x (combining ring above - 030A)
- # 0020 030A
-02DB OGONEK
- x (combining ogonek - 0328)
- # 0020 0328
-02DC SMALL TILDE
- x (tilde - 007E)
- x (combining tilde - 0303)
- x (tilde operator - 223C)
- # 0020 0303
-02DD DOUBLE ACUTE ACCENT
- x (combining double acute accent - 030B)
- # 0020 030B
-@ Additions based on 1989 IPA
-02DE MODIFIER LETTER RHOTIC HOOK
- * rhotacization in vowel
- * often ligated: 025A = 0259 + 02DE; 025D = 025C + 02DE
-02DF MODIFIER LETTER CROSS ACCENT
- * Swedish grave accent
-02E0 MODIFIER LETTER SMALL GAMMA
- * these modifier letters are occasionally used in transcription of affricates
- # <super> 0263
-02E1 MODIFIER LETTER SMALL L
- # <super> 006C
-02E2 MODIFIER LETTER SMALL S
- # <super> 0073
-02E3 MODIFIER LETTER SMALL X
- # <super> 0078
-02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
- # <super> 0295
-@ Tone letters
-02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR
-02E6 MODIFIER LETTER HIGH TONE BAR
-02E7 MODIFIER LETTER MID TONE BAR
-02E8 MODIFIER LETTER LOW TONE BAR
-02E9 MODIFIER LETTER EXTRA-LOW TONE BAR
-02EA MODIFIER LETTER YIN DEPARTING TONE MARK
-02EB MODIFIER LETTER YANG DEPARTING TONE MARK
-@ IPA modifiers
-02EC MODIFIER LETTER VOICING
-02ED MODIFIER LETTER UNASPIRATED
-@ Other modifier letters
-02EE MODIFIER LETTER DOUBLE APOSTROPHE
- * Nenets
-@@ 0300 Combining Diacritical Marks 036F
-@ Ordinary diacritics
-0300 COMBINING GRAVE ACCENT (Varia)
- = Greek varia
- x (grave accent - 0060)
- x (modifier letter grave accent - 02CB)
-0301 COMBINING ACUTE ACCENT (Oxia)
- = stress mark
- = Greek oxia, tonos
- x (apostrophe - 0027)
- x (acute accent - 00B4)
- x (modifier letter prime - 02B9)
- x (modifier letter acute accent - 02CA)
- x (greek tonos - 0384)
-0302 COMBINING CIRCUMFLEX ACCENT
- = hat
- x (circumflex accent - 005E)
- x (modifier letter circumflex accent - 02C6)
-0303 COMBINING TILDE
- * IPA: nasalization
- * Vietnamese tone mark
- x (tilde - 007E)
- x (small tilde - 02DC)
-0304 COMBINING MACRON
- = long
- * distinguish from the following
- x (macron - 00AF)
- x (modifier letter macron - 02C9)
-0305 COMBINING OVERLINE
- = overscore, vinculum
- * connects on left and right
- x (macron - 00AF)
-0306 COMBINING BREVE (Vrachy)
- = short
- = Greek vrachy
- x (breve - 02D8)
-0307 COMBINING DOT ABOVE
- = derivative (Newtonian notation)
-@+ * IPA (withdrawn in 1976): palatalization
- x (dot above - 02D9)
-0308 COMBINING DIAERESIS (Dialytika)
- = double dot above, umlaut
- = Greek dialytika
- = double derivative
- x (diaeresis - 00A8)
-0309 COMBINING HOOK ABOVE
- = hoi
- * kerns left or right of circumflex over vowels
- * Vietnamese tone mark
- x (modifier letter glottal stop - 02C0)
-030A COMBINING RING ABOVE
- x (degree sign - 00B0)
- x (ring above - 02DA)
-030B COMBINING DOUBLE ACUTE ACCENT
- * Hungarian, Chuvash
- x (quotation mark - 0022)
- x (modifier letter double prime - 02BA)
- x (double acute accent - 02DD)
-030C COMBINING CARON
- = hacek, V above
- x (caron - 02C7)
-030D COMBINING VERTICAL LINE ABOVE (Tonos)
- * Marshallese
- x (modifier letter vertical line - 02C8)
-030E COMBINING DOUBLE VERTICAL LINE ABOVE
- * Marshallese
- x (quotation mark - 0022)
-030F COMBINING DOUBLE GRAVE ACCENT
- * Serbian and Croatian poetics
-0310 COMBINING CANDRABINDU
- x (devanagari sign candrabindu - 0901)
-0311 COMBINING INVERTED BREVE
-0312 COMBINING TURNED COMMA ABOVE
- = cedilla above
- * Latvian (but not used in decomposition)
- x (modifier letter turned comma - 02BB)
-0313 COMBINING COMMA ABOVE (Psili)
- = Greek psili, smooth breathing mark
- * Americanist: ejective or glottalization
- x (modifier letter apostrophe - 02BC)
- x (combining cyrillic psili pneumata - 0486)
- x (armenian apostrophe - 055A)
-0314 COMBINING REVERSED COMMA ABOVE (Dasia)
- = Greek dasia, rough breathing mark
- x (modifier letter reversed comma - 02BD)
- x (combining cyrillic dasia pneumata - 0485)
- x (armenian modifier letter left half ring - 0559)
-0315 COMBINING COMMA ABOVE RIGHT
- x (modifier letter apostrophe - 02BC)
-0316 COMBINING GRAVE ACCENT BELOW
-0317 COMBINING ACUTE ACCENT BELOW
-0318 COMBINING LEFT TACK BELOW
-0319 COMBINING RIGHT TACK BELOW
-031A COMBINING LEFT ANGLE ABOVE
- * IPA: unreleased stop
-031B COMBINING HORN
- * Vietnamese
-031C COMBINING LEFT HALF RING BELOW
- * IPA: open variety of vowel
- x (modifier letter down tack - 02D5)
-031D COMBINING UP TACK BELOW
- * IPA: vowel raising or closing
- x (modifier letter up tack - 02D4)
-031E COMBINING DOWN TACK BELOW
- * IPA: vowel lowering or opening
- x (modifier letter down tack - 02D5)
-031F COMBINING PLUS SIGN BELOW
- * IPA: advanced or fronted articulation
- x (modifier letter plus sign - 02D6)
-0320 COMBINING MINUS SIGN BELOW
- * IPA: retracted or backed articulation
- * glyph may have small end-serifs
- x (modifier letter minus sign - 02D7)
-0321 COMBINING PALATALIZED HOOK BELOW
- * IPA: palatalization
- x (modifier letter small j - 02B2)
-0322 COMBINING RETROFLEX HOOK BELOW
- * IPA: retroflexion
-0323 COMBINING DOT BELOW
- = nang
- * IPA: closer variety of vowel
- * Americanist and Indo-Europeanist: retraction or retroflexion
- * Semiticist: velarization or pharyngealization
- * Vietnamese tone mark
- x (modifier letter up tack - 02D4)
-0324 COMBINING DIAERESIS BELOW
- * IPA: breathy-voice or murmur
- x (modifier letter small h with hook - 02B1)
-0325 COMBINING RING BELOW
- * IPA: voiceless
- * Madurese
-0326 COMBINING COMMA BELOW
- * Romanian, Latvian, Livonian
-0327 COMBINING CEDILLA
- * French, Turkish, Azerbaijani
- x (cedilla - 00B8)
-0328 COMBINING OGONEK
- = nasal hook
- * Americanist: nasalization
- * Polish, Lithuanian
- x (ogonek - 02DB)
-0329 COMBINING VERTICAL LINE BELOW
- * IPA: syllabic
- * Yoruba
- x (modifier letter low vertical line - 02CC)
-032A COMBINING BRIDGE BELOW
- * IPA: dental
-032B COMBINING INVERTED DOUBLE ARCH BELOW
- * IPA: labialization
- x (modifier letter small w - 02B7)
-032C COMBINING CARON BELOW
- * IPA: voiced
- * Hittite transcription
-032D COMBINING CIRCUMFLEX ACCENT BELOW
- * Americanist: fronted articulation
-032E COMBINING BREVE BELOW
-032F COMBINING INVERTED BREVE BELOW
- * Americanist: fronted articulation (variant of 032D)
- * Indo-Europeanist: semivowel
-0330 COMBINING TILDE BELOW
- * IPA: creaky voice
-0331 COMBINING MACRON BELOW
- x (low line - 005F)
- x (modifier letter low macron - 02CD)
-0332 COMBINING LOW LINE
- = underline, underscore
- * connects on left and right
- x (low line - 005F)
-0333 COMBINING DOUBLE LOW LINE
- = double underline, double underscore
- * connects on left and right
- x (combining equals sign below - 0347)
- x (double low line - 2017)
-@ Overstruck diacritics
-0334 COMBINING TILDE OVERLAY
- * IPA: velarization or pharyngealization
-0335 COMBINING SHORT STROKE OVERLAY
-0336 COMBINING LONG STROKE OVERLAY
-0337 COMBINING SHORT SOLIDUS OVERLAY
- = short slash overlay
-0338 COMBINING LONG SOLIDUS OVERLAY
- = long slash overlay
-@ Additions
-0339 COMBINING RIGHT HALF RING BELOW
-033A COMBINING INVERTED BRIDGE BELOW
-033B COMBINING SQUARE BELOW
-033C COMBINING SEAGULL BELOW
-033D COMBINING X ABOVE
-033E COMBINING VERTICAL TILDE
- * Cyrillic palatalization
- x (combining cyrillic palatalization - 0484)
-033F COMBINING DOUBLE OVERLINE
-@ Vietnamese tone marks (deprecated)
-0340 COMBINING GRAVE TONE MARK (Vietnamese)
- * kerns left or right of circumflex over vowels
- : 0300 combining grave accent
-0341 COMBINING ACUTE TONE MARK (Vietnamese)
- * kerns right of circumflex over vowels
- : 0301 combining acute accent
-@ Additions for Greek
-0342 COMBINING GREEK PERISPOMENI
-0343 COMBINING GREEK KORONIS
- : 0313 combining comma above
-0344 COMBINING GREEK DIALYTIKA TONOS
- * use of this character is discouraged
- : 0308 0301
-0345 COMBINING GREEK YPOGEGRAMMENI
- = GREEK NON-SPACING IOTA BELOW
- = iota subscript
- * note special casing issues
- x (greek ypogegrammeni - 037A)
- x (greek capital letter iota - 0399)
-@ Additions for IPA
-0346 COMBINING BRIDGE ABOVE
- * IPA: dentolabial
-0347 COMBINING EQUALS SIGN BELOW
- * IPA: alveolar
-0348 COMBINING DOUBLE VERTICAL LINE BELOW
- * IPA: strong articulation
-0349 COMBINING LEFT ANGLE BELOW
- * IPA: weak articulation
-034A COMBINING NOT TILDE ABOVE
- * IPA: denasal
-@ IPA diacritics for disordered speech
-034B COMBINING HOMOTHETIC ABOVE
- * IPA: nasal escape
-034C COMBINING ALMOST EQUAL TO ABOVE
- * IPA: velopharyngeal friction
-034D COMBINING LEFT RIGHT ARROW BELOW
- * IPA: labial spreading
-034E COMBINING UPWARDS ARROW BELOW
- * IPA: whistled articulation
-@ Double diacritics
-0360 COMBINING DOUBLE TILDE
-0361 COMBINING DOUBLE INVERTED BREVE
-0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW
- * IPA: sliding articulation
-@@ 0370 Greek and Coptic 03FF
-@ Based on ISO 8859-7
-0374 GREEK NUMERAL SIGN (Dexia keraia)
- = dexia keraia
- * indicates numeric use of letters
- x (modifier letter acute accent - 02CA)
- : 02B9 modifier letter prime
-0375 GREEK LOWER NUMERAL SIGN (Aristeri keraia)
- = aristeri keraia
- * indicates numeric use of letters
- x (modifier letter low acute accent - 02CF)
-037A GREEK YPOGEGRAMMENI
- = iota subscript
- x (combining greek ypogegrammeni - 0345)
- # 0020 0345
-037E GREEK QUESTION MARK (Erotimatiko)
- = erotimatiko
- * sentence-final punctuation
- x (question mark - 003F)
- : 003B semicolon
-0384 GREEK TONOS
- x (acute accent - 00B4)
- x (combining vertical line above - 030D)
- # 0020 0301
-0385 GREEK DIALYTIKA TONOS
- : 00A8 0301
-0386 GREEK CAPITAL LETTER ALPHA WITH TONOS
- : 0391 0301
-0387 GREEK ANO TELEIA
- * functions in Greek like a semicolon
- : 00B7 middle dot
-0388 GREEK CAPITAL LETTER EPSILON WITH TONOS
- : 0395 0301
-0389 GREEK CAPITAL LETTER ETA WITH TONOS
- : 0397 0301
-038A GREEK CAPITAL LETTER IOTA WITH TONOS
- : 0399 0301
-038C GREEK CAPITAL LETTER OMICRON WITH TONOS
- : 039F 0301
-038E GREEK CAPITAL LETTER UPSILON WITH TONOS
- : 03A5 0301
-038F GREEK CAPITAL LETTER OMEGA WITH TONOS
- : 03A9 0301
-0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
- : 03CA 0301
-0391 GREEK CAPITAL LETTER ALPHA
-0392 GREEK CAPITAL LETTER BETA
-0393 GREEK CAPITAL LETTER GAMMA
- = gamma function
-0394 GREEK CAPITAL LETTER DELTA
- x (increment - 2206)
-0395 GREEK CAPITAL LETTER EPSILON
-0396 GREEK CAPITAL LETTER ZETA
-0397 GREEK CAPITAL LETTER ETA
-0398 GREEK CAPITAL LETTER THETA
-0399 GREEK CAPITAL LETTER IOTA
- = iota adscript
-039A GREEK CAPITAL LETTER KAPPA
-039B GREEK CAPITAL LETTER LAMDA
-039C GREEK CAPITAL LETTER MU
-039D GREEK CAPITAL LETTER NU
-039E GREEK CAPITAL LETTER XI
-039F GREEK CAPITAL LETTER OMICRON
-03A0 GREEK CAPITAL LETTER PI
- x (n-ary product - 220F)
-03A1 GREEK CAPITAL LETTER RHO
-03A3 GREEK CAPITAL LETTER SIGMA
- x (latin capital letter esh - 01A9)
- x (n-ary summation - 2211)
-03A4 GREEK CAPITAL LETTER TAU
-03A5 GREEK CAPITAL LETTER UPSILON
-03A6 GREEK CAPITAL LETTER PHI
-03A7 GREEK CAPITAL LETTER CHI
-03A8 GREEK CAPITAL LETTER PSI
-03A9 GREEK CAPITAL LETTER OMEGA
- x (ohm sign - 2126)
- x (inverted ohm sign - 2127)
-03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
- : 0399 0308
-03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
- : 03A5 0308
-03AC GREEK SMALL LETTER ALPHA WITH TONOS
- : 03B1 0301
-03AD GREEK SMALL LETTER EPSILON WITH TONOS
- : 03B5 0301
-03AE GREEK SMALL LETTER ETA WITH TONOS
- : 03B7 0301
-03AF GREEK SMALL LETTER IOTA WITH TONOS
- : 03B9 0301
-03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
- : 03CB 0301
-03B1 GREEK SMALL LETTER ALPHA
- x (latin small letter alpha - 0251)
- x (proportional to - 221D)
-03B2 GREEK SMALL LETTER BETA
- x (latin small letter sharp s - 00DF)
- x (latin small letter b with stroke - 0180)
-03B3 GREEK SMALL LETTER GAMMA
- x (latin small letter gamma - 0263)
-03B4 GREEK SMALL LETTER DELTA
-03B5 GREEK SMALL LETTER EPSILON
- x (latin small letter open e - 025B)
-03B6 GREEK SMALL LETTER ZETA
-03B7 GREEK SMALL LETTER ETA
-03B8 GREEK SMALL LETTER THETA
- x (latin small letter barred o - 0275)
- x (cyrillic small letter fita - 0473)
-03B9 GREEK SMALL LETTER IOTA
- x (latin small letter iota - 0269)
- x (turned greek small letter iota - 2129)
-03BA GREEK SMALL LETTER KAPPA
-03BB GREEK SMALL LETTER LAMDA
- = lambda
-03BC GREEK SMALL LETTER MU
- x (micro sign - 00B5)
-03BD GREEK SMALL LETTER NU
-03BE GREEK SMALL LETTER XI
-03BF GREEK SMALL LETTER OMICRON
-03C0 GREEK SMALL LETTER PI
- * math constant 3.141592...
-03C1 GREEK SMALL LETTER RHO
-03C2 GREEK SMALL LETTER FINAL SIGMA
-03C3 GREEK SMALL LETTER SIGMA
-03C4 GREEK SMALL LETTER TAU
-03C5 GREEK SMALL LETTER UPSILON
- x (latin small letter upsilon - 028A)
- x (latin small letter v with hook - 028B)
-03C6 GREEK SMALL LETTER PHI
- x (latin small letter phi - 0278)
-03C7 GREEK SMALL LETTER CHI
-03C8 GREEK SMALL LETTER PSI
-03C9 GREEK SMALL LETTER OMEGA
-03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA
- : 03B9 0308
-03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA
- : 03C5 0308
-03CC GREEK SMALL LETTER OMICRON WITH TONOS
- : 03BF 0301
-03CD GREEK SMALL LETTER UPSILON WITH TONOS
- : 03C5 0301
-03CE GREEK SMALL LETTER OMEGA WITH TONOS
- : 03C9 0301
-@ Variant letterforms
-03D0 GREEK BETA SYMBOL
- = GREEK SMALL LETTER CURLED BETA
- # 03B2 greek small letter beta
-03D1 GREEK THETA SYMBOL
- = GREEK SMALL LETTER SCRIPT THETA
- * used as technical symbol
- # 03B8 greek small letter theta
-03D2 GREEK UPSILON WITH HOOK SYMBOL
- = GREEK CAPITAL LETTER UPSILON HOOK
- # 03A5 greek capital letter upsilon
-03D3 GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
- = GREEK CAPITAL LETTER UPSILON HOOK TONOS
- : 03D2 0301
-03D4 GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
- = GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS
- : 03D2 0308
-03D5 GREEK PHI SYMBOL
- = GREEK SMALL LETTER SCRIPT PHI
- * used as technical symbol
- # 03C6 greek small letter phi
-03D6 GREEK PI SYMBOL
- = GREEK SMALL LETTER OMEGA PI
- * used as technical symbol
- * a variant of pi, looking like omega
- # 03C0 greek small letter pi
-03D7 GREEK KAI SYMBOL
- * used as an ampersand
-@ Archaic letters
-03DA GREEK LETTER STIGMA
-03DB GREEK SMALL LETTER STIGMA
-03DC GREEK LETTER DIGAMMA
-03DD GREEK SMALL LETTER DIGAMMA
-03DE GREEK LETTER KOPPA
-03DF GREEK SMALL LETTER KOPPA
-03E0 GREEK LETTER SAMPI
-03E1 GREEK SMALL LETTER SAMPI
-@ Coptic-unique letters
-03E2 COPTIC CAPITAL LETTER SHEI
-03E3 COPTIC SMALL LETTER SHEI
-03E4 COPTIC CAPITAL LETTER FEI
-03E5 COPTIC SMALL LETTER FEI
-03E6 COPTIC CAPITAL LETTER KHEI
-03E7 COPTIC SMALL LETTER KHEI
-03E8 COPTIC CAPITAL LETTER HORI
-03E9 COPTIC SMALL LETTER HORI
-03EA COPTIC CAPITAL LETTER GANGIA
-03EB COPTIC SMALL LETTER GANGIA
-03EC COPTIC CAPITAL LETTER SHIMA
-03ED COPTIC SMALL LETTER SHIMA
-03EE COPTIC CAPITAL LETTER DEI
-03EF COPTIC SMALL LETTER DEI
-@ Additions
-03F0 GREEK KAPPA SYMBOL
- = GREEK SMALL LETTER SCRIPT KAPPA
- * used as technical symbol
- # 03BA greek small letter kappa
-03F1 GREEK RHO SYMBOL
- = GREEK SMALL LETTER TAILED RHO
- * used as technical symbol
- # 03C1 greek small letter rho
-03F2 GREEK LUNATE SIGMA SYMBOL
- = GREEK SMALL LETTER LUNATE SIGMA
- # 03C2 greek small letter final sigma
-03F3 GREEK LETTER YOT
-@@ 0400 Cyrillic 04FF
-@ Cyrillic extensions
-0400 CYRILLIC CAPITAL LETTER IE WITH GRAVE
- : 0415 0300
-0401 CYRILLIC CAPITAL LETTER IO
- : 0415 0308
-0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
-0403 CYRILLIC CAPITAL LETTER GJE
- : 0413 0301
-0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0405 CYRILLIC CAPITAL LETTER DZE
-0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
- x (latin capital letter i - 0049)
- x (cyrillic letter palochka - 04C0)
-0407 CYRILLIC CAPITAL LETTER YI (Ukrainian)
- : 0406 0308
-0408 CYRILLIC CAPITAL LETTER JE
-0409 CYRILLIC CAPITAL LETTER LJE
-040A CYRILLIC CAPITAL LETTER NJE
-040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
-040C CYRILLIC CAPITAL LETTER KJE
- : 041A 0301
-040D CYRILLIC CAPITAL LETTER I WITH GRAVE
- : 0418 0300
-040E CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
- : 0423 0306
-040F CYRILLIC CAPITAL LETTER DZHE
-@ Basic Russian alphabet
-0410 CYRILLIC CAPITAL LETTER A
-0411 CYRILLIC CAPITAL LETTER BE
- x (latin small letter b with topbar - 0183)
-0412 CYRILLIC CAPITAL LETTER VE
-0413 CYRILLIC CAPITAL LETTER GHE
-0414 CYRILLIC CAPITAL LETTER DE
-0415 CYRILLIC CAPITAL LETTER IE
-0416 CYRILLIC CAPITAL LETTER ZHE
-0417 CYRILLIC CAPITAL LETTER ZE
-0418 CYRILLIC CAPITAL LETTER I
-0419 CYRILLIC CAPITAL LETTER SHORT I
- : 0418 0306
-041A CYRILLIC CAPITAL LETTER KA
-041B CYRILLIC CAPITAL LETTER EL
-041C CYRILLIC CAPITAL LETTER EM
-041D CYRILLIC CAPITAL LETTER EN
-041E CYRILLIC CAPITAL LETTER O
-041F CYRILLIC CAPITAL LETTER PE
-0420 CYRILLIC CAPITAL LETTER ER
-0421 CYRILLIC CAPITAL LETTER ES
-0422 CYRILLIC CAPITAL LETTER TE
-0423 CYRILLIC CAPITAL LETTER U
- x (cyrillic capital letter uk - 0478)
- x (cyrillic small letter straight u - 04AF)
-0424 CYRILLIC CAPITAL LETTER EF
-0425 CYRILLIC CAPITAL LETTER HA
-0426 CYRILLIC CAPITAL LETTER TSE
-0427 CYRILLIC CAPITAL LETTER CHE
-0428 CYRILLIC CAPITAL LETTER SHA
-0429 CYRILLIC CAPITAL LETTER SHCHA
-042A CYRILLIC CAPITAL LETTER HARD SIGN
-042B CYRILLIC CAPITAL LETTER YERU
-042C CYRILLIC CAPITAL LETTER SOFT SIGN
-042D CYRILLIC CAPITAL LETTER E
-042E CYRILLIC CAPITAL LETTER YU
-042F CYRILLIC CAPITAL LETTER YA
-0430 CYRILLIC SMALL LETTER A
-0431 CYRILLIC SMALL LETTER BE
-0432 CYRILLIC SMALL LETTER VE
-0433 CYRILLIC SMALL LETTER GHE
-0434 CYRILLIC SMALL LETTER DE
-0435 CYRILLIC SMALL LETTER IE
-0436 CYRILLIC SMALL LETTER ZHE
-0437 CYRILLIC SMALL LETTER ZE
-0438 CYRILLIC SMALL LETTER I
-0439 CYRILLIC SMALL LETTER SHORT I
- : 0438 0306
-043A CYRILLIC SMALL LETTER KA
-043B CYRILLIC SMALL LETTER EL
-043C CYRILLIC SMALL LETTER EM
-043D CYRILLIC SMALL LETTER EN
-043E CYRILLIC SMALL LETTER O
-043F CYRILLIC SMALL LETTER PE
-0440 CYRILLIC SMALL LETTER ER
-0441 CYRILLIC SMALL LETTER ES
-0442 CYRILLIC SMALL LETTER TE
-0443 CYRILLIC SMALL LETTER U
-0444 CYRILLIC SMALL LETTER EF
-0445 CYRILLIC SMALL LETTER HA
-0446 CYRILLIC SMALL LETTER TSE
-0447 CYRILLIC SMALL LETTER CHE
-0448 CYRILLIC SMALL LETTER SHA
-0449 CYRILLIC SMALL LETTER SHCHA
-044A CYRILLIC SMALL LETTER HARD SIGN
-044B CYRILLIC SMALL LETTER YERU
-044C CYRILLIC SMALL LETTER SOFT SIGN
- x (latin small letter tone six - 0185)
-044D CYRILLIC SMALL LETTER E
-044E CYRILLIC SMALL LETTER YU
-044F CYRILLIC SMALL LETTER YA
-@ Cyrillic extensions
-0450 CYRILLIC SMALL LETTER IE WITH GRAVE
- * Macedonian
- : 0435 0300
-0451 CYRILLIC SMALL LETTER IO
- * Russian, ...
- : 0435 0308
-0452 CYRILLIC SMALL LETTER DJE (Serbocroatian)
- * Serbian
- x (latin small letter d with stroke - 0111)
-0453 CYRILLIC SMALL LETTER GJE
- * Macedonian
- : 0433 0301
-0454 CYRILLIC SMALL LETTER UKRAINIAN IE
- = Old Cyrillic yest
-0455 CYRILLIC SMALL LETTER DZE
- = Old Cyrillic zelo
- * Macedonian
-0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
- = Old Cyrillic i
-0457 CYRILLIC SMALL LETTER YI (Ukrainian)
- * Ukrainian
- : 0456 0308
-0458 CYRILLIC SMALL LETTER JE
- * Serbian, Azerbaijani, Altay
-0459 CYRILLIC SMALL LETTER LJE
- * Serbian, Macedonian
- x (latin small letter lj - 01C9)
-045A CYRILLIC SMALL LETTER NJE
- * Serbian, Macedonian
- x (latin small letter nj - 01CC)
-045B CYRILLIC SMALL LETTER TSHE (Serbocroatian)
- = Old Cyrillic derv
- * Serbian
- x (latin small letter c with acute - 0107)
- x (latin small letter h with stroke - 0127)
- x (cyrillic capital letter tshe - 040B)
- x (planck constant over two pi - 210F)
-045C CYRILLIC SMALL LETTER KJE
- * Macedonian
- : 043A 0301
-045D CYRILLIC SMALL LETTER I WITH GRAVE
- * Macedonian
- : 0438 0300
-045E CYRILLIC SMALL LETTER SHORT U (Byelorussian)
- * Byelorussian, Uzbek
- : 0443 0306
-045F CYRILLIC SMALL LETTER DZHE
- * Serbian, Macedonian, Abkhasian
- x (latin small letter dz with caron - 01C6)
-@ Historic letters
-0460 CYRILLIC CAPITAL LETTER OMEGA
-0461 CYRILLIC SMALL LETTER OMEGA
-0462 CYRILLIC CAPITAL LETTER YAT
-0463 CYRILLIC SMALL LETTER YAT
- * Old Russian
-0464 CYRILLIC CAPITAL LETTER IOTIFIED E
-0465 CYRILLIC SMALL LETTER IOTIFIED E
-0466 CYRILLIC CAPITAL LETTER LITTLE YUS
-0467 CYRILLIC SMALL LETTER LITTLE YUS
-0468 CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-0469 CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
-046A CYRILLIC CAPITAL LETTER BIG YUS
-046B CYRILLIC SMALL LETTER BIG YUS
-046C CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-046D CYRILLIC SMALL LETTER IOTIFIED BIG YUS
-046E CYRILLIC CAPITAL LETTER KSI
-046F CYRILLIC SMALL LETTER KSI
-0470 CYRILLIC CAPITAL LETTER PSI
-0471 CYRILLIC SMALL LETTER PSI
-0472 CYRILLIC CAPITAL LETTER FITA
-0473 CYRILLIC SMALL LETTER FITA
- x (latin small letter barred o - 0275)
- x (greek small letter theta - 03B8)
-0474 CYRILLIC CAPITAL LETTER IZHITSA
-0475 CYRILLIC SMALL LETTER IZHITSA
-0476 CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
- : 0474 030F
-0477 CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
- : 0475 030F
-0478 CYRILLIC CAPITAL LETTER UK
- * basic Old Cyrillic uk is unified with CYRILLIC LETTER U
- x (cyrillic capital letter u - 0423)
-0479 CYRILLIC SMALL LETTER UK
-047A CYRILLIC CAPITAL LETTER ROUND OMEGA
-047B CYRILLIC SMALL LETTER ROUND OMEGA
-047C CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-047D CYRILLIC SMALL LETTER OMEGA WITH TITLO
-047E CYRILLIC CAPITAL LETTER OT
-047F CYRILLIC SMALL LETTER OT
-0480 CYRILLIC CAPITAL LETTER KOPPA
-0481 CYRILLIC SMALL LETTER KOPPA
-@ Historic miscellaneous
-0482 CYRILLIC THOUSANDS SIGN
-0483 COMBINING CYRILLIC TITLO
-0484 COMBINING CYRILLIC PALATALIZATION
- x (combining vertical tilde - 033E)
-0485 COMBINING CYRILLIC DASIA PNEUMATA
- x (combining reversed comma above - 0314)
-0486 COMBINING CYRILLIC PSILI PNEUMATA
- x (combining comma above - 0313)
-0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
-0489 COMBINING CYRILLIC MILLIONS SIGN
-@ Extended Cyrillic
-048C CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-048D CYRILLIC SMALL LETTER SEMISOFT SIGN
- * Kildin Sámi
-048E CYRILLIC CAPITAL LETTER ER WITH TICK
-048F CYRILLIC SMALL LETTER ER WITH TICK
- * Kildin Sámi
-0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-0491 CYRILLIC SMALL LETTER GHE WITH UPTURN
- * Old Ukrainian
-0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0493 CYRILLIC SMALL LETTER GHE WITH STROKE
- * Azerbaijani, Bashkir, ...
- * full bar form preferred over half-barred "F"-type
-0494 CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-0495 CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
- * Abkhasian, Yakut
-0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER
- * Tatar, ...
-0498 CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-0499 CYRILLIC SMALL LETTER ZE WITH DESCENDER
- * Bashkir
- * reversed ogonek form of the descender is preferred
-049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-049B CYRILLIC SMALL LETTER KA WITH DESCENDER
- * Abkhasian, Tajik, ...
-049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
- * Azerbaijani
-049E CYRILLIC CAPITAL LETTER KA WITH STROKE
-049F CYRILLIC SMALL LETTER KA WITH STROKE
- * Abkhasian
-04A0 CYRILLIC CAPITAL LETTER BASHKIR KA
-04A1 CYRILLIC SMALL LETTER BASHKIR KA
-04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER
- * Bashkir, ...
-04A4 CYRILLIC CAPITAL LIGATURE EN GHE
-04A5 CYRILLIC SMALL LIGATURE EN GHE
- * Altay, Mari, Yakut
- * this is not a decomposable ligature
-04A6 CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (Abkhasian)
-04A7 CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (Abkhasian)
- * Abkhasian
-04A8 CYRILLIC CAPITAL LETTER ABKHASIAN HA
-04A9 CYRILLIC SMALL LETTER ABKHASIAN HA
-04AA CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04AB CYRILLIC SMALL LETTER ES WITH DESCENDER
- * Bashkir, Chuvash
- * reversed ogonek form of the descender is preferred
-04AC CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-04AD CYRILLIC SMALL LETTER TE WITH DESCENDER
- * Abkhasian
-04AE CYRILLIC CAPITAL LETTER STRAIGHT U
-04AF CYRILLIC SMALL LETTER STRAIGHT U
- * stem is straight, unlike LETTER U
- * Azerbaijani, Bashkir, ...
- x (cyrillic capital letter u - 0423)
-04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
- * Kazakh
-04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER
- * Abkhasian, Tajik, Uzbek
-04B4 CYRILLIC CAPITAL LIGATURE TE TSE (Abkhasian)
-04B5 CYRILLIC SMALL LIGATURE TE TSE (Abkhasian)
- * Abkhasian
- * this is not a decomposable ligature
-04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER
- * Abkhasian, Tajik
-04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
- * Azerbaijani
-04BA CYRILLIC CAPITAL LETTER SHHA
-04BB CYRILLIC SMALL LETTER SHHA
- * originally derived from Latin "h", but uppercase form 04BA is closer to an inverted che (0427)
- * Azerbaijani, Bashkir, ...
- x (latin small letter h - 0068)
-04BC CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-04BD CYRILLIC SMALL LETTER ABKHASIAN CHE
-04BE CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-04BF CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
- * ogonek form preferred
-04C0 CYRILLIC LETTER PALOCHKA
- * aspiration sign in many Caucasian languages
- * has no "lowercase form", i.e. is case-invariant
- x (latin capital letter i - 0049)
- x (cyrillic capital letter byelorussian-ukrainian i - 0406)
-04C1 CYRILLIC CAPITAL LETTER ZHE WITH BREVE
- : 0416 0306
-04C2 CYRILLIC SMALL LETTER ZHE WITH BREVE
- * Moldavian
- : 0436 0306
-04C3 CYRILLIC CAPITAL LETTER KA WITH HOOK
-04C4 CYRILLIC SMALL LETTER KA WITH HOOK
- * Khanty, Chukchi
-04C7 CYRILLIC CAPITAL LETTER EN WITH HOOK
-04C8 CYRILLIC SMALL LETTER EN WITH HOOK
- * Khanty, Chukchi, Nenets
-04CB CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-04CC CYRILLIC SMALL LETTER KHAKASSIAN CHE
-04D0 CYRILLIC CAPITAL LETTER A WITH BREVE
- : 0410 0306
-04D1 CYRILLIC SMALL LETTER A WITH BREVE
- : 0430 0306
-04D2 CYRILLIC CAPITAL LETTER A WITH DIAERESIS
- : 0410 0308
-04D3 CYRILLIC SMALL LETTER A WITH DIAERESIS
- : 0430 0308
-04D4 CYRILLIC CAPITAL LIGATURE A IE
-04D5 CYRILLIC SMALL LIGATURE A IE
- * this is not a decomposable ligature
- x (latin small letter ae - 00E6)
-04D6 CYRILLIC CAPITAL LETTER IE WITH BREVE
- : 0415 0306
-04D7 CYRILLIC SMALL LETTER IE WITH BREVE
- : 0435 0306
-04D8 CYRILLIC CAPITAL LETTER SCHWA
-04D9 CYRILLIC SMALL LETTER SCHWA
- x (latin small letter schwa - 0259)
-04DA CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
- : 04D8 0308
-04DB CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
- : 04D9 0308
-04DC CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
- : 0416 0308
-04DD CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
- : 0436 0308
-04DE CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
- : 0417 0308
-04DF CYRILLIC SMALL LETTER ZE WITH DIAERESIS
- : 0437 0308
-04E0 CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-04E1 CYRILLIC SMALL LETTER ABKHASIAN DZE
- x (latin small letter ezh - 0292)
-04E2 CYRILLIC CAPITAL LETTER I WITH MACRON
- : 0418 0304
-04E3 CYRILLIC SMALL LETTER I WITH MACRON
- : 0438 0304
-04E4 CYRILLIC CAPITAL LETTER I WITH DIAERESIS
- : 0418 0308
-04E5 CYRILLIC SMALL LETTER I WITH DIAERESIS
- : 0438 0308
-04E6 CYRILLIC CAPITAL LETTER O WITH DIAERESIS
- : 041E 0308
-04E7 CYRILLIC SMALL LETTER O WITH DIAERESIS
- : 043E 0308
-04E8 CYRILLIC CAPITAL LETTER BARRED O
-04E9 CYRILLIC SMALL LETTER BARRED O
- x (latin small letter barred o - 0275)
-04EA CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
- : 04E8 0308
-04EB CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
- : 04E9 0308
-04EC CYRILLIC CAPITAL LETTER E WITH DIAERESIS
- : 042D 0308
-04ED CYRILLIC SMALL LETTER E WITH DIAERESIS
- * Kildin Sámi
- : 044D 0308
-04EE CYRILLIC CAPITAL LETTER U WITH MACRON
- : 0423 0304
-04EF CYRILLIC SMALL LETTER U WITH MACRON
- : 0443 0304
-04F0 CYRILLIC CAPITAL LETTER U WITH DIAERESIS
- : 0423 0308
-04F1 CYRILLIC SMALL LETTER U WITH DIAERESIS
- : 0443 0308
-04F2 CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
- : 0423 030B
-04F3 CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
- : 0443 030B
-04F4 CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
- : 0427 0308
-04F5 CYRILLIC SMALL LETTER CHE WITH DIAERESIS
- : 0447 0308
-04F8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
- : 042B 0308
-04F9 CYRILLIC SMALL LETTER YERU WITH DIAERESIS
- : 044B 0308
-@@ 0530 Armenian 058F
-@ Uppercase letters
-0531 ARMENIAN CAPITAL LETTER AYB
-0532 ARMENIAN CAPITAL LETTER BEN
-0533 ARMENIAN CAPITAL LETTER GIM
-0534 ARMENIAN CAPITAL LETTER DA
-0535 ARMENIAN CAPITAL LETTER ECH
-0536 ARMENIAN CAPITAL LETTER ZA
-0537 ARMENIAN CAPITAL LETTER EH
-0538 ARMENIAN CAPITAL LETTER ET
-0539 ARMENIAN CAPITAL LETTER TO
-053A ARMENIAN CAPITAL LETTER ZHE
-053B ARMENIAN CAPITAL LETTER INI
-053C ARMENIAN CAPITAL LETTER LIWN
-053D ARMENIAN CAPITAL LETTER XEH
-053E ARMENIAN CAPITAL LETTER CA
-053F ARMENIAN CAPITAL LETTER KEN
-0540 ARMENIAN CAPITAL LETTER HO
-0541 ARMENIAN CAPITAL LETTER JA
-0542 ARMENIAN CAPITAL LETTER GHAD
-0543 ARMENIAN CAPITAL LETTER CHEH
-0544 ARMENIAN CAPITAL LETTER MEN
-0545 ARMENIAN CAPITAL LETTER YI
-0546 ARMENIAN CAPITAL LETTER NOW
-0547 ARMENIAN CAPITAL LETTER SHA
-0548 ARMENIAN CAPITAL LETTER VO
-0549 ARMENIAN CAPITAL LETTER CHA
-054A ARMENIAN CAPITAL LETTER PEH
-054B ARMENIAN CAPITAL LETTER JHEH
-054C ARMENIAN CAPITAL LETTER RA
-054D ARMENIAN CAPITAL LETTER SEH
-054E ARMENIAN CAPITAL LETTER VEW
-054F ARMENIAN CAPITAL LETTER TIWN
-0550 ARMENIAN CAPITAL LETTER REH
-0551 ARMENIAN CAPITAL LETTER CO
-0552 ARMENIAN CAPITAL LETTER YIWN
-0553 ARMENIAN CAPITAL LETTER PIWR
-0554 ARMENIAN CAPITAL LETTER KEH
-0555 ARMENIAN CAPITAL LETTER OH
-0556 ARMENIAN CAPITAL LETTER FEH
-@ Modifier letters
-0559 ARMENIAN MODIFIER LETTER LEFT HALF RING
- x (modifier letter reversed comma - 02BD)
- x (modifier letter left half ring - 02BF)
- x (combining reversed comma above - 0314)
-055A ARMENIAN APOSTROPHE
- = ARMENIAN MODIFIER LETTER RIGHT HALF RING
- x (modifier letter apostrophe - 02BC)
- x (modifier letter right half ring - 02BE)
- x (combining comma above - 0313)
-055B ARMENIAN EMPHASIS MARK
- = shesht
- x (modifier letter acute accent - 02CA)
-055C ARMENIAN EXCLAMATION MARK
- = batsaganchakan nshan
-055D ARMENIAN COMMA
- = bowt
- x (modifier letter grave accent - 02CB)
-055E ARMENIAN QUESTION MARK
- = hartsakan nshan
-055F ARMENIAN ABBREVIATION MARK
- = patiw
-@ Lowercase letters
-0561 ARMENIAN SMALL LETTER AYB
-0562 ARMENIAN SMALL LETTER BEN
-0563 ARMENIAN SMALL LETTER GIM
-0564 ARMENIAN SMALL LETTER DA
-0565 ARMENIAN SMALL LETTER ECH
-0566 ARMENIAN SMALL LETTER ZA
-0567 ARMENIAN SMALL LETTER EH
-0568 ARMENIAN SMALL LETTER ET
-0569 ARMENIAN SMALL LETTER TO
-056A ARMENIAN SMALL LETTER ZHE
-056B ARMENIAN SMALL LETTER INI
-056C ARMENIAN SMALL LETTER LIWN
-056D ARMENIAN SMALL LETTER XEH
-056E ARMENIAN SMALL LETTER CA
-056F ARMENIAN SMALL LETTER KEN
-0570 ARMENIAN SMALL LETTER HO
-0571 ARMENIAN SMALL LETTER JA
-0572 ARMENIAN SMALL LETTER GHAD
-0573 ARMENIAN SMALL LETTER CHEH
-0574 ARMENIAN SMALL LETTER MEN
-0575 ARMENIAN SMALL LETTER YI
-0576 ARMENIAN SMALL LETTER NOW
-0577 ARMENIAN SMALL LETTER SHA
-0578 ARMENIAN SMALL LETTER VO
-0579 ARMENIAN SMALL LETTER CHA
-057A ARMENIAN SMALL LETTER PEH
-057B ARMENIAN SMALL LETTER JHEH
-057C ARMENIAN SMALL LETTER RA
-057D ARMENIAN SMALL LETTER SEH
-057E ARMENIAN SMALL LETTER VEW
-057F ARMENIAN SMALL LETTER TIWN
-0580 ARMENIAN SMALL LETTER REH
-0581 ARMENIAN SMALL LETTER CO
-0582 ARMENIAN SMALL LETTER YIWN
-0583 ARMENIAN SMALL LETTER PIWR
-0584 ARMENIAN SMALL LETTER KEH
-0585 ARMENIAN SMALL LETTER OH
-0586 ARMENIAN SMALL LETTER FEH
-0587 ARMENIAN SMALL LIGATURE ECH YIWN
- # 0565 0582
-@ Punctuation
-0589 ARMENIAN FULL STOP
- = vertsaket
- * may also be used for Georgian
- x (colon - 003A)
-058A ARMENIAN HYPHEN
- = yentamna
-@@ 0590 Hebrew 05FF
-@ Cantillation marks
-0591 HEBREW ACCENT ETNAHTA
-0592 HEBREW ACCENT SEGOL
-0593 HEBREW ACCENT SHALSHELET
-0594 HEBREW ACCENT ZAQEF QATAN
-0595 HEBREW ACCENT ZAQEF GADOL
-0596 HEBREW ACCENT TIPEHA *
- = tarha
-0597 HEBREW ACCENT REVIA
-0598 HEBREW ACCENT ZARQA *
- = zinorit
-0599 HEBREW ACCENT PASHTA
-059A HEBREW ACCENT YETIV
-059B HEBREW ACCENT TEVIR
-059C HEBREW ACCENT GERESH
-059D HEBREW ACCENT GERESH MUQDAM
-059E HEBREW ACCENT GERSHAYIM
-059F HEBREW ACCENT QARNEY PARA
-05A0 HEBREW ACCENT TELISHA GEDOLA
-05A1 HEBREW ACCENT PAZER
-05A3 HEBREW ACCENT MUNAH
-05A4 HEBREW ACCENT MAHAPAKH
-05A5 HEBREW ACCENT MERKHA *
- = yored
-05A6 HEBREW ACCENT MERKHA KEFULA
-05A7 HEBREW ACCENT DARGA
-05A8 HEBREW ACCENT QADMA *
- = azla
-05A9 HEBREW ACCENT TELISHA QETANA
-05AA HEBREW ACCENT YERAH BEN YOMO *
- = galgal
-05AB HEBREW ACCENT OLE
-05AC HEBREW ACCENT ILUY
-05AD HEBREW ACCENT DEHI
-05AE HEBREW ACCENT ZINOR
-05AF HEBREW MARK MASORA CIRCLE
-@ Points and punctuation
-05B0 HEBREW POINT SHEVA
-05B1 HEBREW POINT HATAF SEGOL
-05B2 HEBREW POINT HATAF PATAH
-05B3 HEBREW POINT HATAF QAMATS
-05B4 HEBREW POINT HIRIQ
-05B5 HEBREW POINT TSERE
-05B6 HEBREW POINT SEGOL
-05B7 HEBREW POINT PATAH
- * furtive patah is not a distinct character
-05B8 HEBREW POINT QAMATS
-05B9 HEBREW POINT HOLAM
-05BB HEBREW POINT QUBUTS
-05BC HEBREW POINT DAGESH OR MAPIQ (or shuruq)
- = shuruq
- * falls within the base letter
-05BD HEBREW POINT METEG *
- = siluq
- * may be used as a Hebrew accent sof pasuq
-05BE HEBREW PUNCTUATION MAQAF
-05BF HEBREW POINT RAFE
-05C0 HEBREW PUNCTUATION PASEQ *
- = legarmeh
- * may be treated as spacing punctuation, not as a point
-05C1 HEBREW POINT SHIN DOT
-05C2 HEBREW POINT SIN DOT
-05C3 HEBREW PUNCTUATION SOF PASUQ *
- * may be used as a Hebrew punctuation colon
-05C4 HEBREW MARK UPPER DOT
-@ Based on ISO 8859-8
-05D0 HEBREW LETTER ALEF
- = aleph
- x (alef symbol - 2135)
-05D1 HEBREW LETTER BET
- x (bet symbol - 2136)
-05D2 HEBREW LETTER GIMEL
- x (gimel symbol - 2137)
-05D3 HEBREW LETTER DALET
- x (dalet symbol - 2138)
-05D4 HEBREW LETTER HE
-05D5 HEBREW LETTER VAV
-05D6 HEBREW LETTER ZAYIN
-05D7 HEBREW LETTER HET
-05D8 HEBREW LETTER TET
-05D9 HEBREW LETTER YOD
-05DA HEBREW LETTER FINAL KAF
-05DB HEBREW LETTER KAF
-05DC HEBREW LETTER LAMED
-05DD HEBREW LETTER FINAL MEM
-05DE HEBREW LETTER MEM
-05DF HEBREW LETTER FINAL NUN
-05E0 HEBREW LETTER NUN
-05E1 HEBREW LETTER SAMEKH
-05E2 HEBREW LETTER AYIN
-05E3 HEBREW LETTER FINAL PE
-05E4 HEBREW LETTER PE
-05E5 HEBREW LETTER FINAL TSADI
-05E6 HEBREW LETTER TSADI
- = zade
-05E7 HEBREW LETTER QOF
-05E8 HEBREW LETTER RESH
-05E9 HEBREW LETTER SHIN
-05EA HEBREW LETTER TAV
-@ Yiddish digraphs
-05F0 HEBREW LIGATURE YIDDISH DOUBLE VAV
- = tsvey vovn
-05F1 HEBREW LIGATURE YIDDISH VAV YOD
-05F2 HEBREW LIGATURE YIDDISH DOUBLE YOD
- = tsvey yudn
-@ Additional punctuation
-05F3 HEBREW PUNCTUATION GERESH
-05F4 HEBREW PUNCTUATION GERSHAYIM
-@@ 0600 Arabic 06FF
-@ Based on ISO 8859-6
-060C ARABIC COMMA
- * also used with Thaana and Syriac in modern text
- x (comma - 002C)
-061B ARABIC SEMICOLON
- * also used with Thaana and Syriac in modern text
- x (semicolon - 003B)
-061F ARABIC QUESTION MARK
- * also used with Thaana and Syriac in modern text
- x (question mark - 003F)
-0621 ARABIC LETTER HAMZA
- x (modifier letter right half ring - 02BE)
-0622 ARABIC LETTER ALEF WITH MADDA ABOVE
- : 0627 0653
-0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
- : 0627 0654
-0624 ARABIC LETTER WAW WITH HAMZA ABOVE
- : 0648 0654
-0625 ARABIC LETTER ALEF WITH HAMZA BELOW
- : 0627 0655
-0626 ARABIC LETTER YEH WITH HAMZA ABOVE
- : 064A 0654
-0627 ARABIC LETTER ALEF
-0628 ARABIC LETTER BEH
-0629 ARABIC LETTER TEH MARBUTA
-062A ARABIC LETTER TEH
-062B ARABIC LETTER THEH
-062C ARABIC LETTER JEEM
-062D ARABIC LETTER HAH
-062E ARABIC LETTER KHAH
-062F ARABIC LETTER DAL
-0630 ARABIC LETTER THAL
-0631 ARABIC LETTER REH
-0632 ARABIC LETTER ZAIN
-0633 ARABIC LETTER SEEN
-0634 ARABIC LETTER SHEEN
-0635 ARABIC LETTER SAD
-0636 ARABIC LETTER DAD
-0637 ARABIC LETTER TAH
-0638 ARABIC LETTER ZAH
-0639 ARABIC LETTER AIN
- x (latin small letter ezh reversed - 01B9)
- x (modifier letter left half ring - 02BF)
-063A ARABIC LETTER GHAIN
-0640 ARABIC TATWEEL
- = kashida
- * inserted to stretch characters
- * also used with Syriac
-0641 ARABIC LETTER FEH
-0642 ARABIC LETTER QAF
-0643 ARABIC LETTER KAF
-0644 ARABIC LETTER LAM
-0645 ARABIC LETTER MEEM
-0646 ARABIC LETTER NOON
-0647 ARABIC LETTER HEH
-0648 ARABIC LETTER WAW
-0649 ARABIC LETTER ALEF MAKSURA
- * represents YEH-shaped letter with no dots in any positional form
-064A ARABIC LETTER YEH
-@ Points from ISO 8859-6
-064B ARABIC FATHATAN
-064C ARABIC DAMMATAN
-064D ARABIC KASRATAN
-064E ARABIC FATHA
-064F ARABIC DAMMA
-0650 ARABIC KASRA
-0651 ARABIC SHADDA
-0652 ARABIC SUKUN
-@ Combining maddah and hamza
-0653 ARABIC MADDAH ABOVE
-0654 ARABIC HAMZA ABOVE
-0655 ARABIC HAMZA BELOW
-@ Arabic-Indic digits
-0660 ARABIC-INDIC DIGIT ZERO
-0661 ARABIC-INDIC DIGIT ONE
-0662 ARABIC-INDIC DIGIT TWO
-0663 ARABIC-INDIC DIGIT THREE
-0664 ARABIC-INDIC DIGIT FOUR
-0665 ARABIC-INDIC DIGIT FIVE
-0666 ARABIC-INDIC DIGIT SIX
-0667 ARABIC-INDIC DIGIT SEVEN
-0668 ARABIC-INDIC DIGIT EIGHT
-0669 ARABIC-INDIC DIGIT NINE
-@ Punctuation
-066A ARABIC PERCENT SIGN
- x (percent sign - 0025)
-066B ARABIC DECIMAL SEPARATOR
-066C ARABIC THOUSANDS SEPARATOR
-066D ARABIC FIVE POINTED STAR
- x (asterisk - 002A)
-@ Point
-0670 ARABIC LETTER SUPERSCRIPT ALEF
-@ Extended Arabic letters
-0671 ARABIC LETTER ALEF WASLA
- * Arabic
-0672 ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
- * Baluchi, Kashmiri
-0673 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
- * Baluchi, Kashmiri
-0674 ARABIC LETTER HIGH HAMZA
- * Kazakh
- * forms digraphs
-0675 ARABIC LETTER HIGH HAMZA ALEF
- * Kazakh
- # 0627 0674
-0676 ARABIC LETTER HIGH HAMZA WAW
- * Kazakh
- # 0648 0674
-0677 ARABIC LETTER U WITH HAMZA ABOVE
- * Kazakh
- # 06C7 0674
-0678 ARABIC LETTER HIGH HAMZA YEH
- * Kazakh
- # 064A 0674
-0679 ARABIC LETTER TTEH
- * Urdu
-067A ARABIC LETTER TTEHEH
- * Sindhi
-067B ARABIC LETTER BEEH
- * Sindhi
-067C ARABIC LETTER TEH WITH RING
- * Pashto
-067D ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
- * Sindhi
-067E ARABIC LETTER PEH
- * Persian, Urdu, ...
-067F ARABIC LETTER TEHEH
- * Sindhi
-0680 ARABIC LETTER BEHEH
- * Sindhi
-0681 ARABIC LETTER HAH WITH HAMZA ABOVE
- * Pashto
-0682 ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
- * Pashto
-0683 ARABIC LETTER NYEH
- * Sindhi
-0684 ARABIC LETTER DYEH
- * Sindhi
-0685 ARABIC LETTER HAH WITH THREE DOTS ABOVE
- * Pashto
-0686 ARABIC LETTER TCHEH
- * Persian, Urdu, ...
-0687 ARABIC LETTER TCHEHEH
- * Sindhi
-0688 ARABIC LETTER DDAL
- * Urdu
-0689 ARABIC LETTER DAL WITH RING
- * Pashto
-068A ARABIC LETTER DAL WITH DOT BELOW
- * Sindhi
-068B ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
- * Lahnda
-068C ARABIC LETTER DAHAL
- * Sindhi
-068D ARABIC LETTER DDAHAL
- * Sindhi
-068E ARABIC LETTER DUL
- * Sindhi
-068F ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
- * Sindhi
-0690 ARABIC LETTER DAL WITH FOUR DOTS ABOVE
- * Urdu
-0691 ARABIC LETTER RREH
- * Urdu
-0692 ARABIC LETTER REH WITH SMALL V
- * Kurdish
-0693 ARABIC LETTER REH WITH RING
- * Pashto
-0694 ARABIC LETTER REH WITH DOT BELOW
- * Kurdish
-0695 ARABIC LETTER REH WITH SMALL V BELOW
- * Kurdish
-0696 ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
- * Pashto
-0697 ARABIC LETTER REH WITH TWO DOTS ABOVE
- * Dargwa
-0698 ARABIC LETTER JEH
- * Persian, Urdu, ...
-0699 ARABIC LETTER REH WITH FOUR DOTS ABOVE
- * Sindhi
-069A ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
- * Pashto
-069B ARABIC LETTER SEEN WITH THREE DOTS BELOW
- * Uighur
-069C ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
- * Moroccan Arabic
-069D ARABIC LETTER SAD WITH TWO DOTS BELOW
- * Turkic
-069E ARABIC LETTER SAD WITH THREE DOTS ABOVE
- * Berber
-069F ARABIC LETTER TAH WITH THREE DOTS ABOVE
- * old Hausa
-06A0 ARABIC LETTER AIN WITH THREE DOTS ABOVE
- * old Malay
-06A1 ARABIC LETTER DOTLESS FEH
- * Adighe
-06A2 ARABIC LETTER FEH WITH DOT MOVED BELOW
- * Maghrib Arabic
-06A3 ARABIC LETTER FEH WITH DOT BELOW
- * Ingush
-06A4 ARABIC LETTER VEH
- * Arabic for foreign words
-06A5 ARABIC LETTER FEH WITH THREE DOTS BELOW
- * Arabic for foreign words
-06A6 ARABIC LETTER PEHEH
- * Sindhi
-06A7 ARABIC LETTER QAF WITH DOT ABOVE
- * Maghrib Arabic
-06A8 ARABIC LETTER QAF WITH THREE DOTS ABOVE
- * Tunisian Arabic
-06A9 ARABIC LETTER KEHEH
- * Persian, Urdu, ...
-06AA ARABIC LETTER SWASH KAF
-06AB ARABIC LETTER KAF WITH RING
- * Pashto
-06AC ARABIC LETTER KAF WITH DOT ABOVE
- * old Malay
-06AD ARABIC LETTER NG
- * Uighur, Kazakh, old Malay, ...
-06AE ARABIC LETTER KAF WITH THREE DOTS BELOW
- * Berber
-06AF ARABIC LETTER GAF *
- * Persian, Urdu, ...
-06B0 ARABIC LETTER GAF WITH RING
- * Lahnda
-06B1 ARABIC LETTER NGOEH
- * Sindhi
-06B2 ARABIC LETTER GAF WITH TWO DOTS BELOW
- * Sindhi
-06B3 ARABIC LETTER GUEH
- * Sindhi
-06B4 ARABIC LETTER GAF WITH THREE DOTS ABOVE
- * Sindhi
-06B5 ARABIC LETTER LAM WITH SMALL V
- * Kurdish
-06B6 ARABIC LETTER LAM WITH DOT ABOVE
- * Kurdish
-06B7 ARABIC LETTER LAM WITH THREE DOTS ABOVE
- * Kurdish
-06B8 ARABIC LETTER LAM WITH THREE DOTS BELOW
-06B9 ARABIC LETTER NOON WITH DOT BELOW
-06BA ARABIC LETTER NOON GHUNNA
- * Urdu
-06BB ARABIC LETTER RNOON
- * Sindhi
-06BC ARABIC LETTER NOON WITH RING
- * Pashto
-06BD ARABIC LETTER NOON WITH THREE DOTS ABOVE
- * old Malay
-06BE ARABIC LETTER HEH DOACHASHMEE
- * Urdu
- * forms aspirate digraphs
-06BF ARABIC LETTER TCHEH WITH DOT ABOVE
-06C0 ARABIC LETTER HEH WITH YEH ABOVE
- = ARABIC LETTER HAMZAH ON HA
- = izafet
- * Persian, Urdu
- * actually a ligature, and not an independent letter
- : 06D5 0654
-06C1 ARABIC LETTER HEH GOAL
- * Urdu
-06C2 ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
- * Urdu
- * actually a ligature, and not an independent letter
- : 06C1 0654
-06C3 ARABIC LETTER TEH MARBUTA GOAL
- * Urdu
-06C4 ARABIC LETTER WAW WITH RING
- * Kashmiri
-06C5 ARABIC LETTER KIRGHIZ OE
- * Kirghiz
-06C6 ARABIC LETTER OE
- * Uighur, Kurdish, Kazakh
-06C7 ARABIC LETTER U
- * Kirghiz
-06C8 ARABIC LETTER YU
- * Uighur
-06C9 ARABIC LETTER KIRGHIZ YU
- * Kazakh, Kirghiz
-06CA ARABIC LETTER WAW WITH TWO DOTS ABOVE
- * Kurdish
-06CB ARABIC LETTER VE
- * Uighur, Kazakh
-06CC ARABIC LETTER FARSI YEH
- * Arabic, Persian, Urdu, ...
-06CD ARABIC LETTER YEH WITH TAIL
- * Pashto, Sindhi
-06CE ARABIC LETTER YEH WITH SMALL V
- * Kurdish
-06CF ARABIC LETTER WAW WITH DOT ABOVE
-06D0 ARABIC LETTER E *
- * Pashto, Uighur
- * used as the letter bbeh in Sindhi
-06D1 ARABIC LETTER YEH WITH THREE DOTS BELOW
- * old Malay
-06D2 ARABIC LETTER YEH BARREE
- * Urdu
-06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
- * Urdu
- * actually a ligature, and not an independent letter
- : 06D2 0654
-@ Punctuation
-06D4 ARABIC FULL STOP
- * Urdu
-@ Extended Arabic letter
-06D5 ARABIC LETTER AE
- * Uighur, Kazakh, Kirghiz
-@ Koranic annotation signs
-06D6 ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
-06D7 ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
-06D8 ARABIC SMALL HIGH MEEM INITIAL FORM
-06D9 ARABIC SMALL HIGH LAM ALEF
-06DA ARABIC SMALL HIGH JEEM
-06DB ARABIC SMALL HIGH THREE DOTS
-06DC ARABIC SMALL HIGH SEEN
-06DD ARABIC END OF AYAH
-06DE ARABIC START OF RUB EL HIZB
-06DF ARABIC SMALL HIGH ROUNDED ZERO
-06E0 ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
-06E1 ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
-06E2 ARABIC SMALL HIGH MEEM ISOLATED FORM
-06E3 ARABIC SMALL LOW SEEN
-06E4 ARABIC SMALL HIGH MADDA
-06E5 ARABIC SMALL WAW
-06E6 ARABIC SMALL YEH
-06E7 ARABIC SMALL HIGH YEH
-06E8 ARABIC SMALL HIGH NOON
-06E9 ARABIC PLACE OF SAJDAH
-06EA ARABIC EMPTY CENTRE LOW STOP
-06EB ARABIC EMPTY CENTRE HIGH STOP
-06EC ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
-06ED ARABIC SMALL LOW MEEM
-@ Eastern Arabic-Indic digits (Persian and Urdu)
-06F0 EXTENDED ARABIC-INDIC DIGIT ZERO
-06F1 EXTENDED ARABIC-INDIC DIGIT ONE
-06F2 EXTENDED ARABIC-INDIC DIGIT TWO
-06F3 EXTENDED ARABIC-INDIC DIGIT THREE
-06F4 EXTENDED ARABIC-INDIC DIGIT FOUR
- * different glyphs in Persian and Urdu
-06F5 EXTENDED ARABIC-INDIC DIGIT FIVE
- * Persian and Urdu share glyph different from Arabic
-06F6 EXTENDED ARABIC-INDIC DIGIT SIX
- * Persian glyph different from Arabic
-06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN
- * Urdu glyph different from Arabic
-06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT
-06F9 EXTENDED ARABIC-INDIC DIGIT NINE
-@ Extended Arabic letters
-06FA ARABIC LETTER SHEEN WITH DOT BELOW
-06FB ARABIC LETTER DAD WITH DOT BELOW
-06FC ARABIC LETTER GHAIN WITH DOT BELOW
-@ Signs for Sindhi
-06FD ARABIC SIGN SINDHI AMPERSAND
-06FE ARABIC SIGN SINDHI POSTPOSITION MEN
-@@ 0700 Syriac 074F
-@ Syriac punctuation and signs
-0700 SYRIAC END OF PARAGRAPH
- * marks the end of a paragraph
-0701 SYRIAC SUPRALINEAR FULL STOP
- * marks interrogations, imperatives, and pauses, especially in Biblical texts
-0702 SYRIAC SUBLINEAR FULL STOP
- * marks subordinate clauses and minor pauses, especially in Biblical texts
-0703 SYRIAC SUPRALINEAR COLON
- * marks expressions of wonder and has a distinct pausal value in Biblical texts
-0704 SYRIAC SUBLINEAR COLON
- * used at the end of verses of supplications
-0705 SYRIAC HORIZONTAL COLON
- * joins two words closely together in a context to which a rising tone is suitable
-0706 SYRIAC COLON SKEWED LEFT
- * marks a dependent clause
-0707 SYRIAC COLON SKEWED RIGHT
- * marks the end of a subdivision of the apodosis, or latter part of a Biblical verse
-0708 SYRIAC SUPRALINEAR COLON SKEWED LEFT
- * marks a minor phrase division
-0709 SYRIAC SUBLINEAR COLON SKEWED RIGHT
- * marks the end of a real or rhetorical question
-070A SYRIAC CONTRACTION
- * a contraction mark, mostly used in East Syriac
- * placed at the end of an incomplete word
-070B SYRIAC HARKLEAN OBELUS
- * marks the beginning of a phrase, word, or morpheme that has a marginal note
-070C SYRIAC HARKLEAN METOBELUS
- * marks the end of a section with a marginal note
-070D SYRIAC HARKLEAN ASTERISCUS
- * marks the beginning of a phrase, word, or morpheme that has a marginal note
-@ Syriac format control character
-070F SYRIAC ABBREVIATION MARK
- * marks the beginning of a Syriac abbreviation
-@ Syriac letters
-0710 SYRIAC LETTER ALAPH
-0711 SYRIAC LETTER SUPERSCRIPT ALAPH
- * used in East Syriac texts to indicate an etymological Alaph
-0712 SYRIAC LETTER BETH
-0713 SYRIAC LETTER GAMAL
-0714 SYRIAC LETTER GAMAL GARSHUNI
- * used in Garshuni documents
-0715 SYRIAC LETTER DALATH
-0716 SYRIAC LETTER DOTLESS DALATH RISH
- * ambiguous form for undifferentiated early dalath/rish
-0717 SYRIAC LETTER HE
-0718 SYRIAC LETTER WAW
-0719 SYRIAC LETTER ZAIN
-071A SYRIAC LETTER HETH
-071B SYRIAC LETTER TETH
-071C SYRIAC LETTER TETH GARSHUNI
- * used in Garshuni documents
-071D SYRIAC LETTER YUDH
-071E SYRIAC LETTER YUDH HE
- * mostly used in East Syriac texts
-071F SYRIAC LETTER KAPH
-0720 SYRIAC LETTER LAMADH
-0721 SYRIAC LETTER MIM
-0722 SYRIAC LETTER NUN
-0723 SYRIAC LETTER SEMKATH
-0724 SYRIAC LETTER FINAL SEMKATH
-0725 SYRIAC LETTER E
-0726 SYRIAC LETTER PE
-0727 SYRIAC LETTER REVERSED PE
- * used in Christian Palestinian Aramaic
-0728 SYRIAC LETTER SADHE
-0729 SYRIAC LETTER QAPH
-072A SYRIAC LETTER RISH
-072B SYRIAC LETTER SHIN
-072C SYRIAC LETTER TAW
-@ Syriac points (vowels)
-0730 SYRIAC PTHAHA ABOVE
-0731 SYRIAC PTHAHA BELOW
-0732 SYRIAC PTHAHA DOTTED
-0733 SYRIAC ZQAPHA ABOVE
-0734 SYRIAC ZQAPHA BELOW
-0735 SYRIAC ZQAPHA DOTTED
-0736 SYRIAC RBASA ABOVE
-0737 SYRIAC RBASA BELOW
-0738 SYRIAC DOTTED ZLAMA HORIZONTAL
-0739 SYRIAC DOTTED ZLAMA ANGULAR
-073A SYRIAC HBASA ABOVE
-073B SYRIAC HBASA BELOW
-073C SYRIAC HBASA-ESASA DOTTED
-073D SYRIAC ESASA ABOVE
-073E SYRIAC ESASA BELOW
-073F SYRIAC RWAHA
-@ Syriac marks
-0740 SYRIAC FEMININE DOT
- * feminine marker used with the Taw feminine suffix
-0741 SYRIAC QUSHSHAYA
- * indicates a plosive pronunciation
-0742 SYRIAC RUKKAKHA
- * indicates an aspirated (spirantized) pronunciation
-0743 SYRIAC TWO VERTICAL DOTS ABOVE
- * accent mark used in ancient manuscripts
-0744 SYRIAC TWO VERTICAL DOTS BELOW
- * accent mark used in ancient manuscripts
-0745 SYRIAC THREE DOTS ABOVE
- * diacritic used in Turoyo for letters not found in Syriac
-0746 SYRIAC THREE DOTS BELOW
- * diacritic used in Turoyo for letters not found in Syriac
-0747 SYRIAC OBLIQUE LINE ABOVE
- * indication of a silent letter
-0748 SYRIAC OBLIQUE LINE BELOW
- * indication of a silent letter
- * also used to indicate numbers multiplied by a certain constant
-0749 SYRIAC MUSIC
- * a music mark
- * also used in the Syrian Orthodox Anaphora book to mark the breaking of the Eucharist bread
-074A SYRIAC BARREKH
- * a diacritic cross used in liturgical texts
-@@ 0780 Thaana 07BF
-@ Basic consonants
-0780 THAANA LETTER HAA
-0781 THAANA LETTER SHAVIYANI
-0782 THAANA LETTER NOONU
-0783 THAANA LETTER RAA
-0784 THAANA LETTER BAA
-0785 THAANA LETTER LHAVIYANI
-0786 THAANA LETTER KAAFU
-0787 THAANA LETTER ALIFU
-0788 THAANA LETTER VAAVU
-0789 THAANA LETTER MEEMU
-078A THAANA LETTER FAAFU
-078B THAANA LETTER DHAALU
-078C THAANA LETTER THAA
-078D THAANA LETTER LAAMU
-078E THAANA LETTER GAAFU
-078F THAANA LETTER GNAVIYANI
-0790 THAANA LETTER SEENU
-0791 THAANA LETTER DAVIYANI
-0792 THAANA LETTER ZAVIYANI
-0793 THAANA LETTER TAVIYANI
-0794 THAANA LETTER YAA
-0795 THAANA LETTER PAVIYANI
-0796 THAANA LETTER JAVIYANI
-0797 THAANA LETTER CHAVIYANI
-@ Extensions for Arabic
-0798 THAANA LETTER TTAA
-0799 THAANA LETTER HHAA
-079A THAANA LETTER KHAA
-079B THAANA LETTER THAALU
-079C THAANA LETTER ZAA
-079D THAANA LETTER SHEENU
-079E THAANA LETTER SAADHU
-079F THAANA LETTER DAADHU
-07A0 THAANA LETTER TO
-07A1 THAANA LETTER ZO
-07A2 THAANA LETTER AINU
-07A3 THAANA LETTER GHAINU
-07A4 THAANA LETTER QAAFU
-07A5 THAANA LETTER WAAVU
-@ Vowels
-07A6 THAANA ABAFILI
-07A7 THAANA AABAAFILI
-07A8 THAANA IBIFILI
-07A9 THAANA EEBEEFILI
-07AA THAANA UBUFILI
-07AB THAANA OOBOOFILI
-07AC THAANA EBEFILI
-07AD THAANA EYBEYFILI
-07AE THAANA OBOFILI
-07AF THAANA OABOAFILI
-07B0 THAANA SUKUN
-@@ 0900 Devanagari 097F
-@ Based on ISCII 1988
-@ Various signs
-0901 DEVANAGARI SIGN CANDRABINDU
- = anunasika
- x (combining candrabindu - 0310)
-0902 DEVANAGARI SIGN ANUSVARA
- = bindu
-0903 DEVANAGARI SIGN VISARGA
-@ Independent vowels
-0905 DEVANAGARI LETTER A
-0906 DEVANAGARI LETTER AA
-0907 DEVANAGARI LETTER I
-0908 DEVANAGARI LETTER II
-0909 DEVANAGARI LETTER U
-090A DEVANAGARI LETTER UU
-090B DEVANAGARI LETTER VOCALIC R
-090C DEVANAGARI LETTER VOCALIC L
-090D DEVANAGARI LETTER CANDRA E
-090E DEVANAGARI LETTER SHORT E
- * for transcribing Dravidian short e
-090F DEVANAGARI LETTER E
-0910 DEVANAGARI LETTER AI
-0911 DEVANAGARI LETTER CANDRA O
-0912 DEVANAGARI LETTER SHORT O
- * for transcribing Dravidian short o
-0913 DEVANAGARI LETTER O
-0914 DEVANAGARI LETTER AU
-@ Consonants
-0915 DEVANAGARI LETTER KA
-0916 DEVANAGARI LETTER KHA
-0917 DEVANAGARI LETTER GA
-0918 DEVANAGARI LETTER GHA
-0919 DEVANAGARI LETTER NGA
-091A DEVANAGARI LETTER CA
-091B DEVANAGARI LETTER CHA
-091C DEVANAGARI LETTER JA
-091D DEVANAGARI LETTER JHA
-091E DEVANAGARI LETTER NYA
-091F DEVANAGARI LETTER TTA
-0920 DEVANAGARI LETTER TTHA
-0921 DEVANAGARI LETTER DDA
-0922 DEVANAGARI LETTER DDHA
-0923 DEVANAGARI LETTER NNA
-0924 DEVANAGARI LETTER TA
-0925 DEVANAGARI LETTER THA
-0926 DEVANAGARI LETTER DA
-0927 DEVANAGARI LETTER DHA
-0928 DEVANAGARI LETTER NA
-0929 DEVANAGARI LETTER NNNA
- * for transcribing Dravidian alveolar n
- : 0928 093C
-092A DEVANAGARI LETTER PA
-092B DEVANAGARI LETTER PHA
-092C DEVANAGARI LETTER BA
-092D DEVANAGARI LETTER BHA
-092E DEVANAGARI LETTER MA
-092F DEVANAGARI LETTER YA
-0930 DEVANAGARI LETTER RA
-0931 DEVANAGARI LETTER RRA
- * for transcribing Dravidian alveolar r
- * half form is represented as "Eyelash RA"
- : 0930 093C
-0932 DEVANAGARI LETTER LA
-0933 DEVANAGARI LETTER LLA
-0934 DEVANAGARI LETTER LLLA
- * for transcribing Dravidian l
- : 0933 093C
-0935 DEVANAGARI LETTER VA
-0936 DEVANAGARI LETTER SHA
-0937 DEVANAGARI LETTER SSA
-0938 DEVANAGARI LETTER SA
-0939 DEVANAGARI LETTER HA
-@ Various signs
-093C DEVANAGARI SIGN NUKTA
- * for extending the alphabet to new letters
-093D DEVANAGARI SIGN AVAGRAHA
-093E DEVANAGARI VOWEL SIGN AA
-@ Dependent vowel signs
-093F DEVANAGARI VOWEL SIGN I
- * stands to the left of the consonant
-0940 DEVANAGARI VOWEL SIGN II
-0941 DEVANAGARI VOWEL SIGN U
-0942 DEVANAGARI VOWEL SIGN UU
-0943 DEVANAGARI VOWEL SIGN VOCALIC R
-0944 DEVANAGARI VOWEL SIGN VOCALIC RR
-0945 DEVANAGARI VOWEL SIGN CANDRA E
- = candra
-0946 DEVANAGARI VOWEL SIGN SHORT E
- * for transcribing Dravidian vowels
-0947 DEVANAGARI VOWEL SIGN E
-0948 DEVANAGARI VOWEL SIGN AI
-0949 DEVANAGARI VOWEL SIGN CANDRA O
-094A DEVANAGARI VOWEL SIGN SHORT O
- * for transcribing Dravidian vowels
-094B DEVANAGARI VOWEL SIGN O
-094C DEVANAGARI VOWEL SIGN AU
-@ Various signs
-094D DEVANAGARI SIGN VIRAMA
- = halant
- * suppresses inherent vowel
-0950 DEVANAGARI OM
-0951 DEVANAGARI STRESS SIGN UDATTA
-0952 DEVANAGARI STRESS SIGN ANUDATTA
-0953 DEVANAGARI GRAVE ACCENT
-0954 DEVANAGARI ACUTE ACCENT
-@ Additional consonants
-0958 DEVANAGARI LETTER QA
- : 0915 093C
-0959 DEVANAGARI LETTER KHHA
- : 0916 093C
-095A DEVANAGARI LETTER GHHA
- : 0917 093C
-095B DEVANAGARI LETTER ZA
- : 091C 093C
-095C DEVANAGARI LETTER DDDHA
- : 0921 093C
-095D DEVANAGARI LETTER RHA
- : 0922 093C
-095E DEVANAGARI LETTER FA
- : 092B 093C
-095F DEVANAGARI LETTER YYA
- : 092F 093C
-@ Generic additions
-0960 DEVANAGARI LETTER VOCALIC RR
-0961 DEVANAGARI LETTER VOCALIC LL
-0962 DEVANAGARI VOWEL SIGN VOCALIC L
-0963 DEVANAGARI VOWEL SIGN VOCALIC LL
-0964 DEVANAGARI DANDA
- = phrase separator
-0965 DEVANAGARI DOUBLE DANDA
-@ Digits
-0966 DEVANAGARI DIGIT ZERO
-0967 DEVANAGARI DIGIT ONE
-0968 DEVANAGARI DIGIT TWO
-0969 DEVANAGARI DIGIT THREE
-096A DEVANAGARI DIGIT FOUR
-096B DEVANAGARI DIGIT FIVE
-096C DEVANAGARI DIGIT SIX
-096D DEVANAGARI DIGIT SEVEN
-096E DEVANAGARI DIGIT EIGHT
-096F DEVANAGARI DIGIT NINE
-@ Devanagari-specific additions
-0970 DEVANAGARI ABBREVIATION SIGN
-@@ 0980 Bengali 09FF
-@ Based on ISCII 1988
-@ Various signs
-0981 BENGALI SIGN CANDRABINDU
-0982 BENGALI SIGN ANUSVARA
-0983 BENGALI SIGN VISARGA
-@ Independent vowels
-0985 BENGALI LETTER A
-0986 BENGALI LETTER AA
-0987 BENGALI LETTER I
-0988 BENGALI LETTER II
-0989 BENGALI LETTER U
-098A BENGALI LETTER UU
-098B BENGALI LETTER VOCALIC R
-098C BENGALI LETTER VOCALIC L
-098F BENGALI LETTER E
-0990 BENGALI LETTER AI
-0993 BENGALI LETTER O
-0994 BENGALI LETTER AU
-@ Consonants
-0995 BENGALI LETTER KA
-0996 BENGALI LETTER KHA
-0997 BENGALI LETTER GA
-0998 BENGALI LETTER GHA
-0999 BENGALI LETTER NGA
-099A BENGALI LETTER CA
-099B BENGALI LETTER CHA
-099C BENGALI LETTER JA
-099D BENGALI LETTER JHA
-099E BENGALI LETTER NYA
-099F BENGALI LETTER TTA
-09A0 BENGALI LETTER TTHA
-09A1 BENGALI LETTER DDA
-09A2 BENGALI LETTER DDHA
-09A3 BENGALI LETTER NNA
-09A4 BENGALI LETTER TA
-09A5 BENGALI LETTER THA
-09A6 BENGALI LETTER DA
-09A7 BENGALI LETTER DHA
-09A8 BENGALI LETTER NA
-09AA BENGALI LETTER PA
-09AB BENGALI LETTER PHA
-09AC BENGALI LETTER BA
- = Bengali va, wa
-09AD BENGALI LETTER BHA
-09AE BENGALI LETTER MA
-09AF BENGALI LETTER YA
-09B0 BENGALI LETTER RA
-09B2 BENGALI LETTER LA
-09B6 BENGALI LETTER SHA
-09B7 BENGALI LETTER SSA
-09B8 BENGALI LETTER SA
-09B9 BENGALI LETTER HA
-@ Various signs
-09BC BENGALI SIGN NUKTA
- * for extending the alphabet to new letters
-@ Dependent vowel signs
-09BE BENGALI VOWEL SIGN AA
-09BF BENGALI VOWEL SIGN I
- * stands to the left of the consonant
-09C0 BENGALI VOWEL SIGN II
-09C1 BENGALI VOWEL SIGN U
-09C2 BENGALI VOWEL SIGN UU
-09C3 BENGALI VOWEL SIGN VOCALIC R
-09C4 BENGALI VOWEL SIGN VOCALIC RR
-09C7 BENGALI VOWEL SIGN E
- * stands to the left of the consonant
-09C8 BENGALI VOWEL SIGN AI
- * stands to the left of the consonant
-09CB BENGALI VOWEL SIGN O
- * pieces on both sides of the consonant
- : 09C7 09BE
-09CC BENGALI VOWEL SIGN AU
- * pieces on both sides of the consonant
- : 09C7 09D7
-@ Various signs
-09CD BENGALI SIGN VIRAMA
- = halant
-09D7 BENGALI AU LENGTH MARK
-@ Additional consonants
-09DC BENGALI LETTER RRA
- : 09A1 09BC
-09DD BENGALI LETTER RHA
- : 09A2 09BC
-09DF BENGALI LETTER YYA
- : 09AF 09BC
-@ Generic additions
-09E0 BENGALI LETTER VOCALIC RR
-09E1 BENGALI LETTER VOCALIC LL
-09E2 BENGALI VOWEL SIGN VOCALIC L
-09E3 BENGALI VOWEL SIGN VOCALIC LL
-@ Digits
-09E6 BENGALI DIGIT ZERO
-09E7 BENGALI DIGIT ONE
-09E8 BENGALI DIGIT TWO
-09E9 BENGALI DIGIT THREE
-09EA BENGALI DIGIT FOUR
-09EB BENGALI DIGIT FIVE
-09EC BENGALI DIGIT SIX
-09ED BENGALI DIGIT SEVEN
-09EE BENGALI DIGIT EIGHT
-09EF BENGALI DIGIT NINE
-@ Bengali-specific additions
-09F0 BENGALI LETTER RA WITH MIDDLE DIAGONAL (Assamese)
- * Assamese
-09F1 BENGALI LETTER RA WITH LOWER DIAGONAL (Assamese)
- = BENGALI LETTER VA WITH LOWER DIAGONAL
- * Assamese
-09F2 BENGALI RUPEE MARK
-09F3 BENGALI RUPEE SIGN
-09F4 BENGALI CURRENCY NUMERATOR ONE
-09F5 BENGALI CURRENCY NUMERATOR TWO
-09F6 BENGALI CURRENCY NUMERATOR THREE
-09F7 BENGALI CURRENCY NUMERATOR FOUR
-09F8 BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
-09F9 BENGALI CURRENCY DENOMINATOR SIXTEEN
-09FA BENGALI ISSHAR
-@@ 0A00 Gurmukhi 0A7F
-@ Based on ISCII 1988
-@ Various signs
-0A02 GURMUKHI SIGN BINDI
-@ Independent vowels
-0A05 GURMUKHI LETTER A
-0A06 GURMUKHI LETTER AA
-0A07 GURMUKHI LETTER I
-0A08 GURMUKHI LETTER II
-0A09 GURMUKHI LETTER U
-0A0A GURMUKHI LETTER UU
-0A0F GURMUKHI LETTER EE
-0A10 GURMUKHI LETTER AI
-0A13 GURMUKHI LETTER OO
-0A14 GURMUKHI LETTER AU
-@ Consonants
-0A15 GURMUKHI LETTER KA
-0A16 GURMUKHI LETTER KHA
-0A17 GURMUKHI LETTER GA
-0A18 GURMUKHI LETTER GHA
-0A19 GURMUKHI LETTER NGA
-0A1A GURMUKHI LETTER CA
-0A1B GURMUKHI LETTER CHA
-0A1C GURMUKHI LETTER JA
-0A1D GURMUKHI LETTER JHA
-0A1E GURMUKHI LETTER NYA
-0A1F GURMUKHI LETTER TTA
-0A20 GURMUKHI LETTER TTHA
-0A21 GURMUKHI LETTER DDA
-0A22 GURMUKHI LETTER DDHA
-0A23 GURMUKHI LETTER NNA
-0A24 GURMUKHI LETTER TA
-0A25 GURMUKHI LETTER THA
-0A26 GURMUKHI LETTER DA
-0A27 GURMUKHI LETTER DHA
-0A28 GURMUKHI LETTER NA
-0A2A GURMUKHI LETTER PA
-0A2B GURMUKHI LETTER PHA
-0A2C GURMUKHI LETTER BA
-0A2D GURMUKHI LETTER BHA
-0A2E GURMUKHI LETTER MA
-0A2F GURMUKHI LETTER YA
-0A30 GURMUKHI LETTER RA
-0A32 GURMUKHI LETTER LA
-0A33 GURMUKHI LETTER LLA
- : 0A32 0A3C
-0A35 GURMUKHI LETTER VA
-0A36 GURMUKHI LETTER SHA
- : 0A38 0A3C
-0A38 GURMUKHI LETTER SA
-0A39 GURMUKHI LETTER HA
-@ Various signs
-0A3C GURMUKHI SIGN NUKTA
- * for extending the alphabet to new letters
-@ Dependent vowel signs
-0A3E GURMUKHI VOWEL SIGN AA
-0A3F GURMUKHI VOWEL SIGN I
- * stands to the left of the consonant
-0A40 GURMUKHI VOWEL SIGN II
-0A41 GURMUKHI VOWEL SIGN U
-0A42 GURMUKHI VOWEL SIGN UU
-0A47 GURMUKHI VOWEL SIGN EE
-0A48 GURMUKHI VOWEL SIGN AI
-0A4B GURMUKHI VOWEL SIGN OO
-0A4C GURMUKHI VOWEL SIGN AU
-0A4D GURMUKHI SIGN VIRAMA
-@ Additional consonants
-0A59 GURMUKHI LETTER KHHA
- : 0A16 0A3C
-0A5A GURMUKHI LETTER GHHA
- : 0A17 0A3C
-0A5B GURMUKHI LETTER ZA
- : 0A1C 0A3C
-0A5C GURMUKHI LETTER RRA
-0A5E GURMUKHI LETTER FA
- : 0A2B 0A3C
-@ Digits
-0A66 GURMUKHI DIGIT ZERO
-0A67 GURMUKHI DIGIT ONE
-0A68 GURMUKHI DIGIT TWO
-0A69 GURMUKHI DIGIT THREE
-0A6A GURMUKHI DIGIT FOUR
-0A6B GURMUKHI DIGIT FIVE
-0A6C GURMUKHI DIGIT SIX
-0A6D GURMUKHI DIGIT SEVEN
-0A6E GURMUKHI DIGIT EIGHT
-0A6F GURMUKHI DIGIT NINE
-@ Gurmukhi-specific additions
-0A70 GURMUKHI TIPPI
- * nasalization
-0A71 GURMUKHI ADDAK
- * doubles following consonant
-0A72 GURMUKHI IRI
- * base for vowels
-0A73 GURMUKHI URA
- * base for vowels
-0A74 GURMUKHI EK ONKAR
- * God is One
-@@ 0A80 Gujarati 0AFF
-@ Based on ISCII 1988
-@ Various signs
-0A81 GUJARATI SIGN CANDRABINDU
-0A82 GUJARATI SIGN ANUSVARA
-0A83 GUJARATI SIGN VISARGA
-@ Independent vowels
-0A85 GUJARATI LETTER A
-0A86 GUJARATI LETTER AA
-0A87 GUJARATI LETTER I
-0A88 GUJARATI LETTER II
-0A89 GUJARATI LETTER U
-0A8A GUJARATI LETTER UU
-0A8B GUJARATI LETTER VOCALIC R
-0A8D GUJARATI VOWEL CANDRA E
-0A8F GUJARATI LETTER E
-0A90 GUJARATI LETTER AI
-0A91 GUJARATI VOWEL CANDRA O
-0A93 GUJARATI LETTER O
-0A94 GUJARATI LETTER AU
-@ Consonants
-0A95 GUJARATI LETTER KA
-0A96 GUJARATI LETTER KHA
-0A97 GUJARATI LETTER GA
-0A98 GUJARATI LETTER GHA
-0A99 GUJARATI LETTER NGA
-0A9A GUJARATI LETTER CA
-0A9B GUJARATI LETTER CHA
-0A9C GUJARATI LETTER JA
-0A9D GUJARATI LETTER JHA
-0A9E GUJARATI LETTER NYA
-0A9F GUJARATI LETTER TTA
-0AA0 GUJARATI LETTER TTHA
-0AA1 GUJARATI LETTER DDA
-0AA2 GUJARATI LETTER DDHA
-0AA3 GUJARATI LETTER NNA
-0AA4 GUJARATI LETTER TA
-0AA5 GUJARATI LETTER THA
-0AA6 GUJARATI LETTER DA
-0AA7 GUJARATI LETTER DHA
-0AA8 GUJARATI LETTER NA
-0AAA GUJARATI LETTER PA
-0AAB GUJARATI LETTER PHA
-0AAC GUJARATI LETTER BA
-0AAD GUJARATI LETTER BHA
-0AAE GUJARATI LETTER MA
-0AAF GUJARATI LETTER YA
-0AB0 GUJARATI LETTER RA
-0AB2 GUJARATI LETTER LA
-0AB3 GUJARATI LETTER LLA
-0AB5 GUJARATI LETTER VA
-0AB6 GUJARATI LETTER SHA
-0AB7 GUJARATI LETTER SSA
-0AB8 GUJARATI LETTER SA
-0AB9 GUJARATI LETTER HA
-@ Various signs
-0ABC GUJARATI SIGN NUKTA
- * for extending the alphabet to new letters
-0ABD GUJARATI SIGN AVAGRAHA
-@ Dependent vowel signs
-0ABE GUJARATI VOWEL SIGN AA
-0ABF GUJARATI VOWEL SIGN I
- * stands to the left of the consonant
-0AC0 GUJARATI VOWEL SIGN II
-0AC1 GUJARATI VOWEL SIGN U
-0AC2 GUJARATI VOWEL SIGN UU
-0AC3 GUJARATI VOWEL SIGN VOCALIC R
-0AC4 GUJARATI VOWEL SIGN VOCALIC RR
-0AC5 GUJARATI VOWEL SIGN CANDRA E
-0AC7 GUJARATI VOWEL SIGN E
-0AC8 GUJARATI VOWEL SIGN AI
-0AC9 GUJARATI VOWEL SIGN CANDRA O
-0ACB GUJARATI VOWEL SIGN O
-0ACC GUJARATI VOWEL SIGN AU
-@ Various signs
-0ACD GUJARATI SIGN VIRAMA
-0AD0 GUJARATI OM
-@ Generic additions
-0AE0 GUJARATI LETTER VOCALIC RR
-@ Digits
-0AE6 GUJARATI DIGIT ZERO
-0AE7 GUJARATI DIGIT ONE
-0AE8 GUJARATI DIGIT TWO
-0AE9 GUJARATI DIGIT THREE
-0AEA GUJARATI DIGIT FOUR
-0AEB GUJARATI DIGIT FIVE
-0AEC GUJARATI DIGIT SIX
-0AED GUJARATI DIGIT SEVEN
-0AEE GUJARATI DIGIT EIGHT
-0AEF GUJARATI DIGIT NINE
-@@ 0B00 Oriya 0B7F
-@ Based on ISCII 1988
-@ Various signs
-0B01 ORIYA SIGN CANDRABINDU
-0B02 ORIYA SIGN ANUSVARA
-0B03 ORIYA SIGN VISARGA
-@ Independent vowels
-0B05 ORIYA LETTER A
-0B06 ORIYA LETTER AA
-0B07 ORIYA LETTER I
-0B08 ORIYA LETTER II
-0B09 ORIYA LETTER U
-0B0A ORIYA LETTER UU
-0B0B ORIYA LETTER VOCALIC R
-0B0C ORIYA LETTER VOCALIC L
-0B0F ORIYA LETTER E
-0B10 ORIYA LETTER AI
-0B13 ORIYA LETTER O
-0B14 ORIYA LETTER AU
-@ Consonants
-0B15 ORIYA LETTER KA
-0B16 ORIYA LETTER KHA
-0B17 ORIYA LETTER GA
-0B18 ORIYA LETTER GHA
-0B19 ORIYA LETTER NGA
-0B1A ORIYA LETTER CA
-0B1B ORIYA LETTER CHA
-0B1C ORIYA LETTER JA
-0B1D ORIYA LETTER JHA
-0B1E ORIYA LETTER NYA
-0B1F ORIYA LETTER TTA
-0B20 ORIYA LETTER TTHA
-0B21 ORIYA LETTER DDA
-0B22 ORIYA LETTER DDHA
-0B23 ORIYA LETTER NNA
-0B24 ORIYA LETTER TA
-0B25 ORIYA LETTER THA
-0B26 ORIYA LETTER DA
-0B27 ORIYA LETTER DHA
-0B28 ORIYA LETTER NA
-0B2A ORIYA LETTER PA
-0B2B ORIYA LETTER PHA
-0B2C ORIYA LETTER BA
- = Oriya va, wa
-0B2D ORIYA LETTER BHA
-0B2E ORIYA LETTER MA
-0B2F ORIYA LETTER YA
-0B30 ORIYA LETTER RA
-0B32 ORIYA LETTER LA
-0B33 ORIYA LETTER LLA
-0B35 <reserved>
- x (oriya letter ba - 0B2C)
-0B36 ORIYA LETTER SHA
-0B37 ORIYA LETTER SSA
-0B38 ORIYA LETTER SA
-0B39 ORIYA LETTER HA
-@ Various signs
-0B3C ORIYA SIGN NUKTA
- * for extending the alphabet to new letters
-0B3D ORIYA SIGN AVAGRAHA
-@ Dependent vowel signs
-0B3E ORIYA VOWEL SIGN AA
-0B3F ORIYA VOWEL SIGN I
-0B40 ORIYA VOWEL SIGN II
-0B41 ORIYA VOWEL SIGN U
-0B42 ORIYA VOWEL SIGN UU
-0B43 ORIYA VOWEL SIGN VOCALIC R
-0B47 ORIYA VOWEL SIGN E
- * stands to the left of the consonant
-0B48 ORIYA VOWEL SIGN AI
- * pieces left of and above the consonant
- : 0B47 0B56
-0B4B ORIYA VOWEL SIGN O
- * pieces on both sides of the consonant
- : 0B47 0B3E
-0B4C ORIYA VOWEL SIGN AU
- * pieces on both sides of the consonant
- : 0B47 0B57
-@ Various signs
-0B4D ORIYA SIGN VIRAMA
-0B56 ORIYA AI LENGTH MARK
-0B57 ORIYA AU LENGTH MARK
-@ Additional consonants
-0B5C ORIYA LETTER RRA
- : 0B21 0B3C
-0B5D ORIYA LETTER RHA
- : 0B22 0B3C
-0B5F ORIYA LETTER YYA
-@ Generic additions
-0B60 ORIYA LETTER VOCALIC RR
-0B61 ORIYA LETTER VOCALIC LL
-@ Digits
-0B66 ORIYA DIGIT ZERO
-0B67 ORIYA DIGIT ONE
-0B68 ORIYA DIGIT TWO
-0B69 ORIYA DIGIT THREE
-0B6A ORIYA DIGIT FOUR
-0B6B ORIYA DIGIT FIVE
-0B6C ORIYA DIGIT SIX
-0B6D ORIYA DIGIT SEVEN
-0B6E ORIYA DIGIT EIGHT
-0B6F ORIYA DIGIT NINE
-@ Oriya-specific addition
-0B70 ORIYA ISSHAR
-@@ 0B80 Tamil 0BFF
-@ Based on ISCII 1988
-@ Various signs
-0B82 TAMIL SIGN ANUSVARA
-0B83 TAMIL SIGN VISARGA
- = aytham
-@ Independent vowels
-0B85 TAMIL LETTER A
-0B86 TAMIL LETTER AA
-0B87 TAMIL LETTER I
-0B88 TAMIL LETTER II
-0B89 TAMIL LETTER U
-0B8A TAMIL LETTER UU
-0B8E TAMIL LETTER E
-0B8F TAMIL LETTER EE
-0B90 TAMIL LETTER AI
-0B92 TAMIL LETTER O
-0B93 TAMIL LETTER OO
-0B94 TAMIL LETTER AU
- : 0B92 0BD7
-@ Consonants
-0B95 TAMIL LETTER KA
-0B99 TAMIL LETTER NGA
-0B9A TAMIL LETTER CA
-0B9C TAMIL LETTER JA
-0B9E TAMIL LETTER NYA
-0B9F TAMIL LETTER TTA
-0BA3 TAMIL LETTER NNA
-0BA4 TAMIL LETTER TA
-0BA8 TAMIL LETTER NA
-0BA9 TAMIL LETTER NNNA
-0BAA TAMIL LETTER PA
-0BAE TAMIL LETTER MA
-0BAF TAMIL LETTER YA
-0BB0 TAMIL LETTER RA
-0BB1 TAMIL LETTER RRA
-0BB2 TAMIL LETTER LA
-0BB3 TAMIL LETTER LLA
-0BB4 TAMIL LETTER LLLA
-0BB5 TAMIL LETTER VA
-0BB7 TAMIL LETTER SSA
-0BB8 TAMIL LETTER SA
-0BB9 TAMIL LETTER HA
-@ Dependent vowel signs
-0BBE TAMIL VOWEL SIGN AA
-0BBF TAMIL VOWEL SIGN I
-0BC0 TAMIL VOWEL SIGN II
-0BC1 TAMIL VOWEL SIGN U
-0BC2 TAMIL VOWEL SIGN UU
-0BC6 TAMIL VOWEL SIGN E
- * stands to the left of the consonant
-0BC7 TAMIL VOWEL SIGN EE
- * stands to the left of the consonant
-0BC8 TAMIL VOWEL SIGN AI
- * stands to the left of the consonant
-0BCA TAMIL VOWEL SIGN O
- * pieces on both sides of the consonant
- : 0BC6 0BBE
-0BCB TAMIL VOWEL SIGN OO
- * pieces on both sides of the consonant
- : 0BC7 0BBE
-0BCC TAMIL VOWEL SIGN AU
- * pieces on both sides of the consonant
- : 0BC6 0BD7
-@ Various signs
-0BCD TAMIL SIGN VIRAMA
-0BD7 TAMIL AU LENGTH MARK
-@ Digits
-0BE6 <reserved>
- x (digit zero - 0030)
-0BE7 TAMIL DIGIT ONE
-0BE8 TAMIL DIGIT TWO
-0BE9 TAMIL DIGIT THREE
-0BEA TAMIL DIGIT FOUR
-0BEB TAMIL DIGIT FIVE
-0BEC TAMIL DIGIT SIX
-0BED TAMIL DIGIT SEVEN
-0BEE TAMIL DIGIT EIGHT
-0BEF TAMIL DIGIT NINE
-@ Tamil-specific additions
-0BF0 TAMIL NUMBER TEN
-0BF1 TAMIL NUMBER ONE HUNDRED
-0BF2 TAMIL NUMBER ONE THOUSAND
-@@ 0C00 Telugu 0C7F
-@ Based on ISCII 1988
-@ Various signs
-0C01 TELUGU SIGN CANDRABINDU
-0C02 TELUGU SIGN ANUSVARA
-0C03 TELUGU SIGN VISARGA
-@ Independent vowels
-0C05 TELUGU LETTER A
-0C06 TELUGU LETTER AA
-0C07 TELUGU LETTER I
-0C08 TELUGU LETTER II
-0C09 TELUGU LETTER U
-0C0A TELUGU LETTER UU
-0C0B TELUGU LETTER VOCALIC R
-0C0C TELUGU LETTER VOCALIC L
-0C0E TELUGU LETTER E
-0C0F TELUGU LETTER EE
-0C10 TELUGU LETTER AI
-0C12 TELUGU LETTER O
-0C13 TELUGU LETTER OO
-0C14 TELUGU LETTER AU
-@ Consonants
-0C15 TELUGU LETTER KA
-0C16 TELUGU LETTER KHA
-0C17 TELUGU LETTER GA
-0C18 TELUGU LETTER GHA
-0C19 TELUGU LETTER NGA
-0C1A TELUGU LETTER CA
-0C1B TELUGU LETTER CHA
-0C1C TELUGU LETTER JA
-0C1D TELUGU LETTER JHA
-0C1E TELUGU LETTER NYA
-0C1F TELUGU LETTER TTA
-0C20 TELUGU LETTER TTHA
-0C21 TELUGU LETTER DDA
-0C22 TELUGU LETTER DDHA
-0C23 TELUGU LETTER NNA
-0C24 TELUGU LETTER TA
-0C25 TELUGU LETTER THA
-0C26 TELUGU LETTER DA
-0C27 TELUGU LETTER DHA
-0C28 TELUGU LETTER NA
-0C2A TELUGU LETTER PA
-0C2B TELUGU LETTER PHA
-0C2C TELUGU LETTER BA
-0C2D TELUGU LETTER BHA
-0C2E TELUGU LETTER MA
-0C2F TELUGU LETTER YA
-0C30 TELUGU LETTER RA
-0C31 TELUGU LETTER RRA
-0C32 TELUGU LETTER LA
-0C33 TELUGU LETTER LLA
-0C35 TELUGU LETTER VA
-0C36 TELUGU LETTER SHA
-0C37 TELUGU LETTER SSA
-0C38 TELUGU LETTER SA
-0C39 TELUGU LETTER HA
-@ Dependent vowel signs
-0C3E TELUGU VOWEL SIGN AA
-0C3F TELUGU VOWEL SIGN I
-0C40 TELUGU VOWEL SIGN II
-0C41 TELUGU VOWEL SIGN U
-0C42 TELUGU VOWEL SIGN UU
-0C43 TELUGU VOWEL SIGN VOCALIC R
-0C44 TELUGU VOWEL SIGN VOCALIC RR
-0C46 TELUGU VOWEL SIGN E
-0C47 TELUGU VOWEL SIGN EE
-0C48 TELUGU VOWEL SIGN AI
- : 0C46 0C56
-0C4A TELUGU VOWEL SIGN O
-0C4B TELUGU VOWEL SIGN OO
-0C4C TELUGU VOWEL SIGN AU
-@ Various signs
-0C4D TELUGU SIGN VIRAMA
-0C55 TELUGU LENGTH MARK
-0C56 TELUGU AI LENGTH MARK
-@ Generic additions
-0C60 TELUGU LETTER VOCALIC RR
-0C61 TELUGU LETTER VOCALIC LL
-@ Digits
-0C66 TELUGU DIGIT ZERO
-0C67 TELUGU DIGIT ONE
-0C68 TELUGU DIGIT TWO
-0C69 TELUGU DIGIT THREE
-0C6A TELUGU DIGIT FOUR
-0C6B TELUGU DIGIT FIVE
-0C6C TELUGU DIGIT SIX
-0C6D TELUGU DIGIT SEVEN
-0C6E TELUGU DIGIT EIGHT
-0C6F TELUGU DIGIT NINE
-@@ 0C80 Kannada 0CFF
-@ Based on ISCII 1988
-@ Various signs
-0C82 KANNADA SIGN ANUSVARA
-0C83 KANNADA SIGN VISARGA
-@ Independent vowels
-0C85 KANNADA LETTER A
-0C86 KANNADA LETTER AA
-0C87 KANNADA LETTER I
-0C88 KANNADA LETTER II
-0C89 KANNADA LETTER U
-0C8A KANNADA LETTER UU
-0C8B KANNADA LETTER VOCALIC R
-0C8C KANNADA LETTER VOCALIC L
-0C8E KANNADA LETTER E
-0C8F KANNADA LETTER EE
-0C90 KANNADA LETTER AI
-0C92 KANNADA LETTER O
-0C93 KANNADA LETTER OO
-0C94 KANNADA LETTER AU
-@ Consonants
-0C95 KANNADA LETTER KA
-0C96 KANNADA LETTER KHA
-0C97 KANNADA LETTER GA
-0C98 KANNADA LETTER GHA
-0C99 KANNADA LETTER NGA
-0C9A KANNADA LETTER CA
-0C9B KANNADA LETTER CHA
-0C9C KANNADA LETTER JA
-0C9D KANNADA LETTER JHA
-0C9E KANNADA LETTER NYA
-0C9F KANNADA LETTER TTA
-0CA0 KANNADA LETTER TTHA
-0CA1 KANNADA LETTER DDA
-0CA2 KANNADA LETTER DDHA
-0CA3 KANNADA LETTER NNA
-0CA4 KANNADA LETTER TA
-0CA5 KANNADA LETTER THA
-0CA6 KANNADA LETTER DA
-0CA7 KANNADA LETTER DHA
-0CA8 KANNADA LETTER NA
-0CAA KANNADA LETTER PA
-0CAB KANNADA LETTER PHA
-0CAC KANNADA LETTER BA
-0CAD KANNADA LETTER BHA
-0CAE KANNADA LETTER MA
-0CAF KANNADA LETTER YA
-0CB0 KANNADA LETTER RA
-0CB1 KANNADA LETTER RRA
-0CB2 KANNADA LETTER LA
-0CB3 KANNADA LETTER LLA
-0CB5 KANNADA LETTER VA
-0CB6 KANNADA LETTER SHA
-0CB7 KANNADA LETTER SSA
-0CB8 KANNADA LETTER SA
-0CB9 KANNADA LETTER HA
-@ Dependent vowel signs
-0CBE KANNADA VOWEL SIGN AA
-0CBF KANNADA VOWEL SIGN I
-0CC0 KANNADA VOWEL SIGN II
- : 0CBF 0CD5
-0CC1 KANNADA VOWEL SIGN U
-0CC2 KANNADA VOWEL SIGN UU
-0CC3 KANNADA VOWEL SIGN VOCALIC R
-0CC4 KANNADA VOWEL SIGN VOCALIC RR
-0CC6 KANNADA VOWEL SIGN E
-0CC7 KANNADA VOWEL SIGN EE
- : 0CC6 0CD5
-0CC8 KANNADA VOWEL SIGN AI
- : 0CC6 0CD6
-0CCA KANNADA VOWEL SIGN O
- : 0CC6 0CC2
-0CCB KANNADA VOWEL SIGN OO
- : 0CCA 0CD5
-0CCC KANNADA VOWEL SIGN AU
-@ Various signs
-0CCD KANNADA SIGN VIRAMA
-0CD5 KANNADA LENGTH MARK
-0CD6 KANNADA AI LENGTH MARK
-@ Additional consonants
-0CDE KANNADA LETTER FA
- * obsolete historic letter
- * name is a mistake for LLLA
-@ Generic additions
-0CE0 KANNADA LETTER VOCALIC RR
-0CE1 KANNADA LETTER VOCALIC LL
-@ Digits
-0CE6 KANNADA DIGIT ZERO
-0CE7 KANNADA DIGIT ONE
-0CE8 KANNADA DIGIT TWO
-0CE9 KANNADA DIGIT THREE
-0CEA KANNADA DIGIT FOUR
-0CEB KANNADA DIGIT FIVE
-0CEC KANNADA DIGIT SIX
-0CED KANNADA DIGIT SEVEN
-0CEE KANNADA DIGIT EIGHT
-0CEF KANNADA DIGIT NINE
-@@ 0D00 Malayalam 0D7F
-@ Based on ISCII 1988
-@ Various signs
-0D02 MALAYALAM SIGN ANUSVARA
-0D03 MALAYALAM SIGN VISARGA
-@ Independent vowels
-0D05 MALAYALAM LETTER A
-0D06 MALAYALAM LETTER AA
-0D07 MALAYALAM LETTER I
-0D08 MALAYALAM LETTER II
-0D09 MALAYALAM LETTER U
-0D0A MALAYALAM LETTER UU
-0D0B MALAYALAM LETTER VOCALIC R
-0D0C MALAYALAM LETTER VOCALIC L
-0D0E MALAYALAM LETTER E
-0D0F MALAYALAM LETTER EE
-0D10 MALAYALAM LETTER AI
-0D12 MALAYALAM LETTER O
-0D13 MALAYALAM LETTER OO
-0D14 MALAYALAM LETTER AU
-@ Consonants
-0D15 MALAYALAM LETTER KA
-0D16 MALAYALAM LETTER KHA
-0D17 MALAYALAM LETTER GA
-0D18 MALAYALAM LETTER GHA
-0D19 MALAYALAM LETTER NGA
-0D1A MALAYALAM LETTER CA
-0D1B MALAYALAM LETTER CHA
-0D1C MALAYALAM LETTER JA
-0D1D MALAYALAM LETTER JHA
-0D1E MALAYALAM LETTER NYA
-0D1F MALAYALAM LETTER TTA
-0D20 MALAYALAM LETTER TTHA
-0D21 MALAYALAM LETTER DDA
-0D22 MALAYALAM LETTER DDHA
-0D23 MALAYALAM LETTER NNA
-0D24 MALAYALAM LETTER TA
-0D25 MALAYALAM LETTER THA
-0D26 MALAYALAM LETTER DA
-0D27 MALAYALAM LETTER DHA
-0D28 MALAYALAM LETTER NA
-0D2A MALAYALAM LETTER PA
-0D2B MALAYALAM LETTER PHA
-0D2C MALAYALAM LETTER BA
-0D2D MALAYALAM LETTER BHA
-0D2E MALAYALAM LETTER MA
-0D2F MALAYALAM LETTER YA
-0D30 MALAYALAM LETTER RA
-0D31 MALAYALAM LETTER RRA
-0D32 MALAYALAM LETTER LA
-0D33 MALAYALAM LETTER LLA
-0D34 MALAYALAM LETTER LLLA
-0D35 MALAYALAM LETTER VA
-0D36 MALAYALAM LETTER SHA
-0D37 MALAYALAM LETTER SSA
-0D38 MALAYALAM LETTER SA
-0D39 MALAYALAM LETTER HA
-@ Dependent vowel signs
-0D3E MALAYALAM VOWEL SIGN AA
-0D3F MALAYALAM VOWEL SIGN I
-0D40 MALAYALAM VOWEL SIGN II
-0D41 MALAYALAM VOWEL SIGN U
-0D42 MALAYALAM VOWEL SIGN UU
-0D43 MALAYALAM VOWEL SIGN VOCALIC R
-0D46 MALAYALAM VOWEL SIGN E
- * stands to the left of the consonant
-0D47 MALAYALAM VOWEL SIGN EE
- * stands to the left of the consonant
-0D48 MALAYALAM VOWEL SIGN AI
- * stands to the left of the consonant
-0D49 <reserved>
-0D4A MALAYALAM VOWEL SIGN O
- * pieces on both sides of the consonant
- : 0D46 0D3E
-0D4B MALAYALAM VOWEL SIGN OO
- * pieces on both sides of the consonant
- : 0D47 0D3E
-0D4C MALAYALAM VOWEL SIGN AU
- * pieces on both sides of the consonant
- : 0D46 0D57
-@ Various signs
-0D4D MALAYALAM SIGN VIRAMA
- = vowel half-u
-0D57 MALAYALAM AU LENGTH MARK
-@ Generic additions
-0D60 MALAYALAM LETTER VOCALIC RR
-0D61 MALAYALAM LETTER VOCALIC LL
-@ Digits
-0D66 MALAYALAM DIGIT ZERO
-0D67 MALAYALAM DIGIT ONE
-0D68 MALAYALAM DIGIT TWO
-0D69 MALAYALAM DIGIT THREE
-0D6A MALAYALAM DIGIT FOUR
-0D6B MALAYALAM DIGIT FIVE
-0D6C MALAYALAM DIGIT SIX
-0D6D MALAYALAM DIGIT SEVEN
-0D6E MALAYALAM DIGIT EIGHT
-0D6F MALAYALAM DIGIT NINE
-@@ 0D80 Sinhala 0DFF
-@ Various signs
-0D82 SINHALA SIGN ANUSVARAYA
- = anusvara
-0D83 SINHALA SIGN VISARGAYA
- = visarga
-@ Independent vowels
-0D85 SINHALA LETTER AYANNA
- = sinhala letter a
-0D86 SINHALA LETTER AAYANNA
- = sinhala letter aa
-0D87 SINHALA LETTER AEYANNA
- = sinhala letter ae
-0D88 SINHALA LETTER AEEYANNA
- = sinhala letter aae
-0D89 SINHALA LETTER IYANNA
- = sinhala letter i
-0D8A SINHALA LETTER IIYANNA
- = sinhala letter ii
-0D8B SINHALA LETTER UYANNA
- = sinhala letter u
-0D8C SINHALA LETTER UUYANNA
- = sinhala letter uu
-0D8D SINHALA LETTER IRUYANNA
- = sinhala letter vocalic r
-0D8E SINHALA LETTER IRUUYANNA
- = sinhala letter vocalic rr
-0D8F SINHALA LETTER ILUYANNA
- = sinhala letter vocalic l
-0D90 SINHALA LETTER ILUUYANNA
- = sinhala letter vocalic ll
-0D91 SINHALA LETTER EYANNA
- = sinhala letter e
-0D92 SINHALA LETTER EEYANNA
- = sinhala letter ee
-0D93 SINHALA LETTER AIYANNA
- = sinhala letter ai
-0D94 SINHALA LETTER OYANNA
- = sinhala letter o
-0D95 SINHALA LETTER OOYANNA
- = sinhala letter oo
-0D96 SINHALA LETTER AUYANNA
- = sinhala letter au
-@ Consonants
-0D9A SINHALA LETTER ALPAPRAANA KAYANNA
- = sinhala letter ka
-0D9B SINHALA LETTER MAHAAPRAANA KAYANNA
- = sinhala letter kha
-0D9C SINHALA LETTER ALPAPRAANA GAYANNA
- = sinhala letter ga
-0D9D SINHALA LETTER MAHAAPRAANA GAYANNA
- = sinhala letter gha
-0D9E SINHALA LETTER KANTAJA NAASIKYAYA
- = sinhala letter nga
-0D9F SINHALA LETTER SANYAKA GAYANNA
- = sinhala letter nnga
-0DA0 SINHALA LETTER ALPAPRAANA CAYANNA
- = sinhala letter ca
-0DA1 SINHALA LETTER MAHAAPRAANA CAYANNA
- = sinhala letter cha
-0DA2 SINHALA LETTER ALPAPRAANA JAYANNA
- = sinhala letter ja
-0DA3 SINHALA LETTER MAHAAPRAANA JAYANNA
- = sinhala letter jha
-0DA4 SINHALA LETTER TAALUJA NAASIKYAYA
- = sinhala letter nya
-0DA5 SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
- = sinhala letter jnya
-0DA6 SINHALA LETTER SANYAKA JAYANNA
- = sinhala letter nyja
-0DA7 SINHALA LETTER ALPAPRAANA TTAYANNA
- = sinhala letter tta
-0DA8 SINHALA LETTER MAHAAPRAANA TTAYANNA
- = sinhala letter ttha
-0DA9 SINHALA LETTER ALPAPRAANA DDAYANNA
- = sinhala letter dda
-0DAA SINHALA LETTER MAHAAPRAANA DDAYANNA
- = sinhala letter ddha
-0DAB SINHALA LETTER MUURDHAJA NAYANNA
- = sinhala letter nna
-0DAC SINHALA LETTER SANYAKA DDAYANNA
- = sinhala letter nndda
-0DAD SINHALA LETTER ALPAPRAANA TAYANNA
- = sinhala letter ta
-0DAE SINHALA LETTER MAHAAPRAANA TAYANNA
- = sinhala letter tha
-0DAF SINHALA LETTER ALPAPRAANA DAYANNA
- = sinhala letter da
-0DB0 SINHALA LETTER MAHAAPRAANA DAYANNA
- = sinhala letter dha
-0DB1 SINHALA LETTER DANTAJA NAYANNA
- = sinhala letter na
-0DB3 SINHALA LETTER SANYAKA DAYANNA
- = sinhala letter nda
-0DB4 SINHALA LETTER ALPAPRAANA PAYANNA
- = sinhala letter pa
-0DB5 SINHALA LETTER MAHAAPRAANA PAYANNA
- = sinhala letter pha
-0DB6 SINHALA LETTER ALPAPRAANA BAYANNA
- = sinhala letter ba
-0DB7 SINHALA LETTER MAHAAPRAANA BAYANNA
- = sinhala letter bha
-0DB8 SINHALA LETTER MAYANNA
- = sinhala letter ma
-0DB9 SINHALA LETTER AMBA BAYANNA
- = sinhala letter mba
-0DBA SINHALA LETTER YAYANNA
- = sinhala letter ya
-0DBB SINHALA LETTER RAYANNA
- = sinhala letter ra
-0DBD SINHALA LETTER DANTAJA LAYANNA
- = sinhala letter la
- * dental
-0DC0 SINHALA LETTER VAYANNA
- = sinhala letter va
-0DC1 SINHALA LETTER TAALUJA SAYANNA
- = sinhala letter sha
-0DC2 SINHALA LETTER MUURDHAJA SAYANNA
- = sinhala letter ssa
- * retroflex
-0DC3 SINHALA LETTER DANTAJA SAYANNA
- = sinhala letter sa
- * dental
-0DC4 SINHALA LETTER HAYANNA
- = sinhala letter ha
-0DC5 SINHALA LETTER MUURDHAJA LAYANNA
- = sinhala letter lla
- * retroflex
-0DC6 SINHALA LETTER FAYANNA
- = sinhala letter fa
-@ Sign
-0DCA SINHALA SIGN AL-LAKUNA
- = virama
-@ Dependent vowel signs
-0DCF SINHALA VOWEL SIGN AELA-PILLA
- = sinhala vowel sign aa
-0DD0 SINHALA VOWEL SIGN KETTI AEDA-PILLA
- = sinhala vowel sign ae
-0DD1 SINHALA VOWEL SIGN DIGA AEDA-PILLA
- = sinhala vowel sign aae
-0DD2 SINHALA VOWEL SIGN KETTI IS-PILLA
- = sinhala vowel sign i
-0DD3 SINHALA VOWEL SIGN DIGA IS-PILLA
- = sinhala vowel sign ii
-0DD4 SINHALA VOWEL SIGN KETTI PAA-PILLA
- = sinhala vowel sign u
-0DD6 SINHALA VOWEL SIGN DIGA PAA-PILLA
- = sinhala vowel sign uu
-0DD8 SINHALA VOWEL SIGN GAETTA-PILLA
- = sinhala vowel sign vocalic r
-0DD9 SINHALA VOWEL SIGN KOMBUVA
- = sinhala vowel sign e
-0DDA SINHALA VOWEL SIGN DIGA KOMBUVA
- = sinhala vowel sign ee
- : 0DD9 0DCA
-0DDB SINHALA VOWEL SIGN KOMBU DEKA
- = sinhala vowel sign ai
-0DDC SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
- = sinhala vowel sign o
- : 0DD9 0DCF
-0DDD SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
- = sinhala vowel sign oo
- : 0DDC 0DCA
-0DDE SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
- = sinhala vowel sign au
- : 0DD9 0DDF
-0DDF SINHALA VOWEL SIGN GAYANUKITTA
- = sinhala vowel sign vocalic l
-@ Additional dependent vowel signs
-0DF2 SINHALA VOWEL SIGN DIGA GAETTA-PILLA
- = sinhala vowel sign vocalic rr
-0DF3 SINHALA VOWEL SIGN DIGA GAYANUKITTA
- = sinhala vowel sign vocalic ll
-@ Punctuation
-0DF4 SINHALA PUNCTUATION KUNDDALIYA
-@@ 0E00 Thai 0E7F
-@ Based on TIS 620-2533
-@ Consonants
-0E01 THAI CHARACTER KO KAI
-0E02 THAI CHARACTER KHO KHAI
-0E03 THAI CHARACTER KHO KHUAT
-0E04 THAI CHARACTER KHO KHWAI
-0E05 THAI CHARACTER KHO KHON
-0E06 THAI CHARACTER KHO RAKHANG
-0E07 THAI CHARACTER NGO NGU
-0E08 THAI CHARACTER CHO CHAN
-0E09 THAI CHARACTER CHO CHING
-0E0A THAI CHARACTER CHO CHANG
-0E0B THAI CHARACTER SO SO
-0E0C THAI CHARACTER CHO CHOE
-0E0D THAI CHARACTER YO YING
-0E0E THAI CHARACTER DO CHADA
-0E0F THAI CHARACTER TO PATAK
-0E10 THAI CHARACTER THO THAN
-0E11 THAI CHARACTER THO NANGMONTHO
-0E12 THAI CHARACTER THO PHUTHAO
-0E13 THAI CHARACTER NO NEN
-0E14 THAI CHARACTER DO DEK
-0E15 THAI CHARACTER TO TAO
-0E16 THAI CHARACTER THO THUNG
-0E17 THAI CHARACTER THO THAHAN
-0E18 THAI CHARACTER THO THONG
-0E19 THAI CHARACTER NO NU
-0E1A THAI CHARACTER BO BAIMAI
-0E1B THAI CHARACTER PO PLA
-0E1C THAI CHARACTER PHO PHUNG
-0E1D THAI CHARACTER FO FA
-0E1E THAI CHARACTER PHO PHAN
-0E1F THAI CHARACTER FO FAN
-0E20 THAI CHARACTER PHO SAMPHAO
-0E21 THAI CHARACTER MO MA
-0E22 THAI CHARACTER YO YAK
-0E23 THAI CHARACTER RO RUA
-0E24 THAI CHARACTER RU
- * independent vowel letter used to write Sanskrit
-0E25 THAI CHARACTER LO LING
-0E26 THAI CHARACTER LU
- * independent vowel letter used to write Sanskrit
-0E27 THAI CHARACTER WO WAEN
-0E28 THAI CHARACTER SO SALA
-0E29 THAI CHARACTER SO RUSI
-0E2A THAI CHARACTER SO SUA
-0E2B THAI CHARACTER HO HIP
-0E2C THAI CHARACTER LO CHULA
-0E2D THAI CHARACTER O ANG
-0E2E THAI CHARACTER HO NOKHUK
-@ Sign
-0E2F THAI CHARACTER PAIYANNOI (paiyan noi)
- * ellipsis, abbreviation
-@ Vowels
-0E30 THAI CHARACTER SARA A
-0E31 THAI CHARACTER MAI HAN-AKAT
-0E32 THAI CHARACTER SARA AA
-0E33 THAI CHARACTER SARA AM
- # 0E4D 0E32
-0E34 THAI CHARACTER SARA I
-0E35 THAI CHARACTER SARA II
-0E36 THAI CHARACTER SARA UE
-0E37 THAI CHARACTER SARA UEE (sara uue)
- = sara uue
-0E38 THAI CHARACTER SARA U
-0E39 THAI CHARACTER SARA UU
-0E3A THAI CHARACTER PHINTHU
- * Pali virama
-@ Currency symbol
-0E3F THAI CURRENCY SYMBOL BAHT
-@ Vowels
-0E40 THAI CHARACTER SARA E
-0E41 THAI CHARACTER SARA AE
-0E42 THAI CHARACTER SARA O
-0E43 THAI CHARACTER SARA AI MAIMUAN (sara ai mai muan)
-0E44 THAI CHARACTER SARA AI MAIMALAI (sara ai mai malai)
-@ Signs
-0E45 THAI CHARACTER LAKKHANGYAO (lakkhang yao)
-0E46 THAI CHARACTER MAIYAMOK (mai yamok)
- * repetition
-@ Vowel
-0E47 THAI CHARACTER MAITAIKHU (mai taikhu)
-@ Tone marks
-0E48 THAI CHARACTER MAI EK
-0E49 THAI CHARACTER MAI THO
-0E4A THAI CHARACTER MAI TRI
-0E4B THAI CHARACTER MAI CHATTAWA
-@ Signs
-0E4C THAI CHARACTER THANTHAKHAT
- * cancellation mark
-0E4D THAI CHARACTER NIKHAHIT (nikkhahit)
- = nikkhahit
- * final nasal
-0E4E THAI CHARACTER YAMAKKAN
-0E4F THAI CHARACTER FONGMAN
- * used as a bullet
- x (khmer sign phnaek muan - 17D9)
-@ Digits
-0E50 THAI DIGIT ZERO
-0E51 THAI DIGIT ONE
-0E52 THAI DIGIT TWO
-0E53 THAI DIGIT THREE
-0E54 THAI DIGIT FOUR
-0E55 THAI DIGIT FIVE
-0E56 THAI DIGIT SIX
-0E57 THAI DIGIT SEVEN
-0E58 THAI DIGIT EIGHT
-0E59 THAI DIGIT NINE
-@ Signs
-0E5A THAI CHARACTER ANGKHANKHU
- * used to mark end of long sections
- * used in combination with 0E30 to mark end of a verse
-0E5B THAI CHARACTER KHOMUT
- * used to mark end of chapter or document
- x (khmer sign koomuut - 17DA)
-@@ 0E80 Lao 0EFF
-@ Based on TIS 620-2529
-@ Consonants
-0E81 LAO LETTER KO
-0E82 LAO LETTER KHO SUNG
-0E84 LAO LETTER KHO TAM
-0E87 LAO LETTER NGO
-0E88 LAO LETTER CO
-0E8A LAO LETTER SO TAM
-0E8D LAO LETTER NYO
-0E94 LAO LETTER DO
-0E95 LAO LETTER TO
-0E96 LAO LETTER THO SUNG
-0E97 LAO LETTER THO TAM
-0E99 LAO LETTER NO
-0E9A LAO LETTER BO
-0E9B LAO LETTER PO
-0E9C LAO LETTER PHO SUNG
-0E9D LAO LETTER FO TAM
-0E9E LAO LETTER PHO TAM
-0E9F LAO LETTER FO SUNG
-0EA1 LAO LETTER MO
-0EA2 LAO LETTER YO
-0EA3 LAO LETTER LO LING
-0EA5 LAO LETTER LO LOOT
-0EA7 LAO LETTER WO
-0EAA LAO LETTER SO SUNG
-0EAB LAO LETTER HO SUNG
-0EAD LAO LETTER O
-0EAE LAO LETTER HO TAM
-@ Sign
-0EAF LAO ELLIPSIS
-@ Vowels
-0EB0 LAO VOWEL SIGN A
-0EB1 LAO VOWEL SIGN MAI KAN
- * vowel shortener
-0EB2 LAO VOWEL SIGN AA
-0EB3 LAO VOWEL SIGN AM
- # 0ECD 0EB2
-0EB4 LAO VOWEL SIGN I
-0EB5 LAO VOWEL SIGN II
-0EB6 LAO VOWEL SIGN Y
-0EB7 LAO VOWEL SIGN YY
-0EB8 LAO VOWEL SIGN U
-0EB9 LAO VOWEL SIGN UU
-0EBB LAO VOWEL SIGN MAI KON
-@ Signs
-0EBC LAO SEMIVOWEL SIGN LO
-0EBD LAO SEMIVOWEL SIGN NYO
-@ Vowels
-0EC0 LAO VOWEL SIGN E
-0EC1 LAO VOWEL SIGN EI
-0EC2 LAO VOWEL SIGN O
-0EC3 LAO VOWEL SIGN AY
-0EC4 LAO VOWEL SIGN AI
-@ Sign
-0EC6 LAO KO LA
- * repetition
-@ Tone marks
-0EC8 LAO TONE MAI EK
-0EC9 LAO TONE MAI THO
-0ECA LAO TONE MAI TI
-0ECB LAO TONE MAI CATAWA
-@ Signs
-0ECC LAO CANCELLATION MARK
-0ECD LAO NIGGAHITA
- * final nasal
-@ Digits
-0ED0 LAO DIGIT ZERO
-0ED1 LAO DIGIT ONE
-0ED2 LAO DIGIT TWO
-0ED3 LAO DIGIT THREE
-0ED4 LAO DIGIT FOUR
-0ED5 LAO DIGIT FIVE
-0ED6 LAO DIGIT SIX
-0ED7 LAO DIGIT SEVEN
-0ED8 LAO DIGIT EIGHT
-0ED9 LAO DIGIT NINE
-@ Digraphs
-0EDC LAO HO NO
- # 0EAB 0E99
-0EDD LAO HO MO
- # 0EAB 0EA1
-@@ 0F00 Tibetan 0FFF
-@ Syllable
-0F00 TIBETAN SYLLABLE OM
-@ Head marks
-0F01 TIBETAN MARK GTER YIG MGO TRUNCATED A (ter yik go a thung)
-0F02 TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA (ter yik go wum nam chey ma)
-0F03 TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA (ter yik go wum ter tsek ma)
-0F04 TIBETAN MARK INITIAL YIG MGO MDUN MA (yik go dun ma)
- * honorific; marks beginning of text or start of new folio
- x (mongolian birga - 1800)
-0F05 TIBETAN MARK CLOSING YIG MGO SGAB MA (yik go kab ma)
- * follows and ligates with initial yig-mgo
-0F06 TIBETAN MARK CARET YIG MGO PHUR SHAD MA (yik go pur shey ma)
-0F07 TIBETAN MARK YIG MGO TSHEG SHAD MA (yik go tsek shey ma)
-@ Marks and signs
-0F08 TIBETAN MARK SBRUL SHAD (drul shey)
- * separates sections of meaning equivalent to topics and sub-topics
-0F09 TIBETAN MARK BSKUR YIG MGO (kur yik go)
- * list enumerator, used in Bhutan
-0F0A TIBETAN MARK BKA- SHOG YIG MGO (ka sho yik go)
- * petition honorific, used in Bhutan
-0F0B TIBETAN MARK INTERSYLLABIC TSHEG (tsek)
- * morpheme delimiter (approximate meaning)
- * the normal tsheg; provides a break opportunity
- * character name is a misnomer
-0F0C TIBETAN MARK DELIMITER TSHEG BSTAR (tsek tar)
- * a non-breaking tsheg; inhibits line breaking
- * character name is a misnomer
- # <noBreak> 0F0B
-0F0D TIBETAN MARK SHAD (shey)
- * marks end of a section of text (tshig-grub)
- x (devanagari danda - 0964)
-0F0E TIBETAN MARK NYIS SHAD (nyi shey)
- * marks end of a whole topic (don-tshan)
- x (devanagari double danda - 0965)
-0F0F TIBETAN MARK TSHEG SHAD (tsek shey)
-0F10 TIBETAN MARK NYIS TSHEG SHAD (nyi tsek shey)
-0F11 TIBETAN MARK RIN CHEN SPUNGS SHAD (rinchen pung shey)
- * shad which follows a tsheg-bar that starts a new line
-0F12 TIBETAN MARK RGYA GRAM SHAD (gya tram shey)
-0F13 TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN (dzu ta me long chen)
-0F14 TIBETAN MARK GTER TSHEG (ter tsek)
- * used as a comma-like text delimiter
- x (khmer sign camnuc pii kuuh - 17D6)
-@ Astrological signs
-0F15 TIBETAN LOGOTYPE SIGN CHAD RTAGS (che ta)
-0F16 TIBETAN LOGOTYPE SIGN LHAG RTAGS (hlak ta)
-0F17 TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS (trachen char ta)
-0F18 TIBETAN ASTROLOGICAL SIGN -KHYUD PA (kyu pa)
- * combines with digits
-0F19 TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS (dong tsu)
- * combines with digits
-0F1A TIBETAN SIGN RDEL DKAR GCIG (deka chig)
-0F1B TIBETAN SIGN RDEL DKAR GNYIS (deka nyi)
-0F1C TIBETAN SIGN RDEL DKAR GSUM (deka sum)
-0F1D TIBETAN SIGN RDEL NAG GCIG (dena chig)
-0F1E TIBETAN SIGN RDEL NAG GNYIS (dena nyi)
-0F1F TIBETAN SIGN RDEL DKAR RDEL NAG (deka dena)
-@ Digits
-0F20 TIBETAN DIGIT ZERO
-0F21 TIBETAN DIGIT ONE
-0F22 TIBETAN DIGIT TWO
-0F23 TIBETAN DIGIT THREE
-0F24 TIBETAN DIGIT FOUR
-0F25 TIBETAN DIGIT FIVE
-0F26 TIBETAN DIGIT SIX
-0F27 TIBETAN DIGIT SEVEN
-0F28 TIBETAN DIGIT EIGHT
-0F29 TIBETAN DIGIT NINE
-@ Digits minus half
-0F2A TIBETAN DIGIT HALF ONE
-0F2B TIBETAN DIGIT HALF TWO
-0F2C TIBETAN DIGIT HALF THREE
-0F2D TIBETAN DIGIT HALF FOUR
-0F2E TIBETAN DIGIT HALF FIVE
-0F2F TIBETAN DIGIT HALF SIX
-0F30 TIBETAN DIGIT HALF SEVEN
-0F31 TIBETAN DIGIT HALF EIGHT
-0F32 TIBETAN DIGIT HALF NINE
-0F33 TIBETAN DIGIT HALF ZERO
-@ Marks and signs
-0F34 TIBETAN MARK BSDUS RTAGS (du ta)
- * repetition
-0F35 TIBETAN MARK NGAS BZUNG NYI ZLA (nge zung nyi da)
- * honorific, emphasis; used like underlining
-0F36 TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN (dzu ta shi mig chen)
- * marks point of text insertion or annotation
-0F37 TIBETAN MARK NGAS BZUNG SGOR RTAGS (nge zung gor ta)
- * emphasis; used like underlining
-0F38 TIBETAN MARK CHE MGO (che go)
-0F39 TIBETAN MARK TSA -PHRU (tsa tru)
- * a lenition mark
-@ Paired punctuation
-0F3A TIBETAN MARK GUG RTAGS GYON (gug ta yun)
-0F3B TIBETAN MARK GUG RTAGS GYAS (gug ta ye)
- * brackets
-0F3C TIBETAN MARK ANG KHANG GYON (ang kang yun)
-0F3D TIBETAN MARK ANG KHANG GYAS (ang kang ye)
- * used for bracketing with a roof over
-@ Astrological signs
-0F3E TIBETAN SIGN YAR TSHES (yar tse)
-0F3F TIBETAN SIGN MAR TSHES (mar tse)
- * marks which combine with digits
-@ Consonants
-0F40 TIBETAN LETTER KA
-0F41 TIBETAN LETTER KHA
-0F42 TIBETAN LETTER GA
-0F43 TIBETAN LETTER GHA
- : 0F42 0FB7
-0F44 TIBETAN LETTER NGA
-0F45 TIBETAN LETTER CA
-0F46 TIBETAN LETTER CHA
-0F47 TIBETAN LETTER JA
-0F49 TIBETAN LETTER NYA
-0F4A TIBETAN LETTER TTA
-0F4B TIBETAN LETTER TTHA
-0F4C TIBETAN LETTER DDA
-0F4D TIBETAN LETTER DDHA
- : 0F4C 0FB7
-0F4E TIBETAN LETTER NNA
-0F4F TIBETAN LETTER TA
-0F50 TIBETAN LETTER THA
-0F51 TIBETAN LETTER DA
-0F52 TIBETAN LETTER DHA
- : 0F51 0FB7
-0F53 TIBETAN LETTER NA
-0F54 TIBETAN LETTER PA
-0F55 TIBETAN LETTER PHA
-0F56 TIBETAN LETTER BA
-0F57 TIBETAN LETTER BHA
- : 0F56 0FB7
-0F58 TIBETAN LETTER MA
-0F59 TIBETAN LETTER TSA
-0F5A TIBETAN LETTER TSHA
-0F5B TIBETAN LETTER DZA
-0F5C TIBETAN LETTER DZHA
- : 0F5B 0FB7
-0F5D TIBETAN LETTER WA
-0F5E TIBETAN LETTER ZHA
-0F5F TIBETAN LETTER ZA
-0F60 TIBETAN LETTER -A
-0F61 TIBETAN LETTER YA
-0F62 TIBETAN LETTER RA *
- * when followed by a subjoined letter = ra mgo
-0F63 TIBETAN LETTER LA
-0F64 TIBETAN LETTER SHA
-0F65 TIBETAN LETTER SSA
- = reversed sha
-0F66 TIBETAN LETTER SA
-0F67 TIBETAN LETTER HA
-0F68 TIBETAN LETTER A
- * base for dependent vowels
-0F69 TIBETAN LETTER KSSA
- : 0F40 0FB5
-0F6A TIBETAN LETTER FIXED-FORM RA *
- * used only in transliteration and transcription
-@ Dependent vowel signs
-0F71 TIBETAN VOWEL SIGN AA
- = a-chung
- * common, vowel-lengthening mark
-0F72 TIBETAN VOWEL SIGN I
-0F73 TIBETAN VOWEL SIGN II
- * use of this character is discouraged
- : 0F71 0F72
-0F74 TIBETAN VOWEL SIGN U
-0F75 TIBETAN VOWEL SIGN UU
- * use of this character is discouraged
- : 0F71 0F74
-0F76 TIBETAN VOWEL SIGN VOCALIC R
- : 0FB2 0F80
-0F77 TIBETAN VOWEL SIGN VOCALIC RR
- * use of this character is strongly discouraged
- # 0FB2 0F81
-0F78 TIBETAN VOWEL SIGN VOCALIC L
- : 0FB3 0F80
-0F79 TIBETAN VOWEL SIGN VOCALIC LL
- * use of this character is strongly discouraged
- # 0FB3 0F81
-0F7A TIBETAN VOWEL SIGN E
-0F7B TIBETAN VOWEL SIGN EE
-0F7C TIBETAN VOWEL SIGN O
-0F7D TIBETAN VOWEL SIGN OO
-@ Vocalic modification
-0F7E TIBETAN SIGN RJES SU NGA RO (je su nga ro)
- = anusvara
-0F7F TIBETAN SIGN RNAM BCAD (nam chey)
- = visarga
-@ Dependent vowel signs
-0F80 TIBETAN VOWEL SIGN REVERSED I
-0F81 TIBETAN VOWEL SIGN REVERSED II
- * use of this character is discouraged
- : 0F71 0F80
-@ Marks and signs
-0F82 TIBETAN SIGN NYI ZLA NAA DA (nyi da na da)
-0F83 TIBETAN SIGN SNA LDAN (nan de)
- x (devanagari sign candrabindu - 0901)
-0F84 TIBETAN MARK HALANTA
- = srog med
- x (devanagari sign virama - 094D)
-0F85 TIBETAN MARK PALUTA
-0F86 TIBETAN SIGN LCI RTAGS (ji ta)
-0F87 TIBETAN SIGN YANG RTAGS (yang ta)
-@ Transliteration head letters
-0F88 TIBETAN SIGN LCE TSA CAN (che tsa chen)
-0F89 TIBETAN SIGN MCHU CAN (chu chen)
-0F8A TIBETAN SIGN GRU CAN RGYINGS (tru chen ging)
- * always followed by 0F82
-0F8B TIBETAN SIGN GRU MED RGYINGS (tru me ging)
-@ Subjoined consonants
-0F90 TIBETAN SUBJOINED LETTER KA
-0F91 TIBETAN SUBJOINED LETTER KHA
-0F92 TIBETAN SUBJOINED LETTER GA
-0F93 TIBETAN SUBJOINED LETTER GHA
- : 0F92 0FB7
-0F94 TIBETAN SUBJOINED LETTER NGA
-0F95 TIBETAN SUBJOINED LETTER CA
-0F96 TIBETAN SUBJOINED LETTER CHA
-0F97 TIBETAN SUBJOINED LETTER JA
-0F99 TIBETAN SUBJOINED LETTER NYA
-0F9A TIBETAN SUBJOINED LETTER TTA
-0F9B TIBETAN SUBJOINED LETTER TTHA
-0F9C TIBETAN SUBJOINED LETTER DDA
-0F9D TIBETAN SUBJOINED LETTER DDHA
- : 0F9C 0FB7
-0F9E TIBETAN SUBJOINED LETTER NNA
-0F9F TIBETAN SUBJOINED LETTER TA
-0FA0 TIBETAN SUBJOINED LETTER THA
-0FA1 TIBETAN SUBJOINED LETTER DA
-0FA2 TIBETAN SUBJOINED LETTER DHA
- : 0FA1 0FB7
-0FA3 TIBETAN SUBJOINED LETTER NA
-0FA4 TIBETAN SUBJOINED LETTER PA
-0FA5 TIBETAN SUBJOINED LETTER PHA
-0FA6 TIBETAN SUBJOINED LETTER BA
-0FA7 TIBETAN SUBJOINED LETTER BHA
- : 0FA6 0FB7
-0FA8 TIBETAN SUBJOINED LETTER MA
-0FA9 TIBETAN SUBJOINED LETTER TSA
-0FAA TIBETAN SUBJOINED LETTER TSHA
-0FAB TIBETAN SUBJOINED LETTER DZA
-0FAC TIBETAN SUBJOINED LETTER DZHA
- : 0FAB 0FB7
-0FAD TIBETAN SUBJOINED LETTER WA *
- = wa-zur, wa-btags
-0FAE TIBETAN SUBJOINED LETTER ZHA
-0FAF TIBETAN SUBJOINED LETTER ZA
-0FB0 TIBETAN SUBJOINED LETTER -A
- = a-chung
- * rare, only used for full-sized subjoined letter
- x (tibetan vowel sign aa - 0F71)
-0FB1 TIBETAN SUBJOINED LETTER YA *
- = ya-btags
-0FB2 TIBETAN SUBJOINED LETTER RA *
- = ra-btags
-0FB3 TIBETAN SUBJOINED LETTER LA
-0FB4 TIBETAN SUBJOINED LETTER SHA
-0FB5 TIBETAN SUBJOINED LETTER SSA
- = reversed subjoined sha
-0FB6 TIBETAN SUBJOINED LETTER SA
-0FB7 TIBETAN SUBJOINED LETTER HA
-0FB8 TIBETAN SUBJOINED LETTER A
-0FB9 TIBETAN SUBJOINED LETTER KSSA
- : 0F90 0FB5
-@ Fixed-form subjoined consonants
-@+ These characters are used only for transliteration and transcription.
-0FBA TIBETAN SUBJOINED LETTER FIXED-FORM WA *
-0FBB TIBETAN SUBJOINED LETTER FIXED-FORM YA *
-0FBC TIBETAN SUBJOINED LETTER FIXED-FORM RA *
-@ Signs
-0FBE TIBETAN KU RU KHA (kuruka)
- * often repeated three times; indicates a refrain
-0FBF TIBETAN KU RU KHA BZHI MIG CAN (kuruka shi mik chen)
- * marks point of text insertion or annotation
- x (reference mark - 203B)
-@ Cantillation signs
-0FC0 TIBETAN CANTILLATION SIGN HEAVY BEAT
- * marks a heavy drum beat
-0FC1 TIBETAN CANTILLATION SIGN LIGHT BEAT
- * marks a light drum beat
-0FC2 TIBETAN CANTILLATION SIGN CANG TE-U (chang tyu)
- * symbol of a small Tibetan hand drum
-0FC3 TIBETAN CANTILLATION SIGN SBUB -CHAL (bub chey)
- * symbol of a Tibetan cymbal
-@ Symbols
-0FC4 TIBETAN SYMBOL DRIL BU (drilbu)
- * symbol of a Tibetan hand bell
-0FC5 TIBETAN SYMBOL RDO RJE (dorje)
-0FC6 TIBETAN SYMBOL PADMA GDAN (pema den)
-0FC7 TIBETAN SYMBOL RDO RJE RGYA GRAM (dorje gya dram)
-0FC8 TIBETAN SYMBOL PHUR PA (phurba)
-0FC9 TIBETAN SYMBOL NOR BU (norbu)
-0FCA TIBETAN SYMBOL NOR BU NYIS -KHYIL (norbu nyi khyi)
- * the double body symbol
- x (yin yang - 262F)
-0FCB TIBETAN SYMBOL NOR BU GSUM -KHYIL (norbu sum khyi)
- * the tri-kaya or triple body symbol
-0FCC TIBETAN SYMBOL NOR BU BZHI -KHYIL (norbu shi khyi)
- * the quadruple body symbol, a form of the swastika
- x (cjk unified ideograph-534D - 534D)
-@ Astrological sign
-0FCF TIBETAN SIGN RDEL NAG GSUM
-@@ 1000 Myanmar 109F
-@ Consonants
-1000 MYANMAR LETTER KA
-1001 MYANMAR LETTER KHA
-1002 MYANMAR LETTER GA
-1003 MYANMAR LETTER GHA
-1004 MYANMAR LETTER NGA
-1005 MYANMAR LETTER CA
-1006 MYANMAR LETTER CHA
-1007 MYANMAR LETTER JA
-1008 MYANMAR LETTER JHA
-1009 MYANMAR LETTER NYA
-100A MYANMAR LETTER NNYA
-100B MYANMAR LETTER TTA
-100C MYANMAR LETTER TTHA
-100D MYANMAR LETTER DDA
-100E MYANMAR LETTER DDHA
-100F MYANMAR LETTER NNA
-1010 MYANMAR LETTER TA
-1011 MYANMAR LETTER THA
-1012 MYANMAR LETTER DA
-1013 MYANMAR LETTER DHA
-1014 MYANMAR LETTER NA
-1015 MYANMAR LETTER PA
-1016 MYANMAR LETTER PHA
-1017 MYANMAR LETTER BA
-1018 MYANMAR LETTER BHA
-1019 MYANMAR LETTER MA
-101A MYANMAR LETTER YA
-101B MYANMAR LETTER RA
-101C MYANMAR LETTER LA
-101D MYANMAR LETTER WA
-101E MYANMAR LETTER SA
-101F MYANMAR LETTER HA
-1020 MYANMAR LETTER LLA
-@ Independent vowels
-1021 MYANMAR LETTER A
-1023 MYANMAR LETTER I
-1024 MYANMAR LETTER II
-1025 MYANMAR LETTER U
-1026 MYANMAR LETTER UU
- : 1025 102E
-1027 MYANMAR LETTER E
-1029 MYANMAR LETTER O
-102A MYANMAR LETTER AU
-@ Dependent vowel signs
-102C MYANMAR VOWEL SIGN AA
-102D MYANMAR VOWEL SIGN I
-102E MYANMAR VOWEL SIGN II
-102F MYANMAR VOWEL SIGN U
-1030 MYANMAR VOWEL SIGN UU
-1031 MYANMAR VOWEL SIGN E
- * stands to the left of the consonant
-1032 MYANMAR VOWEL SIGN AI
-@ Various signs
-1036 MYANMAR SIGN ANUSVARA
-1037 MYANMAR SIGN DOT BELOW
- = aukmyit
- * a tone mark
-1038 MYANMAR SIGN VISARGA
-1039 MYANMAR SIGN VIRAMA
- = killer (when rendered visibly)
-@ Digits
-1040 MYANMAR DIGIT ZERO
-1041 MYANMAR DIGIT ONE
-1042 MYANMAR DIGIT TWO
-1043 MYANMAR DIGIT THREE
-1044 MYANMAR DIGIT FOUR
-1045 MYANMAR DIGIT FIVE
-1046 MYANMAR DIGIT SIX
-1047 MYANMAR DIGIT SEVEN
-1048 MYANMAR DIGIT EIGHT
-1049 MYANMAR DIGIT NINE
-@ Punctuation
-104A MYANMAR SIGN LITTLE SECTION
- x (devanagari danda - 0964)
-104B MYANMAR SIGN SECTION
- x (devanagari double danda - 0965)
-@ Various signs
-104C MYANMAR SYMBOL LOCATIVE
-104D MYANMAR SYMBOL COMPLETED
-104E MYANMAR SYMBOL AFOREMENTIONED
-104F MYANMAR SYMBOL GENITIVE
-@ Pali and Sanskrit extensions
-1050 MYANMAR LETTER SHA
-1051 MYANMAR LETTER SSA
-1052 MYANMAR LETTER VOCALIC R
-1053 MYANMAR LETTER VOCALIC RR
-1054 MYANMAR LETTER VOCALIC L
-1055 MYANMAR LETTER VOCALIC LL
-1056 MYANMAR VOWEL SIGN VOCALIC R
-1057 MYANMAR VOWEL SIGN VOCALIC RR
-1058 MYANMAR VOWEL SIGN VOCALIC L
-1059 MYANMAR VOWEL SIGN VOCALIC LL
-@@ 10A0 Georgian 10FF
-@ Khutsuri
-@+ This is the uppercase of the old ecclesiastical alphabet. The style shown in the code charts is known as Asomtavruli.
-10A0 GEORGIAN CAPITAL LETTER AN (Khutsuri)
-10A1 GEORGIAN CAPITAL LETTER BAN (Khutsuri)
-10A2 GEORGIAN CAPITAL LETTER GAN (Khutsuri)
-10A3 GEORGIAN CAPITAL LETTER DON (Khutsuri)
-10A4 GEORGIAN CAPITAL LETTER EN (Khutsuri)
-10A5 GEORGIAN CAPITAL LETTER VIN (Khutsuri)
-10A6 GEORGIAN CAPITAL LETTER ZEN (Khutsuri)
-10A7 GEORGIAN CAPITAL LETTER TAN (Khutsuri)
-10A8 GEORGIAN CAPITAL LETTER IN (Khutsuri)
-10A9 GEORGIAN CAPITAL LETTER KAN (Khutsuri)
-10AA GEORGIAN CAPITAL LETTER LAS (Khutsuri)
-10AB GEORGIAN CAPITAL LETTER MAN (Khutsuri)
-10AC GEORGIAN CAPITAL LETTER NAR (Khutsuri)
-10AD GEORGIAN CAPITAL LETTER ON (Khutsuri)
-10AE GEORGIAN CAPITAL LETTER PAR (Khutsuri)
-10AF GEORGIAN CAPITAL LETTER ZHAR (Khutsuri)
-10B0 GEORGIAN CAPITAL LETTER RAE (Khutsuri)
-10B1 GEORGIAN CAPITAL LETTER SAN (Khutsuri)
-10B2 GEORGIAN CAPITAL LETTER TAR (Khutsuri)
-10B3 GEORGIAN CAPITAL LETTER UN (Khutsuri)
-10B4 GEORGIAN CAPITAL LETTER PHAR (Khutsuri)
-10B5 GEORGIAN CAPITAL LETTER KHAR (Khutsuri)
-10B6 GEORGIAN CAPITAL LETTER GHAN (Khutsuri)
-10B7 GEORGIAN CAPITAL LETTER QAR (Khutsuri)
-10B8 GEORGIAN CAPITAL LETTER SHIN (Khutsuri)
-10B9 GEORGIAN CAPITAL LETTER CHIN (Khutsuri)
-10BA GEORGIAN CAPITAL LETTER CAN (Khutsuri)
-10BB GEORGIAN CAPITAL LETTER JIL (Khutsuri)
-10BC GEORGIAN CAPITAL LETTER CIL (Khutsuri)
-10BD GEORGIAN CAPITAL LETTER CHAR (Khutsuri)
-10BE GEORGIAN CAPITAL LETTER XAN (Khutsuri)
-10BF GEORGIAN CAPITAL LETTER JHAN (Khutsuri)
-10C0 GEORGIAN CAPITAL LETTER HAE (Khutsuri)
-10C1 GEORGIAN CAPITAL LETTER HE (Khutsuri)
-10C2 GEORGIAN CAPITAL LETTER HIE (Khutsuri)
-10C3 GEORGIAN CAPITAL LETTER WE (Khutsuri)
-10C4 GEORGIAN CAPITAL LETTER HAR (Khutsuri)
-10C5 GEORGIAN CAPITAL LETTER HOE (Khutsuri)
-@ Mkhedruli
-@+ This is the modern secular alphabet, which is caseless.
-10D0 GEORGIAN LETTER AN
-10D1 GEORGIAN LETTER BAN
-10D2 GEORGIAN LETTER GAN
-10D3 GEORGIAN LETTER DON
-10D4 GEORGIAN LETTER EN
-10D5 GEORGIAN LETTER VIN
-10D6 GEORGIAN LETTER ZEN
-10D7 GEORGIAN LETTER TAN
-10D8 GEORGIAN LETTER IN
-10D9 GEORGIAN LETTER KAN
-10DA GEORGIAN LETTER LAS
-10DB GEORGIAN LETTER MAN
-10DC GEORGIAN LETTER NAR
-10DD GEORGIAN LETTER ON
-10DE GEORGIAN LETTER PAR
-10DF GEORGIAN LETTER ZHAR
-10E0 GEORGIAN LETTER RAE
-10E1 GEORGIAN LETTER SAN
-10E2 GEORGIAN LETTER TAR
-10E3 GEORGIAN LETTER UN
-10E4 GEORGIAN LETTER PHAR
-10E5 GEORGIAN LETTER KHAR
-10E6 GEORGIAN LETTER GHAN
-10E7 GEORGIAN LETTER QAR
-10E8 GEORGIAN LETTER SHIN
-10E9 GEORGIAN LETTER CHIN
-10EA GEORGIAN LETTER CAN
-10EB GEORGIAN LETTER JIL
-10EC GEORGIAN LETTER CIL
-10ED GEORGIAN LETTER CHAR
-10EE GEORGIAN LETTER XAN
-10EF GEORGIAN LETTER JHAN
-10F0 GEORGIAN LETTER HAE
-@ Archaic letters
-10F1 GEORGIAN LETTER HE
-10F2 GEORGIAN LETTER HIE
-10F3 GEORGIAN LETTER WE
-10F4 GEORGIAN LETTER HAR
-10F5 GEORGIAN LETTER HOE
-10F6 GEORGIAN LETTER FI
-@ Punctuation
-10FB GEORGIAN PARAGRAPH SEPARATOR
-@@ 1100 Hangul Jamo 11FF
-@ Korean combining alphabet
-@ Initial consonants
-1100 HANGUL CHOSEONG KIYEOK (g) *
-1101 HANGUL CHOSEONG SSANGKIYEOK (gg) *
-1102 HANGUL CHOSEONG NIEUN (n) *
-1103 HANGUL CHOSEONG TIKEUT (d) *
-1104 HANGUL CHOSEONG SSANGTIKEUT (dd) *
-1105 HANGUL CHOSEONG RIEUL (r) *
-1106 HANGUL CHOSEONG MIEUM (m) *
-1107 HANGUL CHOSEONG PIEUP (b) *
-1108 HANGUL CHOSEONG SSANGPIEUP (bb) *
-1109 HANGUL CHOSEONG SIOS (s) *
-110A HANGUL CHOSEONG SSANGSIOS (ss) *
-110B HANGUL CHOSEONG IEUNG
-110C HANGUL CHOSEONG CIEUC (j) *
-110D HANGUL CHOSEONG SSANGCIEUC (jj) *
-110E HANGUL CHOSEONG CHIEUCH (c) *
-110F HANGUL CHOSEONG KHIEUKH (k) *
-1110 HANGUL CHOSEONG THIEUTH (t) *
-1111 HANGUL CHOSEONG PHIEUPH (p) *
-1112 HANGUL CHOSEONG HIEUH (h) *
-1113 HANGUL CHOSEONG NIEUN-KIYEOK
-1114 HANGUL CHOSEONG SSANGNIEUN
-1115 HANGUL CHOSEONG NIEUN-TIKEUT
-1116 HANGUL CHOSEONG NIEUN-PIEUP
-1117 HANGUL CHOSEONG TIKEUT-KIYEOK
-1118 HANGUL CHOSEONG RIEUL-NIEUN
-1119 HANGUL CHOSEONG SSANGRIEUL
-111A HANGUL CHOSEONG RIEUL-HIEUH
-111B HANGUL CHOSEONG KAPYEOUNRIEUL
-111C HANGUL CHOSEONG MIEUM-PIEUP
-111D HANGUL CHOSEONG KAPYEOUNMIEUM
-111E HANGUL CHOSEONG PIEUP-KIYEOK
-111F HANGUL CHOSEONG PIEUP-NIEUN
-1120 HANGUL CHOSEONG PIEUP-TIKEUT
-1121 HANGUL CHOSEONG PIEUP-SIOS
-1122 HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
-1123 HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
-1124 HANGUL CHOSEONG PIEUP-SIOS-PIEUP
-1125 HANGUL CHOSEONG PIEUP-SSANGSIOS
-1126 HANGUL CHOSEONG PIEUP-SIOS-CIEUC
-1127 HANGUL CHOSEONG PIEUP-CIEUC
-1128 HANGUL CHOSEONG PIEUP-CHIEUCH
-1129 HANGUL CHOSEONG PIEUP-THIEUTH
-112A HANGUL CHOSEONG PIEUP-PHIEUPH
-112B HANGUL CHOSEONG KAPYEOUNPIEUP
-112C HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
-112D HANGUL CHOSEONG SIOS-KIYEOK
-112E HANGUL CHOSEONG SIOS-NIEUN
-112F HANGUL CHOSEONG SIOS-TIKEUT
-1130 HANGUL CHOSEONG SIOS-RIEUL
-1131 HANGUL CHOSEONG SIOS-MIEUM
-1132 HANGUL CHOSEONG SIOS-PIEUP
-1133 HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
-1134 HANGUL CHOSEONG SIOS-SSANGSIOS
-1135 HANGUL CHOSEONG SIOS-IEUNG
-1136 HANGUL CHOSEONG SIOS-CIEUC
-1137 HANGUL CHOSEONG SIOS-CHIEUCH
-1138 HANGUL CHOSEONG SIOS-KHIEUKH
-1139 HANGUL CHOSEONG SIOS-THIEUTH
-113A HANGUL CHOSEONG SIOS-PHIEUPH
-113B HANGUL CHOSEONG SIOS-HIEUH
-113C HANGUL CHOSEONG CHITUEUMSIOS
-113D HANGUL CHOSEONG CHITUEUMSSANGSIOS
-113E HANGUL CHOSEONG CEONGCHIEUMSIOS
-113F HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
-1140 HANGUL CHOSEONG PANSIOS
-1141 HANGUL CHOSEONG IEUNG-KIYEOK
-1142 HANGUL CHOSEONG IEUNG-TIKEUT
-1143 HANGUL CHOSEONG IEUNG-MIEUM
-1144 HANGUL CHOSEONG IEUNG-PIEUP
-1145 HANGUL CHOSEONG IEUNG-SIOS
-1146 HANGUL CHOSEONG IEUNG-PANSIOS
-1147 HANGUL CHOSEONG SSANGIEUNG
-1148 HANGUL CHOSEONG IEUNG-CIEUC
-1149 HANGUL CHOSEONG IEUNG-CHIEUCH
-114A HANGUL CHOSEONG IEUNG-THIEUTH
-114B HANGUL CHOSEONG IEUNG-PHIEUPH
-114C HANGUL CHOSEONG YESIEUNG
-114D HANGUL CHOSEONG CIEUC-IEUNG
-114E HANGUL CHOSEONG CHITUEUMCIEUC
-114F HANGUL CHOSEONG CHITUEUMSSANGCIEUC
-1150 HANGUL CHOSEONG CEONGCHIEUMCIEUC
-1151 HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
-1152 HANGUL CHOSEONG CHIEUCH-KHIEUKH
-1153 HANGUL CHOSEONG CHIEUCH-HIEUH
-1154 HANGUL CHOSEONG CHITUEUMCHIEUCH
-1155 HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
-1156 HANGUL CHOSEONG PHIEUPH-PIEUP
-1157 HANGUL CHOSEONG KAPYEOUNPHIEUPH
-1158 HANGUL CHOSEONG SSANGHIEUH
-1159 HANGUL CHOSEONG YEORINHIEUH
-115F HANGUL CHOSEONG FILLER
-@ Medial vowels
-1160 HANGUL JUNGSEONG FILLER
-1161 HANGUL JUNGSEONG A
-1162 HANGUL JUNGSEONG AE
-1163 HANGUL JUNGSEONG YA
-1164 HANGUL JUNGSEONG YAE
-1165 HANGUL JUNGSEONG EO
-1166 HANGUL JUNGSEONG E
-1167 HANGUL JUNGSEONG YEO
-1168 HANGUL JUNGSEONG YE
-1169 HANGUL JUNGSEONG O
-116A HANGUL JUNGSEONG WA
-116B HANGUL JUNGSEONG WAE
-116C HANGUL JUNGSEONG OE
-116D HANGUL JUNGSEONG YO
-116E HANGUL JUNGSEONG U
-116F HANGUL JUNGSEONG WEO
-1170 HANGUL JUNGSEONG WE
-1171 HANGUL JUNGSEONG WI
-1172 HANGUL JUNGSEONG YU
-1173 HANGUL JUNGSEONG EU
-1174 HANGUL JUNGSEONG YI
-1175 HANGUL JUNGSEONG I
-1176 HANGUL JUNGSEONG A-O
-1177 HANGUL JUNGSEONG A-U
-1178 HANGUL JUNGSEONG YA-O
-1179 HANGUL JUNGSEONG YA-YO
-117A HANGUL JUNGSEONG EO-O
-117B HANGUL JUNGSEONG EO-U
-117C HANGUL JUNGSEONG EO-EU
-117D HANGUL JUNGSEONG YEO-O
-117E HANGUL JUNGSEONG YEO-U
-117F HANGUL JUNGSEONG O-EO
-1180 HANGUL JUNGSEONG O-E
-1181 HANGUL JUNGSEONG O-YE
-1182 HANGUL JUNGSEONG O-O
-1183 HANGUL JUNGSEONG O-U
-1184 HANGUL JUNGSEONG YO-YA
-1185 HANGUL JUNGSEONG YO-YAE
-1186 HANGUL JUNGSEONG YO-YEO
-1187 HANGUL JUNGSEONG YO-O
-1188 HANGUL JUNGSEONG YO-I
-1189 HANGUL JUNGSEONG U-A
-118A HANGUL JUNGSEONG U-AE
-118B HANGUL JUNGSEONG U-EO-EU
-118C HANGUL JUNGSEONG U-YE
-118D HANGUL JUNGSEONG U-U
-118E HANGUL JUNGSEONG YU-A
-118F HANGUL JUNGSEONG YU-EO
-1190 HANGUL JUNGSEONG YU-E
-1191 HANGUL JUNGSEONG YU-YEO
-1192 HANGUL JUNGSEONG YU-YE
-1193 HANGUL JUNGSEONG YU-U
-1194 HANGUL JUNGSEONG YU-I
-1195 HANGUL JUNGSEONG EU-U
-1196 HANGUL JUNGSEONG EU-EU
-1197 HANGUL JUNGSEONG YI-U
-1198 HANGUL JUNGSEONG I-A
-1199 HANGUL JUNGSEONG I-YA
-119A HANGUL JUNGSEONG I-O
-119B HANGUL JUNGSEONG I-U
-119C HANGUL JUNGSEONG I-EU
-119D HANGUL JUNGSEONG I-ARAEA
-119E HANGUL JUNGSEONG ARAEA
-119F HANGUL JUNGSEONG ARAEA-EO
-11A0 HANGUL JUNGSEONG ARAEA-U
-11A1 HANGUL JUNGSEONG ARAEA-I
-11A2 HANGUL JUNGSEONG SSANGARAEA
-@ Final consonants
-11A8 HANGUL JONGSEONG KIYEOK (g) *
-11A9 HANGUL JONGSEONG SSANGKIYEOK (gg) *
-11AA HANGUL JONGSEONG KIYEOK-SIOS (gs) *
-11AB HANGUL JONGSEONG NIEUN (n) *
-11AC HANGUL JONGSEONG NIEUN-CIEUC (nj) *
-11AD HANGUL JONGSEONG NIEUN-HIEUH (nh) *
-11AE HANGUL JONGSEONG TIKEUT (d) *
-11AF HANGUL JONGSEONG RIEUL (l) *
-11B0 HANGUL JONGSEONG RIEUL-KIYEOK (lg) *
-11B1 HANGUL JONGSEONG RIEUL-MIEUM (lm) *
-11B2 HANGUL JONGSEONG RIEUL-PIEUP (lb) *
-11B3 HANGUL JONGSEONG RIEUL-SIOS (ls) *
-11B4 HANGUL JONGSEONG RIEUL-THIEUTH (lt) *
-11B5 HANGUL JONGSEONG RIEUL-PHIEUPH (lp) *
-11B6 HANGUL JONGSEONG RIEUL-HIEUH (lh) *
-11B7 HANGUL JONGSEONG MIEUM (m) *
-11B8 HANGUL JONGSEONG PIEUP (b) *
-11B9 HANGUL JONGSEONG PIEUP-SIOS (bs) *
-11BA HANGUL JONGSEONG SIOS (s) *
-11BB HANGUL JONGSEONG SSANGSIOS (ss) *
-11BC HANGUL JONGSEONG IEUNG (ng) *
-11BD HANGUL JONGSEONG CIEUC (j) *
-11BE HANGUL JONGSEONG CHIEUCH (c) *
-11BF HANGUL JONGSEONG KHIEUKH (k) *
-11C0 HANGUL JONGSEONG THIEUTH (t) *
-11C1 HANGUL JONGSEONG PHIEUPH (p) *
-11C2 HANGUL JONGSEONG HIEUH (h) *
-11C3 HANGUL JONGSEONG KIYEOK-RIEUL
-11C4 HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
-11C5 HANGUL JONGSEONG NIEUN-KIYEOK
-11C6 HANGUL JONGSEONG NIEUN-TIKEUT
-11C7 HANGUL JONGSEONG NIEUN-SIOS
-11C8 HANGUL JONGSEONG NIEUN-PANSIOS
-11C9 HANGUL JONGSEONG NIEUN-THIEUTH
-11CA HANGUL JONGSEONG TIKEUT-KIYEOK
-11CB HANGUL JONGSEONG TIKEUT-RIEUL
-11CC HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
-11CD HANGUL JONGSEONG RIEUL-NIEUN
-11CE HANGUL JONGSEONG RIEUL-TIKEUT
-11CF HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
-11D0 HANGUL JONGSEONG SSANGRIEUL
-11D1 HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
-11D2 HANGUL JONGSEONG RIEUL-MIEUM-SIOS
-11D3 HANGUL JONGSEONG RIEUL-PIEUP-SIOS
-11D4 HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
-11D5 HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
-11D6 HANGUL JONGSEONG RIEUL-SSANGSIOS
-11D7 HANGUL JONGSEONG RIEUL-PANSIOS
-11D8 HANGUL JONGSEONG RIEUL-KHIEUKH
-11D9 HANGUL JONGSEONG RIEUL-YEORINHIEUH
-11DA HANGUL JONGSEONG MIEUM-KIYEOK
-11DB HANGUL JONGSEONG MIEUM-RIEUL
-11DC HANGUL JONGSEONG MIEUM-PIEUP
-11DD HANGUL JONGSEONG MIEUM-SIOS
-11DE HANGUL JONGSEONG MIEUM-SSANGSIOS
-11DF HANGUL JONGSEONG MIEUM-PANSIOS
-11E0 HANGUL JONGSEONG MIEUM-CHIEUCH
-11E1 HANGUL JONGSEONG MIEUM-HIEUH
-11E2 HANGUL JONGSEONG KAPYEOUNMIEUM
-11E3 HANGUL JONGSEONG PIEUP-RIEUL
-11E4 HANGUL JONGSEONG PIEUP-PHIEUPH
-11E5 HANGUL JONGSEONG PIEUP-HIEUH
-11E6 HANGUL JONGSEONG KAPYEOUNPIEUP
-11E7 HANGUL JONGSEONG SIOS-KIYEOK
-11E8 HANGUL JONGSEONG SIOS-TIKEUT
-11E9 HANGUL JONGSEONG SIOS-RIEUL
-11EA HANGUL JONGSEONG SIOS-PIEUP
-11EB HANGUL JONGSEONG PANSIOS
-11EC HANGUL JONGSEONG IEUNG-KIYEOK
-11ED HANGUL JONGSEONG IEUNG-SSANGKIYEOK
-11EE HANGUL JONGSEONG SSANGIEUNG
-11EF HANGUL JONGSEONG IEUNG-KHIEUKH
-11F0 HANGUL JONGSEONG YESIEUNG
-11F1 HANGUL JONGSEONG YESIEUNG-SIOS
-11F2 HANGUL JONGSEONG YESIEUNG-PANSIOS
-11F3 HANGUL JONGSEONG PHIEUPH-PIEUP
-11F4 HANGUL JONGSEONG KAPYEOUNPHIEUPH
-11F5 HANGUL JONGSEONG HIEUH-NIEUN
-11F6 HANGUL JONGSEONG HIEUH-RIEUL
-11F7 HANGUL JONGSEONG HIEUH-MIEUM
-11F8 HANGUL JONGSEONG HIEUH-PIEUP
-11F9 HANGUL JONGSEONG YEORINHIEUH
-@@ 1200 Ethiopic 137F
-@ Syllables
-1200 ETHIOPIC SYLLABLE HA
-1201 ETHIOPIC SYLLABLE HU
-1202 ETHIOPIC SYLLABLE HI
-1203 ETHIOPIC SYLLABLE HAA
-1204 ETHIOPIC SYLLABLE HEE
-1205 ETHIOPIC SYLLABLE HE
-1206 ETHIOPIC SYLLABLE HO
-1208 ETHIOPIC SYLLABLE LA
-1209 ETHIOPIC SYLLABLE LU
-120A ETHIOPIC SYLLABLE LI
-120B ETHIOPIC SYLLABLE LAA
-120C ETHIOPIC SYLLABLE LEE
-120D ETHIOPIC SYLLABLE LE
-120E ETHIOPIC SYLLABLE LO
-120F ETHIOPIC SYLLABLE LWA
-1210 ETHIOPIC SYLLABLE HHA
-1211 ETHIOPIC SYLLABLE HHU
-1212 ETHIOPIC SYLLABLE HHI
-1213 ETHIOPIC SYLLABLE HHAA
-1214 ETHIOPIC SYLLABLE HHEE
-1215 ETHIOPIC SYLLABLE HHE
-1216 ETHIOPIC SYLLABLE HHO
-1217 ETHIOPIC SYLLABLE HHWA
-1218 ETHIOPIC SYLLABLE MA
-1219 ETHIOPIC SYLLABLE MU
-121A ETHIOPIC SYLLABLE MI
-121B ETHIOPIC SYLLABLE MAA
-121C ETHIOPIC SYLLABLE MEE
-121D ETHIOPIC SYLLABLE ME
-121E ETHIOPIC SYLLABLE MO
-121F ETHIOPIC SYLLABLE MWA
-1220 ETHIOPIC SYLLABLE SZA
-1221 ETHIOPIC SYLLABLE SZU
-1222 ETHIOPIC SYLLABLE SZI
-1223 ETHIOPIC SYLLABLE SZAA
-1224 ETHIOPIC SYLLABLE SZEE
-1225 ETHIOPIC SYLLABLE SZE
-1226 ETHIOPIC SYLLABLE SZO
-1227 ETHIOPIC SYLLABLE SZWA
-1228 ETHIOPIC SYLLABLE RA
-1229 ETHIOPIC SYLLABLE RU
-122A ETHIOPIC SYLLABLE RI
-122B ETHIOPIC SYLLABLE RAA
-122C ETHIOPIC SYLLABLE REE
-122D ETHIOPIC SYLLABLE RE
-122E ETHIOPIC SYLLABLE RO
-122F ETHIOPIC SYLLABLE RWA
-1230 ETHIOPIC SYLLABLE SA
-1231 ETHIOPIC SYLLABLE SU
-1232 ETHIOPIC SYLLABLE SI
-1233 ETHIOPIC SYLLABLE SAA
-1234 ETHIOPIC SYLLABLE SEE
-1235 ETHIOPIC SYLLABLE SE
-1236 ETHIOPIC SYLLABLE SO
-1237 ETHIOPIC SYLLABLE SWA
-1238 ETHIOPIC SYLLABLE SHA
-1239 ETHIOPIC SYLLABLE SHU
-123A ETHIOPIC SYLLABLE SHI
-123B ETHIOPIC SYLLABLE SHAA
-123C ETHIOPIC SYLLABLE SHEE
-123D ETHIOPIC SYLLABLE SHE
-123E ETHIOPIC SYLLABLE SHO
-123F ETHIOPIC SYLLABLE SHWA
-1240 ETHIOPIC SYLLABLE QA
-1241 ETHIOPIC SYLLABLE QU
-1242 ETHIOPIC SYLLABLE QI
-1243 ETHIOPIC SYLLABLE QAA
-1244 ETHIOPIC SYLLABLE QEE
-1245 ETHIOPIC SYLLABLE QE
-1246 ETHIOPIC SYLLABLE QO
-1248 ETHIOPIC SYLLABLE QWA
-124A ETHIOPIC SYLLABLE QWI
-124B ETHIOPIC SYLLABLE QWAA
-124C ETHIOPIC SYLLABLE QWEE
-124D ETHIOPIC SYLLABLE QWE
-1250 ETHIOPIC SYLLABLE QHA
-1251 ETHIOPIC SYLLABLE QHU
-1252 ETHIOPIC SYLLABLE QHI
-1253 ETHIOPIC SYLLABLE QHAA
-1254 ETHIOPIC SYLLABLE QHEE
-1255 ETHIOPIC SYLLABLE QHE
-1256 ETHIOPIC SYLLABLE QHO
-1258 ETHIOPIC SYLLABLE QHWA
-125A ETHIOPIC SYLLABLE QHWI
-125B ETHIOPIC SYLLABLE QHWAA
-125C ETHIOPIC SYLLABLE QHWEE
-125D ETHIOPIC SYLLABLE QHWE
-1260 ETHIOPIC SYLLABLE BA
-1261 ETHIOPIC SYLLABLE BU
-1262 ETHIOPIC SYLLABLE BI
-1263 ETHIOPIC SYLLABLE BAA
-1264 ETHIOPIC SYLLABLE BEE
-1265 ETHIOPIC SYLLABLE BE
-1266 ETHIOPIC SYLLABLE BO
-1267 ETHIOPIC SYLLABLE BWA
-1268 ETHIOPIC SYLLABLE VA
-1269 ETHIOPIC SYLLABLE VU
-126A ETHIOPIC SYLLABLE VI
-126B ETHIOPIC SYLLABLE VAA
-126C ETHIOPIC SYLLABLE VEE
-126D ETHIOPIC SYLLABLE VE
-126E ETHIOPIC SYLLABLE VO
-126F ETHIOPIC SYLLABLE VWA
-1270 ETHIOPIC SYLLABLE TA
-1271 ETHIOPIC SYLLABLE TU
-1272 ETHIOPIC SYLLABLE TI
-1273 ETHIOPIC SYLLABLE TAA
-1274 ETHIOPIC SYLLABLE TEE
-1275 ETHIOPIC SYLLABLE TE
-1276 ETHIOPIC SYLLABLE TO
-1277 ETHIOPIC SYLLABLE TWA
-1278 ETHIOPIC SYLLABLE CA
-1279 ETHIOPIC SYLLABLE CU
-127A ETHIOPIC SYLLABLE CI
-127B ETHIOPIC SYLLABLE CAA
-127C ETHIOPIC SYLLABLE CEE
-127D ETHIOPIC SYLLABLE CE
-127E ETHIOPIC SYLLABLE CO
-127F ETHIOPIC SYLLABLE CWA
-1280 ETHIOPIC SYLLABLE XA
-1281 ETHIOPIC SYLLABLE XU
-1282 ETHIOPIC SYLLABLE XI
-1283 ETHIOPIC SYLLABLE XAA
-1284 ETHIOPIC SYLLABLE XEE
-1285 ETHIOPIC SYLLABLE XE
-1286 ETHIOPIC SYLLABLE XO
-1288 ETHIOPIC SYLLABLE XWA
-128A ETHIOPIC SYLLABLE XWI
-128B ETHIOPIC SYLLABLE XWAA
-128C ETHIOPIC SYLLABLE XWEE
-128D ETHIOPIC SYLLABLE XWE
-1290 ETHIOPIC SYLLABLE NA
-1291 ETHIOPIC SYLLABLE NU
-1292 ETHIOPIC SYLLABLE NI
-1293 ETHIOPIC SYLLABLE NAA
-1294 ETHIOPIC SYLLABLE NEE
-1295 ETHIOPIC SYLLABLE NE
-1296 ETHIOPIC SYLLABLE NO
-1297 ETHIOPIC SYLLABLE NWA
-1298 ETHIOPIC SYLLABLE NYA
-1299 ETHIOPIC SYLLABLE NYU
-129A ETHIOPIC SYLLABLE NYI
-129B ETHIOPIC SYLLABLE NYAA
-129C ETHIOPIC SYLLABLE NYEE
-129D ETHIOPIC SYLLABLE NYE
-129E ETHIOPIC SYLLABLE NYO
-129F ETHIOPIC SYLLABLE NYWA
-12A0 ETHIOPIC SYLLABLE GLOTTAL A
-12A1 ETHIOPIC SYLLABLE GLOTTAL U
-12A2 ETHIOPIC SYLLABLE GLOTTAL I
-12A3 ETHIOPIC SYLLABLE GLOTTAL AA
-12A4 ETHIOPIC SYLLABLE GLOTTAL EE
-12A5 ETHIOPIC SYLLABLE GLOTTAL E
-12A6 ETHIOPIC SYLLABLE GLOTTAL O
-12A7 ETHIOPIC SYLLABLE GLOTTAL WA
-12A8 ETHIOPIC SYLLABLE KA
-12A9 ETHIOPIC SYLLABLE KU
-12AA ETHIOPIC SYLLABLE KI
-12AB ETHIOPIC SYLLABLE KAA
-12AC ETHIOPIC SYLLABLE KEE
-12AD ETHIOPIC SYLLABLE KE
-12AE ETHIOPIC SYLLABLE KO
-12B0 ETHIOPIC SYLLABLE KWA
-12B2 ETHIOPIC SYLLABLE KWI
-12B3 ETHIOPIC SYLLABLE KWAA
-12B4 ETHIOPIC SYLLABLE KWEE
-12B5 ETHIOPIC SYLLABLE KWE
-12B8 ETHIOPIC SYLLABLE KXA
-12B9 ETHIOPIC SYLLABLE KXU
-12BA ETHIOPIC SYLLABLE KXI
-12BB ETHIOPIC SYLLABLE KXAA
-12BC ETHIOPIC SYLLABLE KXEE
-12BD ETHIOPIC SYLLABLE KXE
-12BE ETHIOPIC SYLLABLE KXO
-12C0 ETHIOPIC SYLLABLE KXWA
-12C2 ETHIOPIC SYLLABLE KXWI
-12C3 ETHIOPIC SYLLABLE KXWAA
-12C4 ETHIOPIC SYLLABLE KXWEE
-12C5 ETHIOPIC SYLLABLE KXWE
-12C8 ETHIOPIC SYLLABLE WA
-12C9 ETHIOPIC SYLLABLE WU
-12CA ETHIOPIC SYLLABLE WI
-12CB ETHIOPIC SYLLABLE WAA
-12CC ETHIOPIC SYLLABLE WEE
-12CD ETHIOPIC SYLLABLE WE
-12CE ETHIOPIC SYLLABLE WO
-12D0 ETHIOPIC SYLLABLE PHARYNGEAL A
-12D1 ETHIOPIC SYLLABLE PHARYNGEAL U
-12D2 ETHIOPIC SYLLABLE PHARYNGEAL I
-12D3 ETHIOPIC SYLLABLE PHARYNGEAL AA
-12D4 ETHIOPIC SYLLABLE PHARYNGEAL EE
-12D5 ETHIOPIC SYLLABLE PHARYNGEAL E
-12D6 ETHIOPIC SYLLABLE PHARYNGEAL O
-12D8 ETHIOPIC SYLLABLE ZA
-12D9 ETHIOPIC SYLLABLE ZU
-12DA ETHIOPIC SYLLABLE ZI
-12DB ETHIOPIC SYLLABLE ZAA
-12DC ETHIOPIC SYLLABLE ZEE
-12DD ETHIOPIC SYLLABLE ZE
-12DE ETHIOPIC SYLLABLE ZO
-12DF ETHIOPIC SYLLABLE ZWA
-12E0 ETHIOPIC SYLLABLE ZHA
-12E1 ETHIOPIC SYLLABLE ZHU
-12E2 ETHIOPIC SYLLABLE ZHI
-12E3 ETHIOPIC SYLLABLE ZHAA
-12E4 ETHIOPIC SYLLABLE ZHEE
-12E5 ETHIOPIC SYLLABLE ZHE
-12E6 ETHIOPIC SYLLABLE ZHO
-12E7 ETHIOPIC SYLLABLE ZHWA
-12E8 ETHIOPIC SYLLABLE YA
-12E9 ETHIOPIC SYLLABLE YU
-12EA ETHIOPIC SYLLABLE YI
-12EB ETHIOPIC SYLLABLE YAA
-12EC ETHIOPIC SYLLABLE YEE
-12ED ETHIOPIC SYLLABLE YE
-12EE ETHIOPIC SYLLABLE YO
-12F0 ETHIOPIC SYLLABLE DA
-12F1 ETHIOPIC SYLLABLE DU
-12F2 ETHIOPIC SYLLABLE DI
-12F3 ETHIOPIC SYLLABLE DAA
-12F4 ETHIOPIC SYLLABLE DEE
-12F5 ETHIOPIC SYLLABLE DE
-12F6 ETHIOPIC SYLLABLE DO
-12F7 ETHIOPIC SYLLABLE DWA
-12F8 ETHIOPIC SYLLABLE DDA
-12F9 ETHIOPIC SYLLABLE DDU
-12FA ETHIOPIC SYLLABLE DDI
-12FB ETHIOPIC SYLLABLE DDAA
-12FC ETHIOPIC SYLLABLE DDEE
-12FD ETHIOPIC SYLLABLE DDE
-12FE ETHIOPIC SYLLABLE DDO
-12FF ETHIOPIC SYLLABLE DDWA
-1300 ETHIOPIC SYLLABLE JA
-1301 ETHIOPIC SYLLABLE JU
-1302 ETHIOPIC SYLLABLE JI
-1303 ETHIOPIC SYLLABLE JAA
-1304 ETHIOPIC SYLLABLE JEE
-1305 ETHIOPIC SYLLABLE JE
-1306 ETHIOPIC SYLLABLE JO
-1307 ETHIOPIC SYLLABLE JWA
-1308 ETHIOPIC SYLLABLE GA
-1309 ETHIOPIC SYLLABLE GU
-130A ETHIOPIC SYLLABLE GI
-130B ETHIOPIC SYLLABLE GAA
-130C ETHIOPIC SYLLABLE GEE
-130D ETHIOPIC SYLLABLE GE
-130E ETHIOPIC SYLLABLE GO
-1310 ETHIOPIC SYLLABLE GWA
-1312 ETHIOPIC SYLLABLE GWI
-1313 ETHIOPIC SYLLABLE GWAA
-1314 ETHIOPIC SYLLABLE GWEE
-1315 ETHIOPIC SYLLABLE GWE
-1318 ETHIOPIC SYLLABLE GGA
-1319 ETHIOPIC SYLLABLE GGU
-131A ETHIOPIC SYLLABLE GGI
-131B ETHIOPIC SYLLABLE GGAA
-131C ETHIOPIC SYLLABLE GGEE
-131D ETHIOPIC SYLLABLE GGE
-131E ETHIOPIC SYLLABLE GGO
-1320 ETHIOPIC SYLLABLE THA
-1321 ETHIOPIC SYLLABLE THU
-1322 ETHIOPIC SYLLABLE THI
-1323 ETHIOPIC SYLLABLE THAA
-1324 ETHIOPIC SYLLABLE THEE
-1325 ETHIOPIC SYLLABLE THE
-1326 ETHIOPIC SYLLABLE THO
-1327 ETHIOPIC SYLLABLE THWA
-1328 ETHIOPIC SYLLABLE CHA
-1329 ETHIOPIC SYLLABLE CHU
-132A ETHIOPIC SYLLABLE CHI
-132B ETHIOPIC SYLLABLE CHAA
-132C ETHIOPIC SYLLABLE CHEE
-132D ETHIOPIC SYLLABLE CHE
-132E ETHIOPIC SYLLABLE CHO
-132F ETHIOPIC SYLLABLE CHWA
-1330 ETHIOPIC SYLLABLE PHA
-1331 ETHIOPIC SYLLABLE PHU
-1332 ETHIOPIC SYLLABLE PHI
-1333 ETHIOPIC SYLLABLE PHAA
-1334 ETHIOPIC SYLLABLE PHEE
-1335 ETHIOPIC SYLLABLE PHE
-1336 ETHIOPIC SYLLABLE PHO
-1337 ETHIOPIC SYLLABLE PHWA
-1338 ETHIOPIC SYLLABLE TSA
-1339 ETHIOPIC SYLLABLE TSU
-133A ETHIOPIC SYLLABLE TSI
-133B ETHIOPIC SYLLABLE TSAA
-133C ETHIOPIC SYLLABLE TSEE
-133D ETHIOPIC SYLLABLE TSE
-133E ETHIOPIC SYLLABLE TSO
-133F ETHIOPIC SYLLABLE TSWA
-1340 ETHIOPIC SYLLABLE TZA
-1341 ETHIOPIC SYLLABLE TZU
-1342 ETHIOPIC SYLLABLE TZI
-1343 ETHIOPIC SYLLABLE TZAA
-1344 ETHIOPIC SYLLABLE TZEE
-1345 ETHIOPIC SYLLABLE TZE
-1346 ETHIOPIC SYLLABLE TZO
-1348 ETHIOPIC SYLLABLE FA
-1349 ETHIOPIC SYLLABLE FU
-134A ETHIOPIC SYLLABLE FI
-134B ETHIOPIC SYLLABLE FAA
-134C ETHIOPIC SYLLABLE FEE
-134D ETHIOPIC SYLLABLE FE
-134E ETHIOPIC SYLLABLE FO
-134F ETHIOPIC SYLLABLE FWA
-1350 ETHIOPIC SYLLABLE PA
-1351 ETHIOPIC SYLLABLE PU
-1352 ETHIOPIC SYLLABLE PI
-1353 ETHIOPIC SYLLABLE PAA
-1354 ETHIOPIC SYLLABLE PEE
-1355 ETHIOPIC SYLLABLE PE
-1356 ETHIOPIC SYLLABLE PO
-1357 ETHIOPIC SYLLABLE PWA
-1358 ETHIOPIC SYLLABLE RYA
-1359 ETHIOPIC SYLLABLE MYA
-135A ETHIOPIC SYLLABLE FYA
-@ Punctuation
-1361 ETHIOPIC WORDSPACE
-1362 ETHIOPIC FULL STOP
-1363 ETHIOPIC COMMA
-1364 ETHIOPIC SEMICOLON
-1365 ETHIOPIC COLON
-1366 ETHIOPIC PREFACE COLON
-1367 ETHIOPIC QUESTION MARK
-1368 ETHIOPIC PARAGRAPH SEPARATOR
-@ Digits
-1369 ETHIOPIC DIGIT ONE
-136A ETHIOPIC DIGIT TWO
-136B ETHIOPIC DIGIT THREE
-136C ETHIOPIC DIGIT FOUR
-136D ETHIOPIC DIGIT FIVE
-136E ETHIOPIC DIGIT SIX
-136F ETHIOPIC DIGIT SEVEN
-1370 ETHIOPIC DIGIT EIGHT
-1371 ETHIOPIC DIGIT NINE
-@ Numbers
-1372 ETHIOPIC NUMBER TEN
-1373 ETHIOPIC NUMBER TWENTY
-1374 ETHIOPIC NUMBER THIRTY
-1375 ETHIOPIC NUMBER FORTY
-1376 ETHIOPIC NUMBER FIFTY
-1377 ETHIOPIC NUMBER SIXTY
-1378 ETHIOPIC NUMBER SEVENTY
-1379 ETHIOPIC NUMBER EIGHTY
-137A ETHIOPIC NUMBER NINETY
-137B ETHIOPIC NUMBER HUNDRED
-137C ETHIOPIC NUMBER TEN THOUSAND
-@@ 13A0 Cherokee 13FF
-@ Syllables
-13A0 CHEROKEE LETTER A
-13A1 CHEROKEE LETTER E
-13A2 CHEROKEE LETTER I
-13A3 CHEROKEE LETTER O
-13A4 CHEROKEE LETTER U
-13A5 CHEROKEE LETTER V
-13A6 CHEROKEE LETTER GA
-13A7 CHEROKEE LETTER KA
-13A8 CHEROKEE LETTER GE
-13A9 CHEROKEE LETTER GI
-13AA CHEROKEE LETTER GO
-13AB CHEROKEE LETTER GU
-13AC CHEROKEE LETTER GV
-13AD CHEROKEE LETTER HA
-13AE CHEROKEE LETTER HE
-13AF CHEROKEE LETTER HI
-13B0 CHEROKEE LETTER HO
-13B1 CHEROKEE LETTER HU
-13B2 CHEROKEE LETTER HV
-13B3 CHEROKEE LETTER LA
-13B4 CHEROKEE LETTER LE
-13B5 CHEROKEE LETTER LI
-13B6 CHEROKEE LETTER LO
-13B7 CHEROKEE LETTER LU
-13B8 CHEROKEE LETTER LV
-13B9 CHEROKEE LETTER MA
-13BA CHEROKEE LETTER ME
-13BB CHEROKEE LETTER MI
-13BC CHEROKEE LETTER MO
-13BD CHEROKEE LETTER MU
-13BE CHEROKEE LETTER NA
-13BF CHEROKEE LETTER HNA
-13C0 CHEROKEE LETTER NAH
-13C1 CHEROKEE LETTER NE
-13C2 CHEROKEE LETTER NI
-13C3 CHEROKEE LETTER NO
-13C4 CHEROKEE LETTER NU
-13C5 CHEROKEE LETTER NV
-13C6 CHEROKEE LETTER QUA
-13C7 CHEROKEE LETTER QUE
-13C8 CHEROKEE LETTER QUI
-13C9 CHEROKEE LETTER QUO
-13CA CHEROKEE LETTER QUU
-13CB CHEROKEE LETTER QUV
-13CC CHEROKEE LETTER SA
-13CD CHEROKEE LETTER S
-13CE CHEROKEE LETTER SE
-13CF CHEROKEE LETTER SI
-13D0 CHEROKEE LETTER SO
-13D1 CHEROKEE LETTER SU
-13D2 CHEROKEE LETTER SV
-13D3 CHEROKEE LETTER DA
-13D4 CHEROKEE LETTER TA
-13D5 CHEROKEE LETTER DE
-13D6 CHEROKEE LETTER TE
-13D7 CHEROKEE LETTER DI
-13D8 CHEROKEE LETTER TI
-13D9 CHEROKEE LETTER DO
-13DA CHEROKEE LETTER DU
-13DB CHEROKEE LETTER DV
-13DC CHEROKEE LETTER DLA
-13DD CHEROKEE LETTER TLA
-13DE CHEROKEE LETTER TLE
-13DF CHEROKEE LETTER TLI
-13E0 CHEROKEE LETTER TLO
-13E1 CHEROKEE LETTER TLU
-13E2 CHEROKEE LETTER TLV
-13E3 CHEROKEE LETTER TSA
-13E4 CHEROKEE LETTER TSE
-13E5 CHEROKEE LETTER TSI
-13E6 CHEROKEE LETTER TSO
-13E7 CHEROKEE LETTER TSU
-13E8 CHEROKEE LETTER TSV
-13E9 CHEROKEE LETTER WA
-13EA CHEROKEE LETTER WE
-13EB CHEROKEE LETTER WI
-13EC CHEROKEE LETTER WO
-13ED CHEROKEE LETTER WU
-13EE CHEROKEE LETTER WV
-13EF CHEROKEE LETTER YA
-13F0 CHEROKEE LETTER YE
-13F1 CHEROKEE LETTER YI
-13F2 CHEROKEE LETTER YO
-13F3 CHEROKEE LETTER YU
-13F4 CHEROKEE LETTER YV
-@@ 1400 Unified Canadian Aboriginal Syllabics 167F
-@ Syllables
-1401 CANADIAN SYLLABICS E
-1402 CANADIAN SYLLABICS AAI
-1403 CANADIAN SYLLABICS I
-1404 CANADIAN SYLLABICS II
-1405 CANADIAN SYLLABICS O
-1406 CANADIAN SYLLABICS OO
-1407 CANADIAN SYLLABICS Y-CREE OO
-1408 CANADIAN SYLLABICS CARRIER EE
-1409 CANADIAN SYLLABICS CARRIER I
-140A CANADIAN SYLLABICS A
-140B CANADIAN SYLLABICS AA
-140C CANADIAN SYLLABICS WE
-140D CANADIAN SYLLABICS WEST-CREE WE
-140E CANADIAN SYLLABICS WI
-140F CANADIAN SYLLABICS WEST-CREE WI
-1410 CANADIAN SYLLABICS WII
-1411 CANADIAN SYLLABICS WEST-CREE WII
-1412 CANADIAN SYLLABICS WO
-1413 CANADIAN SYLLABICS WEST-CREE WO
-1414 CANADIAN SYLLABICS WOO
-1415 CANADIAN SYLLABICS WEST-CREE WOO
-1416 CANADIAN SYLLABICS NASKAPI WOO
-1417 CANADIAN SYLLABICS WA
-1418 CANADIAN SYLLABICS WEST-CREE WA
-1419 CANADIAN SYLLABICS WAA
-141A CANADIAN SYLLABICS WEST-CREE WAA
-141B CANADIAN SYLLABICS NASKAPI WAA
-141C CANADIAN SYLLABICS AI
-141D CANADIAN SYLLABICS Y-CREE W
-141E CANADIAN SYLLABICS GLOTTAL STOP
-141F CANADIAN SYLLABICS FINAL ACUTE
-1420 CANADIAN SYLLABICS FINAL GRAVE
-1421 CANADIAN SYLLABICS FINAL BOTTOM HALF RING
-1422 CANADIAN SYLLABICS FINAL TOP HALF RING
-1423 CANADIAN SYLLABICS FINAL RIGHT HALF RING
-1424 CANADIAN SYLLABICS FINAL RING
-1425 CANADIAN SYLLABICS FINAL DOUBLE ACUTE
-1426 CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
-1427 CANADIAN SYLLABICS FINAL MIDDLE DOT
-1428 CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
-1429 CANADIAN SYLLABICS FINAL PLUS
-142A CANADIAN SYLLABICS FINAL DOWN TACK
-142B CANADIAN SYLLABICS EN
-142C CANADIAN SYLLABICS IN
-142D CANADIAN SYLLABICS ON
-142E CANADIAN SYLLABICS AN
-142F CANADIAN SYLLABICS PE
-1430 CANADIAN SYLLABICS PAAI
-1431 CANADIAN SYLLABICS PI
-1432 CANADIAN SYLLABICS PII
-1433 CANADIAN SYLLABICS PO
-1434 CANADIAN SYLLABICS POO
-1435 CANADIAN SYLLABICS Y-CREE POO
-1436 CANADIAN SYLLABICS CARRIER HEE
-1437 CANADIAN SYLLABICS CARRIER HI
-1438 CANADIAN SYLLABICS PA
-1439 CANADIAN SYLLABICS PAA
-143A CANADIAN SYLLABICS PWE
-143B CANADIAN SYLLABICS WEST-CREE PWE
-143C CANADIAN SYLLABICS PWI
-143D CANADIAN SYLLABICS WEST-CREE PWI
-143E CANADIAN SYLLABICS PWII
-143F CANADIAN SYLLABICS WEST-CREE PWII
-1440 CANADIAN SYLLABICS PWO
-1441 CANADIAN SYLLABICS WEST-CREE PWO
-1442 CANADIAN SYLLABICS PWOO
-1443 CANADIAN SYLLABICS WEST-CREE PWOO
-1444 CANADIAN SYLLABICS PWA
-1445 CANADIAN SYLLABICS WEST-CREE PWA
-1446 CANADIAN SYLLABICS PWAA
-1447 CANADIAN SYLLABICS WEST-CREE PWAA
-1448 CANADIAN SYLLABICS Y-CREE PWAA
-1449 CANADIAN SYLLABICS P
-144A CANADIAN SYLLABICS WEST-CREE P
-144B CANADIAN SYLLABICS CARRIER H
-144C CANADIAN SYLLABICS TE
-144D CANADIAN SYLLABICS TAAI
-144E CANADIAN SYLLABICS TI
-144F CANADIAN SYLLABICS TII
-1450 CANADIAN SYLLABICS TO
-1451 CANADIAN SYLLABICS TOO
-1452 CANADIAN SYLLABICS Y-CREE TOO
-1453 CANADIAN SYLLABICS CARRIER DEE
-1454 CANADIAN SYLLABICS CARRIER DI
-1455 CANADIAN SYLLABICS TA
-1456 CANADIAN SYLLABICS TAA
-1457 CANADIAN SYLLABICS TWE
-1458 CANADIAN SYLLABICS WEST-CREE TWE
-1459 CANADIAN SYLLABICS TWI
-145A CANADIAN SYLLABICS WEST-CREE TWI
-145B CANADIAN SYLLABICS TWII
-145C CANADIAN SYLLABICS WEST-CREE TWII
-145D CANADIAN SYLLABICS TWO
-145E CANADIAN SYLLABICS WEST-CREE TWO
-145F CANADIAN SYLLABICS TWOO
-1460 CANADIAN SYLLABICS WEST-CREE TWOO
-1461 CANADIAN SYLLABICS TWA
-1462 CANADIAN SYLLABICS WEST-CREE TWA
-1463 CANADIAN SYLLABICS TWAA
-1464 CANADIAN SYLLABICS WEST-CREE TWAA
-1465 CANADIAN SYLLABICS NASKAPI TWAA
-1466 CANADIAN SYLLABICS T
-1467 CANADIAN SYLLABICS TTE
-1468 CANADIAN SYLLABICS TTI
-1469 CANADIAN SYLLABICS TTO
-146A CANADIAN SYLLABICS TTA
-146B CANADIAN SYLLABICS KE
-146C CANADIAN SYLLABICS KAAI
-146D CANADIAN SYLLABICS KI
-146E CANADIAN SYLLABICS KII
-146F CANADIAN SYLLABICS KO
-1470 CANADIAN SYLLABICS KOO
-1471 CANADIAN SYLLABICS Y-CREE KOO
-1472 CANADIAN SYLLABICS KA
-1473 CANADIAN SYLLABICS KAA
-1474 CANADIAN SYLLABICS KWE
-1475 CANADIAN SYLLABICS WEST-CREE KWE
-1476 CANADIAN SYLLABICS KWI
-1477 CANADIAN SYLLABICS WEST-CREE KWI
-1478 CANADIAN SYLLABICS KWII
-1479 CANADIAN SYLLABICS WEST-CREE KWII
-147A CANADIAN SYLLABICS KWO
-147B CANADIAN SYLLABICS WEST-CREE KWO
-147C CANADIAN SYLLABICS KWOO
-147D CANADIAN SYLLABICS WEST-CREE KWOO
-147E CANADIAN SYLLABICS KWA
-147F CANADIAN SYLLABICS WEST-CREE KWA
-1480 CANADIAN SYLLABICS KWAA
-1481 CANADIAN SYLLABICS WEST-CREE KWAA
-1482 CANADIAN SYLLABICS NASKAPI KWAA
-1483 CANADIAN SYLLABICS K
-1484 CANADIAN SYLLABICS KW
-1485 CANADIAN SYLLABICS SOUTH-SLAVEY KEH
-1486 CANADIAN SYLLABICS SOUTH-SLAVEY KIH
-1487 CANADIAN SYLLABICS SOUTH-SLAVEY KOH
-1488 CANADIAN SYLLABICS SOUTH-SLAVEY KAH
-1489 CANADIAN SYLLABICS CE
-148A CANADIAN SYLLABICS CAAI
-148B CANADIAN SYLLABICS CI
-148C CANADIAN SYLLABICS CII
-148D CANADIAN SYLLABICS CO
-148E CANADIAN SYLLABICS COO
-148F CANADIAN SYLLABICS Y-CREE COO
-1490 CANADIAN SYLLABICS CA
-1491 CANADIAN SYLLABICS CAA
-1492 CANADIAN SYLLABICS CWE
-1493 CANADIAN SYLLABICS WEST-CREE CWE
-1494 CANADIAN SYLLABICS CWI
-1495 CANADIAN SYLLABICS WEST-CREE CWI
-1496 CANADIAN SYLLABICS CWII
-1497 CANADIAN SYLLABICS WEST-CREE CWII
-1498 CANADIAN SYLLABICS CWO
-1499 CANADIAN SYLLABICS WEST-CREE CWO
-149A CANADIAN SYLLABICS CWOO
-149B CANADIAN SYLLABICS WEST-CREE CWOO
-149C CANADIAN SYLLABICS CWA
-149D CANADIAN SYLLABICS WEST-CREE CWA
-149E CANADIAN SYLLABICS CWAA
-149F CANADIAN SYLLABICS WEST-CREE CWAA
-14A0 CANADIAN SYLLABICS NASKAPI CWAA
-14A1 CANADIAN SYLLABICS C
-14A2 CANADIAN SYLLABICS SAYISI TH
-14A3 CANADIAN SYLLABICS ME
-14A4 CANADIAN SYLLABICS MAAI
-14A5 CANADIAN SYLLABICS MI
-14A6 CANADIAN SYLLABICS MII
-14A7 CANADIAN SYLLABICS MO
-14A8 CANADIAN SYLLABICS MOO
-14A9 CANADIAN SYLLABICS Y-CREE MOO
-14AA CANADIAN SYLLABICS MA
-14AB CANADIAN SYLLABICS MAA
-14AC CANADIAN SYLLABICS MWE
-14AD CANADIAN SYLLABICS WEST-CREE MWE
-14AE CANADIAN SYLLABICS MWI
-14AF CANADIAN SYLLABICS WEST-CREE MWI
-14B0 CANADIAN SYLLABICS MWII
-14B1 CANADIAN SYLLABICS WEST-CREE MWII
-14B2 CANADIAN SYLLABICS MWO
-14B3 CANADIAN SYLLABICS WEST-CREE MWO
-14B4 CANADIAN SYLLABICS MWOO
-14B5 CANADIAN SYLLABICS WEST-CREE MWOO
-14B6 CANADIAN SYLLABICS MWA
-14B7 CANADIAN SYLLABICS WEST-CREE MWA
-14B8 CANADIAN SYLLABICS MWAA
-14B9 CANADIAN SYLLABICS WEST-CREE MWAA
-14BA CANADIAN SYLLABICS NASKAPI MWAA
-14BB CANADIAN SYLLABICS M
-14BC CANADIAN SYLLABICS WEST-CREE M
-14BD CANADIAN SYLLABICS MH
-14BE CANADIAN SYLLABICS ATHAPASCAN M
-14BF CANADIAN SYLLABICS SAYISI M
-14C0 CANADIAN SYLLABICS NE
-14C1 CANADIAN SYLLABICS NAAI
-14C2 CANADIAN SYLLABICS NI
-14C3 CANADIAN SYLLABICS NII
-14C4 CANADIAN SYLLABICS NO
-14C5 CANADIAN SYLLABICS NOO
-14C6 CANADIAN SYLLABICS Y-CREE NOO
-14C7 CANADIAN SYLLABICS NA
-14C8 CANADIAN SYLLABICS NAA
-14C9 CANADIAN SYLLABICS NWE
-14CA CANADIAN SYLLABICS WEST-CREE NWE
-14CB CANADIAN SYLLABICS NWA
-14CC CANADIAN SYLLABICS WEST-CREE NWA
-14CD CANADIAN SYLLABICS NWAA
-14CE CANADIAN SYLLABICS WEST-CREE NWAA
-14CF CANADIAN SYLLABICS NASKAPI NWAA
-14D0 CANADIAN SYLLABICS N
-14D1 CANADIAN SYLLABICS CARRIER NG
-14D2 CANADIAN SYLLABICS NH
-14D3 CANADIAN SYLLABICS LE
-14D4 CANADIAN SYLLABICS LAAI
-14D5 CANADIAN SYLLABICS LI
-14D6 CANADIAN SYLLABICS LII
-14D7 CANADIAN SYLLABICS LO
-14D8 CANADIAN SYLLABICS LOO
-14D9 CANADIAN SYLLABICS Y-CREE LOO
-14DA CANADIAN SYLLABICS LA
-14DB CANADIAN SYLLABICS LAA
-14DC CANADIAN SYLLABICS LWE
-14DD CANADIAN SYLLABICS WEST-CREE LWE
-14DE CANADIAN SYLLABICS LWI
-14DF CANADIAN SYLLABICS WEST-CREE LWI
-14E0 CANADIAN SYLLABICS LWII
-14E1 CANADIAN SYLLABICS WEST-CREE LWII
-14E2 CANADIAN SYLLABICS LWO
-14E3 CANADIAN SYLLABICS WEST-CREE LWO
-14E4 CANADIAN SYLLABICS LWOO
-14E5 CANADIAN SYLLABICS WEST-CREE LWOO
-14E6 CANADIAN SYLLABICS LWA
-14E7 CANADIAN SYLLABICS WEST-CREE LWA
-14E8 CANADIAN SYLLABICS LWAA
-14E9 CANADIAN SYLLABICS WEST-CREE LWAA
-14EA CANADIAN SYLLABICS L
-14EB CANADIAN SYLLABICS WEST-CREE L
-14EC CANADIAN SYLLABICS MEDIAL L
-14ED CANADIAN SYLLABICS SE
-14EE CANADIAN SYLLABICS SAAI
-14EF CANADIAN SYLLABICS SI
-14F0 CANADIAN SYLLABICS SII
-14F1 CANADIAN SYLLABICS SO
-14F2 CANADIAN SYLLABICS SOO
-14F3 CANADIAN SYLLABICS Y-CREE SOO
-14F4 CANADIAN SYLLABICS SA
-14F5 CANADIAN SYLLABICS SAA
-14F6 CANADIAN SYLLABICS SWE
-14F7 CANADIAN SYLLABICS WEST-CREE SWE
-14F8 CANADIAN SYLLABICS SWI
-14F9 CANADIAN SYLLABICS WEST-CREE SWI
-14FA CANADIAN SYLLABICS SWII
-14FB CANADIAN SYLLABICS WEST-CREE SWII
-14FC CANADIAN SYLLABICS SWO
-14FD CANADIAN SYLLABICS WEST-CREE SWO
-14FE CANADIAN SYLLABICS SWOO
-14FF CANADIAN SYLLABICS WEST-CREE SWOO
-1500 CANADIAN SYLLABICS SWA
-1501 CANADIAN SYLLABICS WEST-CREE SWA
-1502 CANADIAN SYLLABICS SWAA
-1503 CANADIAN SYLLABICS WEST-CREE SWAA
-1504 CANADIAN SYLLABICS NASKAPI SWAA
-1505 CANADIAN SYLLABICS S
-1506 CANADIAN SYLLABICS ATHAPASCAN S
-1507 CANADIAN SYLLABICS SW
-1508 CANADIAN SYLLABICS BLACKFOOT S
-1509 CANADIAN SYLLABICS MOOSE-CREE SK
-150A CANADIAN SYLLABICS NASKAPI SKW
-150B CANADIAN SYLLABICS NASKAPI S-W
-150C CANADIAN SYLLABICS NASKAPI SPWA
-150D CANADIAN SYLLABICS NASKAPI STWA
-150E CANADIAN SYLLABICS NASKAPI SKWA
-150F CANADIAN SYLLABICS NASKAPI SCWA
-1510 CANADIAN SYLLABICS SHE
-1511 CANADIAN SYLLABICS SHI
-1512 CANADIAN SYLLABICS SHII
-1513 CANADIAN SYLLABICS SHO
-1514 CANADIAN SYLLABICS SHOO
-1515 CANADIAN SYLLABICS SHA
-1516 CANADIAN SYLLABICS SHAA
-1517 CANADIAN SYLLABICS SHWE
-1518 CANADIAN SYLLABICS WEST-CREE SHWE
-1519 CANADIAN SYLLABICS SHWI
-151A CANADIAN SYLLABICS WEST-CREE SHWI
-151B CANADIAN SYLLABICS SHWII
-151C CANADIAN SYLLABICS WEST-CREE SHWII
-151D CANADIAN SYLLABICS SHWO
-151E CANADIAN SYLLABICS WEST-CREE SHWO
-151F CANADIAN SYLLABICS SHWOO
-1520 CANADIAN SYLLABICS WEST-CREE SHWOO
-1521 CANADIAN SYLLABICS SHWA
-1522 CANADIAN SYLLABICS WEST-CREE SHWA
-1523 CANADIAN SYLLABICS SHWAA
-1524 CANADIAN SYLLABICS WEST-CREE SHWAA
-1525 CANADIAN SYLLABICS SH
-1526 CANADIAN SYLLABICS YE
-1527 CANADIAN SYLLABICS YAAI
-1528 CANADIAN SYLLABICS YI
-1529 CANADIAN SYLLABICS YII
-152A CANADIAN SYLLABICS YO
-152B CANADIAN SYLLABICS YOO
-152C CANADIAN SYLLABICS Y-CREE YOO
-152D CANADIAN SYLLABICS YA
-152E CANADIAN SYLLABICS YAA
-152F CANADIAN SYLLABICS YWE
-1530 CANADIAN SYLLABICS WEST-CREE YWE
-1531 CANADIAN SYLLABICS YWI
-1532 CANADIAN SYLLABICS WEST-CREE YWI
-1533 CANADIAN SYLLABICS YWII
-1534 CANADIAN SYLLABICS WEST-CREE YWII
-1535 CANADIAN SYLLABICS YWO
-1536 CANADIAN SYLLABICS WEST-CREE YWO
-1537 CANADIAN SYLLABICS YWOO
-1538 CANADIAN SYLLABICS WEST-CREE YWOO
-1539 CANADIAN SYLLABICS YWA
-153A CANADIAN SYLLABICS WEST-CREE YWA
-153B CANADIAN SYLLABICS YWAA
-153C CANADIAN SYLLABICS WEST-CREE YWAA
-153D CANADIAN SYLLABICS NASKAPI YWAA
-153E CANADIAN SYLLABICS Y
-153F CANADIAN SYLLABICS BIBLE-CREE Y
-1540 CANADIAN SYLLABICS WEST-CREE Y
-1541 CANADIAN SYLLABICS SAYISI YI
-1542 CANADIAN SYLLABICS RE
-1543 CANADIAN SYLLABICS R-CREE RE
-1544 CANADIAN SYLLABICS WEST-CREE LE
-1545 CANADIAN SYLLABICS RAAI
-1546 CANADIAN SYLLABICS RI
-1547 CANADIAN SYLLABICS RII
-1548 CANADIAN SYLLABICS RO
-1549 CANADIAN SYLLABICS ROO
-154A CANADIAN SYLLABICS WEST-CREE LO
-154B CANADIAN SYLLABICS RA
-154C CANADIAN SYLLABICS RAA
-154D CANADIAN SYLLABICS WEST-CREE LA
-154E CANADIAN SYLLABICS RWAA
-154F CANADIAN SYLLABICS WEST-CREE RWAA
-1550 CANADIAN SYLLABICS R
-1551 CANADIAN SYLLABICS WEST-CREE R
-1552 CANADIAN SYLLABICS MEDIAL R
-1553 CANADIAN SYLLABICS FE
-1554 CANADIAN SYLLABICS FAAI
-1555 CANADIAN SYLLABICS FI
-1556 CANADIAN SYLLABICS FII
-1557 CANADIAN SYLLABICS FO
-1558 CANADIAN SYLLABICS FOO
-1559 CANADIAN SYLLABICS FA
-155A CANADIAN SYLLABICS FAA
-155B CANADIAN SYLLABICS FWAA
-155C CANADIAN SYLLABICS WEST-CREE FWAA
-155D CANADIAN SYLLABICS F
-155E CANADIAN SYLLABICS THE
-155F CANADIAN SYLLABICS N-CREE THE
-1560 CANADIAN SYLLABICS THI
-1561 CANADIAN SYLLABICS N-CREE THI
-1562 CANADIAN SYLLABICS THII
-1563 CANADIAN SYLLABICS N-CREE THII
-1564 CANADIAN SYLLABICS THO
-1565 CANADIAN SYLLABICS THOO
-1566 CANADIAN SYLLABICS THA
-1567 CANADIAN SYLLABICS THAA
-1568 CANADIAN SYLLABICS THWAA
-1569 CANADIAN SYLLABICS WEST-CREE THWAA
-156A CANADIAN SYLLABICS TH
-156B CANADIAN SYLLABICS TTHE
-156C CANADIAN SYLLABICS TTHI
-156D CANADIAN SYLLABICS TTHO
-156E CANADIAN SYLLABICS TTHA
-156F CANADIAN SYLLABICS TTH
-1570 CANADIAN SYLLABICS TYE
-1571 CANADIAN SYLLABICS TYI
-1572 CANADIAN SYLLABICS TYO
-1573 CANADIAN SYLLABICS TYA
-1574 CANADIAN SYLLABICS NUNAVIK HE
-1575 CANADIAN SYLLABICS NUNAVIK HI
-1576 CANADIAN SYLLABICS NUNAVIK HII
-1577 CANADIAN SYLLABICS NUNAVIK HO
-1578 CANADIAN SYLLABICS NUNAVIK HOO
-1579 CANADIAN SYLLABICS NUNAVIK HA
-157A CANADIAN SYLLABICS NUNAVIK HAA
-157B CANADIAN SYLLABICS NUNAVIK H
-157C CANADIAN SYLLABICS NUNAVUT H
-157D CANADIAN SYLLABICS HK
-157E CANADIAN SYLLABICS QAAI
-157F CANADIAN SYLLABICS QI
-1580 CANADIAN SYLLABICS QII
-1581 CANADIAN SYLLABICS QO
-1582 CANADIAN SYLLABICS QOO
-1583 CANADIAN SYLLABICS QA
-1584 CANADIAN SYLLABICS QAA
-1585 CANADIAN SYLLABICS Q
-1586 CANADIAN SYLLABICS TLHE
-1587 CANADIAN SYLLABICS TLHI
-1588 CANADIAN SYLLABICS TLHO
-1589 CANADIAN SYLLABICS TLHA
-158A CANADIAN SYLLABICS WEST-CREE RE
-158B CANADIAN SYLLABICS WEST-CREE RI
-158C CANADIAN SYLLABICS WEST-CREE RO
-158D CANADIAN SYLLABICS WEST-CREE RA
-158E CANADIAN SYLLABICS NGAAI
-158F CANADIAN SYLLABICS NGI
-1590 CANADIAN SYLLABICS NGII
-1591 CANADIAN SYLLABICS NGO
-1592 CANADIAN SYLLABICS NGOO
-1593 CANADIAN SYLLABICS NGA
-1594 CANADIAN SYLLABICS NGAA
-1595 CANADIAN SYLLABICS NG
-1596 CANADIAN SYLLABICS NNG
-1597 CANADIAN SYLLABICS SAYISI SHE
-1598 CANADIAN SYLLABICS SAYISI SHI
-1599 CANADIAN SYLLABICS SAYISI SHO
-159A CANADIAN SYLLABICS SAYISI SHA
-159B CANADIAN SYLLABICS WOODS-CREE THE
-159C CANADIAN SYLLABICS WOODS-CREE THI
-159D CANADIAN SYLLABICS WOODS-CREE THO
-159E CANADIAN SYLLABICS WOODS-CREE THA
-159F CANADIAN SYLLABICS WOODS-CREE TH
-15A0 CANADIAN SYLLABICS LHI
-15A1 CANADIAN SYLLABICS LHII
-15A2 CANADIAN SYLLABICS LHO
-15A3 CANADIAN SYLLABICS LHOO
-15A4 CANADIAN SYLLABICS LHA
-15A5 CANADIAN SYLLABICS LHAA
-15A6 CANADIAN SYLLABICS LH
-15A7 CANADIAN SYLLABICS TH-CREE THE
-15A8 CANADIAN SYLLABICS TH-CREE THI
-15A9 CANADIAN SYLLABICS TH-CREE THII
-15AA CANADIAN SYLLABICS TH-CREE THO
-15AB CANADIAN SYLLABICS TH-CREE THOO
-15AC CANADIAN SYLLABICS TH-CREE THA
-15AD CANADIAN SYLLABICS TH-CREE THAA
-15AE CANADIAN SYLLABICS TH-CREE TH
-15AF CANADIAN SYLLABICS AIVILIK B
-15B0 CANADIAN SYLLABICS BLACKFOOT E
-15B1 CANADIAN SYLLABICS BLACKFOOT I
-15B2 CANADIAN SYLLABICS BLACKFOOT O
-15B3 CANADIAN SYLLABICS BLACKFOOT A
-15B4 CANADIAN SYLLABICS BLACKFOOT WE
-15B5 CANADIAN SYLLABICS BLACKFOOT WI
-15B6 CANADIAN SYLLABICS BLACKFOOT WO
-15B7 CANADIAN SYLLABICS BLACKFOOT WA
-15B8 CANADIAN SYLLABICS BLACKFOOT NE
-15B9 CANADIAN SYLLABICS BLACKFOOT NI
-15BA CANADIAN SYLLABICS BLACKFOOT NO
-15BB CANADIAN SYLLABICS BLACKFOOT NA
-15BC CANADIAN SYLLABICS BLACKFOOT KE
-15BD CANADIAN SYLLABICS BLACKFOOT KI
-15BE CANADIAN SYLLABICS BLACKFOOT KO
-15BF CANADIAN SYLLABICS BLACKFOOT KA
-15C0 CANADIAN SYLLABICS SAYISI HE
-15C1 CANADIAN SYLLABICS SAYISI HI
-15C2 CANADIAN SYLLABICS SAYISI HO
-15C3 CANADIAN SYLLABICS SAYISI HA
-15C4 CANADIAN SYLLABICS CARRIER GHU
-15C5 CANADIAN SYLLABICS CARRIER GHO
-15C6 CANADIAN SYLLABICS CARRIER GHE
-15C7 CANADIAN SYLLABICS CARRIER GHEE
-15C8 CANADIAN SYLLABICS CARRIER GHI
-15C9 CANADIAN SYLLABICS CARRIER GHA
-15CA CANADIAN SYLLABICS CARRIER RU
-15CB CANADIAN SYLLABICS CARRIER RO
-15CC CANADIAN SYLLABICS CARRIER RE
-15CD CANADIAN SYLLABICS CARRIER REE
-15CE CANADIAN SYLLABICS CARRIER RI
-15CF CANADIAN SYLLABICS CARRIER RA
-15D0 CANADIAN SYLLABICS CARRIER WU
-15D1 CANADIAN SYLLABICS CARRIER WO
-15D2 CANADIAN SYLLABICS CARRIER WE
-15D3 CANADIAN SYLLABICS CARRIER WEE
-15D4 CANADIAN SYLLABICS CARRIER WI
-15D5 CANADIAN SYLLABICS CARRIER WA
-15D6 CANADIAN SYLLABICS CARRIER HWU
-15D7 CANADIAN SYLLABICS CARRIER HWO
-15D8 CANADIAN SYLLABICS CARRIER HWE
-15D9 CANADIAN SYLLABICS CARRIER HWEE
-15DA CANADIAN SYLLABICS CARRIER HWI
-15DB CANADIAN SYLLABICS CARRIER HWA
-15DC CANADIAN SYLLABICS CARRIER THU
-15DD CANADIAN SYLLABICS CARRIER THO
-15DE CANADIAN SYLLABICS CARRIER THE
-15DF CANADIAN SYLLABICS CARRIER THEE
-15E0 CANADIAN SYLLABICS CARRIER THI
-15E1 CANADIAN SYLLABICS CARRIER THA
-15E2 CANADIAN SYLLABICS CARRIER TTU
-15E3 CANADIAN SYLLABICS CARRIER TTO
-15E4 CANADIAN SYLLABICS CARRIER TTE
-15E5 CANADIAN SYLLABICS CARRIER TTEE
-15E6 CANADIAN SYLLABICS CARRIER TTI
-15E7 CANADIAN SYLLABICS CARRIER TTA
-15E8 CANADIAN SYLLABICS CARRIER PU
-15E9 CANADIAN SYLLABICS CARRIER PO
-15EA CANADIAN SYLLABICS CARRIER PE
-15EB CANADIAN SYLLABICS CARRIER PEE
-15EC CANADIAN SYLLABICS CARRIER PI
-15ED CANADIAN SYLLABICS CARRIER PA
-15EE CANADIAN SYLLABICS CARRIER P
-15EF CANADIAN SYLLABICS CARRIER GU
-15F0 CANADIAN SYLLABICS CARRIER GO
-15F1 CANADIAN SYLLABICS CARRIER GE
-15F2 CANADIAN SYLLABICS CARRIER GEE
-15F3 CANADIAN SYLLABICS CARRIER GI
-15F4 CANADIAN SYLLABICS CARRIER GA
-15F5 CANADIAN SYLLABICS CARRIER KHU
-15F6 CANADIAN SYLLABICS CARRIER KHO
-15F7 CANADIAN SYLLABICS CARRIER KHE
-15F8 CANADIAN SYLLABICS CARRIER KHEE
-15F9 CANADIAN SYLLABICS CARRIER KHI
-15FA CANADIAN SYLLABICS CARRIER KHA
-15FB CANADIAN SYLLABICS CARRIER KKU
-15FC CANADIAN SYLLABICS CARRIER KKO
-15FD CANADIAN SYLLABICS CARRIER KKE
-15FE CANADIAN SYLLABICS CARRIER KKEE
-15FF CANADIAN SYLLABICS CARRIER KKI
-1600 CANADIAN SYLLABICS CARRIER KKA
-1601 CANADIAN SYLLABICS CARRIER KK
-1602 CANADIAN SYLLABICS CARRIER NU
-1603 CANADIAN SYLLABICS CARRIER NO
-1604 CANADIAN SYLLABICS CARRIER NE
-1605 CANADIAN SYLLABICS CARRIER NEE
-1606 CANADIAN SYLLABICS CARRIER NI
-1607 CANADIAN SYLLABICS CARRIER NA
-1608 CANADIAN SYLLABICS CARRIER MU
-1609 CANADIAN SYLLABICS CARRIER MO
-160A CANADIAN SYLLABICS CARRIER ME
-160B CANADIAN SYLLABICS CARRIER MEE
-160C CANADIAN SYLLABICS CARRIER MI
-160D CANADIAN SYLLABICS CARRIER MA
-160E CANADIAN SYLLABICS CARRIER YU
-160F CANADIAN SYLLABICS CARRIER YO
-1610 CANADIAN SYLLABICS CARRIER YE
-1611 CANADIAN SYLLABICS CARRIER YEE
-1612 CANADIAN SYLLABICS CARRIER YI
-1613 CANADIAN SYLLABICS CARRIER YA
-1614 CANADIAN SYLLABICS CARRIER JU
-1615 CANADIAN SYLLABICS SAYISI JU
-1616 CANADIAN SYLLABICS CARRIER JO
-1617 CANADIAN SYLLABICS CARRIER JE
-1618 CANADIAN SYLLABICS CARRIER JEE
-1619 CANADIAN SYLLABICS CARRIER JI
-161A CANADIAN SYLLABICS SAYISI JI
-161B CANADIAN SYLLABICS CARRIER JA
-161C CANADIAN SYLLABICS CARRIER JJU
-161D CANADIAN SYLLABICS CARRIER JJO
-161E CANADIAN SYLLABICS CARRIER JJE
-161F CANADIAN SYLLABICS CARRIER JJEE
-1620 CANADIAN SYLLABICS CARRIER JJI
-1621 CANADIAN SYLLABICS CARRIER JJA
-1622 CANADIAN SYLLABICS CARRIER LU
-1623 CANADIAN SYLLABICS CARRIER LO
-1624 CANADIAN SYLLABICS CARRIER LE
-1625 CANADIAN SYLLABICS CARRIER LEE
-1626 CANADIAN SYLLABICS CARRIER LI
-1627 CANADIAN SYLLABICS CARRIER LA
-1628 CANADIAN SYLLABICS CARRIER DLU
-1629 CANADIAN SYLLABICS CARRIER DLO
-162A CANADIAN SYLLABICS CARRIER DLE
-162B CANADIAN SYLLABICS CARRIER DLEE
-162C CANADIAN SYLLABICS CARRIER DLI
-162D CANADIAN SYLLABICS CARRIER DLA
-162E CANADIAN SYLLABICS CARRIER LHU
-162F CANADIAN SYLLABICS CARRIER LHO
-1630 CANADIAN SYLLABICS CARRIER LHE
-1631 CANADIAN SYLLABICS CARRIER LHEE
-1632 CANADIAN SYLLABICS CARRIER LHI
-1633 CANADIAN SYLLABICS CARRIER LHA
-1634 CANADIAN SYLLABICS CARRIER TLHU
-1635 CANADIAN SYLLABICS CARRIER TLHO
-1636 CANADIAN SYLLABICS CARRIER TLHE
-1637 CANADIAN SYLLABICS CARRIER TLHEE
-1638 CANADIAN SYLLABICS CARRIER TLHI
-1639 CANADIAN SYLLABICS CARRIER TLHA
-163A CANADIAN SYLLABICS CARRIER TLU
-163B CANADIAN SYLLABICS CARRIER TLO
-163C CANADIAN SYLLABICS CARRIER TLE
-163D CANADIAN SYLLABICS CARRIER TLEE
-163E CANADIAN SYLLABICS CARRIER TLI
-163F CANADIAN SYLLABICS CARRIER TLA
-1640 CANADIAN SYLLABICS CARRIER ZU
-1641 CANADIAN SYLLABICS CARRIER ZO
-1642 CANADIAN SYLLABICS CARRIER ZE
-1643 CANADIAN SYLLABICS CARRIER ZEE
-1644 CANADIAN SYLLABICS CARRIER ZI
-1645 CANADIAN SYLLABICS CARRIER ZA
-1646 CANADIAN SYLLABICS CARRIER Z
-1647 CANADIAN SYLLABICS CARRIER INITIAL Z
-1648 CANADIAN SYLLABICS CARRIER DZU
-1649 CANADIAN SYLLABICS CARRIER DZO
-164A CANADIAN SYLLABICS CARRIER DZE
-164B CANADIAN SYLLABICS CARRIER DZEE
-164C CANADIAN SYLLABICS CARRIER DZI
-164D CANADIAN SYLLABICS CARRIER DZA
-164E CANADIAN SYLLABICS CARRIER SU
-164F CANADIAN SYLLABICS CARRIER SO
-1650 CANADIAN SYLLABICS CARRIER SE
-1651 CANADIAN SYLLABICS CARRIER SEE
-1652 CANADIAN SYLLABICS CARRIER SI
-1653 CANADIAN SYLLABICS CARRIER SA
-1654 CANADIAN SYLLABICS CARRIER SHU
-1655 CANADIAN SYLLABICS CARRIER SHO
-1656 CANADIAN SYLLABICS CARRIER SHE
-1657 CANADIAN SYLLABICS CARRIER SHEE
-1658 CANADIAN SYLLABICS CARRIER SHI
-1659 CANADIAN SYLLABICS CARRIER SHA
-165A CANADIAN SYLLABICS CARRIER SH
-165B CANADIAN SYLLABICS CARRIER TSU
-165C CANADIAN SYLLABICS CARRIER TSO
-165D CANADIAN SYLLABICS CARRIER TSE
-165E CANADIAN SYLLABICS CARRIER TSEE
-165F CANADIAN SYLLABICS CARRIER TSI
-1660 CANADIAN SYLLABICS CARRIER TSA
-1661 CANADIAN SYLLABICS CARRIER CHU
-1662 CANADIAN SYLLABICS CARRIER CHO
-1663 CANADIAN SYLLABICS CARRIER CHE
-1664 CANADIAN SYLLABICS CARRIER CHEE
-1665 CANADIAN SYLLABICS CARRIER CHI
-1666 CANADIAN SYLLABICS CARRIER CHA
-1667 CANADIAN SYLLABICS CARRIER TTSU
-1668 CANADIAN SYLLABICS CARRIER TTSO
-1669 CANADIAN SYLLABICS CARRIER TTSE
-166A CANADIAN SYLLABICS CARRIER TTSEE
-166B CANADIAN SYLLABICS CARRIER TTSI
-166C CANADIAN SYLLABICS CARRIER TTSA
-@ Punctuation
-166D CANADIAN SYLLABICS CHI SIGN
-166E CANADIAN SYLLABICS FULL STOP
-@ Syllables
-166F CANADIAN SYLLABICS QAI
-1670 CANADIAN SYLLABICS NGAI
-1671 CANADIAN SYLLABICS NNGI
-1672 CANADIAN SYLLABICS NNGII
-1673 CANADIAN SYLLABICS NNGO
-1674 CANADIAN SYLLABICS NNGOO
-1675 CANADIAN SYLLABICS NNGA
-1676 CANADIAN SYLLABICS NNGAA
-@@ 1680 Ogham 169F
-@ Punctuation
-1680 OGHAM SPACE MARK
- * glyph is blank in "stemless" style fonts
-@ Traditional letters
-1681 OGHAM LETTER BEITH
-1682 OGHAM LETTER LUIS
-1683 OGHAM LETTER FEARN
-1684 OGHAM LETTER SAIL
-1685 OGHAM LETTER NION
-1686 OGHAM LETTER UATH
-1687 OGHAM LETTER DAIR
-1688 OGHAM LETTER TINNE
-1689 OGHAM LETTER COLL
-168A OGHAM LETTER CEIRT
-168B OGHAM LETTER MUIN
-168C OGHAM LETTER GORT
-168D OGHAM LETTER NGEADAL
-168E OGHAM LETTER STRAIF
-168F OGHAM LETTER RUIS
-1690 OGHAM LETTER AILM
-1691 OGHAM LETTER ONN
-1692 OGHAM LETTER UR
-1693 OGHAM LETTER EADHADH
-1694 OGHAM LETTER IODHADH
-@ Forfeda (supplementary letters)
-1695 OGHAM LETTER EABHADH
-1696 OGHAM LETTER OR
-1697 OGHAM LETTER UILLEANN
-1698 OGHAM LETTER IFIN
-1699 OGHAM LETTER EAMHANCHOLL
-169A OGHAM LETTER PEITH
-@ Punctuation
-169B OGHAM FEATHER MARK
- * marks beginning of Ogham text
-169C OGHAM REVERSED FEATHER MARK
- * marks end of Ogham text
-@@ 16A0 Runic 16FF
-@ Letters
-16A0 RUNIC LETTER FEHU FEOH FE F
-16A1 RUNIC LETTER V
-16A2 RUNIC LETTER URUZ UR U
-16A3 RUNIC LETTER YR
-16A4 RUNIC LETTER Y
-16A5 RUNIC LETTER W
-16A6 RUNIC LETTER THURISAZ THURS THORN
- x (latin small letter thorn - 00FE)
-16A7 RUNIC LETTER ETH
-16A8 RUNIC LETTER ANSUZ A
-16A9 RUNIC LETTER OS O
-16AA RUNIC LETTER AC A
-16AB RUNIC LETTER AESC
-16AC RUNIC LETTER LONG-BRANCH-OSS O
-16AD RUNIC LETTER SHORT-TWIG-OSS O
-16AE RUNIC LETTER O
-16AF RUNIC LETTER OE
-16B0 RUNIC LETTER ON
-16B1 RUNIC LETTER RAIDO RAD REID R
-16B2 RUNIC LETTER KAUNA
-16B3 RUNIC LETTER CEN
-16B4 RUNIC LETTER KAUN K
-16B5 RUNIC LETTER G
-16B6 RUNIC LETTER ENG
-16B7 RUNIC LETTER GEBO GYFU G
-16B8 RUNIC LETTER GAR
-16B9 RUNIC LETTER WUNJO WYNN W
- x (latin letter wynn - 01BF)
-16BA RUNIC LETTER HAGLAZ H
-16BB RUNIC LETTER HAEGL H
-16BC RUNIC LETTER LONG-BRANCH-HAGALL H
-16BD RUNIC LETTER SHORT-TWIG-HAGALL H
-16BE RUNIC LETTER NAUDIZ NYD NAUD N
-16BF RUNIC LETTER SHORT-TWIG-NAUD N
-16C0 RUNIC LETTER DOTTED-N
-16C1 RUNIC LETTER ISAZ IS ISS I
-16C2 RUNIC LETTER E
-16C3 RUNIC LETTER JERAN J
-16C4 RUNIC LETTER GER
-16C5 RUNIC LETTER LONG-BRANCH-AR AE
-16C6 RUNIC LETTER SHORT-TWIG-AR A
-16C7 RUNIC LETTER IWAZ EOH
-16C8 RUNIC LETTER PERTHO PEORTH P
-16C9 RUNIC LETTER ALGIZ EOLHX
-16CA RUNIC LETTER SOWILO S
-16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
-16CC RUNIC LETTER SHORT-TWIG-SOL S
-16CD RUNIC LETTER C
-16CE RUNIC LETTER Z
-16CF RUNIC LETTER TIWAZ TIR TYR T
-16D0 RUNIC LETTER SHORT-TWIG-TYR T
-16D1 RUNIC LETTER D
-16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
-16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
-16D4 RUNIC LETTER DOTTED-P
-16D5 RUNIC LETTER OPEN-P
-16D6 RUNIC LETTER EHWAZ EH E
-16D7 RUNIC LETTER MANNAZ MAN M
-16D8 RUNIC LETTER LONG-BRANCH-MADR M
-16D9 RUNIC LETTER SHORT-TWIG-MADR M
-16DA RUNIC LETTER LAUKAZ LAGU LOGR L
-16DB RUNIC LETTER DOTTED-L
-16DC RUNIC LETTER INGWAZ
-16DD RUNIC LETTER ING
-16DE RUNIC LETTER DAGAZ DAEG D
-16DF RUNIC LETTER OTHALAN ETHEL O
-16E0 RUNIC LETTER EAR
-16E1 RUNIC LETTER IOR
-16E2 RUNIC LETTER CWEORTH
-16E3 RUNIC LETTER CALC
-16E4 RUNIC LETTER CEALC
-16E5 RUNIC LETTER STAN
-16E6 RUNIC LETTER LONG-BRANCH-YR
-16E7 RUNIC LETTER SHORT-TWIG-YR
-16E8 RUNIC LETTER ICELANDIC-YR
-16E9 RUNIC LETTER Q
-16EA RUNIC LETTER X
-@ Punctuation
-16EB RUNIC SINGLE PUNCTUATION
-16EC RUNIC MULTIPLE PUNCTUATION
-16ED RUNIC CROSS PUNCTUATION
-@ Golden number runes
-16EE RUNIC ARLAUG SYMBOL (golden number 17)
- * golden number 17
-16EF RUNIC TVIMADUR SYMBOL (golden number 18)
- * golden number 18
-16F0 RUNIC BELGTHOR SYMBOL (golden number 19)
- * golden number 19
-@@ 1780 Khmer 17FF
-@ Consonants
-1780 KHMER LETTER KA
-1781 KHMER LETTER KHA
-1782 KHMER LETTER KO
-1783 KHMER LETTER KHO
-1784 KHMER LETTER NGO
-1785 KHMER LETTER CA
-1786 KHMER LETTER CHA
-1787 KHMER LETTER CO
-1788 KHMER LETTER CHO
-1789 KHMER LETTER NYO
-178A KHMER LETTER DA
-178B KHMER LETTER TTHA
-178C KHMER LETTER DO
-178D KHMER LETTER TTHO
-178E KHMER LETTER NNO
-178F KHMER LETTER TA
-1790 KHMER LETTER THA
-1791 KHMER LETTER TO
-1792 KHMER LETTER THO
-1793 KHMER LETTER NO
-1794 KHMER LETTER BA
-1795 KHMER LETTER PHA
-1796 KHMER LETTER PO
-1797 KHMER LETTER PHO
-1798 KHMER LETTER MO
-1799 KHMER LETTER YO
-179A KHMER LETTER RO
-179B KHMER LETTER LO
-179C KHMER LETTER VO
-179D KHMER LETTER SHA
- * used only for Pali/Sanskrit transliteration
-179E KHMER LETTER SSO
- * used only for Pali/Sanskrit transliteration
-179F KHMER LETTER SA
-17A0 KHMER LETTER HA
-17A1 KHMER LETTER LA
-17A2 KHMER LETTER QA
- * glottal stop
-@ Independent vowels
-17A3 KHMER INDEPENDENT VOWEL QAQ
- * used only for Pali/Sanskrit transliteration
-17A4 KHMER INDEPENDENT VOWEL QAA
- * used only for Pali/Sanskrit transliteration
-17A5 KHMER INDEPENDENT VOWEL QI
-17A6 KHMER INDEPENDENT VOWEL QII
-17A7 KHMER INDEPENDENT VOWEL QU
-17A8 KHMER INDEPENDENT VOWEL QUK
- * obsolete
-17A9 KHMER INDEPENDENT VOWEL QUU
-17AA KHMER INDEPENDENT VOWEL QUUV
-17AB KHMER INDEPENDENT VOWEL RY
-17AC KHMER INDEPENDENT VOWEL RYY
-17AD KHMER INDEPENDENT VOWEL LY
-17AE KHMER INDEPENDENT VOWEL LYY
-17AF KHMER INDEPENDENT VOWEL QE
-17B0 KHMER INDEPENDENT VOWEL QAI
-17B1 KHMER INDEPENDENT VOWEL QOO TYPE ONE
-17B2 KHMER INDEPENDENT VOWEL QOO TYPE TWO
-17B3 KHMER INDEPENDENT VOWEL QAU
-@ Inherent vowels
-@+ These are for phonetic transcription to distinguish Indic language inherent vowels from Khmer inherent vowels.
-17B4 KHMER VOWEL INHERENT AQ
-17B5 KHMER VOWEL INHERENT AA
-@ Dependent vowel signs
-17B6 KHMER VOWEL SIGN AA
-17B7 KHMER VOWEL SIGN I
-17B8 KHMER VOWEL SIGN II
-17B9 KHMER VOWEL SIGN Y
-17BA KHMER VOWEL SIGN YY
-17BB KHMER VOWEL SIGN U
-17BC KHMER VOWEL SIGN UU
-17BD KHMER VOWEL SIGN UA
-17BE KHMER VOWEL SIGN OE
-17BF KHMER VOWEL SIGN YA
-17C0 KHMER VOWEL SIGN IE
-17C1 KHMER VOWEL SIGN E
-17C2 KHMER VOWEL SIGN AE
-17C3 KHMER VOWEL SIGN AI
-17C4 KHMER VOWEL SIGN OO
-17C5 KHMER VOWEL SIGN AU
-@ Various signs
-17C6 KHMER SIGN NIKAHIT
- = anusvara
- * final nasalization
- x (thai character nikhahit - 0E4D)
- x (myanmar sign anusvara - 1036)
-17C7 KHMER SIGN REAHMUK
- = visarga
- x (myanmar sign visarga - 1038)
-17C8 KHMER SIGN YUUKALEAPINTU
- * inserts a short inherent vowel with abrupt glottal stop
-@ Consonant shifters
-@+ These signs shift the base consonant between registers.
-17C9 KHMER SIGN MUUSIKATOAN
- * change second register to first
-17CA KHMER SIGN TRIISAP
- * change first register to second
-@ Various signs
-17CB KHMER SIGN BANTOC
- * shortens preceding vowel
-17CC KHMER SIGN ROBAT
- * corresponds to initial r in Indian loan words, but treated as a diacritic
-17CD KHMER SIGN TOANDAKHIAT
- * marks character not to be pronounced
-17CE KHMER SIGN KAKABAT
- * sign used with some exclamations
-17CF KHMER SIGN AHSDA
- * conjoined sign used in spelling of two single-consonant words
-17D0 KHMER SIGN SAMYOK SANNYA
- * used with 17A4 to indicate shortened inherent vowel
-17D1 KHMER SIGN VIRIAM
- * mostly obsolete
- * indicates the base character is part of the previous word
-17D2 KHMER SIGN COENG
- * functions as virama
- * shape shown is arbitrary and not rendered
-17D3 KHMER SIGN BATHAMASAT
- * very rare sign used in historic lunar dates
-17D4 KHMER SIGN KHAN
- * functions as full stop, ellipsis, abbreviation
- x (thai character paiyannoi - 0E2F)
- x (thai character angkhankhu - 0E5A)
- x (myanmar sign little section - 104A)
-17D5 KHMER SIGN BARIYOOSAN
- * end of section
- x (myanmar sign section - 104B)
-17D6 KHMER SIGN CAMNUC PII KUUH
- * functions as colon or semicolon
- x (division sign - 00F7)
- x (tibetan mark gter tsheg - 0F14)
-17D7 KHMER SIGN LEK TOO
- * repetition sign
-17D8 KHMER SIGN BEYYAL
- * et cetera
-17D9 KHMER SIGN PHNAEK MUAN
- * a list bullet
- x (thai character fongman - 0E4F)
-17DA KHMER SIGN KOOMUUT
- * indicates end of book or treatise
- x (thai character khomut - 0E5B)
-@ Currency symbol
-17DB KHMER CURRENCY SYMBOL RIEL
-@ Sign
-17DC KHMER SIGN AVAKRAHASANYA
- * rare, shows a deleted Sanskrit vowel, like an apostrophe
-@ Digits
-17E0 KHMER DIGIT ZERO
-17E1 KHMER DIGIT ONE
-17E2 KHMER DIGIT TWO
-17E3 KHMER DIGIT THREE
-17E4 KHMER DIGIT FOUR
-17E5 KHMER DIGIT FIVE
-17E6 KHMER DIGIT SIX
-17E7 KHMER DIGIT SEVEN
-17E8 KHMER DIGIT EIGHT
-17E9 KHMER DIGIT NINE
-@@ 1800 Mongolian 18AF
-@ Punctuation
-1800 MONGOLIAN BIRGA
- x (tibetan mark initial yig mgo mdun ma - 0F04)
-1801 MONGOLIAN ELLIPSIS
-1802 MONGOLIAN COMMA
-1803 MONGOLIAN FULL STOP
-1804 MONGOLIAN COLON
-1805 MONGOLIAN FOUR DOTS
- * marks the end of a chapter
-1806 MONGOLIAN TODO SOFT HYPHEN
-1807 MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
-1808 MONGOLIAN MANCHU COMMA
-1809 MONGOLIAN MANCHU FULL STOP
-180A MONGOLIAN NIRUGU
-@ Format controls
-180B MONGOLIAN FREE VARIATION SELECTOR ONE
-180C MONGOLIAN FREE VARIATION SELECTOR TWO
-180D MONGOLIAN FREE VARIATION SELECTOR THREE
-180E MONGOLIAN VOWEL SEPARATOR
-@ Digits
-1810 MONGOLIAN DIGIT ZERO
-1811 MONGOLIAN DIGIT ONE
-1812 MONGOLIAN DIGIT TWO
-1813 MONGOLIAN DIGIT THREE
-1814 MONGOLIAN DIGIT FOUR
-1815 MONGOLIAN DIGIT FIVE
-1816 MONGOLIAN DIGIT SIX
-1817 MONGOLIAN DIGIT SEVEN
-1818 MONGOLIAN DIGIT EIGHT
-1819 MONGOLIAN DIGIT NINE
-@ Basic letters
-1820 MONGOLIAN LETTER A
- x (cyrillic small letter a - 0430)
-1821 MONGOLIAN LETTER E
- x (cyrillic small letter e - 044D)
-1822 MONGOLIAN LETTER I
- x (cyrillic small letter i - 0438)
-1823 MONGOLIAN LETTER O
- x (cyrillic small letter o - 043E)
-1824 MONGOLIAN LETTER U
- x (cyrillic small letter u - 0443)
-1825 MONGOLIAN LETTER OE
- x (cyrillic small letter barred o - 04E9)
-1826 MONGOLIAN LETTER UE
- x (cyrillic small letter straight u - 04AF)
-1827 MONGOLIAN LETTER EE
-1828 MONGOLIAN LETTER NA
- x (cyrillic small letter en - 043D)
-1829 MONGOLIAN LETTER ANG
-182A MONGOLIAN LETTER BA
- x (cyrillic small letter be - 0431)
-182B MONGOLIAN LETTER PA
- x (cyrillic small letter pe - 043F)
-182C MONGOLIAN LETTER QA
- x (cyrillic small letter ha - 0445)
-182D MONGOLIAN LETTER GA
- x (cyrillic small letter ghe - 0433)
-182E MONGOLIAN LETTER MA
- x (cyrillic small letter em - 043C)
-182F MONGOLIAN LETTER LA
- x (cyrillic small letter el - 043B)
-1830 MONGOLIAN LETTER SA
- x (cyrillic small letter es - 0441)
-1831 MONGOLIAN LETTER SHA
- x (cyrillic small letter sha - 0448)
-1832 MONGOLIAN LETTER TA
- x (cyrillic small letter te - 0442)
-1833 MONGOLIAN LETTER DA
- x (cyrillic small letter de - 0434)
-1834 MONGOLIAN LETTER CHA
- x (cyrillic small letter che - 0447)
-1835 MONGOLIAN LETTER JA
- x (cyrillic small letter zhe - 0436)
-1836 MONGOLIAN LETTER YA
- x (cyrillic small letter short i - 0439)
-1837 MONGOLIAN LETTER RA
- x (cyrillic small letter er - 0440)
-1838 MONGOLIAN LETTER WA
- x (cyrillic small letter ve - 0432)
-1839 MONGOLIAN LETTER FA
- x (cyrillic small letter ef - 0444)
-183A MONGOLIAN LETTER KA
- x (cyrillic small letter ha - 0445)
-183B MONGOLIAN LETTER KHA
- x (cyrillic small letter ka - 043A)
-183C MONGOLIAN LETTER TSA
- x (cyrillic small letter tse - 0446)
-183D MONGOLIAN LETTER ZA
- x (cyrillic small letter ze - 0437)
-183E MONGOLIAN LETTER HAA
- x (cyrillic small letter ha - 0445)
-183F MONGOLIAN LETTER ZRA
- x (cyrillic small letter zhe - 0436)
-1840 MONGOLIAN LETTER LHA
-1841 MONGOLIAN LETTER ZHI
-1842 MONGOLIAN LETTER CHI
-@ Todo letters
-1843 MONGOLIAN LETTER TODO LONG VOWEL SIGN
-1844 MONGOLIAN LETTER TODO E
-1845 MONGOLIAN LETTER TODO I
-1846 MONGOLIAN LETTER TODO O
-1847 MONGOLIAN LETTER TODO U
-1848 MONGOLIAN LETTER TODO OE
-1849 MONGOLIAN LETTER TODO UE
-184A MONGOLIAN LETTER TODO ANG
-184B MONGOLIAN LETTER TODO BA
-184C MONGOLIAN LETTER TODO PA
-184D MONGOLIAN LETTER TODO QA
-184E MONGOLIAN LETTER TODO GA
-184F MONGOLIAN LETTER TODO MA
-1850 MONGOLIAN LETTER TODO TA
-1851 MONGOLIAN LETTER TODO DA
-1852 MONGOLIAN LETTER TODO CHA
-1853 MONGOLIAN LETTER TODO JA
-1854 MONGOLIAN LETTER TODO TSA
-1855 MONGOLIAN LETTER TODO YA
-1856 MONGOLIAN LETTER TODO WA
-1857 MONGOLIAN LETTER TODO KA
-1858 MONGOLIAN LETTER TODO GAA
-1859 MONGOLIAN LETTER TODO HAA
-185A MONGOLIAN LETTER TODO JIA
-185B MONGOLIAN LETTER TODO NIA
-185C MONGOLIAN LETTER TODO DZA
-@ Sibe letters
-185D MONGOLIAN LETTER SIBE E
-185E MONGOLIAN LETTER SIBE I
-185F MONGOLIAN LETTER SIBE IY
-1860 MONGOLIAN LETTER SIBE UE
-1861 MONGOLIAN LETTER SIBE U
-1862 MONGOLIAN LETTER SIBE ANG
-1863 MONGOLIAN LETTER SIBE KA
-1864 MONGOLIAN LETTER SIBE GA
-1865 MONGOLIAN LETTER SIBE HA
-1866 MONGOLIAN LETTER SIBE PA
-1867 MONGOLIAN LETTER SIBE SHA
-1868 MONGOLIAN LETTER SIBE TA
-1869 MONGOLIAN LETTER SIBE DA
-186A MONGOLIAN LETTER SIBE JA
-186B MONGOLIAN LETTER SIBE FA
-186C MONGOLIAN LETTER SIBE GAA
-186D MONGOLIAN LETTER SIBE HAA
-186E MONGOLIAN LETTER SIBE TSA
-186F MONGOLIAN LETTER SIBE ZA
-1870 MONGOLIAN LETTER SIBE RAA
-1871 MONGOLIAN LETTER SIBE CHA
-1872 MONGOLIAN LETTER SIBE ZHA
-@ Manchu letters
-1873 MONGOLIAN LETTER MANCHU I
-1874 MONGOLIAN LETTER MANCHU KA
-1875 MONGOLIAN LETTER MANCHU RA
-1876 MONGOLIAN LETTER MANCHU FA
-1877 MONGOLIAN LETTER MANCHU ZHA
-@ Extensions for Sanskrit and Tibetan
-1880 MONGOLIAN LETTER ALI GALI ANUSVARA ONE
-1881 MONGOLIAN LETTER ALI GALI VISARGA ONE
-1882 MONGOLIAN LETTER ALI GALI DAMARU
-1883 MONGOLIAN LETTER ALI GALI UBADAMA
-1884 MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
-1885 MONGOLIAN LETTER ALI GALI BALUDA
-1886 MONGOLIAN LETTER ALI GALI THREE BALUDA
-1887 MONGOLIAN LETTER ALI GALI A
-1888 MONGOLIAN LETTER ALI GALI I
-1889 MONGOLIAN LETTER ALI GALI KA
-188A MONGOLIAN LETTER ALI GALI NGA
-188B MONGOLIAN LETTER ALI GALI CA
-188C MONGOLIAN LETTER ALI GALI TTA
-188D MONGOLIAN LETTER ALI GALI TTHA
-188E MONGOLIAN LETTER ALI GALI DDA
-188F MONGOLIAN LETTER ALI GALI NNA
-1890 MONGOLIAN LETTER ALI GALI TA
-1891 MONGOLIAN LETTER ALI GALI DA
-1892 MONGOLIAN LETTER ALI GALI PA
-1893 MONGOLIAN LETTER ALI GALI PHA
-1894 MONGOLIAN LETTER ALI GALI SSA
-1895 MONGOLIAN LETTER ALI GALI ZHA
-1896 MONGOLIAN LETTER ALI GALI ZA
-1897 MONGOLIAN LETTER ALI GALI AH
-1898 MONGOLIAN LETTER TODO ALI GALI TA
-1899 MONGOLIAN LETTER TODO ALI GALI ZHA
-189A MONGOLIAN LETTER MANCHU ALI GALI GHA
-189B MONGOLIAN LETTER MANCHU ALI GALI NGA
-189C MONGOLIAN LETTER MANCHU ALI GALI CA
-189D MONGOLIAN LETTER MANCHU ALI GALI JHA
-189E MONGOLIAN LETTER MANCHU ALI GALI TTA
-189F MONGOLIAN LETTER MANCHU ALI GALI DDHA
-18A0 MONGOLIAN LETTER MANCHU ALI GALI TA
-18A1 MONGOLIAN LETTER MANCHU ALI GALI DHA
-18A2 MONGOLIAN LETTER MANCHU ALI GALI SSA
-18A3 MONGOLIAN LETTER MANCHU ALI GALI CYA
-18A4 MONGOLIAN LETTER MANCHU ALI GALI ZHA
-18A5 MONGOLIAN LETTER MANCHU ALI GALI ZA
-18A6 MONGOLIAN LETTER ALI GALI HALF U
-18A7 MONGOLIAN LETTER ALI GALI HALF YA
-18A8 MONGOLIAN LETTER MANCHU ALI GALI BHA
-18A9 MONGOLIAN LETTER ALI GALI DAGALGA
-@@ 1E00 Latin Extended Additional 1EFF
-@ Latin general use extensions
-1E00 LATIN CAPITAL LETTER A WITH RING BELOW
- : 0041 0325
-1E01 LATIN SMALL LETTER A WITH RING BELOW
- : 0061 0325
-1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE
- : 0042 0307
-1E03 LATIN SMALL LETTER B WITH DOT ABOVE
- * Irish Gaelic (old orthography)
- : 0062 0307
-1E04 LATIN CAPITAL LETTER B WITH DOT BELOW
- : 0042 0323
-1E05 LATIN SMALL LETTER B WITH DOT BELOW
- : 0062 0323
-1E06 LATIN CAPITAL LETTER B WITH LINE BELOW
- : 0042 0331
-1E07 LATIN SMALL LETTER B WITH LINE BELOW
- : 0062 0331
-1E08 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
- : 00C7 0301
-1E09 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
- : 00E7 0301
-1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE
- : 0044 0307
-1E0B LATIN SMALL LETTER D WITH DOT ABOVE
- * Irish Gaelic (old orthography)
- : 0064 0307
-1E0C LATIN CAPITAL LETTER D WITH DOT BELOW
- : 0044 0323
-1E0D LATIN SMALL LETTER D WITH DOT BELOW
- * Indic transliteration
- : 0064 0323
-1E0E LATIN CAPITAL LETTER D WITH LINE BELOW
- : 0044 0331
-1E0F LATIN SMALL LETTER D WITH LINE BELOW
- : 0064 0331
-1E10 LATIN CAPITAL LETTER D WITH CEDILLA
- : 0044 0327
-1E11 LATIN SMALL LETTER D WITH CEDILLA
- * Livonian
- : 0064 0327
-1E12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
- : 0044 032D
-1E13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
- : 0064 032D
-1E14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
- : 0112 0300
-1E15 LATIN SMALL LETTER E WITH MACRON AND GRAVE
- : 0113 0300
-1E16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
- : 0112 0301
-1E17 LATIN SMALL LETTER E WITH MACRON AND ACUTE
- : 0113 0301
-1E18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
- : 0045 032D
-1E19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
- : 0065 032D
-1E1A LATIN CAPITAL LETTER E WITH TILDE BELOW
- : 0045 0330
-1E1B LATIN SMALL LETTER E WITH TILDE BELOW
- : 0065 0330
-1E1C LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
- : 0228 0306
-1E1D LATIN SMALL LETTER E WITH CEDILLA AND BREVE
- : 0229 0306
-1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE
- : 0046 0307
-1E1F LATIN SMALL LETTER F WITH DOT ABOVE
- * Irish Gaelic (old orthography)
- : 0066 0307
-1E20 LATIN CAPITAL LETTER G WITH MACRON
- : 0047 0304
-1E21 LATIN SMALL LETTER G WITH MACRON
- : 0067 0304
-1E22 LATIN CAPITAL LETTER H WITH DOT ABOVE
- : 0048 0307
-1E23 LATIN SMALL LETTER H WITH DOT ABOVE
- : 0068 0307
-1E24 LATIN CAPITAL LETTER H WITH DOT BELOW
- : 0048 0323
-1E25 LATIN SMALL LETTER H WITH DOT BELOW
- * Indic transliteration
- : 0068 0323
-1E26 LATIN CAPITAL LETTER H WITH DIAERESIS
- : 0048 0308
-1E27 LATIN SMALL LETTER H WITH DIAERESIS
- : 0068 0308
-1E28 LATIN CAPITAL LETTER H WITH CEDILLA
- : 0048 0327
-1E29 LATIN SMALL LETTER H WITH CEDILLA
- : 0068 0327
-1E2A LATIN CAPITAL LETTER H WITH BREVE BELOW
- : 0048 032E
-1E2B LATIN SMALL LETTER H WITH BREVE BELOW
- * Semitic transliteration
- : 0068 032E
-1E2C LATIN CAPITAL LETTER I WITH TILDE BELOW
- : 0049 0330
-1E2D LATIN SMALL LETTER I WITH TILDE BELOW
- : 0069 0330
-1E2E LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
- : 00CF 0301
-1E2F LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
- : 00EF 0301
-1E30 LATIN CAPITAL LETTER K WITH ACUTE
- : 004B 0301
-1E31 LATIN SMALL LETTER K WITH ACUTE
- : 006B 0301
-1E32 LATIN CAPITAL LETTER K WITH DOT BELOW
- : 004B 0323
-1E33 LATIN SMALL LETTER K WITH DOT BELOW
- : 006B 0323
-1E34 LATIN CAPITAL LETTER K WITH LINE BELOW
- : 004B 0331
-1E35 LATIN SMALL LETTER K WITH LINE BELOW
- : 006B 0331
-1E36 LATIN CAPITAL LETTER L WITH DOT BELOW
- : 004C 0323
-1E37 LATIN SMALL LETTER L WITH DOT BELOW
- * Indic transliteration
- : 006C 0323
-1E38 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
- : 1E36 0304
-1E39 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
- * Indic transliteration
- : 1E37 0304
-1E3A LATIN CAPITAL LETTER L WITH LINE BELOW
- : 004C 0331
-1E3B LATIN SMALL LETTER L WITH LINE BELOW
- * Indic transliteration
- : 006C 0331
-1E3C LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
- : 004C 032D
-1E3D LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
- : 006C 032D
-1E3E LATIN CAPITAL LETTER M WITH ACUTE
- : 004D 0301
-1E3F LATIN SMALL LETTER M WITH ACUTE
- : 006D 0301
-1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE
- : 004D 0307
-1E41 LATIN SMALL LETTER M WITH DOT ABOVE
- * Irish Gaelic (old orthography)
- : 006D 0307
-1E42 LATIN CAPITAL LETTER M WITH DOT BELOW
- : 004D 0323
-1E43 LATIN SMALL LETTER M WITH DOT BELOW
- * Indic transliteration
- : 006D 0323
-1E44 LATIN CAPITAL LETTER N WITH DOT ABOVE
- : 004E 0307
-1E45 LATIN SMALL LETTER N WITH DOT ABOVE
- * Indic transliteration
- : 006E 0307
-1E46 LATIN CAPITAL LETTER N WITH DOT BELOW
- : 004E 0323
-1E47 LATIN SMALL LETTER N WITH DOT BELOW
- * Indic transliteration
- : 006E 0323
-1E48 LATIN CAPITAL LETTER N WITH LINE BELOW
- : 004E 0331
-1E49 LATIN SMALL LETTER N WITH LINE BELOW
- * Indic transliteration
- : 006E 0331
-1E4A LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
- : 004E 032D
-1E4B LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
- : 006E 032D
-1E4C LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
- : 00D5 0301
-1E4D LATIN SMALL LETTER O WITH TILDE AND ACUTE
- : 00F5 0301
-1E4E LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
- : 00D5 0308
-1E4F LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
- : 00F5 0308
-1E50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
- : 014C 0300
-1E51 LATIN SMALL LETTER O WITH MACRON AND GRAVE
- : 014D 0300
-1E52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
- : 014C 0301
-1E53 LATIN SMALL LETTER O WITH MACRON AND ACUTE
- : 014D 0301
-1E54 LATIN CAPITAL LETTER P WITH ACUTE
- : 0050 0301
-1E55 LATIN SMALL LETTER P WITH ACUTE
- : 0070 0301
-1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE
- : 0050 0307
-1E57 LATIN SMALL LETTER P WITH DOT ABOVE
- * Irish Gaelic (old orthography)
- : 0070 0307
-1E58 LATIN CAPITAL LETTER R WITH DOT ABOVE
- : 0052 0307
-1E59 LATIN SMALL LETTER R WITH DOT ABOVE
- : 0072 0307
-1E5A LATIN CAPITAL LETTER R WITH DOT BELOW
- : 0052 0323
-1E5B LATIN SMALL LETTER R WITH DOT BELOW
- * Indic transliteration
- : 0072 0323
-1E5C LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
- : 1E5A 0304
-1E5D LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
- * Indic transliteration
- : 1E5B 0304
-1E5E LATIN CAPITAL LETTER R WITH LINE BELOW
- : 0052 0331
-1E5F LATIN SMALL LETTER R WITH LINE BELOW
- * Indic transliteration
- : 0072 0331
-1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE
- : 0053 0307
-1E61 LATIN SMALL LETTER S WITH DOT ABOVE
- * Irish Gaelic (old orthography)
- : 0073 0307
-1E62 LATIN CAPITAL LETTER S WITH DOT BELOW
- : 0053 0323
-1E63 LATIN SMALL LETTER S WITH DOT BELOW
- * Indic transliteration
- : 0073 0323
-1E64 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
- : 015A 0307
-1E65 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
- : 015B 0307
-1E66 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
- : 0160 0307
-1E67 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
- : 0161 0307
-1E68 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
- : 1E62 0307
-1E69 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
- : 1E63 0307
-1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE
- : 0054 0307
-1E6B LATIN SMALL LETTER T WITH DOT ABOVE
- * Irish Gaelic (old orthography)
- : 0074 0307
-1E6C LATIN CAPITAL LETTER T WITH DOT BELOW
- : 0054 0323
-1E6D LATIN SMALL LETTER T WITH DOT BELOW
- * Indic transliteration
- : 0074 0323
-1E6E LATIN CAPITAL LETTER T WITH LINE BELOW
- : 0054 0331
-1E6F LATIN SMALL LETTER T WITH LINE BELOW
- * Semitic transliteration
- : 0074 0331
-1E70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
- : 0054 032D
-1E71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
- : 0074 032D
-1E72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
- : 0055 0324
-1E73 LATIN SMALL LETTER U WITH DIAERESIS BELOW
- : 0075 0324
-1E74 LATIN CAPITAL LETTER U WITH TILDE BELOW
- : 0055 0330
-1E75 LATIN SMALL LETTER U WITH TILDE BELOW
- : 0075 0330
-1E76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
- : 0055 032D
-1E77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
- : 0075 032D
-1E78 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
- : 0168 0301
-1E79 LATIN SMALL LETTER U WITH TILDE AND ACUTE
- : 0169 0301
-1E7A LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
- : 016A 0308
-1E7B LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
- : 016B 0308
-1E7C LATIN CAPITAL LETTER V WITH TILDE
- : 0056 0303
-1E7D LATIN SMALL LETTER V WITH TILDE
- : 0076 0303
-1E7E LATIN CAPITAL LETTER V WITH DOT BELOW
- : 0056 0323
-1E7F LATIN SMALL LETTER V WITH DOT BELOW
- : 0076 0323
-1E80 LATIN CAPITAL LETTER W WITH GRAVE
- : 0057 0300
-1E81 LATIN SMALL LETTER W WITH GRAVE
- * Welsh
- : 0077 0300
-1E82 LATIN CAPITAL LETTER W WITH ACUTE
- : 0057 0301
-1E83 LATIN SMALL LETTER W WITH ACUTE
- * Welsh
- : 0077 0301
-1E84 LATIN CAPITAL LETTER W WITH DIAERESIS
- : 0057 0308
-1E85 LATIN SMALL LETTER W WITH DIAERESIS
- * Welsh
- : 0077 0308
-1E86 LATIN CAPITAL LETTER W WITH DOT ABOVE
- : 0057 0307
-1E87 LATIN SMALL LETTER W WITH DOT ABOVE
- : 0077 0307
-1E88 LATIN CAPITAL LETTER W WITH DOT BELOW
- : 0057 0323
-1E89 LATIN SMALL LETTER W WITH DOT BELOW
- : 0077 0323
-1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE
- : 0058 0307
-1E8B LATIN SMALL LETTER X WITH DOT ABOVE
- : 0078 0307
-1E8C LATIN CAPITAL LETTER X WITH DIAERESIS
- : 0058 0308
-1E8D LATIN SMALL LETTER X WITH DIAERESIS
- : 0078 0308
-1E8E LATIN CAPITAL LETTER Y WITH DOT ABOVE
- : 0059 0307
-1E8F LATIN SMALL LETTER Y WITH DOT ABOVE
- : 0079 0307
-1E90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
- : 005A 0302
-1E91 LATIN SMALL LETTER Z WITH CIRCUMFLEX
- : 007A 0302
-1E92 LATIN CAPITAL LETTER Z WITH DOT BELOW
- : 005A 0323
-1E93 LATIN SMALL LETTER Z WITH DOT BELOW
- * Indic transliteration
- : 007A 0323
-1E94 LATIN CAPITAL LETTER Z WITH LINE BELOW
- : 005A 0331
-1E95 LATIN SMALL LETTER Z WITH LINE BELOW
- * Semitic transliteration
- : 007A 0331
-1E96 LATIN SMALL LETTER H WITH LINE BELOW
- * Semitic transliteration
- : 0068 0331
-1E97 LATIN SMALL LETTER T WITH DIAERESIS
- : 0074 0308
-1E98 LATIN SMALL LETTER W WITH RING ABOVE
- : 0077 030A
-1E99 LATIN SMALL LETTER Y WITH RING ABOVE
- : 0079 030A
-1E9A LATIN SMALL LETTER A WITH RIGHT HALF RING
- # 0061 02BE
-1E9B LATIN SMALL LETTER LONG S WITH DOT ABOVE
- * in current use in Gaelic types (as glyph variant of 1E61)
- : 017F 0307
-@ Latin extensions for Vietnamese
-1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW
- : 0041 0323
-1EA1 LATIN SMALL LETTER A WITH DOT BELOW
- : 0061 0323
-1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE
- : 0041 0309
-1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE
- : 0061 0309
-1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
- : 00C2 0301
-1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
- : 00E2 0301
-1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
- : 00C2 0300
-1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
- : 00E2 0300
-1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
- : 00C2 0309
-1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
- : 00E2 0309
-1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
- : 00C2 0303
-1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
- : 00E2 0303
-1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
- : 1EA0 0302
-1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
- : 1EA1 0302
-1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
- : 0102 0301
-1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE
- : 0103 0301
-1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
- : 0102 0300
-1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE
- : 0103 0300
-1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
- : 0102 0309
-1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
- : 0103 0309
-1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE
- : 0102 0303
-1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE
- : 0103 0303
-1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
- : 1EA0 0306
-1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
- : 1EA1 0306
-1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW
- : 0045 0323
-1EB9 LATIN SMALL LETTER E WITH DOT BELOW
- : 0065 0323
-1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE
- : 0045 0309
-1EBB LATIN SMALL LETTER E WITH HOOK ABOVE
- : 0065 0309
-1EBC LATIN CAPITAL LETTER E WITH TILDE
- : 0045 0303
-1EBD LATIN SMALL LETTER E WITH TILDE
- : 0065 0303
-1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
- : 00CA 0301
-1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
- : 00EA 0301
-1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
- : 00CA 0300
-1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
- : 00EA 0300
-1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
- : 00CA 0309
-1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
- : 00EA 0309
-1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
- : 00CA 0303
-1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
- : 00EA 0303
-1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
- : 1EB8 0302
-1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
- : 1EB9 0302
-1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE
- : 0049 0309
-1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE
- : 0069 0309
-1ECA LATIN CAPITAL LETTER I WITH DOT BELOW
- : 0049 0323
-1ECB LATIN SMALL LETTER I WITH DOT BELOW
- : 0069 0323
-1ECC LATIN CAPITAL LETTER O WITH DOT BELOW
- : 004F 0323
-1ECD LATIN SMALL LETTER O WITH DOT BELOW
- : 006F 0323
-1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE
- : 004F 0309
-1ECF LATIN SMALL LETTER O WITH HOOK ABOVE
- : 006F 0309
-1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
- : 00D4 0301
-1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
- : 00F4 0301
-1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
- : 00D4 0300
-1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
- : 00F4 0300
-1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
- : 00D4 0309
-1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
- : 00F4 0309
-1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
- : 00D4 0303
-1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
- : 00F4 0303
-1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
- : 1ECC 0302
-1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
- : 1ECD 0302
-1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE
- : 01A0 0301
-1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE
- : 01A1 0301
-1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE
- : 01A0 0300
-1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE
- : 01A1 0300
-1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
- : 01A0 0309
-1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
- : 01A1 0309
-1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE
- : 01A0 0303
-1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE
- : 01A1 0303
-1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
- : 01A0 0323
-1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW
- : 01A1 0323
-1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW
- : 0055 0323
-1EE5 LATIN SMALL LETTER U WITH DOT BELOW
- : 0075 0323
-1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE
- : 0055 0309
-1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE
- : 0075 0309
-1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE
- : 01AF 0301
-1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE
- : 01B0 0301
-1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE
- : 01AF 0300
-1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE
- : 01B0 0300
-1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
- : 01AF 0309
-1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
- : 01B0 0309
-1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE
- : 01AF 0303
-1EEF LATIN SMALL LETTER U WITH HORN AND TILDE
- : 01B0 0303
-1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
- : 01AF 0323
-1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW
- : 01B0 0323
-1EF2 LATIN CAPITAL LETTER Y WITH GRAVE
- : 0059 0300
-1EF3 LATIN SMALL LETTER Y WITH GRAVE
- * Welsh
- : 0079 0300
-1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW
- : 0059 0323
-1EF5 LATIN SMALL LETTER Y WITH DOT BELOW
- : 0079 0323
-1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE
- : 0059 0309
-1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE
- : 0079 0309
-1EF8 LATIN CAPITAL LETTER Y WITH TILDE
- : 0059 0303
-1EF9 LATIN SMALL LETTER Y WITH TILDE
- : 0079 0303
-@@ 1F00 Greek Extended 1FFF
-@ Precomposed polytonic Greek
-1F00 GREEK SMALL LETTER ALPHA WITH PSILI
- : 03B1 0313
-1F01 GREEK SMALL LETTER ALPHA WITH DASIA
- : 03B1 0314
-1F02 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
- : 1F00 0300
-1F03 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
- : 1F01 0300
-1F04 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
- : 1F00 0301
-1F05 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
- : 1F01 0301
-1F06 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
- : 1F00 0342
-1F07 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
- : 1F01 0342
-1F08 GREEK CAPITAL LETTER ALPHA WITH PSILI
- : 0391 0313
-1F09 GREEK CAPITAL LETTER ALPHA WITH DASIA
- : 0391 0314
-1F0A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
- : 1F08 0300
-1F0B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
- : 1F09 0300
-1F0C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
- : 1F08 0301
-1F0D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
- : 1F09 0301
-1F0E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
- : 1F08 0342
-1F0F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
- : 1F09 0342
-1F10 GREEK SMALL LETTER EPSILON WITH PSILI
- : 03B5 0313
-1F11 GREEK SMALL LETTER EPSILON WITH DASIA
- : 03B5 0314
-1F12 GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
- : 1F10 0300
-1F13 GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
- : 1F11 0300
-1F14 GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
- : 1F10 0301
-1F15 GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
- : 1F11 0301
-1F18 GREEK CAPITAL LETTER EPSILON WITH PSILI
- : 0395 0313
-1F19 GREEK CAPITAL LETTER EPSILON WITH DASIA
- : 0395 0314
-1F1A GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
- : 1F18 0300
-1F1B GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
- : 1F19 0300
-1F1C GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
- : 1F18 0301
-1F1D GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
- : 1F19 0301
-1F20 GREEK SMALL LETTER ETA WITH PSILI
- : 03B7 0313
-1F21 GREEK SMALL LETTER ETA WITH DASIA
- : 03B7 0314
-1F22 GREEK SMALL LETTER ETA WITH PSILI AND VARIA
- : 1F20 0300
-1F23 GREEK SMALL LETTER ETA WITH DASIA AND VARIA
- : 1F21 0300
-1F24 GREEK SMALL LETTER ETA WITH PSILI AND OXIA
- : 1F20 0301
-1F25 GREEK SMALL LETTER ETA WITH DASIA AND OXIA
- : 1F21 0301
-1F26 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
- : 1F20 0342
-1F27 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
- : 1F21 0342
-1F28 GREEK CAPITAL LETTER ETA WITH PSILI
- : 0397 0313
-1F29 GREEK CAPITAL LETTER ETA WITH DASIA
- : 0397 0314
-1F2A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
- : 1F28 0300
-1F2B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
- : 1F29 0300
-1F2C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
- : 1F28 0301
-1F2D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
- : 1F29 0301
-1F2E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
- : 1F28 0342
-1F2F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
- : 1F29 0342
-1F30 GREEK SMALL LETTER IOTA WITH PSILI
- : 03B9 0313
-1F31 GREEK SMALL LETTER IOTA WITH DASIA
- : 03B9 0314
-1F32 GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
- : 1F30 0300
-1F33 GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
- : 1F31 0300
-1F34 GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
- : 1F30 0301
-1F35 GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
- : 1F31 0301
-1F36 GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
- : 1F30 0342
-1F37 GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
- : 1F31 0342
-1F38 GREEK CAPITAL LETTER IOTA WITH PSILI
- : 0399 0313
-1F39 GREEK CAPITAL LETTER IOTA WITH DASIA
- : 0399 0314
-1F3A GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
- : 1F38 0300
-1F3B GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
- : 1F39 0300
-1F3C GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
- : 1F38 0301
-1F3D GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
- : 1F39 0301
-1F3E GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
- : 1F38 0342
-1F3F GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
- : 1F39 0342
-1F40 GREEK SMALL LETTER OMICRON WITH PSILI
- : 03BF 0313
-1F41 GREEK SMALL LETTER OMICRON WITH DASIA
- : 03BF 0314
-1F42 GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
- : 1F40 0300
-1F43 GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
- : 1F41 0300
-1F44 GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
- : 1F40 0301
-1F45 GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
- : 1F41 0301
-1F48 GREEK CAPITAL LETTER OMICRON WITH PSILI
- : 039F 0313
-1F49 GREEK CAPITAL LETTER OMICRON WITH DASIA
- : 039F 0314
-1F4A GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
- : 1F48 0300
-1F4B GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
- : 1F49 0300
-1F4C GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
- : 1F48 0301
-1F4D GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
- : 1F49 0301
-1F50 GREEK SMALL LETTER UPSILON WITH PSILI
- : 03C5 0313
-1F51 GREEK SMALL LETTER UPSILON WITH DASIA
- : 03C5 0314
-1F52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
- : 1F50 0300
-1F53 GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
- : 1F51 0300
-1F54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
- : 1F50 0301
-1F55 GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
- : 1F51 0301
-1F56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
- : 1F50 0342
-1F57 GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
- : 1F51 0342
-1F59 GREEK CAPITAL LETTER UPSILON WITH DASIA
- : 03A5 0314
-1F5B GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
- : 1F59 0300
-1F5D GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
- : 1F59 0301
-1F5F GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
- : 1F59 0342
-1F60 GREEK SMALL LETTER OMEGA WITH PSILI
- : 03C9 0313
-1F61 GREEK SMALL LETTER OMEGA WITH DASIA
- : 03C9 0314
-1F62 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
- : 1F60 0300
-1F63 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
- : 1F61 0300
-1F64 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
- : 1F60 0301
-1F65 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
- : 1F61 0301
-1F66 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
- : 1F60 0342
-1F67 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
- : 1F61 0342
-1F68 GREEK CAPITAL LETTER OMEGA WITH PSILI
- : 03A9 0313
-1F69 GREEK CAPITAL LETTER OMEGA WITH DASIA
- : 03A9 0314
-1F6A GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
- : 1F68 0300
-1F6B GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
- : 1F69 0300
-1F6C GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
- : 1F68 0301
-1F6D GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
- : 1F69 0301
-1F6E GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
- : 1F68 0342
-1F6F GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
- : 1F69 0342
-1F70 GREEK SMALL LETTER ALPHA WITH VARIA
- : 03B1 0300
-1F71 GREEK SMALL LETTER ALPHA WITH OXIA
- : 03AC greek small letter alpha with tonos
-1F72 GREEK SMALL LETTER EPSILON WITH VARIA
- : 03B5 0300
-1F73 GREEK SMALL LETTER EPSILON WITH OXIA
- : 03AD greek small letter epsilon with tonos
-1F74 GREEK SMALL LETTER ETA WITH VARIA
- : 03B7 0300
-1F75 GREEK SMALL LETTER ETA WITH OXIA
- : 03AE greek small letter eta with tonos
-1F76 GREEK SMALL LETTER IOTA WITH VARIA
- : 03B9 0300
-1F77 GREEK SMALL LETTER IOTA WITH OXIA
- : 03AF greek small letter iota with tonos
-1F78 GREEK SMALL LETTER OMICRON WITH VARIA
- : 03BF 0300
-1F79 GREEK SMALL LETTER OMICRON WITH OXIA
- : 03CC greek small letter omicron with tonos
-1F7A GREEK SMALL LETTER UPSILON WITH VARIA
- : 03C5 0300
-1F7B GREEK SMALL LETTER UPSILON WITH OXIA
- : 03CD greek small letter upsilon with tonos
-1F7C GREEK SMALL LETTER OMEGA WITH VARIA
- : 03C9 0300
-1F7D GREEK SMALL LETTER OMEGA WITH OXIA
- : 03CE greek small letter omega with tonos
-1F80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
- : 1F00 0345
-1F81 GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
- : 1F01 0345
-1F82 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
- : 1F02 0345
-1F83 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
- : 1F03 0345
-1F84 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
- : 1F04 0345
-1F85 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
- : 1F05 0345
-1F86 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
- : 1F06 0345
-1F87 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
- : 1F07 0345
-1F88 GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
- : 1F08 0345
-1F89 GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
- : 1F09 0345
-1F8A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
- : 1F0A 0345
-1F8B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
- : 1F0B 0345
-1F8C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
- : 1F0C 0345
-1F8D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
- : 1F0D 0345
-1F8E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
- : 1F0E 0345
-1F8F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
- : 1F0F 0345
-1F90 GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
- : 1F20 0345
-1F91 GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
- : 1F21 0345
-1F92 GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
- : 1F22 0345
-1F93 GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
- : 1F23 0345
-1F94 GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
- : 1F24 0345
-1F95 GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
- : 1F25 0345
-1F96 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
- : 1F26 0345
-1F97 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
- : 1F27 0345
-1F98 GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
- : 1F28 0345
-1F99 GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
- : 1F29 0345
-1F9A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
- : 1F2A 0345
-1F9B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
- : 1F2B 0345
-1F9C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
- : 1F2C 0345
-1F9D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
- : 1F2D 0345
-1F9E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
- : 1F2E 0345
-1F9F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
- : 1F2F 0345
-1FA0 GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
- : 1F60 0345
-1FA1 GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
- : 1F61 0345
-1FA2 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
- : 1F62 0345
-1FA3 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
- : 1F63 0345
-1FA4 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
- : 1F64 0345
-1FA5 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
- : 1F65 0345
-1FA6 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
- : 1F66 0345
-1FA7 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
- : 1F67 0345
-1FA8 GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
- : 1F68 0345
-1FA9 GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
- : 1F69 0345
-1FAA GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
- : 1F6A 0345
-1FAB GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
- : 1F6B 0345
-1FAC GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
- : 1F6C 0345
-1FAD GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
- : 1F6D 0345
-1FAE GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
- : 1F6E 0345
-1FAF GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
- : 1F6F 0345
-1FB0 GREEK SMALL LETTER ALPHA WITH VRACHY
- : 03B1 0306
-1FB1 GREEK SMALL LETTER ALPHA WITH MACRON
- : 03B1 0304
-1FB2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
- : 1F70 0345
-1FB3 GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
- : 03B1 0345
-1FB4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
- : 03AC 0345
-1FB6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI
- : 03B1 0342
-1FB7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
- : 1FB6 0345
-1FB8 GREEK CAPITAL LETTER ALPHA WITH VRACHY
- : 0391 0306
-1FB9 GREEK CAPITAL LETTER ALPHA WITH MACRON
- : 0391 0304
-1FBA GREEK CAPITAL LETTER ALPHA WITH VARIA
- : 0391 0300
-1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA
- : 0386 greek capital letter alpha with tonos
-1FBC GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
- : 0391 0345
-1FBD GREEK KORONIS
- # 0020 0313
-1FBE GREEK PROSGEGRAMMENI
- : 03B9 greek small letter iota
-1FBF GREEK PSILI
- # 0020 0313
-1FC0 GREEK PERISPOMENI
- # 0020 0342
-1FC1 GREEK DIALYTIKA AND PERISPOMENI
- : 00A8 0342
-1FC2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
- : 1F74 0345
-1FC3 GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
- : 03B7 0345
-1FC4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
- : 03AE 0345
-1FC6 GREEK SMALL LETTER ETA WITH PERISPOMENI
- : 03B7 0342
-1FC7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
- : 1FC6 0345
-1FC8 GREEK CAPITAL LETTER EPSILON WITH VARIA
- : 0395 0300
-1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA
- : 0388 greek capital letter epsilon with tonos
-1FCA GREEK CAPITAL LETTER ETA WITH VARIA
- : 0397 0300
-1FCB GREEK CAPITAL LETTER ETA WITH OXIA
- : 0389 greek capital letter eta with tonos
-1FCC GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
- : 0397 0345
-1FCD GREEK PSILI AND VARIA
- : 1FBF 0300
-1FCE GREEK PSILI AND OXIA
- : 1FBF 0301
-1FCF GREEK PSILI AND PERISPOMENI
- : 1FBF 0342
-1FD0 GREEK SMALL LETTER IOTA WITH VRACHY
- : 03B9 0306
-1FD1 GREEK SMALL LETTER IOTA WITH MACRON
- : 03B9 0304
-1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
- : 03CA 0300
-1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
- : 0390 greek small letter iota with dialytika and tonos
-1FD6 GREEK SMALL LETTER IOTA WITH PERISPOMENI
- : 03B9 0342
-1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
- : 03CA 0342
-1FD8 GREEK CAPITAL LETTER IOTA WITH VRACHY
- : 0399 0306
-1FD9 GREEK CAPITAL LETTER IOTA WITH MACRON
- : 0399 0304
-1FDA GREEK CAPITAL LETTER IOTA WITH VARIA
- : 0399 0300
-1FDB GREEK CAPITAL LETTER IOTA WITH OXIA
- : 038A greek capital letter iota with tonos
-1FDD GREEK DASIA AND VARIA
- : 1FFE 0300
-1FDE GREEK DASIA AND OXIA
- : 1FFE 0301
-1FDF GREEK DASIA AND PERISPOMENI
- : 1FFE 0342
-1FE0 GREEK SMALL LETTER UPSILON WITH VRACHY
- : 03C5 0306
-1FE1 GREEK SMALL LETTER UPSILON WITH MACRON
- : 03C5 0304
-1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
- : 03CB 0300
-1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
- : 03B0 greek small letter upsilon with dialytika and tonos
-1FE4 GREEK SMALL LETTER RHO WITH PSILI
- : 03C1 0313
-1FE5 GREEK SMALL LETTER RHO WITH DASIA
- : 03C1 0314
-1FE6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI
- : 03C5 0342
-1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
- : 03CB 0342
-1FE8 GREEK CAPITAL LETTER UPSILON WITH VRACHY
- : 03A5 0306
-1FE9 GREEK CAPITAL LETTER UPSILON WITH MACRON
- : 03A5 0304
-1FEA GREEK CAPITAL LETTER UPSILON WITH VARIA
- : 03A5 0300
-1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA
- : 038E greek capital letter upsilon with tonos
-1FEC GREEK CAPITAL LETTER RHO WITH DASIA
- : 03A1 0314
-1FED GREEK DIALYTIKA AND VARIA
- : 00A8 0300
-1FEE GREEK DIALYTIKA AND OXIA
- : 0385 greek dialytika tonos
-1FEF GREEK VARIA
- : 0060 grave accent
-1FF2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
- : 1F7C 0345
-1FF3 GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
- : 03C9 0345
-1FF4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
- : 03CE 0345
-1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI
- : 03C9 0342
-1FF7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
- : 1FF6 0345
-1FF8 GREEK CAPITAL LETTER OMICRON WITH VARIA
- : 039F 0300
-1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA
- : 038C greek capital letter omicron with tonos
-1FFA GREEK CAPITAL LETTER OMEGA WITH VARIA
- : 03A9 0300
-1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA
- : 038F greek capital letter omega with tonos
-1FFC GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
- : 03A9 0345
-1FFD GREEK OXIA
- : 00B4 acute accent
-1FFE GREEK DASIA
- # 0020 0314
-@@ 2000 General Punctuation 206F
-@ Spaces
-2000 EN QUAD
- : 2002 en space
-2001 EM QUAD
- = mutton quad
- : 2003 em space
-2002 EN SPACE
- = nut
- * half an em
- # 0020 space
-2003 EM SPACE
- = mutton
- * nominally, a space equal to the type size in points
- * may scale by the condensation factor of a font
- # 0020 space
-2004 THREE-PER-EM SPACE
- = thick space
- # 0020 space
-2005 FOUR-PER-EM SPACE
- = mid space
- # 0020 space
-2006 SIX-PER-EM SPACE
- * in computer typography sometimes equated to thin space
- # 0020 space
-2007 FIGURE SPACE
- * space equal to tabular width of a font
- * this is equivalent to the digit width of fonts with fixed-width digits
- # <noBreak> 0020
-2008 PUNCTUATION SPACE
- * space equal to narrow punctuation of a font
- # 0020 space
-2009 THIN SPACE
- * a fifth of an em (or sometimes a sixth)
- # 0020 space
-200A HAIR SPACE
- * thinner than a thin space
- * in traditional typography, the thinnest space available
- # 0020 space
-200B ZERO WIDTH SPACE
- * nominally zero width, but may expand in justification
-@ Formatting characters
-200C ZERO WIDTH NON-JOINER
- = ZWNJ
-200D ZERO WIDTH JOINER
- = ZWJ
-200E LEFT-TO-RIGHT MARK
- = LRM
-200F RIGHT-TO-LEFT MARK
- = RLM
-@ Dashes
-2010 HYPHEN
- x (hyphen-minus - 002D)
-2011 NON-BREAKING HYPHEN
- x (hyphen-minus - 002D)
- # <noBreak> 2010
-2012 FIGURE DASH
-2013 EN DASH
-2014 EM DASH
- * may be used in pairs to offset parenthetical text
- x (katakana-hiragana prolonged sound mark - 30FC)
-2015 HORIZONTAL BAR
- = QUOTATION DASH
- * long dash introducing quoted text
-@ General punctuation
-2016 DOUBLE VERTICAL LINE
- * used in pairs to indicate norm of a matrix
- x (parallel to - 2225)
-2017 DOUBLE LOW LINE
- * this is a spacing character
- x (low line - 005F)
- x (combining double low line - 0333)
- # 0020 0333
-2018 LEFT SINGLE QUOTATION MARK
- = SINGLE TURNED COMMA QUOTATION MARK
- * this is the preferred glyph (as opposed to 201B)
- x (apostrophe - 0027)
- x (modifier letter turned comma - 02BB)
- x (heavy single turned comma quotation mark ornament - 275B)
-2019 RIGHT SINGLE QUOTATION MARK
- = SINGLE COMMA QUOTATION MARK
- * this is the preferred character to use for apostrophe
- x (apostrophe - 0027)
- x (modifier letter apostrophe - 02BC)
- x (heavy single comma quotation mark ornament - 275C)
-201A SINGLE LOW-9 QUOTATION MARK
- = LOW SINGLE COMMA QUOTATION MARK
- * used as opening single quotation mark in some languages
-201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
- = SINGLE REVERSED COMMA QUOTATION MARK
- * glyph variant of 2018
- x (modifier letter reversed comma - 02BD)
-201C LEFT DOUBLE QUOTATION MARK
- = DOUBLE TURNED COMMA QUOTATION MARK
- * this is the preferred glyph (as opposed to 201F)
- x (quotation mark - 0022)
- x (heavy double turned comma quotation mark ornament - 275D)
- x (reversed double prime quotation mark - 301D)
-201D RIGHT DOUBLE QUOTATION MARK
- = DOUBLE COMMA QUOTATION MARK
- x (quotation mark - 0022)
- x (double prime - 2033)
- x (heavy double comma quotation mark ornament - 275E)
- x (double prime quotation mark - 301E)
-201E DOUBLE LOW-9 QUOTATION MARK
- = LOW DOUBLE COMMA QUOTATION MARK
- * used as opening double quotation mark in some languages
- x (low double prime quotation mark - 301F)
-201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- = DOUBLE REVERSED COMMA QUOTATION MARK
- * glyph variant of 201C
-2020 DAGGER
- = obelisk, obelus, long cross
-2021 DOUBLE DAGGER
- = diesis, double obelisk
-2022 BULLET
- = black small circle
- x (middle dot - 00B7)
- x (one dot leader - 2024)
- x (bullet operator - 2219)
- x (inverse bullet - 25D8)
- x (white bullet - 25E6)
-2023 TRIANGULAR BULLET
- x (end of proof - 220E)
- x (black right-pointing small triangle - 25B8)
-2024 ONE DOT LEADER
- x (middle dot - 00B7)
- x (bullet - 2022)
- x (bullet operator - 2219)
- # 002E full stop
-2025 TWO DOT LEADER
- # 002E 002E
-2026 HORIZONTAL ELLIPSIS
- = three dot leader
- x (vertical ellipsis - 22EE)
- # 002E 002E 002E
-2027 HYPHENATION POINT
-@ Formatting characters
-2028 LINE SEPARATOR
- * may be used to represent this semantic unambiguously
-2029 PARAGRAPH SEPARATOR
- * may be used to represent this semantic unambiguously
-202A LEFT-TO-RIGHT EMBEDDING
- = LRE
-202B RIGHT-TO-LEFT EMBEDDING
- = RLE
-202C POP DIRECTIONAL FORMATTING
- = PDF
-202D LEFT-TO-RIGHT OVERRIDE
- = LRO
-202E RIGHT-TO-LEFT OVERRIDE
- = RLO
-202F NARROW NO-BREAK SPACE
- x (no-break space - 00A0)
- # <noBreak> 0020
-@ General punctuation
-2030 PER MILLE SIGN
- x (percent sign - 0025)
-2031 PER TEN THOUSAND SIGN
- x (percent sign - 0025)
-2032 PRIME
- = minutes, feet
- x (apostrophe - 0027)
- x (acute accent - 00B4)
- x (modifier letter prime - 02B9)
-2033 DOUBLE PRIME
- = seconds, inches
- x (quotation mark - 0022)
- x (modifier letter double prime - 02BA)
- x (right double quotation mark - 201D)
- x (ditto mark - 3003)
- x (double prime quotation mark - 301E)
- # 2032 2032
-2034 TRIPLE PRIME
- # 2032 2032 2032
-2035 REVERSED PRIME
- x (grave accent - 0060)
-2036 REVERSED DOUBLE PRIME
- x (reversed double prime quotation mark - 301D)
- # 2035 2035
-2037 REVERSED TRIPLE PRIME
- # 2035 2035 2035
-2038 CARET
- x (up arrowhead - 2303)
-2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
- = LEFT POINTING SINGLE GUILLEMET
- * usually opening, sometimes closing
- x (less-than sign - 003C)
- x (left-pointing angle bracket - 2329)
- x (left angle bracket - 3008)
-203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
- = RIGHT POINTING SINGLE GUILLEMET
- * usually closing, sometimes opening
- x (greater-than sign - 003E)
- x (right-pointing angle bracket - 232A)
- x (right angle bracket - 3009)
-203B REFERENCE MARK
- = Japanese kome
- = Urdu paragraph separator
- x (tibetan ku ru kha bzhi mig can - 0FBF)
-203C DOUBLE EXCLAMATION MARK
- x (exclamation mark - 0021)
- # 0021 0021
-203D INTERROBANG
- x (exclamation mark - 0021)
- x (question mark - 003F)
-203E OVERLINE
- = SPACING OVERSCORE
- # 0020 0305
-203F UNDERTIE (Enotikon)
- = Greek enotikon
- x (smile - 2323)
-2040 CHARACTER TIE
- x (frown - 2322)
-2041 CARET INSERTION POINT
- * proofreader's mark: insert here
- x (right semidirect product - 22CC)
-2042 ASTERISM
-2043 HYPHEN BULLET
-2044 FRACTION SLASH
- = solidus (in typography)
- * for composing arbitrary fractions
- x (solidus - 002F)
- x (division slash - 2215)
-2045 LEFT SQUARE BRACKET WITH QUILL
-2046 RIGHT SQUARE BRACKET WITH QUILL
-2048 QUESTION EXCLAMATION MARK
- * designed for use in vertical text
- # 003F 0021
-2049 EXCLAMATION QUESTION MARK
- * designed for use in vertical text
- # 0021 003F
-204A TIRONIAN SIGN ET
- * Irish Gaelic, ...
-204B REVERSED PILCROW SIGN
- x (pilcrow sign - 00B6)
-204C BLACK LEFTWARDS BULLET
-204D BLACK RIGHTWARDS BULLET
-@ Deprecated
-206A INHIBIT SYMMETRIC SWAPPING
-206B ACTIVATE SYMMETRIC SWAPPING
-206C INHIBIT ARABIC FORM SHAPING
-206D ACTIVATE ARABIC FORM SHAPING
-206E NATIONAL DIGIT SHAPES
-206F NOMINAL DIGIT SHAPES
-@@ 2070 Superscripts and Subscripts 209F
-@ Superscripts
-2070 SUPERSCRIPT ZERO
- # <super> 0030
-2071 <reserved>
- x (superscript one - 00B9)
-2072 <reserved>
- x (superscript two - 00B2)
-2073 <reserved>
- x (superscript three - 00B3)
-2074 SUPERSCRIPT FOUR
- # <super> 0034
-2075 SUPERSCRIPT FIVE
- # <super> 0035
-2076 SUPERSCRIPT SIX
- # <super> 0036
-2077 SUPERSCRIPT SEVEN
- # <super> 0037
-2078 SUPERSCRIPT EIGHT
- # <super> 0038
-2079 SUPERSCRIPT NINE
- # <super> 0039
-207A SUPERSCRIPT PLUS SIGN
- # <super> 002B
-207B SUPERSCRIPT MINUS
- # <super> 2212
-207C SUPERSCRIPT EQUALS SIGN
- # <super> 003D
-207D SUPERSCRIPT LEFT PARENTHESIS
- # <super> 0028
-207E SUPERSCRIPT RIGHT PARENTHESIS
- # <super> 0029
-207F SUPERSCRIPT LATIN SMALL LETTER N
- # <super> 006E
-@ Subscripts
-2080 SUBSCRIPT ZERO
- # <sub> 0030
-2081 SUBSCRIPT ONE
- # <sub> 0031
-2082 SUBSCRIPT TWO
- # <sub> 0032
-2083 SUBSCRIPT THREE
- # <sub> 0033
-2084 SUBSCRIPT FOUR
- # <sub> 0034
-2085 SUBSCRIPT FIVE
- # <sub> 0035
-2086 SUBSCRIPT SIX
- # <sub> 0036
-2087 SUBSCRIPT SEVEN
- # <sub> 0037
-2088 SUBSCRIPT EIGHT
- # <sub> 0038
-2089 SUBSCRIPT NINE
- # <sub> 0039
-208A SUBSCRIPT PLUS SIGN
- # <sub> 002B
-208B SUBSCRIPT MINUS
- # <sub> 2212
-208C SUBSCRIPT EQUALS SIGN
- # <sub> 003D
-208D SUBSCRIPT LEFT PARENTHESIS
- # <sub> 0028
-208E SUBSCRIPT RIGHT PARENTHESIS
- # <sub> 0029
-@@ 20A0 Currency Symbols 20CF
-@ Currency symbols
-@+ A number of currency symbols are found in other blocks.
- x (dollar sign - 0024)
- x (cent sign - 00A2)
- x (pound sign - 00A3)
- x (currency sign - 00A4)
- x (yen sign - 00A5)
- x (bengali rupee mark - 09F2)
- x (bengali rupee sign - 09F3)
- x (thai currency symbol baht - 0E3F)
- x (khmer currency symbol riel - 17DB)
-20A0 EURO-CURRENCY SIGN
- * intended for ECU, but not widely used
- * historical character, this is NOT the euro!
- x (euro sign - 20AC)
-20A1 COLON SIGN
- * Costa Rica, El Salvador
-20A2 CRUZEIRO SIGN
- * Brazil
-20A3 FRENCH FRANC SIGN
- * France
-20A4 LIRA SIGN
- * Italy, Turkey
- x (pound sign - 00A3)
-20A5 MILL SIGN
- * USA (1/10 cent)
-20A6 NAIRA SIGN
- * Nigeria
-20A7 PESETA SIGN
- * Spain
-20A8 RUPEE SIGN
- * India
- # 0052 0073
-20A9 WON SIGN
- * Korea
-20AA NEW SHEQEL SIGN
- * Israel
-20AB DONG SIGN
- * Vietnam
-20AC EURO SIGN
- * currency sign for the European Monetary Union
- * euro, not ECU
- x (euro-currency sign - 20A0)
-20AD KIP SIGN
- * Laos
-20AE TUGRIK SIGN
- * Mongolia
- * also transliterated as tugrug, tugric, tugrog, togrog
-20AF DRACHMA SIGN
- * Greece
-@@ 20D0 Combining Diacritical Marks for Symbols 20FF
-@ Combining diacritical marks for symbols
-20D0 COMBINING LEFT HARPOON ABOVE
-20D1 COMBINING RIGHT HARPOON ABOVE
- * vector
-20D2 COMBINING LONG VERTICAL LINE OVERLAY
-20D3 COMBINING SHORT VERTICAL LINE OVERLAY
- * negation
-20D4 COMBINING ANTICLOCKWISE ARROW ABOVE
-20D5 COMBINING CLOCKWISE ARROW ABOVE
- * rotation
-20D6 COMBINING LEFT ARROW ABOVE
-20D7 COMBINING RIGHT ARROW ABOVE
- * vector
-20D8 COMBINING RING OVERLAY
-20D9 COMBINING CLOCKWISE RING OVERLAY
-20DA COMBINING ANTICLOCKWISE RING OVERLAY
-20DB COMBINING THREE DOTS ABOVE
- = third derivative
-20DC COMBINING FOUR DOTS ABOVE
- = fourth derivative
-@ Enclosing diacritics
-20DD COMBINING ENCLOSING CIRCLE
- = JIS composition circle
- x (white circle - 25CB)
- x (large circle - 25EF)
- x (ideographic number zero - 3007)
-20DE COMBINING ENCLOSING SQUARE
- x (white square - 25A1)
-20DF COMBINING ENCLOSING DIAMOND
- x (white diamond - 25C7)
-20E0 COMBINING ENCLOSING CIRCLE BACKSLASH
- * prohibition
-@ Additional diacritical mark for symbols
-20E1 COMBINING LEFT RIGHT ARROW ABOVE
- * tensor
-@ Additional enclosing diacritics
-20E2 COMBINING ENCLOSING SCREEN
- x (clear screen symbol - 239A)
-20E3 COMBINING ENCLOSING KEYCAP
-@@ 2100 Letterlike Symbols 214F
-@ Letterlike symbols
-2100 ACCOUNT OF
- # 0061 002F 0063
-2101 ADDRESSED TO THE SUBJECT
- # 0061 002F 0073
-2102 DOUBLE-STRUCK CAPITAL C
- = the set of complex numbers
- # <font> 0043 latin capital letter c
-2103 DEGREE CELSIUS
- = degrees Centigrade
- # 00B0 0043
-2104 CENTRE LINE SYMBOL
- = clone
-2105 CARE OF
- # 0063 002F 006F
-2106 CADA UNA
- # 0063 002F 0075
-2107 EULER CONSTANT
- x (latin capital letter e - 0045)
- # 0190 latin capital letter open e
-2108 SCRUPLE
-2109 DEGREE FAHRENHEIT
- # 00B0 0046
-210A SCRIPT SMALL G
- = real number symbol
- # <font> 0067 latin small letter g
-210B SCRIPT CAPITAL H
- = Hamiltonian function
- # <font> 0048 latin capital letter h
-210C BLACK-LETTER CAPITAL H
- = Hilbert space
- # <font> 0048 latin capital letter h
-210D DOUBLE-STRUCK CAPITAL H
- # <font> 0048 latin capital letter h
-210E PLANCK CONSTANT
- # <font> 0068 latin small letter h
-210F PLANCK CONSTANT OVER TWO PI
- x (cyrillic small letter tshe - 045B)
- # <font> 0127 latin small letter h with stroke
-2110 SCRIPT CAPITAL I
- # <font> 0049 latin capital letter i
-2111 BLACK-LETTER CAPITAL I
- = imaginary part
- # <font> 0049 latin capital letter i
-2112 SCRIPT CAPITAL L
- = Laplace symbol
- # <font> 004C latin capital letter l
-2113 SCRIPT SMALL L
- = liter (not an official SI recommendation)
- # <font> 006C latin small letter l
-2114 L B BAR SYMBOL
- = pounds
-2115 DOUBLE-STRUCK CAPITAL N
- = natural number
- # <font> 004E latin capital letter n
-2116 NUMERO SIGN
- # 004E 006F
-2117 SOUND RECORDING COPYRIGHT
- = published
- = phonorecord sign
- x (copyright sign - 00A9)
-2118 SCRIPT CAPITAL P
- = Weierstrass elliptic function
- * actually this has the form of a lowercase calligraphic p, despite its name
-2119 DOUBLE-STRUCK CAPITAL P
- # <font> 0050 latin capital letter p
-211A DOUBLE-STRUCK CAPITAL Q
- = the set of rational numbers
- # <font> 0051 latin capital letter q
-211B SCRIPT CAPITAL R
- = Riemann Integral
- # <font> 0052 latin capital letter r
-211C BLACK-LETTER CAPITAL R
- = real part
- # <font> 0052 latin capital letter r
-211D DOUBLE-STRUCK CAPITAL R
- = the set of real numbers
- # <font> 0052 latin capital letter r
-211E PRESCRIPTION TAKE
- = recipe
- = cross ratio
-211F RESPONSE
-2120 SERVICE MARK
- # <super> 0053 004D
-2121 TELEPHONE SIGN
- # 0054 0045 004C
-2122 TRADE MARK SIGN
- # <super> 0054 004D
-2123 VERSICLE
-2124 DOUBLE-STRUCK CAPITAL Z
- = the set of integers
- # <font> 005A latin capital letter z
-2125 OUNCE SIGN
- x (latin small letter yogh - 021D)
-2126 OHM SIGN
- = resistance
- : 03A9 greek capital letter omega
-2127 INVERTED OHM SIGN
- = MHO
- = conductance
- * typographically a turned greek capital letter omega
- x (latin capital letter upsilon - 01B1)
- x (greek capital letter omega - 03A9)
-2128 BLACK-LETTER CAPITAL Z
- # <font> 005A latin capital letter z
-2129 TURNED GREEK SMALL LETTER IOTA
- * unique element fulfilling a description (logic)
- x (greek small letter iota - 03B9)
-212A KELVIN SIGN
- : 004B latin capital letter k
-212B ANGSTROM SIGN
- : 00C5 latin capital letter a with ring above
-212C SCRIPT CAPITAL B
- = Bernoulli function
- # <font> 0042 latin capital letter b
-212D BLACK-LETTER CAPITAL C
- # <font> 0043 latin capital letter c
-212E ESTIMATED SYMBOL
- * used in European packaging
- x (latin small letter e - 0065)
-212F SCRIPT SMALL E
- = error
- # <font> 0065 latin small letter e
-2130 SCRIPT CAPITAL E
- = EMF (Electro-Magnetic Force)
- # <font> 0045 latin capital letter e
-2131 SCRIPT CAPITAL F
- = Fourier transform
- # <font> 0046 latin capital letter f
-2132 TURNED CAPITAL F
- x (latin capital letter f - 0046)
-2133 SCRIPT CAPITAL M
- = M-matrix (physics)
- = German Mark (not the current Deutsche Mark)
- # <font> 004D latin capital letter m
-2134 SCRIPT SMALL O
- = order, of inferior order to
- # <font> 006F latin small letter o
-@ Hebrew letterlike math symbols (left-to-right)
-2135 ALEF SYMBOL
- = first transfinite cardinal (countable)
- # 05D0 hebrew letter alef
-2136 BET SYMBOL
- = second transfinite cardinal (the continuum)
- # 05D1 hebrew letter bet
-2137 GIMEL SYMBOL
- = third transfinite cardinal (functions of a real variable)
- # 05D2 hebrew letter gimel
-2138 DALET SYMBOL
- = fourth transfinite cardinal
- # 05D3 hebrew letter dalet
-@ Additional letterlike symbols
-2139 INFORMATION SOURCE
- * intended for use with 20DD
- # <font> 0069 latin small letter i
-213A ROTATED CAPITAL Q
- * a binding signature mark
-@@ 2150 Number Forms 218F
-@ Fractions
-@+ Other fraction number forms are found in the Latin-1 Supplement block.
- x (vulgar fraction one quarter - 00BC)
- x (vulgar fraction one half - 00BD)
- x (vulgar fraction three quarters - 00BE)
-2153 VULGAR FRACTION ONE THIRD
- # 0031 2044 0033
-2154 VULGAR FRACTION TWO THIRDS
- # 0032 2044 0033
-2155 VULGAR FRACTION ONE FIFTH
- # 0031 2044 0035
-2156 VULGAR FRACTION TWO FIFTHS
- # 0032 2044 0035
-2157 VULGAR FRACTION THREE FIFTHS
- # 0033 2044 0035
-2158 VULGAR FRACTION FOUR FIFTHS
- # 0034 2044 0035
-2159 VULGAR FRACTION ONE SIXTH
- # 0031 2044 0036
-215A VULGAR FRACTION FIVE SIXTHS
- # 0035 2044 0036
-215B VULGAR FRACTION ONE EIGHTH
- # 0031 2044 0038
-215C VULGAR FRACTION THREE EIGHTHS
- # 0033 2044 0038
-215D VULGAR FRACTION FIVE EIGHTHS
- # 0035 2044 0038
-215E VULGAR FRACTION SEVEN EIGHTHS
- # 0037 2044 0038
-215F FRACTION NUMERATOR ONE
- # 0031 2044
-@ Roman numerals
-2160 ROMAN NUMERAL ONE
- # 0049 latin capital letter i
-2161 ROMAN NUMERAL TWO
- # 0049 0049
-2162 ROMAN NUMERAL THREE
- # 0049 0049 0049
-2163 ROMAN NUMERAL FOUR
- # 0049 0056
-2164 ROMAN NUMERAL FIVE
- # 0056 latin capital letter v
-2165 ROMAN NUMERAL SIX
- # 0056 0049
-2166 ROMAN NUMERAL SEVEN
- # 0056 0049 0049
-2167 ROMAN NUMERAL EIGHT
- # 0056 0049 0049 0049
-2168 ROMAN NUMERAL NINE
- # 0049 0058
-2169 ROMAN NUMERAL TEN
- # 0058 latin capital letter x
-216A ROMAN NUMERAL ELEVEN
- # 0058 0049
-216B ROMAN NUMERAL TWELVE
- # 0058 0049 0049
-216C ROMAN NUMERAL FIFTY
- # 004C latin capital letter l
-216D ROMAN NUMERAL ONE HUNDRED
- # 0043 latin capital letter c
-216E ROMAN NUMERAL FIVE HUNDRED
- # 0044 latin capital letter d
-216F ROMAN NUMERAL ONE THOUSAND
- # 004D latin capital letter m
-2170 SMALL ROMAN NUMERAL ONE
- # 0069 latin small letter i
-2171 SMALL ROMAN NUMERAL TWO
- # 0069 0069
-2172 SMALL ROMAN NUMERAL THREE
- # 0069 0069 0069
-2173 SMALL ROMAN NUMERAL FOUR
- # 0069 0076
-2174 SMALL ROMAN NUMERAL FIVE
- # 0076 latin small letter v
-2175 SMALL ROMAN NUMERAL SIX
- # 0076 0069
-2176 SMALL ROMAN NUMERAL SEVEN
- # 0076 0069 0069
-2177 SMALL ROMAN NUMERAL EIGHT
- # 0076 0069 0069 0069
-2178 SMALL ROMAN NUMERAL NINE
- # 0069 0078
-2179 SMALL ROMAN NUMERAL TEN
- # 0078 latin small letter x
-217A SMALL ROMAN NUMERAL ELEVEN
- # 0078 0069
-217B SMALL ROMAN NUMERAL TWELVE
- # 0078 0069 0069
-217C SMALL ROMAN NUMERAL FIFTY
- # 006C latin small letter l
-217D SMALL ROMAN NUMERAL ONE HUNDRED
- # 0063 latin small letter c
-217E SMALL ROMAN NUMERAL FIVE HUNDRED
- # 0064 latin small letter d
-217F SMALL ROMAN NUMERAL ONE THOUSAND
- # 006D latin small letter m
-2180 ROMAN NUMERAL ONE THOUSAND C D
-2181 ROMAN NUMERAL FIVE THOUSAND
-2182 ROMAN NUMERAL TEN THOUSAND
-2183 ROMAN NUMERAL REVERSED ONE HUNDRED
- * used in combination with C and I to form large numbers
-@@ 2190 Arrows 21FF
-@ Arrows
-2190 LEFTWARDS ARROW
-2191 UPWARDS ARROW
- * IPA: egressive airflow
-2192 RIGHTWARDS ARROW
- = z notation total function
-2193 DOWNWARDS ARROW
- * IPA: ingressive airflow
-2194 LEFT RIGHT ARROW
- = z notation relation
-2195 UP DOWN ARROW
-2196 NORTH WEST ARROW
-2197 NORTH EAST ARROW
-2198 SOUTH EAST ARROW
-2199 SOUTH WEST ARROW
-219A LEFTWARDS ARROW WITH STROKE
- * negation of 2190
- : 2190 0338
-219B RIGHTWARDS ARROW WITH STROKE
- * negation of 2192
- : 2192 0338
-219C LEFTWARDS WAVE ARROW
-219D RIGHTWARDS WAVE ARROW
-219E LEFTWARDS TWO HEADED ARROW
-219F UPWARDS TWO HEADED ARROW
-21A0 RIGHTWARDS TWO HEADED ARROW
- = z notation total surjection
-21A1 DOWNWARDS TWO HEADED ARROW
- = form feed
-21A2 LEFTWARDS ARROW WITH TAIL
-21A3 RIGHTWARDS ARROW WITH TAIL
- = z notation total injection
-21A4 LEFTWARDS ARROW FROM BAR
-21A5 UPWARDS ARROW FROM BAR
-21A6 RIGHTWARDS ARROW FROM BAR
- = z notation maplet
-21A7 DOWNWARDS ARROW FROM BAR
- = depth symbol
-21A8 UP DOWN ARROW WITH BASE
-21A9 LEFTWARDS ARROW WITH HOOK
-21AA RIGHTWARDS ARROW WITH HOOK
-21AB LEFTWARDS ARROW WITH LOOP
-21AC RIGHTWARDS ARROW WITH LOOP
-21AD LEFT RIGHT WAVE ARROW
-21AE LEFT RIGHT ARROW WITH STROKE
- * negation of 2194
- : 2194 0338
-21AF DOWNWARDS ZIGZAG ARROW
- = electrolysis
-21B0 UPWARDS ARROW WITH TIP LEFTWARDS
-21B1 UPWARDS ARROW WITH TIP RIGHTWARDS
-21B2 DOWNWARDS ARROW WITH TIP LEFTWARDS
-21B3 DOWNWARDS ARROW WITH TIP RIGHTWARDS
-21B4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS
- = line feed
-21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
- = carriage return, new line
-21B6 ANTICLOCKWISE TOP SEMICIRCLE ARROW
-21B7 CLOCKWISE TOP SEMICIRCLE ARROW
-21B8 NORTH WEST ARROW TO LONG BAR
- = home
-21B9 LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
- = tab with shift tab
-21BA ANTICLOCKWISE OPEN CIRCLE ARROW
-21BB CLOCKWISE OPEN CIRCLE ARROW
-21BC LEFTWARDS HARPOON WITH BARB UPWARDS
-21BD LEFTWARDS HARPOON WITH BARB DOWNWARDS
-21BE UPWARDS HARPOON WITH BARB RIGHTWARDS
-21BF UPWARDS HARPOON WITH BARB LEFTWARDS
-21C0 RIGHTWARDS HARPOON WITH BARB UPWARDS
-21C1 RIGHTWARDS HARPOON WITH BARB DOWNWARDS
-21C2 DOWNWARDS HARPOON WITH BARB RIGHTWARDS
-21C3 DOWNWARDS HARPOON WITH BARB LEFTWARDS
-21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW
-21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
-21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW
-21C7 LEFTWARDS PAIRED ARROWS
-21C8 UPWARDS PAIRED ARROWS
-21C9 RIGHTWARDS PAIRED ARROWS
-21CA DOWNWARDS PAIRED ARROWS
-21CB LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
-21CC RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
-21CD LEFTWARDS DOUBLE ARROW WITH STROKE
- * negation of 21D0
- : 21D0 0338
-21CE LEFT RIGHT DOUBLE ARROW WITH STROKE
- * negation of 21D4
- : 21D4 0338
-21CF RIGHTWARDS DOUBLE ARROW WITH STROKE
- * negation of 21D2
- : 21D2 0338
-21D0 LEFTWARDS DOUBLE ARROW
-21D1 UPWARDS DOUBLE ARROW
-21D2 RIGHTWARDS DOUBLE ARROW
-21D3 DOWNWARDS DOUBLE ARROW
-21D4 LEFT RIGHT DOUBLE ARROW
-21D5 UP DOWN DOUBLE ARROW
-21D6 NORTH WEST DOUBLE ARROW
-21D7 NORTH EAST DOUBLE ARROW
-21D8 SOUTH EAST DOUBLE ARROW
-21D9 SOUTH WEST DOUBLE ARROW
-21DA LEFTWARDS TRIPLE ARROW
-21DB RIGHTWARDS TRIPLE ARROW
-21DC LEFTWARDS SQUIGGLE ARROW
-21DD RIGHTWARDS SQUIGGLE ARROW
-21DE UPWARDS ARROW WITH DOUBLE STROKE
- = page up
-21DF DOWNWARDS ARROW WITH DOUBLE STROKE
- = page down
-21E0 LEFTWARDS DASHED ARROW
-21E1 UPWARDS DASHED ARROW
-21E2 RIGHTWARDS DASHED ARROW
-21E3 DOWNWARDS DASHED ARROW
-21E4 LEFTWARDS ARROW TO BAR
- = leftward tab
-21E5 RIGHTWARDS ARROW TO BAR
- = rightward tab
-21E6 LEFTWARDS WHITE ARROW
-21E7 UPWARDS WHITE ARROW
- = shift
-21E8 RIGHTWARDS WHITE ARROW
-21E9 DOWNWARDS WHITE ARROW
-21EA UPWARDS WHITE ARROW FROM BAR
- = caps lock
-21EB UPWARDS WHITE ARROW ON PEDESTAL
- = level 2 lock
-21EC UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
- = caps lock
-21ED UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
- = numerics lock
-21EE UPWARDS WHITE DOUBLE ARROW
- = level 3 select
-21EF UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
- = level 3 lock
-21F0 RIGHTWARDS WHITE ARROW FROM WALL
- = group lock
-21F1 NORTH WEST ARROW TO CORNER
- = home
-21F2 SOUTH EAST ARROW TO CORNER
- = end
-21F3 UP DOWN WHITE ARROW
- = scrolling
-@@ 2200 Mathematical Operators 22FF
-@ Mathematical operators
-2200 FOR ALL
-2201 COMPLEMENT
- x (latin letter stretched c - 0297)
-2202 PARTIAL DIFFERENTIAL
-2203 THERE EXISTS
-2204 THERE DOES NOT EXIST
- : 2203 0338
-2205 EMPTY SET
- = null set
- x (latin capital letter o with stroke - 00D8)
- x (diameter sign - 2300)
-2206 INCREMENT
- = Laplace operator
- = forward difference
- x (greek capital letter delta - 0394)
- x (white up-pointing triangle - 25B3)
-2207 NABLA
- = Laplace operator (written with superscript 2)
- = backward difference
- = del
- x (white down-pointing triangle - 25BD)
-2208 ELEMENT OF
-2209 NOT AN ELEMENT OF
- : 2208 0338
-220A SMALL ELEMENT OF
- * originates in math pi fonts; not the straight epsilon
-220B CONTAINS AS MEMBER
- = such that
-220C DOES NOT CONTAIN AS MEMBER
- : 220B 0338
-220D SMALL CONTAINS AS MEMBER
-220E END OF PROOF
- = Q.E.D.
- x (triangular bullet - 2023)
- x (black vertical rectangle - 25AE)
-220F N-ARY PRODUCT
- = product sign
- x (greek capital letter pi - 03A0)
-2210 N-ARY COPRODUCT
- = coproduct sign
-2211 N-ARY SUMMATION
- = summation sign
- x (greek capital letter sigma - 03A3)
-2212 MINUS SIGN
- x (hyphen-minus - 002D)
-2213 MINUS-OR-PLUS SIGN
- x (plus-minus sign - 00B1)
-2214 DOT PLUS
-2215 DIVISION SLASH
- * generic division operator
- x (solidus - 002F)
- x (fraction slash - 2044)
-2216 SET MINUS
- x (reverse solidus - 005C)
-2217 ASTERISK OPERATOR
- x (asterisk - 002A)
-2218 RING OPERATOR
- = composite function
- = APL jot
- x (degree sign - 00B0)
- x (white bullet - 25E6)
-2219 BULLET OPERATOR
- x (middle dot - 00B7)
- x (bullet - 2022)
- x (one dot leader - 2024)
-221A SQUARE ROOT
- = radical sign
- x (check mark - 2713)
-221B CUBE ROOT
-221C FOURTH ROOT
-221D PROPORTIONAL TO
- x (greek small letter alpha - 03B1)
-221E INFINITY
-221F RIGHT ANGLE
-2220 ANGLE
-2221 MEASURED ANGLE
-2222 SPHERICAL ANGLE
- = angle arc
-2223 DIVIDES
- = such that
- = APL stile
- x (vertical line - 007C)
- x (latin letter dental click - 01C0)
-2224 DOES NOT DIVIDE
- : 2223 0338
-2225 PARALLEL TO
- x (latin letter lateral click - 01C1)
- x (double vertical line - 2016)
-2226 NOT PARALLEL TO
- : 2225 0338
-2227 LOGICAL AND
- = wedge, conjunction
- x (n-ary logical and - 22C0)
- x (up arrowhead - 2303)
-2228 LOGICAL OR
- = vee, disjunction
- x (n-ary logical or - 22C1)
- x (down arrowhead - 2304)
-2229 INTERSECTION
- = cap, hat
- x (n-ary intersection - 22C2)
-222A UNION
- = cup
- x (n-ary union - 22C3)
-222B INTEGRAL
- x (latin small letter esh - 0283)
-222C DOUBLE INTEGRAL
- # 222B 222B
-222D TRIPLE INTEGRAL
- # 222B 222B 222B
-222E CONTOUR INTEGRAL
-222F SURFACE INTEGRAL
- # 222E 222E
-2230 VOLUME INTEGRAL
- # 222E 222E 222E
-2231 CLOCKWISE INTEGRAL
-2232 CLOCKWISE CONTOUR INTEGRAL
-2233 ANTICLOCKWISE CONTOUR INTEGRAL
- * clockwise or anticlockwise arrows do not reverse during layout mirroring
-2234 THEREFORE
-2235 BECAUSE
-2236 RATIO
- x (colon - 003A)
-2237 PROPORTION
-2238 DOT MINUS
- = symmetric difference
-2239 EXCESS
-223A GEOMETRIC PROPORTION
-223B HOMOTHETIC
-223C TILDE OPERATOR
- = varies with (proportional to)
- = difference between
- = similar to
- = not
- = cycle
- = APL tilde
- x (tilde - 007E)
- x (not sign - 00AC)
- x (small tilde - 02DC)
-223D REVERSED TILDE (lazy S)
- = lazy S
- * reversed tilde and lazy S are glyph variants
-223E INVERTED LAZY S
- = most positive
-223F SINE WAVE
- = alternating current
-2240 WREATH PRODUCT
-2241 NOT TILDE
- : 223C 0338
-2242 MINUS TILDE
-2243 ASYMPTOTICALLY EQUAL TO
-2244 NOT ASYMPTOTICALLY EQUAL TO
- : 2243 0338
-2245 APPROXIMATELY EQUAL TO
-2246 APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
-2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
- : 2245 0338
-2248 ALMOST EQUAL TO
- = asymptotic to
-2249 NOT ALMOST EQUAL TO
- : 2248 0338
-224A ALMOST EQUAL OR EQUAL TO
-224B TRIPLE TILDE
-224C ALL EQUAL TO
- * reversed tilde and lazy S are glyph variants
-224D EQUIVALENT TO
-224E GEOMETRICALLY EQUIVALENT TO
-224F DIFFERENCE BETWEEN
-2250 APPROACHES THE LIMIT
-2251 GEOMETRICALLY EQUAL TO
-2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF
- = nearly equals
-2253 IMAGE OF OR APPROXIMATELY EQUAL TO
-2254 COLON EQUALS
-2255 EQUALS COLON
-2256 RING IN EQUAL TO
-2257 RING EQUAL TO
- = approximately equal to
-2258 CORRESPONDS TO
-2259 ESTIMATES
- = corresponds to
-225A EQUIANGULAR TO
-225B STAR EQUALS
-225C DELTA EQUAL TO
- = equiangular
- = equal to by definition
-225D EQUAL TO BY DEFINITION
-225E MEASURED BY
-225F QUESTIONED EQUAL TO
-2260 NOT EQUAL TO
- x (equals sign - 003D)
- x (latin letter alveolar click - 01C2)
- : 003D 0338
-2261 IDENTICAL TO
-2262 NOT IDENTICAL TO
- : 2261 0338
-2263 STRICTLY EQUIVALENT TO
-2264 LESS-THAN OR EQUAL TO
-2265 GREATER-THAN OR EQUAL TO
-2266 LESS-THAN OVER EQUAL TO
-2267 GREATER-THAN OVER EQUAL TO
-2268 LESS-THAN BUT NOT EQUAL TO
-2269 GREATER-THAN BUT NOT EQUAL TO
-226A MUCH LESS-THAN
- x (left-pointing double angle quotation mark - 00AB)
-226B MUCH GREATER-THAN
- x (right-pointing double angle quotation mark - 00BB)
-226C BETWEEN
- = plaintiff, quantic
-226D NOT EQUIVALENT TO
- : 224D 0338
-226E NOT LESS-THAN
- : 003C 0338
-226F NOT GREATER-THAN
- : 003E 0338
-2270 NEITHER LESS-THAN NOR EQUAL TO
- : 2264 0338
-2271 NEITHER GREATER-THAN NOR EQUAL TO
- : 2265 0338
-2272 LESS-THAN OR EQUIVALENT TO
-2273 GREATER-THAN OR EQUIVALENT TO
-2274 NEITHER LESS-THAN NOR EQUIVALENT TO
- : 2272 0338
-2275 NEITHER GREATER-THAN NOR EQUIVALENT TO
- : 2273 0338
-2276 LESS-THAN OR GREATER-THAN
-2277 GREATER-THAN OR LESS-THAN
-2278 NEITHER LESS-THAN NOR GREATER-THAN
- : 2276 0338
-2279 NEITHER GREATER-THAN NOR LESS-THAN
- : 2277 0338
-227A PRECEDES
- = lower rank than
- x (precedes under relation - 22B0)
-227B SUCCEEDS
- = higher rank than
- x (succeeds under relation - 22B1)
-227C PRECEDES OR EQUAL TO
-227D SUCCEEDS OR EQUAL TO
-227E PRECEDES OR EQUIVALENT TO
-227F SUCCEEDS OR EQUIVALENT TO
-2280 DOES NOT PRECEDE
- : 227A 0338
-2281 DOES NOT SUCCEED
- : 227B 0338
-2282 SUBSET OF
- = included in set
-2283 SUPERSET OF
- = includes in set
-2284 NOT A SUBSET OF
- : 2282 0338
-2285 NOT A SUPERSET OF
- : 2283 0338
-2286 SUBSET OF OR EQUAL TO
-2287 SUPERSET OF OR EQUAL TO
-2288 NEITHER A SUBSET OF NOR EQUAL TO
- : 2286 0338
-2289 NEITHER A SUPERSET OF NOR EQUAL TO
- : 2287 0338
-228A SUBSET OF WITH NOT EQUAL TO
-228B SUPERSET OF WITH NOT EQUAL TO
-228C MULTISET
-228D MULTISET MULTIPLICATION
-228E MULTISET UNION
- = z notation bag addition
-228F SQUARE IMAGE OF
-2290 SQUARE ORIGINAL OF
-2291 SQUARE IMAGE OF OR EQUAL TO
-2292 SQUARE ORIGINAL OF OR EQUAL TO
-2293 SQUARE CAP
-2294 SQUARE CUP
-2295 CIRCLED PLUS
- = direct sum
- = vector pointing into page
- x (earth - 2641)
-2296 CIRCLED MINUS
- = symmetric difference
-2297 CIRCLED TIMES
- = tensor product
- = vector pointing into page
-2298 CIRCLED DIVISION SLASH
-2299 CIRCLED DOT OPERATOR
- = direct product
- = vector pointing out of page
- x (latin letter bilabial click - 0298)
- x (sun - 2609)
-229A CIRCLED RING OPERATOR
- x (apl functional symbol circle jot - 233E)
- x (bullseye - 25CE)
-229B CIRCLED ASTERISK OPERATOR
-229C CIRCLED EQUALS
-229D CIRCLED DASH
-229E SQUARED PLUS
-229F SQUARED MINUS
-22A0 SQUARED TIMES
- x (ballot box with x - 2612)
-22A1 SQUARED DOT OPERATOR
-22A2 RIGHT TACK
- = turnstile
- = proves, implies, yields
- = reducible
-22A3 LEFT TACK
- = reverse turnstile
- = non-theorem, does not yield
-22A4 DOWN TACK
- = top
- * called up tack in APL
-22A5 UP TACK
- = orthogonal to
- = perpendicular
- = base
- * called down tack in APL
-22A6 ASSERTION
- = reduces to
-22A7 MODELS
-22A8 TRUE
- = statement is true, valid
- = is a tautology
- = satisfies
- = results in
-22A9 FORCES
-22AA TRIPLE VERTICAL BAR RIGHT TURNSTILE
-22AB DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
-22AC DOES NOT PROVE
- : 22A2 0338
-22AD NOT TRUE
- : 22A8 0338
-22AE DOES NOT FORCE
- : 22A9 0338
-22AF NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
- : 22AB 0338
-22B0 PRECEDES UNDER RELATION
- x (precedes - 227A)
-22B1 SUCCEEDS UNDER RELATION
- x (succeeds - 227B)
-22B2 NORMAL SUBGROUP OF
- x (white left-pointing pointer - 25C5)
-22B3 CONTAINS AS NORMAL SUBGROUP
- x (white right-pointing pointer - 25BB)
-22B4 NORMAL SUBGROUP OF OR EQUAL TO
-22B5 CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
-22B6 ORIGINAL OF
-22B7 IMAGE OF
-22B8 MULTIMAP
-22B9 HERMITIAN CONJUGATE MATRIX
-22BA INTERCALATE
-22BB XOR
-22BC NAND
- x (projective - 2305)
-22BD NOR
-22BE RIGHT ANGLE WITH ARC
-22BF RIGHT TRIANGLE
-22C0 N-ARY LOGICAL AND
- x (logical and - 2227)
-22C1 N-ARY LOGICAL OR
- x (logical or - 2228)
-22C2 N-ARY INTERSECTION
- = z notation generalised intersection
- x (intersection - 2229)
-22C3 N-ARY UNION
- = z notation generalised union
- x (union - 222A)
-22C4 DIAMOND OPERATOR
- x (white diamond - 25C7)
-22C5 DOT OPERATOR
- x (middle dot - 00B7)
-22C6 STAR OPERATOR
- * APL
- x (arabic five pointed star - 066D)
- x (black star - 2605)
-22C7 DIVISION TIMES
-22C8 BOWTIE
- x (ocr bow tie - 2445)
-22C9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
-22CA RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
-22CB LEFT SEMIDIRECT PRODUCT
-22CC RIGHT SEMIDIRECT PRODUCT
- x (caret insertion point - 2041)
-22CD REVERSED TILDE EQUALS
-22CE CURLY LOGICAL OR
-22CF CURLY LOGICAL AND
-22D0 DOUBLE SUBSET
-22D1 DOUBLE SUPERSET
-22D2 DOUBLE INTERSECTION
-22D3 DOUBLE UNION
-22D4 PITCHFORK
- = proper intersection
-22D5 EQUAL AND PARALLEL TO
- x (viewdata square - 2317)
-22D6 LESS-THAN WITH DOT
-22D7 GREATER-THAN WITH DOT
-22D8 VERY MUCH LESS-THAN
-22D9 VERY MUCH GREATER-THAN
-22DA LESS-THAN EQUAL TO OR GREATER-THAN
-22DB GREATER-THAN EQUAL TO OR LESS-THAN
-22DC EQUAL TO OR LESS-THAN
-22DD EQUAL TO OR GREATER-THAN
-22DE EQUAL TO OR PRECEDES
-22DF EQUAL TO OR SUCCEEDS
-22E0 DOES NOT PRECEDE OR EQUAL
- : 227C 0338
-22E1 DOES NOT SUCCEED OR EQUAL
- : 227D 0338
-22E2 NOT SQUARE IMAGE OF OR EQUAL TO
- : 2291 0338
-22E3 NOT SQUARE ORIGINAL OF OR EQUAL TO
- : 2292 0338
-22E4 SQUARE IMAGE OF OR NOT EQUAL TO
-22E5 SQUARE ORIGINAL OF OR NOT EQUAL TO
-22E6 LESS-THAN BUT NOT EQUIVALENT TO
-22E7 GREATER-THAN BUT NOT EQUIVALENT TO
-22E8 PRECEDES BUT NOT EQUIVALENT TO
-22E9 SUCCEEDS BUT NOT EQUIVALENT TO
-22EA NOT NORMAL SUBGROUP OF
- : 22B2 0338
-22EB DOES NOT CONTAIN AS NORMAL SUBGROUP
- : 22B3 0338
-22EC NOT NORMAL SUBGROUP OF OR EQUAL TO
- : 22B4 0338
-22ED DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
- : 22B5 0338
-22EE VERTICAL ELLIPSIS
- * these four ellipses are used for matrix row/column elision
- x (horizontal ellipsis - 2026)
-22EF MIDLINE HORIZONTAL ELLIPSIS
-22F0 UP RIGHT DIAGONAL ELLIPSIS
-22F1 DOWN RIGHT DIAGONAL ELLIPSIS
-@@ 2300 Miscellaneous Technical 23FF
-@ Miscellaneous technical
-2300 DIAMETER SIGN
- x (empty set - 2205)
-2301 ELECTRIC ARROW
- * from ISO 2047
- * symbol for End of Transmission
-2302 HOUSE
-2303 UP ARROWHEAD
- x (circumflex accent - 005E)
- x (modifier letter up arrowhead - 02C4)
- x (caret - 2038)
- x (logical and - 2227)
-2304 DOWN ARROWHEAD
- x (modifier letter down arrowhead - 02C5)
- x (logical or - 2228)
- x (countersink - 2335)
-2305 PROJECTIVE
- x (nand - 22BC)
-2306 PERSPECTIVE
-2307 WAVY LINE
- x (wavy dash - 3030)
-2308 LEFT CEILING
- = APL upstile
- x (left corner bracket - 300C)
-2309 RIGHT CEILING
-230A LEFT FLOOR
- = APL downstile
-230B RIGHT FLOOR
- x (right corner bracket - 300D)
-230C BOTTOM RIGHT CROP
- * set of four "crop" corners, arranged facing outward
-230D BOTTOM LEFT CROP
-230E TOP RIGHT CROP
-230F TOP LEFT CROP
-2310 REVERSED NOT SIGN
- = beginning of line
- x (not sign - 00AC)
-2311 SQUARE LOZENGE
-2312 ARC
- x (upper half circle - 25E0)
-2313 SEGMENT
-2314 SECTOR
-2315 TELEPHONE RECORDER
-2316 POSITION INDICATOR
-2317 VIEWDATA SQUARE
- x (equal and parallel to - 22D5)
-2318 PLACE OF INTEREST SIGN
- = COMMAND KEY
-2319 TURNED NOT SIGN
- = line marker
-231A WATCH
-231B HOURGLASS
-231C TOP LEFT CORNER
- * set of four "quine" corners, for quincuncial arrangement
-231D TOP RIGHT CORNER
-231E BOTTOM LEFT CORNER
-231F BOTTOM RIGHT CORNER
-2320 TOP HALF INTEGRAL
-2321 BOTTOM HALF INTEGRAL
-2322 FROWN
- x (character tie - 2040)
-2323 SMILE
- x (undertie - 203F)
-2324 UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
- = ENTER KEY
-2325 OPTION KEY
-2326 ERASE TO THE RIGHT
- = DELETE TO THE RIGHT KEY
-2327 X IN A RECTANGLE BOX
- = CLEAR KEY
-2328 KEYBOARD
-2329 LEFT-POINTING ANGLE BRACKET
- = BRA
- = z notation left sequence bracket
- x (less-than sign - 003C)
- x (single left-pointing angle quotation mark - 2039)
- : 3008 left angle bracket
-232A RIGHT-POINTING ANGLE BRACKET
- = KET
- = z notation right sequence bracket
- x (greater-than sign - 003E)
- x (single right-pointing angle quotation mark - 203A)
- : 3009 right angle bracket
-232B ERASE TO THE LEFT
- = DELETE TO THE LEFT KEY
-232C BENZENE RING
-232D CYLINDRICITY
-232E ALL AROUND-PROFILE
-232F SYMMETRY
-2330 TOTAL RUNOUT
-2331 DIMENSION ORIGIN
-2332 CONICAL TAPER
-2333 SLOPE
-2334 COUNTERBORE
- x (open box - 2423)
-2335 COUNTERSINK
- x (down arrowhead - 2304)
-@ APL
-2336 APL FUNCTIONAL SYMBOL I-BEAM
-2337 APL FUNCTIONAL SYMBOL SQUISH QUAD
- x (apl functional symbol quad - 2395)
- x (white vertical rectangle - 25AF)
-2338 APL FUNCTIONAL SYMBOL QUAD EQUAL
-2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
-233A APL FUNCTIONAL SYMBOL QUAD DIAMOND
-233B APL FUNCTIONAL SYMBOL QUAD JOT
-233C APL FUNCTIONAL SYMBOL QUAD CIRCLE
-233D APL FUNCTIONAL SYMBOL CIRCLE STILE
-233E APL FUNCTIONAL SYMBOL CIRCLE JOT
- x (circled ring operator - 229A)
-233F APL FUNCTIONAL SYMBOL SLASH BAR
-2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR
-2341 APL FUNCTIONAL SYMBOL QUAD SLASH
-2342 APL FUNCTIONAL SYMBOL QUAD BACKSLASH
-2343 APL FUNCTIONAL SYMBOL QUAD LESS-THAN
-2344 APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
-2345 APL FUNCTIONAL SYMBOL LEFTWARDS VANE
-2346 APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
-2347 APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
-2348 APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
-2349 APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
-234A APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR *
- x (up tack - 22A5)
-234B APL FUNCTIONAL SYMBOL DELTA STILE
-234C APL FUNCTIONAL SYMBOL QUAD DOWN CARET
-234D APL FUNCTIONAL SYMBOL QUAD DELTA
-234E APL FUNCTIONAL SYMBOL DOWN TACK JOT *
-234F APL FUNCTIONAL SYMBOL UPWARDS VANE
-2350 APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
-2351 APL FUNCTIONAL SYMBOL UP TACK OVERBAR *
- x (down tack - 22A4)
- x (postal mark - 3012)
-2352 APL FUNCTIONAL SYMBOL DEL STILE
-2353 APL FUNCTIONAL SYMBOL QUAD UP CARET
-2354 APL FUNCTIONAL SYMBOL QUAD DEL
-2355 APL FUNCTIONAL SYMBOL UP TACK JOT *
-2356 APL FUNCTIONAL SYMBOL DOWNWARDS VANE
-2357 APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
-2358 APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
-2359 APL FUNCTIONAL SYMBOL DELTA UNDERBAR
-235A APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
-235B APL FUNCTIONAL SYMBOL JOT UNDERBAR
-235C APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
-235D APL FUNCTIONAL SYMBOL UP SHOE JOT
-235E APL FUNCTIONAL SYMBOL QUOTE QUAD
-235F APL FUNCTIONAL SYMBOL CIRCLE STAR
-2360 APL FUNCTIONAL SYMBOL QUAD COLON
-2361 APL FUNCTIONAL SYMBOL UP TACK DIAERESIS *
-2362 APL FUNCTIONAL SYMBOL DEL DIAERESIS
-2363 APL FUNCTIONAL SYMBOL STAR DIAERESIS
-2364 APL FUNCTIONAL SYMBOL JOT DIAERESIS
-2365 APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
-2366 APL FUNCTIONAL SYMBOL DOWN SHOE STILE
-2367 APL FUNCTIONAL SYMBOL LEFT SHOE STILE
-2368 APL FUNCTIONAL SYMBOL TILDE DIAERESIS
-2369 APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
-236A APL FUNCTIONAL SYMBOL COMMA BAR
-236B APL FUNCTIONAL SYMBOL DEL TILDE
-236C APL FUNCTIONAL SYMBOL ZILDE
-236D APL FUNCTIONAL SYMBOL STILE TILDE
-236E APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
-236F APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
-2370 APL FUNCTIONAL SYMBOL QUAD QUESTION
-2371 APL FUNCTIONAL SYMBOL DOWN CARET TILDE
-2372 APL FUNCTIONAL SYMBOL UP CARET TILDE
-2373 APL FUNCTIONAL SYMBOL IOTA
-2374 APL FUNCTIONAL SYMBOL RHO
-2375 APL FUNCTIONAL SYMBOL OMEGA
-2376 APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
-2377 APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
-2378 APL FUNCTIONAL SYMBOL IOTA UNDERBAR
-2379 APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
-237A APL FUNCTIONAL SYMBOL ALPHA
-@ Graphics for control codes
-237B NOT CHECK MARK
- * from ISO 2047
- * symbol for Negative Acknowledge
-237D SHOULDERED OPEN BOX
- * from ISO 9995-7
- * keyboard symbol for No Break Space
-237E BELL SYMBOL
- * from ISO 2047
-237F VERTICAL LINE WITH MIDDLE DOT
- * from ISO 2047
- * symbol for End of Medium
-@ Keyboard symbols from ISO 9995-7
-2380 INSERTION SYMBOL
-2381 CONTINUOUS UNDERLINE SYMBOL
-2382 DISCONTINUOUS UNDERLINE SYMBOL
-2383 EMPHASIS SYMBOL
-2384 COMPOSITION SYMBOL
-2385 WHITE SQUARE WITH CENTRE VERTICAL LINE
-2386 ENTER SYMBOL
-2387 ALTERNATIVE KEY SYMBOL
-2388 HELM SYMBOL
- = control
- x (wheel of dharma - 2638)
-2389 CIRCLED HORIZONTAL BAR WITH NOTCH (pause)
-238A CIRCLED TRIANGLE DOWN (break)
-238B BROKEN CIRCLE WITH NORTHWEST ARROW (escape)
-238C UNDO SYMBOL
-@ Electrotechnical symbols from IR 181
-238D MONOSTABLE SYMBOL
-238E HYSTERESIS SYMBOL
-238F OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
-2390 OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
-2391 PASSIVE-PULL-DOWN-OUTPUT SYMBOL
-2392 PASSIVE-PULL-UP-OUTPUT SYMBOL
-2393 DIRECT CURRENT SYMBOL FORM TWO
-2394 SOFTWARE-FUNCTION SYMBOL
-@ APL
-2395 APL FUNCTIONAL SYMBOL QUAD
- x (apl functional symbol squish quad - 2337)
- x (white vertical rectangle - 25AF)
-@ Keyboard symbols from ISO 9995-7
-2396 DECIMAL SEPARATOR KEY SYMBOL
-2397 PREVIOUS PAGE
-2398 NEXT PAGE
-2399 PRINT SCREEN SYMBOL
-239A CLEAR SCREEN SYMBOL
- x (combining enclosing screen - 20E2)
-@@ 2400 Control Pictures 243F
-@ Graphic pictures for control codes
-2400 SYMBOL FOR NULL
-2401 SYMBOL FOR START OF HEADING
-2402 SYMBOL FOR START OF TEXT
-2403 SYMBOL FOR END OF TEXT
-2404 SYMBOL FOR END OF TRANSMISSION
-2405 SYMBOL FOR ENQUIRY
-2406 SYMBOL FOR ACKNOWLEDGE
-2407 SYMBOL FOR BELL
-2408 SYMBOL FOR BACKSPACE
-2409 SYMBOL FOR HORIZONTAL TABULATION
-240A SYMBOL FOR LINE FEED
-240B SYMBOL FOR VERTICAL TABULATION
-240C SYMBOL FOR FORM FEED
-240D SYMBOL FOR CARRIAGE RETURN
-240E SYMBOL FOR SHIFT OUT
-240F SYMBOL FOR SHIFT IN
-2410 SYMBOL FOR DATA LINK ESCAPE
-2411 SYMBOL FOR DEVICE CONTROL ONE
-2412 SYMBOL FOR DEVICE CONTROL TWO
-2413 SYMBOL FOR DEVICE CONTROL THREE
-2414 SYMBOL FOR DEVICE CONTROL FOUR
-2415 SYMBOL FOR NEGATIVE ACKNOWLEDGE
-2416 SYMBOL FOR SYNCHRONOUS IDLE
-2417 SYMBOL FOR END OF TRANSMISSION BLOCK
-2418 SYMBOL FOR CANCEL
-2419 SYMBOL FOR END OF MEDIUM
-241A SYMBOL FOR SUBSTITUTE
-241B SYMBOL FOR ESCAPE
-241C SYMBOL FOR FILE SEPARATOR
-241D SYMBOL FOR GROUP SEPARATOR
-241E SYMBOL FOR RECORD SEPARATOR
-241F SYMBOL FOR UNIT SEPARATOR
-2420 SYMBOL FOR SPACE
-2421 SYMBOL FOR DELETE
-2422 BLANK SYMBOL
- * graphic for space
- x (latin small letter b with stroke - 0180)
-2423 OPEN BOX
- * graphic for space
- x (counterbore - 2334)
-2424 SYMBOL FOR NEWLINE
-2425 SYMBOL FOR DELETE FORM TWO
- * from ISO 9995-7
- * keyboard symbol for undoable delete
-2426 SYMBOL FOR SUBSTITUTE FORM TWO
- * from ISO 2047
- x (arabic question mark - 061F)
-@@ 2440 Optical Character Recognition 245F
-@ OCR
-2440 OCR HOOK
-2441 OCR CHAIR
-2442 OCR FORK
-2443 OCR INVERTED FORK
-2444 OCR BELT BUCKLE
-2445 OCR BOW TIE
- x (bowtie - 22C8)
-2446 OCR BRANCH BANK IDENTIFICATION
- = transit
-2447 OCR AMOUNT OF CHECK
-2448 OCR DASH
- = on us
-2449 OCR CUSTOMER ACCOUNT NUMBER
- = dash
-244A OCR DOUBLE BACKSLASH
-@@ 2460 Enclosed Alphanumerics 24FF
-@ Circled numbers
-2460 CIRCLED DIGIT ONE
- # <circle> 0031
-2461 CIRCLED DIGIT TWO
- # <circle> 0032
-2462 CIRCLED DIGIT THREE
- # <circle> 0033
-2463 CIRCLED DIGIT FOUR
- # <circle> 0034
-2464 CIRCLED DIGIT FIVE
- # <circle> 0035
-2465 CIRCLED DIGIT SIX
- # <circle> 0036
-2466 CIRCLED DIGIT SEVEN
- # <circle> 0037
-2467 CIRCLED DIGIT EIGHT
- # <circle> 0038
-2468 CIRCLED DIGIT NINE
- # <circle> 0039
-2469 CIRCLED NUMBER TEN
- # <circle> 0031 0030
-246A CIRCLED NUMBER ELEVEN
- # <circle> 0031 0031
-246B CIRCLED NUMBER TWELVE
- # <circle> 0031 0032
-246C CIRCLED NUMBER THIRTEEN
- # <circle> 0031 0033
-246D CIRCLED NUMBER FOURTEEN
- # <circle> 0031 0034
-246E CIRCLED NUMBER FIFTEEN
- # <circle> 0031 0035
-246F CIRCLED NUMBER SIXTEEN
- # <circle> 0031 0036
-2470 CIRCLED NUMBER SEVENTEEN
- # <circle> 0031 0037
-2471 CIRCLED NUMBER EIGHTEEN
- # <circle> 0031 0038
-2472 CIRCLED NUMBER NINETEEN
- # <circle> 0031 0039
-2473 CIRCLED NUMBER TWENTY
- # <circle> 0032 0030
-@ Parenthesized numbers
-2474 PARENTHESIZED DIGIT ONE
- # 0028 0031 0029
-2475 PARENTHESIZED DIGIT TWO
- # 0028 0032 0029
-2476 PARENTHESIZED DIGIT THREE
- # 0028 0033 0029
-2477 PARENTHESIZED DIGIT FOUR
- # 0028 0034 0029
-2478 PARENTHESIZED DIGIT FIVE
- # 0028 0035 0029
-2479 PARENTHESIZED DIGIT SIX
- # 0028 0036 0029
-247A PARENTHESIZED DIGIT SEVEN
- # 0028 0037 0029
-247B PARENTHESIZED DIGIT EIGHT
- # 0028 0038 0029
-247C PARENTHESIZED DIGIT NINE
- # 0028 0039 0029
-247D PARENTHESIZED NUMBER TEN
- # 0028 0031 0030 0029
-247E PARENTHESIZED NUMBER ELEVEN
- # 0028 0031 0031 0029
-247F PARENTHESIZED NUMBER TWELVE
- # 0028 0031 0032 0029
-2480 PARENTHESIZED NUMBER THIRTEEN
- # 0028 0031 0033 0029
-2481 PARENTHESIZED NUMBER FOURTEEN
- # 0028 0031 0034 0029
-2482 PARENTHESIZED NUMBER FIFTEEN
- # 0028 0031 0035 0029
-2483 PARENTHESIZED NUMBER SIXTEEN
- # 0028 0031 0036 0029
-2484 PARENTHESIZED NUMBER SEVENTEEN
- # 0028 0031 0037 0029
-2485 PARENTHESIZED NUMBER EIGHTEEN
- # 0028 0031 0038 0029
-2486 PARENTHESIZED NUMBER NINETEEN
- # 0028 0031 0039 0029
-2487 PARENTHESIZED NUMBER TWENTY
- # 0028 0032 0030 0029
-@ Numbers period
-2488 DIGIT ONE FULL STOP
- # 0031 002E
-2489 DIGIT TWO FULL STOP
- # 0032 002E
-248A DIGIT THREE FULL STOP
- # 0033 002E
-248B DIGIT FOUR FULL STOP
- # 0034 002E
-248C DIGIT FIVE FULL STOP
- # 0035 002E
-248D DIGIT SIX FULL STOP
- # 0036 002E
-248E DIGIT SEVEN FULL STOP
- # 0037 002E
-248F DIGIT EIGHT FULL STOP
- # 0038 002E
-2490 DIGIT NINE FULL STOP
- # 0039 002E
-2491 NUMBER TEN FULL STOP
- # 0031 0030 002E
-2492 NUMBER ELEVEN FULL STOP
- # 0031 0031 002E
-2493 NUMBER TWELVE FULL STOP
- # 0031 0032 002E
-2494 NUMBER THIRTEEN FULL STOP
- # 0031 0033 002E
-2495 NUMBER FOURTEEN FULL STOP
- # 0031 0034 002E
-2496 NUMBER FIFTEEN FULL STOP
- # 0031 0035 002E
-2497 NUMBER SIXTEEN FULL STOP
- # 0031 0036 002E
-2498 NUMBER SEVENTEEN FULL STOP
- # 0031 0037 002E
-2499 NUMBER EIGHTEEN FULL STOP
- # 0031 0038 002E
-249A NUMBER NINETEEN FULL STOP
- # 0031 0039 002E
-249B NUMBER TWENTY FULL STOP
- # 0032 0030 002E
-@ Parenthesized Latin letters
-249C PARENTHESIZED LATIN SMALL LETTER A
- # 0028 0061 0029
-249D PARENTHESIZED LATIN SMALL LETTER B
- # 0028 0062 0029
-249E PARENTHESIZED LATIN SMALL LETTER C
- # 0028 0063 0029
-249F PARENTHESIZED LATIN SMALL LETTER D
- # 0028 0064 0029
-24A0 PARENTHESIZED LATIN SMALL LETTER E
- # 0028 0065 0029
-24A1 PARENTHESIZED LATIN SMALL LETTER F
- # 0028 0066 0029
-24A2 PARENTHESIZED LATIN SMALL LETTER G
- # 0028 0067 0029
-24A3 PARENTHESIZED LATIN SMALL LETTER H
- # 0028 0068 0029
-24A4 PARENTHESIZED LATIN SMALL LETTER I
- # 0028 0069 0029
-24A5 PARENTHESIZED LATIN SMALL LETTER J
- # 0028 006A 0029
-24A6 PARENTHESIZED LATIN SMALL LETTER K
- # 0028 006B 0029
-24A7 PARENTHESIZED LATIN SMALL LETTER L
- # 0028 006C 0029
-24A8 PARENTHESIZED LATIN SMALL LETTER M
- # 0028 006D 0029
-24A9 PARENTHESIZED LATIN SMALL LETTER N
- # 0028 006E 0029
-24AA PARENTHESIZED LATIN SMALL LETTER O
- # 0028 006F 0029
-24AB PARENTHESIZED LATIN SMALL LETTER P
- # 0028 0070 0029
-24AC PARENTHESIZED LATIN SMALL LETTER Q
- # 0028 0071 0029
-24AD PARENTHESIZED LATIN SMALL LETTER R
- # 0028 0072 0029
-24AE PARENTHESIZED LATIN SMALL LETTER S
- # 0028 0073 0029
-24AF PARENTHESIZED LATIN SMALL LETTER T
- # 0028 0074 0029
-24B0 PARENTHESIZED LATIN SMALL LETTER U
- # 0028 0075 0029
-24B1 PARENTHESIZED LATIN SMALL LETTER V
- # 0028 0076 0029
-24B2 PARENTHESIZED LATIN SMALL LETTER W
- # 0028 0077 0029
-24B3 PARENTHESIZED LATIN SMALL LETTER X
- # 0028 0078 0029
-24B4 PARENTHESIZED LATIN SMALL LETTER Y
- # 0028 0079 0029
-24B5 PARENTHESIZED LATIN SMALL LETTER Z
- # 0028 007A 0029
-@ Circled Latin letters
-24B6 CIRCLED LATIN CAPITAL LETTER A
- # <circle> 0041
-24B7 CIRCLED LATIN CAPITAL LETTER B
- # <circle> 0042
-24B8 CIRCLED LATIN CAPITAL LETTER C
- # <circle> 0043
-24B9 CIRCLED LATIN CAPITAL LETTER D
- # <circle> 0044
-24BA CIRCLED LATIN CAPITAL LETTER E
- # <circle> 0045
-24BB CIRCLED LATIN CAPITAL LETTER F
- # <circle> 0046
-24BC CIRCLED LATIN CAPITAL LETTER G
- # <circle> 0047
-24BD CIRCLED LATIN CAPITAL LETTER H
- # <circle> 0048
-24BE CIRCLED LATIN CAPITAL LETTER I
- # <circle> 0049
-24BF CIRCLED LATIN CAPITAL LETTER J
- # <circle> 004A
-24C0 CIRCLED LATIN CAPITAL LETTER K
- # <circle> 004B
-24C1 CIRCLED LATIN CAPITAL LETTER L
- # <circle> 004C
-24C2 CIRCLED LATIN CAPITAL LETTER M
- # <circle> 004D
-24C3 CIRCLED LATIN CAPITAL LETTER N
- # <circle> 004E
-24C4 CIRCLED LATIN CAPITAL LETTER O
- # <circle> 004F
-24C5 CIRCLED LATIN CAPITAL LETTER P
- # <circle> 0050
-24C6 CIRCLED LATIN CAPITAL LETTER Q
- # <circle> 0051
-24C7 CIRCLED LATIN CAPITAL LETTER R
- # <circle> 0052
-24C8 CIRCLED LATIN CAPITAL LETTER S
- # <circle> 0053
-24C9 CIRCLED LATIN CAPITAL LETTER T
- # <circle> 0054
-24CA CIRCLED LATIN CAPITAL LETTER U
- # <circle> 0055
-24CB CIRCLED LATIN CAPITAL LETTER V
- # <circle> 0056
-24CC CIRCLED LATIN CAPITAL LETTER W
- # <circle> 0057
-24CD CIRCLED LATIN CAPITAL LETTER X
- # <circle> 0058
-24CE CIRCLED LATIN CAPITAL LETTER Y
- # <circle> 0059
-24CF CIRCLED LATIN CAPITAL LETTER Z
- # <circle> 005A
-24D0 CIRCLED LATIN SMALL LETTER A
- # <circle> 0061
-24D1 CIRCLED LATIN SMALL LETTER B
- # <circle> 0062
-24D2 CIRCLED LATIN SMALL LETTER C
- # <circle> 0063
-24D3 CIRCLED LATIN SMALL LETTER D
- # <circle> 0064
-24D4 CIRCLED LATIN SMALL LETTER E
- # <circle> 0065
-24D5 CIRCLED LATIN SMALL LETTER F
- # <circle> 0066
-24D6 CIRCLED LATIN SMALL LETTER G
- # <circle> 0067
-24D7 CIRCLED LATIN SMALL LETTER H
- # <circle> 0068
-24D8 CIRCLED LATIN SMALL LETTER I
- # <circle> 0069
-24D9 CIRCLED LATIN SMALL LETTER J
- # <circle> 006A
-24DA CIRCLED LATIN SMALL LETTER K
- # <circle> 006B
-24DB CIRCLED LATIN SMALL LETTER L
- # <circle> 006C
-24DC CIRCLED LATIN SMALL LETTER M
- # <circle> 006D
-24DD CIRCLED LATIN SMALL LETTER N
- # <circle> 006E
-24DE CIRCLED LATIN SMALL LETTER O
- # <circle> 006F
-24DF CIRCLED LATIN SMALL LETTER P
- # <circle> 0070
-24E0 CIRCLED LATIN SMALL LETTER Q
- # <circle> 0071
-24E1 CIRCLED LATIN SMALL LETTER R
- # <circle> 0072
-24E2 CIRCLED LATIN SMALL LETTER S
- # <circle> 0073
-24E3 CIRCLED LATIN SMALL LETTER T
- # <circle> 0074
-24E4 CIRCLED LATIN SMALL LETTER U
- # <circle> 0075
-24E5 CIRCLED LATIN SMALL LETTER V
- # <circle> 0076
-24E6 CIRCLED LATIN SMALL LETTER W
- # <circle> 0077
-24E7 CIRCLED LATIN SMALL LETTER X
- # <circle> 0078
-24E8 CIRCLED LATIN SMALL LETTER Y
- # <circle> 0079
-24E9 CIRCLED LATIN SMALL LETTER Z
- # <circle> 007A
-@ Additional circled numbers
-24EA CIRCLED DIGIT ZERO
- # <circle> 0030
-@@ 2500 Box Drawing 257F
-@ Form and chart components
-2500 BOX DRAWINGS LIGHT HORIZONTAL
- = Videotex Mosaic DG 15
-2501 BOX DRAWINGS HEAVY HORIZONTAL
-2502 BOX DRAWINGS LIGHT VERTICAL
- = Videotex Mosaic DG 14
-2503 BOX DRAWINGS HEAVY VERTICAL
-2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
-2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
-2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
-2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
-2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
-2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
-250A BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
-250B BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
-250C BOX DRAWINGS LIGHT DOWN AND RIGHT
- = Videotex Mosaic DG 16
-250D BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
-250E BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
-250F BOX DRAWINGS HEAVY DOWN AND RIGHT
-2510 BOX DRAWINGS LIGHT DOWN AND LEFT
- = Videotex Mosaic DG 17
-2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
-2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
-2513 BOX DRAWINGS HEAVY DOWN AND LEFT
-2514 BOX DRAWINGS LIGHT UP AND RIGHT
- = Videotex Mosaic DG 18
-2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
-2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
-2517 BOX DRAWINGS HEAVY UP AND RIGHT
-2518 BOX DRAWINGS LIGHT UP AND LEFT
- = Videotex Mosaic DG 19
-2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY
-251A BOX DRAWINGS UP HEAVY AND LEFT LIGHT
-251B BOX DRAWINGS HEAVY UP AND LEFT
-251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
- = Videotex Mosaic DG 20
-251D BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
- = Videotex Mosaic DG 03
-251E BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
-251F BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
-2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
-2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
-2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
-2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT
-2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
- = Videotex Mosaic DG 21
-2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
- = Videotex Mosaic DG 04
-2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
-2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
-2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
-2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
-252A BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
-252B BOX DRAWINGS HEAVY VERTICAL AND LEFT
-252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
- = Videotex Mosaic DG 22
-252D BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
-252E BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
-252F BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
- = Videotex Mosaic DG 02
-2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
-2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
-2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
-2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
-2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
- = Videotex Mosaic DG 23
-2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
-2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
-2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
- = Videotex Mosaic DG 01
-2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
-2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
-253A BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
-253B BOX DRAWINGS HEAVY UP AND HORIZONTAL
-253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
- = Videotex Mosaic DG 24
-253D BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
-253E BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
-253F BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
- = Videotex Mosaic DG 13
-2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
-2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
-2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
-2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
-2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
-2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
-2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
-2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
-2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
-2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
-254A BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
-254B BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
-254C BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
-254D BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
-254E BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
-254F BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
-2550 BOX DRAWINGS DOUBLE HORIZONTAL
-2551 BOX DRAWINGS DOUBLE VERTICAL
-2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT
-2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-2557 BOX DRAWINGS DOUBLE DOWN AND LEFT
-2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-255A BOX DRAWINGS DOUBLE UP AND RIGHT
-255B BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-255D BOX DRAWINGS DOUBLE UP AND LEFT
-255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-255F BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-256B BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-256C BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-256D BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
-256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT
-256F BOX DRAWINGS LIGHT ARC UP AND LEFT
-2570 BOX DRAWINGS LIGHT ARC UP AND RIGHT
-2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
-2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
-2573 BOX DRAWINGS LIGHT DIAGONAL CROSS
-2574 BOX DRAWINGS LIGHT LEFT
-2575 BOX DRAWINGS LIGHT UP
-2576 BOX DRAWINGS LIGHT RIGHT
-2577 BOX DRAWINGS LIGHT DOWN
-2578 BOX DRAWINGS HEAVY LEFT
-2579 BOX DRAWINGS HEAVY UP
-257A BOX DRAWINGS HEAVY RIGHT
-257B BOX DRAWINGS HEAVY DOWN
-257C BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
-257D BOX DRAWINGS LIGHT UP AND HEAVY DOWN
-257E BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
-257F BOX DRAWINGS HEAVY UP AND LIGHT DOWN
-@@ 2580 Block Elements 259F
-@ Block elements
-2580 UPPER HALF BLOCK
-2581 LOWER ONE EIGHTH BLOCK
-2582 LOWER ONE QUARTER BLOCK
-2583 LOWER THREE EIGHTHS BLOCK
-2584 LOWER HALF BLOCK
-2585 LOWER FIVE EIGHTHS BLOCK
-2586 LOWER THREE QUARTERS BLOCK
-2587 LOWER SEVEN EIGHTHS BLOCK
-2588 FULL BLOCK
- = solid
- x (black square - 25A0)
-2589 LEFT SEVEN EIGHTHS BLOCK
-258A LEFT THREE QUARTERS BLOCK
-258B LEFT FIVE EIGHTHS BLOCK
-258C LEFT HALF BLOCK
-258D LEFT THREE EIGHTHS BLOCK
-258E LEFT ONE QUARTER BLOCK
-258F LEFT ONE EIGHTH BLOCK
-2590 RIGHT HALF BLOCK
-@ Shade characters
-2591 LIGHT SHADE
- * 25%
-2592 MEDIUM SHADE
- * 50%
-2593 DARK SHADE
- * 75%
-@ Block elements
-2594 UPPER ONE EIGHTH BLOCK
-2595 RIGHT ONE EIGHTH BLOCK
-@@ 25A0 Geometric Shapes 25FF
-@ Geometric shapes
-25A0 BLACK SQUARE
- x (full block - 2588)
-25A1 WHITE SQUARE
- = quadrature
- x (combining enclosing square - 20DE)
- x (ballot box - 2610)
-25A2 WHITE SQUARE WITH ROUNDED CORNERS
-25A3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
-25A4 SQUARE WITH HORIZONTAL FILL
-25A5 SQUARE WITH VERTICAL FILL
-25A6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
-25A7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
-25A8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
-25A9 SQUARE WITH DIAGONAL CROSSHATCH FILL
-25AA BLACK SMALL SQUARE
-25AB WHITE SMALL SQUARE
-25AC BLACK RECTANGLE
-25AD WHITE RECTANGLE
-25AE BLACK VERTICAL RECTANGLE
- = histogram marker
- x (end of proof - 220E)
-25AF WHITE VERTICAL RECTANGLE
- x (apl functional symbol squish quad - 2337)
- x (apl functional symbol quad - 2395)
-25B0 BLACK PARALLELOGRAM
-25B1 WHITE PARALLELOGRAM
-25B2 BLACK UP-POINTING TRIANGLE
-25B3 WHITE UP-POINTING TRIANGLE
- = trine
- x (increment - 2206)
-25B4 BLACK UP-POINTING SMALL TRIANGLE
-25B5 WHITE UP-POINTING SMALL TRIANGLE
-25B6 BLACK RIGHT-POINTING TRIANGLE
-25B7 WHITE RIGHT-POINTING TRIANGLE
- = z notation range restriction
-25B8 BLACK RIGHT-POINTING SMALL TRIANGLE
- x (triangular bullet - 2023)
-25B9 WHITE RIGHT-POINTING SMALL TRIANGLE
-25BA BLACK RIGHT-POINTING POINTER
-25BB WHITE RIGHT-POINTING POINTER
- = forward arrow indicator
- x (contains as normal subgroup - 22B3)
-25BC BLACK DOWN-POINTING TRIANGLE
-25BD WHITE DOWN-POINTING TRIANGLE
- x (nabla - 2207)
-25BE BLACK DOWN-POINTING SMALL TRIANGLE
-25BF WHITE DOWN-POINTING SMALL TRIANGLE
-25C0 BLACK LEFT-POINTING TRIANGLE
-25C1 WHITE LEFT-POINTING TRIANGLE
- = z notation domain restriction
-25C2 BLACK LEFT-POINTING SMALL TRIANGLE
-25C3 WHITE LEFT-POINTING SMALL TRIANGLE
-25C4 BLACK LEFT-POINTING POINTER
-25C5 WHITE LEFT-POINTING POINTER
- = backward arrow indicator
- x (normal subgroup of - 22B2)
-25C6 BLACK DIAMOND
- x (black diamond suit - 2666)
-25C7 WHITE DIAMOND
- x (combining enclosing diamond - 20DF)
- x (diamond operator - 22C4)
- x (white diamond suit - 2662)
-25C8 WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-25C9 FISHEYE
- = tainome (Japanese, a kind of bullet)
-25CA LOZENGE
- x (white diamond suit - 2662)
-25CB WHITE CIRCLE
- x (combining enclosing circle - 20DD)
- x (large circle - 25EF)
- x (ideographic number zero - 3007)
-25CC DOTTED CIRCLE
-25CD CIRCLE WITH VERTICAL FILL
-25CE BULLSEYE
- x (circled ring operator - 229A)
-25CF BLACK CIRCLE
-25D0 CIRCLE WITH LEFT HALF BLACK
-25D1 CIRCLE WITH RIGHT HALF BLACK
-25D2 CIRCLE WITH LOWER HALF BLACK
-25D3 CIRCLE WITH UPPER HALF BLACK
-25D4 CIRCLE WITH UPPER RIGHT QUADRANT BLACK
-25D5 CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
-25D6 LEFT HALF BLACK CIRCLE
-25D7 RIGHT HALF BLACK CIRCLE
-25D8 INVERSE BULLET
- x (bullet - 2022)
- x (white bullet - 25E6)
-25D9 INVERSE WHITE CIRCLE
-25DA UPPER HALF INVERSE WHITE CIRCLE
-25DB LOWER HALF INVERSE WHITE CIRCLE
-25DC UPPER LEFT QUADRANT CIRCULAR ARC
-25DD UPPER RIGHT QUADRANT CIRCULAR ARC
-25DE LOWER RIGHT QUADRANT CIRCULAR ARC
-25DF LOWER LEFT QUADRANT CIRCULAR ARC
-25E0 UPPER HALF CIRCLE
- x (arc - 2312)
-25E1 LOWER HALF CIRCLE
-25E2 BLACK LOWER RIGHT TRIANGLE
-25E3 BLACK LOWER LEFT TRIANGLE
-25E4 BLACK UPPER LEFT TRIANGLE
-25E5 BLACK UPPER RIGHT TRIANGLE
-25E6 WHITE BULLET
- x (bullet - 2022)
- x (ring operator - 2218)
- x (inverse bullet - 25D8)
-25E7 SQUARE WITH LEFT HALF BLACK
-25E8 SQUARE WITH RIGHT HALF BLACK
-25E9 SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
-25EA SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
-25EB WHITE SQUARE WITH VERTICAL BISECTING LINE
-25EC WHITE UP-POINTING TRIANGLE WITH DOT
-25ED UP-POINTING TRIANGLE WITH LEFT HALF BLACK
-25EE UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
-25EF LARGE CIRCLE
- x (combining enclosing circle - 20DD)
- x (white circle - 25CB)
- x (ideographic number zero - 3007)
-@ Control code graphics
-25F0 WHITE SQUARE WITH UPPER LEFT QUADRANT
-25F1 WHITE SQUARE WITH LOWER LEFT QUADRANT
-25F2 WHITE SQUARE WITH LOWER RIGHT QUADRANT
-25F3 WHITE SQUARE WITH UPPER RIGHT QUADRANT
-25F4 WHITE CIRCLE WITH UPPER LEFT QUADRANT
-25F5 WHITE CIRCLE WITH LOWER LEFT QUADRANT
-25F6 WHITE CIRCLE WITH LOWER RIGHT QUADRANT
-25F7 WHITE CIRCLE WITH UPPER RIGHT QUADRANT
-@@ 2600 Miscellaneous Symbols 26FF
-@ Weather and astrological symbols
-2600 BLACK SUN WITH RAYS
- = clear weather
- x (sun - 2609)
-2601 CLOUD
- = cloudy weather
-2602 UMBRELLA
- = rainy weather
-2603 SNOWMAN
- = snowy weather
-2604 COMET
-2605 BLACK STAR
- x (star operator - 22C6)
-2606 WHITE STAR
- x (stress outlined white star - 2729)
-2607 LIGHTNING
-2608 THUNDERSTORM
-2609 SUN
- x (circled dot operator - 2299)
- x (black sun with rays - 2600)
- x (white sun with rays - 263C)
-260A ASCENDING NODE
-260B DESCENDING NODE
-260C CONJUNCTION
-260D OPPOSITION
-@ Miscellaneous symbols
-260E BLACK TELEPHONE
-260F WHITE TELEPHONE
-2610 BALLOT BOX
- x (white square - 25A1)
-2611 BALLOT BOX WITH CHECK
-2612 BALLOT BOX WITH X
- x (squared times - 22A0)
-2613 SALTIRE
- = St. Andrew's Cross
- x (ballot x - 2717)
-2619 REVERSED ROTATED FLORAL HEART BULLET
- * a binding signature mark
- x (rotated floral heart bullet - 2767)
-@ Pointing hand symbols
-261A BLACK LEFT POINTING INDEX
-261B BLACK RIGHT POINTING INDEX
-261C WHITE LEFT POINTING INDEX
-261D WHITE UP POINTING INDEX
-261E WHITE RIGHT POINTING INDEX
- = fist (typographic term)
-261F WHITE DOWN POINTING INDEX
-@ Warning signs
-2620 SKULL AND CROSSBONES
- = poison
-2621 CAUTION SIGN
-2622 RADIOACTIVE SIGN
-2623 BIOHAZARD SIGN
-@ Medical and healing symbols
-2624 CADUCEUS
-2625 ANKH
-@ Religious and political symbols
-2626 ORTHODOX CROSS
-2627 CHI RHO
-2628 CROSS OF LORRAINE
-2629 CROSS OF JERUSALEM
-262A STAR AND CRESCENT
-262B FARSI SYMBOL
- = SYMBOL OF IRAN
-262C ADI SHAKTI
-262D HAMMER AND SICKLE
-262E PEACE SYMBOL
-262F YIN YANG
- x (tibetan symbol nor bu nyis -khyil - 0FCA)
-@ Yijing trigram symbols
-2630 TRIGRAM FOR HEAVEN
- = qian2
-2631 TRIGRAM FOR LAKE
- = dui4
-2632 TRIGRAM FOR FIRE
- = li2
-2633 TRIGRAM FOR THUNDER
- = zhen4
-2634 TRIGRAM FOR WIND
- = xun4
-2635 TRIGRAM FOR WATER
- = kan3
-2636 TRIGRAM FOR MOUNTAIN
- = gen4
-2637 TRIGRAM FOR EARTH
- = kun1
-@ Miscellaneous symbols
-2638 WHEEL OF DHARMA
- x (helm symbol - 2388)
-2639 WHITE FROWNING FACE
-263A WHITE SMILING FACE
- = have a nice day!
-263B BLACK SMILING FACE
-263C WHITE SUN WITH RAYS
- = compass
- x (sun - 2609)
-@ Astrological symbols
-263D FIRST QUARTER MOON
-263E LAST QUARTER MOON
-263F MERCURY
-2640 FEMALE SIGN
- = Venus
-2641 EARTH
- x (circled plus - 2295)
-2642 MALE SIGN
- = Mars
-2643 JUPITER
-2644 SATURN
-2645 URANUS
-2646 NEPTUNE
-2647 PLUTO
-@ Zodiacal symbols
-2648 ARIES
-2649 TAURUS
-264A GEMINI
-264B CANCER
-264C LEO
-264D VIRGO
- = minim (alternate glyph)
-264E LIBRA
-264F SCORPIUS
- = minim, drop
-2650 SAGITTARIUS
-2651 CAPRICORN
-2652 AQUARIUS
-2653 PISCES
-@ Chess symbols
-2654 WHITE CHESS KING
-2655 WHITE CHESS QUEEN
-2656 WHITE CHESS ROOK
-2657 WHITE CHESS BISHOP
-2658 WHITE CHESS KNIGHT
-2659 WHITE CHESS PAWN
-265A BLACK CHESS KING
-265B BLACK CHESS QUEEN
-265C BLACK CHESS ROOK
-265D BLACK CHESS BISHOP
-265E BLACK CHESS KNIGHT
-265F BLACK CHESS PAWN
-@ Playing card symbols
-2660 BLACK SPADE SUIT
-2661 WHITE HEART SUIT
-2662 WHITE DIAMOND SUIT
- x (white diamond - 25C7)
- x (lozenge - 25CA)
-2663 BLACK CLUB SUIT
- = shamrock
-2664 WHITE SPADE SUIT
-2665 BLACK HEART SUIT
- = valentine
- x (heavy black heart - 2764)
-2666 BLACK DIAMOND SUIT
- x (black diamond - 25C6)
-2667 WHITE CLUB SUIT
-@ Miscellaneous symbol
-2668 HOT SPRINGS
-@ Musical symbols
-2669 QUARTER NOTE
-266A EIGHTH NOTE
-266B BEAMED EIGHTH NOTES
-266C BEAMED SIXTEENTH NOTES
-266D MUSIC FLAT SIGN
-266E MUSIC NATURAL SIGN
-266F MUSIC SHARP SIGN
- = z notation infix bag count
-@ Syriac cross symbols
-@+ These symbols are used in liturgical texts of Syriac-speaking churches.
-2670 WEST SYRIAC CROSS
-2671 EAST SYRIAC CROSS
-@@ 2700 Dingbats 27BF
-@+ ITC Zapf dingbats series 100
-@ Miscellaneous
-2701 UPPER BLADE SCISSORS
-2702 BLACK SCISSORS
-2703 LOWER BLADE SCISSORS
-2704 WHITE SCISSORS
-2705 <reserved>
- x (black telephone - 260E)
-2706 TELEPHONE LOCATION SIGN
-2707 TAPE DRIVE
-2708 AIRPLANE
-2709 ENVELOPE
-270A <reserved>
- x (black right pointing index - 261B)
-270B <reserved>
- x (white right pointing index - 261E)
-270C VICTORY HAND
-270D WRITING HAND
-270E LOWER RIGHT PENCIL
-270F PENCIL
-2710 UPPER RIGHT PENCIL
-2711 WHITE NIB
-2712 BLACK NIB
-2713 CHECK MARK
- x (square root - 221A)
-2714 HEAVY CHECK MARK
-2715 MULTIPLICATION X
- x (multiplication sign - 00D7)
- x (box drawings light diagonal cross - 2573)
-2716 HEAVY MULTIPLICATION X
-2717 BALLOT X
- x (saltire - 2613)
-2718 HEAVY BALLOT X
-@ Crosses
-2719 OUTLINED GREEK CROSS
-271A HEAVY GREEK CROSS
-271B OPEN CENTRE CROSS
-271C HEAVY OPEN CENTRE CROSS
-271D LATIN CROSS
-271E SHADOWED WHITE LATIN CROSS
-271F OUTLINED LATIN CROSS
-2720 MALTESE CROSS
-@ Stars, asterisks and snowflakes
-2721 STAR OF DAVID
-2722 FOUR TEARDROP-SPOKED ASTERISK
-2723 FOUR BALLOON-SPOKED ASTERISK
-2724 HEAVY FOUR BALLOON-SPOKED ASTERISK
-2725 FOUR CLUB-SPOKED ASTERISK
-2726 BLACK FOUR POINTED STAR
-2727 WHITE FOUR POINTED STAR
-2728 <reserved>
- x (black star - 2605)
-2729 STRESS OUTLINED WHITE STAR
- x (white star - 2606)
-272A CIRCLED WHITE STAR
-272B OPEN CENTRE BLACK STAR
-272C BLACK CENTRE WHITE STAR
-272D OUTLINED BLACK STAR
-272E HEAVY OUTLINED BLACK STAR
-272F PINWHEEL STAR
-2730 SHADOWED WHITE STAR
-2731 HEAVY ASTERISK
- x (asterisk - 002A)
-2732 OPEN CENTRE ASTERISK
-2733 EIGHT SPOKED ASTERISK
-2734 EIGHT POINTED BLACK STAR
-2735 EIGHT POINTED PINWHEEL STAR
-2736 SIX POINTED BLACK STAR
- = sextile
-2737 EIGHT POINTED RECTILINEAR BLACK STAR
-2738 HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
-2739 TWELVE POINTED BLACK STAR
-273A SIXTEEN POINTED ASTERISK
- = starburst
-273B TEARDROP-SPOKED ASTERISK
-273C OPEN CENTRE TEARDROP-SPOKED ASTERISK
-273D HEAVY TEARDROP-SPOKED ASTERISK
-273E SIX PETALLED BLACK AND WHITE FLORETTE
-273F BLACK FLORETTE
-2740 WHITE FLORETTE
-2741 EIGHT PETALLED OUTLINED BLACK FLORETTE
-2742 CIRCLED OPEN CENTRE EIGHT POINTED STAR
-2743 HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
-2744 SNOWFLAKE
-2745 TIGHT TRIFOLIATE SNOWFLAKE
-2746 HEAVY CHEVRON SNOWFLAKE
-2747 SPARKLE
-2748 HEAVY SPARKLE
-2749 BALLOON-SPOKED ASTERISK
- = jack
-274A EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
-274B HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
- = turbofan
-@ Miscellaneous
-274C <reserved>
- x (black circle - 25CF)
-274D SHADOWED WHITE CIRCLE
-274E <reserved>
- x (black square - 25A0)
-274F LOWER RIGHT DROP-SHADOWED WHITE SQUARE
-2750 UPPER RIGHT DROP-SHADOWED WHITE SQUARE
-2751 LOWER RIGHT SHADOWED WHITE SQUARE
-2752 UPPER RIGHT SHADOWED WHITE SQUARE
-2753 <reserved>
- x (black up-pointing triangle - 25B2)
-2754 <reserved>
- x (black down-pointing triangle - 25BC)
-2755 <reserved>
- x (black diamond - 25C6)
-2756 BLACK DIAMOND MINUS WHITE X
-2757 <reserved>
- x (right half black circle - 25D7)
-2758 LIGHT VERTICAL BAR
- x (vertical line - 007C)
-2759 MEDIUM VERTICAL BAR
-275A HEAVY VERTICAL BAR
-@ Punctuation ornaments
-275B HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
- x (left single quotation mark - 2018)
-275C HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
- x (right single quotation mark - 2019)
-275D HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
- x (left double quotation mark - 201C)
-275E HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
- x (right double quotation mark - 201D)
-2761 CURVED STEM PARAGRAPH SIGN ORNAMENT
- x (pilcrow sign - 00B6)
-2762 HEAVY EXCLAMATION MARK ORNAMENT
- x (exclamation mark - 0021)
-2763 HEAVY HEART EXCLAMATION MARK ORNAMENT
-2764 HEAVY BLACK HEART
- x (black heart suit - 2665)
-2765 ROTATED HEAVY BLACK HEART BULLET
-2766 FLORAL HEART
- = Aldus leaf
-2767 ROTATED FLORAL HEART BULLET
- = hedera, ivy leaf
- x (reversed rotated floral heart bullet - 2619)
-2768 <reserved>
- x (black club suit - 2663)
-2769 <reserved>
- x (black diamond suit - 2666)
-276A <reserved>
- x (black heart suit - 2665)
-276B <reserved>
- x (black spade suit - 2660)
-@ Dingbat circled digits
-276C <reserved>
- x (circled digit one - 2460)
-276D <reserved>
- x (circled digit two - 2461)
-276E <reserved>
- x (circled digit three - 2462)
-276F <reserved>
- x (circled digit four - 2463)
-2770 <reserved>
- x (circled digit five - 2464)
-2771 <reserved>
- x (circled digit six - 2465)
-2772 <reserved>
- x (circled digit seven - 2466)
-2773 <reserved>
- x (circled digit eight - 2467)
-2774 <reserved>
- x (circled digit nine - 2468)
-2775 <reserved>
- x (circled number ten - 2469)
-2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE
-2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO
-2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE
-2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR
-277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE
-277B DINGBAT NEGATIVE CIRCLED DIGIT SIX
-277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
-277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
-277E DINGBAT NEGATIVE CIRCLED DIGIT NINE
-277F DINGBAT NEGATIVE CIRCLED NUMBER TEN
-2780 DINGBAT CIRCLED SANS-SERIF DIGIT ONE
-2781 DINGBAT CIRCLED SANS-SERIF DIGIT TWO
-2782 DINGBAT CIRCLED SANS-SERIF DIGIT THREE
-2783 DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
-2784 DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
-2785 DINGBAT CIRCLED SANS-SERIF DIGIT SIX
-2786 DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
-2787 DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
-2788 DINGBAT CIRCLED SANS-SERIF DIGIT NINE
-2789 DINGBAT CIRCLED SANS-SERIF NUMBER TEN
-278A DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
-278B DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
-278C DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
-278D DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
-278E DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
-278F DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
-2790 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
-2791 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
-2792 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
-2793 DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
-@ Dingbat arrows
-2794 HEAVY WIDE-HEADED RIGHTWARDS ARROW
-2795 <reserved>
- x (rightwards arrow - 2192)
-2796 <reserved>
- x (left right arrow - 2194)
-2797 <reserved>
- x (up down arrow - 2195)
-2798 HEAVY SOUTH EAST ARROW
-2799 HEAVY RIGHTWARDS ARROW
-279A HEAVY NORTH EAST ARROW
-279B DRAFTING POINT RIGHTWARDS ARROW
-279C HEAVY ROUND-TIPPED RIGHTWARDS ARROW
-279D TRIANGLE-HEADED RIGHTWARDS ARROW
-279E HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
-279F DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
-27A0 HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
-27A1 BLACK RIGHTWARDS ARROW
-27A2 THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
-27A3 THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
-27A4 BLACK RIGHTWARDS ARROWHEAD
-27A5 HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
-27A6 HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
-27A7 SQUAT BLACK RIGHTWARDS ARROW
-27A8 HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
-27A9 RIGHT-SHADED WHITE RIGHTWARDS ARROW
-27AA LEFT-SHADED WHITE RIGHTWARDS ARROW
-27AB BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
-27AC FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
-27AD HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27AE HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27AF NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27B1 NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
-27B2 CIRCLED HEAVY WHITE RIGHTWARDS ARROW
-27B3 WHITE-FEATHERED RIGHTWARDS ARROW
-27B4 BLACK-FEATHERED SOUTH EAST ARROW
-27B5 BLACK-FEATHERED RIGHTWARDS ARROW
-27B6 BLACK-FEATHERED NORTH EAST ARROW
-27B7 HEAVY BLACK-FEATHERED SOUTH EAST ARROW
-27B8 HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
-27B9 HEAVY BLACK-FEATHERED NORTH EAST ARROW
-27BA TEARDROP-BARBED RIGHTWARDS ARROW
-27BB HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
-27BC WEDGE-TAILED RIGHTWARDS ARROW
-27BD HEAVY WEDGE-TAILED RIGHTWARDS ARROW
-27BE OPEN-OUTLINED RIGHTWARDS ARROW
-@@ 2800 Braille Patterns 28FF
-@ Braille patterns
-2800 BRAILLE PATTERN BLANK
-2801 BRAILLE PATTERN DOTS-1
-2802 BRAILLE PATTERN DOTS-2
-2803 BRAILLE PATTERN DOTS-12
-2804 BRAILLE PATTERN DOTS-3
-2805 BRAILLE PATTERN DOTS-13
-2806 BRAILLE PATTERN DOTS-23
-2807 BRAILLE PATTERN DOTS-123
-2808 BRAILLE PATTERN DOTS-4
-2809 BRAILLE PATTERN DOTS-14
-280A BRAILLE PATTERN DOTS-24
-280B BRAILLE PATTERN DOTS-124
-280C BRAILLE PATTERN DOTS-34
-280D BRAILLE PATTERN DOTS-134
-280E BRAILLE PATTERN DOTS-234
-280F BRAILLE PATTERN DOTS-1234
-2810 BRAILLE PATTERN DOTS-5
-2811 BRAILLE PATTERN DOTS-15
-2812 BRAILLE PATTERN DOTS-25
-2813 BRAILLE PATTERN DOTS-125
-2814 BRAILLE PATTERN DOTS-35
-2815 BRAILLE PATTERN DOTS-135
-2816 BRAILLE PATTERN DOTS-235
-2817 BRAILLE PATTERN DOTS-1235
-2818 BRAILLE PATTERN DOTS-45
-2819 BRAILLE PATTERN DOTS-145
-281A BRAILLE PATTERN DOTS-245
-281B BRAILLE PATTERN DOTS-1245
-281C BRAILLE PATTERN DOTS-345
-281D BRAILLE PATTERN DOTS-1345
-281E BRAILLE PATTERN DOTS-2345
-281F BRAILLE PATTERN DOTS-12345
-2820 BRAILLE PATTERN DOTS-6
-2821 BRAILLE PATTERN DOTS-16
-2822 BRAILLE PATTERN DOTS-26
-2823 BRAILLE PATTERN DOTS-126
-2824 BRAILLE PATTERN DOTS-36
-2825 BRAILLE PATTERN DOTS-136
-2826 BRAILLE PATTERN DOTS-236
-2827 BRAILLE PATTERN DOTS-1236
-2828 BRAILLE PATTERN DOTS-46
-2829 BRAILLE PATTERN DOTS-146
-282A BRAILLE PATTERN DOTS-246
-282B BRAILLE PATTERN DOTS-1246
-282C BRAILLE PATTERN DOTS-346
-282D BRAILLE PATTERN DOTS-1346
-282E BRAILLE PATTERN DOTS-2346
-282F BRAILLE PATTERN DOTS-12346
-2830 BRAILLE PATTERN DOTS-56
-2831 BRAILLE PATTERN DOTS-156
-2832 BRAILLE PATTERN DOTS-256
-2833 BRAILLE PATTERN DOTS-1256
-2834 BRAILLE PATTERN DOTS-356
-2835 BRAILLE PATTERN DOTS-1356
-2836 BRAILLE PATTERN DOTS-2356
-2837 BRAILLE PATTERN DOTS-12356
-2838 BRAILLE PATTERN DOTS-456
-2839 BRAILLE PATTERN DOTS-1456
-283A BRAILLE PATTERN DOTS-2456
-283B BRAILLE PATTERN DOTS-12456
-283C BRAILLE PATTERN DOTS-3456
-283D BRAILLE PATTERN DOTS-13456
-283E BRAILLE PATTERN DOTS-23456
-283F BRAILLE PATTERN DOTS-123456
-2840 BRAILLE PATTERN DOTS-7
-2841 BRAILLE PATTERN DOTS-17
-2842 BRAILLE PATTERN DOTS-27
-2843 BRAILLE PATTERN DOTS-127
-2844 BRAILLE PATTERN DOTS-37
-2845 BRAILLE PATTERN DOTS-137
-2846 BRAILLE PATTERN DOTS-237
-2847 BRAILLE PATTERN DOTS-1237
-2848 BRAILLE PATTERN DOTS-47
-2849 BRAILLE PATTERN DOTS-147
-284A BRAILLE PATTERN DOTS-247
-284B BRAILLE PATTERN DOTS-1247
-284C BRAILLE PATTERN DOTS-347
-284D BRAILLE PATTERN DOTS-1347
-284E BRAILLE PATTERN DOTS-2347
-284F BRAILLE PATTERN DOTS-12347
-2850 BRAILLE PATTERN DOTS-57
-2851 BRAILLE PATTERN DOTS-157
-2852 BRAILLE PATTERN DOTS-257
-2853 BRAILLE PATTERN DOTS-1257
-2854 BRAILLE PATTERN DOTS-357
-2855 BRAILLE PATTERN DOTS-1357
-2856 BRAILLE PATTERN DOTS-2357
-2857 BRAILLE PATTERN DOTS-12357
-2858 BRAILLE PATTERN DOTS-457
-2859 BRAILLE PATTERN DOTS-1457
-285A BRAILLE PATTERN DOTS-2457
-285B BRAILLE PATTERN DOTS-12457
-285C BRAILLE PATTERN DOTS-3457
-285D BRAILLE PATTERN DOTS-13457
-285E BRAILLE PATTERN DOTS-23457
-285F BRAILLE PATTERN DOTS-123457
-2860 BRAILLE PATTERN DOTS-67
-2861 BRAILLE PATTERN DOTS-167
-2862 BRAILLE PATTERN DOTS-267
-2863 BRAILLE PATTERN DOTS-1267
-2864 BRAILLE PATTERN DOTS-367
-2865 BRAILLE PATTERN DOTS-1367
-2866 BRAILLE PATTERN DOTS-2367
-2867 BRAILLE PATTERN DOTS-12367
-2868 BRAILLE PATTERN DOTS-467
-2869 BRAILLE PATTERN DOTS-1467
-286A BRAILLE PATTERN DOTS-2467
-286B BRAILLE PATTERN DOTS-12467
-286C BRAILLE PATTERN DOTS-3467
-286D BRAILLE PATTERN DOTS-13467
-286E BRAILLE PATTERN DOTS-23467
-286F BRAILLE PATTERN DOTS-123467
-2870 BRAILLE PATTERN DOTS-567
-2871 BRAILLE PATTERN DOTS-1567
-2872 BRAILLE PATTERN DOTS-2567
-2873 BRAILLE PATTERN DOTS-12567
-2874 BRAILLE PATTERN DOTS-3567
-2875 BRAILLE PATTERN DOTS-13567
-2876 BRAILLE PATTERN DOTS-23567
-2877 BRAILLE PATTERN DOTS-123567
-2878 BRAILLE PATTERN DOTS-4567
-2879 BRAILLE PATTERN DOTS-14567
-287A BRAILLE PATTERN DOTS-24567
-287B BRAILLE PATTERN DOTS-124567
-287C BRAILLE PATTERN DOTS-34567
-287D BRAILLE PATTERN DOTS-134567
-287E BRAILLE PATTERN DOTS-234567
-287F BRAILLE PATTERN DOTS-1234567
-2880 BRAILLE PATTERN DOTS-8
-2881 BRAILLE PATTERN DOTS-18
-2882 BRAILLE PATTERN DOTS-28
-2883 BRAILLE PATTERN DOTS-128
-2884 BRAILLE PATTERN DOTS-38
-2885 BRAILLE PATTERN DOTS-138
-2886 BRAILLE PATTERN DOTS-238
-2887 BRAILLE PATTERN DOTS-1238
-2888 BRAILLE PATTERN DOTS-48
-2889 BRAILLE PATTERN DOTS-148
-288A BRAILLE PATTERN DOTS-248
-288B BRAILLE PATTERN DOTS-1248
-288C BRAILLE PATTERN DOTS-348
-288D BRAILLE PATTERN DOTS-1348
-288E BRAILLE PATTERN DOTS-2348
-288F BRAILLE PATTERN DOTS-12348
-2890 BRAILLE PATTERN DOTS-58
-2891 BRAILLE PATTERN DOTS-158
-2892 BRAILLE PATTERN DOTS-258
-2893 BRAILLE PATTERN DOTS-1258
-2894 BRAILLE PATTERN DOTS-358
-2895 BRAILLE PATTERN DOTS-1358
-2896 BRAILLE PATTERN DOTS-2358
-2897 BRAILLE PATTERN DOTS-12358
-2898 BRAILLE PATTERN DOTS-458
-2899 BRAILLE PATTERN DOTS-1458
-289A BRAILLE PATTERN DOTS-2458
-289B BRAILLE PATTERN DOTS-12458
-289C BRAILLE PATTERN DOTS-3458
-289D BRAILLE PATTERN DOTS-13458
-289E BRAILLE PATTERN DOTS-23458
-289F BRAILLE PATTERN DOTS-123458
-28A0 BRAILLE PATTERN DOTS-68
-28A1 BRAILLE PATTERN DOTS-168
-28A2 BRAILLE PATTERN DOTS-268
-28A3 BRAILLE PATTERN DOTS-1268
-28A4 BRAILLE PATTERN DOTS-368
-28A5 BRAILLE PATTERN DOTS-1368
-28A6 BRAILLE PATTERN DOTS-2368
-28A7 BRAILLE PATTERN DOTS-12368
-28A8 BRAILLE PATTERN DOTS-468
-28A9 BRAILLE PATTERN DOTS-1468
-28AA BRAILLE PATTERN DOTS-2468
-28AB BRAILLE PATTERN DOTS-12468
-28AC BRAILLE PATTERN DOTS-3468
-28AD BRAILLE PATTERN DOTS-13468
-28AE BRAILLE PATTERN DOTS-23468
-28AF BRAILLE PATTERN DOTS-123468
-28B0 BRAILLE PATTERN DOTS-568
-28B1 BRAILLE PATTERN DOTS-1568
-28B2 BRAILLE PATTERN DOTS-2568
-28B3 BRAILLE PATTERN DOTS-12568
-28B4 BRAILLE PATTERN DOTS-3568
-28B5 BRAILLE PATTERN DOTS-13568
-28B6 BRAILLE PATTERN DOTS-23568
-28B7 BRAILLE PATTERN DOTS-123568
-28B8 BRAILLE PATTERN DOTS-4568
-28B9 BRAILLE PATTERN DOTS-14568
-28BA BRAILLE PATTERN DOTS-24568
-28BB BRAILLE PATTERN DOTS-124568
-28BC BRAILLE PATTERN DOTS-34568
-28BD BRAILLE PATTERN DOTS-134568
-28BE BRAILLE PATTERN DOTS-234568
-28BF BRAILLE PATTERN DOTS-1234568
-28C0 BRAILLE PATTERN DOTS-78
-28C1 BRAILLE PATTERN DOTS-178
-28C2 BRAILLE PATTERN DOTS-278
-28C3 BRAILLE PATTERN DOTS-1278
-28C4 BRAILLE PATTERN DOTS-378
-28C5 BRAILLE PATTERN DOTS-1378
-28C6 BRAILLE PATTERN DOTS-2378
-28C7 BRAILLE PATTERN DOTS-12378
-28C8 BRAILLE PATTERN DOTS-478
-28C9 BRAILLE PATTERN DOTS-1478
-28CA BRAILLE PATTERN DOTS-2478
-28CB BRAILLE PATTERN DOTS-12478
-28CC BRAILLE PATTERN DOTS-3478
-28CD BRAILLE PATTERN DOTS-13478
-28CE BRAILLE PATTERN DOTS-23478
-28CF BRAILLE PATTERN DOTS-123478
-28D0 BRAILLE PATTERN DOTS-578
-28D1 BRAILLE PATTERN DOTS-1578
-28D2 BRAILLE PATTERN DOTS-2578
-28D3 BRAILLE PATTERN DOTS-12578
-28D4 BRAILLE PATTERN DOTS-3578
-28D5 BRAILLE PATTERN DOTS-13578
-28D6 BRAILLE PATTERN DOTS-23578
-28D7 BRAILLE PATTERN DOTS-123578
-28D8 BRAILLE PATTERN DOTS-4578
-28D9 BRAILLE PATTERN DOTS-14578
-28DA BRAILLE PATTERN DOTS-24578
-28DB BRAILLE PATTERN DOTS-124578
-28DC BRAILLE PATTERN DOTS-34578
-28DD BRAILLE PATTERN DOTS-134578
-28DE BRAILLE PATTERN DOTS-234578
-28DF BRAILLE PATTERN DOTS-1234578
-28E0 BRAILLE PATTERN DOTS-678
-28E1 BRAILLE PATTERN DOTS-1678
-28E2 BRAILLE PATTERN DOTS-2678
-28E3 BRAILLE PATTERN DOTS-12678
-28E4 BRAILLE PATTERN DOTS-3678
-28E5 BRAILLE PATTERN DOTS-13678
-28E6 BRAILLE PATTERN DOTS-23678
-28E7 BRAILLE PATTERN DOTS-123678
-28E8 BRAILLE PATTERN DOTS-4678
-28E9 BRAILLE PATTERN DOTS-14678
-28EA BRAILLE PATTERN DOTS-24678
-28EB BRAILLE PATTERN DOTS-124678
-28EC BRAILLE PATTERN DOTS-34678
-28ED BRAILLE PATTERN DOTS-134678
-28EE BRAILLE PATTERN DOTS-234678
-28EF BRAILLE PATTERN DOTS-1234678
-28F0 BRAILLE PATTERN DOTS-5678
-28F1 BRAILLE PATTERN DOTS-15678
-28F2 BRAILLE PATTERN DOTS-25678
-28F3 BRAILLE PATTERN DOTS-125678
-28F4 BRAILLE PATTERN DOTS-35678
-28F5 BRAILLE PATTERN DOTS-135678
-28F6 BRAILLE PATTERN DOTS-235678
-28F7 BRAILLE PATTERN DOTS-1235678
-28F8 BRAILLE PATTERN DOTS-45678
-28F9 BRAILLE PATTERN DOTS-145678
-28FA BRAILLE PATTERN DOTS-245678
-28FB BRAILLE PATTERN DOTS-1245678
-28FC BRAILLE PATTERN DOTS-345678
-28FD BRAILLE PATTERN DOTS-1345678
-28FE BRAILLE PATTERN DOTS-2345678
-28FF BRAILLE PATTERN DOTS-12345678
-@@ 2E80 CJK Radicals Supplement 2EFF
-@ CJK radicals supplement
-2E80 CJK RADICAL REPEAT
-2E81 CJK RADICAL CLIFF
-2E82 CJK RADICAL SECOND ONE
-2E83 CJK RADICAL SECOND TWO
-2E84 CJK RADICAL SECOND THREE
-2E85 CJK RADICAL PERSON
-2E86 CJK RADICAL BOX
-2E87 CJK RADICAL TABLE
-2E88 CJK RADICAL KNIFE ONE
-2E89 CJK RADICAL KNIFE TWO
-2E8A CJK RADICAL DIVINATION
-2E8B CJK RADICAL SEAL
-2E8C CJK RADICAL SMALL ONE
-2E8D CJK RADICAL SMALL TWO
-2E8E CJK RADICAL LAME ONE
-2E8F CJK RADICAL LAME TWO
-2E90 CJK RADICAL LAME THREE
-2E91 CJK RADICAL LAME FOUR
-2E92 CJK RADICAL SNAKE
-2E93 CJK RADICAL THREAD
-2E94 CJK RADICAL SNOUT ONE
-2E95 CJK RADICAL SNOUT TWO
-2E96 CJK RADICAL HEART ONE
-2E97 CJK RADICAL HEART TWO
-2E98 CJK RADICAL HAND
-2E99 CJK RADICAL RAP
-2E9B CJK RADICAL CHOKE
-2E9C CJK RADICAL SUN
-2E9D CJK RADICAL MOON
-2E9E CJK RADICAL DEATH
-2E9F CJK RADICAL MOTHER
- # 6BCD
-2EA0 CJK RADICAL CIVILIAN
-2EA1 CJK RADICAL WATER ONE
-2EA2 CJK RADICAL WATER TWO
-2EA3 CJK RADICAL FIRE
-2EA4 CJK RADICAL PAW ONE
-2EA5 CJK RADICAL PAW TWO
-2EA6 CJK RADICAL SIMPLIFIED HALF TREE TRUNK
-2EA7 CJK RADICAL COW
-2EA8 CJK RADICAL DOG
-2EA9 CJK RADICAL JADE
-2EAA CJK RADICAL BOLT OF CLOTH
-2EAB CJK RADICAL EYE
-2EAC CJK RADICAL SPIRIT ONE
-2EAD CJK RADICAL SPIRIT TWO
-2EAE CJK RADICAL BAMBOO
-2EAF CJK RADICAL SILK
-2EB0 CJK RADICAL C-SIMPLIFIED SILK
-2EB1 CJK RADICAL NET ONE
-2EB2 CJK RADICAL NET TWO
-2EB3 CJK RADICAL NET THREE
-2EB4 CJK RADICAL NET FOUR
-2EB5 CJK RADICAL MESH
-2EB6 CJK RADICAL SHEEP
-2EB7 CJK RADICAL RAM
-2EB8 CJK RADICAL EWE
-2EB9 CJK RADICAL OLD
-2EBA CJK RADICAL BRUSH ONE
-2EBB CJK RADICAL BRUSH TWO
-2EBC CJK RADICAL MEAT
-2EBD CJK RADICAL MORTAR
-2EBE CJK RADICAL GRASS ONE
-2EBF CJK RADICAL GRASS TWO
-2EC0 CJK RADICAL GRASS THREE
-2EC1 CJK RADICAL TIGER
-2EC2 CJK RADICAL CLOTHES
-2EC3 CJK RADICAL WEST ONE
-2EC4 CJK RADICAL WEST TWO
-2EC5 CJK RADICAL C-SIMPLIFIED SEE
-2EC6 CJK RADICAL SIMPLIFIED HORN
-2EC7 CJK RADICAL HORN
-2EC8 CJK RADICAL C-SIMPLIFIED SPEECH
-2EC9 CJK RADICAL C-SIMPLIFIED SHELL
-2ECA CJK RADICAL FOOT
-2ECB CJK RADICAL C-SIMPLIFIED CART
-2ECC CJK RADICAL SIMPLIFIED WALK
-2ECD CJK RADICAL WALK ONE
-2ECE CJK RADICAL WALK TWO
-2ECF CJK RADICAL CITY
-2ED0 CJK RADICAL C-SIMPLIFIED GOLD
-2ED1 CJK RADICAL LONG ONE
-2ED2 CJK RADICAL LONG TWO
-2ED3 CJK RADICAL C-SIMPLIFIED LONG
-2ED4 CJK RADICAL C-SIMPLIFIED GATE
-2ED5 CJK RADICAL MOUND ONE
-2ED6 CJK RADICAL MOUND TWO
-2ED7 CJK RADICAL RAIN
-2ED8 CJK RADICAL BLUE
-2ED9 CJK RADICAL C-SIMPLIFIED TANNED LEATHER
-2EDA CJK RADICAL C-SIMPLIFIED LEAF
-2EDB CJK RADICAL C-SIMPLIFIED WIND
-2EDC CJK RADICAL C-SIMPLIFIED FLY
-2EDD CJK RADICAL EAT ONE
-2EDE CJK RADICAL EAT TWO
-2EDF CJK RADICAL EAT THREE
-2EE0 CJK RADICAL C-SIMPLIFIED EAT
-2EE1 CJK RADICAL HEAD
-2EE2 CJK RADICAL C-SIMPLIFIED HORSE
-2EE3 CJK RADICAL BONE
-2EE4 CJK RADICAL GHOST
-2EE5 CJK RADICAL C-SIMPLIFIED FISH
-2EE6 CJK RADICAL C-SIMPLIFIED BIRD
-2EE7 CJK RADICAL C-SIMPLIFIED SALT
-2EE8 CJK RADICAL SIMPLIFIED WHEAT
-2EE9 CJK RADICAL SIMPLIFIED YELLOW
-2EEA CJK RADICAL C-SIMPLIFIED FROG
-2EEB CJK RADICAL J-SIMPLIFIED EVEN
-2EEC CJK RADICAL C-SIMPLIFIED EVEN
-2EED CJK RADICAL J-SIMPLIFIED TOOTH
-2EEE CJK RADICAL C-SIMPLIFIED TOOTH
-2EEF CJK RADICAL J-SIMPLIFIED DRAGON
-2EF0 CJK RADICAL C-SIMPLIFIED DRAGON
-2EF1 CJK RADICAL TURTLE
-2EF2 CJK RADICAL J-SIMPLIFIED TURTLE
-2EF3 CJK RADICAL C-SIMPLIFIED TURTLE
- # 9F9F
-@@ 2F00 Kangxi Radicals 2FDF
-@ Kangxi radicals
-2F00 KANGXI RADICAL ONE
- # 4E00
-2F01 KANGXI RADICAL LINE
- # 4E28
-2F02 KANGXI RADICAL DOT
- # 4E36
-2F03 KANGXI RADICAL SLASH
- # 4E3F
-2F04 KANGXI RADICAL SECOND
- # 4E59
-2F05 KANGXI RADICAL HOOK
- # 4E85
-2F06 KANGXI RADICAL TWO
- # 4E8C
-2F07 KANGXI RADICAL LID
- # 4EA0
-2F08 KANGXI RADICAL MAN
- # 4EBA
-2F09 KANGXI RADICAL LEGS
- # 513F
-2F0A KANGXI RADICAL ENTER
- # 5165
-2F0B KANGXI RADICAL EIGHT
- # 516B
-2F0C KANGXI RADICAL DOWN BOX
- # 5182
-2F0D KANGXI RADICAL COVER
- # 5196
-2F0E KANGXI RADICAL ICE
- # 51AB
-2F0F KANGXI RADICAL TABLE
- # 51E0
-2F10 KANGXI RADICAL OPEN BOX
- # 51F5
-2F11 KANGXI RADICAL KNIFE
- # 5200
-2F12 KANGXI RADICAL POWER
- # 529B
-2F13 KANGXI RADICAL WRAP
- # 52F9
-2F14 KANGXI RADICAL SPOON
- # 5315
-2F15 KANGXI RADICAL RIGHT OPEN BOX
- # 531A
-2F16 KANGXI RADICAL HIDING ENCLOSURE
- # 5338
-2F17 KANGXI RADICAL TEN
- # 5341
-2F18 KANGXI RADICAL DIVINATION
- # 535C
-2F19 KANGXI RADICAL SEAL
- # 5369
-2F1A KANGXI RADICAL CLIFF
- # 5382
-2F1B KANGXI RADICAL PRIVATE
- # 53B6
-2F1C KANGXI RADICAL AGAIN
- # 53C8
-2F1D KANGXI RADICAL MOUTH
- # 53E3
-2F1E KANGXI RADICAL ENCLOSURE
- # 56D7
-2F1F KANGXI RADICAL EARTH
- # 571F
-2F20 KANGXI RADICAL SCHOLAR
- # 58EB
-2F21 KANGXI RADICAL GO
- # 5902
-2F22 KANGXI RADICAL GO SLOWLY
- # 590A
-2F23 KANGXI RADICAL EVENING
- # 5915
-2F24 KANGXI RADICAL BIG
- # 5927
-2F25 KANGXI RADICAL WOMAN
- # 5973
-2F26 KANGXI RADICAL CHILD
- # 5B50
-2F27 KANGXI RADICAL ROOF
- # 5B80
-2F28 KANGXI RADICAL INCH
- # 5BF8
-2F29 KANGXI RADICAL SMALL
- # 5C0F
-2F2A KANGXI RADICAL LAME
- # 5C22
-2F2B KANGXI RADICAL CORPSE
- # 5C38
-2F2C KANGXI RADICAL SPROUT
- # 5C6E
-2F2D KANGXI RADICAL MOUNTAIN
- # 5C71
-2F2E KANGXI RADICAL RIVER
- # 5DDB
-2F2F KANGXI RADICAL WORK
- # 5DE5
-2F30 KANGXI RADICAL ONESELF
- # 5DF1
-2F31 KANGXI RADICAL TURBAN
- # 5DFE
-2F32 KANGXI RADICAL DRY
- # 5E72
-2F33 KANGXI RADICAL SHORT THREAD
- # 5E7A
-2F34 KANGXI RADICAL DOTTED CLIFF
- # 5E7F
-2F35 KANGXI RADICAL LONG STRIDE
- # 5EF4
-2F36 KANGXI RADICAL TWO HANDS
- # 5EFE
-2F37 KANGXI RADICAL SHOOT
- # 5F0B
-2F38 KANGXI RADICAL BOW
- # 5F13
-2F39 KANGXI RADICAL SNOUT
- # 5F50
-2F3A KANGXI RADICAL BRISTLE
- # 5F61
-2F3B KANGXI RADICAL STEP
- # 5F73
-2F3C KANGXI RADICAL HEART
- # 5FC3
-2F3D KANGXI RADICAL HALBERD
- # 6208
-2F3E KANGXI RADICAL DOOR
- # 6236
-2F3F KANGXI RADICAL HAND
- # 624B
-2F40 KANGXI RADICAL BRANCH
- # 652F
-2F41 KANGXI RADICAL RAP
- # 6534
-2F42 KANGXI RADICAL SCRIPT
- # 6587
-2F43 KANGXI RADICAL DIPPER
- # 6597
-2F44 KANGXI RADICAL AXE
- # 65A4
-2F45 KANGXI RADICAL SQUARE
- # 65B9
-2F46 KANGXI RADICAL NOT
- # 65E0
-2F47 KANGXI RADICAL SUN
- # 65E5
-2F48 KANGXI RADICAL SAY
- # 66F0
-2F49 KANGXI RADICAL MOON
- # 6708
-2F4A KANGXI RADICAL TREE
- # 6728
-2F4B KANGXI RADICAL LACK
- # 6B20
-2F4C KANGXI RADICAL STOP
- # 6B62
-2F4D KANGXI RADICAL DEATH
- # 6B79
-2F4E KANGXI RADICAL WEAPON
- # 6BB3
-2F4F KANGXI RADICAL DO NOT
- # 6BCB
-2F50 KANGXI RADICAL COMPARE
- # 6BD4
-2F51 KANGXI RADICAL FUR
- # 6BDB
-2F52 KANGXI RADICAL CLAN
- # 6C0F
-2F53 KANGXI RADICAL STEAM
- # 6C14
-2F54 KANGXI RADICAL WATER
- # 6C34
-2F55 KANGXI RADICAL FIRE
- # 706B
-2F56 KANGXI RADICAL CLAW
- # 722A
-2F57 KANGXI RADICAL FATHER
- # 7236
-2F58 KANGXI RADICAL DOUBLE X
- # 723B
-2F59 KANGXI RADICAL HALF TREE TRUNK
- # 723F
-2F5A KANGXI RADICAL SLICE
- # 7247
-2F5B KANGXI RADICAL FANG
- # 7259
-2F5C KANGXI RADICAL COW
- # 725B
-2F5D KANGXI RADICAL DOG
- # 72AC
-2F5E KANGXI RADICAL PROFOUND
- # 7384
-2F5F KANGXI RADICAL JADE
- # 7389
-2F60 KANGXI RADICAL MELON
- # 74DC
-2F61 KANGXI RADICAL TILE
- # 74E6
-2F62 KANGXI RADICAL SWEET
- # 7518
-2F63 KANGXI RADICAL LIFE
- # 751F
-2F64 KANGXI RADICAL USE
- # 7528
-2F65 KANGXI RADICAL FIELD
- # 7530
-2F66 KANGXI RADICAL BOLT OF CLOTH
- # 758B
-2F67 KANGXI RADICAL SICKNESS
- # 7592
-2F68 KANGXI RADICAL DOTTED TENT
- # 7676
-2F69 KANGXI RADICAL WHITE
- # 767D
-2F6A KANGXI RADICAL SKIN
- # 76AE
-2F6B KANGXI RADICAL DISH
- # 76BF
-2F6C KANGXI RADICAL EYE
- # 76EE
-2F6D KANGXI RADICAL SPEAR
- # 77DB
-2F6E KANGXI RADICAL ARROW
- # 77E2
-2F6F KANGXI RADICAL STONE
- # 77F3
-2F70 KANGXI RADICAL SPIRIT
- # 793A
-2F71 KANGXI RADICAL TRACK
- # 79B8
-2F72 KANGXI RADICAL GRAIN
- # 79BE
-2F73 KANGXI RADICAL CAVE
- # 7A74
-2F74 KANGXI RADICAL STAND
- # 7ACB
-2F75 KANGXI RADICAL BAMBOO
- # 7AF9
-2F76 KANGXI RADICAL RICE
- # 7C73
-2F77 KANGXI RADICAL SILK
- # 7CF8
-2F78 KANGXI RADICAL JAR
- # 7F36
-2F79 KANGXI RADICAL NET
- # 7F51
-2F7A KANGXI RADICAL SHEEP
- # 7F8A
-2F7B KANGXI RADICAL FEATHER
- # 7FBD
-2F7C KANGXI RADICAL OLD
- # 8001
-2F7D KANGXI RADICAL AND
- # 800C
-2F7E KANGXI RADICAL PLOW
- # 8012
-2F7F KANGXI RADICAL EAR
- # 8033
-2F80 KANGXI RADICAL BRUSH
- # 807F
-2F81 KANGXI RADICAL MEAT
- # 8089
-2F82 KANGXI RADICAL MINISTER
- # 81E3
-2F83 KANGXI RADICAL SELF
- # 81EA
-2F84 KANGXI RADICAL ARRIVE
- # 81F3
-2F85 KANGXI RADICAL MORTAR
- # 81FC
-2F86 KANGXI RADICAL TONGUE
- # 820C
-2F87 KANGXI RADICAL OPPOSE
- # 821B
-2F88 KANGXI RADICAL BOAT
- # 821F
-2F89 KANGXI RADICAL STOPPING
- # 826E
-2F8A KANGXI RADICAL COLOR
- # 8272
-2F8B KANGXI RADICAL GRASS
- # 8278
-2F8C KANGXI RADICAL TIGER
- # 864D
-2F8D KANGXI RADICAL INSECT
- # 866B
-2F8E KANGXI RADICAL BLOOD
- # 8840
-2F8F KANGXI RADICAL WALK ENCLOSURE
- # 884C
-2F90 KANGXI RADICAL CLOTHES
- # 8863
-2F91 KANGXI RADICAL WEST
- # 897E
-2F92 KANGXI RADICAL SEE
- # 898B
-2F93 KANGXI RADICAL HORN
- # 89D2
-2F94 KANGXI RADICAL SPEECH
- # 8A00
-2F95 KANGXI RADICAL VALLEY
- # 8C37
-2F96 KANGXI RADICAL BEAN
- # 8C46
-2F97 KANGXI RADICAL PIG
- # 8C55
-2F98 KANGXI RADICAL BADGER
- # 8C78
-2F99 KANGXI RADICAL SHELL
- # 8C9D
-2F9A KANGXI RADICAL RED
- # 8D64
-2F9B KANGXI RADICAL RUN
- # 8D70
-2F9C KANGXI RADICAL FOOT
- # 8DB3
-2F9D KANGXI RADICAL BODY
- # 8EAB
-2F9E KANGXI RADICAL CART
- # 8ECA
-2F9F KANGXI RADICAL BITTER
- # 8F9B
-2FA0 KANGXI RADICAL MORNING
- # 8FB0
-2FA1 KANGXI RADICAL WALK
- # 8FB5
-2FA2 KANGXI RADICAL CITY
- # 9091
-2FA3 KANGXI RADICAL WINE
- # 9149
-2FA4 KANGXI RADICAL DISTINGUISH
- # 91C6
-2FA5 KANGXI RADICAL VILLAGE
- # 91CC
-2FA6 KANGXI RADICAL GOLD
- # 91D1
-2FA7 KANGXI RADICAL LONG
- # 9577
-2FA8 KANGXI RADICAL GATE
- # 9580
-2FA9 KANGXI RADICAL MOUND
- # 961C
-2FAA KANGXI RADICAL SLAVE
- # 96B6
-2FAB KANGXI RADICAL SHORT TAILED BIRD
- # 96B9
-2FAC KANGXI RADICAL RAIN
- # 96E8
-2FAD KANGXI RADICAL BLUE
- # 9751
-2FAE KANGXI RADICAL WRONG
- # 975E
-2FAF KANGXI RADICAL FACE
- # 9762
-2FB0 KANGXI RADICAL LEATHER
- # 9769
-2FB1 KANGXI RADICAL TANNED LEATHER
- # 97CB
-2FB2 KANGXI RADICAL LEEK
- # 97ED
-2FB3 KANGXI RADICAL SOUND
- # 97F3
-2FB4 KANGXI RADICAL LEAF
- # 9801
-2FB5 KANGXI RADICAL WIND
- # 98A8
-2FB6 KANGXI RADICAL FLY
- # 98DB
-2FB7 KANGXI RADICAL EAT
- # 98DF
-2FB8 KANGXI RADICAL HEAD
- # 9996
-2FB9 KANGXI RADICAL FRAGRANT
- # 9999
-2FBA KANGXI RADICAL HORSE
- # 99AC
-2FBB KANGXI RADICAL BONE
- # 9AA8
-2FBC KANGXI RADICAL TALL
- # 9AD8
-2FBD KANGXI RADICAL HAIR
- # 9ADF
-2FBE KANGXI RADICAL FIGHT
- # 9B25
-2FBF KANGXI RADICAL SACRIFICIAL WINE
- # 9B2F
-2FC0 KANGXI RADICAL CAULDRON
- # 9B32
-2FC1 KANGXI RADICAL GHOST
- # 9B3C
-2FC2 KANGXI RADICAL FISH
- # 9B5A
-2FC3 KANGXI RADICAL BIRD
- # 9CE5
-2FC4 KANGXI RADICAL SALT
- # 9E75
-2FC5 KANGXI RADICAL DEER
- # 9E7F
-2FC6 KANGXI RADICAL WHEAT
- # 9EA5
-2FC7 KANGXI RADICAL HEMP
- # 9EBB
-2FC8 KANGXI RADICAL YELLOW
- # 9EC3
-2FC9 KANGXI RADICAL MILLET
- # 9ECD
-2FCA KANGXI RADICAL BLACK
- # 9ED1
-2FCB KANGXI RADICAL EMBROIDERY
- # 9EF9
-2FCC KANGXI RADICAL FROG
- # 9EFD
-2FCD KANGXI RADICAL TRIPOD
- # 9F0E
-2FCE KANGXI RADICAL DRUM
- # 9F13
-2FCF KANGXI RADICAL RAT
- # 9F20
-2FD0 KANGXI RADICAL NOSE
- # 9F3B
-2FD1 KANGXI RADICAL EVEN
- # 9F4A
-2FD2 KANGXI RADICAL TOOTH
- # 9F52
-2FD3 KANGXI RADICAL DRAGON
- # 9F8D
-2FD4 KANGXI RADICAL TURTLE
- # 9F9C
-2FD5 KANGXI RADICAL FLUTE
- # 9FA0
-@@ 2FF0 Ideographic Description Characters 2FFF
-@ Ideographic description characters
-@+ These are visibly displayed graphic characters, not invisible composition controls.
-2FF0 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
-2FF1 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
-2FF2 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
-2FF3 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
-2FF4 IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
-2FF5 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
-2FF6 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
-2FF7 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
-2FF8 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
-2FF9 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
-2FFA IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
-2FFB IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
-@@ 3000 CJK Symbols and Punctuation 303F
-@ CJK symbols and punctuation
-3000 IDEOGRAPHIC SPACE
- x (space - 0020)
- # <wide> 0020
-3001 IDEOGRAPHIC COMMA
- x (comma - 002C)
-3002 IDEOGRAPHIC FULL STOP
- x (full stop - 002E)
-3003 DITTO MARK
- x (double prime - 2033)
-3004 JAPANESE INDUSTRIAL STANDARD SYMBOL
-3005 IDEOGRAPHIC ITERATION MARK
-3006 IDEOGRAPHIC CLOSING MARK
-3007 IDEOGRAPHIC NUMBER ZERO
- x (combining enclosing circle - 20DD)
- x (white circle - 25CB)
- x (large circle - 25EF)
-3008 LEFT ANGLE BRACKET
- x (less-than sign - 003C)
- x (single left-pointing angle quotation mark - 2039)
- x (left-pointing angle bracket - 2329)
-3009 RIGHT ANGLE BRACKET
- x (greater-than sign - 003E)
- x (single right-pointing angle quotation mark - 203A)
- x (right-pointing angle bracket - 232A)
-300A LEFT DOUBLE ANGLE BRACKET
- = z notation left chevron bracket
- x (left-pointing double angle quotation mark - 00AB)
-300B RIGHT DOUBLE ANGLE BRACKET
- = z notation right chevron bracket
- x (right-pointing double angle quotation mark - 00BB)
-300C LEFT CORNER BRACKET
- x (left ceiling - 2308)
-300D RIGHT CORNER BRACKET
- * used as quotation marks
- x (right floor - 230B)
-300E LEFT WHITE CORNER BRACKET
-300F RIGHT WHITE CORNER BRACKET
- * used as quotation marks
-3010 LEFT BLACK LENTICULAR BRACKET
-3011 RIGHT BLACK LENTICULAR BRACKET
-3012 POSTAL MARK
-3013 GETA MARK
- * substitute for ideograph not in font
-3014 LEFT TORTOISE SHELL BRACKET
-3015 RIGHT TORTOISE SHELL BRACKET
-3016 LEFT WHITE LENTICULAR BRACKET
-3017 RIGHT WHITE LENTICULAR BRACKET
-3018 LEFT WHITE TORTOISE SHELL BRACKET
-3019 RIGHT WHITE TORTOISE SHELL BRACKET
-301A LEFT WHITE SQUARE BRACKET
- = z notation left bag bracket
-301B RIGHT WHITE SQUARE BRACKET
- = z notation right bag bracket
-301C WAVE DASH
-@+ * This character was encoded to match JIS C 6226-1978 1-33 "wave dash". Subsequent revisions of the JIS standard and industry practice have settled on JIS 1-33 as being the fullwidth tilde character.
- x (wavy dash - 3030)
- x (fullwidth tilde - FF5E)
-301D REVERSED DOUBLE PRIME QUOTATION MARK
- * sometimes depicted as double prime quotation mark
- x (left double quotation mark - 201C)
- x (reversed double prime - 2036)
-301E DOUBLE PRIME QUOTATION MARK
- * this is a mistaken analogue to 201D; 301F is preferred
- x (right double quotation mark - 201D)
- x (double prime - 2033)
-301F LOW DOUBLE PRIME QUOTATION MARK
- * may be depicted as low inverse double prime quotation mark
-3020 POSTAL MARK FACE
-@ Hangzhou-style numerals
-3021 HANGZHOU NUMERAL ONE
-3022 HANGZHOU NUMERAL TWO
-3023 HANGZHOU NUMERAL THREE
-3024 HANGZHOU NUMERAL FOUR
-3025 HANGZHOU NUMERAL FIVE
-3026 HANGZHOU NUMERAL SIX
-3027 HANGZHOU NUMERAL SEVEN
-3028 HANGZHOU NUMERAL EIGHT
-3029 HANGZHOU NUMERAL NINE
-@ Diacritics
-302A IDEOGRAPHIC LEVEL TONE MARK
-302B IDEOGRAPHIC RISING TONE MARK
-302C IDEOGRAPHIC DEPARTING TONE MARK
-302D IDEOGRAPHIC ENTERING TONE MARK
-302E HANGUL SINGLE DOT TONE MARK
- = single dot Bangjeom
-302F HANGUL DOUBLE DOT TONE MARK
- = double dot Bangjeom
-@ Other CJK symbols
-3030 WAVY DASH
- x (wavy line - 2307)
- x (wave dash - 301C)
-3031 VERTICAL KANA REPEAT MARK
-3032 VERTICAL KANA REPEAT WITH VOICED SOUND MARK
- * the preceding two semantic characters are preferred to the following three glyphic forms
-3033 VERTICAL KANA REPEAT MARK UPPER HALF
-3034 VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
- * the preceding two are glyphs used in conjunction with the following glyph
-3035 VERTICAL KANA REPEAT MARK LOWER HALF
-3036 CIRCLED POSTAL MARK
- # 3012 postal mark
-3037 IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
-@ Additional Hangzhou-style numerals
-3038 HANGZHOU NUMERAL TEN
- # 5341
-3039 HANGZHOU NUMERAL TWENTY
- # 5344
-303A HANGZHOU NUMERAL THIRTY
- # 5345
-@ Special CJK indicators
-@+ These are visibly displayed graphic characters, not invisible formatting controls.
-303E IDEOGRAPHIC VARIATION INDICATOR
- * visual indicator that the following ideograph is to be taken as a variant of the intended character
-303F IDEOGRAPHIC HALF FILL SPACE
- * visual indicator of a screen space for half of an ideograph
-@@ 3040 Hiragana 309F
-@ Based on JIS X 0208
-3041 HIRAGANA LETTER SMALL A
-3042 HIRAGANA LETTER A
-3043 HIRAGANA LETTER SMALL I
-3044 HIRAGANA LETTER I
-3045 HIRAGANA LETTER SMALL U
-3046 HIRAGANA LETTER U
-3047 HIRAGANA LETTER SMALL E
-3048 HIRAGANA LETTER E
-3049 HIRAGANA LETTER SMALL O
-304A HIRAGANA LETTER O
-304B HIRAGANA LETTER KA
-304C HIRAGANA LETTER GA
- : 304B 3099
-304D HIRAGANA LETTER KI
-304E HIRAGANA LETTER GI
- : 304D 3099
-304F HIRAGANA LETTER KU
-3050 HIRAGANA LETTER GU
- : 304F 3099
-3051 HIRAGANA LETTER KE
-3052 HIRAGANA LETTER GE
- : 3051 3099
-3053 HIRAGANA LETTER KO
-3054 HIRAGANA LETTER GO
- : 3053 3099
-3055 HIRAGANA LETTER SA
-3056 HIRAGANA LETTER ZA
- : 3055 3099
-3057 HIRAGANA LETTER SI
- = SHI
-3058 HIRAGANA LETTER ZI
- = JI (not unique)
- : 3057 3099
-3059 HIRAGANA LETTER SU
-305A HIRAGANA LETTER ZU
- : 3059 3099
-305B HIRAGANA LETTER SE
-305C HIRAGANA LETTER ZE
- : 305B 3099
-305D HIRAGANA LETTER SO
-305E HIRAGANA LETTER ZO
- : 305D 3099
-305F HIRAGANA LETTER TA
-3060 HIRAGANA LETTER DA
- : 305F 3099
-3061 HIRAGANA LETTER TI
- = CHI
-3062 HIRAGANA LETTER DI
- = JI (not unique)
- : 3061 3099
-3063 HIRAGANA LETTER SMALL TU
- = SMALL TSU
-3064 HIRAGANA LETTER TU
- = TSU
-3065 HIRAGANA LETTER DU
- = ZU (not unique)
- : 3064 3099
-3066 HIRAGANA LETTER TE
-3067 HIRAGANA LETTER DE
- : 3066 3099
-3068 HIRAGANA LETTER TO
-3069 HIRAGANA LETTER DO
- : 3068 3099
-306A HIRAGANA LETTER NA
-306B HIRAGANA LETTER NI
-306C HIRAGANA LETTER NU
-306D HIRAGANA LETTER NE
-306E HIRAGANA LETTER NO
-306F HIRAGANA LETTER HA
-3070 HIRAGANA LETTER BA
- : 306F 3099
-3071 HIRAGANA LETTER PA
- : 306F 309A
-3072 HIRAGANA LETTER HI
-3073 HIRAGANA LETTER BI
- : 3072 3099
-3074 HIRAGANA LETTER PI
- : 3072 309A
-3075 HIRAGANA LETTER HU
- = FU
-3076 HIRAGANA LETTER BU
- : 3075 3099
-3077 HIRAGANA LETTER PU
- : 3075 309A
-3078 HIRAGANA LETTER HE
-3079 HIRAGANA LETTER BE
- : 3078 3099
-307A HIRAGANA LETTER PE
- : 3078 309A
-307B HIRAGANA LETTER HO
-307C HIRAGANA LETTER BO
- : 307B 3099
-307D HIRAGANA LETTER PO
- : 307B 309A
-307E HIRAGANA LETTER MA
-307F HIRAGANA LETTER MI
-3080 HIRAGANA LETTER MU
-3081 HIRAGANA LETTER ME
-3082 HIRAGANA LETTER MO
-3083 HIRAGANA LETTER SMALL YA
-3084 HIRAGANA LETTER YA
-3085 HIRAGANA LETTER SMALL YU
-3086 HIRAGANA LETTER YU
-3087 HIRAGANA LETTER SMALL YO
-3088 HIRAGANA LETTER YO
-3089 HIRAGANA LETTER RA
-308A HIRAGANA LETTER RI
-308B HIRAGANA LETTER RU
-308C HIRAGANA LETTER RE
-308D HIRAGANA LETTER RO
-308E HIRAGANA LETTER SMALL WA
-308F HIRAGANA LETTER WA
-3090 HIRAGANA LETTER WI
-3091 HIRAGANA LETTER WE
-3092 HIRAGANA LETTER WO
-3093 HIRAGANA LETTER N
-3094 HIRAGANA LETTER VU
- : 3046 3099
-@ Voicing marks
-3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
-309A COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-309B KATAKANA-HIRAGANA VOICED SOUND MARK
- # 0020 3099
-309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
- # 0020 309A
-@ Iteration marks
-309D HIRAGANA ITERATION MARK
-309E HIRAGANA VOICED ITERATION MARK
- : 309D 3099
-@@ 30A0 Katakana 30FF
-@ Based on JIS X 0208
-30A1 KATAKANA LETTER SMALL A
-30A2 KATAKANA LETTER A
-30A3 KATAKANA LETTER SMALL I
-30A4 KATAKANA LETTER I
-30A5 KATAKANA LETTER SMALL U
-30A6 KATAKANA LETTER U
-30A7 KATAKANA LETTER SMALL E
-30A8 KATAKANA LETTER E
-30A9 KATAKANA LETTER SMALL O
-30AA KATAKANA LETTER O
-30AB KATAKANA LETTER KA
-30AC KATAKANA LETTER GA
- : 30AB 3099
-30AD KATAKANA LETTER KI
-30AE KATAKANA LETTER GI
- : 30AD 3099
-30AF KATAKANA LETTER KU
-30B0 KATAKANA LETTER GU
- : 30AF 3099
-30B1 KATAKANA LETTER KE
-30B2 KATAKANA LETTER GE
- : 30B1 3099
-30B3 KATAKANA LETTER KO
-30B4 KATAKANA LETTER GO
- : 30B3 3099
-30B5 KATAKANA LETTER SA
-30B6 KATAKANA LETTER ZA
- : 30B5 3099
-30B7 KATAKANA LETTER SI
- = SHI
-30B8 KATAKANA LETTER ZI
- = JI (not unique)
- : 30B7 3099
-30B9 KATAKANA LETTER SU
-30BA KATAKANA LETTER ZU
- : 30B9 3099
-30BB KATAKANA LETTER SE
-30BC KATAKANA LETTER ZE
- : 30BB 3099
-30BD KATAKANA LETTER SO
-30BE KATAKANA LETTER ZO
- : 30BD 3099
-30BF KATAKANA LETTER TA
-30C0 KATAKANA LETTER DA
- : 30BF 3099
-30C1 KATAKANA LETTER TI
- = CHI
-30C2 KATAKANA LETTER DI
- = JI (not unique)
- : 30C1 3099
-30C3 KATAKANA LETTER SMALL TU
- = SMALL TSU
-30C4 KATAKANA LETTER TU
- = TSU
-30C5 KATAKANA LETTER DU
- = ZU (not unique)
- : 30C4 3099
-30C6 KATAKANA LETTER TE
-30C7 KATAKANA LETTER DE
- : 30C6 3099
-30C8 KATAKANA LETTER TO
-30C9 KATAKANA LETTER DO
- : 30C8 3099
-30CA KATAKANA LETTER NA
-30CB KATAKANA LETTER NI
-30CC KATAKANA LETTER NU
-30CD KATAKANA LETTER NE
-30CE KATAKANA LETTER NO
-30CF KATAKANA LETTER HA
-30D0 KATAKANA LETTER BA
- : 30CF 3099
-30D1 KATAKANA LETTER PA
- : 30CF 309A
-30D2 KATAKANA LETTER HI
-30D3 KATAKANA LETTER BI
- : 30D2 3099
-30D4 KATAKANA LETTER PI
- : 30D2 309A
-30D5 KATAKANA LETTER HU
- = FU
-30D6 KATAKANA LETTER BU
- : 30D5 3099
-30D7 KATAKANA LETTER PU
- : 30D5 309A
-30D8 KATAKANA LETTER HE
-30D9 KATAKANA LETTER BE
- : 30D8 3099
-30DA KATAKANA LETTER PE
- : 30D8 309A
-30DB KATAKANA LETTER HO
-30DC KATAKANA LETTER BO
- : 30DB 3099
-30DD KATAKANA LETTER PO
- : 30DB 309A
-30DE KATAKANA LETTER MA
-30DF KATAKANA LETTER MI
-30E0 KATAKANA LETTER MU
-30E1 KATAKANA LETTER ME
-30E2 KATAKANA LETTER MO
-30E3 KATAKANA LETTER SMALL YA
-30E4 KATAKANA LETTER YA
-30E5 KATAKANA LETTER SMALL YU
-30E6 KATAKANA LETTER YU
-30E7 KATAKANA LETTER SMALL YO
-30E8 KATAKANA LETTER YO
-30E9 KATAKANA LETTER RA
-30EA KATAKANA LETTER RI
-30EB KATAKANA LETTER RU
-30EC KATAKANA LETTER RE
-30ED KATAKANA LETTER RO
-30EE KATAKANA LETTER SMALL WA
-30EF KATAKANA LETTER WA
-30F0 KATAKANA LETTER WI
-30F1 KATAKANA LETTER WE
-30F2 KATAKANA LETTER WO
-30F3 KATAKANA LETTER N
-30F4 KATAKANA LETTER VU
- : 30A6 3099
-30F5 KATAKANA LETTER SMALL KA
-30F6 KATAKANA LETTER SMALL KE
-30F7 KATAKANA LETTER VA
- : 30EF 3099
-30F8 KATAKANA LETTER VI
- : 30F0 3099
-30F9 KATAKANA LETTER VE
- : 30F1 3099
-30FA KATAKANA LETTER VO
- : 30F2 3099
-@ Conjunction and length marks
-30FB KATAKANA MIDDLE DOT
- x (middle dot - 00B7)
-30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK
- x (em dash - 2014)
-@ Iteration marks
-30FD KATAKANA ITERATION MARK
-30FE KATAKANA VOICED ITERATION MARK
- : 30FD 3099
-@@ 3100 Bopomofo 312F
-@+ See also the Bopomofo Extended block
-@ Based on GB 2312
-3105 BOPOMOFO LETTER B
-3106 BOPOMOFO LETTER P
-3107 BOPOMOFO LETTER M
-3108 BOPOMOFO LETTER F
-3109 BOPOMOFO LETTER D
-310A BOPOMOFO LETTER T
-310B BOPOMOFO LETTER N
-310C BOPOMOFO LETTER L
-310D BOPOMOFO LETTER G
-310E BOPOMOFO LETTER K
-310F BOPOMOFO LETTER H
-3110 BOPOMOFO LETTER J
-3111 BOPOMOFO LETTER Q
-3112 BOPOMOFO LETTER X
-3113 BOPOMOFO LETTER ZH
-3114 BOPOMOFO LETTER CH
-3115 BOPOMOFO LETTER SH
-3116 BOPOMOFO LETTER R
-3117 BOPOMOFO LETTER Z
-3118 BOPOMOFO LETTER C
-3119 BOPOMOFO LETTER S
-311A BOPOMOFO LETTER A
-311B BOPOMOFO LETTER O
-311C BOPOMOFO LETTER E
-311D BOPOMOFO LETTER EH
-311E BOPOMOFO LETTER AI
-311F BOPOMOFO LETTER EI
-3120 BOPOMOFO LETTER AU
-3121 BOPOMOFO LETTER OU
-3122 BOPOMOFO LETTER AN
-3123 BOPOMOFO LETTER EN
-3124 BOPOMOFO LETTER ANG
-3125 BOPOMOFO LETTER ENG
-3126 BOPOMOFO LETTER ER
-3127 BOPOMOFO LETTER I
-3128 BOPOMOFO LETTER U
-3129 BOPOMOFO LETTER IU
-@ Dialect (non-Mandarin) letters
-312A BOPOMOFO LETTER V
-312B BOPOMOFO LETTER NG
-312C BOPOMOFO LETTER GN
-@@ 3130 Hangul Compatibility Jamo 318F
-@ Modern letters
-3131 HANGUL LETTER KIYEOK
- # 1100 hangul choseong kiyeok
-3132 HANGUL LETTER SSANGKIYEOK
- # 1101 hangul choseong ssangkiyeok
-3133 HANGUL LETTER KIYEOK-SIOS
- # 11AA hangul jongseong kiyeok-sios
-3134 HANGUL LETTER NIEUN
- # 1102 hangul choseong nieun
-3135 HANGUL LETTER NIEUN-CIEUC
- # 11AC hangul jongseong nieun-cieuc
-3136 HANGUL LETTER NIEUN-HIEUH
- # 11AD hangul jongseong nieun-hieuh
-3137 HANGUL LETTER TIKEUT
- # 1103 hangul choseong tikeut
-3138 HANGUL LETTER SSANGTIKEUT
- # 1104 hangul choseong ssangtikeut
-3139 HANGUL LETTER RIEUL
- # 1105 hangul choseong rieul
-313A HANGUL LETTER RIEUL-KIYEOK
- # 11B0 hangul jongseong rieul-kiyeok
-313B HANGUL LETTER RIEUL-MIEUM
- # 11B1 hangul jongseong rieul-mieum
-313C HANGUL LETTER RIEUL-PIEUP
- # 11B2 hangul jongseong rieul-pieup
-313D HANGUL LETTER RIEUL-SIOS
- # 11B3 hangul jongseong rieul-sios
-313E HANGUL LETTER RIEUL-THIEUTH
- # 11B4 hangul jongseong rieul-thieuth
-313F HANGUL LETTER RIEUL-PHIEUPH
- # 11B5 hangul jongseong rieul-phieuph
-3140 HANGUL LETTER RIEUL-HIEUH
- # 111A hangul choseong rieul-hieuh
-3141 HANGUL LETTER MIEUM
- # 1106 hangul choseong mieum
-3142 HANGUL LETTER PIEUP
- # 1107 hangul choseong pieup
-3143 HANGUL LETTER SSANGPIEUP
- # 1108 hangul choseong ssangpieup
-3144 HANGUL LETTER PIEUP-SIOS
- # 1121 hangul choseong pieup-sios
-3145 HANGUL LETTER SIOS
- # 1109 hangul choseong sios
-3146 HANGUL LETTER SSANGSIOS
- # 110A hangul choseong ssangsios
-3147 HANGUL LETTER IEUNG
- # 110B hangul choseong ieung
-3148 HANGUL LETTER CIEUC
- # 110C hangul choseong cieuc
-3149 HANGUL LETTER SSANGCIEUC
- # 110D hangul choseong ssangcieuc
-314A HANGUL LETTER CHIEUCH
- # 110E hangul choseong chieuch
-314B HANGUL LETTER KHIEUKH
- # 110F hangul choseong khieukh
-314C HANGUL LETTER THIEUTH
- # 1110 hangul choseong thieuth
-314D HANGUL LETTER PHIEUPH
- # 1111 hangul choseong phieuph
-314E HANGUL LETTER HIEUH
- # 1112 hangul choseong hieuh
-314F HANGUL LETTER A
- # 1161 hangul jungseong a
-3150 HANGUL LETTER AE
- # 1162 hangul jungseong ae
-3151 HANGUL LETTER YA
- # 1163 hangul jungseong ya
-3152 HANGUL LETTER YAE
- # 1164 hangul jungseong yae
-3153 HANGUL LETTER EO
- # 1165 hangul jungseong eo
-3154 HANGUL LETTER E
- # 1166 hangul jungseong e
-3155 HANGUL LETTER YEO
- # 1167 hangul jungseong yeo
-3156 HANGUL LETTER YE
- # 1168 hangul jungseong ye
-3157 HANGUL LETTER O
- # 1169 hangul jungseong o
-3158 HANGUL LETTER WA
- # 116A hangul jungseong wa
-3159 HANGUL LETTER WAE
- # 116B hangul jungseong wae
-315A HANGUL LETTER OE
- # 116C hangul jungseong oe
-315B HANGUL LETTER YO
- # 116D hangul jungseong yo
-315C HANGUL LETTER U
- # 116E hangul jungseong u
-315D HANGUL LETTER WEO
- # 116F hangul jungseong weo
-315E HANGUL LETTER WE
- # 1170 hangul jungseong we
-315F HANGUL LETTER WI
- # 1171 hangul jungseong wi
-3160 HANGUL LETTER YU
- # 1172 hangul jungseong yu
-3161 HANGUL LETTER EU
- # 1173 hangul jungseong eu
-3162 HANGUL LETTER YI
- # 1174 hangul jungseong yi
-3163 HANGUL LETTER I
- # 1175 hangul jungseong i
-@ Special character
-3164 HANGUL FILLER
- = HANGUL CAE OM
- # 1160 hangul jungseong filler
-@ Archaic letters
-3165 HANGUL LETTER SSANGNIEUN
- # 1114 hangul choseong ssangnieun
-3166 HANGUL LETTER NIEUN-TIKEUT
- # 1115 hangul choseong nieun-tikeut
-3167 HANGUL LETTER NIEUN-SIOS
- # 11C7 hangul jongseong nieun-sios
-3168 HANGUL LETTER NIEUN-PANSIOS
- # 11C8 hangul jongseong nieun-pansios
-3169 HANGUL LETTER RIEUL-KIYEOK-SIOS
- # 11CC hangul jongseong rieul-kiyeok-sios
-316A HANGUL LETTER RIEUL-TIKEUT
- # 11CE hangul jongseong rieul-tikeut
-316B HANGUL LETTER RIEUL-PIEUP-SIOS
- # 11D3 hangul jongseong rieul-pieup-sios
-316C HANGUL LETTER RIEUL-PANSIOS
- # 11D7 hangul jongseong rieul-pansios
-316D HANGUL LETTER RIEUL-YEORINHIEUH
- # 11D9 hangul jongseong rieul-yeorinhieuh
-316E HANGUL LETTER MIEUM-PIEUP
- # 111C hangul choseong mieum-pieup
-316F HANGUL LETTER MIEUM-SIOS
- # 11DD hangul jongseong mieum-sios
-3170 HANGUL LETTER MIEUM-PANSIOS
- # 11DF hangul jongseong mieum-pansios
-3171 HANGUL LETTER KAPYEOUNMIEUM
- # 111D hangul choseong kapyeounmieum
-3172 HANGUL LETTER PIEUP-KIYEOK
- # 111E hangul choseong pieup-kiyeok
-3173 HANGUL LETTER PIEUP-TIKEUT
- # 1120 hangul choseong pieup-tikeut
-3174 HANGUL LETTER PIEUP-SIOS-KIYEOK
- # 1122 hangul choseong pieup-sios-kiyeok
-3175 HANGUL LETTER PIEUP-SIOS-TIKEUT
- # 1123 hangul choseong pieup-sios-tikeut
-3176 HANGUL LETTER PIEUP-CIEUC
- # 1127 hangul choseong pieup-cieuc
-3177 HANGUL LETTER PIEUP-THIEUTH
- # 1129 hangul choseong pieup-thieuth
-3178 HANGUL LETTER KAPYEOUNPIEUP
- # 112B hangul choseong kapyeounpieup
-3179 HANGUL LETTER KAPYEOUNSSANGPIEUP
- # 112C hangul choseong kapyeounssangpieup
-317A HANGUL LETTER SIOS-KIYEOK
- # 112D hangul choseong sios-kiyeok
-317B HANGUL LETTER SIOS-NIEUN
- # 112E hangul choseong sios-nieun
-317C HANGUL LETTER SIOS-TIKEUT
- # 112F hangul choseong sios-tikeut
-317D HANGUL LETTER SIOS-PIEUP
- # 1132 hangul choseong sios-pieup
-317E HANGUL LETTER SIOS-CIEUC
- # 1136 hangul choseong sios-cieuc
-317F HANGUL LETTER PANSIOS
- # 1140 hangul choseong pansios
-3180 HANGUL LETTER SSANGIEUNG
- # 1147 hangul choseong ssangieung
-3181 HANGUL LETTER YESIEUNG
- * archaic velar nasal
- # 114C hangul choseong yesieung
-3182 HANGUL LETTER YESIEUNG-SIOS
- # 11F1 hangul jongseong yesieung-sios
-3183 HANGUL LETTER YESIEUNG-PANSIOS
- # 11F2 hangul jongseong yesieung-pansios
-3184 HANGUL LETTER KAPYEOUNPHIEUPH
- # 1157 hangul choseong kapyeounphieuph
-3185 HANGUL LETTER SSANGHIEUH
- # 1158 hangul choseong ssanghieuh
-3186 HANGUL LETTER YEORINHIEUH
- * archaic glottal stop
- # 1159 hangul choseong yeorinhieuh
-3187 HANGUL LETTER YO-YA
- # 1184 hangul jungseong yo-ya
-3188 HANGUL LETTER YO-YAE
- # 1185 hangul jungseong yo-yae
-3189 HANGUL LETTER YO-I
- # 1188 hangul jungseong yo-i
-318A HANGUL LETTER YU-YEO
- # 1191 hangul jungseong yu-yeo
-318B HANGUL LETTER YU-YE
- # 1192 hangul jungseong yu-ye
-318C HANGUL LETTER YU-I
- # 1194 hangul jungseong yu-i
-318D HANGUL LETTER ARAEA
- # 119E hangul jungseong araea
-318E HANGUL LETTER ARAEAE
- # 11A1 hangul jungseong araea-i
-@@ 3190 Kanbun 319F
-@ Kanbun
-3190 IDEOGRAPHIC ANNOTATION LINKING MARK (Kanbun Tateten)
- = KANBUN TATETEN
-3191 IDEOGRAPHIC ANNOTATION REVERSE MARK (Kaeriten)
- = KAERITEN RE
-3192 IDEOGRAPHIC ANNOTATION ONE MARK (Kaeriten)
- # <super> 4E00
-3193 IDEOGRAPHIC ANNOTATION TWO MARK (Kaeriten)
- # <super> 4E8C
-3194 IDEOGRAPHIC ANNOTATION THREE MARK (Kaeriten)
- # <super> 4E09
-3195 IDEOGRAPHIC ANNOTATION FOUR MARK (Kaeriten)
- # <super> 56DB
-3196 IDEOGRAPHIC ANNOTATION TOP MARK (Kaeriten)
- # <super> 4E0A
-3197 IDEOGRAPHIC ANNOTATION MIDDLE MARK (Kaeriten)
- # <super> 4E2D
-3198 IDEOGRAPHIC ANNOTATION BOTTOM MARK (Kaeriten)
- # <super> 4E0B
-3199 IDEOGRAPHIC ANNOTATION FIRST MARK (Kaeriten)
- # <super> 7532
-319A IDEOGRAPHIC ANNOTATION SECOND MARK (Kaeriten)
- # <super> 4E59
-319B IDEOGRAPHIC ANNOTATION THIRD MARK (Kaeriten)
- # <super> 4E19
-319C IDEOGRAPHIC ANNOTATION FOURTH MARK (Kaeriten)
- # <super> 4E01
-319D IDEOGRAPHIC ANNOTATION HEAVEN MARK (Kaeriten)
- # <super> 5929
-319E IDEOGRAPHIC ANNOTATION EARTH MARK (Kaeriten)
- # <super> 5730
-319F IDEOGRAPHIC ANNOTATION MAN MARK (Kaeriten)
- # <super> 4EBA
-@@ 31A0 Bopomofo Extended 31BF
-@+ See also the Bopomofo block
-@ Extended Bopomofo for Minnan and Hakka
-31A0 BOPOMOFO LETTER BU
-31A1 BOPOMOFO LETTER ZI
-31A2 BOPOMOFO LETTER JI
-31A3 BOPOMOFO LETTER GU
-31A4 BOPOMOFO LETTER EE
-31A5 BOPOMOFO LETTER ENN
-31A6 BOPOMOFO LETTER OO
-31A7 BOPOMOFO LETTER ONN
-31A8 BOPOMOFO LETTER IR
-31A9 BOPOMOFO LETTER ANN
-31AA BOPOMOFO LETTER INN
-31AB BOPOMOFO LETTER UNN
-31AC BOPOMOFO LETTER IM
-31AD BOPOMOFO LETTER NGG
-31AE BOPOMOFO LETTER AINN
-31AF BOPOMOFO LETTER AUNN
-31B0 BOPOMOFO LETTER AM
-31B1 BOPOMOFO LETTER OM
-31B2 BOPOMOFO LETTER ONG
-31B3 BOPOMOFO LETTER INNN
-31B4 BOPOMOFO FINAL LETTER P
-31B5 BOPOMOFO FINAL LETTER T
-31B6 BOPOMOFO FINAL LETTER K
-31B7 BOPOMOFO FINAL LETTER H
-@@ 3200 Enclosed CJK Letters and Months 32FF
-@ Parenthesized Hangul elements
-3200 PARENTHESIZED HANGUL KIYEOK
- # 0028 1100 0029
-3201 PARENTHESIZED HANGUL NIEUN
- # 0028 1102 0029
-3202 PARENTHESIZED HANGUL TIKEUT
- # 0028 1103 0029
-3203 PARENTHESIZED HANGUL RIEUL
- # 0028 1105 0029
-3204 PARENTHESIZED HANGUL MIEUM
- # 0028 1106 0029
-3205 PARENTHESIZED HANGUL PIEUP
- # 0028 1107 0029
-3206 PARENTHESIZED HANGUL SIOS
- # 0028 1109 0029
-3207 PARENTHESIZED HANGUL IEUNG
- # 0028 110B 0029
-3208 PARENTHESIZED HANGUL CIEUC
- # 0028 110C 0029
-3209 PARENTHESIZED HANGUL CHIEUCH
- # 0028 110E 0029
-320A PARENTHESIZED HANGUL KHIEUKH
- # 0028 110F 0029
-320B PARENTHESIZED HANGUL THIEUTH
- # 0028 1110 0029
-320C PARENTHESIZED HANGUL PHIEUPH
- # 0028 1111 0029
-320D PARENTHESIZED HANGUL HIEUH
- # 0028 1112 0029
-@ Parenthesized Hangul syllables
-320E PARENTHESIZED HANGUL KIYEOK A
- # 0028 1100 1161 0029
-320F PARENTHESIZED HANGUL NIEUN A
- # 0028 1102 1161 0029
-3210 PARENTHESIZED HANGUL TIKEUT A
- # 0028 1103 1161 0029
-3211 PARENTHESIZED HANGUL RIEUL A
- # 0028 1105 1161 0029
-3212 PARENTHESIZED HANGUL MIEUM A
- # 0028 1106 1161 0029
-3213 PARENTHESIZED HANGUL PIEUP A
- # 0028 1107 1161 0029
-3214 PARENTHESIZED HANGUL SIOS A
- # 0028 1109 1161 0029
-3215 PARENTHESIZED HANGUL IEUNG A
- # 0028 110B 1161 0029
-3216 PARENTHESIZED HANGUL CIEUC A
- # 0028 110C 1161 0029
-3217 PARENTHESIZED HANGUL CHIEUCH A
- # 0028 110E 1161 0029
-3218 PARENTHESIZED HANGUL KHIEUKH A
- # 0028 110F 1161 0029
-3219 PARENTHESIZED HANGUL THIEUTH A
- # 0028 1110 1161 0029
-321A PARENTHESIZED HANGUL PHIEUPH A
- # 0028 1111 1161 0029
-321B PARENTHESIZED HANGUL HIEUH A
- # 0028 1112 1161 0029
-321C PARENTHESIZED HANGUL CIEUC U
- # 0028 110C 116E 0029
-@ Parenthesized ideographs
-3220 PARENTHESIZED IDEOGRAPH ONE
- # 0028 4E00 0029
-3221 PARENTHESIZED IDEOGRAPH TWO
- # 0028 4E8C 0029
-3222 PARENTHESIZED IDEOGRAPH THREE
- # 0028 4E09 0029
-3223 PARENTHESIZED IDEOGRAPH FOUR
- # 0028 56DB 0029
-3224 PARENTHESIZED IDEOGRAPH FIVE
- # 0028 4E94 0029
-3225 PARENTHESIZED IDEOGRAPH SIX
- # 0028 516D 0029
-3226 PARENTHESIZED IDEOGRAPH SEVEN
- # 0028 4E03 0029
-3227 PARENTHESIZED IDEOGRAPH EIGHT
- # 0028 516B 0029
-3228 PARENTHESIZED IDEOGRAPH NINE
- # 0028 4E5D 0029
-3229 PARENTHESIZED IDEOGRAPH TEN
- # 0028 5341 0029
-322A PARENTHESIZED IDEOGRAPH MOON
- * Monday
- # 0028 6708 0029
-322B PARENTHESIZED IDEOGRAPH FIRE
- * Tuesday
- # 0028 706B 0029
-322C PARENTHESIZED IDEOGRAPH WATER
- * Wednesday
- # 0028 6C34 0029
-322D PARENTHESIZED IDEOGRAPH WOOD
- * Thursday
- # 0028 6728 0029
-322E PARENTHESIZED IDEOGRAPH METAL
- * Friday
- # 0028 91D1 0029
-322F PARENTHESIZED IDEOGRAPH EARTH
- * Saturday
- # 0028 571F 0029
-3230 PARENTHESIZED IDEOGRAPH SUN
- * Sunday
- # 0028 65E5 0029
-3231 PARENTHESIZED IDEOGRAPH STOCK
- * incorporated
- # 0028 682A 0029
-3232 PARENTHESIZED IDEOGRAPH HAVE
- * limited
- # 0028 6709 0029
-3233 PARENTHESIZED IDEOGRAPH SOCIETY
- * company
- # 0028 793E 0029
-3234 PARENTHESIZED IDEOGRAPH NAME
- # 0028 540D 0029
-3235 PARENTHESIZED IDEOGRAPH SPECIAL
- # 0028 7279 0029
-3236 PARENTHESIZED IDEOGRAPH FINANCIAL
- # 0028 8CA1 0029
-3237 PARENTHESIZED IDEOGRAPH CONGRATULATION
- # 0028 795D 0029
-3238 PARENTHESIZED IDEOGRAPH LABOR
- # 0028 52B4 0029
-3239 PARENTHESIZED IDEOGRAPH REPRESENT
- # 0028 4EE3 0029
-323A PARENTHESIZED IDEOGRAPH CALL
- # 0028 547C 0029
-323B PARENTHESIZED IDEOGRAPH STUDY
- # 0028 5B66 0029
-323C PARENTHESIZED IDEOGRAPH SUPERVISE
- # 0028 76E3 0029
-323D PARENTHESIZED IDEOGRAPH ENTERPRISE
- # 0028 4F01 0029
-323E PARENTHESIZED IDEOGRAPH RESOURCE
- # 0028 8CC7 0029
-323F PARENTHESIZED IDEOGRAPH ALLIANCE
- # 0028 5354 0029
-3240 PARENTHESIZED IDEOGRAPH FESTIVAL
- # 0028 796D 0029
-3241 PARENTHESIZED IDEOGRAPH REST
- # 0028 4F11 0029
-3242 PARENTHESIZED IDEOGRAPH SELF
- * from
- # 0028 81EA 0029
-3243 PARENTHESIZED IDEOGRAPH REACH
- * to
- # 0028 81F3 0029
-@ Circled Hangul elements
-3260 CIRCLED HANGUL KIYEOK
- # <circle> 1100
-3261 CIRCLED HANGUL NIEUN
- # <circle> 1102
-3262 CIRCLED HANGUL TIKEUT
- # <circle> 1103
-3263 CIRCLED HANGUL RIEUL
- # <circle> 1105
-3264 CIRCLED HANGUL MIEUM
- # <circle> 1106
-3265 CIRCLED HANGUL PIEUP
- # <circle> 1107
-3266 CIRCLED HANGUL SIOS
- # <circle> 1109
-3267 CIRCLED HANGUL IEUNG
- # <circle> 110B
-3268 CIRCLED HANGUL CIEUC
- # <circle> 110C
-3269 CIRCLED HANGUL CHIEUCH
- # <circle> 110E
-326A CIRCLED HANGUL KHIEUKH
- # <circle> 110F
-326B CIRCLED HANGUL THIEUTH
- # <circle> 1110
-326C CIRCLED HANGUL PHIEUPH
- # <circle> 1111
-326D CIRCLED HANGUL HIEUH
- # <circle> 1112
-@ Circled Hangul syllables
-326E CIRCLED HANGUL KIYEOK A
- # <circle> 1100 1161
-326F CIRCLED HANGUL NIEUN A
- # <circle> 1102 1161
-3270 CIRCLED HANGUL TIKEUT A
- # <circle> 1103 1161
-3271 CIRCLED HANGUL RIEUL A
- # <circle> 1105 1161
-3272 CIRCLED HANGUL MIEUM A
- # <circle> 1106 1161
-3273 CIRCLED HANGUL PIEUP A
- # <circle> 1107 1161
-3274 CIRCLED HANGUL SIOS A
- # <circle> 1109 1161
-3275 CIRCLED HANGUL IEUNG A
- # <circle> 110B 1161
-3276 CIRCLED HANGUL CIEUC A
- # <circle> 110C 1161
-3277 CIRCLED HANGUL CHIEUCH A
- # <circle> 110E 1161
-3278 CIRCLED HANGUL KHIEUKH A
- # <circle> 110F 1161
-3279 CIRCLED HANGUL THIEUTH A
- # <circle> 1110 1161
-327A CIRCLED HANGUL PHIEUPH A
- # <circle> 1111 1161
-327B CIRCLED HANGUL HIEUH A
- # <circle> 1112 1161
-@ Symbol
-327F KOREAN STANDARD SYMBOL
-@ Circled ideographs
-3280 CIRCLED IDEOGRAPH ONE
- = maru-iti, symbol of unification
- # <circle> 4E00
-3281 CIRCLED IDEOGRAPH TWO
- # <circle> 4E8C
-3282 CIRCLED IDEOGRAPH THREE
- # <circle> 4E09
-3283 CIRCLED IDEOGRAPH FOUR
- # <circle> 56DB
-3284 CIRCLED IDEOGRAPH FIVE
- # <circle> 4E94
-3285 CIRCLED IDEOGRAPH SIX
- # <circle> 516D
-3286 CIRCLED IDEOGRAPH SEVEN
- # <circle> 4E03
-3287 CIRCLED IDEOGRAPH EIGHT
- # <circle> 516B
-3288 CIRCLED IDEOGRAPH NINE
- # <circle> 4E5D
-3289 CIRCLED IDEOGRAPH TEN
- # <circle> 5341
-328A CIRCLED IDEOGRAPH MOON
- * Monday
- # <circle> 6708
-328B CIRCLED IDEOGRAPH FIRE
- * Tuesday
- # <circle> 706B
-328C CIRCLED IDEOGRAPH WATER
- * Wednesday
- # <circle> 6C34
-328D CIRCLED IDEOGRAPH WOOD
- * Thursday
- # <circle> 6728
-328E CIRCLED IDEOGRAPH METAL
- * Friday
- # <circle> 91D1
-328F CIRCLED IDEOGRAPH EARTH
- * Saturday
- # <circle> 571F
-3290 CIRCLED IDEOGRAPH SUN
- * Sunday
- # <circle> 65E5
-3291 CIRCLED IDEOGRAPH STOCK
- * incorporated
- # <circle> 682A
-3292 CIRCLED IDEOGRAPH HAVE
- * limited
- # <circle> 6709
-3293 CIRCLED IDEOGRAPH SOCIETY
- * company
- # <circle> 793E
-3294 CIRCLED IDEOGRAPH NAME
- # <circle> 540D
-3295 CIRCLED IDEOGRAPH SPECIAL
- # <circle> 7279
-3296 CIRCLED IDEOGRAPH FINANCIAL
- # <circle> 8CA1
-3297 CIRCLED IDEOGRAPH CONGRATULATION
- # <circle> 795D
-3298 CIRCLED IDEOGRAPH LABOR
- # <circle> 52B4
-3299 CIRCLED IDEOGRAPH SECRET
- # <circle> 79D8
-329A CIRCLED IDEOGRAPH MALE
- # <circle> 7537
-329B CIRCLED IDEOGRAPH FEMALE
- # <circle> 5973
-329C CIRCLED IDEOGRAPH SUITABLE
- # <circle> 9069
-329D CIRCLED IDEOGRAPH EXCELLENT
- # <circle> 512A
-329E CIRCLED IDEOGRAPH PRINT
- * name seal
- # <circle> 5370
-329F CIRCLED IDEOGRAPH ATTENTION
- # <circle> 6CE8
-32A0 CIRCLED IDEOGRAPH ITEM
- # <circle> 9805
-32A1 CIRCLED IDEOGRAPH REST
- * holiday
- # <circle> 4F11
-32A2 CIRCLED IDEOGRAPH COPY
- # <circle> 5199
-32A3 CIRCLED IDEOGRAPH CORRECT
- # <circle> 6B63
-32A4 CIRCLED IDEOGRAPH HIGH
- # <circle> 4E0A
-32A5 CIRCLED IDEOGRAPH CENTRE
- # <circle> 4E2D
-32A6 CIRCLED IDEOGRAPH LOW
- # <circle> 4E0B
-32A7 CIRCLED IDEOGRAPH LEFT
- # <circle> 5DE6
-32A8 CIRCLED IDEOGRAPH RIGHT
- # <circle> 53F3
-32A9 CIRCLED IDEOGRAPH MEDICINE
- # <circle> 533B
-32AA CIRCLED IDEOGRAPH RELIGION
- # <circle> 5B97
-32AB CIRCLED IDEOGRAPH STUDY
- # <circle> 5B66
-32AC CIRCLED IDEOGRAPH SUPERVISE
- # <circle> 76E3
-32AD CIRCLED IDEOGRAPH ENTERPRISE
- # <circle> 4F01
-32AE CIRCLED IDEOGRAPH RESOURCE
- # <circle> 8CC7
-32AF CIRCLED IDEOGRAPH ALLIANCE
- # <circle> 5354
-32B0 CIRCLED IDEOGRAPH NIGHT
- # <circle> 591C
-@ Telegraph symbols for months
-32C0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
- # 0031 6708
-32C1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
- # 0032 6708
-32C2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
- # 0033 6708
-32C3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
- # 0034 6708
-32C4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
- # 0035 6708
-32C5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
- # 0036 6708
-32C6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
- # 0037 6708
-32C7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
- # 0038 6708
-32C8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
- # 0039 6708
-32C9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
- # 0031 0030 6708
-32CA IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
- # 0031 0031 6708
-32CB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
- # 0031 0032 6708
-@ Circled Katakana
-32D0 CIRCLED KATAKANA A
- # <circle> 30A2
-32D1 CIRCLED KATAKANA I
- # <circle> 30A4
-32D2 CIRCLED KATAKANA U
- # <circle> 30A6
-32D3 CIRCLED KATAKANA E
- # <circle> 30A8
-32D4 CIRCLED KATAKANA O
- # <circle> 30AA
-32D5 CIRCLED KATAKANA KA
- # <circle> 30AB
-32D6 CIRCLED KATAKANA KI
- # <circle> 30AD
-32D7 CIRCLED KATAKANA KU
- # <circle> 30AF
-32D8 CIRCLED KATAKANA KE
- # <circle> 30B1
-32D9 CIRCLED KATAKANA KO
- # <circle> 30B3
-32DA CIRCLED KATAKANA SA
- # <circle> 30B5
-32DB CIRCLED KATAKANA SI
- # <circle> 30B7
-32DC CIRCLED KATAKANA SU
- # <circle> 30B9
-32DD CIRCLED KATAKANA SE
- # <circle> 30BB
-32DE CIRCLED KATAKANA SO
- # <circle> 30BD
-32DF CIRCLED KATAKANA TA
- # <circle> 30BF
-32E0 CIRCLED KATAKANA TI
- # <circle> 30C1
-32E1 CIRCLED KATAKANA TU
- # <circle> 30C4
-32E2 CIRCLED KATAKANA TE
- # <circle> 30C6
-32E3 CIRCLED KATAKANA TO
- # <circle> 30C8
-32E4 CIRCLED KATAKANA NA
- # <circle> 30CA
-32E5 CIRCLED KATAKANA NI
- # <circle> 30CB
-32E6 CIRCLED KATAKANA NU
- # <circle> 30CC
-32E7 CIRCLED KATAKANA NE
- # <circle> 30CD
-32E8 CIRCLED KATAKANA NO
- # <circle> 30CE
-32E9 CIRCLED KATAKANA HA
- # <circle> 30CF
-32EA CIRCLED KATAKANA HI
- # <circle> 30D2
-32EB CIRCLED KATAKANA HU
- # <circle> 30D5
-32EC CIRCLED KATAKANA HE
- # <circle> 30D8
-32ED CIRCLED KATAKANA HO
- # <circle> 30DB
-32EE CIRCLED KATAKANA MA
- # <circle> 30DE
-32EF CIRCLED KATAKANA MI
- # <circle> 30DF
-32F0 CIRCLED KATAKANA MU
- # <circle> 30E0
-32F1 CIRCLED KATAKANA ME
- # <circle> 30E1
-32F2 CIRCLED KATAKANA MO
- # <circle> 30E2
-32F3 CIRCLED KATAKANA YA
- # <circle> 30E4
-32F4 CIRCLED KATAKANA YU
- # <circle> 30E6
-32F5 CIRCLED KATAKANA YO
- # <circle> 30E8
-32F6 CIRCLED KATAKANA RA
- # <circle> 30E9
-32F7 CIRCLED KATAKANA RI
- # <circle> 30EA
-32F8 CIRCLED KATAKANA RU
- # <circle> 30EB
-32F9 CIRCLED KATAKANA RE
- # <circle> 30EC
-32FA CIRCLED KATAKANA RO
- # <circle> 30ED
-32FB CIRCLED KATAKANA WA
- # <circle> 30EF
-32FC CIRCLED KATAKANA WI
- # <circle> 30F0
-32FD CIRCLED KATAKANA WE
- # <circle> 30F1
-32FE CIRCLED KATAKANA WO
- # <circle> 30F2
-@@ 3300 CJK Compatibility 33FF
-@ Squared Katakana words
-3300 SQUARE APAATO
- * apartment
- # <square> 30A2 30D1 30FC 30C8
-3301 SQUARE ARUHUA
- * alpha
- # <square> 30A2 30EB 30D5 30A1
-3302 SQUARE ANPEA
- * ampere
- # <square> 30A2 30F3 30DA 30A2
-3303 SQUARE AARU
- * are (unit of area)
- # <square> 30A2 30FC 30EB
-3304 SQUARE ININGU
- * inning
- # <square> 30A4 30CB 30F3 30B0
-3305 SQUARE INTI
- * inch
- # <square> 30A4 30F3 30C1
-3306 SQUARE UON
- * won (Korean currency)
- # <square> 30A6 30A9 30F3
-3307 SQUARE ESUKUUDO
- * escudo (Portuguese currency)
- # <square> 30A8 30B9 30AF 30FC 30C9
-3308 SQUARE EEKAA
- * acre
- # <square> 30A8 30FC 30AB 30FC
-3309 SQUARE ONSU
- * ounce
- # <square> 30AA 30F3 30B9
-330A SQUARE OOMU
- * ohm
- # <square> 30AA 30FC 30E0
-330B SQUARE KAIRI
- * kai-ri: nautical mile
- # <square> 30AB 30A4 30EA
-330C SQUARE KARATTO
- * carat
- # <square> 30AB 30E9 30C3 30C8
-330D SQUARE KARORII
- * calorie
- # <square> 30AB 30ED 30EA 30FC
-330E SQUARE GARON
- * gallon
- # <square> 30AC 30ED 30F3
-330F SQUARE GANMA
- * gamma
- # <square> 30AC 30F3 30DE
-3310 SQUARE GIGA
- * giga-
- # <square> 30AE 30AC
-3311 SQUARE GINII
- * guinea
- # <square> 30AE 30CB 30FC
-3312 SQUARE KYURII
- * curie
- # <square> 30AD 30E5 30EA 30FC
-3313 SQUARE GIRUDAA
- * guilder
- # <square> 30AE 30EB 30C0 30FC
-3314 SQUARE KIRO
- * kilo-
- # <square> 30AD 30ED
-3315 SQUARE KIROGURAMU
- * kilogram
- # <square> 30AD 30ED 30B0 30E9 30E0
-3316 SQUARE KIROMEETORU
- * kilometer
- # <square> 30AD 30ED 30E1 30FC 30C8 30EB
-3317 SQUARE KIROWATTO
- * kilowatt
- # <square> 30AD 30ED 30EF 30C3 30C8
-3318 SQUARE GURAMU
- * gram
- # <square> 30B0 30E9 30E0
-3319 SQUARE GURAMUTON
- * gram ton
- # <square> 30B0 30E9 30E0 30C8 30F3
-331A SQUARE KURUZEIRO
- * cruzeiro (Brazilian currency)
- # <square> 30AF 30EB 30BC 30A4 30ED
-331B SQUARE KUROONE
- * krone
- # <square> 30AF 30ED 30FC 30CD
-331C SQUARE KEESU
- * case
- # <square> 30B1 30FC 30B9
-331D SQUARE KORUNA
- * koruna (Czech currency)
- # <square> 30B3 30EB 30CA
-331E SQUARE KOOPO
- * co-op
- # <square> 30B3 30FC 30DD
-331F SQUARE SAIKURU
- * cycle
- # <square> 30B5 30A4 30AF 30EB
-3320 SQUARE SANTIIMU
- * centime
- # <square> 30B5 30F3 30C1 30FC 30E0
-3321 SQUARE SIRINGU
- * shilling
- # <square> 30B7 30EA 30F3 30B0
-3322 SQUARE SENTI
- * centi-
- # <square> 30BB 30F3 30C1
-3323 SQUARE SENTO
- * cent
- # <square> 30BB 30F3 30C8
-3324 SQUARE DAASU
- * dozen
- # <square> 30C0 30FC 30B9
-3325 SQUARE DESI
- * deci-
- # <square> 30C7 30B7
-3326 SQUARE DORU
- * dollar
- # <square> 30C9 30EB
-3327 SQUARE TON
- * ton
- # <square> 30C8 30F3
-3328 SQUARE NANO
- * nano-
- # <square> 30CA 30CE
-3329 SQUARE NOTTO
- * knot, nautical mile
- # <square> 30CE 30C3 30C8
-332A SQUARE HAITU
- * heights
- # <square> 30CF 30A4 30C4
-332B SQUARE PAASENTO
- * percent
- # <square> 30D1 30FC 30BB 30F3 30C8
-332C SQUARE PAATU
- * parts
- # <square> 30D1 30FC 30C4
-332D SQUARE BAARERU
- * barrel
- # <square> 30D0 30FC 30EC 30EB
-332E SQUARE PIASUTORU
- * piaster
- # <square> 30D4 30A2 30B9 30C8 30EB
-332F SQUARE PIKURU
- * picul (unit of weight)
- # <square> 30D4 30AF 30EB
-3330 SQUARE PIKO
- * pico-
- # <square> 30D4 30B3
-3331 SQUARE BIRU
- * building
- # <square> 30D3 30EB
-3332 SQUARE HUARADDO
- * farad
- # <square> 30D5 30A1 30E9 30C3 30C9
-3333 SQUARE HUIITO
- * feet
- # <square> 30D5 30A3 30FC 30C8
-3334 SQUARE BUSSYERU
- * bushel
- # <square> 30D6 30C3 30B7 30A7 30EB
-3335 SQUARE HURAN
- * franc
- # <square> 30D5 30E9 30F3
-3336 SQUARE HEKUTAARU
- * hectare
- # <square> 30D8 30AF 30BF 30FC 30EB
-3337 SQUARE PESO
- * peso
- # <square> 30DA 30BD
-3338 SQUARE PENIHI
- * pfennig
- # <square> 30DA 30CB 30D2
-3339 SQUARE HERUTU
- * hertz
- # <square> 30D8 30EB 30C4
-333A SQUARE PENSU
- * pence
- # <square> 30DA 30F3 30B9
-333B SQUARE PEEZI
- * page
- # <square> 30DA 30FC 30B8
-333C SQUARE BEETA
- * beta
- # <square> 30D9 30FC 30BF
-333D SQUARE POINTO
- * point
- # <square> 30DD 30A4 30F3 30C8
-333E SQUARE BORUTO
- * volt, bolt
- # <square> 30DC 30EB 30C8
-333F SQUARE HON
- * hon: volume
- # <square> 30DB 30F3
-3340 SQUARE PONDO
- * pound
- # <square> 30DD 30F3 30C9
-3341 SQUARE HOORU
- * hall
- # <square> 30DB 30FC 30EB
-3342 SQUARE HOON
- * horn
- # <square> 30DB 30FC 30F3
-3343 SQUARE MAIKURO
- * micro-
- # <square> 30DE 30A4 30AF 30ED
-3344 SQUARE MAIRU
- * mile
- # <square> 30DE 30A4 30EB
-3345 SQUARE MAHHA
- * mach
- # <square> 30DE 30C3 30CF
-3346 SQUARE MARUKU
- * mark
- # <square> 30DE 30EB 30AF
-3347 SQUARE MANSYON
- * mansion (i.e. better quality apartment)
- # <square> 30DE 30F3 30B7 30E7 30F3
-3348 SQUARE MIKURON
- * micron
- # <square> 30DF 30AF 30ED 30F3
-3349 SQUARE MIRI
- * milli-
- # <square> 30DF 30EA
-334A SQUARE MIRIBAARU
- * millibar
- # <square> 30DF 30EA 30D0 30FC 30EB
-334B SQUARE MEGA
- * mega-
- # <square> 30E1 30AC
-334C SQUARE MEGATON
- * megaton
- # <square> 30E1 30AC 30C8 30F3
-334D SQUARE MEETORU
- * meter
- # <square> 30E1 30FC 30C8 30EB
-334E SQUARE YAADO
- * yard
- # <square> 30E4 30FC 30C9
-334F SQUARE YAARU
- * yard
- # <square> 30E4 30FC 30EB
-3350 SQUARE YUAN
- * yuan (Chinese currency)
- # <square> 30E6 30A2 30F3
-3351 SQUARE RITTORU
- * liter
- # <square> 30EA 30C3 30C8 30EB
-3352 SQUARE RIRA
- * lira
- # <square> 30EA 30E9
-3353 SQUARE RUPII
- * rupee
- # <square> 30EB 30D4 30FC
-3354 SQUARE RUUBURU
- * ruble
- # <square> 30EB 30FC 30D6 30EB
-3355 SQUARE REMU
- * rem (unit of radiation)
- # <square> 30EC 30E0
-3356 SQUARE RENTOGEN
- * roentgen
- # <square> 30EC 30F3 30C8 30B2 30F3
-3357 SQUARE WATTO
- * watt
- # <square> 30EF 30C3 30C8
-@ Telegraph symbols for hours
-3358 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
- # 0030 70B9
-3359 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
- # 0031 70B9
-335A IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
- # 0032 70B9
-335B IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
- # 0033 70B9
-335C IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
- # 0034 70B9
-335D IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
- # 0035 70B9
-335E IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
- # 0036 70B9
-335F IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
- # 0037 70B9
-3360 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
- # 0038 70B9
-3361 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
- # 0039 70B9
-3362 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
- # 0031 0030 70B9
-3363 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
- # 0031 0031 70B9
-3364 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
- # 0031 0032 70B9
-3365 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
- # 0031 0033 70B9
-3366 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
- # 0031 0034 70B9
-3367 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
- # 0031 0035 70B9
-3368 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
- # 0031 0036 70B9
-3369 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
- # 0031 0037 70B9
-336A IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
- # 0031 0038 70B9
-336B IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
- # 0031 0039 70B9
-336C IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
- # 0032 0030 70B9
-336D IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
- # 0032 0031 70B9
-336E IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
- # 0032 0032 70B9
-336F IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
- # 0032 0033 70B9
-3370 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
- # 0032 0034 70B9
-@ Squared Latin abbreviations
-3371 SQUARE HPA
- # <square> 0068 0050 0061
-3372 SQUARE DA
- # <square> 0064 0061
-3373 SQUARE AU
- # <square> 0041 0055
-3374 SQUARE BAR
- # <square> 0062 0061 0072
-3375 SQUARE OV
- # <square> 006F 0056
-3376 SQUARE PC
- # <square> 0070 0063
-@ Japanese era names
-337B SQUARE ERA NAME HEISEI
- # <square> 5E73 6210
-337C SQUARE ERA NAME SYOUWA
- # <square> 662D 548C
-337D SQUARE ERA NAME TAISYOU
- # <square> 5927 6B63
-337E SQUARE ERA NAME MEIZI
- # <square> 660E 6CBB
-@ Japanese corporation
-337F SQUARE CORPORATION
- = kabusiki-gaisya
- * incorporated
- # <square> 682A 5F0F 4F1A 793E
-@ Squared Latin abbreviations
-3380 SQUARE PA AMPS
- # <square> 0070 0041
-3381 SQUARE NA
- # <square> 006E 0041
-3382 SQUARE MU A
- # <square> 03BC 0041
-3383 SQUARE MA
- # <square> 006D 0041
-3384 SQUARE KA
- # <square> 006B 0041
-3385 SQUARE KB
- # <square> 004B 0042
-3386 SQUARE MB
- # <square> 004D 0042
-3387 SQUARE GB
- # <square> 0047 0042
-3388 SQUARE CAL
- # <square> 0063 0061 006C
-3389 SQUARE KCAL
- # <square> 006B 0063 0061 006C
-338A SQUARE PF
- # <square> 0070 0046
-338B SQUARE NF
- # <square> 006E 0046
-338C SQUARE MU F
- # <square> 03BC 0046
-338D SQUARE MU G
- # <square> 03BC 0067
-338E SQUARE MG
- # <square> 006D 0067
-338F SQUARE KG
- # <square> 006B 0067
-3390 SQUARE HZ
- # <square> 0048 007A
-3391 SQUARE KHZ
- # <square> 006B 0048 007A
-3392 SQUARE MHZ
- # <square> 004D 0048 007A
-3393 SQUARE GHZ
- # <square> 0047 0048 007A
-3394 SQUARE THZ
- # <square> 0054 0048 007A
-3395 SQUARE MU L
- # <square> 03BC 2113
-3396 SQUARE ML
- # <square> 006D 2113
-3397 SQUARE DL
- # <square> 0064 2113
-3398 SQUARE KL
- # <square> 006B 2113
-3399 SQUARE FM
- # <square> 0066 006D
-339A SQUARE NM
- # <square> 006E 006D
-339B SQUARE MU M
- # <square> 03BC 006D
-339C SQUARE MM
- # <square> 006D 006D
-339D SQUARE CM
- # <square> 0063 006D
-339E SQUARE KM
- # <square> 006B 006D
-339F SQUARE MM SQUARED
- # <square> 006D 006D 00B2
-33A0 SQUARE CM SQUARED
- # <square> 0063 006D 00B2
-33A1 SQUARE M SQUARED
- # <square> 006D 00B2
-33A2 SQUARE KM SQUARED
- # <square> 006B 006D 00B2
-33A3 SQUARE MM CUBED
- # <square> 006D 006D 00B3
-33A4 SQUARE CM CUBED
- # <square> 0063 006D 00B3
-33A5 SQUARE M CUBED
- # <square> 006D 00B3
-33A6 SQUARE KM CUBED
- # <square> 006B 006D 00B3
-33A7 SQUARE M OVER S
- # <square> 006D 2215 0073
-33A8 SQUARE M OVER S SQUARED
- # <square> 006D 2215 0073 00B2
-33A9 SQUARE PA
- # <square> 0050 0061
-33AA SQUARE KPA
- # <square> 006B 0050 0061
-33AB SQUARE MPA
- # <square> 004D 0050 0061
-33AC SQUARE GPA
- # <square> 0047 0050 0061
-33AD SQUARE RAD
- # <square> 0072 0061 0064
-33AE SQUARE RAD OVER S
- # <square> 0072 0061 0064 2215 0073
-33AF SQUARE RAD OVER S SQUARED
- # <square> 0072 0061 0064 2215 0073 00B2
-33B0 SQUARE PS
- # <square> 0070 0073
-33B1 SQUARE NS
- # <square> 006E 0073
-33B2 SQUARE MU S
- # <square> 03BC 0073
-33B3 SQUARE MS
- # <square> 006D 0073
-33B4 SQUARE PV
- # <square> 0070 0056
-33B5 SQUARE NV
- # <square> 006E 0056
-33B6 SQUARE MU V
- # <square> 03BC 0056
-33B7 SQUARE MV
- # <square> 006D 0056
-33B8 SQUARE KV
- # <square> 006B 0056
-33B9 SQUARE MV MEGA
- # <square> 004D 0056
-33BA SQUARE PW
- # <square> 0070 0057
-33BB SQUARE NW
- # <square> 006E 0057
-33BC SQUARE MU W
- # <square> 03BC 0057
-33BD SQUARE MW
- # <square> 006D 0057
-33BE SQUARE KW
- # <square> 006B 0057
-33BF SQUARE MW MEGA
- # <square> 004D 0057
-33C0 SQUARE K OHM
- # <square> 006B 03A9
-33C1 SQUARE M OHM
- # <square> 004D 03A9
-33C2 SQUARE AM
- # <square> 0061 002E 006D 002E
-33C3 SQUARE BQ
- # <square> 0042 0071
-33C4 SQUARE CC
- # <square> 0063 0063
-33C5 SQUARE CD
- # <square> 0063 0064
-33C6 SQUARE C OVER KG
- # <square> 0043 2215 006B 0067
-33C7 SQUARE CO
- # <square> 0043 006F 002E
-33C8 SQUARE DB
- # <square> 0064 0042
-33C9 SQUARE GY
- # <square> 0047 0079
-33CA SQUARE HA
- # <square> 0068 0061
-33CB SQUARE HP
- # <square> 0048 0050
-33CC SQUARE IN
- # <square> 0069 006E
-33CD SQUARE KK
- # <square> 004B 004B
-33CE SQUARE KM CAPITAL
- # <square> 004B 004D
-33CF SQUARE KT
- # <square> 006B 0074
-33D0 SQUARE LM
- # <square> 006C 006D
-33D1 SQUARE LN
- # <square> 006C 006E
-33D2 SQUARE LOG
- # <square> 006C 006F 0067
-33D3 SQUARE LX
- # <square> 006C 0078
-33D4 SQUARE MB SMALL
- # <square> 006D 0062
-33D5 SQUARE MIL
- # <square> 006D 0069 006C
-33D6 SQUARE MOL
- # <square> 006D 006F 006C
-33D7 SQUARE PH
- # <square> 0050 0048
-33D8 SQUARE PM
- # <square> 0070 002E 006D 002E
-33D9 SQUARE PPM
- # <square> 0050 0050 004D
-33DA SQUARE PR
- # <square> 0050 0052
-33DB SQUARE SR
- # <square> 0073 0072
-33DC SQUARE SV
- # <square> 0053 0076
-33DD SQUARE WB
- # <square> 0057 0062
-@ Telegraph symbols for days
-33E0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
- # 0031 65E5
-33E1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
- # 0032 65E5
-33E2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
- # 0033 65E5
-33E3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
- # 0034 65E5
-33E4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
- # 0035 65E5
-33E5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
- # 0036 65E5
-33E6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
- # 0037 65E5
-33E7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
- # 0038 65E5
-33E8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
- # 0039 65E5
-33E9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
- # 0031 0030 65E5
-33EA IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
- # 0031 0031 65E5
-33EB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
- # 0031 0032 65E5
-33EC IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
- # 0031 0033 65E5
-33ED IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
- # 0031 0034 65E5
-33EE IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
- # 0031 0035 65E5
-33EF IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
- # 0031 0036 65E5
-33F0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
- # 0031 0037 65E5
-33F1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
- # 0031 0038 65E5
-33F2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
- # 0031 0039 65E5
-33F3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
- # 0032 0030 65E5
-33F4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
- # 0032 0031 65E5
-33F5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
- # 0032 0032 65E5
-33F6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
- # 0032 0033 65E5
-33F7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
- # 0032 0034 65E5
-33F8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
- # 0032 0035 65E5
-33F9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
- # 0032 0036 65E5
-33FA IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
- # 0032 0037 65E5
-33FB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
- # 0032 0038 65E5
-33FC IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
- # 0032 0039 65E5
-33FD IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
- # 0033 0030 65E5
-33FE IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
- # 0033 0031 65E5
-@@ 3400 CJK Unified Ideographs Extension A 4DB5
-@@ 4E00 CJK Unified Ideographs 9FA5
-@@ A000 Yi Syllables A48F
-@ Syllables
-A000 YI SYLLABLE IT
-A001 YI SYLLABLE IX
-A002 YI SYLLABLE I
-A003 YI SYLLABLE IP
-A004 YI SYLLABLE IET
-A005 YI SYLLABLE IEX
-A006 YI SYLLABLE IE
-A007 YI SYLLABLE IEP
-A008 YI SYLLABLE AT
-A009 YI SYLLABLE AX
-A00A YI SYLLABLE A
-A00B YI SYLLABLE AP
-A00C YI SYLLABLE UOX
-A00D YI SYLLABLE UO
-A00E YI SYLLABLE UOP
-A00F YI SYLLABLE OT
-A010 YI SYLLABLE OX
-A011 YI SYLLABLE O
-A012 YI SYLLABLE OP
-A013 YI SYLLABLE EX
-A014 YI SYLLABLE E
-A015 YI SYLLABLE WU
-A016 YI SYLLABLE BIT
-A017 YI SYLLABLE BIX
-A018 YI SYLLABLE BI
-A019 YI SYLLABLE BIP
-A01A YI SYLLABLE BIET
-A01B YI SYLLABLE BIEX
-A01C YI SYLLABLE BIE
-A01D YI SYLLABLE BIEP
-A01E YI SYLLABLE BAT
-A01F YI SYLLABLE BAX
-A020 YI SYLLABLE BA
-A021 YI SYLLABLE BAP
-A022 YI SYLLABLE BUOX
-A023 YI SYLLABLE BUO
-A024 YI SYLLABLE BUOP
-A025 YI SYLLABLE BOT
-A026 YI SYLLABLE BOX
-A027 YI SYLLABLE BO
-A028 YI SYLLABLE BOP
-A029 YI SYLLABLE BEX
-A02A YI SYLLABLE BE
-A02B YI SYLLABLE BEP
-A02C YI SYLLABLE BUT
-A02D YI SYLLABLE BUX
-A02E YI SYLLABLE BU
-A02F YI SYLLABLE BUP
-A030 YI SYLLABLE BURX
-A031 YI SYLLABLE BUR
-A032 YI SYLLABLE BYT
-A033 YI SYLLABLE BYX
-A034 YI SYLLABLE BY
-A035 YI SYLLABLE BYP
-A036 YI SYLLABLE BYRX
-A037 YI SYLLABLE BYR
-A038 YI SYLLABLE PIT
-A039 YI SYLLABLE PIX
-A03A YI SYLLABLE PI
-A03B YI SYLLABLE PIP
-A03C YI SYLLABLE PIEX
-A03D YI SYLLABLE PIE
-A03E YI SYLLABLE PIEP
-A03F YI SYLLABLE PAT
-A040 YI SYLLABLE PAX
-A041 YI SYLLABLE PA
-A042 YI SYLLABLE PAP
-A043 YI SYLLABLE PUOX
-A044 YI SYLLABLE PUO
-A045 YI SYLLABLE PUOP
-A046 YI SYLLABLE POT
-A047 YI SYLLABLE POX
-A048 YI SYLLABLE PO
-A049 YI SYLLABLE POP
-A04A YI SYLLABLE PUT
-A04B YI SYLLABLE PUX
-A04C YI SYLLABLE PU
-A04D YI SYLLABLE PUP
-A04E YI SYLLABLE PURX
-A04F YI SYLLABLE PUR
-A050 YI SYLLABLE PYT
-A051 YI SYLLABLE PYX
-A052 YI SYLLABLE PY
-A053 YI SYLLABLE PYP
-A054 YI SYLLABLE PYRX
-A055 YI SYLLABLE PYR
-A056 YI SYLLABLE BBIT
-A057 YI SYLLABLE BBIX
-A058 YI SYLLABLE BBI
-A059 YI SYLLABLE BBIP
-A05A YI SYLLABLE BBIET
-A05B YI SYLLABLE BBIEX
-A05C YI SYLLABLE BBIE
-A05D YI SYLLABLE BBIEP
-A05E YI SYLLABLE BBAT
-A05F YI SYLLABLE BBAX
-A060 YI SYLLABLE BBA
-A061 YI SYLLABLE BBAP
-A062 YI SYLLABLE BBUOX
-A063 YI SYLLABLE BBUO
-A064 YI SYLLABLE BBUOP
-A065 YI SYLLABLE BBOT
-A066 YI SYLLABLE BBOX
-A067 YI SYLLABLE BBO
-A068 YI SYLLABLE BBOP
-A069 YI SYLLABLE BBEX
-A06A YI SYLLABLE BBE
-A06B YI SYLLABLE BBEP
-A06C YI SYLLABLE BBUT
-A06D YI SYLLABLE BBUX
-A06E YI SYLLABLE BBU
-A06F YI SYLLABLE BBUP
-A070 YI SYLLABLE BBURX
-A071 YI SYLLABLE BBUR
-A072 YI SYLLABLE BBYT
-A073 YI SYLLABLE BBYX
-A074 YI SYLLABLE BBY
-A075 YI SYLLABLE BBYP
-A076 YI SYLLABLE NBIT
-A077 YI SYLLABLE NBIX
-A078 YI SYLLABLE NBI
-A079 YI SYLLABLE NBIP
-A07A YI SYLLABLE NBIEX
-A07B YI SYLLABLE NBIE
-A07C YI SYLLABLE NBIEP
-A07D YI SYLLABLE NBAT
-A07E YI SYLLABLE NBAX
-A07F YI SYLLABLE NBA
-A080 YI SYLLABLE NBAP
-A081 YI SYLLABLE NBOT
-A082 YI SYLLABLE NBOX
-A083 YI SYLLABLE NBO
-A084 YI SYLLABLE NBOP
-A085 YI SYLLABLE NBUT
-A086 YI SYLLABLE NBUX
-A087 YI SYLLABLE NBU
-A088 YI SYLLABLE NBUP
-A089 YI SYLLABLE NBURX
-A08A YI SYLLABLE NBUR
-A08B YI SYLLABLE NBYT
-A08C YI SYLLABLE NBYX
-A08D YI SYLLABLE NBY
-A08E YI SYLLABLE NBYP
-A08F YI SYLLABLE NBYRX
-A090 YI SYLLABLE NBYR
-A091 YI SYLLABLE HMIT
-A092 YI SYLLABLE HMIX
-A093 YI SYLLABLE HMI
-A094 YI SYLLABLE HMIP
-A095 YI SYLLABLE HMIEX
-A096 YI SYLLABLE HMIE
-A097 YI SYLLABLE HMIEP
-A098 YI SYLLABLE HMAT
-A099 YI SYLLABLE HMAX
-A09A YI SYLLABLE HMA
-A09B YI SYLLABLE HMAP
-A09C YI SYLLABLE HMUOX
-A09D YI SYLLABLE HMUO
-A09E YI SYLLABLE HMUOP
-A09F YI SYLLABLE HMOT
-A0A0 YI SYLLABLE HMOX
-A0A1 YI SYLLABLE HMO
-A0A2 YI SYLLABLE HMOP
-A0A3 YI SYLLABLE HMUT
-A0A4 YI SYLLABLE HMUX
-A0A5 YI SYLLABLE HMU
-A0A6 YI SYLLABLE HMUP
-A0A7 YI SYLLABLE HMURX
-A0A8 YI SYLLABLE HMUR
-A0A9 YI SYLLABLE HMYX
-A0AA YI SYLLABLE HMY
-A0AB YI SYLLABLE HMYP
-A0AC YI SYLLABLE HMYRX
-A0AD YI SYLLABLE HMYR
-A0AE YI SYLLABLE MIT
-A0AF YI SYLLABLE MIX
-A0B0 YI SYLLABLE MI
-A0B1 YI SYLLABLE MIP
-A0B2 YI SYLLABLE MIEX
-A0B3 YI SYLLABLE MIE
-A0B4 YI SYLLABLE MIEP
-A0B5 YI SYLLABLE MAT
-A0B6 YI SYLLABLE MAX
-A0B7 YI SYLLABLE MA
-A0B8 YI SYLLABLE MAP
-A0B9 YI SYLLABLE MUOT
-A0BA YI SYLLABLE MUOX
-A0BB YI SYLLABLE MUO
-A0BC YI SYLLABLE MUOP
-A0BD YI SYLLABLE MOT
-A0BE YI SYLLABLE MOX
-A0BF YI SYLLABLE MO
-A0C0 YI SYLLABLE MOP
-A0C1 YI SYLLABLE MEX
-A0C2 YI SYLLABLE ME
-A0C3 YI SYLLABLE MUT
-A0C4 YI SYLLABLE MUX
-A0C5 YI SYLLABLE MU
-A0C6 YI SYLLABLE MUP
-A0C7 YI SYLLABLE MURX
-A0C8 YI SYLLABLE MUR
-A0C9 YI SYLLABLE MYT
-A0CA YI SYLLABLE MYX
-A0CB YI SYLLABLE MY
-A0CC YI SYLLABLE MYP
-A0CD YI SYLLABLE FIT
-A0CE YI SYLLABLE FIX
-A0CF YI SYLLABLE FI
-A0D0 YI SYLLABLE FIP
-A0D1 YI SYLLABLE FAT
-A0D2 YI SYLLABLE FAX
-A0D3 YI SYLLABLE FA
-A0D4 YI SYLLABLE FAP
-A0D5 YI SYLLABLE FOX
-A0D6 YI SYLLABLE FO
-A0D7 YI SYLLABLE FOP
-A0D8 YI SYLLABLE FUT
-A0D9 YI SYLLABLE FUX
-A0DA YI SYLLABLE FU
-A0DB YI SYLLABLE FUP
-A0DC YI SYLLABLE FURX
-A0DD YI SYLLABLE FUR
-A0DE YI SYLLABLE FYT
-A0DF YI SYLLABLE FYX
-A0E0 YI SYLLABLE FY
-A0E1 YI SYLLABLE FYP
-A0E2 YI SYLLABLE VIT
-A0E3 YI SYLLABLE VIX
-A0E4 YI SYLLABLE VI
-A0E5 YI SYLLABLE VIP
-A0E6 YI SYLLABLE VIET
-A0E7 YI SYLLABLE VIEX
-A0E8 YI SYLLABLE VIE
-A0E9 YI SYLLABLE VIEP
-A0EA YI SYLLABLE VAT
-A0EB YI SYLLABLE VAX
-A0EC YI SYLLABLE VA
-A0ED YI SYLLABLE VAP
-A0EE YI SYLLABLE VOT
-A0EF YI SYLLABLE VOX
-A0F0 YI SYLLABLE VO
-A0F1 YI SYLLABLE VOP
-A0F2 YI SYLLABLE VEX
-A0F3 YI SYLLABLE VEP
-A0F4 YI SYLLABLE VUT
-A0F5 YI SYLLABLE VUX
-A0F6 YI SYLLABLE VU
-A0F7 YI SYLLABLE VUP
-A0F8 YI SYLLABLE VURX
-A0F9 YI SYLLABLE VUR
-A0FA YI SYLLABLE VYT
-A0FB YI SYLLABLE VYX
-A0FC YI SYLLABLE VY
-A0FD YI SYLLABLE VYP
-A0FE YI SYLLABLE VYRX
-A0FF YI SYLLABLE VYR
-A100 YI SYLLABLE DIT
-A101 YI SYLLABLE DIX
-A102 YI SYLLABLE DI
-A103 YI SYLLABLE DIP
-A104 YI SYLLABLE DIEX
-A105 YI SYLLABLE DIE
-A106 YI SYLLABLE DIEP
-A107 YI SYLLABLE DAT
-A108 YI SYLLABLE DAX
-A109 YI SYLLABLE DA
-A10A YI SYLLABLE DAP
-A10B YI SYLLABLE DUOX
-A10C YI SYLLABLE DUO
-A10D YI SYLLABLE DOT
-A10E YI SYLLABLE DOX
-A10F YI SYLLABLE DO
-A110 YI SYLLABLE DOP
-A111 YI SYLLABLE DEX
-A112 YI SYLLABLE DE
-A113 YI SYLLABLE DEP
-A114 YI SYLLABLE DUT
-A115 YI SYLLABLE DUX
-A116 YI SYLLABLE DU
-A117 YI SYLLABLE DUP
-A118 YI SYLLABLE DURX
-A119 YI SYLLABLE DUR
-A11A YI SYLLABLE TIT
-A11B YI SYLLABLE TIX
-A11C YI SYLLABLE TI
-A11D YI SYLLABLE TIP
-A11E YI SYLLABLE TIEX
-A11F YI SYLLABLE TIE
-A120 YI SYLLABLE TIEP
-A121 YI SYLLABLE TAT
-A122 YI SYLLABLE TAX
-A123 YI SYLLABLE TA
-A124 YI SYLLABLE TAP
-A125 YI SYLLABLE TUOT
-A126 YI SYLLABLE TUOX
-A127 YI SYLLABLE TUO
-A128 YI SYLLABLE TUOP
-A129 YI SYLLABLE TOT
-A12A YI SYLLABLE TOX
-A12B YI SYLLABLE TO
-A12C YI SYLLABLE TOP
-A12D YI SYLLABLE TEX
-A12E YI SYLLABLE TE
-A12F YI SYLLABLE TEP
-A130 YI SYLLABLE TUT
-A131 YI SYLLABLE TUX
-A132 YI SYLLABLE TU
-A133 YI SYLLABLE TUP
-A134 YI SYLLABLE TURX
-A135 YI SYLLABLE TUR
-A136 YI SYLLABLE DDIT
-A137 YI SYLLABLE DDIX
-A138 YI SYLLABLE DDI
-A139 YI SYLLABLE DDIP
-A13A YI SYLLABLE DDIEX
-A13B YI SYLLABLE DDIE
-A13C YI SYLLABLE DDIEP
-A13D YI SYLLABLE DDAT
-A13E YI SYLLABLE DDAX
-A13F YI SYLLABLE DDA
-A140 YI SYLLABLE DDAP
-A141 YI SYLLABLE DDUOX
-A142 YI SYLLABLE DDUO
-A143 YI SYLLABLE DDUOP
-A144 YI SYLLABLE DDOT
-A145 YI SYLLABLE DDOX
-A146 YI SYLLABLE DDO
-A147 YI SYLLABLE DDOP
-A148 YI SYLLABLE DDEX
-A149 YI SYLLABLE DDE
-A14A YI SYLLABLE DDEP
-A14B YI SYLLABLE DDUT
-A14C YI SYLLABLE DDUX
-A14D YI SYLLABLE DDU
-A14E YI SYLLABLE DDUP
-A14F YI SYLLABLE DDURX
-A150 YI SYLLABLE DDUR
-A151 YI SYLLABLE NDIT
-A152 YI SYLLABLE NDIX
-A153 YI SYLLABLE NDI
-A154 YI SYLLABLE NDIP
-A155 YI SYLLABLE NDIEX
-A156 YI SYLLABLE NDIE
-A157 YI SYLLABLE NDAT
-A158 YI SYLLABLE NDAX
-A159 YI SYLLABLE NDA
-A15A YI SYLLABLE NDAP
-A15B YI SYLLABLE NDOT
-A15C YI SYLLABLE NDOX
-A15D YI SYLLABLE NDO
-A15E YI SYLLABLE NDOP
-A15F YI SYLLABLE NDEX
-A160 YI SYLLABLE NDE
-A161 YI SYLLABLE NDEP
-A162 YI SYLLABLE NDUT
-A163 YI SYLLABLE NDUX
-A164 YI SYLLABLE NDU
-A165 YI SYLLABLE NDUP
-A166 YI SYLLABLE NDURX
-A167 YI SYLLABLE NDUR
-A168 YI SYLLABLE HNIT
-A169 YI SYLLABLE HNIX
-A16A YI SYLLABLE HNI
-A16B YI SYLLABLE HNIP
-A16C YI SYLLABLE HNIET
-A16D YI SYLLABLE HNIEX
-A16E YI SYLLABLE HNIE
-A16F YI SYLLABLE HNIEP
-A170 YI SYLLABLE HNAT
-A171 YI SYLLABLE HNAX
-A172 YI SYLLABLE HNA
-A173 YI SYLLABLE HNAP
-A174 YI SYLLABLE HNUOX
-A175 YI SYLLABLE HNUO
-A176 YI SYLLABLE HNOT
-A177 YI SYLLABLE HNOX
-A178 YI SYLLABLE HNOP
-A179 YI SYLLABLE HNEX
-A17A YI SYLLABLE HNE
-A17B YI SYLLABLE HNEP
-A17C YI SYLLABLE HNUT
-A17D YI SYLLABLE NIT
-A17E YI SYLLABLE NIX
-A17F YI SYLLABLE NI
-A180 YI SYLLABLE NIP
-A181 YI SYLLABLE NIEX
-A182 YI SYLLABLE NIE
-A183 YI SYLLABLE NIEP
-A184 YI SYLLABLE NAX
-A185 YI SYLLABLE NA
-A186 YI SYLLABLE NAP
-A187 YI SYLLABLE NUOX
-A188 YI SYLLABLE NUO
-A189 YI SYLLABLE NUOP
-A18A YI SYLLABLE NOT
-A18B YI SYLLABLE NOX
-A18C YI SYLLABLE NO
-A18D YI SYLLABLE NOP
-A18E YI SYLLABLE NEX
-A18F YI SYLLABLE NE
-A190 YI SYLLABLE NEP
-A191 YI SYLLABLE NUT
-A192 YI SYLLABLE NUX
-A193 YI SYLLABLE NU
-A194 YI SYLLABLE NUP
-A195 YI SYLLABLE NURX
-A196 YI SYLLABLE NUR
-A197 YI SYLLABLE HLIT
-A198 YI SYLLABLE HLIX
-A199 YI SYLLABLE HLI
-A19A YI SYLLABLE HLIP
-A19B YI SYLLABLE HLIEX
-A19C YI SYLLABLE HLIE
-A19D YI SYLLABLE HLIEP
-A19E YI SYLLABLE HLAT
-A19F YI SYLLABLE HLAX
-A1A0 YI SYLLABLE HLA
-A1A1 YI SYLLABLE HLAP
-A1A2 YI SYLLABLE HLUOX
-A1A3 YI SYLLABLE HLUO
-A1A4 YI SYLLABLE HLUOP
-A1A5 YI SYLLABLE HLOX
-A1A6 YI SYLLABLE HLO
-A1A7 YI SYLLABLE HLOP
-A1A8 YI SYLLABLE HLEX
-A1A9 YI SYLLABLE HLE
-A1AA YI SYLLABLE HLEP
-A1AB YI SYLLABLE HLUT
-A1AC YI SYLLABLE HLUX
-A1AD YI SYLLABLE HLU
-A1AE YI SYLLABLE HLUP
-A1AF YI SYLLABLE HLURX
-A1B0 YI SYLLABLE HLUR
-A1B1 YI SYLLABLE HLYT
-A1B2 YI SYLLABLE HLYX
-A1B3 YI SYLLABLE HLY
-A1B4 YI SYLLABLE HLYP
-A1B5 YI SYLLABLE HLYRX
-A1B6 YI SYLLABLE HLYR
-A1B7 YI SYLLABLE LIT
-A1B8 YI SYLLABLE LIX
-A1B9 YI SYLLABLE LI
-A1BA YI SYLLABLE LIP
-A1BB YI SYLLABLE LIET
-A1BC YI SYLLABLE LIEX
-A1BD YI SYLLABLE LIE
-A1BE YI SYLLABLE LIEP
-A1BF YI SYLLABLE LAT
-A1C0 YI SYLLABLE LAX
-A1C1 YI SYLLABLE LA
-A1C2 YI SYLLABLE LAP
-A1C3 YI SYLLABLE LUOT
-A1C4 YI SYLLABLE LUOX
-A1C5 YI SYLLABLE LUO
-A1C6 YI SYLLABLE LUOP
-A1C7 YI SYLLABLE LOT
-A1C8 YI SYLLABLE LOX
-A1C9 YI SYLLABLE LO
-A1CA YI SYLLABLE LOP
-A1CB YI SYLLABLE LEX
-A1CC YI SYLLABLE LE
-A1CD YI SYLLABLE LEP
-A1CE YI SYLLABLE LUT
-A1CF YI SYLLABLE LUX
-A1D0 YI SYLLABLE LU
-A1D1 YI SYLLABLE LUP
-A1D2 YI SYLLABLE LURX
-A1D3 YI SYLLABLE LUR
-A1D4 YI SYLLABLE LYT
-A1D5 YI SYLLABLE LYX
-A1D6 YI SYLLABLE LY
-A1D7 YI SYLLABLE LYP
-A1D8 YI SYLLABLE LYRX
-A1D9 YI SYLLABLE LYR
-A1DA YI SYLLABLE GIT
-A1DB YI SYLLABLE GIX
-A1DC YI SYLLABLE GI
-A1DD YI SYLLABLE GIP
-A1DE YI SYLLABLE GIET
-A1DF YI SYLLABLE GIEX
-A1E0 YI SYLLABLE GIE
-A1E1 YI SYLLABLE GIEP
-A1E2 YI SYLLABLE GAT
-A1E3 YI SYLLABLE GAX
-A1E4 YI SYLLABLE GA
-A1E5 YI SYLLABLE GAP
-A1E6 YI SYLLABLE GUOT
-A1E7 YI SYLLABLE GUOX
-A1E8 YI SYLLABLE GUO
-A1E9 YI SYLLABLE GUOP
-A1EA YI SYLLABLE GOT
-A1EB YI SYLLABLE GOX
-A1EC YI SYLLABLE GO
-A1ED YI SYLLABLE GOP
-A1EE YI SYLLABLE GET
-A1EF YI SYLLABLE GEX
-A1F0 YI SYLLABLE GE
-A1F1 YI SYLLABLE GEP
-A1F2 YI SYLLABLE GUT
-A1F3 YI SYLLABLE GUX
-A1F4 YI SYLLABLE GU
-A1F5 YI SYLLABLE GUP
-A1F6 YI SYLLABLE GURX
-A1F7 YI SYLLABLE GUR
-A1F8 YI SYLLABLE KIT
-A1F9 YI SYLLABLE KIX
-A1FA YI SYLLABLE KI
-A1FB YI SYLLABLE KIP
-A1FC YI SYLLABLE KIEX
-A1FD YI SYLLABLE KIE
-A1FE YI SYLLABLE KIEP
-A1FF YI SYLLABLE KAT
-A200 YI SYLLABLE KAX
-A201 YI SYLLABLE KA
-A202 YI SYLLABLE KAP
-A203 YI SYLLABLE KUOX
-A204 YI SYLLABLE KUO
-A205 YI SYLLABLE KUOP
-A206 YI SYLLABLE KOT
-A207 YI SYLLABLE KOX
-A208 YI SYLLABLE KO
-A209 YI SYLLABLE KOP
-A20A YI SYLLABLE KET
-A20B YI SYLLABLE KEX
-A20C YI SYLLABLE KE
-A20D YI SYLLABLE KEP
-A20E YI SYLLABLE KUT
-A20F YI SYLLABLE KUX
-A210 YI SYLLABLE KU
-A211 YI SYLLABLE KUP
-A212 YI SYLLABLE KURX
-A213 YI SYLLABLE KUR
-A214 YI SYLLABLE GGIT
-A215 YI SYLLABLE GGIX
-A216 YI SYLLABLE GGI
-A217 YI SYLLABLE GGIEX
-A218 YI SYLLABLE GGIE
-A219 YI SYLLABLE GGIEP
-A21A YI SYLLABLE GGAT
-A21B YI SYLLABLE GGAX
-A21C YI SYLLABLE GGA
-A21D YI SYLLABLE GGAP
-A21E YI SYLLABLE GGUOT
-A21F YI SYLLABLE GGUOX
-A220 YI SYLLABLE GGUO
-A221 YI SYLLABLE GGUOP
-A222 YI SYLLABLE GGOT
-A223 YI SYLLABLE GGOX
-A224 YI SYLLABLE GGO
-A225 YI SYLLABLE GGOP
-A226 YI SYLLABLE GGET
-A227 YI SYLLABLE GGEX
-A228 YI SYLLABLE GGE
-A229 YI SYLLABLE GGEP
-A22A YI SYLLABLE GGUT
-A22B YI SYLLABLE GGUX
-A22C YI SYLLABLE GGU
-A22D YI SYLLABLE GGUP
-A22E YI SYLLABLE GGURX
-A22F YI SYLLABLE GGUR
-A230 YI SYLLABLE MGIEX
-A231 YI SYLLABLE MGIE
-A232 YI SYLLABLE MGAT
-A233 YI SYLLABLE MGAX
-A234 YI SYLLABLE MGA
-A235 YI SYLLABLE MGAP
-A236 YI SYLLABLE MGUOX
-A237 YI SYLLABLE MGUO
-A238 YI SYLLABLE MGUOP
-A239 YI SYLLABLE MGOT
-A23A YI SYLLABLE MGOX
-A23B YI SYLLABLE MGO
-A23C YI SYLLABLE MGOP
-A23D YI SYLLABLE MGEX
-A23E YI SYLLABLE MGE
-A23F YI SYLLABLE MGEP
-A240 YI SYLLABLE MGUT
-A241 YI SYLLABLE MGUX
-A242 YI SYLLABLE MGU
-A243 YI SYLLABLE MGUP
-A244 YI SYLLABLE MGURX
-A245 YI SYLLABLE MGUR
-A246 YI SYLLABLE HXIT
-A247 YI SYLLABLE HXIX
-A248 YI SYLLABLE HXI
-A249 YI SYLLABLE HXIP
-A24A YI SYLLABLE HXIET
-A24B YI SYLLABLE HXIEX
-A24C YI SYLLABLE HXIE
-A24D YI SYLLABLE HXIEP
-A24E YI SYLLABLE HXAT
-A24F YI SYLLABLE HXAX
-A250 YI SYLLABLE HXA
-A251 YI SYLLABLE HXAP
-A252 YI SYLLABLE HXUOT
-A253 YI SYLLABLE HXUOX
-A254 YI SYLLABLE HXUO
-A255 YI SYLLABLE HXUOP
-A256 YI SYLLABLE HXOT
-A257 YI SYLLABLE HXOX
-A258 YI SYLLABLE HXO
-A259 YI SYLLABLE HXOP
-A25A YI SYLLABLE HXEX
-A25B YI SYLLABLE HXE
-A25C YI SYLLABLE HXEP
-A25D YI SYLLABLE NGIEX
-A25E YI SYLLABLE NGIE
-A25F YI SYLLABLE NGIEP
-A260 YI SYLLABLE NGAT
-A261 YI SYLLABLE NGAX
-A262 YI SYLLABLE NGA
-A263 YI SYLLABLE NGAP
-A264 YI SYLLABLE NGUOT
-A265 YI SYLLABLE NGUOX
-A266 YI SYLLABLE NGUO
-A267 YI SYLLABLE NGOT
-A268 YI SYLLABLE NGOX
-A269 YI SYLLABLE NGO
-A26A YI SYLLABLE NGOP
-A26B YI SYLLABLE NGEX
-A26C YI SYLLABLE NGE
-A26D YI SYLLABLE NGEP
-A26E YI SYLLABLE HIT
-A26F YI SYLLABLE HIEX
-A270 YI SYLLABLE HIE
-A271 YI SYLLABLE HAT
-A272 YI SYLLABLE HAX
-A273 YI SYLLABLE HA
-A274 YI SYLLABLE HAP
-A275 YI SYLLABLE HUOT
-A276 YI SYLLABLE HUOX
-A277 YI SYLLABLE HUO
-A278 YI SYLLABLE HUOP
-A279 YI SYLLABLE HOT
-A27A YI SYLLABLE HOX
-A27B YI SYLLABLE HO
-A27C YI SYLLABLE HOP
-A27D YI SYLLABLE HEX
-A27E YI SYLLABLE HE
-A27F YI SYLLABLE HEP
-A280 YI SYLLABLE WAT
-A281 YI SYLLABLE WAX
-A282 YI SYLLABLE WA
-A283 YI SYLLABLE WAP
-A284 YI SYLLABLE WUOX
-A285 YI SYLLABLE WUO
-A286 YI SYLLABLE WUOP
-A287 YI SYLLABLE WOX
-A288 YI SYLLABLE WO
-A289 YI SYLLABLE WOP
-A28A YI SYLLABLE WEX
-A28B YI SYLLABLE WE
-A28C YI SYLLABLE WEP
-A28D YI SYLLABLE ZIT
-A28E YI SYLLABLE ZIX
-A28F YI SYLLABLE ZI
-A290 YI SYLLABLE ZIP
-A291 YI SYLLABLE ZIEX
-A292 YI SYLLABLE ZIE
-A293 YI SYLLABLE ZIEP
-A294 YI SYLLABLE ZAT
-A295 YI SYLLABLE ZAX
-A296 YI SYLLABLE ZA
-A297 YI SYLLABLE ZAP
-A298 YI SYLLABLE ZUOX
-A299 YI SYLLABLE ZUO
-A29A YI SYLLABLE ZUOP
-A29B YI SYLLABLE ZOT
-A29C YI SYLLABLE ZOX
-A29D YI SYLLABLE ZO
-A29E YI SYLLABLE ZOP
-A29F YI SYLLABLE ZEX
-A2A0 YI SYLLABLE ZE
-A2A1 YI SYLLABLE ZEP
-A2A2 YI SYLLABLE ZUT
-A2A3 YI SYLLABLE ZUX
-A2A4 YI SYLLABLE ZU
-A2A5 YI SYLLABLE ZUP
-A2A6 YI SYLLABLE ZURX
-A2A7 YI SYLLABLE ZUR
-A2A8 YI SYLLABLE ZYT
-A2A9 YI SYLLABLE ZYX
-A2AA YI SYLLABLE ZY
-A2AB YI SYLLABLE ZYP
-A2AC YI SYLLABLE ZYRX
-A2AD YI SYLLABLE ZYR
-A2AE YI SYLLABLE CIT
-A2AF YI SYLLABLE CIX
-A2B0 YI SYLLABLE CI
-A2B1 YI SYLLABLE CIP
-A2B2 YI SYLLABLE CIET
-A2B3 YI SYLLABLE CIEX
-A2B4 YI SYLLABLE CIE
-A2B5 YI SYLLABLE CIEP
-A2B6 YI SYLLABLE CAT
-A2B7 YI SYLLABLE CAX
-A2B8 YI SYLLABLE CA
-A2B9 YI SYLLABLE CAP
-A2BA YI SYLLABLE CUOX
-A2BB YI SYLLABLE CUO
-A2BC YI SYLLABLE CUOP
-A2BD YI SYLLABLE COT
-A2BE YI SYLLABLE COX
-A2BF YI SYLLABLE CO
-A2C0 YI SYLLABLE COP
-A2C1 YI SYLLABLE CEX
-A2C2 YI SYLLABLE CE
-A2C3 YI SYLLABLE CEP
-A2C4 YI SYLLABLE CUT
-A2C5 YI SYLLABLE CUX
-A2C6 YI SYLLABLE CU
-A2C7 YI SYLLABLE CUP
-A2C8 YI SYLLABLE CURX
-A2C9 YI SYLLABLE CUR
-A2CA YI SYLLABLE CYT
-A2CB YI SYLLABLE CYX
-A2CC YI SYLLABLE CY
-A2CD YI SYLLABLE CYP
-A2CE YI SYLLABLE CYRX
-A2CF YI SYLLABLE CYR
-A2D0 YI SYLLABLE ZZIT
-A2D1 YI SYLLABLE ZZIX
-A2D2 YI SYLLABLE ZZI
-A2D3 YI SYLLABLE ZZIP
-A2D4 YI SYLLABLE ZZIET
-A2D5 YI SYLLABLE ZZIEX
-A2D6 YI SYLLABLE ZZIE
-A2D7 YI SYLLABLE ZZIEP
-A2D8 YI SYLLABLE ZZAT
-A2D9 YI SYLLABLE ZZAX
-A2DA YI SYLLABLE ZZA
-A2DB YI SYLLABLE ZZAP
-A2DC YI SYLLABLE ZZOX
-A2DD YI SYLLABLE ZZO
-A2DE YI SYLLABLE ZZOP
-A2DF YI SYLLABLE ZZEX
-A2E0 YI SYLLABLE ZZE
-A2E1 YI SYLLABLE ZZEP
-A2E2 YI SYLLABLE ZZUX
-A2E3 YI SYLLABLE ZZU
-A2E4 YI SYLLABLE ZZUP
-A2E5 YI SYLLABLE ZZURX
-A2E6 YI SYLLABLE ZZUR
-A2E7 YI SYLLABLE ZZYT
-A2E8 YI SYLLABLE ZZYX
-A2E9 YI SYLLABLE ZZY
-A2EA YI SYLLABLE ZZYP
-A2EB YI SYLLABLE ZZYRX
-A2EC YI SYLLABLE ZZYR
-A2ED YI SYLLABLE NZIT
-A2EE YI SYLLABLE NZIX
-A2EF YI SYLLABLE NZI
-A2F0 YI SYLLABLE NZIP
-A2F1 YI SYLLABLE NZIEX
-A2F2 YI SYLLABLE NZIE
-A2F3 YI SYLLABLE NZIEP
-A2F4 YI SYLLABLE NZAT
-A2F5 YI SYLLABLE NZAX
-A2F6 YI SYLLABLE NZA
-A2F7 YI SYLLABLE NZAP
-A2F8 YI SYLLABLE NZUOX
-A2F9 YI SYLLABLE NZUO
-A2FA YI SYLLABLE NZOX
-A2FB YI SYLLABLE NZOP
-A2FC YI SYLLABLE NZEX
-A2FD YI SYLLABLE NZE
-A2FE YI SYLLABLE NZUX
-A2FF YI SYLLABLE NZU
-A300 YI SYLLABLE NZUP
-A301 YI SYLLABLE NZURX
-A302 YI SYLLABLE NZUR
-A303 YI SYLLABLE NZYT
-A304 YI SYLLABLE NZYX
-A305 YI SYLLABLE NZY
-A306 YI SYLLABLE NZYP
-A307 YI SYLLABLE NZYRX
-A308 YI SYLLABLE NZYR
-A309 YI SYLLABLE SIT
-A30A YI SYLLABLE SIX
-A30B YI SYLLABLE SI
-A30C YI SYLLABLE SIP
-A30D YI SYLLABLE SIEX
-A30E YI SYLLABLE SIE
-A30F YI SYLLABLE SIEP
-A310 YI SYLLABLE SAT
-A311 YI SYLLABLE SAX
-A312 YI SYLLABLE SA
-A313 YI SYLLABLE SAP
-A314 YI SYLLABLE SUOX
-A315 YI SYLLABLE SUO
-A316 YI SYLLABLE SUOP
-A317 YI SYLLABLE SOT
-A318 YI SYLLABLE SOX
-A319 YI SYLLABLE SO
-A31A YI SYLLABLE SOP
-A31B YI SYLLABLE SEX
-A31C YI SYLLABLE SE
-A31D YI SYLLABLE SEP
-A31E YI SYLLABLE SUT
-A31F YI SYLLABLE SUX
-A320 YI SYLLABLE SU
-A321 YI SYLLABLE SUP
-A322 YI SYLLABLE SURX
-A323 YI SYLLABLE SUR
-A324 YI SYLLABLE SYT
-A325 YI SYLLABLE SYX
-A326 YI SYLLABLE SY
-A327 YI SYLLABLE SYP
-A328 YI SYLLABLE SYRX
-A329 YI SYLLABLE SYR
-A32A YI SYLLABLE SSIT
-A32B YI SYLLABLE SSIX
-A32C YI SYLLABLE SSI
-A32D YI SYLLABLE SSIP
-A32E YI SYLLABLE SSIEX
-A32F YI SYLLABLE SSIE
-A330 YI SYLLABLE SSIEP
-A331 YI SYLLABLE SSAT
-A332 YI SYLLABLE SSAX
-A333 YI SYLLABLE SSA
-A334 YI SYLLABLE SSAP
-A335 YI SYLLABLE SSOT
-A336 YI SYLLABLE SSOX
-A337 YI SYLLABLE SSO
-A338 YI SYLLABLE SSOP
-A339 YI SYLLABLE SSEX
-A33A YI SYLLABLE SSE
-A33B YI SYLLABLE SSEP
-A33C YI SYLLABLE SSUT
-A33D YI SYLLABLE SSUX
-A33E YI SYLLABLE SSU
-A33F YI SYLLABLE SSUP
-A340 YI SYLLABLE SSYT
-A341 YI SYLLABLE SSYX
-A342 YI SYLLABLE SSY
-A343 YI SYLLABLE SSYP
-A344 YI SYLLABLE SSYRX
-A345 YI SYLLABLE SSYR
-A346 YI SYLLABLE ZHAT
-A347 YI SYLLABLE ZHAX
-A348 YI SYLLABLE ZHA
-A349 YI SYLLABLE ZHAP
-A34A YI SYLLABLE ZHUOX
-A34B YI SYLLABLE ZHUO
-A34C YI SYLLABLE ZHUOP
-A34D YI SYLLABLE ZHOT
-A34E YI SYLLABLE ZHOX
-A34F YI SYLLABLE ZHO
-A350 YI SYLLABLE ZHOP
-A351 YI SYLLABLE ZHET
-A352 YI SYLLABLE ZHEX
-A353 YI SYLLABLE ZHE
-A354 YI SYLLABLE ZHEP
-A355 YI SYLLABLE ZHUT
-A356 YI SYLLABLE ZHUX
-A357 YI SYLLABLE ZHU
-A358 YI SYLLABLE ZHUP
-A359 YI SYLLABLE ZHURX
-A35A YI SYLLABLE ZHUR
-A35B YI SYLLABLE ZHYT
-A35C YI SYLLABLE ZHYX
-A35D YI SYLLABLE ZHY
-A35E YI SYLLABLE ZHYP
-A35F YI SYLLABLE ZHYRX
-A360 YI SYLLABLE ZHYR
-A361 YI SYLLABLE CHAT
-A362 YI SYLLABLE CHAX
-A363 YI SYLLABLE CHA
-A364 YI SYLLABLE CHAP
-A365 YI SYLLABLE CHUOT
-A366 YI SYLLABLE CHUOX
-A367 YI SYLLABLE CHUO
-A368 YI SYLLABLE CHUOP
-A369 YI SYLLABLE CHOT
-A36A YI SYLLABLE CHOX
-A36B YI SYLLABLE CHO
-A36C YI SYLLABLE CHOP
-A36D YI SYLLABLE CHET
-A36E YI SYLLABLE CHEX
-A36F YI SYLLABLE CHE
-A370 YI SYLLABLE CHEP
-A371 YI SYLLABLE CHUX
-A372 YI SYLLABLE CHU
-A373 YI SYLLABLE CHUP
-A374 YI SYLLABLE CHURX
-A375 YI SYLLABLE CHUR
-A376 YI SYLLABLE CHYT
-A377 YI SYLLABLE CHYX
-A378 YI SYLLABLE CHY
-A379 YI SYLLABLE CHYP
-A37A YI SYLLABLE CHYRX
-A37B YI SYLLABLE CHYR
-A37C YI SYLLABLE RRAX
-A37D YI SYLLABLE RRA
-A37E YI SYLLABLE RRUOX
-A37F YI SYLLABLE RRUO
-A380 YI SYLLABLE RROT
-A381 YI SYLLABLE RROX
-A382 YI SYLLABLE RRO
-A383 YI SYLLABLE RROP
-A384 YI SYLLABLE RRET
-A385 YI SYLLABLE RREX
-A386 YI SYLLABLE RRE
-A387 YI SYLLABLE RREP
-A388 YI SYLLABLE RRUT
-A389 YI SYLLABLE RRUX
-A38A YI SYLLABLE RRU
-A38B YI SYLLABLE RRUP
-A38C YI SYLLABLE RRURX
-A38D YI SYLLABLE RRUR
-A38E YI SYLLABLE RRYT
-A38F YI SYLLABLE RRYX
-A390 YI SYLLABLE RRY
-A391 YI SYLLABLE RRYP
-A392 YI SYLLABLE RRYRX
-A393 YI SYLLABLE RRYR
-A394 YI SYLLABLE NRAT
-A395 YI SYLLABLE NRAX
-A396 YI SYLLABLE NRA
-A397 YI SYLLABLE NRAP
-A398 YI SYLLABLE NROX
-A399 YI SYLLABLE NRO
-A39A YI SYLLABLE NROP
-A39B YI SYLLABLE NRET
-A39C YI SYLLABLE NREX
-A39D YI SYLLABLE NRE
-A39E YI SYLLABLE NREP
-A39F YI SYLLABLE NRUT
-A3A0 YI SYLLABLE NRUX
-A3A1 YI SYLLABLE NRU
-A3A2 YI SYLLABLE NRUP
-A3A3 YI SYLLABLE NRURX
-A3A4 YI SYLLABLE NRUR
-A3A5 YI SYLLABLE NRYT
-A3A6 YI SYLLABLE NRYX
-A3A7 YI SYLLABLE NRY
-A3A8 YI SYLLABLE NRYP
-A3A9 YI SYLLABLE NRYRX
-A3AA YI SYLLABLE NRYR
-A3AB YI SYLLABLE SHAT
-A3AC YI SYLLABLE SHAX
-A3AD YI SYLLABLE SHA
-A3AE YI SYLLABLE SHAP
-A3AF YI SYLLABLE SHUOX
-A3B0 YI SYLLABLE SHUO
-A3B1 YI SYLLABLE SHUOP
-A3B2 YI SYLLABLE SHOT
-A3B3 YI SYLLABLE SHOX
-A3B4 YI SYLLABLE SHO
-A3B5 YI SYLLABLE SHOP
-A3B6 YI SYLLABLE SHET
-A3B7 YI SYLLABLE SHEX
-A3B8 YI SYLLABLE SHE
-A3B9 YI SYLLABLE SHEP
-A3BA YI SYLLABLE SHUT
-A3BB YI SYLLABLE SHUX
-A3BC YI SYLLABLE SHU
-A3BD YI SYLLABLE SHUP
-A3BE YI SYLLABLE SHURX
-A3BF YI SYLLABLE SHUR
-A3C0 YI SYLLABLE SHYT
-A3C1 YI SYLLABLE SHYX
-A3C2 YI SYLLABLE SHY
-A3C3 YI SYLLABLE SHYP
-A3C4 YI SYLLABLE SHYRX
-A3C5 YI SYLLABLE SHYR
-A3C6 YI SYLLABLE RAT
-A3C7 YI SYLLABLE RAX
-A3C8 YI SYLLABLE RA
-A3C9 YI SYLLABLE RAP
-A3CA YI SYLLABLE RUOX
-A3CB YI SYLLABLE RUO
-A3CC YI SYLLABLE RUOP
-A3CD YI SYLLABLE ROT
-A3CE YI SYLLABLE ROX
-A3CF YI SYLLABLE RO
-A3D0 YI SYLLABLE ROP
-A3D1 YI SYLLABLE REX
-A3D2 YI SYLLABLE RE
-A3D3 YI SYLLABLE REP
-A3D4 YI SYLLABLE RUT
-A3D5 YI SYLLABLE RUX
-A3D6 YI SYLLABLE RU
-A3D7 YI SYLLABLE RUP
-A3D8 YI SYLLABLE RURX
-A3D9 YI SYLLABLE RUR
-A3DA YI SYLLABLE RYT
-A3DB YI SYLLABLE RYX
-A3DC YI SYLLABLE RY
-A3DD YI SYLLABLE RYP
-A3DE YI SYLLABLE RYRX
-A3DF YI SYLLABLE RYR
-A3E0 YI SYLLABLE JIT
-A3E1 YI SYLLABLE JIX
-A3E2 YI SYLLABLE JI
-A3E3 YI SYLLABLE JIP
-A3E4 YI SYLLABLE JIET
-A3E5 YI SYLLABLE JIEX
-A3E6 YI SYLLABLE JIE
-A3E7 YI SYLLABLE JIEP
-A3E8 YI SYLLABLE JUOT
-A3E9 YI SYLLABLE JUOX
-A3EA YI SYLLABLE JUO
-A3EB YI SYLLABLE JUOP
-A3EC YI SYLLABLE JOT
-A3ED YI SYLLABLE JOX
-A3EE YI SYLLABLE JO
-A3EF YI SYLLABLE JOP
-A3F0 YI SYLLABLE JUT
-A3F1 YI SYLLABLE JUX
-A3F2 YI SYLLABLE JU
-A3F3 YI SYLLABLE JUP
-A3F4 YI SYLLABLE JURX
-A3F5 YI SYLLABLE JUR
-A3F6 YI SYLLABLE JYT
-A3F7 YI SYLLABLE JYX
-A3F8 YI SYLLABLE JY
-A3F9 YI SYLLABLE JYP
-A3FA YI SYLLABLE JYRX
-A3FB YI SYLLABLE JYR
-A3FC YI SYLLABLE QIT
-A3FD YI SYLLABLE QIX
-A3FE YI SYLLABLE QI
-A3FF YI SYLLABLE QIP
-A400 YI SYLLABLE QIET
-A401 YI SYLLABLE QIEX
-A402 YI SYLLABLE QIE
-A403 YI SYLLABLE QIEP
-A404 YI SYLLABLE QUOT
-A405 YI SYLLABLE QUOX
-A406 YI SYLLABLE QUO
-A407 YI SYLLABLE QUOP
-A408 YI SYLLABLE QOT
-A409 YI SYLLABLE QOX
-A40A YI SYLLABLE QO
-A40B YI SYLLABLE QOP
-A40C YI SYLLABLE QUT
-A40D YI SYLLABLE QUX
-A40E YI SYLLABLE QU
-A40F YI SYLLABLE QUP
-A410 YI SYLLABLE QURX
-A411 YI SYLLABLE QUR
-A412 YI SYLLABLE QYT
-A413 YI SYLLABLE QYX
-A414 YI SYLLABLE QY
-A415 YI SYLLABLE QYP
-A416 YI SYLLABLE QYRX
-A417 YI SYLLABLE QYR
-A418 YI SYLLABLE JJIT
-A419 YI SYLLABLE JJIX
-A41A YI SYLLABLE JJI
-A41B YI SYLLABLE JJIP
-A41C YI SYLLABLE JJIET
-A41D YI SYLLABLE JJIEX
-A41E YI SYLLABLE JJIE
-A41F YI SYLLABLE JJIEP
-A420 YI SYLLABLE JJUOX
-A421 YI SYLLABLE JJUO
-A422 YI SYLLABLE JJUOP
-A423 YI SYLLABLE JJOT
-A424 YI SYLLABLE JJOX
-A425 YI SYLLABLE JJO
-A426 YI SYLLABLE JJOP
-A427 YI SYLLABLE JJUT
-A428 YI SYLLABLE JJUX
-A429 YI SYLLABLE JJU
-A42A YI SYLLABLE JJUP
-A42B YI SYLLABLE JJURX
-A42C YI SYLLABLE JJUR
-A42D YI SYLLABLE JJYT
-A42E YI SYLLABLE JJYX
-A42F YI SYLLABLE JJY
-A430 YI SYLLABLE JJYP
-A431 YI SYLLABLE NJIT
-A432 YI SYLLABLE NJIX
-A433 YI SYLLABLE NJI
-A434 YI SYLLABLE NJIP
-A435 YI SYLLABLE NJIET
-A436 YI SYLLABLE NJIEX
-A437 YI SYLLABLE NJIE
-A438 YI SYLLABLE NJIEP
-A439 YI SYLLABLE NJUOX
-A43A YI SYLLABLE NJUO
-A43B YI SYLLABLE NJOT
-A43C YI SYLLABLE NJOX
-A43D YI SYLLABLE NJO
-A43E YI SYLLABLE NJOP
-A43F YI SYLLABLE NJUX
-A440 YI SYLLABLE NJU
-A441 YI SYLLABLE NJUP
-A442 YI SYLLABLE NJURX
-A443 YI SYLLABLE NJUR
-A444 YI SYLLABLE NJYT
-A445 YI SYLLABLE NJYX
-A446 YI SYLLABLE NJY
-A447 YI SYLLABLE NJYP
-A448 YI SYLLABLE NJYRX
-A449 YI SYLLABLE NJYR
-A44A YI SYLLABLE NYIT
-A44B YI SYLLABLE NYIX
-A44C YI SYLLABLE NYI
-A44D YI SYLLABLE NYIP
-A44E YI SYLLABLE NYIET
-A44F YI SYLLABLE NYIEX
-A450 YI SYLLABLE NYIE
-A451 YI SYLLABLE NYIEP
-A452 YI SYLLABLE NYUOX
-A453 YI SYLLABLE NYUO
-A454 YI SYLLABLE NYUOP
-A455 YI SYLLABLE NYOT
-A456 YI SYLLABLE NYOX
-A457 YI SYLLABLE NYO
-A458 YI SYLLABLE NYOP
-A459 YI SYLLABLE NYUT
-A45A YI SYLLABLE NYUX
-A45B YI SYLLABLE NYU
-A45C YI SYLLABLE NYUP
-A45D YI SYLLABLE XIT
-A45E YI SYLLABLE XIX
-A45F YI SYLLABLE XI
-A460 YI SYLLABLE XIP
-A461 YI SYLLABLE XIET
-A462 YI SYLLABLE XIEX
-A463 YI SYLLABLE XIE
-A464 YI SYLLABLE XIEP
-A465 YI SYLLABLE XUOX
-A466 YI SYLLABLE XUO
-A467 YI SYLLABLE XOT
-A468 YI SYLLABLE XOX
-A469 YI SYLLABLE XO
-A46A YI SYLLABLE XOP
-A46B YI SYLLABLE XYT
-A46C YI SYLLABLE XYX
-A46D YI SYLLABLE XY
-A46E YI SYLLABLE XYP
-A46F YI SYLLABLE XYRX
-A470 YI SYLLABLE XYR
-A471 YI SYLLABLE YIT
-A472 YI SYLLABLE YIX
-A473 YI SYLLABLE YI
-A474 YI SYLLABLE YIP
-A475 YI SYLLABLE YIET
-A476 YI SYLLABLE YIEX
-A477 YI SYLLABLE YIE
-A478 YI SYLLABLE YIEP
-A479 YI SYLLABLE YUOT
-A47A YI SYLLABLE YUOX
-A47B YI SYLLABLE YUO
-A47C YI SYLLABLE YUOP
-A47D YI SYLLABLE YOT
-A47E YI SYLLABLE YOX
-A47F YI SYLLABLE YO
-A480 YI SYLLABLE YOP
-A481 YI SYLLABLE YUT
-A482 YI SYLLABLE YUX
-A483 YI SYLLABLE YU
-A484 YI SYLLABLE YUP
-A485 YI SYLLABLE YURX
-A486 YI SYLLABLE YUR
-A487 YI SYLLABLE YYT
-A488 YI SYLLABLE YYX
-A489 YI SYLLABLE YY
-A48A YI SYLLABLE YYP
-A48B YI SYLLABLE YYRX
-A48C YI SYLLABLE YYR
-@@ A490 Yi Radicals A4CF
-@ Yi radicals
-A490 YI RADICAL QOT
-A491 YI RADICAL LI
-A492 YI RADICAL KIT
-A493 YI RADICAL NYIP
-A494 YI RADICAL CYP
-A495 YI RADICAL SSI
-A496 YI RADICAL GGOP
-A497 YI RADICAL GEP
-A498 YI RADICAL MI
-A499 YI RADICAL HXIT
-A49A YI RADICAL LYR
-A49B YI RADICAL BBUT
-A49C YI RADICAL MOP
-A49D YI RADICAL YO
-A49E YI RADICAL PUT
-A49F YI RADICAL HXUO
-A4A0 YI RADICAL TAT
-A4A1 YI RADICAL GA
-A4A4 YI RADICAL DDUR
-A4A5 YI RADICAL BUR
-A4A6 YI RADICAL GGUO
-A4A7 YI RADICAL NYOP
-A4A8 YI RADICAL TU
-A4A9 YI RADICAL OP
-A4AA YI RADICAL JJUT
-A4AB YI RADICAL ZOT
-A4AC YI RADICAL PYT
-A4AD YI RADICAL HMO
-A4AE YI RADICAL YIT
-A4AF YI RADICAL VUR
-A4B0 YI RADICAL SHY
-A4B1 YI RADICAL VEP
-A4B2 YI RADICAL ZA
-A4B3 YI RADICAL JO
-A4B5 YI RADICAL JJY
-A4B6 YI RADICAL GOT
-A4B7 YI RADICAL JJIE
-A4B8 YI RADICAL WO
-A4B9 YI RADICAL DU
-A4BA YI RADICAL SHUR
-A4BB YI RADICAL LIE
-A4BC YI RADICAL CY
-A4BD YI RADICAL CUOP
-A4BE YI RADICAL CIP
-A4BF YI RADICAL HXOP
-A4C0 YI RADICAL SHAT
-A4C2 YI RADICAL SHOP
-A4C3 YI RADICAL CHE
-A4C4 YI RADICAL ZZIET
-A4C6 YI RADICAL KE
-@@ AC00 Hangul Syllables D7A3
-@@ D800 High Surrogates DB7F
-@@ DB80 High Private Use Surrogates DBFF
-@@ DC00 Low Surrogates DFFF
-@@ E000 Private Use Area F8FF
-@@ F900 CJK Compatibility Ideographs FAFF
-@ Pronunciation variants from KS C 5601-1987
-F900 CJK COMPATIBILITY IDEOGRAPH-F900
- : 8C48
-F901 CJK COMPATIBILITY IDEOGRAPH-F901
- : 66F4
-F902 CJK COMPATIBILITY IDEOGRAPH-F902
- : 8ECA
-F903 CJK COMPATIBILITY IDEOGRAPH-F903
- : 8CC8
-F904 CJK COMPATIBILITY IDEOGRAPH-F904
- : 6ED1
-F905 CJK COMPATIBILITY IDEOGRAPH-F905
- : 4E32
-F906 CJK COMPATIBILITY IDEOGRAPH-F906
- : 53E5
-F907 CJK COMPATIBILITY IDEOGRAPH-F907
- : 9F9C
-F908 CJK COMPATIBILITY IDEOGRAPH-F908
- : 9F9C
-F909 CJK COMPATIBILITY IDEOGRAPH-F909
- : 5951
-F90A CJK COMPATIBILITY IDEOGRAPH-F90A
- : 91D1
-F90B CJK COMPATIBILITY IDEOGRAPH-F90B
- : 5587
-F90C CJK COMPATIBILITY IDEOGRAPH-F90C
- : 5948
-F90D CJK COMPATIBILITY IDEOGRAPH-F90D
- : 61F6
-F90E CJK COMPATIBILITY IDEOGRAPH-F90E
- : 7669
-F90F CJK COMPATIBILITY IDEOGRAPH-F90F
- : 7F85
-F910 CJK COMPATIBILITY IDEOGRAPH-F910
- : 863F
-F911 CJK COMPATIBILITY IDEOGRAPH-F911
- : 87BA
-F912 CJK COMPATIBILITY IDEOGRAPH-F912
- : 88F8
-F913 CJK COMPATIBILITY IDEOGRAPH-F913
- : 908F
-F914 CJK COMPATIBILITY IDEOGRAPH-F914
- : 6A02
-F915 CJK COMPATIBILITY IDEOGRAPH-F915
- : 6D1B
-F916 CJK COMPATIBILITY IDEOGRAPH-F916
- : 70D9
-F917 CJK COMPATIBILITY IDEOGRAPH-F917
- : 73DE
-F918 CJK COMPATIBILITY IDEOGRAPH-F918
- : 843D
-F919 CJK COMPATIBILITY IDEOGRAPH-F919
- : 916A
-F91A CJK COMPATIBILITY IDEOGRAPH-F91A
- : 99F1
-F91B CJK COMPATIBILITY IDEOGRAPH-F91B
- : 4E82
-F91C CJK COMPATIBILITY IDEOGRAPH-F91C
- : 5375
-F91D CJK COMPATIBILITY IDEOGRAPH-F91D
- : 6B04
-F91E CJK COMPATIBILITY IDEOGRAPH-F91E
- : 721B
-F91F CJK COMPATIBILITY IDEOGRAPH-F91F
- : 862D
-F920 CJK COMPATIBILITY IDEOGRAPH-F920
- : 9E1E
-F921 CJK COMPATIBILITY IDEOGRAPH-F921
- : 5D50
-F922 CJK COMPATIBILITY IDEOGRAPH-F922
- : 6FEB
-F923 CJK COMPATIBILITY IDEOGRAPH-F923
- : 85CD
-F924 CJK COMPATIBILITY IDEOGRAPH-F924
- : 8964
-F925 CJK COMPATIBILITY IDEOGRAPH-F925
- : 62C9
-F926 CJK COMPATIBILITY IDEOGRAPH-F926
- : 81D8
-F927 CJK COMPATIBILITY IDEOGRAPH-F927
- : 881F
-F928 CJK COMPATIBILITY IDEOGRAPH-F928
- : 5ECA
-F929 CJK COMPATIBILITY IDEOGRAPH-F929
- : 6717
-F92A CJK COMPATIBILITY IDEOGRAPH-F92A
- : 6D6A
-F92B CJK COMPATIBILITY IDEOGRAPH-F92B
- : 72FC
-F92C CJK COMPATIBILITY IDEOGRAPH-F92C
- : 90CE
-F92D CJK COMPATIBILITY IDEOGRAPH-F92D
- : 4F86
-F92E CJK COMPATIBILITY IDEOGRAPH-F92E
- : 51B7
-F92F CJK COMPATIBILITY IDEOGRAPH-F92F
- : 52DE
-F930 CJK COMPATIBILITY IDEOGRAPH-F930
- : 64C4
-F931 CJK COMPATIBILITY IDEOGRAPH-F931
- : 6AD3
-F932 CJK COMPATIBILITY IDEOGRAPH-F932
- : 7210
-F933 CJK COMPATIBILITY IDEOGRAPH-F933
- : 76E7
-F934 CJK COMPATIBILITY IDEOGRAPH-F934
- : 8001
-F935 CJK COMPATIBILITY IDEOGRAPH-F935
- : 8606
-F936 CJK COMPATIBILITY IDEOGRAPH-F936
- : 865C
-F937 CJK COMPATIBILITY IDEOGRAPH-F937
- : 8DEF
-F938 CJK COMPATIBILITY IDEOGRAPH-F938
- : 9732
-F939 CJK COMPATIBILITY IDEOGRAPH-F939
- : 9B6F
-F93A CJK COMPATIBILITY IDEOGRAPH-F93A
- : 9DFA
-F93B CJK COMPATIBILITY IDEOGRAPH-F93B
- : 788C
-F93C CJK COMPATIBILITY IDEOGRAPH-F93C
- : 797F
-F93D CJK COMPATIBILITY IDEOGRAPH-F93D
- : 7DA0
-F93E CJK COMPATIBILITY IDEOGRAPH-F93E
- : 83C9
-F93F CJK COMPATIBILITY IDEOGRAPH-F93F
- : 9304
-F940 CJK COMPATIBILITY IDEOGRAPH-F940
- : 9E7F
-F941 CJK COMPATIBILITY IDEOGRAPH-F941
- : 8AD6
-F942 CJK COMPATIBILITY IDEOGRAPH-F942
- : 58DF
-F943 CJK COMPATIBILITY IDEOGRAPH-F943
- : 5F04
-F944 CJK COMPATIBILITY IDEOGRAPH-F944
- : 7C60
-F945 CJK COMPATIBILITY IDEOGRAPH-F945
- : 807E
-F946 CJK COMPATIBILITY IDEOGRAPH-F946
- : 7262
-F947 CJK COMPATIBILITY IDEOGRAPH-F947
- : 78CA
-F948 CJK COMPATIBILITY IDEOGRAPH-F948
- : 8CC2
-F949 CJK COMPATIBILITY IDEOGRAPH-F949
- : 96F7
-F94A CJK COMPATIBILITY IDEOGRAPH-F94A
- : 58D8
-F94B CJK COMPATIBILITY IDEOGRAPH-F94B
- : 5C62
-F94C CJK COMPATIBILITY IDEOGRAPH-F94C
- : 6A13
-F94D CJK COMPATIBILITY IDEOGRAPH-F94D
- : 6DDA
-F94E CJK COMPATIBILITY IDEOGRAPH-F94E
- : 6F0F
-F94F CJK COMPATIBILITY IDEOGRAPH-F94F
- : 7D2F
-F950 CJK COMPATIBILITY IDEOGRAPH-F950
- : 7E37
-F951 CJK COMPATIBILITY IDEOGRAPH-F951
- : 96FB
-F952 CJK COMPATIBILITY IDEOGRAPH-F952
- : 52D2
-F953 CJK COMPATIBILITY IDEOGRAPH-F953
- : 808B
-F954 CJK COMPATIBILITY IDEOGRAPH-F954
- : 51DC
-F955 CJK COMPATIBILITY IDEOGRAPH-F955
- : 51CC
-F956 CJK COMPATIBILITY IDEOGRAPH-F956
- : 7A1C
-F957 CJK COMPATIBILITY IDEOGRAPH-F957
- : 7DBE
-F958 CJK COMPATIBILITY IDEOGRAPH-F958
- : 83F1
-F959 CJK COMPATIBILITY IDEOGRAPH-F959
- : 9675
-F95A CJK COMPATIBILITY IDEOGRAPH-F95A
- : 8B80
-F95B CJK COMPATIBILITY IDEOGRAPH-F95B
- : 62CF
-F95C CJK COMPATIBILITY IDEOGRAPH-F95C
- : 6A02
-F95D CJK COMPATIBILITY IDEOGRAPH-F95D
- : 8AFE
-F95E CJK COMPATIBILITY IDEOGRAPH-F95E
- : 4E39
-F95F CJK COMPATIBILITY IDEOGRAPH-F95F
- : 5BE7
-F960 CJK COMPATIBILITY IDEOGRAPH-F960
- : 6012
-F961 CJK COMPATIBILITY IDEOGRAPH-F961
- : 7387
-F962 CJK COMPATIBILITY IDEOGRAPH-F962
- : 7570
-F963 CJK COMPATIBILITY IDEOGRAPH-F963
- : 5317
-F964 CJK COMPATIBILITY IDEOGRAPH-F964
- : 78FB
-F965 CJK COMPATIBILITY IDEOGRAPH-F965
- : 4FBF
-F966 CJK COMPATIBILITY IDEOGRAPH-F966
- : 5FA9
-F967 CJK COMPATIBILITY IDEOGRAPH-F967
- : 4E0D
-F968 CJK COMPATIBILITY IDEOGRAPH-F968
- : 6CCC
-F969 CJK COMPATIBILITY IDEOGRAPH-F969
- : 6578
-F96A CJK COMPATIBILITY IDEOGRAPH-F96A
- : 7D22
-F96B CJK COMPATIBILITY IDEOGRAPH-F96B
- : 53C3
-F96C CJK COMPATIBILITY IDEOGRAPH-F96C
- : 585E
-F96D CJK COMPATIBILITY IDEOGRAPH-F96D
- : 7701
-F96E CJK COMPATIBILITY IDEOGRAPH-F96E
- : 8449
-F96F CJK COMPATIBILITY IDEOGRAPH-F96F
- : 8AAA
-F970 CJK COMPATIBILITY IDEOGRAPH-F970
- : 6BBA
-F971 CJK COMPATIBILITY IDEOGRAPH-F971
- : 8FB0
-F972 CJK COMPATIBILITY IDEOGRAPH-F972
- : 6C88
-F973 CJK COMPATIBILITY IDEOGRAPH-F973
- : 62FE
-F974 CJK COMPATIBILITY IDEOGRAPH-F974
- : 82E5
-F975 CJK COMPATIBILITY IDEOGRAPH-F975
- : 63A0
-F976 CJK COMPATIBILITY IDEOGRAPH-F976
- : 7565
-F977 CJK COMPATIBILITY IDEOGRAPH-F977
- : 4EAE
-F978 CJK COMPATIBILITY IDEOGRAPH-F978
- : 5169
-F979 CJK COMPATIBILITY IDEOGRAPH-F979
- : 51C9
-F97A CJK COMPATIBILITY IDEOGRAPH-F97A
- : 6881
-F97B CJK COMPATIBILITY IDEOGRAPH-F97B
- : 7CE7
-F97C CJK COMPATIBILITY IDEOGRAPH-F97C
- : 826F
-F97D CJK COMPATIBILITY IDEOGRAPH-F97D
- : 8AD2
-F97E CJK COMPATIBILITY IDEOGRAPH-F97E
- : 91CF
-F97F CJK COMPATIBILITY IDEOGRAPH-F97F
- : 52F5
-F980 CJK COMPATIBILITY IDEOGRAPH-F980
- : 5442
-F981 CJK COMPATIBILITY IDEOGRAPH-F981
- : 5973
-F982 CJK COMPATIBILITY IDEOGRAPH-F982
- : 5EEC
-F983 CJK COMPATIBILITY IDEOGRAPH-F983
- : 65C5
-F984 CJK COMPATIBILITY IDEOGRAPH-F984
- : 6FFE
-F985 CJK COMPATIBILITY IDEOGRAPH-F985
- : 792A
-F986 CJK COMPATIBILITY IDEOGRAPH-F986
- : 95AD
-F987 CJK COMPATIBILITY IDEOGRAPH-F987
- : 9A6A
-F988 CJK COMPATIBILITY IDEOGRAPH-F988
- : 9E97
-F989 CJK COMPATIBILITY IDEOGRAPH-F989
- : 9ECE
-F98A CJK COMPATIBILITY IDEOGRAPH-F98A
- : 529B
-F98B CJK COMPATIBILITY IDEOGRAPH-F98B
- : 66C6
-F98C CJK COMPATIBILITY IDEOGRAPH-F98C
- : 6B77
-F98D CJK COMPATIBILITY IDEOGRAPH-F98D
- : 8F62
-F98E CJK COMPATIBILITY IDEOGRAPH-F98E
- : 5E74
-F98F CJK COMPATIBILITY IDEOGRAPH-F98F
- : 6190
-F990 CJK COMPATIBILITY IDEOGRAPH-F990
- : 6200
-F991 CJK COMPATIBILITY IDEOGRAPH-F991
- : 649A
-F992 CJK COMPATIBILITY IDEOGRAPH-F992
- : 6F23
-F993 CJK COMPATIBILITY IDEOGRAPH-F993
- : 7149
-F994 CJK COMPATIBILITY IDEOGRAPH-F994
- : 7489
-F995 CJK COMPATIBILITY IDEOGRAPH-F995
- : 79CA
-F996 CJK COMPATIBILITY IDEOGRAPH-F996
- : 7DF4
-F997 CJK COMPATIBILITY IDEOGRAPH-F997
- : 806F
-F998 CJK COMPATIBILITY IDEOGRAPH-F998
- : 8F26
-F999 CJK COMPATIBILITY IDEOGRAPH-F999
- : 84EE
-F99A CJK COMPATIBILITY IDEOGRAPH-F99A
- : 9023
-F99B CJK COMPATIBILITY IDEOGRAPH-F99B
- : 934A
-F99C CJK COMPATIBILITY IDEOGRAPH-F99C
- : 5217
-F99D CJK COMPATIBILITY IDEOGRAPH-F99D
- : 52A3
-F99E CJK COMPATIBILITY IDEOGRAPH-F99E
- : 54BD
-F99F CJK COMPATIBILITY IDEOGRAPH-F99F
- : 70C8
-F9A0 CJK COMPATIBILITY IDEOGRAPH-F9A0
- : 88C2
-F9A1 CJK COMPATIBILITY IDEOGRAPH-F9A1
- : 8AAA
-F9A2 CJK COMPATIBILITY IDEOGRAPH-F9A2
- : 5EC9
-F9A3 CJK COMPATIBILITY IDEOGRAPH-F9A3
- : 5FF5
-F9A4 CJK COMPATIBILITY IDEOGRAPH-F9A4
- : 637B
-F9A5 CJK COMPATIBILITY IDEOGRAPH-F9A5
- : 6BAE
-F9A6 CJK COMPATIBILITY IDEOGRAPH-F9A6
- : 7C3E
-F9A7 CJK COMPATIBILITY IDEOGRAPH-F9A7
- : 7375
-F9A8 CJK COMPATIBILITY IDEOGRAPH-F9A8
- : 4EE4
-F9A9 CJK COMPATIBILITY IDEOGRAPH-F9A9
- : 56F9
-F9AA CJK COMPATIBILITY IDEOGRAPH-F9AA
- : 5BE7
-F9AB CJK COMPATIBILITY IDEOGRAPH-F9AB
- : 5DBA
-F9AC CJK COMPATIBILITY IDEOGRAPH-F9AC
- : 601C
-F9AD CJK COMPATIBILITY IDEOGRAPH-F9AD
- : 73B2
-F9AE CJK COMPATIBILITY IDEOGRAPH-F9AE
- : 7469
-F9AF CJK COMPATIBILITY IDEOGRAPH-F9AF
- : 7F9A
-F9B0 CJK COMPATIBILITY IDEOGRAPH-F9B0
- : 8046
-F9B1 CJK COMPATIBILITY IDEOGRAPH-F9B1
- : 9234
-F9B2 CJK COMPATIBILITY IDEOGRAPH-F9B2
- : 96F6
-F9B3 CJK COMPATIBILITY IDEOGRAPH-F9B3
- : 9748
-F9B4 CJK COMPATIBILITY IDEOGRAPH-F9B4
- : 9818
-F9B5 CJK COMPATIBILITY IDEOGRAPH-F9B5
- : 4F8B
-F9B6 CJK COMPATIBILITY IDEOGRAPH-F9B6
- : 79AE
-F9B7 CJK COMPATIBILITY IDEOGRAPH-F9B7
- : 91B4
-F9B8 CJK COMPATIBILITY IDEOGRAPH-F9B8
- : 96B8
-F9B9 CJK COMPATIBILITY IDEOGRAPH-F9B9
- : 60E1
-F9BA CJK COMPATIBILITY IDEOGRAPH-F9BA
- : 4E86
-F9BB CJK COMPATIBILITY IDEOGRAPH-F9BB
- : 50DA
-F9BC CJK COMPATIBILITY IDEOGRAPH-F9BC
- : 5BEE
-F9BD CJK COMPATIBILITY IDEOGRAPH-F9BD
- : 5C3F
-F9BE CJK COMPATIBILITY IDEOGRAPH-F9BE
- : 6599
-F9BF CJK COMPATIBILITY IDEOGRAPH-F9BF
- : 6A02
-F9C0 CJK COMPATIBILITY IDEOGRAPH-F9C0
- : 71CE
-F9C1 CJK COMPATIBILITY IDEOGRAPH-F9C1
- : 7642
-F9C2 CJK COMPATIBILITY IDEOGRAPH-F9C2
- : 84FC
-F9C3 CJK COMPATIBILITY IDEOGRAPH-F9C3
- : 907C
-F9C4 CJK COMPATIBILITY IDEOGRAPH-F9C4
- : 9F8D
-F9C5 CJK COMPATIBILITY IDEOGRAPH-F9C5
- : 6688
-F9C6 CJK COMPATIBILITY IDEOGRAPH-F9C6
- : 962E
-F9C7 CJK COMPATIBILITY IDEOGRAPH-F9C7
- : 5289
-F9C8 CJK COMPATIBILITY IDEOGRAPH-F9C8
- : 677B
-F9C9 CJK COMPATIBILITY IDEOGRAPH-F9C9
- : 67F3
-F9CA CJK COMPATIBILITY IDEOGRAPH-F9CA
- : 6D41
-F9CB CJK COMPATIBILITY IDEOGRAPH-F9CB
- : 6E9C
-F9CC CJK COMPATIBILITY IDEOGRAPH-F9CC
- : 7409
-F9CD CJK COMPATIBILITY IDEOGRAPH-F9CD
- : 7559
-F9CE CJK COMPATIBILITY IDEOGRAPH-F9CE
- : 786B
-F9CF CJK COMPATIBILITY IDEOGRAPH-F9CF
- : 7D10
-F9D0 CJK COMPATIBILITY IDEOGRAPH-F9D0
- : 985E
-F9D1 CJK COMPATIBILITY IDEOGRAPH-F9D1
- : 516D
-F9D2 CJK COMPATIBILITY IDEOGRAPH-F9D2
- : 622E
-F9D3 CJK COMPATIBILITY IDEOGRAPH-F9D3
- : 9678
-F9D4 CJK COMPATIBILITY IDEOGRAPH-F9D4
- : 502B
-F9D5 CJK COMPATIBILITY IDEOGRAPH-F9D5
- : 5D19
-F9D6 CJK COMPATIBILITY IDEOGRAPH-F9D6
- : 6DEA
-F9D7 CJK COMPATIBILITY IDEOGRAPH-F9D7
- : 8F2A
-F9D8 CJK COMPATIBILITY IDEOGRAPH-F9D8
- : 5F8B
-F9D9 CJK COMPATIBILITY IDEOGRAPH-F9D9
- : 6144
-F9DA CJK COMPATIBILITY IDEOGRAPH-F9DA
- : 6817
-F9DB CJK COMPATIBILITY IDEOGRAPH-F9DB
- : 7387
-F9DC CJK COMPATIBILITY IDEOGRAPH-F9DC
- : 9686
-F9DD CJK COMPATIBILITY IDEOGRAPH-F9DD
- : 5229
-F9DE CJK COMPATIBILITY IDEOGRAPH-F9DE
- : 540F
-F9DF CJK COMPATIBILITY IDEOGRAPH-F9DF
- : 5C65
-F9E0 CJK COMPATIBILITY IDEOGRAPH-F9E0
- : 6613
-F9E1 CJK COMPATIBILITY IDEOGRAPH-F9E1
- : 674E
-F9E2 CJK COMPATIBILITY IDEOGRAPH-F9E2
- : 68A8
-F9E3 CJK COMPATIBILITY IDEOGRAPH-F9E3
- : 6CE5
-F9E4 CJK COMPATIBILITY IDEOGRAPH-F9E4
- : 7406
-F9E5 CJK COMPATIBILITY IDEOGRAPH-F9E5
- : 75E2
-F9E6 CJK COMPATIBILITY IDEOGRAPH-F9E6
- : 7F79
-F9E7 CJK COMPATIBILITY IDEOGRAPH-F9E7
- : 88CF
-F9E8 CJK COMPATIBILITY IDEOGRAPH-F9E8
- : 88E1
-F9E9 CJK COMPATIBILITY IDEOGRAPH-F9E9
- : 91CC
-F9EA CJK COMPATIBILITY IDEOGRAPH-F9EA
- : 96E2
-F9EB CJK COMPATIBILITY IDEOGRAPH-F9EB
- : 533F
-F9EC CJK COMPATIBILITY IDEOGRAPH-F9EC
- : 6EBA
-F9ED CJK COMPATIBILITY IDEOGRAPH-F9ED
- : 541D
-F9EE CJK COMPATIBILITY IDEOGRAPH-F9EE
- : 71D0
-F9EF CJK COMPATIBILITY IDEOGRAPH-F9EF
- : 7498
-F9F0 CJK COMPATIBILITY IDEOGRAPH-F9F0
- : 85FA
-F9F1 CJK COMPATIBILITY IDEOGRAPH-F9F1
- : 96A3
-F9F2 CJK COMPATIBILITY IDEOGRAPH-F9F2
- : 9C57
-F9F3 CJK COMPATIBILITY IDEOGRAPH-F9F3
- : 9E9F
-F9F4 CJK COMPATIBILITY IDEOGRAPH-F9F4
- : 6797
-F9F5 CJK COMPATIBILITY IDEOGRAPH-F9F5
- : 6DCB
-F9F6 CJK COMPATIBILITY IDEOGRAPH-F9F6
- : 81E8
-F9F7 CJK COMPATIBILITY IDEOGRAPH-F9F7
- : 7ACB
-F9F8 CJK COMPATIBILITY IDEOGRAPH-F9F8
- : 7B20
-F9F9 CJK COMPATIBILITY IDEOGRAPH-F9F9
- : 7C92
-F9FA CJK COMPATIBILITY IDEOGRAPH-F9FA
- : 72C0
-F9FB CJK COMPATIBILITY IDEOGRAPH-F9FB
- : 7099
-F9FC CJK COMPATIBILITY IDEOGRAPH-F9FC
- : 8B58
-F9FD CJK COMPATIBILITY IDEOGRAPH-F9FD
- : 4EC0
-F9FE CJK COMPATIBILITY IDEOGRAPH-F9FE
- : 8336
-F9FF CJK COMPATIBILITY IDEOGRAPH-F9FF
- : 523A
-FA00 CJK COMPATIBILITY IDEOGRAPH-FA00
- : 5207
-FA01 CJK COMPATIBILITY IDEOGRAPH-FA01
- : 5EA6
-FA02 CJK COMPATIBILITY IDEOGRAPH-FA02
- : 62D3
-FA03 CJK COMPATIBILITY IDEOGRAPH-FA03
- : 7CD6
-FA04 CJK COMPATIBILITY IDEOGRAPH-FA04
- : 5B85
-FA05 CJK COMPATIBILITY IDEOGRAPH-FA05
- : 6D1E
-FA06 CJK COMPATIBILITY IDEOGRAPH-FA06
- : 66B4
-FA07 CJK COMPATIBILITY IDEOGRAPH-FA07
- : 8F3B
-FA08 CJK COMPATIBILITY IDEOGRAPH-FA08
- : 884C
-FA09 CJK COMPATIBILITY IDEOGRAPH-FA09
- : 964D
-FA0A CJK COMPATIBILITY IDEOGRAPH-FA0A
- : 898B
-FA0B CJK COMPATIBILITY IDEOGRAPH-FA0B
- : 5ED3
-@ Duplicates from Big 5
-FA0C CJK COMPATIBILITY IDEOGRAPH-FA0C
- : 5140
-FA0D CJK COMPATIBILITY IDEOGRAPH-FA0D
- : 55C0
-@ The IBM 32 compatibility additions
-FA0E CJK COMPATIBILITY IDEOGRAPH-FA0E
- * in the set of unified ideographs
-FA0F CJK COMPATIBILITY IDEOGRAPH-FA0F
- * in the set of unified ideographs
-FA10 CJK COMPATIBILITY IDEOGRAPH-FA10
- : 585A
-FA11 CJK COMPATIBILITY IDEOGRAPH-FA11
- * in the set of unified ideographs
-FA12 CJK COMPATIBILITY IDEOGRAPH-FA12
- : 6674
-FA13 CJK COMPATIBILITY IDEOGRAPH-FA13
- * in the set of unified ideographs
-FA14 CJK COMPATIBILITY IDEOGRAPH-FA14
- * in the set of unified ideographs
-FA15 CJK COMPATIBILITY IDEOGRAPH-FA15
- : 51DE
-FA16 CJK COMPATIBILITY IDEOGRAPH-FA16
- : 732A
-FA17 CJK COMPATIBILITY IDEOGRAPH-FA17
- : 76CA
-FA18 CJK COMPATIBILITY IDEOGRAPH-FA18
- : 793C
-FA19 CJK COMPATIBILITY IDEOGRAPH-FA19
- : 795E
-FA1A CJK COMPATIBILITY IDEOGRAPH-FA1A
- : 7965
-FA1B CJK COMPATIBILITY IDEOGRAPH-FA1B
- : 798F
-FA1C CJK COMPATIBILITY IDEOGRAPH-FA1C
- : 9756
-FA1D CJK COMPATIBILITY IDEOGRAPH-FA1D
- : 7CBE
-FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E
- : 7FBD
-FA1F CJK COMPATIBILITY IDEOGRAPH-FA1F *
- * in the set of unified ideographs
-FA20 CJK COMPATIBILITY IDEOGRAPH-FA20
- : 8612
-FA21 CJK COMPATIBILITY IDEOGRAPH-FA21
- * in the set of unified ideographs
-FA22 CJK COMPATIBILITY IDEOGRAPH-FA22
- : 8AF8
-FA23 CJK COMPATIBILITY IDEOGRAPH-FA23 *
- * in the set of unified ideographs
-FA24 CJK COMPATIBILITY IDEOGRAPH-FA24
- * in the set of unified ideographs
-FA25 CJK COMPATIBILITY IDEOGRAPH-FA25
- : 9038
-FA26 CJK COMPATIBILITY IDEOGRAPH-FA26
- : 90FD
-FA27 CJK COMPATIBILITY IDEOGRAPH-FA27
- * in the set of unified ideographs
-FA28 CJK COMPATIBILITY IDEOGRAPH-FA28
- * in the set of unified ideographs
-FA29 CJK COMPATIBILITY IDEOGRAPH-FA29
- * in the set of unified ideographs
-FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A
- : 98EF
-FA2B CJK COMPATIBILITY IDEOGRAPH-FA2B
- : 98FC
-FA2C CJK COMPATIBILITY IDEOGRAPH-FA2C
- : 9928
-FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D
- : 9DB4
-@@ FB00 Alphabetic Presentation Forms FB4F
-@ Latin ligatures
-@+ See the Basic Latin block starting at 0020
-FB00 LATIN SMALL LIGATURE FF
- # 0066 0066
-FB01 LATIN SMALL LIGATURE FI
- # 0066 0069
-FB02 LATIN SMALL LIGATURE FL
- # 0066 006C
-FB03 LATIN SMALL LIGATURE FFI
- # 0066 0066 0069
-FB04 LATIN SMALL LIGATURE FFL
- # 0066 0066 006C
-FB05 LATIN SMALL LIGATURE LONG S T
- # 017F 0074
-FB06 LATIN SMALL LIGATURE ST
- # 0073 0074
-@ Armenian ligatures
-@+ See the Armenian block starting at 0530
-FB13 ARMENIAN SMALL LIGATURE MEN NOW
- # 0574 0576
-FB14 ARMENIAN SMALL LIGATURE MEN ECH
- # 0574 0565
-FB15 ARMENIAN SMALL LIGATURE MEN INI
- # 0574 056B
-FB16 ARMENIAN SMALL LIGATURE VEW NOW
- # 057E 0576
-FB17 ARMENIAN SMALL LIGATURE MEN XEH
- # 0574 056D
-@ Hebrew presentation forms
-@+ See the Hebrew block starting at 0590
-FB1D HEBREW LETTER YOD WITH HIRIQ
- : 05D9 05B4
-FB1E HEBREW POINT JUDEO-SPANISH VARIKA
-FB1F HEBREW LIGATURE YIDDISH YOD YOD PATAH
- : 05F2 05B7
-FB20 HEBREW LETTER ALTERNATIVE AYIN
- # <font> 05E2 hebrew letter ayin
-FB21 HEBREW LETTER WIDE ALEF
- # <font> 05D0 hebrew letter alef
-FB22 HEBREW LETTER WIDE DALET
- # <font> 05D3 hebrew letter dalet
-FB23 HEBREW LETTER WIDE HE
- # <font> 05D4 hebrew letter he
-FB24 HEBREW LETTER WIDE KAF
- # <font> 05DB hebrew letter kaf
-FB25 HEBREW LETTER WIDE LAMED
- # <font> 05DC hebrew letter lamed
-FB26 HEBREW LETTER WIDE FINAL MEM
- # <font> 05DD hebrew letter final mem
-FB27 HEBREW LETTER WIDE RESH
- # <font> 05E8 hebrew letter resh
-FB28 HEBREW LETTER WIDE TAV
- # <font> 05EA hebrew letter tav
-FB29 HEBREW LETTER ALTERNATIVE PLUS SIGN
- # <font> 002B plus sign
-FB2A HEBREW LETTER SHIN WITH SHIN DOT
- : 05E9 05C1
-FB2B HEBREW LETTER SHIN WITH SIN DOT
- : 05E9 05C2
-FB2C HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
- : FB49 05C1
-FB2D HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
- : FB49 05C2
-FB2E HEBREW LETTER ALEF WITH PATAH
- : 05D0 05B7
-FB2F HEBREW LETTER ALEF WITH QAMATS
- : 05D0 05B8
-FB30 HEBREW LETTER ALEF WITH MAPIQ
- : 05D0 05BC
-FB31 HEBREW LETTER BET WITH DAGESH
- : 05D1 05BC
-FB32 HEBREW LETTER GIMEL WITH DAGESH
- : 05D2 05BC
-FB33 HEBREW LETTER DALET WITH DAGESH
- : 05D3 05BC
-FB34 HEBREW LETTER HE WITH MAPIQ
- : 05D4 05BC
-FB35 HEBREW LETTER VAV WITH DAGESH
- : 05D5 05BC
-FB36 HEBREW LETTER ZAYIN WITH DAGESH
- : 05D6 05BC
-FB38 HEBREW LETTER TET WITH DAGESH
- : 05D8 05BC
-FB39 HEBREW LETTER YOD WITH DAGESH
- : 05D9 05BC
-FB3A HEBREW LETTER FINAL KAF WITH DAGESH
- : 05DA 05BC
-FB3B HEBREW LETTER KAF WITH DAGESH
- : 05DB 05BC
-FB3C HEBREW LETTER LAMED WITH DAGESH
- : 05DC 05BC
-FB3E HEBREW LETTER MEM WITH DAGESH
- : 05DE 05BC
-FB40 HEBREW LETTER NUN WITH DAGESH
- : 05E0 05BC
-FB41 HEBREW LETTER SAMEKH WITH DAGESH
- : 05E1 05BC
-FB43 HEBREW LETTER FINAL PE WITH DAGESH
- : 05E3 05BC
-FB44 HEBREW LETTER PE WITH DAGESH
- : 05E4 05BC
-FB46 HEBREW LETTER TSADI WITH DAGESH
- : 05E6 05BC
-FB47 HEBREW LETTER QOF WITH DAGESH
- : 05E7 05BC
-FB48 HEBREW LETTER RESH WITH DAGESH
- : 05E8 05BC
-FB49 HEBREW LETTER SHIN WITH DAGESH
- : 05E9 05BC
-FB4A HEBREW LETTER TAV WITH DAGESH
- : 05EA 05BC
-FB4B HEBREW LETTER VAV WITH HOLAM
- : 05D5 05B9
-FB4C HEBREW LETTER BET WITH RAFE
- : 05D1 05BF
-FB4D HEBREW LETTER KAF WITH RAFE
- : 05DB 05BF
-FB4E HEBREW LETTER PE WITH RAFE
- : 05E4 05BF
-FB4F HEBREW LIGATURE ALEF LAMED
- # 05D0 05DC
-@@ FB50 Arabic Presentation Forms-A FDFF
-@+ Preferred characters are found in the Arabic block 0600 - 06FF.
-@ Glyphs for contextual forms of letters for Persian, Urdu, Sindhi, etc.
-FB50 ARABIC LETTER ALEF WASLA ISOLATED FORM
- # <isolated> 0671
-FB51 ARABIC LETTER ALEF WASLA FINAL FORM
- # <final> 0671
-FB52 ARABIC LETTER BEEH ISOLATED FORM
- # <isolated> 067B
-FB53 ARABIC LETTER BEEH FINAL FORM
- # <final> 067B
-FB54 ARABIC LETTER BEEH INITIAL FORM
- # <initial> 067B
-FB55 ARABIC LETTER BEEH MEDIAL FORM
- # <medial> 067B
-FB56 ARABIC LETTER PEH ISOLATED FORM
- # <isolated> 067E
-FB57 ARABIC LETTER PEH FINAL FORM
- # <final> 067E
-FB58 ARABIC LETTER PEH INITIAL FORM
- # <initial> 067E
-FB59 ARABIC LETTER PEH MEDIAL FORM
- # <medial> 067E
-FB5A ARABIC LETTER BEHEH ISOLATED FORM
- # <isolated> 0680
-FB5B ARABIC LETTER BEHEH FINAL FORM
- # <final> 0680
-FB5C ARABIC LETTER BEHEH INITIAL FORM
- # <initial> 0680
-FB5D ARABIC LETTER BEHEH MEDIAL FORM
- # <medial> 0680
-FB5E ARABIC LETTER TTEHEH ISOLATED FORM
- # <isolated> 067A
-FB5F ARABIC LETTER TTEHEH FINAL FORM
- # <final> 067A
-FB60 ARABIC LETTER TTEHEH INITIAL FORM
- # <initial> 067A
-FB61 ARABIC LETTER TTEHEH MEDIAL FORM
- # <medial> 067A
-FB62 ARABIC LETTER TEHEH ISOLATED FORM
- # <isolated> 067F
-FB63 ARABIC LETTER TEHEH FINAL FORM
- # <final> 067F
-FB64 ARABIC LETTER TEHEH INITIAL FORM
- # <initial> 067F
-FB65 ARABIC LETTER TEHEH MEDIAL FORM
- # <medial> 067F
-FB66 ARABIC LETTER TTEH ISOLATED FORM
- # <isolated> 0679
-FB67 ARABIC LETTER TTEH FINAL FORM
- # <final> 0679
-FB68 ARABIC LETTER TTEH INITIAL FORM
- # <initial> 0679
-FB69 ARABIC LETTER TTEH MEDIAL FORM
- # <medial> 0679
-FB6A ARABIC LETTER VEH ISOLATED FORM
- # <isolated> 06A4
-FB6B ARABIC LETTER VEH FINAL FORM
- # <final> 06A4
-FB6C ARABIC LETTER VEH INITIAL FORM
- # <initial> 06A4
-FB6D ARABIC LETTER VEH MEDIAL FORM
- # <medial> 06A4
-FB6E ARABIC LETTER PEHEH ISOLATED FORM
- # <isolated> 06A6
-FB6F ARABIC LETTER PEHEH FINAL FORM
- # <final> 06A6
-FB70 ARABIC LETTER PEHEH INITIAL FORM
- # <initial> 06A6
-FB71 ARABIC LETTER PEHEH MEDIAL FORM
- # <medial> 06A6
-FB72 ARABIC LETTER DYEH ISOLATED FORM
- # <isolated> 0684
-FB73 ARABIC LETTER DYEH FINAL FORM
- # <final> 0684
-FB74 ARABIC LETTER DYEH INITIAL FORM
- # <initial> 0684
-FB75 ARABIC LETTER DYEH MEDIAL FORM
- # <medial> 0684
-FB76 ARABIC LETTER NYEH ISOLATED FORM
- # <isolated> 0683
-FB77 ARABIC LETTER NYEH FINAL FORM
- # <final> 0683
-FB78 ARABIC LETTER NYEH INITIAL FORM
- # <initial> 0683
-FB79 ARABIC LETTER NYEH MEDIAL FORM
- # <medial> 0683
-FB7A ARABIC LETTER TCHEH ISOLATED FORM
- # <isolated> 0686
-FB7B ARABIC LETTER TCHEH FINAL FORM
- # <final> 0686
-FB7C ARABIC LETTER TCHEH INITIAL FORM
- # <initial> 0686
-FB7D ARABIC LETTER TCHEH MEDIAL FORM
- # <medial> 0686
-FB7E ARABIC LETTER TCHEHEH ISOLATED FORM
- # <isolated> 0687
-FB7F ARABIC LETTER TCHEHEH FINAL FORM
- # <final> 0687
-FB80 ARABIC LETTER TCHEHEH INITIAL FORM
- # <initial> 0687
-FB81 ARABIC LETTER TCHEHEH MEDIAL FORM
- # <medial> 0687
-FB82 ARABIC LETTER DDAHAL ISOLATED FORM
- # <isolated> 068D
-FB83 ARABIC LETTER DDAHAL FINAL FORM
- # <final> 068D
-FB84 ARABIC LETTER DAHAL ISOLATED FORM
- # <isolated> 068C
-FB85 ARABIC LETTER DAHAL FINAL FORM
- # <final> 068C
-FB86 ARABIC LETTER DUL ISOLATED FORM
- # <isolated> 068E
-FB87 ARABIC LETTER DUL FINAL FORM
- # <final> 068E
-FB88 ARABIC LETTER DDAL ISOLATED FORM
- # <isolated> 0688
-FB89 ARABIC LETTER DDAL FINAL FORM
- # <final> 0688
-FB8A ARABIC LETTER JEH ISOLATED FORM
- # <isolated> 0698
-FB8B ARABIC LETTER JEH FINAL FORM
- # <final> 0698
-FB8C ARABIC LETTER RREH ISOLATED FORM
- # <isolated> 0691
-FB8D ARABIC LETTER RREH FINAL FORM
- # <final> 0691
-FB8E ARABIC LETTER KEHEH ISOLATED FORM
- # <isolated> 06A9
-FB8F ARABIC LETTER KEHEH FINAL FORM
- # <final> 06A9
-FB90 ARABIC LETTER KEHEH INITIAL FORM
- # <initial> 06A9
-FB91 ARABIC LETTER KEHEH MEDIAL FORM
- # <medial> 06A9
-FB92 ARABIC LETTER GAF ISOLATED FORM
- # <isolated> 06AF
-FB93 ARABIC LETTER GAF FINAL FORM
- # <final> 06AF
-FB94 ARABIC LETTER GAF INITIAL FORM
- # <initial> 06AF
-FB95 ARABIC LETTER GAF MEDIAL FORM
- # <medial> 06AF
-FB96 ARABIC LETTER GUEH ISOLATED FORM
- # <isolated> 06B3
-FB97 ARABIC LETTER GUEH FINAL FORM
- # <final> 06B3
-FB98 ARABIC LETTER GUEH INITIAL FORM
- # <initial> 06B3
-FB99 ARABIC LETTER GUEH MEDIAL FORM
- # <medial> 06B3
-FB9A ARABIC LETTER NGOEH ISOLATED FORM
- # <isolated> 06B1
-FB9B ARABIC LETTER NGOEH FINAL FORM
- # <final> 06B1
-FB9C ARABIC LETTER NGOEH INITIAL FORM
- # <initial> 06B1
-FB9D ARABIC LETTER NGOEH MEDIAL FORM
- # <medial> 06B1
-FB9E ARABIC LETTER NOON GHUNNA ISOLATED FORM
- # <isolated> 06BA
-FB9F ARABIC LETTER NOON GHUNNA FINAL FORM
- # <final> 06BA
-FBA0 ARABIC LETTER RNOON ISOLATED FORM
- # <isolated> 06BB
-FBA1 ARABIC LETTER RNOON FINAL FORM
- # <final> 06BB
-FBA2 ARABIC LETTER RNOON INITIAL FORM
- # <initial> 06BB
-FBA3 ARABIC LETTER RNOON MEDIAL FORM
- # <medial> 06BB
-FBA4 ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
- # <isolated> 06C0
-FBA5 ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
- # <final> 06C0
-FBA6 ARABIC LETTER HEH GOAL ISOLATED FORM
- # <isolated> 06C1
-FBA7 ARABIC LETTER HEH GOAL FINAL FORM
- # <final> 06C1
-FBA8 ARABIC LETTER HEH GOAL INITIAL FORM
- # <initial> 06C1
-FBA9 ARABIC LETTER HEH GOAL MEDIAL FORM
- # <medial> 06C1
-FBAA ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
- # <isolated> 06BE
-FBAB ARABIC LETTER HEH DOACHASHMEE FINAL FORM
- # <final> 06BE
-FBAC ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
- # <initial> 06BE
-FBAD ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
- # <medial> 06BE
-FBAE ARABIC LETTER YEH BARREE ISOLATED FORM
- # <isolated> 06D2
-FBAF ARABIC LETTER YEH BARREE FINAL FORM
- # <final> 06D2
-FBB0 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
- # <isolated> 06D3
-FBB1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
- # <final> 06D3
-@ Glyphs for contextual forms of letters for Central Asian languages
-FBD3 ARABIC LETTER NG ISOLATED FORM
- # <isolated> 06AD
-FBD4 ARABIC LETTER NG FINAL FORM
- # <final> 06AD
-FBD5 ARABIC LETTER NG INITIAL FORM
- # <initial> 06AD
-FBD6 ARABIC LETTER NG MEDIAL FORM
- # <medial> 06AD
-FBD7 ARABIC LETTER U ISOLATED FORM
- # <isolated> 06C7
-FBD8 ARABIC LETTER U FINAL FORM
- # <final> 06C7
-FBD9 ARABIC LETTER OE ISOLATED FORM
- # <isolated> 06C6
-FBDA ARABIC LETTER OE FINAL FORM
- # <final> 06C6
-FBDB ARABIC LETTER YU ISOLATED FORM
- # <isolated> 06C8
-FBDC ARABIC LETTER YU FINAL FORM
- # <final> 06C8
-FBDD ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
- # <isolated> 0677
-FBDE ARABIC LETTER VE ISOLATED FORM
- # <isolated> 06CB
-FBDF ARABIC LETTER VE FINAL FORM
- # <final> 06CB
-FBE0 ARABIC LETTER KIRGHIZ OE ISOLATED FORM
- # <isolated> 06C5
-FBE1 ARABIC LETTER KIRGHIZ OE FINAL FORM
- # <final> 06C5
-FBE2 ARABIC LETTER KIRGHIZ YU ISOLATED FORM
- # <isolated> 06C9
-FBE3 ARABIC LETTER KIRGHIZ YU FINAL FORM
- # <final> 06C9
-FBE4 ARABIC LETTER E ISOLATED FORM
- # <isolated> 06D0
-FBE5 ARABIC LETTER E FINAL FORM
- # <final> 06D0
-FBE6 ARABIC LETTER E INITIAL FORM
- # <initial> 06D0
-FBE7 ARABIC LETTER E MEDIAL FORM
- # <medial> 06D0
-FBE8 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
- # <initial> 0649
-FBE9 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
- # <medial> 0649
-@ Ligatures (two elements)
-FBEA ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
- # <isolated> 0626 0627
-FBEB ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
- # <final> 0626 0627
-FBEC ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
- # <isolated> 0626 06D5
-FBED ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
- # <final> 0626 06D5
-FBEE ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
- # <isolated> 0626 0648
-FBEF ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
- # <final> 0626 0648
-FBF0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
- # <isolated> 0626 06C7
-FBF1 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
- # <final> 0626 06C7
-FBF2 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
- # <isolated> 0626 06C6
-FBF3 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
- # <final> 0626 06C6
-FBF4 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
- # <isolated> 0626 06C8
-FBF5 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
- # <final> 0626 06C8
-FBF6 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
- # <isolated> 0626 06D0
-FBF7 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
- # <final> 0626 06D0
-FBF8 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
- # <initial> 0626 06D0
-FBF9 ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0626 0649
-FBFA ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
- # <final> 0626 0649
-FBFB ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
- # <initial> 0626 0649
-FBFC ARABIC LETTER FARSI YEH ISOLATED FORM
- # <isolated> 06CC
-FBFD ARABIC LETTER FARSI YEH FINAL FORM
- # <final> 06CC
-FBFE ARABIC LETTER FARSI YEH INITIAL FORM
- # <initial> 06CC
-FBFF ARABIC LETTER FARSI YEH MEDIAL FORM
- # <medial> 06CC
-FC00 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
- # <isolated> 0626 062C
-FC01 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
- # <isolated> 0626 062D
-FC02 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
- # <isolated> 0626 0645
-FC03 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0626 0649
-FC04 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
- # <isolated> 0626 064A
-FC05 ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
- # <isolated> 0628 062C
-FC06 ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
- # <isolated> 0628 062D
-FC07 ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
- # <isolated> 0628 062E
-FC08 ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
- # <isolated> 0628 0645
-FC09 ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0628 0649
-FC0A ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
- # <isolated> 0628 064A
-FC0B ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
- # <isolated> 062A 062C
-FC0C ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
- # <isolated> 062A 062D
-FC0D ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
- # <isolated> 062A 062E
-FC0E ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
- # <isolated> 062A 0645
-FC0F ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 062A 0649
-FC10 ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
- # <isolated> 062A 064A
-FC11 ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
- # <isolated> 062B 062C
-FC12 ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
- # <isolated> 062B 0645
-FC13 ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 062B 0649
-FC14 ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
- # <isolated> 062B 064A
-FC15 ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
- # <isolated> 062C 062D
-FC16 ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
- # <isolated> 062C 0645
-FC17 ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
- # <isolated> 062D 062C
-FC18 ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
- # <isolated> 062D 0645
-FC19 ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
- # <isolated> 062E 062C
-FC1A ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
- # <isolated> 062E 062D
-FC1B ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
- # <isolated> 062E 0645
-FC1C ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
- # <isolated> 0633 062C
-FC1D ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
- # <isolated> 0633 062D
-FC1E ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
- # <isolated> 0633 062E
-FC1F ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
- # <isolated> 0633 0645
-FC20 ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
- # <isolated> 0635 062D
-FC21 ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
- # <isolated> 0635 0645
-FC22 ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
- # <isolated> 0636 062C
-FC23 ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
- # <isolated> 0636 062D
-FC24 ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
- # <isolated> 0636 062E
-FC25 ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
- # <isolated> 0636 0645
-FC26 ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
- # <isolated> 0637 062D
-FC27 ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
- # <isolated> 0637 0645
-FC28 ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
- # <isolated> 0638 0645
-FC29 ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
- # <isolated> 0639 062C
-FC2A ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
- # <isolated> 0639 0645
-FC2B ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
- # <isolated> 063A 062C
-FC2C ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
- # <isolated> 063A 0645
-FC2D ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
- # <isolated> 0641 062C
-FC2E ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
- # <isolated> 0641 062D
-FC2F ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
- # <isolated> 0641 062E
-FC30 ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
- # <isolated> 0641 0645
-FC31 ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0641 0649
-FC32 ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
- # <isolated> 0641 064A
-FC33 ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
- # <isolated> 0642 062D
-FC34 ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
- # <isolated> 0642 0645
-FC35 ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0642 0649
-FC36 ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
- # <isolated> 0642 064A
-FC37 ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
- # <isolated> 0643 0627
-FC38 ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
- # <isolated> 0643 062C
-FC39 ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
- # <isolated> 0643 062D
-FC3A ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
- # <isolated> 0643 062E
-FC3B ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
- # <isolated> 0643 0644
-FC3C ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
- # <isolated> 0643 0645
-FC3D ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0643 0649
-FC3E ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
- # <isolated> 0643 064A
-FC3F ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
- # <isolated> 0644 062C
-FC40 ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
- # <isolated> 0644 062D
-FC41 ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
- # <isolated> 0644 062E
-FC42 ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
- # <isolated> 0644 0645
-FC43 ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0644 0649
-FC44 ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
- # <isolated> 0644 064A
-FC45 ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
- # <isolated> 0645 062C
-FC46 ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
- # <isolated> 0645 062D
-FC47 ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
- # <isolated> 0645 062E
-FC48 ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
- # <isolated> 0645 0645
-FC49 ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0645 0649
-FC4A ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
- # <isolated> 0645 064A
-FC4B ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
- # <isolated> 0646 062C
-FC4C ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
- # <isolated> 0646 062D
-FC4D ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
- # <isolated> 0646 062E
-FC4E ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
- # <isolated> 0646 0645
-FC4F ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0646 0649
-FC50 ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
- # <isolated> 0646 064A
-FC51 ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
- # <isolated> 0647 062C
-FC52 ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
- # <isolated> 0647 0645
-FC53 ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0647 0649
-FC54 ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
- # <isolated> 0647 064A
-FC55 ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
- # <isolated> 064A 062C
-FC56 ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
- # <isolated> 064A 062D
-FC57 ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
- # <isolated> 064A 062E
-FC58 ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
- # <isolated> 064A 0645
-FC59 ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 064A 0649
-FC5A ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
- # <isolated> 064A 064A
-FC5B ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
- # <isolated> 0630 0670
-FC5C ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
- # <isolated> 0631 0670
-FC5D ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
- # <isolated> 0649 0670
-FC5E ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
- # <isolated> 0020 064C 0651
-FC5F ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
- # <isolated> 0020 064D 0651
-FC60 ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
- # <isolated> 0020 064E 0651
-FC61 ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
- # <isolated> 0020 064F 0651
-FC62 ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
- # <isolated> 0020 0650 0651
-FC63 ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
- # <isolated> 0020 0651 0670
-FC64 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
- # <final> 0626 0631
-FC65 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
- # <final> 0626 0632
-FC66 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
- # <final> 0626 0645
-FC67 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
- # <final> 0626 0646
-FC68 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
- # <final> 0626 0649
-FC69 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
- # <final> 0626 064A
-FC6A ARABIC LIGATURE BEH WITH REH FINAL FORM
- # <final> 0628 0631
-FC6B ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
- # <final> 0628 0632
-FC6C ARABIC LIGATURE BEH WITH MEEM FINAL FORM
- # <final> 0628 0645
-FC6D ARABIC LIGATURE BEH WITH NOON FINAL FORM
- # <final> 0628 0646
-FC6E ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
- # <final> 0628 0649
-FC6F ARABIC LIGATURE BEH WITH YEH FINAL FORM
- # <final> 0628 064A
-FC70 ARABIC LIGATURE TEH WITH REH FINAL FORM
- # <final> 062A 0631
-FC71 ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
- # <final> 062A 0632
-FC72 ARABIC LIGATURE TEH WITH MEEM FINAL FORM
- # <final> 062A 0645
-FC73 ARABIC LIGATURE TEH WITH NOON FINAL FORM
- # <final> 062A 0646
-FC74 ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
- # <final> 062A 0649
-FC75 ARABIC LIGATURE TEH WITH YEH FINAL FORM
- # <final> 062A 064A
-FC76 ARABIC LIGATURE THEH WITH REH FINAL FORM
- # <final> 062B 0631
-FC77 ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
- # <final> 062B 0632
-FC78 ARABIC LIGATURE THEH WITH MEEM FINAL FORM
- # <final> 062B 0645
-FC79 ARABIC LIGATURE THEH WITH NOON FINAL FORM
- # <final> 062B 0646
-FC7A ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
- # <final> 062B 0649
-FC7B ARABIC LIGATURE THEH WITH YEH FINAL FORM
- # <final> 062B 064A
-FC7C ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
- # <final> 0641 0649
-FC7D ARABIC LIGATURE FEH WITH YEH FINAL FORM
- # <final> 0641 064A
-FC7E ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
- # <final> 0642 0649
-FC7F ARABIC LIGATURE QAF WITH YEH FINAL FORM
- # <final> 0642 064A
-FC80 ARABIC LIGATURE KAF WITH ALEF FINAL FORM
- # <final> 0643 0627
-FC81 ARABIC LIGATURE KAF WITH LAM FINAL FORM
- # <final> 0643 0644
-FC82 ARABIC LIGATURE KAF WITH MEEM FINAL FORM
- # <final> 0643 0645
-FC83 ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
- # <final> 0643 0649
-FC84 ARABIC LIGATURE KAF WITH YEH FINAL FORM
- # <final> 0643 064A
-FC85 ARABIC LIGATURE LAM WITH MEEM FINAL FORM
- # <final> 0644 0645
-FC86 ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
- # <final> 0644 0649
-FC87 ARABIC LIGATURE LAM WITH YEH FINAL FORM
- # <final> 0644 064A
-FC88 ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
- # <final> 0645 0627
-FC89 ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
- # <final> 0645 0645
-FC8A ARABIC LIGATURE NOON WITH REH FINAL FORM
- # <final> 0646 0631
-FC8B ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
- # <final> 0646 0632
-FC8C ARABIC LIGATURE NOON WITH MEEM FINAL FORM
- # <final> 0646 0645
-FC8D ARABIC LIGATURE NOON WITH NOON FINAL FORM
- # <final> 0646 0646
-FC8E ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
- # <final> 0646 0649
-FC8F ARABIC LIGATURE NOON WITH YEH FINAL FORM
- # <final> 0646 064A
-FC90 ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
- # <final> 0649 0670
-FC91 ARABIC LIGATURE YEH WITH REH FINAL FORM
- # <final> 064A 0631
-FC92 ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
- # <final> 064A 0632
-FC93 ARABIC LIGATURE YEH WITH MEEM FINAL FORM
- # <final> 064A 0645
-FC94 ARABIC LIGATURE YEH WITH NOON FINAL FORM
- # <final> 064A 0646
-FC95 ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
- # <final> 064A 0649
-FC96 ARABIC LIGATURE YEH WITH YEH FINAL FORM
- # <final> 064A 064A
-FC97 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
- # <initial> 0626 062C
-FC98 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
- # <initial> 0626 062D
-FC99 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
- # <initial> 0626 062E
-FC9A ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
- # <initial> 0626 0645
-FC9B ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
- # <initial> 0626 0647
-FC9C ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
- # <initial> 0628 062C
-FC9D ARABIC LIGATURE BEH WITH HAH INITIAL FORM
- # <initial> 0628 062D
-FC9E ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
- # <initial> 0628 062E
-FC9F ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
- # <initial> 0628 0645
-FCA0 ARABIC LIGATURE BEH WITH HEH INITIAL FORM
- # <initial> 0628 0647
-FCA1 ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
- # <initial> 062A 062C
-FCA2 ARABIC LIGATURE TEH WITH HAH INITIAL FORM
- # <initial> 062A 062D
-FCA3 ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
- # <initial> 062A 062E
-FCA4 ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
- # <initial> 062A 0645
-FCA5 ARABIC LIGATURE TEH WITH HEH INITIAL FORM
- # <initial> 062A 0647
-FCA6 ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
- # <initial> 062B 0645
-FCA7 ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
- # <initial> 062C 062D
-FCA8 ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
- # <initial> 062C 0645
-FCA9 ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
- # <initial> 062D 062C
-FCAA ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
- # <initial> 062D 0645
-FCAB ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
- # <initial> 062E 062C
-FCAC ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
- # <initial> 062E 0645
-FCAD ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
- # <initial> 0633 062C
-FCAE ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
- # <initial> 0633 062D
-FCAF ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
- # <initial> 0633 062E
-FCB0 ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
- # <initial> 0633 0645
-FCB1 ARABIC LIGATURE SAD WITH HAH INITIAL FORM
- # <initial> 0635 062D
-FCB2 ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
- # <initial> 0635 062E
-FCB3 ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
- # <initial> 0635 0645
-FCB4 ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
- # <initial> 0636 062C
-FCB5 ARABIC LIGATURE DAD WITH HAH INITIAL FORM
- # <initial> 0636 062D
-FCB6 ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
- # <initial> 0636 062E
-FCB7 ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
- # <initial> 0636 0645
-FCB8 ARABIC LIGATURE TAH WITH HAH INITIAL FORM
- # <initial> 0637 062D
-FCB9 ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
- # <initial> 0638 0645
-FCBA ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
- # <initial> 0639 062C
-FCBB ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
- # <initial> 0639 0645
-FCBC ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
- # <initial> 063A 062C
-FCBD ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
- # <initial> 063A 0645
-FCBE ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
- # <initial> 0641 062C
-FCBF ARABIC LIGATURE FEH WITH HAH INITIAL FORM
- # <initial> 0641 062D
-FCC0 ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
- # <initial> 0641 062E
-FCC1 ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
- # <initial> 0641 0645
-FCC2 ARABIC LIGATURE QAF WITH HAH INITIAL FORM
- # <initial> 0642 062D
-FCC3 ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
- # <initial> 0642 0645
-FCC4 ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
- # <initial> 0643 062C
-FCC5 ARABIC LIGATURE KAF WITH HAH INITIAL FORM
- # <initial> 0643 062D
-FCC6 ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
- # <initial> 0643 062E
-FCC7 ARABIC LIGATURE KAF WITH LAM INITIAL FORM
- # <initial> 0643 0644
-FCC8 ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
- # <initial> 0643 0645
-FCC9 ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
- # <initial> 0644 062C
-FCCA ARABIC LIGATURE LAM WITH HAH INITIAL FORM
- # <initial> 0644 062D
-FCCB ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
- # <initial> 0644 062E
-FCCC ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
- # <initial> 0644 0645
-FCCD ARABIC LIGATURE LAM WITH HEH INITIAL FORM
- # <initial> 0644 0647
-FCCE ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
- # <initial> 0645 062C
-FCCF ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
- # <initial> 0645 062D
-FCD0 ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
- # <initial> 0645 062E
-FCD1 ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
- # <initial> 0645 0645
-FCD2 ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
- # <initial> 0646 062C
-FCD3 ARABIC LIGATURE NOON WITH HAH INITIAL FORM
- # <initial> 0646 062D
-FCD4 ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
- # <initial> 0646 062E
-FCD5 ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
- # <initial> 0646 0645
-FCD6 ARABIC LIGATURE NOON WITH HEH INITIAL FORM
- # <initial> 0646 0647
-FCD7 ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
- # <initial> 0647 062C
-FCD8 ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
- # <initial> 0647 0645
-FCD9 ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
- # <initial> 0647 0670
-FCDA ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
- # <initial> 064A 062C
-FCDB ARABIC LIGATURE YEH WITH HAH INITIAL FORM
- # <initial> 064A 062D
-FCDC ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
- # <initial> 064A 062E
-FCDD ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
- # <initial> 064A 0645
-FCDE ARABIC LIGATURE YEH WITH HEH INITIAL FORM
- # <initial> 064A 0647
-FCDF ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
- # <medial> 0626 0645
-FCE0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
- # <medial> 0626 0647
-FCE1 ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
- # <medial> 0628 0645
-FCE2 ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
- # <medial> 0628 0647
-FCE3 ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
- # <medial> 062A 0645
-FCE4 ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
- # <medial> 062A 0647
-FCE5 ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
- # <medial> 062B 0645
-FCE6 ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
- # <medial> 062B 0647
-FCE7 ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
- # <medial> 0633 0645
-FCE8 ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
- # <medial> 0633 0647
-FCE9 ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
- # <medial> 0634 0645
-FCEA ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
- # <medial> 0634 0647
-FCEB ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
- # <medial> 0643 0644
-FCEC ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
- # <medial> 0643 0645
-FCED ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
- # <medial> 0644 0645
-FCEE ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
- # <medial> 0646 0645
-FCEF ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
- # <medial> 0646 0647
-FCF0 ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
- # <medial> 064A 0645
-FCF1 ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
- # <medial> 064A 0647
-FCF2 ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
- # <medial> 0640 064E 0651
-FCF3 ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
- # <medial> 0640 064F 0651
-FCF4 ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
- # <medial> 0640 0650 0651
-FCF5 ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0637 0649
-FCF6 ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
- # <isolated> 0637 064A
-FCF7 ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0639 0649
-FCF8 ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
- # <isolated> 0639 064A
-FCF9 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 063A 0649
-FCFA ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
- # <isolated> 063A 064A
-FCFB ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0633 0649
-FCFC ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
- # <isolated> 0633 064A
-FCFD ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0634 0649
-FCFE ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
- # <isolated> 0634 064A
-FCFF ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 062D 0649
-FD00 ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
- # <isolated> 062D 064A
-FD01 ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 062C 0649
-FD02 ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
- # <isolated> 062C 064A
-FD03 ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 062E 0649
-FD04 ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
- # <isolated> 062E 064A
-FD05 ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0635 0649
-FD06 ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
- # <isolated> 0635 064A
-FD07 ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
- # <isolated> 0636 0649
-FD08 ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
- # <isolated> 0636 064A
-FD09 ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
- # <isolated> 0634 062C
-FD0A ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
- # <isolated> 0634 062D
-FD0B ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
- # <isolated> 0634 062E
-FD0C ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
- # <isolated> 0634 0645
-FD0D ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
- # <isolated> 0634 0631
-FD0E ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
- # <isolated> 0633 0631
-FD0F ARABIC LIGATURE SAD WITH REH ISOLATED FORM
- # <isolated> 0635 0631
-FD10 ARABIC LIGATURE DAD WITH REH ISOLATED FORM
- # <isolated> 0636 0631
-FD11 ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
- # <final> 0637 0649
-FD12 ARABIC LIGATURE TAH WITH YEH FINAL FORM
- # <final> 0637 064A
-FD13 ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
- # <final> 0639 0649
-FD14 ARABIC LIGATURE AIN WITH YEH FINAL FORM
- # <final> 0639 064A
-FD15 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
- # <final> 063A 0649
-FD16 ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
- # <final> 063A 064A
-FD17 ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
- # <final> 0633 0649
-FD18 ARABIC LIGATURE SEEN WITH YEH FINAL FORM
- # <final> 0633 064A
-FD19 ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
- # <final> 0634 0649
-FD1A ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
- # <final> 0634 064A
-FD1B ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
- # <final> 062D 0649
-FD1C ARABIC LIGATURE HAH WITH YEH FINAL FORM
- # <final> 062D 064A
-FD1D ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 062C 0649
-FD1E ARABIC LIGATURE JEEM WITH YEH FINAL FORM
- # <final> 062C 064A
-FD1F ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
- # <final> 062E 0649
-FD20 ARABIC LIGATURE KHAH WITH YEH FINAL FORM
- # <final> 062E 064A
-FD21 ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
- # <final> 0635 0649
-FD22 ARABIC LIGATURE SAD WITH YEH FINAL FORM
- # <final> 0635 064A
-FD23 ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
- # <final> 0636 0649
-FD24 ARABIC LIGATURE DAD WITH YEH FINAL FORM
- # <final> 0636 064A
-FD25 ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
- # <final> 0634 062C
-FD26 ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
- # <final> 0634 062D
-FD27 ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
- # <final> 0634 062E
-FD28 ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
- # <final> 0634 0645
-FD29 ARABIC LIGATURE SHEEN WITH REH FINAL FORM
- # <final> 0634 0631
-FD2A ARABIC LIGATURE SEEN WITH REH FINAL FORM
- # <final> 0633 0631
-FD2B ARABIC LIGATURE SAD WITH REH FINAL FORM
- # <final> 0635 0631
-FD2C ARABIC LIGATURE DAD WITH REH FINAL FORM
- # <final> 0636 0631
-FD2D ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
- # <initial> 0634 062C
-FD2E ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
- # <initial> 0634 062D
-FD2F ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
- # <initial> 0634 062E
-FD30 ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
- # <initial> 0634 0645
-FD31 ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
- # <initial> 0633 0647
-FD32 ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
- # <initial> 0634 0647
-FD33 ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
- # <initial> 0637 0645
-FD34 ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
- # <medial> 0633 062C
-FD35 ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
- # <medial> 0633 062D
-FD36 ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
- # <medial> 0633 062E
-FD37 ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
- # <medial> 0634 062C
-FD38 ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
- # <medial> 0634 062D
-FD39 ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
- # <medial> 0634 062E
-FD3A ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
- # <medial> 0637 0645
-FD3B ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
- # <medial> 0638 0645
-FD3C ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
- # <final> 0627 064B
-FD3D ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
- # <isolated> 0627 064B
-@ Punctuation
-FD3E ORNATE LEFT PARENTHESIS
-FD3F ORNATE RIGHT PARENTHESIS
-@ Ligatures (three elements)
-FD50 ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
- # <initial> 062A 062C 0645
-FD51 ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
- # <final> 062A 062D 062C
-FD52 ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
- # <initial> 062A 062D 062C
-FD53 ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
- # <initial> 062A 062D 0645
-FD54 ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
- # <initial> 062A 062E 0645
-FD55 ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
- # <initial> 062A 0645 062C
-FD56 ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
- # <initial> 062A 0645 062D
-FD57 ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
- # <initial> 062A 0645 062E
-FD58 ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
- # <final> 062C 0645 062D
-FD59 ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
- # <initial> 062C 0645 062D
-FD5A ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
- # <final> 062D 0645 064A
-FD5B ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 062D 0645 0649
-FD5C ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
- # <initial> 0633 062D 062C
-FD5D ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
- # <initial> 0633 062C 062D
-FD5E ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 0633 062C 0649
-FD5F ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
- # <final> 0633 0645 062D
-FD60 ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
- # <initial> 0633 0645 062D
-FD61 ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
- # <initial> 0633 0645 062C
-FD62 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
- # <final> 0633 0645 0645
-FD63 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
- # <initial> 0633 0645 0645
-FD64 ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
- # <final> 0635 062D 062D
-FD65 ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
- # <initial> 0635 062D 062D
-FD66 ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
- # <final> 0635 0645 0645
-FD67 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
- # <final> 0634 062D 0645
-FD68 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
- # <initial> 0634 062D 0645
-FD69 ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
- # <final> 0634 062C 064A
-FD6A ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
- # <final> 0634 0645 062E
-FD6B ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
- # <initial> 0634 0645 062E
-FD6C ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
- # <final> 0634 0645 0645
-FD6D ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
- # <initial> 0634 0645 0645
-FD6E ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
- # <final> 0636 062D 0649
-FD6F ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
- # <final> 0636 062E 0645
-FD70 ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
- # <initial> 0636 062E 0645
-FD71 ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
- # <final> 0637 0645 062D
-FD72 ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
- # <initial> 0637 0645 062D
-FD73 ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
- # <initial> 0637 0645 0645
-FD74 ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
- # <final> 0637 0645 064A
-FD75 ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
- # <final> 0639 062C 0645
-FD76 ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
- # <final> 0639 0645 0645
-FD77 ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
- # <initial> 0639 0645 0645
-FD78 ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 0639 0645 0649
-FD79 ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
- # <final> 063A 0645 0645
-FD7A ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
- # <final> 063A 0645 064A
-FD7B ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 063A 0645 0649
-FD7C ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
- # <final> 0641 062E 0645
-FD7D ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
- # <initial> 0641 062E 0645
-FD7E ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
- # <final> 0642 0645 062D
-FD7F ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
- # <final> 0642 0645 0645
-FD80 ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
- # <final> 0644 062D 0645
-FD81 ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
- # <final> 0644 062D 064A
-FD82 ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
- # <final> 0644 062D 0649
-FD83 ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
- # <initial> 0644 062C 062C
-FD84 ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
- # <final> 0644 062C 062C
-FD85 ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
- # <final> 0644 062E 0645
-FD86 ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
- # <initial> 0644 062E 0645
-FD87 ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
- # <final> 0644 0645 062D
-FD88 ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
- # <initial> 0644 0645 062D
-FD89 ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
- # <initial> 0645 062D 062C
-FD8A ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
- # <initial> 0645 062D 0645
-FD8B ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
- # <final> 0645 062D 064A
-FD8C ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
- # <initial> 0645 062C 062D
-FD8D ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
- # <initial> 0645 062C 0645
-FD8E ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
- # <initial> 0645 062E 062C
-FD8F ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
- # <initial> 0645 062E 0645
-FD92 ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
- # <initial> 0645 062C 062E
-FD93 ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
- # <initial> 0647 0645 062C
-FD94 ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
- # <initial> 0647 0645 0645
-FD95 ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
- # <initial> 0646 062D 0645
-FD96 ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
- # <final> 0646 062D 0649
-FD97 ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
- # <final> 0646 062C 0645
-FD98 ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
- # <initial> 0646 062C 0645
-FD99 ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 0646 062C 0649
-FD9A ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
- # <final> 0646 0645 064A
-FD9B ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 0646 0645 0649
-FD9C ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
- # <final> 064A 0645 0645
-FD9D ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
- # <initial> 064A 0645 0645
-FD9E ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
- # <final> 0628 062E 064A
-FD9F ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
- # <final> 062A 062C 064A
-FDA0 ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 062A 062C 0649
-FDA1 ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
- # <final> 062A 062E 064A
-FDA2 ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
- # <final> 062A 062E 0649
-FDA3 ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
- # <final> 062A 0645 064A
-FDA4 ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 062A 0645 0649
-FDA5 ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
- # <final> 062C 0645 064A
-FDA6 ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
- # <final> 062C 062D 0649
-FDA7 ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
- # <final> 062C 0645 0649
-FDA8 ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
- # <final> 0633 062E 0649
-FDA9 ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
- # <final> 0635 062D 064A
-FDAA ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
- # <final> 0634 062D 064A
-FDAB ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
- # <final> 0636 062D 064A
-FDAC ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
- # <final> 0644 062C 064A
-FDAD ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
- # <final> 0644 0645 064A
-FDAE ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
- # <final> 064A 062D 064A
-FDAF ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
- # <final> 064A 062C 064A
-FDB0 ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
- # <final> 064A 0645 064A
-FDB1 ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
- # <final> 0645 0645 064A
-FDB2 ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
- # <final> 0642 0645 064A
-FDB3 ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
- # <final> 0646 062D 064A
-FDB4 ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
- # <initial> 0642 0645 062D
-FDB5 ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
- # <initial> 0644 062D 0645
-FDB6 ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
- # <final> 0639 0645 064A
-FDB7 ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
- # <final> 0643 0645 064A
-FDB8 ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
- # <initial> 0646 062C 062D
-FDB9 ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
- # <final> 0645 062E 064A
-FDBA ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
- # <initial> 0644 062C 0645
-FDBB ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
- # <final> 0643 0645 0645
-FDBC ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
- # <final> 0644 062C 0645
-FDBD ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
- # <final> 0646 062C 062D
-FDBE ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
- # <final> 062C 062D 064A
-FDBF ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
- # <final> 062D 062C 064A
-FDC0 ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
- # <final> 0645 062C 064A
-FDC1 ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
- # <final> 0641 0645 064A
-FDC2 ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
- # <final> 0628 062D 064A
-FDC3 ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
- # <initial> 0643 0645 0645
-FDC4 ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
- # <initial> 0639 062C 0645
-FDC5 ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
- # <initial> 0635 0645 0645
-FDC6 ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
- # <final> 0633 062E 064A
-FDC7 ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
- # <final> 0646 062C 064A
-@ Word ligatures
-FDF0 ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
- # <isolated> 0635 0644 06D2
-FDF1 ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
- # <isolated> 0642 0644 06D2
-FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM
- # <isolated> 0627 0644 0644 0647
-FDF3 ARABIC LIGATURE AKBAR ISOLATED FORM
- # <isolated> 0627 0643 0628 0631
-FDF4 ARABIC LIGATURE MOHAMMAD ISOLATED FORM
- # <isolated> 0645 062D 0645 062F
-FDF5 ARABIC LIGATURE SALAM ISOLATED FORM
- # <isolated> 0635 0644 0639 0645
-FDF6 ARABIC LIGATURE RASOUL ISOLATED FORM
- # <isolated> 0631 0633 0648 0644
-FDF7 ARABIC LIGATURE ALAYHE ISOLATED FORM
- # <isolated> 0639 0644 064A 0647
-FDF8 ARABIC LIGATURE WASALLAM ISOLATED FORM
- # <isolated> 0648 0633 0644 0645
-FDF9 ARABIC LIGATURE SALLA ISOLATED FORM
- # <isolated> 0635 0644 0649
-FDFA ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
- # <isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645
-FDFB ARABIC LIGATURE JALLAJALALOUHOU
- # <isolated> 062C 0644 0020 062C 0644 0627 0644 0647
-@@ FE20 Combining Half Marks FE2F
-@ Combining half marks
-FE20 COMBINING LIGATURE LEFT HALF
-FE21 COMBINING LIGATURE RIGHT HALF
-FE22 COMBINING DOUBLE TILDE LEFT HALF
-FE23 COMBINING DOUBLE TILDE RIGHT HALF
-@@ FE30 CJK Compatibility Forms FE4F
-@ Glyphs for vertical variants
-FE30 PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
- # <vertical> 2025
-FE31 PRESENTATION FORM FOR VERTICAL EM DASH
- # <vertical> 2014
-FE32 PRESENTATION FORM FOR VERTICAL EN DASH
- # <vertical> 2013
-FE33 PRESENTATION FORM FOR VERTICAL LOW LINE
- # <vertical> 005F
-FE34 PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
- # <vertical> 005F
-FE35 PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
- # <vertical> 0028
-FE36 PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
- # <vertical> 0029
-FE37 PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
- # <vertical> 007B
-FE38 PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
- # <vertical> 007D
-FE39 PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
- # <vertical> 3014
-FE3A PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
- # <vertical> 3015
-FE3B PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
- # <vertical> 3010
-FE3C PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
- # <vertical> 3011
-FE3D PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
- # <vertical> 300A
-FE3E PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
- # <vertical> 300B
-FE3F PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
- # <vertical> 3008
-FE40 PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
- # <vertical> 3009
-FE41 PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
- # <vertical> 300C
-FE42 PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
- # <vertical> 300D
-FE43 PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
- # <vertical> 300E
-FE44 PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
- # <vertical> 300F
-@ Overscores and underscores
-FE49 DASHED OVERLINE
- # 203E overline
-FE4A CENTRELINE OVERLINE
- # 203E overline
-FE4B WAVY OVERLINE
- # 203E overline
-FE4C DOUBLE WAVY OVERLINE
- # 203E overline
-FE4D DASHED LOW LINE
- # 005F low line
-FE4E CENTRELINE LOW LINE
- # 005F low line
-FE4F WAVY LOW LINE
- # 005F low line
-@@ FE50 Small Form Variants FE6F
-@ Small form variants
-FE50 SMALL COMMA
- # <small> 002C
-FE51 SMALL IDEOGRAPHIC COMMA
- # <small> 3001
-FE52 SMALL FULL STOP
- # <small> 002E
-FE53 <reserved>
- x (middle dot - 00B7)
-FE54 SMALL SEMICOLON
- # <small> 003B
-FE55 SMALL COLON
- # <small> 003A
-FE56 SMALL QUESTION MARK
- # <small> 003F
-FE57 SMALL EXCLAMATION MARK
- # <small> 0021
-FE58 SMALL EM DASH
- # <small> 2014
-FE59 SMALL LEFT PARENTHESIS
- # <small> 0028
-FE5A SMALL RIGHT PARENTHESIS
- # <small> 0029
-FE5B SMALL LEFT CURLY BRACKET
- # <small> 007B
-FE5C SMALL RIGHT CURLY BRACKET
- # <small> 007D
-FE5D SMALL LEFT TORTOISE SHELL BRACKET
- # <small> 3014
-FE5E SMALL RIGHT TORTOISE SHELL BRACKET
- # <small> 3015
-FE5F SMALL NUMBER SIGN
- # <small> 0023
-FE60 SMALL AMPERSAND
- # <small> 0026
-FE61 SMALL ASTERISK
- # <small> 002A
-FE62 SMALL PLUS SIGN
- # <small> 002B
-FE63 SMALL HYPHEN-MINUS
- # <small> 002D
-FE64 SMALL LESS-THAN SIGN
- # <small> 003C
-FE65 SMALL GREATER-THAN SIGN
- # <small> 003E
-FE66 SMALL EQUALS SIGN
- # <small> 003D
-FE67 <reserved>
- x (division slash - 2215)
-FE68 SMALL REVERSE SOLIDUS
- # <small> 005C
-FE69 SMALL DOLLAR SIGN
- # <small> 0024
-FE6A SMALL PERCENT SIGN
- # <small> 0025
-FE6B SMALL COMMERCIAL AT
- # <small> 0040
-@@ FE70 Arabic Presentation Forms-B FEFF
-@ Glyphs for spacing forms of Arabic points
-FE70 ARABIC FATHATAN ISOLATED FORM
- # <isolated> 0020 064B
-FE71 ARABIC TATWEEL WITH FATHATAN ABOVE
- # <medial> 0640 064B
-FE72 ARABIC DAMMATAN ISOLATED FORM
- # <isolated> 0020 064C
-FE74 ARABIC KASRATAN ISOLATED FORM
- # <isolated> 0020 064D
-FE76 ARABIC FATHA ISOLATED FORM
- # <isolated> 0020 064E
-FE77 ARABIC FATHA MEDIAL FORM
- # <medial> 0640 064E
-FE78 ARABIC DAMMA ISOLATED FORM
- # <isolated> 0020 064F
-FE79 ARABIC DAMMA MEDIAL FORM
- # <medial> 0640 064F
-FE7A ARABIC KASRA ISOLATED FORM
- # <isolated> 0020 0650
-FE7B ARABIC KASRA MEDIAL FORM
- # <medial> 0640 0650
-FE7C ARABIC SHADDA ISOLATED FORM
- # <isolated> 0020 0651
-FE7D ARABIC SHADDA MEDIAL FORM
- # <medial> 0640 0651
-FE7E ARABIC SUKUN ISOLATED FORM
- # <isolated> 0020 0652
-FE7F ARABIC SUKUN MEDIAL FORM
- # <medial> 0640 0652
-@ Basic glyphs for Arabic language contextual forms
-FE80 ARABIC LETTER HAMZA ISOLATED FORM
- # <isolated> 0621
-FE81 ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
- # <isolated> 0622
-FE82 ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
- # <final> 0622
-FE83 ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
- # <isolated> 0623
-FE84 ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
- # <final> 0623
-FE85 ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
- # <isolated> 0624
-FE86 ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
- # <final> 0624
-FE87 ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
- # <isolated> 0625
-FE88 ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
- # <final> 0625
-FE89 ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
- # <isolated> 0626
-FE8A ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
- # <final> 0626
-FE8B ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
- # <initial> 0626
-FE8C ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
- # <medial> 0626
-FE8D ARABIC LETTER ALEF ISOLATED FORM
- # <isolated> 0627
-FE8E ARABIC LETTER ALEF FINAL FORM
- # <final> 0627
-FE8F ARABIC LETTER BEH ISOLATED FORM
- # <isolated> 0628
-FE90 ARABIC LETTER BEH FINAL FORM
- # <final> 0628
-FE91 ARABIC LETTER BEH INITIAL FORM
- # <initial> 0628
-FE92 ARABIC LETTER BEH MEDIAL FORM
- # <medial> 0628
-FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM
- # <isolated> 0629
-FE94 ARABIC LETTER TEH MARBUTA FINAL FORM
- # <final> 0629
-FE95 ARABIC LETTER TEH ISOLATED FORM
- # <isolated> 062A
-FE96 ARABIC LETTER TEH FINAL FORM
- # <final> 062A
-FE97 ARABIC LETTER TEH INITIAL FORM
- # <initial> 062A
-FE98 ARABIC LETTER TEH MEDIAL FORM
- # <medial> 062A
-FE99 ARABIC LETTER THEH ISOLATED FORM
- # <isolated> 062B
-FE9A ARABIC LETTER THEH FINAL FORM
- # <final> 062B
-FE9B ARABIC LETTER THEH INITIAL FORM
- # <initial> 062B
-FE9C ARABIC LETTER THEH MEDIAL FORM
- # <medial> 062B
-FE9D ARABIC LETTER JEEM ISOLATED FORM
- # <isolated> 062C
-FE9E ARABIC LETTER JEEM FINAL FORM
- # <final> 062C
-FE9F ARABIC LETTER JEEM INITIAL FORM
- # <initial> 062C
-FEA0 ARABIC LETTER JEEM MEDIAL FORM
- # <medial> 062C
-FEA1 ARABIC LETTER HAH ISOLATED FORM
- # <isolated> 062D
-FEA2 ARABIC LETTER HAH FINAL FORM
- # <final> 062D
-FEA3 ARABIC LETTER HAH INITIAL FORM
- # <initial> 062D
-FEA4 ARABIC LETTER HAH MEDIAL FORM
- # <medial> 062D
-FEA5 ARABIC LETTER KHAH ISOLATED FORM
- # <isolated> 062E
-FEA6 ARABIC LETTER KHAH FINAL FORM
- # <final> 062E
-FEA7 ARABIC LETTER KHAH INITIAL FORM
- # <initial> 062E
-FEA8 ARABIC LETTER KHAH MEDIAL FORM
- # <medial> 062E
-FEA9 ARABIC LETTER DAL ISOLATED FORM
- # <isolated> 062F
-FEAA ARABIC LETTER DAL FINAL FORM
- # <final> 062F
-FEAB ARABIC LETTER THAL ISOLATED FORM
- # <isolated> 0630
-FEAC ARABIC LETTER THAL FINAL FORM
- # <final> 0630
-FEAD ARABIC LETTER REH ISOLATED FORM
- # <isolated> 0631
-FEAE ARABIC LETTER REH FINAL FORM
- # <final> 0631
-FEAF ARABIC LETTER ZAIN ISOLATED FORM
- # <isolated> 0632
-FEB0 ARABIC LETTER ZAIN FINAL FORM
- # <final> 0632
-FEB1 ARABIC LETTER SEEN ISOLATED FORM
- # <isolated> 0633
-FEB2 ARABIC LETTER SEEN FINAL FORM
- # <final> 0633
-FEB3 ARABIC LETTER SEEN INITIAL FORM
- # <initial> 0633
-FEB4 ARABIC LETTER SEEN MEDIAL FORM
- # <medial> 0633
-FEB5 ARABIC LETTER SHEEN ISOLATED FORM
- # <isolated> 0634
-FEB6 ARABIC LETTER SHEEN FINAL FORM
- # <final> 0634
-FEB7 ARABIC LETTER SHEEN INITIAL FORM
- # <initial> 0634
-FEB8 ARABIC LETTER SHEEN MEDIAL FORM
- # <medial> 0634
-FEB9 ARABIC LETTER SAD ISOLATED FORM
- # <isolated> 0635
-FEBA ARABIC LETTER SAD FINAL FORM
- # <final> 0635
-FEBB ARABIC LETTER SAD INITIAL FORM
- # <initial> 0635
-FEBC ARABIC LETTER SAD MEDIAL FORM
- # <medial> 0635
-FEBD ARABIC LETTER DAD ISOLATED FORM
- # <isolated> 0636
-FEBE ARABIC LETTER DAD FINAL FORM
- # <final> 0636
-FEBF ARABIC LETTER DAD INITIAL FORM
- # <initial> 0636
-FEC0 ARABIC LETTER DAD MEDIAL FORM
- # <medial> 0636
-FEC1 ARABIC LETTER TAH ISOLATED FORM
- # <isolated> 0637
-FEC2 ARABIC LETTER TAH FINAL FORM
- # <final> 0637
-FEC3 ARABIC LETTER TAH INITIAL FORM
- # <initial> 0637
-FEC4 ARABIC LETTER TAH MEDIAL FORM
- # <medial> 0637
-FEC5 ARABIC LETTER ZAH ISOLATED FORM
- # <isolated> 0638
-FEC6 ARABIC LETTER ZAH FINAL FORM
- # <final> 0638
-FEC7 ARABIC LETTER ZAH INITIAL FORM
- # <initial> 0638
-FEC8 ARABIC LETTER ZAH MEDIAL FORM
- # <medial> 0638
-FEC9 ARABIC LETTER AIN ISOLATED FORM
- # <isolated> 0639
-FECA ARABIC LETTER AIN FINAL FORM
- # <final> 0639
-FECB ARABIC LETTER AIN INITIAL FORM
- # <initial> 0639
-FECC ARABIC LETTER AIN MEDIAL FORM
- # <medial> 0639
-FECD ARABIC LETTER GHAIN ISOLATED FORM
- # <isolated> 063A
-FECE ARABIC LETTER GHAIN FINAL FORM
- # <final> 063A
-FECF ARABIC LETTER GHAIN INITIAL FORM
- # <initial> 063A
-FED0 ARABIC LETTER GHAIN MEDIAL FORM
- # <medial> 063A
-FED1 ARABIC LETTER FEH ISOLATED FORM
- # <isolated> 0641
-FED2 ARABIC LETTER FEH FINAL FORM
- # <final> 0641
-FED3 ARABIC LETTER FEH INITIAL FORM
- # <initial> 0641
-FED4 ARABIC LETTER FEH MEDIAL FORM
- # <medial> 0641
-FED5 ARABIC LETTER QAF ISOLATED FORM
- # <isolated> 0642
-FED6 ARABIC LETTER QAF FINAL FORM
- # <final> 0642
-FED7 ARABIC LETTER QAF INITIAL FORM
- # <initial> 0642
-FED8 ARABIC LETTER QAF MEDIAL FORM
- # <medial> 0642
-FED9 ARABIC LETTER KAF ISOLATED FORM
- # <isolated> 0643
-FEDA ARABIC LETTER KAF FINAL FORM
- # <final> 0643
-FEDB ARABIC LETTER KAF INITIAL FORM
- # <initial> 0643
-FEDC ARABIC LETTER KAF MEDIAL FORM
- # <medial> 0643
-FEDD ARABIC LETTER LAM ISOLATED FORM
- # <isolated> 0644
-FEDE ARABIC LETTER LAM FINAL FORM
- # <final> 0644
-FEDF ARABIC LETTER LAM INITIAL FORM
- # <initial> 0644
-FEE0 ARABIC LETTER LAM MEDIAL FORM
- # <medial> 0644
-FEE1 ARABIC LETTER MEEM ISOLATED FORM
- # <isolated> 0645
-FEE2 ARABIC LETTER MEEM FINAL FORM
- # <final> 0645
-FEE3 ARABIC LETTER MEEM INITIAL FORM
- # <initial> 0645
-FEE4 ARABIC LETTER MEEM MEDIAL FORM
- # <medial> 0645
-FEE5 ARABIC LETTER NOON ISOLATED FORM
- # <isolated> 0646
-FEE6 ARABIC LETTER NOON FINAL FORM
- # <final> 0646
-FEE7 ARABIC LETTER NOON INITIAL FORM
- # <initial> 0646
-FEE8 ARABIC LETTER NOON MEDIAL FORM
- # <medial> 0646
-FEE9 ARABIC LETTER HEH ISOLATED FORM
- # <isolated> 0647
-FEEA ARABIC LETTER HEH FINAL FORM
- # <final> 0647
-FEEB ARABIC LETTER HEH INITIAL FORM
- # <initial> 0647
-FEEC ARABIC LETTER HEH MEDIAL FORM
- # <medial> 0647
-FEED ARABIC LETTER WAW ISOLATED FORM
- # <isolated> 0648
-FEEE ARABIC LETTER WAW FINAL FORM
- # <final> 0648
-FEEF ARABIC LETTER ALEF MAKSURA ISOLATED FORM
- # <isolated> 0649
-FEF0 ARABIC LETTER ALEF MAKSURA FINAL FORM
- # <final> 0649
-FEF1 ARABIC LETTER YEH ISOLATED FORM
- # <isolated> 064A
-FEF2 ARABIC LETTER YEH FINAL FORM
- # <final> 064A
-FEF3 ARABIC LETTER YEH INITIAL FORM
- # <initial> 064A
-FEF4 ARABIC LETTER YEH MEDIAL FORM
- # <medial> 064A
-FEF5 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
- # <isolated> 0644 0622
-FEF6 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
- # <final> 0644 0622
-FEF7 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
- # <isolated> 0644 0623
-FEF8 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
- # <final> 0644 0623
-FEF9 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
- # <isolated> 0644 0625
-FEFA ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
- # <final> 0644 0625
-FEFB ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
- # <isolated> 0644 0627
-FEFC ARABIC LIGATURE LAM WITH ALEF FINAL FORM
- # <final> 0644 0627
-@ Special
-FEFF ZERO WIDTH NO-BREAK SPACE
- = BYTE ORDER MARK (BOM)
- * may be used to detect byte order by contrast with FFFE which is not a character
- x (<not a character> - FFFE)
- x (zero width space - 200B)
-@@ FF00 Halfwidth and Fullwidth Forms FFEF
-@ Fullwidth ASCII variants
-@+ See ASCII 0020 - 007E
-FF01 FULLWIDTH EXCLAMATION MARK
- # <wide> 0021
-FF02 FULLWIDTH QUOTATION MARK
- # <wide> 0022
-FF03 FULLWIDTH NUMBER SIGN
- # <wide> 0023
-FF04 FULLWIDTH DOLLAR SIGN
- # <wide> 0024
-FF05 FULLWIDTH PERCENT SIGN
- # <wide> 0025
-FF06 FULLWIDTH AMPERSAND
- # <wide> 0026
-FF07 FULLWIDTH APOSTROPHE
- # <wide> 0027
-FF08 FULLWIDTH LEFT PARENTHESIS
- # <wide> 0028
-FF09 FULLWIDTH RIGHT PARENTHESIS
- # <wide> 0029
-FF0A FULLWIDTH ASTERISK
- # <wide> 002A
-FF0B FULLWIDTH PLUS SIGN
- # <wide> 002B
-FF0C FULLWIDTH COMMA
- # <wide> 002C
-FF0D FULLWIDTH HYPHEN-MINUS
- # <wide> 002D
-FF0E FULLWIDTH FULL STOP
- # <wide> 002E
-FF0F FULLWIDTH SOLIDUS
- # <wide> 002F
-FF10 FULLWIDTH DIGIT ZERO
- # <wide> 0030
-FF11 FULLWIDTH DIGIT ONE
- # <wide> 0031
-FF12 FULLWIDTH DIGIT TWO
- # <wide> 0032
-FF13 FULLWIDTH DIGIT THREE
- # <wide> 0033
-FF14 FULLWIDTH DIGIT FOUR
- # <wide> 0034
-FF15 FULLWIDTH DIGIT FIVE
- # <wide> 0035
-FF16 FULLWIDTH DIGIT SIX
- # <wide> 0036
-FF17 FULLWIDTH DIGIT SEVEN
- # <wide> 0037
-FF18 FULLWIDTH DIGIT EIGHT
- # <wide> 0038
-FF19 FULLWIDTH DIGIT NINE
- # <wide> 0039
-FF1A FULLWIDTH COLON
- # <wide> 003A
-FF1B FULLWIDTH SEMICOLON
- # <wide> 003B
-FF1C FULLWIDTH LESS-THAN SIGN
- # <wide> 003C
-FF1D FULLWIDTH EQUALS SIGN
- # <wide> 003D
-FF1E FULLWIDTH GREATER-THAN SIGN
- # <wide> 003E
-FF1F FULLWIDTH QUESTION MARK
- # <wide> 003F
-FF20 FULLWIDTH COMMERCIAL AT
- # <wide> 0040
-FF21 FULLWIDTH LATIN CAPITAL LETTER A
- # <wide> 0041
-FF22 FULLWIDTH LATIN CAPITAL LETTER B
- # <wide> 0042
-FF23 FULLWIDTH LATIN CAPITAL LETTER C
- # <wide> 0043
-FF24 FULLWIDTH LATIN CAPITAL LETTER D
- # <wide> 0044
-FF25 FULLWIDTH LATIN CAPITAL LETTER E
- # <wide> 0045
-FF26 FULLWIDTH LATIN CAPITAL LETTER F
- # <wide> 0046
-FF27 FULLWIDTH LATIN CAPITAL LETTER G
- # <wide> 0047
-FF28 FULLWIDTH LATIN CAPITAL LETTER H
- # <wide> 0048
-FF29 FULLWIDTH LATIN CAPITAL LETTER I
- # <wide> 0049
-FF2A FULLWIDTH LATIN CAPITAL LETTER J
- # <wide> 004A
-FF2B FULLWIDTH LATIN CAPITAL LETTER K
- # <wide> 004B
-FF2C FULLWIDTH LATIN CAPITAL LETTER L
- # <wide> 004C
-FF2D FULLWIDTH LATIN CAPITAL LETTER M
- # <wide> 004D
-FF2E FULLWIDTH LATIN CAPITAL LETTER N
- # <wide> 004E
-FF2F FULLWIDTH LATIN CAPITAL LETTER O
- # <wide> 004F
-FF30 FULLWIDTH LATIN CAPITAL LETTER P
- # <wide> 0050
-FF31 FULLWIDTH LATIN CAPITAL LETTER Q
- # <wide> 0051
-FF32 FULLWIDTH LATIN CAPITAL LETTER R
- # <wide> 0052
-FF33 FULLWIDTH LATIN CAPITAL LETTER S
- # <wide> 0053
-FF34 FULLWIDTH LATIN CAPITAL LETTER T
- # <wide> 0054
-FF35 FULLWIDTH LATIN CAPITAL LETTER U
- # <wide> 0055
-FF36 FULLWIDTH LATIN CAPITAL LETTER V
- # <wide> 0056
-FF37 FULLWIDTH LATIN CAPITAL LETTER W
- # <wide> 0057
-FF38 FULLWIDTH LATIN CAPITAL LETTER X
- # <wide> 0058
-FF39 FULLWIDTH LATIN CAPITAL LETTER Y
- # <wide> 0059
-FF3A FULLWIDTH LATIN CAPITAL LETTER Z
- # <wide> 005A
-FF3B FULLWIDTH LEFT SQUARE BRACKET
- # <wide> 005B
-FF3C FULLWIDTH REVERSE SOLIDUS
- # <wide> 005C
-FF3D FULLWIDTH RIGHT SQUARE BRACKET
- # <wide> 005D
-FF3E FULLWIDTH CIRCUMFLEX ACCENT
- # <wide> 005E
-FF3F FULLWIDTH LOW LINE
- # <wide> 005F
-FF40 FULLWIDTH GRAVE ACCENT
- # <wide> 0060
-FF41 FULLWIDTH LATIN SMALL LETTER A
- # <wide> 0061
-FF42 FULLWIDTH LATIN SMALL LETTER B
- # <wide> 0062
-FF43 FULLWIDTH LATIN SMALL LETTER C
- # <wide> 0063
-FF44 FULLWIDTH LATIN SMALL LETTER D
- # <wide> 0064
-FF45 FULLWIDTH LATIN SMALL LETTER E
- # <wide> 0065
-FF46 FULLWIDTH LATIN SMALL LETTER F
- # <wide> 0066
-FF47 FULLWIDTH LATIN SMALL LETTER G
- # <wide> 0067
-FF48 FULLWIDTH LATIN SMALL LETTER H
- # <wide> 0068
-FF49 FULLWIDTH LATIN SMALL LETTER I
- # <wide> 0069
-FF4A FULLWIDTH LATIN SMALL LETTER J
- # <wide> 006A
-FF4B FULLWIDTH LATIN SMALL LETTER K
- # <wide> 006B
-FF4C FULLWIDTH LATIN SMALL LETTER L
- # <wide> 006C
-FF4D FULLWIDTH LATIN SMALL LETTER M
- # <wide> 006D
-FF4E FULLWIDTH LATIN SMALL LETTER N
- # <wide> 006E
-FF4F FULLWIDTH LATIN SMALL LETTER O
- # <wide> 006F
-FF50 FULLWIDTH LATIN SMALL LETTER P
- # <wide> 0070
-FF51 FULLWIDTH LATIN SMALL LETTER Q
- # <wide> 0071
-FF52 FULLWIDTH LATIN SMALL LETTER R
- # <wide> 0072
-FF53 FULLWIDTH LATIN SMALL LETTER S
- # <wide> 0073
-FF54 FULLWIDTH LATIN SMALL LETTER T
- # <wide> 0074
-FF55 FULLWIDTH LATIN SMALL LETTER U
- # <wide> 0075
-FF56 FULLWIDTH LATIN SMALL LETTER V
- # <wide> 0076
-FF57 FULLWIDTH LATIN SMALL LETTER W
- # <wide> 0077
-FF58 FULLWIDTH LATIN SMALL LETTER X
- # <wide> 0078
-FF59 FULLWIDTH LATIN SMALL LETTER Y
- # <wide> 0079
-FF5A FULLWIDTH LATIN SMALL LETTER Z
- # <wide> 007A
-FF5B FULLWIDTH LEFT CURLY BRACKET
- # <wide> 007B
-FF5C FULLWIDTH VERTICAL LINE
- # <wide> 007C
-FF5D FULLWIDTH RIGHT CURLY BRACKET
- # <wide> 007D
-FF5E FULLWIDTH TILDE
- # <wide> 007E
-@ Halfwidth CJK punctuation
-@+ See CJK punctuation 3000 - 303F
-FF61 HALFWIDTH IDEOGRAPHIC FULL STOP
- # <narrow> 3002
-FF62 HALFWIDTH LEFT CORNER BRACKET
- # <narrow> 300C
-FF63 HALFWIDTH RIGHT CORNER BRACKET
- # <narrow> 300D
-FF64 HALFWIDTH IDEOGRAPHIC COMMA
- # <narrow> 3001
-@ Halfwidth Katakana variants
-@+ See Katakana 30A0 - 30FF
-FF65 HALFWIDTH KATAKANA MIDDLE DOT
- # <narrow> 30FB
-FF66 HALFWIDTH KATAKANA LETTER WO
- # <narrow> 30F2
-FF67 HALFWIDTH KATAKANA LETTER SMALL A
- # <narrow> 30A1
-FF68 HALFWIDTH KATAKANA LETTER SMALL I
- # <narrow> 30A3
-FF69 HALFWIDTH KATAKANA LETTER SMALL U
- # <narrow> 30A5
-FF6A HALFWIDTH KATAKANA LETTER SMALL E
- # <narrow> 30A7
-FF6B HALFWIDTH KATAKANA LETTER SMALL O
- # <narrow> 30A9
-FF6C HALFWIDTH KATAKANA LETTER SMALL YA
- # <narrow> 30E3
-FF6D HALFWIDTH KATAKANA LETTER SMALL YU
- # <narrow> 30E5
-FF6E HALFWIDTH KATAKANA LETTER SMALL YO
- # <narrow> 30E7
-FF6F HALFWIDTH KATAKANA LETTER SMALL TU
- # <narrow> 30C3
-FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
- # <narrow> 30FC
-FF71 HALFWIDTH KATAKANA LETTER A
- # <narrow> 30A2
-FF72 HALFWIDTH KATAKANA LETTER I
- # <narrow> 30A4
-FF73 HALFWIDTH KATAKANA LETTER U
- # <narrow> 30A6
-FF74 HALFWIDTH KATAKANA LETTER E
- # <narrow> 30A8
-FF75 HALFWIDTH KATAKANA LETTER O
- # <narrow> 30AA
-FF76 HALFWIDTH KATAKANA LETTER KA
- # <narrow> 30AB
-FF77 HALFWIDTH KATAKANA LETTER KI
- # <narrow> 30AD
-FF78 HALFWIDTH KATAKANA LETTER KU
- # <narrow> 30AF
-FF79 HALFWIDTH KATAKANA LETTER KE
- # <narrow> 30B1
-FF7A HALFWIDTH KATAKANA LETTER KO
- # <narrow> 30B3
-FF7B HALFWIDTH KATAKANA LETTER SA
- # <narrow> 30B5
-FF7C HALFWIDTH KATAKANA LETTER SI
- # <narrow> 30B7
-FF7D HALFWIDTH KATAKANA LETTER SU
- # <narrow> 30B9
-FF7E HALFWIDTH KATAKANA LETTER SE
- # <narrow> 30BB
-FF7F HALFWIDTH KATAKANA LETTER SO
- # <narrow> 30BD
-FF80 HALFWIDTH KATAKANA LETTER TA
- # <narrow> 30BF
-FF81 HALFWIDTH KATAKANA LETTER TI
- # <narrow> 30C1
-FF82 HALFWIDTH KATAKANA LETTER TU
- # <narrow> 30C4
-FF83 HALFWIDTH KATAKANA LETTER TE
- # <narrow> 30C6
-FF84 HALFWIDTH KATAKANA LETTER TO
- # <narrow> 30C8
-FF85 HALFWIDTH KATAKANA LETTER NA
- # <narrow> 30CA
-FF86 HALFWIDTH KATAKANA LETTER NI
- # <narrow> 30CB
-FF87 HALFWIDTH KATAKANA LETTER NU
- # <narrow> 30CC
-FF88 HALFWIDTH KATAKANA LETTER NE
- # <narrow> 30CD
-FF89 HALFWIDTH KATAKANA LETTER NO
- # <narrow> 30CE
-FF8A HALFWIDTH KATAKANA LETTER HA
- # <narrow> 30CF
-FF8B HALFWIDTH KATAKANA LETTER HI
- # <narrow> 30D2
-FF8C HALFWIDTH KATAKANA LETTER HU
- # <narrow> 30D5
-FF8D HALFWIDTH KATAKANA LETTER HE
- # <narrow> 30D8
-FF8E HALFWIDTH KATAKANA LETTER HO
- # <narrow> 30DB
-FF8F HALFWIDTH KATAKANA LETTER MA
- # <narrow> 30DE
-FF90 HALFWIDTH KATAKANA LETTER MI
- # <narrow> 30DF
-FF91 HALFWIDTH KATAKANA LETTER MU
- # <narrow> 30E0
-FF92 HALFWIDTH KATAKANA LETTER ME
- # <narrow> 30E1
-FF93 HALFWIDTH KATAKANA LETTER MO
- # <narrow> 30E2
-FF94 HALFWIDTH KATAKANA LETTER YA
- # <narrow> 30E4
-FF95 HALFWIDTH KATAKANA LETTER YU
- # <narrow> 30E6
-FF96 HALFWIDTH KATAKANA LETTER YO
- # <narrow> 30E8
-FF97 HALFWIDTH KATAKANA LETTER RA
- # <narrow> 30E9
-FF98 HALFWIDTH KATAKANA LETTER RI
- # <narrow> 30EA
-FF99 HALFWIDTH KATAKANA LETTER RU
- # <narrow> 30EB
-FF9A HALFWIDTH KATAKANA LETTER RE
- # <narrow> 30EC
-FF9B HALFWIDTH KATAKANA LETTER RO
- # <narrow> 30ED
-FF9C HALFWIDTH KATAKANA LETTER WA
- # <narrow> 30EF
-FF9D HALFWIDTH KATAKANA LETTER N
- # <narrow> 30F3
-FF9E HALFWIDTH KATAKANA VOICED SOUND MARK (halfwidth katakana-hiragana voiced sound mark)
- # <narrow> 3099
-FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK (halfwidth katakana-hiragana semi-voiced sound mark)
- # <narrow> 309A
-@ Halfwidth Hangul variants
-@+ See Hangul Compatibility Jamo 3130 - 318F
-FFA0 HALFWIDTH HANGUL FILLER
- # <narrow> 3164
-FFA1 HALFWIDTH HANGUL LETTER KIYEOK
- # <narrow> 3131
-FFA2 HALFWIDTH HANGUL LETTER SSANGKIYEOK
- # <narrow> 3132
-FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS
- # <narrow> 3133
-FFA4 HALFWIDTH HANGUL LETTER NIEUN
- # <narrow> 3134
-FFA5 HALFWIDTH HANGUL LETTER NIEUN-CIEUC
- # <narrow> 3135
-FFA6 HALFWIDTH HANGUL LETTER NIEUN-HIEUH
- # <narrow> 3136
-FFA7 HALFWIDTH HANGUL LETTER TIKEUT
- # <narrow> 3137
-FFA8 HALFWIDTH HANGUL LETTER SSANGTIKEUT
- # <narrow> 3138
-FFA9 HALFWIDTH HANGUL LETTER RIEUL
- # <narrow> 3139
-FFAA HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
- # <narrow> 313A
-FFAB HALFWIDTH HANGUL LETTER RIEUL-MIEUM
- # <narrow> 313B
-FFAC HALFWIDTH HANGUL LETTER RIEUL-PIEUP
- # <narrow> 313C
-FFAD HALFWIDTH HANGUL LETTER RIEUL-SIOS
- # <narrow> 313D
-FFAE HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
- # <narrow> 313E
-FFAF HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
- # <narrow> 313F
-FFB0 HALFWIDTH HANGUL LETTER RIEUL-HIEUH
- # <narrow> 3140
-FFB1 HALFWIDTH HANGUL LETTER MIEUM
- # <narrow> 3141
-FFB2 HALFWIDTH HANGUL LETTER PIEUP
- # <narrow> 3142
-FFB3 HALFWIDTH HANGUL LETTER SSANGPIEUP
- # <narrow> 3143
-FFB4 HALFWIDTH HANGUL LETTER PIEUP-SIOS
- # <narrow> 3144
-FFB5 HALFWIDTH HANGUL LETTER SIOS
- # <narrow> 3145
-FFB6 HALFWIDTH HANGUL LETTER SSANGSIOS
- # <narrow> 3146
-FFB7 HALFWIDTH HANGUL LETTER IEUNG
- # <narrow> 3147
-FFB8 HALFWIDTH HANGUL LETTER CIEUC
- # <narrow> 3148
-FFB9 HALFWIDTH HANGUL LETTER SSANGCIEUC
- # <narrow> 3149
-FFBA HALFWIDTH HANGUL LETTER CHIEUCH
- # <narrow> 314A
-FFBB HALFWIDTH HANGUL LETTER KHIEUKH
- # <narrow> 314B
-FFBC HALFWIDTH HANGUL LETTER THIEUTH
- # <narrow> 314C
-FFBD HALFWIDTH HANGUL LETTER PHIEUPH
- # <narrow> 314D
-FFBE HALFWIDTH HANGUL LETTER HIEUH
- # <narrow> 314E
-FFC2 HALFWIDTH HANGUL LETTER A
- # <narrow> 314F
-FFC3 HALFWIDTH HANGUL LETTER AE
- # <narrow> 3150
-FFC4 HALFWIDTH HANGUL LETTER YA
- # <narrow> 3151
-FFC5 HALFWIDTH HANGUL LETTER YAE
- # <narrow> 3152
-FFC6 HALFWIDTH HANGUL LETTER EO
- # <narrow> 3153
-FFC7 HALFWIDTH HANGUL LETTER E
- # <narrow> 3154
-FFCA HALFWIDTH HANGUL LETTER YEO
- # <narrow> 3155
-FFCB HALFWIDTH HANGUL LETTER YE
- # <narrow> 3156
-FFCC HALFWIDTH HANGUL LETTER O
- # <narrow> 3157
-FFCD HALFWIDTH HANGUL LETTER WA
- # <narrow> 3158
-FFCE HALFWIDTH HANGUL LETTER WAE
- # <narrow> 3159
-FFCF HALFWIDTH HANGUL LETTER OE
- # <narrow> 315A
-FFD2 HALFWIDTH HANGUL LETTER YO
- # <narrow> 315B
-FFD3 HALFWIDTH HANGUL LETTER U
- # <narrow> 315C
-FFD4 HALFWIDTH HANGUL LETTER WEO
- # <narrow> 315D
-FFD5 HALFWIDTH HANGUL LETTER WE
- # <narrow> 315E
-FFD6 HALFWIDTH HANGUL LETTER WI
- # <narrow> 315F
-FFD7 HALFWIDTH HANGUL LETTER YU
- # <narrow> 3160
-FFDA HALFWIDTH HANGUL LETTER EU
- # <narrow> 3161
-FFDB HALFWIDTH HANGUL LETTER YI
- # <narrow> 3162
-FFDC HALFWIDTH HANGUL LETTER I
- # <narrow> 3163
-@ Fullwidth symbol variants
-@+ See Latin-1 00A0 - 00FF
-FFE0 FULLWIDTH CENT SIGN
- # <wide> 00A2
-FFE1 FULLWIDTH POUND SIGN
- # <wide> 00A3
-FFE2 FULLWIDTH NOT SIGN
- # <wide> 00AC
-FFE3 FULLWIDTH MACRON *
- * sometimes treated as fullwidth overline
- x (overline - 203E)
- # <wide> 00AF
-FFE4 FULLWIDTH BROKEN BAR
- # <wide> 00A6
-FFE5 FULLWIDTH YEN SIGN
- # <wide> 00A5
-FFE6 FULLWIDTH WON SIGN
- # <wide> 20A9
-@ Halfwidth symbol variants
-FFE8 HALFWIDTH FORMS LIGHT VERTICAL
- # <narrow> 2502
-FFE9 HALFWIDTH LEFTWARDS ARROW
- # <narrow> 2190
-FFEA HALFWIDTH UPWARDS ARROW
- # <narrow> 2191
-FFEB HALFWIDTH RIGHTWARDS ARROW
- # <narrow> 2192
-FFEC HALFWIDTH DOWNWARDS ARROW
- # <narrow> 2193
-FFED HALFWIDTH BLACK SQUARE
- # <narrow> 25A0
-FFEE HALFWIDTH WHITE CIRCLE
- # <narrow> 25CB
-@@ FFF0 Specials FFFF
-@ Interlinear annotation
-@+ Used internally for Japanese Ruby (furigana), etc.
-FFF9 INTERLINEAR ANNOTATION ANCHOR
- * marks start of annotated text
-FFFA INTERLINEAR ANNOTATION SEPARATOR
- * marks start of annotating character(s)
-FFFB INTERLINEAR ANNOTATION TERMINATOR
- * marks end of annotation block
-@ Replacement characters
-FFFC OBJECT REPLACEMENT CHARACTER
- * used as placeholder in text for an otherwise unspecified object
-FFFD REPLACEMENT CHARACTER
- * used to replace an incoming character whose value is unknown or unrepresentable in Unicode
- * compare the use of 001A as a control character to indicate the substitute function
-@ Not character codes
-FFFE <not a character>
- * the value FFFE is guaranteed not to be a Unicode character at all
- * may be used to detect byte order by contrast with FEFF which is a character
- x (zero width no-break space - FEFF)
-FFFF <not a character>
- * the value FFFF is guaranteed not to be a Unicode character at all
diff --git a/contrib/perl5/lib/unicode/NamesList.html b/contrib/perl5/lib/unicode/NamesList.html
deleted file mode 100644
index 0bfc5db..0000000
--- a/contrib/perl5/lib/unicode/NamesList.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<html>
-
-<head>
-<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
-<title>Unicode 3.0 NamesList File Structure</title>
-</head>
-
-<body>
-
-<h3>Unicode NamesList File Format</h3>
-
-<p>Last updated: 1999-07-06</p>
-
-<h3>1.0 Introduction</h3>
-
-<p>The Unicode name list file NamesList.txt (also NamesList.lst) is a plain text file used
-to drive the layout of the character code charts in the Unicode Standard. The information
-in this file is a combination of several fields from the UnicodeData.txt and Blocks.txt files,
-together with additional annotations for many characters. This document describes the
-syntax rules for the file format, but also gives brief information on how each construct
-is rendered when laid out for the book. Some of the syntax elements were used in
-preparation of the drafts of the book and may not be present in the final, released form
-of the NamesList.txt file.</p>
-
-<p>The same input file can be used to do the draft preparation for ISO/IEC 10646 (referred
-below as ISO-style). This necessitates the presence of some information in the name list
-file that is not needed (and in fact removed during parsing) for the Unicode book.</p>
-
-<p>With access to the layout program (unibook.exe) it is a simple matter of creating
-name lists for the purpose of formatting working drafts containing proposed characters.</p>
-
-<h3>1.1 NamesList File Overview</h3>
-
-<p>The *.lst files are plain text files which in their most simple form look like this</p>
-
-<p>@@&lt;tab&gt;0020&lt;tab&gt;BASIC LATIN&lt;tab&gt;007F<br>
-; this is a file comment (ignored)<br>
-0020&lt;tab&gt;SPACE<br>
-0021&lt;tab&gt;EXCLAMATION MARK<br>
-0022&lt;tab&gt;QUOTATION MARK<br>
-. . . <br>
-007F&lt;tab&gt;DELETE</p>
-
-<p>The semicolon (as first character), @ and &lt;tab&gt; characters are used by the file
-syntax and must be provided as shown. Hexadecimal digits must be in UPPER CASE). A double
-@@ introduces a block header, with the title, and start and ending code of the block
-provided as shown.</p>
-
-<p>For an ISO-style, minimal name list, only the NAME_LINE and BLOCKHEADER and their
-constituent syntax elements are needed.</p>
-
-<p>The full syntax with all the options is provided in the following sections.</p>
-
-<h3>1.2 NamesList File Structure</h3>
-
-<p>This section gives defines the overall file structure</p>
-
-<pre><strong>NAMELIST: TITLE_PAGE* BLOCK*
-</strong>
-<strong>TITLE_PAGE: TITLE
- | TITLE_PAGE SUBTITLE
- | TITLE_PAGE SUBHEADER
- | TITLE_PAGE IGNORED_LINE
- | TITLE_PAGE EMPTY_LINE
- | TITLE_PAGE COMMENTLINE
- | TITLE_PAGE NOTICE
- | TITLE_PAGE PAGEBREAK
-</strong>
-<strong>BLOCK: BLOCKHEADER
- | BLOCK CHAR_ENTRY
- | BLOCK SUBHEADER
- | BLOCK NOTICE
- | BLOCK EMPTY_LINE
- | BLOCK IGNORED_LINE
- | BLOCK PAGEBREAK
-
-CHAR_ENTRY: NAME_LINE | RESERVED_LINE
- | CHAR_ENTRY ALIAS_LINE
- | CHAR_ENTRY COMMENT_LINE
- | CHAR_ENTRY CROSS_REF
- | CHAR_ENTRY DECOMPOSITION
- | CHAR_ENTRY COMPAT_MAPPING
- | CHAR_ENTRY IGNORED_LINE
- | CHAR_ENTRY EMPTY_LINE
- | CHAR_ENTRY NOTICE
-</strong></pre>
-
-<p>In other words:<br>
-<br>
-Neither TITLE nor&nbsp; SUBTITLE may occur after the first BLOCKHEADER. </p>
-
-<p>Only TITLE, SUBTITLE, SUBHEADER, PAGEBREAK, COMMENT_LINE,&nbsp; and IGNORED_LINE may
-occur before the first BLOCKHEADER.</p>
-
-<p>Directly following either a NAME_LINE or a RESERVED_LINE an uninterrupted sequence of
-the following lines may occur (in any order and repeated as often as needed): ALIAS_LINE,
-CROSS_REF, DECOMPOSITION, COMPAT_MAPPING, NOTICE, EMPTY_LINE and IGNORED_LINE.</p>
-
-<p>Except for EMPTY_LINE, NOTICE and IGNORED_LINE, none of these lines may occur in any other
-place. </p>
-
-<p>Note: A NOTICE displays differently depending on whether it follows a header or title
-or is part of a CHAR_ENTRY.</p>
-
-<h3>1.3 NamesList File Elements</h3>
-
-<p>This section provides the details of the syntax for the individual elements.</p>
-
-<pre><small><strong>ELEMENT SYNTAX</strong> // How rendered</small></pre>
-
-<pre><small><strong>NAME_LINE: CHAR &lt;tab&gt; LINE
-</strong> // the CHAR and the corresponding image are echoed,
- // followed by the name as given in LINE
-
-<strong> CHAR TAB NAME COMMENT LF
-</strong> // Names may have a comment, which is stripped off
- // unless the file is parsed for an ISO style list
-
-<strong>RESERVED_LINE: CHAR TAB &lt;reserved&gt;
-</strong> // the CHAR is echoed followed by an icon for the
- // reserved character and a fixed string e.g. &lt;reserved&gt;
-
-<strong>COMMMENT_LINE: &lt;tab&gt; &quot;*&quot; SP EXPAND_LINE
-</strong> // * is replaced by BULLET, output line as comment
- <strong>&lt;tab&gt; EXPAND_LINE</strong>
- // output line as comment
-
-<strong>ALIAS_LINE: &lt;tab&gt; &quot;=&quot; SP LINE
-</strong> // replace = by itself, output line as alias
-
-<strong>CROSS_REF: &lt;tab&gt; &quot;X&quot; SP EXPAND_LINE
-</strong> // X is replaced by a right arrow
-<strong> &lt;tab&gt; &quot;X&quot; SP &quot;(&quot; STRING SP &quot;-&quot; SP CHAR &quot;)&quot;
-</strong> // X is replaced by a right arrow
- // the &quot;(&quot;, &quot;-&quot;, &quot;)&quot; are removed, the
- // order of CHAR and STRING is reversed
- // i.e. both inputs result in the same output
-
-<strong>IGNORED_LINE: &lt;tab&gt; &quot;;&quot; EXPAND_LINE
-EMPTY_LINE: LF
-</strong> // empty lines and file comments are ignored
-
-<strong>DECOMPOSITION: &lt;tab&gt; &quot;:&quot; EXPAND_LINE
-</strong> // replace ':' by EQUIV, expand line into
- // decomposition
-
-<strong>COMPAT_MAPPING: &lt;tab&gt; &quot;#&quot; SP EXPAND_LINE
-</strong> // replace '#' by APPROX, output line as mapping
-
-<strong>NOTICE: &quot;@+&quot; &lt;tab&gt; LINE
-</strong> // skip '@+', output text as notice
-<strong> &quot;@+&quot; TAB * SP LINE
-</strong> // skip '@', output text as notice
- // &quot;*&quot; expands to a bullet character
- // Notices following a character code apply to the
- // character and are indented. Notices not following
- // a character code apply to the page/block/column
- // and are italicized, but not indented
-
-<strong>SUBTITLE: &quot;@@@+&quot; &lt;tab&gt; LINE
-</strong> // skip &quot;@@@+&quot;, output text as subtitle
-
-<strong>SUBHEADER: &quot;@&quot; &lt;tab&gt; LINE
-</strong> // skip '@', output line as text as column header
-
-<strong>BLOCKHEADER: &quot;@@&quot; &lt;tab&gt; BLOCKSTART &lt;tab&gt; BLOCKNAME &lt;tab&gt; BLOCKEND
-</strong> // skip &quot;@@&quot;, cause a page break and optional
- // blank page, then output one or more charts
- // followed by the list of character names.
- // use BLOCKSTART and BLOCKEND to define the
- // what characters belong to a block
- // use blockname in page and table headers
- <strong> &quot;@@&quot; &lt;tab&gt; BLOCKSTART &lt;tab&gt; BLOCKNAME COMMENT &lt;tab&gt; BLOCKEND
- </strong>// if a comment is present it replaces the blockname
- // when an ISO-style namelist is laid out
-
-<strong>BLOCKSTART: CHAR</strong> // first character position in block
-<strong>BLOCKEND: CHAR</strong> // last character position in block
-<strong>PAGE_BREAK: &quot;@@&quot;</strong> // insert a (column) break
-
-<strong>TITLE: &quot;@@@&quot; &lt;tab&gt; LINE</strong>
- // skip &quot;@@@&quot;, output line as text
- // Title is used in page headers
-
-<strong>EXPAND_LINE: {CHAR | STRING}+ LF </strong>
- // all instances of CHAR *) are replaced by
- // CHAR NBSP x NBSP where x is the single Unicode
- // character corresponding to char
- // If character is combining, it is replaced with
- // CHAR NBSP &lt;circ&gt; x NBSP where &lt;circ&gt; is the
- // dotted circle</small>
-</pre>
-
-<h3><strong>1.4 NamesList File Primitives</strong></h3>
-
-<p>The following are the primitives and terminals for the NamesList syntax.</p>
-
-<pre><small><strong>LINE: STRING LF
-COMMENT: &quot;(&quot; NAME &quot;)&quot;
- &quot;(&quot; NAME &quot;)&quot; &quot;*&quot;
-</strong>
-<strong>NAME</strong>: &lt;sequence of ASCII characters, except &quot;(&quot; or &quot;)&quot; &gt;
-<strong>STRING</strong>: &lt;sequence of Latin-1 characters&gt;
-<strong>CHAR</strong>: <strong>X X X X</strong>
- <strong>| X X X X X X X X X</strong></small>
-<small><strong>X: &quot;0&quot;|&quot;1&quot;|&quot;2&quot;|&quot;3&quot;|&quot;4&quot;|&quot;5&quot;|&quot;6&quot;|&quot;7&quot;|&quot;8&quot;|&quot;9&quot;|&quot;A&quot;|&quot;B&quot;|&quot;C&quot;|&quot;D&quot;|&quot;E&quot;|&quot;F&quot;
-&lt;tab&gt;:</strong> &lt;sequence of one or more ASCII tab characters 0x09&gt;
-<strong>SP</strong>: &lt;ASCII 0x20&gt;
-<strong>LF</strong>: &lt;any sequence of ASCII 0x0A and 0x0D&gt;
-</small></pre>
-
-<p><strong>Notes:</strong>
-
-<ul>
- <li>Special lookahead logic prevents a mention of a 4 digit standard, such as ISO 9999 from
- being misinterpreted as ISO CHAR.</li>
- <li>Use of Latin-1 is supported in unibook.exe, but not portably, unless the file is encoded as
- UTF-16LE.</li>
- <li>The final LF in the file must be present</li>
- <li>A CHAR inside ' or &quot; is expanded, but only its glyph image is printed,&nbsp; the
- code value is not echoed</li>
- <li>Straight quotes in an EXPAND_LINE are replaced by curly quotes using English rules.
- Apostrophes are supported, but nested quotes are not.</li>
-</ul>
-</body>
-</html>
diff --git a/contrib/perl5/lib/unicode/Number.pl b/contrib/perl5/lib/unicode/Number.pl
deleted file mode 100644
index 1f5c2c8..0000000
--- a/contrib/perl5/lib/unicode/Number.pl
+++ /dev/null
@@ -1,432 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0
-0031 1
-0032 2
-0033 3
-0034 4
-0035 5
-0036 6
-0037 7
-0038 8
-0039 9
-00b2 2
-00b3 3
-00b9 1
-00bc 1/4
-00bd 1/2
-00be 3/4
-0660 0
-0661 1
-0662 2
-0663 3
-0664 4
-0665 5
-0666 6
-0667 7
-0668 8
-0669 9
-06f0 0
-06f1 1
-06f2 2
-06f3 3
-06f4 4
-06f5 5
-06f6 6
-06f7 7
-06f8 8
-06f9 9
-0966 0
-0967 1
-0968 2
-0969 3
-096a 4
-096b 5
-096c 6
-096d 7
-096e 8
-096f 9
-09e6 0
-09e7 1
-09e8 2
-09e9 3
-09ea 4
-09eb 5
-09ec 6
-09ed 7
-09ee 8
-09ef 9
-09f4 1
-09f5 2
-09f6 3
-09f7 4
-09f9 16
-0a66 0
-0a67 1
-0a68 2
-0a69 3
-0a6a 4
-0a6b 5
-0a6c 6
-0a6d 7
-0a6e 8
-0a6f 9
-0ae6 0
-0ae7 1
-0ae8 2
-0ae9 3
-0aea 4
-0aeb 5
-0aec 6
-0aed 7
-0aee 8
-0aef 9
-0b66 0
-0b67 1
-0b68 2
-0b69 3
-0b6a 4
-0b6b 5
-0b6c 6
-0b6d 7
-0b6e 8
-0b6f 9
-0be7 1
-0be8 2
-0be9 3
-0bea 4
-0beb 5
-0bec 6
-0bed 7
-0bee 8
-0bef 9
-0bf0 10
-0bf1 100
-0bf2 1000
-0c66 0
-0c67 1
-0c68 2
-0c69 3
-0c6a 4
-0c6b 5
-0c6c 6
-0c6d 7
-0c6e 8
-0c6f 9
-0ce6 0
-0ce7 1
-0ce8 2
-0ce9 3
-0cea 4
-0ceb 5
-0cec 6
-0ced 7
-0cee 8
-0cef 9
-0d66 0
-0d67 1
-0d68 2
-0d69 3
-0d6a 4
-0d6b 5
-0d6c 6
-0d6d 7
-0d6e 8
-0d6f 9
-0e50 0
-0e51 1
-0e52 2
-0e53 3
-0e54 4
-0e55 5
-0e56 6
-0e57 7
-0e58 8
-0e59 9
-0ed0 0
-0ed1 1
-0ed2 2
-0ed3 3
-0ed4 4
-0ed5 5
-0ed6 6
-0ed7 7
-0ed8 8
-0ed9 9
-0f20 0
-0f21 1
-0f22 2
-0f23 3
-0f24 4
-0f25 5
-0f26 6
-0f27 7
-0f28 8
-0f29 9
-0f2a 1/2
-0f2b 3/2
-0f2c 5/2
-0f2d 7/2
-0f2e 9/2
-0f2f 11/2
-0f30 13/2
-0f31 15/2
-0f32 17/2
-0f33 -1/2
-1040 0
-1041 1
-1042 2
-1043 3
-1044 4
-1045 5
-1046 6
-1047 7
-1048 8
-1049 9
-1369 1
-136a 2
-136b 3
-136c 4
-136d 5
-136e 6
-136f 7
-1370 8
-1371 9
-1372 10
-1373 20
-1374 30
-1375 40
-1376 50
-1377 60
-1378 70
-1379 80
-137a 90
-137b 100
-137c 10000
-16ee 17
-16ef 18
-16f0 19
-17e0 0
-17e1 1
-17e2 2
-17e3 3
-17e4 4
-17e5 5
-17e6 6
-17e7 7
-17e8 8
-17e9 9
-1810 0
-1811 1
-1812 2
-1813 3
-1814 4
-1815 5
-1816 6
-1817 7
-1818 8
-1819 9
-2070 0
-2074 4
-2075 5
-2076 6
-2077 7
-2078 8
-2079 9
-2080 0
-2081 1
-2082 2
-2083 3
-2084 4
-2085 5
-2086 6
-2087 7
-2088 8
-2089 9
-2153 1/3
-2154 2/3
-2155 1/5
-2156 2/5
-2157 3/5
-2158 4/5
-2159 1/6
-215a 5/6
-215b 1/8
-215c 3/8
-215d 5/8
-215e 7/8
-215f 2160 1
-2161 2
-2162 3
-2163 4
-2164 5
-2165 6
-2166 7
-2167 8
-2168 9
-2169 10
-216a 11
-216b 12
-216c 50
-216d 100
-216e 500
-216f 1000
-2170 1
-2171 2
-2172 3
-2173 4
-2174 5
-2175 6
-2176 7
-2177 8
-2178 9
-2179 10
-217a 11
-217b 12
-217c 50
-217d 100
-217e 500
-217f 2180 1000
-2181 5000
-2182 10000
-2460 1
-2461 2
-2462 3
-2463 4
-2464 5
-2465 6
-2466 7
-2467 8
-2468 9
-2469 10
-246a 11
-246b 12
-246c 13
-246d 14
-246e 15
-246f 16
-2470 17
-2471 18
-2472 19
-2473 20
-2474 1
-2475 2
-2476 3
-2477 4
-2478 5
-2479 6
-247a 7
-247b 8
-247c 9
-247d 10
-247e 11
-247f 12
-2480 13
-2481 14
-2482 15
-2483 16
-2484 17
-2485 18
-2486 19
-2487 20
-2488 1
-2489 2
-248a 3
-248b 4
-248c 5
-248d 6
-248e 7
-248f 8
-2490 9
-2491 10
-2492 11
-2493 12
-2494 13
-2495 14
-2496 15
-2497 16
-2498 17
-2499 18
-249a 19
-249b 20
-24ea 0
-2776 1
-2777 2
-2778 3
-2779 4
-277a 5
-277b 6
-277c 7
-277d 8
-277e 9
-277f 10
-2780 1
-2781 2
-2782 3
-2783 4
-2784 5
-2785 6
-2786 7
-2787 8
-2788 9
-2789 10
-278a 1
-278b 2
-278c 3
-278d 4
-278e 5
-278f 6
-2790 7
-2791 8
-2792 9
-2793 10
-3007 0
-3021 1
-3022 2
-3023 3
-3024 4
-3025 5
-3026 6
-3027 7
-3028 8
-3029 9
-3038 10
-3039 20
-303a 30
-3192 1
-3193 2
-3194 3
-3195 4
-3220 1
-3221 2
-3222 3
-3223 4
-3224 5
-3225 6
-3226 7
-3227 8
-3228 9
-3229 10
-3280 1
-3281 2
-3282 3
-3283 4
-3284 5
-3285 6
-3286 7
-3287 8
-3288 9
-3289 10
-ff10 0
-ff11 1
-ff12 2
-ff13 3
-ff14 4
-ff15 5
-ff16 6
-ff17 7
-ff18 8
-ff19 9
-END
diff --git a/contrib/perl5/lib/unicode/PropList.txt b/contrib/perl5/lib/unicode/PropList.txt
deleted file mode 100644
index e47f127..0000000
--- a/contrib/perl5/lib/unicode/PropList.txt
+++ /dev/null
@@ -1,3592 +0,0 @@
-Property dump: UnicodeData-3.0.1.txt
-
-*******************************************
-
-Property dump for: 0x10000001 (Zero-width)
-
-070F
-180B..180E (4 chars)
-200B..200F (5 chars)
-202A..202E (5 chars)
-206A..206F (6 chars)
-FEFF
-FFF9..FFFB (3 chars)
-
-*******************************************
-
-Property dump for: 0x10000002 (Space)
-
-0020
-00A0
-1680
-2000..200B (12 chars)
-202F
-3000
-
-*******************************************
-
-Property dump for: 0x10000004 (White space)
-
-0009..000D (5 chars)
-0020
-0085
-00A0
-1680
-2000..200B (12 chars)
-2028..2029 (2 chars)
-202F
-3000
-
-*******************************************
-
-Property dump for: 0x00400000 (Non-break)
-
-00A0
-0F0C
-2007
-2011
-202F
-FEFF
-
-*******************************************
-
-Property dump for: 0x10000008 (ISO Control)
-
-0000..001F (32 chars)
-007F..009F (33 chars)
-
-*******************************************
-
-Property dump for: 0x10000090 (Bidi Control)
-
-200E..200F (2 chars)
-202A..202E (5 chars)
-
-*******************************************
-
-Property dump for: 0x100000A0 (Join Control)
-
-200C..200D (2 chars)
-
-*******************************************
-
-Property dump for: 0x100000C0 (Format Control)
-
-070F
-180B..180E (4 chars)
-206A..206F (6 chars)
-FFF9..FFFB (3 chars)
-
-*******************************************
-
-Property dump for: 0x20000400 (Dash)
-
-002D
-00AD
-058A
-1806
-2010..2015 (6 chars)
-207B
-208B
-2212
-301C
-3030
-FE31..FE32 (2 chars)
-FE58
-FE63
-FF0D
-
-*******************************************
-
-Property dump for: 0x20000800 (Hyphen)
-
-002D
-00AD
-058A
-1806
-2010..2011 (2 chars)
-30FB
-FE63
-FF0D
-FF65
-
-*******************************************
-
-Property dump for: 0x20001000 (Punctuation)
-
-0021..0023 (3 chars)
-0025..002A (6 chars)
-002C..002F (4 chars)
-003A..003B (2 chars)
-003F..0040 (2 chars)
-005B..005D (3 chars)
-005F
-007B
-007D
-00A1
-00AB
-00AD
-00B7
-00BB
-00BF
-037E
-0387
-055A..055F (6 chars)
-0589..058A (2 chars)
-05BE
-05C0
-05C3
-05F3..05F4 (2 chars)
-060C
-061B
-061F
-066A..066D (4 chars)
-06D4
-0700..070D (14 chars)
-0964..0965 (2 chars)
-0970
-0DF4
-0E4F
-0E5A..0E5B (2 chars)
-0F04..0F12 (15 chars)
-0F3A..0F3D (4 chars)
-0F85
-104A..104F (6 chars)
-10FB
-1361..1368 (8 chars)
-166D..166E (2 chars)
-169B..169C (2 chars)
-16EB..16ED (3 chars)
-17D4..17DA (7 chars)
-17DC
-1800..180A (11 chars)
-2010..2027 (24 chars)
-2030..2043 (20 chars)
-2045..2046 (2 chars)
-2048..204D (6 chars)
-207D..207E (2 chars)
-208D..208E (2 chars)
-2329..232A (2 chars)
-3001..3003 (3 chars)
-3008..3011 (10 chars)
-3014..301F (12 chars)
-3030
-30FB
-FD3E..FD3F (2 chars)
-FE30..FE44 (21 chars)
-FE49..FE52 (10 chars)
-FE54..FE61 (14 chars)
-FE63
-FE68
-FE6A..FE6B (2 chars)
-FF01..FF03 (3 chars)
-FF05..FF0A (6 chars)
-FF0C..FF0F (4 chars)
-FF1A..FF1B (2 chars)
-FF1F..FF20 (2 chars)
-FF3B..FF3D (3 chars)
-FF3F
-FF5B
-FF5D
-FF61..FF65 (5 chars)
-
-*******************************************
-
-Property dump for: 0x80000003 (Line Separator)
-
-2028
-
-*******************************************
-
-Property dump for: 0x80000004 (Paragraph Separator)
-
-2029
-
-*******************************************
-
-Property dump for: 0x20002000 (Quotation Mark)
-
-0022
-0027
-00AB
-00BB
-2018..201F (8 chars)
-2039..203A (2 chars)
-300C..300F (4 chars)
-301D..301F (3 chars)
-FE41..FE44 (4 chars)
-FF02
-FF07
-FF62..FF63 (2 chars)
-
-*******************************************
-
-Property dump for: 0x20004000 (Terminal Punctuation)
-
-0021
-002C
-002E
-003A..003B (2 chars)
-003F
-037E
-0387
-0589
-060C
-061B
-061F
-06D4
-0700..070A (11 chars)
-070C
-0964..0965 (2 chars)
-0E5A..0E5B (2 chars)
-104A..104B (2 chars)
-1361..1368 (8 chars)
-166D..166E (2 chars)
-16EB..16ED (3 chars)
-17D4..17D6 (3 chars)
-17DA
-1802..1805 (4 chars)
-1808..1809 (2 chars)
-203C..203D (2 chars)
-2048..2049 (2 chars)
-3001..3002 (2 chars)
-FE50..FE52 (3 chars)
-FE54..FE57 (4 chars)
-FF01
-FF0C
-FF0E
-FF1A..FF1B (2 chars)
-FF1F
-FF61
-FF64
-
-*******************************************
-
-Property dump for: 0x20008000 (Currency Symbol)
-
-0024
-00A2..00A5 (4 chars)
-09F2..09F3 (2 chars)
-0E3F
-17DB
-20A0..20AF (16 chars)
-FE69
-FF04
-FFE0..FFE1 (2 chars)
-FFE5..FFE6 (2 chars)
-
-*******************************************
-
-Property dump for: 0x20080000 (Math)
-
-0028..002B (4 chars)
-002D
-002F
-003C..003E (3 chars)
-005B..005E (4 chars)
-007B..007E (4 chars)
-00AC
-00B1
-00D7
-00F7
-2016
-2032..2034 (3 chars)
-2044
-207A..207E (5 chars)
-208A..208E (5 chars)
-20D0..20DC (13 chars)
-20E1
-2190..2194 (5 chars)
-219A..219B (2 chars)
-21A0
-21A3
-21A6
-21AE
-21CE..21CF (2 chars)
-21D2
-21D4
-2200..22F1 (242 chars)
-2308..230B (4 chars)
-2320..2321 (2 chars)
-2329..232A (2 chars)
-25B7
-25C1
-266F
-300A..300B (2 chars)
-301A..301B (2 chars)
-FB29
-FE35..FE38 (4 chars)
-FE59..FE5C (4 chars)
-FE61..FE66 (6 chars)
-FE68
-FF08..FF0B (4 chars)
-FF0D
-FF0F
-FF1C..FF1E (3 chars)
-FF3B..FF3E (4 chars)
-FF5B..FF5E (4 chars)
-FFE2
-FFE9..FFEC (4 chars)
-
-*******************************************
-
-Property dump for: 0x20000100 (Paired Punctuation)
-
-0028..0029 (2 chars)
-005B
-005D
-007B
-007D
-00AB
-00BB
-0F3A..0F3D (4 chars)
-169B..169C (2 chars)
-2018..201F (8 chars)
-2039..203A (2 chars)
-2045..2046 (2 chars)
-207D..207E (2 chars)
-208D..208E (2 chars)
-2329..232A (2 chars)
-3008..3011 (10 chars)
-3014..301B (8 chars)
-301D..301F (3 chars)
-FD3E..FD3F (2 chars)
-FE35..FE44 (16 chars)
-FE59..FE5E (6 chars)
-FF08..FF09 (2 chars)
-FF3B
-FF3D
-FF5B
-FF5D
-FF62..FF63 (2 chars)
-
-*******************************************
-
-Property dump for: 0x20000300 (Left of Pair)
-
-0028
-005B
-007B
-00AB
-0F3A
-0F3C
-169B
-2018
-201A..201C (3 chars)
-201E..201F (2 chars)
-2039
-2045
-207D
-208D
-2329
-3008
-300A
-300C
-300E
-3010
-3014
-3016
-3018
-301A
-301D
-FD3E
-FE35
-FE37
-FE39
-FE3B
-FE3D
-FE3F
-FE41
-FE43
-FE59
-FE5B
-FE5D
-FF08
-FF3B
-FF5B
-FF62
-
-*******************************************
-
-Property dump for: 0x20000004 (Combining)
-
-0300..034E (79 chars)
-0360..0362 (3 chars)
-0483..0486 (4 chars)
-0488..0489 (2 chars)
-0591..05A1 (17 chars)
-05A3..05B9 (23 chars)
-05BB..05BD (3 chars)
-05BF
-05C1..05C2 (2 chars)
-05C4
-064B..0655 (11 chars)
-0670
-06D6..06E4 (15 chars)
-06E7..06E8 (2 chars)
-06EA..06ED (4 chars)
-0711
-0730..074A (27 chars)
-07A6..07B0 (11 chars)
-0901..0903 (3 chars)
-093C
-093E..094D (16 chars)
-0951..0954 (4 chars)
-0962..0963 (2 chars)
-0981..0983 (3 chars)
-09BC
-09BE..09C4 (7 chars)
-09C7..09C8 (2 chars)
-09CB..09CD (3 chars)
-09D7
-09E2..09E3 (2 chars)
-0A02
-0A3C
-0A3E..0A42 (5 chars)
-0A47..0A48 (2 chars)
-0A4B..0A4D (3 chars)
-0A70..0A71 (2 chars)
-0A81..0A83 (3 chars)
-0ABC
-0ABE..0AC5 (8 chars)
-0AC7..0AC9 (3 chars)
-0ACB..0ACD (3 chars)
-0B01..0B03 (3 chars)
-0B3C
-0B3E..0B43 (6 chars)
-0B47..0B48 (2 chars)
-0B4B..0B4D (3 chars)
-0B56..0B57 (2 chars)
-0B82..0B83 (2 chars)
-0BBE..0BC2 (5 chars)
-0BC6..0BC8 (3 chars)
-0BCA..0BCD (4 chars)
-0BD7
-0C01..0C03 (3 chars)
-0C3E..0C44 (7 chars)
-0C46..0C48 (3 chars)
-0C4A..0C4D (4 chars)
-0C55..0C56 (2 chars)
-0C82..0C83 (2 chars)
-0CBE..0CC4 (7 chars)
-0CC6..0CC8 (3 chars)
-0CCA..0CCD (4 chars)
-0CD5..0CD6 (2 chars)
-0D02..0D03 (2 chars)
-0D3E..0D43 (6 chars)
-0D46..0D48 (3 chars)
-0D4A..0D4D (4 chars)
-0D57
-0D82..0D83 (2 chars)
-0DCA
-0DCF..0DD4 (6 chars)
-0DD6
-0DD8..0DDF (8 chars)
-0DF2..0DF3 (2 chars)
-0E31
-0E34..0E3A (7 chars)
-0E47..0E4E (8 chars)
-0EB1
-0EB4..0EB9 (6 chars)
-0EBB..0EBC (2 chars)
-0EC8..0ECD (6 chars)
-0F18..0F19 (2 chars)
-0F35
-0F37
-0F39
-0F3E..0F3F (2 chars)
-0F71..0F84 (20 chars)
-0F86..0F87 (2 chars)
-0F90..0F97 (8 chars)
-0F99..0FBC (36 chars)
-0FC6
-102C..1032 (7 chars)
-1036..1039 (4 chars)
-1056..1059 (4 chars)
-17B4..17D3 (32 chars)
-18A9
-20D0..20E3 (20 chars)
-302A..302F (6 chars)
-3099..309A (2 chars)
-FB1E
-FE20..FE23 (4 chars)
-
-*******************************************
-
-Property dump for: 0x20040000 (Non-spacing)
-
-0300..034E (79 chars)
-0360..0362 (3 chars)
-0483..0486 (4 chars)
-0488..0489 (2 chars)
-0591..05A1 (17 chars)
-05A3..05B9 (23 chars)
-05BB..05BD (3 chars)
-05BF
-05C1..05C2 (2 chars)
-05C4
-064B..0655 (11 chars)
-0670
-06D6..06E4 (15 chars)
-06E7..06E8 (2 chars)
-06EA..06ED (4 chars)
-0711
-0730..074A (27 chars)
-07A6..07B0 (11 chars)
-0901..0902 (2 chars)
-093C
-0941..0948 (8 chars)
-094D
-0951..0954 (4 chars)
-0962..0963 (2 chars)
-0981
-09BC
-09C1..09C4 (4 chars)
-09CD
-09E2..09E3 (2 chars)
-0A02
-0A3C
-0A41..0A42 (2 chars)
-0A47..0A48 (2 chars)
-0A4B..0A4D (3 chars)
-0A70..0A71 (2 chars)
-0A81..0A82 (2 chars)
-0ABC
-0AC1..0AC5 (5 chars)
-0AC7..0AC8 (2 chars)
-0ACD
-0B01
-0B3C
-0B3F
-0B41..0B43 (3 chars)
-0B4D
-0B56
-0B82
-0BC0
-0BCD
-0C3E..0C40 (3 chars)
-0C46..0C48 (3 chars)
-0C4A..0C4D (4 chars)
-0C55..0C56 (2 chars)
-0CBF
-0CC6
-0CCC..0CCD (2 chars)
-0D41..0D43 (3 chars)
-0D4D
-0DCA
-0DD2..0DD4 (3 chars)
-0DD6
-0E31
-0E34..0E3A (7 chars)
-0E47..0E4E (8 chars)
-0EB1
-0EB4..0EB9 (6 chars)
-0EBB..0EBC (2 chars)
-0EC8..0ECD (6 chars)
-0F18..0F19 (2 chars)
-0F35
-0F37
-0F39
-0F71..0F7E (14 chars)
-0F80..0F84 (5 chars)
-0F86..0F87 (2 chars)
-0F90..0F97 (8 chars)
-0F99..0FBC (36 chars)
-0FC6
-102D..1030 (4 chars)
-1032
-1036..1037 (2 chars)
-1039
-1058..1059 (2 chars)
-17B7..17BD (7 chars)
-17C6
-17C9..17D3 (11 chars)
-18A9
-20D0..20E3 (20 chars)
-302A..302F (6 chars)
-3099..309A (2 chars)
-FB1E
-FE20..FE23 (4 chars)
-
-*******************************************
-
-Property dump for: 0x20000008 (Composite)
-
-00C0..00C5 (6 chars)
-00C7..00CF (9 chars)
-00D1..00D6 (6 chars)
-00D9..00DD (5 chars)
-00E0..00E5 (6 chars)
-00E7..00EF (9 chars)
-00F1..00F6 (6 chars)
-00F9..00FD (5 chars)
-00FF..0130 (50 chars)
-0132..0137 (6 chars)
-0139..0149 (17 chars)
-014C..0151 (6 chars)
-0154..017E (43 chars)
-01A0..01A1 (2 chars)
-01AF..01B0 (2 chars)
-01C4..01DC (25 chars)
-01DE..01E3 (6 chars)
-01E6..01F5 (16 chars)
-01F8..0209 (18 chars)
-020C..021B (16 chars)
-021E..021F (2 chars)
-0226..0233 (14 chars)
-0344
-0385..0386 (2 chars)
-0388..038A (3 chars)
-038C
-038E..0390 (3 chars)
-03AA..03B0 (7 chars)
-03CA..03CE (5 chars)
-03D3..03D5 (3 chars)
-0400..0401 (2 chars)
-0403
-0407
-040C..040E (3 chars)
-0419
-0439
-0450..0451 (2 chars)
-0453
-0457
-045C..045E (3 chars)
-0476..0477 (2 chars)
-04BE..04BF (2 chars)
-04C1..04C2 (2 chars)
-04D0..04D3 (4 chars)
-04D6..04D7 (2 chars)
-04DA..04E7 (14 chars)
-04EA..04F5 (12 chars)
-04F8..04F9 (2 chars)
-0587
-0622..0626 (5 chars)
-06C0
-06C2
-06D6..06D7 (2 chars)
-0929
-0931
-0934
-0950
-0958..095F (8 chars)
-09CB..09CC (2 chars)
-09DC..09DD (2 chars)
-09DF
-0A33
-0A36
-0A59..0A5B (3 chars)
-0A5E
-0A74
-0AD0
-0B01
-0B48
-0B4B..0B4C (2 chars)
-0B5C..0B5D (2 chars)
-0B94
-0BCA..0BCC (3 chars)
-0C48
-0CC0
-0CC7..0CC8 (2 chars)
-0CCA..0CCB (2 chars)
-0D4A..0D4C (3 chars)
-0DDA
-0DDC..0DDE (3 chars)
-0E33
-0EB3
-0EDC..0EDD (2 chars)
-0F00
-0F43
-0F4D
-0F52
-0F57
-0F5C
-0F69
-0F73
-0F75..0F79 (5 chars)
-0F81
-0F93
-0F9D
-0FA2
-0FA7
-0FAC
-0FB9
-1026
-1E00..1E9B (156 chars)
-1EA0..1EF9 (90 chars)
-1F00..1F15 (22 chars)
-1F18..1F1D (6 chars)
-1F20..1F45 (38 chars)
-1F48..1F4D (6 chars)
-1F50..1F57 (8 chars)
-1F59
-1F5B
-1F5D
-1F5F..1F7D (31 chars)
-1F80..1FB4 (53 chars)
-1FB6..1FBC (7 chars)
-1FC1..1FC4 (4 chars)
-1FC6..1FD3 (14 chars)
-1FD6..1FDB (6 chars)
-1FDD..1FEE (18 chars)
-1FF2..1FF4 (3 chars)
-1FF6..1FFC (7 chars)
-203C
-2048..2049 (2 chars)
-2161..2163 (3 chars)
-2165..2168 (4 chars)
-216A..216B (2 chars)
-2171..2173 (3 chars)
-2175..2178 (4 chars)
-217A..217B (2 chars)
-2204
-2209
-220C
-2226
-222C..222D (2 chars)
-222F..2230 (2 chars)
-2247
-2249
-2260
-2262
-226D..2271 (5 chars)
-2274..2275 (2 chars)
-2278..2279 (2 chars)
-2280..2281 (2 chars)
-2284..2285 (2 chars)
-2288..2289 (2 chars)
-22AC..22AF (4 chars)
-22E0..22E3 (4 chars)
-22EA..22ED (4 chars)
-2460..24B5 (86 chars)
-24EA
-304C
-304E
-3050
-3052
-3054
-3056
-3058
-305A
-305C
-305E
-3060
-3062
-3065
-3067
-3069
-3070..3071 (2 chars)
-3073..3074 (2 chars)
-3076..3077 (2 chars)
-3079..307A (2 chars)
-307C..307D (2 chars)
-3094
-309E
-30AC
-30AE
-30B0
-30B2
-30B4
-30B6
-30B8
-30BA
-30BC
-30BE
-30C0
-30C2
-30C5
-30C7
-30C9
-30D0..30D1 (2 chars)
-30D3..30D4 (2 chars)
-30D6..30D7 (2 chars)
-30D9..30DA (2 chars)
-30DC..30DD (2 chars)
-30F4
-30FE
-3200..321C (29 chars)
-3220..3243 (36 chars)
-32C0..32CB (12 chars)
-3300..3376 (119 chars)
-337B..33DD (99 chars)
-33E0..33FE (31 chars)
-AC00..D7A3 (11172 chars)
-FB00..FB06 (7 chars)
-FB13..FB17 (5 chars)
-FB1D
-FB1F
-FB2A..FB36 (13 chars)
-FB38..FB3C (5 chars)
-FB3E
-FB40..FB41 (2 chars)
-FB43..FB44 (2 chars)
-FB46..FB4F (10 chars)
-FBEA..FBFB (18 chars)
-FC00..FD3D (318 chars)
-FD50..FD8F (64 chars)
-FD92..FDC7 (54 chars)
-FDF0..FDFB (12 chars)
-FE70..FE72 (3 chars)
-FE74
-FE76..FE7F (10 chars)
-
-*******************************************
-
-Property dump for: 0x20000080 (Hex Digit)
-
-0030..0039 (10 chars)
-0041..0046 (6 chars)
-0061..0066 (6 chars)
-FF10..FF19 (10 chars)
-FF21..FF26 (6 chars)
-FF41..FF46 (6 chars)
-
-*******************************************
-
-Property dump for: 0x20000030 (Decimal Digit)
-
-0030..0039 (10 chars)
-0660..0669 (10 chars)
-06F0..06F9 (10 chars)
-0966..096F (10 chars)
-09E6..09EF (10 chars)
-0A66..0A6F (10 chars)
-0AE6..0AEF (10 chars)
-0B66..0B6F (10 chars)
-0BE7..0BEF (9 chars)
-0C66..0C6F (10 chars)
-0CE6..0CEF (10 chars)
-0D66..0D6F (10 chars)
-0E50..0E59 (10 chars)
-0ED0..0ED9 (10 chars)
-0F20..0F29 (10 chars)
-1040..1049 (10 chars)
-1369..1371 (9 chars)
-17E0..17E9 (10 chars)
-1810..1819 (10 chars)
-FF10..FF19 (10 chars)
-
-*******************************************
-
-Property dump for: 0x20000010 (Numeric)
-
-0030..0039 (10 chars)
-00B2..00B3 (2 chars)
-00B9
-00BC..00BE (3 chars)
-0660..0669 (10 chars)
-06F0..06F9 (10 chars)
-0966..096F (10 chars)
-09E6..09EF (10 chars)
-09F4..09F9 (6 chars)
-0A66..0A6F (10 chars)
-0AE6..0AEF (10 chars)
-0B66..0B6F (10 chars)
-0BE7..0BF2 (12 chars)
-0C66..0C6F (10 chars)
-0CE6..0CEF (10 chars)
-0D66..0D6F (10 chars)
-0E50..0E59 (10 chars)
-0ED0..0ED9 (10 chars)
-0F20..0F33 (20 chars)
-1040..1049 (10 chars)
-1369..137C (20 chars)
-16EE..16F0 (3 chars)
-17E0..17E9 (10 chars)
-1810..1819 (10 chars)
-2070
-2074..2079 (6 chars)
-2080..2089 (10 chars)
-2153..2183 (49 chars)
-2460..249B (60 chars)
-24EA
-2776..2793 (30 chars)
-3007
-3021..3029 (9 chars)
-3038..303A (3 chars)
-3192..3195 (4 chars)
-3220..3229 (10 chars)
-3280..3289 (10 chars)
-FF10..FF19 (10 chars)
-
-*******************************************
-
-Property dump for: 0x20000001 (Alphabetic)
-
-0041..005A (26 chars)
-0061..007A (26 chars)
-00AA
-00B5
-00BA
-00C0..00D6 (23 chars)
-00D8..00F6 (31 chars)
-00F8..021F (296 chars)
-0222..0233 (18 chars)
-0250..02AD (94 chars)
-02B0..02B8 (9 chars)
-02BB..02C1 (7 chars)
-02E0..02E4 (5 chars)
-02EE
-0345
-037A
-0386
-0388..038A (3 chars)
-038C
-038E..03A1 (20 chars)
-03A3..03CE (44 chars)
-03D0..03D7 (8 chars)
-03DA..03F3 (26 chars)
-0400..0481 (130 chars)
-048C..04C4 (57 chars)
-04C7..04C8 (2 chars)
-04CB..04CC (2 chars)
-04D0..04F5 (38 chars)
-04F8..04F9 (2 chars)
-0531..0556 (38 chars)
-0559
-0561..0587 (39 chars)
-05D0..05EA (27 chars)
-05F0..05F2 (3 chars)
-0621..063A (26 chars)
-0641..0655 (21 chars)
-0670..06D3 (100 chars)
-06D5..06DC (8 chars)
-06E1..06E8 (8 chars)
-06ED
-06FA..06FC (3 chars)
-0710..072C (29 chars)
-0730..073F (16 chars)
-0780..07B0 (49 chars)
-0901..0903 (3 chars)
-0905..0939 (53 chars)
-093D..094C (16 chars)
-0950
-0958..0963 (12 chars)
-0981..0983 (3 chars)
-0985..098C (8 chars)
-098F..0990 (2 chars)
-0993..09A8 (22 chars)
-09AA..09B0 (7 chars)
-09B2
-09B6..09B9 (4 chars)
-09BE..09C4 (7 chars)
-09C7..09C8 (2 chars)
-09CB..09CC (2 chars)
-09D7
-09DC..09DD (2 chars)
-09DF..09E3 (5 chars)
-09F0..09F1 (2 chars)
-0A02
-0A05..0A0A (6 chars)
-0A0F..0A10 (2 chars)
-0A13..0A28 (22 chars)
-0A2A..0A30 (7 chars)
-0A32..0A33 (2 chars)
-0A35..0A36 (2 chars)
-0A38..0A39 (2 chars)
-0A3E..0A42 (5 chars)
-0A47..0A48 (2 chars)
-0A4B..0A4C (2 chars)
-0A59..0A5C (4 chars)
-0A5E
-0A70..0A74 (5 chars)
-0A81..0A83 (3 chars)
-0A85..0A8B (7 chars)
-0A8D
-0A8F..0A91 (3 chars)
-0A93..0AA8 (22 chars)
-0AAA..0AB0 (7 chars)
-0AB2..0AB3 (2 chars)
-0AB5..0AB9 (5 chars)
-0ABD..0AC5 (9 chars)
-0AC7..0AC9 (3 chars)
-0ACB..0ACC (2 chars)
-0AD0
-0AE0
-0B01..0B03 (3 chars)
-0B05..0B0C (8 chars)
-0B0F..0B10 (2 chars)
-0B13..0B28 (22 chars)
-0B2A..0B30 (7 chars)
-0B32..0B33 (2 chars)
-0B36..0B39 (4 chars)
-0B3D..0B43 (7 chars)
-0B47..0B48 (2 chars)
-0B4B..0B4C (2 chars)
-0B56..0B57 (2 chars)
-0B5C..0B5D (2 chars)
-0B5F..0B61 (3 chars)
-0B82..0B83 (2 chars)
-0B85..0B8A (6 chars)
-0B8E..0B90 (3 chars)
-0B92..0B95 (4 chars)
-0B99..0B9A (2 chars)
-0B9C
-0B9E..0B9F (2 chars)
-0BA3..0BA4 (2 chars)
-0BA8..0BAA (3 chars)
-0BAE..0BB5 (8 chars)
-0BB7..0BB9 (3 chars)
-0BBE..0BC2 (5 chars)
-0BC6..0BC8 (3 chars)
-0BCA..0BCC (3 chars)
-0BD7
-0C01..0C03 (3 chars)
-0C05..0C0C (8 chars)
-0C0E..0C10 (3 chars)
-0C12..0C28 (23 chars)
-0C2A..0C33 (10 chars)
-0C35..0C39 (5 chars)
-0C3E..0C44 (7 chars)
-0C46..0C48 (3 chars)
-0C4A..0C4C (3 chars)
-0C55..0C56 (2 chars)
-0C60..0C61 (2 chars)
-0C82..0C83 (2 chars)
-0C85..0C8C (8 chars)
-0C8E..0C90 (3 chars)
-0C92..0CA8 (23 chars)
-0CAA..0CB3 (10 chars)
-0CB5..0CB9 (5 chars)
-0CBE..0CC4 (7 chars)
-0CC6..0CC8 (3 chars)
-0CCA..0CCC (3 chars)
-0CD5..0CD6 (2 chars)
-0CDE
-0CE0..0CE1 (2 chars)
-0D02..0D03 (2 chars)
-0D05..0D0C (8 chars)
-0D0E..0D10 (3 chars)
-0D12..0D28 (23 chars)
-0D2A..0D39 (16 chars)
-0D3E..0D43 (6 chars)
-0D46..0D48 (3 chars)
-0D4A..0D4C (3 chars)
-0D57
-0D60..0D61 (2 chars)
-0D82..0D83 (2 chars)
-0D85..0D96 (18 chars)
-0D9A..0DB1 (24 chars)
-0DB3..0DBB (9 chars)
-0DBD
-0DC0..0DC6 (7 chars)
-0DCF..0DD4 (6 chars)
-0DD6
-0DD8..0DDF (8 chars)
-0DF2..0DF3 (2 chars)
-0E01..0E3A (58 chars)
-0E40..0E45 (6 chars)
-0E4D
-0E81..0E82 (2 chars)
-0E84
-0E87..0E88 (2 chars)
-0E8A
-0E8D
-0E94..0E97 (4 chars)
-0E99..0E9F (7 chars)
-0EA1..0EA3 (3 chars)
-0EA5
-0EA7
-0EAA..0EAB (2 chars)
-0EAD..0EB9 (13 chars)
-0EBB..0EBD (3 chars)
-0EC0..0EC4 (5 chars)
-0ECD
-0EDC..0EDD (2 chars)
-0F00
-0F40..0F47 (8 chars)
-0F49..0F6A (34 chars)
-0F71..0F81 (17 chars)
-0F88..0F8B (4 chars)
-0F90..0F97 (8 chars)
-0F99..0FBC (36 chars)
-1000..1021 (34 chars)
-1023..1027 (5 chars)
-1029..102A (2 chars)
-102C..1032 (7 chars)
-1036
-1038
-1050..1059 (10 chars)
-10A0..10C5 (38 chars)
-10D0..10F6 (39 chars)
-1100..1159 (90 chars)
-115F..11A2 (68 chars)
-11A8..11F9 (82 chars)
-1200..1206 (7 chars)
-1208..1246 (63 chars)
-1248
-124A..124D (4 chars)
-1250..1256 (7 chars)
-1258
-125A..125D (4 chars)
-1260..1286 (39 chars)
-1288
-128A..128D (4 chars)
-1290..12AE (31 chars)
-12B0
-12B2..12B5 (4 chars)
-12B8..12BE (7 chars)
-12C0
-12C2..12C5 (4 chars)
-12C8..12CE (7 chars)
-12D0..12D6 (7 chars)
-12D8..12EE (23 chars)
-12F0..130E (31 chars)
-1310
-1312..1315 (4 chars)
-1318..131E (7 chars)
-1320..1346 (39 chars)
-1348..135A (19 chars)
-13A0..13F4 (85 chars)
-1401..166C (620 chars)
-166F..1676 (8 chars)
-1681..169A (26 chars)
-16A0..16EA (75 chars)
-1780..17C8 (73 chars)
-1820..1842 (35 chars)
-1844..1877 (52 chars)
-1880..18A9 (42 chars)
-1E00..1E9B (156 chars)
-1EA0..1EF9 (90 chars)
-1F00..1F15 (22 chars)
-1F18..1F1D (6 chars)
-1F20..1F45 (38 chars)
-1F48..1F4D (6 chars)
-1F50..1F57 (8 chars)
-1F59
-1F5B
-1F5D
-1F5F..1F7D (31 chars)
-1F80..1FB4 (53 chars)
-1FB6..1FBC (7 chars)
-1FBE
-1FC2..1FC4 (3 chars)
-1FC6..1FCC (7 chars)
-1FD0..1FD3 (4 chars)
-1FD6..1FDB (6 chars)
-1FE0..1FEC (13 chars)
-1FF2..1FF4 (3 chars)
-1FF6..1FFC (7 chars)
-207F
-2102
-2107
-210A..2113 (10 chars)
-2115
-2119..211D (5 chars)
-2124
-2126
-2128
-212A..212D (4 chars)
-212F..2131 (3 chars)
-2133..2139 (7 chars)
-2160..2183 (36 chars)
-3041..3094 (84 chars)
-30A1..30FA (90 chars)
-3105..312C (40 chars)
-3131..318E (94 chars)
-31A0..31B7 (24 chars)
-A000..A48C (1165 chars)
-AC00..D7A3 (11172 chars)
-FB00..FB06 (7 chars)
-FB13..FB17 (5 chars)
-FB1D
-FB1F..FB28 (10 chars)
-FB2A..FB36 (13 chars)
-FB38..FB3C (5 chars)
-FB3E
-FB40..FB41 (2 chars)
-FB43..FB44 (2 chars)
-FB46..FBB1 (108 chars)
-FBD3..FD3D (363 chars)
-FD50..FD8F (64 chars)
-FD92..FDC7 (54 chars)
-FDF0..FDFB (12 chars)
-FE70..FE72 (3 chars)
-FE74
-FE76..FEFC (135 chars)
-FF21..FF3A (26 chars)
-FF41..FF5A (26 chars)
-FF66..FF6F (10 chars)
-FF71..FF9D (45 chars)
-FFA0..FFBE (31 chars)
-FFC2..FFC7 (6 chars)
-FFCA..FFCF (6 chars)
-FFD2..FFD7 (6 chars)
-FFDA..FFDC (3 chars)
-
-*******************************************
-
-Property dump for: 0x20000002 (Ideographic)
-
-3006..3007 (2 chars)
-3021..3029 (9 chars)
-3038..303A (3 chars)
-3400..4DB5 (6582 chars)
-4E00..9FA5 (20902 chars)
-F900..FA2D (302 chars)
-
-*******************************************
-
-Property dump for: 0x20010000 (Diacritic)
-
-005E
-0060
-00A8
-00AF
-00B4
-00B7..00B8 (2 chars)
-02B0..02EE (63 chars)
-0300..034E (79 chars)
-0360..0362 (3 chars)
-0374..0375 (2 chars)
-037A
-0384..0385 (2 chars)
-0483..0486 (4 chars)
-0559
-0591..05A1 (17 chars)
-05A3..05B9 (23 chars)
-05BB..05BD (3 chars)
-05BF
-05C1..05C2 (2 chars)
-05C4
-06DF..06E0 (2 chars)
-06E5..06E6 (2 chars)
-06EA..06EC (3 chars)
-0740..074A (11 chars)
-093C
-094D
-0951..0954 (4 chars)
-09BC
-09CD
-0A3C
-0A4D
-0ABC
-0ACD
-0B3C
-0B4D
-0BCD
-0C4D
-0CCD
-0D4D
-0DCA
-0E47..0E4C (6 chars)
-0E4E
-0EC8..0ECC (5 chars)
-0F18..0F19 (2 chars)
-0F35
-0F37
-0F39
-0F3E..0F3F (2 chars)
-0F82..0F84 (3 chars)
-0F86..0F87 (2 chars)
-0FC6
-1037
-1039
-17C9..17D3 (11 chars)
-1FBD
-1FBF..1FC1 (3 chars)
-1FCD..1FCF (3 chars)
-1FDD..1FDF (3 chars)
-1FED..1FEF (3 chars)
-1FFD..1FFE (2 chars)
-302A..302F (6 chars)
-3099..309C (4 chars)
-30FC
-FB1E
-FE20..FE23 (4 chars)
-FF3E
-FF40
-FF70
-FF9E..FF9F (2 chars)
-FFE3
-
-*******************************************
-
-Property dump for: 0x20000040 (Extender)
-
-00B7
-02D0..02D1 (2 chars)
-0640
-0E46
-0EC6
-1843
-3005
-3031..3035 (5 chars)
-309D..309E (2 chars)
-30FC..30FE (3 chars)
-FF70
-
-*******************************************
-
-Property dump for: 0x20020000 (Identifier Part)
-
-0030..0039 (10 chars)
-0041..005A (26 chars)
-005F
-0061..007A (26 chars)
-00AA
-00B5
-00BA
-00C0..00D6 (23 chars)
-00D8..00F6 (31 chars)
-00F8..021F (296 chars)
-0222..0233 (18 chars)
-0250..02AD (94 chars)
-02B0..02B8 (9 chars)
-02BB..02C1 (7 chars)
-02D0..02D1 (2 chars)
-02E0..02E4 (5 chars)
-02EE
-0300..034E (79 chars)
-0360..0362 (3 chars)
-037A
-0386
-0388..038A (3 chars)
-038C
-038E..03A1 (20 chars)
-03A3..03CE (44 chars)
-03D0..03D7 (8 chars)
-03DA..03F3 (26 chars)
-0400..0481 (130 chars)
-0483..0486 (4 chars)
-048C..04C4 (57 chars)
-04C7..04C8 (2 chars)
-04CB..04CC (2 chars)
-04D0..04F5 (38 chars)
-04F8..04F9 (2 chars)
-0531..0556 (38 chars)
-0559
-0561..0587 (39 chars)
-0591..05A1 (17 chars)
-05A3..05B9 (23 chars)
-05BB..05BD (3 chars)
-05BF
-05C1..05C2 (2 chars)
-05C4
-05D0..05EA (27 chars)
-05F0..05F2 (3 chars)
-0621..063A (26 chars)
-0640..0655 (22 chars)
-0660..0669 (10 chars)
-0670..06D3 (100 chars)
-06D5..06DC (8 chars)
-06DF..06E8 (10 chars)
-06EA..06ED (4 chars)
-06F0..06FC (13 chars)
-0710..072C (29 chars)
-0730..074A (27 chars)
-0780..07B0 (49 chars)
-0901..0903 (3 chars)
-0905..0939 (53 chars)
-093C..094D (18 chars)
-0950..0954 (5 chars)
-0958..0963 (12 chars)
-0966..096F (10 chars)
-0981..0983 (3 chars)
-0985..098C (8 chars)
-098F..0990 (2 chars)
-0993..09A8 (22 chars)
-09AA..09B0 (7 chars)
-09B2
-09B6..09B9 (4 chars)
-09BC
-09BE..09C4 (7 chars)
-09C7..09C8 (2 chars)
-09CB..09CD (3 chars)
-09D7
-09DC..09DD (2 chars)
-09DF..09E3 (5 chars)
-09E6..09F1 (12 chars)
-0A02
-0A05..0A0A (6 chars)
-0A0F..0A10 (2 chars)
-0A13..0A28 (22 chars)
-0A2A..0A30 (7 chars)
-0A32..0A33 (2 chars)
-0A35..0A36 (2 chars)
-0A38..0A39 (2 chars)
-0A3C
-0A3E..0A42 (5 chars)
-0A47..0A48 (2 chars)
-0A4B..0A4D (3 chars)
-0A59..0A5C (4 chars)
-0A5E
-0A66..0A74 (15 chars)
-0A81..0A83 (3 chars)
-0A85..0A8B (7 chars)
-0A8D
-0A8F..0A91 (3 chars)
-0A93..0AA8 (22 chars)
-0AAA..0AB0 (7 chars)
-0AB2..0AB3 (2 chars)
-0AB5..0AB9 (5 chars)
-0ABC..0AC5 (10 chars)
-0AC7..0AC9 (3 chars)
-0ACB..0ACD (3 chars)
-0AD0
-0AE0
-0AE6..0AEF (10 chars)
-0B01..0B03 (3 chars)
-0B05..0B0C (8 chars)
-0B0F..0B10 (2 chars)
-0B13..0B28 (22 chars)
-0B2A..0B30 (7 chars)
-0B32..0B33 (2 chars)
-0B36..0B39 (4 chars)
-0B3C..0B43 (8 chars)
-0B47..0B48 (2 chars)
-0B4B..0B4D (3 chars)
-0B56..0B57 (2 chars)
-0B5C..0B5D (2 chars)
-0B5F..0B61 (3 chars)
-0B66..0B6F (10 chars)
-0B82..0B83 (2 chars)
-0B85..0B8A (6 chars)
-0B8E..0B90 (3 chars)
-0B92..0B95 (4 chars)
-0B99..0B9A (2 chars)
-0B9C
-0B9E..0B9F (2 chars)
-0BA3..0BA4 (2 chars)
-0BA8..0BAA (3 chars)
-0BAE..0BB5 (8 chars)
-0BB7..0BB9 (3 chars)
-0BBE..0BC2 (5 chars)
-0BC6..0BC8 (3 chars)
-0BCA..0BCD (4 chars)
-0BD7
-0BE7..0BEF (9 chars)
-0C01..0C03 (3 chars)
-0C05..0C0C (8 chars)
-0C0E..0C10 (3 chars)
-0C12..0C28 (23 chars)
-0C2A..0C33 (10 chars)
-0C35..0C39 (5 chars)
-0C3E..0C44 (7 chars)
-0C46..0C48 (3 chars)
-0C4A..0C4D (4 chars)
-0C55..0C56 (2 chars)
-0C60..0C61 (2 chars)
-0C66..0C6F (10 chars)
-0C82..0C83 (2 chars)
-0C85..0C8C (8 chars)
-0C8E..0C90 (3 chars)
-0C92..0CA8 (23 chars)
-0CAA..0CB3 (10 chars)
-0CB5..0CB9 (5 chars)
-0CBE..0CC4 (7 chars)
-0CC6..0CC8 (3 chars)
-0CCA..0CCD (4 chars)
-0CD5..0CD6 (2 chars)
-0CDE
-0CE0..0CE1 (2 chars)
-0CE6..0CEF (10 chars)
-0D02..0D03 (2 chars)
-0D05..0D0C (8 chars)
-0D0E..0D10 (3 chars)
-0D12..0D28 (23 chars)
-0D2A..0D39 (16 chars)
-0D3E..0D43 (6 chars)
-0D46..0D48 (3 chars)
-0D4A..0D4D (4 chars)
-0D57
-0D60..0D61 (2 chars)
-0D66..0D6F (10 chars)
-0D82..0D83 (2 chars)
-0D85..0D96 (18 chars)
-0D9A..0DB1 (24 chars)
-0DB3..0DBB (9 chars)
-0DBD
-0DC0..0DC6 (7 chars)
-0DCA
-0DCF..0DD4 (6 chars)
-0DD6
-0DD8..0DDF (8 chars)
-0DF2..0DF3 (2 chars)
-0E01..0E3A (58 chars)
-0E40..0E4E (15 chars)
-0E50..0E59 (10 chars)
-0E81..0E82 (2 chars)
-0E84
-0E87..0E88 (2 chars)
-0E8A
-0E8D
-0E94..0E97 (4 chars)
-0E99..0E9F (7 chars)
-0EA1..0EA3 (3 chars)
-0EA5
-0EA7
-0EAA..0EAB (2 chars)
-0EAD..0EB9 (13 chars)
-0EBB..0EBD (3 chars)
-0EC0..0EC4 (5 chars)
-0EC6
-0EC8..0ECD (6 chars)
-0ED0..0ED9 (10 chars)
-0EDC..0EDD (2 chars)
-0F00
-0F18..0F19 (2 chars)
-0F20..0F29 (10 chars)
-0F35
-0F37
-0F39
-0F3E..0F47 (10 chars)
-0F49..0F6A (34 chars)
-0F71..0F84 (20 chars)
-0F86..0F8B (6 chars)
-0F90..0F97 (8 chars)
-0F99..0FBC (36 chars)
-0FC6
-1000..1021 (34 chars)
-1023..1027 (5 chars)
-1029..102A (2 chars)
-102C..1032 (7 chars)
-1036..1039 (4 chars)
-1040..1049 (10 chars)
-1050..1059 (10 chars)
-10A0..10C5 (38 chars)
-10D0..10F6 (39 chars)
-1100..1159 (90 chars)
-115F..11A2 (68 chars)
-11A8..11F9 (82 chars)
-1200..1206 (7 chars)
-1208..1246 (63 chars)
-1248
-124A..124D (4 chars)
-1250..1256 (7 chars)
-1258
-125A..125D (4 chars)
-1260..1286 (39 chars)
-1288
-128A..128D (4 chars)
-1290..12AE (31 chars)
-12B0
-12B2..12B5 (4 chars)
-12B8..12BE (7 chars)
-12C0
-12C2..12C5 (4 chars)
-12C8..12CE (7 chars)
-12D0..12D6 (7 chars)
-12D8..12EE (23 chars)
-12F0..130E (31 chars)
-1310
-1312..1315 (4 chars)
-1318..131E (7 chars)
-1320..1346 (39 chars)
-1348..135A (19 chars)
-1369..1371 (9 chars)
-13A0..13F4 (85 chars)
-1401..166C (620 chars)
-166F..1676 (8 chars)
-1681..169A (26 chars)
-16A0..16EA (75 chars)
-1780..17D3 (84 chars)
-17E0..17E9 (10 chars)
-1810..1819 (10 chars)
-1820..1877 (88 chars)
-1880..18A9 (42 chars)
-1E00..1E9B (156 chars)
-1EA0..1EF9 (90 chars)
-1F00..1F15 (22 chars)
-1F18..1F1D (6 chars)
-1F20..1F45 (38 chars)
-1F48..1F4D (6 chars)
-1F50..1F57 (8 chars)
-1F59
-1F5B
-1F5D
-1F5F..1F7D (31 chars)
-1F80..1FB4 (53 chars)
-1FB6..1FBC (7 chars)
-1FBE
-1FC2..1FC4 (3 chars)
-1FC6..1FCC (7 chars)
-1FD0..1FD3 (4 chars)
-1FD6..1FDB (6 chars)
-1FE0..1FEC (13 chars)
-1FF2..1FF4 (3 chars)
-1FF6..1FFC (7 chars)
-203F..2040 (2 chars)
-207F
-20D0..20DC (13 chars)
-20E1
-2102
-2107
-210A..2113 (10 chars)
-2115
-2119..211D (5 chars)
-2124
-2126
-2128
-212A..212D (4 chars)
-212F..2131 (3 chars)
-2133..2139 (7 chars)
-2160..2183 (36 chars)
-3005..3007 (3 chars)
-3021..302F (15 chars)
-3031..3035 (5 chars)
-3038..303A (3 chars)
-3041..3094 (84 chars)
-3099..309A (2 chars)
-309D..309E (2 chars)
-30A1..30FE (94 chars)
-3105..312C (40 chars)
-3131..318E (94 chars)
-31A0..31B7 (24 chars)
-3400..4DB5 (6582 chars)
-4E00..9FA5 (20902 chars)
-A000..A48C (1165 chars)
-AC00..D7A3 (11172 chars)
-F900..FA2D (302 chars)
-FB00..FB06 (7 chars)
-FB13..FB17 (5 chars)
-FB1D..FB28 (12 chars)
-FB2A..FB36 (13 chars)
-FB38..FB3C (5 chars)
-FB3E
-FB40..FB41 (2 chars)
-FB43..FB44 (2 chars)
-FB46..FBB1 (108 chars)
-FBD3..FD3D (363 chars)
-FD50..FD8F (64 chars)
-FD92..FDC7 (54 chars)
-FDF0..FDFB (12 chars)
-FE20..FE23 (4 chars)
-FE33..FE34 (2 chars)
-FE4D..FE4F (3 chars)
-FE70..FE72 (3 chars)
-FE74
-FE76..FEFC (135 chars)
-FF10..FF19 (10 chars)
-FF21..FF3A (26 chars)
-FF3F
-FF41..FF5A (26 chars)
-FF65..FFBE (90 chars)
-FFC2..FFC7 (6 chars)
-FFCA..FFCF (6 chars)
-FFD2..FFD7 (6 chars)
-FFDA..FFDC (3 chars)
-
-*******************************************
-
-Property dump for: 0x10000080 (Ignorable Control)
-
-0001..0008 (8 chars)
-000E..001B (14 chars)
-007F..0084 (6 chars)
-0086..009F (26 chars)
-070F
-180B..180E (4 chars)
-200C..200F (4 chars)
-202A..202E (5 chars)
-206A..206F (6 chars)
-FEFF
-FFF9..FFFB (3 chars)
-
-*******************************************
-
-Property dump for: 0x01000000 (Bidi: Left-to-Right)
-
-0041..005A (26 chars)
-0061..007A (26 chars)
-00AA
-00B5
-00BA
-00C0..00D6 (23 chars)
-00D8..00F6 (31 chars)
-00F8..021F (296 chars)
-0222..0233 (18 chars)
-0250..02AD (94 chars)
-02B0..02B8 (9 chars)
-02BB..02C1 (7 chars)
-02D0..02D1 (2 chars)
-02E0..02E4 (5 chars)
-02EE
-037A
-0386
-0388..038A (3 chars)
-038C
-038E..03A1 (20 chars)
-03A3..03CE (44 chars)
-03D0..03D7 (8 chars)
-03DA..03F3 (26 chars)
-0400..0482 (131 chars)
-048C..04C4 (57 chars)
-04C7..04C8 (2 chars)
-04CB..04CC (2 chars)
-04D0..04F5 (38 chars)
-04F8..04F9 (2 chars)
-0531..0556 (38 chars)
-0559..055F (7 chars)
-0561..0587 (39 chars)
-0589
-0903
-0905..0939 (53 chars)
-093D..0940 (4 chars)
-0949..094C (4 chars)
-0950
-0958..0961 (10 chars)
-0964..0970 (13 chars)
-0982..0983 (2 chars)
-0985..098C (8 chars)
-098F..0990 (2 chars)
-0993..09A8 (22 chars)
-09AA..09B0 (7 chars)
-09B2
-09B6..09B9 (4 chars)
-09BE..09C0 (3 chars)
-09C7..09C8 (2 chars)
-09CB..09CC (2 chars)
-09D7
-09DC..09DD (2 chars)
-09DF..09E1 (3 chars)
-09E6..09F1 (12 chars)
-09F4..09FA (7 chars)
-0A05..0A0A (6 chars)
-0A0F..0A10 (2 chars)
-0A13..0A28 (22 chars)
-0A2A..0A30 (7 chars)
-0A32..0A33 (2 chars)
-0A35..0A36 (2 chars)
-0A38..0A39 (2 chars)
-0A3E..0A40 (3 chars)
-0A59..0A5C (4 chars)
-0A5E
-0A66..0A6F (10 chars)
-0A72..0A74 (3 chars)
-0A83
-0A85..0A8B (7 chars)
-0A8D
-0A8F..0A91 (3 chars)
-0A93..0AA8 (22 chars)
-0AAA..0AB0 (7 chars)
-0AB2..0AB3 (2 chars)
-0AB5..0AB9 (5 chars)
-0ABD..0AC0 (4 chars)
-0AC9
-0ACB..0ACC (2 chars)
-0AD0
-0AE0
-0AE6..0AEF (10 chars)
-0B02..0B03 (2 chars)
-0B05..0B0C (8 chars)
-0B0F..0B10 (2 chars)
-0B13..0B28 (22 chars)
-0B2A..0B30 (7 chars)
-0B32..0B33 (2 chars)
-0B36..0B39 (4 chars)
-0B3D..0B3E (2 chars)
-0B40
-0B47..0B48 (2 chars)
-0B4B..0B4C (2 chars)
-0B57
-0B5C..0B5D (2 chars)
-0B5F..0B61 (3 chars)
-0B66..0B70 (11 chars)
-0B83
-0B85..0B8A (6 chars)
-0B8E..0B90 (3 chars)
-0B92..0B95 (4 chars)
-0B99..0B9A (2 chars)
-0B9C
-0B9E..0B9F (2 chars)
-0BA3..0BA4 (2 chars)
-0BA8..0BAA (3 chars)
-0BAE..0BB5 (8 chars)
-0BB7..0BB9 (3 chars)
-0BBE..0BBF (2 chars)
-0BC1..0BC2 (2 chars)
-0BC6..0BC8 (3 chars)
-0BCA..0BCC (3 chars)
-0BD7
-0BE7..0BF2 (12 chars)
-0C01..0C03 (3 chars)
-0C05..0C0C (8 chars)
-0C0E..0C10 (3 chars)
-0C12..0C28 (23 chars)
-0C2A..0C33 (10 chars)
-0C35..0C39 (5 chars)
-0C41..0C44 (4 chars)
-0C60..0C61 (2 chars)
-0C66..0C6F (10 chars)
-0C82..0C83 (2 chars)
-0C85..0C8C (8 chars)
-0C8E..0C90 (3 chars)
-0C92..0CA8 (23 chars)
-0CAA..0CB3 (10 chars)
-0CB5..0CB9 (5 chars)
-0CBE
-0CC0..0CC4 (5 chars)
-0CC7..0CC8 (2 chars)
-0CCA..0CCB (2 chars)
-0CD5..0CD6 (2 chars)
-0CDE
-0CE0..0CE1 (2 chars)
-0CE6..0CEF (10 chars)
-0D02..0D03 (2 chars)
-0D05..0D0C (8 chars)
-0D0E..0D10 (3 chars)
-0D12..0D28 (23 chars)
-0D2A..0D39 (16 chars)
-0D3E..0D40 (3 chars)
-0D46..0D48 (3 chars)
-0D4A..0D4C (3 chars)
-0D57
-0D60..0D61 (2 chars)
-0D66..0D6F (10 chars)
-0D82..0D83 (2 chars)
-0D85..0D96 (18 chars)
-0D9A..0DB1 (24 chars)
-0DB3..0DBB (9 chars)
-0DBD
-0DC0..0DC6 (7 chars)
-0DCF..0DD1 (3 chars)
-0DD8..0DDF (8 chars)
-0DF2..0DF4 (3 chars)
-0E01..0E30 (48 chars)
-0E32..0E33 (2 chars)
-0E40..0E46 (7 chars)
-0E4F..0E5B (13 chars)
-0E81..0E82 (2 chars)
-0E84
-0E87..0E88 (2 chars)
-0E8A
-0E8D
-0E94..0E97 (4 chars)
-0E99..0E9F (7 chars)
-0EA1..0EA3 (3 chars)
-0EA5
-0EA7
-0EAA..0EAB (2 chars)
-0EAD..0EB0 (4 chars)
-0EB2..0EB3 (2 chars)
-0EBD
-0EC0..0EC4 (5 chars)
-0EC6
-0ED0..0ED9 (10 chars)
-0EDC..0EDD (2 chars)
-0F00..0F17 (24 chars)
-0F1A..0F34 (27 chars)
-0F36
-0F38
-0F3E..0F47 (10 chars)
-0F49..0F6A (34 chars)
-0F7F
-0F85
-0F88..0F8B (4 chars)
-0FBE..0FC5 (8 chars)
-0FC7..0FCC (6 chars)
-0FCF
-1000..1021 (34 chars)
-1023..1027 (5 chars)
-1029..102A (2 chars)
-102C
-1031
-1038
-1040..1057 (24 chars)
-10A0..10C5 (38 chars)
-10D0..10F6 (39 chars)
-10FB
-1100..1159 (90 chars)
-115F..11A2 (68 chars)
-11A8..11F9 (82 chars)
-1200..1206 (7 chars)
-1208..1246 (63 chars)
-1248
-124A..124D (4 chars)
-1250..1256 (7 chars)
-1258
-125A..125D (4 chars)
-1260..1286 (39 chars)
-1288
-128A..128D (4 chars)
-1290..12AE (31 chars)
-12B0
-12B2..12B5 (4 chars)
-12B8..12BE (7 chars)
-12C0
-12C2..12C5 (4 chars)
-12C8..12CE (7 chars)
-12D0..12D6 (7 chars)
-12D8..12EE (23 chars)
-12F0..130E (31 chars)
-1310
-1312..1315 (4 chars)
-1318..131E (7 chars)
-1320..1346 (39 chars)
-1348..135A (19 chars)
-1361..137C (28 chars)
-13A0..13F4 (85 chars)
-1401..1676 (630 chars)
-1681..169A (26 chars)
-16A0..16F0 (81 chars)
-1780..17B6 (55 chars)
-17BE..17C5 (8 chars)
-17C7..17C8 (2 chars)
-17D4..17DA (7 chars)
-17DC
-17E0..17E9 (10 chars)
-1810..1819 (10 chars)
-1820..1877 (88 chars)
-1880..18A8 (41 chars)
-1E00..1E9B (156 chars)
-1EA0..1EF9 (90 chars)
-1F00..1F15 (22 chars)
-1F18..1F1D (6 chars)
-1F20..1F45 (38 chars)
-1F48..1F4D (6 chars)
-1F50..1F57 (8 chars)
-1F59
-1F5B
-1F5D
-1F5F..1F7D (31 chars)
-1F80..1FB4 (53 chars)
-1FB6..1FBC (7 chars)
-1FBE
-1FC2..1FC4 (3 chars)
-1FC6..1FCC (7 chars)
-1FD0..1FD3 (4 chars)
-1FD6..1FDB (6 chars)
-1FE0..1FEC (13 chars)
-1FF2..1FF4 (3 chars)
-1FF6..1FFC (7 chars)
-200E
-207F
-2102
-2107
-210A..2113 (10 chars)
-2115
-2119..211D (5 chars)
-2124
-2126
-2128
-212A..212D (4 chars)
-212F..2131 (3 chars)
-2133..2139 (7 chars)
-2160..2183 (36 chars)
-2336..237A (69 chars)
-2395
-249C..24E9 (78 chars)
-3005..3007 (3 chars)
-3021..3029 (9 chars)
-3031..3035 (5 chars)
-3038..303A (3 chars)
-3041..3094 (84 chars)
-309D..309E (2 chars)
-30A1..30FA (90 chars)
-30FC..30FE (3 chars)
-3105..312C (40 chars)
-3131..318E (94 chars)
-3190..31B7 (40 chars)
-3200..321C (29 chars)
-3220..3243 (36 chars)
-3260..327B (28 chars)
-327F..32B0 (50 chars)
-32C0..32CB (12 chars)
-32D0..32FE (47 chars)
-3300..3376 (119 chars)
-337B..33DD (99 chars)
-33E0..33FE (31 chars)
-3400..4DB5 (6582 chars)
-4E00..9FA5 (20902 chars)
-A000..A48C (1165 chars)
-AC00..D7A3 (11172 chars)
-D800..FA2D (8750 chars)
-FB00..FB06 (7 chars)
-FB13..FB17 (5 chars)
-FF21..FF3A (26 chars)
-FF41..FF5A (26 chars)
-FF66..FFBE (89 chars)
-FFC2..FFC7 (6 chars)
-FFCA..FFCF (6 chars)
-FFD2..FFD7 (6 chars)
-FFDA..FFDC (3 chars)
-F0000..FFFFD (65534 chars)
-100000..10FFFD (65534 chars)
-
-*******************************************
-
-Property dump for: 0x02000000 (Bidi: (Hebrew) Right-to-Left)
-
-05BE
-05C0
-05C3
-05D0..05EA (27 chars)
-05F0..05F4 (5 chars)
-200F
-FB1D
-FB1F..FB28 (10 chars)
-FB2A..FB36 (13 chars)
-FB38..FB3C (5 chars)
-FB3E
-FB40..FB41 (2 chars)
-FB43..FB44 (2 chars)
-FB46..FB4F (10 chars)
-
-*******************************************
-
-Property dump for: 0x0B000000 (Bidi: Arabic Right-to-Left)
-
-061B
-061F
-0621..063A (26 chars)
-0640..064A (11 chars)
-066D
-0671..06D5 (101 chars)
-06E5..06E6 (2 chars)
-06FA..06FE (5 chars)
-0700..070D (14 chars)
-0710
-0712..072C (27 chars)
-0780..07A5 (38 chars)
-FB50..FBB1 (98 chars)
-FBD3..FD3D (363 chars)
-FD50..FD8F (64 chars)
-FD92..FDC7 (54 chars)
-FDF0..FDFB (12 chars)
-FE70..FE72 (3 chars)
-FE74
-FE76..FEFC (135 chars)
-
-*******************************************
-
-Property dump for: 0x03000000 (Bidi: European Digit)
-
-0030..0039 (10 chars)
-00B2..00B3 (2 chars)
-00B9
-06F0..06F9 (10 chars)
-2070
-2074..2079 (6 chars)
-2080..2089 (10 chars)
-2460..249B (60 chars)
-24EA
-FF10..FF19 (10 chars)
-
-*******************************************
-
-Property dump for: 0x04000000 (Bidi: Eur Num Separator)
-
-002F
-FF0F
-
-*******************************************
-
-Property dump for: 0x05000000 (Bidi: Eur Num Terminator)
-
-0023..0025 (3 chars)
-002B
-002D
-00A2..00A5 (4 chars)
-00B0..00B1 (2 chars)
-066A
-09F2..09F3 (2 chars)
-0E3F
-17DB
-2030..2034 (5 chars)
-207A..207B (2 chars)
-208A..208B (2 chars)
-20A0..20AF (16 chars)
-212E
-2212..2213 (2 chars)
-FB29
-FE5F
-FE62..FE63 (2 chars)
-FE69..FE6A (2 chars)
-FF03..FF05 (3 chars)
-FF0B
-FF0D
-FFE0..FFE1 (2 chars)
-FFE5..FFE6 (2 chars)
-
-*******************************************
-
-Property dump for: 0x06000000 (Bidi: Arabic Digit)
-
-0660..0669 (10 chars)
-066B..066C (2 chars)
-
-*******************************************
-
-Property dump for: 0x07000000 (Bidi: Common Separator)
-
-002C
-002E
-003A
-00A0
-060C
-FE50
-FE52
-FE55
-FF0C
-FF0E
-FF1A
-
-*******************************************
-
-Property dump for: 0x08000000 (Bidi: Block Separator)
-
-000A
-000D
-001C..001E (3 chars)
-0085
-2029
-
-*******************************************
-
-Property dump for: 0x09000000 (Bidi: Segment Separator)
-
-0009
-000B
-001F
-
-*******************************************
-
-Property dump for: 0x0A000000 (Bidi: Whitespace)
-
-000C
-0020
-1680
-2000..200A (11 chars)
-2028
-202F
-3000
-
-*******************************************
-
-Property dump for: 0x0C000000 (Bidi: Non-spacing Mark)
-
-0300..034E (79 chars)
-0360..0362 (3 chars)
-0483..0486 (4 chars)
-0488..0489 (2 chars)
-0591..05A1 (17 chars)
-05A3..05B9 (23 chars)
-05BB..05BD (3 chars)
-05BF
-05C1..05C2 (2 chars)
-05C4
-064B..0655 (11 chars)
-0670
-06D6..06E4 (15 chars)
-06E7..06E8 (2 chars)
-06EA..06ED (4 chars)
-0711
-0730..074A (27 chars)
-07A6..07B0 (11 chars)
-0901..0902 (2 chars)
-093C
-0941..0948 (8 chars)
-094D
-0951..0954 (4 chars)
-0962..0963 (2 chars)
-0981
-09BC
-09C1..09C4 (4 chars)
-09CD
-09E2..09E3 (2 chars)
-0A02
-0A3C
-0A41..0A42 (2 chars)
-0A47..0A48 (2 chars)
-0A4B..0A4D (3 chars)
-0A70..0A71 (2 chars)
-0A81..0A82 (2 chars)
-0ABC
-0AC1..0AC5 (5 chars)
-0AC7..0AC8 (2 chars)
-0ACD
-0B01
-0B3C
-0B3F
-0B41..0B43 (3 chars)
-0B4D
-0B56
-0B82
-0BC0
-0BCD
-0C3E..0C40 (3 chars)
-0C46..0C48 (3 chars)
-0C4A..0C4D (4 chars)
-0C55..0C56 (2 chars)
-0CBF
-0CC6
-0CCC..0CCD (2 chars)
-0D41..0D43 (3 chars)
-0D4D
-0DCA
-0DD2..0DD4 (3 chars)
-0DD6
-0E31
-0E34..0E3A (7 chars)
-0E47..0E4E (8 chars)
-0EB1
-0EB4..0EB9 (6 chars)
-0EBB..0EBC (2 chars)
-0EC8..0ECD (6 chars)
-0F18..0F19 (2 chars)
-0F35
-0F37
-0F39
-0F71..0F7E (14 chars)
-0F80..0F84 (5 chars)
-0F86..0F87 (2 chars)
-0F90..0F97 (8 chars)
-0F99..0FBC (36 chars)
-0FC6
-102D..1030 (4 chars)
-1032
-1036..1037 (2 chars)
-1039
-1058..1059 (2 chars)
-17B7..17BD (7 chars)
-17C6
-17C9..17D3 (11 chars)
-18A9
-20D0..20E3 (20 chars)
-302A..302F (6 chars)
-3099..309A (2 chars)
-FB1E
-FE20..FE23 (4 chars)
-
-*******************************************
-
-Property dump for: 0x0D000000 (Bidi: Boundary Neutral)
-
-0000..0008 (9 chars)
-000E..001B (14 chars)
-007F..0084 (6 chars)
-0086..009F (26 chars)
-070F
-180B..180E (4 chars)
-200B..200D (3 chars)
-206A..206F (6 chars)
-FEFF
-FFF9..FFFB (3 chars)
-
-*******************************************
-
-Property dump for: 0x0E000000 (Bidi: PDF)
-
-202C
-
-*******************************************
-
-Property dump for: 0x0F000000 (Bidi: Embedding or Override)
-
-202A..202B (2 chars)
-202D..202E (2 chars)
-
-*******************************************
-
-Property dump for: 0x80000009 (Bidi: Other Neutral)
-
-0021..0022 (2 chars)
-0026..002A (5 chars)
-003B..0040 (6 chars)
-005B..0060 (6 chars)
-007B..007E (4 chars)
-00A1
-00A6..00A9 (4 chars)
-00AB..00AF (5 chars)
-00B4
-00B6..00B8 (3 chars)
-00BB..00BF (5 chars)
-00D7
-00F7
-02B9..02BA (2 chars)
-02C2..02CF (14 chars)
-02D2..02DF (14 chars)
-02E5..02ED (9 chars)
-0374..0375 (2 chars)
-037E
-0384..0385 (2 chars)
-0387
-058A
-06E9
-0F3A..0F3D (4 chars)
-169B..169C (2 chars)
-1800..180A (11 chars)
-1FBD
-1FBF..1FC1 (3 chars)
-1FCD..1FCF (3 chars)
-1FDD..1FDF (3 chars)
-1FED..1FEF (3 chars)
-1FFD..1FFE (2 chars)
-2010..2027 (24 chars)
-2035..2046 (18 chars)
-2048..204D (6 chars)
-207C..207E (3 chars)
-208C..208E (3 chars)
-2100..2101 (2 chars)
-2103..2106 (4 chars)
-2108..2109 (2 chars)
-2114
-2116..2118 (3 chars)
-211E..2123 (6 chars)
-2125
-2127
-2129
-2132
-213A
-2153..215F (13 chars)
-2190..21F3 (100 chars)
-2200..2211 (18 chars)
-2214..22F1 (222 chars)
-2300..2335 (54 chars)
-237B
-237D..2394 (24 chars)
-2396..239A (5 chars)
-2400..2426 (39 chars)
-2440..244A (11 chars)
-2500..2595 (150 chars)
-25A0..25F7 (88 chars)
-2600..2613 (20 chars)
-2619..2671 (89 chars)
-2701..2704 (4 chars)
-2706..2709 (4 chars)
-270C..2727 (28 chars)
-2729..274B (35 chars)
-274D
-274F..2752 (4 chars)
-2756
-2758..275E (7 chars)
-2761..2767 (7 chars)
-2776..2794 (31 chars)
-2798..27AF (24 chars)
-27B1..27BE (14 chars)
-2800..28FF (256 chars)
-2E80..2E99 (26 chars)
-2E9B..2EF3 (89 chars)
-2F00..2FD5 (214 chars)
-2FF0..2FFB (12 chars)
-3001..3004 (4 chars)
-3008..3020 (25 chars)
-3030
-3036..3037 (2 chars)
-303E..303F (2 chars)
-309B..309C (2 chars)
-30FB
-A490..A4A1 (18 chars)
-A4A4..A4B3 (16 chars)
-A4B5..A4C0 (12 chars)
-A4C2..A4C4 (3 chars)
-A4C6
-FD3E..FD3F (2 chars)
-FE30..FE44 (21 chars)
-FE49..FE4F (7 chars)
-FE51
-FE54
-FE56..FE5E (9 chars)
-FE60..FE61 (2 chars)
-FE64..FE66 (3 chars)
-FE68
-FE6B
-FF01..FF02 (2 chars)
-FF06..FF0A (5 chars)
-FF1B..FF20 (6 chars)
-FF3B..FF40 (6 chars)
-FF5B..FF5E (4 chars)
-FF61..FF65 (5 chars)
-FFE2..FFE4 (3 chars)
-FFE8..FFEE (7 chars)
-FFFC..FFFD (2 chars)
-
-*******************************************
-
-Property dump for: 0x80000005 (Private Use)
-
-E000..F8FF (6400 chars)
-F0000..FFFFD (65534 chars)
-100000..10FFFD (65534 chars)
-
-*******************************************
-
-Property dump for: 0x80000000 (Uppercase)
-
-0041..005A (26 chars)
-00C0..00D6 (23 chars)
-00D8..00DE (7 chars)
-0100
-0102
-0104
-0106
-0108
-010A
-010C
-010E
-0110
-0112
-0114
-0116
-0118
-011A
-011C
-011E
-0120
-0122
-0124
-0126
-0128
-012A
-012C
-012E
-0130
-0132
-0134
-0136
-0139
-013B
-013D
-013F
-0141
-0143
-0145
-0147
-014A
-014C
-014E
-0150
-0152
-0154
-0156
-0158
-015A
-015C
-015E
-0160
-0162
-0164
-0166
-0168
-016A
-016C
-016E
-0170
-0172
-0174
-0176
-0178..0179 (2 chars)
-017B
-017D
-0181..0182 (2 chars)
-0184
-0186..0187 (2 chars)
-0189..018B (3 chars)
-018E..0191 (4 chars)
-0193..0194 (2 chars)
-0196..0198 (3 chars)
-019C..019D (2 chars)
-019F..01A0 (2 chars)
-01A2
-01A4
-01A6..01A7 (2 chars)
-01A9
-01AC
-01AE..01AF (2 chars)
-01B1..01B3 (3 chars)
-01B5
-01B7..01B8 (2 chars)
-01BC
-01C4
-01C7
-01CA
-01CD
-01CF
-01D1
-01D3
-01D5
-01D7
-01D9
-01DB
-01DE
-01E0
-01E2
-01E4
-01E6
-01E8
-01EA
-01EC
-01EE
-01F1
-01F4
-01F6..01F8 (3 chars)
-01FA
-01FC
-01FE
-0200
-0202
-0204
-0206
-0208
-020A
-020C
-020E
-0210
-0212
-0214
-0216
-0218
-021A
-021C
-021E
-0222
-0224
-0226
-0228
-022A
-022C
-022E
-0230
-0232
-0386
-0388..038A (3 chars)
-038C
-038E..038F (2 chars)
-0391..03A1 (17 chars)
-03A3..03AB (9 chars)
-03D2..03D4 (3 chars)
-03DA
-03DC
-03DE
-03E0
-03E2
-03E4
-03E6
-03E8
-03EA
-03EC
-03EE
-0400..042F (48 chars)
-0460
-0462
-0464
-0466
-0468
-046A
-046C
-046E
-0470
-0472
-0474
-0476
-0478
-047A
-047C
-047E
-0480
-048C
-048E
-0490
-0492
-0494
-0496
-0498
-049A
-049C
-049E
-04A0
-04A2
-04A4
-04A6
-04A8
-04AA
-04AC
-04AE
-04B0
-04B2
-04B4
-04B6
-04B8
-04BA
-04BC
-04BE
-04C0..04C1 (2 chars)
-04C3
-04C7
-04CB
-04D0
-04D2
-04D4
-04D6
-04D8
-04DA
-04DC
-04DE
-04E0
-04E2
-04E4
-04E6
-04E8
-04EA
-04EC
-04EE
-04F0
-04F2
-04F4
-04F8
-0531..0556 (38 chars)
-10A0..10C5 (38 chars)
-1E00
-1E02
-1E04
-1E06
-1E08
-1E0A
-1E0C
-1E0E
-1E10
-1E12
-1E14
-1E16
-1E18
-1E1A
-1E1C
-1E1E
-1E20
-1E22
-1E24
-1E26
-1E28
-1E2A
-1E2C
-1E2E
-1E30
-1E32
-1E34
-1E36
-1E38
-1E3A
-1E3C
-1E3E
-1E40
-1E42
-1E44
-1E46
-1E48
-1E4A
-1E4C
-1E4E
-1E50
-1E52
-1E54
-1E56
-1E58
-1E5A
-1E5C
-1E5E
-1E60
-1E62
-1E64
-1E66
-1E68
-1E6A
-1E6C
-1E6E
-1E70
-1E72
-1E74
-1E76
-1E78
-1E7A
-1E7C
-1E7E
-1E80
-1E82
-1E84
-1E86
-1E88
-1E8A
-1E8C
-1E8E
-1E90
-1E92
-1E94
-1EA0
-1EA2
-1EA4
-1EA6
-1EA8
-1EAA
-1EAC
-1EAE
-1EB0
-1EB2
-1EB4
-1EB6
-1EB8
-1EBA
-1EBC
-1EBE
-1EC0
-1EC2
-1EC4
-1EC6
-1EC8
-1ECA
-1ECC
-1ECE
-1ED0
-1ED2
-1ED4
-1ED6
-1ED8
-1EDA
-1EDC
-1EDE
-1EE0
-1EE2
-1EE4
-1EE6
-1EE8
-1EEA
-1EEC
-1EEE
-1EF0
-1EF2
-1EF4
-1EF6
-1EF8
-1F08..1F0F (8 chars)
-1F18..1F1D (6 chars)
-1F28..1F2F (8 chars)
-1F38..1F3F (8 chars)
-1F48..1F4D (6 chars)
-1F59
-1F5B
-1F5D
-1F5F
-1F68..1F6F (8 chars)
-1FB8..1FBB (4 chars)
-1FC8..1FCB (4 chars)
-1FD8..1FDB (4 chars)
-1FE8..1FEC (5 chars)
-1FF8..1FFB (4 chars)
-2102
-2107
-210B..210D (3 chars)
-2110..2112 (3 chars)
-2115
-2119..211D (5 chars)
-2124
-2126
-2128
-212A..212D (4 chars)
-2130..2131 (2 chars)
-2133
-2160..216F (16 chars)
-24B6..24CF (26 chars)
-FF21..FF3A (26 chars)
-
-*******************************************
-
-Property dump for: 0x80000001 (Lowercase)
-
-0061..007A (26 chars)
-00AA
-00B5
-00BA
-00DF..00F6 (24 chars)
-00F8..00FF (8 chars)
-0101
-0103
-0105
-0107
-0109
-010B
-010D
-010F
-0111
-0113
-0115
-0117
-0119
-011B
-011D
-011F
-0121
-0123
-0125
-0127
-0129
-012B
-012D
-012F
-0131
-0133
-0135
-0137..0138 (2 chars)
-013A
-013C
-013E
-0140
-0142
-0144
-0146
-0148..0149 (2 chars)
-014B
-014D
-014F
-0151
-0153
-0155
-0157
-0159
-015B
-015D
-015F
-0161
-0163
-0165
-0167
-0169
-016B
-016D
-016F
-0171
-0173
-0175
-0177
-017A
-017C
-017E..0180 (3 chars)
-0183
-0185
-0188
-018C..018D (2 chars)
-0192
-0195
-0199..019B (3 chars)
-019E
-01A1
-01A3
-01A5
-01A8
-01AA..01AB (2 chars)
-01AD
-01B0
-01B4
-01B6
-01B9..01BA (2 chars)
-01BD..01BF (3 chars)
-01C6
-01C9
-01CC
-01CE
-01D0
-01D2
-01D4
-01D6
-01D8
-01DA
-01DC..01DD (2 chars)
-01DF
-01E1
-01E3
-01E5
-01E7
-01E9
-01EB
-01ED
-01EF..01F0 (2 chars)
-01F3
-01F5
-01F9
-01FB
-01FD
-01FF
-0201
-0203
-0205
-0207
-0209
-020B
-020D
-020F
-0211
-0213
-0215
-0217
-0219
-021B
-021D
-021F
-0223
-0225
-0227
-0229
-022B
-022D
-022F
-0231
-0233
-0250..02AD (94 chars)
-02B0..02B8 (9 chars)
-02C0..02C1 (2 chars)
-02E0..02E4 (5 chars)
-0390
-03AC..03CE (35 chars)
-03D0..03D1 (2 chars)
-03D5..03D7 (3 chars)
-03DB
-03DD
-03DF
-03E1
-03E3
-03E5
-03E7
-03E9
-03EB
-03ED
-03EF..03F3 (5 chars)
-0430..045F (48 chars)
-0461
-0463
-0465
-0467
-0469
-046B
-046D
-046F
-0471
-0473
-0475
-0477
-0479
-047B
-047D
-047F
-0481
-048D
-048F
-0491
-0493
-0495
-0497
-0499
-049B
-049D
-049F
-04A1
-04A3
-04A5
-04A7
-04A9
-04AB
-04AD
-04AF
-04B1
-04B3
-04B5
-04B7
-04B9
-04BB
-04BD
-04BF
-04C2
-04C4
-04C8
-04CC
-04D1
-04D3
-04D5
-04D7
-04D9
-04DB
-04DD
-04DF
-04E1
-04E3
-04E5
-04E7
-04E9
-04EB
-04ED
-04EF
-04F1
-04F3
-04F5
-04F9
-0561..0587 (39 chars)
-1E01
-1E03
-1E05
-1E07
-1E09
-1E0B
-1E0D
-1E0F
-1E11
-1E13
-1E15
-1E17
-1E19
-1E1B
-1E1D
-1E1F
-1E21
-1E23
-1E25
-1E27
-1E29
-1E2B
-1E2D
-1E2F
-1E31
-1E33
-1E35
-1E37
-1E39
-1E3B
-1E3D
-1E3F
-1E41
-1E43
-1E45
-1E47
-1E49
-1E4B
-1E4D
-1E4F
-1E51
-1E53
-1E55
-1E57
-1E59
-1E5B
-1E5D
-1E5F
-1E61
-1E63
-1E65
-1E67
-1E69
-1E6B
-1E6D
-1E6F
-1E71
-1E73
-1E75
-1E77
-1E79
-1E7B
-1E7D
-1E7F
-1E81
-1E83
-1E85
-1E87
-1E89
-1E8B
-1E8D
-1E8F
-1E91
-1E93
-1E95..1E9B (7 chars)
-1EA1
-1EA3
-1EA5
-1EA7
-1EA9
-1EAB
-1EAD
-1EAF
-1EB1
-1EB3
-1EB5
-1EB7
-1EB9
-1EBB
-1EBD
-1EBF
-1EC1
-1EC3
-1EC5
-1EC7
-1EC9
-1ECB
-1ECD
-1ECF
-1ED1
-1ED3
-1ED5
-1ED7
-1ED9
-1EDB
-1EDD
-1EDF
-1EE1
-1EE3
-1EE5
-1EE7
-1EE9
-1EEB
-1EED
-1EEF
-1EF1
-1EF3
-1EF5
-1EF7
-1EF9
-1F00..1F07 (8 chars)
-1F10..1F15 (6 chars)
-1F20..1F27 (8 chars)
-1F30..1F37 (8 chars)
-1F40..1F45 (6 chars)
-1F50..1F57 (8 chars)
-1F60..1F67 (8 chars)
-1F70..1F7D (14 chars)
-1F80..1F87 (8 chars)
-1F90..1F97 (8 chars)
-1FA0..1FA7 (8 chars)
-1FB0..1FB4 (5 chars)
-1FB6..1FB7 (2 chars)
-1FBE
-1FC2..1FC4 (3 chars)
-1FC6..1FC7 (2 chars)
-1FD0..1FD3 (4 chars)
-1FD6..1FD7 (2 chars)
-1FE0..1FE7 (8 chars)
-1FF2..1FF4 (3 chars)
-1FF6..1FF7 (2 chars)
-207F
-210A
-210E..210F (2 chars)
-2113
-212F
-2134
-2139
-2170..217F (16 chars)
-24D0..24E9 (26 chars)
-FB00..FB06 (7 chars)
-FB13..FB17 (5 chars)
-FF41..FF5A (26 chars)
-
-*******************************************
-
-Property dump for: 0x80000002 (Titlecase)
-
-01C5
-01C8
-01CB
-01F2
-1F88..1F8F (8 chars)
-1F98..1F9F (8 chars)
-1FA8..1FAF (8 chars)
-1FBC
-1FCC
-1FFC
-
-*******************************************
-
-Property dump for: 0x80000006 (Low Surrogate)
-
-DC00..DFFF (1024 chars)
-
-*******************************************
-
-Property dump for: 0x80000007 (High Surrogate)
-
-D800..DB7F (896 chars)
-
-*******************************************
-
-Property dump for: 0x80000008 (Private Use High Surrogate)
-
-DB80..DBFF (128 chars)
-
-*******************************************
-
-Property dump for: 0x8000000A (Not a Character)
-
-FFFE..FFFF (2 chars)
-1FFFE..1FFFF (2 chars)
-2FFFE..2FFFF (2 chars)
-3FFFE..3FFFF (2 chars)
-4FFFE..4FFFF (2 chars)
-5FFFE..5FFFF (2 chars)
-6FFFE..6FFFF (2 chars)
-7FFFE..7FFFF (2 chars)
-8FFFE..8FFFF (2 chars)
-9FFFE..9FFFF (2 chars)
-AFFFE..AFFFF (2 chars)
-BFFFE..BFFFF (2 chars)
-CFFFE..CFFFF (2 chars)
-DFFFE..DFFFF (2 chars)
-EFFFE..EFFFF (2 chars)
-FFFFE..FFFFF (2 chars)
-10FFFE..10FFFF (2 chars)
-
-*******************************************
-
-Property dump for: 0x00000000 (Unassigned Code Value)
-
-0220..0221 (2 chars)
-0234..024F (28 chars)
-02AE..02AF (2 chars)
-02EF..02FF (17 chars)
-034F..035F (17 chars)
-0363..0373 (17 chars)
-0376..0379 (4 chars)
-037B..037D (3 chars)
-037F..0383 (5 chars)
-038B
-038D
-03A2
-03CF
-03D8..03D9 (2 chars)
-03F4..03FF (12 chars)
-0487
-048A..048B (2 chars)
-04C5..04C6 (2 chars)
-04C9..04CA (2 chars)
-04CD..04CF (3 chars)
-04F6..04F7 (2 chars)
-04FA..0530 (55 chars)
-0557..0558 (2 chars)
-0560
-0588
-058B..0590 (6 chars)
-05A2
-05BA
-05C5..05CF (11 chars)
-05EB..05EF (5 chars)
-05F5..060B (23 chars)
-060D..061A (14 chars)
-061C..061E (3 chars)
-0620
-063B..063F (5 chars)
-0656..065F (10 chars)
-066E..066F (2 chars)
-06EE..06EF (2 chars)
-06FF
-070E
-072D..072F (3 chars)
-074B..077F (53 chars)
-07B1..0900 (336 chars)
-0904
-093A..093B (2 chars)
-094E..094F (2 chars)
-0955..0957 (3 chars)
-0971..0980 (16 chars)
-0984
-098D..098E (2 chars)
-0991..0992 (2 chars)
-09A9
-09B1
-09B3..09B5 (3 chars)
-09BA..09BB (2 chars)
-09BD
-09C5..09C6 (2 chars)
-09C9..09CA (2 chars)
-09CE..09D6 (9 chars)
-09D8..09DB (4 chars)
-09DE
-09E4..09E5 (2 chars)
-09FB..0A01 (7 chars)
-0A03..0A04 (2 chars)
-0A0B..0A0E (4 chars)
-0A11..0A12 (2 chars)
-0A29
-0A31
-0A34
-0A37
-0A3A..0A3B (2 chars)
-0A3D
-0A43..0A46 (4 chars)
-0A49..0A4A (2 chars)
-0A4E..0A58 (11 chars)
-0A5D
-0A5F..0A65 (7 chars)
-0A75..0A80 (12 chars)
-0A84
-0A8C
-0A8E
-0A92
-0AA9
-0AB1
-0AB4
-0ABA..0ABB (2 chars)
-0AC6
-0ACA
-0ACE..0ACF (2 chars)
-0AD1..0ADF (15 chars)
-0AE1..0AE5 (5 chars)
-0AF0..0B00 (17 chars)
-0B04
-0B0D..0B0E (2 chars)
-0B11..0B12 (2 chars)
-0B29
-0B31
-0B34..0B35 (2 chars)
-0B3A..0B3B (2 chars)
-0B44..0B46 (3 chars)
-0B49..0B4A (2 chars)
-0B4E..0B55 (8 chars)
-0B58..0B5B (4 chars)
-0B5E
-0B62..0B65 (4 chars)
-0B71..0B81 (17 chars)
-0B84
-0B8B..0B8D (3 chars)
-0B91
-0B96..0B98 (3 chars)
-0B9B
-0B9D
-0BA0..0BA2 (3 chars)
-0BA5..0BA7 (3 chars)
-0BAB..0BAD (3 chars)
-0BB6
-0BBA..0BBD (4 chars)
-0BC3..0BC5 (3 chars)
-0BC9
-0BCE..0BD6 (9 chars)
-0BD8..0BE6 (15 chars)
-0BF3..0C00 (14 chars)
-0C04
-0C0D
-0C11
-0C29
-0C34
-0C3A..0C3D (4 chars)
-0C45
-0C49
-0C4E..0C54 (7 chars)
-0C57..0C5F (9 chars)
-0C62..0C65 (4 chars)
-0C70..0C81 (18 chars)
-0C84
-0C8D
-0C91
-0CA9
-0CB4
-0CBA..0CBD (4 chars)
-0CC5
-0CC9
-0CCE..0CD4 (7 chars)
-0CD7..0CDD (7 chars)
-0CDF
-0CE2..0CE5 (4 chars)
-0CF0..0D01 (18 chars)
-0D04
-0D0D
-0D11
-0D29
-0D3A..0D3D (4 chars)
-0D44..0D45 (2 chars)
-0D49
-0D4E..0D56 (9 chars)
-0D58..0D5F (8 chars)
-0D62..0D65 (4 chars)
-0D70..0D81 (18 chars)
-0D84
-0D97..0D99 (3 chars)
-0DB2
-0DBC
-0DBE..0DBF (2 chars)
-0DC7..0DC9 (3 chars)
-0DCB..0DCE (4 chars)
-0DD5
-0DD7
-0DE0..0DF1 (18 chars)
-0DF5..0E00 (12 chars)
-0E3B..0E3E (4 chars)
-0E5C..0E80 (37 chars)
-0E83
-0E85..0E86 (2 chars)
-0E89
-0E8B..0E8C (2 chars)
-0E8E..0E93 (6 chars)
-0E98
-0EA0
-0EA4
-0EA6
-0EA8..0EA9 (2 chars)
-0EAC
-0EBA
-0EBE..0EBF (2 chars)
-0EC5
-0EC7
-0ECE..0ECF (2 chars)
-0EDA..0EDB (2 chars)
-0EDE..0EFF (34 chars)
-0F48
-0F6B..0F70 (6 chars)
-0F8C..0F8F (4 chars)
-0F98
-0FBD
-0FCD..0FCE (2 chars)
-0FD0..0FFF (48 chars)
-1022
-1028
-102B
-1033..1035 (3 chars)
-103A..103F (6 chars)
-105A..109F (70 chars)
-10C6..10CF (10 chars)
-10F7..10FA (4 chars)
-10FC..10FF (4 chars)
-115A..115E (5 chars)
-11A3..11A7 (5 chars)
-11FA..11FF (6 chars)
-1207
-1247
-1249
-124E..124F (2 chars)
-1257
-1259
-125E..125F (2 chars)
-1287
-1289
-128E..128F (2 chars)
-12AF
-12B1
-12B6..12B7 (2 chars)
-12BF
-12C1
-12C6..12C7 (2 chars)
-12CF
-12D7
-12EF
-130F
-1311
-1316..1317 (2 chars)
-131F
-1347
-135B..1360 (6 chars)
-137D..139F (35 chars)
-13F5..1400 (12 chars)
-1677..167F (9 chars)
-169D..169F (3 chars)
-16F1..177F (143 chars)
-17DD..17DF (3 chars)
-17EA..17FF (22 chars)
-180F
-181A..181F (6 chars)
-1878..187F (8 chars)
-18AA..1DFF (1366 chars)
-1E9C..1E9F (4 chars)
-1EFA..1EFF (6 chars)
-1F16..1F17 (2 chars)
-1F1E..1F1F (2 chars)
-1F46..1F47 (2 chars)
-1F4E..1F4F (2 chars)
-1F58
-1F5A
-1F5C
-1F5E
-1F7E..1F7F (2 chars)
-1FB5
-1FC5
-1FD4..1FD5 (2 chars)
-1FDC
-1FF0..1FF1 (2 chars)
-1FF5
-1FFF
-2047
-204E..2069 (28 chars)
-2071..2073 (3 chars)
-208F..209F (17 chars)
-20B0..20CF (32 chars)
-20E4..20FF (28 chars)
-213B..2152 (24 chars)
-2184..218F (12 chars)
-21F4..21FF (12 chars)
-22F2..22FF (14 chars)
-237C
-239B..23FF (101 chars)
-2427..243F (25 chars)
-244B..245F (21 chars)
-24EB..24FF (21 chars)
-2596..259F (10 chars)
-25F8..25FF (8 chars)
-2614..2618 (5 chars)
-2672..2700 (143 chars)
-2705
-270A..270B (2 chars)
-2728
-274C
-274E
-2753..2755 (3 chars)
-2757
-275F..2760 (2 chars)
-2768..2775 (14 chars)
-2795..2797 (3 chars)
-27B0
-27BF..27FF (65 chars)
-2900..2E7F (1408 chars)
-2E9A
-2EF4..2EFF (12 chars)
-2FD6..2FEF (26 chars)
-2FFC..2FFF (4 chars)
-303B..303D (3 chars)
-3040
-3095..3098 (4 chars)
-309F..30A0 (2 chars)
-30FF..3104 (6 chars)
-312D..3130 (4 chars)
-318F
-31B8..31FF (72 chars)
-321D..321F (3 chars)
-3244..325F (28 chars)
-327C..327E (3 chars)
-32B1..32BF (15 chars)
-32CC..32CF (4 chars)
-32FF
-3377..337A (4 chars)
-33DE..33DF (2 chars)
-33FF
-4DB6..4DFF (74 chars)
-9FA6..9FFF (90 chars)
-A48D..A48F (3 chars)
-A4A2..A4A3 (2 chars)
-A4B4
-A4C1
-A4C5
-A4C7..ABFF (1849 chars)
-D7A4..D7FF (92 chars)
-FA2E..FAFF (210 chars)
-FB07..FB12 (12 chars)
-FB18..FB1C (5 chars)
-FB37
-FB3D
-FB3F
-FB42
-FB45
-FBB2..FBD2 (33 chars)
-FD40..FD4F (16 chars)
-FD90..FD91 (2 chars)
-FDC8..FDEF (40 chars)
-FDFC..FE1F (36 chars)
-FE24..FE2F (12 chars)
-FE45..FE48 (4 chars)
-FE53
-FE67
-FE6C..FE6F (4 chars)
-FE73
-FE75
-FEFD..FEFE (2 chars)
-FF00
-FF5F..FF60 (2 chars)
-FFBF..FFC1 (3 chars)
-FFC8..FFC9 (2 chars)
-FFD0..FFD1 (2 chars)
-FFD8..FFD9 (2 chars)
-FFDD..FFDF (3 chars)
-FFE7
-FFEF..FFF8 (10 chars)
-10000..1FFFD (65534 chars)
-20000..2FFFD (65534 chars)
-30000..3FFFD (65534 chars)
-40000..4FFFD (65534 chars)
-50000..5FFFD (65534 chars)
-60000..6FFFD (65534 chars)
-70000..7FFFD (65534 chars)
-80000..8FFFD (65534 chars)
-90000..9FFFD (65534 chars)
-A0000..AFFFD (65534 chars)
-B0000..BFFFD (65534 chars)
-C0000..CFFFD (65534 chars)
-D0000..DFFFD (65534 chars)
-E0000..EFFFD (65534 chars)
-
diff --git a/contrib/perl5/lib/unicode/README.Ethiopic b/contrib/perl5/lib/unicode/README.Ethiopic
deleted file mode 100644
index f8ec21f..0000000
--- a/contrib/perl5/lib/unicode/README.Ethiopic
+++ /dev/null
@@ -1,18 +0,0 @@
-[[The UnicodeData-Latest.txt file has NOT (yet) been updated for the Ethiopic
-additions. You will lose the Ethiopic *.pl files if you run 'make clean' in
-./lib/unicode. --GSAR]]
-
-This package contains extensions to the property files generated from the
-UnicodeData-Latest.txt file. The UnicodeData file comes from the Unicode
-organization's ftp site and has not been included with modifications here.
-Updates for Ethiopic script to the UnicodeData file under the Unicode 3.0
-specification is being discussed at this time with the responsible parties
-within Unicode.
-
-"MakeEthiopicSyllables.PL" will create the series Is/Y0.pl .. Is/Y13.pl
-files to match the sYllabic class of an Ethiopic character. These tests
-may be extended to other syllabaries as well.
-
-The author would appreciate comments and suggestions on this effort:
-
- Daniel Yacob dmulholl@cs.indiana.edu
diff --git a/contrib/perl5/lib/unicode/README.perl b/contrib/perl5/lib/unicode/README.perl
deleted file mode 100644
index 2294bd3..0000000
--- a/contrib/perl5/lib/unicode/README.perl
+++ /dev/null
@@ -1,37 +0,0 @@
-The *.txt files were copied 30 Aug 2000 from
-
- http://www.unicode.org/Public/UNIDATA/
-
-and most of them were renamed to better fit 8.3 filename limitations,
-by which the Perl distribution tries to live.
-
- www.unicode.org Perl distribution
-
- ArabicShaping.txt ArabShap.txt
- BidiMirroring.txt BidiMirr.txt
- Blocks.txt Blocks.txt
- CaseFolding.txt CaseFold.txt
- CompositionExclusions.txt CompExcl.txt
- EastAsianWidth.txt EAWidth.txt (0)
- Index.txt Index.txt
- Jamo.txt Jamo.txt
- LineBreak.txt LineBrk.txt (0)
- NamesList.html NamesList.html (0)
- NamesList.txt Names.txt
- PropList.txt PropList.txt
- ReadMe.txt ReadMe.txt
- SpecialCasing.txt SpecCase.txt
- UnicodeCharacterDatabase.html UCD301.html
- UnicodeData.html UCDFF301.html
- UnicodeData.txt Unicode.301
-
-The two big files, NormalizationTest.txt (1.7MB) and Unihan.txt (15.8MB)
-were not copied for space considerations. The files marked with (0) had
-not been updated since Unicode 3.0.0 (10 Sep 1999)
-
-The *.pl files are generated from these files by the 'mktables.PL' script.
-
-While the files have been renamed the links in the html files haven't.
-
---
-jhi@iki.fi
diff --git a/contrib/perl5/lib/unicode/ReadMe.txt b/contrib/perl5/lib/unicode/ReadMe.txt
deleted file mode 100644
index b8a643c..0000000
--- a/contrib/perl5/lib/unicode/ReadMe.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-August 30, 2000
-
-This directory contains the first update release for Unicode 3.0.
-
-This release consists of corrections and additions to the
-Unicode Character Database for the Unicode Standard,
-Version 3.0.1.
-
-Detailed documentation of the files constituting the
-Unicode Character Database (contributory data files for
-the standard itself) can now be found in
-UnicodeCharacterDatabase.html.
-
diff --git a/contrib/perl5/lib/unicode/SpecCase.txt b/contrib/perl5/lib/unicode/SpecCase.txt
deleted file mode 100644
index 94662d3..0000000
--- a/contrib/perl5/lib/unicode/SpecCase.txt
+++ /dev/null
@@ -1,230 +0,0 @@
-# SpecialCasing-3.txt
-#
-# Special Casing Properties
-#
-# This file is a supplement to the UnicodeData file.
-# It contains additional information about the casing of Unicode characters.
-# (For compatibility, the UnicodeData.txt file only contains case mappings for
-# characters where they are 1-1, and does not have locale-specific mappings.)
-# These are informative character properties.
-#
-# Send comments to mark@unicode.org
-#
-# ================================================================================
-# Format
-# ================================================================================
-# The entries in this file are in the following machine-readable format:
-#
-# <entry> := <case_mapping> <condition_list>? (<s>* "#" <comment>)?
-#
-# <case_mapping> := <source> <sep> <lower> <sep> <title> <sep> <upper> <sep>
-#
-# <source> := <code_point>
-# <sep> := <s>* ";" <s>*
-# <lower> := <code_point_list>
-# <title> := <code_point_list>
-# <upper> := <code_point_list>
-# <code_point_list> := <code_point> (<s>+ <code_point>)*
-# <code_point> := <hex><hex><hex><hex>
-# <hex> := [0-9A-Fa-f]
-# <s> := <space>
-#
-# <condition_list> := <locale>? (<s>+ <context>)* <sep>
-# <locale> := <ISO_639_code> ( "_" <ISO_3166_code> )? ( "_" <variant> )?
-# <ISO_3166_code> := 2-letter country code,
-# as in http://www.unicode.org/unicode/onlinedat/countries.html
-# <ISO_639_code> := 2-letter code,
-# as in http://www.unicode.org/unicode/onlinedat/languages.html
-# <context> := "FINAL" | "NON_FINAL" | "MODERN" | "NON_MODERN" | "AFTER_i"
-#
-# A condition list overrides the normal behavior if all of the listed conditions are true.
-# Case distinctions in the condition list are not significant.
-#
-# FINAL: The letter is not followed by a letter of category L* (e.g. Ll, Lt, Lu, Lm, or Lo).
-# MODERN: The mapping is only used for modern text.
-# AFTER_i: The last base character was "i" 0069
-#
-# Conditions preceded by "NON_" represent the negation of the condition
-#
-# New contexts may be added in the future.
-# Additional whitespace around elements is optional. Blank lines are ignored in parsing.
-# On any line, all text following "#" is a comment, and are ignored in parsing.
-#
-# Parsers of this file must be prepared to deal future additions to this format:
-# * Additional contexts
-# * Additional fields
-# ================================================================================
-
-# ================================================================================
-# Unconditional mappings
-# ================================================================================
-
-# The German es-zed is special--the normal mapping is to SS.
-# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
-
-00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
-
-# Ligatures
-
-FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
-FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
-FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
-FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
-FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
-FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
-FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
-
-0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
-FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
-FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
-FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
-FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
-FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
-
-# No corresponding uppercase precomposed character
-
-0149; 0149; 02BC 004E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
-1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
-1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
-1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
-1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
-1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
-1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
-1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
-1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
-1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-
-# IMPORTANT-when capitalizing iota-subscript (0345)
-# It MUST be in normalized form--moved to the end of any sequence of combining marks.
-# This is because logically it represents a following base character!
-# E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
-# It should never be the first character in a word, so in titlecasing it can be left as is.
-
-# The following cases are already in the UnicodeData file, so are only commented here.
-
-# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
-
-# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
-# have special uppercases.
-# Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
-
-1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-
-1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-
-# Some characters with YPOGEGRAMMENI are also have no corresponding titlecases
-
-1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-
-1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-
-# ================================================================================
-# Conditional mappings
-# ================================================================================
-
-# Special case for final form of sigma
-
-03A3; 03C2; 03A3; 03A3; FINAL; # GREEK CAPITAL LETTER SIGMA
-
-# Note: the following cases for non-final are already in the UnicodeData file.
-
-# 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
-# 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
-# 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
-
-# Note: the following cases are not included, since they would case-fold in lowercasing
-
-# 03C3; 03C2; 03A3; 03A3; FINAL; # GREEK SMALL LETTER SIGMA
-# 03C2; 03C3; 03A3; 03A3; NON_FINAL; # GREEK SMALL LETTER FINAL SIGMA
-
-# ================================================================================
-# Locale-sensitive mappings
-# ================================================================================
-
-# Lithuanian
-
-0307; 0307; ; ; lt AFTER_i; # Remove DOT ABOVE after "i" with upper or titlecase
-
-# Turkish
-
-0049; 0131; 0049; 0049; tr; # LATIN CAPITAL LETTER I
-0069; 0069; 0130; 0130; tr; # LATIN SMALL LETTER I
-
-# Note: the following cases are already in the UnicodeData file.
-
-# 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I
-# 0130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE
diff --git a/contrib/perl5/lib/unicode/To/Digit.pl b/contrib/perl5/lib/unicode/To/Digit.pl
deleted file mode 100644
index 4bace1e..0000000
--- a/contrib/perl5/lib/unicode/To/Digit.pl
+++ /dev/null
@@ -1,30 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0030 0039 0000
-00b2 00b3 0002
-00b9 0001
-0660 0669 0000
-06f0 06f9 0000
-0966 096f 0000
-09e6 09ef 0000
-0a66 0a6f 0000
-0ae6 0aef 0000
-0b66 0b6f 0000
-0be7 0bef 0001
-0c66 0c6f 0000
-0ce6 0cef 0000
-0d66 0d6f 0000
-0e50 0e59 0000
-0ed0 0ed9 0000
-0f20 0f29 0000
-1040 1049 0000
-1369 1371 0001
-17e0 17e9 0000
-1810 1819 0000
-2070 0000
-2074 2079 0004
-2080 2089 0000
-ff10 ff19 0000
-END
diff --git a/contrib/perl5/lib/unicode/To/Lower.pl b/contrib/perl5/lib/unicode/To/Lower.pl
deleted file mode 100644
index 89755b7..0000000
--- a/contrib/perl5/lib/unicode/To/Lower.pl
+++ /dev/null
@@ -1,401 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0041 005a 0061
-00c0 00d6 00e0
-00d8 00de 00f8
-0100 0101
-0102 0103
-0104 0105
-0106 0107
-0108 0109
-010a 010b
-010c 010d
-010e 010f
-0110 0111
-0112 0113
-0114 0115
-0116 0117
-0118 0119
-011a 011b
-011c 011d
-011e 011f
-0120 0121
-0122 0123
-0124 0125
-0126 0127
-0128 0129
-012a 012b
-012c 012d
-012e 012f
-0130 0069
-0132 0133
-0134 0135
-0136 0137
-0139 013a
-013b 013c
-013d 013e
-013f 0140
-0141 0142
-0143 0144
-0145 0146
-0147 0148
-014a 014b
-014c 014d
-014e 014f
-0150 0151
-0152 0153
-0154 0155
-0156 0157
-0158 0159
-015a 015b
-015c 015d
-015e 015f
-0160 0161
-0162 0163
-0164 0165
-0166 0167
-0168 0169
-016a 016b
-016c 016d
-016e 016f
-0170 0171
-0172 0173
-0174 0175
-0176 0177
-0178 00ff
-0179 017a
-017b 017c
-017d 017e
-0181 0253
-0182 0183
-0184 0185
-0186 0254
-0187 0188
-0189 018a 0256
-018b 018c
-018e 01dd
-018f 0259
-0190 025b
-0191 0192
-0193 0260
-0194 0263
-0196 0269
-0197 0268
-0198 0199
-019c 026f
-019d 0272
-019f 0275
-01a0 01a1
-01a2 01a3
-01a4 01a5
-01a6 0280
-01a7 01a8
-01a9 0283
-01ac 01ad
-01ae 0288
-01af 01b0
-01b1 01b2 028a
-01b3 01b4
-01b5 01b6
-01b7 0292
-01b8 01b9
-01bc 01bd
-01c4 01c6
-01c5 01c6
-01c7 01c9
-01c8 01c9
-01ca 01cc
-01cb 01cc
-01cd 01ce
-01cf 01d0
-01d1 01d2
-01d3 01d4
-01d5 01d6
-01d7 01d8
-01d9 01da
-01db 01dc
-01de 01df
-01e0 01e1
-01e2 01e3
-01e4 01e5
-01e6 01e7
-01e8 01e9
-01ea 01eb
-01ec 01ed
-01ee 01ef
-01f1 01f3
-01f2 01f3
-01f4 01f5
-01f6 0195
-01f7 01bf
-01f8 01f9
-01fa 01fb
-01fc 01fd
-01fe 01ff
-0200 0201
-0202 0203
-0204 0205
-0206 0207
-0208 0209
-020a 020b
-020c 020d
-020e 020f
-0210 0211
-0212 0213
-0214 0215
-0216 0217
-0218 0219
-021a 021b
-021c 021d
-021e 021f
-0222 0223
-0224 0225
-0226 0227
-0228 0229
-022a 022b
-022c 022d
-022e 022f
-0230 0231
-0232 0233
-0386 03ac
-0388 038a 03ad
-038c 03cc
-038e 038f 03cd
-0391 03a1 03b1
-03a3 03ab 03c3
-03da 03db
-03dc 03dd
-03de 03df
-03e0 03e1
-03e2 03e3
-03e4 03e5
-03e6 03e7
-03e8 03e9
-03ea 03eb
-03ec 03ed
-03ee 03ef
-0400 040f 0450
-0410 042f 0430
-0460 0461
-0462 0463
-0464 0465
-0466 0467
-0468 0469
-046a 046b
-046c 046d
-046e 046f
-0470 0471
-0472 0473
-0474 0475
-0476 0477
-0478 0479
-047a 047b
-047c 047d
-047e 047f
-0480 0481
-048c 048d
-048e 048f
-0490 0491
-0492 0493
-0494 0495
-0496 0497
-0498 0499
-049a 049b
-049c 049d
-049e 049f
-04a0 04a1
-04a2 04a3
-04a4 04a5
-04a6 04a7
-04a8 04a9
-04aa 04ab
-04ac 04ad
-04ae 04af
-04b0 04b1
-04b2 04b3
-04b4 04b5
-04b6 04b7
-04b8 04b9
-04ba 04bb
-04bc 04bd
-04be 04bf
-04c1 04c2
-04c3 04c4
-04c7 04c8
-04cb 04cc
-04d0 04d1
-04d2 04d3
-04d4 04d5
-04d6 04d7
-04d8 04d9
-04da 04db
-04dc 04dd
-04de 04df
-04e0 04e1
-04e2 04e3
-04e4 04e5
-04e6 04e7
-04e8 04e9
-04ea 04eb
-04ec 04ed
-04ee 04ef
-04f0 04f1
-04f2 04f3
-04f4 04f5
-04f8 04f9
-0531 0556 0561
-1e00 1e01
-1e02 1e03
-1e04 1e05
-1e06 1e07
-1e08 1e09
-1e0a 1e0b
-1e0c 1e0d
-1e0e 1e0f
-1e10 1e11
-1e12 1e13
-1e14 1e15
-1e16 1e17
-1e18 1e19
-1e1a 1e1b
-1e1c 1e1d
-1e1e 1e1f
-1e20 1e21
-1e22 1e23
-1e24 1e25
-1e26 1e27
-1e28 1e29
-1e2a 1e2b
-1e2c 1e2d
-1e2e 1e2f
-1e30 1e31
-1e32 1e33
-1e34 1e35
-1e36 1e37
-1e38 1e39
-1e3a 1e3b
-1e3c 1e3d
-1e3e 1e3f
-1e40 1e41
-1e42 1e43
-1e44 1e45
-1e46 1e47
-1e48 1e49
-1e4a 1e4b
-1e4c 1e4d
-1e4e 1e4f
-1e50 1e51
-1e52 1e53
-1e54 1e55
-1e56 1e57
-1e58 1e59
-1e5a 1e5b
-1e5c 1e5d
-1e5e 1e5f
-1e60 1e61
-1e62 1e63
-1e64 1e65
-1e66 1e67
-1e68 1e69
-1e6a 1e6b
-1e6c 1e6d
-1e6e 1e6f
-1e70 1e71
-1e72 1e73
-1e74 1e75
-1e76 1e77
-1e78 1e79
-1e7a 1e7b
-1e7c 1e7d
-1e7e 1e7f
-1e80 1e81
-1e82 1e83
-1e84 1e85
-1e86 1e87
-1e88 1e89
-1e8a 1e8b
-1e8c 1e8d
-1e8e 1e8f
-1e90 1e91
-1e92 1e93
-1e94 1e95
-1ea0 1ea1
-1ea2 1ea3
-1ea4 1ea5
-1ea6 1ea7
-1ea8 1ea9
-1eaa 1eab
-1eac 1ead
-1eae 1eaf
-1eb0 1eb1
-1eb2 1eb3
-1eb4 1eb5
-1eb6 1eb7
-1eb8 1eb9
-1eba 1ebb
-1ebc 1ebd
-1ebe 1ebf
-1ec0 1ec1
-1ec2 1ec3
-1ec4 1ec5
-1ec6 1ec7
-1ec8 1ec9
-1eca 1ecb
-1ecc 1ecd
-1ece 1ecf
-1ed0 1ed1
-1ed2 1ed3
-1ed4 1ed5
-1ed6 1ed7
-1ed8 1ed9
-1eda 1edb
-1edc 1edd
-1ede 1edf
-1ee0 1ee1
-1ee2 1ee3
-1ee4 1ee5
-1ee6 1ee7
-1ee8 1ee9
-1eea 1eeb
-1eec 1eed
-1eee 1eef
-1ef0 1ef1
-1ef2 1ef3
-1ef4 1ef5
-1ef6 1ef7
-1ef8 1ef9
-1f08 1f0f 1f00
-1f18 1f1d 1f10
-1f28 1f2f 1f20
-1f38 1f3f 1f30
-1f48 1f4d 1f40
-1f59 1f51
-1f5b 1f53
-1f5d 1f55
-1f5f 1f57
-1f68 1f6f 1f60
-1f88 1f8f 1f80
-1f98 1f9f 1f90
-1fa8 1faf 1fa0
-1fb8 1fb9 1fb0
-1fba 1fbb 1f70
-1fbc 1fb3
-1fc8 1fcb 1f72
-1fcc 1fc3
-1fd8 1fd9 1fd0
-1fda 1fdb 1f76
-1fe8 1fe9 1fe0
-1fea 1feb 1f7a
-1fec 1fe5
-1ff8 1ff9 1f78
-1ffa 1ffb 1f7c
-1ffc 1ff3
-2126 03c9
-212a 006b
-212b 00e5
-2160 216f 2170
-24b6 24cf 24d0
-ff21 ff3a ff41
-END
diff --git a/contrib/perl5/lib/unicode/To/Title.pl b/contrib/perl5/lib/unicode/To/Title.pl
deleted file mode 100644
index cadeaf9..0000000
--- a/contrib/perl5/lib/unicode/To/Title.pl
+++ /dev/null
@@ -1,411 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0061 007a 0041
-00b5 039c
-00e0 00f6 00c0
-00f8 00fe 00d8
-00ff 0178
-0101 0100
-0103 0102
-0105 0104
-0107 0106
-0109 0108
-010b 010a
-010d 010c
-010f 010e
-0111 0110
-0113 0112
-0115 0114
-0117 0116
-0119 0118
-011b 011a
-011d 011c
-011f 011e
-0121 0120
-0123 0122
-0125 0124
-0127 0126
-0129 0128
-012b 012a
-012d 012c
-012f 012e
-0131 0049
-0133 0132
-0135 0134
-0137 0136
-013a 0139
-013c 013b
-013e 013d
-0140 013f
-0142 0141
-0144 0143
-0146 0145
-0148 0147
-014b 014a
-014d 014c
-014f 014e
-0151 0150
-0153 0152
-0155 0154
-0157 0156
-0159 0158
-015b 015a
-015d 015c
-015f 015e
-0161 0160
-0163 0162
-0165 0164
-0167 0166
-0169 0168
-016b 016a
-016d 016c
-016f 016e
-0171 0170
-0173 0172
-0175 0174
-0177 0176
-017a 0179
-017c 017b
-017e 017d
-017f 0053
-0183 0182
-0185 0184
-0188 0187
-018c 018b
-0192 0191
-0195 01f6
-0199 0198
-01a1 01a0
-01a3 01a2
-01a5 01a4
-01a8 01a7
-01ad 01ac
-01b0 01af
-01b4 01b3
-01b6 01b5
-01b9 01b8
-01bd 01bc
-01bf 01f7
-01c4 01c5
-01c6 01c5
-01c7 01c8
-01c9 01c8
-01ca 01cb
-01cc 01cb
-01ce 01cd
-01d0 01cf
-01d2 01d1
-01d4 01d3
-01d6 01d5
-01d8 01d7
-01da 01d9
-01dc 01db
-01dd 018e
-01df 01de
-01e1 01e0
-01e3 01e2
-01e5 01e4
-01e7 01e6
-01e9 01e8
-01eb 01ea
-01ed 01ec
-01ef 01ee
-01f1 01f2
-01f3 01f2
-01f5 01f4
-01f9 01f8
-01fb 01fa
-01fd 01fc
-01ff 01fe
-0201 0200
-0203 0202
-0205 0204
-0207 0206
-0209 0208
-020b 020a
-020d 020c
-020f 020e
-0211 0210
-0213 0212
-0215 0214
-0217 0216
-0219 0218
-021b 021a
-021d 021c
-021f 021e
-0223 0222
-0225 0224
-0227 0226
-0229 0228
-022b 022a
-022d 022c
-022f 022e
-0231 0230
-0233 0232
-0253 0181
-0254 0186
-0256 0257 0189
-0259 018f
-025b 0190
-0260 0193
-0263 0194
-0268 0197
-0269 0196
-026f 019c
-0272 019d
-0275 019f
-0280 01a6
-0283 01a9
-0288 01ae
-028a 028b 01b1
-0292 01b7
-0345 0399
-03ac 0386
-03ad 03af 0388
-03b1 03c1 0391
-03c2 03a3
-03c3 03cb 03a3
-03cc 038c
-03cd 03ce 038e
-03d0 0392
-03d1 0398
-03d5 03a6
-03d6 03a0
-03db 03da
-03dd 03dc
-03df 03de
-03e1 03e0
-03e3 03e2
-03e5 03e4
-03e7 03e6
-03e9 03e8
-03eb 03ea
-03ed 03ec
-03ef 03ee
-03f0 039a
-03f1 03a1
-03f2 03a3
-0430 044f 0410
-0450 045f 0400
-0461 0460
-0463 0462
-0465 0464
-0467 0466
-0469 0468
-046b 046a
-046d 046c
-046f 046e
-0471 0470
-0473 0472
-0475 0474
-0477 0476
-0479 0478
-047b 047a
-047d 047c
-047f 047e
-0481 0480
-048d 048c
-048f 048e
-0491 0490
-0493 0492
-0495 0494
-0497 0496
-0499 0498
-049b 049a
-049d 049c
-049f 049e
-04a1 04a0
-04a3 04a2
-04a5 04a4
-04a7 04a6
-04a9 04a8
-04ab 04aa
-04ad 04ac
-04af 04ae
-04b1 04b0
-04b3 04b2
-04b5 04b4
-04b7 04b6
-04b9 04b8
-04bb 04ba
-04bd 04bc
-04bf 04be
-04c2 04c1
-04c4 04c3
-04c8 04c7
-04cc 04cb
-04d1 04d0
-04d3 04d2
-04d5 04d4
-04d7 04d6
-04d9 04d8
-04db 04da
-04dd 04dc
-04df 04de
-04e1 04e0
-04e3 04e2
-04e5 04e4
-04e7 04e6
-04e9 04e8
-04eb 04ea
-04ed 04ec
-04ef 04ee
-04f1 04f0
-04f3 04f2
-04f5 04f4
-04f9 04f8
-0561 0586 0531
-1e01 1e00
-1e03 1e02
-1e05 1e04
-1e07 1e06
-1e09 1e08
-1e0b 1e0a
-1e0d 1e0c
-1e0f 1e0e
-1e11 1e10
-1e13 1e12
-1e15 1e14
-1e17 1e16
-1e19 1e18
-1e1b 1e1a
-1e1d 1e1c
-1e1f 1e1e
-1e21 1e20
-1e23 1e22
-1e25 1e24
-1e27 1e26
-1e29 1e28
-1e2b 1e2a
-1e2d 1e2c
-1e2f 1e2e
-1e31 1e30
-1e33 1e32
-1e35 1e34
-1e37 1e36
-1e39 1e38
-1e3b 1e3a
-1e3d 1e3c
-1e3f 1e3e
-1e41 1e40
-1e43 1e42
-1e45 1e44
-1e47 1e46
-1e49 1e48
-1e4b 1e4a
-1e4d 1e4c
-1e4f 1e4e
-1e51 1e50
-1e53 1e52
-1e55 1e54
-1e57 1e56
-1e59 1e58
-1e5b 1e5a
-1e5d 1e5c
-1e5f 1e5e
-1e61 1e60
-1e63 1e62
-1e65 1e64
-1e67 1e66
-1e69 1e68
-1e6b 1e6a
-1e6d 1e6c
-1e6f 1e6e
-1e71 1e70
-1e73 1e72
-1e75 1e74
-1e77 1e76
-1e79 1e78
-1e7b 1e7a
-1e7d 1e7c
-1e7f 1e7e
-1e81 1e80
-1e83 1e82
-1e85 1e84
-1e87 1e86
-1e89 1e88
-1e8b 1e8a
-1e8d 1e8c
-1e8f 1e8e
-1e91 1e90
-1e93 1e92
-1e95 1e94
-1e9b 1e60
-1ea1 1ea0
-1ea3 1ea2
-1ea5 1ea4
-1ea7 1ea6
-1ea9 1ea8
-1eab 1eaa
-1ead 1eac
-1eaf 1eae
-1eb1 1eb0
-1eb3 1eb2
-1eb5 1eb4
-1eb7 1eb6
-1eb9 1eb8
-1ebb 1eba
-1ebd 1ebc
-1ebf 1ebe
-1ec1 1ec0
-1ec3 1ec2
-1ec5 1ec4
-1ec7 1ec6
-1ec9 1ec8
-1ecb 1eca
-1ecd 1ecc
-1ecf 1ece
-1ed1 1ed0
-1ed3 1ed2
-1ed5 1ed4
-1ed7 1ed6
-1ed9 1ed8
-1edb 1eda
-1edd 1edc
-1edf 1ede
-1ee1 1ee0
-1ee3 1ee2
-1ee5 1ee4
-1ee7 1ee6
-1ee9 1ee8
-1eeb 1eea
-1eed 1eec
-1eef 1eee
-1ef1 1ef0
-1ef3 1ef2
-1ef5 1ef4
-1ef7 1ef6
-1ef9 1ef8
-1f00 1f07 1f08
-1f10 1f15 1f18
-1f20 1f27 1f28
-1f30 1f37 1f38
-1f40 1f45 1f48
-1f51 1f59
-1f53 1f5b
-1f55 1f5d
-1f57 1f5f
-1f60 1f67 1f68
-1f70 1f71 1fba
-1f72 1f75 1fc8
-1f76 1f77 1fda
-1f78 1f79 1ff8
-1f7a 1f7b 1fea
-1f7c 1f7d 1ffa
-1f80 1f87 1f88
-1f90 1f97 1f98
-1fa0 1fa7 1fa8
-1fb0 1fb1 1fb8
-1fb3 1fbc
-1fbe 0399
-1fc3 1fcc
-1fd0 1fd1 1fd8
-1fe0 1fe1 1fe8
-1fe5 1fec
-1ff3 1ffc
-2170 217f 2160
-24d0 24e9 24b6
-ff41 ff5a ff21
-END
diff --git a/contrib/perl5/lib/unicode/To/Upper.pl b/contrib/perl5/lib/unicode/To/Upper.pl
deleted file mode 100644
index d6c03d3..0000000
--- a/contrib/perl5/lib/unicode/To/Upper.pl
+++ /dev/null
@@ -1,411 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by mktables.PL from e.g. Unicode.301.
-# Any changes made here will be lost!
-return <<'END';
-0061 007a 0041
-00b5 039c
-00e0 00f6 00c0
-00f8 00fe 00d8
-00ff 0178
-0101 0100
-0103 0102
-0105 0104
-0107 0106
-0109 0108
-010b 010a
-010d 010c
-010f 010e
-0111 0110
-0113 0112
-0115 0114
-0117 0116
-0119 0118
-011b 011a
-011d 011c
-011f 011e
-0121 0120
-0123 0122
-0125 0124
-0127 0126
-0129 0128
-012b 012a
-012d 012c
-012f 012e
-0131 0049
-0133 0132
-0135 0134
-0137 0136
-013a 0139
-013c 013b
-013e 013d
-0140 013f
-0142 0141
-0144 0143
-0146 0145
-0148 0147
-014b 014a
-014d 014c
-014f 014e
-0151 0150
-0153 0152
-0155 0154
-0157 0156
-0159 0158
-015b 015a
-015d 015c
-015f 015e
-0161 0160
-0163 0162
-0165 0164
-0167 0166
-0169 0168
-016b 016a
-016d 016c
-016f 016e
-0171 0170
-0173 0172
-0175 0174
-0177 0176
-017a 0179
-017c 017b
-017e 017d
-017f 0053
-0183 0182
-0185 0184
-0188 0187
-018c 018b
-0192 0191
-0195 01f6
-0199 0198
-01a1 01a0
-01a3 01a2
-01a5 01a4
-01a8 01a7
-01ad 01ac
-01b0 01af
-01b4 01b3
-01b6 01b5
-01b9 01b8
-01bd 01bc
-01bf 01f7
-01c5 01c4
-01c6 01c4
-01c8 01c7
-01c9 01c7
-01cb 01ca
-01cc 01ca
-01ce 01cd
-01d0 01cf
-01d2 01d1
-01d4 01d3
-01d6 01d5
-01d8 01d7
-01da 01d9
-01dc 01db
-01dd 018e
-01df 01de
-01e1 01e0
-01e3 01e2
-01e5 01e4
-01e7 01e6
-01e9 01e8
-01eb 01ea
-01ed 01ec
-01ef 01ee
-01f2 01f1
-01f3 01f1
-01f5 01f4
-01f9 01f8
-01fb 01fa
-01fd 01fc
-01ff 01fe
-0201 0200
-0203 0202
-0205 0204
-0207 0206
-0209 0208
-020b 020a
-020d 020c
-020f 020e
-0211 0210
-0213 0212
-0215 0214
-0217 0216
-0219 0218
-021b 021a
-021d 021c
-021f 021e
-0223 0222
-0225 0224
-0227 0226
-0229 0228
-022b 022a
-022d 022c
-022f 022e
-0231 0230
-0233 0232
-0253 0181
-0254 0186
-0256 0257 0189
-0259 018f
-025b 0190
-0260 0193
-0263 0194
-0268 0197
-0269 0196
-026f 019c
-0272 019d
-0275 019f
-0280 01a6
-0283 01a9
-0288 01ae
-028a 028b 01b1
-0292 01b7
-0345 0399
-03ac 0386
-03ad 03af 0388
-03b1 03c1 0391
-03c2 03a3
-03c3 03cb 03a3
-03cc 038c
-03cd 03ce 038e
-03d0 0392
-03d1 0398
-03d5 03a6
-03d6 03a0
-03db 03da
-03dd 03dc
-03df 03de
-03e1 03e0
-03e3 03e2
-03e5 03e4
-03e7 03e6
-03e9 03e8
-03eb 03ea
-03ed 03ec
-03ef 03ee
-03f0 039a
-03f1 03a1
-03f2 03a3
-0430 044f 0410
-0450 045f 0400
-0461 0460
-0463 0462
-0465 0464
-0467 0466
-0469 0468
-046b 046a
-046d 046c
-046f 046e
-0471 0470
-0473 0472
-0475 0474
-0477 0476
-0479 0478
-047b 047a
-047d 047c
-047f 047e
-0481 0480
-048d 048c
-048f 048e
-0491 0490
-0493 0492
-0495 0494
-0497 0496
-0499 0498
-049b 049a
-049d 049c
-049f 049e
-04a1 04a0
-04a3 04a2
-04a5 04a4
-04a7 04a6
-04a9 04a8
-04ab 04aa
-04ad 04ac
-04af 04ae
-04b1 04b0
-04b3 04b2
-04b5 04b4
-04b7 04b6
-04b9 04b8
-04bb 04ba
-04bd 04bc
-04bf 04be
-04c2 04c1
-04c4 04c3
-04c8 04c7
-04cc 04cb
-04d1 04d0
-04d3 04d2
-04d5 04d4
-04d7 04d6
-04d9 04d8
-04db 04da
-04dd 04dc
-04df 04de
-04e1 04e0
-04e3 04e2
-04e5 04e4
-04e7 04e6
-04e9 04e8
-04eb 04ea
-04ed 04ec
-04ef 04ee
-04f1 04f0
-04f3 04f2
-04f5 04f4
-04f9 04f8
-0561 0586 0531
-1e01 1e00
-1e03 1e02
-1e05 1e04
-1e07 1e06
-1e09 1e08
-1e0b 1e0a
-1e0d 1e0c
-1e0f 1e0e
-1e11 1e10
-1e13 1e12
-1e15 1e14
-1e17 1e16
-1e19 1e18
-1e1b 1e1a
-1e1d 1e1c
-1e1f 1e1e
-1e21 1e20
-1e23 1e22
-1e25 1e24
-1e27 1e26
-1e29 1e28
-1e2b 1e2a
-1e2d 1e2c
-1e2f 1e2e
-1e31 1e30
-1e33 1e32
-1e35 1e34
-1e37 1e36
-1e39 1e38
-1e3b 1e3a
-1e3d 1e3c
-1e3f 1e3e
-1e41 1e40
-1e43 1e42
-1e45 1e44
-1e47 1e46
-1e49 1e48
-1e4b 1e4a
-1e4d 1e4c
-1e4f 1e4e
-1e51 1e50
-1e53 1e52
-1e55 1e54
-1e57 1e56
-1e59 1e58
-1e5b 1e5a
-1e5d 1e5c
-1e5f 1e5e
-1e61 1e60
-1e63 1e62
-1e65 1e64
-1e67 1e66
-1e69 1e68
-1e6b 1e6a
-1e6d 1e6c
-1e6f 1e6e
-1e71 1e70
-1e73 1e72
-1e75 1e74
-1e77 1e76
-1e79 1e78
-1e7b 1e7a
-1e7d 1e7c
-1e7f 1e7e
-1e81 1e80
-1e83 1e82
-1e85 1e84
-1e87 1e86
-1e89 1e88
-1e8b 1e8a
-1e8d 1e8c
-1e8f 1e8e
-1e91 1e90
-1e93 1e92
-1e95 1e94
-1e9b 1e60
-1ea1 1ea0
-1ea3 1ea2
-1ea5 1ea4
-1ea7 1ea6
-1ea9 1ea8
-1eab 1eaa
-1ead 1eac
-1eaf 1eae
-1eb1 1eb0
-1eb3 1eb2
-1eb5 1eb4
-1eb7 1eb6
-1eb9 1eb8
-1ebb 1eba
-1ebd 1ebc
-1ebf 1ebe
-1ec1 1ec0
-1ec3 1ec2
-1ec5 1ec4
-1ec7 1ec6
-1ec9 1ec8
-1ecb 1eca
-1ecd 1ecc
-1ecf 1ece
-1ed1 1ed0
-1ed3 1ed2
-1ed5 1ed4
-1ed7 1ed6
-1ed9 1ed8
-1edb 1eda
-1edd 1edc
-1edf 1ede
-1ee1 1ee0
-1ee3 1ee2
-1ee5 1ee4
-1ee7 1ee6
-1ee9 1ee8
-1eeb 1eea
-1eed 1eec
-1eef 1eee
-1ef1 1ef0
-1ef3 1ef2
-1ef5 1ef4
-1ef7 1ef6
-1ef9 1ef8
-1f00 1f07 1f08
-1f10 1f15 1f18
-1f20 1f27 1f28
-1f30 1f37 1f38
-1f40 1f45 1f48
-1f51 1f59
-1f53 1f5b
-1f55 1f5d
-1f57 1f5f
-1f60 1f67 1f68
-1f70 1f71 1fba
-1f72 1f75 1fc8
-1f76 1f77 1fda
-1f78 1f79 1ff8
-1f7a 1f7b 1fea
-1f7c 1f7d 1ffa
-1f80 1f87 1f88
-1f90 1f97 1f98
-1fa0 1fa7 1fa8
-1fb0 1fb1 1fb8
-1fb3 1fbc
-1fbe 0399
-1fc3 1fcc
-1fd0 1fd1 1fd8
-1fe0 1fe1 1fe8
-1fe5 1fec
-1ff3 1ffc
-2170 217f 2160
-24d0 24e9 24b6
-ff41 ff5a ff21
-END
diff --git a/contrib/perl5/lib/unicode/UCD301.html b/contrib/perl5/lib/unicode/UCD301.html
deleted file mode 100644
index 284349e..0000000
--- a/contrib/perl5/lib/unicode/UCD301.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-
- "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<link rel="stylesheet" href="http://www.unicode.org/unicode.css" type="text/css">
-<title>Unicode Character Database</title>
-</head>
-
-<body>
-
-<h1>UNICODE CHARACTER DATABASE<br>
-Version 3.0.1</h1>
-<table border="1" cellspacing="2" cellpadding="0" height="87" width="100%">
- <tr>
- <td valign="TOP" width="144">Revision</td>
- <td valign="TOP">3.0.1</td>
- </tr>
- <tr>
- <td valign="TOP" width="144">Authors</td>
- <td valign="TOP">Mark Davis and Ken Whistler</td>
- </tr>
- <tr>
- <td valign="TOP" width="144">Date</td>
- <td valign="TOP">2000-08-17</td>
- </tr>
- <tr>
- <td valign="TOP" width="144">This Version</td>
- <td valign="TOP"><a
- href="http://www.unicode.org/Public/3.0-Update1/UnicodeCharacterDatabase-3.0.1.html">http://www.unicode.org/Public/3.0-Update1/UnicodeCharacterDatabase-3.0.1.html</a></td>
- </tr>
- <tr>
- <td valign="TOP" width="144">Previous Version</td>
- <td valign="TOP"><a
- href="http://www.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html">http://www.unicode.org/Public/3.0-Update/UnicodeCharacterDatabase-3.0.0.html</a></td>
- </tr>
- <tr>
- <td valign="TOP" width="144">Latest Version</td>
- <td valign="TOP"><a
- href="http://www.unicode.org/Public/UNIDATA/UnicodeCharacterDatabase.html">http://www.unicode.org/Public/UNIDATA/UnicodeCharacterDatabase.html</a></td>
- </tr>
-</table>
-<p align="center">Copyright © 1995-2000 Unicode, Inc. All Rights reserved.</p>
-<h2>Disclaimer</h2>
-<p>The Unicode Character Database is provided as is by Unicode, Inc. No claims
-are made as to fitness for any particular purpose. No warranties of any kind are
-expressed or implied. The recipient agrees to determine applicability of
-information provided. If this file has been purchased on magnetic or optical
-media from Unicode, Inc., the sole remedy for any claim will be exchange of
-defective media within 90 days of receipt.</p>
-<p>This disclaimer is applicable for all other data files accompanying the
-Unicode Character Database, some of which have been compiled by the Unicode
-Consortium, and some of which have been supplied by other sources.</p>
-<h2>Limitations on Rights to Redistribute This Data</h2>
-<p>Recipient is granted the right to make copies in any form for internal
-distribution and to freely use the information supplied in the creation of
-products supporting the Unicode<sup>TM</sup> Standard. The files in the Unicode
-Character Database can be redistributed to third parties or other organizations
-(whether for profit or not) as long as this notice and the disclaimer notice are
-retained. Information can be extracted from these files and used in
-documentation or programs, as long as there is an accompanying notice indicating
-the source.</p>
-<h2>Introduction</h2>
-<p>The Unicode Character Database is a set of files that define the Unicode
-character properties and internal mappings. For more information about character
-properties and mappings, see <i><a
-href="http://www.unicode.org/unicode/uni2book/u2.html">The Unicode Standard</a></i>.</p>
-<p>The Unicode Character Database has been updated to reflect Version 3.0 of the
-Unicode Standard, with many characters added to those published in Version 2.0.
-A number of corrections have also been made to case mappings or other errors in
-the database noted since the publication of Version 2.0. Normative bidirectional
-properties have also been modified to reflect decisions of the Unicode Technical
-Committee.</p>
-<p>For more information on versions of the Unicode Standard and how to reference
-them, see <a href="http://www.unicode.org/unicode/standard/versions/">http://www.unicode.org/unicode/standard/versions/</a>.</p>
-<h2>Conformance</h2>
-<p>Character properties may be either normative or informative. <i>Normative</i>
-means that implementations that claim conformance to the Unicode Standard (at a
-particular version) and which make use of a particular property or field must
-follow the specifications of the standard for that property or field in order to
-be conformant. The term <i>normative</i> when applied to a property or field of
-the Unicode Character Database, does <i>not</i> mean that the value of that
-field will never change. Corrections and extensions to the standard in the
-future may require minor changes to normative values, even though the Unicode
-Technical Committee strives to minimize such changes. An<i> informative </i>property
-or field is strongly recommended, but a conformant implementation is free to use
-or change such values as it may require while still being conformant to the
-standard. Particular implementations may choose to override the properties and
-mappings that are not normative. In that case, it is up to the implementer to
-establish a protocol to convey that information.</p>
-<h2>Files</h2>
-<p>The following summarizes the files in the Unicode Character Database. &nbsp;For
-more information about these files, see the referenced technical report(s) or
-section of Unicode Standard, Version 3.0.</p>
-<p><b>UnicodeData.txt (Chapter 4, <a
-href="http://www.unicode.org/unicode/reports/tr21/">UTR #21: Case Mappings</a>, <a
-href="http://www.unicode.org/unicode/reports/tr15/">UAX #15 Unicode Normalization
-Forms</a>)</b>
-<ul>
- <li>The main file in the Unicode Character Database.</li>
- <li>For detailed information on the format, see <a href="UnicodeData.html">UnicodeData.html</a>.
- This file also characterizes which properties are normative and which are
- informative.</li>
-</ul>
-<p><b>PropList.txt (Chapter 4)</b>
-<ul>
- <li>Additional informative properties list: <i>Alphabetic, Ideographic,</i>
- and <i>Mathematical</i>, among others.</li>
-</ul>
-<p><b>SpecialCasing.txt (Chapter 4, <a
-href="http://www.unicode.org/unicode/reports/tr21/">UTR #21: Case Mappings</a>)</b>
-<ul>
- <li>List of informative special casing properties, including one-to-many
- mappings such as SHARP S =&gt; &quot;SS&quot;, and locale-specific mappings,
- such as for Turkish <i>dotless i</i>.</li>
-</ul>
-<p><b>Blocks.txt (Chapter 14)</b>
-<ul>
- <li>List of normative block names.</li>
-</ul>
-<p><b>Jamo.txt (Chapter 4)</b>
-<ul>
- <li>List of normative Jamo short names, used in deriving HANGUL SYLLABLE names
- algorithmically.</li>
-</ul>
-<p><b>ArabicShaping.txt (Section 8.2)</b>
-<ul>
- <li>Basic Arabic and Syriac character shaping properties, such as initial,
- medial and final shapes. These properties are normative for minimal shaping
- of Arabic and Syriac.</li>
-</ul>
-<p><b>NamesList.txt (Chapter 14)</b>
-<ul>
- <li>This file duplicates some of the material in the UnicodeData file, and
- adds informative annotations uses in the character charts, as printed in the
- Unicode Standard.</li>
- <li><b>Note: </b>The information in NamesList.txt and Index.txt files matches
- the appropriate version of the book. Changes in the Unicode Character
- Database since then may not be reflected in these files, since they are
- primarily of archival interest.</li>
-</ul>
-<p><b>Index.txt (Chapter 14)</b>
-<ul>
- <li>Informative index to Unicode characters, as printed in the Unicode
- Standard</li>
- <li><b>Note: </b>The information in NamesList.txt and Index.txt files matches
- the appropriate version of the book. Changes in the Unicode Character
- Database since then may not be reflected in these files, since they are
- primarily of archival interest.</li>
-</ul>
-<p><b>CompositionExclusions.txt (<a
-href="http://www.unicode.org/unicode/reports/tr15/">UAX #15 Unicode Normalization
-Forms</a>)</b>
-<ul>
- <li>Normative properties for normalization.</li>
-</ul>
-<p><b>LineBreak.txt (<a href="http://www.unicode.org/unicode/reports/tr14/">UAX
-#14: Line Breaking Properties</a>)</b>
-<ul>
- <li>Normative and informative properties for line breaking. To see which
- properties are informative and which are normative, consult UAX #14.</li>
-</ul>
-<p><b>EastAsianWidth.txt (<a href="http://www.unicode.org/unicode/reports/tr11/">UAX
-#11: East Asian Character Width</a>)</b>
-<ul>
- <li>Informative properties for determining the choice of wide vs. narrow
- glyphs in East Asian contexts.</li>
-</ul>
-<p><b>BidiMirroring.txt</b><b> (<a
-href="http://www.unicode.org/unicode/reports/tr9/">UAX #9:&nbsp;The
-Bidirectional Algorithm</a>)</b></p>
-<ul>
- <li>Informative properties for substituting characters in an implementation of
- bidirectional mirroring.</li>
-</ul>
-<p><b>CaseFolding.txt (<a href="http://www.unicode.org/unicode/reports/tr21/">UTR
-#21: Case Mappings</a>)</b></p>
-<ul>
- <li>Informative file mapping characters to their case-folded form.</li>
-</ul>
-<p><b>NormalizationTest.txt (<a
-href="http://www.unicode.org/unicode/reports/tr15/">UAX #15 Unicode Normalization
-Forms</a>)</b></p>
-<ul>
- <li>Normative test file for conformance to Unicode Normalization Forms.</li>
-</ul>
-<p><b>diffXvY.txt</b>
-<ul>
- <li>Mechanically-generated informative files containing accumulated
- differences between successive versions of UnicodeData.txt</li>
-</ul>
-
-</body>
-
-</html>
diff --git a/contrib/perl5/lib/unicode/UCDFF301.html b/contrib/perl5/lib/unicode/UCDFF301.html
deleted file mode 100644
index a8fbe32..0000000
--- a/contrib/perl5/lib/unicode/UCDFF301.html
+++ /dev/null
@@ -1,1025 +0,0 @@
-<html>
-
-<head>
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<link rel="stylesheet" href="http://www.unicode.org/unicode.css" type="text/css">
-<title>UnicodeData File Format</title>
-</head>
-
-<body>
-
-<h1>UnicodeData File Format<br>
-Version 3.0.1</h1>
-<table border="1" cellspacing="2" cellpadding="0" height="87" width="100%">
- <tr>
- <td valign="TOP" width="144">Revision</td>
- <td valign="TOP">3.0.1</td>
- </tr>
- <tr>
- <td valign="TOP" width="144">Authors</td>
- <td valign="TOP">Mark Davis and Ken Whistler</td>
- </tr>
- <tr>
- <td valign="TOP" width="144">Date</td>
- <td valign="TOP">2000-08-17</td>
- </tr>
- <tr>
- <td valign="TOP" width="144">This Version</td>
- <td valign="TOP"><a
- href="http://www.unicode.org/Public/3.0-Update1/UnicodeData-3.0.1.html">http://www.unicode.org/Public/3.0-Update1/UnicodeData-3.0.1.html</a></td>
- </tr>
- <tr>
- <td valign="TOP" width="144">Previous Version</td>
- <td valign="TOP"><a
- href="http://www.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html">http://www.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html</a></td>
- </tr>
- <tr>
- <td valign="TOP" width="144">Latest Version</td>
- <td valign="TOP"><a
- href="http://www.unicode.org/Public/UNIDATA/UnicodeData.html">http://www.unicode.org/Public/UNIDATA/UnicodeData.html</a></td>
- </tr>
-</table>
-<p align="center">Copyright © 1995-2000 Unicode, Inc. All Rights reserved.<br>
-<i>For more information, including Disclamer and Limitations, see <a
-href="UnicodeCharacterDatabase-3.0.1.html">UnicodeCharacterDatabase-3.0.1.html</a></i></p>
-<p>This document describes the format of the UnicodeData.txt file, which is one
-of the files in the Unicode Character Database. The document is divided into the
-following sections:
-<ul>
- <li><a href="#Field Formats">Field Formats</a>
- <ul>
- <li><a href="#General Category">General Category</a></li>
- <li><a href="#Bidirectional Category">Bidirectional Category</a></li>
- <li><a href="#Character Decomposition">Character Decomposition Mapping</a></li>
- <li><a href="#Canonical Combining Classes">Canonical Combining Classes</a></li>
- <li><a href="#Decompositions and Normalization">Decompositions and
- Normalization</a></li>
- <li><a href="#Case Mappings">Case Mappings</a></li>
- </ul>
- </li>
- <li><a href="#Property Invariants">Property Invariants</a></li>
- <li><a href="#Modification History">Modification History</a></li>
-</ul>
-<p><b>Warning: </b>the information in this file does not completely describe the
-use and interpretation of Unicode character properties and behavior. It must be
-used in conjunction with the data in the other files in the <a
-href="UnicodeCharacterDatabase-3.0.1.html">Unicode Character Database</a>, and
-relies on the notation and definitions supplied in <i><a
-href="http://www.unicode.org/unicode/standard/versions/Unicode3.0.html">The
-Unicode Standard</a></i>. All chapter references are to Version 3.0 of the
-standard.</p>
-<h2><a name="Field Formats"></a>Field Formats</h2>
-<p>The file consists of lines containing fields separated by semicolons. Each
-line represents the data for one encoded character in the Unicode Standard.
-Every encoded character has a data entry, with the exception of certain special
-ranges, as detailed below.
-<ul>
- <li>There are nine special ranges of characters that are represented only by
- their start and end characters, since the properties in the file are
- uniform, except for code values (which are all sequential and assigned).</li>
- <li>The names of CJK ideograph characters and the names and decompositions of
- Hangul syllable characters are algorithmically derivable. (See the Unicode
- Standard and <a href="http://www.unicode.org/unicode/reports/tr15/">Unicode
- Standard Annex #15</a> for more information).</li>
- <li>Surrogate code values and private use characters have no names.</li>
- <li>The Private Use character outside of the BMP (U+F0000..U+FFFFD,
- U+100000..U+10FFFD) are listed as distinct ranges. These correspond to surrogate pairs
- where the first surrogate is in the High Surrogate Private Use section.</li>
-</ul>
-<p>The exact ranges represented by start and end characters are:
-<ul>
- <li>CJK Ideographs Extension A (U+3400 - U+4DB5)</li>
- <li>CJK Ideographs (U+4E00 - U+9FA5)</li>
- <li>Hangul Syllables (U+AC00 - U+D7A3)</li>
- <li>Non-Private Use High Surrogates (U+D800 - U+DB7F)</li>
- <li>Private Use High Surrogates (U+DB80 - U+DBFF)</li>
- <li>Low Surrogates (U+DC00 - U+DFFF)</li>
- <li>The Private Use Area (U+E000 - U+F8FF)</li>
- <li>Plane 15 Private Use Area (U+F0000 - U+FFFFD)</li>
- <li>Plane 16 Private Use Area (U+100000 - U+10FFFD)</li>
-</ul>
-<p>The following table describes the format and meaning of each field in a data
-entry in the UnicodeData file. Fields which contain normative information are so
-indicated.</p>
-<table border="1" cellspacing="2" cellpadding="2">
- <tr>
- <th valign="top" align="LEFT">
- <p align="LEFT">Field</th>
- <th valign="top" align="LEFT">
- <p align="LEFT">Name</th>
- <th valign="top" align="LEFT">
- <p align="LEFT">Status</th>
- <th valign="top" align="LEFT">
- <p align="LEFT">Explanation</th>
- </tr>
- <tr>
- <th valign="top">0</th>
- <td valign="top">Code value</td>
- <td valign="top">normative</td>
- <td valign="top">Code value. For characters in the range U+0000..U+FFFD
- the code value uses a 4-digit hexadecimal format; for characters in the
- range U+10000..U+FFFFD the code value uses a 5-digit hexadecimal format;
- and for characters in the range U+100000..U+10FFFD the code value uses a
- 6-digit hexadecimal format.</td>
- </tr>
- <tr>
- <th valign="top">1</th>
- <td valign="top">Character name</td>
- <td valign="top">normative</td>
- <td valign="top">These names match exactly the names published in Chapter 14
- of the Unicode Standard, Version 3.0.</td>
- </tr>
- <tr>
- <th valign="top">2</th>
- <td valign="top"><a href="#General Category">General Category</a></td>
- <td valign="top">normative / informative<br>
- (see below)</td>
- <td valign="top">This is a useful breakdown into various &quot;character
- types&quot; which can be used as a default categorization in
- implementations. See below for a brief explanation.</td>
- </tr>
- <tr>
- <th valign="top">3</th>
- <td valign="top"><a href="#Canonical Combining Classes">Canonical Combining
- Classes</a></td>
- <td valign="top">normative</td>
- <td valign="top">The classes used for the Canonical Ordering Algorithm in
- the Unicode Standard. These classes are also printed in Chapter 4 of the
- Unicode Standard.</td>
- </tr>
- <tr>
- <th valign="top">4</th>
- <td valign="top"><a href="#Bidirectional Category">Bidirectional Category</a></td>
- <td valign="top">normative</td>
- <td valign="top">See the list below for an explanation of the abbreviations
- used in this field. These are the categories required by the Bidirectional
- Behavior Algorithm in the Unicode Standard. These categories are
- summarized in Chapter 3 of the Unicode Standard.</td>
- </tr>
- <tr>
- <th valign="top">5</th>
- <td valign="top"><a href="#Character Decomposition">Character Decomposition
- Mapping</a></td>
- <td valign="top">normative</td>
- <td valign="top">In the Unicode Standard, not all of the mappings are full
- (maximal) decompositions. Recursive application of look-up for
- decompositions will, in all cases, lead to a maximal decomposition. The
- decomposition mappings match exactly the decomposition mappings published
- with the character names in the Unicode Standard.</td>
- </tr>
- <tr>
- <th valign="top">6</th>
- <td valign="top">Decimal digit value</td>
- <td valign="top">normative</td>
- <td valign="top">This is a numeric field. If the character has the decimal
- digit property, as specified in Chapter 4 of the Unicode Standard, the
- value of that digit is represented with an integer value in this field</td>
- </tr>
- <tr>
- <th valign="top">7</th>
- <td valign="top">Digit value</td>
- <td valign="top">normative</td>
- <td valign="top">This is a numeric field. If the character represents a
- digit, not necessarily a decimal digit, the value is here. This covers
- digits which do not form decimal radix forms, such as the compatibility
- superscript digits</td>
- </tr>
- <tr>
- <th valign="top">8</th>
- <td valign="top">Numeric value</td>
- <td valign="top">normative</td>
- <td valign="top">This is a numeric field. If the character has the numeric
- property, as specified in Chapter 4 of the Unicode Standard, the value of
- that character is represented with an integer or rational number in this
- field. This includes fractions as, e.g., &quot;1/5&quot; for U+2155 VULGAR
- FRACTION ONE FIFTH Also included are numerical values for compatibility
- characters such as circled numbers.</td>
- </tr>
- <tr>
- <th valign="top">9</th>
- <td valign="top">Mirrored</td>
- <td valign="top">normative</td>
- <td valign="top">If the character has been identified as a
- &quot;mirrored&quot; character in bidirectional text, this field has the
- value &quot;Y&quot;; otherwise &quot;N&quot;. The list of mirrored
- characters is also printed in Chapter 4 of the Unicode Standard.</td>
- </tr>
- <tr>
- <th valign="top">10</th>
- <td valign="top">Unicode 1.0 Name</td>
- <td valign="top">informative</td>
- <td valign="top">This is the old name as published in Unicode 1.0. This name
- is only provided when it is significantly different from the Unicode 3.0
- name for the character.</td>
- </tr>
- <tr>
- <th valign="top">11</th>
- <td valign="top">10646 comment field</td>
- <td valign="top">informative</td>
- <td valign="top">This is the ISO 10646 comment field. It appears in parentheses
- in the 10646 names list, or contains an asterisk to mark an Annex P note.</td>
- </tr>
- <tr>
- <th valign="top">12</th>
- <td valign="top"><a href="#Case Mappings">Uppercase Mapping</a></td>
- <td valign="top">informative</td>
- <td valign="top">Upper case equivalent mapping. If a character is part of an
- alphabet with case distinctions, and has an upper case equivalent, then
- the upper case equivalent is in this field. See the explanation below on
- case distinctions. These mappings are always one-to-one, not one-to-many
- or many-to-one. This field is informative.</td>
- </tr>
- <tr>
- <th valign="top">13</th>
- <td valign="top"><a href="#Case Mappings">Lowercase Mapping</a></td>
- <td valign="top">informative</td>
- <td valign="top">Similar to Uppercase mapping</td>
- </tr>
- <tr>
- <th valign="top">14</th>
- <td valign="top"><a href="#Case Mappings">Titlecase Mapping</a></td>
- <td valign="top">informative</td>
- <td valign="top">Similar to Uppercase mapping</td>
- </tr>
-</table>
-<h3><a name="General Category"></a>General Category</h3>
-<p>The values in this field are abbreviations for the following. Some of the
-values are normative, and some are informative. For more information, see the
-Unicode Standard.</p>
-<p><b>Note:</b> the standard does not assign information to control characters
-(except for certain cases in the Bidirectional Algorithm). Implementations will
-generally also assign categories to certain control characters, notably CR and
-LF, according to platform conventions.</p>
-<h4>Normative Categories</h4>
-<table border="0" cellspacing="2" cellpadding="0">
- <tr>
- <th>
- <p align="LEFT">Abbr.</th>
- <th>
- <p align="LEFT">Description</th>
- </tr>
- <tr>
- <td align="CENTER">Lu</td>
- <td>Letter, Uppercase</td>
- </tr>
- <tr>
- <td align="CENTER">Ll</td>
- <td>Letter, Lowercase</td>
- </tr>
- <tr>
- <td align="CENTER">Lt</td>
- <td>Letter, Titlecase</td>
- </tr>
- <tr>
- <td align="CENTER">Mn</td>
- <td>Mark, Non-Spacing</td>
- </tr>
- <tr>
- <td align="CENTER">Mc</td>
- <td>Mark, Spacing Combining</td>
- </tr>
- <tr>
- <td align="CENTER">Me</td>
- <td>Mark, Enclosing</td>
- </tr>
- <tr>
- <td align="CENTER">Nd</td>
- <td>Number, Decimal Digit</td>
- </tr>
- <tr>
- <td align="CENTER">Nl</td>
- <td>Number, Letter</td>
- </tr>
- <tr>
- <td align="CENTER">No</td>
- <td>Number, Other</td>
- </tr>
- <tr>
- <td align="CENTER">Zs</td>
- <td>Separator, Space</td>
- </tr>
- <tr>
- <td align="CENTER">Zl</td>
- <td>Separator, Line</td>
- </tr>
- <tr>
- <td align="CENTER">Zp</td>
- <td>Separator, Paragraph</td>
- </tr>
- <tr>
- <td align="CENTER">Cc</td>
- <td>Other, Control</td>
- </tr>
- <tr>
- <td align="CENTER">Cf</td>
- <td>Other, Format</td>
- </tr>
- <tr>
- <td align="CENTER">Cs</td>
- <td>Other, Surrogate</td>
- </tr>
- <tr>
- <td align="CENTER">Co</td>
- <td>Other, Private Use</td>
- </tr>
- <tr>
- <td align="CENTER">Cn</td>
- <td>Other, Not Assigned (no characters in the file have this property)</td>
- </tr>
-</table>
-<h4>Informative Categories</h4>
-<table border="0" cellspacing="2" cellpadding="0">
- <tr>
- <th>
- <p align="LEFT">Abbr.</th>
- <th>
- <p align="LEFT">Description</th>
- </tr>
- <tr>
- <td align="CENTER">Lm</td>
- <td>Letter, Modifier</td>
- </tr>
- <tr>
- <td align="CENTER">Lo</td>
- <td>Letter, Other</td>
- </tr>
- <tr>
- <td align="CENTER">Pc</td>
- <td>Punctuation, Connector</td>
- </tr>
- <tr>
- <td align="CENTER">Pd</td>
- <td>Punctuation, Dash</td>
- </tr>
- <tr>
- <td align="CENTER">Ps</td>
- <td>Punctuation, Open</td>
- </tr>
- <tr>
- <td align="CENTER">Pe</td>
- <td>Punctuation, Close</td>
- </tr>
- <tr>
- <td align="CENTER">Pi</td>
- <td>Punctuation, Initial quote (may behave like Ps or Pe depending on usage)</td>
- </tr>
- <tr>
- <td align="CENTER">Pf</td>
- <td>Punctuation, Final quote (may behave like Ps or Pe depending on usage)</td>
- </tr>
- <tr>
- <td align="CENTER">Po</td>
- <td>Punctuation, Other</td>
- </tr>
- <tr>
- <td align="CENTER">Sm</td>
- <td>Symbol, Math</td>
- </tr>
- <tr>
- <td align="CENTER">Sc</td>
- <td>Symbol, Currency</td>
- </tr>
- <tr>
- <td align="CENTER">Sk</td>
- <td>Symbol, Modifier</td>
- </tr>
- <tr>
- <td align="CENTER">So</td>
- <td>Symbol, Other</td>
- </tr>
-</table>
-<h3><a name="Bidirectional Category"></a>Bidirectional Category</h3>
-<p>Please refer to Chapter 3 for an explanation of the algorithm for
-Bidirectional Behavior and an explanation of the significance of these
-categories. An up-to-date version can be found on <a
-href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard Annex #9:
-The Bidirectional Algorithm</a>. These values are normative.</p>
-<table border="0" cellpadding="2">
- <tr>
- <th valign="TOP" align="LEFT">
- <p align="LEFT">Type</th>
- <th valign="TOP" align="LEFT">
- <p align="LEFT">Description</th>
- </tr>
- <tr>
- <td valign="TOP"><b>L</b></td>
- <td valign="TOP">Left-to-Right</td>
- </tr>
- <tr>
- <td valign="TOP"><b>LRE</b></td>
- <td valign="TOP">Left-to-Right Embedding</td>
- </tr>
- <tr>
- <td valign="TOP"><b>LRO</b></td>
- <td valign="TOP">Left-to-Right Override</td>
- </tr>
- <tr>
- <td valign="TOP"><b>R</b></td>
- <td valign="TOP">Right-to-Left</td>
- </tr>
- <tr>
- <td valign="TOP"><b>AL</b></td>
- <td valign="TOP">Right-to-Left Arabic</td>
- </tr>
- <tr>
- <td valign="TOP"><b>RLE</b></td>
- <td valign="TOP">Right-to-Left Embedding</td>
- </tr>
- <tr>
- <td valign="TOP"><b>RLO</b></td>
- <td valign="TOP">Right-to-Left Override</td>
- </tr>
- <tr>
- <td valign="TOP"><b>PDF</b></td>
- <td valign="TOP">Pop Directional Format</td>
- </tr>
- <tr>
- <td valign="TOP"><b>EN</b></td>
- <td valign="TOP">European Number</td>
- </tr>
- <tr>
- <td valign="TOP"><b>ES</b></td>
- <td valign="TOP">European Number Separator</td>
- </tr>
- <tr>
- <td valign="TOP"><b>ET</b></td>
- <td valign="TOP">European Number Terminator</td>
- </tr>
- <tr>
- <td valign="TOP"><b>AN</b></td>
- <td valign="TOP">Arabic Number</td>
- </tr>
- <tr>
- <td valign="TOP"><b>CS</b></td>
- <td valign="TOP">Common Number Separator</td>
- </tr>
- <tr>
- <td valign="TOP"><b>NSM</b></td>
- <td valign="TOP">Non-Spacing Mark</td>
- </tr>
- <tr>
- <td valign="TOP"><b>BN</b></td>
- <td valign="TOP">Boundary Neutral</td>
- </tr>
- <tr>
- <td valign="TOP"><b>B</b></td>
- <td valign="TOP">Paragraph Separator</td>
- </tr>
- <tr>
- <td valign="TOP"><b>S</b></td>
- <td valign="TOP">Segment Separator</td>
- </tr>
- <tr>
- <td valign="TOP"><b>WS</b></td>
- <td valign="TOP">Whitespace</td>
- </tr>
- <tr>
- <td valign="TOP"><b>ON</b></td>
- <td valign="TOP">Other Neutrals</td>
- </tr>
-</table>
-<h3><a name="Character Decomposition"></a>Character Decomposition Mapping</h3>
-<p>The decomposition is a normative property of a character. The tags supplied
-with certain decomposition mappings generally indicate formatting information.
-Where no such tag is given, the mapping is designated as canonical. Conversely,
-the presence of a formatting tag also indicates that the mapping is a
-compatibility mapping and not a canonical mapping. In the absence of other
-formatting information in a compatibility mapping, the tag is used to
-distinguish it from canonical mappings.</p>
-<p>In some instances a canonical mapping or a compatibility mapping may consist
-of a single character. For a canonical mapping, this indicates that the
-character is a canonical equivalent of another single character. For a
-compatibility mapping, this indicates that the character is a compatibility
-equivalent of another single character. The compatibility formatting tags used
-are:</p>
-<table border="0" cellspacing="2" cellpadding="0">
- <tr>
- <th>Tag</th>
- <th>
- <p align="LEFT">Description</th>
- </tr>
- <tr>
- <td align="CENTER">&lt;font&gt;&nbsp;&nbsp;</td>
- <td>A font variant (e.g. a blackletter form).</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;noBreak&gt;&nbsp;&nbsp;</td>
- <td>A no-break version of a space or hyphen.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;initial&gt;&nbsp;&nbsp;</td>
- <td>An initial presentation form (Arabic).</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;medial&gt;&nbsp;&nbsp;</td>
- <td>A medial presentation form (Arabic).</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;final&gt;&nbsp;&nbsp;</td>
- <td>A final presentation form (Arabic).</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;isolated&gt;&nbsp;&nbsp;</td>
- <td>An isolated presentation form (Arabic).</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;circle&gt;&nbsp;&nbsp;</td>
- <td>An encircled form.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;super&gt;&nbsp;&nbsp;</td>
- <td>A superscript form.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;sub&gt;&nbsp;&nbsp;</td>
- <td>A subscript form.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;vertical&gt;&nbsp;&nbsp;</td>
- <td>A vertical layout presentation form.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;wide&gt;&nbsp;&nbsp;</td>
- <td>A wide (or zenkaku) compatibility character.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;narrow&gt;&nbsp;&nbsp;</td>
- <td>A narrow (or hankaku) compatibility character.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;small&gt;&nbsp;&nbsp;</td>
- <td>A small variant form (CNS compatibility).</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;square&gt;&nbsp;&nbsp;</td>
- <td>A CJK squared font variant.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;fraction&gt;&nbsp;&nbsp;</td>
- <td>A vulgar fraction form.</td>
- </tr>
- <tr>
- <td align="CENTER">&lt;compat&gt;&nbsp;&nbsp;</td>
- <td>Otherwise unspecified compatibility character.</td>
- </tr>
-</table>
-<p><b>Reminder: </b>There is a difference between decomposition and
-decomposition mapping. The decomposition mappings are defined in the UnicodeData,
-while the decomposition (also termed &quot;full decomposition&quot;) is defined
-in Chapter 3 to use those mappings <i>recursively.</i>
-<ul>
- <li>The canonical decomposition is formed by recursively applying the
- canonical mappings, then applying the canonical reordering algorithm.</li>
- <li>The compatibility decomposition is formed by recursively applying the
- canonical <em>and</em> compatibility mappings, then applying the canonical
- reordering algorithm.</li>
-</ul>
-<h3><a name="Canonical Combining Classes"></a>Canonical Combining Classes</h3>
-<table border="0" cellspacing="2" cellpadding="0">
- <tr>
- <th>
- <p align="LEFT">Value</th>
- <th>
- <p align="LEFT">Description</th>
- </tr>
- <tr>
- <td align="RIGHT">0:</td>
- <td>Spacing, split, enclosing, reordrant, and Tibetan subjoined</td>
- </tr>
- <tr>
- <td align="RIGHT">1:</td>
- <td>Overlays and interior</td>
- </tr>
- <tr>
- <td align="RIGHT">7:</td>
- <td>Nuktas</td>
- </tr>
- <tr>
- <td align="RIGHT">8:</td>
- <td>Hiragana/Katakana voicing marks</td>
- </tr>
- <tr>
- <td align="RIGHT">9:</td>
- <td>Viramas</td>
- </tr>
- <tr>
- <td align="RIGHT">10:</td>
- <td>Start of fixed position classes</td>
- </tr>
- <tr>
- <td align="RIGHT">199:</td>
- <td>End of fixed position classes</td>
- </tr>
- <tr>
- <td align="RIGHT">200:</td>
- <td>Below left attached</td>
- </tr>
- <tr>
- <td align="RIGHT">202:</td>
- <td>Below attached</td>
- </tr>
- <tr>
- <td align="RIGHT">204:</td>
- <td>Below right attached</td>
- </tr>
- <tr>
- <td align="RIGHT">208:</td>
- <td>Left attached (reordrant around single base character)</td>
- </tr>
- <tr>
- <td align="RIGHT">210:</td>
- <td>Right attached</td>
- </tr>
- <tr>
- <td align="RIGHT">212:</td>
- <td>Above left attached</td>
- </tr>
- <tr>
- <td align="RIGHT">214:</td>
- <td>Above attached</td>
- </tr>
- <tr>
- <td align="RIGHT">216:</td>
- <td>Above right attached</td>
- </tr>
- <tr>
- <td align="RIGHT">218:</td>
- <td>Below left</td>
- </tr>
- <tr>
- <td align="RIGHT">220:</td>
- <td>Below</td>
- </tr>
- <tr>
- <td align="RIGHT">222:</td>
- <td>Below right</td>
- </tr>
- <tr>
- <td align="RIGHT">224:</td>
- <td>Left (reordrant around single base character)</td>
- </tr>
- <tr>
- <td align="RIGHT">226:</td>
- <td>Right</td>
- </tr>
- <tr>
- <td align="RIGHT">228:</td>
- <td>Above left</td>
- </tr>
- <tr>
- <td align="RIGHT">230:</td>
- <td>Above</td>
- </tr>
- <tr>
- <td align="RIGHT">232:</td>
- <td>Above right</td>
- </tr>
- <tr>
- <td align="RIGHT">233:</td>
- <td>Double below</td>
- </tr>
- <tr>
- <td align="RIGHT">234:</td>
- <td>Double above</td>
- </tr>
- <tr>
- <td align="RIGHT">240:</td>
- <td>Below (iota subscript)</td>
- </tr>
-</table>
-<p><strong>Note: </strong>some of the combining classes in this list do not
-currently have members but are specified here for completeness.</p>
-<h3><a name="Decompositions and Normalization"></a>Decompositions and
-Normalization</h3>
-<p>Decomposition is specified in Chapter 3. <a
-href="http://www.unicode.org/unicode/reports/tr15/"><i>Unicode Standard Annex
-#15: Unicode Normalization Forms</i></a> specifies the interaction between decomposition
-and normalization. The most up-to-date version is found on <a
-href="http://www.unicode.org/unicode/reports/tr15/">http://www.unicode.org/unicode/reports/tr15/</a>.
-That report specifies how the decompositions defined in UnicodeData.txt are used
-to derive normalized forms of Unicode text.</p>
-<p>Note that as of the 2.1.9 update of the Unicode Character Database, the
-decompositions in the UnicodeData.txt file can be used to recursively derive the
-full decomposition in canonical order, without the need to separately apply
-canonical reordering. However, canonical reordering of combining character
-sequences must still be applied in decomposition when normalizing source text
-which contains any combining marks.</p>
-<h3><a name="Case Mappings"></a>Case Mappings</h3>
-<p>The case mapping is an informative, default mapping. Case itself, on the
-other hand, has normative status. Thus, for example, 0041 LATIN CAPITAL LETTER A
-is normatively uppercase, but its lowercase mapping the 0061 LATIN SMALL LETTER
-A is informative. The reason for this is that case can be considered to be an
-inherent property of a particular character (and is usually, but not always,
-derivable from the presence of the terms &quot;CAPITAL&quot; or
-&quot;SMALL&quot; in the character name), but case mappings between characters
-are occasionally influenced by local conventions. For example, certain
-languages, such as Turkish, German, French, or Greek may have small deviations
-from the default mappings listed in UnicodeData.</p>
-<p>In addition to uppercase and lowercase, because of the inclusion of certain
-composite characters for compatibility, such as 01F1 LATIN CAPITAL LETTER DZ,
-there is a third case, called <i>titlecase</i>, which is used where the first
-letter of a word is to be capitalized (e.g. UPPERCASE, Titlecase, lowercase). An
-example of such a titlecase letter is 01F2 LATIN CAPITAL LETTER D WITH SMALL
-LETTER Z.</p>
-<p>The uppercase, titlecase and lowercase fields are only included for
-characters that have a single corresponding character of that type. Composite
-characters (such as &quot;339D SQUARE CM&quot;) that do not have a single
-corresponding character of that type can be cased by decomposition.</p>
-<p>For compatibility with existing parsers, UnicodeData only contains case
-mappings for characters where they are one-to-one mappings; it also omits
-information about context-sensitive case mappings. Information about these
-special cases can be found in a separate data file, <a
-href="http://www.unicode.org/Public/3.0-Update1/">SpecialCasing.txt</a>, which
-has been added starting with the 2.1.8 update to the Unicode data files.
-SpecialCasing.txt contains additional informative case mappings that are either
-not one-to-one or which are context-sensitive.</p>
-<h2><a name="Property Invariants"></a>Property Invariants</h2>
-<p>Values in UnicodeData.txt are subject to correction as errors are found;
-however, some characteristics of the categories themselves can be considered
-invariants. Applications may wish to take these invariants into account when
-choosing how to implement character properties. The following is a partial list
-of known invariants for the Unicode Character Database.</p>
-<h4>Database Fields</h4>
-<ul>
- <li>The number of fields in UnicodeData.txt is fixed.</li>
- <li>The order of the fields is also fixed.
- <ul>
- <li>Any additional information about character properties to be added in
- the future will appear in separate data tables, rather than being added
- on to the existing table or by subdivision or reinterpretation of
- existing fields.</li>
- </ul>
- </li>
-</ul>
-<h4>General Category</h4>
-<ul>
- <li>There will never be more than 32 General Category values.
- <ul>
- <li>It is very unlikely that the Unicode Technical Committee will
- subdivide the General Category partition any further, since that can
- cause implementations to misbehave. Because the General Category is
- limited to 32 values, 5 bits can be used to represent the information,
- and a 32-bit integer can be used as a bitmask to represent arbitrary
- sets of categories.</li>
- </ul>
- </li>
-</ul>
-<h4>Combining Classes</h4>
-<ul>
- <li>Combining classes are limited to the values 0 to 255.
- <ul>
- <li>In practice, there are far fewer than 256 values used. Implementations
- may take advantage of this fact for compression, since only the ordering
- of the non-zero values matters for the Canonical Reordering Algorithm.
- It is possible for up to 256 values to be used in the future; however,
- UTC decisions in the future may restrict the number of values to 128,
- since this has implementation advantages. [Signed bytes can be used
- without widening to ints in Java, for example.]</li>
- </ul>
- </li>
- <li>All characters other than those of General Category M* have the combining
- class 0.
- <ul>
- <li>Currently, all characters other than those of General Category Mn have
- the value 0. However, some characters of General Category Me or Mc may
- be given non-zero values in the future.</li>
- <li>The precise values above the value 0 are not invariant--only the
- relative ordering is considered normative. For example, it is not
- guaranteed in future versions that the class of U+05B4 will be precisely
- 14.</li>
- </ul>
- </li>
-</ul>
-<h4>Case</h4>
-<ul>
- <li>Characters of type Lu, Lt, or Ll are called <i>cased</i>. All characters
- with an Upper, Lower, or Titlecase mapping are cased characters.
- <ul>
- <li>However, characters with the General Categories of Lu, Ll, or Lt may
- not always have case mappings, and case mappings may vary by locale.
- (See http://www.unicode.org/Public/UNIDATA/SpecialCasing.txt).</li>
- </ul>
- </li>
-</ul>
-<h4>Canonical Decomposition</h4>
-<ul>
- <li>Canonical mappings are always in canonical order.</li>
- <li>Canonical mappings have only the first of a pair possibly further
- decomposing.</li>
- <li>Canonical decompositions are &quot;transparent&quot; to other character
- data:
- <ul>
- <li><tt>BIDI(a) = BIDI(principal(canonicalDecomposition(a))</tt></li>
- <li><tt>Category(a) = Category(principal(canonicalDecomposition(a))</tt></li>
- <li><tt>CombiningClass(a) =
- CombiningClass(principal(canonicalDecomposition(a))</tt><br>
- where principal(a) is the first character not of type Mn, or the first
- character if all characters are of type Mn.</li>
- </ul>
- </li>
- <li>However, because there are sometimes missing case pairs, and because of
- some legacy characters, it is only generally true that:
- <ul>
- <li><tt>upper(canonicalDecomposition(a)) = canonicalDecomposition(upper(a))</tt></li>
- <li><tt>lower(canonicalDecomposition(a)) = canonicalDecomposition(lower(a))</tt></li>
- <li><tt>title(canonicalDecomposition(a)) = canonicalDecomposition(title(a))</tt></li>
- </ul>
- </li>
-</ul>
-<h2><a name="Modification History"></a>Modification History</h2>
-<p>This section provides a summary of the changes between update versions of the
-Unicode Standard.</p>
-<h3><a
-href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 3.0.1">Unicode
-3.0.1</a></h3>
-<p>Modifications made for Version 3.0.1 of UnicodeData.txt include:
-<ul>
- <li>Added 5- and 6-digit representation of code points past U+FFFF.</li>
- <li>Added Private Use range definitions for Planes 15 and 16.</li>
- <li>Minor additions for the 10646 comment field.</li>
-</ul>
-<h3><a
-href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 3.0.0">Unicode
-3.0.0</a></h3>
-<p>Modifications made for Version 3.0.0 of UnicodeData.txt include many new
-characters and a number of property changes. These are summarized in Appendex D
-of <em>The Unicode Standard, Version 3.0.</em></p>
-<h3><a
-href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.9">Unicode
-2.1.9</a></h3>
-<p>Modifications made for Version 2.1.9 of UnicodeData.txt include:
-<ul>
- <li>Corrected combining class for U+05AE HEBREW ACCENT ZINOR.</li>
- <li>Corrected combining class for U+20E1 COMBINING LEFT RIGHT ARROW ABOVE</li>
- <li>Corrected combining class for U+0F35 and U+0F37 to 220.</li>
- <li>Corrected combining class for U+0F71 to 129.</li>
- <li>Added a decomposition for U+0F0C TIBETAN MARK DELIMITER TSHEG BSTAR.</li>
- <li>Added&nbsp; decompositions for several Greek symbol letters:
- U+03D0..U+03D2, U+03D5, U+03D6, U+03F0..U+03F2.</li>
- <li>Removed&nbsp; decompositions from the conjoining jamo block:
- U+1100..U+11F8.</li>
- <li>Changes to decomposition mappings for some Tibetan vowels for consistency
- in normalization. (U+0F71, U+0F73, U+0F77, U+0F79, U+0F81)</li>
- <li>Updated the decomposition mappings for several Vietnamese characters with
- two diacritics (U+1EAC, U+1EAD, U+1EB6, U+1EB7, U+1EC6, U+1EC7, U+1ED8,
- U+1ED9), so that the recursive decomposition can be generated directly in
- canonically reordered form (not a normative change).</li>
- <li>Updated the decomposition mappings for several Arabic compatibility
- characters involving shadda (U+FC5E..U+FC62, U+FCF2..U+FCF4), and two Latin
- characters (U+1E1C, U+1E1D), so that the decompositions are generated
- directly in canonically reordered form (not a normative change).</li>
- <li>Changed BIDI category for: U+00A0 NO-BREAK SPACE, U+2007 FIGURE SPACE,
- U+2028 LINE SEPARATOR.</li>
- <li>Changed BIDI category for extenders of General Category Lm: U+3005,
- U+3021..U+3035, U+FF9E, U+FF9F.</li>
- <li>Changed General Category and BIDI category for the Greek numeral signs:
- U+0374, U+0375.</li>
- <li>Corrected General Category for U+FFE8 HALFWIDTH FORMS LIGHT VERTICAL.</li>
- <li>Added Unicode 1.0 names for many Tibetan characters (informative).</li>
-</ul>
-<h3><a
-href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.8">Unicode
-2.1.8</a></h3>
-<p>Modifications made for Version 2.1.8 of UnicodeData.txt include:
-<ul>
- <li>Added combining class 240 for U+0345 COMBINING GREEK YPOGEGRAMMENI so that
- decompositions involving iota subscript are derivable directly in
- canonically reordered form; this also has a bearing on simplification of
- casing of polytonic Greek.</li>
- <li>Changes in decompositions related to Greek tonos. These result from the
- clarification that monotonic Greek &quot;tonos&quot; should be equated with
- U+0301 COMBINING ACUTE, rather than with U+030D COMBINING VERTICAL LINE
- ABOVE. (All Greek characters in the Greek block involving &quot;tonos&quot;;
- some Greek characters in the polytonic Greek in the 1FXX block.)</li>
- <li>Changed decompositions involving dialytika tonos. (U+0390, U+03B0)</li>
- <li>Changed ternary decompositions to binary. (U+0CCB, U+FB2C, U+FB2D) These
- changes simplify normalization.</li>
- <li>Removed canonical decomposition for Latin Candrabindu. (U+0310)</li>
- <li>Corrected error in canonical decomposition for U+1FF4.</li>
- <li>Added compatibility decompositions to clarify collation tables. (U+2100,
- U+2101, U+2105, U+2106, U+1E9A)</li>
- <li>A series of general category changes to assist the convergence of of
- Unicode definition of identifier with ISO TR 10176:
- <ul>
- <li>So &gt; Lo: U+0950, U+0AD0, U+0F00, U+0F88..U+0F8B</li>
- <li>Po &gt; Lo: U+0E2F, U+0EAF, U+3006</li>
- <li>Lm &gt; Sk: U+309B, U+309C</li>
- <li>Po &gt; Pc: U+30FB, U+FF65</li>
- <li>Ps/Pe &gt; Mn: U+0F3E, U+0F3F</li>
- </ul>
- </li>
- <li>A series of bidi property changes for consistency.
- <ul>
- <li>L &gt; ET: U+09F2, U+09F3</li>
- <li>ON &gt; L: U+3007</li>
- <li>L &gt; ON: U+0F3A..U+0F3D, U+037E, U+0387</li>
- </ul>
- </li>
- <li>Add case mapping: U+01A6 &lt;-&gt; U+0280</li>
- <li>Updated symmetric swapping value for guillemets: U+00AB, U+00BB, U+2039,
- U+203A.</li>
- <li>Changes to combining class values. Most Indic fixed position class
- non-spacing marks were changed to combining class 0. This fixes some
- inconsistencies in how canonical reordering would apply to Indic scripts,
- including Tibetan. Indic interacting top/bottom fixed position classes were
- merged into single (non-zero) classes as part of this change. Tibetan
- subjoined consonants are changed from combining class 6 to combining class
- 0. Thai pinthu (U+0E3A) moved to combining class 9. Moved two Devanagari
- stress marks into generic above and below combining classes (U+0951,
- U+0952).</li>
- <li>Corrected placement of semicolon near symmetric swapping field. (U+FA0E,
- etc., scattered positions to U+FA29)</li>
-</ul>
-<h3>Version 2.1.7</h3>
-<p><i>This version was for internal change tracking only, and never publicly
-released.</i></p>
-<h3>Version 2.1.6</h3>
-<p><i>This version was for internal change tracking only, and never publicly
-released.</i></p>
-<h3><a
-href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.5">Unicode
-2.1.5</a></h3>
-<p>Modifications made for Version 2.1.5 of UnicodeData.txt include:
-<ul>
- <li>Changed decomposition for U+FF9E and U+FF9F so that correct collation
- weighting will automatically result from the canonical equivalences.</li>
- <li>Removed canonical decompositions for U+04D4, U+04D5, U+04D8, U+04D9,
- U+04E0, U+04E1, U+04E8, U+04E9 (the implication being that no canonical
- equivalence is claimed between these 8 characters and similar Latin
- letters), and updated 4 canonical decompositions for U+04DB, U+04DC, U+04EA,
- U+04EB to reflect the implied difference in the base character.</li>
- <li>Added Pi, and Pf categories and assigned the relevant quotation marks to
- those categories, based on the Unicode Technical Corrigendum on Quotation
- Characters.</li>
- <li>Updating of many bidi properties, following the advice of the ad hoc
- committee on bidi, and to make the bidi properties of compatibility
- characters more consistent.</li>
- <li>Changed category of several Tibetan characters: U+0F3E, U+0F3F,
- U+0F88..U+0F8B to make them non-combining, reflecting the combined opinion
- of Tibetan experts.</li>
- <li>Added case mapping for U+03F2.</li>
- <li>Corrected case mapping for U+0275.</li>
- <li>Added titlecase mappings for U+03D0, U+03D1, U+03D5, U+03D6, U+03F0..
- U+03F2.</li>
- <li>Corrected compatibility label for U+2121.</li>
- <li>Add specific entries for all the CJK compatibility ideographs,
- U+F900..U+FA2D, so the canonical decomposition for each (the URO character
- it is equivalent to) can be carried in the database.</li>
-</ul>
-<h3>Version 2.1.4</h3>
-<p><i>This version was for internal change tracking only, and never publicly
-released.</i></p>
-<h3>Version 2.1.3</h3>
-<p><i>This version was for internal change tracking only, and never publicly
-released.</i></p>
-<h3><a
-href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.2">Unicode
-2.1.2</a></h3>
-<p>Modifications made in updating UnicodeData.txt to Version 2.1.2 for the
-Unicode Standard, Version 2.1 (from Version 2.0) include:
-<ul>
- <li>Added two characters (U+20AC and U+FFFC).</li>
- <li>Amended bidi properties for U+0026, U+002E, U+0040, U+2007.</li>
- <li>Corrected case mappings for U+018E, U+019F, U+01DD, U+0258, U+0275,
- U+03C2, U+1E9B.</li>
- <li>Changed combining order class for U+0F71.</li>
- <li>Corrected canonical decompositions for U+0F73, U+1FBE.</li>
- <li>Changed decomposition for U+FB1F from compatibility to canonical.</li>
- <li>Added compatibility decompositions for U+FBE8, U+FBE9, U+FBF9..U+FBFB.</li>
- <li>Corrected compatibility decompositions for U+2469, U+246A, U+3358.</li>
-</ul>
-<h3>Version 2.1.1</h3>
-<p><i>This version was for internal change tracking only, and never publicly
-released.</i></p>
-<h3><a
-href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.0.0">Unicode
-2.0.0</a></h3>
-<p>The modifications made in updating UnicodeData.txt for the Unicode Standard,
-Version 2.0 include:
-<ul>
- <li>Fixed decompositions with TONOS to use correct NSM: 030D.</li>
- <li>Removed old Hangul Syllables; mapping to new characters are in a separate
- table.</li>
- <li>Marked compatibility decompositions with additional tags.</li>
- <li>Changed old tag names for clarity.</li>
- <li>Revision of decompositions to use first-level decomposition, instead of
- maximal decomposition.</li>
- <li>Correction of all known errors in decompositions from earlier versions.</li>
- <li>Added control code names (as old Unicode names).</li>
- <li>Added Hangul Jamo decompositions.</li>
- <li>Added Number category to match properties list in book.</li>
- <li>Fixed categories of Koranic Arabic marks.</li>
- <li>Fixed categories of precomposed characters to match decomposition where
- possible.</li>
- <li>Added Hebrew cantillation marks and the Tibetan script.</li>
- <li>Added place holders for ranges such as CJK Ideographic Area and the
- Private Use Area.</li>
- <li>Added categories Me, Sk, Pc, Nl, Cs, Cf, and rectified a number of
- mistakes in the database.</li>
-</ul>
-
-</body>
-
-</html>
diff --git a/contrib/perl5/lib/unicode/Unicode.301 b/contrib/perl5/lib/unicode/Unicode.301
deleted file mode 100644
index 6804a75..0000000
--- a/contrib/perl5/lib/unicode/Unicode.301
+++ /dev/null
@@ -1,10621 +0,0 @@
-0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
-0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
-0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
-0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
-0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
-0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
-0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
-0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
-0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
-0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
-000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
-000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
-000C;<control>;Cc;0;WS;;;;;N;FORM FEED;;;;
-000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
-000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
-000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
-0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
-0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
-0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
-0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
-0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
-0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
-0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
-0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
-0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
-0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
-001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
-001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
-001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
-001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
-001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
-001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
-0020;SPACE;Zs;0;WS;;;;;N;;;;;
-0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
-0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
-0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
-0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
-0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
-0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
-0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
-0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
-002A;ASTERISK;Po;0;ON;;;;;N;;;;;
-002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
-002C;COMMA;Po;0;CS;;;;;N;;;;;
-002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
-002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
-002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
-0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
-0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
-0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
-0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
-0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
-0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
-0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
-0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
-0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
-0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
-003A;COLON;Po;0;CS;;;;;N;;;;;
-003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
-003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
-003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
-003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
-003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
-0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
-0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
-0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
-0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
-0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
-0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
-0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
-0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
-0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
-0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
-004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
-004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
-004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
-004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
-004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
-004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
-0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
-0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
-0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
-0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
-0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
-0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
-0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
-0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
-0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
-0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
-005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
-005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
-005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
-005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
-005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
-005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
-0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
-0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
-0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
-0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
-0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
-0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
-0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
-0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
-0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
-0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
-006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
-006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
-006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
-006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
-006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
-006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
-0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
-0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
-0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
-0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
-0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
-0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
-0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
-0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
-0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
-0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
-007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
-007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
-007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
-007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
-007E;TILDE;Sm;0;ON;;;;;N;;;;;
-007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
-0080;<control>;Cc;0;BN;;;;;N;;;;;
-0081;<control>;Cc;0;BN;;;;;N;;;;;
-0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
-0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
-0084;<control>;Cc;0;BN;;;;;N;;;;;
-0085;<control>;Cc;0;B;;;;;N;NEXT LINE;;;;
-0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
-0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
-0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
-0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
-008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
-008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;;
-008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;;
-008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
-008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
-008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
-0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
-0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
-0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
-0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
-0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
-0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
-0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
-0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
-0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
-0099;<control>;Cc;0;BN;;;;;N;;;;;
-009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
-009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
-009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
-009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
-009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
-009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
-00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
-00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
-00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
-00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
-00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
-00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
-00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
-00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
-00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
-00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
-00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
-00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
-00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
-00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
-00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
-00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
-00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
-00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
-00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
-00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
-00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
-00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
-00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
-00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
-00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
-00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
-00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
-00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
-00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
-00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
-00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
-00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
-00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
-00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
-00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
-00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
-00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
-00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
-00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
-00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
-00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
-00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
-00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
-00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
-00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
-00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
-00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
-00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
-00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
-00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
-00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
-00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
-00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
-00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
-00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
-00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
-00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
-00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
-00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
-00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
-00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
-00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
-00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
-00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
-00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
-00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
-00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
-00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
-00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
-00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
-00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
-00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
-00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
-00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
-00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
-00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
-00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
-00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
-00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
-00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
-00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
-00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
-00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
-00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
-00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
-00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
-00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
-00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
-00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
-00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
-00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
-00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
-00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
-00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
-00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
-00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
-0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
-0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
-0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
-0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
-0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
-0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
-0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
-0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
-0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
-0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
-010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
-010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
-010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
-010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
-010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
-010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
-0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
-0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
-0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
-0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
-0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
-0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
-0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
-0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
-0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
-0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
-011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
-011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
-011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
-011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
-011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
-011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
-0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
-0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
-0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
-0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
-0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
-0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
-0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
-0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
-0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
-0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
-012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
-012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
-012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
-012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
-012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
-012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
-0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
-0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
-0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
-0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
-0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
-0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
-0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
-0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
-0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
-0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
-013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
-013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
-013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
-013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
-013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
-013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
-0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
-0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
-0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
-0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
-0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
-0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
-0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
-0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
-0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
-0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
-014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
-014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
-014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
-014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
-014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
-014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
-0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
-0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
-0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
-0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
-0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
-0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
-0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
-0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
-0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
-0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
-015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
-015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
-015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
-015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
-015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
-015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
-0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
-0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
-0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
-0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
-0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
-0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
-0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
-0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
-0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
-0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
-016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
-016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
-016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
-016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
-016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
-016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
-0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
-0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
-0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
-0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
-0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
-0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
-0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
-0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
-0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
-0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
-017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
-017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
-017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
-017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
-017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
-017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
-0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
-0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
-0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
-0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
-0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
-0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
-0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
-0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
-0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
-0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
-018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
-018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
-018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
-018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
-018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
-018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
-0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
-0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
-0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
-0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
-0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
-0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
-0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
-0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
-0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
-0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
-019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
-019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
-019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
-019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
-019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
-019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
-01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
-01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
-01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
-01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
-01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
-01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
-01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;*;;0280;
-01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
-01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
-01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
-01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
-01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
-01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
-01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
-01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
-01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
-01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
-01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
-01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
-01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
-01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
-01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
-01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
-01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
-01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
-01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
-01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
-01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
-01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
-01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
-01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
-01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
-01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
-01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
-01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
-01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
-01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
-01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
-01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
-01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
-01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
-01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
-01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
-01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
-01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
-01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
-01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
-01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
-01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
-01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
-01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
-01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
-01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
-01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
-01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
-01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
-01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
-01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
-01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
-01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
-01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
-01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
-01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
-01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
-01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
-01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
-01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
-01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
-01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
-01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
-01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
-01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
-01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
-01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
-01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
-01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
-01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
-01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
-01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
-01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
-01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
-01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
-01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
-01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
-01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
-01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
-01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
-01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
-01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
-01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
-01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
-01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
-01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
-01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
-01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
-01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
-0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
-0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
-0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
-0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
-0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
-0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
-0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
-0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
-0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
-0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
-020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
-020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
-020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
-020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
-020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
-020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
-0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
-0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
-0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
-0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
-0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
-0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
-0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
-0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
-0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
-0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
-021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
-021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
-021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
-021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
-021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
-021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
-0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
-0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
-0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
-0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
-0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
-0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
-0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
-0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
-022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
-022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
-022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
-022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
-022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
-022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
-0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
-0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
-0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
-0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
-0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
-0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
-0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
-0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
-0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
-0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
-0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
-0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
-0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
-0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
-025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
-025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
-025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
-025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
-025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
-025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
-0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
-0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
-0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
-0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
-0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
-0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
-0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
-0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
-0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
-0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
-026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
-026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
-026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
-026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
-026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
-026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
-0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
-0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
-0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
-0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
-0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
-0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
-0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
-0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
-0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
-027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
-027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
-027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
-027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
-027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
-0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6
-0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
-0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
-0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
-0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
-0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
-0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
-0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
-0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
-0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
-028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
-028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
-028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
-028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
-028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
-028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
-0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
-0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
-0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
-0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
-0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
-0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
-0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
-0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
-0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
-0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
-029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
-029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
-029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
-029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
-029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
-029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
-02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
-02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
-02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
-02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
-02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
-02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
-02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
-02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
-02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
-02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
-02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
-02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
-02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
-02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
-02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
-02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
-02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
-02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
-02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
-02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
-02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
-02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
-02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
-02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
-02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
-02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
-02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
-02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
-02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
-02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
-02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
-02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
-02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
-02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
-02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
-02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
-02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
-02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
-02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
-02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
-02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
-02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
-02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
-02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
-02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
-02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
-02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
-02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
-02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
-02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
-02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
-02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
-02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
-02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
-02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
-02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
-02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
-02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
-02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
-02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
-02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
-02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
-02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
-02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
-02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
-02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
-02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
-02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
-02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
-0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
-0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;;
-0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
-0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
-0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
-0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
-0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
-0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
-0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
-0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
-030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
-030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
-030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
-030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
-030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
-030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
-0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
-0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
-0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
-0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
-0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
-0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
-0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
-0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
-0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
-0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
-031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
-031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
-031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
-031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
-031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
-031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
-0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
-0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
-0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
-0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
-0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
-0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
-0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
-0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
-0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
-0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
-032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
-032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
-032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
-032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
-032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
-032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
-0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
-0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
-0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
-0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
-0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
-0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
-0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
-0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
-0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
-0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
-033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
-033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
-033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
-033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
-033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
-033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
-0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
-0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
-0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
-0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
-0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
-0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
-0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
-0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
-0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
-0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
-034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
-034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
-034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
-034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
-034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
-0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
-0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
-0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
-0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
-0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
-037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
-037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
-0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
-0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
-0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
-0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
-0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
-0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
-038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
-038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
-038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
-038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
-0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
-0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
-0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
-0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
-0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
-0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
-0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
-0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
-0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
-0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
-039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
-039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
-039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
-039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
-039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
-039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
-03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
-03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
-03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
-03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
-03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
-03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
-03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
-03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
-03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
-03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
-03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
-03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
-03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
-03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
-03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
-03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
-03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
-03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
-03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
-03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
-03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
-03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
-03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
-03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
-03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
-03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
-03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
-03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
-03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
-03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
-03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
-03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
-03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
-03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
-03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
-03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
-03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
-03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
-03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
-03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
-03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
-03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
-03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
-03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
-03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
-03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
-03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
-03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
-03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
-03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
-03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
-03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
-03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
-03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
-03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
-03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
-03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
-03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
-03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
-03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
-03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
-03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
-03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
-03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
-03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
-03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
-03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
-03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
-03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
-03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
-03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
-03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
-03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
-03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
-03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
-03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
-03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
-03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
-03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
-03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
-0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
-0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
-0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
-0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
-0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
-0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
-0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
-0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
-0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
-0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
-040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
-040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
-040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
-040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
-040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
-040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
-0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
-0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
-0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
-0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
-0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
-0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
-0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
-0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
-0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
-0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
-041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
-041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
-041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
-041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
-041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
-041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
-0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
-0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
-0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
-0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
-0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
-0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
-0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
-0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
-0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
-0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
-042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
-042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
-042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
-042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
-042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
-042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
-0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
-0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
-0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
-0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
-0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
-0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
-0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
-0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
-0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
-0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
-043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
-043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
-043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
-043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
-043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
-043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
-0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
-0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
-0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
-0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
-0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
-0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
-0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
-0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
-0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
-0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
-044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
-044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
-044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
-044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
-044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
-044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
-0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
-0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
-0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
-0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
-0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
-0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
-0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
-0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
-0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
-0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
-045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
-045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
-045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
-045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
-045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
-045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
-0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
-0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
-0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
-0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
-0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
-0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
-0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
-0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
-0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
-0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
-046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
-046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
-046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
-046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
-046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
-046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
-0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
-0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
-0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
-0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
-0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
-0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
-0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
-0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
-0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
-0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
-047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
-047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
-047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
-047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
-047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
-047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
-0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
-0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
-0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
-0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
-0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
-0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
-0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
-0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
-0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
-048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
-048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
-048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
-048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
-0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
-0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
-0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
-0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
-0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
-0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
-0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
-0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
-0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
-0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
-049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
-049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
-049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
-049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
-049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
-049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
-04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
-04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
-04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
-04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
-04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
-04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
-04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
-04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
-04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
-04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
-04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
-04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
-04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
-04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
-04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
-04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
-04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
-04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
-04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
-04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
-04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
-04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
-04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
-04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
-04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
-04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
-04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
-04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
-04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
-04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
-04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
-04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
-04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
-04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
-04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
-04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
-04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
-04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
-04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
-04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
-04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
-04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
-04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
-04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
-04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
-04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
-04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
-04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
-04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
-04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
-04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
-04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
-04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
-04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
-04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
-04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
-04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
-04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
-04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
-04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
-04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
-04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
-04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
-04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
-04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
-04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
-04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
-04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
-04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
-04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
-04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
-04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
-04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
-04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
-04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
-04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
-04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
-04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
-04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
-04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
-04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
-0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
-0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
-0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
-0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
-0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
-0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
-0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
-0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
-0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
-053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
-053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
-053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
-053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
-053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
-053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
-0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
-0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
-0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
-0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
-0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
-0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
-0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
-0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
-0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
-0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
-054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
-054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
-054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
-054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
-054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
-054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
-0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
-0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
-0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
-0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
-0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
-0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
-0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
-0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
-055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
-055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
-055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
-055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
-055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
-055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
-0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
-0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
-0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
-0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
-0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
-0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
-0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
-0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
-0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
-056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
-056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
-056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
-056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
-056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
-056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
-0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
-0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
-0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
-0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
-0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
-0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
-0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
-0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
-0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
-0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
-057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
-057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
-057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
-057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
-057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
-057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
-0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
-0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
-0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
-0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
-0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
-0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
-0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
-0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
-0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
-058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
-0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
-0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
-0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
-0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
-0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
-0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
-0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
-0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
-0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
-059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
-059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
-059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
-059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
-059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
-059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
-05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
-05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
-05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
-05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
-05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
-05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
-05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
-05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
-05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
-05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
-05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
-05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
-05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
-05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
-05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
-05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
-05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
-05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
-05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
-05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
-05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
-05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
-05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
-05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
-05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
-05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
-05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
-05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
-05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
-05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
-05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
-05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
-05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
-05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
-05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
-05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
-05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
-05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
-05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
-05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
-05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
-05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
-05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
-05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
-05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
-05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
-05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
-05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
-05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
-05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
-05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
-05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
-05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
-05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
-05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
-05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
-05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
-05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
-05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
-05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
-05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
-05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
-05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
-05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
-05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
-05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
-05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
-060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
-061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
-061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
-0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
-0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
-0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
-0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
-0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
-0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
-0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
-0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
-0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
-062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
-062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
-062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
-062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
-062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
-062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
-0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
-0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
-0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
-0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
-0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
-0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
-0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
-0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
-0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
-0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
-063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
-0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
-0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
-0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
-0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
-0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
-0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
-0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
-0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
-0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
-0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
-064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
-064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
-064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
-064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
-064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
-064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
-0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
-0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
-0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
-0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
-0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
-0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
-0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
-0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
-0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
-0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
-0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
-0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
-0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
-0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
-0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
-066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
-066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
-066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
-066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
-0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
-0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
-0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
-0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
-0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
-0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
-0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
-0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
-0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
-0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
-067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
-067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
-067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
-067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
-067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
-067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
-0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
-0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
-0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
-0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
-0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
-0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
-0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
-0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
-0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
-0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
-068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
-068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
-068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
-068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
-068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
-0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
-0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
-0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
-0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
-0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
-0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
-0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
-0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
-0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
-069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
-06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
-06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
-06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
-06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
-06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
-06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
-06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
-06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
-06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
-06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
-06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
-06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
-06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
-06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
-06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
-06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
-06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
-06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
-06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
-06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
-06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
-06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
-06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
-06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
-06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
-06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
-06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
-06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
-06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
-06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
-06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
-06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
-06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
-06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
-06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
-06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
-06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
-06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
-06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
-06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
-06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
-06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
-06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
-06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
-06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
-06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
-06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
-06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
-06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
-06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
-06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;;
-06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
-06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
-06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
-06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
-06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
-06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
-06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
-06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
-06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
-06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
-06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
-06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
-06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
-06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
-06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
-06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
-06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
-06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
-06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
-06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
-06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
-06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
-06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
-06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
-06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
-06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
-06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
-06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
-06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
-0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
-0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
-0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
-0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
-0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
-0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
-0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
-0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
-0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
-0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
-070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
-070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
-070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
-070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
-070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
-0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
-0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
-0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
-0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
-0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
-0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
-0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
-0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
-0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
-0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
-071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
-071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
-071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
-071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
-071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
-071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
-0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
-0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
-0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
-0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
-0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
-0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
-0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
-0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
-0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
-0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
-072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
-072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
-072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
-0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
-0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
-0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
-0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
-0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
-0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
-0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
-073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
-073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
-073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
-073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
-073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
-0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
-0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
-0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
-0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
-0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
-0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
-0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
-0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
-0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
-0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
-074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
-0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
-0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
-0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
-0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
-0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
-0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
-0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
-0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
-078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
-078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
-078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
-078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
-078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
-078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
-0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
-0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
-0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
-0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
-0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
-0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
-0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
-0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
-0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
-0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
-079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
-079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
-079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
-079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
-079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
-079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
-07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
-07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
-07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
-07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
-07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
-07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
-07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
-07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
-07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
-07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
-07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
-07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
-07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
-07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
-07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
-07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
-07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
-0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
-0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
-0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
-0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
-0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
-090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
-090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
-090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
-090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
-0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
-0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
-0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
-0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
-0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
-0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
-0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
-0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
-091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
-091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
-091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
-091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
-091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
-091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
-0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
-0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
-0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
-0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
-092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
-092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
-092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
-092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
-092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
-092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
-0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
-0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
-0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
-0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
-0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
-0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
-0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
-0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
-093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
-0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
-0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
-094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
-094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
-0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
-0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
-0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
-0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
-0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
-0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
-095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
-095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
-095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
-095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
-095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
-095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
-0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
-0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
-0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
-0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
-0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
-0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
-0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
-0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
-098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
-098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
-0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
-0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
-0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
-0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
-0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
-0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
-099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
-099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
-099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
-099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
-099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
-099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
-09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
-09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
-09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
-09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
-09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
-09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
-09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
-09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
-09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
-09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
-09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
-09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
-09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
-09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
-09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
-09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
-09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
-09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
-09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
-09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
-09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
-09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
-09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
-09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
-09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
-09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
-09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
-09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
-09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
-09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
-09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
-09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
-09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
-09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
-09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
-0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
-0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
-0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
-0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
-0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
-0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
-0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
-0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
-0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
-0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
-0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
-0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
-0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
-0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
-0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
-0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
-0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
-0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
-0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
-0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
-0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
-0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
-0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
-0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
-0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
-0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
-0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
-0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
-0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
-0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
-0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
-0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
-0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
-0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
-0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
-0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
-0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
-0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
-0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
-0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
-0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
-0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
-0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
-0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
-0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
-0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
-0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
-0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
-0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
-0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
-0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
-0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
-0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
-0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
-0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
-0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
-0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
-0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
-0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
-0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
-0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
-0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
-0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
-0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
-0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
-0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
-0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
-0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
-0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
-0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
-0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
-0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
-0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
-0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
-0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
-0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
-0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
-0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
-0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
-0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
-0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
-0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
-0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
-0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
-0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
-0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
-0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
-0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
-0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
-0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
-0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
-0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
-0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
-0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
-0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
-0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
-0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
-0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
-0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
-0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
-0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
-0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
-0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
-0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
-0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
-0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
-0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
-0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
-0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
-0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
-0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
-0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
-0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
-0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
-0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
-0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
-0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
-0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
-0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
-0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
-0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
-0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
-0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
-0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
-0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
-0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
-0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
-0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
-0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
-0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
-0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
-0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
-0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
-0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
-0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
-0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
-0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
-0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
-0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
-0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
-0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
-0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
-0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
-0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
-0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
-0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
-0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
-0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
-0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
-0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
-0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
-0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
-0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
-0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
-0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
-0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
-0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
-0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
-0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
-0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
-0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
-0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
-0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
-0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
-0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
-0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
-0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
-0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
-0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
-0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
-0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
-0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
-0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
-0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
-0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
-0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
-0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
-0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
-0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
-0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
-0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
-0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
-0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
-0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
-0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
-0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
-0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
-0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
-0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
-0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
-0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
-0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
-0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
-0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
-0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
-0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
-0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
-0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
-0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
-0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
-0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
-0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
-0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
-0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
-0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
-0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
-0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
-0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
-0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
-0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
-0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
-0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
-0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
-0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
-0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
-0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
-0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
-0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
-0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
-0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
-0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
-0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
-0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
-0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
-0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
-0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
-0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
-0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
-0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
-0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
-0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
-0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
-0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
-0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
-0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
-0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
-0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
-0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
-0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
-0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
-0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
-0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
-0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
-0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
-0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
-0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
-0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
-0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
-0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
-0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
-0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
-0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
-0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
-0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
-0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
-0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
-0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
-0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
-0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
-0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
-0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
-0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
-0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
-0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
-0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
-0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
-0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
-0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
-0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
-0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
-0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
-0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
-0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
-0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
-0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
-0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
-0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
-0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
-0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
-0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
-0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
-0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
-0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
-0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
-0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
-0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
-0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
-0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0CBF;KANNADA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
-0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
-0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
-0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-0CC6;KANNADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
-0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
-0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
-0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
-0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
-0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
-0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
-0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
-0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
-0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
-0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
-0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
-0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
-0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
-0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
-0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
-0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
-0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
-0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
-0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
-0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
-0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
-0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
-0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
-0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
-0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
-0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
-0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
-0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
-0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
-0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
-0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
-0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
-0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
-0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
-0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
-0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
-0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
-0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
-0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
-0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
-0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
-0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
-0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
-0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
-0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
-0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
-0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
-0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
-0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
-0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
-0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
-0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
-0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
-0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
-0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
-0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
-0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
-0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
-0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
-0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
-0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
-0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
-0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
-0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
-0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
-0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
-0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
-0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
-0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
-0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
-0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
-0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
-0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
-0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
-0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
-0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
-0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
-0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
-0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
-0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
-0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
-0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
-0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
-0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
-0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
-0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
-0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
-0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
-0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
-0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
-0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
-0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
-0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
-0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
-0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
-0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
-0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
-0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
-0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
-0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
-0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
-0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
-0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
-0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
-0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
-0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
-0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
-0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
-0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
-0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
-0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
-0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
-0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
-0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
-0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
-0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
-0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
-0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
-0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
-0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
-0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
-0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
-0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
-0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
-0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
-0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
-0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
-0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
-0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
-0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
-0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
-0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
-0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
-0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
-0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
-0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
-0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
-0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
-0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
-0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
-0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
-0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
-0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
-0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
-0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
-0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
-0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
-0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
-0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
-0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
-0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
-0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
-0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
-0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
-0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
-0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
-0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
-0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
-0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
-0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
-0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
-0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
-0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
-0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
-0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
-0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
-0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
-0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
-0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
-0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
-0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
-0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
-0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
-0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
-0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
-0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
-0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
-0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
-0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
-0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
-0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
-0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
-0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
-0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
-0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
-0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
-0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
-0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
-0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
-0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
-0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
-0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
-0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
-0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
-0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
-0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
-0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
-0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
-0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
-0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
-0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
-0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
-0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
-0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
-0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
-0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
-0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
-0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
-0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
-0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
-0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
-0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
-0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
-0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
-0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
-0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
-0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
-0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
-0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
-0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
-0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
-0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
-0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
-0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
-0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
-0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
-0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
-0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
-0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
-0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
-0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
-0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
-0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
-0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
-0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
-0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
-0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
-0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
-0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
-0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
-0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
-0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
-0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
-0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
-0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
-0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
-0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
-0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
-0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
-0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
-0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
-0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
-0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
-0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
-0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
-0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
-0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
-0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
-0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
-0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
-0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
-0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
-0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
-0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
-0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
-0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
-0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
-0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
-0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
-0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
-0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
-0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
-0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
-0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
-0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
-0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
-0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
-0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
-0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
-0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
-0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
-0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
-0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
-0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
-0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
-0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
-0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
-0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
-0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
-0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;;
-0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;;
-0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;;
-0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;;
-0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;;
-0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;;
-0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;;
-0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;;
-0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;;
-0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;;
-0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
-0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
-0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
-0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
-0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
-0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
-0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
-0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
-0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
-0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
-0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
-0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
-0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
-0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
-0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
-0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
-0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
-0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
-0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
-0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
-0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
-0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
-0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
-0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
-0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
-0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
-0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
-0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
-0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
-0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
-0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
-0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
-0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
-0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
-0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
-0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
-0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
-0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
-0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
-0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
-0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
-0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
-0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
-0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
-0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
-0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
-0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
-0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
-0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
-0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
-0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
-0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
-0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
-0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
-0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
-0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
-0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
-0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
-0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
-0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
-0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
-0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
-0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
-0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
-0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
-0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
-0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
-0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
-0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
-0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
-0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
-0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
-0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
-0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
-0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
-0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
-0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
-0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
-0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
-0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
-0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
-0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
-0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
-0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
-0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
-0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
-0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
-0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
-0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
-0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
-0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
-0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
-0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
-0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
-0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
-0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
-0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
-0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
-0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
-0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
-0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
-0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
-0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
-0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
-0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
-0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
-0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
-0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
-0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
-0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
-0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
-0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
-0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
-0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
-0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
-0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
-0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
-0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
-0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
-0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
-0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
-0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
-0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
-0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
-0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
-0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
-0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
-0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
-0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
-0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
-0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
-0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
-0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
-0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
-0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
-0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
-0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
-0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
-0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
-0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
-0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;;
-1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
-1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
-1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
-1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
-1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
-1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
-1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
-1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
-1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
-1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
-100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
-100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
-100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
-100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
-100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
-100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
-1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
-1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
-1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
-1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
-1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
-1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
-1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
-1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
-1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
-1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
-101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
-101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
-101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
-101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
-101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
-101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
-1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
-1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
-1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
-1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
-1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
-1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
-1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
-1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
-102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
-102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
-1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
-1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
-1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
-1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
-1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
-104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
-104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
-104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
-104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
-104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
-1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
-1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
-1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
-1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
-1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
-1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
-1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
-1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
-1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
-1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
-10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
-10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
-10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
-10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
-10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
-10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
-10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
-10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
-10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
-10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
-10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
-10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
-10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
-10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
-10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
-10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
-10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
-10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
-10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
-10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
-10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
-10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
-10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
-10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
-10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
-10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
-10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
-10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
-10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
-10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
-10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
-10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
-10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
-10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
-10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
-10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
-10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
-10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
-10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
-10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
-10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
-10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
-10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
-10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
-10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
-10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
-10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
-10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
-10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
-10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
-10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
-1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
-1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
-1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
-1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
-1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
-1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
-1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
-1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
-1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
-1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
-110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
-110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
-110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
-110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
-110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
-110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
-1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
-1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
-1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
-1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
-1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
-1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
-1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
-1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
-1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
-1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
-111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
-111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
-111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
-111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
-111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
-111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
-1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
-1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
-1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
-1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
-1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
-1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
-112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
-112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
-112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
-112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
-1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
-1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
-1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
-1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
-1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
-1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
-1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
-113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
-113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
-113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
-113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
-113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
-113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
-1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
-1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
-1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
-1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
-1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
-1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
-1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
-1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
-1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
-1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
-114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
-114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
-114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
-114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
-114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
-114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
-1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
-1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
-1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
-1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
-1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
-1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
-1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
-1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
-1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
-1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
-1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
-1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
-1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
-1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
-1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
-1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
-1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
-1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
-1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
-1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
-116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
-116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
-116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
-116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
-116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
-116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
-1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
-1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
-1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
-1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
-1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
-1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
-1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
-1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
-1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
-1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
-117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
-117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
-117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
-117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
-117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
-117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
-1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
-1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
-1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
-1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
-1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
-1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
-1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
-1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
-1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
-1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
-118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
-118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
-118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
-118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
-118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
-118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
-1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
-1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
-1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
-1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
-1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
-1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
-1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
-1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
-1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
-1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
-119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
-119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
-119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
-119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
-119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
-119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
-11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
-11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
-11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
-11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
-11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
-11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
-11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
-11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
-11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
-11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
-11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
-11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
-11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
-11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
-11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
-11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
-11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
-11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
-11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
-11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
-11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
-11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
-11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
-11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
-11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
-11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
-11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
-11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
-11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
-11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
-11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
-11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
-11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
-11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
-11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
-11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
-11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
-11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
-11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
-11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
-11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
-11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
-11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
-11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
-11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
-11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
-11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
-11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
-11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
-11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
-11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
-11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
-11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
-11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
-11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
-11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
-11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
-11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
-11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
-11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
-11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
-11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
-11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
-11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
-11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
-11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
-11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
-11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
-11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
-11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
-11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
-11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
-11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
-11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
-11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
-11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
-11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
-11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
-11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
-11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
-11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
-1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
-1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
-1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
-1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
-1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
-1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
-1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
-1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
-1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
-120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
-120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
-120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
-120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
-120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
-120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
-1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
-1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
-1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
-1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
-1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
-1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
-1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
-1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
-1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
-1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
-121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
-121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
-121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
-121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
-121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
-121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
-1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
-1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
-1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
-1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
-1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
-1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
-1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
-1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
-1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
-1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
-122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
-122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
-122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
-122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
-122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
-122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
-1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
-1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
-1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
-1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
-1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
-1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
-1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
-1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
-1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
-1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
-123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
-123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
-123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
-123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
-123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
-123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
-1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
-1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
-1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
-1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
-1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
-1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
-1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
-1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
-124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
-124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
-124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
-124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
-1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
-1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
-1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
-1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
-1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
-1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
-1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
-1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
-125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
-125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
-125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
-125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
-1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
-1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
-1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
-1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
-1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
-1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
-1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
-1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
-1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
-1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
-126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
-126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
-126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
-126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
-126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
-126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
-1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
-1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
-1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
-1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
-1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
-1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
-1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
-1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
-1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
-1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
-127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
-127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
-127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
-127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
-127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
-127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
-1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
-1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
-1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
-1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
-1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
-1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
-1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
-1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
-128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
-128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
-128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
-128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
-1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
-1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
-1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
-1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
-1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
-1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
-1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
-1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
-1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
-1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
-129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
-129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
-129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
-129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
-129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
-129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
-12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
-12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
-12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
-12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
-12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
-12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
-12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
-12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
-12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
-12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
-12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
-12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
-12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
-12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
-12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
-12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
-12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
-12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
-12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
-12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
-12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
-12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
-12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
-12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
-12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
-12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
-12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
-12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
-12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
-12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
-12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
-12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
-12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
-12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
-12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
-12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
-12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
-12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
-12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
-12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
-12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
-12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
-12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
-12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
-12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
-12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
-12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
-12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
-12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
-12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
-12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
-12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
-12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
-12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
-12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
-12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
-12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
-12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
-12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
-12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
-12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
-12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
-12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
-12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
-12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
-12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
-12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
-12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
-12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
-12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
-12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
-12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
-12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
-12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
-12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
-12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
-12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
-12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
-12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
-12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
-12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
-12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
-12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
-12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
-12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
-1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
-1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
-1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
-1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
-1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
-1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
-1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
-1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
-1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
-1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
-130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
-130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
-130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
-130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
-130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
-1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
-1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
-1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
-1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
-1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
-1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
-1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
-131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
-131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
-131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
-131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
-131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
-1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
-1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
-1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
-1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
-1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
-1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
-1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
-1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
-1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
-1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
-132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
-132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
-132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
-132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
-132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
-132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
-1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
-1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
-1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
-1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
-1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
-1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
-1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
-1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
-1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
-1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
-133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
-133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
-133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
-133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
-133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
-133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
-1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
-1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
-1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
-1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
-1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
-1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
-1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
-1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
-1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
-134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
-134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
-134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
-134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
-134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
-134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
-1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
-1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
-1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
-1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
-1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
-1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
-1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
-1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
-1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
-1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
-135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
-1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
-1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
-1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
-1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
-1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
-1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
-1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
-1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
-1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
-1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
-1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
-1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
-1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
-1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
-1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
-1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
-137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
-137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
-137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
-13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
-13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
-13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
-13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
-13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
-13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
-13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
-13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
-13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
-13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
-13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
-13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
-13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
-13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
-13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
-13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
-13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
-13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
-13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
-13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
-13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
-13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
-13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
-13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
-13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
-13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
-13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
-13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
-13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
-13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
-13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
-13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
-13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
-13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
-13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
-13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
-13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
-13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
-13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
-13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
-13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
-13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
-13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
-13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
-13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
-13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
-13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
-13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
-13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
-13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
-13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
-13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
-13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
-13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
-13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
-13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
-13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
-13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
-13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
-13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
-13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
-13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
-13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
-13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
-13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
-13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
-13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
-13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
-13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
-13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
-13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
-13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
-13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
-13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
-13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
-13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
-13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
-13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
-13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
-13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
-13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
-13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
-13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
-13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
-13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
-1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
-1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
-1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
-1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
-1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
-1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
-1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
-1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
-1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
-140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
-140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
-140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
-140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
-140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
-140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
-1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
-1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
-1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
-1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
-1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
-1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
-1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
-1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
-1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
-1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
-141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
-141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
-141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
-141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
-141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
-141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
-1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
-1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
-1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
-1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
-1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
-1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
-1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
-1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
-1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
-1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
-142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
-142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
-142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
-142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
-142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
-142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
-1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
-1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
-1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
-1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
-1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
-1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
-1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
-1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
-1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
-1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
-143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
-143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
-143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
-143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
-143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
-143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
-1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
-1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
-1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
-1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
-1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
-1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
-1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
-1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
-1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
-1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
-144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
-144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
-144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
-144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
-144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
-144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
-1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
-1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
-1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
-1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
-1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
-1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
-1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
-1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
-1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
-1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
-145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
-145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
-145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
-145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
-145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
-145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
-1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
-1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
-1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
-1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
-1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
-1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
-1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
-1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
-1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
-1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
-146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
-146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
-146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
-146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
-146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
-146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
-1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
-1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
-1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
-1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
-1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
-1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
-1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
-1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
-1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
-1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
-147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
-147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
-147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
-147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
-147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
-147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
-1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
-1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
-1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
-1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
-1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
-1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
-1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
-1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
-1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
-1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
-148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
-148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
-148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
-148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
-148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
-148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
-1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
-1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
-1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
-1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
-1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
-1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
-1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
-1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
-1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
-1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
-149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
-149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
-149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
-149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
-149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
-149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
-14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
-14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
-14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
-14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
-14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
-14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
-14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
-14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
-14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
-14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
-14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
-14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
-14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
-14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
-14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
-14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
-14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
-14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
-14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
-14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
-14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
-14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
-14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
-14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
-14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
-14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
-14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
-14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
-14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
-14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
-14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
-14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
-14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
-14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
-14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
-14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
-14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
-14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
-14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
-14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
-14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
-14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
-14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
-14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
-14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
-14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
-14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
-14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
-14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
-14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
-14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
-14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
-14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
-14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
-14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
-14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
-14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
-14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
-14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
-14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
-14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
-14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
-14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
-14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
-14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
-14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
-14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
-14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
-14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
-14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
-14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
-14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
-14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
-14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
-14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
-14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
-14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
-14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
-14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
-14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
-14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
-14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
-14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
-14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
-14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
-14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
-14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
-14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
-14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
-14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
-14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
-14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
-14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
-14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
-14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
-14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
-1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
-1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
-1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
-1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
-1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
-1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
-1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
-1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
-1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
-1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
-150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
-150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
-150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
-150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
-150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
-150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
-1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
-1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
-1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
-1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
-1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
-1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
-1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
-1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
-1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
-1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
-151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
-151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
-151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
-151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
-151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
-151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
-1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
-1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
-1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
-1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
-1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
-1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
-1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
-1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
-1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
-1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
-152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
-152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
-152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
-152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
-152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
-152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
-1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
-1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
-1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
-1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
-1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
-1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
-1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
-1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
-1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
-1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
-153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
-153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
-153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
-153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
-153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
-153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
-1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
-1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
-1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
-1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
-1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
-1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
-1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
-1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
-1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
-1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
-154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
-154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
-154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
-154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
-154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
-154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
-1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
-1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
-1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
-1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
-1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
-1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
-1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
-1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
-1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
-1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
-155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
-155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
-155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
-155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
-155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
-155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
-1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
-1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
-1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
-1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
-1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
-1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
-1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
-1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
-1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
-1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
-156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
-156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
-156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
-156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
-156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
-156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
-1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
-1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
-1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
-1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
-1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
-1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
-1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
-1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
-1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
-1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
-157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
-157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
-157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
-157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
-157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
-157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
-1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
-1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
-1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
-1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
-1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
-1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
-1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
-1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
-1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
-1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
-158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
-158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
-158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
-158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
-158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
-158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
-1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
-1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
-1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
-1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
-1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
-1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
-1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
-1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
-1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
-1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
-159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
-159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
-159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
-159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
-159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
-159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
-15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
-15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
-15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
-15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
-15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
-15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
-15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
-15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
-15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
-15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
-15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
-15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
-15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
-15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
-15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
-15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
-15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
-15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
-15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
-15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
-15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
-15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
-15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
-15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
-15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
-15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
-15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
-15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
-15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
-15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
-15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
-15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
-15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
-15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
-15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
-15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
-15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
-15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
-15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
-15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
-15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
-15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
-15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
-15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
-15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
-15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
-15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
-15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
-15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
-15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
-15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
-15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
-15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
-15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
-15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
-15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
-15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
-15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
-15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
-15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
-15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
-15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
-15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
-15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
-15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
-15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
-15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
-15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
-15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
-15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
-15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
-15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
-15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
-15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
-15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
-15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
-15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
-15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
-15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
-15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
-15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
-15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
-15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
-15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
-15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
-15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
-15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
-15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
-15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
-15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
-15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
-15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
-15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
-15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
-15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
-15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
-1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
-1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
-1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
-1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
-1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
-1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
-1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
-1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
-1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
-1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
-160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
-160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
-160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
-160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
-160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
-160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
-1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
-1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
-1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
-1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
-1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
-1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
-1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
-1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
-1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
-1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
-161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
-161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
-161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
-161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
-161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
-161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
-1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
-1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
-1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
-1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
-1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
-1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
-1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
-1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
-1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
-1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
-162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
-162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
-162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
-162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
-162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
-162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
-1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
-1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
-1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
-1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
-1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
-1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
-1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
-1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
-1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
-1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
-163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
-163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
-163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
-163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
-163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
-163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
-1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
-1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
-1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
-1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
-1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
-1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
-1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
-1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
-1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
-1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
-164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
-164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
-164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
-164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
-164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
-164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
-1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
-1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
-1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
-1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
-1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
-1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
-1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
-1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
-1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
-1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
-165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
-165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
-165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
-165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
-165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
-165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
-1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
-1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
-1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
-1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
-1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
-1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
-1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
-1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
-1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
-1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
-166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
-166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
-166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
-166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
-166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
-166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
-1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
-1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
-1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
-1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
-1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
-1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
-1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
-1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
-1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
-1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
-1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
-1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
-1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
-1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
-1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
-1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
-1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
-168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
-168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
-168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
-168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
-168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
-168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
-1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
-1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
-1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
-1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
-1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
-1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
-1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
-1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
-1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
-1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
-169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
-169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
-169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
-16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
-16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
-16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
-16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
-16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
-16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
-16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
-16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
-16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
-16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
-16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
-16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
-16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
-16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
-16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
-16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
-16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
-16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
-16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
-16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
-16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
-16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
-16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
-16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
-16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
-16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
-16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
-16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
-16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
-16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
-16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
-16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
-16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
-16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
-16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
-16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
-16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
-16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
-16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
-16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
-16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
-16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
-16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
-16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
-16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
-16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
-16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
-16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
-16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
-16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
-16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
-16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
-16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
-16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
-16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
-16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
-16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
-16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
-16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
-16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
-16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
-16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
-16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
-16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
-16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
-16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
-16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
-16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
-16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
-16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
-16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
-16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
-16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
-16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
-16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
-16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
-16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
-16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
-16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;;
-16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;;
-16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;;
-1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
-1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
-1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
-1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
-1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
-1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
-1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
-1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
-1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
-1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
-178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
-178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
-178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
-178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
-178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
-178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
-1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
-1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
-1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
-1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
-1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
-1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
-1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
-1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
-1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
-1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
-179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
-179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
-179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
-179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
-179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
-179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
-17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
-17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
-17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
-17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
-17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
-17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
-17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
-17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
-17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
-17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
-17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
-17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
-17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
-17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
-17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
-17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
-17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
-17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
-17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
-17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
-17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;;
-17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;;
-17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
-17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
-17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
-17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
-17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
-17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
-17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
-17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
-17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
-17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
-17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
-17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
-17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
-17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
-17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
-17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
-17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
-17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
-17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
-17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
-17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
-17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
-17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
-17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
-17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
-17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
-17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
-17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
-17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
-17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
-17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
-17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
-17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;;
-17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
-17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
-17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
-17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
-17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;;
-17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
-1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
-1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
-1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
-1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
-1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
-1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
-1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
-1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
-1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
-180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
-180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;;
-180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;;
-180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;;
-180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
-1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
-1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
-1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
-1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
-1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
-1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
-1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
-1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
-1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
-1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
-1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
-1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
-1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
-1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
-1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
-1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
-1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
-1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
-1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
-1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
-182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
-182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
-182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
-182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
-182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
-182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
-1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
-1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
-1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
-1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
-1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
-1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
-1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
-1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
-1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
-1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
-183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
-183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
-183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
-183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
-183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
-183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
-1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
-1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
-1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
-1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
-1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
-1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
-1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
-1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
-1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
-1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
-184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
-184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
-184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
-184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
-184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
-184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
-1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
-1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
-1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
-1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
-1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
-1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
-1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
-1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
-1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
-1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
-185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
-185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
-185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
-185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
-185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
-185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
-1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
-1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
-1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
-1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
-1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
-1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
-1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
-1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
-1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
-1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
-186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
-186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
-186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
-186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
-186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
-186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
-1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
-1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
-1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
-1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
-1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
-1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
-1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
-1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
-1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
-1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
-1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
-1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
-1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
-1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
-1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
-1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
-1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
-1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
-188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
-188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
-188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
-188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
-188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
-188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
-1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
-1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
-1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
-1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
-1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
-1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
-1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
-1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
-1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
-189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
-189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
-189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
-189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
-189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
-18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
-18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
-18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
-18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
-18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
-18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
-18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
-18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
-18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
-18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
-1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
-1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
-1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
-1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
-1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
-1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
-1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
-1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
-1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
-1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
-1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
-1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
-1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
-1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
-1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
-1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
-1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
-1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
-1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
-1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
-1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
-1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
-1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
-1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
-1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
-1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
-1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
-1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
-1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
-1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
-1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
-1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
-1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
-1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
-1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
-1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
-1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
-1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
-1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
-1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
-1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
-1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
-1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
-1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
-1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
-1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
-1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
-1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
-1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
-1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
-1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
-1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
-1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
-1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
-1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
-1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
-1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
-1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
-1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
-1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
-1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
-1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
-1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
-1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
-1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
-1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
-1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
-1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
-1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
-1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
-1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
-1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
-1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
-1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
-1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
-1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
-1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
-1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
-1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
-1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
-1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
-1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
-1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
-1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
-1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
-1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
-1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
-1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
-1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
-1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
-1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
-1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
-1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
-1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
-1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
-1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
-1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
-1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
-1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
-1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
-1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
-1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
-1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
-1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
-1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
-1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
-1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
-1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
-1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
-1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
-1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
-1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
-1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
-1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
-1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
-1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
-1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
-1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
-1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
-1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
-1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
-1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
-1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
-1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
-1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
-1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
-1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
-1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
-1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
-1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
-1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
-1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
-1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
-1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
-1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
-1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
-1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
-1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
-1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
-1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
-1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
-1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
-1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
-1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
-1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
-1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
-1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
-1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
-1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
-1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
-1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
-1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
-1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
-1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
-1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
-1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
-1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
-1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
-1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
-1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
-1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
-1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
-1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
-1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
-1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
-1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
-1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
-1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
-1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
-1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
-1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
-1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
-1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
-1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
-1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
-1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
-1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
-1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
-1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
-1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
-1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
-1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
-1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
-1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
-1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
-1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
-1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
-1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
-1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
-1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
-1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
-1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
-1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
-1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
-1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
-1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
-1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
-1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
-1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
-1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
-1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
-1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
-1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
-1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
-1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
-1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
-1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
-1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
-1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
-1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
-1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
-1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
-1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
-1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
-1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
-1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
-1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
-1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
-1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
-1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
-1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
-1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
-1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
-1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
-1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
-1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
-1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
-1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
-1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
-1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
-1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
-1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
-1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
-1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
-1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
-1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
-1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
-1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
-1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
-1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
-1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
-1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
-1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
-1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
-1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
-1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
-1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
-1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
-1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
-1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
-1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
-1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
-1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
-1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
-1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
-1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
-1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
-1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
-1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
-1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
-1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
-1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
-1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
-1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
-1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
-1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
-1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
-1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
-1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
-1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
-1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
-1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
-1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
-1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
-1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
-1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
-1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
-1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
-1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
-1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
-1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
-1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
-1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
-1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
-1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
-1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
-1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
-1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
-1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
-1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
-1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
-1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
-1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
-1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
-1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
-1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
-1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
-1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
-1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
-1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
-1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
-1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
-1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
-1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
-1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
-1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
-1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
-1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
-1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
-1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
-1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
-1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
-1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
-1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
-1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
-1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
-1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
-1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
-1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
-1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
-1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
-1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
-1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
-1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
-1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
-1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
-1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
-1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
-1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
-1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
-1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
-1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
-1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
-1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
-1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
-1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
-1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
-1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
-1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
-1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
-1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
-1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
-1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
-1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
-1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
-1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
-1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
-1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
-1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
-1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
-1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
-1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
-1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
-1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
-1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
-1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
-1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
-1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
-1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
-1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
-1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
-1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
-1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
-1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
-1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
-1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
-1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
-1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
-1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
-1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
-1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
-1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
-1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
-1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
-1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
-1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
-1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
-1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
-1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
-1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
-1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
-1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
-1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
-1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
-1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
-1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
-1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
-1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
-1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
-1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
-1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
-1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
-1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
-1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
-1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
-1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
-1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
-1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
-1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
-1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
-1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
-1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
-1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
-1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
-1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
-1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
-1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
-1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
-1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
-1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
-1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
-1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
-1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
-1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
-1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
-1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
-1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
-1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
-1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
-1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
-1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
-1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
-1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
-1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
-1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
-1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
-1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
-1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
-1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
-1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
-1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
-1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
-1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
-1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
-1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
-1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
-1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
-1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
-1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
-1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
-1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
-1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
-1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
-1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
-1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
-1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
-1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
-1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
-1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
-1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
-1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
-1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
-1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
-1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
-1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
-1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
-1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
-1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
-1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
-1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
-1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
-1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
-1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
-1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
-1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
-1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
-1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
-1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
-1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
-1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
-1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
-1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
-1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
-1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
-1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
-1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
-1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
-1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
-1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
-2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
-2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
-2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
-2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
-200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
-200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
-200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
-200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
-200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
-2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
-2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
-2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
-2013;EN DASH;Pd;0;ON;;;;;N;;;;;
-2014;EM DASH;Pd;0;ON;;;;;N;;;;;
-2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
-2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
-2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
-2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
-2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
-201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
-201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
-201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
-201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
-201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
-201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
-2020;DAGGER;Po;0;ON;;;;;N;;;;;
-2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
-2022;BULLET;Po;0;ON;;;;;N;;;;;
-2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
-2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
-2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
-2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
-2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
-2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
-2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
-202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
-202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
-202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
-202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
-202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
-202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
-2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
-2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
-2032;PRIME;Po;0;ET;;;;;N;;;;;
-2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
-2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
-2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
-2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
-2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
-2038;CARET;Po;0;ON;;;;;N;;;;;
-2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
-203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
-203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
-203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
-203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
-203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
-203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
-2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
-2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
-2042;ASTERISM;Po;0;ON;;;;;N;;;;;
-2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
-2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
-2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
-2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
-2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
-2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
-204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
-204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
-204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
-204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
-206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
-206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
-206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
-206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
-206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
-206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
-2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
-2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
-2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
-2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
-2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
-2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
-2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
-207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
-207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
-207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
-207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
-207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
-207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
-2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
-2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
-2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
-2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
-2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
-2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
-2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
-2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
-2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
-2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
-208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
-208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
-208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
-208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
-208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
-20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
-20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
-20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
-20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
-20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
-20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
-20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
-20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
-20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
-20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
-20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
-20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
-20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
-20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
-20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
-20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
-20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
-20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
-20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
-20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
-20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
-20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
-20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
-20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
-20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
-20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
-20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
-20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
-20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
-20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
-20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
-20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
-20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
-20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
-20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
-20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
-2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
-2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
-2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
-2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
-2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
-2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
-2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
-2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
-2108;SCRUPLE;So;0;ON;;;;;N;;;;;
-2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
-210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
-210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
-210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
-210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
-210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
-210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
-2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
-2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
-2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
-2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
-2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
-2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
-2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
-2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
-2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
-2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
-211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
-211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
-211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
-211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
-211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
-211F;RESPONSE;So;0;ON;;;;;N;;;;;
-2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
-2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
-2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
-2123;VERSICLE;So;0;ON;;;;;N;;;;;
-2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
-2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
-2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
-2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
-2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
-2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
-212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
-212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
-212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
-212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
-212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
-212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
-2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
-2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
-2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
-2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
-2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
-2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
-2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
-2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
-2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
-2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
-213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
-2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
-2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
-2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
-2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
-2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
-2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
-2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
-215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
-215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
-215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
-215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
-215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
-215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
-2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
-2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
-2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
-2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
-2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
-2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
-2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
-2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
-2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
-2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
-216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
-216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
-216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
-216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
-216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
-216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
-2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
-2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
-2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
-2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
-2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
-2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
-2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
-2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
-2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
-2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
-217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
-217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
-217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
-217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
-217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
-217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
-2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
-2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
-2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
-2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
-2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
-2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
-2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
-2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
-2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
-2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
-2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
-2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
-2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
-2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
-219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
-219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
-219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
-219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
-219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
-219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
-21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
-21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
-21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
-21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
-21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
-21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
-21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
-21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
-21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
-21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
-21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
-21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
-21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
-21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
-21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
-21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
-21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
-21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
-21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
-21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
-21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
-21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
-21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
-21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
-21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
-21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
-21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
-21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
-21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
-21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
-21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
-21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
-21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
-21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
-21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
-21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
-21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
-21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
-21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
-21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
-21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
-21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
-21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
-21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
-21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
-21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
-21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
-21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
-21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
-21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
-21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
-21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
-21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
-21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
-21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
-21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
-21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
-21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
-21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
-21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
-21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
-21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
-21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
-21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
-21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
-21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
-21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
-21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
-21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
-21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
-21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
-21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
-21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
-21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
-21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
-21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
-21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
-21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
-21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
-21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
-21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
-2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
-2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
-2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
-2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
-2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
-2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
-2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
-2207;NABLA;Sm;0;ON;;;;;N;;;;;
-2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
-2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
-220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
-220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
-220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
-220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
-220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
-220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
-2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
-2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
-2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
-2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
-2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
-2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
-2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
-2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
-2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
-2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
-221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
-221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
-221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
-221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
-221E;INFINITY;Sm;0;ON;;;;;N;;;;;
-221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
-2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
-2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
-2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
-2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
-2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
-2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
-2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
-2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
-222A;UNION;Sm;0;ON;;;;;N;;;;;
-222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
-222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
-222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
-2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
-2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
-2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
-2236;RATIO;Sm;0;ON;;;;;N;;;;;
-2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
-2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
-2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
-223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
-223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
-223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
-223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
-223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
-223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
-2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
-2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
-2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
-2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
-2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
-2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
-224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
-224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
-2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
-2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
-2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
-2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
-2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
-2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
-225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
-225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
-225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
-225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
-225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
-225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
-2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
-2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
-2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
-2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
-2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
-2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
-2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
-2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
-2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
-226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
-226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
-226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
-226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
-226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
-226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
-2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
-2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
-2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
-2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
-2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
-2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
-2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
-2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
-2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
-2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
-227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
-227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
-2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
-2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
-2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
-2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
-2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
-2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
-2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
-228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
-228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
-228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
-228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
-228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
-228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
-2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
-2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
-2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
-2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
-2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
-2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
-2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
-229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
-229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
-229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
-229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
-229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
-22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
-22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
-22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
-22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
-22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
-22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
-22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
-22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
-22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
-22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
-22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
-22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
-22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
-22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
-22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
-22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
-22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
-22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
-22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
-22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
-22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
-22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
-22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
-22BB;XOR;Sm;0;ON;;;;;N;;;;;
-22BC;NAND;Sm;0;ON;;;;;N;;;;;
-22BD;NOR;Sm;0;ON;;;;;N;;;;;
-22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
-22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
-22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
-22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
-22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
-22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
-22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
-22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
-22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
-22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
-22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
-22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
-22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
-22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
-22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
-22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
-22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
-22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
-22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
-22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
-22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
-22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
-22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
-22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
-22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
-22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
-22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
-22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
-22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
-22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
-22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
-22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
-22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
-22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
-22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
-22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
-22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
-22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
-22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
-22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
-22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
-22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
-22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
-2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
-2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
-2302;HOUSE;So;0;ON;;;;;N;;;;;
-2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
-2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
-2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
-2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
-2307;WAVY LINE;So;0;ON;;;;;N;;;;;
-2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
-2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
-230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
-230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
-230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
-230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
-230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
-230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
-2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
-2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
-2312;ARC;So;0;ON;;;;;N;;;;;
-2313;SEGMENT;So;0;ON;;;;;N;;;;;
-2314;SECTOR;So;0;ON;;;;;N;;;;;
-2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
-2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
-2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
-2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
-2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
-231A;WATCH;So;0;ON;;;;;N;;;;;
-231B;HOURGLASS;So;0;ON;;;;;N;;;;;
-231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
-231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
-231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
-231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
-2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
-2322;FROWN;So;0;ON;;;;;N;;;;;
-2323;SMILE;So;0;ON;;;;;N;;;;;
-2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
-2325;OPTION KEY;So;0;ON;;;;;N;;;;;
-2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
-2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
-2328;KEYBOARD;So;0;ON;;;;;N;;;;;
-2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
-232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
-232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
-232C;BENZENE RING;So;0;ON;;;;;N;;;;;
-232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
-232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
-232F;SYMMETRY;So;0;ON;;;;;N;;;;;
-2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
-2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
-2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
-2333;SLOPE;So;0;ON;;;;;N;;;;;
-2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
-2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
-2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
-2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
-2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
-2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
-233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
-233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
-233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
-233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
-233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
-233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
-2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
-2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
-2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
-2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
-2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
-2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
-2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
-2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
-2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
-2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
-234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
-234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
-234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
-234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
-234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
-234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
-2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
-2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
-2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
-2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
-2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
-2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
-2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
-2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
-2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
-2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
-235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
-235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
-235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
-235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
-235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
-235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
-2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
-2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
-2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
-2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
-2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
-2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
-2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
-2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
-2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
-2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
-236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
-236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
-236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
-236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
-236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
-236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
-2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
-2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
-2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
-2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
-2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
-2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
-2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
-2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
-2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
-2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
-237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
-237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
-237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
-237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
-237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
-2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
-2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
-2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
-2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
-2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
-2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
-2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
-2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
-2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
-2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
-238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
-238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
-238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
-238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
-238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
-238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
-2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
-2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
-2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
-2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
-2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
-2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
-2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
-2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
-2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
-2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
-239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
-2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
-2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
-2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
-2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
-2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
-2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
-2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
-2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
-2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
-2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
-240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
-240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
-240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
-240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
-240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
-240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
-2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
-2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
-2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
-2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
-2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
-2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
-2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
-2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
-2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
-2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
-241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
-241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
-241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
-241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
-241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
-241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
-2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
-2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
-2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
-2423;OPEN BOX;So;0;ON;;;;;N;;;;;
-2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
-2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
-2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
-2440;OCR HOOK;So;0;ON;;;;;N;;;;;
-2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
-2442;OCR FORK;So;0;ON;;;;;N;;;;;
-2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
-2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
-2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
-2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
-2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
-2448;OCR DASH;So;0;ON;;;;;N;;;;;
-2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
-244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
-2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
-2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
-2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
-2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
-2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
-2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
-2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
-2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
-2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
-2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
-246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
-246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
-246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
-246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
-246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
-246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
-2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
-2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
-2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
-2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
-2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
-2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
-2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
-2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
-2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
-2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
-247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
-247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
-247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
-247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
-247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
-247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
-2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
-2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
-2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
-2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
-2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
-2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
-2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
-2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
-2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
-2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
-248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
-248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
-248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
-248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
-248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
-248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
-2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
-2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
-2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
-2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
-2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
-2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
-2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
-2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
-2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
-2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
-249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
-249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
-249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
-249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
-249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
-249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
-24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
-24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
-24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
-24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
-24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
-24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
-24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
-24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
-24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
-24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
-24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
-24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
-24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
-24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
-24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
-24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
-24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
-24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
-24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
-24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
-24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
-24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
-24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
-24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
-24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
-24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
-24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
-24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
-24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
-24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
-24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
-24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
-24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
-24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
-24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
-24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
-24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
-24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
-24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
-24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
-24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
-24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
-24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
-24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
-24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
-24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
-24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
-24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
-24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
-24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
-24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
-24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
-24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
-24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
-24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
-24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
-24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
-24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
-24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
-24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
-24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
-24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
-24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
-24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
-24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
-24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
-24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
-24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
-24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
-24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
-24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
-24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
-24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
-24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
-24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
-2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
-2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
-2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
-2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
-2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
-2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
-2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
-2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
-2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
-2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
-250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
-250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
-250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
-250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
-250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
-250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
-2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
-2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
-2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
-2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
-2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
-2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
-2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
-2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
-2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
-2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
-251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
-251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
-251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
-251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
-251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
-251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
-2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
-2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
-2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
-2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
-2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
-2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
-2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
-2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
-2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
-2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
-252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
-252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
-252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
-252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
-252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
-252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
-2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
-2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
-2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
-2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
-2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
-2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
-2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
-2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
-2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
-2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
-253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
-253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
-253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
-253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
-253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
-253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
-2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
-2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
-2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
-2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
-2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
-2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
-2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
-2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
-2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
-2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
-254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
-254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
-254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
-254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
-254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
-254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
-2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
-2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
-2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
-2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
-2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
-2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
-2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
-2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
-2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
-2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
-255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
-255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
-255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
-255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
-255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
-255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
-2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
-2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
-2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
-2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
-2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
-2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
-2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
-2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
-2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
-2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
-256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
-256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
-256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
-256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
-256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
-256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
-2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
-2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
-2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
-2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
-2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
-2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
-2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
-2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
-2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
-2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
-257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
-257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
-257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
-257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
-257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
-257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
-2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
-2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
-2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
-2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
-2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
-2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
-258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
-258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
-258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
-258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
-2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
-2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
-2593;DARK SHADE;So;0;ON;;;;;N;;;;;
-2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
-25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
-25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
-25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
-25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
-25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
-25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
-25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
-25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
-25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
-25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
-25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
-25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
-25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
-25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
-25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
-25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
-25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
-25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
-25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
-25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
-25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
-25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
-25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
-25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
-25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
-25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
-25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
-25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
-25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
-25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
-25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
-25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
-25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
-25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
-25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
-25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
-25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
-25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
-25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
-25C9;FISHEYE;So;0;ON;;;;;N;;;;;
-25CA;LOZENGE;So;0;ON;;;;;N;;;;;
-25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
-25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
-25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
-25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
-25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
-25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
-25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
-25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
-25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
-25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
-25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
-25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
-25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
-25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
-25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
-25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
-25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
-25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
-25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
-25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
-25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
-25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
-25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
-25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
-25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
-25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
-25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
-2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
-2601;CLOUD;So;0;ON;;;;;N;;;;;
-2602;UMBRELLA;So;0;ON;;;;;N;;;;;
-2603;SNOWMAN;So;0;ON;;;;;N;;;;;
-2604;COMET;So;0;ON;;;;;N;;;;;
-2605;BLACK STAR;So;0;ON;;;;;N;;;;;
-2606;WHITE STAR;So;0;ON;;;;;N;;;;;
-2607;LIGHTNING;So;0;ON;;;;;N;;;;;
-2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
-2609;SUN;So;0;ON;;;;;N;;;;;
-260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
-260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
-260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
-260D;OPPOSITION;So;0;ON;;;;;N;;;;;
-260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
-260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
-2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
-2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
-2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
-2613;SALTIRE;So;0;ON;;;;;N;;;;;
-2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
-261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
-261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
-261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
-2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
-2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
-2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
-2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
-2624;CADUCEUS;So;0;ON;;;;;N;;;;;
-2625;ANKH;So;0;ON;;;;;N;;;;;
-2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
-2627;CHI RHO;So;0;ON;;;;;N;;;;;
-2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
-2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
-262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
-262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
-262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
-262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
-262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
-262F;YIN YANG;So;0;ON;;;;;N;;;;;
-2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
-2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
-2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
-2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
-2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
-2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
-2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
-2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
-2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
-2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
-263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
-263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
-263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
-263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
-263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
-263F;MERCURY;So;0;ON;;;;;N;;;;;
-2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
-2641;EARTH;So;0;ON;;;;;N;;;;;
-2642;MALE SIGN;So;0;ON;;;;;N;;;;;
-2643;JUPITER;So;0;ON;;;;;N;;;;;
-2644;SATURN;So;0;ON;;;;;N;;;;;
-2645;URANUS;So;0;ON;;;;;N;;;;;
-2646;NEPTUNE;So;0;ON;;;;;N;;;;;
-2647;PLUTO;So;0;ON;;;;;N;;;;;
-2648;ARIES;So;0;ON;;;;;N;;;;;
-2649;TAURUS;So;0;ON;;;;;N;;;;;
-264A;GEMINI;So;0;ON;;;;;N;;;;;
-264B;CANCER;So;0;ON;;;;;N;;;;;
-264C;LEO;So;0;ON;;;;;N;;;;;
-264D;VIRGO;So;0;ON;;;;;N;;;;;
-264E;LIBRA;So;0;ON;;;;;N;;;;;
-264F;SCORPIUS;So;0;ON;;;;;N;;;;;
-2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
-2651;CAPRICORN;So;0;ON;;;;;N;;;;;
-2652;AQUARIUS;So;0;ON;;;;;N;;;;;
-2653;PISCES;So;0;ON;;;;;N;;;;;
-2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
-2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
-2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
-2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
-2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
-2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
-265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
-265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
-265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
-265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
-265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
-265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
-2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
-2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
-2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
-2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
-2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
-2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
-2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
-2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
-2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
-2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
-266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
-266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
-266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
-266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
-266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
-266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
-2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
-2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
-2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
-2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
-2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
-2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
-2708;AIRPLANE;So;0;ON;;;;;N;;;;;
-2709;ENVELOPE;So;0;ON;;;;;N;;;;;
-270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
-270D;WRITING HAND;So;0;ON;;;;;N;;;;;
-270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
-270F;PENCIL;So;0;ON;;;;;N;;;;;
-2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
-2711;WHITE NIB;So;0;ON;;;;;N;;;;;
-2712;BLACK NIB;So;0;ON;;;;;N;;;;;
-2713;CHECK MARK;So;0;ON;;;;;N;;;;;
-2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
-2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-2717;BALLOT X;So;0;ON;;;;;N;;;;;
-2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
-2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
-271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
-271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
-271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
-271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
-271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
-271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
-2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
-2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
-2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
-2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
-2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
-272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
-272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
-272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
-272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
-272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
-272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
-2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
-2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
-2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
-2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
-2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
-2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
-2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
-273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
-273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
-273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
-273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
-2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
-2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
-2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
-2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
-2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
-2747;SPARKLE;So;0;ON;;;;;N;;;;;
-2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
-2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
-274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
-274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
-274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
-274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
-2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
-2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
-2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
-275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
-275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
-2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
-2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
-2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
-2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
-2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
-2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
-2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
-2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
-277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
-277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
-277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
-277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
-277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
-277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
-2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
-2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
-2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
-2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
-2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
-2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
-2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
-2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
-2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
-2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
-278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
-278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
-278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
-278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
-278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
-278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
-2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
-2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
-2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
-2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
-2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
-2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
-2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
-279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
-279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
-279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
-279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
-279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
-279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
-27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
-27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
-27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
-27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
-27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
-27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
-27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
-27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
-27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
-27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
-27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
-27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
-27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
-27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
-27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
-27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
-27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
-27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
-27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
-27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
-27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
-27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
-27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
-27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
-27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
-27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
-27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
-2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
-2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
-2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
-2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
-2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
-2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
-2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
-2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
-2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
-2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
-280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
-280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
-280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
-280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
-280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
-280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
-2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
-2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
-2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
-2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
-2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
-2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
-2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
-2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
-2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
-2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
-281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
-281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
-281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
-281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
-281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
-281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
-2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
-2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
-2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
-2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
-2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
-2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
-2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
-2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
-2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
-2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
-282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
-282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
-282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
-282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
-282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
-282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
-2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
-2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
-2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
-2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
-2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
-2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
-2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
-2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
-2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
-2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
-283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
-283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
-283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
-283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
-283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
-283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
-2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
-2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
-2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
-2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
-2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
-2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
-2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
-2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
-2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
-2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
-284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
-284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
-284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
-284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
-284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
-284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
-2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
-2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
-2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
-2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
-2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
-2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
-2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
-2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
-2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
-2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
-285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
-285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
-285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
-285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
-285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
-285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
-2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
-2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
-2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
-2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
-2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
-2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
-2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
-2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
-2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
-2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
-286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
-286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
-286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
-286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
-286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
-286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
-2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
-2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
-2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
-2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
-2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
-2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
-2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
-2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
-2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
-2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
-287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
-287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
-287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
-287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
-287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
-287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
-2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
-2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
-2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
-2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
-2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
-2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
-2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
-2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
-2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
-2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
-288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
-288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
-288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
-288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
-288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
-288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
-2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
-2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
-2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
-2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
-2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
-2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
-2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
-2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
-2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
-2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
-289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
-289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
-289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
-289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
-289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
-289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
-28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
-28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
-28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
-28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
-28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
-28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
-28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
-28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
-28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
-28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
-28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
-28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
-28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
-28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
-28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
-28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
-28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
-28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
-28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
-28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
-28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
-28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
-28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
-28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
-28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
-28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
-28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
-28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
-28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
-28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
-28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
-28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
-28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
-28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
-28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
-28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
-28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
-28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
-28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
-28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
-28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
-28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
-28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
-28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
-28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
-28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
-28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
-28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
-28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
-28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
-28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
-28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
-28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
-28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
-28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
-28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
-28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
-28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
-28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
-28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
-28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
-28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
-28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
-28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
-28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
-28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
-28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
-28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
-28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
-28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
-28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
-28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
-28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
-28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
-28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
-28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
-28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
-28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
-28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
-28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
-28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
-28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
-28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
-28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
-28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
-28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
-28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
-28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
-28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
-28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
-28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
-28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
-28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
-28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
-28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
-28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
-2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
-2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
-2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
-2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
-2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
-2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
-2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
-2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
-2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
-2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
-2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
-2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
-2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
-2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
-2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
-2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
-2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
-2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
-2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
-2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
-2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
-2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
-2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
-2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
-2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
-2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
-2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
-2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
-2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
-2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
-2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
-2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
-2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
-2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
-2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
-2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
-2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
-2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
-2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
-2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
-2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
-2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
-2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
-2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
-2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
-2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
-2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
-2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
-2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
-2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
-2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
-2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
-2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
-2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
-2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
-2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
-2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
-2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
-2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
-2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
-2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
-2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
-2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
-2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
-2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
-2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
-2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
-2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
-2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
-2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
-2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
-2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
-2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
-2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
-2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
-2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
-2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
-2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
-2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
-2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
-2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
-2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
-2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
-2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
-2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
-2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
-2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
-2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
-2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
-2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
-2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
-2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
-2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
-2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
-2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
-2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
-2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
-2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
-2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
-2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
-2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
-2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
-2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
-2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
-2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
-2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
-2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
-2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
-2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
-2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
-2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
-2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
-2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
-2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
-2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
-2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
-2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
-2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
-2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
-2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
-2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
-2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
-2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
-2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
-2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
-2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
-2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
-2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
-2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
-2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
-2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
-2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
-2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
-2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
-2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
-2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
-2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
-2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
-2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
-2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
-2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
-2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
-2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
-2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
-2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
-2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
-2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
-2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
-2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
-2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
-2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
-2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
-2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
-2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
-2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
-2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
-2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
-2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
-2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
-2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
-2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
-2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
-2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
-2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
-2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
-2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
-2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
-2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
-2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
-2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
-2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
-2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
-2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
-2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
-2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
-2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
-2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
-2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
-2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
-2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
-2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
-2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
-2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
-2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
-2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
-2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
-2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
-2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
-2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
-2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
-2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
-2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
-2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
-2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
-2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
-2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
-2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
-2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
-2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
-2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
-2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
-2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
-2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
-2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
-2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
-2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
-2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
-2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
-2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
-2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
-2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
-2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
-2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
-2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
-2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
-2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
-2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
-2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
-2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
-2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
-2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
-2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
-2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
-2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
-2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
-2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
-2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
-2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
-2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
-2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
-2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
-2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
-2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
-2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
-2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
-2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
-2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
-2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
-2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
-2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
-2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
-2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
-2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
-2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
-2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
-2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
-2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
-2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
-2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
-2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
-2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
-2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
-2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
-2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
-2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
-2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
-2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
-2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
-2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
-2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
-2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
-2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
-2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
-2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
-2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
-2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
-2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
-2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
-2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
-2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
-2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
-2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
-2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
-2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
-2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
-2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
-2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
-2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
-2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
-2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
-2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
-2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
-2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
-2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
-2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
-2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
-2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
-2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
-2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
-2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
-2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
-2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
-2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
-2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
-2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
-2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
-2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
-2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
-2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
-2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
-2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
-2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
-2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
-2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
-2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
-2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
-2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
-2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
-2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
-2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
-2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
-2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
-2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
-2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
-2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
-2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
-2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
-2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
-2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
-2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
-2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
-2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
-2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
-2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
-2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
-2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
-2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
-2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
-2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
-2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
-2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
-2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
-2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
-2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
-2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
-2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
-2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
-2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
-2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
-2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
-2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
-3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
-3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
-3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
-3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
-3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
-3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
-3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
-3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
-3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
-3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
-300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
-300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
-300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
-300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
-300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
-300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
-3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
-3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
-3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
-3013;GETA MARK;So;0;ON;;;;;N;;;;;
-3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
-3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
-3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
-3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
-3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
-3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
-301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
-301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
-301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
-301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
-301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
-301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
-3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
-3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
-3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
-3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
-3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
-3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
-3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
-3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
-3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
-3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
-302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
-302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
-302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
-302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
-302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
-302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
-3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
-3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
-3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
-3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
-3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
-3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
-3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
-3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
-3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
-3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
-303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
-303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
-303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
-3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
-3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
-3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
-3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
-3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
-3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
-3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
-3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
-3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
-304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
-304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
-304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
-304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
-304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
-304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
-3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
-3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
-3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
-3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
-3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
-3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
-3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
-3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
-3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
-3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
-305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
-305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
-305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
-305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
-305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
-305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
-3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
-3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
-3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
-3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
-3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
-3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
-3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
-3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
-3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
-3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
-306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
-306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
-306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
-306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
-306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
-306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
-3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
-3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
-3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
-3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
-3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
-3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
-3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
-3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
-3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
-3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
-307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
-307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
-307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
-307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
-307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
-307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
-3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
-3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
-3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
-3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
-3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
-3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
-3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
-3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
-3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
-3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
-308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
-308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
-308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
-308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
-308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
-308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
-3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
-3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
-3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
-3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
-3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
-3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
-309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
-309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
-309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
-309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
-309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
-30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
-30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
-30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
-30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
-30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
-30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
-30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
-30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
-30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
-30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
-30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
-30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
-30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
-30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
-30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
-30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
-30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
-30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
-30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
-30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
-30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
-30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
-30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
-30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
-30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
-30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
-30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
-30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
-30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
-30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
-30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
-30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
-30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
-30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
-30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
-30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
-30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
-30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
-30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
-30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
-30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
-30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
-30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
-30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
-30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
-30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
-30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
-30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
-30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
-30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
-30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
-30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
-30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
-30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
-30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
-30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
-30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
-30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
-30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
-30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
-30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
-30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
-30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
-30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
-30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
-30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
-30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
-30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
-30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
-30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
-30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
-30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
-30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
-30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
-30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
-30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
-30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
-30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
-30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
-30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
-30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
-30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
-30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
-30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
-30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
-30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
-30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
-30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
-30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
-30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
-30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
-30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
-30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
-30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
-3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
-3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
-3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
-3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
-3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
-310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
-310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
-310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
-310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
-310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
-310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
-3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
-3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
-3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
-3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
-3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
-3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
-3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
-3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
-3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
-3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
-311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
-311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
-311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
-311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
-311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
-311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
-3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
-3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
-3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
-3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
-3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
-3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
-3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
-3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
-3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
-3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
-312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
-312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
-312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
-3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
-3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
-3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
-3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
-3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
-3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
-3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
-3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
-3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
-313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
-313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
-313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
-313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
-313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
-313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
-3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
-3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
-3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
-3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
-3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
-3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
-3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
-3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
-3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
-3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
-314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
-314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
-314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
-314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
-314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
-314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
-3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
-3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
-3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
-3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
-3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
-3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
-3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
-3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
-3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
-3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
-315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
-315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
-315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
-315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
-315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
-315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
-3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
-3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
-3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
-3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
-3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
-3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
-3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
-3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
-3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
-3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
-316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
-316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
-316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
-316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
-316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
-316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
-3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
-3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
-3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
-3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
-3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
-3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
-3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
-3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
-3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
-3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
-317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
-317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
-317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
-317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
-317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
-317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
-3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
-3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
-3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
-3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
-3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
-3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
-3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
-3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
-3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
-3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
-318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
-318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
-318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
-318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
-318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
-3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
-3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
-3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;Kaeriten;;;
-3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;Kaeriten;;;
-3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;Kaeriten;;;
-3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;Kaeriten;;;
-3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
-3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
-3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
-3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
-319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
-319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
-319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
-319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
-319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
-319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
-31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
-31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
-31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
-31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
-31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
-31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
-31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
-31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
-31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
-31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
-31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
-31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
-31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
-31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
-31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
-31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
-31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
-31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
-31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
-31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
-31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
-31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
-31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
-31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
-3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
-3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
-3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
-3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
-3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
-3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
-3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
-3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
-3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
-3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
-320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
-320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
-320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
-320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
-320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
-320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
-3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
-3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
-3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
-3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
-3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
-3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
-3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
-3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
-3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
-3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
-321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
-321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
-321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
-3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;;
-3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;;
-3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;;
-3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;;
-3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;;
-3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;;
-3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;;
-3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;;
-3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;;
-3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;;
-322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
-322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
-322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
-322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
-322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
-322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
-3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
-3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
-3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
-3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
-3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
-3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
-3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
-3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
-3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
-3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
-323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
-323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
-323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
-323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
-323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
-323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
-3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
-3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
-3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
-3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
-3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
-3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
-3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
-3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
-3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
-3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
-3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
-3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
-3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
-3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
-326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
-326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
-326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
-326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
-326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
-326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
-3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
-3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
-3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
-3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
-3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
-3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
-3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
-3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
-3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
-3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
-327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
-327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
-327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
-3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
-3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
-3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
-3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
-3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
-3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
-3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
-3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
-3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
-3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
-328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
-328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
-328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
-328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
-328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
-328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
-3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
-3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
-3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
-3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
-3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
-3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
-3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
-3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
-3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
-3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
-329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
-329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
-329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
-329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
-329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
-329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
-32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
-32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
-32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
-32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
-32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
-32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
-32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
-32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
-32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
-32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
-32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
-32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
-32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
-32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
-32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
-32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
-32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
-32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
-32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
-32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
-32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
-32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
-32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
-32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
-32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
-32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
-32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
-32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
-32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
-32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
-32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
-32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
-32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
-32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
-32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
-32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
-32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
-32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
-32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
-32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
-32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
-32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
-32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
-32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
-32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
-32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
-32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
-32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
-32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
-32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
-32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
-32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
-32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
-32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
-32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
-32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
-32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
-32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
-32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
-32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
-32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
-32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
-32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
-32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
-32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
-32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
-32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
-32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
-32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
-32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
-32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
-32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
-32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
-32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
-32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
-32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
-3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
-3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
-3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
-3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
-3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
-3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
-3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
-3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
-3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
-3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
-330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
-330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
-330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
-330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
-330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
-330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
-3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
-3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
-3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
-3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
-3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
-3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
-3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
-3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
-3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
-3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
-331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
-331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
-331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
-331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
-331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
-331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
-3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
-3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
-3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
-3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
-3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
-3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
-3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
-3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
-3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
-3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
-332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
-332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
-332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
-332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
-332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
-332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
-3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
-3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
-3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
-3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
-3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
-3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
-3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
-3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
-3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
-3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
-333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
-333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
-333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
-333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
-333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
-333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
-3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
-3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
-3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
-3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
-3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
-3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
-3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
-3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
-3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
-3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
-334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
-334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
-334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
-334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
-334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
-334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
-3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
-3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
-3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
-3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
-3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
-3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
-3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
-3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
-3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
-3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
-335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
-335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
-335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
-335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
-335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
-335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
-3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
-3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
-3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
-3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
-3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
-3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
-3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
-3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
-3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
-3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
-336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
-336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
-336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
-336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
-336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
-336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
-3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
-3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
-3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
-3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
-3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
-3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
-3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
-337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
-337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
-337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
-337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
-337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
-3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
-3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
-3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
-3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
-3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
-3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
-3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
-3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
-3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
-3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
-338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
-338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
-338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
-338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
-338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
-338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
-3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
-3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
-3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
-3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
-3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
-3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
-3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
-3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
-3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
-3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
-339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
-339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
-339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
-339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
-339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
-339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
-33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
-33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
-33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
-33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
-33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
-33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
-33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
-33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
-33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
-33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
-33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
-33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
-33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
-33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
-33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
-33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
-33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
-33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
-33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
-33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
-33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
-33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
-33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
-33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
-33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
-33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
-33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
-33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
-33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
-33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
-33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
-33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
-33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
-33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
-33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
-33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
-33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
-33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
-33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
-33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
-33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
-33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
-33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
-33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
-33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
-33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
-33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
-33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
-33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
-33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
-33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
-33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
-33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
-33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
-33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
-33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
-33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
-33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
-33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
-33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
-33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
-33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
-33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
-33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
-33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
-33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
-33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
-33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
-33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
-33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
-33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
-33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
-33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
-33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
-33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
-33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
-33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
-33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
-33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
-33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
-33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
-33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
-33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
-33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
-33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
-33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
-33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
-33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
-33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
-33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
-33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
-33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
-33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
-3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
-4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
-4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
-A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
-A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
-A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
-A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
-A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
-A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
-A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
-A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
-A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
-A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
-A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
-A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
-A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
-A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
-A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
-A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
-A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
-A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
-A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
-A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
-A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
-A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
-A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
-A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
-A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
-A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
-A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
-A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
-A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
-A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
-A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
-A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
-A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
-A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
-A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
-A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
-A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
-A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
-A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
-A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
-A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
-A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
-A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
-A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
-A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
-A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
-A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
-A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
-A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
-A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
-A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
-A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
-A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
-A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
-A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
-A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
-A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
-A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
-A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
-A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
-A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
-A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
-A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
-A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
-A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
-A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
-A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
-A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
-A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
-A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
-A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
-A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
-A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
-A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
-A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
-A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
-A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
-A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
-A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
-A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
-A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
-A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
-A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
-A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
-A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
-A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
-A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
-A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
-A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
-A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
-A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
-A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
-A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
-A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
-A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
-A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
-A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
-A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
-A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
-A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
-A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
-A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
-A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
-A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
-A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
-A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
-A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
-A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
-A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
-A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
-A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
-A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
-A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
-A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
-A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
-A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
-A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
-A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
-A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
-A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
-A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
-A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
-A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
-A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
-A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
-A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
-A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
-A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
-A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
-A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
-A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
-A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
-A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
-A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
-A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
-A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
-A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
-A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
-A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
-A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
-A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
-A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
-A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
-A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
-A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
-A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
-A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
-A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
-A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
-A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
-A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
-A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
-A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
-A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
-A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
-A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
-A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
-A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
-A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
-A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
-A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
-A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
-A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
-A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
-A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
-A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
-A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
-A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
-A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
-A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
-A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
-A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
-A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
-A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
-A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
-A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
-A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
-A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
-A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
-A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
-A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
-A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
-A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
-A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
-A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
-A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
-A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
-A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
-A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
-A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
-A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
-A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
-A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
-A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
-A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
-A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
-A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
-A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
-A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
-A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
-A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
-A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
-A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
-A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
-A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
-A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
-A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
-A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
-A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
-A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
-A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
-A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
-A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
-A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
-A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
-A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
-A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
-A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
-A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
-A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
-A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
-A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
-A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
-A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
-A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
-A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
-A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
-A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
-A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
-A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
-A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
-A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
-A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
-A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
-A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
-A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
-A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
-A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
-A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
-A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
-A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
-A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
-A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
-A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
-A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
-A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
-A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
-A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
-A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
-A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
-A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
-A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
-A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
-A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
-A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
-A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
-A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
-A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
-A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
-A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
-A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
-A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
-A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
-A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
-A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
-A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
-A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
-A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
-A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
-A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
-A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
-A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
-A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
-A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
-A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
-A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
-A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
-A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
-A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
-A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
-A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
-A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
-A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
-A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
-A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
-A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
-A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
-A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
-A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
-A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
-A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
-A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
-A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
-A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
-A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
-A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
-A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
-A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
-A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
-A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
-A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
-A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
-A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
-A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
-A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
-A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
-A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
-A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
-A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
-A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
-A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
-A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
-A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
-A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
-A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
-A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
-A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
-A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
-A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
-A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
-A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
-A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
-A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
-A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
-A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
-A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
-A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
-A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
-A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
-A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
-A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
-A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
-A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
-A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
-A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
-A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
-A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
-A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
-A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
-A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
-A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
-A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
-A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
-A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
-A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
-A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
-A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
-A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
-A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
-A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
-A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
-A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
-A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
-A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
-A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
-A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
-A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
-A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
-A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
-A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
-A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
-A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
-A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
-A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
-A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
-A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
-A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
-A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
-A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
-A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
-A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
-A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
-A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
-A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
-A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
-A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
-A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
-A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
-A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
-A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
-A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
-A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
-A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
-A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
-A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
-A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
-A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
-A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
-A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
-A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
-A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
-A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
-A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
-A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
-A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
-A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
-A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
-A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
-A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
-A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
-A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
-A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
-A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
-A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
-A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
-A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
-A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
-A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
-A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
-A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
-A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
-A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
-A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
-A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
-A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
-A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
-A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
-A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
-A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
-A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
-A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
-A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
-A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
-A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
-A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
-A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
-A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
-A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
-A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
-A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
-A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
-A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
-A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
-A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
-A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
-A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
-A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
-A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
-A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
-A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
-A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
-A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
-A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
-A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
-A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
-A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
-A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
-A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
-A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
-A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
-A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
-A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
-A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
-A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
-A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
-A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
-A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
-A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
-A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
-A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
-A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
-A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
-A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
-A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
-A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
-A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
-A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
-A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
-A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
-A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
-A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
-A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
-A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
-A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
-A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
-A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
-A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
-A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
-A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
-A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
-A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
-A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
-A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
-A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
-A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
-A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
-A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
-A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
-A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
-A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
-A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
-A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
-A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
-A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
-A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
-A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
-A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
-A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
-A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
-A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
-A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
-A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
-A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
-A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
-A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
-A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
-A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
-A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
-A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
-A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
-A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
-A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
-A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
-A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
-A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
-A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
-A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
-A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
-A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
-A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
-A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
-A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
-A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
-A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
-A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
-A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
-A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
-A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
-A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
-A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
-A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
-A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
-A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
-A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
-A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
-A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
-A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
-A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
-A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
-A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
-A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
-A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
-A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
-A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
-A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
-A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
-A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
-A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
-A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
-A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
-A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
-A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
-A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
-A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
-A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
-A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
-A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
-A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
-A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
-A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
-A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
-A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
-A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
-A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
-A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
-A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
-A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
-A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
-A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
-A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
-A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
-A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
-A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
-A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
-A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
-A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
-A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
-A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
-A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
-A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
-A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
-A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
-A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
-A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
-A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
-A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
-A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
-A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
-A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
-A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
-A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
-A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
-A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
-A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
-A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
-A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
-A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
-A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
-A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
-A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
-A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
-A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
-A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
-A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
-A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
-A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
-A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
-A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
-A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
-A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
-A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
-A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
-A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
-A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
-A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
-A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
-A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
-A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
-A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
-A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
-A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
-A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
-A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
-A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
-A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
-A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
-A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
-A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
-A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
-A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
-A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
-A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
-A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
-A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
-A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
-A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
-A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
-A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
-A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
-A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
-A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
-A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
-A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
-A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
-A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
-A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
-A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
-A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
-A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
-A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
-A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
-A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
-A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
-A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
-A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
-A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
-A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
-A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
-A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
-A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
-A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
-A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
-A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
-A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
-A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
-A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
-A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
-A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
-A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
-A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
-A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
-A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
-A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
-A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
-A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
-A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
-A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
-A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
-A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
-A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
-A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
-A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
-A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
-A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
-A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
-A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
-A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
-A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
-A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
-A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
-A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
-A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
-A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
-A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
-A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
-A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
-A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
-A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
-A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
-A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
-A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
-A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
-A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
-A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
-A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
-A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
-A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
-A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
-A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
-A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
-A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
-A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
-A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
-A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
-A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
-A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
-A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
-A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
-A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
-A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
-A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
-A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
-A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
-A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
-A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
-A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
-A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
-A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
-A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
-A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
-A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
-A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
-A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
-A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
-A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
-A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
-A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
-A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
-A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
-A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
-A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
-A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
-A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
-A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
-A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
-A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
-A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
-A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
-A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
-A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
-A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
-A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
-A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
-A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
-A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
-A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
-A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
-A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
-A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
-A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
-A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
-A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
-A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
-A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
-A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
-A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
-A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
-A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
-A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
-A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
-A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
-A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
-A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
-A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
-A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
-A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
-A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
-A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
-A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
-A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
-A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
-A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
-A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
-A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
-A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
-A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
-A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
-A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
-A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
-A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
-A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
-A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
-A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
-A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
-A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
-A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
-A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
-A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
-A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
-A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
-A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
-A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
-A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
-A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
-A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
-A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
-A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
-A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
-A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
-A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
-A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
-A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
-A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
-A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
-A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
-A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
-A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
-A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
-A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
-A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
-A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
-A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
-A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
-A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
-A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
-A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
-A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
-A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
-A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
-A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
-A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
-A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
-A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
-A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
-A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
-A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
-A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
-A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
-A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
-A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
-A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
-A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
-A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
-A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
-A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
-A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
-A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
-A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
-A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
-A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
-A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
-A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
-A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
-A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
-A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
-A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
-A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
-A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
-A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
-A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
-A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
-A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
-A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
-A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
-A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
-A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
-A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
-A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
-A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
-A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
-A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
-A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
-A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
-A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
-A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
-A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
-A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
-A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
-A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
-A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
-A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
-A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
-A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
-A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
-A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
-A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
-A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
-A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
-A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
-A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
-A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
-A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
-A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
-A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
-A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
-A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
-A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
-A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
-A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
-A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
-A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
-A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
-A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
-A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
-A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
-A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
-A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
-A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
-A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
-A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
-A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
-A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
-A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
-A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
-A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
-A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
-A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
-A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
-A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
-A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
-A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
-A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
-A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
-A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
-A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
-A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
-A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
-A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
-A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
-A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
-A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
-A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
-A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
-A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
-A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
-A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
-A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
-A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
-A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
-A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
-A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
-A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
-A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
-A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
-A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
-A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
-A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
-A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
-A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
-A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
-A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
-A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
-A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
-A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
-A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
-A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
-A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
-A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
-A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
-A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
-A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
-A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
-A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
-A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
-A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
-A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
-A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
-A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
-A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
-A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
-A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
-A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
-A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
-A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
-A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
-A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
-A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
-A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
-A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
-A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
-A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
-A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
-A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
-A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
-A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
-A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
-A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
-A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
-A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
-A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
-A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
-A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
-A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
-A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
-A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
-A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
-A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
-A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
-A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
-A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
-A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
-A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
-A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
-A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
-A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
-A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
-A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
-A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
-A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
-A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
-A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
-A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
-A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
-A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
-A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
-A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
-A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
-A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
-A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
-A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
-A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
-A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
-A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
-A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
-A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
-A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
-A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
-A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
-A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
-A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
-A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
-A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
-A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
-A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
-A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
-A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
-A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
-A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
-A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
-A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
-A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
-A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
-A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
-A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
-A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
-A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
-A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
-A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
-A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
-A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
-A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
-A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
-A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
-A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
-A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
-A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
-A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
-A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
-A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
-A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
-A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
-A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
-A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
-A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
-A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
-A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
-A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
-A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
-A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
-A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
-A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
-A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
-A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
-A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
-A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
-A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
-A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
-A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
-A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
-A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
-A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
-A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
-A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
-A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
-A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
-A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
-A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
-A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
-A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
-A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
-A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
-A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
-A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
-A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
-A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
-A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
-A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
-A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
-A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
-A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
-A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
-A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
-A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
-A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
-A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
-A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
-A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
-A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
-A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
-A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
-A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
-A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
-A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
-A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
-A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
-A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
-A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
-A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
-A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
-A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
-A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
-A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
-A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
-A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
-A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
-A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
-A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
-A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
-A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
-A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
-A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
-A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
-A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
-A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
-A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
-A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
-A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
-A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
-A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
-A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
-A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
-A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
-A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
-A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
-A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
-A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
-A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
-A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
-A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
-A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
-A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
-A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
-A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
-A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
-A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
-A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
-A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
-A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
-A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
-A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
-A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
-A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
-A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
-A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
-A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
-A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
-A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
-A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
-A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
-A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
-A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
-A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
-A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
-A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
-A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
-A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
-A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
-A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
-A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
-A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
-A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
-A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
-A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
-A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
-A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
-A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
-A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
-A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
-A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
-A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
-A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
-A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
-A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
-A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
-A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
-A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
-A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
-A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
-A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
-A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
-A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
-A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
-A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
-A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
-A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
-A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
-A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
-A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
-A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
-A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
-A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
-A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
-A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
-A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
-A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
-AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
-D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
-D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
-DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
-E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
-F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
-F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
-F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
-F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
-F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
-F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
-F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
-F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
-F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
-F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
-F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
-F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
-F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
-F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
-F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
-F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
-F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
-F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
-F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
-F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
-F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
-F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
-F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
-F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
-F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
-F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
-F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
-F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
-F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
-F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
-F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
-F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
-F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
-F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
-F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
-F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
-F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
-F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
-F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
-F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
-F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
-F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
-F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
-F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
-F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
-F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
-F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
-F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
-F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
-F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
-F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
-F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
-F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
-F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
-F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
-F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
-F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
-F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
-F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
-F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
-F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
-F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
-F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
-F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
-F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
-F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
-F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
-F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
-F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
-F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
-F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
-F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
-F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
-F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
-F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
-F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
-F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
-F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
-F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
-F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
-F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
-F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
-F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
-F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
-F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
-F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
-F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
-F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
-F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
-F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
-F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
-F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
-F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
-F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
-F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
-F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
-F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
-F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
-F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
-F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
-F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
-F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
-F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
-F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
-F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
-F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
-F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
-F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
-F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
-F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
-F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
-F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
-F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
-F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
-F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
-F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
-F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
-F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
-F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
-F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
-F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
-F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
-F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
-F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
-F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
-F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
-F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
-F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
-F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
-F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
-F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
-F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
-F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
-F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
-F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
-F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
-F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
-F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
-F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
-F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
-F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
-F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
-F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
-F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
-F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
-F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
-F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
-F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
-F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
-F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
-F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
-F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
-F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
-F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
-F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
-F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
-F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
-F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
-F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
-F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
-F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
-F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
-F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
-F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
-F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
-F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
-F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
-F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
-F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
-F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
-F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
-F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
-F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
-F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
-F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
-F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
-F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
-F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
-F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
-F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
-F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
-F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
-F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
-F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
-F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
-F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
-F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
-F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
-F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
-F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
-F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
-F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
-F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
-F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
-F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
-F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
-F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
-F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
-F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
-F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
-F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
-F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
-F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
-F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
-F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
-F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
-F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
-F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
-F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
-F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
-F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
-F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
-F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
-F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
-F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
-F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
-F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
-F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
-F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
-F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
-F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
-F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
-F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
-F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
-F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
-F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
-F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
-F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
-F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
-F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
-F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
-F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
-F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
-F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
-F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
-F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
-F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
-F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
-F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
-F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
-F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
-F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
-F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
-F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
-F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
-F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
-F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
-F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
-F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
-F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
-F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
-F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
-F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
-F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
-F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
-F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
-F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
-FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
-FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
-FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
-FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
-FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
-FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
-FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
-FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
-FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
-FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
-FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
-FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
-FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
-FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
-FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
-FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
-FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
-FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
-FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
-FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
-FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
-FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
-FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
-FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
-FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
-FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
-FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
-FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
-FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
-FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
-FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
-FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
-FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
-FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
-FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
-FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
-FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
-FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
-FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
-FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
-FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
-FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
-FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
-FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
-FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
-FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
-FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
-FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
-FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
-FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
-FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
-FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
-FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
-FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
-FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
-FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
-FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
-FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
-FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
-FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
-FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
-FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
-FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
-FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
-FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
-FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
-FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
-FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
-FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
-FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
-FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
-FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
-FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
-FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
-FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
-FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
-FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
-FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
-FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
-FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
-FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
-FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
-FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
-FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
-FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
-FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
-FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
-FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
-FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
-FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
-FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
-FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
-FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
-FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
-FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
-FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
-FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
-FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
-FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
-FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
-FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
-FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
-FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
-FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
-FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
-FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
-FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
-FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
-FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
-FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
-FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
-FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
-FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
-FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
-FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
-FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
-FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
-FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
-FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
-FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
-FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
-FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
-FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
-FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
-FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
-FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
-FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
-FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
-FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
-FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
-FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
-FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
-FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
-FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
-FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
-FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
-FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
-FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
-FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
-FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
-FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
-FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
-FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
-FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
-FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
-FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
-FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
-FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
-FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
-FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
-FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
-FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
-FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
-FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
-FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
-FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
-FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
-FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
-FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
-FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
-FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
-FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
-FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
-FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
-FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
-FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
-FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
-FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
-FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
-FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
-FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
-FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
-FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
-FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
-FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
-FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
-FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
-FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
-FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
-FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
-FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
-FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
-FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
-FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
-FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
-FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
-FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
-FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
-FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
-FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
-FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
-FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
-FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
-FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
-FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
-FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
-FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
-FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
-FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
-FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
-FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
-FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
-FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
-FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
-FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
-FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
-FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
-FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
-FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
-FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
-FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
-FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
-FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
-FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
-FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
-FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
-FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
-FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
-FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
-FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
-FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
-FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
-FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
-FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
-FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
-FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
-FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
-FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
-FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
-FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
-FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
-FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
-FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
-FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
-FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
-FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
-FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
-FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
-FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
-FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
-FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
-FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
-FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
-FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
-FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
-FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
-FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
-FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
-FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
-FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
-FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
-FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
-FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
-FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
-FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
-FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
-FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
-FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
-FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
-FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
-FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
-FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
-FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
-FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
-FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
-FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
-FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
-FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
-FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
-FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
-FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
-FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
-FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
-FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
-FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
-FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
-FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
-FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
-FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
-FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
-FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
-FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
-FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
-FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
-FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
-FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
-FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
-FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
-FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
-FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
-FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
-FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
-FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
-FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
-FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
-FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
-FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
-FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
-FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
-FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
-FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
-FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
-FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
-FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
-FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
-FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
-FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
-FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
-FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
-FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
-FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
-FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
-FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
-FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
-FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
-FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
-FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
-FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
-FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
-FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
-FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
-FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
-FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
-FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
-FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
-FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
-FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
-FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
-FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
-FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
-FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
-FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
-FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
-FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
-FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
-FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
-FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
-FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
-FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
-FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
-FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
-FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
-FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
-FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
-FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
-FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
-FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
-FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
-FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
-FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
-FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
-FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
-FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
-FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
-FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
-FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
-FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
-FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
-FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
-FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
-FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
-FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
-FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
-FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
-FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
-FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
-FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
-FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
-FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
-FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
-FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
-FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
-FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
-FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
-FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
-FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
-FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
-FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
-FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
-FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
-FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
-FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
-FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
-FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
-FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
-FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
-FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
-FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
-FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
-FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
-FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
-FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
-FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
-FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
-FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
-FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
-FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
-FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
-FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
-FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
-FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
-FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
-FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
-FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
-FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
-FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
-FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
-FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
-FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
-FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
-FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
-FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
-FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
-FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
-FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
-FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
-FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
-FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
-FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
-FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
-FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
-FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
-FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
-FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
-FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
-FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
-FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
-FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
-FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
-FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
-FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
-FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
-FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
-FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
-FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
-FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
-FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
-FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
-FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
-FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
-FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
-FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
-FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
-FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
-FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
-FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
-FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
-FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
-FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
-FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
-FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
-FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
-FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
-FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
-FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
-FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
-FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
-FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
-FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
-FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
-FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
-FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
-FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
-FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
-FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
-FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
-FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
-FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
-FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
-FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
-FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
-FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
-FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
-FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
-FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
-FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
-FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
-FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
-FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
-FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
-FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
-FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
-FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
-FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
-FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
-FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
-FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
-FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
-FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
-FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
-FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
-FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
-FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
-FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
-FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
-FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
-FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
-FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
-FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
-FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
-FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
-FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
-FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
-FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
-FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
-FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
-FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
-FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
-FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
-FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
-FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
-FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
-FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
-FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
-FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
-FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
-FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
-FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
-FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
-FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
-FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
-FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
-FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
-FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
-FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
-FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
-FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
-FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
-FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
-FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
-FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
-FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
-FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
-FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
-FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
-FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
-FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
-FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
-FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
-FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
-FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
-FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
-FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
-FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
-FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
-FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
-FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
-FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
-FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
-FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
-FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
-FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
-FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
-FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
-FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
-FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
-FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
-FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
-FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
-FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
-FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
-FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
-FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
-FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
-FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
-FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
-FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
-FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
-FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
-FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
-FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
-FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
-FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
-FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
-FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
-FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
-FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
-FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
-FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
-FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
-FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
-FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
-FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
-FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
-FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
-FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
-FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
-FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
-FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
-FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
-FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
-FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
-FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
-FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
-FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
-FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
-FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
-FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
-FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
-FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
-FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
-FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
-FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
-FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
-FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
-FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
-FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
-FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
-FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
-FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
-FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
-FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
-FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
-FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
-FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
-FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
-FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
-FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
-FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
-FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
-FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
-FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
-FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
-FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
-FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
-FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
-FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
-FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
-FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
-FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
-FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
-FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
-FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
-FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
-FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
-FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
-FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
-FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
-FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
-FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
-FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
-FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
-FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
-FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
-FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
-FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
-FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
-FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
-FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
-FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
-FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
-FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
-FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
-FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
-FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
-FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
-FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
-FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
-FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
-FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
-FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
-FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
-FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
-FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
-FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
-FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
-FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
-FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
-FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
-FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
-FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
-FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
-FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
-FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
-FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
-FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
-FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
-FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
-FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
-FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
-FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
-FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
-FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
-FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
-FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
-FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
-FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
-FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
-FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
-FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
-FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
-FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
-FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
-FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
-FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
-FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
-FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
-FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
-FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
-FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
-FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
-FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
-FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
-FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
-FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
-FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
-FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
-FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
-FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
-FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
-FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
-FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
-FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
-FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
-FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
-FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
-FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
-FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
-FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
-FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
-FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
-FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
-FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
-FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
-FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
-FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
-FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
-FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
-FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
-FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
-FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
-FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
-FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
-FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
-FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
-FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
-FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
-FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
-FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
-FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
-FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
-FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
-FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
-FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
-FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
-FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
-FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
-FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
-FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
-FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
-FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
-FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
-FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
-FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
-FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
-FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
-FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
-FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
-FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
-FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
-FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
-FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
-FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
-FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
-FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
-FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
-FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
-FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
-FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
-FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
-FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
-FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
-FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
-FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
-FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
-FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
-FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
-FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
-FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
-FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
-FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
-FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
-FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
-FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
-FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
-FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
-FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
-FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
-FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
-FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
-FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
-FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
-FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
-FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
-FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
-FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
-FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
-FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
-FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
-FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
-FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
-FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
-FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
-FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
-FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
-FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
-FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
-FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
-FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
-FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
-FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
-FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
-FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
-FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
-FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
-FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
-FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
-FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
-FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
-FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
-FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
-FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
-FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
-FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
-FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
-FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
-FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
-FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
-FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
-FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
-FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
-FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
-FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
-FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
-FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
-FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
-FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
-FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
-FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
-FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
-FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
-FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
-FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
-FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
-FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
-FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
-FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
-FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
-FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
-FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
-FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
-FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
-FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
-FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
-FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
-FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
-FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
-FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
-FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
-FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
-FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
-FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
-FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
-FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
-FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
-FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
-FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
-FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
-FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
-FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
-FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
-FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
-FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
-FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
-FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
-FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
-FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
-FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
-FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
-FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
-FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
-FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
-FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
-FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
-FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
-FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
-FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
-FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
-FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
-FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
-FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
-FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
-FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
-FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
-FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
-FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
-FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
-FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
-FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
-FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
-FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
-FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
-FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
-FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
-FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
-FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
-FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
-FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
-FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
-FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
-FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
-FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
-FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
-FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
-FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
-FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
-FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
-FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
-FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
-FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
-FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
-FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
-FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
-FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
-FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
-FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
-FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
-FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
-FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
-FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
-FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
-FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
-FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
-FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
-FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
-FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
-FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
-FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
-FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
-FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
-FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
-FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
-FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
-FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
-FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
-FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
-FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
-FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
-FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
-FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
-FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
-FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
-FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
-FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
-FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
-FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
-FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
-FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
-FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
-FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
-FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
-FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
-FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
-FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
-FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
-FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
-FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
-FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
-FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
-FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
-FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
-FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
-FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
-FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
-FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
-FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
-FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
-FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
-FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
-FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
-FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
-FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
-FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
-FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
-FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
-FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
-FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
-FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
-FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
-FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
-FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
-FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
-FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
-FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
-FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
-FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
-FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
-FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
-FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
-FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
-FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
-FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
-FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
-FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
-FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
-FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
-FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
-FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
-FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
-FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
-FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
-FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
-FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
-FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
-FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
-FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
-FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
-FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
-FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
-FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
-FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
-FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
-FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
-FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
-FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
-FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
-FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
-FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
-FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
-FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
-FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
-FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
-FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
-FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
-FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
-FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
-FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
-FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
-FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
-FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
-FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
-FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
-FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
-FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
-FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
-FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
-FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
-FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
-FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
-FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
-FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
-FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
-FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
-FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
-FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
-FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
-FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
-FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
-FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
-FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
-FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
-FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
-FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
-FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
-FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
-FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
-FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
-FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
-FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
-FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
-FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
-FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
-FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
-FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
-FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
-FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
-FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
-FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
-FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
-FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
-FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
-FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
-FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
-FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
-FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
-FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
-FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
-FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
-FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
-FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
-FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
-FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
-FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
-FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
-FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
-FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
-FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
-FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
-FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
-FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
-FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
-FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
-FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
-FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
-FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
-FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
-FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
-FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
-FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
-FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
-FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
-FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
-FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
-FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
-FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
-FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
-FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
-FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
-FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
-FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
-FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
-FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
-FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
-F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;;
-FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;;
-100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;;
-10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;;
diff --git a/contrib/perl5/lib/unicode/mktables.PL b/contrib/perl5/lib/unicode/mktables.PL
deleted file mode 100755
index 5aca93e..0000000
--- a/contrib/perl5/lib/unicode/mktables.PL
+++ /dev/null
@@ -1,447 +0,0 @@
-#!../../miniperl
-
-use bytes;
-
-$UnicodeData = "Unicode.301";
-$SyllableData = "syllables.txt";
-$PropData = "PropList.txt";
-
-
-# Note: we try to keep filenames unique within first 8 chars. Using
-# subdirectories for the following helps.
-mkdir "In", 0755;
-mkdir "Is", 0755;
-mkdir "To", 0755;
-
-@todo = (
-# typical
-
- # 005F: SPACING UNDERSCROE
- ['IsWord', '$cat =~ /^[LMN]/ or $code eq "005F"', ''],
- ['IsAlnum', '$cat =~ /^[LMN]/', ''],
- ['IsAlpha', '$cat =~ /^[LM]/', ''],
- # 0009: HORIZONTAL TABULATION
- # 000A: LINE FEED
- # 000B: VERTICAL TABULATION
- # 000C: FORM FEED
- # 000D: CARRIAGE RETURN
- # 0020: SPACE
- ['IsSpace', '$cat =~ /^Z/ ||
- $code =~ /^(0009|000A|000B|000C|000D)$/', ''],
- ['IsSpacePerl',
- '$cat =~ /^Z/ ||
- $code =~ /^(0009|000A|000C|000D)$/', ''],
- ['IsBlank', '$code =~ /^(0020|0009)$/ ||
- $cat =~ /^Z[^lp]$/', ''],
- ['IsDigit', '$cat =~ /^Nd$/', ''],
- ['IsUpper', '$cat =~ /^L[ut]$/', ''],
- ['IsLower', '$cat =~ /^Ll$/', ''],
- ['IsASCII', '$code le "007f"', ''],
- ['IsCntrl', '$cat =~ /^C/', ''],
- ['IsGraph', '$cat =~ /^([LMNPS]|Co)/', ''],
- ['IsPrint', '$cat =~ /^([LMNPS]|Co|Zs)/', ''],
- ['IsPunct', '$cat =~ /^P/', ''],
- # 003[0-9]: DIGIT ZERO..NINE, 00[46][1-6]: A..F, a..f
- ['IsXDigit', '$code =~ /^00(3[0-9]|[46][1-6])$/', ''],
- ['ToUpper', '$up', '$up'],
- ['ToLower', '$down', '$down'],
- ['ToTitle', '$title', '$title'],
- ['ToDigit', '$dec ne ""', '$dec'],
-
-# Name
-
- ['Name', '$name', '$name'],
-
-# Category
-
- ['Category', '$cat', '$cat'],
-
-# Normative
-
- ['IsM', '$cat =~ /^M/', ''], # Mark
- ['IsMn', '$cat eq "Mn"', ''], # Mark, Non-Spacing
- ['IsMc', '$cat eq "Mc"', ''], # Mark, Combining
- ['IsMe', '$cat eq "Me"', ''], # Mark, Enclosing
-
- ['IsN', '$cat =~ /^N/', ''], # Number
- ['IsNd', '$cat eq "Nd"', ''], # Number, Decimal Digit
- ['IsNo', '$cat eq "No"', ''], # Number, Other
- ['IsNl', '$cat eq "Nl"', ''], # Number, Letter
-
- ['IsZ', '$cat =~ /^Z/', ''], # Separator
- ['IsZs', '$cat eq "Zs"', ''], # Separator, Space
- ['IsZl', '$cat eq "Zl"', ''], # Separator, Line
- ['IsZp', '$cat eq "Zp"', ''], # Separator, Paragraph
-
- ['IsC', '$cat =~ /^C/', ''], # Crazy
- ['IsCc', '$cat eq "Cc"', ''], # Other, Control or Format
- ['IsCo', '$cat eq "Co"', ''], # Other, Private Use
- ['IsCn', '$cat eq "Cn"', ''], # Other, Not Assigned
- ['IsCf', '$cat eq "Cf"', ''], # Other, Format
- ['IsCs', '$cat eq "Cs"', ''], # Other, Surrogate
- ['IsCn', 'Unassigned Code Value',$PropData], # Other, Not Assigned
-
-# Informative
-
- ['IsL', '$cat =~ /^L/', ''], # Letter
- ['IsLu', '$cat eq "Lu"', ''], # Letter, Uppercase
- ['IsLl', '$cat eq "Ll"', ''], # Letter, Lowercase
- ['IsLt', '$cat eq "Lt"', ''], # Letter, Titlecase
- ['IsLm', '$cat eq "Lm"', ''], # Letter, Modifier
- ['IsLo', '$cat eq "Lo"', ''], # Letter, Other
-
- ['IsP', '$cat =~ /^P/', ''], # Punctuation
- ['IsPd', '$cat eq "Pd"', ''], # Punctuation, Dash
- ['IsPs', '$cat eq "Ps"', ''], # Punctuation, Open
- ['IsPe', '$cat eq "Pe"', ''], # Punctuation, Close
- ['IsPo', '$cat eq "Po"', ''], # Punctuation, Other
- ['IsPc', '$cat eq "Pc"', ''], # Punctuation, Connector
- ['IsPi', '$cat eq "Pi"', ''], # Punctuation, Initial quote
- ['IsPf', '$cat eq "Pf"', ''], # Punctuation, Final quote
-
- ['IsS', '$cat =~ /^S/', ''], # Symbol
- ['IsSm', '$cat eq "Sm"', ''], # Symbol, Math
- ['IsSk', '$cat eq "Sk"', ''], # Symbol, Modifier
- ['IsSc', '$cat eq "Sc"', ''], # Symbol, Currency
- ['IsSo', '$cat eq "So"', ''], # Symbol, Other
-
-# Combining class
- ['CombiningClass', '$comb', '$comb'],
-
-# BIDIRECTIONAL PROPERTIES
-
- ['Bidirectional', '$bid', '$bid'],
-
-# Strong types:
-
- ['IsBidiL', '$bid eq "L"', ''], # Left-Right; Most alphabetic,
- # syllabic, and logographic
- # characters (e.g., CJK
- # ideographs)
- ['IsBidiR', '$bid eq "R"', ''], # Right-Left; Arabic, Hebrew,
- # and punctuation specific to
- # those scripts
-
- ['IsBidiLRE', '$bid eq "LRE"', ''], # Left-to-Right Embedding
- ['IsBidiLRO', '$bid eq "LRO"', ''], # Left-to-Right Override
- ['IsBidiAL', '$bid eq "AL"', ''], # Right-to-Left Arabic
- ['IsBidiRLE', '$bid eq "RLE"', ''], # Right-to-Left Embedding
- ['IsBidiRLO', '$bid eq "RLO"', ''], # Right-to-Left Override
- ['IsBidiPDF', '$bid eq "PDF"', ''], # Pop Directional Format
- ['IsBidiNSM', '$bid eq "NSM"', ''], # Non-Spacing Mark
- ['IsBidiBN', '$bid eq "BN"', ''], # Boundary Neutral
-
-# Weak types:
-
- ['IsBidiEN','$bid eq "EN"', ''], # European Number
- ['IsBidiES','$bid eq "ES"', ''], # European Number Separator
- ['IsBidiET','$bid eq "ET"', ''], # European Number Terminator
- ['IsBidiAN','$bid eq "AN"', ''], # Arabic Number
- ['IsBidiCS','$bid eq "CS"', ''], # Common Number Separator
-
-# Separators:
-
- ['IsBidiB', '$bid eq "B"', ''], # Block Separator
- ['IsBidiS', '$bid eq "S"', ''], # Segment Separator
-
-# Neutrals:
-
- ['IsBidiWS','$bid eq "WS"', ''], # Whitespace
- ['IsBidiON','$bid eq "ON"', ''], # Other Neutrals ; All other
- # characters: punctuation,
- # symbols
-
-# Decomposition
-
- ['Decomposition', '$decomp', '$decomp'],
- ['IsDecoCanon', '$decomp && $decomp !~ /^</', ''],
- ['IsDecoCompat', '$decomp =~ /^</', ''],
- ['IsDCfont', '$decomp =~ /^<font>/', ''],
- ['IsDCnoBreak', '$decomp =~ /^<noBreak>/', ''],
- ['IsDCinitial', '$decomp =~ /^<initial>/', ''],
- ['IsDCmedial', '$decomp =~ /^<medial>/', ''],
- ['IsDCfinal', '$decomp =~ /^<final>/', ''],
- ['IsDCisolated', '$decomp =~ /^<isolated>/', ''],
- ['IsDCcircle', '$decomp =~ /^<circle>/', ''],
- ['IsDCsuper', '$decomp =~ /^<super>/', ''],
- ['IsDCsub', '$decomp =~ /^<sub>/', ''],
- ['IsDCvertical', '$decomp =~ /^<vertical>/', ''],
- ['IsDCwide', '$decomp =~ /^<wide>/', ''],
- ['IsDCnarrow', '$decomp =~ /^<narrow>/', ''],
- ['IsDCsmall', '$decomp =~ /^<small>/', ''],
- ['IsDCsquare', '$decomp =~ /^<square>/', ''],
- ['IsDCfraction', '$decomp =~ /^<fraction>/', ''],
- ['IsDCcompat', '$decomp =~ /^<compat>/', ''],
-
-# Number
-
- ['Number', '$num ne ""', '$num'],
-
-# Mirrored
-
- ['IsMirrored', '$mir eq "Y"', ''],
-
-# Arabic
-
- ['ArabLink', '1', '$link'],
- ['ArabLnkGrp', '1', '$linkgroup'],
-
-# Jamo
-
- ['JamoShort', '1', '$short'],
-
-# Syllables
-
- syllable_defs(),
-
-# Line break properties - Normative
-
- ['IsLbrkBK','$brk eq "BK"', ''], # Mandatory Break
- ['IsLbrkCR','$brk eq "CR"', ''], # Carriage Return
- ['IsLbrkLF','$brk eq "LF"', ''], # Line Feed
- ['IsLbrkCM','$brk eq "CM"', ''], # Attached Characters and Combining Marks
- ['IsLbrkSG','$brk eq "SG"', ''], # Surrogates
- ['IsLbrkGL','$brk eq "GL"', ''], # Non-breaking (Glue)
- ['IsLbrkCB','$brk eq "CB"', ''], # Contingent Break Opportunity
- ['IsLbrkSP','$brk eq "SP"', ''], # Space
- ['IsLbrkZW','$brk eq "ZW"', ''], # Zero Width Space
-
-# Line break properties - Informative
- ['IsLbrkXX','$brk eq "XX"', ''], # Unknown
- ['IsLbrkOP','$brk eq "OP"', ''], # Opening Punctuation
- ['IsLbrkCL','$brk eq "CL"', ''], # Closing Punctuation
- ['IsLbrkQU','$brk eq "QU"', ''], # Ambiguous Quotation
- ['IsLbrkNS','$brk eq "NS"', ''], # Non Starter
- ['IsLbrkEX','$brk eq "EX"', ''], # Exclamation/Interrogation
- ['IsLbrkSY','$brk eq "SY"', ''], # Symbols Allowing Breaks
- ['IsLbrkIS','$brk eq "IS"', ''], # Infix Separator (Numeric)
- ['IsLbrkPR','$brk eq "PR"', ''], # Prefix (Numeric)
- ['IsLbrkPO','$brk eq "PO"', ''], # Postfix (Numeric)
- ['IsLbrkNU','$brk eq "NU"', ''], # Numeric
- ['IsLbrkAL','$brk eq "AL"', ''], # Ordinary Alphabetic and Symbol Characters
- ['IsLbrkID','$brk eq "ID"', ''], # Ideographic
- ['IsLbrkIN','$brk eq "IN"', ''], # Inseparable
- ['IsLbrkHY','$brk eq "HY"', ''], # Hyphen
- ['IsLbrkBB','$brk eq "BB"', ''], # Break Opportunity Before
- ['IsLbrkBA','$brk eq "BA"', ''], # Break Opportunity After
- ['IsLbrkSA','$brk eq "SA"', ''], # Complex Context (South East Asian)
- ['IsLbrkAI','$brk eq "AI"', ''], # Ambiguous (Alphabetic or Ideographic)
- ['IsLbrkB2','$brk eq "B2"', ''], # Break Opportunity Before and After
-);
-
-# This is not written for speed...
-
-foreach $file (@todo) {
- my ($table, $wanted, $val) = @$file;
- next if @ARGV and not grep { $_ eq $table } @ARGV;
- print $table,"\n";
- if ($table =~ /^(Is|In|To)(.*)/) {
- open(OUT, ">$1/$2.pl") or die "Can't create $1/$2.pl: $!\n";
- }
- else {
- open(OUT, ">$table.pl") or die "Can't create $table.pl: $!\n";
- }
- print OUT <<EOH;
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by $0 from e.g. $UnicodeData.
-# Any changes made here will be lost!
-EOH
- print OUT <<"END";
-return <<'END';
-END
- print OUT proplist($table, $wanted, $val);
- print OUT "END\n";
- close OUT;
-}
-
-# Must treat blocks specially.
-
-exit if @ARGV and not grep { $_ eq Block } @ARGV;
-print "Block\n";
-open(UD, 'Blocks.txt') or die "Can't open Blocks.txt: $!\n";
-open(OUT, ">Block.pl") or die "Can't create Block.pl: $!\n";
-print OUT <<EOH;
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by $0 from e.g. $UnicodeData.
-# Any changes made here will be lost!
-EOH
-print OUT <<"END";
-return <<'END';
-END
-
-while (<UD>) {
- next if /^#/;
- next if /^$/;
- chomp;
- ($code, $last, $name) = split(/; */);
- if ($name) {
- print OUT "$code $last $name\n";
- $name =~ s/\s+//g;
- open(BLOCK, ">In/$name.pl");
- print BLOCK <<EOH;
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by $0 from e.g. $UnicodeData.
-# Any changes made here will be lost!
-EOH
- print BLOCK <<"END2";
-return <<'END';
-$code $last
-END
-END2
- close BLOCK;
- }
-}
-
-print OUT "END\n";
-close OUT;
-
-##################################################
-
-sub proplist {
- my ($table, $wanted, $val) = @_;
- my @wanted;
- my $out;
- my $split;
-
- return listFromPropFile($wanted) if $val eq $PropData;
-
- if ($table =~ /^Arab/) {
- open(UD, "ArabShap.txt") or warn "Can't open $table: $!";
-
- $split = '($code, $name, $link, $linkgroup) = split(/; */);';
- }
- elsif ($table =~ /^Jamo/) {
- open(UD, "Jamo.txt") or warn "Can't open $table: $!";
-
- $split = '($code, $short, $name) = split(/; */); $code =~ s/^U\+//;';
- }
- elsif ($table =~ /^IsSyl/) {
- open(UD, $SyllableData) or warn "Can't open $table: $!";
-
- $split = '($code, $short, $syl) = split(/; */); $code =~ s/^U\+//;';
- }
- elsif ($table =~ /^IsLbrk/) {
- open(UD, "LineBrk.txt") or warn "Can't open $table: $!";
-
- $split = '($code, $brk, $name) = split(/;/);';
- }
- else {
- open(UD, $UnicodeData) or warn "Can't open $UnicodeData: $!";
-
- $split = '($code, $name, $cat, $comb, $bid, $decomp, $dec, $dig, $num, $mir, $uni1,
- $comment, $up, $down, $title) = split(/;/);';
- }
-
- if ($table =~ /^(?:To|Is)[A-Z]/) {
- eval <<"END";
- while (<UD>) {
- next if /^#/;
- next if /^\\s/;
- s/\\s+\$//;
- $split
- if ($wanted) {
- push(\@wanted, [hex \$code, hex $val, \$name =~ /, First>\$/]);
- }
- }
-END
- die $@ if $@;
-
- while (@wanted) {
- $beg = shift @wanted;
- $last = $beg;
- while (@wanted and $wanted[0]->[0] == $last->[0] + 1 and
- (not $val or $wanted[0]->[1] == $last->[1] + 1)) {
- $last = shift @wanted;
- }
- $out .= sprintf "%04x", $beg->[0];
- if ($beg->[2]) {
- $last = shift @wanted;
- }
- if ($beg == $last) {
- $out .= "\t";
- }
- else {
- $out .= sprintf "\t%04x", $last->[0];
- }
- $out .= sprintf "\t%04x", $beg->[1] if $val;
- $out .= "\n";
- }
- }
- else {
- eval <<"END";
- while (<UD>) {
- next if /^#/;
- next if /^\\s*\$/;
- chop;
- $split
- if ($wanted) {
- push(\@wanted, [hex \$code, $val, \$name =~ /, First>\$/]);
- }
- }
-END
- die $@ if $@;
-
- while (@wanted) {
- $beg = shift @wanted;
- $last = $beg;
- while (@wanted and $wanted[0]->[0] == $last->[0] + 1 and
- ($wanted[0]->[1] eq $last->[1])) {
- $last = shift @wanted;
- }
- $out .= sprintf "%04x", $beg->[0];
- if ($beg->[2]) {
- $last = shift @wanted;
- }
- if ($beg == $last) {
- $out .= "\t";
- }
- else {
- $out .= sprintf "\t%04x", $last->[0];
- }
- $out .= sprintf "\t%s\n", $beg->[1];
- }
- }
- $out;
-}
-
-sub listFromPropFile {
- my ($wanted) = @_;
- my $out;
-
- open (UD, $PropData) or die "Can't open $PropData: $!\n";
- local($/) = "\n" . '*' x 43 . "\n\nProperty dump for:"; # not 42?
-
- <UD>;
- while (<UD>) {
- chomp;
- if (s/0x[\d\w]+\s+\((.*?)\)// and $wanted eq $1) {
- s/\(\d+ chars\)//g;
- s/^\s+//mg;
- s/\s+$//mg;
- s/\.\./\t/g;
- $out = lc $_;
- last;
- }
- }
- close (UD);
- "$out\n";
-}
-
-sub syllable_defs {
- my @defs;
- my %seen;
-
- open (SD, $SyllableData) or die "Can't open $SyllableData: $!\n";
- while (<SD>) {
- next if /^\s*(#|$)/;
- s/\s+$//;
- ($code, $name, $syl) = split /; */;
- next unless $syl;
- push (@defs, ["IsSyl$syl", qq{\$syl eq "$syl"}, ''])
- unless $seen{$syl}++;
- }
- close (SD);
- return (@defs);
-}
-
-# eof
diff --git a/contrib/perl5/lib/unicode/syllables.txt b/contrib/perl5/lib/unicode/syllables.txt
deleted file mode 100644
index bc8bc23..0000000
--- a/contrib/perl5/lib/unicode/syllables.txt
+++ /dev/null
@@ -1,1329 +0,0 @@
-################################################################################
-#
-# V: as "u" in "but" (often represented with schwa or small uppercase lambda)
-# U: as "oo" in "fool"
-# I: as "ea" in "meat"
-# A: as "a" in "father"
-# E: as "a" in "hate"
-# C: the consonant form having no vowel element
-# O: as "o" in "note"
-#
-# Vowel identifiers are assumed short, doubled identifiers are considered long
-# (following Cushitic rules). Dipthong syllables are identified with "W" as
-# per Ethiopic and Canadian syllabary character names.
-#
-#
-# WV WVV WU WUU WI WII WA WAA WAI WAAI WE WEE WC WO WOO
-#
-# V VV U UU I II A AA AI AAI E EE C O OO
-#
-################################################################################
-
-#
-# Ethiopic
-#
-1200; HA; V
-1201; HU; U
-1202; HI; I
-1203; HAA; A
-1204; HEE; E
-1205; HE; C
-1206; HO; O
-1208; LA; V
-1209; LU; U
-120A; LI; I
-120B; LAA; A
-120C; LEE; E
-120D; LE; C
-120E; LO; O
-120F; LWA; WA
-1210; HHA; V
-1211; HHU; U
-1212; HHI; I
-1213; HHAA; A
-1214; HHEE; E
-1215; HHE; C
-1216; HHO; O
-1217; HHWA; WA
-1218; MA; V
-1219; MU; U
-121A; MI; I
-121B; MAA; A
-121C; MEE; E
-121D; ME; C
-121E; MO; O
-121F; MWA; WA
-1220; SZA; V
-1221; SZU; U
-1222; SZI; I
-1223; SZAA; A
-1224; SZEE; E
-1225; SZE; C
-1226; SZO; O
-1227; SZWA; WA
-1228; RA; V
-1229; RU; U
-122A; RI; I
-122B; RAA; A
-122C; REE; E
-122D; RE; C
-122E; RO; O
-122F; RWA; WA
-1230; SA; V
-1231; SU; U
-1232; SI; I
-1233; SAA; A
-1234; SEE; E
-1235; SE; C
-1236; SO; O
-1237; SWA; WA
-1238; SHA; V
-1239; SHU; U
-123A; SHI; I
-123B; SHAA; A
-123C; SHEE; E
-123D; SHE; C
-123E; SHO; O
-123F; SHWA; WA
-1240; QA; V
-1241; QU; U
-1242; QI; I
-1243; QAA; A
-1244; QEE; E
-1245; QE; C
-1246; QO; O
-1248; QWA; WV
-124A; QWI; WI
-124B; QWAA; WA
-124C; QWEE; WE
-124D; QWE; WC
-1250; QHA; V
-1251; QHU; U
-1252; QHI; I
-1253; QHAA; A
-1254; QHEE; E
-1255; QHE; C
-1256; QHO; O
-1258; QHWA; WV
-125A; QHWI; WI
-125B; QHWAA; WA
-125C; QHWEE; WE
-125D; QHWE; WC
-1260; BA; V
-1261; BU; U
-1262; BI; I
-1263; BAA; A
-1264; BEE; E
-1265; BE; C
-1266; BO; O
-1267; BWA; WA
-1268; VA; V
-1269; VU; U
-126A; VI; I
-126B; VAA; A
-126C; VEE; E
-126D; VE; C
-126E; VO; O
-126F; VWA; WA
-1270; TA; V
-1271; TU; U
-1272; TI; I
-1273; TAA; A
-1274; TEE; E
-1275; TE; C
-1276; TO; O
-1277; TWA; WA
-1278; CA; V
-1279; CU; U
-127A; CI; I
-127B; CAA; A
-127C; CEE; E
-127D; CE; C
-127E; CO; O
-127F; CWA; WA
-1280; XA; V
-1281; XU; U
-1282; XI; I
-1283; XAA; A
-1284; XEE; E
-1285; XE; C
-1286; XO; O
-1288; XWA; WV
-128A; XWI; WI
-128B; XWAA; WA
-128C; XWEE; WE
-128D; XWE; WC
-1290; NA; V
-1291; NU; U
-1292; NI; I
-1293; NAA; A
-1294; NEE; E
-1295; NE; C
-1296; NO; O
-1297; NWA; WA
-1298; NYA; V
-1299; NYU; U
-129A; NYI; I
-129B; NYAA; A
-129C; NYEE; E
-129D; NYE; C
-129E; NYO; O
-129F; NYWA; WA
-12A0; GLOTTAL A; V
-12A1; GLOTTAL U; U
-12A2; GLOTTAL I; I
-12A3; GLOTTAL AA; A
-12A4; GLOTTAL EE; E
-12A5; GLOTTAL E; C
-12A6; GLOTTAL O; O
-12A7; GLOTTAL WA; WA
-12A8; KA; V
-12A9; KU; U
-12AA; KI; I
-12AB; KAA; A
-12AC; KEE; E
-12AD; KE; C
-12AE; KO; O
-12B0; KWA; WV
-12B2; KWI; WI
-12B3; KWAA; WA
-12B4; KWEE; WE
-12B5; KWE; WC
-12B8; KXA; V
-12B9; KXU; U
-12BA; KXI; I
-12BB; KXAA; A
-12BC; KXEE; E
-12BD; KXE; C
-12BE; KXO; O
-12C0; KXWA; WV
-12C2; KXWI; WI
-12C3; KXWAA; WA
-12C4; KXWEE; WE
-12C5; KXWE; WC
-12C8; WA; V
-12C9; WU; U
-12CA; WI; I
-12CB; WAA; A
-12CC; WEE; E
-12CD; WE; C
-12CE; WO; O
-12D0; PHARYNGEAL A; V
-12D1; PHARYNGEAL U; U
-12D2; PHARYNGEAL I; I
-12D3; PHARYNGEAL AA; A
-12D4; PHARYNGEAL EE; E
-12D5; PHARYNGEAL E; C
-12D6; PHARYNGEAL O; O
-12D8; ZA; V
-12D9; ZU; U
-12DA; ZI; I
-12DB; ZAA; A
-12DC; ZEE; E
-12DD; ZE; C
-12DE; ZO; O
-12DF; ZWA; WA
-12E0; ZHA; V
-12E1; ZHU; U
-12E2; ZHI; I
-12E3; ZHAA; A
-12E4; ZHEE; E
-12E5; ZHE; C
-12E6; ZHO; O
-12E7; ZHWA; WA
-12E8; YA; V
-12E9; YU; U
-12EA; YI; I
-12EB; YAA; A
-12EC; YEE; E
-12ED; YE; C
-12EE; YO; O
-12F0; DA; V
-12F1; DU; U
-12F2; DI; I
-12F3; DAA; A
-12F4; DEE; E
-12F5; DE; C
-12F6; DO; O
-12F7; DWA; WA
-12F8; DDA; V
-12F9; DDU; U
-12FA; DDI; I
-12FB; DDAA; A
-12FC; DDEE; E
-12FD; DDE; C
-12FE; DDO; O
-12FF; DDWA; WA
-1300; JA; V
-1301; JU; U
-1302; JI; I
-1303; JAA; A
-1304; JEE; E
-1305; JE; C
-1306; JO; O
-1307; JWA; WA
-1308; GA; V
-1309; GU; U
-130A; GI; I
-130B; GAA; A
-130C; GEE; E
-130D; GE; C
-130E; GO; O
-1310; GWA; WV
-1312; GWI; WI
-1313; GWAA; WA
-1314; GWEE; WE
-1315; GWE; WC
-1318; GGA; V
-1319; GGU; U
-131A; GGI; I
-131B; GGAA; A
-131C; GGEE; E
-131D; GGE; C
-131E; GGO; O
-1320; THA; V
-1321; THU; U
-1322; THI; I
-1323; THAA; A
-1324; THEE; E
-1325; THE; C
-1326; THO; O
-1327; THWA; WA
-1328; CHA; V
-1329; CHU; U
-132A; CHI; I
-132B; CHAA; A
-132C; CHEE; E
-132D; CHE; C
-132E; CHO; O
-132F; CHWA; WA
-1330; PHA; V
-1331; PHU; U
-1332; PHI; I
-1333; PHAA; A
-1334; PHEE; E
-1335; PHE; C
-1336; PHO; O
-1337; PHWA; WA
-1338; TSA; V
-1339; TSU; U
-133A; TSI; I
-133B; TSAA; A
-133C; TSEE; E
-133D; TSE; C
-133E; TSO; O
-133F; TSWA; WA
-1340; TZA; V
-1341; TZU; U
-1342; TZI; I
-1343; TZAA; A
-1344; TZEE; E
-1345; TZE; C
-1346; TZO; O
-1348; FA; V
-1349; FU; U
-134A; FI; I
-134B; FAA; A
-134C; FEE; E
-134D; FE; C
-134E; FO; O
-134F; FWA; WA
-1350; PA; V
-1351; PU; U
-1352; PI; I
-1353; PAA; A
-1354; PEE; E
-1355; PE; C
-1356; PO; O
-1357; PWA; WA
-#
-# Cherokee
-#
-13A0; A; A
-13A1; E; E
-13A2; I; I
-13A3; O; O
-13A4; U; U
-13A5; V; V
-13A6; GA; A
-13A7; KA; A
-13A8; GE; E
-13A9; GI; I
-13AA; GO; O
-13AB; GU; U
-13AC; GV; V
-13AD; HA; A
-13AE; HE; E
-13AF; HI; I
-13B0; HO; O
-13B1; HU; U
-13B2; HV; V
-13B3; LA; A
-13B4; LE; E
-13B5; LI; I
-13B6; LO; O
-13B7; LU; U
-13B8; LV; V
-13B9; MA; A
-13BA; ME; E
-13BB; MI; I
-13BC; MO; O
-13BD; MU; U
-13BE; NA; A
-13BF; HNA; A
-13C0; NAH; C
-13C1; NE; E
-13C2; NI; I
-13C3; NO; O
-13C4; NU; U
-13C5; NV; V
-13C6; QUA; A
-13C7; QUE; E
-13C8; QUI; I
-13C9; QUO; O
-13CA; QUU; U
-13CB; QUV; V
-13CC; SA; A
-13CD; S; C
-13CE; SE; E
-13CF; SI; I
-13D0; SO; O
-13D1; SU; U
-13D2; SV; V
-13D3; DA; A
-13D4; TA; A
-13D5; DE; E
-13D6; TE; E
-13D7; DI; I
-13D8; TI; I
-13D9; DO; O
-13DA; DU; U
-13DB; DV; V
-13DC; DLA; A
-13DD; TLA; A
-13DE; TLE; E
-13DF; TLI; I
-13E0; TLO; O
-13E1; TLU; U
-13E2; TLV; V
-13E3; TSA; A
-13E4; TSE; E
-13E5; TSI; I
-13E6; TSO; O
-13E7; TSU; U
-13E8; TSV; V
-13E9; WA; A
-13EA; WE; E
-13EB; WI; I
-13EC; WO; O
-13ED; WU; U
-13EE; WV; V
-13EF; YA; A
-13F0; YE; E
-13F1; YI; I
-13F2; YO; O
-13F3; YU; U
-13F4; YV; V
-#
-# 1400 Unified Canadian Aboriginal Syllabics 167F
-#
-1401; E; E
-1402; AAI; AAI
-1403; I; I
-1404; II; II
-1405; O; O
-1406; OO; OO
-1407; Y-CREE OO; OO
-1408; CARRIER EE; EE
-1409; CARRIER I; I
-140A; A; A
-140B; AA; AA
-140C; WE; WE
-140D; WEST-CREE WE; WE
-140E; WI; WI
-140F; WEST-CREE WI; WI
-1410; WII; WII
-1411; WEST-CREE WII; WII
-1412; WO; WO
-1413; WEST-CREE WO; WO
-1414; WOO; WOO
-1415; WEST-CREE WOO; WOO
-1416; NASKAPI WOO; WOO
-1417; WA; WA
-1418; WEST-CREE WA; WA
-1419; WAA; WAA
-141A; WEST-CREE WAA; WAA
-141B; NASKAPI WAA; WAA
-141C; AI; AI
-141D; Y-CREE W; C
-142B; EN; C
-142C; IN; C
-142D; ON; C
-142E; AN; C
-142F; PE; E
-1430; PAAI; AAI
-1431; PI; I
-1432; PII; II
-1433; PO; O
-1434; POO; OO
-1435; Y-CREE POO; OO
-1436; CARRIER HEE; EE
-1437; CARRIER HI; I
-1438; PA; A
-1439; PAA; AA
-143A; PWE; WE
-143B; WEST-CREE PWE; WE
-143C; PWI; WI
-143D; WEST-CREE PWI; WI
-143E; PWII; WII
-143F; WEST-CREE PWII; WII
-1440; PWO; WO
-1441; WEST-CREE PWO; WO
-1442; PWOO; WOO
-1443; WEST-CREE PWOO; WOO
-1444; PWA; WA
-1445; WEST-CREE PWA; WA
-1446; PWAA; WAA
-1447; WEST-CREE PWAA; WAA
-1448; Y-CREE PWAA; WAA
-1449; P; C
-144A; WEST-CREE P; C
-144B; CARRIER H; C
-144C; TE; E
-144D; TAAI; AAI
-144E; TI; I
-144F; TII; II
-1450; TO; O
-1451; TOO; OO
-1452; Y-CREE TOO; OO
-1453; CARRIER DEE; EE
-1454; CARRIER DI; I
-1455; TA; A
-1456; TAA; AA
-1457; TWE; WE
-1458; WEST-CREE TWE; WE
-1459; TWI; WI
-145A; WEST-CREE TWI; WI
-145B; TWII; WII
-145C; WEST-CREE TWII; WII
-145D; TWO; WO
-145E; WEST-CREE TWO; WO
-145F; TWOO; WOO
-1460; WEST-CREE TWOO; WOO
-1461; TWA; WA
-1462; WEST-CREE TWA; WA
-1463; TWAA; WAA
-1464; WEST-CREE TWAA; WAA
-1465; NASKAPI TWAA; WAA
-1466; T; C
-1467; TTE; E
-1468; TTI; I
-1469; TTO; O
-146A; TTA; A
-146B; KE; E
-146C; KAAI; AAI
-146D; KI; I
-146E; KII; II
-146F; KO; O
-1470; KOO; OO
-1471; Y-CREE KOO; OO
-1472; KA; A
-1473; KAA; AA
-1474; KWE; WE
-1475; WEST-CREE KWE; WE
-1476; KWI; WI
-1477; WEST-CREE KWI; WI
-1478; KWII; WII
-1479; WEST-CREE KWII; WII
-147A; KWO; WO
-147B; WEST-CREE KWO; WO
-147C; KWOO; WOO
-147D; WEST-CREE KWOO; WOO
-147E; KWA; WA
-147F; WEST-CREE KWA; WA
-1480; KWAA; WAA
-1481; WEST-CREE KWAA; WAA
-1482; NASKAPI KWAA; WAA
-1483; K; C
-1484; KW; WC
-1485; SOUTH-SLAVEY KEH; C
-1486; SOUTH-SLAVEY KIH; C
-1487; SOUTH-SLAVEY KOH; C
-1488; SOUTH-SLAVEY KAH; C
-1489; CE; E
-148A; CAAI; AAI
-148B; CI; I
-148C; CII; II
-148D; CO; O
-148E; COO; OO
-148F; Y-CREE COO; OO
-1490; CA; A
-1491; CAA; AA
-1492; CWE; WE
-1493; WEST-CREE CWE; WE
-1494; CWI; WI
-1495; WEST-CREE CWI; WI
-1496; CWII; WII
-1497; WEST-CREE CWII; WII
-1498; CWO; WO
-1499; WEST-CREE CWO; WO
-149A; CWOO; WOO
-149B; WEST-CREE CWOO; WOO
-149C; CWA; WA
-149D; WEST-CREE CWA; WA
-149E; CWAA; WAA
-149F; WEST-CREE CWAA; WAA
-14A0; NASKAPI CWAA; WAA
-14A1; C; C
-14A2; SAYISI TH;
-14A3; ME; E
-14A4; MAAI; AAI
-14A5; MI; I
-14A6; MII; II
-14A7; MO; O
-14A8; MOO; OO
-14A9; Y-CREE MOO; OO
-14AA; MA; A
-14AB; MAA; AA
-14AC; MWE; WE
-14AD; WEST-CREE MWE; WE
-14AE; MWI; WI
-14AF; WEST-CREE MWI; WI
-14B0; MWII; WII
-14B1; WEST-CREE MWII; WII
-14B2; MWO; WO
-14B3; WEST-CREE MWO; WO
-14B4; MWOO; WOO
-14B5; WEST-CREE MWOO; WOO
-14B6; MWA; WA
-14B7; WEST-CREE MWA; WA
-14B8; MWAA; WAA
-14B9; WEST-CREE MWAA; WAA
-14BA; NASKAPI MWAA; WAA
-14BB; M; C
-14BC; WEST-CREE M; C
-14BD; MH; C
-14BE; ATHAPASCAN M; C
-14BF; SAYISI M; C
-14C0; NE; E
-14C1; NAAI; AAI
-14C2; NI; I
-14C3; NII; II
-14C4; NO; O
-14C5; NOO; OO
-14C6; Y-CREE NOO; OO
-14C7; NA; A
-14C8; NAA; AA
-14C9; NWE; WE
-14CA; WEST-CREE NWE; WE
-14CB; NWA; WA
-14CC; WEST-CREE NWA; WA
-14CD; NWAA; WAA
-14CE; WEST-CREE NWAA; WAA
-14CF; NASKAPI NWAA; WAA
-14D0; N; C
-14D1; CARRIER NG; C
-14D2; NH; C
-14D3; LE; E
-14D4; LAAI; AAI
-14D5; LI; I
-14D6; LII; II
-14D7; LO; O
-14D8; LOO; OO
-14D9; Y-CREE LOO; OO
-14DA; LA; A
-14DB; LAA; AA
-14DC; LWE; WE
-14DD; WEST-CREE LWE; WE
-14DE; LWI; WI
-14DF; WEST-CREE LWI; WI
-14E0; LWII; WII
-14E1; WEST-CREE LWII; WII
-14E2; LWO; WO
-14E3; WEST-CREE LWO; WO
-14E4; LWOO; WOO
-14E5; WEST-CREE LWOO; WOO
-14E6; LWA; WA
-14E7; WEST-CREE LWA; WA
-14E8; LWAA; WAA
-14E9; WEST-CREE LWAA; WAA
-14EA; L; C
-14EB; WEST-CREE L; C
-14EC; MEDIAL L; C
-14ED; SE; E
-14EE; SAAI; AAI
-14EF; SI; I
-14F0; SII; II
-14F1; SO; O
-14F2; SOO; OO
-14F3; Y-CREE SOO; OO
-14F4; SA; A
-14F5; SAA; AA
-14F6; SWE; WE
-14F7; WEST-CREE SWE; WE
-14F8; SWI; WI
-14F9; WEST-CREE SWI; WI
-14FA; SWII; WII
-14FB; WEST-CREE SWII; WII
-14FC; SWO; WO
-14FD; WEST-CREE SWO; WO
-14FE; SWOO; WOO
-14FF; WEST-CREE SWOO; WOO
-1500; SWA; WA
-1501; WEST-CREE SWA; WA
-1502; SWAA; WAA
-1503; WEST-CREE SWAA; WAA
-1504; NASKAPI SWAA; WAA
-1505; S; C
-1506; ATHAPASCAN S; C
-1507; SW; WC
-1508; BLACKFOOT S; C
-1509; MOOSE-CREE SK;C
-150A; NASKAPI SKW; C
-150B; NASKAPI S-W; C
-150C; NASKAPI SPWA; WA
-150D; NASKAPI STWA; WA
-150E; NASKAPI SKWA; WA
-150F; NASKAPI SCWA; WA
-1510; SHE; E
-1511; SHI; I
-1512; SHII; II
-1513; SHO; O
-1514; SHOO; OO
-1515; SHA; A
-1516; SHAA; AA
-1517; SHWE; WE
-1518; WEST-CREE SHWE; WE
-1519; SHWI; WI
-151A; WEST-CREE SHWI; WI
-151B; SHWII; WII
-151C; WEST-CREE SHWII; WII
-151D; SHWO; WO
-151E; WEST-CREE SHWO; WO
-151F; SHWOO; WOO
-1520; WEST-CREE SHWOO; WOO
-1521; SHWA; WA
-1522; WEST-CREE SHWA; WA
-1523; SHWAA; WAA
-1524; WEST-CREE SHWAA; WAA
-1525; SH; C
-1526; YE; E
-1527; YAAI; AAI
-1528; YI; I
-1529; YII; II
-152A; YO; O
-152B; YOO; OO
-152C; Y-CREE YOO; OO
-152D; YA; A
-152E; YAA; AA
-152F; YWE; WE
-1530; WEST-CREE YWE; WE
-1531; YWI; WI
-1532; WEST-CREE YWI; WI
-1533; YWII; WII
-1534; WEST-CREE YWII; WII
-1535; YWO; WO
-1536; WEST-CREE YWO; WO
-1537; YWOO; WOO
-1538; WEST-CREE YWOO; WOO
-1539; YWA; WA
-153A; WEST-CREE YWA; WA
-153B; YWAA; WAA
-153C; WEST-CREE YWAA; WAA
-153D; NASKAPI YWAA; WAA
-153E; Y; C
-153F; BIBLE-CREE Y; C
-1540; WEST-CREE Y; C
-1541; SAYISI YI; I
-1542; RE; E
-1543; R-CREE RE; E
-1544; WEST-CREE LE; E
-1545; RAAI; AAI
-1546; RI; I
-1547; RII; II
-1548; RO; O
-1549; ROO; OO
-154A; WEST-CREE LO; O
-154B; RA; A
-154C; RAA; AA
-154D; WEST-CREE LA; A
-154E; RWAA; WAA
-154F; WEST-CREE RWAA; WAA
-1550; R; C
-1551; WEST-CREE R; C
-1552; MEDIAL R; C
-1553; FE; E
-1554; FAAI; AAI
-1555; FI; I
-1556; FII; II
-1557; FO; O
-1558; FOO; OO
-1559; FA; A
-155A; FAA; AA
-155B; FWAA; WAA
-155C; WEST-CREE FWAA; WAA
-155D; F; C
-155E; THE; E
-155F; N-CREE THE; E
-1560; THI; I
-1561; N-CREE THI; I
-1562; THII; II
-1563; N-CREE THII; II
-1564; THO; O
-1565; THOO; OO
-1566; THA; A
-1567; THAA; AA
-1568; THWAA; WAA
-1569; WEST-CREE THWAA; WAA
-156A; TH; C
-156B; TTHE; E
-156C; TTHI; I
-156D; TTHO; O
-156E; TTHA; A
-156F; TTH; C
-1570; TYE; E
-1571; TYI; I
-1572; TYO; O
-1573; TYA; A
-1574; NUNAVIK HE; E
-1575; NUNAVIK HI; I
-1576; NUNAVIK HII; II
-1577; NUNAVIK HO; O
-1578; NUNAVIK HOO; OO
-1579; NUNAVIK HA; A
-157A; NUNAVIK HAA; AA
-157B; NUNAVIK H; C
-157C; NUNAVUT H; C
-157D; HK; C
-157E; QAAI; AAI
-157F; QI; I
-1580; QII; II
-1581; QO; O
-1582; QOO; OO
-1583; QA; A
-1584; QAA; AA
-1585; Q; C
-1586; TLHE; E
-1587; TLHI; I
-1588; TLHO; O
-1589; TLHA; A
-158A; WEST-CREE RE; E
-158B; WEST-CREE RI; I
-158C; WEST-CREE RO; O
-158D; WEST-CREE RA; A
-158E; NGAAI; AAI
-158F; NGI; I
-1590; NGII; II
-1591; NGO; O
-1592; NGOO; OO
-1593; NGA; A
-1594; NGAA; AA
-1595; NG; C
-1596; NNG; C
-1597; SAYISI SHE; E
-1598; SAYISI SHI; I
-1599; SAYISI SHO; O
-159A; SAYISI SHA; A
-159B; WOODS-CREE THE; E
-159C; WOODS-CREE THI; I
-159D; WOODS-CREE THO; O
-159E; WOODS-CREE THA; A
-159F; WOODS-CREE TH; C
-15A0; LHI; I
-15A1; LHII; II
-15A2; LHO; O
-15A3; LHOO; OO
-15A4; LHA; A
-15A5; LHAA; AA
-15A6; LH; C
-15A7; TH-CREE THE; E
-15A8; TH-CREE THI; I
-15A9; TH-CREE THII; II
-15AA; TH-CREE THO; O
-15AB; TH-CREE THOO; OO
-15AC; TH-CREE THA; A
-15AD; TH-CREE THAA; AA
-15AE; TH-CREE TH; C
-15AF; AIVILIK B; C
-15B0; BLACKFOOT E; E
-15B1; BLACKFOOT I; I
-15B2; BLACKFOOT O; O
-15B3; BLACKFOOT A; A
-15B4; BLACKFOOT WE; E
-15B5; BLACKFOOT WI; I
-15B6; BLACKFOOT WO; O
-15B7; BLACKFOOT WA; A
-15B8; BLACKFOOT NE; E
-15B9; BLACKFOOT NI; I
-15BA; BLACKFOOT NO; O
-15BB; BLACKFOOT NA; A
-15BC; BLACKFOOT KE; E
-15BD; BLACKFOOT KI; I
-15BE; BLACKFOOT KO; O
-15BF; BLACKFOOT KA; A
-15C0; SAYISI HE; E
-15C1; SAYISI HI; I
-15C2; SAYISI HO; O
-15C3; SAYISI HA; A
-15C4; CARRIER GHU; U
-15C5; CARRIER GHO; O
-15C6; CARRIER GHE; E
-15C7; CARRIER GHEE; EE
-15C8; CARRIER GHI; I
-15C9; CARRIER GHA; A
-15CA; CARRIER RU; U
-15CB; CARRIER RO; O
-15CC; CARRIER RE; E
-15CD; CARRIER REE; EE
-15CE; CARRIER RI; I
-15CF; CARRIER RA; A
-15D0; CARRIER WU; U
-15D1; CARRIER WO; O
-15D2; CARRIER WE; E
-15D3; CARRIER WEE; EE
-15D4; CARRIER WI; I
-15D5; CARRIER WA; A
-15D6; CARRIER HWU; WU
-15D7; CARRIER HWO; WO
-15D8; CARRIER HWE; WE
-15D9; CARRIER HWEE; WEE
-15DA; CARRIER HWI; WI
-15DB; CARRIER HWA; WA
-15DC; CARRIER THU; U
-15DD; CARRIER THO; O
-15DE; CARRIER THE; E
-15DF; CARRIER THEE; EE
-15E0; CARRIER THI; I
-15E1; CARRIER THA; A
-15E2; CARRIER TTU; U
-15E3; CARRIER TTO; O
-15E4; CARRIER TTE; E
-15E5; CARRIER TTEE; EE
-15E6; CARRIER TTI; I
-15E7; CARRIER TTA; A
-15E8; CARRIER PU; U
-15E9; CARRIER PO; O
-15EA; CARRIER PE; E
-15EB; CARRIER PEE; EE
-15EC; CARRIER PI; I
-15ED; CARRIER PA; A
-15EE; CARRIER P;
-15EF; CARRIER GU; U
-15F0; CARRIER GO; O
-15F1; CARRIER GE; E
-15F2; CARRIER GEE; EE
-15F3; CARRIER GI; I
-15F4; CARRIER GA; A
-15F5; CARRIER KHU; U
-15F6; CARRIER KHO; O
-15F7; CARRIER KHE; E
-15F8; CARRIER KHEE; EE
-15F9; CARRIER KHI; I
-15FA; CARRIER KHA; A
-15FB; CARRIER KKU; U
-15FC; CARRIER KKO; O
-15FD; CARRIER KKE; E
-15FE; CARRIER KKEE; EE
-15FF; CARRIER KKI; I
-1600; CARRIER KKA; A
-1601; CARRIER KK;
-1602; CARRIER NU; U
-1603; CARRIER NO; O
-1604; CARRIER NE; E
-1605; CARRIER NEE; EE
-1606; CARRIER NI; I
-1607; CARRIER NA; A
-1608; CARRIER MU; U
-1609; CARRIER MO; O
-160A; CARRIER ME; E
-160B; CARRIER MEE; EE
-160C; CARRIER MI; I
-160D; CARRIER MA; A
-160E; CARRIER YU; U
-160F; CARRIER YO; O
-1610; CARRIER YE; E
-1611; CARRIER YEE; EE
-1612; CARRIER YI; I
-1613; CARRIER YA; A
-1614; CARRIER JU; U
-1615; SAYISI JU; U
-1616; CARRIER JO; O
-1617; CARRIER JE; E
-1618; CARRIER JEE; EE
-1619; CARRIER JI; I
-161A; SAYISI JI; I
-161B; CARRIER JA; A
-161C; CARRIER JJU; U
-161D; CARRIER JJO; O
-161E; CARRIER JJE; E
-161F; CARRIER JJEE; EE
-1620; CARRIER JJI; I
-1621; CARRIER JJA; A
-1622; CARRIER LU; U
-1623; CARRIER LO; O
-1624; CARRIER LE; E
-1625; CARRIER LEE; EE
-1626; CARRIER LI; I
-1627; CARRIER LA; A
-1628; CARRIER DLU; U
-1629; CARRIER DLO; O
-162A; CARRIER DLE; E
-162B; CARRIER DLEE; EE
-162C; CARRIER DLI; I
-162D; CARRIER DLA; A
-162E; CARRIER LHU; U
-162F; CARRIER LHO; O
-1630; CARRIER LHE; E
-1631; CARRIER LHEE; EE
-1632; CARRIER LHI; I
-1633; CARRIER LHA; A
-1634; CARRIER TLHU; U
-1635; CARRIER TLHO; O
-1636; CARRIER TLHE; E
-1637; CARRIER TLHEE; EE
-1638; CARRIER TLHI; I
-1639; CARRIER TLHA; A
-163A; CARRIER TLU; U
-163B; CARRIER TLO; O
-163C; CARRIER TLE; E
-163D; CARRIER TLEE; EE
-163E; CARRIER TLI; I
-163F; CARRIER TLA; A
-1640; CARRIER ZU; U
-1641; CARRIER ZO; O
-1642; CARRIER ZE; E
-1643; CARRIER ZEE; EE
-1644; CARRIER ZI; I
-1645; CARRIER ZA; A
-1646; CARRIER Z;
-1647; CARRIER INITIAL Z;
-1648; CARRIER DZU; U
-1649; CARRIER DZO; O
-164A; CARRIER DZE; E
-164B; CARRIER DZEE; EE
-164C; CARRIER DZI; I
-164D; CARRIER DZA; A
-164E; CARRIER SU; U
-164F; CARRIER SO; O
-1650; CARRIER SE; E
-1651; CARRIER SEE; EE
-1652; CARRIER SI; I
-1653; CARRIER SA; A
-1654; CARRIER SHU; U
-1655; CARRIER SHO; O
-1656; CARRIER SHE; E
-1657; CARRIER SHEE; EE
-1658; CARRIER SHI; I
-1659; CARRIER SHA; A
-165A; CARRIER SH;
-165B; CARRIER TSU; U
-165C; CARRIER TSO; O
-165D; CARRIER TSE; E
-165E; CARRIER TSEE; EE
-165F; CARRIER TSI; I
-1660; CARRIER TSA; A
-1661; CARRIER CHU; U
-1662; CARRIER CHO; O
-1663; CARRIER CHE; E
-1664; CARRIER CHEE; EE
-1665; CARRIER CHI; I
-1666; CARRIER CHA; A
-1667; CARRIER TTSU; U
-1668; CARRIER TTSO; O
-1669; CARRIER TTSE; E
-166A; CARRIER TTSEE; EE
-166B; CARRIER TTSI; I
-166C; CARRIER TTSA; A
-166F; QAI; AI
-1670; NGAI; AI
-1671; NNGI; I
-1672; NNGII; II
-1673; NNGO; O
-1674; NNGOO; OO
-1675; NNGA; A
-1676; NNGAA; AA
-#
-# Katakana
-#
-30A1; SMALL A; A
-30A2; A; A
-30A3; SMALL I; I
-30A4; I; I
-30A5; SMALL U; U
-30A6; U; U
-30A7; SMALL E; E
-30A8; E; E
-30A9; SMALL O; O
-30AA; O; O
-30AB; KA; A
-30AC; GA; A
-30AD; KI; I
-30AE; GI; I
-30AF; KU; U
-30B0; GU; U
-30B1; KE; E
-30B2; GE; E
-30B3; KO; O
-30B4; GO; O
-30B5; SA; A
-30B6; ZA; A
-30B7; SI; I
-30B8; ZI; I
-30B9; SU; U
-30BA; ZU; U
-30BB; SE; E
-30BC; ZE; E
-30BD; SO; O
-30BE; ZO; O
-30BF; TA; A
-30C0; DA; A
-30C1; TI; I
-30C2; DI; I
-30C3; SMALL TU; U
-30C4; TU; U
-30C5; DU; U
-30C6; TE; E
-30C7; DE; E
-30C8; TO; O
-30C9; DO; O
-30CA; NA; A
-30CB; NI; I
-30CC; NU; U
-30CD; NE; E
-30CE; NO; O
-30CF; HA; A
-30D0; BA; A
-30D1; PA; A
-30D2; HI; I
-30D3; BI; I
-30D4; PI; I
-30D5; HU; U
-30D6; BU; U
-30D7; PU; U
-30D8; HE; E
-30D9; BE; E
-30DA; PE; E
-30DB; HO; O
-30DC; BO; O
-30DD; PO; O
-30DE; MA; A
-30DF; MI; I
-30E0; MU; U
-30E1; ME; E
-30E2; MO; O
-30E3; SMALL YA; A
-30E4; YA; A
-30E5; SMALL YU; U
-30E6; YU; U
-30E7; SMALL YO; O
-30E8; YO; O
-30E9; RA; A
-30EA; RI; I
-30EB; RU; U
-30EC; RE; E
-30ED; RO; O
-30EE; SMALL WA; A
-30EF; WA; A
-30F0; WI; I
-30F1; WE; E
-30F2; WO; O
-30F3; N; C
-30F4; VU; U
-30F5; SMALL KA; A
-30F6; SMALL KE; E
-30F7; VA; A
-30F8; VI; I
-30F9; VE; E
-30FA; VO; O
-32D0; CIRCLED KATAKANA A; A
-32D1; CIRCLED KATAKANA I; I
-32D2; CIRCLED KATAKANA U; U
-32D3; CIRCLED KATAKANA E; E
-32D4; CIRCLED KATAKANA O; O
-32D5; CIRCLED KATAKANA KA; A
-32D6; CIRCLED KATAKANA KI; I
-32D7; CIRCLED KATAKANA KU; U
-32D8; CIRCLED KATAKANA KE; E
-32D9; CIRCLED KATAKANA KO; O
-32DA; CIRCLED KATAKANA SA; A
-32DB; CIRCLED KATAKANA SI; I
-32DC; CIRCLED KATAKANA SU; U
-32DD; CIRCLED KATAKANA SE; E
-32DE; CIRCLED KATAKANA SO; O
-32DF; CIRCLED KATAKANA TA; A
-32E0; CIRCLED KATAKANA TI; I
-32E1; CIRCLED KATAKANA TU; U
-32E2; CIRCLED KATAKANA TE; E
-32E3; CIRCLED KATAKANA TO; O
-32E4; CIRCLED KATAKANA NA; A
-32E5; CIRCLED KATAKANA NI; I
-32E6; CIRCLED KATAKANA NU; U
-32E7; CIRCLED KATAKANA NE; E
-32E8; CIRCLED KATAKANA NO; O
-32E9; CIRCLED KATAKANA HA; A
-32EA; CIRCLED KATAKANA HI; I
-32EB; CIRCLED KATAKANA HU; U
-32EC; CIRCLED KATAKANA HE; E
-32ED; CIRCLED KATAKANA HO; O
-32EE; CIRCLED KATAKANA MA; A
-32EF; CIRCLED KATAKANA MI; I
-32F0; CIRCLED KATAKANA MU; U
-32F1; CIRCLED KATAKANA ME; E
-32F2; CIRCLED KATAKANA MO; O
-32F3; CIRCLED KATAKANA YA; A
-32F4; CIRCLED KATAKANA YU; U
-32F5; CIRCLED KATAKANA YO; O
-32F6; CIRCLED KATAKANA RA; A
-32F7; CIRCLED KATAKANA RI; I
-32F8; CIRCLED KATAKANA RU; U
-32F9; CIRCLED KATAKANA RE; E
-32FA; CIRCLED KATAKANA RO; O
-32FB; CIRCLED KATAKANA WA; A
-32FC; CIRCLED KATAKANA WI; I
-32FD; CIRCLED KATAKANA WE; E
-32FE; CIRCLED KATAKANA WO; O
-#
-# Katakana
-#
-FF66; HALFWIDTH WO; O
-FF67; HALFWIDTH SMALL A; A
-FF68; HALFWIDTH SMALL I; I
-FF69; HALFWIDTH SMALL U; U
-FF6A; HALFWIDTH SMALL E; E
-FF6B; HALFWIDTH SMALL O; O
-FF6C; HALFWIDTH SMALL YA; A
-FF6D; HALFWIDTH SMALL YU; U
-FF6E; HALFWIDTH SMALL YO; O
-FF6F; HALFWIDTH SMALL TU; U
-FF71; HALFWIDTH A; A
-FF72; HALFWIDTH I; I
-FF73; HALFWIDTH U; U
-FF74; HALFWIDTH E; E
-FF75; HALFWIDTH O; O
-FF76; HALFWIDTH KA; A
-FF77; HALFWIDTH KI; I
-FF78; HALFWIDTH KU; U
-FF79; HALFWIDTH KE; E
-FF7A; HALFWIDTH KO; O
-FF7B; HALFWIDTH SA; A
-FF7C; HALFWIDTH SI; I
-FF7D; HALFWIDTH SU; U
-FF7E; HALFWIDTH SE; E
-FF7F; HALFWIDTH SO; O
-FF80; HALFWIDTH TA; A
-FF81; HALFWIDTH TI; I
-FF82; HALFWIDTH TU; U
-FF83; HALFWIDTH TE; E
-FF84; HALFWIDTH TO; O
-FF85; HALFWIDTH NA; A
-FF86; HALFWIDTH NI; I
-FF87; HALFWIDTH NU; U
-FF88; HALFWIDTH NE; E
-FF89; HALFWIDTH NO; O
-FF8A; HALFWIDTH HA; A
-FF8B; HALFWIDTH HI; I
-FF8C; HALFWIDTH HU; U
-FF8D; HALFWIDTH HE; E
-FF8E; HALFWIDTH HO; O
-FF8F; HALFWIDTH MA; A
-FF90; HALFWIDTH MI; I
-FF91; HALFWIDTH MU; U
-FF92; HALFWIDTH ME; E
-FF93; HALFWIDTH MO; O
-FF94; HALFWIDTH YA; A
-FF95; HALFWIDTH YU; U
-FF96; HALFWIDTH YO; O
-FF97; HALFWIDTH RA; A
-FF98; HALFWIDTH RI; I
-FF99; HALFWIDTH RU; U
-FF9A; HALFWIDTH RE; E
-FF9B; HALFWIDTH RO; O
-FF9C; HALFWIDTH WA; A
-FF9D; HALFWIDTH N; C
-#
-# Hiragana
-#
-3041; SMALL A; A
-3042; A; A
-3043; SMALL I; I
-3044; I; I
-3045; SMALL U; U
-3046; U; U
-3047; SMALL E; E
-3048; E; E
-3049; SMALL O; O
-304A; O; O
-304B; KA; A
-304C; GA; A
-304D; KI; I
-304E; GI; I
-304F; KU; U
-3050; GU; U
-3051; KE; E
-3052; GE; E
-3053; KO; O
-3054; GO; O
-3055; SA; A
-3056; ZA; A
-3057; SI; I
-3058; ZI; I
-3059; SU; U
-305A; ZU; U
-305B; SE; E
-305C; ZE; E
-305D; SO; O
-305E; ZO; O
-305F; TA; A
-3060; DA; A
-3061; TI; I
-3062; DI; I
-3063; SMALL TU; U
-3064; TU; U
-3065; DU; U
-3066; TE; E
-3067; DE; E
-3068; TO; O
-3069; DO; O
-306A; NA; A
-306B; NI; I
-306C; NU; U
-306D; NE; E
-306E; NO; O
-306F; HA; A
-3070; BA; A
-3071; PA; A
-3072; HI; I
-3073; BI; I
-3074; PI; I
-3075; HU; U
-3076; BU; U
-3077; PU; U
-3078; HE; E
-3079; BE; E
-307A; PE; E
-307B; HO; O
-307C; BO; O
-307D; PO; O
-307E; MA; A
-307F; MI; I
-3080; MU; U
-3081; ME; E
-3082; MO; O
-3083; SMALL YA; A
-3084; YA; A
-3085; SMALL YU; U
-3086; YU; U
-3087; SMALL YO; O
-3088; YO; O
-3089; RA; A
-308A; RI; I
-308B; RU; U
-308C; RE; E
-308D; RO; O
-308E; SMALL WA; A
-308F; WA; A
-3090; WI; I
-3091; WE; E
-3092; WO; O
-3093; N; N
-3094; VU; U
diff --git a/contrib/perl5/lib/utf8.pm b/contrib/perl5/lib/utf8.pm
deleted file mode 100644
index 6d6c0eb..0000000
--- a/contrib/perl5/lib/utf8.pm
+++ /dev/null
@@ -1,84 +0,0 @@
-package utf8;
-
-if (ord('A') != 193) { # make things more pragmatic for EBCDIC folk
-
-$utf8::hint_bits = 0x00800000;
-
-sub import {
- $^H |= $utf8::hint_bits;
- $enc{caller()} = $_[1] if $_[1];
-}
-
-sub unimport {
- $^H &= ~$utf8::hint_bits;
-}
-
-sub AUTOLOAD {
- require "utf8_heavy.pl";
- goto &$AUTOLOAD if defined &$AUTOLOAD;
- Carp::croak("Undefined subroutine $AUTOLOAD called");
-}
-
-}
-
-1;
-__END__
-
-=head1 NAME
-
-utf8 - Perl pragma to enable/disable UTF-8 in source code
-
-=head1 SYNOPSIS
-
- use utf8;
- no utf8;
-
-=head1 DESCRIPTION
-
-WARNING: The implementation of Unicode support in Perl is incomplete.
-See L<perlunicode> for the exact details.
-
-The C<use utf8> pragma tells the Perl parser to allow UTF-8 in the
-program text in the current lexical scope. The C<no utf8> pragma
-tells Perl to switch back to treating the source text as literal
-bytes in the current lexical scope.
-
-This pragma is primarily a compatibility device. Perl versions
-earlier than 5.6 allowed arbitrary bytes in source code, whereas
-in future we would like to standardize on the UTF-8 encoding for
-source text. Until UTF-8 becomes the default format for source
-text, this pragma should be used to recognize UTF-8 in the source.
-When UTF-8 becomes the standard source format, this pragma will
-effectively become a no-op. This pragma already is a no-op on
-EBCDIC platforms (where it is alright to code perl in EBCDIC
-rather than UTF-8).
-
-Enabling the C<utf8> pragma has the following effects:
-
-=over
-
-=item *
-
-Bytes in the source text that have their high-bit set will be treated
-as being part of a literal UTF-8 character. This includes most literals
-such as identifiers, string constants, constant regular expression patterns
-and package names.
-
-=item *
-
-In the absence of inputs marked as UTF-8, regular expressions within the
-scope of this pragma will default to using character semantics instead
-of byte semantics.
-
- @bytes_or_chars = split //, $data; # may split to bytes if data
- # $data isn't UTF-8
- {
- use utf8; # force char semantics
- @chars = split //, $data; # splits characters
- }
-
-=head1 SEE ALSO
-
-L<perlunicode>, L<bytes>
-
-=cut
diff --git a/contrib/perl5/lib/utf8_heavy.pl b/contrib/perl5/lib/utf8_heavy.pl
deleted file mode 100644
index 8649e9e..0000000
--- a/contrib/perl5/lib/utf8_heavy.pl
+++ /dev/null
@@ -1,221 +0,0 @@
-package utf8;
-
-my $DEBUG = 0;
-my $seq = "AAA0000";
-
-sub DESTROY {}
-
-sub croak { require Carp; Carp::croak(@_) }
-
-sub SWASHNEW {
- my ($class, $type, $list, $minbits, $none) = @_;
- local $^D = 0 if $^D;
- print STDERR "SWASHNEW @_\n" if $DEBUG;
- my $extras;
- my $bits;
-
- if ($type and ref ${"${class}::{$type}"} eq $class) {
- warn qq/Found \${"${class}::{$type}"}\n/ if $DEBUG;
- return ${"${class}::{$type}"}; # Already there...
- }
-
- $type ||= $seq++;
-
- my $caller;
- my $i = 0;
- while (($caller = caller($i)) eq __PACKAGE__) { $i++ }
- my $encoding = $enc{$caller} || "unicode";
- (my $file = $type) =~ s!::!/!g;
- $file =~ s#^(I[sn]|To)([A-Z].*)#$1/$2#;
- $list ||= eval { $caller->$type(); }
- || do "$file.pl"
- || do "$encoding/$file.pl"
- || do "$encoding/Is/${type}.pl"
- || croak("Can't find $encoding character property definition via $caller->$type or $file.pl");
-
- $| = 1;
-
- if ($list) {
- my @tmp = split(/^/m, $list);
- my %seen;
- no warnings;
- $extras = join '', grep /^[^0-9a-fA-F]/, @tmp;
- $list = join '',
- sort { hex $a <=> hex $b }
- grep {/^([0-9a-fA-F]+)/ and not $seen{$1}++} @tmp; # XXX doesn't do ranges right
- }
-
- if ($none) {
- my $hextra = sprintf "%04x", $none + 1;
- $list =~ s/\tXXXX$/\t$hextra/mg;
- }
-
- if ($minbits < 32) {
- my $top = 0;
- while ($list =~ /^([0-9a-fA-F]+)(?:\t([0-9a-fA-F]+)?)(?:\t([0-9a-fA-F]+))?/mg) {
- my $min = hex $1;
- my $max = hex(defined $2 ? $2 : $1);
- my $val = hex(defined $3 ? $3 : "");
- $val += $max - $min if defined $3;
- $top = $val if $val > $top;
- }
- $bits =
- $top > 0xffff ? 32 :
- $top > 0xff ? 16 :
- $top > 1 ? 8 : 1
- }
- $bits = $minbits if $bits < $minbits;
-
- my @extras;
- for my $x ($extras) {
- pos $x = 0;
- while ($x =~ /^([^0-9a-fA-F\n])(.*)/mg) {
- my $char = $1;
- my $name = $2;
- # print STDERR "$1 => $2\n" if $DEBUG;
- if ($char =~ /[-+!]/) {
- my ($c,$t) = split(/::/, $name, 2); # bogus use of ::, really
- my $subobj = $c->SWASHNEW($t, "", 0, 0, 0);
- push @extras, $name => $subobj;
- $bits = $subobj->{BITS} if $bits < $subobj->{BITS};
- }
- }
- }
-
- print STDERR "CLASS = $class, TYPE => $type, BITS => $bits, NONE => $none\nEXTRAS =>\n$extras\nLIST =>\n$list\n" if $DEBUG;
-
- ${"${class}::{$type}"} = bless {
- TYPE => $type,
- BITS => $bits,
- EXTRAS => $extras,
- LIST => $list,
- NONE => $none,
- @extras,
- } => $class;
-}
-
-# NOTE: utf8.c:swash_init() assumes entries are never modified once generated.
-
-sub SWASHGET {
- my ($self, $start, $len) = @_;
- local $^D = 0 if $^D;
- my $type = $self->{TYPE};
- my $bits = $self->{BITS};
- my $none = $self->{NONE};
- print STDERR "SWASHGET @_ [$type/$bits/$none]\n" if $DEBUG;
- my $end = $start + $len;
- my $swatch = "";
- my $key;
- vec($swatch, $len - 1, $bits) = 0; # Extend to correct length.
- if ($none) {
- for $key (0 .. $len - 1) { vec($swatch, $key, $bits) = $none }
- }
-
- for ($self->{LIST}) {
- pos $_ = 0;
- if ($bits > 1) {
- LINE:
- while (/^([0-9a-fA-F]+)(?:\t([0-9a-fA-F]+)?)(?:\t([0-9a-fA-F]+))?/mg) {
- my $min = hex $1;
- my $max = (defined $2 ? hex $2 : $min);
- my $val = hex $3;
- next if $max < $start;
-# print "$min $max $val\n";
- if ($none) {
- if ($min < $start) {
- $val += $start - $min if $val < $none;
- $min = $start;
- }
- for ($key = $min; $key <= $max; $key++) {
- last LINE if $key >= $end;
-# print STDERR "$key => $val\n" if $DEBUG;
- vec($swatch, $key - $start, $bits) = $val;
- ++$val if $val < $none;
- }
- }
- else {
- if ($min < $start) {
- $val += $start - $min;
- $min = $start;
- }
- for ($key = $min; $key <= $max; $key++, $val++) {
- last LINE if $key >= $end;
-# print STDERR "$key => $val\n" if $DEBUG;
- vec($swatch, $key - $start, $bits) = $val;
- }
- }
- }
- }
- else {
- LINE:
- while (/^([0-9a-fA-F]+)(?:\t([0-9a-fA-F]+))?/mg) {
- my $min = hex $1;
- my $max = (defined $2 ? hex $2 : $min);
- next if $max < $start;
- if ($min < $start) {
- $min = $start;
- }
- for ($key = $min; $key <= $max; $key++) {
- last LINE if $key >= $end;
-# print STDERR "$key => 1\n" if $DEBUG;
- vec($swatch, $key - $start, 1) = 1;
- }
- }
- }
- }
- for my $x ($self->{EXTRAS}) {
- pos $x = 0;
- while ($x =~ /^([-+!])(.*)/mg) {
- my $char = $1;
- my $name = $2;
- print STDERR "INDIRECT $1 $2\n" if $DEBUG;
- my $otherbits = $self->{$name}->{BITS};
- croak("SWASHGET size mismatch") if $bits < $otherbits;
- my $other = $self->{$name}->SWASHGET($start, $len);
- if ($char eq '+') {
- if ($bits == 1 and $otherbits == 1) {
- $swatch |= $other;
- }
- else {
- for ($key = 0; $key < $len; $key++) {
- vec($swatch, $key, $bits) = vec($other, $key, $otherbits);
- }
- }
- }
- elsif ($char eq '!') {
- if ($bits == 1 and $otherbits == 1) {
- $swatch |= ~$other;
- }
- else {
- for ($key = 0; $key < $len; $key++) {
- if (!vec($other, $key, $otherbits)) {
- vec($swatch, $key, $bits) = 1;
- }
- }
- }
- }
- elsif ($char eq '-') {
- if ($bits == 1 and $otherbits == 1) {
- $swatch &= ~$other;
- }
- else {
- for ($key = 0; $key < $len; $key++) {
- if (vec($other, $key, $otherbits)) {
- vec($swatch, $key, $bits) = 0;
- }
- }
- }
- }
- }
- }
- if ($DEBUG) {
- print STDERR "CELLS ";
- for ($key = 0; $key < $len; $key++) {
- print STDERR vec($swatch, $key, $bits), " ";
- }
- print STDERR "\n";
- }
- $swatch;
-}
-
-1;
diff --git a/contrib/perl5/lib/validate.pl b/contrib/perl5/lib/validate.pl
deleted file mode 100644
index ec4a04b..0000000
--- a/contrib/perl5/lib/validate.pl
+++ /dev/null
@@ -1,104 +0,0 @@
-;# $RCSfile: validate.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:19 $
-
-;# The validate routine takes a single multiline string consisting of
-;# lines containing a filename plus a file test to try on it. (The
-;# file test may also be a 'cd', causing subsequent relative filenames
-;# to be interpreted relative to that directory.) After the file test
-;# you may put '|| die' to make it a fatal error if the file test fails.
-;# The default is '|| warn'. The file test may optionally have a ! prepended
-;# to test for the opposite condition. If you do a cd and then list some
-;# relative filenames, you may want to indent them slightly for readability.
-;# If you supply your own "die" or "warn" message, you can use $file to
-;# interpolate the filename.
-
-;# Filetests may be bunched: -rwx tests for all of -r, -w and -x.
-;# Only the first failed test of the bunch will produce a warning.
-
-;# The routine returns the number of warnings issued.
-
-;# Usage:
-;# require "validate.pl";
-;# $warnings += do validate('
-;# /vmunix -e || die
-;# /boot -e || die
-;# /bin cd
-;# csh -ex
-;# csh !-ug
-;# sh -ex
-;# sh !-ug
-;# /usr -d || warn "What happened to $file?\n"
-;# ');
-
-sub validate {
- local($file,$test,$warnings,$oldwarnings);
- foreach $check (split(/\n/,$_[0])) {
- next if $check =~ /^#/;
- next if $check =~ /^$/;
- ($file,$test) = split(' ',$check,2);
- if ($test =~ s/^(!?-)(\w{2,}\b)/$1Z/) {
- $testlist = $2;
- @testlist = split(//,$testlist);
- }
- else {
- @testlist = ('Z');
- }
- $oldwarnings = $warnings;
- foreach $one (@testlist) {
- $this = $test;
- $this =~ s/(-\w\b)/$1 \$file/g;
- $this =~ s/-Z/-$one/;
- $this .= ' || warn' unless $this =~ /\|\|/;
- $this =~ s/^(.*\S)\s*\|\|\s*(die|warn)$/$1 || do valmess('$2','$1')/;
- $this =~ s/\bcd\b/chdir (\$cwd = \$file)/g;
- eval $this;
- last if $warnings > $oldwarnings;
- }
- }
- $warnings;
-}
-
-sub valmess {
- local($disposition,$this) = @_;
- $file = $cwd . '/' . $file unless $file =~ m|^/|;
- if ($this =~ /^(!?)-(\w)\s+\$file\s*$/) {
- $neg = $1;
- $tmp = $2;
- $tmp eq 'r' && ($mess = "$file is not readable by uid $>.");
- $tmp eq 'w' && ($mess = "$file is not writable by uid $>.");
- $tmp eq 'x' && ($mess = "$file is not executable by uid $>.");
- $tmp eq 'o' && ($mess = "$file is not owned by uid $>.");
- $tmp eq 'R' && ($mess = "$file is not readable by you.");
- $tmp eq 'W' && ($mess = "$file is not writable by you.");
- $tmp eq 'X' && ($mess = "$file is not executable by you.");
- $tmp eq 'O' && ($mess = "$file is not owned by you.");
- $tmp eq 'e' && ($mess = "$file does not exist.");
- $tmp eq 'z' && ($mess = "$file does not have zero size.");
- $tmp eq 's' && ($mess = "$file does not have non-zero size.");
- $tmp eq 'f' && ($mess = "$file is not a plain file.");
- $tmp eq 'd' && ($mess = "$file is not a directory.");
- $tmp eq 'l' && ($mess = "$file is not a symbolic link.");
- $tmp eq 'p' && ($mess = "$file is not a named pipe (FIFO).");
- $tmp eq 'S' && ($mess = "$file is not a socket.");
- $tmp eq 'b' && ($mess = "$file is not a block special file.");
- $tmp eq 'c' && ($mess = "$file is not a character special file.");
- $tmp eq 'u' && ($mess = "$file does not have the setuid bit set.");
- $tmp eq 'g' && ($mess = "$file does not have the setgid bit set.");
- $tmp eq 'k' && ($mess = "$file does not have the sticky bit set.");
- $tmp eq 'T' && ($mess = "$file is not a text file.");
- $tmp eq 'B' && ($mess = "$file is not a binary file.");
- if ($neg eq '!') {
- $mess =~ s/ is not / should not be / ||
- $mess =~ s/ does not / should not / ||
- $mess =~ s/ not / /;
- }
- print STDERR $mess,"\n";
- }
- else {
- $this =~ s/\$file/'$file'/g;
- print STDERR "Can't do $this.\n";
- }
- if ($disposition eq 'die') { exit 1; }
- ++$warnings;
-}
-
-1;
diff --git a/contrib/perl5/lib/vars.pm b/contrib/perl5/lib/vars.pm
deleted file mode 100644
index 39a15bd..0000000
--- a/contrib/perl5/lib/vars.pm
+++ /dev/null
@@ -1,83 +0,0 @@
-package vars;
-
-require 5.002;
-
-# The following require can't be removed during maintenance
-# releases, sadly, because of the risk of buggy code that does
-# require Carp; Carp::croak "..."; without brackets dying
-# if Carp hasn't been loaded in earlier compile time. :-(
-# We'll let those bugs get found on the development track.
-require Carp if $] < 5.00450;
-
-use warnings::register;
-require strict;
-
-sub import {
- my $callpack = caller;
- my ($pack, @imports, $sym, $ch) = @_;
- foreach $sym (@imports) {
- ($ch, $sym) = unpack('a1a*', $sym);
- if ($sym =~ tr/A-Za-z_0-9//c) {
- # time for a more-detailed check-up
- if ($sym =~ /::/) {
- require Carp;
- Carp::croak("Can't declare another package's variables");
- } elsif ($sym =~ /^\w+[[{].*[]}]$/) {
- require Carp;
- Carp::croak("Can't declare individual elements of hash or array");
- } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
- warnings::warn("No need to declare built-in vars");
- } elsif ( $^H &= strict::bits('vars') ) {
- Carp::croak("'$ch$sym' is not a valid variable name under strict vars");
- }
- }
- *{"${callpack}::$sym"} =
- ( $ch eq "\$" ? \$ {"${callpack}::$sym"}
- : $ch eq "\@" ? \@ {"${callpack}::$sym"}
- : $ch eq "\%" ? \% {"${callpack}::$sym"}
- : $ch eq "\*" ? \* {"${callpack}::$sym"}
- : $ch eq "\&" ? \& {"${callpack}::$sym"}
- : do {
- require Carp;
- Carp::croak("'$ch$sym' is not a valid variable name");
- });
- }
-};
-
-1;
-__END__
-
-=head1 NAME
-
-vars - Perl pragma to predeclare global variable names (obsolete)
-
-=head1 SYNOPSIS
-
- use vars qw($frob @mung %seen);
-
-=head1 DESCRIPTION
-
-NOTE: The functionality provided by this pragma has been superseded
-by C<our> declarations, available in Perl v5.6.0 or later. See
-L<perlfunc/our>.
-
-This will predeclare all the variables whose names are
-in the list, allowing you to use them under "use strict", and
-disabling any typo warnings.
-
-Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
-C<use subs> declarations are not BLOCK-scoped. They are thus effective
-for the entire file in which they appear. You may not rescind such
-declarations with C<no vars> or C<no subs>.
-
-Packages such as the B<AutoLoader> and B<SelfLoader> that delay
-loading of subroutines within packages can create problems with
-package lexicals defined using C<my()>. While the B<vars> pragma
-cannot duplicate the effect of package lexicals (total transparency
-outside of the package), it can act as an acceptable substitute by
-pre-declaring global symbols, ensuring their availability to the
-later-loaded routines.
-
-See L<perlmodlib/Pragmatic Modules>.
-
-=cut
diff --git a/contrib/perl5/lib/warnings.pm b/contrib/perl5/lib/warnings.pm
deleted file mode 100644
index 2517239..0000000
--- a/contrib/perl5/lib/warnings.pm
+++ /dev/null
@@ -1,419 +0,0 @@
-
-# This file was created by warnings.pl
-# Any changes made here will be lost.
-#
-
-package warnings;
-
-=head1 NAME
-
-warnings - Perl pragma to control optional warnings
-
-=head1 SYNOPSIS
-
- use warnings;
- no warnings;
-
- use warnings "all";
- no warnings "all";
-
- use warnings::register;
- if (warnings::enabled()) {
- warnings::warn("some warning");
- }
-
- if (warnings::enabled("void")) {
- warnings::warn("void", "some warning");
- }
-
- if (warnings::enabled($object)) {
- warnings::warn($object, "some warning");
- }
-
- warnif("some warning");
- warnif("void", "some warning");
- warnif($object, "some warning");
-
-=head1 DESCRIPTION
-
-If no import list is supplied, all possible warnings are either enabled
-or disabled.
-
-A number of functions are provided to assist module authors.
-
-=over 4
-
-=item use warnings::register
-
-Creates a new warnings category with the same name as the package where
-the call to the pragma is used.
-
-=item warnings::enabled()
-
-Use the warnings category with the same name as the current package.
-
-Return TRUE if that warnings category is enabled in the calling module.
-Otherwise returns FALSE.
-
-=item warnings::enabled($category)
-
-Return TRUE if the warnings category, C<$category>, is enabled in the
-calling module.
-Otherwise returns FALSE.
-
-=item warnings::enabled($object)
-
-Use the name of the class for the object reference, C<$object>, as the
-warnings category.
-
-Return TRUE if that warnings category is enabled in the first scope
-where the object is used.
-Otherwise returns FALSE.
-
-=item warnings::warn($message)
-
-Print C<$message> to STDERR.
-
-Use the warnings category with the same name as the current package.
-
-If that warnings category has been set to "FATAL" in the calling module
-then die. Otherwise return.
-
-=item warnings::warn($category, $message)
-
-Print C<$message> to STDERR.
-
-If the warnings category, C<$category>, has been set to "FATAL" in the
-calling module then die. Otherwise return.
-
-=item warnings::warn($object, $message)
-
-Print C<$message> to STDERR.
-
-Use the name of the class for the object reference, C<$object>, as the
-warnings category.
-
-If that warnings category has been set to "FATAL" in the scope where C<$object>
-is first used then die. Otherwise return.
-
-
-=item warnings::warnif($message)
-
-Equivalent to:
-
- if (warnings::enabled())
- { warnings::warn($message) }
-
-=item warnings::warnif($category, $message)
-
-Equivalent to:
-
- if (warnings::enabled($category))
- { warnings::warn($category, $message) }
-
-=item warnings::warnif($object, $message)
-
-Equivalent to:
-
- if (warnings::enabled($object))
- { warnings::warn($object, $message) }
-
-=back
-
-See L<perlmodlib/Pragmatic Modules> and L<perllexwarn>.
-
-=cut
-
-use Carp ;
-
-%Offsets = (
- 'all' => 0,
- 'chmod' => 2,
- 'closure' => 4,
- 'exiting' => 6,
- 'glob' => 8,
- 'io' => 10,
- 'closed' => 12,
- 'exec' => 14,
- 'newline' => 16,
- 'pipe' => 18,
- 'unopened' => 20,
- 'misc' => 22,
- 'numeric' => 24,
- 'once' => 26,
- 'overflow' => 28,
- 'pack' => 30,
- 'portable' => 32,
- 'recursion' => 34,
- 'redefine' => 36,
- 'regexp' => 38,
- 'severe' => 40,
- 'debugging' => 42,
- 'inplace' => 44,
- 'internal' => 46,
- 'malloc' => 48,
- 'signal' => 50,
- 'substr' => 52,
- 'syntax' => 54,
- 'ambiguous' => 56,
- 'bareword' => 58,
- 'deprecated' => 60,
- 'digit' => 62,
- 'parenthesis' => 64,
- 'precedence' => 66,
- 'printf' => 68,
- 'prototype' => 70,
- 'qw' => 72,
- 'reserved' => 74,
- 'semicolon' => 76,
- 'taint' => 78,
- 'umask' => 80,
- 'uninitialized' => 82,
- 'unpack' => 84,
- 'untie' => 86,
- 'utf8' => 88,
- 'void' => 90,
- 'y2k' => 92,
- );
-
-%Bits = (
- 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x15", # [0..46]
- 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [28]
- 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [29]
- 'chmod' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
- 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
- 'closure' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
- 'debugging' => "\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00", # [21]
- 'deprecated' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [30]
- 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [31]
- 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
- 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
- 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
- 'inplace' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [22]
- 'internal' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [23]
- 'io' => "\x00\x54\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..10]
- 'malloc' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [24]
- 'misc' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
- 'newline' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
- 'numeric' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
- 'once' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
- 'overflow' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
- 'pack' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
- 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [32]
- 'pipe' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
- 'portable' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [16]
- 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [33]
- 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [34]
- 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [35]
- 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [36]
- 'recursion' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [17]
- 'redefine' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [18]
- 'regexp' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [19]
- 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [37]
- 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [38]
- 'severe' => "\x00\x00\x00\x00\x00\x55\x01\x00\x00\x00\x00\x00", # [20..24]
- 'signal' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [25]
- 'substr' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [26]
- 'syntax' => "\x00\x00\x00\x00\x00\x00\x40\x55\x55\x15\x00\x00", # [27..38]
- 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [39]
- 'umask' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [40]
- 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [41]
- 'unopened' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
- 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [42]
- 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [43]
- 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [44]
- 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [45]
- 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [46]
- );
-
-%DeadBits = (
- 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x2a", # [0..46]
- 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [28]
- 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [29]
- 'chmod' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
- 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
- 'closure' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
- 'debugging' => "\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00", # [21]
- 'deprecated' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [30]
- 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [31]
- 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
- 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
- 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
- 'inplace' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [22]
- 'internal' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [23]
- 'io' => "\x00\xa8\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..10]
- 'malloc' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [24]
- 'misc' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
- 'newline' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
- 'numeric' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
- 'once' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
- 'overflow' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
- 'pack' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
- 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [32]
- 'pipe' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
- 'portable' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [16]
- 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [33]
- 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [34]
- 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [35]
- 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [36]
- 'recursion' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [17]
- 'redefine' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [18]
- 'regexp' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [19]
- 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [37]
- 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [38]
- 'severe' => "\x00\x00\x00\x00\x00\xaa\x02\x00\x00\x00\x00\x00", # [20..24]
- 'signal' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [25]
- 'substr' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [26]
- 'syntax' => "\x00\x00\x00\x00\x00\x00\x80\xaa\xaa\x2a\x00\x00", # [27..38]
- 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [39]
- 'umask' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [40]
- 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [41]
- 'unopened' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
- 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [42]
- 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [43]
- 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [44]
- 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [45]
- 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [46]
- );
-
-$NONE = "\0\0\0\0\0\0\0\0\0\0\0\0";
-$LAST_BIT = 94 ;
-$BYTES = 12 ;
-
-$All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
-
-sub bits {
- my $mask ;
- my $catmask ;
- my $fatal = 0 ;
- foreach my $word (@_) {
- if ($word eq 'FATAL') {
- $fatal = 1;
- }
- elsif ($catmask = $Bits{$word}) {
- $mask |= $catmask ;
- $mask |= $DeadBits{$word} if $fatal ;
- }
- else
- { croak("unknown warnings category '$word'")}
- }
-
- return $mask ;
-}
-
-sub import {
- shift;
- my $mask = ${^WARNING_BITS} ;
- if (vec($mask, $Offsets{'all'}, 1)) {
- $mask |= $Bits{'all'} ;
- $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
- }
- ${^WARNING_BITS} = $mask | bits(@_ ? @_ : 'all') ;
-}
-
-sub unimport {
- shift;
- my $mask = ${^WARNING_BITS} ;
- if (vec($mask, $Offsets{'all'}, 1)) {
- $mask |= $Bits{'all'} ;
- $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
- }
- ${^WARNING_BITS} = $mask & ~ (bits(@_ ? @_ : 'all') | $All) ;
-}
-
-sub __chk
-{
- my $category ;
- my $offset ;
- my $isobj = 0 ;
-
- if (@_) {
- # check the category supplied.
- $category = shift ;
- if (ref $category) {
- croak ("not an object")
- if $category !~ /^([^=]+)=/ ;+
- $category = $1 ;
- $isobj = 1 ;
- }
- $offset = $Offsets{$category};
- croak("unknown warnings category '$category'")
- unless defined $offset;
- }
- else {
- $category = (caller(1))[0] ;
- $offset = $Offsets{$category};
- croak("package '$category' not registered for warnings")
- unless defined $offset ;
- }
-
- my $this_pkg = (caller(1))[0] ;
- my $i = 2 ;
- my $pkg ;
-
- if ($isobj) {
- while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
- last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
- }
- $i -= 2 ;
- }
- else {
- for ($i = 2 ; $pkg = (caller($i))[0] ; ++ $i) {
- last if $pkg ne $this_pkg ;
- }
- $i = 2
- if !$pkg || $pkg eq $this_pkg ;
- }
-
- my $callers_bitmask = (caller($i))[9] ;
- return ($callers_bitmask, $offset, $i) ;
-}
-
-sub enabled
-{
- croak("Usage: warnings::enabled([category])")
- unless @_ == 1 || @_ == 0 ;
-
- my ($callers_bitmask, $offset, $i) = __chk(@_) ;
-
- return 0 unless defined $callers_bitmask ;
- return vec($callers_bitmask, $offset, 1) ||
- vec($callers_bitmask, $Offsets{'all'}, 1) ;
-}
-
-
-sub warn
-{
- croak("Usage: warnings::warn([category,] 'message')")
- unless @_ == 2 || @_ == 1 ;
-
- my $message = pop ;
- my ($callers_bitmask, $offset, $i) = __chk(@_) ;
- local $Carp::CarpLevel = $i ;
- croak($message)
- if vec($callers_bitmask, $offset+1, 1) ||
- vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
- carp($message) ;
-}
-
-sub warnif
-{
- croak("Usage: warnings::warnif([category,] 'message')")
- unless @_ == 2 || @_ == 1 ;
-
- my $message = pop ;
- my ($callers_bitmask, $offset, $i) = __chk(@_) ;
- local $Carp::CarpLevel = $i ;
-
- return
- unless defined $callers_bitmask &&
- (vec($callers_bitmask, $offset, 1) ||
- vec($callers_bitmask, $Offsets{'all'}, 1)) ;
-
- croak($message)
- if vec($callers_bitmask, $offset+1, 1) ||
- vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
-
- carp($message) ;
-}
-1;
diff --git a/contrib/perl5/lib/warnings/register.pm b/contrib/perl5/lib/warnings/register.pm
deleted file mode 100644
index f98075a..0000000
--- a/contrib/perl5/lib/warnings/register.pm
+++ /dev/null
@@ -1,38 +0,0 @@
-package warnings::register ;
-
-=pod
-
-=head1 NAME
-
-warnings::register - warnings import function
-
-=cut
-
-require warnings ;
-
-sub mkMask
-{
- my ($bit) = @_ ;
- my $mask = "" ;
-
- vec($mask, $bit, 1) = 1 ;
- return $mask ;
-}
-
-sub import
-{
- shift ;
- my $package = (caller(0))[0] ;
- if (! defined $warnings::Bits{$package}) {
- $warnings::Bits{$package} = mkMask($warnings::LAST_BIT) ;
- vec($warnings::Bits{'all'}, $warnings::LAST_BIT, 1) = 1 ;
- $warnings::Offsets{$package} = $warnings::LAST_BIT ++ ;
- foreach my $k (keys %warnings::Bits) {
- vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0 ;
- }
- $warnings::DeadBits{$package} = mkMask($warnings::LAST_BIT);
- vec($warnings::DeadBits{'all'}, $warnings::LAST_BIT++, 1) = 1 ;
- }
-}
-
-1 ;
diff --git a/contrib/perl5/makeaperl.SH b/contrib/perl5/makeaperl.SH
deleted file mode 100755
index 45812ba..0000000
--- a/contrib/perl5/makeaperl.SH
+++ /dev/null
@@ -1,130 +0,0 @@
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-echo "Extracting makeaperl (with variable substitutions)"
-rm -f makeaperl
-$spitshell >makeaperl <<!GROK!THIS!
-$startperl
- eval 'exec $perlpath -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-$spitshell >>makeaperl <<'!NO!SUBS!'
-
-=head1 NAME
-
-makeaperl - create a new perl binary from static extensions
-
-=head1 SYNOPSIS
-
-C<makeaperl -l library -m makefile -o target -t tempdir [object_files] [static_extensions] [search_directories]>
-
-=head1 DESCRIPTION
-
-This utility is designed to build new perl binaries from existing
-extensions on the fly. Called without any arguments it produces a new
-binary with the name C<perl> in the current directory. Intermediate
-files are produced in C</tmp>, if that is writeable, else in the
-current directory. The most important intermediate file is a Makefile,
-that is used internally to call C<make>. The new perl binary will consist
-
-The C<-l> switch lets you specify the name of a perl library to be
-linked into the new binary. If you do not specify a library, makeaperl
-writes targets for any C<libperl*.a> it finds in the search path. The
-topmost target will be the one related to C<libperl.a>.
-
-With the C<-m> switch you can provide a name for the Makefile that
-will be written (default C</tmp/Makefile.$$>). Likewise specifies the
-C<-o> switch a name for the perl binary (default C<perl>). The C<-t>
-switch lets you determine, in which directory the intermediate files
-should be stored.
-
-All object files and static extensions following on the command line
-will be linked into the target file. If there are any directories
-specified on the command line, these directories are searched for
-C<*.a> files, and all of the found ones will be linked in, too. If
-there is no directory named, then the contents of $INC[0] are
-searched.
-
-If the command fails, there is currently no other mechanism to adjust
-the behaviour of the program than to alter the generated Makefile and
-run C<make> by hand.
-
-=head1 AUTHORS
-Tim Bunce <Tim.Bunce@ig.co.uk>, Andreas Koenig
-<koenig@franz.ww.TU-Berlin.DE>;
-
-=head2 STATUS
-First version, written 5 Feb 1995, is considered alpha.
-
-=cut
-
-use ExtUtils::MakeMaker;
-use Getopt::Long;
-use strict qw(subs refs);
-
-$Version = 1.0;
-$Verbose = 0;
-
-sub usage{
- warn <<END;
-$0 version $Version
-
-$0: [options] [object_files] [static_extensions ...] [directories to search through]
- -l perllibrary perl library to link from (the first libperl.a found)
- -m makefilename name of the makefile to be written (/tmp/Makefile.\$\$)
- -o name name for perl executable (perl)
- -t directory directory where intermediate files reside (/tmp)
-END
- exit 1;
-}
-
-if (-w "/tmp") {
- $opt_t = "/tmp";
-} else {
- $opt_t = ".";
-}
-$opt_l = '';
-$opt_m = "$opt_t/Makefile.$$";
-$opt_o = 'perl';
-
-$Getopt::Long::ignorecase=0;
-
-GetOptions('t=s', 'l=s', 'm=s', 'o=s') || die &usage;
-
-@dirs = grep -d $_, @ARGV;
-@fils = grep -f $_, @ARGV;
-
-@dirs = $INC[0] unless @dirs;
-
-open MAKE, ">$opt_m";
-MM->init_main();
-MM->init_others();
-print MAKE MM->makeaperl('MAKE' => $opt_m,
- 'TARGET' => $opt_o,
- 'TMP' => $opt_t,
- 'LIBPERL' => $opt_l,
- 'DIRS' => [@dirs],
- 'STAT' => [@fils],
- 'INCL' => [@dirs]
-);
-close MAKE;
-(system "make -f $opt_m") == 0 or die "$0 failed: Please check file $opt_m and run make -f $opt_m\n";
-!NO!SUBS!
-chmod 755 makeaperl
-$eunicefix makeaperl
diff --git a/contrib/perl5/makedef.pl b/contrib/perl5/makedef.pl
deleted file mode 100644
index e983967..0000000
--- a/contrib/perl5/makedef.pl
+++ /dev/null
@@ -1,895 +0,0 @@
-#
-# Create the export list for perl.
-#
-# Needed by WIN32 and OS/2 for creating perl.dll
-# and by AIX for creating libperl.a when -Dusershrplib is in effect.
-#
-# reads global.sym, pp.sym, perlvars.h, intrpvar.h, thrdvar.h, config.h
-# On OS/2 reads miniperl.map as well
-
-my $PLATFORM;
-my $CCTYPE;
-
-my %bincompat5005 =
- (
- Perl_call_atexit => "perl_atexit",
- Perl_eval_sv => "perl_eval_sv",
- Perl_eval_pv => "perl_eval_pv",
- Perl_call_argv => "perl_call_argv",
- Perl_call_method => "perl_call_method",
- Perl_call_pv => "perl_call_pv",
- Perl_call_sv => "perl_call_sv",
- Perl_get_av => "perl_get_av",
- Perl_get_cv => "perl_get_cv",
- Perl_get_hv => "perl_get_hv",
- Perl_get_sv => "perl_get_sv",
- Perl_init_i18nl10n => "perl_init_i18nl10n",
- Perl_init_i18nl14n => "perl_init_i18nl14n",
- Perl_new_collate => "perl_new_collate",
- Perl_new_ctype => "perl_new_ctype",
- Perl_new_numeric => "perl_new_numeric",
- Perl_require_pv => "perl_require_pv",
- Perl_safesyscalloc => "Perl_safecalloc",
- Perl_safesysfree => "Perl_safefree",
- Perl_safesysmalloc => "Perl_safemalloc",
- Perl_safesysrealloc => "Perl_saferealloc",
- Perl_set_numeric_local => "perl_set_numeric_local",
- Perl_set_numeric_standard => "perl_set_numeric_standard",
- Perl_malloc => "malloc",
- Perl_mfree => "free",
- Perl_realloc => "realloc",
- Perl_calloc => "calloc",
- );
-
-my $bincompat5005 = join("|", keys %bincompat5005);
-
-while (@ARGV) {
- my $flag = shift;
- $define{$1} = 1 if ($flag =~ /^-D(\w+)$/);
- $define{$1} = $2 if ($flag =~ /^-D(\w+)=(.+)$/);
- $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/);
- $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/);
-}
-
-my @PLATFORM = qw(aix win32 os2 MacOS);
-my %PLATFORM;
-@PLATFORM{@PLATFORM} = ();
-
-defined $PLATFORM || die "PLATFORM undefined, must be one of: @PLATFORM\n";
-exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n";
-
-my $config_sh = "config.sh";
-my $config_h = "config.h";
-my $thrdvar_h = "thrdvar.h";
-my $intrpvar_h = "intrpvar.h";
-my $perlvars_h = "perlvars.h";
-my $global_sym = "global.sym";
-my $pp_sym = "pp.sym";
-my $globvar_sym = "globvar.sym";
-my $perlio_sym = "perlio.sym";
-
-if ($PLATFORM eq 'aix') {
- # Nothing for now.
-}
-elsif ($PLATFORM eq 'win32') {
- $CCTYPE = "MSVC" unless defined $CCTYPE;
- foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym, $pp_sym, $globvar_sym) {
- s!^!..\\!;
- }
-}
-elsif ($PLATFORM eq 'MacOS') {
- foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym,
- $pp_sym, $globvar_sym, $perlio_sym) {
- s!^!::!;
- }
-}
-
-unless ($PLATFORM eq 'win32' || $PLATFORM eq 'MacOS') {
- open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n";
- while (<CFG>) {
- if (/^(?:ccflags|optimize)='(.+)'$/) {
- $_ = $1;
- $define{$1} = 1 while /-D(\w+)/g;
- }
- if ($PLATFORM eq 'os2') {
- $CONFIG_ARGS = $1 if /^(?:config_args)='(.+)'$/;
- $ARCHNAME = $1 if /^(?:archname)='(.+)'$/;
- }
- }
- close(CFG);
-}
-
-open(CFG,$config_h) || die "Cannot open $config_h: $!\n";
-while (<CFG>) {
- $define{$1} = 1 if /^\s*#\s*define\s+(MYMALLOC)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(USE_5005THREADS)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(USE_ITHREADS)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(USE_PERLIO)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(USE_SFIO)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(MULTIPLICITY)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(PERL_IMPLICIT_SYS)\b/;
- $define{$1} = 1 if /^\s*#\s*define\s+(PERL_BINCOMPAT_5005)\b/;
-}
-close(CFG);
-
-# perl.h logic duplication begins
-
-if ($define{USE_ITHREADS}) {
- if (!$define{MULTIPLICITY} && !$define{PERL_OBJECT}) {
- $define{MULTIPLICITY} = 1;
- }
-}
-
-$define{PERL_IMPLICIT_CONTEXT} ||=
- $define{USE_ITHREADS} ||
- $define{USE_5005THREADS} ||
- $define{MULTIPLICITY} ;
-
-if ($define{PERL_CAPI}) {
- delete $define{PERL_OBJECT};
- $define{MULTIPLICITY} = 1;
- $define{PERL_IMPLICIT_CONTEXT} = 1;
- $define{PERL_IMPLICIT_SYS} = 1;
-}
-
-if ($define{PERL_OBJECT}) {
- $define{PERL_IMPLICIT_CONTEXT} = 1;
- $define{PERL_IMPLICIT_SYS} = 1;
-}
-
-# perl.h logic duplication ends
-
-if ($PLATFORM eq 'win32') {
- warn join(' ',keys %define)."\n";
- print "LIBRARY Perl56\n";
- print "DESCRIPTION 'Perl interpreter'\n";
- print "EXPORTS\n";
- if ($define{PERL_IMPLICIT_SYS}) {
- output_symbol("perl_get_host_info");
- output_symbol("perl_alloc_override");
- }
-}
-elsif ($PLATFORM eq 'os2') {
- ($v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/;
- $v .= '-thread' if $ARCHNAME =~ /-thread/;
- #$sum = 0;
- #for (split //, $v) {
- # $sum = ($sum * 33) + ord;
- # $sum &= 0xffffff;
- #}
- #$sum += $sum >> 5;
- #$sum &= 0xffff;
- #$sum = printf '%X', $sum;
- ($dll = $define{PERL_DLL}) =~ s/\.dll$//i;
- # print STDERR "'$dll' <= '$define{PERL_DLL}'\n";
- print <<"---EOP---";
-LIBRARY '$dll' INITINSTANCE TERMINSTANCE
-DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter'
-STACKSIZE 32768
-CODE LOADONCALL
-DATA LOADONCALL NONSHARED MULTIPLE
-EXPORTS
----EOP---
-}
-elsif ($PLATFORM eq 'aix') {
- print "#!\n";
-}
-
-my %skip;
-my %export;
-
-sub skip_symbols {
- my $list = shift;
- foreach my $symbol (@$list) {
- $skip{$symbol} = 1;
- }
-}
-
-sub emit_symbols {
- my $list = shift;
- foreach my $symbol (@$list) {
- my $skipsym = $symbol;
- # XXX hack
- if ($define{PERL_OBJECT} || $define{MULTIPLICITY}) {
- $skipsym =~ s/^Perl_[GIT](\w+)_ptr$/PL_$1/;
- }
- emit_symbol($symbol) unless exists $skip{$skipsym};
- }
-}
-
-if ($PLATFORM eq 'win32') {
- skip_symbols [qw(
- PL_statusvalue_vms
- PL_archpat_auto
- PL_cryptseen
- PL_DBcv
- PL_generation
- PL_lastgotoprobe
- PL_linestart
- PL_modcount
- PL_pending_ident
- PL_sortcxix
- PL_sublex_info
- PL_timesbuf
- main
- Perl_ErrorNo
- Perl_GetVars
- Perl_do_exec3
- Perl_do_ipcctl
- Perl_do_ipcget
- Perl_do_msgrcv
- Perl_do_msgsnd
- Perl_do_semop
- Perl_do_shmio
- Perl_dump_fds
- Perl_init_thread_intern
- Perl_my_bzero
- Perl_my_htonl
- Perl_my_ntohl
- Perl_my_swap
- Perl_my_chsize
- Perl_same_dirent
- Perl_setenv_getix
- Perl_unlnk
- Perl_watch
- Perl_safexcalloc
- Perl_safexmalloc
- Perl_safexfree
- Perl_safexrealloc
- Perl_my_memcmp
- Perl_my_memset
- PL_cshlen
- PL_cshname
- PL_opsave
- Perl_do_exec
- Perl_getenv_len
- Perl_my_pclose
- Perl_my_popen
- )];
-}
-elsif ($PLATFORM eq 'aix') {
- skip_symbols([qw(
- Perl_dump_fds
- Perl_ErrorNo
- Perl_GetVars
- Perl_my_bcopy
- Perl_my_bzero
- Perl_my_chsize
- Perl_my_htonl
- Perl_my_memcmp
- Perl_my_memset
- Perl_my_ntohl
- Perl_my_swap
- Perl_safexcalloc
- Perl_safexfree
- Perl_safexmalloc
- Perl_safexrealloc
- Perl_same_dirent
- Perl_unlnk
- Perl_sys_intern_clear
- Perl_sys_intern_dup
- Perl_sys_intern_init
- PL_cryptseen
- PL_opsave
- PL_statusvalue_vms
- PL_sys_intern
- )]);
-}
-elsif ($PLATFORM eq 'os2') {
- emit_symbols([qw(
- ctermid
- get_sysinfo
- Perl_OS2_init
- OS2_Perl_data
- dlopen
- dlsym
- dlerror
- dlclose
- my_tmpfile
- my_tmpnam
- my_flock
- my_rmdir
- my_mkdir
- malloc_mutex
- threads_mutex
- nthreads
- nthreads_cond
- os2_cond_wait
- os2_stat
- pthread_join
- pthread_create
- pthread_detach
- XS_Cwd_change_drive
- XS_Cwd_current_drive
- XS_Cwd_extLibpath
- XS_Cwd_extLibpath_set
- XS_Cwd_sys_abspath
- XS_Cwd_sys_chdir
- XS_Cwd_sys_cwd
- XS_Cwd_sys_is_absolute
- XS_Cwd_sys_is_relative
- XS_Cwd_sys_is_rooted
- XS_DynaLoader_mod2fname
- XS_File__Copy_syscopy
- Perl_Register_MQ
- Perl_Deregister_MQ
- Perl_Serve_Messages
- Perl_Process_Messages
- init_PMWIN_entries
- PMWIN_entries
- Perl_hab_GET
- )]);
-}
-elsif ($PLATFORM eq 'MacOS') {
- skip_symbols [qw(
- Perl_GetVars
- PL_cryptseen
- PL_cshlen
- PL_cshname
- PL_statusvalue_vms
- PL_sys_intern
- PL_opsave
- PL_timesbuf
- Perl_dump_fds
- Perl_my_bcopy
- Perl_my_bzero
- Perl_my_chsize
- Perl_my_htonl
- Perl_my_memcmp
- Perl_my_memset
- Perl_my_ntohl
- Perl_my_swap
- Perl_safexcalloc
- Perl_safexfree
- Perl_safexmalloc
- Perl_safexrealloc
- Perl_unlnk
- Perl_sys_intern_clear
- Perl_sys_intern_init
- )];
-}
-
-
-unless ($define{'DEBUGGING'}) {
- skip_symbols [qw(
- Perl_deb_growlevel
- Perl_debop
- Perl_debprofdump
- Perl_debstack
- Perl_debstackptrs
- Perl_runops_debug
- Perl_sv_peek
- PL_block_type
- PL_watchaddr
- PL_watchok
- )];
-}
-
-if ($define{'PERL_IMPLICIT_SYS'}) {
- skip_symbols [qw(
- Perl_getenv_len
- Perl_my_popen
- Perl_my_pclose
- )];
-}
-else {
- skip_symbols [qw(
- PL_Mem
- PL_MemShared
- PL_MemParse
- PL_Env
- PL_StdIO
- PL_LIO
- PL_Dir
- PL_Sock
- PL_Proc
- )];
-}
-
-unless ($define{'PERL_FLEXIBLE_EXCEPTIONS'}) {
- skip_symbols [qw(
- PL_protect
- Perl_default_protect
- Perl_vdefault_protect
- )];
-}
-
-if ($define{'MYMALLOC'}) {
- emit_symbols [qw(
- Perl_dump_mstats
- Perl_get_mstats
- Perl_malloc
- Perl_mfree
- Perl_realloc
- Perl_calloc
- Perl_strdup
- Perl_putenv
- )];
- if ($define{'USE_5005THREADS'} || $define{'USE_ITHREADS'}) {
- emit_symbols [qw(
- PL_malloc_mutex
- )];
- }
- else {
- skip_symbols [qw(
- PL_malloc_mutex
- )];
- }
-}
-else {
- skip_symbols [qw(
- PL_malloc_mutex
- Perl_dump_mstats
- Perl_get_mstats
- Perl_malloc
- Perl_mfree
- Perl_realloc
- Perl_calloc
- Perl_malloced_size
- )];
-}
-
-unless ($define{'USE_5005THREADS'} || $define{'USE_ITHREADS'}) {
- skip_symbols [qw(
- PL_thr_key
- )];
-}
-
-unless ($define{'USE_5005THREADS'}) {
- skip_symbols [qw(
- PL_sv_mutex
- PL_strtab_mutex
- PL_svref_mutex
- PL_cred_mutex
- PL_eval_mutex
- PL_fdpid_mutex
- PL_sv_lock_mutex
- PL_eval_cond
- PL_eval_owner
- PL_threads_mutex
- PL_nthreads
- PL_nthreads_cond
- PL_threadnum
- PL_threadsv_names
- PL_thrsv
- PL_vtbl_mutex
- Perl_condpair_magic
- Perl_new_struct_thread
- Perl_per_thread_magicals
- Perl_thread_create
- Perl_find_threadsv
- Perl_unlock_condpair
- Perl_magic_mutexfree
- Perl_sv_lock
- )];
-}
-
-unless ($define{'USE_ITHREADS'}) {
- skip_symbols [qw(
- PL_ptr_table
- PL_op_mutex
- Perl_dirp_dup
- Perl_cx_dup
- Perl_si_dup
- Perl_any_dup
- Perl_ss_dup
- Perl_fp_dup
- Perl_gp_dup
- Perl_he_dup
- Perl_mg_dup
- Perl_re_dup
- Perl_sv_dup
- Perl_sys_intern_dup
- Perl_ptr_table_fetch
- Perl_ptr_table_new
- Perl_ptr_table_split
- Perl_ptr_table_store
- Perl_ptr_table_clear
- Perl_ptr_table_free
- perl_clone
- perl_clone_using
- )];
-}
-
-unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
- skip_symbols [qw(
- Perl_croak_nocontext
- Perl_die_nocontext
- Perl_deb_nocontext
- Perl_form_nocontext
- Perl_load_module_nocontext
- Perl_mess_nocontext
- Perl_warn_nocontext
- Perl_warner_nocontext
- Perl_newSVpvf_nocontext
- Perl_sv_catpvf_nocontext
- Perl_sv_setpvf_nocontext
- Perl_sv_catpvf_mg_nocontext
- Perl_sv_setpvf_mg_nocontext
- )];
-}
-
-unless ($define{'PERL_IMPLICIT_SYS'}) {
- skip_symbols [qw(
- perl_alloc_using
- perl_clone_using
- )];
-}
-
-unless ($define{'FAKE_THREADS'}) {
- skip_symbols [qw(PL_curthr)];
-}
-
-sub readvar {
- my $file = shift;
- my $proc = shift || sub { "PL_$_[2]" };
- open(VARS,$file) || die "Cannot open $file: $!\n";
- my @syms;
- while (<VARS>) {
- # All symbols have a Perl_ prefix because that's what embed.h
- # sticks in front of them.
- push(@syms, &$proc($1,$2,$3)) if (/\bPERLVAR(A?I?C?)\(([IGT])(\w+)/);
- }
- close(VARS);
- return \@syms;
-}
-
-if ($define{'USE_5005THREADS'}) {
- my $thrd = readvar($thrdvar_h);
- skip_symbols $thrd;
-}
-
-if ($define{'PERL_GLOBAL_STRUCT'}) {
- my $global = readvar($perlvars_h);
- skip_symbols $global;
- emit_symbol('Perl_GetVars');
- emit_symbols [qw(PL_Vars PL_VarsPtr)] unless $CCTYPE eq 'GCC';
-}
-
-# functions from *.sym files
-
-my @syms = ($global_sym, $globvar_sym); # $pp_sym is not part of the API
-
-if ($define{'USE_PERLIO'}) {
- push @syms, $perlio_sym;
- if ($define{'USE_SFIO'}) {
- # SFIO defines most of the PerlIO routines as macros
- skip_symbols [qw(
- PerlIO_canset_cnt
- PerlIO_clearerr
- PerlIO_close
- PerlIO_eof
- PerlIO_error
- PerlIO_exportFILE
- PerlIO_fast_gets
- PerlIO_fdopen
- PerlIO_fileno
- PerlIO_findFILE
- PerlIO_flush
- PerlIO_get_base
- PerlIO_get_bufsiz
- PerlIO_get_cnt
- PerlIO_get_ptr
- PerlIO_getc
- PerlIO_getname
- PerlIO_has_base
- PerlIO_has_cntptr
- PerlIO_importFILE
- PerlIO_open
- PerlIO_printf
- PerlIO_putc
- PerlIO_puts
- PerlIO_read
- PerlIO_releaseFILE
- PerlIO_reopen
- PerlIO_rewind
- PerlIO_seek
- PerlIO_set_cnt
- PerlIO_set_ptrcnt
- PerlIO_setlinebuf
- PerlIO_sprintf
- PerlIO_stderr
- PerlIO_stdin
- PerlIO_stdout
- PerlIO_stdoutf
- PerlIO_tell
- PerlIO_ungetc
- PerlIO_vprintf
- PerlIO_write
- )];
- }
-}
-
-for my $syms (@syms) {
- open (GLOBAL, "<$syms") || die "failed to open $syms: $!\n";
- while (<GLOBAL>) {
- next if (!/^[A-Za-z]/);
- # Functions have a Perl_ prefix
- # Variables have a PL_ prefix
- chomp($_);
- my $symbol = ($syms =~ /var\.sym$/i ? "PL_" : "");
- $symbol .= $_;
- emit_symbol($symbol) unless exists $skip{$symbol};
- }
- close(GLOBAL);
-}
-
-# variables
-
-if ($define{'PERL_OBJECT'} || $define{'MULTIPLICITY'}) {
- for my $f ($perlvars_h, $intrpvar_h, $thrdvar_h) {
- my $glob = readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" });
- emit_symbols $glob;
- }
- # XXX AIX seems to want the perlvars.h symbols, for some reason
- if ($PLATFORM eq 'aix') {
- my $glob = readvar($perlvars_h);
- emit_symbols $glob;
- }
-}
-else {
- unless ($define{'PERL_GLOBAL_STRUCT'}) {
- my $glob = readvar($perlvars_h);
- emit_symbols $glob;
- }
- unless ($define{'MULTIPLICITY'}) {
- my $glob = readvar($intrpvar_h);
- emit_symbols $glob;
- }
- unless ($define{'MULTIPLICITY'} || $define{'USE_5005THREADS'}) {
- my $glob = readvar($thrdvar_h);
- emit_symbols $glob;
- }
-}
-
-sub try_symbol {
- my $symbol = shift;
-
- return if $symbol !~ /^[A-Za-z]/;
- return if $symbol =~ /^\#/;
- $symbol =~s/\r//g;
- chomp($symbol);
- return if exists $skip{$symbol};
- emit_symbol($symbol);
-}
-
-while (<DATA>) {
- try_symbol($_);
-}
-
-if ($PLATFORM eq 'win32') {
- foreach my $symbol (qw(
- boot_DynaLoader
- Perl_init_os_extras
- Perl_thread_create
- Perl_win32_init
- RunPerl
- win32_errno
- win32_environ
- win32_stdin
- win32_stdout
- win32_stderr
- win32_ferror
- win32_feof
- win32_strerror
- win32_fprintf
- win32_printf
- win32_vfprintf
- win32_vprintf
- win32_fread
- win32_fwrite
- win32_fopen
- win32_fdopen
- win32_freopen
- win32_fclose
- win32_fputs
- win32_fputc
- win32_ungetc
- win32_getc
- win32_fileno
- win32_clearerr
- win32_fflush
- win32_ftell
- win32_fseek
- win32_fgetpos
- win32_fsetpos
- win32_rewind
- win32_tmpfile
- win32_abort
- win32_fstat
- win32_stat
- win32_pipe
- win32_popen
- win32_pclose
- win32_rename
- win32_setmode
- win32_lseek
- win32_tell
- win32_dup
- win32_dup2
- win32_open
- win32_close
- win32_eof
- win32_read
- win32_write
- win32_spawnvp
- win32_mkdir
- win32_rmdir
- win32_chdir
- win32_flock
- win32_execv
- win32_execvp
- win32_htons
- win32_ntohs
- win32_htonl
- win32_ntohl
- win32_inet_addr
- win32_inet_ntoa
- win32_socket
- win32_bind
- win32_listen
- win32_accept
- win32_connect
- win32_send
- win32_sendto
- win32_recv
- win32_recvfrom
- win32_shutdown
- win32_closesocket
- win32_ioctlsocket
- win32_setsockopt
- win32_getsockopt
- win32_getpeername
- win32_getsockname
- win32_gethostname
- win32_gethostbyname
- win32_gethostbyaddr
- win32_getprotobyname
- win32_getprotobynumber
- win32_getservbyname
- win32_getservbyport
- win32_select
- win32_endhostent
- win32_endnetent
- win32_endprotoent
- win32_endservent
- win32_getnetent
- win32_getnetbyname
- win32_getnetbyaddr
- win32_getprotoent
- win32_getservent
- win32_sethostent
- win32_setnetent
- win32_setprotoent
- win32_setservent
- win32_getenv
- win32_putenv
- win32_perror
- win32_setbuf
- win32_setvbuf
- win32_flushall
- win32_fcloseall
- win32_fgets
- win32_gets
- win32_fgetc
- win32_putc
- win32_puts
- win32_getchar
- win32_putchar
- win32_malloc
- win32_calloc
- win32_realloc
- win32_free
- win32_sleep
- win32_times
- win32_access
- win32_alarm
- win32_chmod
- win32_open_osfhandle
- win32_get_osfhandle
- win32_ioctl
- win32_link
- win32_unlink
- win32_utime
- win32_uname
- win32_wait
- win32_waitpid
- win32_kill
- win32_str_os_error
- win32_opendir
- win32_readdir
- win32_telldir
- win32_seekdir
- win32_rewinddir
- win32_closedir
- win32_longpath
- win32_os_id
- win32_getpid
- win32_crypt
- win32_dynaload
- ))
- {
- try_symbol($symbol);
- }
-}
-elsif ($PLATFORM eq 'os2') {
- open MAP, 'miniperl.map' or die 'Cannot read miniperl.map';
- /^\s*[\da-f:]+\s+(\w+)/i and $mapped{$1}++ foreach <MAP>;
- close MAP or die 'Cannot close miniperl.map';
-
- @missing = grep { !exists $mapped{$_} and !exists $bincompat5005{$_} }
- keys %export;
- delete $export{$_} foreach @missing;
-}
-elsif ($PLATFORM eq 'MacOS') {
- open MACSYMS, 'macperl.sym' or die 'Cannot read macperl.sym';
-
- while (<MACSYMS>) {
- try_symbol($_);
- }
-
- close MACSYMS;
-}
-
-# Now all symbols should be defined because
-# next we are going to output them.
-
-foreach my $symbol (sort keys %export) {
- output_symbol($symbol);
-}
-
-sub emit_symbol {
- my $symbol = shift;
- chomp($symbol);
- $export{$symbol} = 1;
-}
-
-sub output_symbol {
- my $symbol = shift;
- $symbol = $bincompat5005{$symbol}
- if $define{PERL_BINCOMPAT_5005} and $symbol =~ /^($bincompat5005)$/;
- if ($PLATFORM eq 'win32') {
- $symbol = "_$symbol" if $CCTYPE eq 'BORLAND';
- print "\t$symbol\n";
-# XXX: binary compatibility between compilers is an exercise
-# in frustration :-(
-# if ($CCTYPE eq "BORLAND") {
-# # workaround Borland quirk by exporting both the straight
-# # name and a name with leading underscore. Note the
-# # alias *must* come after the symbol itself, if both
-# # are to be exported. (Linker bug?)
-# print "\t_$symbol\n";
-# print "\t$symbol = _$symbol\n";
-# }
-# elsif ($CCTYPE eq 'GCC') {
-# # Symbols have leading _ whole process is $%@"% slow
-# # so skip aliases for now
-# nprint "\t$symbol\n";
-# }
-# else {
-# # for binary coexistence, export both the symbol and
-# # alias with leading underscore
-# print "\t$symbol\n";
-# print "\t_$symbol = $symbol\n";
-# }
- }
- elsif ($PLATFORM eq 'os2') {
- print qq( "$symbol"\n);
- }
- elsif ($PLATFORM eq 'aix' || $PLATFORM eq 'MacOS') {
- print "$symbol\n";
- }
-}
-
-1;
-__DATA__
-# extra globals not included above.
-perl_alloc
-perl_alloc_using
-perl_clone
-perl_clone_using
-perl_construct
-perl_destruct
-perl_free
-perl_parse
-perl_run
diff --git a/contrib/perl5/makedepend.SH b/contrib/perl5/makedepend.SH
deleted file mode 100755
index 7f8a108..0000000
--- a/contrib/perl5/makedepend.SH
+++ /dev/null
@@ -1,240 +0,0 @@
-#! /bin/sh
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-
-echo "Extracting makedepend (with variable substitutions)"
-rm -f makedepend
-$spitshell >makedepend <<!GROK!THIS!
-$startsh
-# makedepend.SH
-#
-MAKE=$make
-trnl='$trnl'
-!GROK!THIS!
-$spitshell >>makedepend <<'!NO!SUBS!'
-
-# This script should be called with
-# sh ./makedepend MAKE=$(MAKE)
-case "$1" in
- MAKE=*) eval $1 ;;
-esac
-
-export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$)
-
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-
-# We need .. when we are in the x2p directory if we are using the
-# cppstdin wrapper script.
-# Put .. and . first so that we pick up the present cppstdin, not
-# an older one lying about in /usr/local/bin.
-PATH=".$path_sep..$path_sep$PATH"
-export PATH
-
-$cat /dev/null >.deptmp
-$rm -f *.c.c c/*.c.c
-if test -f Makefile; then
- rm -f $firstmakefile
- cp Makefile $firstmakefile
- # On QNX, 'cp' preserves timestamp, so $firstmakefile appears
- # to be out of date. I don't know if OS/2 has touch, so do this:
- case "$osname" in
- os2) ;;
- netbsd) ;;
- *) $touch $firstmakefile ;;
- esac
-fi
-mf=$firstmakefile
-if test -f $mf; then
- defrule=`<$mf sed -n \
- -e '/^\.c\$(OBJ_EXT):.*;/{' \
- -e 's/\$\*\.c//' \
- -e 's/^[^;]*;[ ]*//p' \
- -e q \
- -e '}' \
- -e '/^\.c\$(OBJ_EXT): *$/{' \
- -e N \
- -e 's/\$\*\.c//' \
- -e 's/^.*\n[ ]*//p' \
- -e q \
- -e '}'`
-fi
-case "$defrule" in
-'') defrule='$(CC) -c $(CFLAGS)' ;;
-esac
-
-: Create files in UU directory to avoid problems with long filenames
-: on systems with 14 character filename limits so file.c.c and file.c
-: might be identical
-$test -d UU || mkdir UU
-
-$MAKE clist || ($echo "Searching for .c files..."; \
- $echo *.c | $tr ' ' $trnl | $egrep -v '\*' >.clist)
-for file in `$cat .clist`; do
-# for file in `cat /dev/null`; do
- if [ "$osname" = uwin ]; then
- uwinfix="-e s,\\\\\\\\,/,g -e s,\\([a-zA-Z]\\):/,/\\1/,g"
- else
- if [ "$osname" = os2 ]; then
- uwinfix="-e s,\\\\\\\\,/,g"
- else
- if [ "$archname" = cygwin ]; then
- uwinfix="-e s,\\\\\\\\,/,g"
- else
- if [ "$osname" = posix-bc ]; then
- uwinfix="-e s/\\*POSIX(\\(.*\\))/\\1/"
- else
- uwinfix=
- fi
- fi
- fi
- fi
- case "$file" in
- *.c) filebase=`basename $file .c` ;;
- *.y) filebase=`basename $file .y` ;;
- esac
- case "$file" in
- */*) finc="-I`echo $file | sed 's#/[^/]*$##`" ;;
- *) finc= ;;
- esac
- $echo "Finding dependencies for $filebase$_o."
- ( $echo "#line 1 \"$file\""; \
- $sed -n <$file \
- -e "/^${filebase}_init(/q" \
- -e '/^#line/d' \
- -e '/^#/{' \
- -e 's|/\*.*$||' \
- -e 's|\\$||' \
- -e p \
- -e '}' ) >UU/$file.c
- if [ "$osname" = os390 ]; then
- if [ "$file" = perly.c ]; then
- $echo '#endif' >>UU/$file.c
- fi
- $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c |
- $sed \
- -e '/^#.*<stdin>/d' \
- -e '/^#.*"-"/d' \
- -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
- -e 's/^[ ]*#[ ]*line/#/' \
- -e '/^# *[0-9][0-9]* *[".\/]/!d' \
- -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
- -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
- -e 's|: \./|: |' \
- -e 's|\.c\.c|.c|' $uwinfix | \
- $uniq | $sort | $uniq >> .deptmp
- else
- $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c |
- $sed \
- -e '1d' \
- -e '/^#.*<stdin>/d' \
- -e '/^#.*"-"/d' \
- -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
- -e 's/^[ ]*#[ ]*line/#/' \
- -e '/^# *[0-9][0-9]* *[".\/]/!d' \
- -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
- -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
- -e 's|: \./|: |' \
- -e 's|\.c\.c|.c|' $uwinfix | \
- $uniq | $sort | $uniq >> .deptmp
- fi
-done
-
-$sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
-
-$MAKE shlist || ($echo "Searching for .SH files..."; \
- $echo *.SH | $tr ' ' $trnl | $egrep -v '\*' >.shlist)
-
-# Now extract the dependencies on makedepend.SH and Makefile.SH
-# (they should reside in the main Makefile):
-rm -f .shlist.old
-mv .shlist .shlist.old
-$egrep -v '^makedepend\.SH' <.shlist.old >.shlist
-rm -f .shlist.old
-mv .shlist .shlist.old
-$egrep -v '^Makefile\.SH' <.shlist.old >.shlist
-rm -f .shlist.old
-mv .shlist .shlist.old
-$egrep -v '^perl_exp\.SH' <.shlist.old >.shlist
-rm -f .shlist.old
-mv .shlist .shlist.old
-$egrep -v '^config_h\.SH' <.shlist.old >.shlist
-rm .shlist.old
-
-if $test -s .deptmp; then
- for file in `cat .shlist`; do
- $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
- $sh $file >> .deptmp
- done
- $echo "Updating $mf..."
- $echo "# If this runs make out of memory, delete /usr/include lines." \
- >> $mf.new
- $sed 's|^\(.*\$(OBJ_EXT):\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
- >>$mf.new
-else
- $MAKE hlist || ($echo "Searching for .h files..."; \
- $echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist)
- $echo "You don't seem to have a proper C preprocessor. Using grep instead."
- $egrep '^#include ' `cat .clist` `cat .hlist` >.deptmp
- $echo "Updating $mf..."
- <.clist $sed -n \
- -e '/\//{' \
- -e 's|^\(.*\)/\(.*\)\.c|\2\$(OBJ_EXT): \1/\2.c; '"$defrule \1/\2.c|p" \
- -e d \
- -e '}' \
- -e 's|^\(.*\)\.c|\1\$(OBJ_EXT): \1.c|p' >> $mf.new
- <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
- <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
- $sed 's|^[^;]*/||' | \
- $sed -f .hsed >> $mf.new
- <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
- $sed -f .hsed >> $mf.new
- for file in `$cat .shlist`; do
- $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
- $sh $file >> $mf.new
- done
-fi
-$rm -f $mf.old
-$cp $mf $mf.old
-$rm -f $mf
-$cp $mf.new $mf
-$rm $mf.new
-$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
-$rm -rf .deptmp UU .shlist .clist .hlist .hsed
-
-!NO!SUBS!
-$eunicefix makedepend
-chmod +x makedepend
-case `pwd` in
-*SH)
- $rm -f ../makedepend
- ln makedepend ../makedepend
- ;;
-esac
diff --git a/contrib/perl5/makedir.SH b/contrib/perl5/makedir.SH
deleted file mode 100755
index d1650e7..0000000
--- a/contrib/perl5/makedir.SH
+++ /dev/null
@@ -1,68 +0,0 @@
-case $CONFIGDOTSH in
-'')
- if test ! -f config.sh; then
- ln ../config.sh . || \
- ln ../../config.sh . || \
- ln ../../../config.sh . || \
- (echo "Can't find config.sh."; exit 1)
- fi 2>/dev/null
- . ./config.sh
- ;;
-esac
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-echo "Extracting makedir (with variable substitutions)"
-rm -f makedir
-$spitshell >makedir <<!GROK!THIS!
-$startsh
-# makedir.SH
-#
-
-export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$)
-
-case \$# in
- 0)
- $echo "makedir pathname filenameflag"
- exit 1
- ;;
-esac
-
-: guarantee one slash before 1st component
-case \$1 in
- /*) ;;
- *) set ./\$1 \$2 ;;
-esac
-
-: strip last component if it is to be a filename
-case X\$2 in
- X1) set \`$echo \$1 | $sed 's:\(.*\)/[^/]*\$:\1:'\` ;;
- *) set \$1 ;;
-esac
-
-: return reasonable status if nothing to be created
-if $test -d "\$1" ; then
- exit 0
-fi
-
-list=''
-while true ; do
- case \$1 in
- */*)
- list="\$1 \$list"
- set \`echo \$1 | $sed 's:\(.*\)/:\1 :'\`
- ;;
- *)
- break
- ;;
- esac
-done
-
-set \$list
-
-for dir do
- $mkdir \$dir >/dev/null 2>&1
-done
-!GROK!THIS!
-$eunicefix makedir
-chmod +x makedir
diff --git a/contrib/perl5/malloc.c b/contrib/perl5/malloc.c
deleted file mode 100644
index b2288fd..0000000
--- a/contrib/perl5/malloc.c
+++ /dev/null
@@ -1,2102 +0,0 @@
-/* malloc.c
- *
- */
-
-/*
- Here are some notes on configuring Perl's malloc. (For non-perl
- usage see below.)
-
- There are two macros which serve as bulk disablers of advanced
- features of this malloc: NO_FANCY_MALLOC, PLAIN_MALLOC (undef by
- default). Look in the list of default values below to understand
- their exact effect. Defining NO_FANCY_MALLOC returns malloc.c to the
- state of the malloc in Perl 5.004. Additionally defining PLAIN_MALLOC
- returns it to the state as of Perl 5.000.
-
- Note that some of the settings below may be ignored in the code based
- on values of other macros. The PERL_CORE symbol is only defined when
- perl itself is being compiled (so malloc can make some assumptions
- about perl's facilities being available to it).
-
- Each config option has a short description, followed by its name,
- default value, and a comment about the default (if applicable). Some
- options take a precise value, while the others are just boolean.
- The boolean ones are listed first.
-
- # Enable code for an emergency memory pool in $^M. See perlvar.pod
- # for a description of $^M.
- PERL_EMERGENCY_SBRK (!PLAIN_MALLOC && PERL_CORE)
-
- # Enable code for printing memory statistics.
- DEBUGGING_MSTATS (!PLAIN_MALLOC && PERL_CORE)
-
- # Move allocation info for small buckets into separate areas.
- # Memory optimization (especially for small allocations, of the
- # less than 64 bytes). Since perl usually makes a large number
- # of small allocations, this is usually a win.
- PACK_MALLOC (!PLAIN_MALLOC && !RCHECK)
-
- # Add one page to big powers of two when calculating bucket size.
- # This is targeted at big allocations, as are common in image
- # processing.
- TWO_POT_OPTIMIZE !PLAIN_MALLOC
-
- # Use intermediate bucket sizes between powers-of-two. This is
- # generally a memory optimization, and a (small) speed pessimization.
- BUCKETS_ROOT2 !NO_FANCY_MALLOC
-
- # Do not check small deallocations for bad free(). Memory
- # and speed optimization, error reporting pessimization.
- IGNORE_SMALL_BAD_FREE (!NO_FANCY_MALLOC && !RCHECK)
-
- # Use table lookup to decide in which bucket a given allocation will go.
- SMALL_BUCKET_VIA_TABLE !NO_FANCY_MALLOC
-
- # Use a perl-defined sbrk() instead of the (presumably broken or
- # missing) system-supplied sbrk().
- USE_PERL_SBRK undef
-
- # Use system malloc() (or calloc() etc.) to emulate sbrk(). Normally
- # only used with broken sbrk()s.
- PERL_SBRK_VIA_MALLOC undef
-
- # Which allocator to use if PERL_SBRK_VIA_MALLOC
- SYSTEM_ALLOC(a) malloc(a)
-
- # Minimal alignment (in bytes, should be a power of 2) of SYSTEM_ALLOC
- SYSTEM_ALLOC_ALIGNMENT MEM_ALIGNBYTES
-
- # Disable memory overwrite checking with DEBUGGING. Memory and speed
- # optimization, error reporting pessimization.
- NO_RCHECK undef
-
- # Enable memory overwrite checking with DEBUGGING. Memory and speed
- # pessimization, error reporting optimization
- RCHECK (DEBUGGING && !NO_RCHECK)
-
- # Failed allocations bigger than this size croak (if
- # PERL_EMERGENCY_SBRK is enabled) without touching $^M. See
- # perlvar.pod for a description of $^M.
- BIG_SIZE (1<<16) # 64K
-
- # Starting from this power of two, add an extra page to the
- # size of the bucket. This enables optimized allocations of sizes
- # close to powers of 2. Note that the value is indexed at 0.
- FIRST_BIG_POW2 15 # 32K, 16K is used too often
-
- # Estimate of minimal memory footprint. malloc uses this value to
- # request the most reasonable largest blocks of memory from the system.
- FIRST_SBRK (48*1024)
-
- # Round up sbrk()s to multiples of this.
- MIN_SBRK 2048
-
- # Round up sbrk()s to multiples of this percent of footprint.
- MIN_SBRK_FRAC 3
-
- # Add this much memory to big powers of two to get the bucket size.
- PERL_PAGESIZE 4096
-
- # This many sbrk() discontinuities should be tolerated even
- # from the start without deciding that sbrk() is usually
- # discontinuous.
- SBRK_ALLOW_FAILURES 3
-
- # This many continuous sbrk()s compensate for one discontinuous one.
- SBRK_FAILURE_PRICE 50
-
- # Some configurations may ask for 12-byte-or-so allocations which
- # require 8-byte alignment (?!). In such situation one needs to
- # define this to disable 12-byte bucket (will increase memory footprint)
- STRICT_ALIGNMENT undef
-
- This implementation assumes that calling PerlIO_printf() does not
- result in any memory allocation calls (used during a panic).
-
- */
-
-/*
- If used outside of Perl environment, it may be useful to redefine
- the following macros (listed below with defaults):
-
- # Type of address returned by allocation functions
- Malloc_t void *
-
- # Type of size argument for allocation functions
- MEM_SIZE unsigned long
-
- # size of void*
- PTRSIZE 4
-
- # Maximal value in LONG
- LONG_MAX 0x7FFFFFFF
-
- # Unsigned integer type big enough to keep a pointer
- UV unsigned long
-
- # Type of pointer with 1-byte granularity
- caddr_t char *
-
- # Type returned by free()
- Free_t void
-
- # Very fatal condition reporting function (cannot call any )
- fatalcroak(arg) write(2,arg,strlen(arg)) + exit(2)
-
- # Fatal error reporting function
- croak(format, arg) warn(idem) + exit(1)
-
- # Fatal error reporting function
- croak2(format, arg1, arg2) warn2(idem) + exit(1)
-
- # Error reporting function
- warn(format, arg) fprintf(stderr, idem)
-
- # Error reporting function
- warn2(format, arg1, arg2) fprintf(stderr, idem)
-
- # Locking/unlocking for MT operation
- MALLOC_LOCK MUTEX_LOCK(&PL_malloc_mutex)
- MALLOC_UNLOCK MUTEX_UNLOCK(&PL_malloc_mutex)
-
- # Locking/unlocking mutex for MT operation
- MUTEX_LOCK(l) void
- MUTEX_UNLOCK(l) void
- */
-
-#ifndef NO_FANCY_MALLOC
-# ifndef SMALL_BUCKET_VIA_TABLE
-# define SMALL_BUCKET_VIA_TABLE
-# endif
-# ifndef BUCKETS_ROOT2
-# define BUCKETS_ROOT2
-# endif
-# ifndef IGNORE_SMALL_BAD_FREE
-# define IGNORE_SMALL_BAD_FREE
-# endif
-#endif
-
-#ifndef PLAIN_MALLOC /* Bulk enable features */
-# ifndef PACK_MALLOC
-# define PACK_MALLOC
-# endif
-# ifndef TWO_POT_OPTIMIZE
-# define TWO_POT_OPTIMIZE
-# endif
-# if defined(PERL_CORE) && !defined(PERL_EMERGENCY_SBRK)
-# define PERL_EMERGENCY_SBRK
-# endif
-# if defined(PERL_CORE) && !defined(DEBUGGING_MSTATS)
-# define DEBUGGING_MSTATS
-# endif
-#endif
-
-#define MIN_BUC_POW2 (sizeof(void*) > 4 ? 3 : 2) /* Allow for 4-byte arena. */
-#define MIN_BUCKET (MIN_BUC_POW2 * BUCKETS_PER_POW2)
-
-#if !(defined(I286) || defined(atarist) || defined(__MINT__))
- /* take 2k unless the block is bigger than that */
-# define LOG_OF_MIN_ARENA 11
-#else
- /* take 16k unless the block is bigger than that
- (80286s like large segments!), probably good on the atari too */
-# define LOG_OF_MIN_ARENA 14
-#endif
-
-#ifndef lint
-# if defined(DEBUGGING) && !defined(NO_RCHECK)
-# define RCHECK
-# endif
-# if defined(RCHECK) && defined(IGNORE_SMALL_BAD_FREE)
-# undef IGNORE_SMALL_BAD_FREE
-# 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.
- * If PACK_MALLOC is defined, small blocks are 2^n bytes long.
- * This is designed for use in a program that uses vast quantities of memory,
- * but bombs when it runs out.
- *
- * Modifications Copyright Ilya Zakharevich 1996-99.
- *
- * Still very quick, but much more thrifty. (Std config is 10% slower
- * than it was, and takes 67% of old heap size for typical usage.)
- *
- * Allocations of small blocks are now table-driven to many different
- * buckets. Sizes of really big buckets are increased to accomodata
- * common size=power-of-2 blocks. Running-out-of-memory is made into
- * an exception. Deeply configurable and thread-safe.
- *
- */
-
-#ifdef PERL_CORE
-# include "EXTERN.h"
-# define PERL_IN_MALLOC_C
-# include "perl.h"
-# if defined(PERL_IMPLICIT_CONTEXT)
-# define croak Perl_croak_nocontext
-# define croak2 Perl_croak_nocontext
-# define warn Perl_warn_nocontext
-# define warn2 Perl_warn_nocontext
-# else
-# define croak2 croak
-# define warn2 warn
-# endif
-#else
-# ifdef PERL_FOR_X2P
-# include "../EXTERN.h"
-# include "../perl.h"
-# else
-# include <stdlib.h>
-# include <stdio.h>
-# include <memory.h>
-# define _(arg) arg
-# ifndef Malloc_t
-# define Malloc_t void *
-# endif
-# ifndef PTRSIZE
-# define PTRSIZE 4
-# endif
-# ifndef MEM_SIZE
-# define MEM_SIZE unsigned long
-# endif
-# ifndef LONG_MAX
-# define LONG_MAX 0x7FFFFFFF
-# endif
-# ifndef UV
-# define UV unsigned long
-# endif
-# ifndef caddr_t
-# define caddr_t char *
-# endif
-# ifndef Free_t
-# define Free_t void
-# endif
-# define Copy(s,d,n,t) (void)memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
-# define PerlEnv_getenv getenv
-# define PerlIO_printf fprintf
-# define PerlIO_stderr() stderr
-# endif
-# ifndef croak /* make depend */
-# define croak(mess, arg) (warn((mess), (arg)), exit(1))
-# endif
-# ifndef croak2 /* make depend */
-# define croak2(mess, arg1, arg2) (warn2((mess), (arg1), (arg2)), exit(1))
-# endif
-# ifndef warn
-# define warn(mess, arg) fprintf(stderr, (mess), (arg))
-# endif
-# ifndef warn2
-# define warn2(mess, arg1) fprintf(stderr, (mess), (arg1), (arg2))
-# endif
-# ifdef DEBUG_m
-# undef DEBUG_m
-# endif
-# define DEBUG_m(a)
-# ifdef DEBUGGING
-# undef DEBUGGING
-# endif
-# ifndef pTHX
-# define pTHX void
-# define pTHX_
-# define dTHX extern int Perl___notused
-# define WITH_THX(s) s
-# endif
-# ifndef PERL_GET_INTERP
-# define PERL_GET_INTERP PL_curinterp
-# endif
-# ifndef Perl_malloc
-# define Perl_malloc malloc
-# endif
-# ifndef Perl_mfree
-# define Perl_mfree free
-# endif
-# ifndef Perl_realloc
-# define Perl_realloc realloc
-# endif
-# ifndef Perl_calloc
-# define Perl_calloc calloc
-# endif
-# ifndef Perl_strdup
-# define Perl_strdup strdup
-# endif
-#endif
-
-#ifndef MUTEX_LOCK
-# define MUTEX_LOCK(l)
-#endif
-
-#ifndef MUTEX_UNLOCK
-# define MUTEX_UNLOCK(l)
-#endif
-
-#ifndef MALLOC_LOCK
-# define MALLOC_LOCK MUTEX_LOCK(&PL_malloc_mutex)
-#endif
-
-#ifndef MALLOC_UNLOCK
-# define MALLOC_UNLOCK MUTEX_UNLOCK(&PL_malloc_mutex)
-#endif
-
-# ifndef fatalcroak /* make depend */
-# define fatalcroak(mess) (write(2, (mess), strlen(mess)), exit(2))
-# endif
-
-#ifdef DEBUGGING
-# undef DEBUG_m
-# define DEBUG_m(a) \
- STMT_START { \
- if (PERL_GET_INTERP) { dTHX; if (PL_debug & 128) { a; } } \
- } STMT_END
-#endif
-
-#ifdef PERL_IMPLICIT_CONTEXT
-# define PERL_IS_ALIVE aTHX
-#else
-# define PERL_IS_ALIVE TRUE
-#endif
-
-
-/*
- * Layout of memory:
- * ~~~~~~~~~~~~~~~~
- * The memory is broken into "blocks" which occupy multiples of 2K (and
- * generally speaking, have size "close" to a power of 2). The addresses
- * of such *unused* blocks are kept in nextf[i] with big enough i. (nextf
- * is an array of linked lists.) (Addresses of used blocks are not known.)
- *
- * Moreover, since the algorithm may try to "bite" smaller blocks out
- * of unused bigger ones, there are also regions of "irregular" size,
- * managed separately, by a linked list chunk_chain.
- *
- * The third type of storage is the sbrk()ed-but-not-yet-used space, its
- * end and size are kept in last_sbrk_top and sbrked_remains.
- *
- * Growing blocks "in place":
- * ~~~~~~~~~~~~~~~~~~~~~~~~~
- * The address of the block with the greatest address is kept in last_op
- * (if not known, last_op is 0). If it is known that the memory above
- * last_op is not continuous, or contains a chunk from chunk_chain,
- * last_op is set to 0.
- *
- * The chunk with address last_op may be grown by expanding into
- * sbrk()ed-but-not-yet-used space, or trying to sbrk() more continuous
- * memory.
- *
- * Management of last_op:
- * ~~~~~~~~~~~~~~~~~~~~~
- *
- * free() never changes the boundaries of blocks, so is not relevant.
- *
- * The only way realloc() may change the boundaries of blocks is if it
- * grows a block "in place". However, in the case of success such a
- * chunk is automatically last_op, and it remains last_op. In the case
- * of failure getpages_adjacent() clears last_op.
- *
- * malloc() may change blocks by calling morecore() only.
- *
- * morecore() may create new blocks by:
- * a) biting pieces from chunk_chain (cannot create one above last_op);
- * b) biting a piece from an unused block (if block was last_op, this
- * may create a chunk from chain above last_op, thus last_op is
- * invalidated in such a case).
- * c) biting of sbrk()ed-but-not-yet-used space. This creates
- * a block which is last_op.
- * d) Allocating new pages by calling getpages();
- *
- * getpages() creates a new block. It marks last_op at the bottom of
- * the chunk of memory it returns.
- *
- * Active pages footprint:
- * ~~~~~~~~~~~~~~~~~~~~~~
- * Note that we do not need to traverse the lists in nextf[i], just take
- * the first element of this list. However, we *need* to traverse the
- * list in chunk_chain, but most the time it should be a very short one,
- * so we do not step on a lot of pages we are not going to use.
- *
- * Flaws:
- * ~~~~~
- * get_from_bigger_buckets(): forget to increment price => Quite
- * aggressive.
- */
-
-/* I don't much care whether these are defined in sys/types.h--LAW */
-
-#define u_char unsigned char
-#define u_int unsigned int
-/*
- * I removed the definition of u_bigint which appeared to be u_bigint = UV
- * u_bigint was only used in TWOK_MASKED and TWOK_SHIFT
- * where I have used PTR2UV. RMB
- */
-#define u_short unsigned short
-
-/* 286 and atarist like big chunks, which gives too much overhead. */
-#if (defined(RCHECK) || defined(I286) || defined(atarist) || defined(__MINT__)) && defined(PACK_MALLOC)
-# undef PACK_MALLOC
-#endif
-
-/*
- * The description below is applicable if PACK_MALLOC is not defined.
- *
- * 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 MEM_ALIGNBYTES > 4
- double strut; /* alignment problems */
-#endif
- struct {
-/*
- * Keep the ovu_index and ovu_magic in this order, having a char
- * field first gives alignment indigestion in some systems, such as
- * MachTen.
- */
- u_char ovu_index; /* bucket # */
- u_char ovu_magic; /* magic number */
-#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 RMAGIC 0x55555555 /* magic # on range info */
-#define RMAGIC_C 0x55 /* magic # on range info */
-
-#ifdef RCHECK
-# define RSLOP sizeof (u_int)
-# ifdef TWO_POT_OPTIMIZE
-# define MAX_SHORT_BUCKET (12 * BUCKETS_PER_POW2)
-# else
-# define MAX_SHORT_BUCKET (13 * BUCKETS_PER_POW2)
-# endif
-#else
-# define RSLOP 0
-#endif
-
-#if !defined(PACK_MALLOC) && defined(BUCKETS_ROOT2)
-# undef BUCKETS_ROOT2
-#endif
-
-#ifdef BUCKETS_ROOT2
-# define BUCKET_TABLE_SHIFT 2
-# define BUCKET_POW2_SHIFT 1
-# define BUCKETS_PER_POW2 2
-#else
-# define BUCKET_TABLE_SHIFT MIN_BUC_POW2
-# define BUCKET_POW2_SHIFT 0
-# define BUCKETS_PER_POW2 1
-#endif
-
-#if !defined(MEM_ALIGNBYTES) || ((MEM_ALIGNBYTES > 4) && !defined(STRICT_ALIGNMENT))
-/* Figure out the alignment of void*. */
-struct aligner {
- char c;
- void *p;
-};
-# define ALIGN_SMALL ((int)((caddr_t)&(((struct aligner*)0)->p)))
-#else
-# define ALIGN_SMALL MEM_ALIGNBYTES
-#endif
-
-#define IF_ALIGN_8(yes,no) ((ALIGN_SMALL>4) ? (yes) : (no))
-
-#ifdef BUCKETS_ROOT2
-# define MAX_BUCKET_BY_TABLE 13
-static u_short buck_size[MAX_BUCKET_BY_TABLE + 1] =
- {
- 0, 0, 0, 0, 4, 4, 8, 12, 16, 24, 32, 48, 64, 80,
- };
-# define BUCKET_SIZE(i) ((i) % 2 ? buck_size[i] : (1 << ((i) >> BUCKET_POW2_SHIFT)))
-# define BUCKET_SIZE_REAL(i) ((i) <= MAX_BUCKET_BY_TABLE \
- ? buck_size[i] \
- : ((1 << ((i) >> BUCKET_POW2_SHIFT)) \
- - MEM_OVERHEAD(i) \
- + POW2_OPTIMIZE_SURPLUS(i)))
-#else
-# define BUCKET_SIZE(i) (1 << ((i) >> BUCKET_POW2_SHIFT))
-# define BUCKET_SIZE_REAL(i) (BUCKET_SIZE(i) - MEM_OVERHEAD(i) + POW2_OPTIMIZE_SURPLUS(i))
-#endif
-
-
-#ifdef PACK_MALLOC
-/* In this case there are several possible layout of arenas depending
- * on the size. Arenas are of sizes multiple to 2K, 2K-aligned, and
- * have a size close to a power of 2.
- *
- * Arenas of the size >= 4K keep one chunk only. Arenas of size 2K
- * may keep one chunk or multiple chunks. Here are the possible
- * layouts of arenas:
- *
- * # One chunk only, chunksize 2^k + SOMETHING - ALIGN, k >= 11
- *
- * INDEX MAGIC1 UNUSED CHUNK1
- *
- * # Multichunk with sanity checking and chunksize 2^k-ALIGN, k>7
- *
- * INDEX MAGIC1 MAGIC2 MAGIC3 UNUSED CHUNK1 CHUNK2 CHUNK3 ...
- *
- * # Multichunk with sanity checking and size 2^k-ALIGN, k=7
- *
- * INDEX MAGIC1 MAGIC2 MAGIC3 UNUSED CHUNK1 UNUSED CHUNK2 CHUNK3 ...
- *
- * # Multichunk with sanity checking and size up to 80
- *
- * INDEX UNUSED MAGIC1 UNUSED MAGIC2 UNUSED ... CHUNK1 CHUNK2 CHUNK3 ...
- *
- * # No sanity check (usually up to 48=byte-long buckets)
- * INDEX UNUSED CHUNK1 CHUNK2 ...
- *
- * Above INDEX and MAGIC are one-byte-long. Sizes of UNUSED are
- * appropriate to keep algorithms simple and memory aligned. INDEX
- * encodes the size of the chunk, while MAGICn encodes state (used,
- * free or non-managed-by-us-so-it-indicates-a-bug) of CHUNKn. MAGIC
- * is used for sanity checking purposes only. SOMETHING is 0 or 4K
- * (to make size of big CHUNK accomodate allocations for powers of two
- * better).
- *
- * [There is no need to alignment between chunks, since C rules ensure
- * that structs which need 2^k alignment have sizeof which is
- * divisible by 2^k. Thus as far as the last chunk is aligned at the
- * end of the arena, and 2K-alignment does not contradict things,
- * everything is going to be OK for sizes of chunks 2^n and 2^n +
- * 2^k. Say, 80-bit buckets will be 16-bit aligned, and as far as we
- * put allocations for requests in 65..80 range, all is fine.
- *
- * Note, however, that standard malloc() puts more strict
- * requirements than the above C rules. Moreover, our algorithms of
- * realloc() may break this idyll, but we suppose that realloc() does
- * need not change alignment.]
- *
- * Is very important to make calculation of the offset of MAGICm as
- * quick as possible, since it is done on each malloc()/free(). In
- * fact it is so quick that it has quite little effect on the speed of
- * doing malloc()/free(). [By default] We forego such calculations
- * for small chunks, but only to save extra 3% of memory, not because
- * of speed considerations.
- *
- * Here is the algorithm [which is the same for all the allocations
- * schemes above], see OV_MAGIC(block,bucket). Let OFFSETm be the
- * offset of the CHUNKm from the start of ARENA. Then offset of
- * MAGICm is (OFFSET1 >> SHIFT) + ADDOFFSET. Here SHIFT and ADDOFFSET
- * are numbers which depend on the size of the chunks only.
- *
- * Let as check some sanity conditions. Numbers OFFSETm>>SHIFT are
- * different for all the chunks in the arena if 2^SHIFT is not greater
- * than size of the chunks in the arena. MAGIC1 will not overwrite
- * INDEX provided ADDOFFSET is >0 if OFFSET1 < 2^SHIFT. MAGIClast
- * will not overwrite CHUNK1 if OFFSET1 > (OFFSETlast >> SHIFT) +
- * ADDOFFSET.
- *
- * Make SHIFT the maximal possible (there is no point in making it
- * smaller). Since OFFSETlast is 2K - CHUNKSIZE, above restrictions
- * give restrictions on OFFSET1 and on ADDOFFSET.
- *
- * In particular, for chunks of size 2^k with k>=6 we can put
- * ADDOFFSET to be from 0 to 2^k - 2^(11-k), and have
- * OFFSET1==chunksize. For chunks of size 80 OFFSET1 of 2K%80=48 is
- * large enough to have ADDOFFSET between 1 and 16 (similarly for 96,
- * when ADDOFFSET should be 1). In particular, keeping MAGICs for
- * these sizes gives no additional size penalty.
- *
- * However, for chunks of size 2^k with k<=5 this gives OFFSET1 >=
- * ADDOFSET + 2^(11-k). Keeping ADDOFFSET 0 allows for 2^(11-k)-2^(11-2k)
- * chunks per arena. This is smaller than 2^(11-k) - 1 which are
- * needed if no MAGIC is kept. [In fact, having a negative ADDOFFSET
- * would allow for slightly more buckets per arena for k=2,3.]
- *
- * Similarly, for chunks of size 3/2*2^k with k<=5 MAGICs would span
- * the area up to 2^(11-k)+ADDOFFSET. For k=4 this give optimal
- * ADDOFFSET as -7..0. For k=3 ADDOFFSET can go up to 4 (with tiny
- * savings for negative ADDOFFSET). For k=5 ADDOFFSET can go -1..16
- * (with no savings for negative values).
- *
- * In particular, keeping ADDOFFSET 0 for sizes of chunks up to 2^6
- * leads to tiny pessimizations in case of sizes 4, 8, 12, 24, and
- * leads to no contradictions except for size=80 (or 96.)
- *
- * However, it also makes sense to keep no magic for sizes 48 or less.
- * This is what we do. In this case one needs ADDOFFSET>=1 also for
- * chunksizes 12, 24, and 48, unless one gets one less chunk per
- * arena.
- *
- * The algo of OV_MAGIC(block,bucket) keeps ADDOFFSET 0 until
- * chunksize of 64, then makes it 1.
- *
- * This allows for an additional optimization: the above scheme leads
- * to giant overheads for sizes 128 or more (one whole chunk needs to
- * be sacrifised to keep INDEX). Instead we use chunks not of size
- * 2^k, but of size 2^k-ALIGN. If we pack these chunks at the end of
- * the arena, then the beginnings are still in different 2^k-long
- * sections of the arena if k>=7 for ALIGN==4, and k>=8 if ALIGN=8.
- * Thus for k>7 the above algo of calculating the offset of the magic
- * will still give different answers for different chunks. And to
- * avoid the overrun of MAGIC1 into INDEX, one needs ADDOFFSET of >=1.
- * In the case k=7 we just move the first chunk an extra ALIGN
- * backward inside the ARENA (this is done once per arena lifetime,
- * thus is not a big overhead). */
-# define MAX_PACKED_POW2 6
-# define MAX_PACKED (MAX_PACKED_POW2 * BUCKETS_PER_POW2 + BUCKET_POW2_SHIFT)
-# define MAX_POW2_ALGO ((1<<(MAX_PACKED_POW2 + 1)) - M_OVERHEAD)
-# define TWOK_MASK ((1<<LOG_OF_MIN_ARENA) - 1)
-# define TWOK_MASKED(x) (PTR2UV(x) & ~TWOK_MASK)
-# define TWOK_SHIFT(x) (PTR2UV(x) & TWOK_MASK)
-# define OV_INDEXp(block) (INT2PTR(u_char*,TWOK_MASKED(block)))
-# define OV_INDEX(block) (*OV_INDEXp(block))
-# define OV_MAGIC(block,bucket) (*(OV_INDEXp(block) + \
- (TWOK_SHIFT(block)>> \
- (bucket>>BUCKET_POW2_SHIFT)) + \
- (bucket >= MIN_NEEDS_SHIFT ? 1 : 0)))
- /* A bucket can have a shift smaller than it size, we need to
- shift its magic number so it will not overwrite index: */
-# ifdef BUCKETS_ROOT2
-# define MIN_NEEDS_SHIFT (7*BUCKETS_PER_POW2 - 1) /* Shift 80 greater than chunk 64. */
-# else
-# define MIN_NEEDS_SHIFT (7*BUCKETS_PER_POW2) /* Shift 128 greater than chunk 32. */
-# endif
-# define CHUNK_SHIFT 0
-
-/* Number of active buckets of given ordinal. */
-#ifdef IGNORE_SMALL_BAD_FREE
-#define FIRST_BUCKET_WITH_CHECK (6 * BUCKETS_PER_POW2) /* 64 */
-# define N_BLKS(bucket) ( (bucket) < FIRST_BUCKET_WITH_CHECK \
- ? ((1<<LOG_OF_MIN_ARENA) - 1)/BUCKET_SIZE(bucket) \
- : n_blks[bucket] )
-#else
-# define N_BLKS(bucket) n_blks[bucket]
-#endif
-
-static u_short n_blks[LOG_OF_MIN_ARENA * BUCKETS_PER_POW2] =
- {
-# if BUCKETS_PER_POW2==1
- 0, 0,
- (MIN_BUC_POW2==2 ? 384 : 0),
- 224, 120, 62, 31, 16, 8, 4, 2
-# else
- 0, 0, 0, 0,
- (MIN_BUC_POW2==2 ? 384 : 0), (MIN_BUC_POW2==2 ? 384 : 0), /* 4, 4 */
- 224, 149, 120, 80, 62, 41, 31, 25, 16, 16, 8, 8, 4, 4, 2, 2
-# endif
- };
-
-/* Shift of the first bucket with the given ordinal inside 2K chunk. */
-#ifdef IGNORE_SMALL_BAD_FREE
-# define BLK_SHIFT(bucket) ( (bucket) < FIRST_BUCKET_WITH_CHECK \
- ? ((1<<LOG_OF_MIN_ARENA) \
- - BUCKET_SIZE(bucket) * N_BLKS(bucket)) \
- : blk_shift[bucket])
-#else
-# define BLK_SHIFT(bucket) blk_shift[bucket]
-#endif
-
-static u_short blk_shift[LOG_OF_MIN_ARENA * BUCKETS_PER_POW2] =
- {
-# if BUCKETS_PER_POW2==1
- 0, 0,
- (MIN_BUC_POW2==2 ? 512 : 0),
- 256, 128, 64, 64, /* 8 to 64 */
- 16*sizeof(union overhead),
- 8*sizeof(union overhead),
- 4*sizeof(union overhead),
- 2*sizeof(union overhead),
-# else
- 0, 0, 0, 0,
- (MIN_BUC_POW2==2 ? 512 : 0), (MIN_BUC_POW2==2 ? 512 : 0),
- 256, 260, 128, 128, 64, 80, 64, 48, /* 8 to 96 */
- 16*sizeof(union overhead), 16*sizeof(union overhead),
- 8*sizeof(union overhead), 8*sizeof(union overhead),
- 4*sizeof(union overhead), 4*sizeof(union overhead),
- 2*sizeof(union overhead), 2*sizeof(union overhead),
-# endif
- };
-
-# define NEEDED_ALIGNMENT 0x800 /* 2k boundaries */
-# define WANTED_ALIGNMENT 0x800 /* 2k boundaries */
-
-#else /* !PACK_MALLOC */
-
-# define OV_MAGIC(block,bucket) (block)->ov_magic
-# define OV_INDEX(block) (block)->ov_index
-# define CHUNK_SHIFT 1
-# define MAX_PACKED -1
-# define NEEDED_ALIGNMENT MEM_ALIGNBYTES
-# define WANTED_ALIGNMENT 0x400 /* 1k boundaries */
-
-#endif /* !PACK_MALLOC */
-
-#define M_OVERHEAD (sizeof(union overhead) + RSLOP)
-
-#ifdef PACK_MALLOC
-# define MEM_OVERHEAD(bucket) \
- (bucket <= MAX_PACKED ? 0 : M_OVERHEAD)
-# ifdef SMALL_BUCKET_VIA_TABLE
-# define START_SHIFTS_BUCKET ((MAX_PACKED_POW2 + 1) * BUCKETS_PER_POW2)
-# define START_SHIFT MAX_PACKED_POW2
-# ifdef BUCKETS_ROOT2 /* Chunks of size 3*2^n. */
-# define SIZE_TABLE_MAX 80
-# else
-# define SIZE_TABLE_MAX 64
-# endif
-static char bucket_of[] =
- {
-# ifdef BUCKETS_ROOT2 /* Chunks of size 3*2^n. */
- /* 0 to 15 in 4-byte increments. */
- (sizeof(void*) > 4 ? 6 : 5), /* 4/8, 5-th bucket for better reports */
- 6, /* 8 */
- IF_ALIGN_8(8,7), 8, /* 16/12, 16 */
- 9, 9, 10, 10, /* 24, 32 */
- 11, 11, 11, 11, /* 48 */
- 12, 12, 12, 12, /* 64 */
- 13, 13, 13, 13, /* 80 */
- 13, 13, 13, 13 /* 80 */
-# else /* !BUCKETS_ROOT2 */
- /* 0 to 15 in 4-byte increments. */
- (sizeof(void*) > 4 ? 3 : 2),
- 3,
- 4, 4,
- 5, 5, 5, 5,
- 6, 6, 6, 6,
- 6, 6, 6, 6
-# endif /* !BUCKETS_ROOT2 */
- };
-# else /* !SMALL_BUCKET_VIA_TABLE */
-# define START_SHIFTS_BUCKET MIN_BUCKET
-# define START_SHIFT (MIN_BUC_POW2 - 1)
-# endif /* !SMALL_BUCKET_VIA_TABLE */
-#else /* !PACK_MALLOC */
-# define MEM_OVERHEAD(bucket) M_OVERHEAD
-# ifdef SMALL_BUCKET_VIA_TABLE
-# undef SMALL_BUCKET_VIA_TABLE
-# endif
-# define START_SHIFTS_BUCKET MIN_BUCKET
-# define START_SHIFT (MIN_BUC_POW2 - 1)
-#endif /* !PACK_MALLOC */
-
-/*
- * Big allocations are often of the size 2^n bytes. To make them a
- * little bit better, make blocks of size 2^n+pagesize for big n.
- */
-
-#ifdef TWO_POT_OPTIMIZE
-
-# ifndef PERL_PAGESIZE
-# define PERL_PAGESIZE 4096
-# endif
-# ifndef FIRST_BIG_POW2
-# define FIRST_BIG_POW2 15 /* 32K, 16K is used too often. */
-# endif
-# define FIRST_BIG_BLOCK (1<<FIRST_BIG_POW2)
-/* If this value or more, check against bigger blocks. */
-# define FIRST_BIG_BOUND (FIRST_BIG_BLOCK - M_OVERHEAD)
-/* If less than this value, goes into 2^n-overhead-block. */
-# define LAST_SMALL_BOUND ((FIRST_BIG_BLOCK>>1) - M_OVERHEAD)
-
-# define POW2_OPTIMIZE_ADJUST(nbytes) \
- ((nbytes >= FIRST_BIG_BOUND) ? nbytes -= PERL_PAGESIZE : 0)
-# define POW2_OPTIMIZE_SURPLUS(bucket) \
- ((bucket >= FIRST_BIG_POW2 * BUCKETS_PER_POW2) ? PERL_PAGESIZE : 0)
-
-#else /* !TWO_POT_OPTIMIZE */
-# define POW2_OPTIMIZE_ADJUST(nbytes)
-# define POW2_OPTIMIZE_SURPLUS(bucket) 0
-#endif /* !TWO_POT_OPTIMIZE */
-
-#if defined(HAS_64K_LIMIT) && defined(PERL_CORE)
-# define BARK_64K_LIMIT(what,nbytes,size) \
- if (nbytes > 0xffff) { \
- PerlIO_printf(PerlIO_stderr(), \
- "%s too large: %lx\n", what, size); \
- my_exit(1); \
- }
-#else /* !HAS_64K_LIMIT || !PERL_CORE */
-# define BARK_64K_LIMIT(what,nbytes,size)
-#endif /* !HAS_64K_LIMIT || !PERL_CORE */
-
-#ifndef MIN_SBRK
-# define MIN_SBRK 2048
-#endif
-
-#ifndef FIRST_SBRK
-# define FIRST_SBRK (48*1024)
-#endif
-
-/* Minimal sbrk in percents of what is already alloced. */
-#ifndef MIN_SBRK_FRAC
-# define MIN_SBRK_FRAC 3
-#endif
-
-#ifndef SBRK_ALLOW_FAILURES
-# define SBRK_ALLOW_FAILURES 3
-#endif
-
-#ifndef SBRK_FAILURE_PRICE
-# define SBRK_FAILURE_PRICE 50
-#endif
-
-static void morecore (register int bucket);
-# if defined(DEBUGGING)
-static void botch (char *diag, char *s);
-# endif
-static void add_to_chain (void *p, MEM_SIZE size, MEM_SIZE chip);
-static void* get_from_chain (MEM_SIZE size);
-static void* get_from_bigger_buckets(int bucket, MEM_SIZE size);
-static union overhead *getpages (MEM_SIZE needed, int *nblksp, int bucket);
-static int getpages_adjacent(MEM_SIZE require);
-
-#ifdef PERL_CORE
-
-#ifdef I_MACH_CTHREADS
-# undef MUTEX_LOCK
-# define MUTEX_LOCK(m) STMT_START { if (*m) mutex_lock(*m); } STMT_END
-# undef MUTEX_UNLOCK
-# define MUTEX_UNLOCK(m) STMT_START { if (*m) mutex_unlock(*m); } STMT_END
-#endif
-
-#ifndef BITS_IN_PTR
-# define BITS_IN_PTR (8*PTRSIZE)
-#endif
-
-/*
- * nextf[i] is the pointer to the next free block of size 2^i. The
- * smallest allocatable block is 8 bytes. The overhead information
- * precedes the data area returned to the user.
- */
-#define NBUCKETS (BITS_IN_PTR*BUCKETS_PER_POW2 + 1)
-static union overhead *nextf[NBUCKETS];
-
-#if defined(PURIFY) && !defined(USE_PERL_SBRK)
-# define USE_PERL_SBRK
-#endif
-
-#ifdef USE_PERL_SBRK
-# define sbrk(a) Perl_sbrk(a)
-Malloc_t Perl_sbrk (int size);
-#else
-#ifndef HAS_SBRK_PROTO
-extern Malloc_t sbrk(int);
-#endif
-#endif
-
-#ifdef DEBUGGING_MSTATS
-/*
- * nmalloc[i] is the difference between the number of mallocs and frees
- * for a given block size.
- */
-static u_int nmalloc[NBUCKETS];
-static u_int sbrk_slack;
-static u_int start_slack;
-#else /* !( defined DEBUGGING_MSTATS ) */
-# define sbrk_slack 0
-#endif
-
-static u_int goodsbrk;
-
-# ifdef PERL_EMERGENCY_SBRK
-
-# ifndef BIG_SIZE
-# define BIG_SIZE (1<<16) /* 64K */
-# endif
-
-static char *emergency_buffer;
-static MEM_SIZE emergency_buffer_size;
-static int no_mem; /* 0 if the last request for more memory succeeded.
- Otherwise the size of the failing request. */
-
-static Malloc_t
-emergency_sbrk(MEM_SIZE size)
-{
- MEM_SIZE rsize = (((size - 1)>>LOG_OF_MIN_ARENA) + 1)<<LOG_OF_MIN_ARENA;
-
- if (size >= BIG_SIZE && (!no_mem || (size < no_mem))) {
- /* Give the possibility to recover, but avoid an infinite cycle. */
- MALLOC_UNLOCK;
- no_mem = size;
- croak2("Out of memory during \"large\" request for %"UVuf" bytes, total sbrk() is %"UVuf" bytes", (UV)size, (UV)(goodsbrk + sbrk_slack));
- }
-
- if (emergency_buffer_size >= rsize) {
- char *old = emergency_buffer;
-
- emergency_buffer_size -= rsize;
- emergency_buffer += rsize;
- return old;
- } else {
- dTHX;
- /* First offense, give a possibility to recover by dieing. */
- /* No malloc involved here: */
- GV **gvp = (GV**)hv_fetch(PL_defstash, "^M", 2, 0);
- SV *sv;
- char *pv;
- int have = 0;
- STRLEN n_a;
-
- if (emergency_buffer_size) {
- add_to_chain(emergency_buffer, emergency_buffer_size, 0);
- emergency_buffer_size = 0;
- emergency_buffer = Nullch;
- have = 1;
- }
- if (!gvp) gvp = (GV**)hv_fetch(PL_defstash, "\015", 1, 0);
- if (!gvp || !(sv = GvSV(*gvp)) || !SvPOK(sv)
- || (SvLEN(sv) < (1<<LOG_OF_MIN_ARENA) - M_OVERHEAD)) {
- if (have)
- goto do_croak;
- return (char *)-1; /* Now die die die... */
- }
- /* Got it, now detach SvPV: */
- pv = SvPV(sv, n_a);
- /* Check alignment: */
- if ((PTR2UV(pv) - sizeof(union overhead)) & (NEEDED_ALIGNMENT - 1)) {
- PerlIO_puts(PerlIO_stderr(),"Bad alignment of $^M!\n");
- return (char *)-1; /* die die die */
- }
-
- emergency_buffer = pv - sizeof(union overhead);
- emergency_buffer_size = malloced_size(pv) + M_OVERHEAD;
- SvPOK_off(sv);
- SvPVX(sv) = Nullch;
- SvCUR(sv) = SvLEN(sv) = 0;
- }
- do_croak:
- MALLOC_UNLOCK;
- croak("Out of memory during request for %"UVuf" bytes, total sbrk() is %"UVuf" bytes", (UV)size, (UV)(goodsbrk + sbrk_slack));
- /* NOTREACHED */
- return Nullch;
-}
-
-# else /* !defined(PERL_EMERGENCY_SBRK) */
-# define emergency_sbrk(size) -1
-# endif
-#endif /* ifdef PERL_CORE */
-
-#ifdef DEBUGGING
-#undef ASSERT
-#define ASSERT(p,diag) if (!(p)) botch(diag,STRINGIFY(p)); else
-static void
-botch(char *diag, char *s)
-{
- dTHX;
- PerlIO_printf(PerlIO_stderr(), "assertion botched (%s?): %s\n", diag, s);
- PerlProc_abort();
-}
-#else
-#define ASSERT(p, diag)
-#endif
-
-Malloc_t
-Perl_malloc(register size_t nbytes)
-{
- register union overhead *p;
- register int bucket;
- register MEM_SIZE shiftr;
-
-#if defined(DEBUGGING) || defined(RCHECK)
- MEM_SIZE size = nbytes;
-#endif
-
- BARK_64K_LIMIT("Allocation",nbytes,nbytes);
-#ifdef DEBUGGING
- if ((long)nbytes < 0)
- croak("%s", "panic: malloc");
-#endif
-
- /*
- * Convert amount of memory requested into
- * closest block size stored in hash buckets
- * which satisfies request. Account for
- * space used per block for accounting.
- */
-#ifdef PACK_MALLOC
-# ifdef SMALL_BUCKET_VIA_TABLE
- if (nbytes == 0)
- bucket = MIN_BUCKET;
- else if (nbytes <= SIZE_TABLE_MAX) {
- bucket = bucket_of[(nbytes - 1) >> BUCKET_TABLE_SHIFT];
- } else
-# else
- if (nbytes == 0)
- nbytes = 1;
- if (nbytes <= MAX_POW2_ALGO) goto do_shifts;
- else
-# endif
-#endif
- {
- POW2_OPTIMIZE_ADJUST(nbytes);
- nbytes += M_OVERHEAD;
- nbytes = (nbytes + 3) &~ 3;
- do_shifts:
- shiftr = (nbytes - 1) >> START_SHIFT;
- bucket = START_SHIFTS_BUCKET;
- /* apart from this loop, this is O(1) */
- while (shiftr >>= 1)
- bucket += BUCKETS_PER_POW2;
- }
- MALLOC_LOCK;
- /*
- * If nothing in hash bucket right now,
- * request more memory from the system.
- */
- if (nextf[bucket] == NULL)
- morecore(bucket);
- if ((p = nextf[bucket]) == NULL) {
- MALLOC_UNLOCK;
-#ifdef PERL_CORE
- {
- dTHX;
- if (!PL_nomemok) {
-#if defined(PLAIN_MALLOC) && defined(NO_FANCY_MALLOC)
- PerlIO_puts(PerlIO_stderr(),"Out of memory!\n");
-#else
- char buff[80];
- char *eb = buff + sizeof(buff) - 1;
- char *s = eb;
- size_t n = nbytes;
-
- PerlIO_puts(PerlIO_stderr(),"Out of memory during request for ");
-#if defined(DEBUGGING) || defined(RCHECK)
- n = size;
-#endif
- *s = 0;
- do {
- *--s = '0' + (n % 10);
- } while (n /= 10);
- PerlIO_puts(PerlIO_stderr(),s);
- PerlIO_puts(PerlIO_stderr()," bytes, total sbrk() is ");
- s = eb;
- n = goodsbrk + sbrk_slack;
- do {
- *--s = '0' + (n % 10);
- } while (n /= 10);
- PerlIO_puts(PerlIO_stderr(),s);
- PerlIO_puts(PerlIO_stderr()," bytes!\n");
-#endif /* defined(PLAIN_MALLOC) && defined(NO_FANCY_MALLOC) */
- my_exit(1);
- }
- }
-#endif
- return (NULL);
- }
-
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf": (%05lu) malloc %ld bytes\n",
- PTR2UV(p), (unsigned long)(PL_an++),
- (long)size));
-
- /* remove from linked list */
-#if defined(RCHECK)
- if ((PTR2UV(p)) & (MEM_ALIGNBYTES - 1)) {
- dTHX;
- PerlIO_printf(PerlIO_stderr(),
- "Unaligned pointer in the free chain 0x%"UVxf"\n",
- PTR2UV(p));
- }
- if ((PTR2UV(p->ov_next)) & (MEM_ALIGNBYTES - 1)) {
- dTHX;
- PerlIO_printf(PerlIO_stderr(),
- "Unaligned `next' pointer in the free "
- "chain 0x%"UVxf" at 0x%"UVxf"\n",
- PTR2UV(p->ov_next), PTR2UV(p));
- }
-#endif
- nextf[bucket] = p->ov_next;
-
- MALLOC_UNLOCK;
-
-#ifdef IGNORE_SMALL_BAD_FREE
- if (bucket >= FIRST_BUCKET_WITH_CHECK)
-#endif
- OV_MAGIC(p, bucket) = MAGIC;
-#ifndef PACK_MALLOC
- OV_INDEX(p) = bucket;
-#endif
-#ifdef RCHECK
- /*
- * Record allocated size of block and
- * bound space with magic numbers.
- */
- p->ov_rmagic = RMAGIC;
- if (bucket <= MAX_SHORT_BUCKET) {
- int i;
-
- nbytes = size + M_OVERHEAD;
- p->ov_size = nbytes - 1;
- if ((i = nbytes & 3)) {
- i = 4 - i;
- while (i--)
- *((char *)((caddr_t)p + nbytes - RSLOP + i)) = RMAGIC_C;
- }
- nbytes = (nbytes + 3) &~ 3;
- *((u_int *)((caddr_t)p + nbytes - RSLOP)) = RMAGIC;
- }
-#endif
- return ((Malloc_t)(p + CHUNK_SHIFT));
-}
-
-static char *last_sbrk_top;
-static char *last_op; /* This arena can be easily extended. */
-static int sbrked_remains;
-static int sbrk_good = SBRK_ALLOW_FAILURES * SBRK_FAILURE_PRICE;
-
-#ifdef DEBUGGING_MSTATS
-static int sbrks;
-#endif
-
-struct chunk_chain_s {
- struct chunk_chain_s *next;
- MEM_SIZE size;
-};
-static struct chunk_chain_s *chunk_chain;
-static int n_chunks;
-static char max_bucket;
-
-/* Cutoff a piece of one of the chunks in the chain. Prefer smaller chunk. */
-static void *
-get_from_chain(MEM_SIZE size)
-{
- struct chunk_chain_s *elt = chunk_chain, **oldp = &chunk_chain;
- struct chunk_chain_s **oldgoodp = NULL;
- long min_remain = LONG_MAX;
-
- while (elt) {
- if (elt->size >= size) {
- long remains = elt->size - size;
- if (remains >= 0 && remains < min_remain) {
- oldgoodp = oldp;
- min_remain = remains;
- }
- if (remains == 0) {
- break;
- }
- }
- oldp = &( elt->next );
- elt = elt->next;
- }
- if (!oldgoodp) return NULL;
- if (min_remain) {
- void *ret = *oldgoodp;
- struct chunk_chain_s *next = (*oldgoodp)->next;
-
- *oldgoodp = (struct chunk_chain_s *)((char*)ret + size);
- (*oldgoodp)->size = min_remain;
- (*oldgoodp)->next = next;
- return ret;
- } else {
- void *ret = *oldgoodp;
- *oldgoodp = (*oldgoodp)->next;
- n_chunks--;
- return ret;
- }
-}
-
-static void
-add_to_chain(void *p, MEM_SIZE size, MEM_SIZE chip)
-{
- struct chunk_chain_s *next = chunk_chain;
- char *cp = (char*)p;
-
- cp += chip;
- chunk_chain = (struct chunk_chain_s *)cp;
- chunk_chain->size = size - chip;
- chunk_chain->next = next;
- n_chunks++;
-}
-
-static void *
-get_from_bigger_buckets(int bucket, MEM_SIZE size)
-{
- int price = 1;
- static int bucketprice[NBUCKETS];
- while (bucket <= max_bucket) {
- /* We postpone stealing from bigger buckets until we want it
- often enough. */
- if (nextf[bucket] && bucketprice[bucket]++ >= price) {
- /* Steal it! */
- void *ret = (void*)(nextf[bucket] - 1 + CHUNK_SHIFT);
- bucketprice[bucket] = 0;
- if (((char*)nextf[bucket]) - M_OVERHEAD == last_op) {
- last_op = NULL; /* Disable optimization */
- }
- nextf[bucket] = nextf[bucket]->ov_next;
-#ifdef DEBUGGING_MSTATS
- nmalloc[bucket]--;
- start_slack -= M_OVERHEAD;
-#endif
- add_to_chain(ret, (BUCKET_SIZE(bucket) +
- POW2_OPTIMIZE_SURPLUS(bucket)),
- size);
- return ret;
- }
- bucket++;
- }
- return NULL;
-}
-
-static union overhead *
-getpages(MEM_SIZE needed, int *nblksp, int bucket)
-{
- /* Need to do (possibly expensive) system call. Try to
- optimize it for rare calling. */
- MEM_SIZE require = needed - sbrked_remains;
- char *cp;
- union overhead *ovp;
- MEM_SIZE slack = 0;
-
- if (sbrk_good > 0) {
- if (!last_sbrk_top && require < FIRST_SBRK)
- require = FIRST_SBRK;
- else if (require < MIN_SBRK) require = MIN_SBRK;
-
- if (require < goodsbrk * MIN_SBRK_FRAC / 100)
- require = goodsbrk * MIN_SBRK_FRAC / 100;
- require = ((require - 1 + MIN_SBRK) / MIN_SBRK) * MIN_SBRK;
- } else {
- require = needed;
- last_sbrk_top = 0;
- sbrked_remains = 0;
- }
-
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "sbrk(%ld) for %ld-byte-long arena\n",
- (long)require, (long) needed));
- cp = (char *)sbrk(require);
-#ifdef DEBUGGING_MSTATS
- sbrks++;
-#endif
- if (cp == last_sbrk_top) {
- /* Common case, anything is fine. */
- sbrk_good++;
- ovp = (union overhead *) (cp - sbrked_remains);
- last_op = cp - sbrked_remains;
- sbrked_remains = require - (needed - sbrked_remains);
- } else if (cp == (char *)-1) { /* no more room! */
- ovp = (union overhead *)emergency_sbrk(needed);
- if (ovp == (union overhead *)-1)
- return 0;
- if (((char*)ovp) > last_op) { /* Cannot happen with current emergency_sbrk() */
- last_op = 0;
- }
- return ovp;
- } else { /* Non-continuous or first sbrk(). */
- long add = sbrked_remains;
- char *newcp;
-
- if (sbrked_remains) { /* Put rest into chain, we
- cannot use it right now. */
- add_to_chain((void*)(last_sbrk_top - sbrked_remains),
- sbrked_remains, 0);
- }
-
- /* Second, check alignment. */
- slack = 0;
-
-#if !defined(atarist) && !defined(__MINT__) /* on the atari we dont have to worry about this */
-# ifndef I286 /* The sbrk(0) call on the I286 always returns the next segment */
- /* WANTED_ALIGNMENT may be more than NEEDED_ALIGNMENT, but this may
- improve performance of memory access. */
- if (PTR2UV(cp) & (WANTED_ALIGNMENT - 1)) { /* Not aligned. */
- slack = WANTED_ALIGNMENT - (PTR2UV(cp) & (WANTED_ALIGNMENT - 1));
- add += slack;
- }
-# endif
-#endif /* !atarist && !MINT */
-
- if (add) {
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "sbrk(%ld) to fix non-continuous/off-page sbrk:\n\t%ld for alignement,\t%ld were assumed to come from the tail of the previous sbrk\n",
- (long)add, (long) slack,
- (long) sbrked_remains));
- newcp = (char *)sbrk(add);
-#if defined(DEBUGGING_MSTATS)
- sbrks++;
- sbrk_slack += add;
-#endif
- if (newcp != cp + require) {
- /* Too bad: even rounding sbrk() is not continuous.*/
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "failed to fix bad sbrk()\n"));
-#ifdef PACK_MALLOC
- if (slack) {
- MALLOC_UNLOCK;
- fatalcroak("panic: Off-page sbrk\n");
- }
-#endif
- if (sbrked_remains) {
- /* Try again. */
-#if defined(DEBUGGING_MSTATS)
- sbrk_slack += require;
-#endif
- require = needed;
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "straight sbrk(%ld)\n",
- (long)require));
- cp = (char *)sbrk(require);
-#ifdef DEBUGGING_MSTATS
- sbrks++;
-#endif
- if (cp == (char *)-1)
- return 0;
- }
- sbrk_good = -1; /* Disable optimization!
- Continue with not-aligned... */
- } else {
- cp += slack;
- require += sbrked_remains;
- }
- }
-
- if (last_sbrk_top) {
- sbrk_good -= SBRK_FAILURE_PRICE;
- }
-
- ovp = (union overhead *) cp;
- /*
- * Round up to minimum allocation size boundary
- * and deduct from block count to reflect.
- */
-
-# if NEEDED_ALIGNMENT > MEM_ALIGNBYTES
- if (PTR2UV(ovp) & (NEEDED_ALIGNMENT - 1))
- fatalcroak("Misalignment of sbrk()\n");
- else
-# endif
-#ifndef I286 /* Again, this should always be ok on an 80286 */
- if (PTR2UV(ovp) & (MEM_ALIGNBYTES - 1)) {
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "fixing sbrk(): %d bytes off machine alignement\n",
- (int)(PTR2UV(ovp) & (MEM_ALIGNBYTES - 1))));
- ovp = INT2PTR(union overhead *,(PTR2UV(ovp) + MEM_ALIGNBYTES) &
- (MEM_ALIGNBYTES - 1));
- (*nblksp)--;
-# if defined(DEBUGGING_MSTATS)
- /* This is only approx. if TWO_POT_OPTIMIZE: */
- sbrk_slack += (1 << (bucket >> BUCKET_POW2_SHIFT));
-# endif
- }
-#endif
- ; /* Finish `else' */
- sbrked_remains = require - needed;
- last_op = cp;
- }
-#if !defined(PLAIN_MALLOC) && !defined(NO_FANCY_MALLOC)
- no_mem = 0;
-#endif
- last_sbrk_top = cp + require;
-#ifdef DEBUGGING_MSTATS
- goodsbrk += require;
-#endif
- return ovp;
-}
-
-static int
-getpages_adjacent(MEM_SIZE require)
-{
- if (require <= sbrked_remains) {
- sbrked_remains -= require;
- } else {
- char *cp;
-
- require -= sbrked_remains;
- /* We do not try to optimize sbrks here, we go for place. */
- cp = (char*) sbrk(require);
-#ifdef DEBUGGING_MSTATS
- sbrks++;
- goodsbrk += require;
-#endif
- if (cp == last_sbrk_top) {
- sbrked_remains = 0;
- last_sbrk_top = cp + require;
- } else {
- if (cp == (char*)-1) { /* Out of memory */
-#ifdef DEBUGGING_MSTATS
- goodsbrk -= require;
-#endif
- return 0;
- }
- /* Report the failure: */
- if (sbrked_remains)
- add_to_chain((void*)(last_sbrk_top - sbrked_remains),
- sbrked_remains, 0);
- add_to_chain((void*)cp, require, 0);
- sbrk_good -= SBRK_FAILURE_PRICE;
- sbrked_remains = 0;
- last_sbrk_top = 0;
- last_op = 0;
- return 0;
- }
- }
-
- return 1;
-}
-
-/*
- * Allocate more memory to the indicated bucket.
- */
-static void
-morecore(register int bucket)
-{
- register union overhead *ovp;
- register int rnu; /* 2^rnu bytes will be requested */
- int nblks; /* become nblks blocks of the desired size */
- register MEM_SIZE siz, needed;
-
- if (nextf[bucket])
- return;
- if (bucket == sizeof(MEM_SIZE)*8*BUCKETS_PER_POW2) {
- MALLOC_UNLOCK;
- croak("%s", "Out of memory during ridiculously large request");
- }
- if (bucket > max_bucket)
- max_bucket = bucket;
-
- rnu = ( (bucket <= (LOG_OF_MIN_ARENA << BUCKET_POW2_SHIFT))
- ? LOG_OF_MIN_ARENA
- : (bucket >> BUCKET_POW2_SHIFT) );
- /* This may be overwritten later: */
- nblks = 1 << (rnu - (bucket >> BUCKET_POW2_SHIFT)); /* how many blocks to get */
- needed = ((MEM_SIZE)1 << rnu) + POW2_OPTIMIZE_SURPLUS(bucket);
- if (nextf[rnu << BUCKET_POW2_SHIFT]) { /* 2048b bucket. */
- ovp = nextf[rnu << BUCKET_POW2_SHIFT] - 1 + CHUNK_SHIFT;
- nextf[rnu << BUCKET_POW2_SHIFT]
- = nextf[rnu << BUCKET_POW2_SHIFT]->ov_next;
-#ifdef DEBUGGING_MSTATS
- nmalloc[rnu << BUCKET_POW2_SHIFT]--;
- start_slack -= M_OVERHEAD;
-#endif
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "stealing %ld bytes from %ld arena\n",
- (long) needed, (long) rnu << BUCKET_POW2_SHIFT));
- } else if (chunk_chain
- && (ovp = (union overhead*) get_from_chain(needed))) {
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "stealing %ld bytes from chain\n",
- (long) needed));
- } else if ( (ovp = (union overhead*)
- get_from_bigger_buckets((rnu << BUCKET_POW2_SHIFT) + 1,
- needed)) ) {
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "stealing %ld bytes from bigger buckets\n",
- (long) needed));
- } else if (needed <= sbrked_remains) {
- ovp = (union overhead *)(last_sbrk_top - sbrked_remains);
- sbrked_remains -= needed;
- last_op = (char*)ovp;
- } else
- ovp = getpages(needed, &nblks, bucket);
-
- if (!ovp)
- return;
-
- /*
- * Add new memory allocated to that on
- * free list for this hash bucket.
- */
- siz = BUCKET_SIZE(bucket);
-#ifdef PACK_MALLOC
- *(u_char*)ovp = bucket; /* Fill index. */
- if (bucket <= MAX_PACKED) {
- ovp = (union overhead *) ((char*)ovp + BLK_SHIFT(bucket));
- nblks = N_BLKS(bucket);
-# ifdef DEBUGGING_MSTATS
- start_slack += BLK_SHIFT(bucket);
-# endif
- } else if (bucket < LOG_OF_MIN_ARENA * BUCKETS_PER_POW2) {
- ovp = (union overhead *) ((char*)ovp + BLK_SHIFT(bucket));
- siz -= sizeof(union overhead);
- } else ovp++; /* One chunk per block. */
-#endif /* PACK_MALLOC */
- nextf[bucket] = ovp;
-#ifdef DEBUGGING_MSTATS
- nmalloc[bucket] += nblks;
- if (bucket > MAX_PACKED) {
- start_slack += M_OVERHEAD * nblks;
- }
-#endif
- while (--nblks > 0) {
- ovp->ov_next = (union overhead *)((caddr_t)ovp + siz);
- ovp = (union overhead *)((caddr_t)ovp + siz);
- }
- /* Not all sbrks return zeroed memory.*/
- ovp->ov_next = (union overhead *)NULL;
-#ifdef PACK_MALLOC
- if (bucket == 7*BUCKETS_PER_POW2) { /* Special case, explanation is above. */
- union overhead *n_op = nextf[7*BUCKETS_PER_POW2]->ov_next;
- nextf[7*BUCKETS_PER_POW2] =
- (union overhead *)((caddr_t)nextf[7*BUCKETS_PER_POW2]
- - sizeof(union overhead));
- nextf[7*BUCKETS_PER_POW2]->ov_next = n_op;
- }
-#endif /* !PACK_MALLOC */
-}
-
-Free_t
-Perl_mfree(void *mp)
-{
- register MEM_SIZE size;
- register union overhead *ovp;
- char *cp = (char*)mp;
-#ifdef PACK_MALLOC
- u_char bucket;
-#endif
-
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf": (%05lu) free\n",
- PTR2UV(cp), (unsigned long)(PL_an++)));
-
- if (cp == NULL)
- return;
- ovp = (union overhead *)((caddr_t)cp
- - sizeof (union overhead) * CHUNK_SHIFT);
-#ifdef PACK_MALLOC
- bucket = OV_INDEX(ovp);
-#endif
-#ifdef IGNORE_SMALL_BAD_FREE
- if ((bucket >= FIRST_BUCKET_WITH_CHECK)
- && (OV_MAGIC(ovp, bucket) != MAGIC))
-#else
- if (OV_MAGIC(ovp, bucket) != MAGIC)
-#endif
- {
- static int bad_free_warn = -1;
- if (bad_free_warn == -1) {
- dTHX;
- char *pbf = PerlEnv_getenv("PERL_BADFREE");
- bad_free_warn = (pbf) ? atoi(pbf) : 1;
- }
- if (!bad_free_warn)
- return;
-#ifdef RCHECK
-#ifdef PERL_CORE
- {
- dTHX;
- if (!PERL_IS_ALIVE || !PL_curcop || ckWARN_d(WARN_MALLOC))
- Perl_warner(aTHX_ WARN_MALLOC, "%s free() ignored",
- ovp->ov_rmagic == RMAGIC - 1 ?
- "Duplicate" : "Bad");
- }
-#else
- warn("%s free() ignored",
- ovp->ov_rmagic == RMAGIC - 1 ? "Duplicate" : "Bad");
-#endif
-#else
-#ifdef PERL_CORE
- {
- dTHX;
- if (!PERL_IS_ALIVE || !PL_curcop || ckWARN_d(WARN_MALLOC))
- Perl_warner(aTHX_ WARN_MALLOC, "%s", "Bad free() ignored");
- }
-#else
- warn("%s", "Bad free() ignored");
-#endif
-#endif
- return; /* sanity */
- }
-#ifdef RCHECK
- ASSERT(ovp->ov_rmagic == RMAGIC, "chunk's head overwrite");
- if (OV_INDEX(ovp) <= MAX_SHORT_BUCKET) {
- int i;
- MEM_SIZE nbytes = ovp->ov_size + 1;
-
- if ((i = nbytes & 3)) {
- i = 4 - i;
- while (i--) {
- ASSERT(*((char *)((caddr_t)ovp + nbytes - RSLOP + i))
- == RMAGIC_C, "chunk's tail overwrite");
- }
- }
- nbytes = (nbytes + 3) &~ 3;
- ASSERT(*(u_int *)((caddr_t)ovp + nbytes - RSLOP) == RMAGIC, "chunk's tail overwrite");
- }
- ovp->ov_rmagic = RMAGIC - 1;
-#endif
- ASSERT(OV_INDEX(ovp) < NBUCKETS, "chunk's head overwrite");
- size = OV_INDEX(ovp);
-
- MALLOC_LOCK;
- ovp->ov_next = nextf[size];
- nextf[size] = ovp;
- MALLOC_UNLOCK;
-}
-
-/* There is no need to do any locking in realloc (with an exception of
- trying to grow in place if we are at the end of the chain).
- If somebody calls us from a different thread with the same address,
- we are sole anyway. */
-
-Malloc_t
-Perl_realloc(void *mp, size_t nbytes)
-{
- register MEM_SIZE onb;
- union overhead *ovp;
- char *res;
- int prev_bucket;
- register int bucket;
- int incr; /* 1 if does not fit, -1 if "easily" fits in a
- smaller bucket, otherwise 0. */
- char *cp = (char*)mp;
-
-#if defined(DEBUGGING) || !defined(PERL_CORE)
- MEM_SIZE size = nbytes;
-
- if ((long)nbytes < 0)
- croak("%s", "panic: realloc");
-#endif
-
- BARK_64K_LIMIT("Reallocation",nbytes,size);
- if (!cp)
- return Perl_malloc(nbytes);
-
- ovp = (union overhead *)((caddr_t)cp
- - sizeof (union overhead) * CHUNK_SHIFT);
- bucket = OV_INDEX(ovp);
-
-#ifdef IGNORE_SMALL_BAD_FREE
- if ((bucket >= FIRST_BUCKET_WITH_CHECK)
- && (OV_MAGIC(ovp, bucket) != MAGIC))
-#else
- if (OV_MAGIC(ovp, bucket) != MAGIC)
-#endif
- {
- static int bad_free_warn = -1;
- if (bad_free_warn == -1) {
- dTHX;
- char *pbf = PerlEnv_getenv("PERL_BADFREE");
- bad_free_warn = (pbf) ? atoi(pbf) : 1;
- }
- if (!bad_free_warn)
- return Nullch;
-#ifdef RCHECK
-#ifdef PERL_CORE
- {
- dTHX;
- if (!PERL_IS_ALIVE || !PL_curcop || ckWARN_d(WARN_MALLOC))
- Perl_warner(aTHX_ WARN_MALLOC, "%srealloc() %signored",
- (ovp->ov_rmagic == RMAGIC - 1 ? "" : "Bad "),
- ovp->ov_rmagic == RMAGIC - 1
- ? "of freed memory " : "");
- }
-#else
- warn("%srealloc() %signored",
- (ovp->ov_rmagic == RMAGIC - 1 ? "" : "Bad "),
- ovp->ov_rmagic == RMAGIC - 1 ? "of freed memory " : "");
-#endif
-#else
-#ifdef PERL_CORE
- {
- dTHX;
- if (!PERL_IS_ALIVE || !PL_curcop || ckWARN_d(WARN_MALLOC))
- Perl_warner(aTHX_ WARN_MALLOC, "%s",
- "Bad realloc() ignored");
- }
-#else
- warn("%s", "Bad realloc() ignored");
-#endif
-#endif
- return Nullch; /* sanity */
- }
-
- onb = BUCKET_SIZE_REAL(bucket);
- /*
- * avoid the copy if same size block.
- * We are not agressive with boundary cases. Note that it might
- * (for a small number of cases) give false negative if
- * both new size and old one are in the bucket for
- * FIRST_BIG_POW2, but the new one is near the lower end.
- *
- * We do not try to go to 1.5 times smaller bucket so far.
- */
- if (nbytes > onb) incr = 1;
- else {
-#ifdef DO_NOT_TRY_HARDER_WHEN_SHRINKING
- if ( /* This is a little bit pessimal if PACK_MALLOC: */
- nbytes > ( (onb >> 1) - M_OVERHEAD )
-# ifdef TWO_POT_OPTIMIZE
- || (bucket == FIRST_BIG_POW2 && nbytes >= LAST_SMALL_BOUND )
-# endif
- )
-#else /* !DO_NOT_TRY_HARDER_WHEN_SHRINKING */
- prev_bucket = ( (bucket > MAX_PACKED + 1)
- ? bucket - BUCKETS_PER_POW2
- : bucket - 1);
- if (nbytes > BUCKET_SIZE_REAL(prev_bucket))
-#endif /* !DO_NOT_TRY_HARDER_WHEN_SHRINKING */
- incr = 0;
- else incr = -1;
- }
-#ifdef STRESS_REALLOC
- goto hard_way;
-#endif
- if (incr == 0) {
- inplace_label:
-#ifdef RCHECK
- /*
- * Record new allocated size of block and
- * bound space with magic numbers.
- */
- if (OV_INDEX(ovp) <= MAX_SHORT_BUCKET) {
- int i, nb = ovp->ov_size + 1;
-
- if ((i = nb & 3)) {
- i = 4 - i;
- while (i--) {
- ASSERT(*((char *)((caddr_t)ovp + nb - RSLOP + i)) == RMAGIC_C, "chunk's tail overwrite");
- }
- }
- nb = (nb + 3) &~ 3;
- ASSERT(*(u_int *)((caddr_t)ovp + nb - RSLOP) == RMAGIC, "chunk's tail overwrite");
- /*
- * 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 += M_OVERHEAD;
- ovp->ov_size = nbytes - 1;
- if ((i = nbytes & 3)) {
- i = 4 - i;
- while (i--)
- *((char *)((caddr_t)ovp + nbytes - RSLOP + i))
- = RMAGIC_C;
- }
- nbytes = (nbytes + 3) &~ 3;
- *((u_int *)((caddr_t)ovp + nbytes - RSLOP)) = RMAGIC;
- }
-#endif
- res = cp;
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf": (%05lu) realloc %ld bytes inplace\n",
- PTR2UV(res),(unsigned long)(PL_an++),
- (long)size));
- } else if (incr == 1 && (cp - M_OVERHEAD == last_op)
- && (onb > (1 << LOG_OF_MIN_ARENA))) {
- MEM_SIZE require, newarena = nbytes, pow;
- int shiftr;
-
- POW2_OPTIMIZE_ADJUST(newarena);
- newarena = newarena + M_OVERHEAD;
- /* newarena = (newarena + 3) &~ 3; */
- shiftr = (newarena - 1) >> LOG_OF_MIN_ARENA;
- pow = LOG_OF_MIN_ARENA + 1;
- /* apart from this loop, this is O(1) */
- while (shiftr >>= 1)
- pow++;
- newarena = (1 << pow) + POW2_OPTIMIZE_SURPLUS(pow * BUCKETS_PER_POW2);
- require = newarena - onb - M_OVERHEAD;
-
- MALLOC_LOCK;
- if (cp - M_OVERHEAD == last_op /* We *still* are the last chunk */
- && getpages_adjacent(require)) {
-#ifdef DEBUGGING_MSTATS
- nmalloc[bucket]--;
- nmalloc[pow * BUCKETS_PER_POW2]++;
-#endif
- *(cp - M_OVERHEAD) = pow * BUCKETS_PER_POW2; /* Fill index. */
- MALLOC_UNLOCK;
- goto inplace_label;
- } else {
- MALLOC_UNLOCK;
- goto hard_way;
- }
- } else {
- hard_way:
- DEBUG_m(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf": (%05lu) realloc %ld bytes the hard way\n",
- PTR2UV(cp),(unsigned long)(PL_an++),
- (long)size));
- if ((res = (char*)Perl_malloc(nbytes)) == NULL)
- return (NULL);
- if (cp != res) /* common optimization */
- Copy(cp, res, (MEM_SIZE)(nbytes<onb?nbytes:onb), char);
- Perl_mfree(cp);
- }
- return ((Malloc_t)res);
-}
-
-Malloc_t
-Perl_calloc(register size_t elements, register size_t size)
-{
- long sz = elements * size;
- Malloc_t p = Perl_malloc(sz);
-
- if (p) {
- memset((void*)p, 0, sz);
- }
- return p;
-}
-
-char *
-Perl_strdup(const char *s)
-{
- MEM_SIZE l = strlen(s);
- char *s1 = (char *)Perl_malloc(l+1);
-
- Copy(s, s1, (MEM_SIZE)(l+1), char);
- return s1;
-}
-
-#ifdef PERL_CORE
-int
-Perl_putenv(char *a)
-{
- /* Sometimes system's putenv conflicts with my_setenv() - this is system
- malloc vs Perl's free(). */
- dTHX;
- char *var;
- char *val = a;
- MEM_SIZE l;
- char buf[80];
-
- while (*val && *val != '=')
- val++;
- if (!*val)
- return -1;
- l = val - a;
- if (l < sizeof(buf))
- var = buf;
- else
- var = Perl_malloc(l + 1);
- Copy(a, var, l, char);
- var[l + 1] = 0;
- my_setenv(var, val+1);
- if (var != buf)
- Perl_mfree(var);
- return 0;
-}
-# endif
-
-MEM_SIZE
-Perl_malloced_size(void *p)
-{
- union overhead *ovp = (union overhead *)
- ((caddr_t)p - sizeof (union overhead) * CHUNK_SHIFT);
- int bucket = OV_INDEX(ovp);
-#ifdef RCHECK
- /* The caller wants to have a complete control over the chunk,
- disable the memory checking inside the chunk. */
- if (bucket <= MAX_SHORT_BUCKET) {
- MEM_SIZE size = BUCKET_SIZE_REAL(bucket);
- ovp->ov_size = size + M_OVERHEAD - 1;
- *((u_int *)((caddr_t)ovp + size + M_OVERHEAD - RSLOP)) = RMAGIC;
- }
-#endif
- return BUCKET_SIZE_REAL(bucket);
-}
-
-# ifdef BUCKETS_ROOT2
-# define MIN_EVEN_REPORT 6
-# else
-# define MIN_EVEN_REPORT MIN_BUCKET
-# endif
-
-int
-Perl_get_mstats(pTHX_ perl_mstats_t *buf, int buflen, int level)
-{
-#ifdef DEBUGGING_MSTATS
- register int i, j;
- register union overhead *p;
- struct chunk_chain_s* nextchain;
-
- buf->topbucket = buf->topbucket_ev = buf->topbucket_odd
- = buf->totfree = buf->total = buf->total_chain = 0;
-
- buf->minbucket = MIN_BUCKET;
- MALLOC_LOCK;
- for (i = MIN_BUCKET ; i < NBUCKETS; i++) {
- for (j = 0, p = nextf[i]; p; p = p->ov_next, j++)
- ;
- if (i < buflen) {
- buf->nfree[i] = j;
- buf->ntotal[i] = nmalloc[i];
- }
- buf->totfree += j * BUCKET_SIZE_REAL(i);
- buf->total += nmalloc[i] * BUCKET_SIZE_REAL(i);
- if (nmalloc[i]) {
- i % 2 ? (buf->topbucket_odd = i) : (buf->topbucket_ev = i);
- buf->topbucket = i;
- }
- }
- nextchain = chunk_chain;
- while (nextchain) {
- buf->total_chain += nextchain->size;
- nextchain = nextchain->next;
- }
- buf->total_sbrk = goodsbrk + sbrk_slack;
- buf->sbrks = sbrks;
- buf->sbrk_good = sbrk_good;
- buf->sbrk_slack = sbrk_slack;
- buf->start_slack = start_slack;
- buf->sbrked_remains = sbrked_remains;
- MALLOC_UNLOCK;
- buf->nbuckets = NBUCKETS;
- if (level) {
- for (i = MIN_BUCKET ; i < NBUCKETS; i++) {
- if (i >= buflen)
- break;
- buf->bucket_mem_size[i] = BUCKET_SIZE(i);
- buf->bucket_available_size[i] = BUCKET_SIZE_REAL(i);
- }
- }
-#endif /* defined DEBUGGING_MSTATS */
- return 0; /* XXX unused */
-}
-/*
- * 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.
- */
-void
-Perl_dump_mstats(pTHX_ char *s)
-{
-#ifdef DEBUGGING_MSTATS
- register int i;
- perl_mstats_t buffer;
- UV nf[NBUCKETS];
- UV nt[NBUCKETS];
-
- buffer.nfree = nf;
- buffer.ntotal = nt;
- get_mstats(&buffer, NBUCKETS, 0);
-
- if (s)
- PerlIO_printf(Perl_error_log,
- "Memory allocation statistics %s (buckets %"IVdf"(%"IVdf")..%"IVdf"(%"IVdf")\n",
- s,
- (IV)BUCKET_SIZE_REAL(MIN_BUCKET),
- (IV)BUCKET_SIZE(MIN_BUCKET),
- (IV)BUCKET_SIZE_REAL(buffer.topbucket),
- (IV)BUCKET_SIZE(buffer.topbucket));
- PerlIO_printf(Perl_error_log, "%8"IVdf" free:", buffer.totfree);
- for (i = MIN_EVEN_REPORT; i <= buffer.topbucket; i += BUCKETS_PER_POW2) {
- PerlIO_printf(Perl_error_log,
- ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2)
- ? " %5"UVuf
- : ((i < 12*BUCKETS_PER_POW2) ? " %3"UVuf : " %"UVuf)),
- buffer.nfree[i]);
- }
-#ifdef BUCKETS_ROOT2
- PerlIO_printf(Perl_error_log, "\n\t ");
- for (i = MIN_BUCKET + 1; i <= buffer.topbucket_odd; i += BUCKETS_PER_POW2) {
- PerlIO_printf(Perl_error_log,
- ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2)
- ? " %5"UVuf
- : ((i < 12*BUCKETS_PER_POW2) ? " %3"UVuf : " %"UVuf)),
- buffer.nfree[i]);
- }
-#endif
- PerlIO_printf(Perl_error_log, "\n%8"IVdf" used:", buffer.total - buffer.totfree);
- for (i = MIN_EVEN_REPORT; i <= buffer.topbucket; i += BUCKETS_PER_POW2) {
- PerlIO_printf(Perl_error_log,
- ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2)
- ? " %5"IVdf
- : ((i < 12*BUCKETS_PER_POW2) ? " %3"IVdf : " %"IVdf)),
- buffer.ntotal[i] - buffer.nfree[i]);
- }
-#ifdef BUCKETS_ROOT2
- PerlIO_printf(Perl_error_log, "\n\t ");
- for (i = MIN_BUCKET + 1; i <= buffer.topbucket_odd; i += BUCKETS_PER_POW2) {
- PerlIO_printf(Perl_error_log,
- ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2)
- ? " %5"IVdf
- : ((i < 12*BUCKETS_PER_POW2) ? " %3"IVdf : " %"IVdf)),
- buffer.ntotal[i] - buffer.nfree[i]);
- }
-#endif
- PerlIO_printf(Perl_error_log, "\nTotal sbrk(): %"IVdf"/%"IVdf":%"IVdf". Odd ends: pad+heads+chain+tail: %"IVdf"+%"IVdf"+%"IVdf"+%"IVdf".\n",
- buffer.total_sbrk, buffer.sbrks, buffer.sbrk_good,
- buffer.sbrk_slack, buffer.start_slack,
- buffer.total_chain, buffer.sbrked_remains);
-#endif /* DEBUGGING_MSTATS */
-}
-#endif /* lint */
-
-#ifdef USE_PERL_SBRK
-
-# if defined(__MACHTEN_PPC__) || defined(NeXT) || defined(__NeXT__) || defined(PURIFY)
-# define PERL_SBRK_VIA_MALLOC
-# endif
-
-# ifdef PERL_SBRK_VIA_MALLOC
-
-/* it may seem schizophrenic to use perl's malloc and let it call system */
-/* malloc, the reason for that is only the 3.2 version of the OS that had */
-/* frequent core dumps within nxzonefreenolock. This sbrk routine put an */
-/* end to the cores */
-
-# ifndef SYSTEM_ALLOC
-# define SYSTEM_ALLOC(a) malloc(a)
-# endif
-# ifndef SYSTEM_ALLOC_ALIGNMENT
-# define SYSTEM_ALLOC_ALIGNMENT MEM_ALIGNBYTES
-# endif
-
-# endif /* PERL_SBRK_VIA_MALLOC */
-
-static IV Perl_sbrk_oldchunk;
-static long Perl_sbrk_oldsize;
-
-# define PERLSBRK_32_K (1<<15)
-# define PERLSBRK_64_K (1<<16)
-
-Malloc_t
-Perl_sbrk(int size)
-{
- IV got;
- int small, reqsize;
-
- if (!size) return 0;
-#ifdef PERL_CORE
- reqsize = size; /* just for the DEBUG_m statement */
-#endif
-#ifdef PACK_MALLOC
- size = (size + 0x7ff) & ~0x7ff;
-#endif
- if (size <= Perl_sbrk_oldsize) {
- got = Perl_sbrk_oldchunk;
- Perl_sbrk_oldchunk += size;
- Perl_sbrk_oldsize -= size;
- } else {
- if (size >= PERLSBRK_32_K) {
- small = 0;
- } else {
- size = PERLSBRK_64_K;
- small = 1;
- }
-# if NEEDED_ALIGNMENT > SYSTEM_ALLOC_ALIGNMENT
- size += NEEDED_ALIGNMENT - SYSTEM_ALLOC_ALIGNMENT;
-# endif
- got = (IV)SYSTEM_ALLOC(size);
-# if NEEDED_ALIGNMENT > SYSTEM_ALLOC_ALIGNMENT
- got = (got + NEEDED_ALIGNMENT - 1) & ~(NEEDED_ALIGNMENT - 1);
-# endif
- if (small) {
- /* Chunk is small, register the rest for future allocs. */
- Perl_sbrk_oldchunk = got + reqsize;
- Perl_sbrk_oldsize = size - reqsize;
- }
- }
-
- DEBUG_m(PerlIO_printf(Perl_debug_log, "sbrk malloc size %ld (reqsize %ld), left size %ld, give addr 0x%"UVxf"\n",
- size, reqsize, Perl_sbrk_oldsize, PTR2UV(got)));
-
- return (void *)got;
-}
-
-#endif /* ! defined USE_PERL_SBRK */
diff --git a/contrib/perl5/mg.c b/contrib/perl5/mg.c
deleted file mode 100644
index e1b727a0a..0000000
--- a/contrib/perl5/mg.c
+++ /dev/null
@@ -1,2284 +0,0 @@
-/* mg.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "Sam sat on the ground and put his head in his hands. 'I wish I had never
- * come here, and I don't want to see no more magic,' he said, and fell silent."
- */
-
-#include "EXTERN.h"
-#define PERL_IN_MG_C
-#include "perl.h"
-
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-# ifndef NGROUPS
-# define NGROUPS 32
-# endif
-#endif
-
-static void restore_magic(pTHXo_ void *p);
-static void unwind_handler_stack(pTHXo_ void *p);
-
-/*
- * Use the "DESTRUCTOR" scope cleanup to reinstate magic.
- */
-
-struct magic_state {
- SV* mgs_sv;
- U32 mgs_flags;
- I32 mgs_ss_ix;
-};
-/* MGS is typedef'ed to struct magic_state in perl.h */
-
-STATIC void
-S_save_magic(pTHX_ I32 mgs_ix, SV *sv)
-{
- MGS* mgs;
- assert(SvMAGICAL(sv));
-
- SAVEDESTRUCTOR_X(restore_magic, (void*)mgs_ix);
-
- mgs = SSPTR(mgs_ix, MGS*);
- mgs->mgs_sv = sv;
- mgs->mgs_flags = SvMAGICAL(sv) | SvREADONLY(sv);
- mgs->mgs_ss_ix = PL_savestack_ix; /* points after the saved destructor */
-
- SvMAGICAL_off(sv);
- SvREADONLY_off(sv);
- SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
-}
-
-/*
-=for apidoc mg_magical
-
-Turns on the magical status of an SV. See C<sv_magic>.
-
-=cut
-*/
-
-void
-Perl_mg_magical(pTHX_ SV *sv)
-{
- MAGIC* mg;
- for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
- MGVTBL* vtbl = mg->mg_virtual;
- if (vtbl) {
- if (vtbl->svt_get && !(mg->mg_flags & MGf_GSKIP))
- SvGMAGICAL_on(sv);
- if (vtbl->svt_set)
- SvSMAGICAL_on(sv);
- if (!(SvFLAGS(sv) & (SVs_GMG|SVs_SMG)) || vtbl->svt_clear)
- SvRMAGICAL_on(sv);
- }
- }
-}
-
-/*
-=for apidoc mg_get
-
-Do magic after a value is retrieved from the SV. See C<sv_magic>.
-
-=cut
-*/
-
-int
-Perl_mg_get(pTHX_ SV *sv)
-{
- I32 mgs_ix;
- MAGIC* mg;
- MAGIC** mgp;
- int mgp_valid = 0;
-
- mgs_ix = SSNEW(sizeof(MGS));
- save_magic(mgs_ix, sv);
-
- mgp = &SvMAGIC(sv);
- while ((mg = *mgp) != 0) {
- MGVTBL* vtbl = mg->mg_virtual;
- if (!(mg->mg_flags & MGf_GSKIP) && vtbl && vtbl->svt_get) {
- CALL_FPTR(vtbl->svt_get)(aTHX_ sv, mg);
- /* Ignore this magic if it's been deleted */
- if ((mg == (mgp_valid ? *mgp : SvMAGIC(sv))) &&
- (mg->mg_flags & MGf_GSKIP))
- (SSPTR(mgs_ix, MGS*))->mgs_flags = 0;
- }
- /* Advance to next magic (complicated by possible deletion) */
- if (mg == (mgp_valid ? *mgp : SvMAGIC(sv))) {
- mgp = &mg->mg_moremagic;
- mgp_valid = 1;
- }
- else
- mgp = &SvMAGIC(sv); /* Re-establish pointer after sv_upgrade */
- }
-
- restore_magic(aTHXo_ (void*)mgs_ix);
- return 0;
-}
-
-/*
-=for apidoc mg_set
-
-Do magic after a value is assigned to the SV. See C<sv_magic>.
-
-=cut
-*/
-
-int
-Perl_mg_set(pTHX_ SV *sv)
-{
- I32 mgs_ix;
- MAGIC* mg;
- MAGIC* nextmg;
-
- mgs_ix = SSNEW(sizeof(MGS));
- save_magic(mgs_ix, sv);
-
- for (mg = SvMAGIC(sv); mg; mg = nextmg) {
- MGVTBL* vtbl = mg->mg_virtual;
- nextmg = mg->mg_moremagic; /* it may delete itself */
- if (mg->mg_flags & MGf_GSKIP) {
- mg->mg_flags &= ~MGf_GSKIP; /* setting requires another read */
- (SSPTR(mgs_ix, MGS*))->mgs_flags = 0;
- }
- if (vtbl && vtbl->svt_set)
- CALL_FPTR(vtbl->svt_set)(aTHX_ sv, mg);
- }
-
- restore_magic(aTHXo_ (void*)mgs_ix);
- return 0;
-}
-
-/*
-=for apidoc mg_length
-
-Report on the SV's length. See C<sv_magic>.
-
-=cut
-*/
-
-U32
-Perl_mg_length(pTHX_ SV *sv)
-{
- MAGIC* mg;
- char *junk;
- STRLEN len;
-
- for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
- MGVTBL* vtbl = mg->mg_virtual;
- if (vtbl && vtbl->svt_len) {
- I32 mgs_ix;
-
- mgs_ix = SSNEW(sizeof(MGS));
- save_magic(mgs_ix, sv);
- /* omit MGf_GSKIP -- not changed here */
- len = CALL_FPTR(vtbl->svt_len)(aTHX_ sv, mg);
- restore_magic(aTHXo_ (void*)mgs_ix);
- return len;
- }
- }
-
- junk = SvPV(sv, len);
- return len;
-}
-
-I32
-Perl_mg_size(pTHX_ SV *sv)
-{
- MAGIC* mg;
- I32 len;
-
- for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
- MGVTBL* vtbl = mg->mg_virtual;
- if (vtbl && vtbl->svt_len) {
- I32 mgs_ix;
-
- mgs_ix = SSNEW(sizeof(MGS));
- save_magic(mgs_ix, sv);
- /* omit MGf_GSKIP -- not changed here */
- len = CALL_FPTR(vtbl->svt_len)(aTHX_ sv, mg);
- restore_magic(aTHXo_ (void*)mgs_ix);
- return len;
- }
- }
-
- switch(SvTYPE(sv)) {
- case SVt_PVAV:
- len = AvFILLp((AV *) sv); /* Fallback to non-tied array */
- return len;
- case SVt_PVHV:
- /* FIXME */
- default:
- Perl_croak(aTHX_ "Size magic not implemented");
- break;
- }
- return 0;
-}
-
-/*
-=for apidoc mg_clear
-
-Clear something magical that the SV represents. See C<sv_magic>.
-
-=cut
-*/
-
-int
-Perl_mg_clear(pTHX_ SV *sv)
-{
- I32 mgs_ix;
- MAGIC* mg;
-
- mgs_ix = SSNEW(sizeof(MGS));
- save_magic(mgs_ix, sv);
-
- for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
- MGVTBL* vtbl = mg->mg_virtual;
- /* omit GSKIP -- never set here */
-
- if (vtbl && vtbl->svt_clear)
- CALL_FPTR(vtbl->svt_clear)(aTHX_ sv, mg);
- }
-
- restore_magic(aTHXo_ (void*)mgs_ix);
- return 0;
-}
-
-/*
-=for apidoc mg_find
-
-Finds the magic pointer for type matching the SV. See C<sv_magic>.
-
-=cut
-*/
-
-MAGIC*
-Perl_mg_find(pTHX_ SV *sv, int type)
-{
- MAGIC* mg;
- for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
- if (mg->mg_type == type)
- return mg;
- }
- return 0;
-}
-
-/*
-=for apidoc mg_copy
-
-Copies the magic from one SV to another. See C<sv_magic>.
-
-=cut
-*/
-
-int
-Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
-{
- int count = 0;
- MAGIC* mg;
- for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
- if (isUPPER(mg->mg_type)) {
- sv_magic(nsv,
- mg->mg_type == 'P' ? SvTIED_obj(sv, mg) :
- (mg->mg_type == 'D' && mg->mg_obj) ? sv : mg->mg_obj,
- toLOWER(mg->mg_type), key, klen);
- count++;
- }
- }
- return count;
-}
-
-/*
-=for apidoc mg_free
-
-Free any magic storage used by the SV. See C<sv_magic>.
-
-=cut
-*/
-
-int
-Perl_mg_free(pTHX_ SV *sv)
-{
- MAGIC* mg;
- MAGIC* moremagic;
- for (mg = SvMAGIC(sv); mg; mg = moremagic) {
- MGVTBL* vtbl = mg->mg_virtual;
- moremagic = mg->mg_moremagic;
- if (vtbl && vtbl->svt_free)
- CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
- if (mg->mg_ptr && mg->mg_type != 'g')
- if (mg->mg_len >= 0)
- Safefree(mg->mg_ptr);
- else if (mg->mg_len == HEf_SVKEY)
- SvREFCNT_dec((SV*)mg->mg_ptr);
- if (mg->mg_flags & MGf_REFCOUNTED)
- SvREFCNT_dec(mg->mg_obj);
- Safefree(mg);
- }
- SvMAGIC(sv) = 0;
- return 0;
-}
-
-#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
-#include <signal.h>
-#endif
-
-U32
-Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
-{
- register REGEXP *rx;
-
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- if (mg->mg_obj) /* @+ */
- return rx->nparens;
- else /* @- */
- return rx->lastparen;
- }
-
- return (U32)-1;
-}
-
-int
-Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
-{
- register I32 paren;
- register I32 s;
- register I32 i;
- register REGEXP *rx;
- I32 t;
-
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- paren = mg->mg_len;
- if (paren < 0)
- return 0;
- if (paren <= rx->nparens &&
- (s = rx->startp[paren]) != -1 &&
- (t = rx->endp[paren]) != -1)
- {
- if (mg->mg_obj) /* @+ */
- i = t;
- else /* @- */
- i = s;
- sv_setiv(sv,i);
- }
- }
- return 0;
-}
-
-int
-Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
-{
- Perl_croak(aTHX_ PL_no_modify);
- /* NOT REACHED */
- return 0;
-}
-
-U32
-Perl_magic_len(pTHX_ SV *sv, MAGIC *mg)
-{
- register I32 paren;
- register I32 i;
- register REGEXP *rx;
- I32 s1, t1;
-
- switch (*mg->mg_ptr) {
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9': case '&':
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
-
- paren = atoi(mg->mg_ptr);
- getparen:
- if (paren <= rx->nparens &&
- (s1 = rx->startp[paren]) != -1 &&
- (t1 = rx->endp[paren]) != -1)
- {
- i = t1 - s1;
- getlen:
- if (i > 0 && (PL_curpm->op_pmdynflags & PMdf_UTF8) && !IN_BYTE) {
- char *s = rx->subbeg + s1;
- char *send = rx->subbeg + t1;
- i = 0;
- while (s < send) {
- s += UTF8SKIP(s);
- i++;
- }
- }
- if (i >= 0)
- return i;
- }
- }
- return 0;
- case '+':
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- paren = rx->lastparen;
- if (paren)
- goto getparen;
- }
- return 0;
- case '`':
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- if (rx->startp[0] != -1) {
- i = rx->startp[0];
- if (i > 0) {
- s1 = 0;
- t1 = i;
- goto getlen;
- }
- }
- }
- return 0;
- case '\'':
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- if (rx->endp[0] != -1) {
- i = rx->sublen - rx->endp[0];
- if (i > 0) {
- s1 = rx->endp[0];
- t1 = rx->sublen;
- goto getlen;
- }
- }
- }
- return 0;
- case ',':
- return (STRLEN)PL_ofslen;
- case '\\':
- return (STRLEN)PL_orslen;
- }
- magic_get(sv,mg);
- if (!SvPOK(sv) && SvNIOK(sv)) {
- STRLEN n_a;
- sv_2pv(sv, &n_a);
- }
- if (SvPOK(sv))
- return SvCUR(sv);
- return 0;
-}
-
-int
-Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
-{
- register I32 paren;
- register char *s;
- register I32 i;
- register REGEXP *rx;
-
- switch (*mg->mg_ptr) {
- case '\001': /* ^A */
- sv_setsv(sv, PL_bodytarget);
- break;
- case '\003': /* ^C */
- sv_setiv(sv, (IV)PL_minus_c);
- break;
-
- case '\004': /* ^D */
- sv_setiv(sv, (IV)(PL_debug & 32767));
-#if defined(YYDEBUG) && defined(DEBUGGING)
- PL_yydebug = (PL_debug & 1);
-#endif
- break;
- case '\005': /* ^E */
-#ifdef MACOS_TRADITIONAL
- {
- char msg[256];
-
- sv_setnv(sv,(double)gMacPerl_OSErr);
- sv_setpv(sv, gMacPerl_OSErr ? GetSysErrText(gMacPerl_OSErr, msg) : "");
- }
-#else
-#ifdef VMS
- {
-# include <descrip.h>
-# include <starlet.h>
- char msg[255];
- $DESCRIPTOR(msgdsc,msg);
- sv_setnv(sv,(NV) vaxc$errno);
- if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
- sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
- else
- sv_setpv(sv,"");
- }
-#else
-#ifdef OS2
- if (!(_emx_env & 0x200)) { /* Under DOS */
- sv_setnv(sv, (NV)errno);
- sv_setpv(sv, errno ? Strerror(errno) : "");
- } else {
- if (errno != errno_isOS2) {
- int tmp = _syserrno();
- if (tmp) /* 2nd call to _syserrno() makes it 0 */
- Perl_rc = tmp;
- }
- sv_setnv(sv, (NV)Perl_rc);
- sv_setpv(sv, os2error(Perl_rc));
- }
-#else
-#ifdef WIN32
- {
- DWORD dwErr = GetLastError();
- sv_setnv(sv, (NV)dwErr);
- if (dwErr)
- {
- PerlProc_GetOSError(sv, dwErr);
- }
- else
- sv_setpv(sv, "");
- SetLastError(dwErr);
- }
-#else
- sv_setnv(sv, (NV)errno);
- sv_setpv(sv, errno ? Strerror(errno) : "");
-#endif
-#endif
-#endif
-#endif
- SvNOK_on(sv); /* what a wonderful hack! */
- break;
- case '\006': /* ^F */
- sv_setiv(sv, (IV)PL_maxsysfd);
- break;
- case '\010': /* ^H */
- sv_setiv(sv, (IV)PL_hints);
- break;
- case '\011': /* ^I */ /* NOT \t in EBCDIC */
- if (PL_inplace)
- sv_setpv(sv, PL_inplace);
- else
- sv_setsv(sv, &PL_sv_undef);
- break;
- case '\017': /* ^O */
- sv_setpv(sv, PL_osname);
- break;
- case '\020': /* ^P */
- sv_setiv(sv, (IV)PL_perldb);
- break;
- case '\023': /* ^S */
- {
- if (PL_lex_state != LEX_NOTPARSING)
- (void)SvOK_off(sv);
- else if (PL_in_eval)
- sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
- }
- break;
- case '\024': /* ^T */
-#ifdef BIG_TIME
- sv_setnv(sv, PL_basetime);
-#else
- sv_setiv(sv, (IV)PL_basetime);
-#endif
- break;
- case '\027': /* ^W & $^WARNING_BITS & ^WIDE_SYSTEM_CALLS */
- if (*(mg->mg_ptr+1) == '\0')
- sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE));
- else if (strEQ(mg->mg_ptr, "\027ARNING_BITS")) {
- if (PL_compiling.cop_warnings == pWARN_NONE ||
- PL_compiling.cop_warnings == pWARN_STD)
- {
- sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
- }
- else if (PL_compiling.cop_warnings == pWARN_ALL) {
- sv_setpvn(sv, WARN_ALLstring, WARNsize) ;
- }
- else {
- sv_setsv(sv, PL_compiling.cop_warnings);
- }
- SvPOK_only(sv);
- }
- else if (strEQ(mg->mg_ptr, "\027IDE_SYSTEM_CALLS"))
- sv_setiv(sv, (IV)PL_widesyscalls);
- break;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9': case '&':
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- I32 s1, t1;
-
- /*
- * Pre-threads, this was paren = atoi(GvENAME((GV*)mg->mg_obj));
- * XXX Does the new way break anything?
- */
- paren = atoi(mg->mg_ptr);
- getparen:
- if (paren <= rx->nparens &&
- (s1 = rx->startp[paren]) != -1 &&
- (t1 = rx->endp[paren]) != -1)
- {
- i = t1 - s1;
- s = rx->subbeg + s1;
- if (!rx->subbeg)
- break;
-
- getrx:
- if (i >= 0) {
- bool was_tainted;
- if (PL_tainting) {
- was_tainted = PL_tainted;
- PL_tainted = FALSE;
- }
- sv_setpvn(sv, s, i);
- if ((PL_curpm->op_pmdynflags & PMdf_UTF8) && !IN_BYTE)
- SvUTF8_on(sv);
- else
- SvUTF8_off(sv);
- if (PL_tainting)
- PL_tainted = (was_tainted || RX_MATCH_TAINTED(rx));
- break;
- }
- }
- }
- sv_setsv(sv,&PL_sv_undef);
- break;
- case '+':
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- paren = rx->lastparen;
- if (paren)
- goto getparen;
- }
- sv_setsv(sv,&PL_sv_undef);
- break;
- case '`':
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- if ((s = rx->subbeg) && rx->startp[0] != -1) {
- i = rx->startp[0];
- goto getrx;
- }
- }
- sv_setsv(sv,&PL_sv_undef);
- break;
- case '\'':
- if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
- if (rx->subbeg && rx->endp[0] != -1) {
- s = rx->subbeg + rx->endp[0];
- i = rx->sublen - rx->endp[0];
- goto getrx;
- }
- }
- sv_setsv(sv,&PL_sv_undef);
- break;
- case '.':
-#ifndef lint
- if (GvIO(PL_last_in_gv)) {
- sv_setiv(sv, (IV)IoLINES(GvIO(PL_last_in_gv)));
- }
-#endif
- break;
- case '?':
- {
- sv_setiv(sv, (IV)STATUS_CURRENT);
-#ifdef COMPLEX_STATUS
- LvTARGOFF(sv) = PL_statusvalue;
- LvTARGLEN(sv) = PL_statusvalue_vms;
-#endif
- }
- break;
- case '^':
- s = IoTOP_NAME(GvIOp(PL_defoutgv));
- if (s)
- sv_setpv(sv,s);
- else {
- sv_setpv(sv,GvENAME(PL_defoutgv));
- sv_catpv(sv,"_TOP");
- }
- break;
- case '~':
- s = IoFMT_NAME(GvIOp(PL_defoutgv));
- if (!s)
- s = GvENAME(PL_defoutgv);
- sv_setpv(sv,s);
- break;
-#ifndef lint
- case '=':
- sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
- break;
- case '-':
- sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
- break;
- case '%':
- sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
- break;
-#endif
- case ':':
- break;
- case '/':
- break;
- case '[':
- WITH_THR(sv_setiv(sv, (IV)PL_curcop->cop_arybase));
- break;
- case '|':
- sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
- break;
- case ',':
- sv_setpvn(sv,PL_ofs,PL_ofslen);
- break;
- case '\\':
- sv_setpvn(sv,PL_ors,PL_orslen);
- break;
- case '#':
- sv_setpv(sv,PL_ofmt);
- break;
- case '!':
-#ifdef VMS
- sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
- sv_setpv(sv, errno ? Strerror(errno) : "");
-#else
- {
- int saveerrno = errno;
- sv_setnv(sv, (NV)errno);
-#ifdef OS2
- if (errno == errno_isOS2 || errno == errno_isOS2_set)
- sv_setpv(sv, os2error(Perl_rc));
- else
-#endif
- sv_setpv(sv, errno ? Strerror(errno) : "");
- errno = saveerrno;
- }
-#endif
- SvNOK_on(sv); /* what a wonderful hack! */
- break;
- case '<':
- sv_setiv(sv, (IV)PL_uid);
- break;
- case '>':
- sv_setiv(sv, (IV)PL_euid);
- break;
- case '(':
- sv_setiv(sv, (IV)PL_gid);
-#ifdef HAS_GETGROUPS
- Perl_sv_setpvf(aTHX_ sv, "%"Gid_t_f, PL_gid);
-#endif
- goto add_groups;
- case ')':
- sv_setiv(sv, (IV)PL_egid);
-#ifdef HAS_GETGROUPS
- Perl_sv_setpvf(aTHX_ sv, "%"Gid_t_f, PL_egid);
-#endif
- add_groups:
-#ifdef HAS_GETGROUPS
- {
- Groups_t gary[NGROUPS];
- i = getgroups(NGROUPS,gary);
- while (--i >= 0)
- Perl_sv_catpvf(aTHX_ sv, " %"Gid_t_f, gary[i]);
- }
-#endif
- (void)SvIOK_on(sv); /* what a wonderful hack! */
- break;
- case '*':
- break;
-#ifndef MACOS_TRADITIONAL
- case '0':
- break;
-#endif
-#ifdef USE_THREADS
- case '@':
- sv_setsv(sv, thr->errsv);
- break;
-#endif /* USE_THREADS */
- }
- return 0;
-}
-
-int
-Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
-{
- struct ufuncs *uf = (struct ufuncs *)mg->mg_ptr;
-
- if (uf && uf->uf_val)
- (*uf->uf_val)(uf->uf_index, sv);
- return 0;
-}
-
-int
-Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
-{
- register char *s;
- char *ptr;
- STRLEN len, klen;
- I32 i;
-
- s = SvPV(sv,len);
- ptr = MgPV(mg,klen);
- my_setenv(ptr, s);
-
-#ifdef DYNAMIC_ENV_FETCH
- /* We just undefd an environment var. Is a replacement */
- /* waiting in the wings? */
- if (!len) {
- SV **valp;
- if ((valp = hv_fetch(GvHVn(PL_envgv), ptr, klen, FALSE)))
- s = SvPV(*valp, len);
- }
-#endif
-
-#if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) && !defined(MSDOS)
- /* And you'll never guess what the dog had */
- /* in its mouth... */
- if (PL_tainting) {
- MgTAINTEDDIR_off(mg);
-#ifdef VMS
- if (s && klen == 8 && strEQ(ptr, "DCL$PATH")) {
- char pathbuf[256], eltbuf[256], *cp, *elt = s;
- struct stat sbuf;
- int i = 0, j = 0;
-
- do { /* DCL$PATH may be a search list */
- while (1) { /* as may dev portion of any element */
- if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
- if ( *(cp+1) == '.' || *(cp+1) == '-' ||
- cando_by_name(S_IWUSR,0,elt) ) {
- MgTAINTEDDIR_on(mg);
- return 0;
- }
- }
- if ((cp = strchr(elt, ':')) != Nullch)
- *cp = '\0';
- if (my_trnlnm(elt, eltbuf, j++))
- elt = eltbuf;
- else
- break;
- }
- j = 0;
- } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
- }
-#endif /* VMS */
- if (s && klen == 4 && strEQ(ptr,"PATH")) {
- char *strend = s + len;
-
- while (s < strend) {
- char tmpbuf[256];
- struct stat st;
- s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf,
- s, strend, ':', &i);
- s++;
- if (i >= sizeof tmpbuf /* too long -- assume the worst */
- || *tmpbuf != '/'
- || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
- MgTAINTEDDIR_on(mg);
- return 0;
- }
- }
- }
- }
-#endif /* neither OS2 nor AMIGAOS nor WIN32 nor MSDOS */
-
- return 0;
-}
-
-int
-Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
-{
- STRLEN n_a;
- my_setenv(MgPV(mg,n_a),Nullch);
- return 0;
-}
-
-int
-Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
-{
-#if defined(VMS)
- Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
-#else
- if (PL_localizing) {
- HE* entry;
- STRLEN n_a;
- magic_clear_all_env(sv,mg);
- hv_iterinit((HV*)sv);
- while ((entry = hv_iternext((HV*)sv))) {
- I32 keylen;
- my_setenv(hv_iterkey(entry, &keylen),
- SvPV(hv_iterval((HV*)sv, entry), n_a));
- }
- }
-#endif
- return 0;
-}
-
-int
-Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
-{
-#if defined(VMS) || defined(EPOC)
- Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
-#else
-# ifdef PERL_IMPLICIT_SYS
- PerlEnv_clearenv();
-# else
-# ifdef WIN32
- char *envv = GetEnvironmentStrings();
- char *cur = envv;
- STRLEN len;
- while (*cur) {
- char *end = strchr(cur,'=');
- if (end && end != cur) {
- *end = '\0';
- my_setenv(cur,Nullch);
- *end = '=';
- cur = end + strlen(end+1)+2;
- }
- else if ((len = strlen(cur)))
- cur += len+1;
- }
- FreeEnvironmentStrings(envv);
-# else
-#if !defined(MACOS_TRADITIONAL)
-# ifndef PERL_USE_SAFE_PUTENV
- I32 i;
-
- if (environ == PL_origenviron)
- environ = (char**)safesysmalloc(sizeof(char*));
- else
- for (i = 0; environ[i]; i++)
- safesysfree(environ[i]);
-# endif /* PERL_USE_SAFE_PUTENV */
-
- environ[0] = Nullch;
-
-#endif /* !defined(MACOS_TRADITIONAL) */
-# endif /* WIN32 */
-# endif /* PERL_IMPLICIT_SYS */
-#endif /* VMS */
- return 0;
-}
-
-int
-Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
-{
- I32 i;
- STRLEN n_a;
- /* Are we fetching a signal entry? */
- i = whichsig(MgPV(mg,n_a));
- if (i) {
- if(PL_psig_ptr[i])
- sv_setsv(sv,PL_psig_ptr[i]);
- else {
- Sighandler_t sigstate = rsignal_state(i);
-
- /* cache state so we don't fetch it again */
- if(sigstate == SIG_IGN)
- sv_setpv(sv,"IGNORE");
- else
- sv_setsv(sv,&PL_sv_undef);
- PL_psig_ptr[i] = SvREFCNT_inc(sv);
- SvTEMP_off(sv);
- }
- }
- return 0;
-}
-int
-Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
-{
- I32 i;
- STRLEN n_a;
- /* Are we clearing a signal entry? */
- i = whichsig(MgPV(mg,n_a));
- if (i) {
- if(PL_psig_ptr[i]) {
- SvREFCNT_dec(PL_psig_ptr[i]);
- PL_psig_ptr[i]=0;
- }
- if(PL_psig_name[i]) {
- SvREFCNT_dec(PL_psig_name[i]);
- PL_psig_name[i]=0;
- }
- }
- return 0;
-}
-
-int
-Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
-{
- register char *s;
- I32 i;
- SV** svp;
- STRLEN len;
-
- s = MgPV(mg,len);
- if (*s == '_') {
- if (strEQ(s,"__DIE__"))
- svp = &PL_diehook;
- else if (strEQ(s,"__WARN__"))
- svp = &PL_warnhook;
- else
- Perl_croak(aTHX_ "No such hook: %s", s);
- i = 0;
- if (*svp) {
- SvREFCNT_dec(*svp);
- *svp = 0;
- }
- }
- else {
- i = whichsig(s); /* ...no, a brick */
- if (!i) {
- if (ckWARN(WARN_SIGNAL))
- Perl_warner(aTHX_ WARN_SIGNAL, "No such signal: SIG%s", s);
- return 0;
- }
- SvREFCNT_dec(PL_psig_name[i]);
- SvREFCNT_dec(PL_psig_ptr[i]);
- PL_psig_ptr[i] = SvREFCNT_inc(sv);
- SvTEMP_off(sv); /* Make sure it doesn't go away on us */
- PL_psig_name[i] = newSVpvn(s, len);
- SvREADONLY_on(PL_psig_name[i]);
- }
- if (SvTYPE(sv) == SVt_PVGV || SvROK(sv)) {
- if (i)
- (void)rsignal(i, PL_sighandlerp);
- else
- *svp = SvREFCNT_inc(sv);
- return 0;
- }
- s = SvPV_force(sv,len);
- if (strEQ(s,"IGNORE")) {
- if (i)
- (void)rsignal(i, SIG_IGN);
- else
- *svp = 0;
- }
- else if (strEQ(s,"DEFAULT") || !*s) {
- if (i)
- (void)rsignal(i, SIG_DFL);
- else
- *svp = 0;
- }
- else {
- /*
- * We should warn if HINT_STRICT_REFS, but without
- * access to a known hint bit in a known OP, we can't
- * tell whether HINT_STRICT_REFS is in force or not.
- */
- if (!strchr(s,':') && !strchr(s,'\''))
- sv_insert(sv, 0, 0, "main::", 6);
- if (i)
- (void)rsignal(i, PL_sighandlerp);
- else
- *svp = SvREFCNT_inc(sv);
- }
- return 0;
-}
-
-int
-Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
-{
- PL_sub_generation++;
- return 0;
-}
-
-int
-Perl_magic_setamagic(pTHX_ SV *sv, MAGIC *mg)
-{
- /* HV_badAMAGIC_on(Sv_STASH(sv)); */
- PL_amagic_generation++;
-
- return 0;
-}
-
-int
-Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
-{
- HV *hv = (HV*)LvTARG(sv);
- HE *entry;
- I32 i = 0;
-
- if (hv) {
- (void) hv_iterinit(hv);
- if (! SvTIED_mg((SV*)hv, 'P'))
- i = HvKEYS(hv);
- else {
- /*SUPPRESS 560*/
- while ((entry = hv_iternext(hv))) {
- i++;
- }
- }
- }
-
- sv_setiv(sv, (IV)i);
- return 0;
-}
-
-int
-Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
-{
- if (LvTARG(sv)) {
- hv_ksplit((HV*)LvTARG(sv), SvIV(sv));
- }
- return 0;
-}
-
-/* caller is responsible for stack switching/cleanup */
-STATIC int
-S_magic_methcall(pTHX_ SV *sv, MAGIC *mg, char *meth, I32 flags, int n, SV *val)
-{
- dSP;
-
- PUSHMARK(SP);
- EXTEND(SP, n);
- PUSHs(SvTIED_obj(sv, mg));
- if (n > 1) {
- if (mg->mg_ptr) {
- if (mg->mg_len >= 0)
- PUSHs(sv_2mortal(newSVpvn(mg->mg_ptr, mg->mg_len)));
- else if (mg->mg_len == HEf_SVKEY)
- PUSHs((SV*)mg->mg_ptr);
- }
- else if (mg->mg_type == 'p') {
- PUSHs(sv_2mortal(newSViv(mg->mg_len)));
- }
- }
- if (n > 2) {
- PUSHs(val);
- }
- PUTBACK;
-
- return call_method(meth, flags);
-}
-
-STATIC int
-S_magic_methpack(pTHX_ SV *sv, MAGIC *mg, char *meth)
-{
- dSP;
-
- ENTER;
- SAVETMPS;
- PUSHSTACKi(PERLSI_MAGIC);
-
- if (magic_methcall(sv, mg, meth, G_SCALAR, 2, NULL)) {
- sv_setsv(sv, *PL_stack_sp--);
- }
-
- POPSTACK;
- FREETMPS;
- LEAVE;
- return 0;
-}
-
-int
-Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
-{
- magic_methpack(sv,mg,"FETCH");
- if (mg->mg_ptr)
- mg->mg_flags |= MGf_GSKIP;
- return 0;
-}
-
-int
-Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
-{
- dSP;
- ENTER;
- PUSHSTACKi(PERLSI_MAGIC);
- magic_methcall(sv, mg, "STORE", G_SCALAR|G_DISCARD, 3, sv);
- POPSTACK;
- LEAVE;
- return 0;
-}
-
-int
-Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
-{
- return magic_methpack(sv,mg,"DELETE");
-}
-
-
-U32
-Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
-{
- dSP;
- U32 retval = 0;
-
- ENTER;
- SAVETMPS;
- PUSHSTACKi(PERLSI_MAGIC);
- if (magic_methcall(sv, mg, "FETCHSIZE", G_SCALAR, 2, NULL)) {
- sv = *PL_stack_sp--;
- retval = (U32) SvIV(sv)-1;
- }
- POPSTACK;
- FREETMPS;
- LEAVE;
- return retval;
-}
-
-int
-Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
-{
- dSP;
-
- ENTER;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj(sv, mg));
- PUTBACK;
- call_method("CLEAR", G_SCALAR|G_DISCARD);
- POPSTACK;
- LEAVE;
- return 0;
-}
-
-int
-Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
-{
- dSP;
- const char *meth = SvOK(key) ? "NEXTKEY" : "FIRSTKEY";
-
- ENTER;
- SAVETMPS;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP, 2);
- PUSHs(SvTIED_obj(sv, mg));
- if (SvOK(key))
- PUSHs(key);
- PUTBACK;
-
- if (call_method(meth, G_SCALAR))
- sv_setsv(key, *PL_stack_sp--);
-
- POPSTACK;
- FREETMPS;
- LEAVE;
- return 0;
-}
-
-int
-Perl_magic_existspack(pTHX_ SV *sv, MAGIC *mg)
-{
- return magic_methpack(sv,mg,"EXISTS");
-}
-
-int
-Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
-{
- OP *o;
- I32 i;
- GV* gv;
- SV** svp;
- STRLEN n_a;
-
- gv = PL_DBline;
- i = SvTRUE(sv);
- svp = av_fetch(GvAV(gv),
- atoi(MgPV(mg,n_a)), FALSE);
- if (svp && SvIOKp(*svp) && (o = INT2PTR(OP*,SvIVX(*svp))))
- o->op_private = i;
- return 0;
-}
-
-int
-Perl_magic_getarylen(pTHX_ SV *sv, MAGIC *mg)
-{
- sv_setiv(sv, AvFILL((AV*)mg->mg_obj) + PL_curcop->cop_arybase);
- return 0;
-}
-
-int
-Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
-{
- av_fill((AV*)mg->mg_obj, SvIV(sv) - PL_curcop->cop_arybase);
- return 0;
-}
-
-int
-Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
-{
- SV* lsv = LvTARG(sv);
-
- if (SvTYPE(lsv) >= SVt_PVMG && SvMAGIC(lsv)) {
- mg = mg_find(lsv, 'g');
- if (mg && mg->mg_len >= 0) {
- I32 i = mg->mg_len;
- if (DO_UTF8(lsv))
- sv_pos_b2u(lsv, &i);
- sv_setiv(sv, i + PL_curcop->cop_arybase);
- return 0;
- }
- }
- (void)SvOK_off(sv);
- return 0;
-}
-
-int
-Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
-{
- SV* lsv = LvTARG(sv);
- SSize_t pos;
- STRLEN len;
- STRLEN ulen = 0;
-
- mg = 0;
-
- if (SvTYPE(lsv) >= SVt_PVMG && SvMAGIC(lsv))
- mg = mg_find(lsv, 'g');
- if (!mg) {
- if (!SvOK(sv))
- return 0;
- sv_magic(lsv, (SV*)0, 'g', Nullch, 0);
- mg = mg_find(lsv, 'g');
- }
- else if (!SvOK(sv)) {
- mg->mg_len = -1;
- return 0;
- }
- len = SvPOK(lsv) ? SvCUR(lsv) : sv_len(lsv);
-
- pos = SvIV(sv) - PL_curcop->cop_arybase;
-
- if (DO_UTF8(lsv)) {
- ulen = sv_len_utf8(lsv);
- if (ulen)
- len = ulen;
- }
-
- if (pos < 0) {
- pos += len;
- if (pos < 0)
- pos = 0;
- }
- else if (pos > len)
- pos = len;
-
- if (ulen) {
- I32 p = pos;
- sv_pos_u2b(lsv, &p, 0);
- pos = p;
- }
-
- mg->mg_len = pos;
- mg->mg_flags &= ~MGf_MINMATCH;
-
- return 0;
-}
-
-int
-Perl_magic_getglob(pTHX_ SV *sv, MAGIC *mg)
-{
- if (SvFAKE(sv)) { /* FAKE globs can get coerced */
- SvFAKE_off(sv);
- gv_efullname3(sv,((GV*)sv), "*");
- SvFAKE_on(sv);
- }
- else
- gv_efullname3(sv,((GV*)sv), "*"); /* a gv value, be nice */
- return 0;
-}
-
-int
-Perl_magic_setglob(pTHX_ SV *sv, MAGIC *mg)
-{
- register char *s;
- GV* gv;
- STRLEN n_a;
-
- if (!SvOK(sv))
- return 0;
- s = SvPV(sv, n_a);
- if (*s == '*' && s[1])
- s++;
- gv = gv_fetchpv(s,TRUE, SVt_PVGV);
- if (sv == (SV*)gv)
- return 0;
- if (GvGP(sv))
- gp_free((GV*)sv);
- GvGP(sv) = gp_ref(GvGP(gv));
- return 0;
-}
-
-int
-Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
-{
- STRLEN len;
- SV *lsv = LvTARG(sv);
- char *tmps = SvPV(lsv,len);
- I32 offs = LvTARGOFF(sv);
- I32 rem = LvTARGLEN(sv);
-
- if (SvUTF8(lsv))
- sv_pos_u2b(lsv, &offs, &rem);
- if (offs > len)
- offs = len;
- if (rem + offs > len)
- rem = len - offs;
- sv_setpvn(sv, tmps + offs, (STRLEN)rem);
- if (SvUTF8(lsv))
- SvUTF8_on(sv);
- return 0;
-}
-
-int
-Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
-{
- STRLEN len;
- char *tmps = SvPV(sv, len);
- SV *lsv = LvTARG(sv);
- I32 lvoff = LvTARGOFF(sv);
- I32 lvlen = LvTARGLEN(sv);
-
- if (DO_UTF8(sv)) {
- sv_utf8_upgrade(lsv);
- sv_pos_u2b(lsv, &lvoff, &lvlen);
- sv_insert(lsv, lvoff, lvlen, tmps, len);
- SvUTF8_on(lsv);
- }
- else if (SvUTF8(lsv)) {
- sv_pos_u2b(lsv, &lvoff, &lvlen);
- tmps = (char*)bytes_to_utf8((U8*)tmps, &len);
- sv_insert(lsv, lvoff, lvlen, tmps, len);
- Safefree(tmps);
- }
- else
- sv_insert(lsv, lvoff, lvlen, tmps, len);
-
- return 0;
-}
-
-int
-Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
-{
- TAINT_IF((mg->mg_len & 1) ||
- ((mg->mg_len & 2) && mg->mg_obj == sv)); /* kludge */
- return 0;
-}
-
-int
-Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
-{
- if (PL_localizing) {
- if (PL_localizing == 1)
- mg->mg_len <<= 1;
- else
- mg->mg_len >>= 1;
- }
- else if (PL_tainted)
- mg->mg_len |= 1;
- else
- mg->mg_len &= ~1;
- return 0;
-}
-
-int
-Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
-{
- SV *lsv = LvTARG(sv);
-
- if (!lsv) {
- (void)SvOK_off(sv);
- return 0;
- }
-
- sv_setuv(sv, do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
- return 0;
-}
-
-int
-Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
-{
- do_vecset(sv); /* XXX slurp this routine */
- return 0;
-}
-
-int
-Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
-{
- SV *targ = Nullsv;
- if (LvTARGLEN(sv)) {
- if (mg->mg_obj) {
- SV *ahv = LvTARG(sv);
- if (SvTYPE(ahv) == SVt_PVHV) {
- HE *he = hv_fetch_ent((HV*)ahv, mg->mg_obj, FALSE, 0);
- if (he)
- targ = HeVAL(he);
- }
- else {
- SV **svp = avhv_fetch_ent((AV*)ahv, mg->mg_obj, FALSE, 0);
- if (svp)
- targ = *svp;
- }
- }
- else {
- AV* av = (AV*)LvTARG(sv);
- if ((I32)LvTARGOFF(sv) <= AvFILL(av))
- targ = AvARRAY(av)[LvTARGOFF(sv)];
- }
- if (targ && targ != &PL_sv_undef) {
- /* somebody else defined it for us */
- SvREFCNT_dec(LvTARG(sv));
- LvTARG(sv) = SvREFCNT_inc(targ);
- LvTARGLEN(sv) = 0;
- SvREFCNT_dec(mg->mg_obj);
- mg->mg_obj = Nullsv;
- mg->mg_flags &= ~MGf_REFCOUNTED;
- }
- }
- else
- targ = LvTARG(sv);
- sv_setsv(sv, targ ? targ : &PL_sv_undef);
- return 0;
-}
-
-int
-Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
-{
- if (LvTARGLEN(sv))
- vivify_defelem(sv);
- if (LvTARG(sv)) {
- sv_setsv(LvTARG(sv), sv);
- SvSETMAGIC(LvTARG(sv));
- }
- return 0;
-}
-
-void
-Perl_vivify_defelem(pTHX_ SV *sv)
-{
- MAGIC *mg;
- SV *value = Nullsv;
-
- if (!LvTARGLEN(sv) || !(mg = mg_find(sv, 'y')))
- return;
- if (mg->mg_obj) {
- SV *ahv = LvTARG(sv);
- STRLEN n_a;
- if (SvTYPE(ahv) == SVt_PVHV) {
- HE *he = hv_fetch_ent((HV*)ahv, mg->mg_obj, TRUE, 0);
- if (he)
- value = HeVAL(he);
- }
- else {
- SV **svp = avhv_fetch_ent((AV*)ahv, mg->mg_obj, TRUE, 0);
- if (svp)
- value = *svp;
- }
- if (!value || value == &PL_sv_undef)
- Perl_croak(aTHX_ PL_no_helem, SvPV(mg->mg_obj, n_a));
- }
- else {
- AV* av = (AV*)LvTARG(sv);
- if ((I32)LvTARGLEN(sv) < 0 && (I32)LvTARGOFF(sv) > AvFILL(av))
- LvTARG(sv) = Nullsv; /* array can't be extended */
- else {
- SV** svp = av_fetch(av, LvTARGOFF(sv), TRUE);
- if (!svp || (value = *svp) == &PL_sv_undef)
- Perl_croak(aTHX_ PL_no_aelem, (I32)LvTARGOFF(sv));
- }
- }
- (void)SvREFCNT_inc(value);
- SvREFCNT_dec(LvTARG(sv));
- LvTARG(sv) = value;
- LvTARGLEN(sv) = 0;
- SvREFCNT_dec(mg->mg_obj);
- mg->mg_obj = Nullsv;
- mg->mg_flags &= ~MGf_REFCOUNTED;
-}
-
-int
-Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
-{
- AV *av = (AV*)mg->mg_obj;
- SV **svp = AvARRAY(av);
- I32 i = AvFILLp(av);
- while (i >= 0) {
- if (svp[i] && svp[i] != &PL_sv_undef) {
- if (!SvWEAKREF(svp[i]))
- Perl_croak(aTHX_ "panic: magic_killbackrefs");
- /* XXX Should we check that it hasn't changed? */
- SvRV(svp[i]) = 0;
- (void)SvOK_off(svp[i]);
- SvWEAKREF_off(svp[i]);
- svp[i] = &PL_sv_undef;
- }
- i--;
- }
- return 0;
-}
-
-int
-Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
-{
- mg->mg_len = -1;
- SvSCREAM_off(sv);
- return 0;
-}
-
-int
-Perl_magic_setbm(pTHX_ SV *sv, MAGIC *mg)
-{
- sv_unmagic(sv, 'B');
- SvVALID_off(sv);
- return 0;
-}
-
-int
-Perl_magic_setfm(pTHX_ SV *sv, MAGIC *mg)
-{
- sv_unmagic(sv, 'f');
- SvCOMPILED_off(sv);
- return 0;
-}
-
-int
-Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
-{
- struct ufuncs *uf = (struct ufuncs *)mg->mg_ptr;
-
- if (uf && uf->uf_set)
- (*uf->uf_set)(uf->uf_index, sv);
- return 0;
-}
-
-int
-Perl_magic_freeregexp(pTHX_ SV *sv, MAGIC *mg)
-{
- regexp *re = (regexp *)mg->mg_obj;
- ReREFCNT_dec(re);
- return 0;
-}
-
-#ifdef USE_LOCALE_COLLATE
-int
-Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
-{
- /*
- * RenE<eacute> Descartes said "I think not."
- * and vanished with a faint plop.
- */
- if (mg->mg_ptr) {
- Safefree(mg->mg_ptr);
- mg->mg_ptr = NULL;
- mg->mg_len = -1;
- }
- return 0;
-}
-#endif /* USE_LOCALE_COLLATE */
-
-int
-Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
-{
- register char *s;
- I32 i;
- STRLEN len;
- switch (*mg->mg_ptr) {
- case '\001': /* ^A */
- sv_setsv(PL_bodytarget, sv);
- break;
- case '\003': /* ^C */
- PL_minus_c = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- break;
-
- case '\004': /* ^D */
- PL_debug = (SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)) | 0x80000000;
- DEBUG_x(dump_all());
- break;
- case '\005': /* ^E */
-#ifdef MACOS_TRADITIONAL
- gMacPerl_OSErr = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
-#else
-# ifdef VMS
- set_vaxc_errno(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
-# else
-# ifdef WIN32
- SetLastError( SvIV(sv) );
-# else
-# ifndef OS2
- /* will anyone ever use this? */
- SETERRNO(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv), 4);
-# endif
-# endif
-# endif
-#endif
- break;
- case '\006': /* ^F */
- PL_maxsysfd = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- break;
- case '\010': /* ^H */
- PL_hints = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- break;
- case '\011': /* ^I */ /* NOT \t in EBCDIC */
- if (PL_inplace)
- Safefree(PL_inplace);
- if (SvOK(sv))
- PL_inplace = savepv(SvPV(sv,len));
- else
- PL_inplace = Nullch;
- break;
- case '\017': /* ^O */
- if (PL_osname)
- Safefree(PL_osname);
- if (SvOK(sv))
- PL_osname = savepv(SvPV(sv,len));
- else
- PL_osname = Nullch;
- break;
- case '\020': /* ^P */
- PL_perldb = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- if (PL_perldb && !PL_DBsingle)
- init_debugger();
- break;
- case '\024': /* ^T */
-#ifdef BIG_TIME
- PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
-#else
- PL_basetime = (Time_t)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
-#endif
- break;
- case '\027': /* ^W & $^WARNING_BITS & ^WIDE_SYSTEM_CALLS */
- if (*(mg->mg_ptr+1) == '\0') {
- if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
- i = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- PL_dowarn = (PL_dowarn & ~G_WARN_ON)
- | (i ? G_WARN_ON : G_WARN_OFF) ;
- }
- }
- else if (strEQ(mg->mg_ptr, "\027ARNING_BITS")) {
- if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
- if (!SvPOK(sv) && PL_localizing) {
- sv_setpvn(sv, WARN_NONEstring, WARNsize);
- PL_compiling.cop_warnings = pWARN_NONE;
- break;
- }
- {
- STRLEN len, i;
- int accumulate = 0 ;
- int any_fatals = 0 ;
- char * ptr = (char*)SvPV(sv, len) ;
- for (i = 0 ; i < len ; ++i) {
- accumulate |= ptr[i] ;
- any_fatals |= (ptr[i] & 0xAA) ;
- }
- if (!accumulate)
- PL_compiling.cop_warnings = pWARN_NONE;
- else if (isWARN_on(sv, WARN_ALL) && !any_fatals) {
- PL_compiling.cop_warnings = pWARN_ALL;
- PL_dowarn |= G_WARN_ONCE ;
- }
- else {
- if (specialWARN(PL_compiling.cop_warnings))
- PL_compiling.cop_warnings = newSVsv(sv) ;
- else
- sv_setsv(PL_compiling.cop_warnings, sv);
- if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
- PL_dowarn |= G_WARN_ONCE ;
- }
-
- }
- }
- }
- else if (strEQ(mg->mg_ptr, "\027IDE_SYSTEM_CALLS"))
- PL_widesyscalls = SvTRUE(sv);
- break;
- case '.':
- if (PL_localizing) {
- if (PL_localizing == 1)
- SAVESPTR(PL_last_in_gv);
- }
- else if (SvOK(sv) && GvIO(PL_last_in_gv))
- IoLINES(GvIOp(PL_last_in_gv)) = (long)SvIV(sv);
- break;
- case '^':
- Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
- IoTOP_NAME(GvIOp(PL_defoutgv)) = s = savepv(SvPV(sv,len));
- IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchpv(s,TRUE, SVt_PVIO);
- break;
- case '~':
- Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
- IoFMT_NAME(GvIOp(PL_defoutgv)) = s = savepv(SvPV(sv,len));
- IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchpv(s,TRUE, SVt_PVIO);
- break;
- case '=':
- IoPAGE_LEN(GvIOp(PL_defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
- break;
- case '-':
- IoLINES_LEFT(GvIOp(PL_defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
- if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
- IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
- break;
- case '%':
- IoPAGE(GvIOp(PL_defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
- break;
- case '|':
- {
- IO *io = GvIOp(PL_defoutgv);
- if ((SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)) == 0)
- IoFLAGS(io) &= ~IOf_FLUSH;
- else {
- if (!(IoFLAGS(io) & IOf_FLUSH)) {
- PerlIO *ofp = IoOFP(io);
- if (ofp)
- (void)PerlIO_flush(ofp);
- IoFLAGS(io) |= IOf_FLUSH;
- }
- }
- }
- break;
- case '*':
- i = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- PL_multiline = (i != 0);
- break;
- case '/':
- SvREFCNT_dec(PL_nrs);
- PL_nrs = newSVsv(sv);
- SvREFCNT_dec(PL_rs);
- PL_rs = SvREFCNT_inc(PL_nrs);
- break;
- case '\\':
- if (PL_ors)
- Safefree(PL_ors);
- if (SvOK(sv) || SvGMAGICAL(sv)) {
- s = SvPV(sv,PL_orslen);
- PL_ors = savepvn(s,PL_orslen);
- }
- else {
- PL_ors = Nullch;
- PL_orslen = 0;
- }
- break;
- case ',':
- if (PL_ofs)
- Safefree(PL_ofs);
- PL_ofs = savepv(SvPV(sv, PL_ofslen));
- break;
- case '#':
- if (PL_ofmt)
- Safefree(PL_ofmt);
- PL_ofmt = savepv(SvPV(sv,len));
- break;
- case '[':
- PL_compiling.cop_arybase = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- break;
- case '?':
-#ifdef COMPLEX_STATUS
- if (PL_localizing == 2) {
- PL_statusvalue = LvTARGOFF(sv);
- PL_statusvalue_vms = LvTARGLEN(sv);
- }
- else
-#endif
-#ifdef VMSISH_STATUS
- if (VMSISH_STATUS)
- STATUS_NATIVE_SET((U32)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)));
- else
-#endif
- STATUS_POSIX_SET(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
- break;
- case '!':
- SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
- (SvIV(sv) == EVMSERR) ? 4 : vaxc$errno);
- break;
- case '<':
- PL_uid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- if (PL_delaymagic) {
- PL_delaymagic |= DM_RUID;
- break; /* don't do magic till later */
- }
-#ifdef HAS_SETRUID
- (void)setruid((Uid_t)PL_uid);
-#else
-#ifdef HAS_SETREUID
- (void)setreuid((Uid_t)PL_uid, (Uid_t)-1);
-#else
-#ifdef HAS_SETRESUID
- (void)setresuid((Uid_t)PL_uid, (Uid_t)-1, (Uid_t)-1);
-#else
- if (PL_uid == PL_euid) /* special case $< = $> */
- (void)PerlProc_setuid(PL_uid);
- else {
- PL_uid = PerlProc_getuid();
- Perl_croak(aTHX_ "setruid() not implemented");
- }
-#endif
-#endif
-#endif
- PL_uid = PerlProc_getuid();
- PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
- break;
- case '>':
- PL_euid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- if (PL_delaymagic) {
- PL_delaymagic |= DM_EUID;
- break; /* don't do magic till later */
- }
-#ifdef HAS_SETEUID
- (void)seteuid((Uid_t)PL_euid);
-#else
-#ifdef HAS_SETREUID
- (void)setreuid((Uid_t)-1, (Uid_t)PL_euid);
-#else
-#ifdef HAS_SETRESUID
- (void)setresuid((Uid_t)-1, (Uid_t)PL_euid, (Uid_t)-1);
-#else
- if (PL_euid == PL_uid) /* special case $> = $< */
- PerlProc_setuid(PL_euid);
- else {
- PL_euid = PerlProc_geteuid();
- Perl_croak(aTHX_ "seteuid() not implemented");
- }
-#endif
-#endif
-#endif
- PL_euid = PerlProc_geteuid();
- PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
- break;
- case '(':
- PL_gid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
- if (PL_delaymagic) {
- PL_delaymagic |= DM_RGID;
- break; /* don't do magic till later */
- }
-#ifdef HAS_SETRGID
- (void)setrgid((Gid_t)PL_gid);
-#else
-#ifdef HAS_SETREGID
- (void)setregid((Gid_t)PL_gid, (Gid_t)-1);
-#else
-#ifdef HAS_SETRESGID
- (void)setresgid((Gid_t)PL_gid, (Gid_t)-1, (Gid_t) 1);
-#else
- if (PL_gid == PL_egid) /* special case $( = $) */
- (void)PerlProc_setgid(PL_gid);
- else {
- PL_gid = PerlProc_getgid();
- Perl_croak(aTHX_ "setrgid() not implemented");
- }
-#endif
-#endif
-#endif
- PL_gid = PerlProc_getgid();
- PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
- break;
- case ')':
-#ifdef HAS_SETGROUPS
- {
- char *p = SvPV(sv, len);
- Groups_t gary[NGROUPS];
-
- while (isSPACE(*p))
- ++p;
- PL_egid = Atol(p);
- for (i = 0; i < NGROUPS; ++i) {
- while (*p && !isSPACE(*p))
- ++p;
- while (isSPACE(*p))
- ++p;
- if (!*p)
- break;
- gary[i] = Atol(p);
- }
- if (i)
- (void)setgroups(i, gary);
- }
-#else /* HAS_SETGROUPS */
- PL_egid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
-#endif /* HAS_SETGROUPS */
- if (PL_delaymagic) {
- PL_delaymagic |= DM_EGID;
- break; /* don't do magic till later */
- }
-#ifdef HAS_SETEGID
- (void)setegid((Gid_t)PL_egid);
-#else
-#ifdef HAS_SETREGID
- (void)setregid((Gid_t)-1, (Gid_t)PL_egid);
-#else
-#ifdef HAS_SETRESGID
- (void)setresgid((Gid_t)-1, (Gid_t)PL_egid, (Gid_t)-1);
-#else
- if (PL_egid == PL_gid) /* special case $) = $( */
- (void)PerlProc_setgid(PL_egid);
- else {
- PL_egid = PerlProc_getegid();
- Perl_croak(aTHX_ "setegid() not implemented");
- }
-#endif
-#endif
-#endif
- PL_egid = PerlProc_getegid();
- PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
- break;
- case ':':
- PL_chopset = SvPV_force(sv,len);
- break;
-#ifndef MACOS_TRADITIONAL
- case '0':
-#ifdef HAS_SETPROCTITLE
- /* The BSDs don't show the argv[] in ps(1) output, they
- * show a string from the process struct and provide
- * the setproctitle() routine to manipulate that. */
- {
- s = SvPV(sv, len);
-# if __FreeBSD_version >= 410001
- /* The leading "-" removes the "perl: " prefix,
- * but not the "(perl) suffix from the ps(1)
- * output, because that's what ps(1) shows if the
- * argv[] is modified. */
- setproctitle("-%s", s, len + 1);
-# else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
- /* This doesn't really work if you assume that
- * $0 = 'foobar'; will wipe out 'perl' from the $0
- * because in ps(1) output the result will be like
- * sprintf("perl: %s (perl)", s)
- * I guess this is a security feature:
- * one (a user process) cannot get rid of the original name.
- * --jhi */
- setproctitle("%s", s);
-# endif
- }
-#endif
- if (!PL_origalen) {
- s = PL_origargv[0];
- s += strlen(s);
- /* See if all the arguments are contiguous in memory */
- for (i = 1; i < PL_origargc; i++) {
- if (PL_origargv[i] == s + 1
-#ifdef OS2
- || PL_origargv[i] == s + 2
-#endif
- )
- {
- ++s;
- s += strlen(s); /* this one is ok too */
- }
- else
- break;
- }
- /* can grab env area too? */
- if (PL_origenviron && (PL_origenviron[0] == s + 1
-#ifdef OS2
- || (PL_origenviron[0] == s + 9 && (s += 8))
-#endif
- )) {
- my_setenv("NoNe SuCh", Nullch);
- /* force copy of environment */
- for (i = 0; PL_origenviron[i]; i++)
- if (PL_origenviron[i] == s + 1) {
- ++s;
- s += strlen(s);
- }
- else
- break;
- }
- PL_origalen = s - PL_origargv[0];
- }
- s = SvPV_force(sv,len);
- i = len;
- if (i >= PL_origalen) {
- i = PL_origalen;
- /* don't allow system to limit $0 seen by script */
- /* SvCUR_set(sv, i); *SvEND(sv) = '\0'; */
- Copy(s, PL_origargv[0], i, char);
- s = PL_origargv[0]+i;
- *s = '\0';
- }
- else {
- Copy(s, PL_origargv[0], i, char);
- s = PL_origargv[0]+i;
- *s++ = '\0';
- while (++i < PL_origalen)
- *s++ = ' ';
- s = PL_origargv[0]+i;
- for (i = 1; i < PL_origargc; i++)
- PL_origargv[i] = Nullch;
- }
- break;
-#endif
-#ifdef USE_THREADS
- case '@':
- sv_setsv(thr->errsv, sv);
- break;
-#endif /* USE_THREADS */
- }
- return 0;
-}
-
-#ifdef USE_THREADS
-int
-Perl_magic_mutexfree(pTHX_ SV *sv, MAGIC *mg)
-{
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf": magic_mutexfree 0x%"UVxf"\n",
- PTR2UV(thr), PTR2UV(sv));)
- if (MgOWNER(mg))
- Perl_croak(aTHX_ "panic: magic_mutexfree");
- MUTEX_DESTROY(MgMUTEXP(mg));
- COND_DESTROY(MgCONDP(mg));
- return 0;
-}
-#endif /* USE_THREADS */
-
-I32
-Perl_whichsig(pTHX_ char *sig)
-{
- register char **sigv;
-
- for (sigv = PL_sig_name+1; *sigv; sigv++)
- if (strEQ(sig,*sigv))
- return PL_sig_num[sigv - PL_sig_name];
-#ifdef SIGCLD
- if (strEQ(sig,"CHLD"))
- return SIGCLD;
-#endif
-#ifdef SIGCHLD
- if (strEQ(sig,"CLD"))
- return SIGCHLD;
-#endif
- return 0;
-}
-
-static SV* sig_sv;
-
-Signal_t
-Perl_sighandler(int sig)
-{
-#if defined(WIN32) && defined(PERL_IMPLICIT_CONTEXT)
- dTHXoa(PL_curinterp); /* fake TLS, because signals don't do TLS */
-#else
- dTHX;
-#endif
- dSP;
- GV *gv = Nullgv;
- HV *st;
- SV *sv, *tSv = PL_Sv;
- CV *cv = Nullcv;
- OP *myop = PL_op;
- U32 flags = 0;
- I32 o_save_i = PL_savestack_ix;
- XPV *tXpv = PL_Xpv;
-
-#if defined(WIN32) && defined(PERL_IMPLICIT_CONTEXT)
- PERL_SET_THX(aTHXo); /* fake TLS, see above */
-#endif
-
- if (PL_savestack_ix + 15 <= PL_savestack_max)
- flags |= 1;
- if (PL_markstack_ptr < PL_markstack_max - 2)
- flags |= 4;
- if (PL_retstack_ix < PL_retstack_max - 2)
- flags |= 8;
- if (PL_scopestack_ix < PL_scopestack_max - 3)
- flags |= 16;
-
- if (!PL_psig_ptr[sig])
- Perl_die(aTHX_ "Signal SIG%s received, but no signal handler set.\n",
- PL_sig_name[sig]);
-
- /* Max number of items pushed there is 3*n or 4. We cannot fix
- infinity, so we fix 4 (in fact 5): */
- if (flags & 1) {
- PL_savestack_ix += 5; /* Protect save in progress. */
- o_save_i = PL_savestack_ix;
- SAVEDESTRUCTOR_X(unwind_handler_stack, (void*)&flags);
- }
- if (flags & 4)
- PL_markstack_ptr++; /* Protect mark. */
- if (flags & 8) {
- PL_retstack_ix++;
- PL_retstack[PL_retstack_ix] = NULL;
- }
- if (flags & 16)
- PL_scopestack_ix += 1;
- /* sv_2cv is too complicated, try a simpler variant first: */
- if (!SvROK(PL_psig_ptr[sig]) || !(cv = (CV*)SvRV(PL_psig_ptr[sig]))
- || SvTYPE(cv) != SVt_PVCV)
- cv = sv_2cv(PL_psig_ptr[sig],&st,&gv,TRUE);
-
- if (!cv || !CvROOT(cv)) {
- if (ckWARN(WARN_SIGNAL))
- Perl_warner(aTHX_ WARN_SIGNAL, "SIG%s handler \"%s\" not defined.\n",
- PL_sig_name[sig], (gv ? GvENAME(gv)
- : ((cv && CvGV(cv))
- ? GvENAME(CvGV(cv))
- : "__ANON__")));
- goto cleanup;
- }
-
- if(PL_psig_name[sig]) {
- sv = SvREFCNT_inc(PL_psig_name[sig]);
- flags |= 64;
- sig_sv = sv;
- } else {
- sv = sv_newmortal();
- sv_setpv(sv,PL_sig_name[sig]);
- }
-
- PUSHSTACKi(PERLSI_SIGNAL);
- PUSHMARK(SP);
- PUSHs(sv);
- PUTBACK;
-
- call_sv((SV*)cv, G_DISCARD);
-
- POPSTACK;
-cleanup:
- if (flags & 1)
- PL_savestack_ix -= 8; /* Unprotect save in progress. */
- if (flags & 4)
- PL_markstack_ptr--;
- if (flags & 8)
- PL_retstack_ix--;
- if (flags & 16)
- PL_scopestack_ix -= 1;
- if (flags & 64)
- SvREFCNT_dec(sv);
- PL_op = myop; /* Apparently not needed... */
-
- PL_Sv = tSv; /* Restore global temporaries. */
- PL_Xpv = tXpv;
- return;
-}
-
-
-#ifdef PERL_OBJECT
-#include "XSUB.h"
-#endif
-
-static void
-restore_magic(pTHXo_ void *p)
-{
- MGS* mgs = SSPTR(PTR2IV(p), MGS*);
- SV* sv = mgs->mgs_sv;
-
- if (!sv)
- return;
-
- if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
- {
- if (mgs->mgs_flags)
- SvFLAGS(sv) |= mgs->mgs_flags;
- else
- mg_magical(sv);
- if (SvGMAGICAL(sv))
- SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
- }
-
- mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
-
- /* If we're still on top of the stack, pop us off. (That condition
- * will be satisfied if restore_magic was called explicitly, but *not*
- * if it's being called via leave_scope.)
- * The reason for doing this is that otherwise, things like sv_2cv()
- * may leave alloc gunk on the savestack, and some code
- * (e.g. sighandler) doesn't expect that...
- */
- if (PL_savestack_ix == mgs->mgs_ss_ix)
- {
- I32 popval = SSPOPINT;
- assert(popval == SAVEt_DESTRUCTOR_X);
- PL_savestack_ix -= 2;
- popval = SSPOPINT;
- assert(popval == SAVEt_ALLOC);
- popval = SSPOPINT;
- PL_savestack_ix -= popval;
- }
-
-}
-
-static void
-unwind_handler_stack(pTHXo_ void *p)
-{
- U32 flags = *(U32*)p;
-
- if (flags & 1)
- PL_savestack_ix -= 5; /* Unprotect save in progress. */
- /* cxstack_ix-- Not needed, die already unwound it. */
- if (flags & 64)
- SvREFCNT_dec(sig_sv);
-}
diff --git a/contrib/perl5/mg.h b/contrib/perl5/mg.h
deleted file mode 100644
index 0048803..0000000
--- a/contrib/perl5/mg.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* mg.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-#ifdef STRUCT_MGVTBL_DEFINITION
-STRUCT_MGVTBL_DEFINITION;
-#else
-struct mgvtbl {
- int (CPERLscope(*svt_get)) (pTHX_ SV *sv, MAGIC* mg);
- int (CPERLscope(*svt_set)) (pTHX_ SV *sv, MAGIC* mg);
- U32 (CPERLscope(*svt_len)) (pTHX_ SV *sv, MAGIC* mg);
- int (CPERLscope(*svt_clear))(pTHX_ SV *sv, MAGIC* mg);
- int (CPERLscope(*svt_free)) (pTHX_ SV *sv, MAGIC* mg);
-};
-#endif
-
-struct magic {
- MAGIC* mg_moremagic;
- MGVTBL* mg_virtual; /* pointer to magic functions */
- U16 mg_private;
- char mg_type;
- U8 mg_flags;
- SV* mg_obj;
- char* mg_ptr;
- I32 mg_len;
-};
-
-#define MGf_TAINTEDDIR 1
-#define MGf_REFCOUNTED 2
-#define MGf_GSKIP 4
-
-#define MGf_MINMATCH 1
-
-#define MgTAINTEDDIR(mg) (mg->mg_flags & MGf_TAINTEDDIR)
-#define MgTAINTEDDIR_on(mg) (mg->mg_flags |= MGf_TAINTEDDIR)
-#define MgTAINTEDDIR_off(mg) (mg->mg_flags &= ~MGf_TAINTEDDIR)
-
-#define MgPV(mg,lp) ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \
- SvPV((SV*)((mg)->mg_ptr),lp) : \
- (mg)->mg_ptr)
-
-#define SvTIED_mg(sv,how) \
- (SvRMAGICAL(sv) ? mg_find((sv),(how)) : Null(MAGIC*))
-#define SvTIED_obj(sv,mg) \
- ((mg)->mg_obj ? (mg)->mg_obj : sv_2mortal(newRV(sv)))
diff --git a/contrib/perl5/minimod.pl b/contrib/perl5/minimod.pl
deleted file mode 100644
index 18b9c07..0000000
--- a/contrib/perl5/minimod.pl
+++ /dev/null
@@ -1,139 +0,0 @@
-# minimod.PL writes the contents of miniperlmain.c into the module
-# ExtUtils::Miniperl for later perusal (when the perl source is
-# deleted)
-#
-# It also writes the subroutine writemain(), which takes as its
-# arguments module names that shall be statically linked into perl.
-#
-# Authors: Andreas Koenig <k@franz.ww.TU-Berlin.DE>, Tim Bunce
-# <Tim.Bunce@ig.co.uk>
-#
-# Version 1.0, Feb 2nd 1995 by Andreas Koenig
-
-print <<'END';
-# This File keeps the contents of miniperlmain.c.
-#
-# It was generated automatically by minimod.PL from the contents
-# of miniperlmain.c. Don't edit this file!
-#
-# ANY CHANGES MADE HERE WILL BE LOST!
-#
-
-
-package ExtUtils::Miniperl;
-require Exporter;
-@ISA = qw(Exporter);
-@EXPORT = qw(&writemain);
-
-$head= <<'EOF!HEAD';
-END
-
-open MINI, "miniperlmain.c";
-while (<MINI>) {
- last if /Do not delete this line--writemain depends on it/;
- print;
-}
-
-print <<'END';
-EOF!HEAD
-$tail=<<'EOF!TAIL';
-END
-
-while (<MINI>) {
- print unless /dXSUB_SYS/;
-}
-close MINI;
-
-print <<'END';
-EOF!TAIL
-
-sub writemain{
- my(@exts) = @_;
-
- my($pname);
- my($dl) = canon('/','DynaLoader');
- print $head;
-
- foreach $_ (@exts){
- my($pname) = canon('/', $_);
- my($mname, $cname);
- ($mname = $pname) =~ s!/!::!g;
- ($cname = $pname) =~ s!/!__!g;
- print "EXTERN_C void boot_${cname} (pTHX_ CV* cv);\n";
- }
-
- my ($tail1,$tail2) = ( $tail =~ /\A(.*\n)(\s*\}.*)\Z/s );
- print $tail1;
-
- print "\tchar *file = __FILE__;\n";
- print "\tdXSUB_SYS;\n" if $] > 5.002;
-
- foreach $_ (@exts){
- my($pname) = canon('/', $_);
- my($mname, $cname, $ccode);
- ($mname = $pname) =~ s!/!::!g;
- ($cname = $pname) =~ s!/!__!g;
- print "\t{\n";
- if ($pname eq $dl){
- # Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
- # boot_DynaLoader is called directly in DynaLoader.pm
- $ccode = "\t/* DynaLoader is a special case */\n
-\tnewXS(\"${mname}::boot_${cname}\", boot_${cname}, file);\n";
- print $ccode unless $SEEN{$ccode}++;
- } else {
- $ccode = "\tnewXS(\"${mname}::bootstrap\", boot_${cname}, file);\n";
- print $ccode unless $SEEN{$ccode}++;
- }
- print "\t}\n";
- }
- print $tail2;
-}
-
-sub canon{
- my($as, @ext) = @_;
- foreach(@ext){
- # might be X::Y or lib/auto/X/Y/Y.a
- next if s!::!/!g;
- s:^(lib|ext)/(auto/)?::;
- s:/\w+\.\w+$::;
- }
- grep(s:/:$as:, @ext) if ($as ne '/');
- @ext;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-ExtUtils::Miniperl, writemain - write the C code for perlmain.c
-
-=head1 SYNOPSIS
-
-C<use ExtUtils::Miniperl;>
-
-C<writemain(@directories);>
-
-=head1 DESCRIPTION
-
-This whole module is written when perl itself is built from a script
-called minimod.PL. In case you want to patch it, please patch
-minimod.PL in the perl distribution instead.
-
-writemain() takes an argument list of directories containing archive
-libraries that relate to perl modules and should be linked into a new
-perl binary. It writes to STDOUT a corresponding perlmain.c file that
-is a plain C file containing all the bootstrap code to make the
-modules associated with the libraries available from within perl.
-
-The typical usage is from within a Makefile generated by
-ExtUtils::MakeMaker. So under normal circumstances you won't have to
-deal with this module directly.
-
-=head1 SEE ALSO
-
-L<ExtUtils::MakeMaker>
-
-=cut
-
-END
diff --git a/contrib/perl5/miniperlmain.c b/contrib/perl5/miniperlmain.c
deleted file mode 100644
index d1b3e8e..0000000
--- a/contrib/perl5/miniperlmain.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * "The Road goes ever on and on, down from the door where it began."
- */
-
-#ifdef OEMVS
-#pragma runopts(HEAP(1M,32K,ANYWHERE,KEEP,8K,4K))
-#endif
-
-
-#include "EXTERN.h"
-#define PERL_IN_MINIPERLMAIN_C
-#include "perl.h"
-
-static void xs_init (pTHX);
-static PerlInterpreter *my_perl;
-
-#if defined (__MINT__) || defined (atarist)
-/* The Atari operating system doesn't have a dynamic stack. The
- stack size is determined from this value. */
-long _stksize = 64 * 1024;
-#endif
-
-int
-main(int argc, char **argv, char **env)
-{
- int exitstatus;
-
-#ifdef PERL_GLOBAL_STRUCT
-#define PERLVAR(var,type) /**/
-#define PERLVARA(var,type) /**/
-#define PERLVARI(var,type,init) PL_Vars.var = init;
-#define PERLVARIC(var,type,init) PL_Vars.var = init;
-#include "perlvars.h"
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#endif
-
- PERL_SYS_INIT3(&argc,&argv,&env);
-
- if (!PL_do_undump) {
- my_perl = perl_alloc();
- if (!my_perl)
- exit(1);
- perl_construct(my_perl);
- PL_perl_destruct_level = 0;
- }
-
- exitstatus = perl_parse(my_perl, xs_init, argc, argv, (char **)NULL);
- if (!exitstatus) {
- exitstatus = perl_run(my_perl);
- }
-
- perl_destruct(my_perl);
- perl_free(my_perl);
-
- PERL_SYS_TERM();
-
- exit(exitstatus);
- return exitstatus;
-}
-
-/* Register any extra external extensions */
-
-/* Do not delete this line--writemain depends on it */
-
-static void
-xs_init(pTHX)
-{
- dXSUB_SYS;
-}
diff --git a/contrib/perl5/mv-if-diff b/contrib/perl5/mv-if-diff
deleted file mode 100644
index 4a85b98..0000000
--- a/contrib/perl5/mv-if-diff
+++ /dev/null
@@ -1,15 +0,0 @@
-: mv-if-diff file1 file2
-: move file1 to file2 if file1 and file2 are different.
-
-if test $# -lt 2 ; then
- echo "usage: $0 file1 file2"
- echo "move file1 to file2 if file1 and file2 are different."
- exit 1
-fi
-if cmp $1 $2 >/dev/null 2>&1; then
- echo "File $2 not changed."
- rm -f $1
-else
- rm -f $2
- mv $1 $2
-fi
diff --git a/contrib/perl5/myconfig.SH b/contrib/perl5/myconfig.SH
deleted file mode 100755
index e80dfb5..0000000
--- a/contrib/perl5/myconfig.SH
+++ /dev/null
@@ -1,61 +0,0 @@
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find the perl config.sh file produced by Configure";
- exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-echo "Extracting myconfig (with variable substitutions)"
-$spitshell >myconfig <<!GROK!THIS!
-$startsh
-
-# This script is designed to provide a handy summary of the configuration
-# information being used to build perl. This is especially useful if you
-# are requesting help from comp.lang.perl.misc on usenet or via mail.
-
-# Note that the text lines /^Summary of/ .. /^\s*$/ are copied into Config.pm.
-cat <<'!NO!SUBS!'
-Summary of my $package (revision $baserev version $PERL_VERSION subversion $PERL_SUBVERSION) configuration:
- Platform:
- osname=$osname, osvers=$osvers, archname=$archname
- uname='$myuname'
- config_args='$config_args'
- hint=$hint, useposix=$useposix, d_sigaction=$d_sigaction
- usethreads=$usethreads use5005threads=$use5005threads useithreads=$useithreads usemultiplicity=$usemultiplicity
- useperlio=$useperlio d_sfio=$d_sfio uselargefiles=$uselargefiles usesocks=$usesocks
- use64bitint=$use64bitint use64bitall=$use64bitall uselongdouble=$uselongdouble
- Compiler:
- cc='$cc', ccflags ='$ccflags',
- optimize='$optimize',
- cppflags='$cppflags'
- ccversion='$ccversion', gccversion='$gccversion', gccosandvers='$gccosandvers'
- intsize=$intsize, longsize=$longsize, ptrsize=$ptrsize, doublesize=$doublesize, byteorder=$byteorder
- d_longlong=$d_longlong, longlongsize=$longlongsize, d_longdbl=$d_longdbl, longdblsize=$longdblsize
- ivtype='$ivtype', ivsize=$ivsize, nvtype='$nvtype', nvsize=$nvsize, Off_t='$lseektype', lseeksize=$lseeksize
- alignbytes=$alignbytes, usemymalloc=$usemymalloc, prototype=$prototype
- Linker and Libraries:
- ld='$ld', ldflags ='$ldflags'
- libpth=$libpth
- libs=$libs
- perllibs=$perllibs
- libc=$libc, so=$so, useshrplib=$useshrplib, libperl=$libperl
- Dynamic Linking:
- dlsrc=$dlsrc, dlext=$dlext, d_dlsymun=$d_dlsymun, ccdlflags='$ccdlflags'
- cccdlflags='$cccdlflags', lddlflags='$lddlflags'
-
-!NO!SUBS!
-!GROK!THIS!
-chmod 755 myconfig
-$eunicefix myconfig
diff --git a/contrib/perl5/nostdio.h b/contrib/perl5/nostdio.h
deleted file mode 100644
index 256a638..0000000
--- a/contrib/perl5/nostdio.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* This is an 1st attempt to stop other include files pulling
- in real <stdio.h>.
- A more ambitious set of possible symbols can be found in
- sfio.h (inside an _cplusplus gard).
-*/
-#if !defined(_STDIO_H) && !defined(FILE) && !defined(_STDIO_INCLUDED) && !defined(__STDIO_LOADED)
-#define _STDIO_H
-#define _STDIO_INCLUDED
-#define __STDIO_LOADED
-struct _FILE;
-#define FILE struct _FILE
-#endif
-
-#define _CANNOT "CANNOT"
-
-#undef stdin
-#undef stdout
-#undef stderr
-#undef getc
-#undef putc
-#undef clearerr
-#undef fflush
-#undef feof
-#undef ferror
-#undef fileno
-
diff --git a/contrib/perl5/objXSUB.h b/contrib/perl5/objXSUB.h
deleted file mode 100644
index d4ba2a2..0000000
--- a/contrib/perl5/objXSUB.h
+++ /dev/null
@@ -1,2333 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-#ifndef __objXSUB_h__
-#define __objXSUB_h__
-
-/* method calls via pPerl (static functions without a "this" pointer need these) */
-
-#if defined(PERL_CORE) && defined(PERL_OBJECT)
-
-/* XXX soon to be eliminated, only a few things in PERLCORE need these now */
-
-#if defined(PERL_IMPLICIT_SYS)
-#endif
-#if defined(USE_ITHREADS)
-# if defined(PERL_IMPLICIT_SYS)
-# endif
-#endif
-#if defined(MYMALLOC)
-#endif
-#if defined(PERL_OBJECT)
-#ifndef __BORLANDC__
-#endif
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#undef Perl_amagic_call
-#define Perl_amagic_call pPerl->Perl_amagic_call
-#undef amagic_call
-#define amagic_call Perl_amagic_call
-#undef Perl_Gv_AMupdate
-#define Perl_Gv_AMupdate pPerl->Perl_Gv_AMupdate
-#undef Gv_AMupdate
-#define Gv_AMupdate Perl_Gv_AMupdate
-#undef Perl_apply_attrs_string
-#define Perl_apply_attrs_string pPerl->Perl_apply_attrs_string
-#undef apply_attrs_string
-#define apply_attrs_string Perl_apply_attrs_string
-#undef Perl_avhv_delete_ent
-#define Perl_avhv_delete_ent pPerl->Perl_avhv_delete_ent
-#undef avhv_delete_ent
-#define avhv_delete_ent Perl_avhv_delete_ent
-#undef Perl_avhv_exists_ent
-#define Perl_avhv_exists_ent pPerl->Perl_avhv_exists_ent
-#undef avhv_exists_ent
-#define avhv_exists_ent Perl_avhv_exists_ent
-#undef Perl_avhv_fetch_ent
-#define Perl_avhv_fetch_ent pPerl->Perl_avhv_fetch_ent
-#undef avhv_fetch_ent
-#define avhv_fetch_ent Perl_avhv_fetch_ent
-#undef Perl_avhv_store_ent
-#define Perl_avhv_store_ent pPerl->Perl_avhv_store_ent
-#undef avhv_store_ent
-#define avhv_store_ent Perl_avhv_store_ent
-#undef Perl_avhv_iternext
-#define Perl_avhv_iternext pPerl->Perl_avhv_iternext
-#undef avhv_iternext
-#define avhv_iternext Perl_avhv_iternext
-#undef Perl_avhv_iterval
-#define Perl_avhv_iterval pPerl->Perl_avhv_iterval
-#undef avhv_iterval
-#define avhv_iterval Perl_avhv_iterval
-#undef Perl_avhv_keys
-#define Perl_avhv_keys pPerl->Perl_avhv_keys
-#undef avhv_keys
-#define avhv_keys Perl_avhv_keys
-#undef Perl_av_clear
-#define Perl_av_clear pPerl->Perl_av_clear
-#undef av_clear
-#define av_clear Perl_av_clear
-#undef Perl_av_delete
-#define Perl_av_delete pPerl->Perl_av_delete
-#undef av_delete
-#define av_delete Perl_av_delete
-#undef Perl_av_exists
-#define Perl_av_exists pPerl->Perl_av_exists
-#undef av_exists
-#define av_exists Perl_av_exists
-#undef Perl_av_extend
-#define Perl_av_extend pPerl->Perl_av_extend
-#undef av_extend
-#define av_extend Perl_av_extend
-#undef Perl_av_fetch
-#define Perl_av_fetch pPerl->Perl_av_fetch
-#undef av_fetch
-#define av_fetch Perl_av_fetch
-#undef Perl_av_fill
-#define Perl_av_fill pPerl->Perl_av_fill
-#undef av_fill
-#define av_fill Perl_av_fill
-#undef Perl_av_len
-#define Perl_av_len pPerl->Perl_av_len
-#undef av_len
-#define av_len Perl_av_len
-#undef Perl_av_make
-#define Perl_av_make pPerl->Perl_av_make
-#undef av_make
-#define av_make Perl_av_make
-#undef Perl_av_pop
-#define Perl_av_pop pPerl->Perl_av_pop
-#undef av_pop
-#define av_pop Perl_av_pop
-#undef Perl_av_push
-#define Perl_av_push pPerl->Perl_av_push
-#undef av_push
-#define av_push Perl_av_push
-#undef Perl_av_reify
-#define Perl_av_reify pPerl->Perl_av_reify
-#undef av_reify
-#define av_reify Perl_av_reify
-#undef Perl_av_shift
-#define Perl_av_shift pPerl->Perl_av_shift
-#undef av_shift
-#define av_shift Perl_av_shift
-#undef Perl_av_store
-#define Perl_av_store pPerl->Perl_av_store
-#undef av_store
-#define av_store Perl_av_store
-#undef Perl_av_undef
-#define Perl_av_undef pPerl->Perl_av_undef
-#undef av_undef
-#define av_undef Perl_av_undef
-#undef Perl_av_unshift
-#define Perl_av_unshift pPerl->Perl_av_unshift
-#undef av_unshift
-#define av_unshift Perl_av_unshift
-#undef Perl_block_gimme
-#define Perl_block_gimme pPerl->Perl_block_gimme
-#undef block_gimme
-#define block_gimme Perl_block_gimme
-#undef Perl_call_list
-#define Perl_call_list pPerl->Perl_call_list
-#undef call_list
-#define call_list Perl_call_list
-#undef Perl_cast_ulong
-#define Perl_cast_ulong pPerl->Perl_cast_ulong
-#undef cast_ulong
-#define cast_ulong Perl_cast_ulong
-#undef Perl_cast_i32
-#define Perl_cast_i32 pPerl->Perl_cast_i32
-#undef cast_i32
-#define cast_i32 Perl_cast_i32
-#undef Perl_cast_iv
-#define Perl_cast_iv pPerl->Perl_cast_iv
-#undef cast_iv
-#define cast_iv Perl_cast_iv
-#undef Perl_cast_uv
-#define Perl_cast_uv pPerl->Perl_cast_uv
-#undef cast_uv
-#define cast_uv Perl_cast_uv
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-#undef Perl_my_chsize
-#define Perl_my_chsize pPerl->Perl_my_chsize
-#undef my_chsize
-#define my_chsize Perl_my_chsize
-#endif
-#if defined(USE_THREADS)
-#undef Perl_condpair_magic
-#define Perl_condpair_magic pPerl->Perl_condpair_magic
-#undef condpair_magic
-#define condpair_magic Perl_condpair_magic
-#endif
-#undef Perl_croak
-#define Perl_croak pPerl->Perl_croak
-#undef croak
-#define croak Perl_croak
-#undef Perl_vcroak
-#define Perl_vcroak pPerl->Perl_vcroak
-#undef vcroak
-#define vcroak Perl_vcroak
-#if defined(PERL_IMPLICIT_CONTEXT)
-#undef Perl_croak_nocontext
-#define Perl_croak_nocontext pPerl->Perl_croak_nocontext
-#undef croak_nocontext
-#define croak_nocontext Perl_croak_nocontext
-#undef Perl_die_nocontext
-#define Perl_die_nocontext pPerl->Perl_die_nocontext
-#undef die_nocontext
-#define die_nocontext Perl_die_nocontext
-#undef Perl_deb_nocontext
-#define Perl_deb_nocontext pPerl->Perl_deb_nocontext
-#undef deb_nocontext
-#define deb_nocontext Perl_deb_nocontext
-#undef Perl_form_nocontext
-#define Perl_form_nocontext pPerl->Perl_form_nocontext
-#undef form_nocontext
-#define form_nocontext Perl_form_nocontext
-#undef Perl_load_module_nocontext
-#define Perl_load_module_nocontext pPerl->Perl_load_module_nocontext
-#undef load_module_nocontext
-#define load_module_nocontext Perl_load_module_nocontext
-#undef Perl_mess_nocontext
-#define Perl_mess_nocontext pPerl->Perl_mess_nocontext
-#undef mess_nocontext
-#define mess_nocontext Perl_mess_nocontext
-#undef Perl_warn_nocontext
-#define Perl_warn_nocontext pPerl->Perl_warn_nocontext
-#undef warn_nocontext
-#define warn_nocontext Perl_warn_nocontext
-#undef Perl_warner_nocontext
-#define Perl_warner_nocontext pPerl->Perl_warner_nocontext
-#undef warner_nocontext
-#define warner_nocontext Perl_warner_nocontext
-#undef Perl_newSVpvf_nocontext
-#define Perl_newSVpvf_nocontext pPerl->Perl_newSVpvf_nocontext
-#undef newSVpvf_nocontext
-#define newSVpvf_nocontext Perl_newSVpvf_nocontext
-#undef Perl_sv_catpvf_nocontext
-#define Perl_sv_catpvf_nocontext pPerl->Perl_sv_catpvf_nocontext
-#undef sv_catpvf_nocontext
-#define sv_catpvf_nocontext Perl_sv_catpvf_nocontext
-#undef Perl_sv_setpvf_nocontext
-#define Perl_sv_setpvf_nocontext pPerl->Perl_sv_setpvf_nocontext
-#undef sv_setpvf_nocontext
-#define sv_setpvf_nocontext Perl_sv_setpvf_nocontext
-#undef Perl_sv_catpvf_mg_nocontext
-#define Perl_sv_catpvf_mg_nocontext pPerl->Perl_sv_catpvf_mg_nocontext
-#undef sv_catpvf_mg_nocontext
-#define sv_catpvf_mg_nocontext Perl_sv_catpvf_mg_nocontext
-#undef Perl_sv_setpvf_mg_nocontext
-#define Perl_sv_setpvf_mg_nocontext pPerl->Perl_sv_setpvf_mg_nocontext
-#undef sv_setpvf_mg_nocontext
-#define sv_setpvf_mg_nocontext Perl_sv_setpvf_mg_nocontext
-#undef Perl_fprintf_nocontext
-#define Perl_fprintf_nocontext pPerl->Perl_fprintf_nocontext
-#undef fprintf_nocontext
-#define fprintf_nocontext Perl_fprintf_nocontext
-#undef Perl_printf_nocontext
-#define Perl_printf_nocontext pPerl->Perl_printf_nocontext
-#undef printf_nocontext
-#define printf_nocontext Perl_printf_nocontext
-#endif
-#undef Perl_cv_const_sv
-#define Perl_cv_const_sv pPerl->Perl_cv_const_sv
-#undef cv_const_sv
-#define cv_const_sv Perl_cv_const_sv
-#undef Perl_cv_undef
-#define Perl_cv_undef pPerl->Perl_cv_undef
-#undef cv_undef
-#define cv_undef Perl_cv_undef
-#undef Perl_cx_dump
-#define Perl_cx_dump pPerl->Perl_cx_dump
-#undef cx_dump
-#define cx_dump Perl_cx_dump
-#undef Perl_filter_add
-#define Perl_filter_add pPerl->Perl_filter_add
-#undef filter_add
-#define filter_add Perl_filter_add
-#undef Perl_filter_del
-#define Perl_filter_del pPerl->Perl_filter_del
-#undef filter_del
-#define filter_del Perl_filter_del
-#undef Perl_filter_read
-#define Perl_filter_read pPerl->Perl_filter_read
-#undef filter_read
-#define filter_read Perl_filter_read
-#undef Perl_get_op_descs
-#define Perl_get_op_descs pPerl->Perl_get_op_descs
-#undef get_op_descs
-#define get_op_descs Perl_get_op_descs
-#undef Perl_get_op_names
-#define Perl_get_op_names pPerl->Perl_get_op_names
-#undef get_op_names
-#define get_op_names Perl_get_op_names
-#undef Perl_get_ppaddr
-#define Perl_get_ppaddr pPerl->Perl_get_ppaddr
-#undef get_ppaddr
-#define get_ppaddr Perl_get_ppaddr
-#undef Perl_deb
-#define Perl_deb pPerl->Perl_deb
-#undef deb
-#define deb Perl_deb
-#undef Perl_vdeb
-#define Perl_vdeb pPerl->Perl_vdeb
-#undef vdeb
-#define vdeb Perl_vdeb
-#undef Perl_debprofdump
-#define Perl_debprofdump pPerl->Perl_debprofdump
-#undef debprofdump
-#define debprofdump Perl_debprofdump
-#undef Perl_debop
-#define Perl_debop pPerl->Perl_debop
-#undef debop
-#define debop Perl_debop
-#undef Perl_debstack
-#define Perl_debstack pPerl->Perl_debstack
-#undef debstack
-#define debstack Perl_debstack
-#undef Perl_debstackptrs
-#define Perl_debstackptrs pPerl->Perl_debstackptrs
-#undef debstackptrs
-#define debstackptrs Perl_debstackptrs
-#undef Perl_delimcpy
-#define Perl_delimcpy pPerl->Perl_delimcpy
-#undef delimcpy
-#define delimcpy Perl_delimcpy
-#undef Perl_die
-#define Perl_die pPerl->Perl_die
-#undef die
-#define die Perl_die
-#undef Perl_dounwind
-#define Perl_dounwind pPerl->Perl_dounwind
-#undef dounwind
-#define dounwind Perl_dounwind
-#undef Perl_do_binmode
-#define Perl_do_binmode pPerl->Perl_do_binmode
-#undef do_binmode
-#define do_binmode Perl_do_binmode
-#undef Perl_do_close
-#define Perl_do_close pPerl->Perl_do_close
-#undef do_close
-#define do_close Perl_do_close
-#if !defined(WIN32)
-#endif
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-#endif
-#undef Perl_do_join
-#define Perl_do_join pPerl->Perl_do_join
-#undef do_join
-#define do_join Perl_do_join
-#undef Perl_do_open
-#define Perl_do_open pPerl->Perl_do_open
-#undef do_open
-#define do_open Perl_do_open
-#undef Perl_do_open9
-#define Perl_do_open9 pPerl->Perl_do_open9
-#undef do_open9
-#define do_open9 Perl_do_open9
-#undef Perl_dowantarray
-#define Perl_dowantarray pPerl->Perl_dowantarray
-#undef dowantarray
-#define dowantarray Perl_dowantarray
-#undef Perl_dump_all
-#define Perl_dump_all pPerl->Perl_dump_all
-#undef dump_all
-#define dump_all Perl_dump_all
-#undef Perl_dump_eval
-#define Perl_dump_eval pPerl->Perl_dump_eval
-#undef dump_eval
-#define dump_eval Perl_dump_eval
-#if defined(DUMP_FDS)
-#undef Perl_dump_fds
-#define Perl_dump_fds pPerl->Perl_dump_fds
-#undef dump_fds
-#define dump_fds Perl_dump_fds
-#endif
-#undef Perl_dump_form
-#define Perl_dump_form pPerl->Perl_dump_form
-#undef dump_form
-#define dump_form Perl_dump_form
-#undef Perl_gv_dump
-#define Perl_gv_dump pPerl->Perl_gv_dump
-#undef gv_dump
-#define gv_dump Perl_gv_dump
-#undef Perl_op_dump
-#define Perl_op_dump pPerl->Perl_op_dump
-#undef op_dump
-#define op_dump Perl_op_dump
-#undef Perl_pmop_dump
-#define Perl_pmop_dump pPerl->Perl_pmop_dump
-#undef pmop_dump
-#define pmop_dump Perl_pmop_dump
-#undef Perl_dump_packsubs
-#define Perl_dump_packsubs pPerl->Perl_dump_packsubs
-#undef dump_packsubs
-#define dump_packsubs Perl_dump_packsubs
-#undef Perl_dump_sub
-#define Perl_dump_sub pPerl->Perl_dump_sub
-#undef dump_sub
-#define dump_sub Perl_dump_sub
-#undef Perl_fbm_compile
-#define Perl_fbm_compile pPerl->Perl_fbm_compile
-#undef fbm_compile
-#define fbm_compile Perl_fbm_compile
-#undef Perl_fbm_instr
-#define Perl_fbm_instr pPerl->Perl_fbm_instr
-#undef fbm_instr
-#define fbm_instr Perl_fbm_instr
-#if defined(USE_THREADS)
-#endif
-#undef Perl_form
-#define Perl_form pPerl->Perl_form
-#undef form
-#define form Perl_form
-#undef Perl_vform
-#define Perl_vform pPerl->Perl_vform
-#undef vform
-#define vform Perl_vform
-#undef Perl_free_tmps
-#define Perl_free_tmps pPerl->Perl_free_tmps
-#undef free_tmps
-#define free_tmps Perl_free_tmps
-#if !defined(HAS_GETENV_LEN)
-#endif
-#undef Perl_gp_free
-#define Perl_gp_free pPerl->Perl_gp_free
-#undef gp_free
-#define gp_free Perl_gp_free
-#undef Perl_gp_ref
-#define Perl_gp_ref pPerl->Perl_gp_ref
-#undef gp_ref
-#define gp_ref Perl_gp_ref
-#undef Perl_gv_AVadd
-#define Perl_gv_AVadd pPerl->Perl_gv_AVadd
-#undef gv_AVadd
-#define gv_AVadd Perl_gv_AVadd
-#undef Perl_gv_HVadd
-#define Perl_gv_HVadd pPerl->Perl_gv_HVadd
-#undef gv_HVadd
-#define gv_HVadd Perl_gv_HVadd
-#undef Perl_gv_IOadd
-#define Perl_gv_IOadd pPerl->Perl_gv_IOadd
-#undef gv_IOadd
-#define gv_IOadd Perl_gv_IOadd
-#undef Perl_gv_autoload4
-#define Perl_gv_autoload4 pPerl->Perl_gv_autoload4
-#undef gv_autoload4
-#define gv_autoload4 Perl_gv_autoload4
-#undef Perl_gv_check
-#define Perl_gv_check pPerl->Perl_gv_check
-#undef gv_check
-#define gv_check Perl_gv_check
-#undef Perl_gv_efullname
-#define Perl_gv_efullname pPerl->Perl_gv_efullname
-#undef gv_efullname
-#define gv_efullname Perl_gv_efullname
-#undef Perl_gv_efullname3
-#define Perl_gv_efullname3 pPerl->Perl_gv_efullname3
-#undef gv_efullname3
-#define gv_efullname3 Perl_gv_efullname3
-#undef Perl_gv_efullname4
-#define Perl_gv_efullname4 pPerl->Perl_gv_efullname4
-#undef gv_efullname4
-#define gv_efullname4 Perl_gv_efullname4
-#undef Perl_gv_fetchfile
-#define Perl_gv_fetchfile pPerl->Perl_gv_fetchfile
-#undef gv_fetchfile
-#define gv_fetchfile Perl_gv_fetchfile
-#undef Perl_gv_fetchmeth
-#define Perl_gv_fetchmeth pPerl->Perl_gv_fetchmeth
-#undef gv_fetchmeth
-#define gv_fetchmeth Perl_gv_fetchmeth
-#undef Perl_gv_fetchmethod
-#define Perl_gv_fetchmethod pPerl->Perl_gv_fetchmethod
-#undef gv_fetchmethod
-#define gv_fetchmethod Perl_gv_fetchmethod
-#undef Perl_gv_fetchmethod_autoload
-#define Perl_gv_fetchmethod_autoload pPerl->Perl_gv_fetchmethod_autoload
-#undef gv_fetchmethod_autoload
-#define gv_fetchmethod_autoload Perl_gv_fetchmethod_autoload
-#undef Perl_gv_fetchpv
-#define Perl_gv_fetchpv pPerl->Perl_gv_fetchpv
-#undef gv_fetchpv
-#define gv_fetchpv Perl_gv_fetchpv
-#undef Perl_gv_fullname
-#define Perl_gv_fullname pPerl->Perl_gv_fullname
-#undef gv_fullname
-#define gv_fullname Perl_gv_fullname
-#undef Perl_gv_fullname3
-#define Perl_gv_fullname3 pPerl->Perl_gv_fullname3
-#undef gv_fullname3
-#define gv_fullname3 Perl_gv_fullname3
-#undef Perl_gv_fullname4
-#define Perl_gv_fullname4 pPerl->Perl_gv_fullname4
-#undef gv_fullname4
-#define gv_fullname4 Perl_gv_fullname4
-#undef Perl_gv_init
-#define Perl_gv_init pPerl->Perl_gv_init
-#undef gv_init
-#define gv_init Perl_gv_init
-#undef Perl_gv_stashpv
-#define Perl_gv_stashpv pPerl->Perl_gv_stashpv
-#undef gv_stashpv
-#define gv_stashpv Perl_gv_stashpv
-#undef Perl_gv_stashpvn
-#define Perl_gv_stashpvn pPerl->Perl_gv_stashpvn
-#undef gv_stashpvn
-#define gv_stashpvn Perl_gv_stashpvn
-#undef Perl_gv_stashsv
-#define Perl_gv_stashsv pPerl->Perl_gv_stashsv
-#undef gv_stashsv
-#define gv_stashsv Perl_gv_stashsv
-#undef Perl_hv_clear
-#define Perl_hv_clear pPerl->Perl_hv_clear
-#undef hv_clear
-#define hv_clear Perl_hv_clear
-#undef Perl_hv_delayfree_ent
-#define Perl_hv_delayfree_ent pPerl->Perl_hv_delayfree_ent
-#undef hv_delayfree_ent
-#define hv_delayfree_ent Perl_hv_delayfree_ent
-#undef Perl_hv_delete
-#define Perl_hv_delete pPerl->Perl_hv_delete
-#undef hv_delete
-#define hv_delete Perl_hv_delete
-#undef Perl_hv_delete_ent
-#define Perl_hv_delete_ent pPerl->Perl_hv_delete_ent
-#undef hv_delete_ent
-#define hv_delete_ent Perl_hv_delete_ent
-#undef Perl_hv_exists
-#define Perl_hv_exists pPerl->Perl_hv_exists
-#undef hv_exists
-#define hv_exists Perl_hv_exists
-#undef Perl_hv_exists_ent
-#define Perl_hv_exists_ent pPerl->Perl_hv_exists_ent
-#undef hv_exists_ent
-#define hv_exists_ent Perl_hv_exists_ent
-#undef Perl_hv_fetch
-#define Perl_hv_fetch pPerl->Perl_hv_fetch
-#undef hv_fetch
-#define hv_fetch Perl_hv_fetch
-#undef Perl_hv_fetch_ent
-#define Perl_hv_fetch_ent pPerl->Perl_hv_fetch_ent
-#undef hv_fetch_ent
-#define hv_fetch_ent Perl_hv_fetch_ent
-#undef Perl_hv_free_ent
-#define Perl_hv_free_ent pPerl->Perl_hv_free_ent
-#undef hv_free_ent
-#define hv_free_ent Perl_hv_free_ent
-#undef Perl_hv_iterinit
-#define Perl_hv_iterinit pPerl->Perl_hv_iterinit
-#undef hv_iterinit
-#define hv_iterinit Perl_hv_iterinit
-#undef Perl_hv_iterkey
-#define Perl_hv_iterkey pPerl->Perl_hv_iterkey
-#undef hv_iterkey
-#define hv_iterkey Perl_hv_iterkey
-#undef Perl_hv_iterkeysv
-#define Perl_hv_iterkeysv pPerl->Perl_hv_iterkeysv
-#undef hv_iterkeysv
-#define hv_iterkeysv Perl_hv_iterkeysv
-#undef Perl_hv_iternext
-#define Perl_hv_iternext pPerl->Perl_hv_iternext
-#undef hv_iternext
-#define hv_iternext Perl_hv_iternext
-#undef Perl_hv_iternextsv
-#define Perl_hv_iternextsv pPerl->Perl_hv_iternextsv
-#undef hv_iternextsv
-#define hv_iternextsv Perl_hv_iternextsv
-#undef Perl_hv_iterval
-#define Perl_hv_iterval pPerl->Perl_hv_iterval
-#undef hv_iterval
-#define hv_iterval Perl_hv_iterval
-#undef Perl_hv_ksplit
-#define Perl_hv_ksplit pPerl->Perl_hv_ksplit
-#undef hv_ksplit
-#define hv_ksplit Perl_hv_ksplit
-#undef Perl_hv_magic
-#define Perl_hv_magic pPerl->Perl_hv_magic
-#undef hv_magic
-#define hv_magic Perl_hv_magic
-#undef Perl_hv_store
-#define Perl_hv_store pPerl->Perl_hv_store
-#undef hv_store
-#define hv_store Perl_hv_store
-#undef Perl_hv_store_ent
-#define Perl_hv_store_ent pPerl->Perl_hv_store_ent
-#undef hv_store_ent
-#define hv_store_ent Perl_hv_store_ent
-#undef Perl_hv_undef
-#define Perl_hv_undef pPerl->Perl_hv_undef
-#undef hv_undef
-#define hv_undef Perl_hv_undef
-#undef Perl_ibcmp
-#define Perl_ibcmp pPerl->Perl_ibcmp
-#undef ibcmp
-#define ibcmp Perl_ibcmp
-#undef Perl_ibcmp_locale
-#define Perl_ibcmp_locale pPerl->Perl_ibcmp_locale
-#undef ibcmp_locale
-#define ibcmp_locale Perl_ibcmp_locale
-#undef Perl_init_stacks
-#define Perl_init_stacks pPerl->Perl_init_stacks
-#undef init_stacks
-#define init_stacks Perl_init_stacks
-#undef Perl_instr
-#define Perl_instr pPerl->Perl_instr
-#undef instr
-#define instr Perl_instr
-#undef Perl_is_uni_alnum
-#define Perl_is_uni_alnum pPerl->Perl_is_uni_alnum
-#undef is_uni_alnum
-#define is_uni_alnum Perl_is_uni_alnum
-#undef Perl_is_uni_alnumc
-#define Perl_is_uni_alnumc pPerl->Perl_is_uni_alnumc
-#undef is_uni_alnumc
-#define is_uni_alnumc Perl_is_uni_alnumc
-#undef Perl_is_uni_idfirst
-#define Perl_is_uni_idfirst pPerl->Perl_is_uni_idfirst
-#undef is_uni_idfirst
-#define is_uni_idfirst Perl_is_uni_idfirst
-#undef Perl_is_uni_alpha
-#define Perl_is_uni_alpha pPerl->Perl_is_uni_alpha
-#undef is_uni_alpha
-#define is_uni_alpha Perl_is_uni_alpha
-#undef Perl_is_uni_ascii
-#define Perl_is_uni_ascii pPerl->Perl_is_uni_ascii
-#undef is_uni_ascii
-#define is_uni_ascii Perl_is_uni_ascii
-#undef Perl_is_uni_space
-#define Perl_is_uni_space pPerl->Perl_is_uni_space
-#undef is_uni_space
-#define is_uni_space Perl_is_uni_space
-#undef Perl_is_uni_cntrl
-#define Perl_is_uni_cntrl pPerl->Perl_is_uni_cntrl
-#undef is_uni_cntrl
-#define is_uni_cntrl Perl_is_uni_cntrl
-#undef Perl_is_uni_graph
-#define Perl_is_uni_graph pPerl->Perl_is_uni_graph
-#undef is_uni_graph
-#define is_uni_graph Perl_is_uni_graph
-#undef Perl_is_uni_digit
-#define Perl_is_uni_digit pPerl->Perl_is_uni_digit
-#undef is_uni_digit
-#define is_uni_digit Perl_is_uni_digit
-#undef Perl_is_uni_upper
-#define Perl_is_uni_upper pPerl->Perl_is_uni_upper
-#undef is_uni_upper
-#define is_uni_upper Perl_is_uni_upper
-#undef Perl_is_uni_lower
-#define Perl_is_uni_lower pPerl->Perl_is_uni_lower
-#undef is_uni_lower
-#define is_uni_lower Perl_is_uni_lower
-#undef Perl_is_uni_print
-#define Perl_is_uni_print pPerl->Perl_is_uni_print
-#undef is_uni_print
-#define is_uni_print Perl_is_uni_print
-#undef Perl_is_uni_punct
-#define Perl_is_uni_punct pPerl->Perl_is_uni_punct
-#undef is_uni_punct
-#define is_uni_punct Perl_is_uni_punct
-#undef Perl_is_uni_xdigit
-#define Perl_is_uni_xdigit pPerl->Perl_is_uni_xdigit
-#undef is_uni_xdigit
-#define is_uni_xdigit Perl_is_uni_xdigit
-#undef Perl_to_uni_upper
-#define Perl_to_uni_upper pPerl->Perl_to_uni_upper
-#undef to_uni_upper
-#define to_uni_upper Perl_to_uni_upper
-#undef Perl_to_uni_title
-#define Perl_to_uni_title pPerl->Perl_to_uni_title
-#undef to_uni_title
-#define to_uni_title Perl_to_uni_title
-#undef Perl_to_uni_lower
-#define Perl_to_uni_lower pPerl->Perl_to_uni_lower
-#undef to_uni_lower
-#define to_uni_lower Perl_to_uni_lower
-#undef Perl_is_uni_alnum_lc
-#define Perl_is_uni_alnum_lc pPerl->Perl_is_uni_alnum_lc
-#undef is_uni_alnum_lc
-#define is_uni_alnum_lc Perl_is_uni_alnum_lc
-#undef Perl_is_uni_alnumc_lc
-#define Perl_is_uni_alnumc_lc pPerl->Perl_is_uni_alnumc_lc
-#undef is_uni_alnumc_lc
-#define is_uni_alnumc_lc Perl_is_uni_alnumc_lc
-#undef Perl_is_uni_idfirst_lc
-#define Perl_is_uni_idfirst_lc pPerl->Perl_is_uni_idfirst_lc
-#undef is_uni_idfirst_lc
-#define is_uni_idfirst_lc Perl_is_uni_idfirst_lc
-#undef Perl_is_uni_alpha_lc
-#define Perl_is_uni_alpha_lc pPerl->Perl_is_uni_alpha_lc
-#undef is_uni_alpha_lc
-#define is_uni_alpha_lc Perl_is_uni_alpha_lc
-#undef Perl_is_uni_ascii_lc
-#define Perl_is_uni_ascii_lc pPerl->Perl_is_uni_ascii_lc
-#undef is_uni_ascii_lc
-#define is_uni_ascii_lc Perl_is_uni_ascii_lc
-#undef Perl_is_uni_space_lc
-#define Perl_is_uni_space_lc pPerl->Perl_is_uni_space_lc
-#undef is_uni_space_lc
-#define is_uni_space_lc Perl_is_uni_space_lc
-#undef Perl_is_uni_cntrl_lc
-#define Perl_is_uni_cntrl_lc pPerl->Perl_is_uni_cntrl_lc
-#undef is_uni_cntrl_lc
-#define is_uni_cntrl_lc Perl_is_uni_cntrl_lc
-#undef Perl_is_uni_graph_lc
-#define Perl_is_uni_graph_lc pPerl->Perl_is_uni_graph_lc
-#undef is_uni_graph_lc
-#define is_uni_graph_lc Perl_is_uni_graph_lc
-#undef Perl_is_uni_digit_lc
-#define Perl_is_uni_digit_lc pPerl->Perl_is_uni_digit_lc
-#undef is_uni_digit_lc
-#define is_uni_digit_lc Perl_is_uni_digit_lc
-#undef Perl_is_uni_upper_lc
-#define Perl_is_uni_upper_lc pPerl->Perl_is_uni_upper_lc
-#undef is_uni_upper_lc
-#define is_uni_upper_lc Perl_is_uni_upper_lc
-#undef Perl_is_uni_lower_lc
-#define Perl_is_uni_lower_lc pPerl->Perl_is_uni_lower_lc
-#undef is_uni_lower_lc
-#define is_uni_lower_lc Perl_is_uni_lower_lc
-#undef Perl_is_uni_print_lc
-#define Perl_is_uni_print_lc pPerl->Perl_is_uni_print_lc
-#undef is_uni_print_lc
-#define is_uni_print_lc Perl_is_uni_print_lc
-#undef Perl_is_uni_punct_lc
-#define Perl_is_uni_punct_lc pPerl->Perl_is_uni_punct_lc
-#undef is_uni_punct_lc
-#define is_uni_punct_lc Perl_is_uni_punct_lc
-#undef Perl_is_uni_xdigit_lc
-#define Perl_is_uni_xdigit_lc pPerl->Perl_is_uni_xdigit_lc
-#undef is_uni_xdigit_lc
-#define is_uni_xdigit_lc Perl_is_uni_xdigit_lc
-#undef Perl_to_uni_upper_lc
-#define Perl_to_uni_upper_lc pPerl->Perl_to_uni_upper_lc
-#undef to_uni_upper_lc
-#define to_uni_upper_lc Perl_to_uni_upper_lc
-#undef Perl_to_uni_title_lc
-#define Perl_to_uni_title_lc pPerl->Perl_to_uni_title_lc
-#undef to_uni_title_lc
-#define to_uni_title_lc Perl_to_uni_title_lc
-#undef Perl_to_uni_lower_lc
-#define Perl_to_uni_lower_lc pPerl->Perl_to_uni_lower_lc
-#undef to_uni_lower_lc
-#define to_uni_lower_lc Perl_to_uni_lower_lc
-#undef Perl_is_utf8_char
-#define Perl_is_utf8_char pPerl->Perl_is_utf8_char
-#undef is_utf8_char
-#define is_utf8_char Perl_is_utf8_char
-#undef Perl_is_utf8_string
-#define Perl_is_utf8_string pPerl->Perl_is_utf8_string
-#undef is_utf8_string
-#define is_utf8_string Perl_is_utf8_string
-#undef Perl_is_utf8_alnum
-#define Perl_is_utf8_alnum pPerl->Perl_is_utf8_alnum
-#undef is_utf8_alnum
-#define is_utf8_alnum Perl_is_utf8_alnum
-#undef Perl_is_utf8_alnumc
-#define Perl_is_utf8_alnumc pPerl->Perl_is_utf8_alnumc
-#undef is_utf8_alnumc
-#define is_utf8_alnumc Perl_is_utf8_alnumc
-#undef Perl_is_utf8_idfirst
-#define Perl_is_utf8_idfirst pPerl->Perl_is_utf8_idfirst
-#undef is_utf8_idfirst
-#define is_utf8_idfirst Perl_is_utf8_idfirst
-#undef Perl_is_utf8_alpha
-#define Perl_is_utf8_alpha pPerl->Perl_is_utf8_alpha
-#undef is_utf8_alpha
-#define is_utf8_alpha Perl_is_utf8_alpha
-#undef Perl_is_utf8_ascii
-#define Perl_is_utf8_ascii pPerl->Perl_is_utf8_ascii
-#undef is_utf8_ascii
-#define is_utf8_ascii Perl_is_utf8_ascii
-#undef Perl_is_utf8_space
-#define Perl_is_utf8_space pPerl->Perl_is_utf8_space
-#undef is_utf8_space
-#define is_utf8_space Perl_is_utf8_space
-#undef Perl_is_utf8_cntrl
-#define Perl_is_utf8_cntrl pPerl->Perl_is_utf8_cntrl
-#undef is_utf8_cntrl
-#define is_utf8_cntrl Perl_is_utf8_cntrl
-#undef Perl_is_utf8_digit
-#define Perl_is_utf8_digit pPerl->Perl_is_utf8_digit
-#undef is_utf8_digit
-#define is_utf8_digit Perl_is_utf8_digit
-#undef Perl_is_utf8_graph
-#define Perl_is_utf8_graph pPerl->Perl_is_utf8_graph
-#undef is_utf8_graph
-#define is_utf8_graph Perl_is_utf8_graph
-#undef Perl_is_utf8_upper
-#define Perl_is_utf8_upper pPerl->Perl_is_utf8_upper
-#undef is_utf8_upper
-#define is_utf8_upper Perl_is_utf8_upper
-#undef Perl_is_utf8_lower
-#define Perl_is_utf8_lower pPerl->Perl_is_utf8_lower
-#undef is_utf8_lower
-#define is_utf8_lower Perl_is_utf8_lower
-#undef Perl_is_utf8_print
-#define Perl_is_utf8_print pPerl->Perl_is_utf8_print
-#undef is_utf8_print
-#define is_utf8_print Perl_is_utf8_print
-#undef Perl_is_utf8_punct
-#define Perl_is_utf8_punct pPerl->Perl_is_utf8_punct
-#undef is_utf8_punct
-#define is_utf8_punct Perl_is_utf8_punct
-#undef Perl_is_utf8_xdigit
-#define Perl_is_utf8_xdigit pPerl->Perl_is_utf8_xdigit
-#undef is_utf8_xdigit
-#define is_utf8_xdigit Perl_is_utf8_xdigit
-#undef Perl_is_utf8_mark
-#define Perl_is_utf8_mark pPerl->Perl_is_utf8_mark
-#undef is_utf8_mark
-#define is_utf8_mark Perl_is_utf8_mark
-#undef Perl_leave_scope
-#define Perl_leave_scope pPerl->Perl_leave_scope
-#undef leave_scope
-#define leave_scope Perl_leave_scope
-#undef Perl_load_module
-#define Perl_load_module pPerl->Perl_load_module
-#undef load_module
-#define load_module Perl_load_module
-#undef Perl_vload_module
-#define Perl_vload_module pPerl->Perl_vload_module
-#undef vload_module
-#define vload_module Perl_vload_module
-#undef Perl_looks_like_number
-#define Perl_looks_like_number pPerl->Perl_looks_like_number
-#undef looks_like_number
-#define looks_like_number Perl_looks_like_number
-#if defined(USE_THREADS)
-#endif
-#if defined(USE_LOCALE_COLLATE)
-#endif
-#undef Perl_markstack_grow
-#define Perl_markstack_grow pPerl->Perl_markstack_grow
-#undef markstack_grow
-#define markstack_grow Perl_markstack_grow
-#if defined(USE_LOCALE_COLLATE)
-#endif
-#undef Perl_mess
-#define Perl_mess pPerl->Perl_mess
-#undef mess
-#define mess Perl_mess
-#undef Perl_vmess
-#define Perl_vmess pPerl->Perl_vmess
-#undef vmess
-#define vmess Perl_vmess
-#undef Perl_mg_clear
-#define Perl_mg_clear pPerl->Perl_mg_clear
-#undef mg_clear
-#define mg_clear Perl_mg_clear
-#undef Perl_mg_copy
-#define Perl_mg_copy pPerl->Perl_mg_copy
-#undef mg_copy
-#define mg_copy Perl_mg_copy
-#undef Perl_mg_find
-#define Perl_mg_find pPerl->Perl_mg_find
-#undef mg_find
-#define mg_find Perl_mg_find
-#undef Perl_mg_free
-#define Perl_mg_free pPerl->Perl_mg_free
-#undef mg_free
-#define mg_free Perl_mg_free
-#undef Perl_mg_get
-#define Perl_mg_get pPerl->Perl_mg_get
-#undef mg_get
-#define mg_get Perl_mg_get
-#undef Perl_mg_length
-#define Perl_mg_length pPerl->Perl_mg_length
-#undef mg_length
-#define mg_length Perl_mg_length
-#undef Perl_mg_magical
-#define Perl_mg_magical pPerl->Perl_mg_magical
-#undef mg_magical
-#define mg_magical Perl_mg_magical
-#undef Perl_mg_set
-#define Perl_mg_set pPerl->Perl_mg_set
-#undef mg_set
-#define mg_set Perl_mg_set
-#undef Perl_mg_size
-#define Perl_mg_size pPerl->Perl_mg_size
-#undef mg_size
-#define mg_size Perl_mg_size
-#undef Perl_moreswitches
-#define Perl_moreswitches pPerl->Perl_moreswitches
-#undef moreswitches
-#define moreswitches Perl_moreswitches
-#undef Perl_my_atof
-#define Perl_my_atof pPerl->Perl_my_atof
-#undef my_atof
-#define my_atof Perl_my_atof
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
-#undef Perl_my_bcopy
-#define Perl_my_bcopy pPerl->Perl_my_bcopy
-#undef my_bcopy
-#define my_bcopy Perl_my_bcopy
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-#undef Perl_my_bzero
-#define Perl_my_bzero pPerl->Perl_my_bzero
-#undef my_bzero
-#define my_bzero Perl_my_bzero
-#endif
-#undef Perl_my_exit
-#define Perl_my_exit pPerl->Perl_my_exit
-#undef my_exit
-#define my_exit Perl_my_exit
-#undef Perl_my_failure_exit
-#define Perl_my_failure_exit pPerl->Perl_my_failure_exit
-#undef my_failure_exit
-#define my_failure_exit Perl_my_failure_exit
-#undef Perl_my_fflush_all
-#define Perl_my_fflush_all pPerl->Perl_my_fflush_all
-#undef my_fflush_all
-#define my_fflush_all Perl_my_fflush_all
-#undef Perl_my_lstat
-#define Perl_my_lstat pPerl->Perl_my_lstat
-#undef my_lstat
-#define my_lstat Perl_my_lstat
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-#undef Perl_my_memcmp
-#define Perl_my_memcmp pPerl->Perl_my_memcmp
-#undef my_memcmp
-#define my_memcmp Perl_my_memcmp
-#endif
-#if !defined(HAS_MEMSET)
-#undef Perl_my_memset
-#define Perl_my_memset pPerl->Perl_my_memset
-#undef my_memset
-#define my_memset Perl_my_memset
-#endif
-#if !defined(PERL_OBJECT)
-#undef Perl_my_pclose
-#define Perl_my_pclose pPerl->Perl_my_pclose
-#undef my_pclose
-#define my_pclose Perl_my_pclose
-#undef Perl_my_popen
-#define Perl_my_popen pPerl->Perl_my_popen
-#undef my_popen
-#define my_popen Perl_my_popen
-#endif
-#undef Perl_my_setenv
-#define Perl_my_setenv pPerl->Perl_my_setenv
-#undef my_setenv
-#define my_setenv Perl_my_setenv
-#undef Perl_my_stat
-#define Perl_my_stat pPerl->Perl_my_stat
-#undef my_stat
-#define my_stat Perl_my_stat
-#if defined(MYSWAP)
-#undef Perl_my_swap
-#define Perl_my_swap pPerl->Perl_my_swap
-#undef my_swap
-#define my_swap Perl_my_swap
-#undef Perl_my_htonl
-#define Perl_my_htonl pPerl->Perl_my_htonl
-#undef my_htonl
-#define my_htonl Perl_my_htonl
-#undef Perl_my_ntohl
-#define Perl_my_ntohl pPerl->Perl_my_ntohl
-#undef my_ntohl
-#define my_ntohl Perl_my_ntohl
-#endif
-#undef Perl_newANONLIST
-#define Perl_newANONLIST pPerl->Perl_newANONLIST
-#undef newANONLIST
-#define newANONLIST Perl_newANONLIST
-#undef Perl_newANONHASH
-#define Perl_newANONHASH pPerl->Perl_newANONHASH
-#undef newANONHASH
-#define newANONHASH Perl_newANONHASH
-#undef Perl_newANONSUB
-#define Perl_newANONSUB pPerl->Perl_newANONSUB
-#undef newANONSUB
-#define newANONSUB Perl_newANONSUB
-#undef Perl_newASSIGNOP
-#define Perl_newASSIGNOP pPerl->Perl_newASSIGNOP
-#undef newASSIGNOP
-#define newASSIGNOP Perl_newASSIGNOP
-#undef Perl_newCONDOP
-#define Perl_newCONDOP pPerl->Perl_newCONDOP
-#undef newCONDOP
-#define newCONDOP Perl_newCONDOP
-#undef Perl_newCONSTSUB
-#define Perl_newCONSTSUB pPerl->Perl_newCONSTSUB
-#undef newCONSTSUB
-#define newCONSTSUB Perl_newCONSTSUB
-#undef Perl_newFORM
-#define Perl_newFORM pPerl->Perl_newFORM
-#undef newFORM
-#define newFORM Perl_newFORM
-#undef Perl_newFOROP
-#define Perl_newFOROP pPerl->Perl_newFOROP
-#undef newFOROP
-#define newFOROP Perl_newFOROP
-#undef Perl_newLOGOP
-#define Perl_newLOGOP pPerl->Perl_newLOGOP
-#undef newLOGOP
-#define newLOGOP Perl_newLOGOP
-#undef Perl_newLOOPEX
-#define Perl_newLOOPEX pPerl->Perl_newLOOPEX
-#undef newLOOPEX
-#define newLOOPEX Perl_newLOOPEX
-#undef Perl_newLOOPOP
-#define Perl_newLOOPOP pPerl->Perl_newLOOPOP
-#undef newLOOPOP
-#define newLOOPOP Perl_newLOOPOP
-#undef Perl_newNULLLIST
-#define Perl_newNULLLIST pPerl->Perl_newNULLLIST
-#undef newNULLLIST
-#define newNULLLIST Perl_newNULLLIST
-#undef Perl_newOP
-#define Perl_newOP pPerl->Perl_newOP
-#undef newOP
-#define newOP Perl_newOP
-#undef Perl_newPROG
-#define Perl_newPROG pPerl->Perl_newPROG
-#undef newPROG
-#define newPROG Perl_newPROG
-#undef Perl_newRANGE
-#define Perl_newRANGE pPerl->Perl_newRANGE
-#undef newRANGE
-#define newRANGE Perl_newRANGE
-#undef Perl_newSLICEOP
-#define Perl_newSLICEOP pPerl->Perl_newSLICEOP
-#undef newSLICEOP
-#define newSLICEOP Perl_newSLICEOP
-#undef Perl_newSTATEOP
-#define Perl_newSTATEOP pPerl->Perl_newSTATEOP
-#undef newSTATEOP
-#define newSTATEOP Perl_newSTATEOP
-#undef Perl_newSUB
-#define Perl_newSUB pPerl->Perl_newSUB
-#undef newSUB
-#define newSUB Perl_newSUB
-#undef Perl_newXS
-#define Perl_newXS pPerl->Perl_newXS
-#undef newXS
-#define newXS Perl_newXS
-#undef Perl_newAV
-#define Perl_newAV pPerl->Perl_newAV
-#undef newAV
-#define newAV Perl_newAV
-#undef Perl_newAVREF
-#define Perl_newAVREF pPerl->Perl_newAVREF
-#undef newAVREF
-#define newAVREF Perl_newAVREF
-#undef Perl_newBINOP
-#define Perl_newBINOP pPerl->Perl_newBINOP
-#undef newBINOP
-#define newBINOP Perl_newBINOP
-#undef Perl_newCVREF
-#define Perl_newCVREF pPerl->Perl_newCVREF
-#undef newCVREF
-#define newCVREF Perl_newCVREF
-#undef Perl_newGVOP
-#define Perl_newGVOP pPerl->Perl_newGVOP
-#undef newGVOP
-#define newGVOP Perl_newGVOP
-#undef Perl_newGVgen
-#define Perl_newGVgen pPerl->Perl_newGVgen
-#undef newGVgen
-#define newGVgen Perl_newGVgen
-#undef Perl_newGVREF
-#define Perl_newGVREF pPerl->Perl_newGVREF
-#undef newGVREF
-#define newGVREF Perl_newGVREF
-#undef Perl_newHVREF
-#define Perl_newHVREF pPerl->Perl_newHVREF
-#undef newHVREF
-#define newHVREF Perl_newHVREF
-#undef Perl_newHV
-#define Perl_newHV pPerl->Perl_newHV
-#undef newHV
-#define newHV Perl_newHV
-#undef Perl_newHVhv
-#define Perl_newHVhv pPerl->Perl_newHVhv
-#undef newHVhv
-#define newHVhv Perl_newHVhv
-#undef Perl_newIO
-#define Perl_newIO pPerl->Perl_newIO
-#undef newIO
-#define newIO Perl_newIO
-#undef Perl_newLISTOP
-#define Perl_newLISTOP pPerl->Perl_newLISTOP
-#undef newLISTOP
-#define newLISTOP Perl_newLISTOP
-#undef Perl_newPADOP
-#define Perl_newPADOP pPerl->Perl_newPADOP
-#undef newPADOP
-#define newPADOP Perl_newPADOP
-#undef Perl_newPMOP
-#define Perl_newPMOP pPerl->Perl_newPMOP
-#undef newPMOP
-#define newPMOP Perl_newPMOP
-#undef Perl_newPVOP
-#define Perl_newPVOP pPerl->Perl_newPVOP
-#undef newPVOP
-#define newPVOP Perl_newPVOP
-#undef Perl_newRV
-#define Perl_newRV pPerl->Perl_newRV
-#undef newRV
-#define newRV Perl_newRV
-#undef Perl_newRV_noinc
-#define Perl_newRV_noinc pPerl->Perl_newRV_noinc
-#undef newRV_noinc
-#define newRV_noinc Perl_newRV_noinc
-#undef Perl_newSV
-#define Perl_newSV pPerl->Perl_newSV
-#undef newSV
-#define newSV Perl_newSV
-#undef Perl_newSVREF
-#define Perl_newSVREF pPerl->Perl_newSVREF
-#undef newSVREF
-#define newSVREF Perl_newSVREF
-#undef Perl_newSVOP
-#define Perl_newSVOP pPerl->Perl_newSVOP
-#undef newSVOP
-#define newSVOP Perl_newSVOP
-#undef Perl_newSViv
-#define Perl_newSViv pPerl->Perl_newSViv
-#undef newSViv
-#define newSViv Perl_newSViv
-#undef Perl_newSVuv
-#define Perl_newSVuv pPerl->Perl_newSVuv
-#undef newSVuv
-#define newSVuv Perl_newSVuv
-#undef Perl_newSVnv
-#define Perl_newSVnv pPerl->Perl_newSVnv
-#undef newSVnv
-#define newSVnv Perl_newSVnv
-#undef Perl_newSVpv
-#define Perl_newSVpv pPerl->Perl_newSVpv
-#undef newSVpv
-#define newSVpv Perl_newSVpv
-#undef Perl_newSVpvn
-#define Perl_newSVpvn pPerl->Perl_newSVpvn
-#undef newSVpvn
-#define newSVpvn Perl_newSVpvn
-#undef Perl_newSVpvf
-#define Perl_newSVpvf pPerl->Perl_newSVpvf
-#undef newSVpvf
-#define newSVpvf Perl_newSVpvf
-#undef Perl_vnewSVpvf
-#define Perl_vnewSVpvf pPerl->Perl_vnewSVpvf
-#undef vnewSVpvf
-#define vnewSVpvf Perl_vnewSVpvf
-#undef Perl_newSVrv
-#define Perl_newSVrv pPerl->Perl_newSVrv
-#undef newSVrv
-#define newSVrv Perl_newSVrv
-#undef Perl_newSVsv
-#define Perl_newSVsv pPerl->Perl_newSVsv
-#undef newSVsv
-#define newSVsv Perl_newSVsv
-#undef Perl_newUNOP
-#define Perl_newUNOP pPerl->Perl_newUNOP
-#undef newUNOP
-#define newUNOP Perl_newUNOP
-#undef Perl_newWHILEOP
-#define Perl_newWHILEOP pPerl->Perl_newWHILEOP
-#undef newWHILEOP
-#define newWHILEOP Perl_newWHILEOP
-#undef Perl_new_stackinfo
-#define Perl_new_stackinfo pPerl->Perl_new_stackinfo
-#undef new_stackinfo
-#define new_stackinfo Perl_new_stackinfo
-#undef Perl_ninstr
-#define Perl_ninstr pPerl->Perl_ninstr
-#undef ninstr
-#define ninstr Perl_ninstr
-#undef Perl_op_free
-#define Perl_op_free pPerl->Perl_op_free
-#undef op_free
-#define op_free Perl_op_free
-#undef Perl_pad_sv
-#define Perl_pad_sv pPerl->Perl_pad_sv
-#undef pad_sv
-#define pad_sv Perl_pad_sv
-#if defined(PERL_OBJECT)
-#undef Perl_construct
-#define Perl_construct pPerl->Perl_construct
-#undef Perl_destruct
-#define Perl_destruct pPerl->Perl_destruct
-#undef Perl_free
-#define Perl_free pPerl->Perl_free
-#undef Perl_run
-#define Perl_run pPerl->Perl_run
-#undef Perl_parse
-#define Perl_parse pPerl->Perl_parse
-#endif
-#if defined(USE_THREADS)
-#undef Perl_new_struct_thread
-#define Perl_new_struct_thread pPerl->Perl_new_struct_thread
-#undef new_struct_thread
-#define new_struct_thread Perl_new_struct_thread
-#endif
-#undef Perl_call_atexit
-#define Perl_call_atexit pPerl->Perl_call_atexit
-#undef call_atexit
-#define call_atexit Perl_call_atexit
-#undef Perl_call_argv
-#define Perl_call_argv pPerl->Perl_call_argv
-#undef call_argv
-#define call_argv Perl_call_argv
-#undef Perl_call_method
-#define Perl_call_method pPerl->Perl_call_method
-#undef call_method
-#define call_method Perl_call_method
-#undef Perl_call_pv
-#define Perl_call_pv pPerl->Perl_call_pv
-#undef call_pv
-#define call_pv Perl_call_pv
-#undef Perl_call_sv
-#define Perl_call_sv pPerl->Perl_call_sv
-#undef call_sv
-#define call_sv Perl_call_sv
-#undef Perl_eval_pv
-#define Perl_eval_pv pPerl->Perl_eval_pv
-#undef eval_pv
-#define eval_pv Perl_eval_pv
-#undef Perl_eval_sv
-#define Perl_eval_sv pPerl->Perl_eval_sv
-#undef eval_sv
-#define eval_sv Perl_eval_sv
-#undef Perl_get_sv
-#define Perl_get_sv pPerl->Perl_get_sv
-#undef get_sv
-#define get_sv Perl_get_sv
-#undef Perl_get_av
-#define Perl_get_av pPerl->Perl_get_av
-#undef get_av
-#define get_av Perl_get_av
-#undef Perl_get_hv
-#define Perl_get_hv pPerl->Perl_get_hv
-#undef get_hv
-#define get_hv Perl_get_hv
-#undef Perl_get_cv
-#define Perl_get_cv pPerl->Perl_get_cv
-#undef get_cv
-#define get_cv Perl_get_cv
-#undef Perl_init_i18nl10n
-#define Perl_init_i18nl10n pPerl->Perl_init_i18nl10n
-#undef init_i18nl10n
-#define init_i18nl10n Perl_init_i18nl10n
-#undef Perl_init_i18nl14n
-#define Perl_init_i18nl14n pPerl->Perl_init_i18nl14n
-#undef init_i18nl14n
-#define init_i18nl14n Perl_init_i18nl14n
-#undef Perl_new_collate
-#define Perl_new_collate pPerl->Perl_new_collate
-#undef new_collate
-#define new_collate Perl_new_collate
-#undef Perl_new_ctype
-#define Perl_new_ctype pPerl->Perl_new_ctype
-#undef new_ctype
-#define new_ctype Perl_new_ctype
-#undef Perl_new_numeric
-#define Perl_new_numeric pPerl->Perl_new_numeric
-#undef new_numeric
-#define new_numeric Perl_new_numeric
-#undef Perl_set_numeric_local
-#define Perl_set_numeric_local pPerl->Perl_set_numeric_local
-#undef set_numeric_local
-#define set_numeric_local Perl_set_numeric_local
-#undef Perl_set_numeric_radix
-#define Perl_set_numeric_radix pPerl->Perl_set_numeric_radix
-#undef set_numeric_radix
-#define set_numeric_radix Perl_set_numeric_radix
-#undef Perl_set_numeric_standard
-#define Perl_set_numeric_standard pPerl->Perl_set_numeric_standard
-#undef set_numeric_standard
-#define set_numeric_standard Perl_set_numeric_standard
-#undef Perl_require_pv
-#define Perl_require_pv pPerl->Perl_require_pv
-#undef require_pv
-#define require_pv Perl_require_pv
-#undef Perl_pmflag
-#define Perl_pmflag pPerl->Perl_pmflag
-#undef pmflag
-#define pmflag Perl_pmflag
-#undef Perl_pop_scope
-#define Perl_pop_scope pPerl->Perl_pop_scope
-#undef pop_scope
-#define pop_scope Perl_pop_scope
-#undef Perl_push_scope
-#define Perl_push_scope pPerl->Perl_push_scope
-#undef push_scope
-#define push_scope Perl_push_scope
-#undef Perl_regdump
-#define Perl_regdump pPerl->Perl_regdump
-#undef regdump
-#define regdump Perl_regdump
-#undef Perl_pregexec
-#define Perl_pregexec pPerl->Perl_pregexec
-#undef pregexec
-#define pregexec Perl_pregexec
-#undef Perl_pregfree
-#define Perl_pregfree pPerl->Perl_pregfree
-#undef pregfree
-#define pregfree Perl_pregfree
-#undef Perl_pregcomp
-#define Perl_pregcomp pPerl->Perl_pregcomp
-#undef pregcomp
-#define pregcomp Perl_pregcomp
-#undef Perl_re_intuit_start
-#define Perl_re_intuit_start pPerl->Perl_re_intuit_start
-#undef re_intuit_start
-#define re_intuit_start Perl_re_intuit_start
-#undef Perl_re_intuit_string
-#define Perl_re_intuit_string pPerl->Perl_re_intuit_string
-#undef re_intuit_string
-#define re_intuit_string Perl_re_intuit_string
-#undef Perl_regexec_flags
-#define Perl_regexec_flags pPerl->Perl_regexec_flags
-#undef regexec_flags
-#define regexec_flags Perl_regexec_flags
-#undef Perl_regnext
-#define Perl_regnext pPerl->Perl_regnext
-#undef regnext
-#define regnext Perl_regnext
-#undef Perl_repeatcpy
-#define Perl_repeatcpy pPerl->Perl_repeatcpy
-#undef repeatcpy
-#define repeatcpy Perl_repeatcpy
-#undef Perl_rninstr
-#define Perl_rninstr pPerl->Perl_rninstr
-#undef rninstr
-#define rninstr Perl_rninstr
-#undef Perl_rsignal
-#define Perl_rsignal pPerl->Perl_rsignal
-#undef rsignal
-#define rsignal Perl_rsignal
-#if !defined(HAS_RENAME)
-#endif
-#undef Perl_savepv
-#define Perl_savepv pPerl->Perl_savepv
-#undef savepv
-#define savepv Perl_savepv
-#undef Perl_savepvn
-#define Perl_savepvn pPerl->Perl_savepvn
-#undef savepvn
-#define savepvn Perl_savepvn
-#undef Perl_savestack_grow
-#define Perl_savestack_grow pPerl->Perl_savestack_grow
-#undef savestack_grow
-#define savestack_grow Perl_savestack_grow
-#undef Perl_save_aelem
-#define Perl_save_aelem pPerl->Perl_save_aelem
-#undef save_aelem
-#define save_aelem Perl_save_aelem
-#undef Perl_save_alloc
-#define Perl_save_alloc pPerl->Perl_save_alloc
-#undef save_alloc
-#define save_alloc Perl_save_alloc
-#undef Perl_save_aptr
-#define Perl_save_aptr pPerl->Perl_save_aptr
-#undef save_aptr
-#define save_aptr Perl_save_aptr
-#undef Perl_save_ary
-#define Perl_save_ary pPerl->Perl_save_ary
-#undef save_ary
-#define save_ary Perl_save_ary
-#undef Perl_save_clearsv
-#define Perl_save_clearsv pPerl->Perl_save_clearsv
-#undef save_clearsv
-#define save_clearsv Perl_save_clearsv
-#undef Perl_save_delete
-#define Perl_save_delete pPerl->Perl_save_delete
-#undef save_delete
-#define save_delete Perl_save_delete
-#undef Perl_save_destructor
-#define Perl_save_destructor pPerl->Perl_save_destructor
-#undef save_destructor
-#define save_destructor Perl_save_destructor
-#undef Perl_save_destructor_x
-#define Perl_save_destructor_x pPerl->Perl_save_destructor_x
-#undef save_destructor_x
-#define save_destructor_x Perl_save_destructor_x
-#undef Perl_save_freesv
-#define Perl_save_freesv pPerl->Perl_save_freesv
-#undef save_freesv
-#define save_freesv Perl_save_freesv
-#undef Perl_save_freepv
-#define Perl_save_freepv pPerl->Perl_save_freepv
-#undef save_freepv
-#define save_freepv Perl_save_freepv
-#undef Perl_save_generic_svref
-#define Perl_save_generic_svref pPerl->Perl_save_generic_svref
-#undef save_generic_svref
-#define save_generic_svref Perl_save_generic_svref
-#undef Perl_save_generic_pvref
-#define Perl_save_generic_pvref pPerl->Perl_save_generic_pvref
-#undef save_generic_pvref
-#define save_generic_pvref Perl_save_generic_pvref
-#undef Perl_save_gp
-#define Perl_save_gp pPerl->Perl_save_gp
-#undef save_gp
-#define save_gp Perl_save_gp
-#undef Perl_save_hash
-#define Perl_save_hash pPerl->Perl_save_hash
-#undef save_hash
-#define save_hash Perl_save_hash
-#undef Perl_save_helem
-#define Perl_save_helem pPerl->Perl_save_helem
-#undef save_helem
-#define save_helem Perl_save_helem
-#undef Perl_save_hints
-#define Perl_save_hints pPerl->Perl_save_hints
-#undef save_hints
-#define save_hints Perl_save_hints
-#undef Perl_save_hptr
-#define Perl_save_hptr pPerl->Perl_save_hptr
-#undef save_hptr
-#define save_hptr Perl_save_hptr
-#undef Perl_save_I16
-#define Perl_save_I16 pPerl->Perl_save_I16
-#undef save_I16
-#define save_I16 Perl_save_I16
-#undef Perl_save_I32
-#define Perl_save_I32 pPerl->Perl_save_I32
-#undef save_I32
-#define save_I32 Perl_save_I32
-#undef Perl_save_I8
-#define Perl_save_I8 pPerl->Perl_save_I8
-#undef save_I8
-#define save_I8 Perl_save_I8
-#undef Perl_save_int
-#define Perl_save_int pPerl->Perl_save_int
-#undef save_int
-#define save_int Perl_save_int
-#undef Perl_save_item
-#define Perl_save_item pPerl->Perl_save_item
-#undef save_item
-#define save_item Perl_save_item
-#undef Perl_save_iv
-#define Perl_save_iv pPerl->Perl_save_iv
-#undef save_iv
-#define save_iv Perl_save_iv
-#undef Perl_save_list
-#define Perl_save_list pPerl->Perl_save_list
-#undef save_list
-#define save_list Perl_save_list
-#undef Perl_save_long
-#define Perl_save_long pPerl->Perl_save_long
-#undef save_long
-#define save_long Perl_save_long
-#undef Perl_save_mortalizesv
-#define Perl_save_mortalizesv pPerl->Perl_save_mortalizesv
-#undef save_mortalizesv
-#define save_mortalizesv Perl_save_mortalizesv
-#undef Perl_save_nogv
-#define Perl_save_nogv pPerl->Perl_save_nogv
-#undef save_nogv
-#define save_nogv Perl_save_nogv
-#undef Perl_save_scalar
-#define Perl_save_scalar pPerl->Perl_save_scalar
-#undef save_scalar
-#define save_scalar Perl_save_scalar
-#undef Perl_save_pptr
-#define Perl_save_pptr pPerl->Perl_save_pptr
-#undef save_pptr
-#define save_pptr Perl_save_pptr
-#undef Perl_save_vptr
-#define Perl_save_vptr pPerl->Perl_save_vptr
-#undef save_vptr
-#define save_vptr Perl_save_vptr
-#undef Perl_save_re_context
-#define Perl_save_re_context pPerl->Perl_save_re_context
-#undef save_re_context
-#define save_re_context Perl_save_re_context
-#undef Perl_save_padsv
-#define Perl_save_padsv pPerl->Perl_save_padsv
-#undef save_padsv
-#define save_padsv Perl_save_padsv
-#undef Perl_save_sptr
-#define Perl_save_sptr pPerl->Perl_save_sptr
-#undef save_sptr
-#define save_sptr Perl_save_sptr
-#undef Perl_save_svref
-#define Perl_save_svref pPerl->Perl_save_svref
-#undef save_svref
-#define save_svref Perl_save_svref
-#undef Perl_save_threadsv
-#define Perl_save_threadsv pPerl->Perl_save_threadsv
-#undef save_threadsv
-#define save_threadsv Perl_save_threadsv
-#undef Perl_scan_bin
-#define Perl_scan_bin pPerl->Perl_scan_bin
-#undef scan_bin
-#define scan_bin Perl_scan_bin
-#undef Perl_scan_hex
-#define Perl_scan_hex pPerl->Perl_scan_hex
-#undef scan_hex
-#define scan_hex Perl_scan_hex
-#undef Perl_scan_num
-#define Perl_scan_num pPerl->Perl_scan_num
-#undef scan_num
-#define scan_num Perl_scan_num
-#undef Perl_scan_oct
-#define Perl_scan_oct pPerl->Perl_scan_oct
-#undef scan_oct
-#define scan_oct Perl_scan_oct
-#undef Perl_screaminstr
-#define Perl_screaminstr pPerl->Perl_screaminstr
-#undef screaminstr
-#define screaminstr Perl_screaminstr
-#if !defined(VMS)
-#endif
-#undef Perl_sharepvn
-#define Perl_sharepvn pPerl->Perl_sharepvn
-#undef sharepvn
-#define sharepvn Perl_sharepvn
-#undef Perl_stack_grow
-#define Perl_stack_grow pPerl->Perl_stack_grow
-#undef stack_grow
-#define stack_grow Perl_stack_grow
-#undef Perl_start_subparse
-#define Perl_start_subparse pPerl->Perl_start_subparse
-#undef start_subparse
-#define start_subparse Perl_start_subparse
-#undef Perl_sv_2bool
-#define Perl_sv_2bool pPerl->Perl_sv_2bool
-#undef sv_2bool
-#define sv_2bool Perl_sv_2bool
-#undef Perl_sv_2cv
-#define Perl_sv_2cv pPerl->Perl_sv_2cv
-#undef sv_2cv
-#define sv_2cv Perl_sv_2cv
-#undef Perl_sv_2io
-#define Perl_sv_2io pPerl->Perl_sv_2io
-#undef sv_2io
-#define sv_2io Perl_sv_2io
-#undef Perl_sv_2iv
-#define Perl_sv_2iv pPerl->Perl_sv_2iv
-#undef sv_2iv
-#define sv_2iv Perl_sv_2iv
-#undef Perl_sv_2mortal
-#define Perl_sv_2mortal pPerl->Perl_sv_2mortal
-#undef sv_2mortal
-#define sv_2mortal Perl_sv_2mortal
-#undef Perl_sv_2nv
-#define Perl_sv_2nv pPerl->Perl_sv_2nv
-#undef sv_2nv
-#define sv_2nv Perl_sv_2nv
-#undef Perl_sv_2pv
-#define Perl_sv_2pv pPerl->Perl_sv_2pv
-#undef sv_2pv
-#define sv_2pv Perl_sv_2pv
-#undef Perl_sv_2pvutf8
-#define Perl_sv_2pvutf8 pPerl->Perl_sv_2pvutf8
-#undef sv_2pvutf8
-#define sv_2pvutf8 Perl_sv_2pvutf8
-#undef Perl_sv_2pvbyte
-#define Perl_sv_2pvbyte pPerl->Perl_sv_2pvbyte
-#undef sv_2pvbyte
-#define sv_2pvbyte Perl_sv_2pvbyte
-#undef Perl_sv_2uv
-#define Perl_sv_2uv pPerl->Perl_sv_2uv
-#undef sv_2uv
-#define sv_2uv Perl_sv_2uv
-#undef Perl_sv_iv
-#define Perl_sv_iv pPerl->Perl_sv_iv
-#undef sv_iv
-#define sv_iv Perl_sv_iv
-#undef Perl_sv_uv
-#define Perl_sv_uv pPerl->Perl_sv_uv
-#undef sv_uv
-#define sv_uv Perl_sv_uv
-#undef Perl_sv_nv
-#define Perl_sv_nv pPerl->Perl_sv_nv
-#undef sv_nv
-#define sv_nv Perl_sv_nv
-#undef Perl_sv_pvn
-#define Perl_sv_pvn pPerl->Perl_sv_pvn
-#undef sv_pvn
-#define sv_pvn Perl_sv_pvn
-#undef Perl_sv_pvutf8n
-#define Perl_sv_pvutf8n pPerl->Perl_sv_pvutf8n
-#undef sv_pvutf8n
-#define sv_pvutf8n Perl_sv_pvutf8n
-#undef Perl_sv_pvbyten
-#define Perl_sv_pvbyten pPerl->Perl_sv_pvbyten
-#undef sv_pvbyten
-#define sv_pvbyten Perl_sv_pvbyten
-#undef Perl_sv_true
-#define Perl_sv_true pPerl->Perl_sv_true
-#undef sv_true
-#define sv_true Perl_sv_true
-#undef Perl_sv_backoff
-#define Perl_sv_backoff pPerl->Perl_sv_backoff
-#undef sv_backoff
-#define sv_backoff Perl_sv_backoff
-#undef Perl_sv_bless
-#define Perl_sv_bless pPerl->Perl_sv_bless
-#undef sv_bless
-#define sv_bless Perl_sv_bless
-#undef Perl_sv_catpvf
-#define Perl_sv_catpvf pPerl->Perl_sv_catpvf
-#undef sv_catpvf
-#define sv_catpvf Perl_sv_catpvf
-#undef Perl_sv_vcatpvf
-#define Perl_sv_vcatpvf pPerl->Perl_sv_vcatpvf
-#undef sv_vcatpvf
-#define sv_vcatpvf Perl_sv_vcatpvf
-#undef Perl_sv_catpv
-#define Perl_sv_catpv pPerl->Perl_sv_catpv
-#undef sv_catpv
-#define sv_catpv Perl_sv_catpv
-#undef Perl_sv_catpvn
-#define Perl_sv_catpvn pPerl->Perl_sv_catpvn
-#undef sv_catpvn
-#define sv_catpvn Perl_sv_catpvn
-#undef Perl_sv_catsv
-#define Perl_sv_catsv pPerl->Perl_sv_catsv
-#undef sv_catsv
-#define sv_catsv Perl_sv_catsv
-#undef Perl_sv_chop
-#define Perl_sv_chop pPerl->Perl_sv_chop
-#undef sv_chop
-#define sv_chop Perl_sv_chop
-#undef Perl_sv_clear
-#define Perl_sv_clear pPerl->Perl_sv_clear
-#undef sv_clear
-#define sv_clear Perl_sv_clear
-#undef Perl_sv_cmp
-#define Perl_sv_cmp pPerl->Perl_sv_cmp
-#undef sv_cmp
-#define sv_cmp Perl_sv_cmp
-#undef Perl_sv_cmp_locale
-#define Perl_sv_cmp_locale pPerl->Perl_sv_cmp_locale
-#undef sv_cmp_locale
-#define sv_cmp_locale Perl_sv_cmp_locale
-#if defined(USE_LOCALE_COLLATE)
-#undef Perl_sv_collxfrm
-#define Perl_sv_collxfrm pPerl->Perl_sv_collxfrm
-#undef sv_collxfrm
-#define sv_collxfrm Perl_sv_collxfrm
-#endif
-#undef Perl_sv_compile_2op
-#define Perl_sv_compile_2op pPerl->Perl_sv_compile_2op
-#undef sv_compile_2op
-#define sv_compile_2op Perl_sv_compile_2op
-#undef Perl_sv_dec
-#define Perl_sv_dec pPerl->Perl_sv_dec
-#undef sv_dec
-#define sv_dec Perl_sv_dec
-#undef Perl_sv_dump
-#define Perl_sv_dump pPerl->Perl_sv_dump
-#undef sv_dump
-#define sv_dump Perl_sv_dump
-#undef Perl_sv_derived_from
-#define Perl_sv_derived_from pPerl->Perl_sv_derived_from
-#undef sv_derived_from
-#define sv_derived_from Perl_sv_derived_from
-#undef Perl_sv_eq
-#define Perl_sv_eq pPerl->Perl_sv_eq
-#undef sv_eq
-#define sv_eq Perl_sv_eq
-#undef Perl_sv_free
-#define Perl_sv_free pPerl->Perl_sv_free
-#undef sv_free
-#define sv_free Perl_sv_free
-#undef Perl_sv_gets
-#define Perl_sv_gets pPerl->Perl_sv_gets
-#undef sv_gets
-#define sv_gets Perl_sv_gets
-#undef Perl_sv_grow
-#define Perl_sv_grow pPerl->Perl_sv_grow
-#undef sv_grow
-#define sv_grow Perl_sv_grow
-#undef Perl_sv_inc
-#define Perl_sv_inc pPerl->Perl_sv_inc
-#undef sv_inc
-#define sv_inc Perl_sv_inc
-#undef Perl_sv_insert
-#define Perl_sv_insert pPerl->Perl_sv_insert
-#undef sv_insert
-#define sv_insert Perl_sv_insert
-#undef Perl_sv_isa
-#define Perl_sv_isa pPerl->Perl_sv_isa
-#undef sv_isa
-#define sv_isa Perl_sv_isa
-#undef Perl_sv_isobject
-#define Perl_sv_isobject pPerl->Perl_sv_isobject
-#undef sv_isobject
-#define sv_isobject Perl_sv_isobject
-#undef Perl_sv_len
-#define Perl_sv_len pPerl->Perl_sv_len
-#undef sv_len
-#define sv_len Perl_sv_len
-#undef Perl_sv_len_utf8
-#define Perl_sv_len_utf8 pPerl->Perl_sv_len_utf8
-#undef sv_len_utf8
-#define sv_len_utf8 Perl_sv_len_utf8
-#undef Perl_sv_magic
-#define Perl_sv_magic pPerl->Perl_sv_magic
-#undef sv_magic
-#define sv_magic Perl_sv_magic
-#undef Perl_sv_mortalcopy
-#define Perl_sv_mortalcopy pPerl->Perl_sv_mortalcopy
-#undef sv_mortalcopy
-#define sv_mortalcopy Perl_sv_mortalcopy
-#undef Perl_sv_newmortal
-#define Perl_sv_newmortal pPerl->Perl_sv_newmortal
-#undef sv_newmortal
-#define sv_newmortal Perl_sv_newmortal
-#undef Perl_sv_newref
-#define Perl_sv_newref pPerl->Perl_sv_newref
-#undef sv_newref
-#define sv_newref Perl_sv_newref
-#undef Perl_sv_peek
-#define Perl_sv_peek pPerl->Perl_sv_peek
-#undef sv_peek
-#define sv_peek Perl_sv_peek
-#undef Perl_sv_pos_u2b
-#define Perl_sv_pos_u2b pPerl->Perl_sv_pos_u2b
-#undef sv_pos_u2b
-#define sv_pos_u2b Perl_sv_pos_u2b
-#undef Perl_sv_pos_b2u
-#define Perl_sv_pos_b2u pPerl->Perl_sv_pos_b2u
-#undef sv_pos_b2u
-#define sv_pos_b2u Perl_sv_pos_b2u
-#undef Perl_sv_pvn_force
-#define Perl_sv_pvn_force pPerl->Perl_sv_pvn_force
-#undef sv_pvn_force
-#define sv_pvn_force Perl_sv_pvn_force
-#undef Perl_sv_pvutf8n_force
-#define Perl_sv_pvutf8n_force pPerl->Perl_sv_pvutf8n_force
-#undef sv_pvutf8n_force
-#define sv_pvutf8n_force Perl_sv_pvutf8n_force
-#undef Perl_sv_pvbyten_force
-#define Perl_sv_pvbyten_force pPerl->Perl_sv_pvbyten_force
-#undef sv_pvbyten_force
-#define sv_pvbyten_force Perl_sv_pvbyten_force
-#undef Perl_sv_reftype
-#define Perl_sv_reftype pPerl->Perl_sv_reftype
-#undef sv_reftype
-#define sv_reftype Perl_sv_reftype
-#undef Perl_sv_replace
-#define Perl_sv_replace pPerl->Perl_sv_replace
-#undef sv_replace
-#define sv_replace Perl_sv_replace
-#undef Perl_sv_report_used
-#define Perl_sv_report_used pPerl->Perl_sv_report_used
-#undef sv_report_used
-#define sv_report_used Perl_sv_report_used
-#undef Perl_sv_reset
-#define Perl_sv_reset pPerl->Perl_sv_reset
-#undef sv_reset
-#define sv_reset Perl_sv_reset
-#undef Perl_sv_setpvf
-#define Perl_sv_setpvf pPerl->Perl_sv_setpvf
-#undef sv_setpvf
-#define sv_setpvf Perl_sv_setpvf
-#undef Perl_sv_vsetpvf
-#define Perl_sv_vsetpvf pPerl->Perl_sv_vsetpvf
-#undef sv_vsetpvf
-#define sv_vsetpvf Perl_sv_vsetpvf
-#undef Perl_sv_setiv
-#define Perl_sv_setiv pPerl->Perl_sv_setiv
-#undef sv_setiv
-#define sv_setiv Perl_sv_setiv
-#undef Perl_sv_setpviv
-#define Perl_sv_setpviv pPerl->Perl_sv_setpviv
-#undef sv_setpviv
-#define sv_setpviv Perl_sv_setpviv
-#undef Perl_sv_setuv
-#define Perl_sv_setuv pPerl->Perl_sv_setuv
-#undef sv_setuv
-#define sv_setuv Perl_sv_setuv
-#undef Perl_sv_setnv
-#define Perl_sv_setnv pPerl->Perl_sv_setnv
-#undef sv_setnv
-#define sv_setnv Perl_sv_setnv
-#undef Perl_sv_setref_iv
-#define Perl_sv_setref_iv pPerl->Perl_sv_setref_iv
-#undef sv_setref_iv
-#define sv_setref_iv Perl_sv_setref_iv
-#undef Perl_sv_setref_nv
-#define Perl_sv_setref_nv pPerl->Perl_sv_setref_nv
-#undef sv_setref_nv
-#define sv_setref_nv Perl_sv_setref_nv
-#undef Perl_sv_setref_pv
-#define Perl_sv_setref_pv pPerl->Perl_sv_setref_pv
-#undef sv_setref_pv
-#define sv_setref_pv Perl_sv_setref_pv
-#undef Perl_sv_setref_pvn
-#define Perl_sv_setref_pvn pPerl->Perl_sv_setref_pvn
-#undef sv_setref_pvn
-#define sv_setref_pvn Perl_sv_setref_pvn
-#undef Perl_sv_setpv
-#define Perl_sv_setpv pPerl->Perl_sv_setpv
-#undef sv_setpv
-#define sv_setpv Perl_sv_setpv
-#undef Perl_sv_setpvn
-#define Perl_sv_setpvn pPerl->Perl_sv_setpvn
-#undef sv_setpvn
-#define sv_setpvn Perl_sv_setpvn
-#undef Perl_sv_setsv
-#define Perl_sv_setsv pPerl->Perl_sv_setsv
-#undef sv_setsv
-#define sv_setsv Perl_sv_setsv
-#undef Perl_sv_taint
-#define Perl_sv_taint pPerl->Perl_sv_taint
-#undef sv_taint
-#define sv_taint Perl_sv_taint
-#undef Perl_sv_tainted
-#define Perl_sv_tainted pPerl->Perl_sv_tainted
-#undef sv_tainted
-#define sv_tainted Perl_sv_tainted
-#undef Perl_sv_unmagic
-#define Perl_sv_unmagic pPerl->Perl_sv_unmagic
-#undef sv_unmagic
-#define sv_unmagic Perl_sv_unmagic
-#undef Perl_sv_unref
-#define Perl_sv_unref pPerl->Perl_sv_unref
-#undef sv_unref
-#define sv_unref Perl_sv_unref
-#undef Perl_sv_untaint
-#define Perl_sv_untaint pPerl->Perl_sv_untaint
-#undef sv_untaint
-#define sv_untaint Perl_sv_untaint
-#undef Perl_sv_upgrade
-#define Perl_sv_upgrade pPerl->Perl_sv_upgrade
-#undef sv_upgrade
-#define sv_upgrade Perl_sv_upgrade
-#undef Perl_sv_usepvn
-#define Perl_sv_usepvn pPerl->Perl_sv_usepvn
-#undef sv_usepvn
-#define sv_usepvn Perl_sv_usepvn
-#undef Perl_sv_vcatpvfn
-#define Perl_sv_vcatpvfn pPerl->Perl_sv_vcatpvfn
-#undef sv_vcatpvfn
-#define sv_vcatpvfn Perl_sv_vcatpvfn
-#undef Perl_sv_vsetpvfn
-#define Perl_sv_vsetpvfn pPerl->Perl_sv_vsetpvfn
-#undef sv_vsetpvfn
-#define sv_vsetpvfn Perl_sv_vsetpvfn
-#undef Perl_str_to_version
-#define Perl_str_to_version pPerl->Perl_str_to_version
-#undef str_to_version
-#define str_to_version Perl_str_to_version
-#undef Perl_swash_init
-#define Perl_swash_init pPerl->Perl_swash_init
-#undef swash_init
-#define swash_init Perl_swash_init
-#undef Perl_swash_fetch
-#define Perl_swash_fetch pPerl->Perl_swash_fetch
-#undef swash_fetch
-#define swash_fetch Perl_swash_fetch
-#undef Perl_taint_env
-#define Perl_taint_env pPerl->Perl_taint_env
-#undef taint_env
-#define taint_env Perl_taint_env
-#undef Perl_taint_proper
-#define Perl_taint_proper pPerl->Perl_taint_proper
-#undef taint_proper
-#define taint_proper Perl_taint_proper
-#undef Perl_to_utf8_lower
-#define Perl_to_utf8_lower pPerl->Perl_to_utf8_lower
-#undef to_utf8_lower
-#define to_utf8_lower Perl_to_utf8_lower
-#undef Perl_to_utf8_upper
-#define Perl_to_utf8_upper pPerl->Perl_to_utf8_upper
-#undef to_utf8_upper
-#define to_utf8_upper Perl_to_utf8_upper
-#undef Perl_to_utf8_title
-#define Perl_to_utf8_title pPerl->Perl_to_utf8_title
-#undef to_utf8_title
-#define to_utf8_title Perl_to_utf8_title
-#if defined(UNLINK_ALL_VERSIONS)
-#undef Perl_unlnk
-#define Perl_unlnk pPerl->Perl_unlnk
-#undef unlnk
-#define unlnk Perl_unlnk
-#endif
-#if defined(USE_THREADS)
-#undef Perl_unlock_condpair
-#define Perl_unlock_condpair pPerl->Perl_unlock_condpair
-#undef unlock_condpair
-#define unlock_condpair Perl_unlock_condpair
-#endif
-#undef Perl_unsharepvn
-#define Perl_unsharepvn pPerl->Perl_unsharepvn
-#undef unsharepvn
-#define unsharepvn Perl_unsharepvn
-#undef Perl_utf16_to_utf8
-#define Perl_utf16_to_utf8 pPerl->Perl_utf16_to_utf8
-#undef utf16_to_utf8
-#define utf16_to_utf8 Perl_utf16_to_utf8
-#undef Perl_utf16_to_utf8_reversed
-#define Perl_utf16_to_utf8_reversed pPerl->Perl_utf16_to_utf8_reversed
-#undef utf16_to_utf8_reversed
-#define utf16_to_utf8_reversed Perl_utf16_to_utf8_reversed
-#undef Perl_utf8_length
-#define Perl_utf8_length pPerl->Perl_utf8_length
-#undef utf8_length
-#define utf8_length Perl_utf8_length
-#undef Perl_utf8_distance
-#define Perl_utf8_distance pPerl->Perl_utf8_distance
-#undef utf8_distance
-#define utf8_distance Perl_utf8_distance
-#undef Perl_utf8_hop
-#define Perl_utf8_hop pPerl->Perl_utf8_hop
-#undef utf8_hop
-#define utf8_hop Perl_utf8_hop
-#undef Perl_utf8_to_bytes
-#define Perl_utf8_to_bytes pPerl->Perl_utf8_to_bytes
-#undef utf8_to_bytes
-#define utf8_to_bytes Perl_utf8_to_bytes
-#undef Perl_bytes_from_utf8
-#define Perl_bytes_from_utf8 pPerl->Perl_bytes_from_utf8
-#undef bytes_from_utf8
-#define bytes_from_utf8 Perl_bytes_from_utf8
-#undef Perl_bytes_to_utf8
-#define Perl_bytes_to_utf8 pPerl->Perl_bytes_to_utf8
-#undef bytes_to_utf8
-#define bytes_to_utf8 Perl_bytes_to_utf8
-#undef Perl_utf8_to_uv_simple
-#define Perl_utf8_to_uv_simple pPerl->Perl_utf8_to_uv_simple
-#undef utf8_to_uv_simple
-#define utf8_to_uv_simple Perl_utf8_to_uv_simple
-#undef Perl_utf8_to_uv
-#define Perl_utf8_to_uv pPerl->Perl_utf8_to_uv
-#undef utf8_to_uv
-#define utf8_to_uv Perl_utf8_to_uv
-#undef Perl_uv_to_utf8
-#define Perl_uv_to_utf8 pPerl->Perl_uv_to_utf8
-#undef uv_to_utf8
-#define uv_to_utf8 Perl_uv_to_utf8
-#undef Perl_warn
-#define Perl_warn pPerl->Perl_warn
-#undef warn
-#define warn Perl_warn
-#undef Perl_vwarn
-#define Perl_vwarn pPerl->Perl_vwarn
-#undef vwarn
-#define vwarn Perl_vwarn
-#undef Perl_warner
-#define Perl_warner pPerl->Perl_warner
-#undef warner
-#define warner Perl_warner
-#undef Perl_vwarner
-#define Perl_vwarner pPerl->Perl_vwarner
-#undef vwarner
-#define vwarner Perl_vwarner
-#undef Perl_whichsig
-#define Perl_whichsig pPerl->Perl_whichsig
-#undef whichsig
-#define whichsig Perl_whichsig
-#ifdef USE_PURE_BISON
-#endif
-#if defined(MYMALLOC)
-#undef Perl_dump_mstats
-#define Perl_dump_mstats pPerl->Perl_dump_mstats
-#undef dump_mstats
-#define dump_mstats Perl_dump_mstats
-#undef Perl_get_mstats
-#define Perl_get_mstats pPerl->Perl_get_mstats
-#undef get_mstats
-#define get_mstats Perl_get_mstats
-#endif
-#undef Perl_safesysmalloc
-#define Perl_safesysmalloc pPerl->Perl_safesysmalloc
-#undef safesysmalloc
-#define safesysmalloc Perl_safesysmalloc
-#undef Perl_safesyscalloc
-#define Perl_safesyscalloc pPerl->Perl_safesyscalloc
-#undef safesyscalloc
-#define safesyscalloc Perl_safesyscalloc
-#undef Perl_safesysrealloc
-#define Perl_safesysrealloc pPerl->Perl_safesysrealloc
-#undef safesysrealloc
-#define safesysrealloc Perl_safesysrealloc
-#undef Perl_safesysfree
-#define Perl_safesysfree pPerl->Perl_safesysfree
-#undef safesysfree
-#define safesysfree Perl_safesysfree
-#if defined(LEAKTEST)
-#undef Perl_safexmalloc
-#define Perl_safexmalloc pPerl->Perl_safexmalloc
-#undef safexmalloc
-#define safexmalloc Perl_safexmalloc
-#undef Perl_safexcalloc
-#define Perl_safexcalloc pPerl->Perl_safexcalloc
-#undef safexcalloc
-#define safexcalloc Perl_safexcalloc
-#undef Perl_safexrealloc
-#define Perl_safexrealloc pPerl->Perl_safexrealloc
-#undef safexrealloc
-#define safexrealloc Perl_safexrealloc
-#undef Perl_safexfree
-#define Perl_safexfree pPerl->Perl_safexfree
-#undef safexfree
-#define safexfree Perl_safexfree
-#endif
-#if defined(PERL_GLOBAL_STRUCT)
-#undef Perl_GetVars
-#define Perl_GetVars pPerl->Perl_GetVars
-#undef GetVars
-#define GetVars Perl_GetVars
-#endif
-#undef Perl_runops_standard
-#define Perl_runops_standard pPerl->Perl_runops_standard
-#undef runops_standard
-#define runops_standard Perl_runops_standard
-#undef Perl_runops_debug
-#define Perl_runops_debug pPerl->Perl_runops_debug
-#undef runops_debug
-#define runops_debug Perl_runops_debug
-#if defined(USE_THREADS)
-#undef Perl_sv_lock
-#define Perl_sv_lock pPerl->Perl_sv_lock
-#undef sv_lock
-#define sv_lock Perl_sv_lock
-#endif
-#undef Perl_sv_catpvf_mg
-#define Perl_sv_catpvf_mg pPerl->Perl_sv_catpvf_mg
-#undef sv_catpvf_mg
-#define sv_catpvf_mg Perl_sv_catpvf_mg
-#undef Perl_sv_vcatpvf_mg
-#define Perl_sv_vcatpvf_mg pPerl->Perl_sv_vcatpvf_mg
-#undef sv_vcatpvf_mg
-#define sv_vcatpvf_mg Perl_sv_vcatpvf_mg
-#undef Perl_sv_catpv_mg
-#define Perl_sv_catpv_mg pPerl->Perl_sv_catpv_mg
-#undef sv_catpv_mg
-#define sv_catpv_mg Perl_sv_catpv_mg
-#undef Perl_sv_catpvn_mg
-#define Perl_sv_catpvn_mg pPerl->Perl_sv_catpvn_mg
-#undef sv_catpvn_mg
-#define sv_catpvn_mg Perl_sv_catpvn_mg
-#undef Perl_sv_catsv_mg
-#define Perl_sv_catsv_mg pPerl->Perl_sv_catsv_mg
-#undef sv_catsv_mg
-#define sv_catsv_mg Perl_sv_catsv_mg
-#undef Perl_sv_setpvf_mg
-#define Perl_sv_setpvf_mg pPerl->Perl_sv_setpvf_mg
-#undef sv_setpvf_mg
-#define sv_setpvf_mg Perl_sv_setpvf_mg
-#undef Perl_sv_vsetpvf_mg
-#define Perl_sv_vsetpvf_mg pPerl->Perl_sv_vsetpvf_mg
-#undef sv_vsetpvf_mg
-#define sv_vsetpvf_mg Perl_sv_vsetpvf_mg
-#undef Perl_sv_setiv_mg
-#define Perl_sv_setiv_mg pPerl->Perl_sv_setiv_mg
-#undef sv_setiv_mg
-#define sv_setiv_mg Perl_sv_setiv_mg
-#undef Perl_sv_setpviv_mg
-#define Perl_sv_setpviv_mg pPerl->Perl_sv_setpviv_mg
-#undef sv_setpviv_mg
-#define sv_setpviv_mg Perl_sv_setpviv_mg
-#undef Perl_sv_setuv_mg
-#define Perl_sv_setuv_mg pPerl->Perl_sv_setuv_mg
-#undef sv_setuv_mg
-#define sv_setuv_mg Perl_sv_setuv_mg
-#undef Perl_sv_setnv_mg
-#define Perl_sv_setnv_mg pPerl->Perl_sv_setnv_mg
-#undef sv_setnv_mg
-#define sv_setnv_mg Perl_sv_setnv_mg
-#undef Perl_sv_setpv_mg
-#define Perl_sv_setpv_mg pPerl->Perl_sv_setpv_mg
-#undef sv_setpv_mg
-#define sv_setpv_mg Perl_sv_setpv_mg
-#undef Perl_sv_setpvn_mg
-#define Perl_sv_setpvn_mg pPerl->Perl_sv_setpvn_mg
-#undef sv_setpvn_mg
-#define sv_setpvn_mg Perl_sv_setpvn_mg
-#undef Perl_sv_setsv_mg
-#define Perl_sv_setsv_mg pPerl->Perl_sv_setsv_mg
-#undef sv_setsv_mg
-#define sv_setsv_mg Perl_sv_setsv_mg
-#undef Perl_sv_usepvn_mg
-#define Perl_sv_usepvn_mg pPerl->Perl_sv_usepvn_mg
-#undef sv_usepvn_mg
-#define sv_usepvn_mg Perl_sv_usepvn_mg
-#undef Perl_get_vtbl
-#define Perl_get_vtbl pPerl->Perl_get_vtbl
-#undef get_vtbl
-#define get_vtbl Perl_get_vtbl
-#undef Perl_dump_indent
-#define Perl_dump_indent pPerl->Perl_dump_indent
-#undef dump_indent
-#define dump_indent Perl_dump_indent
-#undef Perl_dump_vindent
-#define Perl_dump_vindent pPerl->Perl_dump_vindent
-#undef dump_vindent
-#define dump_vindent Perl_dump_vindent
-#undef Perl_do_gv_dump
-#define Perl_do_gv_dump pPerl->Perl_do_gv_dump
-#undef do_gv_dump
-#define do_gv_dump Perl_do_gv_dump
-#undef Perl_do_gvgv_dump
-#define Perl_do_gvgv_dump pPerl->Perl_do_gvgv_dump
-#undef do_gvgv_dump
-#define do_gvgv_dump Perl_do_gvgv_dump
-#undef Perl_do_hv_dump
-#define Perl_do_hv_dump pPerl->Perl_do_hv_dump
-#undef do_hv_dump
-#define do_hv_dump Perl_do_hv_dump
-#undef Perl_do_magic_dump
-#define Perl_do_magic_dump pPerl->Perl_do_magic_dump
-#undef do_magic_dump
-#define do_magic_dump Perl_do_magic_dump
-#undef Perl_do_op_dump
-#define Perl_do_op_dump pPerl->Perl_do_op_dump
-#undef do_op_dump
-#define do_op_dump Perl_do_op_dump
-#undef Perl_do_pmop_dump
-#define Perl_do_pmop_dump pPerl->Perl_do_pmop_dump
-#undef do_pmop_dump
-#define do_pmop_dump Perl_do_pmop_dump
-#undef Perl_do_sv_dump
-#define Perl_do_sv_dump pPerl->Perl_do_sv_dump
-#undef do_sv_dump
-#define do_sv_dump Perl_do_sv_dump
-#undef Perl_magic_dump
-#define Perl_magic_dump pPerl->Perl_magic_dump
-#undef magic_dump
-#define magic_dump Perl_magic_dump
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#undef Perl_default_protect
-#define Perl_default_protect pPerl->Perl_default_protect
-#undef default_protect
-#define default_protect Perl_default_protect
-#undef Perl_vdefault_protect
-#define Perl_vdefault_protect pPerl->Perl_vdefault_protect
-#undef vdefault_protect
-#define vdefault_protect Perl_vdefault_protect
-#endif
-#undef Perl_reginitcolors
-#define Perl_reginitcolors pPerl->Perl_reginitcolors
-#undef reginitcolors
-#define reginitcolors Perl_reginitcolors
-#undef Perl_sv_2pv_nolen
-#define Perl_sv_2pv_nolen pPerl->Perl_sv_2pv_nolen
-#undef sv_2pv_nolen
-#define sv_2pv_nolen Perl_sv_2pv_nolen
-#undef Perl_sv_2pvutf8_nolen
-#define Perl_sv_2pvutf8_nolen pPerl->Perl_sv_2pvutf8_nolen
-#undef sv_2pvutf8_nolen
-#define sv_2pvutf8_nolen Perl_sv_2pvutf8_nolen
-#undef Perl_sv_2pvbyte_nolen
-#define Perl_sv_2pvbyte_nolen pPerl->Perl_sv_2pvbyte_nolen
-#undef sv_2pvbyte_nolen
-#define sv_2pvbyte_nolen Perl_sv_2pvbyte_nolen
-#undef Perl_sv_pv
-#define Perl_sv_pv pPerl->Perl_sv_pv
-#undef sv_pv
-#define sv_pv Perl_sv_pv
-#undef Perl_sv_pvutf8
-#define Perl_sv_pvutf8 pPerl->Perl_sv_pvutf8
-#undef sv_pvutf8
-#define sv_pvutf8 Perl_sv_pvutf8
-#undef Perl_sv_pvbyte
-#define Perl_sv_pvbyte pPerl->Perl_sv_pvbyte
-#undef sv_pvbyte
-#define sv_pvbyte Perl_sv_pvbyte
-#undef Perl_sv_utf8_upgrade
-#define Perl_sv_utf8_upgrade pPerl->Perl_sv_utf8_upgrade
-#undef sv_utf8_upgrade
-#define sv_utf8_upgrade Perl_sv_utf8_upgrade
-#undef Perl_sv_utf8_downgrade
-#define Perl_sv_utf8_downgrade pPerl->Perl_sv_utf8_downgrade
-#undef sv_utf8_downgrade
-#define sv_utf8_downgrade Perl_sv_utf8_downgrade
-#undef Perl_sv_utf8_encode
-#define Perl_sv_utf8_encode pPerl->Perl_sv_utf8_encode
-#undef sv_utf8_encode
-#define sv_utf8_encode Perl_sv_utf8_encode
-#undef Perl_sv_utf8_decode
-#define Perl_sv_utf8_decode pPerl->Perl_sv_utf8_decode
-#undef sv_utf8_decode
-#define sv_utf8_decode Perl_sv_utf8_decode
-#undef Perl_sv_force_normal
-#define Perl_sv_force_normal pPerl->Perl_sv_force_normal
-#undef sv_force_normal
-#define sv_force_normal Perl_sv_force_normal
-#undef Perl_sv_add_backref
-#define Perl_sv_add_backref pPerl->Perl_sv_add_backref
-#undef sv_add_backref
-#define sv_add_backref Perl_sv_add_backref
-#undef Perl_sv_del_backref
-#define Perl_sv_del_backref pPerl->Perl_sv_del_backref
-#undef sv_del_backref
-#define sv_del_backref Perl_sv_del_backref
-#undef Perl_tmps_grow
-#define Perl_tmps_grow pPerl->Perl_tmps_grow
-#undef tmps_grow
-#define tmps_grow Perl_tmps_grow
-#undef Perl_sv_rvweaken
-#define Perl_sv_rvweaken pPerl->Perl_sv_rvweaken
-#undef sv_rvweaken
-#define sv_rvweaken Perl_sv_rvweaken
-#undef Perl_newANONATTRSUB
-#define Perl_newANONATTRSUB pPerl->Perl_newANONATTRSUB
-#undef newANONATTRSUB
-#define newANONATTRSUB Perl_newANONATTRSUB
-#undef Perl_newATTRSUB
-#define Perl_newATTRSUB pPerl->Perl_newATTRSUB
-#undef newATTRSUB
-#define newATTRSUB Perl_newATTRSUB
-#undef Perl_newMYSUB
-#define Perl_newMYSUB pPerl->Perl_newMYSUB
-#undef newMYSUB
-#define newMYSUB Perl_newMYSUB
-#if defined(USE_ITHREADS)
-#undef Perl_cx_dup
-#define Perl_cx_dup pPerl->Perl_cx_dup
-#undef cx_dup
-#define cx_dup Perl_cx_dup
-#undef Perl_si_dup
-#define Perl_si_dup pPerl->Perl_si_dup
-#undef si_dup
-#define si_dup Perl_si_dup
-#undef Perl_ss_dup
-#define Perl_ss_dup pPerl->Perl_ss_dup
-#undef ss_dup
-#define ss_dup Perl_ss_dup
-#undef Perl_any_dup
-#define Perl_any_dup pPerl->Perl_any_dup
-#undef any_dup
-#define any_dup Perl_any_dup
-#undef Perl_he_dup
-#define Perl_he_dup pPerl->Perl_he_dup
-#undef he_dup
-#define he_dup Perl_he_dup
-#undef Perl_re_dup
-#define Perl_re_dup pPerl->Perl_re_dup
-#undef re_dup
-#define re_dup Perl_re_dup
-#undef Perl_fp_dup
-#define Perl_fp_dup pPerl->Perl_fp_dup
-#undef fp_dup
-#define fp_dup Perl_fp_dup
-#undef Perl_dirp_dup
-#define Perl_dirp_dup pPerl->Perl_dirp_dup
-#undef dirp_dup
-#define dirp_dup Perl_dirp_dup
-#undef Perl_gp_dup
-#define Perl_gp_dup pPerl->Perl_gp_dup
-#undef gp_dup
-#define gp_dup Perl_gp_dup
-#undef Perl_mg_dup
-#define Perl_mg_dup pPerl->Perl_mg_dup
-#undef mg_dup
-#define mg_dup Perl_mg_dup
-#undef Perl_sv_dup
-#define Perl_sv_dup pPerl->Perl_sv_dup
-#undef sv_dup
-#define sv_dup Perl_sv_dup
-#if defined(HAVE_INTERP_INTERN)
-#undef Perl_sys_intern_dup
-#define Perl_sys_intern_dup pPerl->Perl_sys_intern_dup
-#undef sys_intern_dup
-#define sys_intern_dup Perl_sys_intern_dup
-#endif
-#undef Perl_ptr_table_new
-#define Perl_ptr_table_new pPerl->Perl_ptr_table_new
-#undef ptr_table_new
-#define ptr_table_new Perl_ptr_table_new
-#undef Perl_ptr_table_fetch
-#define Perl_ptr_table_fetch pPerl->Perl_ptr_table_fetch
-#undef ptr_table_fetch
-#define ptr_table_fetch Perl_ptr_table_fetch
-#undef Perl_ptr_table_store
-#define Perl_ptr_table_store pPerl->Perl_ptr_table_store
-#undef ptr_table_store
-#define ptr_table_store Perl_ptr_table_store
-#undef Perl_ptr_table_split
-#define Perl_ptr_table_split pPerl->Perl_ptr_table_split
-#undef ptr_table_split
-#define ptr_table_split Perl_ptr_table_split
-#undef Perl_ptr_table_clear
-#define Perl_ptr_table_clear pPerl->Perl_ptr_table_clear
-#undef ptr_table_clear
-#define ptr_table_clear Perl_ptr_table_clear
-#undef Perl_ptr_table_free
-#define Perl_ptr_table_free pPerl->Perl_ptr_table_free
-#undef ptr_table_free
-#define ptr_table_free Perl_ptr_table_free
-#endif
-#if defined(HAVE_INTERP_INTERN)
-#undef Perl_sys_intern_clear
-#define Perl_sys_intern_clear pPerl->Perl_sys_intern_clear
-#undef sys_intern_clear
-#define sys_intern_clear Perl_sys_intern_clear
-#undef Perl_sys_intern_init
-#define Perl_sys_intern_init pPerl->Perl_sys_intern_init
-#undef sys_intern_init
-#define sys_intern_init Perl_sys_intern_init
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-# if defined(PL_OP_SLAB_ALLOC)
-# endif
-#endif
-#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
-# if defined(IAMSUID)
-# endif
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#endif
-# if defined(USE_THREADS)
-# endif
-#endif
-#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#endif
-#endif
-#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-# endif
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-# if defined(DEBUGGING)
-# endif
-#endif
-#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
-#if 0
-#endif
-# if defined(CRIPPLED_CC)
-# endif
-# if defined(PERL_CR_FILTER)
-# endif
-#endif
-#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-# if defined(LEAKTEST)
-# endif
-#endif
-#if defined(PERL_OBJECT)
-#endif
-
-#endif /* PERL_CORE && PERL_OBJECT */
-#endif /* __objXSUB_h__ */
diff --git a/contrib/perl5/op.c b/contrib/perl5/op.c
deleted file mode 100644
index 5fe0a03..0000000
--- a/contrib/perl5/op.c
+++ /dev/null
@@ -1,6854 +0,0 @@
-/* op.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "You see: Mr. Drogo, he married poor Miss Primula Brandybuck. She was
- * our Mr. Bilbo's first cousin on the mother's side (her mother being the
- * youngest of the Old Took's daughters); and Mr. Drogo was his second
- * cousin. So Mr. Frodo is his first *and* second cousin, once removed
- * either way, as the saying is, if you follow me." --the Gaffer
- */
-
-#include "EXTERN.h"
-#define PERL_IN_OP_C
-#include "perl.h"
-#include "keywords.h"
-
-/* #define PL_OP_SLAB_ALLOC */
-
-#ifdef PL_OP_SLAB_ALLOC
-#define SLAB_SIZE 8192
-static char *PL_OpPtr = NULL;
-static int PL_OpSpace = 0;
-#define NewOp(m,var,c,type) do { if ((PL_OpSpace -= c*sizeof(type)) >= 0) \
- var = (type *)(PL_OpPtr -= c*sizeof(type)); \
- else \
- var = (type *) Slab_Alloc(m,c*sizeof(type)); \
- } while (0)
-
-STATIC void *
-S_Slab_Alloc(pTHX_ int m, size_t sz)
-{
- Newz(m,PL_OpPtr,SLAB_SIZE,char);
- PL_OpSpace = SLAB_SIZE - sz;
- return PL_OpPtr += PL_OpSpace;
-}
-
-#else
-#define NewOp(m, var, c, type) Newz(m, var, c, type)
-#endif
-/*
- * In the following definition, the ", Nullop" is just to make the compiler
- * think the expression is of the right type: croak actually does a Siglongjmp.
- */
-#define CHECKOP(type,o) \
- ((PL_op_mask && PL_op_mask[type]) \
- ? ( op_free((OP*)o), \
- Perl_croak(aTHX_ "%s trapped by operation mask", PL_op_desc[type]), \
- Nullop ) \
- : CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
-
-#define PAD_MAX 999999999
-#define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
-
-STATIC char*
-S_gv_ename(pTHX_ GV *gv)
-{
- STRLEN n_a;
- SV* tmpsv = sv_newmortal();
- gv_efullname3(tmpsv, gv, Nullch);
- return SvPV(tmpsv,n_a);
-}
-
-STATIC OP *
-S_no_fh_allowed(pTHX_ OP *o)
-{
- yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function",
- PL_op_desc[o->op_type]));
- return o;
-}
-
-STATIC OP *
-S_too_few_arguments(pTHX_ OP *o, char *name)
-{
- yyerror(Perl_form(aTHX_ "Not enough arguments for %s", name));
- return o;
-}
-
-STATIC OP *
-S_too_many_arguments(pTHX_ OP *o, char *name)
-{
- yyerror(Perl_form(aTHX_ "Too many arguments for %s", name));
- return o;
-}
-
-STATIC void
-S_bad_type(pTHX_ I32 n, char *t, char *name, OP *kid)
-{
- yyerror(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)",
- (int)n, name, t, PL_op_desc[kid->op_type]));
-}
-
-STATIC void
-S_no_bareword_allowed(pTHX_ OP *o)
-{
- qerror(Perl_mess(aTHX_
- "Bareword \"%s\" not allowed while \"strict subs\" in use",
- SvPV_nolen(cSVOPo_sv)));
-}
-
-STATIC U8*
-S_trlist_upgrade(pTHX_ U8** sp, U8** ep)
-{
- U8 *s = *sp;
- U8 *e = *ep;
- U8 *d;
-
- Newz(801, d, (e - s) * 2, U8);
- *sp = d;
-
- while (s < e) {
- if (*s < 0x80 || *s == 0xff)
- *d++ = *s++;
- else {
- U8 c = *s++;
- *d++ = ((c >> 6) | 0xc0);
- *d++ = ((c & 0x3f) | 0x80);
- }
- }
- *ep = d;
- return *sp;
-}
-
-
-/* "register" allocation */
-
-PADOFFSET
-Perl_pad_allocmy(pTHX_ char *name)
-{
- PADOFFSET off;
- SV *sv;
-
- if (!(PL_in_my == KEY_our ||
- isALPHA(name[1]) ||
- (PL_hints & HINT_UTF8 && UTF8_IS_START(name[1])) ||
- (name[1] == '_' && (int)strlen(name) > 2)))
- {
- if (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1])) {
- /* 1999-02-27 mjd@plover.com */
- char *p;
- p = strchr(name, '\0');
- /* The next block assumes the buffer is at least 205 chars
- long. At present, it's always at least 256 chars. */
- if (p-name > 200) {
- strcpy(name+200, "...");
- p = name+199;
- }
- else {
- p[1] = '\0';
- }
- /* Move everything else down one character */
- for (; p-name > 2; p--)
- *p = *(p-1);
- name[2] = toCTRL(name[1]);
- name[1] = '^';
- }
- yyerror(Perl_form(aTHX_ "Can't use global %s in \"my\"",name));
- }
- if (ckWARN(WARN_MISC) && AvFILLp(PL_comppad_name) >= 0) {
- SV **svp = AvARRAY(PL_comppad_name);
- HV *ourstash = (PL_curstash ? PL_curstash : PL_defstash);
- PADOFFSET top = AvFILLp(PL_comppad_name);
- for (off = top; off > PL_comppad_name_floor; off--) {
- if ((sv = svp[off])
- && sv != &PL_sv_undef
- && (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
- && (PL_in_my != KEY_our
- || ((SvFLAGS(sv) & SVpad_OUR) && GvSTASH(sv) == ourstash))
- && strEQ(name, SvPVX(sv)))
- {
- Perl_warner(aTHX_ WARN_MISC,
- "\"%s\" variable %s masks earlier declaration in same %s",
- (PL_in_my == KEY_our ? "our" : "my"),
- name,
- (SvIVX(sv) == PAD_MAX ? "scope" : "statement"));
- --off;
- break;
- }
- }
- if (PL_in_my == KEY_our) {
- do {
- if ((sv = svp[off])
- && sv != &PL_sv_undef
- && (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
- && ((SvFLAGS(sv) & SVpad_OUR) && GvSTASH(sv) == ourstash)
- && strEQ(name, SvPVX(sv)))
- {
- Perl_warner(aTHX_ WARN_MISC,
- "\"our\" variable %s redeclared", name);
- Perl_warner(aTHX_ WARN_MISC,
- "\t(Did you mean \"local\" instead of \"our\"?)\n");
- break;
- }
- } while ( off-- > 0 );
- }
- }
- off = pad_alloc(OP_PADSV, SVs_PADMY);
- sv = NEWSV(1102,0);
- sv_upgrade(sv, SVt_PVNV);
- sv_setpv(sv, name);
- if (PL_in_my_stash) {
- if (*name != '$')
- yyerror(Perl_form(aTHX_ "Can't declare class for non-scalar %s in \"%s\"",
- name, PL_in_my == KEY_our ? "our" : "my"));
- SvOBJECT_on(sv);
- (void)SvUPGRADE(sv, SVt_PVMG);
- SvSTASH(sv) = (HV*)SvREFCNT_inc(PL_in_my_stash);
- PL_sv_objcount++;
- }
- if (PL_in_my == KEY_our) {
- (void)SvUPGRADE(sv, SVt_PVGV);
- GvSTASH(sv) = (HV*)SvREFCNT_inc(PL_curstash ? (SV*)PL_curstash : (SV*)PL_defstash);
- SvFLAGS(sv) |= SVpad_OUR;
- }
- av_store(PL_comppad_name, off, sv);
- SvNVX(sv) = (NV)PAD_MAX;
- SvIVX(sv) = 0; /* Not yet introduced--see newSTATEOP */
- if (!PL_min_intro_pending)
- PL_min_intro_pending = off;
- PL_max_intro_pending = off;
- if (*name == '@')
- av_store(PL_comppad, off, (SV*)newAV());
- else if (*name == '%')
- av_store(PL_comppad, off, (SV*)newHV());
- SvPADMY_on(PL_curpad[off]);
- return off;
-}
-
-STATIC PADOFFSET
-S_pad_addlex(pTHX_ SV *proto_namesv)
-{
- SV *namesv = NEWSV(1103,0);
- PADOFFSET newoff = pad_alloc(OP_PADSV, SVs_PADMY);
- sv_upgrade(namesv, SVt_PVNV);
- sv_setpv(namesv, SvPVX(proto_namesv));
- av_store(PL_comppad_name, newoff, namesv);
- SvNVX(namesv) = (NV)PL_curcop->cop_seq;
- SvIVX(namesv) = PAD_MAX; /* A ref, intro immediately */
- SvFAKE_on(namesv); /* A ref, not a real var */
- if (SvFLAGS(proto_namesv) & SVpad_OUR) { /* An "our" variable */
- SvFLAGS(namesv) |= SVpad_OUR;
- (void)SvUPGRADE(namesv, SVt_PVGV);
- GvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*)GvSTASH(proto_namesv));
- }
- if (SvOBJECT(proto_namesv)) { /* A typed var */
- SvOBJECT_on(namesv);
- (void)SvUPGRADE(namesv, SVt_PVMG);
- SvSTASH(namesv) = (HV*)SvREFCNT_inc((SV*)SvSTASH(proto_namesv));
- PL_sv_objcount++;
- }
- return newoff;
-}
-
-#define FINDLEX_NOSEARCH 1 /* don't search outer contexts */
-
-STATIC PADOFFSET
-S_pad_findlex(pTHX_ char *name, PADOFFSET newoff, U32 seq, CV* startcv,
- I32 cx_ix, I32 saweval, U32 flags)
-{
- CV *cv;
- I32 off;
- SV *sv;
- register I32 i;
- register PERL_CONTEXT *cx;
-
- for (cv = startcv; cv; cv = CvOUTSIDE(cv)) {
- AV *curlist = CvPADLIST(cv);
- SV **svp = av_fetch(curlist, 0, FALSE);
- AV *curname;
-
- if (!svp || *svp == &PL_sv_undef)
- continue;
- curname = (AV*)*svp;
- svp = AvARRAY(curname);
- for (off = AvFILLp(curname); off > 0; off--) {
- if ((sv = svp[off]) &&
- sv != &PL_sv_undef &&
- seq <= SvIVX(sv) &&
- seq > I_32(SvNVX(sv)) &&
- strEQ(SvPVX(sv), name))
- {
- I32 depth;
- AV *oldpad;
- SV *oldsv;
-
- depth = CvDEPTH(cv);
- if (!depth) {
- if (newoff) {
- if (SvFAKE(sv))
- continue;
- return 0; /* don't clone from inactive stack frame */
- }
- depth = 1;
- }
- oldpad = (AV*)AvARRAY(curlist)[depth];
- oldsv = *av_fetch(oldpad, off, TRUE);
- if (!newoff) { /* Not a mere clone operation. */
- newoff = pad_addlex(sv);
- if (CvANON(PL_compcv) || SvTYPE(PL_compcv) == SVt_PVFM) {
- /* "It's closures all the way down." */
- CvCLONE_on(PL_compcv);
- if (cv == startcv) {
- if (CvANON(PL_compcv))
- oldsv = Nullsv; /* no need to keep ref */
- }
- else {
- CV *bcv;
- for (bcv = startcv;
- bcv && bcv != cv && !CvCLONE(bcv);
- bcv = CvOUTSIDE(bcv))
- {
- if (CvANON(bcv)) {
- /* install the missing pad entry in intervening
- * nested subs and mark them cloneable.
- * XXX fix pad_foo() to not use globals */
- AV *ocomppad_name = PL_comppad_name;
- AV *ocomppad = PL_comppad;
- SV **ocurpad = PL_curpad;
- AV *padlist = CvPADLIST(bcv);
- PL_comppad_name = (AV*)AvARRAY(padlist)[0];
- PL_comppad = (AV*)AvARRAY(padlist)[1];
- PL_curpad = AvARRAY(PL_comppad);
- pad_addlex(sv);
- PL_comppad_name = ocomppad_name;
- PL_comppad = ocomppad;
- PL_curpad = ocurpad;
- CvCLONE_on(bcv);
- }
- else {
- if (ckWARN(WARN_CLOSURE)
- && !CvUNIQUE(bcv) && !CvUNIQUE(cv))
- {
- Perl_warner(aTHX_ WARN_CLOSURE,
- "Variable \"%s\" may be unavailable",
- name);
- }
- break;
- }
- }
- }
- }
- else if (!CvUNIQUE(PL_compcv)) {
- if (ckWARN(WARN_CLOSURE) && !SvFAKE(sv) && !CvUNIQUE(cv)
- && !(SvFLAGS(sv) & SVpad_OUR))
- {
- Perl_warner(aTHX_ WARN_CLOSURE,
- "Variable \"%s\" will not stay shared", name);
- }
- }
- }
- av_store(PL_comppad, newoff, SvREFCNT_inc(oldsv));
- return newoff;
- }
- }
- }
-
- if (flags & FINDLEX_NOSEARCH)
- return 0;
-
- /* Nothing in current lexical context--try eval's context, if any.
- * This is necessary to let the perldb get at lexically scoped variables.
- * XXX This will also probably interact badly with eval tree caching.
- */
-
- for (i = cx_ix; i >= 0; i--) {
- cx = &cxstack[i];
- switch (CxTYPE(cx)) {
- default:
- if (i == 0 && saweval) {
- seq = cxstack[saweval].blk_oldcop->cop_seq;
- return pad_findlex(name, newoff, seq, PL_main_cv, -1, saweval, 0);
- }
- break;
- case CXt_EVAL:
- switch (cx->blk_eval.old_op_type) {
- case OP_ENTEREVAL:
- if (CxREALEVAL(cx))
- saweval = i;
- break;
- case OP_DOFILE:
- case OP_REQUIRE:
- /* require/do must have their own scope */
- return 0;
- }
- break;
- case CXt_FORMAT:
- case CXt_SUB:
- if (!saweval)
- return 0;
- cv = cx->blk_sub.cv;
- if (PL_debstash && CvSTASH(cv) == PL_debstash) { /* ignore DB'* scope */
- saweval = i; /* so we know where we were called from */
- continue;
- }
- seq = cxstack[saweval].blk_oldcop->cop_seq;
- return pad_findlex(name, newoff, seq, cv, i-1, saweval,FINDLEX_NOSEARCH);
- }
- }
-
- return 0;
-}
-
-PADOFFSET
-Perl_pad_findmy(pTHX_ char *name)
-{
- I32 off;
- I32 pendoff = 0;
- SV *sv;
- SV **svp = AvARRAY(PL_comppad_name);
- U32 seq = PL_cop_seqmax;
- PERL_CONTEXT *cx;
- CV *outside;
-
-#ifdef USE_THREADS
- /*
- * Special case to get lexical (and hence per-thread) @_.
- * XXX I need to find out how to tell at parse-time whether use
- * of @_ should refer to a lexical (from a sub) or defgv (global
- * scope and maybe weird sub-ish things like formats). See
- * startsub in perly.y. It's possible that @_ could be lexical
- * (at least from subs) even in non-threaded perl.
- */
- if (strEQ(name, "@_"))
- return 0; /* success. (NOT_IN_PAD indicates failure) */
-#endif /* USE_THREADS */
-
- /* The one we're looking for is probably just before comppad_name_fill. */
- for (off = AvFILLp(PL_comppad_name); off > 0; off--) {
- if ((sv = svp[off]) &&
- sv != &PL_sv_undef &&
- (!SvIVX(sv) ||
- (seq <= SvIVX(sv) &&
- seq > I_32(SvNVX(sv)))) &&
- strEQ(SvPVX(sv), name))
- {
- if (SvIVX(sv) || SvFLAGS(sv) & SVpad_OUR)
- return (PADOFFSET)off;
- pendoff = off; /* this pending def. will override import */
- }
- }
-
- outside = CvOUTSIDE(PL_compcv);
-
- /* Check if if we're compiling an eval'', and adjust seq to be the
- * eval's seq number. This depends on eval'' having a non-null
- * CvOUTSIDE() while it is being compiled. The eval'' itself is
- * identified by CvEVAL being true and CvGV being null. */
- if (outside && CvEVAL(PL_compcv) && !CvGV(PL_compcv) && cxstack_ix >= 0) {
- cx = &cxstack[cxstack_ix];
- if (CxREALEVAL(cx))
- seq = cx->blk_oldcop->cop_seq;
- }
-
- /* See if it's in a nested scope */
- off = pad_findlex(name, 0, seq, outside, cxstack_ix, 0, 0);
- if (off) {
- /* If there is a pending local definition, this new alias must die */
- if (pendoff)
- SvIVX(AvARRAY(PL_comppad_name)[off]) = seq;
- return off; /* pad_findlex returns 0 for failure...*/
- }
- return NOT_IN_PAD; /* ...but we return NOT_IN_PAD for failure */
-}
-
-void
-Perl_pad_leavemy(pTHX_ I32 fill)
-{
- I32 off;
- SV **svp = AvARRAY(PL_comppad_name);
- SV *sv;
- if (PL_min_intro_pending && fill < PL_min_intro_pending) {
- for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) {
- if ((sv = svp[off]) && sv != &PL_sv_undef && ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "%s never introduced", SvPVX(sv));
- }
- }
- /* "Deintroduce" my variables that are leaving with this scope. */
- for (off = AvFILLp(PL_comppad_name); off > fill; off--) {
- if ((sv = svp[off]) && sv != &PL_sv_undef && SvIVX(sv) == PAD_MAX)
- SvIVX(sv) = PL_cop_seqmax;
- }
-}
-
-PADOFFSET
-Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype)
-{
- SV *sv;
- I32 retval;
-
- if (AvARRAY(PL_comppad) != PL_curpad)
- Perl_croak(aTHX_ "panic: pad_alloc");
- if (PL_pad_reset_pending)
- pad_reset();
- if (tmptype & SVs_PADMY) {
- do {
- sv = *av_fetch(PL_comppad, AvFILLp(PL_comppad) + 1, TRUE);
- } while (SvPADBUSY(sv)); /* need a fresh one */
- retval = AvFILLp(PL_comppad);
- }
- else {
- SV **names = AvARRAY(PL_comppad_name);
- SSize_t names_fill = AvFILLp(PL_comppad_name);
- for (;;) {
- /*
- * "foreach" index vars temporarily become aliases to non-"my"
- * values. Thus we must skip, not just pad values that are
- * marked as current pad values, but also those with names.
- */
- if (++PL_padix <= names_fill &&
- (sv = names[PL_padix]) && sv != &PL_sv_undef)
- continue;
- sv = *av_fetch(PL_comppad, PL_padix, TRUE);
- if (!(SvFLAGS(sv) & (SVs_PADTMP|SVs_PADMY)) && !IS_PADGV(sv))
- break;
- }
- retval = PL_padix;
- }
- SvFLAGS(sv) |= tmptype;
- PL_curpad = AvARRAY(PL_comppad);
-#ifdef USE_THREADS
- DEBUG_X(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" Pad 0x%"UVxf" alloc %ld for %s\n",
- PTR2UV(thr), PTR2UV(PL_curpad),
- (long) retval, PL_op_name[optype]));
-#else
- DEBUG_X(PerlIO_printf(Perl_debug_log,
- "Pad 0x%"UVxf" alloc %ld for %s\n",
- PTR2UV(PL_curpad),
- (long) retval, PL_op_name[optype]));
-#endif /* USE_THREADS */
- return (PADOFFSET)retval;
-}
-
-SV *
-Perl_pad_sv(pTHX_ PADOFFSET po)
-{
-#ifdef USE_THREADS
- DEBUG_X(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" Pad 0x%"UVxf" sv %"IVdf"\n",
- PTR2UV(thr), PTR2UV(PL_curpad), (IV)po));
-#else
- if (!po)
- Perl_croak(aTHX_ "panic: pad_sv po");
- DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%"UVxf" sv %"IVdf"\n",
- PTR2UV(PL_curpad), (IV)po));
-#endif /* USE_THREADS */
- return PL_curpad[po]; /* eventually we'll turn this into a macro */
-}
-
-void
-Perl_pad_free(pTHX_ PADOFFSET po)
-{
- if (!PL_curpad)
- return;
- if (AvARRAY(PL_comppad) != PL_curpad)
- Perl_croak(aTHX_ "panic: pad_free curpad");
- if (!po)
- Perl_croak(aTHX_ "panic: pad_free po");
-#ifdef USE_THREADS
- DEBUG_X(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" Pad 0x%"UVxf" free %"IVdf"\n",
- PTR2UV(thr), PTR2UV(PL_curpad), (IV)po));
-#else
- DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%"UVxf" free %"IVdf"\n",
- PTR2UV(PL_curpad), (IV)po));
-#endif /* USE_THREADS */
- if (PL_curpad[po] && PL_curpad[po] != &PL_sv_undef) {
- SvPADTMP_off(PL_curpad[po]);
-#ifdef USE_ITHREADS
- SvREADONLY_off(PL_curpad[po]); /* could be a freed constant */
-#endif
- }
- if ((I32)po < PL_padix)
- PL_padix = po - 1;
-}
-
-void
-Perl_pad_swipe(pTHX_ PADOFFSET po)
-{
- if (AvARRAY(PL_comppad) != PL_curpad)
- Perl_croak(aTHX_ "panic: pad_swipe curpad");
- if (!po)
- Perl_croak(aTHX_ "panic: pad_swipe po");
-#ifdef USE_THREADS
- DEBUG_X(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" Pad 0x%"UVxf" swipe %"IVdf"\n",
- PTR2UV(thr), PTR2UV(PL_curpad), (IV)po));
-#else
- DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%"UVxf" swipe %"IVdf"\n",
- PTR2UV(PL_curpad), (IV)po));
-#endif /* USE_THREADS */
- SvPADTMP_off(PL_curpad[po]);
- PL_curpad[po] = NEWSV(1107,0);
- SvPADTMP_on(PL_curpad[po]);
- if ((I32)po < PL_padix)
- PL_padix = po - 1;
-}
-
-/* XXX pad_reset() is currently disabled because it results in serious bugs.
- * It causes pad temp TARGs to be shared between OPs. Since TARGs are pushed
- * on the stack by OPs that use them, there are several ways to get an alias
- * to a shared TARG. Such an alias will change randomly and unpredictably.
- * We avoid doing this until we can think of a Better Way.
- * GSAR 97-10-29 */
-void
-Perl_pad_reset(pTHX)
-{
-#ifdef USE_BROKEN_PAD_RESET
- register I32 po;
-
- if (AvARRAY(PL_comppad) != PL_curpad)
- Perl_croak(aTHX_ "panic: pad_reset curpad");
-#ifdef USE_THREADS
- DEBUG_X(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" Pad 0x%"UVxf" reset\n",
- PTR2UV(thr), PTR2UV(PL_curpad)));
-#else
- DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%"UVxf" reset\n",
- PTR2UV(PL_curpad)));
-#endif /* USE_THREADS */
- if (!PL_tainting) { /* Can't mix tainted and non-tainted temporaries. */
- for (po = AvMAX(PL_comppad); po > PL_padix_floor; po--) {
- if (PL_curpad[po] && !SvIMMORTAL(PL_curpad[po]))
- SvPADTMP_off(PL_curpad[po]);
- }
- PL_padix = PL_padix_floor;
- }
-#endif
- PL_pad_reset_pending = FALSE;
-}
-
-#ifdef USE_THREADS
-/* find_threadsv is not reentrant */
-PADOFFSET
-Perl_find_threadsv(pTHX_ const char *name)
-{
- char *p;
- PADOFFSET key;
- SV **svp;
- /* We currently only handle names of a single character */
- p = strchr(PL_threadsv_names, *name);
- if (!p)
- return NOT_IN_PAD;
- key = p - PL_threadsv_names;
- MUTEX_LOCK(&thr->mutex);
- svp = av_fetch(thr->threadsv, key, FALSE);
- if (svp)
- MUTEX_UNLOCK(&thr->mutex);
- else {
- SV *sv = NEWSV(0, 0);
- av_store(thr->threadsv, key, sv);
- thr->threadsvp = AvARRAY(thr->threadsv);
- MUTEX_UNLOCK(&thr->mutex);
- /*
- * Some magic variables used to be automagically initialised
- * in gv_fetchpv. Those which are now per-thread magicals get
- * initialised here instead.
- */
- switch (*name) {
- case '_':
- break;
- case ';':
- sv_setpv(sv, "\034");
- sv_magic(sv, 0, 0, name, 1);
- break;
- case '&':
- case '`':
- case '\'':
- PL_sawampersand = TRUE;
- /* FALL THROUGH */
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- SvREADONLY_on(sv);
- /* FALL THROUGH */
-
- /* XXX %! tied to Errno.pm needs to be added here.
- * See gv_fetchpv(). */
- /* case '!': */
-
- default:
- sv_magic(sv, 0, 0, name, 1);
- }
- DEBUG_S(PerlIO_printf(Perl_error_log,
- "find_threadsv: new SV %p for $%s%c\n",
- sv, (*name < 32) ? "^" : "",
- (*name < 32) ? toCTRL(*name) : *name));
- }
- return key;
-}
-#endif /* USE_THREADS */
-
-/* Destructor */
-
-void
-Perl_op_free(pTHX_ OP *o)
-{
- register OP *kid, *nextkid;
- OPCODE type;
-
- if (!o || o->op_seq == (U16)-1)
- return;
-
- if (o->op_private & OPpREFCOUNTED) {
- switch (o->op_type) {
- case OP_LEAVESUB:
- case OP_LEAVESUBLV:
- case OP_LEAVEEVAL:
- case OP_LEAVE:
- case OP_SCOPE:
- case OP_LEAVEWRITE:
- OP_REFCNT_LOCK;
- if (OpREFCNT_dec(o)) {
- OP_REFCNT_UNLOCK;
- return;
- }
- OP_REFCNT_UNLOCK;
- break;
- default:
- break;
- }
- }
-
- if (o->op_flags & OPf_KIDS) {
- for (kid = cUNOPo->op_first; kid; kid = nextkid) {
- nextkid = kid->op_sibling; /* Get before next freeing kid */
- op_free(kid);
- }
- }
- type = o->op_type;
- if (type == OP_NULL)
- type = o->op_targ;
-
- /* COP* is not cleared by op_clear() so that we may track line
- * numbers etc even after null() */
- if (type == OP_NEXTSTATE || type == OP_SETSTATE || type == OP_DBSTATE)
- cop_free((COP*)o);
-
- op_clear(o);
-
-#ifdef PL_OP_SLAB_ALLOC
- if ((char *) o == PL_OpPtr)
- {
- }
-#else
- Safefree(o);
-#endif
-}
-
-STATIC void
-S_op_clear(pTHX_ OP *o)
-{
- switch (o->op_type) {
- case OP_NULL: /* Was holding old type, if any. */
- case OP_ENTEREVAL: /* Was holding hints. */
-#ifdef USE_THREADS
- case OP_THREADSV: /* Was holding index into thr->threadsv AV. */
-#endif
- o->op_targ = 0;
- break;
-#ifdef USE_THREADS
- case OP_ENTERITER:
- if (!(o->op_flags & OPf_SPECIAL))
- break;
- /* FALL THROUGH */
-#endif /* USE_THREADS */
- default:
- if (!(o->op_flags & OPf_REF)
- || (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)))
- break;
- /* FALL THROUGH */
- case OP_GVSV:
- case OP_GV:
- case OP_AELEMFAST:
-#ifdef USE_ITHREADS
- if (cPADOPo->op_padix > 0) {
- if (PL_curpad) {
- GV *gv = cGVOPo_gv;
- pad_swipe(cPADOPo->op_padix);
- /* No GvIN_PAD_off(gv) here, because other references may still
- * exist on the pad */
- SvREFCNT_dec(gv);
- }
- cPADOPo->op_padix = 0;
- }
-#else
- SvREFCNT_dec(cSVOPo->op_sv);
- cSVOPo->op_sv = Nullsv;
-#endif
- break;
- case OP_METHOD_NAMED:
- case OP_CONST:
- SvREFCNT_dec(cSVOPo->op_sv);
- cSVOPo->op_sv = Nullsv;
- break;
- case OP_GOTO:
- case OP_NEXT:
- case OP_LAST:
- case OP_REDO:
- if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS))
- break;
- /* FALL THROUGH */
- case OP_TRANS:
- if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
- SvREFCNT_dec(cSVOPo->op_sv);
- cSVOPo->op_sv = Nullsv;
- }
- else {
- Safefree(cPVOPo->op_pv);
- cPVOPo->op_pv = Nullch;
- }
- break;
- case OP_SUBST:
- op_free(cPMOPo->op_pmreplroot);
- goto clear_pmop;
- case OP_PUSHRE:
-#ifdef USE_ITHREADS
- if ((PADOFFSET)cPMOPo->op_pmreplroot) {
- if (PL_curpad) {
- GV *gv = (GV*)PL_curpad[(PADOFFSET)cPMOPo->op_pmreplroot];
- pad_swipe((PADOFFSET)cPMOPo->op_pmreplroot);
- /* No GvIN_PAD_off(gv) here, because other references may still
- * exist on the pad */
- SvREFCNT_dec(gv);
- }
- }
-#else
- SvREFCNT_dec((SV*)cPMOPo->op_pmreplroot);
-#endif
- /* FALL THROUGH */
- case OP_MATCH:
- case OP_QR:
-clear_pmop:
- cPMOPo->op_pmreplroot = Nullop;
- ReREFCNT_dec(cPMOPo->op_pmregexp);
- cPMOPo->op_pmregexp = (REGEXP*)NULL;
- break;
- }
-
- if (o->op_targ > 0) {
- pad_free(o->op_targ);
- o->op_targ = 0;
- }
-}
-
-STATIC void
-S_cop_free(pTHX_ COP* cop)
-{
- Safefree(cop->cop_label);
-#ifdef USE_ITHREADS
- Safefree(CopFILE(cop)); /* XXX share in a pvtable? */
- Safefree(CopSTASHPV(cop)); /* XXX share in a pvtable? */
-#else
- /* NOTE: COP.cop_stash is not refcounted */
- SvREFCNT_dec(CopFILEGV(cop));
-#endif
- if (! specialWARN(cop->cop_warnings))
- SvREFCNT_dec(cop->cop_warnings);
-}
-
-STATIC void
-S_null(pTHX_ OP *o)
-{
- if (o->op_type == OP_NULL)
- return;
- op_clear(o);
- o->op_targ = o->op_type;
- o->op_type = OP_NULL;
- o->op_ppaddr = PL_ppaddr[OP_NULL];
-}
-
-/* Contextualizers */
-
-#define LINKLIST(o) ((o)->op_next ? (o)->op_next : linklist((OP*)o))
-
-OP *
-Perl_linklist(pTHX_ OP *o)
-{
- register OP *kid;
-
- if (o->op_next)
- return o->op_next;
-
- /* establish postfix order */
- if (cUNOPo->op_first) {
- o->op_next = LINKLIST(cUNOPo->op_first);
- for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
- if (kid->op_sibling)
- kid->op_next = LINKLIST(kid->op_sibling);
- else
- kid->op_next = o;
- }
- }
- else
- o->op_next = o;
-
- return o->op_next;
-}
-
-OP *
-Perl_scalarkids(pTHX_ OP *o)
-{
- OP *kid;
- if (o && o->op_flags & OPf_KIDS) {
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
- scalar(kid);
- }
- return o;
-}
-
-STATIC OP *
-S_scalarboolean(pTHX_ OP *o)
-{
- if (o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
- if (ckWARN(WARN_SYNTAX)) {
- line_t oldline = CopLINE(PL_curcop);
-
- if (PL_copline != NOLINE)
- CopLINE_set(PL_curcop, PL_copline);
- Perl_warner(aTHX_ WARN_SYNTAX, "Found = in conditional, should be ==");
- CopLINE_set(PL_curcop, oldline);
- }
- }
- return scalar(o);
-}
-
-OP *
-Perl_scalar(pTHX_ OP *o)
-{
- OP *kid;
-
- /* assumes no premature commitment */
- if (!o || (o->op_flags & OPf_WANT) || PL_error_count
- || o->op_type == OP_RETURN)
- {
- return o;
- }
-
- o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
-
- switch (o->op_type) {
- case OP_REPEAT:
- if (o->op_private & OPpREPEAT_DOLIST)
- null(((LISTOP*)cBINOPo->op_first)->op_first);
- scalar(cBINOPo->op_first);
- break;
- case OP_OR:
- case OP_AND:
- case OP_COND_EXPR:
- for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
- scalar(kid);
- break;
- case OP_SPLIT:
- if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
- if (!kPMOP->op_pmreplroot)
- deprecate("implicit split to @_");
- }
- /* FALL THROUGH */
- case OP_MATCH:
- case OP_QR:
- case OP_SUBST:
- case OP_NULL:
- default:
- if (o->op_flags & OPf_KIDS) {
- for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
- scalar(kid);
- }
- break;
- case OP_LEAVE:
- case OP_LEAVETRY:
- kid = cLISTOPo->op_first;
- scalar(kid);
- while ((kid = kid->op_sibling)) {
- if (kid->op_sibling)
- scalarvoid(kid);
- else
- scalar(kid);
- }
- WITH_THR(PL_curcop = &PL_compiling);
- break;
- case OP_SCOPE:
- case OP_LINESEQ:
- case OP_LIST:
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
- if (kid->op_sibling)
- scalarvoid(kid);
- else
- scalar(kid);
- }
- WITH_THR(PL_curcop = &PL_compiling);
- break;
- }
- return o;
-}
-
-OP *
-Perl_scalarvoid(pTHX_ OP *o)
-{
- OP *kid;
- char* useless = 0;
- SV* sv;
- U8 want;
-
- if (o->op_type == OP_NEXTSTATE
- || o->op_type == OP_SETSTATE
- || o->op_type == OP_DBSTATE
- || (o->op_type == OP_NULL && (o->op_targ == OP_NEXTSTATE
- || o->op_targ == OP_SETSTATE
- || o->op_targ == OP_DBSTATE)))
- PL_curcop = (COP*)o; /* for warning below */
-
- /* assumes no premature commitment */
- want = o->op_flags & OPf_WANT;
- if ((want && want != OPf_WANT_SCALAR) || PL_error_count
- || o->op_type == OP_RETURN)
- {
- return o;
- }
-
- if ((o->op_private & OPpTARGET_MY)
- && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
- {
- return scalar(o); /* As if inside SASSIGN */
- }
-
- o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
-
- switch (o->op_type) {
- default:
- if (!(PL_opargs[o->op_type] & OA_FOLDCONST))
- break;
- /* FALL THROUGH */
- case OP_REPEAT:
- if (o->op_flags & OPf_STACKED)
- break;
- goto func_ops;
- case OP_SUBSTR:
- if (o->op_private == 4)
- break;
- /* FALL THROUGH */
- case OP_GVSV:
- case OP_WANTARRAY:
- case OP_GV:
- case OP_PADSV:
- case OP_PADAV:
- case OP_PADHV:
- case OP_PADANY:
- case OP_AV2ARYLEN:
- case OP_REF:
- case OP_REFGEN:
- case OP_SREFGEN:
- case OP_DEFINED:
- case OP_HEX:
- case OP_OCT:
- case OP_LENGTH:
- case OP_VEC:
- case OP_INDEX:
- case OP_RINDEX:
- case OP_SPRINTF:
- case OP_AELEM:
- case OP_AELEMFAST:
- case OP_ASLICE:
- case OP_HELEM:
- case OP_HSLICE:
- case OP_UNPACK:
- case OP_PACK:
- case OP_JOIN:
- case OP_LSLICE:
- case OP_ANONLIST:
- case OP_ANONHASH:
- case OP_SORT:
- case OP_REVERSE:
- case OP_RANGE:
- case OP_FLIP:
- case OP_FLOP:
- case OP_CALLER:
- case OP_FILENO:
- case OP_EOF:
- case OP_TELL:
- case OP_GETSOCKNAME:
- case OP_GETPEERNAME:
- case OP_READLINK:
- case OP_TELLDIR:
- case OP_GETPPID:
- case OP_GETPGRP:
- case OP_GETPRIORITY:
- case OP_TIME:
- case OP_TMS:
- case OP_LOCALTIME:
- case OP_GMTIME:
- case OP_GHBYNAME:
- case OP_GHBYADDR:
- case OP_GHOSTENT:
- case OP_GNBYNAME:
- case OP_GNBYADDR:
- case OP_GNETENT:
- case OP_GPBYNAME:
- case OP_GPBYNUMBER:
- case OP_GPROTOENT:
- case OP_GSBYNAME:
- case OP_GSBYPORT:
- case OP_GSERVENT:
- case OP_GPWNAM:
- case OP_GPWUID:
- case OP_GGRNAM:
- case OP_GGRGID:
- case OP_GETLOGIN:
- func_ops:
- if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
- useless = PL_op_desc[o->op_type];
- break;
-
- case OP_RV2GV:
- case OP_RV2SV:
- case OP_RV2AV:
- case OP_RV2HV:
- if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
- (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
- useless = "a variable";
- break;
-
- case OP_CONST:
- sv = cSVOPo_sv;
- if (cSVOPo->op_private & OPpCONST_STRICT)
- no_bareword_allowed(o);
- else {
- if (ckWARN(WARN_VOID)) {
- useless = "a constant";
- if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
- useless = 0;
- else if (SvPOK(sv)) {
- if (strnEQ(SvPVX(sv), "di", 2) ||
- strnEQ(SvPVX(sv), "ds", 2) ||
- strnEQ(SvPVX(sv), "ig", 2))
- useless = 0;
- }
- }
- }
- null(o); /* don't execute or even remember it */
- break;
-
- case OP_POSTINC:
- o->op_type = OP_PREINC; /* pre-increment is faster */
- o->op_ppaddr = PL_ppaddr[OP_PREINC];
- break;
-
- case OP_POSTDEC:
- o->op_type = OP_PREDEC; /* pre-decrement is faster */
- o->op_ppaddr = PL_ppaddr[OP_PREDEC];
- break;
-
- case OP_OR:
- case OP_AND:
- case OP_COND_EXPR:
- for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
- scalarvoid(kid);
- break;
-
- case OP_NULL:
- if (o->op_flags & OPf_STACKED)
- break;
- /* FALL THROUGH */
- case OP_NEXTSTATE:
- case OP_DBSTATE:
- case OP_ENTERTRY:
- case OP_ENTER:
- if (!(o->op_flags & OPf_KIDS))
- break;
- /* FALL THROUGH */
- case OP_SCOPE:
- case OP_LEAVE:
- case OP_LEAVETRY:
- case OP_LEAVELOOP:
- case OP_LINESEQ:
- case OP_LIST:
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
- scalarvoid(kid);
- break;
- case OP_ENTEREVAL:
- scalarkids(o);
- break;
- case OP_REQUIRE:
- /* all requires must return a boolean value */
- o->op_flags &= ~OPf_WANT;
- /* FALL THROUGH */
- case OP_SCALAR:
- return scalar(o);
- case OP_SPLIT:
- if ((kid = cLISTOPo->op_first) && kid->op_type == OP_PUSHRE) {
- if (!kPMOP->op_pmreplroot)
- deprecate("implicit split to @_");
- }
- break;
- }
- if (useless && ckWARN(WARN_VOID))
- Perl_warner(aTHX_ WARN_VOID, "Useless use of %s in void context", useless);
- return o;
-}
-
-OP *
-Perl_listkids(pTHX_ OP *o)
-{
- OP *kid;
- if (o && o->op_flags & OPf_KIDS) {
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
- list(kid);
- }
- return o;
-}
-
-OP *
-Perl_list(pTHX_ OP *o)
-{
- OP *kid;
-
- /* assumes no premature commitment */
- if (!o || (o->op_flags & OPf_WANT) || PL_error_count
- || o->op_type == OP_RETURN)
- {
- return o;
- }
-
- if ((o->op_private & OPpTARGET_MY)
- && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
- {
- return o; /* As if inside SASSIGN */
- }
-
- o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
-
- switch (o->op_type) {
- case OP_FLOP:
- case OP_REPEAT:
- list(cBINOPo->op_first);
- break;
- case OP_OR:
- case OP_AND:
- case OP_COND_EXPR:
- for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
- list(kid);
- break;
- default:
- case OP_MATCH:
- case OP_QR:
- case OP_SUBST:
- case OP_NULL:
- if (!(o->op_flags & OPf_KIDS))
- break;
- if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
- list(cBINOPo->op_first);
- return gen_constant_list(o);
- }
- case OP_LIST:
- listkids(o);
- break;
- case OP_LEAVE:
- case OP_LEAVETRY:
- kid = cLISTOPo->op_first;
- list(kid);
- while ((kid = kid->op_sibling)) {
- if (kid->op_sibling)
- scalarvoid(kid);
- else
- list(kid);
- }
- WITH_THR(PL_curcop = &PL_compiling);
- break;
- case OP_SCOPE:
- case OP_LINESEQ:
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
- if (kid->op_sibling)
- scalarvoid(kid);
- else
- list(kid);
- }
- WITH_THR(PL_curcop = &PL_compiling);
- break;
- case OP_REQUIRE:
- /* all requires must return a boolean value */
- o->op_flags &= ~OPf_WANT;
- return scalar(o);
- }
- return o;
-}
-
-OP *
-Perl_scalarseq(pTHX_ OP *o)
-{
- OP *kid;
-
- if (o) {
- if (o->op_type == OP_LINESEQ ||
- o->op_type == OP_SCOPE ||
- o->op_type == OP_LEAVE ||
- o->op_type == OP_LEAVETRY)
- {
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling) {
- if (kid->op_sibling) {
- scalarvoid(kid);
- }
- }
- PL_curcop = &PL_compiling;
- }
- o->op_flags &= ~OPf_PARENS;
- if (PL_hints & HINT_BLOCK_SCOPE)
- o->op_flags |= OPf_PARENS;
- }
- else
- o = newOP(OP_STUB, 0);
- return o;
-}
-
-STATIC OP *
-S_modkids(pTHX_ OP *o, I32 type)
-{
- OP *kid;
- if (o && o->op_flags & OPf_KIDS) {
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
- mod(kid, type);
- }
- return o;
-}
-
-OP *
-Perl_mod(pTHX_ OP *o, I32 type)
-{
- OP *kid;
- STRLEN n_a;
-
- if (!o || PL_error_count)
- return o;
-
- if ((o->op_private & OPpTARGET_MY)
- && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
- {
- return o;
- }
-
- switch (o->op_type) {
- case OP_UNDEF:
- PL_modcount++;
- return o;
- case OP_CONST:
- if (o->op_private & (OPpCONST_BARE) &&
- !(type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)) {
- SV *sv = ((SVOP*)o)->op_sv;
- GV *gv;
-
- /* Could be a filehandle */
- if (gv = gv_fetchpv(SvPV_nolen(sv), FALSE, SVt_PVIO)) {
- OP* gvio = newUNOP(OP_RV2GV, 0, newGVOP(OP_GV, 0, gv));
- op_free(o);
- o = gvio;
- } else {
- /* OK, it's a sub */
- OP* enter;
- gv = gv_fetchpv(SvPV_nolen(sv), TRUE, SVt_PVCV);
-
- enter = newUNOP(OP_ENTERSUB,0,
- newUNOP(OP_RV2CV, 0,
- newGVOP(OP_GV, 0, gv)
- ));
- enter->op_private |= OPpLVAL_INTRO;
- op_free(o);
- o = enter;
- }
- break;
- }
- if (!(o->op_private & (OPpCONST_ARYBASE)))
- goto nomod;
- if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
- PL_compiling.cop_arybase = (I32)SvIV(cSVOPx(PL_eval_start)->op_sv);
- PL_eval_start = 0;
- }
- else if (!type) {
- SAVEI32(PL_compiling.cop_arybase);
- PL_compiling.cop_arybase = 0;
- }
- else if (type == OP_REFGEN)
- goto nomod;
- else
- Perl_croak(aTHX_ "That use of $[ is unsupported");
- break;
- case OP_STUB:
- if (o->op_flags & OPf_PARENS)
- break;
- goto nomod;
- case OP_ENTERSUB:
- if ((type == OP_UNDEF || type == OP_REFGEN) &&
- !(o->op_flags & OPf_STACKED)) {
- o->op_type = OP_RV2CV; /* entersub => rv2cv */
- o->op_ppaddr = PL_ppaddr[OP_RV2CV];
- assert(cUNOPo->op_first->op_type == OP_NULL);
- null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */
- break;
- }
- else { /* lvalue subroutine call */
- o->op_private |= OPpLVAL_INTRO;
- PL_modcount = RETURN_UNLIMITED_NUMBER;
- if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
- /* Backward compatibility mode: */
- o->op_private |= OPpENTERSUB_INARGS;
- break;
- }
- else { /* Compile-time error message: */
- OP *kid = cUNOPo->op_first;
- CV *cv;
- OP *okid;
-
- if (kid->op_type == OP_PUSHMARK)
- goto skip_kids;
- if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST)
- Perl_croak(aTHX_
- "panic: unexpected lvalue entersub "
- "args: type/targ %ld:%ld",
- (long)kid->op_type,kid->op_targ);
- kid = kLISTOP->op_first;
- skip_kids:
- while (kid->op_sibling)
- kid = kid->op_sibling;
- if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) {
- /* Indirect call */
- if (kid->op_type == OP_METHOD_NAMED
- || kid->op_type == OP_METHOD)
- {
- UNOP *newop;
-
- if (kid->op_sibling || kid->op_next != kid) {
- yyerror("panic: unexpected optree near method call");
- break;
- }
-
- NewOp(1101, newop, 1, UNOP);
- newop->op_type = OP_RV2CV;
- newop->op_ppaddr = PL_ppaddr[OP_RV2CV];
- newop->op_first = Nullop;
- newop->op_next = (OP*)newop;
- kid->op_sibling = (OP*)newop;
- newop->op_private |= OPpLVAL_INTRO;
- break;
- }
-
- if (kid->op_type != OP_RV2CV)
- Perl_croak(aTHX_
- "panic: unexpected lvalue entersub "
- "entry via type/targ %ld:%ld",
- (long)kid->op_type,kid->op_targ);
- kid->op_private |= OPpLVAL_INTRO;
- break; /* Postpone until runtime */
- }
-
- okid = kid;
- kid = kUNOP->op_first;
- if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV)
- kid = kUNOP->op_first;
- if (kid->op_type == OP_NULL)
- Perl_croak(aTHX_
- "Unexpected constant lvalue entersub "
- "entry via type/targ %ld:%ld",
- (long)kid->op_type,kid->op_targ);
- if (kid->op_type != OP_GV) {
- /* Restore RV2CV to check lvalueness */
- restore_2cv:
- if (kid->op_next && kid->op_next != kid) { /* Happens? */
- okid->op_next = kid->op_next;
- kid->op_next = okid;
- }
- else
- okid->op_next = Nullop;
- okid->op_type = OP_RV2CV;
- okid->op_targ = 0;
- okid->op_ppaddr = PL_ppaddr[OP_RV2CV];
- okid->op_private |= OPpLVAL_INTRO;
- break;
- }
-
- cv = GvCV(kGVOP_gv);
- if (!cv)
- goto restore_2cv;
- if (CvLVALUE(cv))
- break;
- }
- }
- /* FALL THROUGH */
- default:
- nomod:
- /* grep, foreach, subcalls, refgen */
- if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN)
- break;
- yyerror(Perl_form(aTHX_ "Can't modify %s in %s",
- (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)
- ? "do block"
- : (o->op_type == OP_ENTERSUB
- ? "non-lvalue subroutine call"
- : PL_op_desc[o->op_type])),
- type ? PL_op_desc[type] : "local"));
- return o;
-
- case OP_PREINC:
- case OP_PREDEC:
- case OP_POW:
- case OP_MULTIPLY:
- case OP_DIVIDE:
- case OP_MODULO:
- case OP_REPEAT:
- case OP_ADD:
- case OP_SUBTRACT:
- case OP_CONCAT:
- case OP_LEFT_SHIFT:
- case OP_RIGHT_SHIFT:
- case OP_BIT_AND:
- case OP_BIT_XOR:
- case OP_BIT_OR:
- case OP_I_MULTIPLY:
- case OP_I_DIVIDE:
- case OP_I_MODULO:
- case OP_I_ADD:
- case OP_I_SUBTRACT:
- if (!(o->op_flags & OPf_STACKED))
- goto nomod;
- PL_modcount++;
- break;
-
- case OP_COND_EXPR:
- for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
- mod(kid, type);
- break;
-
- case OP_RV2AV:
- case OP_RV2HV:
- if (!type && cUNOPo->op_first->op_type != OP_GV)
- Perl_croak(aTHX_ "Can't localize through a reference");
- if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
- PL_modcount = RETURN_UNLIMITED_NUMBER;
- return o; /* Treat \(@foo) like ordinary list. */
- }
- /* FALL THROUGH */
- case OP_RV2GV:
- if (scalar_mod_type(o, type))
- goto nomod;
- ref(cUNOPo->op_first, o->op_type);
- /* FALL THROUGH */
- case OP_ASLICE:
- case OP_HSLICE:
- if (type == OP_LEAVESUBLV)
- o->op_private |= OPpMAYBE_LVSUB;
- /* FALL THROUGH */
- case OP_AASSIGN:
- case OP_NEXTSTATE:
- case OP_DBSTATE:
- case OP_CHOMP:
- PL_modcount = RETURN_UNLIMITED_NUMBER;
- break;
- case OP_RV2SV:
- if (!type && cUNOPo->op_first->op_type != OP_GV)
- Perl_croak(aTHX_ "Can't localize through a reference");
- ref(cUNOPo->op_first, o->op_type);
- /* FALL THROUGH */
- case OP_GV:
- case OP_AV2ARYLEN:
- PL_hints |= HINT_BLOCK_SCOPE;
- case OP_SASSIGN:
- case OP_ANDASSIGN:
- case OP_ORASSIGN:
- case OP_AELEMFAST:
- PL_modcount++;
- break;
-
- case OP_PADAV:
- case OP_PADHV:
- PL_modcount = RETURN_UNLIMITED_NUMBER;
- if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
- return o; /* Treat \(@foo) like ordinary list. */
- if (scalar_mod_type(o, type))
- goto nomod;
- if (type == OP_LEAVESUBLV)
- o->op_private |= OPpMAYBE_LVSUB;
- /* FALL THROUGH */
- case OP_PADSV:
- PL_modcount++;
- if (!type)
- Perl_croak(aTHX_ "Can't localize lexical variable %s",
- SvPV(*av_fetch(PL_comppad_name, o->op_targ, 4), n_a));
- break;
-
-#ifdef USE_THREADS
- case OP_THREADSV:
- PL_modcount++; /* XXX ??? */
- break;
-#endif /* USE_THREADS */
-
- case OP_PUSHMARK:
- break;
-
- case OP_KEYS:
- if (type != OP_SASSIGN)
- goto nomod;
- goto lvalue_func;
- case OP_SUBSTR:
- if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */
- goto nomod;
- /* FALL THROUGH */
- case OP_POS:
- case OP_VEC:
- if (type == OP_LEAVESUBLV)
- o->op_private |= OPpMAYBE_LVSUB;
- lvalue_func:
- pad_free(o->op_targ);
- o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
- assert(SvTYPE(PAD_SV(o->op_targ)) == SVt_NULL);
- if (o->op_flags & OPf_KIDS)
- mod(cBINOPo->op_first->op_sibling, type);
- break;
-
- case OP_AELEM:
- case OP_HELEM:
- ref(cBINOPo->op_first, o->op_type);
- if (type == OP_ENTERSUB &&
- !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
- o->op_private |= OPpLVAL_DEFER;
- if (type == OP_LEAVESUBLV)
- o->op_private |= OPpMAYBE_LVSUB;
- PL_modcount++;
- break;
-
- case OP_SCOPE:
- case OP_LEAVE:
- case OP_ENTER:
- case OP_LINESEQ:
- if (o->op_flags & OPf_KIDS)
- mod(cLISTOPo->op_last, type);
- break;
-
- case OP_NULL:
- if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
- goto nomod;
- else if (!(o->op_flags & OPf_KIDS))
- break;
- if (o->op_targ != OP_LIST) {
- mod(cBINOPo->op_first, type);
- break;
- }
- /* FALL THROUGH */
- case OP_LIST:
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
- mod(kid, type);
- break;
-
- case OP_RETURN:
- if (type != OP_LEAVESUBLV)
- goto nomod;
- break; /* mod()ing was handled by ck_return() */
- }
- if (type != OP_LEAVESUBLV)
- o->op_flags |= OPf_MOD;
-
- if (type == OP_AASSIGN || type == OP_SASSIGN)
- o->op_flags |= OPf_SPECIAL|OPf_REF;
- else if (!type) {
- o->op_private |= OPpLVAL_INTRO;
- o->op_flags &= ~OPf_SPECIAL;
- PL_hints |= HINT_BLOCK_SCOPE;
- }
- else if (type != OP_GREPSTART && type != OP_ENTERSUB
- && type != OP_LEAVESUBLV)
- o->op_flags |= OPf_REF;
- return o;
-}
-
-STATIC bool
-S_scalar_mod_type(pTHX_ OP *o, I32 type)
-{
- switch (type) {
- case OP_SASSIGN:
- if (o->op_type == OP_RV2GV)
- return FALSE;
- /* FALL THROUGH */
- case OP_PREINC:
- case OP_PREDEC:
- case OP_POSTINC:
- case OP_POSTDEC:
- case OP_I_PREINC:
- case OP_I_PREDEC:
- case OP_I_POSTINC:
- case OP_I_POSTDEC:
- case OP_POW:
- case OP_MULTIPLY:
- case OP_DIVIDE:
- case OP_MODULO:
- case OP_REPEAT:
- case OP_ADD:
- case OP_SUBTRACT:
- case OP_I_MULTIPLY:
- case OP_I_DIVIDE:
- case OP_I_MODULO:
- case OP_I_ADD:
- case OP_I_SUBTRACT:
- case OP_LEFT_SHIFT:
- case OP_RIGHT_SHIFT:
- case OP_BIT_AND:
- case OP_BIT_XOR:
- case OP_BIT_OR:
- case OP_CONCAT:
- case OP_SUBST:
- case OP_TRANS:
- case OP_READ:
- case OP_SYSREAD:
- case OP_RECV:
- case OP_ANDASSIGN:
- case OP_ORASSIGN:
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-STATIC bool
-S_is_handle_constructor(pTHX_ OP *o, I32 argnum)
-{
- switch (o->op_type) {
- case OP_PIPE_OP:
- case OP_SOCKPAIR:
- if (argnum == 2)
- return TRUE;
- /* FALL THROUGH */
- case OP_SYSOPEN:
- case OP_OPEN:
- case OP_SELECT: /* XXX c.f. SelectSaver.pm */
- case OP_SOCKET:
- case OP_OPEN_DIR:
- case OP_ACCEPT:
- if (argnum == 1)
- return TRUE;
- /* FALL THROUGH */
- default:
- return FALSE;
- }
-}
-
-OP *
-Perl_refkids(pTHX_ OP *o, I32 type)
-{
- OP *kid;
- if (o && o->op_flags & OPf_KIDS) {
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
- ref(kid, type);
- }
- return o;
-}
-
-OP *
-Perl_ref(pTHX_ OP *o, I32 type)
-{
- OP *kid;
-
- if (!o || PL_error_count)
- return o;
-
- switch (o->op_type) {
- case OP_ENTERSUB:
- if ((type == OP_EXISTS || type == OP_DEFINED || type == OP_LOCK) &&
- !(o->op_flags & OPf_STACKED)) {
- o->op_type = OP_RV2CV; /* entersub => rv2cv */
- o->op_ppaddr = PL_ppaddr[OP_RV2CV];
- assert(cUNOPo->op_first->op_type == OP_NULL);
- null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
- o->op_flags |= OPf_SPECIAL;
- }
- break;
-
- case OP_COND_EXPR:
- for (kid = cUNOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
- ref(kid, type);
- break;
- case OP_RV2SV:
- if (type == OP_DEFINED)
- o->op_flags |= OPf_SPECIAL; /* don't create GV */
- ref(cUNOPo->op_first, o->op_type);
- /* FALL THROUGH */
- case OP_PADSV:
- if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
- o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
- : type == OP_RV2HV ? OPpDEREF_HV
- : OPpDEREF_SV);
- o->op_flags |= OPf_MOD;
- }
- break;
-
- case OP_THREADSV:
- o->op_flags |= OPf_MOD; /* XXX ??? */
- break;
-
- case OP_RV2AV:
- case OP_RV2HV:
- o->op_flags |= OPf_REF;
- /* FALL THROUGH */
- case OP_RV2GV:
- if (type == OP_DEFINED)
- o->op_flags |= OPf_SPECIAL; /* don't create GV */
- ref(cUNOPo->op_first, o->op_type);
- break;
-
- case OP_PADAV:
- case OP_PADHV:
- o->op_flags |= OPf_REF;
- break;
-
- case OP_SCALAR:
- case OP_NULL:
- if (!(o->op_flags & OPf_KIDS))
- break;
- ref(cBINOPo->op_first, type);
- break;
- case OP_AELEM:
- case OP_HELEM:
- ref(cBINOPo->op_first, o->op_type);
- if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
- o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
- : type == OP_RV2HV ? OPpDEREF_HV
- : OPpDEREF_SV);
- o->op_flags |= OPf_MOD;
- }
- break;
-
- case OP_SCOPE:
- case OP_LEAVE:
- case OP_ENTER:
- case OP_LIST:
- if (!(o->op_flags & OPf_KIDS))
- break;
- ref(cLISTOPo->op_last, type);
- break;
- default:
- break;
- }
- return scalar(o);
-
-}
-
-STATIC OP *
-S_dup_attrlist(pTHX_ OP *o)
-{
- OP *rop = Nullop;
-
- /* An attrlist is either a simple OP_CONST or an OP_LIST with kids,
- * where the first kid is OP_PUSHMARK and the remaining ones
- * are OP_CONST. We need to push the OP_CONST values.
- */
- if (o->op_type == OP_CONST)
- rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc(cSVOPo->op_sv));
- else {
- assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS));
- for (o = cLISTOPo->op_first; o; o=o->op_sibling) {
- if (o->op_type == OP_CONST)
- rop = append_elem(OP_LIST, rop,
- newSVOP(OP_CONST, o->op_flags,
- SvREFCNT_inc(cSVOPo->op_sv)));
- }
- }
- return rop;
-}
-
-STATIC void
-S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs)
-{
- SV *stashsv;
-
- /* fake up C<use attributes $pkg,$rv,@attrs> */
- ENTER; /* need to protect against side-effects of 'use' */
- SAVEINT(PL_expect);
- if (stash && HvNAME(stash))
- stashsv = newSVpv(HvNAME(stash), 0);
- else
- stashsv = &PL_sv_no;
-
-#define ATTRSMODULE "attributes"
-
- Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
- newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
- Nullsv,
- prepend_elem(OP_LIST,
- newSVOP(OP_CONST, 0, stashsv),
- prepend_elem(OP_LIST,
- newSVOP(OP_CONST, 0,
- newRV(target)),
- dup_attrlist(attrs))));
- LEAVE;
-}
-
-void
-Perl_apply_attrs_string(pTHX_ char *stashpv, CV *cv,
- char *attrstr, STRLEN len)
-{
- OP *attrs = Nullop;
-
- if (!len) {
- len = strlen(attrstr);
- }
-
- while (len) {
- for (; isSPACE(*attrstr) && len; --len, ++attrstr) ;
- if (len) {
- char *sstr = attrstr;
- for (; !isSPACE(*attrstr) && len; --len, ++attrstr) ;
- attrs = append_elem(OP_LIST, attrs,
- newSVOP(OP_CONST, 0,
- newSVpvn(sstr, attrstr-sstr)));
- }
- }
-
- Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS,
- newSVpvn(ATTRSMODULE, sizeof(ATTRSMODULE)-1),
- Nullsv, prepend_elem(OP_LIST,
- newSVOP(OP_CONST, 0, newSVpv(stashpv,0)),
- prepend_elem(OP_LIST,
- newSVOP(OP_CONST, 0,
- newRV((SV*)cv)),
- attrs)));
-}
-
-STATIC OP *
-S_my_kid(pTHX_ OP *o, OP *attrs)
-{
- OP *kid;
- I32 type;
-
- if (!o || PL_error_count)
- return o;
-
- type = o->op_type;
- if (type == OP_LIST) {
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
- my_kid(kid, attrs);
- } else if (type == OP_UNDEF) {
- return o;
- } else if (type == OP_RV2SV || /* "our" declaration */
- type == OP_RV2AV ||
- type == OP_RV2HV) { /* XXX does this let anything illegal in? */
- o->op_private |= OPpOUR_INTRO;
- return o;
- } else if (type != OP_PADSV &&
- type != OP_PADAV &&
- type != OP_PADHV &&
- type != OP_PUSHMARK)
- {
- yyerror(Perl_form(aTHX_ "Can't declare %s in \"%s\"",
- PL_op_desc[o->op_type],
- PL_in_my == KEY_our ? "our" : "my"));
- return o;
- }
- else if (attrs && type != OP_PUSHMARK) {
- HV *stash;
- SV *padsv;
- SV **namesvp;
-
- PL_in_my = FALSE;
- PL_in_my_stash = Nullhv;
-
- /* check for C<my Dog $spot> when deciding package */
- namesvp = av_fetch(PL_comppad_name, o->op_targ, FALSE);
- if (namesvp && *namesvp && SvOBJECT(*namesvp) && HvNAME(SvSTASH(*namesvp)))
- stash = SvSTASH(*namesvp);
- else
- stash = PL_curstash;
- padsv = PAD_SV(o->op_targ);
- apply_attrs(stash, padsv, attrs);
- }
- o->op_flags |= OPf_MOD;
- o->op_private |= OPpLVAL_INTRO;
- return o;
-}
-
-OP *
-Perl_my_attrs(pTHX_ OP *o, OP *attrs)
-{
- if (o->op_flags & OPf_PARENS)
- list(o);
- if (attrs)
- SAVEFREEOP(attrs);
- o = my_kid(o, attrs);
- PL_in_my = FALSE;
- PL_in_my_stash = Nullhv;
- return o;
-}
-
-OP *
-Perl_my(pTHX_ OP *o)
-{
- return my_kid(o, Nullop);
-}
-
-OP *
-Perl_sawparens(pTHX_ OP *o)
-{
- if (o)
- o->op_flags |= OPf_PARENS;
- return o;
-}
-
-OP *
-Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
-{
- OP *o;
-
- if (ckWARN(WARN_MISC) &&
- (left->op_type == OP_RV2AV ||
- left->op_type == OP_RV2HV ||
- left->op_type == OP_PADAV ||
- left->op_type == OP_PADHV)) {
- char *desc = PL_op_desc[(right->op_type == OP_SUBST ||
- right->op_type == OP_TRANS)
- ? right->op_type : OP_MATCH];
- const char *sample = ((left->op_type == OP_RV2AV ||
- left->op_type == OP_PADAV)
- ? "@array" : "%hash");
- Perl_warner(aTHX_ WARN_MISC,
- "Applying %s to %s will act on scalar(%s)",
- desc, sample, sample);
- }
-
- if (!(right->op_flags & OPf_STACKED) &&
- (right->op_type == OP_MATCH ||
- right->op_type == OP_SUBST ||
- right->op_type == OP_TRANS)) {
- right->op_flags |= OPf_STACKED;
- if (right->op_type != OP_MATCH &&
- ! (right->op_type == OP_TRANS &&
- right->op_private & OPpTRANS_IDENTICAL))
- left = mod(left, right->op_type);
- if (right->op_type == OP_TRANS)
- o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
- else
- o = prepend_elem(right->op_type, scalar(left), right);
- if (type == OP_NOT)
- return newUNOP(OP_NOT, 0, scalar(o));
- return o;
- }
- else
- return bind_match(type, left,
- pmruntime(newPMOP(OP_MATCH, 0), right, Nullop));
-}
-
-OP *
-Perl_invert(pTHX_ OP *o)
-{
- if (!o)
- return o;
- /* XXX need to optimize away NOT NOT here? Or do we let optimizer do it? */
- return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
-}
-
-OP *
-Perl_scope(pTHX_ OP *o)
-{
- if (o) {
- if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
- o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
- o->op_type = OP_LEAVE;
- o->op_ppaddr = PL_ppaddr[OP_LEAVE];
- }
- else {
- if (o->op_type == OP_LINESEQ) {
- OP *kid;
- o->op_type = OP_SCOPE;
- o->op_ppaddr = PL_ppaddr[OP_SCOPE];
- kid = ((LISTOP*)o)->op_first;
- if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
- null(kid);
- }
- else
- o = newLISTOP(OP_SCOPE, 0, o, Nullop);
- }
- }
- return o;
-}
-
-void
-Perl_save_hints(pTHX)
-{
- SAVEI32(PL_hints);
- SAVESPTR(GvHV(PL_hintgv));
- GvHV(PL_hintgv) = newHVhv(GvHV(PL_hintgv));
- SAVEFREESV(GvHV(PL_hintgv));
-}
-
-int
-Perl_block_start(pTHX_ int full)
-{
- int retval = PL_savestack_ix;
-
- SAVEI32(PL_comppad_name_floor);
- PL_comppad_name_floor = AvFILLp(PL_comppad_name);
- if (full)
- PL_comppad_name_fill = PL_comppad_name_floor;
- if (PL_comppad_name_floor < 0)
- PL_comppad_name_floor = 0;
- SAVEI32(PL_min_intro_pending);
- SAVEI32(PL_max_intro_pending);
- PL_min_intro_pending = 0;
- SAVEI32(PL_comppad_name_fill);
- SAVEI32(PL_padix_floor);
- PL_padix_floor = PL_padix;
- PL_pad_reset_pending = FALSE;
- SAVEHINTS();
- PL_hints &= ~HINT_BLOCK_SCOPE;
- SAVESPTR(PL_compiling.cop_warnings);
- if (! specialWARN(PL_compiling.cop_warnings)) {
- PL_compiling.cop_warnings = newSVsv(PL_compiling.cop_warnings) ;
- SAVEFREESV(PL_compiling.cop_warnings) ;
- }
- return retval;
-}
-
-OP*
-Perl_block_end(pTHX_ I32 floor, OP *seq)
-{
- int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
- OP* retval = scalarseq(seq);
- LEAVE_SCOPE(floor);
- PL_pad_reset_pending = FALSE;
- PL_compiling.op_private = PL_hints;
- if (needblockscope)
- PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
- pad_leavemy(PL_comppad_name_fill);
- PL_cop_seqmax++;
- return retval;
-}
-
-STATIC OP *
-S_newDEFSVOP(pTHX)
-{
-#ifdef USE_THREADS
- OP *o = newOP(OP_THREADSV, 0);
- o->op_targ = find_threadsv("_");
- return o;
-#else
- return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
-#endif /* USE_THREADS */
-}
-
-void
-Perl_newPROG(pTHX_ OP *o)
-{
- if (PL_in_eval) {
- if (PL_eval_root)
- return;
- PL_eval_root = newUNOP(OP_LEAVEEVAL,
- ((PL_in_eval & EVAL_KEEPERR)
- ? OPf_SPECIAL : 0), o);
- PL_eval_start = linklist(PL_eval_root);
- PL_eval_root->op_private |= OPpREFCOUNTED;
- OpREFCNT_set(PL_eval_root, 1);
- PL_eval_root->op_next = 0;
- peep(PL_eval_start);
- }
- else {
- if (!o)
- return;
- PL_main_root = scope(sawparens(scalarvoid(o)));
- PL_curcop = &PL_compiling;
- PL_main_start = LINKLIST(PL_main_root);
- PL_main_root->op_private |= OPpREFCOUNTED;
- OpREFCNT_set(PL_main_root, 1);
- PL_main_root->op_next = 0;
- peep(PL_main_start);
- PL_compcv = 0;
-
- /* Register with debugger */
- if (PERLDB_INTER) {
- CV *cv = get_cv("DB::postponed", FALSE);
- if (cv) {
- dSP;
- PUSHMARK(SP);
- XPUSHs((SV*)CopFILEGV(&PL_compiling));
- PUTBACK;
- call_sv((SV*)cv, G_DISCARD);
- }
- }
- }
-}
-
-OP *
-Perl_localize(pTHX_ OP *o, I32 lex)
-{
- if (o->op_flags & OPf_PARENS)
- list(o);
- else {
- if (ckWARN(WARN_PARENTHESIS) && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',') {
- char *s;
- for (s = PL_bufptr; *s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s) || strchr("@$%, ",*s)); s++) ;
- if (*s == ';' || *s == '=')
- Perl_warner(aTHX_ WARN_PARENTHESIS,
- "Parentheses missing around \"%s\" list",
- lex ? (PL_in_my == KEY_our ? "our" : "my") : "local");
- }
- }
- if (lex)
- o = my(o);
- else
- o = mod(o, OP_NULL); /* a bit kludgey */
- PL_in_my = FALSE;
- PL_in_my_stash = Nullhv;
- return o;
-}
-
-OP *
-Perl_jmaybe(pTHX_ OP *o)
-{
- if (o->op_type == OP_LIST) {
- OP *o2;
-#ifdef USE_THREADS
- o2 = newOP(OP_THREADSV, 0);
- o2->op_targ = find_threadsv(";");
-#else
- o2 = newSVREF(newGVOP(OP_GV, 0, gv_fetchpv(";", TRUE, SVt_PV))),
-#endif /* USE_THREADS */
- o = convert(OP_JOIN, 0, prepend_elem(OP_LIST, o2, o));
- }
- return o;
-}
-
-OP *
-Perl_fold_constants(pTHX_ register OP *o)
-{
- register OP *curop;
- I32 type = o->op_type;
- SV *sv;
-
- if (PL_opargs[type] & OA_RETSCALAR)
- scalar(o);
- if (PL_opargs[type] & OA_TARGET && !o->op_targ)
- o->op_targ = pad_alloc(type, SVs_PADTMP);
-
- /* integerize op, unless it happens to be C<-foo>.
- * XXX should pp_i_negate() do magic string negation instead? */
- if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
- && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
- && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
- {
- o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
- }
-
- if (!(PL_opargs[type] & OA_FOLDCONST))
- goto nope;
-
- switch (type) {
- case OP_NEGATE:
- /* XXX might want a ck_negate() for this */
- cUNOPo->op_first->op_private &= ~OPpCONST_STRICT;
- break;
- case OP_SPRINTF:
- case OP_UCFIRST:
- case OP_LCFIRST:
- case OP_UC:
- case OP_LC:
- case OP_SLT:
- case OP_SGT:
- case OP_SLE:
- case OP_SGE:
- case OP_SCMP:
-
- if (o->op_private & OPpLOCALE)
- goto nope;
- }
-
- if (PL_error_count)
- goto nope; /* Don't try to run w/ errors */
-
- for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
- if ((curop->op_type != OP_CONST ||
- (curop->op_private & OPpCONST_BARE)) &&
- curop->op_type != OP_LIST &&
- curop->op_type != OP_SCALAR &&
- curop->op_type != OP_NULL &&
- curop->op_type != OP_PUSHMARK)
- {
- goto nope;
- }
- }
-
- curop = LINKLIST(o);
- o->op_next = 0;
- PL_op = curop;
- CALLRUNOPS(aTHX);
- sv = *(PL_stack_sp--);
- if (o->op_targ && sv == PAD_SV(o->op_targ)) /* grab pad temp? */
- pad_swipe(o->op_targ);
- else if (SvTEMP(sv)) { /* grab mortal temp? */
- (void)SvREFCNT_inc(sv);
- SvTEMP_off(sv);
- }
- op_free(o);
- if (type == OP_RV2GV)
- return newGVOP(OP_GV, 0, (GV*)sv);
- else {
- /* try to smush double to int, but don't smush -2.0 to -2 */
- if ((SvFLAGS(sv) & (SVf_IOK|SVf_NOK|SVf_POK)) == SVf_NOK &&
- type != OP_NEGATE)
- {
- IV iv = SvIV(sv);
- if ((NV)iv == SvNV(sv)) {
- SvREFCNT_dec(sv);
- sv = newSViv(iv);
- }
- else
- SvIOK_off(sv); /* undo SvIV() damage */
- }
- return newSVOP(OP_CONST, 0, sv);
- }
-
- nope:
- if (!(PL_opargs[type] & OA_OTHERINT))
- return o;
-
- if (!(PL_hints & HINT_INTEGER)) {
- if (type == OP_MODULO
- || type == OP_DIVIDE
- || !(o->op_flags & OPf_KIDS))
- {
- return o;
- }
-
- for (curop = ((UNOP*)o)->op_first; curop; curop = curop->op_sibling) {
- if (curop->op_type == OP_CONST) {
- if (SvIOK(((SVOP*)curop)->op_sv))
- continue;
- return o;
- }
- if (PL_opargs[curop->op_type] & OA_RETINTEGER)
- continue;
- return o;
- }
- o->op_ppaddr = PL_ppaddr[++(o->op_type)];
- }
-
- return o;
-}
-
-OP *
-Perl_gen_constant_list(pTHX_ register OP *o)
-{
- register OP *curop;
- I32 oldtmps_floor = PL_tmps_floor;
-
- list(o);
- if (PL_error_count)
- return o; /* Don't attempt to run with errors */
-
- PL_op = curop = LINKLIST(o);
- o->op_next = 0;
- peep(curop);
- pp_pushmark();
- CALLRUNOPS(aTHX);
- PL_op = curop;
- pp_anonlist();
- PL_tmps_floor = oldtmps_floor;
-
- o->op_type = OP_RV2AV;
- o->op_ppaddr = PL_ppaddr[OP_RV2AV];
- curop = ((UNOP*)o)->op_first;
- ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
- op_free(curop);
- linklist(o);
- return list(o);
-}
-
-OP *
-Perl_convert(pTHX_ I32 type, I32 flags, OP *o)
-{
- OP *kid;
- OP *last = 0;
-
- if (!o || o->op_type != OP_LIST)
- o = newLISTOP(OP_LIST, 0, o, Nullop);
- else
- o->op_flags &= ~OPf_WANT;
-
- if (!(PL_opargs[type] & OA_MARK))
- null(cLISTOPo->op_first);
-
- o->op_type = type;
- o->op_ppaddr = PL_ppaddr[type];
- o->op_flags |= flags;
-
- o = CHECKOP(type, o);
- if (o->op_type != type)
- return o;
-
- return fold_constants(o);
-}
-
-/* List constructors */
-
-OP *
-Perl_append_elem(pTHX_ I32 type, OP *first, OP *last)
-{
- if (!first)
- return last;
-
- if (!last)
- return first;
-
- if (first->op_type != type
- || (type == OP_LIST && (first->op_flags & OPf_PARENS)))
- {
- return newLISTOP(type, 0, first, last);
- }
-
- if (first->op_flags & OPf_KIDS)
- ((LISTOP*)first)->op_last->op_sibling = last;
- else {
- first->op_flags |= OPf_KIDS;
- ((LISTOP*)first)->op_first = last;
- }
- ((LISTOP*)first)->op_last = last;
- return first;
-}
-
-OP *
-Perl_append_list(pTHX_ I32 type, LISTOP *first, LISTOP *last)
-{
- if (!first)
- return (OP*)last;
-
- if (!last)
- return (OP*)first;
-
- if (first->op_type != type)
- return prepend_elem(type, (OP*)first, (OP*)last);
-
- if (last->op_type != type)
- return append_elem(type, (OP*)first, (OP*)last);
-
- first->op_last->op_sibling = last->op_first;
- first->op_last = last->op_last;
- first->op_flags |= (last->op_flags & OPf_KIDS);
-
-#ifdef PL_OP_SLAB_ALLOC
-#else
- Safefree(last);
-#endif
- return (OP*)first;
-}
-
-OP *
-Perl_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
-{
- if (!first)
- return last;
-
- if (!last)
- return first;
-
- if (last->op_type == type) {
- if (type == OP_LIST) { /* already a PUSHMARK there */
- first->op_sibling = ((LISTOP*)last)->op_first->op_sibling;
- ((LISTOP*)last)->op_first->op_sibling = first;
- }
- else {
- if (!(last->op_flags & OPf_KIDS)) {
- ((LISTOP*)last)->op_last = first;
- last->op_flags |= OPf_KIDS;
- }
- first->op_sibling = ((LISTOP*)last)->op_first;
- ((LISTOP*)last)->op_first = first;
- }
- last->op_flags |= OPf_KIDS;
- return last;
- }
-
- return newLISTOP(type, 0, first, last);
-}
-
-/* Constructors */
-
-OP *
-Perl_newNULLLIST(pTHX)
-{
- return newOP(OP_STUB, 0);
-}
-
-OP *
-Perl_force_list(pTHX_ OP *o)
-{
- if (!o || o->op_type != OP_LIST)
- o = newLISTOP(OP_LIST, 0, o, Nullop);
- null(o);
- return o;
-}
-
-OP *
-Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
-{
- LISTOP *listop;
-
- NewOp(1101, listop, 1, LISTOP);
-
- listop->op_type = type;
- listop->op_ppaddr = PL_ppaddr[type];
- if (first || last)
- flags |= OPf_KIDS;
- listop->op_flags = flags;
-
- if (!last && first)
- last = first;
- else if (!first && last)
- first = last;
- else if (first)
- first->op_sibling = last;
- listop->op_first = first;
- listop->op_last = last;
- if (type == OP_LIST) {
- OP* pushop;
- pushop = newOP(OP_PUSHMARK, 0);
- pushop->op_sibling = first;
- listop->op_first = pushop;
- listop->op_flags |= OPf_KIDS;
- if (!last)
- listop->op_last = pushop;
- }
-
- return (OP*)listop;
-}
-
-OP *
-Perl_newOP(pTHX_ I32 type, I32 flags)
-{
- OP *o;
- NewOp(1101, o, 1, OP);
- o->op_type = type;
- o->op_ppaddr = PL_ppaddr[type];
- o->op_flags = flags;
-
- o->op_next = o;
- o->op_private = 0 + (flags >> 8);
- if (PL_opargs[type] & OA_RETSCALAR)
- scalar(o);
- if (PL_opargs[type] & OA_TARGET)
- o->op_targ = pad_alloc(type, SVs_PADTMP);
- return CHECKOP(type, o);
-}
-
-OP *
-Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first)
-{
- UNOP *unop;
-
- if (!first)
- first = newOP(OP_STUB, 0);
- if (PL_opargs[type] & OA_MARK)
- first = force_list(first);
-
- NewOp(1101, unop, 1, UNOP);
- unop->op_type = type;
- unop->op_ppaddr = PL_ppaddr[type];
- unop->op_first = first;
- unop->op_flags = flags | OPf_KIDS;
- unop->op_private = 1 | (flags >> 8);
- unop = (UNOP*) CHECKOP(type, unop);
- if (unop->op_next)
- return (OP*)unop;
-
- return fold_constants((OP *) unop);
-}
-
-OP *
-Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
-{
- BINOP *binop;
- NewOp(1101, binop, 1, BINOP);
-
- if (!first)
- first = newOP(OP_NULL, 0);
-
- binop->op_type = type;
- binop->op_ppaddr = PL_ppaddr[type];
- binop->op_first = first;
- binop->op_flags = flags | OPf_KIDS;
- if (!last) {
- last = first;
- binop->op_private = 1 | (flags >> 8);
- }
- else {
- binop->op_private = 2 | (flags >> 8);
- first->op_sibling = last;
- }
-
- binop = (BINOP*)CHECKOP(type, binop);
- if (binop->op_next || binop->op_type != type)
- return (OP*)binop;
-
- binop->op_last = binop->op_first->op_sibling;
-
- return fold_constants((OP *)binop);
-}
-
-static int
-utf8compare(const void *a, const void *b)
-{
- int i;
- for (i = 0; i < 10; i++) {
- if ((*(U8**)a)[i] < (*(U8**)b)[i])
- return -1;
- if ((*(U8**)a)[i] > (*(U8**)b)[i])
- return 1;
- }
- return 0;
-}
-
-OP *
-Perl_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
-{
- SV *tstr = ((SVOP*)expr)->op_sv;
- SV *rstr = ((SVOP*)repl)->op_sv;
- STRLEN tlen;
- STRLEN rlen;
- U8 *t = (U8*)SvPV(tstr, tlen);
- U8 *r = (U8*)SvPV(rstr, rlen);
- register I32 i;
- register I32 j;
- I32 del;
- I32 complement;
- I32 squash;
- I32 grows = 0;
- register short *tbl;
-
- PL_hints |= HINT_BLOCK_SCOPE;
- complement = o->op_private & OPpTRANS_COMPLEMENT;
- del = o->op_private & OPpTRANS_DELETE;
- squash = o->op_private & OPpTRANS_SQUASH;
-
- if (SvUTF8(tstr))
- o->op_private |= OPpTRANS_FROM_UTF;
-
- if (SvUTF8(rstr))
- o->op_private |= OPpTRANS_TO_UTF;
-
- if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
- SV* listsv = newSVpvn("# comment\n",10);
- SV* transv = 0;
- U8* tend = t + tlen;
- U8* rend = r + rlen;
- STRLEN ulen;
- U32 tfirst = 1;
- U32 tlast = 0;
- I32 tdiff;
- U32 rfirst = 1;
- U32 rlast = 0;
- I32 rdiff;
- I32 diff;
- I32 none = 0;
- U32 max = 0;
- I32 bits;
- I32 havefinal = 0;
- U32 final;
- I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
- I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
- U8* tsave = from_utf ? NULL : trlist_upgrade(&t, &tend);
- U8* rsave = to_utf ? NULL : trlist_upgrade(&r, &rend);
-
- if (complement) {
- U8 tmpbuf[UTF8_MAXLEN+1];
- U8** cp;
- I32* cl;
- UV nextmin = 0;
- New(1109, cp, tlen, U8*);
- i = 0;
- transv = newSVpvn("",0);
- while (t < tend) {
- cp[i++] = t;
- t += UTF8SKIP(t);
- if (t < tend && *t == 0xff) {
- t++;
- t += UTF8SKIP(t);
- }
- }
- qsort(cp, i, sizeof(U8*), utf8compare);
- for (j = 0; j < i; j++) {
- U8 *s = cp[j];
- I32 cur = j < i - 1 ? cp[j+1] - s : tend - s;
- UV val = utf8_to_uv(s, cur, &ulen, 0);
- s += ulen;
- diff = val - nextmin;
- if (diff > 0) {
- t = uv_to_utf8(tmpbuf,nextmin);
- sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
- if (diff > 1) {
- t = uv_to_utf8(tmpbuf, val - 1);
- sv_catpvn(transv, "\377", 1);
- sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
- }
- }
- if (s < tend && *s == 0xff)
- val = utf8_to_uv(s+1, cur - 1, &ulen, 0);
- if (val >= nextmin)
- nextmin = val + 1;
- }
- t = uv_to_utf8(tmpbuf,nextmin);
- sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
- t = uv_to_utf8(tmpbuf, 0x7fffffff);
- sv_catpvn(transv, "\377", 1);
- sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
- t = (U8*)SvPVX(transv);
- tlen = SvCUR(transv);
- tend = t + tlen;
- Safefree(cp);
- }
- else if (!rlen && !del) {
- r = t; rlen = tlen; rend = tend;
- }
- if (!squash) {
- if (t == r ||
- (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
- {
- o->op_private |= OPpTRANS_IDENTICAL;
- }
- }
-
- while (t < tend || tfirst <= tlast) {
- /* see if we need more "t" chars */
- if (tfirst > tlast) {
- tfirst = (I32)utf8_to_uv(t, tend - t, &ulen, 0);
- t += ulen;
- if (t < tend && *t == 0xff) { /* illegal utf8 val indicates range */
- t++;
- tlast = (I32)utf8_to_uv(t, tend - t, &ulen, 0);
- t += ulen;
- }
- else
- tlast = tfirst;
- }
-
- /* now see if we need more "r" chars */
- if (rfirst > rlast) {
- if (r < rend) {
- rfirst = (I32)utf8_to_uv(r, rend - r, &ulen, 0);
- r += ulen;
- if (r < rend && *r == 0xff) { /* illegal utf8 val indicates range */
- r++;
- rlast = (I32)utf8_to_uv(r, rend - r, &ulen, 0);
- r += ulen;
- }
- else
- rlast = rfirst;
- }
- else {
- if (!havefinal++)
- final = rlast;
- rfirst = rlast = 0xffffffff;
- }
- }
-
- /* now see which range will peter our first, if either. */
- tdiff = tlast - tfirst;
- rdiff = rlast - rfirst;
-
- if (tdiff <= rdiff)
- diff = tdiff;
- else
- diff = rdiff;
-
- if (rfirst == 0xffffffff) {
- diff = tdiff; /* oops, pretend rdiff is infinite */
- if (diff > 0)
- Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
- (long)tfirst, (long)tlast);
- else
- Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
- }
- else {
- if (diff > 0)
- Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
- (long)tfirst, (long)(tfirst + diff),
- (long)rfirst);
- else
- Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
- (long)tfirst, (long)rfirst);
-
- if (rfirst + diff > max)
- max = rfirst + diff;
- rfirst += diff + 1;
- if (!grows)
- grows = (UNISKIP(tfirst) < UNISKIP(rfirst));
- }
- tfirst += diff + 1;
- }
-
- none = ++max;
- if (del)
- del = ++max;
-
- if (max > 0xffff)
- bits = 32;
- else if (max > 0xff)
- bits = 16;
- else
- bits = 8;
-
- Safefree(cPVOPo->op_pv);
- cSVOPo->op_sv = (SV*)swash_init("utf8", "", listsv, bits, none);
- SvREFCNT_dec(listsv);
- if (transv)
- SvREFCNT_dec(transv);
-
- if (!del && havefinal)
- (void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
- newSVuv((UV)final), 0);
-
- if (grows)
- o->op_private |= OPpTRANS_GROWS;
-
- if (tsave)
- Safefree(tsave);
- if (rsave)
- Safefree(rsave);
-
- op_free(expr);
- op_free(repl);
- return o;
- }
-
- tbl = (short*)cPVOPo->op_pv;
- if (complement) {
- Zero(tbl, 256, short);
- for (i = 0; i < tlen; i++)
- tbl[t[i]] = -1;
- for (i = 0, j = 0; i < 256; i++) {
- if (!tbl[i]) {
- if (j >= rlen) {
- if (del)
- tbl[i] = -2;
- else if (rlen)
- tbl[i] = r[j-1];
- else
- tbl[i] = i;
- }
- else {
- if (i < 128 && r[j] >= 128)
- grows = 1;
- tbl[i] = r[j++];
- }
- }
- }
- }
- else {
- if (!rlen && !del) {
- r = t; rlen = tlen;
- if (!squash)
- o->op_private |= OPpTRANS_IDENTICAL;
- }
- for (i = 0; i < 256; i++)
- tbl[i] = -1;
- for (i = 0, j = 0; i < tlen; i++,j++) {
- if (j >= rlen) {
- if (del) {
- if (tbl[t[i]] == -1)
- tbl[t[i]] = -2;
- continue;
- }
- --j;
- }
- if (tbl[t[i]] == -1) {
- if (t[i] < 128 && r[j] >= 128)
- grows = 1;
- tbl[t[i]] = r[j];
- }
- }
- }
- if (grows)
- o->op_private |= OPpTRANS_GROWS;
- op_free(expr);
- op_free(repl);
-
- return o;
-}
-
-OP *
-Perl_newPMOP(pTHX_ I32 type, I32 flags)
-{
- PMOP *pmop;
-
- NewOp(1101, pmop, 1, PMOP);
- pmop->op_type = type;
- pmop->op_ppaddr = PL_ppaddr[type];
- pmop->op_flags = flags;
- pmop->op_private = 0 | (flags >> 8);
-
- if (PL_hints & HINT_RE_TAINT)
- pmop->op_pmpermflags |= PMf_RETAINT;
- if (PL_hints & HINT_LOCALE)
- pmop->op_pmpermflags |= PMf_LOCALE;
- pmop->op_pmflags = pmop->op_pmpermflags;
-
- /* link into pm list */
- if (type != OP_TRANS && PL_curstash) {
- pmop->op_pmnext = HvPMROOT(PL_curstash);
- HvPMROOT(PL_curstash) = pmop;
- }
-
- return (OP*)pmop;
-}
-
-OP *
-Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl)
-{
- PMOP *pm;
- LOGOP *rcop;
- I32 repl_has_vars = 0;
-
- if (o->op_type == OP_TRANS)
- return pmtrans(o, expr, repl);
-
- PL_hints |= HINT_BLOCK_SCOPE;
- pm = (PMOP*)o;
-
- if (expr->op_type == OP_CONST) {
- STRLEN plen;
- SV *pat = ((SVOP*)expr)->op_sv;
- char *p = SvPV(pat, plen);
- if ((o->op_flags & OPf_SPECIAL) && strEQ(p, " ")) {
- sv_setpvn(pat, "\\s+", 3);
- p = SvPV(pat, plen);
- pm->op_pmflags |= PMf_SKIPWHITE;
- }
- if ((PL_hints & HINT_UTF8) || DO_UTF8(pat))
- pm->op_pmdynflags |= PMdf_UTF8;
- pm->op_pmregexp = CALLREGCOMP(aTHX_ p, p + plen, pm);
- if (strEQ("\\s+", pm->op_pmregexp->precomp))
- pm->op_pmflags |= PMf_WHITE;
- op_free(expr);
- }
- else {
- if (PL_hints & HINT_UTF8)
- pm->op_pmdynflags |= PMdf_UTF8;
- if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
- expr = newUNOP((!(PL_hints & HINT_RE_EVAL)
- ? OP_REGCRESET
- : OP_REGCMAYBE),0,expr);
-
- NewOp(1101, rcop, 1, LOGOP);
- rcop->op_type = OP_REGCOMP;
- rcop->op_ppaddr = PL_ppaddr[OP_REGCOMP];
- rcop->op_first = scalar(expr);
- rcop->op_flags |= ((PL_hints & HINT_RE_EVAL)
- ? (OPf_SPECIAL | OPf_KIDS)
- : OPf_KIDS);
- rcop->op_private = 1;
- rcop->op_other = o;
-
- /* establish postfix order */
- if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
- LINKLIST(expr);
- rcop->op_next = expr;
- ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
- }
- else {
- rcop->op_next = LINKLIST(expr);
- expr->op_next = (OP*)rcop;
- }
-
- prepend_elem(o->op_type, scalar((OP*)rcop), o);
- }
-
- if (repl) {
- OP *curop;
- if (pm->op_pmflags & PMf_EVAL) {
- curop = 0;
- if (CopLINE(PL_curcop) < PL_multi_end)
- CopLINE_set(PL_curcop, PL_multi_end);
- }
-#ifdef USE_THREADS
- else if (repl->op_type == OP_THREADSV
- && strchr("&`'123456789+",
- PL_threadsv_names[repl->op_targ]))
- {
- curop = 0;
- }
-#endif /* USE_THREADS */
- else if (repl->op_type == OP_CONST)
- curop = repl;
- else {
- OP *lastop = 0;
- for (curop = LINKLIST(repl); curop!=repl; curop = LINKLIST(curop)) {
- if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
-#ifdef USE_THREADS
- if (curop->op_type == OP_THREADSV) {
- repl_has_vars = 1;
- if (strchr("&`'123456789+", curop->op_private))
- break;
- }
-#else
- if (curop->op_type == OP_GV) {
- GV *gv = cGVOPx_gv(curop);
- repl_has_vars = 1;
- if (strchr("&`'123456789+", *GvENAME(gv)))
- break;
- }
-#endif /* USE_THREADS */
- else if (curop->op_type == OP_RV2CV)
- break;
- else if (curop->op_type == OP_RV2SV ||
- curop->op_type == OP_RV2AV ||
- curop->op_type == OP_RV2HV ||
- curop->op_type == OP_RV2GV) {
- if (lastop && lastop->op_type != OP_GV) /*funny deref?*/
- break;
- }
- else if (curop->op_type == OP_PADSV ||
- curop->op_type == OP_PADAV ||
- curop->op_type == OP_PADHV ||
- curop->op_type == OP_PADANY) {
- repl_has_vars = 1;
- }
- else if (curop->op_type == OP_PUSHRE)
- ; /* Okay here, dangerous in newASSIGNOP */
- else
- break;
- }
- lastop = curop;
- }
- }
- if (curop == repl
- && !(repl_has_vars
- && (!pm->op_pmregexp
- || pm->op_pmregexp->reganch & ROPT_EVAL_SEEN))) {
- pm->op_pmflags |= PMf_CONST; /* const for long enough */
- pm->op_pmpermflags |= PMf_CONST; /* const for long enough */
- prepend_elem(o->op_type, scalar(repl), o);
- }
- else {
- if (curop == repl && !pm->op_pmregexp) { /* Has variables. */
- pm->op_pmflags |= PMf_MAYBE_CONST;
- pm->op_pmpermflags |= PMf_MAYBE_CONST;
- }
- NewOp(1101, rcop, 1, LOGOP);
- rcop->op_type = OP_SUBSTCONT;
- rcop->op_ppaddr = PL_ppaddr[OP_SUBSTCONT];
- rcop->op_first = scalar(repl);
- rcop->op_flags |= OPf_KIDS;
- rcop->op_private = 1;
- rcop->op_other = o;
-
- /* establish postfix order */
- rcop->op_next = LINKLIST(repl);
- repl->op_next = (OP*)rcop;
-
- pm->op_pmreplroot = scalar((OP*)rcop);
- pm->op_pmreplstart = LINKLIST(rcop);
- rcop->op_next = 0;
- }
- }
-
- return (OP*)pm;
-}
-
-OP *
-Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
-{
- SVOP *svop;
- NewOp(1101, svop, 1, SVOP);
- svop->op_type = type;
- svop->op_ppaddr = PL_ppaddr[type];
- svop->op_sv = sv;
- svop->op_next = (OP*)svop;
- svop->op_flags = flags;
- if (PL_opargs[type] & OA_RETSCALAR)
- scalar((OP*)svop);
- if (PL_opargs[type] & OA_TARGET)
- svop->op_targ = pad_alloc(type, SVs_PADTMP);
- return CHECKOP(type, svop);
-}
-
-OP *
-Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
-{
- PADOP *padop;
- NewOp(1101, padop, 1, PADOP);
- padop->op_type = type;
- padop->op_ppaddr = PL_ppaddr[type];
- padop->op_padix = pad_alloc(type, SVs_PADTMP);
- SvREFCNT_dec(PL_curpad[padop->op_padix]);
- PL_curpad[padop->op_padix] = sv;
- SvPADTMP_on(sv);
- padop->op_next = (OP*)padop;
- padop->op_flags = flags;
- if (PL_opargs[type] & OA_RETSCALAR)
- scalar((OP*)padop);
- if (PL_opargs[type] & OA_TARGET)
- padop->op_targ = pad_alloc(type, SVs_PADTMP);
- return CHECKOP(type, padop);
-}
-
-OP *
-Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
-{
-#ifdef USE_ITHREADS
- GvIN_PAD_on(gv);
- return newPADOP(type, flags, SvREFCNT_inc(gv));
-#else
- return newSVOP(type, flags, SvREFCNT_inc(gv));
-#endif
-}
-
-OP *
-Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv)
-{
- PVOP *pvop;
- NewOp(1101, pvop, 1, PVOP);
- pvop->op_type = type;
- pvop->op_ppaddr = PL_ppaddr[type];
- pvop->op_pv = pv;
- pvop->op_next = (OP*)pvop;
- pvop->op_flags = flags;
- if (PL_opargs[type] & OA_RETSCALAR)
- scalar((OP*)pvop);
- if (PL_opargs[type] & OA_TARGET)
- pvop->op_targ = pad_alloc(type, SVs_PADTMP);
- return CHECKOP(type, pvop);
-}
-
-void
-Perl_package(pTHX_ OP *o)
-{
- SV *sv;
-
- save_hptr(&PL_curstash);
- save_item(PL_curstname);
- if (o) {
- STRLEN len;
- char *name;
- sv = cSVOPo->op_sv;
- name = SvPV(sv, len);
- PL_curstash = gv_stashpvn(name,len,TRUE);
- sv_setpvn(PL_curstname, name, len);
- op_free(o);
- }
- else {
- sv_setpv(PL_curstname,"<none>");
- PL_curstash = Nullhv;
- }
- PL_hints |= HINT_BLOCK_SCOPE;
- PL_copline = NOLINE;
- PL_expect = XSTATE;
-}
-
-void
-Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg)
-{
- OP *pack;
- OP *rqop;
- OP *imop;
- OP *veop;
- GV *gv;
-
- if (id->op_type != OP_CONST)
- Perl_croak(aTHX_ "Module name must be constant");
-
- veop = Nullop;
-
- if (version != Nullop) {
- SV *vesv = ((SVOP*)version)->op_sv;
-
- if (arg == Nullop && !SvNIOKp(vesv)) {
- arg = version;
- }
- else {
- OP *pack;
- SV *meth;
-
- if (version->op_type != OP_CONST || !SvNIOKp(vesv))
- Perl_croak(aTHX_ "Version number must be constant number");
-
- /* Make copy of id so we don't free it twice */
- pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)id)->op_sv));
-
- /* Fake up a method call to VERSION */
- meth = newSVpvn("VERSION",7);
- sv_upgrade(meth, SVt_PVIV);
- (void)SvIOK_on(meth);
- PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
- veop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, pack, list(version)),
- newSVOP(OP_METHOD_NAMED, 0, meth)));
- }
- }
-
- /* Fake up an import/unimport */
- if (arg && arg->op_type == OP_STUB)
- imop = arg; /* no import on explicit () */
- else if (SvNIOKp(((SVOP*)id)->op_sv)) {
- imop = Nullop; /* use 5.0; */
- }
- else {
- SV *meth;
-
- /* Make copy of id so we don't free it twice */
- pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)id)->op_sv));
-
- /* Fake up a method call to import/unimport */
- meth = aver ? newSVpvn("import",6) : newSVpvn("unimport", 8);;
- sv_upgrade(meth, SVt_PVIV);
- (void)SvIOK_on(meth);
- PERL_HASH(SvUVX(meth), SvPVX(meth), SvCUR(meth));
- imop = convert(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, pack, list(arg)),
- newSVOP(OP_METHOD_NAMED, 0, meth)));
- }
-
- /* Fake up a require, handle override, if any */
- gv = gv_fetchpv("require", FALSE, SVt_PVCV);
- if (!(gv && GvIMPORTED_CV(gv)))
- gv = gv_fetchpv("CORE::GLOBAL::require", FALSE, SVt_PVCV);
-
- if (gv && GvIMPORTED_CV(gv)) {
- rqop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, id,
- scalar(newUNOP(OP_RV2CV, 0,
- newGVOP(OP_GV, 0,
- gv))))));
- }
- else {
- rqop = newUNOP(OP_REQUIRE, 0, id);
- }
-
- /* Fake up the BEGIN {}, which does its thing immediately. */
- newATTRSUB(floor,
- newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)),
- Nullop,
- Nullop,
- append_elem(OP_LINESEQ,
- append_elem(OP_LINESEQ,
- newSTATEOP(0, Nullch, rqop),
- newSTATEOP(0, Nullch, veop)),
- newSTATEOP(0, Nullch, imop) ));
-
- PL_hints |= HINT_BLOCK_SCOPE;
- PL_copline = NOLINE;
- PL_expect = XSTATE;
-}
-
-void
-Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...)
-{
- va_list args;
- va_start(args, ver);
- vload_module(flags, name, ver, &args);
- va_end(args);
-}
-
-#ifdef PERL_IMPLICIT_CONTEXT
-void
-Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...)
-{
- dTHX;
- va_list args;
- va_start(args, ver);
- vload_module(flags, name, ver, &args);
- va_end(args);
-}
-#endif
-
-void
-Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args)
-{
- OP *modname, *veop, *imop;
-
- modname = newSVOP(OP_CONST, 0, name);
- modname->op_private |= OPpCONST_BARE;
- if (ver) {
- veop = newSVOP(OP_CONST, 0, ver);
- }
- else
- veop = Nullop;
- if (flags & PERL_LOADMOD_NOIMPORT) {
- imop = sawparens(newNULLLIST());
- }
- else if (flags & PERL_LOADMOD_IMPORT_OPS) {
- imop = va_arg(*args, OP*);
- }
- else {
- SV *sv;
- imop = Nullop;
- sv = va_arg(*args, SV*);
- while (sv) {
- imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
- sv = va_arg(*args, SV*);
- }
- }
- {
- line_t ocopline = PL_copline;
- int oexpect = PL_expect;
-
- utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
- veop, modname, imop);
- PL_expect = oexpect;
- PL_copline = ocopline;
- }
-}
-
-OP *
-Perl_dofile(pTHX_ OP *term)
-{
- OP *doop;
- GV *gv;
-
- gv = gv_fetchpv("do", FALSE, SVt_PVCV);
- if (!(gv && GvIMPORTED_CV(gv)))
- gv = gv_fetchpv("CORE::GLOBAL::do", FALSE, SVt_PVCV);
-
- if (gv && GvIMPORTED_CV(gv)) {
- doop = ck_subr(newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, term,
- scalar(newUNOP(OP_RV2CV, 0,
- newGVOP(OP_GV, 0,
- gv))))));
- }
- else {
- doop = newUNOP(OP_DOFILE, 0, scalar(term));
- }
- return doop;
-}
-
-OP *
-Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
-{
- return newBINOP(OP_LSLICE, flags,
- list(force_list(subscript)),
- list(force_list(listval)) );
-}
-
-STATIC I32
-S_list_assignment(pTHX_ register OP *o)
-{
- if (!o)
- return TRUE;
-
- if (o->op_type == OP_NULL && o->op_flags & OPf_KIDS)
- o = cUNOPo->op_first;
-
- if (o->op_type == OP_COND_EXPR) {
- I32 t = list_assignment(cLOGOPo->op_first->op_sibling);
- I32 f = list_assignment(cLOGOPo->op_first->op_sibling->op_sibling);
-
- if (t && f)
- return TRUE;
- if (t || f)
- yyerror("Assignment to both a list and a scalar");
- return FALSE;
- }
-
- if (o->op_type == OP_LIST || o->op_flags & OPf_PARENS ||
- o->op_type == OP_RV2AV || o->op_type == OP_RV2HV ||
- o->op_type == OP_ASLICE || o->op_type == OP_HSLICE)
- return TRUE;
-
- if (o->op_type == OP_PADAV || o->op_type == OP_PADHV)
- return TRUE;
-
- if (o->op_type == OP_RV2SV)
- return FALSE;
-
- return FALSE;
-}
-
-OP *
-Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
-{
- OP *o;
-
- if (optype) {
- if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN) {
- return newLOGOP(optype, 0,
- mod(scalar(left), optype),
- newUNOP(OP_SASSIGN, 0, scalar(right)));
- }
- else {
- return newBINOP(optype, OPf_STACKED,
- mod(scalar(left), optype), scalar(right));
- }
- }
-
- if (list_assignment(left)) {
- OP *curop;
-
- PL_modcount = 0;
- PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
- left = mod(left, OP_AASSIGN);
- if (PL_eval_start)
- PL_eval_start = 0;
- else {
- op_free(left);
- op_free(right);
- return Nullop;
- }
- curop = list(force_list(left));
- o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop);
- o->op_private = 0 | (flags >> 8);
- for (curop = ((LISTOP*)curop)->op_first;
- curop; curop = curop->op_sibling)
- {
- if (curop->op_type == OP_RV2HV &&
- ((UNOP*)curop)->op_first->op_type != OP_GV) {
- o->op_private |= OPpASSIGN_HASH;
- break;
- }
- }
- if (!(left->op_private & OPpLVAL_INTRO)) {
- OP *lastop = o;
- PL_generation++;
- for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
- if (PL_opargs[curop->op_type] & OA_DANGEROUS) {
- if (curop->op_type == OP_GV) {
- GV *gv = cGVOPx_gv(curop);
- if (gv == PL_defgv || SvCUR(gv) == PL_generation)
- break;
- SvCUR(gv) = PL_generation;
- }
- else if (curop->op_type == OP_PADSV ||
- curop->op_type == OP_PADAV ||
- curop->op_type == OP_PADHV ||
- curop->op_type == OP_PADANY) {
- SV **svp = AvARRAY(PL_comppad_name);
- SV *sv = svp[curop->op_targ];
- if (SvCUR(sv) == PL_generation)
- break;
- SvCUR(sv) = PL_generation; /* (SvCUR not used any more) */
- }
- else if (curop->op_type == OP_RV2CV)
- break;
- else if (curop->op_type == OP_RV2SV ||
- curop->op_type == OP_RV2AV ||
- curop->op_type == OP_RV2HV ||
- curop->op_type == OP_RV2GV) {
- if (lastop->op_type != OP_GV) /* funny deref? */
- break;
- }
- else if (curop->op_type == OP_PUSHRE) {
- if (((PMOP*)curop)->op_pmreplroot) {
-#ifdef USE_ITHREADS
- GV *gv = (GV*)PL_curpad[(PADOFFSET)((PMOP*)curop)->op_pmreplroot];
-#else
- GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
-#endif
- if (gv == PL_defgv || SvCUR(gv) == PL_generation)
- break;
- SvCUR(gv) = PL_generation;
- }
- }
- else
- break;
- }
- lastop = curop;
- }
- if (curop != o)
- o->op_private |= OPpASSIGN_COMMON;
- }
- if (right && right->op_type == OP_SPLIT) {
- OP* tmpop;
- if ((tmpop = ((LISTOP*)right)->op_first) &&
- tmpop->op_type == OP_PUSHRE)
- {
- PMOP *pm = (PMOP*)tmpop;
- if (left->op_type == OP_RV2AV &&
- !(left->op_private & OPpLVAL_INTRO) &&
- !(o->op_private & OPpASSIGN_COMMON) )
- {
- tmpop = ((UNOP*)left)->op_first;
- if (tmpop->op_type == OP_GV && !pm->op_pmreplroot) {
-#ifdef USE_ITHREADS
- pm->op_pmreplroot = (OP*)cPADOPx(tmpop)->op_padix;
- cPADOPx(tmpop)->op_padix = 0; /* steal it */
-#else
- pm->op_pmreplroot = (OP*)cSVOPx(tmpop)->op_sv;
- cSVOPx(tmpop)->op_sv = Nullsv; /* steal it */
-#endif
- pm->op_pmflags |= PMf_ONCE;
- tmpop = cUNOPo->op_first; /* to list (nulled) */
- tmpop = ((UNOP*)tmpop)->op_first; /* to pushmark */
- tmpop->op_sibling = Nullop; /* don't free split */
- right->op_next = tmpop->op_next; /* fix starting loc */
- op_free(o); /* blow off assign */
- right->op_flags &= ~OPf_WANT;
- /* "I don't know and I don't care." */
- return right;
- }
- }
- else {
- if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
- ((LISTOP*)right)->op_last->op_type == OP_CONST)
- {
- SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
- if (SvIVX(sv) == 0)
- sv_setiv(sv, PL_modcount+1);
- }
- }
- }
- }
- return o;
- }
- if (!right)
- right = newOP(OP_UNDEF, 0);
- if (right->op_type == OP_READLINE) {
- right->op_flags |= OPf_STACKED;
- return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
- }
- else {
- PL_eval_start = right; /* Grandfathering $[ assignment here. Bletch.*/
- o = newBINOP(OP_SASSIGN, flags,
- scalar(right), mod(scalar(left), OP_SASSIGN) );
- if (PL_eval_start)
- PL_eval_start = 0;
- else {
- op_free(o);
- return Nullop;
- }
- }
- return o;
-}
-
-OP *
-Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
-{
- U32 seq = intro_my();
- register COP *cop;
-
- NewOp(1101, cop, 1, COP);
- if (PERLDB_LINE && CopLINE(PL_curcop) && PL_curstash != PL_debstash) {
- cop->op_type = OP_DBSTATE;
- cop->op_ppaddr = PL_ppaddr[ OP_DBSTATE ];
- }
- else {
- cop->op_type = OP_NEXTSTATE;
- cop->op_ppaddr = PL_ppaddr[ OP_NEXTSTATE ];
- }
- cop->op_flags = flags;
- cop->op_private = (PL_hints & HINT_BYTE);
-#ifdef NATIVE_HINTS
- cop->op_private |= NATIVE_HINTS;
-#endif
- PL_compiling.op_private = cop->op_private;
- cop->op_next = (OP*)cop;
-
- if (label) {
- cop->cop_label = label;
- PL_hints |= HINT_BLOCK_SCOPE;
- }
- cop->cop_seq = seq;
- cop->cop_arybase = PL_curcop->cop_arybase;
- if (specialWARN(PL_curcop->cop_warnings))
- cop->cop_warnings = PL_curcop->cop_warnings ;
- else
- cop->cop_warnings = newSVsv(PL_curcop->cop_warnings) ;
-
-
- if (PL_copline == NOLINE)
- CopLINE_set(cop, CopLINE(PL_curcop));
- else {
- CopLINE_set(cop, PL_copline);
- PL_copline = NOLINE;
- }
-#ifdef USE_ITHREADS
- CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */
-#else
- CopFILEGV_set(cop, CopFILEGV(PL_curcop));
-#endif
- CopSTASH_set(cop, PL_curstash);
-
- if (PERLDB_LINE && PL_curstash != PL_debstash) {
- SV **svp = av_fetch(CopFILEAV(PL_curcop), (I32)CopLINE(cop), FALSE);
- if (svp && *svp != &PL_sv_undef && !SvIOK(*svp)) {
- (void)SvIOK_on(*svp);
- SvIVX(*svp) = PTR2IV(cop);
- }
- }
-
- return prepend_elem(OP_LINESEQ, (OP*)cop, o);
-}
-
-/* "Introduce" my variables to visible status. */
-U32
-Perl_intro_my(pTHX)
-{
- SV **svp;
- SV *sv;
- I32 i;
-
- if (! PL_min_intro_pending)
- return PL_cop_seqmax;
-
- svp = AvARRAY(PL_comppad_name);
- for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) {
- if ((sv = svp[i]) && sv != &PL_sv_undef && !SvIVX(sv)) {
- SvIVX(sv) = PAD_MAX; /* Don't know scope end yet. */
- SvNVX(sv) = (NV)PL_cop_seqmax;
- }
- }
- PL_min_intro_pending = 0;
- PL_comppad_name_fill = PL_max_intro_pending; /* Needn't search higher */
- return PL_cop_seqmax++;
-}
-
-OP *
-Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
-{
- return new_logop(type, flags, &first, &other);
-}
-
-STATIC OP *
-S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
-{
- LOGOP *logop;
- OP *o;
- OP *first = *firstp;
- OP *other = *otherp;
-
- if (type == OP_XOR) /* Not short circuit, but here by precedence. */
- return newBINOP(type, flags, scalar(first), scalar(other));
-
- scalarboolean(first);
- /* optimize "!a && b" to "a || b", and "!a || b" to "a && b" */
- if (first->op_type == OP_NOT && (first->op_flags & OPf_SPECIAL)) {
- if (type == OP_AND || type == OP_OR) {
- if (type == OP_AND)
- type = OP_OR;
- else
- type = OP_AND;
- o = first;
- first = *firstp = cUNOPo->op_first;
- if (o->op_next)
- first->op_next = o->op_next;
- cUNOPo->op_first = Nullop;
- op_free(o);
- }
- }
- if (first->op_type == OP_CONST) {
- if (ckWARN(WARN_BAREWORD) && (first->op_private & OPpCONST_BARE))
- Perl_warner(aTHX_ WARN_BAREWORD, "Bareword found in conditional");
- if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) {
- op_free(first);
- *firstp = Nullop;
- return other;
- }
- else {
- op_free(other);
- *otherp = Nullop;
- return first;
- }
- }
- else if (first->op_type == OP_WANTARRAY) {
- if (type == OP_AND)
- list(other);
- else
- scalar(other);
- }
- else if (ckWARN(WARN_MISC) && (first->op_flags & OPf_KIDS)) {
- OP *k1 = ((UNOP*)first)->op_first;
- OP *k2 = k1->op_sibling;
- OPCODE warnop = 0;
- switch (first->op_type)
- {
- case OP_NULL:
- if (k2 && k2->op_type == OP_READLINE
- && (k2->op_flags & OPf_STACKED)
- && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
- {
- warnop = k2->op_type;
- }
- break;
-
- case OP_SASSIGN:
- if (k1->op_type == OP_READDIR
- || k1->op_type == OP_GLOB
- || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
- || k1->op_type == OP_EACH)
- {
- warnop = ((k1->op_type == OP_NULL)
- ? k1->op_targ : k1->op_type);
- }
- break;
- }
- if (warnop) {
- line_t oldline = CopLINE(PL_curcop);
- CopLINE_set(PL_curcop, PL_copline);
- Perl_warner(aTHX_ WARN_MISC,
- "Value of %s%s can be \"0\"; test with defined()",
- PL_op_desc[warnop],
- ((warnop == OP_READLINE || warnop == OP_GLOB)
- ? " construct" : "() operator"));
- CopLINE_set(PL_curcop, oldline);
- }
- }
-
- if (!other)
- return first;
-
- if (type == OP_ANDASSIGN || type == OP_ORASSIGN)
- other->op_private |= OPpASSIGN_BACKWARDS; /* other is an OP_SASSIGN */
-
- NewOp(1101, logop, 1, LOGOP);
-
- logop->op_type = type;
- logop->op_ppaddr = PL_ppaddr[type];
- logop->op_first = first;
- logop->op_flags = flags | OPf_KIDS;
- logop->op_other = LINKLIST(other);
- logop->op_private = 1 | (flags >> 8);
-
- /* establish postfix order */
- logop->op_next = LINKLIST(first);
- first->op_next = (OP*)logop;
- first->op_sibling = other;
-
- o = newUNOP(OP_NULL, 0, (OP*)logop);
- other->op_next = o;
-
- return o;
-}
-
-OP *
-Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
-{
- LOGOP *logop;
- OP *start;
- OP *o;
-
- if (!falseop)
- return newLOGOP(OP_AND, 0, first, trueop);
- if (!trueop)
- return newLOGOP(OP_OR, 0, first, falseop);
-
- scalarboolean(first);
- if (first->op_type == OP_CONST) {
- if (SvTRUE(((SVOP*)first)->op_sv)) {
- op_free(first);
- op_free(falseop);
- return trueop;
- }
- else {
- op_free(first);
- op_free(trueop);
- return falseop;
- }
- }
- else if (first->op_type == OP_WANTARRAY) {
- list(trueop);
- scalar(falseop);
- }
- NewOp(1101, logop, 1, LOGOP);
- logop->op_type = OP_COND_EXPR;
- logop->op_ppaddr = PL_ppaddr[OP_COND_EXPR];
- logop->op_first = first;
- logop->op_flags = flags | OPf_KIDS;
- logop->op_private = 1 | (flags >> 8);
- logop->op_other = LINKLIST(trueop);
- logop->op_next = LINKLIST(falseop);
-
-
- /* establish postfix order */
- start = LINKLIST(first);
- first->op_next = (OP*)logop;
-
- first->op_sibling = trueop;
- trueop->op_sibling = falseop;
- o = newUNOP(OP_NULL, 0, (OP*)logop);
-
- trueop->op_next = falseop->op_next = o;
-
- o->op_next = start;
- return o;
-}
-
-OP *
-Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
-{
- LOGOP *range;
- OP *flip;
- OP *flop;
- OP *leftstart;
- OP *o;
-
- NewOp(1101, range, 1, LOGOP);
-
- range->op_type = OP_RANGE;
- range->op_ppaddr = PL_ppaddr[OP_RANGE];
- range->op_first = left;
- range->op_flags = OPf_KIDS;
- leftstart = LINKLIST(left);
- range->op_other = LINKLIST(right);
- range->op_private = 1 | (flags >> 8);
-
- left->op_sibling = right;
-
- range->op_next = (OP*)range;
- flip = newUNOP(OP_FLIP, flags, (OP*)range);
- flop = newUNOP(OP_FLOP, 0, flip);
- o = newUNOP(OP_NULL, 0, flop);
- linklist(flop);
- range->op_next = leftstart;
-
- left->op_next = flip;
- right->op_next = flop;
-
- range->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
- sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV);
- flip->op_targ = pad_alloc(OP_RANGE, SVs_PADMY);
- sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV);
-
- flip->op_private = left->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
- flop->op_private = right->op_type == OP_CONST ? OPpFLIP_LINENUM : 0;
-
- flip->op_next = o;
- if (!flip->op_private || !flop->op_private)
- linklist(o); /* blow off optimizer unless constant */
-
- return o;
-}
-
-OP *
-Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
-{
- OP* listop;
- OP* o;
- int once = block && block->op_flags & OPf_SPECIAL &&
- (block->op_type == OP_ENTERSUB || block->op_type == OP_NULL);
-
- if (expr) {
- if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv))
- return block; /* do {} while 0 does once */
- if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
- || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) {
- expr = newUNOP(OP_DEFINED, 0,
- newASSIGNOP(0, newDEFSVOP(), 0, expr) );
- } else if (expr->op_flags & OPf_KIDS) {
- OP *k1 = ((UNOP*)expr)->op_first;
- OP *k2 = (k1) ? k1->op_sibling : NULL;
- switch (expr->op_type) {
- case OP_NULL:
- if (k2 && k2->op_type == OP_READLINE
- && (k2->op_flags & OPf_STACKED)
- && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
- expr = newUNOP(OP_DEFINED, 0, expr);
- break;
-
- case OP_SASSIGN:
- if (k1->op_type == OP_READDIR
- || k1->op_type == OP_GLOB
- || (k1->op_type == OP_NULL && k1->op_targ == OP_NULL)
- || k1->op_type == OP_EACH)
- expr = newUNOP(OP_DEFINED, 0, expr);
- break;
- }
- }
- }
-
- listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0));
- o = new_logop(OP_AND, 0, &expr, &listop);
-
- if (listop)
- ((LISTOP*)listop)->op_last->op_next = LINKLIST(o);
-
- if (once && o != listop)
- o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other;
-
- if (o == listop)
- o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */
-
- o->op_flags |= flags;
- o = scope(o);
- o->op_flags |= OPf_SPECIAL; /* suppress POPBLOCK curpm restoration*/
- return o;
-}
-
-OP *
-Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *block, OP *cont)
-{
- OP *redo;
- OP *next = 0;
- OP *listop;
- OP *o;
- OP *condop;
- U8 loopflags = 0;
-
- if (expr && (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB
- || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB))) {
- expr = newUNOP(OP_DEFINED, 0,
- newASSIGNOP(0, newDEFSVOP(), 0, expr) );
- } else if (expr && (expr->op_flags & OPf_KIDS)) {
- OP *k1 = ((UNOP*)expr)->op_first;
- OP *k2 = (k1) ? k1->op_sibling : NULL;
- switch (expr->op_type) {
- case OP_NULL:
- if (k2 && k2->op_type == OP_READLINE
- && (k2->op_flags & OPf_STACKED)
- && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR))
- expr = newUNOP(OP_DEFINED, 0, expr);
- break;
-
- case OP_SASSIGN:
- if (k1->op_type == OP_READDIR
- || k1->op_type == OP_GLOB
- || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB)
- || k1->op_type == OP_EACH)
- expr = newUNOP(OP_DEFINED, 0, expr);
- break;
- }
- }
-
- if (!block)
- block = newOP(OP_NULL, 0);
- else if (cont) {
- block = scope(block);
- }
-
- if (cont) {
- next = LINKLIST(cont);
- }
- if (expr) {
- OP *unstack = newOP(OP_UNSTACK, 0);
- if (!next)
- next = unstack;
- cont = append_elem(OP_LINESEQ, cont, unstack);
- if ((line_t)whileline != NOLINE) {
- PL_copline = whileline;
- cont = append_elem(OP_LINESEQ, cont,
- newSTATEOP(0, Nullch, Nullop));
- }
- }
-
- listop = append_list(OP_LINESEQ, (LISTOP*)block, (LISTOP*)cont);
- redo = LINKLIST(listop);
-
- if (expr) {
- PL_copline = whileline;
- scalar(listop);
- o = new_logop(OP_AND, 0, &expr, &listop);
- if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
- op_free(expr); /* oops, it's a while (0) */
- op_free((OP*)loop);
- return Nullop; /* listop already freed by new_logop */
- }
- if (listop)
- ((LISTOP*)listop)->op_last->op_next = condop =
- (o == listop ? redo : LINKLIST(o));
- }
- else
- o = listop;
-
- if (!loop) {
- NewOp(1101,loop,1,LOOP);
- loop->op_type = OP_ENTERLOOP;
- loop->op_ppaddr = PL_ppaddr[OP_ENTERLOOP];
- loop->op_private = 0;
- loop->op_next = (OP*)loop;
- }
-
- o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o);
-
- loop->op_redoop = redo;
- loop->op_lastop = o;
- o->op_private |= loopflags;
-
- if (next)
- loop->op_nextop = next;
- else
- loop->op_nextop = o;
-
- o->op_flags |= flags;
- o->op_private |= (flags >> 8);
- return o;
-}
-
-OP *
-Perl_newFOROP(pTHX_ I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont)
-{
- LOOP *loop;
- OP *wop;
- int padoff = 0;
- I32 iterflags = 0;
-
- if (sv) {
- if (sv->op_type == OP_RV2SV) { /* symbol table variable */
- sv->op_type = OP_RV2GV;
- sv->op_ppaddr = PL_ppaddr[OP_RV2GV];
- }
- else if (sv->op_type == OP_PADSV) { /* private variable */
- padoff = sv->op_targ;
- sv->op_targ = 0;
- op_free(sv);
- sv = Nullop;
- }
- else if (sv->op_type == OP_THREADSV) { /* per-thread variable */
- padoff = sv->op_targ;
- sv->op_targ = 0;
- iterflags |= OPf_SPECIAL;
- op_free(sv);
- sv = Nullop;
- }
- else
- Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
- }
- else {
-#ifdef USE_THREADS
- padoff = find_threadsv("_");
- iterflags |= OPf_SPECIAL;
-#else
- sv = newGVOP(OP_GV, 0, PL_defgv);
-#endif
- }
- if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
- expr = mod(force_list(scalar(ref(expr, OP_ITER))), OP_GREPSTART);
- iterflags |= OPf_STACKED;
- }
- else if (expr->op_type == OP_NULL &&
- (expr->op_flags & OPf_KIDS) &&
- ((BINOP*)expr)->op_first->op_type == OP_FLOP)
- {
- /* Basically turn for($x..$y) into the same as for($x,$y), but we
- * set the STACKED flag to indicate that these values are to be
- * treated as min/max values by 'pp_iterinit'.
- */
- UNOP* flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first;
- LOGOP* range = (LOGOP*) flip->op_first;
- OP* left = range->op_first;
- OP* right = left->op_sibling;
- LISTOP* listop;
-
- range->op_flags &= ~OPf_KIDS;
- range->op_first = Nullop;
-
- listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right);
- listop->op_first->op_next = range->op_next;
- left->op_next = range->op_other;
- right->op_next = (OP*)listop;
- listop->op_next = listop->op_first;
-
- op_free(expr);
- expr = (OP*)(listop);
- null(expr);
- iterflags |= OPf_STACKED;
- }
- else {
- expr = mod(force_list(expr), OP_GREPSTART);
- }
-
-
- loop = (LOOP*)list(convert(OP_ENTERITER, iterflags,
- append_elem(OP_LIST, expr, scalar(sv))));
- assert(!loop->op_next);
-#ifdef PL_OP_SLAB_ALLOC
- {
- LOOP *tmp;
- NewOp(1234,tmp,1,LOOP);
- Copy(loop,tmp,1,LOOP);
- loop = tmp;
- }
-#else
- Renew(loop, 1, LOOP);
-#endif
- loop->op_targ = padoff;
- wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont);
- PL_copline = forline;
- return newSTATEOP(0, label, wop);
-}
-
-OP*
-Perl_newLOOPEX(pTHX_ I32 type, OP *label)
-{
- OP *o;
- STRLEN n_a;
-
- if (type != OP_GOTO || label->op_type == OP_CONST) {
- /* "last()" means "last" */
- if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS))
- o = newOP(type, OPf_SPECIAL);
- else {
- o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
- ? SvPVx(((SVOP*)label)->op_sv, n_a)
- : ""));
- }
- op_free(label);
- }
- else {
- if (label->op_type == OP_ENTERSUB)
- label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
- o = newUNOP(type, OPf_STACKED, label);
- }
- PL_hints |= HINT_BLOCK_SCOPE;
- return o;
-}
-
-void
-Perl_cv_undef(pTHX_ CV *cv)
-{
-#ifdef USE_THREADS
- if (CvMUTEXP(cv)) {
- MUTEX_DESTROY(CvMUTEXP(cv));
- Safefree(CvMUTEXP(cv));
- CvMUTEXP(cv) = 0;
- }
-#endif /* USE_THREADS */
-
- if (!CvXSUB(cv) && CvROOT(cv)) {
-#ifdef USE_THREADS
- if (CvDEPTH(cv) || (CvOWNER(cv) && CvOWNER(cv) != thr))
- Perl_croak(aTHX_ "Can't undef active subroutine");
-#else
- if (CvDEPTH(cv))
- Perl_croak(aTHX_ "Can't undef active subroutine");
-#endif /* USE_THREADS */
- ENTER;
-
- SAVEVPTR(PL_curpad);
- PL_curpad = 0;
-
- op_free(CvROOT(cv));
- CvROOT(cv) = Nullop;
- LEAVE;
- }
- SvPOK_off((SV*)cv); /* forget prototype */
- CvGV(cv) = Nullgv;
- /* Since closure prototypes have the same lifetime as the containing
- * CV, they don't hold a refcount on the outside CV. This avoids
- * the refcount loop between the outer CV (which keeps a refcount to
- * the closure prototype in the pad entry for pp_anoncode()) and the
- * closure prototype, and the ensuing memory leak. --GSAR */
- if (!CvANON(cv) || CvCLONED(cv))
- SvREFCNT_dec(CvOUTSIDE(cv));
- CvOUTSIDE(cv) = Nullcv;
- if (CvPADLIST(cv)) {
- /* may be during global destruction */
- if (SvREFCNT(CvPADLIST(cv))) {
- I32 i = AvFILLp(CvPADLIST(cv));
- while (i >= 0) {
- SV** svp = av_fetch(CvPADLIST(cv), i--, FALSE);
- SV* sv = svp ? *svp : Nullsv;
- if (!sv)
- continue;
- if (sv == (SV*)PL_comppad_name)
- PL_comppad_name = Nullav;
- else if (sv == (SV*)PL_comppad) {
- PL_comppad = Nullav;
- PL_curpad = Null(SV**);
- }
- SvREFCNT_dec(sv);
- }
- SvREFCNT_dec((SV*)CvPADLIST(cv));
- }
- CvPADLIST(cv) = Nullav;
- }
- CvFLAGS(cv) = 0;
-}
-
-STATIC void
-S_cv_dump(pTHX_ CV *cv)
-{
-#ifdef DEBUGGING
- CV *outside = CvOUTSIDE(cv);
- AV* padlist = CvPADLIST(cv);
- AV* pad_name;
- AV* pad;
- SV** pname;
- SV** ppad;
- I32 ix;
-
- PerlIO_printf(Perl_debug_log,
- "\tCV=0x%"UVxf" (%s), OUTSIDE=0x%"UVxf" (%s)\n",
- PTR2UV(cv),
- (CvANON(cv) ? "ANON"
- : (cv == PL_main_cv) ? "MAIN"
- : CvUNIQUE(cv) ? "UNIQUE"
- : CvGV(cv) ? GvNAME(CvGV(cv)) : "UNDEFINED"),
- PTR2UV(outside),
- (!outside ? "null"
- : CvANON(outside) ? "ANON"
- : (outside == PL_main_cv) ? "MAIN"
- : CvUNIQUE(outside) ? "UNIQUE"
- : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED"));
-
- if (!padlist)
- return;
-
- pad_name = (AV*)*av_fetch(padlist, 0, FALSE);
- pad = (AV*)*av_fetch(padlist, 1, FALSE);
- pname = AvARRAY(pad_name);
- ppad = AvARRAY(pad);
-
- for (ix = 1; ix <= AvFILLp(pad_name); ix++) {
- if (SvPOK(pname[ix]))
- PerlIO_printf(Perl_debug_log,
- "\t%4d. 0x%"UVxf" (%s\"%s\" %"IVdf"-%"IVdf")\n",
- (int)ix, PTR2UV(ppad[ix]),
- SvFAKE(pname[ix]) ? "FAKE " : "",
- SvPVX(pname[ix]),
- (IV)I_32(SvNVX(pname[ix])),
- SvIVX(pname[ix]));
- }
-#endif /* DEBUGGING */
-}
-
-STATIC CV *
-S_cv_clone2(pTHX_ CV *proto, CV *outside)
-{
- AV* av;
- I32 ix;
- AV* protopadlist = CvPADLIST(proto);
- AV* protopad_name = (AV*)*av_fetch(protopadlist, 0, FALSE);
- AV* protopad = (AV*)*av_fetch(protopadlist, 1, FALSE);
- SV** pname = AvARRAY(protopad_name);
- SV** ppad = AvARRAY(protopad);
- I32 fname = AvFILLp(protopad_name);
- I32 fpad = AvFILLp(protopad);
- AV* comppadlist;
- CV* cv;
-
- assert(!CvUNIQUE(proto));
-
- ENTER;
- SAVECOMPPAD();
- SAVESPTR(PL_comppad_name);
- SAVESPTR(PL_compcv);
-
- cv = PL_compcv = (CV*)NEWSV(1104,0);
- sv_upgrade((SV *)cv, SvTYPE(proto));
- CvFLAGS(cv) = CvFLAGS(proto) & ~CVf_CLONE;
- CvCLONED_on(cv);
-
-#ifdef USE_THREADS
- New(666, CvMUTEXP(cv), 1, perl_mutex);
- MUTEX_INIT(CvMUTEXP(cv));
- CvOWNER(cv) = 0;
-#endif /* USE_THREADS */
- CvFILE(cv) = CvFILE(proto);
- CvGV(cv) = CvGV(proto);
- CvSTASH(cv) = CvSTASH(proto);
- CvROOT(cv) = OpREFCNT_inc(CvROOT(proto));
- CvSTART(cv) = CvSTART(proto);
- if (outside)
- CvOUTSIDE(cv) = (CV*)SvREFCNT_inc(outside);
-
- if (SvPOK(proto))
- sv_setpvn((SV*)cv, SvPVX(proto), SvCUR(proto));
-
- PL_comppad_name = newAV();
- for (ix = fname; ix >= 0; ix--)
- av_store(PL_comppad_name, ix, SvREFCNT_inc(pname[ix]));
-
- PL_comppad = newAV();
-
- comppadlist = newAV();
- AvREAL_off(comppadlist);
- av_store(comppadlist, 0, (SV*)PL_comppad_name);
- av_store(comppadlist, 1, (SV*)PL_comppad);
- CvPADLIST(cv) = comppadlist;
- av_fill(PL_comppad, AvFILLp(protopad));
- PL_curpad = AvARRAY(PL_comppad);
-
- av = newAV(); /* will be @_ */
- av_extend(av, 0);
- av_store(PL_comppad, 0, (SV*)av);
- AvFLAGS(av) = AVf_REIFY;
-
- for (ix = fpad; ix > 0; ix--) {
- SV* namesv = (ix <= fname) ? pname[ix] : Nullsv;
- if (namesv && namesv != &PL_sv_undef) {
- char *name = SvPVX(namesv); /* XXX */
- if (SvFLAGS(namesv) & SVf_FAKE) { /* lexical from outside? */
- I32 off = pad_findlex(name, ix, SvIVX(namesv),
- CvOUTSIDE(cv), cxstack_ix, 0, 0);
- if (!off)
- PL_curpad[ix] = SvREFCNT_inc(ppad[ix]);
- else if (off != ix)
- Perl_croak(aTHX_ "panic: cv_clone: %s", name);
- }
- else { /* our own lexical */
- SV* sv;
- if (*name == '&') {
- /* anon code -- we'll come back for it */
- sv = SvREFCNT_inc(ppad[ix]);
- }
- else if (*name == '@')
- sv = (SV*)newAV();
- else if (*name == '%')
- sv = (SV*)newHV();
- else
- sv = NEWSV(0,0);
- if (!SvPADBUSY(sv))
- SvPADMY_on(sv);
- PL_curpad[ix] = sv;
- }
- }
- else if (IS_PADGV(ppad[ix]) || IS_PADCONST(ppad[ix])) {
- PL_curpad[ix] = SvREFCNT_inc(ppad[ix]);
- }
- else {
- SV* sv = NEWSV(0,0);
- SvPADTMP_on(sv);
- PL_curpad[ix] = sv;
- }
- }
-
- /* Now that vars are all in place, clone nested closures. */
-
- for (ix = fpad; ix > 0; ix--) {
- SV* namesv = (ix <= fname) ? pname[ix] : Nullsv;
- if (namesv
- && namesv != &PL_sv_undef
- && !(SvFLAGS(namesv) & SVf_FAKE)
- && *SvPVX(namesv) == '&'
- && CvCLONE(ppad[ix]))
- {
- CV *kid = cv_clone2((CV*)ppad[ix], cv);
- SvREFCNT_dec(ppad[ix]);
- CvCLONE_on(kid);
- SvPADMY_on(kid);
- PL_curpad[ix] = (SV*)kid;
- }
- }
-
-#ifdef DEBUG_CLOSURES
- PerlIO_printf(Perl_debug_log, "Cloned inside:\n");
- cv_dump(outside);
- PerlIO_printf(Perl_debug_log, " from:\n");
- cv_dump(proto);
- PerlIO_printf(Perl_debug_log, " to:\n");
- cv_dump(cv);
-#endif
-
- LEAVE;
- return cv;
-}
-
-CV *
-Perl_cv_clone(pTHX_ CV *proto)
-{
- CV *cv;
- LOCK_CRED_MUTEX; /* XXX create separate mutex */
- cv = cv_clone2(proto, CvOUTSIDE(proto));
- UNLOCK_CRED_MUTEX; /* XXX create separate mutex */
- return cv;
-}
-
-void
-Perl_cv_ckproto(pTHX_ CV *cv, GV *gv, char *p)
-{
- if (((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) && ckWARN_d(WARN_PROTOTYPE)) {
- SV* msg = sv_newmortal();
- SV* name = Nullsv;
-
- if (gv)
- gv_efullname3(name = sv_newmortal(), gv, Nullch);
- sv_setpv(msg, "Prototype mismatch:");
- if (name)
- Perl_sv_catpvf(aTHX_ msg, " sub %"SVf, name);
- if (SvPOK(cv))
- Perl_sv_catpvf(aTHX_ msg, " (%s)", SvPVX(cv));
- sv_catpv(msg, " vs ");
- if (p)
- Perl_sv_catpvf(aTHX_ msg, "(%s)", p);
- else
- sv_catpv(msg, "none");
- Perl_warner(aTHX_ WARN_PROTOTYPE, "%"SVf, msg);
- }
-}
-
-SV *
-Perl_cv_const_sv(pTHX_ CV *cv)
-{
- if (!cv || !SvPOK(cv) || SvCUR(cv))
- return Nullsv;
- return op_const_sv(CvSTART(cv), cv);
-}
-
-SV *
-Perl_op_const_sv(pTHX_ OP *o, CV *cv)
-{
- SV *sv = Nullsv;
-
- if (!o)
- return Nullsv;
-
- if (o->op_type == OP_LINESEQ && cLISTOPo->op_first)
- o = cLISTOPo->op_first->op_sibling;
-
- for (; o; o = o->op_next) {
- OPCODE type = o->op_type;
-
- if (sv && o->op_next == o)
- return sv;
- if (type == OP_NEXTSTATE || type == OP_NULL || type == OP_PUSHMARK)
- continue;
- if (type == OP_LEAVESUB || type == OP_RETURN)
- break;
- if (sv)
- return Nullsv;
- if (type == OP_CONST && cSVOPo->op_sv)
- sv = cSVOPo->op_sv;
- else if ((type == OP_PADSV || type == OP_CONST) && cv) {
- AV* padav = (AV*)(AvARRAY(CvPADLIST(cv))[1]);
- sv = padav ? AvARRAY(padav)[o->op_targ] : Nullsv;
- if (!sv || (!SvREADONLY(sv) && SvREFCNT(sv) > 1))
- return Nullsv;
- }
- else
- return Nullsv;
- }
- if (sv)
- SvREADONLY_on(sv);
- return sv;
-}
-
-void
-Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
-{
- if (o)
- SAVEFREEOP(o);
- if (proto)
- SAVEFREEOP(proto);
- if (attrs)
- SAVEFREEOP(attrs);
- if (block)
- SAVEFREEOP(block);
- Perl_croak(aTHX_ "\"my sub\" not yet implemented");
-}
-
-CV *
-Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
-{
- return Perl_newATTRSUB(aTHX_ floor, o, proto, Nullop, block);
-}
-
-CV *
-Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
-{
- STRLEN n_a;
- char *name;
- char *aname;
- GV *gv;
- char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, n_a) : Nullch;
- register CV *cv=0;
- I32 ix;
-
- name = o ? SvPVx(cSVOPo->op_sv, n_a) : Nullch;
- if (!name && PERLDB_NAMEANON && CopLINE(PL_curcop)) {
- SV *sv = sv_newmortal();
- Perl_sv_setpvf(aTHX_ sv, "__ANON__[%s:%"IVdf"]",
- CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
- aname = SvPVX(sv);
- }
- else
- aname = Nullch;
- gv = gv_fetchpv(name ? name : (aname ? aname : "__ANON__"),
- GV_ADDMULTI | ((block || attrs) ? 0 : GV_NOINIT),
- SVt_PVCV);
-
- if (o)
- SAVEFREEOP(o);
- if (proto)
- SAVEFREEOP(proto);
- if (attrs)
- SAVEFREEOP(attrs);
-
- if (SvTYPE(gv) != SVt_PVGV) { /* Maybe prototype now, and had at
- maximum a prototype before. */
- if (SvTYPE(gv) > SVt_NULL) {
- if (!SvPOK((SV*)gv) && !(SvIOK((SV*)gv) && SvIVX((SV*)gv) == -1)
- && ckWARN_d(WARN_PROTOTYPE))
- {
- Perl_warner(aTHX_ WARN_PROTOTYPE, "Runaway prototype");
- }
- cv_ckproto((CV*)gv, NULL, ps);
- }
- if (ps)
- sv_setpv((SV*)gv, ps);
- else
- sv_setiv((SV*)gv, -1);
- SvREFCNT_dec(PL_compcv);
- cv = PL_compcv = NULL;
- PL_sub_generation++;
- goto noblock;
- }
-
- if (!name || GvCVGEN(gv))
- cv = Nullcv;
- else if ((cv = GvCV(gv))) {
- cv_ckproto(cv, gv, ps);
- /* already defined (or promised)? */
- if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
- SV* const_sv;
- bool const_changed = TRUE;
- if (!block && !attrs) {
- /* just a "sub foo;" when &foo is already defined */
- SAVEFREESV(PL_compcv);
- goto done;
- }
- /* ahem, death to those who redefine active sort subs */
- if (PL_curstackinfo->si_type == PERLSI_SORT &&
- PL_sortcop == CvSTART(cv)) {
- op_free(block);
- Perl_croak(aTHX_ "Can't redefine active sort subroutine %s", name);
- }
- if (!block)
- goto withattrs;
- if ((const_sv = cv_const_sv(cv)))
- const_changed = sv_cmp(const_sv, op_const_sv(block, Nullcv));
- if ((const_sv || const_changed) && ckWARN(WARN_REDEFINE))
- {
- line_t oldline = CopLINE(PL_curcop);
- CopLINE_set(PL_curcop, PL_copline);
- Perl_warner(aTHX_ WARN_REDEFINE,
- const_sv ? "Constant subroutine %s redefined"
- : "Subroutine %s redefined", name);
- CopLINE_set(PL_curcop, oldline);
- }
- SvREFCNT_dec(cv);
- cv = Nullcv;
- }
- }
- withattrs:
- if (attrs) {
- HV *stash;
- SV *rcv;
-
- /* Need to do a C<use attributes $stash_of_cv,\&cv,@attrs>
- * before we clobber PL_compcv.
- */
- if (cv && !block) {
- rcv = (SV*)cv;
- if (CvGV(cv) && GvSTASH(CvGV(cv)) && HvNAME(GvSTASH(CvGV(cv))))
- stash = GvSTASH(CvGV(cv));
- else if (CvSTASH(cv) && HvNAME(CvSTASH(cv)))
- stash = CvSTASH(cv);
- else
- stash = PL_curstash;
- }
- else {
- /* possibly about to re-define existing subr -- ignore old cv */
- rcv = (SV*)PL_compcv;
- if (name && GvSTASH(gv) && HvNAME(GvSTASH(gv)))
- stash = GvSTASH(gv);
- else
- stash = PL_curstash;
- }
- apply_attrs(stash, rcv, attrs);
- }
- if (cv) { /* must reuse cv if autoloaded */
- if (!block) {
- /* got here with just attrs -- work done, so bug out */
- SAVEFREESV(PL_compcv);
- goto done;
- }
- cv_undef(cv);
- CvFLAGS(cv) = CvFLAGS(PL_compcv);
- CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
- CvOUTSIDE(PL_compcv) = 0;
- CvPADLIST(cv) = CvPADLIST(PL_compcv);
- CvPADLIST(PL_compcv) = 0;
- /* inner references to PL_compcv must be fixed up ... */
- {
- AV *padlist = CvPADLIST(cv);
- AV *comppad_name = (AV*)AvARRAY(padlist)[0];
- AV *comppad = (AV*)AvARRAY(padlist)[1];
- SV **namepad = AvARRAY(comppad_name);
- SV **curpad = AvARRAY(comppad);
- for (ix = AvFILLp(comppad_name); ix > 0; ix--) {
- SV *namesv = namepad[ix];
- if (namesv && namesv != &PL_sv_undef
- && *SvPVX(namesv) == '&')
- {
- CV *innercv = (CV*)curpad[ix];
- if (CvOUTSIDE(innercv) == PL_compcv) {
- CvOUTSIDE(innercv) = cv;
- if (!CvANON(innercv) || CvCLONED(innercv)) {
- (void)SvREFCNT_inc(cv);
- SvREFCNT_dec(PL_compcv);
- }
- }
- }
- }
- }
- /* ... before we throw it away */
- SvREFCNT_dec(PL_compcv);
- }
- else {
- cv = PL_compcv;
- if (name) {
- GvCV(gv) = cv;
- GvCVGEN(gv) = 0;
- PL_sub_generation++;
- }
- }
- CvGV(cv) = gv;
- CvFILE(cv) = CopFILE(PL_curcop);
- CvSTASH(cv) = PL_curstash;
-#ifdef USE_THREADS
- CvOWNER(cv) = 0;
- if (!CvMUTEXP(cv)) {
- New(666, CvMUTEXP(cv), 1, perl_mutex);
- MUTEX_INIT(CvMUTEXP(cv));
- }
-#endif /* USE_THREADS */
-
- if (ps)
- sv_setpv((SV*)cv, ps);
-
- if (PL_error_count) {
- op_free(block);
- block = Nullop;
- if (name) {
- char *s = strrchr(name, ':');
- s = s ? s+1 : name;
- if (strEQ(s, "BEGIN")) {
- char *not_safe =
- "BEGIN not safe after errors--compilation aborted";
- if (PL_in_eval & EVAL_KEEPERR)
- Perl_croak(aTHX_ not_safe);
- else {
- /* force display of errors found but not reported */
- sv_catpv(ERRSV, not_safe);
- Perl_croak(aTHX_ "%s", SvPVx(ERRSV, n_a));
- }
- }
- }
- }
- if (!block) {
- noblock:
- PL_copline = NOLINE;
- LEAVE_SCOPE(floor);
- return cv;
- }
-
- if (AvFILLp(PL_comppad_name) < AvFILLp(PL_comppad))
- av_store(PL_comppad_name, AvFILLp(PL_comppad), Nullsv);
-
- if (CvLVALUE(cv)) {
- CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
- mod(scalarseq(block), OP_LEAVESUBLV));
- }
- else {
- CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
- }
- CvROOT(cv)->op_private |= OPpREFCOUNTED;
- OpREFCNT_set(CvROOT(cv), 1);
- CvSTART(cv) = LINKLIST(CvROOT(cv));
- CvROOT(cv)->op_next = 0;
- peep(CvSTART(cv));
-
- /* now that optimizer has done its work, adjust pad values */
- if (CvCLONE(cv)) {
- SV **namep = AvARRAY(PL_comppad_name);
- for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
- SV *namesv;
-
- if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
- continue;
- /*
- * The only things that a clonable function needs in its
- * pad are references to outer lexicals and anonymous subs.
- * The rest are created anew during cloning.
- */
- if (!((namesv = namep[ix]) != Nullsv &&
- namesv != &PL_sv_undef &&
- (SvFAKE(namesv) ||
- *SvPVX(namesv) == '&')))
- {
- SvREFCNT_dec(PL_curpad[ix]);
- PL_curpad[ix] = Nullsv;
- }
- }
- }
- else {
- AV *av = newAV(); /* Will be @_ */
- av_extend(av, 0);
- av_store(PL_comppad, 0, (SV*)av);
- AvFLAGS(av) = AVf_REIFY;
-
- for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
- if (SvIMMORTAL(PL_curpad[ix]) || IS_PADGV(PL_curpad[ix]) || IS_PADCONST(PL_curpad[ix]))
- continue;
- if (!SvPADMY(PL_curpad[ix]))
- SvPADTMP_on(PL_curpad[ix]);
- }
- }
-
- /* If a potential closure prototype, don't keep a refcount on outer CV.
- * This is okay as the lifetime of the prototype is tied to the
- * lifetime of the outer CV. Avoids memory leak due to reference
- * loop. --GSAR */
- if (!name)
- SvREFCNT_dec(CvOUTSIDE(cv));
-
- if (name || aname) {
- char *s;
- char *tname = (name ? name : aname);
-
- if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
- SV *sv = NEWSV(0,0);
- SV *tmpstr = sv_newmortal();
- GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
- CV *pcv;
- HV *hv;
-
- Perl_sv_setpvf(aTHX_ sv, "%s:%ld-%ld",
- CopFILE(PL_curcop),
- (long)PL_subline, (long)CopLINE(PL_curcop));
- gv_efullname3(tmpstr, gv, Nullch);
- hv_store(GvHV(PL_DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
- hv = GvHVn(db_postponed);
- if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
- && (pcv = GvCV(db_postponed)))
- {
- dSP;
- PUSHMARK(SP);
- XPUSHs(tmpstr);
- PUTBACK;
- call_sv((SV*)pcv, G_DISCARD);
- }
- }
-
- if ((s = strrchr(tname,':')))
- s++;
- else
- s = tname;
-
- if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
- goto done;
-
- if (strEQ(s, "BEGIN")) {
- I32 oldscope = PL_scopestack_ix;
- ENTER;
- SAVECOPFILE(&PL_compiling);
- SAVECOPLINE(&PL_compiling);
- save_svref(&PL_rs);
- sv_setsv(PL_rs, PL_nrs);
-
- if (!PL_beginav)
- PL_beginav = newAV();
- DEBUG_x( dump_sub(gv) );
- av_push(PL_beginav, (SV*)cv);
- GvCV(gv) = 0; /* cv has been hijacked */
- call_list(oldscope, PL_beginav);
-
- PL_curcop = &PL_compiling;
- PL_compiling.op_private = PL_hints;
- LEAVE;
- }
- else if (strEQ(s, "END") && !PL_error_count) {
- if (!PL_endav)
- PL_endav = newAV();
- DEBUG_x( dump_sub(gv) );
- av_unshift(PL_endav, 1);
- av_store(PL_endav, 0, (SV*)cv);
- GvCV(gv) = 0; /* cv has been hijacked */
- }
- else if (strEQ(s, "CHECK") && !PL_error_count) {
- if (!PL_checkav)
- PL_checkav = newAV();
- DEBUG_x( dump_sub(gv) );
- if (PL_main_start && ckWARN(WARN_VOID))
- Perl_warner(aTHX_ WARN_VOID, "Too late to run CHECK block");
- av_unshift(PL_checkav, 1);
- av_store(PL_checkav, 0, (SV*)cv);
- GvCV(gv) = 0; /* cv has been hijacked */
- }
- else if (strEQ(s, "INIT") && !PL_error_count) {
- if (!PL_initav)
- PL_initav = newAV();
- DEBUG_x( dump_sub(gv) );
- if (PL_main_start && ckWARN(WARN_VOID))
- Perl_warner(aTHX_ WARN_VOID, "Too late to run INIT block");
- av_push(PL_initav, (SV*)cv);
- GvCV(gv) = 0; /* cv has been hijacked */
- }
- }
-
- done:
- PL_copline = NOLINE;
- LEAVE_SCOPE(floor);
- return cv;
-}
-
-/* XXX unsafe for threads if eval_owner isn't held */
-/*
-=for apidoc newCONSTSUB
-
-Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
-eligible for inlining at compile-time.
-
-=cut
-*/
-
-void
-Perl_newCONSTSUB(pTHX_ HV *stash, char *name, SV *sv)
-{
-
- ENTER;
-
- SAVECOPLINE(PL_curcop);
- CopLINE_set(PL_curcop, PL_copline);
-
- SAVEHINTS();
- PL_hints &= ~HINT_BLOCK_SCOPE;
-
- if (stash) {
- SAVESPTR(PL_curstash);
- SAVECOPSTASH(PL_curcop);
- PL_curstash = stash;
-#ifdef USE_ITHREADS
- CopSTASHPV(PL_curcop) = stash ? HvNAME(stash) : Nullch;
-#else
- CopSTASH(PL_curcop) = stash;
-#endif
- }
-
- newATTRSUB(
- start_subparse(FALSE, 0),
- newSVOP(OP_CONST, 0, newSVpv(name,0)),
- newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */
- Nullop,
- newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
- );
-
- LEAVE;
-}
-
-/*
-=for apidoc U||newXS
-
-Used by C<xsubpp> to hook up XSUBs as Perl subs.
-
-=cut
-*/
-
-CV *
-Perl_newXS(pTHX_ char *name, XSUBADDR_t subaddr, char *filename)
-{
- GV *gv = gv_fetchpv(name ? name : "__ANON__", GV_ADDMULTI, SVt_PVCV);
- register CV *cv;
-
- if ((cv = (name ? GvCV(gv) : Nullcv))) {
- if (GvCVGEN(gv)) {
- /* just a cached method */
- SvREFCNT_dec(cv);
- cv = 0;
- }
- else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
- /* already defined (or promised) */
- if (ckWARN(WARN_REDEFINE) && !(CvGV(cv) && GvSTASH(CvGV(cv))
- && HvNAME(GvSTASH(CvGV(cv)))
- && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) {
- line_t oldline = CopLINE(PL_curcop);
- if (PL_copline != NOLINE)
- CopLINE_set(PL_curcop, PL_copline);
- Perl_warner(aTHX_ WARN_REDEFINE, "Subroutine %s redefined",name);
- CopLINE_set(PL_curcop, oldline);
- }
- SvREFCNT_dec(cv);
- cv = 0;
- }
- }
-
- if (cv) /* must reuse cv if autoloaded */
- cv_undef(cv);
- else {
- cv = (CV*)NEWSV(1105,0);
- sv_upgrade((SV *)cv, SVt_PVCV);
- if (name) {
- GvCV(gv) = cv;
- GvCVGEN(gv) = 0;
- PL_sub_generation++;
- }
- }
- CvGV(cv) = gv;
-#ifdef USE_THREADS
- New(666, CvMUTEXP(cv), 1, perl_mutex);
- MUTEX_INIT(CvMUTEXP(cv));
- CvOWNER(cv) = 0;
-#endif /* USE_THREADS */
- (void)gv_fetchfile(filename);
- CvFILE(cv) = filename; /* NOTE: not copied, as it is expected to be
- an external constant string */
- CvXSUB(cv) = subaddr;
-
- if (name) {
- char *s = strrchr(name,':');
- if (s)
- s++;
- else
- s = name;
-
- if (*s != 'B' && *s != 'E' && *s != 'C' && *s != 'I')
- goto done;
-
- if (strEQ(s, "BEGIN")) {
- if (!PL_beginav)
- PL_beginav = newAV();
- av_push(PL_beginav, (SV*)cv);
- GvCV(gv) = 0; /* cv has been hijacked */
- }
- else if (strEQ(s, "END")) {
- if (!PL_endav)
- PL_endav = newAV();
- av_unshift(PL_endav, 1);
- av_store(PL_endav, 0, (SV*)cv);
- GvCV(gv) = 0; /* cv has been hijacked */
- }
- else if (strEQ(s, "CHECK")) {
- if (!PL_checkav)
- PL_checkav = newAV();
- if (PL_main_start && ckWARN(WARN_VOID))
- Perl_warner(aTHX_ WARN_VOID, "Too late to run CHECK block");
- av_unshift(PL_checkav, 1);
- av_store(PL_checkav, 0, (SV*)cv);
- GvCV(gv) = 0; /* cv has been hijacked */
- }
- else if (strEQ(s, "INIT")) {
- if (!PL_initav)
- PL_initav = newAV();
- if (PL_main_start && ckWARN(WARN_VOID))
- Perl_warner(aTHX_ WARN_VOID, "Too late to run INIT block");
- av_push(PL_initav, (SV*)cv);
- GvCV(gv) = 0; /* cv has been hijacked */
- }
- }
- else
- CvANON_on(cv);
-
-done:
- return cv;
-}
-
-void
-Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
-{
- register CV *cv;
- char *name;
- GV *gv;
- I32 ix;
- STRLEN n_a;
-
- if (o)
- name = SvPVx(cSVOPo->op_sv, n_a);
- else
- name = "STDOUT";
- gv = gv_fetchpv(name,TRUE, SVt_PVFM);
- GvMULTI_on(gv);
- if ((cv = GvFORM(gv))) {
- if (ckWARN(WARN_REDEFINE)) {
- line_t oldline = CopLINE(PL_curcop);
-
- CopLINE_set(PL_curcop, PL_copline);
- Perl_warner(aTHX_ WARN_REDEFINE, "Format %s redefined",name);
- CopLINE_set(PL_curcop, oldline);
- }
- SvREFCNT_dec(cv);
- }
- cv = PL_compcv;
- GvFORM(gv) = cv;
- CvGV(cv) = gv;
- CvFILE(cv) = CopFILE(PL_curcop);
-
- for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
- if (!SvPADMY(PL_curpad[ix]) && !SvIMMORTAL(PL_curpad[ix]))
- SvPADTMP_on(PL_curpad[ix]);
- }
-
- CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
- CvROOT(cv)->op_private |= OPpREFCOUNTED;
- OpREFCNT_set(CvROOT(cv), 1);
- CvSTART(cv) = LINKLIST(CvROOT(cv));
- CvROOT(cv)->op_next = 0;
- peep(CvSTART(cv));
- op_free(o);
- PL_copline = NOLINE;
- LEAVE_SCOPE(floor);
-}
-
-OP *
-Perl_newANONLIST(pTHX_ OP *o)
-{
- return newUNOP(OP_REFGEN, 0,
- mod(list(convert(OP_ANONLIST, 0, o)), OP_REFGEN));
-}
-
-OP *
-Perl_newANONHASH(pTHX_ OP *o)
-{
- return newUNOP(OP_REFGEN, 0,
- mod(list(convert(OP_ANONHASH, 0, o)), OP_REFGEN));
-}
-
-OP *
-Perl_newANONSUB(pTHX_ I32 floor, OP *proto, OP *block)
-{
- return newANONATTRSUB(floor, proto, Nullop, block);
-}
-
-OP *
-Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
-{
- return newUNOP(OP_REFGEN, 0,
- newSVOP(OP_ANONCODE, 0,
- (SV*)newATTRSUB(floor, 0, proto, attrs, block)));
-}
-
-OP *
-Perl_oopsAV(pTHX_ OP *o)
-{
- switch (o->op_type) {
- case OP_PADSV:
- o->op_type = OP_PADAV;
- o->op_ppaddr = PL_ppaddr[OP_PADAV];
- return ref(o, OP_RV2AV);
-
- case OP_RV2SV:
- o->op_type = OP_RV2AV;
- o->op_ppaddr = PL_ppaddr[OP_RV2AV];
- ref(o, OP_RV2AV);
- break;
-
- default:
- if (ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "oops: oopsAV");
- break;
- }
- return o;
-}
-
-OP *
-Perl_oopsHV(pTHX_ OP *o)
-{
- switch (o->op_type) {
- case OP_PADSV:
- case OP_PADAV:
- o->op_type = OP_PADHV;
- o->op_ppaddr = PL_ppaddr[OP_PADHV];
- return ref(o, OP_RV2HV);
-
- case OP_RV2SV:
- case OP_RV2AV:
- o->op_type = OP_RV2HV;
- o->op_ppaddr = PL_ppaddr[OP_RV2HV];
- ref(o, OP_RV2HV);
- break;
-
- default:
- if (ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "oops: oopsHV");
- break;
- }
- return o;
-}
-
-OP *
-Perl_newAVREF(pTHX_ OP *o)
-{
- if (o->op_type == OP_PADANY) {
- o->op_type = OP_PADAV;
- o->op_ppaddr = PL_ppaddr[OP_PADAV];
- return o;
- }
- return newUNOP(OP_RV2AV, 0, scalar(o));
-}
-
-OP *
-Perl_newGVREF(pTHX_ I32 type, OP *o)
-{
- if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT)
- return newUNOP(OP_NULL, 0, o);
- return ref(newUNOP(OP_RV2GV, OPf_REF, o), type);
-}
-
-OP *
-Perl_newHVREF(pTHX_ OP *o)
-{
- if (o->op_type == OP_PADANY) {
- o->op_type = OP_PADHV;
- o->op_ppaddr = PL_ppaddr[OP_PADHV];
- return o;
- }
- return newUNOP(OP_RV2HV, 0, scalar(o));
-}
-
-OP *
-Perl_oopsCV(pTHX_ OP *o)
-{
- Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
- /* STUB */
- return o;
-}
-
-OP *
-Perl_newCVREF(pTHX_ I32 flags, OP *o)
-{
- return newUNOP(OP_RV2CV, flags, scalar(o));
-}
-
-OP *
-Perl_newSVREF(pTHX_ OP *o)
-{
- if (o->op_type == OP_PADANY) {
- o->op_type = OP_PADSV;
- o->op_ppaddr = PL_ppaddr[OP_PADSV];
- return o;
- }
- else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
- o->op_flags |= OPpDONE_SVREF;
- return o;
- }
- return newUNOP(OP_RV2SV, 0, scalar(o));
-}
-
-/* Check routines. */
-
-OP *
-Perl_ck_anoncode(pTHX_ OP *o)
-{
- PADOFFSET ix;
- SV* name;
-
- name = NEWSV(1106,0);
- sv_upgrade(name, SVt_PVNV);
- sv_setpvn(name, "&", 1);
- SvIVX(name) = -1;
- SvNVX(name) = 1;
- ix = pad_alloc(o->op_type, SVs_PADMY);
- av_store(PL_comppad_name, ix, name);
- av_store(PL_comppad, ix, cSVOPo->op_sv);
- SvPADMY_on(cSVOPo->op_sv);
- cSVOPo->op_sv = Nullsv;
- cSVOPo->op_targ = ix;
- return o;
-}
-
-OP *
-Perl_ck_bitop(pTHX_ OP *o)
-{
- o->op_private = PL_hints;
- return o;
-}
-
-OP *
-Perl_ck_concat(pTHX_ OP *o)
-{
- if (cUNOPo->op_first->op_type == OP_CONCAT)
- o->op_flags |= OPf_STACKED;
- return o;
-}
-
-OP *
-Perl_ck_spair(pTHX_ OP *o)
-{
- if (o->op_flags & OPf_KIDS) {
- OP* newop;
- OP* kid;
- OPCODE type = o->op_type;
- o = modkids(ck_fun(o), type);
- kid = cUNOPo->op_first;
- newop = kUNOP->op_first->op_sibling;
- if (newop &&
- (newop->op_sibling ||
- !(PL_opargs[newop->op_type] & OA_RETSCALAR) ||
- newop->op_type == OP_PADAV || newop->op_type == OP_PADHV ||
- newop->op_type == OP_RV2AV || newop->op_type == OP_RV2HV)) {
-
- return o;
- }
- op_free(kUNOP->op_first);
- kUNOP->op_first = newop;
- }
- o->op_ppaddr = PL_ppaddr[++o->op_type];
- return ck_fun(o);
-}
-
-OP *
-Perl_ck_delete(pTHX_ OP *o)
-{
- o = ck_fun(o);
- o->op_private = 0;
- if (o->op_flags & OPf_KIDS) {
- OP *kid = cUNOPo->op_first;
- switch (kid->op_type) {
- case OP_ASLICE:
- o->op_flags |= OPf_SPECIAL;
- /* FALL THROUGH */
- case OP_HSLICE:
- o->op_private |= OPpSLICE;
- break;
- case OP_AELEM:
- o->op_flags |= OPf_SPECIAL;
- /* FALL THROUGH */
- case OP_HELEM:
- break;
- default:
- Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element or slice",
- PL_op_desc[o->op_type]);
- }
- null(kid);
- }
- return o;
-}
-
-OP *
-Perl_ck_eof(pTHX_ OP *o)
-{
- I32 type = o->op_type;
-
- if (o->op_flags & OPf_KIDS) {
- if (cLISTOPo->op_first->op_type == OP_STUB) {
- op_free(o);
- o = newUNOP(type, OPf_SPECIAL,
- newGVOP(OP_GV, 0, gv_fetchpv("main::ARGV", TRUE, SVt_PVAV)));
- }
- return ck_fun(o);
- }
- return o;
-}
-
-OP *
-Perl_ck_eval(pTHX_ OP *o)
-{
- PL_hints |= HINT_BLOCK_SCOPE;
- if (o->op_flags & OPf_KIDS) {
- SVOP *kid = (SVOP*)cUNOPo->op_first;
-
- if (!kid) {
- o->op_flags &= ~OPf_KIDS;
- null(o);
- }
- else if (kid->op_type == OP_LINESEQ) {
- LOGOP *enter;
-
- kid->op_next = o->op_next;
- cUNOPo->op_first = 0;
- op_free(o);
-
- NewOp(1101, enter, 1, LOGOP);
- enter->op_type = OP_ENTERTRY;
- enter->op_ppaddr = PL_ppaddr[OP_ENTERTRY];
- enter->op_private = 0;
-
- /* establish postfix order */
- enter->op_next = (OP*)enter;
-
- o = prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid);
- o->op_type = OP_LEAVETRY;
- o->op_ppaddr = PL_ppaddr[OP_LEAVETRY];
- enter->op_other = o;
- return o;
- }
- else
- scalar((OP*)kid);
- }
- else {
- op_free(o);
- o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
- }
- o->op_targ = (PADOFFSET)PL_hints;
- return o;
-}
-
-OP *
-Perl_ck_exit(pTHX_ OP *o)
-{
-#ifdef VMS
- HV *table = GvHV(PL_hintgv);
- if (table) {
- SV **svp = hv_fetch(table, "vmsish_exit", 11, FALSE);
- if (svp && *svp && SvTRUE(*svp))
- o->op_private |= OPpEXIT_VMSISH;
- }
-#endif
- return ck_fun(o);
-}
-
-OP *
-Perl_ck_exec(pTHX_ OP *o)
-{
- OP *kid;
- if (o->op_flags & OPf_STACKED) {
- o = ck_fun(o);
- kid = cUNOPo->op_first->op_sibling;
- if (kid->op_type == OP_RV2GV)
- null(kid);
- }
- else
- o = listkids(o);
- return o;
-}
-
-OP *
-Perl_ck_exists(pTHX_ OP *o)
-{
- o = ck_fun(o);
- if (o->op_flags & OPf_KIDS) {
- OP *kid = cUNOPo->op_first;
- if (kid->op_type == OP_ENTERSUB) {
- (void) ref(kid, o->op_type);
- if (kid->op_type != OP_RV2CV && !PL_error_count)
- Perl_croak(aTHX_ "%s argument is not a subroutine name",
- PL_op_desc[o->op_type]);
- o->op_private |= OPpEXISTS_SUB;
- }
- else if (kid->op_type == OP_AELEM)
- o->op_flags |= OPf_SPECIAL;
- else if (kid->op_type != OP_HELEM)
- Perl_croak(aTHX_ "%s argument is not a HASH or ARRAY element",
- PL_op_desc[o->op_type]);
- null(kid);
- }
- return o;
-}
-
-#if 0
-OP *
-Perl_ck_gvconst(pTHX_ register OP *o)
-{
- o = fold_constants(o);
- if (o->op_type == OP_CONST)
- o->op_type = OP_GV;
- return o;
-}
-#endif
-
-OP *
-Perl_ck_rvconst(pTHX_ register OP *o)
-{
- SVOP *kid = (SVOP*)cUNOPo->op_first;
-
- o->op_private |= (PL_hints & HINT_STRICT_REFS);
- if (kid->op_type == OP_CONST) {
- char *name;
- int iscv;
- GV *gv;
- SV *kidsv = kid->op_sv;
- STRLEN n_a;
-
- /* Is it a constant from cv_const_sv()? */
- if (SvROK(kidsv) && SvREADONLY(kidsv)) {
- SV *rsv = SvRV(kidsv);
- int svtype = SvTYPE(rsv);
- char *badtype = Nullch;
-
- switch (o->op_type) {
- case OP_RV2SV:
- if (svtype > SVt_PVMG)
- badtype = "a SCALAR";
- break;
- case OP_RV2AV:
- if (svtype != SVt_PVAV)
- badtype = "an ARRAY";
- break;
- case OP_RV2HV:
- if (svtype != SVt_PVHV) {
- if (svtype == SVt_PVAV) { /* pseudohash? */
- SV **ksv = av_fetch((AV*)rsv, 0, FALSE);
- if (ksv && SvROK(*ksv)
- && SvTYPE(SvRV(*ksv)) == SVt_PVHV)
- {
- break;
- }
- }
- badtype = "a HASH";
- }
- break;
- case OP_RV2CV:
- if (svtype != SVt_PVCV)
- badtype = "a CODE";
- break;
- }
- if (badtype)
- Perl_croak(aTHX_ "Constant is not %s reference", badtype);
- return o;
- }
- name = SvPV(kidsv, n_a);
- if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
- char *badthing = Nullch;
- switch (o->op_type) {
- case OP_RV2SV:
- badthing = "a SCALAR";
- break;
- case OP_RV2AV:
- badthing = "an ARRAY";
- break;
- case OP_RV2HV:
- badthing = "a HASH";
- break;
- }
- if (badthing)
- Perl_croak(aTHX_
- "Can't use bareword (\"%s\") as %s ref while \"strict refs\" in use",
- name, badthing);
- }
- /*
- * This is a little tricky. We only want to add the symbol if we
- * didn't add it in the lexer. Otherwise we get duplicate strict
- * warnings. But if we didn't add it in the lexer, we must at
- * least pretend like we wanted to add it even if it existed before,
- * or we get possible typo warnings. OPpCONST_ENTERED says
- * whether the lexer already added THIS instance of this symbol.
- */
- iscv = (o->op_type == OP_RV2CV) * 2;
- do {
- gv = gv_fetchpv(name,
- iscv | !(kid->op_private & OPpCONST_ENTERED),
- iscv
- ? SVt_PVCV
- : o->op_type == OP_RV2SV
- ? SVt_PV
- : o->op_type == OP_RV2AV
- ? SVt_PVAV
- : o->op_type == OP_RV2HV
- ? SVt_PVHV
- : SVt_PVGV);
- } while (!gv && !(kid->op_private & OPpCONST_ENTERED) && !iscv++);
- if (gv) {
- kid->op_type = OP_GV;
- SvREFCNT_dec(kid->op_sv);
-#ifdef USE_ITHREADS
- /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */
- kPADOP->op_padix = pad_alloc(OP_GV, SVs_PADTMP);
- SvREFCNT_dec(PL_curpad[kPADOP->op_padix]);
- GvIN_PAD_on(gv);
- PL_curpad[kPADOP->op_padix] = SvREFCNT_inc(gv);
-#else
- kid->op_sv = SvREFCNT_inc(gv);
-#endif
- kid->op_private = 0;
- kid->op_ppaddr = PL_ppaddr[OP_GV];
- }
- }
- return o;
-}
-
-OP *
-Perl_ck_ftst(pTHX_ OP *o)
-{
- I32 type = o->op_type;
-
- if (o->op_flags & OPf_REF) {
- /* nothing */
- }
- else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) {
- SVOP *kid = (SVOP*)cUNOPo->op_first;
-
- if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
- STRLEN n_a;
- OP *newop = newGVOP(type, OPf_REF,
- gv_fetchpv(SvPVx(kid->op_sv, n_a), TRUE, SVt_PVIO));
- op_free(o);
- o = newop;
- }
- }
- else {
- op_free(o);
- if (type == OP_FTTTY)
- o = newGVOP(type, OPf_REF, gv_fetchpv("main::STDIN", TRUE,
- SVt_PVIO));
- else
- o = newUNOP(type, 0, newDEFSVOP());
- }
-#ifdef USE_LOCALE
- if (type == OP_FTTEXT || type == OP_FTBINARY) {
- o->op_private = 0;
- if (PL_hints & HINT_LOCALE)
- o->op_private |= OPpLOCALE;
- }
-#endif
- return o;
-}
-
-OP *
-Perl_ck_fun(pTHX_ OP *o)
-{
- register OP *kid;
- OP **tokid;
- OP *sibl;
- I32 numargs = 0;
- int type = o->op_type;
- register I32 oa = PL_opargs[type] >> OASHIFT;
-
- if (o->op_flags & OPf_STACKED) {
- if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL))
- oa &= ~OA_OPTIONAL;
- else
- return no_fh_allowed(o);
- }
-
- if (o->op_flags & OPf_KIDS) {
- STRLEN n_a;
- tokid = &cLISTOPo->op_first;
- kid = cLISTOPo->op_first;
- if (kid->op_type == OP_PUSHMARK ||
- (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK))
- {
- tokid = &kid->op_sibling;
- kid = kid->op_sibling;
- }
- if (!kid && PL_opargs[type] & OA_DEFGV)
- *tokid = kid = newDEFSVOP();
-
- while (oa && kid) {
- numargs++;
- sibl = kid->op_sibling;
- switch (oa & 7) {
- case OA_SCALAR:
- /* list seen where single (scalar) arg expected? */
- if (numargs == 1 && !(oa >> 4)
- && kid->op_type == OP_LIST && type != OP_SCALAR)
- {
- return too_many_arguments(o,PL_op_desc[type]);
- }
- scalar(kid);
- break;
- case OA_LIST:
- if (oa < 16) {
- kid = 0;
- continue;
- }
- else
- list(kid);
- break;
- case OA_AVREF:
- if (kid->op_type == OP_CONST &&
- (kid->op_private & OPpCONST_BARE))
- {
- char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
- OP *newop = newAVREF(newGVOP(OP_GV, 0,
- gv_fetchpv(name, TRUE, SVt_PVAV) ));
- if (ckWARN(WARN_DEPRECATED))
- Perl_warner(aTHX_ WARN_DEPRECATED,
- "Array @%s missing the @ in argument %"IVdf" of %s()",
- name, (IV)numargs, PL_op_desc[type]);
- op_free(kid);
- kid = newop;
- kid->op_sibling = sibl;
- *tokid = kid;
- }
- else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV)
- bad_type(numargs, "array", PL_op_desc[type], kid);
- mod(kid, type);
- break;
- case OA_HVREF:
- if (kid->op_type == OP_CONST &&
- (kid->op_private & OPpCONST_BARE))
- {
- char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
- OP *newop = newHVREF(newGVOP(OP_GV, 0,
- gv_fetchpv(name, TRUE, SVt_PVHV) ));
- if (ckWARN(WARN_DEPRECATED))
- Perl_warner(aTHX_ WARN_DEPRECATED,
- "Hash %%%s missing the %% in argument %"IVdf" of %s()",
- name, (IV)numargs, PL_op_desc[type]);
- op_free(kid);
- kid = newop;
- kid->op_sibling = sibl;
- *tokid = kid;
- }
- else if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV)
- bad_type(numargs, "hash", PL_op_desc[type], kid);
- mod(kid, type);
- break;
- case OA_CVREF:
- {
- OP *newop = newUNOP(OP_NULL, 0, kid);
- kid->op_sibling = 0;
- linklist(kid);
- newop->op_next = newop;
- kid = newop;
- kid->op_sibling = sibl;
- *tokid = kid;
- }
- break;
- case OA_FILEREF:
- if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
- if (kid->op_type == OP_CONST &&
- (kid->op_private & OPpCONST_BARE))
- {
- OP *newop = newGVOP(OP_GV, 0,
- gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, n_a), TRUE,
- SVt_PVIO) );
- op_free(kid);
- kid = newop;
- }
- else if (kid->op_type == OP_READLINE) {
- /* neophyte patrol: open(<FH>), close(<FH>) etc. */
- bad_type(numargs, "HANDLE", PL_op_desc[o->op_type], kid);
- }
- else {
- I32 flags = OPf_SPECIAL;
- I32 priv = 0;
- PADOFFSET targ = 0;
-
- /* is this op a FH constructor? */
- if (is_handle_constructor(o,numargs)) {
- char *name = Nullch;
- STRLEN len;
-
- flags = 0;
- /* Set a flag to tell rv2gv to vivify
- * need to "prove" flag does not mean something
- * else already - NI-S 1999/05/07
- */
- priv = OPpDEREF;
- if (kid->op_type == OP_PADSV) {
- SV **namep = av_fetch(PL_comppad_name,
- kid->op_targ, 4);
- if (namep && *namep)
- name = SvPV(*namep, len);
- }
- else if (kid->op_type == OP_RV2SV
- && kUNOP->op_first->op_type == OP_GV)
- {
- GV *gv = cGVOPx_gv(kUNOP->op_first);
- name = GvNAME(gv);
- len = GvNAMELEN(gv);
- }
- else if (kid->op_type == OP_AELEM
- || kid->op_type == OP_HELEM)
- {
- name = "__ANONIO__";
- len = 10;
- mod(kid,type);
- }
- if (name) {
- SV *namesv;
- targ = pad_alloc(OP_RV2GV, SVs_PADTMP);
- namesv = PL_curpad[targ];
- (void)SvUPGRADE(namesv, SVt_PV);
- if (*name != '$')
- sv_setpvn(namesv, "$", 1);
- sv_catpvn(namesv, name, len);
- }
- }
- kid->op_sibling = 0;
- kid = newUNOP(OP_RV2GV, flags, scalar(kid));
- kid->op_targ = targ;
- kid->op_private |= priv;
- }
- kid->op_sibling = sibl;
- *tokid = kid;
- }
- scalar(kid);
- break;
- case OA_SCALARREF:
- mod(scalar(kid), type);
- break;
- }
- oa >>= 4;
- tokid = &kid->op_sibling;
- kid = kid->op_sibling;
- }
- o->op_private |= numargs;
- if (kid)
- return too_many_arguments(o,PL_op_desc[o->op_type]);
- listkids(o);
- }
- else if (PL_opargs[type] & OA_DEFGV) {
- op_free(o);
- return newUNOP(type, 0, newDEFSVOP());
- }
-
- if (oa) {
- while (oa & OA_OPTIONAL)
- oa >>= 4;
- if (oa && oa != OA_LIST)
- return too_few_arguments(o,PL_op_desc[o->op_type]);
- }
- return o;
-}
-
-OP *
-Perl_ck_glob(pTHX_ OP *o)
-{
- GV *gv;
-
- o = ck_fun(o);
- if ((o->op_flags & OPf_KIDS) && !cLISTOPo->op_first->op_sibling)
- append_elem(OP_GLOB, o, newDEFSVOP());
-
- if (!((gv = gv_fetchpv("glob", FALSE, SVt_PVCV)) && GvIMPORTED_CV(gv)))
- gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
-
-#if !defined(PERL_EXTERNAL_GLOB)
- /* XXX this can be tightened up and made more failsafe. */
- if (!gv) {
- ENTER;
- Perl_load_module(aTHX_ 0, newSVpvn("File::Glob", 10), Nullsv,
- /* null-terminated import list */
- newSVpvn(":globally", 9), Nullsv);
- gv = gv_fetchpv("CORE::GLOBAL::glob", FALSE, SVt_PVCV);
- LEAVE;
- }
-#endif /* PERL_EXTERNAL_GLOB */
-
- if (gv && GvIMPORTED_CV(gv)) {
- append_elem(OP_GLOB, o,
- newSVOP(OP_CONST, 0, newSViv(PL_glob_index++)));
- o->op_type = OP_LIST;
- o->op_ppaddr = PL_ppaddr[OP_LIST];
- cLISTOPo->op_first->op_type = OP_PUSHMARK;
- cLISTOPo->op_first->op_ppaddr = PL_ppaddr[OP_PUSHMARK];
- o = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, o,
- scalar(newUNOP(OP_RV2CV, 0,
- newGVOP(OP_GV, 0, gv)))));
- o = newUNOP(OP_NULL, 0, ck_subr(o));
- o->op_targ = OP_GLOB; /* hint at what it used to be */
- return o;
- }
- gv = newGVgen("main");
- gv_IOadd(gv);
- append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
- SvREFCNT_dec((SV*)gv); /* had excess refcnt */
- scalarkids(o);
- return o;
-}
-
-OP *
-Perl_ck_grep(pTHX_ OP *o)
-{
- LOGOP *gwop;
- OP *kid;
- OPCODE type = o->op_type == OP_GREPSTART ? OP_GREPWHILE : OP_MAPWHILE;
-
- o->op_ppaddr = PL_ppaddr[OP_GREPSTART];
- NewOp(1101, gwop, 1, LOGOP);
-
- if (o->op_flags & OPf_STACKED) {
- OP* k;
- o = ck_sort(o);
- kid = cLISTOPo->op_first->op_sibling;
- for (k = cLISTOPo->op_first->op_sibling->op_next; k; k = k->op_next) {
- kid = k;
- }
- kid->op_next = (OP*)gwop;
- o->op_flags &= ~OPf_STACKED;
- }
- kid = cLISTOPo->op_first->op_sibling;
- if (type == OP_MAPWHILE)
- list(kid);
- else
- scalar(kid);
- o = ck_fun(o);
- if (PL_error_count)
- return o;
- kid = cLISTOPo->op_first->op_sibling;
- if (kid->op_type != OP_NULL)
- Perl_croak(aTHX_ "panic: ck_grep");
- kid = kUNOP->op_first;
-
- gwop->op_type = type;
- gwop->op_ppaddr = PL_ppaddr[type];
- gwop->op_first = listkids(o);
- gwop->op_flags |= OPf_KIDS;
- gwop->op_private = 1;
- gwop->op_other = LINKLIST(kid);
- gwop->op_targ = pad_alloc(type, SVs_PADTMP);
- kid->op_next = (OP*)gwop;
-
- kid = cLISTOPo->op_first->op_sibling;
- if (!kid || !kid->op_sibling)
- return too_few_arguments(o,PL_op_desc[o->op_type]);
- for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
- mod(kid, OP_GREPSTART);
-
- return (OP*)gwop;
-}
-
-OP *
-Perl_ck_index(pTHX_ OP *o)
-{
- if (o->op_flags & OPf_KIDS) {
- OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
- if (kid)
- kid = kid->op_sibling; /* get past "big" */
- if (kid && kid->op_type == OP_CONST)
- fbm_compile(((SVOP*)kid)->op_sv, 0);
- }
- return ck_fun(o);
-}
-
-OP *
-Perl_ck_lengthconst(pTHX_ OP *o)
-{
- /* XXX length optimization goes here */
- return ck_fun(o);
-}
-
-OP *
-Perl_ck_lfun(pTHX_ OP *o)
-{
- OPCODE type = o->op_type;
- return modkids(ck_fun(o), type);
-}
-
-OP *
-Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */
-{
- if ((o->op_flags & OPf_KIDS) && ckWARN(WARN_DEPRECATED)) {
- switch (cUNOPo->op_first->op_type) {
- case OP_RV2AV:
- /* This is needed for
- if (defined %stash::)
- to work. Do not break Tk.
- */
- break; /* Globals via GV can be undef */
- case OP_PADAV:
- case OP_AASSIGN: /* Is this a good idea? */
- Perl_warner(aTHX_ WARN_DEPRECATED,
- "defined(@array) is deprecated");
- Perl_warner(aTHX_ WARN_DEPRECATED,
- "\t(Maybe you should just omit the defined()?)\n");
- break;
- case OP_RV2HV:
- /* This is needed for
- if (defined %stash::)
- to work. Do not break Tk.
- */
- break; /* Globals via GV can be undef */
- case OP_PADHV:
- Perl_warner(aTHX_ WARN_DEPRECATED,
- "defined(%%hash) is deprecated");
- Perl_warner(aTHX_ WARN_DEPRECATED,
- "\t(Maybe you should just omit the defined()?)\n");
- break;
- default:
- /* no warning */
- break;
- }
- }
- return ck_rfun(o);
-}
-
-OP *
-Perl_ck_rfun(pTHX_ OP *o)
-{
- OPCODE type = o->op_type;
- return refkids(ck_fun(o), type);
-}
-
-OP *
-Perl_ck_listiob(pTHX_ OP *o)
-{
- register OP *kid;
-
- kid = cLISTOPo->op_first;
- if (!kid) {
- o = force_list(o);
- kid = cLISTOPo->op_first;
- }
- if (kid->op_type == OP_PUSHMARK)
- kid = kid->op_sibling;
- if (kid && o->op_flags & OPf_STACKED)
- kid = kid->op_sibling;
- else if (kid && !kid->op_sibling) { /* print HANDLE; */
- if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE) {
- o->op_flags |= OPf_STACKED; /* make it a filehandle */
- kid = newUNOP(OP_RV2GV, OPf_REF, scalar(kid));
- cLISTOPo->op_first->op_sibling = kid;
- cLISTOPo->op_last = kid;
- kid = kid->op_sibling;
- }
- }
-
- if (!kid)
- append_elem(o->op_type, o, newDEFSVOP());
-
- o = listkids(o);
-
- o->op_private = 0;
-#ifdef USE_LOCALE
- if (PL_hints & HINT_LOCALE)
- o->op_private |= OPpLOCALE;
-#endif
-
- return o;
-}
-
-OP *
-Perl_ck_fun_locale(pTHX_ OP *o)
-{
- o = ck_fun(o);
-
- o->op_private = 0;
-#ifdef USE_LOCALE
- if (PL_hints & HINT_LOCALE)
- o->op_private |= OPpLOCALE;
-#endif
-
- return o;
-}
-
-OP *
-Perl_ck_sassign(pTHX_ OP *o)
-{
- OP *kid = cLISTOPo->op_first;
- /* has a disposable target? */
- if ((PL_opargs[kid->op_type] & OA_TARGLEX)
- && !(kid->op_flags & OPf_STACKED)
- /* Cannot steal the second time! */
- && !(kid->op_private & OPpTARGET_MY))
- {
- OP *kkid = kid->op_sibling;
-
- /* Can just relocate the target. */
- if (kkid && kkid->op_type == OP_PADSV
- && !(kkid->op_private & OPpLVAL_INTRO))
- {
- kid->op_targ = kkid->op_targ;
- kkid->op_targ = 0;
- /* Now we do not need PADSV and SASSIGN. */
- kid->op_sibling = o->op_sibling; /* NULL */
- cLISTOPo->op_first = NULL;
- op_free(o);
- op_free(kkid);
- kid->op_private |= OPpTARGET_MY; /* Used for context settings */
- return kid;
- }
- }
- return o;
-}
-
-OP *
-Perl_ck_scmp(pTHX_ OP *o)
-{
- o->op_private = 0;
-#ifdef USE_LOCALE
- if (PL_hints & HINT_LOCALE)
- o->op_private |= OPpLOCALE;
-#endif
-
- return o;
-}
-
-OP *
-Perl_ck_match(pTHX_ OP *o)
-{
- o->op_private |= OPpRUNTIME;
- return o;
-}
-
-OP *
-Perl_ck_method(pTHX_ OP *o)
-{
- OP *kid = cUNOPo->op_first;
- if (kid->op_type == OP_CONST) {
- SV* sv = kSVOP->op_sv;
- if (!(strchr(SvPVX(sv), ':') || strchr(SvPVX(sv), '\''))) {
- OP *cmop;
- (void)SvUPGRADE(sv, SVt_PVIV);
- (void)SvIOK_on(sv);
- PERL_HASH(SvUVX(sv), SvPVX(sv), SvCUR(sv));
- cmop = newSVOP(OP_METHOD_NAMED, 0, sv);
- kSVOP->op_sv = Nullsv;
- op_free(o);
- return cmop;
- }
- }
- return o;
-}
-
-OP *
-Perl_ck_null(pTHX_ OP *o)
-{
- return o;
-}
-
-OP *
-Perl_ck_open(pTHX_ OP *o)
-{
- HV *table = GvHV(PL_hintgv);
- if (table) {
- SV **svp;
- I32 mode;
- svp = hv_fetch(table, "open_IN", 7, FALSE);
- if (svp && *svp) {
- mode = mode_from_discipline(*svp);
- if (mode & O_BINARY)
- o->op_private |= OPpOPEN_IN_RAW;
- else if (mode & O_TEXT)
- o->op_private |= OPpOPEN_IN_CRLF;
- }
-
- svp = hv_fetch(table, "open_OUT", 8, FALSE);
- if (svp && *svp) {
- mode = mode_from_discipline(*svp);
- if (mode & O_BINARY)
- o->op_private |= OPpOPEN_OUT_RAW;
- else if (mode & O_TEXT)
- o->op_private |= OPpOPEN_OUT_CRLF;
- }
- }
- if (o->op_type == OP_BACKTICK)
- return o;
- return ck_fun(o);
-}
-
-OP *
-Perl_ck_repeat(pTHX_ OP *o)
-{
- if (cBINOPo->op_first->op_flags & OPf_PARENS) {
- o->op_private |= OPpREPEAT_DOLIST;
- cBINOPo->op_first = force_list(cBINOPo->op_first);
- }
- else
- scalar(o);
- return o;
-}
-
-OP *
-Perl_ck_require(pTHX_ OP *o)
-{
- if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */
- SVOP *kid = (SVOP*)cUNOPo->op_first;
-
- if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
- char *s;
- for (s = SvPVX(kid->op_sv); *s; s++) {
- if (*s == ':' && s[1] == ':') {
- *s = '/';
- Move(s+2, s+1, strlen(s+2)+1, char);
- --SvCUR(kid->op_sv);
- }
- }
- if (SvREADONLY(kid->op_sv)) {
- SvREADONLY_off(kid->op_sv);
- sv_catpvn(kid->op_sv, ".pm", 3);
- SvREADONLY_on(kid->op_sv);
- }
- else
- sv_catpvn(kid->op_sv, ".pm", 3);
- }
- }
- return ck_fun(o);
-}
-
-OP *
-Perl_ck_return(pTHX_ OP *o)
-{
- OP *kid;
- if (CvLVALUE(PL_compcv)) {
- for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
- mod(kid, OP_LEAVESUBLV);
- }
- return o;
-}
-
-#if 0
-OP *
-Perl_ck_retarget(pTHX_ OP *o)
-{
- Perl_croak(aTHX_ "NOT IMPL LINE %d",__LINE__);
- /* STUB */
- return o;
-}
-#endif
-
-OP *
-Perl_ck_select(pTHX_ OP *o)
-{
- OP* kid;
- if (o->op_flags & OPf_KIDS) {
- kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
- if (kid && kid->op_sibling) {
- o->op_type = OP_SSELECT;
- o->op_ppaddr = PL_ppaddr[OP_SSELECT];
- o = ck_fun(o);
- return fold_constants(o);
- }
- }
- o = ck_fun(o);
- kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
- if (kid && kid->op_type == OP_RV2GV)
- kid->op_private &= ~HINT_STRICT_REFS;
- return o;
-}
-
-OP *
-Perl_ck_shift(pTHX_ OP *o)
-{
- I32 type = o->op_type;
-
- if (!(o->op_flags & OPf_KIDS)) {
- OP *argop;
-
- op_free(o);
-#ifdef USE_THREADS
- if (!CvUNIQUE(PL_compcv)) {
- argop = newOP(OP_PADAV, OPf_REF);
- argop->op_targ = 0; /* PL_curpad[0] is @_ */
- }
- else {
- argop = newUNOP(OP_RV2AV, 0,
- scalar(newGVOP(OP_GV, 0,
- gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
- }
-#else
- argop = newUNOP(OP_RV2AV, 0,
- scalar(newGVOP(OP_GV, 0, !CvUNIQUE(PL_compcv) ?
- PL_defgv : gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
-#endif /* USE_THREADS */
- return newUNOP(type, 0, scalar(argop));
- }
- return scalar(modkids(ck_fun(o), type));
-}
-
-OP *
-Perl_ck_sort(pTHX_ OP *o)
-{
- OP *firstkid;
- o->op_private = 0;
-#ifdef USE_LOCALE
- if (PL_hints & HINT_LOCALE)
- o->op_private |= OPpLOCALE;
-#endif
-
- if (o->op_type == OP_SORT && o->op_flags & OPf_STACKED)
- simplify_sort(o);
- firstkid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
- if (o->op_flags & OPf_STACKED) { /* may have been cleared */
- OP *k;
- OP *kid = cUNOPx(firstkid)->op_first; /* get past null */
-
- if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) {
- linklist(kid);
- if (kid->op_type == OP_SCOPE) {
- k = kid->op_next;
- kid->op_next = 0;
- }
- else if (kid->op_type == OP_LEAVE) {
- if (o->op_type == OP_SORT) {
- null(kid); /* wipe out leave */
- kid->op_next = kid;
-
- for (k = kLISTOP->op_first->op_next; k; k = k->op_next) {
- if (k->op_next == kid)
- k->op_next = 0;
- /* don't descend into loops */
- else if (k->op_type == OP_ENTERLOOP
- || k->op_type == OP_ENTERITER)
- {
- k = cLOOPx(k)->op_lastop;
- }
- }
- }
- else
- kid->op_next = 0; /* just disconnect the leave */
- k = kLISTOP->op_first;
- }
- peep(k);
-
- kid = firstkid;
- if (o->op_type == OP_SORT) {
- /* provide scalar context for comparison function/block */
- kid = scalar(kid);
- kid->op_next = kid;
- }
- else
- kid->op_next = k;
- o->op_flags |= OPf_SPECIAL;
- }
- else if (kid->op_type == OP_RV2SV || kid->op_type == OP_PADSV)
- null(firstkid);
-
- firstkid = firstkid->op_sibling;
- }
-
- /* provide list context for arguments */
- if (o->op_type == OP_SORT)
- list(firstkid);
-
- return o;
-}
-
-STATIC void
-S_simplify_sort(pTHX_ OP *o)
-{
- register OP *kid = cLISTOPo->op_first->op_sibling; /* get past pushmark */
- OP *k;
- int reversed;
- GV *gv;
- if (!(o->op_flags & OPf_STACKED))
- return;
- GvMULTI_on(gv_fetchpv("a", TRUE, SVt_PV));
- GvMULTI_on(gv_fetchpv("b", TRUE, SVt_PV));
- kid = kUNOP->op_first; /* get past null */
- if (kid->op_type != OP_SCOPE)
- return;
- kid = kLISTOP->op_last; /* get past scope */
- switch(kid->op_type) {
- case OP_NCMP:
- case OP_I_NCMP:
- case OP_SCMP:
- break;
- default:
- return;
- }
- k = kid; /* remember this node*/
- if (kBINOP->op_first->op_type != OP_RV2SV)
- return;
- kid = kBINOP->op_first; /* get past cmp */
- if (kUNOP->op_first->op_type != OP_GV)
- return;
- kid = kUNOP->op_first; /* get past rv2sv */
- gv = kGVOP_gv;
- if (GvSTASH(gv) != PL_curstash)
- return;
- if (strEQ(GvNAME(gv), "a"))
- reversed = 0;
- else if (strEQ(GvNAME(gv), "b"))
- reversed = 1;
- else
- return;
- kid = k; /* back to cmp */
- if (kBINOP->op_last->op_type != OP_RV2SV)
- return;
- kid = kBINOP->op_last; /* down to 2nd arg */
- if (kUNOP->op_first->op_type != OP_GV)
- return;
- kid = kUNOP->op_first; /* get past rv2sv */
- gv = kGVOP_gv;
- if (GvSTASH(gv) != PL_curstash
- || ( reversed
- ? strNE(GvNAME(gv), "a")
- : strNE(GvNAME(gv), "b")))
- return;
- o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL);
- if (reversed)
- o->op_private |= OPpSORT_REVERSE;
- if (k->op_type == OP_NCMP)
- o->op_private |= OPpSORT_NUMERIC;
- if (k->op_type == OP_I_NCMP)
- o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER;
- kid = cLISTOPo->op_first->op_sibling;
- cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
- op_free(kid); /* then delete it */
-}
-
-OP *
-Perl_ck_split(pTHX_ OP *o)
-{
- register OP *kid;
-
- if (o->op_flags & OPf_STACKED)
- return no_fh_allowed(o);
-
- kid = cLISTOPo->op_first;
- if (kid->op_type != OP_NULL)
- Perl_croak(aTHX_ "panic: ck_split");
- kid = kid->op_sibling;
- op_free(cLISTOPo->op_first);
- cLISTOPo->op_first = kid;
- if (!kid) {
- cLISTOPo->op_first = kid = newSVOP(OP_CONST, 0, newSVpvn(" ", 1));
- cLISTOPo->op_last = kid; /* There was only one element previously */
- }
-
- if (kid->op_type != OP_MATCH || kid->op_flags & OPf_STACKED) {
- OP *sibl = kid->op_sibling;
- kid->op_sibling = 0;
- kid = pmruntime( newPMOP(OP_MATCH, OPf_SPECIAL), kid, Nullop);
- if (cLISTOPo->op_first == cLISTOPo->op_last)
- cLISTOPo->op_last = kid;
- cLISTOPo->op_first = kid;
- kid->op_sibling = sibl;
- }
-
- kid->op_type = OP_PUSHRE;
- kid->op_ppaddr = PL_ppaddr[OP_PUSHRE];
- scalar(kid);
-
- if (!kid->op_sibling)
- append_elem(OP_SPLIT, o, newDEFSVOP());
-
- kid = kid->op_sibling;
- scalar(kid);
-
- if (!kid->op_sibling)
- append_elem(OP_SPLIT, o, newSVOP(OP_CONST, 0, newSViv(0)));
-
- kid = kid->op_sibling;
- scalar(kid);
-
- if (kid->op_sibling)
- return too_many_arguments(o,PL_op_desc[o->op_type]);
-
- return o;
-}
-
-OP *
-Perl_ck_join(pTHX_ OP *o)
-{
- if (ckWARN(WARN_SYNTAX)) {
- OP *kid = cLISTOPo->op_first->op_sibling;
- if (kid && kid->op_type == OP_MATCH) {
- char *pmstr = "STRING";
- if (kPMOP->op_pmregexp)
- pmstr = kPMOP->op_pmregexp->precomp;
- Perl_warner(aTHX_ WARN_SYNTAX,
- "/%s/ should probably be written as \"%s\"",
- pmstr, pmstr);
- }
- }
- return ck_fun(o);
-}
-
-OP *
-Perl_ck_subr(pTHX_ OP *o)
-{
- OP *prev = ((cUNOPo->op_first->op_sibling)
- ? cUNOPo : ((UNOP*)cUNOPo->op_first))->op_first;
- OP *o2 = prev->op_sibling;
- OP *cvop;
- char *proto = 0;
- CV *cv = 0;
- GV *namegv = 0;
- int optional = 0;
- I32 arg = 0;
- STRLEN n_a;
-
- o->op_private |= OPpENTERSUB_HASTARG;
- for (cvop = o2; cvop->op_sibling; cvop = cvop->op_sibling) ;
- if (cvop->op_type == OP_RV2CV) {
- SVOP* tmpop;
- o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER);
- null(cvop); /* disable rv2cv */
- tmpop = (SVOP*)((UNOP*)cvop)->op_first;
- if (tmpop->op_type == OP_GV && !(o->op_private & OPpENTERSUB_AMPER)) {
- GV *gv = cGVOPx_gv(tmpop);
- cv = GvCVu(gv);
- if (!cv)
- tmpop->op_private |= OPpEARLY_CV;
- else if (SvPOK(cv)) {
- namegv = CvANON(cv) ? gv : CvGV(cv);
- proto = SvPV((SV*)cv, n_a);
- }
- }
- }
- else if (cvop->op_type == OP_METHOD || cvop->op_type == OP_METHOD_NAMED) {
- if (o2->op_type == OP_CONST)
- o2->op_private &= ~OPpCONST_STRICT;
- else if (o2->op_type == OP_LIST) {
- OP *o = ((UNOP*)o2)->op_first->op_sibling;
- if (o && o->op_type == OP_CONST)
- o->op_private &= ~OPpCONST_STRICT;
- }
- }
- o->op_private |= (PL_hints & HINT_STRICT_REFS);
- if (PERLDB_SUB && PL_curstash != PL_debstash)
- o->op_private |= OPpENTERSUB_DB;
- while (o2 != cvop) {
- if (proto) {
- switch (*proto) {
- case '\0':
- return too_many_arguments(o, gv_ename(namegv));
- case ';':
- optional = 1;
- proto++;
- continue;
- case '$':
- proto++;
- arg++;
- scalar(o2);
- break;
- case '%':
- case '@':
- list(o2);
- arg++;
- break;
- case '&':
- proto++;
- arg++;
- if (o2->op_type != OP_REFGEN && o2->op_type != OP_UNDEF)
- bad_type(arg,
- arg == 1 ? "block or sub {}" : "sub {}",
- gv_ename(namegv), o2);
- break;
- case '*':
- /* '*' allows any scalar type, including bareword */
- proto++;
- arg++;
- if (o2->op_type == OP_RV2GV)
- goto wrapref; /* autoconvert GLOB -> GLOBref */
- else if (o2->op_type == OP_CONST)
- o2->op_private &= ~OPpCONST_STRICT;
- else if (o2->op_type == OP_ENTERSUB) {
- /* accidental subroutine, revert to bareword */
- OP *gvop = ((UNOP*)o2)->op_first;
- if (gvop && gvop->op_type == OP_NULL) {
- gvop = ((UNOP*)gvop)->op_first;
- if (gvop) {
- for (; gvop->op_sibling; gvop = gvop->op_sibling)
- ;
- if (gvop &&
- (gvop->op_private & OPpENTERSUB_NOPAREN) &&
- (gvop = ((UNOP*)gvop)->op_first) &&
- gvop->op_type == OP_GV)
- {
- GV *gv = cGVOPx_gv(gvop);
- OP *sibling = o2->op_sibling;
- SV *n = newSVpvn("",0);
- op_free(o2);
- gv_fullname3(n, gv, "");
- if (SvCUR(n)>6 && strnEQ(SvPVX(n),"main::",6))
- sv_chop(n, SvPVX(n)+6);
- o2 = newSVOP(OP_CONST, 0, n);
- prev->op_sibling = o2;
- o2->op_sibling = sibling;
- }
- }
- }
- }
- scalar(o2);
- break;
- case '\\':
- proto++;
- arg++;
- switch (*proto++) {
- case '*':
- if (o2->op_type != OP_RV2GV)
- bad_type(arg, "symbol", gv_ename(namegv), o2);
- goto wrapref;
- case '&':
- if (o2->op_type != OP_ENTERSUB)
- bad_type(arg, "subroutine entry", gv_ename(namegv), o2);
- goto wrapref;
- case '$':
- if (o2->op_type != OP_RV2SV
- && o2->op_type != OP_PADSV
- && o2->op_type != OP_HELEM
- && o2->op_type != OP_AELEM
- && o2->op_type != OP_THREADSV)
- {
- bad_type(arg, "scalar", gv_ename(namegv), o2);
- }
- goto wrapref;
- case '@':
- if (o2->op_type != OP_RV2AV && o2->op_type != OP_PADAV)
- bad_type(arg, "array", gv_ename(namegv), o2);
- goto wrapref;
- case '%':
- if (o2->op_type != OP_RV2HV && o2->op_type != OP_PADHV)
- bad_type(arg, "hash", gv_ename(namegv), o2);
- wrapref:
- {
- OP* kid = o2;
- OP* sib = kid->op_sibling;
- kid->op_sibling = 0;
- o2 = newUNOP(OP_REFGEN, 0, kid);
- o2->op_sibling = sib;
- prev->op_sibling = o2;
- }
- break;
- default: goto oops;
- }
- break;
- case ' ':
- proto++;
- continue;
- default:
- oops:
- Perl_croak(aTHX_ "Malformed prototype for %s: %s",
- gv_ename(namegv), SvPV((SV*)cv, n_a));
- }
- }
- else
- list(o2);
- mod(o2, OP_ENTERSUB);
- prev = o2;
- o2 = o2->op_sibling;
- }
- if (proto && !optional &&
- (*proto && *proto != '@' && *proto != '%' && *proto != ';'))
- return too_few_arguments(o, gv_ename(namegv));
- return o;
-}
-
-OP *
-Perl_ck_svconst(pTHX_ OP *o)
-{
- SvREADONLY_on(cSVOPo->op_sv);
- return o;
-}
-
-OP *
-Perl_ck_trunc(pTHX_ OP *o)
-{
- if (o->op_flags & OPf_KIDS) {
- SVOP *kid = (SVOP*)cUNOPo->op_first;
-
- if (kid->op_type == OP_NULL)
- kid = (SVOP*)kid->op_sibling;
- if (kid && kid->op_type == OP_CONST &&
- (kid->op_private & OPpCONST_BARE))
- {
- o->op_flags |= OPf_SPECIAL;
- kid->op_private &= ~OPpCONST_STRICT;
- }
- }
- return ck_fun(o);
-}
-
-OP *
-Perl_ck_substr(pTHX_ OP *o)
-{
- o = ck_fun(o);
- if ((o->op_flags & OPf_KIDS) && o->op_private == 4) {
- OP *kid = cLISTOPo->op_first;
-
- if (kid->op_type == OP_NULL)
- kid = kid->op_sibling;
- if (kid)
- kid->op_flags |= OPf_MOD;
-
- }
- return o;
-}
-
-/* A peephole optimizer. We visit the ops in the order they're to execute. */
-
-void
-Perl_peep(pTHX_ register OP *o)
-{
- register OP* oldop = 0;
- STRLEN n_a;
-
- if (!o || o->op_seq)
- return;
- ENTER;
- SAVEOP();
- SAVEVPTR(PL_curcop);
- for (; o; o = o->op_next) {
- if (o->op_seq)
- break;
- if (!PL_op_seqmax)
- PL_op_seqmax++;
- PL_op = o;
- switch (o->op_type) {
- case OP_SETSTATE:
- case OP_NEXTSTATE:
- case OP_DBSTATE:
- PL_curcop = ((COP*)o); /* for warnings */
- o->op_seq = PL_op_seqmax++;
- break;
-
- case OP_CONST:
- if (cSVOPo->op_private & OPpCONST_STRICT)
- no_bareword_allowed(o);
-#ifdef USE_ITHREADS
- /* Relocate sv to the pad for thread safety.
- * Despite being a "constant", the SV is written to,
- * for reference counts, sv_upgrade() etc. */
- if (cSVOP->op_sv) {
- PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
- if (SvPADTMP(cSVOPo->op_sv)) {
- /* If op_sv is already a PADTMP then it is being used by
- * another pad, so make a copy. */
- sv_setsv(PL_curpad[ix],cSVOPo->op_sv);
- SvREADONLY_on(PL_curpad[ix]);
- SvREFCNT_dec(cSVOPo->op_sv);
- }
- else {
- SvREFCNT_dec(PL_curpad[ix]);
- SvPADTMP_on(cSVOPo->op_sv);
- PL_curpad[ix] = cSVOPo->op_sv;
- }
- cSVOPo->op_sv = Nullsv;
- o->op_targ = ix;
- }
-#endif
- o->op_seq = PL_op_seqmax++;
- break;
-
- case OP_CONCAT:
- if (o->op_next && o->op_next->op_type == OP_STRINGIFY) {
- if (o->op_next->op_private & OPpTARGET_MY) {
- if (o->op_flags & OPf_STACKED) /* chained concats */
- goto ignore_optimization;
- else {
- /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */
- o->op_targ = o->op_next->op_targ;
- o->op_next->op_targ = 0;
- o->op_private |= OPpTARGET_MY;
- }
- }
- null(o->op_next);
- }
- ignore_optimization:
- o->op_seq = PL_op_seqmax++;
- break;
- case OP_STUB:
- if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
- o->op_seq = PL_op_seqmax++;
- break; /* Scalar stub must produce undef. List stub is noop */
- }
- goto nothin;
- case OP_NULL:
- if (o->op_targ == OP_NEXTSTATE
- || o->op_targ == OP_DBSTATE
- || o->op_targ == OP_SETSTATE)
- {
- PL_curcop = ((COP*)o);
- }
- goto nothin;
- case OP_SCALAR:
- case OP_LINESEQ:
- case OP_SCOPE:
- nothin:
- if (oldop && o->op_next) {
- oldop->op_next = o->op_next;
- continue;
- }
- o->op_seq = PL_op_seqmax++;
- break;
-
- case OP_GV:
- if (o->op_next->op_type == OP_RV2SV) {
- if (!(o->op_next->op_private & OPpDEREF)) {
- null(o->op_next);
- o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO
- | OPpOUR_INTRO);
- o->op_next = o->op_next->op_next;
- o->op_type = OP_GVSV;
- o->op_ppaddr = PL_ppaddr[OP_GVSV];
- }
- }
- else if (o->op_next->op_type == OP_RV2AV) {
- OP* pop = o->op_next->op_next;
- IV i;
- if (pop->op_type == OP_CONST &&
- (PL_op = pop->op_next) &&
- pop->op_next->op_type == OP_AELEM &&
- !(pop->op_next->op_private &
- (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
- (i = SvIV(((SVOP*)pop)->op_sv) - PL_compiling.cop_arybase)
- <= 255 &&
- i >= 0)
- {
- GV *gv;
- null(o->op_next);
- null(pop->op_next);
- null(pop);
- o->op_flags |= pop->op_next->op_flags & OPf_MOD;
- o->op_next = pop->op_next->op_next;
- o->op_type = OP_AELEMFAST;
- o->op_ppaddr = PL_ppaddr[OP_AELEMFAST];
- o->op_private = (U8)i;
- gv = cGVOPo_gv;
- GvAVn(gv);
- }
- }
- else if ((o->op_private & OPpEARLY_CV) && ckWARN(WARN_PROTOTYPE)) {
- GV *gv = cGVOPo_gv;
- if (SvTYPE(gv) == SVt_PVGV && GvCV(gv) && SvPVX(GvCV(gv))) {
- /* XXX could check prototype here instead of just carping */
- SV *sv = sv_newmortal();
- gv_efullname3(sv, gv, Nullch);
- Perl_warner(aTHX_ WARN_PROTOTYPE,
- "%s() called too early to check prototype",
- SvPV_nolen(sv));
- }
- }
-
- o->op_seq = PL_op_seqmax++;
- break;
-
- case OP_MAPWHILE:
- case OP_GREPWHILE:
- case OP_AND:
- case OP_OR:
- case OP_ANDASSIGN:
- case OP_ORASSIGN:
- case OP_COND_EXPR:
- case OP_RANGE:
- o->op_seq = PL_op_seqmax++;
- while (cLOGOP->op_other->op_type == OP_NULL)
- cLOGOP->op_other = cLOGOP->op_other->op_next;
- peep(cLOGOP->op_other);
- break;
-
- case OP_ENTERLOOP:
- case OP_ENTERITER:
- o->op_seq = PL_op_seqmax++;
- while (cLOOP->op_redoop->op_type == OP_NULL)
- cLOOP->op_redoop = cLOOP->op_redoop->op_next;
- peep(cLOOP->op_redoop);
- while (cLOOP->op_nextop->op_type == OP_NULL)
- cLOOP->op_nextop = cLOOP->op_nextop->op_next;
- peep(cLOOP->op_nextop);
- while (cLOOP->op_lastop->op_type == OP_NULL)
- cLOOP->op_lastop = cLOOP->op_lastop->op_next;
- peep(cLOOP->op_lastop);
- break;
-
- case OP_QR:
- case OP_MATCH:
- case OP_SUBST:
- o->op_seq = PL_op_seqmax++;
- while (cPMOP->op_pmreplstart &&
- cPMOP->op_pmreplstart->op_type == OP_NULL)
- cPMOP->op_pmreplstart = cPMOP->op_pmreplstart->op_next;
- peep(cPMOP->op_pmreplstart);
- break;
-
- case OP_EXEC:
- o->op_seq = PL_op_seqmax++;
- if (ckWARN(WARN_SYNTAX) && o->op_next
- && o->op_next->op_type == OP_NEXTSTATE) {
- if (o->op_next->op_sibling &&
- o->op_next->op_sibling->op_type != OP_EXIT &&
- o->op_next->op_sibling->op_type != OP_WARN &&
- o->op_next->op_sibling->op_type != OP_DIE) {
- line_t oldline = CopLINE(PL_curcop);
-
- CopLINE_set(PL_curcop, CopLINE((COP*)o->op_next));
- Perl_warner(aTHX_ WARN_EXEC,
- "Statement unlikely to be reached");
- Perl_warner(aTHX_ WARN_EXEC,
- "\t(Maybe you meant system() when you said exec()?)\n");
- CopLINE_set(PL_curcop, oldline);
- }
- }
- break;
-
- case OP_HELEM: {
- UNOP *rop;
- SV *lexname;
- GV **fields;
- SV **svp, **indsvp, *sv;
- I32 ind;
- char *key;
- STRLEN keylen;
-
- o->op_seq = PL_op_seqmax++;
- if ((o->op_private & (OPpLVAL_INTRO))
- || ((BINOP*)o)->op_last->op_type != OP_CONST)
- break;
- rop = (UNOP*)((BINOP*)o)->op_first;
- if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
- break;
- lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
- if (!SvOBJECT(lexname))
- break;
- fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
- if (!fields || !GvHV(*fields))
- break;
- svp = cSVOPx_svp(((BINOP*)o)->op_last);
- key = SvPV(*svp, keylen);
- indsvp = hv_fetch(GvHV(*fields), key, keylen, FALSE);
- if (!indsvp) {
- Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" in variable %s of type %s",
- key, SvPV(lexname, n_a), HvNAME(SvSTASH(lexname)));
- }
- ind = SvIV(*indsvp);
- if (ind < 1)
- Perl_croak(aTHX_ "Bad index while coercing array into hash");
- rop->op_type = OP_RV2AV;
- rop->op_ppaddr = PL_ppaddr[OP_RV2AV];
- o->op_type = OP_AELEM;
- o->op_ppaddr = PL_ppaddr[OP_AELEM];
- sv = newSViv(ind);
- if (SvREADONLY(*svp))
- SvREADONLY_on(sv);
- SvFLAGS(sv) |= (SvFLAGS(*svp)
- & (SVs_PADBUSY|SVs_PADTMP|SVs_PADMY));
- SvREFCNT_dec(*svp);
- *svp = sv;
- break;
- }
-
- case OP_HSLICE: {
- UNOP *rop;
- SV *lexname;
- GV **fields;
- SV **svp, **indsvp, *sv;
- I32 ind;
- char *key;
- STRLEN keylen;
- SVOP *first_key_op, *key_op;
-
- o->op_seq = PL_op_seqmax++;
- if ((o->op_private & (OPpLVAL_INTRO))
- /* I bet there's always a pushmark... */
- || ((LISTOP*)o)->op_first->op_sibling->op_type != OP_LIST)
- /* hmmm, no optimization if list contains only one key. */
- break;
- rop = (UNOP*)((LISTOP*)o)->op_last;
- if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
- break;
- lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
- if (!SvOBJECT(lexname))
- break;
- fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
- if (!fields || !GvHV(*fields))
- break;
- /* Again guessing that the pushmark can be jumped over.... */
- first_key_op = (SVOP*)((LISTOP*)((LISTOP*)o)->op_first->op_sibling)
- ->op_first->op_sibling;
- /* Check that the key list contains only constants. */
- for (key_op = first_key_op; key_op;
- key_op = (SVOP*)key_op->op_sibling)
- if (key_op->op_type != OP_CONST)
- break;
- if (key_op)
- break;
- rop->op_type = OP_RV2AV;
- rop->op_ppaddr = PL_ppaddr[OP_RV2AV];
- o->op_type = OP_ASLICE;
- o->op_ppaddr = PL_ppaddr[OP_ASLICE];
- for (key_op = first_key_op; key_op;
- key_op = (SVOP*)key_op->op_sibling) {
- svp = cSVOPx_svp(key_op);
- key = SvPV(*svp, keylen);
- indsvp = hv_fetch(GvHV(*fields), key, keylen, FALSE);
- if (!indsvp) {
- Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" "
- "in variable %s of type %s",
- key, SvPV(lexname, n_a), HvNAME(SvSTASH(lexname)));
- }
- ind = SvIV(*indsvp);
- if (ind < 1)
- Perl_croak(aTHX_ "Bad index while coercing array into hash");
- sv = newSViv(ind);
- if (SvREADONLY(*svp))
- SvREADONLY_on(sv);
- SvFLAGS(sv) |= (SvFLAGS(*svp)
- & (SVs_PADBUSY|SVs_PADTMP|SVs_PADMY));
- SvREFCNT_dec(*svp);
- *svp = sv;
- }
- break;
- }
-
- default:
- o->op_seq = PL_op_seqmax++;
- break;
- }
- oldop = o;
- }
- LEAVE;
-}
diff --git a/contrib/perl5/op.h b/contrib/perl5/op.h
deleted file mode 100644
index e269934..0000000
--- a/contrib/perl5/op.h
+++ /dev/null
@@ -1,427 +0,0 @@
-/* op.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * The fields of BASEOP are:
- * op_next Pointer to next ppcode to execute after this one.
- * (Top level pre-grafted op points to first op,
- * but this is replaced when op is grafted in, when
- * this op will point to the real next op, and the new
- * parent takes over role of remembering starting op.)
- * op_ppaddr Pointer to current ppcode's function.
- * op_type The type of the operation.
- * op_flags Flags common to all operations. See OPf_* below.
- * op_private Flags peculiar to a particular operation (BUT,
- * by default, set to the number of children until
- * the operation is privatized by a check routine,
- * which may or may not check number of children).
- */
-
-typedef U32 PADOFFSET;
-#define NOT_IN_PAD ((PADOFFSET) -1)
-
-#ifdef DEBUGGING_OPS
-#define OPCODE opcode
-#else
-#define OPCODE U16
-#endif
-
-#ifdef BASEOP_DEFINITION
-#define BASEOP BASEOP_DEFINITION
-#else
-#define BASEOP \
- OP* op_next; \
- OP* op_sibling; \
- OP* (CPERLscope(*op_ppaddr))(pTHX); \
- PADOFFSET op_targ; \
- OPCODE op_type; \
- U16 op_seq; \
- U8 op_flags; \
- U8 op_private;
-#endif
-
-#define OP_GIMME(op,dfl) \
- (((op)->op_flags & OPf_WANT) == OPf_WANT_VOID ? G_VOID : \
- ((op)->op_flags & OPf_WANT) == OPf_WANT_SCALAR ? G_SCALAR : \
- ((op)->op_flags & OPf_WANT) == OPf_WANT_LIST ? G_ARRAY : \
- dfl)
-
-/*
-=for apidoc Amn|U32|GIMME_V
-The XSUB-writer's equivalent to Perl's C<wantarray>. Returns C<G_VOID>,
-C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
-respectively.
-
-=for apidoc Amn|U32|GIMME
-A backward-compatible version of C<GIMME_V> which can only return
-C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
-Deprecated. Use C<GIMME_V> instead.
-
-=cut
-*/
-
-#define GIMME_V OP_GIMME(PL_op, block_gimme())
-
-/* Public flags */
-
-#define OPf_WANT 3 /* Mask for "want" bits: */
-#define OPf_WANT_VOID 1 /* Want nothing */
-#define OPf_WANT_SCALAR 2 /* Want single value */
-#define OPf_WANT_LIST 3 /* Want list of any length */
-#define OPf_KIDS 4 /* There is a firstborn child. */
-#define OPf_PARENS 8 /* This operator was parenthesized. */
- /* (Or block needs explicit scope entry.) */
-#define OPf_REF 16 /* Certified reference. */
- /* (Return container, not containee). */
-#define OPf_MOD 32 /* Will modify (lvalue). */
-#define OPf_STACKED 64 /* Some arg is arriving on the stack. */
-#define OPf_SPECIAL 128 /* Do something weird for this op: */
- /* On local LVAL, don't init local value. */
- /* On OP_SORT, subroutine is inlined. */
- /* On OP_NOT, inversion was implicit. */
- /* On OP_LEAVE, don't restore curpm. */
- /* On truncate, we truncate filehandle */
- /* On control verbs, we saw no label */
- /* On flipflop, we saw ... instead of .. */
- /* On UNOPs, saw bare parens, e.g. eof(). */
- /* On OP_ENTERSUB || OP_NULL, saw a "do". */
- /* On OP_EXISTS, treat av as av, not avhv. */
- /* On OP_(ENTER|LEAVE)EVAL, don't clear $@ */
- /* On OP_ENTERITER, loop var is per-thread */
- /* On pushre, re is /\s+/ imp. by split " " */
- /* On regcomp, "use re 'eval'" was in scope */
-
-/* old names; don't use in new code, but don't break them, either */
-#define OPf_LIST OPf_WANT_LIST
-#define OPf_KNOW OPf_WANT
-
-#define GIMME \
- (PL_op->op_flags & OPf_WANT \
- ? ((PL_op->op_flags & OPf_WANT) == OPf_WANT_LIST \
- ? G_ARRAY \
- : G_SCALAR) \
- : dowantarray())
-
-/* NOTE: OP_NEXTSTATE, OP_DBSTATE, and OP_SETSTATE (i.e. COPs) carry lower
- * bits of PL_hints in op_private */
-
-/* Private for lvalues */
-#define OPpLVAL_INTRO 128 /* Lvalue must be localized or lvalue sub */
-
-/* Private for OP_LEAVE, OP_LEAVESUB, OP_LEAVESUBLV and OP_LEAVEWRITE */
-#define OPpREFCOUNTED 64 /* op_targ carries a refcount */
-
-/* Private for OP_AASSIGN */
-#define OPpASSIGN_COMMON 64 /* Left & right have syms in common. */
-#define OPpASSIGN_HASH 32 /* Assigning to possible pseudohash. */
-
-/* Private for OP_SASSIGN */
-#define OPpASSIGN_BACKWARDS 64 /* Left & right switched. */
-
-/* Private for OP_MATCH and OP_SUBST{,CONST} */
-#define OPpRUNTIME 64 /* Pattern coming in on the stack */
-
-/* Private for OP_TRANS */
-#define OPpTRANS_FROM_UTF 1
-#define OPpTRANS_TO_UTF 2
-#define OPpTRANS_IDENTICAL 4 /* right side is same as left */
-#define OPpTRANS_SQUASH 8
-#define OPpTRANS_DELETE 16
-#define OPpTRANS_COMPLEMENT 32
-#define OPpTRANS_GROWS 64
-
-/* Private for OP_REPEAT */
-#define OPpREPEAT_DOLIST 64 /* List replication. */
-
-/* Private for OP_RV2?V, OP_?ELEM */
-#define OPpDEREF (32|64) /* Want ref to something: */
-#define OPpDEREF_AV 32 /* Want ref to AV. */
-#define OPpDEREF_HV 64 /* Want ref to HV. */
-#define OPpDEREF_SV (32|64) /* Want ref to SV. */
- /* OP_ENTERSUB only */
-#define OPpENTERSUB_DB 16 /* Debug subroutine. */
-#define OPpENTERSUB_HASTARG 32 /* Called from OP tree. */
- /* OP_RV2CV only */
-#define OPpENTERSUB_AMPER 8 /* Used & form to call. */
-#define OPpENTERSUB_NOPAREN 128 /* bare sub call (without parens) */
-#define OPpENTERSUB_INARGS 4 /* Lval used as arg to a sub. */
- /* OP_GV only */
-#define OPpEARLY_CV 32 /* foo() called before sub foo was parsed */
- /* OP_?ELEM only */
-#define OPpLVAL_DEFER 16 /* Defer creation of array/hash elem */
- /* OP_RV2?V, OP_GVSV only */
-#define OPpOUR_INTRO 16 /* Variable was in an our() */
- /* OP_RV2[AH]V, OP_PAD[AH]V, OP_[AH]ELEM */
-#define OPpMAYBE_LVSUB 8 /* We might be an lvalue to return */
- /* for OP_RV2?V, lower bits carry hints (currently only HINT_STRICT_REFS) */
-
-/* Private for OPs with TARGLEX */
- /* (lower bits may carry MAXARG) */
-#define OPpTARGET_MY 16 /* Target is PADMY. */
-
-/* Private for OP_CONST */
-#define OPpCONST_STRICT 8 /* bearword subject to strict 'subs' */
-#define OPpCONST_ENTERED 16 /* Has been entered as symbol. */
-#define OPpCONST_ARYBASE 32 /* Was a $[ translated to constant. */
-#define OPpCONST_BARE 64 /* Was a bare word (filehandle?). */
-#define OPpCONST_WARNING 128 /* Was a $^W translated to constant. */
-
-/* Private for OP_FLIP/FLOP */
-#define OPpFLIP_LINENUM 64 /* Range arg potentially a line num. */
-
-/* Private for OP_LIST */
-#define OPpLIST_GUESSED 64 /* Guessed that pushmark was needed. */
-
-/* Private for OP_DELETE */
-#define OPpSLICE 64 /* Operating on a list of keys */
-
-/* Private for OP_EXISTS */
-#define OPpEXISTS_SUB 64 /* Checking for &sub, not {} or []. */
-
-/* Private for OP_SORT, OP_PRTF, OP_SPRINTF, OP_FTTEXT, OP_FTBINARY, */
-/* string comparisons, and case changers. */
-#define OPpLOCALE 64 /* Use locale */
-
-/* Private for OP_SORT */
-#define OPpSORT_NUMERIC 1 /* Optimized away { $a <=> $b } */
-#define OPpSORT_INTEGER 2 /* Ditto while under "use integer" */
-#define OPpSORT_REVERSE 4 /* Descending sort */
-/* Private for OP_THREADSV */
-#define OPpDONE_SVREF 64 /* Been through newSVREF once */
-
-/* Private for OP_OPEN and OP_BACKTICK */
-#define OPpOPEN_IN_RAW 16 /* binmode(F,":raw") on input fh */
-#define OPpOPEN_IN_CRLF 32 /* binmode(F,":crlf") on input fh */
-#define OPpOPEN_OUT_RAW 64 /* binmode(F,":raw") on output fh */
-#define OPpOPEN_OUT_CRLF 128 /* binmode(F,":crlf") on output fh */
-
-/* Private for OP_EXIT */
-#define OPpEXIT_VMSISH 128 /* exit(0) vs. exit(1) vmsish mode*/
-
-struct op {
- BASEOP
-};
-
-struct unop {
- BASEOP
- OP * op_first;
-};
-
-struct binop {
- BASEOP
- OP * op_first;
- OP * op_last;
-};
-
-struct logop {
- BASEOP
- OP * op_first;
- OP * op_other;
-};
-
-struct listop {
- BASEOP
- OP * op_first;
- OP * op_last;
-};
-
-struct pmop {
- BASEOP
- OP * op_first;
- OP * op_last;
- OP * op_pmreplroot;
- OP * op_pmreplstart;
- PMOP * op_pmnext; /* list of all scanpats */
- REGEXP * op_pmregexp; /* compiled expression */
- U16 op_pmflags;
- U16 op_pmpermflags;
- U8 op_pmdynflags;
-};
-
-#define PMdf_USED 0x01 /* pm has been used once already */
-#define PMdf_TAINTED 0x02 /* pm compiled from tainted pattern */
-#define PMdf_UTF8 0x04 /* pm compiled from utf8 data */
-
-#define PMf_RETAINT 0x0001 /* taint $1 etc. if target tainted */
-#define PMf_ONCE 0x0002 /* use pattern only once per reset */
-#define PMf_REVERSED 0x0004 /* Should be matched right->left */
-#define PMf_MAYBE_CONST 0x0008 /* replacement contains variables */
-#define PMf_SKIPWHITE 0x0010 /* skip leading whitespace for split */
-#define PMf_WHITE 0x0020 /* pattern is \s+ */
-#define PMf_CONST 0x0040 /* subst replacement is constant */
-#define PMf_KEEP 0x0080 /* keep 1st runtime pattern forever */
-#define PMf_GLOBAL 0x0100 /* pattern had a g modifier */
-#define PMf_CONTINUE 0x0200 /* don't reset pos() if //g fails */
-#define PMf_EVAL 0x0400 /* evaluating replacement as expr */
-#define PMf_LOCALE 0x0800 /* use locale for character types */
-#define PMf_MULTILINE 0x1000 /* assume multiple lines */
-#define PMf_SINGLELINE 0x2000 /* assume single line */
-#define PMf_FOLD 0x4000 /* case insensitivity */
-#define PMf_EXTENDED 0x8000 /* chuck embedded whitespace */
-
-/* mask of bits stored in regexp->reganch */
-#define PMf_COMPILETIME (PMf_MULTILINE|PMf_SINGLELINE|PMf_LOCALE|PMf_FOLD|PMf_EXTENDED)
-
-struct svop {
- BASEOP
- SV * op_sv;
-};
-
-struct padop {
- BASEOP
- PADOFFSET op_padix;
-};
-
-struct pvop {
- BASEOP
- char * op_pv;
-};
-
-struct loop {
- BASEOP
- OP * op_first;
- OP * op_last;
- OP * op_redoop;
- OP * op_nextop;
- OP * op_lastop;
-};
-
-#define cUNOPx(o) ((UNOP*)o)
-#define cBINOPx(o) ((BINOP*)o)
-#define cLISTOPx(o) ((LISTOP*)o)
-#define cLOGOPx(o) ((LOGOP*)o)
-#define cPMOPx(o) ((PMOP*)o)
-#define cSVOPx(o) ((SVOP*)o)
-#define cPADOPx(o) ((PADOP*)o)
-#define cPVOPx(o) ((PVOP*)o)
-#define cCOPx(o) ((COP*)o)
-#define cLOOPx(o) ((LOOP*)o)
-
-#define cUNOP cUNOPx(PL_op)
-#define cBINOP cBINOPx(PL_op)
-#define cLISTOP cLISTOPx(PL_op)
-#define cLOGOP cLOGOPx(PL_op)
-#define cPMOP cPMOPx(PL_op)
-#define cSVOP cSVOPx(PL_op)
-#define cPADOP cPADOPx(PL_op)
-#define cPVOP cPVOPx(PL_op)
-#define cCOP cCOPx(PL_op)
-#define cLOOP cLOOPx(PL_op)
-
-#define cUNOPo cUNOPx(o)
-#define cBINOPo cBINOPx(o)
-#define cLISTOPo cLISTOPx(o)
-#define cLOGOPo cLOGOPx(o)
-#define cPMOPo cPMOPx(o)
-#define cSVOPo cSVOPx(o)
-#define cPADOPo cPADOPx(o)
-#define cPVOPo cPVOPx(o)
-#define cCOPo cCOPx(o)
-#define cLOOPo cLOOPx(o)
-
-#define kUNOP cUNOPx(kid)
-#define kBINOP cBINOPx(kid)
-#define kLISTOP cLISTOPx(kid)
-#define kLOGOP cLOGOPx(kid)
-#define kPMOP cPMOPx(kid)
-#define kSVOP cSVOPx(kid)
-#define kPADOP cPADOPx(kid)
-#define kPVOP cPVOPx(kid)
-#define kCOP cCOPx(kid)
-#define kLOOP cLOOPx(kid)
-
-
-#ifdef USE_ITHREADS
-# define cGVOPx_gv(o) ((GV*)PL_curpad[cPADOPx(o)->op_padix])
-# define IS_PADGV(v) (v && SvTYPE(v) == SVt_PVGV && GvIN_PAD(v))
-# define IS_PADCONST(v) (v && SvREADONLY(v))
-# define cSVOPx_sv(v) (cSVOPx(v)->op_sv \
- ? cSVOPx(v)->op_sv : PL_curpad[(v)->op_targ])
-# define cSVOPx_svp(v) (cSVOPx(v)->op_sv \
- ? &cSVOPx(v)->op_sv : &PL_curpad[(v)->op_targ])
-#else
-# define cGVOPx_gv(o) ((GV*)cSVOPx(o)->op_sv)
-# define IS_PADGV(v) FALSE
-# define IS_PADCONST(v) FALSE
-# define cSVOPx_sv(v) (cSVOPx(v)->op_sv)
-# define cSVOPx_svp(v) (&cSVOPx(v)->op_sv)
-#endif
-
-#define cGVOP_gv cGVOPx_gv(PL_op)
-#define cGVOPo_gv cGVOPx_gv(o)
-#define kGVOP_gv cGVOPx_gv(kid)
-#define cSVOP_sv cSVOPx_sv(PL_op)
-#define cSVOPo_sv cSVOPx_sv(o)
-#define kSVOP_sv cSVOPx_sv(kid)
-
-#define Nullop Null(OP*)
-
-/* Lowest byte of PL_opargs */
-#define OA_MARK 1
-#define OA_FOLDCONST 2
-#define OA_RETSCALAR 4
-#define OA_TARGET 8
-#define OA_RETINTEGER 16
-#define OA_OTHERINT 32
-#define OA_DANGEROUS 64
-#define OA_DEFGV 128
-#define OA_TARGLEX 256
-
-/* The next 4 bits encode op class information */
-#define OCSHIFT 9
-
-#define OA_CLASS_MASK (15 << OCSHIFT)
-
-#define OA_BASEOP (0 << OCSHIFT)
-#define OA_UNOP (1 << OCSHIFT)
-#define OA_BINOP (2 << OCSHIFT)
-#define OA_LOGOP (3 << OCSHIFT)
-#define OA_LISTOP (4 << OCSHIFT)
-#define OA_PMOP (5 << OCSHIFT)
-#define OA_SVOP (6 << OCSHIFT)
-#define OA_PADOP (7 << OCSHIFT)
-#define OA_PVOP_OR_SVOP (8 << OCSHIFT)
-#define OA_LOOP (9 << OCSHIFT)
-#define OA_COP (10 << OCSHIFT)
-#define OA_BASEOP_OR_UNOP (11 << OCSHIFT)
-#define OA_FILESTATOP (12 << OCSHIFT)
-#define OA_LOOPEXOP (13 << OCSHIFT)
-
-#define OASHIFT 13
-
-/* Remaining nybbles of PL_opargs */
-#define OA_SCALAR 1
-#define OA_LIST 2
-#define OA_AVREF 3
-#define OA_HVREF 4
-#define OA_CVREF 5
-#define OA_FILEREF 6
-#define OA_SCALARREF 7
-#define OA_OPTIONAL 8
-
-#ifdef USE_ITHREADS
-# define OP_REFCNT_INIT MUTEX_INIT(&PL_op_mutex)
-# define OP_REFCNT_LOCK MUTEX_LOCK(&PL_op_mutex)
-# define OP_REFCNT_UNLOCK MUTEX_UNLOCK(&PL_op_mutex)
-# define OP_REFCNT_TERM MUTEX_DESTROY(&PL_op_mutex)
-#else
-# define OP_REFCNT_INIT NOOP
-# define OP_REFCNT_LOCK NOOP
-# define OP_REFCNT_UNLOCK NOOP
-# define OP_REFCNT_TERM NOOP
-#endif
-
-#define OpREFCNT_set(o,n) ((o)->op_targ = (n))
-#define OpREFCNT_inc(o) ((o) ? (++(o)->op_targ, (o)) : Nullop)
-#define OpREFCNT_dec(o) (--(o)->op_targ)
-
-/* flags used by Perl_load_module() */
-#define PERL_LOADMOD_DENY 0x1
-#define PERL_LOADMOD_NOIMPORT 0x2
-#define PERL_LOADMOD_IMPORT_OPS 0x4
diff --git a/contrib/perl5/opcode.h b/contrib/perl5/opcode.h
deleted file mode 100644
index 542ec60..0000000
--- a/contrib/perl5/opcode.h
+++ /dev/null
@@ -1,1809 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by opcode.pl from its data. Any changes made here
- will be lost!
-*/
-
-#define Perl_pp_i_preinc Perl_pp_preinc
-#define Perl_pp_i_predec Perl_pp_predec
-#define Perl_pp_i_postinc Perl_pp_postinc
-#define Perl_pp_i_postdec Perl_pp_postdec
-
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXT char *PL_op_name[];
-#else
-EXT char *PL_op_name[] = {
- "null",
- "stub",
- "scalar",
- "pushmark",
- "wantarray",
- "const",
- "gvsv",
- "gv",
- "gelem",
- "padsv",
- "padav",
- "padhv",
- "padany",
- "pushre",
- "rv2gv",
- "rv2sv",
- "av2arylen",
- "rv2cv",
- "anoncode",
- "prototype",
- "refgen",
- "srefgen",
- "ref",
- "bless",
- "backtick",
- "glob",
- "readline",
- "rcatline",
- "regcmaybe",
- "regcreset",
- "regcomp",
- "match",
- "qr",
- "subst",
- "substcont",
- "trans",
- "sassign",
- "aassign",
- "chop",
- "schop",
- "chomp",
- "schomp",
- "defined",
- "undef",
- "study",
- "pos",
- "preinc",
- "i_preinc",
- "predec",
- "i_predec",
- "postinc",
- "i_postinc",
- "postdec",
- "i_postdec",
- "pow",
- "multiply",
- "i_multiply",
- "divide",
- "i_divide",
- "modulo",
- "i_modulo",
- "repeat",
- "add",
- "i_add",
- "subtract",
- "i_subtract",
- "concat",
- "stringify",
- "left_shift",
- "right_shift",
- "lt",
- "i_lt",
- "gt",
- "i_gt",
- "le",
- "i_le",
- "ge",
- "i_ge",
- "eq",
- "i_eq",
- "ne",
- "i_ne",
- "ncmp",
- "i_ncmp",
- "slt",
- "sgt",
- "sle",
- "sge",
- "seq",
- "sne",
- "scmp",
- "bit_and",
- "bit_xor",
- "bit_or",
- "negate",
- "i_negate",
- "not",
- "complement",
- "atan2",
- "sin",
- "cos",
- "rand",
- "srand",
- "exp",
- "log",
- "sqrt",
- "int",
- "hex",
- "oct",
- "abs",
- "length",
- "substr",
- "vec",
- "index",
- "rindex",
- "sprintf",
- "formline",
- "ord",
- "chr",
- "crypt",
- "ucfirst",
- "lcfirst",
- "uc",
- "lc",
- "quotemeta",
- "rv2av",
- "aelemfast",
- "aelem",
- "aslice",
- "each",
- "values",
- "keys",
- "delete",
- "exists",
- "rv2hv",
- "helem",
- "hslice",
- "unpack",
- "pack",
- "split",
- "join",
- "list",
- "lslice",
- "anonlist",
- "anonhash",
- "splice",
- "push",
- "pop",
- "shift",
- "unshift",
- "sort",
- "reverse",
- "grepstart",
- "grepwhile",
- "mapstart",
- "mapwhile",
- "range",
- "flip",
- "flop",
- "and",
- "or",
- "xor",
- "cond_expr",
- "andassign",
- "orassign",
- "method",
- "entersub",
- "leavesub",
- "leavesublv",
- "caller",
- "warn",
- "die",
- "reset",
- "lineseq",
- "nextstate",
- "dbstate",
- "unstack",
- "enter",
- "leave",
- "scope",
- "enteriter",
- "iter",
- "enterloop",
- "leaveloop",
- "return",
- "last",
- "next",
- "redo",
- "dump",
- "goto",
- "exit",
- "open",
- "close",
- "pipe_op",
- "fileno",
- "umask",
- "binmode",
- "tie",
- "untie",
- "tied",
- "dbmopen",
- "dbmclose",
- "sselect",
- "select",
- "getc",
- "read",
- "enterwrite",
- "leavewrite",
- "prtf",
- "print",
- "sysopen",
- "sysseek",
- "sysread",
- "syswrite",
- "send",
- "recv",
- "eof",
- "tell",
- "seek",
- "truncate",
- "fcntl",
- "ioctl",
- "flock",
- "socket",
- "sockpair",
- "bind",
- "connect",
- "listen",
- "accept",
- "shutdown",
- "gsockopt",
- "ssockopt",
- "getsockname",
- "getpeername",
- "lstat",
- "stat",
- "ftrread",
- "ftrwrite",
- "ftrexec",
- "fteread",
- "ftewrite",
- "fteexec",
- "ftis",
- "fteowned",
- "ftrowned",
- "ftzero",
- "ftsize",
- "ftmtime",
- "ftatime",
- "ftctime",
- "ftsock",
- "ftchr",
- "ftblk",
- "ftfile",
- "ftdir",
- "ftpipe",
- "ftlink",
- "ftsuid",
- "ftsgid",
- "ftsvtx",
- "fttty",
- "fttext",
- "ftbinary",
- "chdir",
- "chown",
- "chroot",
- "unlink",
- "chmod",
- "utime",
- "rename",
- "link",
- "symlink",
- "readlink",
- "mkdir",
- "rmdir",
- "open_dir",
- "readdir",
- "telldir",
- "seekdir",
- "rewinddir",
- "closedir",
- "fork",
- "wait",
- "waitpid",
- "system",
- "exec",
- "kill",
- "getppid",
- "getpgrp",
- "setpgrp",
- "getpriority",
- "setpriority",
- "time",
- "tms",
- "localtime",
- "gmtime",
- "alarm",
- "sleep",
- "shmget",
- "shmctl",
- "shmread",
- "shmwrite",
- "msgget",
- "msgctl",
- "msgsnd",
- "msgrcv",
- "semget",
- "semctl",
- "semop",
- "require",
- "dofile",
- "entereval",
- "leaveeval",
- "entertry",
- "leavetry",
- "ghbyname",
- "ghbyaddr",
- "ghostent",
- "gnbyname",
- "gnbyaddr",
- "gnetent",
- "gpbyname",
- "gpbynumber",
- "gprotoent",
- "gsbyname",
- "gsbyport",
- "gservent",
- "shostent",
- "snetent",
- "sprotoent",
- "sservent",
- "ehostent",
- "enetent",
- "eprotoent",
- "eservent",
- "gpwnam",
- "gpwuid",
- "gpwent",
- "spwent",
- "epwent",
- "ggrnam",
- "ggrgid",
- "ggrent",
- "sgrent",
- "egrent",
- "getlogin",
- "syscall",
- "lock",
- "threadsv",
- "setstate",
- "method_named",
-};
-#endif
-
-#ifndef DOINIT
-EXT char *PL_op_desc[];
-#else
-EXT char *PL_op_desc[] = {
- "null operation",
- "stub",
- "scalar",
- "pushmark",
- "wantarray",
- "constant item",
- "scalar variable",
- "glob value",
- "glob elem",
- "private variable",
- "private array",
- "private hash",
- "private value",
- "push regexp",
- "ref-to-glob cast",
- "scalar dereference",
- "array length",
- "subroutine dereference",
- "anonymous subroutine",
- "subroutine prototype",
- "reference constructor",
- "single ref constructor",
- "reference-type operator",
- "bless",
- "quoted execution (``, qx)",
- "glob",
- "<HANDLE>",
- "append I/O operator",
- "regexp internal guard",
- "regexp internal reset",
- "regexp compilation",
- "pattern match (m//)",
- "pattern quote (qr//)",
- "substitution (s///)",
- "substitution iterator",
- "transliteration (tr///)",
- "scalar assignment",
- "list assignment",
- "chop",
- "scalar chop",
- "chomp",
- "scalar chomp",
- "defined operator",
- "undef operator",
- "study",
- "match position",
- "preincrement (++)",
- "integer preincrement (++)",
- "predecrement (--)",
- "integer predecrement (--)",
- "postincrement (++)",
- "integer postincrement (++)",
- "postdecrement (--)",
- "integer postdecrement (--)",
- "exponentiation (**)",
- "multiplication (*)",
- "integer multiplication (*)",
- "division (/)",
- "integer division (/)",
- "modulus (%)",
- "integer modulus (%)",
- "repeat (x)",
- "addition (+)",
- "integer addition (+)",
- "subtraction (-)",
- "integer subtraction (-)",
- "concatenation (.) or string",
- "string",
- "left bitshift (<<)",
- "right bitshift (>>)",
- "numeric lt (<)",
- "integer lt (<)",
- "numeric gt (>)",
- "integer gt (>)",
- "numeric le (<=)",
- "integer le (<=)",
- "numeric ge (>=)",
- "integer ge (>=)",
- "numeric eq (==)",
- "integer eq (==)",
- "numeric ne (!=)",
- "integer ne (!=)",
- "numeric comparison (<=>)",
- "integer comparison (<=>)",
- "string lt",
- "string gt",
- "string le",
- "string ge",
- "string eq",
- "string ne",
- "string comparison (cmp)",
- "bitwise and (&)",
- "bitwise xor (^)",
- "bitwise or (|)",
- "negation (-)",
- "integer negation (-)",
- "not",
- "1's complement (~)",
- "atan2",
- "sin",
- "cos",
- "rand",
- "srand",
- "exp",
- "log",
- "sqrt",
- "int",
- "hex",
- "oct",
- "abs",
- "length",
- "substr",
- "vec",
- "index",
- "rindex",
- "sprintf",
- "formline",
- "ord",
- "chr",
- "crypt",
- "ucfirst",
- "lcfirst",
- "uc",
- "lc",
- "quotemeta",
- "array dereference",
- "constant array element",
- "array element",
- "array slice",
- "each",
- "values",
- "keys",
- "delete",
- "exists",
- "hash dereference",
- "hash element",
- "hash slice",
- "unpack",
- "pack",
- "split",
- "join or string",
- "list",
- "list slice",
- "anonymous list ([])",
- "anonymous hash ({})",
- "splice",
- "push",
- "pop",
- "shift",
- "unshift",
- "sort",
- "reverse",
- "grep",
- "grep iterator",
- "map",
- "map iterator",
- "flipflop",
- "range (or flip)",
- "range (or flop)",
- "logical and (&&)",
- "logical or (||)",
- "logical xor",
- "conditional expression",
- "logical and assignment (&&=)",
- "logical or assignment (||=)",
- "method lookup",
- "subroutine entry",
- "subroutine exit",
- "lvalue subroutine return",
- "caller",
- "warn",
- "die",
- "symbol reset",
- "line sequence",
- "next statement",
- "debug next statement",
- "iteration finalizer",
- "block entry",
- "block exit",
- "block",
- "foreach loop entry",
- "foreach loop iterator",
- "loop entry",
- "loop exit",
- "return",
- "last",
- "next",
- "redo",
- "dump",
- "goto",
- "exit",
- "open",
- "close",
- "pipe",
- "fileno",
- "umask",
- "binmode",
- "tie",
- "untie",
- "tied",
- "dbmopen",
- "dbmclose",
- "select system call",
- "select",
- "getc",
- "read",
- "write",
- "write exit",
- "printf",
- "print",
- "sysopen",
- "sysseek",
- "sysread",
- "syswrite",
- "send",
- "recv",
- "eof",
- "tell",
- "seek",
- "truncate",
- "fcntl",
- "ioctl",
- "flock",
- "socket",
- "socketpair",
- "bind",
- "connect",
- "listen",
- "accept",
- "shutdown",
- "getsockopt",
- "setsockopt",
- "getsockname",
- "getpeername",
- "lstat",
- "stat",
- "-R",
- "-W",
- "-X",
- "-r",
- "-w",
- "-x",
- "-e",
- "-O",
- "-o",
- "-z",
- "-s",
- "-M",
- "-A",
- "-C",
- "-S",
- "-c",
- "-b",
- "-f",
- "-d",
- "-p",
- "-l",
- "-u",
- "-g",
- "-k",
- "-t",
- "-T",
- "-B",
- "chdir",
- "chown",
- "chroot",
- "unlink",
- "chmod",
- "utime",
- "rename",
- "link",
- "symlink",
- "readlink",
- "mkdir",
- "rmdir",
- "opendir",
- "readdir",
- "telldir",
- "seekdir",
- "rewinddir",
- "closedir",
- "fork",
- "wait",
- "waitpid",
- "system",
- "exec",
- "kill",
- "getppid",
- "getpgrp",
- "setpgrp",
- "getpriority",
- "setpriority",
- "time",
- "times",
- "localtime",
- "gmtime",
- "alarm",
- "sleep",
- "shmget",
- "shmctl",
- "shmread",
- "shmwrite",
- "msgget",
- "msgctl",
- "msgsnd",
- "msgrcv",
- "semget",
- "semctl",
- "semop",
- "require",
- "do \"file\"",
- "eval \"string\"",
- "eval \"string\" exit",
- "eval {block}",
- "eval {block} exit",
- "gethostbyname",
- "gethostbyaddr",
- "gethostent",
- "getnetbyname",
- "getnetbyaddr",
- "getnetent",
- "getprotobyname",
- "getprotobynumber",
- "getprotoent",
- "getservbyname",
- "getservbyport",
- "getservent",
- "sethostent",
- "setnetent",
- "setprotoent",
- "setservent",
- "endhostent",
- "endnetent",
- "endprotoent",
- "endservent",
- "getpwnam",
- "getpwuid",
- "getpwent",
- "setpwent",
- "endpwent",
- "getgrnam",
- "getgrgid",
- "getgrent",
- "setgrent",
- "endgrent",
- "getlogin",
- "syscall",
- "lock",
- "per-thread value",
- "set statement info",
- "method with known name",
-};
-#endif
-
-END_EXTERN_C
-
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXT OP * (CPERLscope(*PL_ppaddr)[])(pTHX);
-#else
-EXT OP * (CPERLscope(*PL_ppaddr)[])(pTHX) = {
- MEMBER_TO_FPTR(Perl_pp_null),
- MEMBER_TO_FPTR(Perl_pp_stub),
- MEMBER_TO_FPTR(Perl_pp_scalar),
- MEMBER_TO_FPTR(Perl_pp_pushmark),
- MEMBER_TO_FPTR(Perl_pp_wantarray),
- MEMBER_TO_FPTR(Perl_pp_const),
- MEMBER_TO_FPTR(Perl_pp_gvsv),
- MEMBER_TO_FPTR(Perl_pp_gv),
- MEMBER_TO_FPTR(Perl_pp_gelem),
- MEMBER_TO_FPTR(Perl_pp_padsv),
- MEMBER_TO_FPTR(Perl_pp_padav),
- MEMBER_TO_FPTR(Perl_pp_padhv),
- MEMBER_TO_FPTR(Perl_pp_padany),
- MEMBER_TO_FPTR(Perl_pp_pushre),
- MEMBER_TO_FPTR(Perl_pp_rv2gv),
- MEMBER_TO_FPTR(Perl_pp_rv2sv),
- MEMBER_TO_FPTR(Perl_pp_av2arylen),
- MEMBER_TO_FPTR(Perl_pp_rv2cv),
- MEMBER_TO_FPTR(Perl_pp_anoncode),
- MEMBER_TO_FPTR(Perl_pp_prototype),
- MEMBER_TO_FPTR(Perl_pp_refgen),
- MEMBER_TO_FPTR(Perl_pp_srefgen),
- MEMBER_TO_FPTR(Perl_pp_ref),
- MEMBER_TO_FPTR(Perl_pp_bless),
- MEMBER_TO_FPTR(Perl_pp_backtick),
- MEMBER_TO_FPTR(Perl_pp_glob),
- MEMBER_TO_FPTR(Perl_pp_readline),
- MEMBER_TO_FPTR(Perl_pp_rcatline),
- MEMBER_TO_FPTR(Perl_pp_regcmaybe),
- MEMBER_TO_FPTR(Perl_pp_regcreset),
- MEMBER_TO_FPTR(Perl_pp_regcomp),
- MEMBER_TO_FPTR(Perl_pp_match),
- MEMBER_TO_FPTR(Perl_pp_qr),
- MEMBER_TO_FPTR(Perl_pp_subst),
- MEMBER_TO_FPTR(Perl_pp_substcont),
- MEMBER_TO_FPTR(Perl_pp_trans),
- MEMBER_TO_FPTR(Perl_pp_sassign),
- MEMBER_TO_FPTR(Perl_pp_aassign),
- MEMBER_TO_FPTR(Perl_pp_chop),
- MEMBER_TO_FPTR(Perl_pp_schop),
- MEMBER_TO_FPTR(Perl_pp_chomp),
- MEMBER_TO_FPTR(Perl_pp_schomp),
- MEMBER_TO_FPTR(Perl_pp_defined),
- MEMBER_TO_FPTR(Perl_pp_undef),
- MEMBER_TO_FPTR(Perl_pp_study),
- MEMBER_TO_FPTR(Perl_pp_pos),
- MEMBER_TO_FPTR(Perl_pp_preinc),
- MEMBER_TO_FPTR(Perl_pp_i_preinc),
- MEMBER_TO_FPTR(Perl_pp_predec),
- MEMBER_TO_FPTR(Perl_pp_i_predec),
- MEMBER_TO_FPTR(Perl_pp_postinc),
- MEMBER_TO_FPTR(Perl_pp_i_postinc),
- MEMBER_TO_FPTR(Perl_pp_postdec),
- MEMBER_TO_FPTR(Perl_pp_i_postdec),
- MEMBER_TO_FPTR(Perl_pp_pow),
- MEMBER_TO_FPTR(Perl_pp_multiply),
- MEMBER_TO_FPTR(Perl_pp_i_multiply),
- MEMBER_TO_FPTR(Perl_pp_divide),
- MEMBER_TO_FPTR(Perl_pp_i_divide),
- MEMBER_TO_FPTR(Perl_pp_modulo),
- MEMBER_TO_FPTR(Perl_pp_i_modulo),
- MEMBER_TO_FPTR(Perl_pp_repeat),
- MEMBER_TO_FPTR(Perl_pp_add),
- MEMBER_TO_FPTR(Perl_pp_i_add),
- MEMBER_TO_FPTR(Perl_pp_subtract),
- MEMBER_TO_FPTR(Perl_pp_i_subtract),
- MEMBER_TO_FPTR(Perl_pp_concat),
- MEMBER_TO_FPTR(Perl_pp_stringify),
- MEMBER_TO_FPTR(Perl_pp_left_shift),
- MEMBER_TO_FPTR(Perl_pp_right_shift),
- MEMBER_TO_FPTR(Perl_pp_lt),
- MEMBER_TO_FPTR(Perl_pp_i_lt),
- MEMBER_TO_FPTR(Perl_pp_gt),
- MEMBER_TO_FPTR(Perl_pp_i_gt),
- MEMBER_TO_FPTR(Perl_pp_le),
- MEMBER_TO_FPTR(Perl_pp_i_le),
- MEMBER_TO_FPTR(Perl_pp_ge),
- MEMBER_TO_FPTR(Perl_pp_i_ge),
- MEMBER_TO_FPTR(Perl_pp_eq),
- MEMBER_TO_FPTR(Perl_pp_i_eq),
- MEMBER_TO_FPTR(Perl_pp_ne),
- MEMBER_TO_FPTR(Perl_pp_i_ne),
- MEMBER_TO_FPTR(Perl_pp_ncmp),
- MEMBER_TO_FPTR(Perl_pp_i_ncmp),
- MEMBER_TO_FPTR(Perl_pp_slt),
- MEMBER_TO_FPTR(Perl_pp_sgt),
- MEMBER_TO_FPTR(Perl_pp_sle),
- MEMBER_TO_FPTR(Perl_pp_sge),
- MEMBER_TO_FPTR(Perl_pp_seq),
- MEMBER_TO_FPTR(Perl_pp_sne),
- MEMBER_TO_FPTR(Perl_pp_scmp),
- MEMBER_TO_FPTR(Perl_pp_bit_and),
- MEMBER_TO_FPTR(Perl_pp_bit_xor),
- MEMBER_TO_FPTR(Perl_pp_bit_or),
- MEMBER_TO_FPTR(Perl_pp_negate),
- MEMBER_TO_FPTR(Perl_pp_i_negate),
- MEMBER_TO_FPTR(Perl_pp_not),
- MEMBER_TO_FPTR(Perl_pp_complement),
- MEMBER_TO_FPTR(Perl_pp_atan2),
- MEMBER_TO_FPTR(Perl_pp_sin),
- MEMBER_TO_FPTR(Perl_pp_cos),
- MEMBER_TO_FPTR(Perl_pp_rand),
- MEMBER_TO_FPTR(Perl_pp_srand),
- MEMBER_TO_FPTR(Perl_pp_exp),
- MEMBER_TO_FPTR(Perl_pp_log),
- MEMBER_TO_FPTR(Perl_pp_sqrt),
- MEMBER_TO_FPTR(Perl_pp_int),
- MEMBER_TO_FPTR(Perl_pp_hex),
- MEMBER_TO_FPTR(Perl_pp_oct),
- MEMBER_TO_FPTR(Perl_pp_abs),
- MEMBER_TO_FPTR(Perl_pp_length),
- MEMBER_TO_FPTR(Perl_pp_substr),
- MEMBER_TO_FPTR(Perl_pp_vec),
- MEMBER_TO_FPTR(Perl_pp_index),
- MEMBER_TO_FPTR(Perl_pp_rindex),
- MEMBER_TO_FPTR(Perl_pp_sprintf),
- MEMBER_TO_FPTR(Perl_pp_formline),
- MEMBER_TO_FPTR(Perl_pp_ord),
- MEMBER_TO_FPTR(Perl_pp_chr),
- MEMBER_TO_FPTR(Perl_pp_crypt),
- MEMBER_TO_FPTR(Perl_pp_ucfirst),
- MEMBER_TO_FPTR(Perl_pp_lcfirst),
- MEMBER_TO_FPTR(Perl_pp_uc),
- MEMBER_TO_FPTR(Perl_pp_lc),
- MEMBER_TO_FPTR(Perl_pp_quotemeta),
- MEMBER_TO_FPTR(Perl_pp_rv2av),
- MEMBER_TO_FPTR(Perl_pp_aelemfast),
- MEMBER_TO_FPTR(Perl_pp_aelem),
- MEMBER_TO_FPTR(Perl_pp_aslice),
- MEMBER_TO_FPTR(Perl_pp_each),
- MEMBER_TO_FPTR(Perl_pp_values),
- MEMBER_TO_FPTR(Perl_pp_keys),
- MEMBER_TO_FPTR(Perl_pp_delete),
- MEMBER_TO_FPTR(Perl_pp_exists),
- MEMBER_TO_FPTR(Perl_pp_rv2hv),
- MEMBER_TO_FPTR(Perl_pp_helem),
- MEMBER_TO_FPTR(Perl_pp_hslice),
- MEMBER_TO_FPTR(Perl_pp_unpack),
- MEMBER_TO_FPTR(Perl_pp_pack),
- MEMBER_TO_FPTR(Perl_pp_split),
- MEMBER_TO_FPTR(Perl_pp_join),
- MEMBER_TO_FPTR(Perl_pp_list),
- MEMBER_TO_FPTR(Perl_pp_lslice),
- MEMBER_TO_FPTR(Perl_pp_anonlist),
- MEMBER_TO_FPTR(Perl_pp_anonhash),
- MEMBER_TO_FPTR(Perl_pp_splice),
- MEMBER_TO_FPTR(Perl_pp_push),
- MEMBER_TO_FPTR(Perl_pp_pop),
- MEMBER_TO_FPTR(Perl_pp_shift),
- MEMBER_TO_FPTR(Perl_pp_unshift),
- MEMBER_TO_FPTR(Perl_pp_sort),
- MEMBER_TO_FPTR(Perl_pp_reverse),
- MEMBER_TO_FPTR(Perl_pp_grepstart),
- MEMBER_TO_FPTR(Perl_pp_grepwhile),
- MEMBER_TO_FPTR(Perl_pp_mapstart),
- MEMBER_TO_FPTR(Perl_pp_mapwhile),
- MEMBER_TO_FPTR(Perl_pp_range),
- MEMBER_TO_FPTR(Perl_pp_flip),
- MEMBER_TO_FPTR(Perl_pp_flop),
- MEMBER_TO_FPTR(Perl_pp_and),
- MEMBER_TO_FPTR(Perl_pp_or),
- MEMBER_TO_FPTR(Perl_pp_xor),
- MEMBER_TO_FPTR(Perl_pp_cond_expr),
- MEMBER_TO_FPTR(Perl_pp_andassign),
- MEMBER_TO_FPTR(Perl_pp_orassign),
- MEMBER_TO_FPTR(Perl_pp_method),
- MEMBER_TO_FPTR(Perl_pp_entersub),
- MEMBER_TO_FPTR(Perl_pp_leavesub),
- MEMBER_TO_FPTR(Perl_pp_leavesublv),
- MEMBER_TO_FPTR(Perl_pp_caller),
- MEMBER_TO_FPTR(Perl_pp_warn),
- MEMBER_TO_FPTR(Perl_pp_die),
- MEMBER_TO_FPTR(Perl_pp_reset),
- MEMBER_TO_FPTR(Perl_pp_lineseq),
- MEMBER_TO_FPTR(Perl_pp_nextstate),
- MEMBER_TO_FPTR(Perl_pp_dbstate),
- MEMBER_TO_FPTR(Perl_pp_unstack),
- MEMBER_TO_FPTR(Perl_pp_enter),
- MEMBER_TO_FPTR(Perl_pp_leave),
- MEMBER_TO_FPTR(Perl_pp_scope),
- MEMBER_TO_FPTR(Perl_pp_enteriter),
- MEMBER_TO_FPTR(Perl_pp_iter),
- MEMBER_TO_FPTR(Perl_pp_enterloop),
- MEMBER_TO_FPTR(Perl_pp_leaveloop),
- MEMBER_TO_FPTR(Perl_pp_return),
- MEMBER_TO_FPTR(Perl_pp_last),
- MEMBER_TO_FPTR(Perl_pp_next),
- MEMBER_TO_FPTR(Perl_pp_redo),
- MEMBER_TO_FPTR(Perl_pp_dump),
- MEMBER_TO_FPTR(Perl_pp_goto),
- MEMBER_TO_FPTR(Perl_pp_exit),
- MEMBER_TO_FPTR(Perl_pp_open),
- MEMBER_TO_FPTR(Perl_pp_close),
- MEMBER_TO_FPTR(Perl_pp_pipe_op),
- MEMBER_TO_FPTR(Perl_pp_fileno),
- MEMBER_TO_FPTR(Perl_pp_umask),
- MEMBER_TO_FPTR(Perl_pp_binmode),
- MEMBER_TO_FPTR(Perl_pp_tie),
- MEMBER_TO_FPTR(Perl_pp_untie),
- MEMBER_TO_FPTR(Perl_pp_tied),
- MEMBER_TO_FPTR(Perl_pp_dbmopen),
- MEMBER_TO_FPTR(Perl_pp_dbmclose),
- MEMBER_TO_FPTR(Perl_pp_sselect),
- MEMBER_TO_FPTR(Perl_pp_select),
- MEMBER_TO_FPTR(Perl_pp_getc),
- MEMBER_TO_FPTR(Perl_pp_read),
- MEMBER_TO_FPTR(Perl_pp_enterwrite),
- MEMBER_TO_FPTR(Perl_pp_leavewrite),
- MEMBER_TO_FPTR(Perl_pp_prtf),
- MEMBER_TO_FPTR(Perl_pp_print),
- MEMBER_TO_FPTR(Perl_pp_sysopen),
- MEMBER_TO_FPTR(Perl_pp_sysseek),
- MEMBER_TO_FPTR(Perl_pp_sysread),
- MEMBER_TO_FPTR(Perl_pp_syswrite),
- MEMBER_TO_FPTR(Perl_pp_send),
- MEMBER_TO_FPTR(Perl_pp_recv),
- MEMBER_TO_FPTR(Perl_pp_eof),
- MEMBER_TO_FPTR(Perl_pp_tell),
- MEMBER_TO_FPTR(Perl_pp_seek),
- MEMBER_TO_FPTR(Perl_pp_truncate),
- MEMBER_TO_FPTR(Perl_pp_fcntl),
- MEMBER_TO_FPTR(Perl_pp_ioctl),
- MEMBER_TO_FPTR(Perl_pp_flock),
- MEMBER_TO_FPTR(Perl_pp_socket),
- MEMBER_TO_FPTR(Perl_pp_sockpair),
- MEMBER_TO_FPTR(Perl_pp_bind),
- MEMBER_TO_FPTR(Perl_pp_connect),
- MEMBER_TO_FPTR(Perl_pp_listen),
- MEMBER_TO_FPTR(Perl_pp_accept),
- MEMBER_TO_FPTR(Perl_pp_shutdown),
- MEMBER_TO_FPTR(Perl_pp_gsockopt),
- MEMBER_TO_FPTR(Perl_pp_ssockopt),
- MEMBER_TO_FPTR(Perl_pp_getsockname),
- MEMBER_TO_FPTR(Perl_pp_getpeername),
- MEMBER_TO_FPTR(Perl_pp_lstat),
- MEMBER_TO_FPTR(Perl_pp_stat),
- MEMBER_TO_FPTR(Perl_pp_ftrread),
- MEMBER_TO_FPTR(Perl_pp_ftrwrite),
- MEMBER_TO_FPTR(Perl_pp_ftrexec),
- MEMBER_TO_FPTR(Perl_pp_fteread),
- MEMBER_TO_FPTR(Perl_pp_ftewrite),
- MEMBER_TO_FPTR(Perl_pp_fteexec),
- MEMBER_TO_FPTR(Perl_pp_ftis),
- MEMBER_TO_FPTR(Perl_pp_fteowned),
- MEMBER_TO_FPTR(Perl_pp_ftrowned),
- MEMBER_TO_FPTR(Perl_pp_ftzero),
- MEMBER_TO_FPTR(Perl_pp_ftsize),
- MEMBER_TO_FPTR(Perl_pp_ftmtime),
- MEMBER_TO_FPTR(Perl_pp_ftatime),
- MEMBER_TO_FPTR(Perl_pp_ftctime),
- MEMBER_TO_FPTR(Perl_pp_ftsock),
- MEMBER_TO_FPTR(Perl_pp_ftchr),
- MEMBER_TO_FPTR(Perl_pp_ftblk),
- MEMBER_TO_FPTR(Perl_pp_ftfile),
- MEMBER_TO_FPTR(Perl_pp_ftdir),
- MEMBER_TO_FPTR(Perl_pp_ftpipe),
- MEMBER_TO_FPTR(Perl_pp_ftlink),
- MEMBER_TO_FPTR(Perl_pp_ftsuid),
- MEMBER_TO_FPTR(Perl_pp_ftsgid),
- MEMBER_TO_FPTR(Perl_pp_ftsvtx),
- MEMBER_TO_FPTR(Perl_pp_fttty),
- MEMBER_TO_FPTR(Perl_pp_fttext),
- MEMBER_TO_FPTR(Perl_pp_ftbinary),
- MEMBER_TO_FPTR(Perl_pp_chdir),
- MEMBER_TO_FPTR(Perl_pp_chown),
- MEMBER_TO_FPTR(Perl_pp_chroot),
- MEMBER_TO_FPTR(Perl_pp_unlink),
- MEMBER_TO_FPTR(Perl_pp_chmod),
- MEMBER_TO_FPTR(Perl_pp_utime),
- MEMBER_TO_FPTR(Perl_pp_rename),
- MEMBER_TO_FPTR(Perl_pp_link),
- MEMBER_TO_FPTR(Perl_pp_symlink),
- MEMBER_TO_FPTR(Perl_pp_readlink),
- MEMBER_TO_FPTR(Perl_pp_mkdir),
- MEMBER_TO_FPTR(Perl_pp_rmdir),
- MEMBER_TO_FPTR(Perl_pp_open_dir),
- MEMBER_TO_FPTR(Perl_pp_readdir),
- MEMBER_TO_FPTR(Perl_pp_telldir),
- MEMBER_TO_FPTR(Perl_pp_seekdir),
- MEMBER_TO_FPTR(Perl_pp_rewinddir),
- MEMBER_TO_FPTR(Perl_pp_closedir),
- MEMBER_TO_FPTR(Perl_pp_fork),
- MEMBER_TO_FPTR(Perl_pp_wait),
- MEMBER_TO_FPTR(Perl_pp_waitpid),
- MEMBER_TO_FPTR(Perl_pp_system),
- MEMBER_TO_FPTR(Perl_pp_exec),
- MEMBER_TO_FPTR(Perl_pp_kill),
- MEMBER_TO_FPTR(Perl_pp_getppid),
- MEMBER_TO_FPTR(Perl_pp_getpgrp),
- MEMBER_TO_FPTR(Perl_pp_setpgrp),
- MEMBER_TO_FPTR(Perl_pp_getpriority),
- MEMBER_TO_FPTR(Perl_pp_setpriority),
- MEMBER_TO_FPTR(Perl_pp_time),
- MEMBER_TO_FPTR(Perl_pp_tms),
- MEMBER_TO_FPTR(Perl_pp_localtime),
- MEMBER_TO_FPTR(Perl_pp_gmtime),
- MEMBER_TO_FPTR(Perl_pp_alarm),
- MEMBER_TO_FPTR(Perl_pp_sleep),
- MEMBER_TO_FPTR(Perl_pp_shmget),
- MEMBER_TO_FPTR(Perl_pp_shmctl),
- MEMBER_TO_FPTR(Perl_pp_shmread),
- MEMBER_TO_FPTR(Perl_pp_shmwrite),
- MEMBER_TO_FPTR(Perl_pp_msgget),
- MEMBER_TO_FPTR(Perl_pp_msgctl),
- MEMBER_TO_FPTR(Perl_pp_msgsnd),
- MEMBER_TO_FPTR(Perl_pp_msgrcv),
- MEMBER_TO_FPTR(Perl_pp_semget),
- MEMBER_TO_FPTR(Perl_pp_semctl),
- MEMBER_TO_FPTR(Perl_pp_semop),
- MEMBER_TO_FPTR(Perl_pp_require),
- MEMBER_TO_FPTR(Perl_pp_dofile),
- MEMBER_TO_FPTR(Perl_pp_entereval),
- MEMBER_TO_FPTR(Perl_pp_leaveeval),
- MEMBER_TO_FPTR(Perl_pp_entertry),
- MEMBER_TO_FPTR(Perl_pp_leavetry),
- MEMBER_TO_FPTR(Perl_pp_ghbyname),
- MEMBER_TO_FPTR(Perl_pp_ghbyaddr),
- MEMBER_TO_FPTR(Perl_pp_ghostent),
- MEMBER_TO_FPTR(Perl_pp_gnbyname),
- MEMBER_TO_FPTR(Perl_pp_gnbyaddr),
- MEMBER_TO_FPTR(Perl_pp_gnetent),
- MEMBER_TO_FPTR(Perl_pp_gpbyname),
- MEMBER_TO_FPTR(Perl_pp_gpbynumber),
- MEMBER_TO_FPTR(Perl_pp_gprotoent),
- MEMBER_TO_FPTR(Perl_pp_gsbyname),
- MEMBER_TO_FPTR(Perl_pp_gsbyport),
- MEMBER_TO_FPTR(Perl_pp_gservent),
- MEMBER_TO_FPTR(Perl_pp_shostent),
- MEMBER_TO_FPTR(Perl_pp_snetent),
- MEMBER_TO_FPTR(Perl_pp_sprotoent),
- MEMBER_TO_FPTR(Perl_pp_sservent),
- MEMBER_TO_FPTR(Perl_pp_ehostent),
- MEMBER_TO_FPTR(Perl_pp_enetent),
- MEMBER_TO_FPTR(Perl_pp_eprotoent),
- MEMBER_TO_FPTR(Perl_pp_eservent),
- MEMBER_TO_FPTR(Perl_pp_gpwnam),
- MEMBER_TO_FPTR(Perl_pp_gpwuid),
- MEMBER_TO_FPTR(Perl_pp_gpwent),
- MEMBER_TO_FPTR(Perl_pp_spwent),
- MEMBER_TO_FPTR(Perl_pp_epwent),
- MEMBER_TO_FPTR(Perl_pp_ggrnam),
- MEMBER_TO_FPTR(Perl_pp_ggrgid),
- MEMBER_TO_FPTR(Perl_pp_ggrent),
- MEMBER_TO_FPTR(Perl_pp_sgrent),
- MEMBER_TO_FPTR(Perl_pp_egrent),
- MEMBER_TO_FPTR(Perl_pp_getlogin),
- MEMBER_TO_FPTR(Perl_pp_syscall),
- MEMBER_TO_FPTR(Perl_pp_lock),
- MEMBER_TO_FPTR(Perl_pp_threadsv),
- MEMBER_TO_FPTR(Perl_pp_setstate),
- MEMBER_TO_FPTR(Perl_pp_method_named),
-};
-#endif
-
-#ifndef DOINIT
-EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op);
-#else
-EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op) = {
- MEMBER_TO_FPTR(Perl_ck_null), /* null */
- MEMBER_TO_FPTR(Perl_ck_null), /* stub */
- MEMBER_TO_FPTR(Perl_ck_fun), /* scalar */
- MEMBER_TO_FPTR(Perl_ck_null), /* pushmark */
- MEMBER_TO_FPTR(Perl_ck_null), /* wantarray */
- MEMBER_TO_FPTR(Perl_ck_svconst), /* const */
- MEMBER_TO_FPTR(Perl_ck_null), /* gvsv */
- MEMBER_TO_FPTR(Perl_ck_null), /* gv */
- MEMBER_TO_FPTR(Perl_ck_null), /* gelem */
- MEMBER_TO_FPTR(Perl_ck_null), /* padsv */
- MEMBER_TO_FPTR(Perl_ck_null), /* padav */
- MEMBER_TO_FPTR(Perl_ck_null), /* padhv */
- MEMBER_TO_FPTR(Perl_ck_null), /* padany */
- MEMBER_TO_FPTR(Perl_ck_null), /* pushre */
- MEMBER_TO_FPTR(Perl_ck_rvconst), /* rv2gv */
- MEMBER_TO_FPTR(Perl_ck_rvconst), /* rv2sv */
- MEMBER_TO_FPTR(Perl_ck_null), /* av2arylen */
- MEMBER_TO_FPTR(Perl_ck_rvconst), /* rv2cv */
- MEMBER_TO_FPTR(Perl_ck_anoncode), /* anoncode */
- MEMBER_TO_FPTR(Perl_ck_null), /* prototype */
- MEMBER_TO_FPTR(Perl_ck_spair), /* refgen */
- MEMBER_TO_FPTR(Perl_ck_null), /* srefgen */
- MEMBER_TO_FPTR(Perl_ck_fun), /* ref */
- MEMBER_TO_FPTR(Perl_ck_fun), /* bless */
- MEMBER_TO_FPTR(Perl_ck_open), /* backtick */
- MEMBER_TO_FPTR(Perl_ck_glob), /* glob */
- MEMBER_TO_FPTR(Perl_ck_null), /* readline */
- MEMBER_TO_FPTR(Perl_ck_null), /* rcatline */
- MEMBER_TO_FPTR(Perl_ck_fun), /* regcmaybe */
- MEMBER_TO_FPTR(Perl_ck_fun), /* regcreset */
- MEMBER_TO_FPTR(Perl_ck_null), /* regcomp */
- MEMBER_TO_FPTR(Perl_ck_match), /* match */
- MEMBER_TO_FPTR(Perl_ck_match), /* qr */
- MEMBER_TO_FPTR(Perl_ck_null), /* subst */
- MEMBER_TO_FPTR(Perl_ck_null), /* substcont */
- MEMBER_TO_FPTR(Perl_ck_null), /* trans */
- MEMBER_TO_FPTR(Perl_ck_sassign), /* sassign */
- MEMBER_TO_FPTR(Perl_ck_null), /* aassign */
- MEMBER_TO_FPTR(Perl_ck_spair), /* chop */
- MEMBER_TO_FPTR(Perl_ck_null), /* schop */
- MEMBER_TO_FPTR(Perl_ck_spair), /* chomp */
- MEMBER_TO_FPTR(Perl_ck_null), /* schomp */
- MEMBER_TO_FPTR(Perl_ck_defined), /* defined */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* undef */
- MEMBER_TO_FPTR(Perl_ck_fun), /* study */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* pos */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* preinc */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* i_preinc */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* predec */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* i_predec */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* postinc */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* i_postinc */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* postdec */
- MEMBER_TO_FPTR(Perl_ck_lfun), /* i_postdec */
- MEMBER_TO_FPTR(Perl_ck_null), /* pow */
- MEMBER_TO_FPTR(Perl_ck_null), /* multiply */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_multiply */
- MEMBER_TO_FPTR(Perl_ck_null), /* divide */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_divide */
- MEMBER_TO_FPTR(Perl_ck_null), /* modulo */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_modulo */
- MEMBER_TO_FPTR(Perl_ck_repeat), /* repeat */
- MEMBER_TO_FPTR(Perl_ck_null), /* add */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_add */
- MEMBER_TO_FPTR(Perl_ck_null), /* subtract */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_subtract */
- MEMBER_TO_FPTR(Perl_ck_concat), /* concat */
- MEMBER_TO_FPTR(Perl_ck_fun), /* stringify */
- MEMBER_TO_FPTR(Perl_ck_bitop), /* left_shift */
- MEMBER_TO_FPTR(Perl_ck_bitop), /* right_shift */
- MEMBER_TO_FPTR(Perl_ck_null), /* lt */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_lt */
- MEMBER_TO_FPTR(Perl_ck_null), /* gt */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_gt */
- MEMBER_TO_FPTR(Perl_ck_null), /* le */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_le */
- MEMBER_TO_FPTR(Perl_ck_null), /* ge */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_ge */
- MEMBER_TO_FPTR(Perl_ck_null), /* eq */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_eq */
- MEMBER_TO_FPTR(Perl_ck_null), /* ne */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_ne */
- MEMBER_TO_FPTR(Perl_ck_null), /* ncmp */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_ncmp */
- MEMBER_TO_FPTR(Perl_ck_scmp), /* slt */
- MEMBER_TO_FPTR(Perl_ck_scmp), /* sgt */
- MEMBER_TO_FPTR(Perl_ck_scmp), /* sle */
- MEMBER_TO_FPTR(Perl_ck_scmp), /* sge */
- MEMBER_TO_FPTR(Perl_ck_null), /* seq */
- MEMBER_TO_FPTR(Perl_ck_null), /* sne */
- MEMBER_TO_FPTR(Perl_ck_scmp), /* scmp */
- MEMBER_TO_FPTR(Perl_ck_bitop), /* bit_and */
- MEMBER_TO_FPTR(Perl_ck_bitop), /* bit_xor */
- MEMBER_TO_FPTR(Perl_ck_bitop), /* bit_or */
- MEMBER_TO_FPTR(Perl_ck_null), /* negate */
- MEMBER_TO_FPTR(Perl_ck_null), /* i_negate */
- MEMBER_TO_FPTR(Perl_ck_null), /* not */
- MEMBER_TO_FPTR(Perl_ck_bitop), /* complement */
- MEMBER_TO_FPTR(Perl_ck_fun), /* atan2 */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sin */
- MEMBER_TO_FPTR(Perl_ck_fun), /* cos */
- MEMBER_TO_FPTR(Perl_ck_fun), /* rand */
- MEMBER_TO_FPTR(Perl_ck_fun), /* srand */
- MEMBER_TO_FPTR(Perl_ck_fun), /* exp */
- MEMBER_TO_FPTR(Perl_ck_fun), /* log */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sqrt */
- MEMBER_TO_FPTR(Perl_ck_fun), /* int */
- MEMBER_TO_FPTR(Perl_ck_fun), /* hex */
- MEMBER_TO_FPTR(Perl_ck_fun), /* oct */
- MEMBER_TO_FPTR(Perl_ck_fun), /* abs */
- MEMBER_TO_FPTR(Perl_ck_lengthconst), /* length */
- MEMBER_TO_FPTR(Perl_ck_substr), /* substr */
- MEMBER_TO_FPTR(Perl_ck_fun), /* vec */
- MEMBER_TO_FPTR(Perl_ck_index), /* index */
- MEMBER_TO_FPTR(Perl_ck_index), /* rindex */
- MEMBER_TO_FPTR(Perl_ck_fun_locale), /* sprintf */
- MEMBER_TO_FPTR(Perl_ck_fun), /* formline */
- MEMBER_TO_FPTR(Perl_ck_fun), /* ord */
- MEMBER_TO_FPTR(Perl_ck_fun), /* chr */
- MEMBER_TO_FPTR(Perl_ck_fun), /* crypt */
- MEMBER_TO_FPTR(Perl_ck_fun_locale), /* ucfirst */
- MEMBER_TO_FPTR(Perl_ck_fun_locale), /* lcfirst */
- MEMBER_TO_FPTR(Perl_ck_fun_locale), /* uc */
- MEMBER_TO_FPTR(Perl_ck_fun_locale), /* lc */
- MEMBER_TO_FPTR(Perl_ck_fun), /* quotemeta */
- MEMBER_TO_FPTR(Perl_ck_rvconst), /* rv2av */
- MEMBER_TO_FPTR(Perl_ck_null), /* aelemfast */
- MEMBER_TO_FPTR(Perl_ck_null), /* aelem */
- MEMBER_TO_FPTR(Perl_ck_null), /* aslice */
- MEMBER_TO_FPTR(Perl_ck_fun), /* each */
- MEMBER_TO_FPTR(Perl_ck_fun), /* values */
- MEMBER_TO_FPTR(Perl_ck_fun), /* keys */
- MEMBER_TO_FPTR(Perl_ck_delete), /* delete */
- MEMBER_TO_FPTR(Perl_ck_exists), /* exists */
- MEMBER_TO_FPTR(Perl_ck_rvconst), /* rv2hv */
- MEMBER_TO_FPTR(Perl_ck_null), /* helem */
- MEMBER_TO_FPTR(Perl_ck_null), /* hslice */
- MEMBER_TO_FPTR(Perl_ck_fun), /* unpack */
- MEMBER_TO_FPTR(Perl_ck_fun), /* pack */
- MEMBER_TO_FPTR(Perl_ck_split), /* split */
- MEMBER_TO_FPTR(Perl_ck_join), /* join */
- MEMBER_TO_FPTR(Perl_ck_null), /* list */
- MEMBER_TO_FPTR(Perl_ck_null), /* lslice */
- MEMBER_TO_FPTR(Perl_ck_fun), /* anonlist */
- MEMBER_TO_FPTR(Perl_ck_fun), /* anonhash */
- MEMBER_TO_FPTR(Perl_ck_fun), /* splice */
- MEMBER_TO_FPTR(Perl_ck_fun), /* push */
- MEMBER_TO_FPTR(Perl_ck_shift), /* pop */
- MEMBER_TO_FPTR(Perl_ck_shift), /* shift */
- MEMBER_TO_FPTR(Perl_ck_fun), /* unshift */
- MEMBER_TO_FPTR(Perl_ck_sort), /* sort */
- MEMBER_TO_FPTR(Perl_ck_fun), /* reverse */
- MEMBER_TO_FPTR(Perl_ck_grep), /* grepstart */
- MEMBER_TO_FPTR(Perl_ck_null), /* grepwhile */
- MEMBER_TO_FPTR(Perl_ck_grep), /* mapstart */
- MEMBER_TO_FPTR(Perl_ck_null), /* mapwhile */
- MEMBER_TO_FPTR(Perl_ck_null), /* range */
- MEMBER_TO_FPTR(Perl_ck_null), /* flip */
- MEMBER_TO_FPTR(Perl_ck_null), /* flop */
- MEMBER_TO_FPTR(Perl_ck_null), /* and */
- MEMBER_TO_FPTR(Perl_ck_null), /* or */
- MEMBER_TO_FPTR(Perl_ck_null), /* xor */
- MEMBER_TO_FPTR(Perl_ck_null), /* cond_expr */
- MEMBER_TO_FPTR(Perl_ck_null), /* andassign */
- MEMBER_TO_FPTR(Perl_ck_null), /* orassign */
- MEMBER_TO_FPTR(Perl_ck_method), /* method */
- MEMBER_TO_FPTR(Perl_ck_subr), /* entersub */
- MEMBER_TO_FPTR(Perl_ck_null), /* leavesub */
- MEMBER_TO_FPTR(Perl_ck_null), /* leavesublv */
- MEMBER_TO_FPTR(Perl_ck_fun), /* caller */
- MEMBER_TO_FPTR(Perl_ck_fun), /* warn */
- MEMBER_TO_FPTR(Perl_ck_fun), /* die */
- MEMBER_TO_FPTR(Perl_ck_fun), /* reset */
- MEMBER_TO_FPTR(Perl_ck_null), /* lineseq */
- MEMBER_TO_FPTR(Perl_ck_null), /* nextstate */
- MEMBER_TO_FPTR(Perl_ck_null), /* dbstate */
- MEMBER_TO_FPTR(Perl_ck_null), /* unstack */
- MEMBER_TO_FPTR(Perl_ck_null), /* enter */
- MEMBER_TO_FPTR(Perl_ck_null), /* leave */
- MEMBER_TO_FPTR(Perl_ck_null), /* scope */
- MEMBER_TO_FPTR(Perl_ck_null), /* enteriter */
- MEMBER_TO_FPTR(Perl_ck_null), /* iter */
- MEMBER_TO_FPTR(Perl_ck_null), /* enterloop */
- MEMBER_TO_FPTR(Perl_ck_null), /* leaveloop */
- MEMBER_TO_FPTR(Perl_ck_return), /* return */
- MEMBER_TO_FPTR(Perl_ck_null), /* last */
- MEMBER_TO_FPTR(Perl_ck_null), /* next */
- MEMBER_TO_FPTR(Perl_ck_null), /* redo */
- MEMBER_TO_FPTR(Perl_ck_null), /* dump */
- MEMBER_TO_FPTR(Perl_ck_null), /* goto */
- MEMBER_TO_FPTR(Perl_ck_exit), /* exit */
- MEMBER_TO_FPTR(Perl_ck_open), /* open */
- MEMBER_TO_FPTR(Perl_ck_fun), /* close */
- MEMBER_TO_FPTR(Perl_ck_fun), /* pipe_op */
- MEMBER_TO_FPTR(Perl_ck_fun), /* fileno */
- MEMBER_TO_FPTR(Perl_ck_fun), /* umask */
- MEMBER_TO_FPTR(Perl_ck_fun), /* binmode */
- MEMBER_TO_FPTR(Perl_ck_fun), /* tie */
- MEMBER_TO_FPTR(Perl_ck_fun), /* untie */
- MEMBER_TO_FPTR(Perl_ck_fun), /* tied */
- MEMBER_TO_FPTR(Perl_ck_fun), /* dbmopen */
- MEMBER_TO_FPTR(Perl_ck_fun), /* dbmclose */
- MEMBER_TO_FPTR(Perl_ck_select), /* sselect */
- MEMBER_TO_FPTR(Perl_ck_select), /* select */
- MEMBER_TO_FPTR(Perl_ck_eof), /* getc */
- MEMBER_TO_FPTR(Perl_ck_fun), /* read */
- MEMBER_TO_FPTR(Perl_ck_fun), /* enterwrite */
- MEMBER_TO_FPTR(Perl_ck_null), /* leavewrite */
- MEMBER_TO_FPTR(Perl_ck_listiob), /* prtf */
- MEMBER_TO_FPTR(Perl_ck_listiob), /* print */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sysopen */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sysseek */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sysread */
- MEMBER_TO_FPTR(Perl_ck_fun), /* syswrite */
- MEMBER_TO_FPTR(Perl_ck_fun), /* send */
- MEMBER_TO_FPTR(Perl_ck_fun), /* recv */
- MEMBER_TO_FPTR(Perl_ck_eof), /* eof */
- MEMBER_TO_FPTR(Perl_ck_fun), /* tell */
- MEMBER_TO_FPTR(Perl_ck_fun), /* seek */
- MEMBER_TO_FPTR(Perl_ck_trunc), /* truncate */
- MEMBER_TO_FPTR(Perl_ck_fun), /* fcntl */
- MEMBER_TO_FPTR(Perl_ck_fun), /* ioctl */
- MEMBER_TO_FPTR(Perl_ck_fun), /* flock */
- MEMBER_TO_FPTR(Perl_ck_fun), /* socket */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sockpair */
- MEMBER_TO_FPTR(Perl_ck_fun), /* bind */
- MEMBER_TO_FPTR(Perl_ck_fun), /* connect */
- MEMBER_TO_FPTR(Perl_ck_fun), /* listen */
- MEMBER_TO_FPTR(Perl_ck_fun), /* accept */
- MEMBER_TO_FPTR(Perl_ck_fun), /* shutdown */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gsockopt */
- MEMBER_TO_FPTR(Perl_ck_fun), /* ssockopt */
- MEMBER_TO_FPTR(Perl_ck_fun), /* getsockname */
- MEMBER_TO_FPTR(Perl_ck_fun), /* getpeername */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* lstat */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* stat */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftrread */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftrwrite */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftrexec */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* fteread */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftewrite */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* fteexec */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftis */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* fteowned */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftrowned */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftzero */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftsize */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftmtime */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftatime */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftctime */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftsock */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftchr */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftblk */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftfile */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftdir */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftpipe */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftlink */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftsuid */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftsgid */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftsvtx */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* fttty */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* fttext */
- MEMBER_TO_FPTR(Perl_ck_ftst), /* ftbinary */
- MEMBER_TO_FPTR(Perl_ck_fun), /* chdir */
- MEMBER_TO_FPTR(Perl_ck_fun), /* chown */
- MEMBER_TO_FPTR(Perl_ck_fun), /* chroot */
- MEMBER_TO_FPTR(Perl_ck_fun), /* unlink */
- MEMBER_TO_FPTR(Perl_ck_fun), /* chmod */
- MEMBER_TO_FPTR(Perl_ck_fun), /* utime */
- MEMBER_TO_FPTR(Perl_ck_fun), /* rename */
- MEMBER_TO_FPTR(Perl_ck_fun), /* link */
- MEMBER_TO_FPTR(Perl_ck_fun), /* symlink */
- MEMBER_TO_FPTR(Perl_ck_fun), /* readlink */
- MEMBER_TO_FPTR(Perl_ck_fun), /* mkdir */
- MEMBER_TO_FPTR(Perl_ck_fun), /* rmdir */
- MEMBER_TO_FPTR(Perl_ck_fun), /* open_dir */
- MEMBER_TO_FPTR(Perl_ck_fun), /* readdir */
- MEMBER_TO_FPTR(Perl_ck_fun), /* telldir */
- MEMBER_TO_FPTR(Perl_ck_fun), /* seekdir */
- MEMBER_TO_FPTR(Perl_ck_fun), /* rewinddir */
- MEMBER_TO_FPTR(Perl_ck_fun), /* closedir */
- MEMBER_TO_FPTR(Perl_ck_null), /* fork */
- MEMBER_TO_FPTR(Perl_ck_null), /* wait */
- MEMBER_TO_FPTR(Perl_ck_fun), /* waitpid */
- MEMBER_TO_FPTR(Perl_ck_exec), /* system */
- MEMBER_TO_FPTR(Perl_ck_exec), /* exec */
- MEMBER_TO_FPTR(Perl_ck_fun), /* kill */
- MEMBER_TO_FPTR(Perl_ck_null), /* getppid */
- MEMBER_TO_FPTR(Perl_ck_fun), /* getpgrp */
- MEMBER_TO_FPTR(Perl_ck_fun), /* setpgrp */
- MEMBER_TO_FPTR(Perl_ck_fun), /* getpriority */
- MEMBER_TO_FPTR(Perl_ck_fun), /* setpriority */
- MEMBER_TO_FPTR(Perl_ck_null), /* time */
- MEMBER_TO_FPTR(Perl_ck_null), /* tms */
- MEMBER_TO_FPTR(Perl_ck_fun), /* localtime */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gmtime */
- MEMBER_TO_FPTR(Perl_ck_fun), /* alarm */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sleep */
- MEMBER_TO_FPTR(Perl_ck_fun), /* shmget */
- MEMBER_TO_FPTR(Perl_ck_fun), /* shmctl */
- MEMBER_TO_FPTR(Perl_ck_fun), /* shmread */
- MEMBER_TO_FPTR(Perl_ck_fun), /* shmwrite */
- MEMBER_TO_FPTR(Perl_ck_fun), /* msgget */
- MEMBER_TO_FPTR(Perl_ck_fun), /* msgctl */
- MEMBER_TO_FPTR(Perl_ck_fun), /* msgsnd */
- MEMBER_TO_FPTR(Perl_ck_fun), /* msgrcv */
- MEMBER_TO_FPTR(Perl_ck_fun), /* semget */
- MEMBER_TO_FPTR(Perl_ck_fun), /* semctl */
- MEMBER_TO_FPTR(Perl_ck_fun), /* semop */
- MEMBER_TO_FPTR(Perl_ck_require), /* require */
- MEMBER_TO_FPTR(Perl_ck_fun), /* dofile */
- MEMBER_TO_FPTR(Perl_ck_eval), /* entereval */
- MEMBER_TO_FPTR(Perl_ck_null), /* leaveeval */
- MEMBER_TO_FPTR(Perl_ck_null), /* entertry */
- MEMBER_TO_FPTR(Perl_ck_null), /* leavetry */
- MEMBER_TO_FPTR(Perl_ck_fun), /* ghbyname */
- MEMBER_TO_FPTR(Perl_ck_fun), /* ghbyaddr */
- MEMBER_TO_FPTR(Perl_ck_null), /* ghostent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gnbyname */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gnbyaddr */
- MEMBER_TO_FPTR(Perl_ck_null), /* gnetent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gpbyname */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gpbynumber */
- MEMBER_TO_FPTR(Perl_ck_null), /* gprotoent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gsbyname */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gsbyport */
- MEMBER_TO_FPTR(Perl_ck_null), /* gservent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* shostent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* snetent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sprotoent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* sservent */
- MEMBER_TO_FPTR(Perl_ck_null), /* ehostent */
- MEMBER_TO_FPTR(Perl_ck_null), /* enetent */
- MEMBER_TO_FPTR(Perl_ck_null), /* eprotoent */
- MEMBER_TO_FPTR(Perl_ck_null), /* eservent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gpwnam */
- MEMBER_TO_FPTR(Perl_ck_fun), /* gpwuid */
- MEMBER_TO_FPTR(Perl_ck_null), /* gpwent */
- MEMBER_TO_FPTR(Perl_ck_null), /* spwent */
- MEMBER_TO_FPTR(Perl_ck_null), /* epwent */
- MEMBER_TO_FPTR(Perl_ck_fun), /* ggrnam */
- MEMBER_TO_FPTR(Perl_ck_fun), /* ggrgid */
- MEMBER_TO_FPTR(Perl_ck_null), /* ggrent */
- MEMBER_TO_FPTR(Perl_ck_null), /* sgrent */
- MEMBER_TO_FPTR(Perl_ck_null), /* egrent */
- MEMBER_TO_FPTR(Perl_ck_null), /* getlogin */
- MEMBER_TO_FPTR(Perl_ck_fun), /* syscall */
- MEMBER_TO_FPTR(Perl_ck_rfun), /* lock */
- MEMBER_TO_FPTR(Perl_ck_null), /* threadsv */
- MEMBER_TO_FPTR(Perl_ck_null), /* setstate */
- MEMBER_TO_FPTR(Perl_ck_null), /* method_named */
-};
-#endif
-
-#ifndef DOINIT
-EXT U32 PL_opargs[];
-#else
-EXT U32 PL_opargs[] = {
- 0x00000000, /* null */
- 0x00000000, /* stub */
- 0x00003604, /* scalar */
- 0x00000004, /* pushmark */
- 0x00000014, /* wantarray */
- 0x00000c04, /* const */
- 0x00000c44, /* gvsv */
- 0x00000c44, /* gv */
- 0x00022440, /* gelem */
- 0x00000044, /* padsv */
- 0x00000040, /* padav */
- 0x00000040, /* padhv */
- 0x00000040, /* padany */
- 0x00000a40, /* pushre */
- 0x00000244, /* rv2gv */
- 0x00000244, /* rv2sv */
- 0x00000214, /* av2arylen */
- 0x00000240, /* rv2cv */
- 0x00000c00, /* anoncode */
- 0x00003604, /* prototype */
- 0x00004201, /* refgen */
- 0x00002206, /* srefgen */
- 0x0001368c, /* ref */
- 0x00122804, /* bless */
- 0x00001608, /* backtick */
- 0x00012808, /* glob */
- 0x00001608, /* readline */
- 0x00001608, /* rcatline */
- 0x00002204, /* regcmaybe */
- 0x00002204, /* regcreset */
- 0x00002604, /* regcomp */
- 0x00000a40, /* match */
- 0x00000a04, /* qr */
- 0x00002a54, /* subst */
- 0x00000654, /* substcont */
- 0x00003014, /* trans */
- 0x00000004, /* sassign */
- 0x00044408, /* aassign */
- 0x0000560d, /* chop */
- 0x0001368c, /* schop */
- 0x0000570d, /* chomp */
- 0x0001378c, /* schomp */
- 0x00013694, /* defined */
- 0x00013604, /* undef */
- 0x00013684, /* study */
- 0x0001368c, /* pos */
- 0x00002264, /* preinc */
- 0x00002254, /* i_preinc */
- 0x00002264, /* predec */
- 0x00002254, /* i_predec */
- 0x0000226c, /* postinc */
- 0x0000235c, /* i_postinc */
- 0x0000226c, /* postdec */
- 0x0000235c, /* i_postdec */
- 0x0002250e, /* pow */
- 0x0002252e, /* multiply */
- 0x0002251e, /* i_multiply */
- 0x0002252e, /* divide */
- 0x0002251e, /* i_divide */
- 0x0002253e, /* modulo */
- 0x0002251e, /* i_modulo */
- 0x00024409, /* repeat */
- 0x0002252e, /* add */
- 0x0002251e, /* i_add */
- 0x0002252e, /* subtract */
- 0x0002251e, /* i_subtract */
- 0x0002250e, /* concat */
- 0x0000290e, /* stringify */
- 0x0002250e, /* left_shift */
- 0x0002250e, /* right_shift */
- 0x00022436, /* lt */
- 0x00022416, /* i_lt */
- 0x00022436, /* gt */
- 0x00022416, /* i_gt */
- 0x00022436, /* le */
- 0x00022416, /* i_le */
- 0x00022436, /* ge */
- 0x00022416, /* i_ge */
- 0x00022436, /* eq */
- 0x00022416, /* i_eq */
- 0x00022436, /* ne */
- 0x00022416, /* i_ne */
- 0x0002243e, /* ncmp */
- 0x0002241e, /* i_ncmp */
- 0x00022416, /* slt */
- 0x00022416, /* sgt */
- 0x00022416, /* sle */
- 0x00022416, /* sge */
- 0x00022416, /* seq */
- 0x00022416, /* sne */
- 0x0002241e, /* scmp */
- 0x0002240e, /* bit_and */
- 0x0002240e, /* bit_xor */
- 0x0002240e, /* bit_or */
- 0x0000222e, /* negate */
- 0x0000231e, /* i_negate */
- 0x00002216, /* not */
- 0x0000220e, /* complement */
- 0x0002290e, /* atan2 */
- 0x0001378e, /* sin */
- 0x0001378e, /* cos */
- 0x0001370c, /* rand */
- 0x00013604, /* srand */
- 0x0001378e, /* exp */
- 0x0001378e, /* log */
- 0x0001378e, /* sqrt */
- 0x0001378e, /* int */
- 0x0001378e, /* hex */
- 0x0001378e, /* oct */
- 0x0001378e, /* abs */
- 0x0001379c, /* length */
- 0x1322280c, /* substr */
- 0x0022281c, /* vec */
- 0x0122291c, /* index */
- 0x0122291c, /* rindex */
- 0x0004280f, /* sprintf */
- 0x00042805, /* formline */
- 0x0001379e, /* ord */
- 0x0001378e, /* chr */
- 0x0002290e, /* crypt */
- 0x0001368e, /* ucfirst */
- 0x0001368e, /* lcfirst */
- 0x0001368e, /* uc */
- 0x0001368e, /* lc */
- 0x0001368e, /* quotemeta */
- 0x00000248, /* rv2av */
- 0x00026c04, /* aelemfast */
- 0x00026404, /* aelem */
- 0x00046801, /* aslice */
- 0x00009600, /* each */
- 0x00009608, /* values */
- 0x00009608, /* keys */
- 0x00003600, /* delete */
- 0x00003614, /* exists */
- 0x00000248, /* rv2hv */
- 0x00028404, /* helem */
- 0x00048801, /* hslice */
- 0x00022800, /* unpack */
- 0x0004280d, /* pack */
- 0x00222808, /* split */
- 0x0004280d, /* join */
- 0x00004801, /* list */
- 0x00448400, /* lslice */
- 0x00004805, /* anonlist */
- 0x00004805, /* anonhash */
- 0x05326801, /* splice */
- 0x0004691d, /* push */
- 0x00007604, /* pop */
- 0x00007604, /* shift */
- 0x0004691d, /* unshift */
- 0x0005a801, /* sort */
- 0x00004809, /* reverse */
- 0x0004a841, /* grepstart */
- 0x00000648, /* grepwhile */
- 0x0004a841, /* mapstart */
- 0x00000648, /* mapwhile */
- 0x00022600, /* range */
- 0x00022200, /* flip */
- 0x00000200, /* flop */
- 0x00000600, /* and */
- 0x00000600, /* or */
- 0x00022406, /* xor */
- 0x00000640, /* cond_expr */
- 0x00000604, /* andassign */
- 0x00000604, /* orassign */
- 0x00000240, /* method */
- 0x00004249, /* entersub */
- 0x00000200, /* leavesub */
- 0x00000200, /* leavesublv */
- 0x00013608, /* caller */
- 0x0000481d, /* warn */
- 0x0000485d, /* die */
- 0x00013614, /* reset */
- 0x00000800, /* lineseq */
- 0x00001404, /* nextstate */
- 0x00001404, /* dbstate */
- 0x00000004, /* unstack */
- 0x00000000, /* enter */
- 0x00000800, /* leave */
- 0x00000800, /* scope */
- 0x00001240, /* enteriter */
- 0x00000000, /* iter */
- 0x00001240, /* enterloop */
- 0x00000400, /* leaveloop */
- 0x00004841, /* return */
- 0x00001a44, /* last */
- 0x00001a44, /* next */
- 0x00001a44, /* redo */
- 0x00001a44, /* dump */
- 0x00001a44, /* goto */
- 0x00013644, /* exit */
- 0x0052c81c, /* open */
- 0x0001d614, /* close */
- 0x000cc814, /* pipe_op */
- 0x0000d61c, /* fileno */
- 0x0001361c, /* umask */
- 0x0012c804, /* binmode */
- 0x0042e855, /* tie */
- 0x0000f614, /* untie */
- 0x0000f604, /* tied */
- 0x00228814, /* dbmopen */
- 0x00009614, /* dbmclose */
- 0x02222808, /* sselect */
- 0x0001c80c, /* select */
- 0x0001d60c, /* getc */
- 0x122ec81d, /* read */
- 0x0001d654, /* enterwrite */
- 0x00000200, /* leavewrite */
- 0x0005c815, /* prtf */
- 0x0005c815, /* print */
- 0x1222c804, /* sysopen */
- 0x0022c804, /* sysseek */
- 0x122ec81d, /* sysread */
- 0x1322c81d, /* syswrite */
- 0x1222c81d, /* send */
- 0x022ec81d, /* recv */
- 0x0001d614, /* eof */
- 0x0001d60c, /* tell */
- 0x0022c804, /* seek */
- 0x00022814, /* truncate */
- 0x0022c80c, /* fcntl */
- 0x0022c80c, /* ioctl */
- 0x0002c91c, /* flock */
- 0x0222c814, /* socket */
- 0x222cc814, /* sockpair */
- 0x0002c814, /* bind */
- 0x0002c814, /* connect */
- 0x0002c814, /* listen */
- 0x000cc81c, /* accept */
- 0x0002c81c, /* shutdown */
- 0x0022c814, /* gsockopt */
- 0x0222c814, /* ssockopt */
- 0x0000d614, /* getsockname */
- 0x0000d614, /* getpeername */
- 0x0000d880, /* lstat */
- 0x0000d880, /* stat */
- 0x0000d894, /* ftrread */
- 0x0000d894, /* ftrwrite */
- 0x0000d894, /* ftrexec */
- 0x0000d894, /* fteread */
- 0x0000d894, /* ftewrite */
- 0x0000d894, /* fteexec */
- 0x0000d894, /* ftis */
- 0x0000d894, /* fteowned */
- 0x0000d894, /* ftrowned */
- 0x0000d894, /* ftzero */
- 0x0000d89c, /* ftsize */
- 0x0000d88c, /* ftmtime */
- 0x0000d88c, /* ftatime */
- 0x0000d88c, /* ftctime */
- 0x0000d894, /* ftsock */
- 0x0000d894, /* ftchr */
- 0x0000d894, /* ftblk */
- 0x0000d894, /* ftfile */
- 0x0000d894, /* ftdir */
- 0x0000d894, /* ftpipe */
- 0x0000d894, /* ftlink */
- 0x0000d894, /* ftsuid */
- 0x0000d894, /* ftsgid */
- 0x0000d894, /* ftsvtx */
- 0x0000d814, /* fttty */
- 0x0000d894, /* fttext */
- 0x0000d894, /* ftbinary */
- 0x0001371c, /* chdir */
- 0x0000491d, /* chown */
- 0x0001379c, /* chroot */
- 0x0000499d, /* unlink */
- 0x0000491d, /* chmod */
- 0x0000491d, /* utime */
- 0x0002291c, /* rename */
- 0x0002291c, /* link */
- 0x0002291c, /* symlink */
- 0x0001368c, /* readlink */
- 0x0012291c, /* mkdir */
- 0x0001379c, /* rmdir */
- 0x0002c814, /* open_dir */
- 0x0000d600, /* readdir */
- 0x0000d60c, /* telldir */
- 0x0002c804, /* seekdir */
- 0x0000d604, /* rewinddir */
- 0x0000d614, /* closedir */
- 0x0000001c, /* fork */
- 0x0000011c, /* wait */
- 0x0002291c, /* waitpid */
- 0x0005291d, /* system */
- 0x0005295d, /* exec */
- 0x0000495d, /* kill */
- 0x0000011c, /* getppid */
- 0x0001371c, /* getpgrp */
- 0x0013291c, /* setpgrp */
- 0x0002291c, /* getpriority */
- 0x0022291c, /* setpriority */
- 0x0000011c, /* time */
- 0x00000000, /* tms */
- 0x00013608, /* localtime */
- 0x00013608, /* gmtime */
- 0x0001369c, /* alarm */
- 0x0001371c, /* sleep */
- 0x0022281d, /* shmget */
- 0x0022281d, /* shmctl */
- 0x0222281d, /* shmread */
- 0x0222281d, /* shmwrite */
- 0x0002281d, /* msgget */
- 0x0022281d, /* msgctl */
- 0x0022281d, /* msgsnd */
- 0x2222281d, /* msgrcv */
- 0x0022281d, /* semget */
- 0x0222281d, /* semctl */
- 0x0002281d, /* semop */
- 0x000136c0, /* require */
- 0x00002240, /* dofile */
- 0x00003640, /* entereval */
- 0x00002200, /* leaveeval */
- 0x00000600, /* entertry */
- 0x00000800, /* leavetry */
- 0x00003600, /* ghbyname */
- 0x00022800, /* ghbyaddr */
- 0x00000000, /* ghostent */
- 0x00003600, /* gnbyname */
- 0x00022800, /* gnbyaddr */
- 0x00000000, /* gnetent */
- 0x00003600, /* gpbyname */
- 0x00002800, /* gpbynumber */
- 0x00000000, /* gprotoent */
- 0x00022800, /* gsbyname */
- 0x00022800, /* gsbyport */
- 0x00000000, /* gservent */
- 0x00003614, /* shostent */
- 0x00003614, /* snetent */
- 0x00003614, /* sprotoent */
- 0x00003614, /* sservent */
- 0x00000014, /* ehostent */
- 0x00000014, /* enetent */
- 0x00000014, /* eprotoent */
- 0x00000014, /* eservent */
- 0x00003600, /* gpwnam */
- 0x00003600, /* gpwuid */
- 0x00000000, /* gpwent */
- 0x00000014, /* spwent */
- 0x00000014, /* epwent */
- 0x00003600, /* ggrnam */
- 0x00003600, /* ggrgid */
- 0x00000000, /* ggrent */
- 0x00000014, /* sgrent */
- 0x00000014, /* egrent */
- 0x0000000c, /* getlogin */
- 0x0004281d, /* syscall */
- 0x00003604, /* lock */
- 0x00000044, /* threadsv */
- 0x00001404, /* setstate */
- 0x00000c40, /* method_named */
-};
-#endif
-
-END_EXTERN_C
diff --git a/contrib/perl5/opcode.pl b/contrib/perl5/opcode.pl
deleted file mode 100755
index 82de92f..0000000
--- a/contrib/perl5/opcode.pl
+++ /dev/null
@@ -1,848 +0,0 @@
-#!/usr/bin/perl
-
-chmod 0666, "opcode.h", "opnames.h";
-unlink "opcode.h", "opnames.h";
-open(OC, ">opcode.h") || die "Can't create opcode.h: $!\n";
-open(ON, ">opnames.h") || die "Can't create opnames.h: $!\n";
-select OC;
-
-# Read data.
-
-while (<DATA>) {
- chop;
- next unless $_;
- next if /^#/;
- ($key, $desc, $check, $flags, $args) = split(/\t+/, $_, 5);
-
- warn qq[Description "$desc" duplicates $seen{$desc}\n] if $seen{$desc};
- die qq[Opcode "$key" duplicates $seen{$key}\n] if $seen{$key};
- $seen{$desc} = qq[description of opcode "$key"];
- $seen{$key} = qq[opcode "$key"];
-
- push(@ops, $key);
- $desc{$key} = $desc;
- $check{$key} = $check;
- $ckname{$check}++;
- $flags{$key} = $flags;
- $args{$key} = $args;
-}
-
-# Emit defines.
-
-$i = 0;
-print <<"END";
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by opcode.pl from its data. Any changes made here
- will be lost!
-*/
-
-#define Perl_pp_i_preinc Perl_pp_preinc
-#define Perl_pp_i_predec Perl_pp_predec
-#define Perl_pp_i_postinc Perl_pp_postinc
-#define Perl_pp_i_postdec Perl_pp_postdec
-
-END
-
-print ON <<"END";
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by opcode.pl from its data. Any changes made here
- will be lost!
-*/
-
-typedef enum opcode {
-END
-
-for (@ops) {
- print ON "\t", &tab(3,"OP_\U$_,"), "/* ", $i++, " */\n";
-}
-print ON "\t", &tab(3,"OP_max"), "\n";
-print ON "} opcode;\n";
-print ON "\n#define MAXO ", scalar @ops, "\n\n";
-
-# Emit op names and descriptions.
-
-print <<END;
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXT char *PL_op_name[];
-#else
-EXT char *PL_op_name[] = {
-END
-
-for (@ops) {
- print qq(\t"$_",\n);
-}
-
-print <<END;
-};
-#endif
-
-END
-
-print <<END;
-#ifndef DOINIT
-EXT char *PL_op_desc[];
-#else
-EXT char *PL_op_desc[] = {
-END
-
-for (@ops) {
- my($safe_desc) = $desc{$_};
-
- # Have to escape double quotes and escape characters.
- $safe_desc =~ s/(^|[^\\])([\\"])/$1\\$2/g;
-
- print qq(\t"$safe_desc",\n);
-}
-
-print <<END;
-};
-#endif
-
-END_EXTERN_C
-
-END
-
-# Emit function declarations.
-
-#for (sort keys %ckname) {
-# print "OP *\t", &tab(3,$_),"(pTHX_ OP* o);\n";
-#}
-#
-#print "\n";
-#
-#for (@ops) {
-# print "OP *\t", &tab(3, "pp_$_"), "(pTHX);\n";
-#}
-
-# Emit ppcode switch array.
-
-print <<END;
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXT OP * (CPERLscope(*PL_ppaddr)[])(pTHX);
-#else
-EXT OP * (CPERLscope(*PL_ppaddr)[])(pTHX) = {
-END
-
-for (@ops) {
- print "\tMEMBER_TO_FPTR(Perl_pp_$_),\n";
-}
-
-print <<END;
-};
-#endif
-
-END
-
-# Emit check routines.
-
-print <<END;
-#ifndef DOINIT
-EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op);
-#else
-EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op) = {
-END
-
-for (@ops) {
- print "\t", &tab(3, "MEMBER_TO_FPTR(Perl_$check{$_}),"), "\t/* $_ */\n";
-}
-
-print <<END;
-};
-#endif
-
-END
-
-# Emit allowed argument types.
-
-print <<END;
-#ifndef DOINIT
-EXT U32 PL_opargs[];
-#else
-EXT U32 PL_opargs[] = {
-END
-
-%argnum = (
- S, 1, # scalar
- L, 2, # list
- A, 3, # array value
- H, 4, # hash value
- C, 5, # code value
- F, 6, # file value
- R, 7, # scalar reference
-);
-
-%opclass = (
- '0', 0, # baseop
- '1', 1, # unop
- '2', 2, # binop
- '|', 3, # logop
- '@', 4, # listop
- '/', 5, # pmop
- '$', 6, # svop_or_padop
- '#', 7, # padop
- '"', 8, # pvop_or_svop
- '{', 9, # loop
- ';', 10, # cop
- '%', 11, # baseop_or_unop
- '-', 12, # filestatop
- '}', 13, # loopexop
-);
-
-my %OP_IS_SOCKET;
-my %OP_IS_FILETEST;
-
-for (@ops) {
- $argsum = 0;
- $flags = $flags{$_};
- $argsum |= 1 if $flags =~ /m/; # needs stack mark
- $argsum |= 2 if $flags =~ /f/; # fold constants
- $argsum |= 4 if $flags =~ /s/; # always produces scalar
- $argsum |= 8 if $flags =~ /t/; # needs target scalar
- $argsum |= (8|256) if $flags =~ /T/; # ... which may be lexical
- $argsum |= 16 if $flags =~ /i/; # always produces integer
- $argsum |= 32 if $flags =~ /I/; # has corresponding int op
- $argsum |= 64 if $flags =~ /d/; # danger, unknown side effects
- $argsum |= 128 if $flags =~ /u/; # defaults to $_
-
- $flags =~ /([\W\d_])/ or die qq[Opcode "$_" has no class indicator];
- $argsum |= $opclass{$1} << 9;
- $mul = 0x2000; # 2 ^ OASHIFT
- for $arg (split(' ',$args{$_})) {
- if ($arg =~ /^F/) {
- $OP_IS_SOCKET{$_} = 1 if $arg =~ s/s//;
- $OP_IS_FILETEST{$_} = 1 if $arg =~ s/-//;
- }
- $argnum = ($arg =~ s/\?//) ? 8 : 0;
- die "op = $_, arg = $arg\n" unless length($arg) == 1;
- $argnum += $argnum{$arg};
- warn "# Conflicting bit 32 for '$_'.\n"
- if $argnum & 8 and $mul == 0x10000000;
- $argsum += $argnum * $mul;
- $mul <<= 4;
- }
- $argsum = sprintf("0x%08x", $argsum);
- print "\t", &tab(3, "$argsum,"), "/* $_ */\n";
-}
-
-print <<END;
-};
-#endif
-
-END_EXTERN_C
-END
-
-if (keys %OP_IS_SOCKET) {
- print ON "\n#define OP_IS_SOCKET(op) \\\n\t(";
- print ON join(" || \\\n\t ",
- map { "(op) == OP_" . uc() } sort keys %OP_IS_SOCKET);
- print ON ")\n\n";
-}
-
-if (keys %OP_IS_FILETEST) {
- print ON "\n#define OP_IS_FILETEST(op) \\\n\t(";
- print ON join(" || \\\n\t ",
- map { "(op) == OP_" . uc() } sort keys %OP_IS_FILETEST);
- print ON ")\n\n";
-}
-
-close OC or die "Error closing opcode.h: $!";
-close ON or die "Error closing opnames.h: $!";
-
-unlink "pp_proto.h";
-unlink "pp.sym";
-open PP, '>pp_proto.h' or die "Error creating pp_proto.h: $!";
-open PPSYM, '>pp.sym' or die "Error creating pp.sym: $!";
-
-print PP <<"END";
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by opcode.pl from its data. Any changes made here
- will be lost!
-*/
-
-END
-
-print PPSYM <<"END";
-#
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by opcode.pl from its data. Any changes made here
-# will be lost!
-#
-
-END
-
-
-for (sort keys %ckname) {
- print PP "PERL_CKDEF(Perl_$_)\n";
- print PPSYM "Perl_$_\n";
-#OP *\t", &tab(3,$_),"(OP* o);\n";
-}
-
-print PP "\n\n";
-
-for (@ops) {
- next if /^i_(pre|post)(inc|dec)$/;
- print PP "PERL_PPDEF(Perl_pp_$_)\n";
- print PPSYM "Perl_pp_$_\n";
-}
-
-close PP or die "Error closing pp_proto.h: $!";
-close PPSYM or die "Error closing pp.sym: $!";
-
-###########################################################################
-sub tab {
- local($l, $t) = @_;
- $t .= "\t" x ($l - (length($t) + 1) / 8);
- $t;
-}
-###########################################################################
-
-# Some comments about 'T' opcode classifier:
-
-# Safe to set if the ppcode uses:
-# tryAMAGICbin, tryAMAGICun, SETn, SETi, SETu, PUSHn, PUSHTARG, SETTARG,
-# SETs(TARG), XPUSHn, XPUSHu,
-
-# Unsafe to set if the ppcode uses dTARG or [X]RETPUSH[YES|NO|UNDEF]
-
-# lt and friends do SETs (including ncmp, but not scmp)
-
-# Additional mode of failure: the opcode can modify TARG before it "used"
-# all the arguments (or may call an external function which does the same).
-# If the target coincides with one of the arguments ==> kaboom.
-
-# pp.c pos substr each not OK (RETPUSHUNDEF)
-# substr vec also not OK due to LV to target (are they???)
-# ref not OK (RETPUSHNO)
-# trans not OK (dTARG; TARG = sv_newmortal();)
-# ucfirst etc not OK: TMP arg processed inplace
-# quotemeta not OK (unsafe when TARG == arg)
-# each repeat not OK too due to list context
-# pack split - unknown whether they are safe
-# sprintf: is calling do_sprintf(TARG,...) which can act on TARG
-# before other args are processed.
-
-# Suspicious wrt "additional mode of failure" (and only it):
-# schop, chop, postinc/dec, bit_and etc, negate, complement.
-
-# Also suspicious: 4-arg substr, sprintf, uc/lc (POK_only), reverse, pack.
-
-# substr/vec: doing TAINT_off()???
-
-# pp_hot.c
-# readline - unknown whether it is safe
-# match subst not OK (dTARG)
-# grepwhile not OK (not always setting)
-# join not OK (unsafe when TARG == arg)
-
-# Suspicious wrt "additional mode of failure": concat (dealt with
-# in ck_sassign()), join (same).
-
-# pp_ctl.c
-# mapwhile flip caller not OK (not always setting)
-
-# pp_sys.c
-# backtick glob warn die not OK (not always setting)
-# warn not OK (RETPUSHYES)
-# open fileno getc sysread syswrite ioctl accept shutdown
-# ftsize(etc) readlink telldir fork alarm getlogin not OK (RETPUSHUNDEF)
-# umask select not OK (XPUSHs(&PL_sv_undef);)
-# fileno getc sysread syswrite tell not OK (meth("FILENO" "GETC"))
-# sselect shm* sem* msg* syscall - unknown whether they are safe
-# gmtime not OK (list context)
-
-# Suspicious wrt "additional mode of failure": warn, die, select.
-
-__END__
-
-# New ops always go at the very end
-
-# Nothing.
-
-null null operation ck_null 0
-stub stub ck_null 0
-scalar scalar ck_fun s% S
-
-# Pushy stuff.
-
-pushmark pushmark ck_null s0
-wantarray wantarray ck_null is0
-
-const constant item ck_svconst s$
-
-gvsv scalar variable ck_null ds$
-gv glob value ck_null ds$
-gelem glob elem ck_null d2 S S
-padsv private variable ck_null ds0
-padav private array ck_null d0
-padhv private hash ck_null d0
-padany private value ck_null d0
-
-pushre push regexp ck_null d/
-
-# References and stuff.
-
-rv2gv ref-to-glob cast ck_rvconst ds1
-rv2sv scalar dereference ck_rvconst ds1
-av2arylen array length ck_null is1
-rv2cv subroutine dereference ck_rvconst d1
-anoncode anonymous subroutine ck_anoncode $
-prototype subroutine prototype ck_null s% S
-refgen reference constructor ck_spair m1 L
-srefgen single ref constructor ck_null fs1 S
-ref reference-type operator ck_fun stu% S?
-bless bless ck_fun s@ S S?
-
-# Pushy I/O.
-
-backtick quoted execution (``, qx) ck_open t%
-# glob defaults its first arg to $_
-glob glob ck_glob t@ S?
-readline <HANDLE> ck_null t%
-rcatline append I/O operator ck_null t%
-
-# Bindable operators.
-
-regcmaybe regexp internal guard ck_fun s1 S
-regcreset regexp internal reset ck_fun s1 S
-regcomp regexp compilation ck_null s| S
-match pattern match (m//) ck_match d/
-qr pattern quote (qr//) ck_match s/
-subst substitution (s///) ck_null dis/ S
-substcont substitution iterator ck_null dis|
-trans transliteration (tr///) ck_null is" S
-
-# Lvalue operators.
-# sassign is special-cased for op class
-
-sassign scalar assignment ck_sassign s0
-aassign list assignment ck_null t2 L L
-
-chop chop ck_spair mts% L
-schop scalar chop ck_null stu% S?
-chomp chomp ck_spair mTs% L
-schomp scalar chomp ck_null sTu% S?
-defined defined operator ck_defined isu% S?
-undef undef operator ck_lfun s% S?
-study study ck_fun su% S?
-pos match position ck_lfun stu% S?
-
-preinc preincrement (++) ck_lfun dIs1 S
-i_preinc integer preincrement (++) ck_lfun dis1 S
-predec predecrement (--) ck_lfun dIs1 S
-i_predec integer predecrement (--) ck_lfun dis1 S
-postinc postincrement (++) ck_lfun dIst1 S
-i_postinc integer postincrement (++) ck_lfun disT1 S
-postdec postdecrement (--) ck_lfun dIst1 S
-i_postdec integer postdecrement (--) ck_lfun disT1 S
-
-# Ordinary operators.
-
-pow exponentiation (**) ck_null fsT2 S S
-
-multiply multiplication (*) ck_null IfsT2 S S
-i_multiply integer multiplication (*) ck_null ifsT2 S S
-divide division (/) ck_null IfsT2 S S
-i_divide integer division (/) ck_null ifsT2 S S
-modulo modulus (%) ck_null IifsT2 S S
-i_modulo integer modulus (%) ck_null ifsT2 S S
-repeat repeat (x) ck_repeat mt2 L S
-
-add addition (+) ck_null IfsT2 S S
-i_add integer addition (+) ck_null ifsT2 S S
-subtract subtraction (-) ck_null IfsT2 S S
-i_subtract integer subtraction (-) ck_null ifsT2 S S
-concat concatenation (.) or string ck_concat fsT2 S S
-stringify string ck_fun fsT@ S
-
-left_shift left bitshift (<<) ck_bitop fsT2 S S
-right_shift right bitshift (>>) ck_bitop fsT2 S S
-
-lt numeric lt (<) ck_null Iifs2 S S
-i_lt integer lt (<) ck_null ifs2 S S
-gt numeric gt (>) ck_null Iifs2 S S
-i_gt integer gt (>) ck_null ifs2 S S
-le numeric le (<=) ck_null Iifs2 S S
-i_le integer le (<=) ck_null ifs2 S S
-ge numeric ge (>=) ck_null Iifs2 S S
-i_ge integer ge (>=) ck_null ifs2 S S
-eq numeric eq (==) ck_null Iifs2 S S
-i_eq integer eq (==) ck_null ifs2 S S
-ne numeric ne (!=) ck_null Iifs2 S S
-i_ne integer ne (!=) ck_null ifs2 S S
-ncmp numeric comparison (<=>) ck_null Iifst2 S S
-i_ncmp integer comparison (<=>) ck_null ifst2 S S
-
-slt string lt ck_scmp ifs2 S S
-sgt string gt ck_scmp ifs2 S S
-sle string le ck_scmp ifs2 S S
-sge string ge ck_scmp ifs2 S S
-seq string eq ck_null ifs2 S S
-sne string ne ck_null ifs2 S S
-scmp string comparison (cmp) ck_scmp ifst2 S S
-
-bit_and bitwise and (&) ck_bitop fst2 S S
-bit_xor bitwise xor (^) ck_bitop fst2 S S
-bit_or bitwise or (|) ck_bitop fst2 S S
-
-negate negation (-) ck_null Ifst1 S
-i_negate integer negation (-) ck_null ifsT1 S
-not not ck_null ifs1 S
-complement 1's complement (~) ck_bitop fst1 S
-
-# High falutin' math.
-
-atan2 atan2 ck_fun fsT@ S S
-sin sin ck_fun fsTu% S?
-cos cos ck_fun fsTu% S?
-rand rand ck_fun sT% S?
-srand srand ck_fun s% S?
-exp exp ck_fun fsTu% S?
-log log ck_fun fsTu% S?
-sqrt sqrt ck_fun fsTu% S?
-
-# Lowbrow math.
-
-int int ck_fun fsTu% S?
-hex hex ck_fun fsTu% S?
-oct oct ck_fun fsTu% S?
-abs abs ck_fun fsTu% S?
-
-# String stuff.
-
-length length ck_lengthconst isTu% S?
-substr substr ck_substr st@ S S S? S?
-vec vec ck_fun ist@ S S S
-
-index index ck_index isT@ S S S?
-rindex rindex ck_index isT@ S S S?
-
-sprintf sprintf ck_fun_locale mfst@ S L
-formline formline ck_fun ms@ S L
-ord ord ck_fun ifsTu% S?
-chr chr ck_fun fsTu% S?
-crypt crypt ck_fun fsT@ S S
-ucfirst ucfirst ck_fun_locale fstu% S?
-lcfirst lcfirst ck_fun_locale fstu% S?
-uc uc ck_fun_locale fstu% S?
-lc lc ck_fun_locale fstu% S?
-quotemeta quotemeta ck_fun fstu% S?
-
-# Arrays.
-
-rv2av array dereference ck_rvconst dt1
-aelemfast constant array element ck_null s$ A S
-aelem array element ck_null s2 A S
-aslice array slice ck_null m@ A L
-
-# Hashes.
-
-each each ck_fun % H
-values values ck_fun t% H
-keys keys ck_fun t% H
-delete delete ck_delete % S
-exists exists ck_exists is% S
-rv2hv hash dereference ck_rvconst dt1
-helem hash element ck_null s2@ H S
-hslice hash slice ck_null m@ H L
-
-# Explosives and implosives.
-
-unpack unpack ck_fun @ S S
-pack pack ck_fun mst@ S L
-split split ck_split t@ S S S
-join join or string ck_join mst@ S L
-
-# List operators.
-
-list list ck_null m@ L
-lslice list slice ck_null 2 H L L
-anonlist anonymous list ([]) ck_fun ms@ L
-anonhash anonymous hash ({}) ck_fun ms@ L
-
-splice splice ck_fun m@ A S? S? L
-push push ck_fun imsT@ A L
-pop pop ck_shift s% A
-shift shift ck_shift s% A
-unshift unshift ck_fun imsT@ A L
-sort sort ck_sort m@ C? L
-reverse reverse ck_fun mt@ L
-
-grepstart grep ck_grep dm@ C L
-grepwhile grep iterator ck_null dt|
-
-mapstart map ck_grep dm@ C L
-mapwhile map iterator ck_null dt|
-
-# Range stuff.
-
-range flipflop ck_null | S S
-flip range (or flip) ck_null 1 S S
-flop range (or flop) ck_null 1
-
-# Control.
-
-and logical and (&&) ck_null |
-or logical or (||) ck_null |
-xor logical xor ck_null fs2 S S
-cond_expr conditional expression ck_null d|
-andassign logical and assignment (&&=) ck_null s|
-orassign logical or assignment (||=) ck_null s|
-
-method method lookup ck_method d1
-entersub subroutine entry ck_subr dmt1 L
-leavesub subroutine exit ck_null 1
-leavesublv lvalue subroutine return ck_null 1
-caller caller ck_fun t% S?
-warn warn ck_fun imst@ L
-die die ck_fun dimst@ L
-reset symbol reset ck_fun is% S?
-
-lineseq line sequence ck_null @
-nextstate next statement ck_null s;
-dbstate debug next statement ck_null s;
-unstack iteration finalizer ck_null s0
-enter block entry ck_null 0
-leave block exit ck_null @
-scope block ck_null @
-enteriter foreach loop entry ck_null d{
-iter foreach loop iterator ck_null 0
-enterloop loop entry ck_null d{
-leaveloop loop exit ck_null 2
-return return ck_return dm@ L
-last last ck_null ds}
-next next ck_null ds}
-redo redo ck_null ds}
-dump dump ck_null ds}
-goto goto ck_null ds}
-exit exit ck_exit ds% S?
-# continued below
-
-#nswitch numeric switch ck_null d
-#cswitch character switch ck_null d
-
-# I/O.
-
-open open ck_open ist@ F S? L
-close close ck_fun is% F?
-pipe_op pipe ck_fun is@ F F
-
-fileno fileno ck_fun ist% F
-umask umask ck_fun ist% S?
-binmode binmode ck_fun s@ F S?
-
-tie tie ck_fun idms@ R S L
-untie untie ck_fun is% R
-tied tied ck_fun s% R
-dbmopen dbmopen ck_fun is@ H S S
-dbmclose dbmclose ck_fun is% H
-
-sselect select system call ck_select t@ S S S S
-select select ck_select st@ F?
-
-getc getc ck_eof st% F?
-read read ck_fun imst@ F R S S?
-enterwrite write ck_fun dis% F?
-leavewrite write exit ck_null 1
-
-prtf printf ck_listiob ims@ F? L
-print print ck_listiob ims@ F? L
-
-sysopen sysopen ck_fun s@ F S S S?
-sysseek sysseek ck_fun s@ F S S
-sysread sysread ck_fun imst@ F R S S?
-syswrite syswrite ck_fun imst@ F S S? S?
-
-send send ck_fun imst@ Fs S S S?
-recv recv ck_fun imst@ Fs R S S
-
-eof eof ck_eof is% F?
-tell tell ck_fun st% F?
-seek seek ck_fun s@ F S S
-# truncate really behaves as if it had both "S S" and "F S"
-truncate truncate ck_trunc is@ S S
-
-fcntl fcntl ck_fun st@ F S S
-ioctl ioctl ck_fun st@ F S S
-flock flock ck_fun isT@ F S
-
-# Sockets.
-
-socket socket ck_fun is@ Fs S S S
-sockpair socketpair ck_fun is@ Fs Fs S S S
-
-bind bind ck_fun is@ Fs S
-connect connect ck_fun is@ Fs S
-listen listen ck_fun is@ Fs S
-accept accept ck_fun ist@ Fs Fs
-shutdown shutdown ck_fun ist@ Fs S
-
-gsockopt getsockopt ck_fun is@ Fs S S
-ssockopt setsockopt ck_fun is@ Fs S S S
-
-getsockname getsockname ck_fun is% Fs
-getpeername getpeername ck_fun is% Fs
-
-# Stat calls.
-
-lstat lstat ck_ftst u- F
-stat stat ck_ftst u- F
-ftrread -R ck_ftst isu- F-
-ftrwrite -W ck_ftst isu- F-
-ftrexec -X ck_ftst isu- F-
-fteread -r ck_ftst isu- F-
-ftewrite -w ck_ftst isu- F-
-fteexec -x ck_ftst isu- F-
-ftis -e ck_ftst isu- F-
-fteowned -O ck_ftst isu- F-
-ftrowned -o ck_ftst isu- F-
-ftzero -z ck_ftst isu- F-
-ftsize -s ck_ftst istu- F-
-ftmtime -M ck_ftst stu- F-
-ftatime -A ck_ftst stu- F-
-ftctime -C ck_ftst stu- F-
-ftsock -S ck_ftst isu- F-
-ftchr -c ck_ftst isu- F-
-ftblk -b ck_ftst isu- F-
-ftfile -f ck_ftst isu- F-
-ftdir -d ck_ftst isu- F-
-ftpipe -p ck_ftst isu- F-
-ftlink -l ck_ftst isu- F-
-ftsuid -u ck_ftst isu- F-
-ftsgid -g ck_ftst isu- F-
-ftsvtx -k ck_ftst isu- F-
-fttty -t ck_ftst is- F-
-fttext -T ck_ftst isu- F-
-ftbinary -B ck_ftst isu- F-
-
-# File calls.
-
-chdir chdir ck_fun isT% S?
-chown chown ck_fun imsT@ L
-chroot chroot ck_fun isTu% S?
-unlink unlink ck_fun imsTu@ L
-chmod chmod ck_fun imsT@ L
-utime utime ck_fun imsT@ L
-rename rename ck_fun isT@ S S
-link link ck_fun isT@ S S
-symlink symlink ck_fun isT@ S S
-readlink readlink ck_fun stu% S?
-mkdir mkdir ck_fun isT@ S S?
-rmdir rmdir ck_fun isTu% S?
-
-# Directory calls.
-
-open_dir opendir ck_fun is@ F S
-readdir readdir ck_fun % F
-telldir telldir ck_fun st% F
-seekdir seekdir ck_fun s@ F S
-rewinddir rewinddir ck_fun s% F
-closedir closedir ck_fun is% F
-
-# Process control.
-
-fork fork ck_null ist0
-wait wait ck_null isT0
-waitpid waitpid ck_fun isT@ S S
-system system ck_exec imsT@ S? L
-exec exec ck_exec dimsT@ S? L
-kill kill ck_fun dimsT@ L
-getppid getppid ck_null isT0
-getpgrp getpgrp ck_fun isT% S?
-setpgrp setpgrp ck_fun isT@ S? S?
-getpriority getpriority ck_fun isT@ S S
-setpriority setpriority ck_fun isT@ S S S
-
-# Time calls.
-
-# NOTE: MacOS patches the 'i' of time() away later when the interpreter
-# is created because in MacOS time() is already returning times > 2**31-1,
-# that is, non-integers.
-
-time time ck_null isT0
-tms times ck_null 0
-localtime localtime ck_fun t% S?
-gmtime gmtime ck_fun t% S?
-alarm alarm ck_fun istu% S?
-sleep sleep ck_fun isT% S?
-
-# Shared memory.
-
-shmget shmget ck_fun imst@ S S S
-shmctl shmctl ck_fun imst@ S S S
-shmread shmread ck_fun imst@ S S S S
-shmwrite shmwrite ck_fun imst@ S S S S
-
-# Message passing.
-
-msgget msgget ck_fun imst@ S S
-msgctl msgctl ck_fun imst@ S S S
-msgsnd msgsnd ck_fun imst@ S S S
-msgrcv msgrcv ck_fun imst@ S S S S S
-
-# Semaphores.
-
-semget semget ck_fun imst@ S S S
-semctl semctl ck_fun imst@ S S S S
-semop semop ck_fun imst@ S S
-
-# Eval.
-
-require require ck_require du% S?
-dofile do "file" ck_fun d1 S
-entereval eval "string" ck_eval d% S
-leaveeval eval "string" exit ck_null 1 S
-#evalonce eval constant string ck_null d1 S
-entertry eval {block} ck_null |
-leavetry eval {block} exit ck_null @
-
-# Get system info.
-
-ghbyname gethostbyname ck_fun % S
-ghbyaddr gethostbyaddr ck_fun @ S S
-ghostent gethostent ck_null 0
-gnbyname getnetbyname ck_fun % S
-gnbyaddr getnetbyaddr ck_fun @ S S
-gnetent getnetent ck_null 0
-gpbyname getprotobyname ck_fun % S
-gpbynumber getprotobynumber ck_fun @ S
-gprotoent getprotoent ck_null 0
-gsbyname getservbyname ck_fun @ S S
-gsbyport getservbyport ck_fun @ S S
-gservent getservent ck_null 0
-shostent sethostent ck_fun is% S
-snetent setnetent ck_fun is% S
-sprotoent setprotoent ck_fun is% S
-sservent setservent ck_fun is% S
-ehostent endhostent ck_null is0
-enetent endnetent ck_null is0
-eprotoent endprotoent ck_null is0
-eservent endservent ck_null is0
-gpwnam getpwnam ck_fun % S
-gpwuid getpwuid ck_fun % S
-gpwent getpwent ck_null 0
-spwent setpwent ck_null is0
-epwent endpwent ck_null is0
-ggrnam getgrnam ck_fun % S
-ggrgid getgrgid ck_fun % S
-ggrent getgrent ck_null 0
-sgrent setgrent ck_null is0
-egrent endgrent ck_null is0
-getlogin getlogin ck_null st0
-
-# Miscellaneous.
-
-syscall syscall ck_fun imst@ S L
-
-# For multi-threading
-lock lock ck_rfun s% S
-threadsv per-thread value ck_null ds0
-
-# Control (contd.)
-setstate set statement info ck_null s;
-method_named method with known name ck_null d$
diff --git a/contrib/perl5/opnames.h b/contrib/perl5/opnames.h
deleted file mode 100644
index ba28f68..0000000
--- a/contrib/perl5/opnames.h
+++ /dev/null
@@ -1,408 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by opcode.pl from its data. Any changes made here
- will be lost!
-*/
-
-typedef enum opcode {
- OP_NULL, /* 0 */
- OP_STUB, /* 1 */
- OP_SCALAR, /* 2 */
- OP_PUSHMARK, /* 3 */
- OP_WANTARRAY, /* 4 */
- OP_CONST, /* 5 */
- OP_GVSV, /* 6 */
- OP_GV, /* 7 */
- OP_GELEM, /* 8 */
- OP_PADSV, /* 9 */
- OP_PADAV, /* 10 */
- OP_PADHV, /* 11 */
- OP_PADANY, /* 12 */
- OP_PUSHRE, /* 13 */
- OP_RV2GV, /* 14 */
- OP_RV2SV, /* 15 */
- OP_AV2ARYLEN, /* 16 */
- OP_RV2CV, /* 17 */
- OP_ANONCODE, /* 18 */
- OP_PROTOTYPE, /* 19 */
- OP_REFGEN, /* 20 */
- OP_SREFGEN, /* 21 */
- OP_REF, /* 22 */
- OP_BLESS, /* 23 */
- OP_BACKTICK, /* 24 */
- OP_GLOB, /* 25 */
- OP_READLINE, /* 26 */
- OP_RCATLINE, /* 27 */
- OP_REGCMAYBE, /* 28 */
- OP_REGCRESET, /* 29 */
- OP_REGCOMP, /* 30 */
- OP_MATCH, /* 31 */
- OP_QR, /* 32 */
- OP_SUBST, /* 33 */
- OP_SUBSTCONT, /* 34 */
- OP_TRANS, /* 35 */
- OP_SASSIGN, /* 36 */
- OP_AASSIGN, /* 37 */
- OP_CHOP, /* 38 */
- OP_SCHOP, /* 39 */
- OP_CHOMP, /* 40 */
- OP_SCHOMP, /* 41 */
- OP_DEFINED, /* 42 */
- OP_UNDEF, /* 43 */
- OP_STUDY, /* 44 */
- OP_POS, /* 45 */
- OP_PREINC, /* 46 */
- OP_I_PREINC, /* 47 */
- OP_PREDEC, /* 48 */
- OP_I_PREDEC, /* 49 */
- OP_POSTINC, /* 50 */
- OP_I_POSTINC, /* 51 */
- OP_POSTDEC, /* 52 */
- OP_I_POSTDEC, /* 53 */
- OP_POW, /* 54 */
- OP_MULTIPLY, /* 55 */
- OP_I_MULTIPLY, /* 56 */
- OP_DIVIDE, /* 57 */
- OP_I_DIVIDE, /* 58 */
- OP_MODULO, /* 59 */
- OP_I_MODULO, /* 60 */
- OP_REPEAT, /* 61 */
- OP_ADD, /* 62 */
- OP_I_ADD, /* 63 */
- OP_SUBTRACT, /* 64 */
- OP_I_SUBTRACT, /* 65 */
- OP_CONCAT, /* 66 */
- OP_STRINGIFY, /* 67 */
- OP_LEFT_SHIFT, /* 68 */
- OP_RIGHT_SHIFT, /* 69 */
- OP_LT, /* 70 */
- OP_I_LT, /* 71 */
- OP_GT, /* 72 */
- OP_I_GT, /* 73 */
- OP_LE, /* 74 */
- OP_I_LE, /* 75 */
- OP_GE, /* 76 */
- OP_I_GE, /* 77 */
- OP_EQ, /* 78 */
- OP_I_EQ, /* 79 */
- OP_NE, /* 80 */
- OP_I_NE, /* 81 */
- OP_NCMP, /* 82 */
- OP_I_NCMP, /* 83 */
- OP_SLT, /* 84 */
- OP_SGT, /* 85 */
- OP_SLE, /* 86 */
- OP_SGE, /* 87 */
- OP_SEQ, /* 88 */
- OP_SNE, /* 89 */
- OP_SCMP, /* 90 */
- OP_BIT_AND, /* 91 */
- OP_BIT_XOR, /* 92 */
- OP_BIT_OR, /* 93 */
- OP_NEGATE, /* 94 */
- OP_I_NEGATE, /* 95 */
- OP_NOT, /* 96 */
- OP_COMPLEMENT, /* 97 */
- OP_ATAN2, /* 98 */
- OP_SIN, /* 99 */
- OP_COS, /* 100 */
- OP_RAND, /* 101 */
- OP_SRAND, /* 102 */
- OP_EXP, /* 103 */
- OP_LOG, /* 104 */
- OP_SQRT, /* 105 */
- OP_INT, /* 106 */
- OP_HEX, /* 107 */
- OP_OCT, /* 108 */
- OP_ABS, /* 109 */
- OP_LENGTH, /* 110 */
- OP_SUBSTR, /* 111 */
- OP_VEC, /* 112 */
- OP_INDEX, /* 113 */
- OP_RINDEX, /* 114 */
- OP_SPRINTF, /* 115 */
- OP_FORMLINE, /* 116 */
- OP_ORD, /* 117 */
- OP_CHR, /* 118 */
- OP_CRYPT, /* 119 */
- OP_UCFIRST, /* 120 */
- OP_LCFIRST, /* 121 */
- OP_UC, /* 122 */
- OP_LC, /* 123 */
- OP_QUOTEMETA, /* 124 */
- OP_RV2AV, /* 125 */
- OP_AELEMFAST, /* 126 */
- OP_AELEM, /* 127 */
- OP_ASLICE, /* 128 */
- OP_EACH, /* 129 */
- OP_VALUES, /* 130 */
- OP_KEYS, /* 131 */
- OP_DELETE, /* 132 */
- OP_EXISTS, /* 133 */
- OP_RV2HV, /* 134 */
- OP_HELEM, /* 135 */
- OP_HSLICE, /* 136 */
- OP_UNPACK, /* 137 */
- OP_PACK, /* 138 */
- OP_SPLIT, /* 139 */
- OP_JOIN, /* 140 */
- OP_LIST, /* 141 */
- OP_LSLICE, /* 142 */
- OP_ANONLIST, /* 143 */
- OP_ANONHASH, /* 144 */
- OP_SPLICE, /* 145 */
- OP_PUSH, /* 146 */
- OP_POP, /* 147 */
- OP_SHIFT, /* 148 */
- OP_UNSHIFT, /* 149 */
- OP_SORT, /* 150 */
- OP_REVERSE, /* 151 */
- OP_GREPSTART, /* 152 */
- OP_GREPWHILE, /* 153 */
- OP_MAPSTART, /* 154 */
- OP_MAPWHILE, /* 155 */
- OP_RANGE, /* 156 */
- OP_FLIP, /* 157 */
- OP_FLOP, /* 158 */
- OP_AND, /* 159 */
- OP_OR, /* 160 */
- OP_XOR, /* 161 */
- OP_COND_EXPR, /* 162 */
- OP_ANDASSIGN, /* 163 */
- OP_ORASSIGN, /* 164 */
- OP_METHOD, /* 165 */
- OP_ENTERSUB, /* 166 */
- OP_LEAVESUB, /* 167 */
- OP_LEAVESUBLV, /* 168 */
- OP_CALLER, /* 169 */
- OP_WARN, /* 170 */
- OP_DIE, /* 171 */
- OP_RESET, /* 172 */
- OP_LINESEQ, /* 173 */
- OP_NEXTSTATE, /* 174 */
- OP_DBSTATE, /* 175 */
- OP_UNSTACK, /* 176 */
- OP_ENTER, /* 177 */
- OP_LEAVE, /* 178 */
- OP_SCOPE, /* 179 */
- OP_ENTERITER, /* 180 */
- OP_ITER, /* 181 */
- OP_ENTERLOOP, /* 182 */
- OP_LEAVELOOP, /* 183 */
- OP_RETURN, /* 184 */
- OP_LAST, /* 185 */
- OP_NEXT, /* 186 */
- OP_REDO, /* 187 */
- OP_DUMP, /* 188 */
- OP_GOTO, /* 189 */
- OP_EXIT, /* 190 */
- OP_OPEN, /* 191 */
- OP_CLOSE, /* 192 */
- OP_PIPE_OP, /* 193 */
- OP_FILENO, /* 194 */
- OP_UMASK, /* 195 */
- OP_BINMODE, /* 196 */
- OP_TIE, /* 197 */
- OP_UNTIE, /* 198 */
- OP_TIED, /* 199 */
- OP_DBMOPEN, /* 200 */
- OP_DBMCLOSE, /* 201 */
- OP_SSELECT, /* 202 */
- OP_SELECT, /* 203 */
- OP_GETC, /* 204 */
- OP_READ, /* 205 */
- OP_ENTERWRITE, /* 206 */
- OP_LEAVEWRITE, /* 207 */
- OP_PRTF, /* 208 */
- OP_PRINT, /* 209 */
- OP_SYSOPEN, /* 210 */
- OP_SYSSEEK, /* 211 */
- OP_SYSREAD, /* 212 */
- OP_SYSWRITE, /* 213 */
- OP_SEND, /* 214 */
- OP_RECV, /* 215 */
- OP_EOF, /* 216 */
- OP_TELL, /* 217 */
- OP_SEEK, /* 218 */
- OP_TRUNCATE, /* 219 */
- OP_FCNTL, /* 220 */
- OP_IOCTL, /* 221 */
- OP_FLOCK, /* 222 */
- OP_SOCKET, /* 223 */
- OP_SOCKPAIR, /* 224 */
- OP_BIND, /* 225 */
- OP_CONNECT, /* 226 */
- OP_LISTEN, /* 227 */
- OP_ACCEPT, /* 228 */
- OP_SHUTDOWN, /* 229 */
- OP_GSOCKOPT, /* 230 */
- OP_SSOCKOPT, /* 231 */
- OP_GETSOCKNAME, /* 232 */
- OP_GETPEERNAME, /* 233 */
- OP_LSTAT, /* 234 */
- OP_STAT, /* 235 */
- OP_FTRREAD, /* 236 */
- OP_FTRWRITE, /* 237 */
- OP_FTREXEC, /* 238 */
- OP_FTEREAD, /* 239 */
- OP_FTEWRITE, /* 240 */
- OP_FTEEXEC, /* 241 */
- OP_FTIS, /* 242 */
- OP_FTEOWNED, /* 243 */
- OP_FTROWNED, /* 244 */
- OP_FTZERO, /* 245 */
- OP_FTSIZE, /* 246 */
- OP_FTMTIME, /* 247 */
- OP_FTATIME, /* 248 */
- OP_FTCTIME, /* 249 */
- OP_FTSOCK, /* 250 */
- OP_FTCHR, /* 251 */
- OP_FTBLK, /* 252 */
- OP_FTFILE, /* 253 */
- OP_FTDIR, /* 254 */
- OP_FTPIPE, /* 255 */
- OP_FTLINK, /* 256 */
- OP_FTSUID, /* 257 */
- OP_FTSGID, /* 258 */
- OP_FTSVTX, /* 259 */
- OP_FTTTY, /* 260 */
- OP_FTTEXT, /* 261 */
- OP_FTBINARY, /* 262 */
- OP_CHDIR, /* 263 */
- OP_CHOWN, /* 264 */
- OP_CHROOT, /* 265 */
- OP_UNLINK, /* 266 */
- OP_CHMOD, /* 267 */
- OP_UTIME, /* 268 */
- OP_RENAME, /* 269 */
- OP_LINK, /* 270 */
- OP_SYMLINK, /* 271 */
- OP_READLINK, /* 272 */
- OP_MKDIR, /* 273 */
- OP_RMDIR, /* 274 */
- OP_OPEN_DIR, /* 275 */
- OP_READDIR, /* 276 */
- OP_TELLDIR, /* 277 */
- OP_SEEKDIR, /* 278 */
- OP_REWINDDIR, /* 279 */
- OP_CLOSEDIR, /* 280 */
- OP_FORK, /* 281 */
- OP_WAIT, /* 282 */
- OP_WAITPID, /* 283 */
- OP_SYSTEM, /* 284 */
- OP_EXEC, /* 285 */
- OP_KILL, /* 286 */
- OP_GETPPID, /* 287 */
- OP_GETPGRP, /* 288 */
- OP_SETPGRP, /* 289 */
- OP_GETPRIORITY, /* 290 */
- OP_SETPRIORITY, /* 291 */
- OP_TIME, /* 292 */
- OP_TMS, /* 293 */
- OP_LOCALTIME, /* 294 */
- OP_GMTIME, /* 295 */
- OP_ALARM, /* 296 */
- OP_SLEEP, /* 297 */
- OP_SHMGET, /* 298 */
- OP_SHMCTL, /* 299 */
- OP_SHMREAD, /* 300 */
- OP_SHMWRITE, /* 301 */
- OP_MSGGET, /* 302 */
- OP_MSGCTL, /* 303 */
- OP_MSGSND, /* 304 */
- OP_MSGRCV, /* 305 */
- OP_SEMGET, /* 306 */
- OP_SEMCTL, /* 307 */
- OP_SEMOP, /* 308 */
- OP_REQUIRE, /* 309 */
- OP_DOFILE, /* 310 */
- OP_ENTEREVAL, /* 311 */
- OP_LEAVEEVAL, /* 312 */
- OP_ENTERTRY, /* 313 */
- OP_LEAVETRY, /* 314 */
- OP_GHBYNAME, /* 315 */
- OP_GHBYADDR, /* 316 */
- OP_GHOSTENT, /* 317 */
- OP_GNBYNAME, /* 318 */
- OP_GNBYADDR, /* 319 */
- OP_GNETENT, /* 320 */
- OP_GPBYNAME, /* 321 */
- OP_GPBYNUMBER, /* 322 */
- OP_GPROTOENT, /* 323 */
- OP_GSBYNAME, /* 324 */
- OP_GSBYPORT, /* 325 */
- OP_GSERVENT, /* 326 */
- OP_SHOSTENT, /* 327 */
- OP_SNETENT, /* 328 */
- OP_SPROTOENT, /* 329 */
- OP_SSERVENT, /* 330 */
- OP_EHOSTENT, /* 331 */
- OP_ENETENT, /* 332 */
- OP_EPROTOENT, /* 333 */
- OP_ESERVENT, /* 334 */
- OP_GPWNAM, /* 335 */
- OP_GPWUID, /* 336 */
- OP_GPWENT, /* 337 */
- OP_SPWENT, /* 338 */
- OP_EPWENT, /* 339 */
- OP_GGRNAM, /* 340 */
- OP_GGRGID, /* 341 */
- OP_GGRENT, /* 342 */
- OP_SGRENT, /* 343 */
- OP_EGRENT, /* 344 */
- OP_GETLOGIN, /* 345 */
- OP_SYSCALL, /* 346 */
- OP_LOCK, /* 347 */
- OP_THREADSV, /* 348 */
- OP_SETSTATE, /* 349 */
- OP_METHOD_NAMED,/* 350 */
- OP_max
-} opcode;
-
-#define MAXO 351
-
-
-#define OP_IS_SOCKET(op) \
- ((op) == OP_ACCEPT || \
- (op) == OP_BIND || \
- (op) == OP_CONNECT || \
- (op) == OP_GETPEERNAME || \
- (op) == OP_GETSOCKNAME || \
- (op) == OP_GSOCKOPT || \
- (op) == OP_LISTEN || \
- (op) == OP_RECV || \
- (op) == OP_SEND || \
- (op) == OP_SHUTDOWN || \
- (op) == OP_SOCKET || \
- (op) == OP_SOCKPAIR || \
- (op) == OP_SSOCKOPT)
-
-
-#define OP_IS_FILETEST(op) \
- ((op) == OP_FTATIME || \
- (op) == OP_FTBINARY || \
- (op) == OP_FTBLK || \
- (op) == OP_FTCHR || \
- (op) == OP_FTCTIME || \
- (op) == OP_FTDIR || \
- (op) == OP_FTEEXEC || \
- (op) == OP_FTEOWNED || \
- (op) == OP_FTEREAD || \
- (op) == OP_FTEWRITE || \
- (op) == OP_FTFILE || \
- (op) == OP_FTIS || \
- (op) == OP_FTLINK || \
- (op) == OP_FTMTIME || \
- (op) == OP_FTPIPE || \
- (op) == OP_FTREXEC || \
- (op) == OP_FTROWNED || \
- (op) == OP_FTRREAD || \
- (op) == OP_FTRWRITE || \
- (op) == OP_FTSGID || \
- (op) == OP_FTSIZE || \
- (op) == OP_FTSOCK || \
- (op) == OP_FTSUID || \
- (op) == OP_FTSVTX || \
- (op) == OP_FTTEXT || \
- (op) == OP_FTTTY || \
- (op) == OP_FTZERO)
-
diff --git a/contrib/perl5/patchlevel.h b/contrib/perl5/patchlevel.h
deleted file mode 100644
index 549661f..0000000
--- a/contrib/perl5/patchlevel.h
+++ /dev/null
@@ -1,86 +0,0 @@
-#ifndef __PATCHLEVEL_H_INCLUDED__
-
-/* do not adjust the whitespace! Configure expects the numbers to be
- * exactly on the third column */
-/* $FreeBSD$ */
-
-#define PERL_REVISION 5 /* age */
-#define PERL_VERSION 6 /* epoch */
-#define PERL_SUBVERSION 1 /* generation */
-
-/* The following numbers describe the earliest compatible version of
- Perl ("compatibility" here being defined as sufficient binary/API
- compatibility to run XS code built with the older version).
- Normally this should not change across maintenance releases.
-
- Note that this only refers to an out-of-the-box build. Many non-default
- options such as usemultiplicity tend to break binary compatibility
- more often.
-
- This is used by Configure et al to figure out
- PERL_INC_VERSION_LIST, which lists version libraries
- to include in @INC. See INSTALL for how this works.
-*/
-#define PERL_API_REVISION 5 /* Adjust manually as needed. */
-#define PERL_API_VERSION 5 /* Adjust manually as needed. */
-#define PERL_API_SUBVERSION 0 /* Adjust manually as needed. */
-/*
- XXX Note: The selection of non-default Configure options, such
- as -Duselonglong may invalidate these settings. Currently, Configure
- does not adequately test for this. A.D. Jan 13, 2000
-*/
-
-#define __PATCHLEVEL_H_INCLUDED__
-#endif
-
-/*
- local_patches -- list of locally applied less-than-subversion patches.
- If you're distributing such a patch, please give it a name and a
- one-line description, placed just before the last NULL in the array
- below. If your patch fixes a bug in the perlbug database, please
- mention the bugid. If your patch *IS* dependent on a prior patch,
- please place your applied patch line after its dependencies. This
- will help tracking of patch dependencies.
-
- Please edit the hunk of diff which adds your patch to this list,
- to remove context lines which would give patch problems. For instance,
- if the original context diff is
- *** patchlevel.h.orig <date here>
- --- patchlevel.h <date here>
- *** 38,43 ***
- --- 38,44 ---
- ,"FOO1235 - some patch"
- ,"BAR3141 - another patch"
- ,"BAZ2718 - and another patch"
- + ,"MINE001 - my new patch"
- ,NULL
- };
-
- please change it to
- *** patchlevel.h.orig <date here>
- --- patchlevel.h <date here>
- *** 41,43 ***
- --- 41,44 ---
- + ,"MINE001 - my new patch"
- };
-
- (Note changes to line numbers as well as removal of context lines.)
- This will prevent patch from choking if someone has previously
- applied different patches than you.
- */
-#if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT)
-static char *local_patches[] = {
- NULL
- ,"SUIDMAIL - fixes for suidperl security"
- ,NULL
-};
-
-/* Initial space prevents this variable from being inserted in config.sh */
-# define LOCAL_PATCH_COUNT \
- (sizeof(local_patches)/sizeof(local_patches[0])-2)
-
-/* the old terms of reference, add them only when explicitly included */
-#define PATCHLEVEL PERL_VERSION
-#undef SUBVERSION /* OS/390 has a SUBVERSION in a system header */
-#define SUBVERSION PERL_SUBVERSION
-#endif
diff --git a/contrib/perl5/perl.c b/contrib/perl5/perl.c
deleted file mode 100644
index d18107c..0000000
--- a/contrib/perl5/perl.c
+++ /dev/null
@@ -1,3905 +0,0 @@
-/* perl.c
- *
- * Copyright (c) 1987-2001 Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $FreeBSD$
- */
-
-/*
- * "A ship then new they built for him/of mithril and of elven glass" --Bilbo
- */
-
-#include "EXTERN.h"
-#define PERL_IN_PERL_C
-#include "perl.h"
-#include "patchlevel.h" /* for local_patches */
-
-/* XXX If this causes problems, set i_unistd=undef in the hint file. */
-#ifdef I_UNISTD
-#include <unistd.h>
-#endif
-
-#if !defined(STANDARD_C) && !defined(HAS_GETENV_PROTOTYPE)
-char *getenv (char *); /* Usually in <stdlib.h> */
-#endif
-
-static I32 read_e_script(pTHXo_ int idx, SV *buf_sv, int maxlen);
-
-#ifdef IAMSUID
-#ifndef DOSUID
-#define DOSUID
-#endif
-#endif
-
-#ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
-#ifdef DOSUID
-#undef DOSUID
-#endif
-#endif
-
-#ifdef PERL_OBJECT
-#define perl_construct Perl_construct
-#define perl_parse Perl_parse
-#define perl_run Perl_run
-#define perl_destruct Perl_destruct
-#define perl_free Perl_free
-#endif
-
-#if defined(USE_THREADS)
-# define INIT_TLS_AND_INTERP \
- STMT_START { \
- if (!PL_curinterp) { \
- PERL_SET_INTERP(my_perl); \
- INIT_THREADS; \
- ALLOC_THREAD_KEY; \
- } \
- } STMT_END
-#else
-# if defined(USE_ITHREADS)
-# define INIT_TLS_AND_INTERP \
- STMT_START { \
- if (!PL_curinterp) { \
- PERL_SET_INTERP(my_perl); \
- INIT_THREADS; \
- ALLOC_THREAD_KEY; \
- PERL_SET_THX(my_perl); \
- OP_REFCNT_INIT; \
- } \
- else { \
- PERL_SET_THX(my_perl); \
- } \
- } STMT_END
-# else
-# define INIT_TLS_AND_INTERP \
- STMT_START { \
- if (!PL_curinterp) { \
- PERL_SET_INTERP(my_perl); \
- } \
- PERL_SET_THX(my_perl); \
- } STMT_END
-# endif
-#endif
-
-#ifdef PERL_IMPLICIT_SYS
-PerlInterpreter *
-perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS,
- struct IPerlMem* ipMP, struct IPerlEnv* ipE,
- struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
- struct IPerlDir* ipD, struct IPerlSock* ipS,
- struct IPerlProc* ipP)
-{
- PerlInterpreter *my_perl;
-#ifdef PERL_OBJECT
- my_perl = (PerlInterpreter*)new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd,
- ipLIO, ipD, ipS, ipP);
- INIT_TLS_AND_INTERP;
-#else
- /* New() needs interpreter, so call malloc() instead */
- my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
- INIT_TLS_AND_INTERP;
- Zero(my_perl, 1, PerlInterpreter);
- PL_Mem = ipM;
- PL_MemShared = ipMS;
- PL_MemParse = ipMP;
- PL_Env = ipE;
- PL_StdIO = ipStd;
- PL_LIO = ipLIO;
- PL_Dir = ipD;
- PL_Sock = ipS;
- PL_Proc = ipP;
-#endif
-
- return my_perl;
-}
-#else
-
-/*
-=for apidoc perl_alloc
-
-Allocates a new Perl interpreter. See L<perlembed>.
-
-=cut
-*/
-
-PerlInterpreter *
-perl_alloc(void)
-{
- PerlInterpreter *my_perl;
-
- /* New() needs interpreter, so call malloc() instead */
- my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
-
- INIT_TLS_AND_INTERP;
- Zero(my_perl, 1, PerlInterpreter);
- return my_perl;
-}
-#endif /* PERL_IMPLICIT_SYS */
-
-/*
-=for apidoc perl_construct
-
-Initializes a new Perl interpreter. See L<perlembed>.
-
-=cut
-*/
-
-void
-perl_construct(pTHXx)
-{
-#ifdef USE_THREADS
- int i;
-#ifndef FAKE_THREADS
- struct perl_thread *thr = NULL;
-#endif /* FAKE_THREADS */
-#endif /* USE_THREADS */
-
-#ifdef MULTIPLICITY
- init_interp();
- PL_perl_destruct_level = 1;
-#else
- if (PL_perl_destruct_level > 0)
- init_interp();
-#endif
-
- /* Init the real globals (and main thread)? */
- if (!PL_linestr) {
-#ifdef USE_THREADS
- MUTEX_INIT(&PL_sv_mutex);
- /*
- * Safe to use basic SV functions from now on (though
- * not things like mortals or tainting yet).
- */
- MUTEX_INIT(&PL_eval_mutex);
- COND_INIT(&PL_eval_cond);
- MUTEX_INIT(&PL_threads_mutex);
- COND_INIT(&PL_nthreads_cond);
-# ifdef EMULATE_ATOMIC_REFCOUNTS
- MUTEX_INIT(&PL_svref_mutex);
-# endif /* EMULATE_ATOMIC_REFCOUNTS */
-
- MUTEX_INIT(&PL_cred_mutex);
- MUTEX_INIT(&PL_sv_lock_mutex);
- MUTEX_INIT(&PL_fdpid_mutex);
-
- thr = init_main_thread();
-#endif /* USE_THREADS */
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- PL_protect = MEMBER_TO_FPTR(Perl_default_protect); /* for exceptions */
-#endif
-
- PL_curcop = &PL_compiling; /* needed by ckWARN, right away */
-
- PL_linestr = NEWSV(65,79);
- sv_upgrade(PL_linestr,SVt_PVIV);
-
- if (!SvREADONLY(&PL_sv_undef)) {
- /* set read-only and try to insure than we wont see REFCNT==0
- very often */
-
- SvREADONLY_on(&PL_sv_undef);
- SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
-
- sv_setpv(&PL_sv_no,PL_No);
- SvNV(&PL_sv_no);
- SvREADONLY_on(&PL_sv_no);
- SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
-
- sv_setpv(&PL_sv_yes,PL_Yes);
- SvNV(&PL_sv_yes);
- SvREADONLY_on(&PL_sv_yes);
- SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
- }
-
-#ifdef PERL_OBJECT
- /* TODO: */
- /* PL_sighandlerp = sighandler; */
-#else
- PL_sighandlerp = Perl_sighandler;
-#endif
- PL_pidstatus = newHV();
-
-#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
- }
-
- PL_nrs = newSVpvn("\n", 1);
- PL_rs = SvREFCNT_inc(PL_nrs);
-
- init_stacks();
-
- init_ids();
- PL_lex_state = LEX_NOTPARSING;
-
- JMPENV_BOOTSTRAP;
- STATUS_ALL_SUCCESS;
-
- init_i18nl10n(1);
- SET_NUMERIC_STANDARD();
-
- {
- U8 *s;
- PL_patchlevel = NEWSV(0,4);
- (void)SvUPGRADE(PL_patchlevel, SVt_PVNV);
- if (PERL_REVISION > 127 || PERL_VERSION > 127 || PERL_SUBVERSION > 127)
- SvGROW(PL_patchlevel, UTF8_MAXLEN*3+1);
- s = (U8*)SvPVX(PL_patchlevel);
- s = uv_to_utf8(s, (UV)PERL_REVISION);
- s = uv_to_utf8(s, (UV)PERL_VERSION);
- s = uv_to_utf8(s, (UV)PERL_SUBVERSION);
- *s = '\0';
- SvCUR_set(PL_patchlevel, s - (U8*)SvPVX(PL_patchlevel));
- SvPOK_on(PL_patchlevel);
- SvNVX(PL_patchlevel) = (NV)PERL_REVISION
- + ((NV)PERL_VERSION / (NV)1000)
-#if defined(PERL_SUBVERSION) && PERL_SUBVERSION > 0
- + ((NV)PERL_SUBVERSION / (NV)1000000)
-#endif
- ;
- SvNOK_on(PL_patchlevel); /* dual valued */
- SvUTF8_on(PL_patchlevel);
- SvREADONLY_on(PL_patchlevel);
- }
-
-#if defined(LOCAL_PATCH_COUNT)
- PL_localpatches = local_patches; /* For possible -v */
-#endif
-
-#ifdef HAVE_INTERP_INTERN
- sys_intern_init();
-#endif
-
- PerlIO_init(); /* Hook to IO system */
-
- PL_fdpid = newAV(); /* for remembering popen pids by fd */
- PL_modglobal = newHV(); /* pointers to per-interpreter module globals */
- PL_errors = newSVpvn("",0);
-
- ENTER;
-}
-
-/*
-=for apidoc perl_destruct
-
-Shuts down a Perl interpreter. See L<perlembed>.
-
-=cut
-*/
-
-void
-perl_destruct(pTHXx)
-{
- int destruct_level; /* 0=none, 1=full, 2=full with checks */
- HV *hv;
-#ifdef USE_THREADS
- Thread t;
- dTHX;
-#endif /* USE_THREADS */
-
- /* wait for all pseudo-forked children to finish */
- PERL_WAIT_FOR_CHILDREN;
-
-#ifdef USE_THREADS
-#ifndef FAKE_THREADS
- /* Pass 1 on any remaining threads: detach joinables, join zombies */
- retry_cleanup:
- MUTEX_LOCK(&PL_threads_mutex);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "perl_destruct: waiting for %d threads...\n",
- PL_nthreads - 1));
- for (t = thr->next; t != thr; t = t->next) {
- MUTEX_LOCK(&t->mutex);
- switch (ThrSTATE(t)) {
- AV *av;
- case THRf_ZOMBIE:
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "perl_destruct: joining zombie %p\n", t));
- ThrSETSTATE(t, THRf_DEAD);
- MUTEX_UNLOCK(&t->mutex);
- PL_nthreads--;
- /*
- * The SvREFCNT_dec below may take a long time (e.g. av
- * may contain an object scalar whose destructor gets
- * called) so we have to unlock threads_mutex and start
- * all over again.
- */
- MUTEX_UNLOCK(&PL_threads_mutex);
- JOIN(t, &av);
- SvREFCNT_dec((SV*)av);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "perl_destruct: joined zombie %p OK\n", t));
- goto retry_cleanup;
- case THRf_R_JOINABLE:
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "perl_destruct: detaching thread %p\n", t));
- ThrSETSTATE(t, THRf_R_DETACHED);
- /*
- * We unlock threads_mutex and t->mutex in the opposite order
- * from which we locked them just so that DETACH won't
- * deadlock if it panics. It's only a breach of good style
- * not a bug since they are unlocks not locks.
- */
- MUTEX_UNLOCK(&PL_threads_mutex);
- DETACH(t);
- MUTEX_UNLOCK(&t->mutex);
- goto retry_cleanup;
- default:
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "perl_destruct: ignoring %p (state %u)\n",
- t, ThrSTATE(t)));
- MUTEX_UNLOCK(&t->mutex);
- /* fall through and out */
- }
- }
- /* We leave the above "Pass 1" loop with threads_mutex still locked */
-
- /* Pass 2 on remaining threads: wait for the thread count to drop to one */
- while (PL_nthreads > 1)
- {
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "perl_destruct: final wait for %d threads\n",
- PL_nthreads - 1));
- COND_WAIT(&PL_nthreads_cond, &PL_threads_mutex);
- }
- /* At this point, we're the last thread */
- MUTEX_UNLOCK(&PL_threads_mutex);
- DEBUG_S(PerlIO_printf(Perl_debug_log, "perl_destruct: armageddon has arrived\n"));
- MUTEX_DESTROY(&PL_threads_mutex);
- COND_DESTROY(&PL_nthreads_cond);
- PL_nthreads--;
-#endif /* !defined(FAKE_THREADS) */
-#endif /* USE_THREADS */
-
- destruct_level = PL_perl_destruct_level;
-#ifdef DEBUGGING
- {
- char *s;
- if ((s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL"))) {
- int i = atoi(s);
- if (destruct_level < i)
- destruct_level = i;
- }
- }
-#endif
-
- LEAVE;
- FREETMPS;
-
- /* We must account for everything. */
-
- /* Destroy the main CV and syntax tree */
- if (PL_main_root) {
- PL_curpad = AvARRAY(PL_comppad);
- op_free(PL_main_root);
- PL_main_root = Nullop;
- }
- PL_curcop = &PL_compiling;
- PL_main_start = Nullop;
- SvREFCNT_dec(PL_main_cv);
- PL_main_cv = Nullcv;
- PL_dirty = TRUE;
-
- if (PL_sv_objcount) {
- /*
- * Try to destruct global references. We do this first so that the
- * destructors and destructees still exist. Some sv's might remain.
- * Non-referenced objects are on their own.
- */
- sv_clean_objs();
- }
-
- /* unhook hooks which will soon be, or use, destroyed data */
- SvREFCNT_dec(PL_warnhook);
- PL_warnhook = Nullsv;
- SvREFCNT_dec(PL_diehook);
- PL_diehook = Nullsv;
-
- /* call exit list functions */
- while (PL_exitlistlen-- > 0)
- PL_exitlist[PL_exitlistlen].fn(aTHXo_ PL_exitlist[PL_exitlistlen].ptr);
-
- Safefree(PL_exitlist);
-
- if (destruct_level == 0){
-
- DEBUG_P(debprofdump());
-
- /* The exit() function will do everything that needs doing. */
- return;
- }
-
- /* jettison our possibly duplicated environment */
-
-#ifdef USE_ENVIRON_ARRAY
- if (environ != PL_origenviron) {
- I32 i;
-
- for (i = 0; environ[i]; i++)
- safesysfree(environ[i]);
- /* Must use safesysfree() when working with environ. */
- safesysfree(environ);
-
- environ = PL_origenviron;
- }
-#endif
-
- /* loosen bonds of global variables */
-
- if(PL_rsfp) {
- (void)PerlIO_close(PL_rsfp);
- PL_rsfp = Nullfp;
- }
-
- /* Filters for program text */
- SvREFCNT_dec(PL_rsfp_filters);
- PL_rsfp_filters = Nullav;
-
- /* switches */
- PL_preprocess = FALSE;
- PL_minus_n = FALSE;
- PL_minus_p = FALSE;
- PL_minus_l = FALSE;
- PL_minus_a = FALSE;
- PL_minus_F = FALSE;
- PL_doswitches = FALSE;
- PL_dowarn = G_WARN_OFF;
- PL_doextract = FALSE;
- PL_sawampersand = FALSE; /* must save all match strings */
- PL_unsafe = FALSE;
-
- Safefree(PL_inplace);
- PL_inplace = Nullch;
- SvREFCNT_dec(PL_patchlevel);
-
- if (PL_e_script) {
- SvREFCNT_dec(PL_e_script);
- PL_e_script = Nullsv;
- }
-
- /* magical thingies */
-
- Safefree(PL_ofs); /* $, */
- PL_ofs = Nullch;
-
- Safefree(PL_ors); /* $\ */
- PL_ors = Nullch;
-
- SvREFCNT_dec(PL_rs); /* $/ */
- PL_rs = Nullsv;
-
- SvREFCNT_dec(PL_nrs); /* $/ helper */
- PL_nrs = Nullsv;
-
- PL_multiline = 0; /* $* */
- Safefree(PL_osname); /* $^O */
- PL_osname = Nullch;
-
- SvREFCNT_dec(PL_statname);
- PL_statname = Nullsv;
- PL_statgv = Nullgv;
-
- /* defgv, aka *_ should be taken care of elsewhere */
-
- /* clean up after study() */
- SvREFCNT_dec(PL_lastscream);
- PL_lastscream = Nullsv;
- Safefree(PL_screamfirst);
- PL_screamfirst = 0;
- Safefree(PL_screamnext);
- PL_screamnext = 0;
-
- /* float buffer */
- Safefree(PL_efloatbuf);
- PL_efloatbuf = Nullch;
- PL_efloatsize = 0;
-
- /* startup and shutdown function lists */
- SvREFCNT_dec(PL_beginav);
- SvREFCNT_dec(PL_endav);
- SvREFCNT_dec(PL_checkav);
- SvREFCNT_dec(PL_initav);
- PL_beginav = Nullav;
- PL_endav = Nullav;
- PL_checkav = Nullav;
- PL_initav = Nullav;
-
- /* shortcuts just get cleared */
- PL_envgv = Nullgv;
- PL_incgv = Nullgv;
- PL_hintgv = Nullgv;
- PL_errgv = Nullgv;
- PL_argvgv = Nullgv;
- PL_argvoutgv = Nullgv;
- PL_stdingv = Nullgv;
- PL_stderrgv = Nullgv;
- PL_last_in_gv = Nullgv;
- PL_replgv = Nullgv;
- PL_debstash = Nullhv;
-
- /* reset so print() ends up where we expect */
- setdefout(Nullgv);
-
- SvREFCNT_dec(PL_argvout_stack);
- PL_argvout_stack = Nullav;
-
- SvREFCNT_dec(PL_modglobal);
- PL_modglobal = Nullhv;
- SvREFCNT_dec(PL_preambleav);
- PL_preambleav = Nullav;
- SvREFCNT_dec(PL_subname);
- PL_subname = Nullsv;
- SvREFCNT_dec(PL_linestr);
- PL_linestr = Nullsv;
- SvREFCNT_dec(PL_pidstatus);
- PL_pidstatus = Nullhv;
- SvREFCNT_dec(PL_toptarget);
- PL_toptarget = Nullsv;
- SvREFCNT_dec(PL_bodytarget);
- PL_bodytarget = Nullsv;
- PL_formtarget = Nullsv;
-
- /* free locale stuff */
-#ifdef USE_LOCALE_COLLATE
- Safefree(PL_collation_name);
- PL_collation_name = Nullch;
-#endif
-
-#ifdef USE_LOCALE_NUMERIC
- Safefree(PL_numeric_name);
- PL_numeric_name = Nullch;
- SvREFCNT_dec(PL_numeric_radix_sv);
-#endif
-
- /* clear utf8 character classes */
- SvREFCNT_dec(PL_utf8_alnum);
- SvREFCNT_dec(PL_utf8_alnumc);
- SvREFCNT_dec(PL_utf8_ascii);
- SvREFCNT_dec(PL_utf8_alpha);
- SvREFCNT_dec(PL_utf8_space);
- SvREFCNT_dec(PL_utf8_cntrl);
- SvREFCNT_dec(PL_utf8_graph);
- SvREFCNT_dec(PL_utf8_digit);
- SvREFCNT_dec(PL_utf8_upper);
- SvREFCNT_dec(PL_utf8_lower);
- SvREFCNT_dec(PL_utf8_print);
- SvREFCNT_dec(PL_utf8_punct);
- SvREFCNT_dec(PL_utf8_xdigit);
- SvREFCNT_dec(PL_utf8_mark);
- SvREFCNT_dec(PL_utf8_toupper);
- SvREFCNT_dec(PL_utf8_tolower);
- PL_utf8_alnum = Nullsv;
- PL_utf8_alnumc = Nullsv;
- PL_utf8_ascii = Nullsv;
- PL_utf8_alpha = Nullsv;
- PL_utf8_space = Nullsv;
- PL_utf8_cntrl = Nullsv;
- PL_utf8_graph = Nullsv;
- PL_utf8_digit = Nullsv;
- PL_utf8_upper = Nullsv;
- PL_utf8_lower = Nullsv;
- PL_utf8_print = Nullsv;
- PL_utf8_punct = Nullsv;
- PL_utf8_xdigit = Nullsv;
- PL_utf8_mark = Nullsv;
- PL_utf8_toupper = Nullsv;
- PL_utf8_totitle = Nullsv;
- PL_utf8_tolower = Nullsv;
-
- if (!specialWARN(PL_compiling.cop_warnings))
- SvREFCNT_dec(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = Nullsv;
-#ifdef USE_ITHREADS
- Safefree(CopFILE(&PL_compiling));
- CopFILE(&PL_compiling) = Nullch;
- Safefree(CopSTASHPV(&PL_compiling));
-#else
- SvREFCNT_dec(CopFILEGV(&PL_compiling));
- CopFILEGV(&PL_compiling) = Nullgv;
- /* cop_stash is not refcounted */
-#endif
-
- /* Prepare to destruct main symbol table. */
-
- hv = PL_defstash;
- PL_defstash = 0;
- SvREFCNT_dec(hv);
- SvREFCNT_dec(PL_curstname);
- PL_curstname = Nullsv;
-
- /* clear queued errors */
- SvREFCNT_dec(PL_errors);
- PL_errors = Nullsv;
-
- FREETMPS;
- if (destruct_level >= 2 && ckWARN_d(WARN_INTERNAL)) {
- if (PL_scopestack_ix != 0)
- Perl_warner(aTHX_ WARN_INTERNAL,
- "Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
- (long)PL_scopestack_ix);
- if (PL_savestack_ix != 0)
- Perl_warner(aTHX_ WARN_INTERNAL,
- "Unbalanced saves: %ld more saves than restores\n",
- (long)PL_savestack_ix);
- if (PL_tmps_floor != -1)
- Perl_warner(aTHX_ WARN_INTERNAL,"Unbalanced tmps: %ld more allocs than frees\n",
- (long)PL_tmps_floor + 1);
- if (cxstack_ix != -1)
- Perl_warner(aTHX_ WARN_INTERNAL,"Unbalanced context: %ld more PUSHes than POPs\n",
- (long)cxstack_ix + 1);
- }
-
- /* Now absolutely destruct everything, somehow or other, loops or no. */
- SvFLAGS(PL_fdpid) |= SVTYPEMASK; /* don't clean out pid table now */
- SvFLAGS(PL_strtab) |= SVTYPEMASK; /* don't clean out strtab now */
-
- /* the 2 is for PL_fdpid and PL_strtab */
- while (PL_sv_count > 2 && sv_clean_all())
- ;
-
- SvFLAGS(PL_fdpid) &= ~SVTYPEMASK;
- SvFLAGS(PL_fdpid) |= SVt_PVAV;
- SvFLAGS(PL_strtab) &= ~SVTYPEMASK;
- SvFLAGS(PL_strtab) |= SVt_PVHV;
-
- AvREAL_off(PL_fdpid); /* no surviving entries */
- SvREFCNT_dec(PL_fdpid); /* needed in io_close() */
- PL_fdpid = Nullav;
-
-#ifdef HAVE_INTERP_INTERN
- sys_intern_clear();
-#endif
-
- /* Destruct the global string table. */
- {
- /* Yell and reset the HeVAL() slots that are still holding refcounts,
- * so that sv_free() won't fail on them.
- */
- I32 riter;
- I32 max;
- HE *hent;
- HE **array;
-
- riter = 0;
- max = HvMAX(PL_strtab);
- array = HvARRAY(PL_strtab);
- hent = array[0];
- for (;;) {
- if (hent && ckWARN_d(WARN_INTERNAL)) {
- Perl_warner(aTHX_ WARN_INTERNAL,
- "Unbalanced string table refcount: (%d) for \"%s\"",
- HeVAL(hent) - Nullsv, HeKEY(hent));
- HeVAL(hent) = Nullsv;
- hent = HeNEXT(hent);
- }
- if (!hent) {
- if (++riter > max)
- break;
- hent = array[riter];
- }
- }
- }
- SvREFCNT_dec(PL_strtab);
-
-#ifdef USE_ITHREADS
- /* free the pointer table used for cloning */
- ptr_table_free(PL_ptr_table);
-#endif
-
- /* free special SVs */
-
- SvREFCNT(&PL_sv_yes) = 0;
- sv_clear(&PL_sv_yes);
- SvANY(&PL_sv_yes) = NULL;
- SvFLAGS(&PL_sv_yes) = 0;
-
- SvREFCNT(&PL_sv_no) = 0;
- sv_clear(&PL_sv_no);
- SvANY(&PL_sv_no) = NULL;
- SvFLAGS(&PL_sv_no) = 0;
-
- SvREFCNT(&PL_sv_undef) = 0;
- SvREADONLY_off(&PL_sv_undef);
-
- if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL,"Scalars leaked: %ld\n", (long)PL_sv_count);
-
- Safefree(PL_origfilename);
- Safefree(PL_reg_start_tmp);
- if (PL_reg_curpm)
- Safefree(PL_reg_curpm);
- Safefree(PL_reg_poscache);
- Safefree(HeKEY_hek(&PL_hv_fetch_ent_mh));
- Safefree(PL_op_mask);
- Safefree(PL_psig_ptr);
- Safefree(PL_psig_name);
- Safefree(PL_bitcount);
- nuke_stacks();
- PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */
-
- DEBUG_P(debprofdump());
-#ifdef USE_THREADS
- MUTEX_DESTROY(&PL_strtab_mutex);
- MUTEX_DESTROY(&PL_sv_mutex);
- MUTEX_DESTROY(&PL_eval_mutex);
- MUTEX_DESTROY(&PL_cred_mutex);
- MUTEX_DESTROY(&PL_fdpid_mutex);
- COND_DESTROY(&PL_eval_cond);
-#ifdef EMULATE_ATOMIC_REFCOUNTS
- MUTEX_DESTROY(&PL_svref_mutex);
-#endif /* EMULATE_ATOMIC_REFCOUNTS */
-
- /* As the penultimate thing, free the non-arena SV for thrsv */
- Safefree(SvPVX(PL_thrsv));
- Safefree(SvANY(PL_thrsv));
- Safefree(PL_thrsv);
- PL_thrsv = Nullsv;
-#endif /* USE_THREADS */
-
- sv_free_arenas();
-
- /* As the absolutely last thing, free the non-arena SV for mess() */
-
- if (PL_mess_sv) {
- /* it could have accumulated taint magic */
- if (SvTYPE(PL_mess_sv) >= SVt_PVMG) {
- MAGIC* mg;
- MAGIC* moremagic;
- for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
- moremagic = mg->mg_moremagic;
- if (mg->mg_ptr && mg->mg_type != 'g' && mg->mg_len >= 0)
- Safefree(mg->mg_ptr);
- Safefree(mg);
- }
- }
- /* we know that type >= SVt_PV */
- (void)SvOOK_off(PL_mess_sv);
- Safefree(SvPVX(PL_mess_sv));
- Safefree(SvANY(PL_mess_sv));
- Safefree(PL_mess_sv);
- PL_mess_sv = Nullsv;
- }
-}
-
-/*
-=for apidoc perl_free
-
-Releases a Perl interpreter. See L<perlembed>.
-
-=cut
-*/
-
-void
-perl_free(pTHXx)
-{
-#if defined(PERL_OBJECT)
- PerlMem_free(this);
-#else
-# if defined(PERL_IMPLICIT_SYS) && defined(WIN32)
- void *host = w32_internal_host;
- PerlMem_free(aTHXx);
- win32_delete_internal_host(host);
-# else
- PerlMem_free(aTHXx);
-# endif
-#endif
-}
-
-void
-Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
-{
- Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
- PL_exitlist[PL_exitlistlen].fn = fn;
- PL_exitlist[PL_exitlistlen].ptr = ptr;
- ++PL_exitlistlen;
-}
-
-/*
-=for apidoc perl_parse
-
-Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
-
-=cut
-*/
-
-int
-perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
-{
- I32 oldscope;
- int ret;
- dJMPENV;
-#ifdef USE_THREADS
- dTHX;
-#endif
-
-#ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
-#ifdef IAMSUID
-#undef IAMSUID
- Perl_croak(aTHX_ "suidperl is no longer needed since the kernel can now execute\n\
-setuid perl scripts securely.\n");
-#endif
-#endif
-
-#if defined(__DYNAMIC__) && (defined(NeXT) || defined(__NeXT__))
- _dyld_lookup_and_bind
- ("__environ", (unsigned long *) &environ_pointer, NULL);
-#endif /* environ */
-
- PL_origargv = argv;
- PL_origargc = argc;
-#ifdef USE_ENVIRON_ARRAY
- PL_origenviron = environ;
-#endif
-
- if (PL_do_undump) {
-
- /* Come here if running an undumped a.out. */
-
- PL_origfilename = savepv(argv[0]);
- PL_do_undump = FALSE;
- cxstack_ix = -1; /* start label stack again */
- init_ids();
- init_postdump_symbols(argc,argv,env);
- return 0;
- }
-
- if (PL_main_root) {
- PL_curpad = AvARRAY(PL_comppad);
- op_free(PL_main_root);
- PL_main_root = Nullop;
- }
- PL_main_start = Nullop;
- SvREFCNT_dec(PL_main_cv);
- PL_main_cv = Nullcv;
-
- time(&PL_basetime);
- oldscope = PL_scopestack_ix;
- PL_dowarn = G_WARN_OFF;
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vparse_body), env, xsinit);
-#else
- JMPENV_PUSH(ret);
-#endif
- switch (ret) {
- case 0:
-#ifndef PERL_FLEXIBLE_EXCEPTIONS
- parse_body(env,xsinit);
-#endif
- if (PL_checkav)
- call_list(oldscope, PL_checkav);
- ret = 0;
- break;
- case 1:
- STATUS_ALL_FAILURE;
- /* FALL THROUGH */
- case 2:
- /* my_exit() was called */
- while (PL_scopestack_ix > oldscope)
- LEAVE;
- FREETMPS;
- PL_curstash = PL_defstash;
- if (PL_checkav)
- call_list(oldscope, PL_checkav);
- ret = STATUS_NATIVE_EXPORT;
- break;
- case 3:
- PerlIO_printf(Perl_error_log, "panic: top_env\n");
- ret = 1;
- break;
- }
- JMPENV_POP;
- return ret;
-}
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-STATIC void *
-S_vparse_body(pTHX_ va_list args)
-{
- char **env = va_arg(args, char**);
- XSINIT_t xsinit = va_arg(args, XSINIT_t);
-
- return parse_body(env, xsinit);
-}
-#endif
-
-STATIC void *
-S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
-{
- int argc = PL_origargc;
- char **argv = PL_origargv;
- char *scriptname = NULL;
- int fdscript = -1;
- VOL bool dosearch = FALSE;
- char *validarg = "";
- AV* comppadlist;
- register SV *sv;
- register char *s;
- char *cddir = Nullch;
-
- sv_setpvn(PL_linestr,"",0);
- sv = newSVpvn("",0); /* first used for -I flags */
- SAVEFREESV(sv);
- init_main_stash();
-
- 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 'C':
-#ifdef WIN32
- win32_argv2utf8(argc-1, argv+1);
- /* FALL THROUGH */
-#endif
-#ifndef PERL_STRICT_CR
- case '\r':
-#endif
- case ' ':
- case '0':
- case 'F':
- case 'a':
- case 'c':
- case 'd':
- case 'D':
- case 'h':
- case 'i':
- case 'l':
- case 'M':
- case 'm':
- case 'n':
- case 'p':
- case 's':
- case 'u':
- case 'U':
- case 'v':
- case 'W':
- case 'X':
- case 'w':
- if ((s = moreswitches(s)))
- goto reswitch;
- break;
-
- case 'T':
- PL_tainting = TRUE;
- s++;
- goto reswitch;
-
- case 'e':
-#ifdef MACOS_TRADITIONAL
- /* ignore -e for Dev:Pseudo argument */
- if (argv[1] && !strcmp(argv[1], "Dev:Pseudo"))
- break;
-#endif
- if (PL_euid != PL_uid || PL_egid != PL_gid)
- Perl_croak(aTHX_ "No -e allowed in setuid scripts");
- if (!PL_e_script) {
- PL_e_script = newSVpvn("",0);
- filter_add(read_e_script, NULL);
- }
- if (*++s)
- sv_catpv(PL_e_script, s);
- else if (argv[1]) {
- sv_catpv(PL_e_script, argv[1]);
- argc--,argv++;
- }
- else
- Perl_croak(aTHX_ "No code specified for -e");
- sv_catpv(PL_e_script, "\n");
- break;
-
- case 'I': /* -I handled both here and in moreswitches() */
- forbid_setid("-I");
- if (!*++s && (s=argv[1]) != Nullch) {
- argc--,argv++;
- }
- if (s && *s) {
- char *p;
- STRLEN len = strlen(s);
- p = savepvn(s, len);
- incpush(p, TRUE, TRUE);
- sv_catpvn(sv, "-I", 2);
- sv_catpvn(sv, p, len);
- sv_catpvn(sv, " ", 1);
- Safefree(p);
- }
- else
- Perl_croak(aTHX_ "No directory specified for -I");
- break;
- case 'P':
- forbid_setid("-P");
- PL_preprocess = TRUE;
- s++;
- goto reswitch;
- case 'S':
- forbid_setid("-S");
- dosearch = TRUE;
- s++;
- goto reswitch;
- case 'V':
- if (!PL_preambleav)
- PL_preambleav = newAV();
- av_push(PL_preambleav, newSVpv("use Config qw(myconfig config_vars)",0));
- if (*++s != ':') {
- PL_Sv = newSVpv("print myconfig();",0);
-#ifdef VMS
- sv_catpv(PL_Sv,"print \"\\nCharacteristics of this PERLSHR image: \\n\",");
-#else
- sv_catpv(PL_Sv,"print \"\\nCharacteristics of this binary (from libperl): \\n\",");
-#endif
- sv_catpv(PL_Sv,"\" Compile-time options:");
-# ifdef DEBUGGING
- sv_catpv(PL_Sv," DEBUGGING");
-# endif
-# ifdef MULTIPLICITY
- sv_catpv(PL_Sv," MULTIPLICITY");
-# endif
-# ifdef USE_THREADS
- sv_catpv(PL_Sv," USE_THREADS");
-# endif
-# ifdef USE_ITHREADS
- sv_catpv(PL_Sv," USE_ITHREADS");
-# endif
-# ifdef USE_64_BIT_INT
- sv_catpv(PL_Sv," USE_64_BIT_INT");
-# endif
-# ifdef USE_64_BIT_ALL
- sv_catpv(PL_Sv," USE_64_BIT_ALL");
-# endif
-# ifdef USE_LONG_DOUBLE
- sv_catpv(PL_Sv," USE_LONG_DOUBLE");
-# endif
-# ifdef USE_LARGE_FILES
- sv_catpv(PL_Sv," USE_LARGE_FILES");
-# endif
-# ifdef USE_SOCKS
- sv_catpv(PL_Sv," USE_SOCKS");
-# endif
-# ifdef PERL_OBJECT
- sv_catpv(PL_Sv," PERL_OBJECT");
-# endif
-# ifdef PERL_IMPLICIT_CONTEXT
- sv_catpv(PL_Sv," PERL_IMPLICIT_CONTEXT");
-# endif
-# ifdef PERL_IMPLICIT_SYS
- sv_catpv(PL_Sv," PERL_IMPLICIT_SYS");
-# endif
- sv_catpv(PL_Sv,"\\n\",");
-
-#if defined(LOCAL_PATCH_COUNT)
- if (LOCAL_PATCH_COUNT > 0) {
- int i;
- sv_catpv(PL_Sv,"\" Locally applied patches:\\n\",");
- for (i = 1; i <= LOCAL_PATCH_COUNT; i++) {
- if (PL_localpatches[i])
- Perl_sv_catpvf(aTHX_ PL_Sv,"q\" \t%s\n\",",PL_localpatches[i]);
- }
- }
-#endif
- Perl_sv_catpvf(aTHX_ PL_Sv,"\" Built under %s\\n\"",OSNAME);
-#ifdef __DATE__
-# ifdef __TIME__
- Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled at %s %s\\n\"",__DATE__,__TIME__);
-# else
- Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled on %s\\n\"",__DATE__);
-# endif
-#endif
- sv_catpv(PL_Sv, "; \
-$\"=\"\\n \"; \
-@env = map { \"$_=\\\"$ENV{$_}\\\"\" } sort grep {/^PERL/} keys %ENV; \
-print \" \\%ENV:\\n @env\\n\" if @env; \
-print \" \\@INC:\\n @INC\\n\";");
- }
- else {
- PL_Sv = newSVpv("config_vars(qw(",0);
- sv_catpv(PL_Sv, ++s);
- sv_catpv(PL_Sv, "))");
- s += strlen(s);
- }
- av_push(PL_preambleav, PL_Sv);
- scriptname = BIT_BUCKET; /* don't look for script or read stdin */
- goto reswitch;
- case 'x':
- PL_doextract = TRUE;
- s++;
- if (*s)
- cddir = s;
- break;
- case 0:
- break;
- case '-':
- if (!*++s || isSPACE(*s)) {
- argc--,argv++;
- goto switch_end;
- }
- /* catch use of gnu style long options */
- if (strEQ(s, "version")) {
- s = "v";
- goto reswitch;
- }
- if (strEQ(s, "help")) {
- s = "h";
- goto reswitch;
- }
- s--;
- /* FALL THROUGH */
- default:
- Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s);
- }
- }
- switch_end:
-
- if (
-#ifndef SECURE_INTERNAL_GETENV
- !PL_tainting &&
-#endif
- (s = PerlEnv_getenv("PERL5OPT")))
- {
- while (isSPACE(*s))
- s++;
- if (*s == '-' && *(s+1) == 'T')
- PL_tainting = TRUE;
- else {
- while (s && *s) {
- char *d;
- while (isSPACE(*s))
- s++;
- if (*s == '-') {
- s++;
- if (isSPACE(*s))
- continue;
- }
- d = s;
- if (!*s)
- break;
- if (!strchr("DIMUdmw", *s))
- Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
- while (++s && *s) {
- if (isSPACE(*s)) {
- *s++ = '\0';
- break;
- }
- }
- moreswitches(d);
- }
- }
- }
-
- if (!scriptname)
- scriptname = argv[0];
- if (PL_e_script) {
- argc++,argv--;
- scriptname = BIT_BUCKET; /* don't look for script or read stdin */
- }
- else if (scriptname == Nullch) {
-#ifdef MSDOS
- if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
- moreswitches("h");
-#endif
- scriptname = "-";
- }
-
- init_perllib();
-
- open_script(scriptname,dosearch,sv,&fdscript);
-
- validate_suid(validarg, scriptname,fdscript);
-
-#if defined(SIGCHLD) || defined(SIGCLD)
- {
-#ifndef SIGCHLD
-# define SIGCHLD SIGCLD
-#endif
- Sighandler_t sigstate = rsignal_state(SIGCHLD);
- if (sigstate == SIG_IGN) {
- if (ckWARN(WARN_SIGNAL))
- Perl_warner(aTHX_ WARN_SIGNAL,
- "Can't ignore signal CHLD, forcing to default");
- (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL);
- }
- }
-#endif
-
-#ifdef MACOS_TRADITIONAL
- if (PL_doextract || gMacPerl_AlwaysExtract) {
-#else
- if (PL_doextract) {
-#endif
- find_beginning();
- if (cddir && PerlDir_chdir(cddir) < 0)
- Perl_croak(aTHX_ "Can't chdir to %s",cddir);
-
- }
-
- PL_main_cv = PL_compcv = (CV*)NEWSV(1104,0);
- sv_upgrade((SV *)PL_compcv, SVt_PVCV);
- CvUNIQUE_on(PL_compcv);
-
- PL_comppad = newAV();
- av_push(PL_comppad, Nullsv);
- PL_curpad = AvARRAY(PL_comppad);
- PL_comppad_name = newAV();
- PL_comppad_name_fill = 0;
- PL_min_intro_pending = 0;
- PL_padix = 0;
-#ifdef USE_THREADS
- av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
- PL_curpad[0] = (SV*)newAV();
- SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
- CvOWNER(PL_compcv) = 0;
- New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
- MUTEX_INIT(CvMUTEXP(PL_compcv));
-#endif /* USE_THREADS */
-
- comppadlist = newAV();
- AvREAL_off(comppadlist);
- av_store(comppadlist, 0, (SV*)PL_comppad_name);
- av_store(comppadlist, 1, (SV*)PL_comppad);
- CvPADLIST(PL_compcv) = comppadlist;
-
- boot_core_UNIVERSAL();
-#ifndef PERL_MICRO
- boot_core_xsutils();
-#endif
-
- if (xsinit)
- (*xsinit)(aTHXo); /* in case linked C routines want magical variables */
-#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC)
- init_os_extras();
-#endif
-
-#ifdef USE_SOCKS
-# ifdef HAS_SOCKS5_INIT
- socks5_init(argv[0]);
-# else
- SOCKSinit(argv[0]);
-# endif
-#endif
-
- init_predump_symbols();
- /* init_postdump_symbols not currently designed to be called */
- /* more than once (ENV isn't cleared first, for example) */
- /* But running with -u leaves %ENV & @ARGV undefined! XXX */
- if (!PL_do_undump)
- init_postdump_symbols(argc,argv,env);
-
- init_lexer();
-
- /* now parse the script */
-
- SETERRNO(0,SS$_NORMAL);
- PL_error_count = 0;
-#ifdef MACOS_TRADITIONAL
- if (gMacPerl_SyntaxError = (yyparse() || PL_error_count)) {
- if (PL_minus_c)
- Perl_croak(aTHX_ "%s had compilation errors.\n", MacPerl_MPWFileName(PL_origfilename));
- else {
- Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
- MacPerl_MPWFileName(PL_origfilename));
- }
- }
-#else
- if (yyparse() || PL_error_count) {
- if (PL_minus_c)
- Perl_croak(aTHX_ "%s had compilation errors.\n", PL_origfilename);
- else {
- Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
- PL_origfilename);
- }
- }
-#endif
- CopLINE_set(PL_curcop, 0);
- PL_curstash = PL_defstash;
- PL_preprocess = FALSE;
- if (PL_e_script) {
- SvREFCNT_dec(PL_e_script);
- PL_e_script = Nullsv;
- }
-
- /* now that script is parsed, we can modify record separator */
- SvREFCNT_dec(PL_rs);
- PL_rs = SvREFCNT_inc(PL_nrs);
- sv_setsv(get_sv("/", TRUE), PL_rs);
- if (PL_do_undump)
- my_unexec();
-
- if (isWARN_ONCE) {
- SAVECOPFILE(PL_curcop);
- SAVECOPLINE(PL_curcop);
- gv_check(PL_defstash);
- }
-
- LEAVE;
- FREETMPS;
-
-#ifdef MYMALLOC
- if ((s=PerlEnv_getenv("PERL_DEBUG_MSTATS")) && atoi(s) >= 2)
- dump_mstats("after compilation:");
-#endif
-
- ENTER;
- PL_restartop = 0;
- return NULL;
-}
-
-/*
-=for apidoc perl_run
-
-Tells a Perl interpreter to run. See L<perlembed>.
-
-=cut
-*/
-
-int
-perl_run(pTHXx)
-{
- I32 oldscope;
- int ret = 0;
- dJMPENV;
-#ifdef USE_THREADS
- dTHX;
-#endif
-
- oldscope = PL_scopestack_ix;
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- redo_body:
- CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vrun_body), oldscope);
-#else
- JMPENV_PUSH(ret);
-#endif
- switch (ret) {
- case 1:
- cxstack_ix = -1; /* start context stack again */
- goto redo_body;
- case 0: /* normal completion */
-#ifndef PERL_FLEXIBLE_EXCEPTIONS
- redo_body:
- run_body(oldscope);
-#endif
- /* FALL THROUGH */
- case 2: /* my_exit() */
- while (PL_scopestack_ix > oldscope)
- LEAVE;
- FREETMPS;
- PL_curstash = PL_defstash;
- if (PL_endav && !PL_minus_c)
- call_list(oldscope, PL_endav);
-#ifdef MYMALLOC
- if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
- dump_mstats("after execution: ");
-#endif
- ret = STATUS_NATIVE_EXPORT;
- break;
- case 3:
- if (PL_restartop) {
- POPSTACK_TO(PL_mainstack);
- goto redo_body;
- }
- PerlIO_printf(Perl_error_log, "panic: restartop\n");
- FREETMPS;
- ret = 1;
- break;
- }
-
- JMPENV_POP;
- return ret;
-}
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-STATIC void *
-S_vrun_body(pTHX_ va_list args)
-{
- I32 oldscope = va_arg(args, I32);
-
- return run_body(oldscope);
-}
-#endif
-
-
-STATIC void *
-S_run_body(pTHX_ I32 oldscope)
-{
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support.\n",
- PL_sawampersand ? "Enabling" : "Omitting"));
-
- if (!PL_restartop) {
- DEBUG_x(dump_all());
- DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
- DEBUG_S(PerlIO_printf(Perl_debug_log, "main thread is 0x%"UVxf"\n",
- PTR2UV(thr)));
-
- if (PL_minus_c) {
-#ifdef MACOS_TRADITIONAL
- PerlIO_printf(Perl_error_log, "%s syntax OK\n", MacPerl_MPWFileName(PL_origfilename));
-#else
- PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename);
-#endif
- my_exit(0);
- }
- if (PERLDB_SINGLE && PL_DBsingle)
- sv_setiv(PL_DBsingle, 1);
- if (PL_initav)
- call_list(oldscope, PL_initav);
- }
-
- /* do it */
-
- if (PL_restartop) {
- PL_op = PL_restartop;
- PL_restartop = 0;
- CALLRUNOPS(aTHX);
- }
- else if (PL_main_start) {
- CvDEPTH(PL_main_cv) = 1;
- PL_op = PL_main_start;
- CALLRUNOPS(aTHX);
- }
-
- my_exit(0);
- /* NOTREACHED */
- return NULL;
-}
-
-/*
-=for apidoc p||get_sv
-
-Returns the SV of the specified Perl scalar. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-=cut
-*/
-
-SV*
-Perl_get_sv(pTHX_ const char *name, I32 create)
-{
- GV *gv;
-#ifdef USE_THREADS
- if (name[1] == '\0' && !isALPHA(name[0])) {
- PADOFFSET tmp = find_threadsv(name);
- if (tmp != NOT_IN_PAD)
- return THREADSV(tmp);
- }
-#endif /* USE_THREADS */
- gv = gv_fetchpv(name, create, SVt_PV);
- if (gv)
- return GvSV(gv);
- return Nullsv;
-}
-
-/*
-=for apidoc p||get_av
-
-Returns the AV of the specified Perl array. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-=cut
-*/
-
-AV*
-Perl_get_av(pTHX_ const char *name, I32 create)
-{
- GV* gv = gv_fetchpv(name, create, SVt_PVAV);
- if (create)
- return GvAVn(gv);
- if (gv)
- return GvAV(gv);
- return Nullav;
-}
-
-/*
-=for apidoc p||get_hv
-
-Returns the HV of the specified Perl hash. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-=cut
-*/
-
-HV*
-Perl_get_hv(pTHX_ const char *name, I32 create)
-{
- GV* gv = gv_fetchpv(name, create, SVt_PVHV);
- if (create)
- return GvHVn(gv);
- if (gv)
- return GvHV(gv);
- return Nullhv;
-}
-
-/*
-=for apidoc p||get_cv
-
-Returns the CV of the specified Perl subroutine. If C<create> is set and
-the Perl subroutine does not exist then it will be declared (which has the
-same effect as saying C<sub name;>). If C<create> is not set and the
-subroutine does not exist then NULL is returned.
-
-=cut
-*/
-
-CV*
-Perl_get_cv(pTHX_ const char *name, I32 create)
-{
- GV* gv = gv_fetchpv(name, create, SVt_PVCV);
- /* XXX unsafe for threads if eval_owner isn't held */
- /* XXX this is probably not what they think they're getting.
- * It has the same effect as "sub name;", i.e. just a forward
- * declaration! */
- if (create && !GvCVu(gv))
- return newSUB(start_subparse(FALSE, 0),
- newSVOP(OP_CONST, 0, newSVpv(name,0)),
- Nullop,
- Nullop);
- if (gv)
- return GvCVu(gv);
- return Nullcv;
-}
-
-/* Be sure to refetch the stack pointer after calling these routines. */
-
-/*
-=for apidoc p||call_argv
-
-Performs a callback to the specified Perl sub. See L<perlcall>.
-
-=cut
-*/
-
-I32
-Perl_call_argv(pTHX_ const char *sub_name, I32 flags, register char **argv)
-
- /* See G_* flags in cop.h */
- /* null terminated arg list */
-{
- dSP;
-
- PUSHMARK(SP);
- if (argv) {
- while (*argv) {
- XPUSHs(sv_2mortal(newSVpv(*argv,0)));
- argv++;
- }
- PUTBACK;
- }
- return call_pv(sub_name, flags);
-}
-
-/*
-=for apidoc p||call_pv
-
-Performs a callback to the specified Perl sub. See L<perlcall>.
-
-=cut
-*/
-
-I32
-Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
- /* name of the subroutine */
- /* See G_* flags in cop.h */
-{
- return call_sv((SV*)get_cv(sub_name, TRUE), flags);
-}
-
-/*
-=for apidoc p||call_method
-
-Performs a callback to the specified Perl method. The blessed object must
-be on the stack. See L<perlcall>.
-
-=cut
-*/
-
-I32
-Perl_call_method(pTHX_ const char *methname, I32 flags)
- /* name of the subroutine */
- /* See G_* flags in cop.h */
-{
- return call_sv(sv_2mortal(newSVpv(methname,0)), flags | G_METHOD);
-}
-
-/* May be called with any of a CV, a GV, or an SV containing the name. */
-/*
-=for apidoc p||call_sv
-
-Performs a callback to the Perl sub whose name is in the SV. See
-L<perlcall>.
-
-=cut
-*/
-
-I32
-Perl_call_sv(pTHX_ SV *sv, I32 flags)
- /* See G_* flags in cop.h */
-{
- dSP;
- LOGOP myop; /* fake syntax tree node */
- UNOP method_op;
- I32 oldmark;
- I32 retval;
- I32 oldscope;
- bool oldcatch = CATCH_GET;
- int ret;
- OP* oldop = PL_op;
- dJMPENV;
-
- if (flags & G_DISCARD) {
- ENTER;
- SAVETMPS;
- }
-
- Zero(&myop, 1, LOGOP);
- myop.op_next = Nullop;
- if (!(flags & G_NOARGS))
- myop.op_flags |= OPf_STACKED;
- myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
- (flags & G_ARRAY) ? OPf_WANT_LIST :
- OPf_WANT_SCALAR);
- SAVEOP();
- PL_op = (OP*)&myop;
-
- EXTEND(PL_stack_sp, 1);
- *++PL_stack_sp = sv;
- oldmark = TOPMARK;
- oldscope = PL_scopestack_ix;
-
- if (PERLDB_SUB && PL_curstash != PL_debstash
- /* Handle first BEGIN of -d. */
- && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
- /* Try harder, since this may have been a sighandler, thus
- * curstash may be meaningless. */
- && (SvTYPE(sv) != SVt_PVCV || CvSTASH((CV*)sv) != PL_debstash)
- && !(flags & G_NODEBUG))
- PL_op->op_private |= OPpENTERSUB_DB;
-
- if (flags & G_METHOD) {
- Zero(&method_op, 1, UNOP);
- method_op.op_next = PL_op;
- method_op.op_ppaddr = PL_ppaddr[OP_METHOD];
- myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB];
- PL_op = (OP*)&method_op;
- }
-
- if (!(flags & G_EVAL)) {
- CATCH_SET(TRUE);
- call_body((OP*)&myop, FALSE);
- retval = PL_stack_sp - (PL_stack_base + oldmark);
- CATCH_SET(oldcatch);
- }
- else {
- myop.op_other = (OP*)&myop;
- PL_markstack_ptr--;
- /* we're trying to emulate pp_entertry() here */
- {
- register PERL_CONTEXT *cx;
- I32 gimme = GIMME_V;
-
- ENTER;
- SAVETMPS;
-
- push_return(Nullop);
- PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
- PUSHEVAL(cx, 0, 0);
- PL_eval_root = PL_op; /* Only needed so that goto works right. */
-
- PL_in_eval = EVAL_INEVAL;
- if (flags & G_KEEPERR)
- PL_in_eval |= EVAL_KEEPERR;
- else
- sv_setpv(ERRSV,"");
- }
- PL_markstack_ptr++;
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- redo_body:
- CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
- (OP*)&myop, FALSE);
-#else
- JMPENV_PUSH(ret);
-#endif
- switch (ret) {
- case 0:
-#ifndef PERL_FLEXIBLE_EXCEPTIONS
- redo_body:
- call_body((OP*)&myop, FALSE);
-#endif
- retval = PL_stack_sp - (PL_stack_base + oldmark);
- if (!(flags & G_KEEPERR))
- sv_setpv(ERRSV,"");
- break;
- case 1:
- STATUS_ALL_FAILURE;
- /* FALL THROUGH */
- case 2:
- /* my_exit() was called */
- PL_curstash = PL_defstash;
- FREETMPS;
- JMPENV_POP;
- if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
- Perl_croak(aTHX_ "Callback called exit");
- my_exit_jump();
- /* NOTREACHED */
- case 3:
- if (PL_restartop) {
- PL_op = PL_restartop;
- PL_restartop = 0;
- goto redo_body;
- }
- PL_stack_sp = PL_stack_base + oldmark;
- if (flags & G_ARRAY)
- retval = 0;
- else {
- retval = 1;
- *++PL_stack_sp = &PL_sv_undef;
- }
- break;
- }
-
- if (PL_scopestack_ix > oldscope) {
- SV **newsp;
- PMOP *newpm;
- I32 gimme;
- register PERL_CONTEXT *cx;
- I32 optype;
-
- POPBLOCK(cx,newpm);
- POPEVAL(cx);
- pop_return();
- PL_curpm = newpm;
- LEAVE;
- }
- JMPENV_POP;
- }
-
- if (flags & G_DISCARD) {
- PL_stack_sp = PL_stack_base + oldmark;
- retval = 0;
- FREETMPS;
- LEAVE;
- }
- PL_op = oldop;
- return retval;
-}
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-STATIC void *
-S_vcall_body(pTHX_ va_list args)
-{
- OP *myop = va_arg(args, OP*);
- int is_eval = va_arg(args, int);
-
- call_body(myop, is_eval);
- return NULL;
-}
-#endif
-
-STATIC void
-S_call_body(pTHX_ OP *myop, int is_eval)
-{
- if (PL_op == myop) {
- if (is_eval)
- PL_op = Perl_pp_entereval(aTHX); /* this doesn't do a POPMARK */
- else
- PL_op = Perl_pp_entersub(aTHX); /* this does */
- }
- if (PL_op)
- CALLRUNOPS(aTHX);
-}
-
-/* Eval a string. The G_EVAL flag is always assumed. */
-
-/*
-=for apidoc p||eval_sv
-
-Tells Perl to C<eval> the string in the SV.
-
-=cut
-*/
-
-I32
-Perl_eval_sv(pTHX_ SV *sv, I32 flags)
-
- /* See G_* flags in cop.h */
-{
- dSP;
- UNOP myop; /* fake syntax tree node */
- I32 oldmark = SP - PL_stack_base;
- I32 retval;
- I32 oldscope;
- int ret;
- OP* oldop = PL_op;
- dJMPENV;
-
- if (flags & G_DISCARD) {
- ENTER;
- SAVETMPS;
- }
-
- SAVEOP();
- PL_op = (OP*)&myop;
- Zero(PL_op, 1, UNOP);
- EXTEND(PL_stack_sp, 1);
- *++PL_stack_sp = sv;
- oldscope = PL_scopestack_ix;
-
- if (!(flags & G_NOARGS))
- myop.op_flags = OPf_STACKED;
- myop.op_next = Nullop;
- myop.op_type = OP_ENTEREVAL;
- myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
- (flags & G_ARRAY) ? OPf_WANT_LIST :
- OPf_WANT_SCALAR);
- if (flags & G_KEEPERR)
- myop.op_flags |= OPf_SPECIAL;
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- redo_body:
- CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
- (OP*)&myop, TRUE);
-#else
- JMPENV_PUSH(ret);
-#endif
- switch (ret) {
- case 0:
-#ifndef PERL_FLEXIBLE_EXCEPTIONS
- redo_body:
- call_body((OP*)&myop,TRUE);
-#endif
- retval = PL_stack_sp - (PL_stack_base + oldmark);
- if (!(flags & G_KEEPERR))
- sv_setpv(ERRSV,"");
- break;
- case 1:
- STATUS_ALL_FAILURE;
- /* FALL THROUGH */
- case 2:
- /* my_exit() was called */
- PL_curstash = PL_defstash;
- FREETMPS;
- JMPENV_POP;
- if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
- Perl_croak(aTHX_ "Callback called exit");
- my_exit_jump();
- /* NOTREACHED */
- case 3:
- if (PL_restartop) {
- PL_op = PL_restartop;
- PL_restartop = 0;
- goto redo_body;
- }
- PL_stack_sp = PL_stack_base + oldmark;
- if (flags & G_ARRAY)
- retval = 0;
- else {
- retval = 1;
- *++PL_stack_sp = &PL_sv_undef;
- }
- break;
- }
-
- JMPENV_POP;
- if (flags & G_DISCARD) {
- PL_stack_sp = PL_stack_base + oldmark;
- retval = 0;
- FREETMPS;
- LEAVE;
- }
- PL_op = oldop;
- return retval;
-}
-
-/*
-=for apidoc p||eval_pv
-
-Tells Perl to C<eval> the given string and return an SV* result.
-
-=cut
-*/
-
-SV*
-Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
-{
- dSP;
- SV* sv = newSVpv(p, 0);
-
- eval_sv(sv, G_SCALAR);
- SvREFCNT_dec(sv);
-
- SPAGAIN;
- sv = POPs;
- PUTBACK;
-
- if (croak_on_error && SvTRUE(ERRSV)) {
- STRLEN n_a;
- Perl_croak(aTHX_ SvPVx(ERRSV, n_a));
- }
-
- return sv;
-}
-
-/* Require a module. */
-
-/*
-=for apidoc p||require_pv
-
-Tells Perl to C<require> a module.
-
-=cut
-*/
-
-void
-Perl_require_pv(pTHX_ const char *pv)
-{
- SV* sv;
- dSP;
- PUSHSTACKi(PERLSI_REQUIRE);
- PUTBACK;
- sv = sv_newmortal();
- sv_setpv(sv, "require '");
- sv_catpv(sv, pv);
- sv_catpv(sv, "'");
- eval_sv(sv, G_DISCARD);
- SPAGAIN;
- POPSTACK;
-}
-
-void
-Perl_magicname(pTHX_ char *sym, char *name, I32 namlen)
-{
- register GV *gv;
-
- if ((gv = gv_fetchpv(sym,TRUE, SVt_PV)))
- sv_magic(GvSV(gv), (SV*)gv, 0, name, namlen);
-}
-
-STATIC void
-S_usage(pTHX_ char *name) /* XXX move this out into a module ? */
-{
- /* This message really ought to be max 23 lines.
- * Removed -h because the user already knows that opton. Others? */
-
- static char *usage_msg[] = {
-"-0[octal] specify record separator (\\0, if no argument)",
-"-a autosplit mode with -n or -p (splits $_ into @F)",
-"-C enable native wide character system interfaces",
-"-c check syntax only (runs BEGIN and CHECK blocks)",
-"-d[:debugger] run program under debugger",
-"-D[number/list] set debugging flags (argument is a bit mask or alphabets)",
-"-e 'command' one line of program (several -e's allowed, omit programfile)",
-"-F/pattern/ split() pattern for -a switch (//'s are optional)",
-"-i[extension] edit <> files in place (makes backup if extension supplied)",
-"-Idirectory specify @INC/#include directory (several -I's allowed)",
-"-l[octal] enable line ending processing, specifies line terminator",
-"-[mM][-]module execute `use/no module...' before executing program",
-"-n assume 'while (<>) { ... }' loop around program",
-"-p assume loop like -n but print line also, like sed",
-"-P run program through C preprocessor before compilation",
-"-s enable rudimentary parsing for switches after programfile",
-"-S look for programfile using PATH environment variable",
-"-T enable tainting checks",
-"-u dump core after parsing program",
-"-U allow unsafe operations",
-"-v print version, subversion (includes VERY IMPORTANT perl info)",
-"-V[:variable] print configuration summary (or a single Config.pm variable)",
-"-w enable many useful warnings (RECOMMENDED)",
-"-W enable all warnings",
-"-X disable all warnings",
-"-x[directory] strip off text before #!perl line and perhaps cd to directory",
-"\n",
-NULL
-};
- char **p = usage_msg;
-
- PerlIO_printf(PerlIO_stdout(),
- "\nUsage: %s [switches] [--] [programfile] [arguments]",
- name);
- while (*p)
- PerlIO_printf(PerlIO_stdout(), "\n %s", *p++);
-}
-
-/* This routine handles any switches that can be given during run */
-
-char *
-Perl_moreswitches(pTHX_ char *s)
-{
- STRLEN numlen;
- U32 rschar;
-
- switch (*s) {
- case '0':
- {
- numlen = 0; /* disallow underscores */
- rschar = (U32)scan_oct(s, 4, &numlen);
- SvREFCNT_dec(PL_nrs);
- if (rschar & ~((U8)~0))
- PL_nrs = &PL_sv_undef;
- else if (!rschar && numlen >= 2)
- PL_nrs = newSVpvn("", 0);
- else {
- char ch = rschar;
- PL_nrs = newSVpvn(&ch, 1);
- }
- return s + numlen;
- }
- case 'C':
- PL_widesyscalls = TRUE;
- s++;
- return s;
- case 'F':
- PL_minus_F = TRUE;
- PL_splitstr = savepv(s + 1);
- s += strlen(s);
- return s;
- case 'a':
- PL_minus_a = TRUE;
- s++;
- return s;
- case 'c':
- PL_minus_c = TRUE;
- s++;
- return s;
- case 'd':
- forbid_setid("-d");
- s++;
- /* The following permits -d:Mod to accepts arguments following an =
- in the fashion that -MSome::Mod does. */
- if (*s == ':' || *s == '=') {
- char *start;
- SV *sv;
- sv = newSVpv("use Devel::", 0);
- start = ++s;
- /* We now allow -d:Module=Foo,Bar */
- while(isALNUM(*s) || *s==':') ++s;
- if (*s != '=')
- sv_catpv(sv, start);
- else {
- sv_catpvn(sv, start, s-start);
- sv_catpv(sv, " split(/,/,q{");
- sv_catpv(sv, ++s);
- sv_catpv(sv, "})");
- }
- s += strlen(s);
- my_setenv("PERL5DB", SvPV(sv, PL_na));
- }
- if (!PL_perldb) {
- PL_perldb = PERLDB_ALL;
- init_debugger();
- }
- return s;
- case 'D':
- {
-#ifdef DEBUGGING
- forbid_setid("-D");
- if (isALPHA(s[1])) {
- static char debopts[] = "psltocPmfrxuLHXDST";
- char *d;
-
- for (s++; *s && (d = strchr(debopts,*s)); s++)
- PL_debug |= 1 << (d - debopts);
- }
- else {
- PL_debug = atoi(s+1);
- for (s++; isDIGIT(*s); s++) ;
- }
- PL_debug |= 0x80000000;
-#else
- if (ckWARN_d(WARN_DEBUGGING))
- Perl_warner(aTHX_ WARN_DEBUGGING,
- "Recompile perl with -DDEBUGGING to use -D switch\n");
- for (s++; isALNUM(*s); s++) ;
-#endif
- /*SUPPRESS 530*/
- return s;
- }
- case 'h':
- usage(PL_origargv[0]);
- PerlProc_exit(0);
- case 'i':
- if (PL_inplace)
- Safefree(PL_inplace);
- PL_inplace = savepv(s+1);
- /*SUPPRESS 530*/
- for (s = PL_inplace; *s && !isSPACE(*s); s++) ;
- if (*s) {
- *s++ = '\0';
- if (*s == '-') /* Additional switches on #! line. */
- s++;
- }
- return s;
- case 'I': /* -I handled both here and in parse_perl() */
- forbid_setid("-I");
- ++s;
- while (*s && isSPACE(*s))
- ++s;
- if (*s) {
- char *e, *p;
- p = s;
- /* ignore trailing spaces (possibly followed by other switches) */
- do {
- for (e = p; *e && !isSPACE(*e); e++) ;
- p = e;
- while (isSPACE(*p))
- p++;
- } while (*p && *p != '-');
- e = savepvn(s, e-s);
- incpush(e, TRUE, TRUE);
- Safefree(e);
- s = p;
- if (*s == '-')
- s++;
- }
- else
- Perl_croak(aTHX_ "No directory specified for -I");
- return s;
- case 'l':
- PL_minus_l = TRUE;
- s++;
- if (PL_ors)
- Safefree(PL_ors);
- if (isDIGIT(*s)) {
- PL_ors = savepv("\n");
- PL_orslen = 1;
- numlen = 0; /* disallow underscores */
- *PL_ors = (char)scan_oct(s, 3 + (*s == '0'), &numlen);
- s += numlen;
- }
- else {
- if (RsPARA(PL_nrs)) {
- PL_ors = "\n\n";
- PL_orslen = 2;
- }
- else
- PL_ors = SvPV(PL_nrs, PL_orslen);
- PL_ors = savepvn(PL_ors, PL_orslen);
- }
- return s;
- case 'M':
- forbid_setid("-M"); /* XXX ? */
- /* FALL THROUGH */
- case 'm':
- forbid_setid("-m"); /* XXX ? */
- if (*++s) {
- char *start;
- SV *sv;
- char *use = "use ";
- /* -M-foo == 'no foo' */
- if (*s == '-') { use = "no "; ++s; }
- sv = newSVpv(use,0);
- start = s;
- /* We allow -M'Module qw(Foo Bar)' */
- while(isALNUM(*s) || *s==':') ++s;
- if (*s != '=') {
- sv_catpv(sv, start);
- if (*(start-1) == 'm') {
- if (*s != '\0')
- Perl_croak(aTHX_ "Can't use '%c' after -mname", *s);
- sv_catpv( sv, " ()");
- }
- } else {
- if (s == start)
- Perl_croak(aTHX_ "Module name required with -%c option",
- s[-1]);
- sv_catpvn(sv, start, s-start);
- sv_catpv(sv, " split(/,/,q{");
- sv_catpv(sv, ++s);
- sv_catpv(sv, "})");
- }
- s += strlen(s);
- if (!PL_preambleav)
- PL_preambleav = newAV();
- av_push(PL_preambleav, sv);
- }
- else
- Perl_croak(aTHX_ "No space allowed after -%c", *(s-1));
- return s;
- case 'n':
- PL_minus_n = TRUE;
- s++;
- return s;
- case 'p':
- PL_minus_p = TRUE;
- s++;
- return s;
- case 's':
- forbid_setid("-s");
- PL_doswitches = TRUE;
- s++;
- return s;
- case 'T':
- if (!PL_tainting)
- Perl_croak(aTHX_ "Too late for \"-T\" option");
- s++;
- return s;
- case 'u':
-#ifdef MACOS_TRADITIONAL
- Perl_croak(aTHX_ "Believe me, you don't want to use \"-u\" on a Macintosh");
-#endif
- PL_do_undump = TRUE;
- s++;
- return s;
- case 'U':
- PL_unsafe = TRUE;
- s++;
- return s;
- case 'v':
- PerlIO_printf(PerlIO_stdout(),
- Perl_form(aTHX_ "\nThis is perl, v%"VDf" built for %s",
- PL_patchlevel, ARCHNAME));
-#if defined(LOCAL_PATCH_COUNT)
- if (LOCAL_PATCH_COUNT > 0)
- PerlIO_printf(PerlIO_stdout(),
- "\n(with %d registered patch%s, "
- "see perl -V for more detail)",
- (int)LOCAL_PATCH_COUNT,
- (LOCAL_PATCH_COUNT!=1) ? "es" : "");
-#endif
-
- PerlIO_printf(PerlIO_stdout(),
- "\n\nCopyright 1987-2001, Larry Wall\n");
-#ifdef MACOS_TRADITIONAL
- PerlIO_printf(PerlIO_stdout(),
- "\nMac OS port Copyright (c) 1991-2001, Matthias Neeracher\n");
-#endif
-#ifdef MSDOS
- PerlIO_printf(PerlIO_stdout(),
- "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
-#endif
-#ifdef DJGPP
- PerlIO_printf(PerlIO_stdout(),
- "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n"
- "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n");
-#endif
-#ifdef OS2
- PerlIO_printf(PerlIO_stdout(),
- "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
- "Version 5 port Copyright (c) 1994-1999, Andreas Kaiser, Ilya Zakharevich\n");
-#endif
-#ifdef atarist
- PerlIO_printf(PerlIO_stdout(),
- "atariST series port, ++jrb bammi@cadence.com\n");
-#endif
-#ifdef __BEOS__
- PerlIO_printf(PerlIO_stdout(),
- "BeOS port Copyright Tom Spindler, 1997-1999\n");
-#endif
-#ifdef MPE
- PerlIO_printf(PerlIO_stdout(),
- "MPE/iX port Copyright by Mark Klein and Mark Bixby, 1996-1999\n");
-#endif
-#ifdef OEMVS
- PerlIO_printf(PerlIO_stdout(),
- "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n");
-#endif
-#ifdef __VOS__
- PerlIO_printf(PerlIO_stdout(),
- "Stratus VOS port by Paul_Green@stratus.com, 1997-1999\n");
-#endif
-#ifdef __OPEN_VM
- PerlIO_printf(PerlIO_stdout(),
- "VM/ESA port by Neale Ferguson, 1998-1999\n");
-#endif
-#ifdef POSIX_BC
- PerlIO_printf(PerlIO_stdout(),
- "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
-#endif
-#ifdef __MINT__
- PerlIO_printf(PerlIO_stdout(),
- "MiNT port by Guido Flohr, 1997-1999\n");
-#endif
-#ifdef EPOC
- PerlIO_printf(PerlIO_stdout(),
- "EPOC port by Olaf Flebbe, 1999-2000\n");
-#endif
-#ifdef BINARY_BUILD_NOTICE
- BINARY_BUILD_NOTICE;
-#endif
- PerlIO_printf(PerlIO_stdout(),
- "\n\
-Perl may be copied only under the terms of either the Artistic License or the\n\
-GNU General Public License, which may be found in the Perl 5 source kit.\n\n\
-Complete documentation for Perl, including FAQ lists, should be found on\n\
-this system using `man perl' or `perldoc perl'. If you have access to the\n\
-Internet, point your browser at http://www.perl.com/, the Perl Home Page.\n\n");
- PerlProc_exit(0);
- case 'w':
- if (! (PL_dowarn & G_WARN_ALL_MASK))
- PL_dowarn |= G_WARN_ON;
- s++;
- return s;
- case 'W':
- PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
- PL_compiling.cop_warnings = pWARN_ALL ;
- s++;
- return s;
- case 'X':
- PL_dowarn = G_WARN_ALL_OFF;
- PL_compiling.cop_warnings = pWARN_NONE ;
- s++;
- return s;
- case '*':
- case ' ':
- if (s[1] == '-') /* Additional switches on #! line. */
- return s+2;
- break;
- case '-':
- case 0:
-#if defined(WIN32) || !defined(PERL_STRICT_CR)
- case '\r':
-#endif
- case '\n':
- case '\t':
- break;
-#ifdef ALTERNATE_SHEBANG
- case 'S': /* OS/2 needs -S on "extproc" line. */
- break;
-#endif
- case 'P':
- if (PL_preprocess)
- return s+1;
- /* FALL THROUGH */
- default:
- Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s);
- }
- return Nullch;
-}
-
-/* compliments of Tom Christiansen */
-
-/* unexec() can be found in the Gnu emacs distribution */
-/* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */
-
-void
-Perl_my_unexec(pTHX)
-{
-#ifdef UNEXEC
- SV* prog;
- SV* file;
- int status = 1;
- extern int etext;
-
- prog = newSVpv(BIN_EXP, 0);
- sv_catpv(prog, "/perl");
- file = newSVpv(PL_origfilename, 0);
- sv_catpv(file, ".perldump");
-
- unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
- /* unexec prints msg to stderr in case of failure */
- PerlProc_exit(status);
-#else
-# ifdef VMS
-# include <lib$routines.h>
- lib$signal(SS$_DEBUG); /* ssdef.h #included from vmsish.h */
-# else
- ABORT(); /* for use with undump */
-# endif
-#endif
-}
-
-/* initialize curinterp */
-STATIC void
-S_init_interp(pTHX)
-{
-
-#ifdef PERL_OBJECT /* XXX kludge */
-#define I_REINIT \
- STMT_START { \
- PL_chopset = " \n-"; \
- PL_copline = NOLINE; \
- PL_curcop = &PL_compiling;\
- PL_curcopdb = NULL; \
- PL_dbargs = 0; \
- PL_dumpindent = 4; \
- PL_laststatval = -1; \
- PL_laststype = OP_STAT; \
- PL_maxscream = -1; \
- PL_maxsysfd = MAXSYSFD; \
- PL_statname = Nullsv; \
- PL_tmps_floor = -1; \
- PL_tmps_ix = -1; \
- PL_op_mask = NULL; \
- PL_laststatval = -1; \
- PL_laststype = OP_STAT; \
- PL_mess_sv = Nullsv; \
- PL_splitstr = " "; \
- PL_generation = 100; \
- PL_exitlist = NULL; \
- PL_exitlistlen = 0; \
- PL_regindent = 0; \
- PL_in_clean_objs = FALSE; \
- PL_in_clean_all = FALSE; \
- PL_profiledata = NULL; \
- PL_rsfp = Nullfp; \
- PL_rsfp_filters = Nullav; \
- PL_dirty = FALSE; \
- } STMT_END
- I_REINIT;
-#else
-# ifdef MULTIPLICITY
-# define PERLVAR(var,type)
-# define PERLVARA(var,n,type)
-# if defined(PERL_IMPLICIT_CONTEXT)
-# if defined(USE_THREADS)
-# define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
-# define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
-# else /* !USE_THREADS */
-# define PERLVARI(var,type,init) aTHX->var = init;
-# define PERLVARIC(var,type,init) aTHX->var = init;
-# endif /* USE_THREADS */
-# else
-# define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
-# define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
-# endif
-# include "intrpvar.h"
-# ifndef USE_THREADS
-# include "thrdvar.h"
-# endif
-# undef PERLVAR
-# undef PERLVARA
-# undef PERLVARI
-# undef PERLVARIC
-# else
-# define PERLVAR(var,type)
-# define PERLVARA(var,n,type)
-# define PERLVARI(var,type,init) PL_##var = init;
-# define PERLVARIC(var,type,init) PL_##var = init;
-# include "intrpvar.h"
-# ifndef USE_THREADS
-# include "thrdvar.h"
-# endif
-# undef PERLVAR
-# undef PERLVARA
-# undef PERLVARI
-# undef PERLVARIC
-# endif
-#endif
-
-}
-
-STATIC void
-S_init_main_stash(pTHX)
-{
- GV *gv;
-
- /* Note that strtab is a rather special HV. Assumptions are made
- about not iterating on it, and not adding tie magic to it.
- It is properly deallocated in perl_destruct() */
- PL_strtab = newHV();
-#ifdef USE_THREADS
- MUTEX_INIT(&PL_strtab_mutex);
-#endif
- HvSHAREKEYS_off(PL_strtab); /* mandatory */
- hv_ksplit(PL_strtab, 512);
-
- PL_curstash = PL_defstash = newHV();
- PL_curstname = newSVpvn("main",4);
- gv = gv_fetchpv("main::",TRUE, SVt_PVHV);
- SvREFCNT_dec(GvHV(gv));
- GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash);
- SvREADONLY_on(gv);
- HvNAME(PL_defstash) = savepv("main");
- PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV)));
- GvMULTI_on(PL_incgv);
- PL_hintgv = gv_fetchpv("\010",TRUE, SVt_PV); /* ^H */
- GvMULTI_on(PL_hintgv);
- PL_defgv = gv_fetchpv("_",TRUE, SVt_PVAV);
- PL_errgv = gv_HVadd(gv_fetchpv("@", TRUE, SVt_PV));
- GvMULTI_on(PL_errgv);
- PL_replgv = gv_fetchpv("\022", TRUE, SVt_PV); /* ^R */
- GvMULTI_on(PL_replgv);
- (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */
- sv_grow(ERRSV, 240); /* Preallocate - for immediate signals. */
- sv_setpvn(ERRSV, "", 0);
- PL_curstash = PL_defstash;
- CopSTASH_set(&PL_compiling, PL_defstash);
- PL_debstash = GvHV(gv_fetchpv("DB::", GV_ADDMULTI, SVt_PVHV));
- PL_globalstash = GvHV(gv_fetchpv("CORE::GLOBAL::", GV_ADDMULTI, SVt_PVHV));
- PL_nullstash = GvHV(gv_fetchpv("<none>::", GV_ADDMULTI, SVt_PVHV));
- /* We must init $/ before switches are processed. */
- sv_setpvn(get_sv("/", TRUE), "\n", 1);
-}
-
-STATIC void
-S_open_script(pTHX_ char *scriptname, bool dosearch, SV *sv, int *fdscript)
-{
- *fdscript = -1;
-
- if (PL_e_script) {
- PL_origfilename = savepv("-e");
- }
- else {
- /* if find_script() returns, it returns a malloc()-ed value */
- PL_origfilename = scriptname = find_script(scriptname, dosearch, NULL, 1);
-
- if (strnEQ(scriptname, "/dev/fd/", 8) && isDIGIT(scriptname[8]) ) {
- char *s = scriptname + 8;
- *fdscript = atoi(s);
- while (isDIGIT(*s))
- s++;
- if (*s) {
- scriptname = savepv(s + 1);
- Safefree(PL_origfilename);
- PL_origfilename = scriptname;
- }
- }
- }
-
-#ifdef USE_ITHREADS
- Safefree(CopFILE(PL_curcop));
-#else
- SvREFCNT_dec(CopFILEGV(PL_curcop));
-#endif
- CopFILE_set(PL_curcop, PL_origfilename);
- if (strEQ(PL_origfilename,"-"))
- scriptname = "";
- if (*fdscript >= 0) {
- PL_rsfp = PerlIO_fdopen(*fdscript,PERL_SCRIPT_MODE);
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- if (PL_rsfp)
- fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1); /* ensure close-on-exec */
-#endif
- }
- else if (PL_preprocess) {
- char *cpp_cfg = CPPSTDIN;
- SV *cpp = newSVpvn("",0);
- SV *cmd = NEWSV(0,0);
-
- if (strEQ(cpp_cfg, "cppstdin"))
- Perl_sv_catpvf(aTHX_ cpp, "%s/", BIN_EXP);
- sv_catpv(cpp, cpp_cfg);
-
- sv_catpvn(sv, "-I", 2);
- sv_catpv(sv,PRIVLIB_EXP);
-
-#if defined(MSDOS) || defined(WIN32)
- Perl_sv_setpvf(aTHX_ cmd, "\
-sed %s -e \"/^[^#]/b\" \
- -e \"/^#[ ]*include[ ]/b\" \
- -e \"/^#[ ]*define[ ]/b\" \
- -e \"/^#[ ]*if[ ]/b\" \
- -e \"/^#[ ]*ifdef[ ]/b\" \
- -e \"/^#[ ]*ifndef[ ]/b\" \
- -e \"/^#[ ]*else/b\" \
- -e \"/^#[ ]*elif[ ]/b\" \
- -e \"/^#[ ]*undef[ ]/b\" \
- -e \"/^#[ ]*endif/b\" \
- -e \"s/^#.*//\" \
- %s | %"SVf" -C %"SVf" %s",
- (PL_doextract ? "-e \"1,/^#/d\n\"" : ""),
-#else
-# ifdef __OPEN_VM
- Perl_sv_setpvf(aTHX_ cmd, "\
-%s %s -e '/^[^#]/b' \
- -e '/^#[ ]*include[ ]/b' \
- -e '/^#[ ]*define[ ]/b' \
- -e '/^#[ ]*if[ ]/b' \
- -e '/^#[ ]*ifdef[ ]/b' \
- -e '/^#[ ]*ifndef[ ]/b' \
- -e '/^#[ ]*else/b' \
- -e '/^#[ ]*elif[ ]/b' \
- -e '/^#[ ]*undef[ ]/b' \
- -e '/^#[ ]*endif/b' \
- -e 's/^[ ]*#.*//' \
- %s | %"SVf" %"SVf" %s",
-# else
- Perl_sv_setpvf(aTHX_ cmd, "\
-%s %s -e '/^[^#]/b' \
- -e '/^#[ ]*include[ ]/b' \
- -e '/^#[ ]*define[ ]/b' \
- -e '/^#[ ]*if[ ]/b' \
- -e '/^#[ ]*ifdef[ ]/b' \
- -e '/^#[ ]*ifndef[ ]/b' \
- -e '/^#[ ]*else/b' \
- -e '/^#[ ]*elif[ ]/b' \
- -e '/^#[ ]*undef[ ]/b' \
- -e '/^#[ ]*endif/b' \
- -e 's/^[ ]*#.*//' \
- %s | %"SVf" -C %"SVf" %s",
-# endif
-#ifdef LOC_SED
- LOC_SED,
-#else
- "sed",
-#endif
- (PL_doextract ? "-e '1,/^#/d\n'" : ""),
-#endif
- scriptname, cpp, sv, CPPMINUS);
- PL_doextract = FALSE;
-#ifdef IAMSUID /* actually, this is caught earlier */
- if (PL_euid != PL_uid && !PL_euid) { /* if running suidperl */
-#ifdef HAS_SETEUID
- (void)seteuid(PL_uid); /* musn't stay setuid root */
-#else
-#ifdef HAS_SETREUID
- (void)setreuid((Uid_t)-1, PL_uid);
-#else
-#ifdef HAS_SETRESUID
- (void)setresuid((Uid_t)-1, PL_uid, (Uid_t)-1);
-#else
- PerlProc_setuid(PL_uid);
-#endif
-#endif
-#endif
- if (PerlProc_geteuid() != PL_uid)
- Perl_croak(aTHX_ "Can't do seteuid!\n");
- }
-#endif /* IAMSUID */
- PL_rsfp = PerlProc_popen(SvPVX(cmd), "r");
- SvREFCNT_dec(cmd);
- SvREFCNT_dec(cpp);
- }
- else if (!*scriptname) {
- forbid_setid("program input from stdin");
- PL_rsfp = PerlIO_stdin();
- }
- else {
- PL_rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- if (PL_rsfp)
- fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1); /* ensure close-on-exec */
-#endif
- }
- if (!PL_rsfp) {
-#ifdef DOSUID
-#ifndef IAMSUID /* in case script is not readable before setuid */
- if (PL_euid &&
- PerlLIO_stat(CopFILE(PL_curcop),&PL_statbuf) >= 0 &&
- PL_statbuf.st_mode & (S_ISUID|S_ISGID))
- {
- /* try again */
- PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT, BIN_EXP,
- (int)PERL_REVISION, (int)PERL_VERSION,
- (int)PERL_SUBVERSION), PL_origargv);
- Perl_croak(aTHX_ "Can't do setuid; ensure that the setuid bit is set on suidperl\n");
- }
-#endif
-#endif
- Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
- CopFILE(PL_curcop), Strerror(errno));
- }
-}
-
-/* Mention
- * I_SYSSTATVFS HAS_FSTATVFS
- * I_SYSMOUNT
- * I_STATFS HAS_FSTATFS HAS_GETFSSTAT
- * I_MNTENT HAS_GETMNTENT HAS_HASMNTOPT
- * here so that metaconfig picks them up. */
-
-#ifdef IAMSUID
-STATIC int
-S_fd_on_nosuid_fs(pTHX_ int fd)
-{
- int check_okay = 0; /* able to do all the required sys/libcalls */
- int on_nosuid = 0; /* the fd is on a nosuid fs */
-/*
- * Preferred order: fstatvfs(), fstatfs(), ustat()+getmnt(), getmntent().
- * fstatvfs() is UNIX98.
- * fstatfs() is 4.3 BSD.
- * ustat()+getmnt() is pre-4.3 BSD.
- * getmntent() is O(number-of-mounted-filesystems) and can hang on
- * an irrelevant filesystem while trying to reach the right one.
- */
-
-#undef FD_ON_NOSUID_CHECK_OKAY /* found the syscalls to do the check? */
-
-# if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
- defined(HAS_FSTATVFS)
-# define FD_ON_NOSUID_CHECK_OKAY
- struct statvfs stfs;
-
- check_okay = fstatvfs(fd, &stfs) == 0;
- on_nosuid = check_okay && (stfs.f_flag & ST_NOSUID);
-# endif /* fstatvfs */
-
-# if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
- defined(PERL_MOUNT_NOSUID) && \
- defined(HAS_FSTATFS) && \
- defined(HAS_STRUCT_STATFS) && \
- defined(HAS_STRUCT_STATFS_F_FLAGS)
-# define FD_ON_NOSUID_CHECK_OKAY
- struct statfs stfs;
-
- check_okay = fstatfs(fd, &stfs) == 0;
- on_nosuid = check_okay && (stfs.f_flags & PERL_MOUNT_NOSUID);
-# endif /* fstatfs */
-
-# if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
- defined(PERL_MOUNT_NOSUID) && \
- defined(HAS_FSTAT) && \
- defined(HAS_USTAT) && \
- defined(HAS_GETMNT) && \
- defined(HAS_STRUCT_FS_DATA) && \
- defined(NOSTAT_ONE)
-# define FD_ON_NOSUID_CHECK_OKAY
- struct stat fdst;
-
- if (fstat(fd, &fdst) == 0) {
- struct ustat us;
- if (ustat(fdst.st_dev, &us) == 0) {
- struct fs_data fsd;
- /* NOSTAT_ONE here because we're not examining fields which
- * vary between that case and STAT_ONE. */
- if (getmnt((int*)0, &fsd, (int)0, NOSTAT_ONE, us.f_fname) == 0) {
- size_t cmplen = sizeof(us.f_fname);
- if (sizeof(fsd.fd_req.path) < cmplen)
- cmplen = sizeof(fsd.fd_req.path);
- if (strnEQ(fsd.fd_req.path, us.f_fname, cmplen) &&
- fdst.st_dev == fsd.fd_req.dev) {
- check_okay = 1;
- on_nosuid = fsd.fd_req.flags & PERL_MOUNT_NOSUID;
- }
- }
- }
- }
- }
-# endif /* fstat+ustat+getmnt */
-
-# if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
- defined(HAS_GETMNTENT) && \
- defined(HAS_HASMNTOPT) && \
- defined(MNTOPT_NOSUID)
-# define FD_ON_NOSUID_CHECK_OKAY
- FILE *mtab = fopen("/etc/mtab", "r");
- struct mntent *entry;
- struct stat stb, fsb;
-
- if (mtab && (fstat(fd, &stb) == 0)) {
- while (entry = getmntent(mtab)) {
- if (stat(entry->mnt_dir, &fsb) == 0
- && fsb.st_dev == stb.st_dev)
- {
- /* found the filesystem */
- check_okay = 1;
- if (hasmntopt(entry, MNTOPT_NOSUID))
- on_nosuid = 1;
- break;
- } /* A single fs may well fail its stat(). */
- }
- }
- if (mtab)
- fclose(mtab);
-# endif /* getmntent+hasmntopt */
-
- if (!check_okay)
- Perl_croak(aTHX_ "Can't check filesystem of script \"%s\" for nosuid", PL_origfilename);
- return on_nosuid;
-}
-#endif /* IAMSUID */
-
-STATIC void
-S_validate_suid(pTHX_ char *validarg, char *scriptname, int fdscript)
-{
-#ifdef IAMSUID
- int which;
-#endif
-
- /* 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.
- */
-
-#ifdef DOSUID
- char *s, *s2;
-
- if (PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf) < 0) /* normal stat is insecure */
- Perl_croak(aTHX_ "Can't stat script \"%s\"",PL_origfilename);
- if (fdscript < 0 && PL_statbuf.st_mode & (S_ISUID|S_ISGID)) {
- I32 len;
- STRLEN n_a;
-
-#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 (PerlLIO_access(CopFILE(PL_curcop),1)) /*double check*/
- Perl_croak(aTHX_ "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 (
-#ifdef HAS_SETREUID
- setreuid(PL_euid,PL_uid) < 0
-#else
-# if HAS_SETRESUID
- setresuid(PL_euid,PL_uid,(Uid_t)-1) < 0
-# endif
-#endif
- || PerlProc_getuid() != PL_euid || PerlProc_geteuid() != PL_uid)
- Perl_croak(aTHX_ "Can't swap uid and euid"); /* really paranoid */
- if (PerlLIO_stat(CopFILE(PL_curcop),&tmpstatbuf) < 0)
- Perl_croak(aTHX_ "Permission denied"); /* testing full pathname here */
-#if defined(IAMSUID) && !defined(NO_NOSUID_CHECK)
- if (fd_on_nosuid_fs(PerlIO_fileno(PL_rsfp)))
- Perl_croak(aTHX_ "Permission denied");
-#endif
- if (tmpstatbuf.st_dev != PL_statbuf.st_dev ||
- tmpstatbuf.st_ino != PL_statbuf.st_ino) {
- (void)PerlIO_close(PL_rsfp);
- Perl_croak(aTHX_ "Permission denied\n");
- }
- if (
-#ifdef HAS_SETREUID
- setreuid(PL_uid,PL_euid) < 0
-#else
-# if defined(HAS_SETRESUID)
- setresuid(PL_uid,PL_euid,(Uid_t)-1) < 0
-# endif
-#endif
- || PerlProc_getuid() != PL_uid || PerlProc_geteuid() != PL_euid)
- Perl_croak(aTHX_ "Can't reswap uid and euid");
- if (!cando(S_IXUSR,FALSE,&PL_statbuf)) /* can real uid exec? */
- Perl_croak(aTHX_ "Permission denied\n");
- }
-#endif /* HAS_SETREUID */
-#endif /* IAMSUID */
-
- if (!S_ISREG(PL_statbuf.st_mode))
- Perl_croak(aTHX_ "Permission denied");
- if (PL_statbuf.st_mode & S_IWOTH)
- Perl_croak(aTHX_ "Setuid/gid script is writable by world");
- PL_doswitches = FALSE; /* -s is insecure in suid */
- CopLINE_inc(PL_curcop);
- if (sv_gets(PL_linestr, PL_rsfp, 0) == Nullch ||
- strnNE(SvPV(PL_linestr,n_a),"#!",2) ) /* required even on Sys V */
- Perl_croak(aTHX_ "No #! line");
- s = SvPV(PL_linestr,n_a)+2;
- if (*s == ' ') s++;
- while (!isSPACE(*s)) s++;
- for (s2 = s; (s2 > SvPV(PL_linestr,n_a)+2 &&
- (isDIGIT(s2[-1]) || strchr("._-", s2[-1]))); s2--) ;
- if (strnNE(s2-4,"perl",4) && strnNE(s-9,"perl",4)) /* sanity check */
- Perl_croak(aTHX_ "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]))
- Perl_croak(aTHX_ "Args must match #! line");
-
-#ifndef IAMSUID
- if (PL_euid != PL_uid && (PL_statbuf.st_mode & S_ISUID) &&
- PL_euid == PL_statbuf.st_uid)
- if (!PL_do_undump)
- Perl_croak(aTHX_ "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 (PL_euid) { /* oops, we're not the setuid root perl */
- (void)PerlIO_close(PL_rsfp);
-#ifndef IAMSUID
- /* try again */
- PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT, BIN_EXP,
- (int)PERL_REVISION, (int)PERL_VERSION,
- (int)PERL_SUBVERSION), PL_origargv);
-#endif
- Perl_croak(aTHX_ "Can't do setuid; ensure that the setuid bit is set on suidperl\n");
- }
-
- if (PL_statbuf.st_mode & S_ISGID && PL_statbuf.st_gid != PL_egid) {
-#ifdef HAS_SETEGID
- (void)setegid(PL_statbuf.st_gid);
-#else
-#ifdef HAS_SETREGID
- (void)setregid((Gid_t)-1,PL_statbuf.st_gid);
-#else
-#ifdef HAS_SETRESGID
- (void)setresgid((Gid_t)-1,PL_statbuf.st_gid,(Gid_t)-1);
-#else
- PerlProc_setgid(PL_statbuf.st_gid);
-#endif
-#endif
-#endif
- if (PerlProc_getegid() != PL_statbuf.st_gid)
- Perl_croak(aTHX_ "Can't do setegid!\n");
- }
- if (PL_statbuf.st_mode & S_ISUID) {
- if (PL_statbuf.st_uid != PL_euid)
-#ifdef HAS_SETEUID
- (void)seteuid(PL_statbuf.st_uid); /* all that for this */
-#else
-#ifdef HAS_SETREUID
- (void)setreuid((Uid_t)-1,PL_statbuf.st_uid);
-#else
-#ifdef HAS_SETRESUID
- (void)setresuid((Uid_t)-1,PL_statbuf.st_uid,(Uid_t)-1);
-#else
- PerlProc_setuid(PL_statbuf.st_uid);
-#endif
-#endif
-#endif
- if (PerlProc_geteuid() != PL_statbuf.st_uid)
- Perl_croak(aTHX_ "Can't do seteuid!\n");
- }
- else if (PL_uid) { /* oops, mustn't run as root */
-#ifdef HAS_SETEUID
- (void)seteuid((Uid_t)PL_uid);
-#else
-#ifdef HAS_SETREUID
- (void)setreuid((Uid_t)-1,(Uid_t)PL_uid);
-#else
-#ifdef HAS_SETRESUID
- (void)setresuid((Uid_t)-1,(Uid_t)PL_uid,(Uid_t)-1);
-#else
- PerlProc_setuid((Uid_t)PL_uid);
-#endif
-#endif
-#endif
- if (PerlProc_geteuid() != PL_uid)
- Perl_croak(aTHX_ "Can't do seteuid!\n");
- }
- init_ids();
- if (!cando(S_IXUSR,TRUE,&PL_statbuf))
- Perl_croak(aTHX_ "Permission denied\n"); /* they can't do this */
- }
-#ifdef IAMSUID
- else if (PL_preprocess)
- Perl_croak(aTHX_ "-P not allowed for setuid/setgid script\n");
- else if (fdscript >= 0)
- Perl_croak(aTHX_ "fd script not allowed in suidperl\n");
- else
- Perl_croak(aTHX_ "Script is not setuid/setgid in suidperl\n");
-
- /* We absolutely must clear out any saved ids here, so we */
- /* exec the real perl, substituting fd script for scriptname. */
- /* (We pass script name as "subdir" of fd, which perl will grok.) */
- PerlIO_rewind(PL_rsfp);
- PerlLIO_lseek(PerlIO_fileno(PL_rsfp),(Off_t)0,0); /* just in case rewind didn't */
- for (which = 1; PL_origargv[which] && PL_origargv[which] != scriptname; which++) ;
- if (!PL_origargv[which])
- Perl_croak(aTHX_ "Permission denied");
- PL_origargv[which] = savepv(Perl_form(aTHX_ "/dev/fd/%d/%s",
- PerlIO_fileno(PL_rsfp), PL_origargv[which]));
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,0); /* ensure no close-on-exec */
-#endif
- PerlProc_execv(Perl_form(aTHX_ "%s/perl"PERL_FS_VER_FMT, BIN_EXP,
- (int)PERL_REVISION, (int)PERL_VERSION,
- (int)PERL_SUBVERSION), PL_origargv);/* try again */
- Perl_croak(aTHX_ "Can't do setuid; ensure that the setuid bit is set on suidperl\n");
-#endif /* IAMSUID */
-#else /* !DOSUID */
- if (PL_euid != PL_uid || PL_egid != PL_gid) { /* (suidperl doesn't exist, in fact) */
-#ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
- PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf); /* may be either wrapped or real suid */
- if ((PL_euid != PL_uid && PL_euid == PL_statbuf.st_uid && PL_statbuf.st_mode & S_ISUID)
- ||
- (PL_egid != PL_gid && PL_egid == PL_statbuf.st_gid && PL_statbuf.st_mode & S_ISGID)
- )
- if (!PL_do_undump)
- Perl_croak(aTHX_ "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 */
- }
-#endif /* DOSUID */
-}
-
-STATIC void
-S_find_beginning(pTHX)
-{
- register char *s, *s2;
-
- /* skip forward in input to the real script? */
-
- forbid_setid("-x");
-#ifdef MACOS_TRADITIONAL
- /* Since the Mac OS does not honor #! arguments for us, we do it ourselves */
- while (PL_doextract || gMacPerl_AlwaysExtract) {
- if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
- if (!gMacPerl_AlwaysExtract)
- Perl_croak(aTHX_ "No Perl script found in input\n");
-
- if (PL_doextract) /* require explicit override ? */
- if (!OverrideExtract(PL_origfilename))
- Perl_croak(aTHX_ "User aborted script\n");
- else
- PL_doextract = FALSE;
-
- /* Pater peccavi, file does not have #! */
- PerlIO_rewind(PL_rsfp);
-
- break;
- }
-#else
- while (PL_doextract) {
- if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch)
- Perl_croak(aTHX_ "No Perl script found in input\n");
-#endif
- if (*s == '#' && s[1] == '!' && (s = instr(s,"perl"))) {
- PerlIO_ungetc(PL_rsfp, '\n'); /* to keep line count right */
- PL_doextract = FALSE;
- while (*s && !(isSPACE (*s) || *s == '#')) s++;
- s2 = s;
- while (*s == ' ' || *s == '\t') s++;
- if (*s++ == '-') {
- while (isDIGIT(s2[-1]) || strchr("-._", s2[-1])) s2--;
- if (strnEQ(s2-4,"perl",4))
- /*SUPPRESS 530*/
- while ((s = moreswitches(s)))
- ;
- }
- }
- }
-}
-
-
-STATIC void
-S_init_ids(pTHX)
-{
- PL_uid = PerlProc_getuid();
- PL_euid = PerlProc_geteuid();
- PL_gid = PerlProc_getgid();
- PL_egid = PerlProc_getegid();
-#ifdef VMS
- PL_uid |= PL_gid << 16;
- PL_euid |= PL_egid << 16;
-#endif
- PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
-}
-
-STATIC void
-S_forbid_setid(pTHX_ char *s)
-{
- if (PL_euid != PL_uid)
- Perl_croak(aTHX_ "No %s allowed while running setuid", s);
- if (PL_egid != PL_gid)
- Perl_croak(aTHX_ "No %s allowed while running setgid", s);
-}
-
-void
-Perl_init_debugger(pTHX)
-{
- HV *ostash = PL_curstash;
-
- PL_curstash = PL_debstash;
- PL_dbargs = GvAV(gv_AVadd((gv_fetchpv("args", GV_ADDMULTI, SVt_PVAV))));
- AvREAL_off(PL_dbargs);
- PL_DBgv = gv_fetchpv("DB", GV_ADDMULTI, SVt_PVGV);
- PL_DBline = gv_fetchpv("dbline", GV_ADDMULTI, SVt_PVAV);
- PL_DBsub = gv_HVadd(gv_fetchpv("sub", GV_ADDMULTI, SVt_PVHV));
- sv_upgrade(GvSV(PL_DBsub), SVt_IV); /* IVX accessed if PERLDB_SUB_NN */
- PL_DBsingle = GvSV((gv_fetchpv("single", GV_ADDMULTI, SVt_PV)));
- sv_setiv(PL_DBsingle, 0);
- PL_DBtrace = GvSV((gv_fetchpv("trace", GV_ADDMULTI, SVt_PV)));
- sv_setiv(PL_DBtrace, 0);
- PL_DBsignal = GvSV((gv_fetchpv("signal", GV_ADDMULTI, SVt_PV)));
- sv_setiv(PL_DBsignal, 0);
- PL_curstash = ostash;
-}
-
-#ifndef STRESS_REALLOC
-#define REASONABLE(size) (size)
-#else
-#define REASONABLE(size) (1) /* unreasonable */
-#endif
-
-void
-Perl_init_stacks(pTHX)
-{
- /* start with 128-item stack and 8K cxstack */
- PL_curstackinfo = new_stackinfo(REASONABLE(128),
- REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
- PL_curstackinfo->si_type = PERLSI_MAIN;
- PL_curstack = PL_curstackinfo->si_stack;
- PL_mainstack = PL_curstack; /* remember in case we switch stacks */
-
- PL_stack_base = AvARRAY(PL_curstack);
- PL_stack_sp = PL_stack_base;
- PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
-
- New(50,PL_tmps_stack,REASONABLE(128),SV*);
- PL_tmps_floor = -1;
- PL_tmps_ix = -1;
- PL_tmps_max = REASONABLE(128);
-
- New(54,PL_markstack,REASONABLE(32),I32);
- PL_markstack_ptr = PL_markstack;
- PL_markstack_max = PL_markstack + REASONABLE(32);
-
- SET_MARK_OFFSET;
-
- New(54,PL_scopestack,REASONABLE(32),I32);
- PL_scopestack_ix = 0;
- PL_scopestack_max = REASONABLE(32);
-
- New(54,PL_savestack,REASONABLE(128),ANY);
- PL_savestack_ix = 0;
- PL_savestack_max = REASONABLE(128);
-
- New(54,PL_retstack,REASONABLE(16),OP*);
- PL_retstack_ix = 0;
- PL_retstack_max = REASONABLE(16);
-}
-
-#undef REASONABLE
-
-STATIC void
-S_nuke_stacks(pTHX)
-{
- while (PL_curstackinfo->si_next)
- PL_curstackinfo = PL_curstackinfo->si_next;
- while (PL_curstackinfo) {
- PERL_SI *p = PL_curstackinfo->si_prev;
- /* curstackinfo->si_stack got nuked by sv_free_arenas() */
- Safefree(PL_curstackinfo->si_cxstack);
- Safefree(PL_curstackinfo);
- PL_curstackinfo = p;
- }
- Safefree(PL_tmps_stack);
- Safefree(PL_markstack);
- Safefree(PL_scopestack);
- Safefree(PL_savestack);
- Safefree(PL_retstack);
-}
-
-#ifndef PERL_OBJECT
-static PerlIO *tmpfp; /* moved outside init_lexer() because of UNICOS bug */
-#endif
-
-STATIC void
-S_init_lexer(pTHX)
-{
-#ifdef PERL_OBJECT
- PerlIO *tmpfp;
-#endif
- tmpfp = PL_rsfp;
- PL_rsfp = Nullfp;
- lex_start(PL_linestr);
- PL_rsfp = tmpfp;
- PL_subname = newSVpvn("main",4);
-}
-
-STATIC void
-S_init_predump_symbols(pTHX)
-{
- GV *tmpgv;
- IO *io;
-
- sv_setpvn(get_sv("\"", TRUE), " ", 1);
- PL_stdingv = gv_fetchpv("STDIN",TRUE, SVt_PVIO);
- GvMULTI_on(PL_stdingv);
- io = GvIOp(PL_stdingv);
- IoIFP(io) = PerlIO_stdin();
- tmpgv = gv_fetchpv("stdin",TRUE, SVt_PV);
- GvMULTI_on(tmpgv);
- GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
-
- tmpgv = gv_fetchpv("STDOUT",TRUE, SVt_PVIO);
- GvMULTI_on(tmpgv);
- io = GvIOp(tmpgv);
- IoOFP(io) = IoIFP(io) = PerlIO_stdout();
- setdefout(tmpgv);
- tmpgv = gv_fetchpv("stdout",TRUE, SVt_PV);
- GvMULTI_on(tmpgv);
- GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
-
- PL_stderrgv = gv_fetchpv("STDERR",TRUE, SVt_PVIO);
- GvMULTI_on(PL_stderrgv);
- io = GvIOp(PL_stderrgv);
- IoOFP(io) = IoIFP(io) = PerlIO_stderr();
- tmpgv = gv_fetchpv("stderr",TRUE, SVt_PV);
- GvMULTI_on(tmpgv);
- GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
-
- PL_statname = NEWSV(66,0); /* last filename we did stat on */
-
- if (PL_osname)
- Safefree(PL_osname);
- PL_osname = savepv(OSNAME);
-}
-
-STATIC void
-S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register char **env)
-{
- char *s;
- SV *sv;
- GV* tmpgv;
- char **dup_env_base = 0;
- int dup_env_count = 0;
-
- argc--,argv++; /* skip name of script */
- if (PL_doswitches) {
- for (; argc > 0 && **argv == '-'; argc--,argv++) {
- if (!argv[0][1])
- break;
- if (argv[0][1] == '-' && !argv[0][2]) {
- argc--,argv++;
- break;
- }
- if ((s = strchr(argv[0], '='))) {
- *s++ = '\0';
- sv_setpv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),s);
- }
- else
- sv_setiv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),1);
- }
- }
- PL_toptarget = NEWSV(0,0);
- sv_upgrade(PL_toptarget, SVt_PVFM);
- sv_setpvn(PL_toptarget, "", 0);
- PL_bodytarget = NEWSV(0,0);
- sv_upgrade(PL_bodytarget, SVt_PVFM);
- sv_setpvn(PL_bodytarget, "", 0);
- PL_formtarget = PL_bodytarget;
-
- TAINT;
- if ((tmpgv = gv_fetchpv("0",TRUE, SVt_PV))) {
-#ifdef MACOS_TRADITIONAL
- /* $0 is not majick on a Mac */
- sv_setpv(GvSV(tmpgv),MacPerl_MPWFileName(PL_origfilename));
-#else
- sv_setpv(GvSV(tmpgv),PL_origfilename);
- magicname("0", "0", 1);
-#endif
- }
- if ((tmpgv = gv_fetchpv("\030",TRUE, SVt_PV)))
-#ifdef OS2
- sv_setpv(GvSV(tmpgv), os2_execname(aTHX));
-#else
- sv_setpv(GvSV(tmpgv),PL_origargv[0]);
-#endif
- if ((PL_argvgv = gv_fetchpv("ARGV",TRUE, SVt_PVAV))) {
- GvMULTI_on(PL_argvgv);
- (void)gv_AVadd(PL_argvgv);
- av_clear(GvAVn(PL_argvgv));
- for (; argc > 0; argc--,argv++) {
- SV *sv = newSVpv(argv[0],0);
- av_push(GvAVn(PL_argvgv),sv);
- if (PL_widesyscalls)
- (void)sv_utf8_decode(sv);
- }
- }
- if ((PL_envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV))) {
- HV *hv;
- GvMULTI_on(PL_envgv);
- hv = GvHVn(PL_envgv);
- hv_magic(hv, Nullgv, 'E');
-#ifdef USE_ENVIRON_ARRAY
- /* Note that if the supplied env parameter is actually a copy
- of the global environ then it may now point to free'd memory
- if the environment has been modified since. To avoid this
- problem we treat env==NULL as meaning 'use the default'
- */
- if (!env)
- env = environ;
- if (env != environ)
- environ[0] = Nullch;
-#ifdef NEED_ENVIRON_DUP_FOR_MODIFY
- {
- char **env_base;
- for (env_base = env; *env; env++)
- dup_env_count++;
- if ((dup_env_base = (char **)
- safesysmalloc( sizeof(char *) * (dup_env_count+1) ))) {
- char **dup_env;
- for (env = env_base, dup_env = dup_env_base;
- *env;
- env++, dup_env++) {
- /* With environ one needs to use safesysmalloc(). */
- *dup_env = safesysmalloc(strlen(*env) + 1);
- (void)strcpy(*dup_env, *env);
- }
- *dup_env = Nullch;
- env = dup_env_base;
- } /* else what? */
- }
-#endif /* NEED_ENVIRON_DUP_FOR_MODIFY */
- for (; *env; env++) {
- if (!(s = strchr(*env,'=')))
- continue;
- *s++ = '\0';
-#if defined(MSDOS)
- (void)strupr(*env);
-#endif
- sv = newSVpv(s--,0);
- (void)hv_store(hv, *env, s - *env, sv, 0);
- *s = '=';
- }
-#ifdef NEED_ENVIRON_DUP_FOR_MODIFY
- if (dup_env_base) {
- char **dup_env;
- for (dup_env = dup_env_base; *dup_env; dup_env++)
- safesysfree(*dup_env);
- safesysfree(dup_env_base);
- }
-#endif /* NEED_ENVIRON_DUP_FOR_MODIFY */
-#endif /* USE_ENVIRON_ARRAY */
-#ifdef DYNAMIC_ENV_FETCH
- HvNAME(hv) = savepv(ENV_HV_NAME);
-#endif
- }
- TAINT_NOT;
- if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV)))
- sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid());
-}
-
-STATIC void
-S_init_perllib(pTHX)
-{
- char *s;
- if (!PL_tainting) {
-#ifndef VMS
- s = PerlEnv_getenv("PERL5LIB");
- if (s)
- incpush(s, TRUE, TRUE);
- else
- incpush(PerlEnv_getenv("PERLLIB"), FALSE, FALSE);
-#else /* VMS */
- /* Treat PERL5?LIB as a possible search list logical name -- the
- * "natural" VMS idiom for a Unix path string. We allow each
- * element to be a set of |-separated directories for compatibility.
- */
- char buf[256];
- int idx = 0;
- if (my_trnlnm("PERL5LIB",buf,0))
- do { incpush(buf,TRUE,TRUE); } while (my_trnlnm("PERL5LIB",buf,++idx));
- else
- while (my_trnlnm("PERLLIB",buf,idx++)) incpush(buf,FALSE,FALSE);
-#endif /* VMS */
- }
-
-/* Use the ~-expanded versions of APPLLIB (undocumented),
- ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
-*/
-#ifdef APPLLIB_EXP
- incpush(APPLLIB_EXP, TRUE, TRUE);
-#endif
-
-#ifdef ARCHLIB_EXP
- incpush(ARCHLIB_EXP, FALSE, FALSE);
-#endif
-#ifdef MACOS_TRADITIONAL
- {
- struct stat tmpstatbuf;
- SV * privdir = NEWSV(55, 0);
- char * macperl = PerlEnv_getenv("MACPERL");
-
- if (!macperl)
- macperl = "";
-
- Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
- incpush(SvPVX(privdir), TRUE, FALSE);
- Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
- if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
- incpush(SvPVX(privdir), TRUE, FALSE);
-
- SvREFCNT_dec(privdir);
- }
- if (!PL_tainting)
- incpush(":", FALSE, FALSE);
-#else
-#ifndef PRIVLIB_EXP
-# define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
-#endif
-#if defined(WIN32)
- incpush(PRIVLIB_EXP, TRUE, FALSE);
-#else
- incpush(PRIVLIB_EXP, FALSE, FALSE);
-#endif
-
-#ifdef SITEARCH_EXP
- /* sitearch is always relative to sitelib on Windows for
- * DLL-based path intuition to work correctly */
-# if !defined(WIN32)
- incpush(SITEARCH_EXP, FALSE, FALSE);
-# endif
-#endif
-
-#ifdef SITELIB_EXP
-# if defined(WIN32)
- incpush(SITELIB_EXP, TRUE, FALSE); /* this picks up sitearch as well */
-# else
- incpush(SITELIB_EXP, FALSE, FALSE);
-# endif
-#endif
-
-#ifdef SITELIB_STEM /* Search for version-specific dirs below here */
- incpush(SITELIB_STEM, FALSE, TRUE);
-#endif
-
-#ifdef PERL_VENDORARCH_EXP
- /* vendorarch is always relative to vendorlib on Windows for
- * DLL-based path intuition to work correctly */
-# if !defined(WIN32)
- incpush(PERL_VENDORARCH_EXP, FALSE, FALSE);
-# endif
-#endif
-
-#ifdef PERL_VENDORLIB_EXP
-# if defined(WIN32)
- incpush(PERL_VENDORLIB_EXP, TRUE, FALSE); /* this picks up vendorarch as well */
-# else
- incpush(PERL_VENDORLIB_EXP, FALSE, FALSE);
-# endif
-#endif
-
-#ifdef PERL_VENDORLIB_STEM /* Search for version-specific dirs below here */
- incpush(PERL_VENDORLIB_STEM, FALSE, TRUE);
-#endif
-
-#ifdef PERL_OTHERLIBDIRS
- incpush(PERL_OTHERLIBDIRS, TRUE, TRUE);
-#endif
-
- if (!PL_tainting)
- incpush(".", FALSE, FALSE);
-#endif /* MACOS_TRADITIONAL */
-}
-
-#if defined(DOSISH) || defined(EPOC)
-# define PERLLIB_SEP ';'
-#else
-# if defined(VMS)
-# define PERLLIB_SEP '|'
-# else
-# if defined(MACOS_TRADITIONAL)
-# define PERLLIB_SEP ','
-# else
-# define PERLLIB_SEP ':'
-# endif
-# endif
-#endif
-#ifndef PERLLIB_MANGLE
-# define PERLLIB_MANGLE(s,n) (s)
-#endif
-
-STATIC void
-S_incpush(pTHX_ char *p, int addsubdirs, int addoldvers)
-{
- SV *subdir = Nullsv;
-
- if (!p || !*p)
- return;
-
- if (addsubdirs || addoldvers) {
- subdir = sv_newmortal();
- }
-
- /* Break at all separators */
- while (p && *p) {
- SV *libdir = NEWSV(55,0);
- char *s;
-
- /* skip any consecutive separators */
- while ( *p == PERLLIB_SEP ) {
- /* Uncomment the next line for PATH semantics */
- /* av_push(GvAVn(PL_incgv), newSVpvn(".", 1)); */
- p++;
- }
-
- if ( (s = strchr(p, PERLLIB_SEP)) != Nullch ) {
- sv_setpvn(libdir, PERLLIB_MANGLE(p, (STRLEN)(s - p)),
- (STRLEN)(s - p));
- p = s + 1;
- }
- else {
- sv_setpv(libdir, PERLLIB_MANGLE(p, 0));
- p = Nullch; /* break out */
- }
-#ifdef MACOS_TRADITIONAL
- if (!strchr(SvPVX(libdir), ':'))
- sv_insert(libdir, 0, 0, ":", 1);
- if (SvPVX(libdir)[SvCUR(libdir)-1] != ':')
- sv_catpv(libdir, ":");
-#endif
-
- /*
- * BEFORE pushing libdir onto @INC we may first push version- and
- * archname-specific sub-directories.
- */
- if (addsubdirs || addoldvers) {
-#ifdef PERL_INC_VERSION_LIST
- /* Configure terminates PERL_INC_VERSION_LIST with a NULL */
- const char *incverlist[] = { PERL_INC_VERSION_LIST };
- const char **incver;
-#endif
- struct stat tmpstatbuf;
-#ifdef VMS
- char *unix;
- STRLEN len;
-
- if ((unix = tounixspec_ts(SvPV(libdir,len),Nullch)) != Nullch) {
- len = strlen(unix);
- while (unix[len-1] == '/') len--; /* Cosmetic */
- sv_usepvn(libdir,unix,len);
- }
- else
- PerlIO_printf(Perl_error_log,
- "Failed to unixify @INC element \"%s\"\n",
- SvPV(libdir,len));
-#endif
- if (addsubdirs) {
-#ifdef MACOS_TRADITIONAL
-#define PERL_AV_SUFFIX_FMT ""
-#define PERL_ARCH_FMT "%s:"
-#define PERL_ARCH_FMT_PATH PERL_FS_VER_FMT PERL_AV_SUFFIX_FMT
-#else
-#define PERL_AV_SUFFIX_FMT "/"
-#define PERL_ARCH_FMT "/%s"
-#define PERL_ARCH_FMT_PATH PERL_AV_SUFFIX_FMT PERL_FS_VER_FMT
-#endif
- /* .../version/archname if -d .../version/archname */
- Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH PERL_ARCH_FMT,
- libdir,
- (int)PERL_REVISION, (int)PERL_VERSION,
- (int)PERL_SUBVERSION, ARCHNAME);
- if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
- S_ISDIR(tmpstatbuf.st_mode))
- av_push(GvAVn(PL_incgv), newSVsv(subdir));
-
- /* .../version if -d .../version */
- Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH, libdir,
- (int)PERL_REVISION, (int)PERL_VERSION,
- (int)PERL_SUBVERSION);
- if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
- S_ISDIR(tmpstatbuf.st_mode))
- av_push(GvAVn(PL_incgv), newSVsv(subdir));
-
- /* .../archname if -d .../archname */
- Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, ARCHNAME);
- if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
- S_ISDIR(tmpstatbuf.st_mode))
- av_push(GvAVn(PL_incgv), newSVsv(subdir));
- }
-
-#ifdef PERL_INC_VERSION_LIST
- if (addoldvers) {
- for (incver = incverlist; *incver; incver++) {
- /* .../xxx if -d .../xxx */
- Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, *incver);
- if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
- S_ISDIR(tmpstatbuf.st_mode))
- av_push(GvAVn(PL_incgv), newSVsv(subdir));
- }
- }
-#endif
- }
-
- /* finally push this lib directory on the end of @INC */
- av_push(GvAVn(PL_incgv), libdir);
- }
-}
-
-#ifdef USE_THREADS
-STATIC struct perl_thread *
-S_init_main_thread(pTHX)
-{
-#if !defined(PERL_IMPLICIT_CONTEXT)
- struct perl_thread *thr;
-#endif
- XPV *xpv;
-
- Newz(53, thr, 1, struct perl_thread);
- PL_curcop = &PL_compiling;
- thr->interp = PERL_GET_INTERP;
- thr->cvcache = newHV();
- thr->threadsv = newAV();
- /* thr->threadsvp is set when find_threadsv is called */
- thr->specific = newAV();
- thr->flags = THRf_R_JOINABLE;
- MUTEX_INIT(&thr->mutex);
- /* Handcraft thrsv similarly to mess_sv */
- New(53, PL_thrsv, 1, SV);
- Newz(53, xpv, 1, XPV);
- SvFLAGS(PL_thrsv) = SVt_PV;
- SvANY(PL_thrsv) = (void*)xpv;
- SvREFCNT(PL_thrsv) = 1 << 30; /* practically infinite */
- SvPVX(PL_thrsv) = (char*)thr;
- SvCUR_set(PL_thrsv, sizeof(thr));
- SvLEN_set(PL_thrsv, sizeof(thr));
- *SvEND(PL_thrsv) = '\0'; /* in the trailing_nul field */
- thr->oursv = PL_thrsv;
- PL_chopset = " \n-";
- PL_dumpindent = 4;
-
- MUTEX_LOCK(&PL_threads_mutex);
- PL_nthreads++;
- thr->tid = 0;
- thr->next = thr;
- thr->prev = thr;
- MUTEX_UNLOCK(&PL_threads_mutex);
-
-#ifdef HAVE_THREAD_INTERN
- Perl_init_thread_intern(thr);
-#endif
-
-#ifdef SET_THREAD_SELF
- SET_THREAD_SELF(thr);
-#else
- thr->self = pthread_self();
-#endif /* SET_THREAD_SELF */
- PERL_SET_THX(thr);
-
- /*
- * These must come after the thread self setting
- * because sv_setpvn does SvTAINT and the taint
- * fields thread selfness being set.
- */
- PL_toptarget = NEWSV(0,0);
- sv_upgrade(PL_toptarget, SVt_PVFM);
- sv_setpvn(PL_toptarget, "", 0);
- PL_bodytarget = NEWSV(0,0);
- sv_upgrade(PL_bodytarget, SVt_PVFM);
- sv_setpvn(PL_bodytarget, "", 0);
- PL_formtarget = PL_bodytarget;
- thr->errsv = newSVpvn("", 0);
- (void) find_threadsv("@"); /* Ensure $@ is initialised early */
-
- PL_maxscream = -1;
- PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
- PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);
- PL_regint_start = MEMBER_TO_FPTR(Perl_re_intuit_start);
- PL_regint_string = MEMBER_TO_FPTR(Perl_re_intuit_string);
- PL_regfree = MEMBER_TO_FPTR(Perl_pregfree);
- PL_regindent = 0;
- PL_reginterp_cnt = 0;
-
- return thr;
-}
-#endif /* USE_THREADS */
-
-void
-Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
-{
- SV *atsv;
- line_t oldline = CopLINE(PL_curcop);
- CV *cv;
- STRLEN len;
- int ret;
- dJMPENV;
-
- while (AvFILL(paramList) >= 0) {
- cv = (CV*)av_shift(paramList);
- if ((PL_minus_c & 0x10) && (paramList == PL_beginav)) {
- /* save PL_beginav for compiler */
- if (! PL_beginav_save)
- PL_beginav_save = newAV();
- av_push(PL_beginav_save, (SV*)cv);
- } else {
- SAVEFREESV(cv);
- }
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_list_body), cv);
-#else
- JMPENV_PUSH(ret);
-#endif
- switch (ret) {
- case 0:
-#ifndef PERL_FLEXIBLE_EXCEPTIONS
- call_list_body(cv);
-#endif
- atsv = ERRSV;
- (void)SvPV(atsv, len);
- if (len) {
- STRLEN n_a;
- PL_curcop = &PL_compiling;
- CopLINE_set(PL_curcop, oldline);
- if (paramList == PL_beginav)
- sv_catpv(atsv, "BEGIN failed--compilation aborted");
- else
- Perl_sv_catpvf(aTHX_ atsv,
- "%s failed--call queue aborted",
- paramList == PL_checkav ? "CHECK"
- : paramList == PL_initav ? "INIT"
- : "END");
- while (PL_scopestack_ix > oldscope)
- LEAVE;
- JMPENV_POP;
- Perl_croak(aTHX_ "%s", SvPVx(atsv, n_a));
- }
- break;
- case 1:
- STATUS_ALL_FAILURE;
- /* FALL THROUGH */
- case 2:
- /* my_exit() was called */
- while (PL_scopestack_ix > oldscope)
- LEAVE;
- FREETMPS;
- PL_curstash = PL_defstash;
- PL_curcop = &PL_compiling;
- CopLINE_set(PL_curcop, oldline);
- JMPENV_POP;
- if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED)) {
- if (paramList == PL_beginav)
- Perl_croak(aTHX_ "BEGIN failed--compilation aborted");
- else
- Perl_croak(aTHX_ "%s failed--call queue aborted",
- paramList == PL_checkav ? "CHECK"
- : paramList == PL_initav ? "INIT"
- : "END");
- }
- my_exit_jump();
- /* NOTREACHED */
- case 3:
- if (PL_restartop) {
- PL_curcop = &PL_compiling;
- CopLINE_set(PL_curcop, oldline);
- JMPENV_JUMP(3);
- }
- PerlIO_printf(Perl_error_log, "panic: restartop\n");
- FREETMPS;
- break;
- }
- JMPENV_POP;
- }
-}
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-STATIC void *
-S_vcall_list_body(pTHX_ va_list args)
-{
- CV *cv = va_arg(args, CV*);
- return call_list_body(cv);
-}
-#endif
-
-STATIC void *
-S_call_list_body(pTHX_ CV *cv)
-{
- PUSHMARK(PL_stack_sp);
- call_sv((SV*)cv, G_EVAL|G_DISCARD);
- return NULL;
-}
-
-void
-Perl_my_exit(pTHX_ U32 status)
-{
- DEBUG_S(PerlIO_printf(Perl_debug_log, "my_exit: thread %p, status %lu\n",
- thr, (unsigned long) status));
- switch (status) {
- case 0:
- STATUS_ALL_SUCCESS;
- break;
- case 1:
- STATUS_ALL_FAILURE;
- break;
- default:
- STATUS_NATIVE_SET(status);
- break;
- }
- my_exit_jump();
-}
-
-void
-Perl_my_failure_exit(pTHX)
-{
-#ifdef VMS
- if (vaxc$errno & 1) {
- if (STATUS_NATIVE & 1) /* fortuitiously includes "-1" */
- STATUS_NATIVE_SET(44);
- }
- else {
- if (!vaxc$errno && errno) /* unlikely */
- STATUS_NATIVE_SET(44);
- else
- STATUS_NATIVE_SET(vaxc$errno);
- }
-#else
- int exitstatus;
- if (errno & 255)
- STATUS_POSIX_SET(errno);
- else {
- exitstatus = STATUS_POSIX >> 8;
- if (exitstatus & 255)
- STATUS_POSIX_SET(exitstatus);
- else
- STATUS_POSIX_SET(255);
- }
-#endif
- my_exit_jump();
-}
-
-STATIC void
-S_my_exit_jump(pTHX)
-{
- register PERL_CONTEXT *cx;
- I32 gimme;
- SV **newsp;
-
- if (PL_e_script) {
- SvREFCNT_dec(PL_e_script);
- PL_e_script = Nullsv;
- }
-
- POPSTACK_TO(PL_mainstack);
- if (cxstack_ix >= 0) {
- if (cxstack_ix > 0)
- dounwind(0);
- POPBLOCK(cx,PL_curpm);
- LEAVE;
- }
-
- JMPENV_JUMP(2);
-}
-
-#ifdef PERL_OBJECT
-#include "XSUB.h"
-#endif
-
-static I32
-read_e_script(pTHXo_ int idx, SV *buf_sv, int maxlen)
-{
- char *p, *nl;
- p = SvPVX(PL_e_script);
- nl = strchr(p, '\n');
- nl = (nl) ? nl+1 : SvEND(PL_e_script);
- if (nl-p == 0) {
- filter_del(read_e_script);
- return 0;
- }
- sv_catpvn(buf_sv, p, nl-p);
- sv_chop(PL_e_script, nl);
- return 1;
-}
diff --git a/contrib/perl5/perl.h b/contrib/perl5/perl.h
deleted file mode 100644
index 2e2b8ca..0000000
--- a/contrib/perl5/perl.h
+++ /dev/null
@@ -1,3478 +0,0 @@
-/* perl.h
- *
- * Copyright (c) 1987-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $FreeBSD$
- */
-#ifndef H_PERL
-#define H_PERL 1
-
-#ifdef PERL_FOR_X2P
-/*
- * This file is being used for x2p stuff.
- * Above symbol is defined via -D in 'x2p/Makefile.SH'
- * Decouple x2p stuff from some of perls more extreme eccentricities.
- */
-#undef MULTIPLICITY
-#undef USE_STDIO
-#define USE_STDIO
-#endif /* PERL_FOR_X2P */
-
-#define VOIDUSED 1
-#include "config.h"
-
-#if defined(USE_ITHREADS) && defined(USE_5005THREADS)
-# include "error: USE_ITHREADS and USE_5005THREADS are incompatible"
-#endif
-
-/* XXX This next guard can disappear if the sources are revised
- to use USE_5005THREADS throughout. -- A.D 1/6/2000
-*/
-#if defined(USE_ITHREADS) && defined(USE_THREADS)
-# include "error: USE_ITHREADS and USE_THREADS are incompatible"
-#endif
-
-/* See L<perlguts/"The Perl API"> for detailed notes on
- * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */
-
-#ifdef USE_ITHREADS
-# if !defined(MULTIPLICITY) && !defined(PERL_OBJECT)
-# define MULTIPLICITY
-# endif
-#endif
-
-#ifdef USE_THREADS
-# ifndef PERL_IMPLICIT_CONTEXT
-# define PERL_IMPLICIT_CONTEXT
-# endif
-#endif
-
-#if defined(MULTIPLICITY)
-# ifndef PERL_IMPLICIT_CONTEXT
-# define PERL_IMPLICIT_CONTEXT
-# endif
-#endif
-
-#ifdef PERL_CAPI
-# undef PERL_OBJECT
-# ifndef MULTIPLICITY
-# define MULTIPLICITY
-# endif
-# ifndef PERL_IMPLICIT_CONTEXT
-# define PERL_IMPLICIT_CONTEXT
-# endif
-# ifndef PERL_IMPLICIT_SYS
-# define PERL_IMPLICIT_SYS
-# endif
-#endif
-
-#ifdef PERL_OBJECT
-# ifndef PERL_IMPLICIT_CONTEXT
-# define PERL_IMPLICIT_CONTEXT
-# endif
-# ifndef PERL_IMPLICIT_SYS
-# define PERL_IMPLICIT_SYS
-# endif
-#endif
-
-#ifdef PERL_OBJECT
-
-/* PERL_OBJECT explained - DickH and DougL @ ActiveState.com
-
-Defining PERL_OBJECT turns on creation of a C++ object that
-contains all writable core perl global variables and functions.
-Stated another way, all necessary global variables and functions
-are members of a big C++ object. This object's class is CPerlObj.
-This allows a Perl Host to have multiple, independent perl
-interpreters in the same process space. This is very important on
-Win32 systems as the overhead of process creation is quite high --
-this could be even higher than the script compile and execute time
-for small scripts.
-
-The perl executable implementation on Win32 is composed of perl.exe
-(the Perl Host) and perlX.dll. (the Perl Core). This allows the
-same Perl Core to easily be embedded in other applications that use
-the perl interpreter.
-
-+-----------+
-| Perl Host |
-+-----------+
- ^
- |
- v
-+-----------+ +-----------+
-| Perl Core |<->| Extension |
-+-----------+ +-----------+ ...
-
-Defining PERL_OBJECT has the following effects:
-
-PERL CORE
-1. CPerlObj is defined (this is the PERL_OBJECT)
-2. all static functions that needed to access either global
-variables or functions needed are made member functions
-3. all writable static variables are made member variables
-4. all global variables and functions are defined as:
- #define var CPerlObj::PL_var
- #define func CPerlObj::Perl_func
- * these are in embed.h
-This necessitated renaming some local variables and functions that
-had the same name as a global variable or function. This was
-probably a _good_ thing anyway.
-
-
-EXTENSIONS
-1. Access to global variables and perl functions is through a
-pointer to the PERL_OBJECT. This pointer type is CPerlObj*. This is
-made transparent to extension developers by the following macros:
- #define var pPerl->PL_var
- #define func pPerl->Perl_func
- * these are done in objXSUB.h
-This requires that the extension be compiled as C++, which means
-that the code must be ANSI C and not K&R C. For K&R extensions,
-please see the C API notes located in Win32/GenCAPI.pl. This script
-creates a perlCAPI.lib that provides a K & R compatible C interface
-to the PERL_OBJECT.
-2. Local variables and functions cannot have the same name as perl's
-variables or functions since the macros will redefine these. Look for
-this if you get some strange error message and it does not look like
-the code that you had written. This often happens with variables that
-are local to a function.
-
-PERL HOST
-1. The perl host is linked with perlX.lib to get perl_alloc. This
-function will return a pointer to CPerlObj (the PERL_OBJECT). It
-takes pointers to the various PerlXXX_YYY interfaces (see iperlsys.h
-for more information on this).
-2. The perl host calls the same functions as normally would be
-called in setting up and running a perl script, except that the
-functions are now member functions of the PERL_OBJECT.
-
-*/
-
-
-class CPerlObj;
-
-#define STATIC
-#define CPERLscope(x) CPerlObj::x
-#define CALL_FPTR(fptr) (aTHXo->*fptr)
-
-#define pTHXo CPerlObj *pPerl
-#define pTHXo_ pTHXo,
-#define aTHXo this
-#define aTHXo_ this,
-#define PERL_OBJECT_THIS aTHXo
-#define PERL_OBJECT_THIS_ aTHXo_
-#define dTHXoa(a) pTHXo = (CPerlObj*)a
-#define dTHXo pTHXo = PERL_GET_THX
-
-#define pTHXx void
-#define pTHXx_
-#define aTHXx
-#define aTHXx_
-
-#else /* !PERL_OBJECT */
-
-#ifdef PERL_IMPLICIT_CONTEXT
-# ifdef USE_THREADS
-struct perl_thread;
-# define pTHX register struct perl_thread *thr
-# define aTHX thr
-# define dTHR dNOOP /* only backward compatibility */
-# define dTHXa(a) pTHX = (struct perl_thread*)a
-# else
-# ifndef MULTIPLICITY
-# define MULTIPLICITY
-# endif
-# define pTHX register PerlInterpreter *my_perl
-# define aTHX my_perl
-# define dTHXa(a) pTHX = (PerlInterpreter*)a
-# endif
-# define dTHX pTHX = PERL_GET_THX
-# define pTHX_ pTHX,
-# define aTHX_ aTHX,
-# define pTHX_1 2
-# define pTHX_2 3
-# define pTHX_3 4
-# define pTHX_4 5
-#endif
-
-#define STATIC static
-#define CPERLscope(x) x
-#define CPERLarg void
-#define CPERLarg_
-#define _CPERLarg
-#define PERL_OBJECT_THIS
-#define _PERL_OBJECT_THIS
-#define PERL_OBJECT_THIS_
-#define CALL_FPTR(fptr) (*fptr)
-
-#endif /* PERL_OBJECT */
-
-#define CALLRUNOPS CALL_FPTR(PL_runops)
-#define CALLREGCOMP CALL_FPTR(PL_regcompp)
-#define CALLREGEXEC CALL_FPTR(PL_regexecp)
-#define CALLREG_INTUIT_START CALL_FPTR(PL_regint_start)
-#define CALLREG_INTUIT_STRING CALL_FPTR(PL_regint_string)
-#define CALLREGFREE CALL_FPTR(PL_regfree)
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-# define CALLPROTECT CALL_FPTR(PL_protect)
-#endif
-
-#define NOOP (void)0
-#define dNOOP extern int Perl___notused
-
-#ifndef pTHX
-# define pTHX void
-# define pTHX_
-# define aTHX
-# define aTHX_
-# define dTHXa(a) dNOOP
-# define dTHX dNOOP
-# define pTHX_1 1
-# define pTHX_2 2
-# define pTHX_3 3
-# define pTHX_4 4
-#endif
-
-#ifndef pTHXo
-# define pTHXo pTHX
-# define pTHXo_ pTHX_
-# define aTHXo aTHX
-# define aTHXo_ aTHX_
-# define dTHXo dTHX
-# define dTHXoa(x) dTHXa(x)
-#endif
-
-#ifndef pTHXx
-# define pTHXx register PerlInterpreter *my_perl
-# define pTHXx_ pTHXx,
-# define aTHXx my_perl
-# define aTHXx_ aTHXx,
-# define dTHXx dTHX
-#endif
-
-#undef START_EXTERN_C
-#undef END_EXTERN_C
-#undef EXTERN_C
-#ifdef __cplusplus
-# define START_EXTERN_C extern "C" {
-# define END_EXTERN_C }
-# define EXTERN_C extern "C"
-#else
-# define START_EXTERN_C
-# define END_EXTERN_C
-# define EXTERN_C extern
-#endif
-
-#ifdef OP_IN_REGISTER
-# ifdef __GNUC__
-# define stringify_immed(s) #s
-# define stringify(s) stringify_immed(s)
-register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
-# endif
-#endif
-
-/*
- * STMT_START { statements; } STMT_END;
- * can be used as a single statement, as in
- * if (x) STMT_START { ... } STMT_END; else ...
- *
- * Trying to select a version that gives no warnings...
- */
-#if !(defined(STMT_START) && defined(STMT_END))
-# if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
-# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
-# define STMT_END )
-# else
- /* Now which other defined()s do we need here ??? */
-# if (VOIDFLAGS) && (defined(sun) || defined(__sun__))
-# define STMT_START if (1)
-# define STMT_END else (void)0
-# else
-# define STMT_START do
-# define STMT_END while (0)
-# endif
-# endif
-#endif
-
-#define WITH_THX(s) STMT_START { dTHX; s; } STMT_END
-#define WITH_THR(s) WITH_THX(s)
-
-/*
- * SOFT_CAST can be used for args to prototyped functions to retain some
- * type checking; it only casts if the compiler does not know prototypes.
- */
-#if defined(CAN_PROTOTYPE) && defined(DEBUGGING_COMPILE)
-#define SOFT_CAST(type)
-#else
-#define SOFT_CAST(type) (type)
-#endif
-
-#ifndef BYTEORDER /* Should never happen -- byteorder is in config.h */
-# define BYTEORDER 0x1234
-#endif
-
-/* Overall memory policy? */
-#ifndef CONSERVATIVE
-# define LIBERAL 1
-#endif
-
-#if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
-#define ASCIIish
-#else
-#undef ASCIIish
-#endif
-
-/*
- * The following contortions are brought to you on behalf of all the
- * standards, semi-standards, de facto standards, not-so-de-facto standards
- * of the world, as well as all the other botches anyone ever thought of.
- * The basic theory is that if we work hard enough here, the rest of the
- * code can be a lot prettier. Well, so much for theory. Sorry, Henry...
- */
-
-/* define this once if either system, instead of cluttering up the src */
-#if defined(MSDOS) || defined(atarist) || defined(WIN32)
-#define DOSISH 1
-#endif
-
-#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) || defined( EPOC)
-# define STANDARD_C 1
-#endif
-
-#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX) || defined( EPOC) || defined(__QNX__)
-# define DONT_DECLARE_STD 1
-#endif
-
-#if defined(HASVOLATILE) || defined(STANDARD_C)
-# ifdef __cplusplus
-# define VOL // to temporarily suppress warnings
-# else
-# define VOL volatile
-# endif
-#else
-# define VOL
-#endif
-
-#define TAINT (PL_tainted = TRUE)
-#define TAINT_NOT (PL_tainted = FALSE)
-#define TAINT_IF(c) if (c) { PL_tainted = TRUE; }
-#define TAINT_ENV() if (PL_tainting) { taint_env(); }
-#define TAINT_PROPER(s) if (PL_tainting) { taint_proper(Nullch, s); }
-
-/* XXX All process group stuff is handled in pp_sys.c. Should these
- defines move there? If so, I could simplify this a lot. --AD 9/96.
-*/
-/* Process group stuff changed from traditional BSD to POSIX.
- perlfunc.pod documents the traditional BSD-style syntax, so we'll
- try to preserve that, if possible.
-*/
-#ifdef HAS_SETPGID
-# define BSD_SETPGRP(pid, pgrp) setpgid((pid), (pgrp))
-#else
-# if defined(HAS_SETPGRP) && defined(USE_BSD_SETPGRP)
-# define BSD_SETPGRP(pid, pgrp) setpgrp((pid), (pgrp))
-# else
-# ifdef HAS_SETPGRP2 /* DG/UX */
-# define BSD_SETPGRP(pid, pgrp) setpgrp2((pid), (pgrp))
-# endif
-# endif
-#endif
-#if defined(BSD_SETPGRP) && !defined(HAS_SETPGRP)
-# define HAS_SETPGRP /* Well, effectively it does . . . */
-#endif
-
-/* getpgid isn't POSIX, but at least Solaris and Linux have it, and it makes
- our life easier :-) so we'll try it.
-*/
-#ifdef HAS_GETPGID
-# define BSD_GETPGRP(pid) getpgid((pid))
-#else
-# if defined(HAS_GETPGRP) && defined(USE_BSD_GETPGRP)
-# define BSD_GETPGRP(pid) getpgrp((pid))
-# else
-# ifdef HAS_GETPGRP2 /* DG/UX */
-# define BSD_GETPGRP(pid) getpgrp2((pid))
-# endif
-# endif
-#endif
-#if defined(BSD_GETPGRP) && !defined(HAS_GETPGRP)
-# define HAS_GETPGRP /* Well, effectively it does . . . */
-#endif
-
-/* These are not exact synonyms, since setpgrp() and getpgrp() may
- have different behaviors, but perl.h used to define USE_BSDPGRP
- (prior to 5.003_05) so some extension might depend on it.
-*/
-#if defined(USE_BSD_SETPGRP) || defined(USE_BSD_GETPGRP)
-# ifndef USE_BSDPGRP
-# define USE_BSDPGRP
-# endif
-#endif
-
-/* HP-UX 10.X CMA (Common Multithreaded Architecure) insists that
- pthread.h must be included before all other header files.
-*/
-#if (defined(USE_THREADS) || defined(USE_ITHREADS)) \
- && defined(PTHREAD_H_FIRST) && defined(I_PTHREAD)
-# include <pthread.h>
-#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 __cplusplus
-# ifndef I_STDARG
-# define I_STDARG 1
-# endif
-#endif
-
-#ifdef I_STDARG
-# include <stdarg.h>
-#else
-# ifdef I_VARARGS
-# include <varargs.h>
-# endif
-#endif
-
-#ifdef USE_NEXT_CTYPE
-
-#if NX_CURRENT_COMPILER_RELEASE >= 500
-# include <bsd/ctypes.h>
-#else
-# if NX_CURRENT_COMPILER_RELEASE >= 400
-# include <objc/NXCType.h>
-# else /* NX_CURRENT_COMPILER_RELEASE < 400 */
-# include <appkit/NXCType.h>
-# endif /* NX_CURRENT_COMPILER_RELEASE >= 400 */
-#endif /* NX_CURRENT_COMPILER_RELEASE >= 500 */
-
-#else /* !USE_NEXT_CTYPE */
-#include <ctype.h>
-#endif /* USE_NEXT_CTYPE */
-
-#ifdef METHOD /* Defined by OSF/1 v3.0 by ctype.h */
-#undef METHOD
-#endif
-
-#ifdef I_LOCALE
-# include <locale.h>
-#endif
-
-#if !defined(NO_LOCALE) && defined(HAS_SETLOCALE)
-# define USE_LOCALE
-# if !defined(NO_LOCALE_COLLATE) && defined(LC_COLLATE) \
- && defined(HAS_STRXFRM)
-# define USE_LOCALE_COLLATE
-# endif
-# if !defined(NO_LOCALE_CTYPE) && defined(LC_CTYPE)
-# define USE_LOCALE_CTYPE
-# endif
-# if !defined(NO_LOCALE_NUMERIC) && defined(LC_NUMERIC)
-# define USE_LOCALE_NUMERIC
-# endif
-#endif /* !NO_LOCALE && HAS_SETLOCALE */
-
-#include <setjmp.h>
-
-#ifdef I_SYS_PARAM
-# ifdef PARAM_NEEDS_TYPES
-# include <sys/types.h>
-# endif
-# include <sys/param.h>
-#endif
-
-/* Use all the "standard" definitions? */
-#if defined(STANDARD_C) && defined(I_STDLIB)
-# include <stdlib.h>
-#endif
-
-/* If this causes problems, set i_unistd=undef in the hint file. */
-#ifdef I_UNISTD
-# include <unistd.h>
-#endif
-
-#ifdef PERL_MICRO /* Last chance to export Perl_my_swap */
-# define MYSWAP
-#endif
-
-#if !defined(PERL_FOR_X2P) && !defined(WIN32)
-# include "embed.h"
-#endif
-
-#define MEM_SIZE Size_t
-
-#if defined(STANDARD_C) && defined(I_STDDEF)
-# include <stddef.h>
-# define STRUCT_OFFSET(s,m) offsetof(s,m)
-#else
-# define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m))
-#endif
-
-#if defined(I_STRING) || defined(__cplusplus)
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-/* This comes after <stdlib.h> so we don't try to change the standard
- * library prototypes; we'll use our own in proto.h instead. */
-
-#ifdef MYMALLOC
-# ifdef PERL_POLLUTE_MALLOC
-# ifndef PERL_EXTMALLOC_DEF
-# define Perl_malloc malloc
-# define Perl_calloc calloc
-# define Perl_realloc realloc
-# define Perl_mfree free
-# endif
-# else
-# define EMBEDMYMALLOC /* for compatibility */
-# endif
-Malloc_t Perl_malloc (MEM_SIZE nbytes);
-Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size);
-Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes);
-/* 'mfree' rather than 'free', since there is already a 'perl_free'
- * that causes clashes with case-insensitive linkers */
-Free_t Perl_mfree (Malloc_t where);
-
-typedef struct perl_mstats perl_mstats_t;
-
-# define safemalloc Perl_malloc
-# define safecalloc Perl_calloc
-# define saferealloc Perl_realloc
-# define safefree Perl_mfree
-#else /* MYMALLOC */
-# define safemalloc safesysmalloc
-# define safecalloc safesyscalloc
-# define saferealloc safesysrealloc
-# define safefree safesysfree
-#endif /* MYMALLOC */
-
-#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
-#define strchr index
-#define strrchr rindex
-#endif
-
-#ifdef I_MEMORY
-# include <memory.h>
-#endif
-
-#ifdef HAS_MEMCPY
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memcpy
- extern char * memcpy (char*, char*, int);
-# endif
-# endif
-#else
-# ifndef memcpy
-# ifdef HAS_BCOPY
-# define memcpy(d,s,l) bcopy(s,d,l)
-# else
-# define memcpy(d,s,l) my_bcopy(s,d,l)
-# endif
-# endif
-#endif /* HAS_MEMCPY */
-
-#ifdef HAS_MEMSET
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memset
- extern char *memset (char*, int, int);
-# endif
-# endif
-#else
-# define memset(d,c,l) my_memset(d,c,l)
-#endif /* HAS_MEMSET */
-
-#if !defined(HAS_MEMMOVE) && !defined(memmove)
-# if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
-# define memmove(d,s,l) bcopy(s,d,l)
-# else
-# if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)
-# define memmove(d,s,l) memcpy(d,s,l)
-# else
-# define memmove(d,s,l) my_bcopy(s,d,l)
-# endif
-# endif
-#endif
-
-#if defined(mips) && defined(ultrix) && !defined(__STDC__)
-# undef HAS_MEMCMP
-#endif
-
-#if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
-# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
-# ifndef memcmp
- extern int memcmp (char*, char*, int);
-# endif
-# endif
-# ifdef BUGGY_MSC
- # pragma function(memcmp)
-# endif
-#else
-# ifndef memcmp
-# define memcmp my_memcmp
-# endif
-#endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
-
-#ifndef memzero
-# ifdef HAS_MEMSET
-# define memzero(d,l) memset(d,0,l)
-# else
-# ifdef HAS_BZERO
-# define memzero(d,l) bzero(d,l)
-# else
-# define memzero(d,l) my_bzero(d,l)
-# endif
-# endif
-#endif
-
-#ifndef memchr
-# ifndef HAS_MEMCHR
-# define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)
-# endif
-#endif
-
-#ifndef HAS_BCMP
-# ifndef bcmp
-# define bcmp(s1,s2,l) memcmp(s1,s2,l)
-# endif
-#endif /* !HAS_BCMP */
-
-#ifdef I_NETINET_IN
-# include <netinet/in.h>
-#endif
-
-#ifdef I_ARPA_INET
-# include <arpa/inet.h>
-#endif
-
-#if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
-/* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
- * (the neo-BSD seem to do this). */
-# undef SF_APPEND
-#endif
-
-#ifdef I_SYS_STAT
-# include <sys/stat.h>
-#endif
-
-/* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
- like UTekV) are broken, sometimes giving false positives. Undefine
- them here and let the code below set them to proper values.
-
- The ghs macro stands for GreenHills Software C-1.8.5 which
- is the C compiler for sysV88 and the various derivatives.
- This header file bug is corrected in gcc-2.5.8 and later versions.
- --Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94. */
-
-#if defined(uts) || (defined(m88k) && defined(ghs))
-# undef S_ISDIR
-# undef S_ISCHR
-# undef S_ISBLK
-# undef S_ISREG
-# undef S_ISFIFO
-# undef S_ISLNK
-#endif
-
-#ifdef I_TIME
-# include <time.h>
-#endif
-
-#ifdef I_SYS_TIME
-# ifdef I_SYS_TIME_KERNEL
-# define KERNEL
-# endif
-# include <sys/time.h>
-# ifdef I_SYS_TIME_KERNEL
-# undef KERNEL
-# endif
-#endif
-
-#if defined(HAS_TIMES) && defined(I_SYS_TIMES)
-# include <sys/times.h>
-#endif
-
-#if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
-# undef HAS_STRERROR
-#endif
-
-#include <errno.h>
-
-#if defined(WIN32) && (defined(PERL_OBJECT) || defined(PERL_IMPLICIT_SYS) || defined(PERL_CAPI))
-# define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */
-#endif
-
-#if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.h */
-# include <sys/socket.h>
-# if defined(USE_SOCKS) && defined(I_SOCKS)
-# if !defined(INCLUDE_PROTOTYPES)
-# define INCLUDE_PROTOTYPES /* for <socks.h> */
-# define PERL_SOCKS_NEED_PROTOTYPES
-# endif
-# ifdef USE_THREADS
-# define PERL_USE_THREADS /* store our value */
-# undef USE_THREADS
-# endif
-# include <socks.h>
-# ifdef USE_THREADS
-# undef USE_THREADS /* socks.h does this on its own */
-# endif
-# ifdef PERL_USE_THREADS
-# define USE_THREADS /* restore our value */
-# undef PERL_USE_THREADS
-# endif
-# ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */
-# undef INCLUDE_PROTOTYPES
-# undef PERL_SOCKS_NEED_PROTOTYPES
-# endif
-# ifdef USE_64_BIT_ALL
-# define SOCKS_64BIT_BUG /* until proven otherwise */
-# endif
-# endif
-# ifdef I_NETDB
-# include <netdb.h>
-# endif
-# ifndef ENOTSOCK
-# ifdef I_NET_ERRNO
-# include <net/errno.h>
-# endif
-# endif
-#endif
-
-#ifdef SETERRNO
-# undef SETERRNO /* SOCKS might have defined this */
-#endif
-
-#ifdef VMS
-# define SETERRNO(errcode,vmserrcode) \
- STMT_START { \
- set_errno(errcode); \
- set_vaxc_errno(vmserrcode); \
- } STMT_END
-#else
-# define SETERRNO(errcode,vmserrcode) (errno = (errcode))
-#endif
-
-#ifdef USE_THREADS
-# define ERRSV (thr->errsv)
-# define DEFSV THREADSV(0)
-# define SAVE_DEFSV save_threadsv(0)
-#else
-# define ERRSV GvSV(PL_errgv)
-# define DEFSV GvSV(PL_defgv)
-# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
-#endif /* USE_THREADS */
-
-#define ERRHV GvHV(PL_errgv) /* XXX unused, here for compatibility */
-
-#ifndef errno
- extern int errno; /* ANSI allows errno to be an lvalue expr.
- * For example in multithreaded environments
- * something like this might happen:
- * extern int *_errno(void);
- * #define errno (*_errno()) */
-#endif
-
-#ifdef HAS_STRERROR
-# ifdef VMS
- char *strerror (int,...);
-# else
-#ifndef DONT_DECLARE_STD
- char *strerror (int);
-#endif
-# endif
-# ifndef Strerror
-# define Strerror strerror
-# endif
-#else
-# ifdef HAS_SYS_ERRLIST
- extern int sys_nerr;
- extern char *sys_errlist[];
-# ifndef Strerror
-# define Strerror(e) \
- ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
-# endif
-# endif
-#endif
-
-#ifdef I_SYS_IOCTL
-# ifndef _IOCTL_
-# include <sys/ioctl.h>
-# endif
-#endif
-
-#if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
-# ifdef HAS_SOCKETPAIR
-# undef HAS_SOCKETPAIR
-# endif
-# ifdef I_NDBM
-# undef I_NDBM
-# endif
-#endif
-
-#if INTSIZE == 2
-# define htoni htons
-# define ntohi ntohs
-#else
-# define htoni htonl
-# define ntohi ntohl
-#endif
-
-/* Configure already sets Direntry_t */
-#if defined(I_DIRENT)
-# include <dirent.h>
- /* NeXT needs dirent + sys/dir.h */
-# if defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__))
-# include <sys/dir.h>
-# endif
-#else
-# ifdef I_SYS_NDIR
-# include <sys/ndir.h>
-# else
-# ifdef I_SYS_DIR
-# ifdef hp9000s500
-# include <ndir.h> /* may be wrong in the future */
-# else
-# include <sys/dir.h>
-# endif
-# endif
-# endif
-#endif
-
-#ifdef FPUTS_BOTCH
-/* work around botch in SunOS 4.0.1 and 4.0.2 */
-# ifndef fputs
-# define fputs(sv,fp) fprintf(fp,"%s",sv)
-# 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.)
- */
-
-#ifdef I_SYSMODE
-#include <sys/mode.h>
-#endif
-
-#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
-#endif
-
-#ifndef S_IRGRP
-# ifdef S_IRUSR
-# define S_IRGRP (S_IRUSR>>3)
-# define S_IWGRP (S_IWUSR>>3)
-# define S_IXGRP (S_IXUSR>>3)
-# else
-# define S_IRGRP 0040
-# define S_IWGRP 0020
-# define S_IXGRP 0010
-# endif
-#endif
-
-#ifndef S_IROTH
-# ifdef S_IRUSR
-# define S_IROTH (S_IRUSR>>6)
-# define S_IWOTH (S_IWUSR>>6)
-# define S_IXOTH (S_IXUSR>>6)
-# else
-# define S_IROTH 0040
-# define S_IWOTH 0020
-# define S_IXOTH 0010
-# endif
-#endif
-
-#ifndef S_ISUID
-# define S_ISUID 04000
-#endif
-
-#ifndef S_ISGID
-# define S_ISGID 02000
-#endif
-
-#ifndef S_IRWXU
-# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
-#endif
-
-#ifndef S_IRWXG
-# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
-#endif
-
-#ifndef S_IRWXO
-# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
-#endif
-
-#ifndef S_IREAD
-# define S_IREAD S_IRUSR
-#endif
-
-#ifndef S_IWRITE
-# define S_IWRITE S_IWUSR
-#endif
-
-#ifndef S_IEXEC
-# define S_IEXEC S_IXUSR
-#endif
-
-#ifdef ff_next
-# undef ff_next
-#endif
-
-#if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
-# define SLOPPYDIVIDE
-#endif
-
-#ifdef UV
-#undef UV
-#endif
-
-/*
- The IV type is supposed to be long enough to hold any integral
- value or a pointer.
- --Andy Dougherty August 1996
-*/
-
-typedef IVTYPE IV;
-typedef UVTYPE UV;
-
-#if defined(USE_64_BIT_INT) && defined(HAS_QUAD)
-# if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX)
-# define IV_MAX INT64_MAX
-# define IV_MIN INT64_MIN
-# define UV_MAX UINT64_MAX
-# ifndef UINT64_MIN
-# define UINT64_MIN 0
-# endif
-# define UV_MIN UINT64_MIN
-# else
-# define IV_MAX PERL_QUAD_MAX
-# define IV_MIN PERL_QUAD_MIN
-# define UV_MAX PERL_UQUAD_MAX
-# define UV_MIN PERL_UQUAD_MIN
-# endif
-# define IV_IS_QUAD
-# define UV_IS_QUAD
-#else
-# if defined(INT32_MAX) && IVSIZE == 4
-# define IV_MAX INT32_MAX
-# define IV_MIN INT32_MIN
-# ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
-# define UV_MAX UINT32_MAX
-# else
-# define UV_MAX 4294967295U
-# endif
-# ifndef UINT32_MIN
-# define UINT32_MIN 0
-# endif
-# define UV_MIN UINT32_MIN
-# else
-# define IV_MAX PERL_LONG_MAX
-# define IV_MIN PERL_LONG_MIN
-# define UV_MAX PERL_ULONG_MAX
-# define UV_MIN PERL_ULONG_MIN
-# endif
-# if IVSIZE == 8
-# define IV_IS_QUAD
-# define UV_IS_QUAD
-# ifndef HAS_QUAD
-# define HAS_QUAD
-# endif
-# else
-# undef IV_IS_QUAD
-# undef UV_IS_QUAD
-# undef HAS_QUAD
-# endif
-#endif
-
-#define IV_DIG (BIT_DIGITS(IVSIZE * 8))
-#define UV_DIG (BIT_DIGITS(UVSIZE * 8))
-
-/*
- * The macros INT2PTR and NUM2PTR are (despite their names)
- * bi-directional: they will convert int/float to or from pointers.
- * However the conversion to int/float are named explicitly:
- * PTR2IV, PTR2UV, PTR2NV.
- *
- * For int conversions we do not need two casts if pointers are
- * the same size as IV and UV. Otherwise we need an explicit
- * cast (PTRV) to avoid compiler warnings.
- */
-#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
-# define PTRV UV
-# define INT2PTR(any,d) (any)(d)
-#else
-# if PTRSIZE == LONGSIZE
-# define PTRV unsigned long
-# else
-# define PTRV unsigned
-# endif
-# define INT2PTR(any,d) (any)(PTRV)(d)
-#endif
-#define NUM2PTR(any,d) (any)(PTRV)(d)
-#define PTR2IV(p) INT2PTR(IV,p)
-#define PTR2UV(p) INT2PTR(UV,p)
-#define PTR2NV(p) NUM2PTR(NV,p)
-#if PTRSIZE == LONGSIZE
-# define PTR2ul(p) (unsigned long)(p)
-#else
-# define PTR2ul(p) INT2PTR(unsigned long,p)
-#endif
-
-#ifdef USE_LONG_DOUBLE
-# if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE
-# define LONG_DOUBLE_EQUALS_DOUBLE
-# endif
-# if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
-# undef USE_LONG_DOUBLE /* Ouch! */
-# endif
-#endif
-
-#ifdef OVR_DBL_DIG
-/* Use an overridden DBL_DIG */
-# ifdef DBL_DIG
-# undef DBL_DIG
-# endif
-# define DBL_DIG OVR_DBL_DIG
-#else
-/* The following is all to get DBL_DIG, in order to pick a nice
- default value for printing floating point numbers in Gconvert.
- (see config.h)
-*/
-#ifdef I_LIMITS
-#include <limits.h>
-#endif
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifndef HAS_DBL_DIG
-#define DBL_DIG 15 /* A guess that works lots of places */
-#endif
-#endif
-#ifdef I_FLOAT
-#include <float.h>
-#endif
-#ifndef HAS_DBL_DIG
-#define DBL_DIG 15 /* A guess that works lots of places */
-#endif
-
-#ifdef OVR_LDBL_DIG
-/* Use an overridden LDBL_DIG */
-# ifdef LDBL_DIG
-# undef LDBL_DIG
-# endif
-# define LDBL_DIG OVR_LDBL_DIG
-#else
-/* The following is all to get LDBL_DIG, in order to pick a nice
- default value for printing floating point numbers in Gconvert.
- (see config.h)
-*/
-# ifdef I_LIMITS
-# include <limits.h>
-# endif
-# ifdef I_FLOAT
-# include <float.h>
-# endif
-# ifndef HAS_LDBL_DIG
-# if LONG_DOUBLESIZE == 10
-# define LDBL_DIG 18 /* assume IEEE */
-# else
-# if LONG_DOUBLESIZE == 12
-# define LDBL_DIG 18 /* gcc? */
-# else
-# if LONG_DOUBLESIZE == 16
-# define LDBL_DIG 33 /* assume IEEE */
-# else
-# if LONG_DOUBLESIZE == DOUBLESIZE
-# define LDBL_DIG DBL_DIG /* bummer */
-# endif
-# endif
-# endif
-# endif
-# endif
-#endif
-
-typedef NVTYPE NV;
-
-#ifdef I_IEEEFP
-# include <ieeefp.h>
-#endif
-
-#ifdef USE_LONG_DOUBLE
-# ifdef I_SUNMATH
-# include <sunmath.h>
-# endif
-# define NV_DIG LDBL_DIG
-# ifdef LDBL_MANT_DIG
-# define NV_MANT_DIG LDBL_MANT_DIG
-# endif
-# ifdef LDBL_MAX
-# define NV_MAX LDBL_MAX
-# define NV_MIN LDBL_MIN
-# else
-# ifdef HUGE_VALL
-# define NV_MAX HUGE_VALL
-# else
-# ifdef HUGE_VAL
-# define NV_MAX ((NV)HUGE_VAL)
-# endif
-# endif
-# endif
-# ifdef HAS_SQRTL
-# define Perl_cos cosl
-# define Perl_sin sinl
-# define Perl_sqrt sqrtl
-# define Perl_exp expl
-# define Perl_log logl
-# define Perl_atan2 atan2l
-# define Perl_pow powl
-# define Perl_floor floorl
-# define Perl_fmod fmodl
-# endif
-/* e.g. libsunmath doesn't have modfl and frexpl as of mid-March 2000 */
-# ifdef HAS_MODFL
-# define Perl_modf(x,y) modfl(x,y)
-# else
-# define Perl_modf(x,y) ((long double)modf((double)(x),(double*)(y)))
-# endif
-# ifdef HAS_FREXPL
-# define Perl_frexp(x,y) frexpl(x,y)
-# else
-# define Perl_frexp(x,y) ((long double)frexp((double)(x),y))
-# endif
-# ifdef HAS_ISNANL
-# define Perl_isnan(x) isnanl(x)
-# else
-# ifdef HAS_ISNAN
-# define Perl_isnan(x) isnan((double)(x))
-# else
-# define Perl_isnan(x) ((x)!=(x))
-# endif
-# endif
-#else
-# define NV_DIG DBL_DIG
-# ifdef DBL_MANT_DIG
-# define NV_MANT_DIG DBL_MANT_DIG
-# endif
-# ifdef DBL_MAX
-# define NV_MAX DBL_MAX
-# define NV_MIN DBL_MIN
-# else
-# ifdef HUGE_VAL
-# define NV_MAX HUGE_VAL
-# endif
-# endif
-# define Perl_cos cos
-# define Perl_sin sin
-# define Perl_sqrt sqrt
-# define Perl_exp exp
-# define Perl_log log
-# define Perl_atan2 atan2
-# define Perl_pow pow
-# define Perl_floor floor
-# define Perl_fmod fmod
-# define Perl_modf(x,y) modf(x,y)
-# define Perl_frexp(x,y) frexp(x,y)
-# ifdef HAS_ISNAN
-# define Perl_isnan(x) isnan(x)
-# else
-# define Perl_isnan(x) ((x)!=(x))
-# endif
-#endif
-
-#if !defined(Perl_atof) && defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
-# if !defined(Perl_atof) && defined(HAS_STRTOLD)
-# define Perl_atof(s) (NV)strtold(s, (char**)NULL)
-# endif
-# if !defined(Perl_atof) && defined(HAS_ATOLF)
-# define Perl_atof (NV)atolf
-# endif
-# if !defined(Perl_atof) && defined(PERL_SCNfldbl)
-# define Perl_atof PERL_SCNfldbl
-# define Perl_atof2(s,f) sscanf((s), "%"PERL_SCNfldbl, &(f))
-# endif
-#endif
-#if !defined(Perl_atof)
-# define Perl_atof atof /* we assume atof being available anywhere */
-#endif
-#if !defined(Perl_atof2)
-# define Perl_atof2(s,f) ((f) = (NV)Perl_atof(s))
-#endif
-
-/* Previously these definitions used hardcoded figures.
- * It is hoped these formula are more portable, although
- * no data one way or another is presently known to me.
- * The "PERL_" names are used because these calculated constants
- * do not meet the ANSI requirements for LONG_MAX, etc., which
- * need to be constants acceptable to #if - kja
- * define PERL_LONG_MAX 2147483647L
- * define PERL_LONG_MIN (-LONG_MAX - 1)
- * define PERL ULONG_MAX 4294967295L
- */
-
-#ifdef I_LIMITS /* Needed for cast_xxx() functions below. */
-# include <limits.h>
-#else
-#ifdef I_VALUES
-# include <values.h>
-#endif
-#endif
-
-/*
- * Try to figure out max and min values for the integral types. THE CORRECT
- * SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE. The
- * following hacks are used if neither limits.h or values.h provide them:
- * U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
- * for types < int: (unsigned TYPE)~(unsigned)0
- * The argument to ~ must be unsigned so that later signed->unsigned
- * conversion can't modify the value's bit pattern (e.g. -0 -> +0),
- * and it must not be smaller than int because ~ does integral promotion.
- * <type>_MAX: (<type>) (U<type>_MAX >> 1)
- * <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
- * The latter is a hack which happens to work on some machines but
- * does *not* catch any random system, or things like integer types
- * with NaN if that is possible.
- *
- * All of the types are explicitly cast to prevent accidental loss of
- * numeric range, and in the hope that they will be less likely to confuse
- * over-eager optimizers.
- *
- */
-
-#define PERL_UCHAR_MIN ((unsigned char)0)
-
-#ifdef UCHAR_MAX
-# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
-#else
-# ifdef MAXUCHAR
-# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
-# else
-# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
-# endif
-#endif
-
-/*
- * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
- * ambiguous. It may be equivalent to (signed char) or (unsigned char)
- * depending on local options. Until Configure detects this (or at least
- * detects whether the "signed" keyword is available) the CHAR ranges
- * will not be included. UCHAR functions normally.
- * - kja
- */
-
-#define PERL_USHORT_MIN ((unsigned short)0)
-
-#ifdef USHORT_MAX
-# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
-#else
-# ifdef MAXUSHORT
-# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
-# else
-# ifdef USHRT_MAX
-# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
-# else
-# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
-# endif
-# endif
-#endif
-
-#ifdef SHORT_MAX
-# define PERL_SHORT_MAX ((short)SHORT_MAX)
-#else
-# ifdef MAXSHORT /* Often used in <values.h> */
-# define PERL_SHORT_MAX ((short)MAXSHORT)
-# else
-# ifdef SHRT_MAX
-# define PERL_SHORT_MAX ((short)SHRT_MAX)
-# else
-# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
-# endif
-# endif
-#endif
-
-#ifdef SHORT_MIN
-# define PERL_SHORT_MIN ((short)SHORT_MIN)
-#else
-# ifdef MINSHORT
-# define PERL_SHORT_MIN ((short)MINSHORT)
-# else
-# ifdef SHRT_MIN
-# define PERL_SHORT_MIN ((short)SHRT_MIN)
-# else
-# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
-# endif
-# endif
-#endif
-
-#ifdef UINT_MAX
-# define PERL_UINT_MAX ((unsigned int)UINT_MAX)
-#else
-# ifdef MAXUINT
-# define PERL_UINT_MAX ((unsigned int)MAXUINT)
-# else
-# define PERL_UINT_MAX (~(unsigned int)0)
-# endif
-#endif
-
-#define PERL_UINT_MIN ((unsigned int)0)
-
-#ifdef INT_MAX
-# define PERL_INT_MAX ((int)INT_MAX)
-#else
-# ifdef MAXINT /* Often used in <values.h> */
-# define PERL_INT_MAX ((int)MAXINT)
-# else
-# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
-# endif
-#endif
-
-#ifdef INT_MIN
-# define PERL_INT_MIN ((int)INT_MIN)
-#else
-# ifdef MININT
-# define PERL_INT_MIN ((int)MININT)
-# else
-# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
-# endif
-#endif
-
-#ifdef ULONG_MAX
-# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
-#else
-# ifdef MAXULONG
-# define PERL_ULONG_MAX ((unsigned long)MAXULONG)
-# else
-# define PERL_ULONG_MAX (~(unsigned long)0)
-# endif
-#endif
-
-#define PERL_ULONG_MIN ((unsigned long)0L)
-
-#ifdef LONG_MAX
-# define PERL_LONG_MAX ((long)LONG_MAX)
-#else
-# ifdef MAXLONG /* Often used in <values.h> */
-# define PERL_LONG_MAX ((long)MAXLONG)
-# else
-# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
-# endif
-#endif
-
-#ifdef LONG_MIN
-# define PERL_LONG_MIN ((long)LONG_MIN)
-#else
-# ifdef MINLONG
-# define PERL_LONG_MIN ((long)MINLONG)
-# else
-# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
-# endif
-#endif
-
-#ifdef UV_IS_QUAD
-
-# define PERL_UQUAD_MAX (~(UV)0)
-# define PERL_UQUAD_MIN ((UV)0)
-# define PERL_QUAD_MAX ((IV) (PERL_UQUAD_MAX >> 1))
-# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
-
-#endif
-
-struct perl_mstats {
- UV *nfree;
- UV *ntotal;
- IV topbucket, topbucket_ev, topbucket_odd, totfree, total, total_chain;
- IV total_sbrk, sbrks, sbrk_good, sbrk_slack, start_slack, sbrked_remains;
- IV minbucket;
- /* Level 1 info */
- UV *bucket_mem_size;
- UV *bucket_available_size;
- UV nbuckets;
-};
-
-typedef MEM_SIZE STRLEN;
-
-typedef struct op OP;
-typedef struct cop COP;
-typedef struct unop UNOP;
-typedef struct binop BINOP;
-typedef struct listop LISTOP;
-typedef struct logop LOGOP;
-typedef struct pmop PMOP;
-typedef struct svop SVOP;
-typedef struct padop PADOP;
-typedef struct pvop PVOP;
-typedef struct loop LOOP;
-
-typedef struct interpreter PerlInterpreter;
-#ifdef UTS
-# define STRUCT_SV perl_sv /* Amdahl's <ksync.h> has struct sv */
-#else
-# define STRUCT_SV sv
-#endif
-typedef struct STRUCT_SV SV;
-typedef struct av AV;
-typedef struct hv HV;
-typedef struct cv CV;
-typedef struct regexp REGEXP;
-typedef struct gp GP;
-typedef struct gv GV;
-typedef struct io IO;
-typedef struct context PERL_CONTEXT;
-typedef struct block BLOCK;
-
-typedef struct magic MAGIC;
-typedef struct xrv XRV;
-typedef struct xpv XPV;
-typedef struct xpviv XPVIV;
-typedef struct xpvuv XPVUV;
-typedef struct xpvnv XPVNV;
-typedef struct xpvmg XPVMG;
-typedef struct xpvlv XPVLV;
-typedef struct xpvav XPVAV;
-typedef struct xpvhv XPVHV;
-typedef struct xpvgv XPVGV;
-typedef struct xpvcv XPVCV;
-typedef struct xpvbm XPVBM;
-typedef struct xpvfm XPVFM;
-typedef struct xpvio XPVIO;
-typedef struct mgvtbl MGVTBL;
-typedef union any ANY;
-typedef struct ptr_tbl_ent PTR_TBL_ENT_t;
-typedef struct ptr_tbl PTR_TBL_t;
-
-#include "handy.h"
-
-#if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_RAWIO)
-# if LSEEKSIZE == 8 && !defined(USE_64_BIT_RAWIO)
-# define USE_64_BIT_RAWIO /* implicit */
-# endif
-#endif
-
-/* Notice the use of HAS_FSEEKO: now we are obligated to always use
- * fseeko/ftello if possible. Don't go #defining ftell to ftello yourself,
- * however, because operating systems like to do that themself. */
-#ifndef FSEEKSIZE
-# ifdef HAS_FSEEKO
-# define FSEEKSIZE LSEEKSIZE
-# else
-# define FSEEKSIZE LONGSIZE
-# endif
-#endif
-
-#if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO)
-# if FSEEKSIZE == 8 && !defined(USE_64_BIT_STDIO)
-# define USE_64_BIT_STDIO /* implicit */
-# endif
-#endif
-
-#ifdef USE_64_BIT_RAWIO
-# ifdef HAS_OFF64_T
-# undef Off_t
-# define Off_t off64_t
-# undef LSEEKSIZE
-# define LSEEKSIZE 8
-# endif
-/* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
- * will trigger defines like the ones below. Some 64-bit environments,
- * however, do not. Therefore we have to explicitly mix and match. */
-# if defined(USE_OPEN64)
-# define open open64
-# endif
-# if defined(USE_LSEEK64)
-# define lseek lseek64
-# else
-# if defined(USE_LLSEEK)
-# define lseek llseek
-# endif
-# endif
-# if defined(USE_STAT64)
-# define stat stat64
-# endif
-# if defined(USE_FSTAT64)
-# define fstat fstat64
-# endif
-# if defined(USE_LSTAT64)
-# define lstat lstat64
-# endif
-# if defined(USE_FLOCK64)
-# define flock flock64
-# endif
-# if defined(USE_LOCKF64)
-# define lockf lockf64
-# endif
-# if defined(USE_FCNTL64)
-# define fcntl fcntl64
-# endif
-# if defined(USE_TRUNCATE64)
-# define truncate truncate64
-# endif
-# if defined(USE_FTRUNCATE64)
-# define ftruncate ftruncate64
-# endif
-#endif
-
-#ifdef USE_64_BIT_STDIO
-# ifdef HAS_FPOS64_T
-# undef Fpos_t
-# define Fpos_t fpos64_t
-# endif
-/* Most 64-bit environments have defines like _LARGEFILE_SOURCE that
- * will trigger defines like the ones below. Some 64-bit environments,
- * however, do not. */
-# if defined(USE_FOPEN64)
-# define fopen fopen64
-# endif
-# if defined(USE_FSEEK64)
-# define fseek fseek64 /* don't do fseeko here, see perlio.c */
-# endif
-# if defined(USE_FTELL64)
-# define ftell ftell64 /* don't do ftello here, see perlio.c */
-# endif
-# if defined(USE_FSETPOS64)
-# define fsetpos fsetpos64
-# endif
-# if defined(USE_FGETPOS64)
-# define fgetpos fgetpos64
-# endif
-# if defined(USE_TMPFILE64)
-# define tmpfile tmpfile64
-# endif
-# if defined(USE_FREOPEN64)
-# define freopen freopen64
-# endif
-#endif
-
-#if defined(OS2)
-# include "iperlsys.h"
-#endif
-
-#if defined(__OPEN_VM)
-# include "vmesa/vmesaish.h"
-#endif
-
-#ifdef DOSISH
-# if defined(OS2)
-# include "os2ish.h"
-# else
-# include "dosish.h"
-# endif
-#else
-# if defined(VMS)
-# include "vmsish.h"
-# else
-# if defined(PLAN9)
-# include "./plan9/plan9ish.h"
-# else
-# if defined(MPE)
-# include "mpeix/mpeixish.h"
-# else
-# if defined(__VOS__)
-# include "vosish.h"
-# else
-# if defined(EPOC)
-# include "epocish.h"
-# else
-# if defined(MACOS_TRADITIONAL)
-# include "macos/macish.h"
-# ifndef NO_ENVIRON_ARRAY
-# define NO_ENVIRON_ARRAY
-# endif
-# else
-# include "unixish.h"
-# endif
-# endif
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#ifndef NO_ENVIRON_ARRAY
-# define USE_ENVIRON_ARRAY
-#endif
-
-#ifdef JPL
- /* E.g. JPL needs to operate on a copy of the real environment.
- * JDK 1.2 and 1.3 seem to get upset if the original environment
- * is diddled with. */
-# define NEED_ENVIRON_DUP_FOR_MODIFY
-#endif
-
-#ifndef PERL_SYS_INIT3
-# define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
-#endif
-
-#ifndef MAXPATHLEN
-# ifdef PATH_MAX
-# ifdef _POSIX_PATH_MAX
-# if PATH_MAX > _POSIX_PATH_MAX
-/* MAXPATHLEN is supposed to include the final null character,
- * as opposed to PATH_MAX and _POSIX_PATH_MAX. */
-# define MAXPATHLEN (PATH_MAX+1)
-# else
-# define MAXPATHLEN (_POSIX_PATH_MAX+1)
-# endif
-# else
-# define MAXPATHLEN (PATH_MAX+1)
-# endif
-# else
-# ifdef _POSIX_PATH_MAX
-# define MAXPATHLEN (_POSIX_PATH_MAX+1)
-# else
-# define MAXPATHLEN 1024 /* Err on the large side. */
-# endif
-# endif
-#endif
-
-/*
- * USE_THREADS needs to be after unixish.h as <pthread.h> includes
- * <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
- * this results in many functions being undeclared which bothers C++
- * May make sense to have threads after "*ish.h" anyway
- */
-
-#if defined(USE_THREADS) || defined(USE_ITHREADS)
-# if defined(USE_THREADS)
- /* pending resolution of licensing issues, we avoid the erstwhile
- * atomic.h everywhere */
-# define EMULATE_ATOMIC_REFCOUNTS
-# endif
-# ifdef FAKE_THREADS
-# include "fakethr.h"
-# else
-# ifdef WIN32
-# include <win32thread.h>
-# else
-# ifdef OS2
-# include "os2thread.h"
-# else
-# ifdef I_MACH_CTHREADS
-# include <mach/cthreads.h>
-# if (defined(NeXT) || defined(__NeXT__)) && defined(PERL_POLLUTE_MALLOC)
-# define MUTEX_INIT_CALLS_MALLOC
-# endif
-typedef cthread_t perl_os_thread;
-typedef mutex_t perl_mutex;
-typedef condition_t perl_cond;
-typedef void * perl_key;
-# else /* Posix threads */
-# ifdef I_PTHREAD
-# include <pthread.h>
-# endif
-typedef pthread_t perl_os_thread;
-typedef pthread_mutex_t perl_mutex;
-typedef pthread_cond_t perl_cond;
-typedef pthread_key_t perl_key;
-# endif /* I_MACH_CTHREADS */
-# endif /* OS2 */
-# endif /* WIN32 */
-# endif /* FAKE_THREADS */
-#endif /* USE_THREADS || USE_ITHREADS */
-
-#ifdef WIN32
-# include "win32.h"
-#endif
-
-#ifdef VMS
-# define STATUS_NATIVE PL_statusvalue_vms
-# define STATUS_NATIVE_EXPORT \
- (((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ? 0x10000000 : 0))
-# define STATUS_NATIVE_SET(n) \
- STMT_START { \
- PL_statusvalue_vms = (n); \
- if ((I32)PL_statusvalue_vms == -1) \
- PL_statusvalue = -1; \
- else if (PL_statusvalue_vms & STS$M_SUCCESS) \
- PL_statusvalue = 0; \
- else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0) \
- PL_statusvalue = 1 << 8; \
- else \
- PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8; \
- } STMT_END
-# define STATUS_POSIX PL_statusvalue
-# ifdef VMSISH_STATUS
-# define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
-# else
-# define STATUS_CURRENT STATUS_POSIX
-# endif
-# define STATUS_POSIX_SET(n) \
- STMT_START { \
- PL_statusvalue = (n); \
- if (PL_statusvalue != -1) { \
- PL_statusvalue &= 0xFFFF; \
- PL_statusvalue_vms = PL_statusvalue ? 44 : 1; \
- } \
- else PL_statusvalue_vms = -1; \
- } STMT_END
-# define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_vms = 1)
-# define STATUS_ALL_FAILURE (PL_statusvalue = 1, PL_statusvalue_vms = 44)
-#else
-# define STATUS_NATIVE STATUS_POSIX
-# define STATUS_NATIVE_EXPORT STATUS_POSIX
-# define STATUS_NATIVE_SET STATUS_POSIX_SET
-# define STATUS_POSIX PL_statusvalue
-# define STATUS_POSIX_SET(n) \
- STMT_START { \
- PL_statusvalue = (n); \
- if (PL_statusvalue != -1) \
- PL_statusvalue &= 0xFFFF; \
- } STMT_END
-# define STATUS_CURRENT STATUS_POSIX
-# define STATUS_ALL_SUCCESS (PL_statusvalue = 0)
-# define STATUS_ALL_FAILURE (PL_statusvalue = 1)
-#endif
-
-/* flags in PL_exit_flags for nature of exit() */
-#define PERL_EXIT_EXPECTED 0x01
-
-#ifndef MEMBER_TO_FPTR
-# define MEMBER_TO_FPTR(name) name
-#endif
-
-/* format to use for version numbers in file/directory names */
-/* XXX move to Configure? */
-#ifndef PERL_FS_VER_FMT
-# define PERL_FS_VER_FMT "%d.%d.%d"
-#endif
-
-/* This defines a way to flush all output buffers. This may be a
- * performance issue, so we allow people to disable it.
- */
-#ifndef PERL_FLUSHALL_FOR_CHILD
-# if defined(FFLUSH_NULL) || defined(USE_SFIO)
-# define PERL_FLUSHALL_FOR_CHILD PerlIO_flush((PerlIO*)NULL)
-# else
-# ifdef FFLUSH_ALL
-# define PERL_FLUSHALL_FOR_CHILD my_fflush_all()
-# else
-# define PERL_FLUSHALL_FOR_CHILD NOOP
-# endif
-# endif
-#endif
-
-#ifndef PERL_WAIT_FOR_CHILDREN
-# define PERL_WAIT_FOR_CHILDREN NOOP
-#endif
-
-/* the traditional thread-unsafe notion of "current interpreter". */
-#ifndef PERL_SET_INTERP
-# define PERL_SET_INTERP(i) (PL_curinterp = (PerlInterpreter*)(i))
-#endif
-
-#ifndef PERL_GET_INTERP
-# define PERL_GET_INTERP (PL_curinterp)
-#endif
-
-#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX)
-# ifdef USE_THREADS
-# define PERL_GET_THX ((struct perl_thread *)PERL_GET_CONTEXT)
-# else
-# ifdef MULTIPLICITY
-# define PERL_GET_THX ((PerlInterpreter *)PERL_GET_CONTEXT)
-# else
-# ifdef PERL_OBJECT
-# define PERL_GET_THX ((CPerlObj *)PERL_GET_CONTEXT)
-# endif
-# endif
-# endif
-# define PERL_SET_THX(t) PERL_SET_CONTEXT(t)
-#endif
-
-#ifndef SVf
-# ifdef CHECK_FORMAT
-# define SVf "p"
-# else
-# define SVf "_"
-# endif
-#endif
-
-#ifndef UVf
-# ifdef CHECK_FORMAT
-# define UVf UVuf
-# else
-# define UVf "Vu"
-# endif
-#endif
-
-#ifndef VDf
-# ifdef CHECK_FORMAT
-# define VDf "p"
-# else
-# define VDf "vd"
-# endif
-#endif
-
-/* Some unistd.h's give a prototype for pause() even though
- HAS_PAUSE ends up undefined. This causes the #define
- below to be rejected by the compiler. Sigh.
-*/
-#ifdef HAS_PAUSE
-#define Pause pause
-#else
-#define Pause() sleep((32767<<16)+32767)
-#endif
-
-#ifndef IOCPARM_LEN
-# ifdef IOCPARM_MASK
- /* on BSDish systes we're safe */
-# define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
-# else
- /* otherwise guess at what's safe */
-# define IOCPARM_LEN(x) 256
-# endif
-#endif
-
-#if defined(__CYGWIN__)
-/* USEMYBINMODE
- * This symbol, if defined, indicates that the program should
- * use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
- * that a file is in "binary" mode -- that is, that no translation
- * of bytes occurs on read or write operations.
- */
-# define USEMYBINMODE / **/
-# define my_binmode(fp, iotype, mode) \
- (PerlLIO_setmode(PerlIO_fileno(fp), mode) != -1 ? TRUE : FALSE)
-#endif
-
-#ifdef UNION_ANY_DEFINITION
-UNION_ANY_DEFINITION;
-#else
-union any {
- void* any_ptr;
- I32 any_i32;
- IV any_iv;
- long any_long;
- void (*any_dptr) (void*);
- void (*any_dxptr) (pTHXo_ void*);
-};
-#endif
-
-#ifdef USE_THREADS
-#define ARGSproto struct perl_thread *thr
-#else
-#define ARGSproto
-#endif /* USE_THREADS */
-
-typedef I32 (*filter_t) (pTHXo_ int, SV *, int);
-
-#define FILTER_READ(idx, sv, len) filter_read(idx, sv, len)
-#define FILTER_DATA(idx) (AvARRAY(PL_rsfp_filters)[idx])
-#define FILTER_ISREADER(idx) (idx >= AvFILLp(PL_rsfp_filters))
-
-#if !defined(OS2)
-# include "iperlsys.h"
-#endif
-#include "regexp.h"
-#include "sv.h"
-#include "util.h"
-#include "form.h"
-#include "gv.h"
-#include "cv.h"
-#include "opnames.h"
-#include "op.h"
-#include "cop.h"
-#include "av.h"
-#include "hv.h"
-#include "mg.h"
-#include "scope.h"
-#include "warnings.h"
-#include "utf8.h"
-
-/* Current curly descriptor */
-typedef struct curcur CURCUR;
-struct curcur {
- int parenfloor; /* how far back to strip paren data */
- int cur; /* how many instances of scan we've matched */
- int min; /* the minimal number of scans to match */
- int max; /* the maximal number of scans to match */
- int minmod; /* whether to work our way up or down */
- regnode * scan; /* the thing to match */
- regnode * next; /* what has to match after it */
- char * lastloc; /* where we started matching this scan */
- CURCUR * oldcc; /* current curly before we started this one */
-};
-
-typedef struct _sublex_info SUBLEXINFO;
-struct _sublex_info {
- I32 super_state; /* lexer state to save */
- I32 sub_inwhat; /* "lex_inwhat" to use */
- OP *sub_op; /* "lex_op" to use */
- char *super_bufptr; /* PL_bufptr that was */
- char *super_bufend; /* PL_bufend that was */
-};
-
-typedef struct magic_state MGS; /* struct magic_state defined in mg.c */
-
-struct scan_data_t; /* Used in S_* functions in regcomp.c */
-struct regnode_charclass_class; /* Used in S_* functions in regcomp.c */
-
-typedef I32 CHECKPOINT;
-
-struct ptr_tbl_ent {
- struct ptr_tbl_ent* next;
- void* oldval;
- void* newval;
-};
-
-struct ptr_tbl {
- struct ptr_tbl_ent** tbl_ary;
- UV tbl_max;
- UV tbl_items;
-};
-
-#if defined(iAPX286) || defined(M_I286) || defined(I80286)
-# define I286
-#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
-
-/*
- * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
- * -DWS
- */
-#if BYTEORDER != 0x1234
-# define HAS_VTOHL
-# define HAS_VTOHS
-# define HAS_HTOVL
-# define HAS_HTOVS
-# if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
-# define vtohl(x) ((((x)&0xFF)<<24) \
- +(((x)>>24)&0xFF) \
- +(((x)&0x0000FF00)<<8) \
- +(((x)&0x00FF0000)>>8) )
-# define vtohs(x) ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))
-# define htovl(x) vtohl(x)
-# define htovs(x) vtohs(x)
-# endif
- /* otherwise default to functions in util.c */
-#endif
-
-#ifdef CASTNEGFLOAT
-#define U_S(what) ((U16)(what))
-#define U_I(what) ((unsigned int)(what))
-#define U_L(what) ((U32)(what))
-#else
-#define U_S(what) ((U16)cast_ulong((NV)(what)))
-#define U_I(what) ((unsigned int)cast_ulong((NV)(what)))
-#define U_L(what) (cast_ulong((NV)(what)))
-#endif
-
-#ifdef CASTI32
-#define I_32(what) ((I32)(what))
-#define I_V(what) ((IV)(what))
-#define U_V(what) ((UV)(what))
-#else
-#define I_32(what) (cast_i32((NV)(what)))
-#define I_V(what) (cast_iv((NV)(what)))
-#define U_V(what) (cast_uv((NV)(what)))
-#endif
-
-/* These do not care about the fractional part, only about the range. */
-#define NV_WITHIN_IV(nv) (I_V(nv) >= IV_MIN && I_V(nv) <= IV_MAX)
-#define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX)
-
-/* Used with UV/IV arguments: */
- /* XXXX: need to speed it up */
-#define CLUMP_2UV(iv) ((iv) < 0 ? 0 : (UV)(iv))
-#define CLUMP_2IV(uv) ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv))
-
-#ifndef MAXSYSFD
-# define MAXSYSFD 2
-#endif
-
-#ifndef __cplusplus
-Uid_t getuid (void);
-Uid_t geteuid (void);
-Gid_t getgid (void);
-Gid_t getegid (void);
-#endif
-
-#ifndef Perl_debug_log
-# define Perl_debug_log PerlIO_stderr()
-#endif
-
-#ifndef Perl_error_log
-# define Perl_error_log (PL_stderrgv \
- && GvIOp(PL_stderrgv) \
- && IoOFP(GvIOp(PL_stderrgv)) \
- ? IoOFP(GvIOp(PL_stderrgv)) \
- : PerlIO_stderr())
-#endif
-
-#ifdef DEBUGGING
-#undef YYDEBUG
-#define YYDEBUG 1
-#define DEB(a) a
-#define DEBUG(a) if (PL_debug) a
-#define DEBUG_p(a) if (PL_debug & 1) a
-#define DEBUG_s(a) if (PL_debug & 2) a
-#define DEBUG_l(a) if (PL_debug & 4) a
-#define DEBUG_t(a) if (PL_debug & 8) a
-#define DEBUG_o(a) if (PL_debug & 16) a
-#define DEBUG_c(a) if (PL_debug & 32) a
-#define DEBUG_P(a) if (PL_debug & 64) a
-# if defined(PERL_OBJECT)
-# define DEBUG_m(a) if (PL_debug & 128) a
-# else
- /* Temporarily turn off memory debugging in case the a
- * does memory allocation, either directly or indirectly. */
-# define DEBUG_m(a) \
- STMT_START { \
- if (PERL_GET_INTERP) { dTHX; if (PL_debug & 128) {PL_debug&=~128; a; PL_debug|=128;} } \
- } STMT_END
-# endif
-#define DEBUG_f(a) if (PL_debug & 256) a
-#define DEBUG_r(a) if (PL_debug & 512) a
-#define DEBUG_x(a) if (PL_debug & 1024) a
-#define DEBUG_u(a) if (PL_debug & 2048) a
-#define DEBUG_L(a) if (PL_debug & 4096) a
-#define DEBUG_H(a) if (PL_debug & 8192) a
-#define DEBUG_X(a) if (PL_debug & 16384) a
-#define DEBUG_D(a) if (PL_debug & 32768) a
-# ifdef USE_THREADS
-# define DEBUG_S(a) if (PL_debug & (1<<16)) a
-# else
-# define DEBUG_S(a)
-# endif
-#define DEBUG_T(a) if (PL_debug & (1<<17)) a
-#else
-#define DEB(a)
-#define DEBUG(a)
-#define DEBUG_p(a)
-#define DEBUG_s(a)
-#define DEBUG_l(a)
-#define DEBUG_t(a)
-#define DEBUG_o(a)
-#define DEBUG_c(a)
-#define DEBUG_P(a)
-#define DEBUG_m(a)
-#define DEBUG_f(a)
-#define DEBUG_r(a)
-#define DEBUG_x(a)
-#define DEBUG_u(a)
-#define DEBUG_S(a)
-#define DEBUG_H(a)
-#define DEBUG_X(a)
-#define DEBUG_D(a)
-#define DEBUG_S(a)
-#define DEBUG_T(a)
-#endif
-#define YYMAXDEPTH 300
-
-#ifndef assert /* <assert.h> might have been included somehow */
-#define assert(what) DEB( { \
- if (!(what)) { \
- Perl_croak(aTHX_ "Assertion failed: file \"%s\", line %d", \
- __FILE__, __LINE__); \
- PerlProc_exit(1); \
- }})
-#endif
-
-struct ufuncs {
- I32 (*uf_val)(IV, SV*);
- I32 (*uf_set)(IV, SV*);
- IV uf_index;
-};
-
-/* Fix these up for __STDC__ */
-#ifndef DONT_DECLARE_STD
-char *mktemp (char*);
-#ifndef atof
-double atof (const char*);
-#endif
-#endif
-
-#ifndef STANDARD_C
-/* All of these are in stdlib.h or time.h for ANSI C */
-Time_t time();
-struct tm *gmtime(), *localtime();
-#if defined(OEMVS) || defined(__OPEN_VM)
-char *(strchr)(), *(strrchr)();
-char *(strcpy)(), *(strcat)();
-#else
-char *strchr(), *strrchr();
-char *strcpy(), *strcat();
-#endif
-#endif /* ! STANDARD_C */
-
-
-#ifdef I_MATH
-# include <math.h>
-#else
-START_EXTERN_C
- double exp (double);
- double log (double);
- double log10 (double);
- double sqrt (double);
- double frexp (double,int*);
- double ldexp (double,int);
- double modf (double,double*);
- double sin (double);
- double cos (double);
- double atan2 (double,double);
- double pow (double,double);
-END_EXTERN_C
-#endif
-
-#ifndef __cplusplus
-# if defined(NeXT) || defined(__NeXT__) /* or whatever catches all NeXTs */
-char *crypt (); /* Maybe more hosts will need the unprototyped version */
-# else
-# if !defined(WIN32)
-char *crypt (const char*, const char*);
-# endif /* !WIN32 */
-# endif /* !NeXT && !__NeXT__ */
-# ifndef DONT_DECLARE_STD
-# ifndef getenv
-char *getenv (const char*);
-# endif /* !getenv */
-# if !defined(HAS_LSEEK_PROTO) && !defined(EPOC) && !defined(__hpux)
-# ifdef _FILE_OFFSET_BITS
-# if _FILE_OFFSET_BITS == 64
-Off_t lseek (int,Off_t,int);
-# endif
-# endif
-# endif
-# endif /* !DONT_DECLARE_STD */
-char *getlogin (void);
-#endif /* !__cplusplus */
-
-#ifdef UNLINK_ALL_VERSIONS /* Currently only makes sense for VMS */
-#define UNLINK unlnk
-I32 unlnk (char*);
-#else
-#define UNLINK PerlLIO_unlink
-#endif
-
-#ifndef HAS_SETREUID
-# ifdef HAS_SETRESUID
-# define setreuid(r,e) setresuid(r,e,(Uid_t)-1)
-# define HAS_SETREUID
-# endif
-#endif
-#ifndef HAS_SETREGID
-# ifdef HAS_SETRESGID
-# define setregid(r,e) setresgid(r,e,(Gid_t)-1)
-# define HAS_SETREGID
-# endif
-#endif
-
-/* Sighandler_t defined in iperlsys.h */
-
-#ifdef HAS_SIGACTION
-typedef struct sigaction Sigsave_t;
-#else
-typedef Sighandler_t Sigsave_t;
-#endif
-
-#define SCAN_DEF 0
-#define SCAN_TR 1
-#define SCAN_REPL 2
-
-#ifdef DEBUGGING
-# ifndef register
-# define register
-# endif
-# define PAD_SV(po) pad_sv(po)
-# define RUNOPS_DEFAULT Perl_runops_debug
-#else
-# define PAD_SV(po) PL_curpad[po]
-# define RUNOPS_DEFAULT Perl_runops_standard
-#endif
-
-#ifdef MYMALLOC
-# ifdef MUTEX_INIT_CALLS_MALLOC
-# define MALLOC_INIT \
- STMT_START { \
- PL_malloc_mutex = NULL; \
- MUTEX_INIT(&PL_malloc_mutex); \
- } STMT_END
-# define MALLOC_TERM \
- STMT_START { \
- perl_mutex tmp = PL_malloc_mutex; \
- PL_malloc_mutex = NULL; \
- MUTEX_DESTROY(&tmp); \
- } STMT_END
-# else
-# define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
-# define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
-# endif
-#else
-# define MALLOC_INIT
-# define MALLOC_TERM
-#endif
-
-
-typedef int (CPERLscope(*runops_proc_t)) (pTHX);
-typedef OP* (CPERLscope(*PPADDR_t)[]) (pTHX);
-
-/* _ (for $_) must be first in the following list (DEFSV requires it) */
-#define THREADSV_NAMES "_123456789&`'+/.,\\\";^-%=|~:\001\005!@"
-
-/* NeXT has problems with crt0.o globals */
-#if defined(__DYNAMIC__) && \
- (defined(NeXT) || defined(__NeXT__) || defined(__APPLE__))
-# if defined(NeXT) || defined(__NeXT)
-# include <mach-o/dyld.h>
-# define environ (*environ_pointer)
-EXT char *** environ_pointer;
-# else
-# if defined(__APPLE__) && defined(PERL_CORE)
-# include <crt_externs.h> /* for the env array */
-# define environ (*_NSGetEnviron())
-# endif
-# endif
-#else
- /* VMS and some other platforms don't use the environ array */
-# ifdef USE_ENVIRON_ARRAY
-# if !defined(DONT_DECLARE_STD) || \
- (defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
- defined(__sgi) || \
- defined(__DGUX)
-extern char ** environ; /* environment variables supplied via exec */
-# endif
-# endif
-#endif
-
-START_EXTERN_C
-
-/* handy constants */
-EXTCONST char PL_warn_uninit[]
- INIT("Use of uninitialized value%s%s");
-EXTCONST char PL_warn_nosemi[]
- INIT("Semicolon seems to be missing");
-EXTCONST char PL_warn_reserved[]
- INIT("Unquoted string \"%s\" may clash with future reserved word");
-EXTCONST char PL_warn_nl[]
- INIT("Unsuccessful %s on filename containing newline");
-EXTCONST char PL_no_wrongref[]
- INIT("Can't use %s ref as %s ref");
-EXTCONST char PL_no_symref[]
- INIT("Can't use string (\"%.32s\") as %s ref while \"strict refs\" in use");
-EXTCONST char PL_no_usym[]
- INIT("Can't use an undefined value as %s reference");
-EXTCONST char PL_no_aelem[]
- INIT("Modification of non-creatable array value attempted, subscript %d");
-EXTCONST char PL_no_helem[]
- INIT("Modification of non-creatable hash value attempted, subscript \"%s\"");
-EXTCONST char PL_no_modify[]
- INIT("Modification of a read-only value attempted");
-EXTCONST char PL_no_mem[]
- INIT("Out of memory!\n");
-EXTCONST char PL_no_security[]
- INIT("Insecure dependency in %s%s");
-EXTCONST char PL_no_sock_func[]
- INIT("Unsupported socket function \"%s\" called");
-EXTCONST char PL_no_dir_func[]
- INIT("Unsupported directory function \"%s\" called");
-EXTCONST char PL_no_func[]
- INIT("The %s function is unimplemented");
-EXTCONST char PL_no_myglob[]
- INIT("\"my\" variable %s can't be in a package");
-
-EXTCONST char PL_uuemap[65]
- INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_");
-
-
-#ifdef DOINIT
-EXT char *PL_sig_name[] = { SIG_NAME };
-EXT int PL_sig_num[] = { SIG_NUM };
-#else
-EXT char *PL_sig_name[];
-EXT int PL_sig_num[];
-#endif
-
-/* fast case folding tables */
-
-#ifdef DOINIT
-#ifdef EBCDIC
-EXT unsigned char PL_fold[] = { /* fast EBCDIC case folding table */
- 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, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 101, 102, 103,
- 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127,
- 128, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
- 'H', 'I', 138, 139, 140, 141, 142, 143,
- 144, 'J', 'K', 'L', 'M', 'N', 'O', 'P',
- 'Q', 'R', 154, 155, 156, 157, 158, 159,
- 160, 161, 'S', 'T', 'U', 'V', 'W', 'X',
- 'Y', 'Z', 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
- 'h', 'i', 202, 203, 204, 205, 206, 207,
- 208, 'j', 'k', 'l', 'm', 'n', 'o', 'p',
- 'q', 'r', 218, 219, 220, 221, 222, 223,
- 224, 225, 's', 't', 'u', 'v', 'w', 'x',
- 'y', 'z', 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247,
- 248, 249, 250, 251, 252, 253, 254, 255
-};
-#else /* ascii rather than ebcdic */
-EXTCONST unsigned char PL_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
-};
-#endif /* !EBCDIC */
-#else
-EXTCONST unsigned char PL_fold[];
-#endif
-
-#ifdef DOINIT
-EXT unsigned char PL_fold_locale[] = {
- 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
-};
-#else
-EXT unsigned char PL_fold_locale[];
-#endif
-
-#ifdef DOINIT
-#ifdef EBCDIC
-EXT unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */
- 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, 6, 8, 9, 10, 11, 12, 13,
- 14, 15, 24, 25, 26, 27, 28, 226,
- 29, 30, 31, 32, 33, 43, 44, 45,
- 46, 47, 48, 49, 50, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 94, 95, 234, 181, 233, 187, 190,
- 180, 96, 97, 98, 99, 100, 101, 102,
- 104, 112, 182, 174, 236, 232, 229, 103,
- 228, 226, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 235, 176, 230, 194, 162,
- 130, 131, 132, 133, 134, 135, 136, 137,
- 138, 139, 201, 205, 163, 217, 220, 224,
- 5, 248, 227, 244, 242, 255, 241, 231,
- 240, 253, 16, 197, 19, 20, 21, 187,
- 23, 169, 210, 245, 237, 249, 247, 239,
- 168, 252, 34, 196, 36, 37, 38, 39,
- 41, 42, 251, 254, 238, 223, 221, 213,
- 225, 177, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 74, 75,
- 205, 208, 186, 202, 200, 218, 198, 179,
- 178, 214, 88, 89, 90, 91, 92, 93,
- 217, 166, 170, 207, 199, 209, 206, 204,
- 160, 212, 105, 106, 108, 109, 110, 111,
- 203, 113, 216, 215, 192, 175, 193, 243,
- 172, 161, 123, 124, 125, 126, 127, 128,
- 222, 219, 211, 195, 188, 193, 185, 184,
- 191, 183, 141, 142, 143, 144, 145, 146
-};
-#else /* ascii rather than ebcdic */
-EXTCONST unsigned char PL_freq[] = { /* letter frequencies for mixed English/C */
- 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
-};
-#endif
-#else
-EXTCONST unsigned char PL_freq[];
-#endif
-
-#ifdef DEBUGGING
-#ifdef DOINIT
-EXTCONST char* PL_block_type[] = {
- "NULL",
- "SUB",
- "EVAL",
- "LOOP",
- "SUBST",
- "BLOCK",
-};
-#else
-EXTCONST char* PL_block_type[];
-#endif
-#endif
-
-END_EXTERN_C
-
-/*****************************************************************************/
-/* This lexer/parser stuff is currently global since yacc is hard to reenter */
-/*****************************************************************************/
-/* XXX This needs to be revisited, since BEGIN makes yacc re-enter... */
-
-#include "perly.h"
-
-#define LEX_NOTPARSING 11 /* borrowed from toke.c */
-
-typedef enum {
- XOPERATOR,
- XTERM,
- XREF,
- XSTATE,
- XBLOCK,
- XATTRBLOCK,
- XATTRTERM,
- XTERMBLOCK
-} expectation;
-
-enum { /* pass one of these to get_vtbl */
- want_vtbl_sv,
- want_vtbl_env,
- want_vtbl_envelem,
- want_vtbl_sig,
- want_vtbl_sigelem,
- want_vtbl_pack,
- want_vtbl_packelem,
- want_vtbl_dbline,
- want_vtbl_isa,
- want_vtbl_isaelem,
- want_vtbl_arylen,
- want_vtbl_glob,
- want_vtbl_mglob,
- want_vtbl_nkeys,
- want_vtbl_taint,
- want_vtbl_substr,
- want_vtbl_vec,
- want_vtbl_pos,
- want_vtbl_bm,
- want_vtbl_fm,
- want_vtbl_uvar,
- want_vtbl_defelem,
- want_vtbl_regexp,
- want_vtbl_collxfrm,
- want_vtbl_amagic,
- want_vtbl_amagicelem,
-#ifdef USE_THREADS
- want_vtbl_mutex,
-#endif
- want_vtbl_regdata,
- want_vtbl_regdatum,
- want_vtbl_backref
-};
-
- /* Note: the lowest 8 bits are reserved for
- stuffing into op->op_private */
-#define HINT_PRIVATE_MASK 0x000000ff
-#define HINT_INTEGER 0x00000001
-#define HINT_STRICT_REFS 0x00000002
-/* #define HINT_notused4 0x00000004 */
-#define HINT_BYTE 0x00000008
-/* #define HINT_notused10 0x00000010 */
- /* Note: 20,40,80 used for NATIVE_HINTS */
-
-#define HINT_BLOCK_SCOPE 0x00000100
-#define HINT_STRICT_SUBS 0x00000200
-#define HINT_STRICT_VARS 0x00000400
-#define HINT_LOCALE 0x00000800
-
-#define HINT_NEW_INTEGER 0x00001000
-#define HINT_NEW_FLOAT 0x00002000
-#define HINT_NEW_BINARY 0x00004000
-#define HINT_NEW_STRING 0x00008000
-#define HINT_NEW_RE 0x00010000
-#define HINT_LOCALIZE_HH 0x00020000 /* %^H needs to be copied */
-
-#define HINT_RE_TAINT 0x00100000
-#define HINT_RE_EVAL 0x00200000
-
-#define HINT_FILETEST_ACCESS 0x00400000
-#define HINT_UTF8 0x00800000
-
-/* Various states of an input record separator SV (rs, nrs) */
-#define RsSNARF(sv) (! SvOK(sv))
-#define RsSIMPLE(sv) (SvOK(sv) && (! SvPOK(sv) || SvCUR(sv)))
-#define RsPARA(sv) (SvPOK(sv) && ! SvCUR(sv))
-#define RsRECORD(sv) (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
-
-/* Enable variables which are pointers to functions */
-typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm);
-typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg,
- char* strend, char* strbeg, I32 minend,
- SV* screamer, void* data, U32 flags);
-typedef char* (CPERLscope(*re_intuit_start_t)) (pTHX_ regexp *prog, SV *sv,
- char *strpos, char *strend,
- U32 flags,
- struct re_scream_pos_data_s *d);
-typedef SV* (CPERLscope(*re_intuit_string_t)) (pTHX_ regexp *prog);
-typedef void (CPERLscope(*regfree_t)) (pTHX_ struct regexp* r);
-
-typedef void (*DESTRUCTORFUNC_NOCONTEXT_t) (void*);
-typedef void (*DESTRUCTORFUNC_t) (pTHXo_ void*);
-typedef void (*SVFUNC_t) (pTHXo_ SV*);
-typedef I32 (*SVCOMPARE_t) (pTHXo_ SV*, SV*);
-typedef void (*XSINIT_t) (pTHXo);
-typedef void (*ATEXIT_t) (pTHXo_ void*);
-typedef void (*XSUBADDR_t) (pTHXo_ CV *);
-
-/* Set up PERLVAR macros for populating structs */
-#define PERLVAR(var,type) type var;
-#define PERLVARA(var,n,type) type var[n];
-#define PERLVARI(var,type,init) type var;
-#define PERLVARIC(var,type,init) type var;
-
-/* Interpreter exitlist entry */
-typedef struct exitlistentry {
- void (*fn) (pTHXo_ void*);
- void *ptr;
-} PerlExitListEntry;
-
-#ifdef PERL_GLOBAL_STRUCT
-struct perl_vars {
-# include "perlvars.h"
-};
-
-# ifdef PERL_CORE
-EXT struct perl_vars PL_Vars;
-EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
-# else /* PERL_CORE */
-# if !defined(__GNUC__) || !defined(WIN32)
-EXT
-# endif /* WIN32 */
-struct perl_vars *PL_VarsPtr;
-# define PL_Vars (*((PL_VarsPtr) \
- ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
-# endif /* PERL_CORE */
-#endif /* PERL_GLOBAL_STRUCT */
-
-#if defined(MULTIPLICITY) || defined(PERL_OBJECT)
-/* If we have multiple interpreters define a struct
- holding variables which must be per-interpreter
- If we don't have threads anything that would have
- be per-thread is per-interpreter.
-*/
-
-struct interpreter {
-# ifndef USE_THREADS
-# include "thrdvar.h"
-# endif
-# include "intrpvar.h"
-/*
- * The following is a buffer where new variables must
- * be defined to maintain binary compatibility with PERL_OBJECT
- */
-PERLVARA(object_compatibility,30, char)
-};
-
-#else
-struct interpreter {
- char broiled;
-};
-#endif /* MULTIPLICITY || PERL_OBJECT */
-
-#ifdef USE_THREADS
-/* If we have threads define a struct with all the variables
- * that have to be per-thread
- */
-
-
-struct perl_thread {
-#include "thrdvar.h"
-};
-
-typedef struct perl_thread *Thread;
-
-#else
-typedef void *Thread;
-#endif
-
-/* Done with PERLVAR macros for now ... */
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-#include "thread.h"
-#include "pp.h"
-
-#ifndef PERL_CALLCONV
-# define PERL_CALLCONV
-#endif
-
-#ifndef NEXT30_NO_ATTRIBUTE
-# ifndef HASATTRIBUTE /* disable GNU-cc attribute checking? */
-# ifdef __attribute__ /* Avoid possible redefinition errors */
-# undef __attribute__
-# endif
-# define __attribute__(attr)
-# endif
-#endif
-
-#ifdef PERL_OBJECT
-# define PERL_DECL_PROT
-#endif
-
-#undef PERL_CKDEF
-#undef PERL_PPDEF
-#define PERL_CKDEF(s) OP *s (pTHX_ OP *o);
-#define PERL_PPDEF(s) OP *s (pTHX);
-
-#include "proto.h"
-
-#ifdef PERL_OBJECT
-# undef PERL_DECL_PROT
-#endif
-
-#ifndef PERL_OBJECT
-/* this has structure inits, so it cannot be included before here */
-# include "opcode.h"
-#endif
-
-/* The following must follow proto.h as #defines mess up syntax */
-
-#if !defined(PERL_FOR_X2P)
-# include "embedvar.h"
-#endif
-
-/* Now include all the 'global' variables
- * If we don't have threads or multiple interpreters
- * these include variables that would have been their struct-s
- */
-
-#define PERLVAR(var,type) EXT type PL_##var;
-#define PERLVARA(var,n,type) EXT type PL_##var[n];
-#define PERLVARI(var,type,init) EXT type PL_##var INIT(init);
-#define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init);
-
-#if !defined(MULTIPLICITY) && !defined(PERL_OBJECT)
-START_EXTERN_C
-# include "intrpvar.h"
-# ifndef USE_THREADS
-# include "thrdvar.h"
-# endif
-END_EXTERN_C
-#endif
-
-#ifdef PERL_OBJECT
-# include "embed.h"
-
-# ifdef DOINIT
-# include "INTERN.h"
-# else
-# include "EXTERN.h"
-# endif
-
-/* this has structure inits, so it cannot be included before here */
-# include "opcode.h"
-
-#else
-# if defined(WIN32)
-# include "embed.h"
-# endif
-#endif /* PERL_OBJECT */
-
-#ifndef PERL_GLOBAL_STRUCT
-START_EXTERN_C
-
-# include "perlvars.h"
-
-END_EXTERN_C
-#endif
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-START_EXTERN_C
-
-#ifdef DOINIT
-
-EXT MGVTBL PL_vtbl_sv = {MEMBER_TO_FPTR(Perl_magic_get),
- MEMBER_TO_FPTR(Perl_magic_set),
- MEMBER_TO_FPTR(Perl_magic_len),
- 0, 0};
-EXT MGVTBL PL_vtbl_env = {0, MEMBER_TO_FPTR(Perl_magic_set_all_env),
- 0, MEMBER_TO_FPTR(Perl_magic_clear_all_env),
- 0};
-EXT MGVTBL PL_vtbl_envelem = {0, MEMBER_TO_FPTR(Perl_magic_setenv),
- 0, MEMBER_TO_FPTR(Perl_magic_clearenv),
- 0};
-EXT MGVTBL PL_vtbl_sig = {0, 0, 0, 0, 0};
-EXT MGVTBL PL_vtbl_sigelem = {MEMBER_TO_FPTR(Perl_magic_getsig),
- MEMBER_TO_FPTR(Perl_magic_setsig),
- 0, MEMBER_TO_FPTR(Perl_magic_clearsig),
- 0};
-EXT MGVTBL PL_vtbl_pack = {0, 0, MEMBER_TO_FPTR(Perl_magic_sizepack), MEMBER_TO_FPTR(Perl_magic_wipepack),
- 0};
-EXT MGVTBL PL_vtbl_packelem = {MEMBER_TO_FPTR(Perl_magic_getpack),
- MEMBER_TO_FPTR(Perl_magic_setpack),
- 0, MEMBER_TO_FPTR(Perl_magic_clearpack),
- 0};
-EXT MGVTBL PL_vtbl_dbline = {0, MEMBER_TO_FPTR(Perl_magic_setdbline),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_isa = {0, MEMBER_TO_FPTR(Perl_magic_setisa),
- 0, MEMBER_TO_FPTR(Perl_magic_setisa),
- 0};
-EXT MGVTBL PL_vtbl_isaelem = {0, MEMBER_TO_FPTR(Perl_magic_setisa),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_arylen = {MEMBER_TO_FPTR(Perl_magic_getarylen),
- MEMBER_TO_FPTR(Perl_magic_setarylen),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_glob = {MEMBER_TO_FPTR(Perl_magic_getglob),
- MEMBER_TO_FPTR(Perl_magic_setglob),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_mglob = {0, MEMBER_TO_FPTR(Perl_magic_setmglob),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_nkeys = {MEMBER_TO_FPTR(Perl_magic_getnkeys),
- MEMBER_TO_FPTR(Perl_magic_setnkeys),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_taint = {MEMBER_TO_FPTR(Perl_magic_gettaint),MEMBER_TO_FPTR(Perl_magic_settaint),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_substr = {MEMBER_TO_FPTR(Perl_magic_getsubstr), MEMBER_TO_FPTR(Perl_magic_setsubstr),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_vec = {MEMBER_TO_FPTR(Perl_magic_getvec),
- MEMBER_TO_FPTR(Perl_magic_setvec),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_pos = {MEMBER_TO_FPTR(Perl_magic_getpos),
- MEMBER_TO_FPTR(Perl_magic_setpos),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_bm = {0, MEMBER_TO_FPTR(Perl_magic_setbm),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_fm = {0, MEMBER_TO_FPTR(Perl_magic_setfm),
- 0, 0, 0};
-EXT MGVTBL PL_vtbl_uvar = {MEMBER_TO_FPTR(Perl_magic_getuvar),
- MEMBER_TO_FPTR(Perl_magic_setuvar),
- 0, 0, 0};
-#ifdef USE_THREADS
-EXT MGVTBL PL_vtbl_mutex = {0, 0, 0, 0, MEMBER_TO_FPTR(Perl_magic_mutexfree)};
-#endif /* USE_THREADS */
-EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),MEMBER_TO_FPTR(Perl_magic_setdefelem),
- 0, 0, 0};
-
-EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)};
-EXT MGVTBL PL_vtbl_regdata = {0, 0, MEMBER_TO_FPTR(Perl_magic_regdata_cnt), 0, 0};
-EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get),
- MEMBER_TO_FPTR(Perl_magic_regdatum_set), 0, 0, 0};
-
-#ifdef USE_LOCALE_COLLATE
-EXT MGVTBL PL_vtbl_collxfrm = {0,
- MEMBER_TO_FPTR(Perl_magic_setcollxfrm),
- 0, 0, 0};
-#endif
-
-EXT MGVTBL PL_vtbl_amagic = {0, MEMBER_TO_FPTR(Perl_magic_setamagic),
- 0, 0, MEMBER_TO_FPTR(Perl_magic_setamagic)};
-EXT MGVTBL PL_vtbl_amagicelem = {0, MEMBER_TO_FPTR(Perl_magic_setamagic),
- 0, 0, MEMBER_TO_FPTR(Perl_magic_setamagic)};
-
-EXT MGVTBL PL_vtbl_backref = {0, 0,
- 0, 0, MEMBER_TO_FPTR(Perl_magic_killbackrefs)};
-
-#else /* !DOINIT */
-
-EXT MGVTBL PL_vtbl_sv;
-EXT MGVTBL PL_vtbl_env;
-EXT MGVTBL PL_vtbl_envelem;
-EXT MGVTBL PL_vtbl_sig;
-EXT MGVTBL PL_vtbl_sigelem;
-EXT MGVTBL PL_vtbl_pack;
-EXT MGVTBL PL_vtbl_packelem;
-EXT MGVTBL PL_vtbl_dbline;
-EXT MGVTBL PL_vtbl_isa;
-EXT MGVTBL PL_vtbl_isaelem;
-EXT MGVTBL PL_vtbl_arylen;
-EXT MGVTBL PL_vtbl_glob;
-EXT MGVTBL PL_vtbl_mglob;
-EXT MGVTBL PL_vtbl_nkeys;
-EXT MGVTBL PL_vtbl_taint;
-EXT MGVTBL PL_vtbl_substr;
-EXT MGVTBL PL_vtbl_vec;
-EXT MGVTBL PL_vtbl_pos;
-EXT MGVTBL PL_vtbl_bm;
-EXT MGVTBL PL_vtbl_fm;
-EXT MGVTBL PL_vtbl_uvar;
-
-#ifdef USE_THREADS
-EXT MGVTBL PL_vtbl_mutex;
-#endif /* USE_THREADS */
-
-EXT MGVTBL PL_vtbl_defelem;
-EXT MGVTBL PL_vtbl_regexp;
-EXT MGVTBL PL_vtbl_regdata;
-EXT MGVTBL PL_vtbl_regdatum;
-
-#ifdef USE_LOCALE_COLLATE
-EXT MGVTBL PL_vtbl_collxfrm;
-#endif
-
-EXT MGVTBL PL_vtbl_amagic;
-EXT MGVTBL PL_vtbl_amagicelem;
-
-EXT MGVTBL PL_vtbl_backref;
-
-#endif /* !DOINIT */
-
-enum {
- fallback_amg, abs_amg,
- bool__amg, nomethod_amg,
- string_amg, numer_amg,
- add_amg, add_ass_amg,
- subtr_amg, subtr_ass_amg,
- mult_amg, mult_ass_amg,
- div_amg, div_ass_amg,
- modulo_amg, modulo_ass_amg,
- pow_amg, pow_ass_amg,
- lshift_amg, lshift_ass_amg,
- rshift_amg, rshift_ass_amg,
- band_amg, band_ass_amg,
- bor_amg, bor_ass_amg,
- bxor_amg, bxor_ass_amg,
- lt_amg, le_amg,
- gt_amg, ge_amg,
- eq_amg, ne_amg,
- ncmp_amg, scmp_amg,
- slt_amg, sle_amg,
- sgt_amg, sge_amg,
- seq_amg, sne_amg,
- not_amg, compl_amg,
- inc_amg, dec_amg,
- atan2_amg, cos_amg,
- sin_amg, exp_amg,
- log_amg, sqrt_amg,
- repeat_amg, repeat_ass_amg,
- concat_amg, concat_ass_amg,
- copy_amg, neg_amg,
- to_sv_amg, to_av_amg,
- to_hv_amg, to_gv_amg,
- to_cv_amg, iter_amg,
- max_amg_code
- /* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */
-};
-
-#define NofAMmeth max_amg_code
-
-#ifdef DOINIT
-EXTCONST char * PL_AMG_names[NofAMmeth] = {
- "fallback", "abs", /* "fallback" should be the first. */
- "bool", "nomethod",
- "\"\"", "0+",
- "+", "+=",
- "-", "-=",
- "*", "*=",
- "/", "/=",
- "%", "%=",
- "**", "**=",
- "<<", "<<=",
- ">>", ">>=",
- "&", "&=",
- "|", "|=",
- "^", "^=",
- "<", "<=",
- ">", ">=",
- "==", "!=",
- "<=>", "cmp",
- "lt", "le",
- "gt", "ge",
- "eq", "ne",
- "!", "~",
- "++", "--",
- "atan2", "cos",
- "sin", "exp",
- "log", "sqrt",
- "x", "x=",
- ".", ".=",
- "=", "neg",
- "${}", "@{}",
- "%{}", "*{}",
- "&{}", "<>",
-};
-#else
-EXTCONST char * PL_AMG_names[NofAMmeth];
-#endif /* def INITAMAGIC */
-
-END_EXTERN_C
-
-struct am_table {
- long was_ok_sub;
- long was_ok_am;
- U32 flags;
- CV* table[NofAMmeth];
- long fallback;
-};
-struct am_table_short {
- long was_ok_sub;
- long was_ok_am;
- U32 flags;
-};
-typedef struct am_table AMT;
-typedef struct am_table_short AMTS;
-
-#define AMGfallNEVER 1
-#define AMGfallNO 2
-#define AMGfallYES 3
-
-#define AMTf_AMAGIC 1
-#define AMT_AMAGIC(amt) ((amt)->flags & AMTf_AMAGIC)
-#define AMT_AMAGIC_on(amt) ((amt)->flags |= AMTf_AMAGIC)
-#define AMT_AMAGIC_off(amt) ((amt)->flags &= ~AMTf_AMAGIC)
-
-
-/*
- * some compilers like to redefine cos et alia as faster
- * (and less accurate?) versions called F_cos et cetera (Quidquid
- * latine dictum sit, altum viditur.) This trick collides with
- * the Perl overloading (amg). The following #defines fool both.
- */
-
-#ifdef _FASTMATH
-# ifdef atan2
-# define F_atan2_amg atan2_amg
-# endif
-# ifdef cos
-# define F_cos_amg cos_amg
-# endif
-# ifdef exp
-# define F_exp_amg exp_amg
-# endif
-# ifdef log
-# define F_log_amg log_amg
-# endif
-# ifdef pow
-# define F_pow_amg pow_amg
-# endif
-# ifdef sin
-# define F_sin_amg sin_amg
-# endif
-# ifdef sqrt
-# define F_sqrt_amg sqrt_amg
-# endif
-#endif /* _FASTMATH */
-
-#define PERLDB_ALL (PERLDBf_SUB | PERLDBf_LINE | \
- PERLDBf_NOOPT | PERLDBf_INTER | \
- PERLDBf_SUBLINE| PERLDBf_SINGLE| \
- PERLDBf_NAMEEVAL| PERLDBf_NAMEANON)
- /* No _NONAME, _GOTO */
-#define PERLDBf_SUB 0x01 /* Debug sub enter/exit */
-#define PERLDBf_LINE 0x02 /* Keep line # */
-#define PERLDBf_NOOPT 0x04 /* Switch off optimizations */
-#define PERLDBf_INTER 0x08 /* Preserve more data for
- later inspections */
-#define PERLDBf_SUBLINE 0x10 /* Keep subr source lines */
-#define PERLDBf_SINGLE 0x20 /* Start with single-step on */
-#define PERLDBf_NONAME 0x40 /* For _SUB: no name of the subr */
-#define PERLDBf_GOTO 0x80 /* Report goto: call DB::goto */
-#define PERLDBf_NAMEEVAL 0x100 /* Informative names for evals */
-#define PERLDBf_NAMEANON 0x200 /* Informative names for anon subs */
-
-#define PERLDB_SUB (PL_perldb && (PL_perldb & PERLDBf_SUB))
-#define PERLDB_LINE (PL_perldb && (PL_perldb & PERLDBf_LINE))
-#define PERLDB_NOOPT (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
-#define PERLDB_INTER (PL_perldb && (PL_perldb & PERLDBf_INTER))
-#define PERLDB_SUBLINE (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
-#define PERLDB_SINGLE (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
-#define PERLDB_SUB_NN (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
-#define PERLDB_GOTO (PL_perldb && (PL_perldb & PERLDBf_GOTO))
-#define PERLDB_NAMEEVAL (PL_perldb && (PL_perldb & PERLDBf_NAMEEVAL))
-#define PERLDB_NAMEANON (PL_perldb && (PL_perldb & PERLDBf_NAMEANON))
-
-
-#ifdef USE_LOCALE_NUMERIC
-
-#define SET_NUMERIC_STANDARD() \
- set_numeric_standard();
-
-#define SET_NUMERIC_LOCAL() \
- set_numeric_local();
-
-#define IS_NUMERIC_RADIX(s) \
- ((PL_hints & HINT_LOCALE) && \
- PL_numeric_radix_sv && memEQ(s, SvPVX(PL_numeric_radix_sv), SvCUR(PL_numeric_radix_sv)))
-
-#define STORE_NUMERIC_LOCAL_SET_STANDARD() \
- bool was_local = (PL_hints & HINT_LOCALE) && PL_numeric_local; \
- if (was_local) SET_NUMERIC_STANDARD();
-
-#define STORE_NUMERIC_STANDARD_SET_LOCAL() \
- bool was_standard = (PL_hints & HINT_LOCALE) && PL_numeric_standard; \
- if (was_standard) SET_NUMERIC_LOCAL();
-
-#define RESTORE_NUMERIC_LOCAL() \
- if (was_local) SET_NUMERIC_LOCAL();
-
-#define RESTORE_NUMERIC_STANDARD() \
- if (was_standard) SET_NUMERIC_STANDARD();
-
-#define Atof my_atof
-
-#else /* !USE_LOCALE_NUMERIC */
-
-#define SET_NUMERIC_STANDARD() /**/
-#define SET_NUMERIC_LOCAL() /**/
-#define IS_NUMERIC_RADIX(c) (0)
-#define STORE_NUMERIC_LOCAL_SET_STANDARD() /**/
-#define STORE_NUMERIC_STANDARD_SET_LOCAL() /**/
-#define RESTORE_NUMERIC_LOCAL() /**/
-#define RESTORE_NUMERIC_STANDARD() /**/
-#define Atof Perl_atof
-
-#endif /* !USE_LOCALE_NUMERIC */
-
-#if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
-# ifdef __hpux
-# define strtoll __strtoll /* secret handshake */
-# endif
-# if !defined(Strtol) && defined(HAS_STRTOLL)
-# define Strtol strtoll
-# endif
-/* is there atoq() anywhere? */
-#endif
-#if !defined(Strtol) && defined(HAS_STRTOL)
-# define Strtol strtol
-#endif
-#ifndef Atol
-/* It would be more fashionable to use Strtol() to define atol()
- * (as is done for Atoul(), see below) but for backward compatibility
- * we just assume atol(). */
-# if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG && defined(HAS_ATOLL)
-# define Atol atoll
-# else
-# define Atol atol
-# endif
-#endif
-
-#if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && QUADKIND == QUAD_IS_LONG_LONG
-# ifdef __hpux
-# define strtoull __strtoull /* secret handshake */
-# endif
-# if !defined(Strtoul) && defined(HAS_STRTOULL)
-# define Strtoul strtoull
-# endif
-# if !defined(Strtoul) && defined(HAS_STRTOUQ)
-# define Strtoul strtouq
-# endif
-/* is there atouq() anywhere? */
-#endif
-#if !defined(Strtoul) && defined(HAS_STRTOUL)
-# define Strtoul strtoul
-#endif
-#ifndef Atoul
-# define Atoul(s) Strtoul(s, (char **)NULL, 10)
-#endif
-
-#if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE)
-/*
- * Now we have __attribute__ out of the way
- * Remap printf
- */
-#undef printf
-#define printf PerlIO_stdoutf
-#endif
-
-/* if these never got defined, they need defaults */
-#ifndef PERL_SET_CONTEXT
-# define PERL_SET_CONTEXT(i) PERL_SET_INTERP(i)
-#endif
-
-#ifndef PERL_GET_CONTEXT
-# define PERL_GET_CONTEXT PERL_GET_INTERP
-#endif
-
-#ifndef PERL_GET_THX
-# define PERL_GET_THX ((void*)NULL)
-#endif
-
-#ifndef PERL_SET_THX
-# define PERL_SET_THX(t) NOOP
-#endif
-
-#ifndef PERL_SCRIPT_MODE
-#define PERL_SCRIPT_MODE "r"
-#endif
-
-/*
- * Some operating systems are stingy with stack allocation,
- * so perl may have to guard against stack overflow.
- */
-#ifndef PERL_STACK_OVERFLOW_CHECK
-#define PERL_STACK_OVERFLOW_CHECK() NOOP
-#endif
-
-/*
- * Some nonpreemptive operating systems find it convenient to
- * check for asynchronous conditions after each op execution.
- * Keep this check simple, or it may slow down execution
- * massively.
- */
-#ifndef PERL_ASYNC_CHECK
-#define PERL_ASYNC_CHECK() NOOP
-#endif
-
-/*
- * On some operating systems, a memory allocation may succeed,
- * but put the process too close to the system's comfort limit.
- * In this case, PERL_ALLOC_CHECK frees the pointer and sets
- * it to NULL.
- */
-#ifndef PERL_ALLOC_CHECK
-#define PERL_ALLOC_CHECK(p) NOOP
-#endif
-
-/*
- * nice_chunk and nice_chunk size need to be set
- * and queried under the protection of sv_mutex
- */
-#define offer_nice_chunk(chunk, chunk_size) do { \
- LOCK_SV_MUTEX; \
- if (!PL_nice_chunk) { \
- PL_nice_chunk = (char*)(chunk); \
- PL_nice_chunk_size = (chunk_size); \
- } \
- else { \
- Safefree(chunk); \
- } \
- UNLOCK_SV_MUTEX; \
- } while (0)
-
-#ifdef HAS_SEM
-# include <sys/ipc.h>
-# include <sys/sem.h>
-# ifndef HAS_UNION_SEMUN /* Provide the union semun. */
- union semun {
- int val;
- struct semid_ds *buf;
- unsigned short *array;
- };
-# endif
-# ifdef USE_SEMCTL_SEMUN
-# ifdef IRIX32_SEMUN_BROKEN_BY_GCC
- union gccbug_semun {
- int val;
- struct semid_ds *buf;
- unsigned short *array;
- char __dummy[5];
- };
-# define semun gccbug_semun
-# endif
-# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun)
-# else
-# ifdef USE_SEMCTL_SEMID_DS
-# ifdef EXTRA_F_IN_SEMUN_BUF
-# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buff)
-# else
-# define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun.buf)
-# endif
-# endif
-# endif
-#endif
-
-#ifdef I_FCNTL
-# include <fcntl.h>
-#endif
-
-#ifdef I_SYS_FILE
-# include <sys/file.h>
-#endif
-
-#ifndef O_RDONLY
-/* Assume UNIX defaults */
-# define O_RDONLY 0000
-# define O_WRONLY 0001
-# define O_RDWR 0002
-# define O_CREAT 0100
-#endif
-
-#ifndef O_BINARY
-# define O_BINARY 0
-#endif
-
-#ifndef O_TEXT
-# define O_TEXT 0
-#endif
-
-#ifdef IAMSUID
-
-#ifdef I_SYS_STATVFS
-# include <sys/statvfs.h> /* for f?statvfs() */
-#endif
-#ifdef I_SYS_MOUNT
-# include <sys/mount.h> /* for *BSD f?statfs() */
-#endif
-#ifdef I_MNTENT
-# include <mntent.h> /* for getmntent() */
-#endif
-#ifdef I_SYS_STATFS
-# include <sys/statfs.h> /* for some statfs() */
-#endif
-#ifdef I_SYS_VFS
-# ifdef __sgi
-# define sv IRIX_sv /* kludge: IRIX has an sv of its own */
-# endif
-# include <sys/vfs.h> /* for some statfs() */
-# ifdef __sgi
-# undef IRIX_sv
-# endif
-#endif
-#ifdef I_USTAT
-# include <ustat.h> /* for ustat() */
-#endif
-
-#if !defined(PERL_MOUNT_NOSUID) && defined(MOUNT_NOSUID)
-# define PERL_MOUNT_NOSUID MOUNT_NOSUID
-#endif
-#if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID)
-# define PERL_MOUNT_NOSUID MNT_NOSUID
-#endif
-#if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID)
-# define PERL_MOUNT_NOSUID MS_NOSUID
-#endif
-#if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID)
-# define PERL_MOUNT_NOSUID M_NOSUID
-#endif
-
-#endif /* IAMSUID */
-
-#ifdef I_LIBUTIL
-# include <libutil.h> /* setproctitle() in some FreeBSDs */
-#endif
-
-#ifndef EXEC_ARGV_CAST
-#define EXEC_ARGV_CAST(x) x
-#endif
-
-/* and finally... */
-#define PERL_PATCHLEVEL_H_IMPLICIT
-#include "patchlevel.h"
-#undef PERL_PATCHLEVEL_H_IMPLICIT
-
-/* Mention
-
- NV_PRESERVES_UV
-
- HAS_ICONV
- I_ICONV
-
- HAS_MKSTEMP
- HAS_MKSTEMPS
- HAS_MKDTEMP
-
- HAS_GETCWD
-
- HAS_MMAP
- HAS_MPROTECT
- HAS_MSYNC
- HAS_MADVISE
- HAS_MUNMAP
- I_SYSMMAN
- Mmap_t
-
- NVef
- NVff
- NVgf
-
- so that Configure picks them up. */
-
-#endif /* Include guard */
diff --git a/contrib/perl5/perlapi.c b/contrib/perl5/perlapi.c
deleted file mode 100644
index 5fc0c4d..0000000
--- a/contrib/perl5/perlapi.c
+++ /dev/null
@@ -1,4169 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "perlapi.h"
-
-#if defined(PERL_OBJECT) || defined (MULTIPLICITY)
-
-/* accessor functions for Perl variables (provides binary compatibility) */
-START_EXTERN_C
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-#if defined(PERL_OBJECT)
-#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \
- { return &(aTHXo->interp.v); }
-#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \
- { return &(aTHXo->interp.v); }
-#else /* MULTIPLICITY */
-#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHX) \
- { return &(aTHX->v); }
-#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHX) \
- { return &(aTHX->v); }
-#endif
-
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v, const t)
-
-#include "thrdvar.h"
-#include "intrpvar.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#define PERLVAR(v,t) t* Perl_##v##_ptr(pTHXo) \
- { return &(PL_##v); }
-#define PERLVARA(v,n,t) PL_##v##_t* Perl_##v##_ptr(pTHXo) \
- { return &(PL_##v); }
-#undef PERLVARIC
-#define PERLVARIC(v,t,i) const t* Perl_##v##_ptr(pTHXo) \
- { return (const t *)&(PL_##v); }
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-#if defined(PERL_OBJECT)
-
-/* C-API layer for PERL_OBJECT */
-
-#if defined(PERL_IMPLICIT_SYS)
-#endif
-#if defined(USE_ITHREADS)
-# if defined(PERL_IMPLICIT_SYS)
-# endif
-#endif
-#if defined(MYMALLOC)
-#endif
-#if defined(PERL_OBJECT)
-#ifndef __BORLANDC__
-#endif
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-
-#undef Perl_amagic_call
-SV*
-Perl_amagic_call(pTHXo_ SV* left, SV* right, int method, int dir)
-{
- return ((CPerlObj*)pPerl)->Perl_amagic_call(left, right, method, dir);
-}
-
-#undef Perl_Gv_AMupdate
-bool
-Perl_Gv_AMupdate(pTHXo_ HV* stash)
-{
- return ((CPerlObj*)pPerl)->Perl_Gv_AMupdate(stash);
-}
-
-#undef Perl_apply_attrs_string
-void
-Perl_apply_attrs_string(pTHXo_ char *stashpv, CV *cv, char *attrstr, STRLEN len)
-{
- ((CPerlObj*)pPerl)->Perl_apply_attrs_string(stashpv, cv, attrstr, len);
-}
-
-#undef Perl_avhv_delete_ent
-SV*
-Perl_avhv_delete_ent(pTHXo_ AV *ar, SV* keysv, I32 flags, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_avhv_delete_ent(ar, keysv, flags, hash);
-}
-
-#undef Perl_avhv_exists_ent
-bool
-Perl_avhv_exists_ent(pTHXo_ AV *ar, SV* keysv, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_avhv_exists_ent(ar, keysv, hash);
-}
-
-#undef Perl_avhv_fetch_ent
-SV**
-Perl_avhv_fetch_ent(pTHXo_ AV *ar, SV* keysv, I32 lval, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_avhv_fetch_ent(ar, keysv, lval, hash);
-}
-
-#undef Perl_avhv_store_ent
-SV**
-Perl_avhv_store_ent(pTHXo_ AV *ar, SV* keysv, SV* val, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_avhv_store_ent(ar, keysv, val, hash);
-}
-
-#undef Perl_avhv_iternext
-HE*
-Perl_avhv_iternext(pTHXo_ AV *ar)
-{
- return ((CPerlObj*)pPerl)->Perl_avhv_iternext(ar);
-}
-
-#undef Perl_avhv_iterval
-SV*
-Perl_avhv_iterval(pTHXo_ AV *ar, HE* entry)
-{
- return ((CPerlObj*)pPerl)->Perl_avhv_iterval(ar, entry);
-}
-
-#undef Perl_avhv_keys
-HV*
-Perl_avhv_keys(pTHXo_ AV *ar)
-{
- return ((CPerlObj*)pPerl)->Perl_avhv_keys(ar);
-}
-
-#undef Perl_av_clear
-void
-Perl_av_clear(pTHXo_ AV* ar)
-{
- ((CPerlObj*)pPerl)->Perl_av_clear(ar);
-}
-
-#undef Perl_av_delete
-SV*
-Perl_av_delete(pTHXo_ AV* ar, I32 key, I32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_av_delete(ar, key, flags);
-}
-
-#undef Perl_av_exists
-bool
-Perl_av_exists(pTHXo_ AV* ar, I32 key)
-{
- return ((CPerlObj*)pPerl)->Perl_av_exists(ar, key);
-}
-
-#undef Perl_av_extend
-void
-Perl_av_extend(pTHXo_ AV* ar, I32 key)
-{
- ((CPerlObj*)pPerl)->Perl_av_extend(ar, key);
-}
-
-#undef Perl_av_fetch
-SV**
-Perl_av_fetch(pTHXo_ AV* ar, I32 key, I32 lval)
-{
- return ((CPerlObj*)pPerl)->Perl_av_fetch(ar, key, lval);
-}
-
-#undef Perl_av_fill
-void
-Perl_av_fill(pTHXo_ AV* ar, I32 fill)
-{
- ((CPerlObj*)pPerl)->Perl_av_fill(ar, fill);
-}
-
-#undef Perl_av_len
-I32
-Perl_av_len(pTHXo_ AV* ar)
-{
- return ((CPerlObj*)pPerl)->Perl_av_len(ar);
-}
-
-#undef Perl_av_make
-AV*
-Perl_av_make(pTHXo_ I32 size, SV** svp)
-{
- return ((CPerlObj*)pPerl)->Perl_av_make(size, svp);
-}
-
-#undef Perl_av_pop
-SV*
-Perl_av_pop(pTHXo_ AV* ar)
-{
- return ((CPerlObj*)pPerl)->Perl_av_pop(ar);
-}
-
-#undef Perl_av_push
-void
-Perl_av_push(pTHXo_ AV* ar, SV* val)
-{
- ((CPerlObj*)pPerl)->Perl_av_push(ar, val);
-}
-
-#undef Perl_av_reify
-void
-Perl_av_reify(pTHXo_ AV* ar)
-{
- ((CPerlObj*)pPerl)->Perl_av_reify(ar);
-}
-
-#undef Perl_av_shift
-SV*
-Perl_av_shift(pTHXo_ AV* ar)
-{
- return ((CPerlObj*)pPerl)->Perl_av_shift(ar);
-}
-
-#undef Perl_av_store
-SV**
-Perl_av_store(pTHXo_ AV* ar, I32 key, SV* val)
-{
- return ((CPerlObj*)pPerl)->Perl_av_store(ar, key, val);
-}
-
-#undef Perl_av_undef
-void
-Perl_av_undef(pTHXo_ AV* ar)
-{
- ((CPerlObj*)pPerl)->Perl_av_undef(ar);
-}
-
-#undef Perl_av_unshift
-void
-Perl_av_unshift(pTHXo_ AV* ar, I32 num)
-{
- ((CPerlObj*)pPerl)->Perl_av_unshift(ar, num);
-}
-
-#undef Perl_block_gimme
-I32
-Perl_block_gimme(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_block_gimme();
-}
-
-#undef Perl_call_list
-void
-Perl_call_list(pTHXo_ I32 oldscope, AV* av_list)
-{
- ((CPerlObj*)pPerl)->Perl_call_list(oldscope, av_list);
-}
-
-#undef Perl_cast_ulong
-U32
-Perl_cast_ulong(pTHXo_ NV f)
-{
- return ((CPerlObj*)pPerl)->Perl_cast_ulong(f);
-}
-
-#undef Perl_cast_i32
-I32
-Perl_cast_i32(pTHXo_ NV f)
-{
- return ((CPerlObj*)pPerl)->Perl_cast_i32(f);
-}
-
-#undef Perl_cast_iv
-IV
-Perl_cast_iv(pTHXo_ NV f)
-{
- return ((CPerlObj*)pPerl)->Perl_cast_iv(f);
-}
-
-#undef Perl_cast_uv
-UV
-Perl_cast_uv(pTHXo_ NV f)
-{
- return ((CPerlObj*)pPerl)->Perl_cast_uv(f);
-}
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-
-#undef Perl_my_chsize
-I32
-Perl_my_chsize(pTHXo_ int fd, Off_t length)
-{
- return ((CPerlObj*)pPerl)->Perl_my_chsize(fd, length);
-}
-#endif
-#if defined(USE_THREADS)
-
-#undef Perl_condpair_magic
-MAGIC*
-Perl_condpair_magic(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_condpair_magic(sv);
-}
-#endif
-
-#undef Perl_croak
-void
-Perl_croak(pTHXo_ const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_vcroak(pat, &args);
- va_end(args);
-}
-
-#undef Perl_vcroak
-void
-Perl_vcroak(pTHXo_ const char* pat, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_vcroak(pat, args);
-}
-#if defined(PERL_IMPLICIT_CONTEXT)
-
-#undef Perl_croak_nocontext
-void
-Perl_croak_nocontext(const char* pat, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_vcroak(pat, &args);
- va_end(args);
-}
-
-#undef Perl_die_nocontext
-OP*
-Perl_die_nocontext(const char* pat, ...)
-{
- dTHXo;
- OP* retval;
- va_list args;
- va_start(args, pat);
- retval = ((CPerlObj*)pPerl)->Perl_vdie(pat, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_deb_nocontext
-void
-Perl_deb_nocontext(const char* pat, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_vdeb(pat, &args);
- va_end(args);
-}
-
-#undef Perl_form_nocontext
-char*
-Perl_form_nocontext(const char* pat, ...)
-{
- dTHXo;
- char* retval;
- va_list args;
- va_start(args, pat);
- retval = ((CPerlObj*)pPerl)->Perl_vform(pat, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_load_module_nocontext
-void
-Perl_load_module_nocontext(U32 flags, SV* name, SV* ver, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, ver);
- ((CPerlObj*)pPerl)->Perl_vload_module(flags, name, ver, &args);
- va_end(args);
-}
-
-#undef Perl_mess_nocontext
-SV*
-Perl_mess_nocontext(const char* pat, ...)
-{
- dTHXo;
- SV* retval;
- va_list args;
- va_start(args, pat);
- retval = ((CPerlObj*)pPerl)->Perl_vmess(pat, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_warn_nocontext
-void
-Perl_warn_nocontext(const char* pat, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_vwarn(pat, &args);
- va_end(args);
-}
-
-#undef Perl_warner_nocontext
-void
-Perl_warner_nocontext(U32 err, const char* pat, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_vwarner(err, pat, &args);
- va_end(args);
-}
-
-#undef Perl_newSVpvf_nocontext
-SV*
-Perl_newSVpvf_nocontext(const char* pat, ...)
-{
- dTHXo;
- SV* retval;
- va_list args;
- va_start(args, pat);
- retval = ((CPerlObj*)pPerl)->Perl_vnewSVpvf(pat, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_sv_catpvf_nocontext
-void
-Perl_sv_catpvf_nocontext(SV* sv, const char* pat, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_sv_vcatpvf(sv, pat, &args);
- va_end(args);
-}
-
-#undef Perl_sv_setpvf_nocontext
-void
-Perl_sv_setpvf_nocontext(SV* sv, const char* pat, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_sv_vsetpvf(sv, pat, &args);
- va_end(args);
-}
-
-#undef Perl_sv_catpvf_mg_nocontext
-void
-Perl_sv_catpvf_mg_nocontext(SV* sv, const char* pat, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_sv_vcatpvf_mg(sv, pat, &args);
- va_end(args);
-}
-
-#undef Perl_sv_setpvf_mg_nocontext
-void
-Perl_sv_setpvf_mg_nocontext(SV* sv, const char* pat, ...)
-{
- dTHXo;
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_sv_vsetpvf_mg(sv, pat, &args);
- va_end(args);
-}
-
-#undef Perl_fprintf_nocontext
-
-#undef Perl_printf_nocontext
-#endif
-
-#undef Perl_cv_const_sv
-SV*
-Perl_cv_const_sv(pTHXo_ CV* cv)
-{
- return ((CPerlObj*)pPerl)->Perl_cv_const_sv(cv);
-}
-
-#undef Perl_cv_undef
-void
-Perl_cv_undef(pTHXo_ CV* cv)
-{
- ((CPerlObj*)pPerl)->Perl_cv_undef(cv);
-}
-
-#undef Perl_cx_dump
-void
-Perl_cx_dump(pTHXo_ PERL_CONTEXT* cs)
-{
- ((CPerlObj*)pPerl)->Perl_cx_dump(cs);
-}
-
-#undef Perl_filter_add
-SV*
-Perl_filter_add(pTHXo_ filter_t funcp, SV* datasv)
-{
- return ((CPerlObj*)pPerl)->Perl_filter_add(funcp, datasv);
-}
-
-#undef Perl_filter_del
-void
-Perl_filter_del(pTHXo_ filter_t funcp)
-{
- ((CPerlObj*)pPerl)->Perl_filter_del(funcp);
-}
-
-#undef Perl_filter_read
-I32
-Perl_filter_read(pTHXo_ int idx, SV* buffer, int maxlen)
-{
- return ((CPerlObj*)pPerl)->Perl_filter_read(idx, buffer, maxlen);
-}
-
-#undef Perl_get_op_descs
-char**
-Perl_get_op_descs(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_get_op_descs();
-}
-
-#undef Perl_get_op_names
-char**
-Perl_get_op_names(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_get_op_names();
-}
-
-#undef Perl_get_ppaddr
-PPADDR_t*
-Perl_get_ppaddr(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_get_ppaddr();
-}
-
-#undef Perl_deb
-void
-Perl_deb(pTHXo_ const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_vdeb(pat, &args);
- va_end(args);
-}
-
-#undef Perl_vdeb
-void
-Perl_vdeb(pTHXo_ const char* pat, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_vdeb(pat, args);
-}
-
-#undef Perl_debprofdump
-void
-Perl_debprofdump(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_debprofdump();
-}
-
-#undef Perl_debop
-I32
-Perl_debop(pTHXo_ OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_debop(o);
-}
-
-#undef Perl_debstack
-I32
-Perl_debstack(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_debstack();
-}
-
-#undef Perl_debstackptrs
-I32
-Perl_debstackptrs(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_debstackptrs();
-}
-
-#undef Perl_delimcpy
-char*
-Perl_delimcpy(pTHXo_ char* to, char* toend, char* from, char* fromend, int delim, I32* retlen)
-{
- return ((CPerlObj*)pPerl)->Perl_delimcpy(to, toend, from, fromend, delim, retlen);
-}
-
-#undef Perl_die
-OP*
-Perl_die(pTHXo_ const char* pat, ...)
-{
- OP* retval;
- va_list args;
- va_start(args, pat);
- retval = ((CPerlObj*)pPerl)->Perl_vdie(pat, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_dounwind
-void
-Perl_dounwind(pTHXo_ I32 cxix)
-{
- ((CPerlObj*)pPerl)->Perl_dounwind(cxix);
-}
-
-#undef Perl_do_binmode
-int
-Perl_do_binmode(pTHXo_ PerlIO *fp, int iotype, int mode)
-{
- return ((CPerlObj*)pPerl)->Perl_do_binmode(fp, iotype, mode);
-}
-
-#undef Perl_do_close
-bool
-Perl_do_close(pTHXo_ GV* gv, bool not_implicit)
-{
- return ((CPerlObj*)pPerl)->Perl_do_close(gv, not_implicit);
-}
-#if !defined(WIN32)
-#endif
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-#endif
-
-#undef Perl_do_join
-void
-Perl_do_join(pTHXo_ SV* sv, SV* del, SV** mark, SV** sp)
-{
- ((CPerlObj*)pPerl)->Perl_do_join(sv, del, mark, sp);
-}
-
-#undef Perl_do_open
-bool
-Perl_do_open(pTHXo_ GV* gv, char* name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO* supplied_fp)
-{
- return ((CPerlObj*)pPerl)->Perl_do_open(gv, name, len, as_raw, rawmode, rawperm, supplied_fp);
-}
-
-#undef Perl_do_open9
-bool
-Perl_do_open9(pTHXo_ GV *gv, char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num)
-{
- return ((CPerlObj*)pPerl)->Perl_do_open9(gv, name, len, as_raw, rawmode, rawperm, supplied_fp, svs, num);
-}
-
-#undef Perl_dowantarray
-I32
-Perl_dowantarray(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_dowantarray();
-}
-
-#undef Perl_dump_all
-void
-Perl_dump_all(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_dump_all();
-}
-
-#undef Perl_dump_eval
-void
-Perl_dump_eval(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_dump_eval();
-}
-#if defined(DUMP_FDS)
-
-#undef Perl_dump_fds
-void
-Perl_dump_fds(pTHXo_ char* s)
-{
- ((CPerlObj*)pPerl)->Perl_dump_fds(s);
-}
-#endif
-
-#undef Perl_dump_form
-void
-Perl_dump_form(pTHXo_ GV* gv)
-{
- ((CPerlObj*)pPerl)->Perl_dump_form(gv);
-}
-
-#undef Perl_gv_dump
-void
-Perl_gv_dump(pTHXo_ GV* gv)
-{
- ((CPerlObj*)pPerl)->Perl_gv_dump(gv);
-}
-
-#undef Perl_op_dump
-void
-Perl_op_dump(pTHXo_ OP* arg)
-{
- ((CPerlObj*)pPerl)->Perl_op_dump(arg);
-}
-
-#undef Perl_pmop_dump
-void
-Perl_pmop_dump(pTHXo_ PMOP* pm)
-{
- ((CPerlObj*)pPerl)->Perl_pmop_dump(pm);
-}
-
-#undef Perl_dump_packsubs
-void
-Perl_dump_packsubs(pTHXo_ HV* stash)
-{
- ((CPerlObj*)pPerl)->Perl_dump_packsubs(stash);
-}
-
-#undef Perl_dump_sub
-void
-Perl_dump_sub(pTHXo_ GV* gv)
-{
- ((CPerlObj*)pPerl)->Perl_dump_sub(gv);
-}
-
-#undef Perl_fbm_compile
-void
-Perl_fbm_compile(pTHXo_ SV* sv, U32 flags)
-{
- ((CPerlObj*)pPerl)->Perl_fbm_compile(sv, flags);
-}
-
-#undef Perl_fbm_instr
-char*
-Perl_fbm_instr(pTHXo_ unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_fbm_instr(big, bigend, littlesv, flags);
-}
-#if defined(USE_THREADS)
-#endif
-
-#undef Perl_form
-char*
-Perl_form(pTHXo_ const char* pat, ...)
-{
- char* retval;
- va_list args;
- va_start(args, pat);
- retval = ((CPerlObj*)pPerl)->Perl_vform(pat, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_vform
-char*
-Perl_vform(pTHXo_ const char* pat, va_list* args)
-{
- return ((CPerlObj*)pPerl)->Perl_vform(pat, args);
-}
-
-#undef Perl_free_tmps
-void
-Perl_free_tmps(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_free_tmps();
-}
-#if !defined(HAS_GETENV_LEN)
-#endif
-
-#undef Perl_gp_free
-void
-Perl_gp_free(pTHXo_ GV* gv)
-{
- ((CPerlObj*)pPerl)->Perl_gp_free(gv);
-}
-
-#undef Perl_gp_ref
-GP*
-Perl_gp_ref(pTHXo_ GP* gp)
-{
- return ((CPerlObj*)pPerl)->Perl_gp_ref(gp);
-}
-
-#undef Perl_gv_AVadd
-GV*
-Perl_gv_AVadd(pTHXo_ GV* gv)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_AVadd(gv);
-}
-
-#undef Perl_gv_HVadd
-GV*
-Perl_gv_HVadd(pTHXo_ GV* gv)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_HVadd(gv);
-}
-
-#undef Perl_gv_IOadd
-GV*
-Perl_gv_IOadd(pTHXo_ GV* gv)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_IOadd(gv);
-}
-
-#undef Perl_gv_autoload4
-GV*
-Perl_gv_autoload4(pTHXo_ HV* stash, const char* name, STRLEN len, I32 method)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_autoload4(stash, name, len, method);
-}
-
-#undef Perl_gv_check
-void
-Perl_gv_check(pTHXo_ HV* stash)
-{
- ((CPerlObj*)pPerl)->Perl_gv_check(stash);
-}
-
-#undef Perl_gv_efullname
-void
-Perl_gv_efullname(pTHXo_ SV* sv, GV* gv)
-{
- ((CPerlObj*)pPerl)->Perl_gv_efullname(sv, gv);
-}
-
-#undef Perl_gv_efullname3
-void
-Perl_gv_efullname3(pTHXo_ SV* sv, GV* gv, const char* prefix)
-{
- ((CPerlObj*)pPerl)->Perl_gv_efullname3(sv, gv, prefix);
-}
-
-#undef Perl_gv_efullname4
-void
-Perl_gv_efullname4(pTHXo_ SV* sv, GV* gv, const char* prefix, bool keepmain)
-{
- ((CPerlObj*)pPerl)->Perl_gv_efullname4(sv, gv, prefix, keepmain);
-}
-
-#undef Perl_gv_fetchfile
-GV*
-Perl_gv_fetchfile(pTHXo_ const char* name)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_fetchfile(name);
-}
-
-#undef Perl_gv_fetchmeth
-GV*
-Perl_gv_fetchmeth(pTHXo_ HV* stash, const char* name, STRLEN len, I32 level)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_fetchmeth(stash, name, len, level);
-}
-
-#undef Perl_gv_fetchmethod
-GV*
-Perl_gv_fetchmethod(pTHXo_ HV* stash, const char* name)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_fetchmethod(stash, name);
-}
-
-#undef Perl_gv_fetchmethod_autoload
-GV*
-Perl_gv_fetchmethod_autoload(pTHXo_ HV* stash, const char* name, I32 autoload)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_fetchmethod_autoload(stash, name, autoload);
-}
-
-#undef Perl_gv_fetchpv
-GV*
-Perl_gv_fetchpv(pTHXo_ const char* name, I32 add, I32 sv_type)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_fetchpv(name, add, sv_type);
-}
-
-#undef Perl_gv_fullname
-void
-Perl_gv_fullname(pTHXo_ SV* sv, GV* gv)
-{
- ((CPerlObj*)pPerl)->Perl_gv_fullname(sv, gv);
-}
-
-#undef Perl_gv_fullname3
-void
-Perl_gv_fullname3(pTHXo_ SV* sv, GV* gv, const char* prefix)
-{
- ((CPerlObj*)pPerl)->Perl_gv_fullname3(sv, gv, prefix);
-}
-
-#undef Perl_gv_fullname4
-void
-Perl_gv_fullname4(pTHXo_ SV* sv, GV* gv, const char* prefix, bool keepmain)
-{
- ((CPerlObj*)pPerl)->Perl_gv_fullname4(sv, gv, prefix, keepmain);
-}
-
-#undef Perl_gv_init
-void
-Perl_gv_init(pTHXo_ GV* gv, HV* stash, const char* name, STRLEN len, int multi)
-{
- ((CPerlObj*)pPerl)->Perl_gv_init(gv, stash, name, len, multi);
-}
-
-#undef Perl_gv_stashpv
-HV*
-Perl_gv_stashpv(pTHXo_ const char* name, I32 create)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_stashpv(name, create);
-}
-
-#undef Perl_gv_stashpvn
-HV*
-Perl_gv_stashpvn(pTHXo_ const char* name, U32 namelen, I32 create)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_stashpvn(name, namelen, create);
-}
-
-#undef Perl_gv_stashsv
-HV*
-Perl_gv_stashsv(pTHXo_ SV* sv, I32 create)
-{
- return ((CPerlObj*)pPerl)->Perl_gv_stashsv(sv, create);
-}
-
-#undef Perl_hv_clear
-void
-Perl_hv_clear(pTHXo_ HV* tb)
-{
- ((CPerlObj*)pPerl)->Perl_hv_clear(tb);
-}
-
-#undef Perl_hv_delayfree_ent
-void
-Perl_hv_delayfree_ent(pTHXo_ HV* hv, HE* entry)
-{
- ((CPerlObj*)pPerl)->Perl_hv_delayfree_ent(hv, entry);
-}
-
-#undef Perl_hv_delete
-SV*
-Perl_hv_delete(pTHXo_ HV* tb, const char* key, U32 klen, I32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_delete(tb, key, klen, flags);
-}
-
-#undef Perl_hv_delete_ent
-SV*
-Perl_hv_delete_ent(pTHXo_ HV* tb, SV* key, I32 flags, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_delete_ent(tb, key, flags, hash);
-}
-
-#undef Perl_hv_exists
-bool
-Perl_hv_exists(pTHXo_ HV* tb, const char* key, U32 klen)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_exists(tb, key, klen);
-}
-
-#undef Perl_hv_exists_ent
-bool
-Perl_hv_exists_ent(pTHXo_ HV* tb, SV* key, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_exists_ent(tb, key, hash);
-}
-
-#undef Perl_hv_fetch
-SV**
-Perl_hv_fetch(pTHXo_ HV* tb, const char* key, U32 klen, I32 lval)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_fetch(tb, key, klen, lval);
-}
-
-#undef Perl_hv_fetch_ent
-HE*
-Perl_hv_fetch_ent(pTHXo_ HV* tb, SV* key, I32 lval, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_fetch_ent(tb, key, lval, hash);
-}
-
-#undef Perl_hv_free_ent
-void
-Perl_hv_free_ent(pTHXo_ HV* hv, HE* entry)
-{
- ((CPerlObj*)pPerl)->Perl_hv_free_ent(hv, entry);
-}
-
-#undef Perl_hv_iterinit
-I32
-Perl_hv_iterinit(pTHXo_ HV* tb)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_iterinit(tb);
-}
-
-#undef Perl_hv_iterkey
-char*
-Perl_hv_iterkey(pTHXo_ HE* entry, I32* retlen)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_iterkey(entry, retlen);
-}
-
-#undef Perl_hv_iterkeysv
-SV*
-Perl_hv_iterkeysv(pTHXo_ HE* entry)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_iterkeysv(entry);
-}
-
-#undef Perl_hv_iternext
-HE*
-Perl_hv_iternext(pTHXo_ HV* tb)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_iternext(tb);
-}
-
-#undef Perl_hv_iternextsv
-SV*
-Perl_hv_iternextsv(pTHXo_ HV* hv, char** key, I32* retlen)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_iternextsv(hv, key, retlen);
-}
-
-#undef Perl_hv_iterval
-SV*
-Perl_hv_iterval(pTHXo_ HV* tb, HE* entry)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_iterval(tb, entry);
-}
-
-#undef Perl_hv_ksplit
-void
-Perl_hv_ksplit(pTHXo_ HV* hv, IV newmax)
-{
- ((CPerlObj*)pPerl)->Perl_hv_ksplit(hv, newmax);
-}
-
-#undef Perl_hv_magic
-void
-Perl_hv_magic(pTHXo_ HV* hv, GV* gv, int how)
-{
- ((CPerlObj*)pPerl)->Perl_hv_magic(hv, gv, how);
-}
-
-#undef Perl_hv_store
-SV**
-Perl_hv_store(pTHXo_ HV* tb, const char* key, U32 klen, SV* val, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_store(tb, key, klen, val, hash);
-}
-
-#undef Perl_hv_store_ent
-HE*
-Perl_hv_store_ent(pTHXo_ HV* tb, SV* key, SV* val, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_hv_store_ent(tb, key, val, hash);
-}
-
-#undef Perl_hv_undef
-void
-Perl_hv_undef(pTHXo_ HV* tb)
-{
- ((CPerlObj*)pPerl)->Perl_hv_undef(tb);
-}
-
-#undef Perl_ibcmp
-I32
-Perl_ibcmp(pTHXo_ const char* a, const char* b, I32 len)
-{
- return ((CPerlObj*)pPerl)->Perl_ibcmp(a, b, len);
-}
-
-#undef Perl_ibcmp_locale
-I32
-Perl_ibcmp_locale(pTHXo_ const char* a, const char* b, I32 len)
-{
- return ((CPerlObj*)pPerl)->Perl_ibcmp_locale(a, b, len);
-}
-
-#undef Perl_init_stacks
-void
-Perl_init_stacks(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_init_stacks();
-}
-
-#undef Perl_instr
-char*
-Perl_instr(pTHXo_ const char* big, const char* little)
-{
- return ((CPerlObj*)pPerl)->Perl_instr(big, little);
-}
-
-#undef Perl_is_uni_alnum
-bool
-Perl_is_uni_alnum(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_alnum(c);
-}
-
-#undef Perl_is_uni_alnumc
-bool
-Perl_is_uni_alnumc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_alnumc(c);
-}
-
-#undef Perl_is_uni_idfirst
-bool
-Perl_is_uni_idfirst(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_idfirst(c);
-}
-
-#undef Perl_is_uni_alpha
-bool
-Perl_is_uni_alpha(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_alpha(c);
-}
-
-#undef Perl_is_uni_ascii
-bool
-Perl_is_uni_ascii(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_ascii(c);
-}
-
-#undef Perl_is_uni_space
-bool
-Perl_is_uni_space(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_space(c);
-}
-
-#undef Perl_is_uni_cntrl
-bool
-Perl_is_uni_cntrl(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_cntrl(c);
-}
-
-#undef Perl_is_uni_graph
-bool
-Perl_is_uni_graph(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_graph(c);
-}
-
-#undef Perl_is_uni_digit
-bool
-Perl_is_uni_digit(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_digit(c);
-}
-
-#undef Perl_is_uni_upper
-bool
-Perl_is_uni_upper(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_upper(c);
-}
-
-#undef Perl_is_uni_lower
-bool
-Perl_is_uni_lower(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_lower(c);
-}
-
-#undef Perl_is_uni_print
-bool
-Perl_is_uni_print(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_print(c);
-}
-
-#undef Perl_is_uni_punct
-bool
-Perl_is_uni_punct(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_punct(c);
-}
-
-#undef Perl_is_uni_xdigit
-bool
-Perl_is_uni_xdigit(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_xdigit(c);
-}
-
-#undef Perl_to_uni_upper
-U32
-Perl_to_uni_upper(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_to_uni_upper(c);
-}
-
-#undef Perl_to_uni_title
-U32
-Perl_to_uni_title(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_to_uni_title(c);
-}
-
-#undef Perl_to_uni_lower
-U32
-Perl_to_uni_lower(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_to_uni_lower(c);
-}
-
-#undef Perl_is_uni_alnum_lc
-bool
-Perl_is_uni_alnum_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_alnum_lc(c);
-}
-
-#undef Perl_is_uni_alnumc_lc
-bool
-Perl_is_uni_alnumc_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_alnumc_lc(c);
-}
-
-#undef Perl_is_uni_idfirst_lc
-bool
-Perl_is_uni_idfirst_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_idfirst_lc(c);
-}
-
-#undef Perl_is_uni_alpha_lc
-bool
-Perl_is_uni_alpha_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_alpha_lc(c);
-}
-
-#undef Perl_is_uni_ascii_lc
-bool
-Perl_is_uni_ascii_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_ascii_lc(c);
-}
-
-#undef Perl_is_uni_space_lc
-bool
-Perl_is_uni_space_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_space_lc(c);
-}
-
-#undef Perl_is_uni_cntrl_lc
-bool
-Perl_is_uni_cntrl_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_cntrl_lc(c);
-}
-
-#undef Perl_is_uni_graph_lc
-bool
-Perl_is_uni_graph_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_graph_lc(c);
-}
-
-#undef Perl_is_uni_digit_lc
-bool
-Perl_is_uni_digit_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_digit_lc(c);
-}
-
-#undef Perl_is_uni_upper_lc
-bool
-Perl_is_uni_upper_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_upper_lc(c);
-}
-
-#undef Perl_is_uni_lower_lc
-bool
-Perl_is_uni_lower_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_lower_lc(c);
-}
-
-#undef Perl_is_uni_print_lc
-bool
-Perl_is_uni_print_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_print_lc(c);
-}
-
-#undef Perl_is_uni_punct_lc
-bool
-Perl_is_uni_punct_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_punct_lc(c);
-}
-
-#undef Perl_is_uni_xdigit_lc
-bool
-Perl_is_uni_xdigit_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_is_uni_xdigit_lc(c);
-}
-
-#undef Perl_to_uni_upper_lc
-U32
-Perl_to_uni_upper_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_to_uni_upper_lc(c);
-}
-
-#undef Perl_to_uni_title_lc
-U32
-Perl_to_uni_title_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_to_uni_title_lc(c);
-}
-
-#undef Perl_to_uni_lower_lc
-U32
-Perl_to_uni_lower_lc(pTHXo_ U32 c)
-{
- return ((CPerlObj*)pPerl)->Perl_to_uni_lower_lc(c);
-}
-
-#undef Perl_is_utf8_char
-STRLEN
-Perl_is_utf8_char(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_char(p);
-}
-
-#undef Perl_is_utf8_string
-bool
-Perl_is_utf8_string(pTHXo_ U8 *s, STRLEN len)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_string(s, len);
-}
-
-#undef Perl_is_utf8_alnum
-bool
-Perl_is_utf8_alnum(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_alnum(p);
-}
-
-#undef Perl_is_utf8_alnumc
-bool
-Perl_is_utf8_alnumc(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_alnumc(p);
-}
-
-#undef Perl_is_utf8_idfirst
-bool
-Perl_is_utf8_idfirst(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_idfirst(p);
-}
-
-#undef Perl_is_utf8_alpha
-bool
-Perl_is_utf8_alpha(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_alpha(p);
-}
-
-#undef Perl_is_utf8_ascii
-bool
-Perl_is_utf8_ascii(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_ascii(p);
-}
-
-#undef Perl_is_utf8_space
-bool
-Perl_is_utf8_space(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_space(p);
-}
-
-#undef Perl_is_utf8_cntrl
-bool
-Perl_is_utf8_cntrl(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_cntrl(p);
-}
-
-#undef Perl_is_utf8_digit
-bool
-Perl_is_utf8_digit(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_digit(p);
-}
-
-#undef Perl_is_utf8_graph
-bool
-Perl_is_utf8_graph(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_graph(p);
-}
-
-#undef Perl_is_utf8_upper
-bool
-Perl_is_utf8_upper(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_upper(p);
-}
-
-#undef Perl_is_utf8_lower
-bool
-Perl_is_utf8_lower(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_lower(p);
-}
-
-#undef Perl_is_utf8_print
-bool
-Perl_is_utf8_print(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_print(p);
-}
-
-#undef Perl_is_utf8_punct
-bool
-Perl_is_utf8_punct(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_punct(p);
-}
-
-#undef Perl_is_utf8_xdigit
-bool
-Perl_is_utf8_xdigit(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_xdigit(p);
-}
-
-#undef Perl_is_utf8_mark
-bool
-Perl_is_utf8_mark(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_is_utf8_mark(p);
-}
-
-#undef Perl_leave_scope
-void
-Perl_leave_scope(pTHXo_ I32 base)
-{
- ((CPerlObj*)pPerl)->Perl_leave_scope(base);
-}
-
-#undef Perl_load_module
-void
-Perl_load_module(pTHXo_ U32 flags, SV* name, SV* ver, ...)
-{
- va_list args;
- va_start(args, ver);
- ((CPerlObj*)pPerl)->Perl_vload_module(flags, name, ver, &args);
- va_end(args);
-}
-
-#undef Perl_vload_module
-void
-Perl_vload_module(pTHXo_ U32 flags, SV* name, SV* ver, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_vload_module(flags, name, ver, args);
-}
-
-#undef Perl_looks_like_number
-I32
-Perl_looks_like_number(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_looks_like_number(sv);
-}
-#if defined(USE_THREADS)
-#endif
-#if defined(USE_LOCALE_COLLATE)
-#endif
-
-#undef Perl_markstack_grow
-void
-Perl_markstack_grow(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_markstack_grow();
-}
-#if defined(USE_LOCALE_COLLATE)
-#endif
-
-#undef Perl_mess
-SV*
-Perl_mess(pTHXo_ const char* pat, ...)
-{
- SV* retval;
- va_list args;
- va_start(args, pat);
- retval = ((CPerlObj*)pPerl)->Perl_vmess(pat, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_vmess
-SV*
-Perl_vmess(pTHXo_ const char* pat, va_list* args)
-{
- return ((CPerlObj*)pPerl)->Perl_vmess(pat, args);
-}
-
-#undef Perl_mg_clear
-int
-Perl_mg_clear(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_clear(sv);
-}
-
-#undef Perl_mg_copy
-int
-Perl_mg_copy(pTHXo_ SV* sv, SV* nsv, const char* key, I32 klen)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_copy(sv, nsv, key, klen);
-}
-
-#undef Perl_mg_find
-MAGIC*
-Perl_mg_find(pTHXo_ SV* sv, int type)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_find(sv, type);
-}
-
-#undef Perl_mg_free
-int
-Perl_mg_free(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_free(sv);
-}
-
-#undef Perl_mg_get
-int
-Perl_mg_get(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_get(sv);
-}
-
-#undef Perl_mg_length
-U32
-Perl_mg_length(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_length(sv);
-}
-
-#undef Perl_mg_magical
-void
-Perl_mg_magical(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_mg_magical(sv);
-}
-
-#undef Perl_mg_set
-int
-Perl_mg_set(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_set(sv);
-}
-
-#undef Perl_mg_size
-I32
-Perl_mg_size(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_size(sv);
-}
-
-#undef Perl_moreswitches
-char*
-Perl_moreswitches(pTHXo_ char* s)
-{
- return ((CPerlObj*)pPerl)->Perl_moreswitches(s);
-}
-
-#undef Perl_my_atof
-NV
-Perl_my_atof(pTHXo_ const char *s)
-{
- return ((CPerlObj*)pPerl)->Perl_my_atof(s);
-}
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
-
-#undef Perl_my_bcopy
-char*
-Perl_my_bcopy(const char* from, char* to, I32 len)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_my_bcopy(from, to, len);
-}
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-
-#undef Perl_my_bzero
-char*
-Perl_my_bzero(char* loc, I32 len)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_my_bzero(loc, len);
-}
-#endif
-
-#undef Perl_my_exit
-void
-Perl_my_exit(pTHXo_ U32 status)
-{
- ((CPerlObj*)pPerl)->Perl_my_exit(status);
-}
-
-#undef Perl_my_failure_exit
-void
-Perl_my_failure_exit(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_my_failure_exit();
-}
-
-#undef Perl_my_fflush_all
-I32
-Perl_my_fflush_all(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_my_fflush_all();
-}
-
-#undef Perl_my_lstat
-I32
-Perl_my_lstat(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_my_lstat();
-}
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-
-#undef Perl_my_memcmp
-I32
-Perl_my_memcmp(const char* s1, const char* s2, I32 len)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_my_memcmp(s1, s2, len);
-}
-#endif
-#if !defined(HAS_MEMSET)
-
-#undef Perl_my_memset
-void*
-Perl_my_memset(char* loc, I32 ch, I32 len)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_my_memset(loc, ch, len);
-}
-#endif
-#if !defined(PERL_OBJECT)
-
-#undef Perl_my_pclose
-I32
-Perl_my_pclose(pTHXo_ PerlIO* ptr)
-{
- return ((CPerlObj*)pPerl)->Perl_my_pclose(ptr);
-}
-
-#undef Perl_my_popen
-PerlIO*
-Perl_my_popen(pTHXo_ char* cmd, char* mode)
-{
- return ((CPerlObj*)pPerl)->Perl_my_popen(cmd, mode);
-}
-#endif
-
-#undef Perl_my_setenv
-void
-Perl_my_setenv(pTHXo_ char* nam, char* val)
-{
- ((CPerlObj*)pPerl)->Perl_my_setenv(nam, val);
-}
-
-#undef Perl_my_stat
-I32
-Perl_my_stat(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_my_stat();
-}
-#if defined(MYSWAP)
-
-#undef Perl_my_swap
-short
-Perl_my_swap(pTHXo_ short s)
-{
- return ((CPerlObj*)pPerl)->Perl_my_swap(s);
-}
-
-#undef Perl_my_htonl
-long
-Perl_my_htonl(pTHXo_ long l)
-{
- return ((CPerlObj*)pPerl)->Perl_my_htonl(l);
-}
-
-#undef Perl_my_ntohl
-long
-Perl_my_ntohl(pTHXo_ long l)
-{
- return ((CPerlObj*)pPerl)->Perl_my_ntohl(l);
-}
-#endif
-
-#undef Perl_newANONLIST
-OP*
-Perl_newANONLIST(pTHXo_ OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_newANONLIST(o);
-}
-
-#undef Perl_newANONHASH
-OP*
-Perl_newANONHASH(pTHXo_ OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_newANONHASH(o);
-}
-
-#undef Perl_newANONSUB
-OP*
-Perl_newANONSUB(pTHXo_ I32 floor, OP* proto, OP* block)
-{
- return ((CPerlObj*)pPerl)->Perl_newANONSUB(floor, proto, block);
-}
-
-#undef Perl_newASSIGNOP
-OP*
-Perl_newASSIGNOP(pTHXo_ I32 flags, OP* left, I32 optype, OP* right)
-{
- return ((CPerlObj*)pPerl)->Perl_newASSIGNOP(flags, left, optype, right);
-}
-
-#undef Perl_newCONDOP
-OP*
-Perl_newCONDOP(pTHXo_ I32 flags, OP* expr, OP* trueop, OP* falseop)
-{
- return ((CPerlObj*)pPerl)->Perl_newCONDOP(flags, expr, trueop, falseop);
-}
-
-#undef Perl_newCONSTSUB
-void
-Perl_newCONSTSUB(pTHXo_ HV* stash, char* name, SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_newCONSTSUB(stash, name, sv);
-}
-
-#undef Perl_newFORM
-void
-Perl_newFORM(pTHXo_ I32 floor, OP* o, OP* block)
-{
- ((CPerlObj*)pPerl)->Perl_newFORM(floor, o, block);
-}
-
-#undef Perl_newFOROP
-OP*
-Perl_newFOROP(pTHXo_ I32 flags, char* label, line_t forline, OP* sclr, OP* expr, OP*block, OP*cont)
-{
- return ((CPerlObj*)pPerl)->Perl_newFOROP(flags, label, forline, sclr, expr, block, cont);
-}
-
-#undef Perl_newLOGOP
-OP*
-Perl_newLOGOP(pTHXo_ I32 optype, I32 flags, OP* left, OP* right)
-{
- return ((CPerlObj*)pPerl)->Perl_newLOGOP(optype, flags, left, right);
-}
-
-#undef Perl_newLOOPEX
-OP*
-Perl_newLOOPEX(pTHXo_ I32 type, OP* label)
-{
- return ((CPerlObj*)pPerl)->Perl_newLOOPEX(type, label);
-}
-
-#undef Perl_newLOOPOP
-OP*
-Perl_newLOOPOP(pTHXo_ I32 flags, I32 debuggable, OP* expr, OP* block)
-{
- return ((CPerlObj*)pPerl)->Perl_newLOOPOP(flags, debuggable, expr, block);
-}
-
-#undef Perl_newNULLLIST
-OP*
-Perl_newNULLLIST(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_newNULLLIST();
-}
-
-#undef Perl_newOP
-OP*
-Perl_newOP(pTHXo_ I32 optype, I32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_newOP(optype, flags);
-}
-
-#undef Perl_newPROG
-void
-Perl_newPROG(pTHXo_ OP* o)
-{
- ((CPerlObj*)pPerl)->Perl_newPROG(o);
-}
-
-#undef Perl_newRANGE
-OP*
-Perl_newRANGE(pTHXo_ I32 flags, OP* left, OP* right)
-{
- return ((CPerlObj*)pPerl)->Perl_newRANGE(flags, left, right);
-}
-
-#undef Perl_newSLICEOP
-OP*
-Perl_newSLICEOP(pTHXo_ I32 flags, OP* subscript, OP* listop)
-{
- return ((CPerlObj*)pPerl)->Perl_newSLICEOP(flags, subscript, listop);
-}
-
-#undef Perl_newSTATEOP
-OP*
-Perl_newSTATEOP(pTHXo_ I32 flags, char* label, OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_newSTATEOP(flags, label, o);
-}
-
-#undef Perl_newSUB
-CV*
-Perl_newSUB(pTHXo_ I32 floor, OP* o, OP* proto, OP* block)
-{
- return ((CPerlObj*)pPerl)->Perl_newSUB(floor, o, proto, block);
-}
-
-#undef Perl_newXS
-CV*
-Perl_newXS(pTHXo_ char* name, XSUBADDR_t f, char* filename)
-{
- return ((CPerlObj*)pPerl)->Perl_newXS(name, f, filename);
-}
-
-#undef Perl_newAV
-AV*
-Perl_newAV(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_newAV();
-}
-
-#undef Perl_newAVREF
-OP*
-Perl_newAVREF(pTHXo_ OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_newAVREF(o);
-}
-
-#undef Perl_newBINOP
-OP*
-Perl_newBINOP(pTHXo_ I32 type, I32 flags, OP* first, OP* last)
-{
- return ((CPerlObj*)pPerl)->Perl_newBINOP(type, flags, first, last);
-}
-
-#undef Perl_newCVREF
-OP*
-Perl_newCVREF(pTHXo_ I32 flags, OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_newCVREF(flags, o);
-}
-
-#undef Perl_newGVOP
-OP*
-Perl_newGVOP(pTHXo_ I32 type, I32 flags, GV* gv)
-{
- return ((CPerlObj*)pPerl)->Perl_newGVOP(type, flags, gv);
-}
-
-#undef Perl_newGVgen
-GV*
-Perl_newGVgen(pTHXo_ char* pack)
-{
- return ((CPerlObj*)pPerl)->Perl_newGVgen(pack);
-}
-
-#undef Perl_newGVREF
-OP*
-Perl_newGVREF(pTHXo_ I32 type, OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_newGVREF(type, o);
-}
-
-#undef Perl_newHVREF
-OP*
-Perl_newHVREF(pTHXo_ OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_newHVREF(o);
-}
-
-#undef Perl_newHV
-HV*
-Perl_newHV(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_newHV();
-}
-
-#undef Perl_newHVhv
-HV*
-Perl_newHVhv(pTHXo_ HV* hv)
-{
- return ((CPerlObj*)pPerl)->Perl_newHVhv(hv);
-}
-
-#undef Perl_newIO
-IO*
-Perl_newIO(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_newIO();
-}
-
-#undef Perl_newLISTOP
-OP*
-Perl_newLISTOP(pTHXo_ I32 type, I32 flags, OP* first, OP* last)
-{
- return ((CPerlObj*)pPerl)->Perl_newLISTOP(type, flags, first, last);
-}
-
-#undef Perl_newPADOP
-OP*
-Perl_newPADOP(pTHXo_ I32 type, I32 flags, SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_newPADOP(type, flags, sv);
-}
-
-#undef Perl_newPMOP
-OP*
-Perl_newPMOP(pTHXo_ I32 type, I32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_newPMOP(type, flags);
-}
-
-#undef Perl_newPVOP
-OP*
-Perl_newPVOP(pTHXo_ I32 type, I32 flags, char* pv)
-{
- return ((CPerlObj*)pPerl)->Perl_newPVOP(type, flags, pv);
-}
-
-#undef Perl_newRV
-SV*
-Perl_newRV(pTHXo_ SV* pref)
-{
- return ((CPerlObj*)pPerl)->Perl_newRV(pref);
-}
-
-#undef Perl_newRV_noinc
-SV*
-Perl_newRV_noinc(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_newRV_noinc(sv);
-}
-
-#undef Perl_newSV
-SV*
-Perl_newSV(pTHXo_ STRLEN len)
-{
- return ((CPerlObj*)pPerl)->Perl_newSV(len);
-}
-
-#undef Perl_newSVREF
-OP*
-Perl_newSVREF(pTHXo_ OP* o)
-{
- return ((CPerlObj*)pPerl)->Perl_newSVREF(o);
-}
-
-#undef Perl_newSVOP
-OP*
-Perl_newSVOP(pTHXo_ I32 type, I32 flags, SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_newSVOP(type, flags, sv);
-}
-
-#undef Perl_newSViv
-SV*
-Perl_newSViv(pTHXo_ IV i)
-{
- return ((CPerlObj*)pPerl)->Perl_newSViv(i);
-}
-
-#undef Perl_newSVuv
-SV*
-Perl_newSVuv(pTHXo_ UV u)
-{
- return ((CPerlObj*)pPerl)->Perl_newSVuv(u);
-}
-
-#undef Perl_newSVnv
-SV*
-Perl_newSVnv(pTHXo_ NV n)
-{
- return ((CPerlObj*)pPerl)->Perl_newSVnv(n);
-}
-
-#undef Perl_newSVpv
-SV*
-Perl_newSVpv(pTHXo_ const char* s, STRLEN len)
-{
- return ((CPerlObj*)pPerl)->Perl_newSVpv(s, len);
-}
-
-#undef Perl_newSVpvn
-SV*
-Perl_newSVpvn(pTHXo_ const char* s, STRLEN len)
-{
- return ((CPerlObj*)pPerl)->Perl_newSVpvn(s, len);
-}
-
-#undef Perl_newSVpvf
-SV*
-Perl_newSVpvf(pTHXo_ const char* pat, ...)
-{
- SV* retval;
- va_list args;
- va_start(args, pat);
- retval = ((CPerlObj*)pPerl)->Perl_vnewSVpvf(pat, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_vnewSVpvf
-SV*
-Perl_vnewSVpvf(pTHXo_ const char* pat, va_list* args)
-{
- return ((CPerlObj*)pPerl)->Perl_vnewSVpvf(pat, args);
-}
-
-#undef Perl_newSVrv
-SV*
-Perl_newSVrv(pTHXo_ SV* rv, const char* classname)
-{
- return ((CPerlObj*)pPerl)->Perl_newSVrv(rv, classname);
-}
-
-#undef Perl_newSVsv
-SV*
-Perl_newSVsv(pTHXo_ SV* old)
-{
- return ((CPerlObj*)pPerl)->Perl_newSVsv(old);
-}
-
-#undef Perl_newUNOP
-OP*
-Perl_newUNOP(pTHXo_ I32 type, I32 flags, OP* first)
-{
- return ((CPerlObj*)pPerl)->Perl_newUNOP(type, flags, first);
-}
-
-#undef Perl_newWHILEOP
-OP*
-Perl_newWHILEOP(pTHXo_ I32 flags, I32 debuggable, LOOP* loop, I32 whileline, OP* expr, OP* block, OP* cont)
-{
- return ((CPerlObj*)pPerl)->Perl_newWHILEOP(flags, debuggable, loop, whileline, expr, block, cont);
-}
-
-#undef Perl_new_stackinfo
-PERL_SI*
-Perl_new_stackinfo(pTHXo_ I32 stitems, I32 cxitems)
-{
- return ((CPerlObj*)pPerl)->Perl_new_stackinfo(stitems, cxitems);
-}
-
-#undef Perl_ninstr
-char*
-Perl_ninstr(pTHXo_ const char* big, const char* bigend, const char* little, const char* lend)
-{
- return ((CPerlObj*)pPerl)->Perl_ninstr(big, bigend, little, lend);
-}
-
-#undef Perl_op_free
-void
-Perl_op_free(pTHXo_ OP* arg)
-{
- ((CPerlObj*)pPerl)->Perl_op_free(arg);
-}
-
-#undef Perl_pad_sv
-SV*
-Perl_pad_sv(pTHXo_ PADOFFSET po)
-{
- return ((CPerlObj*)pPerl)->Perl_pad_sv(po);
-}
-#if defined(PERL_OBJECT)
-
-#undef Perl_construct
-void
-Perl_construct(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_construct();
-}
-
-#undef Perl_destruct
-void
-Perl_destruct(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_destruct();
-}
-
-#undef Perl_free
-void
-Perl_free(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_free();
-}
-
-#undef Perl_run
-int
-Perl_run(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_run();
-}
-
-#undef Perl_parse
-int
-Perl_parse(pTHXo_ XSINIT_t xsinit, int argc, char** argv, char** env)
-{
- return ((CPerlObj*)pPerl)->Perl_parse(xsinit, argc, argv, env);
-}
-#endif
-#if defined(USE_THREADS)
-
-#undef Perl_new_struct_thread
-struct perl_thread*
-Perl_new_struct_thread(pTHXo_ struct perl_thread *t)
-{
- return ((CPerlObj*)pPerl)->Perl_new_struct_thread(t);
-}
-#endif
-
-#undef Perl_call_atexit
-void
-Perl_call_atexit(pTHXo_ ATEXIT_t fn, void *ptr)
-{
- ((CPerlObj*)pPerl)->Perl_call_atexit(fn, ptr);
-}
-
-#undef Perl_call_argv
-I32
-Perl_call_argv(pTHXo_ const char* sub_name, I32 flags, char** argv)
-{
- return ((CPerlObj*)pPerl)->Perl_call_argv(sub_name, flags, argv);
-}
-
-#undef Perl_call_method
-I32
-Perl_call_method(pTHXo_ const char* methname, I32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_call_method(methname, flags);
-}
-
-#undef Perl_call_pv
-I32
-Perl_call_pv(pTHXo_ const char* sub_name, I32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_call_pv(sub_name, flags);
-}
-
-#undef Perl_call_sv
-I32
-Perl_call_sv(pTHXo_ SV* sv, I32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_call_sv(sv, flags);
-}
-
-#undef Perl_eval_pv
-SV*
-Perl_eval_pv(pTHXo_ const char* p, I32 croak_on_error)
-{
- return ((CPerlObj*)pPerl)->Perl_eval_pv(p, croak_on_error);
-}
-
-#undef Perl_eval_sv
-I32
-Perl_eval_sv(pTHXo_ SV* sv, I32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_eval_sv(sv, flags);
-}
-
-#undef Perl_get_sv
-SV*
-Perl_get_sv(pTHXo_ const char* name, I32 create)
-{
- return ((CPerlObj*)pPerl)->Perl_get_sv(name, create);
-}
-
-#undef Perl_get_av
-AV*
-Perl_get_av(pTHXo_ const char* name, I32 create)
-{
- return ((CPerlObj*)pPerl)->Perl_get_av(name, create);
-}
-
-#undef Perl_get_hv
-HV*
-Perl_get_hv(pTHXo_ const char* name, I32 create)
-{
- return ((CPerlObj*)pPerl)->Perl_get_hv(name, create);
-}
-
-#undef Perl_get_cv
-CV*
-Perl_get_cv(pTHXo_ const char* name, I32 create)
-{
- return ((CPerlObj*)pPerl)->Perl_get_cv(name, create);
-}
-
-#undef Perl_init_i18nl10n
-int
-Perl_init_i18nl10n(pTHXo_ int printwarn)
-{
- return ((CPerlObj*)pPerl)->Perl_init_i18nl10n(printwarn);
-}
-
-#undef Perl_init_i18nl14n
-int
-Perl_init_i18nl14n(pTHXo_ int printwarn)
-{
- return ((CPerlObj*)pPerl)->Perl_init_i18nl14n(printwarn);
-}
-
-#undef Perl_new_collate
-void
-Perl_new_collate(pTHXo_ char* newcoll)
-{
- ((CPerlObj*)pPerl)->Perl_new_collate(newcoll);
-}
-
-#undef Perl_new_ctype
-void
-Perl_new_ctype(pTHXo_ char* newctype)
-{
- ((CPerlObj*)pPerl)->Perl_new_ctype(newctype);
-}
-
-#undef Perl_new_numeric
-void
-Perl_new_numeric(pTHXo_ char* newcoll)
-{
- ((CPerlObj*)pPerl)->Perl_new_numeric(newcoll);
-}
-
-#undef Perl_set_numeric_local
-void
-Perl_set_numeric_local(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_set_numeric_local();
-}
-
-#undef Perl_set_numeric_radix
-void
-Perl_set_numeric_radix(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_set_numeric_radix();
-}
-
-#undef Perl_set_numeric_standard
-void
-Perl_set_numeric_standard(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_set_numeric_standard();
-}
-
-#undef Perl_require_pv
-void
-Perl_require_pv(pTHXo_ const char* pv)
-{
- ((CPerlObj*)pPerl)->Perl_require_pv(pv);
-}
-
-#undef Perl_pmflag
-void
-Perl_pmflag(pTHXo_ U16* pmfl, int ch)
-{
- ((CPerlObj*)pPerl)->Perl_pmflag(pmfl, ch);
-}
-
-#undef Perl_pop_scope
-void
-Perl_pop_scope(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_pop_scope();
-}
-
-#undef Perl_push_scope
-void
-Perl_push_scope(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_push_scope();
-}
-
-#undef Perl_regdump
-void
-Perl_regdump(pTHXo_ regexp* r)
-{
- ((CPerlObj*)pPerl)->Perl_regdump(r);
-}
-
-#undef Perl_pregexec
-I32
-Perl_pregexec(pTHXo_ regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, U32 nosave)
-{
- return ((CPerlObj*)pPerl)->Perl_pregexec(prog, stringarg, strend, strbeg, minend, screamer, nosave);
-}
-
-#undef Perl_pregfree
-void
-Perl_pregfree(pTHXo_ struct regexp* r)
-{
- ((CPerlObj*)pPerl)->Perl_pregfree(r);
-}
-
-#undef Perl_pregcomp
-regexp*
-Perl_pregcomp(pTHXo_ char* exp, char* xend, PMOP* pm)
-{
- return ((CPerlObj*)pPerl)->Perl_pregcomp(exp, xend, pm);
-}
-
-#undef Perl_re_intuit_start
-char*
-Perl_re_intuit_start(pTHXo_ regexp* prog, SV* sv, char* strpos, char* strend, U32 flags, struct re_scream_pos_data_s *data)
-{
- return ((CPerlObj*)pPerl)->Perl_re_intuit_start(prog, sv, strpos, strend, flags, data);
-}
-
-#undef Perl_re_intuit_string
-SV*
-Perl_re_intuit_string(pTHXo_ regexp* prog)
-{
- return ((CPerlObj*)pPerl)->Perl_re_intuit_string(prog);
-}
-
-#undef Perl_regexec_flags
-I32
-Perl_regexec_flags(pTHXo_ regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, void* data, U32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_regexec_flags(prog, stringarg, strend, strbeg, minend, screamer, data, flags);
-}
-
-#undef Perl_regnext
-regnode*
-Perl_regnext(pTHXo_ regnode* p)
-{
- return ((CPerlObj*)pPerl)->Perl_regnext(p);
-}
-
-#undef Perl_repeatcpy
-void
-Perl_repeatcpy(pTHXo_ char* to, const char* from, I32 len, I32 count)
-{
- ((CPerlObj*)pPerl)->Perl_repeatcpy(to, from, len, count);
-}
-
-#undef Perl_rninstr
-char*
-Perl_rninstr(pTHXo_ const char* big, const char* bigend, const char* little, const char* lend)
-{
- return ((CPerlObj*)pPerl)->Perl_rninstr(big, bigend, little, lend);
-}
-
-#undef Perl_rsignal
-Sighandler_t
-Perl_rsignal(pTHXo_ int i, Sighandler_t t)
-{
- return ((CPerlObj*)pPerl)->Perl_rsignal(i, t);
-}
-#if !defined(HAS_RENAME)
-#endif
-
-#undef Perl_savepv
-char*
-Perl_savepv(pTHXo_ const char* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_savepv(sv);
-}
-
-#undef Perl_savepvn
-char*
-Perl_savepvn(pTHXo_ const char* sv, I32 len)
-{
- return ((CPerlObj*)pPerl)->Perl_savepvn(sv, len);
-}
-
-#undef Perl_savestack_grow
-void
-Perl_savestack_grow(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_savestack_grow();
-}
-
-#undef Perl_save_aelem
-void
-Perl_save_aelem(pTHXo_ AV* av, I32 idx, SV **sptr)
-{
- ((CPerlObj*)pPerl)->Perl_save_aelem(av, idx, sptr);
-}
-
-#undef Perl_save_alloc
-I32
-Perl_save_alloc(pTHXo_ I32 size, I32 pad)
-{
- return ((CPerlObj*)pPerl)->Perl_save_alloc(size, pad);
-}
-
-#undef Perl_save_aptr
-void
-Perl_save_aptr(pTHXo_ AV** aptr)
-{
- ((CPerlObj*)pPerl)->Perl_save_aptr(aptr);
-}
-
-#undef Perl_save_ary
-AV*
-Perl_save_ary(pTHXo_ GV* gv)
-{
- return ((CPerlObj*)pPerl)->Perl_save_ary(gv);
-}
-
-#undef Perl_save_clearsv
-void
-Perl_save_clearsv(pTHXo_ SV** svp)
-{
- ((CPerlObj*)pPerl)->Perl_save_clearsv(svp);
-}
-
-#undef Perl_save_delete
-void
-Perl_save_delete(pTHXo_ HV* hv, char* key, I32 klen)
-{
- ((CPerlObj*)pPerl)->Perl_save_delete(hv, key, klen);
-}
-
-#undef Perl_save_destructor
-void
-Perl_save_destructor(pTHXo_ DESTRUCTORFUNC_NOCONTEXT_t f, void* p)
-{
- ((CPerlObj*)pPerl)->Perl_save_destructor(f, p);
-}
-
-#undef Perl_save_destructor_x
-void
-Perl_save_destructor_x(pTHXo_ DESTRUCTORFUNC_t f, void* p)
-{
- ((CPerlObj*)pPerl)->Perl_save_destructor_x(f, p);
-}
-
-#undef Perl_save_freesv
-void
-Perl_save_freesv(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_save_freesv(sv);
-}
-
-#undef Perl_save_freepv
-void
-Perl_save_freepv(pTHXo_ char* pv)
-{
- ((CPerlObj*)pPerl)->Perl_save_freepv(pv);
-}
-
-#undef Perl_save_generic_svref
-void
-Perl_save_generic_svref(pTHXo_ SV** sptr)
-{
- ((CPerlObj*)pPerl)->Perl_save_generic_svref(sptr);
-}
-
-#undef Perl_save_generic_pvref
-void
-Perl_save_generic_pvref(pTHXo_ char** str)
-{
- ((CPerlObj*)pPerl)->Perl_save_generic_pvref(str);
-}
-
-#undef Perl_save_gp
-void
-Perl_save_gp(pTHXo_ GV* gv, I32 empty)
-{
- ((CPerlObj*)pPerl)->Perl_save_gp(gv, empty);
-}
-
-#undef Perl_save_hash
-HV*
-Perl_save_hash(pTHXo_ GV* gv)
-{
- return ((CPerlObj*)pPerl)->Perl_save_hash(gv);
-}
-
-#undef Perl_save_helem
-void
-Perl_save_helem(pTHXo_ HV* hv, SV *key, SV **sptr)
-{
- ((CPerlObj*)pPerl)->Perl_save_helem(hv, key, sptr);
-}
-
-#undef Perl_save_hints
-void
-Perl_save_hints(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_save_hints();
-}
-
-#undef Perl_save_hptr
-void
-Perl_save_hptr(pTHXo_ HV** hptr)
-{
- ((CPerlObj*)pPerl)->Perl_save_hptr(hptr);
-}
-
-#undef Perl_save_I16
-void
-Perl_save_I16(pTHXo_ I16* intp)
-{
- ((CPerlObj*)pPerl)->Perl_save_I16(intp);
-}
-
-#undef Perl_save_I32
-void
-Perl_save_I32(pTHXo_ I32* intp)
-{
- ((CPerlObj*)pPerl)->Perl_save_I32(intp);
-}
-
-#undef Perl_save_I8
-void
-Perl_save_I8(pTHXo_ I8* bytep)
-{
- ((CPerlObj*)pPerl)->Perl_save_I8(bytep);
-}
-
-#undef Perl_save_int
-void
-Perl_save_int(pTHXo_ int* intp)
-{
- ((CPerlObj*)pPerl)->Perl_save_int(intp);
-}
-
-#undef Perl_save_item
-void
-Perl_save_item(pTHXo_ SV* item)
-{
- ((CPerlObj*)pPerl)->Perl_save_item(item);
-}
-
-#undef Perl_save_iv
-void
-Perl_save_iv(pTHXo_ IV* iv)
-{
- ((CPerlObj*)pPerl)->Perl_save_iv(iv);
-}
-
-#undef Perl_save_list
-void
-Perl_save_list(pTHXo_ SV** sarg, I32 maxsarg)
-{
- ((CPerlObj*)pPerl)->Perl_save_list(sarg, maxsarg);
-}
-
-#undef Perl_save_long
-void
-Perl_save_long(pTHXo_ long* longp)
-{
- ((CPerlObj*)pPerl)->Perl_save_long(longp);
-}
-
-#undef Perl_save_mortalizesv
-void
-Perl_save_mortalizesv(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_save_mortalizesv(sv);
-}
-
-#undef Perl_save_nogv
-void
-Perl_save_nogv(pTHXo_ GV* gv)
-{
- ((CPerlObj*)pPerl)->Perl_save_nogv(gv);
-}
-
-#undef Perl_save_scalar
-SV*
-Perl_save_scalar(pTHXo_ GV* gv)
-{
- return ((CPerlObj*)pPerl)->Perl_save_scalar(gv);
-}
-
-#undef Perl_save_pptr
-void
-Perl_save_pptr(pTHXo_ char** pptr)
-{
- ((CPerlObj*)pPerl)->Perl_save_pptr(pptr);
-}
-
-#undef Perl_save_vptr
-void
-Perl_save_vptr(pTHXo_ void* pptr)
-{
- ((CPerlObj*)pPerl)->Perl_save_vptr(pptr);
-}
-
-#undef Perl_save_re_context
-void
-Perl_save_re_context(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_save_re_context();
-}
-
-#undef Perl_save_padsv
-void
-Perl_save_padsv(pTHXo_ PADOFFSET off)
-{
- ((CPerlObj*)pPerl)->Perl_save_padsv(off);
-}
-
-#undef Perl_save_sptr
-void
-Perl_save_sptr(pTHXo_ SV** sptr)
-{
- ((CPerlObj*)pPerl)->Perl_save_sptr(sptr);
-}
-
-#undef Perl_save_svref
-SV*
-Perl_save_svref(pTHXo_ SV** sptr)
-{
- return ((CPerlObj*)pPerl)->Perl_save_svref(sptr);
-}
-
-#undef Perl_save_threadsv
-SV**
-Perl_save_threadsv(pTHXo_ PADOFFSET i)
-{
- return ((CPerlObj*)pPerl)->Perl_save_threadsv(i);
-}
-
-#undef Perl_scan_bin
-NV
-Perl_scan_bin(pTHXo_ char* start, STRLEN len, STRLEN* retlen)
-{
- return ((CPerlObj*)pPerl)->Perl_scan_bin(start, len, retlen);
-}
-
-#undef Perl_scan_hex
-NV
-Perl_scan_hex(pTHXo_ char* start, STRLEN len, STRLEN* retlen)
-{
- return ((CPerlObj*)pPerl)->Perl_scan_hex(start, len, retlen);
-}
-
-#undef Perl_scan_num
-char*
-Perl_scan_num(pTHXo_ char* s, YYSTYPE *lvalp)
-{
- return ((CPerlObj*)pPerl)->Perl_scan_num(s, lvalp);
-}
-
-#undef Perl_scan_oct
-NV
-Perl_scan_oct(pTHXo_ char* start, STRLEN len, STRLEN* retlen)
-{
- return ((CPerlObj*)pPerl)->Perl_scan_oct(start, len, retlen);
-}
-
-#undef Perl_screaminstr
-char*
-Perl_screaminstr(pTHXo_ SV* bigsv, SV* littlesv, I32 start_shift, I32 end_shift, I32 *state, I32 last)
-{
- return ((CPerlObj*)pPerl)->Perl_screaminstr(bigsv, littlesv, start_shift, end_shift, state, last);
-}
-#if !defined(VMS)
-#endif
-
-#undef Perl_sharepvn
-char*
-Perl_sharepvn(pTHXo_ const char* sv, I32 len, U32 hash)
-{
- return ((CPerlObj*)pPerl)->Perl_sharepvn(sv, len, hash);
-}
-
-#undef Perl_stack_grow
-SV**
-Perl_stack_grow(pTHXo_ SV** sp, SV**p, int n)
-{
- return ((CPerlObj*)pPerl)->Perl_stack_grow(sp, p, n);
-}
-
-#undef Perl_start_subparse
-I32
-Perl_start_subparse(pTHXo_ I32 is_format, U32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_start_subparse(is_format, flags);
-}
-
-#undef Perl_sv_2bool
-bool
-Perl_sv_2bool(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2bool(sv);
-}
-
-#undef Perl_sv_2cv
-CV*
-Perl_sv_2cv(pTHXo_ SV* sv, HV** st, GV** gvp, I32 lref)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2cv(sv, st, gvp, lref);
-}
-
-#undef Perl_sv_2io
-IO*
-Perl_sv_2io(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2io(sv);
-}
-
-#undef Perl_sv_2iv
-IV
-Perl_sv_2iv(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2iv(sv);
-}
-
-#undef Perl_sv_2mortal
-SV*
-Perl_sv_2mortal(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2mortal(sv);
-}
-
-#undef Perl_sv_2nv
-NV
-Perl_sv_2nv(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2nv(sv);
-}
-
-#undef Perl_sv_2pv
-char*
-Perl_sv_2pv(pTHXo_ SV* sv, STRLEN* lp)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2pv(sv, lp);
-}
-
-#undef Perl_sv_2pvutf8
-char*
-Perl_sv_2pvutf8(pTHXo_ SV* sv, STRLEN* lp)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2pvutf8(sv, lp);
-}
-
-#undef Perl_sv_2pvbyte
-char*
-Perl_sv_2pvbyte(pTHXo_ SV* sv, STRLEN* lp)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2pvbyte(sv, lp);
-}
-
-#undef Perl_sv_2uv
-UV
-Perl_sv_2uv(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2uv(sv);
-}
-
-#undef Perl_sv_iv
-IV
-Perl_sv_iv(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_iv(sv);
-}
-
-#undef Perl_sv_uv
-UV
-Perl_sv_uv(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_uv(sv);
-}
-
-#undef Perl_sv_nv
-NV
-Perl_sv_nv(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_nv(sv);
-}
-
-#undef Perl_sv_pvn
-char*
-Perl_sv_pvn(pTHXo_ SV *sv, STRLEN *len)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pvn(sv, len);
-}
-
-#undef Perl_sv_pvutf8n
-char*
-Perl_sv_pvutf8n(pTHXo_ SV *sv, STRLEN *len)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pvutf8n(sv, len);
-}
-
-#undef Perl_sv_pvbyten
-char*
-Perl_sv_pvbyten(pTHXo_ SV *sv, STRLEN *len)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pvbyten(sv, len);
-}
-
-#undef Perl_sv_true
-I32
-Perl_sv_true(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_true(sv);
-}
-
-#undef Perl_sv_backoff
-int
-Perl_sv_backoff(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_backoff(sv);
-}
-
-#undef Perl_sv_bless
-SV*
-Perl_sv_bless(pTHXo_ SV* sv, HV* stash)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_bless(sv, stash);
-}
-
-#undef Perl_sv_catpvf
-void
-Perl_sv_catpvf(pTHXo_ SV* sv, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_sv_vcatpvf(sv, pat, &args);
- va_end(args);
-}
-
-#undef Perl_sv_vcatpvf
-void
-Perl_sv_vcatpvf(pTHXo_ SV* sv, const char* pat, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_sv_vcatpvf(sv, pat, args);
-}
-
-#undef Perl_sv_catpv
-void
-Perl_sv_catpv(pTHXo_ SV* sv, const char* ptr)
-{
- ((CPerlObj*)pPerl)->Perl_sv_catpv(sv, ptr);
-}
-
-#undef Perl_sv_catpvn
-void
-Perl_sv_catpvn(pTHXo_ SV* sv, const char* ptr, STRLEN len)
-{
- ((CPerlObj*)pPerl)->Perl_sv_catpvn(sv, ptr, len);
-}
-
-#undef Perl_sv_catsv
-void
-Perl_sv_catsv(pTHXo_ SV* dsv, SV* ssv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_catsv(dsv, ssv);
-}
-
-#undef Perl_sv_chop
-void
-Perl_sv_chop(pTHXo_ SV* sv, char* ptr)
-{
- ((CPerlObj*)pPerl)->Perl_sv_chop(sv, ptr);
-}
-
-#undef Perl_sv_clear
-void
-Perl_sv_clear(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_clear(sv);
-}
-
-#undef Perl_sv_cmp
-I32
-Perl_sv_cmp(pTHXo_ SV* sv1, SV* sv2)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_cmp(sv1, sv2);
-}
-
-#undef Perl_sv_cmp_locale
-I32
-Perl_sv_cmp_locale(pTHXo_ SV* sv1, SV* sv2)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_cmp_locale(sv1, sv2);
-}
-#if defined(USE_LOCALE_COLLATE)
-
-#undef Perl_sv_collxfrm
-char*
-Perl_sv_collxfrm(pTHXo_ SV* sv, STRLEN* nxp)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_collxfrm(sv, nxp);
-}
-#endif
-
-#undef Perl_sv_compile_2op
-OP*
-Perl_sv_compile_2op(pTHXo_ SV* sv, OP** startp, char* code, AV** avp)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_compile_2op(sv, startp, code, avp);
-}
-
-#undef Perl_sv_dec
-void
-Perl_sv_dec(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_dec(sv);
-}
-
-#undef Perl_sv_dump
-void
-Perl_sv_dump(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_dump(sv);
-}
-
-#undef Perl_sv_derived_from
-bool
-Perl_sv_derived_from(pTHXo_ SV* sv, const char* name)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_derived_from(sv, name);
-}
-
-#undef Perl_sv_eq
-I32
-Perl_sv_eq(pTHXo_ SV* sv1, SV* sv2)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_eq(sv1, sv2);
-}
-
-#undef Perl_sv_free
-void
-Perl_sv_free(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_free(sv);
-}
-
-#undef Perl_sv_gets
-char*
-Perl_sv_gets(pTHXo_ SV* sv, PerlIO* fp, I32 append)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_gets(sv, fp, append);
-}
-
-#undef Perl_sv_grow
-char*
-Perl_sv_grow(pTHXo_ SV* sv, STRLEN newlen)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_grow(sv, newlen);
-}
-
-#undef Perl_sv_inc
-void
-Perl_sv_inc(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_inc(sv);
-}
-
-#undef Perl_sv_insert
-void
-Perl_sv_insert(pTHXo_ SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen)
-{
- ((CPerlObj*)pPerl)->Perl_sv_insert(bigsv, offset, len, little, littlelen);
-}
-
-#undef Perl_sv_isa
-int
-Perl_sv_isa(pTHXo_ SV* sv, const char* name)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_isa(sv, name);
-}
-
-#undef Perl_sv_isobject
-int
-Perl_sv_isobject(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_isobject(sv);
-}
-
-#undef Perl_sv_len
-STRLEN
-Perl_sv_len(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_len(sv);
-}
-
-#undef Perl_sv_len_utf8
-STRLEN
-Perl_sv_len_utf8(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_len_utf8(sv);
-}
-
-#undef Perl_sv_magic
-void
-Perl_sv_magic(pTHXo_ SV* sv, SV* obj, int how, const char* name, I32 namlen)
-{
- ((CPerlObj*)pPerl)->Perl_sv_magic(sv, obj, how, name, namlen);
-}
-
-#undef Perl_sv_mortalcopy
-SV*
-Perl_sv_mortalcopy(pTHXo_ SV* oldsv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_mortalcopy(oldsv);
-}
-
-#undef Perl_sv_newmortal
-SV*
-Perl_sv_newmortal(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_newmortal();
-}
-
-#undef Perl_sv_newref
-SV*
-Perl_sv_newref(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_newref(sv);
-}
-
-#undef Perl_sv_peek
-char*
-Perl_sv_peek(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_peek(sv);
-}
-
-#undef Perl_sv_pos_u2b
-void
-Perl_sv_pos_u2b(pTHXo_ SV* sv, I32* offsetp, I32* lenp)
-{
- ((CPerlObj*)pPerl)->Perl_sv_pos_u2b(sv, offsetp, lenp);
-}
-
-#undef Perl_sv_pos_b2u
-void
-Perl_sv_pos_b2u(pTHXo_ SV* sv, I32* offsetp)
-{
- ((CPerlObj*)pPerl)->Perl_sv_pos_b2u(sv, offsetp);
-}
-
-#undef Perl_sv_pvn_force
-char*
-Perl_sv_pvn_force(pTHXo_ SV* sv, STRLEN* lp)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pvn_force(sv, lp);
-}
-
-#undef Perl_sv_pvutf8n_force
-char*
-Perl_sv_pvutf8n_force(pTHXo_ SV* sv, STRLEN* lp)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pvutf8n_force(sv, lp);
-}
-
-#undef Perl_sv_pvbyten_force
-char*
-Perl_sv_pvbyten_force(pTHXo_ SV* sv, STRLEN* lp)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pvbyten_force(sv, lp);
-}
-
-#undef Perl_sv_reftype
-char*
-Perl_sv_reftype(pTHXo_ SV* sv, int ob)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_reftype(sv, ob);
-}
-
-#undef Perl_sv_replace
-void
-Perl_sv_replace(pTHXo_ SV* sv, SV* nsv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_replace(sv, nsv);
-}
-
-#undef Perl_sv_report_used
-void
-Perl_sv_report_used(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_sv_report_used();
-}
-
-#undef Perl_sv_reset
-void
-Perl_sv_reset(pTHXo_ char* s, HV* stash)
-{
- ((CPerlObj*)pPerl)->Perl_sv_reset(s, stash);
-}
-
-#undef Perl_sv_setpvf
-void
-Perl_sv_setpvf(pTHXo_ SV* sv, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_sv_vsetpvf(sv, pat, &args);
- va_end(args);
-}
-
-#undef Perl_sv_vsetpvf
-void
-Perl_sv_vsetpvf(pTHXo_ SV* sv, const char* pat, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_sv_vsetpvf(sv, pat, args);
-}
-
-#undef Perl_sv_setiv
-void
-Perl_sv_setiv(pTHXo_ SV* sv, IV num)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setiv(sv, num);
-}
-
-#undef Perl_sv_setpviv
-void
-Perl_sv_setpviv(pTHXo_ SV* sv, IV num)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setpviv(sv, num);
-}
-
-#undef Perl_sv_setuv
-void
-Perl_sv_setuv(pTHXo_ SV* sv, UV num)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setuv(sv, num);
-}
-
-#undef Perl_sv_setnv
-void
-Perl_sv_setnv(pTHXo_ SV* sv, NV num)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setnv(sv, num);
-}
-
-#undef Perl_sv_setref_iv
-SV*
-Perl_sv_setref_iv(pTHXo_ SV* rv, const char* classname, IV iv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_setref_iv(rv, classname, iv);
-}
-
-#undef Perl_sv_setref_nv
-SV*
-Perl_sv_setref_nv(pTHXo_ SV* rv, const char* classname, NV nv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_setref_nv(rv, classname, nv);
-}
-
-#undef Perl_sv_setref_pv
-SV*
-Perl_sv_setref_pv(pTHXo_ SV* rv, const char* classname, void* pv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_setref_pv(rv, classname, pv);
-}
-
-#undef Perl_sv_setref_pvn
-SV*
-Perl_sv_setref_pvn(pTHXo_ SV* rv, const char* classname, char* pv, STRLEN n)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_setref_pvn(rv, classname, pv, n);
-}
-
-#undef Perl_sv_setpv
-void
-Perl_sv_setpv(pTHXo_ SV* sv, const char* ptr)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setpv(sv, ptr);
-}
-
-#undef Perl_sv_setpvn
-void
-Perl_sv_setpvn(pTHXo_ SV* sv, const char* ptr, STRLEN len)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setpvn(sv, ptr, len);
-}
-
-#undef Perl_sv_setsv
-void
-Perl_sv_setsv(pTHXo_ SV* dsv, SV* ssv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setsv(dsv, ssv);
-}
-
-#undef Perl_sv_taint
-void
-Perl_sv_taint(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_taint(sv);
-}
-
-#undef Perl_sv_tainted
-bool
-Perl_sv_tainted(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_tainted(sv);
-}
-
-#undef Perl_sv_unmagic
-int
-Perl_sv_unmagic(pTHXo_ SV* sv, int type)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_unmagic(sv, type);
-}
-
-#undef Perl_sv_unref
-void
-Perl_sv_unref(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_unref(sv);
-}
-
-#undef Perl_sv_untaint
-void
-Perl_sv_untaint(pTHXo_ SV* sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_untaint(sv);
-}
-
-#undef Perl_sv_upgrade
-bool
-Perl_sv_upgrade(pTHXo_ SV* sv, U32 mt)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_upgrade(sv, mt);
-}
-
-#undef Perl_sv_usepvn
-void
-Perl_sv_usepvn(pTHXo_ SV* sv, char* ptr, STRLEN len)
-{
- ((CPerlObj*)pPerl)->Perl_sv_usepvn(sv, ptr, len);
-}
-
-#undef Perl_sv_vcatpvfn
-void
-Perl_sv_vcatpvfn(pTHXo_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
-{
- ((CPerlObj*)pPerl)->Perl_sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
-}
-
-#undef Perl_sv_vsetpvfn
-void
-Perl_sv_vsetpvfn(pTHXo_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
-{
- ((CPerlObj*)pPerl)->Perl_sv_vsetpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
-}
-
-#undef Perl_str_to_version
-NV
-Perl_str_to_version(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_str_to_version(sv);
-}
-
-#undef Perl_swash_init
-SV*
-Perl_swash_init(pTHXo_ char* pkg, char* name, SV* listsv, I32 minbits, I32 none)
-{
- return ((CPerlObj*)pPerl)->Perl_swash_init(pkg, name, listsv, minbits, none);
-}
-
-#undef Perl_swash_fetch
-UV
-Perl_swash_fetch(pTHXo_ SV *sv, U8 *ptr)
-{
- return ((CPerlObj*)pPerl)->Perl_swash_fetch(sv, ptr);
-}
-
-#undef Perl_taint_env
-void
-Perl_taint_env(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_taint_env();
-}
-
-#undef Perl_taint_proper
-void
-Perl_taint_proper(pTHXo_ const char* f, const char* s)
-{
- ((CPerlObj*)pPerl)->Perl_taint_proper(f, s);
-}
-
-#undef Perl_to_utf8_lower
-UV
-Perl_to_utf8_lower(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_to_utf8_lower(p);
-}
-
-#undef Perl_to_utf8_upper
-UV
-Perl_to_utf8_upper(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_to_utf8_upper(p);
-}
-
-#undef Perl_to_utf8_title
-UV
-Perl_to_utf8_title(pTHXo_ U8 *p)
-{
- return ((CPerlObj*)pPerl)->Perl_to_utf8_title(p);
-}
-#if defined(UNLINK_ALL_VERSIONS)
-
-#undef Perl_unlnk
-I32
-Perl_unlnk(pTHXo_ char* f)
-{
- return ((CPerlObj*)pPerl)->Perl_unlnk(f);
-}
-#endif
-#if defined(USE_THREADS)
-
-#undef Perl_unlock_condpair
-void
-Perl_unlock_condpair(pTHXo_ void* svv)
-{
- ((CPerlObj*)pPerl)->Perl_unlock_condpair(svv);
-}
-#endif
-
-#undef Perl_unsharepvn
-void
-Perl_unsharepvn(pTHXo_ const char* sv, I32 len, U32 hash)
-{
- ((CPerlObj*)pPerl)->Perl_unsharepvn(sv, len, hash);
-}
-
-#undef Perl_utf16_to_utf8
-U8*
-Perl_utf16_to_utf8(pTHXo_ U8* p, U8 *d, I32 bytelen, I32 *newlen)
-{
- return ((CPerlObj*)pPerl)->Perl_utf16_to_utf8(p, d, bytelen, newlen);
-}
-
-#undef Perl_utf16_to_utf8_reversed
-U8*
-Perl_utf16_to_utf8_reversed(pTHXo_ U8* p, U8 *d, I32 bytelen, I32 *newlen)
-{
- return ((CPerlObj*)pPerl)->Perl_utf16_to_utf8_reversed(p, d, bytelen, newlen);
-}
-
-#undef Perl_utf8_length
-STRLEN
-Perl_utf8_length(pTHXo_ U8* s, U8 *e)
-{
- return ((CPerlObj*)pPerl)->Perl_utf8_length(s, e);
-}
-
-#undef Perl_utf8_distance
-IV
-Perl_utf8_distance(pTHXo_ U8 *a, U8 *b)
-{
- return ((CPerlObj*)pPerl)->Perl_utf8_distance(a, b);
-}
-
-#undef Perl_utf8_hop
-U8*
-Perl_utf8_hop(pTHXo_ U8 *s, I32 off)
-{
- return ((CPerlObj*)pPerl)->Perl_utf8_hop(s, off);
-}
-
-#undef Perl_utf8_to_bytes
-U8*
-Perl_utf8_to_bytes(pTHXo_ U8 *s, STRLEN *len)
-{
- return ((CPerlObj*)pPerl)->Perl_utf8_to_bytes(s, len);
-}
-
-#undef Perl_bytes_from_utf8
-U8*
-Perl_bytes_from_utf8(pTHXo_ U8 *s, STRLEN *len, bool *is_utf8)
-{
- return ((CPerlObj*)pPerl)->Perl_bytes_from_utf8(s, len, is_utf8);
-}
-
-#undef Perl_bytes_to_utf8
-U8*
-Perl_bytes_to_utf8(pTHXo_ U8 *s, STRLEN *len)
-{
- return ((CPerlObj*)pPerl)->Perl_bytes_to_utf8(s, len);
-}
-
-#undef Perl_utf8_to_uv_simple
-UV
-Perl_utf8_to_uv_simple(pTHXo_ U8 *s, STRLEN* retlen)
-{
- return ((CPerlObj*)pPerl)->Perl_utf8_to_uv_simple(s, retlen);
-}
-
-#undef Perl_utf8_to_uv
-UV
-Perl_utf8_to_uv(pTHXo_ U8 *s, STRLEN curlen, STRLEN* retlen, U32 flags)
-{
- return ((CPerlObj*)pPerl)->Perl_utf8_to_uv(s, curlen, retlen, flags);
-}
-
-#undef Perl_uv_to_utf8
-U8*
-Perl_uv_to_utf8(pTHXo_ U8 *d, UV uv)
-{
- return ((CPerlObj*)pPerl)->Perl_uv_to_utf8(d, uv);
-}
-
-#undef Perl_warn
-void
-Perl_warn(pTHXo_ const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_vwarn(pat, &args);
- va_end(args);
-}
-
-#undef Perl_vwarn
-void
-Perl_vwarn(pTHXo_ const char* pat, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_vwarn(pat, args);
-}
-
-#undef Perl_warner
-void
-Perl_warner(pTHXo_ U32 err, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_vwarner(err, pat, &args);
- va_end(args);
-}
-
-#undef Perl_vwarner
-void
-Perl_vwarner(pTHXo_ U32 err, const char* pat, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_vwarner(err, pat, args);
-}
-
-#undef Perl_whichsig
-I32
-Perl_whichsig(pTHXo_ char* sig)
-{
- return ((CPerlObj*)pPerl)->Perl_whichsig(sig);
-}
-#ifdef USE_PURE_BISON
-#endif
-#if defined(MYMALLOC)
-
-#undef Perl_dump_mstats
-void
-Perl_dump_mstats(pTHXo_ char* s)
-{
- ((CPerlObj*)pPerl)->Perl_dump_mstats(s);
-}
-
-#undef Perl_get_mstats
-int
-Perl_get_mstats(pTHXo_ perl_mstats_t *buf, int buflen, int level)
-{
- return ((CPerlObj*)pPerl)->Perl_get_mstats(buf, buflen, level);
-}
-#endif
-
-#undef Perl_safesysmalloc
-Malloc_t
-Perl_safesysmalloc(MEM_SIZE nbytes)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_safesysmalloc(nbytes);
-}
-
-#undef Perl_safesyscalloc
-Malloc_t
-Perl_safesyscalloc(MEM_SIZE elements, MEM_SIZE size)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_safesyscalloc(elements, size);
-}
-
-#undef Perl_safesysrealloc
-Malloc_t
-Perl_safesysrealloc(Malloc_t where, MEM_SIZE nbytes)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_safesysrealloc(where, nbytes);
-}
-
-#undef Perl_safesysfree
-Free_t
-Perl_safesysfree(Malloc_t where)
-{
- dTHXo;
- ((CPerlObj*)pPerl)->Perl_safesysfree(where);
-}
-#if defined(LEAKTEST)
-
-#undef Perl_safexmalloc
-Malloc_t
-Perl_safexmalloc(I32 x, MEM_SIZE size)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_safexmalloc(x, size);
-}
-
-#undef Perl_safexcalloc
-Malloc_t
-Perl_safexcalloc(I32 x, MEM_SIZE elements, MEM_SIZE size)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_safexcalloc(x, elements, size);
-}
-
-#undef Perl_safexrealloc
-Malloc_t
-Perl_safexrealloc(Malloc_t where, MEM_SIZE size)
-{
- dTHXo;
- return ((CPerlObj*)pPerl)->Perl_safexrealloc(where, size);
-}
-
-#undef Perl_safexfree
-void
-Perl_safexfree(Malloc_t where)
-{
- dTHXo;
- ((CPerlObj*)pPerl)->Perl_safexfree(where);
-}
-#endif
-#if defined(PERL_GLOBAL_STRUCT)
-
-#undef Perl_GetVars
-struct perl_vars *
-Perl_GetVars(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_GetVars();
-}
-#endif
-
-#undef Perl_runops_standard
-int
-Perl_runops_standard(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_runops_standard();
-}
-
-#undef Perl_runops_debug
-int
-Perl_runops_debug(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_runops_debug();
-}
-#if defined(USE_THREADS)
-
-#undef Perl_sv_lock
-SV*
-Perl_sv_lock(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_lock(sv);
-}
-#endif
-
-#undef Perl_sv_catpvf_mg
-void
-Perl_sv_catpvf_mg(pTHXo_ SV *sv, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_sv_vcatpvf_mg(sv, pat, &args);
- va_end(args);
-}
-
-#undef Perl_sv_vcatpvf_mg
-void
-Perl_sv_vcatpvf_mg(pTHXo_ SV* sv, const char* pat, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_sv_vcatpvf_mg(sv, pat, args);
-}
-
-#undef Perl_sv_catpv_mg
-void
-Perl_sv_catpv_mg(pTHXo_ SV *sv, const char *ptr)
-{
- ((CPerlObj*)pPerl)->Perl_sv_catpv_mg(sv, ptr);
-}
-
-#undef Perl_sv_catpvn_mg
-void
-Perl_sv_catpvn_mg(pTHXo_ SV *sv, const char *ptr, STRLEN len)
-{
- ((CPerlObj*)pPerl)->Perl_sv_catpvn_mg(sv, ptr, len);
-}
-
-#undef Perl_sv_catsv_mg
-void
-Perl_sv_catsv_mg(pTHXo_ SV *dstr, SV *sstr)
-{
- ((CPerlObj*)pPerl)->Perl_sv_catsv_mg(dstr, sstr);
-}
-
-#undef Perl_sv_setpvf_mg
-void
-Perl_sv_setpvf_mg(pTHXo_ SV *sv, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_sv_vsetpvf_mg(sv, pat, &args);
- va_end(args);
-}
-
-#undef Perl_sv_vsetpvf_mg
-void
-Perl_sv_vsetpvf_mg(pTHXo_ SV* sv, const char* pat, va_list* args)
-{
- ((CPerlObj*)pPerl)->Perl_sv_vsetpvf_mg(sv, pat, args);
-}
-
-#undef Perl_sv_setiv_mg
-void
-Perl_sv_setiv_mg(pTHXo_ SV *sv, IV i)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setiv_mg(sv, i);
-}
-
-#undef Perl_sv_setpviv_mg
-void
-Perl_sv_setpviv_mg(pTHXo_ SV *sv, IV iv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setpviv_mg(sv, iv);
-}
-
-#undef Perl_sv_setuv_mg
-void
-Perl_sv_setuv_mg(pTHXo_ SV *sv, UV u)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setuv_mg(sv, u);
-}
-
-#undef Perl_sv_setnv_mg
-void
-Perl_sv_setnv_mg(pTHXo_ SV *sv, NV num)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setnv_mg(sv, num);
-}
-
-#undef Perl_sv_setpv_mg
-void
-Perl_sv_setpv_mg(pTHXo_ SV *sv, const char *ptr)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setpv_mg(sv, ptr);
-}
-
-#undef Perl_sv_setpvn_mg
-void
-Perl_sv_setpvn_mg(pTHXo_ SV *sv, const char *ptr, STRLEN len)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setpvn_mg(sv, ptr, len);
-}
-
-#undef Perl_sv_setsv_mg
-void
-Perl_sv_setsv_mg(pTHXo_ SV *dstr, SV *sstr)
-{
- ((CPerlObj*)pPerl)->Perl_sv_setsv_mg(dstr, sstr);
-}
-
-#undef Perl_sv_usepvn_mg
-void
-Perl_sv_usepvn_mg(pTHXo_ SV *sv, char *ptr, STRLEN len)
-{
- ((CPerlObj*)pPerl)->Perl_sv_usepvn_mg(sv, ptr, len);
-}
-
-#undef Perl_get_vtbl
-MGVTBL*
-Perl_get_vtbl(pTHXo_ int vtbl_id)
-{
- return ((CPerlObj*)pPerl)->Perl_get_vtbl(vtbl_id);
-}
-
-#undef Perl_dump_indent
-void
-Perl_dump_indent(pTHXo_ I32 level, PerlIO *file, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- ((CPerlObj*)pPerl)->Perl_dump_vindent(level, file, pat, &args);
- va_end(args);
-}
-
-#undef Perl_dump_vindent
-void
-Perl_dump_vindent(pTHXo_ I32 level, PerlIO *file, const char* pat, va_list *args)
-{
- ((CPerlObj*)pPerl)->Perl_dump_vindent(level, file, pat, args);
-}
-
-#undef Perl_do_gv_dump
-void
-Perl_do_gv_dump(pTHXo_ I32 level, PerlIO *file, char *name, GV *sv)
-{
- ((CPerlObj*)pPerl)->Perl_do_gv_dump(level, file, name, sv);
-}
-
-#undef Perl_do_gvgv_dump
-void
-Perl_do_gvgv_dump(pTHXo_ I32 level, PerlIO *file, char *name, GV *sv)
-{
- ((CPerlObj*)pPerl)->Perl_do_gvgv_dump(level, file, name, sv);
-}
-
-#undef Perl_do_hv_dump
-void
-Perl_do_hv_dump(pTHXo_ I32 level, PerlIO *file, char *name, HV *sv)
-{
- ((CPerlObj*)pPerl)->Perl_do_hv_dump(level, file, name, sv);
-}
-
-#undef Perl_do_magic_dump
-void
-Perl_do_magic_dump(pTHXo_ I32 level, PerlIO *file, MAGIC *mg, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
-{
- ((CPerlObj*)pPerl)->Perl_do_magic_dump(level, file, mg, nest, maxnest, dumpops, pvlim);
-}
-
-#undef Perl_do_op_dump
-void
-Perl_do_op_dump(pTHXo_ I32 level, PerlIO *file, OP *o)
-{
- ((CPerlObj*)pPerl)->Perl_do_op_dump(level, file, o);
-}
-
-#undef Perl_do_pmop_dump
-void
-Perl_do_pmop_dump(pTHXo_ I32 level, PerlIO *file, PMOP *pm)
-{
- ((CPerlObj*)pPerl)->Perl_do_pmop_dump(level, file, pm);
-}
-
-#undef Perl_do_sv_dump
-void
-Perl_do_sv_dump(pTHXo_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim)
-{
- ((CPerlObj*)pPerl)->Perl_do_sv_dump(level, file, sv, nest, maxnest, dumpops, pvlim);
-}
-
-#undef Perl_magic_dump
-void
-Perl_magic_dump(pTHXo_ MAGIC *mg)
-{
- ((CPerlObj*)pPerl)->Perl_magic_dump(mg);
-}
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-
-#undef Perl_default_protect
-void*
-Perl_default_protect(pTHXo_ volatile JMPENV *je, int *excpt, protect_body_t body, ...)
-{
- void* retval;
- va_list args;
- va_start(args, body);
- retval = ((CPerlObj*)pPerl)->Perl_vdefault_protect(je, excpt, body, &args);
- va_end(args);
- return retval;
-
-}
-
-#undef Perl_vdefault_protect
-void*
-Perl_vdefault_protect(pTHXo_ volatile JMPENV *je, int *excpt, protect_body_t body, va_list *args)
-{
- return ((CPerlObj*)pPerl)->Perl_vdefault_protect(je, excpt, body, args);
-}
-#endif
-
-#undef Perl_reginitcolors
-void
-Perl_reginitcolors(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_reginitcolors();
-}
-
-#undef Perl_sv_2pv_nolen
-char*
-Perl_sv_2pv_nolen(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2pv_nolen(sv);
-}
-
-#undef Perl_sv_2pvutf8_nolen
-char*
-Perl_sv_2pvutf8_nolen(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2pvutf8_nolen(sv);
-}
-
-#undef Perl_sv_2pvbyte_nolen
-char*
-Perl_sv_2pvbyte_nolen(pTHXo_ SV* sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_2pvbyte_nolen(sv);
-}
-
-#undef Perl_sv_pv
-char*
-Perl_sv_pv(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pv(sv);
-}
-
-#undef Perl_sv_pvutf8
-char*
-Perl_sv_pvutf8(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pvutf8(sv);
-}
-
-#undef Perl_sv_pvbyte
-char*
-Perl_sv_pvbyte(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_pvbyte(sv);
-}
-
-#undef Perl_sv_utf8_upgrade
-void
-Perl_sv_utf8_upgrade(pTHXo_ SV *sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_utf8_upgrade(sv);
-}
-
-#undef Perl_sv_utf8_downgrade
-bool
-Perl_sv_utf8_downgrade(pTHXo_ SV *sv, bool fail_ok)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_utf8_downgrade(sv, fail_ok);
-}
-
-#undef Perl_sv_utf8_encode
-void
-Perl_sv_utf8_encode(pTHXo_ SV *sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_utf8_encode(sv);
-}
-
-#undef Perl_sv_utf8_decode
-bool
-Perl_sv_utf8_decode(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_utf8_decode(sv);
-}
-
-#undef Perl_sv_force_normal
-void
-Perl_sv_force_normal(pTHXo_ SV *sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_force_normal(sv);
-}
-
-#undef Perl_sv_add_backref
-void
-Perl_sv_add_backref(pTHXo_ SV *tsv, SV *sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_add_backref(tsv, sv);
-}
-
-#undef Perl_sv_del_backref
-void
-Perl_sv_del_backref(pTHXo_ SV *sv)
-{
- ((CPerlObj*)pPerl)->Perl_sv_del_backref(sv);
-}
-
-#undef Perl_tmps_grow
-void
-Perl_tmps_grow(pTHXo_ I32 n)
-{
- ((CPerlObj*)pPerl)->Perl_tmps_grow(n);
-}
-
-#undef Perl_sv_rvweaken
-SV*
-Perl_sv_rvweaken(pTHXo_ SV *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_rvweaken(sv);
-}
-
-#undef Perl_newANONATTRSUB
-OP*
-Perl_newANONATTRSUB(pTHXo_ I32 floor, OP *proto, OP *attrs, OP *block)
-{
- return ((CPerlObj*)pPerl)->Perl_newANONATTRSUB(floor, proto, attrs, block);
-}
-
-#undef Perl_newATTRSUB
-CV*
-Perl_newATTRSUB(pTHXo_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
-{
- return ((CPerlObj*)pPerl)->Perl_newATTRSUB(floor, o, proto, attrs, block);
-}
-
-#undef Perl_newMYSUB
-void
-Perl_newMYSUB(pTHXo_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
-{
- ((CPerlObj*)pPerl)->Perl_newMYSUB(floor, o, proto, attrs, block);
-}
-#if defined(USE_ITHREADS)
-
-#undef Perl_cx_dup
-PERL_CONTEXT*
-Perl_cx_dup(pTHXo_ PERL_CONTEXT* cx, I32 ix, I32 max)
-{
- return ((CPerlObj*)pPerl)->Perl_cx_dup(cx, ix, max);
-}
-
-#undef Perl_si_dup
-PERL_SI*
-Perl_si_dup(pTHXo_ PERL_SI* si)
-{
- return ((CPerlObj*)pPerl)->Perl_si_dup(si);
-}
-
-#undef Perl_ss_dup
-ANY*
-Perl_ss_dup(pTHXo_ PerlInterpreter* proto_perl)
-{
- return ((CPerlObj*)pPerl)->Perl_ss_dup(proto_perl);
-}
-
-#undef Perl_any_dup
-void*
-Perl_any_dup(pTHXo_ void* v, PerlInterpreter* proto_perl)
-{
- return ((CPerlObj*)pPerl)->Perl_any_dup(v, proto_perl);
-}
-
-#undef Perl_he_dup
-HE*
-Perl_he_dup(pTHXo_ HE* e, bool shared)
-{
- return ((CPerlObj*)pPerl)->Perl_he_dup(e, shared);
-}
-
-#undef Perl_re_dup
-REGEXP*
-Perl_re_dup(pTHXo_ REGEXP* r)
-{
- return ((CPerlObj*)pPerl)->Perl_re_dup(r);
-}
-
-#undef Perl_fp_dup
-PerlIO*
-Perl_fp_dup(pTHXo_ PerlIO* fp, char type)
-{
- return ((CPerlObj*)pPerl)->Perl_fp_dup(fp, type);
-}
-
-#undef Perl_dirp_dup
-DIR*
-Perl_dirp_dup(pTHXo_ DIR* dp)
-{
- return ((CPerlObj*)pPerl)->Perl_dirp_dup(dp);
-}
-
-#undef Perl_gp_dup
-GP*
-Perl_gp_dup(pTHXo_ GP* gp)
-{
- return ((CPerlObj*)pPerl)->Perl_gp_dup(gp);
-}
-
-#undef Perl_mg_dup
-MAGIC*
-Perl_mg_dup(pTHXo_ MAGIC* mg)
-{
- return ((CPerlObj*)pPerl)->Perl_mg_dup(mg);
-}
-
-#undef Perl_sv_dup
-SV*
-Perl_sv_dup(pTHXo_ SV* sstr)
-{
- return ((CPerlObj*)pPerl)->Perl_sv_dup(sstr);
-}
-#if defined(HAVE_INTERP_INTERN)
-
-#undef Perl_sys_intern_dup
-void
-Perl_sys_intern_dup(pTHXo_ struct interp_intern* src, struct interp_intern* dst)
-{
- ((CPerlObj*)pPerl)->Perl_sys_intern_dup(src, dst);
-}
-#endif
-
-#undef Perl_ptr_table_new
-PTR_TBL_t*
-Perl_ptr_table_new(pTHXo)
-{
- return ((CPerlObj*)pPerl)->Perl_ptr_table_new();
-}
-
-#undef Perl_ptr_table_fetch
-void*
-Perl_ptr_table_fetch(pTHXo_ PTR_TBL_t *tbl, void *sv)
-{
- return ((CPerlObj*)pPerl)->Perl_ptr_table_fetch(tbl, sv);
-}
-
-#undef Perl_ptr_table_store
-void
-Perl_ptr_table_store(pTHXo_ PTR_TBL_t *tbl, void *oldsv, void *newsv)
-{
- ((CPerlObj*)pPerl)->Perl_ptr_table_store(tbl, oldsv, newsv);
-}
-
-#undef Perl_ptr_table_split
-void
-Perl_ptr_table_split(pTHXo_ PTR_TBL_t *tbl)
-{
- ((CPerlObj*)pPerl)->Perl_ptr_table_split(tbl);
-}
-
-#undef Perl_ptr_table_clear
-void
-Perl_ptr_table_clear(pTHXo_ PTR_TBL_t *tbl)
-{
- ((CPerlObj*)pPerl)->Perl_ptr_table_clear(tbl);
-}
-
-#undef Perl_ptr_table_free
-void
-Perl_ptr_table_free(pTHXo_ PTR_TBL_t *tbl)
-{
- ((CPerlObj*)pPerl)->Perl_ptr_table_free(tbl);
-}
-#endif
-#if defined(HAVE_INTERP_INTERN)
-
-#undef Perl_sys_intern_clear
-void
-Perl_sys_intern_clear(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_sys_intern_clear();
-}
-
-#undef Perl_sys_intern_init
-void
-Perl_sys_intern_init(pTHXo)
-{
- ((CPerlObj*)pPerl)->Perl_sys_intern_init();
-}
-#endif
-#if defined(PERL_OBJECT)
-#else
-#endif
-#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-# if defined(PL_OP_SLAB_ALLOC)
-# endif
-#endif
-#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
-# if defined(IAMSUID)
-# endif
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#endif
-# if defined(USE_THREADS)
-# endif
-#endif
-#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-#endif
-#endif
-#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-# endif
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-# if defined(DEBUGGING)
-# endif
-#endif
-#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
-#if 0
-#endif
-# if defined(CRIPPLED_CC)
-# endif
-# if defined(PERL_CR_FILTER)
-# endif
-#endif
-#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-#endif
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-# if defined(LEAKTEST)
-# endif
-#endif
-#if defined(PERL_OBJECT)
-#endif
-
-#undef Perl_fprintf_nocontext
-int
-Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
-{
- dTHXo;
- va_list(arglist);
- va_start(arglist, format);
- return (*PL_StdIO->pVprintf)(PL_StdIO, stream, format, arglist);
-}
-
-#undef Perl_printf_nocontext
-int
-Perl_printf_nocontext(const char *format, ...)
-{
- dTHXo;
- va_list(arglist);
- va_start(arglist, format);
- return (*PL_StdIO->pVprintf)(PL_StdIO, PerlIO_stdout(), format, arglist);
-}
-
-END_EXTERN_C
-
-#endif /* PERL_OBJECT */
-#endif /* PERL_OBJECT || MULTIPLICITY */
diff --git a/contrib/perl5/perlapi.h b/contrib/perl5/perlapi.h
deleted file mode 100644
index 1f2dc8b..0000000
--- a/contrib/perl5/perlapi.h
+++ /dev/null
@@ -1,926 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by embed.pl from data in embed.pl, pp.sym, intrpvar.h,
- perlvars.h and thrdvar.h. Any changes made here will be lost!
-*/
-
-/* declare accessor functions for Perl variables */
-#ifndef __perlapi_h__
-#define __perlapi_h__
-
-#if defined(PERL_OBJECT) || defined (MULTIPLICITY)
-
-#if defined(PERL_OBJECT)
-# undef aTHXo
-# define aTHXo pPerl
-# undef aTHXo_
-# define aTHXo_ aTHXo,
-#endif /* PERL_OBJECT */
-
-START_EXTERN_C
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHXo);
-#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \
- EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHXo);
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v, const t)
-
-#include "thrdvar.h"
-#include "intrpvar.h"
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-
-END_EXTERN_C
-
-#if defined(PERL_CORE)
-
-/* accessor functions for Perl variables (provide binary compatibility) */
-
-/* these need to be mentioned here, or most linkers won't put them in
- the perl executable */
-
-#ifndef PERL_NO_FORCE_LINK
-
-START_EXTERN_C
-
-#ifndef DOINIT
-EXT void *PL_force_link_funcs[];
-#else
-EXT void *PL_force_link_funcs[] = {
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-#define PERLVAR(v,t) (void*)Perl_##v##_ptr,
-#define PERLVARA(v,n,t) PERLVAR(v,t)
-#define PERLVARI(v,t,i) PERLVAR(v,t)
-#define PERLVARIC(v,t,i) PERLVAR(v,t)
-
-#include "thrdvar.h"
-#include "intrpvar.h"
-#include "perlvars.h"
-
-#undef PERLVAR
-#undef PERLVARA
-#undef PERLVARI
-#undef PERLVARIC
-};
-#endif /* DOINIT */
-
-START_EXTERN_C
-
-#endif /* PERL_NO_FORCE_LINK */
-
-#else /* !PERL_CORE */
-
-#undef PL_Argv
-#define PL_Argv (*Perl_IArgv_ptr(aTHXo))
-#undef PL_Cmd
-#define PL_Cmd (*Perl_ICmd_ptr(aTHXo))
-#undef PL_DBcv
-#define PL_DBcv (*Perl_IDBcv_ptr(aTHXo))
-#undef PL_DBgv
-#define PL_DBgv (*Perl_IDBgv_ptr(aTHXo))
-#undef PL_DBline
-#define PL_DBline (*Perl_IDBline_ptr(aTHXo))
-#undef PL_DBsignal
-#define PL_DBsignal (*Perl_IDBsignal_ptr(aTHXo))
-#undef PL_DBsingle
-#define PL_DBsingle (*Perl_IDBsingle_ptr(aTHXo))
-#undef PL_DBsub
-#define PL_DBsub (*Perl_IDBsub_ptr(aTHXo))
-#undef PL_DBtrace
-#define PL_DBtrace (*Perl_IDBtrace_ptr(aTHXo))
-#undef PL_Dir
-#define PL_Dir (*Perl_IDir_ptr(aTHXo))
-#undef PL_Env
-#define PL_Env (*Perl_IEnv_ptr(aTHXo))
-#undef PL_LIO
-#define PL_LIO (*Perl_ILIO_ptr(aTHXo))
-#undef PL_Mem
-#define PL_Mem (*Perl_IMem_ptr(aTHXo))
-#undef PL_MemParse
-#define PL_MemParse (*Perl_IMemParse_ptr(aTHXo))
-#undef PL_MemShared
-#define PL_MemShared (*Perl_IMemShared_ptr(aTHXo))
-#undef PL_Proc
-#define PL_Proc (*Perl_IProc_ptr(aTHXo))
-#undef PL_Sock
-#define PL_Sock (*Perl_ISock_ptr(aTHXo))
-#undef PL_StdIO
-#define PL_StdIO (*Perl_IStdIO_ptr(aTHXo))
-#undef PL_amagic_generation
-#define PL_amagic_generation (*Perl_Iamagic_generation_ptr(aTHXo))
-#undef PL_an
-#define PL_an (*Perl_Ian_ptr(aTHXo))
-#undef PL_argvgv
-#define PL_argvgv (*Perl_Iargvgv_ptr(aTHXo))
-#undef PL_argvout_stack
-#define PL_argvout_stack (*Perl_Iargvout_stack_ptr(aTHXo))
-#undef PL_argvoutgv
-#define PL_argvoutgv (*Perl_Iargvoutgv_ptr(aTHXo))
-#undef PL_basetime
-#define PL_basetime (*Perl_Ibasetime_ptr(aTHXo))
-#undef PL_beginav
-#define PL_beginav (*Perl_Ibeginav_ptr(aTHXo))
-#undef PL_beginav_save
-#define PL_beginav_save (*Perl_Ibeginav_save_ptr(aTHXo))
-#undef PL_bitcount
-#define PL_bitcount (*Perl_Ibitcount_ptr(aTHXo))
-#undef PL_bufend
-#define PL_bufend (*Perl_Ibufend_ptr(aTHXo))
-#undef PL_bufptr
-#define PL_bufptr (*Perl_Ibufptr_ptr(aTHXo))
-#undef PL_checkav
-#define PL_checkav (*Perl_Icheckav_ptr(aTHXo))
-#undef PL_collation_ix
-#define PL_collation_ix (*Perl_Icollation_ix_ptr(aTHXo))
-#undef PL_collation_name
-#define PL_collation_name (*Perl_Icollation_name_ptr(aTHXo))
-#undef PL_collation_standard
-#define PL_collation_standard (*Perl_Icollation_standard_ptr(aTHXo))
-#undef PL_collxfrm_base
-#define PL_collxfrm_base (*Perl_Icollxfrm_base_ptr(aTHXo))
-#undef PL_collxfrm_mult
-#define PL_collxfrm_mult (*Perl_Icollxfrm_mult_ptr(aTHXo))
-#undef PL_compcv
-#define PL_compcv (*Perl_Icompcv_ptr(aTHXo))
-#undef PL_compiling
-#define PL_compiling (*Perl_Icompiling_ptr(aTHXo))
-#undef PL_comppad
-#define PL_comppad (*Perl_Icomppad_ptr(aTHXo))
-#undef PL_comppad_name
-#define PL_comppad_name (*Perl_Icomppad_name_ptr(aTHXo))
-#undef PL_comppad_name_fill
-#define PL_comppad_name_fill (*Perl_Icomppad_name_fill_ptr(aTHXo))
-#undef PL_comppad_name_floor
-#define PL_comppad_name_floor (*Perl_Icomppad_name_floor_ptr(aTHXo))
-#undef PL_cop_seqmax
-#define PL_cop_seqmax (*Perl_Icop_seqmax_ptr(aTHXo))
-#undef PL_copline
-#define PL_copline (*Perl_Icopline_ptr(aTHXo))
-#undef PL_cred_mutex
-#define PL_cred_mutex (*Perl_Icred_mutex_ptr(aTHXo))
-#undef PL_cryptseen
-#define PL_cryptseen (*Perl_Icryptseen_ptr(aTHXo))
-#undef PL_cshlen
-#define PL_cshlen (*Perl_Icshlen_ptr(aTHXo))
-#undef PL_cshname
-#define PL_cshname (*Perl_Icshname_ptr(aTHXo))
-#undef PL_curcopdb
-#define PL_curcopdb (*Perl_Icurcopdb_ptr(aTHXo))
-#undef PL_curstname
-#define PL_curstname (*Perl_Icurstname_ptr(aTHXo))
-#undef PL_curthr
-#define PL_curthr (*Perl_Icurthr_ptr(aTHXo))
-#undef PL_dbargs
-#define PL_dbargs (*Perl_Idbargs_ptr(aTHXo))
-#undef PL_debstash
-#define PL_debstash (*Perl_Idebstash_ptr(aTHXo))
-#undef PL_debug
-#define PL_debug (*Perl_Idebug_ptr(aTHXo))
-#undef PL_defgv
-#define PL_defgv (*Perl_Idefgv_ptr(aTHXo))
-#undef PL_diehook
-#define PL_diehook (*Perl_Idiehook_ptr(aTHXo))
-#undef PL_doextract
-#define PL_doextract (*Perl_Idoextract_ptr(aTHXo))
-#undef PL_doswitches
-#define PL_doswitches (*Perl_Idoswitches_ptr(aTHXo))
-#undef PL_dowarn
-#define PL_dowarn (*Perl_Idowarn_ptr(aTHXo))
-#undef PL_dummy1_bincompat
-#define PL_dummy1_bincompat (*Perl_Idummy1_bincompat_ptr(aTHXo))
-#undef PL_e_script
-#define PL_e_script (*Perl_Ie_script_ptr(aTHXo))
-#undef PL_egid
-#define PL_egid (*Perl_Iegid_ptr(aTHXo))
-#undef PL_endav
-#define PL_endav (*Perl_Iendav_ptr(aTHXo))
-#undef PL_envgv
-#define PL_envgv (*Perl_Ienvgv_ptr(aTHXo))
-#undef PL_errgv
-#define PL_errgv (*Perl_Ierrgv_ptr(aTHXo))
-#undef PL_error_count
-#define PL_error_count (*Perl_Ierror_count_ptr(aTHXo))
-#undef PL_euid
-#define PL_euid (*Perl_Ieuid_ptr(aTHXo))
-#undef PL_eval_cond
-#define PL_eval_cond (*Perl_Ieval_cond_ptr(aTHXo))
-#undef PL_eval_mutex
-#define PL_eval_mutex (*Perl_Ieval_mutex_ptr(aTHXo))
-#undef PL_eval_owner
-#define PL_eval_owner (*Perl_Ieval_owner_ptr(aTHXo))
-#undef PL_eval_root
-#define PL_eval_root (*Perl_Ieval_root_ptr(aTHXo))
-#undef PL_eval_start
-#define PL_eval_start (*Perl_Ieval_start_ptr(aTHXo))
-#undef PL_evalseq
-#define PL_evalseq (*Perl_Ievalseq_ptr(aTHXo))
-#undef PL_exit_flags
-#define PL_exit_flags (*Perl_Iexit_flags_ptr(aTHXo))
-#undef PL_exitlist
-#define PL_exitlist (*Perl_Iexitlist_ptr(aTHXo))
-#undef PL_exitlistlen
-#define PL_exitlistlen (*Perl_Iexitlistlen_ptr(aTHXo))
-#undef PL_expect
-#define PL_expect (*Perl_Iexpect_ptr(aTHXo))
-#undef PL_fdpid
-#define PL_fdpid (*Perl_Ifdpid_ptr(aTHXo))
-#undef PL_fdpid_mutex
-#define PL_fdpid_mutex (*Perl_Ifdpid_mutex_ptr(aTHXo))
-#undef PL_filemode
-#define PL_filemode (*Perl_Ifilemode_ptr(aTHXo))
-#undef PL_forkprocess
-#define PL_forkprocess (*Perl_Iforkprocess_ptr(aTHXo))
-#undef PL_formfeed
-#define PL_formfeed (*Perl_Iformfeed_ptr(aTHXo))
-#undef PL_generation
-#define PL_generation (*Perl_Igeneration_ptr(aTHXo))
-#undef PL_gensym
-#define PL_gensym (*Perl_Igensym_ptr(aTHXo))
-#undef PL_gid
-#define PL_gid (*Perl_Igid_ptr(aTHXo))
-#undef PL_glob_index
-#define PL_glob_index (*Perl_Iglob_index_ptr(aTHXo))
-#undef PL_globalstash
-#define PL_globalstash (*Perl_Iglobalstash_ptr(aTHXo))
-#undef PL_he_arenaroot
-#define PL_he_arenaroot (*Perl_Ihe_arenaroot_ptr(aTHXo))
-#undef PL_he_root
-#define PL_he_root (*Perl_Ihe_root_ptr(aTHXo))
-#undef PL_hintgv
-#define PL_hintgv (*Perl_Ihintgv_ptr(aTHXo))
-#undef PL_hints
-#define PL_hints (*Perl_Ihints_ptr(aTHXo))
-#undef PL_in_clean_all
-#define PL_in_clean_all (*Perl_Iin_clean_all_ptr(aTHXo))
-#undef PL_in_clean_objs
-#define PL_in_clean_objs (*Perl_Iin_clean_objs_ptr(aTHXo))
-#undef PL_in_my
-#define PL_in_my (*Perl_Iin_my_ptr(aTHXo))
-#undef PL_in_my_stash
-#define PL_in_my_stash (*Perl_Iin_my_stash_ptr(aTHXo))
-#undef PL_incgv
-#define PL_incgv (*Perl_Iincgv_ptr(aTHXo))
-#undef PL_initav
-#define PL_initav (*Perl_Iinitav_ptr(aTHXo))
-#undef PL_inplace
-#define PL_inplace (*Perl_Iinplace_ptr(aTHXo))
-#undef PL_last_lop
-#define PL_last_lop (*Perl_Ilast_lop_ptr(aTHXo))
-#undef PL_last_lop_op
-#define PL_last_lop_op (*Perl_Ilast_lop_op_ptr(aTHXo))
-#undef PL_last_swash_hv
-#define PL_last_swash_hv (*Perl_Ilast_swash_hv_ptr(aTHXo))
-#undef PL_last_swash_key
-#define PL_last_swash_key (*Perl_Ilast_swash_key_ptr(aTHXo))
-#undef PL_last_swash_klen
-#define PL_last_swash_klen (*Perl_Ilast_swash_klen_ptr(aTHXo))
-#undef PL_last_swash_slen
-#define PL_last_swash_slen (*Perl_Ilast_swash_slen_ptr(aTHXo))
-#undef PL_last_swash_tmps
-#define PL_last_swash_tmps (*Perl_Ilast_swash_tmps_ptr(aTHXo))
-#undef PL_last_uni
-#define PL_last_uni (*Perl_Ilast_uni_ptr(aTHXo))
-#undef PL_lastfd
-#define PL_lastfd (*Perl_Ilastfd_ptr(aTHXo))
-#undef PL_laststatval
-#define PL_laststatval (*Perl_Ilaststatval_ptr(aTHXo))
-#undef PL_laststype
-#define PL_laststype (*Perl_Ilaststype_ptr(aTHXo))
-#undef PL_lex_brackets
-#define PL_lex_brackets (*Perl_Ilex_brackets_ptr(aTHXo))
-#undef PL_lex_brackstack
-#define PL_lex_brackstack (*Perl_Ilex_brackstack_ptr(aTHXo))
-#undef PL_lex_casemods
-#define PL_lex_casemods (*Perl_Ilex_casemods_ptr(aTHXo))
-#undef PL_lex_casestack
-#define PL_lex_casestack (*Perl_Ilex_casestack_ptr(aTHXo))
-#undef PL_lex_defer
-#define PL_lex_defer (*Perl_Ilex_defer_ptr(aTHXo))
-#undef PL_lex_dojoin
-#define PL_lex_dojoin (*Perl_Ilex_dojoin_ptr(aTHXo))
-#undef PL_lex_expect
-#define PL_lex_expect (*Perl_Ilex_expect_ptr(aTHXo))
-#undef PL_lex_formbrack
-#define PL_lex_formbrack (*Perl_Ilex_formbrack_ptr(aTHXo))
-#undef PL_lex_inpat
-#define PL_lex_inpat (*Perl_Ilex_inpat_ptr(aTHXo))
-#undef PL_lex_inwhat
-#define PL_lex_inwhat (*Perl_Ilex_inwhat_ptr(aTHXo))
-#undef PL_lex_op
-#define PL_lex_op (*Perl_Ilex_op_ptr(aTHXo))
-#undef PL_lex_repl
-#define PL_lex_repl (*Perl_Ilex_repl_ptr(aTHXo))
-#undef PL_lex_starts
-#define PL_lex_starts (*Perl_Ilex_starts_ptr(aTHXo))
-#undef PL_lex_state
-#define PL_lex_state (*Perl_Ilex_state_ptr(aTHXo))
-#undef PL_lex_stuff
-#define PL_lex_stuff (*Perl_Ilex_stuff_ptr(aTHXo))
-#undef PL_lineary
-#define PL_lineary (*Perl_Ilineary_ptr(aTHXo))
-#undef PL_linestart
-#define PL_linestart (*Perl_Ilinestart_ptr(aTHXo))
-#undef PL_linestr
-#define PL_linestr (*Perl_Ilinestr_ptr(aTHXo))
-#undef PL_localpatches
-#define PL_localpatches (*Perl_Ilocalpatches_ptr(aTHXo))
-#undef PL_main_cv
-#define PL_main_cv (*Perl_Imain_cv_ptr(aTHXo))
-#undef PL_main_root
-#define PL_main_root (*Perl_Imain_root_ptr(aTHXo))
-#undef PL_main_start
-#define PL_main_start (*Perl_Imain_start_ptr(aTHXo))
-#undef PL_max_intro_pending
-#define PL_max_intro_pending (*Perl_Imax_intro_pending_ptr(aTHXo))
-#undef PL_maxo
-#define PL_maxo (*Perl_Imaxo_ptr(aTHXo))
-#undef PL_maxsysfd
-#define PL_maxsysfd (*Perl_Imaxsysfd_ptr(aTHXo))
-#undef PL_mess_sv
-#define PL_mess_sv (*Perl_Imess_sv_ptr(aTHXo))
-#undef PL_min_intro_pending
-#define PL_min_intro_pending (*Perl_Imin_intro_pending_ptr(aTHXo))
-#undef PL_minus_F
-#define PL_minus_F (*Perl_Iminus_F_ptr(aTHXo))
-#undef PL_minus_a
-#define PL_minus_a (*Perl_Iminus_a_ptr(aTHXo))
-#undef PL_minus_c
-#define PL_minus_c (*Perl_Iminus_c_ptr(aTHXo))
-#undef PL_minus_l
-#define PL_minus_l (*Perl_Iminus_l_ptr(aTHXo))
-#undef PL_minus_n
-#define PL_minus_n (*Perl_Iminus_n_ptr(aTHXo))
-#undef PL_minus_p
-#define PL_minus_p (*Perl_Iminus_p_ptr(aTHXo))
-#undef PL_modglobal
-#define PL_modglobal (*Perl_Imodglobal_ptr(aTHXo))
-#undef PL_multi_close
-#define PL_multi_close (*Perl_Imulti_close_ptr(aTHXo))
-#undef PL_multi_end
-#define PL_multi_end (*Perl_Imulti_end_ptr(aTHXo))
-#undef PL_multi_open
-#define PL_multi_open (*Perl_Imulti_open_ptr(aTHXo))
-#undef PL_multi_start
-#define PL_multi_start (*Perl_Imulti_start_ptr(aTHXo))
-#undef PL_multiline
-#define PL_multiline (*Perl_Imultiline_ptr(aTHXo))
-#undef PL_nexttoke
-#define PL_nexttoke (*Perl_Inexttoke_ptr(aTHXo))
-#undef PL_nexttype
-#define PL_nexttype (*Perl_Inexttype_ptr(aTHXo))
-#undef PL_nextval
-#define PL_nextval (*Perl_Inextval_ptr(aTHXo))
-#undef PL_nice_chunk
-#define PL_nice_chunk (*Perl_Inice_chunk_ptr(aTHXo))
-#undef PL_nice_chunk_size
-#define PL_nice_chunk_size (*Perl_Inice_chunk_size_ptr(aTHXo))
-#undef PL_nomemok
-#define PL_nomemok (*Perl_Inomemok_ptr(aTHXo))
-#undef PL_nthreads
-#define PL_nthreads (*Perl_Inthreads_ptr(aTHXo))
-#undef PL_nthreads_cond
-#define PL_nthreads_cond (*Perl_Inthreads_cond_ptr(aTHXo))
-#undef PL_nullstash
-#define PL_nullstash (*Perl_Inullstash_ptr(aTHXo))
-#undef PL_numeric_local
-#define PL_numeric_local (*Perl_Inumeric_local_ptr(aTHXo))
-#undef PL_numeric_name
-#define PL_numeric_name (*Perl_Inumeric_name_ptr(aTHXo))
-#undef PL_numeric_radix_sv
-#define PL_numeric_radix_sv (*Perl_Inumeric_radix_sv_ptr(aTHXo))
-#undef PL_numeric_standard
-#define PL_numeric_standard (*Perl_Inumeric_standard_ptr(aTHXo))
-#undef PL_ofmt
-#define PL_ofmt (*Perl_Iofmt_ptr(aTHXo))
-#undef PL_oldbufptr
-#define PL_oldbufptr (*Perl_Ioldbufptr_ptr(aTHXo))
-#undef PL_oldname
-#define PL_oldname (*Perl_Ioldname_ptr(aTHXo))
-#undef PL_oldoldbufptr
-#define PL_oldoldbufptr (*Perl_Ioldoldbufptr_ptr(aTHXo))
-#undef PL_op_mask
-#define PL_op_mask (*Perl_Iop_mask_ptr(aTHXo))
-#undef PL_op_seqmax
-#define PL_op_seqmax (*Perl_Iop_seqmax_ptr(aTHXo))
-#undef PL_origalen
-#define PL_origalen (*Perl_Iorigalen_ptr(aTHXo))
-#undef PL_origargc
-#define PL_origargc (*Perl_Iorigargc_ptr(aTHXo))
-#undef PL_origargv
-#define PL_origargv (*Perl_Iorigargv_ptr(aTHXo))
-#undef PL_origenviron
-#define PL_origenviron (*Perl_Iorigenviron_ptr(aTHXo))
-#undef PL_origfilename
-#define PL_origfilename (*Perl_Iorigfilename_ptr(aTHXo))
-#undef PL_ors
-#define PL_ors (*Perl_Iors_ptr(aTHXo))
-#undef PL_orslen
-#define PL_orslen (*Perl_Iorslen_ptr(aTHXo))
-#undef PL_osname
-#define PL_osname (*Perl_Iosname_ptr(aTHXo))
-#undef PL_pad_reset_pending
-#define PL_pad_reset_pending (*Perl_Ipad_reset_pending_ptr(aTHXo))
-#undef PL_padix
-#define PL_padix (*Perl_Ipadix_ptr(aTHXo))
-#undef PL_padix_floor
-#define PL_padix_floor (*Perl_Ipadix_floor_ptr(aTHXo))
-#undef PL_patchlevel
-#define PL_patchlevel (*Perl_Ipatchlevel_ptr(aTHXo))
-#undef PL_pending_ident
-#define PL_pending_ident (*Perl_Ipending_ident_ptr(aTHXo))
-#undef PL_perl_destruct_level
-#define PL_perl_destruct_level (*Perl_Iperl_destruct_level_ptr(aTHXo))
-#undef PL_perldb
-#define PL_perldb (*Perl_Iperldb_ptr(aTHXo))
-#undef PL_pidstatus
-#define PL_pidstatus (*Perl_Ipidstatus_ptr(aTHXo))
-#undef PL_preambleav
-#define PL_preambleav (*Perl_Ipreambleav_ptr(aTHXo))
-#undef PL_preambled
-#define PL_preambled (*Perl_Ipreambled_ptr(aTHXo))
-#undef PL_preprocess
-#define PL_preprocess (*Perl_Ipreprocess_ptr(aTHXo))
-#undef PL_profiledata
-#define PL_profiledata (*Perl_Iprofiledata_ptr(aTHXo))
-#undef PL_psig_name
-#define PL_psig_name (*Perl_Ipsig_name_ptr(aTHXo))
-#undef PL_psig_ptr
-#define PL_psig_ptr (*Perl_Ipsig_ptr_ptr(aTHXo))
-#undef PL_ptr_table
-#define PL_ptr_table (*Perl_Iptr_table_ptr(aTHXo))
-#undef PL_replgv
-#define PL_replgv (*Perl_Ireplgv_ptr(aTHXo))
-#undef PL_rsfp
-#define PL_rsfp (*Perl_Irsfp_ptr(aTHXo))
-#undef PL_rsfp_filters
-#define PL_rsfp_filters (*Perl_Irsfp_filters_ptr(aTHXo))
-#undef PL_runops
-#define PL_runops (*Perl_Irunops_ptr(aTHXo))
-#undef PL_sawampersand
-#define PL_sawampersand (*Perl_Isawampersand_ptr(aTHXo))
-#undef PL_sh_path
-#define PL_sh_path (*Perl_Ish_path_ptr(aTHXo))
-#undef PL_sighandlerp
-#define PL_sighandlerp (*Perl_Isighandlerp_ptr(aTHXo))
-#undef PL_splitstr
-#define PL_splitstr (*Perl_Isplitstr_ptr(aTHXo))
-#undef PL_srand_called
-#define PL_srand_called (*Perl_Isrand_called_ptr(aTHXo))
-#undef PL_statusvalue
-#define PL_statusvalue (*Perl_Istatusvalue_ptr(aTHXo))
-#undef PL_statusvalue_vms
-#define PL_statusvalue_vms (*Perl_Istatusvalue_vms_ptr(aTHXo))
-#undef PL_stderrgv
-#define PL_stderrgv (*Perl_Istderrgv_ptr(aTHXo))
-#undef PL_stdingv
-#define PL_stdingv (*Perl_Istdingv_ptr(aTHXo))
-#undef PL_strtab
-#define PL_strtab (*Perl_Istrtab_ptr(aTHXo))
-#undef PL_strtab_mutex
-#define PL_strtab_mutex (*Perl_Istrtab_mutex_ptr(aTHXo))
-#undef PL_sub_generation
-#define PL_sub_generation (*Perl_Isub_generation_ptr(aTHXo))
-#undef PL_sublex_info
-#define PL_sublex_info (*Perl_Isublex_info_ptr(aTHXo))
-#undef PL_subline
-#define PL_subline (*Perl_Isubline_ptr(aTHXo))
-#undef PL_subname
-#define PL_subname (*Perl_Isubname_ptr(aTHXo))
-#undef PL_sv_arenaroot
-#define PL_sv_arenaroot (*Perl_Isv_arenaroot_ptr(aTHXo))
-#undef PL_sv_count
-#define PL_sv_count (*Perl_Isv_count_ptr(aTHXo))
-#undef PL_sv_lock_mutex
-#define PL_sv_lock_mutex (*Perl_Isv_lock_mutex_ptr(aTHXo))
-#undef PL_sv_mutex
-#define PL_sv_mutex (*Perl_Isv_mutex_ptr(aTHXo))
-#undef PL_sv_no
-#define PL_sv_no (*Perl_Isv_no_ptr(aTHXo))
-#undef PL_sv_objcount
-#define PL_sv_objcount (*Perl_Isv_objcount_ptr(aTHXo))
-#undef PL_sv_root
-#define PL_sv_root (*Perl_Isv_root_ptr(aTHXo))
-#undef PL_sv_undef
-#define PL_sv_undef (*Perl_Isv_undef_ptr(aTHXo))
-#undef PL_sv_yes
-#define PL_sv_yes (*Perl_Isv_yes_ptr(aTHXo))
-#undef PL_svref_mutex
-#define PL_svref_mutex (*Perl_Isvref_mutex_ptr(aTHXo))
-#undef PL_sys_intern
-#define PL_sys_intern (*Perl_Isys_intern_ptr(aTHXo))
-#undef PL_tainting
-#define PL_tainting (*Perl_Itainting_ptr(aTHXo))
-#undef PL_threadnum
-#define PL_threadnum (*Perl_Ithreadnum_ptr(aTHXo))
-#undef PL_threads_mutex
-#define PL_threads_mutex (*Perl_Ithreads_mutex_ptr(aTHXo))
-#undef PL_threadsv_names
-#define PL_threadsv_names (*Perl_Ithreadsv_names_ptr(aTHXo))
-#undef PL_thrsv
-#define PL_thrsv (*Perl_Ithrsv_ptr(aTHXo))
-#undef PL_tokenbuf
-#define PL_tokenbuf (*Perl_Itokenbuf_ptr(aTHXo))
-#undef PL_uid
-#define PL_uid (*Perl_Iuid_ptr(aTHXo))
-#undef PL_unsafe
-#define PL_unsafe (*Perl_Iunsafe_ptr(aTHXo))
-#undef PL_utf8_alnum
-#define PL_utf8_alnum (*Perl_Iutf8_alnum_ptr(aTHXo))
-#undef PL_utf8_alnumc
-#define PL_utf8_alnumc (*Perl_Iutf8_alnumc_ptr(aTHXo))
-#undef PL_utf8_alpha
-#define PL_utf8_alpha (*Perl_Iutf8_alpha_ptr(aTHXo))
-#undef PL_utf8_ascii
-#define PL_utf8_ascii (*Perl_Iutf8_ascii_ptr(aTHXo))
-#undef PL_utf8_cntrl
-#define PL_utf8_cntrl (*Perl_Iutf8_cntrl_ptr(aTHXo))
-#undef PL_utf8_digit
-#define PL_utf8_digit (*Perl_Iutf8_digit_ptr(aTHXo))
-#undef PL_utf8_graph
-#define PL_utf8_graph (*Perl_Iutf8_graph_ptr(aTHXo))
-#undef PL_utf8_lower
-#define PL_utf8_lower (*Perl_Iutf8_lower_ptr(aTHXo))
-#undef PL_utf8_mark
-#define PL_utf8_mark (*Perl_Iutf8_mark_ptr(aTHXo))
-#undef PL_utf8_print
-#define PL_utf8_print (*Perl_Iutf8_print_ptr(aTHXo))
-#undef PL_utf8_punct
-#define PL_utf8_punct (*Perl_Iutf8_punct_ptr(aTHXo))
-#undef PL_utf8_space
-#define PL_utf8_space (*Perl_Iutf8_space_ptr(aTHXo))
-#undef PL_utf8_tolower
-#define PL_utf8_tolower (*Perl_Iutf8_tolower_ptr(aTHXo))
-#undef PL_utf8_totitle
-#define PL_utf8_totitle (*Perl_Iutf8_totitle_ptr(aTHXo))
-#undef PL_utf8_toupper
-#define PL_utf8_toupper (*Perl_Iutf8_toupper_ptr(aTHXo))
-#undef PL_utf8_upper
-#define PL_utf8_upper (*Perl_Iutf8_upper_ptr(aTHXo))
-#undef PL_utf8_xdigit
-#define PL_utf8_xdigit (*Perl_Iutf8_xdigit_ptr(aTHXo))
-#undef PL_uudmap
-#define PL_uudmap (*Perl_Iuudmap_ptr(aTHXo))
-#undef PL_warnhook
-#define PL_warnhook (*Perl_Iwarnhook_ptr(aTHXo))
-#undef PL_widesyscalls
-#define PL_widesyscalls (*Perl_Iwidesyscalls_ptr(aTHXo))
-#undef PL_xiv_arenaroot
-#define PL_xiv_arenaroot (*Perl_Ixiv_arenaroot_ptr(aTHXo))
-#undef PL_xiv_root
-#define PL_xiv_root (*Perl_Ixiv_root_ptr(aTHXo))
-#undef PL_xnv_arenaroot
-#define PL_xnv_arenaroot (*Perl_Ixnv_arenaroot_ptr(aTHXo))
-#undef PL_xnv_root
-#define PL_xnv_root (*Perl_Ixnv_root_ptr(aTHXo))
-#undef PL_xpv_arenaroot
-#define PL_xpv_arenaroot (*Perl_Ixpv_arenaroot_ptr(aTHXo))
-#undef PL_xpv_root
-#define PL_xpv_root (*Perl_Ixpv_root_ptr(aTHXo))
-#undef PL_xpvav_arenaroot
-#define PL_xpvav_arenaroot (*Perl_Ixpvav_arenaroot_ptr(aTHXo))
-#undef PL_xpvav_root
-#define PL_xpvav_root (*Perl_Ixpvav_root_ptr(aTHXo))
-#undef PL_xpvbm_arenaroot
-#define PL_xpvbm_arenaroot (*Perl_Ixpvbm_arenaroot_ptr(aTHXo))
-#undef PL_xpvbm_root
-#define PL_xpvbm_root (*Perl_Ixpvbm_root_ptr(aTHXo))
-#undef PL_xpvcv_arenaroot
-#define PL_xpvcv_arenaroot (*Perl_Ixpvcv_arenaroot_ptr(aTHXo))
-#undef PL_xpvcv_root
-#define PL_xpvcv_root (*Perl_Ixpvcv_root_ptr(aTHXo))
-#undef PL_xpvhv_arenaroot
-#define PL_xpvhv_arenaroot (*Perl_Ixpvhv_arenaroot_ptr(aTHXo))
-#undef PL_xpvhv_root
-#define PL_xpvhv_root (*Perl_Ixpvhv_root_ptr(aTHXo))
-#undef PL_xpviv_arenaroot
-#define PL_xpviv_arenaroot (*Perl_Ixpviv_arenaroot_ptr(aTHXo))
-#undef PL_xpviv_root
-#define PL_xpviv_root (*Perl_Ixpviv_root_ptr(aTHXo))
-#undef PL_xpvlv_arenaroot
-#define PL_xpvlv_arenaroot (*Perl_Ixpvlv_arenaroot_ptr(aTHXo))
-#undef PL_xpvlv_root
-#define PL_xpvlv_root (*Perl_Ixpvlv_root_ptr(aTHXo))
-#undef PL_xpvmg_arenaroot
-#define PL_xpvmg_arenaroot (*Perl_Ixpvmg_arenaroot_ptr(aTHXo))
-#undef PL_xpvmg_root
-#define PL_xpvmg_root (*Perl_Ixpvmg_root_ptr(aTHXo))
-#undef PL_xpvnv_arenaroot
-#define PL_xpvnv_arenaroot (*Perl_Ixpvnv_arenaroot_ptr(aTHXo))
-#undef PL_xpvnv_root
-#define PL_xpvnv_root (*Perl_Ixpvnv_root_ptr(aTHXo))
-#undef PL_xrv_arenaroot
-#define PL_xrv_arenaroot (*Perl_Ixrv_arenaroot_ptr(aTHXo))
-#undef PL_xrv_root
-#define PL_xrv_root (*Perl_Ixrv_root_ptr(aTHXo))
-#undef PL_yychar
-#define PL_yychar (*Perl_Iyychar_ptr(aTHXo))
-#undef PL_yydebug
-#define PL_yydebug (*Perl_Iyydebug_ptr(aTHXo))
-#undef PL_yyerrflag
-#define PL_yyerrflag (*Perl_Iyyerrflag_ptr(aTHXo))
-#undef PL_yylval
-#define PL_yylval (*Perl_Iyylval_ptr(aTHXo))
-#undef PL_yynerrs
-#define PL_yynerrs (*Perl_Iyynerrs_ptr(aTHXo))
-#undef PL_yyval
-#define PL_yyval (*Perl_Iyyval_ptr(aTHXo))
-#undef PL_Sv
-#define PL_Sv (*Perl_TSv_ptr(aTHXo))
-#undef PL_Xpv
-#define PL_Xpv (*Perl_TXpv_ptr(aTHXo))
-#undef PL_av_fetch_sv
-#define PL_av_fetch_sv (*Perl_Tav_fetch_sv_ptr(aTHXo))
-#undef PL_bodytarget
-#define PL_bodytarget (*Perl_Tbodytarget_ptr(aTHXo))
-#undef PL_bostr
-#define PL_bostr (*Perl_Tbostr_ptr(aTHXo))
-#undef PL_chopset
-#define PL_chopset (*Perl_Tchopset_ptr(aTHXo))
-#undef PL_colors
-#define PL_colors (*Perl_Tcolors_ptr(aTHXo))
-#undef PL_colorset
-#define PL_colorset (*Perl_Tcolorset_ptr(aTHXo))
-#undef PL_curcop
-#define PL_curcop (*Perl_Tcurcop_ptr(aTHXo))
-#undef PL_curpad
-#define PL_curpad (*Perl_Tcurpad_ptr(aTHXo))
-#undef PL_curpm
-#define PL_curpm (*Perl_Tcurpm_ptr(aTHXo))
-#undef PL_curstack
-#define PL_curstack (*Perl_Tcurstack_ptr(aTHXo))
-#undef PL_curstackinfo
-#define PL_curstackinfo (*Perl_Tcurstackinfo_ptr(aTHXo))
-#undef PL_curstash
-#define PL_curstash (*Perl_Tcurstash_ptr(aTHXo))
-#undef PL_defoutgv
-#define PL_defoutgv (*Perl_Tdefoutgv_ptr(aTHXo))
-#undef PL_defstash
-#define PL_defstash (*Perl_Tdefstash_ptr(aTHXo))
-#undef PL_delaymagic
-#define PL_delaymagic (*Perl_Tdelaymagic_ptr(aTHXo))
-#undef PL_dirty
-#define PL_dirty (*Perl_Tdirty_ptr(aTHXo))
-#undef PL_dumpindent
-#define PL_dumpindent (*Perl_Tdumpindent_ptr(aTHXo))
-#undef PL_efloatbuf
-#define PL_efloatbuf (*Perl_Tefloatbuf_ptr(aTHXo))
-#undef PL_efloatsize
-#define PL_efloatsize (*Perl_Tefloatsize_ptr(aTHXo))
-#undef PL_errors
-#define PL_errors (*Perl_Terrors_ptr(aTHXo))
-#undef PL_extralen
-#define PL_extralen (*Perl_Textralen_ptr(aTHXo))
-#undef PL_firstgv
-#define PL_firstgv (*Perl_Tfirstgv_ptr(aTHXo))
-#undef PL_formtarget
-#define PL_formtarget (*Perl_Tformtarget_ptr(aTHXo))
-#undef PL_hv_fetch_ent_mh
-#define PL_hv_fetch_ent_mh (*Perl_Thv_fetch_ent_mh_ptr(aTHXo))
-#undef PL_hv_fetch_sv
-#define PL_hv_fetch_sv (*Perl_Thv_fetch_sv_ptr(aTHXo))
-#undef PL_in_eval
-#define PL_in_eval (*Perl_Tin_eval_ptr(aTHXo))
-#undef PL_last_in_gv
-#define PL_last_in_gv (*Perl_Tlast_in_gv_ptr(aTHXo))
-#undef PL_lastgotoprobe
-#define PL_lastgotoprobe (*Perl_Tlastgotoprobe_ptr(aTHXo))
-#undef PL_lastscream
-#define PL_lastscream (*Perl_Tlastscream_ptr(aTHXo))
-#undef PL_localizing
-#define PL_localizing (*Perl_Tlocalizing_ptr(aTHXo))
-#undef PL_mainstack
-#define PL_mainstack (*Perl_Tmainstack_ptr(aTHXo))
-#undef PL_markstack
-#define PL_markstack (*Perl_Tmarkstack_ptr(aTHXo))
-#undef PL_markstack_max
-#define PL_markstack_max (*Perl_Tmarkstack_max_ptr(aTHXo))
-#undef PL_markstack_ptr
-#define PL_markstack_ptr (*Perl_Tmarkstack_ptr_ptr(aTHXo))
-#undef PL_maxscream
-#define PL_maxscream (*Perl_Tmaxscream_ptr(aTHXo))
-#undef PL_modcount
-#define PL_modcount (*Perl_Tmodcount_ptr(aTHXo))
-#undef PL_na
-#define PL_na (*Perl_Tna_ptr(aTHXo))
-#undef PL_nrs
-#define PL_nrs (*Perl_Tnrs_ptr(aTHXo))
-#undef PL_ofs
-#define PL_ofs (*Perl_Tofs_ptr(aTHXo))
-#undef PL_ofslen
-#define PL_ofslen (*Perl_Tofslen_ptr(aTHXo))
-#undef PL_op
-#define PL_op (*Perl_Top_ptr(aTHXo))
-#undef PL_opsave
-#define PL_opsave (*Perl_Topsave_ptr(aTHXo))
-#undef PL_protect
-#define PL_protect (*Perl_Tprotect_ptr(aTHXo))
-#undef PL_reg_call_cc
-#define PL_reg_call_cc (*Perl_Treg_call_cc_ptr(aTHXo))
-#undef PL_reg_curpm
-#define PL_reg_curpm (*Perl_Treg_curpm_ptr(aTHXo))
-#undef PL_reg_eval_set
-#define PL_reg_eval_set (*Perl_Treg_eval_set_ptr(aTHXo))
-#undef PL_reg_flags
-#define PL_reg_flags (*Perl_Treg_flags_ptr(aTHXo))
-#undef PL_reg_ganch
-#define PL_reg_ganch (*Perl_Treg_ganch_ptr(aTHXo))
-#undef PL_reg_leftiter
-#define PL_reg_leftiter (*Perl_Treg_leftiter_ptr(aTHXo))
-#undef PL_reg_magic
-#define PL_reg_magic (*Perl_Treg_magic_ptr(aTHXo))
-#undef PL_reg_maxiter
-#define PL_reg_maxiter (*Perl_Treg_maxiter_ptr(aTHXo))
-#undef PL_reg_oldcurpm
-#define PL_reg_oldcurpm (*Perl_Treg_oldcurpm_ptr(aTHXo))
-#undef PL_reg_oldpos
-#define PL_reg_oldpos (*Perl_Treg_oldpos_ptr(aTHXo))
-#undef PL_reg_oldsaved
-#define PL_reg_oldsaved (*Perl_Treg_oldsaved_ptr(aTHXo))
-#undef PL_reg_oldsavedlen
-#define PL_reg_oldsavedlen (*Perl_Treg_oldsavedlen_ptr(aTHXo))
-#undef PL_reg_poscache
-#define PL_reg_poscache (*Perl_Treg_poscache_ptr(aTHXo))
-#undef PL_reg_poscache_size
-#define PL_reg_poscache_size (*Perl_Treg_poscache_size_ptr(aTHXo))
-#undef PL_reg_re
-#define PL_reg_re (*Perl_Treg_re_ptr(aTHXo))
-#undef PL_reg_start_tmp
-#define PL_reg_start_tmp (*Perl_Treg_start_tmp_ptr(aTHXo))
-#undef PL_reg_start_tmpl
-#define PL_reg_start_tmpl (*Perl_Treg_start_tmpl_ptr(aTHXo))
-#undef PL_reg_starttry
-#define PL_reg_starttry (*Perl_Treg_starttry_ptr(aTHXo))
-#undef PL_reg_sv
-#define PL_reg_sv (*Perl_Treg_sv_ptr(aTHXo))
-#undef PL_reg_whilem_seen
-#define PL_reg_whilem_seen (*Perl_Treg_whilem_seen_ptr(aTHXo))
-#undef PL_regbol
-#define PL_regbol (*Perl_Tregbol_ptr(aTHXo))
-#undef PL_regcc
-#define PL_regcc (*Perl_Tregcc_ptr(aTHXo))
-#undef PL_regcode
-#define PL_regcode (*Perl_Tregcode_ptr(aTHXo))
-#undef PL_regcomp_parse
-#define PL_regcomp_parse (*Perl_Tregcomp_parse_ptr(aTHXo))
-#undef PL_regcomp_rx
-#define PL_regcomp_rx (*Perl_Tregcomp_rx_ptr(aTHXo))
-#undef PL_regcompp
-#define PL_regcompp (*Perl_Tregcompp_ptr(aTHXo))
-#undef PL_regdata
-#define PL_regdata (*Perl_Tregdata_ptr(aTHXo))
-#undef PL_regdummy
-#define PL_regdummy (*Perl_Tregdummy_ptr(aTHXo))
-#undef PL_regendp
-#define PL_regendp (*Perl_Tregendp_ptr(aTHXo))
-#undef PL_regeol
-#define PL_regeol (*Perl_Tregeol_ptr(aTHXo))
-#undef PL_regexecp
-#define PL_regexecp (*Perl_Tregexecp_ptr(aTHXo))
-#undef PL_regflags
-#define PL_regflags (*Perl_Tregflags_ptr(aTHXo))
-#undef PL_regfree
-#define PL_regfree (*Perl_Tregfree_ptr(aTHXo))
-#undef PL_regindent
-#define PL_regindent (*Perl_Tregindent_ptr(aTHXo))
-#undef PL_reginput
-#define PL_reginput (*Perl_Treginput_ptr(aTHXo))
-#undef PL_regint_start
-#define PL_regint_start (*Perl_Tregint_start_ptr(aTHXo))
-#undef PL_regint_string
-#define PL_regint_string (*Perl_Tregint_string_ptr(aTHXo))
-#undef PL_reginterp_cnt
-#define PL_reginterp_cnt (*Perl_Treginterp_cnt_ptr(aTHXo))
-#undef PL_reglastparen
-#define PL_reglastparen (*Perl_Treglastparen_ptr(aTHXo))
-#undef PL_regnarrate
-#define PL_regnarrate (*Perl_Tregnarrate_ptr(aTHXo))
-#undef PL_regnaughty
-#define PL_regnaughty (*Perl_Tregnaughty_ptr(aTHXo))
-#undef PL_regnpar
-#define PL_regnpar (*Perl_Tregnpar_ptr(aTHXo))
-#undef PL_regprecomp
-#define PL_regprecomp (*Perl_Tregprecomp_ptr(aTHXo))
-#undef PL_regprev
-#define PL_regprev (*Perl_Tregprev_ptr(aTHXo))
-#undef PL_regprogram
-#define PL_regprogram (*Perl_Tregprogram_ptr(aTHXo))
-#undef PL_regsawback
-#define PL_regsawback (*Perl_Tregsawback_ptr(aTHXo))
-#undef PL_regseen
-#define PL_regseen (*Perl_Tregseen_ptr(aTHXo))
-#undef PL_regsize
-#define PL_regsize (*Perl_Tregsize_ptr(aTHXo))
-#undef PL_regstartp
-#define PL_regstartp (*Perl_Tregstartp_ptr(aTHXo))
-#undef PL_regtill
-#define PL_regtill (*Perl_Tregtill_ptr(aTHXo))
-#undef PL_regxend
-#define PL_regxend (*Perl_Tregxend_ptr(aTHXo))
-#undef PL_restartop
-#define PL_restartop (*Perl_Trestartop_ptr(aTHXo))
-#undef PL_retstack
-#define PL_retstack (*Perl_Tretstack_ptr(aTHXo))
-#undef PL_retstack_ix
-#define PL_retstack_ix (*Perl_Tretstack_ix_ptr(aTHXo))
-#undef PL_retstack_max
-#define PL_retstack_max (*Perl_Tretstack_max_ptr(aTHXo))
-#undef PL_rs
-#define PL_rs (*Perl_Trs_ptr(aTHXo))
-#undef PL_savestack
-#define PL_savestack (*Perl_Tsavestack_ptr(aTHXo))
-#undef PL_savestack_ix
-#define PL_savestack_ix (*Perl_Tsavestack_ix_ptr(aTHXo))
-#undef PL_savestack_max
-#define PL_savestack_max (*Perl_Tsavestack_max_ptr(aTHXo))
-#undef PL_scopestack
-#define PL_scopestack (*Perl_Tscopestack_ptr(aTHXo))
-#undef PL_scopestack_ix
-#define PL_scopestack_ix (*Perl_Tscopestack_ix_ptr(aTHXo))
-#undef PL_scopestack_max
-#define PL_scopestack_max (*Perl_Tscopestack_max_ptr(aTHXo))
-#undef PL_screamfirst
-#define PL_screamfirst (*Perl_Tscreamfirst_ptr(aTHXo))
-#undef PL_screamnext
-#define PL_screamnext (*Perl_Tscreamnext_ptr(aTHXo))
-#undef PL_secondgv
-#define PL_secondgv (*Perl_Tsecondgv_ptr(aTHXo))
-#undef PL_seen_evals
-#define PL_seen_evals (*Perl_Tseen_evals_ptr(aTHXo))
-#undef PL_seen_zerolen
-#define PL_seen_zerolen (*Perl_Tseen_zerolen_ptr(aTHXo))
-#undef PL_sortcop
-#define PL_sortcop (*Perl_Tsortcop_ptr(aTHXo))
-#undef PL_sortcxix
-#define PL_sortcxix (*Perl_Tsortcxix_ptr(aTHXo))
-#undef PL_sortstash
-#define PL_sortstash (*Perl_Tsortstash_ptr(aTHXo))
-#undef PL_stack_base
-#define PL_stack_base (*Perl_Tstack_base_ptr(aTHXo))
-#undef PL_stack_max
-#define PL_stack_max (*Perl_Tstack_max_ptr(aTHXo))
-#undef PL_stack_sp
-#define PL_stack_sp (*Perl_Tstack_sp_ptr(aTHXo))
-#undef PL_start_env
-#define PL_start_env (*Perl_Tstart_env_ptr(aTHXo))
-#undef PL_statbuf
-#define PL_statbuf (*Perl_Tstatbuf_ptr(aTHXo))
-#undef PL_statcache
-#define PL_statcache (*Perl_Tstatcache_ptr(aTHXo))
-#undef PL_statgv
-#define PL_statgv (*Perl_Tstatgv_ptr(aTHXo))
-#undef PL_statname
-#define PL_statname (*Perl_Tstatname_ptr(aTHXo))
-#undef PL_tainted
-#define PL_tainted (*Perl_Ttainted_ptr(aTHXo))
-#undef PL_timesbuf
-#define PL_timesbuf (*Perl_Ttimesbuf_ptr(aTHXo))
-#undef PL_tmps_floor
-#define PL_tmps_floor (*Perl_Ttmps_floor_ptr(aTHXo))
-#undef PL_tmps_ix
-#define PL_tmps_ix (*Perl_Ttmps_ix_ptr(aTHXo))
-#undef PL_tmps_max
-#define PL_tmps_max (*Perl_Ttmps_max_ptr(aTHXo))
-#undef PL_tmps_stack
-#define PL_tmps_stack (*Perl_Ttmps_stack_ptr(aTHXo))
-#undef PL_top_env
-#define PL_top_env (*Perl_Ttop_env_ptr(aTHXo))
-#undef PL_toptarget
-#define PL_toptarget (*Perl_Ttoptarget_ptr(aTHXo))
-#undef PL_watchaddr
-#define PL_watchaddr (*Perl_Twatchaddr_ptr(aTHXo))
-#undef PL_watchok
-#define PL_watchok (*Perl_Twatchok_ptr(aTHXo))
-#undef PL_No
-#define PL_No (*Perl_GNo_ptr(NULL))
-#undef PL_Yes
-#define PL_Yes (*Perl_GYes_ptr(NULL))
-#undef PL_curinterp
-#define PL_curinterp (*Perl_Gcurinterp_ptr(NULL))
-#undef PL_do_undump
-#define PL_do_undump (*Perl_Gdo_undump_ptr(NULL))
-#undef PL_hexdigit
-#define PL_hexdigit (*Perl_Ghexdigit_ptr(NULL))
-#undef PL_malloc_mutex
-#define PL_malloc_mutex (*Perl_Gmalloc_mutex_ptr(NULL))
-#undef PL_op_mutex
-#define PL_op_mutex (*Perl_Gop_mutex_ptr(NULL))
-#undef PL_patleave
-#define PL_patleave (*Perl_Gpatleave_ptr(NULL))
-#undef PL_thr_key
-#define PL_thr_key (*Perl_Gthr_key_ptr(NULL))
-
-#endif /* !PERL_CORE */
-#endif /* PERL_OBJECT || MULTIPLICITY */
-
-#endif /* __perlapi_h__ */
-
diff --git a/contrib/perl5/perlio.c b/contrib/perl5/perlio.c
deleted file mode 100644
index 8741980..0000000
--- a/contrib/perl5/perlio.c
+++ /dev/null
@@ -1,596 +0,0 @@
-/* perlio.c
- *
- * Copyright (c) 1996-2001, Nick Ing-Simmons
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-
-#define VOIDUSED 1
-#include "config.h"
-
-#define PERLIO_NOT_STDIO 0
-#if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
-#define PerlIO FILE
-#endif
-/*
- * This file provides those parts of PerlIO abstraction
- * which are not #defined in iperlsys.h.
- * Which these are depends on various Configure #ifdef's
- */
-
-#include "EXTERN.h"
-#define PERL_IN_PERLIO_C
-#include "perl.h"
-
-#if !defined(PERL_IMPLICIT_SYS)
-
-#ifdef PERLIO_IS_STDIO
-
-void
-PerlIO_init(void)
-{
- /* Does nothing (yet) except force this file to be included
- in perl binary. That allows this file to force inclusion
- of other functions that may be required by loadable
- extensions e.g. for FileHandle::tmpfile
- */
-}
-
-#undef PerlIO_tmpfile
-PerlIO *
-PerlIO_tmpfile(void)
-{
- return tmpfile();
-}
-
-#else /* PERLIO_IS_STDIO */
-
-#ifdef USE_SFIO
-
-#undef HAS_FSETPOS
-#undef HAS_FGETPOS
-
-/* This section is just to make sure these functions
- get pulled in from libsfio.a
-*/
-
-#undef PerlIO_tmpfile
-PerlIO *
-PerlIO_tmpfile(void)
-{
- return sftmp(0);
-}
-
-void
-PerlIO_init(void)
-{
- /* Force this file to be included in perl binary. Which allows
- * this file to force inclusion of other functions that may be
- * required by loadable extensions e.g. for FileHandle::tmpfile
- */
-
- /* Hack
- * sfio does its own 'autoflush' on stdout in common cases.
- * Flush results in a lot of lseek()s to regular files and
- * lot of small writes to pipes.
- */
- sfset(sfstdout,SF_SHARE,0);
-}
-
-#else /* USE_SFIO */
-
-/* Implement all the PerlIO interface using stdio.
- - this should be only file to include <stdio.h>
-*/
-
-#undef PerlIO_stderr
-PerlIO *
-PerlIO_stderr(void)
-{
- return (PerlIO *) stderr;
-}
-
-#undef PerlIO_stdin
-PerlIO *
-PerlIO_stdin(void)
-{
- return (PerlIO *) stdin;
-}
-
-#undef PerlIO_stdout
-PerlIO *
-PerlIO_stdout(void)
-{
- return (PerlIO *) stdout;
-}
-
-#undef PerlIO_fast_gets
-int
-PerlIO_fast_gets(PerlIO *f)
-{
-#if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
- return 1;
-#else
- return 0;
-#endif
-}
-
-#undef PerlIO_has_cntptr
-int
-PerlIO_has_cntptr(PerlIO *f)
-{
-#if defined(USE_STDIO_PTR)
- return 1;
-#else
- return 0;
-#endif
-}
-
-#undef PerlIO_canset_cnt
-int
-PerlIO_canset_cnt(PerlIO *f)
-{
-#if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
- return 1;
-#else
- return 0;
-#endif
-}
-
-#undef PerlIO_set_cnt
-void
-PerlIO_set_cnt(PerlIO *f, int cnt)
-{
- dTHX;
- if (cnt < -1 && ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "Setting cnt to %d\n",cnt);
-#if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
- FILE_cnt(f) = cnt;
-#else
- Perl_croak(aTHX_ "Cannot set 'cnt' of FILE * on this system");
-#endif
-}
-
-#undef PerlIO_set_ptrcnt
-void
-PerlIO_set_ptrcnt(PerlIO *f, STDCHAR *ptr, int cnt)
-{
- dTHX;
-#ifdef FILE_bufsiz
- STDCHAR *e = FILE_base(f) + FILE_bufsiz(f);
- int ec = e - ptr;
- if (ptr > e + 1 && ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "Setting ptr %p > end+1 %p\n", ptr, e + 1);
- if (cnt != ec && ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "Setting cnt to %d, ptr implies %d\n",cnt,ec);
-#endif
-#if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE)
- FILE_ptr(f) = ptr;
-#else
- Perl_croak(aTHX_ "Cannot set 'ptr' of FILE * on this system");
-#endif
-#if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE) && defined (STDIO_PTR_LVAL_NOCHANGE_CNT)
- FILE_cnt(f) = cnt;
-#else
-#if defined(STDIO_PTR_LVAL_SETS_CNT)
- assert (FILE_cnt(f) == cnt);
-#else
- Perl_croak(aTHX_ "Cannot set 'cnt' of FILE * on this system when setting 'ptr'");
-#endif
-#endif
-}
-
-#undef PerlIO_get_cnt
-int
-PerlIO_get_cnt(PerlIO *f)
-{
-#ifdef FILE_cnt
- return FILE_cnt(f);
-#else
- dTHX;
- Perl_croak(aTHX_ "Cannot get 'cnt' of FILE * on this system");
- return -1;
-#endif
-}
-
-#undef PerlIO_get_bufsiz
-int
-PerlIO_get_bufsiz(PerlIO *f)
-{
-#ifdef FILE_bufsiz
- return FILE_bufsiz(f);
-#else
- dTHX;
- Perl_croak(aTHX_ "Cannot get 'bufsiz' of FILE * on this system");
- return -1;
-#endif
-}
-
-#undef PerlIO_get_ptr
-STDCHAR *
-PerlIO_get_ptr(PerlIO *f)
-{
-#ifdef FILE_ptr
- return FILE_ptr(f);
-#else
- dTHX;
- Perl_croak(aTHX_ "Cannot get 'ptr' of FILE * on this system");
- return NULL;
-#endif
-}
-
-#undef PerlIO_get_base
-STDCHAR *
-PerlIO_get_base(PerlIO *f)
-{
-#ifdef FILE_base
- return FILE_base(f);
-#else
- dTHX;
- Perl_croak(aTHX_ "Cannot get 'base' of FILE * on this system");
- return NULL;
-#endif
-}
-
-#undef PerlIO_has_base
-int
-PerlIO_has_base(PerlIO *f)
-{
-#ifdef FILE_base
- return 1;
-#else
- return 0;
-#endif
-}
-
-#undef PerlIO_puts
-int
-PerlIO_puts(PerlIO *f, const char *s)
-{
- return fputs(s,f);
-}
-
-#undef PerlIO_open
-PerlIO *
-PerlIO_open(const char *path, const char *mode)
-{
- return fopen(path,mode);
-}
-
-#undef PerlIO_fdopen
-PerlIO *
-PerlIO_fdopen(int fd, const char *mode)
-{
- return fdopen(fd,mode);
-}
-
-#undef PerlIO_reopen
-PerlIO *
-PerlIO_reopen(const char *name, const char *mode, PerlIO *f)
-{
- return freopen(name,mode,f);
-}
-
-#undef PerlIO_close
-int
-PerlIO_close(PerlIO *f)
-{
- return fclose(f);
-}
-
-#undef PerlIO_eof
-int
-PerlIO_eof(PerlIO *f)
-{
- return feof(f);
-}
-
-#undef PerlIO_getname
-char *
-PerlIO_getname(PerlIO *f, char *buf)
-{
-#ifdef VMS
- return fgetname(f,buf);
-#else
- dTHX;
- Perl_croak(aTHX_ "Don't know how to get file name");
- return NULL;
-#endif
-}
-
-#undef PerlIO_getc
-int
-PerlIO_getc(PerlIO *f)
-{
- return fgetc(f);
-}
-
-#undef PerlIO_error
-int
-PerlIO_error(PerlIO *f)
-{
- return ferror(f);
-}
-
-#undef PerlIO_clearerr
-void
-PerlIO_clearerr(PerlIO *f)
-{
- clearerr(f);
-}
-
-#undef PerlIO_flush
-int
-PerlIO_flush(PerlIO *f)
-{
- return Fflush(f);
-}
-
-#undef PerlIO_fileno
-int
-PerlIO_fileno(PerlIO *f)
-{
- return fileno(f);
-}
-
-#undef PerlIO_setlinebuf
-void
-PerlIO_setlinebuf(PerlIO *f)
-{
-#ifdef HAS_SETLINEBUF
- setlinebuf(f);
-#else
-# ifdef __BORLANDC__ /* Borland doesn't like NULL size for _IOLBF */
- setvbuf(f, Nullch, _IOLBF, BUFSIZ);
-# else
- setvbuf(f, Nullch, _IOLBF, 0);
-# endif
-#endif
-}
-
-#undef PerlIO_putc
-int
-PerlIO_putc(PerlIO *f, int ch)
-{
- return putc(ch,f);
-}
-
-#undef PerlIO_ungetc
-int
-PerlIO_ungetc(PerlIO *f, int ch)
-{
- return ungetc(ch,f);
-}
-
-#undef PerlIO_read
-SSize_t
-PerlIO_read(PerlIO *f, void *buf, Size_t count)
-{
- return fread(buf,1,count,f);
-}
-
-#undef PerlIO_write
-SSize_t
-PerlIO_write(PerlIO *f, const void *buf, Size_t count)
-{
- return fwrite1(buf,1,count,f);
-}
-
-#undef PerlIO_vprintf
-int
-PerlIO_vprintf(PerlIO *f, const char *fmt, va_list ap)
-{
- return vfprintf(f,fmt,ap);
-}
-
-#undef PerlIO_tell
-Off_t
-PerlIO_tell(PerlIO *f)
-{
-#if defined(USE_64_BIT_STDIO) && defined(HAS_FTELLO) && !defined(USE_FTELL64)
- return ftello(f);
-#else
- return ftell(f);
-#endif
-}
-
-#undef PerlIO_seek
-int
-PerlIO_seek(PerlIO *f, Off_t offset, int whence)
-{
-#if defined(USE_64_BIT_STDIO) && defined(HAS_FSEEKO) && !defined(USE_FSEEK64)
- return fseeko(f,offset,whence);
-#else
- return fseek(f,offset,whence);
-#endif
-}
-
-#undef PerlIO_rewind
-void
-PerlIO_rewind(PerlIO *f)
-{
- rewind(f);
-}
-
-#undef PerlIO_printf
-int
-PerlIO_printf(PerlIO *f,const char *fmt,...)
-{
- va_list ap;
- int result;
- va_start(ap,fmt);
- result = vfprintf(f,fmt,ap);
- va_end(ap);
- return result;
-}
-
-#undef PerlIO_stdoutf
-int
-PerlIO_stdoutf(const char *fmt,...)
-{
- va_list ap;
- int result;
- va_start(ap,fmt);
- result = PerlIO_vprintf(PerlIO_stdout(),fmt,ap);
- va_end(ap);
- return result;
-}
-
-#undef PerlIO_tmpfile
-PerlIO *
-PerlIO_tmpfile(void)
-{
- return tmpfile();
-}
-
-#undef PerlIO_importFILE
-PerlIO *
-PerlIO_importFILE(FILE *f, int fl)
-{
- return f;
-}
-
-#undef PerlIO_exportFILE
-FILE *
-PerlIO_exportFILE(PerlIO *f, int fl)
-{
- return f;
-}
-
-#undef PerlIO_findFILE
-FILE *
-PerlIO_findFILE(PerlIO *f)
-{
- return f;
-}
-
-#undef PerlIO_releaseFILE
-void
-PerlIO_releaseFILE(PerlIO *p, FILE *f)
-{
-}
-
-void
-PerlIO_init(void)
-{
- /* Does nothing (yet) except force this file to be included
- in perl binary. That allows this file to force inclusion
- of other functions that may be required by loadable
- extensions e.g. for FileHandle::tmpfile
- */
-}
-
-#endif /* USE_SFIO */
-#endif /* PERLIO_IS_STDIO */
-
-#ifndef HAS_FSETPOS
-#undef PerlIO_setpos
-int
-#ifdef USE_SFIO
-PerlIO_setpos(PerlIO *f, const Off_t *pos)
-#else
-PerlIO_setpos(PerlIO *f, const Fpos_t *pos)
-#endif
-{
- return PerlIO_seek(f,*pos,0);
-}
-#else
-#ifndef PERLIO_IS_STDIO
-#undef PerlIO_setpos
-int
-PerlIO_setpos(PerlIO *f, const Fpos_t *pos)
-{
-#if defined(USE_64_BIT_STDIO) && defined(USE_FSETPOS64)
- return fsetpos64(f, pos);
-#else
- return fsetpos(f, pos);
-#endif
-}
-#endif
-#endif
-
-#ifndef HAS_FGETPOS
-#undef PerlIO_getpos
-int
-#ifdef USE_SFIO
-PerlIO_getpos(PerlIO *f, Off_t *pos)
-{
- *pos = PerlIO_seek(f,0,0);
- return 0;
-}
-#else
-PerlIO_getpos(PerlIO *f, Fpos_t *pos)
-{
- *pos = PerlIO_tell(f);
- return 0;
-}
-#endif
-#else
-#ifndef PERLIO_IS_STDIO
-#undef PerlIO_getpos
-int
-PerlIO_getpos(PerlIO *f, Fpos_t *pos)
-{
-#if defined(USE_64_BIT_STDIO) && defined(USE_FSETPOS64)
- return fgetpos64(f, pos);
-#else
- return fgetpos(f, pos);
-#endif
-}
-#endif
-#endif
-
-#if (defined(PERLIO_IS_STDIO) || !defined(USE_SFIO)) && !defined(HAS_VPRINTF)
-
-int
-vprintf(char *pat, char *args)
-{
- _doprnt(pat, args, stdout);
- return 0; /* wrong, but perl doesn't use the return value */
-}
-
-int
-vfprintf(FILE *fd, char *pat, char *args)
-{
- _doprnt(pat, args, fd);
- return 0; /* wrong, but perl doesn't use the return value */
-}
-
-#endif
-
-#ifndef PerlIO_vsprintf
-int
-PerlIO_vsprintf(char *s, int n, const char *fmt, va_list ap)
-{
- int val = vsprintf(s, fmt, ap);
- if (n >= 0)
- {
- if (strlen(s) >= (STRLEN)n)
- {
- dTHX;
- PerlIO_puts(Perl_error_log,"panic: sprintf overflow - memory corrupted!\n");
- my_exit(1);
- }
- }
- return val;
-}
-#endif
-
-#ifndef PerlIO_sprintf
-int
-PerlIO_sprintf(char *s, int n, const char *fmt,...)
-{
- va_list ap;
- int result;
- va_start(ap,fmt);
- result = PerlIO_vsprintf(s, n, fmt, ap);
- va_end(ap);
- return result;
-}
-#endif
-
-#endif /* !PERL_IMPLICIT_SYS */
-
diff --git a/contrib/perl5/perlio.h b/contrib/perl5/perlio.h
deleted file mode 100644
index e699a3e..0000000
--- a/contrib/perl5/perlio.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "iperlsys.h"
diff --git a/contrib/perl5/perlio.sym b/contrib/perl5/perlio.sym
deleted file mode 100644
index d7a345c..0000000
--- a/contrib/perl5/perlio.sym
+++ /dev/null
@@ -1,49 +0,0 @@
-# Symbols which arise as part of the PerlIO abstraction
-
-PerlIO_stderr
-PerlIO_stderr
-PerlIO_stdin
-PerlIO_stdout
-PerlIO_fast_gets
-PerlIO_has_cntptr
-PerlIO_canset_cnt
-PerlIO_set_cnt
-PerlIO_set_ptrcnt
-PerlIO_get_cnt
-PerlIO_get_bufsiz
-PerlIO_get_ptr
-PerlIO_get_base
-PerlIO_has_base
-PerlIO_puts
-PerlIO_open
-PerlIO_fdopen
-PerlIO_reopen
-PerlIO_close
-PerlIO_eof
-PerlIO_getname
-PerlIO_getc
-PerlIO_error
-PerlIO_clearerr
-PerlIO_flush
-PerlIO_fileno
-PerlIO_setlinebuf
-PerlIO_putc
-PerlIO_ungetc
-PerlIO_read
-PerlIO_write
-PerlIO_vprintf
-PerlIO_tell
-PerlIO_seek
-PerlIO_rewind
-PerlIO_printf
-PerlIO_stdoutf
-PerlIO_tmpfile
-PerlIO_importFILE
-PerlIO_exportFILE
-PerlIO_findFILE
-PerlIO_releaseFILE
-PerlIO_init
-PerlIO_setpos
-PerlIO_getpos
-PerlIO_vsprintf
-PerlIO_sprintf
diff --git a/contrib/perl5/perlsdio.h b/contrib/perl5/perlsdio.h
deleted file mode 100644
index 6ce82d8..0000000
--- a/contrib/perl5/perlsdio.h
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Although we may not want stdio to be used including <stdio.h> here
- * avoids issues where stdio.h has strange side effects
- */
-#include <stdio.h>
-
-#ifdef PERLIO_IS_STDIO
-/*
- * Make this as close to original stdio as possible.
- */
-#define PerlIO FILE
-#define PerlIO_stderr() stderr
-#define PerlIO_stdout() stdout
-#define PerlIO_stdin() stdin
-
-#define PerlIO_printf fprintf
-#define PerlIO_stdoutf printf
-#define PerlIO_vprintf(f,fmt,a) vfprintf(f,fmt,a)
-#define PerlIO_write(f,buf,count) fwrite1(buf,1,count,f)
-#define PerlIO_open fopen
-#define PerlIO_fdopen fdopen
-#define PerlIO_reopen freopen
-#define PerlIO_close(f) fclose(f)
-#define PerlIO_puts(f,s) fputs(s,f)
-#define PerlIO_putc(f,c) fputc(c,f)
-#if defined(VMS)
-# if defined(__DECC)
- /* Unusual definition of ungetc() here to accomodate fast_sv_gets()'
- * belief that it can mix getc/ungetc with reads from stdio buffer */
- int decc$ungetc(int __c, FILE *__stream);
-# define PerlIO_ungetc(f,c) ((c) == EOF ? EOF : \
- ((*(f) && !((*(f))->_flag & _IONBF) && \
- ((*(f))->_ptr > (*(f))->_base)) ? \
- ((*(f))->_cnt++, *(--(*(f))->_ptr) = (c)) : decc$ungetc(c,f)))
-# else
-# define PerlIO_ungetc(f,c) ungetc(c,f)
-# endif
- /* Work around bug in DECCRTL/AXP (DECC v5.x) and some versions of old
- * VAXCRTL which causes read from a pipe after EOF has been returned
- * once to hang.
- */
-# define PerlIO_getc(f) \
- (feof(f) ? EOF : getc(f))
-# define PerlIO_read(f,buf,count) \
- (feof(f) ? 0 : (SSize_t)fread(buf,1,count,f))
-#else
-# define PerlIO_ungetc(f,c) ungetc(c,f)
-# define PerlIO_getc(f) getc(f)
-# define PerlIO_read(f,buf,count) (SSize_t)fread(buf,1,count,f)
-#endif
-#define PerlIO_eof(f) feof(f)
-#define PerlIO_getname(f,b) fgetname(f,b)
-#define PerlIO_error(f) ferror(f)
-#define PerlIO_fileno(f) fileno(f)
-#define PerlIO_clearerr(f) clearerr(f)
-#define PerlIO_flush(f) Fflush(f)
-#define PerlIO_tell(f) ftell(f)
-#if defined(USE_64_BIT_STDIO) && defined(HAS_FTELLO) && !defined(USE_FTELL64)
-#define ftell ftello
-#endif
-#if defined(VMS) && !defined(__DECC)
- /* Old VAXC RTL doesn't reset EOF on seek; Perl folk seem to expect this */
-# define PerlIO_seek(f,o,w) (((f) && (*f) && ((*f)->_flag &= ~_IOEOF)),fseek(f,o,w))
-#else
-# define PerlIO_seek(f,o,w) fseek(f,o,w)
-#endif
-#if defined(USE_64_BIT_STDIO) && defined(HAS_FSEEKO) && !defined(USE_FSEEK64)
-#define fseek fseeko
-#endif
-#ifdef HAS_FGETPOS
-#define PerlIO_getpos(f,p) fgetpos(f,p)
-#endif
-#ifdef HAS_FSETPOS
-#define PerlIO_setpos(f,p) fsetpos(f,p)
-#endif
-
-#define PerlIO_rewind(f) rewind(f)
-#define PerlIO_tmpfile() tmpfile()
-
-#define PerlIO_importFILE(f,fl) (f)
-#define PerlIO_exportFILE(f,fl) (f)
-#define PerlIO_findFILE(f) (f)
-#define PerlIO_releaseFILE(p,f) ((void) 0)
-
-#ifdef HAS_SETLINEBUF
-#define PerlIO_setlinebuf(f) setlinebuf(f);
-#else
-#define PerlIO_setlinebuf(f) setvbuf(f, Nullch, _IOLBF, 0);
-#endif
-
-/* Now our interface to Configure's FILE_xxx macros */
-
-#ifdef USE_STDIO_PTR
-#define PerlIO_has_cntptr(f) 1
-#define PerlIO_get_ptr(f) FILE_ptr(f)
-#define PerlIO_get_cnt(f) FILE_cnt(f)
-
-#ifdef STDIO_CNT_LVALUE
-#define PerlIO_canset_cnt(f) 1
-#define PerlIO_set_cnt(f,c) (FILE_cnt(f) = (c))
-#ifdef STDIO_PTR_LVALUE
-#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
-#define PerlIO_fast_gets(f) 1
-#endif
-#endif /* STDIO_PTR_LVALUE */
-#else /* STDIO_CNT_LVALUE */
-#define PerlIO_canset_cnt(f) 0
-#define PerlIO_set_cnt(f,c) abort()
-#endif
-
-#ifdef STDIO_PTR_LVALUE
-#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
-#define PerlIO_set_ptrcnt(f,p,c) STMT_START {FILE_ptr(f) = (p), PerlIO_set_cnt(f,c);} STMT_END
-#else
-#ifdef STDIO_PTR_LVAL_SETS_CNT
-/* assert() may pre-process to ""; potential syntax error (FILE_ptr(), ) */
-#define PerlIO_set_ptrcnt(f,p,c) STMT_START {FILE_ptr(f) = (p); assert(FILE_cnt(f) == (c));} STMT_END
-#define PerlIO_fast_gets(f) 1
-#else
-#define PerlIO_set_ptrcnt(f,p,c) abort()
-#endif
-#endif
-#endif
-
-#else /* USE_STDIO_PTR */
-
-#define PerlIO_has_cntptr(f) 0
-#define PerlIO_canset_cnt(f) 0
-#define PerlIO_get_cnt(f) (abort(),0)
-#define PerlIO_get_ptr(f) (abort(),(void *)0)
-#define PerlIO_set_cnt(f,c) abort()
-#define PerlIO_set_ptrcnt(f,p,c) abort()
-
-#endif /* USE_STDIO_PTR */
-
-#ifndef PerlIO_fast_gets
-#define PerlIO_fast_gets(f) 0
-#endif
-
-
-#ifdef FILE_base
-#define PerlIO_has_base(f) 1
-#define PerlIO_get_base(f) FILE_base(f)
-#define PerlIO_get_bufsiz(f) FILE_bufsiz(f)
-#else
-#define PerlIO_has_base(f) 0
-#define PerlIO_get_base(f) (abort(),(void *)0)
-#define PerlIO_get_bufsiz(f) (abort(),0)
-#endif
-#else /* PERLIO_IS_STDIO */
-#ifdef PERL_CORE
-#ifndef PERLIO_NOT_STDIO
-#define PERLIO_NOT_STDIO 1
-#endif
-#endif
-#ifdef PERLIO_NOT_STDIO
-#if PERLIO_NOT_STDIO
-/*
- * Strong denial of stdio - make all stdio calls (we can think of) errors
- */
-#include "nostdio.h"
-#undef fprintf
-#undef tmpfile
-#undef fclose
-#undef fopen
-#undef vfprintf
-#undef fgetc
-#undef fputc
-#undef fputs
-#undef ungetc
-#undef fread
-#undef fwrite
-#undef fgetpos
-#undef fseek
-#undef fsetpos
-#undef ftell
-#undef rewind
-#undef fdopen
-#undef popen
-#undef pclose
-#undef getw
-#undef putw
-#undef freopen
-#undef setbuf
-#undef setvbuf
-#undef fscanf
-#undef fgets
-#undef getc_unlocked
-#undef putc_unlocked
-#define fprintf _CANNOT _fprintf_
-#define stdin _CANNOT _stdin_
-#define stdout _CANNOT _stdout_
-#define stderr _CANNOT _stderr_
-#define tmpfile() _CANNOT _tmpfile_
-#define fclose(f) _CANNOT _fclose_
-#define fflush(f) _CANNOT _fflush_
-#define fopen(p,m) _CANNOT _fopen_
-#define freopen(p,m,f) _CANNOT _freopen_
-#define setbuf(f,b) _CANNOT _setbuf_
-#define setvbuf(f,b,x,s) _CANNOT _setvbuf_
-#define fscanf _CANNOT _fscanf_
-#define vfprintf(f,fmt,a) _CANNOT _vfprintf_
-#define fgetc(f) _CANNOT _fgetc_
-#define fgets(s,n,f) _CANNOT _fgets_
-#define fputc(c,f) _CANNOT _fputc_
-#define fputs(s,f) _CANNOT _fputs_
-#define getc(f) _CANNOT _getc_
-#define putc(c,f) _CANNOT _putc_
-#define ungetc(c,f) _CANNOT _ungetc_
-#define fread(b,s,c,f) _CANNOT _fread_
-#define fwrite(b,s,c,f) _CANNOT _fwrite_
-#define fgetpos(f,p) _CANNOT _fgetpos_
-#define fseek(f,o,w) _CANNOT _fseek_
-#define fsetpos(f,p) _CANNOT _fsetpos_
-#define ftell(f) _CANNOT _ftell_
-#define rewind(f) _CANNOT _rewind_
-#define clearerr(f) _CANNOT _clearerr_
-#define feof(f) _CANNOT _feof_
-#define ferror(f) _CANNOT _ferror_
-#define __filbuf(f) _CANNOT __filbuf_
-#define __flsbuf(c,f) _CANNOT __flsbuf_
-#define _filbuf(f) _CANNOT _filbuf_
-#define _flsbuf(c,f) _CANNOT _flsbuf_
-#define fdopen(fd,p) _CANNOT _fdopen_
-#define fileno(f) _CANNOT _fileno_
-#if SFIO_VERSION < 20000101L
-#define flockfile(f) _CANNOT _flockfile_
-#define ftrylockfile(f) _CANNOT _ftrylockfile_
-#define funlockfile(f) _CANNOT _funlockfile_
-#endif
-#define getc_unlocked(f) _CANNOT _getc_unlocked_
-#define putc_unlocked(c,f) _CANNOT _putc_unlocked_
-#define popen(c,m) _CANNOT _popen_
-#define getw(f) _CANNOT _getw_
-#define putw(v,f) _CANNOT _putw_
-#define pclose(f) _CANNOT _pclose_
-
-#else /* if PERLIO_NOT_STDIO */
-/*
- * PERLIO_NOT_STDIO defined as 0
- * Declares that both PerlIO and stdio can be used
- */
-#endif /* if PERLIO_NOT_STDIO */
-#else /* ifdef PERLIO_NOT_STDIO */
-/*
- * PERLIO_NOT_STDIO not defined
- * This is "source level" stdio compatibility mode.
- */
-#include "nostdio.h"
-#undef FILE
-#define FILE PerlIO
-#undef fprintf
-#undef tmpfile
-#undef fclose
-#undef fopen
-#undef vfprintf
-#undef fgetc
-#undef getc_unlocked
-#undef fputc
-#undef putc_unlocked
-#undef fputs
-#undef ungetc
-#undef fread
-#undef fwrite
-#undef fgetpos
-#undef fseek
-#undef fsetpos
-#undef ftell
-#undef rewind
-#undef fdopen
-#undef popen
-#undef pclose
-#undef getw
-#undef putw
-#undef freopen
-#undef setbuf
-#undef setvbuf
-#undef fscanf
-#undef fgets
-#define fprintf PerlIO_printf
-#define stdin PerlIO_stdin()
-#define stdout PerlIO_stdout()
-#define stderr PerlIO_stderr()
-#define tmpfile() PerlIO_tmpfile()
-#define fclose(f) PerlIO_close(f)
-#define fflush(f) PerlIO_flush(f)
-#define fopen(p,m) PerlIO_open(p,m)
-#define vfprintf(f,fmt,a) PerlIO_vprintf(f,fmt,a)
-#define fgetc(f) PerlIO_getc(f)
-#define fputc(c,f) PerlIO_putc(f,c)
-#define fputs(s,f) PerlIO_puts(f,s)
-#define getc(f) PerlIO_getc(f)
-#ifdef getc_unlocked
-#undef getc_unlocked
-#endif
-#define getc_unlocked(f) PerlIO_getc(f)
-#define putc(c,f) PerlIO_putc(f,c)
-#ifdef putc_unlocked
-#undef putc_unlocked
-#endif
-#define putc_unlocked(c,f) PerlIO_putc(c,f)
-#define ungetc(c,f) PerlIO_ungetc(f,c)
-#if 0
-/* return values of read/write need work */
-#define fread(b,s,c,f) PerlIO_read(f,b,(s*c))
-#define fwrite(b,s,c,f) PerlIO_write(f,b,(s*c))
-#else
-#define fread(b,s,c,f) _CANNOT fread
-#define fwrite(b,s,c,f) _CANNOT fwrite
-#endif
-#define fgetpos(f,p) PerlIO_getpos(f,p)
-#define fseek(f,o,w) PerlIO_seek(f,o,w)
-#define fsetpos(f,p) PerlIO_setpos(f,p)
-#define ftell(f) PerlIO_tell(f)
-#define rewind(f) PerlIO_rewind(f)
-#define clearerr(f) PerlIO_clearerr(f)
-#define feof(f) PerlIO_eof(f)
-#define ferror(f) PerlIO_error(f)
-#define fdopen(fd,p) PerlIO_fdopen(fd,p)
-#define fileno(f) PerlIO_fileno(f)
-#define popen(c,m) my_popen(c,m)
-#define pclose(f) my_pclose(f)
-
-#define __filbuf(f) _CANNOT __filbuf_
-#define _filbuf(f) _CANNOT _filbuf_
-#define __flsbuf(c,f) _CANNOT __flsbuf_
-#define _flsbuf(c,f) _CANNOT _flsbuf_
-#define getw(f) _CANNOT _getw_
-#define putw(v,f) _CANNOT _putw_
-#if SFIO_VERSION < 20000101L
-#define flockfile(f) _CANNOT _flockfile_
-#define ftrylockfile(f) _CANNOT _ftrylockfile_
-#define funlockfile(f) _CANNOT _funlockfile_
-#endif
-#define freopen(p,m,f) _CANNOT _freopen_
-#define setbuf(f,b) _CANNOT _setbuf_
-#define setvbuf(f,b,x,s) _CANNOT _setvbuf_
-#define fscanf _CANNOT _fscanf_
-#define fgets(s,n,f) _CANNOT _fgets_
-
-#endif /* ifdef PERLIO_NOT_STDIO */
-#endif /* PERLIO_IS_STDIO */
diff --git a/contrib/perl5/perlsfio.h b/contrib/perl5/perlsfio.h
deleted file mode 100644
index d9b3323..0000000
--- a/contrib/perl5/perlsfio.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* The next #ifdef should be redundant if Configure behaves ... */
-#ifdef I_SFIO
-#include <sfio.h>
-#endif
-
-/* sfio 2000 changed _stdopen to _stdfdopen */
-#if SFIO_VERSION >= 20000101L
-#define _stdopen _stdfdopen
-#endif
-
-extern Sfio_t* _stdopen _ARG_((int, const char*));
-extern int _stdprintf _ARG_((const char*, ...));
-
-#define PerlIO Sfio_t
-#define PerlIO_stderr() sfstderr
-#define PerlIO_stdout() sfstdout
-#define PerlIO_stdin() sfstdin
-
-#define PerlIO_printf sfprintf
-#define PerlIO_stdoutf _stdprintf
-#define PerlIO_vprintf(f,fmt,a) sfvprintf(f,fmt,a)
-#define PerlIO_read(f,buf,count) sfread(f,buf,count)
-#define PerlIO_write(f,buf,count) sfwrite(f,buf,count)
-#define PerlIO_open(path,mode) sfopen(NULL,path,mode)
-#define PerlIO_fdopen(fd,mode) _stdopen(fd,mode)
-#define PerlIO_reopen(path,mode,f) sfopen(f,path,mode)
-#define PerlIO_close(f) sfclose(f)
-#define PerlIO_puts(f,s) sfputr(f,s,-1)
-#define PerlIO_putc(f,c) sfputc(f,c)
-#define PerlIO_ungetc(f,c) sfungetc(f,c)
-#define PerlIO_sprintf sfsprintf
-#define PerlIO_getc(f) sfgetc(f)
-#define PerlIO_eof(f) sfeof(f)
-#define PerlIO_error(f) sferror(f)
-#define PerlIO_fileno(f) sffileno(f)
-#define PerlIO_clearerr(f) sfclrerr(f)
-#define PerlIO_flush(f) sfsync(f)
-#if 0
-/* This breaks tests */
-#define PerlIO_tell(f) sfseek(f,0,1|SF_SHARE)
-#else
-#define PerlIO_tell(f) sftell(f)
-#endif
-#define PerlIO_seek(f,o,w) sfseek(f,o,w)
-#define PerlIO_rewind(f) (void) sfseek((f),0L,0)
-#define PerlIO_tmpfile() sftmp(0)
-
-#define PerlIO_importFILE(f,fl) Perl_croak(aTHX_ "Import from FILE * unimplemeted")
-#define PerlIO_exportFILE(f,fl) Perl_croak(aTHX_ "Export to FILE * unimplemeted")
-#define PerlIO_findFILE(f) NULL
-#define PerlIO_releaseFILE(p,f) Perl_croak(aTHX_ "Release of FILE * unimplemeted")
-
-#define PerlIO_setlinebuf(f) sfset(f,SF_LINE,1)
-
-/* Now our interface to equivalent of Configure's FILE_xxx macros */
-
-#define PerlIO_has_cntptr(f) 1
-#define PerlIO_get_ptr(f) ((f)->next)
-#define PerlIO_get_cnt(f) ((f)->endr - (f)->next)
-#define PerlIO_canset_cnt(f) 1
-#define PerlIO_fast_gets(f) 1
-#define PerlIO_set_ptrcnt(f,p,c) STMT_START {(f)->next = (unsigned char *)(p); assert(PerlIO_get_cnt(f) == (c));} STMT_END
-#define PerlIO_set_cnt(f,c) STMT_START {(f)->next = (f)->endr - (c);} STMT_END
-
-#define PerlIO_has_base(f) 1
-#define PerlIO_get_base(f) ((f)->data)
-#define PerlIO_get_bufsiz(f) ((f)->endr - (f)->data)
-
-
diff --git a/contrib/perl5/perlsh b/contrib/perl5/perlsh
deleted file mode 100644
index 63662d6..0000000
--- a/contrib/perl5/perlsh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/perl
-
-# Poor man's perl shell.
-
-# Simply type two carriage returns every time you want to evaluate.
-# Note that it must be a complete perl statement--don't type double
-# carriage return in the middle of a loop.
-
-$/ = "\n\n"; # set paragraph mode
-$SHlinesep = "\n";
-while (defined($SHcmd = <>)) {
- $/ = $SHlinesep;
- eval $SHcmd; print $@ || "\n";
- $SHlinesep = $/; $/ = '';
-}
diff --git a/contrib/perl5/perlvars.h b/contrib/perl5/perlvars.h
deleted file mode 100644
index bd07adc..0000000
--- a/contrib/perl5/perlvars.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/****************/
-/* Truly global */
-/****************/
-
-/* Don't forget to re-run embed.pl to propagate changes! */
-
-/* This file describes the "global" variables used by perl
- * This used to be in perl.h directly but we want to abstract out into
- * distinct files which are per-thread, per-interpreter or really global,
- * and how they're initialized.
- *
- * The 'G' prefix is only needed for vars that need appropriate #defines
- * generated in embed*.h. Such symbols are also used to generate
- * the appropriate export list for win32. */
-
-/* global state */
-PERLVAR(Gcurinterp, PerlInterpreter *)
- /* currently running interpreter
- * (initial parent interpreter under
- * useithreads) */
-#if defined(USE_THREADS) || defined(USE_ITHREADS)
-PERLVAR(Gthr_key, perl_key) /* key to retrieve per-thread struct */
-#endif
-
-/* constants (these are not literals to facilitate pointer comparisons) */
-PERLVARIC(GYes, char *, "1")
-PERLVARIC(GNo, char *, "")
-PERLVARIC(Ghexdigit, char *, "0123456789abcdef0123456789ABCDEF")
-PERLVARIC(Gpatleave, char *, "\\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}")
-
-/* XXX does anyone even use this? */
-PERLVARI(Gdo_undump, bool, FALSE) /* -u or dump seen? */
-
-#if defined(MYMALLOC) && (defined(USE_THREADS) || defined(USE_ITHREADS))
-PERLVAR(Gmalloc_mutex, perl_mutex) /* Mutex for malloc */
-#endif
-
-#if defined(USE_ITHREADS)
-PERLVAR(Gop_mutex, perl_mutex) /* Mutex for op refcounting */
-#endif
diff --git a/contrib/perl5/perly.c b/contrib/perl5/perly.c
deleted file mode 100644
index 2b5108f..0000000
--- a/contrib/perl5/perly.c
+++ /dev/null
@@ -1,2506 +0,0 @@
-#ifndef lint
-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91";
-#endif
-#define YYBYACC 1
-#line 16 "perly.y"
-#include "EXTERN.h"
-#define PERL_IN_PERLY_C
-#include "perl.h"
-
-#define dep() deprecate("\"do\" to call subroutines")
-
-/* stuff included here to make perly_c.diff apply better */
-
-#define yydebug PL_yydebug
-#define yynerrs PL_yynerrs
-#define yyerrflag PL_yyerrflag
-#define yychar PL_yychar
-#define yyval PL_yyval
-#define yylval PL_yylval
-
-struct ysv {
- short* yyss;
- YYSTYPE* yyvs;
- int oldyydebug;
- int oldyynerrs;
- int oldyyerrflag;
- int oldyychar;
- YYSTYPE oldyyval;
- YYSTYPE oldyylval;
-};
-
-static void yydestruct(pTHXo_ void *ptr);
-
-#line 49 "perly.y"
-#if 0 /* get this from perly.h instead */
-#line 52 "perly.y"
-typedef union {
- I32 ival;
- char *pval;
- OP *opval;
- GV *gvval;
-} YYSTYPE;
-#line 60 "perly.y"
-#endif /* 0 */
-
-#ifdef USE_PURE_BISON
-#define YYLEX_PARAM (&yychar)
-#endif
-
-#line 51 "perly.c"
-#define YYERRCODE 256
-static short yylhs[] = { -1,
- 50, 0, 8, 6, 9, 7, 10, 10, 10, 11,
- 11, 11, 11, 24, 24, 24, 24, 24, 24, 24,
- 14, 14, 14, 13, 13, 42, 42, 12, 12, 12,
- 12, 12, 12, 12, 26, 26, 27, 27, 28, 29,
- 30, 31, 32, 49, 49, 1, 1, 1, 1, 1,
- 2, 38, 38, 46, 51, 3, 4, 5, 39, 40,
- 40, 44, 44, 44, 45, 45, 41, 41, 52, 52,
- 54, 53, 15, 15, 15, 25, 25, 25, 36, 36,
- 36, 36, 36, 36, 36, 36, 55, 36, 37, 37,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 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,
- 47, 47, 48, 48, 48, 48, 48, 33, 33, 34,
- 34, 34, 43, 23, 18, 19, 20, 21, 22, 35,
- 35, 35, 35,
-};
-static short yylen[] = { 2,
- 0, 2, 4, 0, 4, 0, 0, 2, 2, 2,
- 1, 2, 3, 1, 1, 3, 3, 3, 3, 3,
- 0, 2, 6, 7, 7, 0, 2, 8, 8, 10,
- 9, 8, 11, 3, 0, 1, 0, 1, 1, 1,
- 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
- 4, 1, 0, 6, 6, 0, 0, 0, 1, 0,
- 1, 0, 2, 1, 2, 1, 1, 1, 3, 2,
- 0, 7, 3, 3, 1, 2, 3, 1, 3, 5,
- 6, 3, 3, 5, 2, 4, 0, 5, 1, 1,
- 5, 4, 5, 4, 5, 6, 5, 4, 5, 4,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 5, 3, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 1, 2, 3, 2, 3, 2,
- 4, 3, 5, 1, 1, 1, 1, 1, 1, 6,
- 5, 4, 5, 1, 1, 3, 4, 3, 2, 2,
- 4, 5, 4, 5, 1, 2, 2, 1, 2, 2,
- 2, 1, 3, 1, 3, 4, 4, 6, 1, 1,
- 3, 2, 3, 2, 1, 1, 1, 0, 1, 0,
- 1, 2, 1, 2, 2, 2, 2, 2, 2, 1,
- 1, 1, 1,
-};
-static short yydefred[] = { 1,
- 0, 7, 0, 45, 58, 56, 0, 56, 56, 8,
- 46, 9, 11, 48, 0, 47, 49, 50, 0, 0,
- 0, 70, 71, 0, 14, 4, 169, 0, 0, 144,
- 0, 164, 0, 57, 57, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 0, 0, 0, 0, 0, 0, 0, 10,
- 0, 0, 0, 0, 0, 136, 138, 0, 0, 0,
- 0, 170, 125, 52, 0, 59, 0, 69, 0, 0,
- 7, 190, 193, 192, 191, 0, 0, 0, 0, 0,
- 0, 4, 4, 4, 4, 4, 4, 0, 0, 0,
- 0, 0, 159, 0, 0, 0, 0, 85, 0, 188,
- 0, 150, 0, 0, 0, 0, 0, 0, 0, 175,
- 177, 176, 0, 184, 0, 0, 0, 0, 0, 0,
- 0, 0, 130, 0, 0, 0, 185, 186, 187, 189,
- 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 121, 122, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 13, 0, 51, 61, 0,
- 0, 0, 0, 83, 0, 0, 87, 0, 0, 0,
- 0, 0, 0, 0, 4, 163, 165, 0, 0, 0,
- 0, 0, 0, 0, 132, 0, 148, 174, 0, 0,
- 171, 0, 0, 129, 27, 0, 0, 19, 0, 0,
- 0, 0, 73, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 89, 0,
- 0, 90, 0, 0, 101, 0, 0, 0, 0, 0,
- 0, 0, 146, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 167, 0, 0, 0, 42, 0, 43, 0,
- 0, 0, 0, 183, 0, 0, 36, 41, 0, 0,
- 0, 166, 182, 86, 0, 151, 0, 153, 0, 131,
- 173, 65, 0, 0, 0, 0, 98, 0, 0, 0,
- 0, 100, 94, 0, 92, 0, 142, 0, 147, 63,
- 68, 67, 55, 0, 54, 84, 0, 88, 133, 0,
- 0, 0, 0, 0, 0, 0, 0, 80, 152, 154,
- 141, 0, 0, 0, 99, 93, 0, 97, 95, 143,
- 91, 72, 168, 6, 0, 0, 0, 0, 0, 0,
- 0, 0, 140, 96, 81, 7, 28, 29, 0, 0,
- 24, 25, 0, 32, 0, 0, 0, 22, 0, 0,
- 0, 31, 5, 0, 30, 0, 0, 33, 0, 23,
-};
-static short yydgoto[] = { 1,
- 10, 11, 20, 100, 19, 91, 366, 94, 355, 3,
- 12, 13, 70, 371, 281, 72, 73, 74, 75, 76,
- 77, 78, 79, 287, 81, 288, 277, 279, 282, 290,
- 278, 280, 118, 210, 96, 82, 253, 85, 87, 190,
- 323, 152, 285, 267, 221, 14, 83, 133, 15, 2,
- 16, 17, 18, 89, 274,
-};
-static short yysindex[] = { 0,
- 0, 0, -199, 0, 0, 0, -53, 0, 0, 0,
- 0, 0, 0, 0, 646, 0, 0, 0, -217, -207,
- 44, 0, 0, -207, 0, 0, 0, -32, -32, 0,
- 66, 0, 2177, 0, 0, 69, 83, 93, 110, -35,
- 2177, 119, 121, 136, 1013, 973, -32, 1077, 1344, -146,
- 2177, 68, -32, 2177, 2177, 2177, 2177, 2177, 2177, 1384,
- 1424, 0, 2177, 2177, -32, -32, -32, -32, -152, 0,
- 470, 845, -13, -65, -63, 0, 0, 55, 137, 122,
- 138, 0, 0, 0, 60, 0, -70, 0, -66, -70,
- 0, 0, 0, 0, 0, 2177, 146, 2177, 1085, 60,
- -70, 0, 0, 0, 0, 0, 0, 152, 845, 153,
- 1464, 973, 0, 1085, 0, -65, 138, 0, 2177, 0,
- 160, 0, 1085, 2, 76, -52, 2177, 1085, 1524, 0,
- 0, 0, -96, 0, 138, -181, -181, -181, -112, -112,
- 123, -38, 0, -74, -181, -181, 0, 0, 0, 0,
- 60, 0, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177,
- 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177,
- 2177, 2177, 2177, 0, 0, -16, 2177, 1731, 2177, 2177,
- 2177, 2177, 2177, 2177, 1791, 0, 2177, 0, 0, -88,
- -34, -88, 339, 0, 2177, 287, 0, -88, 2177, 2177,
- 2177, 2177, 173, 1850, 0, 0, 0, -33, 46, 180,
- 2177, 138, 1910, 2025, 0, 97, 0, 0, -31, -29,
- 0, 2177, 133, 0, 0, -237, -237, 0, -237, -237,
- -237, -69, 0, 1614, 1085, 684, 167, 107, 845, 3800,
- 1125, 405, 1164, 778, -228, -181, -181, 2177, 0, 2117,
- 2177, 0, 197, -48, 0, -9, -72, -45, -7, -42,
- 56, -36, 0, -4, 845, -10, -47, 2177, -47, 0,
- 216, 2177, 0, 2177, 60, -237, 0, 219, 0, 230,
- -237, 233, 237, 0, 242, 470, 0, 0, 246, 225,
- 2177, 0, 0, 0, 13, 0, 18, 0, 29, 0,
- 0, 0, 61, 2177, 2177, 54, 0, 32, 63, 2177,
- 165, 0, 0, 174, 0, 178, 0, 191, 0, 0,
- 0, 0, 0, 261, 0, 0, 350, 0, 0, 182,
- 182, 182, 182, 2177, 182, 2177, 281, 0, 0, 0,
- 0, 102, 1237, 202, 0, 0, 294, 0, 0, 0,
- 0, 0, 0, 0, -152, -152, -130, -130, 297, -152,
- 290, 182, 0, 0, 0, 0, 0, 0, 182, 318,
- 0, 0, 182, 0, 1850, -152, 407, 0, 2177, -152,
- 324, 0, 0, 326, 0, 182, 182, 0, -130, 0,
-};
-static short yyrindex[] = { 0,
- 0, 0, 243, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 236, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 36, 451, 0, 0, 2208, 2271, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 115, 0,
- -12, 939, 2325, 2385, 2463, 0, 0, 2510, 2561, 0,
- 1220, 0, 0, 0, 0, 0, -44, 0, 0, -44,
- 0, 0, 0, 0, 0, 2271, 0, 0, 3846, 0,
- -105, 0, 0, 0, 0, 0, 0, 0, 2612, 0,
- 0, 327, 0, 3883, 522, 583, 3032, 0, 0, 0,
- 2621, 0, 3893, 2385, 0, 0, 2271, 3930, 0, 0,
- 0, 0, 2667, 0, 3092, 3374, 3418, 3458, 3219, 3331,
- 2746, 0, 0, 0, 3496, 3567, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2797, 0, 0, -23,
- 0, -23, 913, 0, 327, 0, 0, 247, 336, 0,
- 0, 0, 0, 333, 0, 0, 0, 0, 352, 0,
- 0, 3138, 0, 0, 0, 0, 0, 0, 0, 2857,
- 0, 0, 2903, 0, 0, -8, -2, 0, 7, 33,
- 42, 2255, 0, -28, 3968, 1822, 3732, 3769, 3023, 0,
- 4119, 4082, 4021, 4005, 1044, 3610, 3694, 0, 0, 0,
- 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3657, -21, 0, 345, 0, 0,
- 0, 0, 0, 2271, 0, 71, 0, 0, 0, 0,
- 364, 0, 0, 0, 0, 86, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 327,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 355, 0, 0, 0, 0,
- 0, 0, 2972, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 115, 115, 175, 175, 0, 115,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 374, 115, 913, 0, 0, 115,
- 0, 0, 0, 0, 0, 0, 0, 0, 175, 0,
-};
-static short yygindex[] = { 0,
- 0, 0, 164, 383, 0, 14, 0, 37, 655, -89,
- 0, 0, 0, -336, -15, 3415, 0, 2211, 368, 369,
- 0, 0, 0, 410, 916, 0, 0, 273, -163, 62,
- 94, 249, -71, -186, 634, 0, 0, 0, 428, -46,
- 184, 118, 0, -149, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-};
-#define YYTABLESIZE 4423
-static short yytable[] = { 71,
- 65, 193, 223, 65, 107, 22, 216, 292, 271, 301,
- 311, 321, 111, 314, 60, 111, 316, 60, 224, 65,
- 313, 372, 318, 250, 194, 181, 178, 183, 15, 111,
- 111, 312, 18, 126, 111, 62, 319, 64, 39, 84,
- 289, 214, 269, 192, 142, 144, 15, 16, 275, 86,
- 18, 69, 390, 338, 198, 217, 39, 180, 339, 182,
- 163, 164, 158, 159, 111, 16, 4, 5, 6, 340,
- 7, 8, 345, 17, 251, 26, 155, 179, 60, 155,
- 172, 113, 20, 173, 122, 315, 174, 175, 176, 293,
- 26, 17, 181, 155, 155, 208, 209, 9, 155, 62,
- 20, 64, 88, 65, 67, 98, 248, 129, 102, 177,
- 127, 38, 344, 219, 26, 199, 200, 201, 202, 203,
- 204, 188, 103, 347, 180, 151, 40, 337, 155, 38,
- 173, 66, 104, 174, 175, 176, 197, 226, 227, 229,
- 230, 231, 232, 233, 15, 369, 370, 26, 317, 105,
- 26, 26, 26, 341, 26, 346, 26, 26, 110, 26,
- 111, 254, 256, 257, 258, 259, 260, 261, 262, 264,
- 359, 23, 24, 26, 21, 112, 185, 184, 26, 209,
- 186, 187, 26, 276, 227, 195, 227, 225, 286, 189,
- 191, 205, 60, 206, 363, 295, 324, 297, 299, 213,
- 215, 220, 328, 21, 176, 26, 303, 21, 65, 266,
- 21, 21, 21, 222, 21, 384, 21, 21, 291, 21,
- 294, 300, 268, 304, 92, 158, 159, 158, 159, 93,
- 302, 159, 306, 21, 308, 309, 310, 26, 21, 26,
- 26, 249, 2, 111, 111, 111, 111, 158, 159, 320,
- 111, 158, 159, 60, 158, 159, 326, 158, 159, 330,
- 106, 158, 159, 158, 159, 21, 158, 159, 158, 159,
- 331, 111, 111, 332, 111, 44, 377, 333, 44, 44,
- 44, 334, 44, 336, 44, 44, 335, 44, 342, 348,
- 158, 159, 158, 159, 209, 158, 159, 21, 349, 21,
- 21, 44, 350, 322, 354, 322, 44, 155, 155, 155,
- 155, 329, 158, 159, 155, 351, 155, 158, 159, 352,
- 276, 362, 155, 155, 155, 155, 364, 273, 158, 159,
- 272, 158, 159, 44, 365, 155, 155, 373, 155, 155,
- 155, 155, 155, 155, 155, 158, 159, 155, 375, 166,
- 155, 155, 155, 158, 159, 158, 159, 379, 53, 71,
- 158, 159, 158, 159, 386, 44, 387, 180, 44, 62,
- 26, 26, 26, 26, 26, 26, 37, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 353, 35, 181, 26, 26, 163, 26, 26, 26, 26,
- 26, 158, 159, 178, 40, 26, 26, 26, 26, 26,
- 26, 26, 166, 37, 35, 172, 26, 101, 173, 131,
- 132, 174, 175, 176, 80, 26, 228, 26, 26, 361,
- 21, 21, 21, 21, 21, 21, 381, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 283, 90, 325, 21, 21, 0, 21, 21, 21, 21,
- 21, 0, 0, 270, 0, 21, 21, 21, 21, 21,
- 21, 21, 367, 368, 0, 172, 21, 374, 173, 0,
- 0, 174, 175, 176, 0, 21, 0, 21, 21, 0,
- 0, 162, 0, 382, 162, 0, 0, 385, 44, 44,
- 44, 44, 44, 44, 0, 44, 44, 44, 162, 162,
- 0, 44, 0, 162, 44, 44, 44, 44, 0, 0,
- 0, 44, 44, 0, 44, 44, 44, 44, 44, 0,
- 0, 383, 0, 44, 44, 44, 44, 44, 44, 0,
- 0, 0, 0, 162, 44, 0, 0, 0, 0, 0,
- 0, 0, 0, 44, 190, 44, 44, 190, 190, 190,
- 0, 190, 169, 190, 190, 169, 190, 160, 0, 0,
- 0, 0, 0, 161, 162, 163, 164, 0, 0, 169,
- 169, 0, 0, 0, 169, 190, 0, 0, 0, 165,
- 167, 168, 169, 170, 171, 172, 0, 0, 173, 0,
- 0, 174, 175, 176, 4, 5, 6, 0, 7, 8,
- 0, 0, 190, 0, 169, 191, 0, 0, 191, 191,
- 191, 0, 191, 134, 191, 191, 134, 191, 0, 0,
- 160, 0, 0, 0, 0, 9, 161, 162, 163, 164,
- 134, 134, 0, 0, 0, 134, 191, 190, 0, 0,
- 0, 0, 165, 167, 168, 169, 170, 171, 172, 0,
- 0, 173, 97, 0, 174, 175, 176, 0, 0, 0,
- 0, 0, 4, 5, 6, 134, 7, 8, 55, 119,
- 120, 65, 67, 53, 0, 60, 134, 68, 64, 0,
- 63, 161, 162, 163, 164, 0, 0, 0, 147, 148,
- 149, 150, 0, 9, 62, 0, 0, 0, 191, 66,
- 169, 170, 171, 172, 0, 0, 173, 0, 0, 174,
- 175, 176, 162, 162, 162, 162, 0, 0, 0, 162,
- 0, 162, 0, 0, 0, 0, 61, 162, 162, 162,
- 162, 153, 154, 155, 156, 211, 0, 0, 157, 0,
- 162, 162, 0, 162, 162, 162, 162, 162, 162, 162,
- 0, 0, 162, 0, 0, 162, 162, 162, 26, 158,
- 159, 56, 0, 0, 0, 0, 0, 0, 190, 190,
- 190, 190, 190, 0, 190, 190, 190, 0, 0, 0,
- 190, 0, 0, 169, 169, 169, 169, 0, 0, 0,
- 169, 190, 169, 190, 190, 190, 190, 190, 169, 169,
- 169, 169, 190, 190, 190, 190, 190, 190, 0, 0,
- 0, 169, 169, 190, 169, 169, 169, 169, 169, 169,
- 169, 0, 190, 169, 190, 190, 169, 169, 169, 191,
- 191, 191, 191, 191, 0, 191, 191, 191, 0, 0,
- 0, 191, 0, 0, 134, 134, 134, 134, 0, 0,
- 0, 134, 191, 134, 191, 191, 191, 191, 191, 134,
- 134, 134, 134, 191, 191, 191, 191, 191, 191, 0,
- 0, 0, 134, 134, 191, 134, 134, 134, 134, 134,
- 134, 134, 0, 191, 134, 191, 191, 134, 134, 134,
- 0, 25, 27, 28, 29, 30, 31, 166, 32, 33,
- 34, 0, 0, 0, 35, 0, 0, 36, 37, 38,
- 39, 0, 0, 0, 40, 41, 0, 42, 43, 44,
- 45, 46, 0, 0, 0, 0, 47, 48, 49, 50,
- 51, 52, 0, 0, 0, 44, 0, 54, 44, 44,
- 44, 0, 44, 0, 44, 44, 57, 44, 58, 59,
- 0, 117, 0, 0, 0, 0, 0, 0, 0, 135,
- 161, 44, 163, 164, 0, 0, 44, 0, 0, 78,
- 0, 0, 78, 0, 0, 356, 357, 358, 0, 360,
- 0, 171, 172, 0, 0, 173, 78, 78, 174, 175,
- 176, 0, 0, 44, 0, 55, 0, 0, 65, 67,
- 53, 117, 60, 0, 68, 64, 376, 63, 0, 0,
- 0, 0, 0, 378, 0, 0, 0, 380, 0, 0,
- 0, 78, 0, 0, 212, 44, 66, 0, 44, 0,
- 388, 389, 117, 0, 0, 55, 0, 0, 65, 67,
- 53, 0, 60, 0, 68, 64, 0, 63, 0, 0,
- 0, 0, 0, 61, 161, 162, 163, 164, 0, 0,
- 0, 0, 0, 0, 0, 0, 66, 0, 0, 0,
- 0, 0, 0, 0, 106, 171, 172, 106, 0, 173,
- 0, 0, 174, 175, 176, 26, 0, 0, 56, 0,
- 0, 106, 106, 61, 0, 0, 106, 0, 0, 55,
- 0, 0, 65, 67, 53, 0, 60, 0, 68, 64,
- 0, 63, 0, 0, 0, 160, 0, 0, 0, 0,
- 0, 161, 162, 163, 164, 26, 106, 0, 56, 0,
- 66, 0, 0, 0, 0, 0, 0, 165, 167, 168,
- 169, 170, 171, 172, 0, 0, 173, 0, 0, 174,
- 175, 176, 0, 0, 0, 0, 0, 61, 44, 44,
- 44, 44, 44, 44, 0, 44, 44, 44, 0, 0,
- 0, 44, 0, 117, 44, 44, 44, 44, 0, 117,
- 0, 44, 44, 0, 44, 44, 44, 44, 44, 26,
- 0, 0, 56, 44, 44, 44, 44, 44, 44, 0,
- 78, 78, 78, 78, 44, 0, 0, 78, 0, 0,
- 0, 0, 0, 44, 0, 44, 44, 0, 0, 115,
- 28, 29, 30, 31, 93, 32, 33, 34, 78, 78,
- 0, 35, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 41, 0, 42, 43, 44, 45, 46, 0,
- 75, 0, 0, 47, 48, 49, 50, 51, 52, 27,
- 28, 29, 30, 31, 54, 32, 33, 34, 75, 0,
- 0, 35, 0, 57, 0, 58, 59, 0, 0, 0,
- 0, 0, 41, 0, 42, 43, 44, 45, 46, 166,
- 0, 0, 0, 47, 48, 49, 50, 51, 52, 0,
- 0, 0, 75, 0, 54, 106, 106, 106, 106, 0,
- 0, 0, 106, 57, 106, 58, 59, 0, 0, 0,
- 106, 106, 0, 121, 28, 29, 30, 31, 0, 32,
- 33, 34, 0, 106, 106, 35, 106, 106, 106, 106,
- 106, 106, 0, 0, 0, 0, 41, 0, 42, 43,
- 44, 45, 46, 0, 0, 0, 0, 47, 48, 49,
- 50, 51, 52, 163, 164, 0, 55, 0, 54, 65,
- 67, 53, 0, 60, 0, 68, 64, 57, 63, 58,
- 59, 0, 171, 172, 0, 0, 173, 0, 0, 174,
- 175, 176, 125, 0, 0, 0, 0, 66, 0, 0,
- 0, 161, 162, 163, 164, 0, 55, 0, 0, 65,
- 67, 53, 0, 60, 141, 68, 64, 0, 63, 168,
- 169, 170, 171, 172, 61, 0, 173, 0, 0, 174,
- 175, 176, 0, 0, 0, 0, 0, 66, 0, 0,
- 161, 162, 163, 164, 0, 0, 55, 0, 0, 65,
- 67, 53, 0, 60, 0, 68, 64, 0, 63, 56,
- 170, 171, 172, 0, 61, 173, 0, 0, 174, 175,
- 176, 0, 0, 0, 0, 0, 0, 66, 0, 0,
- 0, 75, 75, 75, 75, 0, 55, 0, 75, 65,
- 67, 53, 0, 60, 207, 68, 64, 0, 63, 56,
- 0, 0, 0, 0, 61, 0, 143, 160, 0, 75,
- 75, 0, 0, 161, 162, 163, 164, 66, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 167, 168, 169, 170, 171, 172, 0, 0, 173, 56,
- 0, 174, 175, 176, 61, 0, 55, 0, 0, 65,
- 67, 53, 0, 60, 218, 68, 64, 0, 63, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 66, 0, 56,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 27, 28, 29, 30, 31, 0, 32, 33, 34, 0,
- 0, 0, 35, 0, 61, 0, 0, 0, 0, 0,
- 0, 0, 0, 41, 0, 42, 43, 44, 45, 46,
- 0, 0, 0, 0, 47, 48, 49, 50, 51, 52,
- 27, 28, 29, 30, 31, 54, 32, 33, 34, 56,
- 0, 0, 35, 0, 57, 0, 58, 59, 0, 0,
- 0, 0, 0, 41, 0, 42, 43, 44, 45, 46,
- 0, 0, 0, 0, 47, 48, 49, 50, 51, 52,
- 27, 28, 29, 30, 31, 54, 32, 33, 34, 0,
- 0, 0, 35, 0, 57, 0, 58, 59, 0, 0,
- 0, 0, 0, 41, 0, 42, 43, 44, 45, 46,
- 0, 0, 0, 0, 47, 48, 49, 50, 51, 52,
- 27, 28, 29, 30, 31, 54, 32, 33, 34, 0,
- 0, 0, 35, 0, 57, 0, 58, 59, 0, 0,
- 0, 0, 0, 41, 0, 42, 43, 44, 45, 46,
- 0, 0, 0, 0, 47, 48, 49, 50, 51, 52,
- 0, 0, 0, 55, 0, 54, 65, 67, 53, 0,
- 60, 255, 68, 64, 57, 63, 58, 59, 0, 0,
- 27, 28, 29, 30, 31, 0, 32, 33, 34, 0,
- 0, 0, 35, 0, 66, 0, 0, 0, 0, 0,
- 0, 0, 0, 41, 0, 42, 43, 44, 45, 46,
- 0, 0, 0, 0, 47, 48, 49, 50, 51, 52,
- 0, 61, 0, 55, 0, 54, 65, 67, 53, 0,
- 60, 263, 68, 64, 57, 63, 58, 59, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 66, 0, 56, 0, 0, 0,
- 0, 0, 108, 0, 0, 108, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
- 108, 61, 55, 0, 108, 65, 67, 53, 0, 60,
- 0, 68, 64, 0, 63, 0, 0, 0, 0, 0,
- 161, 162, 163, 164, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66, 108, 0, 56, 167, 168, 169,
- 170, 171, 172, 0, 0, 173, 0, 0, 174, 175,
- 176, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 61, 0, 55, 0, 0, 65, 67, 53, 0, 60,
- 296, 68, 64, 0, 63, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66, 0, 56, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 27, 28, 29,
- 30, 31, 0, 32, 33, 34, 0, 0, 0, 35,
- 61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 41, 0, 42, 43, 44, 45, 46, 0, 0, 0,
- 0, 47, 48, 49, 50, 51, 52, 0, 0, 0,
- 0, 0, 54, 0, 0, 56, 0, 0, 0, 0,
- 0, 57, 0, 58, 59, 0, 0, 27, 28, 29,
- 30, 31, 0, 32, 33, 34, 0, 55, 0, 35,
- 65, 67, 53, 0, 60, 298, 68, 64, 0, 63,
- 41, 0, 42, 43, 44, 45, 46, 0, 0, 0,
- 0, 47, 48, 49, 50, 51, 52, 0, 66, 0,
- 0, 0, 54, 108, 108, 108, 108, 0, 0, 0,
- 108, 57, 108, 58, 59, 25, 27, 28, 29, 30,
- 31, 0, 32, 33, 34, 61, 0, 0, 35, 0,
- 0, 108, 108, 0, 108, 108, 108, 108, 108, 41,
- 0, 42, 43, 44, 45, 46, 0, 0, 0, 0,
- 47, 48, 49, 50, 51, 52, 0, 0, 0, 55,
- 56, 54, 65, 67, 53, 0, 60, 307, 68, 64,
- 57, 63, 58, 59, 0, 0, 27, 28, 29, 30,
- 31, 0, 32, 33, 34, 0, 0, 0, 35, 0,
- 66, 0, 0, 0, 0, 0, 0, 0, 0, 41,
- 0, 42, 43, 44, 45, 46, 0, 0, 0, 0,
- 47, 48, 49, 50, 51, 52, 0, 61, 0, 55,
- 0, 54, 65, 67, 53, 0, 60, 0, 68, 64,
- 57, 63, 58, 59, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 95, 95,
- 66, 0, 56, 0, 0, 0, 0, 0, 158, 0,
- 108, 158, 0, 0, 0, 0, 116, 95, 124, 0,
- 0, 0, 130, 95, 0, 158, 158, 61, 0, 0,
- 158, 0, 0, 0, 0, 95, 95, 95, 95, 0,
- 0, 27, 28, 29, 30, 31, 0, 32, 33, 34,
- 0, 0, 0, 35, 0, 74, 0, 0, 74, 0,
- 158, 0, 56, 0, 41, 0, 42, 43, 44, 45,
- 46, 178, 0, 74, 178, 47, 48, 49, 50, 51,
- 52, 0, 116, 0, 0, 0, 54, 0, 178, 178,
- 0, 0, 0, 178, 0, 57, 0, 58, 59, 0,
- 0, 0, 0, 0, 0, 0, 0, 74, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 178, 0, 139, 0, 0, 139, 0,
- 0, 0, 0, 27, 28, 29, 30, 31, 0, 32,
- 33, 34, 139, 139, 0, 35, 252, 139, 0, 0,
- 0, 0, 0, 0, 0, 0, 41, 0, 42, 43,
- 44, 45, 46, 0, 0, 0, 0, 47, 48, 49,
- 50, 51, 52, 284, 0, 0, 0, 139, 54, 0,
- 0, 0, 0, 0, 0, 134, 0, 57, 134, 58,
- 59, 0, 0, 27, 28, 29, 30, 31, 0, 32,
- 33, 34, 134, 134, 0, 35, 0, 134, 0, 0,
- 0, 0, 0, 0, 0, 0, 41, 0, 42, 43,
- 44, 45, 46, 0, 0, 0, 0, 47, 48, 49,
- 50, 51, 52, 0, 0, 0, 0, 134, 54, 158,
- 158, 158, 158, 0, 0, 0, 158, 57, 158, 58,
- 59, 0, 0, 0, 158, 158, 158, 158, 0, 0,
- 0, 0, 0, 137, 0, 0, 137, 158, 158, 0,
- 158, 158, 158, 158, 158, 158, 158, 0, 0, 158,
- 137, 137, 158, 158, 158, 137, 74, 74, 74, 74,
- 0, 0, 0, 74, 0, 0, 0, 0, 0, 0,
- 0, 0, 178, 178, 178, 178, 0, 0, 0, 178,
- 135, 178, 0, 135, 74, 137, 0, 178, 178, 178,
- 178, 0, 0, 0, 0, 0, 0, 135, 135, 0,
- 178, 178, 135, 178, 178, 178, 178, 178, 178, 178,
- 0, 0, 178, 0, 0, 178, 178, 178, 0, 0,
- 0, 0, 0, 0, 0, 0, 139, 139, 139, 139,
- 0, 145, 135, 139, 145, 139, 0, 0, 0, 0,
- 0, 139, 139, 139, 139, 0, 0, 0, 145, 145,
- 0, 0, 0, 145, 139, 139, 0, 139, 139, 139,
- 139, 139, 139, 139, 0, 0, 139, 0, 0, 139,
- 139, 139, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 156, 145, 0, 156, 134, 134, 134, 134,
- 0, 169, 0, 134, 169, 134, 0, 0, 0, 156,
- 156, 134, 134, 134, 134, 0, 0, 0, 169, 169,
- 0, 0, 0, 169, 134, 134, 0, 134, 134, 134,
- 134, 134, 134, 134, 0, 0, 134, 0, 0, 134,
- 134, 134, 0, 0, 156, 0, 0, 172, 0, 0,
- 172, 0, 0, 169, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 172, 172, 0, 0, 0, 172,
- 0, 0, 0, 0, 137, 137, 137, 137, 0, 0,
- 0, 137, 0, 137, 0, 0, 0, 0, 0, 137,
- 137, 137, 137, 0, 0, 0, 0, 0, 0, 172,
- 0, 0, 137, 137, 0, 137, 137, 137, 137, 137,
- 137, 137, 0, 0, 137, 0, 0, 137, 137, 137,
- 0, 135, 135, 135, 135, 0, 128, 0, 135, 128,
- 135, 0, 0, 0, 0, 0, 135, 135, 135, 135,
- 0, 0, 0, 128, 128, 0, 0, 0, 128, 135,
- 135, 0, 135, 135, 135, 135, 135, 135, 135, 0,
- 0, 135, 0, 0, 135, 135, 135, 0, 0, 0,
- 0, 0, 145, 145, 145, 145, 0, 76, 128, 145,
- 76, 145, 0, 0, 0, 0, 0, 145, 145, 145,
- 145, 0, 0, 0, 76, 76, 0, 0, 0, 76,
- 145, 145, 0, 145, 145, 145, 145, 145, 145, 145,
- 0, 0, 145, 0, 0, 145, 145, 145, 0, 0,
- 0, 0, 0, 156, 156, 156, 156, 0, 0, 76,
- 156, 0, 169, 169, 169, 169, 0, 66, 0, 169,
- 66, 169, 0, 0, 0, 0, 0, 169, 169, 169,
- 169, 156, 156, 0, 66, 66, 0, 0, 0, 66,
- 169, 169, 0, 169, 169, 169, 169, 169, 169, 169,
- 0, 0, 169, 0, 0, 169, 169, 169, 172, 172,
- 172, 172, 0, 127, 0, 172, 127, 172, 0, 66,
- 0, 0, 0, 172, 172, 172, 172, 0, 0, 0,
- 127, 127, 0, 0, 0, 127, 172, 172, 0, 172,
- 172, 172, 172, 172, 172, 172, 0, 0, 172, 0,
- 0, 172, 172, 172, 0, 0, 0, 0, 0, 82,
- 0, 0, 82, 0, 0, 127, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 82, 82, 0, 0,
- 0, 82, 114, 0, 0, 114, 0, 128, 128, 128,
- 128, 0, 0, 0, 128, 0, 128, 0, 0, 114,
- 114, 0, 128, 128, 128, 128, 0, 0, 0, 0,
- 0, 82, 0, 0, 0, 128, 128, 0, 128, 128,
- 128, 128, 128, 128, 128, 0, 0, 128, 0, 0,
- 128, 128, 128, 102, 114, 0, 102, 0, 76, 76,
- 76, 76, 179, 0, 0, 76, 0, 76, 0, 0,
- 102, 102, 0, 76, 76, 76, 76, 0, 0, 179,
- 179, 0, 0, 0, 179, 0, 76, 76, 0, 76,
- 76, 76, 76, 76, 76, 76, 0, 0, 76, 0,
- 0, 76, 76, 76, 0, 102, 0, 0, 0, 0,
- 0, 0, 0, 0, 179, 0, 0, 0, 66, 66,
- 66, 66, 157, 0, 0, 66, 0, 66, 0, 0,
- 0, 0, 0, 66, 66, 66, 66, 0, 0, 157,
- 157, 0, 0, 0, 157, 0, 66, 66, 0, 66,
- 66, 66, 66, 66, 66, 66, 0, 0, 66, 0,
- 0, 66, 66, 66, 127, 127, 127, 127, 79, 0,
- 0, 127, 0, 127, 157, 0, 0, 0, 0, 127,
- 127, 127, 127, 0, 0, 79, 79, 0, 0, 0,
- 79, 0, 127, 127, 0, 127, 127, 127, 127, 127,
- 127, 127, 0, 0, 127, 0, 0, 127, 127, 127,
- 82, 82, 82, 82, 0, 0, 0, 82, 0, 82,
- 79, 0, 0, 0, 0, 82, 82, 82, 82, 0,
- 0, 0, 0, 114, 114, 114, 114, 0, 82, 82,
- 114, 82, 82, 82, 82, 82, 82, 82, 0, 123,
- 82, 0, 123, 82, 82, 82, 0, 0, 0, 0,
- 0, 114, 114, 0, 114, 0, 123, 123, 0, 0,
- 0, 123, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 102, 102, 102, 102, 0, 0,
- 0, 102, 0, 179, 179, 179, 179, 0, 0, 0,
- 179, 123, 179, 0, 0, 0, 0, 0, 179, 179,
- 179, 179, 102, 102, 0, 0, 0, 0, 0, 0,
- 0, 179, 179, 0, 179, 179, 179, 179, 179, 179,
- 179, 0, 0, 179, 0, 0, 179, 179, 179, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 157, 157, 157, 157, 0, 0, 0,
- 157, 124, 157, 0, 124, 0, 0, 0, 157, 157,
- 157, 157, 0, 0, 0, 0, 0, 0, 124, 124,
- 0, 157, 157, 124, 157, 157, 157, 157, 157, 157,
- 157, 0, 0, 157, 0, 0, 157, 157, 157, 79,
- 79, 79, 79, 0, 118, 0, 79, 118, 79, 0,
- 0, 0, 0, 124, 79, 79, 79, 79, 0, 0,
- 0, 118, 118, 0, 0, 0, 118, 79, 79, 0,
- 79, 79, 79, 79, 79, 79, 79, 99, 0, 79,
- 0, 0, 79, 79, 79, 109, 0, 0, 119, 114,
- 0, 119, 123, 0, 0, 128, 118, 0, 0, 136,
- 137, 138, 139, 140, 0, 119, 119, 145, 146, 0,
- 119, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 123, 123, 123, 123, 0, 0, 0, 123, 120, 123,
- 0, 120, 0, 0, 0, 123, 123, 123, 123, 0,
- 119, 0, 196, 0, 0, 120, 120, 0, 123, 123,
- 120, 123, 123, 123, 123, 123, 123, 123, 0, 0,
- 123, 0, 0, 0, 0, 0, 116, 0, 0, 116,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 120, 0, 0, 116, 116, 0, 0, 0, 116, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247, 116, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 265, 124, 124, 124, 124, 0, 117, 0, 124,
- 117, 124, 0, 0, 0, 0, 0, 124, 124, 124,
- 124, 0, 0, 0, 117, 117, 0, 0, 0, 117,
- 124, 124, 0, 124, 124, 124, 124, 124, 124, 124,
- 0, 0, 124, 0, 0, 118, 118, 118, 118, 0,
- 115, 0, 118, 115, 118, 0, 0, 0, 0, 117,
- 118, 118, 118, 118, 0, 0, 0, 115, 115, 0,
- 0, 0, 115, 118, 118, 0, 118, 118, 118, 118,
- 118, 118, 118, 0, 0, 0, 327, 0, 0, 119,
- 119, 119, 119, 0, 0, 0, 119, 77, 119, 0,
- 77, 0, 115, 0, 119, 119, 119, 119, 0, 0,
- 0, 0, 0, 0, 77, 77, 0, 119, 119, 343,
- 119, 119, 119, 119, 119, 119, 119, 0, 0, 120,
- 120, 120, 120, 0, 103, 0, 120, 103, 120, 0,
- 0, 0, 0, 0, 120, 120, 120, 120, 0, 77,
- 0, 103, 103, 0, 0, 0, 103, 120, 120, 0,
- 120, 120, 120, 120, 120, 120, 120, 116, 116, 116,
- 116, 0, 104, 0, 116, 104, 116, 0, 0, 0,
- 0, 0, 116, 116, 116, 116, 103, 0, 0, 104,
- 104, 0, 0, 0, 104, 116, 116, 0, 116, 116,
- 116, 116, 116, 116, 116, 0, 0, 0, 0, 105,
- 0, 0, 105, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 104, 0, 105, 105, 0, 0,
- 0, 105, 0, 0, 0, 0, 0, 0, 117, 117,
- 117, 117, 0, 0, 0, 117, 0, 117, 0, 0,
- 0, 0, 0, 117, 117, 117, 117, 305, 0, 0,
- 0, 105, 166, 0, 0, 0, 117, 117, 0, 117,
- 117, 117, 117, 117, 117, 117, 0, 0, 0, 0,
- 0, 115, 115, 115, 115, 0, 161, 0, 115, 161,
- 115, 0, 0, 0, 0, 0, 115, 115, 115, 115,
- 0, 0, 0, 161, 161, 0, 0, 0, 161, 115,
- 115, 0, 115, 115, 115, 115, 115, 115, 115, 0,
- 0, 0, 0, 160, 0, 0, 160, 0, 77, 77,
- 77, 77, 0, 149, 0, 77, 149, 0, 161, 0,
- 160, 160, 0, 0, 0, 160, 0, 0, 0, 0,
- 149, 149, 0, 0, 0, 149, 77, 77, 0, 0,
- 0, 0, 0, 0, 0, 103, 103, 103, 103, 0,
- 126, 0, 103, 126, 103, 160, 0, 0, 0, 0,
- 103, 103, 103, 103, 0, 149, 0, 126, 126, 0,
- 0, 0, 126, 103, 103, 0, 103, 103, 103, 103,
- 103, 103, 103, 104, 104, 104, 104, 0, 107, 0,
- 104, 107, 104, 0, 0, 0, 0, 0, 104, 104,
- 104, 104, 126, 0, 0, 107, 107, 0, 0, 0,
- 107, 104, 104, 0, 104, 104, 104, 104, 104, 104,
- 105, 105, 105, 105, 0, 109, 0, 105, 109, 105,
- 0, 0, 0, 0, 0, 105, 105, 0, 105, 0,
- 107, 110, 109, 109, 110, 0, 0, 109, 105, 105,
- 0, 105, 105, 105, 105, 105, 105, 0, 110, 110,
- 160, 0, 0, 110, 0, 0, 161, 162, 163, 164,
- 0, 0, 0, 0, 0, 0, 0, 109, 0, 0,
- 0, 0, 165, 167, 168, 169, 170, 171, 172, 0,
- 0, 173, 0, 110, 174, 175, 176, 161, 161, 161,
- 161, 0, 112, 0, 161, 112, 161, 0, 0, 0,
- 0, 0, 161, 161, 0, 0, 0, 0, 0, 112,
- 112, 0, 0, 0, 112, 161, 161, 0, 161, 161,
- 161, 161, 161, 0, 160, 160, 160, 160, 0, 113,
- 0, 160, 113, 160, 149, 149, 149, 149, 0, 160,
- 160, 149, 0, 149, 112, 0, 113, 113, 0, 149,
- 149, 113, 160, 160, 0, 160, 160, 160, 160, 160,
- 0, 0, 149, 149, 0, 149, 149, 149, 149, 149,
- 0, 126, 126, 126, 126, 0, 0, 0, 126, 0,
- 126, 113, 0, 0, 0, 0, 126, 126, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 126,
- 126, 0, 126, 126, 126, 126, 126, 0, 0, 107,
- 107, 107, 107, 0, 0, 0, 107, 0, 107, 0,
- 0, 0, 0, 0, 0, 107, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 107, 107, 0,
- 107, 107, 107, 107, 107, 0, 109, 109, 109, 109,
- 0, 0, 0, 109, 0, 109, 0, 0, 0, 0,
- 0, 0, 110, 110, 110, 110, 0, 0, 0, 110,
- 0, 110, 0, 0, 109, 109, 0, 109, 109, 109,
- 109, 109, 0, 0, 0, 0, 0, 0, 0, 0,
- 110, 110, 0, 110, 110, 110, 110, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 112, 112, 112, 112, 0, 0, 0,
- 112, 0, 112, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 112, 112, 0, 112, 112, 112, 0, 0, 0,
- 113, 113, 113, 113, 0, 0, 0, 113, 0, 113,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 113, 113,
- 0, 113, 113,
-};
-static short yycheck[] = { 15,
- 36, 91, 41, 36, 40, 59, 59, 41, 195, 41,
- 59, 59, 41, 59, 59, 44, 59, 123, 93, 36,
- 93, 358, 59, 40, 96, 91, 40, 91, 41, 58,
- 59, 41, 41, 49, 63, 59, 41, 59, 41, 257,
- 204, 40, 192, 90, 60, 61, 59, 41, 198, 257,
- 59, 15, 389, 41, 101, 127, 59, 123, 41, 123,
- 289, 290, 300, 301, 93, 59, 266, 267, 268, 41,
- 270, 271, 41, 41, 91, 123, 41, 91, 123, 44,
- 309, 45, 41, 312, 48, 93, 315, 316, 317, 44,
- 123, 59, 91, 58, 59, 111, 112, 297, 63, 123,
- 59, 123, 59, 36, 37, 40, 123, 40, 40, 123,
- 257, 41, 59, 129, 0, 102, 103, 104, 105, 106,
- 107, 85, 40, 310, 123, 278, 41, 291, 93, 59,
- 312, 64, 40, 315, 316, 317, 100, 153, 154, 155,
- 156, 157, 158, 159, 59, 276, 277, 33, 93, 40,
- 36, 37, 38, 93, 40, 93, 42, 43, 40, 45,
- 40, 177, 178, 179, 180, 181, 182, 183, 184, 185,
- 334, 8, 9, 59, 0, 40, 40, 123, 64, 195,
- 59, 44, 123, 199, 200, 40, 202, 151, 204, 260,
- 257, 40, 298, 41, 93, 211, 268, 213, 214, 40,
- 125, 298, 274, 257, 317, 91, 222, 33, 36, 298,
- 36, 37, 38, 91, 40, 379, 42, 43, 205, 45,
- 41, 125, 257, 91, 257, 300, 301, 300, 301, 262,
- 260, 301, 248, 59, 250, 251, 40, 123, 64, 125,
- 126, 258, 0, 272, 273, 274, 275, 300, 301, 260,
- 279, 300, 301, 298, 300, 301, 41, 300, 301, 41,
- 296, 300, 301, 300, 301, 91, 300, 301, 300, 301,
- 41, 300, 301, 41, 303, 33, 366, 41, 36, 37,
- 38, 40, 40, 59, 42, 43, 41, 45, 304, 125,
- 300, 301, 300, 301, 310, 300, 301, 123, 125, 125,
- 126, 59, 125, 267, 123, 269, 64, 272, 273, 274,
- 275, 275, 300, 301, 279, 125, 281, 300, 301, 59,
- 336, 41, 287, 288, 289, 290, 125, 41, 300, 301,
- 44, 300, 301, 91, 41, 300, 301, 41, 303, 304,
- 305, 306, 307, 308, 309, 300, 301, 312, 59, 63,
- 315, 316, 317, 300, 301, 300, 301, 40, 123, 375,
- 300, 301, 300, 301, 41, 123, 41, 41, 126, 123,
- 256, 257, 258, 259, 260, 261, 41, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
- 41, 59, 41, 279, 280, 289, 282, 283, 284, 285,
- 286, 300, 301, 59, 41, 291, 292, 293, 294, 295,
- 296, 297, 63, 59, 41, 309, 302, 35, 312, 52,
- 52, 315, 316, 317, 15, 311, 154, 313, 314, 336,
- 256, 257, 258, 259, 260, 261, 375, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
- 202, 24, 269, 279, 280, -1, 282, 283, 284, 285,
- 286, -1, -1, 125, -1, 291, 292, 293, 294, 295,
- 296, 297, 355, 356, -1, 309, 302, 360, 312, -1,
- -1, 315, 316, 317, -1, 311, -1, 313, 314, -1,
- -1, 41, -1, 376, 44, -1, -1, 380, 256, 257,
- 258, 259, 260, 261, -1, 263, 264, 265, 58, 59,
- -1, 269, -1, 63, 272, 273, 274, 275, -1, -1,
- -1, 279, 280, -1, 282, 283, 284, 285, 286, -1,
- -1, 125, -1, 291, 292, 293, 294, 295, 296, -1,
- -1, -1, -1, 93, 302, -1, -1, -1, -1, -1,
- -1, -1, -1, 311, 33, 313, 314, 36, 37, 38,
- -1, 40, 41, 42, 43, 44, 45, 281, -1, -1,
- -1, -1, -1, 287, 288, 289, 290, -1, -1, 58,
- 59, -1, -1, -1, 63, 64, -1, -1, -1, 303,
- 304, 305, 306, 307, 308, 309, -1, -1, 312, -1,
- -1, 315, 316, 317, 266, 267, 268, -1, 270, 271,
- -1, -1, 91, -1, 93, 33, -1, -1, 36, 37,
- 38, -1, 40, 41, 42, 43, 44, 45, -1, -1,
- 281, -1, -1, -1, -1, 297, 287, 288, 289, 290,
- 58, 59, -1, -1, -1, 63, 64, 126, -1, -1,
- -1, -1, 303, 304, 305, 306, 307, 308, 309, -1,
- -1, 312, 29, -1, 315, 316, 317, -1, -1, -1,
- -1, -1, 266, 267, 268, 93, 270, 271, 33, 46,
- 47, 36, 37, 38, -1, 40, 53, 42, 43, -1,
- 45, 287, 288, 289, 290, -1, -1, -1, 65, 66,
- 67, 68, -1, 297, 59, -1, -1, -1, 126, 64,
- 306, 307, 308, 309, -1, -1, 312, -1, -1, 315,
- 316, 317, 272, 273, 274, 275, -1, -1, -1, 279,
- -1, 281, -1, -1, -1, -1, 91, 287, 288, 289,
- 290, 272, 273, 274, 275, 112, -1, -1, 279, -1,
- 300, 301, -1, 303, 304, 305, 306, 307, 308, 309,
- -1, -1, 312, -1, -1, 315, 316, 317, 123, 300,
- 301, 126, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, 261, -1, 263, 264, 265, -1, -1, -1,
- 269, -1, -1, 272, 273, 274, 275, -1, -1, -1,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, -1, -1,
- -1, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, -1, 311, 312, 313, 314, 315, 316, 317, 257,
- 258, 259, 260, 261, -1, 263, 264, 265, -1, -1,
- -1, 269, -1, -1, 272, 273, 274, 275, -1, -1,
- -1, 279, 280, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, -1,
- -1, -1, 300, 301, 302, 303, 304, 305, 306, 307,
- 308, 309, -1, 311, 312, 313, 314, 315, 316, 317,
- -1, 256, 257, 258, 259, 260, 261, 63, 263, 264,
- 265, -1, -1, -1, 269, -1, -1, 272, 273, 274,
- 275, -1, -1, -1, 279, 280, -1, 282, 283, 284,
- 285, 286, -1, -1, -1, -1, 291, 292, 293, 294,
- 295, 296, -1, -1, -1, 33, -1, 302, 36, 37,
- 38, -1, 40, -1, 42, 43, 311, 45, 313, 314,
- -1, 46, -1, -1, -1, -1, -1, -1, -1, 54,
- 287, 59, 289, 290, -1, -1, 64, -1, -1, 41,
- -1, -1, 44, -1, -1, 331, 332, 333, -1, 335,
- -1, 308, 309, -1, -1, 312, 58, 59, 315, 316,
- 317, -1, -1, 91, -1, 33, -1, -1, 36, 37,
- 38, 96, 40, -1, 42, 43, 362, 45, -1, -1,
- -1, -1, -1, 369, -1, -1, -1, 373, -1, -1,
- -1, 93, -1, -1, 119, 123, 64, -1, 126, -1,
- 386, 387, 127, -1, -1, 33, -1, -1, 36, 37,
- 38, -1, 40, -1, 42, 43, -1, 45, -1, -1,
- -1, -1, -1, 91, 287, 288, 289, 290, -1, -1,
- -1, -1, -1, -1, -1, -1, 64, -1, -1, -1,
- -1, -1, -1, -1, 41, 308, 309, 44, -1, 312,
- -1, -1, 315, 316, 317, 123, -1, -1, 126, -1,
- -1, 58, 59, 91, -1, -1, 63, -1, -1, 33,
- -1, -1, 36, 37, 38, -1, 40, -1, 42, 43,
- -1, 45, -1, -1, -1, 281, -1, -1, -1, -1,
- -1, 287, 288, 289, 290, 123, 93, -1, 126, -1,
- 64, -1, -1, -1, -1, -1, -1, 303, 304, 305,
- 306, 307, 308, 309, -1, -1, 312, -1, -1, 315,
- 316, 317, -1, -1, -1, -1, -1, 91, 256, 257,
- 258, 259, 260, 261, -1, 263, 264, 265, -1, -1,
- -1, 269, -1, 268, 272, 273, 274, 275, -1, 274,
- -1, 279, 280, -1, 282, 283, 284, 285, 286, 123,
- -1, -1, 126, 291, 292, 293, 294, 295, 296, -1,
- 272, 273, 274, 275, 302, -1, -1, 279, -1, -1,
- -1, -1, -1, 311, -1, 313, 314, -1, -1, 257,
- 258, 259, 260, 261, 262, 263, 264, 265, 300, 301,
- -1, 269, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 280, -1, 282, 283, 284, 285, 286, -1,
- 41, -1, -1, 291, 292, 293, 294, 295, 296, 257,
- 258, 259, 260, 261, 302, 263, 264, 265, 59, -1,
- -1, 269, -1, 311, -1, 313, 314, -1, -1, -1,
- -1, -1, 280, -1, 282, 283, 284, 285, 286, 63,
- -1, -1, -1, 291, 292, 293, 294, 295, 296, -1,
- -1, -1, 93, -1, 302, 272, 273, 274, 275, -1,
- -1, -1, 279, 311, 281, 313, 314, -1, -1, -1,
- 287, 288, -1, 257, 258, 259, 260, 261, -1, 263,
- 264, 265, -1, 300, 301, 269, 303, 304, 305, 306,
- 307, 308, -1, -1, -1, -1, 280, -1, 282, 283,
- 284, 285, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, 295, 296, 289, 290, -1, 33, -1, 302, 36,
- 37, 38, -1, 40, -1, 42, 43, 311, 45, 313,
- 314, -1, 308, 309, -1, -1, 312, -1, -1, 315,
- 316, 317, 59, -1, -1, -1, -1, 64, -1, -1,
- -1, 287, 288, 289, 290, -1, 33, -1, -1, 36,
- 37, 38, -1, 40, 41, 42, 43, -1, 45, 305,
- 306, 307, 308, 309, 91, -1, 312, -1, -1, 315,
- 316, 317, -1, -1, -1, -1, -1, 64, -1, -1,
- 287, 288, 289, 290, -1, -1, 33, -1, -1, 36,
- 37, 38, -1, 40, -1, 42, 43, -1, 45, 126,
- 307, 308, 309, -1, 91, 312, -1, -1, 315, 316,
- 317, -1, -1, -1, -1, -1, -1, 64, -1, -1,
- -1, 272, 273, 274, 275, -1, 33, -1, 279, 36,
- 37, 38, -1, 40, 41, 42, 43, -1, 45, 126,
- -1, -1, -1, -1, 91, -1, 93, 281, -1, 300,
- 301, -1, -1, 287, 288, 289, 290, 64, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 304, 305, 306, 307, 308, 309, -1, -1, 312, 126,
- -1, 315, 316, 317, 91, -1, 33, -1, -1, 36,
- 37, 38, -1, 40, 41, 42, 43, -1, 45, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 64, -1, 126,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, 259, 260, 261, -1, 263, 264, 265, -1,
- -1, -1, 269, -1, 91, -1, -1, -1, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, 295, 296,
- 257, 258, 259, 260, 261, 302, 263, 264, 265, 126,
- -1, -1, 269, -1, 311, -1, 313, 314, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, 295, 296,
- 257, 258, 259, 260, 261, 302, 263, 264, 265, -1,
- -1, -1, 269, -1, 311, -1, 313, 314, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, 295, 296,
- 257, 258, 259, 260, 261, 302, 263, 264, 265, -1,
- -1, -1, 269, -1, 311, -1, 313, 314, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, 295, 296,
- -1, -1, -1, 33, -1, 302, 36, 37, 38, -1,
- 40, 41, 42, 43, 311, 45, 313, 314, -1, -1,
- 257, 258, 259, 260, 261, -1, 263, 264, 265, -1,
- -1, -1, 269, -1, 64, -1, -1, -1, -1, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
- -1, -1, -1, -1, 291, 292, 293, 294, 295, 296,
- -1, 91, -1, 33, -1, 302, 36, 37, 38, -1,
- 40, 41, 42, 43, 311, 45, 313, 314, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 64, -1, 126, -1, -1, -1,
- -1, -1, 41, -1, -1, 44, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 58,
- 59, 91, 33, -1, 63, 36, 37, 38, -1, 40,
- -1, 42, 43, -1, 45, -1, -1, -1, -1, -1,
- 287, 288, 289, 290, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 64, 93, -1, 126, 304, 305, 306,
- 307, 308, 309, -1, -1, 312, -1, -1, 315, 316,
- 317, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 91, -1, 33, -1, -1, 36, 37, 38, -1, 40,
- 41, 42, 43, -1, 45, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 64, -1, 126, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, 261, -1, 263, 264, 265, -1, -1, -1, 269,
- 91, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 280, -1, 282, 283, 284, 285, 286, -1, -1, -1,
- -1, 291, 292, 293, 294, 295, 296, -1, -1, -1,
- -1, -1, 302, -1, -1, 126, -1, -1, -1, -1,
- -1, 311, -1, 313, 314, -1, -1, 257, 258, 259,
- 260, 261, -1, 263, 264, 265, -1, 33, -1, 269,
- 36, 37, 38, -1, 40, 41, 42, 43, -1, 45,
- 280, -1, 282, 283, 284, 285, 286, -1, -1, -1,
- -1, 291, 292, 293, 294, 295, 296, -1, 64, -1,
- -1, -1, 302, 272, 273, 274, 275, -1, -1, -1,
- 279, 311, 281, 313, 314, 256, 257, 258, 259, 260,
- 261, -1, 263, 264, 265, 91, -1, -1, 269, -1,
- -1, 300, 301, -1, 303, 304, 305, 306, 307, 280,
- -1, 282, 283, 284, 285, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, 295, 296, -1, -1, -1, 33,
- 126, 302, 36, 37, 38, -1, 40, 41, 42, 43,
- 311, 45, 313, 314, -1, -1, 257, 258, 259, 260,
- 261, -1, 263, 264, 265, -1, -1, -1, 269, -1,
- 64, -1, -1, -1, -1, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, 285, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, 295, 296, -1, 91, -1, 33,
- -1, 302, 36, 37, 38, -1, 40, -1, 42, 43,
- 311, 45, 313, 314, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 28, 29,
- 64, -1, 126, -1, -1, -1, -1, -1, 41, -1,
- 40, 44, -1, -1, -1, -1, 46, 47, 48, -1,
- -1, -1, 52, 53, -1, 58, 59, 91, -1, -1,
- 63, -1, -1, -1, -1, 65, 66, 67, 68, -1,
- -1, 257, 258, 259, 260, 261, -1, 263, 264, 265,
- -1, -1, -1, 269, -1, 41, -1, -1, 44, -1,
- 93, -1, 126, -1, 280, -1, 282, 283, 284, 285,
- 286, 41, -1, 59, 44, 291, 292, 293, 294, 295,
- 296, -1, 112, -1, -1, -1, 302, -1, 58, 59,
- -1, -1, -1, 63, -1, 311, -1, 313, 314, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, 41, -1, -1, 44, -1,
- -1, -1, -1, 257, 258, 259, 260, 261, -1, 263,
- 264, 265, 58, 59, -1, 269, 176, 63, -1, -1,
- -1, -1, -1, -1, -1, -1, 280, -1, 282, 283,
- 284, 285, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, 295, 296, 203, -1, -1, -1, 93, 302, -1,
- -1, -1, -1, -1, -1, 41, -1, 311, 44, 313,
- 314, -1, -1, 257, 258, 259, 260, 261, -1, 263,
- 264, 265, 58, 59, -1, 269, -1, 63, -1, -1,
- -1, -1, -1, -1, -1, -1, 280, -1, 282, 283,
- 284, 285, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, 295, 296, -1, -1, -1, -1, 93, 302, 272,
- 273, 274, 275, -1, -1, -1, 279, 311, 281, 313,
- 314, -1, -1, -1, 287, 288, 289, 290, -1, -1,
- -1, -1, -1, 41, -1, -1, 44, 300, 301, -1,
- 303, 304, 305, 306, 307, 308, 309, -1, -1, 312,
- 58, 59, 315, 316, 317, 63, 272, 273, 274, 275,
- -1, -1, -1, 279, -1, -1, -1, -1, -1, -1,
- -1, -1, 272, 273, 274, 275, -1, -1, -1, 279,
- 41, 281, -1, 44, 300, 93, -1, 287, 288, 289,
- 290, -1, -1, -1, -1, -1, -1, 58, 59, -1,
- 300, 301, 63, 303, 304, 305, 306, 307, 308, 309,
- -1, -1, 312, -1, -1, 315, 316, 317, -1, -1,
- -1, -1, -1, -1, -1, -1, 272, 273, 274, 275,
- -1, 41, 93, 279, 44, 281, -1, -1, -1, -1,
- -1, 287, 288, 289, 290, -1, -1, -1, 58, 59,
- -1, -1, -1, 63, 300, 301, -1, 303, 304, 305,
- 306, 307, 308, 309, -1, -1, 312, -1, -1, 315,
- 316, 317, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 41, 93, -1, 44, 272, 273, 274, 275,
- -1, 41, -1, 279, 44, 281, -1, -1, -1, 58,
- 59, 287, 288, 289, 290, -1, -1, -1, 58, 59,
- -1, -1, -1, 63, 300, 301, -1, 303, 304, 305,
- 306, 307, 308, 309, -1, -1, 312, -1, -1, 315,
- 316, 317, -1, -1, 93, -1, -1, 41, -1, -1,
- 44, -1, -1, 93, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 58, 59, -1, -1, -1, 63,
- -1, -1, -1, -1, 272, 273, 274, 275, -1, -1,
- -1, 279, -1, 281, -1, -1, -1, -1, -1, 287,
- 288, 289, 290, -1, -1, -1, -1, -1, -1, 93,
- -1, -1, 300, 301, -1, 303, 304, 305, 306, 307,
- 308, 309, -1, -1, 312, -1, -1, 315, 316, 317,
- -1, 272, 273, 274, 275, -1, 41, -1, 279, 44,
- 281, -1, -1, -1, -1, -1, 287, 288, 289, 290,
- -1, -1, -1, 58, 59, -1, -1, -1, 63, 300,
- 301, -1, 303, 304, 305, 306, 307, 308, 309, -1,
- -1, 312, -1, -1, 315, 316, 317, -1, -1, -1,
- -1, -1, 272, 273, 274, 275, -1, 41, 93, 279,
- 44, 281, -1, -1, -1, -1, -1, 287, 288, 289,
- 290, -1, -1, -1, 58, 59, -1, -1, -1, 63,
- 300, 301, -1, 303, 304, 305, 306, 307, 308, 309,
- -1, -1, 312, -1, -1, 315, 316, 317, -1, -1,
- -1, -1, -1, 272, 273, 274, 275, -1, -1, 93,
- 279, -1, 272, 273, 274, 275, -1, 41, -1, 279,
- 44, 281, -1, -1, -1, -1, -1, 287, 288, 289,
- 290, 300, 301, -1, 58, 59, -1, -1, -1, 63,
- 300, 301, -1, 303, 304, 305, 306, 307, 308, 309,
- -1, -1, 312, -1, -1, 315, 316, 317, 272, 273,
- 274, 275, -1, 41, -1, 279, 44, 281, -1, 93,
- -1, -1, -1, 287, 288, 289, 290, -1, -1, -1,
- 58, 59, -1, -1, -1, 63, 300, 301, -1, 303,
- 304, 305, 306, 307, 308, 309, -1, -1, 312, -1,
- -1, 315, 316, 317, -1, -1, -1, -1, -1, 41,
- -1, -1, 44, -1, -1, 93, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 58, 59, -1, -1,
- -1, 63, 41, -1, -1, 44, -1, 272, 273, 274,
- 275, -1, -1, -1, 279, -1, 281, -1, -1, 58,
- 59, -1, 287, 288, 289, 290, -1, -1, -1, -1,
- -1, 93, -1, -1, -1, 300, 301, -1, 303, 304,
- 305, 306, 307, 308, 309, -1, -1, 312, -1, -1,
- 315, 316, 317, 41, 93, -1, 44, -1, 272, 273,
- 274, 275, 41, -1, -1, 279, -1, 281, -1, -1,
- 58, 59, -1, 287, 288, 289, 290, -1, -1, 58,
- 59, -1, -1, -1, 63, -1, 300, 301, -1, 303,
- 304, 305, 306, 307, 308, 309, -1, -1, 312, -1,
- -1, 315, 316, 317, -1, 93, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, -1, 272, 273,
- 274, 275, 41, -1, -1, 279, -1, 281, -1, -1,
- -1, -1, -1, 287, 288, 289, 290, -1, -1, 58,
- 59, -1, -1, -1, 63, -1, 300, 301, -1, 303,
- 304, 305, 306, 307, 308, 309, -1, -1, 312, -1,
- -1, 315, 316, 317, 272, 273, 274, 275, 41, -1,
- -1, 279, -1, 281, 93, -1, -1, -1, -1, 287,
- 288, 289, 290, -1, -1, 58, 59, -1, -1, -1,
- 63, -1, 300, 301, -1, 303, 304, 305, 306, 307,
- 308, 309, -1, -1, 312, -1, -1, 315, 316, 317,
- 272, 273, 274, 275, -1, -1, -1, 279, -1, 281,
- 93, -1, -1, -1, -1, 287, 288, 289, 290, -1,
- -1, -1, -1, 272, 273, 274, 275, -1, 300, 301,
- 279, 303, 304, 305, 306, 307, 308, 309, -1, 41,
- 312, -1, 44, 315, 316, 317, -1, -1, -1, -1,
- -1, 300, 301, -1, 303, -1, 58, 59, -1, -1,
- -1, 63, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 272, 273, 274, 275, -1, -1,
- -1, 279, -1, 272, 273, 274, 275, -1, -1, -1,
- 279, 93, 281, -1, -1, -1, -1, -1, 287, 288,
- 289, 290, 300, 301, -1, -1, -1, -1, -1, -1,
- -1, 300, 301, -1, 303, 304, 305, 306, 307, 308,
- 309, -1, -1, 312, -1, -1, 315, 316, 317, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 272, 273, 274, 275, -1, -1, -1,
- 279, 41, 281, -1, 44, -1, -1, -1, 287, 288,
- 289, 290, -1, -1, -1, -1, -1, -1, 58, 59,
- -1, 300, 301, 63, 303, 304, 305, 306, 307, 308,
- 309, -1, -1, 312, -1, -1, 315, 316, 317, 272,
- 273, 274, 275, -1, 41, -1, 279, 44, 281, -1,
- -1, -1, -1, 93, 287, 288, 289, 290, -1, -1,
- -1, 58, 59, -1, -1, -1, 63, 300, 301, -1,
- 303, 304, 305, 306, 307, 308, 309, 33, -1, 312,
- -1, -1, 315, 316, 317, 41, -1, -1, 41, 45,
- -1, 44, 48, -1, -1, 51, 93, -1, -1, 55,
- 56, 57, 58, 59, -1, 58, 59, 63, 64, -1,
- 63, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 272, 273, 274, 275, -1, -1, -1, 279, 41, 281,
- -1, 44, -1, -1, -1, 287, 288, 289, 290, -1,
- 93, -1, 98, -1, -1, 58, 59, -1, 300, 301,
- 63, 303, 304, 305, 306, 307, 308, 309, -1, -1,
- 312, -1, -1, -1, -1, -1, 41, -1, -1, 44,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 93, -1, -1, 58, 59, -1, -1, -1, 63, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 160, 161, 162, 163, 164, 165,
- 166, 167, 168, 169, 170, 171, 172, 173, 93, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 187, 272, 273, 274, 275, -1, 41, -1, 279,
- 44, 281, -1, -1, -1, -1, -1, 287, 288, 289,
- 290, -1, -1, -1, 58, 59, -1, -1, -1, 63,
- 300, 301, -1, 303, 304, 305, 306, 307, 308, 309,
- -1, -1, 312, -1, -1, 272, 273, 274, 275, -1,
- 41, -1, 279, 44, 281, -1, -1, -1, -1, 93,
- 287, 288, 289, 290, -1, -1, -1, 58, 59, -1,
- -1, -1, 63, 300, 301, -1, 303, 304, 305, 306,
- 307, 308, 309, -1, -1, -1, 272, -1, -1, 272,
- 273, 274, 275, -1, -1, -1, 279, 41, 281, -1,
- 44, -1, 93, -1, 287, 288, 289, 290, -1, -1,
- -1, -1, -1, -1, 58, 59, -1, 300, 301, 305,
- 303, 304, 305, 306, 307, 308, 309, -1, -1, 272,
- 273, 274, 275, -1, 41, -1, 279, 44, 281, -1,
- -1, -1, -1, -1, 287, 288, 289, 290, -1, 93,
- -1, 58, 59, -1, -1, -1, 63, 300, 301, -1,
- 303, 304, 305, 306, 307, 308, 309, 272, 273, 274,
- 275, -1, 41, -1, 279, 44, 281, -1, -1, -1,
- -1, -1, 287, 288, 289, 290, 93, -1, -1, 58,
- 59, -1, -1, -1, 63, 300, 301, -1, 303, 304,
- 305, 306, 307, 308, 309, -1, -1, -1, -1, 41,
- -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, 58, 59, -1, -1,
- -1, 63, -1, -1, -1, -1, -1, -1, 272, 273,
- 274, 275, -1, -1, -1, 279, -1, 281, -1, -1,
- -1, -1, -1, 287, 288, 289, 290, 58, -1, -1,
- -1, 93, 63, -1, -1, -1, 300, 301, -1, 303,
- 304, 305, 306, 307, 308, 309, -1, -1, -1, -1,
- -1, 272, 273, 274, 275, -1, 41, -1, 279, 44,
- 281, -1, -1, -1, -1, -1, 287, 288, 289, 290,
- -1, -1, -1, 58, 59, -1, -1, -1, 63, 300,
- 301, -1, 303, 304, 305, 306, 307, 308, 309, -1,
- -1, -1, -1, 41, -1, -1, 44, -1, 272, 273,
- 274, 275, -1, 41, -1, 279, 44, -1, 93, -1,
- 58, 59, -1, -1, -1, 63, -1, -1, -1, -1,
- 58, 59, -1, -1, -1, 63, 300, 301, -1, -1,
- -1, -1, -1, -1, -1, 272, 273, 274, 275, -1,
- 41, -1, 279, 44, 281, 93, -1, -1, -1, -1,
- 287, 288, 289, 290, -1, 93, -1, 58, 59, -1,
- -1, -1, 63, 300, 301, -1, 303, 304, 305, 306,
- 307, 308, 309, 272, 273, 274, 275, -1, 41, -1,
- 279, 44, 281, -1, -1, -1, -1, -1, 287, 288,
- 289, 290, 93, -1, -1, 58, 59, -1, -1, -1,
- 63, 300, 301, -1, 303, 304, 305, 306, 307, 308,
- 272, 273, 274, 275, -1, 41, -1, 279, 44, 281,
- -1, -1, -1, -1, -1, 287, 288, -1, 290, -1,
- 93, 41, 58, 59, 44, -1, -1, 63, 300, 301,
- -1, 303, 304, 305, 306, 307, 308, -1, 58, 59,
- 281, -1, -1, 63, -1, -1, 287, 288, 289, 290,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
- -1, -1, 303, 304, 305, 306, 307, 308, 309, -1,
- -1, 312, -1, 93, 315, 316, 317, 272, 273, 274,
- 275, -1, 41, -1, 279, 44, 281, -1, -1, -1,
- -1, -1, 287, 288, -1, -1, -1, -1, -1, 58,
- 59, -1, -1, -1, 63, 300, 301, -1, 303, 304,
- 305, 306, 307, -1, 272, 273, 274, 275, -1, 41,
- -1, 279, 44, 281, 272, 273, 274, 275, -1, 287,
- 288, 279, -1, 281, 93, -1, 58, 59, -1, 287,
- 288, 63, 300, 301, -1, 303, 304, 305, 306, 307,
- -1, -1, 300, 301, -1, 303, 304, 305, 306, 307,
- -1, 272, 273, 274, 275, -1, -1, -1, 279, -1,
- 281, 93, -1, -1, -1, -1, 287, 288, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 300,
- 301, -1, 303, 304, 305, 306, 307, -1, -1, 272,
- 273, 274, 275, -1, -1, -1, 279, -1, 281, -1,
- -1, -1, -1, -1, -1, 288, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 300, 301, -1,
- 303, 304, 305, 306, 307, -1, 272, 273, 274, 275,
- -1, -1, -1, 279, -1, 281, -1, -1, -1, -1,
- -1, -1, 272, 273, 274, 275, -1, -1, -1, 279,
- -1, 281, -1, -1, 300, 301, -1, 303, 304, 305,
- 306, 307, -1, -1, -1, -1, -1, -1, -1, -1,
- 300, 301, -1, 303, 304, 305, 306, -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, 272, 273, 274, 275, -1, -1, -1,
- 279, -1, 281, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 300, 301, -1, 303, 304, 305, -1, -1, -1,
- 272, 273, 274, 275, -1, -1, -1, 279, -1, 281,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 300, 301,
- -1, 303, 304,
-};
-#define YYFINAL 1
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 317
-#if YYDEBUG
-static char *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,"WORD","METHOD","FUNCMETH","THING",
-"PMFUNC","PRIVATEREF","FUNC0SUB","UNIOPSUB","LSTOPSUB","LABEL","FORMAT","SUB",
-"ANONSUB","PACKAGE","USE","WHILE","UNTIL","IF","UNLESS","ELSE","ELSIF",
-"CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1","FUNC","UNIOP","LSTOP",
-"RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO","HASHBRACK","NOAMP","LOCAL","MY",
-"MYSUB","COLONATTR","PREC_LOW","OROP","ANDOP","NOTOP","ASSIGNOP","OROR",
-"ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP",
-"PREINC","PREDEC","POSTINC","POSTDEC","ARROW",
-};
-static char *yyrule[] = {
-"$accept : prog",
-"$$1 :",
-"prog : $$1 lineseq",
-"block : '{' remember lineseq '}'",
-"remember :",
-"mblock : '{' mremember lineseq '}'",
-"mremember :",
-"lineseq :",
-"lineseq : lineseq decl",
-"lineseq : lineseq line",
-"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 iexpr",
-"sideff : expr FOR expr",
-"else :",
-"else : ELSE mblock",
-"else : ELSIF '(' mexpr ')' mblock else",
-"cond : IF '(' remember mexpr ')' mblock else",
-"cond : UNLESS '(' remember miexpr ')' mblock else",
-"cont :",
-"cont : CONTINUE block",
-"loop : label WHILE '(' remember mtexpr ')' mblock cont",
-"loop : label UNTIL '(' remember miexpr ')' mblock cont",
-"loop : label FOR MY remember my_scalar '(' mexpr ')' mblock cont",
-"loop : label FOR scalar '(' remember mexpr ')' mblock cont",
-"loop : label FOR '(' remember mexpr ')' mblock cont",
-"loop : label FOR '(' remember mnexpr ';' mtexpr ';' mnexpr ')' mblock",
-"loop : label block cont",
-"nexpr :",
-"nexpr : sideff",
-"texpr :",
-"texpr : expr",
-"iexpr : expr",
-"mexpr : expr",
-"mnexpr : nexpr",
-"mtexpr : texpr",
-"miexpr : iexpr",
-"label :",
-"label : LABEL",
-"decl : format",
-"decl : subrout",
-"decl : mysubrout",
-"decl : package",
-"decl : use",
-"format : FORMAT startformsub formname block",
-"formname : WORD",
-"formname :",
-"mysubrout : MYSUB startsub subname proto subattrlist subbody",
-"subrout : SUB startsub subname proto subattrlist subbody",
-"startsub :",
-"startanonsub :",
-"startformsub :",
-"subname : WORD",
-"proto :",
-"proto : THING",
-"subattrlist :",
-"subattrlist : COLONATTR THING",
-"subattrlist : COLONATTR",
-"myattrlist : COLONATTR THING",
-"myattrlist : COLONATTR",
-"subbody : block",
-"subbody : ';'",
-"package : PACKAGE WORD ';'",
-"package : PACKAGE ';'",
-"$$2 :",
-"use : USE startsub $$2 WORD WORD listexpr ';'",
-"expr : expr ANDOP expr",
-"expr : expr OROP expr",
-"expr : argexpr",
-"argexpr : argexpr ','",
-"argexpr : argexpr ',' term",
-"argexpr : term",
-"listop : LSTOP indirob argexpr",
-"listop : FUNC '(' indirob expr ')'",
-"listop : term ARROW method '(' listexprcom ')'",
-"listop : term ARROW method",
-"listop : METHOD indirob listexpr",
-"listop : FUNCMETH indirob '(' listexprcom ')'",
-"listop : LSTOP listexpr",
-"listop : FUNC '(' listexprcom ')'",
-"$$3 :",
-"listop : LSTOPSUB startanonsub block $$3 listexpr",
-"method : METHOD",
-"method : scalar",
-"subscripted : star '{' expr ';' '}'",
-"subscripted : scalar '[' expr ']'",
-"subscripted : term ARROW '[' expr ']'",
-"subscripted : subscripted '[' expr ']'",
-"subscripted : scalar '{' expr ';' '}'",
-"subscripted : term ARROW '{' expr ';' '}'",
-"subscripted : subscripted '{' expr ';' '}'",
-"subscripted : term ARROW '(' ')'",
-"subscripted : term ARROW '(' expr ')'",
-"subscripted : subscripted '(' expr ')'",
-"subscripted : subscripted '(' ')'",
-"term : term ASSIGNOP term",
-"term : term POWOP term",
-"term : term MULOP term",
-"term : term ADDOP term",
-"term : term SHIFTOP term",
-"term : term RELOP term",
-"term : term EQOP term",
-"term : term BITANDOP term",
-"term : term BITOROP term",
-"term : term DOTDOT term",
-"term : term ANDAND term",
-"term : term OROR term",
-"term : term '?' term ':' term",
-"term : term MATCHOP term",
-"term : '-' term",
-"term : '+' term",
-"term : '!' term",
-"term : '~' term",
-"term : REFGEN term",
-"term : term POSTINC",
-"term : term POSTDEC",
-"term : PREINC term",
-"term : PREDEC term",
-"term : myattrterm",
-"term : LOCAL term",
-"term : '(' expr ')'",
-"term : '(' ')'",
-"term : '[' expr ']'",
-"term : '[' ']'",
-"term : HASHBRACK expr ';' '}'",
-"term : HASHBRACK ';' '}'",
-"term : ANONSUB startanonsub proto subattrlist block",
-"term : scalar",
-"term : star",
-"term : hsh",
-"term : ary",
-"term : arylen",
-"term : subscripted",
-"term : '(' expr ')' '[' expr ']'",
-"term : '(' ')' '[' expr ']'",
-"term : ary '[' expr ']'",
-"term : ary '{' expr ';' '}'",
-"term : THING",
-"term : amper",
-"term : amper '(' ')'",
-"term : amper '(' expr ')'",
-"term : NOAMP WORD listexpr",
-"term : DO term",
-"term : DO block",
-"term : DO WORD '(' ')'",
-"term : DO WORD '(' expr ')'",
-"term : DO scalar '(' ')'",
-"term : DO scalar '(' expr ')'",
-"term : LOOPEX",
-"term : LOOPEX term",
-"term : NOTOP argexpr",
-"term : UNIOP",
-"term : UNIOP block",
-"term : UNIOP term",
-"term : UNIOPSUB term",
-"term : FUNC0",
-"term : FUNC0 '(' ')'",
-"term : FUNC0SUB",
-"term : FUNC1 '(' ')'",
-"term : FUNC1 '(' expr ')'",
-"term : PMFUNC '(' term ')'",
-"term : PMFUNC '(' term ',' term ')'",
-"term : WORD",
-"term : listop",
-"myattrterm : MY myterm myattrlist",
-"myattrterm : MY myterm",
-"myterm : '(' expr ')'",
-"myterm : '(' ')'",
-"myterm : scalar",
-"myterm : hsh",
-"myterm : ary",
-"listexpr :",
-"listexpr : argexpr",
-"listexprcom :",
-"listexprcom : expr",
-"listexprcom : expr ','",
-"my_scalar : scalar",
-"amper : '&' indirob",
-"scalar : '$' indirob",
-"ary : '@' indirob",
-"hsh : '%' indirob",
-"arylen : DOLSHARP indirob",
-"star : '*' indirob",
-"indirob : WORD",
-"indirob : scalar",
-"indirob : block",
-"indirob : PRIVATEREF",
-};
-#endif
-#define yyclearin (yychar=(-1))
-#define yyerrok (yyerrflag=0)
-#ifdef YYSTACKSIZE
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#endif
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH 500
-#endif
-#endif
-#line 726 "perly.y"
- /* PROGRAM */
-
-/* more stuff added to make perly_c.diff easier to apply */
-
-#ifdef yyparse
-#undef yyparse
-#endif
-#define yyparse() Perl_yyparse(pTHX)
-
-#line 1371 "perly.c"
-#define YYABORT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-int
-yyparse()
-{
- register int yym, yyn, yystate;
- register short *yyssp;
- register YYSTYPE *yyvsp;
- short* yyss;
- YYSTYPE* yyvs;
- unsigned yystacksize = YYSTACKSIZE;
- int retval = 0;
-#if YYDEBUG
- register char *yys;
-#endif
-
- struct ysv *ysave;
-#ifdef USE_ITHREADS
- ENTER; /* force yydestruct() before we return */
-#endif
- New(73, ysave, 1, struct ysv);
- SAVEDESTRUCTOR_X(yydestruct, ysave);
- ysave->oldyydebug = yydebug;
- ysave->oldyynerrs = yynerrs;
- ysave->oldyyerrflag = yyerrflag;
- ysave->oldyychar = yychar;
- ysave->oldyyval = yyval;
- ysave->oldyylval = yylval;
-
-#if YYDEBUG
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- /*
- ** Initialize private stacks (yyparse may be called from an action)
- */
- New(73, yyss, yystacksize, short);
- New(73, yyvs, yystacksize, YYSTYPE);
- ysave->yyss = yyss;
- ysave->yyvs = yyvs;
- if (!yyvs || !yyss)
- 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";
- PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- /*
- ** reallocate and recover. Note that pointers
- ** have to be reset, or bad things will happen
- */
- int yyps_index = (yyssp - yyss);
- int yypv_index = (yyvsp - yyvs);
- yystacksize += YYSTACKSIZE;
- ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
- ysave->yyss = Renew(yyss, yystacksize, short);
- if (!yyvs || !yyss)
- goto yyoverflow;
- yyssp = yyss + yyps_index;
- yyvsp = yyvs + yypv_index;
- }
- *++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;
-#ifdef lint
- goto yynewerror;
-#endif
-yynewerror:
- yyerror("syntax error");
-#ifdef lint
- 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)
- PerlIO_printf(Perl_debug_log,
- "yydebug: state %d, error recovery shifting to state %d\n",
- *yyssp, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- /*
- ** reallocate and recover. Note that pointers
- ** have to be reset, or bad things will happen
- */
- int yyps_index = (yyssp - yyss);
- int yypv_index = (yyvsp - yyvs);
- yystacksize += YYSTACKSIZE;
- ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
- ysave->yyss = Renew(yyss, yystacksize, short);
- if (!yyvs || !yyss)
- goto yyoverflow;
- yyssp = yyss + yyps_index;
- yyvsp = yyvs + yypv_index;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n",
- *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";
- PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
- }
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
-case 1:
-#line 125 "perly.y"
-{
-#if defined(YYDEBUG) && defined(DEBUGGING)
- yydebug = (PL_debug & 1);
-#endif
- PL_expect = XSTATE;
- }
-break;
-case 2:
-#line 132 "perly.y"
-{ newPROG(yyvsp[0].opval); }
-break;
-case 3:
-#line 136 "perly.y"
-{ if (PL_copline > (line_t)yyvsp[-3].ival)
- PL_copline = yyvsp[-3].ival;
- yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
-break;
-case 4:
-#line 142 "perly.y"
-{ yyval.ival = block_start(TRUE); }
-break;
-case 5:
-#line 146 "perly.y"
-{ if (PL_copline > (line_t)yyvsp[-3].ival)
- PL_copline = yyvsp[-3].ival;
- yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
-break;
-case 6:
-#line 152 "perly.y"
-{ yyval.ival = block_start(FALSE); }
-break;
-case 7:
-#line 156 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 8:
-#line 158 "perly.y"
-{ yyval.opval = yyvsp[-1].opval; }
-break;
-case 9:
-#line 160 "perly.y"
-{ yyval.opval = append_list(OP_LINESEQ,
- (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval);
- PL_pad_reset_pending = TRUE;
- if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; }
-break;
-case 10:
-#line 167 "perly.y"
-{ yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); }
-break;
-case 12:
-#line 170 "perly.y"
-{ if (yyvsp[-1].pval != Nullch) {
- yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0));
- }
- else {
- yyval.opval = Nullop;
- PL_copline = NOLINE;
- }
- PL_expect = XSTATE; }
-break;
-case 13:
-#line 179 "perly.y"
-{ yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval);
- PL_expect = XSTATE; }
-break;
-case 14:
-#line 184 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 15:
-#line 186 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 16:
-#line 188 "perly.y"
-{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); }
-break;
-case 17:
-#line 190 "perly.y"
-{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); }
-break;
-case 18:
-#line 192 "perly.y"
-{ yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); }
-break;
-case 19:
-#line 194 "perly.y"
-{ yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);}
-break;
-case 20:
-#line 196 "perly.y"
-{ yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival,
- Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); }
-break;
-case 21:
-#line 201 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 22:
-#line 203 "perly.y"
-{ (yyvsp[0].opval)->op_flags |= OPf_PARENS; yyval.opval = scope(yyvsp[0].opval); }
-break;
-case 23:
-#line 205 "perly.y"
-{ PL_copline = yyvsp[-5].ival;
- yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval);
- PL_hints |= HINT_BLOCK_SCOPE; }
-break;
-case 24:
-#line 211 "perly.y"
-{ PL_copline = yyvsp[-6].ival;
- yyval.opval = block_end(yyvsp[-4].ival,
- newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
-break;
-case 25:
-#line 215 "perly.y"
-{ PL_copline = yyvsp[-6].ival;
- yyval.opval = block_end(yyvsp[-4].ival,
- newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
-break;
-case 26:
-#line 221 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 27:
-#line 223 "perly.y"
-{ yyval.opval = scope(yyvsp[0].opval); }
-break;
-case 28:
-#line 227 "perly.y"
-{ PL_copline = yyvsp[-6].ival;
- yyval.opval = block_end(yyvsp[-4].ival,
- newSTATEOP(0, yyvsp[-7].pval,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
-break;
-case 29:
-#line 233 "perly.y"
-{ PL_copline = yyvsp[-6].ival;
- yyval.opval = block_end(yyvsp[-4].ival,
- newSTATEOP(0, yyvsp[-7].pval,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
-break;
-case 30:
-#line 239 "perly.y"
-{ yyval.opval = block_end(yyvsp[-6].ival,
- newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
-break;
-case 31:
-#line 242 "perly.y"
-{ yyval.opval = block_end(yyvsp[-4].ival,
- newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP),
- yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
-break;
-case 32:
-#line 246 "perly.y"
-{ yyval.opval = block_end(yyvsp[-4].ival,
- newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
-break;
-case 33:
-#line 250 "perly.y"
-{ OP *forop = append_elem(OP_LINESEQ,
- scalar(yyvsp[-6].opval),
- newWHILEOP(0, 1, (LOOP*)Nullop,
- yyvsp[-9].ival, scalar(yyvsp[-4].opval),
- yyvsp[0].opval, scalar(yyvsp[-2].opval)));
- PL_copline = yyvsp[-9].ival;
- yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); }
-break;
-case 34:
-#line 258 "perly.y"
-{ yyval.opval = newSTATEOP(0, yyvsp[-2].pval,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); }
-break;
-case 35:
-#line 264 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 37:
-#line 269 "perly.y"
-{ (void)scan_num("1", &yylval); yyval.opval = yylval.opval; }
-break;
-case 39:
-#line 274 "perly.y"
-{ yyval.opval = invert(scalar(yyvsp[0].opval)); }
-break;
-case 40:
-#line 278 "perly.y"
-{ yyval.opval = yyvsp[0].opval; intro_my(); }
-break;
-case 41:
-#line 282 "perly.y"
-{ yyval.opval = yyvsp[0].opval; intro_my(); }
-break;
-case 42:
-#line 286 "perly.y"
-{ yyval.opval = yyvsp[0].opval; intro_my(); }
-break;
-case 43:
-#line 290 "perly.y"
-{ yyval.opval = yyvsp[0].opval; intro_my(); }
-break;
-case 44:
-#line 294 "perly.y"
-{ yyval.pval = Nullch; }
-break;
-case 46:
-#line 299 "perly.y"
-{ yyval.ival = 0; }
-break;
-case 47:
-#line 301 "perly.y"
-{ yyval.ival = 0; }
-break;
-case 48:
-#line 303 "perly.y"
-{ yyval.ival = 0; }
-break;
-case 49:
-#line 305 "perly.y"
-{ yyval.ival = 0; }
-break;
-case 50:
-#line 307 "perly.y"
-{ yyval.ival = 0; }
-break;
-case 51:
-#line 311 "perly.y"
-{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
-break;
-case 52:
-#line 314 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 53:
-#line 315 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 54:
-#line 319 "perly.y"
-{ newMYSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
-break;
-case 55:
-#line 323 "perly.y"
-{ newATTRSUB(yyvsp[-4].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
-break;
-case 56:
-#line 327 "perly.y"
-{ yyval.ival = start_subparse(FALSE, 0); }
-break;
-case 57:
-#line 331 "perly.y"
-{ yyval.ival = start_subparse(FALSE, CVf_ANON); }
-break;
-case 58:
-#line 335 "perly.y"
-{ yyval.ival = start_subparse(TRUE, 0); }
-break;
-case 59:
-#line 338 "perly.y"
-{ STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv,n_a);
- if (strEQ(name, "BEGIN") || strEQ(name, "END")
- || strEQ(name, "INIT") || strEQ(name, "CHECK"))
- CvSPECIAL_on(PL_compcv);
- yyval.opval = yyvsp[0].opval; }
-break;
-case 60:
-#line 346 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 62:
-#line 351 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 63:
-#line 353 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 64:
-#line 355 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 65:
-#line 359 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 66:
-#line 361 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 67:
-#line 364 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 68:
-#line 365 "perly.y"
-{ yyval.opval = Nullop; PL_expect = XSTATE; }
-break;
-case 69:
-#line 369 "perly.y"
-{ package(yyvsp[-1].opval); }
-break;
-case 70:
-#line 371 "perly.y"
-{ package(Nullop); }
-break;
-case 71:
-#line 375 "perly.y"
-{ CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
-break;
-case 72:
-#line 377 "perly.y"
-{ utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
-break;
-case 73:
-#line 381 "perly.y"
-{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
-break;
-case 74:
-#line 383 "perly.y"
-{ yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); }
-break;
-case 76:
-#line 388 "perly.y"
-{ yyval.opval = yyvsp[-1].opval; }
-break;
-case 77:
-#line 390 "perly.y"
-{ yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
-break;
-case 79:
-#line 395 "perly.y"
-{ yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED,
- prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); }
-break;
-case 80:
-#line 398 "perly.y"
-{ yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED,
- prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); }
-break;
-case 81:
-#line 401 "perly.y"
-{ yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval),
- newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); }
-break;
-case 82:
-#line 406 "perly.y"
-{ yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, scalar(yyvsp[-2].opval),
- newUNOP(OP_METHOD, 0, yyvsp[0].opval))); }
-break;
-case 83:
-#line 410 "perly.y"
-{ yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval),
- newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); }
-break;
-case 84:
-#line 415 "perly.y"
-{ yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval),
- newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); }
-break;
-case 85:
-#line 420 "perly.y"
-{ yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
-break;
-case 86:
-#line 422 "perly.y"
-{ yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
-break;
-case 87:
-#line 424 "perly.y"
-{ yyvsp[0].opval = newANONATTRSUB(yyvsp[-1].ival, 0, Nullop, yyvsp[0].opval); }
-break;
-case 88:
-#line 426 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); }
-break;
-case 91:
-#line 436 "perly.y"
-{ yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); }
-break;
-case 92:
-#line 438 "perly.y"
-{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
-break;
-case 93:
-#line 440 "perly.y"
-{ yyval.opval = newBINOP(OP_AELEM, 0,
- ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
- scalar(yyvsp[-1].opval));}
-break;
-case 94:
-#line 444 "perly.y"
-{ yyval.opval = newBINOP(OP_AELEM, 0,
- ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
- scalar(yyvsp[-1].opval));}
-break;
-case 95:
-#line 448 "perly.y"
-{ yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
- PL_expect = XOPERATOR; }
-break;
-case 96:
-#line 451 "perly.y"
-{ yyval.opval = newBINOP(OP_HELEM, 0,
- ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
- jmaybe(yyvsp[-2].opval));
- PL_expect = XOPERATOR; }
-break;
-case 97:
-#line 456 "perly.y"
-{ yyval.opval = newBINOP(OP_HELEM, 0,
- ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
- jmaybe(yyvsp[-2].opval));
- PL_expect = XOPERATOR; }
-break;
-case 98:
-#line 461 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar(yyvsp[-3].opval))); }
-break;
-case 99:
-#line 464 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, yyvsp[-1].opval,
- newCVREF(0, scalar(yyvsp[-4].opval)))); }
-break;
-case 100:
-#line 469 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, yyvsp[-1].opval,
- newCVREF(0, scalar(yyvsp[-3].opval)))); }
-break;
-case 101:
-#line 473 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar(yyvsp[-2].opval))); }
-break;
-case 102:
-#line 479 "perly.y"
-{ yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); }
-break;
-case 103:
-#line 481 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
-case 104:
-#line 483 "perly.y"
-{ if (yyvsp[-1].ival != OP_REPEAT)
- scalar(yyvsp[-2].opval);
- yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); }
-break;
-case 105:
-#line 487 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
-case 106:
-#line 489 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
-case 107:
-#line 491 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
-case 108:
-#line 493 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
-case 109:
-#line 495 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
-case 110:
-#line 497 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
-case 111:
-#line 499 "perly.y"
-{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
-break;
-case 112:
-#line 501 "perly.y"
-{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
-break;
-case 113:
-#line 503 "perly.y"
-{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
-break;
-case 114:
-#line 505 "perly.y"
-{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
-break;
-case 115:
-#line 507 "perly.y"
-{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
-break;
-case 116:
-#line 510 "perly.y"
-{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
-break;
-case 117:
-#line 512 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 118:
-#line 514 "perly.y"
-{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
-break;
-case 119:
-#line 516 "perly.y"
-{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
-break;
-case 120:
-#line 518 "perly.y"
-{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
-break;
-case 121:
-#line 520 "perly.y"
-{ yyval.opval = newUNOP(OP_POSTINC, 0,
- mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
-break;
-case 122:
-#line 523 "perly.y"
-{ yyval.opval = newUNOP(OP_POSTDEC, 0,
- mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
-break;
-case 123:
-#line 526 "perly.y"
-{ yyval.opval = newUNOP(OP_PREINC, 0,
- mod(scalar(yyvsp[0].opval), OP_PREINC)); }
-break;
-case 124:
-#line 529 "perly.y"
-{ yyval.opval = newUNOP(OP_PREDEC, 0,
- mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
-break;
-case 125:
-#line 532 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 126:
-#line 534 "perly.y"
-{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
-break;
-case 127:
-#line 536 "perly.y"
-{ yyval.opval = sawparens(yyvsp[-1].opval); }
-break;
-case 128:
-#line 538 "perly.y"
-{ yyval.opval = sawparens(newNULLLIST()); }
-break;
-case 129:
-#line 540 "perly.y"
-{ yyval.opval = newANONLIST(yyvsp[-1].opval); }
-break;
-case 130:
-#line 542 "perly.y"
-{ yyval.opval = newANONLIST(Nullop); }
-break;
-case 131:
-#line 544 "perly.y"
-{ yyval.opval = newANONHASH(yyvsp[-2].opval); }
-break;
-case 132:
-#line 546 "perly.y"
-{ yyval.opval = newANONHASH(Nullop); }
-break;
-case 133:
-#line 548 "perly.y"
-{ yyval.opval = newANONATTRSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
-break;
-case 134:
-#line 550 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 135:
-#line 552 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 136:
-#line 554 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 137:
-#line 556 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 138:
-#line 558 "perly.y"
-{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
-break;
-case 139:
-#line 560 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 140:
-#line 562 "perly.y"
-{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
-break;
-case 141:
-#line 564 "perly.y"
-{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
-break;
-case 142:
-#line 566 "perly.y"
-{ yyval.opval = prepend_elem(OP_ASLICE,
- newOP(OP_PUSHMARK, 0),
- newLISTOP(OP_ASLICE, 0,
- list(yyvsp[-1].opval),
- ref(yyvsp[-3].opval, OP_ASLICE))); }
-break;
-case 143:
-#line 572 "perly.y"
-{ yyval.opval = prepend_elem(OP_HSLICE,
- newOP(OP_PUSHMARK, 0),
- newLISTOP(OP_HSLICE, 0,
- list(yyvsp[-2].opval),
- ref(oopsHV(yyvsp[-4].opval), OP_HSLICE)));
- PL_expect = XOPERATOR; }
-break;
-case 144:
-#line 579 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 145:
-#line 581 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); }
-break;
-case 146:
-#line 583 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); }
-break;
-case 147:
-#line 585 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); }
-break;
-case 148:
-#line 588 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
-break;
-case 149:
-#line 591 "perly.y"
-{ yyval.opval = dofile(yyvsp[0].opval); }
-break;
-case 150:
-#line 593 "perly.y"
-{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
-break;
-case 151:
-#line 595 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB,
- OPf_SPECIAL|OPf_STACKED,
- prepend_elem(OP_LIST,
- scalar(newCVREF(
- (OPpENTERSUB_AMPER<<8),
- scalar(yyvsp[-2].opval)
- )),Nullop)); dep();}
-break;
-case 152:
-#line 603 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB,
- OPf_SPECIAL|OPf_STACKED,
- append_elem(OP_LIST,
- yyvsp[-1].opval,
- scalar(newCVREF(
- (OPpENTERSUB_AMPER<<8),
- scalar(yyvsp[-3].opval)
- )))); dep();}
-break;
-case 153:
-#line 612 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
- prepend_elem(OP_LIST,
- scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();}
-break;
-case 154:
-#line 616 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
- prepend_elem(OP_LIST,
- yyvsp[-1].opval,
- scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();}
-break;
-case 155:
-#line 621 "perly.y"
-{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
- PL_hints |= HINT_BLOCK_SCOPE; }
-break;
-case 156:
-#line 624 "perly.y"
-{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
-break;
-case 157:
-#line 626 "perly.y"
-{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
-break;
-case 158:
-#line 628 "perly.y"
-{ yyval.opval = newOP(yyvsp[0].ival, 0); }
-break;
-case 159:
-#line 630 "perly.y"
-{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
-break;
-case 160:
-#line 632 "perly.y"
-{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
-break;
-case 161:
-#line 634 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
-break;
-case 162:
-#line 637 "perly.y"
-{ yyval.opval = newOP(yyvsp[0].ival, 0); }
-break;
-case 163:
-#line 639 "perly.y"
-{ yyval.opval = newOP(yyvsp[-2].ival, 0); }
-break;
-case 164:
-#line 641 "perly.y"
-{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
- scalar(yyvsp[0].opval)); }
-break;
-case 165:
-#line 644 "perly.y"
-{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
-break;
-case 166:
-#line 646 "perly.y"
-{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
-break;
-case 167:
-#line 648 "perly.y"
-{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
-break;
-case 168:
-#line 650 "perly.y"
-{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
-break;
-case 171:
-#line 656 "perly.y"
-{ yyval.opval = my_attrs(yyvsp[-1].opval,yyvsp[0].opval); }
-break;
-case 172:
-#line 658 "perly.y"
-{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
-break;
-case 173:
-#line 662 "perly.y"
-{ yyval.opval = sawparens(yyvsp[-1].opval); }
-break;
-case 174:
-#line 664 "perly.y"
-{ yyval.opval = sawparens(newNULLLIST()); }
-break;
-case 175:
-#line 666 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 176:
-#line 668 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 177:
-#line 670 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 178:
-#line 674 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 179:
-#line 676 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 180:
-#line 680 "perly.y"
-{ yyval.opval = Nullop; }
-break;
-case 181:
-#line 682 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-case 182:
-#line 684 "perly.y"
-{ yyval.opval = yyvsp[-1].opval; }
-break;
-case 183:
-#line 688 "perly.y"
-{ PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); }
-break;
-case 184:
-#line 692 "perly.y"
-{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
-break;
-case 185:
-#line 696 "perly.y"
-{ yyval.opval = newSVREF(yyvsp[0].opval); }
-break;
-case 186:
-#line 700 "perly.y"
-{ yyval.opval = newAVREF(yyvsp[0].opval); }
-break;
-case 187:
-#line 704 "perly.y"
-{ yyval.opval = newHVREF(yyvsp[0].opval); }
-break;
-case 188:
-#line 708 "perly.y"
-{ yyval.opval = newAVREF(yyvsp[0].opval); }
-break;
-case 189:
-#line 712 "perly.y"
-{ yyval.opval = newGVREF(0,yyvsp[0].opval); }
-break;
-case 190:
-#line 716 "perly.y"
-{ yyval.opval = scalar(yyvsp[0].opval); }
-break;
-case 191:
-#line 718 "perly.y"
-{ yyval.opval = scalar(yyvsp[0].opval); }
-break;
-case 192:
-#line 720 "perly.y"
-{ yyval.opval = scope(yyvsp[0].opval); }
-break;
-case 193:
-#line 723 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
-break;
-#line 2412 "perly.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- PerlIO_printf(Perl_debug_log,
- "yydebug: after reduction, shifting from state 0 to state %d\n",
- 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";
- PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n",
- 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)
- PerlIO_printf(Perl_debug_log,
- "yydebug: after reduction, shifting from state %d to state %d\n",
- *yyssp, yystate);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- /*
- ** reallocate and recover. Note that pointers
- ** have to be reset, or bad things will happen
- */
- int yyps_index = (yyssp - yyss);
- int yypv_index = (yyvsp - yyvs);
- yystacksize += YYSTACKSIZE;
- ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
- ysave->yyss = Renew(yyss, yystacksize, short);
- if (!yyvs || !yyss)
- goto yyoverflow;
- yyssp = yyss + yyps_index;
- yyvsp = yyvs + yypv_index;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("Out of memory for yacc stack");
-yyabort:
- retval = 1;
-yyaccept:
-#ifdef USE_ITHREADS
- LEAVE; /* force yydestruct() before we return */
-#endif
- return retval;
-}
-
-#ifdef PERL_OBJECT
-#include "XSUB.h"
-#endif
-
-static void
-yydestruct(pTHXo_ void *ptr)
-{
- struct ysv* ysave = (struct ysv*)ptr;
- if (ysave->yyss) Safefree(ysave->yyss);
- if (ysave->yyvs) Safefree(ysave->yyvs);
- yydebug = ysave->oldyydebug;
- yynerrs = ysave->oldyynerrs;
- yyerrflag = ysave->oldyyerrflag;
- yychar = ysave->oldyychar;
- yyval = ysave->oldyyval;
- yylval = ysave->oldyylval;
- Safefree(ysave);
-}
diff --git a/contrib/perl5/perly.fixer b/contrib/perl5/perly.fixer
deleted file mode 100755
index daa558e..0000000
--- a/contrib/perl5/perly.fixer
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/bin/sh
-
-# Fix up yacc output to allow dynamic allocation. Since perly.c
-# is now provided with the perl source, this should not be necessary.
-#
-# However, if the user wishes to use byacc, or wishes to try another
-# compiler compiler (e.g. bison or yacc), this script will get run.
-# See makefile run_byacc target for more details.
-#
-# Currently, only byacc version 1.8 is fully supported.
-#
-# Hacks to make it work with Interactive's SysVr3 Version 2.2
-# doughera@lafvax.lafayette.edu (Andy Dougherty) 3/23/91
-#
-# Additional information to make the BSD section work with SunOS 4.0.2
-# tdinger@East.Sun.COM (Tom Dinger) 4/15/1991
-
-input=$1
-output=$2
-tmp=/tmp/f$$
-
-if grep 'yaccpar 1.8 (Berkeley)' $input >/dev/null 2>&1; then
- cp $input $output
- # Don't expect the diff to do everything -- do some by hand
- if test -f perly_c.diff; then
- patch -F3 $output <perly_c.diff
- sed -e '/^[ ]*printf("yydebug:/s/printf(/PerlIO_printf(Perl_debug_log, /' \
- -e '/^#line /s/"y[.]tab[.]c"/"perly.c"/' \
- -e '/\[\] *= *[{]/s/^/static /' \
- -e '/^static static/s/^static //' \
- -e '/^#define.WORD/,/^#define.ARROW/d' \
- -e '/^int.yydebug/,/^#define.yystacksize/d' \
- < $output > $tmp && mv -f $tmp $output || exit 1
- rm -rf $input
- echo "If you need to debug perly.c, you need to fix up the #line"
- echo "directives yourself."
- fi
- exit
-elif grep 'yaccpar 1.9 (Berkeley)' $input >/dev/null 2>&1; then
- if test -f perly.c.dif9; then
- patch -F3 $output <perly.c.dif9
- sed -e '/^[ ]*printf("yydebug:/s/printf(/PerlIO_printf(Perl_debug_log, /' \
- -e '/^#line /s/"y[.]tab[.]c"/"perly.c"/' \
- -e '/\[\] *= *[{]/s/^/static /' \
- -e '/^static static/s/^static //' \
- -e '/^#define.WORD/,/^#define.ARROW/d' \
- -e '/^int.yydebug/,/^#define.yystacksize/d' \
- < $output > $tmp && mv -f $tmp $output || exit 1
- rm -rf $input
- echo "If you need to debug perly.c, you need to fix up the #line"
- echo "directives yourself."
- exit 0
- else
- echo "Diffs from byacc-1.9 are not available."
- echo "If you wish to proceed anyway, do"
- echo "cp $input $output"
- echo "cp y.tab.h perly.h"
- echo "and re-run make. Otherwise, I will use the old perly.c"
- touch perly.c
- # Exit with error status to stop make.
- exit 1
- fi
-fi
-
-plan="unknown"
-
-echo ""
-echo "Warning: the yacc you have used is not directly supported by perl."
-echo "The perly.fixer script will attempt to make some changes to the generated"
-echo "file. The changes may be incomplete and that might lead to problems later"
-echo "(especially with complex scripts). You may need to apply the changes"
-echo "embedded in perl.fixer (and/or perly_c.dif*) by hand."
-echo ""
-
-# Below, we check for various characteristic yaccpar outputs.
-
-# Test for BSD 4.3 version.
-# Also tests for the SunOS 4.0.2 version
-egrep 'YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];
-short[ ]*yys\[ *YYMAXDEPTH *\] *;
-yyps *= *&yys\[ *-1 *\];
-yypv *= *&yyv\[ *-1 *\];
-if *\( *\+\+yyps *>=* *&yys\[ *YYMAXDEPTH *\] *\)' $input >$tmp 2>/dev/null
-
-set `wc -l $tmp`
-if test "$1" = "5"; then
- plan="bsd43"
-fi
-
-if test "$plan" = "unknown"; then
- # Test for ISC 2.2 version (probably generic SysVr3).
-egrep 'YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];
-int[ ]*yys\[ *YYMAXDEPTH *\] *;
-yyps *= *&yys\[ *-1 *\];
-yypv *= *&yyv\[ *-1 *\];
-if *\( *\+\+yy_ps *>= *&yys\[ *YYMAXDEPTH *\] *\)' $input >$tmp 2>/dev/null
-
- set `wc -l $tmp`
- if test "$1" = "5"; then
- plan="isc"
- fi
-fi
-
-# ------
-
-case "$plan" in
- ##################################################################
- # The SunOS 4.0.2 version has the comparison fixed already.
- # Also added are out of memory checks (makes porting the generated
- # code easier) For most systems, it can't hurt. -- TD
- "bsd43")
- echo "Attempting to patch perly.c to allow dynamic yacc stack allocation"
- echo "Assuming bsd4.3 yaccpar"
- cat >$tmp <<'END'
-/YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];/c\
-int yymaxdepth = YYMAXDEPTH;\
-YYSTYPE *yyv; /* where the values are stored */\
-short *yys;\
-short *maxyyps;
-
-/short[ ]*yys\[ *YYMAXDEPTH *\] *;/d
-
-/yyps *= *&yys\[ *-1 *\];/d
-
-/yypv *= *&yyv\[ *-1 *\];/c\
-\ if (!yyv) {\
-\ New(73, yyv, yymaxdepth, YYSTYPE);\
-\ New(73, yys, yymaxdepth, short);\
-\ if ( !yyv || !yys ) {\
-\ yyerror( "out of memory" );\
-\ return(1);\
-\ }\
-\ maxyyps = &yys[yymaxdepth];\
-\ }\
-\ yyps = &yys[-1];\
-\ yypv = &yyv[-1];
-
-
-/if *( *\+\+yyps *>=* *&yys\[ *YYMAXDEPTH *\] *)/c\
-\ if( ++yyps >= maxyyps ) {\
-\ int tv = yypv - yyv;\
-\ int ts = yyps - yys;\
-\
-\ yymaxdepth *= 2;\
-\ Renew(yyv, yymaxdepth, YYSTYPE);\
-\ Renew(yys, yymaxdepth, short);\
-\ if ( !yyv || !yys ) {\
-\ yyerror( "yacc stack overflow" );\
-\ return(1);\
-\ }\
-\ yyps = yys + ts;\
-\ yypv = yyv + tv;\
-\ maxyyps = &yys[yymaxdepth];\
-\ }
-
-/yacc stack overflow.*}/d
-/yacc stack overflow/,/}/d
-END
- if sed -f $tmp <$input >$output
- then echo "The edit seems to have been applied okay."
- else echo "The edit seems to have failed!"
- fi
- ;;
-
- #######################################################
- "isc") # Interactive Systems 2.2 version
- echo "Attempting to patch perly.c to allow dynamic yacc stack allocation"
- echo "Assuming Interactive SysVr3 2.2 yaccpar"
- # Easier to simply put whole script here than to modify the
- # bsd script with sed.
- # Main changes: yaccpar sometimes uses yy_ps and yy_pv
- # which are local register variables.
- # if(++yyps > YYMAXDEPTH) had opening brace on next line.
- # I've kept that brace in along with a call to yyerror if
- # realloc fails. (Actually, I just don't know how to do
- # multi-line matches in sed.)
- cat > $tmp << 'END'
-/YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];/c\
-int yymaxdepth = YYMAXDEPTH;\
-YYSTYPE *yyv; /* where the values are stored */\
-int *yys;\
-int *maxyyps;
-
-/int[ ]*yys\[ *YYMAXDEPTH *\] *;/d
-
-/yyps *= *&yys\[ *-1 *\];/d
-
-/yypv *= *&yyv\[ *-1 *\];/c\
-\ if (!yyv) {\
-\ New(73, yyv, yymaxdepth, YYSTYPE);\
-\ New(73, yys, yymaxdepth, int);\
-\ maxyyps = &yys[yymaxdepth];\
-\ }\
-\ yyps = &yys[-1];\
-\ yypv = &yyv[-1];
-
-/if *( *\+\+yy_ps *>= *&yys\[ *YYMAXDEPTH *\] *)/c\
-\ if( ++yy_ps >= maxyyps ) {\
-\ int tv = yy_pv - yyv;\
-\ int ts = yy_ps - yys;\
-\
-\ yymaxdepth *= 2;\
-\ Renew(yyv, yymaxdepth, YYSTYPE);\
-\ Renew(yys, yymaxdepth, int);\
-\ yy_ps = yyps = yys + ts;\
-\ yy_pv = yypv = yyv + tv;\
-\ maxyyps = &yys[yymaxdepth];\
-\ }\
-\ if (yyv == NULL || yys == NULL)
-END
- if sed -f $tmp < $input > $output
- then echo "The edit seems to have been applied okay."
- else echo "The edit seems to have failed!"
- fi
- ;;
-
- ######################################################
- # Plan still unknown
- *)
- echo "Unable to patch perly.c to allow dynamic yacc stack allocation (plan=$plan)"
- # just do minimal change to write $output from $input
- sed -e 's/Received token/ *** Received token/' $input >$output
- ;;
-esac
-
-echo ""
-rm -rf $tmp $input
diff --git a/contrib/perl5/perly.h b/contrib/perl5/perly.h
deleted file mode 100644
index 15dfa0c..0000000
--- a/contrib/perl5/perly.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifdef PERL_CORE
-#define WORD 257
-#define METHOD 258
-#define FUNCMETH 259
-#define THING 260
-#define PMFUNC 261
-#define PRIVATEREF 262
-#define FUNC0SUB 263
-#define UNIOPSUB 264
-#define LSTOPSUB 265
-#define LABEL 266
-#define FORMAT 267
-#define SUB 268
-#define ANONSUB 269
-#define PACKAGE 270
-#define USE 271
-#define WHILE 272
-#define UNTIL 273
-#define IF 274
-#define UNLESS 275
-#define ELSE 276
-#define ELSIF 277
-#define CONTINUE 278
-#define FOR 279
-#define LOOPEX 280
-#define DOTDOT 281
-#define FUNC0 282
-#define FUNC1 283
-#define FUNC 284
-#define UNIOP 285
-#define LSTOP 286
-#define RELOP 287
-#define EQOP 288
-#define MULOP 289
-#define ADDOP 290
-#define DOLSHARP 291
-#define DO 292
-#define HASHBRACK 293
-#define NOAMP 294
-#define LOCAL 295
-#define MY 296
-#define MYSUB 297
-#define COLONATTR 298
-#define PREC_LOW 299
-#define OROP 300
-#define ANDOP 301
-#define NOTOP 302
-#define ASSIGNOP 303
-#define OROR 304
-#define ANDAND 305
-#define BITOROP 306
-#define BITANDOP 307
-#define SHIFTOP 308
-#define MATCHOP 309
-#define UMINUS 310
-#define REFGEN 311
-#define POWOP 312
-#define PREINC 313
-#define PREDEC 314
-#define POSTINC 315
-#define POSTDEC 316
-#define ARROW 317
-#endif /* PERL_CORE */
-
-typedef union {
- I32 ival;
- char *pval;
- OP *opval;
- GV *gvval;
-} YYSTYPE;
diff --git a/contrib/perl5/perly.y b/contrib/perl5/perly.y
deleted file mode 100644
index f9c5c5f..0000000
--- a/contrib/perl5/perly.y
+++ /dev/null
@@ -1,735 +0,0 @@
-/* perly.y
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * 'I see,' laughed Strider. 'I look foul and feel fair. Is that it?
- * All that is gold does not glitter, not all those who wander are lost.'
- */
-
-%{
-#include "EXTERN.h"
-#define PERL_IN_PERLY_C
-#include "perl.h"
-
-#define dep() deprecate("\"do\" to call subroutines")
-
-/* stuff included here to make perly_c.diff apply better */
-
-#define yydebug PL_yydebug
-#define yynerrs PL_yynerrs
-#define yyerrflag PL_yyerrflag
-#define yychar PL_yychar
-#define yyval PL_yyval
-#define yylval PL_yylval
-
-struct ysv {
- short* yyss;
- YYSTYPE* yyvs;
- int oldyydebug;
- int oldyynerrs;
- int oldyyerrflag;
- int oldyychar;
- YYSTYPE oldyyval;
- YYSTYPE oldyylval;
-};
-
-static void yydestruct(pTHXo_ void *ptr);
-
-%}
-
-%start prog
-
-%{
-#if 0 /* get this from perly.h instead */
-%}
-
-%union {
- I32 ival;
- char *pval;
- OP *opval;
- GV *gvval;
-}
-
-%{
-#endif /* 0 */
-
-#ifdef USE_PURE_BISON
-#define YYLEX_PARAM (&yychar)
-#define yylex yylex_r
-#endif
-
-%}
-
-%token <ival> '{'
-
-%token <opval> WORD METHOD FUNCMETH THING PMFUNC PRIVATEREF
-%token <opval> FUNC0SUB UNIOPSUB LSTOPSUB
-%token <pval> LABEL
-%token <ival> FORMAT SUB ANONSUB PACKAGE USE
-%token <ival> WHILE UNTIL IF UNLESS ELSE ELSIF CONTINUE FOR
-%token <ival> LOOPEX DOTDOT
-%token <ival> FUNC0 FUNC1 FUNC UNIOP LSTOP
-%token <ival> RELOP EQOP MULOP ADDOP
-%token <ival> DOLSHARP DO HASHBRACK NOAMP
-%token <ival> LOCAL MY MYSUB
-%token COLONATTR
-
-%type <ival> prog decl format startsub startanonsub startformsub
-%type <ival> remember mremember '&'
-%type <opval> block mblock lineseq line loop cond else
-%type <opval> expr term subscripted scalar ary hsh arylen star amper sideff
-%type <opval> argexpr nexpr texpr iexpr mexpr mnexpr mtexpr miexpr
-%type <opval> listexpr listexprcom indirob listop method
-%type <opval> formname subname proto subbody cont my_scalar
-%type <opval> subattrlist myattrlist mysubrout myattrterm myterm
-%type <pval> label
-
-%nonassoc PREC_LOW
-%nonassoc LOOPEX
-
-%left <ival> OROP
-%left ANDOP
-%right NOTOP
-%nonassoc LSTOP LSTOPSUB
-%left ','
-%right <ival> ASSIGNOP
-%right '?' ':'
-%nonassoc DOTDOT
-%left OROR
-%left ANDAND
-%left <ival> BITOROP
-%left <ival> BITANDOP
-%nonassoc EQOP
-%nonassoc RELOP
-%nonassoc UNIOP UNIOPSUB
-%left <ival> SHIFTOP
-%left ADDOP
-%left MULOP
-%left <ival> MATCHOP
-%right '!' '~' UMINUS REFGEN
-%right <ival> POWOP
-%nonassoc PREINC PREDEC POSTINC POSTDEC
-%left ARROW
-%nonassoc <ival> ')'
-%left '('
-%left '[' '{'
-
-%% /* RULES */
-
-prog : /* NULL */
- {
-#if defined(YYDEBUG) && defined(DEBUGGING)
- yydebug = (PL_debug & 1);
-#endif
- PL_expect = XSTATE;
- }
- /*CONTINUED*/ lineseq
- { newPROG($2); }
- ;
-
-block : '{' remember lineseq '}'
- { if (PL_copline > (line_t)$1)
- PL_copline = $1;
- $$ = block_end($2, $3); }
- ;
-
-remember: /* NULL */ /* start a full lexical scope */
- { $$ = block_start(TRUE); }
- ;
-
-mblock : '{' mremember lineseq '}'
- { if (PL_copline > (line_t)$1)
- PL_copline = $1;
- $$ = block_end($2, $3); }
- ;
-
-mremember: /* NULL */ /* start a partial lexical scope */
- { $$ = block_start(FALSE); }
- ;
-
-lineseq : /* NULL */
- { $$ = Nullop; }
- | lineseq decl
- { $$ = $1; }
- | lineseq line
- { $$ = append_list(OP_LINESEQ,
- (LISTOP*)$1, (LISTOP*)$2);
- PL_pad_reset_pending = TRUE;
- if ($1 && $2) PL_hints |= HINT_BLOCK_SCOPE; }
- ;
-
-line : label cond
- { $$ = newSTATEOP(0, $1, $2); }
- | loop /* loops add their own labels */
- | label ';'
- { if ($1 != Nullch) {
- $$ = newSTATEOP(0, $1, newOP(OP_NULL, 0));
- }
- else {
- $$ = Nullop;
- PL_copline = NOLINE;
- }
- PL_expect = XSTATE; }
- | label sideff ';'
- { $$ = newSTATEOP(0, $1, $2);
- PL_expect = XSTATE; }
- ;
-
-sideff : error
- { $$ = Nullop; }
- | expr
- { $$ = $1; }
- | expr IF expr
- { $$ = newLOGOP(OP_AND, 0, $3, $1); }
- | expr UNLESS expr
- { $$ = newLOGOP(OP_OR, 0, $3, $1); }
- | expr WHILE expr
- { $$ = newLOOPOP(OPf_PARENS, 1, scalar($3), $1); }
- | expr UNTIL iexpr
- { $$ = newLOOPOP(OPf_PARENS, 1, $3, $1);}
- | expr FOR expr
- { $$ = newFOROP(0, Nullch, $2,
- Nullop, $3, $1, Nullop); }
- ;
-
-else : /* NULL */
- { $$ = Nullop; }
- | ELSE mblock
- { ($2)->op_flags |= OPf_PARENS; $$ = scope($2); }
- | ELSIF '(' mexpr ')' mblock else
- { PL_copline = $1;
- $$ = newCONDOP(0, $3, scope($5), $6);
- PL_hints |= HINT_BLOCK_SCOPE; }
- ;
-
-cond : IF '(' remember mexpr ')' mblock else
- { PL_copline = $1;
- $$ = block_end($3,
- newCONDOP(0, $4, scope($6), $7)); }
- | UNLESS '(' remember miexpr ')' mblock else
- { PL_copline = $1;
- $$ = block_end($3,
- newCONDOP(0, $4, scope($6), $7)); }
- ;
-
-cont : /* NULL */
- { $$ = Nullop; }
- | CONTINUE block
- { $$ = scope($2); }
- ;
-
-loop : label WHILE '(' remember mtexpr ')' mblock cont
- { PL_copline = $2;
- $$ = block_end($4,
- newSTATEOP(0, $1,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- $2, $5, $7, $8))); }
- | label UNTIL '(' remember miexpr ')' mblock cont
- { PL_copline = $2;
- $$ = block_end($4,
- newSTATEOP(0, $1,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- $2, $5, $7, $8))); }
- | label FOR MY remember my_scalar '(' mexpr ')' mblock cont
- { $$ = block_end($4,
- newFOROP(0, $1, $2, $5, $7, $9, $10)); }
- | label FOR scalar '(' remember mexpr ')' mblock cont
- { $$ = block_end($5,
- newFOROP(0, $1, $2, mod($3, OP_ENTERLOOP),
- $6, $8, $9)); }
- | label FOR '(' remember mexpr ')' mblock cont
- { $$ = block_end($4,
- newFOROP(0, $1, $2, Nullop, $5, $7, $8)); }
- | label FOR '(' remember mnexpr ';' mtexpr ';' mnexpr ')' mblock
- /* basically fake up an initialize-while lineseq */
- { OP *forop = append_elem(OP_LINESEQ,
- scalar($5),
- newWHILEOP(0, 1, (LOOP*)Nullop,
- $2, scalar($7),
- $11, scalar($9)));
- PL_copline = $2;
- $$ = block_end($4, newSTATEOP(0, $1, forop)); }
- | label block cont /* a block is a loop that happens once */
- { $$ = newSTATEOP(0, $1,
- newWHILEOP(0, 1, (LOOP*)Nullop,
- NOLINE, Nullop, $2, $3)); }
- ;
-
-nexpr : /* NULL */
- { $$ = Nullop; }
- | sideff
- ;
-
-texpr : /* NULL means true */
- { (void)scan_num("1", &yylval); $$ = yylval.opval; }
- | expr
- ;
-
-iexpr : expr
- { $$ = invert(scalar($1)); }
- ;
-
-mexpr : expr
- { $$ = $1; intro_my(); }
- ;
-
-mnexpr : nexpr
- { $$ = $1; intro_my(); }
- ;
-
-mtexpr : texpr
- { $$ = $1; intro_my(); }
- ;
-
-miexpr : iexpr
- { $$ = $1; intro_my(); }
- ;
-
-label : /* empty */
- { $$ = Nullch; }
- | LABEL
- ;
-
-decl : format
- { $$ = 0; }
- | subrout
- { $$ = 0; }
- | mysubrout
- { $$ = 0; }
- | package
- { $$ = 0; }
- | use
- { $$ = 0; }
- ;
-
-format : FORMAT startformsub formname block
- { newFORM($2, $3, $4); }
- ;
-
-formname: WORD { $$ = $1; }
- | /* NULL */ { $$ = Nullop; }
- ;
-
-mysubrout: MYSUB startsub subname proto subattrlist subbody
- { newMYSUB($2, $3, $4, $5, $6); }
- ;
-
-subrout : SUB startsub subname proto subattrlist subbody
- { newATTRSUB($2, $3, $4, $5, $6); }
- ;
-
-startsub: /* NULL */ /* start a regular subroutine scope */
- { $$ = start_subparse(FALSE, 0); }
- ;
-
-startanonsub: /* NULL */ /* start an anonymous subroutine scope */
- { $$ = start_subparse(FALSE, CVf_ANON); }
- ;
-
-startformsub: /* NULL */ /* start a format subroutine scope */
- { $$ = start_subparse(TRUE, 0); }
- ;
-
-subname : WORD { STRLEN n_a; char *name = SvPV(((SVOP*)$1)->op_sv,n_a);
- if (strEQ(name, "BEGIN") || strEQ(name, "END")
- || strEQ(name, "INIT") || strEQ(name, "CHECK"))
- CvSPECIAL_on(PL_compcv);
- $$ = $1; }
- ;
-
-proto : /* NULL */
- { $$ = Nullop; }
- | THING
- ;
-
-subattrlist: /* NULL */
- { $$ = Nullop; }
- | COLONATTR THING
- { $$ = $2; }
- | COLONATTR
- { $$ = Nullop; }
- ;
-
-myattrlist: COLONATTR THING
- { $$ = $2; }
- | COLONATTR
- { $$ = Nullop; }
- ;
-
-subbody : block { $$ = $1; }
- | ';' { $$ = Nullop; PL_expect = XSTATE; }
- ;
-
-package : PACKAGE WORD ';'
- { package($2); }
- | PACKAGE ';'
- { package(Nullop); }
- ;
-
-use : USE startsub
- { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
- WORD WORD listexpr ';'
- { utilize($1, $2, $4, $5, $6); }
- ;
-
-expr : expr ANDOP expr
- { $$ = newLOGOP(OP_AND, 0, $1, $3); }
- | expr OROP expr
- { $$ = newLOGOP($2, 0, $1, $3); }
- | argexpr %prec PREC_LOW
- ;
-
-argexpr : argexpr ','
- { $$ = $1; }
- | argexpr ',' term
- { $$ = append_elem(OP_LIST, $1, $3); }
- | term %prec PREC_LOW
- ;
-
-listop : LSTOP indirob argexpr
- { $$ = convert($1, OPf_STACKED,
- prepend_elem(OP_LIST, newGVREF($1,$2), $3) ); }
- | FUNC '(' indirob expr ')'
- { $$ = convert($1, OPf_STACKED,
- prepend_elem(OP_LIST, newGVREF($1,$3), $4) ); }
- | term ARROW method '(' listexprcom ')'
- { $$ = convert(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, scalar($1), $5),
- newUNOP(OP_METHOD, 0, $3))); }
- | term ARROW method
- { $$ = convert(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, scalar($1),
- newUNOP(OP_METHOD, 0, $3))); }
- | METHOD indirob listexpr
- { $$ = convert(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, $2, $3),
- newUNOP(OP_METHOD, 0, $1))); }
- | FUNCMETH indirob '(' listexprcom ')'
- { $$ = convert(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, $2, $4),
- newUNOP(OP_METHOD, 0, $1))); }
- | LSTOP listexpr
- { $$ = convert($1, 0, $2); }
- | FUNC '(' listexprcom ')'
- { $$ = convert($1, 0, $3); }
- | LSTOPSUB startanonsub block
- { $3 = newANONATTRSUB($2, 0, Nullop, $3); }
- listexpr %prec LSTOP
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST,
- prepend_elem(OP_LIST, $3, $5), $1)); }
- ;
-
-method : METHOD
- | scalar
- ;
-
-subscripted: star '{' expr ';' '}'
- { $$ = newBINOP(OP_GELEM, 0, $1, scalar($3)); }
- | scalar '[' expr ']'
- { $$ = newBINOP(OP_AELEM, 0, oopsAV($1), scalar($3)); }
- | term ARROW '[' expr ']'
- { $$ = newBINOP(OP_AELEM, 0,
- ref(newAVREF($1),OP_RV2AV),
- scalar($4));}
- | subscripted '[' expr ']'
- { $$ = newBINOP(OP_AELEM, 0,
- ref(newAVREF($1),OP_RV2AV),
- scalar($3));}
- | scalar '{' expr ';' '}'
- { $$ = newBINOP(OP_HELEM, 0, oopsHV($1), jmaybe($3));
- PL_expect = XOPERATOR; }
- | term ARROW '{' expr ';' '}'
- { $$ = newBINOP(OP_HELEM, 0,
- ref(newHVREF($1),OP_RV2HV),
- jmaybe($4));
- PL_expect = XOPERATOR; }
- | subscripted '{' expr ';' '}'
- { $$ = newBINOP(OP_HELEM, 0,
- ref(newHVREF($1),OP_RV2HV),
- jmaybe($3));
- PL_expect = XOPERATOR; }
- | term ARROW '(' ')'
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar($1))); }
- | term ARROW '(' expr ')'
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, $4,
- newCVREF(0, scalar($1)))); }
-
- | subscripted '(' expr ')'
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, $3,
- newCVREF(0, scalar($1)))); }
- | subscripted '(' ')'
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- newCVREF(0, scalar($1))); }
-
-
-
-term : term ASSIGNOP term
- { $$ = newASSIGNOP(OPf_STACKED, $1, $2, $3); }
- | term POWOP term
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term MULOP term
- { if ($2 != OP_REPEAT)
- scalar($1);
- $$ = newBINOP($2, 0, $1, scalar($3)); }
- | term ADDOP term
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term SHIFTOP term
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term RELOP term
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term EQOP term
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term BITANDOP term
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term BITOROP term
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term DOTDOT term
- { $$ = newRANGE($2, scalar($1), scalar($3));}
- | term ANDAND term
- { $$ = newLOGOP(OP_AND, 0, $1, $3); }
- | term OROR term
- { $$ = newLOGOP(OP_OR, 0, $1, $3); }
- | term '?' term ':' term
- { $$ = newCONDOP(0, $1, $3, $5); }
- | term MATCHOP term
- { $$ = bind_match($2, $1, $3); }
-
- | '-' term %prec UMINUS
- { $$ = newUNOP(OP_NEGATE, 0, scalar($2)); }
- | '+' term %prec UMINUS
- { $$ = $2; }
- | '!' term
- { $$ = newUNOP(OP_NOT, 0, scalar($2)); }
- | '~' term
- { $$ = newUNOP(OP_COMPLEMENT, 0, scalar($2));}
- | REFGEN term
- { $$ = newUNOP(OP_REFGEN, 0, mod($2,OP_REFGEN)); }
- | term POSTINC
- { $$ = newUNOP(OP_POSTINC, 0,
- mod(scalar($1), OP_POSTINC)); }
- | term POSTDEC
- { $$ = newUNOP(OP_POSTDEC, 0,
- mod(scalar($1), OP_POSTDEC)); }
- | PREINC term
- { $$ = newUNOP(OP_PREINC, 0,
- mod(scalar($2), OP_PREINC)); }
- | PREDEC term
- { $$ = newUNOP(OP_PREDEC, 0,
- mod(scalar($2), OP_PREDEC)); }
- | myattrterm %prec UNIOP
- { $$ = $1; }
- | LOCAL term %prec UNIOP
- { $$ = localize($2,$1); }
- | '(' expr ')'
- { $$ = sawparens($2); }
- | '(' ')'
- { $$ = sawparens(newNULLLIST()); }
- | '[' expr ']'
- { $$ = newANONLIST($2); }
- | '[' ']'
- { $$ = newANONLIST(Nullop); }
- | HASHBRACK expr ';' '}' %prec '('
- { $$ = newANONHASH($2); }
- | HASHBRACK ';' '}' %prec '('
- { $$ = newANONHASH(Nullop); }
- | ANONSUB startanonsub proto subattrlist block %prec '('
- { $$ = newANONATTRSUB($2, $3, $4, $5); }
- | scalar %prec '('
- { $$ = $1; }
- | star %prec '('
- { $$ = $1; }
- | hsh %prec '('
- { $$ = $1; }
- | ary %prec '('
- { $$ = $1; }
- | arylen %prec '('
- { $$ = newUNOP(OP_AV2ARYLEN, 0, ref($1, OP_AV2ARYLEN));}
- | subscripted
- { $$ = $1; }
- | '(' expr ')' '[' expr ']'
- { $$ = newSLICEOP(0, $5, $2); }
- | '(' ')' '[' expr ']'
- { $$ = newSLICEOP(0, $4, Nullop); }
- | ary '[' expr ']'
- { $$ = prepend_elem(OP_ASLICE,
- newOP(OP_PUSHMARK, 0),
- newLISTOP(OP_ASLICE, 0,
- list($3),
- ref($1, OP_ASLICE))); }
- | ary '{' expr ';' '}'
- { $$ = prepend_elem(OP_HSLICE,
- newOP(OP_PUSHMARK, 0),
- newLISTOP(OP_HSLICE, 0,
- list($3),
- ref(oopsHV($1), OP_HSLICE)));
- PL_expect = XOPERATOR; }
- | THING %prec '('
- { $$ = $1; }
- | amper
- { $$ = newUNOP(OP_ENTERSUB, 0, scalar($1)); }
- | amper '(' ')'
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); }
- | amper '(' expr ')'
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, $3, scalar($1))); }
- | NOAMP WORD listexpr
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, $3, scalar($2))); }
- | DO term %prec UNIOP
- { $$ = dofile($2); }
- | DO block %prec '('
- { $$ = newUNOP(OP_NULL, OPf_SPECIAL, scope($2)); }
- | DO WORD '(' ')'
- { $$ = newUNOP(OP_ENTERSUB,
- OPf_SPECIAL|OPf_STACKED,
- prepend_elem(OP_LIST,
- scalar(newCVREF(
- (OPpENTERSUB_AMPER<<8),
- scalar($2)
- )),Nullop)); dep();}
- | DO WORD '(' expr ')'
- { $$ = newUNOP(OP_ENTERSUB,
- OPf_SPECIAL|OPf_STACKED,
- append_elem(OP_LIST,
- $4,
- scalar(newCVREF(
- (OPpENTERSUB_AMPER<<8),
- scalar($2)
- )))); dep();}
- | DO scalar '(' ')'
- { $$ = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
- prepend_elem(OP_LIST,
- scalar(newCVREF(0,scalar($2))), Nullop)); dep();}
- | DO scalar '(' expr ')'
- { $$ = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
- prepend_elem(OP_LIST,
- $4,
- scalar(newCVREF(0,scalar($2))))); dep();}
- | LOOPEX
- { $$ = newOP($1, OPf_SPECIAL);
- PL_hints |= HINT_BLOCK_SCOPE; }
- | LOOPEX term
- { $$ = newLOOPEX($1,$2); }
- | NOTOP argexpr
- { $$ = newUNOP(OP_NOT, 0, scalar($2)); }
- | UNIOP
- { $$ = newOP($1, 0); }
- | UNIOP block
- { $$ = newUNOP($1, 0, $2); }
- | UNIOP term
- { $$ = newUNOP($1, 0, $2); }
- | UNIOPSUB term
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- append_elem(OP_LIST, $2, scalar($1))); }
- | FUNC0
- { $$ = newOP($1, 0); }
- | FUNC0 '(' ')'
- { $$ = newOP($1, 0); }
- | FUNC0SUB
- { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
- scalar($1)); }
- | FUNC1 '(' ')'
- { $$ = newOP($1, OPf_SPECIAL); }
- | FUNC1 '(' expr ')'
- { $$ = newUNOP($1, 0, $3); }
- | PMFUNC '(' term ')'
- { $$ = pmruntime($1, $3, Nullop); }
- | PMFUNC '(' term ',' term ')'
- { $$ = pmruntime($1, $3, $5); }
- | WORD
- | listop
- ;
-
-myattrterm: MY myterm myattrlist
- { $$ = my_attrs($2,$3); }
- | MY myterm
- { $$ = localize($2,$1); }
- ;
-
-myterm : '(' expr ')'
- { $$ = sawparens($2); }
- | '(' ')'
- { $$ = sawparens(newNULLLIST()); }
- | scalar %prec '('
- { $$ = $1; }
- | hsh %prec '('
- { $$ = $1; }
- | ary %prec '('
- { $$ = $1; }
- ;
-
-listexpr: /* NULL */ %prec PREC_LOW
- { $$ = Nullop; }
- | argexpr %prec PREC_LOW
- { $$ = $1; }
- ;
-
-listexprcom: /* NULL */
- { $$ = Nullop; }
- | expr
- { $$ = $1; }
- | expr ','
- { $$ = $1; }
- ;
-
-my_scalar: scalar
- { PL_in_my = 0; $$ = my($1); }
- ;
-
-amper : '&' indirob
- { $$ = newCVREF($1,$2); }
- ;
-
-scalar : '$' indirob
- { $$ = newSVREF($2); }
- ;
-
-ary : '@' indirob
- { $$ = newAVREF($2); }
- ;
-
-hsh : '%' indirob
- { $$ = newHVREF($2); }
- ;
-
-arylen : DOLSHARP indirob
- { $$ = newAVREF($2); }
- ;
-
-star : '*' indirob
- { $$ = newGVREF(0,$2); }
- ;
-
-indirob : WORD
- { $$ = scalar($1); }
- | scalar %prec PREC_LOW
- { $$ = scalar($1); }
- | block
- { $$ = scope($1); }
-
- | PRIVATEREF
- { $$ = $1; }
- ;
-
-%% /* PROGRAM */
-
-/* more stuff added to make perly_c.diff easier to apply */
-
-#ifdef yyparse
-#undef yyparse
-#endif
-#define yyparse() Perl_yyparse(pTHX)
-
diff --git a/contrib/perl5/perly_c.diff b/contrib/perl5/perly_c.diff
deleted file mode 100644
index 0cfe10f..0000000
--- a/contrib/perl5/perly_c.diff
+++ /dev/null
@@ -1,189 +0,0 @@
-*** y.tab.c.orig Thu Aug 26 22:31:26 1999
---- y.tab.c Thu Aug 26 22:32:22 1999
-***************
-*** 1447,1456 ****
- yyparse()
- {
- register int yym, yyn, yystate;
- #if YYDEBUG
- register char *yys;
-! extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
---- 1447,1476 ----
- yyparse()
- {
- register int yym, yyn, yystate;
-+ register short *yyssp;
-+ register YYSTYPE *yyvsp;
-+ short* yyss;
-+ YYSTYPE* yyvs;
-+ unsigned yystacksize = YYSTACKSIZE;
-+ int retval = 0;
- #if YYDEBUG
- register char *yys;
-! #endif
-
-+ struct ysv *ysave;
-+ #ifdef USE_ITHREADS
-+ ENTER; /* force yydestruct() before we return */
-+ #endif
-+ New(73, ysave, 1, struct ysv);
-+ SAVEDESTRUCTOR_X(yydestruct, ysave);
-+ ysave->oldyydebug = yydebug;
-+ ysave->oldyynerrs = yynerrs;
-+ ysave->oldyyerrflag = yyerrflag;
-+ ysave->oldyychar = yychar;
-+ ysave->oldyyval = yyval;
-+ ysave->oldyylval = yylval;
-+
-+ #if YYDEBUG
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
-***************
-*** 1463,1468 ****
---- 1483,1498 ----
- yyerrflag = 0;
- yychar = (-1);
-
-+ /*
-+ ** Initialize private stacks (yyparse may be called from an action)
-+ */
-+ New(73, yyss, yystacksize, short);
-+ New(73, yyvs, yystacksize, YYSTYPE);
-+ ysave->yyss = yyss;
-+ ysave->yyvs = yyvs;
-+ if (!yyvs || !yyss)
-+ goto yyoverflow;
-+
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-***************
-*** 1493,1499 ****
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
-! goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
---- 1523,1541 ----
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
-! /*
-! ** reallocate and recover. Note that pointers
-! ** have to be reset, or bad things will happen
-! */
-! int yyps_index = (yyssp - yyss);
-! int yypv_index = (yyvsp - yyvs);
-! yystacksize += YYSTACKSIZE;
-! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
-! ysave->yyss = Renew(yyss, yystacksize, short);
-! if (!yyvs || !yyss)
-! goto yyoverflow;
-! yyssp = yyss + yyps_index;
-! yyvsp = yyvs + yypv_index;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
-***************
-*** 1534,1540 ****
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
-! goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
---- 1576,1594 ----
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
-! /*
-! ** reallocate and recover. Note that pointers
-! ** have to be reset, or bad things will happen
-! */
-! int yyps_index = (yyssp - yyss);
-! int yypv_index = (yyvsp - yyvs);
-! yystacksize += YYSTACKSIZE;
-! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
-! ysave->yyss = Renew(yyss, yystacksize, short);
-! if (!yyvs || !yyss)
-! goto yyoverflow;
-! yyssp = yyss + yyps_index;
-! yyvsp = yyvs + yypv_index;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
-***************
-*** 2473,2487 ****
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
-! goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
- yyoverflow:
-! yyerror("yacc stack overflow");
- yyabort:
-! return (1);
- yyaccept:
-! return (0);
- }
---- 2527,2575 ----
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
-! /*
-! ** reallocate and recover. Note that pointers
-! ** have to be reset, or bad things will happen
-! */
-! int yyps_index = (yyssp - yyss);
-! int yypv_index = (yyvsp - yyvs);
-! yystacksize += YYSTACKSIZE;
-! ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE);
-! ysave->yyss = Renew(yyss, yystacksize, short);
-! if (!yyvs || !yyss)
-! goto yyoverflow;
-! yyssp = yyss + yyps_index;
-! yyvsp = yyvs + yypv_index;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
- yyoverflow:
-! yyerror("Out of memory for yacc stack");
- yyabort:
-! retval = 1;
- yyaccept:
-! #ifdef USE_ITHREADS
-! LEAVE; /* force yydestruct() before we return */
-! #endif
-! return retval;
-! }
-!
-! #ifdef PERL_OBJECT
-! #include "XSUB.h"
-! #endif
-!
-! static void
-! yydestruct(pTHXo_ void *ptr)
-! {
-! struct ysv* ysave = (struct ysv*)ptr;
-! if (ysave->yyss) Safefree(ysave->yyss);
-! if (ysave->yyvs) Safefree(ysave->yyvs);
-! yydebug = ysave->oldyydebug;
-! yynerrs = ysave->oldyynerrs;
-! yyerrflag = ysave->oldyyerrflag;
-! yychar = ysave->oldyychar;
-! yyval = ysave->oldyyval;
-! yylval = ysave->oldyylval;
-! Safefree(ysave);
- }
diff --git a/contrib/perl5/pod/Makefile.SH b/contrib/perl5/pod/Makefile.SH
deleted file mode 100644
index b8c8c8f..0000000
--- a/contrib/perl5/pod/Makefile.SH
+++ /dev/null
@@ -1,167 +0,0 @@
-case $CONFIG in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-
-if test -d pod; then
- cd pod || exit 1
-fi
-POD=`echo *.pod`
-MAN=`echo $POD|sed 's/\.pod/\.man/g'`
-HTML=`echo $POD|sed 's/perltoc.pod//'|sed 's/\.pod/\.html/g'`
-TEX=`echo $POD|sed 's/\.pod/\.tex/g'`
-
-echo "Extracting pod/Makefile (with variable substitutions)"
-: This section of the file will have variable substitutions done on it.
-: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
-: Protect any dollar signs and backticks that you do not want interpreted
-: by putting a backslash in front. You may delete these comments.
-
-$spitshell >Makefile <<!GROK!THIS!
-# pod/Makefile
-# This file is derived from pod/Makefile.SH. Any changes made here will
-# be lost the next time you run Configure.
-
-POD = $POD
-
-MAN = $MAN
-
-# no perltoc.html
-HTML = $HTML
-
-TEX = $TEX
-
-!GROK!THIS!
-
-## In the following dollars and backticks do not need the extra backslash.
-$spitshell >>Makefile <<'!NO!SUBS!'
-
-CONVERTERS = pod2html pod2latex pod2man pod2text checkpods \
- pod2usage podchecker podselect
-
-HTMLROOT = / # Change this to fix cross-references in HTML
-POD2HTML = pod2html \
- --htmlroot=$(HTMLROOT) \
- --podroot=.. --podpath=pod:lib:ext:vms \
- --libpods=perlfunc:perlguts:perlvar:perlrun:perlop
-
-PERL = ../miniperl
-PERLILIB = $(PERL) -I../lib
-REALPERL = ../perl
-
-all: $(CONVERTERS) man
-
-converters: $(CONVERTERS)
-
-regen_pods: perlmodlib.pod toc
-
-buildtoc: buildtoc.PL perl.pod ../MANIFEST
- $(PERLILIB) buildtoc.PL
-
-perltoc.pod: buildtoc
-
-man: pod2man $(MAN)
-
-html: pod2html $(HTML)
-
-tex: pod2latex $(TEX)
-
-toc: buildtoc
- $(PERLILIB) buildtoc
-
-.SUFFIXES: .pm .pod
-
-.SUFFIXES: .man
-
-.pm.man: pod2man
- $(PERL) -I../lib pod2man $*.pm >$*.man
-
-.pod.man: pod2man
- $(PERL) -I../lib pod2man $*.pod >$*.man
-
-.SUFFIXES: .html
-
-.pm.html: pod2html
- $(PERL) -I../lib $(POD2HTML) --infile=$*.pm --outfile=$*.html
-
-.pod.html: pod2html
- $(PERL) -I../lib $(POD2HTML) --infile=$*.pod --outfile=$*.html
-
-.SUFFIXES: .tex
-
-.pm.tex: pod2latex
- $(PERL) -I../lib pod2latex $*.pm
-
-.pod.tex: pod2latex
- $(PERL) -I../lib pod2latex $*.pod
-
-clean:
- rm -f $(MAN)
- rm -f $(HTML)
- rm -f $(TEX)
- rm -f pod2html-*cache
- rm -f *.aux *.log *.exe
-
-realclean: clean
- rm -f $(CONVERTERS)
-
-distclean: realclean
-
-veryclean: distclean
- -rm -f *~ *.orig
-
-check: checkpods
- @echo "checking..."; \
- $(PERL) -I../lib checkpods $(POD)
-
-# Dependencies.
-pod2latex: pod2latex.PL ../lib/Config.pm
- $(PERL) -I../lib pod2latex.PL
-
-pod2html: pod2html.PL ../lib/Config.pm
- $(PERL) -I ../lib pod2html.PL
-
-pod2man: pod2man.PL ../lib/Config.pm
- $(PERL) -I ../lib pod2man.PL
-
-pod2text: pod2text.PL ../lib/Config.pm
- $(PERL) -I ../lib pod2text.PL
-
-checkpods: checkpods.PL ../lib/Config.pm
- $(PERL) -I ../lib checkpods.PL
-
-pod2usage: pod2usage.PL ../lib/Config.pm
- $(PERL) -I ../lib pod2usage.PL
-
-podchecker: podchecker.PL ../lib/Config.pm
- $(PERL) -I ../lib podchecker.PL
-
-podselect: podselect.PL ../lib/Config.pm
- $(PERL) -I ../lib podselect.PL
-
-perlmodlib.pod: $(PERL) perlmodlib.PL ../mv-if-diff
- rm -f perlmodlib.tmp
- $(PERL) -I ../lib perlmodlib.PL
- sh ../mv-if-diff perlmodlib.tmp perlmodlib.pod
-
-compile: all
- $(REALPERL) -I../lib ../utils/perlcc -o pod2latex.exe pod2latex -log ../compilelog
- $(REALPERL) -I../lib ../utils/perlcc -o pod2man.exe pod2man -log ../compilelog
- $(REALPERL) -I../lib ../utils/perlcc -o pod2text.exe pod2text -log ../compilelog
- $(REALPERL) -I../lib ../utils/perlcc -o checkpods.exe checkpods -log ../compilelog
-
-!NO!SUBS!
diff --git a/contrib/perl5/pod/buildtoc.PL b/contrib/perl5/pod/buildtoc.PL
deleted file mode 100755
index 7c5a450..0000000
--- a/contrib/perl5/pod/buildtoc.PL
+++ /dev/null
@@ -1,492 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$// if ($^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
-$file =~ s/\.pl$/.com/ if ($^O eq 'VMS'); # "case-forgiving"
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-#
-# buildtoc
-#
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is autogenerated by buildtoc.PL.
-# Edit that file and run it to effect changes.
-#
-# Builds perltoc.pod and sanity checks the list of pods against all
-# of the MANIFEST, perl.pod, and ourselves.
-#
-
-use File::Find;
-use Cwd;
-use Text::Wrap;
-
-@PODS = glob("*.pod");
-
-sub output ($);
-
-if (-d "pod") {
- die "$0: failed to chdir('pod'): $!\n" unless chdir("pod");
-}
-
-@pods = qw(
- perl
- perlfaq
- perltoc
- perlbook
-
- perlsyn
- perldata
- perlop
- perlsub
- perlfunc
- perlreftut
- perldsc
- perlrequick
- perlpod
- perlstyle
- perltrap
-
- perlrun
- perldiag
- perllexwarn
- perldebtut
- perldebug
-
- perlvar
- perllol
- perlopentut
- perlretut
-
- perlre
- perlref
-
- perlform
-
- perlboot
- perltoot
- perltootc
- perlobj
- perlbot
- perltie
-
- perlipc
- perlfork
- perlnumber
- perlthrtut
-
- perlport
- perllocale
- perlunicode
- perlebcdic
-
- perlsec
-
- perlmod
- perlmodlib
- perlmodinstall
- perlnewmod
-
- perlfaq1
- perlfaq2
- perlfaq3
- perlfaq4
- perlfaq5
- perlfaq6
- perlfaq7
- perlfaq8
- perlfaq9
-
- perlcompile
-
- perlembed
- perldebguts
- perlxstut
- perlxs
- perlclib
- perlguts
- perlcall
- perlutil
- perlfilter
- perldbmfilter
- perlapi
- perlintern
- perlapio
- perltodo
- perlhack
-
- perlhist
- perldelta
- perl5005delta
- perl5004delta
-
- perlaix
- perlamiga
- perlbs2000
- perlcygwin
- perldos
- perlepoc
- perlhpux
- perlmachten
- perlmacos
- perlmpeix
- perlos2
- perlos390
- perlsolaris
- perlvmesa
- perlvms
- perlvos
- perlwin32
- );
-
-@ARCHPODS = qw(
- perlaix
- perlamiga
- perlbs2000
- perlcygwin
- perldos
- perlepoc
- perlhpux
- perlmachten
- perlmacos
- perlmpeix
- perlos2
- perlos390
- perlsolaris
- perlvmesa
- perlvms
- perlvos
- perlwin32
- );
-for (@ARCHPODS) { s/$/.pod/ }
-@ARCHPODS{@ARCHPODS} = ();
-
-for (@pods) { s/$/.pod/ }
-@pods{@pods} = ();
-@PODS{@PODS} = ();
-
-open(MANI, "../MANIFEST") || die "$0: opening ../MANIFEST failed: $!";
-while (<MANI>) {
- if (m!^pod/([^.]+\.pod)\s+!i) {
- push @MANIPODS, $1;
- }
-}
-close(MANI);
-@MANIPODS{@MANIPODS} = ();
-
-open(PERLPOD, "perl.pod") || die "$0: opening perl.pod failed: $!\n";
-while (<PERLPOD>) {
- if (/^For ease of access, /../^\(If you're intending /) {
- if (/^\s+(perl\S*)\s+\w/) {
- push @PERLPODS, "$1.pod";
- }
- }
-}
-close(PERLPOD);
-die "$0: could not find the pod listing of perl.pod\n"
- unless @PERLPODS;
-@PERLPODS{@PERLPODS} = ();
-
-# Cross-check against ourselves
-# Cross-check against the MANIFEST
-# Cross-check against the perl.pod
-
-foreach my $i (sort keys %PODS) {
- warn "$0: $i exists but is unknown by buildtoc\n"
- unless exists $pods{$i};
- warn "$0: $i exists but is unknown by ../MANIFEST\n"
- if !exists $MANIPODS{$i} && !exists $ARCHPODS{$i};
- warn "$0: $i exists but is unknown by perl.pod\n"
- unless exists $PERLPODS{$i};
-}
-foreach my $i (sort keys %pods) {
- warn "$0: $i is known by buildtoc but does not exist\n"
- unless exists $PODS{$i};
-}
-foreach my $i (sort keys %MANIPODS) {
- warn "$0: $i is known by ../MANIFEST but does not exist\n"
- unless exists $PODS{$i};
-}
-foreach my $i (sort keys %PERLPODS) {
- warn "$0: $i is known by perl.pod but does not exist\n"
- unless exists $PODS{$i};
-}
-
-# We are ready to rock.
-open(OUT, ">perltoc.pod") || die "$0: creating perltoc.pod failed: $!";
-
-$/ = '';
-@ARGV = @pods;
-
-($_= <<EOPOD2B) =~ s/^\t//gm && output($_);
-
- =head1 NAME
-
- perltoc - perl documentation table of contents
-
- =head1 DESCRIPTION
-
- This page provides a brief table of contents for the rest of the Perl
- documentation set. It is meant to be scanned quickly or grepped
- through to locate the proper section you're looking for.
-
- =head1 BASIC DOCUMENTATION
-
-EOPOD2B
-#' make emacs happy
-
-podset(@pods);
-
-find \&getpods => qw(../lib ../ext);
-
-sub getpods {
- if (/\.p(od|m)$/) {
- # Skip .pm files that have corresponding .pod files, and Functions.pm.
- return if /(.*)\.pm$/ && -f "$1.pod";
- my $file = $File::Find::name;
- return if $file eq '../lib/Pod/Functions.pm'; # Used only by pod itself
-
- die "tut $name" if $file =~ /TUT/;
- unless (open (F, "< $_\0")) {
- warn "bogus <$file>: $!";
- system "ls", "-l", $file;
- }
- else {
- my $line;
- while ($line = <F>) {
- if ($line =~ /^=head1\s+NAME\b/) {
- push @modpods, $file;
- #warn "GOOD $file\n";
- return;
- }
- }
- warn "$0: $file: cannot find =head1 NAME\n";
- }
- }
-}
-
-die "no pods" unless @modpods;
-
-for (@modpods) {
- #($name) = /(\w+)\.p(m|od)$/;
- $name = path2modname($_);
- if ($name =~ /^[a-z]/) {
- push @pragmata, $_;
- } else {
- if ($done{$name}++) {
- # warn "already did $_\n";
- next;
- }
- push @modules, $_;
- push @modname, $name;
- }
-}
-
-($_= <<EOPOD2B) =~ s/^\t//gm && output($_);
-
-
-
- =head1 PRAGMA DOCUMENTATION
-
-EOPOD2B
-
-podset(sort @pragmata);
-
-($_= <<EOPOD2B) =~ s/^\t//gm && output($_);
-
-
-
- =head1 MODULE DOCUMENTATION
-
-EOPOD2B
-
-podset( @modules[ sort { $modname[$a] cmp $modname[$b] } 0 .. $#modules ] );
-
-($_= <<EOPOD2B) =~ s/^\t//gm;
-
-
- =head1 AUXILIARY DOCUMENTATION
-
- Here should be listed all the extra programs' documentation, but they
- don't all have manual pages yet:
-
- =over 4
-
- =item a2p
-
- =item s2p
-
- =item find2perl
-
- =item h2ph
-
- =item c2ph
-
- =item h2xs
-
- =item xsubpp
-
- =item pod2man
-
- =item wrapsuid
-
- =back
-
- =head1 AUTHOR
-
- Larry Wall <F<larry\@wall.org>>, with the help of oodles
- of other folks.
-
-
-EOPOD2B
-output $_;
-output "\n"; # flush $LINE
-exit;
-
-sub podset {
- local @ARGV = @_;
-
- while(<>) {
- if (s/^=head1 (NAME)\s*/=head2 /) {
- $pod = path2modname($ARGV);
- unhead1();
- output "\n \n\n=head2 ";
- $_ = <>;
- if ( /^\s*$pod\b/ ) {
- s/$pod\.pm/$pod/; # '.pm' in NAME !?
- output $_;
- } else {
- s/^/$pod, /;
- output $_;
- }
- next;
- }
- if (s/^=head1 (.*)/=item $1/) {
- unhead2();
- output "=over 4\n\n" unless $inhead1;
- $inhead1 = 1;
- output $_; nl(); next;
- }
- if (s/^=head2 (.*)/=item $1/) {
- unitem();
- output "=over 4\n\n" unless $inhead2;
- $inhead2 = 1;
- output $_; nl(); next;
- }
- if (s/^=item ([^=].*)/$1/) {
- next if $pod eq 'perldiag';
- s/^\s*\*\s*$// && next;
- s/^\s*\*\s*//;
- s/\n/ /g;
- s/\s+$//;
- next if /^[\d.]+$/;
- next if $pod eq 'perlmodlib' && /^ftp:/;
- ##print "=over 4\n\n" unless $initem;
- output ", " if $initem;
- $initem = 1;
- s/\.$//;
- s/^-X\b/-I<X>/;
- output $_; next;
- }
- if (s/^=cut\s*\n//) {
- unhead1();
- next;
- }
- }
-}
-
-sub path2modname {
- local $_ = shift;
- s/\.p(m|od)$//;
- s-.*?/(lib|ext)/--;
- s-/-::-g;
- s/(\w+)::\1/$1/;
- return $_;
-}
-
-sub unhead1 {
- unhead2();
- if ($inhead1) {
- output "\n\n=back\n\n";
- }
- $inhead1 = 0;
-}
-
-sub unhead2 {
- unitem();
- if ($inhead2) {
- output "\n\n=back\n\n";
- }
- $inhead2 = 0;
-}
-
-sub unitem {
- if ($initem) {
- output "\n\n";
- ##print "\n\n=back\n\n";
- }
- $initem = 0;
-}
-
-sub nl {
- output "\n";
-}
-
-my $NEWLINE; # how many newlines have we seen recently
-my $LINE; # what remains to be printed
-
-sub output ($) {
- for (split /(\n)/, shift) {
- if ($_ eq "\n") {
- if ($LINE) {
- print OUT wrap('', '', $LINE);
- $LINE = '';
- }
- if ($NEWLINE < 2) {
- print OUT;
- $NEWLINE++;
- }
- }
- elsif (/\S/ && length) {
- $LINE .= $_;
- $NEWLINE = 0;
- }
- }
-}
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/checkpods.PL b/contrib/perl5/pod/checkpods.PL
deleted file mode 100644
index 92b7ae6..0000000
--- a/contrib/perl5/pod/checkpods.PL
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-# From roderick@gate.netThu Sep 5 17:19:30 1996
-# Date: Thu, 05 Sep 1996 00:11:22 -0400
-# From: Roderick Schertler <roderick@gate.net>
-# To: perl5-porters@africa.nicoh.com
-# Subject: POD lines with only spaces
-#
-# There are some places in the documentation where a POD directive is
-# ignored because the line before it contains whitespace (and so the
-# directive doesn't start a paragraph). This patch adds a way to check
-# for these to the pod Makefile (though it isn't made part of the build
-# process, which would be a good idea), and fixes those places where the
-# problem currently exists.
-#
-# Version 1.00 Original.
-# Version 1.01 Andy Dougherty <doughera@lafcol.lafayette.edu>
-# Trivial modifications to output format for easier auto-parsing
-# Broke it out as a separate function to avoid nasty
-# Make/Shell/Perl quoting problems, and also to make it easier
-# to grow. Someone will probably want to rewrite in terms of
-# some sort of Pod::Checker module. Or something. Consider this
-# a placeholder for the future.
-# Version 1.02 Roderick Schertler <roderick@argon.org>
-# Check for pod directives following any kind of unempty line, not
-# just lines of whitespace.
-
-@directive = qw(head1 head2 item over back cut pod for begin end);
-@directive{@directive} = (1) x @directive;
-
-$exit = $last_unempty = 0;
-while (<>) {
- chomp;
- if (/^=(\S+)/ && $directive{$1} && $last_unempty) {
- printf "%s: line %5d, no blank line preceeding directive =%s\n",
- $ARGV, $., $1;
- $exit = 1;
- }
- $last_unempty = ($_ ne '');
- if (eof) {
- close(ARGV);
- $last_unempty = 0;
- }
-}
-exit $exit
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/perl.pod b/contrib/perl5/pod/perl.pod
deleted file mode 100644
index b7e88fb..0000000
--- a/contrib/perl5/pod/perl.pod
+++ /dev/null
@@ -1,368 +0,0 @@
-=head1 NAME
-
-perl - Practical Extraction and Report Language
-
-=head1 SYNOPSIS
-
-B<perl> S<[ B<-sTuU> ]> S<[ B<-hv> ] [ B<-V>[:I<configvar>] ]>
- S<[ B<-cw> ] [ B<-d>[:I<debugger>] ] [ B<-D>[I<number/list>] ]>
- S<[ B<-pna> ] [ B<-F>I<pattern> ] [ B<-l>[I<octal>] ] [ B<-0>[I<octal>] ]>
- S<[ B<-I>I<dir> ] [ B<-m>[B<->]I<module> ] [ B<-M>[B<->]I<'module...'> ]>
- S<[ B<-P> ]> S<[ B<-S> ]> S<[ B<-x>[I<dir>] ]>
- S<[ B<-i>[I<extension>] ]> S<[ B<-e> I<'command'> ]
- [ B<--> ] [ I<programfile> ] [ I<argument> ]...>
-
-For ease of access, the Perl manual has been split up into several sections:
-
- perl Perl overview (this section)
- perlfaq Perl frequently asked questions
- perltoc Perl documentation table of contents
- perlbook Perl book information
-
- perlsyn Perl syntax
- perldata Perl data structures
- perlop Perl operators and precedence
- perlsub Perl subroutines
- perlfunc Perl builtin functions
- perlreftut Perl references short introduction
- perldsc Perl data structures intro
- perlrequick Perl regular expressions quick start
- perlpod Perl plain old documentation
- perlstyle Perl style guide
- perltrap Perl traps for the unwary
-
- perlrun Perl execution and options
- perldiag Perl diagnostic messages
- perllexwarn Perl warnings and their control
- perldebtut Perl debugging tutorial
- perldebug Perl debugging
-
- perlvar Perl predefined variables
- perllol Perl data structures: arrays of arrays
- perlopentut Perl open() tutorial
- perlretut Perl regular expressions tutorial
-
- perlre Perl regular expressions, the rest of the story
- perlref Perl references, the rest of the story
-
- perlform Perl formats
-
- perlboot Perl OO tutorial for beginners
- perltoot Perl OO tutorial, part 1
- perltootc Perl OO tutorial, part 2
- perlobj Perl objects
- perlbot Perl OO tricks and examples
- perltie Perl objects hidden behind simple variables
-
- perlipc Perl interprocess communication
- perlfork Perl fork() information
- perlnumber Perl number semantics
- perlthrtut Perl threads tutorial
-
- perlport Perl portability guide
- perllocale Perl locale support
- perlunicode Perl unicode support
- perlebcdic Considerations for running Perl on EBCDIC platforms
-
- perlsec Perl security
-
- perlmod Perl modules: how they work
- perlmodlib Perl modules: how to write and use
- perlmodinstall Perl modules: how to install from CPAN
- perlnewmod Perl modules: preparing a new module for distribution
-
- perlfaq1 General Questions About Perl
- perlfaq2 Obtaining and Learning about Perl
- perlfaq3 Programming Tools
- perlfaq4 Data Manipulation
- perlfaq5 Files and Formats
- perlfaq6 Regexes
- perlfaq7 Perl Language Issues
- perlfaq8 System Interaction
- perlfaq9 Networking
-
- perlcompile Perl compiler suite intro
-
- perlembed Perl ways to embed perl in your C or C++ application
- perldebguts Perl debugging guts and tips
- perlxstut Perl XS tutorial
- perlxs Perl XS application programming interface
- perlclib Internal replacements for standard C library functions
- perlguts Perl internal functions for those doing extensions
- perlcall Perl calling conventions from C
- perlutil utilities packaged with the Perl distribution
- perlfilter Perl source filters
- perldbmfilter Perl DBM filters
- perlapi Perl API listing (autogenerated)
- perlintern Perl internal functions (autogenerated)
- perlapio Perl internal IO abstraction interface
- perltodo Perl things to do
- perlhack Perl hackers guide
-
- perlhist Perl history records
- perldelta Perl changes since previous version
- perl5005delta Perl changes in version 5.005
- perl5004delta Perl changes in version 5.004
-
- perlaix Perl notes for AIX
- perlamiga Perl notes for Amiga
- perlbs2000 Perl notes for POSIX-BC BS2000
- perlcygwin Perl notes for Cygwin
- perldos Perl notes for DOS
- perlepoc Perl notes for EPOC
- perlhpux Perl notes for HP-UX
- perlmachten Perl notes for Power MachTen
- perlmacos Perl notes for Mac OS (Classic)
- perlmpeix Perl notes for MPE/iX
- perlos2 Perl notes for OS/2
- perlos390 Perl notes for OS/390
- perlsolaris Perl notes for Solaris
- perlvmesa Perl notes for VM/ESA
- perlvms Perl notes for VMS
- perlvos Perl notes for Stratus VOS
- perlwin32 Perl notes for Windows
-
-(If you're intending to read these straight through for the first time,
-the suggested order will tend to reduce the number of forward references.)
-
-By default, the manpages listed above are installed in the
-F</usr/local/man/> directory.
-
-Extensive additional documentation for Perl modules is available. The
-default configuration for perl will place this additional documentation
-in the F</usr/local/lib/perl5/man> directory (or else in the F<man>
-subdirectory of the Perl library directory). Some of this additional
-documentation is distributed standard with Perl, but you'll also find
-documentation for third-party modules there.
-
-You should be able to view Perl's documentation with your man(1)
-program by including the proper directories in the appropriate start-up
-files, or in the MANPATH environment variable. To find out where the
-configuration has installed the manpages, type:
-
- perl -V:man.dir
-
-If the directories have a common stem, such as F</usr/local/man/man1>
-and F</usr/local/man/man3>, you need only to add that stem
-(F</usr/local/man>) to your man(1) configuration files or your MANPATH
-environment variable. If they do not share a stem, you'll have to add
-both stems.
-
-If that doesn't work for some reason, you can still use the
-supplied F<perldoc> script to view module information. You might
-also look into getting a replacement man program.
-
-If something strange has gone wrong with your program and you're not
-sure where you should look for help, try the B<-w> switch first. It
-will often point out exactly where the trouble is.
-
-=head1 DESCRIPTION
-
-Perl is a language optimized for scanning arbitrary
-text files, extracting information from those text files, and printing
-reports based on that information. It's also a good language for many
-system management tasks. The language is intended to be practical
-(easy to use, efficient, complete) rather than beautiful (tiny,
-elegant, minimal).
-
-Perl combines (in the author's opinion, anyway) some of the best
-features of C, B<sed>, B<awk>, and B<sh>, so people familiar with
-those languages should have little difficulty with it. (Language
-historians will also note some vestiges of B<csh>, Pascal, and even
-BASIC-PLUS.) Expression syntax corresponds closely to C
-expression syntax. Unlike most Unix utilities, Perl does not
-arbitrarily limit the size of your data--if you've got the memory,
-Perl can slurp in your whole file as a single string. Recursion is of
-unlimited depth. And the tables used by hashes (sometimes called
-"associative arrays") grow as necessary to prevent degraded
-performance. Perl can use sophisticated pattern matching techniques to
-scan large amounts of data quickly. Although optimized for
-scanning text, Perl can also deal with binary data, and can make dbm
-files look like hashes. Setuid Perl scripts are safer than C programs
-through a dataflow tracing mechanism that prevents many stupid
-security holes.
-
-If you have a problem that would ordinarily use B<sed> or B<awk> or
-B<sh>, but it exceeds their capabilities or must run a little faster,
-and you don't want to write the silly thing in C, then Perl may be for
-you. There are also translators to turn your B<sed> and B<awk>
-scripts into Perl scripts.
-
-But wait, there's more...
-
-Begun in 1993 (see L<perlhist>), Perl version 5 is nearly a complete
-rewrite that provides the following additional benefits:
-
-=over 4
-
-=item *
-
-modularity and reusability using innumerable modules
-
-Described in L<perlmod>, L<perlmodlib>, and L<perlmodinstall>.
-
-=item *
-
-embeddable and extensible
-
-Described in L<perlembed>, L<perlxstut>, L<perlxs>, L<perlcall>,
-L<perlguts>, and L<xsubpp>.
-
-=item *
-
-roll-your-own magic variables (including multiple simultaneous DBM implementations)
-
-Described in L<perltie> and L<AnyDBM_File>.
-
-=item *
-
-subroutines can now be overridden, autoloaded, and prototyped
-
-Described in L<perlsub>.
-
-=item *
-
-arbitrarily nested data structures and anonymous functions
-
-Described in L<perlreftut>, L<perlref>, L<perldsc>, and L<perllol>.
-
-=item *
-
-object-oriented programming
-
-Described in L<perlobj>, L<perltoot>, and L<perlbot>.
-
-=item *
-
-compilability into C code or Perl bytecode
-
-Described in L<B> and L<B::Bytecode>.
-
-=item *
-
-support for light-weight processes (threads)
-
-Described in L<perlthrtut> and L<Thread>.
-
-=item *
-
-support for internationalization, localization, and Unicode
-
-Described in L<perllocale> and L<utf8>.
-
-=item *
-
-lexical scoping
-
-Described in L<perlsub>.
-
-=item *
-
-regular expression enhancements
-
-Described in L<perlre>, with additional examples in L<perlop>.
-
-=item *
-
-enhanced debugger and interactive Perl environment,
-with integrated editor support
-
-Described in L<perldebug>.
-
-=item *
-
-POSIX 1003.1 compliant library
-
-Described in L<POSIX>.
-
-=back
-
-Okay, that's I<definitely> enough hype.
-
-=head1 AVAILABILITY
-
-Perl is available for most operating systems, including virtually
-all Unix-like platforms. See L<perlport/"Supported Platforms">
-for a listing.
-
-=head1 ENVIRONMENT
-
-See L<perlrun>.
-
-=head1 AUTHOR
-
-Larry Wall <larry@wall.org>, with the help of oodles of other folks.
-
-If your Perl success stories and testimonials may be of help to others
-who wish to advocate the use of Perl in their applications,
-or if you wish to simply express your gratitude to Larry and the
-Perl developers, please write to perl-thanks@perl.org .
-
-=head1 FILES
-
- "@INC" locations of perl libraries
-
-=head1 SEE ALSO
-
- a2p awk to perl translator
- s2p sed to perl translator
-
- http://www.perl.com/ the Perl Home Page
- http://www.perl.com/CPAN the Comprehensive Perl Archive
-
-=head1 DIAGNOSTICS
-
-The C<use warnings> pragma (and the B<-w> switch) produces some
-lovely diagnostics.
-
-See L<perldiag> for explanations of all Perl's diagnostics. The C<use
-diagnostics> pragma automatically turns Perl's normally terse warnings
-and errors into these longer forms.
-
-Compilation errors will tell you the line number of the error, with an
-indication of the next token or token type that was to be examined.
-(In a script passed to Perl via B<-e> switches, each
-B<-e> is counted as one line.)
-
-Setuid scripts have additional constraints that can produce error
-messages such as "Insecure dependency". See L<perlsec>.
-
-Did we mention that you should definitely consider using the B<-w>
-switch?
-
-=head1 BUGS
-
-The B<-w> switch is not mandatory.
-
-Perl is at the mercy of your machine's definitions of various
-operations such as type casting, atof(), and floating-point
-output with sprintf().
-
-If your stdio requires a seek or eof between reads and writes on a
-particular stream, so does Perl. (This doesn't apply to sysread()
-and syswrite().)
-
-While none of the built-in data types have any arbitrary size limits
-(apart from memory size), there are still a few arbitrary limits: a
-given variable name may not be longer than 251 characters. Line numbers
-displayed by diagnostics are internally stored as short integers,
-so they are limited to a maximum of 65535 (higher numbers usually being
-affected by wraparound).
-
-You may mail your bug reports (be sure to include full configuration
-information as output by the myconfig program in the perl source
-tree, or by C<perl -V>) to perlbug@perl.org . If you've succeeded
-in compiling perl, the B<perlbug> script in the F<utils/> subdirectory
-can be used to help mail in a bug report.
-
-Perl actually stands for Pathologically Eclectic Rubbish Lister, but
-don't tell anyone I said that.
-
-=head1 NOTES
-
-The Perl motto is "There's more than one way to do it." Divining
-how many more is left as an exercise to the reader.
-
-The three principal virtues of a programmer are Laziness,
-Impatience, and Hubris. See the Camel Book for why.
-
diff --git a/contrib/perl5/pod/perl5004delta.pod b/contrib/perl5/pod/perl5004delta.pod
deleted file mode 100644
index 429cba9..0000000
--- a/contrib/perl5/pod/perl5004delta.pod
+++ /dev/null
@@ -1,1612 +0,0 @@
-=head1 NAME
-
-perldelta - what's new for perl5.004
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.003 release (as
-documented in I<Programming Perl>, second edition--the Camel Book) and
-this one.
-
-=head1 Supported Environments
-
-Perl5.004 builds out of the box on Unix, Plan 9, LynxOS, VMS, OS/2,
-QNX, AmigaOS, and Windows NT. Perl runs on Windows 95 as well, but it
-cannot be built there, for lack of a reasonable command interpreter.
-
-=head1 Core Changes
-
-Most importantly, many bugs were fixed, including several security
-problems. See the F<Changes> file in the distribution for details.
-
-=head2 List assignment to %ENV works
-
-C<%ENV = ()> and C<%ENV = @list> now work as expected (except on VMS
-where it generates a fatal error).
-
-=head2 Change to "Can't locate Foo.pm in @INC" error
-
-The error "Can't locate Foo.pm in @INC" now lists the contents of @INC
-for easier debugging.
-
-=head2 Compilation option: Binary compatibility with 5.003
-
-There is a new Configure question that asks if you want to maintain
-binary compatibility with Perl 5.003. If you choose binary
-compatibility, you do not have to recompile your extensions, but you
-might have symbol conflicts if you embed Perl in another application,
-just as in the 5.003 release. By default, binary compatibility
-is preserved at the expense of symbol table pollution.
-
-=head2 $PERL5OPT environment variable
-
-You may now put Perl options in the $PERL5OPT environment variable.
-Unless Perl is running with taint checks, it will interpret this
-variable as if its contents had appeared on a "#!perl" line at the
-beginning of your script, except that hyphens are optional. PERL5OPT
-may only be used to set the following switches: B<-[DIMUdmw]>.
-
-=head2 Limitations on B<-M>, B<-m>, and B<-T> options
-
-The C<-M> and C<-m> options are no longer allowed on the C<#!> line of
-a script. If a script needs a module, it should invoke it with the
-C<use> pragma.
-
-The B<-T> option is also forbidden on the C<#!> line of a script,
-unless it was present on the Perl command line. Due to the way C<#!>
-works, this usually means that B<-T> must be in the first argument.
-Thus:
-
- #!/usr/bin/perl -T -w
-
-will probably work for an executable script invoked as C<scriptname>,
-while:
-
- #!/usr/bin/perl -w -T
-
-will probably fail under the same conditions. (Non-Unix systems will
-probably not follow this rule.) But C<perl scriptname> is guaranteed
-to fail, since then there is no chance of B<-T> being found on the
-command line before it is found on the C<#!> line.
-
-=head2 More precise warnings
-
-If you removed the B<-w> option from your Perl 5.003 scripts because it
-made Perl too verbose, we recommend that you try putting it back when
-you upgrade to Perl 5.004. Each new perl version tends to remove some
-undesirable warnings, while adding new warnings that may catch bugs in
-your scripts.
-
-=head2 Deprecated: Inherited C<AUTOLOAD> for non-methods
-
-Before Perl 5.004, C<AUTOLOAD> functions were looked up as methods
-(using the C<@ISA> hierarchy), even when the function to be autoloaded
-was called as a plain function (e.g. C<Foo::bar()>), not a method
-(e.g. C<< Foo->bar() >> or C<< $obj->bar() >>).
-
-Perl 5.005 will use method lookup only for methods' C<AUTOLOAD>s.
-However, there is a significant base of existing code that may be using
-the old behavior. So, as an interim step, Perl 5.004 issues an optional
-warning when a non-method uses an inherited C<AUTOLOAD>.
-
-The simple rule is: Inheritance will not work when autoloading
-non-methods. The simple fix for old code is: In any module that used to
-depend on inheriting C<AUTOLOAD> for non-methods from a base class named
-C<BaseClass>, execute C<*AUTOLOAD = \&BaseClass::AUTOLOAD> during startup.
-
-=head2 Previously deprecated %OVERLOAD is no longer usable
-
-Using %OVERLOAD to define overloading was deprecated in 5.003.
-Overloading is now defined using the overload pragma. %OVERLOAD is
-still used internally but should not be used by Perl scripts. See
-L<overload> for more details.
-
-=head2 Subroutine arguments created only when they're modified
-
-In Perl 5.004, nonexistent array and hash elements used as subroutine
-parameters are brought into existence only if they are actually
-assigned to (via C<@_>).
-
-Earlier versions of Perl vary in their handling of such arguments.
-Perl versions 5.002 and 5.003 always brought them into existence.
-Perl versions 5.000 and 5.001 brought them into existence only if
-they were not the first argument (which was almost certainly a bug).
-Earlier versions of Perl never brought them into existence.
-
-For example, given this code:
-
- undef @a; undef %a;
- sub show { print $_[0] };
- sub change { $_[0]++ };
- show($a[2]);
- change($a{b});
-
-After this code executes in Perl 5.004, $a{b} exists but $a[2] does
-not. In Perl 5.002 and 5.003, both $a{b} and $a[2] would have existed
-(but $a[2]'s value would have been undefined).
-
-=head2 Group vector changeable with C<$)>
-
-The C<$)> special variable has always (well, in Perl 5, at least)
-reflected not only the current effective group, but also the group list
-as returned by the C<getgroups()> C function (if there is one).
-However, until this release, there has not been a way to call the
-C<setgroups()> C function from Perl.
-
-In Perl 5.004, assigning to C<$)> is exactly symmetrical with examining
-it: The first number in its string value is used as the effective gid;
-if there are any numbers after the first one, they are passed to the
-C<setgroups()> C function (if there is one).
-
-=head2 Fixed parsing of $$<digit>, &$<digit>, etc.
-
-Perl versions before 5.004 misinterpreted any type marker followed by
-"$" and a digit. For example, "$$0" was incorrectly taken to mean
-"${$}0" instead of "${$0}". This bug is (mostly) fixed in Perl 5.004.
-
-However, the developers of Perl 5.004 could not fix this bug completely,
-because at least two widely-used modules depend on the old meaning of
-"$$0" in a string. So Perl 5.004 still interprets "$$<digit>" in the
-old (broken) way inside strings; but it generates this message as a
-warning. And in Perl 5.005, this special treatment will cease.
-
-=head2 Fixed localization of $<digit>, $&, etc.
-
-Perl versions before 5.004 did not always properly localize the
-regex-related special variables. Perl 5.004 does localize them, as
-the documentation has always said it should. This may result in $1,
-$2, etc. no longer being set where existing programs use them.
-
-=head2 No resetting of $. on implicit close
-
-The documentation for Perl 5.0 has always stated that C<$.> is I<not>
-reset when an already-open file handle is reopened with no intervening
-call to C<close>. Due to a bug, perl versions 5.000 through 5.003
-I<did> reset C<$.> under that circumstance; Perl 5.004 does not.
-
-=head2 C<wantarray> may return undef
-
-The C<wantarray> operator returns true if a subroutine is expected to
-return a list, and false otherwise. In Perl 5.004, C<wantarray> can
-also return the undefined value if a subroutine's return value will
-not be used at all, which allows subroutines to avoid a time-consuming
-calculation of a return value if it isn't going to be used.
-
-=head2 C<eval EXPR> determines value of EXPR in scalar context
-
-Perl (version 5) used to determine the value of EXPR inconsistently,
-sometimes incorrectly using the surrounding context for the determination.
-Now, the value of EXPR (before being parsed by eval) is always determined in
-a scalar context. Once parsed, it is executed as before, by providing
-the context that the scope surrounding the eval provided. This change
-makes the behavior Perl4 compatible, besides fixing bugs resulting from
-the inconsistent behavior. This program:
-
- @a = qw(time now is time);
- print eval @a;
- print '|', scalar eval @a;
-
-used to print something like "timenowis881399109|4", but now (and in perl4)
-prints "4|4".
-
-=head2 Changes to tainting checks
-
-A bug in previous versions may have failed to detect some insecure
-conditions when taint checks are turned on. (Taint checks are used
-in setuid or setgid scripts, or when explicitly turned on with the
-C<-T> invocation option.) Although it's unlikely, this may cause a
-previously-working script to now fail -- which should be construed
-as a blessing, since that indicates a potentially-serious security
-hole was just plugged.
-
-The new restrictions when tainting include:
-
-=over 4
-
-=item No glob() or <*>
-
-These operators may spawn the C shell (csh), which cannot be made
-safe. This restriction will be lifted in a future version of Perl
-when globbing is implemented without the use of an external program.
-
-=item No spawning if tainted $CDPATH, $ENV, $BASH_ENV
-
-These environment variables may alter the behavior of spawned programs
-(especially shells) in ways that subvert security. So now they are
-treated as dangerous, in the manner of $IFS and $PATH.
-
-=item No spawning if tainted $TERM doesn't look like a terminal name
-
-Some termcap libraries do unsafe things with $TERM. However, it would be
-unnecessarily harsh to treat all $TERM values as unsafe, since only shell
-metacharacters can cause trouble in $TERM. So a tainted $TERM is
-considered to be safe if it contains only alphanumerics, underscores,
-dashes, and colons, and unsafe if it contains other characters (including
-whitespace).
-
-=back
-
-=head2 New Opcode module and revised Safe module
-
-A new Opcode module supports the creation, manipulation and
-application of opcode masks. The revised Safe module has a new API
-and is implemented using the new Opcode module. Please read the new
-Opcode and Safe documentation.
-
-=head2 Embedding improvements
-
-In older versions of Perl it was not possible to create more than one
-Perl interpreter instance inside a single process without leaking like a
-sieve and/or crashing. The bugs that caused this behavior have all been
-fixed. However, you still must take care when embedding Perl in a C
-program. See the updated perlembed manpage for tips on how to manage
-your interpreters.
-
-=head2 Internal change: FileHandle class based on IO::* classes
-
-File handles are now stored internally as type IO::Handle. The
-FileHandle module is still supported for backwards compatibility, but
-it is now merely a front end to the IO::* modules -- specifically,
-IO::Handle, IO::Seekable, and IO::File. We suggest, but do not
-require, that you use the IO::* modules in new code.
-
-In harmony with this change, C<*GLOB{FILEHANDLE}> is now just a
-backward-compatible synonym for C<*GLOB{IO}>.
-
-=head2 Internal change: PerlIO abstraction interface
-
-It is now possible to build Perl with AT&T's sfio IO package
-instead of stdio. See L<perlapio> for more details, and
-the F<INSTALL> file for how to use it.
-
-=head2 New and changed syntax
-
-=over 4
-
-=item $coderef->(PARAMS)
-
-A subroutine reference may now be suffixed with an arrow and a
-(possibly empty) parameter list. This syntax denotes a call of the
-referenced subroutine, with the given parameters (if any).
-
-This new syntax follows the pattern of S<C<< $hashref->{FOO} >>> and
-S<C<< $aryref->[$foo] >>>: You may now write S<C<&$subref($foo)>> as
-S<C<< $subref->($foo) >>>. All these arrow terms may be chained;
-thus, S<C<< &{$table->{FOO}}($bar) >>> may now be written
-S<C<< $table->{FOO}->($bar) >>>.
-
-=back
-
-=head2 New and changed builtin constants
-
-=over 4
-
-=item __PACKAGE__
-
-The current package name at compile time, or the undefined value if
-there is no current package (due to a C<package;> directive). Like
-C<__FILE__> and C<__LINE__>, C<__PACKAGE__> does I<not> interpolate
-into strings.
-
-=back
-
-=head2 New and changed builtin variables
-
-=over 4
-
-=item $^E
-
-Extended error message on some platforms. (Also known as
-$EXTENDED_OS_ERROR if you C<use English>).
-
-=item $^H
-
-The current set of syntax checks enabled by C<use strict>. See the
-documentation of C<strict> for more details. Not actually new, but
-newly documented.
-Because it is intended for internal use by Perl core components,
-there is no C<use English> long name for this variable.
-
-=item $^M
-
-By default, running out of memory it is not trappable. However, if
-compiled for this, Perl may use the contents of C<$^M> as an emergency
-pool after die()ing with this message. Suppose that your Perl were
-compiled with -DPERL_EMERGENCY_SBRK and used Perl's malloc. Then
-
- $^M = 'a' x (1<<16);
-
-would allocate a 64K buffer for use when in emergency.
-See the F<INSTALL> file for information on how to enable this option.
-As a disincentive to casual use of this advanced feature,
-there is no C<use English> long name for this variable.
-
-=back
-
-=head2 New and changed builtin functions
-
-=over 4
-
-=item delete on slices
-
-This now works. (e.g. C<delete @ENV{'PATH', 'MANPATH'}>)
-
-=item flock
-
-is now supported on more platforms, prefers fcntl to lockf when
-emulating, and always flushes before (un)locking.
-
-=item printf and sprintf
-
-Perl now implements these functions itself; it doesn't use the C
-library function sprintf() any more, except for floating-point
-numbers, and even then only known flags are allowed. As a result, it
-is now possible to know which conversions and flags will work, and
-what they will do.
-
-The new conversions in Perl's sprintf() are:
-
- %i a synonym for %d
- %p a pointer (the address of the Perl value, in hexadecimal)
- %n special: *stores* the number of characters output so far
- into the next variable in the parameter list
-
-The new flags that go between the C<%> and the conversion are:
-
- # prefix octal with "0", hex with "0x"
- h interpret integer as C type "short" or "unsigned short"
- V interpret integer as Perl's standard integer type
-
-Also, where a number would appear in the flags, an asterisk ("*") may
-be used instead, in which case Perl uses the next item in the
-parameter list as the given number (that is, as the field width or
-precision). If a field width obtained through "*" is negative, it has
-the same effect as the '-' flag: left-justification.
-
-See L<perlfunc/sprintf> for a complete list of conversion and flags.
-
-=item keys as an lvalue
-
-As an lvalue, C<keys> allows you to increase the number of hash buckets
-allocated for the given hash. This can gain you a measure of efficiency if
-you know the hash is going to get big. (This is similar to pre-extending
-an array by assigning a larger number to $#array.) If you say
-
- keys %hash = 200;
-
-then C<%hash> will have at least 200 buckets allocated for it. These
-buckets will be retained even if you do C<%hash = ()>; use C<undef
-%hash> if you want to free the storage while C<%hash> is still in scope.
-You can't shrink the number of buckets allocated for the hash using
-C<keys> in this way (but you needn't worry about doing this by accident,
-as trying has no effect).
-
-=item my() in Control Structures
-
-You can now use my() (with or without the parentheses) in the control
-expressions of control structures such as:
-
- while (defined(my $line = <>)) {
- $line = lc $line;
- } continue {
- print $line;
- }
-
- if ((my $answer = <STDIN>) =~ /^y(es)?$/i) {
- user_agrees();
- } elsif ($answer =~ /^n(o)?$/i) {
- user_disagrees();
- } else {
- chomp $answer;
- die "`$answer' is neither `yes' nor `no'";
- }
-
-Also, you can declare a foreach loop control variable as lexical by
-preceding it with the word "my". For example, in:
-
- foreach my $i (1, 2, 3) {
- some_function();
- }
-
-$i is a lexical variable, and the scope of $i extends to the end of
-the loop, but not beyond it.
-
-Note that you still cannot use my() on global punctuation variables
-such as $_ and the like.
-
-=item pack() and unpack()
-
-A new format 'w' represents a BER compressed integer (as defined in
-ASN.1). Its format is a sequence of one or more bytes, each of which
-provides seven bits of the total value, with the most significant
-first. Bit eight of each byte is set, except for the last byte, in
-which bit eight is clear.
-
-If 'p' or 'P' are given undef as values, they now generate a NULL
-pointer.
-
-Both pack() and unpack() now fail when their templates contain invalid
-types. (Invalid types used to be ignored.)
-
-=item sysseek()
-
-The new sysseek() operator is a variant of seek() that sets and gets the
-file's system read/write position, using the lseek(2) system call. It is
-the only reliable way to seek before using sysread() or syswrite(). Its
-return value is the new position, or the undefined value on failure.
-
-=item use VERSION
-
-If the first argument to C<use> is a number, it is treated as a version
-number instead of a module name. If the version of the Perl interpreter
-is less than VERSION, then an error message is printed and Perl exits
-immediately. Because C<use> occurs at compile time, this check happens
-immediately during the compilation process, unlike C<require VERSION>,
-which waits until runtime for the check. This is often useful if you
-need to check the current Perl version before C<use>ing library modules
-which have changed in incompatible ways from older versions of Perl.
-(We try not to do this more than we have to.)
-
-=item use Module VERSION LIST
-
-If the VERSION argument is present between Module and LIST, then the
-C<use> will call the VERSION method in class Module with the given
-version as an argument. The default VERSION method, inherited from
-the UNIVERSAL class, croaks if the given version is larger than the
-value of the variable $Module::VERSION. (Note that there is not a
-comma after VERSION!)
-
-This version-checking mechanism is similar to the one currently used
-in the Exporter module, but it is faster and can be used with modules
-that don't use the Exporter. It is the recommended method for new
-code.
-
-=item prototype(FUNCTION)
-
-Returns the prototype of a function as a string (or C<undef> if the
-function has no prototype). FUNCTION is a reference to or the name of the
-function whose prototype you want to retrieve.
-(Not actually new; just never documented before.)
-
-=item srand
-
-The default seed for C<srand>, which used to be C<time>, has been changed.
-Now it's a heady mix of difficult-to-predict system-dependent values,
-which should be sufficient for most everyday purposes.
-
-Previous to version 5.004, calling C<rand> without first calling C<srand>
-would yield the same sequence of random numbers on most or all machines.
-Now, when perl sees that you're calling C<rand> and haven't yet called
-C<srand>, it calls C<srand> with the default seed. You should still call
-C<srand> manually if your code might ever be run on a pre-5.004 system,
-of course, or if you want a seed other than the default.
-
-=item $_ as Default
-
-Functions documented in the Camel to default to $_ now in
-fact do, and all those that do are so documented in L<perlfunc>.
-
-=item C<m//gc> does not reset search position on failure
-
-The C<m//g> match iteration construct has always reset its target
-string's search position (which is visible through the C<pos> operator)
-when a match fails; as a result, the next C<m//g> match after a failure
-starts again at the beginning of the string. With Perl 5.004, this
-reset may be disabled by adding the "c" (for "continue") modifier,
-i.e. C<m//gc>. This feature, in conjunction with the C<\G> zero-width
-assertion, makes it possible to chain matches together. See L<perlop>
-and L<perlre>.
-
-=item C<m//x> ignores whitespace before ?*+{}
-
-The C<m//x> construct has always been intended to ignore all unescaped
-whitespace. However, before Perl 5.004, whitespace had the effect of
-escaping repeat modifiers like "*" or "?"; for example, C</a *b/x> was
-(mis)interpreted as C</a\*b/x>. This bug has been fixed in 5.004.
-
-=item nested C<sub{}> closures work now
-
-Prior to the 5.004 release, nested anonymous functions didn't work
-right. They do now.
-
-=item formats work right on changing lexicals
-
-Just like anonymous functions that contain lexical variables
-that change (like a lexical index variable for a C<foreach> loop),
-formats now work properly. For example, this silently failed
-before (printed only zeros), but is fine now:
-
- my $i;
- foreach $i ( 1 .. 10 ) {
- write;
- }
- format =
- my i is @#
- $i
- .
-
-However, it still fails (without a warning) if the foreach is within a
-subroutine:
-
- my $i;
- sub foo {
- foreach $i ( 1 .. 10 ) {
- write;
- }
- }
- foo;
- format =
- my i is @#
- $i
- .
-
-=back
-
-=head2 New builtin methods
-
-The C<UNIVERSAL> package automatically contains the following methods that
-are inherited by all other classes:
-
-=over 4
-
-=item isa(CLASS)
-
-C<isa> returns I<true> if its object is blessed into a subclass of C<CLASS>
-
-C<isa> is also exportable and can be called as a sub with two arguments. This
-allows the ability to check what a reference points to. Example:
-
- use UNIVERSAL qw(isa);
-
- if(isa($ref, 'ARRAY')) {
- ...
- }
-
-=item can(METHOD)
-
-C<can> checks to see if its object has a method called C<METHOD>,
-if it does then a reference to the sub is returned; if it does not then
-I<undef> is returned.
-
-=item VERSION( [NEED] )
-
-C<VERSION> returns the version number of the class (package). If the
-NEED argument is given then it will check that the current version (as
-defined by the $VERSION variable in the given package) not less than
-NEED; it will die if this is not the case. This method is normally
-called as a class method. This method is called automatically by the
-C<VERSION> form of C<use>.
-
- use A 1.2 qw(some imported subs);
- # implies:
- A->VERSION(1.2);
-
-=back
-
-B<NOTE:> C<can> directly uses Perl's internal code for method lookup, and
-C<isa> uses a very similar method and caching strategy. This may cause
-strange effects if the Perl code dynamically changes @ISA in any package.
-
-You may add other methods to the UNIVERSAL class via Perl or XS code.
-You do not need to C<use UNIVERSAL> in order to make these methods
-available to your program. This is necessary only if you wish to
-have C<isa> available as a plain subroutine in the current package.
-
-=head2 TIEHANDLE now supported
-
-See L<perltie> for other kinds of tie()s.
-
-=over 4
-
-=item TIEHANDLE classname, LIST
-
-This is the constructor for the class. That means it is expected to
-return an object of some sort. The reference can be used to
-hold some internal information.
-
- sub TIEHANDLE {
- print "<shout>\n";
- my $i;
- return bless \$i, shift;
- }
-
-=item PRINT this, LIST
-
-This method will be triggered every time the tied handle is printed to.
-Beyond its self reference it also expects the list that was passed to
-the print function.
-
- sub PRINT {
- $r = shift;
- $$r++;
- return print join( $, => map {uc} @_), $\;
- }
-
-=item PRINTF this, LIST
-
-This method will be triggered every time the tied handle is printed to
-with the C<printf()> function.
-Beyond its self reference it also expects the format and list that was
-passed to the printf function.
-
- sub PRINTF {
- shift;
- my $fmt = shift;
- print sprintf($fmt, @_)."\n";
- }
-
-=item READ this LIST
-
-This method will be called when the handle is read from via the C<read>
-or C<sysread> functions.
-
- sub READ {
- $r = shift;
- my($buf,$len,$offset) = @_;
- print "READ called, \$buf=$buf, \$len=$len, \$offset=$offset";
- }
-
-=item READLINE this
-
-This method will be called when the handle is read from. The method
-should return undef when there is no more data.
-
- sub READLINE {
- $r = shift;
- return "PRINT called $$r times\n"
- }
-
-=item GETC this
-
-This method will be called when the C<getc> function is called.
-
- sub GETC { print "Don't GETC, Get Perl"; return "a"; }
-
-=item DESTROY this
-
-As with the other types of ties, this method will be called when the
-tied handle is about to be destroyed. This is useful for debugging and
-possibly for cleaning up.
-
- sub DESTROY {
- print "</shout>\n";
- }
-
-=back
-
-=head2 Malloc enhancements
-
-If perl is compiled with the malloc included with the perl distribution
-(that is, if C<perl -V:d_mymalloc> is 'define') then you can print
-memory statistics at runtime by running Perl thusly:
-
- env PERL_DEBUG_MSTATS=2 perl your_script_here
-
-The value of 2 means to print statistics after compilation and on
-exit; with a value of 1, the statistics are printed only on exit.
-(If you want the statistics at an arbitrary time, you'll need to
-install the optional module Devel::Peek.)
-
-Three new compilation flags are recognized by malloc.c. (They have no
-effect if perl is compiled with system malloc().)
-
-=over 4
-
-=item -DPERL_EMERGENCY_SBRK
-
-If this macro is defined, running out of memory need not be a fatal
-error: a memory pool can allocated by assigning to the special
-variable C<$^M>. See L<"$^M">.
-
-=item -DPACK_MALLOC
-
-Perl memory allocation is by bucket with sizes close to powers of two.
-Because of these malloc overhead may be big, especially for data of
-size exactly a power of two. If C<PACK_MALLOC> is defined, perl uses
-a slightly different algorithm for small allocations (up to 64 bytes
-long), which makes it possible to have overhead down to 1 byte for
-allocations which are powers of two (and appear quite often).
-
-Expected memory savings (with 8-byte alignment in C<alignbytes>) is
-about 20% for typical Perl usage. Expected slowdown due to additional
-malloc overhead is in fractions of a percent (hard to measure, because
-of the effect of saved memory on speed).
-
-=item -DTWO_POT_OPTIMIZE
-
-Similarly to C<PACK_MALLOC>, this macro improves allocations of data
-with size close to a power of two; but this works for big allocations
-(starting with 16K by default). Such allocations are typical for big
-hashes and special-purpose scripts, especially image processing.
-
-On recent systems, the fact that perl requires 2M from system for 1M
-allocation will not affect speed of execution, since the tail of such
-a chunk is not going to be touched (and thus will not require real
-memory). However, it may result in a premature out-of-memory error.
-So if you will be manipulating very large blocks with sizes close to
-powers of two, it would be wise to define this macro.
-
-Expected saving of memory is 0-100% (100% in applications which
-require most memory in such 2**n chunks); expected slowdown is
-negligible.
-
-=back
-
-=head2 Miscellaneous efficiency enhancements
-
-Functions that have an empty prototype and that do nothing but return
-a fixed value are now inlined (e.g. C<sub PI () { 3.14159 }>).
-
-Each unique hash key is only allocated once, no matter how many hashes
-have an entry with that key. So even if you have 100 copies of the
-same hash, the hash keys never have to be reallocated.
-
-=head1 Support for More Operating Systems
-
-Support for the following operating systems is new in Perl 5.004.
-
-=head2 Win32
-
-Perl 5.004 now includes support for building a "native" perl under
-Windows NT, using the Microsoft Visual C++ compiler (versions 2.0
-and above) or the Borland C++ compiler (versions 5.02 and above).
-The resulting perl can be used under Windows 95 (if it
-is installed in the same directory locations as it got installed
-in Windows NT). This port includes support for perl extension
-building tools like L<MakeMaker> and L<h2xs>, so that many extensions
-available on the Comprehensive Perl Archive Network (CPAN) can now be
-readily built under Windows NT. See http://www.perl.com/ for more
-information on CPAN and F<README.win32> in the perl distribution for more
-details on how to get started with building this port.
-
-There is also support for building perl under the Cygwin32 environment.
-Cygwin32 is a set of GNU tools that make it possible to compile and run
-many Unix programs under Windows NT by providing a mostly Unix-like
-interface for compilation and execution. See F<README.cygwin32> in the
-perl distribution for more details on this port and how to obtain the
-Cygwin32 toolkit.
-
-=head2 Plan 9
-
-See F<README.plan9> in the perl distribution.
-
-=head2 QNX
-
-See F<README.qnx> in the perl distribution.
-
-=head2 AmigaOS
-
-See F<README.amigaos> in the perl distribution.
-
-=head1 Pragmata
-
-Six new pragmatic modules exist:
-
-=over 4
-
-=item use autouse MODULE => qw(sub1 sub2 sub3)
-
-Defers C<require MODULE> until someone calls one of the specified
-subroutines (which must be exported by MODULE). This pragma should be
-used with caution, and only when necessary.
-
-=item use blib
-
-=item use blib 'dir'
-
-Looks for MakeMaker-like I<'blib'> directory structure starting in
-I<dir> (or current directory) and working back up to five levels of
-parent directories.
-
-Intended for use on command line with B<-M> option as a way of testing
-arbitrary scripts against an uninstalled version of a package.
-
-=item use constant NAME => VALUE
-
-Provides a convenient interface for creating compile-time constants,
-See L<perlsub/"Constant Functions">.
-
-=item use locale
-
-Tells the compiler to enable (or disable) the use of POSIX locales for
-builtin operations.
-
-When C<use locale> is in effect, the current LC_CTYPE locale is used
-for regular expressions and case mapping; LC_COLLATE for string
-ordering; and LC_NUMERIC for numeric formatting in printf and sprintf
-(but B<not> in print). LC_NUMERIC is always used in write, since
-lexical scoping of formats is problematic at best.
-
-Each C<use locale> or C<no locale> affects statements to the end of
-the enclosing BLOCK or, if not inside a BLOCK, to the end of the
-current file. Locales can be switched and queried with
-POSIX::setlocale().
-
-See L<perllocale> for more information.
-
-=item use ops
-
-Disable unsafe opcodes, or any named opcodes, when compiling Perl code.
-
-=item use vmsish
-
-Enable VMS-specific language features. Currently, there are three
-VMS-specific features available: 'status', which makes C<$?> and
-C<system> return genuine VMS status values instead of emulating POSIX;
-'exit', which makes C<exit> take a genuine VMS status value instead of
-assuming that C<exit 1> is an error; and 'time', which makes all times
-relative to the local time zone, in the VMS tradition.
-
-=back
-
-=head1 Modules
-
-=head2 Required Updates
-
-Though Perl 5.004 is compatible with almost all modules that work
-with Perl 5.003, there are a few exceptions:
-
- Module Required Version for Perl 5.004
- ------ -------------------------------
- Filter Filter-1.12
- LWP libwww-perl-5.08
- Tk Tk400.202 (-w makes noise)
-
-Also, the majordomo mailing list program, version 1.94.1, doesn't work
-with Perl 5.004 (nor with perl 4), because it executes an invalid
-regular expression. This bug is fixed in majordomo version 1.94.2.
-
-=head2 Installation directories
-
-The I<installperl> script now places the Perl source files for
-extensions in the architecture-specific library directory, which is
-where the shared libraries for extensions have always been. This
-change is intended to allow administrators to keep the Perl 5.004
-library directory unchanged from a previous version, without running
-the risk of binary incompatibility between extensions' Perl source and
-shared libraries.
-
-=head2 Module information summary
-
-Brand new modules, arranged by topic rather than strictly
-alphabetically:
-
- CGI.pm Web server interface ("Common Gateway Interface")
- CGI/Apache.pm Support for Apache's Perl module
- CGI/Carp.pm Log server errors with helpful context
- CGI/Fast.pm Support for FastCGI (persistent server process)
- CGI/Push.pm Support for server push
- CGI/Switch.pm Simple interface for multiple server types
-
- CPAN Interface to Comprehensive Perl Archive Network
- CPAN::FirstTime Utility for creating CPAN configuration file
- CPAN::Nox Runs CPAN while avoiding compiled extensions
-
- IO.pm Top-level interface to IO::* classes
- IO/File.pm IO::File extension Perl module
- IO/Handle.pm IO::Handle extension Perl module
- IO/Pipe.pm IO::Pipe extension Perl module
- IO/Seekable.pm IO::Seekable extension Perl module
- IO/Select.pm IO::Select extension Perl module
- IO/Socket.pm IO::Socket extension Perl module
-
- Opcode.pm Disable named opcodes when compiling Perl code
-
- ExtUtils/Embed.pm Utilities for embedding Perl in C programs
- ExtUtils/testlib.pm Fixes up @INC to use just-built extension
-
- FindBin.pm Find path of currently executing program
-
- Class/Struct.pm Declare struct-like datatypes as Perl classes
- File/stat.pm By-name interface to Perl's builtin stat
- Net/hostent.pm By-name interface to Perl's builtin gethost*
- Net/netent.pm By-name interface to Perl's builtin getnet*
- Net/protoent.pm By-name interface to Perl's builtin getproto*
- Net/servent.pm By-name interface to Perl's builtin getserv*
- Time/gmtime.pm By-name interface to Perl's builtin gmtime
- Time/localtime.pm By-name interface to Perl's builtin localtime
- Time/tm.pm Internal object for Time::{gm,local}time
- User/grent.pm By-name interface to Perl's builtin getgr*
- User/pwent.pm By-name interface to Perl's builtin getpw*
-
- Tie/RefHash.pm Base class for tied hashes with references as keys
-
- UNIVERSAL.pm Base class for *ALL* classes
-
-=head2 Fcntl
-
-New constants in the existing Fcntl modules are now supported,
-provided that your operating system happens to support them:
-
- F_GETOWN F_SETOWN
- O_ASYNC O_DEFER O_DSYNC O_FSYNC O_SYNC
- O_EXLOCK O_SHLOCK
-
-These constants are intended for use with the Perl operators sysopen()
-and fcntl() and the basic database modules like SDBM_File. For the
-exact meaning of these and other Fcntl constants please refer to your
-operating system's documentation for fcntl() and open().
-
-In addition, the Fcntl module now provides these constants for use
-with the Perl operator flock():
-
- LOCK_SH LOCK_EX LOCK_NB LOCK_UN
-
-These constants are defined in all environments (because where there is
-no flock() system call, Perl emulates it). However, for historical
-reasons, these constants are not exported unless they are explicitly
-requested with the ":flock" tag (e.g. C<use Fcntl ':flock'>).
-
-=head2 IO
-
-The IO module provides a simple mechanism to load all the IO modules at one
-go. Currently this includes:
-
- IO::Handle
- IO::Seekable
- IO::File
- IO::Pipe
- IO::Socket
-
-For more information on any of these modules, please see its
-respective documentation.
-
-=head2 Math::Complex
-
-The Math::Complex module has been totally rewritten, and now supports
-more operations. These are overloaded:
-
- + - * / ** <=> neg ~ abs sqrt exp log sin cos atan2 "" (stringify)
-
-And these functions are now exported:
-
- pi i Re Im arg
- log10 logn ln cbrt root
- tan
- csc sec cot
- asin acos atan
- acsc asec acot
- sinh cosh tanh
- csch sech coth
- asinh acosh atanh
- acsch asech acoth
- cplx cplxe
-
-=head2 Math::Trig
-
-This new module provides a simpler interface to parts of Math::Complex for
-those who need trigonometric functions only for real numbers.
-
-=head2 DB_File
-
-There have been quite a few changes made to DB_File. Here are a few of
-the highlights:
-
-=over 4
-
-=item *
-
-Fixed a handful of bugs.
-
-=item *
-
-By public demand, added support for the standard hash function exists().
-
-=item *
-
-Made it compatible with Berkeley DB 1.86.
-
-=item *
-
-Made negative subscripts work with RECNO interface.
-
-=item *
-
-Changed the default flags from O_RDWR to O_CREAT|O_RDWR and the default
-mode from 0640 to 0666.
-
-=item *
-
-Made DB_File automatically import the open() constants (O_RDWR,
-O_CREAT etc.) from Fcntl, if available.
-
-=item *
-
-Updated documentation.
-
-=back
-
-Refer to the HISTORY section in DB_File.pm for a complete list of
-changes. Everything after DB_File 1.01 has been added since 5.003.
-
-=head2 Net::Ping
-
-Major rewrite - support added for both udp echo and real icmp pings.
-
-=head2 Object-oriented overrides for builtin operators
-
-Many of the Perl builtins returning lists now have
-object-oriented overrides. These are:
-
- File::stat
- Net::hostent
- Net::netent
- Net::protoent
- Net::servent
- Time::gmtime
- Time::localtime
- User::grent
- User::pwent
-
-For example, you can now say
-
- use File::stat;
- use User::pwent;
- $his = (stat($filename)->st_uid == pwent($whoever)->pw_uid);
-
-=head1 Utility Changes
-
-=head2 pod2html
-
-=over 4
-
-=item Sends converted HTML to standard output
-
-The I<pod2html> utility included with Perl 5.004 is entirely new.
-By default, it sends the converted HTML to its standard output,
-instead of writing it to a file like Perl 5.003's I<pod2html> did.
-Use the B<--outfile=FILENAME> option to write to a file.
-
-=back
-
-=head2 xsubpp
-
-=over 4
-
-=item C<void> XSUBs now default to returning nothing
-
-Due to a documentation/implementation bug in previous versions of
-Perl, XSUBs with a return type of C<void> have actually been
-returning one value. Usually that value was the GV for the XSUB,
-but sometimes it was some already freed or reused value, which would
-sometimes lead to program failure.
-
-In Perl 5.004, if an XSUB is declared as returning C<void>, it
-actually returns no value, i.e. an empty list (though there is a
-backward-compatibility exception; see below). If your XSUB really
-does return an SV, you should give it a return type of C<SV *>.
-
-For backward compatibility, I<xsubpp> tries to guess whether a
-C<void> XSUB is really C<void> or if it wants to return an C<SV *>.
-It does so by examining the text of the XSUB: if I<xsubpp> finds
-what looks like an assignment to C<ST(0)>, it assumes that the
-XSUB's return type is really C<SV *>.
-
-=back
-
-=head1 C Language API Changes
-
-=over 4
-
-=item C<gv_fetchmethod> and C<perl_call_sv>
-
-The C<gv_fetchmethod> function finds a method for an object, just like
-in Perl 5.003. The GV it returns may be a method cache entry.
-However, in Perl 5.004, method cache entries are not visible to users;
-therefore, they can no longer be passed directly to C<perl_call_sv>.
-Instead, you should use the C<GvCV> macro on the GV to extract its CV,
-and pass the CV to C<perl_call_sv>.
-
-The most likely symptom of passing the result of C<gv_fetchmethod> to
-C<perl_call_sv> is Perl's producing an "Undefined subroutine called"
-error on the I<second> call to a given method (since there is no cache
-on the first call).
-
-=item C<perl_eval_pv>
-
-A new function handy for eval'ing strings of Perl code inside C code.
-This function returns the value from the eval statement, which can
-be used instead of fetching globals from the symbol table. See
-L<perlguts>, L<perlembed> and L<perlcall> for details and examples.
-
-=item Extended API for manipulating hashes
-
-Internal handling of hash keys has changed. The old hashtable API is
-still fully supported, and will likely remain so. The additions to the
-API allow passing keys as C<SV*>s, so that C<tied> hashes can be given
-real scalars as keys rather than plain strings (nontied hashes still
-can only use strings as keys). New extensions must use the new hash
-access functions and macros if they wish to use C<SV*> keys. These
-additions also make it feasible to manipulate C<HE*>s (hash entries),
-which can be more efficient. See L<perlguts> for details.
-
-=back
-
-=head1 Documentation Changes
-
-Many of the base and library pods were updated. These
-new pods are included in section 1:
-
-=over 4
-
-=item L<perldelta>
-
-This document.
-
-=item L<perlfaq>
-
-Frequently asked questions.
-
-=item L<perllocale>
-
-Locale support (internationalization and localization).
-
-=item L<perltoot>
-
-Tutorial on Perl OO programming.
-
-=item L<perlapio>
-
-Perl internal IO abstraction interface.
-
-=item L<perlmodlib>
-
-Perl module library and recommended practice for module creation.
-Extracted from L<perlmod> (which is much smaller as a result).
-
-=item L<perldebug>
-
-Although not new, this has been massively updated.
-
-=item L<perlsec>
-
-Although not new, this has been massively updated.
-
-=back
-
-=head1 New Diagnostics
-
-Several new conditions will trigger warnings that were
-silent before. Some only affect certain platforms.
-The following new warnings and errors outline these.
-These messages are classified as follows (listed in
-increasing order of desperation):
-
- (W) A warning (optional).
- (D) A deprecation (optional).
- (S) A severe warning (mandatory).
- (F) A fatal error (trappable).
- (P) An internal error you should never see (trappable).
- (X) A very fatal error (nontrappable).
- (A) An alien error message (not generated by Perl).
-
-=over 4
-
-=item "my" variable %s masks earlier declaration in same scope
-
-(W) A lexical variable has been redeclared in the same scope, effectively
-eliminating all access to the previous instance. This is almost always
-a typographical error. Note that the earlier variable will still exist
-until the end of the scope or until all closure referents to it are
-destroyed.
-
-=item %s argument is not a HASH element or slice
-
-(F) The argument to delete() must be either a hash element, such as
-
- $foo{$bar}
- $ref->[12]->{"susie"}
-
-or a hash slice, such as
-
- @foo{$bar, $baz, $xyzzy}
- @{$ref->[12]}{"susie", "queue"}
-
-=item Allocation too large: %lx
-
-(X) You can't allocate more than 64K on an MS-DOS machine.
-
-=item Allocation too large
-
-(F) You can't allocate more than 2^31+"small amount" bytes.
-
-=item Applying %s to %s will act on scalar(%s)
-
-(W) The pattern match (//), substitution (s///), and transliteration (tr///)
-operators work on scalar values. If you apply one of them to an array
-or a hash, it will convert the array or hash to a scalar value -- the
-length of an array, or the population info of a hash -- and then work on
-that scalar value. This is probably not what you meant to do. See
-L<perlfunc/grep> and L<perlfunc/map> for alternatives.
-
-=item Attempt to free nonexistent shared string
-
-(P) Perl maintains a reference counted internal table of strings to
-optimize the storage and access of hash keys and other strings. This
-indicates someone tried to decrement the reference count of a string
-that can no longer be found in the table.
-
-=item Attempt to use reference as lvalue in substr
-
-(W) You supplied a reference as the first argument to substr() used
-as an lvalue, which is pretty strange. Perhaps you forgot to
-dereference it first. See L<perlfunc/substr>.
-
-=item Bareword "%s" refers to nonexistent package
-
-(W) You used a qualified bareword of the form C<Foo::>, but
-the compiler saw no other uses of that namespace before that point.
-Perhaps you need to predeclare a package?
-
-=item Can't redefine active sort subroutine %s
-
-(F) Perl optimizes the internal handling of sort subroutines and keeps
-pointers into them. You tried to redefine one such sort subroutine when it
-was currently active, which is not allowed. If you really want to do
-this, you should write C<sort { &func } @x> instead of C<sort func @x>.
-
-=item Can't use bareword ("%s") as %s ref while "strict refs" in use
-
-(F) Only hard references are allowed by "strict refs". Symbolic references
-are disallowed. See L<perlref>.
-
-=item Cannot resolve method `%s' overloading `%s' in package `%s'
-
-(P) Internal error trying to resolve overloading specified by a method
-name (as opposed to a subroutine reference).
-
-=item Constant subroutine %s redefined
-
-(S) You redefined a subroutine which had previously been eligible for
-inlining. See L<perlsub/"Constant Functions"> for commentary and
-workarounds.
-
-=item Constant subroutine %s undefined
-
-(S) You undefined a subroutine which had previously been eligible for
-inlining. See L<perlsub/"Constant Functions"> for commentary and
-workarounds.
-
-=item Copy method did not return a reference
-
-(F) The method which overloads "=" is buggy. See L<overload/Copy Constructor>.
-
-=item Died
-
-(F) You passed die() an empty string (the equivalent of C<die "">) or
-you called it with no args and both C<$@> and C<$_> were empty.
-
-=item Exiting pseudo-block via %s
-
-(W) You are exiting a rather special block construct (like a sort block or
-subroutine) by unconventional means, such as a goto, or a loop control
-statement. See L<perlfunc/sort>.
-
-=item Identifier too long
-
-(F) Perl limits identifiers (names for variables, functions, etc.) to
-252 characters for simple names, somewhat more for compound names (like
-C<$A::B>). You've exceeded Perl's limits. Future versions of Perl are
-likely to eliminate these arbitrary limitations.
-
-=item Illegal character %s (carriage return)
-
-(F) A carriage return character was found in the input. This is an
-error, and not a warning, because carriage return characters can break
-multi-line strings, including here documents (e.g., C<print <<EOF;>).
-
-=item Illegal switch in PERL5OPT: %s
-
-(X) The PERL5OPT environment variable may only be used to set the
-following switches: B<-[DIMUdmw]>.
-
-=item Integer overflow in hex number
-
-(S) The literal hex number you have specified is too big for your
-architecture. On a 32-bit architecture the largest hex literal is
-0xFFFFFFFF.
-
-=item Integer overflow in octal number
-
-(S) The literal octal number you have specified is too big for your
-architecture. On a 32-bit architecture the largest octal literal is
-037777777777.
-
-=item internal error: glob failed
-
-(P) Something went wrong with the external program(s) used for C<glob>
-and C<< <*.c> >>. This may mean that your csh (C shell) is
-broken. If so, you should change all of the csh-related variables in
-config.sh: If you have tcsh, make the variables refer to it as if it
-were csh (e.g. C<full_csh='/usr/bin/tcsh'>); otherwise, make them all
-empty (except that C<d_csh> should be C<'undef'>) so that Perl will
-think csh is missing. In either case, after editing config.sh, run
-C<./Configure -S> and rebuild Perl.
-
-=item Invalid conversion in %s: "%s"
-
-(W) Perl does not understand the given format conversion.
-See L<perlfunc/sprintf>.
-
-=item Invalid type in pack: '%s'
-
-(F) The given character is not a valid pack type. See L<perlfunc/pack>.
-
-=item Invalid type in unpack: '%s'
-
-(F) The given character is not a valid unpack type. See L<perlfunc/unpack>.
-
-=item Name "%s::%s" used only once: possible typo
-
-(W) Typographical errors often show up as unique variable names.
-If you had a good reason for having a unique name, then just mention
-it again somehow to suppress the message (the C<use vars> pragma is
-provided for just this purpose).
-
-=item Null picture in formline
-
-(F) The first argument to formline must be a valid format picture
-specification. It was found to be empty, which probably means you
-supplied it an uninitialized value. See L<perlform>.
-
-=item Offset outside string
-
-(F) You tried to do a read/write/send/recv operation with an offset
-pointing outside the buffer. This is difficult to imagine.
-The sole exception to this is that C<sysread()>ing past the buffer
-will extend the buffer and zero pad the new area.
-
-=item Out of memory!
-
-(X|F) The malloc() function returned 0, indicating there was insufficient
-remaining memory (or virtual memory) to satisfy the request.
-
-The request was judged to be small, so the possibility to trap it
-depends on the way Perl was compiled. By default it is not trappable.
-However, if compiled for this, Perl may use the contents of C<$^M> as
-an emergency pool after die()ing with this message. In this case the
-error is trappable I<once>.
-
-=item Out of memory during request for %s
-
-(F) The malloc() function returned 0, indicating there was insufficient
-remaining memory (or virtual memory) to satisfy the request. However,
-the request was judged large enough (compile-time default is 64K), so
-a possibility to shut down by trapping this error is granted.
-
-=item panic: frexp
-
-(P) The library function frexp() failed, making printf("%f") impossible.
-
-=item Possible attempt to put comments in qw() list
-
-(W) qw() lists contain items separated by whitespace; as with literal
-strings, comment characters are not ignored, but are instead treated
-as literal data. (You may have used different delimiters than the
-parentheses shown here; braces are also frequently used.)
-
-You probably wrote something like this:
-
- @list = qw(
- a # a comment
- b # another comment
- );
-
-when you should have written this:
-
- @list = qw(
- a
- b
- );
-
-If you really want comments, build your list the
-old-fashioned way, with quotes and commas:
-
- @list = (
- 'a', # a comment
- 'b', # another comment
- );
-
-=item Possible attempt to separate words with commas
-
-(W) qw() lists contain items separated by whitespace; therefore commas
-aren't needed to separate the items. (You may have used different
-delimiters than the parentheses shown here; braces are also frequently
-used.)
-
-You probably wrote something like this:
-
- qw! a, b, c !;
-
-which puts literal commas into some of the list items. Write it without
-commas if you don't want them to appear in your data:
-
- qw! a b c !;
-
-=item Scalar value @%s{%s} better written as $%s{%s}
-
-(W) You've used a hash slice (indicated by @) to select a single element of
-a hash. Generally it's better to ask for a scalar value (indicated by $).
-The difference is that C<$foo{&bar}> always behaves like a scalar, both when
-assigning to it and when evaluating its argument, while C<@foo{&bar}> behaves
-like a list when you assign to it, and provides a list context to its
-subscript, which can do weird things if you're expecting only one subscript.
-
-=item Stub found while resolving method `%s' overloading `%s' in %s
-
-(P) Overloading resolution over @ISA tree may be broken by importing stubs.
-Stubs should never be implicitly created, but explicit calls to C<can>
-may break this.
-
-=item Too late for "B<-T>" option
-
-(X) The #! line (or local equivalent) in a Perl script contains the
-B<-T> option, but Perl was not invoked with B<-T> in its argument
-list. This is an error because, by the time Perl discovers a B<-T> in
-a script, it's too late to properly taint everything from the
-environment. So Perl gives up.
-
-=item untie attempted while %d inner references still exist
-
-(W) A copy of the object returned from C<tie> (or C<tied>) was still
-valid when C<untie> was called.
-
-=item Unrecognized character %s
-
-(F) The Perl parser has no idea what to do with the specified character
-in your Perl script (or eval). Perhaps you tried to run a compressed
-script, a binary program, or a directory as a Perl program.
-
-=item Unsupported function fork
-
-(F) Your version of executable does not support forking.
-
-Note that under some systems, like OS/2, there may be different flavors of
-Perl executables, some of which may support fork, some not. Try changing
-the name you call Perl by to C<perl_>, C<perl__>, and so on.
-
-=item Use of "$$<digit>" to mean "${$}<digit>" is deprecated
-
-(D) Perl versions before 5.004 misinterpreted any type marker followed
-by "$" and a digit. For example, "$$0" was incorrectly taken to mean
-"${$}0" instead of "${$0}". This bug is (mostly) fixed in Perl 5.004.
-
-However, the developers of Perl 5.004 could not fix this bug completely,
-because at least two widely-used modules depend on the old meaning of
-"$$0" in a string. So Perl 5.004 still interprets "$$<digit>" in the
-old (broken) way inside strings; but it generates this message as a
-warning. And in Perl 5.005, this special treatment will cease.
-
-=item Value of %s can be "0"; test with defined()
-
-(W) In a conditional expression, you used <HANDLE>, <*> (glob), C<each()>,
-or C<readdir()> as a boolean value. Each of these constructs can return a
-value of "0"; that would make the conditional expression false, which is
-probably not what you intended. When using these constructs in conditional
-expressions, test their values with the C<defined> operator.
-
-=item Variable "%s" may be unavailable
-
-(W) An inner (nested) I<anonymous> subroutine is inside a I<named>
-subroutine, and outside that is another subroutine; and the anonymous
-(innermost) subroutine is referencing a lexical variable defined in
-the outermost subroutine. For example:
-
- sub outermost { my $a; sub middle { sub { $a } } }
-
-If the anonymous subroutine is called or referenced (directly or
-indirectly) from the outermost subroutine, it will share the variable
-as you would expect. But if the anonymous subroutine is called or
-referenced when the outermost subroutine is not active, it will see
-the value of the shared variable as it was before and during the
-*first* call to the outermost subroutine, which is probably not what
-you want.
-
-In these circumstances, it is usually best to make the middle
-subroutine anonymous, using the C<sub {}> syntax. Perl has specific
-support for shared variables in nested anonymous subroutines; a named
-subroutine in between interferes with this feature.
-
-=item Variable "%s" will not stay shared
-
-(W) An inner (nested) I<named> subroutine is referencing a lexical
-variable defined in an outer subroutine.
-
-When the inner subroutine is called, it will probably see the value of
-the outer subroutine's variable as it was before and during the
-*first* call to the outer subroutine; in this case, after the first
-call to the outer subroutine is complete, the inner and outer
-subroutines will no longer share a common value for the variable. In
-other words, the variable will no longer be shared.
-
-Furthermore, if the outer subroutine is anonymous and references a
-lexical variable outside itself, then the outer and inner subroutines
-will I<never> share the given variable.
-
-This problem can usually be solved by making the inner subroutine
-anonymous, using the C<sub {}> syntax. When inner anonymous subs that
-reference variables in outer subroutines are called or referenced,
-they are automatically rebound to the current values of such
-variables.
-
-=item Warning: something's wrong
-
-(W) You passed warn() an empty string (the equivalent of C<warn "">) or
-you called it with no args and C<$_> was empty.
-
-=item Ill-formed logical name |%s| in prime_env_iter
-
-(W) A warning peculiar to VMS. A logical name was encountered when preparing
-to iterate over %ENV which violates the syntactic rules governing logical
-names. Since it cannot be translated normally, it is skipped, and will not
-appear in %ENV. This may be a benign occurrence, as some software packages
-might directly modify logical name tables and introduce nonstandard names,
-or it may indicate that a logical name table has been corrupted.
-
-=item Got an error from DosAllocMem
-
-(P) An error peculiar to OS/2. Most probably you're using an obsolete
-version of Perl, and this should not happen anyway.
-
-=item Malformed PERLLIB_PREFIX
-
-(F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form
-
- prefix1;prefix2
-
-or
-
- prefix1 prefix2
-
-with nonempty prefix1 and prefix2. If C<prefix1> is indeed a prefix
-of a builtin library search path, prefix2 is substituted. The error
-may appear if components are not found, or are too long. See
-"PERLLIB_PREFIX" in F<README.os2>.
-
-=item PERL_SH_DIR too long
-
-(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the
-C<sh>-shell in. See "PERL_SH_DIR" in F<README.os2>.
-
-=item Process terminated by SIG%s
-
-(W) This is a standard message issued by OS/2 applications, while *nix
-applications die in silence. It is considered a feature of the OS/2
-port. One can easily disable this by appropriate sighandlers, see
-L<perlipc/"Signals">. See also "Process terminated by SIGTERM/SIGINT"
-in F<README.os2>.
-
-=back
-
-=head1 BUGS
-
-If you find what you think is a bug, you might check the headers of
-recently posted articles in the comp.lang.perl.misc newsgroup.
-There may also be information at http://www.perl.com/perl/, the Perl
-Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Make sure you trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to <F<perlbug@perl.com>> to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl. This file has been
-significantly updated for 5.004, so even veteran users should
-look through it.
-
-The F<README> file for general stuff.
-
-The F<Copying> file for copyright information.
-
-=head1 HISTORY
-
-Constructed by Tom Christiansen, grabbing material with permission
-from innumerable contributors, with kibitzing by more than a few Perl
-porters.
-
-Last update: Wed May 14 11:14:09 EDT 1997
diff --git a/contrib/perl5/pod/perl5005delta.pod b/contrib/perl5/pod/perl5005delta.pod
deleted file mode 100644
index 78bf90f..0000000
--- a/contrib/perl5/pod/perl5005delta.pod
+++ /dev/null
@@ -1,993 +0,0 @@
-=head1 NAME
-
-perldelta - what's new for perl5.005
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.004 release and this one.
-
-=head1 About the new versioning system
-
-Perl is now developed on two tracks: a maintenance track that makes
-small, safe updates to released production versions with emphasis on
-compatibility; and a development track that pursues more aggressive
-evolution. Maintenance releases (which should be considered production
-quality) have subversion numbers that run from C<1> to C<49>, and
-development releases (which should be considered "alpha" quality) run
-from C<50> to C<99>.
-
-Perl 5.005 is the combined product of the new dual-track development
-scheme.
-
-=head1 Incompatible Changes
-
-=head2 WARNING: This version is not binary compatible with Perl 5.004.
-
-Starting with Perl 5.004_50 there were many deep and far-reaching changes
-to the language internals. If you have dynamically loaded extensions
-that you built under perl 5.003 or 5.004, you can continue to use them
-with 5.004, but you will need to rebuild and reinstall those extensions
-to use them 5.005. See F<INSTALL> for detailed instructions on how to
-upgrade.
-
-=head2 Default installation structure has changed
-
-The new Configure defaults are designed to allow a smooth upgrade from
-5.004 to 5.005, but you should read F<INSTALL> for a detailed
-discussion of the changes in order to adapt them to your system.
-
-=head2 Perl Source Compatibility
-
-When none of the experimental features are enabled, there should be
-very few user-visible Perl source compatibility issues.
-
-If threads are enabled, then some caveats apply. C<@_> and C<$_> become
-lexical variables. The effect of this should be largely transparent to
-the user, but there are some boundary conditions under which user will
-need to be aware of the issues. For example, C<local(@_)> results in
-a "Can't localize lexical variable @_ ..." message. This may be enabled
-in a future version.
-
-Some new keywords have been introduced. These are generally expected to
-have very little impact on compatibility. See L<New C<INIT> keyword>,
-L<New C<lock> keyword>, and L<New C<qr//> operator>.
-
-Certain barewords are now reserved. Use of these will provoke a warning
-if you have asked for them with the C<-w> switch.
-See L<C<our> is now a reserved word>.
-
-=head2 C Source Compatibility
-
-There have been a large number of changes in the internals to support
-the new features in this release.
-
-=over 4
-
-=item *
-
-Core sources now require ANSI C compiler
-
-An ANSI C compiler is now B<required> to build perl. See F<INSTALL>.
-
-=item *
-
-All Perl global variables must now be referenced with an explicit prefix
-
-All Perl global variables that are visible for use by extensions now
-have a C<PL_> prefix. New extensions should C<not> refer to perl globals
-by their unqualified names. To preserve sanity, we provide limited
-backward compatibility for globals that are being widely used like
-C<sv_undef> and C<na> (which should now be written as C<PL_sv_undef>,
-C<PL_na> etc.)
-
-If you find that your XS extension does not compile anymore because a
-perl global is not visible, try adding a C<PL_> prefix to the global
-and rebuild.
-
-It is strongly recommended that all functions in the Perl API that don't
-begin with C<perl> be referenced with a C<Perl_> prefix. The bare function
-names without the C<Perl_> prefix are supported with macros, but this
-support may cease in a future release.
-
-See L<perlguts/"API LISTING">.
-
-=item *
-
-Enabling threads has source compatibility issues
-
-Perl built with threading enabled requires extensions to use the new
-C<dTHR> macro to initialize the handle to access per-thread data.
-If you see a compiler error that talks about the variable C<thr> not
-being declared (when building a module that has XS code), you need
-to add C<dTHR;> at the beginning of the block that elicited the error.
-
-The API function C<perl_get_sv("@",FALSE)> should be used instead of
-directly accessing perl globals as C<GvSV(errgv)>. The API call is
-backward compatible with existing perls and provides source compatibility
-with threading is enabled.
-
-See L<"C Source Compatibility"> for more information.
-
-=back
-
-=head2 Binary Compatibility
-
-This version is NOT binary compatible with older versions. All extensions
-will need to be recompiled. Further binaries built with threads enabled
-are incompatible with binaries built without. This should largely be
-transparent to the user, as all binary incompatible configurations have
-their own unique architecture name, and extension binaries get installed at
-unique locations. This allows coexistence of several configurations in
-the same directory hierarchy. See F<INSTALL>.
-
-=head2 Security fixes may affect compatibility
-
-A few taint leaks and taint omissions have been corrected. This may lead
-to "failure" of scripts that used to work with older versions. Compiling
-with -DINCOMPLETE_TAINTS provides a perl with minimal amounts of changes
-to the tainting behavior. But note that the resulting perl will have
-known insecurities.
-
-Oneliners with the C<-e> switch do not create temporary files anymore.
-
-=head2 Relaxed new mandatory warnings introduced in 5.004
-
-Many new warnings that were introduced in 5.004 have been made
-optional. Some of these warnings are still present, but perl's new
-features make them less often a problem. See L<New Diagnostics>.
-
-=head2 Licensing
-
-Perl has a new Social Contract for contributors. See F<Porting/Contract>.
-
-The license included in much of the Perl documentation has changed.
-Most of the Perl documentation was previously under the implicit GNU
-General Public License or the Artistic License (at the user's choice).
-Now much of the documentation unambiguously states the terms under which
-it may be distributed. Those terms are in general much less restrictive
-than the GNU GPL. See L<perl> and the individual perl man pages listed
-therein.
-
-=head1 Core Changes
-
-
-=head2 Threads
-
-WARNING: Threading is considered an B<experimental> feature. Details of the
-implementation may change without notice. There are known limitations
-and some bugs. These are expected to be fixed in future versions.
-
-See F<README.threads>.
-
-=head2 Compiler
-
-WARNING: The Compiler and related tools are considered B<experimental>.
-Features may change without notice, and there are known limitations
-and bugs. Since the compiler is fully external to perl, the default
-configuration will build and install it.
-
-The Compiler produces three different types of transformations of a
-perl program. The C backend generates C code that captures perl's state
-just before execution begins. It eliminates the compile-time overheads
-of the regular perl interpreter, but the run-time performance remains
-comparatively the same. The CC backend generates optimized C code
-equivalent to the code path at run-time. The CC backend has greater
-potential for big optimizations, but only a few optimizations are
-implemented currently. The Bytecode backend generates a platform
-independent bytecode representation of the interpreter's state
-just before execution. Thus, the Bytecode back end also eliminates
-much of the compilation overhead of the interpreter.
-
-The compiler comes with several valuable utilities.
-
-C<B::Lint> is an experimental module to detect and warn about suspicious
-code, especially the cases that the C<-w> switch does not detect.
-
-C<B::Deparse> can be used to demystify perl code, and understand
-how perl optimizes certain constructs.
-
-C<B::Xref> generates cross reference reports of all definition and use
-of variables, subroutines and formats in a program.
-
-C<B::Showlex> show the lexical variables used by a subroutine or file
-at a glance.
-
-C<perlcc> is a simple frontend for compiling perl.
-
-See C<ext/B/README>, L<B>, and the respective compiler modules.
-
-=head2 Regular Expressions
-
-Perl's regular expression engine has been seriously overhauled, and
-many new constructs are supported. Several bugs have been fixed.
-
-Here is an itemized summary:
-
-=over 4
-
-=item Many new and improved optimizations
-
-Changes in the RE engine:
-
- Unneeded nodes removed;
- Substrings merged together;
- New types of nodes to process (SUBEXPR)* and similar expressions
- quickly, used if the SUBEXPR has no side effects and matches
- strings of the same length;
- Better optimizations by lookup for constant substrings;
- Better search for constants substrings anchored by $ ;
-
-Changes in Perl code using RE engine:
-
- More optimizations to s/longer/short/;
- study() was not working;
- /blah/ may be optimized to an analogue of index() if $& $` $' not seen;
- Unneeded copying of matched-against string removed;
- Only matched part of the string is copying if $` $' were not seen;
-
-=item Many bug fixes
-
-Note that only the major bug fixes are listed here. See F<Changes> for others.
-
- Backtracking might not restore start of $3.
- No feedback if max count for * or + on "complex" subexpression
- was reached, similarly (but at compile time) for {3,34567}
- Primitive restrictions on max count introduced to decrease a
- possibility of a segfault;
- (ZERO-LENGTH)* could segfault;
- (ZERO-LENGTH)* was prohibited;
- Long REs were not allowed;
- /RE/g could skip matches at the same position after a
- zero-length match;
-
-=item New regular expression constructs
-
-The following new syntax elements are supported:
-
- (?<=RE)
- (?<!RE)
- (?{ CODE })
- (?i-x)
- (?i:RE)
- (?(COND)YES_RE|NO_RE)
- (?>RE)
- \z
-
-=item New operator for precompiled regular expressions
-
-See L<New C<qr//> operator>.
-
-=item Other improvements
-
- Better debugging output (possibly with colors),
- even from non-debugging Perl;
- RE engine code now looks like C, not like assembler;
- Behaviour of RE modifiable by `use re' directive;
- Improved documentation;
- Test suite significantly extended;
- Syntax [:^upper:] etc., reserved inside character classes;
-
-=item Incompatible changes
-
- (?i) localized inside enclosing group;
- $( is not interpolated into RE any more;
- /RE/g may match at the same position (with non-zero length)
- after a zero-length match (bug fix).
-
-=back
-
-See L<perlre> and L<perlop>.
-
-=head2 Improved malloc()
-
-See banner at the beginning of C<malloc.c> for details.
-
-=head2 Quicksort is internally implemented
-
-Perl now contains its own highly optimized qsort() routine. The new qsort()
-is resistant to inconsistent comparison functions, so Perl's C<sort()> will
-not provoke coredumps any more when given poorly written sort subroutines.
-(Some C library C<qsort()>s that were being used before used to have this
-problem.) In our testing, the new C<qsort()> required the minimal number
-of pair-wise compares on average, among all known C<qsort()> implementations.
-
-See C<perlfunc/sort>.
-
-=head2 Reliable signals
-
-Perl's signal handling is susceptible to random crashes, because signals
-arrive asynchronously, and the Perl runtime is not reentrant at arbitrary
-times.
-
-However, one experimental implementation of reliable signals is available
-when threads are enabled. See C<Thread::Signal>. Also see F<INSTALL> for
-how to build a Perl capable of threads.
-
-=head2 Reliable stack pointers
-
-The internals now reallocate the perl stack only at predictable times.
-In particular, magic calls never trigger reallocations of the stack,
-because all reentrancy of the runtime is handled using a "stack of stacks".
-This should improve reliability of cached stack pointers in the internals
-and in XSUBs.
-
-=head2 More generous treatment of carriage returns
-
-Perl used to complain if it encountered literal carriage returns in
-scripts. Now they are mostly treated like whitespace within program text.
-Inside string literals and here documents, literal carriage returns are
-ignored if they occur paired with linefeeds, or get interpreted as whitespace
-if they stand alone. This behavior means that literal carriage returns
-in files should be avoided. You can get the older, more compatible (but
-less generous) behavior by defining the preprocessor symbol
-C<PERL_STRICT_CR> when building perl. Of course, all this has nothing
-whatever to do with how escapes like C<\r> are handled within strings.
-
-Note that this doesn't somehow magically allow you to keep all text files
-in DOS format. The generous treatment only applies to files that perl
-itself parses. If your C compiler doesn't allow carriage returns in
-files, you may still be unable to build modules that need a C compiler.
-
-=head2 Memory leaks
-
-C<substr>, C<pos> and C<vec> don't leak memory anymore when used in lvalue
-context. Many small leaks that impacted applications that embed multiple
-interpreters have been fixed.
-
-=head2 Better support for multiple interpreters
-
-The build-time option C<-DMULTIPLICITY> has had many of the details
-reworked. Some previously global variables that should have been
-per-interpreter now are. With care, this allows interpreters to call
-each other. See the C<PerlInterp> extension on CPAN.
-
-=head2 Behavior of local() on array and hash elements is now well-defined
-
-See L<perlsub/"Temporary Values via local()">.
-
-=head2 C<%!> is transparently tied to the L<Errno> module
-
-See L<perlvar>, and L<Errno>.
-
-=head2 Pseudo-hashes are supported
-
-See L<perlref>.
-
-=head2 C<EXPR foreach EXPR> is supported
-
-See L<perlsyn>.
-
-=head2 Keywords can be globally overridden
-
-See L<perlsub>.
-
-=head2 C<$^E> is meaningful on Win32
-
-See L<perlvar>.
-
-=head2 C<foreach (1..1000000)> optimized
-
-C<foreach (1..1000000)> is now optimized into a counting loop. It does
-not try to allocate a 1000000-size list anymore.
-
-=head2 C<Foo::> can be used as implicitly quoted package name
-
-Barewords caused unintuitive behavior when a subroutine with the same
-name as a package happened to be defined. Thus, C<new Foo @args>,
-use the result of the call to C<Foo()> instead of C<Foo> being treated
-as a literal. The recommended way to write barewords in the indirect
-object slot is C<new Foo:: @args>. Note that the method C<new()> is
-called with a first argument of C<Foo>, not C<Foo::> when you do that.
-
-=head2 C<exists $Foo::{Bar::}> tests existence of a package
-
-It was impossible to test for the existence of a package without
-actually creating it before. Now C<exists $Foo::{Bar::}> can be
-used to test if the C<Foo::Bar> namespace has been created.
-
-=head2 Better locale support
-
-See L<perllocale>.
-
-=head2 Experimental support for 64-bit platforms
-
-Perl5 has always had 64-bit support on systems with 64-bit longs.
-Starting with 5.005, the beginnings of experimental support for systems
-with 32-bit long and 64-bit 'long long' integers has been added.
-If you add -DUSE_LONG_LONG to your ccflags in config.sh (or manually
-define it in perl.h) then perl will be built with 'long long' support.
-There will be many compiler warnings, and the resultant perl may not
-work on all systems. There are many other issues related to
-third-party extensions and libraries. This option exists to allow
-people to work on those issues.
-
-=head2 prototype() returns useful results on builtins
-
-See L<perlfunc/prototype>.
-
-=head2 Extended support for exception handling
-
-C<die()> now accepts a reference value, and C<$@> gets set to that
-value in exception traps. This makes it possible to propagate
-exception objects. This is an undocumented B<experimental> feature.
-
-=head2 Re-blessing in DESTROY() supported for chaining DESTROY() methods
-
-See L<perlobj/Destructors>.
-
-=head2 All C<printf> format conversions are handled internally
-
-See L<perlfunc/printf>.
-
-=head2 New C<INIT> keyword
-
-C<INIT> subs are like C<BEGIN> and C<END>, but they get run just before
-the perl runtime begins execution. e.g., the Perl Compiler makes use of
-C<INIT> blocks to initialize and resolve pointers to XSUBs.
-
-=head2 New C<lock> keyword
-
-The C<lock> keyword is the fundamental synchronization primitive
-in threaded perl. When threads are not enabled, it is currently a noop.
-
-To minimize impact on source compatibility this keyword is "weak", i.e., any
-user-defined subroutine of the same name overrides it, unless a C<use Thread>
-has been seen.
-
-=head2 New C<qr//> operator
-
-The C<qr//> operator, which is syntactically similar to the other quote-like
-operators, is used to create precompiled regular expressions. This compiled
-form can now be explicitly passed around in variables, and interpolated in
-other regular expressions. See L<perlop>.
-
-=head2 C<our> is now a reserved word
-
-Calling a subroutine with the name C<our> will now provoke a warning when
-using the C<-w> switch.
-
-=head2 Tied arrays are now fully supported
-
-See L<Tie::Array>.
-
-=head2 Tied handles support is better
-
-Several missing hooks have been added. There is also a new base class for
-TIEARRAY implementations. See L<Tie::Array>.
-
-=head2 4th argument to substr
-
-substr() can now both return and replace in one operation. The optional
-4th argument is the replacement string. See L<perlfunc/substr>.
-
-=head2 Negative LENGTH argument to splice
-
-splice() with a negative LENGTH argument now work similar to what the
-LENGTH did for substr(). Previously a negative LENGTH was treated as
-0. See L<perlfunc/splice>.
-
-=head2 Magic lvalues are now more magical
-
-When you say something like C<substr($x, 5) = "hi">, the scalar returned
-by substr() is special, in that any modifications to it affect $x.
-(This is called a 'magic lvalue' because an 'lvalue' is something on
-the left side of an assignment.) Normally, this is exactly what you
-would expect to happen, but Perl uses the same magic if you use substr(),
-pos(), or vec() in a context where they might be modified, like taking
-a reference with C<\> or as an argument to a sub that modifies C<@_>.
-In previous versions, this 'magic' only went one way, but now changes
-to the scalar the magic refers to ($x in the above example) affect the
-magic lvalue too. For instance, this code now acts differently:
-
- $x = "hello";
- sub printit {
- $x = "g'bye";
- print $_[0], "\n";
- }
- printit(substr($x, 0, 5));
-
-In previous versions, this would print "hello", but it now prints "g'bye".
-
-=head2 <> now reads in records
-
-If C<$/> is a reference to an integer, or a scalar that holds an integer,
-<> will read in records instead of lines. For more info, see
-L<perlvar/$/>.
-
-=head1 Supported Platforms
-
-Configure has many incremental improvements. Site-wide policy for building
-perl can now be made persistent, via Policy.sh. Configure also records
-the command-line arguments used in F<config.sh>.
-
-=head2 New Platforms
-
-BeOS is now supported. See F<README.beos>.
-
-DOS is now supported under the DJGPP tools. See F<README.dos> (installed
-as L<perldos> on some systems).
-
-MiNT is now supported. See F<README.mint>.
-
-MPE/iX is now supported. See F<README.mpeix>.
-
-MVS (aka OS390, aka Open Edition) is now supported. See F<README.os390>
-(installed as L<perlos390> on some systems).
-
-Stratus VOS is now supported. See F<README.vos>.
-
-=head2 Changes in existing support
-
-Win32 support has been vastly enhanced. Support for Perl Object, a C++
-encapsulation of Perl. GCC and EGCS are now supported on Win32.
-See F<README.win32>, aka L<perlwin32>.
-
-VMS configuration system has been rewritten. See F<README.vms> (installed
-as L<README_vms> on some systems).
-
-The hints files for most Unix platforms have seen incremental improvements.
-
-=head1 Modules and Pragmata
-
-=head2 New Modules
-
-=over 4
-
-=item B
-
-Perl compiler and tools. See L<B>.
-
-=item Data::Dumper
-
-A module to pretty print Perl data. See L<Data::Dumper>.
-
-=item Dumpvalue
-
-A module to dump perl values to the screen. See L<Dumpvalue>.
-
-=item Errno
-
-A module to look up errors more conveniently. See L<Errno>.
-
-=item File::Spec
-
-A portable API for file operations.
-
-=item ExtUtils::Installed
-
-Query and manage installed modules.
-
-=item ExtUtils::Packlist
-
-Manipulate .packlist files.
-
-=item Fatal
-
-Make functions/builtins succeed or die.
-
-=item IPC::SysV
-
-Constants and other support infrastructure for System V IPC operations
-in perl.
-
-=item Test
-
-A framework for writing testsuites.
-
-=item Tie::Array
-
-Base class for tied arrays.
-
-=item Tie::Handle
-
-Base class for tied handles.
-
-=item Thread
-
-Perl thread creation, manipulation, and support.
-
-=item attrs
-
-Set subroutine attributes.
-
-=item fields
-
-Compile-time class fields.
-
-=item re
-
-Various pragmata to control behavior of regular expressions.
-
-=back
-
-=head2 Changes in existing modules
-
-=over 4
-
-=item Benchmark
-
-You can now run tests for I<x> seconds instead of guessing the right
-number of tests to run.
-
-Keeps better time.
-
-=item Carp
-
-Carp has a new function cluck(). cluck() warns, like carp(), but also adds
-a stack backtrace to the error message, like confess().
-
-=item CGI
-
-CGI has been updated to version 2.42.
-
-=item Fcntl
-
-More Fcntl constants added: F_SETLK64, F_SETLKW64, O_LARGEFILE for
-large (more than 4G) file access (the 64-bit support is not yet
-working, though, so no need to get overly excited), Free/Net/OpenBSD
-locking behaviour flags F_FLOCK, F_POSIX, Linux F_SHLCK, and
-O_ACCMODE: the mask of O_RDONLY, O_WRONLY, and O_RDWR.
-
-=item Math::Complex
-
-The accessors methods Re, Im, arg, abs, rho, theta, methods can
-($z->Re()) now also act as mutators ($z->Re(3)).
-
-=item Math::Trig
-
-A little bit of radial trigonometry (cylindrical and spherical) added,
-for example the great circle distance.
-
-=item POSIX
-
-POSIX now has its own platform-specific hints files.
-
-=item DB_File
-
-DB_File supports version 2.x of Berkeley DB. See C<ext/DB_File/Changes>.
-
-=item MakeMaker
-
-MakeMaker now supports writing empty makefiles, provides a way to
-specify that site umask() policy should be honored. There is also
-better support for manipulation of .packlist files, and getting
-information about installed modules.
-
-Extensions that have both architecture-dependent and
-architecture-independent files are now always installed completely in
-the architecture-dependent locations. Previously, the shareable parts
-were shared both across architectures and across perl versions and were
-therefore liable to be overwritten with newer versions that might have
-subtle incompatibilities.
-
-=item CPAN
-
-See <perlmodinstall> and L<CPAN>.
-
-=item Cwd
-
-Cwd::cwd is faster on most platforms.
-
-=back
-
-=head1 Utility Changes
-
-C<h2ph> and related utilities have been vastly overhauled.
-
-C<perlcc>, a new experimental front end for the compiler is available.
-
-The crude GNU C<configure> emulator is now called C<configure.gnu> to
-avoid trampling on C<Configure> under case-insensitive filesystems.
-
-C<perldoc> used to be rather slow. The slower features are now optional.
-In particular, case-insensitive searches need the C<-i> switch, and
-recursive searches need C<-r>. You can set these switches in the
-C<PERLDOC> environment variable to get the old behavior.
-
-=head1 Documentation Changes
-
-Config.pm now has a glossary of variables.
-
-F<Porting/patching.pod> has detailed instructions on how to create and
-submit patches for perl.
-
-L<perlport> specifies guidelines on how to write portably.
-
-L<perlmodinstall> describes how to fetch and install modules from C<CPAN>
-sites.
-
-Some more Perl traps are documented now. See L<perltrap>.
-
-L<perlopentut> gives a tutorial on using open().
-
-L<perlreftut> gives a tutorial on references.
-
-L<perlthrtut> gives a tutorial on threads.
-
-=head1 New Diagnostics
-
-=over 4
-
-=item Ambiguous call resolved as CORE::%s(), qualify as such or use &
-
-(W) A subroutine you have declared has the same name as a Perl keyword,
-and you have used the name without qualification for calling one or the
-other. Perl decided to call the builtin because the subroutine is
-not imported.
-
-To force interpretation as a subroutine call, either put an ampersand
-before the subroutine name, or qualify the name with its package.
-Alternatively, you can import the subroutine (or pretend that it's
-imported with the C<use subs> pragma).
-
-To silently interpret it as the Perl operator, use the C<CORE::> prefix
-on the operator (e.g. C<CORE::log($x)>) or by declaring the subroutine
-to be an object method (see L<attrs>).
-
-=item Bad index while coercing array into hash
-
-(F) The index looked up in the hash found as the 0'th element of a
-pseudo-hash is not legal. Index values must be at 1 or greater.
-See L<perlref>.
-
-=item Bareword "%s" refers to nonexistent package
-
-(W) You used a qualified bareword of the form C<Foo::>, but
-the compiler saw no other uses of that namespace before that point.
-Perhaps you need to predeclare a package?
-
-=item Can't call method "%s" on an undefined value
-
-(F) You used the syntax of a method call, but the slot filled by the
-object reference or package name contains an undefined value.
-Something like this will reproduce the error:
-
- $BADREF = 42;
- process $BADREF 1,2,3;
- $BADREF->process(1,2,3);
-
-=item Can't check filesystem of script "%s" for nosuid
-
-(P) For some reason you can't check the filesystem of the script for nosuid.
-
-=item Can't coerce array into hash
-
-(F) You used an array where a hash was expected, but the array has no
-information on how to map from keys to array indices. You can do that
-only with arrays that have a hash reference at index 0.
-
-=item Can't goto subroutine from an eval-string
-
-(F) The "goto subroutine" call can't be used to jump out of an eval "string".
-(You can use it to jump out of an eval {BLOCK}, but you probably don't want to.)
-
-=item Can't localize pseudo-hash element
-
-(F) You said something like C<< local $ar->{'key'} >>, where $ar is
-a reference to a pseudo-hash. That hasn't been implemented yet, but
-you can get a similar effect by localizing the corresponding array
-element directly -- C<< local $ar->[$ar->[0]{'key'}] >>.
-
-=item Can't use %%! because Errno.pm is not available
-
-(F) The first time the %! hash is used, perl automatically loads the
-Errno.pm module. The Errno module is expected to tie the %! hash to
-provide symbolic names for C<$!> errno values.
-
-=item Cannot find an opnumber for "%s"
-
-(F) A string of a form C<CORE::word> was given to prototype(), but
-there is no builtin with the name C<word>.
-
-=item Character class syntax [. .] is reserved for future extensions
-
-(W) Within regular expression character classes ([]) the syntax beginning
-with "[." and ending with ".]" is reserved for future extensions.
-If you need to represent those character sequences inside a regular
-expression character class, just quote the square brackets with the
-backslash: "\[." and ".\]".
-
-=item Character class syntax [: :] is reserved for future extensions
-
-(W) Within regular expression character classes ([]) the syntax beginning
-with "[:" and ending with ":]" is reserved for future extensions.
-If you need to represent those character sequences inside a regular
-expression character class, just quote the square brackets with the
-backslash: "\[:" and ":\]".
-
-=item Character class syntax [= =] is reserved for future extensions
-
-(W) Within regular expression character classes ([]) the syntax
-beginning with "[=" and ending with "=]" is reserved for future extensions.
-If you need to represent those character sequences inside a regular
-expression character class, just quote the square brackets with the
-backslash: "\[=" and "=\]".
-
-=item %s: Eval-group in insecure regular expression
-
-(F) Perl detected tainted data when trying to compile a regular expression
-that contains the C<(?{ ... })> zero-width assertion, which is unsafe.
-See L<perlre/(?{ code })>, and L<perlsec>.
-
-=item %s: Eval-group not allowed, use re 'eval'
-
-(F) A regular expression contained the C<(?{ ... })> zero-width assertion,
-but that construct is only allowed when the C<use re 'eval'> pragma is
-in effect. See L<perlre/(?{ code })>.
-
-=item %s: Eval-group not allowed at run time
-
-(F) Perl tried to compile a regular expression containing the C<(?{ ... })>
-zero-width assertion at run time, as it would when the pattern contains
-interpolated values. Since that is a security risk, it is not allowed.
-If you insist, you may still do this by explicitly building the pattern
-from an interpolated string at run time and using that in an eval().
-See L<perlre/(?{ code })>.
-
-=item Explicit blessing to '' (assuming package main)
-
-(W) You are blessing a reference to a zero length string. This has
-the effect of blessing the reference into the package main. This is
-usually not what you want. Consider providing a default target
-package, e.g. bless($ref, $p || 'MyPackage');
-
-=item Illegal hex digit ignored
-
-(W) You may have tried to use a character other than 0 - 9 or A - F in a
-hexadecimal number. Interpretation of the hexadecimal number stopped
-before the illegal character.
-
-=item No such array field
-
-(F) You tried to access an array as a hash, but the field name used is
-not defined. The hash at index 0 should map all valid field names to
-array indices for that to work.
-
-=item No such field "%s" in variable %s of type %s
-
-(F) You tried to access a field of a typed variable where the type
-does not know about the field name. The field names are looked up in
-the %FIELDS hash in the type package at compile time. The %FIELDS hash
-is usually set up with the 'fields' pragma.
-
-=item Out of memory during ridiculously large request
-
-(F) You can't allocate more than 2^31+"small amount" bytes. This error
-is most likely to be caused by a typo in the Perl program. e.g., C<$arr[time]>
-instead of C<$arr[$time]>.
-
-=item Range iterator outside integer range
-
-(F) One (or both) of the numeric arguments to the range operator ".."
-are outside the range which can be represented by integers internally.
-One possible workaround is to force Perl to use magical string
-increment by prepending "0" to your numbers.
-
-=item Recursive inheritance detected while looking for method '%s' %s
-
-(F) More than 100 levels of inheritance were encountered while invoking a
-method. Probably indicates an unintended loop in your inheritance hierarchy.
-
-=item Reference found where even-sized list expected
-
-(W) You gave a single reference where Perl was expecting a list with
-an even number of elements (for assignment to a hash). This
-usually means that you used the anon hash constructor when you meant
-to use parens. In any case, a hash requires key/value B<pairs>.
-
- %hash = { one => 1, two => 2, }; # WRONG
- %hash = [ qw/ an anon array / ]; # WRONG
- %hash = ( one => 1, two => 2, ); # right
- %hash = qw( one 1 two 2 ); # also fine
-
-=item Undefined value assigned to typeglob
-
-(W) An undefined value was assigned to a typeglob, a la C<*foo = undef>.
-This does nothing. It's possible that you really mean C<undef *foo>.
-
-=item Use of reserved word "%s" is deprecated
-
-(D) The indicated bareword is a reserved word. Future versions of perl
-may use it as a keyword, so you're better off either explicitly quoting
-the word in a manner appropriate for its context of use, or using a
-different name altogether. The warning can be suppressed for subroutine
-names by either adding a C<&> prefix, or using a package qualifier,
-e.g. C<&our()>, or C<Foo::our()>.
-
-=item perl: warning: Setting locale failed.
-
-(S) The whole warning message will look something like:
-
- perl: warning: Setting locale failed.
- perl: warning: Please check that your locale settings:
- LC_ALL = "En_US",
- LANG = (unset)
- are supported and installed on your system.
- perl: warning: Falling back to the standard locale ("C").
-
-Exactly what were the failed locale settings varies. In the above the
-settings were that the LC_ALL was "En_US" and the LANG had no value.
-This error means that Perl detected that you and/or your system
-administrator have set up the so-called variable system but Perl could
-not use those settings. This was not dead serious, fortunately: there
-is a "default locale" called "C" that Perl can and will use, the
-script will be run. Before you really fix the problem, however, you
-will get the same error message each time you run Perl. How to really
-fix the problem can be found in L<perllocale/"LOCALE PROBLEMS">.
-
-=back
-
-
-=head1 Obsolete Diagnostics
-
-=over 4
-
-=item Can't mktemp()
-
-(F) The mktemp() routine failed for some reason while trying to process
-a B<-e> switch. Maybe your /tmp partition is full, or clobbered.
-
-Removed because B<-e> doesn't use temporary files any more.
-
-=item Can't write to temp file for B<-e>: %s
-
-(F) The write routine failed for some reason while trying to process
-a B<-e> switch. Maybe your /tmp partition is full, or clobbered.
-
-Removed because B<-e> doesn't use temporary files any more.
-
-=item Cannot open temporary file
-
-(F) The create routine failed for some reason while trying to process
-a B<-e> switch. Maybe your /tmp partition is full, or clobbered.
-
-Removed because B<-e> doesn't use temporary files any more.
-
-=item regexp too big
-
-(F) The current implementation of regular expressions uses shorts as
-address offsets within a string. Unfortunately this means that if
-the regular expression compiles to longer than 32767, it'll blow up.
-Usually when you want a regular expression this big, there is a better
-way to do it with multiple statements. See L<perlre>.
-
-=back
-
-=head1 Configuration Changes
-
-You can use "Configure -Uinstallusrbinperl" which causes installperl
-to skip installing perl also as /usr/bin/perl. This is useful if you
-prefer not to modify /usr/bin for some reason or another but harmful
-because many scripts assume to find Perl in /usr/bin/perl.
-
-=head1 BUGS
-
-If you find what you think is a bug, you might check the headers of
-recently posted articles in the comp.lang.perl.misc newsgroup.
-There may also be information at http://www.perl.com/perl/, the Perl
-Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Make sure you trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to <F<perlbug@perl.com>> to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=head1 HISTORY
-
-Written by Gurusamy Sarathy <F<gsar@activestate.com>>, with many contributions
-from The Perl Porters.
-
-Send omissions or corrections to <F<perlbug@perl.com>>.
-
-=cut
diff --git a/contrib/perl5/pod/perlapi.pod b/contrib/perl5/pod/perlapi.pod
deleted file mode 100644
index 67009d0..0000000
--- a/contrib/perl5/pod/perlapi.pod
+++ /dev/null
@@ -1,3546 +0,0 @@
-=head1 NAME
-
-perlapi - autogenerated documentation for the perl public API
-
-=head1 DESCRIPTION
-
-This file contains the documentation of the perl public API generated by
-embed.pl, specifically a listing of functions, macros, flags, and variables
-that may be used by extension writers. The interfaces of any functions that
-are not listed here are subject to change without notice. For this reason,
-blindly using functions listed in proto.h is to be avoided when writing
-extensions.
-
-Note that all Perl API global variables must be referenced with the C<PL_>
-prefix. Some macros are provided for compatibility with the older,
-unadorned names, but this support may be disabled in a future release.
-
-The listing is alphabetical, case insensitive.
-
-=over 8
-
-=item AvFILL
-
-Same as C<av_len()>. Deprecated, use C<av_len()> instead.
-
- int AvFILL(AV* av)
-
-=for hackers
-Found in file av.h
-
-=item av_clear
-
-Clears an array, making it empty. Does not free the memory used by the
-array itself.
-
- void av_clear(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_delete
-
-Deletes the element indexed by C<key> from the array. Returns the
-deleted element. C<flags> is currently ignored.
-
- SV* av_delete(AV* ar, I32 key, I32 flags)
-
-=for hackers
-Found in file av.c
-
-=item av_exists
-
-Returns true if the element indexed by C<key> has been initialized.
-
-This relies on the fact that uninitialized array elements are set to
-C<&PL_sv_undef>.
-
- bool av_exists(AV* ar, I32 key)
-
-=for hackers
-Found in file av.c
-
-=item av_extend
-
-Pre-extend an array. The C<key> is the index to which the array should be
-extended.
-
- void av_extend(AV* ar, I32 key)
-
-=for hackers
-Found in file av.c
-
-=item av_fetch
-
-Returns the SV at the specified index in the array. The C<key> is the
-index. If C<lval> is set then the fetch will be part of a store. Check
-that the return value is non-null before dereferencing it to a C<SV*>.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
-more information on how to use this function on tied arrays.
-
- SV** av_fetch(AV* ar, I32 key, I32 lval)
-
-=for hackers
-Found in file av.c
-
-=item av_fill
-
-Ensure than an array has a given number of elements, equivalent to
-Perl's C<$#array = $fill;>.
-
- void av_fill(AV* ar, I32 fill)
-
-=for hackers
-Found in file av.c
-
-=item av_len
-
-Returns the highest index in the array. Returns -1 if the array is
-empty.
-
- I32 av_len(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_make
-
-Creates a new AV and populates it with a list of SVs. The SVs are copied
-into the array, so they may be freed after the call to av_make. The new AV
-will have a reference count of 1.
-
- AV* av_make(I32 size, SV** svp)
-
-=for hackers
-Found in file av.c
-
-=item av_pop
-
-Pops an SV off the end of the array. Returns C<&PL_sv_undef> if the array
-is empty.
-
- SV* av_pop(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_push
-
-Pushes an SV onto the end of the array. The array will grow automatically
-to accommodate the addition.
-
- void av_push(AV* ar, SV* val)
-
-=for hackers
-Found in file av.c
-
-=item av_shift
-
-Shifts an SV off the beginning of the array.
-
- SV* av_shift(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_store
-
-Stores an SV in an array. The array index is specified as C<key>. The
-return value will be NULL if the operation failed or if the value did not
-need to be actually stored within the array (as in the case of tied
-arrays). Otherwise it can be dereferenced to get the original C<SV*>. Note
-that the caller is responsible for suitably incrementing the reference
-count of C<val> before the call, and decrementing it if the function
-returned NULL.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
-more information on how to use this function on tied arrays.
-
- SV** av_store(AV* ar, I32 key, SV* val)
-
-=for hackers
-Found in file av.c
-
-=item av_undef
-
-Undefines the array. Frees the memory used by the array itself.
-
- void av_undef(AV* ar)
-
-=for hackers
-Found in file av.c
-
-=item av_unshift
-
-Unshift the given number of C<undef> values onto the beginning of the
-array. The array will grow automatically to accommodate the addition. You
-must then use C<av_store> to assign values to these new elements.
-
- void av_unshift(AV* ar, I32 num)
-
-=for hackers
-Found in file av.c
-
-=item bytes_from_utf8
-
-Converts a string C<s> of length C<len> from UTF8 into byte encoding.
-Unlike <utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
-the newly-created string, and updates C<len> to contain the new
-length. Returns the original string if no conversion occurs, C<len>
-is unchanged. Do nothing if C<is_utf8> points to 0. Sets C<is_utf8> to
-0 if C<s> is converted or contains all 7bit characters.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- U8* bytes_from_utf8(U8 *s, STRLEN *len, bool *is_utf8)
-
-=for hackers
-Found in file utf8.c
-
-=item bytes_to_utf8
-
-Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
-Returns a pointer to the newly-created string, and sets C<len> to
-reflect the new length.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- U8* bytes_to_utf8(U8 *s, STRLEN *len)
-
-=for hackers
-Found in file utf8.c
-
-=item call_argv
-
-Performs a callback to the specified Perl sub. See L<perlcall>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 call_argv(const char* sub_name, I32 flags, char** argv)
-
-=for hackers
-Found in file perl.c
-
-=item call_method
-
-Performs a callback to the specified Perl method. The blessed object must
-be on the stack. See L<perlcall>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 call_method(const char* methname, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item call_pv
-
-Performs a callback to the specified Perl sub. See L<perlcall>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 call_pv(const char* sub_name, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item call_sv
-
-Performs a callback to the Perl sub whose name is in the SV. See
-L<perlcall>.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 call_sv(SV* sv, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item CLASS
-
-Variable which is setup by C<xsubpp> to indicate the
-class name for a C++ XS constructor. This is always a C<char*>. See C<THIS>.
-
- char* CLASS
-
-=for hackers
-Found in file XSUB.h
-
-=item Copy
-
-The XSUB-writer's interface to the C C<memcpy> function. The C<src> is the
-source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
-the type. May fail on overlapping copies. See also C<Move>.
-
- void Copy(void* src, void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item croak
-
-This is the XSUB-writer's interface to Perl's C<die> function.
-Normally use this function the same way you use the C C<printf>
-function. See C<warn>.
-
-If you want to throw an exception object, assign the object to
-C<$@> and then pass C<Nullch> to croak():
-
- errsv = get_sv("@", TRUE);
- sv_setsv(errsv, exception_object);
- croak(Nullch);
-
- void croak(const char* pat, ...)
-
-=for hackers
-Found in file util.c
-
-=item CvSTASH
-
-Returns the stash of the CV.
-
- HV* CvSTASH(CV* cv)
-
-=for hackers
-Found in file cv.h
-
-=item dMARK
-
-Declare a stack marker variable, C<mark>, for the XSUB. See C<MARK> and
-C<dORIGMARK>.
-
- dMARK;
-
-=for hackers
-Found in file pp.h
-
-=item dORIGMARK
-
-Saves the original stack mark for the XSUB. See C<ORIGMARK>.
-
- dORIGMARK;
-
-=for hackers
-Found in file pp.h
-
-=item dSP
-
-Declares a local copy of perl's stack pointer for the XSUB, available via
-the C<SP> macro. See C<SP>.
-
- dSP;
-
-=for hackers
-Found in file pp.h
-
-=item dXSARGS
-
-Sets up stack and mark pointers for an XSUB, calling dSP and dMARK. This
-is usually handled automatically by C<xsubpp>. Declares the C<items>
-variable to indicate the number of items on the stack.
-
- dXSARGS;
-
-=for hackers
-Found in file XSUB.h
-
-=item dXSI32
-
-Sets up the C<ix> variable for an XSUB which has aliases. This is usually
-handled automatically by C<xsubpp>.
-
- dXSI32;
-
-=for hackers
-Found in file XSUB.h
-
-=item ENTER
-
-Opening bracket on a callback. See C<LEAVE> and L<perlcall>.
-
- ENTER;
-
-=for hackers
-Found in file scope.h
-
-=item eval_pv
-
-Tells Perl to C<eval> the given string and return an SV* result.
-
-NOTE: the perl_ form of this function is deprecated.
-
- SV* eval_pv(const char* p, I32 croak_on_error)
-
-=for hackers
-Found in file perl.c
-
-=item eval_sv
-
-Tells Perl to C<eval> the string in the SV.
-
-NOTE: the perl_ form of this function is deprecated.
-
- I32 eval_sv(SV* sv, I32 flags)
-
-=for hackers
-Found in file perl.c
-
-=item EXTEND
-
-Used to extend the argument stack for an XSUB's return values. Once
-used, guarantees that there is room for at least C<nitems> to be pushed
-onto the stack.
-
- void EXTEND(SP, int nitems)
-
-=for hackers
-Found in file pp.h
-
-=item fbm_compile
-
-Analyses the string in order to make fast searches on it using fbm_instr()
--- the Boyer-Moore algorithm.
-
- void fbm_compile(SV* sv, U32 flags)
-
-=for hackers
-Found in file util.c
-
-=item fbm_instr
-
-Returns the location of the SV in the string delimited by C<str> and
-C<strend>. It returns C<Nullch> if the string can't be found. The C<sv>
-does not have to be fbm_compiled, but the search will not be as fast
-then.
-
- char* fbm_instr(unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
-
-=for hackers
-Found in file util.c
-
-=item FREETMPS
-
-Closing bracket for temporaries on a callback. See C<SAVETMPS> and
-L<perlcall>.
-
- FREETMPS;
-
-=for hackers
-Found in file scope.h
-
-=item get_av
-
-Returns the AV of the specified Perl array. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-NOTE: the perl_ form of this function is deprecated.
-
- AV* get_av(const char* name, I32 create)
-
-=for hackers
-Found in file perl.c
-
-=item get_cv
-
-Returns the CV of the specified Perl subroutine. If C<create> is set and
-the Perl subroutine does not exist then it will be declared (which has the
-same effect as saying C<sub name;>). If C<create> is not set and the
-subroutine does not exist then NULL is returned.
-
-NOTE: the perl_ form of this function is deprecated.
-
- CV* get_cv(const char* name, I32 create)
-
-=for hackers
-Found in file perl.c
-
-=item get_hv
-
-Returns the HV of the specified Perl hash. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-NOTE: the perl_ form of this function is deprecated.
-
- HV* get_hv(const char* name, I32 create)
-
-=for hackers
-Found in file perl.c
-
-=item get_sv
-
-Returns the SV of the specified Perl scalar. If C<create> is set and the
-Perl variable does not exist then it will be created. If C<create> is not
-set and the variable does not exist then NULL is returned.
-
-NOTE: the perl_ form of this function is deprecated.
-
- SV* get_sv(const char* name, I32 create)
-
-=for hackers
-Found in file perl.c
-
-=item GIMME
-
-A backward-compatible version of C<GIMME_V> which can only return
-C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
-Deprecated. Use C<GIMME_V> instead.
-
- U32 GIMME
-
-=for hackers
-Found in file op.h
-
-=item GIMME_V
-
-The XSUB-writer's equivalent to Perl's C<wantarray>. Returns C<G_VOID>,
-C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
-respectively.
-
- U32 GIMME_V
-
-=for hackers
-Found in file op.h
-
-=item GvSV
-
-Return the SV from the GV.
-
- SV* GvSV(GV* gv)
-
-=for hackers
-Found in file gv.h
-
-=item gv_fetchmeth
-
-Returns the glob with the given C<name> and a defined subroutine or
-C<NULL>. The glob lives in the given C<stash>, or in the stashes
-accessible via @ISA and @UNIVERSAL.
-
-The argument C<level> should be either 0 or -1. If C<level==0>, as a
-side-effect creates a glob with the given C<name> in the given C<stash>
-which in the case of success contains an alias for the subroutine, and sets
-up caching info for this glob. Similarly for all the searched stashes.
-
-This function grants C<"SUPER"> token as a postfix of the stash name. The
-GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
-visible to Perl code. So when calling C<call_sv>, you should not use
-the GV directly; instead, you should use the method's CV, which can be
-obtained from the GV with the C<GvCV> macro.
-
- GV* gv_fetchmeth(HV* stash, const char* name, STRLEN len, I32 level)
-
-=for hackers
-Found in file gv.c
-
-=item gv_fetchmethod
-
-See L<gv_fetchmethod_autoload>.
-
- GV* gv_fetchmethod(HV* stash, const char* name)
-
-=for hackers
-Found in file gv.c
-
-=item gv_fetchmethod_autoload
-
-Returns the glob which contains the subroutine to call to invoke the method
-on the C<stash>. In fact in the presence of autoloading this may be the
-glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
-already setup.
-
-The third parameter of C<gv_fetchmethod_autoload> determines whether
-AUTOLOAD lookup is performed if the given method is not present: non-zero
-means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
-Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
-with a non-zero C<autoload> parameter.
-
-These functions grant C<"SUPER"> token as a prefix of the method name. Note
-that if you want to keep the returned glob for a long time, you need to
-check for it being "AUTOLOAD", since at the later time the call may load a
-different subroutine due to $AUTOLOAD changing its value. Use the glob
-created via a side effect to do this.
-
-These functions have the same side-effects and as C<gv_fetchmeth> with
-C<level==0>. C<name> should be writable if contains C<':'> or C<'
-''>. The warning against passing the GV returned by C<gv_fetchmeth> to
-C<call_sv> apply equally to these functions.
-
- GV* gv_fetchmethod_autoload(HV* stash, const char* name, I32 autoload)
-
-=for hackers
-Found in file gv.c
-
-=item gv_stashpv
-
-Returns a pointer to the stash for a specified package. C<name> should
-be a valid UTF-8 string. If C<create> is set then the package will be
-created if it does not already exist. If C<create> is not set and the
-package does not exist then NULL is returned.
-
- HV* gv_stashpv(const char* name, I32 create)
-
-=for hackers
-Found in file gv.c
-
-=item gv_stashsv
-
-Returns a pointer to the stash for a specified package, which must be a
-valid UTF-8 string. See C<gv_stashpv>.
-
- HV* gv_stashsv(SV* sv, I32 create)
-
-=for hackers
-Found in file gv.c
-
-=item G_ARRAY
-
-Used to indicate list context. See C<GIMME_V>, C<GIMME> and
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_DISCARD
-
-Indicates that arguments returned from a callback should be discarded. See
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_EVAL
-
-Used to force a Perl C<eval> wrapper around a callback. See
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_NOARGS
-
-Indicates that no arguments are being sent to a callback. See
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_SCALAR
-
-Used to indicate scalar context. See C<GIMME_V>, C<GIMME>, and
-L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item G_VOID
-
-Used to indicate void context. See C<GIMME_V> and L<perlcall>.
-
-=for hackers
-Found in file cop.h
-
-=item HEf_SVKEY
-
-This flag, used in the length slot of hash entries and magic structures,
-specifies the structure contains a C<SV*> pointer where a C<char*> pointer
-is to be expected. (For information only--not to be used).
-
-=for hackers
-Found in file hv.h
-
-=item HeHASH
-
-Returns the computed hash stored in the hash entry.
-
- U32 HeHASH(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HeKEY
-
-Returns the actual pointer stored in the key slot of the hash entry. The
-pointer may be either C<char*> or C<SV*>, depending on the value of
-C<HeKLEN()>. Can be assigned to. The C<HePV()> or C<HeSVKEY()> macros are
-usually preferable for finding the value of a key.
-
- void* HeKEY(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HeKLEN
-
-If this is negative, and amounts to C<HEf_SVKEY>, it indicates the entry
-holds an C<SV*> key. Otherwise, holds the actual length of the key. Can
-be assigned to. The C<HePV()> macro is usually preferable for finding key
-lengths.
-
- STRLEN HeKLEN(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HePV
-
-Returns the key slot of the hash entry as a C<char*> value, doing any
-necessary dereferencing of possibly C<SV*> keys. The length of the string
-is placed in C<len> (this is a macro, so do I<not> use C<&len>). If you do
-not care about what the length of the key is, you may use the global
-variable C<PL_na>, though this is rather less efficient than using a local
-variable. Remember though, that hash keys in perl are free to contain
-embedded nulls, so using C<strlen()> or similar is not a good way to find
-the length of hash keys. This is very similar to the C<SvPV()> macro
-described elsewhere in this document.
-
- char* HePV(HE* he, STRLEN len)
-
-=for hackers
-Found in file hv.h
-
-=item HeSVKEY
-
-Returns the key as an C<SV*>, or C<Nullsv> if the hash entry does not
-contain an C<SV*> key.
-
- SV* HeSVKEY(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HeSVKEY_force
-
-Returns the key as an C<SV*>. Will create and return a temporary mortal
-C<SV*> if the hash entry contains only a C<char*> key.
-
- SV* HeSVKEY_force(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HeSVKEY_set
-
-Sets the key to a given C<SV*>, taking care to set the appropriate flags to
-indicate the presence of an C<SV*> key, and returns the same
-C<SV*>.
-
- SV* HeSVKEY_set(HE* he, SV* sv)
-
-=for hackers
-Found in file hv.h
-
-=item HeVAL
-
-Returns the value slot (type C<SV*>) stored in the hash entry.
-
- SV* HeVAL(HE* he)
-
-=for hackers
-Found in file hv.h
-
-=item HvNAME
-
-Returns the package name of a stash. See C<SvSTASH>, C<CvSTASH>.
-
- char* HvNAME(HV* stash)
-
-=for hackers
-Found in file hv.h
-
-=item hv_clear
-
-Clears a hash, making it empty.
-
- void hv_clear(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item hv_delete
-
-Deletes a key/value pair in the hash. The value SV is removed from the
-hash and returned to the caller. The C<klen> is the length of the key.
-The C<flags> value will normally be zero; if set to G_DISCARD then NULL
-will be returned.
-
- SV* hv_delete(HV* tb, const char* key, U32 klen, I32 flags)
-
-=for hackers
-Found in file hv.c
-
-=item hv_delete_ent
-
-Deletes a key/value pair in the hash. The value SV is removed from the
-hash and returned to the caller. The C<flags> value will normally be zero;
-if set to G_DISCARD then NULL will be returned. C<hash> can be a valid
-precomputed hash value, or 0 to ask for it to be computed.
-
- SV* hv_delete_ent(HV* tb, SV* key, I32 flags, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_exists
-
-Returns a boolean indicating whether the specified hash key exists. The
-C<klen> is the length of the key.
-
- bool hv_exists(HV* tb, const char* key, U32 klen)
-
-=for hackers
-Found in file hv.c
-
-=item hv_exists_ent
-
-Returns a boolean indicating whether the specified hash key exists. C<hash>
-can be a valid precomputed hash value, or 0 to ask for it to be
-computed.
-
- bool hv_exists_ent(HV* tb, SV* key, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_fetch
-
-Returns the SV which corresponds to the specified key in the hash. The
-C<klen> is the length of the key. If C<lval> is set then the fetch will be
-part of a store. Check that the return value is non-null before
-dereferencing it to a C<SV*>.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
- SV** hv_fetch(HV* tb, const char* key, U32 klen, I32 lval)
-
-=for hackers
-Found in file hv.c
-
-=item hv_fetch_ent
-
-Returns the hash entry which corresponds to the specified key in the hash.
-C<hash> must be a valid precomputed hash number for the given C<key>, or 0
-if you want the function to compute it. IF C<lval> is set then the fetch
-will be part of a store. Make sure the return value is non-null before
-accessing it. The return value when C<tb> is a tied hash is a pointer to a
-static location, so be sure to make a copy of the structure if you need to
-store it somewhere.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
- HE* hv_fetch_ent(HV* tb, SV* key, I32 lval, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iterinit
-
-Prepares a starting point to traverse a hash table. Returns the number of
-keys in the hash (i.e. the same as C<HvKEYS(tb)>). The return value is
-currently only meaningful for hashes without tie magic.
-
-NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
-hash buckets that happen to be in use. If you still need that esoteric
-value, you can get it through the macro C<HvFILL(tb)>.
-
- I32 hv_iterinit(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iterkey
-
-Returns the key from the current position of the hash iterator. See
-C<hv_iterinit>.
-
- char* hv_iterkey(HE* entry, I32* retlen)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iterkeysv
-
-Returns the key as an C<SV*> from the current position of the hash
-iterator. The return value will always be a mortal copy of the key. Also
-see C<hv_iterinit>.
-
- SV* hv_iterkeysv(HE* entry)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iternext
-
-Returns entries from a hash iterator. See C<hv_iterinit>.
-
- HE* hv_iternext(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iternextsv
-
-Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
-operation.
-
- SV* hv_iternextsv(HV* hv, char** key, I32* retlen)
-
-=for hackers
-Found in file hv.c
-
-=item hv_iterval
-
-Returns the value from the current position of the hash iterator. See
-C<hv_iterkey>.
-
- SV* hv_iterval(HV* tb, HE* entry)
-
-=for hackers
-Found in file hv.c
-
-=item hv_magic
-
-Adds magic to a hash. See C<sv_magic>.
-
- void hv_magic(HV* hv, GV* gv, int how)
-
-=for hackers
-Found in file hv.c
-
-=item hv_store
-
-Stores an SV in a hash. The hash key is specified as C<key> and C<klen> is
-the length of the key. The C<hash> parameter is the precomputed hash
-value; if it is zero then Perl will compute it. The return value will be
-NULL if the operation failed or if the value did not need to be actually
-stored within the hash (as in the case of tied hashes). Otherwise it can
-be dereferenced to get the original C<SV*>. Note that the caller is
-responsible for suitably incrementing the reference count of C<val> before
-the call, and decrementing it if the function returned NULL.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
- SV** hv_store(HV* tb, const char* key, U32 klen, SV* val, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_store_ent
-
-Stores C<val> in a hash. The hash key is specified as C<key>. The C<hash>
-parameter is the precomputed hash value; if it is zero then Perl will
-compute it. The return value is the new hash entry so created. It will be
-NULL if the operation failed or if the value did not need to be actually
-stored within the hash (as in the case of tied hashes). Otherwise the
-contents of the return value can be accessed using the C<He???> macros
-described here. Note that the caller is responsible for suitably
-incrementing the reference count of C<val> before the call, and
-decrementing it if the function returned NULL.
-
-See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
-information on how to use this function on tied hashes.
-
- HE* hv_store_ent(HV* tb, SV* key, SV* val, U32 hash)
-
-=for hackers
-Found in file hv.c
-
-=item hv_undef
-
-Undefines the hash.
-
- void hv_undef(HV* tb)
-
-=for hackers
-Found in file hv.c
-
-=item isALNUM
-
-Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
-character (including underscore) or digit.
-
- bool isALNUM(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isALPHA
-
-Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
-character.
-
- bool isALPHA(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isDIGIT
-
-Returns a boolean indicating whether the C C<char> is an ASCII
-digit.
-
- bool isDIGIT(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isLOWER
-
-Returns a boolean indicating whether the C C<char> is a lowercase
-character.
-
- bool isLOWER(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isSPACE
-
-Returns a boolean indicating whether the C C<char> is whitespace.
-
- bool isSPACE(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item isUPPER
-
-Returns a boolean indicating whether the C C<char> is an uppercase
-character.
-
- bool isUPPER(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item is_utf8_char
-
-Tests if some arbitrary number of bytes begins in a valid UTF-8 character.
-The actual number of bytes in the UTF-8 character will be returned if it
-is valid, otherwise 0.
-
- STRLEN is_utf8_char(U8 *p)
-
-=for hackers
-Found in file utf8.c
-
-=item is_utf8_string
-
-Returns true if first C<len> bytes of the given string form valid a UTF8
-string, false otherwise.
-
- bool is_utf8_string(U8 *s, STRLEN len)
-
-=for hackers
-Found in file utf8.c
-
-=item items
-
-Variable which is setup by C<xsubpp> to indicate the number of
-items on the stack. See L<perlxs/"Variable-length Parameter Lists">.
-
- I32 items
-
-=for hackers
-Found in file XSUB.h
-
-=item ix
-
-Variable which is setup by C<xsubpp> to indicate which of an
-XSUB's aliases was used to invoke it. See L<perlxs/"The ALIAS: Keyword">.
-
- I32 ix
-
-=for hackers
-Found in file XSUB.h
-
-=item LEAVE
-
-Closing bracket on a callback. See C<ENTER> and L<perlcall>.
-
- LEAVE;
-
-=for hackers
-Found in file scope.h
-
-=item looks_like_number
-
-Test if an the content of an SV looks like a number (or is a
-number).
-
- I32 looks_like_number(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item MARK
-
-Stack marker variable for the XSUB. See C<dMARK>.
-
-=for hackers
-Found in file pp.h
-
-=item mg_clear
-
-Clear something magical that the SV represents. See C<sv_magic>.
-
- int mg_clear(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_copy
-
-Copies the magic from one SV to another. See C<sv_magic>.
-
- int mg_copy(SV* sv, SV* nsv, const char* key, I32 klen)
-
-=for hackers
-Found in file mg.c
-
-=item mg_find
-
-Finds the magic pointer for type matching the SV. See C<sv_magic>.
-
- MAGIC* mg_find(SV* sv, int type)
-
-=for hackers
-Found in file mg.c
-
-=item mg_free
-
-Free any magic storage used by the SV. See C<sv_magic>.
-
- int mg_free(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_get
-
-Do magic after a value is retrieved from the SV. See C<sv_magic>.
-
- int mg_get(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_length
-
-Report on the SV's length. See C<sv_magic>.
-
- U32 mg_length(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_magical
-
-Turns on the magical status of an SV. See C<sv_magic>.
-
- void mg_magical(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item mg_set
-
-Do magic after a value is assigned to the SV. See C<sv_magic>.
-
- int mg_set(SV* sv)
-
-=for hackers
-Found in file mg.c
-
-=item Move
-
-The XSUB-writer's interface to the C C<memmove> function. The C<src> is the
-source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
-the type. Can do overlapping moves. See also C<Copy>.
-
- void Move(void* src, void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item New
-
-The XSUB-writer's interface to the C C<malloc> function.
-
- void New(int id, void* ptr, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item newAV
-
-Creates a new AV. The reference count is set to 1.
-
- AV* newAV()
-
-=for hackers
-Found in file av.c
-
-=item Newc
-
-The XSUB-writer's interface to the C C<malloc> function, with
-cast.
-
- void Newc(int id, void* ptr, int nitems, type, cast)
-
-=for hackers
-Found in file handy.h
-
-=item newCONSTSUB
-
-Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
-eligible for inlining at compile-time.
-
- void newCONSTSUB(HV* stash, char* name, SV* sv)
-
-=for hackers
-Found in file op.c
-
-=item newHV
-
-Creates a new HV. The reference count is set to 1.
-
- HV* newHV()
-
-=for hackers
-Found in file hv.c
-
-=item newRV_inc
-
-Creates an RV wrapper for an SV. The reference count for the original SV is
-incremented.
-
- SV* newRV_inc(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item newRV_noinc
-
-Creates an RV wrapper for an SV. The reference count for the original
-SV is B<not> incremented.
-
- SV* newRV_noinc(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item NEWSV
-
-Creates a new SV. A non-zero C<len> parameter indicates the number of
-bytes of preallocated string space the SV should have. An extra byte for a
-tailing NUL is also reserved. (SvPOK is not set for the SV even if string
-space is allocated.) The reference count for the new SV is set to 1.
-C<id> is an integer id between 0 and 1299 (used to identify leaks).
-
- SV* NEWSV(int id, STRLEN len)
-
-=for hackers
-Found in file handy.h
-
-=item newSViv
-
-Creates a new SV and copies an integer into it. The reference count for the
-SV is set to 1.
-
- SV* newSViv(IV i)
-
-=for hackers
-Found in file sv.c
-
-=item newSVnv
-
-Creates a new SV and copies a floating point value into it.
-The reference count for the SV is set to 1.
-
- SV* newSVnv(NV n)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpv
-
-Creates a new SV and copies a string into it. The reference count for the
-SV is set to 1. If C<len> is zero, Perl will compute the length using
-strlen(). For efficiency, consider using C<newSVpvn> instead.
-
- SV* newSVpv(const char* s, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvf
-
-Creates a new SV an initialize it with the string formatted like
-C<sprintf>.
-
- SV* newSVpvf(const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvn
-
-Creates a new SV and copies a string into it. The reference count for the
-SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
-string. You are responsible for ensuring that the source string is at least
-C<len> bytes long.
-
- SV* newSVpvn(const char* s, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item newSVrv
-
-Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
-it will be upgraded to one. If C<classname> is non-null then the new SV will
-be blessed in the specified package. The new SV is returned and its
-reference count is 1.
-
- SV* newSVrv(SV* rv, const char* classname)
-
-=for hackers
-Found in file sv.c
-
-=item newSVsv
-
-Creates a new SV which is an exact duplicate of the original SV.
-
- SV* newSVsv(SV* old)
-
-=for hackers
-Found in file sv.c
-
-=item newSVuv
-
-Creates a new SV and copies an unsigned integer into it.
-The reference count for the SV is set to 1.
-
- SV* newSVuv(UV u)
-
-=for hackers
-Found in file sv.c
-
-=item newXS
-
-Used by C<xsubpp> to hook up XSUBs as Perl subs.
-
-=for hackers
-Found in file op.c
-
-=item newXSproto
-
-Used by C<xsubpp> to hook up XSUBs as Perl subs. Adds Perl prototypes to
-the subs.
-
-=for hackers
-Found in file XSUB.h
-
-=item Newz
-
-The XSUB-writer's interface to the C C<malloc> function. The allocated
-memory is zeroed with C<memzero>.
-
- void Newz(int id, void* ptr, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item Nullav
-
-Null AV pointer.
-
-=for hackers
-Found in file av.h
-
-=item Nullch
-
-Null character pointer.
-
-=for hackers
-Found in file handy.h
-
-=item Nullcv
-
-Null CV pointer.
-
-=for hackers
-Found in file cv.h
-
-=item Nullhv
-
-Null HV pointer.
-
-=for hackers
-Found in file hv.h
-
-=item Nullsv
-
-Null SV pointer.
-
-=for hackers
-Found in file handy.h
-
-=item ORIGMARK
-
-The original stack mark for the XSUB. See C<dORIGMARK>.
-
-=for hackers
-Found in file pp.h
-
-=item perl_alloc
-
-Allocates a new Perl interpreter. See L<perlembed>.
-
- PerlInterpreter* perl_alloc()
-
-=for hackers
-Found in file perl.c
-
-=item perl_construct
-
-Initializes a new Perl interpreter. See L<perlembed>.
-
- void perl_construct(PerlInterpreter* interp)
-
-=for hackers
-Found in file perl.c
-
-=item perl_destruct
-
-Shuts down a Perl interpreter. See L<perlembed>.
-
- void perl_destruct(PerlInterpreter* interp)
-
-=for hackers
-Found in file perl.c
-
-=item perl_free
-
-Releases a Perl interpreter. See L<perlembed>.
-
- void perl_free(PerlInterpreter* interp)
-
-=for hackers
-Found in file perl.c
-
-=item perl_parse
-
-Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
-
- int perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)
-
-=for hackers
-Found in file perl.c
-
-=item perl_run
-
-Tells a Perl interpreter to run. See L<perlembed>.
-
- int perl_run(PerlInterpreter* interp)
-
-=for hackers
-Found in file perl.c
-
-=item PL_modglobal
-
-C<PL_modglobal> is a general purpose, interpreter global HV for use by
-extensions that need to keep information on a per-interpreter basis.
-In a pinch, it can also be used as a symbol table for extensions
-to share data among each other. It is a good idea to use keys
-prefixed by the package name of the extension that owns the data.
-
- HV* PL_modglobal
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_na
-
-A convenience variable which is typically used with C<SvPV> when one
-doesn't care about the length of the string. It is usually more efficient
-to either declare a local variable and use that instead or to use the
-C<SvPV_nolen> macro.
-
- STRLEN PL_na
-
-=for hackers
-Found in file thrdvar.h
-
-=item PL_sv_no
-
-This is the C<false> SV. See C<PL_sv_yes>. Always refer to this as
-C<&PL_sv_no>.
-
- SV PL_sv_no
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_sv_undef
-
-This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
-
- SV PL_sv_undef
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_sv_yes
-
-This is the C<true> SV. See C<PL_sv_no>. Always refer to this as
-C<&PL_sv_yes>.
-
- SV PL_sv_yes
-
-=for hackers
-Found in file intrpvar.h
-
-=item POPi
-
-Pops an integer off the stack.
-
- IV POPi
-
-=for hackers
-Found in file pp.h
-
-=item POPl
-
-Pops a long off the stack.
-
- long POPl
-
-=for hackers
-Found in file pp.h
-
-=item POPn
-
-Pops a double off the stack.
-
- NV POPn
-
-=for hackers
-Found in file pp.h
-
-=item POPp
-
-Pops a string off the stack.
-
- char* POPp
-
-=for hackers
-Found in file pp.h
-
-=item POPs
-
-Pops an SV off the stack.
-
- SV* POPs
-
-=for hackers
-Found in file pp.h
-
-=item PUSHi
-
-Push an integer onto the stack. The stack must have room for this element.
-Handles 'set' magic. See C<XPUSHi>.
-
- void PUSHi(IV iv)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHMARK
-
-Opening bracket for arguments on a callback. See C<PUTBACK> and
-L<perlcall>.
-
- PUSHMARK;
-
-=for hackers
-Found in file pp.h
-
-=item PUSHn
-
-Push a double onto the stack. The stack must have room for this element.
-Handles 'set' magic. See C<XPUSHn>.
-
- void PUSHn(NV nv)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHp
-
-Push a string onto the stack. The stack must have room for this element.
-The C<len> indicates the length of the string. Handles 'set' magic. See
-C<XPUSHp>.
-
- void PUSHp(char* str, STRLEN len)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHs
-
-Push an SV onto the stack. The stack must have room for this element.
-Does not handle 'set' magic. See C<XPUSHs>.
-
- void PUSHs(SV* sv)
-
-=for hackers
-Found in file pp.h
-
-=item PUSHu
-
-Push an unsigned integer onto the stack. The stack must have room for this
-element. See C<XPUSHu>.
-
- void PUSHu(UV uv)
-
-=for hackers
-Found in file pp.h
-
-=item PUTBACK
-
-Closing bracket for XSUB arguments. This is usually handled by C<xsubpp>.
-See C<PUSHMARK> and L<perlcall> for other uses.
-
- PUTBACK;
-
-=for hackers
-Found in file pp.h
-
-=item Renew
-
-The XSUB-writer's interface to the C C<realloc> function.
-
- void Renew(void* ptr, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=item Renewc
-
-The XSUB-writer's interface to the C C<realloc> function, with
-cast.
-
- void Renewc(void* ptr, int nitems, type, cast)
-
-=for hackers
-Found in file handy.h
-
-=item require_pv
-
-Tells Perl to C<require> a module.
-
-NOTE: the perl_ form of this function is deprecated.
-
- void require_pv(const char* pv)
-
-=for hackers
-Found in file perl.c
-
-=item RETVAL
-
-Variable which is setup by C<xsubpp> to hold the return value for an
-XSUB. This is always the proper type for the XSUB. See
-L<perlxs/"The RETVAL Variable">.
-
- (whatever) RETVAL
-
-=for hackers
-Found in file XSUB.h
-
-=item Safefree
-
-The XSUB-writer's interface to the C C<free> function.
-
- void Safefree(void* ptr)
-
-=for hackers
-Found in file handy.h
-
-=item savepv
-
-Copy a string to a safe spot. This does not use an SV.
-
- char* savepv(const char* sv)
-
-=for hackers
-Found in file util.c
-
-=item savepvn
-
-Copy a string to a safe spot. The C<len> indicates number of bytes to
-copy. This does not use an SV.
-
- char* savepvn(const char* sv, I32 len)
-
-=for hackers
-Found in file util.c
-
-=item SAVETMPS
-
-Opening bracket for temporaries on a callback. See C<FREETMPS> and
-L<perlcall>.
-
- SAVETMPS;
-
-=for hackers
-Found in file scope.h
-
-=item SP
-
-Stack pointer. This is usually handled by C<xsubpp>. See C<dSP> and
-C<SPAGAIN>.
-
-=for hackers
-Found in file pp.h
-
-=item SPAGAIN
-
-Refetch the stack pointer. Used after a callback. See L<perlcall>.
-
- SPAGAIN;
-
-=for hackers
-Found in file pp.h
-
-=item ST
-
-Used to access elements on the XSUB's stack.
-
- SV* ST(int ix)
-
-=for hackers
-Found in file XSUB.h
-
-=item strEQ
-
-Test two strings to see if they are equal. Returns true or false.
-
- bool strEQ(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strGE
-
-Test two strings to see if the first, C<s1>, is greater than or equal to
-the second, C<s2>. Returns true or false.
-
- bool strGE(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strGT
-
-Test two strings to see if the first, C<s1>, is greater than the second,
-C<s2>. Returns true or false.
-
- bool strGT(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strLE
-
-Test two strings to see if the first, C<s1>, is less than or equal to the
-second, C<s2>. Returns true or false.
-
- bool strLE(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strLT
-
-Test two strings to see if the first, C<s1>, is less than the second,
-C<s2>. Returns true or false.
-
- bool strLT(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strNE
-
-Test two strings to see if they are different. Returns true or
-false.
-
- bool strNE(char* s1, char* s2)
-
-=for hackers
-Found in file handy.h
-
-=item strnEQ
-
-Test two strings to see if they are equal. The C<len> parameter indicates
-the number of bytes to compare. Returns true or false. (A wrapper for
-C<strncmp>).
-
- bool strnEQ(char* s1, char* s2, STRLEN len)
-
-=for hackers
-Found in file handy.h
-
-=item strnNE
-
-Test two strings to see if they are different. The C<len> parameter
-indicates the number of bytes to compare. Returns true or false. (A
-wrapper for C<strncmp>).
-
- bool strnNE(char* s1, char* s2, STRLEN len)
-
-=for hackers
-Found in file handy.h
-
-=item StructCopy
-
-This is an architecture-independent macro to copy one structure to another.
-
- void StructCopy(type src, type dest, type)
-
-=for hackers
-Found in file handy.h
-
-=item SvCUR
-
-Returns the length of the string which is in the SV. See C<SvLEN>.
-
- STRLEN SvCUR(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvCUR_set
-
-Set the length of the string which is in the SV. See C<SvCUR>.
-
- void SvCUR_set(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvEND
-
-Returns a pointer to the last character in the string which is in the SV.
-See C<SvCUR>. Access the character as *(SvEND(sv)).
-
- char* SvEND(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvGETMAGIC
-
-Invokes C<mg_get> on an SV if it has 'get' magic. This macro evaluates its
-argument more than once.
-
- void SvGETMAGIC(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvGROW
-
-Expands the character buffer in the SV so that it has room for the
-indicated number of bytes (remember to reserve space for an extra trailing
-NUL character). Calls C<sv_grow> to perform the expansion if necessary.
-Returns a pointer to the character buffer.
-
- void SvGROW(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK
-
-Returns a boolean indicating whether the SV contains an integer.
-
- bool SvIOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOKp
-
-Returns a boolean indicating whether the SV contains an integer. Checks
-the B<private> setting. Use C<SvIOK>.
-
- bool SvIOKp(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_notUV
-
-Returns a boolean indicating whether the SV contains an signed integer.
-
- void SvIOK_notUV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_off
-
-Unsets the IV status of an SV.
-
- void SvIOK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_on
-
-Tells an SV that it is an integer.
-
- void SvIOK_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_only
-
-Tells an SV that it is an integer and disables all other OK bits.
-
- void SvIOK_only(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_only_UV
-
-Tells and SV that it is an unsigned integer and disables all other OK bits.
-
- void SvIOK_only_UV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIOK_UV
-
-Returns a boolean indicating whether the SV contains an unsigned integer.
-
- void SvIOK_UV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIV
-
-Coerces the given SV to an integer and returns it.
-
- IV SvIV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvIVX
-
-Returns the integer which is stored in the SV, assuming SvIOK is
-true.
-
- IV SvIVX(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvLEN
-
-Returns the size of the string buffer in the SV, not including any part
-attributable to C<SvOOK>. See C<SvCUR>.
-
- STRLEN SvLEN(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNIOK
-
-Returns a boolean indicating whether the SV contains a number, integer or
-double.
-
- bool SvNIOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNIOKp
-
-Returns a boolean indicating whether the SV contains a number, integer or
-double. Checks the B<private> setting. Use C<SvNIOK>.
-
- bool SvNIOKp(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNIOK_off
-
-Unsets the NV/IV status of an SV.
-
- void SvNIOK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOK
-
-Returns a boolean indicating whether the SV contains a double.
-
- bool SvNOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOKp
-
-Returns a boolean indicating whether the SV contains a double. Checks the
-B<private> setting. Use C<SvNOK>.
-
- bool SvNOKp(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOK_off
-
-Unsets the NV status of an SV.
-
- void SvNOK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOK_on
-
-Tells an SV that it is a double.
-
- void SvNOK_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNOK_only
-
-Tells an SV that it is a double and disables all other OK bits.
-
- void SvNOK_only(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNV
-
-Coerce the given SV to a double and return it.
-
- NV SvNV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvNVX
-
-Returns the double which is stored in the SV, assuming SvNOK is
-true.
-
- NV SvNVX(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvOK
-
-Returns a boolean indicating whether the value is an SV.
-
- bool SvOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvOOK
-
-Returns a boolean indicating whether the SvIVX is a valid offset value for
-the SvPVX. This hack is used internally to speed up removal of characters
-from the beginning of a SvPV. When SvOOK is true, then the start of the
-allocated string buffer is really (SvPVX - SvIVX).
-
- bool SvOOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK
-
-Returns a boolean indicating whether the SV contains a character
-string.
-
- bool SvPOK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOKp
-
-Returns a boolean indicating whether the SV contains a character string.
-Checks the B<private> setting. Use C<SvPOK>.
-
- bool SvPOKp(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK_off
-
-Unsets the PV status of an SV.
-
- void SvPOK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK_on
-
-Tells an SV that it is a string.
-
- void SvPOK_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK_only
-
-Tells an SV that it is a string and disables all other OK bits.
-
- void SvPOK_only(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPOK_only_UTF8
-
-Tells an SV that it is a UTF8 string (do not use frivolously)
-and disables all other OK bits.
-
- void SvPOK_only_UTF8(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV
-
-Returns a pointer to the string in the SV, or a stringified form of the SV
-if the SV does not contain a string. Handles 'get' magic.
-
- char* SvPV(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPVX
-
-Returns a pointer to the string in the SV. The SV must contain a
-string.
-
- char* SvPVX(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV_force
-
-Like <SvPV> but will force the SV into becoming a string (SvPOK). You want
-force if you are going to update the SvPVX directly.
-
- char* SvPV_force(SV* sv, STRLEN len)
-
-=for hackers
-Found in file sv.h
-
-=item SvPV_nolen
-
-Returns a pointer to the string in the SV, or a stringified form of the SV
-if the SV does not contain a string. Handles 'get' magic.
-
- char* SvPV_nolen(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT
-
-Returns the value of the object's reference count.
-
- U32 SvREFCNT(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_dec
-
-Decrements the reference count of the given SV.
-
- void SvREFCNT_dec(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvREFCNT_inc
-
-Increments the reference count of the given SV.
-
- SV* SvREFCNT_inc(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvROK
-
-Tests if the SV is an RV.
-
- bool SvROK(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvROK_off
-
-Unsets the RV status of an SV.
-
- void SvROK_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvROK_on
-
-Tells an SV that it is an RV.
-
- void SvROK_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvRV
-
-Dereferences an RV to return the SV.
-
- SV* SvRV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSETMAGIC
-
-Invokes C<mg_set> on an SV if it has 'set' magic. This macro evaluates its
-argument more than once.
-
- void SvSETMAGIC(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetSV
-
-Calls C<sv_setsv> if dsv is not the same as ssv. May evaluate arguments
-more than once.
-
- void SvSetSV(SV* dsb, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetSV_nosteal
-
-Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
-ssv. May evaluate arguments more than once.
-
- void SvSetSV_nosteal(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSTASH
-
-Returns the stash of the SV.
-
- HV* SvSTASH(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTAINT
-
-Taints an SV if tainting is enabled
-
- void SvTAINT(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTAINTED
-
-Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
-not.
-
- bool SvTAINTED(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTAINTED_off
-
-Untaints an SV. Be I<very> careful with this routine, as it short-circuits
-some of Perl's fundamental security features. XS module authors should not
-use this function unless they fully understand all the implications of
-unconditionally untainting the value. Untainting should be done in the
-standard perl fashion, via a carefully crafted regexp, rather than directly
-untainting variables.
-
- void SvTAINTED_off(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTAINTED_on
-
-Marks an SV as tainted.
-
- void SvTAINTED_on(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvTRUE
-
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false, defined or undefined. Does not handle 'get' magic.
-
- bool SvTRUE(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item svtype
-
-An enum of flags for Perl types. These are found in the file B<sv.h>
-in the C<svtype> enum. Test these flags with the C<SvTYPE> macro.
-
-=for hackers
-Found in file sv.h
-
-=item SvTYPE
-
-Returns the type of the SV. See C<svtype>.
-
- svtype SvTYPE(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SVt_IV
-
-Integer type flag for scalars. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_NV
-
-Double type flag for scalars. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PV
-
-Pointer type flag for scalars. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVAV
-
-Type flag for arrays. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVCV
-
-Type flag for code refs. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVHV
-
-Type flag for hashes. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVMG
-
-Type flag for blessed scalars. See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SvUPGRADE
-
-Used to upgrade an SV to a more complex form. Uses C<sv_upgrade> to
-perform the upgrade if necessary. See C<svtype>.
-
- void SvUPGRADE(SV* sv, svtype type)
-
-=for hackers
-Found in file sv.h
-
-=item SvUTF8
-
-Returns a boolean indicating whether the SV contains UTF-8 encoded data.
-
- void SvUTF8(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUTF8_off
-
-Unsets the UTF8 status of an SV.
-
- void SvUTF8_off(SV *sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUTF8_on
-
-Tells an SV that it is a string and encoded in UTF8. Do not use frivolously.
-
- void SvUTF8_on(SV *sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUV
-
-Coerces the given SV to an unsigned integer and returns it.
-
- UV SvUV(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvUVX
-
-Returns the unsigned integer which is stored in the SV, assuming SvIOK is
-true.
-
- UV SvUVX(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item sv_2mortal
-
-Marks an SV as mortal. The SV will be destroyed when the current context
-ends.
-
- SV* sv_2mortal(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_bless
-
-Blesses an SV into a specified package. The SV must be an RV. The package
-must be designated by its stash (see C<gv_stashpv()>). The reference count
-of the SV is unaffected.
-
- SV* sv_bless(SV* sv, HV* stash)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpv
-
-Concatenates the string onto the end of the string which is in the SV.
-Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
-
- void sv_catpv(SV* sv, const char* ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvf
-
-Processes its arguments like C<sprintf> and appends the formatted output
-to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
-typically be called after calling this function to handle 'set' magic.
-
- void sv_catpvf(SV* sv, const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvf_mg
-
-Like C<sv_catpvf>, but also handles 'set' magic.
-
- void sv_catpvf_mg(SV *sv, const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvn
-
-Concatenates the string onto the end of the string which is in the SV. The
-C<len> indicates number of bytes to copy. Handles 'get' magic, but not
-'set' magic. See C<sv_catpvn_mg>.
-
- void sv_catpvn(SV* sv, const char* ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvn_mg
-
-Like C<sv_catpvn>, but also handles 'set' magic.
-
- void sv_catpvn_mg(SV *sv, const char *ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpv_mg
-
-Like C<sv_catpv>, but also handles 'set' magic.
-
- void sv_catpv_mg(SV *sv, const char *ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catsv
-
-Concatenates the string from SV C<ssv> onto the end of the string in
-SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
-not 'set' magic. See C<sv_catsv_mg>.
-
- void sv_catsv(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catsv_mg
-
-Like C<sv_catsv>, but also handles 'set' magic.
-
- void sv_catsv_mg(SV *dstr, SV *sstr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_chop
-
-Efficient removal of characters from the beginning of the string buffer.
-SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
-the string buffer. The C<ptr> becomes the first character of the adjusted
-string.
-
- void sv_chop(SV* sv, char* ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_clear
-
-Clear an SV, making it empty. Does not free the memory used by the SV
-itself.
-
- void sv_clear(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_cmp
-
-Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
-string in C<sv1> is less than, equal to, or greater than the string in
-C<sv2>.
-
- I32 sv_cmp(SV* sv1, SV* sv2)
-
-=for hackers
-Found in file sv.c
-
-=item sv_cmp_locale
-
-Compares the strings in two SVs in a locale-aware manner. See
-L</sv_cmp_locale>
-
- I32 sv_cmp_locale(SV* sv1, SV* sv2)
-
-=for hackers
-Found in file sv.c
-
-=item sv_dec
-
-Auto-decrement of the value in the SV.
-
- void sv_dec(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_derived_from
-
-Returns a boolean indicating whether the SV is derived from the specified
-class. This is the function that implements C<UNIVERSAL::isa>. It works
-for class names as well as for objects.
-
- bool sv_derived_from(SV* sv, const char* name)
-
-=for hackers
-Found in file universal.c
-
-=item sv_eq
-
-Returns a boolean indicating whether the strings in the two SVs are
-identical.
-
- I32 sv_eq(SV* sv1, SV* sv2)
-
-=for hackers
-Found in file sv.c
-
-=item sv_free
-
-Free the memory used by an SV.
-
- void sv_free(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_gets
-
-Get a line from the filehandle and store it into the SV, optionally
-appending to the currently-stored string.
-
- char* sv_gets(SV* sv, PerlIO* fp, I32 append)
-
-=for hackers
-Found in file sv.c
-
-=item sv_grow
-
-Expands the character buffer in the SV. This will use C<sv_unref> and will
-upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
-Use C<SvGROW>.
-
- char* sv_grow(SV* sv, STRLEN newlen)
-
-=for hackers
-Found in file sv.c
-
-=item sv_inc
-
-Auto-increment of the value in the SV.
-
- void sv_inc(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_insert
-
-Inserts a string at the specified offset/length within the SV. Similar to
-the Perl substr() function.
-
- void sv_insert(SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen)
-
-=for hackers
-Found in file sv.c
-
-=item sv_isa
-
-Returns a boolean indicating whether the SV is blessed into the specified
-class. This does not check for subtypes; use C<sv_derived_from> to verify
-an inheritance relationship.
-
- int sv_isa(SV* sv, const char* name)
-
-=for hackers
-Found in file sv.c
-
-=item sv_isobject
-
-Returns a boolean indicating whether the SV is an RV pointing to a blessed
-object. If the SV is not an RV, or if the object is not blessed, then this
-will return false.
-
- int sv_isobject(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_len
-
-Returns the length of the string in the SV. See also C<SvCUR>.
-
- STRLEN sv_len(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_len_utf8
-
-Returns the number of characters in the string in an SV, counting wide
-UTF8 bytes as a single character.
-
- STRLEN sv_len_utf8(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_magic
-
-Adds magic to an SV.
-
- void sv_magic(SV* sv, SV* obj, int how, const char* name, I32 namlen)
-
-=for hackers
-Found in file sv.c
-
-=item sv_mortalcopy
-
-Creates a new SV which is a copy of the original SV. The new SV is marked
-as mortal.
-
- SV* sv_mortalcopy(SV* oldsv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_newmortal
-
-Creates a new SV which is mortal. The reference count of the SV is set to 1.
-
- SV* sv_newmortal()
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvn_force
-
-Get a sensible string out of the SV somehow.
-
- char* sv_pvn_force(SV* sv, STRLEN* lp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvutf8n_force
-
-Get a sensible UTF8-encoded string out of the SV somehow. See
-L</sv_pvn_force>.
-
- char* sv_pvutf8n_force(SV* sv, STRLEN* lp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_reftype
-
-Returns a string describing what the SV is a reference to.
-
- char* sv_reftype(SV* sv, int ob)
-
-=for hackers
-Found in file sv.c
-
-=item sv_replace
-
-Make the first argument a copy of the second, then delete the original.
-
- void sv_replace(SV* sv, SV* nsv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_rvweaken
-
-Weaken a reference.
-
- SV* sv_rvweaken(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setiv
-
-Copies an integer into the given SV. Does not handle 'set' magic. See
-C<sv_setiv_mg>.
-
- void sv_setiv(SV* sv, IV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setiv_mg
-
-Like C<sv_setiv>, but also handles 'set' magic.
-
- void sv_setiv_mg(SV *sv, IV i)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setnv
-
-Copies a double into the given SV. Does not handle 'set' magic. See
-C<sv_setnv_mg>.
-
- void sv_setnv(SV* sv, NV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setnv_mg
-
-Like C<sv_setnv>, but also handles 'set' magic.
-
- void sv_setnv_mg(SV *sv, NV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpv
-
-Copies a string into an SV. The string must be null-terminated. Does not
-handle 'set' magic. See C<sv_setpv_mg>.
-
- void sv_setpv(SV* sv, const char* ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvf
-
-Processes its arguments like C<sprintf> and sets an SV to the formatted
-output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
-
- void sv_setpvf(SV* sv, const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvf_mg
-
-Like C<sv_setpvf>, but also handles 'set' magic.
-
- void sv_setpvf_mg(SV *sv, const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpviv
-
-Copies an integer into the given SV, also updating its string value.
-Does not handle 'set' magic. See C<sv_setpviv_mg>.
-
- void sv_setpviv(SV* sv, IV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpviv_mg
-
-Like C<sv_setpviv>, but also handles 'set' magic.
-
- void sv_setpviv_mg(SV *sv, IV iv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvn
-
-Copies a string into an SV. The C<len> parameter indicates the number of
-bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
-
- void sv_setpvn(SV* sv, const char* ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpvn_mg
-
-Like C<sv_setpvn>, but also handles 'set' magic.
-
- void sv_setpvn_mg(SV *sv, const char *ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setpv_mg
-
-Like C<sv_setpv>, but also handles 'set' magic.
-
- void sv_setpv_mg(SV *sv, const char *ptr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_iv
-
-Copies an integer into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
-will be returned and will have a reference count of 1.
-
- SV* sv_setref_iv(SV* rv, const char* classname, IV iv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_nv
-
-Copies a double into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
-will be returned and will have a reference count of 1.
-
- SV* sv_setref_nv(SV* rv, const char* classname, NV nv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_pv
-
-Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
-into the SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
-will be returned and will have a reference count of 1.
-
-Do not use with other Perl types such as HV, AV, SV, CV, because those
-objects will become corrupted by the pointer copy process.
-
-Note that C<sv_setref_pvn> copies the string while this copies the pointer.
-
- SV* sv_setref_pv(SV* rv, const char* classname, void* pv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setref_pvn
-
-Copies a string into a new SV, optionally blessing the SV. The length of the
-string must be specified with C<n>. The C<rv> argument will be upgraded to
-an RV. That RV will be modified to point to the new SV. The C<classname>
-argument indicates the package for the blessing. Set C<classname> to
-C<Nullch> to avoid the blessing. The new SV will be returned and will have
-a reference count of 1.
-
-Note that C<sv_setref_pv> copies the pointer while this copies the string.
-
- SV* sv_setref_pvn(SV* rv, const char* classname, char* pv, STRLEN n)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setsv
-
-Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
-The source SV may be destroyed if it is mortal. Does not handle 'set'
-magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
-C<sv_setsv_mg>.
-
- void sv_setsv(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setsv_mg
-
-Like C<sv_setsv>, but also handles 'set' magic.
-
- void sv_setsv_mg(SV *dstr, SV *sstr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setuv
-
-Copies an unsigned integer into the given SV. Does not handle 'set' magic.
-See C<sv_setuv_mg>.
-
- void sv_setuv(SV* sv, UV num)
-
-=for hackers
-Found in file sv.c
-
-=item sv_setuv_mg
-
-Like C<sv_setuv>, but also handles 'set' magic.
-
- void sv_setuv_mg(SV *sv, UV u)
-
-=for hackers
-Found in file sv.c
-
-=item sv_true
-
-Returns true if the SV has a true value by Perl's rules.
-
- I32 sv_true(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_unmagic
-
-Removes magic from an SV.
-
- int sv_unmagic(SV* sv, int type)
-
-=for hackers
-Found in file sv.c
-
-=item sv_unref
-
-Unsets the RV status of the SV, and decrements the reference count of
-whatever was being referenced by the RV. This can almost be thought of
-as a reversal of C<newSVrv>. See C<SvROK_off>.
-
- void sv_unref(SV* sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_upgrade
-
-Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
-C<svtype>.
-
- bool sv_upgrade(SV* sv, U32 mt)
-
-=for hackers
-Found in file sv.c
-
-=item sv_usepvn
-
-Tells an SV to use C<ptr> to find its string value. Normally the string is
-stored inside the SV but sv_usepvn allows the SV to use an outside string.
-The C<ptr> should point to memory that was allocated by C<malloc>. The
-string length, C<len>, must be supplied. This function will realloc the
-memory pointed to by C<ptr>, so that pointer should not be freed or used by
-the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
-See C<sv_usepvn_mg>.
-
- void sv_usepvn(SV* sv, char* ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_usepvn_mg
-
-Like C<sv_usepvn>, but also handles 'set' magic.
-
- void sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_utf8_downgrade
-
-Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
-This may not be possible if the PV contains non-byte encoding characters;
-if this is the case, either returns false or, if C<fail_ok> is not
-true, croaks.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- bool sv_utf8_downgrade(SV *sv, bool fail_ok)
-
-=for hackers
-Found in file sv.c
-
-=item sv_utf8_encode
-
-Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
-flag so that it looks like bytes again. Nothing calls this.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- void sv_utf8_encode(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_utf8_upgrade
-
-Convert the PV of an SV to its UTF8-encoded form.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- void sv_utf8_upgrade(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_vcatpvfn
-
-Processes its arguments like C<vsprintf> and appends the formatted output
-to an SV. Uses an array of SVs if the C style variable argument list is
-missing (NULL). When running with taint checks enabled, indicates via
-C<maybe_tainted> if results are untrustworthy (often due to the use of
-locales).
-
- void sv_vcatpvfn(SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
-
-=for hackers
-Found in file sv.c
-
-=item sv_vsetpvfn
-
-Works like C<vcatpvfn> but copies the text into the SV instead of
-appending it.
-
- void sv_vsetpvfn(SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
-
-=for hackers
-Found in file sv.c
-
-=item THIS
-
-Variable which is setup by C<xsubpp> to designate the object in a C++
-XSUB. This is always the proper type for the C++ object. See C<CLASS> and
-L<perlxs/"Using XS With C++">.
-
- (whatever) THIS
-
-=for hackers
-Found in file XSUB.h
-
-=item toLOWER
-
-Converts the specified character to lowercase.
-
- char toLOWER(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item toUPPER
-
-Converts the specified character to uppercase.
-
- char toUPPER(char ch)
-
-=for hackers
-Found in file handy.h
-
-=item utf8_distance
-
-Returns the number of UTF8 characters between the UTF-8 pointers C<a>
-and C<b>.
-
-WARNING: use only if you *know* that the pointers point inside the
-same UTF-8 buffer.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- IV utf8_distance(U8 *a, U8 *b)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_hop
-
-Return the UTF-8 pointer C<s> displaced by C<off> characters, either
-forward or backward.
-
-WARNING: do not use the following unless you *know* C<off> is within
-the UTF-8 data pointed to by C<s> *and* that on entry C<s> is aligned
-on the first byte of character or just after the last byte of a character.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- U8* utf8_hop(U8 *s, I32 off)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_length
-
-Return the length of the UTF-8 char encoded string C<s> in characters.
-Stops at C<e> (inclusive). If C<e E<lt> s> or if the scan would end
-up past C<e>, croaks.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- STRLEN utf8_length(U8* s, U8 *e)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_to_bytes
-
-Converts a string C<s> of length C<len> from UTF8 into byte encoding.
-Unlike C<bytes_to_utf8>, this over-writes the original string, and
-updates len to contain the new length.
-Returns zero on failure, setting C<len> to -1.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- U8* utf8_to_bytes(U8 *s, STRLEN *len)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_to_uv
-
-Returns the character value of the first character in the string C<s>
-which is assumed to be in UTF8 encoding and no longer than C<curlen>;
-C<retlen> will be set to the length, in bytes, of that character.
-
-If C<s> does not point to a well-formed UTF8 character, the behaviour
-is dependent on the value of C<flags>: if it contains UTF8_CHECK_ONLY,
-it is assumed that the caller will raise a warning, and this function
-will silently just set C<retlen> to C<-1> and return zero. If the
-C<flags> does not contain UTF8_CHECK_ONLY, warnings about
-malformations will be given, C<retlen> will be set to the expected
-length of the UTF-8 character in bytes, and zero will be returned.
-
-The C<flags> can also contain various flags to allow deviations from
-the strict UTF-8 encoding (see F<utf8.h>).
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- UV utf8_to_uv(U8 *s, STRLEN curlen, STRLEN* retlen, U32 flags)
-
-=for hackers
-Found in file utf8.c
-
-=item utf8_to_uv_simple
-
-Returns the character value of the first character in the string C<s>
-which is assumed to be in UTF8 encoding; C<retlen> will be set to the
-length, in bytes, of that character.
-
-If C<s> does not point to a well-formed UTF8 character, zero is
-returned and retlen is set, if possible, to -1.
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- UV utf8_to_uv_simple(U8 *s, STRLEN* retlen)
-
-=for hackers
-Found in file utf8.c
-
-=item uv_to_utf8
-
-Adds the UTF8 representation of the Unicode codepoint C<uv> to the end
-of the string C<d>; C<d> should be have at least C<UTF8_MAXLEN+1> free
-bytes available. The return value is the pointer to the byte after the
-end of the new character. In other words,
-
- d = uv_to_utf8(d, uv);
-
-is the recommended Unicode-aware way of saying
-
- *(d++) = uv;
-
-NOTE: this function is experimental and may change or be
-removed without notice.
-
- U8* uv_to_utf8(U8 *d, UV uv)
-
-=for hackers
-Found in file utf8.c
-
-=item warn
-
-This is the XSUB-writer's interface to Perl's C<warn> function. Use this
-function the same way you use the C C<printf> function. See
-C<croak>.
-
- void warn(const char* pat, ...)
-
-=for hackers
-Found in file util.c
-
-=item XPUSHi
-
-Push an integer onto the stack, extending the stack if necessary. Handles
-'set' magic. See C<PUSHi>.
-
- void XPUSHi(IV iv)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHn
-
-Push a double onto the stack, extending the stack if necessary. Handles
-'set' magic. See C<PUSHn>.
-
- void XPUSHn(NV nv)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHp
-
-Push a string onto the stack, extending the stack if necessary. The C<len>
-indicates the length of the string. Handles 'set' magic. See
-C<PUSHp>.
-
- void XPUSHp(char* str, STRLEN len)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHs
-
-Push an SV onto the stack, extending the stack if necessary. Does not
-handle 'set' magic. See C<PUSHs>.
-
- void XPUSHs(SV* sv)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHu
-
-Push an unsigned integer onto the stack, extending the stack if necessary.
-See C<PUSHu>.
-
- void XPUSHu(UV uv)
-
-=for hackers
-Found in file pp.h
-
-=item XS
-
-Macro to declare an XSUB and its C parameter list. This is handled by
-C<xsubpp>.
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN
-
-Return from XSUB, indicating number of items on the stack. This is usually
-handled by C<xsubpp>.
-
- void XSRETURN(int nitems)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_EMPTY
-
-Return an empty list from an XSUB immediately.
-
- XSRETURN_EMPTY;
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_IV
-
-Return an integer from an XSUB immediately. Uses C<XST_mIV>.
-
- void XSRETURN_IV(IV iv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_NO
-
-Return C<&PL_sv_no> from an XSUB immediately. Uses C<XST_mNO>.
-
- XSRETURN_NO;
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_NV
-
-Return an double from an XSUB immediately. Uses C<XST_mNV>.
-
- void XSRETURN_NV(NV nv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_PV
-
-Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>.
-
- void XSRETURN_PV(char* str)
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_UNDEF
-
-Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>.
-
- XSRETURN_UNDEF;
-
-=for hackers
-Found in file XSUB.h
-
-=item XSRETURN_YES
-
-Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>.
-
- XSRETURN_YES;
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mIV
-
-Place an integer into the specified position C<pos> on the stack. The
-value is stored in a new mortal SV.
-
- void XST_mIV(int pos, IV iv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mNO
-
-Place C<&PL_sv_no> into the specified position C<pos> on the
-stack.
-
- void XST_mNO(int pos)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mNV
-
-Place a double into the specified position C<pos> on the stack. The value
-is stored in a new mortal SV.
-
- void XST_mNV(int pos, NV nv)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mPV
-
-Place a copy of a string into the specified position C<pos> on the stack.
-The value is stored in a new mortal SV.
-
- void XST_mPV(int pos, char* str)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mUNDEF
-
-Place C<&PL_sv_undef> into the specified position C<pos> on the
-stack.
-
- void XST_mUNDEF(int pos)
-
-=for hackers
-Found in file XSUB.h
-
-=item XST_mYES
-
-Place C<&PL_sv_yes> into the specified position C<pos> on the
-stack.
-
- void XST_mYES(int pos)
-
-=for hackers
-Found in file XSUB.h
-
-=item XS_VERSION
-
-The version identifier for an XS module. This is usually
-handled automatically by C<ExtUtils::MakeMaker>. See C<XS_VERSION_BOOTCHECK>.
-
-=for hackers
-Found in file XSUB.h
-
-=item XS_VERSION_BOOTCHECK
-
-Macro to verify that a PM module's $VERSION variable matches the XS
-module's C<XS_VERSION> variable. This is usually handled automatically by
-C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">.
-
- XS_VERSION_BOOTCHECK;
-
-=for hackers
-Found in file XSUB.h
-
-=item Zero
-
-The XSUB-writer's interface to the C C<memzero> function. The C<dest> is the
-destination, C<nitems> is the number of items, and C<type> is the type.
-
- void Zero(void* dest, int nitems, type)
-
-=for hackers
-Found in file handy.h
-
-=back
-
-=head1 AUTHORS
-
-Until May 1997, this document was maintained by Jeff Okamoto
-<okamoto@corp.hp.com>. It is now maintained as part of Perl itself.
-
-With lots of help and suggestions from Dean Roehrich, Malcolm Beattie,
-Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil
-Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer,
-Stephen McCamant, and Gurusamy Sarathy.
-
-API Listing originally by Dean Roehrich <roehrich@cray.com>.
-
-Updated to be autogenerated from comments in the source by Benjamin Stuhl.
-
-=head1 SEE ALSO
-
-perlguts(1), perlxs(1), perlxstut(1), perlintern(1)
-
diff --git a/contrib/perl5/pod/perlapio.pod b/contrib/perl5/pod/perlapio.pod
deleted file mode 100644
index 90475a9..0000000
--- a/contrib/perl5/pod/perlapio.pod
+++ /dev/null
@@ -1,274 +0,0 @@
-=head1 NAME
-
-perlapio - perl's IO abstraction interface.
-
-=head1 SYNOPSIS
-
- PerlIO *PerlIO_stdin(void);
- PerlIO *PerlIO_stdout(void);
- PerlIO *PerlIO_stderr(void);
-
- PerlIO *PerlIO_open(const char *,const char *);
- int PerlIO_close(PerlIO *);
-
- int PerlIO_stdoutf(const char *,...)
- int PerlIO_puts(PerlIO *,const char *);
- int PerlIO_putc(PerlIO *,int);
- int PerlIO_write(PerlIO *,const void *,size_t);
- int PerlIO_printf(PerlIO *, const char *,...);
- int PerlIO_vprintf(PerlIO *, const char *, va_list);
- int PerlIO_flush(PerlIO *);
-
- int PerlIO_eof(PerlIO *);
- int PerlIO_error(PerlIO *);
- void PerlIO_clearerr(PerlIO *);
-
- int PerlIO_getc(PerlIO *);
- int PerlIO_ungetc(PerlIO *,int);
- int PerlIO_read(PerlIO *,void *,size_t);
-
- int PerlIO_fileno(PerlIO *);
- PerlIO *PerlIO_fdopen(int, const char *);
- PerlIO *PerlIO_importFILE(FILE *, int flags);
- FILE *PerlIO_exportFILE(PerlIO *, int flags);
- FILE *PerlIO_findFILE(PerlIO *);
- void PerlIO_releaseFILE(PerlIO *,FILE *);
-
- void PerlIO_setlinebuf(PerlIO *);
-
- long PerlIO_tell(PerlIO *);
- int PerlIO_seek(PerlIO *,off_t,int);
- int PerlIO_getpos(PerlIO *,Fpos_t *)
- int PerlIO_setpos(PerlIO *,Fpos_t *)
- void PerlIO_rewind(PerlIO *);
-
- int PerlIO_has_base(PerlIO *);
- int PerlIO_has_cntptr(PerlIO *);
- int PerlIO_fast_gets(PerlIO *);
- int PerlIO_canset_cnt(PerlIO *);
-
- char *PerlIO_get_ptr(PerlIO *);
- int PerlIO_get_cnt(PerlIO *);
- void PerlIO_set_cnt(PerlIO *,int);
- void PerlIO_set_ptrcnt(PerlIO *,char *,int);
- char *PerlIO_get_base(PerlIO *);
- int PerlIO_get_bufsiz(PerlIO *);
-
-=head1 DESCRIPTION
-
-Perl's source code should use the above functions instead of those
-defined in ANSI C's I<stdio.h>. The perl headers will C<#define> them to
-the I/O mechanism selected at Configure time.
-
-The functions are modeled on those in I<stdio.h>, but parameter order
-has been "tidied up a little".
-
-=over 4
-
-=item B<PerlIO *>
-
-This takes the place of FILE *. Like FILE * it should be treated as
-opaque (it is probably safe to assume it is a pointer to something).
-
-=item B<PerlIO_stdin()>, B<PerlIO_stdout()>, B<PerlIO_stderr()>
-
-Use these rather than C<stdin>, C<stdout>, C<stderr>. They are written
-to look like "function calls" rather than variables because this makes
-it easier to I<make them> function calls if platform cannot export data
-to loaded modules, or if (say) different "threads" might have different
-values.
-
-=item B<PerlIO_open(path, mode)>, B<PerlIO_fdopen(fd,mode)>
-
-These correspond to fopen()/fdopen() arguments are the same.
-
-=item B<PerlIO_printf(f,fmt,...)>, B<PerlIO_vprintf(f,fmt,a)>
-
-These are fprintf()/vfprintf() equivalents.
-
-=item B<PerlIO_stdoutf(fmt,...)>
-
-This is printf() equivalent. printf is #defined to this function,
-so it is (currently) legal to use C<printf(fmt,...)> in perl sources.
-
-=item B<PerlIO_read(f,buf,count)>, B<PerlIO_write(f,buf,count)>
-
-These correspond to fread() and fwrite(). Note that arguments
-are different, there is only one "count" and order has
-"file" first.
-
-=item B<PerlIO_close(f)>
-
-=item B<PerlIO_puts(f,s)>, B<PerlIO_putc(f,c)>
-
-These correspond to fputs() and fputc().
-Note that arguments have been revised to have "file" first.
-
-=item B<PerlIO_ungetc(f,c)>
-
-This corresponds to ungetc().
-Note that arguments have been revised to have "file" first.
-
-=item B<PerlIO_getc(f)>
-
-This corresponds to getc().
-
-=item B<PerlIO_eof(f)>
-
-This corresponds to feof().
-
-=item B<PerlIO_error(f)>
-
-This corresponds to ferror().
-
-=item B<PerlIO_fileno(f)>
-
-This corresponds to fileno(), note that on some platforms,
-the meaning of "fileno" may not match Unix.
-
-=item B<PerlIO_clearerr(f)>
-
-This corresponds to clearerr(), i.e., clears 'eof' and 'error'
-flags for the "stream".
-
-=item B<PerlIO_flush(f)>
-
-This corresponds to fflush().
-
-=item B<PerlIO_tell(f)>
-
-This corresponds to ftell().
-
-=item B<PerlIO_seek(f,o,w)>
-
-This corresponds to fseek().
-
-=item B<PerlIO_getpos(f,p)>, B<PerlIO_setpos(f,p)>
-
-These correspond to fgetpos() and fsetpos(). If platform does not
-have the stdio calls then they are implemented in terms of PerlIO_tell()
-and PerlIO_seek().
-
-=item B<PerlIO_rewind(f)>
-
-This corresponds to rewind(). Note may be redefined
-in terms of PerlIO_seek() at some point.
-
-=item B<PerlIO_tmpfile()>
-
-This corresponds to tmpfile(), i.e., returns an anonymous
-PerlIO which will automatically be deleted when closed.
-
-=back
-
-=head2 Co-existence with stdio
-
-There is outline support for co-existence of PerlIO with stdio.
-Obviously if PerlIO is implemented in terms of stdio there is
-no problem. However if perlio is implemented on top of (say) sfio
-then mechanisms must exist to create a FILE * which can be passed
-to library code which is going to use stdio calls.
-
-=over 4
-
-=item B<PerlIO_importFILE(f,flags)>
-
-Used to get a PerlIO * from a FILE *.
-May need additional arguments, interface under review.
-
-=item B<PerlIO_exportFILE(f,flags)>
-
-Given an PerlIO * return a 'native' FILE * suitable for
-passing to code expecting to be compiled and linked with
-ANSI C I<stdio.h>.
-
-The fact that such a FILE * has been 'exported' is recorded,
-and may affect future PerlIO operations on the original
-PerlIO *.
-
-=item B<PerlIO_findFILE(f)>
-
-Returns previously 'exported' FILE * (if any).
-Place holder until interface is fully defined.
-
-=item B<PerlIO_releaseFILE(p,f)>
-
-Calling PerlIO_releaseFILE informs PerlIO that all use
-of FILE * is complete. It is removed from list of 'exported'
-FILE *s, and associated PerlIO * should revert to original
-behaviour.
-
-=item B<PerlIO_setlinebuf(f)>
-
-This corresponds to setlinebuf(). Use is deprecated pending
-further discussion. (Perl core uses it I<only> when "dumping";
-it has nothing to do with $| auto-flush.)
-
-=back
-
-In addition to user API above there is an "implementation" interface
-which allows perl to get at internals of PerlIO.
-The following calls correspond to the various FILE_xxx macros determined
-by Configure. This section is really of interest to only those
-concerned with detailed perl-core behaviour or implementing a
-PerlIO mapping.
-
-=over 4
-
-=item B<PerlIO_has_cntptr(f)>
-
-Implementation can return pointer to current position in the "buffer" and
-a count of bytes available in the buffer.
-
-=item B<PerlIO_get_ptr(f)>
-
-Return pointer to next readable byte in buffer.
-
-=item B<PerlIO_get_cnt(f)>
-
-Return count of readable bytes in the buffer.
-
-=item B<PerlIO_canset_cnt(f)>
-
-Implementation can adjust its idea of number of
-bytes in the buffer.
-
-=item B<PerlIO_fast_gets(f)>
-
-Implementation has all the interfaces required to
-allow perl's fast code to handle <FILE> mechanism.
-
- PerlIO_fast_gets(f) = PerlIO_has_cntptr(f) && \
- PerlIO_canset_cnt(f) && \
- `Can set pointer into buffer'
-
-=item B<PerlIO_set_ptrcnt(f,p,c)>
-
-Set pointer into buffer, and a count of bytes still in the
-buffer. Should be used only to set
-pointer to within range implied by previous calls
-to C<PerlIO_get_ptr> and C<PerlIO_get_cnt>.
-
-=item B<PerlIO_set_cnt(f,c)>
-
-Obscure - set count of bytes in the buffer. Deprecated.
-Currently used in only doio.c to force count < -1 to -1.
-Perhaps should be PerlIO_set_empty or similar.
-This call may actually do nothing if "count" is deduced from pointer
-and a "limit".
-
-=item B<PerlIO_has_base(f)>
-
-Implementation has a buffer, and can return pointer
-to whole buffer and its size. Used by perl for B<-T> / B<-B> tests.
-Other uses would be very obscure...
-
-=item B<PerlIO_get_base(f)>
-
-Return I<start> of buffer.
-
-=item B<PerlIO_get_bufsiz(f)>
-
-Return I<total size> of buffer.
-
-=back
diff --git a/contrib/perl5/pod/perlbook.pod b/contrib/perl5/pod/perlbook.pod
deleted file mode 100644
index 44f0233..0000000
--- a/contrib/perl5/pod/perlbook.pod
+++ /dev/null
@@ -1,17 +0,0 @@
-=head1 NAME
-
-perlbook - Perl book information
-
-=head1 DESCRIPTION
-
-The Camel Book, officially known as I<Programming Perl, Third Edition,
-July 2000>, by Larry Wall et al, ISBN 0-596-00027-8, is the definitive
-reference work covering nearly all of Perl. You can order it and
-other Perl books from O'Reilly & Associates, 1-800-998-9938.
-Local/overseas is +1 707 829 0515. If you can locate an O'Reilly
-order form, you can also fax to +1 707 829 0104. If you're
-web-connected, you can even mosey on over to http://www.oreilly.com/
-for an online order form.
-
-Other Perl books from various publishers and authors
-can be found listed in L<perlfaq2>.
diff --git a/contrib/perl5/pod/perlboot.pod b/contrib/perl5/pod/perlboot.pod
deleted file mode 100644
index 3c18246..0000000
--- a/contrib/perl5/pod/perlboot.pod
+++ /dev/null
@@ -1,815 +0,0 @@
-=head1 NAME
-
-perlboot - Beginner's Object-Oriented Tutorial
-
-=head1 DESCRIPTION
-
-If you're not familiar with objects from other languages, some of the
-other Perl object documentation may be a little daunting, such as
-L<perlobj>, a basic reference in using objects, and L<perltoot>, which
-introduces readers to the peculiarities of Perl's object system in a
-tutorial way.
-
-So, let's take a different approach, presuming no prior object
-experience. It helps if you know about subroutines (L<perlsub>),
-references (L<perlref> et. seq.), and packages (L<perlmod>), so become
-familiar with those first if you haven't already.
-
-=head2 If we could talk to the animals...
-
-Let's let the animals talk for a moment:
-
- sub Cow::speak {
- print "a Cow goes moooo!\n";
- }
- sub Horse::speak {
- print "a Horse goes neigh!\n";
- }
- sub Sheep::speak {
- print "a Sheep goes baaaah!\n"
- }
-
- Cow::speak;
- Horse::speak;
- Sheep::speak;
-
-This results in:
-
- a Cow goes moooo!
- a Horse goes neigh!
- a Sheep goes baaaah!
-
-Nothing spectacular here. Simple subroutines, albeit from separate
-packages, and called using the full package name. So let's create
-an entire pasture:
-
- # Cow::speak, Horse::speak, Sheep::speak as before
- @pasture = qw(Cow Cow Horse Sheep Sheep);
- foreach $animal (@pasture) {
- &{$animal."::speak"};
- }
-
-This results in:
-
- a Cow goes moooo!
- a Cow goes moooo!
- a Horse goes neigh!
- a Sheep goes baaaah!
- a Sheep goes baaaah!
-
-Wow. That symbolic coderef de-referencing there is pretty nasty.
-We're counting on C<no strict subs> mode, certainly not recommended
-for larger programs. And why was that necessary? Because the name of
-the package seems to be inseparable from the name of the subroutine we
-want to invoke within that package.
-
-Or is it?
-
-=head2 Introducing the method invocation arrow
-
-For now, let's say that C<< Class->method >> invokes subroutine
-C<method> in package C<Class>. (Here, "Class" is used in its
-"category" meaning, not its "scholastic" meaning.) That's not
-completely accurate, but we'll do this one step at a time. Now let's
-use it like so:
-
- # Cow::speak, Horse::speak, Sheep::speak as before
- Cow->speak;
- Horse->speak;
- Sheep->speak;
-
-And once again, this results in:
-
- a Cow goes moooo!
- a Horse goes neigh!
- a Sheep goes baaaah!
-
-That's not fun yet. Same number of characters, all constant, no
-variables. But yet, the parts are separable now. Watch:
-
- $a = "Cow";
- $a->speak; # invokes Cow->speak
-
-Ahh! Now that the package name has been parted from the subroutine
-name, we can use a variable package name. And this time, we've got
-something that works even when C<use strict refs> is enabled.
-
-=head2 Invoking a barnyard
-
-Let's take that new arrow invocation and put it back in the barnyard
-example:
-
- sub Cow::speak {
- print "a Cow goes moooo!\n";
- }
- sub Horse::speak {
- print "a Horse goes neigh!\n";
- }
- sub Sheep::speak {
- print "a Sheep goes baaaah!\n"
- }
-
- @pasture = qw(Cow Cow Horse Sheep Sheep);
- foreach $animal (@pasture) {
- $animal->speak;
- }
-
-There! Now we have the animals all talking, and safely at that,
-without the use of symbolic coderefs.
-
-But look at all that common code. Each of the C<speak> routines has a
-similar structure: a C<print> operator and a string that contains
-common text, except for two of the words. It'd be nice if we could
-factor out the commonality, in case we decide later to change it all
-to C<says> instead of C<goes>.
-
-And we actually have a way of doing that without much fuss, but we
-have to hear a bit more about what the method invocation arrow is
-actually doing for us.
-
-=head2 The extra parameter of method invocation
-
-The invocation of:
-
- Class->method(@args)
-
-attempts to invoke subroutine C<Class::method> as:
-
- Class::method("Class", @args);
-
-(If the subroutine can't be found, "inheritance" kicks in, but we'll
-get to that later.) This means that we get the class name as the
-first parameter (the only parameter, if no arguments are given). So
-we can rewrite the C<Sheep> speaking subroutine as:
-
- sub Sheep::speak {
- my $class = shift;
- print "a $class goes baaaah!\n";
- }
-
-And the other two animals come out similarly:
-
- sub Cow::speak {
- my $class = shift;
- print "a $class goes moooo!\n";
- }
- sub Horse::speak {
- my $class = shift;
- print "a $class goes neigh!\n";
- }
-
-In each case, C<$class> will get the value appropriate for that
-subroutine. But once again, we have a lot of similar structure. Can
-we factor that out even further? Yes, by calling another method in
-the same class.
-
-=head2 Calling a second method to simplify things
-
-Let's call out from C<speak> to a helper method called C<sound>.
-This method provides the constant text for the sound itself.
-
- { package Cow;
- sub sound { "moooo" }
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n"
- }
- }
-
-Now, when we call C<< Cow->speak >>, we get a C<$class> of C<Cow> in
-C<speak>. This in turn selects the C<< Cow->sound >> method, which
-returns C<moooo>. But how different would this be for the C<Horse>?
-
- { package Horse;
- sub sound { "neigh" }
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n"
- }
- }
-
-Only the name of the package and the specific sound change. So can we
-somehow share the definition for C<speak> between the Cow and the
-Horse? Yes, with inheritance!
-
-=head2 Inheriting the windpipes
-
-We'll define a common subroutine package called C<Animal>, with the
-definition for C<speak>:
-
- { package Animal;
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n"
- }
- }
-
-Then, for each animal, we say it "inherits" from C<Animal>, along
-with the animal-specific sound:
-
- { package Cow;
- @ISA = qw(Animal);
- sub sound { "moooo" }
- }
-
-Note the added C<@ISA> array. We'll get to that in a minute.
-
-But what happens when we invoke C<< Cow->speak >> now?
-
-First, Perl constructs the argument list. In this case, it's just
-C<Cow>. Then Perl looks for C<Cow::speak>. But that's not there, so
-Perl checks for the inheritance array C<@Cow::ISA>. It's there,
-and contains the single name C<Animal>.
-
-Perl next checks for C<speak> inside C<Animal> instead, as in
-C<Animal::speak>. And that's found, so Perl invokes that subroutine
-with the already frozen argument list.
-
-Inside the C<Animal::speak> subroutine, C<$class> becomes C<Cow> (the
-first argument). So when we get to the step of invoking
-C<< $class->sound >>, it'll be looking for C<< Cow->sound >>, which
-gets it on the first try without looking at C<@ISA>. Success!
-
-=head2 A few notes about @ISA
-
-This magical C<@ISA> variable (pronounced "is a" not "ice-uh"), has
-declared that C<Cow> "is a" C<Animal>. Note that it's an array,
-not a simple single value, because on rare occasions, it makes sense
-to have more than one parent class searched for the missing methods.
-
-If C<Animal> also had an C<@ISA>, then we'd check there too. The
-search is recursive, depth-first, left-to-right in each C<@ISA>.
-Typically, each C<@ISA> has only one element (multiple elements means
-multiple inheritance and multiple headaches), so we get a nice tree of
-inheritance.
-
-When we turn on C<use strict>, we'll get complaints on C<@ISA>, since
-it's not a variable containing an explicit package name, nor is it a
-lexical ("my") variable. We can't make it a lexical variable though
-(it has to belong to the package to be found by the inheritance mechanism),
-so there's a couple of straightforward ways to handle that.
-
-The easiest is to just spell the package name out:
-
- @Cow::ISA = qw(Animal);
-
-Or allow it as an implicitly named package variable:
-
- package Cow;
- use vars qw(@ISA);
- @ISA = qw(Animal);
-
-If you're bringing in the class from outside, via an object-oriented
-module, you change:
-
- package Cow;
- use Animal;
- use vars qw(@ISA);
- @ISA = qw(Animal);
-
-into just:
-
- package Cow;
- use base qw(Animal);
-
-And that's pretty darn compact.
-
-=head2 Overriding the methods
-
-Let's add a mouse, which can barely be heard:
-
- # Animal package from before
- { package Mouse;
- @ISA = qw(Animal);
- sub sound { "squeak" }
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n";
- print "[but you can barely hear it!]\n";
- }
- }
-
- Mouse->speak;
-
-which results in:
-
- a Mouse goes squeak!
- [but you can barely hear it!]
-
-Here, C<Mouse> has its own speaking routine, so C<< Mouse->speak >>
-doesn't immediately invoke C<< Animal->speak >>. This is known as
-"overriding". In fact, we didn't even need to say that a C<Mouse> was
-an C<Animal> at all, since all of the methods needed for C<speak> are
-completely defined with C<Mouse>.
-
-But we've now duplicated some of the code from C<< Animal->speak >>,
-and this can once again be a maintenance headache. So, can we avoid
-that? Can we say somehow that a C<Mouse> does everything any other
-C<Animal> does, but add in the extra comment? Sure!
-
-First, we can invoke the C<Animal::speak> method directly:
-
- # Animal package from before
- { package Mouse;
- @ISA = qw(Animal);
- sub sound { "squeak" }
- sub speak {
- my $class = shift;
- Animal::speak($class);
- print "[but you can barely hear it!]\n";
- }
- }
-
-Note that we have to include the C<$class> parameter (almost surely
-the value of C<"Mouse">) as the first parameter to C<Animal::speak>,
-since we've stopped using the method arrow. Why did we stop? Well,
-if we invoke C<< Animal->speak >> there, the first parameter to the
-method will be C<"Animal"> not C<"Mouse">, and when time comes for it
-to call for the C<sound>, it won't have the right class to come back
-to this package.
-
-Invoking C<Animal::speak> directly is a mess, however. What if
-C<Animal::speak> didn't exist before, and was being inherited from a
-class mentioned in C<@Animal::ISA>? Because we are no longer using
-the method arrow, we get one and only one chance to hit the right
-subroutine.
-
-Also note that the C<Animal> classname is now hardwired into the
-subroutine selection. This is a mess if someone maintains the code,
-changing C<@ISA> for <Mouse> and didn't notice C<Animal> there in
-C<speak>. So, this is probably not the right way to go.
-
-=head2 Starting the search from a different place
-
-A better solution is to tell Perl to search from a higher place
-in the inheritance chain:
-
- # same Animal as before
- { package Mouse;
- # same @ISA, &sound as before
- sub speak {
- my $class = shift;
- $class->Animal::speak;
- print "[but you can barely hear it!]\n";
- }
- }
-
-Ahh. This works. Using this syntax, we start with C<Animal> to find
-C<speak>, and use all of C<Animal>'s inheritance chain if not found
-immediately. And yet the first parameter will be C<$class>, so the
-found C<speak> method will get C<Mouse> as its first entry, and
-eventually work its way back to C<Mouse::sound> for the details.
-
-But this isn't the best solution. We still have to keep the C<@ISA>
-and the initial search package coordinated. Worse, if C<Mouse> had
-multiple entries in C<@ISA>, we wouldn't necessarily know which one
-had actually defined C<speak>. So, is there an even better way?
-
-=head2 The SUPER way of doing things
-
-By changing the C<Animal> class to the C<SUPER> class in that
-invocation, we get a search of all of our super classes (classes
-listed in C<@ISA>) automatically:
-
- # same Animal as before
- { package Mouse;
- # same @ISA, &sound as before
- sub speak {
- my $class = shift;
- $class->SUPER::speak;
- print "[but you can barely hear it!]\n";
- }
- }
-
-So, C<SUPER::speak> means look in the current package's C<@ISA> for
-C<speak>, invoking the first one found.
-
-=head2 Where we're at so far...
-
-So far, we've seen the method arrow syntax:
-
- Class->method(@args);
-
-or the equivalent:
-
- $a = "Class";
- $a->method(@args);
-
-which constructs an argument list of:
-
- ("Class", @args)
-
-and attempts to invoke
-
- Class::method("Class", @Args);
-
-However, if C<Class::method> is not found, then C<@Class::ISA> is examined
-(recursively) to locate a package that does indeed contain C<method>,
-and that subroutine is invoked instead.
-
-Using this simple syntax, we have class methods, (multiple)
-inheritance, overriding, and extending. Using just what we've seen so
-far, we've been able to factor out common code, and provide a nice way
-to reuse implementations with variations. This is at the core of what
-objects provide, but objects also provide instance data, which we
-haven't even begun to cover.
-
-=head2 A horse is a horse, of course of course -- or is it?
-
-Let's start with the code for the C<Animal> class
-and the C<Horse> class:
-
- { package Animal;
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n"
- }
- }
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- }
-
-This lets us invoke C<< Horse->speak >> to ripple upward to
-C<Animal::speak>, calling back to C<Horse::sound> to get the specific
-sound, and the output of:
-
- a Horse goes neigh!
-
-But all of our Horse objects would have to be absolutely identical.
-If I add a subroutine, all horses automatically share it. That's
-great for making horses the same, but how do we capture the
-distinctions about an individual horse? For example, suppose I want
-to give my first horse a name. There's got to be a way to keep its
-name separate from the other horses.
-
-We can do that by drawing a new distinction, called an "instance".
-An "instance" is generally created by a class. In Perl, any reference
-can be an instance, so let's start with the simplest reference
-that can hold a horse's name: a scalar reference.
-
- my $name = "Mr. Ed";
- my $talking = \$name;
-
-So now C<$talking> is a reference to what will be the instance-specific
-data (the name). The final step in turning this into a real instance
-is with a special operator called C<bless>:
-
- bless $talking, Horse;
-
-This operator stores information about the package named C<Horse> into
-the thing pointed at by the reference. At this point, we say
-C<$talking> is an instance of C<Horse>. That is, it's a specific
-horse. The reference is otherwise unchanged, and can still be used
-with traditional dereferencing operators.
-
-=head2 Invoking an instance method
-
-The method arrow can be used on instances, as well as names of
-packages (classes). So, let's get the sound that C<$talking> makes:
-
- my $noise = $talking->sound;
-
-To invoke C<sound>, Perl first notes that C<$talking> is a blessed
-reference (and thus an instance). It then constructs an argument
-list, in this case from just C<($talking)>. (Later we'll see that
-arguments will take their place following the instance variable,
-just like with classes.)
-
-Now for the fun part: Perl takes the class in which the instance was
-blessed, in this case C<Horse>, and uses that to locate the subroutine
-to invoke the method. In this case, C<Horse::sound> is found directly
-(without using inheritance), yielding the final subroutine invocation:
-
- Horse::sound($talking)
-
-Note that the first parameter here is still the instance, not the name
-of the class as before. We'll get C<neigh> as the return value, and
-that'll end up as the C<$noise> variable above.
-
-If Horse::sound had not been found, we'd be wandering up the
-C<@Horse::ISA> list to try to find the method in one of the
-superclasses, just as for a class method. The only difference between
-a class method and an instance method is whether the first parameter
-is an instance (a blessed reference) or a class name (a string).
-
-=head2 Accessing the instance data
-
-Because we get the instance as the first parameter, we can now access
-the instance-specific data. In this case, let's add a way to get at
-the name:
-
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- sub name {
- my $self = shift;
- $$self;
- }
- }
-
-Now we call for the name:
-
- print $talking->name, " says ", $talking->sound, "\n";
-
-Inside C<Horse::name>, the C<@_> array contains just C<$talking>,
-which the C<shift> stores into C<$self>. (It's traditional to shift
-the first parameter off into a variable named C<$self> for instance
-methods, so stay with that unless you have strong reasons otherwise.)
-Then, C<$self> gets de-referenced as a scalar ref, yielding C<Mr. Ed>,
-and we're done with that. The result is:
-
- Mr. Ed says neigh.
-
-=head2 How to build a horse
-
-Of course, if we constructed all of our horses by hand, we'd most
-likely make mistakes from time to time. We're also violating one of
-the properties of object-oriented programming, in that the "inside
-guts" of a Horse are visible. That's good if you're a veterinarian,
-but not if you just like to own horses. So, let's let the Horse class
-build a new horse:
-
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- sub name {
- my $self = shift;
- $$self;
- }
- sub named {
- my $class = shift;
- my $name = shift;
- bless \$name, $class;
- }
- }
-
-Now with the new C<named> method, we can build a horse:
-
- my $talking = Horse->named("Mr. Ed");
-
-Notice we're back to a class method, so the two arguments to
-C<Horse::named> are C<Horse> and C<Mr. Ed>. The C<bless> operator
-not only blesses C<$name>, it also returns the reference to C<$name>,
-so that's fine as a return value. And that's how to build a horse.
-
-We've called the constructor C<named> here, so that it quickly denotes
-the constructor's argument as the name for this particular C<Horse>.
-You can use different constructors with different names for different
-ways of "giving birth" to the object (like maybe recording its
-pedigree or date of birth). However, you'll find that most people
-coming to Perl from more limited languages use a single constructor
-named C<new>, with various ways of interpreting the arguments to
-C<new>. Either style is fine, as long as you document your particular
-way of giving birth to an object. (And you I<were> going to do that,
-right?)
-
-=head2 Inheriting the constructor
-
-But was there anything specific to C<Horse> in that method? No. Therefore,
-it's also the same recipe for building anything else that inherited from
-C<Animal>, so let's put it there:
-
- { package Animal;
- sub speak {
- my $class = shift;
- print "a $class goes ", $class->sound, "!\n"
- }
- sub name {
- my $self = shift;
- $$self;
- }
- sub named {
- my $class = shift;
- my $name = shift;
- bless \$name, $class;
- }
- }
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- }
-
-Ahh, but what happens if we invoke C<speak> on an instance?
-
- my $talking = Horse->named("Mr. Ed");
- $talking->speak;
-
-We get a debugging value:
-
- a Horse=SCALAR(0xaca42ac) goes neigh!
-
-Why? Because the C<Animal::speak> routine is expecting a classname as
-its first parameter, not an instance. When the instance is passed in,
-we'll end up using a blessed scalar reference as a string, and that
-shows up as we saw it just now.
-
-=head2 Making a method work with either classes or instances
-
-All we need is for a method to detect if it is being called on a class
-or called on an instance. The most straightforward way is with the
-C<ref> operator. This returns a string (the classname) when used on a
-blessed reference, and C<undef> when used on a string (like a
-classname). Let's modify the C<name> method first to notice the change:
-
- sub name {
- my $either = shift;
- ref $either
- ? $$either # it's an instance, return name
- : "an unnamed $either"; # it's a class, return generic
- }
-
-Here, the C<?:> operator comes in handy to select either the
-dereference or a derived string. Now we can use this with either an
-instance or a class. Note that I've changed the first parameter
-holder to C<$either> to show that this is intended:
-
- my $talking = Horse->named("Mr. Ed");
- print Horse->name, "\n"; # prints "an unnamed Horse\n"
- print $talking->name, "\n"; # prints "Mr Ed.\n"
-
-and now we'll fix C<speak> to use this:
-
- sub speak {
- my $either = shift;
- print $either->name, " goes ", $either->sound, "\n";
- }
-
-And since C<sound> already worked with either a class or an instance,
-we're done!
-
-=head2 Adding parameters to a method
-
-Let's train our animals to eat:
-
- { package Animal;
- sub named {
- my $class = shift;
- my $name = shift;
- bless \$name, $class;
- }
- sub name {
- my $either = shift;
- ref $either
- ? $$either # it's an instance, return name
- : "an unnamed $either"; # it's a class, return generic
- }
- sub speak {
- my $either = shift;
- print $either->name, " goes ", $either->sound, "\n";
- }
- sub eat {
- my $either = shift;
- my $food = shift;
- print $either->name, " eats $food.\n";
- }
- }
- { package Horse;
- @ISA = qw(Animal);
- sub sound { "neigh" }
- }
- { package Sheep;
- @ISA = qw(Animal);
- sub sound { "baaaah" }
- }
-
-And now try it out:
-
- my $talking = Horse->named("Mr. Ed");
- $talking->eat("hay");
- Sheep->eat("grass");
-
-which prints:
-
- Mr. Ed eats hay.
- an unnamed Sheep eats grass.
-
-An instance method with parameters gets invoked with the instance,
-and then the list of parameters. So that first invocation is like:
-
- Animal::eat($talking, "hay");
-
-=head2 More interesting instances
-
-What if an instance needs more data? Most interesting instances are
-made of many items, each of which can in turn be a reference or even
-another object. The easiest way to store these is often in a hash.
-The keys of the hash serve as the names of parts of the object (often
-called "instance variables" or "member variables"), and the
-corresponding values are, well, the values.
-
-But how do we turn the horse into a hash? Recall that an object was
-any blessed reference. We can just as easily make it a blessed hash
-reference as a blessed scalar reference, as long as everything that
-looks at the reference is changed accordingly.
-
-Let's make a sheep that has a name and a color:
-
- my $bad = bless { Name => "Evil", Color => "black" }, Sheep;
-
-so C<< $bad->{Name} >> has C<Evil>, and C<< $bad->{Color} >> has
-C<black>. But we want to make C<< $bad->name >> access the name, and
-that's now messed up because it's expecting a scalar reference. Not
-to worry, because that's pretty easy to fix up:
-
- ## in Animal
- sub name {
- my $either = shift;
- ref $either ?
- $either->{Name} :
- "an unnamed $either";
- }
-
-And of course C<named> still builds a scalar sheep, so let's fix that
-as well:
-
- ## in Animal
- sub named {
- my $class = shift;
- my $name = shift;
- my $self = { Name => $name, Color => $class->default_color };
- bless $self, $class;
- }
-
-What's this C<default_color>? Well, if C<named> has only the name,
-we still need to set a color, so we'll have a class-specific initial color.
-For a sheep, we might define it as white:
-
- ## in Sheep
- sub default_color { "white" }
-
-And then to keep from having to define one for each additional class,
-we'll define a "backstop" method that serves as the "default default",
-directly in C<Animal>:
-
- ## in Animal
- sub default_color { "brown" }
-
-Now, because C<name> and C<named> were the only methods that
-referenced the "structure" of the object, the rest of the methods can
-remain the same, so C<speak> still works as before.
-
-=head2 A horse of a different color
-
-But having all our horses be brown would be boring. So let's add a
-method or two to get and set the color.
-
- ## in Animal
- sub color {
- $_[0]->{Color}
- }
- sub set_color {
- $_[0]->{Color} = $_[1];
- }
-
-Note the alternate way of accessing the arguments: C<$_[0]> is used
-in-place, rather than with a C<shift>. (This saves us a bit of time
-for something that may be invoked frequently.) And now we can fix
-that color for Mr. Ed:
-
- my $talking = Horse->named("Mr. Ed");
- $talking->set_color("black-and-white");
- print $talking->name, " is colored ", $talking->color, "\n";
-
-which results in:
-
- Mr. Ed is colored black-and-white
-
-=head2 Summary
-
-So, now we have class methods, constructors, instance methods,
-instance data, and even accessors. But that's still just the
-beginning of what Perl has to offer. We haven't even begun to talk
-about accessors that double as getters and setters, destructors,
-indirect object notation, subclasses that add instance data, per-class
-data, overloading, "isa" and "can" tests, C<UNIVERSAL> class, and so
-on. That's for the rest of the Perl documentation to cover.
-Hopefully, this gets you started, though.
-
-=head1 SEE ALSO
-
-For more information, see L<perlobj> (for all the gritty details about
-Perl objects, now that you've seen the basics), L<perltoot> (the
-tutorial for those who already know objects), L<perltootc> (dealing
-with class data), L<perlbot> (for some more tricks), and books such as
-Damian Conway's excellent I<Object Oriented Perl>.
-
-Some modules which might prove interesting are Class::Accessor,
-Class::Class, Class::Contract, Class::Data::Inheritable,
-Class::MethodMaker and Tie::SecureHash
-
-=head1 COPYRIGHT
-
-Copyright (c) 1999, 2000 by Randal L. Schwartz and Stonehenge
-Consulting Services, Inc. Permission is hereby granted to distribute
-this document intact with the Perl distribution, and in accordance
-with the licenses of the Perl distribution; derived documents must
-include this copyright notice intact.
-
-Portions of this text have been derived from Perl Training materials
-originally appearing in the I<Packages, References, Objects, and
-Modules> course taught by instructors for Stonehenge Consulting
-Services, Inc. and used with permission.
-
-Portions of this text have been derived from materials originally
-appearing in I<Linux Magazine> and used with permission.
diff --git a/contrib/perl5/pod/perlbot.pod b/contrib/perl5/pod/perlbot.pod
deleted file mode 100644
index bc4e4da..0000000
--- a/contrib/perl5/pod/perlbot.pod
+++ /dev/null
@@ -1,527 +0,0 @@
-=head1 NAME
-
-perlbot - Bag'o Object Tricks (the BOT)
-
-=head1 DESCRIPTION
-
-The following collection of tricks and hints is intended to whet curious
-appetites about such things as the use of instance variables and the
-mechanics of object and class relationships. The reader is encouraged to
-consult relevant textbooks for discussion of Object Oriented definitions and
-methodology. This is not intended as a tutorial for object-oriented
-programming or as a comprehensive guide to Perl's object oriented features,
-nor should it be construed as a style guide.
-
-The Perl motto still holds: There's more than one way to do it.
-
-=head1 OO SCALING TIPS
-
-=over 5
-
-=item 1
-
-Do not attempt to verify the type of $self. That'll break if the class is
-inherited, when the type of $self is valid but its package isn't what you
-expect. See rule 5.
-
-=item 2
-
-If an object-oriented (OO) or indirect-object (IO) syntax was used, then the
-object is probably the correct type and there's no need to become paranoid
-about it. Perl isn't a paranoid language anyway. If people subvert the OO
-or IO syntax then they probably know what they're doing and you should let
-them do it. See rule 1.
-
-=item 3
-
-Use the two-argument form of bless(). Let a subclass use your constructor.
-See L<INHERITING A CONSTRUCTOR>.
-
-=item 4
-
-The subclass is allowed to know things about its immediate superclass, the
-superclass is allowed to know nothing about a subclass.
-
-=item 5
-
-Don't be trigger happy with inheritance. A "using", "containing", or
-"delegation" relationship (some sort of aggregation, at least) is often more
-appropriate. See L<OBJECT RELATIONSHIPS>, L<USING RELATIONSHIP WITH SDBM>,
-and L<"DELEGATION">.
-
-=item 6
-
-The object is the namespace. Make package globals accessible via the
-object. This will remove the guess work about the symbol's home package.
-See L<CLASS CONTEXT AND THE OBJECT>.
-
-=item 7
-
-IO syntax is certainly less noisy, but it is also prone to ambiguities that
-can cause difficult-to-find bugs. Allow people to use the sure-thing OO
-syntax, even if you don't like it.
-
-=item 8
-
-Do not use function-call syntax on a method. You're going to be bitten
-someday. Someone might move that method into a superclass and your code
-will be broken. On top of that you're feeding the paranoia in rule 2.
-
-=item 9
-
-Don't assume you know the home package of a method. You're making it
-difficult for someone to override that method. See L<THINKING OF CODE REUSE>.
-
-=back
-
-=head1 INSTANCE VARIABLES
-
-An anonymous array or anonymous hash can be used to hold instance
-variables. Named parameters are also demonstrated.
-
- package Foo;
-
- sub new {
- my $type = shift;
- my %params = @_;
- my $self = {};
- $self->{'High'} = $params{'High'};
- $self->{'Low'} = $params{'Low'};
- bless $self, $type;
- }
-
-
- package Bar;
-
- sub new {
- my $type = shift;
- my %params = @_;
- my $self = [];
- $self->[0] = $params{'Left'};
- $self->[1] = $params{'Right'};
- bless $self, $type;
- }
-
- package main;
-
- $a = Foo->new( 'High' => 42, 'Low' => 11 );
- print "High=$a->{'High'}\n";
- print "Low=$a->{'Low'}\n";
-
- $b = Bar->new( 'Left' => 78, 'Right' => 40 );
- print "Left=$b->[0]\n";
- print "Right=$b->[1]\n";
-
-=head1 SCALAR INSTANCE VARIABLES
-
-An anonymous scalar can be used when only one instance variable is needed.
-
- package Foo;
-
- sub new {
- my $type = shift;
- my $self;
- $self = shift;
- bless \$self, $type;
- }
-
- package main;
-
- $a = Foo->new( 42 );
- print "a=$$a\n";
-
-
-=head1 INSTANCE VARIABLE INHERITANCE
-
-This example demonstrates how one might inherit instance variables from a
-superclass for inclusion in the new class. This requires calling the
-superclass's constructor and adding one's own instance variables to the new
-object.
-
- package Bar;
-
- sub new {
- my $type = shift;
- my $self = {};
- $self->{'buz'} = 42;
- bless $self, $type;
- }
-
- package Foo;
- @ISA = qw( Bar );
-
- sub new {
- my $type = shift;
- my $self = Bar->new;
- $self->{'biz'} = 11;
- bless $self, $type;
- }
-
- package main;
-
- $a = Foo->new;
- print "buz = ", $a->{'buz'}, "\n";
- print "biz = ", $a->{'biz'}, "\n";
-
-
-
-=head1 OBJECT RELATIONSHIPS
-
-The following demonstrates how one might implement "containing" and "using"
-relationships between objects.
-
- package Bar;
-
- sub new {
- my $type = shift;
- my $self = {};
- $self->{'buz'} = 42;
- bless $self, $type;
- }
-
- package Foo;
-
- sub new {
- my $type = shift;
- my $self = {};
- $self->{'Bar'} = Bar->new;
- $self->{'biz'} = 11;
- bless $self, $type;
- }
-
- package main;
-
- $a = Foo->new;
- print "buz = ", $a->{'Bar'}->{'buz'}, "\n";
- print "biz = ", $a->{'biz'}, "\n";
-
-
-
-=head1 OVERRIDING SUPERCLASS METHODS
-
-The following example demonstrates how to override a superclass method and
-then call the overridden method. The B<SUPER> pseudo-class allows the
-programmer to call an overridden superclass method without actually knowing
-where that method is defined.
-
- package Buz;
- sub goo { print "here's the goo\n" }
-
- package Bar; @ISA = qw( Buz );
- sub google { print "google here\n" }
-
- package Baz;
- sub mumble { print "mumbling\n" }
-
- package Foo;
- @ISA = qw( Bar Baz );
-
- sub new {
- my $type = shift;
- bless [], $type;
- }
- sub grr { print "grumble\n" }
- sub goo {
- my $self = shift;
- $self->SUPER::goo();
- }
- sub mumble {
- my $self = shift;
- $self->SUPER::mumble();
- }
- sub google {
- my $self = shift;
- $self->SUPER::google();
- }
-
- package main;
-
- $foo = Foo->new;
- $foo->mumble;
- $foo->grr;
- $foo->goo;
- $foo->google;
-
-
-=head1 USING RELATIONSHIP WITH SDBM
-
-This example demonstrates an interface for the SDBM class. This creates a
-"using" relationship between the SDBM class and the new class Mydbm.
-
- package Mydbm;
-
- require SDBM_File;
- require Tie::Hash;
- @ISA = qw( Tie::Hash );
-
- sub TIEHASH {
- my $type = shift;
- my $ref = SDBM_File->new(@_);
- bless {'dbm' => $ref}, $type;
- }
- sub FETCH {
- my $self = shift;
- my $ref = $self->{'dbm'};
- $ref->FETCH(@_);
- }
- sub STORE {
- my $self = shift;
- if (defined $_[0]){
- my $ref = $self->{'dbm'};
- $ref->STORE(@_);
- } else {
- die "Cannot STORE an undefined key in Mydbm\n";
- }
- }
-
- package main;
- use Fcntl qw( O_RDWR O_CREAT );
-
- tie %foo, "Mydbm", "Sdbm", O_RDWR|O_CREAT, 0640;
- $foo{'bar'} = 123;
- print "foo-bar = $foo{'bar'}\n";
-
- tie %bar, "Mydbm", "Sdbm2", O_RDWR|O_CREAT, 0640;
- $bar{'Cathy'} = 456;
- print "bar-Cathy = $bar{'Cathy'}\n";
-
-=head1 THINKING OF CODE REUSE
-
-One strength of Object-Oriented languages is the ease with which old code
-can use new code. The following examples will demonstrate first how one can
-hinder code reuse and then how one can promote code reuse.
-
-This first example illustrates a class which uses a fully-qualified method
-call to access the "private" method BAZ(). The second example will show
-that it is impossible to override the BAZ() method.
-
- package FOO;
-
- sub new {
- my $type = shift;
- bless {}, $type;
- }
- sub bar {
- my $self = shift;
- $self->FOO::private::BAZ;
- }
-
- package FOO::private;
-
- sub BAZ {
- print "in BAZ\n";
- }
-
- package main;
-
- $a = FOO->new;
- $a->bar;
-
-Now we try to override the BAZ() method. We would like FOO::bar() to call
-GOOP::BAZ(), but this cannot happen because FOO::bar() explicitly calls
-FOO::private::BAZ().
-
- package FOO;
-
- sub new {
- my $type = shift;
- bless {}, $type;
- }
- sub bar {
- my $self = shift;
- $self->FOO::private::BAZ;
- }
-
- package FOO::private;
-
- sub BAZ {
- print "in BAZ\n";
- }
-
- package GOOP;
- @ISA = qw( FOO );
- sub new {
- my $type = shift;
- bless {}, $type;
- }
-
- sub BAZ {
- print "in GOOP::BAZ\n";
- }
-
- package main;
-
- $a = GOOP->new;
- $a->bar;
-
-To create reusable code we must modify class FOO, flattening class
-FOO::private. The next example shows a reusable class FOO which allows the
-method GOOP::BAZ() to be used in place of FOO::BAZ().
-
- package FOO;
-
- sub new {
- my $type = shift;
- bless {}, $type;
- }
- sub bar {
- my $self = shift;
- $self->BAZ;
- }
-
- sub BAZ {
- print "in BAZ\n";
- }
-
- package GOOP;
- @ISA = qw( FOO );
-
- sub new {
- my $type = shift;
- bless {}, $type;
- }
- sub BAZ {
- print "in GOOP::BAZ\n";
- }
-
- package main;
-
- $a = GOOP->new;
- $a->bar;
-
-=head1 CLASS CONTEXT AND THE OBJECT
-
-Use the object to solve package and class context problems. Everything a
-method needs should be available via the object or should be passed as a
-parameter to the method.
-
-A class will sometimes have static or global data to be used by the
-methods. A subclass may want to override that data and replace it with new
-data. When this happens the superclass may not know how to find the new
-copy of the data.
-
-This problem can be solved by using the object to define the context of the
-method. Let the method look in the object for a reference to the data. The
-alternative is to force the method to go hunting for the data ("Is it in my
-class, or in a subclass? Which subclass?"), and this can be inconvenient
-and will lead to hackery. It is better just to let the object tell the
-method where that data is located.
-
- package Bar;
-
- %fizzle = ( 'Password' => 'XYZZY' );
-
- sub new {
- my $type = shift;
- my $self = {};
- $self->{'fizzle'} = \%fizzle;
- bless $self, $type;
- }
-
- sub enter {
- my $self = shift;
-
- # Don't try to guess if we should use %Bar::fizzle
- # or %Foo::fizzle. The object already knows which
- # we should use, so just ask it.
- #
- my $fizzle = $self->{'fizzle'};
-
- print "The word is ", $fizzle->{'Password'}, "\n";
- }
-
- package Foo;
- @ISA = qw( Bar );
-
- %fizzle = ( 'Password' => 'Rumple' );
-
- sub new {
- my $type = shift;
- my $self = Bar->new;
- $self->{'fizzle'} = \%fizzle;
- bless $self, $type;
- }
-
- package main;
-
- $a = Bar->new;
- $b = Foo->new;
- $a->enter;
- $b->enter;
-
-=head1 INHERITING A CONSTRUCTOR
-
-An inheritable constructor should use the second form of bless() which allows
-blessing directly into a specified class. Notice in this example that the
-object will be a BAR not a FOO, even though the constructor is in class FOO.
-
- package FOO;
-
- sub new {
- my $type = shift;
- my $self = {};
- bless $self, $type;
- }
-
- sub baz {
- print "in FOO::baz()\n";
- }
-
- package BAR;
- @ISA = qw(FOO);
-
- sub baz {
- print "in BAR::baz()\n";
- }
-
- package main;
-
- $a = BAR->new;
- $a->baz;
-
-=head1 DELEGATION
-
-Some classes, such as SDBM_File, cannot be effectively subclassed because
-they create foreign objects. Such a class can be extended with some sort of
-aggregation technique such as the "using" relationship mentioned earlier or
-by delegation.
-
-The following example demonstrates delegation using an AUTOLOAD() function to
-perform message-forwarding. This will allow the Mydbm object to behave
-exactly like an SDBM_File object. The Mydbm class could now extend the
-behavior by adding custom FETCH() and STORE() methods, if this is desired.
-
- package Mydbm;
-
- require SDBM_File;
- require Tie::Hash;
- @ISA = qw(Tie::Hash);
-
- sub TIEHASH {
- my $type = shift;
- my $ref = SDBM_File->new(@_);
- bless {'delegate' => $ref};
- }
-
- sub AUTOLOAD {
- my $self = shift;
-
- # The Perl interpreter places the name of the
- # message in a variable called $AUTOLOAD.
-
- # DESTROY messages should never be propagated.
- return if $AUTOLOAD =~ /::DESTROY$/;
-
- # Remove the package name.
- $AUTOLOAD =~ s/^Mydbm:://;
-
- # Pass the message to the delegate.
- $self->{'delegate'}->$AUTOLOAD(@_);
- }
-
- package main;
- use Fcntl qw( O_RDWR O_CREAT );
-
- tie %foo, "Mydbm", "adbm", O_RDWR|O_CREAT, 0640;
- $foo{'bar'} = 123;
- print "foo-bar = $foo{'bar'}\n";
diff --git a/contrib/perl5/pod/perlcall.pod b/contrib/perl5/pod/perlcall.pod
deleted file mode 100644
index 40f1d65..0000000
--- a/contrib/perl5/pod/perlcall.pod
+++ /dev/null
@@ -1,1957 +0,0 @@
-=head1 NAME
-
-perlcall - Perl calling conventions from C
-
-=head1 DESCRIPTION
-
-The purpose of this document is to show you how to call Perl subroutines
-directly from C, i.e., how to write I<callbacks>.
-
-Apart from discussing the C interface provided by Perl for writing
-callbacks the document uses a series of examples to show how the
-interface actually works in practice. In addition some techniques for
-coding callbacks are covered.
-
-Examples where callbacks are necessary include
-
-=over 5
-
-=item * An Error Handler
-
-You have created an XSUB interface to an application's C API.
-
-A fairly common feature in applications is to allow you to define a C
-function that will be called whenever something nasty occurs. What we
-would like is to be able to specify a Perl subroutine that will be
-called instead.
-
-=item * An Event Driven Program
-
-The classic example of where callbacks are used is when writing an
-event driven program like for an X windows application. In this case
-you register functions to be called whenever specific events occur,
-e.g., a mouse button is pressed, the cursor moves into a window or a
-menu item is selected.
-
-=back
-
-Although the techniques described here are applicable when embedding
-Perl in a C program, this is not the primary goal of this document.
-There are other details that must be considered and are specific to
-embedding Perl. For details on embedding Perl in C refer to
-L<perlembed>.
-
-Before you launch yourself head first into the rest of this document,
-it would be a good idea to have read the following two documents -
-L<perlxs> and L<perlguts>.
-
-=head1 THE CALL_ FUNCTIONS
-
-Although this stuff is easier to explain using examples, you first need
-be aware of a few important definitions.
-
-Perl has a number of C functions that allow you to call Perl
-subroutines. They are
-
- I32 call_sv(SV* sv, I32 flags) ;
- I32 call_pv(char *subname, I32 flags) ;
- I32 call_method(char *methname, I32 flags) ;
- I32 call_argv(char *subname, I32 flags, register char **argv) ;
-
-The key function is I<call_sv>. All the other functions are
-fairly simple wrappers which make it easier to call Perl subroutines in
-special cases. At the end of the day they will all call I<call_sv>
-to invoke the Perl subroutine.
-
-All the I<call_*> functions have a C<flags> parameter which is
-used to pass a bit mask of options to Perl. This bit mask operates
-identically for each of the functions. The settings available in the
-bit mask are discussed in L<FLAG VALUES>.
-
-Each of the functions will now be discussed in turn.
-
-=over 5
-
-=item call_sv
-
-I<call_sv> takes two parameters, the first, C<sv>, is an SV*.
-This allows you to specify the Perl subroutine to be called either as a
-C string (which has first been converted to an SV) or a reference to a
-subroutine. The section, I<Using call_sv>, shows how you can make
-use of I<call_sv>.
-
-=item call_pv
-
-The function, I<call_pv>, is similar to I<call_sv> except it
-expects its first parameter to be a C char* which identifies the Perl
-subroutine you want to call, e.g., C<call_pv("fred", 0)>. If the
-subroutine you want to call is in another package, just include the
-package name in the string, e.g., C<"pkg::fred">.
-
-=item call_method
-
-The function I<call_method> is used to call a method from a Perl
-class. The parameter C<methname> corresponds to the name of the method
-to be called. Note that the class that the method belongs to is passed
-on the Perl stack rather than in the parameter list. This class can be
-either the name of the class (for a static method) or a reference to an
-object (for a virtual method). See L<perlobj> for more information on
-static and virtual methods and L<Using call_method> for an example
-of using I<call_method>.
-
-=item call_argv
-
-I<call_argv> calls the Perl subroutine specified by the C string
-stored in the C<subname> parameter. It also takes the usual C<flags>
-parameter. The final parameter, C<argv>, consists of a NULL terminated
-list of C strings to be passed as parameters to the Perl subroutine.
-See I<Using call_argv>.
-
-=back
-
-All the functions return an integer. This is a count of the number of
-items returned by the Perl subroutine. The actual items returned by the
-subroutine are stored on the Perl stack.
-
-As a general rule you should I<always> check the return value from
-these functions. Even if you are expecting only a particular number of
-values to be returned from the Perl subroutine, there is nothing to
-stop someone from doing something unexpected--don't say you haven't
-been warned.
-
-=head1 FLAG VALUES
-
-The C<flags> parameter in all the I<call_*> functions is a bit mask
-which can consist of any combination of the symbols defined below,
-OR'ed together.
-
-
-=head2 G_VOID
-
-Calls the Perl subroutine in a void context.
-
-This flag has 2 effects:
-
-=over 5
-
-=item 1.
-
-It indicates to the subroutine being called that it is executing in
-a void context (if it executes I<wantarray> the result will be the
-undefined value).
-
-=item 2.
-
-It ensures that nothing is actually returned from the subroutine.
-
-=back
-
-The value returned by the I<call_*> function indicates how many
-items have been returned by the Perl subroutine - in this case it will
-be 0.
-
-
-=head2 G_SCALAR
-
-Calls the Perl subroutine in a scalar context. This is the default
-context flag setting for all the I<call_*> functions.
-
-This flag has 2 effects:
-
-=over 5
-
-=item 1.
-
-It indicates to the subroutine being called that it is executing in a
-scalar context (if it executes I<wantarray> the result will be false).
-
-=item 2.
-
-It ensures that only a scalar is actually returned from the subroutine.
-The subroutine can, of course, ignore the I<wantarray> and return a
-list anyway. If so, then only the last element of the list will be
-returned.
-
-=back
-
-The value returned by the I<call_*> function indicates how many
-items have been returned by the Perl subroutine - in this case it will
-be either 0 or 1.
-
-If 0, then you have specified the G_DISCARD flag.
-
-If 1, then the item actually returned by the Perl subroutine will be
-stored on the Perl stack - the section I<Returning a Scalar> shows how
-to access this value on the stack. Remember that regardless of how
-many items the Perl subroutine returns, only the last one will be
-accessible from the stack - think of the case where only one value is
-returned as being a list with only one element. Any other items that
-were returned will not exist by the time control returns from the
-I<call_*> function. The section I<Returning a list in a scalar
-context> shows an example of this behavior.
-
-
-=head2 G_ARRAY
-
-Calls the Perl subroutine in a list context.
-
-As with G_SCALAR, this flag has 2 effects:
-
-=over 5
-
-=item 1.
-
-It indicates to the subroutine being called that it is executing in a
-list context (if it executes I<wantarray> the result will be true).
-
-
-=item 2.
-
-It ensures that all items returned from the subroutine will be
-accessible when control returns from the I<call_*> function.
-
-=back
-
-The value returned by the I<call_*> function indicates how many
-items have been returned by the Perl subroutine.
-
-If 0, then you have specified the G_DISCARD flag.
-
-If not 0, then it will be a count of the number of items returned by
-the subroutine. These items will be stored on the Perl stack. The
-section I<Returning a list of values> gives an example of using the
-G_ARRAY flag and the mechanics of accessing the returned items from the
-Perl stack.
-
-=head2 G_DISCARD
-
-By default, the I<call_*> functions place the items returned from
-by the Perl subroutine on the stack. If you are not interested in
-these items, then setting this flag will make Perl get rid of them
-automatically for you. Note that it is still possible to indicate a
-context to the Perl subroutine by using either G_SCALAR or G_ARRAY.
-
-If you do not set this flag then it is I<very> important that you make
-sure that any temporaries (i.e., parameters passed to the Perl
-subroutine and values returned from the subroutine) are disposed of
-yourself. The section I<Returning a Scalar> gives details of how to
-dispose of these temporaries explicitly and the section I<Using Perl to
-dispose of temporaries> discusses the specific circumstances where you
-can ignore the problem and let Perl deal with it for you.
-
-=head2 G_NOARGS
-
-Whenever a Perl subroutine is called using one of the I<call_*>
-functions, it is assumed by default that parameters are to be passed to
-the subroutine. If you are not passing any parameters to the Perl
-subroutine, you can save a bit of time by setting this flag. It has
-the effect of not creating the C<@_> array for the Perl subroutine.
-
-Although the functionality provided by this flag may seem
-straightforward, it should be used only if there is a good reason to do
-so. The reason for being cautious is that even if you have specified
-the G_NOARGS flag, it is still possible for the Perl subroutine that
-has been called to think that you have passed it parameters.
-
-In fact, what can happen is that the Perl subroutine you have called
-can access the C<@_> array from a previous Perl subroutine. This will
-occur when the code that is executing the I<call_*> function has
-itself been called from another Perl subroutine. The code below
-illustrates this
-
- sub fred
- { print "@_\n" }
-
- sub joe
- { &fred }
-
- &joe(1,2,3) ;
-
-This will print
-
- 1 2 3
-
-What has happened is that C<fred> accesses the C<@_> array which
-belongs to C<joe>.
-
-
-=head2 G_EVAL
-
-It is possible for the Perl subroutine you are calling to terminate
-abnormally, e.g., by calling I<die> explicitly or by not actually
-existing. By default, when either of these events occurs, the
-process will terminate immediately. If you want to trap this
-type of event, specify the G_EVAL flag. It will put an I<eval { }>
-around the subroutine call.
-
-Whenever control returns from the I<call_*> function you need to
-check the C<$@> variable as you would in a normal Perl script.
-
-The value returned from the I<call_*> function is dependent on
-what other flags have been specified and whether an error has
-occurred. Here are all the different cases that can occur:
-
-=over 5
-
-=item *
-
-If the I<call_*> function returns normally, then the value
-returned is as specified in the previous sections.
-
-=item *
-
-If G_DISCARD is specified, the return value will always be 0.
-
-=item *
-
-If G_ARRAY is specified I<and> an error has occurred, the return value
-will always be 0.
-
-=item *
-
-If G_SCALAR is specified I<and> an error has occurred, the return value
-will be 1 and the value on the top of the stack will be I<undef>. This
-means that if you have already detected the error by checking C<$@> and
-you want the program to continue, you must remember to pop the I<undef>
-from the stack.
-
-=back
-
-See I<Using G_EVAL> for details on using G_EVAL.
-
-=head2 G_KEEPERR
-
-You may have noticed that using the G_EVAL flag described above will
-B<always> clear the C<$@> variable and set it to a string describing
-the error iff there was an error in the called code. This unqualified
-resetting of C<$@> can be problematic in the reliable identification of
-errors using the C<eval {}> mechanism, because the possibility exists
-that perl will call other code (end of block processing code, for
-example) between the time the error causes C<$@> to be set within
-C<eval {}>, and the subsequent statement which checks for the value of
-C<$@> gets executed in the user's script.
-
-This scenario will mostly be applicable to code that is meant to be
-called from within destructors, asynchronous callbacks, signal
-handlers, C<__DIE__> or C<__WARN__> hooks, and C<tie> functions. In
-such situations, you will not want to clear C<$@> at all, but simply to
-append any new errors to any existing value of C<$@>.
-
-The G_KEEPERR flag is meant to be used in conjunction with G_EVAL in
-I<call_*> functions that are used to implement such code. This flag
-has no effect when G_EVAL is not used.
-
-When G_KEEPERR is used, any errors in the called code will be prefixed
-with the string "\t(in cleanup)", and appended to the current value
-of C<$@>.
-
-The G_KEEPERR flag was introduced in Perl version 5.002.
-
-See I<Using G_KEEPERR> for an example of a situation that warrants the
-use of this flag.
-
-=head2 Determining the Context
-
-As mentioned above, you can determine the context of the currently
-executing subroutine in Perl with I<wantarray>. The equivalent test
-can be made in C by using the C<GIMME_V> macro, which returns
-C<G_ARRAY> if you have been called in a list context, C<G_SCALAR> if
-in a scalar context, or C<G_VOID> if in a void context (i.e. the
-return value will not be used). An older version of this macro is
-called C<GIMME>; in a void context it returns C<G_SCALAR> instead of
-C<G_VOID>. An example of using the C<GIMME_V> macro is shown in
-section I<Using GIMME_V>.
-
-=head1 KNOWN PROBLEMS
-
-This section outlines all known problems that exist in the
-I<call_*> functions.
-
-=over 5
-
-=item 1.
-
-If you are intending to make use of both the G_EVAL and G_SCALAR flags
-in your code, use a version of Perl greater than 5.000. There is a bug
-in version 5.000 of Perl which means that the combination of these two
-flags will not work as described in the section I<FLAG VALUES>.
-
-Specifically, if the two flags are used when calling a subroutine and
-that subroutine does not call I<die>, the value returned by
-I<call_*> will be wrong.
-
-
-=item 2.
-
-In Perl 5.000 and 5.001 there is a problem with using I<call_*> if
-the Perl sub you are calling attempts to trap a I<die>.
-
-The symptom of this problem is that the called Perl sub will continue
-to completion, but whenever it attempts to pass control back to the
-XSUB, the program will immediately terminate.
-
-For example, say you want to call this Perl sub
-
- sub fred
- {
- eval { die "Fatal Error" ; }
- print "Trapped error: $@\n"
- if $@ ;
- }
-
-via this XSUB
-
- void
- Call_fred()
- CODE:
- PUSHMARK(SP) ;
- call_pv("fred", G_DISCARD|G_NOARGS) ;
- fprintf(stderr, "back in Call_fred\n") ;
-
-When C<Call_fred> is executed it will print
-
- Trapped error: Fatal Error
-
-As control never returns to C<Call_fred>, the C<"back in Call_fred">
-string will not get printed.
-
-To work around this problem, you can either upgrade to Perl 5.002 or
-higher, or use the G_EVAL flag with I<call_*> as shown below
-
- void
- Call_fred()
- CODE:
- PUSHMARK(SP) ;
- call_pv("fred", G_EVAL|G_DISCARD|G_NOARGS) ;
- fprintf(stderr, "back in Call_fred\n") ;
-
-=back
-
-
-
-=head1 EXAMPLES
-
-Enough of the definition talk, let's have a few examples.
-
-Perl provides many macros to assist in accessing the Perl stack.
-Wherever possible, these macros should always be used when interfacing
-to Perl internals. We hope this should make the code less vulnerable
-to any changes made to Perl in the future.
-
-Another point worth noting is that in the first series of examples I
-have made use of only the I<call_pv> function. This has been done
-to keep the code simpler and ease you into the topic. Wherever
-possible, if the choice is between using I<call_pv> and
-I<call_sv>, you should always try to use I<call_sv>. See
-I<Using call_sv> for details.
-
-=head2 No Parameters, Nothing returned
-
-This first trivial example will call a Perl subroutine, I<PrintUID>, to
-print out the UID of the process.
-
- sub PrintUID
- {
- print "UID is $<\n" ;
- }
-
-and here is a C function to call it
-
- static void
- call_PrintUID()
- {
- dSP ;
-
- PUSHMARK(SP) ;
- call_pv("PrintUID", G_DISCARD|G_NOARGS) ;
- }
-
-Simple, eh.
-
-A few points to note about this example.
-
-=over 5
-
-=item 1.
-
-Ignore C<dSP> and C<PUSHMARK(SP)> for now. They will be discussed in
-the next example.
-
-=item 2.
-
-We aren't passing any parameters to I<PrintUID> so G_NOARGS can be
-specified.
-
-=item 3.
-
-We aren't interested in anything returned from I<PrintUID>, so
-G_DISCARD is specified. Even if I<PrintUID> was changed to
-return some value(s), having specified G_DISCARD will mean that they
-will be wiped by the time control returns from I<call_pv>.
-
-=item 4.
-
-As I<call_pv> is being used, the Perl subroutine is specified as a
-C string. In this case the subroutine name has been 'hard-wired' into the
-code.
-
-=item 5.
-
-Because we specified G_DISCARD, it is not necessary to check the value
-returned from I<call_pv>. It will always be 0.
-
-=back
-
-=head2 Passing Parameters
-
-Now let's make a slightly more complex example. This time we want to
-call a Perl subroutine, C<LeftString>, which will take 2 parameters--a
-string ($s) and an integer ($n). The subroutine will simply
-print the first $n characters of the string.
-
-So the Perl subroutine would look like this
-
- sub LeftString
- {
- my($s, $n) = @_ ;
- print substr($s, 0, $n), "\n" ;
- }
-
-The C function required to call I<LeftString> would look like this.
-
- static void
- call_LeftString(a, b)
- char * a ;
- int b ;
- {
- dSP ;
-
- ENTER ;
- SAVETMPS ;
-
- PUSHMARK(SP) ;
- XPUSHs(sv_2mortal(newSVpv(a, 0)));
- XPUSHs(sv_2mortal(newSViv(b)));
- PUTBACK ;
-
- call_pv("LeftString", G_DISCARD);
-
- FREETMPS ;
- LEAVE ;
- }
-
-Here are a few notes on the C function I<call_LeftString>.
-
-=over 5
-
-=item 1.
-
-Parameters are passed to the Perl subroutine using the Perl stack.
-This is the purpose of the code beginning with the line C<dSP> and
-ending with the line C<PUTBACK>. The C<dSP> declares a local copy
-of the stack pointer. This local copy should B<always> be accessed
-as C<SP>.
-
-=item 2.
-
-If you are going to put something onto the Perl stack, you need to know
-where to put it. This is the purpose of the macro C<dSP>--it declares
-and initializes a I<local> copy of the Perl stack pointer.
-
-All the other macros which will be used in this example require you to
-have used this macro.
-
-The exception to this rule is if you are calling a Perl subroutine
-directly from an XSUB function. In this case it is not necessary to
-use the C<dSP> macro explicitly--it will be declared for you
-automatically.
-
-=item 3.
-
-Any parameters to be pushed onto the stack should be bracketed by the
-C<PUSHMARK> and C<PUTBACK> macros. The purpose of these two macros, in
-this context, is to count the number of parameters you are
-pushing automatically. Then whenever Perl is creating the C<@_> array for the
-subroutine, it knows how big to make it.
-
-The C<PUSHMARK> macro tells Perl to make a mental note of the current
-stack pointer. Even if you aren't passing any parameters (like the
-example shown in the section I<No Parameters, Nothing returned>) you
-must still call the C<PUSHMARK> macro before you can call any of the
-I<call_*> functions--Perl still needs to know that there are no
-parameters.
-
-The C<PUTBACK> macro sets the global copy of the stack pointer to be
-the same as our local copy. If we didn't do this I<call_pv>
-wouldn't know where the two parameters we pushed were--remember that
-up to now all the stack pointer manipulation we have done is with our
-local copy, I<not> the global copy.
-
-=item 4.
-
-Next, we come to XPUSHs. This is where the parameters actually get
-pushed onto the stack. In this case we are pushing a string and an
-integer.
-
-See L<perlguts/"XSUBs and the Argument Stack"> for details
-on how the XPUSH macros work.
-
-=item 5.
-
-Because we created temporary values (by means of sv_2mortal() calls)
-we will have to tidy up the Perl stack and dispose of mortal SVs.
-
-This is the purpose of
-
- ENTER ;
- SAVETMPS ;
-
-at the start of the function, and
-
- FREETMPS ;
- LEAVE ;
-
-at the end. The C<ENTER>/C<SAVETMPS> pair creates a boundary for any
-temporaries we create. This means that the temporaries we get rid of
-will be limited to those which were created after these calls.
-
-The C<FREETMPS>/C<LEAVE> pair will get rid of any values returned by
-the Perl subroutine (see next example), plus it will also dump the
-mortal SVs we have created. Having C<ENTER>/C<SAVETMPS> at the
-beginning of the code makes sure that no other mortals are destroyed.
-
-Think of these macros as working a bit like using C<{> and C<}> in Perl
-to limit the scope of local variables.
-
-See the section I<Using Perl to dispose of temporaries> for details of
-an alternative to using these macros.
-
-=item 6.
-
-Finally, I<LeftString> can now be called via the I<call_pv> function.
-The only flag specified this time is G_DISCARD. Because we are passing
-2 parameters to the Perl subroutine this time, we have not specified
-G_NOARGS.
-
-=back
-
-=head2 Returning a Scalar
-
-Now for an example of dealing with the items returned from a Perl
-subroutine.
-
-Here is a Perl subroutine, I<Adder>, that takes 2 integer parameters
-and simply returns their sum.
-
- sub Adder
- {
- my($a, $b) = @_ ;
- $a + $b ;
- }
-
-Because we are now concerned with the return value from I<Adder>, the C
-function required to call it is now a bit more complex.
-
- static void
- call_Adder(a, b)
- int a ;
- int b ;
- {
- dSP ;
- int count ;
-
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
- XPUSHs(sv_2mortal(newSViv(a)));
- XPUSHs(sv_2mortal(newSViv(b)));
- PUTBACK ;
-
- count = call_pv("Adder", G_SCALAR);
-
- SPAGAIN ;
-
- if (count != 1)
- croak("Big trouble\n") ;
-
- printf ("The sum of %d and %d is %d\n", a, b, POPi) ;
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
- }
-
-Points to note this time are
-
-=over 5
-
-=item 1.
-
-The only flag specified this time was G_SCALAR. That means the C<@_>
-array will be created and that the value returned by I<Adder> will
-still exist after the call to I<call_pv>.
-
-=item 2.
-
-The purpose of the macro C<SPAGAIN> is to refresh the local copy of the
-stack pointer. This is necessary because it is possible that the memory
-allocated to the Perl stack has been reallocated whilst in the
-I<call_pv> call.
-
-If you are making use of the Perl stack pointer in your code you must
-always refresh the local copy using SPAGAIN whenever you make use
-of the I<call_*> functions or any other Perl internal function.
-
-=item 3.
-
-Although only a single value was expected to be returned from I<Adder>,
-it is still good practice to check the return code from I<call_pv>
-anyway.
-
-Expecting a single value is not quite the same as knowing that there
-will be one. If someone modified I<Adder> to return a list and we
-didn't check for that possibility and take appropriate action the Perl
-stack would end up in an inconsistent state. That is something you
-I<really> don't want to happen ever.
-
-=item 4.
-
-The C<POPi> macro is used here to pop the return value from the stack.
-In this case we wanted an integer, so C<POPi> was used.
-
-
-Here is the complete list of POP macros available, along with the types
-they return.
-
- POPs SV
- POPp pointer
- POPn double
- POPi integer
- POPl long
-
-=item 5.
-
-The final C<PUTBACK> is used to leave the Perl stack in a consistent
-state before exiting the function. This is necessary because when we
-popped the return value from the stack with C<POPi> it updated only our
-local copy of the stack pointer. Remember, C<PUTBACK> sets the global
-stack pointer to be the same as our local copy.
-
-=back
-
-
-=head2 Returning a list of values
-
-Now, let's extend the previous example to return both the sum of the
-parameters and the difference.
-
-Here is the Perl subroutine
-
- sub AddSubtract
- {
- my($a, $b) = @_ ;
- ($a+$b, $a-$b) ;
- }
-
-and this is the C function
-
- static void
- call_AddSubtract(a, b)
- int a ;
- int b ;
- {
- dSP ;
- int count ;
-
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
- XPUSHs(sv_2mortal(newSViv(a)));
- XPUSHs(sv_2mortal(newSViv(b)));
- PUTBACK ;
-
- count = call_pv("AddSubtract", G_ARRAY);
-
- SPAGAIN ;
-
- if (count != 2)
- croak("Big trouble\n") ;
-
- printf ("%d - %d = %d\n", a, b, POPi) ;
- printf ("%d + %d = %d\n", a, b, POPi) ;
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
- }
-
-If I<call_AddSubtract> is called like this
-
- call_AddSubtract(7, 4) ;
-
-then here is the output
-
- 7 - 4 = 3
- 7 + 4 = 11
-
-Notes
-
-=over 5
-
-=item 1.
-
-We wanted list context, so G_ARRAY was used.
-
-=item 2.
-
-Not surprisingly C<POPi> is used twice this time because we were
-retrieving 2 values from the stack. The important thing to note is that
-when using the C<POP*> macros they come off the stack in I<reverse>
-order.
-
-=back
-
-=head2 Returning a list in a scalar context
-
-Say the Perl subroutine in the previous section was called in a scalar
-context, like this
-
- static void
- call_AddSubScalar(a, b)
- int a ;
- int b ;
- {
- dSP ;
- int count ;
- int i ;
-
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
- XPUSHs(sv_2mortal(newSViv(a)));
- XPUSHs(sv_2mortal(newSViv(b)));
- PUTBACK ;
-
- count = call_pv("AddSubtract", G_SCALAR);
-
- SPAGAIN ;
-
- printf ("Items Returned = %d\n", count) ;
-
- for (i = 1 ; i <= count ; ++i)
- printf ("Value %d = %d\n", i, POPi) ;
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
- }
-
-The other modification made is that I<call_AddSubScalar> will print the
-number of items returned from the Perl subroutine and their value (for
-simplicity it assumes that they are integer). So if
-I<call_AddSubScalar> is called
-
- call_AddSubScalar(7, 4) ;
-
-then the output will be
-
- Items Returned = 1
- Value 1 = 3
-
-In this case the main point to note is that only the last item in the
-list is returned from the subroutine, I<AddSubtract> actually made it back to
-I<call_AddSubScalar>.
-
-
-=head2 Returning Data from Perl via the parameter list
-
-It is also possible to return values directly via the parameter list -
-whether it is actually desirable to do it is another matter entirely.
-
-The Perl subroutine, I<Inc>, below takes 2 parameters and increments
-each directly.
-
- sub Inc
- {
- ++ $_[0] ;
- ++ $_[1] ;
- }
-
-and here is a C function to call it.
-
- static void
- call_Inc(a, b)
- int a ;
- int b ;
- {
- dSP ;
- int count ;
- SV * sva ;
- SV * svb ;
-
- ENTER ;
- SAVETMPS;
-
- sva = sv_2mortal(newSViv(a)) ;
- svb = sv_2mortal(newSViv(b)) ;
-
- PUSHMARK(SP) ;
- XPUSHs(sva);
- XPUSHs(svb);
- PUTBACK ;
-
- count = call_pv("Inc", G_DISCARD);
-
- if (count != 0)
- croak ("call_Inc: expected 0 values from 'Inc', got %d\n",
- count) ;
-
- printf ("%d + 1 = %d\n", a, SvIV(sva)) ;
- printf ("%d + 1 = %d\n", b, SvIV(svb)) ;
-
- FREETMPS ;
- LEAVE ;
- }
-
-To be able to access the two parameters that were pushed onto the stack
-after they return from I<call_pv> it is necessary to make a note
-of their addresses--thus the two variables C<sva> and C<svb>.
-
-The reason this is necessary is that the area of the Perl stack which
-held them will very likely have been overwritten by something else by
-the time control returns from I<call_pv>.
-
-
-
-
-=head2 Using G_EVAL
-
-Now an example using G_EVAL. Below is a Perl subroutine which computes
-the difference of its 2 parameters. If this would result in a negative
-result, the subroutine calls I<die>.
-
- sub Subtract
- {
- my ($a, $b) = @_ ;
-
- die "death can be fatal\n" if $a < $b ;
-
- $a - $b ;
- }
-
-and some C to call it
-
- static void
- call_Subtract(a, b)
- int a ;
- int b ;
- {
- dSP ;
- int count ;
-
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
- XPUSHs(sv_2mortal(newSViv(a)));
- XPUSHs(sv_2mortal(newSViv(b)));
- PUTBACK ;
-
- count = call_pv("Subtract", G_EVAL|G_SCALAR);
-
- SPAGAIN ;
-
- /* Check the eval first */
- if (SvTRUE(ERRSV))
- {
- STRLEN n_a;
- printf ("Uh oh - %s\n", SvPV(ERRSV, n_a)) ;
- POPs ;
- }
- else
- {
- if (count != 1)
- croak("call_Subtract: wanted 1 value from 'Subtract', got %d\n",
- count) ;
-
- printf ("%d - %d = %d\n", a, b, POPi) ;
- }
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
- }
-
-If I<call_Subtract> is called thus
-
- call_Subtract(4, 5)
-
-the following will be printed
-
- Uh oh - death can be fatal
-
-Notes
-
-=over 5
-
-=item 1.
-
-We want to be able to catch the I<die> so we have used the G_EVAL
-flag. Not specifying this flag would mean that the program would
-terminate immediately at the I<die> statement in the subroutine
-I<Subtract>.
-
-=item 2.
-
-The code
-
- if (SvTRUE(ERRSV))
- {
- STRLEN n_a;
- printf ("Uh oh - %s\n", SvPV(ERRSV, n_a)) ;
- POPs ;
- }
-
-is the direct equivalent of this bit of Perl
-
- print "Uh oh - $@\n" if $@ ;
-
-C<PL_errgv> is a perl global of type C<GV *> that points to the
-symbol table entry containing the error. C<ERRSV> therefore
-refers to the C equivalent of C<$@>.
-
-=item 3.
-
-Note that the stack is popped using C<POPs> in the block where
-C<SvTRUE(ERRSV)> is true. This is necessary because whenever a
-I<call_*> function invoked with G_EVAL|G_SCALAR returns an error,
-the top of the stack holds the value I<undef>. Because we want the
-program to continue after detecting this error, it is essential that
-the stack is tidied up by removing the I<undef>.
-
-=back
-
-
-=head2 Using G_KEEPERR
-
-Consider this rather facetious example, where we have used an XS
-version of the call_Subtract example above inside a destructor:
-
- package Foo;
- sub new { bless {}, $_[0] }
- sub Subtract {
- my($a,$b) = @_;
- die "death can be fatal" if $a < $b ;
- $a - $b;
- }
- sub DESTROY { call_Subtract(5, 4); }
- sub foo { die "foo dies"; }
-
- package main;
- eval { Foo->new->foo };
- print "Saw: $@" if $@; # should be, but isn't
-
-This example will fail to recognize that an error occurred inside the
-C<eval {}>. Here's why: the call_Subtract code got executed while perl
-was cleaning up temporaries when exiting the eval block, and because
-call_Subtract is implemented with I<call_pv> using the G_EVAL
-flag, it promptly reset C<$@>. This results in the failure of the
-outermost test for C<$@>, and thereby the failure of the error trap.
-
-Appending the G_KEEPERR flag, so that the I<call_pv> call in
-call_Subtract reads:
-
- count = call_pv("Subtract", G_EVAL|G_SCALAR|G_KEEPERR);
-
-will preserve the error and restore reliable error handling.
-
-=head2 Using call_sv
-
-In all the previous examples I have 'hard-wired' the name of the Perl
-subroutine to be called from C. Most of the time though, it is more
-convenient to be able to specify the name of the Perl subroutine from
-within the Perl script.
-
-Consider the Perl code below
-
- sub fred
- {
- print "Hello there\n" ;
- }
-
- CallSubPV("fred") ;
-
-Here is a snippet of XSUB which defines I<CallSubPV>.
-
- void
- CallSubPV(name)
- char * name
- CODE:
- PUSHMARK(SP) ;
- call_pv(name, G_DISCARD|G_NOARGS) ;
-
-That is fine as far as it goes. The thing is, the Perl subroutine
-can be specified as only a string. For Perl 4 this was adequate,
-but Perl 5 allows references to subroutines and anonymous subroutines.
-This is where I<call_sv> is useful.
-
-The code below for I<CallSubSV> is identical to I<CallSubPV> except
-that the C<name> parameter is now defined as an SV* and we use
-I<call_sv> instead of I<call_pv>.
-
- void
- CallSubSV(name)
- SV * name
- CODE:
- PUSHMARK(SP) ;
- call_sv(name, G_DISCARD|G_NOARGS) ;
-
-Because we are using an SV to call I<fred> the following can all be used
-
- CallSubSV("fred") ;
- CallSubSV(\&fred) ;
- $ref = \&fred ;
- CallSubSV($ref) ;
- CallSubSV( sub { print "Hello there\n" } ) ;
-
-As you can see, I<call_sv> gives you much greater flexibility in
-how you can specify the Perl subroutine.
-
-You should note that if it is necessary to store the SV (C<name> in the
-example above) which corresponds to the Perl subroutine so that it can
-be used later in the program, it not enough just to store a copy of the
-pointer to the SV. Say the code above had been like this
-
- static SV * rememberSub ;
-
- void
- SaveSub1(name)
- SV * name
- CODE:
- rememberSub = name ;
-
- void
- CallSavedSub1()
- CODE:
- PUSHMARK(SP) ;
- call_sv(rememberSub, G_DISCARD|G_NOARGS) ;
-
-The reason this is wrong is that by the time you come to use the
-pointer C<rememberSub> in C<CallSavedSub1>, it may or may not still refer
-to the Perl subroutine that was recorded in C<SaveSub1>. This is
-particularly true for these cases
-
- SaveSub1(\&fred) ;
- CallSavedSub1() ;
-
- SaveSub1( sub { print "Hello there\n" } ) ;
- CallSavedSub1() ;
-
-By the time each of the C<SaveSub1> statements above have been executed,
-the SV*s which corresponded to the parameters will no longer exist.
-Expect an error message from Perl of the form
-
- Can't use an undefined value as a subroutine reference at ...
-
-for each of the C<CallSavedSub1> lines.
-
-Similarly, with this code
-
- $ref = \&fred ;
- SaveSub1($ref) ;
- $ref = 47 ;
- CallSavedSub1() ;
-
-you can expect one of these messages (which you actually get is dependent on
-the version of Perl you are using)
-
- Not a CODE reference at ...
- Undefined subroutine &main::47 called ...
-
-The variable $ref may have referred to the subroutine C<fred>
-whenever the call to C<SaveSub1> was made but by the time
-C<CallSavedSub1> gets called it now holds the number C<47>. Because we
-saved only a pointer to the original SV in C<SaveSub1>, any changes to
-$ref will be tracked by the pointer C<rememberSub>. This means that
-whenever C<CallSavedSub1> gets called, it will attempt to execute the
-code which is referenced by the SV* C<rememberSub>. In this case
-though, it now refers to the integer C<47>, so expect Perl to complain
-loudly.
-
-A similar but more subtle problem is illustrated with this code
-
- $ref = \&fred ;
- SaveSub1($ref) ;
- $ref = \&joe ;
- CallSavedSub1() ;
-
-This time whenever C<CallSavedSub1> get called it will execute the Perl
-subroutine C<joe> (assuming it exists) rather than C<fred> as was
-originally requested in the call to C<SaveSub1>.
-
-To get around these problems it is necessary to take a full copy of the
-SV. The code below shows C<SaveSub2> modified to do that
-
- static SV * keepSub = (SV*)NULL ;
-
- void
- SaveSub2(name)
- SV * name
- CODE:
- /* Take a copy of the callback */
- if (keepSub == (SV*)NULL)
- /* First time, so create a new SV */
- keepSub = newSVsv(name) ;
- else
- /* Been here before, so overwrite */
- SvSetSV(keepSub, name) ;
-
- void
- CallSavedSub2()
- CODE:
- PUSHMARK(SP) ;
- call_sv(keepSub, G_DISCARD|G_NOARGS) ;
-
-To avoid creating a new SV every time C<SaveSub2> is called,
-the function first checks to see if it has been called before. If not,
-then space for a new SV is allocated and the reference to the Perl
-subroutine, C<name> is copied to the variable C<keepSub> in one
-operation using C<newSVsv>. Thereafter, whenever C<SaveSub2> is called
-the existing SV, C<keepSub>, is overwritten with the new value using
-C<SvSetSV>.
-
-=head2 Using call_argv
-
-Here is a Perl subroutine which prints whatever parameters are passed
-to it.
-
- sub PrintList
- {
- my(@list) = @_ ;
-
- foreach (@list) { print "$_\n" }
- }
-
-and here is an example of I<call_argv> which will call
-I<PrintList>.
-
- static char * words[] = {"alpha", "beta", "gamma", "delta", NULL} ;
-
- static void
- call_PrintList()
- {
- dSP ;
-
- call_argv("PrintList", G_DISCARD, words) ;
- }
-
-Note that it is not necessary to call C<PUSHMARK> in this instance.
-This is because I<call_argv> will do it for you.
-
-=head2 Using call_method
-
-Consider the following Perl code
-
- {
- package Mine ;
-
- sub new
- {
- my($type) = shift ;
- bless [@_]
- }
-
- sub Display
- {
- my ($self, $index) = @_ ;
- print "$index: $$self[$index]\n" ;
- }
-
- sub PrintID
- {
- my($class) = @_ ;
- print "This is Class $class version 1.0\n" ;
- }
- }
-
-It implements just a very simple class to manage an array. Apart from
-the constructor, C<new>, it declares methods, one static and one
-virtual. The static method, C<PrintID>, prints out simply the class
-name and a version number. The virtual method, C<Display>, prints out a
-single element of the array. Here is an all Perl example of using it.
-
- $a = new Mine ('red', 'green', 'blue') ;
- $a->Display(1) ;
- PrintID Mine;
-
-will print
-
- 1: green
- This is Class Mine version 1.0
-
-Calling a Perl method from C is fairly straightforward. The following
-things are required
-
-=over 5
-
-=item *
-
-a reference to the object for a virtual method or the name of the class
-for a static method.
-
-=item *
-
-the name of the method.
-
-=item *
-
-any other parameters specific to the method.
-
-=back
-
-Here is a simple XSUB which illustrates the mechanics of calling both
-the C<PrintID> and C<Display> methods from C.
-
- void
- call_Method(ref, method, index)
- SV * ref
- char * method
- int index
- CODE:
- PUSHMARK(SP);
- XPUSHs(ref);
- XPUSHs(sv_2mortal(newSViv(index))) ;
- PUTBACK;
-
- call_method(method, G_DISCARD) ;
-
- void
- call_PrintID(class, method)
- char * class
- char * method
- CODE:
- PUSHMARK(SP);
- XPUSHs(sv_2mortal(newSVpv(class, 0))) ;
- PUTBACK;
-
- call_method(method, G_DISCARD) ;
-
-
-So the methods C<PrintID> and C<Display> can be invoked like this
-
- $a = new Mine ('red', 'green', 'blue') ;
- call_Method($a, 'Display', 1) ;
- call_PrintID('Mine', 'PrintID') ;
-
-The only thing to note is that in both the static and virtual methods,
-the method name is not passed via the stack--it is used as the first
-parameter to I<call_method>.
-
-=head2 Using GIMME_V
-
-Here is a trivial XSUB which prints the context in which it is
-currently executing.
-
- void
- PrintContext()
- CODE:
- I32 gimme = GIMME_V;
- if (gimme == G_VOID)
- printf ("Context is Void\n") ;
- else if (gimme == G_SCALAR)
- printf ("Context is Scalar\n") ;
- else
- printf ("Context is Array\n") ;
-
-and here is some Perl to test it
-
- PrintContext ;
- $a = PrintContext ;
- @a = PrintContext ;
-
-The output from that will be
-
- Context is Void
- Context is Scalar
- Context is Array
-
-=head2 Using Perl to dispose of temporaries
-
-In the examples given to date, any temporaries created in the callback
-(i.e., parameters passed on the stack to the I<call_*> function or
-values returned via the stack) have been freed by one of these methods
-
-=over 5
-
-=item *
-
-specifying the G_DISCARD flag with I<call_*>.
-
-=item *
-
-explicitly disposed of using the C<ENTER>/C<SAVETMPS> -
-C<FREETMPS>/C<LEAVE> pairing.
-
-=back
-
-There is another method which can be used, namely letting Perl do it
-for you automatically whenever it regains control after the callback
-has terminated. This is done by simply not using the
-
- ENTER ;
- SAVETMPS ;
- ...
- FREETMPS ;
- LEAVE ;
-
-sequence in the callback (and not, of course, specifying the G_DISCARD
-flag).
-
-If you are going to use this method you have to be aware of a possible
-memory leak which can arise under very specific circumstances. To
-explain these circumstances you need to know a bit about the flow of
-control between Perl and the callback routine.
-
-The examples given at the start of the document (an error handler and
-an event driven program) are typical of the two main sorts of flow
-control that you are likely to encounter with callbacks. There is a
-very important distinction between them, so pay attention.
-
-In the first example, an error handler, the flow of control could be as
-follows. You have created an interface to an external library.
-Control can reach the external library like this
-
- perl --> XSUB --> external library
-
-Whilst control is in the library, an error condition occurs. You have
-previously set up a Perl callback to handle this situation, so it will
-get executed. Once the callback has finished, control will drop back to
-Perl again. Here is what the flow of control will be like in that
-situation
-
- perl --> XSUB --> external library
- ...
- error occurs
- ...
- external library --> call_* --> perl
- |
- perl <-- XSUB <-- external library <-- call_* <----+
-
-After processing of the error using I<call_*> is completed,
-control reverts back to Perl more or less immediately.
-
-In the diagram, the further right you go the more deeply nested the
-scope is. It is only when control is back with perl on the extreme
-left of the diagram that you will have dropped back to the enclosing
-scope and any temporaries you have left hanging around will be freed.
-
-In the second example, an event driven program, the flow of control
-will be more like this
-
- perl --> XSUB --> event handler
- ...
- event handler --> call_* --> perl
- |
- event handler <-- call_* <----+
- ...
- event handler --> call_* --> perl
- |
- event handler <-- call_* <----+
- ...
- event handler --> call_* --> perl
- |
- event handler <-- call_* <----+
-
-In this case the flow of control can consist of only the repeated
-sequence
-
- event handler --> call_* --> perl
-
-for practically the complete duration of the program. This means that
-control may I<never> drop back to the surrounding scope in Perl at the
-extreme left.
-
-So what is the big problem? Well, if you are expecting Perl to tidy up
-those temporaries for you, you might be in for a long wait. For Perl
-to dispose of your temporaries, control must drop back to the
-enclosing scope at some stage. In the event driven scenario that may
-never happen. This means that as time goes on, your program will
-create more and more temporaries, none of which will ever be freed. As
-each of these temporaries consumes some memory your program will
-eventually consume all the available memory in your system--kapow!
-
-So here is the bottom line--if you are sure that control will revert
-back to the enclosing Perl scope fairly quickly after the end of your
-callback, then it isn't absolutely necessary to dispose explicitly of
-any temporaries you may have created. Mind you, if you are at all
-uncertain about what to do, it doesn't do any harm to tidy up anyway.
-
-
-=head2 Strategies for storing Callback Context Information
-
-
-Potentially one of the trickiest problems to overcome when designing a
-callback interface can be figuring out how to store the mapping between
-the C callback function and the Perl equivalent.
-
-To help understand why this can be a real problem first consider how a
-callback is set up in an all C environment. Typically a C API will
-provide a function to register a callback. This will expect a pointer
-to a function as one of its parameters. Below is a call to a
-hypothetical function C<register_fatal> which registers the C function
-to get called when a fatal error occurs.
-
- register_fatal(cb1) ;
-
-The single parameter C<cb1> is a pointer to a function, so you must
-have defined C<cb1> in your code, say something like this
-
- static void
- cb1()
- {
- printf ("Fatal Error\n") ;
- exit(1) ;
- }
-
-Now change that to call a Perl subroutine instead
-
- static SV * callback = (SV*)NULL;
-
- static void
- cb1()
- {
- dSP ;
-
- PUSHMARK(SP) ;
-
- /* Call the Perl sub to process the callback */
- call_sv(callback, G_DISCARD) ;
- }
-
-
- void
- register_fatal(fn)
- SV * fn
- CODE:
- /* Remember the Perl sub */
- if (callback == (SV*)NULL)
- callback = newSVsv(fn) ;
- else
- SvSetSV(callback, fn) ;
-
- /* register the callback with the external library */
- register_fatal(cb1) ;
-
-where the Perl equivalent of C<register_fatal> and the callback it
-registers, C<pcb1>, might look like this
-
- # Register the sub pcb1
- register_fatal(\&pcb1) ;
-
- sub pcb1
- {
- die "I'm dying...\n" ;
- }
-
-The mapping between the C callback and the Perl equivalent is stored in
-the global variable C<callback>.
-
-This will be adequate if you ever need to have only one callback
-registered at any time. An example could be an error handler like the
-code sketched out above. Remember though, repeated calls to
-C<register_fatal> will replace the previously registered callback
-function with the new one.
-
-Say for example you want to interface to a library which allows asynchronous
-file i/o. In this case you may be able to register a callback whenever
-a read operation has completed. To be of any use we want to be able to
-call separate Perl subroutines for each file that is opened. As it
-stands, the error handler example above would not be adequate as it
-allows only a single callback to be defined at any time. What we
-require is a means of storing the mapping between the opened file and
-the Perl subroutine we want to be called for that file.
-
-Say the i/o library has a function C<asynch_read> which associates a C
-function C<ProcessRead> with a file handle C<fh>--this assumes that it
-has also provided some routine to open the file and so obtain the file
-handle.
-
- asynch_read(fh, ProcessRead)
-
-This may expect the C I<ProcessRead> function of this form
-
- void
- ProcessRead(fh, buffer)
- int fh ;
- char * buffer ;
- {
- ...
- }
-
-To provide a Perl interface to this library we need to be able to map
-between the C<fh> parameter and the Perl subroutine we want called. A
-hash is a convenient mechanism for storing this mapping. The code
-below shows a possible implementation
-
- static HV * Mapping = (HV*)NULL ;
-
- void
- asynch_read(fh, callback)
- int fh
- SV * callback
- CODE:
- /* If the hash doesn't already exist, create it */
- if (Mapping == (HV*)NULL)
- Mapping = newHV() ;
-
- /* Save the fh -> callback mapping */
- hv_store(Mapping, (char*)&fh, sizeof(fh), newSVsv(callback), 0) ;
-
- /* Register with the C Library */
- asynch_read(fh, asynch_read_if) ;
-
-and C<asynch_read_if> could look like this
-
- static void
- asynch_read_if(fh, buffer)
- int fh ;
- char * buffer ;
- {
- dSP ;
- SV ** sv ;
-
- /* Get the callback associated with fh */
- sv = hv_fetch(Mapping, (char*)&fh , sizeof(fh), FALSE) ;
- if (sv == (SV**)NULL)
- croak("Internal error...\n") ;
-
- PUSHMARK(SP) ;
- XPUSHs(sv_2mortal(newSViv(fh))) ;
- XPUSHs(sv_2mortal(newSVpv(buffer, 0))) ;
- PUTBACK ;
-
- /* Call the Perl sub */
- call_sv(*sv, G_DISCARD) ;
- }
-
-For completeness, here is C<asynch_close>. This shows how to remove
-the entry from the hash C<Mapping>.
-
- void
- asynch_close(fh)
- int fh
- CODE:
- /* Remove the entry from the hash */
- (void) hv_delete(Mapping, (char*)&fh, sizeof(fh), G_DISCARD) ;
-
- /* Now call the real asynch_close */
- asynch_close(fh) ;
-
-So the Perl interface would look like this
-
- sub callback1
- {
- my($handle, $buffer) = @_ ;
- }
-
- # Register the Perl callback
- asynch_read($fh, \&callback1) ;
-
- asynch_close($fh) ;
-
-The mapping between the C callback and Perl is stored in the global
-hash C<Mapping> this time. Using a hash has the distinct advantage that
-it allows an unlimited number of callbacks to be registered.
-
-What if the interface provided by the C callback doesn't contain a
-parameter which allows the file handle to Perl subroutine mapping? Say
-in the asynchronous i/o package, the callback function gets passed only
-the C<buffer> parameter like this
-
- void
- ProcessRead(buffer)
- char * buffer ;
- {
- ...
- }
-
-Without the file handle there is no straightforward way to map from the
-C callback to the Perl subroutine.
-
-In this case a possible way around this problem is to predefine a
-series of C functions to act as the interface to Perl, thus
-
- #define MAX_CB 3
- #define NULL_HANDLE -1
- typedef void (*FnMap)() ;
-
- struct MapStruct {
- FnMap Function ;
- SV * PerlSub ;
- int Handle ;
- } ;
-
- static void fn1() ;
- static void fn2() ;
- static void fn3() ;
-
- static struct MapStruct Map [MAX_CB] =
- {
- { fn1, NULL, NULL_HANDLE },
- { fn2, NULL, NULL_HANDLE },
- { fn3, NULL, NULL_HANDLE }
- } ;
-
- static void
- Pcb(index, buffer)
- int index ;
- char * buffer ;
- {
- dSP ;
-
- PUSHMARK(SP) ;
- XPUSHs(sv_2mortal(newSVpv(buffer, 0))) ;
- PUTBACK ;
-
- /* Call the Perl sub */
- call_sv(Map[index].PerlSub, G_DISCARD) ;
- }
-
- static void
- fn1(buffer)
- char * buffer ;
- {
- Pcb(0, buffer) ;
- }
-
- static void
- fn2(buffer)
- char * buffer ;
- {
- Pcb(1, buffer) ;
- }
-
- static void
- fn3(buffer)
- char * buffer ;
- {
- Pcb(2, buffer) ;
- }
-
- void
- array_asynch_read(fh, callback)
- int fh
- SV * callback
- CODE:
- int index ;
- int null_index = MAX_CB ;
-
- /* Find the same handle or an empty entry */
- for (index = 0 ; index < MAX_CB ; ++index)
- {
- if (Map[index].Handle == fh)
- break ;
-
- if (Map[index].Handle == NULL_HANDLE)
- null_index = index ;
- }
-
- if (index == MAX_CB && null_index == MAX_CB)
- croak ("Too many callback functions registered\n") ;
-
- if (index == MAX_CB)
- index = null_index ;
-
- /* Save the file handle */
- Map[index].Handle = fh ;
-
- /* Remember the Perl sub */
- if (Map[index].PerlSub == (SV*)NULL)
- Map[index].PerlSub = newSVsv(callback) ;
- else
- SvSetSV(Map[index].PerlSub, callback) ;
-
- asynch_read(fh, Map[index].Function) ;
-
- void
- array_asynch_close(fh)
- int fh
- CODE:
- int index ;
-
- /* Find the file handle */
- for (index = 0; index < MAX_CB ; ++ index)
- if (Map[index].Handle == fh)
- break ;
-
- if (index == MAX_CB)
- croak ("could not close fh %d\n", fh) ;
-
- Map[index].Handle = NULL_HANDLE ;
- SvREFCNT_dec(Map[index].PerlSub) ;
- Map[index].PerlSub = (SV*)NULL ;
-
- asynch_close(fh) ;
-
-In this case the functions C<fn1>, C<fn2>, and C<fn3> are used to
-remember the Perl subroutine to be called. Each of the functions holds
-a separate hard-wired index which is used in the function C<Pcb> to
-access the C<Map> array and actually call the Perl subroutine.
-
-There are some obvious disadvantages with this technique.
-
-Firstly, the code is considerably more complex than with the previous
-example.
-
-Secondly, there is a hard-wired limit (in this case 3) to the number of
-callbacks that can exist simultaneously. The only way to increase the
-limit is by modifying the code to add more functions and then
-recompiling. None the less, as long as the number of functions is
-chosen with some care, it is still a workable solution and in some
-cases is the only one available.
-
-To summarize, here are a number of possible methods for you to consider
-for storing the mapping between C and the Perl callback
-
-=over 5
-
-=item 1. Ignore the problem - Allow only 1 callback
-
-For a lot of situations, like interfacing to an error handler, this may
-be a perfectly adequate solution.
-
-=item 2. Create a sequence of callbacks - hard wired limit
-
-If it is impossible to tell from the parameters passed back from the C
-callback what the context is, then you may need to create a sequence of C
-callback interface functions, and store pointers to each in an array.
-
-=item 3. Use a parameter to map to the Perl callback
-
-A hash is an ideal mechanism to store the mapping between C and Perl.
-
-=back
-
-
-=head2 Alternate Stack Manipulation
-
-
-Although I have made use of only the C<POP*> macros to access values
-returned from Perl subroutines, it is also possible to bypass these
-macros and read the stack using the C<ST> macro (See L<perlxs> for a
-full description of the C<ST> macro).
-
-Most of the time the C<POP*> macros should be adequate, the main
-problem with them is that they force you to process the returned values
-in sequence. This may not be the most suitable way to process the
-values in some cases. What we want is to be able to access the stack in
-a random order. The C<ST> macro as used when coding an XSUB is ideal
-for this purpose.
-
-The code below is the example given in the section I<Returning a list
-of values> recoded to use C<ST> instead of C<POP*>.
-
- static void
- call_AddSubtract2(a, b)
- int a ;
- int b ;
- {
- dSP ;
- I32 ax ;
- int count ;
-
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
- XPUSHs(sv_2mortal(newSViv(a)));
- XPUSHs(sv_2mortal(newSViv(b)));
- PUTBACK ;
-
- count = call_pv("AddSubtract", G_ARRAY);
-
- SPAGAIN ;
- SP -= count ;
- ax = (SP - PL_stack_base) + 1 ;
-
- if (count != 2)
- croak("Big trouble\n") ;
-
- printf ("%d + %d = %d\n", a, b, SvIV(ST(0))) ;
- printf ("%d - %d = %d\n", a, b, SvIV(ST(1))) ;
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
- }
-
-Notes
-
-=over 5
-
-=item 1.
-
-Notice that it was necessary to define the variable C<ax>. This is
-because the C<ST> macro expects it to exist. If we were in an XSUB it
-would not be necessary to define C<ax> as it is already defined for
-you.
-
-=item 2.
-
-The code
-
- SPAGAIN ;
- SP -= count ;
- ax = (SP - PL_stack_base) + 1 ;
-
-sets the stack up so that we can use the C<ST> macro.
-
-=item 3.
-
-Unlike the original coding of this example, the returned
-values are not accessed in reverse order. So C<ST(0)> refers to the
-first value returned by the Perl subroutine and C<ST(count-1)>
-refers to the last.
-
-=back
-
-=head2 Creating and calling an anonymous subroutine in C
-
-As we've already shown, C<call_sv> can be used to invoke an
-anonymous subroutine. However, our example showed a Perl script
-invoking an XSUB to perform this operation. Let's see how it can be
-done inside our C code:
-
- ...
-
- SV *cvrv = eval_pv("sub { print 'You will not find me cluttering any namespace!' }", TRUE);
-
- ...
-
- call_sv(cvrv, G_VOID|G_NOARGS);
-
-C<eval_pv> is used to compile the anonymous subroutine, which
-will be the return value as well (read more about C<eval_pv> in
-L<perlapi/eval_pv>). Once this code reference is in hand, it
-can be mixed in with all the previous examples we've shown.
-
-=head1 SEE ALSO
-
-L<perlxs>, L<perlguts>, L<perlembed>
-
-=head1 AUTHOR
-
-Paul Marquess
-
-Special thanks to the following people who assisted in the creation of
-the document.
-
-Jeff Okamoto, Tim Bunce, Nick Gianniotis, Steve Kelem, Gurusamy Sarathy
-and Larry Wall.
-
-=head1 DATE
-
-Version 1.3, 14th Apr 1997
diff --git a/contrib/perl5/pod/perlclib.pod b/contrib/perl5/pod/perlclib.pod
deleted file mode 100644
index a0f4a80..0000000
--- a/contrib/perl5/pod/perlclib.pod
+++ /dev/null
@@ -1,197 +0,0 @@
-=head1 NAME
-
-perlclib - Internal replacements for standard C library functions
-
-=head1 DESCRIPTION
-
-One thing Perl porters should note is that F<perl> doesn't tend to use that
-much of the C standard library internally; you'll see very little use of,
-for example, the F<ctype.h> functions in there. This is because Perl
-tends to reimplement or abstract standard library functions, so that we
-know exactly how they're going to operate.
-
-This is a reference card for people who are familiar with the C library
-and who want to do things the Perl way; to tell them which functions
-they ought to use instead of the more normal C functions.
-
-=head2 Conventions
-
-In the following tables:
-
-=over 3
-
-=item C<t>
-
-is a type.
-
-=item C<p>
-
-is a pointer.
-
-=item C<n>
-
-is a number.
-
-=item C<s>
-
-is a string.
-
-=back
-
-C<sv>, C<av>, C<hv>, etc. represent variables of their respective types.
-
-=head2 File Operations
-
-Instead of the F<stdio.h> functions, you should use the Perl abstraction
-layer. Instead of C<FILE*> types, you need to be handling C<PerlIO*>
-types. Don't forget that with the new PerlIO layered I/O abstraction
-C<FILE*> types may not even be available. See also the C<perlapio>
-documentation for more information about the following functions:
-
- Instead Of: Use:
-
- stdin PerlIO_stdin()
- stdout PerlIO_stdout()
- stderr PerlIO_stderr()
-
- fopen(fn, mode) PerlIO_open(fn, mode)
- freopen(fn, mode, stream) PerlIO_reopen(fn, mode, perlio) (Deprecated)
- fflush(stream) PerlIO_flush(perlio)
- fclose(stream) PerlIO_close(perlio)
-
-=head2 File Input and Output
-
- Instead Of: Use:
-
- fprintf(stream, fmt, ...) PerlIO_printf(perlio, fmt, ...)
-
- [f]getc(stream) PerlIO_getc(perlio)
- [f]putc(stream, n) PerlIO_putc(perlio, n)
- ungetc(n, stream) PerlIO_ungetc(perlio, n)
-
-Note that the PerlIO equivalents of C<fread> and C<fwrite> are slightly
-different from their C library counterparts:
-
- fread(p, size, n, stream) PerlIO_read(perlio, buf, numbytes)
- fwrite(p, size, n, stream) PerlIO_write(perlio, buf, numbytes)
-
- fputs(s, stream) PerlIO_puts(perlio, s)
-
-There is no equivalent to C<fgets>; one should use C<sv_gets> instead:
-
- fgets(s, n, stream) sv_gets(sv, perlio, append)
-
-=head2 File Positioning
-
- Instead Of: Use:
-
- feof(stream) PerlIO_eof(perlio)
- fseek(stream, n, whence) PerlIO_seek(perlio, n, whence)
- rewind(stream) PerlIO_rewind(perlio)
-
- fgetpos(stream, p) PerlIO_getpos(perlio, sv)
- fsetpos(stream, p) PerlIO_setpos(perlio, sv)
-
- ferror(stream) PerlIO_error(perlio)
- clearerr(stream) PerlIO_clearerr(perlio)
-
-=head2 Memory Management and String Handling
-
- Instead Of: Use:
-
- t* p = malloc(n) New(id, p, n, t)
- t* p = calloc(n, s) Newz(id, p, n, t)
- p = realloc(p, n) Renew(p, n, t)
- memcpy(dst, src, n) Copy(src, dst, n, t)
- memmove(dst, src, n) Move(src, dst, n, t)
- memcpy/*(struct foo *) StructCopy(src, dst, t)
- free(p) Safefree(p)
-
- strdup(p) savepv(p)
- strndup(p, n) savepvn(p, n) (Hey, strndup doesn't exist!)
-
- strstr(big, little) instr(big, little)
- strcmp(s1, s2) strLE(s1, s2) / strEQ(s1, s2) / strGT(s1,s2)
- strncmp(s1, s2, n) strnNE(s1, s2, n) / strnEQ(s1, s2, n)
-
-Notice the different order of arguments to C<Copy> and C<Move> than used
-in C<memcpy> and C<memmove>.
-
-Most of the time, though, you'll want to be dealing with SVs internally
-instead of raw C<char *> strings:
-
- strlen(s) sv_len(sv)
- strcpy(dt, src) sv_setpv(sv, s)
- strncpy(dt, src, n) sv_setpvn(sv, s, n)
- strcat(dt, src) sv_catpv(sv, s)
- strncat(dt, src) sv_catpvn(sv, s)
- sprintf(s, fmt, ...) sv_setpvf(sv, fmt, ...)
-
-Note also the existence of C<sv_catpvf> and C<sv_catpvfn>, combining
-concatenation with formatting.
-
-=head2 Character Class Tests
-
-There are two types of character class tests that Perl implements: one
-type deals in C<char>s and are thus B<not> Unicode aware (and hence
-deprecated unless you B<know> you should use them) and the other type
-deal in C<UV>s and know about Unicode properties. In the following
-table, C<c> is a C<char>, and C<u> is a Unicode codepoint.
-
- Instead Of: Use: But better use:
-
- isalnum(c) isALNUM(c) isALNUM_uni(u)
- isalpha(c) isALPHA(c) isALPHA_uni(u)
- iscntrl(c) isCNTRL(c) isCNTRL_uni(u)
- isdigit(c) isDIGIT(c) isDIGIT_uni(u)
- isgraph(c) isGRAPH(c) isGRAPH_uni(u)
- islower(c) isLOWER(c) isLOWER_uni(u)
- isprint(c) isPRINT(c) isPRINT_uni(u)
- ispunct(c) isPUNCT(c) isPUNCT_uni(u)
- isspace(c) isSPACE(c) isSPACE_uni(u)
- isupper(c) isUPPER(c) isUPPER_uni(u)
- isxdigit(c) isXDIGIT(c) isXDIGIT_uni(u)
-
- tolower(c) toLOWER(c) toLOWER_uni(u)
- toupper(c) toUPPER(c) toUPPER_uni(u)
-
-=head2 F<stdlib.h> functions
-
- Instead Of: Use:
-
- atof(s) Atof(s)
- atol(s) Atol(s)
- strtod(s, *p) Nothing. Just don't use it.
- strtol(s, *p, n) Strtol(s, *p, n)
- strtoul(s, *p, n) Strtoul(s, *p, n)
-
-Notice also the C<scan_bin>, C<scan_hex>, and C<scan_oct> functions in
-F<util.c> for converting strings representing numbers in the respective
-bases into C<NV>s.
-
-In theory C<Strtol> and C<Strtoul> may not be defined if the machine perl is
-built on doesn't actually have strtol and strtoul. But as those 2
-functions are part of the 1989 ANSI C spec we suspect you'll find them
-everywhere by now.
-
- int rand() double Drand01()
- srand(n) { seedDrand01((Rand_seed_t)n);
- PL_srand_called = TRUE; }
-
- exit(n) my_exit(n)
- system(s) Don't. Look at pp_system or use my_popen
-
- getenv(s) PerlEnv_getenv(s)
- setenv(s, val) my_putenv(s, val)
-
-=head2 Miscellaneous functions
-
-You should not even B<want> to use F<setjmp.h> functions, but if you
-think you do, use the C<JMPENV> stack in F<scope.h> instead.
-
-For C<signal>/C<sigaction>, use C<rsignal(signo, handler)>.
-
-=head1 SEE ALSO
-
-C<perlapi>, C<perlapio>, C<perlguts>
-
diff --git a/contrib/perl5/pod/perlcompile.pod b/contrib/perl5/pod/perlcompile.pod
deleted file mode 100644
index 282592e..0000000
--- a/contrib/perl5/pod/perlcompile.pod
+++ /dev/null
@@ -1,441 +0,0 @@
-=head1 NAME
-
-perlcompile - Introduction to the Perl Compiler-Translator
-
-=head1 DESCRIPTION
-
-Perl has always had a compiler: your source is compiled into an
-internal form (a parse tree) which is then optimized before being
-run. Since version 5.005, Perl has shipped with a module
-capable of inspecting the optimized parse tree (C<B>), and this has
-been used to write many useful utilities, including a module that lets
-you turn your Perl into C source code that can be compiled into an
-native executable.
-
-The C<B> module provides access to the parse tree, and other modules
-("back ends") do things with the tree. Some write it out as
-bytecode, C source code, or a semi-human-readable text. Another
-traverses the parse tree to build a cross-reference of which
-subroutines, formats, and variables are used where. Another checks
-your code for dubious constructs. Yet another back end dumps the
-parse tree back out as Perl source, acting as a source code beautifier
-or deobfuscator.
-
-Because its original purpose was to be a way to produce C code
-corresponding to a Perl program, and in turn a native executable, the
-C<B> module and its associated back ends are known as "the
-compiler", even though they don't really compile anything.
-Different parts of the compiler are more accurately a "translator",
-or an "inspector", but people want Perl to have a "compiler
-option" not an "inspector gadget". What can you do?
-
-This document covers the use of the Perl compiler: which modules
-it comprises, how to use the most important of the back end modules,
-what problems there are, and how to work around them.
-
-=head2 Layout
-
-The compiler back ends are in the C<B::> hierarchy, and the front-end
-(the module that you, the user of the compiler, will sometimes
-interact with) is the O module. Some back ends (e.g., C<B::C>) have
-programs (e.g., I<perlcc>) to hide the modules' complexity.
-
-Here are the important back ends to know about, with their status
-expressed as a number from 0 (outline for later implementation) to
-10 (if there's a bug in it, we're very surprised):
-
-=over 4
-
-=item B::Bytecode
-
-Stores the parse tree in a machine-independent format, suitable
-for later reloading through the ByteLoader module. Status: 5 (some
-things work, some things don't, some things are untested).
-
-=item B::C
-
-Creates a C source file containing code to rebuild the parse tree
-and resume the interpreter. Status: 6 (many things work adequately,
-including programs using Tk).
-
-=item B::CC
-
-Creates a C source file corresponding to the run time code path in
-the parse tree. This is the closest to a Perl-to-C translator there
-is, but the code it generates is almost incomprehensible because it
-translates the parse tree into a giant switch structure that
-manipulates Perl structures. Eventual goal is to reduce (given
-sufficient type information in the Perl program) some of the
-Perl data structure manipulations into manipulations of C-level
-ints, floats, etc. Status: 5 (some things work, including
-uncomplicated Tk examples).
-
-=item B::Lint
-
-Complains if it finds dubious constructs in your source code. Status:
-6 (it works adequately, but only has a very limited number of areas
-that it checks).
-
-=item B::Deparse
-
-Recreates the Perl source, making an attempt to format it coherently.
-Status: 8 (it works nicely, but a few obscure things are missing).
-
-=item B::Xref
-
-Reports on the declaration and use of subroutines and variables.
-Status: 8 (it works nicely, but still has a few lingering bugs).
-
-=back
-
-=head1 Using The Back Ends
-
-The following sections describe how to use the various compiler back
-ends. They're presented roughly in order of maturity, so that the
-most stable and proven back ends are described first, and the most
-experimental and incomplete back ends are described last.
-
-The O module automatically enabled the B<-c> flag to Perl, which
-prevents Perl from executing your code once it has been compiled.
-This is why all the back ends print:
-
- myperlprogram syntax OK
-
-before producing any other output.
-
-=head2 The Cross Referencing Back End
-
-The cross referencing back end (B::Xref) produces a report on your program,
-breaking down declarations and uses of subroutines and variables (and
-formats) by file and subroutine. For instance, here's part of the
-report from the I<pod2man> program that comes with Perl:
-
- Subroutine clear_noremap
- Package (lexical)
- $ready_to_print i1069, 1079
- Package main
- $& 1086
- $. 1086
- $0 1086
- $1 1087
- $2 1085, 1085
- $3 1085, 1085
- $ARGV 1086
- %HTML_Escapes 1085, 1085
-
-This shows the variables used in the subroutine C<clear_noremap>. The
-variable C<$ready_to_print> is a my() (lexical) variable,
-B<i>ntroduced (first declared with my()) on line 1069, and used on
-line 1079. The variable C<$&> from the main package is used on 1086,
-and so on.
-
-A line number may be prefixed by a single letter:
-
-=over 4
-
-=item i
-
-Lexical variable introduced (declared with my()) for the first time.
-
-=item &
-
-Subroutine or method call.
-
-=item s
-
-Subroutine defined.
-
-=item r
-
-Format defined.
-
-=back
-
-The most useful option the cross referencer has is to save the report
-to a separate file. For instance, to save the report on
-I<myperlprogram> to the file I<report>:
-
- $ perl -MO=Xref,-oreport myperlprogram
-
-=head2 The Decompiling Back End
-
-The Deparse back end turns your Perl source back into Perl source. It
-can reformat along the way, making it useful as a de-obfuscator. The
-most basic way to use it is:
-
- $ perl -MO=Deparse myperlprogram
-
-You'll notice immediately that Perl has no idea of how to paragraph
-your code. You'll have to separate chunks of code from each other
-with newlines by hand. However, watch what it will do with
-one-liners:
-
- $ perl -MO=Deparse -e '$op=shift||die "usage: $0
- code [...]";chomp(@ARGV=<>)unless@ARGV; for(@ARGV){$was=$_;eval$op;
- die$@ if$@; rename$was,$_ unless$was eq $_}'
- -e syntax OK
- $op = shift @ARGV || die("usage: $0 code [...]");
- chomp(@ARGV = <ARGV>) unless @ARGV;
- foreach $_ (@ARGV) {
- $was = $_;
- eval $op;
- die $@ if $@;
- rename $was, $_ unless $was eq $_;
- }
-
-The decompiler has several options for the code it generates. For
-instance, you can set the size of each indent from 4 (as above) to
-2 with:
-
- $ perl -MO=Deparse,-si2 myperlprogram
-
-The B<-p> option adds parentheses where normally they are omitted:
-
- $ perl -MO=Deparse -e 'print "Hello, world\n"'
- -e syntax OK
- print "Hello, world\n";
- $ perl -MO=Deparse,-p -e 'print "Hello, world\n"'
- -e syntax OK
- print("Hello, world\n");
-
-See L<B::Deparse> for more information on the formatting options.
-
-=head2 The Lint Back End
-
-The lint back end (B::Lint) inspects programs for poor style. One
-programmer's bad style is another programmer's useful tool, so options
-let you select what is complained about.
-
-To run the style checker across your source code:
-
- $ perl -MO=Lint myperlprogram
-
-To disable context checks and undefined subroutines:
-
- $ perl -MO=Lint,-context,-undefined-subs myperlprogram
-
-See L<B::Lint> for information on the options.
-
-=head2 The Simple C Back End
-
-This module saves the internal compiled state of your Perl program
-to a C source file, which can be turned into a native executable
-for that particular platform using a C compiler. The resulting
-program links against the Perl interpreter library, so it
-will not save you disk space (unless you build Perl with a shared
-library) or program size. It may, however, save you startup time.
-
-The C<perlcc> tool generates such executables by default.
-
- perlcc myperlprogram.pl
-
-=head2 The Bytecode Back End
-
-This back end is only useful if you also have a way to load and
-execute the bytecode that it produces. The ByteLoader module provides
-this functionality.
-
-To turn a Perl program into executable byte code, you can use C<perlcc>
-with the C<-b> switch:
-
- perlcc -b myperlprogram.pl
-
-The byte code is machine independent, so once you have a compiled
-module or program, it is as portable as Perl source (assuming that
-the user of the module or program has a modern-enough Perl interpreter
-to decode the byte code).
-
-See B<B::Bytecode> for information on options to control the
-optimization and nature of the code generated by the Bytecode module.
-
-=head2 The Optimized C Back End
-
-The optimized C back end will turn your Perl program's run time
-code-path into an equivalent (but optimized) C program that manipulates
-the Perl data structures directly. The program will still link against
-the Perl interpreter library, to allow for eval(), C<s///e>,
-C<require>, etc.
-
-The C<perlcc> tool generates such executables when using the -opt
-switch. To compile a Perl program (ending in C<.pl>
-or C<.p>):
-
- perlcc -opt myperlprogram.pl
-
-To produce a shared library from a Perl module (ending in C<.pm>):
-
- perlcc -opt Myperlmodule.pm
-
-For more information, see L<perlcc> and L<B::CC>.
-
-=over 4
-
-=item B
-
-This module is the introspective ("reflective" in Java terms)
-module, which allows a Perl program to inspect its innards. The
-back end modules all use this module to gain access to the compiled
-parse tree. You, the user of a back end module, will not need to
-interact with B.
-
-=item O
-
-This module is the front-end to the compiler's back ends. Normally
-called something like this:
-
- $ perl -MO=Deparse myperlprogram
-
-This is like saying C<use O 'Deparse'> in your Perl program.
-
-=item B::Asmdata
-
-This module is used by the B::Assembler module, which is in turn used
-by the B::Bytecode module, which stores a parse-tree as
-bytecode for later loading. It's not a back end itself, but rather a
-component of a back end.
-
-=item B::Assembler
-
-This module turns a parse-tree into data suitable for storing
-and later decoding back into a parse-tree. It's not a back end
-itself, but rather a component of a back end. It's used by the
-I<assemble> program that produces bytecode.
-
-=item B::Bblock
-
-This module is used by the B::CC back end. It walks "basic blocks".
-A basic block is a series of operations which is known to execute from
-start to finish, with no possibility of branching or halting.
-
-=item B::Bytecode
-
-This module is a back end that generates bytecode from a
-program's parse tree. This bytecode is written to a file, from where
-it can later be reconstructed back into a parse tree. The goal is to
-do the expensive program compilation once, save the interpreter's
-state into a file, and then restore the state from the file when the
-program is to be executed. See L</"The Bytecode Back End">
-for details about usage.
-
-=item B::C
-
-This module writes out C code corresponding to the parse tree and
-other interpreter internal structures. You compile the corresponding
-C file, and get an executable file that will restore the internal
-structures and the Perl interpreter will begin running the
-program. See L</"The Simple C Back End"> for details about usage.
-
-=item B::CC
-
-This module writes out C code corresponding to your program's
-operations. Unlike the B::C module, which merely stores the
-interpreter and its state in a C program, the B::CC module makes a
-C program that does not involve the interpreter. As a consequence,
-programs translated into C by B::CC can execute faster than normal
-interpreted programs. See L</"The Optimized C Back End"> for
-details about usage.
-
-=item B::Debug
-
-This module dumps the Perl parse tree in verbose detail to STDOUT.
-It's useful for people who are writing their own back end, or who
-are learning about the Perl internals. It's not useful to the
-average programmer.
-
-=item B::Deparse
-
-This module produces Perl source code from the compiled parse tree.
-It is useful in debugging and deconstructing other people's code,
-also as a pretty-printer for your own source. See
-L</"The Decompiling Back End"> for details about usage.
-
-=item B::Disassembler
-
-This module turns bytecode back into a parse tree. It's not a back
-end itself, but rather a component of a back end. It's used by the
-I<disassemble> program that comes with the bytecode.
-
-=item B::Lint
-
-This module inspects the compiled form of your source code for things
-which, while some people frown on them, aren't necessarily bad enough
-to justify a warning. For instance, use of an array in scalar context
-without explicitly saying C<scalar(@array)> is something that Lint
-can identify. See L</"The Lint Back End"> for details about usage.
-
-=item B::Showlex
-
-This module prints out the my() variables used in a function or a
-file. To get a list of the my() variables used in the subroutine
-mysub() defined in the file myperlprogram:
-
- $ perl -MO=Showlex,mysub myperlprogram
-
-To get a list of the my() variables used in the file myperlprogram:
-
- $ perl -MO=Showlex myperlprogram
-
-[BROKEN]
-
-=item B::Stackobj
-
-This module is used by the B::CC module. It's not a back end itself,
-but rather a component of a back end.
-
-=item B::Stash
-
-This module is used by the L<perlcc> program, which compiles a module
-into an executable. B::Stash prints the symbol tables in use by a
-program, and is used to prevent B::CC from producing C code for the
-B::* and O modules. It's not a back end itself, but rather a
-component of a back end.
-
-=item B::Terse
-
-This module prints the contents of the parse tree, but without as much
-information as B::Debug. For comparison, C<print "Hello, world.">
-produced 96 lines of output from B::Debug, but only 6 from B::Terse.
-
-This module is useful for people who are writing their own back end,
-or who are learning about the Perl internals. It's not useful to the
-average programmer.
-
-=item B::Xref
-
-This module prints a report on where the variables, subroutines, and
-formats are defined and used within a program and the modules it
-loads. See L</"The Cross Referencing Back End"> for details about
-usage.
-
-=back
-
-=head1 KNOWN PROBLEMS
-
-The simple C backend currently only saves typeglobs with alphanumeric
-names.
-
-The optimized C backend outputs code for more modules than it should
-(e.g., DirHandle). It also has little hope of properly handling
-C<goto LABEL> outside the running subroutine (C<goto &sub> is okay).
-C<goto LABEL> currently does not work at all in this backend.
-It also creates a huge initialization function that gives
-C compilers headaches. Splitting the initialization function gives
-better results. Other problems include: unsigned math does not
-work correctly; some opcodes are handled incorrectly by default
-opcode handling mechanism.
-
-BEGIN{} blocks are executed while compiling your code. Any external
-state that is initialized in BEGIN{}, such as opening files, initiating
-database connections etc., do not behave properly. To work around
-this, Perl has an INIT{} block that corresponds to code being executed
-before your program begins running but after your program has finished
-being compiled. Execution order: BEGIN{}, (possible save of state
-through compiler back-end), INIT{}, program runs, END{}.
-
-=head1 AUTHOR
-
-This document was originally written by Nathan Torkington, and is now
-maintained by the perl5-porters mailing list
-I<perl5-porters@perl.org>.
-
-=cut
diff --git a/contrib/perl5/pod/perldata.pod b/contrib/perl5/pod/perldata.pod
deleted file mode 100644
index 315f716..0000000
--- a/contrib/perl5/pod/perldata.pod
+++ /dev/null
@@ -1,829 +0,0 @@
-=head1 NAME
-
-perldata - Perl data types
-
-=head1 DESCRIPTION
-
-=head2 Variable names
-
-Perl has three built-in data types: scalars, arrays of scalars, and
-associative arrays of scalars, known as "hashes". Normal arrays
-are ordered lists of scalars indexed by number, starting with 0 and with
-negative subscripts counting from the end. Hashes are unordered
-collections of scalar values indexed by their associated string key.
-
-Values are usually referred to by name, or through a named reference.
-The first character of the name tells you to what sort of data
-structure it refers. The rest of the name tells you the particular
-value to which it refers. Usually this name is a single I<identifier>,
-that is, a string beginning with a letter or underscore, and
-containing letters, underscores, and digits. In some cases, it may
-be a chain of identifiers, separated by C<::> (or by the slightly
-archaic C<'>); all but the last are interpreted as names of packages,
-to locate the namespace in which to look up the final identifier
-(see L<perlmod/Packages> for details). It's possible to substitute
-for a simple identifier, an expression that produces a reference
-to the value at runtime. This is described in more detail below
-and in L<perlref>.
-
-Perl also has its own built-in variables whose names don't follow
-these rules. They have strange names so they don't accidentally
-collide with one of your normal variables. Strings that match
-parenthesized parts of a regular expression are saved under names
-containing only digits after the C<$> (see L<perlop> and L<perlre>).
-In addition, several special variables that provide windows into
-the inner working of Perl have names containing punctuation characters
-and control characters. These are documented in L<perlvar>.
-
-Scalar values are always named with '$', even when referring to a
-scalar that is part of an array or a hash. The '$' symbol works
-semantically like the English word "the" in that it indicates a
-single value is expected.
-
- $days # the simple scalar value "days"
- $days[28] # the 29th element of array @days
- $days{'Feb'} # the 'Feb' value from hash %days
- $#days # the last index of array @days
-
-Entire arrays (and slices of arrays and hashes) are denoted by '@',
-which works much like the word "these" or "those" does in English,
-in that it indicates multiple values are expected.
-
- @days # ($days[0], $days[1],... $days[n])
- @days[3,4,5] # same as ($days[3],$days[4],$days[5])
- @days{'a','c'} # same as ($days{'a'},$days{'c'})
-
-Entire hashes are denoted by '%':
-
- %days # (key1, val1, key2, val2 ...)
-
-In addition, subroutines are named with an initial '&', though this
-is optional when unambiguous, just as the word "do" is often redundant
-in English. Symbol table entries can be named with an initial '*',
-but you don't really care about that yet (if ever :-).
-
-Every variable type has its own namespace, as do several
-non-variable identifiers. This means that you can, without fear
-of conflict, use the same name for a scalar variable, an array, or
-a hash--or, for that matter, for a filehandle, a directory handle, a
-subroutine name, a format name, or a label. This means that $foo
-and @foo are two different variables. It also means that C<$foo[1]>
-is a part of @foo, not a part of $foo. This may seem a bit weird,
-but that's okay, because it is weird.
-
-Because variable references always start with '$', '@', or '%', the
-"reserved" words aren't in fact reserved with respect to variable
-names. They I<are> reserved with respect to labels and filehandles,
-however, which don't have an initial special character. You can't
-have a filehandle named "log", for instance. Hint: you could say
-C<open(LOG,'logfile')> rather than C<open(log,'logfile')>. Using
-uppercase filehandles also improves readability and protects you
-from conflict with future reserved words. Case I<is> significant--"FOO",
-"Foo", and "foo" are all different names. Names that start with a
-letter or underscore may also contain digits and underscores.
-
-It is possible to replace such an alphanumeric name with an expression
-that returns a reference to the appropriate type. For a description
-of this, see L<perlref>.
-
-Names that start with a digit may contain only more digits. Names
-that do not start with a letter, underscore, or digit are limited to
-one character, e.g., C<$%> or C<$$>. (Most of these one character names
-have a predefined significance to Perl. For instance, C<$$> is the
-current process id.)
-
-=head2 Context
-
-The interpretation of operations and values in Perl sometimes depends
-on the requirements of the context around the operation or value.
-There are two major contexts: list and scalar. Certain operations
-return list values in contexts wanting a list, and scalar values
-otherwise. If this is true of an operation it will be mentioned in
-the documentation for that operation. In other words, Perl overloads
-certain operations based on whether the expected return value is
-singular or plural. Some words in English work this way, like "fish"
-and "sheep".
-
-In a reciprocal fashion, an operation provides either a scalar or a
-list context to each of its arguments. For example, if you say
-
- int( <STDIN> )
-
-the integer operation provides scalar context for the <>
-operator, which responds by reading one line from STDIN and passing it
-back to the integer operation, which will then find the integer value
-of that line and return that. If, on the other hand, you say
-
- sort( <STDIN> )
-
-then the sort operation provides list context for <>, which
-will proceed to read every line available up to the end of file, and
-pass that list of lines back to the sort routine, which will then
-sort those lines and return them as a list to whatever the context
-of the sort was.
-
-Assignment is a little bit special in that it uses its left argument
-to determine the context for the right argument. Assignment to a
-scalar evaluates the right-hand side in scalar context, while
-assignment to an array or hash evaluates the righthand side in list
-context. Assignment to a list (or slice, which is just a list
-anyway) also evaluates the righthand side in list context.
-
-When you use the C<use warnings> pragma or Perl's B<-w> command-line
-option, you may see warnings
-about useless uses of constants or functions in "void context".
-Void context just means the value has been discarded, such as a
-statement containing only C<"fred";> or C<getpwuid(0);>. It still
-counts as scalar context for functions that care whether or not
-they're being called in list context.
-
-User-defined subroutines may choose to care whether they are being
-called in a void, scalar, or list context. Most subroutines do not
-need to bother, though. That's because both scalars and lists are
-automatically interpolated into lists. See L<perlfunc/wantarray>
-for how you would dynamically discern your function's calling
-context.
-
-=head2 Scalar values
-
-All data in Perl is a scalar, an array of scalars, or a hash of
-scalars. A scalar may contain one single value in any of three
-different flavors: a number, a string, or a reference. In general,
-conversion from one form to another is transparent. Although a
-scalar may not directly hold multiple values, it may contain a
-reference to an array or hash which in turn contains multiple values.
-
-Scalars aren't necessarily one thing or another. There's no place
-to declare a scalar variable to be of type "string", type "number",
-type "reference", or anything else. Because of the automatic
-conversion of scalars, operations that return scalars don't need
-to care (and in fact, cannot care) whether their caller is looking
-for a string, a number, or a reference. Perl is a contextually
-polymorphic language whose scalars can be strings, numbers, or
-references (which includes objects). Although strings and numbers
-are considered pretty much the same thing for nearly all purposes,
-references are strongly-typed, uncastable pointers with builtin
-reference-counting and destructor invocation.
-
-A scalar value is interpreted as TRUE in the Boolean sense if it is not
-the null string or the number 0 (or its string equivalent, "0"). The
-Boolean context is just a special kind of scalar context where no
-conversion to a string or a number is ever performed.
-
-There are actually two varieties of null strings (sometimes referred
-to as "empty" strings), a defined one and an undefined one. The
-defined version is just a string of length zero, such as C<"">.
-The undefined version is the value that indicates that there is
-no real value for something, such as when there was an error, or
-at end of file, or when you refer to an uninitialized variable or
-element of an array or hash. Although in early versions of Perl,
-an undefined scalar could become defined when first used in a
-place expecting a defined value, this no longer happens except for
-rare cases of autovivification as explained in L<perlref>. You can
-use the defined() operator to determine whether a scalar value is
-defined (this has no meaning on arrays or hashes), and the undef()
-operator to produce an undefined value.
-
-To find out whether a given string is a valid non-zero number, it's
-sometimes enough to test it against both numeric 0 and also lexical
-"0" (although this will cause B<-w> noises). That's because strings
-that aren't numbers count as 0, just as they do in B<awk>:
-
- if ($str == 0 && $str ne "0") {
- warn "That doesn't look like a number";
- }
-
-That method may be best because otherwise you won't treat IEEE
-notations like C<NaN> or C<Infinity> properly. At other times, you
-might prefer to determine whether string data can be used numerically
-by calling the POSIX::strtod() function or by inspecting your string
-with a regular expression (as documented in L<perlre>).
-
- warn "has nondigits" if /\D/;
- warn "not a natural number" unless /^\d+$/; # rejects -3
- warn "not an integer" unless /^-?\d+$/; # rejects +3
- warn "not an integer" unless /^[+-]?\d+$/;
- warn "not a decimal number" unless /^-?\d+\.?\d*$/; # rejects .2
- warn "not a decimal number" unless /^-?(?:\d+(?:\.\d*)?|\.\d+)$/;
- warn "not a C float"
- unless /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;
-
-The length of an array is a scalar value. You may find the length
-of array @days by evaluating C<$#days>, as in B<csh>. However, this
-isn't the length of the array; it's the subscript of the last element,
-which is a different value since there is ordinarily a 0th element.
-Assigning to C<$#days> actually changes the length of the array.
-Shortening an array this way destroys intervening values. Lengthening
-an array that was previously shortened does not recover values
-that were in those elements. (It used to do so in Perl 4, but we
-had to break this to make sure destructors were called when expected.)
-
-You can also gain some miniscule measure of efficiency by pre-extending
-an array that is going to get big. You can also extend an array
-by assigning to an element that is off the end of the array. You
-can truncate an array down to nothing by assigning the null list
-() to it. The following are equivalent:
-
- @whatever = ();
- $#whatever = -1;
-
-If you evaluate an array in scalar context, it returns the length
-of the array. (Note that this is not true of lists, which return
-the last value, like the C comma operator, nor of built-in functions,
-which return whatever they feel like returning.) The following is
-always true:
-
- scalar(@whatever) == $#whatever - $[ + 1;
-
-Version 5 of Perl changed the semantics of C<$[>: files that don't set
-the value of C<$[> no longer need to worry about whether another
-file changed its value. (In other words, use of C<$[> is deprecated.)
-So in general you can assume that
-
- scalar(@whatever) == $#whatever + 1;
-
-Some programmers choose to use an explicit conversion so as to
-leave nothing to doubt:
-
- $element_count = scalar(@whatever);
-
-If you evaluate a hash in scalar context, it returns false if the
-hash is empty. If there are any key/value pairs, it returns true;
-more precisely, the value returned is a string consisting of the
-number of used buckets and the number of allocated buckets, separated
-by a slash. This is pretty much useful only to find out whether
-Perl's internal hashing algorithm is performing poorly on your data
-set. For example, you stick 10,000 things in a hash, but evaluating
-%HASH in scalar context reveals C<"1/16">, which means only one out
-of sixteen buckets has been touched, and presumably contains all
-10,000 of your items. This isn't supposed to happen.
-
-You can preallocate space for a hash by assigning to the keys() function.
-This rounds up the allocated buckets to the next power of two:
-
- keys(%users) = 1000; # allocate 1024 buckets
-
-=head2 Scalar value constructors
-
-Numeric literals are specified in any of the following floating point or
-integer formats:
-
- 12345
- 12345.67
- .23E-10 # a very small number
- 4_294_967_296 # underline for legibility
- 0xff # hex
- 0377 # octal
- 0b011011 # binary
-
-String literals are usually delimited by either single or double
-quotes. They work much like quotes in the standard Unix shells:
-double-quoted string literals are subject to backslash and variable
-substitution; single-quoted strings are not (except for C<\'> and
-C<\\>). The usual C-style backslash rules apply for making
-characters such as newline, tab, etc., as well as some more exotic
-forms. See L<perlop/"Quote and Quote-like Operators"> for a list.
-
-Hexadecimal, octal, or binary, representations in string literals
-(e.g. '0xff') are not automatically converted to their integer
-representation. The hex() and oct() functions make these conversions
-for you. See L<perlfunc/hex> and L<perlfunc/oct> for more details.
-
-You can also embed newlines directly in your strings, i.e., they can end
-on a different line than they begin. This is nice, but if you forget
-your trailing quote, the error will not be reported until Perl finds
-another line containing the quote character, which may be much further
-on in the script. Variable substitution inside strings is limited to
-scalar variables, arrays, and array or hash slices. (In other words,
-names beginning with $ or @, followed by an optional bracketed
-expression as a subscript.) The following code segment prints out "The
-price is $Z<>100."
-
- $Price = '$100'; # not interpreted
- print "The price is $Price.\n"; # interpreted
-
-As in some shells, you can enclose the variable name in braces to
-disambiguate it from following alphanumerics (and underscores).
-You must also do
-this when interpolating a variable into a string to separate the
-variable name from a following double-colon or an apostrophe, since
-these would be otherwise treated as a package separator:
-
- $who = "Larry";
- print PASSWD "${who}::0:0:Superuser:/:/bin/perl\n";
- print "We use ${who}speak when ${who}'s here.\n";
-
-Without the braces, Perl would have looked for a $whospeak, a
-C<$who::0>, and a C<$who's> variable. The last two would be the
-$0 and the $s variables in the (presumably) non-existent package
-C<who>.
-
-In fact, an identifier within such curlies is forced to be a string,
-as is any simple identifier within a hash subscript. Neither need
-quoting. Our earlier example, C<$days{'Feb'}> can be written as
-C<$days{Feb}> and the quotes will be assumed automatically. But
-anything more complicated in the subscript will be interpreted as
-an expression.
-
-A literal of the form C<v1.20.300.4000> is parsed as a string composed
-of characters with the specified ordinals. This provides an alternative,
-more readable way to construct strings, rather than use the somewhat less
-readable interpolation form C<"\x{1}\x{14}\x{12c}\x{fa0}">. This is useful
-for representing Unicode strings, and for comparing version "numbers"
-using the string comparison operators, C<cmp>, C<gt>, C<lt> etc.
-If there are two or more dots in the literal, the leading C<v> may be
-omitted.
-
- print v9786; # prints UTF-8 encoded SMILEY, "\x{263a}"
- print v102.111.111; # prints "foo"
- print 102.111.111; # same
-
-Such literals are accepted by both C<require> and C<use> for
-doing a version check. The C<$^V> special variable also contains the
-running Perl interpreter's version in this form. See L<perlvar/$^V>.
-
-The special literals __FILE__, __LINE__, and __PACKAGE__
-represent the current filename, line number, and package name at that
-point in your program. They may be used only as separate tokens; they
-will not be interpolated into strings. If there is no current package
-(due to an empty C<package;> directive), __PACKAGE__ is the undefined
-value.
-
-The two control characters ^D and ^Z, and the tokens __END__ and __DATA__
-may be used to indicate the logical end of the script before the actual
-end of file. Any following text is ignored.
-
-Text after __DATA__ but may be read via the filehandle C<PACKNAME::DATA>,
-where C<PACKNAME> is the package that was current when the __DATA__
-token was encountered. The filehandle is left open pointing to the
-contents after __DATA__. It is the program's responsibility to
-C<close DATA> when it is done reading from it. For compatibility with
-older scripts written before __DATA__ was introduced, __END__ behaves
-like __DATA__ in the toplevel script (but not in files loaded with
-C<require> or C<do>) and leaves the remaining contents of the
-file accessible via C<main::DATA>.
-
-See L<SelfLoader> for more description of __DATA__, and
-an example of its use. Note that you cannot read from the DATA
-filehandle in a BEGIN block: the BEGIN block is executed as soon
-as it is seen (during compilation), at which point the corresponding
-__DATA__ (or __END__) token has not yet been seen.
-
-A word that has no other interpretation in the grammar will
-be treated as if it were a quoted string. These are known as
-"barewords". As with filehandles and labels, a bareword that consists
-entirely of lowercase letters risks conflict with future reserved
-words, and if you use the C<use warnings> pragma or the B<-w> switch,
-Perl will warn you about any
-such words. Some people may wish to outlaw barewords entirely. If you
-say
-
- use strict 'subs';
-
-then any bareword that would NOT be interpreted as a subroutine call
-produces a compile-time error instead. The restriction lasts to the
-end of the enclosing block. An inner block may countermand this
-by saying C<no strict 'subs'>.
-
-Arrays and slices are interpolated into double-quoted strings
-by joining the elements with the delimiter specified in the C<$">
-variable (C<$LIST_SEPARATOR> in English), space by default. The
-following are equivalent:
-
- $temp = join($", @ARGV);
- system "echo $temp";
-
- system "echo @ARGV";
-
-Within search patterns (which also undergo double-quotish substitution)
-there is an unfortunate ambiguity: Is C</$foo[bar]/> to be interpreted as
-C</${foo}[bar]/> (where C<[bar]> is a character class for the regular
-expression) or as C</${foo[bar]}/> (where C<[bar]> is the subscript to array
-@foo)? If @foo doesn't otherwise exist, then it's obviously a
-character class. If @foo exists, Perl takes a good guess about C<[bar]>,
-and is almost always right. If it does guess wrong, or if you're just
-plain paranoid, you can force the correct interpretation with curly
-braces as above.
-
-A line-oriented form of quoting is based on the shell "here-document"
-syntax. Following a C<< << >> you specify a string to terminate
-the quoted material, and all lines following the current line down to
-the terminating string are the value of the item. The terminating
-string may be either an identifier (a word), or some quoted text. If
-quoted, the type of quotes you use determines the treatment of the
-text, just as in regular quoting. An unquoted identifier works like
-double quotes. There must be no space between the C<< << >> and
-the identifier, unless the identifier is quoted. (If you put a space it
-will be treated as a null identifier, which is valid, and matches the first
-empty line.) The terminating string must appear by itself (unquoted and
-with no surrounding whitespace) on the terminating line.
-
- print <<EOF;
- The price is $Price.
- EOF
-
- print << "EOF"; # same as above
- The price is $Price.
- EOF
-
- print << `EOC`; # execute commands
- echo hi there
- echo lo there
- EOC
-
- print <<"foo", <<"bar"; # you can stack them
- I said foo.
- foo
- I said bar.
- bar
-
- myfunc(<< "THIS", 23, <<'THAT');
- Here's a line
- or two.
- THIS
- and here's another.
- THAT
-
-Just don't forget that you have to put a semicolon on the end
-to finish the statement, as Perl doesn't know you're not going to
-try to do this:
-
- print <<ABC
- 179231
- ABC
- + 20;
-
-If you want your here-docs to be indented with the
-rest of the code, you'll need to remove leading whitespace
-from each line manually:
-
- ($quote = <<'FINIS') =~ s/^\s+//gm;
- The Road goes ever on and on,
- down from the door where it began.
- FINIS
-
-If you use a here-doc within a delimited construct, such as in C<s///eg>,
-the quoted material must come on the lines following the final delimiter.
-So instead of
-
- s/this/<<E . 'that'
- the other
- E
- . 'more '/eg;
-
-you have to write
-
- s/this/<<E . 'that'
- . 'more '/eg;
- the other
- E
-
-If the terminating identifier is on the last line of the program, you
-must be sure there is a newline after it; otherwise, Perl will give the
-warning B<Can't find string terminator "END" anywhere before EOF...>.
-
-Additionally, the quoting rules for the identifier are not related to
-Perl's quoting rules -- C<q()>, C<qq()>, and the like are not supported
-in place of C<''> and C<"">, and the only interpolation is for backslashing
-the quoting character:
-
- print << "abc\"def";
- testing...
- abc"def
-
-Finally, quoted strings cannot span multiple lines. The general rule is
-that the identifier must be a string literal. Stick with that, and you
-should be safe.
-
-=head2 List value constructors
-
-List values are denoted by separating individual values by commas
-(and enclosing the list in parentheses where precedence requires it):
-
- (LIST)
-
-In a context not requiring a list value, the value of what appears
-to be a list literal is simply the value of the final element, as
-with the C comma operator. For example,
-
- @foo = ('cc', '-E', $bar);
-
-assigns the entire list value to array @foo, but
-
- $foo = ('cc', '-E', $bar);
-
-assigns the value of variable $bar to the scalar variable $foo.
-Note that the value of an actual array in scalar context is the
-length of the array; the following assigns the value 3 to $foo:
-
- @foo = ('cc', '-E', $bar);
- $foo = @foo; # $foo gets 3
-
-You may have an optional comma before the closing parenthesis of a
-list literal, so that you can say:
-
- @foo = (
- 1,
- 2,
- 3,
- );
-
-To use a here-document to assign an array, one line per element,
-you might use an approach like this:
-
- @sauces = <<End_Lines =~ m/(\S.*\S)/g;
- normal tomato
- spicy tomato
- green chile
- pesto
- white wine
- End_Lines
-
-LISTs do automatic interpolation of sublists. That is, when a LIST is
-evaluated, each element of the list is evaluated in list context, and
-the resulting list value is interpolated into LIST just as if each
-individual element were a member of LIST. Thus arrays and hashes lose their
-identity in a LIST--the list
-
- (@foo,@bar,&SomeSub,%glarch)
-
-contains all the elements of @foo followed by all the elements of @bar,
-followed by all the elements returned by the subroutine named SomeSub
-called in list context, followed by the key/value pairs of %glarch.
-To make a list reference that does I<NOT> interpolate, see L<perlref>.
-
-The null list is represented by (). Interpolating it in a list
-has no effect. Thus ((),(),()) is equivalent to (). Similarly,
-interpolating an array with no elements is the same as if no
-array had been interpolated at that point.
-
-This interpolation combines with the facts that the opening
-and closing parentheses are optional (except necessary for
-precedence) and lists may end with an optional comma to mean that
-multiple commas within lists are legal syntax. The list C<1,,3> is a
-concatenation of two lists, C<1,> and C<3>, the first of which ends
-with that optional comma. C<1,,3> is C<(1,),(3)> is C<1,3> (And
-similarly for C<1,,,3> is C<(1,),(,),3> is C<1,3> and so on.) Not that
-we'd advise you to use this obfuscation.
-
-A list value may also be subscripted like a normal array. You must
-put the list in parentheses to avoid ambiguity. For example:
-
- # Stat returns list value.
- $time = (stat($file))[8];
-
- # SYNTAX ERROR HERE.
- $time = stat($file)[8]; # OOPS, FORGOT PARENTHESES
-
- # Find a hex digit.
- $hexdigit = ('a','b','c','d','e','f')[$digit-10];
-
- # A "reverse comma operator".
- return (pop(@foo),pop(@foo))[0];
-
-Lists may be assigned to only when each element of the list
-is itself legal to assign to:
-
- ($a, $b, $c) = (1, 2, 3);
-
- ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);
-
-An exception to this is that you may assign to C<undef> in a list.
-This is useful for throwing away some of the return values of a
-function:
-
- ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
-
-List assignment in scalar context returns the number of elements
-produced by the expression on the right side of the assignment:
-
- $x = (($foo,$bar) = (3,2,1)); # set $x to 3, not 2
- $x = (($foo,$bar) = f()); # set $x to f()'s return count
-
-This is handy when you want to do a list assignment in a Boolean
-context, because most list functions return a null list when finished,
-which when assigned produces a 0, which is interpreted as FALSE.
-
-The final element may be an array or a hash:
-
- ($a, $b, @rest) = split;
- my($a, $b, %rest) = @_;
-
-You can actually put an array or hash anywhere in the list, but the first one
-in the list will soak up all the values, and anything after it will become
-undefined. This may be useful in a my() or local().
-
-A hash can be initialized using a literal list holding pairs of
-items to be interpreted as a key and a value:
-
- # same as map assignment above
- %map = ('red',0x00f,'blue',0x0f0,'green',0xf00);
-
-While literal lists and named arrays are often interchangeable, that's
-not the case for hashes. Just because you can subscript a list value like
-a normal array does not mean that you can subscript a list value as a
-hash. Likewise, hashes included as parts of other lists (including
-parameters lists and return lists from functions) always flatten out into
-key/value pairs. That's why it's good to use references sometimes.
-
-It is often more readable to use the C<< => >> operator between key/value
-pairs. The C<< => >> operator is mostly just a more visually distinctive
-synonym for a comma, but it also arranges for its left-hand operand to be
-interpreted as a string--if it's a bareword that would be a legal identifier.
-This makes it nice for initializing hashes:
-
- %map = (
- red => 0x00f,
- blue => 0x0f0,
- green => 0xf00,
- );
-
-or for initializing hash references to be used as records:
-
- $rec = {
- witch => 'Mable the Merciless',
- cat => 'Fluffy the Ferocious',
- date => '10/31/1776',
- };
-
-or for using call-by-named-parameter to complicated functions:
-
- $field = $query->radio_group(
- name => 'group_name',
- values => ['eenie','meenie','minie'],
- default => 'meenie',
- linebreak => 'true',
- labels => \%labels
- );
-
-Note that just because a hash is initialized in that order doesn't
-mean that it comes out in that order. See L<perlfunc/sort> for examples
-of how to arrange for an output ordering.
-
-=head2 Slices
-
-A common way to access an array or a hash is one scalar element at a
-time. You can also subscript a list to get a single element from it.
-
- $whoami = $ENV{"USER"}; # one element from the hash
- $parent = $ISA[0]; # one element from the array
- $dir = (getpwnam("daemon"))[7]; # likewise, but with list
-
-A slice accesses several elements of a list, an array, or a hash
-simultaneously using a list of subscripts. It's more convenient
-than writing out the individual elements as a list of separate
-scalar values.
-
- ($him, $her) = @folks[0,-1]; # array slice
- @them = @folks[0 .. 3]; # array slice
- ($who, $home) = @ENV{"USER", "HOME"}; # hash slice
- ($uid, $dir) = (getpwnam("daemon"))[2,7]; # list slice
-
-Since you can assign to a list of variables, you can also assign to
-an array or hash slice.
-
- @days[3..5] = qw/Wed Thu Fri/;
- @colors{'red','blue','green'}
- = (0xff0000, 0x0000ff, 0x00ff00);
- @folks[0, -1] = @folks[-1, 0];
-
-The previous assignments are exactly equivalent to
-
- ($days[3], $days[4], $days[5]) = qw/Wed Thu Fri/;
- ($colors{'red'}, $colors{'blue'}, $colors{'green'})
- = (0xff0000, 0x0000ff, 0x00ff00);
- ($folks[0], $folks[-1]) = ($folks[0], $folks[-1]);
-
-Since changing a slice changes the original array or hash that it's
-slicing, a C<foreach> construct will alter some--or even all--of the
-values of the array or hash.
-
- foreach (@array[ 4 .. 10 ]) { s/peter/paul/ }
-
- foreach (@hash{keys %hash}) {
- s/^\s+//; # trim leading whitespace
- s/\s+$//; # trim trailing whitespace
- s/(\w+)/\u\L$1/g; # "titlecase" words
- }
-
-A slice of an empty list is still an empty list. Thus:
-
- @a = ()[1,0]; # @a has no elements
- @b = (@a)[0,1]; # @b has no elements
- @c = (0,1)[2,3]; # @c has no elements
-
-But:
-
- @a = (1)[1,0]; # @a has two elements
- @b = (1,undef)[1,0,2]; # @b has three elements
-
-This makes it easy to write loops that terminate when a null list
-is returned:
-
- while ( ($home, $user) = (getpwent)[7,0]) {
- printf "%-8s %s\n", $user, $home;
- }
-
-As noted earlier in this document, the scalar sense of list assignment
-is the number of elements on the right-hand side of the assignment.
-The null list contains no elements, so when the password file is
-exhausted, the result is 0, not 2.
-
-If you're confused about why you use an '@' there on a hash slice
-instead of a '%', think of it like this. The type of bracket (square
-or curly) governs whether it's an array or a hash being looked at.
-On the other hand, the leading symbol ('$' or '@') on the array or
-hash indicates whether you are getting back a singular value (a
-scalar) or a plural one (a list).
-
-=head2 Typeglobs and Filehandles
-
-Perl uses an internal type called a I<typeglob> to hold an entire
-symbol table entry. The type prefix of a typeglob is a C<*>, because
-it represents all types. This used to be the preferred way to
-pass arrays and hashes by reference into a function, but now that
-we have real references, this is seldom needed.
-
-The main use of typeglobs in modern Perl is create symbol table aliases.
-This assignment:
-
- *this = *that;
-
-makes $this an alias for $that, @this an alias for @that, %this an alias
-for %that, &this an alias for &that, etc. Much safer is to use a reference.
-This:
-
- local *Here::blue = \$There::green;
-
-temporarily makes $Here::blue an alias for $There::green, but doesn't
-make @Here::blue an alias for @There::green, or %Here::blue an alias for
-%There::green, etc. See L<perlmod/"Symbol Tables"> for more examples
-of this. Strange though this may seem, this is the basis for the whole
-module import/export system.
-
-Another use for typeglobs is to pass filehandles into a function or
-to create new filehandles. If you need to use a typeglob to save away
-a filehandle, do it this way:
-
- $fh = *STDOUT;
-
-or perhaps as a real reference, like this:
-
- $fh = \*STDOUT;
-
-See L<perlsub> for examples of using these as indirect filehandles
-in functions.
-
-Typeglobs are also a way to create a local filehandle using the local()
-operator. These last until their block is exited, but may be passed back.
-For example:
-
- sub newopen {
- my $path = shift;
- local *FH; # not my!
- open (FH, $path) or return undef;
- return *FH;
- }
- $fh = newopen('/etc/passwd');
-
-Now that we have the C<*foo{THING}> notation, typeglobs aren't used as much
-for filehandle manipulations, although they're still needed to pass brand
-new file and directory handles into or out of functions. That's because
-C<*HANDLE{IO}> only works if HANDLE has already been used as a handle.
-In other words, C<*FH> must be used to create new symbol table entries;
-C<*foo{THING}> cannot. When in doubt, use C<*FH>.
-
-All functions that are capable of creating filehandles (open(),
-opendir(), pipe(), socketpair(), sysopen(), socket(), and accept())
-automatically create an anonymous filehandle if the handle passed to
-them is an uninitialized scalar variable. This allows the constructs
-such as C<open(my $fh, ...)> and C<open(local $fh,...)> to be used to
-create filehandles that will conveniently be closed automatically when
-the scope ends, provided there are no other references to them. This
-largely eliminates the need for typeglobs when opening filehandles
-that must be passed around, as in the following example:
-
- sub myopen {
- open my $fh, "@_"
- or die "Can't open '@_': $!";
- return $fh;
- }
-
- {
- my $f = myopen("</etc/motd");
- print <$f>;
- # $f implicitly closed here
- }
-
-Another way to create anonymous filehandles is with the Symbol
-module or with the IO::Handle module and its ilk. These modules
-have the advantage of not hiding different types of the same name
-during the local(). See the bottom of L<perlfunc/open()> for an
-example.
-
-=head1 SEE ALSO
-
-See L<perlvar> for a description of Perl's built-in variables and
-a discussion of legal variable names. See L<perlref>, L<perlsub>,
-and L<perlmod/"Symbol Tables"> for more discussion on typeglobs and
-the C<*foo{THING}> syntax.
diff --git a/contrib/perl5/pod/perldbmfilter.pod b/contrib/perl5/pod/perldbmfilter.pod
deleted file mode 100644
index 8384999..0000000
--- a/contrib/perl5/pod/perldbmfilter.pod
+++ /dev/null
@@ -1,168 +0,0 @@
-=head1 NAME
-
-perldbmfilter - Perl DBM Filters
-
-=head1 SYNOPSIS
-
- $db = tie %hash, 'DBM', ...
-
- $old_filter = $db->filter_store_key ( sub { ... } ) ;
- $old_filter = $db->filter_store_value( sub { ... } ) ;
- $old_filter = $db->filter_fetch_key ( sub { ... } ) ;
- $old_filter = $db->filter_fetch_value( sub { ... } ) ;
-
-=head1 DESCRIPTION
-
-The four C<filter_*> methods shown above are available in all the DBM
-modules that ship with Perl, namely DB_File, GDBM_File, NDBM_File,
-ODBM_File and SDBM_File.
-
-Each of the methods work identically, and are used to install (or
-uninstall) a single DBM Filter. The only difference between them is the
-place that the filter is installed.
-
-To summarise:
-
-=over 5
-
-=item B<filter_store_key>
-
-If a filter has been installed with this method, it will be invoked
-every time you write a key to a DBM database.
-
-=item B<filter_store_value>
-
-If a filter has been installed with this method, it will be invoked
-every time you write a value to a DBM database.
-
-
-=item B<filter_fetch_key>
-
-If a filter has been installed with this method, it will be invoked
-every time you read a key from a DBM database.
-
-=item B<filter_fetch_value>
-
-If a filter has been installed with this method, it will be invoked
-every time you read a value from a DBM database.
-
-=back
-
-You can use any combination of the methods from none to all four.
-
-All filter methods return the existing filter, if present, or C<undef>
-in not.
-
-To delete a filter pass C<undef> to it.
-
-=head2 The Filter
-
-When each filter is called by Perl, a local copy of C<$_> will contain
-the key or value to be filtered. Filtering is achieved by modifying
-the contents of C<$_>. The return code from the filter is ignored.
-
-=head2 An Example -- the NULL termination problem.
-
-DBM Filters are useful for a class of problems where you I<always>
-want to make the same transformation to all keys, all values or both.
-
-For example, consider the following scenario. You have a DBM database
-that you need to share with a third-party C application. The C application
-assumes that I<all> keys and values are NULL terminated. Unfortunately
-when Perl writes to DBM databases it doesn't use NULL termination, so
-your Perl application will have to manage NULL termination itself. When
-you write to the database you will have to use something like this:
-
- $hash{"$key\0"} = "$value\0" ;
-
-Similarly the NULL needs to be taken into account when you are considering
-the length of existing keys/values.
-
-It would be much better if you could ignore the NULL terminations issue
-in the main application code and have a mechanism that automatically
-added the terminating NULL to all keys and values whenever you write to
-the database and have them removed when you read from the database. As I'm
-sure you have already guessed, this is a problem that DBM Filters can
-fix very easily.
-
- use strict ;
- use warnings ;
- use SDBM_File ;
- use Fcntl ;
-
- my %hash ;
- my $filename = "/tmp/filt" ;
- unlink $filename ;
-
- my $db = tie(%hash, 'SDBM_File', $filename, O_RDWR|O_CREAT, 0640)
- or die "Cannot open $filename: $!\n" ;
-
- # Install DBM Filters
- $db->filter_fetch_key ( sub { s/\0$// } ) ;
- $db->filter_store_key ( sub { $_ .= "\0" } ) ;
- $db->filter_fetch_value(
- sub { no warnings 'uninitialized' ;s/\0$// } ) ;
- $db->filter_store_value( sub { $_ .= "\0" } ) ;
-
- $hash{"abc"} = "def" ;
- my $a = $hash{"ABC"} ;
- # ...
- undef $db ;
- untie %hash ;
-
-The code above uses SDBM_File, but it will work with any of the DBM
-modules.
-
-Hopefully the contents of each of the filters should be
-self-explanatory. Both "fetch" filters remove the terminating NULL,
-and both "store" filters add a terminating NULL.
-
-
-=head2 Another Example -- Key is a C int.
-
-Here is another real-life example. By default, whenever Perl writes to
-a DBM database it always writes the key and value as strings. So when
-you use this:
-
- $hash{12345} = "something" ;
-
-the key 12345 will get stored in the DBM database as the 5 byte string
-"12345". If you actually want the key to be stored in the DBM database
-as a C int, you will have to use C<pack> when writing, and C<unpack>
-when reading.
-
-Here is a DBM Filter that does it:
-
- use strict ;
- use warnings ;
- use DB_File ;
- my %hash ;
- my $filename = "/tmp/filt" ;
- unlink $filename ;
-
-
- my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH
- or die "Cannot open $filename: $!\n" ;
-
- $db->filter_fetch_key ( sub { $_ = unpack("i", $_) } ) ;
- $db->filter_store_key ( sub { $_ = pack ("i", $_) } ) ;
- $hash{123} = "def" ;
- # ...
- undef $db ;
- untie %hash ;
-
-The code above uses DB_File, but again it will work with any of the
-DBM modules.
-
-This time only two filters have been used -- we only need to manipulate
-the contents of the key, so it wasn't necessary to install any value
-filters.
-
-=head1 SEE ALSO
-
-L<DB_File>, L<GDBM_File>, L<NDBM_File>, L<ODBM_File> and L<SDBM_File>.
-
-=head1 AUTHOR
-
-Paul Marquess
-
diff --git a/contrib/perl5/pod/perldebguts.pod b/contrib/perl5/pod/perldebguts.pod
deleted file mode 100644
index 20cc546..0000000
--- a/contrib/perl5/pod/perldebguts.pod
+++ /dev/null
@@ -1,925 +0,0 @@
-=head1 NAME
-
-perldebguts - Guts of Perl debugging
-
-=head1 DESCRIPTION
-
-This is not the perldebug(1) manpage, which tells you how to use
-the debugger. This manpage describes low-level details ranging
-between difficult and impossible for anyone who isn't incredibly
-intimate with Perl's guts to understand. Caveat lector.
-
-=head1 Debugger Internals
-
-Perl has special debugging hooks at compile-time and run-time used
-to create debugging environments. These hooks are not to be confused
-with the I<perl -Dxxx> command described in L<perlrun>, which is
-usable only if a special Perl is built per the instructions in the
-F<INSTALL> podpage in the Perl source tree.
-
-For example, whenever you call Perl's built-in C<caller> function
-from the package DB, the arguments that the corresponding stack
-frame was called with are copied to the @DB::args array. The
-general mechanisms is enabled by calling Perl with the B<-d> switch, the
-following additional features are enabled (cf. L<perlvar/$^P>):
-
-=over 4
-
-=item *
-
-Perl inserts the contents of C<$ENV{PERL5DB}> (or C<BEGIN {require
-'perl5db.pl'}> if not present) before the first line of your program.
-
-=item *
-
-Each array C<@{"_<$filename"}> holds the lines of $filename for a
-file compiled by Perl. The same for C<eval>ed strings that contain
-subroutines, or which are currently being executed. The $filename
-for C<eval>ed strings looks like C<(eval 34)>. Code assertions
-in regexes look like C<(re_eval 19)>.
-
-Values in this array are magical in numeric context: they compare
-equal to zero only if the line is not breakable.
-
-=item *
-
-Each hash C<%{"_<$filename"}> contains breakpoints and actions keyed
-by line number. Individual entries (as opposed to the whole hash)
-are settable. Perl only cares about Boolean true here, although
-the values used by F<perl5db.pl> have the form
-C<"$break_condition\0$action">.
-
-The same holds for evaluated strings that contain subroutines, or
-which are currently being executed. The $filename for C<eval>ed strings
-looks like C<(eval 34)> or C<(re_eval 19)>.
-
-=item *
-
-Each scalar C<${"_<$filename"}> contains C<"_<$filename">. This is
-also the case for evaluated strings that contain subroutines, or
-which are currently being executed. The $filename for C<eval>ed
-strings looks like C<(eval 34)> or C<(re_eval 19)>.
-
-=item *
-
-After each C<require>d file is compiled, but before it is executed,
-C<DB::postponed(*{"_<$filename"})> is called if the subroutine
-C<DB::postponed> exists. Here, the $filename is the expanded name of
-the C<require>d file, as found in the values of %INC.
-
-=item *
-
-After each subroutine C<subname> is compiled, the existence of
-C<$DB::postponed{subname}> is checked. If this key exists,
-C<DB::postponed(subname)> is called if the C<DB::postponed> subroutine
-also exists.
-
-=item *
-
-A hash C<%DB::sub> is maintained, whose keys are subroutine names
-and whose values have the form C<filename:startline-endline>.
-C<filename> has the form C<(eval 34)> for subroutines defined inside
-C<eval>s, or C<(re_eval 19)> for those within regex code assertions.
-
-=item *
-
-When the execution of your program reaches a point that can hold a
-breakpoint, the C<DB::DB()> subroutine is called any of the variables
-$DB::trace, $DB::single, or $DB::signal is true. These variables
-are not C<local>izable. This feature is disabled when executing
-inside C<DB::DB()>, including functions called from it
-unless C<< $^D & (1<<30) >> is true.
-
-=item *
-
-When execution of the program reaches a subroutine call, a call to
-C<&DB::sub>(I<args>) is made instead, with C<$DB::sub> holding the
-name of the called subroutine. This doesn't happen if the subroutine
-was compiled in the C<DB> package.)
-
-=back
-
-Note that if C<&DB::sub> needs external data for it to work, no
-subroutine call is possible until this is done. For the standard
-debugger, the C<$DB::deep> variable (how many levels of recursion
-deep into the debugger you can go before a mandatory break) gives
-an example of such a dependency.
-
-=head2 Writing Your Own Debugger
-
-The minimal working debugger consists of one line
-
- sub DB::DB {}
-
-which is quite handy as contents of C<PERL5DB> environment
-variable:
-
- $ PERL5DB="sub DB::DB {}" perl -d your-script
-
-Another brief debugger, slightly more useful, could be created
-with only the line:
-
- sub DB::DB {print ++$i; scalar <STDIN>}
-
-This debugger would print the sequential number of encountered
-statement, and would wait for you to hit a newline before continuing.
-
-The following debugger is quite functional:
-
- {
- package DB;
- sub DB {}
- sub sub {print ++$i, " $sub\n"; &$sub}
- }
-
-It prints the sequential number of subroutine call and the name of the
-called subroutine. Note that C<&DB::sub> should be compiled into the
-package C<DB>.
-
-At the start, the debugger reads your rc file (F<./.perldb> or
-F<~/.perldb> under Unix), which can set important options. This file may
-define a subroutine C<&afterinit> to be executed after the debugger is
-initialized.
-
-After the rc file is read, the debugger reads the PERLDB_OPTS
-environment variable and parses this as the remainder of a C<O ...>
-line as one might enter at the debugger prompt.
-
-The debugger also maintains magical internal variables, such as
-C<@DB::dbline>, C<%DB::dbline>, which are aliases for
-C<@{"::_<current_file"}> C<%{"::_<current_file"}>. Here C<current_file>
-is the currently selected file, either explicitly chosen with the
-debugger's C<f> command, or implicitly by flow of execution.
-
-Some functions are provided to simplify customization. See
-L<perldebug/"Options"> for description of options parsed by
-C<DB::parse_options(string)>. The function C<DB::dump_trace(skip[,
-count])> skips the specified number of frames and returns a list
-containing information about the calling frames (all of them, if
-C<count> is missing). Each entry is reference to a hash with
-keys C<context> (either C<.>, C<$>, or C<@>), C<sub> (subroutine
-name, or info about C<eval>), C<args> (C<undef> or a reference to
-an array), C<file>, and C<line>.
-
-The function C<DB::print_trace(FH, skip[, count[, short]])> prints
-formatted info about caller frames. The last two functions may be
-convenient as arguments to C<< < >>, C<< << >> commands.
-
-Note that any variables and functions that are not documented in
-this manpages (or in L<perldebug>) are considered for internal
-use only, and as such are subject to change without notice.
-
-=head1 Frame Listing Output Examples
-
-The C<frame> option can be used to control the output of frame
-information. For example, contrast this expression trace:
-
- $ perl -de 42
- Stack dump during die enabled outside of evals.
-
- Loading DB routines from perl5db.pl patch level 0.94
- Emacs support available.
-
- Enter h or `h h' for help.
-
- main::(-e:1): 0
- DB<1> sub foo { 14 }
-
- DB<2> sub bar { 3 }
-
- DB<3> t print foo() * bar()
- main::((eval 172):3): print foo() + bar();
- main::foo((eval 168):2):
- main::bar((eval 170):2):
- 42
-
-with this one, once the C<O>ption C<frame=2> has been set:
-
- DB<4> O f=2
- frame = '2'
- DB<5> t print foo() * bar()
- 3: foo() * bar()
- entering main::foo
- 2: sub foo { 14 };
- exited main::foo
- entering main::bar
- 2: sub bar { 3 };
- exited main::bar
- 42
-
-By way of demonstration, we present below a laborious listing
-resulting from setting your C<PERLDB_OPTS> environment variable to
-the value C<f=n N>, and running I<perl -d -V> from the command line.
-Examples use various values of C<n> are shown to give you a feel
-for the difference between settings. Long those it may be, this
-is not a complete listing, but only excerpts.
-
-=over 4
-
-=item 1
-
- entering main::BEGIN
- entering Config::BEGIN
- Package lib/Exporter.pm.
- Package lib/Carp.pm.
- Package lib/Config.pm.
- entering Config::TIEHASH
- entering Exporter::import
- entering Exporter::export
- entering Config::myconfig
- entering Config::FETCH
- entering Config::FETCH
- entering Config::FETCH
- entering Config::FETCH
-
-=item 2
-
- entering main::BEGIN
- entering Config::BEGIN
- Package lib/Exporter.pm.
- Package lib/Carp.pm.
- exited Config::BEGIN
- Package lib/Config.pm.
- entering Config::TIEHASH
- exited Config::TIEHASH
- entering Exporter::import
- entering Exporter::export
- exited Exporter::export
- exited Exporter::import
- exited main::BEGIN
- entering Config::myconfig
- entering Config::FETCH
- exited Config::FETCH
- entering Config::FETCH
- exited Config::FETCH
- entering Config::FETCH
-
-=item 4
-
- in $=main::BEGIN() from /dev/null:0
- in $=Config::BEGIN() from lib/Config.pm:2
- Package lib/Exporter.pm.
- Package lib/Carp.pm.
- Package lib/Config.pm.
- in $=Config::TIEHASH('Config') from lib/Config.pm:644
- in $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
- in $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from li
- in @=Config::myconfig() from /dev/null:0
- in $=Config::FETCH(ref(Config), 'package') from lib/Config.pm:574
- in $=Config::FETCH(ref(Config), 'baserev') from lib/Config.pm:574
- in $=Config::FETCH(ref(Config), 'PERL_VERSION') from lib/Config.pm:574
- in $=Config::FETCH(ref(Config), 'PERL_SUBVERSION') from lib/Config.pm:574
- in $=Config::FETCH(ref(Config), 'osname') from lib/Config.pm:574
- in $=Config::FETCH(ref(Config), 'osvers') from lib/Config.pm:574
-
-=item 6
-
- in $=main::BEGIN() from /dev/null:0
- in $=Config::BEGIN() from lib/Config.pm:2
- Package lib/Exporter.pm.
- Package lib/Carp.pm.
- out $=Config::BEGIN() from lib/Config.pm:0
- Package lib/Config.pm.
- in $=Config::TIEHASH('Config') from lib/Config.pm:644
- out $=Config::TIEHASH('Config') from lib/Config.pm:644
- in $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
- in $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/
- out $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/
- out $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
- out $=main::BEGIN() from /dev/null:0
- in @=Config::myconfig() from /dev/null:0
- in $=Config::FETCH(ref(Config), 'package') from lib/Config.pm:574
- out $=Config::FETCH(ref(Config), 'package') from lib/Config.pm:574
- in $=Config::FETCH(ref(Config), 'baserev') from lib/Config.pm:574
- out $=Config::FETCH(ref(Config), 'baserev') from lib/Config.pm:574
- in $=Config::FETCH(ref(Config), 'PERL_VERSION') from lib/Config.pm:574
- out $=Config::FETCH(ref(Config), 'PERL_VERSION') from lib/Config.pm:574
- in $=Config::FETCH(ref(Config), 'PERL_SUBVERSION') from lib/Config.pm:574
-
-=item 14
-
- in $=main::BEGIN() from /dev/null:0
- in $=Config::BEGIN() from lib/Config.pm:2
- Package lib/Exporter.pm.
- Package lib/Carp.pm.
- out $=Config::BEGIN() from lib/Config.pm:0
- Package lib/Config.pm.
- in $=Config::TIEHASH('Config') from lib/Config.pm:644
- out $=Config::TIEHASH('Config') from lib/Config.pm:644
- in $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
- in $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/E
- out $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/E
- out $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
- out $=main::BEGIN() from /dev/null:0
- in @=Config::myconfig() from /dev/null:0
- in $=Config::FETCH('Config=HASH(0x1aa444)', 'package') from lib/Config.pm:574
- out $=Config::FETCH('Config=HASH(0x1aa444)', 'package') from lib/Config.pm:574
- in $=Config::FETCH('Config=HASH(0x1aa444)', 'baserev') from lib/Config.pm:574
- out $=Config::FETCH('Config=HASH(0x1aa444)', 'baserev') from lib/Config.pm:574
-
-=item 30
-
- in $=CODE(0x15eca4)() from /dev/null:0
- in $=CODE(0x182528)() from lib/Config.pm:2
- Package lib/Exporter.pm.
- out $=CODE(0x182528)() from lib/Config.pm:0
- scalar context return from CODE(0x182528): undef
- Package lib/Config.pm.
- in $=Config::TIEHASH('Config') from lib/Config.pm:628
- out $=Config::TIEHASH('Config') from lib/Config.pm:628
- scalar context return from Config::TIEHASH: empty hash
- in $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
- in $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/Exporter.pm:171
- out $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/Exporter.pm:171
- scalar context return from Exporter::export: ''
- out $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
- scalar context return from Exporter::import: ''
-
-=back
-
-In all cases shown above, the line indentation shows the call tree.
-If bit 2 of C<frame> is set, a line is printed on exit from a
-subroutine as well. If bit 4 is set, the arguments are printed
-along with the caller info. If bit 8 is set, the arguments are
-printed even if they are tied or references. If bit 16 is set, the
-return value is printed, too.
-
-When a package is compiled, a line like this
-
- Package lib/Carp.pm.
-
-is printed with proper indentation.
-
-=head1 Debugging regular expressions
-
-There are two ways to enable debugging output for regular expressions.
-
-If your perl is compiled with C<-DDEBUGGING>, you may use the
-B<-Dr> flag on the command line.
-
-Otherwise, one can C<use re 'debug'>, which has effects at
-compile time and run time. It is not lexically scoped.
-
-=head2 Compile-time output
-
-The debugging output at compile time looks like this:
-
- compiling RE `[bc]d(ef*g)+h[ij]k$'
- size 43 first at 1
- 1: ANYOF(11)
- 11: EXACT <d>(13)
- 13: CURLYX {1,32767}(27)
- 15: OPEN1(17)
- 17: EXACT <e>(19)
- 19: STAR(22)
- 20: EXACT <f>(0)
- 22: EXACT <g>(24)
- 24: CLOSE1(26)
- 26: WHILEM(0)
- 27: NOTHING(28)
- 28: EXACT <h>(30)
- 30: ANYOF(40)
- 40: EXACT <k>(42)
- 42: EOL(43)
- 43: END(0)
- anchored `de' at 1 floating `gh' at 3..2147483647 (checking floating)
- stclass `ANYOF' minlen 7
-
-The first line shows the pre-compiled form of the regex. The second
-shows the size of the compiled form (in arbitrary units, usually
-4-byte words) and the label I<id> of the first node that does a
-match.
-
-The last line (split into two lines above) contains optimizer
-information. In the example shown, the optimizer found that the match
-should contain a substring C<de> at offset 1, plus substring C<gh>
-at some offset between 3 and infinity. Moreover, when checking for
-these substrings (to abandon impossible matches quickly), Perl will check
-for the substring C<gh> before checking for the substring C<de>. The
-optimizer may also use the knowledge that the match starts (at the
-C<first> I<id>) with a character class, and the match cannot be
-shorter than 7 chars.
-
-The fields of interest which may appear in the last line are
-
-=over 4
-
-=item C<anchored> I<STRING> C<at> I<POS>
-
-=item C<floating> I<STRING> C<at> I<POS1..POS2>
-
-See above.
-
-=item C<matching floating/anchored>
-
-Which substring to check first.
-
-=item C<minlen>
-
-The minimal length of the match.
-
-=item C<stclass> I<TYPE>
-
-Type of first matching node.
-
-=item C<noscan>
-
-Don't scan for the found substrings.
-
-=item C<isall>
-
-Means that the optimizer info is all that the regular
-expression contains, and thus one does not need to enter the regex engine at
-all.
-
-=item C<GPOS>
-
-Set if the pattern contains C<\G>.
-
-=item C<plus>
-
-Set if the pattern starts with a repeated char (as in C<x+y>).
-
-=item C<implicit>
-
-Set if the pattern starts with C<.*>.
-
-=item C<with eval>
-
-Set if the pattern contain eval-groups, such as C<(?{ code })> and
-C<(??{ code })>.
-
-=item C<anchored(TYPE)>
-
-If the pattern may match only at a handful of places, (with C<TYPE>
-being C<BOL>, C<MBOL>, or C<GPOS>. See the table below.
-
-=back
-
-If a substring is known to match at end-of-line only, it may be
-followed by C<$>, as in C<floating `k'$>.
-
-The optimizer-specific info is used to avoid entering (a slow) regex
-engine on strings that will not definitely match. If C<isall> flag
-is set, a call to the regex engine may be avoided even when the optimizer
-found an appropriate place for the match.
-
-The rest of the output contains the list of I<nodes> of the compiled
-form of the regex. Each line has format
-
-C< >I<id>: I<TYPE> I<OPTIONAL-INFO> (I<next-id>)
-
-=head2 Types of nodes
-
-Here are the possible types, with short descriptions:
-
- # TYPE arg-description [num-args] [longjump-len] DESCRIPTION
-
- # Exit points
- END no End of program.
- SUCCEED no Return from a subroutine, basically.
-
- # Anchors:
- BOL no Match "" at beginning of line.
- MBOL no Same, assuming multiline.
- SBOL no Same, assuming singleline.
- EOS no Match "" at end of string.
- EOL no Match "" at end of line.
- MEOL no Same, assuming multiline.
- SEOL no Same, assuming singleline.
- BOUND no Match "" at any word boundary
- BOUNDL no Match "" at any word boundary
- NBOUND no Match "" at any word non-boundary
- NBOUNDL no Match "" at any word non-boundary
- GPOS no Matches where last m//g left off.
-
- # [Special] alternatives
- ANY no Match any one character (except newline).
- SANY no Match any one character.
- ANYOF sv Match character in (or not in) this class.
- ALNUM no Match any alphanumeric character
- ALNUML no Match any alphanumeric char in locale
- NALNUM no Match any non-alphanumeric character
- NALNUML no Match any non-alphanumeric char in locale
- SPACE no Match any whitespace character
- SPACEL no Match any whitespace char in locale
- NSPACE no Match any non-whitespace character
- NSPACEL no Match any non-whitespace char in locale
- DIGIT no Match any numeric character
- NDIGIT no Match any non-numeric character
-
- # 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.
- #
- BRANCH node Match this alternative, or the next...
-
- # BACK Normal "next" pointers all implicitly point forward; BACK
- # exists to make loop structures possible.
- # not used
- BACK no Match "", "next" ptr points backward.
-
- # Literals
- EXACT sv Match this string (preceded by length).
- EXACTF sv Match this string, folded (prec. by length).
- EXACTFL sv Match this string, folded in locale (w/len).
-
- # Do nothing
- NOTHING no Match empty string.
- # A variant of above which delimits a group, thus stops optimizations
- TAIL no Match empty string. Can jump here from outside.
-
- # 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.
- #
- STAR node Match this (simple) thing 0 or more times.
- PLUS node Match this (simple) thing 1 or more times.
-
- CURLY sv 2 Match this simple thing {n,m} times.
- CURLYN no 2 Match next-after-this simple thing
- # {n,m} times, set parens.
- CURLYM no 2 Match this medium-complex thing {n,m} times.
- CURLYX sv 2 Match this complex thing {n,m} times.
-
- # This terminator creates a loop structure for CURLYX
- WHILEM no Do curly processing and see if rest matches.
-
- # OPEN,CLOSE,GROUPP ...are numbered at compile time.
- OPEN num 1 Mark this point in input as start of #n.
- CLOSE num 1 Analogous to OPEN.
-
- REF num 1 Match some already matched string
- REFF num 1 Match already matched string, folded
- REFFL num 1 Match already matched string, folded in loc.
-
- # grouping assertions
- IFMATCH off 1 2 Succeeds if the following matches.
- UNLESSM off 1 2 Fails if the following matches.
- SUSPEND off 1 1 "Independent" sub-regex.
- IFTHEN off 1 1 Switch, should be preceded by switcher .
- GROUPP num 1 Whether the group matched.
-
- # Support for long regex
- LONGJMP off 1 1 Jump far away.
- BRANCHJ off 1 1 BRANCH with long offset.
-
- # The heavy worker
- EVAL evl 1 Execute some Perl code.
-
- # Modifiers
- MINMOD no Next operator is not greedy.
- LOGICAL no Next opcode should set the flag only.
-
- # This is not used yet
- RENUM off 1 1 Group with independently numbered parens.
-
- # This is not really a node, but an optimized away piece of a "long" node.
- # To simplify debugging output, we mark it as if it were a node
- OPTIMIZED off Placeholder for dump.
-
-=head2 Run-time output
-
-First of all, when doing a match, one may get no run-time output even
-if debugging is enabled. This means that the regex engine was never
-entered and that all of the job was therefore done by the optimizer.
-
-If the regex engine was entered, the output may look like this:
-
- Matching `[bc]d(ef*g)+h[ij]k$' against `abcdefg__gh__'
- Setting an EVAL scope, savestack=3
- 2 <ab> <cdefg__gh_> | 1: ANYOF
- 3 <abc> <defg__gh_> | 11: EXACT <d>
- 4 <abcd> <efg__gh_> | 13: CURLYX {1,32767}
- 4 <abcd> <efg__gh_> | 26: WHILEM
- 0 out of 1..32767 cc=effff31c
- 4 <abcd> <efg__gh_> | 15: OPEN1
- 4 <abcd> <efg__gh_> | 17: EXACT <e>
- 5 <abcde> <fg__gh_> | 19: STAR
- EXACT <f> can match 1 times out of 32767...
- Setting an EVAL scope, savestack=3
- 6 <bcdef> <g__gh__> | 22: EXACT <g>
- 7 <bcdefg> <__gh__> | 24: CLOSE1
- 7 <bcdefg> <__gh__> | 26: WHILEM
- 1 out of 1..32767 cc=effff31c
- Setting an EVAL scope, savestack=12
- 7 <bcdefg> <__gh__> | 15: OPEN1
- 7 <bcdefg> <__gh__> | 17: EXACT <e>
- restoring \1 to 4(4)..7
- failed, try continuation...
- 7 <bcdefg> <__gh__> | 27: NOTHING
- 7 <bcdefg> <__gh__> | 28: EXACT <h>
- failed...
- failed...
-
-The most significant information in the output is about the particular I<node>
-of the compiled regex that is currently being tested against the target string.
-The format of these lines is
-
-C< >I<STRING-OFFSET> <I<PRE-STRING>> <I<POST-STRING>> |I<ID>: I<TYPE>
-
-The I<TYPE> info is indented with respect to the backtracking level.
-Other incidental information appears interspersed within.
-
-=head1 Debugging Perl memory usage
-
-Perl is a profligate wastrel when it comes to memory use. There
-is a saying that to estimate memory usage of Perl, assume a reasonable
-algorithm for memory allocation, multiply that estimate by 10, and
-while you still may miss the mark, at least you won't be quite so
-astonished. This is not absolutely true, but may provide a good
-grasp of what happens.
-
-Assume that an integer cannot take less than 20 bytes of memory, a
-float cannot take less than 24 bytes, a string cannot take less
-than 32 bytes (all these examples assume 32-bit architectures, the
-result are quite a bit worse on 64-bit architectures). If a variable
-is accessed in two of three different ways (which require an integer,
-a float, or a string), the memory footprint may increase yet another
-20 bytes. A sloppy malloc(3) implementation can inflate these
-numbers dramatically.
-
-On the opposite end of the scale, a declaration like
-
- sub foo;
-
-may take up to 500 bytes of memory, depending on which release of Perl
-you're running.
-
-Anecdotal estimates of source-to-compiled code bloat suggest an
-eightfold increase. This means that the compiled form of reasonable
-(normally commented, properly indented etc.) code will take
-about eight times more space in memory than the code took
-on disk.
-
-There are two Perl-specific ways to analyze memory usage:
-$ENV{PERL_DEBUG_MSTATS} and B<-DL> command-line switch. The first
-is available only if Perl is compiled with Perl's malloc(); the
-second only if Perl was built with C<-DDEBUGGING>. See the
-instructions for how to do this in the F<INSTALL> podpage at
-the top level of the Perl source tree.
-
-=head2 Using C<$ENV{PERL_DEBUG_MSTATS}>
-
-If your perl is using Perl's malloc() and was compiled with the
-necessary switches (this is the default), then it will print memory
-usage statistics after compiling your code when C<< $ENV{PERL_DEBUG_MSTATS}
-> 1 >>, and before termination of the program when C<<
-$ENV{PERL_DEBUG_MSTATS} >= 1 >>. The report format is similar to
-the following example:
-
- $ PERL_DEBUG_MSTATS=2 perl -e "require Carp"
- Memory allocation statistics after compilation: (buckets 4(4)..8188(8192)
- 14216 free: 130 117 28 7 9 0 2 2 1 0 0
- 437 61 36 0 5
- 60924 used: 125 137 161 55 7 8 6 16 2 0 1
- 74 109 304 84 20
- Total sbrk(): 77824/21:119. Odd ends: pad+heads+chain+tail: 0+636+0+2048.
- Memory allocation statistics after execution: (buckets 4(4)..8188(8192)
- 30888 free: 245 78 85 13 6 2 1 3 2 0 1
- 315 162 39 42 11
- 175816 used: 265 176 1112 111 26 22 11 27 2 1 1
- 196 178 1066 798 39
- Total sbrk(): 215040/47:145. Odd ends: pad+heads+chain+tail: 0+2192+0+6144.
-
-It is possible to ask for such a statistic at arbitrary points in
-your execution using the mstat() function out of the standard
-Devel::Peek module.
-
-Here is some explanation of that format:
-
-=over 4
-
-=item C<buckets SMALLEST(APPROX)..GREATEST(APPROX)>
-
-Perl's malloc() uses bucketed allocations. Every request is rounded
-up to the closest bucket size available, and a bucket is taken from
-the pool of buckets of that size.
-
-The line above describes the limits of buckets currently in use.
-Each bucket has two sizes: memory footprint and the maximal size
-of user data that can fit into this bucket. Suppose in the above
-example that the smallest bucket were size 4. The biggest bucket
-would have usable size 8188, and the memory footprint would be 8192.
-
-In a Perl built for debugging, some buckets may have negative usable
-size. This means that these buckets cannot (and will not) be used.
-For larger buckets, the memory footprint may be one page greater
-than a power of 2. If so, case the corresponding power of two is
-printed in the C<APPROX> field above.
-
-=item Free/Used
-
-The 1 or 2 rows of numbers following that correspond to the number
-of buckets of each size between C<SMALLEST> and C<GREATEST>. In
-the first row, the sizes (memory footprints) of buckets are powers
-of two--or possibly one page greater. In the second row, if present,
-the memory footprints of the buckets are between the memory footprints
-of two buckets "above".
-
-For example, suppose under the previous example, the memory footprints
-were
-
- free: 8 16 32 64 128 256 512 1024 2048 4096 8192
- 4 12 24 48 80
-
-With non-C<DEBUGGING> perl, the buckets starting from C<128> have
-a 4-byte overhead, and thus a 8192-long bucket may take up to
-8188-byte allocations.
-
-=item C<Total sbrk(): SBRKed/SBRKs:CONTINUOUS>
-
-The first two fields give the total amount of memory perl sbrk(2)ed
-(ess-broken? :-) and number of sbrk(2)s used. The third number is
-what perl thinks about continuity of returned chunks. So long as
-this number is positive, malloc() will assume that it is probable
-that sbrk(2) will provide continuous memory.
-
-Memory allocated by external libraries is not counted.
-
-=item C<pad: 0>
-
-The amount of sbrk(2)ed memory needed to keep buckets aligned.
-
-=item C<heads: 2192>
-
-Although memory overhead of bigger buckets is kept inside the bucket, for
-smaller buckets, it is kept in separate areas. This field gives the
-total size of these areas.
-
-=item C<chain: 0>
-
-malloc() may want to subdivide a bigger bucket into smaller buckets.
-If only a part of the deceased bucket is left unsubdivided, the rest
-is kept as an element of a linked list. This field gives the total
-size of these chunks.
-
-=item C<tail: 6144>
-
-To minimize the number of sbrk(2)s, malloc() asks for more memory. This
-field gives the size of the yet unused part, which is sbrk(2)ed, but
-never touched.
-
-=back
-
-=head2 Example of using B<-DL> switch
-
-Below we show how to analyse memory usage by
-
- do 'lib/auto/POSIX/autosplit.ix';
-
-The file in question contains a header and 146 lines similar to
-
- sub getcwd;
-
-B<WARNING>: The discussion below supposes 32-bit architecture. In
-newer releases of Perl, memory usage of the constructs discussed
-here is greatly improved, but the story discussed below is a real-life
-story. This story is mercilessly terse, and assumes rather more than cursory
-knowledge of Perl internals. Type space to continue, `q' to quit.
-(Actually, you just want to skip to the next section.)
-
-Here is the itemized list of Perl allocations performed during parsing
-of this file:
-
- !!! "after" at test.pl line 3.
- Id subtot 4 8 12 16 20 24 28 32 36 40 48 56 64 72 80 80+
- 0 02 13752 . . . . 294 . . . . . . . . . . 4
- 0 54 5545 . . 8 124 16 . . . 1 1 . . . . . 3
- 5 05 32 . . . . . . . 1 . . . . . . . .
- 6 02 7152 . . . . . . . . . . 149 . . . . .
- 7 02 3600 . . . . . 150 . . . . . . . . . .
- 7 03 64 . -1 . 1 . . 2 . . . . . . . . .
- 7 04 7056 . . . . . . . . . . . . . . . 7
- 7 17 38404 . . . . . . . 1 . . 442 149 . . 147 .
- 9 03 2078 17 249 32 . . . . 2 . . . . . . . .
-
-
-To see this list, insert two C<warn('!...')> statements around the call:
-
- warn('!');
- do 'lib/auto/POSIX/autosplit.ix';
- warn('!!! "after"');
-
-and run it with Perl's B<-DL> option. The first warn() will print
-memory allocation info before parsing the file and will memorize
-the statistics at this point (we ignore what it prints). The second
-warn() prints increments with respect to these memorized data. This
-is the printout shown above.
-
-Different I<Id>s on the left correspond to different subsystems of
-the perl interpreter. They are just the first argument given to
-the perl memory allocation API named New(). To find what C<9 03>
-means, just B<grep> the perl source for C<903>. You'll find it in
-F<util.c>, function savepvn(). (I know, you wonder why we told you
-to B<grep> and then gave away the answer. That's because grepping
-the source is good for the soul.) This function is used to store
-a copy of an existing chunk of memory. Using a C debugger, one can
-see that the function was called either directly from gv_init() or
-via sv_magic(), and that gv_init() is called from gv_fetchpv()--which
-was itself called from newSUB(). Please stop to catch your breath now.
-
-B<NOTE>: To reach this point in the debugger and skip the calls to
-savepvn() during the compilation of the main program, you should
-set a C breakpoint
-in Perl_warn(), continue until this point is reached, and I<then> set
-a C breakpoint in Perl_savepvn(). Note that you may need to skip a
-handful of Perl_savepvn() calls that do not correspond to mass production
-of CVs (there are more C<903> allocations than 146 similar lines of
-F<lib/auto/POSIX/autosplit.ix>). Note also that C<Perl_> prefixes are
-added by macroization code in perl header files to avoid conflicts
-with external libraries.
-
-Anyway, we see that C<903> ids correspond to creation of globs, twice
-per glob - for glob name, and glob stringification magic.
-
-Here are explanations for other I<Id>s above:
-
-=over 4
-
-=item C<717>
-
-Creates bigger C<XPV*> structures. In the case above, it
-creates 3 C<AV>s per subroutine, one for a list of lexical variable
-names, one for a scratchpad (which contains lexical variables and
-C<targets>), and one for the array of scratchpads needed for
-recursion.
-
-It also creates a C<GV> and a C<CV> per subroutine, all called from
-start_subparse().
-
-=item C<002>
-
-Creates a C array corresponding to the C<AV> of scratchpads and the
-scratchpad itself. The first fake entry of this scratchpad is
-created though the subroutine itself is not defined yet.
-
-It also creates C arrays to keep data for the stash. This is one HV,
-but it grows; thus, there are 4 big allocations: the big chunks are not
-freed, but are kept as additional arenas for C<SV> allocations.
-
-=item C<054>
-
-Creates a C<HEK> for the name of the glob for the subroutine. This
-name is a key in a I<stash>.
-
-Big allocations with this I<Id> correspond to allocations of new
-arenas to keep C<HE>.
-
-=item C<602>
-
-Creates a C<GP> for the glob for the subroutine.
-
-=item C<702>
-
-Creates the C<MAGIC> for the glob for the subroutine.
-
-=item C<704>
-
-Creates I<arenas> which keep SVs.
-
-=back
-
-=head2 B<-DL> details
-
-If Perl is run with B<-DL> option, then warn()s that start with `!'
-behave specially. They print a list of I<categories> of memory
-allocations, and statistics of allocations of different sizes for
-these categories.
-
-If warn() string starts with
-
-=over 4
-
-=item C<!!!>
-
-print changed categories only, print the differences in counts of allocations.
-
-=item C<!!>
-
-print grown categories only; print the absolute values of counts, and totals.
-
-=item C<!>
-
-print nonempty categories, print the absolute values of counts and totals.
-
-=back
-
-=head2 Limitations of B<-DL> statistics
-
-If an extension or external library does not use the Perl API to
-allocate memory, such allocations are not counted.
-
-=head1 SEE ALSO
-
-L<perldebug>,
-L<perlguts>,
-L<perlrun>
-L<re>,
-and
-L<Devel::Dprof>.
diff --git a/contrib/perl5/pod/perldebtut.pod b/contrib/perl5/pod/perldebtut.pod
deleted file mode 100644
index e11102e..0000000
--- a/contrib/perl5/pod/perldebtut.pod
+++ /dev/null
@@ -1,721 +0,0 @@
-=head1 NAME
-
-perldebtut - Perl debugging tutorial
-
-=head1 DESCRIPTION
-
-A (very) lightweight introduction in the use of the perl debugger, and a
-pointer to existing, deeper sources of information on the subject of debugging
-perl programs.
-
-There's an extraordinary number of people out there who don't appear to know
-anything about using the perl debugger, though they use the language every
-day.
-This is for them.
-
-
-=head1 use strict
-
-First of all, there's a few things you can do to make your life a lot more
-straightforward when it comes to debugging perl programs, without using the
-debugger at all. To demonstrate, here's a simple script with a problem:
-
- #!/usr/bin/perl
-
- $var1 = 'Hello World'; # always wanted to do that :-)
- $var2 = "$varl\n";
-
- print $var2;
- exit;
-
-While this compiles and runs happily, it probably won't do what's expected,
-namely it doesn't print "Hello World\n" at all; It will on the other hand do
-exactly what it was told to do, computers being a bit that way inclined. That
-is, it will print out a newline character, and you'll get what looks like a
-blank line. It looks like there's 2 variables when (because of the typo)
-there's really 3:
-
- $var1 = 'Hello World'
- $varl = undef
- $var2 = "\n"
-
-To catch this kind of problem, we can force each variable to be declared
-before use by pulling in the strict module, by putting 'use strict;' after the
-first line of the script.
-
-Now when you run it, perl complains about the 3 undeclared variables and we
-get four error messages because one variable is referenced twice:
-
- Global symbol "$var1" requires explicit package name at ./t1 line 4.
- Global symbol "$var2" requires explicit package name at ./t1 line 5.
- Global symbol "$varl" requires explicit package name at ./t1 line 5.
- Global symbol "$var2" requires explicit package name at ./t1 line 7.
- Execution of ./hello aborted due to compilation errors.
-
-Luvverly! and to fix this we declare all variables explicitly and now our
-script looks like this:
-
- #!/usr/bin/perl
- use strict;
-
- my $var1 = 'Hello World';
- my $varl = '';
- my $var2 = "$varl\n";
-
- print $var2;
- exit;
-
-We then do (always a good idea) a syntax check before we try to run it again:
-
- > perl -c hello
- hello syntax OK
-
-And now when we run it, we get "\n" still, but at least we know why. Just
-getting this script to compile has exposed the '$varl' (with the letter 'l)
-variable, and simply changing $varl to $var1 solves the problem.
-
-
-=head1 Looking at data and -w and w
-
-Ok, but how about when you want to really see your data, what's in that
-dynamic variable, just before using it?
-
- #!/usr/bin/perl
- use strict;
-
- my $key = 'welcome';
- my %data = (
- 'this' => qw(that),
- 'tom' => qw(and jerry),
- 'welcome' => q(Hello World),
- 'zip' => q(welcome),
- );
- my @data = keys %data;
-
- print "$data{$key}\n";
- exit;
-
-Looks OK, after it's been through the syntax check (perl -c scriptname), we
-run it and all we get is a blank line again! Hmmmm.
-
-One common debugging approach here, would be to liberally sprinkle a few print
-statements, to add a check just before we print out our data, and another just
-after:
-
- print "All OK\n" if grep($key, keys %data);
- print "$data{$key}\n";
- print "done: '$data{$key}'\n";
-
-And try again:
-
- > perl data
- All OK
-
- done: ''
-
-After much staring at the same piece of code and not seeing the wood for the
-trees for some time, we get a cup of coffee and try another approach. That
-is, we bring in the cavalry by giving perl the 'B<-d>' switch on the command
-line:
-
- > perl -d data
- Default die handler restored.
-
- Loading DB routines from perl5db.pl version 1.07
- Editor support available.
-
- Enter h or `h h' for help, or `man perldebug' for more help.
-
- main::(./data:4): my $key = 'welcome';
-
-Now, what we've done here is to launch the built-in perl debugger on our
-script. It's stopped at the first line of executable code and is waiting for
-input.
-
-Before we go any further, you'll want to know how to quit the debugger: use
-just the letter 'B<q>', not the words 'quit' or 'exit':
-
- DB<1> q
- >
-
-That's it, you're back on home turf again.
-
-
-=head1 help
-
-Fire the debugger up again on your script and we'll look at the help menu.
-There's a couple of ways of calling help: a simple 'B<h>' will get you a long
-scrolled list of help, 'B<|h>' (pipe-h) will pipe the help through your pager
-('more' or 'less' probably), and finally, 'B<h h>' (h-space-h) will give you a
-helpful mini-screen snapshot:
-
- DB<1> h h
- List/search source lines: Control script execution:
- l [ln|sub] List source code T Stack trace
- - or . List previous/current line s [expr] Single step [in expr]
- w [line] List around line n [expr] Next, steps over subs
- f filename View source in file <CR/Enter> Repeat last n or s
- /pattern/ ?patt? Search forw/backw r Return from subroutine
- v Show versions of modules c [ln|sub] Continue until position
- Debugger controls: L List
-break/watch/actions
- O [...] Set debugger options t [expr] Toggle trace [trace expr]
- <[<]|{[{]|>[>] [cmd] Do pre/post-prompt b [ln|event|sub] [cnd] Set breakpoint
- ! [N|pat] Redo a previous command d [ln] or D Delete a/all breakpoints
- H [-num] Display last num commands a [ln] cmd Do cmd before line
- = [a val] Define/list an alias W expr Add a watch expression
- h [db_cmd] Get help on command A or W Delete all actions/watch
- |[|]db_cmd Send output to pager ![!] syscmd Run cmd in a subprocess
- q or ^D Quit R Attempt a restart
- Data Examination: expr Execute perl code, also see: s,n,t expr
- x|m expr Evals expr in list context, dumps the result or lists methods.
- p expr Print expression (uses script's current package).
- S [[!]pat] List subroutine names [not] matching pattern
- V [Pk [Vars]] List Variables in Package. Vars can be ~pattern or !pattern.
- X [Vars] Same as "V current_package [Vars]".
- For more help, type h cmd_letter, or run man perldebug for all docs.
-
-More confusing options than you can shake a big stick at! It's not as bad as
-it looks and it's very useful to know more about all of it, and fun too!
-
-There's a couple of useful ones to know about straight away. You wouldn't
-think we're using any libraries at all at the moment, but 'B<v>' will show
-which modules are currently loaded, by the debugger as well your script.
-'B<V>' and 'B<X>' show variables in the program by package scope and can be
-constrained by pattern. 'B<m>' shows methods and 'B<S>' shows all subroutines
-(by pattern):
-
- DB<2>S str
- dumpvar::stringify
- strict::bits
- strict::import
- strict::unimport
-
-Using 'X' and cousins requires you not to use the type identifiers ($@%), just
-the 'name':
-
- DM<3>X ~err
- FileHandle(stderr) => fileno(2)
-
-Remember we're in our tiny program with a problem, we should have a look at
-where we are, and what our data looks like. First of all let's have a window
-on our present position (the first line of code in this case), via the letter
-'B<w>':
-
- DB<4> w
- 1 #!/usr/bin/perl
- 2: use strict;
- 3
- 4==> my $key = 'welcome';
- 5: my %data = (
- 6 'this' => qw(that),
- 7 'tom' => qw(and jerry),
- 8 'welcome' => q(Hello World),
- 9 'zip' => q(welcome),
- 10 );
-
-At line number 4 is a helpful pointer, that tells you where you are now. To
-see more code, type 'w' again:
-
- DB<4> w
- 8 'welcome' => q(Hello World),
- 9 'zip' => q(welcome),
- 10 );
- 11: my @data = keys %data;
- 12: print "All OK\n" if grep($key, keys %data);
- 13: print "$data{$key}\n";
- 14: print "done: '$data{$key}'\n";
- 15: exit;
-
-And if you wanted to list line 5 again, type 'l 5', (note the space):
-
- DB<4> l 5
- 5: my %data = (
-
-In this case, there's not much to see, but of course normally there's pages of
-stuff to wade through, and 'l' can be very useful. To reset your view to the
-line we're about to execute, type a lone period '.':
-
- DB<5> .
- main::(./data_a:4): my $key = 'welcome';
-
-The line shown is the one that is about to be executed B<next>, it hasn't
-happened yet. So while we can print a variable with the letter 'B<p>', at
-this point all we'd get is an empty (undefined) value back. What we need to
-do is to step through the next executable statement with an 'B<s>':
-
- DB<6> s
- main::(./data_a:5): my %data = (
- main::(./data_a:6): 'this' => qw(that),
- main::(./data_a:7): 'tom' => qw(and jerry),
- main::(./data_a:8): 'welcome' => q(Hello World),
- main::(./data_a:9): 'zip' => q(welcome),
- main::(./data_a:10): );
-
-Now we can have a look at that first ($key) variable:
-
- DB<7> p $key
- welcome
-
-line 13 is where the action is, so let's continue down to there via the letter
-'B<c>', which by the way, inserts a 'one-time-only' breakpoint at the given
-line or sub routine:
-
- DB<8> c 13
- All OK
- main::(./data_a:13): print "$data{$key}\n";
-
-We've gone past our check (where 'All OK' was printed) and have stopped just
-before the meat of our task. We could try to print out a couple of variables
-to see what is happening:
-
- DB<9> p $data{$key}
-
-Not much in there, lets have a look at our hash:
-
- DB<10> p %data
- Hello Worldziptomandwelcomejerrywelcomethisthat
-
- DB<11> p keys %data
- Hello Worldtomwelcomejerrythis
-
-Well, this isn't very easy to read, and using the helpful manual (B<h h>), the
-'B<x>' command looks promising:
-
- DB<12> x %data
- 0 'Hello World'
- 1 'zip'
- 2 'tom'
- 3 'and'
- 4 'welcome'
- 5 undef
- 6 'jerry'
- 7 'welcome'
- 8 'this'
- 9 'that'
-
-That's not much help, a couple of welcomes in there, but no indication of
-which are keys, and which are values, it's just a listed array dump and, in
-this case, not particularly helpful. The trick here, is to use a B<reference>
-to the data structure:
-
- DB<13> x \%data
- 0 HASH(0x8194bc4)
- 'Hello World' => 'zip'
- 'jerry' => 'welcome'
- 'this' => 'that'
- 'tom' => 'and'
- 'welcome' => undef
-
-The reference is truly dumped and we can finally see what we're dealing with.
-Our quoting was perfectly valid but wrong for our purposes, with 'and jerry'
-being treated as 2 separate words rather than a phrase, thus throwing the
-evenly paired hash structure out of alignment.
-
-The 'B<-w>' switch would have told us about this, had we used it at the start,
-and saved us a lot of trouble:
-
- > perl -w data
- Odd number of elements in hash assignment at ./data line 5.
-
-We fix our quoting: 'tom' => q(and jerry), and run it again, this time we get
-our expected output:
-
- > perl -w data
- Hello World
-
-
-While we're here, take a closer look at the 'B<x>' command, it's really useful
-and will merrily dump out nested references, complete objects, partial objects
-- just about whatever you throw at it:
-
-Let's make a quick object and x-plode it, first we'll start the the debugger:
-it wants some form of input from STDIN, so we give it something non-commital,
-a zero:
-
- > perl -de 0
- Default die handler restored.
-
- Loading DB routines from perl5db.pl version 1.07
- Editor support available.
-
- Enter h or `h h' for help, or `man perldebug' for more help.
-
- main::(-e:1): 0
-
-Now build an on-the-fly object over a couple of lines (note the backslash):
-
- DB<1> $obj = bless({'unique_id'=>'123', 'attr'=> \
- cont: {'col' => 'black', 'things' => [qw(this that etc)]}}, 'MY_class')
-
-And let's have a look at it:
-
- DB<2> x $obj
- 0 MY_class=HASH(0x828ad98)
- 'attr' => HASH(0x828ad68)
- 'col' => 'black'
- 'things' => ARRAY(0x828abb8)
- 0 'this'
- 1 'that'
- 2 'etc'
- 'unique_id' => 123
- DB<3>
-
-Useful, huh? You can eval nearly anything in there, and experiment with bits
-of code or regexes until the cows come home:
-
- DB<3> @data = qw(this that the other atheism leather theory scythe)
-
- DB<4> p 'saw -> '.($cnt += map { print "\t:\t$_\n" } grep(/the/, sort @data))
- atheism
- leather
- other
- scythe
- the
- theory
- saw -> 6
-
-If you want to see the command History, type an 'B<H>':
-
- DB<5> H
- 4: p 'saw -> '.($cnt += map { print "\t:\t$_\n" } grep(/the/, sort @data))
- 3: @data = qw(this that the other atheism leather theory scythe)
- 2: x $obj
- 1: $obj = bless({'unique_id'=>'123', 'attr'=>
- {'col' => 'black', 'things' => [qw(this that etc)]}}, 'MY_class')
- DB<5>
-
-And if you want to repeat any previous command, use the exclamation: 'B<!>':
-
- DB<5> !4
- p 'saw -> '.($cnt += map { print "$_\n" } grep(/the/, sort @data))
- atheism
- leather
- other
- scythe
- the
- theory
- saw -> 12
-
-For more on references see L<perlref> and L<perlreftut>
-
-
-=head1 Stepping through code
-
-Here's a simple program which converts between Celsius and Fahrenheit, it too
-has a problem:
-
- #!/usr/bin/perl -w
- use strict;
-
- my $arg = $ARGV[0] || '-c20';
-
- if ($arg =~ /^\-(c|f)((\-|\+)*\d+(\.\d+)*)$/) {
- my ($deg, $num) = ($1, $2);
- my ($in, $out) = ($num, $num);
- if ($deg eq 'c') {
- $deg = 'f';
- $out = &c2f($num);
- } else {
- $deg = 'c';
- $out = &f2c($num);
- }
- $out = sprintf('%0.2f', $out);
- $out =~ s/^((\-|\+)*\d+)\.0+$/$1/;
- print "$out $deg\n";
- } else {
- print "Usage: $0 -[c|f] num\n";
- }
- exit;
-
- sub f2c {
- my $f = shift;
- my $c = 5 * $f - 32 / 9;
- return $c;
- }
-
- sub c2f {
- my $c = shift;
- my $f = 9 * $c / 5 + 32;
- return $f;
- }
-
-
-For some reason, the Fahrenheit to Celsius conversion fails to return the
-expected output. This is what it does:
-
- > temp -c0.72
- 33.30 f
-
- > temp -f33.3
- 162.94 c
-
-Not very consistent! We'll set a breakpoint in the code manually and run it
-under the debugger to see what's going on. A breakpoint is a flag, to which
-the debugger will run without interruption, when it reaches the breakpoint, it
-will stop execution and offer a prompt for further interaction. In normal
-use, these debugger commands are completely ignored, and they are safe - if a
-little messy, to leave in production code.
-
- my ($in, $out) = ($num, $num);
- $DB::single=2; # insert at line 9!
- if ($deg eq 'c')
- ...
-
- > perl -d temp -f33.3
- Default die handler restored.
-
- Loading DB routines from perl5db.pl version 1.07
- Editor support available.
-
- Enter h or `h h' for help, or `man perldebug' for more help.
-
- main::(temp:4): my $arg = $ARGV[0] || '-c100';
-
-We'll simply continue down to our pre-set breakpoint with a 'B<c>':
-
- DB<1> c
- main::(temp:10): if ($deg eq 'c') {
-
-Followed by a window command to see where we are:
-
- DB<1> w
- 7: my ($deg, $num) = ($1, $2);
- 8: my ($in, $out) = ($num, $num);
- 9: $DB::single=2;
- 10==> if ($deg eq 'c') {
- 11: $deg = 'f';
- 12: $out = &c2f($num);
- 13 } else {
- 14: $deg = 'c';
- 15: $out = &f2c($num);
- 16 }
-
-And a print to show what values we're currently using:
-
- DB<1> p $deg, $num
- f33.3
-
-We can put another break point on any line beginning with a colon, we'll use
-line 17 as that's just as we come out of the subroutine, and we'd like to
-pause there later on:
-
- DB<2> b 17
-
-There's no feedback from this, but you can see what breakpoints are set by
-using the list 'L' command:
-
- DB<3> L
- temp:
- 17: print "$out $deg\n";
- break if (1)
-
-Note that to delete a breakpoint you use 'd' or 'D'.
-
-Now we'll continue down into our subroutine, this time rather than by line
-number, we'll use the subroutine name, followed by the now familiar 'w':
-
- DB<3> c f2c
- main::f2c(temp:30): my $f = shift;
-
- DB<4> w
- 24: exit;
- 25
- 26 sub f2c {
- 27==> my $f = shift;
- 28: my $c = 5 * $f - 32 / 9;
- 29: return $c;
- 30 }
- 31
- 32 sub c2f {
- 33: my $c = shift;
-
-
-Note that if there was a subroutine call between us and line 29, and we wanted
-to B<single-step> through it, we could use the 'B<s>' command, and to step
-over it we would use 'B<n>' which would execute the sub, but not descend into
-it for inspection. In this case though, we simply continue down to line 29:
-
- DB<4> c 29
- main::f2c(temp:29): return $c;
-
-And have a look at the return value:
-
- DB<5> p $c
- 162.944444444444
-
-This is not the right answer at all, but the sum looks correct. I wonder if
-it's anything to do with operator precedence? We'll try a couple of other
-possibilities with our sum:
-
- DB<6> p (5 * $f - 32 / 9)
- 162.944444444444
-
- DB<7> p 5 * $f - (32 / 9)
- 162.944444444444
-
- DB<8> p (5 * $f) - 32 / 9
- 162.944444444444
-
- DB<9> p 5 * ($f - 32) / 9
- 0.722222222222221
-
-:-) that's more like it! Ok, now we can set our return variable and we'll
-return out of the sub with an 'r':
-
- DB<10> $c = 5 * ($f - 32) / 9
-
- DB<11> r
- scalar context return from main::f2c: 0.722222222222221
-
-Looks good, let's just continue off the end of the script:
-
- DB<12> c
- 0.72 c
- Debugged program terminated. Use q to quit or R to restart,
- use O inhibit_exit to avoid stopping after program termination,
- h q, h R or h O to get additional info.
-
-A quick fix to the offending line (insert the missing parentheses) in the
-actual program and we're finished.
-
-
-=head1 Placeholder for a, w, t, T
-
-Actions, watch variables, stack traces etc.: on the TODO list.
-
- a
-
- W
-
- t
-
- T
-
-
-=head1 REGULAR EXPRESSIONS
-
-Ever wanted to know what a regex looked like? You'll need perl compiled with
-the DEBUGGING flag for this one:
-
- > perl -Dr -e '/^pe(a)*rl$/i'
- Compiling REx `^pe(a)*rl$'
- size 17 first at 2
- rarest char
- at 0
- 1: BOL(2)
- 2: EXACTF <pe>(4)
- 4: CURLYN[1] {0,32767}(14)
- 6: NOTHING(8)
- 8: EXACTF <a>(0)
- 12: WHILEM(0)
- 13: NOTHING(14)
- 14: EXACTF <rl>(16)
- 16: EOL(17)
- 17: END(0)
- floating `'$ at 4..2147483647 (checking floating) stclass `EXACTF <pe>'
-anchored(BOL) minlen 4
- Omitting $` $& $' support.
-
- EXECUTING...
-
- Freeing REx: `^pe(a)*rl$'
-
-Did you really want to know? :-)
-For more gory details on getting regular expressions to work, have a look at
-L<perlre>, L<perlretut>, and to decode the mysterious labels (BOL and CURLYN,
-etc. above), see L<perldebguts>.
-
-
-=head1 OUTPUT TIPS
-
-To get all the output from your error log, and not miss any messages via
-helpful operating system buffering, insert a line like this, at the start of
-your script:
-
- $|=1;
-
-To watch the tail of a dynamically growing logfile, (from the command line):
-
- tail -f $error_log
-
-Wrapping all die calls in a handler routine can be useful to see how, and from
-where, they're being called, L<perlvar> has more information:
-
- BEGIN { $SIG{__DIE__} = sub { require Carp; Carp::confess(@_) } }
-
-Various useful techniques for the redirection of STDOUT and STDERR filehandles
-are explained in L<perlopentut> and L<perlfaq8>.
-
-
-=head1 CGI
-
-Just a quick hint here for all those CGI programmers who can't figure out how
-on earth to get past that 'waiting for input' prompt, when running their CGI
-script from the command-line, try something like this:
-
- > perl -d my_cgi.pl -nodebug
-
-Of course L<CGI> and L<perlfaq9> will tell you more.
-
-
-=head1 GUIs
-
-The command line interface is tightly integrated with an B<emacs> extension
-and there's a B<vi> interface too.
-
-You don't have to do this all on the command line, though, there are a few GUI
-options out there. The nice thing about these is you can wave a mouse over a
-variable and a dump of it's data will appear in an appropriate window, or in a
-popup balloon, no more tiresome typing of 'x $varname' :-)
-
-In particular have a hunt around for the following:
-
-B<ptkdb> perlTK based wrapper for the built-in debugger
-
-B<ddd> data display debugger
-
-B<PerlDevKit> and B<PerlBuilder> are NT specific
-
-NB. (more info on these and others would be appreciated).
-
-
-=head1 SUMMARY
-
-We've seen how to encourage good coding practices with B<use strict> and
-B<-w>. We can run the perl debugger B<perl -d scriptname> to inspect your
-data from within the perl debugger with the B<p> and B<x> commands. You can
-walk through your code, set breakpoints with B<b> and step through that code
-with B<s> or B<n>, continue with B<c> and return from a sub with B<r>. Fairly
-intuitive stuff when you get down to it.
-
-There is of course lots more to find out about, this has just scratched the
-surface. The best way to learn more is to use perldoc to find out more about
-the language, to read the on-line help (L<perldebug> is probably the next
-place to go), and of course, experiment.
-
-
-=head1 SEE ALSO
-
-L<perldebug>,
-L<perldebguts>,
-L<perldiag>,
-L<dprofpp>,
-L<perlrun>
-
-
-=head1 AUTHOR
-
-Richard Foley <richard@rfi.net> Copyright (c) 2000
-
-
-=head1 CONTRIBUTORS
-
-Various people have made helpful suggestions and contributions, in particular:
-
-Ronald J Kimball <rjk@linguist.dartmouth.edu>
-
-Hugo van der Sanden <hv@crypt0.demon.co.uk>
-
-Peter Scott <Peter@PSDT.com>
-
diff --git a/contrib/perl5/pod/perldebug.pod b/contrib/perl5/pod/perldebug.pod
deleted file mode 100644
index 0aff91a..0000000
--- a/contrib/perl5/pod/perldebug.pod
+++ /dev/null
@@ -1,956 +0,0 @@
-=head1 NAME
-
-perldebug - Perl debugging
-
-=head1 DESCRIPTION
-
-First of all, have you tried using the B<-w> switch?
-
-=head1 The Perl Debugger
-
-If you invoke Perl with the B<-d> switch, your script runs under the
-Perl source debugger. This works like an interactive Perl
-environment, prompting for debugger commands that let you examine
-source code, set breakpoints, get stack backtraces, change the values of
-variables, etc. This is so convenient that you often fire up
-the debugger all by itself just to test out Perl constructs
-interactively to see what they do. For example:
-
- $ perl -d -e 42
-
-In Perl, the debugger is not a separate program the way it usually is in the
-typical compiled environment. Instead, the B<-d> flag tells the compiler
-to insert source information into the parse trees it's about to hand off
-to the interpreter. That means your code must first compile correctly
-for the debugger to work on it. Then when the interpreter starts up, it
-preloads a special Perl library file containing the debugger.
-
-The program will halt I<right before> the first run-time executable
-statement (but see below regarding compile-time statements) and ask you
-to enter a debugger command. Contrary to popular expectations, whenever
-the debugger halts and shows you a line of code, it always displays the
-line it's I<about> to execute, rather than the one it has just executed.
-
-Any command not recognized by the debugger is directly executed
-(C<eval>'d) as Perl code in the current package. (The debugger
-uses the DB package for keeping its own state information.)
-
-For any text entered at the debugger prompt, leading and trailing whitespace
-is first stripped before further processing. If a debugger command
-coincides with some function in your own program, merely precede the
-function with something that doesn't look like a debugger command, such
-as a leading C<;> or perhaps a C<+>, or by wrapping it with parentheses
-or braces.
-
-=head2 Debugger Commands
-
-The debugger understands the following commands:
-
-=over 12
-
-=item h [command]
-
-Prints out a help message.
-
-If you supply another debugger command as an argument to the C<h> command,
-it prints out the description for just that command. The special
-argument of C<h h> produces a more compact help listing, designed to fit
-together on one screen.
-
-If the output of the C<h> command (or any command, for that matter) scrolls
-past your screen, precede the command with a leading pipe symbol so
-that it's run through your pager, as in
-
- DB> |h
-
-You may change the pager which is used via C<O pager=...> command.
-
-=item p expr
-
-Same as C<print {$DB::OUT} expr> in the current package. In particular,
-because this is just Perl's own C<print> function, this means that nested
-data structures and objects are not dumped, unlike with the C<x> command.
-
-The C<DB::OUT> filehandle is opened to F</dev/tty>, regardless of
-where STDOUT may be redirected to.
-
-=item x expr
-
-Evaluates its expression in list context and dumps out the result
-in a pretty-printed fashion. Nested data structures are printed out
-recursively, unlike the real C<print> function in Perl.
-See L<Dumpvalue> if you'd like to do this yourself.
-
-The output format is governed by multiple options described under
-L<"Configurable Options">.
-
-=item V [pkg [vars]]
-
-Display all (or some) variables in package (defaulting to C<main>)
-using a data pretty-printer (hashes show their keys and values so
-you see what's what, control characters are made printable, etc.).
-Make sure you don't put the type specifier (like C<$>) there, just
-the symbol names, like this:
-
- V DB filename line
-
-Use C<~pattern> and C<!pattern> for positive and negative regexes.
-
-This is similar to calling the C<x> command on each applicable var.
-
-=item X [vars]
-
-Same as C<V currentpackage [vars]>.
-
-=item T
-
-Produce a stack backtrace. See below for details on its output.
-
-=item s [expr]
-
-Single step. Executes until the beginning of another
-statement, descending into subroutine calls. If an expression is
-supplied that includes function calls, it too will be single-stepped.
-
-=item n [expr]
-
-Next. Executes over subroutine calls, until the beginning
-of the next statement. If an expression is supplied that includes
-function calls, those functions will be executed with stops before
-each statement.
-
-=item r
-
-Continue until the return from the current subroutine.
-Dump the return value if the C<PrintRet> option is set (default).
-
-=item <CR>
-
-Repeat last C<n> or C<s> command.
-
-=item c [line|sub]
-
-Continue, optionally inserting a one-time-only breakpoint
-at the specified line or subroutine.
-
-=item l
-
-List next window of lines.
-
-=item l min+incr
-
-List C<incr+1> lines starting at C<min>.
-
-=item l min-max
-
-List lines C<min> through C<max>. C<l -> is synonymous to C<->.
-
-=item l line
-
-List a single line.
-
-=item l subname
-
-List first window of lines from subroutine. I<subname> may
-be a variable that contains a code reference.
-
-=item -
-
-List previous window of lines.
-
-=item w [line]
-
-List window (a few lines) around the current line.
-
-=item .
-
-Return the internal debugger pointer to the line last
-executed, and print out that line.
-
-=item f filename
-
-Switch to viewing a different file or C<eval> statement. If I<filename>
-is not a full pathname found in the values of %INC, it is considered
-a regex.
-
-C<eval>ed strings (when accessible) are considered to be filenames:
-C<f (eval 7)> and C<f eval 7\b> access the body of the 7th C<eval>ed string
-(in the order of execution). The bodies of the currently executed C<eval>
-and of C<eval>ed strings that define subroutines are saved and thus
-accessible.
-
-=item /pattern/
-
-Search forwards for pattern (a Perl regex); final / is optional.
-
-=item ?pattern?
-
-Search backwards for pattern; final ? is optional.
-
-=item L
-
-List all breakpoints and actions.
-
-=item S [[!]regex]
-
-List subroutine names [not] matching the regex.
-
-=item t
-
-Toggle trace mode (see also the C<AutoTrace> option).
-
-=item t expr
-
-Trace through execution of C<expr>.
-See L<perldebguts/"Frame Listing Output Examples"> for examples.
-
-=item b [line] [condition]
-
-Set a breakpoint before the given line. If I<line> is omitted, set a
-breakpoint on the line about to be executed. If a condition
-is specified, it's evaluated each time the statement is reached: a
-breakpoint is taken only if the condition is true. Breakpoints may
-only be set on lines that begin an executable statement. Conditions
-don't use C<if>:
-
- b 237 $x > 30
- b 237 ++$count237 < 11
- b 33 /pattern/i
-
-=item b subname [condition]
-
-Set a breakpoint before the first line of the named subroutine. I<subname> may
-be a variable containing a code reference (in this case I<condition>
-is not supported).
-
-=item b postpone subname [condition]
-
-Set a breakpoint at first line of subroutine after it is compiled.
-
-=item b load filename
-
-Set a breakpoint before the first executed line of the I<filename>,
-which should be a full pathname found amongst the %INC values.
-
-=item b compile subname
-
-Sets a breakpoint before the first statement executed after the specified
-subroutine is compiled.
-
-=item d [line]
-
-Delete a breakpoint from the specified I<line>. If I<line> is omitted, deletes
-the breakpoint from the line about to be executed.
-
-=item D
-
-Delete all installed breakpoints.
-
-=item a [line] command
-
-Set an action to be done before the line is executed. If I<line> is
-omitted, set an action on the line about to be executed.
-The sequence of steps taken by the debugger is
-
- 1. check for a breakpoint at this line
- 2. print the line if necessary (tracing)
- 3. do any actions associated with that line
- 4. prompt user if at a breakpoint or in single-step
- 5. evaluate line
-
-For example, this will print out $foo every time line
-53 is passed:
-
- a 53 print "DB FOUND $foo\n"
-
-=item a [line]
-
-Delete an action from the specified line. If I<line> is omitted, delete
-the action on the line that is about to be executed.
-
-=item A
-
-Delete all installed actions.
-
-=item W expr
-
-Add a global watch-expression. We hope you know what one of these
-is, because they're supposed to be obvious. B<WARNING>: It is far
-too easy to destroy your watch expressions by accidentally omitting
-the I<expr>.
-
-=item W
-
-Delete all watch-expressions.
-
-=item O booloption ...
-
-Set each listed Boolean option to the value C<1>.
-
-=item O anyoption? ...
-
-Print out the value of one or more options.
-
-=item O option=value ...
-
-Set the value of one or more options. If the value has internal
-whitespace, it should be quoted. For example, you could set C<O
-pager="less -MQeicsNfr"> to call B<less> with those specific options.
-You may use either single or double quotes, but if you do, you must
-escape any embedded instances of same sort of quote you began with,
-as well as any escaping any escapes that immediately precede that
-quote but which are not meant to escape the quote itself. In other
-words, you follow single-quoting rules irrespective of the quote;
-eg: C<O option='this isn\'t bad'> or C<O option="She said, \"Isn't
-it?\"">.
-
-For historical reasons, the C<=value> is optional, but defaults to
-1 only where it is safe to do so--that is, mostly for Boolean
-options. It is always better to assign a specific value using C<=>.
-The C<option> can be abbreviated, but for clarity probably should
-not be. Several options can be set together. See L<"Configurable Options">
-for a list of these.
-
-=item < ?
-
-List out all pre-prompt Perl command actions.
-
-=item < [ command ]
-
-Set an action (Perl command) to happen before every debugger prompt.
-A multi-line command may be entered by backslashing the newlines.
-B<WARNING> If C<command> is missing, all actions are wiped out!
-
-=item << command
-
-Add an action (Perl command) to happen before every debugger prompt.
-A multi-line command may be entered by backwhacking the newlines.
-
-=item > ?
-
-List out post-prompt Perl command actions.
-
-=item > command
-
-Set an action (Perl command) to happen after the prompt when you've
-just given a command to return to executing the script. A multi-line
-command may be entered by backslashing the newlines (we bet you
-couldn't've guessed this by now). B<WARNING> If C<command> is
-missing, all actions are wiped out!
-
-=item >> command
-
-Adds an action (Perl command) to happen after the prompt when you've
-just given a command to return to executing the script. A multi-line
-command may be entered by backslashing the newlines.
-
-=item { ?
-
-List out pre-prompt debugger commands.
-
-=item { [ command ]
-
-Set an action (debugger command) to happen before every debugger prompt.
-A multi-line command may be entered in the customary fashion.
-B<WARNING> If C<command> is missing, all actions are wiped out!
-
-Because this command is in some senses new, a warning is issued if
-you appear to have accidentally entered a block instead. If that's
-what you mean to do, write it as with C<;{ ... }> or even
-C<do { ... }>.
-
-=item {{ command
-
-Add an action (debugger command) to happen before every debugger prompt.
-A multi-line command may be entered, if you can guess how: see above.
-
-=item ! number
-
-Redo a previous command (defaults to the previous command).
-
-=item ! -number
-
-Redo number'th previous command.
-
-=item ! pattern
-
-Redo last command that started with pattern.
-See C<O recallCommand>, too.
-
-=item !! cmd
-
-Run cmd in a subprocess (reads from DB::IN, writes to DB::OUT) See
-C<O shellBang>, also. Note that the user's current shell (well,
-their C<$ENV{SHELL}> variable) will be used, which can interfere
-with proper interpretation of exit status or signal and coredump
-information.
-
-=item H -number
-
-Display last n commands. Only commands longer than one character are
-listed. If I<number> is omitted, list them all.
-
-=item q or ^D
-
-Quit. ("quit" doesn't work for this, unless you've made an alias)
-This is the only supported way to exit the debugger, though typing
-C<exit> twice might work.
-
-Set the C<inhibit_exit> option to 0 if you want to be able to step
-off the end the script. You may also need to set $finished to 0
-if you want to step through global destruction.
-
-=item R
-
-Restart the debugger by C<exec()>ing a new session. We try to maintain
-your history across this, but internal settings and command-line options
-may be lost.
-
-The following setting are currently preserved: history, breakpoints,
-actions, debugger options, and the Perl command-line
-options B<-w>, B<-I>, and B<-e>.
-
-=item |dbcmd
-
-Run the debugger command, piping DB::OUT into your current pager.
-
-=item ||dbcmd
-
-Same as C<|dbcmd> but DB::OUT is temporarily C<select>ed as well.
-
-=item = [alias value]
-
-Define a command alias, like
-
- = quit q
-
-or list current aliases.
-
-=item command
-
-Execute command as a Perl statement. A trailing semicolon will be
-supplied. If the Perl statement would otherwise be confused for a
-Perl debugger, use a leading semicolon, too.
-
-=item m expr
-
-List which methods may be called on the result of the evaluated
-expression. The expression may evaluated to a reference to a
-blessed object, or to a package name.
-
-=item man [manpage]
-
-Despite its name, this calls your system's default documentation
-viewer on the given page, or on the viewer itself if I<manpage> is
-omitted. If that viewer is B<man>, the current C<Config> information
-is used to invoke B<man> using the proper MANPATH or S<B<-M>
-I<manpath>> option. Failed lookups of the form C<XXX> that match
-known manpages of the form I<perlXXX> will be retried. This lets
-you type C<man debug> or C<man op> from the debugger.
-
-On systems traditionally bereft of a usable B<man> command, the
-debugger invokes B<perldoc>. Occasionally this determination is
-incorrect due to recalcitrant vendors or rather more felicitously,
-to enterprising users. If you fall into either category, just
-manually set the $DB::doccmd variable to whatever viewer to view
-the Perl documentation on your system. This may be set in an rc
-file, or through direct assignment. We're still waiting for a
-working example of something along the lines of:
-
- $DB::doccmd = 'netscape -remote http://something.here/';
-
-=back
-
-=head2 Configurable Options
-
-The debugger has numerous options settable using the C<O> command,
-either interactively or from the environment or an rc file.
-(./.perldb or ~/.perldb under Unix.)
-
-
-=over 12
-
-=item C<recallCommand>, C<ShellBang>
-
-The characters used to recall command or spawn shell. By
-default, both are set to C<!>, which is unfortunate.
-
-=item C<pager>
-
-Program to use for output of pager-piped commands (those beginning
-with a C<|> character.) By default, C<$ENV{PAGER}> will be used.
-Because the debugger uses your current terminal characteristics
-for bold and underlining, if the chosen pager does not pass escape
-sequences through unchanged, the output of some debugger commands
-will not be readable when sent through the pager.
-
-=item C<tkRunning>
-
-Run Tk while prompting (with ReadLine).
-
-=item C<signalLevel>, C<warnLevel>, C<dieLevel>
-
-Level of verbosity. By default, the debugger leaves your exceptions
-and warnings alone, because altering them can break correctly running
-programs. It will attempt to print a message when uncaught INT, BUS, or
-SEGV signals arrive. (But see the mention of signals in L<BUGS> below.)
-
-To disable this default safe mode, set these values to something higher
-than 0. At a level of 1, you get backtraces upon receiving any kind
-of warning (this is often annoying) or exception (this is
-often valuable). Unfortunately, the debugger cannot discern fatal
-exceptions from non-fatal ones. If C<dieLevel> is even 1, then your
-non-fatal exceptions are also traced and unceremoniously altered if they
-came from C<eval'd> strings or from any kind of C<eval> within modules
-you're attempting to load. If C<dieLevel> is 2, the debugger doesn't
-care where they came from: It usurps your exception handler and prints
-out a trace, then modifies all exceptions with its own embellishments.
-This may perhaps be useful for some tracing purposes, but tends to hopelessly
-destroy any program that takes its exception handling seriously.
-
-=item C<AutoTrace>
-
-Trace mode (similar to C<t> command, but can be put into
-C<PERLDB_OPTS>).
-
-=item C<LineInfo>
-
-File or pipe to print line number info to. If it is a pipe (say,
-C<|visual_perl_db>), then a short message is used. This is the
-mechanism used to interact with a slave editor or visual debugger,
-such as the special C<vi> or C<emacs> hooks, or the C<ddd> graphical
-debugger.
-
-=item C<inhibit_exit>
-
-If 0, allows I<stepping off> the end of the script.
-
-=item C<PrintRet>
-
-Print return value after C<r> command if set (default).
-
-=item C<ornaments>
-
-Affects screen appearance of the command line (see L<Term::ReadLine>).
-There is currently no way to disable these, which can render
-some output illegible on some displays, or with some pagers.
-This is considered a bug.
-
-=item C<frame>
-
-Affects the printing of messages upon entry and exit from subroutines. If
-C<frame & 2> is false, messages are printed on entry only. (Printing
-on exit might be useful if interspersed with other messages.)
-
-If C<frame & 4>, arguments to functions are printed, plus context
-and caller info. If C<frame & 8>, overloaded C<stringify> and
-C<tie>d C<FETCH> is enabled on the printed arguments. If C<frame
-& 16>, the return value from the subroutine is printed.
-
-The length at which the argument list is truncated is governed by the
-next option:
-
-=item C<maxTraceLen>
-
-Length to truncate the argument list when the C<frame> option's
-bit 4 is set.
-
-=back
-
-The following options affect what happens with C<V>, C<X>, and C<x>
-commands:
-
-=over 12
-
-=item C<arrayDepth>, C<hashDepth>
-
-Print only first N elements ('' for all).
-
-=item C<compactDump>, C<veryCompact>
-
-Change the style of array and hash output. If C<compactDump>, short array
-may be printed on one line.
-
-=item C<globPrint>
-
-Whether to print contents of globs.
-
-=item C<DumpDBFiles>
-
-Dump arrays holding debugged files.
-
-=item C<DumpPackages>
-
-Dump symbol tables of packages.
-
-=item C<DumpReused>
-
-Dump contents of "reused" addresses.
-
-=item C<quote>, C<HighBit>, C<undefPrint>
-
-Change the style of string dump. The default value for C<quote>
-is C<auto>; one can enable double-quotish or single-quotish format
-by setting it to C<"> or C<'>, respectively. By default, characters
-with their high bit set are printed verbatim.
-
-=item C<UsageOnly>
-
-Rudimentary per-package memory usage dump. Calculates total
-size of strings found in variables in the package. This does not
-include lexicals in a module's file scope, or lost in closures.
-
-=back
-
-After the rc file is read, the debugger reads the C<$ENV{PERLDB_OPTS}>
-environment variable and parses this as the remainder of a `O ...'
-line as one might enter at the debugger prompt. You may place the
-initialization options C<TTY>, C<noTTY>, C<ReadLine>, and C<NonStop>
-there.
-
-If your rc file contains:
-
- parse_options("NonStop=1 LineInfo=db.out AutoTrace");
-
-then your script will run without human intervention, putting trace
-information into the file I<db.out>. (If you interrupt it, you'd
-better reset C<LineInfo> to F</dev/tty> if you expect to see anything.)
-
-=over 12
-
-=item C<TTY>
-
-The TTY to use for debugging I/O.
-
-=item C<noTTY>
-
-If set, the debugger goes into C<NonStop> mode and will not connect to a TTY. If
-interrupted (or if control goes to the debugger via explicit setting of
-$DB::signal or $DB::single from the Perl script), it connects to a TTY
-specified in the C<TTY> option at startup, or to a tty found at
-runtime using the C<Term::Rendezvous> module of your choice.
-
-This module should implement a method named C<new> that returns an object
-with two methods: C<IN> and C<OUT>. These should return filehandles to use
-for debugging input and output correspondingly. The C<new> method should
-inspect an argument containing the value of C<$ENV{PERLDB_NOTTY}> at
-startup, or C<"/tmp/perldbtty$$"> otherwise. This file is not
-inspected for proper ownership, so security hazards are theoretically
-possible.
-
-=item C<ReadLine>
-
-If false, readline support in the debugger is disabled in order
-to debug applications that themselves use ReadLine.
-
-=item C<NonStop>
-
-If set, the debugger goes into non-interactive mode until interrupted, or
-programmatically by setting $DB::signal or $DB::single.
-
-=back
-
-Here's an example of using the C<$ENV{PERLDB_OPTS}> variable:
-
- $ PERLDB_OPTS="NonStop frame=2" perl -d myprogram
-
-That will run the script B<myprogram> without human intervention,
-printing out the call tree with entry and exit points. Note that
-C<NonStop=1 frame=2> is equivalent to C<N f=2>, and that originally,
-options could be uniquely abbreviated by the first letter (modulo
-the C<Dump*> options). It is nevertheless recommended that you
-always spell them out in full for legibility and future compatibility.
-
-Other examples include
-
- $ PERLDB_OPTS="NonStop frame=2" perl -d myprogram
-
-which runs script non-interactively, printing info on each entry
-into a subroutine and each executed line into the file named F<listing>.
-(If you interrupt it, you would better reset C<LineInfo> to something
-"interactive"!)
-
-Other examples include (using standard shell syntax to show environment
-variable settings):
-
- $ ( PERLDB_OPTS="NonStop frame=1 AutoTrace LineInfo=tperl.out"
- perl -d myprogram )
-
-which may be useful for debugging a program that uses C<Term::ReadLine>
-itself. Do not forget to detach your shell from the TTY in the window that
-corresponds to F</dev/ttyXX>, say, by issuing a command like
-
- $ sleep 1000000
-
-See L<perldebguts/"Debugger Internals"> for details.
-
-=head2 Debugger input/output
-
-=over 8
-
-=item Prompt
-
-The debugger prompt is something like
-
- DB<8>
-
-or even
-
- DB<<17>>
-
-where that number is the command number, and which you'd use to
-access with the built-in B<csh>-like history mechanism. For example,
-C<!17> would repeat command number 17. The depth of the angle
-brackets indicates the nesting depth of the debugger. You could
-get more than one set of brackets, for example, if you'd already
-at a breakpoint and then printed the result of a function call that
-itself has a breakpoint, or you step into an expression via C<s/n/t
-expression> command.
-
-=item Multiline commands
-
-If you want to enter a multi-line command, such as a subroutine
-definition with several statements or a format, escape the newline
-that would normally end the debugger command with a backslash.
-Here's an example:
-
- DB<1> for (1..4) { \
- cont: print "ok\n"; \
- cont: }
- ok
- ok
- ok
- ok
-
-Note that this business of escaping a newline is specific to interactive
-commands typed into the debugger.
-
-=item Stack backtrace
-
-Here's an example of what a stack backtrace via C<T> command might
-look like:
-
- $ = main::infested called from file `Ambulation.pm' line 10
- @ = Ambulation::legs(1, 2, 3, 4) called from file `camel_flea' line 7
- $ = main::pests('bactrian', 4) called from file `camel_flea' line 4
-
-The left-hand character up there indicates the context in which the
-function was called, with C<$> and C<@> meaning scalar or list
-contexts respectively, and C<.> meaning void context (which is
-actually a sort of scalar context). The display above says
-that you were in the function C<main::infested> when you ran the
-stack dump, and that it was called in scalar context from line
-10 of the file I<Ambulation.pm>, but without any arguments at all,
-meaning it was called as C<&infested>. The next stack frame shows
-that the function C<Ambulation::legs> was called in list context
-from the I<camel_flea> file with four arguments. The last stack
-frame shows that C<main::pests> was called in scalar context,
-also from I<camel_flea>, but from line 4.
-
-If you execute the C<T> command from inside an active C<use>
-statement, the backtrace will contain both a C<require> frame and
-an C<eval>) frame.
-
-=item Line Listing Format
-
-This shows the sorts of output the C<l> command can produce:
-
- DB<<13>> l
- 101: @i{@i} = ();
- 102:b @isa{@i,$pack} = ()
- 103 if(exists $i{$prevpack} || exists $isa{$pack});
- 104 }
- 105
- 106 next
- 107==> if(exists $isa{$pack});
- 108
- 109:a if ($extra-- > 0) {
- 110: %isa = ($pack,1);
-
-Breakable lines are marked with C<:>. Lines with breakpoints are
-marked by C<b> and those with actions by C<a>. The line that's
-about to be executed is marked by C<< ==> >>.
-
-Please be aware that code in debugger listings may not look the same
-as your original source code. Line directives and external source
-filters can alter the code before Perl sees it, causing code to move
-from its original positions or take on entirely different forms.
-
-=item Frame listing
-
-When the C<frame> option is set, the debugger would print entered (and
-optionally exited) subroutines in different styles. See L<perldebguts>
-for incredibly long examples of these.
-
-=back
-
-=head2 Debugging compile-time statements
-
-If you have compile-time executable statements (such as code within
-BEGIN and CHECK blocks or C<use> statements), these will I<not> be
-stopped by debugger, although C<require>s and INIT blocks will, and
-compile-time statements can be traced with C<AutoTrace> option set
-in C<PERLDB_OPTS>). From your own Perl code, however, you can
-transfer control back to the debugger using the following statement,
-which is harmless if the debugger is not running:
-
- $DB::single = 1;
-
-If you set C<$DB::single> to 2, it's equivalent to having
-just typed the C<n> command, whereas a value of 1 means the C<s>
-command. The C<$DB::trace> variable should be set to 1 to simulate
-having typed the C<t> command.
-
-Another way to debug compile-time code is to start the debugger, set a
-breakpoint on the I<load> of some module:
-
- DB<7> b load f:/perllib/lib/Carp.pm
- Will stop on load of `f:/perllib/lib/Carp.pm'.
-
-and then restart the debugger using the C<R> command (if possible). One can use C<b
-compile subname> for the same purpose.
-
-=head2 Debugger Customization
-
-The debugger probably contains enough configuration hooks that you
-won't ever have to modify it yourself. You may change the behaviour
-of debugger from within the debugger using its C<O> command, from
-the command line via the C<PERLDB_OPTS> environment variable, and
-from customization files.
-
-You can do some customization by setting up a F<.perldb> file, which
-contains initialization code. For instance, you could make aliases
-like these (the last one is one people expect to be there):
-
- $DB::alias{'len'} = 's/^len(.*)/p length($1)/';
- $DB::alias{'stop'} = 's/^stop (at|in)/b/';
- $DB::alias{'ps'} = 's/^ps\b/p scalar /';
- $DB::alias{'quit'} = 's/^quit(\s*)/exit/';
-
-You can change options from F<.perldb> by using calls like this one;
-
- parse_options("NonStop=1 LineInfo=db.out AutoTrace=1 frame=2");
-
-The code is executed in the package C<DB>. Note that F<.perldb> is
-processed before processing C<PERLDB_OPTS>. If F<.perldb> defines the
-subroutine C<afterinit>, that function is called after debugger
-initialization ends. F<.perldb> may be contained in the current
-directory, or in the home directory. Because this file is sourced
-in by Perl and may contain arbitrary commands, for security reasons,
-it must be owned by the superuser or the current user, and writable
-by no one but its owner.
-
-If you want to modify the debugger, copy F<perl5db.pl> from the
-Perl library to another name and hack it to your heart's content.
-You'll then want to set your C<PERL5DB> environment variable to say
-something like this:
-
- BEGIN { require "myperl5db.pl" }
-
-As a last resort, you could also use C<PERL5DB> to customize the debugger
-by directly setting internal variables or calling debugger functions.
-
-Note that any variables and functions that are not documented in
-this document (or in L<perldebguts>) are considered for internal
-use only, and as such are subject to change without notice.
-
-=head2 Readline Support
-
-As shipped, the only command-line history supplied is a simplistic one
-that checks for leading exclamation points. However, if you install
-the Term::ReadKey and Term::ReadLine modules from CPAN, you will
-have full editing capabilities much like GNU I<readline>(3) provides.
-Look for these in the F<modules/by-module/Term> directory on CPAN.
-These do not support normal B<vi> command-line editing, however.
-
-A rudimentary command-line completion is also available.
-Unfortunately, the names of lexical variables are not available for
-completion.
-
-=head2 Editor Support for Debugging
-
-If you have the FSF's version of B<emacs> installed on your system,
-it can interact with the Perl debugger to provide an integrated
-software development environment reminiscent of its interactions
-with C debuggers.
-
-Perl comes with a start file for making B<emacs> act like a
-syntax-directed editor that understands (some of) Perl's syntax.
-Look in the I<emacs> directory of the Perl source distribution.
-
-A similar setup by Tom Christiansen for interacting with any
-vendor-shipped B<vi> and the X11 window system is also available.
-This works similarly to the integrated multiwindow support that
-B<emacs> provides, where the debugger drives the editor. At the
-time of this writing, however, that tool's eventual location in the
-Perl distribution was uncertain.
-
-Users of B<vi> should also look into B<vim> and B<gvim>, the mousey
-and windy version, for coloring of Perl keywords.
-
-Note that only perl can truly parse Perl, so all such CASE tools
-fall somewhat short of the mark, especially if you don't program
-your Perl as a C programmer might.
-
-=head2 The Perl Profiler
-
-If you wish to supply an alternative debugger for Perl to run, just
-invoke your script with a colon and a package argument given to the
-B<-d> flag. The most popular alternative debuggers for Perl is the
-Perl profiler. Devel::DProf is now included with the standard Perl
-distribution. To profile your Perl program in the file F<mycode.pl>,
-just type:
-
- $ perl -d:DProf mycode.pl
-
-When the script terminates the profiler will dump the profile
-information to a file called F<tmon.out>. A tool like B<dprofpp>,
-also supplied with the standard Perl distribution, can be used to
-interpret the information in that profile.
-
-=head1 Debugging regular expressions
-
-C<use re 'debug'> enables you to see the gory details of how the
-Perl regular expression engine works. In order to understand this
-typically voluminous output, one must not only have some idea about
-about how regular expression matching works in general, but also
-know how Perl's regular expressions are internally compiled into
-an automaton. These matters are explored in some detail in
-L<perldebguts/"Debugging regular expressions">.
-
-=head1 Debugging memory usage
-
-Perl contains internal support for reporting its own memory usage,
-but this is a fairly advanced concept that requires some understanding
-of how memory allocation works.
-See L<perldebguts/"Debugging Perl memory usage"> for the details.
-
-=head1 SEE ALSO
-
-You did try the B<-w> switch, didn't you?
-
-L<perldebguts>,
-L<re>,
-L<DB>,
-L<Devel::Dprof>,
-L<dprofpp>,
-L<Dumpvalue>,
-and
-L<perlrun>.
-
-=head1 BUGS
-
-You cannot get stack frame information or in any fashion debug functions
-that were not compiled by Perl, such as those from C or C++ extensions.
-
-If you alter your @_ arguments in a subroutine (such as with C<shift>
-or C<pop>, the stack backtrace will not show the original values.
-
-The debugger does not currently work in conjunction with the B<-W>
-command-line switch, because it itself is not free of warnings.
-
-If you're in a slow syscall (like C<wait>ing, C<accept>ing, or C<read>ing
-from your keyboard or a socket) and haven't set up your own C<$SIG{INT}>
-handler, then you won't be able to CTRL-C your way back to the debugger,
-because the debugger's own C<$SIG{INT}> handler doesn't understand that
-it needs to raise an exception to longjmp(3) out of slow syscalls.
diff --git a/contrib/perl5/pod/perldelta.pod b/contrib/perl5/pod/perldelta.pod
deleted file mode 100644
index 86235f0..0000000
--- a/contrib/perl5/pod/perldelta.pod
+++ /dev/null
@@ -1,3646 +0,0 @@
-=head1 NAME
-
-perldelta - what's new for perl v5.6.x
-
-=head1 DESCRIPTION
-
-This document describes differences between the 5.005 release and the 5.6.1
-release.
-
-=head1 Summary of changes between 5.6.0 and 5.6.1
-
-This section contains a summary of the changes between the 5.6.0 release
-and the 5.6.1 release. More details about the changes mentioned here
-may be found in the F<Changes> files that accompany the Perl source
-distribution. See L<perlhack> for pointers to online resources where you
-can inspect the individual patches described by these changes.
-
-=head2 Security Issues
-
-suidperl will not run /bin/mail anymore, because some platforms have
-a /bin/mail that is vulnerable to buffer overflow attacks.
-
-Note that suidperl is neither built nor installed by default in
-any recent version of perl. Use of suidperl is highly discouraged.
-If you think you need it, try alternatives such as sudo first.
-See http://www.courtesan.com/sudo/.
-
-=head2 Core bug fixes
-
-This is not an exhaustive list. It is intended to cover only the
-significant user-visible changes.
-
-=over
-
-=item C<UNIVERSAL::isa()>
-
-A bug in the caching mechanism used by C<UNIVERSAL::isa()> that affected
-base.pm has been fixed. The bug has existed since the 5.005 releases,
-but wasn't tickled by base.pm in those releases.
-
-=item Memory leaks
-
-Various cases of memory leaks and attempts to access uninitialized memory
-have been cured. See L</"Known Problems"> below for further issues.
-
-=item Numeric conversions
-
-Numeric conversions did not recognize changes in the string value
-properly in certain circumstances.
-
-In other situations, large unsigned numbers (those above 2**31) could
-sometimes lose their unsignedness, causing bogus results in arithmetic
-operations.
-
-Integer modulus on large unsigned integers sometimes returned
-incorrect values.
-
-Perl 5.6.0 generated "not a number" warnings on certain conversions where
-previous versions didn't.
-
-These problems have all been rectified.
-
-Infinity is now recognized as a number.
-
-=item qw(a\\b)
-
-In Perl 5.6.0, qw(a\\b) produced a string with two backslashes instead
-of one, in a departure from the behavior in previous versions. The
-older behavior has been reinstated.
-
-=item caller()
-
-caller() could cause core dumps in certain situations. Carp was sometimes
-affected by this problem.
-
-=item Bugs in regular expressions
-
-Pattern matches on overloaded values are now handled correctly.
-
-Perl 5.6.0 parsed m/\x{ab}/ incorrectly, leading to spurious warnings.
-This has been corrected.
-
-The RE engine found in Perl 5.6.0 accidentally pessimised certain kinds
-of simple pattern matches. These are now handled better.
-
-Regular expression debug output (whether through C<use re 'debug'>
-or via C<-Dr>) now looks better.
-
-Multi-line matches like C<"a\nxb\n" =~ /(?!\A)x/m> were flawed. The
-bug has been fixed.
-
-Use of $& could trigger a core dump under some situations. This
-is now avoided.
-
-Match variables $1 et al., weren't being unset when a pattern match
-was backtracking, and the anomaly showed up inside C</...(?{ ... }).../>
-etc. These variables are now tracked correctly.
-
-pos() did not return the correct value within s///ge in earlier
-versions. This is now handled correctly.
-
-=item "slurp" mode
-
-readline() on files opened in "slurp" mode could return an extra "" at
-the end in certain situations. This has been corrected.
-
-=item Autovivification of symbolic references to special variables
-
-Autovivification of symbolic references of special variables described
-in L<perlvar> (as in C<${$num}>) was accidentally disabled. This works
-again now.
-
-=item Lexical warnings
-
-Lexical warnings now propagate correctly into C<eval "...">.
-
-C<use warnings qw(FATAL all)> did not work as intended. This has been
-corrected.
-
-Lexical warnings could leak into other scopes in some situations.
-This is now fixed.
-
-warnings::enabled() now reports the state of $^W correctly if the caller
-isn't using lexical warnings.
-
-=item Spurious warnings and errors
-
-Perl 5.6.0 could emit spurious warnings about redefinition of dl_error()
-when statically building extensions into perl. This has been corrected.
-
-"our" variables could result in bogus "Variable will not stay shared"
-warnings. This is now fixed.
-
-"our" variables of the same name declared in two sibling blocks
-resulted in bogus warnings about "redeclaration" of the variables.
-The problem has been corrected.
-
-=item glob()
-
-Compatibility of the builtin glob() with old csh-based glob has been
-improved with the addition of GLOB_ALPHASORT option. See C<File::Glob>.
-
-File::Glob::glob() has been renamed to File::Glob::bsd_glob()
-because the name clashes with the builtin glob(). The older
-name is still available for compatibility, but is deprecated.
-
-Spurious syntax errors generated in certain situations, when glob()
-caused File::Glob to be loaded for the first time, have been fixed.
-
-=item Tainting
-
-Some cases of inconsistent taint propagation (such as within hash
-values) have been fixed.
-
-The tainting behavior of sprintf() has been rationalized. It does
-not taint the result of floating point formats anymore, making the
-behavior consistent with that of string interpolation.
-
-=item sort()
-
-Arguments to sort() weren't being provided the right wantarray() context.
-The comparison block is now run in scalar context, and the arguments to
-be sorted are always provided list context.
-
-sort() is also fully reentrant, in the sense that the sort function
-can itself call sort(). This did not work reliably in previous releases.
-
-=item #line directives
-
-#line directives now work correctly when they appear at the very
-beginning of C<eval "...">.
-
-=item Subroutine prototypes
-
-The (\&) prototype now works properly.
-
-=item map()
-
-map() could get pathologically slow when the result list it generates
-is larger than the source list. The performance has been improved for
-common scenarios.
-
-=item Debugger
-
-Debugger exit code now reflects the script exit code.
-
-Condition C<"0"> in breakpoints is now treated correctly.
-
-The C<d> command now checks the line number.
-
-C<$.> is no longer corrupted by the debugger.
-
-All debugger output now correctly goes to the socket if RemotePort
-is set.
-
-=item PERL5OPT
-
-PERL5OPT can be set to more than one switch group. Previously,
-it used to be limited to one group of options only.
-
-=item chop()
-
-chop(@list) in list context returned the characters chopped in reverse
-order. This has been reversed to be in the right order.
-
-=item Unicode support
-
-Unicode support has seen a large number of incremental improvements,
-but continues to be highly experimental. It is not expected to be
-fully supported in the 5.6.x maintenance releases.
-
-substr(), join(), repeat(), reverse(), quotemeta() and string
-concatenation were all handling Unicode strings incorrectly in
-Perl 5.6.0. This has been corrected.
-
-Support for C<tr///CU> and C<tr///UC> etc., have been removed since
-we realized the interface is broken. For similar functionality,
-see L<perlfunc/pack>.
-
-The Unicode Character Database has been updated to version 3.0.1
-with additions made available to the public as of August 30, 2000.
-
-The Unicode character classes \p{Blank} and \p{SpacePerl} have been
-added. "Blank" is like C isblank(), that is, it contains only
-"horizontal whitespace" (the space character is, the newline isn't),
-and the "SpacePerl" is the Unicode equivalent of C<\s> (\p{Space}
-isn't, since that includes the vertical tabulator character, whereas
-C<\s> doesn't.)
-
-If you are experimenting with Unicode support in perl, the development
-versions of Perl may have more to offer. In particular, I/O layers
-are now available in the development track, but not in the maintenance
-track, primarily to do backward compatibility issues. Unicode support
-is also evolving rapidly on a daily basis in the development track--the
-maintenance track only reflects the most conservative of these changes.
-
-=item 64-bit support
-
-Support for 64-bit platforms has been improved, but continues to be
-experimental. The level of support varies greatly among platforms.
-
-=item Compiler
-
-The B Compiler and its various backends have had many incremental
-improvements, but they continue to remain highly experimental. Use in
-production environments is discouraged.
-
-The perlcc tool has been rewritten so that the user interface is much
-more like that of a C compiler.
-
-The perlbc tools has been removed. Use C<perlcc -B> instead.
-
-=item Lvalue subroutines
-
-There have been various bugfixes to support lvalue subroutines better.
-However, the feature still remains experimental.
-
-=item IO::Socket
-
-IO::Socket::INET failed to open the specified port if the service
-name was not known. It now correctly uses the supplied port number
-as is.
-
-=item File::Find
-
-File::Find now chdir()s correctly when chasing symbolic links.
-
-=item xsubpp
-
-xsubpp now tolerates embedded POD sections.
-
-=item C<no Module;>
-
-C<no Module;> does not produce an error even if Module does not have an
-unimport() method. This parallels the behavior of C<use> vis-a-vis
-C<import>.
-
-=item Tests
-
-A large number of tests have been added.
-
-=back
-
-=head2 Core features
-
-untie() will now call an UNTIE() hook if it exists. See L<perltie>
-for details.
-
-The C<-DT> command line switch outputs copious tokenizing information.
-See L<perlrun>.
-
-Arrays are now always interpolated in double-quotish strings. Previously,
-C<"foo@bar.com"> used to be a fatal error at compile time, if an array
-C<@bar> was not used or declared. This transitional behavior was
-intended to help migrate perl4 code, and is deemed to be no longer useful.
-See L</"Arrays now always interpolate into double-quoted strings">.
-
-keys(), each(), pop(), push(), shift(), splice() and unshift()
-can all be overridden now.
-
-C<my __PACKAGE__ $obj> now does the expected thing.
-
-=head2 Configuration issues
-
-On some systems (IRIX and Solaris among them) the system malloc is demonstrably
-better. While the defaults haven't been changed in order to retain binary
-compatibility with earlier releases, you may be better off building perl
-with C<Configure -Uusemymalloc ...> as discussed in the F<INSTALL> file.
-
-C<Configure> has been enhanced in various ways:
-
-=over
-
-=item *
-
-Minimizes use of temporary files.
-
-=item *
-
-By default, does not link perl with libraries not used by it, such as
-the various dbm libraries. SunOS 4.x hints preserve behavior on that
-platform.
-
-=item *
-
-Support for pdp11-style memory models has been removed due to obsolescence.
-
-=item *
-
-Building outside the source tree is supported on systems that have
-symbolic links. This is done by running
-
- sh /path/to/source/Configure -Dmksymlinks ...
- make all test install
-
-in a directory other than the perl source directory. See F<INSTALL>.
-
-=item *
-
-C<Configure -S> can be run non-interactively.
-
-=back
-
-=head2 Documentation
-
-README.aix, README.solaris and README.macos have been added. README.posix-bc
-has been renamed to README.bs2000. These are installed as L<perlaix>,
-L<perlsolaris>, L<perlmacos>, and L<perlbs2000> respectively.
-
-The following pod documents are brand new:
-
- perlclib Internal replacements for standard C library functions
- perldebtut Perl debugging tutorial
- perlebcdic Considerations for running Perl on EBCDIC platforms
- perlnewmod Perl modules: preparing a new module for distribution
- perlrequick Perl regular expressions quick start
- perlretut Perl regular expressions tutorial
- perlutil utilities packaged with the Perl distribution
-
-The F<INSTALL> file has been expanded to cover various issues, such as
-64-bit support.
-
-A longer list of contributors has been added to the source distribution.
-See the file C<AUTHORS>.
-
-Numerous other changes have been made to the included documentation and FAQs.
-
-=head2 Bundled modules
-
-The following modules have been added.
-
-=over
-
-=item B::Concise
-
-Walks Perl syntax tree, printing concise info about ops. See L<B::Concise>.
-
-=item File::Temp
-
-Returns name and handle of a temporary file safely. See L<File::Temp>.
-
-=item Pod::LaTeX
-
-Converts Pod data to formatted LaTeX. See L<Pod::LaTeX>.
-
-=item Pod::Text::Overstrike
-
-Converts POD data to formatted overstrike text. See L<Pod::Text::Overstrike>.
-
-=back
-
-The following modules have been upgraded.
-
-=over
-
-=item CGI
-
-CGI v2.752 is now included.
-
-=item CPAN
-
-CPAN v1.59_54 is now included.
-
-=item Class::Struct
-
-Various bugfixes have been added.
-
-=item DB_File
-
-DB_File v1.75 supports newer Berkeley DB versions, among other
-improvements.
-
-=item Devel::Peek
-
-Devel::Peek has been enhanced to support dumping of memory statistics,
-when perl is built with the included malloc().
-
-=item File::Find
-
-File::Find now supports pre and post-processing of the files in order
-to sort() them, etc.
-
-=item Getopt::Long
-
-Getopt::Long v2.25 is included.
-
-=item IO::Poll
-
-Various bug fixes have been included.
-
-=item IPC::Open3
-
-IPC::Open3 allows use of numeric file descriptors.
-
-=item Math::BigFloat
-
-The fmod() function supports modulus operations. Various bug fixes
-have also been included.
-
-=item Math::Complex
-
-Math::Complex handles inf, NaN etc., better.
-
-=item Net::Ping
-
-ping() could fail on odd number of data bytes, and when the echo service
-isn't running. This has been corrected.
-
-=item Opcode
-
-A memory leak has been fixed.
-
-=item Pod::Parser
-
-Version 1.13 of the Pod::Parser suite is included.
-
-=item Pod::Text
-
-Pod::Text and related modules have been upgraded to the versions
-in podlators suite v2.08.
-
-=item SDBM_File
-
-On dosish platforms, some keys went missing because of lack of support for
-files with "holes". A workaround for the problem has been added.
-
-=item Sys::Syslog
-
-Various bug fixes have been included.
-
-=item Tie::RefHash
-
-Now supports Tie::RefHash::Nestable to automagically tie hashref values.
-
-=item Tie::SubstrHash
-
-Various bug fixes have been included.
-
-=back
-
-=head2 Platform-specific improvements
-
-The following new ports are now available.
-
-=over
-
-=item NCR MP-RAS
-
-=item NonStop-UX
-
-=back
-
-Perl now builds under Amdahl UTS.
-
-Perl has also been verified to build under Amiga OS.
-
-Support for EPOC has been much improved. See README.epoc.
-
-Building perl with -Duseithreads or -Duse5005threads now works
-under HP-UX 10.20 (previously it only worked under 10.30 or later).
-You will need a thread library package installed. See README.hpux.
-
-Long doubles should now work under Linux.
-
-MacOS Classic is now supported in the mainstream source package.
-See README.macos.
-
-Support for MPE/iX has been updated. See README.mpeix.
-
-Support for OS/2 has been improved. See C<os2/Changes> and README.os2.
-
-Dynamic loading on z/OS (formerly OS/390) has been improved. See
-README.os390.
-
-Support for VMS has seen many incremental improvements, including
-better support for operators like backticks and system(), and better
-%ENV handling. See C<README.vms> and L<perlvms>.
-
-Support for Stratus VOS has been improved. See C<vos/Changes> and README.vos.
-
-Support for Windows has been improved.
-
-=over
-
-=item *
-
-fork() emulation has been improved in various ways, but still continues
-to be experimental. See L<perlfork> for known bugs and caveats.
-
-=item *
-
-%SIG has been enabled under USE_ITHREADS, but its use is completely
-unsupported under all configurations.
-
-=item *
-
-Borland C++ v5.5 is now a supported compiler that can build Perl.
-However, the generated binaries continue to be incompatible with those
-generated by the other supported compilers (GCC and Visual C++).
-
-=item *
-
-Non-blocking waits for child processes (or pseudo-processes) are
-supported via C<waitpid($pid, &POSIX::WNOHANG)>.
-
-=item *
-
-A memory leak in accept() has been fixed.
-
-=item *
-
-wait(), waitpid() and backticks now return the correct exit status under
-Windows 9x.
-
-=item *
-
-Trailing new %ENV entries weren't propagated to child processes. This
-is now fixed.
-
-=item *
-
-Current directory entries in %ENV are now correctly propagated to child
-processes.
-
-=item *
-
-Duping socket handles with open(F, ">&MYSOCK") now works under Windows 9x.
-
-=item *
-
-The makefiles now provide a single switch to bulk-enable all the features
-enabled in ActiveState ActivePerl (a popular binary distribution).
-
-=item *
-
-Win32::GetCwd() correctly returns C:\ instead of C: when at the drive root.
-Other bugs in chdir() and Cwd::cwd() have also been fixed.
-
-=item *
-
-fork() correctly returns undef and sets EAGAIN when it runs out of
-pseudo-process handles.
-
-=item *
-
-ExtUtils::MakeMaker now uses $ENV{LIB} to search for libraries.
-
-=item *
-
-UNC path handling is better when perl is built to support fork().
-
-=item *
-
-A handle leak in socket handling has been fixed.
-
-=item *
-
-send() works from within a pseudo-process.
-
-=back
-
-Unless specifically qualified otherwise, the remainder of this document
-covers changes between the 5.005 and 5.6.0 releases.
-
-=head1 Core Enhancements
-
-=head2 Interpreter cloning, threads, and concurrency
-
-Perl 5.6.0 introduces the beginnings of support for running multiple
-interpreters concurrently in different threads. In conjunction with
-the perl_clone() API call, which can be used to selectively duplicate
-the state of any given interpreter, it is possible to compile a
-piece of code once in an interpreter, clone that interpreter
-one or more times, and run all the resulting interpreters in distinct
-threads.
-
-On the Windows platform, this feature is used to emulate fork() at the
-interpreter level. See L<perlfork> for details about that.
-
-This feature is still in evolution. It is eventually meant to be used
-to selectively clone a subroutine and data reachable from that
-subroutine in a separate interpreter and run the cloned subroutine
-in a separate thread. Since there is no shared data between the
-interpreters, little or no locking will be needed (unless parts of
-the symbol table are explicitly shared). This is obviously intended
-to be an easy-to-use replacement for the existing threads support.
-
-Support for cloning interpreters and interpreter concurrency can be
-enabled using the -Dusethreads Configure option (see win32/Makefile for
-how to enable it on Windows.) The resulting perl executable will be
-functionally identical to one that was built with -Dmultiplicity, but
-the perl_clone() API call will only be available in the former.
-
--Dusethreads enables the cpp macro USE_ITHREADS by default, which in turn
-enables Perl source code changes that provide a clear separation between
-the op tree and the data it operates with. The former is immutable, and
-can therefore be shared between an interpreter and all of its clones,
-while the latter is considered local to each interpreter, and is therefore
-copied for each clone.
-
-Note that building Perl with the -Dusemultiplicity Configure option
-is adequate if you wish to run multiple B<independent> interpreters
-concurrently in different threads. -Dusethreads only provides the
-additional functionality of the perl_clone() API call and other
-support for running B<cloned> interpreters concurrently.
-
- NOTE: This is an experimental feature. Implementation details are
- subject to change.
-
-=head2 Lexically scoped warning categories
-
-You can now control the granularity of warnings emitted by perl at a finer
-level using the C<use warnings> pragma. L<warnings> and L<perllexwarn>
-have copious documentation on this feature.
-
-=head2 Unicode and UTF-8 support
-
-Perl now uses UTF-8 as its internal representation for character
-strings. The C<utf8> and C<bytes> pragmas are used to control this support
-in the current lexical scope. See L<perlunicode>, L<utf8> and L<bytes> for
-more information.
-
-This feature is expected to evolve quickly to support some form of I/O
-disciplines that can be used to specify the kind of input and output data
-(bytes or characters). Until that happens, additional modules from CPAN
-will be needed to complete the toolkit for dealing with Unicode.
-
- NOTE: This should be considered an experimental feature. Implementation
- details are subject to change.
-
-=head2 Support for interpolating named characters
-
-The new C<\N> escape interpolates named characters within strings.
-For example, C<"Hi! \N{WHITE SMILING FACE}"> evaluates to a string
-with a Unicode smiley face at the end.
-
-=head2 "our" declarations
-
-An "our" declaration introduces a value that can be best understood
-as a lexically scoped symbolic alias to a global variable in the
-package that was current where the variable was declared. This is
-mostly useful as an alternative to the C<vars> pragma, but also provides
-the opportunity to introduce typing and other attributes for such
-variables. See L<perlfunc/our>.
-
-=head2 Support for strings represented as a vector of ordinals
-
-Literals of the form C<v1.2.3.4> are now parsed as a string composed
-of characters with the specified ordinals. This is an alternative, more
-readable way to construct (possibly Unicode) strings instead of
-interpolating characters, as in C<"\x{1}\x{2}\x{3}\x{4}">. The leading
-C<v> may be omitted if there are more than two ordinals, so C<1.2.3> is
-parsed the same as C<v1.2.3>.
-
-Strings written in this form are also useful to represent version "numbers".
-It is easy to compare such version "numbers" (which are really just plain
-strings) using any of the usual string comparison operators C<eq>, C<ne>,
-C<lt>, C<gt>, etc., or perform bitwise string operations on them using C<|>,
-C<&>, etc.
-
-In conjunction with the new C<$^V> magic variable (which contains
-the perl version as a string), such literals can be used as a readable way
-to check if you're running a particular version of Perl:
-
- # this will parse in older versions of Perl also
- if ($^V and $^V gt v5.6.0) {
- # new features supported
- }
-
-C<require> and C<use> also have some special magic to support such literals.
-They will be interpreted as a version rather than as a module name:
-
- require v5.6.0; # croak if $^V lt v5.6.0
- use v5.6.0; # same, but croaks at compile-time
-
-Alternatively, the C<v> may be omitted if there is more than one dot:
-
- require 5.6.0;
- use 5.6.0;
-
-Also, C<sprintf> and C<printf> support the Perl-specific format flag C<%v>
-to print ordinals of characters in arbitrary strings:
-
- printf "v%vd", $^V; # prints current version, such as "v5.5.650"
- printf "%*vX", ":", $addr; # formats IPv6 address
- printf "%*vb", " ", $bits; # displays bitstring
-
-See L<perldata/"Scalar value constructors"> for additional information.
-
-=head2 Improved Perl version numbering system
-
-Beginning with Perl version 5.6.0, the version number convention has been
-changed to a "dotted integer" scheme that is more commonly found in open
-source projects.
-
-Maintenance versions of v5.6.0 will be released as v5.6.1, v5.6.2 etc.
-The next development series following v5.6.0 will be numbered v5.7.x,
-beginning with v5.7.0, and the next major production release following
-v5.6.0 will be v5.8.0.
-
-The English module now sets $PERL_VERSION to $^V (a string value) rather
-than C<$]> (a numeric value). (This is a potential incompatibility.
-Send us a report via perlbug if you are affected by this.)
-
-The v1.2.3 syntax is also now legal in Perl.
-See L<Support for strings represented as a vector of ordinals> for more on that.
-
-To cope with the new versioning system's use of at least three significant
-digits for each version component, the method used for incrementing the
-subversion number has also changed slightly. We assume that versions older
-than v5.6.0 have been incrementing the subversion component in multiples of
-10. Versions after v5.6.0 will increment them by 1. Thus, using the new
-notation, 5.005_03 is the "same" as v5.5.30, and the first maintenance
-version following v5.6.0 will be v5.6.1 (which should be read as being
-equivalent to a floating point value of 5.006_001 in the older format,
-stored in C<$]>).
-
-=head2 New syntax for declaring subroutine attributes
-
-Formerly, if you wanted to mark a subroutine as being a method call or
-as requiring an automatic lock() when it is entered, you had to declare
-that with a C<use attrs> pragma in the body of the subroutine.
-That can now be accomplished with declaration syntax, like this:
-
- sub mymethod : locked method ;
- ...
- sub mymethod : locked method {
- ...
- }
-
- sub othermethod :locked :method ;
- ...
- sub othermethod :locked :method {
- ...
- }
-
-
-(Note how only the first C<:> is mandatory, and whitespace surrounding
-the C<:> is optional.)
-
-F<AutoSplit.pm> and F<SelfLoader.pm> have been updated to keep the attributes
-with the stubs they provide. See L<attributes>.
-
-=head2 File and directory handles can be autovivified
-
-Similar to how constructs such as C<< $x->[0] >> autovivify a reference,
-handle constructors (open(), opendir(), pipe(), socketpair(), sysopen(),
-socket(), and accept()) now autovivify a file or directory handle
-if the handle passed to them is an uninitialized scalar variable. This
-allows the constructs such as C<open(my $fh, ...)> and C<open(local $fh,...)>
-to be used to create filehandles that will conveniently be closed
-automatically when the scope ends, provided there are no other references
-to them. This largely eliminates the need for typeglobs when opening
-filehandles that must be passed around, as in the following example:
-
- sub myopen {
- open my $fh, "@_"
- or die "Can't open '@_': $!";
- return $fh;
- }
-
- {
- my $f = myopen("</etc/motd");
- print <$f>;
- # $f implicitly closed here
- }
-
-=head2 open() with more than two arguments
-
-If open() is passed three arguments instead of two, the second argument
-is used as the mode and the third argument is taken to be the file name.
-This is primarily useful for protecting against unintended magic behavior
-of the traditional two-argument form. See L<perlfunc/open>.
-
-=head2 64-bit support
-
-Any platform that has 64-bit integers either
-
- (1) natively as longs or ints
- (2) via special compiler flags
- (3) using long long or int64_t
-
-is able to use "quads" (64-bit integers) as follows:
-
-=over 4
-
-=item *
-
-constants (decimal, hexadecimal, octal, binary) in the code
-
-=item *
-
-arguments to oct() and hex()
-
-=item *
-
-arguments to print(), printf() and sprintf() (flag prefixes ll, L, q)
-
-=item *
-
-printed as such
-
-=item *
-
-pack() and unpack() "q" and "Q" formats
-
-=item *
-
-in basic arithmetics: + - * / % (NOTE: operating close to the limits
-of the integer values may produce surprising results)
-
-=item *
-
-in bit arithmetics: & | ^ ~ << >> (NOTE: these used to be forced
-to be 32 bits wide but now operate on the full native width.)
-
-=item *
-
-vec()
-
-=back
-
-Note that unless you have the case (a) you will have to configure
-and compile Perl using the -Duse64bitint Configure flag.
-
- NOTE: The Configure flags -Duselonglong and -Duse64bits have been
- deprecated. Use -Duse64bitint instead.
-
-There are actually two modes of 64-bitness: the first one is achieved
-using Configure -Duse64bitint and the second one using Configure
--Duse64bitall. The difference is that the first one is minimal and
-the second one maximal. The first works in more places than the second.
-
-The C<use64bitint> does only as much as is required to get 64-bit
-integers into Perl (this may mean, for example, using "long longs")
-while your memory may still be limited to 2 gigabytes (because your
-pointers could still be 32-bit). Note that the name C<64bitint> does
-not imply that your C compiler will be using 64-bit C<int>s (it might,
-but it doesn't have to): the C<use64bitint> means that you will be
-able to have 64 bits wide scalar values.
-
-The C<use64bitall> goes all the way by attempting to switch also
-integers (if it can), longs (and pointers) to being 64-bit. This may
-create an even more binary incompatible Perl than -Duse64bitint: the
-resulting executable may not run at all in a 32-bit box, or you may
-have to reboot/reconfigure/rebuild your operating system to be 64-bit
-aware.
-
-Natively 64-bit systems like Alpha and Cray need neither -Duse64bitint
-nor -Duse64bitall.
-
-Last but not least: note that due to Perl's habit of always using
-floating point numbers, the quads are still not true integers.
-When quads overflow their limits (0...18_446_744_073_709_551_615 unsigned,
--9_223_372_036_854_775_808...9_223_372_036_854_775_807 signed), they
-are silently promoted to floating point numbers, after which they will
-start losing precision (in their lower digits).
-
- NOTE: 64-bit support is still experimental on most platforms.
- Existing support only covers the LP64 data model. In particular, the
- LLP64 data model is not yet supported. 64-bit libraries and system
- APIs on many platforms have not stabilized--your mileage may vary.
-
-=head2 Large file support
-
-If you have filesystems that support "large files" (files larger than
-2 gigabytes), you may now also be able to create and access them from
-Perl.
-
- NOTE: The default action is to enable large file support, if
- available on the platform.
-
-If the large file support is on, and you have a Fcntl constant
-O_LARGEFILE, the O_LARGEFILE is automatically added to the flags
-of sysopen().
-
-Beware that unless your filesystem also supports "sparse files" seeking
-to umpteen petabytes may be inadvisable.
-
-Note that in addition to requiring a proper file system to do large
-files you may also need to adjust your per-process (or your
-per-system, or per-process-group, or per-user-group) maximum filesize
-limits before running Perl scripts that try to handle large files,
-especially if you intend to write such files.
-
-Finally, in addition to your process/process group maximum filesize
-limits, you may have quota limits on your filesystems that stop you
-(your user id or your user group id) from using large files.
-
-Adjusting your process/user/group/file system/operating system limits
-is outside the scope of Perl core language. For process limits, you
-may try increasing the limits using your shell's limits/limit/ulimit
-command before running Perl. The BSD::Resource extension (not
-included with the standard Perl distribution) may also be of use, it
-offers the getrlimit/setrlimit interface that can be used to adjust
-process resource usage limits, including the maximum filesize limit.
-
-=head2 Long doubles
-
-In some systems you may be able to use long doubles to enhance the
-range and precision of your double precision floating point numbers
-(that is, Perl's numbers). Use Configure -Duselongdouble to enable
-this support (if it is available).
-
-=head2 "more bits"
-
-You can "Configure -Dusemorebits" to turn on both the 64-bit support
-and the long double support.
-
-=head2 Enhanced support for sort() subroutines
-
-Perl subroutines with a prototype of C<($$)>, and XSUBs in general, can
-now be used as sort subroutines. In either case, the two elements to
-be compared are passed as normal parameters in @_. See L<perlfunc/sort>.
-
-For unprototyped sort subroutines, the historical behavior of passing
-the elements to be compared as the global variables $a and $b remains
-unchanged.
-
-=head2 C<sort $coderef @foo> allowed
-
-sort() did not accept a subroutine reference as the comparison
-function in earlier versions. This is now permitted.
-
-=head2 File globbing implemented internally
-
-Perl now uses the File::Glob implementation of the glob() operator
-automatically. This avoids using an external csh process and the
-problems associated with it.
-
- NOTE: This is currently an experimental feature. Interfaces and
- implementation are subject to change.
-
-=head2 Support for CHECK blocks
-
-In addition to C<BEGIN>, C<INIT>, C<END>, C<DESTROY> and C<AUTOLOAD>,
-subroutines named C<CHECK> are now special. These are queued up during
-compilation and behave similar to END blocks, except they are called at
-the end of compilation rather than at the end of execution. They cannot
-be called directly.
-
-=head2 POSIX character class syntax [: :] supported
-
-For example to match alphabetic characters use /[[:alpha:]]/.
-See L<perlre> for details.
-
-=head2 Better pseudo-random number generator
-
-In 5.005_0x and earlier, perl's rand() function used the C library
-rand(3) function. As of 5.005_52, Configure tests for drand48(),
-random(), and rand() (in that order) and picks the first one it finds.
-
-These changes should result in better random numbers from rand().
-
-=head2 Improved C<qw//> operator
-
-The C<qw//> operator is now evaluated at compile time into a true list
-instead of being replaced with a run time call to C<split()>. This
-removes the confusing misbehaviour of C<qw//> in scalar context, which
-had inherited that behaviour from split().
-
-Thus:
-
- $foo = ($bar) = qw(a b c); print "$foo|$bar\n";
-
-now correctly prints "3|a", instead of "2|a".
-
-=head2 Better worst-case behavior of hashes
-
-Small changes in the hashing algorithm have been implemented in
-order to improve the distribution of lower order bits in the
-hashed value. This is expected to yield better performance on
-keys that are repeated sequences.
-
-=head2 pack() format 'Z' supported
-
-The new format type 'Z' is useful for packing and unpacking null-terminated
-strings. See L<perlfunc/"pack">.
-
-=head2 pack() format modifier '!' supported
-
-The new format type modifier '!' is useful for packing and unpacking
-native shorts, ints, and longs. See L<perlfunc/"pack">.
-
-=head2 pack() and unpack() support counted strings
-
-The template character '/' can be used to specify a counted string
-type to be packed or unpacked. See L<perlfunc/"pack">.
-
-=head2 Comments in pack() templates
-
-The '#' character in a template introduces a comment up to
-end of the line. This facilitates documentation of pack()
-templates.
-
-=head2 Weak references
-
-In previous versions of Perl, you couldn't cache objects so as
-to allow them to be deleted if the last reference from outside
-the cache is deleted. The reference in the cache would hold a
-reference count on the object and the objects would never be
-destroyed.
-
-Another familiar problem is with circular references. When an
-object references itself, its reference count would never go
-down to zero, and it would not get destroyed until the program
-is about to exit.
-
-Weak references solve this by allowing you to "weaken" any
-reference, that is, make it not count towards the reference count.
-When the last non-weak reference to an object is deleted, the object
-is destroyed and all the weak references to the object are
-automatically undef-ed.
-
-To use this feature, you need the WeakRef package from CPAN, which
-contains additional documentation.
-
- NOTE: This is an experimental feature. Details are subject to change.
-
-=head2 Binary numbers supported
-
-Binary numbers are now supported as literals, in s?printf formats, and
-C<oct()>:
-
- $answer = 0b101010;
- printf "The answer is: %b\n", oct("0b101010");
-
-=head2 Lvalue subroutines
-
-Subroutines can now return modifiable lvalues.
-See L<perlsub/"Lvalue subroutines">.
-
- NOTE: This is an experimental feature. Details are subject to change.
-
-=head2 Some arrows may be omitted in calls through references
-
-Perl now allows the arrow to be omitted in many constructs
-involving subroutine calls through references. For example,
-C<< $foo[10]->('foo') >> may now be written C<$foo[10]('foo')>.
-This is rather similar to how the arrow may be omitted from
-C<< $foo[10]->{'foo'} >>. Note however, that the arrow is still
-required for C<< foo(10)->('bar') >>.
-
-=head2 Boolean assignment operators are legal lvalues
-
-Constructs such as C<($a ||= 2) += 1> are now allowed.
-
-=head2 exists() is supported on subroutine names
-
-The exists() builtin now works on subroutine names. A subroutine
-is considered to exist if it has been declared (even if implicitly).
-See L<perlfunc/exists> for examples.
-
-=head2 exists() and delete() are supported on array elements
-
-The exists() and delete() builtins now work on simple arrays as well.
-The behavior is similar to that on hash elements.
-
-exists() can be used to check whether an array element has been
-initialized. This avoids autovivifying array elements that don't exist.
-If the array is tied, the EXISTS() method in the corresponding tied
-package will be invoked.
-
-delete() may be used to remove an element from the array and return
-it. The array element at that position returns to its uninitialized
-state, so that testing for the same element with exists() will return
-false. If the element happens to be the one at the end, the size of
-the array also shrinks up to the highest element that tests true for
-exists(), or 0 if none such is found. If the array is tied, the DELETE()
-method in the corresponding tied package will be invoked.
-
-See L<perlfunc/exists> and L<perlfunc/delete> for examples.
-
-=head2 Pseudo-hashes work better
-
-Dereferencing some types of reference values in a pseudo-hash,
-such as C<< $ph->{foo}[1] >>, was accidentally disallowed. This has
-been corrected.
-
-When applied to a pseudo-hash element, exists() now reports whether
-the specified value exists, not merely if the key is valid.
-
-delete() now works on pseudo-hashes. When given a pseudo-hash element
-or slice it deletes the values corresponding to the keys (but not the keys
-themselves). See L<perlref/"Pseudo-hashes: Using an array as a hash">.
-
-Pseudo-hash slices with constant keys are now optimized to array lookups
-at compile-time.
-
-List assignments to pseudo-hash slices are now supported.
-
-The C<fields> pragma now provides ways to create pseudo-hashes, via
-fields::new() and fields::phash(). See L<fields>.
-
- NOTE: The pseudo-hash data type continues to be experimental.
- Limiting oneself to the interface elements provided by the
- fields pragma will provide protection from any future changes.
-
-=head2 Automatic flushing of output buffers
-
-fork(), exec(), system(), qx//, and pipe open()s now flush buffers
-of all files opened for output when the operation was attempted. This
-mostly eliminates confusing buffering mishaps suffered by users unaware
-of how Perl internally handles I/O.
-
-This is not supported on some platforms like Solaris where a suitably
-correct implementation of fflush(NULL) isn't available.
-
-=head2 Better diagnostics on meaningless filehandle operations
-
-Constructs such as C<< open(<FH>) >> and C<< close(<FH>) >>
-are compile time errors. Attempting to read from filehandles that
-were opened only for writing will now produce warnings (just as
-writing to read-only filehandles does).
-
-=head2 Where possible, buffered data discarded from duped input filehandle
-
-C<< open(NEW, "<&OLD") >> now attempts to discard any data that
-was previously read and buffered in C<OLD> before duping the handle.
-On platforms where doing this is allowed, the next read operation
-on C<NEW> will return the same data as the corresponding operation
-on C<OLD>. Formerly, it would have returned the data from the start
-of the following disk block instead.
-
-=head2 eof() has the same old magic as <>
-
-C<eof()> would return true if no attempt to read from C<< <> >> had
-yet been made. C<eof()> has been changed to have a little magic of its
-own, it now opens the C<< <> >> files.
-
-=head2 binmode() can be used to set :crlf and :raw modes
-
-binmode() now accepts a second argument that specifies a discipline
-for the handle in question. The two pseudo-disciplines ":raw" and
-":crlf" are currently supported on DOS-derivative platforms.
-See L<perlfunc/"binmode"> and L<open>.
-
-=head2 C<-T> filetest recognizes UTF-8 encoded files as "text"
-
-The algorithm used for the C<-T> filetest has been enhanced to
-correctly identify UTF-8 content as "text".
-
-=head2 system(), backticks and pipe open now reflect exec() failure
-
-On Unix and similar platforms, system(), qx() and open(FOO, "cmd |")
-etc., are implemented via fork() and exec(). When the underlying
-exec() fails, earlier versions did not report the error properly,
-since the exec() happened to be in a different process.
-
-The child process now communicates with the parent about the
-error in launching the external command, which allows these
-constructs to return with their usual error value and set $!.
-
-=head2 Improved diagnostics
-
-Line numbers are no longer suppressed (under most likely circumstances)
-during the global destruction phase.
-
-Diagnostics emitted from code running in threads other than the main
-thread are now accompanied by the thread ID.
-
-Embedded null characters in diagnostics now actually show up. They
-used to truncate the message in prior versions.
-
-$foo::a and $foo::b are now exempt from "possible typo" warnings only
-if sort() is encountered in package C<foo>.
-
-Unrecognized alphabetic escapes encountered when parsing quote
-constructs now generate a warning, since they may take on new
-semantics in later versions of Perl.
-
-Many diagnostics now report the internal operation in which the warning
-was provoked, like so:
-
- Use of uninitialized value in concatenation (.) at (eval 1) line 1.
- Use of uninitialized value in print at (eval 1) line 1.
-
-Diagnostics that occur within eval may also report the file and line
-number where the eval is located, in addition to the eval sequence
-number and the line number within the evaluated text itself. For
-example:
-
- Not enough arguments for scalar at (eval 4)[newlib/perl5db.pl:1411] line 2, at EOF
-
-=head2 Diagnostics follow STDERR
-
-Diagnostic output now goes to whichever file the C<STDERR> handle
-is pointing at, instead of always going to the underlying C runtime
-library's C<stderr>.
-
-=head2 More consistent close-on-exec behavior
-
-On systems that support a close-on-exec flag on filehandles, the
-flag is now set for any handles created by pipe(), socketpair(),
-socket(), and accept(), if that is warranted by the value of $^F
-that may be in effect. Earlier versions neglected to set the flag
-for handles created with these operators. See L<perlfunc/pipe>,
-L<perlfunc/socketpair>, L<perlfunc/socket>, L<perlfunc/accept>,
-and L<perlvar/$^F>.
-
-=head2 syswrite() ease-of-use
-
-The length argument of C<syswrite()> has become optional.
-
-=head2 Better syntax checks on parenthesized unary operators
-
-Expressions such as:
-
- print defined(&foo,&bar,&baz);
- print uc("foo","bar","baz");
- undef($foo,&bar);
-
-used to be accidentally allowed in earlier versions, and produced
-unpredictable behaviour. Some produced ancillary warnings
-when used in this way; others silently did the wrong thing.
-
-The parenthesized forms of most unary operators that expect a single
-argument now ensure that they are not called with more than one
-argument, making the cases shown above syntax errors. The usual
-behaviour of:
-
- print defined &foo, &bar, &baz;
- print uc "foo", "bar", "baz";
- undef $foo, &bar;
-
-remains unchanged. See L<perlop>.
-
-=head2 Bit operators support full native integer width
-
-The bit operators (& | ^ ~ << >>) now operate on the full native
-integral width (the exact size of which is available in $Config{ivsize}).
-For example, if your platform is either natively 64-bit or if Perl
-has been configured to use 64-bit integers, these operations apply
-to 8 bytes (as opposed to 4 bytes on 32-bit platforms).
-For portability, be sure to mask off the excess bits in the result of
-unary C<~>, e.g., C<~$x & 0xffffffff>.
-
-=head2 Improved security features
-
-More potentially unsafe operations taint their results for improved
-security.
-
-The C<passwd> and C<shell> fields returned by the getpwent(), getpwnam(),
-and getpwuid() are now tainted, because the user can affect their own
-encrypted password and login shell.
-
-The variable modified by shmread(), and messages returned by msgrcv()
-(and its object-oriented interface IPC::SysV::Msg::rcv) are also tainted,
-because other untrusted processes can modify messages and shared memory
-segments for their own nefarious purposes.
-
-=head2 More functional bareword prototype (*)
-
-Bareword prototypes have been rationalized to enable them to be used
-to override builtins that accept barewords and interpret them in
-a special way, such as C<require> or C<do>.
-
-Arguments prototyped as C<*> will now be visible within the subroutine
-as either a simple scalar or as a reference to a typeglob.
-See L<perlsub/Prototypes>.
-
-=head2 C<require> and C<do> may be overridden
-
-C<require> and C<do 'file'> operations may be overridden locally
-by importing subroutines of the same name into the current package
-(or globally by importing them into the CORE::GLOBAL:: namespace).
-Overriding C<require> will also affect C<use>, provided the override
-is visible at compile-time.
-See L<perlsub/"Overriding Built-in Functions">.
-
-=head2 $^X variables may now have names longer than one character
-
-Formerly, $^X was synonymous with ${"\cX"}, but $^XY was a syntax
-error. Now variable names that begin with a control character may be
-arbitrarily long. However, for compatibility reasons, these variables
-I<must> be written with explicit braces, as C<${^XY}> for example.
-C<${^XYZ}> is synonymous with ${"\cXYZ"}. Variable names with more
-than one control character, such as C<${^XY^Z}>, are illegal.
-
-The old syntax has not changed. As before, `^X' may be either a
-literal control-X character or the two-character sequence `caret' plus
-`X'. When braces are omitted, the variable name stops after the
-control character. Thus C<"$^XYZ"> continues to be synonymous with
-C<$^X . "YZ"> as before.
-
-As before, lexical variables may not have names beginning with control
-characters. As before, variables whose names begin with a control
-character are always forced to be in package `main'. All such variables
-are reserved for future extensions, except those that begin with
-C<^_>, which may be used by user programs and are guaranteed not to
-acquire special meaning in any future version of Perl.
-
-=head2 New variable $^C reflects C<-c> switch
-
-C<$^C> has a boolean value that reflects whether perl is being run
-in compile-only mode (i.e. via the C<-c> switch). Since
-BEGIN blocks are executed under such conditions, this variable
-enables perl code to determine whether actions that make sense
-only during normal running are warranted. See L<perlvar>.
-
-=head2 New variable $^V contains Perl version as a string
-
-C<$^V> contains the Perl version number as a string composed of
-characters whose ordinals match the version numbers, i.e. v5.6.0.
-This may be used in string comparisons.
-
-See C<Support for strings represented as a vector of ordinals> for an
-example.
-
-=head2 Optional Y2K warnings
-
-If Perl is built with the cpp macro C<PERL_Y2KWARN> defined,
-it emits optional warnings when concatenating the number 19
-with another number.
-
-This behavior must be specifically enabled when running Configure.
-See F<INSTALL> and F<README.Y2K>.
-
-=head2 Arrays now always interpolate into double-quoted strings
-
-In double-quoted strings, arrays now interpolate, no matter what. The
-behavior in earlier versions of perl 5 was that arrays would interpolate
-into strings if the array had been mentioned before the string was
-compiled, and otherwise Perl would raise a fatal compile-time error.
-In versions 5.000 through 5.003, the error was
-
- Literal @example now requires backslash
-
-In versions 5.004_01 through 5.6.0, the error was
-
- In string, @example now must be written as \@example
-
-The idea here was to get people into the habit of writing
-C<"fred\@example.com"> when they wanted a literal C<@> sign, just as
-they have always written C<"Give me back my \$5"> when they wanted a
-literal C<$> sign.
-
-Starting with 5.6.1, when Perl now sees an C<@> sign in a
-double-quoted string, it I<always> attempts to interpolate an array,
-regardless of whether or not the array has been used or declared
-already. The fatal error has been downgraded to an optional warning:
-
- Possible unintended interpolation of @example in string
-
-This warns you that C<"fred@example.com"> is going to turn into
-C<fred.com> if you don't backslash the C<@>.
-See http://www.plover.com/~mjd/perl/at-error.html for more details
-about the history here.
-
-=head1 Modules and Pragmata
-
-=head2 Modules
-
-=over 4
-
-=item attributes
-
-While used internally by Perl as a pragma, this module also
-provides a way to fetch subroutine and variable attributes.
-See L<attributes>.
-
-=item B
-
-The Perl Compiler suite has been extensively reworked for this
-release. More of the standard Perl testsuite passes when run
-under the Compiler, but there is still a significant way to
-go to achieve production quality compiled executables.
-
- NOTE: The Compiler suite remains highly experimental. The
- generated code may not be correct, even when it manages to execute
- without errors.
-
-=item Benchmark
-
-Overall, Benchmark results exhibit lower average error and better timing
-accuracy.
-
-You can now run tests for I<n> seconds instead of guessing the right
-number of tests to run: e.g., timethese(-5, ...) will run each
-code for at least 5 CPU seconds. Zero as the "number of repetitions"
-means "for at least 3 CPU seconds". The output format has also
-changed. For example:
-
- use Benchmark;$x=3;timethese(-5,{a=>sub{$x*$x},b=>sub{$x**2}})
-
-will now output something like this:
-
- Benchmark: running a, b, each for at least 5 CPU seconds...
- a: 5 wallclock secs ( 5.77 usr + 0.00 sys = 5.77 CPU) @ 200551.91/s (n=1156516)
- b: 4 wallclock secs ( 5.00 usr + 0.02 sys = 5.02 CPU) @ 159605.18/s (n=800686)
-
-New features: "each for at least N CPU seconds...", "wallclock secs",
-and the "@ operations/CPU second (n=operations)".
-
-timethese() now returns a reference to a hash of Benchmark objects containing
-the test results, keyed on the names of the tests.
-
-timethis() now returns the iterations field in the Benchmark result object
-instead of 0.
-
-timethese(), timethis(), and the new cmpthese() (see below) can also take
-a format specifier of 'none' to suppress output.
-
-A new function countit() is just like timeit() except that it takes a
-TIME instead of a COUNT.
-
-A new function cmpthese() prints a chart comparing the results of each test
-returned from a timethese() call. For each possible pair of tests, the
-percentage speed difference (iters/sec or seconds/iter) is shown.
-
-For other details, see L<Benchmark>.
-
-=item ByteLoader
-
-The ByteLoader is a dedicated extension to generate and run
-Perl bytecode. See L<ByteLoader>.
-
-=item constant
-
-References can now be used.
-
-The new version also allows a leading underscore in constant names, but
-disallows a double leading underscore (as in "__LINE__"). Some other names
-are disallowed or warned against, including BEGIN, END, etc. Some names
-which were forced into main:: used to fail silently in some cases; now they're
-fatal (outside of main::) and an optional warning (inside of main::).
-The ability to detect whether a constant had been set with a given name has
-been added.
-
-See L<constant>.
-
-=item charnames
-
-This pragma implements the C<\N> string escape. See L<charnames>.
-
-=item Data::Dumper
-
-A C<Maxdepth> setting can be specified to avoid venturing
-too deeply into deep data structures. See L<Data::Dumper>.
-
-The XSUB implementation of Dump() is now automatically called if the
-C<Useqq> setting is not in use.
-
-Dumping C<qr//> objects works correctly.
-
-=item DB
-
-C<DB> is an experimental module that exposes a clean abstraction
-to Perl's debugging API.
-
-=item DB_File
-
-DB_File can now be built with Berkeley DB versions 1, 2 or 3.
-See C<ext/DB_File/Changes>.
-
-=item Devel::DProf
-
-Devel::DProf, a Perl source code profiler has been added. See
-L<Devel::DProf> and L<dprofpp>.
-
-=item Devel::Peek
-
-The Devel::Peek module provides access to the internal representation
-of Perl variables and data. It is a data debugging tool for the XS programmer.
-
-=item Dumpvalue
-
-The Dumpvalue module provides screen dumps of Perl data.
-
-=item DynaLoader
-
-DynaLoader now supports a dl_unload_file() function on platforms that
-support unloading shared objects using dlclose().
-
-Perl can also optionally arrange to unload all extension shared objects
-loaded by Perl. To enable this, build Perl with the Configure option
-C<-Accflags=-DDL_UNLOAD_ALL_AT_EXIT>. (This maybe useful if you are
-using Apache with mod_perl.)
-
-=item English
-
-$PERL_VERSION now stands for C<$^V> (a string value) rather than for C<$]>
-(a numeric value).
-
-=item Env
-
-Env now supports accessing environment variables like PATH as array
-variables.
-
-=item Fcntl
-
-More Fcntl constants added: F_SETLK64, F_SETLKW64, O_LARGEFILE for
-large file (more than 4GB) access (NOTE: the O_LARGEFILE is
-automatically added to sysopen() flags if large file support has been
-configured, as is the default), Free/Net/OpenBSD locking behaviour
-flags F_FLOCK, F_POSIX, Linux F_SHLCK, and O_ACCMODE: the combined
-mask of O_RDONLY, O_WRONLY, and O_RDWR. The seek()/sysseek()
-constants SEEK_SET, SEEK_CUR, and SEEK_END are available via the
-C<:seek> tag. The chmod()/stat() S_IF* constants and S_IS* functions
-are available via the C<:mode> tag.
-
-=item File::Compare
-
-A compare_text() function has been added, which allows custom
-comparison functions. See L<File::Compare>.
-
-=item File::Find
-
-File::Find now works correctly when the wanted() function is either
-autoloaded or is a symbolic reference.
-
-A bug that caused File::Find to lose track of the working directory
-when pruning top-level directories has been fixed.
-
-File::Find now also supports several other options to control its
-behavior. It can follow symbolic links if the C<follow> option is
-specified. Enabling the C<no_chdir> option will make File::Find skip
-changing the current directory when walking directories. The C<untaint>
-flag can be useful when running with taint checks enabled.
-
-See L<File::Find>.
-
-=item File::Glob
-
-This extension implements BSD-style file globbing. By default,
-it will also be used for the internal implementation of the glob()
-operator. See L<File::Glob>.
-
-=item File::Spec
-
-New methods have been added to the File::Spec module: devnull() returns
-the name of the null device (/dev/null on Unix) and tmpdir() the name of
-the temp directory (normally /tmp on Unix). There are now also methods
-to convert between absolute and relative filenames: abs2rel() and
-rel2abs(). For compatibility with operating systems that specify volume
-names in file paths, the splitpath(), splitdir(), and catdir() methods
-have been added.
-
-=item File::Spec::Functions
-
-The new File::Spec::Functions modules provides a function interface
-to the File::Spec module. Allows shorthand
-
- $fullname = catfile($dir1, $dir2, $file);
-
-instead of
-
- $fullname = File::Spec->catfile($dir1, $dir2, $file);
-
-=item Getopt::Long
-
-Getopt::Long licensing has changed to allow the Perl Artistic License
-as well as the GPL. It used to be GPL only, which got in the way of
-non-GPL applications that wanted to use Getopt::Long.
-
-Getopt::Long encourages the use of Pod::Usage to produce help
-messages. For example:
-
- use Getopt::Long;
- use Pod::Usage;
- my $man = 0;
- my $help = 0;
- GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
- pod2usage(1) if $help;
- pod2usage(-exitstatus => 0, -verbose => 2) if $man;
-
- __END__
-
- =head1 NAME
-
- sample - Using GetOpt::Long and Pod::Usage
-
- =head1 SYNOPSIS
-
- sample [options] [file ...]
-
- Options:
- -help brief help message
- -man full documentation
-
- =head1 OPTIONS
-
- =over 8
-
- =item B<-help>
-
- Print a brief help message and exits.
-
- =item B<-man>
-
- Prints the manual page and exits.
-
- =back
-
- =head1 DESCRIPTION
-
- B<This program> will read the given input file(s) and do something
- useful with the contents thereof.
-
- =cut
-
-See L<Pod::Usage> for details.
-
-A bug that prevented the non-option call-back <> from being
-specified as the first argument has been fixed.
-
-To specify the characters < and > as option starters, use ><. Note,
-however, that changing option starters is strongly deprecated.
-
-=item IO
-
-write() and syswrite() will now accept a single-argument
-form of the call, for consistency with Perl's syswrite().
-
-You can now create a TCP-based IO::Socket::INET without forcing
-a connect attempt. This allows you to configure its options
-(like making it non-blocking) and then call connect() manually.
-
-A bug that prevented the IO::Socket::protocol() accessor
-from ever returning the correct value has been corrected.
-
-IO::Socket::connect now uses non-blocking IO instead of alarm()
-to do connect timeouts.
-
-IO::Socket::accept now uses select() instead of alarm() for doing
-timeouts.
-
-IO::Socket::INET->new now sets $! correctly on failure. $@ is
-still set for backwards compatibility.
-
-=item JPL
-
-Java Perl Lingo is now distributed with Perl. See jpl/README
-for more information.
-
-=item lib
-
-C<use lib> now weeds out any trailing duplicate entries.
-C<no lib> removes all named entries.
-
-=item Math::BigInt
-
-The bitwise operations C<<< << >>>, C<<< >> >>>, C<&>, C<|>,
-and C<~> are now supported on bigints.
-
-=item Math::Complex
-
-The accessor methods Re, Im, arg, abs, rho, and theta can now also
-act as mutators (accessor $z->Re(), mutator $z->Re(3)).
-
-The class method C<display_format> and the corresponding object method
-C<display_format>, in addition to accepting just one argument, now can
-also accept a parameter hash. Recognized keys of a parameter hash are
-C<"style">, which corresponds to the old one parameter case, and two
-new parameters: C<"format">, which is a printf()-style format string
-(defaults usually to C<"%.15g">, you can revert to the default by
-setting the format string to C<undef>) used for both parts of a
-complex number, and C<"polar_pretty_print"> (defaults to true),
-which controls whether an attempt is made to try to recognize small
-multiples and rationals of pi (2pi, pi/2) at the argument (angle) of a
-polar complex number.
-
-The potentially disruptive change is that in list context both methods
-now I<return the parameter hash>, instead of only the value of the
-C<"style"> parameter.
-
-=item Math::Trig
-
-A little bit of radial trigonometry (cylindrical and spherical),
-radial coordinate conversions, and the great circle distance were added.
-
-=item Pod::Parser, Pod::InputObjects
-
-Pod::Parser is a base class for parsing and selecting sections of
-pod documentation from an input stream. This module takes care of
-identifying pod paragraphs and commands in the input and hands off the
-parsed paragraphs and commands to user-defined methods which are free
-to interpret or translate them as they see fit.
-
-Pod::InputObjects defines some input objects needed by Pod::Parser, and
-for advanced users of Pod::Parser that need more about a command besides
-its name and text.
-
-As of release 5.6.0 of Perl, Pod::Parser is now the officially sanctioned
-"base parser code" recommended for use by all pod2xxx translators.
-Pod::Text (pod2text) and Pod::Man (pod2man) have already been converted
-to use Pod::Parser and efforts to convert Pod::HTML (pod2html) are already
-underway. For any questions or comments about pod parsing and translating
-issues and utilities, please use the pod-people@perl.org mailing list.
-
-For further information, please see L<Pod::Parser> and L<Pod::InputObjects>.
-
-=item Pod::Checker, podchecker
-
-This utility checks pod files for correct syntax, according to
-L<perlpod>. Obvious errors are flagged as such, while warnings are
-printed for mistakes that can be handled gracefully. The checklist is
-not complete yet. See L<Pod::Checker>.
-
-=item Pod::ParseUtils, Pod::Find
-
-These modules provide a set of gizmos that are useful mainly for pod
-translators. L<Pod::Find|Pod::Find> traverses directory structures and
-returns found pod files, along with their canonical names (like
-C<File::Spec::Unix>). L<Pod::ParseUtils|Pod::ParseUtils> contains
-B<Pod::List> (useful for storing pod list information), B<Pod::Hyperlink>
-(for parsing the contents of C<LE<lt>E<gt>> sequences) and B<Pod::Cache>
-(for caching information about pod files, e.g., link nodes).
-
-=item Pod::Select, podselect
-
-Pod::Select is a subclass of Pod::Parser which provides a function
-named "podselect()" to filter out user-specified sections of raw pod
-documentation from an input stream. podselect is a script that provides
-access to Pod::Select from other scripts to be used as a filter.
-See L<Pod::Select>.
-
-=item Pod::Usage, pod2usage
-
-Pod::Usage provides the function "pod2usage()" to print usage messages for
-a Perl script based on its embedded pod documentation. The pod2usage()
-function is generally useful to all script authors since it lets them
-write and maintain a single source (the pods) for documentation, thus
-removing the need to create and maintain redundant usage message text
-consisting of information already in the pods.
-
-There is also a pod2usage script which can be used from other kinds of
-scripts to print usage messages from pods (even for non-Perl scripts
-with pods embedded in comments).
-
-For details and examples, please see L<Pod::Usage>.
-
-=item Pod::Text and Pod::Man
-
-Pod::Text has been rewritten to use Pod::Parser. While pod2text() is
-still available for backwards compatibility, the module now has a new
-preferred interface. See L<Pod::Text> for the details. The new Pod::Text
-module is easily subclassed for tweaks to the output, and two such
-subclasses (Pod::Text::Termcap for man-page-style bold and underlining
-using termcap information, and Pod::Text::Color for markup with ANSI color
-sequences) are now standard.
-
-pod2man has been turned into a module, Pod::Man, which also uses
-Pod::Parser. In the process, several outstanding bugs related to quotes
-in section headers, quoting of code escapes, and nested lists have been
-fixed. pod2man is now a wrapper script around this module.
-
-=item SDBM_File
-
-An EXISTS method has been added to this module (and sdbm_exists() has
-been added to the underlying sdbm library), so one can now call exists
-on an SDBM_File tied hash and get the correct result, rather than a
-runtime error.
-
-A bug that may have caused data loss when more than one disk block
-happens to be read from the database in a single FETCH() has been
-fixed.
-
-=item Sys::Syslog
-
-Sys::Syslog now uses XSUBs to access facilities from syslog.h so it
-no longer requires syslog.ph to exist.
-
-=item Sys::Hostname
-
-Sys::Hostname now uses XSUBs to call the C library's gethostname() or
-uname() if they exist.
-
-=item Term::ANSIColor
-
-Term::ANSIColor is a very simple module to provide easy and readable
-access to the ANSI color and highlighting escape sequences, supported by
-most ANSI terminal emulators. It is now included standard.
-
-=item Time::Local
-
-The timelocal() and timegm() functions used to silently return bogus
-results when the date fell outside the machine's integer range. They
-now consistently croak() if the date falls in an unsupported range.
-
-=item Win32
-
-The error return value in list context has been changed for all functions
-that return a list of values. Previously these functions returned a list
-with a single element C<undef> if an error occurred. Now these functions
-return the empty list in these situations. This applies to the following
-functions:
-
- Win32::FsType
- Win32::GetOSVersion
-
-The remaining functions are unchanged and continue to return C<undef> on
-error even in list context.
-
-The Win32::SetLastError(ERROR) function has been added as a complement
-to the Win32::GetLastError() function.
-
-The new Win32::GetFullPathName(FILENAME) returns the full absolute
-pathname for FILENAME in scalar context. In list context it returns
-a two-element list containing the fully qualified directory name and
-the filename. See L<Win32>.
-
-=item XSLoader
-
-The XSLoader extension is a simpler alternative to DynaLoader.
-See L<XSLoader>.
-
-=item DBM Filters
-
-A new feature called "DBM Filters" has been added to all the
-DBM modules--DB_File, GDBM_File, NDBM_File, ODBM_File, and SDBM_File.
-DBM Filters add four new methods to each DBM module:
-
- filter_store_key
- filter_store_value
- filter_fetch_key
- filter_fetch_value
-
-These can be used to filter key-value pairs before the pairs are
-written to the database or just after they are read from the database.
-See L<perldbmfilter> for further information.
-
-=back
-
-=head2 Pragmata
-
-C<use attrs> is now obsolete, and is only provided for
-backward-compatibility. It's been replaced by the C<sub : attributes>
-syntax. See L<perlsub/"Subroutine Attributes"> and L<attributes>.
-
-Lexical warnings pragma, C<use warnings;>, to control optional warnings.
-See L<perllexwarn>.
-
-C<use filetest> to control the behaviour of filetests (C<-r> C<-w>
-...). Currently only one subpragma implemented, "use filetest
-'access';", that uses access(2) or equivalent to check permissions
-instead of using stat(2) as usual. This matters in filesystems
-where there are ACLs (access control lists): the stat(2) might lie,
-but access(2) knows better.
-
-The C<open> pragma can be used to specify default disciplines for
-handle constructors (e.g. open()) and for qx//. The two
-pseudo-disciplines C<:raw> and C<:crlf> are currently supported on
-DOS-derivative platforms (i.e. where binmode is not a no-op).
-See also L</"binmode() can be used to set :crlf and :raw modes">.
-
-=head1 Utility Changes
-
-=head2 dprofpp
-
-C<dprofpp> is used to display profile data generated using C<Devel::DProf>.
-See L<dprofpp>.
-
-=head2 find2perl
-
-The C<find2perl> utility now uses the enhanced features of the File::Find
-module. The -depth and -follow options are supported. Pod documentation
-is also included in the script.
-
-=head2 h2xs
-
-The C<h2xs> tool can now work in conjunction with C<C::Scan> (available
-from CPAN) to automatically parse real-life header files. The C<-M>,
-C<-a>, C<-k>, and C<-o> options are new.
-
-=head2 perlcc
-
-C<perlcc> now supports the C and Bytecode backends. By default,
-it generates output from the simple C backend rather than the
-optimized C backend.
-
-Support for non-Unix platforms has been improved.
-
-=head2 perldoc
-
-C<perldoc> has been reworked to avoid possible security holes.
-It will not by default let itself be run as the superuser, but you
-may still use the B<-U> switch to try to make it drop privileges
-first.
-
-=head2 The Perl Debugger
-
-Many bug fixes and enhancements were added to F<perl5db.pl>, the
-Perl debugger. The help documentation was rearranged. New commands
-include C<< < ? >>, C<< > ? >>, and C<< { ? >> to list out current
-actions, C<man I<docpage>> to run your doc viewer on some perl
-docset, and support for quoted options. The help information was
-rearranged, and should be viewable once again if you're using B<less>
-as your pager. A serious security hole was plugged--you should
-immediately remove all older versions of the Perl debugger as
-installed in previous releases, all the way back to perl3, from
-your system to avoid being bitten by this.
-
-=head1 Improved Documentation
-
-Many of the platform-specific README files are now part of the perl
-installation. See L<perl> for the complete list.
-
-=over 4
-
-=item perlapi.pod
-
-The official list of public Perl API functions.
-
-=item perlboot.pod
-
-A tutorial for beginners on object-oriented Perl.
-
-=item perlcompile.pod
-
-An introduction to using the Perl Compiler suite.
-
-=item perldbmfilter.pod
-
-A howto document on using the DBM filter facility.
-
-=item perldebug.pod
-
-All material unrelated to running the Perl debugger, plus all
-low-level guts-like details that risked crushing the casual user
-of the debugger, have been relocated from the old manpage to the
-next entry below.
-
-=item perldebguts.pod
-
-This new manpage contains excessively low-level material not related
-to the Perl debugger, but slightly related to debugging Perl itself.
-It also contains some arcane internal details of how the debugging
-process works that may only be of interest to developers of Perl
-debuggers.
-
-=item perlfork.pod
-
-Notes on the fork() emulation currently available for the Windows platform.
-
-=item perlfilter.pod
-
-An introduction to writing Perl source filters.
-
-=item perlhack.pod
-
-Some guidelines for hacking the Perl source code.
-
-=item perlintern.pod
-
-A list of internal functions in the Perl source code.
-(List is currently empty.)
-
-=item perllexwarn.pod
-
-Introduction and reference information about lexically scoped
-warning categories.
-
-=item perlnumber.pod
-
-Detailed information about numbers as they are represented in Perl.
-
-=item perlopentut.pod
-
-A tutorial on using open() effectively.
-
-=item perlreftut.pod
-
-A tutorial that introduces the essentials of references.
-
-=item perltootc.pod
-
-A tutorial on managing class data for object modules.
-
-=item perltodo.pod
-
-Discussion of the most often wanted features that may someday be
-supported in Perl.
-
-=item perlunicode.pod
-
-An introduction to Unicode support features in Perl.
-
-=back
-
-=head1 Performance enhancements
-
-=head2 Simple sort() using { $a <=> $b } and the like are optimized
-
-Many common sort() operations using a simple inlined block are now
-optimized for faster performance.
-
-=head2 Optimized assignments to lexical variables
-
-Certain operations in the RHS of assignment statements have been
-optimized to directly set the lexical variable on the LHS,
-eliminating redundant copying overheads.
-
-=head2 Faster subroutine calls
-
-Minor changes in how subroutine calls are handled internally
-provide marginal improvements in performance.
-
-=head2 delete(), each(), values() and hash iteration are faster
-
-The hash values returned by delete(), each(), values() and hashes in a
-list context are the actual values in the hash, instead of copies.
-This results in significantly better performance, because it eliminates
-needless copying in most situations.
-
-=head1 Installation and Configuration Improvements
-
-=head2 -Dusethreads means something different
-
-The -Dusethreads flag now enables the experimental interpreter-based thread
-support by default. To get the flavor of experimental threads that was in
-5.005 instead, you need to run Configure with "-Dusethreads -Duse5005threads".
-
-As of v5.6.0, interpreter-threads support is still lacking a way to
-create new threads from Perl (i.e., C<use Thread;> will not work with
-interpreter threads). C<use Thread;> continues to be available when you
-specify the -Duse5005threads option to Configure, bugs and all.
-
- NOTE: Support for threads continues to be an experimental feature.
- Interfaces and implementation are subject to sudden and drastic changes.
-
-=head2 New Configure flags
-
-The following new flags may be enabled on the Configure command line
-by running Configure with C<-Dflag>.
-
- usemultiplicity
- usethreads useithreads (new interpreter threads: no Perl API yet)
- usethreads use5005threads (threads as they were in 5.005)
-
- use64bitint (equal to now deprecated 'use64bits')
- use64bitall
-
- uselongdouble
- usemorebits
- uselargefiles
- usesocks (only SOCKS v5 supported)
-
-=head2 Threadedness and 64-bitness now more daring
-
-The Configure options enabling the use of threads and the use of
-64-bitness are now more daring in the sense that they no more have an
-explicit list of operating systems of known threads/64-bit
-capabilities. In other words: if your operating system has the
-necessary APIs and datatypes, you should be able just to go ahead and
-use them, for threads by Configure -Dusethreads, and for 64 bits
-either explicitly by Configure -Duse64bitint or implicitly if your
-system has 64-bit wide datatypes. See also L<"64-bit support">.
-
-=head2 Long Doubles
-
-Some platforms have "long doubles", floating point numbers of even
-larger range than ordinary "doubles". To enable using long doubles for
-Perl's scalars, use -Duselongdouble.
-
-=head2 -Dusemorebits
-
-You can enable both -Duse64bitint and -Duselongdouble with -Dusemorebits.
-See also L<"64-bit support">.
-
-=head2 -Duselargefiles
-
-Some platforms support system APIs that are capable of handling large files
-(typically, files larger than two gigabytes). Perl will try to use these
-APIs if you ask for -Duselargefiles.
-
-See L<"Large file support"> for more information.
-
-=head2 installusrbinperl
-
-You can use "Configure -Uinstallusrbinperl" which causes installperl
-to skip installing perl also as /usr/bin/perl. This is useful if you
-prefer not to modify /usr/bin for some reason or another but harmful
-because many scripts assume to find Perl in /usr/bin/perl.
-
-=head2 SOCKS support
-
-You can use "Configure -Dusesocks" which causes Perl to probe
-for the SOCKS proxy protocol library (v5, not v4). For more information
-on SOCKS, see:
-
- http://www.socks.nec.com/
-
-=head2 C<-A> flag
-
-You can "post-edit" the Configure variables using the Configure C<-A>
-switch. The editing happens immediately after the platform specific
-hints files have been processed but before the actual configuration
-process starts. Run C<Configure -h> to find out the full C<-A> syntax.
-
-=head2 Enhanced Installation Directories
-
-The installation structure has been enriched to improve the support
-for maintaining multiple versions of perl, to provide locations for
-vendor-supplied modules, scripts, and manpages, and to ease maintenance
-of locally-added modules, scripts, and manpages. See the section on
-Installation Directories in the INSTALL file for complete details.
-For most users building and installing from source, the defaults should
-be fine.
-
-If you previously used C<Configure -Dsitelib> or C<-Dsitearch> to set
-special values for library directories, you might wish to consider using
-the new C<-Dsiteprefix> setting instead. Also, if you wish to re-use a
-config.sh file from an earlier version of perl, you should be sure to
-check that Configure makes sensible choices for the new directories.
-See INSTALL for complete details.
-
-=head2 gcc automatically tried if 'cc' does not seem to be working
-
-In many platforms the vendor-supplied 'cc' is too stripped-down to
-build Perl (basically, the 'cc' doesn't do ANSI C). If this seems
-to be the case and the 'cc' does not seem to be the GNU C compiler
-'gcc', an automatic attempt is made to find and use 'gcc' instead.
-
-=head1 Platform specific changes
-
-=head2 Supported platforms
-
-=over 4
-
-=item *
-
-The Mach CThreads (NEXTSTEP, OPENSTEP) are now supported by the Thread
-extension.
-
-=item *
-
-GNU/Hurd is now supported.
-
-=item *
-
-Rhapsody/Darwin is now supported.
-
-=item *
-
-EPOC is now supported (on Psion 5).
-
-=item *
-
-The cygwin port (formerly cygwin32) has been greatly improved.
-
-=back
-
-=head2 DOS
-
-=over 4
-
-=item *
-
-Perl now works with djgpp 2.02 (and 2.03 alpha).
-
-=item *
-
-Environment variable names are not converted to uppercase any more.
-
-=item *
-
-Incorrect exit codes from backticks have been fixed.
-
-=item *
-
-This port continues to use its own builtin globbing (not File::Glob).
-
-=back
-
-=head2 OS390 (OpenEdition MVS)
-
-Support for this EBCDIC platform has not been renewed in this release.
-There are difficulties in reconciling Perl's standardization on UTF-8
-as its internal representation for characters with the EBCDIC character
-set, because the two are incompatible.
-
-It is unclear whether future versions will renew support for this
-platform, but the possibility exists.
-
-=head2 VMS
-
-Numerous revisions and extensions to configuration, build, testing, and
-installation process to accommodate core changes and VMS-specific options.
-
-Expand %ENV-handling code to allow runtime mapping to logical names,
-CLI symbols, and CRTL environ array.
-
-Extension of subprocess invocation code to accept filespecs as command
-"verbs".
-
-Add to Perl command line processing the ability to use default file types and
-to recognize Unix-style C<2E<gt>&1>.
-
-Expansion of File::Spec::VMS routines, and integration into ExtUtils::MM_VMS.
-
-Extension of ExtUtils::MM_VMS to handle complex extensions more flexibly.
-
-Barewords at start of Unix-syntax paths may be treated as text rather than
-only as logical names.
-
-Optional secure translation of several logical names used internally by Perl.
-
-Miscellaneous bugfixing and porting of new core code to VMS.
-
-Thanks are gladly extended to the many people who have contributed VMS
-patches, testing, and ideas.
-
-=head2 Win32
-
-Perl can now emulate fork() internally, using multiple interpreters running
-in different concurrent threads. This support must be enabled at build
-time. See L<perlfork> for detailed information.
-
-When given a pathname that consists only of a drivename, such as C<A:>,
-opendir() and stat() now use the current working directory for the drive
-rather than the drive root.
-
-The builtin XSUB functions in the Win32:: namespace are documented. See
-L<Win32>.
-
-$^X now contains the full path name of the running executable.
-
-A Win32::GetLongPathName() function is provided to complement
-Win32::GetFullPathName() and Win32::GetShortPathName(). See L<Win32>.
-
-POSIX::uname() is supported.
-
-system(1,...) now returns true process IDs rather than process
-handles. kill() accepts any real process id, rather than strictly
-return values from system(1,...).
-
-For better compatibility with Unix, C<kill(0, $pid)> can now be used to
-test whether a process exists.
-
-The C<Shell> module is supported.
-
-Better support for building Perl under command.com in Windows 95
-has been added.
-
-Scripts are read in binary mode by default to allow ByteLoader (and
-the filter mechanism in general) to work properly. For compatibility,
-the DATA filehandle will be set to text mode if a carriage return is
-detected at the end of the line containing the __END__ or __DATA__
-token; if not, the DATA filehandle will be left open in binary mode.
-Earlier versions always opened the DATA filehandle in text mode.
-
-The glob() operator is implemented via the C<File::Glob> extension,
-which supports glob syntax of the C shell. This increases the flexibility
-of the glob() operator, but there may be compatibility issues for
-programs that relied on the older globbing syntax. If you want to
-preserve compatibility with the older syntax, you might want to run
-perl with C<-MFile::DosGlob>. For details and compatibility information,
-see L<File::Glob>.
-
-=head1 Significant bug fixes
-
-=head2 <HANDLE> on empty files
-
-With C<$/> set to C<undef>, "slurping" an empty file returns a string of
-zero length (instead of C<undef>, as it used to) the first time the
-HANDLE is read after C<$/> is set to C<undef>. Further reads yield
-C<undef>.
-
-This means that the following will append "foo" to an empty file (it used
-to do nothing):
-
- perl -0777 -pi -e 's/^/foo/' empty_file
-
-The behaviour of:
-
- perl -pi -e 's/^/foo/' empty_file
-
-is unchanged (it continues to leave the file empty).
-
-=head2 C<eval '...'> improvements
-
-Line numbers (as reflected by caller() and most diagnostics) within
-C<eval '...'> were often incorrect where here documents were involved.
-This has been corrected.
-
-Lexical lookups for variables appearing in C<eval '...'> within
-functions that were themselves called within an C<eval '...'> were
-searching the wrong place for lexicals. The lexical search now
-correctly ends at the subroutine's block boundary.
-
-The use of C<return> within C<eval {...}> caused $@ not to be reset
-correctly when no exception occurred within the eval. This has
-been fixed.
-
-Parsing of here documents used to be flawed when they appeared as
-the replacement expression in C<eval 's/.../.../e'>. This has
-been fixed.
-
-=head2 All compilation errors are true errors
-
-Some "errors" encountered at compile time were by necessity
-generated as warnings followed by eventual termination of the
-program. This enabled more such errors to be reported in a
-single run, rather than causing a hard stop at the first error
-that was encountered.
-
-The mechanism for reporting such errors has been reimplemented
-to queue compile-time errors and report them at the end of the
-compilation as true errors rather than as warnings. This fixes
-cases where error messages leaked through in the form of warnings
-when code was compiled at run time using C<eval STRING>, and
-also allows such errors to be reliably trapped using C<eval "...">.
-
-=head2 Implicitly closed filehandles are safer
-
-Sometimes implicitly closed filehandles (as when they are localized,
-and Perl automatically closes them on exiting the scope) could
-inadvertently set $? or $!. This has been corrected.
-
-
-=head2 Behavior of list slices is more consistent
-
-When taking a slice of a literal list (as opposed to a slice of
-an array or hash), Perl used to return an empty list if the
-result happened to be composed of all undef values.
-
-The new behavior is to produce an empty list if (and only if)
-the original list was empty. Consider the following example:
-
- @a = (1,undef,undef,2)[2,1,2];
-
-The old behavior would have resulted in @a having no elements.
-The new behavior ensures it has three undefined elements.
-
-Note in particular that the behavior of slices of the following
-cases remains unchanged:
-
- @a = ()[1,2];
- @a = (getpwent)[7,0];
- @a = (anything_returning_empty_list())[2,1,2];
- @a = @b[2,1,2];
- @a = @c{'a','b','c'};
-
-See L<perldata>.
-
-=head2 C<(\$)> prototype and C<$foo{a}>
-
-A scalar reference prototype now correctly allows a hash or
-array element in that slot.
-
-=head2 C<goto &sub> and AUTOLOAD
-
-The C<goto &sub> construct works correctly when C<&sub> happens
-to be autoloaded.
-
-=head2 C<-bareword> allowed under C<use integer>
-
-The autoquoting of barewords preceded by C<-> did not work
-in prior versions when the C<integer> pragma was enabled.
-This has been fixed.
-
-=head2 Failures in DESTROY()
-
-When code in a destructor threw an exception, it went unnoticed
-in earlier versions of Perl, unless someone happened to be
-looking in $@ just after the point the destructor happened to
-run. Such failures are now visible as warnings when warnings are
-enabled.
-
-=head2 Locale bugs fixed
-
-printf() and sprintf() previously reset the numeric locale
-back to the default "C" locale. This has been fixed.
-
-Numbers formatted according to the local numeric locale
-(such as using a decimal comma instead of a decimal dot) caused
-"isn't numeric" warnings, even while the operations accessing
-those numbers produced correct results. These warnings have been
-discontinued.
-
-=head2 Memory leaks
-
-The C<eval 'return sub {...}'> construct could sometimes leak
-memory. This has been fixed.
-
-Operations that aren't filehandle constructors used to leak memory
-when used on invalid filehandles. This has been fixed.
-
-Constructs that modified C<@_> could fail to deallocate values
-in C<@_> and thus leak memory. This has been corrected.
-
-=head2 Spurious subroutine stubs after failed subroutine calls
-
-Perl could sometimes create empty subroutine stubs when a
-subroutine was not found in the package. Such cases stopped
-later method lookups from progressing into base packages.
-This has been corrected.
-
-=head2 Taint failures under C<-U>
-
-When running in unsafe mode, taint violations could sometimes
-cause silent failures. This has been fixed.
-
-=head2 END blocks and the C<-c> switch
-
-Prior versions used to run BEGIN B<and> END blocks when Perl was
-run in compile-only mode. Since this is typically not the expected
-behavior, END blocks are not executed anymore when the C<-c> switch
-is used, or if compilation fails.
-
-See L</"Support for CHECK blocks"> for how to run things when the compile
-phase ends.
-
-=head2 Potential to leak DATA filehandles
-
-Using the C<__DATA__> token creates an implicit filehandle to
-the file that contains the token. It is the program's
-responsibility to close it when it is done reading from it.
-
-This caveat is now better explained in the documentation.
-See L<perldata>.
-
-=head1 New or Changed Diagnostics
-
-=over 4
-
-=item "%s" variable %s masks earlier declaration in same %s
-
-(W misc) A "my" or "our" variable has been redeclared in the current scope or statement,
-effectively eliminating all access to the previous instance. This is almost
-always a typographical error. Note that the earlier variable will still exist
-until the end of the scope or until all closure referents to it are
-destroyed.
-
-=item "my sub" not yet implemented
-
-(F) Lexically scoped subroutines are not yet implemented. Don't try that
-yet.
-
-=item "our" variable %s redeclared
-
-(W misc) You seem to have already declared the same global once before in the
-current lexical scope.
-
-=item '!' allowed only after types %s
-
-(F) The '!' is allowed in pack() and unpack() only after certain types.
-See L<perlfunc/pack>.
-
-=item / cannot take a count
-
-(F) You had an unpack template indicating a counted-length string,
-but you have also specified an explicit size for the string.
-See L<perlfunc/pack>.
-
-=item / must be followed by a, A or Z
-
-(F) You had an unpack template indicating a counted-length string,
-which must be followed by one of the letters a, A or Z
-to indicate what sort of string is to be unpacked.
-See L<perlfunc/pack>.
-
-=item / must be followed by a*, A* or Z*
-
-(F) You had a pack template indicating a counted-length string,
-Currently the only things that can have their length counted are a*, A* or Z*.
-See L<perlfunc/pack>.
-
-=item / must follow a numeric type
-
-(F) You had an unpack template that contained a '#',
-but this did not follow some numeric unpack specification.
-See L<perlfunc/pack>.
-
-=item /%s/: Unrecognized escape \\%c passed through
-
-(W regexp) You used a backslash-character combination which is not recognized
-by Perl. This combination appears in an interpolated variable or a
-C<'>-delimited regular expression. The character was understood literally.
-
-=item /%s/: Unrecognized escape \\%c in character class passed through
-
-(W regexp) You used a backslash-character combination which is not recognized
-by Perl inside character classes. The character was understood literally.
-
-=item /%s/ should probably be written as "%s"
-
-(W syntax) You have used a pattern where Perl expected to find a string,
-as in the first argument to C<join>. Perl will treat the true
-or false result of matching the pattern against $_ as the string,
-which is probably not what you had in mind.
-
-=item %s() called too early to check prototype
-
-(W prototype) You've called a function that has a prototype before the parser saw a
-definition or declaration for it, and Perl could not check that the call
-conforms to the prototype. You need to either add an early prototype
-declaration for the subroutine in question, or move the subroutine
-definition ahead of the call to get proper prototype checking. Alternatively,
-if you are certain that you're calling the function correctly, you may put
-an ampersand before the name to avoid the warning. See L<perlsub>.
-
-=item %s argument is not a HASH or ARRAY element
-
-(F) The argument to exists() must be a hash or array element, such as:
-
- $foo{$bar}
- $ref->{"susie"}[12]
-
-=item %s argument is not a HASH or ARRAY element or slice
-
-(F) The argument to delete() must be either a hash or array element, such as:
-
- $foo{$bar}
- $ref->{"susie"}[12]
-
-or a hash or array slice, such as:
-
- @foo[$bar, $baz, $xyzzy]
- @{$ref->[12]}{"susie", "queue"}
-
-=item %s argument is not a subroutine name
-
-(F) The argument to exists() for C<exists &sub> must be a subroutine
-name, and not a subroutine call. C<exists &sub()> will generate this error.
-
-=item %s package attribute may clash with future reserved word: %s
-
-(W reserved) A lowercase attribute name was used that had a package-specific handler.
-That name might have a meaning to Perl itself some day, even though it
-doesn't yet. Perhaps you should use a mixed-case attribute name, instead.
-See L<attributes>.
-
-=item (in cleanup) %s
-
-(W misc) This prefix usually indicates that a DESTROY() method raised
-the indicated exception. Since destructors are usually called by
-the system at arbitrary points during execution, and often a vast
-number of times, the warning is issued only once for any number
-of failures that would otherwise result in the same message being
-repeated.
-
-Failure of user callbacks dispatched using the C<G_KEEPERR> flag
-could also result in this warning. See L<perlcall/G_KEEPERR>.
-
-=item <> should be quotes
-
-(F) You wrote C<< require <file> >> when you should have written
-C<require 'file'>.
-
-=item Attempt to join self
-
-(F) You tried to join a thread from within itself, which is an
-impossible task. You may be joining the wrong thread, or you may
-need to move the join() to some other thread.
-
-=item Bad evalled substitution pattern
-
-(F) You've used the /e switch to evaluate the replacement for a
-substitution, but perl found a syntax error in the code to evaluate,
-most likely an unexpected right brace '}'.
-
-=item Bad realloc() ignored
-
-(S) An internal routine called realloc() on something that had never been
-malloc()ed in the first place. Mandatory, but can be disabled by
-setting environment variable C<PERL_BADFREE> to 1.
-
-=item Bareword found in conditional
-
-(W bareword) The compiler found a bareword where it expected a conditional,
-which often indicates that an || or && was parsed as part of the
-last argument of the previous construct, for example:
-
- open FOO || die;
-
-It may also indicate a misspelled constant that has been interpreted
-as a bareword:
-
- use constant TYPO => 1;
- if (TYOP) { print "foo" }
-
-The C<strict> pragma is useful in avoiding such errors.
-
-=item Binary number > 0b11111111111111111111111111111111 non-portable
-
-(W portable) The binary number you specified is larger than 2**32-1
-(4294967295) and therefore non-portable between systems. See
-L<perlport> for more on portability concerns.
-
-=item Bit vector size > 32 non-portable
-
-(W portable) Using bit vector sizes larger than 32 is non-portable.
-
-=item Buffer overflow in prime_env_iter: %s
-
-(W internal) A warning peculiar to VMS. While Perl was preparing to iterate over
-%ENV, it encountered a logical name or symbol definition which was too long,
-so it was truncated to the string shown.
-
-=item Can't check filesystem of script "%s"
-
-(P) For some reason you can't check the filesystem of the script for nosuid.
-
-=item Can't declare class for non-scalar %s in "%s"
-
-(S) Currently, only scalar variables can declared with a specific class
-qualifier in a "my" or "our" declaration. The semantics may be extended
-for other types of variables in future.
-
-=item Can't declare %s in "%s"
-
-(F) Only scalar, array, and hash variables may be declared as "my" or
-"our" variables. They must have ordinary identifiers as names.
-
-=item Can't ignore signal CHLD, forcing to default
-
-(W signal) Perl has detected that it is being run with the SIGCHLD signal
-(sometimes known as SIGCLD) disabled. Since disabling this signal
-will interfere with proper determination of exit status of child
-processes, Perl has reset the signal to its default value.
-This situation typically indicates that the parent program under
-which Perl may be running (e.g., cron) is being very careless.
-
-=item Can't modify non-lvalue subroutine call
-
-(F) Subroutines meant to be used in lvalue context should be declared as
-such, see L<perlsub/"Lvalue subroutines">.
-
-=item Can't read CRTL environ
-
-(S) A warning peculiar to VMS. Perl tried to read an element of %ENV
-from the CRTL's internal environment array and discovered the array was
-missing. You need to figure out where your CRTL misplaced its environ
-or define F<PERL_ENV_TABLES> (see L<perlvms>) so that environ is not searched.
-
-=item Can't remove %s: %s, skipping file
-
-(S) You requested an inplace edit without creating a backup file. Perl
-was unable to remove the original file to replace it with the modified
-file. The file was left unmodified.
-
-=item Can't return %s from lvalue subroutine
-
-(F) Perl detected an attempt to return illegal lvalues (such
-as temporary or readonly values) from a subroutine used as an lvalue.
-This is not allowed.
-
-=item Can't weaken a nonreference
-
-(F) You attempted to weaken something that was not a reference. Only
-references can be weakened.
-
-=item Character class [:%s:] unknown
-
-(F) The class in the character class [: :] syntax is unknown.
-See L<perlre>.
-
-=item Character class syntax [%s] belongs inside character classes
-
-(W unsafe) The character class constructs [: :], [= =], and [. .] go
-I<inside> character classes, the [] are part of the construct,
-for example: /[012[:alpha:]345]/. Note that [= =] and [. .]
-are not currently implemented; they are simply placeholders for
-future extensions.
-
-=item Constant is not %s reference
-
-(F) A constant value (perhaps declared using the C<use constant> pragma)
-is being dereferenced, but it amounts to the wrong type of reference. The
-message indicates the type of reference that was expected. This usually
-indicates a syntax error in dereferencing the constant value.
-See L<perlsub/"Constant Functions"> and L<constant>.
-
-=item constant(%s): %s
-
-(F) The parser found inconsistencies either while attempting to define an
-overloaded constant, or when trying to find the character name specified
-in the C<\N{...}> escape. Perhaps you forgot to load the corresponding
-C<overload> or C<charnames> pragma? See L<charnames> and L<overload>.
-
-=item CORE::%s is not a keyword
-
-(F) The CORE:: namespace is reserved for Perl keywords.
-
-=item defined(@array) is deprecated
-
-(D) defined() is not usually useful on arrays because it checks for an
-undefined I<scalar> value. If you want to see if the array is empty,
-just use C<if (@array) { # not empty }> for example.
-
-=item defined(%hash) is deprecated
-
-(D) defined() is not usually useful on hashes because it checks for an
-undefined I<scalar> value. If you want to see if the hash is empty,
-just use C<if (%hash) { # not empty }> for example.
-
-=item Did not produce a valid header
-
-See Server error.
-
-=item (Did you mean "local" instead of "our"?)
-
-(W misc) Remember that "our" does not localize the declared global variable.
-You have declared it again in the same lexical scope, which seems superfluous.
-
-=item Document contains no data
-
-See Server error.
-
-=item entering effective %s failed
-
-(F) While under the C<use filetest> pragma, switching the real and
-effective uids or gids failed.
-
-=item false [] range "%s" in regexp
-
-(W regexp) A character class range must start and end at a literal character, not
-another character class like C<\d> or C<[:alpha:]>. The "-" in your false
-range is interpreted as a literal "-". Consider quoting the "-", "\-".
-See L<perlre>.
-
-=item Filehandle %s opened only for output
-
-(W io) You tried to read from a filehandle opened only for writing. If you
-intended it to be a read/write filehandle, you needed to open it with
-"+<" or "+>" or "+>>" instead of with "<" or nothing. If
-you intended only to read from the file, use "<". See
-L<perlfunc/open>.
-
-=item flock() on closed filehandle %s
-
-(W closed) The filehandle you're attempting to flock() got itself closed some
-time before now. Check your logic flow. flock() operates on filehandles.
-Are you attempting to call flock() on a dirhandle by the same name?
-
-=item Global symbol "%s" requires explicit package name
-
-(F) You've said "use strict vars", which indicates that all variables
-must either be lexically scoped (using "my"), declared beforehand using
-"our", or explicitly qualified to say which package the global variable
-is in (using "::").
-
-=item Hexadecimal number > 0xffffffff non-portable
-
-(W portable) The hexadecimal number you specified is larger than 2**32-1
-(4294967295) and therefore non-portable between systems. See
-L<perlport> for more on portability concerns.
-
-=item Ill-formed CRTL environ value "%s"
-
-(W internal) A warning peculiar to VMS. Perl tried to read the CRTL's internal
-environ array, and encountered an element without the C<=> delimiter
-used to separate keys from values. The element is ignored.
-
-=item Ill-formed message in prime_env_iter: |%s|
-
-(W internal) A warning peculiar to VMS. Perl tried to read a logical name
-or CLI symbol definition when preparing to iterate over %ENV, and
-didn't see the expected delimiter between key and value, so the
-line was ignored.
-
-=item Illegal binary digit %s
-
-(F) You used a digit other than 0 or 1 in a binary number.
-
-=item Illegal binary digit %s ignored
-
-(W digit) You may have tried to use a digit other than 0 or 1 in a binary number.
-Interpretation of the binary number stopped before the offending digit.
-
-=item Illegal number of bits in vec
-
-(F) The number of bits in vec() (the third argument) must be a power of
-two from 1 to 32 (or 64, if your platform supports that).
-
-=item Integer overflow in %s number
-
-(W overflow) The hexadecimal, octal or binary number you have specified either
-as a literal or as an argument to hex() or oct() is too big for your
-architecture, and has been converted to a floating point number. On a
-32-bit architecture the largest hexadecimal, octal or binary number
-representable without overflow is 0xFFFFFFFF, 037777777777, or
-0b11111111111111111111111111111111 respectively. Note that Perl
-transparently promotes all numbers to a floating point representation
-internally--subject to loss of precision errors in subsequent
-operations.
-
-=item Invalid %s attribute: %s
-
-The indicated attribute for a subroutine or variable was not recognized
-by Perl or by a user-supplied handler. See L<attributes>.
-
-=item Invalid %s attributes: %s
-
-The indicated attributes for a subroutine or variable were not recognized
-by Perl or by a user-supplied handler. See L<attributes>.
-
-=item invalid [] range "%s" in regexp
-
-The offending range is now explicitly displayed.
-
-=item Invalid separator character %s in attribute list
-
-(F) Something other than a colon or whitespace was seen between the
-elements of an attribute list. If the previous attribute
-had a parenthesised parameter list, perhaps that list was terminated
-too soon. See L<attributes>.
-
-=item Invalid separator character %s in subroutine attribute list
-
-(F) Something other than a colon or whitespace was seen between the
-elements of a subroutine attribute list. If the previous attribute
-had a parenthesised parameter list, perhaps that list was terminated
-too soon.
-
-=item leaving effective %s failed
-
-(F) While under the C<use filetest> pragma, switching the real and
-effective uids or gids failed.
-
-=item Lvalue subs returning %s not implemented yet
-
-(F) Due to limitations in the current implementation, array and hash
-values cannot be returned in subroutines used in lvalue context.
-See L<perlsub/"Lvalue subroutines">.
-
-=item Method %s not permitted
-
-See Server error.
-
-=item Missing %sbrace%s on \N{}
-
-(F) Wrong syntax of character name literal C<\N{charname}> within
-double-quotish context.
-
-=item Missing command in piped open
-
-(W pipe) You used the C<open(FH, "| command")> or C<open(FH, "command |")>
-construction, but the command was missing or blank.
-
-=item Missing name in "my sub"
-
-(F) The reserved syntax for lexically scoped subroutines requires that they
-have a name with which they can be found.
-
-=item No %s specified for -%c
-
-(F) The indicated command line switch needs a mandatory argument, but
-you haven't specified one.
-
-=item No package name allowed for variable %s in "our"
-
-(F) Fully qualified variable names are not allowed in "our" declarations,
-because that doesn't make much sense under existing semantics. Such
-syntax is reserved for future extensions.
-
-=item No space allowed after -%c
-
-(F) The argument to the indicated command line switch must follow immediately
-after the switch, without intervening spaces.
-
-=item no UTC offset information; assuming local time is UTC
-
-(S) A warning peculiar to VMS. Perl was unable to find the local
-timezone offset, so it's assuming that local system time is equivalent
-to UTC. If it's not, define the logical name F<SYS$TIMEZONE_DIFFERENTIAL>
-to translate to the number of seconds which need to be added to UTC to
-get local time.
-
-=item Octal number > 037777777777 non-portable
-
-(W portable) The octal number you specified is larger than 2**32-1 (4294967295)
-and therefore non-portable between systems. See L<perlport> for more
-on portability concerns.
-
-See also L<perlport> for writing portable code.
-
-=item panic: del_backref
-
-(P) Failed an internal consistency check while trying to reset a weak
-reference.
-
-=item panic: kid popen errno read
-
-(F) forked child returned an incomprehensible message about its errno.
-
-=item panic: magic_killbackrefs
-
-(P) Failed an internal consistency check while trying to reset all weak
-references to an object.
-
-=item Parentheses missing around "%s" list
-
-(W parenthesis) You said something like
-
- my $foo, $bar = @_;
-
-when you meant
-
- my ($foo, $bar) = @_;
-
-Remember that "my", "our", and "local" bind tighter than comma.
-
-=item Possible unintended interpolation of %s in string
-
-(W ambiguous) It used to be that Perl would try to guess whether you
-wanted an array interpolated or a literal @. It no longer does this;
-arrays are now I<always> interpolated into strings. This means that
-if you try something like:
-
- print "fred@example.com";
-
-and the array C<@example> doesn't exist, Perl is going to print
-C<fred.com>, which is probably not what you wanted. To get a literal
-C<@> sign in a string, put a backslash before it, just as you would
-to get a literal C<$> sign.
-
-=item Possible Y2K bug: %s
-
-(W y2k) You are concatenating the number 19 with another number, which
-could be a potential Year 2000 problem.
-
-=item pragma "attrs" is deprecated, use "sub NAME : ATTRS" instead
-
-(W deprecated) You have written something like this:
-
- sub doit
- {
- use attrs qw(locked);
- }
-
-You should use the new declaration syntax instead.
-
- sub doit : locked
- {
- ...
-
-The C<use attrs> pragma is now obsolete, and is only provided for
-backward-compatibility. See L<perlsub/"Subroutine Attributes">.
-
-
-=item Premature end of script headers
-
-See Server error.
-
-=item Repeat count in pack overflows
-
-(F) You can't specify a repeat count so large that it overflows
-your signed integers. See L<perlfunc/pack>.
-
-=item Repeat count in unpack overflows
-
-(F) You can't specify a repeat count so large that it overflows
-your signed integers. See L<perlfunc/unpack>.
-
-=item realloc() of freed memory ignored
-
-(S) An internal routine called realloc() on something that had already
-been freed.
-
-=item Reference is already weak
-
-(W misc) You have attempted to weaken a reference that is already weak.
-Doing so has no effect.
-
-=item setpgrp can't take arguments
-
-(F) Your system has the setpgrp() from BSD 4.2, which takes no arguments,
-unlike POSIX setpgid(), which takes a process ID and process group ID.
-
-=item Strange *+?{} on zero-length expression
-
-(W regexp) You applied a regular expression quantifier in a place where it
-makes no sense, such as on a zero-width assertion.
-Try putting the quantifier inside the assertion instead. For example,
-the way to match "abc" provided that it is followed by three
-repetitions of "xyz" is C</abc(?=(?:xyz){3})/>, not C</abc(?=xyz){3}/>.
-
-=item switching effective %s is not implemented
-
-(F) While under the C<use filetest> pragma, we cannot switch the
-real and effective uids or gids.
-
-=item This Perl can't reset CRTL environ elements (%s)
-
-=item This Perl can't set CRTL environ elements (%s=%s)
-
-(W internal) Warnings peculiar to VMS. You tried to change or delete an element
-of the CRTL's internal environ array, but your copy of Perl wasn't
-built with a CRTL that contained the setenv() function. You'll need to
-rebuild Perl with a CRTL that does, or redefine F<PERL_ENV_TABLES> (see
-L<perlvms>) so that the environ array isn't the target of the change to
-%ENV which produced the warning.
-
-=item Too late to run %s block
-
-(W void) A CHECK or INIT block is being defined during run time proper,
-when the opportunity to run them has already passed. Perhaps you are
-loading a file with C<require> or C<do> when you should be using
-C<use> instead. Or perhaps you should put the C<require> or C<do>
-inside a BEGIN block.
-
-=item Unknown open() mode '%s'
-
-(F) The second argument of 3-argument open() is not among the list
-of valid modes: C<< < >>, C<< > >>, C<<< >> >>>, C<< +< >>,
-C<< +> >>, C<<< +>> >>>, C<-|>, C<|->.
-
-=item Unknown process %x sent message to prime_env_iter: %s
-
-(P) An error peculiar to VMS. Perl was reading values for %ENV before
-iterating over it, and someone else stuck a message in the stream of
-data Perl expected. Someone's very confused, or perhaps trying to
-subvert Perl's population of %ENV for nefarious purposes.
-
-=item Unrecognized escape \\%c passed through
-
-(W misc) You used a backslash-character combination which is not recognized
-by Perl. The character was understood literally.
-
-=item Unterminated attribute parameter in attribute list
-
-(F) The lexer saw an opening (left) parenthesis character while parsing an
-attribute list, but the matching closing (right) parenthesis
-character was not found. You may need to add (or remove) a backslash
-character to get your parentheses to balance. See L<attributes>.
-
-=item Unterminated attribute list
-
-(F) The lexer found something other than a simple identifier at the start
-of an attribute, and it wasn't a semicolon or the start of a
-block. Perhaps you terminated the parameter list of the previous attribute
-too soon. See L<attributes>.
-
-=item Unterminated attribute parameter in subroutine attribute list
-
-(F) The lexer saw an opening (left) parenthesis character while parsing a
-subroutine attribute list, but the matching closing (right) parenthesis
-character was not found. You may need to add (or remove) a backslash
-character to get your parentheses to balance.
-
-=item Unterminated subroutine attribute list
-
-(F) The lexer found something other than a simple identifier at the start
-of a subroutine attribute, and it wasn't a semicolon or the start of a
-block. Perhaps you terminated the parameter list of the previous attribute
-too soon.
-
-=item Value of CLI symbol "%s" too long
-
-(W misc) A warning peculiar to VMS. Perl tried to read the value of an %ENV
-element from a CLI symbol table, and found a resultant string longer
-than 1024 characters. The return value has been truncated to 1024
-characters.
-
-=item Version number must be a constant number
-
-(P) The attempt to translate a C<use Module n.n LIST> statement into
-its equivalent C<BEGIN> block found an internal inconsistency with
-the version number.
-
-=back
-
-=head1 New tests
-
-=over 4
-
-=item lib/attrs
-
-Compatibility tests for C<sub : attrs> vs the older C<use attrs>.
-
-=item lib/env
-
-Tests for new environment scalar capability (e.g., C<use Env qw($BAR);>).
-
-=item lib/env-array
-
-Tests for new environment array capability (e.g., C<use Env qw(@PATH);>).
-
-=item lib/io_const
-
-IO constants (SEEK_*, _IO*).
-
-=item lib/io_dir
-
-Directory-related IO methods (new, read, close, rewind, tied delete).
-
-=item lib/io_multihomed
-
-INET sockets with multi-homed hosts.
-
-=item lib/io_poll
-
-IO poll().
-
-=item lib/io_unix
-
-UNIX sockets.
-
-=item op/attrs
-
-Regression tests for C<my ($x,@y,%z) : attrs> and <sub : attrs>.
-
-=item op/filetest
-
-File test operators.
-
-=item op/lex_assign
-
-Verify operations that access pad objects (lexicals and temporaries).
-
-=item op/exists_sub
-
-Verify C<exists &sub> operations.
-
-=back
-
-=head1 Incompatible Changes
-
-=head2 Perl Source Incompatibilities
-
-Beware that any new warnings that have been added or old ones
-that have been enhanced are B<not> considered incompatible changes.
-
-Since all new warnings must be explicitly requested via the C<-w>
-switch or the C<warnings> pragma, it is ultimately the programmer's
-responsibility to ensure that warnings are enabled judiciously.
-
-=over 4
-
-=item CHECK is a new keyword
-
-All subroutine definitions named CHECK are now special. See
-C</"Support for CHECK blocks"> for more information.
-
-=item Treatment of list slices of undef has changed
-
-There is a potential incompatibility in the behavior of list slices
-that are comprised entirely of undefined values.
-See L</"Behavior of list slices is more consistent">.
-
-=item Format of $English::PERL_VERSION is different
-
-The English module now sets $PERL_VERSION to $^V (a string value) rather
-than C<$]> (a numeric value). This is a potential incompatibility.
-Send us a report via perlbug if you are affected by this.
-
-See L</"Improved Perl version numbering system"> for the reasons for
-this change.
-
-=item Literals of the form C<1.2.3> parse differently
-
-Previously, numeric literals with more than one dot in them were
-interpreted as a floating point number concatenated with one or more
-numbers. Such "numbers" are now parsed as strings composed of the
-specified ordinals.
-
-For example, C<print 97.98.99> used to output C<97.9899> in earlier
-versions, but now prints C<abc>.
-
-See L</"Support for strings represented as a vector of ordinals">.
-
-=item Possibly changed pseudo-random number generator
-
-Perl programs that depend on reproducing a specific set of pseudo-random
-numbers may now produce different output due to improvements made to the
-rand() builtin. You can use C<sh Configure -Drandfunc=rand> to obtain
-the old behavior.
-
-See L</"Better pseudo-random number generator">.
-
-=item Hashing function for hash keys has changed
-
-Even though Perl hashes are not order preserving, the apparently
-random order encountered when iterating on the contents of a hash
-is actually determined by the hashing algorithm used. Improvements
-in the algorithm may yield a random order that is B<different> from
-that of previous versions, especially when iterating on hashes.
-
-See L</"Better worst-case behavior of hashes"> for additional
-information.
-
-=item C<undef> fails on read only values
-
-Using the C<undef> operator on a readonly value (such as $1) has
-the same effect as assigning C<undef> to the readonly value--it
-throws an exception.
-
-=item Close-on-exec bit may be set on pipe and socket handles
-
-Pipe and socket handles are also now subject to the close-on-exec
-behavior determined by the special variable $^F.
-
-See L</"More consistent close-on-exec behavior">.
-
-=item Writing C<"$$1"> to mean C<"${$}1"> is unsupported
-
-Perl 5.004 deprecated the interpretation of C<$$1> and
-similar within interpolated strings to mean C<$$ . "1">,
-but still allowed it.
-
-In Perl 5.6.0 and later, C<"$$1"> always means C<"${$1}">.
-
-=item delete(), each(), values() and C<\(%h)>
-
-operate on aliases to values, not copies
-
-delete(), each(), values() and hashes (e.g. C<\(%h)>)
-in a list context return the actual
-values in the hash, instead of copies (as they used to in earlier
-versions). Typical idioms for using these constructs copy the
-returned values, but this can make a significant difference when
-creating references to the returned values. Keys in the hash are still
-returned as copies when iterating on a hash.
-
-See also L</"delete(), each(), values() and hash iteration are faster">.
-
-=item vec(EXPR,OFFSET,BITS) enforces powers-of-two BITS
-
-vec() generates a run-time error if the BITS argument is not
-a valid power-of-two integer.
-
-=item Text of some diagnostic output has changed
-
-Most references to internal Perl operations in diagnostics
-have been changed to be more descriptive. This may be an
-issue for programs that may incorrectly rely on the exact
-text of diagnostics for proper functioning.
-
-=item C<%@> has been removed
-
-The undocumented special variable C<%@> that used to accumulate
-"background" errors (such as those that happen in DESTROY())
-has been removed, because it could potentially result in memory
-leaks.
-
-=item Parenthesized not() behaves like a list operator
-
-The C<not> operator now falls under the "if it looks like a function,
-it behaves like a function" rule.
-
-As a result, the parenthesized form can be used with C<grep> and C<map>.
-The following construct used to be a syntax error before, but it works
-as expected now:
-
- grep not($_), @things;
-
-On the other hand, using C<not> with a literal list slice may not
-work. The following previously allowed construct:
-
- print not (1,2,3)[0];
-
-needs to be written with additional parentheses now:
-
- print not((1,2,3)[0]);
-
-The behavior remains unaffected when C<not> is not followed by parentheses.
-
-=item Semantics of bareword prototype C<(*)> have changed
-
-The semantics of the bareword prototype C<*> have changed. Perl 5.005
-always coerced simple scalar arguments to a typeglob, which wasn't useful
-in situations where the subroutine must distinguish between a simple
-scalar and a typeglob. The new behavior is to not coerce bareword
-arguments to a typeglob. The value will always be visible as either
-a simple scalar or as a reference to a typeglob.
-
-See L</"More functional bareword prototype (*)">.
-
-=item Semantics of bit operators may have changed on 64-bit platforms
-
-If your platform is either natively 64-bit or if Perl has been
-configured to used 64-bit integers, i.e., $Config{ivsize} is 8,
-there may be a potential incompatibility in the behavior of bitwise
-numeric operators (& | ^ ~ << >>). These operators used to strictly
-operate on the lower 32 bits of integers in previous versions, but now
-operate over the entire native integral width. In particular, note
-that unary C<~> will produce different results on platforms that have
-different $Config{ivsize}. For portability, be sure to mask off
-the excess bits in the result of unary C<~>, e.g., C<~$x & 0xffffffff>.
-
-See L</"Bit operators support full native integer width">.
-
-=item More builtins taint their results
-
-As described in L</"Improved security features">, there may be more
-sources of taint in a Perl program.
-
-To avoid these new tainting behaviors, you can build Perl with the
-Configure option C<-Accflags=-DINCOMPLETE_TAINTS>. Beware that the
-ensuing perl binary may be insecure.
-
-=back
-
-=head2 C Source Incompatibilities
-
-=over 4
-
-=item C<PERL_POLLUTE>
-
-Release 5.005 grandfathered old global symbol names by providing preprocessor
-macros for extension source compatibility. As of release 5.6.0, these
-preprocessor definitions are not available by default. You need to explicitly
-compile perl with C<-DPERL_POLLUTE> to get these definitions. For
-extensions still using the old symbols, this option can be
-specified via MakeMaker:
-
- perl Makefile.PL POLLUTE=1
-
-=item C<PERL_IMPLICIT_CONTEXT>
-
-This new build option provides a set of macros for all API functions
-such that an implicit interpreter/thread context argument is passed to
-every API function. As a result of this, something like C<sv_setsv(foo,bar)>
-amounts to a macro invocation that actually translates to something like
-C<Perl_sv_setsv(my_perl,foo,bar)>. While this is generally expected
-to not have any significant source compatibility issues, the difference
-between a macro and a real function call will need to be considered.
-
-This means that there B<is> a source compatibility issue as a result of
-this if your extensions attempt to use pointers to any of the Perl API
-functions.
-
-Note that the above issue is not relevant to the default build of
-Perl, whose interfaces continue to match those of prior versions
-(but subject to the other options described here).
-
-See L<perlguts/"The Perl API"> for detailed information on the
-ramifications of building Perl with this option.
-
- NOTE: PERL_IMPLICIT_CONTEXT is automatically enabled whenever Perl is built
- with one of -Dusethreads, -Dusemultiplicity, or both. It is not
- intended to be enabled by users at this time.
-
-=item C<PERL_POLLUTE_MALLOC>
-
-Enabling Perl's malloc in release 5.005 and earlier caused the namespace of
-the system's malloc family of functions to be usurped by the Perl versions,
-since by default they used the same names. Besides causing problems on
-platforms that do not allow these functions to be cleanly replaced, this
-also meant that the system versions could not be called in programs that
-used Perl's malloc. Previous versions of Perl have allowed this behaviour
-to be suppressed with the HIDEMYMALLOC and EMBEDMYMALLOC preprocessor
-definitions.
-
-As of release 5.6.0, Perl's malloc family of functions have default names
-distinct from the system versions. You need to explicitly compile perl with
-C<-DPERL_POLLUTE_MALLOC> to get the older behaviour. HIDEMYMALLOC
-and EMBEDMYMALLOC have no effect, since the behaviour they enabled is now
-the default.
-
-Note that these functions do B<not> constitute Perl's memory allocation API.
-See L<perlguts/"Memory Allocation"> for further information about that.
-
-=back
-
-=head2 Compatible C Source API Changes
-
-=over 4
-
-=item C<PATCHLEVEL> is now C<PERL_VERSION>
-
-The cpp macros C<PERL_REVISION>, C<PERL_VERSION>, and C<PERL_SUBVERSION>
-are now available by default from perl.h, and reflect the base revision,
-patchlevel, and subversion respectively. C<PERL_REVISION> had no
-prior equivalent, while C<PERL_VERSION> and C<PERL_SUBVERSION> were
-previously available as C<PATCHLEVEL> and C<SUBVERSION>.
-
-The new names cause less pollution of the B<cpp> namespace and reflect what
-the numbers have come to stand for in common practice. For compatibility,
-the old names are still supported when F<patchlevel.h> is explicitly
-included (as required before), so there is no source incompatibility
-from the change.
-
-=back
-
-=head2 Binary Incompatibilities
-
-In general, the default build of this release is expected to be binary
-compatible for extensions built with the 5.005 release or its maintenance
-versions. However, specific platforms may have broken binary compatibility
-due to changes in the defaults used in hints files. Therefore, please be
-sure to always check the platform-specific README files for any notes to
-the contrary.
-
-The usethreads or usemultiplicity builds are B<not> binary compatible
-with the corresponding builds in 5.005.
-
-On platforms that require an explicit list of exports (AIX, OS/2 and Windows,
-among others), purely internal symbols such as parser functions and the
-run time opcodes are not exported by default. Perl 5.005 used to export
-all functions irrespective of whether they were considered part of the
-public API or not.
-
-For the full list of public API functions, see L<perlapi>.
-
-=head1 Known Problems
-
-=head2 Localizing a tied hash element may leak memory
-
-As of the 5.6.1 release, there is a known leak when code such as this
-is executed:
-
- use Tie::Hash;
- tie my %tie_hash => 'Tie::StdHash';
-
- ...
-
- local($tie_hash{Foo}) = 1; # leaks
-
-=head2 Known test failures
-
-=over
-
-=item 64-bit builds
-
-Subtest #15 of lib/b.t may fail under 64-bit builds on platforms such
-as HP-UX PA64 and Linux IA64. The issue is still being investigated.
-
-The lib/io_multihomed test may hang in HP-UX if Perl has been
-configured to be 64-bit. Because other 64-bit platforms do not
-hang in this test, HP-UX is suspect. All other tests pass
-in 64-bit HP-UX. The test attempts to create and connect to
-"multihomed" sockets (sockets which have multiple IP addresses).
-
-Note that 64-bit support is still experimental.
-
-=item Failure of Thread tests
-
-The subtests 19 and 20 of lib/thr5005.t test are known to fail due to
-fundamental problems in the 5.005 threading implementation. These are
-not new failures--Perl 5.005_0x has the same bugs, but didn't have these
-tests. (Note that support for 5.005-style threading remains experimental.)
-
-=item NEXTSTEP 3.3 POSIX test failure
-
-In NEXTSTEP 3.3p2 the implementation of the strftime(3) in the
-operating system libraries is buggy: the %j format numbers the days of
-a month starting from zero, which, while being logical to programmers,
-will cause the subtests 19 to 27 of the lib/posix test may fail.
-
-=item Tru64 (aka Digital UNIX, aka DEC OSF/1) lib/sdbm test failure with gcc
-
-If compiled with gcc 2.95 the lib/sdbm test will fail (dump core).
-The cure is to use the vendor cc, it comes with the operating system
-and produces good code.
-
-=back
-
-=head2 EBCDIC platforms not fully supported
-
-In earlier releases of Perl, EBCDIC environments like OS390 (also
-known as Open Edition MVS) and VM-ESA were supported. Due to changes
-required by the UTF-8 (Unicode) support, the EBCDIC platforms are not
-supported in Perl 5.6.0.
-
-The 5.6.1 release improves support for EBCDIC platforms, but they
-are not fully supported yet.
-
-=head2 UNICOS/mk CC failures during Configure run
-
-In UNICOS/mk the following errors may appear during the Configure run:
-
- Guessing which symbols your C compiler and preprocessor define...
- CC-20 cc: ERROR File = try.c, Line = 3
- ...
- bad switch yylook 79bad switch yylook 79bad switch yylook 79bad switch yylook 79#ifdef A29K
- ...
- 4 errors detected in the compilation of "try.c".
-
-The culprit is the broken awk of UNICOS/mk. The effect is fortunately
-rather mild: Perl itself is not adversely affected by the error, only
-the h2ph utility coming with Perl, and that is rather rarely needed
-these days.
-
-=head2 Arrow operator and arrays
-
-When the left argument to the arrow operator C<< -> >> is an array, or
-the C<scalar> operator operating on an array, the result of the
-operation must be considered erroneous. For example:
-
- @x->[2]
- scalar(@x)->[2]
-
-These expressions will get run-time errors in some future release of
-Perl.
-
-=head2 Experimental features
-
-As discussed above, many features are still experimental. Interfaces and
-implementation of these features are subject to change, and in extreme cases,
-even subject to removal in some future release of Perl. These features
-include the following:
-
-=over 4
-
-=item Threads
-
-=item Unicode
-
-=item 64-bit support
-
-=item Lvalue subroutines
-
-=item Weak references
-
-=item The pseudo-hash data type
-
-=item The Compiler suite
-
-=item Internal implementation of file globbing
-
-=item The DB module
-
-=item The regular expression code constructs:
-
-C<(?{ code })> and C<(??{ code })>
-
-=back
-
-=head1 Obsolete Diagnostics
-
-=over 4
-
-=item Character class syntax [: :] is reserved for future extensions
-
-(W) Within regular expression character classes ([]) the syntax beginning
-with "[:" and ending with ":]" is reserved for future extensions.
-If you need to represent those character sequences inside a regular
-expression character class, just quote the square brackets with the
-backslash: "\[:" and ":\]".
-
-=item Ill-formed logical name |%s| in prime_env_iter
-
-(W) A warning peculiar to VMS. A logical name was encountered when preparing
-to iterate over %ENV which violates the syntactic rules governing logical
-names. Because it cannot be translated normally, it is skipped, and will not
-appear in %ENV. This may be a benign occurrence, as some software packages
-might directly modify logical name tables and introduce nonstandard names,
-or it may indicate that a logical name table has been corrupted.
-
-=item In string, @%s now must be written as \@%s
-
-The description of this error used to say:
-
- (Someday it will simply assume that an unbackslashed @
- interpolates an array.)
-
-That day has come, and this fatal error has been removed. It has been
-replaced by a non-fatal warning instead.
-See L</Arrays now always interpolate into double-quoted strings> for
-details.
-
-=item Probable precedence problem on %s
-
-(W) The compiler found a bareword where it expected a conditional,
-which often indicates that an || or && was parsed as part of the
-last argument of the previous construct, for example:
-
- open FOO || die;
-
-=item regexp too big
-
-(F) The current implementation of regular expressions uses shorts as
-address offsets within a string. Unfortunately this means that if
-the regular expression compiles to longer than 32767, it'll blow up.
-Usually when you want a regular expression this big, there is a better
-way to do it with multiple statements. See L<perlre>.
-
-=item Use of "$$<digit>" to mean "${$}<digit>" is deprecated
-
-(D) Perl versions before 5.004 misinterpreted any type marker followed
-by "$" and a digit. For example, "$$0" was incorrectly taken to mean
-"${$}0" instead of "${$0}". This bug is (mostly) fixed in Perl 5.004.
-
-However, the developers of Perl 5.004 could not fix this bug completely,
-because at least two widely-used modules depend on the old meaning of
-"$$0" in a string. So Perl 5.004 still interprets "$$<digit>" in the
-old (broken) way inside strings; but it generates this message as a
-warning. And in Perl 5.005, this special treatment will cease.
-
-=back
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the
-articles recently posted to the comp.lang.perl.misc newsgroup.
-There may also be information at http://www.perl.com/, the Perl
-Home Page.
-
-If you believe you have an unreported bug, please run the B<perlbug>
-program included with your release. Be sure to trim your bug down
-to a tiny but sufficient test case. Your bug report, along with the
-output of C<perl -V>, will be sent off to perlbug@perl.org to be
-analysed by the Perl porting team.
-
-=head1 SEE ALSO
-
-The F<Changes> file for exhaustive details on what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=head1 HISTORY
-
-Written by Gurusamy Sarathy <F<gsar@ActiveState.com>>, with many
-contributions from The Perl Porters.
-
-Send omissions or corrections to <F<perlbug@perl.org>>.
-
-=cut
diff --git a/contrib/perl5/pod/perldiag.pod b/contrib/perl5/pod/perldiag.pod
deleted file mode 100644
index b842c1c..0000000
--- a/contrib/perl5/pod/perldiag.pod
+++ /dev/null
@@ -1,3869 +0,0 @@
-=head1 NAME
-
-perldiag - various Perl diagnostics
-
-=head1 DESCRIPTION
-
-These messages are classified as follows (listed in increasing order of
-desperation):
-
- (W) A warning (optional).
- (D) A deprecation (optional).
- (S) A severe warning (default).
- (F) A fatal error (trappable).
- (P) An internal error you should never see (trappable).
- (X) A very fatal error (nontrappable).
- (A) An alien error message (not generated by Perl).
-
-The majority of messages from the first three classifications above
-(W, D & S) can be controlled using the C<warnings> pragma.
-
-If a message can be controlled by the C<warnings> pragma, its warning
-category is included with the classification letter in the description
-below.
-
-Optional warnings are enabled by using the C<warnings> pragma or the B<-w>
-and B<-W> switches. Warnings may be captured by setting C<$SIG{__WARN__}>
-to a reference to a routine that will be called on each warning instead
-of printing it. See L<perlvar>.
-
-Default warnings are always enabled unless they are explicitly disabled
-with the C<warnings> pragma or the B<-X> switch.
-
-Trappable errors may be trapped using the eval operator. See
-L<perlfunc/eval>. In almost all cases, warnings may be selectively
-disabled or promoted to fatal errors using the C<warnings> pragma.
-See L<warnings>.
-
-The messages are in alphabetical order, without regard to upper or
-lower-case. Some of these messages are generic. Spots that vary are
-denoted with a %s or other printf-style escape. These escapes are
-ignored by the alphabetical order, as are all characters other than
-letters. To look up your message, just ignore anything that is not a
-letter.
-
-=over 4
-
-=item accept() on closed socket %s
-
-(W closed) You tried to do an accept on a closed socket. Did you forget
-to check the return value of your socket() call? See
-L<perlfunc/accept>.
-
-=item Allocation too large: %lx
-
-(X) You can't allocate more than 64K on an MS-DOS machine.
-
-=item '!' allowed only after types %s
-
-(F) The '!' is allowed in pack() and unpack() only after certain types.
-See L<perlfunc/pack>.
-
-=item Ambiguous call resolved as CORE::%s(), qualify as such or use &
-
-(W ambiguous) A subroutine you have declared has the same name as a Perl
-keyword, and you have used the name without qualification for calling
-one or the other. Perl decided to call the builtin because the
-subroutine is not imported.
-
-To force interpretation as a subroutine call, either put an ampersand
-before the subroutine name, or qualify the name with its package.
-Alternatively, you can import the subroutine (or pretend that it's
-imported with the C<use subs> pragma).
-
-To silently interpret it as the Perl operator, use the C<CORE::> prefix
-on the operator (e.g. C<CORE::log($x)>) or by declaring the subroutine
-to be an object method (see L<perlsub/"Subroutine Attributes"> or
-L<attributes>).
-
-=item Ambiguous use of %s resolved as %s
-
-(W ambiguous)(S) You said something that may not be interpreted the way
-you thought. Normally it's pretty easy to disambiguate it by supplying
-a missing quote, operator, parenthesis pair or declaration.
-
-=item '|' and '<' may not both be specified on command line
-
-(F) An error peculiar to VMS. Perl does its own command line
-redirection, and found that STDIN was a pipe, and that you also tried to
-redirect STDIN using '<'. Only one STDIN stream to a customer, please.
-
-=item '|' and '>' may not both be specified on command line
-
-(F) An error peculiar to VMS. Perl does its own command line
-redirection, and thinks you tried to redirect stdout both to a file and
-into a pipe to another command. You need to choose one or the other,
-though nothing's stopping you from piping into a program or Perl script
-which 'splits' output into two streams, such as
-
- open(OUT,">$ARGV[0]") or die "Can't write to $ARGV[0]: $!";
- while (<STDIN>) {
- print;
- print OUT;
- }
- close OUT;
-
-=item Applying %s to %s will act on scalar(%s)
-
-(W misc) The pattern match (//), substitution (s///), and
-transliteration (tr///) operators work on scalar values. If you apply
-one of them to an array or a hash, it will convert the array or hash to
-a scalar value -- the length of an array, or the population info of a
-hash -- and then work on that scalar value. This is probably not what
-you meant to do. See L<perlfunc/grep> and L<perlfunc/map> for
-alternatives.
-
-=item Args must match #! line
-
-(F) The setuid emulator requires that the arguments Perl was invoked
-with match the arguments specified on the #! line. Since some systems
-impose a one-argument limit on the #! line, try combining switches;
-for example, turn C<-w -U> into C<-wU>.
-
-=item Arg too short for msgsnd
-
-(F) msgsnd() requires a string at least as long as sizeof(long).
-
-=item %s argument is not a HASH or ARRAY element
-
-(F) The argument to exists() must be a hash or array element, such as:
-
- $foo{$bar}
- $ref->{"susie"}[12]
-
-=item %s argument is not a HASH or ARRAY element or slice
-
-(F) The argument to delete() must be either a hash or array element,
-such as:
-
- $foo{$bar}
- $ref->{"susie"}[12]
-
-or a hash or array slice, such as:
-
- @foo[$bar, $baz, $xyzzy]
- @{$ref->[12]}{"susie", "queue"}
-
-=item %s argument is not a subroutine name
-
-(F) The argument to exists() for C<exists &sub> must be a subroutine
-name, and not a subroutine call. C<exists &sub()> will generate this
-error.
-
-=item Argument "%s" isn't numeric%s
-
-(W numeric) The indicated string was fed as an argument to an operator
-that expected a numeric value instead. If you're fortunate the message
-will identify which operator was so unfortunate.
-
-=item Array @%s missing the @ in argument %d of %s()
-
-(D deprecated) Really old Perl let you omit the @ on array names in some
-spots. This is now heavily deprecated.
-
-=item assertion botched: %s
-
-(P) The malloc package that comes with Perl had an internal failure.
-
-=item Assertion failed: file "%s"
-
-(P) A general assertion failed. The file in question must be examined.
-
-=item Assignment to both a list and a scalar
-
-(F) If you assign to a conditional operator, the 2nd and 3rd arguments
-must either both be scalars or both be lists. Otherwise Perl won't
-know which context to supply to the right side.
-
-=item Negative offset to vec in lvalue context
-
-(F) When vec is called in an lvalue context, the second argument must be
-greater than or equal to zero.
-
-=item Attempt to free non-arena SV: 0x%lx
-
-(P internal) All SV objects are supposed to be allocated from arenas
-that will be garbage collected on exit. An SV was discovered to be
-outside any of those arenas.
-
-=item Attempt to free nonexistent shared string
-
-(P internal) Perl maintains a reference counted internal table of
-strings to optimize the storage and access of hash keys and other
-strings. This indicates someone tried to decrement the reference count
-of a string that can no longer be found in the table.
-
-=item Attempt to free temp prematurely
-
-(W debugging) Mortalized values are supposed to be freed by the
-free_tmps() routine. This indicates that something else is freeing the
-SV before the free_tmps() routine gets a chance, which means that the
-free_tmps() routine will be freeing an unreferenced scalar when it does
-try to free it.
-
-=item Attempt to free unreferenced glob pointers
-
-(P internal) The reference counts got screwed up on symbol aliases.
-
-=item Attempt to free unreferenced scalar
-
-(W internal) Perl went to decrement the reference count of a scalar to
-see if it would go to 0, and discovered that it had already gone to 0
-earlier, and should have been freed, and in fact, probably was freed.
-This could indicate that SvREFCNT_dec() was called too many times, or
-that SvREFCNT_inc() was called too few times, or that the SV was
-mortalized when it shouldn't have been, or that memory has been
-corrupted.
-
-=item Attempt to join self
-
-(F) You tried to join a thread from within itself, which is an
-impossible task. You may be joining the wrong thread, or you may need
-to move the join() to some other thread.
-
-=item Attempt to pack pointer to temporary value
-
-(W pack) You tried to pass a temporary value (like the result of a
-function, or a computed expression) to the "p" pack() template. This
-means the result contains a pointer to a location that could become
-invalid anytime, even before the end of the current statement. Use
-literals or global values as arguments to the "p" pack() template to
-avoid this warning.
-
-=item Attempt to use reference as lvalue in substr
-
-(W substr) You supplied a reference as the first argument to substr()
-used as an lvalue, which is pretty strange. Perhaps you forgot to
-dereference it first. See L<perlfunc/substr>.
-
-=item Bad arg length for %s, is %d, should be %d
-
-(F) You passed a buffer of the wrong size to one of msgctl(), semctl()
-or shmctl(). In C parlance, the correct sizes are, respectively,
-S<sizeof(struct msqid_ds *)>, S<sizeof(struct semid_ds *)>, and
-S<sizeof(struct shmid_ds *)>.
-
-=item Bad evalled substitution pattern
-
-(F) You've used the /e switch to evaluate the replacement for a
-substitution, but perl found a syntax error in the code to evaluate,
-most likely an unexpected right brace '}'.
-
-=item Bad filehandle: %s
-
-(F) A symbol was passed to something wanting a filehandle, but the
-symbol has no filehandle associated with it. Perhaps you didn't do an
-open(), or did it in another package.
-
-=item Bad free() ignored
-
-(S malloc) An internal routine called free() on something that had never
-been malloc()ed in the first place. Mandatory, but can be disabled by
-setting environment variable C<PERL_BADFREE> to 0.
-
-This message can be seen quite often with DB_File on systems with "hard"
-dynamic linking, like C<AIX> and C<OS/2>. It is a bug of C<Berkeley DB>
-which is left unnoticed if C<DB> uses I<forgiving> system malloc().
-
-=item Bad hash
-
-(P) One of the internal hash routines was passed a null HV pointer.
-
-=item Bad index while coercing array into hash
-
-(F) The index looked up in the hash found as the 0'th element of a
-pseudo-hash is not legal. Index values must be at 1 or greater.
-See L<perlref>.
-
-=item Badly placed ()'s
-
-(A) You've accidentally run your script through B<csh> instead
-of Perl. Check the #! line, or manually feed your script into
-Perl yourself.
-
-=item Bad name after %s::
-
-(F) You started to name a symbol by using a package prefix, and then
-didn't finish the symbol. In particular, you can't interpolate outside
-of quotes, so
-
- $var = 'myvar';
- $sym = mypack::$var;
-
-is not the same as
-
- $var = 'myvar';
- $sym = "mypack::$var";
-
-=item Bad realloc() ignored
-
-(S malloc) An internal routine called realloc() on something that had
-never been malloc()ed in the first place. Mandatory, but can be disabled
-by setting environment variable C<PERL_BADFREE> to 1.
-
-=item Bad symbol for array
-
-(P) An internal request asked to add an array entry to something that
-wasn't a symbol table entry.
-
-=item Bad symbol for filehandle
-
-(P) An internal request asked to add a filehandle entry to something
-that wasn't a symbol table entry.
-
-=item Bad symbol for hash
-
-(P) An internal request asked to add a hash entry to something that
-wasn't a symbol table entry.
-
-=item Bareword found in conditional
-
-(W bareword) The compiler found a bareword where it expected a
-conditional, which often indicates that an || or && was parsed as part
-of the last argument of the previous construct, for example:
-
- open FOO || die;
-
-It may also indicate a misspelled constant that has been interpreted as
-a bareword:
-
- use constant TYPO => 1;
- if (TYOP) { print "foo" }
-
-The C<strict> pragma is useful in avoiding such errors.
-
-=item Bareword "%s" not allowed while "strict subs" in use
-
-(F) With "strict subs" in use, a bareword is only allowed as a
-subroutine identifier, in curly brackets or to the left of the "=>"
-symbol. Perhaps you need to predeclare a subroutine?
-
-=item Bareword "%s" refers to nonexistent package
-
-(W bareword) You used a qualified bareword of the form C<Foo::>, but the
-compiler saw no other uses of that namespace before that point. Perhaps
-you need to predeclare a package?
-
-=item BEGIN failed--compilation aborted
-
-(F) An untrapped exception was raised while executing a BEGIN
-subroutine. Compilation stops immediately and the interpreter is
-exited.
-
-=item BEGIN not safe after errors--compilation aborted
-
-(F) Perl found a C<BEGIN {}> subroutine (or a C<use> directive, which
-implies a C<BEGIN {}>) after one or more compilation errors had already
-occurred. Since the intended environment for the C<BEGIN {}> could not
-be guaranteed (due to the errors), and since subsequent code likely
-depends on its correct operation, Perl just gave up.
-
-=item \1 better written as $1
-
-(W syntax) Outside of patterns, backreferences live on as variables.
-The use of backslashes is grandfathered on the right-hand side of a
-substitution, but stylistically it's better to use the variable form
-because other Perl programmers will expect it, and it works better if
-there are more than 9 backreferences.
-
-=item Binary number > 0b11111111111111111111111111111111 non-portable
-
-(W portable) The binary number you specified is larger than 2**32-1
-(4294967295) and therefore non-portable between systems. See
-L<perlport> for more on portability concerns.
-
-=item bind() on closed socket %s
-
-(W closed) You tried to do a bind on a closed socket. Did you forget to
-check the return value of your socket() call? See L<perlfunc/bind>.
-
-=item Bit vector size > 32 non-portable
-
-(W portable) Using bit vector sizes larger than 32 is non-portable.
-
-=item Bizarre copy of %s in %s
-
-(P) Perl detected an attempt to copy an internal value that is not
-copyable.
-
-=item B<-P> not allowed for setuid/setgid script
-
-(F) The script would have to be opened by the C preprocessor by name,
-which provides a race condition that breaks security.
-
-=item Buffer overflow in prime_env_iter: %s
-
-(W internal) A warning peculiar to VMS. While Perl was preparing to
-iterate over %ENV, it encountered a logical name or symbol definition
-which was too long, so it was truncated to the string shown.
-
-=item Callback called exit
-
-(F) A subroutine invoked from an external package via call_sv()
-exited by calling exit.
-
-=item %s() called too early to check prototype
-
-(W prototype) You've called a function that has a prototype before the
-parser saw a definition or declaration for it, and Perl could not check
-that the call conforms to the prototype. You need to either add an
-early prototype declaration for the subroutine in question, or move the
-subroutine definition ahead of the call to get proper prototype
-checking. Alternatively, if you are certain that you're calling the
-function correctly, you may put an ampersand before the name to avoid
-the warning. See L<perlsub>.
-
-=item / cannot take a count
-
-(F) You had an unpack template indicating a counted-length string, but
-you have also specified an explicit size for the string. See
-L<perlfunc/pack>.
-
-=item Can't bless non-reference value
-
-(F) Only hard references may be blessed. This is how Perl "enforces"
-encapsulation of objects. See L<perlobj>.
-
-=item Can't call method "%s" in empty package "%s"
-
-(F) You called a method correctly, and it correctly indicated a package
-functioning as a class, but that package doesn't have ANYTHING defined
-in it, let alone methods. See L<perlobj>.
-
-=item Can't call method "%s" on an undefined value
-
-(F) You used the syntax of a method call, but the slot filled by the
-object reference or package name contains an undefined value. Something
-like this will reproduce the error:
-
- $BADREF = undef;
- process $BADREF 1,2,3;
- $BADREF->process(1,2,3);
-
-=item Can't call method "%s" on unblessed reference
-
-(F) A method call must know in what package it's supposed to run. It
-ordinarily finds this out from the object reference you supply, but you
-didn't supply an object reference in this case. A reference isn't an
-object reference until it has been blessed. See L<perlobj>.
-
-=item Can't call method "%s" without a package or object reference
-
-(F) You used the syntax of a method call, but the slot filled by the
-object reference or package name contains an expression that returns a
-defined value which is neither an object reference nor a package name.
-Something like this will reproduce the error:
-
- $BADREF = 42;
- process $BADREF 1,2,3;
- $BADREF->process(1,2,3);
-
-=item Can't chdir to %s
-
-(F) You called C<perl -x/foo/bar>, but C</foo/bar> is not a directory
-that you can chdir to, possibly because it doesn't exist.
-
-=item Can't check filesystem of script "%s" for nosuid
-
-(P) For some reason you can't check the filesystem of the script for
-nosuid.
-
-=item Can't coerce array into hash
-
-(F) You used an array where a hash was expected, but the array has no
-information on how to map from keys to array indices. You can do that
-only with arrays that have a hash reference at index 0.
-
-=item Can't coerce %s to integer in %s
-
-(F) Certain types of SVs, in particular real symbol table entries
-(typeglobs), can't be forced to stop being what they are. So you can't
-say things like:
-
- *foo += 1;
-
-You CAN say
-
- $foo = *foo;
- $foo += 1;
-
-but then $foo no longer contains a glob.
-
-=item Can't coerce %s to number in %s
-
-(F) Certain types of SVs, in particular real symbol table entries
-(typeglobs), can't be forced to stop being what they are.
-
-=item Can't coerce %s to string in %s
-
-(F) Certain types of SVs, in particular real symbol table entries
-(typeglobs), can't be forced to stop being what they are.
-
-=item Can't create pipe mailbox
-
-(P) An error peculiar to VMS. The process is suffering from exhausted
-quotas or other plumbing problems.
-
-=item Can't declare class for non-scalar %s in "%s"
-
-(S) Currently, only scalar variables can declared with a specific class
-qualifier in a "my" or "our" declaration. The semantics may be extended
-for other types of variables in future.
-
-=item Can't declare %s in "%s"
-
-(F) Only scalar, array, and hash variables may be declared as "my" or
-"our" variables. They must have ordinary identifiers as names.
-
-=item Can't do inplace edit: %s is not a regular file
-
-(S inplace) You tried to use the B<-i> switch on a special file, such as
-a file in /dev, or a FIFO. The file was ignored.
-
-=item Can't do inplace edit on %s: %s
-
-(S inplace) The creation of the new file failed for the indicated
-reason.
-
-=item Can't do inplace edit without backup
-
-(F) You're on a system such as MS-DOS that gets confused if you try
-reading from a deleted (but still opened) file. You have to say
-C<-i.bak>, or some such.
-
-=item Can't do inplace edit: %s would not be unique
-
-(S inplace) Your filesystem does not support filenames longer than 14
-characters and Perl was unable to create a unique filename during
-inplace editing with the B<-i> switch. The file was ignored.
-
-=item Can't do {n,m} with n > m before << HERE in regex m/%s/
-
-(F) Minima must be less than or equal to maxima. If you really want your
-regexp to match something 0 times, just put {0}. The << HERE shows in the
-regular expression about where the problem was discovered. See L<perlre>.
-
-=item Can't do setegid!
-
-(P) The setegid() call failed for some reason in the setuid emulator of
-suidperl.
-
-=item Can't do seteuid!
-
-(P) The setuid emulator of suidperl failed for some reason.
-
-=item Can't do setuid
-
-(F) This typically means that ordinary perl tried to exec suidperl to do
-setuid emulation, but couldn't exec it. It looks for a name of the form
-sperl5.000 in the same directory that the perl executable resides under
-the name perl5.000, typically /usr/local/bin on Unix machines. If the
-file is there, check the execute permissions. If it isn't, ask your
-sysadmin why he and/or she removed it.
-
-=item Can't do waitpid with flags
-
-(F) This machine doesn't have either waitpid() or wait4(), so only
-waitpid() without flags is emulated.
-
-=item Can't emulate -%s on #! line
-
-(F) The #! line specifies a switch that doesn't make sense at this
-point. For example, it'd be kind of silly to put a B<-x> on the #!
-line.
-
-=item Can't exec "%s": %s
-
-(W exec) An system(), exec(), or piped open call could not execute the
-named program for the indicated reason. Typical reasons include: the
-permissions were wrong on the file, the file wasn't found in
-C<$ENV{PATH}>, the executable in question was compiled for another
-architecture, or the #! line in a script points to an interpreter that
-can't be run for similar reasons. (Or maybe your system doesn't support
-#! at all.)
-
-=item Can't exec %s
-
-(F) Perl was trying to execute the indicated program for you because
-that's what the #! line said. If that's not what you wanted, you may
-need to mention "perl" on the #! line somewhere.
-
-=item Can't execute %s
-
-(F) You used the B<-S> switch, but the copies of the script to execute
-found in the PATH did not have correct permissions.
-
-=item Can't find an opnumber for "%s"
-
-(F) A string of a form C<CORE::word> was given to prototype(), but there
-is no builtin with the name C<word>.
-
-=item Can't find label %s
-
-(F) You said to goto a label that isn't mentioned anywhere that it's
-possible for us to go to. See L<perlfunc/goto>.
-
-=item Can't find %s on PATH
-
-(F) You used the B<-S> switch, but the script to execute could not be
-found in the PATH.
-
-=item Can't find %s on PATH, '.' not in PATH
-
-(F) You used the B<-S> switch, but the script to execute could not be
-found in the PATH, or at least not with the correct permissions. The
-script exists in the current directory, but PATH prohibits running it.
-
-=item Can't find string terminator %s anywhere before EOF
-
-(F) Perl strings can stretch over multiple lines. This message means
-that the closing delimiter was omitted. Because bracketed quotes count
-nesting levels, the following is missing its final parenthesis:
-
- print q(The character '(' starts a side comment.);
-
-If you're getting this error from a here-document, you may have included
-unseen whitespace before or after your closing tag. A good programmer's
-editor will have a way to help you find these characters.
-
-=item Can't find %s property definition %s
-
-(F) You may have tried to use C<\p> which means a Unicode property for
-example \p{Lu} is all uppercase letters. Escape the C<\p>, either
-C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, until
-possible C<\E>).
-
-=item Can't fork
-
-(F) A fatal error occurred while trying to fork while opening a
-pipeline.
-
-=item Can't get filespec - stale stat buffer?
-
-(S) A warning peculiar to VMS. This arises because of the difference
-between access checks under VMS and under the Unix model Perl assumes.
-Under VMS, access checks are done by filename, rather than by bits in
-the stat buffer, so that ACLs and other protections can be taken into
-account. Unfortunately, Perl assumes that the stat buffer contains all
-the necessary information, and passes it, instead of the filespec, to
-the access checking routine. It will try to retrieve the filespec using
-the device name and FID present in the stat buffer, but this works only
-if you haven't made a subsequent call to the CRTL stat() routine,
-because the device name is overwritten with each call. If this warning
-appears, the name lookup failed, and the access checking routine gave up
-and returned FALSE, just to be conservative. (Note: The access checking
-routine knows about the Perl C<stat> operator and file tests, so you
-shouldn't ever see this warning in response to a Perl command; it arises
-only if some internal code takes stat buffers lightly.)
-
-=item Can't get pipe mailbox device name
-
-(P) An error peculiar to VMS. After creating a mailbox to act as a
-pipe, Perl can't retrieve its name for later use.
-
-=item Can't get SYSGEN parameter value for MAXBUF
-
-(P) An error peculiar to VMS. Perl asked $GETSYI how big you want your
-mailbox buffers to be, and didn't get an answer.
-
-=item Can't "goto" into the middle of a foreach loop
-
-(F) A "goto" statement was executed to jump into the middle of a foreach
-loop. You can't get there from here. See L<perlfunc/goto>.
-
-=item Can't "goto" out of a pseudo block
-
-(F) A "goto" statement was executed to jump out of what might look like
-a block, except that it isn't a proper block. This usually occurs if
-you tried to jump out of a sort() block or subroutine, which is a no-no.
-See L<perlfunc/goto>.
-
-=item Can't goto subroutine from an eval-string
-
-(F) The "goto subroutine" call can't be used to jump out of an eval
-"string". (You can use it to jump out of an eval {BLOCK}, but you
-probably don't want to.)
-
-=item Can't goto subroutine outside a subroutine
-
-(F) The deeply magical "goto subroutine" call can only replace one
-subroutine call for another. It can't manufacture one out of whole
-cloth. In general you should be calling it out of only an AUTOLOAD
-routine anyway. See L<perlfunc/goto>.
-
-=item Can't ignore signal CHLD, forcing to default
-
-(W signal) Perl has detected that it is being run with the SIGCHLD
-signal (sometimes known as SIGCLD) disabled. Since disabling this
-signal will interfere with proper determination of exit status of child
-processes, Perl has reset the signal to its default value. This
-situation typically indicates that the parent program under which Perl
-may be running (e.g. cron) is being very careless.
-
-=item Can't "last" outside a loop block
-
-(F) A "last" statement was executed to break out of the current block,
-except that there's this itty bitty problem called there isn't a current
-block. Note that an "if" or "else" block doesn't count as a "loopish"
-block, as doesn't a block given to sort(), map() or grep(). You can
-usually double the curlies to get the same effect though, because the
-inner curlies will be considered a block that loops once. See
-L<perlfunc/last>.
-
-=item Can't localize lexical variable %s
-
-(F) You used local on a variable name that was previously declared as a
-lexical variable using "my". This is not allowed. If you want to
-localize a package variable of the same name, qualify it with the
-package name.
-
-=item Can't localize pseudo-hash element
-
-(F) You said something like C<< local $ar->{'key'} >>, where $ar is a
-reference to a pseudo-hash. That hasn't been implemented yet, but you
-can get a similar effect by localizing the corresponding array element
-directly -- C<< local $ar->[$ar->[0]{'key'}] >>.
-
-=item Can't localize through a reference
-
-(F) You said something like C<local $$ref>, which Perl can't currently
-handle, because when it goes to restore the old value of whatever $ref
-pointed to after the scope of the local() is finished, it can't be sure
-that $ref will still be a reference.
-
-=item Can't locate %s
-
-(F) You said to C<do> (or C<require>, or C<use>) a file that couldn't be
-found. Perl looks for the file in all the locations mentioned in @INC,
-unless the file name included the full path to the file. Perhaps you
-need to set the PERL5LIB or PERL5OPT environment variable to say where
-the extra library is, or maybe the script needs to add the library name
-to @INC. Or maybe you just misspelled the name of the file. See
-L<perlfunc/require> and L<lib>.
-
-=item Can't locate auto/%s.al in @INC
-
-(F) A function (or method) was called in a package which allows
-autoload, but there is no function to autoload. Most probable causes
-are a misprint in a function/method name or a failure to C<AutoSplit>
-the file, say, by doing C<make install>.
-
-=item Can't locate object method "%s" via package "%s"
-
-(F) You called a method correctly, and it correctly indicated a package
-functioning as a class, but that package doesn't define that particular
-method, nor does any of its base classes. See L<perlobj>.
-
-=item (perhaps you forgot to load "%s"?)
-
-(F) This is an educated guess made in conjunction with the message
-"Can't locate object method \"%s\" via package \"%s\"". It often means
-that a method requires a package that has not been loaded.
-
-=item Can't locate package %s for @%s::ISA
-
-(W syntax) The @ISA array contained the name of another package that
-doesn't seem to exist.
-
-=item Can't make list assignment to \%ENV on this system
-
-(F) List assignment to %ENV is not supported on some systems, notably
-VMS.
-
-=item Can't modify %s in %s
-
-(F) You aren't allowed to assign to the item indicated, or otherwise try
-to change it, such as with an auto-increment.
-
-=item Can't modify nonexistent substring
-
-(P) The internal routine that does assignment to a substr() was handed
-a NULL.
-
-=item Can't modify non-lvalue subroutine call
-
-(F) Subroutines meant to be used in lvalue context should be declared as
-such, see L<perlsub/"Lvalue subroutines">.
-
-=item Can't msgrcv to read-only var
-
-(F) The target of a msgrcv must be modifiable to be used as a receive
-buffer.
-
-=item Can't "next" outside a loop block
-
-(F) A "next" statement was executed to reiterate the current block, but
-there isn't a current block. Note that an "if" or "else" block doesn't
-count as a "loopish" block, as doesn't a block given to sort(), map() or
-grep(). You can usually double the curlies to get the same effect
-though, because the inner curlies will be considered a block that loops
-once. See L<perlfunc/next>.
-
-=item Can't open %s: %s
-
-(S inplace) The implicit opening of a file through use of the C<< <> >>
-filehandle, either implicitly under the C<-n> or C<-p> command-line
-switches, or explicitly, failed for the indicated reason. Usually this
-is because you don't have read permission for a file which you named on
-the command line.
-
-=item Can't open bidirectional pipe
-
-(W pipe) You tried to say C<open(CMD, "|cmd|")>, which is not supported.
-You can try any of several modules in the Perl library to do this, such
-as IPC::Open2. Alternately, direct the pipe's output to a file using
-">", and then read it in under a different file handle.
-
-=item Can't open error file %s as stderr
-
-(F) An error peculiar to VMS. Perl does its own command line
-redirection, and couldn't open the file specified after '2>' or '2>>' on
-the command line for writing.
-
-=item Can't open input file %s as stdin
-
-(F) An error peculiar to VMS. Perl does its own command line
-redirection, and couldn't open the file specified after '<' on the
-command line for reading.
-
-=item Can't open output file %s as stdout
-
-(F) An error peculiar to VMS. Perl does its own command line
-redirection, and couldn't open the file specified after '>' or '>>' on
-the command line for writing.
-
-=item Can't open output pipe (name: %s)
-
-(P) An error peculiar to VMS. Perl does its own command line
-redirection, and couldn't open the pipe into which to send data destined
-for stdout.
-
-=item Can't open perl script "%s": %s
-
-(F) The script you specified can't be opened for the indicated reason.
-
-=item Can't read CRTL environ
-
-(S) A warning peculiar to VMS. Perl tried to read an element of %ENV
-from the CRTL's internal environment array and discovered the array was
-missing. You need to figure out where your CRTL misplaced its environ
-or define F<PERL_ENV_TABLES> (see L<perlvms>) so that environ is not
-searched.
-
-=item Can't redefine active sort subroutine %s
-
-(F) Perl optimizes the internal handling of sort subroutines and keeps
-pointers into them. You tried to redefine one such sort subroutine when
-it was currently active, which is not allowed. If you really want to do
-this, you should write C<sort { &func } @x> instead of C<sort func @x>.
-
-=item Can't "redo" outside a loop block
-
-(F) A "redo" statement was executed to restart the current block, but
-there isn't a current block. Note that an "if" or "else" block doesn't
-count as a "loopish" block, as doesn't a block given to sort(), map()
-or grep(). You can usually double the curlies to get the same effect
-though, because the inner curlies will be considered a block that
-loops once. See L<perlfunc/redo>.
-
-=item Can't remove %s: %s, skipping file
-
-(S inplace) You requested an inplace edit without creating a backup
-file. Perl was unable to remove the original file to replace it with
-the modified file. The file was left unmodified.
-
-=item Can't rename %s to %s: %s, skipping file
-
-(S inplace) The rename done by the B<-i> switch failed for some reason,
-probably because you don't have write permission to the directory.
-
-=item Can't reopen input pipe (name: %s) in binary mode
-
-(P) An error peculiar to VMS. Perl thought stdin was a pipe, and tried
-to reopen it to accept binary data. Alas, it failed.
-
-=item Can't resolve method `%s' overloading `%s' in package `%s'
-
-(F|P) Error resolving overloading specified by a method name (as opposed
-to a subroutine reference): no such method callable via the package. If
-method name is C<???>, this is an internal error.
-
-=item Can't reswap uid and euid
-
-(P) The setreuid() call failed for some reason in the setuid emulator of
-suidperl.
-
-=item Can't return %s from lvalue subroutine
-
-(F) Perl detected an attempt to return illegal lvalues (such as
-temporary or readonly values) from a subroutine used as an lvalue. This
-is not allowed.
-
-=item Can't return %s to lvalue scalar context
-
-(F) You tried to return a complete array or hash from an lvalue subroutine,
-but you called the subroutine in a way that made Perl think you meant
-to return only one value. You probably meant to write parentheses around
-the call to the subroutine, which tell Perl that the call should be in
-list context.
-
-=item Can't return outside a subroutine
-
-(F) The return statement was executed in mainline code, that is, where
-there was no subroutine call to return out of. See L<perlsub>.
-
-=item Can't stat script "%s"
-
-(P) For some reason you can't fstat() the script even though you have it
-open already. Bizarre.
-
-=item Can't swap uid and euid
-
-(P) The setreuid() call failed for some reason in the setuid emulator of
-suidperl.
-
-=item Can't take log of %g
-
-(F) For ordinary real numbers, you can't take the logarithm of a
-negative number or zero. There's a Math::Complex package that comes
-standard with Perl, though, if you really want to do that for the
-negative numbers.
-
-=item Can't take sqrt of %g
-
-(F) For ordinary real numbers, you can't take the square root of a
-negative number. There's a Math::Complex package that comes standard
-with Perl, though, if you really want to do that.
-
-=item Can't undef active subroutine
-
-(F) You can't undefine a routine that's currently running. You can,
-however, redefine it while it's running, and you can even undef the
-redefined subroutine while the old routine is running. Go figure.
-
-=item Can't unshift
-
-(F) You tried to unshift an "unreal" array that can't be unshifted, such
-as the main Perl stack.
-
-=item Can't upgrade that kind of scalar
-
-(P) The internal sv_upgrade routine adds "members" to an SV, making it
-into a more specialized kind of SV. The top several SV types are so
-specialized, however, that they cannot be interconverted. This message
-indicates that such a conversion was attempted.
-
-=item Can't upgrade to undef
-
-(P) The undefined SV is the bottom of the totem pole, in the scheme of
-upgradability. Upgrading to undef indicates an error in the code
-calling sv_upgrade.
-
-=item Can't use an undefined value as %s reference
-
-(F) A value used as either a hard reference or a symbolic reference must
-be a defined value. This helps to delurk some insidious errors.
-
-=item Can't use bareword ("%s") as %s ref while "strict refs" in use
-
-(F) Only hard references are allowed by "strict refs". Symbolic
-references are disallowed. See L<perlref>.
-
-=item Can't use %! because Errno.pm is not available
-
-(F) The first time the %! hash is used, perl automatically loads the
-Errno.pm module. The Errno module is expected to tie the %! hash to
-provide symbolic names for C<$!> errno values.
-
-=item Can't use %s for loop variable
-
-(F) Only a simple scalar variable may be used as a loop variable on a
-foreach.
-
-=item Can't use global %s in "my"
-
-(F) You tried to declare a magical variable as a lexical variable. This
-is not allowed, because the magic can be tied to only one location
-(namely the global variable) and it would be incredibly confusing to
-have variables in your program that looked like magical variables but
-weren't.
-
-=item Can't use "my %s" in sort comparison
-
-(F) The global variables $a and $b are reserved for sort comparisons.
-You mentioned $a or $b in the same line as the <=> or cmp operator,
-and the variable had earlier been declared as a lexical variable.
-Either qualify the sort variable with the package name, or rename the
-lexical variable.
-
-=item Can't use %s ref as %s ref
-
-(F) You've mixed up your reference types. You have to dereference a
-reference of the type needed. You can use the ref() function to
-test the type of the reference, if need be.
-
-=item Can't use string ("%s") as %s ref while "strict refs" in use
-
-(F) Only hard references are allowed by "strict refs". Symbolic
-references are disallowed. See L<perlref>.
-
-=item Can't use subscript on %s
-
-(F) The compiler tried to interpret a bracketed expression as a
-subscript. But to the left of the brackets was an expression that
-didn't look like an array reference, or anything else subscriptable.
-
-=item Can't use \%c to mean $%c in expression
-
-(W syntax) In an ordinary expression, backslash is a unary operator that
-creates a reference to its argument. The use of backslash to indicate a
-backreference to a matched substring is valid only as part of a regular
-expression pattern. Trying to do this in ordinary Perl code produces a
-value that prints out looking like SCALAR(0xdecaf). Use the $1 form
-instead.
-
-=item Can't weaken a nonreference
-
-(F) You attempted to weaken something that was not a reference. Only
-references can be weakened.
-
-=item Can't x= to read-only value
-
-(F) You tried to repeat a constant value (often the undefined value)
-with an assignment operator, which implies modifying the value itself.
-Perhaps you need to copy the value to a temporary, and repeat that.
-
-=item chmod() mode argument is missing initial 0
-
-(W chmod) A novice will sometimes say
-
- chmod 777, $filename
-
-not realizing that 777 will be interpreted as a decimal number,
-equivalent to 01411. Octal constants are introduced with a leading 0 in
-Perl, as in C.
-
-=item close() on unopened filehandle %s
-
-(W unopened) You tried to close a filehandle that was never opened.
-
-=item %s: Command not found
-
-(A) You've accidentally run your script through B<csh> instead of Perl.
-Check the #! line, or manually feed your script into Perl yourself.
-
-=item Compilation failed in require
-
-(F) Perl could not compile a file specified in a C<require> statement.
-Perl uses this generic message when none of the errors that it
-encountered were severe enough to halt compilation immediately.
-
-=item Complex regular subexpression recursion limit (%d) exceeded
-
-(W regexp) The regular expression engine uses recursion in complex
-situations where back-tracking is required. Recursion depth is limited
-to 32766, or perhaps less in architectures where the stack cannot grow
-arbitrarily. ("Simple" and "medium" situations are handled without
-recursion and are not subject to a limit.) Try shortening the string
-under examination; looping in Perl code (e.g. with C<while>) rather than
-in the regular expression engine; or rewriting the regular expression so
-that it is simpler or backtracks less. (See L<perlfaq2> for information
-on I<Mastering Regular Expressions>.)
-
-=item connect() on closed socket %s
-
-(W closed) You tried to do a connect on a closed socket. Did you forget
-to check the return value of your socket() call? See
-L<perlfunc/connect>.
-
-=item Constant(%s)%s: %s
-
-(F) The parser found inconsistencies either while attempting to define
-an overloaded constant, or when trying to find the character name
-specified in the C<\N{...}> escape. Perhaps you forgot to load the
-corresponding C<overload> or C<charnames> pragma? See L<charnames> and
-L<overload>.
-
-=item Constant is not %s reference
-
-(F) A constant value (perhaps declared using the C<use constant> pragma)
-is being dereferenced, but it amounts to the wrong type of reference.
-The message indicates the type of reference that was expected. This
-usually indicates a syntax error in dereferencing the constant value.
-See L<perlsub/"Constant Functions"> and L<constant>.
-
-=item Constant subroutine %s redefined
-
-(S|W redefine) You redefined a subroutine which had previously been
-eligible for inlining. See L<perlsub/"Constant Functions"> for
-commentary and workarounds.
-
-=item Constant subroutine %s undefined
-
-(W misc) You undefined a subroutine which had previously been eligible
-for inlining. See L<perlsub/"Constant Functions"> for commentary and
-workarounds.
-
-=item Copy method did not return a reference
-
-(F) The method which overloads "=" is buggy. See
-L<overload/Copy Constructor>.
-
-=item CORE::%s is not a keyword
-
-(F) The CORE:: namespace is reserved for Perl keywords.
-
-=item corrupted regexp pointers
-
-(P) The regular expression engine got confused by what the regular
-expression compiler gave it.
-
-=item corrupted regexp program
-
-(P) The regular expression engine got passed a regexp program without a
-valid magic number.
-
-=item Corrupt malloc ptr 0x%lx at 0x%lx
-
-(P) The malloc package that comes with Perl had an internal failure.
-
-=item C<-p> destination: %s
-
-(F) An error occurred during the implicit output invoked by the C<-p>
-command-line switch. (This output goes to STDOUT unless you've
-redirected it with select().)
-
-=item C<-T> and C<-B> not implemented on filehandles
-
-(F) Perl can't peek at the stdio buffer of filehandles when it doesn't
-know about your kind of stdio. You'll have to use a filename instead.
-
-=item Deep recursion on subroutine "%s"
-
-(W recursion) This subroutine has called itself (directly or indirectly)
-100 times more than it has returned. This probably indicates an
-infinite recursion, unless you're writing strange benchmark programs, in
-which case it indicates something else.
-
-=item defined(@array) is deprecated
-
-(D deprecated) defined() is not usually useful on arrays because it
-checks for an undefined I<scalar> value. If you want to see if the
-array is empty, just use C<if (@array) { # not empty }> for example.
-
-=item defined(%hash) is deprecated
-
-(D deprecated) defined() is not usually useful on hashes because it
-checks for an undefined I<scalar> value. If you want to see if the hash
-is empty, just use C<if (%hash) { # not empty }> for example.
-
-=item Delimiter for here document is too long
-
-(F) In a here document construct like C<<<FOO>, the label C<FOO> is too
-long for Perl to handle. You have to be seriously twisted to write code
-that triggers this error.
-
-=item Did not produce a valid header
-
-See Server error.
-
-=item %s did not return a true value
-
-(F) A required (or used) file must return a true value to indicate that
-it compiled correctly and ran its initialization code correctly. It's
-traditional to end such a file with a "1;", though any true value would
-do. See L<perlfunc/require>.
-
-=item (Did you mean &%s instead?)
-
-(W) You probably referred to an imported subroutine &FOO as $FOO or some
-such.
-
-=item (Did you mean "local" instead of "our"?)
-
-(W misc) Remember that "our" does not localize the declared global
-variable. You have declared it again in the same lexical scope, which
-seems superfluous.
-
-=item (Did you mean $ or @ instead of %?)
-
-(W) You probably said %hash{$key} when you meant $hash{$key} or
-@hash{@keys}. On the other hand, maybe you just meant %hash and got
-carried away.
-
-=item Died
-
-(F) You passed die() an empty string (the equivalent of C<die "">) or
-you called it with no args and both C<$@> and C<$_> were empty.
-
-=item Document contains no data
-
-See Server error.
-
-=item Don't know how to handle magic of type '%s'
-
-(P) The internal handling of magical variables has been cursed.
-
-=item do_study: out of memory
-
-(P) This should have been caught by safemalloc() instead.
-
-=item (Do you need to predeclare %s?)
-
-(S) This is an educated guess made in conjunction with the message "%s
-found where operator expected". It often means a subroutine or module
-name is being referenced that hasn't been declared yet. This may be
-because of ordering problems in your file, or because of a missing
-"sub", "package", "require", or "use" statement. If you're referencing
-something that isn't defined yet, you don't actually have to define the
-subroutine or package before the current location. You can use an empty
-"sub foo;" or "package FOO;" to enter a "forward" declaration.
-
-=item Duplicate free() ignored
-
-(S malloc) An internal routine called free() on something that had
-already been freed.
-
-=item elseif should be elsif
-
-(S) There is no keyword "elseif" in Perl because Larry thinks it's ugly.
-Your code will be interpreted as an attempt to call a method named
-"elseif" for the class returned by the following block. This is
-unlikely to be what you want.
-
-=item entering effective %s failed
-
-(F) While under the C<use filetest> pragma, switching the real and
-effective uids or gids failed.
-
-=item Error converting file specification %s
-
-(F) An error peculiar to VMS. Because Perl may have to deal with file
-specifications in either VMS or Unix syntax, it converts them to a
-single form when it must operate on them directly. Either you've passed
-an invalid file specification to Perl, or you've found a case the
-conversion routines don't handle. Drat.
-
-=item %s: Eval-group in insecure regular expression
-
-(F) Perl detected tainted data when trying to compile a regular
-expression that contains the C<(?{ ... })> zero-width assertion, which
-is unsafe. See L<perlre/(?{ code })>, and L<perlsec>.
-
-=item %s: Eval-group not allowed at run time
-
-(F) Perl tried to compile a regular expression containing the
-C<(?{ ... })> zero-width assertion at run time, as it would when the
-pattern contains interpolated values. Since that is a security risk, it
-is not allowed. If you insist, you may still do this by explicitly
-building the pattern from an interpolated string at run time and using
-that in an eval(). See L<perlre/(?{ code })>.
-
-=item %s: Eval-group not allowed, use re 'eval'
-
-(F) A regular expression contained the C<(?{ ... })> zero-width
-assertion, but that construct is only allowed when the C<use re 'eval'>
-pragma is in effect. See L<perlre/(?{ code })>.
-
-=item Excessively long <> operator
-
-(F) The contents of a <> operator may not exceed the maximum size of a
-Perl identifier. If you're just trying to glob a long list of
-filenames, try using the glob() operator, or put the filenames into a
-variable and glob that.
-
-=item Execution of %s aborted due to compilation errors
-
-(F) The final summary message when a Perl compilation fails.
-
-=item Exiting eval via %s
-
-(W exiting) You are exiting an eval by unconventional means, such as a
-goto, or a loop control statement.
-
-=item Exiting format via %s
-
-(W exiting) You are exiting an eval by unconventional means, such as a
-goto, or a loop control statement.
-
-=item Exiting pseudo-block via %s
-
-(W exiting) You are exiting a rather special block construct (like a
-sort block or subroutine) by unconventional means, such as a goto, or a
-loop control statement. See L<perlfunc/sort>.
-
-=item Exiting subroutine via %s
-
-(W exiting) You are exiting a subroutine by unconventional means, such
-as a goto, or a loop control statement.
-
-=item Exiting substitution via %s
-
-(W exiting) You are exiting a substitution by unconventional means, such
-as a return, a goto, or a loop control statement.
-
-=item Explicit blessing to '' (assuming package main)
-
-(W misc) You are blessing a reference to a zero length string. This has
-the effect of blessing the reference into the package main. This is
-usually not what you want. Consider providing a default target package,
-e.g. bless($ref, $p || 'MyPackage');
-
-=item %s: Expression syntax
-
-(A) You've accidentally run your script through B<csh> instead of Perl.
-Check the #! line, or manually feed your script into Perl yourself.
-
-=item %s failed--call queue aborted
-
-(F) An untrapped exception was raised while executing a CHECK, INIT, or
-END subroutine. Processing of the remainder of the queue of such
-routines has been prematurely ended.
-
-=item false [] range "%s" in regexp
-
-(W regexp) A character class range must start and end at a literal
-character, not another character class like C<\d> or C<[:alpha:]>. The
-"-" in your false range is interpreted as a literal "-". Consider
-quoting the "-", "\-". See L<perlre>.
-
-=item Fatal VMS error at %s, line %d
-
-(P) An error peculiar to VMS. Something untoward happened in a VMS
-system service or RTL routine; Perl's exit status should provide more
-details. The filename in "at %s" and the line number in "line %d" tell
-you which section of the Perl source code is distressed.
-
-=item fcntl is not implemented
-
-(F) Your machine apparently doesn't implement fcntl(). What is this, a
-PDP-11 or something?
-
-=item Filehandle %s opened only for input
-
-(W io) You tried to write on a read-only filehandle. If you intended it
-to be a read-write filehandle, you needed to open it with "+<" or "+>"
-or "+>>" instead of with "<" or nothing. If you intended only to write
-the file, use ">" or ">>". See L<perlfunc/open>.
-
-=item Filehandle %s opened only for output
-
-(W io) You tried to read from a filehandle opened only for writing. If
-you intended it to be a read/write filehandle, you needed to open it
-with "+<" or "+>" or "+>>" instead of with "<" or nothing. If you
-intended only to read from the file, use "<". See L<perlfunc/open>.
-
-=item Final $ should be \$ or $name
-
-(F) You must now decide whether the final $ in a string was meant to be
-a literal dollar sign, or was meant to introduce a variable name that
-happens to be missing. So you have to put either the backslash or the
-name.
-
-=item Final @ should be \@ or @name
-
-(F) You must now decide whether the final @ in a string was meant to be
-a literal "at" sign, or was meant to introduce a variable name that
-happens to be missing. So you have to put either the backslash or the
-name.
-
-=item flock() on closed filehandle %s
-
-(W closed) The filehandle you're attempting to flock() got itself closed
-some time before now. Check your logic flow. flock() operates on
-filehandles. Are you attempting to call flock() on a dirhandle by the
-same name?
-
-=item Quantifier follows nothing before << HERE in regex m/%s/
-
-(F) You started a regular expression with a quantifier. Backslash it if you
-meant it literally. The << HERE shows in the regular expression about where the
-problem was discovered. See L<perlre>.
-
-=item Format not terminated
-
-(F) A format must be terminated by a line with a solitary dot. Perl got
-to the end of your file without finding such a line.
-
-=item Format %s redefined
-
-(W redefine) You redefined a format. To suppress this warning, say
-
- {
- no warnings;
- eval "format NAME =...";
- }
-
-=item Found = in conditional, should be ==
-
-(W syntax) You said
-
- if ($foo = 123)
-
-when you meant
-
- if ($foo == 123)
-
-(or something like that).
-
-=item %s found where operator expected
-
-(S) The Perl lexer knows whether to expect a term or an operator. If it
-sees what it knows to be a term when it was expecting to see an
-operator, it gives you this warning. Usually it indicates that an
-operator or delimiter was omitted, such as a semicolon.
-
-=item gdbm store returned %d, errno %d, key "%s"
-
-(S) A warning from the GDBM_File extension that a store failed.
-
-=item gethostent not implemented
-
-(F) Your C library apparently doesn't implement gethostent(), probably
-because if it did, it'd feel morally obligated to return every hostname
-on the Internet.
-
-=item get%sname() on closed socket %s
-
-(W closed) You tried to get a socket or peer socket name on a closed
-socket. Did you forget to check the return value of your socket() call?
-
-=item getpwnam returned invalid UIC %#o for user "%s"
-
-(S) A warning peculiar to VMS. The call to C<sys$getuai> underlying the
-C<getpwnam> operator returned an invalid UIC.
-
-=item getsockopt() on closed socket %s
-
-(W closed) You tried to get a socket option on a closed socket. Did you
-forget to check the return value of your socket() call? See
-L<perlfunc/getsockopt>.
-
-=item Global symbol "%s" requires explicit package name
-
-(F) You've said "use strict vars", which indicates that all variables
-must either be lexically scoped (using "my"), declared beforehand using
-"our", or explicitly qualified to say which package the global variable
-is in (using "::").
-
-=item glob failed (%s)
-
-(W glob) Something went wrong with the external program(s) used for
-C<glob> and C<< <*.c> >>. Usually, this means that you supplied a
-C<glob> pattern that caused the external program to fail and exit with a
-nonzero status. If the message indicates that the abnormal exit
-resulted in a coredump, this may also mean that your csh (C shell) is
-broken. If so, you should change all of the csh-related variables in
-config.sh: If you have tcsh, make the variables refer to it as if it
-were csh (e.g. C<full_csh='/usr/bin/tcsh'>); otherwise, make them all
-empty (except that C<d_csh> should be C<'undef'>) so that Perl will
-think csh is missing. In either case, after editing config.sh, run
-C<./Configure -S> and rebuild Perl.
-
-=item Glob not terminated
-
-(F) The lexer saw a left angle bracket in a place where it was expecting
-a term, so it's looking for the corresponding right angle bracket, and
-not finding it. Chances are you left some needed parentheses out
-earlier in the line, and you really meant a "less than".
-
-=item Got an error from DosAllocMem
-
-(P) An error peculiar to OS/2. Most probably you're using an obsolete
-version of Perl, and this should not happen anyway.
-
-=item goto must have label
-
-(F) Unlike with "next" or "last", you're not allowed to goto an
-unspecified destination. See L<perlfunc/goto>.
-
-=item %s had compilation errors
-
-(F) The final summary message when a C<perl -c> fails.
-
-=item Had to create %s unexpectedly
-
-(S internal) A routine asked for a symbol from a symbol table that ought
-to have existed already, but for some reason it didn't, and had to be
-created on an emergency basis to prevent a core dump.
-
-=item Hash %%s missing the % in argument %d of %s()
-
-(D deprecated) Really old Perl let you omit the % on hash names in some
-spots. This is now heavily deprecated.
-
-=item %s has too many errors
-
-(F) The parser has given up trying to parse the program after 10 errors.
-Further error messages would likely be uninformative.
-
-=item Hexadecimal number > 0xffffffff non-portable
-
-(W portable) The hexadecimal number you specified is larger than 2**32-1
-(4294967295) and therefore non-portable between systems. See
-L<perlport> for more on portability concerns.
-
-=item Identifier too long
-
-(F) Perl limits identifiers (names for variables, functions, etc.) to
-about 250 characters for simple names, and somewhat more for compound
-names (like C<$A::B>). You've exceeded Perl's limits. Future versions
-of Perl are likely to eliminate these arbitrary limitations.
-
-=item Illegal binary digit %s
-
-(F) You used a digit other than 0 or 1 in a binary number.
-
-=item Illegal binary digit %s ignored
-
-(W digit) You may have tried to use a digit other than 0 or 1 in a
-binary number. Interpretation of the binary number stopped before the
-offending digit.
-
-=item Illegal character %s (carriage return)
-
-(F) Perl normally treats carriage returns in the program text as it
-would any other whitespace, which means you should never see this error
-when Perl was built using standard options. For some reason, your
-version of Perl appears to have been built without this support. Talk
-to your Perl administrator.
-
-=item Illegal division by zero
-
-(F) You tried to divide a number by 0. Either something was wrong in
-your logic, or you need to put a conditional in to guard against
-meaningless input.
-
-=item Illegal hexadecimal digit %s ignored
-
-(W digit) You may have tried to use a character other than 0 - 9 or
-A - F, a - f in a hexadecimal number. Interpretation of the hexadecimal
-number stopped before the illegal character.
-
-=item Illegal modulus zero
-
-(F) You tried to divide a number by 0 to get the remainder. Most
-numbers don't take to this kindly.
-
-=item Illegal number of bits in vec
-
-(F) The number of bits in vec() (the third argument) must be a power of
-two from 1 to 32 (or 64, if your platform supports that).
-
-=item Illegal octal digit %s
-
-(F) You used an 8 or 9 in a octal number.
-
-=item Illegal octal digit %s ignored
-
-(W digit) You may have tried to use an 8 or 9 in a octal number.
-Interpretation of the octal number stopped before the 8 or 9.
-
-=item Illegal switch in PERL5OPT: %s
-
-(X) The PERL5OPT environment variable may only be used to set the
-following switches: B<-[DIMUdmw]>.
-
-=item Ill-formed CRTL environ value "%s"
-
-(W internal) A warning peculiar to VMS. Perl tried to read the CRTL's
-internal environ array, and encountered an element without the C<=>
-delimiter used to separate keys from values. The element is ignored.
-
-=item Ill-formed message in prime_env_iter: |%s|
-
-(W internal) A warning peculiar to VMS. Perl tried to read a logical
-name or CLI symbol definition when preparing to iterate over %ENV, and
-didn't see the expected delimiter between key and value, so the line was
-ignored.
-
-=item (in cleanup) %s
-
-(W misc) This prefix usually indicates that a DESTROY() method raised
-the indicated exception. Since destructors are usually called by the
-system at arbitrary points during execution, and often a vast number of
-times, the warning is issued only once for any number of failures that
-would otherwise result in the same message being repeated.
-
-Failure of user callbacks dispatched using the C<G_KEEPERR> flag could
-also result in this warning. See L<perlcall/G_KEEPERR>.
-
-=item Insecure dependency in %s
-
-(F) You tried to do something that the tainting mechanism didn't like.
-The tainting mechanism is turned on when you're running setuid or
-setgid, or when you specify B<-T> to turn it on explicitly. The
-tainting mechanism labels all data that's derived directly or indirectly
-from the user, who is considered to be unworthy of your trust. If any
-such data is used in a "dangerous" operation, you get this error. See
-L<perlsec> for more information.
-
-=item Insecure directory in %s
-
-(F) You can't use system(), exec(), or a piped open in a setuid or
-setgid script if C<$ENV{PATH}> contains a directory that is writable by
-the world. See L<perlsec>.
-
-=item Insecure $ENV{%s} while running %s
-
-(F) You can't use system(), exec(), or a piped open in a setuid or
-setgid script if any of C<$ENV{PATH}>, C<$ENV{IFS}>, C<$ENV{CDPATH}>,
-C<$ENV{ENV}> or C<$ENV{BASH_ENV}> are derived from data supplied (or
-potentially supplied) by the user. The script must set the path to a
-known value, using trustworthy data. See L<perlsec>.
-
-=item Integer overflow in %s number
-
-(W overflow) The hexadecimal, octal or binary number you have specified
-either as a literal or as an argument to hex() or oct() is too big for
-your architecture, and has been converted to a floating point number.
-On a 32-bit architecture the largest hexadecimal, octal or binary number
-representable without overflow is 0xFFFFFFFF, 037777777777, or
-0b11111111111111111111111111111111 respectively. Note that Perl
-transparently promotes all numbers to a floating point representation
-internally--subject to loss of precision errors in subsequent
-operations.
-
-=item Internal disaster before << HERE in regex m/%s/
-
-(P) Something went badly wrong in the regular expression parser.
-The << HERE shows in the regular expression about where the problem was
-discovered.
-
-
-=item Internal inconsistency in tracking vforks
-
-(S) A warning peculiar to VMS. Perl keeps track of the number of times
-you've called C<fork> and C<exec>, to determine whether the current call
-to C<exec> should affect the current script or a subprocess (see
-L<perlvms/"exec LIST">). Somehow, this count has become scrambled, so
-Perl is making a guess and treating this C<exec> as a request to
-terminate the Perl script and execute the specified command.
-
-=item Internal urp before << HERE in regex m/%s/
-
-(P) Something went badly awry in the regular expression parser. The <<<HERE
-shows in the regular expression about where the problem was discovered.
-
-
-=item %s (...) interpreted as function
-
-(W syntax) You've run afoul of the rule that says that any list operator
-followed by parentheses turns into a function, with all the list
-operators arguments found inside the parentheses. See
-L<perlop/Terms and List Operators (Leftward)>.
-
-=item Invalid %s attribute: %s
-
-The indicated attribute for a subroutine or variable was not recognized
-by Perl or by a user-supplied handler. See L<attributes>.
-
-=item Invalid %s attributes: %s
-
-The indicated attributes for a subroutine or variable were not
-recognized by Perl or by a user-supplied handler. See L<attributes>.
-
-=item Invalid conversion in %s: "%s"
-
-(W printf) Perl does not understand the given format conversion. See
-L<perlfunc/sprintf>.
-
-=item invalid [] range "%s" in regexp
-
-(F) The range specified in a character class had a minimum character
-greater than the maximum character. See L<perlre>.
-
-=item Invalid separator character %s in attribute list
-
-(F) Something other than a colon or whitespace was seen between the
-elements of an attribute list. If the previous attribute had a
-parenthesised parameter list, perhaps that list was terminated too soon.
-See L<attributes>.
-
-=item Invalid type in pack: '%s'
-
-(F) The given character is not a valid pack type. See L<perlfunc/pack>.
-(W pack) The given character is not a valid pack type but used to be
-silently ignored.
-
-=item Invalid type in unpack: '%s'
-
-(F) The given character is not a valid unpack type. See
-L<perlfunc/unpack>.
-(W unpack) The given character is not a valid unpack type but used to be
-silently ignored.
-
-=item ioctl is not implemented
-
-(F) Your machine apparently doesn't implement ioctl(), which is pretty
-strange for a machine that supports C.
-
-=item `%s' is not a code reference
-
-(W) The second (fourth, sixth, ...) argument of overload::constant needs
-to be a code reference. Either an anonymous subroutine, or a reference
-to a subroutine.
-
-=item `%s' is not an overloadable type
-
-(W) You tried to overload a constant type the overload package is unaware of.
-
-=item junk on end of regexp
-
-(P) The regular expression parser is confused.
-
-=item Label not found for "last %s"
-
-(F) You named a loop to break out of, but you're not currently in a loop
-of that name, not even if you count where you were called from. See
-L<perlfunc/last>.
-
-=item Label not found for "next %s"
-
-(F) You named a loop to continue, but you're not currently in a loop of
-that name, not even if you count where you were called from. See
-L<perlfunc/last>.
-
-=item Label not found for "redo %s"
-
-(F) You named a loop to restart, but you're not currently in a loop of
-that name, not even if you count where you were called from. See
-L<perlfunc/last>.
-
-=item leaving effective %s failed
-
-(F) While under the C<use filetest> pragma, switching the real and
-effective uids or gids failed.
-
-=item listen() on closed socket %s
-
-(W closed) You tried to do a listen on a closed socket. Did you forget
-to check the return value of your socket() call? See
-L<perlfunc/listen>.
-
-=item Lookbehind longer than %d not implemented at {#} mark in regex %s
-
-There is an upper limit to the depth of lookbehind in the (?<=
-regular expression construct.
-
-=item Lvalue subs returning %s not implemented yet
-
-(F) Due to limitations in the current implementation, array and hash
-values cannot be returned in subroutines used in lvalue context. See
-L<perlsub/"Lvalue subroutines">.
-
-=item Lookbehind longer than %d not implemented before << HERE %s
-
-(F) There is currently a limit on the length of string which lookbehind can
-handle. This restriction may be eased in a future release. The << HERE shows in
-the regular expression about where the problem was discovered.
-
-=item Malformed PERLLIB_PREFIX
-
-(F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form
-
- prefix1;prefix2
-
-or
-
- prefix1 prefix2
-
-with nonempty prefix1 and prefix2. If C<prefix1> is indeed a prefix of
-a builtin library search path, prefix2 is substituted. The error may
-appear if components are not found, or are too long. See
-"PERLLIB_PREFIX" in L<perlos2>.
-
-=item Malformed UTF-8 character (%s)
-
-Perl detected something that didn't comply with UTF-8 encoding rules.
-
-=item Malformed UTF-16 surrogate
-
-Perl thought it was reading UTF-16 encoded character data but while
-doing it Perl met a malformed Unicode surrogate.
-
-=item %s matches null string many times
-
-(W regexp) The pattern you've specified would be an infinite loop if the
-regular expression engine didn't specifically check for that. See
-L<perlre>.
-
-=item % may only be used in unpack
-
-(F) You can't pack a string by supplying a checksum, because the
-checksumming process loses information, and you can't go the other way.
-See L<perlfunc/unpack>.
-
-=item Method for operation %s not found in package %s during blessing
-
-(F) An attempt was made to specify an entry in an overloading table that
-doesn't resolve to a valid subroutine. See L<overload>.
-
-=item Method %s not permitted
-
-See Server error.
-
-=item Might be a runaway multi-line %s string starting on line %d
-
-(S) An advisory indicating that the previous error may have been caused
-by a missing delimiter on a string or pattern, because it eventually
-ended earlier on the current line.
-
-=item Misplaced _ in number
-
-(W syntax) An underline in a decimal constant wasn't on a 3-digit boundary.
-
-=item Missing %sbrace%s on \N{}
-
-(F) Wrong syntax of character name literal C<\N{charname}> within
-double-quotish context.
-
-=item Missing comma after first argument to %s function
-
-(F) While certain functions allow you to specify a filehandle or an
-"indirect object" before the argument list, this ain't one of them.
-
-=item Missing command in piped open
-
-(W pipe) You used the C<open(FH, "| command")> or
-C<open(FH, "command |")> construction, but the command was missing or
-blank.
-
-=item Missing name in "my sub"
-
-(F) The reserved syntax for lexically scoped subroutines requires that
-they have a name with which they can be found.
-
-=item Missing $ on loop variable
-
-(F) Apparently you've been programming in B<csh> too much. Variables
-are always mentioned with the $ in Perl, unlike in the shells, where it
-can vary from one line to the next.
-
-=item (Missing operator before %s?)
-
-(S) This is an educated guess made in conjunction with the message "%s
-found where operator expected". Often the missing operator is a comma.
-
-=item Missing right curly or square bracket
-
-(F) The lexer counted more opening curly or square brackets than closing
-ones. As a general rule, you'll find it's missing near the place you
-were last editing.
-
-=item (Missing semicolon on previous line?)
-
-(S) This is an educated guess made in conjunction with the message "%s
-found where operator expected". Don't automatically put a semicolon on
-the previous line just because you saw this message.
-
-=item Modification of a read-only value attempted
-
-(F) You tried, directly or indirectly, to change the value of a
-constant. You didn't, of course, try "2 = 1", because the compiler
-catches that. But an easy way to do the same thing is:
-
- sub mod { $_[0] = 1 }
- mod(2);
-
-Another way is to assign to a substr() that's off the end of the string.
-
-Yet another way is to assign to a C<foreach> loop I<VAR> when I<VAR>
-is aliased to a constant in the look I<LIST>:
-
- $x = 1;
- foreach my $n ($x, 2) {
- $n *= 2; # modifies the $x, but fails on attempt to modify the 2
- }
-
-=item Modification of non-creatable array value attempted, %s
-
-(F) You tried to make an array value spring into existence, and the
-subscript was probably negative, even counting from end of the array
-backwards.
-
-=item Modification of non-creatable hash value attempted, %s
-
-(P) You tried to make a hash value spring into existence, and it
-couldn't be created for some peculiar reason.
-
-=item Module name must be constant
-
-(F) Only a bare module name is allowed as the first argument to a "use".
-
-=item Module name required with -%c option
-
-(F) The C<-M> or C<-m> options say that Perl should load some module, but
-you omitted the name of the module. Consult L<perlrun> for full details
-about C<-M> and C<-m>.
-
-=item msg%s not implemented
-
-(F) You don't have System V message IPC on your system.
-
-=item Multidimensional syntax %s not supported
-
-(W syntax) Multidimensional arrays aren't written like C<$foo[1,2,3]>.
-They're written like C<$foo[1][2][3]>, as in C.
-
-=item / must be followed by a*, A* or Z*
-
-(F) You had a pack template indicating a counted-length string,
-Currently the only things that can have their length counted are a*, A*
-or Z*. See L<perlfunc/pack>.
-
-=item / must be followed by a, A or Z
-
-(F) You had an unpack template indicating a counted-length string, which
-must be followed by one of the letters a, A or Z to indicate what sort
-of string is to be unpacked. See L<perlfunc/pack>.
-
-=item / must follow a numeric type
-
-(F) You had an unpack template that contained a '#', but this did not
-follow some numeric unpack specification. See L<perlfunc/pack>.
-
-=item "my sub" not yet implemented
-
-(F) Lexically scoped subroutines are not yet implemented. Don't try
-that yet.
-
-=item "my" variable %s can't be in a package
-
-(F) Lexically scoped variables aren't in a package, so it doesn't make
-sense to try to declare one with a package qualifier on the front. Use
-local() if you want to localize a package variable.
-
-=item Name "%s::%s" used only once: possible typo
-
-(W once) Typographical errors often show up as unique variable names.
-If you had a good reason for having a unique name, then just mention it
-again somehow to suppress the message. The C<our> declaration is
-provided for this purpose.
-
-=item Negative length
-
-(F) You tried to do a read/write/send/recv operation with a buffer
-length that is less than 0. This is difficult to imagine.
-
-=item Nested quantifiers before << HERE in regex m/%s/
-
-(F) You can't quantify a quantifier without intervening parentheses. So
-things like ** or +* or ?* are illegal. The << HERE shows in the regular
-expression about where the problem was discovered.
-
-Note, however, that the minimal matching quantifiers, C<*?>, C<+?>, and
-C<??> appear to be nested quantifiers, but aren't. See L<perlre>.
-
-
-=item %s never introduced
-
-(S internal) The symbol in question was declared but somehow went out of
-scope before it could possibly have been used.
-
-=item No %s allowed while running setuid
-
-(F) Certain operations are deemed to be too insecure for a setuid or
-setgid script to even be allowed to attempt. Generally speaking there
-will be another way to do what you want that is, if not secure, at least
-securable. See L<perlsec>.
-
-=item No B<-e> allowed in setuid scripts
-
-(F) A setuid script can't be specified by the user.
-
-=item No comma allowed after %s
-
-(F) A list operator that has a filehandle or "indirect object" is not
-allowed to have a comma between that and the following arguments.
-Otherwise it'd be just another one of the arguments.
-
-One possible cause for this is that you expected to have imported a
-constant to your name space with B<use> or B<import> while no such
-importing took place, it may for example be that your operating system
-does not support that particular constant. Hopefully you did use an
-explicit import list for the constants you expect to see, please see
-L<perlfunc/use> and L<perlfunc/import>. While an explicit import list
-would probably have caught this error earlier it naturally does not
-remedy the fact that your operating system still does not support that
-constant. Maybe you have a typo in the constants of the symbol import
-list of B<use> or B<import> or in the constant name at the line where
-this error was triggered?
-
-=item No command into which to pipe on command line
-
-(F) An error peculiar to VMS. Perl handles its own command line
-redirection, and found a '|' at the end of the command line, so it
-doesn't know where you want to pipe the output from this command.
-
-=item No DB::DB routine defined
-
-(F) The currently executing code was compiled with the B<-d> switch, but
-for some reason the perl5db.pl file (or some facsimile thereof) didn't
-define a routine to be called at the beginning of each statement. Which
-is odd, because the file should have been required automatically, and
-should have blown up the require if it didn't parse right.
-
-=item No dbm on this machine
-
-(P) This is counted as an internal error, because every machine should
-supply dbm nowadays, because Perl comes with SDBM. See L<SDBM_File>.
-
-=item No DBsub routine
-
-(F) The currently executing code was compiled with the B<-d> switch,
-but for some reason the perl5db.pl file (or some facsimile thereof)
-didn't define a DB::sub routine to be called at the beginning of each
-ordinary subroutine call.
-
-=item No error file after 2> or 2>> on command line
-
-(F) An error peculiar to VMS. Perl handles its own command line
-redirection, and found a '2>' or a '2>>' on the command line, but can't
-find the name of the file to which to write data destined for stderr.
-
-=item No input file after < on command line
-
-(F) An error peculiar to VMS. Perl handles its own command line
-redirection, and found a '<' on the command line, but can't find the
-name of the file from which to read data for stdin.
-
-=item No #! line
-
-(F) The setuid emulator requires that scripts have a well-formed #! line
-even on machines that don't support the #! construct.
-
-=item "no" not allowed in expression
-
-(F) The "no" keyword is recognized and executed at compile time, and
-returns no useful value. See L<perlmod>.
-
-=item No output file after > on command line
-
-(F) An error peculiar to VMS. Perl handles its own command line
-redirection, and found a lone '>' at the end of the command line, so it
-doesn't know where you wanted to redirect stdout.
-
-=item No output file after > or >> on command line
-
-(F) An error peculiar to VMS. Perl handles its own command line
-redirection, and found a '>' or a '>>' on the command line, but can't
-find the name of the file to which to write data destined for stdout.
-
-=item No package name allowed for variable %s in "our"
-
-(F) Fully qualified variable names are not allowed in "our"
-declarations, because that doesn't make much sense under existing
-semantics. Such syntax is reserved for future extensions.
-
-=item No Perl script found in input
-
-(F) You called C<perl -x>, but no line was found in the file beginning
-with #! and containing the word "perl".
-
-=item No setregid available
-
-(F) Configure didn't find anything resembling the setregid() call for
-your system.
-
-=item No setreuid available
-
-(F) Configure didn't find anything resembling the setreuid() call for
-your system.
-
-=item No space allowed after -%c
-
-(F) The argument to the indicated command line switch must follow
-immediately after the switch, without intervening spaces.
-
-=item No %s specified for -%c
-
-(F) The indicated command line switch needs a mandatory argument, but
-you haven't specified one.
-
-=item No such pipe open
-
-(P) An error peculiar to VMS. The internal routine my_pclose() tried to
-close a pipe which hadn't been opened. This should have been caught
-earlier as an attempt to close an unopened filehandle.
-
-=item No such pseudo-hash field "%s"
-
-(F) You tried to access an array as a hash, but the field name used is
-not defined. The hash at index 0 should map all valid field names to
-array indices for that to work.
-
-=item No such pseudo-hash field "%s" in variable %s of type %s
-
-(F) You tried to access a field of a typed variable where the type does
-not know about the field name. The field names are looked up in the
-%FIELDS hash in the type package at compile time. The %FIELDS hash is
-%usually set up with the 'fields' pragma.
-
-=item No such signal: SIG%s
-
-(W signal) You specified a signal name as a subscript to %SIG that was
-not recognized. Say C<kill -l> in your shell to see the valid signal
-names on your system.
-
-=item Not a CODE reference
-
-(F) Perl was trying to evaluate a reference to a code value (that is, a
-subroutine), but found a reference to something else instead. You can
-use the ref() function to find out what kind of ref it really was. See
-also L<perlref>.
-
-=item Not a format reference
-
-(F) I'm not sure how you managed to generate a reference to an anonymous
-format, but this indicates you did, and that it didn't exist.
-
-=item Not a GLOB reference
-
-(F) Perl was trying to evaluate a reference to a "typeglob" (that is, a
-symbol table entry that looks like C<*foo>), but found a reference to
-something else instead. You can use the ref() function to find out what
-kind of ref it really was. See L<perlref>.
-
-=item Not a HASH reference
-
-(F) Perl was trying to evaluate a reference to a hash value, but found a
-reference to something else instead. You can use the ref() function to
-find out what kind of ref it really was. See L<perlref>.
-
-=item Not an ARRAY reference
-
-(F) Perl was trying to evaluate a reference to an array value, but found
-a reference to something else instead. You can use the ref() function
-to find out what kind of ref it really was. See L<perlref>.
-
-=item Not a perl script
-
-(F) The setuid emulator requires that scripts have a well-formed #! line
-even on machines that don't support the #! construct. The line must
-mention perl.
-
-=item Not a SCALAR reference
-
-(F) Perl was trying to evaluate a reference to a scalar value, but found
-a reference to something else instead. You can use the ref() function
-to find out what kind of ref it really was. See L<perlref>.
-
-=item Not a subroutine reference
-
-(F) Perl was trying to evaluate a reference to a code value (that is, a
-subroutine), but found a reference to something else instead. You can
-use the ref() function to find out what kind of ref it really was. See
-also L<perlref>.
-
-=item Not a subroutine reference in overload table
-
-(F) An attempt was made to specify an entry in an overloading table that
-doesn't somehow point to a valid subroutine. See L<overload>.
-
-=item Not enough arguments for %s
-
-(F) The function requires more arguments than you specified.
-
-=item Not enough format arguments
-
-(W syntax) A format specified more picture fields than the next line
-supplied. See L<perlform>.
-
-=item %s: not found
-
-(A) You've accidentally run your script through the Bourne shell instead
-of Perl. Check the #! line, or manually feed your script into Perl
-yourself.
-
-=item no UTC offset information; assuming local time is UTC
-
-(S) A warning peculiar to VMS. Perl was unable to find the local
-timezone offset, so it's assuming that local system time is equivalent
-to UTC. If it's not, define the logical name
-F<SYS$TIMEZONE_DIFFERENTIAL> to translate to the number of seconds which
-need to be added to UTC to get local time.
-
-=item Null filename used
-
-(F) You can't require the null filename, especially because on many
-machines that means the current directory! See L<perlfunc/require>.
-
-=item NULL OP IN RUN
-
-(P debugging) Some internal routine called run() with a null opcode
-pointer.
-
-=item Null picture in formline
-
-(F) The first argument to formline must be a valid format picture
-specification. It was found to be empty, which probably means you
-supplied it an uninitialized value. See L<perlform>.
-
-=item Null realloc
-
-(P) An attempt was made to realloc NULL.
-
-=item NULL regexp argument
-
-(P) The internal pattern matching routines blew it big time.
-
-=item NULL regexp parameter
-
-(P) The internal pattern matching routines are out of their gourd.
-
-=item Number too long
-
-(F) Perl limits the representation of decimal numbers in programs to
-about about 250 characters. You've exceeded that length. Future
-versions of Perl are likely to eliminate this arbitrary limitation. In
-the meantime, try using scientific notation (e.g. "1e6" instead of
-"1_000_000").
-
-=item Octal number in vector unsupported
-
-(F) Numbers with a leading C<0> are not currently allowed in vectors.
-The octal number interpretation of such numbers may be supported in a
-future version.
-
-=item Octal number > 037777777777 non-portable
-
-(W portable) The octal number you specified is larger than 2**32-1
-(4294967295) and therefore non-portable between systems. See
-L<perlport> for more on portability concerns.
-
-See also L<perlport> for writing portable code.
-
-=item Odd number of arguments for overload::constant
-
-(W) The call to overload::constant contained an odd number of arguments.
-The arguments should come in pairs.
-
-=item Odd number of elements in hash assignment
-
-(W misc) You specified an odd number of elements to initialize a hash,
-which is odd, because hashes come in key/value pairs.
-
-=item Offset outside string
-
-(F) You tried to do a read/write/send/recv operation with an offset
-pointing outside the buffer. This is difficult to imagine. The sole
-exception to this is that C<sysread()>ing past the buffer will extend
-the buffer and zero pad the new area.
-
-=item -%s on unopened filehandle %s
-
-(W unopened) You tried to invoke a file test operator on a filehandle
-that isn't open. Check your logic. See also L<perlfunc/-X>.
-
-=item %s() on unopened %s %s
-
-(W unopened) An I/O operation was attempted on a filehandle that was
-never initialized. You need to do an open(), a sysopen(), or a socket()
-call, or call a constructor from the FileHandle package.
-
-=item oops: oopsAV
-
-(S internal) An internal warning that the grammar is screwed up.
-
-=item oops: oopsHV
-
-(S internal) An internal warning that the grammar is screwed up.
-
-=item Operation `%s': no method found, %s
-
-(F) An attempt was made to perform an overloaded operation for which no
-handler was defined. While some handlers can be autogenerated in terms
-of other handlers, there is no default handler for any operation, unless
-C<fallback> overloading key is specified to be true. See L<overload>.
-
-=item Operator or semicolon missing before %s
-
-(S ambiguous) You used a variable or subroutine call where the parser
-was expecting an operator. The parser has assumed you really meant to
-use an operator, but this is highly likely to be incorrect. For
-example, if you say "*foo *foo" it will be interpreted as if you said
-"*foo * 'foo'".
-
-=item "our" variable %s redeclared
-
-(W misc) You seem to have already declared the same global once before
-in the current lexical scope.
-
-=item Out of memory!
-
-(X) The malloc() function returned 0, indicating there was insufficient
-remaining memory (or virtual memory) to satisfy the request. Perl has
-no option but to exit immediately.
-
-=item Out of memory during "large" request for %s
-
-(F) The malloc() function returned 0, indicating there was insufficient
-remaining memory (or virtual memory) to satisfy the request. However,
-the request was judged large enough (compile-time default is 64K), so a
-possibility to shut down by trapping this error is granted.
-
-=item Out of memory during request for %s
-
-(X|F) The malloc() function returned 0, indicating there was
-insufficient remaining memory (or virtual memory) to satisfy the
-request.
-
-The request was judged to be small, so the possibility to trap it
-depends on the way perl was compiled. By default it is not trappable.
-However, if compiled for this, Perl may use the contents of C<$^M> as an
-emergency pool after die()ing with this message. In this case the error
-is trappable I<once>, and the error message will include the line and file
-where the failed request happened.
-
-=item Out of memory during ridiculously large request
-
-(F) You can't allocate more than 2^31+"small amount" bytes. This error
-is most likely to be caused by a typo in the Perl program. e.g.,
-C<$arr[time]> instead of C<$arr[$time]>.
-
-=item Out of memory for yacc stack
-
-(F) The yacc parser wanted to grow its stack so it could continue
-parsing, but realloc() wouldn't give it more memory, virtual or
-otherwise.
-
-=item @ outside of string
-
-(F) You had a pack template that specified an absolute position outside
-the string being unpacked. See L<perlfunc/pack>.
-
-=item %s package attribute may clash with future reserved word: %s
-
-(W reserved) A lowercase attribute name was used that had a
-package-specific handler. That name might have a meaning to Perl itself
-some day, even though it doesn't yet. Perhaps you should use a
-mixed-case attribute name, instead. See L<attributes>.
-
-=item page overflow
-
-(W io) A single call to write() produced more lines than can fit on a
-page. See L<perlform>.
-
-=item panic: %s
-
-(P) An internal error.
-
-=item panic: ck_grep
-
-(P) Failed an internal consistency check trying to compile a grep.
-
-=item panic: ck_split
-
-(P) Failed an internal consistency check trying to compile a split.
-
-=item panic: corrupt saved stack index
-
-(P) The savestack was requested to restore more localized values than
-there are in the savestack.
-
-=item panic: del_backref
-
-(P) Failed an internal consistency check while trying to reset a weak
-reference.
-
-=item panic: die %s
-
-(P) We popped the context stack to an eval context, and then discovered
-it wasn't an eval context.
-
-=item panic: pp_match
-
-(P) The internal pp_match() routine was called with invalid operational
-data.
-
-=item panic: do_subst
-
-(P) The internal pp_subst() routine was called with invalid operational
-data.
-
-=item panic: do_trans_%s
-
-(P) The internal do_trans routines were called with invalid operational
-data.
-
-=item panic: frexp
-
-(P) The library function frexp() failed, making printf("%f") impossible.
-
-=item panic: goto
-
-(P) We popped the context stack to a context with the specified label,
-and then discovered it wasn't a context we know how to do a goto in.
-
-=item panic: INTERPCASEMOD
-
-(P) The lexer got into a bad state at a case modifier.
-
-=item panic: INTERPCONCAT
-
-(P) The lexer got into a bad state parsing a string with brackets.
-
-=item panic: kid popen errno read
-
-(F) forked child returned an incomprehensible message about its errno.
-
-=item panic: last
-
-(P) We popped the context stack to a block context, and then discovered
-it wasn't a block context.
-
-=item panic: leave_scope clearsv
-
-(P) A writable lexical variable became read-only somehow within the
-scope.
-
-=item panic: leave_scope inconsistency
-
-(P) The savestack probably got out of sync. At least, there was an
-invalid enum on the top of it.
-
-=item panic: magic_killbackrefs
-
-(P) Failed an internal consistency check while trying to reset all weak
-references to an object.
-
-=item panic: malloc
-
-(P) Something requested a negative number of bytes of malloc.
-
-=item panic: mapstart
-
-(P) The compiler is screwed up with respect to the map() function.
-
-=item panic: null array
-
-(P) One of the internal array routines was passed a null AV pointer.
-
-=item panic: pad_alloc
-
-(P) The compiler got confused about which scratch pad it was allocating
-and freeing temporaries and lexicals from.
-
-=item panic: pad_free curpad
-
-(P) The compiler got confused about which scratch pad it was allocating
-and freeing temporaries and lexicals from.
-
-=item panic: pad_free po
-
-(P) An invalid scratch pad offset was detected internally.
-
-=item panic: pad_reset curpad
-
-(P) The compiler got confused about which scratch pad it was allocating
-and freeing temporaries and lexicals from.
-
-=item panic: pad_sv po
-
-(P) An invalid scratch pad offset was detected internally.
-
-=item panic: pad_swipe curpad
-
-(P) The compiler got confused about which scratch pad it was allocating
-and freeing temporaries and lexicals from.
-
-=item panic: pad_swipe po
-
-(P) An invalid scratch pad offset was detected internally.
-
-=item panic: pp_iter
-
-(P) The foreach iterator got called in a non-loop context frame.
-
-=item panic: pp_split
-
-(P) Something terrible went wrong in setting up for the split.
-
-=item panic: realloc
-
-(P) Something requested a negative number of bytes of realloc.
-
-=item panic: restartop
-
-(P) Some internal routine requested a goto (or something like it), and
-didn't supply the destination.
-
-=item panic: return
-
-(P) We popped the context stack to a subroutine or eval context, and
-then discovered it wasn't a subroutine or eval context.
-
-=item panic: scan_num
-
-(P) scan_num() got called on something that wasn't a number.
-
-=item panic: sv_insert
-
-(P) The sv_insert() routine was told to remove more string than there
-was string.
-
-=item panic: top_env
-
-(P) The compiler attempted to do a goto, or something weird like that.
-
-=item panic: yylex
-
-(P) The lexer got into a bad state while processing a case modifier.
-
-=item panic: utf16_to_utf8: odd bytelen
-
-(P) Something tried to call utf16_to_utf8 with an odd (as opposed
-to even) byte length.
-
-=item Parentheses missing around "%s" list
-
-(W parenthesis) You said something like
-
- my $foo, $bar = @_;
-
-when you meant
-
- my ($foo, $bar) = @_;
-
-Remember that "my", "our", and "local" bind tighter than comma.
-
-=item Perl %s required--this is only version %s, stopped
-
-(F) The module in question uses features of a version of Perl more
-recent than the currently running version. How long has it been since
-you upgraded, anyway? See L<perlfunc/require>.
-
-=item PERL_SH_DIR too long
-
-(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the
-C<sh>-shell in. See "PERL_SH_DIR" in L<perlos2>.
-
-=item perl: warning: Setting locale failed.
-
-(S) The whole warning message will look something like:
-
- perl: warning: Setting locale failed.
- perl: warning: Please check that your locale settings:
- LC_ALL = "En_US",
- LANG = (unset)
- are supported and installed on your system.
- perl: warning: Falling back to the standard locale ("C").
-
-Exactly what were the failed locale settings varies. In the above the
-settings were that the LC_ALL was "En_US" and the LANG had no value.
-This error means that Perl detected that you and/or your operating
-system supplier and/or system administrator have set up the so-called
-locale system but Perl could not use those settings. This was not
-dead serious, fortunately: there is a "default locale" called "C" that
-Perl can and will use, the script will be run. Before you really fix
-the problem, however, you will get the same error message each time
-you run Perl. How to really fix the problem can be found in
-L<perllocale> section B<LOCALE PROBLEMS>.
-
-=item Permission denied
-
-(F) The setuid emulator in suidperl decided you were up to no good.
-
-=item pid %x not a child
-
-(W exec) A warning peculiar to VMS. Waitpid() was asked to wait for a
-process which isn't a subprocess of the current process. While this is
-fine from VMS' perspective, it's probably not what you intended.
-
-=item POSIX syntax [%s] belongs inside character classes
-
-(W unsafe) The character class constructs [: :], [= =], and [. .] go
-I<inside> character classes, the [] are part of the construct, for
-example: /[012[:alpha:]345]/. Note that [= =] and [. .] are not
-currently implemented; they are simply placeholders for future
-extensions and will cause fatal errors.
-
-=item POSIX syntax [. .] is reserved for future extensions
-
-(F regexp) Within regular expression character classes ([]) the syntax
-beginning with "[." and ending with ".]" is reserved for future
-extensions. If you need to represent those character sequences inside
-a regular expression character class, just quote the square brackets
-with the backslash: "\[." and ".\]".
-
-=item POSIX syntax [= =] is reserved for future extensions
-
-(F) Within regular expression character classes ([]) the syntax
-beginning with "[=" and ending with "=]" is reserved for future
-extensions. If you need to represent those character sequences inside
-a regular expression character class, just quote the square brackets
-with the backslash: "\[=" and "=\]".
-
-=item POSIX class [:%s:] unknown
-
-(F) The class in the character class [: :] syntax is unknown. See
-L<perlre>.
-
-=item POSIX getpgrp can't take an argument
-
-(F) Your system has POSIX getpgrp(), which takes no argument, unlike
-the BSD version, which takes a pid.
-
-=item Possible attempt to put comments in qw() list
-
-(W qw) qw() lists contain items separated by whitespace; as with literal
-strings, comment characters are not ignored, but are instead treated as
-literal data. (You may have used different delimiters than the
-parentheses shown here; braces are also frequently used.)
-
-You probably wrote something like this:
-
- @list = qw(
- a # a comment
- b # another comment
- );
-
-when you should have written this:
-
- @list = qw(
- a
- b
- );
-
-If you really want comments, build your list the
-old-fashioned way, with quotes and commas:
-
- @list = (
- 'a', # a comment
- 'b', # another comment
- );
-
-=item Possible attempt to separate words with commas
-
-(W qw) qw() lists contain items separated by whitespace; therefore
-commas aren't needed to separate the items. (You may have used
-different delimiters than the parentheses shown here; braces are also
-frequently used.)
-
-You probably wrote something like this:
-
- qw! a, b, c !;
-
-which puts literal commas into some of the list items. Write it without
-commas if you don't want them to appear in your data:
-
- qw! a b c !;
-
-=item Possible memory corruption: %s overflowed 3rd argument
-
-(F) An ioctl() or fcntl() returned more than Perl was bargaining for.
-Perl guesses a reasonable buffer size, but puts a sentinel byte at the
-end of the buffer just in case. This sentinel byte got clobbered, and
-Perl assumes that memory is now corrupted. See L<perlfunc/ioctl>.
-
-=item Possible Y2K bug: %s
-
-(W y2k) You are concatenating the number 19 with another number, which
-could be a potential Year 2000 problem.
-
-=item pragma "attrs" is deprecated, use "sub NAME : ATTRS" instead
-
-(W deprecated) You have written something like this:
-
- sub doit
- {
- use attrs qw(locked);
- }
-
-You should use the new declaration syntax instead.
-
- sub doit : locked
- {
- ...
-
-The C<use attrs> pragma is now obsolete, and is only provided for
-backward-compatibility. See L<perlsub/"Subroutine Attributes">.
-
-=item Precedence problem: open %s should be open(%s)
-
-(S precedence) The old irregular construct
-
- open FOO || die;
-
-is now misinterpreted as
-
- open(FOO || die);
-
-because of the strict regularization of Perl 5's grammar into unary and
-list operators. (The old open was a little of both.) You must put
-parentheses around the filehandle, or use the new "or" operator instead
-of "||".
-
-=item Premature end of script headers
-
-See Server error.
-
-=item printf() on closed filehandle %s
-
-(W closed) The filehandle you're writing to got itself closed sometime
-before now. Check your logic flow.
-
-=item print() on closed filehandle %s
-
-(W closed) The filehandle you're printing on got itself closed sometime
-before now. Check your logic flow.
-
-=item Process terminated by SIG%s
-
-(W) This is a standard message issued by OS/2 applications, while *nix
-applications die in silence. It is considered a feature of the OS/2
-port. One can easily disable this by appropriate sighandlers, see
-L<perlipc/"Signals">. See also "Process terminated by SIGTERM/SIGINT"
-in L<perlos2>.
-
-=item Prototype mismatch: %s vs %s
-
-(S unsafe) The subroutine being declared or defined had previously been
-declared or defined with a different function prototype.
-
-=item Quantifier in {,} bigger than %d before << HERE in regex m/%s/
-
-(F) There is currently a limit to the size of the min and max values of the
-{min,max} construct. The << HERE shows in the regular expression about where
-the problem was discovered. See L<perlre>.
-
-=item Quantifier unexpected on zero-length expression before << HERE %s
-
-(W regexp) You applied a regular expression quantifier in a place where
-it makes no sense, such as on a zero-width assertion. Try putting the
-quantifier inside the assertion instead. For example, the way to match
-"abc" provided that it is followed by three repetitions of "xyz" is
-C</abc(?=(?:xyz){3})/>, not C</abc(?=xyz){3}/>.
-
-=item Range iterator outside integer range
-
-(F) One (or both) of the numeric arguments to the range operator ".."
-are outside the range which can be represented by integers internally.
-One possible workaround is to force Perl to use magical string increment
-by prepending "0" to your numbers.
-
-=item readline() on closed filehandle %s
-
-(W closed) The filehandle you're reading from got itself closed sometime
-before now. Check your logic flow.
-
-=item Reallocation too large: %lx
-
-(F) You can't allocate more than 64K on an MS-DOS machine.
-
-=item realloc() of freed memory ignored
-
-(S malloc) An internal routine called realloc() on something that had
-already been freed.
-
-=item Recompile perl with B<-D>DEBUGGING to use B<-D> switch
-
-(F debugging) You can't use the B<-D> option unless the code to produce
-the desired output is compiled into Perl, which entails some overhead,
-which is why it's currently left out of your copy.
-
-=item Recursive inheritance detected in package '%s'
-
-(F) More than 100 levels of inheritance were used. Probably indicates
-an unintended loop in your inheritance hierarchy.
-
-=item Recursive inheritance detected while looking for method %s
-
-(F) More than 100 levels of inheritance were encountered while invoking
-a method. Probably indicates an unintended loop in your inheritance
-hierarchy.
-
-=item Reference found where even-sized list expected
-
-(W misc) You gave a single reference where Perl was expecting a list
-with an even number of elements (for assignment to a hash). This usually
-means that you used the anon hash constructor when you meant to use
-parens. In any case, a hash requires key/value B<pairs>.
-
- %hash = { one => 1, two => 2, }; # WRONG
- %hash = [ qw/ an anon array / ]; # WRONG
- %hash = ( one => 1, two => 2, ); # right
- %hash = qw( one 1 two 2 ); # also fine
-
-=item Reference is already weak
-
-(W misc) You have attempted to weaken a reference that is already weak.
-Doing so has no effect.
-
-=item Reference miscount in sv_replace()
-
-(W internal) The internal sv_replace() function was handed a new SV with
-a reference count of other than 1.
-
-=item Reference to nonexistent group before << HERE in regex m/%s/
-
-(F) You used something like C<\7> in your regular expression, but there are
-not at least seven sets of capturing parentheses in the expression. If you
-wanted to have the character with value 7 inserted into the regular expression,
-prepend a zero to make the number at least two digits: C<\07>
-
-The << HERE shows in the regular expression about where the problem was
-discovered.
-
-=item regexp memory corruption
-
-(P) The regular expression engine got confused by what the regular
-expression compiler gave it.
-
-=item Regexp out of space
-
-(P) A "can't happen" error, because safemalloc() should have caught it
-earlier.
-
-=item Repeat count in pack overflows
-
-(F) You can't specify a repeat count so large that it overflows your
-signed integers. See L<perlfunc/pack>.
-
-=item Repeat count in unpack overflows
-
-(F) You can't specify a repeat count so large that it overflows your
-signed integers. See L<perlfunc/unpack>.
-
-=item Reversed %s= operator
-
-(W syntax) You wrote your assignment operator backwards. The = must
-always comes last, to avoid ambiguity with subsequent unary operators.
-
-=item Runaway format
-
-(F) Your format contained the ~~ repeat-until-blank sequence, but it
-produced 200 lines at once, and the 200th line looked exactly like the
-199th line. Apparently you didn't arrange for the arguments to exhaust
-themselves, either by using ^ instead of @ (for scalar variables), or by
-shifting or popping (for array variables). See L<perlform>.
-
-=item Scalar value @%s[%s] better written as $%s[%s]
-
-(W syntax) You've used an array slice (indicated by @) to select a
-single element of an array. Generally it's better to ask for a scalar
-value (indicated by $). The difference is that C<$foo[&bar]> always
-behaves like a scalar, both when assigning to it and when evaluating its
-argument, while C<@foo[&bar]> behaves like a list when you assign to it,
-and provides a list context to its subscript, which can do weird things
-if you're expecting only one subscript.
-
-On the other hand, if you were actually hoping to treat the array
-element as a list, you need to look into how references work, because
-Perl will not magically convert between scalars and lists for you. See
-L<perlref>.
-
-=item Scalar value @%s{%s} better written as $%s{%s}
-
-(W syntax) You've used a hash slice (indicated by @) to select a single
-element of a hash. Generally it's better to ask for a scalar value
-(indicated by $). The difference is that C<$foo{&bar}> always behaves
-like a scalar, both when assigning to it and when evaluating its
-argument, while C<@foo{&bar}> behaves like a list when you assign to it,
-and provides a list context to its subscript, which can do weird things
-if you're expecting only one subscript.
-
-On the other hand, if you were actually hoping to treat the hash element
-as a list, you need to look into how references work, because Perl will
-not magically convert between scalars and lists for you. See
-L<perlref>.
-
-=item Scalars leaked: %d
-
-(P) Something went wrong in Perl's internal bookkeeping of scalars:
-not all scalar variables were deallocated by the time Perl exited.
-What this usually indicates is a memory leak, which is of course bad,
-especially if the Perl program is intended to be long-running.
-
-=item Script is not setuid/setgid in suidperl
-
-(F) Oddly, the suidperl program was invoked on a script without a setuid
-or setgid bit set. This doesn't make much sense.
-
-=item Search pattern not terminated
-
-(F) The lexer couldn't find the final delimiter of a // or m{}
-construct. Remember that bracketing delimiters count nesting level.
-Missing the leading C<$> from a variable C<$m> may cause this error.
-
-=item %sseek() on unopened filehandle
-
-(W unopened) You tried to use the seek() or sysseek() function on a
-filehandle that was either never opened or has since been closed.
-
-=item select not implemented
-
-(F) This machine doesn't implement the select() system call.
-
-=item Semicolon seems to be missing
-
-(W semicolon) A nearby syntax error was probably caused by a missing
-semicolon, or possibly some other missing operator, such as a comma.
-
-=item semi-panic: attempt to dup freed string
-
-(S internal) The internal newSVsv() routine was called to duplicate a
-scalar that had previously been marked as free.
-
-=item sem%s not implemented
-
-(F) You don't have System V semaphore IPC on your system.
-
-=item send() on closed socket %s
-
-(W closed) The socket you're sending to got itself closed sometime
-before now. Check your logic flow.
-
-=item Sequence (? incomplete before << HERE mark in regex m/%s/
-
-(F) A regular expression ended with an incomplete extension (?. The <<<HERE
-shows in the regular expression about where the problem was discovered. See
-L<perlre>.
-
-=item Sequence (?{...}) not terminated or not {}-balanced in %s
-
-(F) If the contents of a (?{...}) clause contains braces, they must balance
-for Perl to properly detect the end of the clause. See L<perlre>.
-
-=item Sequence (?%s...) not implemented before << HERE mark in %s
-
-(F) A proposed regular expression extension has the character reserved but
-has not yet been written. The << HERE shows in the regular expression about
-where the problem was discovered. See L<perlre>.
-
-=item Sequence (?%s...) not recognized before << HERE mark in %s
-
-(F) You used a regular expression extension that doesn't make sense.
-The << HERE shows in the regular expression about
-where the problem was discovered.
-See L<perlre>.
-
-=item Sequence (?#... not terminated in regex m/%s/
-
-(F) A regular expression comment must be terminated by a closing
-parenthesis. Embedded parentheses aren't allowed. See L<perlre>.
-
-=item 500 Server error
-
-See Server error.
-
-=item Server error
-
-This is the error message generally seen in a browser window when trying
-to run a CGI program (including SSI) over the web. The actual error text
-varies widely from server to server. The most frequently-seen variants
-are "500 Server error", "Method (something) not permitted", "Document
-contains no data", "Premature end of script headers", and "Did not
-produce a valid header".
-
-B<This is a CGI error, not a Perl error>.
-
-You need to make sure your script is executable, is accessible by the
-user CGI is running the script under (which is probably not the user
-account you tested it under), does not rely on any environment variables
-(like PATH) from the user it isn't running under, and isn't in a
-location where the CGI server can't find it, basically, more or less.
-Please see the following for more information:
-
- http://www.perl.com/CPAN/doc/FAQs/cgi/idiots-guide.html
- http://www.perl.com/CPAN/doc/FAQs/cgi/perl-cgi-faq.html
- ftp://rtfm.mit.edu/pub/usenet/news.answers/www/cgi-faq
- http://hoohoo.ncsa.uiuc.edu/cgi/interface.html
- http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html
-
-You should also look at L<perlfaq9>.
-
-=item setegid() not implemented
-
-(F) You tried to assign to C<$)>, and your operating system doesn't
-support the setegid() system call (or equivalent), or at least Configure
-didn't think so.
-
-=item seteuid() not implemented
-
-(F) You tried to assign to C<< $> >>, and your operating system doesn't
-support the seteuid() system call (or equivalent), or at least Configure
-didn't think so.
-
-=item setpgrp can't take arguments
-
-(F) Your system has the setpgrp() from BSD 4.2, which takes no
-arguments, unlike POSIX setpgid(), which takes a process ID and process
-group ID.
-
-=item setrgid() not implemented
-
-(F) You tried to assign to C<$(>, and your operating system doesn't
-support the setrgid() system call (or equivalent), or at least Configure
-didn't think so.
-
-=item setruid() not implemented
-
-(F) You tried to assign to C<$<>, and your operating system doesn't
-support the setruid() system call (or equivalent), or at least Configure
-didn't think so.
-
-=item setsockopt() on closed socket %s
-
-(W closed) You tried to set a socket option on a closed socket. Did you
-forget to check the return value of your socket() call? See
-L<perlfunc/setsockopt>.
-
-=item Setuid/gid script is writable by world
-
-(F) The setuid emulator won't run a script that is writable by the
-world, because the world might have written on it already.
-
-=item shm%s not implemented
-
-(F) You don't have System V shared memory IPC on your system.
-
-=item <> should be quotes
-
-(F) You wrote C<< require <file> >> when you should have written
-C<require 'file'>.
-
-=item /%s/ should probably be written as "%s"
-
-(W syntax) You have used a pattern where Perl expected to find a string,
-as in the first argument to C<join>. Perl will treat the true or false
-result of matching the pattern against $_ as the string, which is
-probably not what you had in mind.
-
-=item shutdown() on closed socket %s
-
-(W closed) You tried to do a shutdown on a closed socket. Seems a bit
-superfluous.
-
-=item SIG%s handler "%s" not defined
-
-(W signal) The signal handler named in %SIG doesn't, in fact, exist.
-Perhaps you put it into the wrong package?
-
-=item sort is now a reserved word
-
-(F) An ancient error message that almost nobody ever runs into anymore.
-But before sort was a keyword, people sometimes used it as a filehandle.
-
-=item Sort subroutine didn't return a numeric value
-
-(F) A sort comparison routine must return a number. You probably blew
-it by not using C<< <=> >> or C<cmp>, or by not using them correctly.
-See L<perlfunc/sort>.
-
-=item Sort subroutine didn't return single value
-
-(F) A sort comparison subroutine may not return a list value with more
-or less than one element. See L<perlfunc/sort>.
-
-=item Split loop
-
-(P) The split was looping infinitely. (Obviously, a split shouldn't
-iterate more times than there are characters of input, which is what
-happened.) See L<perlfunc/split>.
-
-=item Statement unlikely to be reached
-
-(W exec) You did an exec() with some statement after it other than a
-die(). This is almost always an error, because exec() never returns
-unless there was a failure. You probably wanted to use system()
-instead, which does return. To suppress this warning, put the exec() in
-a block by itself.
-
-=item stat() on unopened filehandle %s
-
-(W unopened) You tried to use the stat() function on a filehandle that
-was either never opened or has since been closed.
-
-=item Stub found while resolving method `%s' overloading %s
-
-(P) Overloading resolution over @ISA tree may be broken by importation
-stubs. Stubs should never be implicitly created, but explicit calls to
-C<can> may break this.
-
-=item Subroutine %s redefined
-
-(W redefine) You redefined a subroutine. To suppress this warning, say
-
- {
- no warnings;
- eval "sub name { ... }";
- }
-
-=item Substitution loop
-
-(P) The substitution was looping infinitely. (Obviously, a substitution
-shouldn't iterate more times than there are characters of input, which
-is what happened.) See the discussion of substitution in
-L<perlop/"Quote and Quote-like Operators">.
-
-=item Substitution pattern not terminated
-
-(F) The lexer couldn't find the interior delimiter of a s/// or s{}{}
-construct. Remember that bracketing delimiters count nesting level.
-Missing the leading C<$> from variable C<$s> may cause this error.
-
-=item Substitution replacement not terminated
-
-(F) The lexer couldn't find the final delimiter of a s/// or s{}{}
-construct. Remember that bracketing delimiters count nesting level.
-Missing the leading C<$> from variable C<$s> may cause this error.
-
-=item substr outside of string
-
-(W substr),(F) You tried to reference a substr() that pointed outside of
-a string. That is, the absolute value of the offset was larger than the
-length of the string. See L<perlfunc/substr>. This warning is fatal if
-substr is used in an lvalue context (as the left hand side of an
-assignment or as a subroutine argument for example).
-
-=item suidperl is no longer needed since %s
-
-(F) Your Perl was compiled with B<-D>SETUID_SCRIPTS_ARE_SECURE_NOW, but
-a version of the setuid emulator somehow got run anyway.
-
-=item Switch (?(condition)... contains too many branches before << HE%s
-
-(F) A (?(condition)if-clause|else-clause) construct can have at most two
-branches (the if-clause and the else-clause). If you want one or both to
-contain alternation, such as using C<this|that|other>, enclose it in
-clustering parentheses:
-
- (?(condition)(?:this|that|other)|else-clause)
-
-The << HERE shows in the regular expression about where the problem was
-discovered. See L<perlre>.
-
-=item Switch condition not recognized before << HERE in regex m/%s/
-
-(F) If the argument to the (?(...)if-clause|else-clause) construct is a
-number, it can be only a number. The << HERE shows in the regular expression
-about where the problem was discovered. See L<perlre>.
-
-=item switching effective %s is not implemented
-
-(F) While under the C<use filetest> pragma, we cannot switch the real
-and effective uids or gids.
-
-=item syntax error
-
-(F) Probably means you had a syntax error. Common reasons include:
-
- A keyword is misspelled.
- A semicolon is missing.
- A comma is missing.
- An opening or closing parenthesis is missing.
- An opening or closing brace is missing.
- A closing quote is missing.
-
-Often there will be another error message associated with the syntax
-error giving more information. (Sometimes it helps to turn on B<-w>.)
-The error message itself often tells you where it was in the line when
-it decided to give up. Sometimes the actual error is several tokens
-before this, because Perl is good at understanding random input.
-Occasionally the line number may be misleading, and once in a blue moon
-the only way to figure out what's triggering the error is to call
-C<perl -c> repeatedly, chopping away half the program each time to see
-if the error went away. Sort of the cybernetic version of S<20
-questions>.
-
-=item syntax error at line %d: `%s' unexpected
-
-(A) You've accidentally run your script through the Bourne shell instead
-of Perl. Check the #! line, or manually feed your script into Perl
-yourself.
-
-=item %s syntax OK
-
-(F) The final summary message when a C<perl -c> succeeds.
-
-=item System V %s is not implemented on this machine
-
-(F) You tried to do something with a function beginning with "sem",
-"shm", or "msg" but that System V IPC is not implemented in your
-machine. In some machines the functionality can exist but be
-unconfigured. Consult your system support.
-
-=item syswrite() on closed filehandle %s
-
-(W closed) The filehandle you're writing to got itself closed sometime
-before now. Check your logic flow.
-
-=item Target of goto is too deeply nested
-
-(F) You tried to use C<goto> to reach a label that was too deeply nested
-for Perl to reach. Perl is doing you a favor by refusing.
-
-=item tell() on unopened filehandle
-
-(W unopened) You tried to use the tell() function on a filehandle that
-was either never opened or has since been closed.
-
-=item That use of $[ is unsupported
-
-(F) Assignment to C<$[> is now strictly circumscribed, and interpreted
-as a compiler directive. You may say only one of
-
- $[ = 0;
- $[ = 1;
- ...
- local $[ = 0;
- local $[ = 1;
- ...
-
-This is to prevent the problem of one module changing the array base out
-from under another module inadvertently. See L<perlvar/$[>.
-
-=item The crypt() function is unimplemented due to excessive paranoia
-
-(F) Configure couldn't find the crypt() function on your machine,
-probably because your vendor didn't supply it, probably because they
-think the U.S. Government thinks it's a secret, or at least that they
-will continue to pretend that it is. And if you quote me on that, I
-will deny it.
-
-=item The %s function is unimplemented
-
-The function indicated isn't implemented on this architecture, according
-to the probings of Configure.
-
-=item The stat preceding C<-l _> wasn't an lstat
-
-(F) It makes no sense to test the current stat buffer for symbolic
-linkhood if the last stat that wrote to the stat buffer already went
-past the symlink to get to the real file. Use an actual filename
-instead.
-
-=item This Perl can't reset CRTL environ elements (%s)
-
-=item This Perl can't set CRTL environ elements (%s=%s)
-
-(W internal) Warnings peculiar to VMS. You tried to change or delete an
-element of the CRTL's internal environ array, but your copy of Perl
-wasn't built with a CRTL that contained the setenv() function. You'll
-need to rebuild Perl with a CRTL that does, or redefine
-F<PERL_ENV_TABLES> (see L<perlvms>) so that the environ array isn't the
-target of the change to
-%ENV which produced the warning.
-
-=item times not implemented
-
-(F) Your version of the C library apparently doesn't do times(). I
-suspect you're not running on Unix.
-
-=item Too few args to syscall
-
-(F) There has to be at least one argument to syscall() to specify the
-system call to call, silly dilly.
-
-=item Too late for "B<-T>" option
-
-(X) The #! line (or local equivalent) in a Perl script contains the
-B<-T> option, but Perl was not invoked with B<-T> in its command line.
-This is an error because, by the time Perl discovers a B<-T> in a
-script, it's too late to properly taint everything from the environment.
-So Perl gives up.
-
-If the Perl script is being executed as a command using the #!
-mechanism (or its local equivalent), this error can usually be fixed by
-editing the #! line so that the B<-T> option is a part of Perl's first
-argument: e.g. change C<perl -n -T> to C<perl -T -n>.
-
-If the Perl script is being executed as C<perl scriptname>, then the
-B<-T> option must appear on the command line: C<perl -T scriptname>.
-
-=item Too late for "-%s" option
-
-(X) The #! line (or local equivalent) in a Perl script contains the
-B<-M> or B<-m> option. This is an error because B<-M> and B<-m> options
-are not intended for use inside scripts. Use the C<use> pragma instead.
-
-=item Too late to run %s block
-
-(W void) A CHECK or INIT block is being defined during run time proper,
-when the opportunity to run them has already passed. Perhaps you are
-loading a file with C<require> or C<do> when you should be using C<use>
-instead. Or perhaps you should put the C<require> or C<do> inside a
-BEGIN block.
-
-=item Too many args to syscall
-
-(F) Perl supports a maximum of only 14 args to syscall().
-
-=item Too many arguments for %s
-
-(F) The function requires fewer arguments than you specified.
-
-=item Too many )'s
-
-(A) You've accidentally run your script through B<csh> instead of Perl.
-Check the #! line, or manually feed your script into Perl yourself.
-
-=item Too many ('s
-
-=item trailing \ in regexp
-
-(F) The regular expression ends with an unbackslashed backslash.
-Backslash it. See L<perlre>.
-
-=item Transliteration pattern not terminated
-
-(F) The lexer couldn't find the interior delimiter of a tr/// or tr[][]
-or y/// or y[][] construct. Missing the leading C<$> from variables
-C<$tr> or C<$y> may cause this error.
-
-=item Transliteration replacement not terminated
-
-(F) The lexer couldn't find the final delimiter of a tr/// or tr[][]
-construct.
-
-=item truncate not implemented
-
-(F) Your machine doesn't implement a file truncation mechanism that
-Configure knows about.
-
-=item Type of arg %d to %s must be %s (not %s)
-
-(F) This function requires the argument in that position to be of a
-certain type. Arrays must be @NAME or C<@{EXPR}>. Hashes must be
-%NAME or C<%{EXPR}>. No implicit dereferencing is allowed--use the
-{EXPR} forms as an explicit dereference. See L<perlref>.
-
-=item umask: argument is missing initial 0
-
-(W umask) A umask of 222 is incorrect. It should be 0222, because octal
-literals always start with 0 in Perl, as in C.
-
-=item umask not implemented
-
-(F) Your machine doesn't implement the umask function and you tried to
-use it to restrict permissions for yourself (EXPR & 0700).
-
-=item Unable to create sub named "%s"
-
-(F) You attempted to create or access a subroutine with an illegal name.
-
-=item Unbalanced context: %d more PUSHes than POPs
-
-(W internal) The exit code detected an internal inconsistency in how
-many execution contexts were entered and left.
-
-=item Unbalanced saves: %d more saves than restores
-
-(W internal) The exit code detected an internal inconsistency in how
-many values were temporarily localized.
-
-=item Unbalanced scopes: %d more ENTERs than LEAVEs
-
-(W internal) The exit code detected an internal inconsistency in how
-many blocks were entered and left.
-
-=item Unbalanced tmps: %d more allocs than frees
-
-(W internal) The exit code detected an internal inconsistency in how
-many mortal scalars were allocated and freed.
-
-=item Undefined format "%s" called
-
-(F) The format indicated doesn't seem to exist. Perhaps it's really in
-another package? See L<perlform>.
-
-=item Undefined sort subroutine "%s" called
-
-(F) The sort comparison routine specified doesn't seem to exist.
-Perhaps it's in a different package? See L<perlfunc/sort>.
-
-=item Undefined subroutine &%s called
-
-(F) The subroutine indicated hasn't been defined, or if it was, it has
-since been undefined.
-
-=item Undefined subroutine called
-
-(F) The anonymous subroutine you're trying to call hasn't been defined,
-or if it was, it has since been undefined.
-
-=item Undefined subroutine in sort
-
-(F) The sort comparison routine specified is declared but doesn't seem
-to have been defined yet. See L<perlfunc/sort>.
-
-=item Undefined top format "%s" called
-
-(F) The format indicated doesn't seem to exist. Perhaps it's really in
-another package? See L<perlform>.
-
-=item Undefined value assigned to typeglob
-
-(W misc) An undefined value was assigned to a typeglob, a la
-C<*foo = undef>. This does nothing. It's possible that you really mean
-C<undef *foo>.
-
-=item %s: Undefined variable
-
-(A) You've accidentally run your script through B<csh> instead of Perl.
-Check the #! line, or manually feed your script into Perl yourself.
-
-=item unexec of %s into %s failed!
-
-(F) The unexec() routine failed for some reason. See your local FSF
-representative, who probably put it there in the first place.
-
-
-=item Unknown BYTEORDER
-
-(F) There are no byte-swapping functions for a machine with this byte
-order.
-
-=item Unknown switch condition (?(%.2s before << HERE in regex m/%s/
-
-(F) The condition of a (?(condition)if-clause|else-clause) construct is not
-known. The condition may be lookaround (the condition is true if the
-lookaround is true), a (?{...}) construct (the condition is true if the
-code evaluates to a true value), or a number (the condition is true if the
-set of capturing parentheses named by the number is defined).
-
-The << HERE shows in the regular expression about where the problem was
-discovered. See L<perlre>.
-
-=item Unknown open() mode '%s'
-
-(F) The second argument of 3-argument open() is not among the list
-of valid modes: C<< < >>, C<< > >>, C<<< >> >>>, C<< +< >>,
-C<< +> >>, C<<< +>> >>>, C<-|>, C<|->.
-
-=item Unknown process %x sent message to prime_env_iter: %s
-
-(P) An error peculiar to VMS. Perl was reading values for %ENV before
-iterating over it, and someone else stuck a message in the stream of
-data Perl expected. Someone's very confused, or perhaps trying to
-subvert Perl's population of %ENV for nefarious purposes.
-
-=item unmatched [ before << HERE mark in regex m/%s/
-
-(F) The brackets around a character class must match. If you wish to
-include a closing bracket in a character class, backslash it or put it
-first. See L<perlre>. The << HERE shows in the regular expression about
-where the escape was discovered.
-
-=item unmatched ( in regexp before << HERE mark in regex m/%s/
-
-(F) Unbackslashed parentheses must always be balanced in regular
-expressions. If you're a vi user, the % key is valuable for finding the
-matching parenthesis. See L<perlre>.
-
-=item Unmatched right %s bracket
-
-(F) The lexer counted more closing curly or square brackets than opening
-ones, so you're probably missing a matching opening bracket. As a
-general rule, you'll find the missing one (so to speak) near the place
-you were last editing.
-
-=item Unquoted string "%s" may clash with future reserved word
-
-(W reserved) You used a bareword that might someday be claimed as a
-reserved word. It's best to put such a word in quotes, or capitalize it
-somehow, or insert an underbar into it. You might also declare it as a
-subroutine.
-
-=item Unrecognized character %s
-
-(F) The Perl parser has no idea what to do with the specified character
-in your Perl script (or eval). Perhaps you tried to run a compressed
-script, a binary program, or a directory as a Perl program.
-
-=item /%s/: Unrecognized escape \\%c in character class passed through
-
-(W regexp) You used a backslash-character combination which is not
-recognized by Perl inside character classes. The character was
-understood literally.
-
-=item Unrecognized escape \\%c passed through before << HERE in m/%s/
-
-(W regexp) You used a backslash-character combination which is not
-recognized by Perl. This combination appears in an interpolated variable or
-a C<'>-delimited regular expression. The character was understood
-literally. The << HERE shows in the regular expression about where the escape
-was discovered.
-
-
-=item Unrecognized escape \\%c passed through
-
-(W misc) You used a backslash-character combination which is not
-recognized by Perl.
-
-=item Unrecognized signal name "%s"
-
-(F) You specified a signal name to the kill() function that was not
-recognized. Say C<kill -l> in your shell to see the valid signal names
-on your system.
-
-=item Unrecognized switch: -%s (-h will show valid options)
-
-(F) You specified an illegal option to Perl. Don't do that. (If you
-think you didn't do that, check the #! line to see if it's supplying the
-bad switch on your behalf.)
-
-=item Unsuccessful %s on filename containing newline
-
-(W newline) A file operation was attempted on a filename, and that
-operation failed, PROBABLY because the filename contained a newline,
-PROBABLY because you forgot to chomp() it off. See L<perlfunc/chomp>.
-
-=item Unsupported directory function "%s" called
-
-(F) Your machine doesn't support opendir() and readdir().
-
-=item Unsupported function %s
-
-(F) This machine doesn't implement the indicated function, apparently.
-At least, Configure doesn't think so.
-
-=item Unsupported function fork
-
-(F) Your version of executable does not support forking.
-
-Note that under some systems, like OS/2, there may be different flavors
-of Perl executables, some of which may support fork, some not. Try
-changing the name you call Perl by to C<perl_>, C<perl__>, and so on.
-
-=item Unsupported script encoding
-
-(F) Your program file begins with a Unicode Byte Order Mark (BOM) which
-declares it to be in a Unicode encoding that Perl cannot yet read.
-
-=item Unsupported socket function "%s" called
-
-(F) Your machine doesn't support the Berkeley socket mechanism, or at
-least that's what Configure thought.
-
-=item Unterminated attribute list
-
-(F) The lexer found something other than a simple identifier at the
-start of an attribute, and it wasn't a semicolon or the start of a
-block. Perhaps you terminated the parameter list of the previous
-attribute too soon. See L<attributes>.
-
-=item Unterminated attribute parameter in attribute list
-
-(F) The lexer saw an opening (left) parenthesis character while parsing
-an attribute list, but the matching closing (right) parenthesis
-character was not found. You may need to add (or remove) a backslash
-character to get your parentheses to balance. See L<attributes>.
-
-=item Unterminated compressed integer
-
-(F) An argument to unpack("w",...) was incompatible with the BER
-compressed integer format and could not be converted to an integer.
-See L<perlfunc/pack>.
-
-=item Unterminated <> operator
-
-(F) The lexer saw a left angle bracket in a place where it was expecting
-a term, so it's looking for the corresponding right angle bracket, and
-not finding it. Chances are you left some needed parentheses out
-earlier in the line, and you really meant a "less than".
-
-=item untie attempted while %d inner references still exist
-
-(W untie) A copy of the object returned from C<tie> (or C<tied>) was
-still valid when C<untie> was called.
-
-=item Useless use of %s in void context
-
-(W void) You did something without a side effect in a context that does
-nothing with the return value, such as a statement that doesn't return a
-value from a block, or the left side of a scalar comma operator. Very
-often this points not to stupidity on your part, but a failure of Perl
-to parse your program the way you thought it would. For example, you'd
-get this if you mixed up your C precedence with Python precedence and
-said
-
- $one, $two = 1, 2;
-
-when you meant to say
-
- ($one, $two) = (1, 2);
-
-Another common error is to use ordinary parentheses to construct a list
-reference when you should be using square or curly brackets, for
-example, if you say
-
- $array = (1,2);
-
-when you should have said
-
- $array = [1,2];
-
-The square brackets explicitly turn a list value into a scalar value,
-while parentheses do not. So when a parenthesized list is evaluated in
-a scalar context, the comma is treated like C's comma operator, which
-throws away the left argument, which is not what you want. See
-L<perlref> for more on this.
-
-=item Useless use of "re" pragma
-
-(W) You did C<use re;> without any arguments. That isn't very useful.
-
-=item "use" not allowed in expression
-
-(F) The "use" keyword is recognized and executed at compile time, and
-returns no useful value. See L<perlmod>.
-
-=item Use of bare << to mean <<"" is deprecated
-
-(D deprecated) You are now encouraged to use the explicitly quoted form
-if you wish to use an empty line as the terminator of the here-document.
-
-=item Use of implicit split to @_ is deprecated
-
-(D deprecated) It makes a lot of work for the compiler when you clobber
-a subroutine's argument list, so it's better if you assign the results
-of a split() explicitly to an array (or list).
-
-=item Use of inherited AUTOLOAD for non-method %s() is deprecated
-
-(D deprecated) As an (ahem) accidental feature, C<AUTOLOAD> subroutines
-are looked up as methods (using the C<@ISA> hierarchy) even when the
-subroutines to be autoloaded were called as plain functions (e.g.
-C<Foo::bar()>), not as methods (e.g. C<< Foo->bar() >> or C<<
-$obj->bar() >>).
-
-This bug will be rectified in future by using method lookup only for
-methods' C<AUTOLOAD>s. However, there is a significant base of existing
-code that may be using the old behavior. So, as an interim step, Perl
-currently issues an optional warning when non-methods use inherited
-C<AUTOLOAD>s.
-
-The simple rule is: Inheritance will not work when autoloading
-non-methods. The simple fix for old code is: In any module that used
-to depend on inheriting C<AUTOLOAD> for non-methods from a base class
-named C<BaseClass>, execute C<*AUTOLOAD = \&BaseClass::AUTOLOAD> during
-startup.
-
-In code that currently says C<use AutoLoader; @ISA = qw(AutoLoader);>
-you should remove AutoLoader from @ISA and change C<use AutoLoader;> to
-C<use AutoLoader 'AUTOLOAD';>.
-
-=item Use of %s in printf format not supported
-
-(F) You attempted to use a feature of printf that is accessible from
-only C. This usually means there's a better way to do it in Perl.
-
-=item Use of $* is deprecated
-
-(D deprecated) This variable magically turned on multi-line pattern
-matching, both for you and for any luckless subroutine that you happen
-to call. You should use the new C<//m> and C<//s> modifiers now to do
-that without the dangerous action-at-a-distance effects of C<$*>.
-
-=item Use of %s is deprecated
-
-(D deprecated) The construct indicated is no longer recommended for use,
-generally because there's a better way to do it, and also because the
-old way has bad side effects.
-
-=item Use of $# is deprecated
-
-(D deprecated) This was an ill-advised attempt to emulate a poorly
-defined B<awk> feature. Use an explicit printf() or sprintf() instead.
-
-=item Use of reserved word "%s" is deprecated
-
-(D deprecated) The indicated bareword is a reserved word. Future
-versions of perl may use it as a keyword, so you're better off either
-explicitly quoting the word in a manner appropriate for its context of
-use, or using a different name altogether. The warning can be
-suppressed for subroutine names by either adding a C<&> prefix, or using
-a package qualifier, e.g. C<&our()>, or C<Foo::our()>.
-
-=item Use of uninitialized value%s
-
-(W uninitialized) An undefined value was used as if it were already
-defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
-To suppress this warning assign a defined value to your variables.
-
-To help you figure out what was undefined, perl tells you what operation
-you used the undefined value in. Note, however, that perl optimizes your
-program and the operation displayed in the warning may not necessarily
-appear literally in your program. For example, C<"that $foo"> is
-usually optimized into C<"that " . $foo>, and the warning will refer to
-the C<concatenation (.)> operator, even though there is no C<.> in your
-program.
-
-=item Value of %s can be "0"; test with defined()
-
-(W misc) In a conditional expression, you used <HANDLE>, <*> (glob),
-C<each()>, or C<readdir()> as a boolean value. Each of these constructs
-can return a value of "0"; that would make the conditional expression
-false, which is probably not what you intended. When using these
-constructs in conditional expressions, test their values with the
-C<defined> operator.
-
-=item Value of CLI symbol "%s" too long
-
-(W misc) A warning peculiar to VMS. Perl tried to read the value of an
-%ENV element from a CLI symbol table, and found a resultant string
-longer than 1024 characters. The return value has been truncated to
-1024 characters.
-
-=item Variable "%s" is not imported%s
-
-(F) While "use strict" in effect, you referred to a global variable that
-you apparently thought was imported from another module, because
-something else of the same name (usually a subroutine) is exported by
-that module. It usually means you put the wrong funny character on the
-front of your variable.
-
-=item "%s" variable %s masks earlier declaration in same %s
-
-(W misc) A "my" or "our" variable has been redeclared in the current
-scope or statement, effectively eliminating all access to the previous
-instance. This is almost always a typographical error. Note that the
-earlier variable will still exist until the end of the scope or until
-all closure referents to it are destroyed.
-
-=item Variable "%s" may be unavailable
-
-(W closure) An inner (nested) I<anonymous> subroutine is inside a
-I<named> subroutine, and outside that is another subroutine; and the
-anonymous (innermost) subroutine is referencing a lexical variable
-defined in the outermost subroutine. For example:
-
- sub outermost { my $a; sub middle { sub { $a } } }
-
-If the anonymous subroutine is called or referenced (directly or
-indirectly) from the outermost subroutine, it will share the variable as
-you would expect. But if the anonymous subroutine is called or
-referenced when the outermost subroutine is not active, it will see the
-value of the shared variable as it was before and during the *first*
-call to the outermost subroutine, which is probably not what you want.
-
-In these circumstances, it is usually best to make the middle subroutine
-anonymous, using the C<sub {}> syntax. Perl has specific support for
-shared variables in nested anonymous subroutines; a named subroutine in
-between interferes with this feature.
-
-=item Variable syntax
-
-(A) You've accidentally run your script through B<csh> instead
-of Perl. Check the #! line, or manually feed your script into
-Perl yourself.
-
-=item Variable "%s" will not stay shared
-
-(W closure) An inner (nested) I<named> subroutine is referencing a
-lexical variable defined in an outer subroutine.
-
-When the inner subroutine is called, it will probably see the value of
-the outer subroutine's variable as it was before and during the *first*
-call to the outer subroutine; in this case, after the first call to the
-outer subroutine is complete, the inner and outer subroutines will no
-longer share a common value for the variable. In other words, the
-variable will no longer be shared.
-
-Furthermore, if the outer subroutine is anonymous and references a
-lexical variable outside itself, then the outer and inner subroutines
-will I<never> share the given variable.
-
-This problem can usually be solved by making the inner subroutine
-anonymous, using the C<sub {}> syntax. When inner anonymous subs that
-reference variables in outer subroutines are called or referenced, they
-are automatically rebound to the current values of such variables.
-
-=item Variable length lookbehind not implemented before << HERE in %s
-
-(F) Lookbehind is allowed only for subexpressions whose length is fixed and
-known at compile time. The << HERE shows in the regular expression about where
-the problem was discovered.
-
-=item Version number must be a constant number
-
-(P) The attempt to translate a C<use Module n.n LIST> statement into
-its equivalent C<BEGIN> block found an internal inconsistency with
-the version number.
-
-=item Warning: something's wrong
-
-(W) You passed warn() an empty string (the equivalent of C<warn "">) or
-you called it with no args and C<$_> was empty.
-
-=item Warning: unable to close filehandle %s properly
-
-(S) The implicit close() done by an open() got an error indication on
-the close(). This usually indicates your file system ran out of disk
-space.
-
-=item Warning: Use of "%s" without parentheses is ambiguous
-
-(S ambiguous) You wrote a unary operator followed by something that
-looks like a binary operator that could also have been interpreted as a
-term or unary operator. For instance, if you know that the rand
-function has a default argument of 1.0, and you write
-
- rand + 5;
-
-you may THINK you wrote the same thing as
-
- rand() + 5;
-
-but in actual fact, you got
-
- rand(+5);
-
-So put in parentheses to say what you really mean.
-
-=item Wide character in %s
-
-(F) Perl met a wide character (>255) when it wasn't expecting one.
-
-=item write() on closed filehandle %s
-
-(W closed) The filehandle you're writing to got itself closed sometime
-before now. Check your logic flow.
-
-=item X outside of string
-
-(F) You had a pack template that specified a relative position before
-the beginning of the string being unpacked. See L<perlfunc/pack>.
-
-=item x outside of string
-
-(F) You had a pack template that specified a relative position after
-the end of the string being unpacked. See L<perlfunc/pack>.
-
-=item Xsub "%s" called in sort
-
-(F) The use of an external subroutine as a sort comparison is not yet
-supported.
-
-=item Xsub called in sort
-
-(F) The use of an external subroutine as a sort comparison is not yet
-supported.
-
-=item You can't use C<-l> on a filehandle
-
-(F) A filehandle represents an opened file, and when you opened the file
-it already went past any symlink you are presumably trying to look for.
-Use a filename instead.
-
-=item YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!
-
-(F) And you probably never will, because you probably don't have the
-sources to your kernel, and your vendor probably doesn't give a rip
-about what you want. Your best bet is to use the wrapsuid script in the
-eg directory to put a setuid C wrapper around your script.
-
-=item You need to quote "%s"
-
-(W syntax) You assigned a bareword as a signal handler name.
-Unfortunately, you already have a subroutine of that name declared,
-which means that Perl 5 will try to call the subroutine when the
-assignment is executed, which is probably not what you want. (If it IS
-what you want, put an & in front.)
-
-=back
-
-=cut
diff --git a/contrib/perl5/pod/perldsc.pod b/contrib/perl5/pod/perldsc.pod
deleted file mode 100644
index 5ab97e1..0000000
--- a/contrib/perl5/pod/perldsc.pod
+++ /dev/null
@@ -1,832 +0,0 @@
-=head1 NAME
-
-perldsc - Perl Data Structures Cookbook
-
-=head1 DESCRIPTION
-
-The single feature most sorely lacking in the Perl programming language
-prior to its 5.0 release was complex data structures. Even without direct
-language support, some valiant programmers did manage to emulate them, but
-it was hard work and not for the faint of heart. You could occasionally
-get away with the C<$m{$AoA,$b}> notation borrowed from B<awk> in which the
-keys are actually more like a single concatenated string C<"$AoA$b">, but
-traversal and sorting were difficult. More desperate programmers even
-hacked Perl's internal symbol table directly, a strategy that proved hard
-to develop and maintain--to put it mildly.
-
-The 5.0 release of Perl let us have complex data structures. You
-may now write something like this and all of a sudden, you'd have a array
-with three dimensions!
-
- for $x (1 .. 10) {
- for $y (1 .. 10) {
- for $z (1 .. 10) {
- $AoA[$x][$y][$z] =
- $x ** $y + $z;
- }
- }
- }
-
-Alas, however simple this may appear, underneath it's a much more
-elaborate construct than meets the eye!
-
-How do you print it out? Why can't you say just C<print @AoA>? How do
-you sort it? How can you pass it to a function or get one of these back
-from a function? Is is an object? Can you save it to disk to read
-back later? How do you access whole rows or columns of that matrix? Do
-all the values have to be numeric?
-
-As you see, it's quite easy to become confused. While some small portion
-of the blame for this can be attributed to the reference-based
-implementation, it's really more due to a lack of existing documentation with
-examples designed for the beginner.
-
-This document is meant to be a detailed but understandable treatment of the
-many different sorts of data structures you might want to develop. It
-should also serve as a cookbook of examples. That way, when you need to
-create one of these complex data structures, you can just pinch, pilfer, or
-purloin a drop-in example from here.
-
-Let's look at each of these possible constructs in detail. There are separate
-sections on each of the following:
-
-=over 5
-
-=item * arrays of arrays
-
-=item * hashes of arrays
-
-=item * arrays of hashes
-
-=item * hashes of hashes
-
-=item * more elaborate constructs
-
-=back
-
-But for now, let's look at general issues common to all
-these types of data structures.
-
-=head1 REFERENCES
-
-The most important thing to understand about all data structures in Perl
--- including multidimensional arrays--is that even though they might
-appear otherwise, Perl C<@ARRAY>s and C<%HASH>es are all internally
-one-dimensional. They can hold only scalar values (meaning a string,
-number, or a reference). They cannot directly contain other arrays or
-hashes, but instead contain I<references> to other arrays or hashes.
-
-You can't use a reference to a array or hash in quite the same way that you
-would a real array or hash. For C or C++ programmers unused to
-distinguishing between arrays and pointers to the same, this can be
-confusing. If so, just think of it as the difference between a structure
-and a pointer to a structure.
-
-You can (and should) read more about references in the perlref(1) man
-page. Briefly, references are rather like pointers that know what they
-point to. (Objects are also a kind of reference, but we won't be needing
-them right away--if ever.) This means that when you have something which
-looks to you like an access to a two-or-more-dimensional array and/or hash,
-what's really going on is that the base type is
-merely a one-dimensional entity that contains references to the next
-level. It's just that you can I<use> it as though it were a
-two-dimensional one. This is actually the way almost all C
-multidimensional arrays work as well.
-
- $array[7][12] # array of arrays
- $array[7]{string} # array of hashes
- $hash{string}[7] # hash of arrays
- $hash{string}{'another string'} # hash of hashes
-
-Now, because the top level contains only references, if you try to print
-out your array in with a simple print() function, you'll get something
-that doesn't look very nice, like this:
-
- @AoA = ( [2, 3], [4, 5, 7], [0] );
- print $AoA[1][2];
- 7
- print @AoA;
- ARRAY(0x83c38)ARRAY(0x8b194)ARRAY(0x8b1d0)
-
-
-That's because Perl doesn't (ever) implicitly dereference your variables.
-If you want to get at the thing a reference is referring to, then you have
-to do this yourself using either prefix typing indicators, like
-C<${$blah}>, C<@{$blah}>, C<@{$blah[$i]}>, or else postfix pointer arrows,
-like C<$a-E<gt>[3]>, C<$h-E<gt>{fred}>, or even C<$ob-E<gt>method()-E<gt>[3]>.
-
-=head1 COMMON MISTAKES
-
-The two most common mistakes made in constructing something like
-an array of arrays is either accidentally counting the number of
-elements or else taking a reference to the same memory location
-repeatedly. Here's the case where you just get the count instead
-of a nested array:
-
- for $i (1..10) {
- @array = somefunc($i);
- $AoA[$i] = @array; # WRONG!
- }
-
-That's just the simple case of assigning an array to a scalar and getting
-its element count. If that's what you really and truly want, then you
-might do well to consider being a tad more explicit about it, like this:
-
- for $i (1..10) {
- @array = somefunc($i);
- $counts[$i] = scalar @array;
- }
-
-Here's the case of taking a reference to the same memory location
-again and again:
-
- for $i (1..10) {
- @array = somefunc($i);
- $AoA[$i] = \@array; # WRONG!
- }
-
-So, what's the big problem with that? It looks right, doesn't it?
-After all, I just told you that you need an array of references, so by
-golly, you've made me one!
-
-Unfortunately, while this is true, it's still broken. All the references
-in @AoA refer to the I<very same place>, and they will therefore all hold
-whatever was last in @array! It's similar to the problem demonstrated in
-the following C program:
-
- #include <pwd.h>
- main() {
- struct passwd *getpwnam(), *rp, *dp;
- rp = getpwnam("root");
- dp = getpwnam("daemon");
-
- printf("daemon name is %s\nroot name is %s\n",
- dp->pw_name, rp->pw_name);
- }
-
-Which will print
-
- daemon name is daemon
- root name is daemon
-
-The problem is that both C<rp> and C<dp> are pointers to the same location
-in memory! In C, you'd have to remember to malloc() yourself some new
-memory. In Perl, you'll want to use the array constructor C<[]> or the
-hash constructor C<{}> instead. Here's the right way to do the preceding
-broken code fragments:
-
- for $i (1..10) {
- @array = somefunc($i);
- $AoA[$i] = [ @array ];
- }
-
-The square brackets make a reference to a new array with a I<copy>
-of what's in @array at the time of the assignment. This is what
-you want.
-
-Note that this will produce something similar, but it's
-much harder to read:
-
- for $i (1..10) {
- @array = 0 .. $i;
- @{$AoA[$i]} = @array;
- }
-
-Is it the same? Well, maybe so--and maybe not. The subtle difference
-is that when you assign something in square brackets, you know for sure
-it's always a brand new reference with a new I<copy> of the data.
-Something else could be going on in this new case with the C<@{$AoA[$i]}}>
-dereference on the left-hand-side of the assignment. It all depends on
-whether C<$AoA[$i]> had been undefined to start with, or whether it
-already contained a reference. If you had already populated @AoA with
-references, as in
-
- $AoA[3] = \@another_array;
-
-Then the assignment with the indirection on the left-hand-side would
-use the existing reference that was already there:
-
- @{$AoA[3]} = @array;
-
-Of course, this I<would> have the "interesting" effect of clobbering
-@another_array. (Have you ever noticed how when a programmer says
-something is "interesting", that rather than meaning "intriguing",
-they're disturbingly more apt to mean that it's "annoying",
-"difficult", or both? :-)
-
-So just remember always to use the array or hash constructors with C<[]>
-or C<{}>, and you'll be fine, although it's not always optimally
-efficient.
-
-Surprisingly, the following dangerous-looking construct will
-actually work out fine:
-
- for $i (1..10) {
- my @array = somefunc($i);
- $AoA[$i] = \@array;
- }
-
-That's because my() is more of a run-time statement than it is a
-compile-time declaration I<per se>. This means that the my() variable is
-remade afresh each time through the loop. So even though it I<looks> as
-though you stored the same variable reference each time, you actually did
-not! This is a subtle distinction that can produce more efficient code at
-the risk of misleading all but the most experienced of programmers. So I
-usually advise against teaching it to beginners. In fact, except for
-passing arguments to functions, I seldom like to see the gimme-a-reference
-operator (backslash) used much at all in code. Instead, I advise
-beginners that they (and most of the rest of us) should try to use the
-much more easily understood constructors C<[]> and C<{}> instead of
-relying upon lexical (or dynamic) scoping and hidden reference-counting to
-do the right thing behind the scenes.
-
-In summary:
-
- $AoA[$i] = [ @array ]; # usually best
- $AoA[$i] = \@array; # perilous; just how my() was that array?
- @{ $AoA[$i] } = @array; # way too tricky for most programmers
-
-
-=head1 CAVEAT ON PRECEDENCE
-
-Speaking of things like C<@{$AoA[$i]}>, the following are actually the
-same thing:
-
- $aref->[2][2] # clear
- $$aref[2][2] # confusing
-
-That's because Perl's precedence rules on its five prefix dereferencers
-(which look like someone swearing: C<$ @ * % &>) make them bind more
-tightly than the postfix subscripting brackets or braces! This will no
-doubt come as a great shock to the C or C++ programmer, who is quite
-accustomed to using C<*a[i]> to mean what's pointed to by the I<i'th>
-element of C<a>. That is, they first take the subscript, and only then
-dereference the thing at that subscript. That's fine in C, but this isn't C.
-
-The seemingly equivalent construct in Perl, C<$$aref[$i]> first does
-the deref of $aref, making it take $aref as a reference to an
-array, and then dereference that, and finally tell you the I<i'th> value
-of the array pointed to by $AoA. If you wanted the C notion, you'd have to
-write C<${$AoA[$i]}> to force the C<$AoA[$i]> to get evaluated first
-before the leading C<$> dereferencer.
-
-=head1 WHY YOU SHOULD ALWAYS C<use strict>
-
-If this is starting to sound scarier than it's worth, relax. Perl has
-some features to help you avoid its most common pitfalls. The best
-way to avoid getting confused is to start every program like this:
-
- #!/usr/bin/perl -w
- use strict;
-
-This way, you'll be forced to declare all your variables with my() and
-also disallow accidental "symbolic dereferencing". Therefore if you'd done
-this:
-
- my $aref = [
- [ "fred", "barney", "pebbles", "bambam", "dino", ],
- [ "homer", "bart", "marge", "maggie", ],
- [ "george", "jane", "elroy", "judy", ],
- ];
-
- print $aref[2][2];
-
-The compiler would immediately flag that as an error I<at compile time>,
-because you were accidentally accessing C<@aref>, an undeclared
-variable, and it would thereby remind you to write instead:
-
- print $aref->[2][2]
-
-=head1 DEBUGGING
-
-Before version 5.002, the standard Perl debugger didn't do a very nice job of
-printing out complex data structures. With 5.002 or above, the
-debugger includes several new features, including command line editing as
-well as the C<x> command to dump out complex data structures. For
-example, given the assignment to $AoA above, here's the debugger output:
-
- DB<1> x $AoA
- $AoA = ARRAY(0x13b5a0)
- 0 ARRAY(0x1f0a24)
- 0 'fred'
- 1 'barney'
- 2 'pebbles'
- 3 'bambam'
- 4 'dino'
- 1 ARRAY(0x13b558)
- 0 'homer'
- 1 'bart'
- 2 'marge'
- 3 'maggie'
- 2 ARRAY(0x13b540)
- 0 'george'
- 1 'jane'
- 2 'elroy'
- 3 'judy'
-
-=head1 CODE EXAMPLES
-
-Presented with little comment (these will get their own manpages someday)
-here are short code examples illustrating access of various
-types of data structures.
-
-=head1 ARRAYS OF ARRAYS
-
-=head2 Declaration of a ARRAY OF ARRAYS
-
- @AoA = (
- [ "fred", "barney" ],
- [ "george", "jane", "elroy" ],
- [ "homer", "marge", "bart" ],
- );
-
-=head2 Generation of a ARRAY OF ARRAYS
-
- # reading from file
- while ( <> ) {
- push @AoA, [ split ];
- }
-
- # calling a function
- for $i ( 1 .. 10 ) {
- $AoA[$i] = [ somefunc($i) ];
- }
-
- # using temp vars
- for $i ( 1 .. 10 ) {
- @tmp = somefunc($i);
- $AoA[$i] = [ @tmp ];
- }
-
- # add to an existing row
- push @{ $AoA[0] }, "wilma", "betty";
-
-=head2 Access and Printing of a ARRAY OF ARRAYS
-
- # one element
- $AoA[0][0] = "Fred";
-
- # another element
- $AoA[1][1] =~ s/(\w)/\u$1/;
-
- # print the whole thing with refs
- for $aref ( @AoA ) {
- print "\t [ @$aref ],\n";
- }
-
- # print the whole thing with indices
- for $i ( 0 .. $#AoA ) {
- print "\t [ @{$AoA[$i]} ],\n";
- }
-
- # print the whole thing one at a time
- for $i ( 0 .. $#AoA ) {
- for $j ( 0 .. $#{ $AoA[$i] } ) {
- print "elt $i $j is $AoA[$i][$j]\n";
- }
- }
-
-=head1 HASHES OF ARRAYS
-
-=head2 Declaration of a HASH OF ARRAYS
-
- %HoA = (
- flintstones => [ "fred", "barney" ],
- jetsons => [ "george", "jane", "elroy" ],
- simpsons => [ "homer", "marge", "bart" ],
- );
-
-=head2 Generation of a HASH OF ARRAYS
-
- # reading from file
- # flintstones: fred barney wilma dino
- while ( <> ) {
- next unless s/^(.*?):\s*//;
- $HoA{$1} = [ split ];
- }
-
- # reading from file; more temps
- # flintstones: fred barney wilma dino
- while ( $line = <> ) {
- ($who, $rest) = split /:\s*/, $line, 2;
- @fields = split ' ', $rest;
- $HoA{$who} = [ @fields ];
- }
-
- # calling a function that returns a list
- for $group ( "simpsons", "jetsons", "flintstones" ) {
- $HoA{$group} = [ get_family($group) ];
- }
-
- # likewise, but using temps
- for $group ( "simpsons", "jetsons", "flintstones" ) {
- @members = get_family($group);
- $HoA{$group} = [ @members ];
- }
-
- # append new members to an existing family
- push @{ $HoA{"flintstones"} }, "wilma", "betty";
-
-=head2 Access and Printing of a HASH OF ARRAYS
-
- # one element
- $HoA{flintstones}[0] = "Fred";
-
- # another element
- $HoA{simpsons}[1] =~ s/(\w)/\u$1/;
-
- # print the whole thing
- foreach $family ( keys %HoA ) {
- print "$family: @{ $HoA{$family} }\n"
- }
-
- # print the whole thing with indices
- foreach $family ( keys %HoA ) {
- print "family: ";
- foreach $i ( 0 .. $#{ $HoA{$family} } ) {
- print " $i = $HoA{$family}[$i]";
- }
- print "\n";
- }
-
- # print the whole thing sorted by number of members
- foreach $family ( sort { @{$HoA{$b}} <=> @{$HoA{$a}} } keys %HoA ) {
- print "$family: @{ $HoA{$family} }\n"
- }
-
- # print the whole thing sorted by number of members and name
- foreach $family ( sort {
- @{$HoA{$b}} <=> @{$HoA{$a}}
- ||
- $a cmp $b
- } keys %HoA )
- {
- print "$family: ", join(", ", sort @{ $HoA{$family} }), "\n";
- }
-
-=head1 ARRAYS OF HASHES
-
-=head2 Declaration of a ARRAY OF HASHES
-
- @AoH = (
- {
- Lead => "fred",
- Friend => "barney",
- },
- {
- Lead => "george",
- Wife => "jane",
- Son => "elroy",
- },
- {
- Lead => "homer",
- Wife => "marge",
- Son => "bart",
- }
- );
-
-=head2 Generation of a ARRAY OF HASHES
-
- # reading from file
- # format: LEAD=fred FRIEND=barney
- while ( <> ) {
- $rec = {};
- for $field ( split ) {
- ($key, $value) = split /=/, $field;
- $rec->{$key} = $value;
- }
- push @AoH, $rec;
- }
-
-
- # reading from file
- # format: LEAD=fred FRIEND=barney
- # no temp
- while ( <> ) {
- push @AoH, { split /[\s+=]/ };
- }
-
- # calling a function that returns a key/value pair list, like
- # "lead","fred","daughter","pebbles"
- while ( %fields = getnextpairset() ) {
- push @AoH, { %fields };
- }
-
- # likewise, but using no temp vars
- while (<>) {
- push @AoH, { parsepairs($_) };
- }
-
- # add key/value to an element
- $AoH[0]{pet} = "dino";
- $AoH[2]{pet} = "santa's little helper";
-
-=head2 Access and Printing of a ARRAY OF HASHES
-
- # one element
- $AoH[0]{lead} = "fred";
-
- # another element
- $AoH[1]{lead} =~ s/(\w)/\u$1/;
-
- # print the whole thing with refs
- for $href ( @AoH ) {
- print "{ ";
- for $role ( keys %$href ) {
- print "$role=$href->{$role} ";
- }
- print "}\n";
- }
-
- # print the whole thing with indices
- for $i ( 0 .. $#AoH ) {
- print "$i is { ";
- for $role ( keys %{ $AoH[$i] } ) {
- print "$role=$AoH[$i]{$role} ";
- }
- print "}\n";
- }
-
- # print the whole thing one at a time
- for $i ( 0 .. $#AoH ) {
- for $role ( keys %{ $AoH[$i] } ) {
- print "elt $i $role is $AoH[$i]{$role}\n";
- }
- }
-
-=head1 HASHES OF HASHES
-
-=head2 Declaration of a HASH OF HASHES
-
- %HoH = (
- flintstones => {
- lead => "fred",
- pal => "barney",
- },
- jetsons => {
- lead => "george",
- wife => "jane",
- "his boy" => "elroy",
- },
- simpsons => {
- lead => "homer",
- wife => "marge",
- kid => "bart",
- },
- );
-
-=head2 Generation of a HASH OF HASHES
-
- # reading from file
- # flintstones: lead=fred pal=barney wife=wilma pet=dino
- while ( <> ) {
- next unless s/^(.*?):\s*//;
- $who = $1;
- for $field ( split ) {
- ($key, $value) = split /=/, $field;
- $HoH{$who}{$key} = $value;
- }
-
-
- # reading from file; more temps
- while ( <> ) {
- next unless s/^(.*?):\s*//;
- $who = $1;
- $rec = {};
- $HoH{$who} = $rec;
- for $field ( split ) {
- ($key, $value) = split /=/, $field;
- $rec->{$key} = $value;
- }
- }
-
- # calling a function that returns a key,value hash
- for $group ( "simpsons", "jetsons", "flintstones" ) {
- $HoH{$group} = { get_family($group) };
- }
-
- # likewise, but using temps
- for $group ( "simpsons", "jetsons", "flintstones" ) {
- %members = get_family($group);
- $HoH{$group} = { %members };
- }
-
- # append new members to an existing family
- %new_folks = (
- wife => "wilma",
- pet => "dino",
- );
-
- for $what (keys %new_folks) {
- $HoH{flintstones}{$what} = $new_folks{$what};
- }
-
-=head2 Access and Printing of a HASH OF HASHES
-
- # one element
- $HoH{flintstones}{wife} = "wilma";
-
- # another element
- $HoH{simpsons}{lead} =~ s/(\w)/\u$1/;
-
- # print the whole thing
- foreach $family ( keys %HoH ) {
- print "$family: { ";
- for $role ( keys %{ $HoH{$family} } ) {
- print "$role=$HoH{$family}{$role} ";
- }
- print "}\n";
- }
-
- # print the whole thing somewhat sorted
- foreach $family ( sort keys %HoH ) {
- print "$family: { ";
- for $role ( sort keys %{ $HoH{$family} } ) {
- print "$role=$HoH{$family}{$role} ";
- }
- print "}\n";
- }
-
-
- # print the whole thing sorted by number of members
- foreach $family ( sort { keys %{$HoH{$b}} <=> keys %{$HoH{$a}} } keys %HoH ) {
- print "$family: { ";
- for $role ( sort keys %{ $HoH{$family} } ) {
- print "$role=$HoH{$family}{$role} ";
- }
- print "}\n";
- }
-
- # establish a sort order (rank) for each role
- $i = 0;
- for ( qw(lead wife son daughter pal pet) ) { $rank{$_} = ++$i }
-
- # now print the whole thing sorted by number of members
- foreach $family ( sort { keys %{ $HoH{$b} } <=> keys %{ $HoH{$a} } } keys %HoH ) {
- print "$family: { ";
- # and print these according to rank order
- for $role ( sort { $rank{$a} <=> $rank{$b} } keys %{ $HoH{$family} } ) {
- print "$role=$HoH{$family}{$role} ";
- }
- print "}\n";
- }
-
-
-=head1 MORE ELABORATE RECORDS
-
-=head2 Declaration of MORE ELABORATE RECORDS
-
-Here's a sample showing how to create and use a record whose fields are of
-many different sorts:
-
- $rec = {
- TEXT => $string,
- SEQUENCE => [ @old_values ],
- LOOKUP => { %some_table },
- THATCODE => \&some_function,
- THISCODE => sub { $_[0] ** $_[1] },
- HANDLE => \*STDOUT,
- };
-
- print $rec->{TEXT};
-
- print $rec->{SEQUENCE}[0];
- $last = pop @ { $rec->{SEQUENCE} };
-
- print $rec->{LOOKUP}{"key"};
- ($first_k, $first_v) = each %{ $rec->{LOOKUP} };
-
- $answer = $rec->{THATCODE}->($arg);
- $answer = $rec->{THISCODE}->($arg1, $arg2);
-
- # careful of extra block braces on fh ref
- print { $rec->{HANDLE} } "a string\n";
-
- use FileHandle;
- $rec->{HANDLE}->autoflush(1);
- $rec->{HANDLE}->print(" a string\n");
-
-=head2 Declaration of a HASH OF COMPLEX RECORDS
-
- %TV = (
- flintstones => {
- series => "flintstones",
- nights => [ qw(monday thursday friday) ],
- members => [
- { name => "fred", role => "lead", age => 36, },
- { name => "wilma", role => "wife", age => 31, },
- { name => "pebbles", role => "kid", age => 4, },
- ],
- },
-
- jetsons => {
- series => "jetsons",
- nights => [ qw(wednesday saturday) ],
- members => [
- { name => "george", role => "lead", age => 41, },
- { name => "jane", role => "wife", age => 39, },
- { name => "elroy", role => "kid", age => 9, },
- ],
- },
-
- simpsons => {
- series => "simpsons",
- nights => [ qw(monday) ],
- members => [
- { name => "homer", role => "lead", age => 34, },
- { name => "marge", role => "wife", age => 37, },
- { name => "bart", role => "kid", age => 11, },
- ],
- },
- );
-
-=head2 Generation of a HASH OF COMPLEX RECORDS
-
- # reading from file
- # this is most easily done by having the file itself be
- # in the raw data format as shown above. perl is happy
- # to parse complex data structures if declared as data, so
- # sometimes it's easiest to do that
-
- # here's a piece by piece build up
- $rec = {};
- $rec->{series} = "flintstones";
- $rec->{nights} = [ find_days() ];
-
- @members = ();
- # assume this file in field=value syntax
- while (<>) {
- %fields = split /[\s=]+/;
- push @members, { %fields };
- }
- $rec->{members} = [ @members ];
-
- # now remember the whole thing
- $TV{ $rec->{series} } = $rec;
-
- ###########################################################
- # now, you might want to make interesting extra fields that
- # include pointers back into the same data structure so if
- # change one piece, it changes everywhere, like for example
- # if you wanted a {kids} field that was a reference
- # to an array of the kids' records without having duplicate
- # records and thus update problems.
- ###########################################################
- foreach $family (keys %TV) {
- $rec = $TV{$family}; # temp pointer
- @kids = ();
- for $person ( @{ $rec->{members} } ) {
- if ($person->{role} =~ /kid|son|daughter/) {
- push @kids, $person;
- }
- }
- # REMEMBER: $rec and $TV{$family} point to same data!!
- $rec->{kids} = [ @kids ];
- }
-
- # you copied the array, but the array itself contains pointers
- # to uncopied objects. this means that if you make bart get
- # older via
-
- $TV{simpsons}{kids}[0]{age}++;
-
- # then this would also change in
- print $TV{simpsons}{members}[2]{age};
-
- # because $TV{simpsons}{kids}[0] and $TV{simpsons}{members}[2]
- # both point to the same underlying anonymous hash table
-
- # print the whole thing
- foreach $family ( keys %TV ) {
- print "the $family";
- print " is on during @{ $TV{$family}{nights} }\n";
- print "its members are:\n";
- for $who ( @{ $TV{$family}{members} } ) {
- print " $who->{name} ($who->{role}), age $who->{age}\n";
- }
- print "it turns out that $TV{$family}{lead} has ";
- print scalar ( @{ $TV{$family}{kids} } ), " kids named ";
- print join (", ", map { $_->{name} } @{ $TV{$family}{kids} } );
- print "\n";
- }
-
-=head1 Database Ties
-
-You cannot easily tie a multilevel data structure (such as a hash of
-hashes) to a dbm file. The first problem is that all but GDBM and
-Berkeley DB have size limitations, but beyond that, you also have problems
-with how references are to be represented on disk. One experimental
-module that does partially attempt to address this need is the MLDBM
-module. Check your nearest CPAN site as described in L<perlmodlib> for
-source code to MLDBM.
-
-=head1 SEE ALSO
-
-perlref(1), perllol(1), perldata(1), perlobj(1)
-
-=head1 AUTHOR
-
-Tom Christiansen <F<tchrist@perl.com>>
-
-Last update:
-Wed Oct 23 04:57:50 MET DST 1996
diff --git a/contrib/perl5/pod/perlebcdic.pod b/contrib/perl5/pod/perlebcdic.pod
deleted file mode 100644
index 12ea2f3..0000000
--- a/contrib/perl5/pod/perlebcdic.pod
+++ /dev/null
@@ -1,1235 +0,0 @@
-=head1 NAME
-
-perlebcdic - Considerations for running Perl on EBCDIC platforms
-
-=head1 DESCRIPTION
-
-An exploration of some of the issues facing Perl programmers
-on EBCDIC based computers. We do not cover localization,
-internationalization, or multi byte character set issues (yet).
-
-Portions that are still incomplete are marked with XXX.
-
-=head1 COMMON CHARACTER CODE SETS
-
-=head2 ASCII
-
-The American Standard Code for Information Interchange is a set of
-integers running from 0 to 127 (decimal) that imply character
-interpretation by the display and other system(s) of computers.
-The range 0..127 can be covered by setting the bits in a 7-bit binary
-digit, hence the set is sometimes referred to as a "7-bit ASCII".
-ASCII was described by the American National Standards Institute
-document ANSI X3.4-1986. It was also described by ISO 646:1991
-(with localization for currency symbols). The full ASCII set is
-given in the table below as the first 128 elements. Languages that
-can be written adequately with the characters in ASCII include
-English, Hawaiian, Indonesian, Swahili and some Native American
-languages.
-
-There are many character sets that extend the range of integers
-from 0..2**7-1 up to 2**8-1, or 8 bit bytes (octets if you prefer).
-One common one is the ISO 8859-1 character set.
-
-=head2 ISO 8859
-
-The ISO 8859-$n are a collection of character code sets from the
-International Organization for Standardization (ISO) each of which
-adds characters to the ASCII set that are typically found in European
-languages many of which are based on the Roman, or Latin, alphabet.
-
-=head2 Latin 1 (ISO 8859-1)
-
-A particular 8-bit extension to ASCII that includes grave and acute
-accented Latin characters. Languages that can employ ISO 8859-1
-include all the languages covered by ASCII as well as Afrikaans,
-Albanian, Basque, Catalan, Danish, Faroese, Finnish, Norwegian,
-Portugese, Spanish, and Swedish. Dutch is covered albeit without
-the ij ligature. French is covered too but without the oe ligature.
-German can use ISO 8859-1 but must do so without German-style
-quotation marks. This set is based on Western European extensions
-to ASCII and is commonly encountered in world wide web work.
-In IBM character code set identification terminology ISO 8859-1 is
-also known as CCSID 819 (or sometimes 0819 or even 00819).
-
-=head2 EBCDIC
-
-The Extended Binary Coded Decimal Interchange Code refers to a
-large collection of slightly different single and multi byte
-coded character sets that are different from ASCII or ISO 8859-1
-and typically run on host computers. The EBCDIC encodings derive
-from 8 bit byte extensions of Hollerith punched card encodings.
-The layout on the cards was such that high bits were set for the
-upper and lower case alphabet characters [a-z] and [A-Z], but there
-were gaps within each latin alphabet range.
-
-Some IBM EBCDIC character sets may be known by character code set
-identification numbers (CCSID numbers) or code page numbers. Leading
-zero digits in CCSID numbers within this document are insignificant.
-E.g. CCSID 0037 may be referred to as 37 in places.
-
-=head2 13 variant characters
-
-Among IBM EBCDIC character code sets there are 13 characters that
-are often mapped to different integer values. Those characters
-are known as the 13 "variant" characters and are:
-
- \ [ ] { } ^ ~ ! # | $ @ `
-
-=head2 0037
-
-Character code set ID 0037 is a mapping of the ASCII plus Latin-1
-characters (i.e. ISO 8859-1) to an EBCDIC set. 0037 is used
-in North American English locales on the OS/400 operating system
-that runs on AS/400 computers. CCSID 37 differs from ISO 8859-1
-in 237 places, in other words they agree on only 19 code point values.
-
-=head2 1047
-
-Character code set ID 1047 is also a mapping of the ASCII plus
-Latin-1 characters (i.e. ISO 8859-1) to an EBCDIC set. 1047 is
-used under Unix System Services for OS/390, and OpenEdition for VM/ESA.
-CCSID 1047 differs from CCSID 0037 in eight places.
-
-=head2 POSIX-BC
-
-The EBCDIC code page in use on Siemens' BS2000 system is distinct from
-1047 and 0037. It is identified below as the POSIX-BC set.
-
-=head1 SINGLE OCTET TABLES
-
-The following tables list the ASCII and Latin 1 ordered sets including
-the subsets: C0 controls (0..31), ASCII graphics (32..7e), delete (7f),
-C1 controls (80..9f), and Latin-1 (a.k.a. ISO 8859-1) (a0..ff). In the
-table non-printing control character names as well as the Latin 1
-extensions to ASCII have been labelled with character names roughly
-corresponding to I<The Unicode Standard, Version 2.0> albeit with
-substitutions such as s/LATIN// and s/VULGAR// in all cases,
-s/CAPITAL LETTER// in some cases, and s/SMALL LETTER ([A-Z])/\l$1/
-in some other cases (the C<charnames> pragma names unfortunately do
-not list explicit names for the C0 or C1 control characters). The
-"names" of the C1 control set (128..159 in ISO 8859-1) listed here are
-somewhat arbitrary. The differences between the 0037 and 1047 sets are
-flagged with ***. The differences between the 1047 and POSIX-BC sets
-are flagged with ###. All ord() numbers listed are decimal. If you
-would rather see this table listing octal values then run the table
-(that is, the pod version of this document since this recipe may not
-work with a pod2_other_format translation) through:
-
-=over 4
-
-=item recipe 0
-
-=back
-
- perl -ne 'if(/(.{33})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/)' \
- -e '{printf("%s%-9o%-9o%-9o%-9o\n",$1,$2,$3,$4,$5)}' perlebcdic.pod
-
-If you would rather see this table listing hexadecimal values then
-run the table through:
-
-=over 4
-
-=item recipe 1
-
-=back
-
- perl -ne 'if(/(.{33})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/)' \
- -e '{printf("%s%-9X%-9X%-9X%-9X\n",$1,$2,$3,$4,$5)}' perlebcdic.pod
-
-
- 8859-1
- chr 0819 0037 1047 POSIX-BC
- ----------------------------------------------------------------
- <NULL> 0 0 0 0
- <START OF HEADING> 1 1 1 1
- <START OF TEXT> 2 2 2 2
- <END OF TEXT> 3 3 3 3
- <END OF TRANSMISSION> 4 55 55 55
- <ENQUIRY> 5 45 45 45
- <ACKNOWLEDGE> 6 46 46 46
- <BELL> 7 47 47 47
- <BACKSPACE> 8 22 22 22
- <HORIZONTAL TABULATION> 9 5 5 5
- <LINE FEED> 10 37 21 21 ***
- <VERTICAL TABULATION> 11 11 11 11
- <FORM FEED> 12 12 12 12
- <CARRIAGE RETURN> 13 13 13 13
- <SHIFT OUT> 14 14 14 14
- <SHIFT IN> 15 15 15 15
- <DATA LINK ESCAPE> 16 16 16 16
- <DEVICE CONTROL ONE> 17 17 17 17
- <DEVICE CONTROL TWO> 18 18 18 18
- <DEVICE CONTROL THREE> 19 19 19 19
- <DEVICE CONTROL FOUR> 20 60 60 60
- <NEGATIVE ACKNOWLEDGE> 21 61 61 61
- <SYNCHRONOUS IDLE> 22 50 50 50
- <END OF TRANSMISSION BLOCK> 23 38 38 38
- <CANCEL> 24 24 24 24
- <END OF MEDIUM> 25 25 25 25
- <SUBSTITUTE> 26 63 63 63
- <ESCAPE> 27 39 39 39
- <FILE SEPARATOR> 28 28 28 28
- <GROUP SEPARATOR> 29 29 29 29
- <RECORD SEPARATOR> 30 30 30 30
- <UNIT SEPARATOR> 31 31 31 31
- <SPACE> 32 64 64 64
- ! 33 90 90 90
- " 34 127 127 127
- # 35 123 123 123
- $ 36 91 91 91
- % 37 108 108 108
- & 38 80 80 80
- ' 39 125 125 125
- ( 40 77 77 77
- ) 41 93 93 93
- * 42 92 92 92
- + 43 78 78 78
- , 44 107 107 107
- - 45 96 96 96
- . 46 75 75 75
- / 47 97 97 97
- 0 48 240 240 240
- 1 49 241 241 241
- 2 50 242 242 242
- 3 51 243 243 243
- 4 52 244 244 244
- 5 53 245 245 245
- 6 54 246 246 246
- 7 55 247 247 247
- 8 56 248 248 248
- 9 57 249 249 249
- : 58 122 122 122
- ; 59 94 94 94
- < 60 76 76 76
- = 61 126 126 126
- > 62 110 110 110
- ? 63 111 111 111
- @ 64 124 124 124
- A 65 193 193 193
- B 66 194 194 194
- C 67 195 195 195
- D 68 196 196 196
- E 69 197 197 197
- F 70 198 198 198
- G 71 199 199 199
- H 72 200 200 200
- I 73 201 201 201
- J 74 209 209 209
- K 75 210 210 210
- L 76 211 211 211
- M 77 212 212 212
- N 78 213 213 213
- O 79 214 214 214
- P 80 215 215 215
- Q 81 216 216 216
- R 82 217 217 217
- S 83 226 226 226
- T 84 227 227 227
- U 85 228 228 228
- V 86 229 229 229
- W 87 230 230 230
- X 88 231 231 231
- Y 89 232 232 232
- Z 90 233 233 233
- [ 91 186 173 187 *** ###
- \ 92 224 224 188 ###
- ] 93 187 189 189 ***
- ^ 94 176 95 106 *** ###
- _ 95 109 109 109
- ` 96 121 121 74 ###
- a 97 129 129 129
- b 98 130 130 130
- c 99 131 131 131
- d 100 132 132 132
- e 101 133 133 133
- f 102 134 134 134
- g 103 135 135 135
- h 104 136 136 136
- i 105 137 137 137
- j 106 145 145 145
- k 107 146 146 146
- l 108 147 147 147
- m 109 148 148 148
- n 110 149 149 149
- o 111 150 150 150
- p 112 151 151 151
- q 113 152 152 152
- r 114 153 153 153
- s 115 162 162 162
- t 116 163 163 163
- u 117 164 164 164
- v 118 165 165 165
- w 119 166 166 166
- x 120 167 167 167
- y 121 168 168 168
- z 122 169 169 169
- { 123 192 192 251 ###
- | 124 79 79 79
- } 125 208 208 253 ###
- ~ 126 161 161 255 ###
- <DELETE> 127 7 7 7
- <C1 0> 128 32 32 32
- <C1 1> 129 33 33 33
- <C1 2> 130 34 34 34
- <C1 3> 131 35 35 35
- <C1 4> 132 36 36 36
- <C1 5> 133 21 37 37 ***
- <C1 6> 134 6 6 6
- <C1 7> 135 23 23 23
- <C1 8> 136 40 40 40
- <C1 9> 137 41 41 41
- <C1 10> 138 42 42 42
- <C1 11> 139 43 43 43
- <C1 12> 140 44 44 44
- <C1 13> 141 9 9 9
- <C1 14> 142 10 10 10
- <C1 15> 143 27 27 27
- <C1 16> 144 48 48 48
- <C1 17> 145 49 49 49
- <C1 18> 146 26 26 26
- <C1 19> 147 51 51 51
- <C1 20> 148 52 52 52
- <C1 21> 149 53 53 53
- <C1 22> 150 54 54 54
- <C1 23> 151 8 8 8
- <C1 24> 152 56 56 56
- <C1 25> 153 57 57 57
- <C1 26> 154 58 58 58
- <C1 27> 155 59 59 59
- <C1 28> 156 4 4 4
- <C1 29> 157 20 20 20
- <C1 30> 158 62 62 62
- <C1 31> 159 255 255 95 ###
- <NON-BREAKING SPACE> 160 65 65 65
- <INVERTED EXCLAMATION MARK> 161 170 170 170
- <CENT SIGN> 162 74 74 176 ###
- <POUND SIGN> 163 177 177 177
- <CURRENCY SIGN> 164 159 159 159
- <YEN SIGN> 165 178 178 178
- <BROKEN BAR> 166 106 106 208 ###
- <SECTION SIGN> 167 181 181 181
- <DIAERESIS> 168 189 187 121 *** ###
- <COPYRIGHT SIGN> 169 180 180 180
- <FEMININE ORDINAL INDICATOR> 170 154 154 154
- <LEFT POINTING GUILLEMET> 171 138 138 138
- <NOT SIGN> 172 95 176 186 *** ###
- <SOFT HYPHEN> 173 202 202 202
- <REGISTERED TRADE MARK SIGN> 174 175 175 175
- <MACRON> 175 188 188 161 ###
- <DEGREE SIGN> 176 144 144 144
- <PLUS-OR-MINUS SIGN> 177 143 143 143
- <SUPERSCRIPT TWO> 178 234 234 234
- <SUPERSCRIPT THREE> 179 250 250 250
- <ACUTE ACCENT> 180 190 190 190
- <MICRO SIGN> 181 160 160 160
- <PARAGRAPH SIGN> 182 182 182 182
- <MIDDLE DOT> 183 179 179 179
- <CEDILLA> 184 157 157 157
- <SUPERSCRIPT ONE> 185 218 218 218
- <MASC. ORDINAL INDICATOR> 186 155 155 155
- <RIGHT POINTING GUILLEMET> 187 139 139 139
- <FRACTION ONE QUARTER> 188 183 183 183
- <FRACTION ONE HALF> 189 184 184 184
- <FRACTION THREE QUARTERS> 190 185 185 185
- <INVERTED QUESTION MARK> 191 171 171 171
- <A WITH GRAVE> 192 100 100 100
- <A WITH ACUTE> 193 101 101 101
- <A WITH CIRCUMFLEX> 194 98 98 98
- <A WITH TILDE> 195 102 102 102
- <A WITH DIAERESIS> 196 99 99 99
- <A WITH RING ABOVE> 197 103 103 103
- <CAPITAL LIGATURE AE> 198 158 158 158
- <C WITH CEDILLA> 199 104 104 104
- <E WITH GRAVE> 200 116 116 116
- <E WITH ACUTE> 201 113 113 113
- <E WITH CIRCUMFLEX> 202 114 114 114
- <E WITH DIAERESIS> 203 115 115 115
- <I WITH GRAVE> 204 120 120 120
- <I WITH ACUTE> 205 117 117 117
- <I WITH CIRCUMFLEX> 206 118 118 118
- <I WITH DIAERESIS> 207 119 119 119
- <CAPITAL LETTER ETH> 208 172 172 172
- <N WITH TILDE> 209 105 105 105
- <O WITH GRAVE> 210 237 237 237
- <O WITH ACUTE> 211 238 238 238
- <O WITH CIRCUMFLEX> 212 235 235 235
- <O WITH TILDE> 213 239 239 239
- <O WITH DIAERESIS> 214 236 236 236
- <MULTIPLICATION SIGN> 215 191 191 191
- <O WITH STROKE> 216 128 128 128
- <U WITH GRAVE> 217 253 253 224 ###
- <U WITH ACUTE> 218 254 254 254
- <U WITH CIRCUMFLEX> 219 251 251 221 ###
- <U WITH DIAERESIS> 220 252 252 252
- <Y WITH ACUTE> 221 173 186 173 *** ###
- <CAPITAL LETTER THORN> 222 174 174 174
- <SMALL LETTER SHARP S> 223 89 89 89
- <a WITH GRAVE> 224 68 68 68
- <a WITH ACUTE> 225 69 69 69
- <a WITH CIRCUMFLEX> 226 66 66 66
- <a WITH TILDE> 227 70 70 70
- <a WITH DIAERESIS> 228 67 67 67
- <a WITH RING ABOVE> 229 71 71 71
- <SMALL LIGATURE ae> 230 156 156 156
- <c WITH CEDILLA> 231 72 72 72
- <e WITH GRAVE> 232 84 84 84
- <e WITH ACUTE> 233 81 81 81
- <e WITH CIRCUMFLEX> 234 82 82 82
- <e WITH DIAERESIS> 235 83 83 83
- <i WITH GRAVE> 236 88 88 88
- <i WITH ACUTE> 237 85 85 85
- <i WITH CIRCUMFLEX> 238 86 86 86
- <i WITH DIAERESIS> 239 87 87 87
- <SMALL LETTER eth> 240 140 140 140
- <n WITH TILDE> 241 73 73 73
- <o WITH GRAVE> 242 205 205 205
- <o WITH ACUTE> 243 206 206 206
- <o WITH CIRCUMFLEX> 244 203 203 203
- <o WITH TILDE> 245 207 207 207
- <o WITH DIAERESIS> 246 204 204 204
- <DIVISION SIGN> 247 225 225 225
- <o WITH STROKE> 248 112 112 112
- <u WITH GRAVE> 249 221 221 192 ###
- <u WITH ACUTE> 250 222 222 222
- <u WITH CIRCUMFLEX> 251 219 219 219
- <u WITH DIAERESIS> 252 220 220 220
- <y WITH ACUTE> 253 141 141 141
- <SMALL LETTER thorn> 254 142 142 142
- <y WITH DIAERESIS> 255 223 223 223
-
-If you would rather see the above table in CCSID 0037 order rather than
-ASCII + Latin-1 order then run the table through:
-
-=over 4
-
-=item recipe 2
-
-=back
-
- perl -ne 'if(/.{33}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
- -e '{push(@l,$_)}' \
- -e 'END{print map{$_->[0]}' \
- -e ' sort{$a->[1] <=> $b->[1]}' \
- -e ' map{[$_,substr($_,42,3)]}@l;}' perlebcdic.pod
-
-If you would rather see it in CCSID 1047 order then change the digit
-42 in the last line to 51, like this:
-
-=over 4
-
-=item recipe 3
-
-=back
-
- perl -ne 'if(/.{33}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
- -e '{push(@l,$_)}' \
- -e 'END{print map{$_->[0]}' \
- -e ' sort{$a->[1] <=> $b->[1]}' \
- -e ' map{[$_,substr($_,51,3)]}@l;}' perlebcdic.pod
-
-If you would rather see it in POSIX-BC order then change the digit
-51 in the last line to 60, like this:
-
-=over 4
-
-=item recipe 4
-
-=back
-
- perl -ne 'if(/.{33}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
- -e '{push(@l,$_)}' \
- -e 'END{print map{$_->[0]}' \
- -e ' sort{$a->[1] <=> $b->[1]}' \
- -e ' map{[$_,substr($_,60,3)]}@l;}' perlebcdic.pod
-
-
-=head1 IDENTIFYING CHARACTER CODE SETS
-
-To determine the character set you are running under from perl one
-could use the return value of ord() or chr() to test one or more
-character values. For example:
-
- $is_ascii = "A" eq chr(65);
- $is_ebcdic = "A" eq chr(193);
-
-Also, "\t" is a C<HORIZONTAL TABULATION> character so that:
-
- $is_ascii = ord("\t") == 9;
- $is_ebcdic = ord("\t") == 5;
-
-To distinguish EBCDIC code pages try looking at one or more of
-the characters that differ between them. For example:
-
- $is_ebcdic_37 = "\n" eq chr(37);
- $is_ebcdic_1047 = "\n" eq chr(21);
-
-Or better still choose a character that is uniquely encoded in any
-of the code sets, e.g.:
-
- $is_ascii = ord('[') == 91;
- $is_ebcdic_37 = ord('[') == 186;
- $is_ebcdic_1047 = ord('[') == 173;
- $is_ebcdic_POSIX_BC = ord('[') == 187;
-
-However, it would be unwise to write tests such as:
-
- $is_ascii = "\r" ne chr(13); # WRONG
- $is_ascii = "\n" ne chr(10); # ILL ADVISED
-
-Obviously the first of these will fail to distinguish most ASCII machines
-from either a CCSID 0037, a 1047, or a POSIX-BC EBCDIC machine since "\r" eq
-chr(13) under all of those coded character sets. But note too that
-because "\n" is chr(13) and "\r" is chr(10) on the MacIntosh (which is an
-ASCII machine) the second C<$is_ascii> test will lead to trouble there.
-
-To determine whether or not perl was built under an EBCDIC
-code page you can use the Config module like so:
-
- use Config;
- $is_ebcdic = $Config{'ebcdic'} eq 'define';
-
-=head1 CONVERSIONS
-
-=head2 tr///
-
-In order to convert a string of characters from one character set to
-another a simple list of numbers, such as in the right columns in the
-above table, along with perl's tr/// operator is all that is needed.
-The data in the table are in ASCII order hence the EBCDIC columns
-provide easy to use ASCII to EBCDIC operations that are also easily
-reversed.
-
-For example, to convert ASCII to code page 037 take the output of the second
-column from the output of recipe 0 (modified to add \\ characters) and use
-it in tr/// like so:
-
- $cp_037 =
- '\000\001\002\003\234\011\206\177\227\215\216\013\014\015\016\017' .
- '\020\021\022\023\235\205\010\207\030\031\222\217\034\035\036\037' .
- '\200\201\202\203\204\012\027\033\210\211\212\213\214\005\006\007' .
- '\220\221\026\223\224\225\226\004\230\231\232\233\024\025\236\032' .
- '\040\240\342\344\340\341\343\345\347\361\242\056\074\050\053\174' .
- '\046\351\352\353\350\355\356\357\354\337\041\044\052\051\073\254' .
- '\055\057\302\304\300\301\303\305\307\321\246\054\045\137\076\077' .
- '\370\311\312\313\310\315\316\317\314\140\072\043\100\047\075\042' .
- '\330\141\142\143\144\145\146\147\150\151\253\273\360\375\376\261' .
- '\260\152\153\154\155\156\157\160\161\162\252\272\346\270\306\244' .
- '\265\176\163\164\165\166\167\170\171\172\241\277\320\335\336\256' .
- '\136\243\245\267\251\247\266\274\275\276\133\135\257\250\264\327' .
- '\173\101\102\103\104\105\106\107\110\111\255\364\366\362\363\365' .
- '\175\112\113\114\115\116\117\120\121\122\271\373\374\371\372\377' .
- '\134\367\123\124\125\126\127\130\131\132\262\324\326\322\323\325' .
- '\060\061\062\063\064\065\066\067\070\071\263\333\334\331\332\237' ;
-
- my $ebcdic_string = $ascii_string;
- eval '$ebcdic_string =~ tr/\000-\377/' . $cp_037 . '/';
-
-To convert from EBCDIC 037 to ASCII just reverse the order of the tr///
-arguments like so:
-
- my $ascii_string = $ebcdic_string;
- eval '$ascii_string = tr/' . $cp_037 . '/\000-\377/';
-
-Similarly one could take the output of the third column from recipe 0 to
-obtain a C<$cp_1047> table. The fourth column of the output from recipe
-0 could provide a C<$cp_posix_bc> table suitable for transcoding as well.
-
-=head2 iconv
-
-XPG operability often implies the presence of an I<iconv> utility
-available from the shell or from the C library. Consult your system's
-documentation for information on iconv.
-
-On OS/390 see the iconv(1) man page. One way to invoke the iconv
-shell utility from within perl would be to:
-
- # OS/390 example
- $ascii_data = `echo '$ebcdic_data'| iconv -f IBM-1047 -t ISO8859-1`
-
-or the inverse map:
-
- # OS/390 example
- $ebcdic_data = `echo '$ascii_data'| iconv -f ISO8859-1 -t IBM-1047`
-
-For other perl based conversion options see the Convert::* modules on CPAN.
-
-=head2 C RTL
-
-The OS/390 C run time library provides _atoe() and _etoa() functions.
-
-=head1 OPERATOR DIFFERENCES
-
-The C<..> range operator treats certain character ranges with
-care on EBCDIC machines. For example the following array
-will have twenty six elements on either an EBCDIC machine
-or an ASCII machine:
-
- @alphabet = ('A'..'Z'); # $#alphabet == 25
-
-The bitwise operators such as & ^ | may return different results
-when operating on string or character data in a perl program running
-on an EBCDIC machine than when run on an ASCII machine. Here is
-an example adapted from the one in L<perlop>:
-
- # EBCDIC-based examples
- print "j p \n" ^ " a h"; # prints "JAPH\n"
- print "JA" | " ph\n"; # prints "japh\n"
- print "JAPH\nJunk" & "\277\277\277\277\277"; # prints "japh\n";
- print 'p N$' ^ " E<H\n"; # prints "Perl\n";
-
-An interesting property of the 32 C0 control characters
-in the ASCII table is that they can "literally" be constructed
-as control characters in perl, e.g. C<(chr(0) eq "\c@")>
-C<(chr(1) eq "\cA")>, and so on. Perl on EBCDIC machines has been
-ported to take "\c@" to chr(0) and "\cA" to chr(1) as well, but the
-thirty three characters that result depend on which code page you are
-using. The table below uses the character names from the previous table
-but with substitutions such as s/START OF/S.O./; s/END OF /E.O./;
-s/TRANSMISSION/TRANS./; s/TABULATION/TAB./; s/VERTICAL/VERT./;
-s/HORIZONTAL/HORIZ./; s/DEVICE CONTROL/D.C./; s/SEPARATOR/SEP./;
-s/NEGATIVE ACKNOWLEDGE/NEG. ACK./;. The POSIX-BC and 1047 sets are
-identical throughout this range and differ from the 0037 set at only
-one spot (21 decimal). Note that the C<LINE FEED> character
-may be generated by "\cJ" on ASCII machines but by "\cU" on 1047 or POSIX-BC
-machines and cannot be generated as a C<"\c.letter."> control character on
-0037 machines. Note also that "\c\\" maps to two characters
-not one.
-
- chr ord 8859-1 0037 1047 && POSIX-BC
- ------------------------------------------------------------------------
- "\c?" 127 <DELETE> " " ***><
- "\c@" 0 <NULL> <NULL> <NULL> ***><
- "\cA" 1 <S.O. HEADING> <S.O. HEADING> <S.O. HEADING>
- "\cB" 2 <S.O. TEXT> <S.O. TEXT> <S.O. TEXT>
- "\cC" 3 <E.O. TEXT> <E.O. TEXT> <E.O. TEXT>
- "\cD" 4 <E.O. TRANS.> <C1 28> <C1 28>
- "\cE" 5 <ENQUIRY> <HORIZ. TAB.> <HORIZ. TAB.>
- "\cF" 6 <ACKNOWLEDGE> <C1 6> <C1 6>
- "\cG" 7 <BELL> <DELETE> <DELETE>
- "\cH" 8 <BACKSPACE> <C1 23> <C1 23>
- "\cI" 9 <HORIZ. TAB.> <C1 13> <C1 13>
- "\cJ" 10 <LINE FEED> <C1 14> <C1 14>
- "\cK" 11 <VERT. TAB.> <VERT. TAB.> <VERT. TAB.>
- "\cL" 12 <FORM FEED> <FORM FEED> <FORM FEED>
- "\cM" 13 <CARRIAGE RETURN> <CARRIAGE RETURN> <CARRIAGE RETURN>
- "\cN" 14 <SHIFT OUT> <SHIFT OUT> <SHIFT OUT>
- "\cO" 15 <SHIFT IN> <SHIFT IN> <SHIFT IN>
- "\cP" 16 <DATA LINK ESCAPE> <DATA LINK ESCAPE> <DATA LINK ESCAPE>
- "\cQ" 17 <D.C. ONE> <D.C. ONE> <D.C. ONE>
- "\cR" 18 <D.C. TWO> <D.C. TWO> <D.C. TWO>
- "\cS" 19 <D.C. THREE> <D.C. THREE> <D.C. THREE>
- "\cT" 20 <D.C. FOUR> <C1 29> <C1 29>
- "\cU" 21 <NEG. ACK.> <C1 5> <LINE FEED> ***
- "\cV" 22 <SYNCHRONOUS IDLE> <BACKSPACE> <BACKSPACE>
- "\cW" 23 <E.O. TRANS. BLOCK> <C1 7> <C1 7>
- "\cX" 24 <CANCEL> <CANCEL> <CANCEL>
- "\cY" 25 <E.O. MEDIUM> <E.O. MEDIUM> <E.O. MEDIUM>
- "\cZ" 26 <SUBSTITUTE> <C1 18> <C1 18>
- "\c[" 27 <ESCAPE> <C1 15> <C1 15>
- "\c\\" 28 <FILE SEP.>\ <FILE SEP.>\ <FILE SEP.>\
- "\c]" 29 <GROUP SEP.> <GROUP SEP.> <GROUP SEP.>
- "\c^" 30 <RECORD SEP.> <RECORD SEP.> <RECORD SEP.> ***><
- "\c_" 31 <UNIT SEP.> <UNIT SEP.> <UNIT SEP.> ***><
-
-
-=head1 FUNCTION DIFFERENCES
-
-=over 8
-
-=item chr()
-
-chr() must be given an EBCDIC code number argument to yield a desired
-character return value on an EBCDIC machine. For example:
-
- $CAPITAL_LETTER_A = chr(193);
-
-=item ord()
-
-ord() will return EBCDIC code number values on an EBCDIC machine.
-For example:
-
- $the_number_193 = ord("A");
-
-=item pack()
-
-The c and C templates for pack() are dependent upon character set
-encoding. Examples of usage on EBCDIC include:
-
- $foo = pack("CCCC",193,194,195,196);
- # $foo eq "ABCD"
- $foo = pack("C4",193,194,195,196);
- # same thing
-
- $foo = pack("ccxxcc",193,194,195,196);
- # $foo eq "AB\0\0CD"
-
-=item print()
-
-One must be careful with scalars and strings that are passed to
-print that contain ASCII encodings. One common place
-for this to occur is in the output of the MIME type header for
-CGI script writing. For example, many perl programming guides
-recommend something similar to:
-
- print "Content-type:\ttext/html\015\012\015\012";
- # this may be wrong on EBCDIC
-
-Under the IBM OS/390 USS Web Server for example you should instead
-write that as:
-
- print "Content-type:\ttext/html\r\n\r\n"; # OK for DGW et alia
-
-That is because the translation from EBCDIC to ASCII is done
-by the web server in this case (such code will not be appropriate for
-the Macintosh however). Consult your web server's documentation for
-further details.
-
-=item printf()
-
-The formats that can convert characters to numbers and vice versa
-will be different from their ASCII counterparts when executed
-on an EBCDIC machine. Examples include:
-
- printf("%c%c%c",193,194,195); # prints ABC
-
-=item sort()
-
-EBCDIC sort results may differ from ASCII sort results especially for
-mixed case strings. This is discussed in more detail below.
-
-=item sprintf()
-
-See the discussion of printf() above. An example of the use
-of sprintf would be:
-
- $CAPITAL_LETTER_A = sprintf("%c",193);
-
-=item unpack()
-
-See the discussion of pack() above.
-
-=back
-
-=head1 REGULAR EXPRESSION DIFFERENCES
-
-As of perl 5.005_03 the letter range regular expression such as
-[A-Z] and [a-z] have been especially coded to not pick up gap
-characters. For example, characters such as E<ocirc> C<o WITH CIRCUMFLEX>
-that lie between I and J would not be matched by the
-regular expression range C</[H-K]/>.
-
-If you do want to match the alphabet gap characters in a single octet
-regular expression try matching the hex or octal code such
-as C</\313/> on EBCDIC or C</\364/> on ASCII machines to
-have your regular expression match C<o WITH CIRCUMFLEX>.
-
-Another construct to be wary of is the inappropriate use of hex or
-octal constants in regular expressions. Consider the following
-set of subs:
-
- sub is_c0 {
- my $char = substr(shift,0,1);
- $char =~ /[\000-\037]/;
- }
-
- sub is_print_ascii {
- my $char = substr(shift,0,1);
- $char =~ /[\040-\176]/;
- }
-
- sub is_delete {
- my $char = substr(shift,0,1);
- $char eq "\177";
- }
-
- sub is_c1 {
- my $char = substr(shift,0,1);
- $char =~ /[\200-\237]/;
- }
-
- sub is_latin_1 {
- my $char = substr(shift,0,1);
- $char =~ /[\240-\377]/;
- }
-
-The above would be adequate if the concern was only with numeric code points.
-However, the concern may be with characters rather than code points
-and on an EBCDIC machine it may be desirable for constructs such as
-C<if (is_print_ascii("A")) {print "A is a printable character\n";}> to print
-out the expected message. One way to represent the above collection
-of character classification subs that is capable of working across the
-four coded character sets discussed in this document is as follows:
-
- sub Is_c0 {
- my $char = substr(shift,0,1);
- if (ord('^')==94) { # ascii
- return $char =~ /[\000-\037]/;
- }
- if (ord('^')==176) { # 37
- return $char =~ /[\000-\003\067\055-\057\026\005\045\013-\023\074\075\062\046\030\031\077\047\034-\037]/;
- }
- if (ord('^')==95 || ord('^')==106) { # 1047 || posix-bc
- return $char =~ /[\000-\003\067\055-\057\026\005\025\013-\023\074\075\062\046\030\031\077\047\034-\037]/;
- }
- }
-
- sub Is_print_ascii {
- my $char = substr(shift,0,1);
- $char =~ /[ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~]/;
- }
-
- sub Is_delete {
- my $char = substr(shift,0,1);
- if (ord('^')==94) { # ascii
- return $char eq "\177";
- }
- else { # ebcdic
- return $char eq "\007";
- }
- }
-
- sub Is_c1 {
- my $char = substr(shift,0,1);
- if (ord('^')==94) { # ascii
- return $char =~ /[\200-\237]/;
- }
- if (ord('^')==176) { # 37
- return $char =~ /[\040-\044\025\006\027\050-\054\011\012\033\060\061\032\063-\066\010\070-\073\040\024\076\377]/;
- }
- if (ord('^')==95) { # 1047
- return $char =~ /[\040-\045\006\027\050-\054\011\012\033\060\061\032\063-\066\010\070-\073\040\024\076\377]/;
- }
- if (ord('^')==106) { # posix-bc
- return $char =~
- /[\040-\045\006\027\050-\054\011\012\033\060\061\032\063-\066\010\070-\073\040\024\076\137]/;
- }
- }
-
- sub Is_latin_1 {
- my $char = substr(shift,0,1);
- if (ord('^')==94) { # ascii
- return $char =~ /[\240-\377]/;
- }
- if (ord('^')==176) { # 37
- return $char =~
- /[\101\252\112\261\237\262\152\265\275\264\232\212\137\312\257\274\220\217\352\372\276\240\266\263\235\332\233\213\267\270\271\253\144\145\142\146\143\147\236\150\164\161-\163\170\165-\167\254\151\355\356\353\357\354\277\200\375\376\373\374\255\256\131\104\105\102\106\103\107\234\110\124\121-\123\130\125-\127\214\111\315\316\313\317\314\341\160\335\336\333\334\215\216\337]/;
- }
- if (ord('^')==95) { # 1047
- return $char =~
- /[\101\252\112\261\237\262\152\265\273\264\232\212\260\312\257\274\220\217\352\372\276\240\266\263\235\332\233\213\267\270\271\253\144\145\142\146\143\147\236\150\164\161-\163\170\165-\167\254\151\355\356\353\357\354\277\200\375\376\373\374\272\256\131\104\105\102\106\103\107\234\110\124\121-\123\130\125-\127\214\111\315\316\313\317\314\341\160\335\336\333\334\215\216\337]/;
- }
- if (ord('^')==106) { # posix-bc
- return $char =~
- /[\101\252\260\261\237\262\320\265\171\264\232\212\272\312\257\241\220\217\352\372\276\240\266\263\235\332\233\213\267\270\271\253\144\145\142\146\143\147\236\150\164\161-\163\170\165-\167\254\151\355\356\353\357\354\277\200\340\376\335\374\255\256\131\104\105\102\106\103\107\234\110\124\121-\123\130\125-\127\214\111\315\316\313\317\314\341\160\300\336\333\334\215\216\337]/;
- }
- }
-
-Note however that only the C<Is_ascii_print()> sub is really independent
-of coded character set. Another way to write C<Is_latin_1()> would be
-to use the characters in the range explicitly:
-
- sub Is_latin_1 {
- my $char = substr(shift,0,1);
- $char =~ /[ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ]/;
- }
-
-Although that form may run into trouble in network transit (due to the
-presence of 8 bit characters) or on non ISO-Latin character sets.
-
-=head1 SOCKETS
-
-Most socket programming assumes ASCII character encodings in network
-byte order. Exceptions can include CGI script writing under a
-host web server where the server may take care of translation for you.
-Most host web servers convert EBCDIC data to ISO-8859-1 or Unicode on
-output.
-
-=head1 SORTING
-
-One big difference between ASCII based character sets and EBCDIC ones
-are the relative positions of upper and lower case letters and the
-letters compared to the digits. If sorted on an ASCII based machine the
-two letter abbreviation for a physician comes before the two letter
-for drive, that is:
-
- @sorted = sort(qw(Dr. dr.)); # @sorted holds ('Dr.','dr.') on ASCII,
- # but ('dr.','Dr.') on EBCDIC
-
-The property of lower case before uppercase letters in EBCDIC is
-even carried to the Latin 1 EBCDIC pages such as 0037 and 1047.
-An example would be that E<Euml> C<E WITH DIAERESIS> (203) comes
-before E<euml> C<e WITH DIAERESIS> (235) on an ASCII machine, but
-the latter (83) comes before the former (115) on an EBCDIC machine.
-(Astute readers will note that the upper case version of E<szlig>
-C<SMALL LETTER SHARP S> is simply "SS" and that the upper case version of
-E<yuml> C<y WITH DIAERESIS> is not in the 0..255 range but it is
-at U+x0178 in Unicode, or C<"\x{178}"> in a Unicode enabled Perl).
-
-The sort order will cause differences between results obtained on
-ASCII machines versus EBCDIC machines. What follows are some suggestions
-on how to deal with these differences.
-
-=head2 Ignore ASCII vs. EBCDIC sort differences.
-
-This is the least computationally expensive strategy. It may require
-some user education.
-
-=head2 MONO CASE then sort data.
-
-In order to minimize the expense of mono casing mixed test try to
-C<tr///> towards the character set case most employed within the data.
-If the data are primarily UPPERCASE non Latin 1 then apply tr/[a-z]/[A-Z]/
-then sort(). If the data are primarily lowercase non Latin 1 then
-apply tr/[A-Z]/[a-z]/ before sorting. If the data are primarily UPPERCASE
-and include Latin-1 characters then apply:
-
- tr/[a-z]/[A-Z]/;
- tr/[àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ]/[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ]/;
- s/ß/SS/g;
-
-then sort(). Do note however that such Latin-1 manipulation does not
-address the E<yuml> C<y WITH DIAERESIS> character that will remain at
-code point 255 on ASCII machines, but 223 on most EBCDIC machines
-where it will sort to a place less than the EBCDIC numerals. With a
-Unicode enabled Perl you might try:
-
- tr/^?/\x{178}/;
-
-The strategy of mono casing data before sorting does not preserve the case
-of the data and may not be acceptable for that reason.
-
-=head2 Convert, sort data, then re convert.
-
-This is the most expensive proposition that does not employ a network
-connection.
-
-=head2 Perform sorting on one type of machine only.
-
-This strategy can employ a network connection. As such
-it would be computationally expensive.
-
-=head1 TRANFORMATION FORMATS
-
-There are a variety of ways of transforming data with an intra character set
-mapping that serve a variety of purposes. Sorting was discussed in the
-previous section and a few of the other more popular mapping techniques are
-discussed next.
-
-=head2 URL decoding and encoding
-
-Note that some URLs have hexadecimal ASCII code points in them in an
-attempt to overcome character or protocol limitation issues. For example
-the tilde character is not on every keyboard hence a URL of the form:
-
- http://www.pvhp.com/~pvhp/
-
-may also be expressed as either of:
-
- http://www.pvhp.com/%7Epvhp/
-
- http://www.pvhp.com/%7epvhp/
-
-where 7E is the hexadecimal ASCII code point for '~'. Here is an example
-of decoding such a URL under CCSID 1047:
-
- $url = 'http://www.pvhp.com/%7Epvhp/';
- # this array assumes code page 1047
- my @a2e_1047 = (
- 0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 21, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 60, 61, 50, 38, 24, 25, 63, 39, 28, 29, 30, 31,
- 64, 90,127,123, 91,108, 80,125, 77, 93, 92, 78,107, 96, 75, 97,
- 240,241,242,243,244,245,246,247,248,249,122, 94, 76,126,110,111,
- 124,193,194,195,196,197,198,199,200,201,209,210,211,212,213,214,
- 215,216,217,226,227,228,229,230,231,232,233,173,224,189, 95,109,
- 121,129,130,131,132,133,134,135,136,137,145,146,147,148,149,150,
- 151,152,153,162,163,164,165,166,167,168,169,192, 79,208,161, 7,
- 32, 33, 34, 35, 36, 37, 6, 23, 40, 41, 42, 43, 44, 9, 10, 27,
- 48, 49, 26, 51, 52, 53, 54, 8, 56, 57, 58, 59, 4, 20, 62,255,
- 65,170, 74,177,159,178,106,181,187,180,154,138,176,202,175,188,
- 144,143,234,250,190,160,182,179,157,218,155,139,183,184,185,171,
- 100,101, 98,102, 99,103,158,104,116,113,114,115,120,117,118,119,
- 172,105,237,238,235,239,236,191,128,253,254,251,252,186,174, 89,
- 68, 69, 66, 70, 67, 71,156, 72, 84, 81, 82, 83, 88, 85, 86, 87,
- 140, 73,205,206,203,207,204,225,112,221,222,219,220,141,142,223
- );
- $url =~ s/%([0-9a-fA-F]{2})/pack("c",$a2e_1047[hex($1)])/ge;
-
-Conversely, here is a partial solution for the task of encoding such
-a URL under the 1047 code page:
-
- $url = 'http://www.pvhp.com/~pvhp/';
- # this array assumes code page 1047
- my @e2a_1047 = (
- 0, 1, 2, 3,156, 9,134,127,151,141,142, 11, 12, 13, 14, 15,
- 16, 17, 18, 19,157, 10, 8,135, 24, 25,146,143, 28, 29, 30, 31,
- 128,129,130,131,132,133, 23, 27,136,137,138,139,140, 5, 6, 7,
- 144,145, 22,147,148,149,150, 4,152,153,154,155, 20, 21,158, 26,
- 32,160,226,228,224,225,227,229,231,241,162, 46, 60, 40, 43,124,
- 38,233,234,235,232,237,238,239,236,223, 33, 36, 42, 41, 59, 94,
- 45, 47,194,196,192,193,195,197,199,209,166, 44, 37, 95, 62, 63,
- 248,201,202,203,200,205,206,207,204, 96, 58, 35, 64, 39, 61, 34,
- 216, 97, 98, 99,100,101,102,103,104,105,171,187,240,253,254,177,
- 176,106,107,108,109,110,111,112,113,114,170,186,230,184,198,164,
- 181,126,115,116,117,118,119,120,121,122,161,191,208, 91,222,174,
- 172,163,165,183,169,167,182,188,189,190,221,168,175, 93,180,215,
- 123, 65, 66, 67, 68, 69, 70, 71, 72, 73,173,244,246,242,243,245,
- 125, 74, 75, 76, 77, 78, 79, 80, 81, 82,185,251,252,249,250,255,
- 92,247, 83, 84, 85, 86, 87, 88, 89, 90,178,212,214,210,211,213,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,179,219,220,217,218,159
- );
- # The following regular expression does not address the
- # mappings for: ('.' => '%2E', '/' => '%2F', ':' => '%3A')
- $url =~ s/([\t "#%&\(\),;<=>\?\@\[\\\]^`{|}~])/sprintf("%%%02X",$e2a_1047[ord($1)])/ge;
-
-where a more complete solution would split the URL into components
-and apply a full s/// substitution only to the appropriate parts.
-
-In the remaining examples a @e2a or @a2e array may be employed
-but the assignment will not be shown explicitly. For code page 1047
-you could use the @a2e_1047 or @e2a_1047 arrays just shown.
-
-=head2 uu encoding and decoding
-
-The C<u> template to pack() or unpack() will render EBCDIC data in EBCDIC
-characters equivalent to their ASCII counterparts. For example, the
-following will print "Yes indeed\n" on either an ASCII or EBCDIC computer:
-
- $all_byte_chrs = '';
- for (0..255) { $all_byte_chrs .= chr($_); }
- $uuencode_byte_chrs = pack('u', $all_byte_chrs);
- ($uu = <<' ENDOFHEREDOC') =~ s/^\s*//gm;
- M``$"`P0%!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL
- M+2XO,#$R,S0U-C<X.3H[/#T^/T!!0D-$149'2$E*2TQ-3D]045)35%565UA9
- M6EM<75Y?8&%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ>WQ]?G^`@8*#A(6&
- MAXB)BHN,C8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*S
- MM+6VM[BYNKN\O;Z_P,'"P\3%QL?(R<K+S,W.S]#1TM/4U=;7V-G:V]S=WM_@
- ?X>+CY.7FY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_P``
- ENDOFHEREDOC
- if ($uuencode_byte_chrs eq $uu) {
- print "Yes ";
- }
- $uudecode_byte_chrs = unpack('u', $uuencode_byte_chrs);
- if ($uudecode_byte_chrs eq $all_byte_chrs) {
- print "indeed\n";
- }
-
-Here is a very spartan uudecoder that will work on EBCDIC provided
-that the @e2a array is filled in appropriately:
-
- #!/usr/local/bin/perl
- @e2a = ( # this must be filled in
- );
- $_ = <> until ($mode,$file) = /^begin\s*(\d*)\s*(\S*)/;
- open(OUT, "> $file") if $file ne "";
- while(<>) {
- last if /^end/;
- next if /[a-z]/;
- next unless int(((($e2a[ord()] - 32 ) & 077) + 2) / 3) ==
- int(length() / 4);
- print OUT unpack("u", $_);
- }
- close(OUT);
- chmod oct($mode), $file;
-
-
-=head2 Quoted-Printable encoding and decoding
-
-On ASCII encoded machines it is possible to strip characters outside of
-the printable set using:
-
- # This QP encoder works on ASCII only
- $qp_string =~ s/([=\x00-\x1F\x80-\xFF])/sprintf("=%02X",ord($1))/ge;
-
-Whereas a QP encoder that works on both ASCII and EBCDIC machines
-would look somewhat like the following (where the EBCDIC branch @e2a
-array is omitted for brevity):
-
- if (ord('A') == 65) { # ASCII
- $delete = "\x7F"; # ASCII
- @e2a = (0 .. 255) # ASCII to ASCII identity map
- }
- else { # EBCDIC
- $delete = "\x07"; # EBCDIC
- @e2a = # EBCDIC to ASCII map (as shown above)
- }
- $qp_string =~
- s/([^ !"\#\$%&'()*+,\-.\/0-9:;<>?\@A-Z[\\\]^_`a-z{|}~$delete])/sprintf("=%02X",$e2a[ord($1)])/ge;
-
-(although in production code the substitutions might be done
-in the EBCDIC branch with the @e2a array and separately in the
-ASCII branch without the expense of the identity map).
-
-Such QP strings can be decoded with:
-
- # This QP decoder is limited to ASCII only
- $string =~ s/=([0-9A-Fa-f][0-9A-Fa-f])/chr hex $1/ge;
- $string =~ s/=[\n\r]+$//;
-
-Whereas a QP decoder that works on both ASCII and EBCDIC machines
-would look somewhat like the following (where the @a2e array is
-omitted for brevity):
-
- $string =~ s/=([0-9A-Fa-f][0-9A-Fa-f])/chr $a2e[hex $1]/ge;
- $string =~ s/=[\n\r]+$//;
-
-=head2 Caesarian cyphers
-
-The practice of shifting an alphabet one or more characters for encipherment
-dates back thousands of years and was explicitly detailed by Gaius Julius
-Caesar in his B<Gallic Wars> text. A single alphabet shift is sometimes
-referred to as a rotation and the shift amount is given as a number $n after
-the string 'rot' or "rot$n". Rot0 and rot26 would designate identity maps
-on the 26 letter English version of the Latin alphabet. Rot13 has the
-interesting property that alternate subsequent invocations are identity maps
-(thus rot13 is its own non-trivial inverse in the group of 26 alphabet
-rotations). Hence the following is a rot13 encoder and decoder that will
-work on ASCII and EBCDIC machines:
-
- #!/usr/local/bin/perl
-
- while(<>){
- tr/n-za-mN-ZA-M/a-zA-Z/;
- print;
- }
-
-In one-liner form:
-
- perl -ne 'tr/n-za-mN-ZA-M/a-zA-Z/;print'
-
-
-=head1 Hashing order and checksums
-
-XXX
-
-=head1 I18N AND L10N
-
-Internationalization(I18N) and localization(L10N) are supported at least
-in principle even on EBCDIC machines. The details are system dependent
-and discussed under the L<perlebcdic/OS ISSUES> section below.
-
-=head1 MULTI OCTET CHARACTER SETS
-
-Multi byte EBCDIC code pages; Unicode, UTF-8, UTF-EBCDIC, XXX.
-
-=head1 OS ISSUES
-
-There may be a few system dependent issues
-of concern to EBCDIC Perl programmers.
-
-=head2 OS/400
-
-The PASE environment.
-
-=over 8
-
-=item IFS access
-
-XXX.
-
-=back
-
-=head2 OS/390
-
-Perl runs under Unix Systems Services or USS.
-
-=over 8
-
-=item chcp
-
-B<chcp> is supported as a shell utility for displaying and changing
-one's code page. See also L<chcp>.
-
-=item dataset access
-
-For sequential data set access try:
-
- my @ds_records = `cat //DSNAME`;
-
-or:
-
- my @ds_records = `cat //'HLQ.DSNAME'`;
-
-See also the OS390::Stdio module on CPAN.
-
-=item OS/390 iconv
-
-B<iconv> is supported as both a shell utility and a C RTL routine.
-See also the iconv(1) and iconv(3) manual pages.
-
-=item locales
-
-On OS/390 see L<locale> for information on locales. The L10N files
-are in F</usr/nls/locale>. $Config{d_setlocale} is 'define' on OS/390.
-
-=back
-
-=head2 VM/ESA?
-
-XXX.
-
-=head2 POSIX-BC?
-
-XXX.
-
-=head1 BUGS
-
-This pod document contains literal Latin 1 characters and may encounter
-translation difficulties. In particular one popular nroff implementation
-was known to strip accented characters to their unaccented counterparts
-while attempting to view this document through the B<pod2man> program
-(for example, you may see a plain C<y> rather than one with a diaeresis
-as in E<yuml>). Another nroff truncated the resultant man page at
-the first occurence of 8 bit characters.
-
-Not all shells will allow multiple C<-e> string arguments to perl to
-be concatenated together properly as recipes 2, 3, and 4 might seem
-to imply.
-
-Perl does not yet work with any Unicode features on EBCDIC platforms.
-
-=head1 SEE ALSO
-
-L<perllocale>, L<perlfunc>.
-
-=head1 REFERENCES
-
-http://anubis.dkuug.dk/i18n/charmaps
-
-http://www.unicode.org/
-
-http://www.unicode.org/unicode/reports/tr16/
-
-http://www.wps.com/texts/codes/
-B<ASCII: American Standard Code for Information Infiltration> Tom Jennings,
-September 1999.
-
-B<The Unicode Standard Version 2.0> The Unicode Consortium,
-ISBN 0-201-48345-9, Addison Wesley Developers Press, July 1996.
-
-B<The Unicode Standard Version 3.0> The Unicode Consortium, Lisa Moore ed.,
-ISBN 0-201-61633-5, Addison Wesley Developers Press, February 2000.
-
-B<CDRA: IBM - Character Data Representation Architecture -
-Reference and Registry>, IBM SC09-2190-00, December 1996.
-
-"Demystifying Character Sets", Andrea Vine, Multilingual Computing
-& Technology, B<#26 Vol. 10 Issue 4>, August/September 1999;
-ISSN 1523-0309; Multilingual Computing Inc. Sandpoint ID, USA.
-
-B<Codes, Ciphers, and Other Cryptic and Clandestine Communication>
-Fred B. Wrixon, ISBN 1-57912-040-7, Black Dog & Leventhal Publishers,
-1998.
-
-=head1 AUTHOR
-
-Peter Prymmer pvhp@best.com wrote this in 1999 and 2000
-with CCSID 0819 and 0037 help from Chris Leach and
-AndrE<eacute> Pirard A.Pirard@ulg.ac.be as well as POSIX-BC
-help from Thomas Dorner Thomas.Dorner@start.de.
-Thanks also to Vickie Cooper, Philip Newton, William Raffloer, and
-Joe Smith. Trademarks, registered trademarks, service marks and
-registered service marks used in this document are the property of
-their respective owners.
-
-
diff --git a/contrib/perl5/pod/perlembed.pod b/contrib/perl5/pod/perlembed.pod
deleted file mode 100644
index ecbe1f6..0000000
--- a/contrib/perl5/pod/perlembed.pod
+++ /dev/null
@@ -1,1069 +0,0 @@
-=head1 NAME
-
-perlembed - how to embed perl in your C program
-
-=head1 DESCRIPTION
-
-=head2 PREAMBLE
-
-Do you want to:
-
-=over 5
-
-=item B<Use C from Perl?>
-
-Read L<perlxstut>, L<perlxs>, L<h2xs>, L<perlguts>, and L<perlapi>.
-
-=item B<Use a Unix program from Perl?>
-
-Read about back-quotes and about C<system> and C<exec> in L<perlfunc>.
-
-=item B<Use Perl from Perl?>
-
-Read about L<perlfunc/do> and L<perlfunc/eval> and L<perlfunc/require>
-and L<perlfunc/use>.
-
-=item B<Use C from C?>
-
-Rethink your design.
-
-=item B<Use Perl from C?>
-
-Read on...
-
-=back
-
-=head2 ROADMAP
-
-=over 5
-
-=item *
-
-Compiling your C program
-
-=item *
-
-Adding a Perl interpreter to your C program
-
-=item *
-
-Calling a Perl subroutine from your C program
-
-=item *
-
-Evaluating a Perl statement from your C program
-
-=item *
-
-Performing Perl pattern matches and substitutions from your C program
-
-=item *
-
-Fiddling with the Perl stack from your C program
-
-=item *
-
-Maintaining a persistent interpreter
-
-=item *
-
-Maintaining multiple interpreter instances
-
-=item *
-
-Using Perl modules, which themselves use C libraries, from your C program
-
-=item *
-
-Embedding Perl under Win32
-
-=back
-
-=head2 Compiling your C program
-
-If you have trouble compiling the scripts in this documentation,
-you're not alone. The cardinal rule: COMPILE THE PROGRAMS IN EXACTLY
-THE SAME WAY THAT YOUR PERL WAS COMPILED. (Sorry for yelling.)
-
-Also, every C program that uses Perl must link in the I<perl library>.
-What's that, you ask? Perl is itself written in C; the perl library
-is the collection of compiled C programs that were used to create your
-perl executable (I</usr/bin/perl> or equivalent). (Corollary: you
-can't use Perl from your C program unless Perl has been compiled on
-your machine, or installed properly--that's why you shouldn't blithely
-copy Perl executables from machine to machine without also copying the
-I<lib> directory.)
-
-When you use Perl from C, your C program will--usually--allocate,
-"run", and deallocate a I<PerlInterpreter> object, which is defined by
-the perl library.
-
-If your copy of Perl is recent enough to contain this documentation
-(version 5.002 or later), then the perl library (and I<EXTERN.h> and
-I<perl.h>, which you'll also need) will reside in a directory
-that looks like this:
-
- /usr/local/lib/perl5/your_architecture_here/CORE
-
-or perhaps just
-
- /usr/local/lib/perl5/CORE
-
-or maybe something like
-
- /usr/opt/perl5/CORE
-
-Execute this statement for a hint about where to find CORE:
-
- perl -MConfig -e 'print $Config{archlib}'
-
-Here's how you'd compile the example in the next section,
-L<Adding a Perl interpreter to your C program>, on my Linux box:
-
- % gcc -O2 -Dbool=char -DHAS_BOOL -I/usr/local/include
- -I/usr/local/lib/perl5/i586-linux/5.003/CORE
- -L/usr/local/lib/perl5/i586-linux/5.003/CORE
- -o interp interp.c -lperl -lm
-
-(That's all one line.) On my DEC Alpha running old 5.003_05, the
-incantation is a bit different:
-
- % cc -O2 -Olimit 2900 -DSTANDARD_C -I/usr/local/include
- -I/usr/local/lib/perl5/alpha-dec_osf/5.00305/CORE
- -L/usr/local/lib/perl5/alpha-dec_osf/5.00305/CORE -L/usr/local/lib
- -D__LANGUAGE_C__ -D_NO_PROTO -o interp interp.c -lperl -lm
-
-How can you figure out what to add? Assuming your Perl is post-5.001,
-execute a C<perl -V> command and pay special attention to the "cc" and
-"ccflags" information.
-
-You'll have to choose the appropriate compiler (I<cc>, I<gcc>, et al.) for
-your machine: C<perl -MConfig -e 'print $Config{cc}'> will tell you what
-to use.
-
-You'll also have to choose the appropriate library directory
-(I</usr/local/lib/...>) for your machine. If your compiler complains
-that certain functions are undefined, or that it can't locate
-I<-lperl>, then you need to change the path following the C<-L>. If it
-complains that it can't find I<EXTERN.h> and I<perl.h>, you need to
-change the path following the C<-I>.
-
-You may have to add extra libraries as well. Which ones?
-Perhaps those printed by
-
- perl -MConfig -e 'print $Config{libs}'
-
-Provided your perl binary was properly configured and installed the
-B<ExtUtils::Embed> module will determine all of this information for
-you:
-
- % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
-
-If the B<ExtUtils::Embed> module isn't part of your Perl distribution,
-you can retrieve it from
-http://www.perl.com/perl/CPAN/modules/by-module/ExtUtils/. (If
-this documentation came from your Perl distribution, then you're
-running 5.004 or better and you already have it.)
-
-The B<ExtUtils::Embed> kit on CPAN also contains all source code for
-the examples in this document, tests, additional examples and other
-information you may find useful.
-
-=head2 Adding a Perl interpreter to your C program
-
-In a sense, perl (the C program) is a good example of embedding Perl
-(the language), so I'll demonstrate embedding with I<miniperlmain.c>,
-included in the source distribution. Here's a bastardized, nonportable
-version of I<miniperlmain.c> containing the essentials of embedding:
-
- #include <EXTERN.h> /* from the Perl distribution */
- #include <perl.h> /* from the Perl distribution */
-
- static PerlInterpreter *my_perl; /*** The Perl interpreter ***/
-
- int main(int argc, char **argv, char **env)
- {
- my_perl = perl_alloc();
- perl_construct(my_perl);
- perl_parse(my_perl, NULL, argc, argv, (char **)NULL);
- perl_run(my_perl);
- perl_destruct(my_perl);
- perl_free(my_perl);
- }
-
-Notice that we don't use the C<env> pointer. Normally handed to
-C<perl_parse> as its final argument, C<env> here is replaced by
-C<NULL>, which means that the current environment will be used.
-
-Now compile this program (I'll call it I<interp.c>) into an executable:
-
- % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
-
-After a successful compilation, you'll be able to use I<interp> just
-like perl itself:
-
- % interp
- print "Pretty Good Perl \n";
- print "10890 - 9801 is ", 10890 - 9801;
- <CTRL-D>
- Pretty Good Perl
- 10890 - 9801 is 1089
-
-or
-
- % interp -e 'printf("%x", 3735928559)'
- deadbeef
-
-You can also read and execute Perl statements from a file while in the
-midst of your C program, by placing the filename in I<argv[1]> before
-calling I<perl_run>.
-
-=head2 Calling a Perl subroutine from your C program
-
-To call individual Perl subroutines, you can use any of the B<call_*>
-functions documented in L<perlcall>.
-In this example we'll use C<call_argv>.
-
-That's shown below, in a program I'll call I<showtime.c>.
-
- #include <EXTERN.h>
- #include <perl.h>
-
- static PerlInterpreter *my_perl;
-
- int main(int argc, char **argv, char **env)
- {
- char *args[] = { NULL };
- my_perl = perl_alloc();
- perl_construct(my_perl);
-
- perl_parse(my_perl, NULL, argc, argv, NULL);
-
- /*** skipping perl_run() ***/
-
- call_argv("showtime", G_DISCARD | G_NOARGS, args);
-
- perl_destruct(my_perl);
- perl_free(my_perl);
- }
-
-where I<showtime> is a Perl subroutine that takes no arguments (that's the
-I<G_NOARGS>) and for which I'll ignore the return value (that's the
-I<G_DISCARD>). Those flags, and others, are discussed in L<perlcall>.
-
-I'll define the I<showtime> subroutine in a file called I<showtime.pl>:
-
- print "I shan't be printed.";
-
- sub showtime {
- print time;
- }
-
-Simple enough. Now compile and run:
-
- % cc -o showtime showtime.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
-
- % showtime showtime.pl
- 818284590
-
-yielding the number of seconds that elapsed between January 1, 1970
-(the beginning of the Unix epoch), and the moment I began writing this
-sentence.
-
-In this particular case we don't have to call I<perl_run>, but in
-general it's considered good practice to ensure proper initialization
-of library code, including execution of all object C<DESTROY> methods
-and package C<END {}> blocks.
-
-If you want to pass arguments to the Perl subroutine, you can add
-strings to the C<NULL>-terminated C<args> list passed to
-I<call_argv>. For other data types, or to examine return values,
-you'll need to manipulate the Perl stack. That's demonstrated in
-L<Fiddling with the Perl stack from your C program>.
-
-=head2 Evaluating a Perl statement from your C program
-
-Perl provides two API functions to evaluate pieces of Perl code.
-These are L<perlapi/eval_sv> and L<perlapi/eval_pv>.
-
-Arguably, these are the only routines you'll ever need to execute
-snippets of Perl code from within your C program. Your code can be as
-long as you wish; it can contain multiple statements; it can employ
-L<perlfunc/use>, L<perlfunc/require>, and L<perlfunc/do> to
-include external Perl files.
-
-I<eval_pv> lets us evaluate individual Perl strings, and then
-extract variables for coercion into C types. The following program,
-I<string.c>, executes three Perl strings, extracting an C<int> from
-the first, a C<float> from the second, and a C<char *> from the third.
-
- #include <EXTERN.h>
- #include <perl.h>
-
- static PerlInterpreter *my_perl;
-
- main (int argc, char **argv, char **env)
- {
- STRLEN n_a;
- char *embedding[] = { "", "-e", "0" };
-
- my_perl = perl_alloc();
- perl_construct( my_perl );
-
- perl_parse(my_perl, NULL, 3, embedding, NULL);
- perl_run(my_perl);
-
- /** Treat $a as an integer **/
- eval_pv("$a = 3; $a **= 2", TRUE);
- printf("a = %d\n", SvIV(get_sv("a", FALSE)));
-
- /** Treat $a as a float **/
- eval_pv("$a = 3.14; $a **= 2", TRUE);
- printf("a = %f\n", SvNV(get_sv("a", FALSE)));
-
- /** Treat $a as a string **/
- eval_pv("$a = 'rekcaH lreP rehtonA tsuJ'; $a = reverse($a);", TRUE);
- printf("a = %s\n", SvPV(get_sv("a", FALSE), n_a));
-
- perl_destruct(my_perl);
- perl_free(my_perl);
- }
-
-All of those strange functions with I<sv> in their names help convert Perl scalars to C types. They're described in L<perlguts> and L<perlapi>.
-
-If you compile and run I<string.c>, you'll see the results of using
-I<SvIV()> to create an C<int>, I<SvNV()> to create a C<float>, and
-I<SvPV()> to create a string:
-
- a = 9
- a = 9.859600
- a = Just Another Perl Hacker
-
-In the example above, we've created a global variable to temporarily
-store the computed value of our eval'd expression. It is also
-possible and in most cases a better strategy to fetch the return value
-from I<eval_pv()> instead. Example:
-
- ...
- STRLEN n_a;
- SV *val = eval_pv("reverse 'rekcaH lreP rehtonA tsuJ'", TRUE);
- printf("%s\n", SvPV(val,n_a));
- ...
-
-This way, we avoid namespace pollution by not creating global
-variables and we've simplified our code as well.
-
-=head2 Performing Perl pattern matches and substitutions from your C program
-
-The I<eval_sv()> function lets us evaluate strings of Perl code, so we can
-define some functions that use it to "specialize" in matches and
-substitutions: I<match()>, I<substitute()>, and I<matches()>.
-
- I32 match(SV *string, char *pattern);
-
-Given a string and a pattern (e.g., C<m/clasp/> or C</\b\w*\b/>, which
-in your C program might appear as "/\\b\\w*\\b/"), match()
-returns 1 if the string matches the pattern and 0 otherwise.
-
- int substitute(SV **string, char *pattern);
-
-Given a pointer to an C<SV> and an C<=~> operation (e.g.,
-C<s/bob/robert/g> or C<tr[A-Z][a-z]>), substitute() modifies the string
-within the C<AV> at according to the operation, returning the number of substitutions
-made.
-
- int matches(SV *string, char *pattern, AV **matches);
-
-Given an C<SV>, a pattern, and a pointer to an empty C<AV>,
-matches() evaluates C<$string =~ $pattern> in a list context, and
-fills in I<matches> with the array elements, returning the number of matches found.
-
-Here's a sample program, I<match.c>, that uses all three (long lines have
-been wrapped here):
-
- #include <EXTERN.h>
- #include <perl.h>
-
- /** my_eval_sv(code, error_check)
- ** kinda like eval_sv(),
- ** but we pop the return value off the stack
- **/
- SV* my_eval_sv(SV *sv, I32 croak_on_error)
- {
- dSP;
- SV* retval;
- STRLEN n_a;
-
- PUSHMARK(SP);
- eval_sv(sv, G_SCALAR);
-
- SPAGAIN;
- retval = POPs;
- PUTBACK;
-
- if (croak_on_error && SvTRUE(ERRSV))
- croak(SvPVx(ERRSV, n_a));
-
- return retval;
- }
-
- /** match(string, pattern)
- **
- ** Used for matches in a scalar context.
- **
- ** Returns 1 if the match was successful; 0 otherwise.
- **/
-
- I32 match(SV *string, char *pattern)
- {
- SV *command = NEWSV(1099, 0), *retval;
- STRLEN n_a;
-
- sv_setpvf(command, "my $string = '%s'; $string =~ %s",
- SvPV(string,n_a), pattern);
-
- retval = my_eval_sv(command, TRUE);
- SvREFCNT_dec(command);
-
- return SvIV(retval);
- }
-
- /** substitute(string, pattern)
- **
- ** Used for =~ operations that modify their left-hand side (s/// and tr///)
- **
- ** Returns the number of successful matches, and
- ** modifies the input string if there were any.
- **/
-
- I32 substitute(SV **string, char *pattern)
- {
- SV *command = NEWSV(1099, 0), *retval;
- STRLEN n_a;
-
- sv_setpvf(command, "$string = '%s'; ($string =~ %s)",
- SvPV(*string,n_a), pattern);
-
- retval = my_eval_sv(command, TRUE);
- SvREFCNT_dec(command);
-
- *string = get_sv("string", FALSE);
- return SvIV(retval);
- }
-
- /** matches(string, pattern, matches)
- **
- ** Used for matches in a list context.
- **
- ** Returns the number of matches,
- ** and fills in **matches with the matching substrings
- **/
-
- I32 matches(SV *string, char *pattern, AV **match_list)
- {
- SV *command = NEWSV(1099, 0);
- I32 num_matches;
- STRLEN n_a;
-
- sv_setpvf(command, "my $string = '%s'; @array = ($string =~ %s)",
- SvPV(string,n_a), pattern);
-
- my_eval_sv(command, TRUE);
- SvREFCNT_dec(command);
-
- *match_list = get_av("array", FALSE);
- num_matches = av_len(*match_list) + 1; /** assume $[ is 0 **/
-
- return num_matches;
- }
-
- main (int argc, char **argv, char **env)
- {
- PerlInterpreter *my_perl = perl_alloc();
- char *embedding[] = { "", "-e", "0" };
- AV *match_list;
- I32 num_matches, i;
- SV *text = NEWSV(1099,0);
- STRLEN n_a;
-
- perl_construct(my_perl);
- perl_parse(my_perl, NULL, 3, embedding, NULL);
-
- sv_setpv(text, "When he is at a convenience store and the bill comes to some amount like 76 cents, Maynard is aware that there is something he *should* do, something that will enable him to get back a quarter, but he has no idea *what*. He fumbles through his red squeezey changepurse and gives the boy three extra pennies with his dollar, hoping that he might luck into the correct amount. The boy gives him back two of his own pennies and then the big shiny quarter that is his prize. -RICHH");
-
- if (match(text, "m/quarter/")) /** Does text contain 'quarter'? **/
- printf("match: Text contains the word 'quarter'.\n\n");
- else
- printf("match: Text doesn't contain the word 'quarter'.\n\n");
-
- if (match(text, "m/eighth/")) /** Does text contain 'eighth'? **/
- printf("match: Text contains the word 'eighth'.\n\n");
- else
- printf("match: Text doesn't contain the word 'eighth'.\n\n");
-
- /** Match all occurrences of /wi../ **/
- num_matches = matches(text, "m/(wi..)/g", &match_list);
- printf("matches: m/(wi..)/g found %d matches...\n", num_matches);
-
- for (i = 0; i < num_matches; i++)
- printf("match: %s\n", SvPV(*av_fetch(match_list, i, FALSE),n_a));
- printf("\n");
-
- /** Remove all vowels from text **/
- num_matches = substitute(&text, "s/[aeiou]//gi");
- if (num_matches) {
- printf("substitute: s/[aeiou]//gi...%d substitutions made.\n",
- num_matches);
- printf("Now text is: %s\n\n", SvPV(text,n_a));
- }
-
- /** Attempt a substitution **/
- if (!substitute(&text, "s/Perl/C/")) {
- printf("substitute: s/Perl/C...No substitution made.\n\n");
- }
-
- SvREFCNT_dec(text);
- PL_perl_destruct_level = 1;
- perl_destruct(my_perl);
- perl_free(my_perl);
- }
-
-which produces the output (again, long lines have been wrapped here)
-
- match: Text contains the word 'quarter'.
-
- match: Text doesn't contain the word 'eighth'.
-
- matches: m/(wi..)/g found 2 matches...
- match: will
- match: with
-
- substitute: s/[aeiou]//gi...139 substitutions made.
- Now text is: Whn h s t cnvnnc str nd th bll cms t sm mnt lk 76 cnts,
- Mynrd s wr tht thr s smthng h *shld* d, smthng tht wll nbl hm t gt bck
- qrtr, bt h hs n d *wht*. H fmbls thrgh hs rd sqzy chngprs nd gvs th by
- thr xtr pnns wth hs dllr, hpng tht h mght lck nt th crrct mnt. Th by gvs
- hm bck tw f hs wn pnns nd thn th bg shny qrtr tht s hs prz. -RCHH
-
- substitute: s/Perl/C...No substitution made.
-
-=head2 Fiddling with the Perl stack from your C program
-
-When trying to explain stacks, most computer science textbooks mumble
-something about spring-loaded columns of cafeteria plates: the last
-thing you pushed on the stack is the first thing you pop off. That'll
-do for our purposes: your C program will push some arguments onto "the Perl
-stack", shut its eyes while some magic happens, and then pop the
-results--the return value of your Perl subroutine--off the stack.
-
-First you'll need to know how to convert between C types and Perl
-types, with newSViv() and sv_setnv() and newAV() and all their
-friends. They're described in L<perlguts> and L<perlapi>.
-
-Then you'll need to know how to manipulate the Perl stack. That's
-described in L<perlcall>.
-
-Once you've understood those, embedding Perl in C is easy.
-
-Because C has no builtin function for integer exponentiation, let's
-make Perl's ** operator available to it (this is less useful than it
-sounds, because Perl implements ** with C's I<pow()> function). First
-I'll create a stub exponentiation function in I<power.pl>:
-
- sub expo {
- my ($a, $b) = @_;
- return $a ** $b;
- }
-
-Now I'll create a C program, I<power.c>, with a function
-I<PerlPower()> that contains all the perlguts necessary to push the
-two arguments into I<expo()> and to pop the return value out. Take a
-deep breath...
-
- #include <EXTERN.h>
- #include <perl.h>
-
- static PerlInterpreter *my_perl;
-
- static void
- PerlPower(int a, int b)
- {
- dSP; /* initialize stack pointer */
- ENTER; /* everything created after here */
- SAVETMPS; /* ...is a temporary variable. */
- PUSHMARK(SP); /* remember the stack pointer */
- XPUSHs(sv_2mortal(newSViv(a))); /* push the base onto the stack */
- XPUSHs(sv_2mortal(newSViv(b))); /* push the exponent onto stack */
- PUTBACK; /* make local stack pointer global */
- call_pv("expo", G_SCALAR); /* call the function */
- SPAGAIN; /* refresh stack pointer */
- /* pop the return value from stack */
- printf ("%d to the %dth power is %d.\n", a, b, POPi);
- PUTBACK;
- FREETMPS; /* free that return value */
- LEAVE; /* ...and the XPUSHed "mortal" args.*/
- }
-
- int main (int argc, char **argv, char **env)
- {
- char *my_argv[] = { "", "power.pl" };
-
- my_perl = perl_alloc();
- perl_construct( my_perl );
-
- perl_parse(my_perl, NULL, 2, my_argv, (char **)NULL);
- perl_run(my_perl);
-
- PerlPower(3, 4); /*** Compute 3 ** 4 ***/
-
- perl_destruct(my_perl);
- perl_free(my_perl);
- }
-
-
-
-Compile and run:
-
- % cc -o power power.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
-
- % power
- 3 to the 4th power is 81.
-
-=head2 Maintaining a persistent interpreter
-
-When developing interactive and/or potentially long-running
-applications, it's a good idea to maintain a persistent interpreter
-rather than allocating and constructing a new interpreter multiple
-times. The major reason is speed: since Perl will only be loaded into
-memory once.
-
-However, you have to be more cautious with namespace and variable
-scoping when using a persistent interpreter. In previous examples
-we've been using global variables in the default package C<main>. We
-knew exactly what code would be run, and assumed we could avoid
-variable collisions and outrageous symbol table growth.
-
-Let's say your application is a server that will occasionally run Perl
-code from some arbitrary file. Your server has no way of knowing what
-code it's going to run. Very dangerous.
-
-If the file is pulled in by C<perl_parse()>, compiled into a newly
-constructed interpreter, and subsequently cleaned out with
-C<perl_destruct()> afterwards, you're shielded from most namespace
-troubles.
-
-One way to avoid namespace collisions in this scenario is to translate
-the filename into a guaranteed-unique package name, and then compile
-the code into that package using L<perlfunc/eval>. In the example
-below, each file will only be compiled once. Or, the application
-might choose to clean out the symbol table associated with the file
-after it's no longer needed. Using L<perlapi/call_argv>, We'll
-call the subroutine C<Embed::Persistent::eval_file> which lives in the
-file C<persistent.pl> and pass the filename and boolean cleanup/cache
-flag as arguments.
-
-Note that the process will continue to grow for each file that it
-uses. In addition, there might be C<AUTOLOAD>ed subroutines and other
-conditions that cause Perl's symbol table to grow. You might want to
-add some logic that keeps track of the process size, or restarts
-itself after a certain number of requests, to ensure that memory
-consumption is minimized. You'll also want to scope your variables
-with L<perlfunc/my> whenever possible.
-
-
- package Embed::Persistent;
- #persistent.pl
-
- use strict;
- our %Cache;
- use Symbol qw(delete_package);
-
- sub valid_package_name {
- my($string) = @_;
- $string =~ s/([^A-Za-z0-9\/])/sprintf("_%2x",unpack("C",$1))/eg;
- # second pass only for words starting with a digit
- $string =~ s|/(\d)|sprintf("/_%2x",unpack("C",$1))|eg;
-
- # Dress it up as a real package name
- $string =~ s|/|::|g;
- return "Embed" . $string;
- }
-
- sub eval_file {
- my($filename, $delete) = @_;
- my $package = valid_package_name($filename);
- my $mtime = -M $filename;
- if(defined $Cache{$package}{mtime}
- &&
- $Cache{$package}{mtime} <= $mtime)
- {
- # we have compiled this subroutine already,
- # it has not been updated on disk, nothing left to do
- print STDERR "already compiled $package->handler\n";
- }
- else {
- local *FH;
- open FH, $filename or die "open '$filename' $!";
- local($/) = undef;
- my $sub = <FH>;
- close FH;
-
- #wrap the code into a subroutine inside our unique package
- my $eval = qq{package $package; sub handler { $sub; }};
- {
- # hide our variables within this block
- my($filename,$mtime,$package,$sub);
- eval $eval;
- }
- die $@ if $@;
-
- #cache it unless we're cleaning out each time
- $Cache{$package}{mtime} = $mtime unless $delete;
- }
-
- eval {$package->handler;};
- die $@ if $@;
-
- delete_package($package) if $delete;
-
- #take a look if you want
- #print Devel::Symdump->rnew($package)->as_string, $/;
- }
-
- 1;
-
- __END__
-
- /* persistent.c */
- #include <EXTERN.h>
- #include <perl.h>
-
- /* 1 = clean out filename's symbol table after each request, 0 = don't */
- #ifndef DO_CLEAN
- #define DO_CLEAN 0
- #endif
-
- static PerlInterpreter *perl = NULL;
-
- int
- main(int argc, char **argv, char **env)
- {
- char *embedding[] = { "", "persistent.pl" };
- char *args[] = { "", DO_CLEAN, NULL };
- char filename [1024];
- int exitstatus = 0;
- STRLEN n_a;
-
- if((perl = perl_alloc()) == NULL) {
- fprintf(stderr, "no memory!");
- exit(1);
- }
- perl_construct(perl);
-
- exitstatus = perl_parse(perl, NULL, 2, embedding, NULL);
-
- if(!exitstatus) {
- exitstatus = perl_run(perl);
-
- while(printf("Enter file name: ") && gets(filename)) {
-
- /* call the subroutine, passing it the filename as an argument */
- args[0] = filename;
- call_argv("Embed::Persistent::eval_file",
- G_DISCARD | G_EVAL, args);
-
- /* check $@ */
- if(SvTRUE(ERRSV))
- fprintf(stderr, "eval error: %s\n", SvPV(ERRSV,n_a));
- }
- }
-
- PL_perl_destruct_level = 0;
- perl_destruct(perl);
- perl_free(perl);
- exit(exitstatus);
- }
-
-Now compile:
-
- % cc -o persistent persistent.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
-
-Here's a example script file:
-
- #test.pl
- my $string = "hello";
- foo($string);
-
- sub foo {
- print "foo says: @_\n";
- }
-
-Now run:
-
- % persistent
- Enter file name: test.pl
- foo says: hello
- Enter file name: test.pl
- already compiled Embed::test_2epl->handler
- foo says: hello
- Enter file name: ^C
-
-=head2 Maintaining multiple interpreter instances
-
-Some rare applications will need to create more than one interpreter
-during a session. Such an application might sporadically decide to
-release any resources associated with the interpreter.
-
-The program must take care to ensure that this takes place I<before>
-the next interpreter is constructed. By default, when perl is not
-built with any special options, the global variable
-C<PL_perl_destruct_level> is set to C<0>, since extra cleaning isn't
-usually needed when a program only ever creates a single interpreter
-in its entire lifetime.
-
-Setting C<PL_perl_destruct_level> to C<1> makes everything squeaky clean:
-
- PL_perl_destruct_level = 1;
-
- while(1) {
- ...
- /* reset global variables here with PL_perl_destruct_level = 1 */
- perl_construct(my_perl);
- ...
- /* clean and reset _everything_ during perl_destruct */
- perl_destruct(my_perl);
- perl_free(my_perl);
- ...
- /* let's go do it again! */
- }
-
-When I<perl_destruct()> is called, the interpreter's syntax parse tree
-and symbol tables are cleaned up, and global variables are reset.
-
-Now suppose we have more than one interpreter instance running at the
-same time. This is feasible, but only if you used the Configure option
-C<-Dusemultiplicity> or the options C<-Dusethreads -Duseithreads> when
-building Perl. By default, enabling one of these Configure options
-sets the per-interpreter global variable C<PL_perl_destruct_level> to
-C<1>, so that thorough cleaning is automatic.
-
-Using C<-Dusethreads -Duseithreads> rather than C<-Dusemultiplicity>
-is more appropriate if you intend to run multiple interpreters
-concurrently in different threads, because it enables support for
-linking in the thread libraries of your system with the interpreter.
-
-Let's give it a try:
-
-
- #include <EXTERN.h>
- #include <perl.h>
-
- /* we're going to embed two interpreters */
- /* we're going to embed two interpreters */
-
- #define SAY_HELLO "-e", "print qq(Hi, I'm $^X\n)"
-
- int main(int argc, char **argv, char **env)
- {
- PerlInterpreter
- *one_perl = perl_alloc(),
- *two_perl = perl_alloc();
- char *one_args[] = { "one_perl", SAY_HELLO };
- char *two_args[] = { "two_perl", SAY_HELLO };
-
- PERL_SET_CONTEXT(one_perl);
- perl_construct(one_perl);
- PERL_SET_CONTEXT(two_perl);
- perl_construct(two_perl);
-
- PERL_SET_CONTEXT(one_perl);
- perl_parse(one_perl, NULL, 3, one_args, (char **)NULL);
- PERL_SET_CONTEXT(two_perl);
- perl_parse(two_perl, NULL, 3, two_args, (char **)NULL);
-
- PERL_SET_CONTEXT(one_perl);
- perl_run(one_perl);
- PERL_SET_CONTEXT(two_perl);
- perl_run(two_perl);
-
- PERL_SET_CONTEXT(one_perl);
- perl_destruct(one_perl);
- PERL_SET_CONTEXT(two_perl);
- perl_destruct(two_perl);
-
- PERL_SET_CONTEXT(one_perl);
- perl_free(one_perl);
- PERL_SET_CONTEXT(two_perl);
- perl_free(two_perl);
- }
-
-Note the calls to PERL_SET_CONTEXT(). These are necessary to initialize
-the global state that tracks which interpreter is the "current" one on
-the particular process or thread that may be running it. It should
-always be used if you have more than one interpreter and are making
-perl API calls on both interpreters in an interleaved fashion.
-
-PERL_SET_CONTEXT(interp) should also be called whenever C<interp> is
-used by a thread that did not create it (using either perl_alloc(), or
-the more esoteric perl_clone()).
-
-Compile as usual:
-
- % cc -o multiplicity multiplicity.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
-
-Run it, Run it:
-
- % multiplicity
- Hi, I'm one_perl
- Hi, I'm two_perl
-
-=head2 Using Perl modules, which themselves use C libraries, from your C program
-
-If you've played with the examples above and tried to embed a script
-that I<use()>s a Perl module (such as I<Socket>) which itself uses a C or C++ library,
-this probably happened:
-
-
- Can't load module Socket, dynamic loading not available in this perl.
- (You may need to build a new perl executable which either supports
- dynamic loading or has the Socket module statically linked into it.)
-
-
-What's wrong?
-
-Your interpreter doesn't know how to communicate with these extensions
-on its own. A little glue will help. Up until now you've been
-calling I<perl_parse()>, handing it NULL for the second argument:
-
- perl_parse(my_perl, NULL, argc, my_argv, NULL);
-
-That's where the glue code can be inserted to create the initial contact between
-Perl and linked C/C++ routines. Let's take a look some pieces of I<perlmain.c>
-to see how Perl does this:
-
- static void xs_init (pTHX);
-
- EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
- EXTERN_C void boot_Socket (pTHX_ CV* cv);
-
-
- EXTERN_C void
- xs_init(pTHX)
- {
- char *file = __FILE__;
- /* DynaLoader is a special case */
- newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
- newXS("Socket::bootstrap", boot_Socket, file);
- }
-
-Simply put: for each extension linked with your Perl executable
-(determined during its initial configuration on your
-computer or when adding a new extension),
-a Perl subroutine is created to incorporate the extension's
-routines. Normally, that subroutine is named
-I<Module::bootstrap()> and is invoked when you say I<use Module>. In
-turn, this hooks into an XSUB, I<boot_Module>, which creates a Perl
-counterpart for each of the extension's XSUBs. Don't worry about this
-part; leave that to the I<xsubpp> and extension authors. If your
-extension is dynamically loaded, DynaLoader creates I<Module::bootstrap()>
-for you on the fly. In fact, if you have a working DynaLoader then there
-is rarely any need to link in any other extensions statically.
-
-
-Once you have this code, slap it into the second argument of I<perl_parse()>:
-
-
- perl_parse(my_perl, xs_init, argc, my_argv, NULL);
-
-
-Then compile:
-
- % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
-
- % interp
- use Socket;
- use SomeDynamicallyLoadedModule;
-
- print "Now I can use extensions!\n"'
-
-B<ExtUtils::Embed> can also automate writing the I<xs_init> glue code.
-
- % perl -MExtUtils::Embed -e xsinit -- -o perlxsi.c
- % cc -c perlxsi.c `perl -MExtUtils::Embed -e ccopts`
- % cc -c interp.c `perl -MExtUtils::Embed -e ccopts`
- % cc -o interp perlxsi.o interp.o `perl -MExtUtils::Embed -e ldopts`
-
-Consult L<perlxs>, L<perlguts>, and L<perlapi> for more details.
-
-=head1 Embedding Perl under Win32
-
-In general, all of the source code shown here should work unmodified under
-Windows.
-
-However, there are some caveats about the command-line examples shown.
-For starters, backticks won't work under the Win32 native command shell.
-The ExtUtils::Embed kit on CPAN ships with a script called
-B<genmake>, which generates a simple makefile to build a program from
-a single C source file. It can be used like this:
-
- C:\ExtUtils-Embed\eg> perl genmake interp.c
- C:\ExtUtils-Embed\eg> nmake
- C:\ExtUtils-Embed\eg> interp -e "print qq{I'm embedded in Win32!\n}"
-
-You may wish to use a more robust environment such as the Microsoft
-Developer Studio. In this case, run this to generate perlxsi.c:
-
- perl -MExtUtils::Embed -e xsinit
-
-Create a new project and Insert -> Files into Project: perlxsi.c,
-perl.lib, and your own source files, e.g. interp.c. Typically you'll
-find perl.lib in B<C:\perl\lib\CORE>, if not, you should see the
-B<CORE> directory relative to C<perl -V:archlib>. The studio will
-also need this path so it knows where to find Perl include files.
-This path can be added via the Tools -> Options -> Directories menu.
-Finally, select Build -> Build interp.exe and you're ready to go.
-
-=head1 MORAL
-
-You can sometimes I<write faster code> in C, but
-you can always I<write code faster> in Perl. Because you can use
-each from the other, combine them as you wish.
-
-
-=head1 AUTHOR
-
-Jon Orwant <F<orwant@tpj.com>> and Doug MacEachern
-<F<dougm@osf.org>>, with small contributions from Tim Bunce, Tom
-Christiansen, Guy Decoux, Hallvard Furuseth, Dov Grobgeld, and Ilya
-Zakharevich.
-
-Doug MacEachern has an article on embedding in Volume 1, Issue 4 of
-The Perl Journal (http://tpj.com). Doug is also the developer of the
-most widely-used Perl embedding: the mod_perl system
-(perl.apache.org), which embeds Perl in the Apache web server.
-Oracle, Binary Evolution, ActiveState, and Ben Sugars's nsapi_perl
-have used this model for Oracle, Netscape and Internet Information
-Server Perl plugins.
-
-July 22, 1998
-
-=head1 COPYRIGHT
-
-Copyright (C) 1995, 1996, 1997, 1998 Doug MacEachern and Jon Orwant. All
-Rights Reserved.
-
-Permission is granted to make and distribute verbatim copies of this
-documentation provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-documentation under the conditions for verbatim copying, provided also
-that they are marked clearly as modified versions, that the authors'
-names and title are unchanged (though subtitles and additional
-authors' names may be added), and that the entire resulting derived
-work is distributed under the terms of a permission notice identical
-to this one.
-
-Permission is granted to copy and distribute translations of this
-documentation into another language, under the above conditions for
-modified versions.
diff --git a/contrib/perl5/pod/perlfaq.pod b/contrib/perl5/pod/perlfaq.pod
deleted file mode 100644
index bc29c69..0000000
--- a/contrib/perl5/pod/perlfaq.pod
+++ /dev/null
@@ -1,1430 +0,0 @@
-=head1 NAME
-
-perlfaq - frequently asked questions about Perl ($Date: 1999/05/23 20:38:02 $)
-
-=head1 DESCRIPTION
-
-The perlfaq is structured into the following documents:
-
-
-=head2 perlfaq: Structural overview of the FAQ.
-
-This document.
-
-=head2 L<perlfaq1>: General Questions About Perl
-
-Very general, high-level information about Perl.
-
-=over 4
-
-=item *
-
-What is Perl?
-
-=item *
-
-Who supports Perl? Who develops it? Why is it free?
-
-=item *
-
-Which version of Perl should I use?
-
-=item *
-
-What are perl4 and perl5?
-
-=item *
-
-What is perl6?
-
-=item *
-
-How stable is Perl?
-
-=item *
-
-Is Perl difficult to learn?
-
-=item *
-
-How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl?
-
-=item *
-
-Can I do [task] in Perl?
-
-=item *
-
-When shouldn't I program in Perl?
-
-=item *
-
-What's the difference between "perl" and "Perl"?
-
-=item *
-
-Is it a Perl program or a Perl script?
-
-=item *
-
-What is a JAPH?
-
-=item *
-
-Where can I get a list of Larry Wall witticisms?
-
-=item *
-
-How can I convince my sysadmin/supervisor/employees to use version 5/5.005/Perl instead of some other language?
-
-=back
-
-
-=head2 L<perlfaq2>: Obtaining and Learning about Perl
-
-Where to find source and documentation to Perl, support,
-and related matters.
-
-=over 4
-
-=item *
-
-What machines support Perl? Where do I get it?
-
-=item *
-
-How can I get a binary version of Perl?
-
-=item *
-
-I don't have a C compiler on my system. How can I compile perl?
-
-=item *
-
-I copied the Perl binary from one machine to another, but scripts don't work.
-
-=item *
-
-I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make it work?
-
-=item *
-
-What modules and extensions are available for Perl? What is CPAN? What does CPAN/src/... mean?
-
-=item *
-
-Is there an ISO or ANSI certified version of Perl?
-
-=item *
-
-Where can I get information on Perl?
-
-=item *
-
-What are the Perl newsgroups on Usenet? Where do I post questions?
-
-=item *
-
-Where should I post source code?
-
-=item *
-
-Perl Books
-
-=item *
-
-Perl in Magazines
-
-=item *
-
-Perl on the Net: FTP and WWW Access
-
-=item *
-
-What mailing lists are there for Perl?
-
-=item *
-
-Archives of comp.lang.perl.misc
-
-=item *
-
-Where can I buy a commercial version of Perl?
-
-=item *
-
-Where do I send bug reports?
-
-=item *
-
-What is perl.com? Perl Mongers? pm.org? perl.org?
-
-=back
-
-
-=head2 L<perlfaq3>: Programming Tools
-
-Programmer tools and programming support.
-
-=over 4
-
-=item *
-
-How do I do (anything)?
-
-=item *
-
-How can I use Perl interactively?
-
-=item *
-
-Is there a Perl shell?
-
-=item *
-
-How do I debug my Perl programs?
-
-=item *
-
-How do I profile my Perl programs?
-
-=item *
-
-How do I cross-reference my Perl programs?
-
-=item *
-
-Is there a pretty-printer (formatter) for Perl?
-
-=item *
-
-Is there a ctags for Perl?
-
-=item *
-
-Is there an IDE or Windows Perl Editor?
-
-=item *
-
-Where can I get Perl macros for vi?
-
-=item *
-
-Where can I get perl-mode for emacs?
-
-=item *
-
-How can I use curses with Perl?
-
-=item *
-
-How can I use X or Tk with Perl?
-
-=item *
-
-How can I generate simple menus without using CGI or Tk?
-
-=item *
-
-What is undump?
-
-=item *
-
-How can I make my Perl program run faster?
-
-=item *
-
-How can I make my Perl program take less memory?
-
-=item *
-
-Is it unsafe to return a pointer to local data?
-
-=item *
-
-How can I free an array or hash so my program shrinks?
-
-=item *
-
-How can I make my CGI script more efficient?
-
-=item *
-
-How can I hide the source for my Perl program?
-
-=item *
-
-How can I compile my Perl program into byte code or C?
-
-=item *
-
-How can I compile Perl into Java?
-
-=item *
-
-How can I get C<#!perl> to work on [MS-DOS,NT,...]?
-
-=item *
-
-Can I write useful Perl programs on the command line?
-
-=item *
-
-Why don't Perl one-liners work on my DOS/Mac/VMS system?
-
-=item *
-
-Where can I learn about CGI or Web programming in Perl?
-
-=item *
-
-Where can I learn about object-oriented Perl programming?
-
-=item *
-
-Where can I learn about linking C with Perl? [h2xs, xsubpp]
-
-=item *
-
-I've read perlembed, perlguts, etc., but I can't embed perl in
-my C program; what am I doing wrong?
-
-=item *
-
-When I tried to run my script, I got this message. What does it
-mean?
-
-=item *
-
-What's MakeMaker?
-
-=back
-
-
-=head2 L<perlfaq4>: Data Manipulation
-
-Manipulating numbers, dates, strings, arrays, hashes, and
-miscellaneous data issues.
-
-=over 4
-
-=item *
-
-Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
-
-=item *
-
-Why isn't my octal data interpreted correctly?
-
-=item *
-
-Does Perl have a round() function? What about ceil() and floor()? Trig functions?
-
-=item *
-
-How do I convert bits into ints?
-
-=item *
-
-Why doesn't & work the way I want it to?
-
-=item *
-
-How do I multiply matrices?
-
-=item *
-
-How do I perform an operation on a series of integers?
-
-=item *
-
-How can I output Roman numerals?
-
-=item *
-
-Why aren't my random numbers random?
-
-=item *
-
-How do I find the week-of-the-year/day-of-the-year?
-
-=item *
-
-How do I find the current century or millennium?
-
-=item *
-
-How can I compare two dates and find the difference?
-
-=item *
-
-How can I take a string and turn it into epoch seconds?
-
-=item *
-
-How can I find the Julian Day?
-
-=item *
-
-How do I find yesterday's date?
-
-=item *
-
-Does Perl have a Year 2000 problem? Is Perl Y2K compliant?
-
-=item *
-
-How do I validate input?
-
-=item *
-
-How do I unescape a string?
-
-=item *
-
-How do I remove consecutive pairs of characters?
-
-=item *
-
-How do I expand function calls in a string?
-
-=item *
-
-How do I find matching/nesting anything?
-
-=item *
-
-How do I reverse a string?
-
-=item *
-
-How do I expand tabs in a string?
-
-=item *
-
-How do I reformat a paragraph?
-
-=item *
-
-How can I access/change the first N letters of a string?
-
-=item *
-
-How do I change the Nth occurrence of something?
-
-=item *
-
-How can I count the number of occurrences of a substring within a string?
-
-=item *
-
-How do I capitalize all the words on one line?
-
-=item *
-
-How can I split a [character] delimited string except when inside
-[character]? (Comma-separated files)
-
-=item *
-
-How do I strip blank space from the beginning/end of a string?
-
-=item *
-
-How do I pad a string with blanks or pad a number with zeroes?
-
-=item *
-
-How do I extract selected columns from a string?
-
-=item *
-
-How do I find the soundex value of a string?
-
-=item *
-
-How can I expand variables in text strings?
-
-=item *
-
-What's wrong with always quoting "$vars"?
-
-=item *
-
-Why don't my <<HERE documents work?
-
-=item *
-
-What is the difference between a list and an array?
-
-=item *
-
-What is the difference between $array[1] and @array[1]?
-
-=item *
-
-How can I remove duplicate elements from a list or array?
-
-=item *
-
-How can I tell whether a list or array contains a certain element?
-
-=item *
-
-How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
-
-=item *
-
-How do I test whether two arrays or hashes are equal?
-
-=item *
-
-How do I find the first array element for which a condition is true?
-
-=item *
-
-How do I handle linked lists?
-
-=item *
-
-How do I handle circular lists?
-
-=item *
-
-How do I shuffle an array randomly?
-
-=item *
-
-How do I process/modify each element of an array?
-
-=item *
-
-How do I select a random element from an array?
-
-=item *
-
-How do I permute N elements of a list?
-
-=item *
-
-How do I sort an array by (anything)?
-
-=item *
-
-How do I manipulate arrays of bits?
-
-=item *
-
-Why does defined() return true on empty arrays and hashes?
-
-=item *
-
-How do I process an entire hash?
-
-=item *
-
-What happens if I add or remove keys from a hash while iterating over it?
-
-=item *
-
-How do I look up a hash element by value?
-
-=item *
-
-How can I know how many entries are in a hash?
-
-=item *
-
-How do I sort a hash (optionally by value instead of key)?
-
-=item *
-
-How can I always keep my hash sorted?
-
-=item *
-
-What's the difference between "delete" and "undef" with hashes?
-
-=item *
-
-Why don't my tied hashes make the defined/exists distinction?
-
-=item *
-
-How do I reset an each() operation part-way through?
-
-=item *
-
-How can I get the unique keys from two hashes?
-
-=item *
-
-How can I store a multidimensional array in a DBM file?
-
-=item *
-
-How can I make my hash remember the order I put elements into it?
-
-=item *
-
-Why does passing a subroutine an undefined element in a hash create it?
-
-=item *
-
-How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
-
-=item *
-
-How can I use a reference as a hash key?
-
-=item *
-
-How do I handle binary data correctly?
-
-=item *
-
-How do I determine whether a scalar is a number/whole/integer/float?
-
-=item *
-
-How do I keep persistent data across program calls?
-
-=item *
-
-How do I print out or copy a recursive data structure?
-
-=item *
-
-How do I define methods for every class/object?
-
-=item *
-
-How do I verify a credit card checksum?
-
-=item *
-
-How do I pack arrays of doubles or floats for XS code?
-
-=back
-
-
-=head2 L<perlfaq5>: Files and Formats
-
-I/O and the "f" issues: filehandles, flushing, formats and footers.
-
-=over 4
-
-=item *
-
-How do I flush/unbuffer an output filehandle? Why must I do this?
-
-=item *
-
-How do I change one line in a file/delete a line in a file/insert a line in the middle of a file/append to the beginning of a file?
-
-=item *
-
-How do I count the number of lines in a file?
-
-=item *
-
-How do I make a temporary file name?
-
-=item *
-
-How can I manipulate fixed-record-length files?
-
-=item *
-
-How can I make a filehandle local to a subroutine? How do I pass filehandles between subroutines? How do I make an array of filehandles?
-
-=item *
-
-How can I use a filehandle indirectly?
-
-=item *
-
-How can I set up a footer format to be used with write()?
-
-=item *
-
-How can I write() into a string?
-
-=item *
-
-How can I output my numbers with commas added?
-
-=item *
-
-How can I translate tildes (~) in a filename?
-
-=item *
-
-How come when I open a file read-write it wipes it out?
-
-=item *
-
-Why do I sometimes get an "Argument list too long" when I use <*>?
-
-=item *
-
-Is there a leak/bug in glob()?
-
-=item *
-
-How can I open a file with a leading ">" or trailing blanks?
-
-=item *
-
-How can I reliably rename a file?
-
-=item *
-
-How can I lock a file?
-
-=item *
-
-Why can't I just open(FH, ">file.lock")?
-
-=item *
-
-I still don't get locking. I just want to increment the number in the file. How can I do this?
-
-=item *
-
-How do I randomly update a binary file?
-
-=item *
-
-How do I get a file's timestamp in perl?
-
-=item *
-
-How do I set a file's timestamp in perl?
-
-=item *
-
-How do I print to more than one file at once?
-
-=item *
-
-How can I read in an entire file all at once?
-
-=item *
-
-How can I read in a file by paragraphs?
-
-=item *
-
-How can I read a single character from a file? From the keyboard?
-
-=item *
-
-How can I tell whether there's a character waiting on a filehandle?
-
-=item *
-
-How do I do a C<tail -f> in perl?
-
-=item *
-
-How do I dup() a filehandle in Perl?
-
-=item *
-
-How do I close a file descriptor by number?
-
-=item *
-
-Why can't I use "C:\temp\foo" in DOS paths? What doesn't `C:\temp\foo.exe` work?
-
-=item *
-
-Why doesn't glob("*.*") get all the files?
-
-=item *
-
-Why does Perl let me delete read-only files? Why does C<-i> clobber protected files? Isn't this a bug in Perl?
-
-=item *
-
-How do I select a random line from a file?
-
-=item *
-
-Why do I get weird spaces when I print an array of lines?
-
-=back
-
-
-=head2 L<perlfaq6>: Regexps
-
-Pattern matching and regular expressions.
-
-=over 4
-
-=item *
-
-How can I hope to use regular expressions without creating illegible and unmaintainable code?
-
-=item *
-
-I'm having trouble matching over more than one line. What's wrong?
-
-=item *
-
-How can I pull out lines between two patterns that are themselves on different lines?
-
-=item *
-
-I put a regular expression into $/ but it didn't work. What's wrong?
-
-=item *
-
-How do I substitute case insensitively on the LHS while preserving case on the RHS?
-
-=item *
-
-How can I make C<\w> match national character sets?
-
-=item *
-
-How can I match a locale-smart version of C</[a-zA-Z]/>?
-
-=item *
-
-How can I quote a variable to use in a regex?
-
-=item *
-
-What is C</o> really for?
-
-=item *
-
-How do I use a regular expression to strip C style comments from a file?
-
-=item *
-
-Can I use Perl regular expressions to match balanced text?
-
-=item *
-
-What does it mean that regexes are greedy? How can I get around it?
-
-=item *
-
-How do I process each word on each line?
-
-=item *
-
-How can I print out a word-frequency or line-frequency summary?
-
-=item *
-
-How can I do approximate matching?
-
-=item *
-
-How do I efficiently match many regular expressions at once?
-
-=item *
-
-Why don't word-boundary searches with C<\b> work for me?
-
-=item *
-
-Why does using $&, $`, or $' slow my program down?
-
-=item *
-
-What good is C<\G> in a regular expression?
-
-=item *
-
-Are Perl regexes DFAs or NFAs? Are they POSIX compliant?
-
-=item *
-
-What's wrong with using grep or map in a void context?
-
-=item *
-
-How can I match strings with multibyte characters?
-
-=item *
-
-How do I match a pattern that is supplied by the user?
-
-=back
-
-
-=head2 L<perlfaq7>: General Perl Language Issues
-
-General Perl language issues that don't clearly fit into any of the
-other sections.
-
-=over 4
-
-=item *
-
-Can I get a BNF/yacc/RE for the Perl language?
-
-=item *
-
-What are all these $@%&* punctuation signs, and how do I know when to use them?
-
-=item *
-
-Do I always/never have to quote my strings or use semicolons and commas?
-
-=item *
-
-How do I skip some return values?
-
-=item *
-
-How do I temporarily block warnings?
-
-=item *
-
-What's an extension?
-
-=item *
-
-Why do Perl operators have different precedence than C operators?
-
-=item *
-
-How do I declare/create a structure?
-
-=item *
-
-How do I create a module?
-
-=item *
-
-How do I create a class?
-
-=item *
-
-How can I tell if a variable is tainted?
-
-=item *
-
-What's a closure?
-
-=item *
-
-What is variable suicide and how can I prevent it?
-
-=item *
-
-How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}?
-
-=item *
-
-How do I create a static variable?
-
-=item *
-
-What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
-
-=item *
-
-How can I access a dynamic variable while a similarly named lexical is in scope?
-
-=item *
-
-What's the difference between deep and shallow binding?
-
-=item *
-
-Why doesn't "my($foo) = <FILE>;" work right?
-
-=item *
-
-How do I redefine a builtin function, operator, or method?
-
-=item *
-
-What's the difference between calling a function as &foo and foo()?
-
-=item *
-
-How do I create a switch or case statement?
-
-=item *
-
-How can I catch accesses to undefined variables/functions/methods?
-
-=item *
-
-Why can't a method included in this same file be found?
-
-=item *
-
-How can I find out my current package?
-
-=item *
-
-How can I comment out a large block of perl code?
-
-=item *
-
-How do I clear a package?
-
-=item *
-
-How can I use a variable as a variable name?
-
-=back
-
-
-=head2 L<perlfaq8>: System Interaction
-
-Interprocess communication (IPC), control over the user-interface
-(keyboard, screen and pointing devices).
-
-=over 4
-
-=item *
-
-How do I find out which operating system I'm running under?
-
-=item *
-
-How come exec() doesn't return?
-
-=item *
-
-How do I do fancy stuff with the keyboard/screen/mouse?
-
-=item *
-
-How do I print something out in color?
-
-=item *
-
-How do I read just one key without waiting for a return key?
-
-=item *
-
-How do I check whether input is ready on the keyboard?
-
-=item *
-
-How do I clear the screen?
-
-=item *
-
-How do I get the screen size?
-
-=item *
-
-How do I ask the user for a password?
-
-=item *
-
-How do I read and write the serial port?
-
-=item *
-
-How do I decode encrypted password files?
-
-=item *
-
-How do I start a process in the background?
-
-=item *
-
-How do I trap control characters/signals?
-
-=item *
-
-How do I modify the shadow password file on a Unix system?
-
-=item *
-
-How do I set the time and date?
-
-=item *
-
-How can I sleep() or alarm() for under a second?
-
-=item *
-
-How can I measure time under a second?
-
-=item *
-
-How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
-
-=item *
-
-Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
-
-=item *
-
-How can I call my system's unique C functions from Perl?
-
-=item *
-
-Where do I get the include files to do ioctl() or syscall()?
-
-=item *
-
-Why do setuid perl scripts complain about kernel problems?
-
-=item *
-
-How can I open a pipe both to and from a command?
-
-=item *
-
-Why can't I get the output of a command with system()?
-
-=item *
-
-How can I capture STDERR from an external command?
-
-=item *
-
-Why doesn't open() return an error when a pipe open fails?
-
-=item *
-
-What's wrong with using backticks in a void context?
-
-=item *
-
-How can I call backticks without shell processing?
-
-=item *
-
-Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
-
-=item *
-
-How can I convert my shell script to perl?
-
-=item *
-
-Can I use perl to run a telnet or ftp session?
-
-=item *
-
-How can I write expect in Perl?
-
-=item *
-
-Is there a way to hide perl's command line from programs such as "ps"?
-
-=item *
-
-I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?
-
-=item *
-
-How do I close a process's filehandle without waiting for it to complete?
-
-=item *
-
-How do I fork a daemon process?
-
-=item *
-
-How do I find out if I'm running interactively or not?
-
-=item *
-
-How do I timeout a slow event?
-
-=item *
-
-How do I set CPU limits?
-
-=item *
-
-How do I avoid zombies on a Unix system?
-
-=item *
-
-How do I use an SQL database?
-
-=item *
-
-How do I make a system() exit on control-C?
-
-=item *
-
-How do I open a file without blocking?
-
-=item *
-
-How do I install a module from CPAN?
-
-=item *
-
-What's the difference between require and use?
-
-=item *
-
-How do I keep my own module/library directory?
-
-=item *
-
-How do I add the directory my program lives in to the module/library search path?
-
-=item *
-
-How do I add a directory to my include path at runtime?
-
-=item *
-
-What is socket.ph and where do I get it?
-
-=back
-
-
-=head2 L<perlfaq9>: Networking
-
-Networking, the Internet, and a few on the web.
-
-=over 4
-
-=item *
-
-My CGI script runs from the command line but not the browser. (500 Server Error)
-
-=item *
-
-How can I get better error messages from a CGI program?
-
-=item *
-
-How do I remove HTML from a string?
-
-=item *
-
-How do I extract URLs?
-
-=item *
-
-How do I download a file from the user's machine? How do I open a file on another machine?
-
-=item *
-
-How do I make a pop-up menu in HTML?
-
-=item *
-
-How do I fetch an HTML file?
-
-=item *
-
-How do I automate an HTML form submission?
-
-=item *
-
-How do I decode or create those %-encodings on the web?
-
-=item *
-
-How do I redirect to another page?
-
-=item *
-
-How do I put a password on my web pages?
-
-=item *
-
-How do I edit my .htpasswd and .htgroup files with Perl?
-
-=item *
-
-How do I make sure users can't enter values into a form that cause my CGI script to do bad things?
-
-=item *
-
-How do I parse a mail header?
-
-=item *
-
-How do I decode a CGI form?
-
-=item *
-
-How do I check a valid mail address?
-
-=item *
-
-How do I decode a MIME/BASE64 string?
-
-=item *
-
-How do I return the user's mail address?
-
-=item *
-
-How do I send mail?
-
-=item *
-
-How do I read mail?
-
-=item *
-
-How do I find out my hostname/domainname/IP address?
-
-=item *
-
-How do I fetch a news article or the active newsgroups?
-
-=item *
-
-How do I fetch/put an FTP file?
-
-=item *
-
-How can I do RPC in Perl?
-
-=back
-
-
-=head1 About the perlfaq documents
-
-=head2 Where to get the perlfaq
-
-This document is posted regularly to comp.lang.perl.announce and
-several other related newsgroups. It is available in a variety of
-formats from CPAN in the /CPAN/doc/FAQs/FAQ/ directory or on the web
-at http://www.perl.com/perl/faq/ .
-
-=head2 How to contribute to the perlfaq
-
-You may mail corrections, additions, and suggestions to
-perlfaq-suggestions@perl.com . This alias should not be
-used to I<ask> FAQs. It's for fixing the current FAQ.
-Send questions to the comp.lang.perl.misc newsgroup.
-
-=head2 What will happen if you mail your Perl programming problems to the authors
-
-Your questions will probably go unread, unless they're suggestions of
-new questions to add to the FAQ, in which case they should have gone
-to the perlfaq-suggestions@perl.com instead.
-
-You should have read section 2 of this faq. There you would have
-learned that comp.lang.perl.misc is the appropriate place to go for
-free advice. If your question is really important and you require a
-prompt and correct answer, you should hire a consultant.
-
-=head1 Credits
-
-When I first began the Perl FAQ in the late 80s, I never realized it
-would have grown to over a hundred pages, nor that Perl would ever become
-so popular and widespread. This document could not have been written
-without the tremendous help provided by Larry Wall and the rest of the
-Perl Porters.
-
-=head1 Author and Copyright Information
-
-Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-=head2 Bundled Distributions
-
-When included as part of the Standard Version of Perl or as part of
-its complete documentation whether printed or otherwise, this work
-may be distributed only under the terms of Perl's Artistic License.
-Any distribution of this file or derivatives thereof I<outside>
-of that package requires that special arrangements be made with
-copyright holder.
-
-Irrespective of its distribution, all code examples in these files
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
-
-=head2 Disclaimer
-
-This information is offered in good faith and in the hope that it may
-be of use, but is not guaranteed to be correct, up to date, or suitable
-for any particular purpose whatsoever. The authors accept no liability
-in respect of this information or its use.
-
-=head1 Changes
-
-=over 4
-
-=item 1/November/2000
-
-A few grammatical fixes and updates implemented by John Borwick.
-
-=item 23/May/99
-
-Extensive updates from the net in preparation for 5.6 release.
-
-=item 13/April/99
-
-More minor touch-ups. Added new question at the end
-of perlfaq7 on variable names within variables.
-
-=item 7/January/99
-
-Small touchups here and there. Added all questions in this
-document as a sort of table of contents.
-
-=item 22/June/98
-
-Significant changes throughout in preparation for the 5.005
-release.
-
-=item 24/April/97
-
-Style and whitespace changes from Chip, new question on reading one
-character at a time from a terminal using POSIX from Tom.
-
-=item 23/April/97
-
-Added http://www.oasis.leo.org/perl/ to L<perlfaq2>. Style fix to
-L<perlfaq3>. Added floating point precision, fixed complex number
-arithmetic, cross-references, caveat for Text::Wrap, alternative
-answer for initial capitalizing, fixed incorrect regexp, added example
-of Tie::IxHash to L<perlfaq4>. Added example of passing and storing
-filehandles, added commify to L<perlfaq5>. Restored variable suicide,
-and added mass commenting to L<perlfaq7>. Added Net::Telnet, fixed
-backticks, added reader/writer pair to telnet question, added FindBin,
-grouped module questions together in L<perlfaq8>. Expanded caveats
-for the simple URL extractor, gave LWP example, added CGI security
-question, expanded on the mail address answer in L<perlfaq9>.
-
-=item 25/March/97
-
-Added more info to the binary distribution section of L<perlfaq2>.
-Added Net::Telnet to L<perlfaq6>. Fixed typos in L<perlfaq8>. Added
-mail sending example to L<perlfaq9>. Added Merlyn's columns to
-L<perlfaq2>.
-
-=item 18/March/97
-
-Added the DATE to the NAME section, indicating which sections have
-changed.
-
-Mentioned SIGPIPE and L<perlipc> in the forking open answer in
-L<perlfaq8>.
-
-Fixed description of a regular expression in L<perlfaq4>.
-
-=item 17/March/97 Version
-
-Various typos fixed throughout.
-
-Added new question on Perl BNF on L<perlfaq7>.
-
-=item Initial Release: 11/March/97
-
-This is the initial release of version 3 of the FAQ; consequently there
-have been no changes since its initial release.
-
-=back
diff --git a/contrib/perl5/pod/perlfaq1.pod b/contrib/perl5/pod/perlfaq1.pod
deleted file mode 100644
index 68c6bfd..0000000
--- a/contrib/perl5/pod/perlfaq1.pod
+++ /dev/null
@@ -1,328 +0,0 @@
-=head1 NAME
-
-perlfaq1 - General Questions About Perl ($Revision: 1.23 $, $Date: 1999/05/23 16:08:30 $)
-
-=head1 DESCRIPTION
-
-This section of the FAQ answers very general, high-level questions
-about Perl.
-
-=head2 What is Perl?
-
-Perl is a high-level programming language with an eclectic heritage
-written by Larry Wall and a cast of thousands. It derives from the
-ubiquitous C programming language and to a lesser extent from sed,
-awk, the Unix shell, and at least a dozen other tools and languages.
-Perl's process, file, and text manipulation facilities make it
-particularly well-suited for tasks involving quick prototyping, system
-utilities, software tools, system management tasks, database access,
-graphical programming, networking, and world wide web programming.
-These strengths make it especially popular with system administrators
-and CGI script authors, but mathematicians, geneticists, journalists,
-and even managers also use Perl. Maybe you should, too.
-
-=head2 Who supports Perl? Who develops it? Why is it free?
-
-The original culture of the pre-populist Internet and the deeply-held
-beliefs of Perl's author, Larry Wall, gave rise to the free and open
-distribution policy of perl. Perl is supported by its users. The
-core, the standard Perl library, the optional modules, and the
-documentation you're reading now were all written by volunteers. See
-the personal note at the end of the README file in the perl source
-distribution for more details. See L<perlhist> (new as of 5.005)
-for Perl's milestone releases.
-
-In particular, the core development team (known as the Perl Porters)
-are a rag-tag band of highly altruistic individuals committed
-to producing better software for free than you could hope to
-purchase for money. You may snoop on pending developments via
-nntp://news.perl.com/perl.porters-gw/ and the Deja archive at
-http://www.deja.com/ using the perl.porters-gw newsgroup, or you can
-subscribe to the mailing list by sending perl5-porters-request@perl.org
-a subscription request.
-
-While the GNU project includes Perl in its distributions, there's no
-such thing as "GNU Perl". Perl is not produced nor maintained by the
-Free Software Foundation. Perl's licensing terms are also more open
-than GNU software's tend to be.
-
-You can get commercial support of Perl if you wish, although for most
-users the informal support will more than suffice. See the answer to
-"Where can I buy a commercial version of perl?" for more information.
-
-=head2 Which version of Perl should I use?
-
-You should definitely use version 5. Version 4 is old, limited, and
-no longer maintained; its last patch (4.036) was in 1992, long ago and
-far away. Sure, it's stable, but so is anything that's dead; in fact,
-perl4 had been called a dead, flea-bitten camel carcass. The most recent
-production release is 5.6 (although 5.005_03 is still supported).
-The most cutting-edge development release is 5.7. Further references
-to the Perl language in this document refer to the production release
-unless otherwise specified. There may be one or more official bug fixes
-by the time you read this, and also perhaps some experimental versions
-on the way to the next release. All releases prior to 5.004 were subject
-to buffer overruns, a grave security issue.
-
-=head2 What are perl4 and perl5?
-
-Perl4 and perl5 are informal names for different versions of the Perl
-programming language. It's easier to say "perl5" than it is to say
-"the 5(.004) release of Perl", but some people have interpreted this
-to mean there's a language called "perl5", which isn't the case.
-Perl5 is merely the popular name for the fifth major release (October 1994),
-while perl4 was the fourth major release (March 1991). There was also a
-perl1 (in January 1988), a perl2 (June 1988), and a perl3 (October 1989).
-
-The 5.0 release is, essentially, a ground-up rewrite of the original
-perl source code from releases 1 through 4. It has been modularized,
-object-oriented, tweaked, trimmed, and optimized until it almost doesn't
-look like the old code. However, the interface is mostly the same, and
-compatibility with previous releases is very high.
-See L<perltrap/"Perl4 to Perl5 Traps">.
-
-To avoid the "what language is perl5?" confusion, some people prefer to
-simply use "perl" to refer to the latest version of perl and avoid using
-"perl5" altogether. It's not really that big a deal, though.
-
-See L<perlhist> for a history of Perl revisions.
-
-=head2 What is perl6?
-
-At The Second O'Reilly Open Source Software Convention, Larry Wall
-announced Perl6 development would begin in earnest. Perl6 was an oft
-used term for Chip Salzenberg's project to rewrite Perl in C++ named
-Topaz. However, Topaz should not be confused with the nisus to rewrite
-Perl while keeping the lessons learned from other software, as well as
-Perl5, in mind.
-
-If you have a desire to help in the crusade to make Perl a better place
-then peruse the Perl6 developers page at http://www.perl.org/perl6/ and
-get involved.
-
-The first alpha release is expected by Summer 2001.
-
-"We're really serious about reinventing everything that needs reinventing."
---Larry Wall
-
-=head2 How stable is Perl?
-
-Production releases, which incorporate bug fixes and new functionality,
-are widely tested before release. Since the 5.000 release, we have
-averaged only about one production release per year.
-
-Larry and the Perl development team occasionally make changes to the
-internal core of the language, but all possible efforts are made toward
-backward compatibility. While not quite all perl4 scripts run flawlessly
-under perl5, an update to perl should nearly never invalidate a program
-written for an earlier version of perl (barring accidental bug fixes
-and the rare new keyword).
-
-=head2 Is Perl difficult to learn?
-
-No, Perl is easy to start learning--and easy to keep learning. It looks
-like most programming languages you're likely to have experience
-with, so if you've ever written a C program, an awk script, a shell
-script, or even a BASIC program, you're already partway there.
-
-Most tasks only require a small subset of the Perl language. One of
-the guiding mottos for Perl development is "there's more than one way
-to do it" (TMTOWTDI, sometimes pronounced "tim toady"). Perl's
-learning curve is therefore shallow (easy to learn) and long (there's
-a whole lot you can do if you really want).
-
-Finally, because Perl is frequently (but not always, and certainly not by
-definition) an interpreted language, you can write your programs and test
-them without an intermediate compilation step, allowing you to experiment
-and test/debug quickly and easily. This ease of experimentation flattens
-the learning curve even more.
-
-Things that make Perl easier to learn: Unix experience, almost any kind
-of programming experience, an understanding of regular expressions, and
-the ability to understand other people's code. If there's something you
-need to do, then it's probably already been done, and a working example is
-usually available for free. Don't forget the new perl modules, either.
-They're discussed in Part 3 of this FAQ, along with CPAN, which is
-discussed in Part 2.
-
-=head2 How does Perl compare with other languages like Java, Python, REXX, Scheme, or Tcl?
-
-Favorably in some areas, unfavorably in others. Precisely which areas
-are good and bad is often a personal choice, so asking this question
-on Usenet runs a strong risk of starting an unproductive Holy War.
-
-Probably the best thing to do is try to write equivalent code to do a
-set of tasks. These languages have their own newsgroups in which you
-can learn about (but hopefully not argue about) them.
-
-Some comparison documents can be found at http://language.perl.com/versus/
-if you really can't stop yourself.
-
-=head2 Can I do [task] in Perl?
-
-Perl is flexible and extensible enough for you to use on virtually any
-task, from one-line file-processing tasks to large, elaborate systems.
-For many people, Perl serves as a great replacement for shell scripting.
-For others, it serves as a convenient, high-level replacement for most of
-what they'd program in low-level languages like C or C++. It's ultimately
-up to you (and possibly your management) which tasks you'll use Perl
-for and which you won't.
-
-If you have a library that provides an API, you can make any component
-of it available as just another Perl function or variable using a Perl
-extension written in C or C++ and dynamically linked into your main
-perl interpreter. You can also go the other direction, and write your
-main program in C or C++, and then link in some Perl code on the fly,
-to create a powerful application. See L<perlembed>.
-
-That said, there will always be small, focused, special-purpose
-languages dedicated to a specific problem domain that are simply more
-convenient for certain kinds of problems. Perl tries to be all things
-to all people, but nothing special to anyone. Examples of specialized
-languages that come to mind include prolog and matlab.
-
-=head2 When shouldn't I program in Perl?
-
-When your manager forbids it--but do consider replacing them :-).
-
-Actually, one good reason is when you already have an existing
-application written in another language that's all done (and done
-well), or you have an application language specifically designed for a
-certain task (e.g. prolog, make).
-
-For various reasons, Perl is probably not well-suited for real-time
-embedded systems, low-level operating systems development work like
-device drivers or context-switching code, complex multi-threaded
-shared-memory applications, or extremely large applications. You'll
-notice that perl is not itself written in Perl.
-
-The new, native-code compiler for Perl may eventually reduce the
-limitations given in the previous statement to some degree, but understand
-that Perl remains fundamentally a dynamically typed language, not
-a statically typed one. You certainly won't be chastised if you don't
-trust nuclear-plant or brain-surgery monitoring code to it. And Larry
-will sleep easier, too--Wall Street programs not withstanding. :-)
-
-=head2 What's the difference between "perl" and "Perl"?
-
-One bit. Oh, you weren't talking ASCII? :-) Larry now uses "Perl" to
-signify the language proper and "perl" the implementation of it,
-i.e. the current interpreter. Hence Tom's quip that "Nothing but perl
-can parse Perl." You may or may not choose to follow this usage. For
-example, parallelism means "awk and perl" and "Python and Perl" look
-OK, while "awk and Perl" and "Python and perl" do not. But never
-write "PERL", because perl isn't really an acronym, apocryphal
-folklore and post-facto expansions notwithstanding.
-
-=head2 Is it a Perl program or a Perl script?
-
-Larry doesn't really care. He says (half in jest) that "a script is
-what you give the actors. A program is what you give the audience."
-
-Originally, a script was a canned sequence of normally interactive
-commands--that is, a chat script. Something like a UUCP or PPP chat
-script or an expect script fits the bill nicely, as do configuration
-scripts run by a program at its start up, such F<.cshrc> or F<.ircrc>,
-for example. Chat scripts were just drivers for existing programs,
-not stand-alone programs in their own right.
-
-A computer scientist will correctly explain that all programs are
-interpreted and that the only question is at what level. But if you
-ask this question of someone who isn't a computer scientist, they might
-tell you that a I<program> has been compiled to physical machine code
-once and can then be run multiple times, whereas a I<script> must be
-translated by a program each time it's used.
-
-Perl programs are (usually) neither strictly compiled nor strictly
-interpreted. They can be compiled to a byte-code form (something of a
-Perl virtual machine) or to completely different languages, like C or
-assembly language. You can't tell just by looking at it whether the
-source is destined for a pure interpreter, a parse-tree interpreter,
-a byte-code interpreter, or a native-code compiler, so it's hard to give
-a definitive answer here.
-
-Now that "script" and "scripting" are terms that have been seized by
-unscrupulous or unknowing marketeers for their own nefarious purposes,
-they have begun to take on strange and often pejorative meanings,
-like "non serious" or "not real programming". Consequently, some Perl
-programmers prefer to avoid them altogether.
-
-=head2 What is a JAPH?
-
-These are the "just another perl hacker" signatures that some people
-sign their postings with. Randal Schwartz made these famous. About
-100 of the earlier ones are available from
-http://www.perl.com/CPAN/misc/japh .
-
-=head2 Where can I get a list of Larry Wall witticisms?
-
-Over a hundred quips by Larry, from postings of his or source code,
-can be found at http://www.perl.com/CPAN/misc/lwall-quotes.txt.gz .
-
-Newer examples can be found by perusing Larry's postings:
-
- http://x1.dejanews.com/dnquery.xp?QRY=*&DBS=2&ST=PS&defaultOp=AND&LNG=ALL&format=terse&showsort=date&maxhits=100&subjects=&groups=&authors=larry@*wall.org&fromdate=&todate=
-
-=head2 How can I convince my sysadmin/supervisor/employees to use version 5/5.005/Perl instead of some other language?
-
-If your manager or employees are wary of unsupported software, or
-software which doesn't officially ship with your operating system, you
-might try to appeal to their self-interest. If programmers can be
-more productive using and utilizing Perl constructs, functionality,
-simplicity, and power, then the typical manager/supervisor/employee
-may be persuaded. Regarding using Perl in general, it's also
-sometimes helpful to point out that delivery times may be reduced
-using Perl compared to other languages.
-
-If you have a project which has a bottleneck, especially in terms of
-translation or testing, Perl almost certainly will provide a viable,
-quick solution. In conjunction with any persuasion effort, you
-should not fail to point out that Perl is used, quite extensively, and
-with extremely reliable and valuable results, at many large computer
-software and hardware companies throughout the world. In fact,
-many Unix vendors now ship Perl by default. Support is usually
-just a news-posting away, if you can't find the answer in the
-I<comprehensive> documentation, including this FAQ.
-
-See http://www.perl.org/advocacy/ for more information.
-
-If you face reluctance to upgrading from an older version of perl,
-then point out that version 4 is utterly unmaintained and unsupported
-by the Perl Development Team. Another big sell for Perl5 is the large
-number of modules and extensions which greatly reduce development time
-for any given task. Also mention that the difference between version
-4 and version 5 of Perl is like the difference between awk and C++.
-(Well, OK, maybe it's not quite that distinct, but you get the idea.)
-If you want support and a reasonable guarantee that what you're
-developing will continue to work in the future, then you have to run
-the supported version. As of April 2001 that probably means
-running either of the releases 5.6.1 (released in April 2001) or
-5.005_03 (released in March 1999), although 5.004_05 isn't that bad
-if you B<absolutely> need such an old version (released in April 1999)
-for stability reasons. Anything older than 5.004_05 shouldn't be used.
-
-Of particular note is the massive bug hunt for buffer overflow
-problems that went into the 5.004 release. All releases prior to
-that, including perl4, are considered insecure and should be upgraded
-as soon as possible.
-
-In August 2000 in all Linux distributions a new security problem was
-found in the optional 'suidperl' (not built or installed by default)
-in all the Perl branches 5.6, 5.005, and 5.004, see
-http://www.cpan.org/src/5.0/sperl-2000-08-05/
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen and Nathan
-Torkington. All rights reserved.
-
-When included as an integrated part of the Standard Distribution
-of Perl or of its documentation (printed or otherwise), this works is
-covered under Perl's Artistic Licence. For separate distributions of
-all or part of this FAQ outside of that, see L<perlfaq>.
-
-Irrespective of its distribution, all code examples here are in the public
-domain. You are permitted and encouraged to use this code and any
-derivatives thereof in your own programs for fun or for profit as you
-see fit. A simple comment in the code giving credit to the FAQ would
-be courteous but is not required.
diff --git a/contrib/perl5/pod/perlfaq2.pod b/contrib/perl5/pod/perlfaq2.pod
deleted file mode 100644
index aecc1fc..0000000
--- a/contrib/perl5/pod/perlfaq2.pod
+++ /dev/null
@@ -1,532 +0,0 @@
-=head1 NAME
-
-perlfaq2 - Obtaining and Learning about Perl ($Revision: 1.32 $, $Date: 1999/10/14 18:46:09 $)
-
-=head1 DESCRIPTION
-
-This section of the FAQ answers questions about where to find
-source and documentation for Perl, support, and
-related matters.
-
-=head2 What machines support Perl? Where do I get it?
-
-The standard release of Perl (the one maintained by the perl
-development team) is distributed only in source code form. You
-can find this at http://www.cpan.org/src/latest.tar.gz , which
-is in a standard Internet format (a gzipped archive in POSIX tar format).
-
-Perl builds and runs on a bewildering number of platforms. Virtually
-all known and current Unix derivatives are supported (Perl's native
-platform), as are other systems like VMS, DOS, OS/2, Windows,
-QNX, BeOS, OS X, MPE/iX and the Amiga.
-
-Binary distributions for some proprietary platforms, including
-Apple systems, can be found http://www.cpan.org/ports/ directory.
-Because these are not part of the standard distribution, they may
-and in fact do differ from the base Perl port in a variety of ways.
-You'll have to check their respective release notes to see just
-what the differences are. These differences can be either positive
-(e.g. extensions for the features of the particular platform that
-are not supported in the source release of perl) or negative (e.g.
-might be based upon a less current source release of perl).
-
-=head2 How can I get a binary version of Perl?
-
-If you don't have a C compiler because your vendor for whatever
-reasons did not include one with your system, the best thing to do is
-grab a binary version of gcc from the net and use that to compile perl
-with. CPAN only has binaries for systems that are terribly hard to
-get free compilers for, not for Unix systems.
-
-Some URLs that might help you are:
-
- http://www.cpan.org/ports/
- http://language.perl.com/info/software.html
-
-Someone looking for a Perl for Win16 might look to Laszlo Molnar's djgpp
-port in http://www.cpan.org/ports/#msdos , which comes with clear
-installation instructions. A simple installation guide for MS-DOS using
-Ilya Zakharevich's OS/2 port is available at
-http://www.cs.ruu.nl/%7Epiet/perl5dos.html
-and similarly for Windows 3.1 at http://www.cs.ruu.nl/%7Epiet/perlwin3.html .
-
-=head2 I don't have a C compiler on my system. How can I compile perl?
-
-Since you don't have a C compiler, you're doomed and your vendor
-should be sacrificed to the Sun gods. But that doesn't help you.
-
-What you need to do is get a binary version of gcc for your system
-first. Consult the Usenet FAQs for your operating system for
-information on where to get such a binary version.
-
-=head2 I copied the Perl binary from one machine to another, but scripts don't work.
-
-That's probably because you forgot libraries, or library paths differ.
-You really should build the whole distribution on the machine it will
-eventually live on, and then type C<make install>. Most other
-approaches are doomed to failure.
-
-One simple way to check that things are in the right place is to print out
-the hard-coded @INC that perl looks through for libraries:
-
- % perl -e 'print join("\n",@INC)'
-
-If this command lists any paths that don't exist on your system, then you
-may need to move the appropriate libraries to these locations, or create
-symbolic links, aliases, or shortcuts appropriately. @INC is also printed as
-part of the output of
-
- % perl -V
-
-You might also want to check out
-L<perlfaq8/"How do I keep my own module/library directory?">.
-
-=head2 I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make it work?
-
-Read the F<INSTALL> file, which is part of the source distribution.
-It describes in detail how to cope with most idiosyncrasies that the
-Configure script can't work around for any given system or
-architecture.
-
-=head2 What modules and extensions are available for Perl? What is CPAN? What does CPAN/src/... mean?
-
-CPAN stands for Comprehensive Perl Archive Network, a ~700mb archive
-replicated on nearly 200 machines all over the world. CPAN contains
-source code, non-native ports, documentation, scripts, and many
-third-party modules and extensions, designed for everything from
-commercial database interfaces to keyboard/screen control to web
-walking and CGI scripts. The master web site for CPAN is
-http://www.cpan.org/ and there is the CPAN Multiplexer at
-http://www.perl.com/CPAN/CPAN.html which will choose a mirror near you
-via DNS. See http://www.perl.com/CPAN (without a slash at the
-end) for how this process works. Also, http://mirror.cpan.org/
-has a nice interface to the http://www.cpan.org/MIRRORED.BY
-mirror directory.
-
-See the CPAN FAQ at http://www.cpan.org/misc/cpan-faq.html for
-answers to the most frequently asked questions about CPAN
-including how to become a mirror.
-
-CPAN/path/... is a naming convention for files available on CPAN
-sites. CPAN indicates the base directory of a CPAN mirror, and the
-rest of the path is the path from that directory to the file. For
-instance, if you're using ftp://ftp.funet.fi/pub/languages/perl/CPAN
-as your CPAN site, the file CPAN/misc/japh is downloadable as
-ftp://ftp.funet.fi/pub/languages/perl/CPAN/misc/japh .
-
-Considering that there are close to two thousand existing modules in
-the archive, one probably exists to do nearly anything you can think of.
-Current categories under CPAN/modules/by-category/ include Perl core
-modules; development support; operating system interfaces; networking,
-devices, and interprocess communication; data type utilities; database
-interfaces; user interfaces; interfaces to other languages; filenames,
-file systems, and file locking; internationalization and locale; world
-wide web support; server and daemon utilities; archiving and
-compression; image manipulation; mail and news; control flow
-utilities; filehandle and I/O; Microsoft Windows modules; and
-miscellaneous modules.
-
-See http://www.cpan.org/modules/00modlist.long.html or
-http://search.cpan.org/ for a more complete list of modules by category.
-
-
-=head2 Is there an ISO or ANSI certified version of Perl?
-
-Certainly not. Larry expects that he'll be certified before Perl is.
-
-=head2 Where can I get information on Perl?
-
-The complete Perl documentation is available with the Perl distribution.
-If you have Perl installed locally, you probably have the documentation
-installed as well: type C<man perl> if you're on a system resembling Unix.
-This will lead you to other important man pages, including how to set your
-$MANPATH. If you're not on a Unix system, access to the documentation
-will be different; for example, documentation might only be in HTML format. All
-proper Perl installations have fully-accessible documentation.
-
-You might also try C<perldoc perl> in case your system doesn't
-have a proper man command, or it's been misinstalled. If that doesn't
-work, try looking in /usr/local/lib/perl5/pod for documentation.
-
-If all else fails, consult http://perldoc.cpan.org/ or
-http://www.perldoc.com/ both offer the complete documentation
-in html format.
-
-Many good books have been written about Perl--see the section below
-for more details.
-
-Tutorial documents are included in current or upcoming Perl releases
-include L<perltoot> for objects or L<perlboot> for a beginner's
-approach to objects, L<perlopentut> for file opening semantics,
-L<perlreftut> for managing references, L<perlretut> for regular
-expressions, L<perlthrtut> for threads, L<perldebtut> for debugging,
-and L<perlxstut> for linking C and Perl together. There may be more
-by the time you read this. The following URLs might also be of
-assistance:
-
- http://perldoc.cpan.org/
- http://www.perldoc.com/
- http://reference.perl.com/query.cgi?tutorials
- http://bookmarks.cpan.org/search.cgi?cat=Training%2FTutorials
-
-=head2 What are the Perl newsgroups on Usenet? Where do I post questions?
-
-The now defunct comp.lang.perl newsgroup has been superseded by the
-following groups:
-
- comp.lang.perl.announce Moderated announcement group
- comp.lang.perl.misc Very busy group about Perl in general
- comp.lang.perl.moderated Moderated discussion group
- comp.lang.perl.modules Use and development of Perl modules
- comp.lang.perl.tk Using Tk (and X) from Perl
-
- comp.infosystems.www.authoring.cgi Writing CGI scripts for the Web.
-
-There is also Usenet gateway to the mailing list used by the crack
-Perl development team (perl5-porters) at
-news://news.perl.com/perl.porters-gw/ .
-
-=head2 Where should I post source code?
-
-You should post source code to whichever group is most appropriate, but
-feel free to cross-post to comp.lang.perl.misc. If you want to cross-post
-to alt.sources, please make sure it follows their posting standards,
-including setting the Followup-To header line to NOT include alt.sources;
-see their FAQ (http://www.faqs.org/faqs/alt-sources-intro/) for details.
-
-If you're just looking for software, first use Google
-(http://www.google.com), Deja (http://www.deja.com), and
-CPAN Search (http://search.cpan.org). This is faster and more
-productive than just posting a request.
-
-=head2 Perl Books
-
-A number of books on Perl and/or CGI programming are available. A few of
-these are good, some are OK, but many aren't worth your money. Tom
-Christiansen maintains a list of these books, some with extensive
-reviews, at http://www.perl.com/perl/critiques/index.html .
-
-The incontestably definitive reference book on Perl, written by
-the creator of Perl, is now (July 2000) in its third edition:
-
- Programming Perl (the "Camel Book"):
- by Larry Wall, Tom Christiansen, and Jon Orwant
- 0-596-00027-8 [3rd edition July 2000]
- http://www.oreilly.com/catalog/pperl3/
- (English, translations to several languages are also available)
-
-The companion volume to the Camel containing thousands
-of real-world examples, mini-tutorials, and complete programs is:
-
- The Perl Cookbook (the "Ram Book"):
- by Tom Christiansen and Nathan Torkington,
- with Foreword by Larry Wall
- ISBN 1-56592-243-3 [1st Edition August 1998]
- http://perl.oreilly.com/cookbook/
-
-If you're already a hard-core systems programmer, then the Camel Book
-might suffice for you to learn Perl from. If you're not, check out
-
- Learning Perl (the "Llama Book"):
- by Randal Schwartz and Tom Christiansen
- with Foreword by Larry Wall
- ISBN 1-56592-284-0 [2nd Edition July 1997]
- http://www.oreilly.com/catalog/lperl2/
-
-Despite the picture at the URL above, the second edition of "Llama
-Book" really has a blue cover and was updated for the 5.004 release
-of Perl. Various foreign language editions are available, including
-I<Learning Perl on Win32 Systems> (the "Gecko Book").
-
-If you're not an accidental programmer, but a more serious and possibly
-even degreed computer scientist who doesn't need as much hand-holding as
-we try to provide in the Llama or its defurred cousin the Gecko, please
-check out the delightful book, I<Perl: The Programmer's Companion>,
-written by Nigel Chapman.
-
-Addison-Wesley (http://www.awlonline.com/) and Manning
-(http://www.manning.com/) are also publishers of some fine Perl books
-such as Object Oriented Programming with Perl by Damian Conway and
-Network Programming with Perl by Lincoln Stein.
-
-An excellent technical book discounter is Bookpool at
-http://www.bookpool.com/ where a 30% discount or more is not unusual.
-
-What follows is a list of the books that the FAQ authors found personally
-useful. Your mileage may (but, we hope, probably won't) vary.
-
-Recommended books on (or mostly on) Perl follow.
-
-=over 4
-
-=item References
-
- Programming Perl
- by Larry Wall, Tom Christiansen, and Jon Orwant
- ISBN 0-596-00027-8 [3rd edition July 2000]
- http://www.oreilly.com/catalog/pperl3/
-
- Perl 5 Pocket Reference
- by Johan Vromans
- ISBN 0-596-00032-4 [3rd edition May 2000]
- http://www.oreilly.com/catalog/perlpr3/
-
- Perl in a Nutshell
- by Ellen Siever, Stephan Spainhour, and Nathan Patwardhan
- ISBN 1-56592-286-7 [1st edition December 1998]
- http://www.oreilly.com/catalog/perlnut/
-
-=item Tutorials
-
- Elements of Programming with Perl
- by Andrew L. Johnson
- ISBN 1884777805 [1st edition October 1999]
- http://www.manning.com/Johnson/
-
- Learning Perl
- by Randal L. Schwartz and Tom Christiansen
- with foreword by Larry Wall
- ISBN 1-56592-284-0 [2nd edition July 1997]
- http://www.oreilly.com/catalog/lperl2/
-
- Learning Perl on Win32 Systems
- by Randal L. Schwartz, Erik Olson, and Tom Christiansen,
- with foreword by Larry Wall
- ISBN 1-56592-324-3 [1st edition August 1997]
- http://www.oreilly.com/catalog/lperlwin/
-
- Perl: The Programmer's Companion
- by Nigel Chapman
- ISBN 0-471-97563-X [1st edition October 1997]
- http://catalog.wiley.com/title.cgi?isbn=047197563X
-
- Cross-Platform Perl
- by Eric Foster-Johnson
- ISBN 1-55851-483-X [2nd edition September 2000]
- http://www.pconline.com/~erc/perlbook.htm
-
- MacPerl: Power and Ease
- by Vicki Brown and Chris Nandor,
- with foreword by Matthias Neeracher
- ISBN 1-881957-32-2 [1st edition May 1998]
- http://www.macperl.com/ptf_book/
-
-=item Task-Oriented
-
- The Perl Cookbook
- by Tom Christiansen and Nathan Torkington
- with foreword by Larry Wall
- ISBN 1-56592-243-3 [1st edition August 1998]
- http://www.oreilly.com/catalog/cookbook/
-
- Effective Perl Programming
- by Joseph Hall
- ISBN 0-201-41975-0 [1st edition 1998]
- http://www.awl.com/
-
-
-=item Special Topics
-
- Mastering Regular Expressions
- by Jeffrey E. F. Friedl
- ISBN 1-56592-257-3 [1st edition January 1997]
- http://www.oreilly.com/catalog/regex/
-
- Network Programming with Perl
- by Lincoln Stein
- ISBN 0-201-61571-1 [1st edition 2001]
- http://www.awlonline.com/
-
- Object Oriented Perl
- Damian Conway
- with foreword by Randal L. Schwartz
- ISBN 1884777791 [1st edition August 1999]
- http://www.manning.com/Conway/
-
- Data Munging with Perl
- Dave Cross
- ISBN 1930110006 [1st edition 2001]
- http://www.manning.com/cross
-
- Learning Perl/Tk
- by Nancy Walsh
- ISBN 1-56592-314-6 [1st edition January 1999]
- http://www.oreilly.com/catalog/lperltk/
-
-=back
-
-=head2 Perl in Magazines
-
-The first and only periodical devoted to All Things Perl, I<The
-Perl Journal> contained tutorials, demonstrations, case studies,
-announcements, contests, and much more. I<TPJ> had columns on web
-development, databases, Win32 Perl, graphical programming, regular
-expressions, and networking, and sponsored the Obfuscated Perl
-Contest. Sadly, this publication is no longer in circulation, but
-should it be resurrected, it will most likely be announced on
-http://use.perl.org/ .
-
-Beyond this, magazines that frequently carry high-quality articles
-on Perl are I<Web Techniques> (see http://www.webtechniques.com/),
-I<Performance Computing> (http://www.performance-computing.com/), and Usenix's
-newsletter/magazine to its members, I<login:>, at http://www.usenix.org/.
-Randal's Web Technique's columns are available on the web at
-http://www.stonehenge.com/merlyn/WebTechniques/ .
-
-=head2 Perl on the Net: FTP and WWW Access
-
-To get the best performance, pick a site from
-the list below and use it to grab the complete list of mirror sites
-which is at /CPAN/MIRRORED.BY or at http://mirror.cpan.org/.
-From there you can find the quickest site for you. Remember, the
-following list is I<not> the complete list of CPAN mirrors
-(the complete list contains 165 sites as of January 2001):
-
- http://www.cpan.org/
- http://www.perl.com/CPAN/
- http://download.sourceforge.net/mirrors/CPAN/
- ftp://ftp.digital.com/pub/plan/perl/CPAN/
- ftp://ftp.flirble.org/pub/languages/perl/CPAN/
- ftp://ftp.uvsq.fr/pub/perl/CPAN/
- ftp://ftp.funet.fi/pub/languages/perl/CPAN/
- ftp://ftp.dti.ad.jp/pub/lang/CPAN/
- ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
- ftp://cpan.if.usp.br/pub/mirror/CPAN/
-
-One may also use xx.cpan.org where "xx" is the 2-letter country code
-for your domain; e.g. Australia would use au.cpan.org.
-
-=head2 What mailing lists are there for Perl?
-
-Most of the major modules (Tk, CGI, libwww-perl) have their own
-mailing lists. Consult the documentation that came with the module for
-subscription information.
-
- http://lists.cpan.org/
-
-=head2 Archives of comp.lang.perl.misc
-
-Have you tried Deja or AltaVista? Those are the
-best archives. Just look up "*perl*" as a newsgroup.
-
- http://www.deja.com/dnquery.xp?QRY=&DBS=2&ST=PS&defaultOp=AND&LNG=ALL&format=terse&showsort=date&maxhits=25&subjects=&groups=*perl*&authors=&fromdate=&todate=
-
-You might want to trim that down a bit, though.
-
-You'll probably want more a sophisticated query and retrieval mechanism
-than a file listing, preferably one that allows you to retrieve
-articles using a fast-access indices, keyed on at least author, date,
-subject, thread (as in "trn") and probably keywords. The best
-solution the FAQ authors know of is the MH pick command, but it is
-very slow to select on 18000 articles.
-
-If you have, or know where can be found, the missing sections, please
-let perlfaq-suggestions@perl.com know.
-
-=head2 Where can I buy a commercial version of Perl?
-
-In a real sense, Perl already I<is> commercial software: it has a license
-that you can grab and carefully read to your manager. It is distributed
-in releases and comes in well-defined packages. There is a very large
-user community and an extensive literature. The comp.lang.perl.*
-newsgroups and several of the mailing lists provide free answers to your
-questions in near real-time. Perl has traditionally been supported by
-Larry, scores of software designers and developers, and myriads of
-programmers, all working for free to create a useful thing to make life
-better for everyone.
-
-However, these answers may not suffice for managers who require a
-purchase order from a company whom they can sue should anything go awry.
-Or maybe they need very serious hand-holding and contractual obligations.
-Shrink-wrapped CDs with Perl on them are available from several sources if
-that will help. For example, many Perl books include a distribution of Perl,
-as do the O'Reilly Perl Resource Kits (in both the Unix flavor
-and in the proprietary Microsoft flavor); the free Unix distributions
-also all come with Perl.
-
-Alternatively, you can purchase commercial incidence based support
-through the Perl Clinic. The following is a commercial from them:
-
-"The Perl Clinic is a commercial Perl support service operated by
-ActiveState Tool Corp. and The Ingram Group. The operators have many
-years of in-depth experience with Perl applications and Perl internals
-on a wide range of platforms.
-
-"Through our group of highly experienced and well-trained support engineers,
-we will put our best effort into understanding your problem, providing an
-explanation of the situation, and a recommendation on how to proceed."
-
-Contact The Perl Clinic at
-
- www.PerlClinic.com
-
- North America Pacific Standard Time (GMT-8)
- Tel: 1 604 606-4611 hours 8am-6pm
- Fax: 1 604 606-4640
-
- Europe (GMT)
- Tel: 00 44 1483 862814
- Fax: 00 44 1483 862801
-
-See also www.perl.com for updates on tutorials, training, and support.
-
-=head2 Where do I send bug reports?
-
-If you are reporting a bug in the perl interpreter or the modules
-shipped with Perl, use the I<perlbug> program in the Perl distribution or
-mail your report to perlbug@perl.org .
-
-If you are posting a bug with a non-standard port (see the answer to
-"What platforms is Perl available for?"), a binary distribution, or a
-non-standard module (such as Tk, CGI, etc), then please see the
-documentation that came with it to determine the correct place to post
-bugs.
-
-Read the perlbug(1) man page (perl5.004 or later) for more information.
-
-=head2 What is perl.com? Perl Mongers? pm.org? perl.org?
-
-The Perl Home Page at http://www.perl.com/ is currently hosted on a
-T3 line courtesy of Songline Systems, a software-oriented subsidiary of
-O'Reilly and Associates. Other starting points include
-
- http://language.perl.com/
- http://conference.perl.com/
- http://reference.perl.com/
-
-Perl Mongers is an advocacy organization for the Perl language which
-maintains the web site http://www.perl.org/ as a general advocacy
-site for the Perl language.
-
-Perl Mongers uses the pm.org domain for services related to Perl user
-groups, including the hosting of mailing lists and web sites. See the
-Perl user group web site at http://www.pm.org/ for more information about
-joining, starting, or requesting services for a Perl user group.
-
-Perl Mongers also maintain the perl.org domain to provide general
-support services to the Perl community, including the hosting of mailing
-lists, web sites, and other services. The web site
-http://www.perl.org/ is a general advocacy site for the Perl language,
-and there are many other sub-domains for special topics, such as
-
- http://bugs.perl.org/
- http://history.perl.org/
- http://lists.perl.org/
- http://news.perl.org/
- http://use.perl.org/
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-2001 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-When included as an integrated part of the Standard Distribution
-of Perl or of its documentation (printed or otherwise), this works is
-covered under Perl's Artistic License. For separate distributions of
-all or part of this FAQ outside of that, see L<perlfaq>.
-
-Irrespective of its distribution, all code examples here are in the public
-domain. You are permitted and encouraged to use this code and any
-derivatives thereof in your own programs for fun or for profit as you
-see fit. A simple comment in the code giving credit to the FAQ would
-be courteous but is not required.
diff --git a/contrib/perl5/pod/perlfaq3.pod b/contrib/perl5/pod/perlfaq3.pod
deleted file mode 100644
index 49cae1a..0000000
--- a/contrib/perl5/pod/perlfaq3.pod
+++ /dev/null
@@ -1,814 +0,0 @@
-=head1 NAME
-
-perlfaq3 - Programming Tools ($Revision: 1.38 $, $Date: 1999/05/23 16:08:30 $)
-
-=head1 DESCRIPTION
-
-This section of the FAQ answers questions related to programmer tools
-and programming support.
-
-=head2 How do I do (anything)?
-
-Have you looked at CPAN (see L<perlfaq2>)? The chances are that
-someone has already written a module that can solve your problem.
-Have you read the appropriate man pages? Here's a brief index:
-
- Basics perldata, perlvar, perlsyn, perlop, perlsub
- Execution perlrun, perldebug
- Functions perlfunc
- Objects perlref, perlmod, perlobj, perltie
- Data Structures perlref, perllol, perldsc
- Modules perlmod, perlmodlib, perlsub
- Regexes perlre, perlfunc, perlop, perllocale
- Moving to perl5 perltrap, perl
- Linking w/C perlxstut, perlxs, perlcall, perlguts, perlembed
- Various http://www.perl.com/CPAN/doc/FMTEYEWTK/index.html
- (not a man-page but still useful)
-
-A crude table of contents for the Perl man page set is found in L<perltoc>.
-
-=head2 How can I use Perl interactively?
-
-The typical approach uses the Perl debugger, described in the
-perldebug(1) man page, on an ``empty'' program, like this:
-
- perl -de 42
-
-Now just type in any legal Perl code, and it will be immediately
-evaluated. You can also examine the symbol table, get stack
-backtraces, check variable values, set breakpoints, and other
-operations typically found in symbolic debuggers.
-
-=head2 Is there a Perl shell?
-
-In general, no. The Shell.pm module (distributed with Perl) makes
-Perl try commands which aren't part of the Perl language as shell
-commands. perlsh from the source distribution is simplistic and
-uninteresting, but may still be what you want.
-
-=head2 How do I debug my Perl programs?
-
-Have you tried C<use warnings> or used C<-w>? They enable warnings
-to detect dubious practices.
-
-Have you tried C<use strict>? It prevents you from using symbolic
-references, makes you predeclare any subroutines that you call as bare
-words, and (probably most importantly) forces you to predeclare your
-variables with C<my>, C<our>, or C<use vars>.
-
-Did you check the return values of each and every system call? The operating
-system (and thus Perl) tells you whether they worked, and if not
-why.
-
- open(FH, "> /etc/cantwrite")
- or die "Couldn't write to /etc/cantwrite: $!\n";
-
-Did you read L<perltrap>? It's full of gotchas for old and new Perl
-programmers and even has sections for those of you who are upgrading
-from languages like I<awk> and I<C>.
-
-Have you tried the Perl debugger, described in L<perldebug>? You can
-step through your program and see what it's doing and thus work out
-why what it's doing isn't what it should be doing.
-
-=head2 How do I profile my Perl programs?
-
-You should get the Devel::DProf module from the standard distribution
-(or separately on CPAN) and also use Benchmark.pm from the standard
-distribution. The Benchmark module lets you time specific portions of
-your code, while Devel::DProf gives detailed breakdowns of where your
-code spends its time.
-
-Here's a sample use of Benchmark:
-
- use Benchmark;
-
- @junk = `cat /etc/motd`;
- $count = 10_000;
-
- timethese($count, {
- 'map' => sub { my @a = @junk;
- map { s/a/b/ } @a;
- return @a
- },
- 'for' => sub { my @a = @junk;
- local $_;
- for (@a) { s/a/b/ };
- return @a },
- });
-
-This is what it prints (on one machine--your results will be dependent
-on your hardware, operating system, and the load on your machine):
-
- Benchmark: timing 10000 iterations of for, map...
- for: 4 secs ( 3.97 usr 0.01 sys = 3.98 cpu)
- map: 6 secs ( 4.97 usr 0.00 sys = 4.97 cpu)
-
-Be aware that a good benchmark is very hard to write. It only tests the
-data you give it and proves little about the differing complexities
-of contrasting algorithms.
-
-=head2 How do I cross-reference my Perl programs?
-
-The B::Xref module, shipped with the new, alpha-release Perl compiler
-(not the general distribution prior to the 5.005 release), can be used
-to generate cross-reference reports for Perl programs.
-
- perl -MO=Xref[,OPTIONS] scriptname.plx
-
-=head2 Is there a pretty-printer (formatter) for Perl?
-
-There is no program that will reformat Perl as much as indent(1) does
-for C. The complex feedback between the scanner and the parser (this
-feedback is what confuses the vgrind and emacs programs) makes it
-challenging at best to write a stand-alone Perl parser.
-
-Of course, if you simply follow the guidelines in L<perlstyle>, you
-shouldn't need to reformat. The habit of formatting your code as you
-write it will help prevent bugs. Your editor can and should help you
-with this. The perl-mode or newer cperl-mode for emacs can provide
-remarkable amounts of help with most (but not all) code, and even less
-programmable editors can provide significant assistance. Tom swears
-by the following settings in vi and its clones:
-
- set ai sw=4
- map! ^O {^M}^[O^T
-
-Now put that in your F<.exrc> file (replacing the caret characters
-with control characters) and away you go. In insert mode, ^T is
-for indenting, ^D is for undenting, and ^O is for blockdenting--
-as it were. If you haven't used the last one, you're missing
-a lot. A more complete example, with comments, can be found at
-http://www.perl.com/CPAN-local/authors/id/TOMC/scripts/toms.exrc.gz
-
-If you are used to using the I<vgrind> program for printing out nice code
-to a laser printer, you can take a stab at this using
-http://www.perl.com/CPAN/doc/misc/tips/working.vgrind.entry, but the
-results are not particularly satisfying for sophisticated code.
-
-The a2ps at http://www.infres.enst.fr/%7Edemaille/a2ps/ does lots of things
-related to generating nicely printed output of documents.
-
-=head2 Is there a ctags for Perl?
-
-There's a simple one at
-http://www.perl.com/CPAN/authors/id/TOMC/scripts/ptags.gz which may do
-the trick. And if not, it's easy to hack into what you want.
-
-=head2 Is there an IDE or Windows Perl Editor?
-
-Perl programs are just plain text, so any editor will do.
-
-If you're on Unix, you already have an IDE--Unix itself. The UNIX
-philosophy is the philosophy of several small tools that each do one
-thing and do it well. It's like a carpenter's toolbox.
-
-If you want a Windows IDE, check the following:
-
-=over 4
-
-=item CodeMagicCD
-
-http://www.codemagiccd.com/
-
-=item Komodo
-
-ActiveState's cross-platform, multi-language IDE has Perl support,
-including a regular expression debugger and remote debugging
-(http://www.ActiveState.com/Products/Komodo/index.html).
-(Visual Perl, a Visual Studio.NET plug-in is currently (early 2001)
-in beta (http://www.ActiveState.com/Products/VisualPerl/index.html)).
-
-=item The Object System
-
-(http://www.castlelink.co.uk/object_system/) is a Perl web
-applications development IDE.
-
-=item PerlBuilder
-
-(http://www.solutionsoft.com/perl.htm) is an integrated development
-environment for Windows that supports Perl development.
-
-=item Perl code magic
-
-(http://www.petes-place.com/codemagic.html).
-
-=item visiPerl+
-
-http://helpconsulting.net/visiperl/, from Help Consulting.
-
-=back
-
-For editors: if you're on Unix you probably have vi or a vi clone already,
-and possibly an emacs too, so you may not need to download anything.
-In any emacs the cperl-mode (M-x cperl-mode) gives you perhaps the
-best available Perl editing mode in any editor.
-
-For Windows editors: you can download an Emacs
-
-=over 4
-
-=item GNU Emacs
-
-http://www.gnu.org/software/emacs/windows/ntemacs.html
-
-=item MicroEMACS
-
-http://members.nbci.com/uemacs/
-
-=item XEmacs
-
-http://www.xemacs.org/Download/index.html
-
-=back
-
-or a vi clone such as
-
-=over 4
-
-=item Elvis
-
-ftp://ftp.cs.pdx.edu/pub/elvis/ http://www.fh-wedel.de/elvis/
-
-=item Vile
-
-http://vile.cx/
-
-=item Vim
-
-http://www.vim.org/
-
-win32: http://www.cs.vu.nl/%7Etmgil/vi.html
-
-=back
-
-For vi lovers in general, Windows or elsewhere:
-http://www.thomer.com/thomer/vi/vi.html.
-
-nvi (http://www.bostic.com/vi/, available from CPAN in src/misc/) is
-yet another vi clone, unfortunately not available for Windows, but in
-UNIX platforms you might be interested in trying it out, firstly because
-strictly speaking it is not a vi clone, it is the real vi, or the new
-incarnation of it, and secondly because you can embed Perl inside it
-to use Perl as the scripting language. nvi is not alone in this,
-though: at least also vim and vile offer an embedded Perl.
-
-The following are Win32 multilanguage editor/IDESs that support Perl:
-
-=over 4
-
-=item Codewright
-
-http://www.starbase.com/
-
-=item MultiEdit
-
-http://www.MultiEdit.com/
-
-=item SlickEdit
-
-http://www.slickedit.com/
-
-=back
-
-There is also a toyedit Text widget based editor written in Perl
-that is distributed with the Tk module on CPAN. The ptkdb
-(http://world.std.com/~aep/ptkdb/) is a Perl/tk based debugger that
-acts as a development environment of sorts. Perl Composer
-(http://perlcomposer.sourceforge.net/vperl.html) is an IDE for Perl/Tk
-GUI creation.
-
-In addition to an editor/IDE you might be interested in a more
-powerful shell environment for Win32. Your options include
-
-=over 4
-
-=item Bash
-
-from the Cygwin package (http://sources.redhat.com/cygwin/)
-
-=item Ksh
-
-from the MKS Toolkit (http://www.mks.com/), or the Bourne shell of
-the U/WIN environment (http://www.research.att.com/sw/tools/uwin/)
-
-=item Tcsh
-
-ftp://ftp.astron.com/pub/tcsh/, see also
-http://www.primate.wisc.edu/software/csh-tcsh-book/
-
-=item Zsh
-
-ftp://ftp.blarg.net/users/amol/zsh/, see also http://www.zsh.org/
-
-=back
-
-MKS and U/WIN are commercial (U/WIN is free for educational and
-research purposes), Cygwin is covered by the GNU Public License (but
-that shouldn't matter for Perl use). The Cygwin, MKS, and U/WIN all
-contain (in addition to the shells) a comprehensive set of standard
-UNIX toolkit utilities.
-
-If you're transferring text files between Unix and Windows using FTP
-be sure to transfer them in ASCII mode so the ends of lines are
-appropriately converted.
-
-On Mac OS the MacPerl Application comes with a simple 32k text editor
-that behaves like a rudimentary IDE. In contrast to the MacPerl Application
-the MPW Perl tool can make use of the MPW Shell itself as an editor (with
-no 32k limit).
-
-=over 4
-
-=item BBEdit and BBEdit Lite
-
-are text editors for Mac OS that have a Perl sensitivity mode
-(http://web.barebones.com/).
-
-=item Alpha
-
-is an editor, written and extensible in Tcl, that nonetheless has
-built in support for several popular markup and programming languages
-including Perl and HTML (http://alpha.olm.net/).
-
-=back
-
-Pepper and Pe are programming language sensitive text editors for Mac
-OS X and BeOS respectively (http://www.hekkelman.com/).
-
-=head2 Where can I get Perl macros for vi?
-
-For a complete version of Tom Christiansen's vi configuration file,
-see http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/toms.exrc.gz ,
-the standard benchmark file for vi emulators. The file runs best with nvi,
-the current version of vi out of Berkeley, which incidentally can be built
-with an embedded Perl interpreter--see http://www.perl.com/CPAN/src/misc.
-
-=head2 Where can I get perl-mode for emacs?
-
-Since Emacs version 19 patchlevel 22 or so, there have been both a
-perl-mode.el and support for the Perl debugger built in. These should
-come with the standard Emacs 19 distribution.
-
-In the Perl source directory, you'll find a directory called "emacs",
-which contains a cperl-mode that color-codes keywords, provides
-context-sensitive help, and other nifty things.
-
-Note that the perl-mode of emacs will have fits with C<"main'foo">
-(single quote), and mess up the indentation and highlighting. You
-are probably using C<"main::foo"> in new Perl code anyway, so this
-shouldn't be an issue.
-
-=head2 How can I use curses with Perl?
-
-The Curses module from CPAN provides a dynamically loadable object
-module interface to a curses library. A small demo can be found at the
-directory http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/rep;
-this program repeats a command and updates the screen as needed, rendering
-B<rep ps axu> similar to B<top>.
-
-=head2 How can I use X or Tk with Perl?
-
-Tk is a completely Perl-based, object-oriented interface to the Tk toolkit
-that doesn't force you to use Tcl just to get at Tk. Sx is an interface
-to the Athena Widget set. Both are available from CPAN. See the
-directory http://www.perl.com/CPAN/modules/by-category/08_User_Interfaces/
-
-Invaluable for Perl/Tk programming are the Perl/Tk FAQ at
-http://w4.lns.cornell.edu/%7Epvhp/ptk/ptkTOC.html , the Perl/Tk Reference
-Guide available at
-http://www.perl.com/CPAN-local/authors/Stephen_O_Lidie/ , and the
-online manpages at
-http://www-users.cs.umn.edu/%7Eamundson/perl/perltk/toc.html .
-
-=head2 How can I generate simple menus without using CGI or Tk?
-
-The http://www.perl.com/CPAN/authors/id/SKUNZ/perlmenu.v4.0.tar.gz
-module, which is curses-based, can help with this.
-
-=head2 What is undump?
-
-See the next question on ``How can I make my Perl program run faster?''
-
-=head2 How can I make my Perl program run faster?
-
-The best way to do this is to come up with a better algorithm. This
-can often make a dramatic difference. Jon Bentley's book
-``Programming Pearls'' (that's not a misspelling!) has some good tips
-on optimization, too. Advice on benchmarking boils down to: benchmark
-and profile to make sure you're optimizing the right part, look for
-better algorithms instead of microtuning your code, and when all else
-fails consider just buying faster hardware.
-
-A different approach is to autoload seldom-used Perl code. See the
-AutoSplit and AutoLoader modules in the standard distribution for
-that. Or you could locate the bottleneck and think about writing just
-that part in C, the way we used to take bottlenecks in C code and
-write them in assembler. Similar to rewriting in C,
-modules that have critical sections can be written in C (for instance, the
-PDL module from CPAN).
-
-In some cases, it may be worth it to use the backend compiler to
-produce byte code (saving compilation time) or compile into C, which
-will certainly save compilation time and sometimes a small amount (but
-not much) execution time. See the question about compiling your Perl
-programs for more on the compiler--the wins aren't as obvious as you'd
-hope.
-
-If you're currently linking your perl executable to a shared I<libc.so>,
-you can often gain a 10-25% performance benefit by rebuilding it to
-link with a static libc.a instead. This will make a bigger perl
-executable, but your Perl programs (and programmers) may thank you for
-it. See the F<INSTALL> file in the source distribution for more
-information.
-
-Unsubstantiated reports allege that Perl interpreters that use sfio
-outperform those that don't (for I/O intensive applications). To try
-this, see the F<INSTALL> file in the source distribution, especially
-the ``Selecting File I/O mechanisms'' section.
-
-The undump program was an old attempt to speed up your Perl program
-by storing the already-compiled form to disk. This is no longer
-a viable option, as it only worked on a few architectures, and
-wasn't a good solution anyway.
-
-=head2 How can I make my Perl program take less memory?
-
-When it comes to time-space tradeoffs, Perl nearly always prefers to
-throw memory at a problem. Scalars in Perl use more memory than
-strings in C, arrays take more than that, and hashes use even more. While
-there's still a lot to be done, recent releases have been addressing
-these issues. For example, as of 5.004, duplicate hash keys are
-shared amongst all hashes using them, so require no reallocation.
-
-In some cases, using substr() or vec() to simulate arrays can be
-highly beneficial. For example, an array of a thousand booleans will
-take at least 20,000 bytes of space, but it can be turned into one
-125-byte bit vector--a considerable memory savings. The standard
-Tie::SubstrHash module can also help for certain types of data
-structure. If you're working with specialist data structures
-(matrices, for instance) modules that implement these in C may use
-less memory than equivalent Perl modules.
-
-Another thing to try is learning whether your Perl was compiled with
-the system malloc or with Perl's builtin malloc. Whichever one it
-is, try using the other one and see whether this makes a difference.
-Information about malloc is in the F<INSTALL> file in the source
-distribution. You can find out whether you are using perl's malloc by
-typing C<perl -V:usemymalloc>.
-
-=head2 Is it unsafe to return a pointer to local data?
-
-No, Perl's garbage collection system takes care of this.
-
- sub makeone {
- my @a = ( 1 .. 10 );
- return \@a;
- }
-
- for $i ( 1 .. 10 ) {
- push @many, makeone();
- }
-
- print $many[4][5], "\n";
-
- print "@many\n";
-
-=head2 How can I free an array or hash so my program shrinks?
-
-You can't. On most operating systems, memory allocated to a program
-can never be returned to the system. That's why long-running programs
-sometimes re-exec themselves. Some operating systems (notably,
-FreeBSD and Linux) allegedly reclaim large chunks of memory that is no
-longer used, but it doesn't appear to happen with Perl (yet). The Mac
-appears to be the only platform that will reliably (albeit, slowly)
-return memory to the OS.
-
-We've had reports that on Linux (Redhat 5.1) on Intel, C<undef
-$scalar> will return memory to the system, while on Solaris 2.6 it
-won't. In general, try it yourself and see.
-
-However, judicious use of my() on your variables will help make sure
-that they go out of scope so that Perl can free up that space for
-use in other parts of your program. A global variable, of course, never
-goes out of scope, so you can't get its space automatically reclaimed,
-although undef()ing and/or delete()ing it will achieve the same effect.
-In general, memory allocation and de-allocation isn't something you can
-or should be worrying about much in Perl, but even this capability
-(preallocation of data types) is in the works.
-
-=head2 How can I make my CGI script more efficient?
-
-Beyond the normal measures described to make general Perl programs
-faster or smaller, a CGI program has additional issues. It may be run
-several times per second. Given that each time it runs it will need
-to be re-compiled and will often allocate a megabyte or more of system
-memory, this can be a killer. Compiling into C B<isn't going to help
-you> because the process start-up overhead is where the bottleneck is.
-
-There are two popular ways to avoid this overhead. One solution
-involves running the Apache HTTP server (available from
-http://www.apache.org/) with either of the mod_perl or mod_fastcgi
-plugin modules.
-
-With mod_perl and the Apache::Registry module (distributed with
-mod_perl), httpd will run with an embedded Perl interpreter which
-pre-compiles your script and then executes it within the same address
-space without forking. The Apache extension also gives Perl access to
-the internal server API, so modules written in Perl can do just about
-anything a module written in C can. For more on mod_perl, see
-http://perl.apache.org/
-
-With the FCGI module (from CPAN) and the mod_fastcgi
-module (available from http://www.fastcgi.com/) each of your Perl
-programs becomes a permanent CGI daemon process.
-
-Both of these solutions can have far-reaching effects on your system
-and on the way you write your CGI programs, so investigate them with
-care.
-
-See http://www.perl.com/CPAN/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ .
-
-A non-free, commercial product, ``The Velocity Engine for Perl'',
-(http://www.binevolve.com/ or http://www.binevolve.com/velocigen/ )
-might also be worth looking at. It will allow you to increase the
-performance of your Perl programs, running programs up to 25 times
-faster than normal CGI Perl when running in persistent Perl mode or 4
-to 5 times faster without any modification to your existing CGI
-programs. Fully functional evaluation copies are available from the
-web site.
-
-=head2 How can I hide the source for my Perl program?
-
-Delete it. :-) Seriously, there are a number of (mostly
-unsatisfactory) solutions with varying levels of ``security''.
-
-First of all, however, you I<can't> take away read permission, because
-the source code has to be readable in order to be compiled and
-interpreted. (That doesn't mean that a CGI script's source is
-readable by people on the web, though--only by people with access to
-the filesystem.) So you have to leave the permissions at the socially
-friendly 0755 level.
-
-Some people regard this as a security problem. If your program does
-insecure things and relies on people not knowing how to exploit those
-insecurities, it is not secure. It is often possible for someone to
-determine the insecure things and exploit them without viewing the
-source. Security through obscurity, the name for hiding your bugs
-instead of fixing them, is little security indeed.
-
-You can try using encryption via source filters (Filter::* from CPAN),
-but any decent programmer will be able to decrypt it. You can try using
-the byte code compiler and interpreter described below, but the curious
-might still be able to de-compile it. You can try using the native-code
-compiler described below, but crackers might be able to disassemble it.
-These pose varying degrees of difficulty to people wanting to get at
-your code, but none can definitively conceal it (true of every
-language, not just Perl).
-
-If you're concerned about people profiting from your code, then the
-bottom line is that nothing but a restrictive license will give you
-legal security. License your software and pepper it with threatening
-statements like ``This is unpublished proprietary software of XYZ Corp.
-Your access to it does not give you permission to use it blah blah
-blah.'' We are not lawyers, of course, so you should see a lawyer if
-you want to be sure your license's wording will stand up in court.
-
-=head2 How can I compile my Perl program into byte code or C?
-
-Malcolm Beattie has written a multifunction backend compiler,
-available from CPAN, that can do both these things. It is included
-in the perl5.005 release, but is still considered experimental.
-This means it's fun to play with if you're a programmer but not
-really for people looking for turn-key solutions.
-
-Merely compiling into C does not in and of itself guarantee that your
-code will run very much faster. That's because except for lucky cases
-where a lot of native type inferencing is possible, the normal Perl
-run-time system is still present and so your program will take just as
-long to run and be just as big. Most programs save little more than
-compilation time, leaving execution no more than 10-30% faster. A few
-rare programs actually benefit significantly (even running several times
-faster), but this takes some tweaking of your code.
-
-You'll probably be astonished to learn that the current version of the
-compiler generates a compiled form of your script whose executable is
-just as big as the original perl executable, and then some. That's
-because as currently written, all programs are prepared for a full
-eval() statement. You can tremendously reduce this cost by building a
-shared I<libperl.so> library and linking against that. See the
-F<INSTALL> podfile in the Perl source distribution for details. If
-you link your main perl binary with this, it will make it minuscule.
-For example, on one author's system, F</usr/bin/perl> is only 11k in
-size!
-
-In general, the compiler will do nothing to make a Perl program smaller,
-faster, more portable, or more secure. In fact, it can make your
-situation worse. The executable will be bigger, your VM system may take
-longer to load the whole thing, the binary is fragile and hard to fix,
-and compilation never stopped software piracy in the form of crackers,
-viruses, or bootleggers. The real advantage of the compiler is merely
-packaging, and once you see the size of what it makes (well, unless
-you use a shared I<libperl.so>), you'll probably want a complete
-Perl install anyway.
-
-=head2 How can I compile Perl into Java?
-
-You can also integrate Java and Perl with the
-Perl Resource Kit from O'Reilly and Associates. See
-http://www.oreilly.com/catalog/prkunix/ .
-
-Perl 5.6 comes with Java Perl Lingo, or JPL. JPL, still in
-development, allows Perl code to be called from Java. See jpl/README
-in the Perl source tree.
-
-=head2 How can I get C<#!perl> to work on [MS-DOS,NT,...]?
-
-For OS/2 just use
-
- extproc perl -S -your_switches
-
-as the first line in C<*.cmd> file (C<-S> due to a bug in cmd.exe's
-`extproc' handling). For DOS one should first invent a corresponding
-batch file and codify it in C<ALTERNATIVE_SHEBANG> (see the
-F<INSTALL> file in the source distribution for more information).
-
-The Win95/NT installation, when using the ActiveState port of Perl,
-will modify the Registry to associate the C<.pl> extension with the
-perl interpreter. If you install another port, perhaps even building
-your own Win95/NT Perl from the standard sources by using a Windows port
-of gcc (e.g., with cygwin or mingw32), then you'll have to modify
-the Registry yourself. In addition to associating C<.pl> with the
-interpreter, NT people can use: C<SET PATHEXT=%PATHEXT%;.PL> to let them
-run the program C<install-linux.pl> merely by typing C<install-linux>.
-
-Macintosh Perl programs will have the appropriate Creator and
-Type, so that double-clicking them will invoke the Perl application.
-
-I<IMPORTANT!>: Whatever you do, PLEASE don't get frustrated, and just
-throw the perl interpreter into your cgi-bin directory, in order to
-get your programs working for a web server. This is an EXTREMELY big
-security risk. Take the time to figure out how to do it correctly.
-
-=head2 Can I write useful Perl programs on the command line?
-
-Yes. Read L<perlrun> for more information. Some examples follow.
-(These assume standard Unix shell quoting rules.)
-
- # sum first and last fields
- perl -lane 'print $F[0] + $F[-1]' *
-
- # identify text files
- perl -le 'for(@ARGV) {print if -f && -T _}' *
-
- # remove (most) comments from C program
- perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
-
- # make file a month younger than today, defeating reaper daemons
- perl -e '$X=24*60*60; utime(time(),time() + 30 * $X,@ARGV)' *
-
- # find first unused uid
- perl -le '$i++ while getpwuid($i); print $i'
-
- # display reasonable manpath
- echo $PATH | perl -nl -072 -e '
- s![^/+]*$!man!&&-d&&!$s{$_}++&&push@m,$_;END{print"@m"}'
-
-OK, the last one was actually an Obfuscated Perl Contest entry. :-)
-
-=head2 Why don't Perl one-liners work on my DOS/Mac/VMS system?
-
-The problem is usually that the command interpreters on those systems
-have rather different ideas about quoting than the Unix shells under
-which the one-liners were created. On some systems, you may have to
-change single-quotes to double ones, which you must I<NOT> do on Unix
-or Plan9 systems. You might also have to change a single % to a %%.
-
-For example:
-
- # Unix
- perl -e 'print "Hello world\n"'
-
- # DOS, etc.
- perl -e "print \"Hello world\n\""
-
- # Mac
- print "Hello world\n"
- (then Run "Myscript" or Shift-Command-R)
-
- # VMS
- perl -e "print ""Hello world\n"""
-
-The problem is that none of these examples are reliable: they depend on the
-command interpreter. Under Unix, the first two often work. Under DOS,
-it's entirely possible that neither works. If 4DOS was the command shell,
-you'd probably have better luck like this:
-
- perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
-
-Under the Mac, it depends which environment you are using. The MacPerl
-shell, or MPW, is much like Unix shells in its support for several
-quoting variants, except that it makes free use of the Mac's non-ASCII
-characters as control characters.
-
-Using qq(), q(), and qx(), instead of "double quotes", 'single
-quotes', and `backticks`, may make one-liners easier to write.
-
-There is no general solution to all of this. It is a mess, pure and
-simple. Sucks to be away from Unix, huh? :-)
-
-[Some of this answer was contributed by Kenneth Albanowski.]
-
-=head2 Where can I learn about CGI or Web programming in Perl?
-
-For modules, get the CGI or LWP modules from CPAN. For textbooks,
-see the two especially dedicated to web stuff in the question on
-books. For problems and questions related to the web, like ``Why
-do I get 500 Errors'' or ``Why doesn't it run from the browser right
-when it runs fine on the command line'', see these sources:
-
- WWW Security FAQ
- http://www.w3.org/Security/Faq/
-
- Web FAQ
- http://www.boutell.com/faq/
-
- CGI FAQ
- http://www.webthing.com/tutorials/cgifaq.html
-
- HTTP Spec
- http://www.w3.org/pub/WWW/Protocols/HTTP/
-
- HTML Spec
- http://www.w3.org/TR/REC-html40/
- http://www.w3.org/pub/WWW/MarkUp/
-
- CGI Spec
- http://www.w3.org/CGI/
-
- CGI Security FAQ
- http://www.go2net.com/people/paulp/cgi-security/safe-cgi.txt
-
-=head2 Where can I learn about object-oriented Perl programming?
-
-A good place to start is L<perltoot>, and you can use L<perlobj>,
-L<perlboot>, and L<perlbot> for reference. Perltoot didn't come out
-until the 5.004 release; you can get a copy (in pod, html, or
-postscript) from http://www.perl.com/CPAN/doc/FMTEYEWTK/ .
-
-=head2 Where can I learn about linking C with Perl? [h2xs, xsubpp]
-
-If you want to call C from Perl, start with L<perlxstut>,
-moving on to L<perlxs>, L<xsubpp>, and L<perlguts>. If you want to
-call Perl from C, then read L<perlembed>, L<perlcall>, and
-L<perlguts>. Don't forget that you can learn a lot from looking at
-how the authors of existing extension modules wrote their code and
-solved their problems.
-
-=head2 I've read perlembed, perlguts, etc., but I can't embed perl in
-my C program; what am I doing wrong?
-
-Download the ExtUtils::Embed kit from CPAN and run `make test'. If
-the tests pass, read the pods again and again and again. If they
-fail, see L<perlbug> and send a bug report with the output of
-C<make test TEST_VERBOSE=1> along with C<perl -V>.
-
-=head2 When I tried to run my script, I got this message. What does it
-mean?
-
-A complete list of Perl's error messages and warnings with explanatory
-text can be found in L<perldiag>. You can also use the splain program
-(distributed with Perl) to explain the error messages:
-
- perl program 2>diag.out
- splain [-v] [-p] diag.out
-
-or change your program to explain the messages for you:
-
- use diagnostics;
-
-or
-
- use diagnostics -verbose;
-
-=head2 What's MakeMaker?
-
-This module (part of the standard Perl distribution) is designed to
-write a Makefile for an extension module from a Makefile.PL. For more
-information, see L<ExtUtils::MakeMaker>.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-When included as an integrated part of the Standard Distribution
-of Perl or of its documentation (printed or otherwise), this works is
-covered under Perl's Artistic License. For separate distributions of
-all or part of this FAQ outside of that, see L<perlfaq>.
-
-Irrespective of its distribution, all code examples here are in the public
-domain. You are permitted and encouraged to use this code and any
-derivatives thereof in your own programs for fun or for profit as you
-see fit. A simple comment in the code giving credit to the FAQ would
-be courteous but is not required.
diff --git a/contrib/perl5/pod/perlfaq4.pod b/contrib/perl5/pod/perlfaq4.pod
deleted file mode 100644
index 8c570c2..0000000
--- a/contrib/perl5/pod/perlfaq4.pod
+++ /dev/null
@@ -1,1821 +0,0 @@
-=head1 NAME
-
-perlfaq4 - Data Manipulation ($Revision: 1.49 $, $Date: 1999/05/23 20:37:49 $)
-
-=head1 DESCRIPTION
-
-The section of the FAQ answers questions related to the manipulation
-of data as numbers, dates, strings, arrays, hashes, and miscellaneous
-data issues.
-
-=head1 Data: Numbers
-
-=head2 Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
-
-The infinite set that a mathematician thinks of as the real numbers can
-only be approximated on a computer, since the computer only has a finite
-number of bits to store an infinite number of, um, numbers.
-
-Internally, your computer represents floating-point numbers in binary.
-Floating-point numbers read in from a file or appearing as literals
-in your program are converted from their decimal floating-point
-representation (eg, 19.95) to an internal binary representation.
-
-However, 19.95 can't be precisely represented as a binary
-floating-point number, just like 1/3 can't be exactly represented as a
-decimal floating-point number. The computer's binary representation
-of 19.95, therefore, isn't exactly 19.95.
-
-When a floating-point number gets printed, the binary floating-point
-representation is converted back to decimal. These decimal numbers
-are displayed in either the format you specify with printf(), or the
-current output format for numbers. (See L<perlvar/"$#"> if you use
-print. C<$#> has a different default value in Perl5 than it did in
-Perl4. Changing C<$#> yourself is deprecated.)
-
-This affects B<all> computer languages that represent decimal
-floating-point numbers in binary, not just Perl. Perl provides
-arbitrary-precision decimal numbers with the Math::BigFloat module
-(part of the standard Perl distribution), but mathematical operations
-are consequently slower.
-
-To get rid of the superfluous digits, just use a format (eg,
-C<printf("%.2f", 19.95)>) to get the required precision.
-See L<perlop/"Floating-point Arithmetic">.
-
-=head2 Why isn't my octal data interpreted correctly?
-
-Perl only understands octal and hex numbers as such when they occur
-as literals in your program. If they are read in from somewhere and
-assigned, no automatic conversion takes place. You must explicitly
-use oct() or hex() if you want the values converted. oct() interprets
-both hex ("0x350") numbers and octal ones ("0350" or even without the
-leading "0", like "377"), while hex() only converts hexadecimal ones,
-with or without a leading "0x", like "0x255", "3A", "ff", or "deadbeef".
-
-This problem shows up most often when people try using chmod(), mkdir(),
-umask(), or sysopen(), which all want permissions in octal.
-
- chmod(644, $file); # WRONG -- perl -w catches this
- chmod(0644, $file); # right
-
-=head2 Does Perl have a round() function? What about ceil() and floor()? Trig functions?
-
-Remember that int() merely truncates toward 0. For rounding to a
-certain number of digits, sprintf() or printf() is usually the easiest
-route.
-
- printf("%.3f", 3.1415926535); # prints 3.142
-
-The POSIX module (part of the standard Perl distribution) implements
-ceil(), floor(), and a number of other mathematical and trigonometric
-functions.
-
- use POSIX;
- $ceil = ceil(3.5); # 4
- $floor = floor(3.5); # 3
-
-In 5.000 to 5.003 perls, trigonometry was done in the Math::Complex
-module. With 5.004, the Math::Trig module (part of the standard Perl
-distribution) implements the trigonometric functions. Internally it
-uses the Math::Complex module and some functions can break out from
-the real axis into the complex plane, for example the inverse sine of
-2.
-
-Rounding in financial applications can have serious implications, and
-the rounding method used should be specified precisely. In these
-cases, it probably pays not to trust whichever system rounding is
-being used by Perl, but to instead implement the rounding function you
-need yourself.
-
-To see why, notice how you'll still have an issue on half-way-point
-alternation:
-
- for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
-
- 0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
- 0.8 0.8 0.9 0.9 1.0 1.0
-
-Don't blame Perl. It's the same as in C. IEEE says we have to do this.
-Perl numbers whose absolute values are integers under 2**31 (on 32 bit
-machines) will work pretty much like mathematical integers. Other numbers
-are not guaranteed.
-
-=head2 How do I convert bits into ints?
-
-To turn a string of 1s and 0s like C<10110110> into a scalar containing
-its binary value, use the pack() and unpack() functions (documented in
-L<perlfunc/"pack"> and L<perlfunc/"unpack">):
-
- $decimal = unpack('c', pack('B8', '10110110'));
-
-This packs the string C<10110110> into an eight bit binary structure.
-This is then unpacked as a character, which returns its ordinal value.
-
-This does the same thing:
-
- $decimal = ord(pack('B8', '10110110'));
-
-Here's an example of going the other way:
-
- $binary_string = unpack('B*', "\x29");
-
-=head2 Why doesn't & work the way I want it to?
-
-The behavior of binary arithmetic operators depends on whether they're
-used on numbers or strings. The operators treat a string as a series
-of bits and work with that (the string C<"3"> is the bit pattern
-C<00110011>). The operators work with the binary form of a number
-(the number C<3> is treated as the bit pattern C<00000011>).
-
-So, saying C<11 & 3> performs the "and" operation on numbers (yielding
-C<1>). Saying C<"11" & "3"> performs the "and" operation on strings
-(yielding C<"1">).
-
-Most problems with C<&> and C<|> arise because the programmer thinks
-they have a number but really it's a string. The rest arise because
-the programmer says:
-
- if ("\020\020" & "\101\101") {
- # ...
- }
-
-but a string consisting of two null bytes (the result of C<"\020\020"
-& "\101\101">) is not a false value in Perl. You need:
-
- if ( ("\020\020" & "\101\101") !~ /[^\000]/) {
- # ...
- }
-
-=head2 How do I multiply matrices?
-
-Use the Math::Matrix or Math::MatrixReal modules (available from CPAN)
-or the PDL extension (also available from CPAN).
-
-=head2 How do I perform an operation on a series of integers?
-
-To call a function on each element in an array, and collect the
-results, use:
-
- @results = map { my_func($_) } @array;
-
-For example:
-
- @triple = map { 3 * $_ } @single;
-
-To call a function on each element of an array, but ignore the
-results:
-
- foreach $iterator (@array) {
- some_func($iterator);
- }
-
-To call a function on each integer in a (small) range, you B<can> use:
-
- @results = map { some_func($_) } (5 .. 25);
-
-but you should be aware that the C<..> operator creates an array of
-all integers in the range. This can take a lot of memory for large
-ranges. Instead use:
-
- @results = ();
- for ($i=5; $i < 500_005; $i++) {
- push(@results, some_func($i));
- }
-
-This situation has been fixed in Perl5.005. Use of C<..> in a C<for>
-loop will iterate over the range, without creating the entire range.
-
- for my $i (5 .. 500_005) {
- push(@results, some_func($i));
- }
-
-will not create a list of 500,000 integers.
-
-=head2 How can I output Roman numerals?
-
-Get the http://www.perl.com/CPAN/modules/by-module/Roman module.
-
-=head2 Why aren't my random numbers random?
-
-If you're using a version of Perl before 5.004, you must call C<srand>
-once at the start of your program to seed the random number generator.
-5.004 and later automatically call C<srand> at the beginning. Don't
-call C<srand> more than once--you make your numbers less random, rather
-than more.
-
-Computers are good at being predictable and bad at being random
-(despite appearances caused by bugs in your programs :-).
-http://www.perl.com/CPAN/doc/FMTEYEWTK/random , courtesy of Tom
-Phoenix, talks more about this. John von Neumann said, ``Anyone who
-attempts to generate random numbers by deterministic means is, of
-course, living in a state of sin.''
-
-If you want numbers that are more random than C<rand> with C<srand>
-provides, you should also check out the Math::TrulyRandom module from
-CPAN. It uses the imperfections in your system's timer to generate
-random numbers, but this takes quite a while. If you want a better
-pseudorandom generator than comes with your operating system, look at
-``Numerical Recipes in C'' at http://www.nr.com/ .
-
-=head1 Data: Dates
-
-=head2 How do I find the week-of-the-year/day-of-the-year?
-
-The day of the year is in the array returned by localtime() (see
-L<perlfunc/"localtime">):
-
- $day_of_year = (localtime(time()))[7];
-
-or more legibly (in 5.004 or higher):
-
- use Time::localtime;
- $day_of_year = localtime(time())->yday;
-
-You can find the week of the year by dividing this by 7:
-
- $week_of_year = int($day_of_year / 7);
-
-Of course, this believes that weeks start at zero. The Date::Calc
-module from CPAN has a lot of date calculation functions, including
-day of the year, week of the year, and so on. Note that not
-all businesses consider ``week 1'' to be the same; for example,
-American businesses often consider the first week with a Monday
-in it to be Work Week #1, despite ISO 8601, which considers
-WW1 to be the first week with a Thursday in it.
-
-=head2 How do I find the current century or millennium?
-
-Use the following simple functions:
-
- sub get_century {
- return int((((localtime(shift || time))[5] + 1999))/100);
- }
- sub get_millennium {
- return 1+int((((localtime(shift || time))[5] + 1899))/1000);
- }
-
-On some systems, you'll find that the POSIX module's strftime() function
-has been extended in a non-standard way to use a C<%C> format, which they
-sometimes claim is the "century". It isn't, because on most such systems,
-this is only the first two digits of the four-digit year, and thus cannot
-be used to reliably determine the current century or millennium.
-
-=head2 How can I compare two dates and find the difference?
-
-If you're storing your dates as epoch seconds then simply subtract one
-from the other. If you've got a structured date (distinct year, day,
-month, hour, minute, seconds values), then for reasons of accessibility,
-simplicity, and efficiency, merely use either timelocal or timegm (from
-the Time::Local module in the standard distribution) to reduce structured
-dates to epoch seconds. However, if you don't know the precise format of
-your dates, then you should probably use either of the Date::Manip and
-Date::Calc modules from CPAN before you go hacking up your own parsing
-routine to handle arbitrary date formats.
-
-=head2 How can I take a string and turn it into epoch seconds?
-
-If it's a regular enough string that it always has the same format,
-you can split it up and pass the parts to C<timelocal> in the standard
-Time::Local module. Otherwise, you should look into the Date::Calc
-and Date::Manip modules from CPAN.
-
-=head2 How can I find the Julian Day?
-
-Use the Time::JulianDay module (part of the Time-modules bundle
-available from CPAN.)
-
-Before you immerse yourself too deeply in this, be sure to verify that it
-is the I<Julian> Day you really want. Are you really just interested in
-a way of getting serial days so that they can do date arithmetic? If you
-are interested in performing date arithmetic, this can be done using
-either Date::Manip or Date::Calc, without converting to Julian Day first.
-
-There is too much confusion on this issue to cover in this FAQ, but the
-term is applied (correctly) to a calendar now supplanted by the Gregorian
-Calendar, with the Julian Calendar failing to adjust properly for leap
-years on centennial years (among other annoyances). The term is also used
-(incorrectly) to mean: [1] days in the Gregorian Calendar; and [2] days
-since a particular starting time or `epoch', usually 1970 in the Unix
-world and 1980 in the MS-DOS/Windows world. If you find that it is not
-the first meaning that you really want, then check out the Date::Manip
-and Date::Calc modules. (Thanks to David Cassell for most of this text.)
-
-=head2 How do I find yesterday's date?
-
-The C<time()> function returns the current time in seconds since the
-epoch. Take twenty-four hours off that:
-
- $yesterday = time() - ( 24 * 60 * 60 );
-
-Then you can pass this to C<localtime()> and get the individual year,
-month, day, hour, minute, seconds values.
-
-Note very carefully that the code above assumes that your days are
-twenty-four hours each. For most people, there are two days a year
-when they aren't: the switch to and from summer time throws this off.
-A solution to this issue is offered by Russ Allbery.
-
- sub yesterday {
- my $now = defined $_[0] ? $_[0] : time;
- my $then = $now - 60 * 60 * 24;
- my $ndst = (localtime $now)[8] > 0;
- my $tdst = (localtime $then)[8] > 0;
- $then - ($tdst - $ndst) * 60 * 60;
- }
- # Should give you "this time yesterday" in seconds since epoch relative to
- # the first argument or the current time if no argument is given and
- # suitable for passing to localtime or whatever else you need to do with
- # it. $ndst is whether we're currently in daylight savings time; $tdst is
- # whether the point 24 hours ago was in daylight savings time. If $tdst
- # and $ndst are the same, a boundary wasn't crossed, and the correction
- # will subtract 0. If $tdst is 1 and $ndst is 0, subtract an hour more
- # from yesterday's time since we gained an extra hour while going off
- # daylight savings time. If $tdst is 0 and $ndst is 1, subtract a
- # negative hour (add an hour) to yesterday's time since we lost an hour.
- #
- # All of this is because during those days when one switches off or onto
- # DST, a "day" isn't 24 hours long; it's either 23 or 25.
- #
- # The explicit settings of $ndst and $tdst are necessary because localtime
- # only says it returns the system tm struct, and the system tm struct at
- # least on Solaris doesn't guarantee any particular positive value (like,
- # say, 1) for isdst, just a positive value. And that value can
- # potentially be negative, if DST information isn't available (this sub
- # just treats those cases like no DST).
- #
- # Note that between 2am and 3am on the day after the time zone switches
- # off daylight savings time, the exact hour of "yesterday" corresponding
- # to the current hour is not clearly defined. Note also that if used
- # between 2am and 3am the day after the change to daylight savings time,
- # the result will be between 3am and 4am of the previous day; it's
- # arguable whether this is correct.
- #
- # This sub does not attempt to deal with leap seconds (most things don't).
- #
- # Copyright relinquished 1999 by Russ Allbery <rra@stanford.edu>
- # This code is in the public domain
-
-=head2 Does Perl have a Year 2000 problem? Is Perl Y2K compliant?
-
-Short answer: No, Perl does not have a Year 2000 problem. Yes, Perl is
-Y2K compliant (whatever that means). The programmers you've hired to
-use it, however, probably are not.
-
-Long answer: The question belies a true understanding of the issue.
-Perl is just as Y2K compliant as your pencil--no more, and no less.
-Can you use your pencil to write a non-Y2K-compliant memo? Of course
-you can. Is that the pencil's fault? Of course it isn't.
-
-The date and time functions supplied with Perl (gmtime and localtime)
-supply adequate information to determine the year well beyond 2000
-(2038 is when trouble strikes for 32-bit machines). The year returned
-by these functions when used in a list context is the year minus 1900.
-For years between 1910 and 1999 this I<happens> to be a 2-digit decimal
-number. To avoid the year 2000 problem simply do not treat the year as
-a 2-digit number. It isn't.
-
-When gmtime() and localtime() are used in scalar context they return
-a timestamp string that contains a fully-expanded year. For example,
-C<$timestamp = gmtime(1005613200)> sets $timestamp to "Tue Nov 13 01:00:00
-2001". There's no year 2000 problem here.
-
-That doesn't mean that Perl can't be used to create non-Y2K compliant
-programs. It can. But so can your pencil. It's the fault of the user,
-not the language. At the risk of inflaming the NRA: ``Perl doesn't
-break Y2K, people do.'' See http://language.perl.com/news/y2k.html for
-a longer exposition.
-
-=head1 Data: Strings
-
-=head2 How do I validate input?
-
-The answer to this question is usually a regular expression, perhaps
-with auxiliary logic. See the more specific questions (numbers, mail
-addresses, etc.) for details.
-
-=head2 How do I unescape a string?
-
-It depends just what you mean by ``escape''. URL escapes are dealt
-with in L<perlfaq9>. Shell escapes with the backslash (C<\>)
-character are removed with
-
- s/\\(.)/$1/g;
-
-This won't expand C<"\n"> or C<"\t"> or any other special escapes.
-
-=head2 How do I remove consecutive pairs of characters?
-
-To turn C<"abbcccd"> into C<"abccd">:
-
- s/(.)\1/$1/g; # add /s to include newlines
-
-Here's a solution that turns "abbcccd" to "abcd":
-
- y///cs; # y == tr, but shorter :-)
-
-=head2 How do I expand function calls in a string?
-
-This is documented in L<perlref>. In general, this is fraught with
-quoting and readability problems, but it is possible. To interpolate
-a subroutine call (in list context) into a string:
-
- print "My sub returned @{[mysub(1,2,3)]} that time.\n";
-
-If you prefer scalar context, similar chicanery is also useful for
-arbitrary expressions:
-
- print "That yields ${\($n + 5)} widgets\n";
-
-Version 5.004 of Perl had a bug that gave list context to the
-expression in C<${...}>, but this is fixed in version 5.005.
-
-See also ``How can I expand variables in text strings?'' in this
-section of the FAQ.
-
-=head2 How do I find matching/nesting anything?
-
-This isn't something that can be done in one regular expression, no
-matter how complicated. To find something between two single
-characters, a pattern like C</x([^x]*)x/> will get the intervening
-bits in $1. For multiple ones, then something more like
-C</alpha(.*?)omega/> would be needed. But none of these deals with
-nested patterns, nor can they. For that you'll have to write a
-parser.
-
-If you are serious about writing a parser, there are a number of
-modules or oddities that will make your life a lot easier. There are
-the CPAN modules Parse::RecDescent, Parse::Yapp, and Text::Balanced;
-and the byacc program.
-
-One simple destructive, inside-out approach that you might try is to
-pull out the smallest nesting parts one at a time:
-
- while (s/BEGIN((?:(?!BEGIN)(?!END).)*)END//gs) {
- # do something with $1
- }
-
-A more complicated and sneaky approach is to make Perl's regular
-expression engine do it for you. This is courtesy Dean Inada, and
-rather has the nature of an Obfuscated Perl Contest entry, but it
-really does work:
-
- # $_ contains the string to parse
- # BEGIN and END are the opening and closing markers for the
- # nested text.
-
- @( = ('(','');
- @) = (')','');
- ($re=$_)=~s/((BEGIN)|(END)|.)/$)[!$3]\Q$1\E$([!$2]/gs;
- @$ = (eval{/$re/},$@!~/unmatched/);
- print join("\n",@$[0..$#$]) if( $$[-1] );
-
-=head2 How do I reverse a string?
-
-Use reverse() in scalar context, as documented in
-L<perlfunc/reverse>.
-
- $reversed = reverse $string;
-
-=head2 How do I expand tabs in a string?
-
-You can do it yourself:
-
- 1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e;
-
-Or you can just use the Text::Tabs module (part of the standard Perl
-distribution).
-
- use Text::Tabs;
- @expanded_lines = expand(@lines_with_tabs);
-
-=head2 How do I reformat a paragraph?
-
-Use Text::Wrap (part of the standard Perl distribution):
-
- use Text::Wrap;
- print wrap("\t", ' ', @paragraphs);
-
-The paragraphs you give to Text::Wrap should not contain embedded
-newlines. Text::Wrap doesn't justify the lines (flush-right).
-
-=head2 How can I access/change the first N letters of a string?
-
-There are many ways. If you just want to grab a copy, use
-substr():
-
- $first_byte = substr($a, 0, 1);
-
-If you want to modify part of a string, the simplest way is often to
-use substr() as an lvalue:
-
- substr($a, 0, 3) = "Tom";
-
-Although those with a pattern matching kind of thought process will
-likely prefer
-
- $a =~ s/^.../Tom/;
-
-=head2 How do I change the Nth occurrence of something?
-
-You have to keep track of N yourself. For example, let's say you want
-to change the fifth occurrence of C<"whoever"> or C<"whomever"> into
-C<"whosoever"> or C<"whomsoever">, case insensitively. These
-all assume that $_ contains the string to be altered.
-
- $count = 0;
- s{((whom?)ever)}{
- ++$count == 5 # is it the 5th?
- ? "${2}soever" # yes, swap
- : $1 # renege and leave it there
- }ige;
-
-In the more general case, you can use the C</g> modifier in a C<while>
-loop, keeping count of matches.
-
- $WANT = 3;
- $count = 0;
- $_ = "One fish two fish red fish blue fish";
- while (/(\w+)\s+fish\b/gi) {
- if (++$count == $WANT) {
- print "The third fish is a $1 one.\n";
- }
- }
-
-That prints out: C<"The third fish is a red one."> You can also use a
-repetition count and repeated pattern like this:
-
- /(?:\w+\s+fish\s+){2}(\w+)\s+fish/i;
-
-=head2 How can I count the number of occurrences of a substring within a string?
-
-There are a number of ways, with varying efficiency. If you want a
-count of a certain single character (X) within a string, you can use the
-C<tr///> function like so:
-
- $string = "ThisXlineXhasXsomeXx'sXinXit";
- $count = ($string =~ tr/X//);
- print "There are $count X characters in the string";
-
-This is fine if you are just looking for a single character. However,
-if you are trying to count multiple character substrings within a
-larger string, C<tr///> won't work. What you can do is wrap a while()
-loop around a global pattern match. For example, let's count negative
-integers:
-
- $string = "-9 55 48 -2 23 -76 4 14 -44";
- while ($string =~ /-\d+/g) { $count++ }
- print "There are $count negative numbers in the string";
-
-=head2 How do I capitalize all the words on one line?
-
-To make the first letter of each word upper case:
-
- $line =~ s/\b(\w)/\U$1/g;
-
-This has the strange effect of turning "C<don't do it>" into "C<Don'T
-Do It>". Sometimes you might want this. Other times you might need a
-more thorough solution (Suggested by brian d. foy):
-
- $string =~ s/ (
- (^\w) #at the beginning of the line
- | # or
- (\s\w) #preceded by whitespace
- )
- /\U$1/xg;
- $string =~ /([\w']+)/\u\L$1/g;
-
-To make the whole line upper case:
-
- $line = uc($line);
-
-To force each word to be lower case, with the first letter upper case:
-
- $line =~ s/(\w+)/\u\L$1/g;
-
-You can (and probably should) enable locale awareness of those
-characters by placing a C<use locale> pragma in your program.
-See L<perllocale> for endless details on locales.
-
-This is sometimes referred to as putting something into "title
-case", but that's not quite accurate. Consider the proper
-capitalization of the movie I<Dr. Strangelove or: How I Learned to
-Stop Worrying and Love the Bomb>, for example.
-
-=head2 How can I split a [character] delimited string except when inside
-[character]? (Comma-separated files)
-
-Take the example case of trying to split a string that is comma-separated
-into its different fields. (We'll pretend you said comma-separated, not
-comma-delimited, which is different and almost never what you mean.) You
-can't use C<split(/,/)> because you shouldn't split if the comma is inside
-quotes. For example, take a data line like this:
-
- SAR001,"","Cimetrix, Inc","Bob Smith","CAM",N,8,1,0,7,"Error, Core Dumped"
-
-Due to the restriction of the quotes, this is a fairly complex
-problem. Thankfully, we have Jeffrey Friedl, author of a highly
-recommended book on regular expressions, to handle these for us. He
-suggests (assuming your string is contained in $text):
-
- @new = ();
- push(@new, $+) while $text =~ m{
- "([^\"\\]*(?:\\.[^\"\\]*)*)",? # groups the phrase inside the quotes
- | ([^,]+),?
- | ,
- }gx;
- push(@new, undef) if substr($text,-1,1) eq ',';
-
-If you want to represent quotation marks inside a
-quotation-mark-delimited field, escape them with backslashes (eg,
-C<"like \"this\"">. Unescaping them is a task addressed earlier in
-this section.
-
-Alternatively, the Text::ParseWords module (part of the standard Perl
-distribution) lets you say:
-
- use Text::ParseWords;
- @new = quotewords(",", 0, $text);
-
-There's also a Text::CSV (Comma-Separated Values) module on CPAN.
-
-=head2 How do I strip blank space from the beginning/end of a string?
-
-Although the simplest approach would seem to be
-
- $string =~ s/^\s*(.*?)\s*$/$1/;
-
-not only is this unnecessarily slow and destructive, it also fails with
-embedded newlines. It is much faster to do this operation in two steps:
-
- $string =~ s/^\s+//;
- $string =~ s/\s+$//;
-
-Or more nicely written as:
-
- for ($string) {
- s/^\s+//;
- s/\s+$//;
- }
-
-This idiom takes advantage of the C<foreach> loop's aliasing
-behavior to factor out common code. You can do this
-on several strings at once, or arrays, or even the
-values of a hash if you use a slice:
-
- # trim whitespace in the scalar, the array,
- # and all the values in the hash
- foreach ($scalar, @array, @hash{keys %hash}) {
- s/^\s+//;
- s/\s+$//;
- }
-
-=head2 How do I pad a string with blanks or pad a number with zeroes?
-
-(This answer contributed by Uri Guttman, with kibitzing from
-Bart Lateur.)
-
-In the following examples, C<$pad_len> is the length to which you wish
-to pad the string, C<$text> or C<$num> contains the string to be padded,
-and C<$pad_char> contains the padding character. You can use a single
-character string constant instead of the C<$pad_char> variable if you
-know what it is in advance. And in the same way you can use an integer in
-place of C<$pad_len> if you know the pad length in advance.
-
-The simplest method uses the C<sprintf> function. It can pad on the left
-or right with blanks and on the left with zeroes and it will not
-truncate the result. The C<pack> function can only pad strings on the
-right with blanks and it will truncate the result to a maximum length of
-C<$pad_len>.
-
- # Left padding a string with blanks (no truncation):
- $padded = sprintf("%${pad_len}s", $text);
-
- # Right padding a string with blanks (no truncation):
- $padded = sprintf("%-${pad_len}s", $text);
-
- # Left padding a number with 0 (no truncation):
- $padded = sprintf("%0${pad_len}d", $num);
-
- # Right padding a string with blanks using pack (will truncate):
- $padded = pack("A$pad_len",$text);
-
-If you need to pad with a character other than blank or zero you can use
-one of the following methods. They all generate a pad string with the
-C<x> operator and combine that with C<$text>. These methods do
-not truncate C<$text>.
-
-Left and right padding with any character, creating a new string:
-
- $padded = $pad_char x ( $pad_len - length( $text ) ) . $text;
- $padded = $text . $pad_char x ( $pad_len - length( $text ) );
-
-Left and right padding with any character, modifying C<$text> directly:
-
- substr( $text, 0, 0 ) = $pad_char x ( $pad_len - length( $text ) );
- $text .= $pad_char x ( $pad_len - length( $text ) );
-
-=head2 How do I extract selected columns from a string?
-
-Use substr() or unpack(), both documented in L<perlfunc>.
-If you prefer thinking in terms of columns instead of widths,
-you can use this kind of thing:
-
- # determine the unpack format needed to split Linux ps output
- # arguments are cut columns
- my $fmt = cut2fmt(8, 14, 20, 26, 30, 34, 41, 47, 59, 63, 67, 72);
-
- sub cut2fmt {
- my(@positions) = @_;
- my $template = '';
- my $lastpos = 1;
- for my $place (@positions) {
- $template .= "A" . ($place - $lastpos) . " ";
- $lastpos = $place;
- }
- $template .= "A*";
- return $template;
- }
-
-=head2 How do I find the soundex value of a string?
-
-Use the standard Text::Soundex module distributed with Perl.
-Before you do so, you may want to determine whether `soundex' is in
-fact what you think it is. Knuth's soundex algorithm compresses words
-into a small space, and so it does not necessarily distinguish between
-two words which you might want to appear separately. For example, the
-last names `Knuth' and `Kant' are both mapped to the soundex code K530.
-If Text::Soundex does not do what you are looking for, you might want
-to consider the String::Approx module available at CPAN.
-
-=head2 How can I expand variables in text strings?
-
-Let's assume that you have a string like:
-
- $text = 'this has a $foo in it and a $bar';
-
-If those were both global variables, then this would
-suffice:
-
- $text =~ s/\$(\w+)/${$1}/g; # no /e needed
-
-But since they are probably lexicals, or at least, they could
-be, you'd have to do this:
-
- $text =~ s/(\$\w+)/$1/eeg;
- die if $@; # needed /ee, not /e
-
-It's probably better in the general case to treat those
-variables as entries in some special hash. For example:
-
- %user_defs = (
- foo => 23,
- bar => 19,
- );
- $text =~ s/\$(\w+)/$user_defs{$1}/g;
-
-See also ``How do I expand function calls in a string?'' in this section
-of the FAQ.
-
-=head2 What's wrong with always quoting "$vars"?
-
-The problem is that those double-quotes force stringification--
-coercing numbers and references into strings--even when you
-don't want them to be strings. Think of it this way: double-quote
-expansion is used to produce new strings. If you already
-have a string, why do you need more?
-
-If you get used to writing odd things like these:
-
- print "$var"; # BAD
- $new = "$old"; # BAD
- somefunc("$var"); # BAD
-
-You'll be in trouble. Those should (in 99.8% of the cases) be
-the simpler and more direct:
-
- print $var;
- $new = $old;
- somefunc($var);
-
-Otherwise, besides slowing you down, you're going to break code when
-the thing in the scalar is actually neither a string nor a number, but
-a reference:
-
- func(\@array);
- sub func {
- my $aref = shift;
- my $oref = "$aref"; # WRONG
- }
-
-You can also get into subtle problems on those few operations in Perl
-that actually do care about the difference between a string and a
-number, such as the magical C<++> autoincrement operator or the
-syscall() function.
-
-Stringification also destroys arrays.
-
- @lines = `command`;
- print "@lines"; # WRONG - extra blanks
- print @lines; # right
-
-=head2 Why don't my <<HERE documents work?
-
-Check for these three things:
-
-=over 4
-
-=item 1. There must be no space after the << part.
-
-=item 2. There (probably) should be a semicolon at the end.
-
-=item 3. You can't (easily) have any space in front of the tag.
-
-=back
-
-If you want to indent the text in the here document, you
-can do this:
-
- # all in one
- ($VAR = <<HERE_TARGET) =~ s/^\s+//gm;
- your text
- goes here
- HERE_TARGET
-
-But the HERE_TARGET must still be flush against the margin.
-If you want that indented also, you'll have to quote
-in the indentation.
-
- ($quote = <<' FINIS') =~ s/^\s+//gm;
- ...we will have peace, when you and all your works have
- perished--and the works of your dark master to whom you
- would deliver us. You are a liar, Saruman, and a corrupter
- of men's hearts. --Theoden in /usr/src/perl/taint.c
- FINIS
- $quote =~ s/\s*--/\n--/;
-
-A nice general-purpose fixer-upper function for indented here documents
-follows. It expects to be called with a here document as its argument.
-It looks to see whether each line begins with a common substring, and
-if so, strips that substring off. Otherwise, it takes the amount of leading
-whitespace found on the first line and removes that much off each
-subsequent line.
-
- sub fix {
- local $_ = shift;
- my ($white, $leader); # common whitespace and common leading string
- if (/^\s*(?:([^\w\s]+)(\s*).*\n)(?:\s*\1\2?.*\n)+$/) {
- ($white, $leader) = ($2, quotemeta($1));
- } else {
- ($white, $leader) = (/^(\s+)/, '');
- }
- s/^\s*?$leader(?:$white)?//gm;
- return $_;
- }
-
-This works with leading special strings, dynamically determined:
-
- $remember_the_main = fix<<' MAIN_INTERPRETER_LOOP';
- @@@ int
- @@@ runops() {
- @@@ SAVEI32(runlevel);
- @@@ runlevel++;
- @@@ while ( op = (*op->op_ppaddr)() );
- @@@ TAINT_NOT;
- @@@ return 0;
- @@@ }
- MAIN_INTERPRETER_LOOP
-
-Or with a fixed amount of leading whitespace, with remaining
-indentation correctly preserved:
-
- $poem = fix<<EVER_ON_AND_ON;
- Now far ahead the Road has gone,
- And I must follow, if I can,
- Pursuing it with eager feet,
- Until it joins some larger way
- Where many paths and errands meet.
- And whither then? I cannot say.
- --Bilbo in /usr/src/perl/pp_ctl.c
- EVER_ON_AND_ON
-
-=head1 Data: Arrays
-
-=head2 What is the difference between a list and an array?
-
-An array has a changeable length. A list does not. An array is something
-you can push or pop, while a list is a set of values. Some people make
-the distinction that a list is a value while an array is a variable.
-Subroutines are passed and return lists, you put things into list
-context, you initialize arrays with lists, and you foreach() across
-a list. C<@> variables are arrays, anonymous arrays are arrays, arrays
-in scalar context behave like the number of elements in them, subroutines
-access their arguments through the array C<@_>, and push/pop/shift only work
-on arrays.
-
-As a side note, there's no such thing as a list in scalar context.
-When you say
-
- $scalar = (2, 5, 7, 9);
-
-you're using the comma operator in scalar context, so it uses the scalar
-comma operator. There never was a list there at all! This causes the
-last value to be returned: 9.
-
-=head2 What is the difference between $array[1] and @array[1]?
-
-The former is a scalar value; the latter an array slice, making
-it a list with one (scalar) value. You should use $ when you want a
-scalar value (most of the time) and @ when you want a list with one
-scalar value in it (very, very rarely; nearly never, in fact).
-
-Sometimes it doesn't make a difference, but sometimes it does.
-For example, compare:
-
- $good[0] = `some program that outputs several lines`;
-
-with
-
- @bad[0] = `same program that outputs several lines`;
-
-The C<use warnings> pragma and the B<-w> flag will warn you about these
-matters.
-
-=head2 How can I remove duplicate elements from a list or array?
-
-There are several possible ways, depending on whether the array is
-ordered and whether you wish to preserve the ordering.
-
-=over 4
-
-=item a)
-
-If @in is sorted, and you want @out to be sorted:
-(this assumes all true values in the array)
-
- $prev = "not equal to $in[0]";
- @out = grep($_ ne $prev && ($prev = $_, 1), @in);
-
-This is nice in that it doesn't use much extra memory, simulating
-uniq(1)'s behavior of removing only adjacent duplicates. The ", 1"
-guarantees that the expression is true (so that grep picks it up)
-even if the $_ is 0, "", or undef.
-
-=item b)
-
-If you don't know whether @in is sorted:
-
- undef %saw;
- @out = grep(!$saw{$_}++, @in);
-
-=item c)
-
-Like (b), but @in contains only small integers:
-
- @out = grep(!$saw[$_]++, @in);
-
-=item d)
-
-A way to do (b) without any loops or greps:
-
- undef %saw;
- @saw{@in} = ();
- @out = sort keys %saw; # remove sort if undesired
-
-=item e)
-
-Like (d), but @in contains only small positive integers:
-
- undef @ary;
- @ary[@in] = @in;
- @out = grep {defined} @ary;
-
-=back
-
-But perhaps you should have been using a hash all along, eh?
-
-=head2 How can I tell whether a list or array contains a certain element?
-
-Hearing the word "in" is an I<in>dication that you probably should have
-used a hash, not a list or array, to store your data. Hashes are
-designed to answer this question quickly and efficiently. Arrays aren't.
-
-That being said, there are several ways to approach this. If you
-are going to make this query many times over arbitrary string values,
-the fastest way is probably to invert the original array and keep an
-associative array lying about whose keys are the first array's values.
-
- @blues = qw/azure cerulean teal turquoise lapis-lazuli/;
- undef %is_blue;
- for (@blues) { $is_blue{$_} = 1 }
-
-Now you can check whether $is_blue{$some_color}. It might have been a
-good idea to keep the blues all in a hash in the first place.
-
-If the values are all small integers, you could use a simple indexed
-array. This kind of an array will take up less space:
-
- @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31);
- undef @is_tiny_prime;
- for (@primes) { $is_tiny_prime[$_] = 1 }
- # or simply @istiny_prime[@primes] = (1) x @primes;
-
-Now you check whether $is_tiny_prime[$some_number].
-
-If the values in question are integers instead of strings, you can save
-quite a lot of space by using bit strings instead:
-
- @articles = ( 1..10, 150..2000, 2017 );
- undef $read;
- for (@articles) { vec($read,$_,1) = 1 }
-
-Now check whether C<vec($read,$n,1)> is true for some C<$n>.
-
-Please do not use
-
- ($is_there) = grep $_ eq $whatever, @array;
-
-or worse yet
-
- ($is_there) = grep /$whatever/, @array;
-
-These are slow (checks every element even if the first matches),
-inefficient (same reason), and potentially buggy (what if there are
-regex characters in $whatever?). If you're only testing once, then
-use:
-
- $is_there = 0;
- foreach $elt (@array) {
- if ($elt eq $elt_to_find) {
- $is_there = 1;
- last;
- }
- }
- if ($is_there) { ... }
-
-=head2 How do I compute the difference of two arrays? How do I compute the intersection of two arrays?
-
-Use a hash. Here's code to do both and more. It assumes that
-each element is unique in a given array:
-
- @union = @intersection = @difference = ();
- %count = ();
- foreach $element (@array1, @array2) { $count{$element}++ }
- foreach $element (keys %count) {
- push @union, $element;
- push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element;
- }
-
-Note that this is the I<symmetric difference>, that is, all elements in
-either A or in B but not in both. Think of it as an xor operation.
-
-=head2 How do I test whether two arrays or hashes are equal?
-
-The following code works for single-level arrays. It uses a stringwise
-comparison, and does not distinguish defined versus undefined empty
-strings. Modify if you have other needs.
-
- $are_equal = compare_arrays(\@frogs, \@toads);
-
- sub compare_arrays {
- my ($first, $second) = @_;
- no warnings; # silence spurious -w undef complaints
- return 0 unless @$first == @$second;
- for (my $i = 0; $i < @$first; $i++) {
- return 0 if $first->[$i] ne $second->[$i];
- }
- return 1;
- }
-
-For multilevel structures, you may wish to use an approach more
-like this one. It uses the CPAN module FreezeThaw:
-
- use FreezeThaw qw(cmpStr);
- @a = @b = ( "this", "that", [ "more", "stuff" ] );
-
- printf "a and b contain %s arrays\n",
- cmpStr(\@a, \@b) == 0
- ? "the same"
- : "different";
-
-This approach also works for comparing hashes. Here
-we'll demonstrate two different answers:
-
- use FreezeThaw qw(cmpStr cmpStrHard);
-
- %a = %b = ( "this" => "that", "extra" => [ "more", "stuff" ] );
- $a{EXTRA} = \%b;
- $b{EXTRA} = \%a;
-
- printf "a and b contain %s hashes\n",
- cmpStr(\%a, \%b) == 0 ? "the same" : "different";
-
- printf "a and b contain %s hashes\n",
- cmpStrHard(\%a, \%b) == 0 ? "the same" : "different";
-
-
-The first reports that both those the hashes contain the same data,
-while the second reports that they do not. Which you prefer is left as
-an exercise to the reader.
-
-=head2 How do I find the first array element for which a condition is true?
-
-You can use this if you care about the index:
-
- for ($i= 0; $i < @array; $i++) {
- if ($array[$i] eq "Waldo") {
- $found_index = $i;
- last;
- }
- }
-
-Now C<$found_index> has what you want.
-
-=head2 How do I handle linked lists?
-
-In general, you usually don't need a linked list in Perl, since with
-regular arrays, you can push and pop or shift and unshift at either end,
-or you can use splice to add and/or remove arbitrary number of elements at
-arbitrary points. Both pop and shift are both O(1) operations on Perl's
-dynamic arrays. In the absence of shifts and pops, push in general
-needs to reallocate on the order every log(N) times, and unshift will
-need to copy pointers each time.
-
-If you really, really wanted, you could use structures as described in
-L<perldsc> or L<perltoot> and do just what the algorithm book tells you
-to do. For example, imagine a list node like this:
-
- $node = {
- VALUE => 42,
- LINK => undef,
- };
-
-You could walk the list this way:
-
- print "List: ";
- for ($node = $head; $node; $node = $node->{LINK}) {
- print $node->{VALUE}, " ";
- }
- print "\n";
-
-You could add to the list this way:
-
- my ($head, $tail);
- $tail = append($head, 1); # grow a new head
- for $value ( 2 .. 10 ) {
- $tail = append($tail, $value);
- }
-
- sub append {
- my($list, $value) = @_;
- my $node = { VALUE => $value };
- if ($list) {
- $node->{LINK} = $list->{LINK};
- $list->{LINK} = $node;
- } else {
- $_[0] = $node; # replace caller's version
- }
- return $node;
- }
-
-But again, Perl's built-in are virtually always good enough.
-
-=head2 How do I handle circular lists?
-
-Circular lists could be handled in the traditional fashion with linked
-lists, or you could just do something like this with an array:
-
- unshift(@array, pop(@array)); # the last shall be first
- push(@array, shift(@array)); # and vice versa
-
-=head2 How do I shuffle an array randomly?
-
-Use this:
-
- # fisher_yates_shuffle( \@array ) :
- # generate a random permutation of @array in place
- sub fisher_yates_shuffle {
- my $array = shift;
- my $i;
- for ($i = @$array; --$i; ) {
- my $j = int rand ($i+1);
- @$array[$i,$j] = @$array[$j,$i];
- }
- }
-
- fisher_yates_shuffle( \@array ); # permutes @array in place
-
-You've probably seen shuffling algorithms that work using splice,
-randomly picking another element to swap the current element with
-
- srand;
- @new = ();
- @old = 1 .. 10; # just a demo
- while (@old) {
- push(@new, splice(@old, rand @old, 1));
- }
-
-This is bad because splice is already O(N), and since you do it N times,
-you just invented a quadratic algorithm; that is, O(N**2). This does
-not scale, although Perl is so efficient that you probably won't notice
-this until you have rather largish arrays.
-
-=head2 How do I process/modify each element of an array?
-
-Use C<for>/C<foreach>:
-
- for (@lines) {
- s/foo/bar/; # change that word
- y/XZ/ZX/; # swap those letters
- }
-
-Here's another; let's compute spherical volumes:
-
- for (@volumes = @radii) { # @volumes has changed parts
- $_ **= 3;
- $_ *= (4/3) * 3.14159; # this will be constant folded
- }
-
-If you want to do the same thing to modify the values of the hash,
-you may not use the C<values> function, oddly enough. You need a slice:
-
- for $orbit ( @orbits{keys %orbits} ) {
- ($orbit **= 3) *= (4/3) * 3.14159;
- }
-
-=head2 How do I select a random element from an array?
-
-Use the rand() function (see L<perlfunc/rand>):
-
- # at the top of the program:
- srand; # not needed for 5.004 and later
-
- # then later on
- $index = rand @array;
- $element = $array[$index];
-
-Make sure you I<only call srand once per program, if then>.
-If you are calling it more than once (such as before each
-call to rand), you're almost certainly doing something wrong.
-
-=head2 How do I permute N elements of a list?
-
-Here's a little program that generates all permutations
-of all the words on each line of input. The algorithm embodied
-in the permute() function should work on any list:
-
- #!/usr/bin/perl -n
- # tsc-permute: permute each word of input
- permute([split], []);
- sub permute {
- my @items = @{ $_[0] };
- my @perms = @{ $_[1] };
- unless (@items) {
- print "@perms\n";
- } else {
- my(@newitems,@newperms,$i);
- foreach $i (0 .. $#items) {
- @newitems = @items;
- @newperms = @perms;
- unshift(@newperms, splice(@newitems, $i, 1));
- permute([@newitems], [@newperms]);
- }
- }
- }
-
-=head2 How do I sort an array by (anything)?
-
-Supply a comparison function to sort() (described in L<perlfunc/sort>):
-
- @list = sort { $a <=> $b } @list;
-
-The default sort function is cmp, string comparison, which would
-sort C<(1, 2, 10)> into C<(1, 10, 2)>. C<< <=> >>, used above, is
-the numerical comparison operator.
-
-If you have a complicated function needed to pull out the part you
-want to sort on, then don't do it inside the sort function. Pull it
-out first, because the sort BLOCK can be called many times for the
-same element. Here's an example of how to pull out the first word
-after the first number on each item, and then sort those words
-case-insensitively.
-
- @idx = ();
- for (@data) {
- ($item) = /\d+\s*(\S+)/;
- push @idx, uc($item);
- }
- @sorted = @data[ sort { $idx[$a] cmp $idx[$b] } 0 .. $#idx ];
-
-which could also be written this way, using a trick
-that's come to be known as the Schwartzian Transform:
-
- @sorted = map { $_->[0] }
- sort { $a->[1] cmp $b->[1] }
- map { [ $_, uc( (/\d+\s*(\S+)/)[0]) ] } @data;
-
-If you need to sort on several fields, the following paradigm is useful.
-
- @sorted = sort { field1($a) <=> field1($b) ||
- field2($a) cmp field2($b) ||
- field3($a) cmp field3($b)
- } @data;
-
-This can be conveniently combined with precalculation of keys as given
-above.
-
-See http://www.perl.com/CPAN/doc/FMTEYEWTK/sort.html for more about
-this approach.
-
-See also the question below on sorting hashes.
-
-=head2 How do I manipulate arrays of bits?
-
-Use pack() and unpack(), or else vec() and the bitwise operations.
-
-For example, this sets $vec to have bit N set if $ints[N] was set:
-
- $vec = '';
- foreach(@ints) { vec($vec,$_,1) = 1 }
-
-And here's how, given a vector in $vec, you can
-get those bits into your @ints array:
-
- sub bitvec_to_list {
- my $vec = shift;
- my @ints;
- # Find null-byte density then select best algorithm
- if ($vec =~ tr/\0// / length $vec > 0.95) {
- use integer;
- my $i;
- # This method is faster with mostly null-bytes
- while($vec =~ /[^\0]/g ) {
- $i = -9 + 8 * pos $vec;
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- push @ints, $i if vec($vec, ++$i, 1);
- }
- } else {
- # This method is a fast general algorithm
- use integer;
- my $bits = unpack "b*", $vec;
- push @ints, 0 if $bits =~ s/^(\d)// && $1;
- push @ints, pos $bits while($bits =~ /1/g);
- }
- return \@ints;
- }
-
-This method gets faster the more sparse the bit vector is.
-(Courtesy of Tim Bunce and Winfried Koenig.)
-
-Here's a demo on how to use vec():
-
- # vec demo
- $vector = "\xff\x0f\xef\xfe";
- print "Ilya's string \\xff\\x0f\\xef\\xfe represents the number ",
- unpack("N", $vector), "\n";
- $is_set = vec($vector, 23, 1);
- print "Its 23rd bit is ", $is_set ? "set" : "clear", ".\n";
- pvec($vector);
-
- set_vec(1,1,1);
- set_vec(3,1,1);
- set_vec(23,1,1);
-
- set_vec(3,1,3);
- set_vec(3,2,3);
- set_vec(3,4,3);
- set_vec(3,4,7);
- set_vec(3,8,3);
- set_vec(3,8,7);
-
- set_vec(0,32,17);
- set_vec(1,32,17);
-
- sub set_vec {
- my ($offset, $width, $value) = @_;
- my $vector = '';
- vec($vector, $offset, $width) = $value;
- print "offset=$offset width=$width value=$value\n";
- pvec($vector);
- }
-
- sub pvec {
- my $vector = shift;
- my $bits = unpack("b*", $vector);
- my $i = 0;
- my $BASE = 8;
-
- print "vector length in bytes: ", length($vector), "\n";
- @bytes = unpack("A8" x length($vector), $bits);
- print "bits are: @bytes\n\n";
- }
-
-=head2 Why does defined() return true on empty arrays and hashes?
-
-The short story is that you should probably only use defined on scalars or
-functions, not on aggregates (arrays and hashes). See L<perlfunc/defined>
-in the 5.004 release or later of Perl for more detail.
-
-=head1 Data: Hashes (Associative Arrays)
-
-=head2 How do I process an entire hash?
-
-Use the each() function (see L<perlfunc/each>) if you don't care
-whether it's sorted:
-
- while ( ($key, $value) = each %hash) {
- print "$key = $value\n";
- }
-
-If you want it sorted, you'll have to use foreach() on the result of
-sorting the keys as shown in an earlier question.
-
-=head2 What happens if I add or remove keys from a hash while iterating over it?
-
-Don't do that. :-)
-
-[lwall] In Perl 4, you were not allowed to modify a hash at all while
-iterating over it. In Perl 5 you can delete from it, but you still
-can't add to it, because that might cause a doubling of the hash table,
-in which half the entries get copied up to the new top half of the
-table, at which point you've totally bamboozled the iterator code.
-Even if the table doesn't double, there's no telling whether your new
-entry will be inserted before or after the current iterator position.
-
-Either treasure up your changes and make them after the iterator finishes
-or use keys to fetch all the old keys at once, and iterate over the list
-of keys.
-
-=head2 How do I look up a hash element by value?
-
-Create a reverse hash:
-
- %by_value = reverse %by_key;
- $key = $by_value{$value};
-
-That's not particularly efficient. It would be more space-efficient
-to use:
-
- while (($key, $value) = each %by_key) {
- $by_value{$value} = $key;
- }
-
-If your hash could have repeated values, the methods above will only find
-one of the associated keys. This may or may not worry you. If it does
-worry you, you can always reverse the hash into a hash of arrays instead:
-
- while (($key, $value) = each %by_key) {
- push @{$key_list_by_value{$value}}, $key;
- }
-
-=head2 How can I know how many entries are in a hash?
-
-If you mean how many keys, then all you have to do is
-take the scalar sense of the keys() function:
-
- $num_keys = scalar keys %hash;
-
-The keys() function also resets the iterator, which in void context is
-faster for tied hashes than would be iterating through the whole
-hash, one key-value pair at a time.
-
-=head2 How do I sort a hash (optionally by value instead of key)?
-
-Internally, hashes are stored in a way that prevents you from imposing
-an order on key-value pairs. Instead, you have to sort a list of the
-keys or values:
-
- @keys = sort keys %hash; # sorted by key
- @keys = sort {
- $hash{$a} cmp $hash{$b}
- } keys %hash; # and by value
-
-Here we'll do a reverse numeric sort by value, and if two keys are
-identical, sort by length of key, or if that fails, by straight ASCII
-comparison of the keys (well, possibly modified by your locale--see
-L<perllocale>).
-
- @keys = sort {
- $hash{$b} <=> $hash{$a}
- ||
- length($b) <=> length($a)
- ||
- $a cmp $b
- } keys %hash;
-
-=head2 How can I always keep my hash sorted?
-
-You can look into using the DB_File module and tie() using the
-$DB_BTREE hash bindings as documented in L<DB_File/"In Memory Databases">.
-The Tie::IxHash module from CPAN might also be instructive.
-
-=head2 What's the difference between "delete" and "undef" with hashes?
-
-Hashes are pairs of scalars: the first is the key, the second is the
-value. The key will be coerced to a string, although the value can be
-any kind of scalar: string, number, or reference. If a key C<$key> is
-present in the array, C<exists($key)> will return true. The value for
-a given key can be C<undef>, in which case C<$array{$key}> will be
-C<undef> while C<$exists{$key}> will return true. This corresponds to
-(C<$key>, C<undef>) being in the hash.
-
-Pictures help... here's the C<%ary> table:
-
- keys values
- +------+------+
- | a | 3 |
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
-
-And these conditions hold
-
- $ary{'a'} is true
- $ary{'d'} is false
- defined $ary{'d'} is true
- defined $ary{'a'} is true
- exists $ary{'a'} is true (Perl5 only)
- grep ($_ eq 'a', keys %ary) is true
-
-If you now say
-
- undef $ary{'a'}
-
-your table now reads:
-
-
- keys values
- +------+------+
- | a | undef|
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
-
-and these conditions now hold; changes in caps:
-
- $ary{'a'} is FALSE
- $ary{'d'} is false
- defined $ary{'d'} is true
- defined $ary{'a'} is FALSE
- exists $ary{'a'} is true (Perl5 only)
- grep ($_ eq 'a', keys %ary) is true
-
-Notice the last two: you have an undef value, but a defined key!
-
-Now, consider this:
-
- delete $ary{'a'}
-
-your table now reads:
-
- keys values
- +------+------+
- | x | 7 |
- | d | 0 |
- | e | 2 |
- +------+------+
-
-and these conditions now hold; changes in caps:
-
- $ary{'a'} is false
- $ary{'d'} is false
- defined $ary{'d'} is true
- defined $ary{'a'} is false
- exists $ary{'a'} is FALSE (Perl5 only)
- grep ($_ eq 'a', keys %ary) is FALSE
-
-See, the whole entry is gone!
-
-=head2 Why don't my tied hashes make the defined/exists distinction?
-
-They may or may not implement the EXISTS() and DEFINED() methods
-differently. For example, there isn't the concept of undef with hashes
-that are tied to DBM* files. This means the true/false tables above
-will give different results when used on such a hash. It also means
-that exists and defined do the same thing with a DBM* file, and what
-they end up doing is not what they do with ordinary hashes.
-
-=head2 How do I reset an each() operation part-way through?
-
-Using C<keys %hash> in scalar context returns the number of keys in
-the hash I<and> resets the iterator associated with the hash. You may
-need to do this if you use C<last> to exit a loop early so that when you
-re-enter it, the hash iterator has been reset.
-
-=head2 How can I get the unique keys from two hashes?
-
-First you extract the keys from the hashes into lists, then solve
-the "removing duplicates" problem described above. For example:
-
- %seen = ();
- for $element (keys(%foo), keys(%bar)) {
- $seen{$element}++;
- }
- @uniq = keys %seen;
-
-Or more succinctly:
-
- @uniq = keys %{{%foo,%bar}};
-
-Or if you really want to save space:
-
- %seen = ();
- while (defined ($key = each %foo)) {
- $seen{$key}++;
- }
- while (defined ($key = each %bar)) {
- $seen{$key}++;
- }
- @uniq = keys %seen;
-
-=head2 How can I store a multidimensional array in a DBM file?
-
-Either stringify the structure yourself (no fun), or else
-get the MLDBM (which uses Data::Dumper) module from CPAN and layer
-it on top of either DB_File or GDBM_File.
-
-=head2 How can I make my hash remember the order I put elements into it?
-
-Use the Tie::IxHash from CPAN.
-
- use Tie::IxHash;
- tie(%myhash, Tie::IxHash);
- for ($i=0; $i<20; $i++) {
- $myhash{$i} = 2*$i;
- }
- @keys = keys %myhash;
- # @keys = (0,1,2,3,...)
-
-=head2 Why does passing a subroutine an undefined element in a hash create it?
-
-If you say something like:
-
- somefunc($hash{"nonesuch key here"});
-
-Then that element "autovivifies"; that is, it springs into existence
-whether you store something there or not. That's because functions
-get scalars passed in by reference. If somefunc() modifies C<$_[0]>,
-it has to be ready to write it back into the caller's version.
-
-This has been fixed as of Perl5.004.
-
-Normally, merely accessing a key's value for a nonexistent key does
-I<not> cause that key to be forever there. This is different than
-awk's behavior.
-
-=head2 How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
-
-Usually a hash ref, perhaps like this:
-
- $record = {
- NAME => "Jason",
- EMPNO => 132,
- TITLE => "deputy peon",
- AGE => 23,
- SALARY => 37_000,
- PALS => [ "Norbert", "Rhys", "Phineas"],
- };
-
-References are documented in L<perlref> and the upcoming L<perlreftut>.
-Examples of complex data structures are given in L<perldsc> and
-L<perllol>. Examples of structures and object-oriented classes are
-in L<perltoot>.
-
-=head2 How can I use a reference as a hash key?
-
-You can't do this directly, but you could use the standard Tie::Refhash
-module distributed with Perl.
-
-=head1 Data: Misc
-
-=head2 How do I handle binary data correctly?
-
-Perl is binary clean, so this shouldn't be a problem. For example,
-this works fine (assuming the files are found):
-
- if (`cat /vmunix` =~ /gzip/) {
- print "Your kernel is GNU-zip enabled!\n";
- }
-
-On less elegant (read: Byzantine) systems, however, you have
-to play tedious games with "text" versus "binary" files. See
-L<perlfunc/"binmode"> or L<perlopentut>. Most of these ancient-thinking
-systems are curses out of Microsoft, who seem to be committed to putting
-the backward into backward compatibility.
-
-If you're concerned about 8-bit ASCII data, then see L<perllocale>.
-
-If you want to deal with multibyte characters, however, there are
-some gotchas. See the section on Regular Expressions.
-
-=head2 How do I determine whether a scalar is a number/whole/integer/float?
-
-Assuming that you don't care about IEEE notations like "NaN" or
-"Infinity", you probably just want to use a regular expression.
-
- if (/\D/) { print "has nondigits\n" }
- if (/^\d+$/) { print "is a whole number\n" }
- if (/^-?\d+$/) { print "is an integer\n" }
- if (/^[+-]?\d+$/) { print "is a +/- integer\n" }
- if (/^-?\d+\.?\d*$/) { print "is a real number\n" }
- if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) { print "is a decimal number" }
- if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
- { print "a C float" }
-
-If you're on a POSIX system, Perl's supports the C<POSIX::strtod>
-function. Its semantics are somewhat cumbersome, so here's a C<getnum>
-wrapper function for more convenient access. This function takes
-a string and returns the number it found, or C<undef> for input that
-isn't a C float. The C<is_numeric> function is a front end to C<getnum>
-if you just want to say, ``Is this a float?''
-
- sub getnum {
- use POSIX qw(strtod);
- my $str = shift;
- $str =~ s/^\s+//;
- $str =~ s/\s+$//;
- $! = 0;
- my($num, $unparsed) = strtod($str);
- if (($str eq '') || ($unparsed != 0) || $!) {
- return undef;
- } else {
- return $num;
- }
- }
-
- sub is_numeric { defined getnum($_[0]) }
-
-Or you could check out the String::Scanf module on CPAN instead. The
-POSIX module (part of the standard Perl distribution) provides the
-C<strtod> and C<strtol> for converting strings to double and longs,
-respectively.
-
-=head2 How do I keep persistent data across program calls?
-
-For some specific applications, you can use one of the DBM modules.
-See L<AnyDBM_File>. More generically, you should consult the FreezeThaw,
-Storable, or Class::Eroot modules from CPAN. Here's one example using
-Storable's C<store> and C<retrieve> functions:
-
- use Storable;
- store(\%hash, "filename");
-
- # later on...
- $href = retrieve("filename"); # by ref
- %hash = %{ retrieve("filename") }; # direct to hash
-
-=head2 How do I print out or copy a recursive data structure?
-
-The Data::Dumper module on CPAN (or the 5.005 release of Perl) is great
-for printing out data structures. The Storable module, found on CPAN,
-provides a function called C<dclone> that recursively copies its argument.
-
- use Storable qw(dclone);
- $r2 = dclone($r1);
-
-Where $r1 can be a reference to any kind of data structure you'd like.
-It will be deeply copied. Because C<dclone> takes and returns references,
-you'd have to add extra punctuation if you had a hash of arrays that
-you wanted to copy.
-
- %newhash = %{ dclone(\%oldhash) };
-
-=head2 How do I define methods for every class/object?
-
-Use the UNIVERSAL class (see L<UNIVERSAL>).
-
-=head2 How do I verify a credit card checksum?
-
-Get the Business::CreditCard module from CPAN.
-
-=head2 How do I pack arrays of doubles or floats for XS code?
-
-The kgbpack.c code in the PGPLOT module on CPAN does just this.
-If you're doing a lot of float or double processing, consider using
-the PDL module from CPAN instead--it makes number-crunching easy.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work
-may be distributed only under the terms of Perl's Artistic License.
-Any distribution of this file or derivatives thereof I<outside>
-of that package require that special arrangements be made with
-copyright holder.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
diff --git a/contrib/perl5/pod/perlfaq5.pod b/contrib/perl5/pod/perlfaq5.pod
deleted file mode 100644
index 4ae7407..0000000
--- a/contrib/perl5/pod/perlfaq5.pod
+++ /dev/null
@@ -1,1216 +0,0 @@
-=head1 NAME
-
-perlfaq5 - Files and Formats ($Revision: 1.38 $, $Date: 1999/05/23 16:08:30 $)
-
-=head1 DESCRIPTION
-
-This section deals with I/O and the "f" issues: filehandles, flushing,
-formats, and footers.
-
-=head2 How do I flush/unbuffer an output filehandle? Why must I do this?
-
-The C standard I/O library (stdio) normally buffers characters sent to
-devices. This is done for efficiency reasons so that there isn't a
-system call for each byte. Any time you use print() or write() in
-Perl, you go though this buffering. syswrite() circumvents stdio and
-buffering.
-
-In most stdio implementations, the type of output buffering and the size of
-the buffer varies according to the type of device. Disk files are block
-buffered, often with a buffer size of more than 2k. Pipes and sockets
-are often buffered with a buffer size between 1/2 and 2k. Serial devices
-(e.g. modems, terminals) are normally line-buffered, and stdio sends
-the entire line when it gets the newline.
-
-Perl does not support truly unbuffered output (except insofar as you can
-C<syswrite(OUT, $char, 1)>). What it does instead support is "command
-buffering", in which a physical write is performed after every output
-command. This isn't as hard on your system as unbuffering, but does
-get the output where you want it when you want it.
-
-If you expect characters to get to your device when you print them there,
-you'll want to autoflush its handle.
-Use select() and the C<$|> variable to control autoflushing
-(see L<perlvar/$|> and L<perlfunc/select>):
-
- $old_fh = select(OUTPUT_HANDLE);
- $| = 1;
- select($old_fh);
-
-Or using the traditional idiom:
-
- select((select(OUTPUT_HANDLE), $| = 1)[0]);
-
-Or if don't mind slowly loading several thousand lines of module code
-just because you're afraid of the C<$|> variable:
-
- use FileHandle;
- open(DEV, "+</dev/tty"); # ceci n'est pas une pipe
- DEV->autoflush(1);
-
-or the newer IO::* modules:
-
- use IO::Handle;
- open(DEV, ">/dev/printer"); # but is this?
- DEV->autoflush(1);
-
-or even this:
-
- use IO::Socket; # this one is kinda a pipe?
- $sock = IO::Socket::INET->new(PeerAddr => 'www.perl.com',
- PeerPort => 'http(80)',
- Proto => 'tcp');
- die "$!" unless $sock;
-
- $sock->autoflush();
- print $sock "GET / HTTP/1.0" . "\015\012" x 2;
- $document = join('', <$sock>);
- print "DOC IS: $document\n";
-
-Note the bizarrely hardcoded carriage return and newline in their octal
-equivalents. This is the ONLY way (currently) to assure a proper flush
-on all platforms, including Macintosh. That's the way things work in
-network programming: you really should specify the exact bit pattern
-on the network line terminator. In practice, C<"\n\n"> often works,
-but this is not portable.
-
-See L<perlfaq9> for other examples of fetching URLs over the web.
-
-=head2 How do I change one line in a file/delete a line in a file/insert a line in the middle of a file/append to the beginning of a file?
-
-Those are operations of a text editor. Perl is not a text editor.
-Perl is a programming language. You have to decompose the problem into
-low-level calls to read, write, open, close, and seek.
-
-Although humans have an easy time thinking of a text file as being a
-sequence of lines that operates much like a stack of playing cards--or
-punch cards--computers usually see the text file as a sequence of bytes.
-In general, there's no direct way for Perl to seek to a particular line
-of a file, insert text into a file, or remove text from a file.
-
-(There are exceptions in special circumstances. You can add or remove
-data at the very end of the file. A sequence of bytes can be replaced
-with another sequence of the same length. The C<$DB_RECNO> array
-bindings as documented in L<DB_File> also provide a direct way of
-modifying a file. Files where all lines are the same length are also
-easy to alter.)
-
-The general solution is to create a temporary copy of the text file with
-the changes you want, then copy that over the original. This assumes
-no locking.
-
- $old = $file;
- $new = "$file.tmp.$$";
- $bak = "$file.orig";
-
- open(OLD, "< $old") or die "can't open $old: $!";
- open(NEW, "> $new") or die "can't open $new: $!";
-
- # Correct typos, preserving case
- while (<OLD>) {
- s/\b(p)earl\b/${1}erl/i;
- (print NEW $_) or die "can't write to $new: $!";
- }
-
- close(OLD) or die "can't close $old: $!";
- close(NEW) or die "can't close $new: $!";
-
- rename($old, $bak) or die "can't rename $old to $bak: $!";
- rename($new, $old) or die "can't rename $new to $old: $!";
-
-Perl can do this sort of thing for you automatically with the C<-i>
-command-line switch or the closely-related C<$^I> variable (see
-L<perlrun> for more details). Note that
-C<-i> may require a suffix on some non-Unix systems; see the
-platform-specific documentation that came with your port.
-
- # Renumber a series of tests from the command line
- perl -pi -e 's/(^\s+test\s+)\d+/ $1 . ++$count /e' t/op/taint.t
-
- # form a script
- local($^I, @ARGV) = ('.orig', glob("*.c"));
- while (<>) {
- if ($. == 1) {
- print "This line should appear at the top of each file\n";
- }
- s/\b(p)earl\b/${1}erl/i; # Correct typos, preserving case
- print;
- close ARGV if eof; # Reset $.
- }
-
-If you need to seek to an arbitrary line of a file that changes
-infrequently, you could build up an index of byte positions of where
-the line ends are in the file. If the file is large, an index of
-every tenth or hundredth line end would allow you to seek and read
-fairly efficiently. If the file is sorted, try the look.pl library
-(part of the standard perl distribution).
-
-In the unique case of deleting lines at the end of a file, you
-can use tell() and truncate(). The following code snippet deletes
-the last line of a file without making a copy or reading the
-whole file into memory:
-
- open (FH, "+< $file");
- while ( <FH> ) { $addr = tell(FH) unless eof(FH) }
- truncate(FH, $addr);
-
-Error checking is left as an exercise for the reader.
-
-=head2 How do I count the number of lines in a file?
-
-One fairly efficient way is to count newlines in the file. The
-following program uses a feature of tr///, as documented in L<perlop>.
-If your text file doesn't end with a newline, then it's not really a
-proper text file, so this may report one fewer line than you expect.
-
- $lines = 0;
- open(FILE, $filename) or die "Can't open `$filename': $!";
- while (sysread FILE, $buffer, 4096) {
- $lines += ($buffer =~ tr/\n//);
- }
- close FILE;
-
-This assumes no funny games with newline translations.
-
-=head2 How do I make a temporary file name?
-
-Use the C<new_tmpfile> class method from the IO::File module to get a
-filehandle opened for reading and writing. Use it if you don't
-need to know the file's name:
-
- use IO::File;
- $fh = IO::File->new_tmpfile()
- or die "Unable to make new temporary file: $!";
-
-If you do need to know the file's name, you can use the C<tmpnam>
-function from the POSIX module to get a filename that you then open
-yourself:
-
-
- use Fcntl;
- use POSIX qw(tmpnam);
-
- # try new temporary filenames until we get one that didn't already
- # exist; the check should be unnecessary, but you can't be too careful
- do { $name = tmpnam() }
- until sysopen(FH, $name, O_RDWR|O_CREAT|O_EXCL);
-
- # install atexit-style handler so that when we exit or die,
- # we automatically delete this temporary file
- END { unlink($name) or die "Couldn't unlink $name : $!" }
-
- # now go on to use the file ...
-
-If you're committed to creating a temporary file by hand, use the
-process ID and/or the current time-value. If you need to have many
-temporary files in one process, use a counter:
-
- BEGIN {
- use Fcntl;
- my $temp_dir = -d '/tmp' ? '/tmp' : $ENV{TMP} || $ENV{TEMP};
- my $base_name = sprintf("%s/%d-%d-0000", $temp_dir, $$, time());
- sub temp_file {
- local *FH;
- my $count = 0;
- until (defined(fileno(FH)) || $count++ > 100) {
- $base_name =~ s/-(\d+)$/"-" . (1 + $1)/e;
- sysopen(FH, $base_name, O_WRONLY|O_EXCL|O_CREAT);
- }
- if (defined(fileno(FH))
- return (*FH, $base_name);
- } else {
- return ();
- }
- }
- }
-
-=head2 How can I manipulate fixed-record-length files?
-
-The most efficient way is using pack() and unpack(). This is faster than
-using substr() when taking many, many strings. It is slower for just a few.
-
-Here is a sample chunk of code to break up and put back together again
-some fixed-format input lines, in this case from the output of a normal,
-Berkeley-style ps:
-
- # sample input line:
- # 15158 p5 T 0:00 perl /home/tchrist/scripts/now-what
- $PS_T = 'A6 A4 A7 A5 A*';
- open(PS, "ps|");
- print scalar <PS>;
- while (<PS>) {
- ($pid, $tt, $stat, $time, $command) = unpack($PS_T, $_);
- for $var (qw!pid tt stat time command!) {
- print "$var: <$$var>\n";
- }
- print 'line=', pack($PS_T, $pid, $tt, $stat, $time, $command),
- "\n";
- }
-
-We've used C<$$var> in a way that forbidden by C<use strict 'refs'>.
-That is, we've promoted a string to a scalar variable reference using
-symbolic references. This is ok in small programs, but doesn't scale
-well. It also only works on global variables, not lexicals.
-
-=head2 How can I make a filehandle local to a subroutine? How do I pass filehandles between subroutines? How do I make an array of filehandles?
-
-The fastest, simplest, and most direct way is to localize the typeglob
-of the filehandle in question:
-
- local *TmpHandle;
-
-Typeglobs are fast (especially compared with the alternatives) and
-reasonably easy to use, but they also have one subtle drawback. If you
-had, for example, a function named TmpHandle(), or a variable named
-%TmpHandle, you just hid it from yourself.
-
- sub findme {
- local *HostFile;
- open(HostFile, "</etc/hosts") or die "no /etc/hosts: $!";
- local $_; # <- VERY IMPORTANT
- while (<HostFile>) {
- print if /\b127\.(0\.0\.)?1\b/;
- }
- # *HostFile automatically closes/disappears here
- }
-
-Here's how to use typeglobs in a loop to open and store a bunch of
-filehandles. We'll use as values of the hash an ordered
-pair to make it easy to sort the hash in insertion order.
-
- @names = qw(motd termcap passwd hosts);
- my $i = 0;
- foreach $filename (@names) {
- local *FH;
- open(FH, "/etc/$filename") || die "$filename: $!";
- $file{$filename} = [ $i++, *FH ];
- }
-
- # Using the filehandles in the array
- foreach $name (sort { $file{$a}[0] <=> $file{$b}[0] } keys %file) {
- my $fh = $file{$name}[1];
- my $line = <$fh>;
- print "$name $. $line";
- }
-
-For passing filehandles to functions, the easiest way is to
-preface them with a star, as in func(*STDIN).
-See L<perlfaq7/"Passing Filehandles"> for details.
-
-If you want to create many anonymous handles, you should check out the
-Symbol, FileHandle, or IO::Handle (etc.) modules. Here's the equivalent
-code with Symbol::gensym, which is reasonably light-weight:
-
- foreach $filename (@names) {
- use Symbol;
- my $fh = gensym();
- open($fh, "/etc/$filename") || die "open /etc/$filename: $!";
- $file{$filename} = [ $i++, $fh ];
- }
-
-Here's using the semi-object-oriented FileHandle module, which certainly
-isn't light-weight:
-
- use FileHandle;
-
- foreach $filename (@names) {
- my $fh = FileHandle->new("/etc/$filename") or die "$filename: $!";
- $file{$filename} = [ $i++, $fh ];
- }
-
-Please understand that whether the filehandle happens to be a (probably
-localized) typeglob or an anonymous handle from one of the modules
-in no way affects the bizarre rules for managing indirect handles.
-See the next question.
-
-=head2 How can I use a filehandle indirectly?
-
-An indirect filehandle is using something other than a symbol
-in a place that a filehandle is expected. Here are ways
-to get indirect filehandles:
-
- $fh = SOME_FH; # bareword is strict-subs hostile
- $fh = "SOME_FH"; # strict-refs hostile; same package only
- $fh = *SOME_FH; # typeglob
- $fh = \*SOME_FH; # ref to typeglob (bless-able)
- $fh = *SOME_FH{IO}; # blessed IO::Handle from *SOME_FH typeglob
-
-Or, you can use the C<new> method from the FileHandle or IO modules to
-create an anonymous filehandle, store that in a scalar variable,
-and use it as though it were a normal filehandle.
-
- use FileHandle;
- $fh = FileHandle->new();
-
- use IO::Handle; # 5.004 or higher
- $fh = IO::Handle->new();
-
-Then use any of those as you would a normal filehandle. Anywhere that
-Perl is expecting a filehandle, an indirect filehandle may be used
-instead. An indirect filehandle is just a scalar variable that contains
-a filehandle. Functions like C<print>, C<open>, C<seek>, or
-the C<< <FH> >> diamond operator will accept either a read filehandle
-or a scalar variable containing one:
-
- ($ifh, $ofh, $efh) = (*STDIN, *STDOUT, *STDERR);
- print $ofh "Type it: ";
- $got = <$ifh>
- print $efh "What was that: $got";
-
-If you're passing a filehandle to a function, you can write
-the function in two ways:
-
- sub accept_fh {
- my $fh = shift;
- print $fh "Sending to indirect filehandle\n";
- }
-
-Or it can localize a typeglob and use the filehandle directly:
-
- sub accept_fh {
- local *FH = shift;
- print FH "Sending to localized filehandle\n";
- }
-
-Both styles work with either objects or typeglobs of real filehandles.
-(They might also work with strings under some circumstances, but this
-is risky.)
-
- accept_fh(*STDOUT);
- accept_fh($handle);
-
-In the examples above, we assigned the filehandle to a scalar variable
-before using it. That is because only simple scalar variables, not
-expressions or subscripts of hashes or arrays, can be used with
-built-ins like C<print>, C<printf>, or the diamond operator. Using
-something other than a simple scalar varaible as a filehandle is
-illegal and won't even compile:
-
- @fd = (*STDIN, *STDOUT, *STDERR);
- print $fd[1] "Type it: "; # WRONG
- $got = <$fd[0]> # WRONG
- print $fd[2] "What was that: $got"; # WRONG
-
-With C<print> and C<printf>, you get around this by using a block and
-an expression where you would place the filehandle:
-
- print { $fd[1] } "funny stuff\n";
- printf { $fd[1] } "Pity the poor %x.\n", 3_735_928_559;
- # Pity the poor deadbeef.
-
-That block is a proper block like any other, so you can put more
-complicated code there. This sends the message out to one of two places:
-
- $ok = -x "/bin/cat";
- print { $ok ? $fd[1] : $fd[2] } "cat stat $ok\n";
- print { $fd[ 1+ ($ok || 0) ] } "cat stat $ok\n";
-
-This approach of treating C<print> and C<printf> like object methods
-calls doesn't work for the diamond operator. That's because it's a
-real operator, not just a function with a comma-less argument. Assuming
-you've been storing typeglobs in your structure as we did above, you
-can use the built-in function named C<readline> to reads a record just
-as C<< <> >> does. Given the initialization shown above for @fd, this
-would work, but only because readline() require a typeglob. It doesn't
-work with objects or strings, which might be a bug we haven't fixed yet.
-
- $got = readline($fd[0]);
-
-Let it be noted that the flakiness of indirect filehandles is not
-related to whether they're strings, typeglobs, objects, or anything else.
-It's the syntax of the fundamental operators. Playing the object
-game doesn't help you at all here.
-
-=head2 How can I set up a footer format to be used with write()?
-
-There's no builtin way to do this, but L<perlform> has a couple of
-techniques to make it possible for the intrepid hacker.
-
-=head2 How can I write() into a string?
-
-See L<perlform/"Accessing Formatting Internals"> for an swrite() function.
-
-=head2 How can I output my numbers with commas added?
-
-This one will do it for you:
-
- sub commify {
- local $_ = shift;
- 1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
- return $_;
- }
-
- $n = 23659019423.2331;
- print "GOT: ", commify($n), "\n";
-
- GOT: 23,659,019,423.2331
-
-You can't just:
-
- s/^([-+]?\d+)(\d{3})/$1,$2/g;
-
-because you have to put the comma in and then recalculate your
-position.
-
-Alternatively, this code commifies all numbers in a line regardless of
-whether they have decimal portions, are preceded by + or -, or
-whatever:
-
- # from Andrew Johnson <ajohnson@gpu.srv.ualberta.ca>
- sub commify {
- my $input = shift;
- $input = reverse $input;
- $input =~ s<(\d\d\d)(?=\d)(?!\d*\.)><$1,>g;
- return scalar reverse $input;
- }
-
-=head2 How can I translate tildes (~) in a filename?
-
-Use the <> (glob()) operator, documented in L<perlfunc>. Older
-versions of Perl require that you have a shell installed that groks
-tildes. Recent perl versions have this feature built in. The
-Glob::KGlob module (available from CPAN) gives more portable glob
-functionality.
-
-Within Perl, you may use this directly:
-
- $filename =~ s{
- ^ ~ # find a leading tilde
- ( # save this in $1
- [^/] # a non-slash character
- * # repeated 0 or more times (0 means me)
- )
- }{
- $1
- ? (getpwnam($1))[7]
- : ( $ENV{HOME} || $ENV{LOGDIR} )
- }ex;
-
-=head2 How come when I open a file read-write it wipes it out?
-
-Because you're using something like this, which truncates the file and
-I<then> gives you read-write access:
-
- open(FH, "+> /path/name"); # WRONG (almost always)
-
-Whoops. You should instead use this, which will fail if the file
-doesn't exist.
-
- open(FH, "+< /path/name"); # open for update
-
-Using ">" always clobbers or creates. Using "<" never does
-either. The "+" doesn't change this.
-
-Here are examples of many kinds of file opens. Those using sysopen()
-all assume
-
- use Fcntl;
-
-To open file for reading:
-
- open(FH, "< $path") || die $!;
- sysopen(FH, $path, O_RDONLY) || die $!;
-
-To open file for writing, create new file if needed or else truncate old file:
-
- open(FH, "> $path") || die $!;
- sysopen(FH, $path, O_WRONLY|O_TRUNC|O_CREAT) || die $!;
- sysopen(FH, $path, O_WRONLY|O_TRUNC|O_CREAT, 0666) || die $!;
-
-To open file for writing, create new file, file must not exist:
-
- sysopen(FH, $path, O_WRONLY|O_EXCL|O_CREAT) || die $!;
- sysopen(FH, $path, O_WRONLY|O_EXCL|O_CREAT, 0666) || die $!;
-
-To open file for appending, create if necessary:
-
- open(FH, ">> $path") || die $!;
- sysopen(FH, $path, O_WRONLY|O_APPEND|O_CREAT) || die $!;
- sysopen(FH, $path, O_WRONLY|O_APPEND|O_CREAT, 0666) || die $!;
-
-To open file for appending, file must exist:
-
- sysopen(FH, $path, O_WRONLY|O_APPEND) || die $!;
-
-To open file for update, file must exist:
-
- open(FH, "+< $path") || die $!;
- sysopen(FH, $path, O_RDWR) || die $!;
-
-To open file for update, create file if necessary:
-
- sysopen(FH, $path, O_RDWR|O_CREAT) || die $!;
- sysopen(FH, $path, O_RDWR|O_CREAT, 0666) || die $!;
-
-To open file for update, file must not exist:
-
- sysopen(FH, $path, O_RDWR|O_EXCL|O_CREAT) || die $!;
- sysopen(FH, $path, O_RDWR|O_EXCL|O_CREAT, 0666) || die $!;
-
-To open a file without blocking, creating if necessary:
-
- sysopen(FH, "/tmp/somefile", O_WRONLY|O_NDELAY|O_CREAT)
- or die "can't open /tmp/somefile: $!":
-
-Be warned that neither creation nor deletion of files is guaranteed to
-be an atomic operation over NFS. That is, two processes might both
-successfully create or unlink the same file! Therefore O_EXCL
-isn't as exclusive as you might wish.
-
-See also the new L<perlopentut> if you have it (new for 5.6).
-
-=head2 Why do I sometimes get an "Argument list too long" when I use <*>?
-
-The C<< <> >> operator performs a globbing operation (see above).
-In Perl versions earlier than v5.6.0, the internal glob() operator forks
-csh(1) to do the actual glob expansion, but
-csh can't handle more than 127 items and so gives the error message
-C<Argument list too long>. People who installed tcsh as csh won't
-have this problem, but their users may be surprised by it.
-
-To get around this, either upgrade to Perl v5.6.0 or later, do the glob
-yourself with readdir() and patterns, or use a module like Glob::KGlob,
-one that doesn't use the shell to do globbing.
-
-=head2 Is there a leak/bug in glob()?
-
-Due to the current implementation on some operating systems, when you
-use the glob() function or its angle-bracket alias in a scalar
-context, you may cause a memory leak and/or unpredictable behavior. It's
-best therefore to use glob() only in list context.
-
-=head2 How can I open a file with a leading ">" or trailing blanks?
-
-Normally perl ignores trailing blanks in filenames, and interprets
-certain leading characters (or a trailing "|") to mean something
-special. To avoid this, you might want to use a routine like the one below.
-It turns incomplete pathnames into explicit relative ones, and tacks a
-trailing null byte on the name to make perl leave it alone:
-
- sub safe_filename {
- local $_ = shift;
- s#^([^./])#./$1#;
- $_ .= "\0";
- return $_;
- }
-
- $badpath = "<<<something really wicked ";
- $fn = safe_filename($badpath");
- open(FH, "> $fn") or "couldn't open $badpath: $!";
-
-This assumes that you are using POSIX (portable operating systems
-interface) paths. If you are on a closed, non-portable, proprietary
-system, you may have to adjust the C<"./"> above.
-
-It would be a lot clearer to use sysopen(), though:
-
- use Fcntl;
- $badpath = "<<<something really wicked ";
- sysopen (FH, $badpath, O_WRONLY | O_CREAT | O_TRUNC)
- or die "can't open $badpath: $!";
-
-For more information, see also the new L<perlopentut> if you have it
-(new for 5.6).
-
-=head2 How can I reliably rename a file?
-
-Well, usually you just use Perl's rename() function. That may not
-work everywhere, though, particularly when renaming files across file systems.
-Some sub-Unix systems have broken ports that corrupt the semantics of
-rename()--for example, WinNT does this right, but Win95 and Win98
-are broken. (The last two parts are not surprising, but the first is. :-)
-
-If your operating system supports a proper mv(1) program or its moral
-equivalent, this works:
-
- rename($old, $new) or system("mv", $old, $new);
-
-It may be more compelling to use the File::Copy module instead. You
-just copy to the new file to the new name (checking return values),
-then delete the old one. This isn't really the same semantically as a
-real rename(), though, which preserves metainformation like
-permissions, timestamps, inode info, etc.
-
-Newer versions of File::Copy exports a move() function.
-
-=head2 How can I lock a file?
-
-Perl's builtin flock() function (see L<perlfunc> for details) will call
-flock(2) if that exists, fcntl(2) if it doesn't (on perl version 5.004 and
-later), and lockf(3) if neither of the two previous system calls exists.
-On some systems, it may even use a different form of native locking.
-Here are some gotchas with Perl's flock():
-
-=over 4
-
-=item 1
-
-Produces a fatal error if none of the three system calls (or their
-close equivalent) exists.
-
-=item 2
-
-lockf(3) does not provide shared locking, and requires that the
-filehandle be open for writing (or appending, or read/writing).
-
-=item 3
-
-Some versions of flock() can't lock files over a network (e.g. on NFS file
-systems), so you'd need to force the use of fcntl(2) when you build Perl.
-But even this is dubious at best. See the flock entry of L<perlfunc>
-and the F<INSTALL> file in the source distribution for information on
-building Perl to do this.
-
-Two potentially non-obvious but traditional flock semantics are that
-it waits indefinitely until the lock is granted, and that its locks are
-I<merely advisory>. Such discretionary locks are more flexible, but
-offer fewer guarantees. This means that files locked with flock() may
-be modified by programs that do not also use flock(). Cars that stop
-for red lights get on well with each other, but not with cars that don't
-stop for red lights. See the perlport manpage, your port's specific
-documentation, or your system-specific local manpages for details. It's
-best to assume traditional behavior if you're writing portable programs.
-(If you're not, you should as always feel perfectly free to write
-for your own system's idiosyncrasies (sometimes called "features").
-Slavish adherence to portability concerns shouldn't get in the way of
-your getting your job done.)
-
-For more information on file locking, see also
-L<perlopentut/"File Locking"> if you have it (new for 5.6).
-
-=back
-
-=head2 Why can't I just open(FH, ">file.lock")?
-
-A common bit of code B<NOT TO USE> is this:
-
- sleep(3) while -e "file.lock"; # PLEASE DO NOT USE
- open(LCK, "> file.lock"); # THIS BROKEN CODE
-
-This is a classic race condition: you take two steps to do something
-which must be done in one. That's why computer hardware provides an
-atomic test-and-set instruction. In theory, this "ought" to work:
-
- sysopen(FH, "file.lock", O_WRONLY|O_EXCL|O_CREAT)
- or die "can't open file.lock: $!":
-
-except that lamentably, file creation (and deletion) is not atomic
-over NFS, so this won't work (at least, not every time) over the net.
-Various schemes involving link() have been suggested, but
-these tend to involve busy-wait, which is also subdesirable.
-
-=head2 I still don't get locking. I just want to increment the number in the file. How can I do this?
-
-Didn't anyone ever tell you web-page hit counters were useless?
-They don't count number of hits, they're a waste of time, and they serve
-only to stroke the writer's vanity. It's better to pick a random number;
-they're more realistic.
-
-Anyway, this is what you can do if you can't help yourself.
-
- use Fcntl qw(:DEFAULT :flock);
- sysopen(FH, "numfile", O_RDWR|O_CREAT) or die "can't open numfile: $!";
- flock(FH, LOCK_EX) or die "can't flock numfile: $!";
- $num = <FH> || 0;
- seek(FH, 0, 0) or die "can't rewind numfile: $!";
- truncate(FH, 0) or die "can't truncate numfile: $!";
- (print FH $num+1, "\n") or die "can't write numfile: $!";
- close FH or die "can't close numfile: $!";
-
-Here's a much better web-page hit counter:
-
- $hits = int( (time() - 850_000_000) / rand(1_000) );
-
-If the count doesn't impress your friends, then the code might. :-)
-
-=head2 How do I randomly update a binary file?
-
-If you're just trying to patch a binary, in many cases something as
-simple as this works:
-
- perl -i -pe 's{window manager}{window mangler}g' /usr/bin/emacs
-
-However, if you have fixed sized records, then you might do something more
-like this:
-
- $RECSIZE = 220; # size of record, in bytes
- $recno = 37; # which record to update
- open(FH, "+<somewhere") || die "can't update somewhere: $!";
- seek(FH, $recno * $RECSIZE, 0);
- read(FH, $record, $RECSIZE) == $RECSIZE || die "can't read record $recno: $!";
- # munge the record
- seek(FH, -$RECSIZE, 1);
- print FH $record;
- close FH;
-
-Locking and error checking are left as an exercise for the reader.
-Don't forget them or you'll be quite sorry.
-
-=head2 How do I get a file's timestamp in perl?
-
-If you want to retrieve the time at which the file was last read,
-written, or had its meta-data (owner, etc) changed, you use the B<-M>,
-B<-A>, or B<-C> filetest operations as documented in L<perlfunc>. These
-retrieve the age of the file (measured against the start-time of your
-program) in days as a floating point number. To retrieve the "raw"
-time in seconds since the epoch, you would call the stat function,
-then use localtime(), gmtime(), or POSIX::strftime() to convert this
-into human-readable form.
-
-Here's an example:
-
- $write_secs = (stat($file))[9];
- printf "file %s updated at %s\n", $file,
- scalar localtime($write_secs);
-
-If you prefer something more legible, use the File::stat module
-(part of the standard distribution in version 5.004 and later):
-
- # error checking left as an exercise for reader.
- use File::stat;
- use Time::localtime;
- $date_string = ctime(stat($file)->mtime);
- print "file $file updated at $date_string\n";
-
-The POSIX::strftime() approach has the benefit of being,
-in theory, independent of the current locale. See L<perllocale>
-for details.
-
-=head2 How do I set a file's timestamp in perl?
-
-You use the utime() function documented in L<perlfunc/utime>.
-By way of example, here's a little program that copies the
-read and write times from its first argument to all the rest
-of them.
-
- if (@ARGV < 2) {
- die "usage: cptimes timestamp_file other_files ...\n";
- }
- $timestamp = shift;
- ($atime, $mtime) = (stat($timestamp))[8,9];
- utime $atime, $mtime, @ARGV;
-
-Error checking is, as usual, left as an exercise for the reader.
-
-Note that utime() currently doesn't work correctly with Win95/NT
-ports. A bug has been reported. Check it carefully before using
-utime() on those platforms.
-
-=head2 How do I print to more than one file at once?
-
-If you only have to do this once, you can do this:
-
- for $fh (FH1, FH2, FH3) { print $fh "whatever\n" }
-
-To connect up to one filehandle to several output filehandles, it's
-easiest to use the tee(1) program if you have it, and let it take care
-of the multiplexing:
-
- open (FH, "| tee file1 file2 file3");
-
-Or even:
-
- # make STDOUT go to three files, plus original STDOUT
- open (STDOUT, "| tee file1 file2 file3") or die "Teeing off: $!\n";
- print "whatever\n" or die "Writing: $!\n";
- close(STDOUT) or die "Closing: $!\n";
-
-Otherwise you'll have to write your own multiplexing print
-function--or your own tee program--or use Tom Christiansen's,
-at http://www.perl.com/CPAN/authors/id/TOMC/scripts/tct.gz , which is
-written in Perl and offers much greater functionality
-than the stock version.
-
-=head2 How can I read in an entire file all at once?
-
-The customary Perl approach for processing all the lines in a file is to
-do so one line at a time:
-
- open (INPUT, $file) || die "can't open $file: $!";
- while (<INPUT>) {
- chomp;
- # do something with $_
- }
- close(INPUT) || die "can't close $file: $!";
-
-This is tremendously more efficient than reading the entire file into
-memory as an array of lines and then processing it one element at a time,
-which is often--if not almost always--the wrong approach. Whenever
-you see someone do this:
-
- @lines = <INPUT>;
-
-you should think long and hard about why you need everything loaded
-at once. It's just not a scalable solution. You might also find it
-more fun to use the standard DB_File module's $DB_RECNO bindings,
-which allow you to tie an array to a file so that accessing an element
-the array actually accesses the corresponding line in the file.
-
-On very rare occasion, you may have an algorithm that demands that
-the entire file be in memory at once as one scalar. The simplest solution
-to that is
-
- $var = `cat $file`;
-
-Being in scalar context, you get the whole thing. In list context,
-you'd get a list of all the lines:
-
- @lines = `cat $file`;
-
-This tiny but expedient solution is neat, clean, and portable to
-all systems on which decent tools have been installed. For those
-who prefer not to use the toolbox, you can of course read the file
-manually, although this makes for more complicated code.
-
- {
- local(*INPUT, $/);
- open (INPUT, $file) || die "can't open $file: $!";
- $var = <INPUT>;
- }
-
-That temporarily undefs your record separator, and will automatically
-close the file at block exit. If the file is already open, just use this:
-
- $var = do { local $/; <INPUT> };
-
-=head2 How can I read in a file by paragraphs?
-
-Use the C<$/> variable (see L<perlvar> for details). You can either
-set it to C<""> to eliminate empty paragraphs (C<"abc\n\n\n\ndef">,
-for instance, gets treated as two paragraphs and not three), or
-C<"\n\n"> to accept empty paragraphs.
-
-Note that a blank line must have no blanks in it. Thus C<"fred\n
-\nstuff\n\n"> is one paragraph, but C<"fred\n\nstuff\n\n"> is two.
-
-=head2 How can I read a single character from a file? From the keyboard?
-
-You can use the builtin C<getc()> function for most filehandles, but
-it won't (easily) work on a terminal device. For STDIN, either use
-the Term::ReadKey module from CPAN or use the sample code in
-L<perlfunc/getc>.
-
-If your system supports the portable operating system programming
-interface (POSIX), you can use the following code, which you'll note
-turns off echo processing as well.
-
- #!/usr/bin/perl -w
- use strict;
- $| = 1;
- for (1..4) {
- my $got;
- print "gimme: ";
- $got = getone();
- print "--> $got\n";
- }
- exit;
-
- BEGIN {
- use POSIX qw(:termios_h);
-
- my ($term, $oterm, $echo, $noecho, $fd_stdin);
-
- $fd_stdin = fileno(STDIN);
-
- $term = POSIX::Termios->new();
- $term->getattr($fd_stdin);
- $oterm = $term->getlflag();
-
- $echo = ECHO | ECHOK | ICANON;
- $noecho = $oterm & ~$echo;
-
- sub cbreak {
- $term->setlflag($noecho);
- $term->setcc(VTIME, 1);
- $term->setattr($fd_stdin, TCSANOW);
- }
-
- sub cooked {
- $term->setlflag($oterm);
- $term->setcc(VTIME, 0);
- $term->setattr($fd_stdin, TCSANOW);
- }
-
- sub getone {
- my $key = '';
- cbreak();
- sysread(STDIN, $key, 1);
- cooked();
- return $key;
- }
-
- }
-
- END { cooked() }
-
-The Term::ReadKey module from CPAN may be easier to use. Recent versions
-include also support for non-portable systems as well.
-
- use Term::ReadKey;
- open(TTY, "</dev/tty");
- print "Gimme a char: ";
- ReadMode "raw";
- $key = ReadKey 0, *TTY;
- ReadMode "normal";
- printf "\nYou said %s, char number %03d\n",
- $key, ord $key;
-
-For legacy DOS systems, Dan Carson <dbc@tc.fluke.COM> reports the following:
-
-To put the PC in "raw" mode, use ioctl with some magic numbers gleaned
-from msdos.c (Perl source file) and Ralf Brown's interrupt list (comes
-across the net every so often):
-
- $old_ioctl = ioctl(STDIN,0,0); # Gets device info
- $old_ioctl &= 0xff;
- ioctl(STDIN,1,$old_ioctl | 32); # Writes it back, setting bit 5
-
-Then to read a single character:
-
- sysread(STDIN,$c,1); # Read a single character
-
-And to put the PC back to "cooked" mode:
-
- ioctl(STDIN,1,$old_ioctl); # Sets it back to cooked mode.
-
-So now you have $c. If C<ord($c) == 0>, you have a two byte code, which
-means you hit a special key. Read another byte with C<sysread(STDIN,$c,1)>,
-and that value tells you what combination it was according to this
-table:
-
- # PC 2-byte keycodes = ^@ + the following:
-
- # HEX KEYS
- # --- ----
- # 0F SHF TAB
- # 10-19 ALT QWERTYUIOP
- # 1E-26 ALT ASDFGHJKL
- # 2C-32 ALT ZXCVBNM
- # 3B-44 F1-F10
- # 47-49 HOME,UP,PgUp
- # 4B LEFT
- # 4D RIGHT
- # 4F-53 END,DOWN,PgDn,Ins,Del
- # 54-5D SHF F1-F10
- # 5E-67 CTR F1-F10
- # 68-71 ALT F1-F10
- # 73-77 CTR LEFT,RIGHT,END,PgDn,HOME
- # 78-83 ALT 1234567890-=
- # 84 CTR PgUp
-
-This is all trial and error I did a long time ago; I hope I'm reading the
-file that worked...
-
-=head2 How can I tell whether there's a character waiting on a filehandle?
-
-The very first thing you should do is look into getting the Term::ReadKey
-extension from CPAN. As we mentioned earlier, it now even has limited
-support for non-portable (read: not open systems, closed, proprietary,
-not POSIX, not Unix, etc) systems.
-
-You should also check out the Frequently Asked Questions list in
-comp.unix.* for things like this: the answer is essentially the same.
-It's very system dependent. Here's one solution that works on BSD
-systems:
-
- sub key_ready {
- my($rin, $nfd);
- vec($rin, fileno(STDIN), 1) = 1;
- return $nfd = select($rin,undef,undef,0);
- }
-
-If you want to find out how many characters are waiting, there's
-also the FIONREAD ioctl call to be looked at. The I<h2ph> tool that
-comes with Perl tries to convert C include files to Perl code, which
-can be C<require>d. FIONREAD ends up defined as a function in the
-I<sys/ioctl.ph> file:
-
- require 'sys/ioctl.ph';
-
- $size = pack("L", 0);
- ioctl(FH, FIONREAD(), $size) or die "Couldn't call ioctl: $!\n";
- $size = unpack("L", $size);
-
-If I<h2ph> wasn't installed or doesn't work for you, you can
-I<grep> the include files by hand:
-
- % grep FIONREAD /usr/include/*/*
- /usr/include/asm/ioctls.h:#define FIONREAD 0x541B
-
-Or write a small C program using the editor of champions:
-
- % cat > fionread.c
- #include <sys/ioctl.h>
- main() {
- printf("%#08x\n", FIONREAD);
- }
- ^D
- % cc -o fionread fionread.c
- % ./fionread
- 0x4004667f
-
-And then hard-code it, leaving porting as an exercise to your successor.
-
- $FIONREAD = 0x4004667f; # XXX: opsys dependent
-
- $size = pack("L", 0);
- ioctl(FH, $FIONREAD, $size) or die "Couldn't call ioctl: $!\n";
- $size = unpack("L", $size);
-
-FIONREAD requires a filehandle connected to a stream, meaning that sockets,
-pipes, and tty devices work, but I<not> files.
-
-=head2 How do I do a C<tail -f> in perl?
-
-First try
-
- seek(GWFILE, 0, 1);
-
-The statement C<seek(GWFILE, 0, 1)> doesn't change the current position,
-but it does clear the end-of-file condition on the handle, so that the
-next <GWFILE> makes Perl try again to read something.
-
-If that doesn't work (it relies on features of your stdio implementation),
-then you need something more like this:
-
- for (;;) {
- for ($curpos = tell(GWFILE); <GWFILE>; $curpos = tell(GWFILE)) {
- # search for some stuff and put it into files
- }
- # sleep for a while
- seek(GWFILE, $curpos, 0); # seek to where we had been
- }
-
-If this still doesn't work, look into the POSIX module. POSIX defines
-the clearerr() method, which can remove the end of file condition on a
-filehandle. The method: read until end of file, clearerr(), read some
-more. Lather, rinse, repeat.
-
-There's also a File::Tail module from CPAN.
-
-=head2 How do I dup() a filehandle in Perl?
-
-If you check L<perlfunc/open>, you'll see that several of the ways
-to call open() should do the trick. For example:
-
- open(LOG, ">>/tmp/logfile");
- open(STDERR, ">&LOG");
-
-Or even with a literal numeric descriptor:
-
- $fd = $ENV{MHCONTEXTFD};
- open(MHCONTEXT, "<&=$fd"); # like fdopen(3S)
-
-Note that "<&STDIN" makes a copy, but "<&=STDIN" make
-an alias. That means if you close an aliased handle, all
-aliases become inaccessible. This is not true with
-a copied one.
-
-Error checking, as always, has been left as an exercise for the reader.
-
-=head2 How do I close a file descriptor by number?
-
-This should rarely be necessary, as the Perl close() function is to be
-used for things that Perl opened itself, even if it was a dup of a
-numeric descriptor as with MHCONTEXT above. But if you really have
-to, you may be able to do this:
-
- require 'sys/syscall.ph';
- $rc = syscall(&SYS_close, $fd + 0); # must force numeric
- die "can't sysclose $fd: $!" unless $rc == -1;
-
-Or, just use the fdopen(3S) feature of open():
-
- {
- local *F;
- open F, "<&=$fd" or die "Cannot reopen fd=$fd: $!";
- close F;
- }
-
-=head2 Why can't I use "C:\temp\foo" in DOS paths? What doesn't `C:\temp\foo.exe` work?
-
-Whoops! You just put a tab and a formfeed into that filename!
-Remember that within double quoted strings ("like\this"), the
-backslash is an escape character. The full list of these is in
-L<perlop/Quote and Quote-like Operators>. Unsurprisingly, you don't
-have a file called "c:(tab)emp(formfeed)oo" or
-"c:(tab)emp(formfeed)oo.exe" on your legacy DOS filesystem.
-
-Either single-quote your strings, or (preferably) use forward slashes.
-Since all DOS and Windows versions since something like MS-DOS 2.0 or so
-have treated C</> and C<\> the same in a path, you might as well use the
-one that doesn't clash with Perl--or the POSIX shell, ANSI C and C++,
-awk, Tcl, Java, or Python, just to mention a few. POSIX paths
-are more portable, too.
-
-=head2 Why doesn't glob("*.*") get all the files?
-
-Because even on non-Unix ports, Perl's glob function follows standard
-Unix globbing semantics. You'll need C<glob("*")> to get all (non-hidden)
-files. This makes glob() portable even to legacy systems. Your
-port may include proprietary globbing functions as well. Check its
-documentation for details.
-
-=head2 Why does Perl let me delete read-only files? Why does C<-i> clobber protected files? Isn't this a bug in Perl?
-
-This is elaborately and painstakingly described in the "Far More Than
-You Ever Wanted To Know" in
-http://www.perl.com/CPAN/doc/FMTEYEWTK/file-dir-perms .
-
-The executive summary: learn how your filesystem works. The
-permissions on a file say what can happen to the data in that file.
-The permissions on a directory say what can happen to the list of
-files in that directory. If you delete a file, you're removing its
-name from the directory (so the operation depends on the permissions
-of the directory, not of the file). If you try to write to the file,
-the permissions of the file govern whether you're allowed to.
-
-=head2 How do I select a random line from a file?
-
-Here's an algorithm from the Camel Book:
-
- srand;
- rand($.) < 1 && ($line = $_) while <>;
-
-This has a significant advantage in space over reading the whole
-file in. A simple proof by induction is available upon
-request if you doubt the algorithm's correctness.
-
-=head2 Why do I get weird spaces when I print an array of lines?
-
-Saying
-
- print "@lines\n";
-
-joins together the elements of C<@lines> with a space between them.
-If C<@lines> were C<("little", "fluffy", "clouds")> then the above
-statement would print
-
- little fluffy clouds
-
-but if each element of C<@lines> was a line of text, ending a newline
-character C<("little\n", "fluffy\n", "clouds\n")> then it would print:
-
- little
- fluffy
- clouds
-
-If your array contains lines, just print them:
-
- print @lines;
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-When included as an integrated part of the Standard Distribution
-of Perl or of its documentation (printed or otherwise), this works is
-covered under Perl's Artistic License. For separate distributions of
-all or part of this FAQ outside of that, see L<perlfaq>.
-
-Irrespective of its distribution, all code examples here are in the public
-domain. You are permitted and encouraged to use this code and any
-derivatives thereof in your own programs for fun or for profit as you
-see fit. A simple comment in the code giving credit to the FAQ would
-be courteous but is not required.
diff --git a/contrib/perl5/pod/perlfaq6.pod b/contrib/perl5/pod/perlfaq6.pod
deleted file mode 100644
index ed6c01b..0000000
--- a/contrib/perl5/pod/perlfaq6.pod
+++ /dev/null
@@ -1,711 +0,0 @@
-=head1 NAME
-
-perlfaq6 - Regexes ($Revision: 1.27 $, $Date: 1999/05/23 16:08:30 $)
-
-=head1 DESCRIPTION
-
-This section is surprisingly small because the rest of the FAQ is
-littered with answers involving regular expressions. For example,
-decoding a URL and checking whether something is a number are handled
-with regular expressions, but those answers are found elsewhere in
-this document (in L<perlfaq9>: ``How do I decode or create those %-encodings
-on the web'' and L<perfaq4>: ``How do I determine whether a scalar is
-a number/whole/integer/float'', to be precise).
-
-=head2 How can I hope to use regular expressions without creating illegible and unmaintainable code?
-
-Three techniques can make regular expressions maintainable and
-understandable.
-
-=over 4
-
-=item Comments Outside the Regex
-
-Describe what you're doing and how you're doing it, using normal Perl
-comments.
-
- # turn the line into the first word, a colon, and the
- # number of characters on the rest of the line
- s/^(\w+)(.*)/ lc($1) . ":" . length($2) /meg;
-
-=item Comments Inside the Regex
-
-The C</x> modifier causes whitespace to be ignored in a regex pattern
-(except in a character class), and also allows you to use normal
-comments there, too. As you can imagine, whitespace and comments help
-a lot.
-
-C</x> lets you turn this:
-
- s{<(?:[^>'"]*|".*?"|'.*?')+>}{}gs;
-
-into this:
-
- s{ < # opening angle bracket
- (?: # Non-backreffing grouping paren
- [^>'"] * # 0 or more things that are neither > nor ' nor "
- | # or else
- ".*?" # a section between double quotes (stingy match)
- | # or else
- '.*?' # a section between single quotes (stingy match)
- ) + # all occurring one or more times
- > # closing angle bracket
- }{}gsx; # replace with nothing, i.e. delete
-
-It's still not quite so clear as prose, but it is very useful for
-describing the meaning of each part of the pattern.
-
-=item Different Delimiters
-
-While we normally think of patterns as being delimited with C</>
-characters, they can be delimited by almost any character. L<perlre>
-describes this. For example, the C<s///> above uses braces as
-delimiters. Selecting another delimiter can avoid quoting the
-delimiter within the pattern:
-
- s/\/usr\/local/\/usr\/share/g; # bad delimiter choice
- s#/usr/local#/usr/share#g; # better
-
-=back
-
-=head2 I'm having trouble matching over more than one line. What's wrong?
-
-Either you don't have more than one line in the string you're looking at
-(probably), or else you aren't using the correct modifier(s) on your
-pattern (possibly).
-
-There are many ways to get multiline data into a string. If you want
-it to happen automatically while reading input, you'll want to set $/
-(probably to '' for paragraphs or C<undef> for the whole file) to
-allow you to read more than one line at a time.
-
-Read L<perlre> to help you decide which of C</s> and C</m> (or both)
-you might want to use: C</s> allows dot to include newline, and C</m>
-allows caret and dollar to match next to a newline, not just at the
-end of the string. You do need to make sure that you've actually
-got a multiline string in there.
-
-For example, this program detects duplicate words, even when they span
-line breaks (but not paragraph ones). For this example, we don't need
-C</s> because we aren't using dot in a regular expression that we want
-to cross line boundaries. Neither do we need C</m> because we aren't
-wanting caret or dollar to match at any point inside the record next
-to newlines. But it's imperative that $/ be set to something other
-than the default, or else we won't actually ever have a multiline
-record read in.
-
- $/ = ''; # read in more whole paragraph, not just one line
- while ( <> ) {
- while ( /\b([\w'-]+)(\s+\1)+\b/gi ) { # word starts alpha
- print "Duplicate $1 at paragraph $.\n";
- }
- }
-
-Here's code that finds sentences that begin with "From " (which would
-be mangled by many mailers):
-
- $/ = ''; # read in more whole paragraph, not just one line
- while ( <> ) {
- while ( /^From /gm ) { # /m makes ^ match next to \n
- print "leading from in paragraph $.\n";
- }
- }
-
-Here's code that finds everything between START and END in a paragraph:
-
- undef $/; # read in whole file, not just one line or paragraph
- while ( <> ) {
- while ( /START(.*?)END/sm ) { # /s makes . cross line boundaries
- print "$1\n";
- }
- }
-
-=head2 How can I pull out lines between two patterns that are themselves on different lines?
-
-You can use Perl's somewhat exotic C<..> operator (documented in
-L<perlop>):
-
- perl -ne 'print if /START/ .. /END/' file1 file2 ...
-
-If you wanted text and not lines, you would use
-
- perl -0777 -ne 'print "$1\n" while /START(.*?)END/gs' file1 file2 ...
-
-But if you want nested occurrences of C<START> through C<END>, you'll
-run up against the problem described in the question in this section
-on matching balanced text.
-
-Here's another example of using C<..>:
-
- while (<>) {
- $in_header = 1 .. /^$/;
- $in_body = /^$/ .. eof();
- # now choose between them
- } continue {
- reset if eof(); # fix $.
- }
-
-=head2 I put a regular expression into $/ but it didn't work. What's wrong?
-
-$/ must be a string, not a regular expression. Awk has to be better
-for something. :-)
-
-Actually, you could do this if you don't mind reading the whole file
-into memory:
-
- undef $/;
- @records = split /your_pattern/, <FH>;
-
-The Net::Telnet module (available from CPAN) has the capability to
-wait for a pattern in the input stream, or timeout if it doesn't
-appear within a certain time.
-
- ## Create a file with three lines.
- open FH, ">file";
- print FH "The first line\nThe second line\nThe third line\n";
- close FH;
-
- ## Get a read/write filehandle to it.
- $fh = new FileHandle "+<file";
-
- ## Attach it to a "stream" object.
- use Net::Telnet;
- $file = new Net::Telnet (-fhopen => $fh);
-
- ## Search for the second line and print out the third.
- $file->waitfor('/second line\n/');
- print $file->getline;
-
-=head2 How do I substitute case insensitively on the LHS while preserving case on the RHS?
-
-Here's a lovely Perlish solution by Larry Rosler. It exploits
-properties of bitwise xor on ASCII strings.
-
- $_= "this is a TEsT case";
-
- $old = 'test';
- $new = 'success';
-
- s{(\Q$old\E)}
- { uc $new | (uc $1 ^ $1) .
- (uc(substr $1, -1) ^ substr $1, -1) x
- (length($new) - length $1)
- }egi;
-
- print;
-
-And here it is as a subroutine, modelled after the above:
-
- sub preserve_case($$) {
- my ($old, $new) = @_;
- my $mask = uc $old ^ $old;
-
- uc $new | $mask .
- substr($mask, -1) x (length($new) - length($old))
- }
-
- $a = "this is a TEsT case";
- $a =~ s/(test)/preserve_case($1, "success")/egi;
- print "$a\n";
-
-This prints:
-
- this is a SUcCESS case
-
-Just to show that C programmers can write C in any programming language,
-if you prefer a more C-like solution, the following script makes the
-substitution have the same case, letter by letter, as the original.
-(It also happens to run about 240% slower than the Perlish solution runs.)
-If the substitution has more characters than the string being substituted,
-the case of the last character is used for the rest of the substitution.
-
- # Original by Nathan Torkington, massaged by Jeffrey Friedl
- #
- sub preserve_case($$)
- {
- my ($old, $new) = @_;
- my ($state) = 0; # 0 = no change; 1 = lc; 2 = uc
- my ($i, $oldlen, $newlen, $c) = (0, length($old), length($new));
- my ($len) = $oldlen < $newlen ? $oldlen : $newlen;
-
- for ($i = 0; $i < $len; $i++) {
- if ($c = substr($old, $i, 1), $c =~ /[\W\d_]/) {
- $state = 0;
- } elsif (lc $c eq $c) {
- substr($new, $i, 1) = lc(substr($new, $i, 1));
- $state = 1;
- } else {
- substr($new, $i, 1) = uc(substr($new, $i, 1));
- $state = 2;
- }
- }
- # finish up with any remaining new (for when new is longer than old)
- if ($newlen > $oldlen) {
- if ($state == 1) {
- substr($new, $oldlen) = lc(substr($new, $oldlen));
- } elsif ($state == 2) {
- substr($new, $oldlen) = uc(substr($new, $oldlen));
- }
- }
- return $new;
- }
-
-=head2 How can I make C<\w> match national character sets?
-
-See L<perllocale>.
-
-=head2 How can I match a locale-smart version of C</[a-zA-Z]/>?
-
-One alphabetic character would be C</[^\W\d_]/>, no matter what locale
-you're in. Non-alphabetics would be C</[\W\d_]/> (assuming you don't
-consider an underscore a letter).
-
-=head2 How can I quote a variable to use in a regex?
-
-The Perl parser will expand $variable and @variable references in
-regular expressions unless the delimiter is a single quote. Remember,
-too, that the right-hand side of a C<s///> substitution is considered
-a double-quoted string (see L<perlop> for more details). Remember
-also that any regex special characters will be acted on unless you
-precede the substitution with \Q. Here's an example:
-
- $string = "to die?";
- $lhs = "die?";
- $rhs = "sleep, no more";
-
- $string =~ s/\Q$lhs/$rhs/;
- # $string is now "to sleep no more"
-
-Without the \Q, the regex would also spuriously match "di".
-
-=head2 What is C</o> really for?
-
-Using a variable in a regular expression match forces a re-evaluation
-(and perhaps recompilation) each time the regular expression is
-encountered. The C</o> modifier locks in the regex the first time
-it's used. This always happens in a constant regular expression, and
-in fact, the pattern was compiled into the internal format at the same
-time your entire program was.
-
-Use of C</o> is irrelevant unless variable interpolation is used in
-the pattern, and if so, the regex engine will neither know nor care
-whether the variables change after the pattern is evaluated the I<very
-first> time.
-
-C</o> is often used to gain an extra measure of efficiency by not
-performing subsequent evaluations when you know it won't matter
-(because you know the variables won't change), or more rarely, when
-you don't want the regex to notice if they do.
-
-For example, here's a "paragrep" program:
-
- $/ = ''; # paragraph mode
- $pat = shift;
- while (<>) {
- print if /$pat/o;
- }
-
-=head2 How do I use a regular expression to strip C style comments from a file?
-
-While this actually can be done, it's much harder than you'd think.
-For example, this one-liner
-
- perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
-
-will work in many but not all cases. You see, it's too simple-minded for
-certain kinds of C programs, in particular, those with what appear to be
-comments in quoted strings. For that, you'd need something like this,
-created by Jeffrey Friedl and later modified by Fred Curtis.
-
- $/ = undef;
- $_ = <>;
- s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#$2#gs
- print;
-
-This could, of course, be more legibly written with the C</x> modifier, adding
-whitespace and comments. Here it is expanded, courtesy of Fred Curtis.
-
- s{
- /\* ## Start of /* ... */ comment
- [^*]*\*+ ## Non-* followed by 1-or-more *'s
- (
- [^/*][^*]*\*+
- )* ## 0-or-more things which don't start with /
- ## but do end with '*'
- / ## End of /* ... */ comment
-
- | ## OR various things which aren't comments:
-
- (
- " ## Start of " ... " string
- (
- \\. ## Escaped char
- | ## OR
- [^"\\] ## Non "\
- )*
- " ## End of " ... " string
-
- | ## OR
-
- ' ## Start of ' ... ' string
- (
- \\. ## Escaped char
- | ## OR
- [^'\\] ## Non '\
- )*
- ' ## End of ' ... ' string
-
- | ## OR
-
- . ## Anything other char
- [^/"'\\]* ## Chars which doesn't start a comment, string or escape
- )
- }{$2}gxs;
-
-A slight modification also removes C++ comments:
-
- s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//[^\n]*|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#$2#gs;
-
-=head2 Can I use Perl regular expressions to match balanced text?
-
-Although Perl regular expressions are more powerful than "mathematical"
-regular expressions because they feature conveniences like backreferences
-(C<\1> and its ilk), they still aren't powerful enough--with
-the possible exception of bizarre and experimental features in the
-development-track releases of Perl. You still need to use non-regex
-techniques to parse balanced text, such as the text enclosed between
-matching parentheses or braces, for example.
-
-An elaborate subroutine (for 7-bit ASCII only) to pull out balanced
-and possibly nested single chars, like C<`> and C<'>, C<{> and C<}>,
-or C<(> and C<)> can be found in
-http://www.perl.com/CPAN/authors/id/TOMC/scripts/pull_quotes.gz .
-
-The C::Scan module from CPAN contains such subs for internal use,
-but they are undocumented.
-
-=head2 What does it mean that regexes are greedy? How can I get around it?
-
-Most people mean that greedy regexes match as much as they can.
-Technically speaking, it's actually the quantifiers (C<?>, C<*>, C<+>,
-C<{}>) that are greedy rather than the whole pattern; Perl prefers local
-greed and immediate gratification to overall greed. To get non-greedy
-versions of the same quantifiers, use (C<??>, C<*?>, C<+?>, C<{}?>).
-
-An example:
-
- $s1 = $s2 = "I am very very cold";
- $s1 =~ s/ve.*y //; # I am cold
- $s2 =~ s/ve.*?y //; # I am very cold
-
-Notice how the second substitution stopped matching as soon as it
-encountered "y ". The C<*?> quantifier effectively tells the regular
-expression engine to find a match as quickly as possible and pass
-control on to whatever is next in line, like you would if you were
-playing hot potato.
-
-=head2 How do I process each word on each line?
-
-Use the split function:
-
- while (<>) {
- foreach $word ( split ) {
- # do something with $word here
- }
- }
-
-Note that this isn't really a word in the English sense; it's just
-chunks of consecutive non-whitespace characters.
-
-To work with only alphanumeric sequences (including underscores), you
-might consider
-
- while (<>) {
- foreach $word (m/(\w+)/g) {
- # do something with $word here
- }
- }
-
-=head2 How can I print out a word-frequency or line-frequency summary?
-
-To do this, you have to parse out each word in the input stream. We'll
-pretend that by word you mean chunk of alphabetics, hyphens, or
-apostrophes, rather than the non-whitespace chunk idea of a word given
-in the previous question:
-
- while (<>) {
- while ( /(\b[^\W_\d][\w'-]+\b)/g ) { # misses "`sheep'"
- $seen{$1}++;
- }
- }
- while ( ($word, $count) = each %seen ) {
- print "$count $word\n";
- }
-
-If you wanted to do the same thing for lines, you wouldn't need a
-regular expression:
-
- while (<>) {
- $seen{$_}++;
- }
- while ( ($line, $count) = each %seen ) {
- print "$count $line";
- }
-
-If you want these output in a sorted order, see L<perlfaq4>: ``How do I
-sort a hash (optionally by value instead of key)?''.
-
-=head2 How can I do approximate matching?
-
-See the module String::Approx available from CPAN.
-
-=head2 How do I efficiently match many regular expressions at once?
-
-The following is extremely inefficient:
-
- # slow but obvious way
- @popstates = qw(CO ON MI WI MN);
- while (defined($line = <>)) {
- for $state (@popstates) {
- if ($line =~ /\b$state\b/i) {
- print $line;
- last;
- }
- }
- }
-
-That's because Perl has to recompile all those patterns for each of
-the lines of the file. As of the 5.005 release, there's a much better
-approach, one which makes use of the new C<qr//> operator:
-
- # use spiffy new qr// operator, with /i flag even
- use 5.005;
- @popstates = qw(CO ON MI WI MN);
- @poppats = map { qr/\b$_\b/i } @popstates;
- while (defined($line = <>)) {
- for $patobj (@poppats) {
- print $line if $line =~ /$patobj/;
- }
- }
-
-=head2 Why don't word-boundary searches with C<\b> work for me?
-
-Two common misconceptions are that C<\b> is a synonym for C<\s+> and
-that it's the edge between whitespace characters and non-whitespace
-characters. Neither is correct. C<\b> is the place between a C<\w>
-character and a C<\W> character (that is, C<\b> is the edge of a
-"word"). It's a zero-width assertion, just like C<^>, C<$>, and all
-the other anchors, so it doesn't consume any characters. L<perlre>
-describes the behavior of all the regex metacharacters.
-
-Here are examples of the incorrect application of C<\b>, with fixes:
-
- "two words" =~ /(\w+)\b(\w+)/; # WRONG
- "two words" =~ /(\w+)\s+(\w+)/; # right
-
- " =matchless= text" =~ /\b=(\w+)=\b/; # WRONG
- " =matchless= text" =~ /=(\w+)=/; # right
-
-Although they may not do what you thought they did, C<\b> and C<\B>
-can still be quite useful. For an example of the correct use of
-C<\b>, see the example of matching duplicate words over multiple
-lines.
-
-An example of using C<\B> is the pattern C<\Bis\B>. This will find
-occurrences of "is" on the insides of words only, as in "thistle", but
-not "this" or "island".
-
-=head2 Why does using $&, $`, or $' slow my program down?
-
-Once Perl sees that you need one of these variables anywhere in
-the program, it provides them on each and every pattern match.
-The same mechanism that handles these provides for the use of $1, $2,
-etc., so you pay the same price for each regex that contains capturing
-parentheses. If you never use $&, etc., in your script, then regexes
-I<without> capturing parentheses won't be penalized. So avoid $&, $',
-and $` if you can, but if you can't, once you've used them at all, use
-them at will because you've already paid the price. Remember that some
-algorithms really appreciate them. As of the 5.005 release. the $&
-variable is no longer "expensive" the way the other two are.
-
-=head2 What good is C<\G> in a regular expression?
-
-The notation C<\G> is used in a match or substitution in conjunction with
-the C</g> modifier to anchor the regular expression to the point just past
-where the last match occurred, i.e. the pos() point. A failed match resets
-the position of C<\G> unless the C</c> modifier is in effect. C<\G> can be
-used in a match without the C</g> modifier; it acts the same (i.e. still
-anchors at the pos() point) but of course only matches once and does not
-update pos(), as non-C</g> expressions never do. C<\G> in an expression
-applied to a target string that has never been matched against a C</g>
-expression before or has had its pos() reset is functionally equivalent to
-C<\A>, which matches at the beginning of the string.
-
-For example, suppose you had a line of text quoted in standard mail
-and Usenet notation, (that is, with leading C<< > >> characters), and
-you want change each leading C<< > >> into a corresponding C<:>. You
-could do so in this way:
-
- s/^(>+)/':' x length($1)/gem;
-
-Or, using C<\G>, the much simpler (and faster):
-
- s/\G>/:/g;
-
-A more sophisticated use might involve a tokenizer. The following
-lex-like example is courtesy of Jeffrey Friedl. It did not work in
-5.003 due to bugs in that release, but does work in 5.004 or better.
-(Note the use of C</c>, which prevents a failed match with C</g> from
-resetting the search position back to the beginning of the string.)
-
- while (<>) {
- chomp;
- PARSER: {
- m/ \G( \d+\b )/gcx && do { print "number: $1\n"; redo; };
- m/ \G( \w+ )/gcx && do { print "word: $1\n"; redo; };
- m/ \G( \s+ )/gcx && do { print "space: $1\n"; redo; };
- m/ \G( [^\w\d]+ )/gcx && do { print "other: $1\n"; redo; };
- }
- }
-
-Of course, that could have been written as
-
- while (<>) {
- chomp;
- PARSER: {
- if ( /\G( \d+\b )/gcx {
- print "number: $1\n";
- redo PARSER;
- }
- if ( /\G( \w+ )/gcx {
- print "word: $1\n";
- redo PARSER;
- }
- if ( /\G( \s+ )/gcx {
- print "space: $1\n";
- redo PARSER;
- }
- if ( /\G( [^\w\d]+ )/gcx {
- print "other: $1\n";
- redo PARSER;
- }
- }
- }
-
-but then you lose the vertical alignment of the regular expressions.
-
-=head2 Are Perl regexes DFAs or NFAs? Are they POSIX compliant?
-
-While it's true that Perl's regular expressions resemble the DFAs
-(deterministic finite automata) of the egrep(1) program, they are in
-fact implemented as NFAs (non-deterministic finite automata) to allow
-backtracking and backreferencing. And they aren't POSIX-style either,
-because those guarantee worst-case behavior for all cases. (It seems
-that some people prefer guarantees of consistency, even when what's
-guaranteed is slowness.) See the book "Mastering Regular Expressions"
-(from O'Reilly) by Jeffrey Friedl for all the details you could ever
-hope to know on these matters (a full citation appears in
-L<perlfaq2>).
-
-=head2 What's wrong with using grep or map in a void context?
-
-Both grep and map build a return list, regardless of their context.
-This means you're making Perl go to the trouble of building up a
-return list that you then just ignore. That's no way to treat a
-programming language, you insensitive scoundrel!
-
-=head2 How can I match strings with multibyte characters?
-
-This is hard, and there's no good way. Perl does not directly support
-wide characters. It pretends that a byte and a character are
-synonymous. The following set of approaches was offered by Jeffrey
-Friedl, whose article in issue #5 of The Perl Journal talks about this
-very matter.
-
-Let's suppose you have some weird Martian encoding where pairs of
-ASCII uppercase letters encode single Martian letters (i.e. the two
-bytes "CV" make a single Martian letter, as do the two bytes "SG",
-"VS", "XX", etc.). Other bytes represent single characters, just like
-ASCII.
-
-So, the string of Martian "I am CVSGXX!" uses 12 bytes to encode the
-nine characters 'I', ' ', 'a', 'm', ' ', 'CV', 'SG', 'XX', '!'.
-
-Now, say you want to search for the single character C</GX/>. Perl
-doesn't know about Martian, so it'll find the two bytes "GX" in the "I
-am CVSGXX!" string, even though that character isn't there: it just
-looks like it is because "SG" is next to "XX", but there's no real
-"GX". This is a big problem.
-
-Here are a few ways, all painful, to deal with it:
-
- $martian =~ s/([A-Z][A-Z])/ $1 /g; # Make sure adjacent ``martian'' bytes
- # are no longer adjacent.
- print "found GX!\n" if $martian =~ /GX/;
-
-Or like this:
-
- @chars = $martian =~ m/([A-Z][A-Z]|[^A-Z])/g;
- # above is conceptually similar to: @chars = $text =~ m/(.)/g;
- #
- foreach $char (@chars) {
- print "found GX!\n", last if $char eq 'GX';
- }
-
-Or like this:
-
- while ($martian =~ m/\G([A-Z][A-Z]|.)/gs) { # \G probably unneeded
- print "found GX!\n", last if $1 eq 'GX';
- }
-
-Or like this:
-
- die "sorry, Perl doesn't (yet) have Martian support )-:\n";
-
-There are many double- (and multi-) byte encodings commonly used these
-days. Some versions of these have 1-, 2-, 3-, and 4-byte characters,
-all mixed.
-
-=head2 How do I match a pattern that is supplied by the user?
-
-Well, if it's really a pattern, then just use
-
- chomp($pattern = <STDIN>);
- if ($line =~ /$pattern/) { }
-
-Alternatively, since you have no guarantee that your user entered
-a valid regular expression, trap the exception this way:
-
- if (eval { $line =~ /$pattern/ }) { }
-
-If all you really want to search for a string, not a pattern,
-then you should either use the index() function, which is made for
-string searching, or if you can't be disabused of using a pattern
-match on a non-pattern, then be sure to use C<\Q>...C<\E>, documented
-in L<perlre>.
-
- $pattern = <STDIN>;
-
- open (FILE, $input) or die "Couldn't open input $input: $!; aborting";
- while (<FILE>) {
- print if /\Q$pattern\E/;
- }
- close FILE;
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work
-may be distributed only under the terms of Perl's Artistic License.
-Any distribution of this file or derivatives thereof I<outside>
-of that package require that special arrangements be made with
-copyright holder.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
diff --git a/contrib/perl5/pod/perlfaq7.pod b/contrib/perl5/pod/perlfaq7.pod
deleted file mode 100644
index 0299c2d..0000000
--- a/contrib/perl5/pod/perlfaq7.pod
+++ /dev/null
@@ -1,974 +0,0 @@
-=head1 NAME
-
-perlfaq7 - Perl Language Issues ($Revision: 1.28 $, $Date: 1999/05/23 20:36:18 $)
-
-=head1 DESCRIPTION
-
-This section deals with general Perl language issues that don't
-clearly fit into any of the other sections.
-
-=head2 Can I get a BNF/yacc/RE for the Perl language?
-
-There is no BNF, but you can paw your way through the yacc grammar in
-perly.y in the source distribution if you're particularly brave. The
-grammar relies on very smart tokenizing code, so be prepared to
-venture into toke.c as well.
-
-In the words of Chaim Frenkel: "Perl's grammar can not be reduced to BNF.
-The work of parsing perl is distributed between yacc, the lexer, smoke
-and mirrors."
-
-=head2 What are all these $@%&* punctuation signs, and how do I know when to use them?
-
-They are type specifiers, as detailed in L<perldata>:
-
- $ for scalar values (number, string or reference)
- @ for arrays
- % for hashes (associative arrays)
- & for subroutines (aka functions, procedures, methods)
- * for all types of that symbol name. In version 4 you used them like
- pointers, but in modern perls you can just use references.
-
-There are couple of other symbols that you're likely to encounter that aren't
-really type specifiers:
-
- <> are used for inputting a record from a filehandle.
- \ takes a reference to something.
-
-Note that <FILE> is I<neither> the type specifier for files
-nor the name of the handle. It is the C<< <> >> operator applied
-to the handle FILE. It reads one line (well, record--see
-L<perlvar/$/>) from the handle FILE in scalar context, or I<all> lines
-in list context. When performing open, close, or any other operation
-besides C<< <> >> on files, or even when talking about the handle, do
-I<not> use the brackets. These are correct: C<eof(FH)>, C<seek(FH, 0,
-2)> and "copying from STDIN to FILE".
-
-=head2 Do I always/never have to quote my strings or use semicolons and commas?
-
-Normally, a bareword doesn't need to be quoted, but in most cases
-probably should be (and must be under C<use strict>). But a hash key
-consisting of a simple word (that isn't the name of a defined
-subroutine) and the left-hand operand to the C<< => >> operator both
-count as though they were quoted:
-
- This is like this
- ------------ ---------------
- $foo{line} $foo{"line"}
- bar => stuff "bar" => stuff
-
-The final semicolon in a block is optional, as is the final comma in a
-list. Good style (see L<perlstyle>) says to put them in except for
-one-liners:
-
- if ($whoops) { exit 1 }
- @nums = (1, 2, 3);
-
- if ($whoops) {
- exit 1;
- }
- @lines = (
- "There Beren came from mountains cold",
- "And lost he wandered under leaves",
- );
-
-=head2 How do I skip some return values?
-
-One way is to treat the return values as a list and index into it:
-
- $dir = (getpwnam($user))[7];
-
-Another way is to use undef as an element on the left-hand-side:
-
- ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
-
-=head2 How do I temporarily block warnings?
-
-If you are running Perl 5.6.0 or better, the C<use warnings> pragma
-allows fine control of what warning are produced.
-See L<perllexwarn> for more details.
-
- {
- no warnings; # temporarily turn off warnings
- $a = $b + $c; # I know these might be undef
- }
-
-If you have an older version of Perl, the C<$^W> variable (documented
-in L<perlvar>) controls runtime warnings for a block:
-
- {
- local $^W = 0; # temporarily turn off warnings
- $a = $b + $c; # I know these might be undef
- }
-
-Note that like all the punctuation variables, you cannot currently
-use my() on C<$^W>, only local().
-
-=head2 What's an extension?
-
-An extension is a way of calling compiled C code from Perl. Reading
-L<perlxstut> is a good place to learn more about extensions.
-
-=head2 Why do Perl operators have different precedence than C operators?
-
-Actually, they don't. All C operators that Perl copies have the same
-precedence in Perl as they do in C. The problem is with operators that C
-doesn't have, especially functions that give a list context to everything
-on their right, eg. print, chmod, exec, and so on. Such functions are
-called "list operators" and appear as such in the precedence table in
-L<perlop>.
-
-A common mistake is to write:
-
- unlink $file || die "snafu";
-
-This gets interpreted as:
-
- unlink ($file || die "snafu");
-
-To avoid this problem, either put in extra parentheses or use the
-super low precedence C<or> operator:
-
- (unlink $file) || die "snafu";
- unlink $file or die "snafu";
-
-The "English" operators (C<and>, C<or>, C<xor>, and C<not>)
-deliberately have precedence lower than that of list operators for
-just such situations as the one above.
-
-Another operator with surprising precedence is exponentiation. It
-binds more tightly even than unary minus, making C<-2**2> product a
-negative not a positive four. It is also right-associating, meaning
-that C<2**3**2> is two raised to the ninth power, not eight squared.
-
-Although it has the same precedence as in C, Perl's C<?:> operator
-produces an lvalue. This assigns $x to either $a or $b, depending
-on the trueness of $maybe:
-
- ($maybe ? $a : $b) = $x;
-
-=head2 How do I declare/create a structure?
-
-In general, you don't "declare" a structure. Just use a (probably
-anonymous) hash reference. See L<perlref> and L<perldsc> for details.
-Here's an example:
-
- $person = {}; # new anonymous hash
- $person->{AGE} = 24; # set field AGE to 24
- $person->{NAME} = "Nat"; # set field NAME to "Nat"
-
-If you're looking for something a bit more rigorous, try L<perltoot>.
-
-=head2 How do I create a module?
-
-A module is a package that lives in a file of the same name. For
-example, the Hello::There module would live in Hello/There.pm. For
-details, read L<perlmod>. You'll also find L<Exporter> helpful. If
-you're writing a C or mixed-language module with both C and Perl, then
-you should study L<perlxstut>.
-
-Here's a convenient template you might wish you use when starting your
-own module. Make sure to change the names appropriately.
-
- package Some::Module; # assumes Some/Module.pm
-
- use strict;
- use warnings;
-
- BEGIN {
- use Exporter ();
- our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-
- ## set the version for version checking; uncomment to use
- ## $VERSION = 1.00;
-
- # if using RCS/CVS, this next line may be preferred,
- # but beware two-digit versions.
- $VERSION = do{my@r=q$Revision: 1.28 $=~/\d+/g;sprintf '%d.'.'%02d'x$#r,@r};
-
- @ISA = qw(Exporter);
- @EXPORT = qw(&func1 &func2 &func3);
- %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
-
- # your exported package globals go here,
- # as well as any optionally exported functions
- @EXPORT_OK = qw($Var1 %Hashit);
- }
- our @EXPORT_OK;
-
- # exported package globals go here
- our $Var1;
- our %Hashit;
-
- # non-exported package globals go here
- our @more;
- our $stuff;
-
- # initialize package globals, first exported ones
- $Var1 = '';
- %Hashit = ();
-
- # then the others (which are still accessible as $Some::Module::stuff)
- $stuff = '';
- @more = ();
-
- # all file-scoped lexicals must be created before
- # the functions below that use them.
-
- # file-private lexicals go here
- my $priv_var = '';
- my %secret_hash = ();
-
- # here's a file-private function as a closure,
- # callable as &$priv_func; it cannot be prototyped.
- my $priv_func = sub {
- # stuff goes here.
- };
-
- # make all your functions, whether exported or not;
- # remember to put something interesting in the {} stubs
- sub func1 {} # no prototype
- sub func2() {} # proto'd void
- sub func3($$) {} # proto'd to 2 scalars
-
- # this one isn't exported, but could be called!
- sub func4(\%) {} # proto'd to 1 hash ref
-
- END { } # module clean-up code here (global destructor)
-
- 1; # modules must return true
-
-The h2xs program will create stubs for all the important stuff for you:
-
- % h2xs -XA -n My::Module
-
-=head2 How do I create a class?
-
-See L<perltoot> for an introduction to classes and objects, as well as
-L<perlobj> and L<perlbot>.
-
-=head2 How can I tell if a variable is tainted?
-
-See L<perlsec/"Laundering and Detecting Tainted Data">. Here's an
-example (which doesn't use any system calls, because the kill()
-is given no processes to signal):
-
- sub is_tainted {
- return ! eval { join('',@_), kill 0; 1; };
- }
-
-This is not C<-w> clean, however. There is no C<-w> clean way to
-detect taintedness--take this as a hint that you should untaint
-all possibly-tainted data.
-
-=head2 What's a closure?
-
-Closures are documented in L<perlref>.
-
-I<Closure> is a computer science term with a precise but
-hard-to-explain meaning. Closures are implemented in Perl as anonymous
-subroutines with lasting references to lexical variables outside their
-own scopes. These lexicals magically refer to the variables that were
-around when the subroutine was defined (deep binding).
-
-Closures make sense in any programming language where you can have the
-return value of a function be itself a function, as you can in Perl.
-Note that some languages provide anonymous functions but are not
-capable of providing proper closures: the Python language, for
-example. For more information on closures, check out any textbook on
-functional programming. Scheme is a language that not only supports
-but encourages closures.
-
-Here's a classic function-generating function:
-
- sub add_function_generator {
- return sub { shift + shift };
- }
-
- $add_sub = add_function_generator();
- $sum = $add_sub->(4,5); # $sum is 9 now.
-
-The closure works as a I<function template> with some customization
-slots left out to be filled later. The anonymous subroutine returned
-by add_function_generator() isn't technically a closure because it
-refers to no lexicals outside its own scope.
-
-Contrast this with the following make_adder() function, in which the
-returned anonymous function contains a reference to a lexical variable
-outside the scope of that function itself. Such a reference requires
-that Perl return a proper closure, thus locking in for all time the
-value that the lexical had when the function was created.
-
- sub make_adder {
- my $addpiece = shift;
- return sub { shift + $addpiece };
- }
-
- $f1 = make_adder(20);
- $f2 = make_adder(555);
-
-Now C<&$f1($n)> is always 20 plus whatever $n you pass in, whereas
-C<&$f2($n)> is always 555 plus whatever $n you pass in. The $addpiece
-in the closure sticks around.
-
-Closures are often used for less esoteric purposes. For example, when
-you want to pass in a bit of code into a function:
-
- my $line;
- timeout( 30, sub { $line = <STDIN> } );
-
-If the code to execute had been passed in as a string,
-C<< '$line = <STDIN>' >>, there would have been no way for the
-hypothetical timeout() function to access the lexical variable
-$line back in its caller's scope.
-
-=head2 What is variable suicide and how can I prevent it?
-
-Variable suicide is when you (temporarily or permanently) lose the
-value of a variable. It is caused by scoping through my() and local()
-interacting with either closures or aliased foreach() iterator
-variables and subroutine arguments. It used to be easy to
-inadvertently lose a variable's value this way, but now it's much
-harder. Take this code:
-
- my $f = "foo";
- sub T {
- while ($i++ < 3) { my $f = $f; $f .= "bar"; print $f, "\n" }
- }
- T;
- print "Finally $f\n";
-
-The $f that has "bar" added to it three times should be a new C<$f>
-(C<my $f> should create a new local variable each time through the loop).
-It isn't, however. This was a bug, now fixed in the latest releases
-(tested against 5.004_05, 5.005_03, and 5.005_56).
-
-=head2 How can I pass/return a {Function, FileHandle, Array, Hash, Method, Regex}?
-
-With the exception of regexes, you need to pass references to these
-objects. See L<perlsub/"Pass by Reference"> for this particular
-question, and L<perlref> for information on references.
-
-See ``Passing Regexes'', below, for information on passing regular
-expressions.
-
-=over 4
-
-=item Passing Variables and Functions
-
-Regular variables and functions are quite easy to pass: just pass in a
-reference to an existing or anonymous variable or function:
-
- func( \$some_scalar );
-
- func( \@some_array );
- func( [ 1 .. 10 ] );
-
- func( \%some_hash );
- func( { this => 10, that => 20 } );
-
- func( \&some_func );
- func( sub { $_[0] ** $_[1] } );
-
-=item Passing Filehandles
-
-To pass filehandles to subroutines, use the C<*FH> or C<\*FH> notations.
-These are "typeglobs"--see L<perldata/"Typeglobs and Filehandles">
-and especially L<perlsub/"Pass by Reference"> for more information.
-
-Here's an excerpt:
-
-If you're passing around filehandles, you could usually just use the bare
-typeglob, like *STDOUT, but typeglobs references would be better because
-they'll still work properly under C<use strict 'refs'>. For example:
-
- splutter(\*STDOUT);
- sub splutter {
- my $fh = shift;
- print $fh "her um well a hmmm\n";
- }
-
- $rec = get_rec(\*STDIN);
- sub get_rec {
- my $fh = shift;
- return scalar <$fh>;
- }
-
-If you're planning on generating new filehandles, you could do this:
-
- sub openit {
- my $path = shift;
- local *FH;
- return open (FH, $path) ? *FH : undef;
- }
- $fh = openit('< /etc/motd');
- print <$fh>;
-
-=item Passing Regexes
-
-To pass regexes around, you'll need to be using a release of Perl
-sufficiently recent as to support the C<qr//> construct, pass around
-strings and use an exception-trapping eval, or else be very, very clever.
-
-Here's an example of how to pass in a string to be regex compared
-using C<qr//>:
-
- sub compare($$) {
- my ($val1, $regex) = @_;
- my $retval = $val1 =~ /$regex/;
- return $retval;
- }
- $match = compare("old McDonald", qr/d.*D/i);
-
-Notice how C<qr//> allows flags at the end. That pattern was compiled
-at compile time, although it was executed later. The nifty C<qr//>
-notation wasn't introduced until the 5.005 release. Before that, you
-had to approach this problem much less intuitively. For example, here
-it is again if you don't have C<qr//>:
-
- sub compare($$) {
- my ($val1, $regex) = @_;
- my $retval = eval { $val1 =~ /$regex/ };
- die if $@;
- return $retval;
- }
-
- $match = compare("old McDonald", q/($?i)d.*D/);
-
-Make sure you never say something like this:
-
- return eval "\$val =~ /$regex/"; # WRONG
-
-or someone can sneak shell escapes into the regex due to the double
-interpolation of the eval and the double-quoted string. For example:
-
- $pattern_of_evil = 'danger ${ system("rm -rf * &") } danger';
-
- eval "\$string =~ /$pattern_of_evil/";
-
-Those preferring to be very, very clever might see the O'Reilly book,
-I<Mastering Regular Expressions>, by Jeffrey Friedl. Page 273's
-Build_MatchMany_Function() is particularly interesting. A complete
-citation of this book is given in L<perlfaq2>.
-
-=item Passing Methods
-
-To pass an object method into a subroutine, you can do this:
-
- call_a_lot(10, $some_obj, "methname")
- sub call_a_lot {
- my ($count, $widget, $trick) = @_;
- for (my $i = 0; $i < $count; $i++) {
- $widget->$trick();
- }
- }
-
-Or, you can use a closure to bundle up the object, its
-method call, and arguments:
-
- my $whatnot = sub { $some_obj->obfuscate(@args) };
- func($whatnot);
- sub func {
- my $code = shift;
- &$code();
- }
-
-You could also investigate the can() method in the UNIVERSAL class
-(part of the standard perl distribution).
-
-=back
-
-=head2 How do I create a static variable?
-
-As with most things in Perl, TMTOWTDI. What is a "static variable" in
-other languages could be either a function-private variable (visible
-only within a single function, retaining its value between calls to
-that function), or a file-private variable (visible only to functions
-within the file it was declared in) in Perl.
-
-Here's code to implement a function-private variable:
-
- BEGIN {
- my $counter = 42;
- sub prev_counter { return --$counter }
- sub next_counter { return $counter++ }
- }
-
-Now prev_counter() and next_counter() share a private variable $counter
-that was initialized at compile time.
-
-To declare a file-private variable, you'll still use a my(), putting
-the declaration at the outer scope level at the top of the file.
-Assume this is in file Pax.pm:
-
- package Pax;
- my $started = scalar(localtime(time()));
-
- sub begun { return $started }
-
-When C<use Pax> or C<require Pax> loads this module, the variable will
-be initialized. It won't get garbage-collected the way most variables
-going out of scope do, because the begun() function cares about it,
-but no one else can get it. It is not called $Pax::started because
-its scope is unrelated to the package. It's scoped to the file. You
-could conceivably have several packages in that same file all
-accessing the same private variable, but another file with the same
-package couldn't get to it.
-
-See L<perlsub/"Persistent Private Variables"> for details.
-
-=head2 What's the difference between dynamic and lexical (static) scoping? Between local() and my()?
-
-C<local($x)> saves away the old value of the global variable C<$x>
-and assigns a new value for the duration of the subroutine I<which is
-visible in other functions called from that subroutine>. This is done
-at run-time, so is called dynamic scoping. local() always affects global
-variables, also called package variables or dynamic variables.
-
-C<my($x)> creates a new variable that is only visible in the current
-subroutine. This is done at compile-time, so it is called lexical or
-static scoping. my() always affects private variables, also called
-lexical variables or (improperly) static(ly scoped) variables.
-
-For instance:
-
- sub visible {
- print "var has value $var\n";
- }
-
- sub dynamic {
- local $var = 'local'; # new temporary value for the still-global
- visible(); # variable called $var
- }
-
- sub lexical {
- my $var = 'private'; # new private variable, $var
- visible(); # (invisible outside of sub scope)
- }
-
- $var = 'global';
-
- visible(); # prints global
- dynamic(); # prints local
- lexical(); # prints global
-
-Notice how at no point does the value "private" get printed. That's
-because $var only has that value within the block of the lexical()
-function, and it is hidden from called subroutine.
-
-In summary, local() doesn't make what you think of as private, local
-variables. It gives a global variable a temporary value. my() is
-what you're looking for if you want private variables.
-
-See L<perlsub/"Private Variables via my()"> and
-L<perlsub/"Temporary Values via local()"> for excruciating details.
-
-=head2 How can I access a dynamic variable while a similarly named lexical is in scope?
-
-You can do this via symbolic references, provided you haven't set
-C<use strict "refs">. So instead of $var, use C<${'var'}>.
-
- local $var = "global";
- my $var = "lexical";
-
- print "lexical is $var\n";
-
- no strict 'refs';
- print "global is ${'var'}\n";
-
-If you know your package, you can just mention it explicitly, as in
-$Some_Pack::var. Note that the notation $::var is I<not> the dynamic
-$var in the current package, but rather the one in the C<main>
-package, as though you had written $main::var. Specifying the package
-directly makes you hard-code its name, but it executes faster and
-avoids running afoul of C<use strict "refs">.
-
-=head2 What's the difference between deep and shallow binding?
-
-In deep binding, lexical variables mentioned in anonymous subroutines
-are the same ones that were in scope when the subroutine was created.
-In shallow binding, they are whichever variables with the same names
-happen to be in scope when the subroutine is called. Perl always uses
-deep binding of lexical variables (i.e., those created with my()).
-However, dynamic variables (aka global, local, or package variables)
-are effectively shallowly bound. Consider this just one more reason
-not to use them. See the answer to L<"What's a closure?">.
-
-=head2 Why doesn't "my($foo) = <FILE>;" work right?
-
-C<my()> and C<local()> give list context to the right hand side
-of C<=>. The <FH> read operation, like so many of Perl's
-functions and operators, can tell which context it was called in and
-behaves appropriately. In general, the scalar() function can help.
-This function does nothing to the data itself (contrary to popular myth)
-but rather tells its argument to behave in whatever its scalar fashion is.
-If that function doesn't have a defined scalar behavior, this of course
-doesn't help you (such as with sort()).
-
-To enforce scalar context in this particular case, however, you need
-merely omit the parentheses:
-
- local($foo) = <FILE>; # WRONG
- local($foo) = scalar(<FILE>); # ok
- local $foo = <FILE>; # right
-
-You should probably be using lexical variables anyway, although the
-issue is the same here:
-
- my($foo) = <FILE>; # WRONG
- my $foo = <FILE>; # right
-
-=head2 How do I redefine a builtin function, operator, or method?
-
-Why do you want to do that? :-)
-
-If you want to override a predefined function, such as open(),
-then you'll have to import the new definition from a different
-module. See L<perlsub/"Overriding Built-in Functions">. There's
-also an example in L<perltoot/"Class::Template">.
-
-If you want to overload a Perl operator, such as C<+> or C<**>,
-then you'll want to use the C<use overload> pragma, documented
-in L<overload>.
-
-If you're talking about obscuring method calls in parent classes,
-see L<perltoot/"Overridden Methods">.
-
-=head2 What's the difference between calling a function as &foo and foo()?
-
-When you call a function as C<&foo>, you allow that function access to
-your current @_ values, and you bypass prototypes.
-The function doesn't get an empty @_--it gets yours! While not
-strictly speaking a bug (it's documented that way in L<perlsub>), it
-would be hard to consider this a feature in most cases.
-
-When you call your function as C<&foo()>, then you I<do> get a new @_,
-but prototyping is still circumvented.
-
-Normally, you want to call a function using C<foo()>. You may only
-omit the parentheses if the function is already known to the compiler
-because it already saw the definition (C<use> but not C<require>),
-or via a forward reference or C<use subs> declaration. Even in this
-case, you get a clean @_ without any of the old values leaking through
-where they don't belong.
-
-=head2 How do I create a switch or case statement?
-
-This is explained in more depth in the L<perlsyn>. Briefly, there's
-no official case statement, because of the variety of tests possible
-in Perl (numeric comparison, string comparison, glob comparison,
-regex matching, overloaded comparisons, ...). Larry couldn't decide
-how best to do this, so he left it out, even though it's been on the
-wish list since perl1.
-
-The general answer is to write a construct like this:
-
- for ($variable_to_test) {
- if (/pat1/) { } # do something
- elsif (/pat2/) { } # do something else
- elsif (/pat3/) { } # do something else
- else { } # default
- }
-
-Here's a simple example of a switch based on pattern matching, this
-time lined up in a way to make it look more like a switch statement.
-We'll do a multi-way conditional based on the type of reference stored
-in $whatchamacallit:
-
- SWITCH: for (ref $whatchamacallit) {
-
- /^$/ && die "not a reference";
-
- /SCALAR/ && do {
- print_scalar($$ref);
- last SWITCH;
- };
-
- /ARRAY/ && do {
- print_array(@$ref);
- last SWITCH;
- };
-
- /HASH/ && do {
- print_hash(%$ref);
- last SWITCH;
- };
-
- /CODE/ && do {
- warn "can't print function ref";
- last SWITCH;
- };
-
- # DEFAULT
-
- warn "User defined type skipped";
-
- }
-
-See C<perlsyn/"Basic BLOCKs and Switch Statements"> for many other
-examples in this style.
-
-Sometimes you should change the positions of the constant and the variable.
-For example, let's say you wanted to test which of many answers you were
-given, but in a case-insensitive way that also allows abbreviations.
-You can use the following technique if the strings all start with
-different characters or if you want to arrange the matches so that
-one takes precedence over another, as C<"SEND"> has precedence over
-C<"STOP"> here:
-
- chomp($answer = <>);
- if ("SEND" =~ /^\Q$answer/i) { print "Action is send\n" }
- elsif ("STOP" =~ /^\Q$answer/i) { print "Action is stop\n" }
- elsif ("ABORT" =~ /^\Q$answer/i) { print "Action is abort\n" }
- elsif ("LIST" =~ /^\Q$answer/i) { print "Action is list\n" }
- elsif ("EDIT" =~ /^\Q$answer/i) { print "Action is edit\n" }
-
-A totally different approach is to create a hash of function references.
-
- my %commands = (
- "happy" => \&joy,
- "sad", => \&sullen,
- "done" => sub { die "See ya!" },
- "mad" => \&angry,
- );
-
- print "How are you? ";
- chomp($string = <STDIN>);
- if ($commands{$string}) {
- $commands{$string}->();
- } else {
- print "No such command: $string\n";
- }
-
-=head2 How can I catch accesses to undefined variables/functions/methods?
-
-The AUTOLOAD method, discussed in L<perlsub/"Autoloading"> and
-L<perltoot/"AUTOLOAD: Proxy Methods">, lets you capture calls to
-undefined functions and methods.
-
-When it comes to undefined variables that would trigger a warning
-under C<-w>, you can use a handler to trap the pseudo-signal
-C<__WARN__> like this:
-
- $SIG{__WARN__} = sub {
-
- for ( $_[0] ) { # voici un switch statement
-
- /Use of uninitialized value/ && do {
- # promote warning to a fatal
- die $_;
- };
-
- # other warning cases to catch could go here;
-
- warn $_;
- }
-
- };
-
-=head2 Why can't a method included in this same file be found?
-
-Some possible reasons: your inheritance is getting confused, you've
-misspelled the method name, or the object is of the wrong type. Check
-out L<perltoot> for details about any of the above cases. You may
-also use C<print ref($object)> to find out the class C<$object> was
-blessed into.
-
-Another possible reason for problems is because you've used the
-indirect object syntax (eg, C<find Guru "Samy">) on a class name
-before Perl has seen that such a package exists. It's wisest to make
-sure your packages are all defined before you start using them, which
-will be taken care of if you use the C<use> statement instead of
-C<require>. If not, make sure to use arrow notation (eg.,
-C<< Guru->find("Samy") >>) instead. Object notation is explained in
-L<perlobj>.
-
-Make sure to read about creating modules in L<perlmod> and
-the perils of indirect objects in L<perlobj/"WARNING">.
-
-=head2 How can I find out my current package?
-
-If you're just a random program, you can do this to find
-out what the currently compiled package is:
-
- my $packname = __PACKAGE__;
-
-But, if you're a method and you want to print an error message
-that includes the kind of object you were called on (which is
-not necessarily the same as the one in which you were compiled):
-
- sub amethod {
- my $self = shift;
- my $class = ref($self) || $self;
- warn "called me from a $class object";
- }
-
-=head2 How can I comment out a large block of perl code?
-
-Use embedded POD to discard it:
-
- # program is here
-
- =for nobody
- This paragraph is commented out
-
- # program continues
-
- =begin comment text
-
- all of this stuff
-
- here will be ignored
- by everyone
-
- =end comment text
-
- =cut
-
-This can't go just anywhere. You have to put a pod directive where
-the parser is expecting a new statement, not just in the middle
-of an expression or some other arbitrary yacc grammar production.
-
-=head2 How do I clear a package?
-
-Use this code, provided by Mark-Jason Dominus:
-
- sub scrub_package {
- no strict 'refs';
- my $pack = shift;
- die "Shouldn't delete main package"
- if $pack eq "" || $pack eq "main";
- my $stash = *{$pack . '::'}{HASH};
- my $name;
- foreach $name (keys %$stash) {
- my $fullname = $pack . '::' . $name;
- # Get rid of everything with that name.
- undef $$fullname;
- undef @$fullname;
- undef %$fullname;
- undef &$fullname;
- undef *$fullname;
- }
- }
-
-Or, if you're using a recent release of Perl, you can
-just use the Symbol::delete_package() function instead.
-
-=head2 How can I use a variable as a variable name?
-
-Beginners often think they want to have a variable contain the name
-of a variable.
-
- $fred = 23;
- $varname = "fred";
- ++$$varname; # $fred now 24
-
-This works I<sometimes>, but it is a very bad idea for two reasons.
-
-The first reason is that this technique I<only works on global
-variables>. That means that if $fred is a lexical variable created
-with my() in the above example, the code wouldn't work at all: you'd
-accidentally access the global and skip right over the private lexical
-altogether. Global variables are bad because they can easily collide
-accidentally and in general make for non-scalable and confusing code.
-
-Symbolic references are forbidden under the C<use strict> pragma.
-They are not true references and consequently are not reference counted
-or garbage collected.
-
-The other reason why using a variable to hold the name of another
-variable is a bad idea is that the question often stems from a lack of
-understanding of Perl data structures, particularly hashes. By using
-symbolic references, you are just using the package's symbol-table hash
-(like C<%main::>) instead of a user-defined hash. The solution is to
-use your own hash or a real reference instead.
-
- $fred = 23;
- $varname = "fred";
- $USER_VARS{$varname}++; # not $$varname++
-
-There we're using the %USER_VARS hash instead of symbolic references.
-Sometimes this comes up in reading strings from the user with variable
-references and wanting to expand them to the values of your perl
-program's variables. This is also a bad idea because it conflates the
-program-addressable namespace and the user-addressable one. Instead of
-reading a string and expanding it to the actual contents of your program's
-own variables:
-
- $str = 'this has a $fred and $barney in it';
- $str =~ s/(\$\w+)/$1/eeg; # need double eval
-
-it would be better to keep a hash around like %USER_VARS and have
-variable references actually refer to entries in that hash:
-
- $str =~ s/\$(\w+)/$USER_VARS{$1}/g; # no /e here at all
-
-That's faster, cleaner, and safer than the previous approach. Of course,
-you don't need to use a dollar sign. You could use your own scheme to
-make it less confusing, like bracketed percent symbols, etc.
-
- $str = 'this has a %fred% and %barney% in it';
- $str =~ s/%(\w+)%/$USER_VARS{$1}/g; # no /e here at all
-
-Another reason that folks sometimes think they want a variable to
-contain the name of a variable is because they don't know how to build
-proper data structures using hashes. For example, let's say they
-wanted two hashes in their program: %fred and %barney, and that they
-wanted to use another scalar variable to refer to those by name.
-
- $name = "fred";
- $$name{WIFE} = "wilma"; # set %fred
-
- $name = "barney";
- $$name{WIFE} = "betty"; # set %barney
-
-This is still a symbolic reference, and is still saddled with the
-problems enumerated above. It would be far better to write:
-
- $folks{"fred"}{WIFE} = "wilma";
- $folks{"barney"}{WIFE} = "betty";
-
-And just use a multilevel hash to start with.
-
-The only times that you absolutely I<must> use symbolic references are
-when you really must refer to the symbol table. This may be because it's
-something that can't take a real reference to, such as a format name.
-Doing so may also be important for method calls, since these always go
-through the symbol table for resolution.
-
-In those cases, you would turn off C<strict 'refs'> temporarily so you
-can play around with the symbol table. For example:
-
- @colors = qw(red blue green yellow orange purple violet);
- for my $name (@colors) {
- no strict 'refs'; # renege for the block
- *$name = sub { "<FONT COLOR='$name'>@_</FONT>" };
- }
-
-All those functions (red(), blue(), green(), etc.) appear to be separate,
-but the real code in the closure actually was compiled only once.
-
-So, sometimes you might want to use symbolic references to directly
-manipulate the symbol table. This doesn't matter for formats, handles, and
-subroutines, because they are always global--you can't use my() on them.
-For scalars, arrays, and hashes, though--and usually for subroutines--
-you probably only want to use hard references.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work
-may be distributed only under the terms of Perl's Artistic License.
-Any distribution of this file or derivatives thereof I<outside>
-of that package require that special arrangements be made with
-copyright holder.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
-
diff --git a/contrib/perl5/pod/perlfaq8.pod b/contrib/perl5/pod/perlfaq8.pod
deleted file mode 100644
index 1df3b6a..0000000
--- a/contrib/perl5/pod/perlfaq8.pod
+++ /dev/null
@@ -1,1103 +0,0 @@
-=head1 NAME
-
-perlfaq8 - System Interaction ($Revision: 1.39 $, $Date: 1999/05/23 18:37:57 $)
-
-=head1 DESCRIPTION
-
-This section of the Perl FAQ covers questions involving operating
-system interaction. Topics include interprocess communication (IPC),
-control over the user-interface (keyboard, screen and pointing
-devices), and most anything else not related to data manipulation.
-
-Read the FAQs and documentation specific to the port of perl to your
-operating system (eg, L<perlvms>, L<perlplan9>, ...). These should
-contain more detailed information on the vagaries of your perl.
-
-=head2 How do I find out which operating system I'm running under?
-
-The $^O variable ($OSNAME if you use English) contains an indication of
-the name of the operating system (not its release number) that your perl
-binary was built for.
-
-=head2 How come exec() doesn't return?
-
-Because that's what it does: it replaces your currently running
-program with a different one. If you want to keep going (as is
-probably the case if you're asking this question) use system()
-instead.
-
-=head2 How do I do fancy stuff with the keyboard/screen/mouse?
-
-How you access/control keyboards, screens, and pointing devices
-("mice") is system-dependent. Try the following modules:
-
-=over 4
-
-=item Keyboard
-
- Term::Cap Standard perl distribution
- Term::ReadKey CPAN
- Term::ReadLine::Gnu CPAN
- Term::ReadLine::Perl CPAN
- Term::Screen CPAN
-
-=item Screen
-
- Term::Cap Standard perl distribution
- Curses CPAN
- Term::ANSIColor CPAN
-
-=item Mouse
-
- Tk CPAN
-
-=back
-
-Some of these specific cases are shown below.
-
-=head2 How do I print something out in color?
-
-In general, you don't, because you don't know whether
-the recipient has a color-aware display device. If you
-know that they have an ANSI terminal that understands
-color, you can use the Term::ANSIColor module from CPAN:
-
- use Term::ANSIColor;
- print color("red"), "Stop!\n", color("reset");
- print color("green"), "Go!\n", color("reset");
-
-Or like this:
-
- use Term::ANSIColor qw(:constants);
- print RED, "Stop!\n", RESET;
- print GREEN, "Go!\n", RESET;
-
-=head2 How do I read just one key without waiting for a return key?
-
-Controlling input buffering is a remarkably system-dependent matter.
-On many systems, you can just use the B<stty> command as shown in
-L<perlfunc/getc>, but as you see, that's already getting you into
-portability snags.
-
- open(TTY, "+</dev/tty") or die "no tty: $!";
- system "stty cbreak </dev/tty >/dev/tty 2>&1";
- $key = getc(TTY); # perhaps this works
- # OR ELSE
- sysread(TTY, $key, 1); # probably this does
- system "stty -cbreak </dev/tty >/dev/tty 2>&1";
-
-The Term::ReadKey module from CPAN offers an easy-to-use interface that
-should be more efficient than shelling out to B<stty> for each key.
-It even includes limited support for Windows.
-
- use Term::ReadKey;
- ReadMode('cbreak');
- $key = ReadKey(0);
- ReadMode('normal');
-
-However, using the code requires that you have a working C compiler
-and can use it to build and install a CPAN module. Here's a solution
-using the standard POSIX module, which is already on your systems
-(assuming your system supports POSIX).
-
- use HotKey;
- $key = readkey();
-
-And here's the HotKey module, which hides the somewhat mystifying calls
-to manipulate the POSIX termios structures.
-
- # HotKey.pm
- package HotKey;
-
- @ISA = qw(Exporter);
- @EXPORT = qw(cbreak cooked readkey);
-
- use strict;
- use POSIX qw(:termios_h);
- my ($term, $oterm, $echo, $noecho, $fd_stdin);
-
- $fd_stdin = fileno(STDIN);
- $term = POSIX::Termios->new();
- $term->getattr($fd_stdin);
- $oterm = $term->getlflag();
-
- $echo = ECHO | ECHOK | ICANON;
- $noecho = $oterm & ~$echo;
-
- sub cbreak {
- $term->setlflag($noecho); # ok, so i don't want echo either
- $term->setcc(VTIME, 1);
- $term->setattr($fd_stdin, TCSANOW);
- }
-
- sub cooked {
- $term->setlflag($oterm);
- $term->setcc(VTIME, 0);
- $term->setattr($fd_stdin, TCSANOW);
- }
-
- sub readkey {
- my $key = '';
- cbreak();
- sysread(STDIN, $key, 1);
- cooked();
- return $key;
- }
-
- END { cooked() }
-
- 1;
-
-=head2 How do I check whether input is ready on the keyboard?
-
-The easiest way to do this is to read a key in nonblocking mode with the
-Term::ReadKey module from CPAN, passing it an argument of -1 to indicate
-not to block:
-
- use Term::ReadKey;
-
- ReadMode('cbreak');
-
- if (defined ($char = ReadKey(-1)) ) {
- # input was waiting and it was $char
- } else {
- # no input was waiting
- }
-
- ReadMode('normal'); # restore normal tty settings
-
-=head2 How do I clear the screen?
-
-If you only have do so infrequently, use C<system>:
-
- system("clear");
-
-If you have to do this a lot, save the clear string
-so you can print it 100 times without calling a program
-100 times:
-
- $clear_string = `clear`;
- print $clear_string;
-
-If you're planning on doing other screen manipulations, like cursor
-positions, etc, you might wish to use Term::Cap module:
-
- use Term::Cap;
- $terminal = Term::Cap->Tgetent( {OSPEED => 9600} );
- $clear_string = $terminal->Tputs('cl');
-
-=head2 How do I get the screen size?
-
-If you have Term::ReadKey module installed from CPAN,
-you can use it to fetch the width and height in characters
-and in pixels:
-
- use Term::ReadKey;
- ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
-
-This is more portable than the raw C<ioctl>, but not as
-illustrative:
-
- require 'sys/ioctl.ph';
- die "no TIOCGWINSZ " unless defined &TIOCGWINSZ;
- open(TTY, "+</dev/tty") or die "No tty: $!";
- unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
- die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
- }
- ($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
- print "(row,col) = ($row,$col)";
- print " (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel;
- print "\n";
-
-=head2 How do I ask the user for a password?
-
-(This question has nothing to do with the web. See a different
-FAQ for that.)
-
-There's an example of this in L<perlfunc/crypt>). First, you put the
-terminal into "no echo" mode, then just read the password normally.
-You may do this with an old-style ioctl() function, POSIX terminal
-control (see L<POSIX> or its documentation the Camel Book), or a call
-to the B<stty> program, with varying degrees of portability.
-
-You can also do this for most systems using the Term::ReadKey module
-from CPAN, which is easier to use and in theory more portable.
-
- use Term::ReadKey;
-
- ReadMode('noecho');
- $password = ReadLine(0);
-
-=head2 How do I read and write the serial port?
-
-This depends on which operating system your program is running on. In
-the case of Unix, the serial ports will be accessible through files in
-/dev; on other systems, device names will doubtless differ.
-Several problem areas common to all device interaction are the
-following:
-
-=over 4
-
-=item lockfiles
-
-Your system may use lockfiles to control multiple access. Make sure
-you follow the correct protocol. Unpredictable behavior can result
-from multiple processes reading from one device.
-
-=item open mode
-
-If you expect to use both read and write operations on the device,
-you'll have to open it for update (see L<perlfunc/"open"> for
-details). You may wish to open it without running the risk of
-blocking by using sysopen() and C<O_RDWR|O_NDELAY|O_NOCTTY> from the
-Fcntl module (part of the standard perl distribution). See
-L<perlfunc/"sysopen"> for more on this approach.
-
-=item end of line
-
-Some devices will be expecting a "\r" at the end of each line rather
-than a "\n". In some ports of perl, "\r" and "\n" are different from
-their usual (Unix) ASCII values of "\012" and "\015". You may have to
-give the numeric values you want directly, using octal ("\015"), hex
-("0x0D"), or as a control-character specification ("\cM").
-
- print DEV "atv1\012"; # wrong, for some devices
- print DEV "atv1\015"; # right, for some devices
-
-Even though with normal text files a "\n" will do the trick, there is
-still no unified scheme for terminating a line that is portable
-between Unix, DOS/Win, and Macintosh, except to terminate I<ALL> line
-ends with "\015\012", and strip what you don't need from the output.
-This applies especially to socket I/O and autoflushing, discussed
-next.
-
-=item flushing output
-
-If you expect characters to get to your device when you print() them,
-you'll want to autoflush that filehandle. You can use select()
-and the C<$|> variable to control autoflushing (see L<perlvar/$|>
-and L<perlfunc/select>, or L<perlfaq5>, ``How do I flush/unbuffer an
-output filehandle? Why must I do this?''):
-
- $oldh = select(DEV);
- $| = 1;
- select($oldh);
-
-You'll also see code that does this without a temporary variable, as in
-
- select((select(DEV), $| = 1)[0]);
-
-Or if you don't mind pulling in a few thousand lines
-of code just because you're afraid of a little $| variable:
-
- use IO::Handle;
- DEV->autoflush(1);
-
-As mentioned in the previous item, this still doesn't work when using
-socket I/O between Unix and Macintosh. You'll need to hardcode your
-line terminators, in that case.
-
-=item non-blocking input
-
-If you are doing a blocking read() or sysread(), you'll have to
-arrange for an alarm handler to provide a timeout (see
-L<perlfunc/alarm>). If you have a non-blocking open, you'll likely
-have a non-blocking read, which means you may have to use a 4-arg
-select() to determine whether I/O is ready on that device (see
-L<perlfunc/"select">.
-
-=back
-
-While trying to read from his caller-id box, the notorious Jamie Zawinski
-<jwz@netscape.com>, after much gnashing of teeth and fighting with sysread,
-sysopen, POSIX's tcgetattr business, and various other functions that
-go bump in the night, finally came up with this:
-
- sub open_modem {
- use IPC::Open2;
- my $stty = `/bin/stty -g`;
- open2( \*MODEM_IN, \*MODEM_OUT, "cu -l$modem_device -s2400 2>&1");
- # starting cu hoses /dev/tty's stty settings, even when it has
- # been opened on a pipe...
- system("/bin/stty $stty");
- $_ = <MODEM_IN>;
- chomp;
- if ( !m/^Connected/ ) {
- print STDERR "$0: cu printed `$_' instead of `Connected'\n";
- }
- }
-
-=head2 How do I decode encrypted password files?
-
-You spend lots and lots of money on dedicated hardware, but this is
-bound to get you talked about.
-
-Seriously, you can't if they are Unix password files--the Unix
-password system employs one-way encryption. It's more like hashing than
-encryption. The best you can check is whether something else hashes to
-the same string. You can't turn a hash back into the original string.
-Programs like Crack
-can forcibly (and intelligently) try to guess passwords, but don't
-(can't) guarantee quick success.
-
-If you're worried about users selecting bad passwords, you should
-proactively check when they try to change their password (by modifying
-passwd(1), for example).
-
-=head2 How do I start a process in the background?
-
-You could use
-
- system("cmd &")
-
-or you could use fork as documented in L<perlfunc/"fork">, with
-further examples in L<perlipc>. Some things to be aware of, if you're
-on a Unix-like system:
-
-=over 4
-
-=item STDIN, STDOUT, and STDERR are shared
-
-Both the main process and the backgrounded one (the "child" process)
-share the same STDIN, STDOUT and STDERR filehandles. If both try to
-access them at once, strange things can happen. You may want to close
-or reopen these for the child. You can get around this with
-C<open>ing a pipe (see L<perlfunc/"open">) but on some systems this
-means that the child process cannot outlive the parent.
-
-=item Signals
-
-You'll have to catch the SIGCHLD signal, and possibly SIGPIPE too.
-SIGCHLD is sent when the backgrounded process finishes. SIGPIPE is
-sent when you write to a filehandle whose child process has closed (an
-untrapped SIGPIPE can cause your program to silently die). This is
-not an issue with C<system("cmd&")>.
-
-=item Zombies
-
-You have to be prepared to "reap" the child process when it finishes
-
- $SIG{CHLD} = sub { wait };
-
-See L<perlipc/"Signals"> for other examples of code to do this.
-Zombies are not an issue with C<system("prog &")>.
-
-=back
-
-=head2 How do I trap control characters/signals?
-
-You don't actually "trap" a control character. Instead, that character
-generates a signal which is sent to your terminal's currently
-foregrounded process group, which you then trap in your process.
-Signals are documented in L<perlipc/"Signals"> and the
-section on ``Signals'' in the Camel.
-
-Be warned that very few C libraries are re-entrant. Therefore, if you
-attempt to print() in a handler that got invoked during another stdio
-operation your internal structures will likely be in an
-inconsistent state, and your program will dump core. You can
-sometimes avoid this by using syswrite() instead of print().
-
-Unless you're exceedingly careful, the only safe things to do inside a
-signal handler are (1) set a variable and (2) exit. In the first case,
-you should only set a variable in such a way that malloc() is not
-called (eg, by setting a variable that already has a value).
-
-For example:
-
- $Interrupted = 0; # to ensure it has a value
- $SIG{INT} = sub {
- $Interrupted++;
- syswrite(STDERR, "ouch\n", 5);
- }
-
-However, because syscalls restart by default, you'll find that if
-you're in a "slow" call, such as <FH>, read(), connect(), or
-wait(), that the only way to terminate them is by "longjumping" out;
-that is, by raising an exception. See the time-out handler for a
-blocking flock() in L<perlipc/"Signals"> or the section on ``Signals''
-in the Camel book.
-
-=head2 How do I modify the shadow password file on a Unix system?
-
-If perl was installed correctly and your shadow library was written
-properly, the getpw*() functions described in L<perlfunc> should in
-theory provide (read-only) access to entries in the shadow password
-file. To change the file, make a new shadow password file (the format
-varies from system to system--see L<passwd(5)> for specifics) and use
-pwd_mkdb(8) to install it (see L<pwd_mkdb(8)> for more details).
-
-=head2 How do I set the time and date?
-
-Assuming you're running under sufficient permissions, you should be
-able to set the system-wide date and time by running the date(1)
-program. (There is no way to set the time and date on a per-process
-basis.) This mechanism will work for Unix, MS-DOS, Windows, and NT;
-the VMS equivalent is C<set time>.
-
-However, if all you want to do is change your timezone, you can
-probably get away with setting an environment variable:
-
- $ENV{TZ} = "MST7MDT"; # unixish
- $ENV{'SYS$TIMEZONE_DIFFERENTIAL'}="-5" # vms
- system "trn comp.lang.perl.misc";
-
-=head2 How can I sleep() or alarm() for under a second?
-
-If you want finer granularity than the 1 second that the sleep()
-function provides, the easiest way is to use the select() function as
-documented in L<perlfunc/"select">. Try the Time::HiRes and
-the BSD::Itimer modules (available from CPAN).
-
-=head2 How can I measure time under a second?
-
-In general, you may not be able to. The Time::HiRes module (available
-from CPAN) provides this functionality for some systems.
-
-If your system supports both the syscall() function in Perl as well as
-a system call like gettimeofday(2), then you may be able to do
-something like this:
-
- require 'sys/syscall.ph';
-
- $TIMEVAL_T = "LL";
-
- $done = $start = pack($TIMEVAL_T, ());
-
- syscall(&SYS_gettimeofday, $start, 0) != -1
- or die "gettimeofday: $!";
-
- ##########################
- # DO YOUR OPERATION HERE #
- ##########################
-
- syscall( &SYS_gettimeofday, $done, 0) != -1
- or die "gettimeofday: $!";
-
- @start = unpack($TIMEVAL_T, $start);
- @done = unpack($TIMEVAL_T, $done);
-
- # fix microseconds
- for ($done[1], $start[1]) { $_ /= 1_000_000 }
-
- $delta_time = sprintf "%.4f", ($done[0] + $done[1] )
- -
- ($start[0] + $start[1] );
-
-=head2 How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
-
-Release 5 of Perl added the END block, which can be used to simulate
-atexit(). Each package's END block is called when the program or
-thread ends (see L<perlmod> manpage for more details).
-
-For example, you can use this to make sure your filter program
-managed to finish its output without filling up the disk:
-
- END {
- close(STDOUT) || die "stdout close failed: $!";
- }
-
-The END block isn't called when untrapped signals kill the program,
-though, so if you use END blocks you should also use
-
- use sigtrap qw(die normal-signals);
-
-Perl's exception-handling mechanism is its eval() operator. You can
-use eval() as setjmp and die() as longjmp. For details of this, see
-the section on signals, especially the time-out handler for a blocking
-flock() in L<perlipc/"Signals"> or the section on ``Signals'' in
-the Camel Book.
-
-If exception handling is all you're interested in, try the
-exceptions.pl library (part of the standard perl distribution).
-
-If you want the atexit() syntax (and an rmexit() as well), try the
-AtExit module available from CPAN.
-
-=head2 Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
-
-Some Sys-V based systems, notably Solaris 2.X, redefined some of the
-standard socket constants. Since these were constant across all
-architectures, they were often hardwired into perl code. The proper
-way to deal with this is to "use Socket" to get the correct values.
-
-Note that even though SunOS and Solaris are binary compatible, these
-values are different. Go figure.
-
-=head2 How can I call my system's unique C functions from Perl?
-
-In most cases, you write an external module to do it--see the answer
-to "Where can I learn about linking C with Perl? [h2xs, xsubpp]".
-However, if the function is a system call, and your system supports
-syscall(), you can use the syscall function (documented in
-L<perlfunc>).
-
-Remember to check the modules that came with your distribution, and
-CPAN as well--someone may already have written a module to do it.
-
-=head2 Where do I get the include files to do ioctl() or syscall()?
-
-Historically, these would be generated by the h2ph tool, part of the
-standard perl distribution. This program converts cpp(1) directives
-in C header files to files containing subroutine definitions, like
-&SYS_getitimer, which you can use as arguments to your functions.
-It doesn't work perfectly, but it usually gets most of the job done.
-Simple files like F<errno.h>, F<syscall.h>, and F<socket.h> were fine,
-but the hard ones like F<ioctl.h> nearly always need to hand-edited.
-Here's how to install the *.ph files:
-
- 1. become super-user
- 2. cd /usr/include
- 3. h2ph *.h */*.h
-
-If your system supports dynamic loading, for reasons of portability and
-sanity you probably ought to use h2xs (also part of the standard perl
-distribution). This tool converts C header files to Perl extensions.
-See L<perlxstut> for how to get started with h2xs.
-
-If your system doesn't support dynamic loading, you still probably
-ought to use h2xs. See L<perlxstut> and L<ExtUtils::MakeMaker> for
-more information (in brief, just use B<make perl> instead of a plain
-B<make> to rebuild perl with a new static extension).
-
-=head2 Why do setuid perl scripts complain about kernel problems?
-
-Some operating systems have bugs in the kernel that make setuid
-scripts inherently insecure. Perl gives you a number of options
-(described in L<perlsec>) to work around such systems.
-
-=head2 How can I open a pipe both to and from a command?
-
-The IPC::Open2 module (part of the standard perl distribution) is an
-easy-to-use approach that internally uses pipe(), fork(), and exec() to do
-the job. Make sure you read the deadlock warnings in its documentation,
-though (see L<IPC::Open2>). See
-L<perlipc/"Bidirectional Communication with Another Process"> and
-L<perlipc/"Bidirectional Communication with Yourself">
-
-You may also use the IPC::Open3 module (part of the standard perl
-distribution), but be warned that it has a different order of
-arguments from IPC::Open2 (see L<IPC::Open3>).
-
-=head2 Why can't I get the output of a command with system()?
-
-You're confusing the purpose of system() and backticks (``). system()
-runs a command and returns exit status information (as a 16 bit value:
-the low 7 bits are the signal the process died from, if any, and
-the high 8 bits are the actual exit value). Backticks (``) run a
-command and return what it sent to STDOUT.
-
- $exit_status = system("mail-users");
- $output_string = `ls`;
-
-=head2 How can I capture STDERR from an external command?
-
-There are three basic ways of running external commands:
-
- system $cmd; # using system()
- $output = `$cmd`; # using backticks (``)
- open (PIPE, "cmd |"); # using open()
-
-With system(), both STDOUT and STDERR will go the same place as the
-script's STDOUT and STDERR, unless the system() command redirects them.
-Backticks and open() read B<only> the STDOUT of your command.
-
-With any of these, you can change file descriptors before the call:
-
- open(STDOUT, ">logfile");
- system("ls");
-
-or you can use Bourne shell file-descriptor redirection:
-
- $output = `$cmd 2>some_file`;
- open (PIPE, "cmd 2>some_file |");
-
-You can also use file-descriptor redirection to make STDERR a
-duplicate of STDOUT:
-
- $output = `$cmd 2>&1`;
- open (PIPE, "cmd 2>&1 |");
-
-Note that you I<cannot> simply open STDERR to be a dup of STDOUT
-in your Perl program and avoid calling the shell to do the redirection.
-This doesn't work:
-
- open(STDERR, ">&STDOUT");
- $alloutput = `cmd args`; # stderr still escapes
-
-This fails because the open() makes STDERR go to where STDOUT was
-going at the time of the open(). The backticks then make STDOUT go to
-a string, but don't change STDERR (which still goes to the old
-STDOUT).
-
-Note that you I<must> use Bourne shell (sh(1)) redirection syntax in
-backticks, not csh(1)! Details on why Perl's system() and backtick
-and pipe opens all use the Bourne shell are in
-http://www.perl.com/CPAN/doc/FMTEYEWTK/versus/csh.whynot .
-To capture a command's STDERR and STDOUT together:
-
- $output = `cmd 2>&1`; # either with backticks
- $pid = open(PH, "cmd 2>&1 |"); # or with an open pipe
- while (<PH>) { } # plus a read
-
-To capture a command's STDOUT but discard its STDERR:
-
- $output = `cmd 2>/dev/null`; # either with backticks
- $pid = open(PH, "cmd 2>/dev/null |"); # or with an open pipe
- while (<PH>) { } # plus a read
-
-To capture a command's STDERR but discard its STDOUT:
-
- $output = `cmd 2>&1 1>/dev/null`; # either with backticks
- $pid = open(PH, "cmd 2>&1 1>/dev/null |"); # or with an open pipe
- while (<PH>) { } # plus a read
-
-To exchange a command's STDOUT and STDERR in order to capture the STDERR
-but leave its STDOUT to come out our old STDERR:
-
- $output = `cmd 3>&1 1>&2 2>&3 3>&-`; # either with backticks
- $pid = open(PH, "cmd 3>&1 1>&2 2>&3 3>&-|");# or with an open pipe
- while (<PH>) { } # plus a read
-
-To read both a command's STDOUT and its STDERR separately, it's easiest
-and safest to redirect them separately to files, and then read from those
-files when the program is done:
-
- system("program args 1>/tmp/program.stdout 2>/tmp/program.stderr");
-
-Ordering is important in all these examples. That's because the shell
-processes file descriptor redirections in strictly left to right order.
-
- system("prog args 1>tmpfile 2>&1");
- system("prog args 2>&1 1>tmpfile");
-
-The first command sends both standard out and standard error to the
-temporary file. The second command sends only the old standard output
-there, and the old standard error shows up on the old standard out.
-
-=head2 Why doesn't open() return an error when a pipe open fails?
-
-Because the pipe open takes place in two steps: first Perl calls
-fork() to start a new process, then this new process calls exec() to
-run the program you really wanted to open. The first step reports
-success or failure to your process, so open() can only tell you
-whether the fork() succeeded or not.
-
-To find out if the exec() step succeeded, you have to catch SIGCHLD
-and wait() to get the exit status. You should also catch SIGPIPE if
-you're writing to the child--you may not have found out the exec()
-failed by the time you write. This is documented in L<perlipc>.
-
-In some cases, even this won't work. If the second argument to a
-piped open() contains shell metacharacters, perl fork()s, then exec()s
-a shell to decode the metacharacters and eventually run the desired
-program. Now when you call wait(), you only learn whether or not the
-I<shell> could be successfully started...it's best to avoid shell
-metacharacters.
-
-On systems that follow the spawn() paradigm, open() I<might> do what
-you expect--unless perl uses a shell to start your command. In this
-case the fork()/exec() description still applies.
-
-=head2 What's wrong with using backticks in a void context?
-
-Strictly speaking, nothing. Stylistically speaking, it's not a good
-way to write maintainable code because backticks have a (potentially
-humongous) return value, and you're ignoring it. It's may also not be very
-efficient, because you have to read in all the lines of output, allocate
-memory for them, and then throw it away. Too often people are lulled
-to writing:
-
- `cp file file.bak`;
-
-And now they think "Hey, I'll just always use backticks to run programs."
-Bad idea: backticks are for capturing a program's output; the system()
-function is for running programs.
-
-Consider this line:
-
- `cat /etc/termcap`;
-
-You haven't assigned the output anywhere, so it just wastes memory
-(for a little while). You forgot to check C<$?> to see whether
-the program even ran correctly, too. Even if you wrote
-
- print `cat /etc/termcap`;
-
-this code could and probably should be written as
-
- system("cat /etc/termcap") == 0
- or die "cat program failed!";
-
-which will get the output quickly (as it is generated, instead of only
-at the end) and also check the return value.
-
-system() also provides direct control over whether shell wildcard
-processing may take place, whereas backticks do not.
-
-=head2 How can I call backticks without shell processing?
-
-This is a bit tricky. Instead of writing
-
- @ok = `grep @opts '$search_string' @filenames`;
-
-You have to do this:
-
- my @ok = ();
- if (open(GREP, "-|")) {
- while (<GREP>) {
- chomp;
- push(@ok, $_);
- }
- close GREP;
- } else {
- exec 'grep', @opts, $search_string, @filenames;
- }
-
-Just as with system(), no shell escapes happen when you exec() a list.
-Further examples of this can be found in L<perlipc/"Safe Pipe Opens">.
-
-Note that if you're stuck on Microsoft, no solution to this vexing issue
-is even possible. Even if Perl were to emulate fork(), you'd still
-be hosed, because Microsoft gives no argc/argv-style API. Their API
-always reparses from a single string, which is fundamentally wrong,
-but you're not likely to get the Gods of Redmond to acknowledge this
-and fix it for you.
-
-=head2 Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
-
-Some stdio's set error and eof flags that need clearing. The
-POSIX module defines clearerr() that you can use. That is the
-technically correct way to do it. Here are some less reliable
-workarounds:
-
-=over 4
-
-=item 1
-
-Try keeping around the seekpointer and go there, like this:
-
- $where = tell(LOG);
- seek(LOG, $where, 0);
-
-=item 2
-
-If that doesn't work, try seeking to a different part of the file and
-then back.
-
-=item 3
-
-If that doesn't work, try seeking to a different part of
-the file, reading something, and then seeking back.
-
-=item 4
-
-If that doesn't work, give up on your stdio package and use sysread.
-
-=back
-
-=head2 How can I convert my shell script to perl?
-
-Learn Perl and rewrite it. Seriously, there's no simple converter.
-Things that are awkward to do in the shell are easy to do in Perl, and
-this very awkwardness is what would make a shell->perl converter
-nigh-on impossible to write. By rewriting it, you'll think about what
-you're really trying to do, and hopefully will escape the shell's
-pipeline datastream paradigm, which while convenient for some matters,
-causes many inefficiencies.
-
-=head2 Can I use perl to run a telnet or ftp session?
-
-Try the Net::FTP, TCP::Client, and Net::Telnet modules (available from
-CPAN). http://www.perl.com/CPAN/scripts/netstuff/telnet.emul.shar
-will also help for emulating the telnet protocol, but Net::Telnet is
-quite probably easier to use..
-
-If all you want to do is pretend to be telnet but don't need
-the initial telnet handshaking, then the standard dual-process
-approach will suffice:
-
- use IO::Socket; # new in 5.004
- $handle = IO::Socket::INET->new('www.perl.com:80')
- || die "can't connect to port 80 on www.perl.com: $!";
- $handle->autoflush(1);
- if (fork()) { # XXX: undef means failure
- select($handle);
- print while <STDIN>; # everything from stdin to socket
- } else {
- print while <$handle>; # everything from socket to stdout
- }
- close $handle;
- exit;
-
-=head2 How can I write expect in Perl?
-
-Once upon a time, there was a library called chat2.pl (part of the
-standard perl distribution), which never really got finished. If you
-find it somewhere, I<don't use it>. These days, your best bet is to
-look at the Expect module available from CPAN, which also requires two
-other modules from CPAN, IO::Pty and IO::Stty.
-
-=head2 Is there a way to hide perl's command line from programs such as "ps"?
-
-First of all note that if you're doing this for security reasons (to
-avoid people seeing passwords, for example) then you should rewrite
-your program so that critical information is never given as an
-argument. Hiding the arguments won't make your program completely
-secure.
-
-To actually alter the visible command line, you can assign to the
-variable $0 as documented in L<perlvar>. This won't work on all
-operating systems, though. Daemon programs like sendmail place their
-state there, as in:
-
- $0 = "orcus [accepting connections]";
-
-=head2 I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?
-
-=over 4
-
-=item Unix
-
-In the strictest sense, it can't be done--the script executes as a
-different process from the shell it was started from. Changes to a
-process are not reflected in its parent--only in any children
-created after the change. There is shell magic that may allow you to
-fake it by eval()ing the script's output in your shell; check out the
-comp.unix.questions FAQ for details.
-
-=back
-
-=head2 How do I close a process's filehandle without waiting for it to complete?
-
-Assuming your system supports such things, just send an appropriate signal
-to the process (see L<perlfunc/"kill">). It's common to first send a TERM
-signal, wait a little bit, and then send a KILL signal to finish it off.
-
-=head2 How do I fork a daemon process?
-
-If by daemon process you mean one that's detached (disassociated from
-its tty), then the following process is reported to work on most
-Unixish systems. Non-Unix users should check their Your_OS::Process
-module for other solutions.
-
-=over 4
-
-=item *
-
-Open /dev/tty and use the TIOCNOTTY ioctl on it. See L<tty(4)>
-for details. Or better yet, you can just use the POSIX::setsid()
-function, so you don't have to worry about process groups.
-
-=item *
-
-Change directory to /
-
-=item *
-
-Reopen STDIN, STDOUT, and STDERR so they're not connected to the old
-tty.
-
-=item *
-
-Background yourself like this:
-
- fork && exit;
-
-=back
-
-The Proc::Daemon module, available from CPAN, provides a function to
-perform these actions for you.
-
-=head2 How do I find out if I'm running interactively or not?
-
-Good question. Sometimes C<-t STDIN> and C<-t STDOUT> can give clues,
-sometimes not.
-
- if (-t STDIN && -t STDOUT) {
- print "Now what? ";
- }
-
-On POSIX systems, you can test whether your own process group matches
-the current process group of your controlling terminal as follows:
-
- use POSIX qw/getpgrp tcgetpgrp/;
- open(TTY, "/dev/tty") or die $!;
- $tpgrp = tcgetpgrp(fileno(*TTY));
- $pgrp = getpgrp();
- if ($tpgrp == $pgrp) {
- print "foreground\n";
- } else {
- print "background\n";
- }
-
-=head2 How do I timeout a slow event?
-
-Use the alarm() function, probably in conjunction with a signal
-handler, as documented in L<perlipc/"Signals"> and the section on
-``Signals'' in the Camel. You may instead use the more flexible
-Sys::AlarmCall module available from CPAN.
-
-=head2 How do I set CPU limits?
-
-Use the BSD::Resource module from CPAN.
-
-=head2 How do I avoid zombies on a Unix system?
-
-Use the reaper code from L<perlipc/"Signals"> to call wait() when a
-SIGCHLD is received, or else use the double-fork technique described
-in L<perlfunc/fork>.
-
-=head2 How do I use an SQL database?
-
-There are a number of excellent interfaces to SQL databases. See the
-DBD::* modules available from http://www.perl.com/CPAN/modules/DBD .
-A lot of information on this can be found at
-http://www.symbolstone.org/technology/perl/DBI/
-
-=head2 How do I make a system() exit on control-C?
-
-You can't. You need to imitate the system() call (see L<perlipc> for
-sample code) and then have a signal handler for the INT signal that
-passes the signal on to the subprocess. Or you can check for it:
-
- $rc = system($cmd);
- if ($rc & 127) { die "signal death" }
-
-=head2 How do I open a file without blocking?
-
-If you're lucky enough to be using a system that supports
-non-blocking reads (most Unixish systems do), you need only to use the
-O_NDELAY or O_NONBLOCK flag from the Fcntl module in conjunction with
-sysopen():
-
- use Fcntl;
- sysopen(FH, "/tmp/somefile", O_WRONLY|O_NDELAY|O_CREAT, 0644)
- or die "can't open /tmp/somefile: $!":
-
-=head2 How do I install a module from CPAN?
-
-The easiest way is to have a module also named CPAN do it for you.
-This module comes with perl version 5.004 and later. To manually install
-the CPAN module, or any well-behaved CPAN module for that matter, follow
-these steps:
-
-=over 4
-
-=item 1
-
-Unpack the source into a temporary area.
-
-=item 2
-
- perl Makefile.PL
-
-=item 3
-
- make
-
-=item 4
-
- make test
-
-=item 5
-
- make install
-
-=back
-
-If your version of perl is compiled without dynamic loading, then you
-just need to replace step 3 (B<make>) with B<make perl> and you will
-get a new F<perl> binary with your extension linked in.
-
-See L<ExtUtils::MakeMaker> for more details on building extensions.
-See also the next question, ``What's the difference between require
-and use?''.
-
-=head2 What's the difference between require and use?
-
-Perl offers several different ways to include code from one file into
-another. Here are the deltas between the various inclusion constructs:
-
- 1) do $file is like eval `cat $file`, except the former
- 1.1: searches @INC and updates %INC.
- 1.2: bequeaths an *unrelated* lexical scope on the eval'ed code.
-
- 2) require $file is like do $file, except the former
- 2.1: checks for redundant loading, skipping already loaded files.
- 2.2: raises an exception on failure to find, compile, or execute $file.
-
- 3) require Module is like require "Module.pm", except the former
- 3.1: translates each "::" into your system's directory separator.
- 3.2: primes the parser to disambiguate class Module as an indirect object.
-
- 4) use Module is like require Module, except the former
- 4.1: loads the module at compile time, not run-time.
- 4.2: imports symbols and semantics from that package to the current one.
-
-In general, you usually want C<use> and a proper Perl module.
-
-=head2 How do I keep my own module/library directory?
-
-When you build modules, use the PREFIX option when generating
-Makefiles:
-
- perl Makefile.PL PREFIX=/u/mydir/perl
-
-then either set the PERL5LIB environment variable before you run
-scripts that use the modules/libraries (see L<perlrun>) or say
-
- use lib '/u/mydir/perl';
-
-This is almost the same as
-
- BEGIN {
- unshift(@INC, '/u/mydir/perl');
- }
-
-except that the lib module checks for machine-dependent subdirectories.
-See Perl's L<lib> for more information.
-
-=head2 How do I add the directory my program lives in to the module/library search path?
-
- use FindBin;
- use lib "$FindBin::Bin";
- use your_own_modules;
-
-=head2 How do I add a directory to my include path at runtime?
-
-Here are the suggested ways of modifying your include path:
-
- the PERLLIB environment variable
- the PERL5LIB environment variable
- the perl -Idir command line flag
- the use lib pragma, as in
- use lib "$ENV{HOME}/myown_perllib";
-
-The latter is particularly useful because it knows about machine
-dependent architectures. The lib.pm pragmatic module was first
-included with the 5.002 release of Perl.
-
-=head2 What is socket.ph and where do I get it?
-
-It's a perl4-style file defining values for system networking
-constants. Sometimes it is built using h2ph when Perl is installed,
-but other times it is not. Modern programs C<use Socket;> instead.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work
-may be distributed only under the terms of Perl's Artistic License.
-Any distribution of this file or derivatives thereof I<outside>
-of that package require that special arrangements be made with
-copyright holder.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
diff --git a/contrib/perl5/pod/perlfaq9.pod b/contrib/perl5/pod/perlfaq9.pod
deleted file mode 100644
index 9676380..0000000
--- a/contrib/perl5/pod/perlfaq9.pod
+++ /dev/null
@@ -1,602 +0,0 @@
-=head1 NAME
-
-perlfaq9 - Networking ($Revision: 1.26 $, $Date: 1999/05/23 16:08:30 $)
-
-=head1 DESCRIPTION
-
-This section deals with questions related to networking, the internet,
-and a few on the web.
-
-=head2 My CGI script runs from the command line but not the browser. (500 Server Error)
-
-If you can demonstrate that you've read the following FAQs and that
-your problem isn't something simple that can be easily answered, you'll
-probably receive a courteous and useful reply to your question if you
-post it on comp.infosystems.www.authoring.cgi (if it's something to do
-with HTTP, HTML, or the CGI protocols). Questions that appear to be Perl
-questions but are really CGI ones that are posted to comp.lang.perl.misc
-may not be so well received.
-
-The useful FAQs and related documents are:
-
- CGI FAQ
- http://www.webthing.com/tutorials/cgifaq.html
-
- Web FAQ
- http://www.boutell.com/faq/
-
- WWW Security FAQ
- http://www.w3.org/Security/Faq/
-
- HTTP Spec
- http://www.w3.org/pub/WWW/Protocols/HTTP/
-
- HTML Spec
- http://www.w3.org/TR/REC-html40/
- http://www.w3.org/pub/WWW/MarkUp/
-
- CGI Spec
- http://www.w3.org/CGI/
-
- CGI Security FAQ
- http://www.go2net.com/people/paulp/cgi-security/safe-cgi.txt
-
-=head2 How can I get better error messages from a CGI program?
-
-Use the CGI::Carp module. It replaces C<warn> and C<die>, plus the
-normal Carp modules C<carp>, C<croak>, and C<confess> functions with
-more verbose and safer versions. It still sends them to the normal
-server error log.
-
- use CGI::Carp;
- warn "This is a complaint";
- die "But this one is serious";
-
-The following use of CGI::Carp also redirects errors to a file of your choice,
-placed in a BEGIN block to catch compile-time warnings as well:
-
- BEGIN {
- use CGI::Carp qw(carpout);
- open(LOG, ">>/var/local/cgi-logs/mycgi-log")
- or die "Unable to append to mycgi-log: $!\n";
- carpout(*LOG);
- }
-
-You can even arrange for fatal errors to go back to the client browser,
-which is nice for your own debugging, but might confuse the end user.
-
- use CGI::Carp qw(fatalsToBrowser);
- die "Bad error here";
-
-Even if the error happens before you get the HTTP header out, the module
-will try to take care of this to avoid the dreaded server 500 errors.
-Normal warnings still go out to the server error log (or wherever
-you've sent them with C<carpout>) with the application name and date
-stamp prepended.
-
-=head2 How do I remove HTML from a string?
-
-The most correct way (albeit not the fastest) is to use HTML::Parser
-from CPAN. Another mostly correct
-way is to use HTML::FormatText which not only removes HTML but also
-attempts to do a little simple formatting of the resulting plain text.
-
-Many folks attempt a simple-minded regular expression approach, like
-C<< s/<.*?>//g >>, but that fails in many cases because the tags
-may continue over line breaks, they may contain quoted angle-brackets,
-or HTML comment may be present. Plus, folks forget to convert
-entities--like C<&lt;> for example.
-
-Here's one "simple-minded" approach, that works for most files:
-
- #!/usr/bin/perl -p0777
- s/<(?:[^>'"]*|(['"]).*?\1)*>//gs
-
-If you want a more complete solution, see the 3-stage striphtml
-program in
-http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/striphtml.gz
-.
-
-Here are some tricky cases that you should think about when picking
-a solution:
-
- <IMG SRC = "foo.gif" ALT = "A > B">
-
- <IMG SRC = "foo.gif"
- ALT = "A > B">
-
- <!-- <A comment> -->
-
- <script>if (a<b && a>c)</script>
-
- <# Just data #>
-
- <![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
-
-If HTML comments include other tags, those solutions would also break
-on text like this:
-
- <!-- This section commented out.
- <B>You can't see me!</B>
- -->
-
-=head2 How do I extract URLs?
-
-A quick but imperfect approach is
-
- #!/usr/bin/perl -n00
- # qxurl - tchrist@perl.com
- print "$2\n" while m{
- < \s*
- A \s+ HREF \s* = \s* (["']) (.*?) \1
- \s* >
- }gsix;
-
-This version does not adjust relative URLs, understand alternate
-bases, deal with HTML comments, deal with HREF and NAME attributes
-in the same tag, understand extra qualifiers like TARGET, or accept
-URLs themselves as arguments. It also runs about 100x faster than a
-more "complete" solution using the LWP suite of modules, such as the
-http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/xurl.gz program.
-
-=head2 How do I download a file from the user's machine? How do I open a file on another machine?
-
-In the context of an HTML form, you can use what's known as
-B<multipart/form-data> encoding. The CGI.pm module (available from
-CPAN) supports this in the start_multipart_form() method, which isn't
-the same as the startform() method.
-
-=head2 How do I make a pop-up menu in HTML?
-
-Use the B<< <SELECT> >> and B<< <OPTION> >> tags. The CGI.pm
-module (available from CPAN) supports this widget, as well as many
-others, including some that it cleverly synthesizes on its own.
-
-=head2 How do I fetch an HTML file?
-
-One approach, if you have the lynx text-based HTML browser installed
-on your system, is this:
-
- $html_code = `lynx -source $url`;
- $text_data = `lynx -dump $url`;
-
-The libwww-perl (LWP) modules from CPAN provide a more powerful way
-to do this. They don't require lynx, but like lynx, can still work
-through proxies:
-
- # simplest version
- use LWP::Simple;
- $content = get($URL);
-
- # or print HTML from a URL
- use LWP::Simple;
- getprint "http://www.linpro.no/lwp/";
-
- # or print ASCII from HTML from a URL
- # also need HTML-Tree package from CPAN
- use LWP::Simple;
- use HTML::Parser;
- use HTML::FormatText;
- my ($html, $ascii);
- $html = get("http://www.perl.com/");
- defined $html
- or die "Can't fetch HTML from http://www.perl.com/";
- $ascii = HTML::FormatText->new->format(parse_html($html));
- print $ascii;
-
-=head2 How do I automate an HTML form submission?
-
-If you're submitting values using the GET method, create a URL and encode
-the form using the C<query_form> method:
-
- use LWP::Simple;
- use URI::URL;
-
- my $url = url('http://www.perl.com/cgi-bin/cpan_mod');
- $url->query_form(module => 'DB_File', readme => 1);
- $content = get($url);
-
-If you're using the POST method, create your own user agent and encode
-the content appropriately.
-
- use HTTP::Request::Common qw(POST);
- use LWP::UserAgent;
-
- $ua = LWP::UserAgent->new();
- my $req = POST 'http://www.perl.com/cgi-bin/cpan_mod',
- [ module => 'DB_File', readme => 1 ];
- $content = $ua->request($req)->as_string;
-
-=head2 How do I decode or create those %-encodings on the web?
-
-
-If you are writing a CGI script, you should be using the CGI.pm module
-that comes with perl, or some other equivalent module. The CGI module
-automatically decodes queries for you, and provides an escape()
-function to handle encoding.
-
-
-The best source of detailed information on URI encoding is RFC 2396.
-Basically, the following substitutions do it:
-
- s/([^\w()'*~!.-])/sprintf '%%%02x', $1/eg; # encode
-
- s/%([A-Fa-f\d]{2})/chr hex $1/eg; # decode
-
-However, you should only apply them to individual URI components, not
-the entire URI, otherwise you'll lose information and generally mess
-things up. If that didn't explain it, don't worry. Just go read
-section 2 of the RFC, it's probably the best explanation there is.
-
-RFC 2396 also contains a lot of other useful information, including a
-regexp for breaking any arbitrary URI into components (Appendix B).
-
-=head2 How do I redirect to another page?
-
-According to RFC 2616, "Hypertext Transfer Protocol -- HTTP/1.1", the
-preferred method is to send a C<Location:> header instead of a
-C<Content-Type:> header:
-
- Location: http://www.domain.com/newpage
-
-Note that relative URLs in these headers can cause strange effects
-because of "optimizations" that servers do.
-
- $url = "http://www.perl.com/CPAN/";
- print "Location: $url\n\n";
- exit;
-
-To target a particular frame in a frameset, include the "Window-target:"
-in the header.
-
- print <<EOF;
- Location: http://www.domain.com/newpage
- Window-target: <FrameName>
-
- EOF
-
-To be correct to the spec, each of those virtual newlines should
-really be physical C<"\015\012"> sequences by the time your message is
-received by the client browser. Except for NPH scripts, though, that
-local newline should get translated by your server into standard form,
-so you shouldn't have a problem here, even if you are stuck on MacOS.
-Everybody else probably won't even notice.
-
-=head2 How do I put a password on my web pages?
-
-That depends. You'll need to read the documentation for your web
-server, or perhaps check some of the other FAQs referenced above.
-
-=head2 How do I edit my .htpasswd and .htgroup files with Perl?
-
-The HTTPD::UserAdmin and HTTPD::GroupAdmin modules provide a
-consistent OO interface to these files, regardless of how they're
-stored. Databases may be text, dbm, Berkley DB or any database with a
-DBI compatible driver. HTTPD::UserAdmin supports files used by the
-`Basic' and `Digest' authentication schemes. Here's an example:
-
- use HTTPD::UserAdmin ();
- HTTPD::UserAdmin
- ->new(DB => "/foo/.htpasswd")
- ->add($username => $password);
-
-=head2 How do I make sure users can't enter values into a form that cause my CGI script to do bad things?
-
-Read the CGI security FAQ, at
-http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html , and the
-Perl/CGI FAQ at
-http://www.perl.com/CPAN/doc/FAQs/cgi/perl-cgi-faq.html .
-
-In brief: use tainting (see L<perlsec>), which makes sure that data
-from outside your script (eg, CGI parameters) are never used in
-C<eval> or C<system> calls. In addition to tainting, never use the
-single-argument form of system() or exec(). Instead, supply the
-command and arguments as a list, which prevents shell globbing.
-
-=head2 How do I parse a mail header?
-
-For a quick-and-dirty solution, try this solution derived
-from L<perlfunc/split>:
-
- $/ = '';
- $header = <MSG>;
- $header =~ s/\n\s+/ /g; # merge continuation lines
- %head = ( UNIX_FROM_LINE, split /^([-\w]+):\s*/m, $header );
-
-That solution doesn't do well if, for example, you're trying to
-maintain all the Received lines. A more complete approach is to use
-the Mail::Header module from CPAN (part of the MailTools package).
-
-=head2 How do I decode a CGI form?
-
-You use a standard module, probably CGI.pm. Under no circumstances
-should you attempt to do so by hand!
-
-You'll see a lot of CGI programs that blindly read from STDIN the number
-of bytes equal to CONTENT_LENGTH for POSTs, or grab QUERY_STRING for
-decoding GETs. These programs are very poorly written. They only work
-sometimes. They typically forget to check the return value of the read()
-system call, which is a cardinal sin. They don't handle HEAD requests.
-They don't handle multipart forms used for file uploads. They don't deal
-with GET/POST combinations where query fields are in more than one place.
-They don't deal with keywords in the query string.
-
-In short, they're bad hacks. Resist them at all costs. Please do not be
-tempted to reinvent the wheel. Instead, use the CGI.pm or CGI_Lite.pm
-(available from CPAN), or if you're trapped in the module-free land
-of perl1 .. perl4, you might look into cgi-lib.pl (available from
-http://cgi-lib.stanford.edu/cgi-lib/ ).
-
-Make sure you know whether to use a GET or a POST in your form.
-GETs should only be used for something that doesn't update the server.
-Otherwise you can get mangled databases and repeated feedback mail
-messages. The fancy word for this is ``idempotency''. This simply
-means that there should be no difference between making a GET request
-for a particular URL once or multiple times. This is because the
-HTTP protocol definition says that a GET request may be cached by the
-browser, or server, or an intervening proxy. POST requests cannot be
-cached, because each request is independent and matters. Typically,
-POST requests change or depend on state on the server (query or update
-a database, send mail, or purchase a computer).
-
-=head2 How do I check a valid mail address?
-
-You can't, at least, not in real time. Bummer, eh?
-
-Without sending mail to the address and seeing whether there's a human
-on the other hand to answer you, you cannot determine whether a mail
-address is valid. Even if you apply the mail header standard, you
-can have problems, because there are deliverable addresses that aren't
-RFC-822 (the mail header standard) compliant, and addresses that aren't
-deliverable which are compliant.
-
-Many are tempted to try to eliminate many frequently-invalid
-mail addresses with a simple regex, such as
-C</^[\w.-]+\@(?:[\w-]+\.)+\w+$/>. It's a very bad idea. However,
-this also throws out many valid ones, and says nothing about
-potential deliverability, so it is not suggested. Instead, see
-http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/ckaddr.gz,
-which actually checks against the full RFC spec (except for nested
-comments), looks for addresses you may not wish to accept mail to
-(say, Bill Clinton or your postmaster), and then makes sure that the
-hostname given can be looked up in the DNS MX records. It's not fast,
-but it works for what it tries to do.
-
-Our best advice for verifying a person's mail address is to have them
-enter their address twice, just as you normally do to change a password.
-This usually weeds out typos. If both versions match, send
-mail to that address with a personal message that looks somewhat like:
-
- Dear someuser@host.com,
-
- Please confirm the mail address you gave us Wed May 6 09:38:41
- MDT 1998 by replying to this message. Include the string
- "Rumpelstiltskin" in that reply, but spelled in reverse; that is,
- start with "Nik...". Once this is done, your confirmed address will
- be entered into our records.
-
-If you get the message back and they've followed your directions,
-you can be reasonably assured that it's real.
-
-A related strategy that's less open to forgery is to give them a PIN
-(personal ID number). Record the address and PIN (best that it be a
-random one) for later processing. In the mail you send, ask them to
-include the PIN in their reply. But if it bounces, or the message is
-included via a ``vacation'' script, it'll be there anyway. So it's
-best to ask them to mail back a slight alteration of the PIN, such as
-with the characters reversed, one added or subtracted to each digit, etc.
-
-=head2 How do I decode a MIME/BASE64 string?
-
-The MIME-Base64 package (available from CPAN) handles this as well as
-the MIME/QP encoding. Decoding BASE64 becomes as simple as:
-
- use MIME::Base64;
- $decoded = decode_base64($encoded);
-
-The MIME-Tools package (available from CPAN) supports extraction with
-decoding of BASE64 encoded attachments and content directly from email
-messages.
-
-If the string to decode is short (less than 84 bytes long)
-a more direct approach is to use the unpack() function's "u"
-format after minor transliterations:
-
- tr#A-Za-z0-9+/##cd; # remove non-base64 chars
- tr#A-Za-z0-9+/# -_#; # convert to uuencoded format
- $len = pack("c", 32 + 0.75*length); # compute length byte
- print unpack("u", $len . $_); # uudecode and print
-
-=head2 How do I return the user's mail address?
-
-On systems that support getpwuid, the $< variable, and the
-Sys::Hostname module (which is part of the standard perl distribution),
-you can probably try using something like this:
-
- use Sys::Hostname;
- $address = sprintf('%s@%s', scalar getpwuid($<), hostname);
-
-Company policies on mail address can mean that this generates addresses
-that the company's mail system will not accept, so you should ask for
-users' mail addresses when this matters. Furthermore, not all systems
-on which Perl runs are so forthcoming with this information as is Unix.
-
-The Mail::Util module from CPAN (part of the MailTools package) provides a
-mailaddress() function that tries to guess the mail address of the user.
-It makes a more intelligent guess than the code above, using information
-given when the module was installed, but it could still be incorrect.
-Again, the best way is often just to ask the user.
-
-=head2 How do I send mail?
-
-Use the C<sendmail> program directly:
-
- open(SENDMAIL, "|/usr/lib/sendmail -oi -t -odq")
- or die "Can't fork for sendmail: $!\n";
- print SENDMAIL <<"EOF";
- From: User Originating Mail <me\@host>
- To: Final Destination <you\@otherhost>
- Subject: A relevant subject line
-
- Body of the message goes here after the blank line
- in as many lines as you like.
- EOF
- close(SENDMAIL) or warn "sendmail didn't close nicely";
-
-The B<-oi> option prevents sendmail from interpreting a line consisting
-of a single dot as "end of message". The B<-t> option says to use the
-headers to decide who to send the message to, and B<-odq> says to put
-the message into the queue. This last option means your message won't
-be immediately delivered, so leave it out if you want immediate
-delivery.
-
-Alternate, less convenient approaches include calling mail (sometimes
-called mailx) directly or simply opening up port 25 have having an
-intimate conversation between just you and the remote SMTP daemon,
-probably sendmail.
-
-Or you might be able use the CPAN module Mail::Mailer:
-
- use Mail::Mailer;
-
- $mailer = Mail::Mailer->new();
- $mailer->open({ From => $from_address,
- To => $to_address,
- Subject => $subject,
- })
- or die "Can't open: $!\n";
- print $mailer $body;
- $mailer->close();
-
-The Mail::Internet module uses Net::SMTP which is less Unix-centric than
-Mail::Mailer, but less reliable. Avoid raw SMTP commands. There
-are many reasons to use a mail transport agent like sendmail. These
-include queueing, MX records, and security.
-
-=head2 How do I use MIME to make an attachment to a mail message?
-
-This answer is extracted directly from the MIME::Lite documentation.
-Create a multipart message (i.e., one with attachments).
-
- use MIME::Lite;
-
- ### Create a new multipart message:
- $msg = MIME::Lite->new(
- From =>'me@myhost.com',
- To =>'you@yourhost.com',
- Cc =>'some@other.com, some@more.com',
- Subject =>'A message with 2 parts...',
- Type =>'multipart/mixed'
- );
-
- ### Add parts (each "attach" has same arguments as "new"):
- $msg->attach(Type =>'TEXT',
- Data =>"Here's the GIF file you wanted"
- );
- $msg->attach(Type =>'image/gif',
- Path =>'aaa000123.gif',
- Filename =>'logo.gif'
- );
-
- $text = $msg->as_string;
-
-MIME::Lite also includes a method for sending these things.
-
- $msg->send;
-
-This defaults to using L<sendmail(1)> but can be customized to use
-SMTP via L<Net::SMTP>.
-
-=head2 How do I read mail?
-
-While you could use the Mail::Folder module from CPAN (part of the
-MailFolder package) or the Mail::Internet module from CPAN (also part
-of the MailTools package), often a module is overkill. Here's a
-mail sorter.
-
- #!/usr/bin/perl
- # bysub1 - simple sort by subject
- my(@msgs, @sub);
- my $msgno = -1;
- $/ = ''; # paragraph reads
- while (<>) {
- if (/^From/m) {
- /^Subject:\s*(?:Re:\s*)*(.*)/mi;
- $sub[++$msgno] = lc($1) || '';
- }
- $msgs[$msgno] .= $_;
- }
- for my $i (sort { $sub[$a] cmp $sub[$b] || $a <=> $b } (0 .. $#msgs)) {
- print $msgs[$i];
- }
-
-Or more succinctly,
-
- #!/usr/bin/perl -n00
- # bysub2 - awkish sort-by-subject
- BEGIN { $msgno = -1 }
- $sub[++$msgno] = (/^Subject:\s*(?:Re:\s*)*(.*)/mi)[0] if /^From/m;
- $msg[$msgno] .= $_;
- END { print @msg[ sort { $sub[$a] cmp $sub[$b] || $a <=> $b } (0 .. $#msg) ] }
-
-=head2 How do I find out my hostname/domainname/IP address?
-
-The normal way to find your own hostname is to call the C<`hostname`>
-program. While sometimes expedient, this has some problems, such as
-not knowing whether you've got the canonical name or not. It's one of
-those tradeoffs of convenience versus portability.
-
-The Sys::Hostname module (part of the standard perl distribution) will
-give you the hostname after which you can find out the IP address
-(assuming you have working DNS) with a gethostbyname() call.
-
- use Socket;
- use Sys::Hostname;
- my $host = hostname();
- my $addr = inet_ntoa(scalar gethostbyname($host || 'localhost'));
-
-Probably the simplest way to learn your DNS domain name is to grok
-it out of /etc/resolv.conf, at least under Unix. Of course, this
-assumes several things about your resolv.conf configuration, including
-that it exists.
-
-(We still need a good DNS domain name-learning method for non-Unix
-systems.)
-
-=head2 How do I fetch a news article or the active newsgroups?
-
-Use the Net::NNTP or News::NNTPClient modules, both available from CPAN.
-This can make tasks like fetching the newsgroup list as simple as
-
- perl -MNews::NNTPClient
- -e 'print News::NNTPClient->new->list("newsgroups")'
-
-=head2 How do I fetch/put an FTP file?
-
-LWP::Simple (available from CPAN) can fetch but not put. Net::FTP (also
-available from CPAN) is more complex but can put as well as fetch.
-
-=head2 How can I do RPC in Perl?
-
-A DCE::RPC module is being developed (but is not yet available) and
-will be released as part of the DCE-Perl package (available from
-CPAN). The rpcgen suite, available from CPAN/authors/id/JAKE/, is
-an RPC stub generator and includes an RPC::ONC module.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
-All rights reserved.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work
-may be distributed only under the terms of Perl's Artistic License.
-Any distribution of this file or derivatives thereof I<outside>
-of that package require that special arrangements be made with
-copyright holder.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
diff --git a/contrib/perl5/pod/perlfilter.pod b/contrib/perl5/pod/perlfilter.pod
deleted file mode 100644
index 4327809..0000000
--- a/contrib/perl5/pod/perlfilter.pod
+++ /dev/null
@@ -1,569 +0,0 @@
-=head1 NAME
-
-perlfilter - Source Filters
-
-=head1 DESCRIPTION
-
-This article is about a little-known feature of Perl called
-I<source filters>. Source filters alter the program text of a module
-before Perl sees it, much as a C preprocessor alters the source text of
-a C program before the compiler sees it. This article tells you more
-about what source filters are, how they work, and how to write your
-own.
-
-The original purpose of source filters was to let you encrypt your
-program source to prevent casual piracy. This isn't all they can do, as
-you'll soon learn. But first, the basics.
-
-=head1 CONCEPTS
-
-Before the Perl interpreter can execute a Perl script, it must first
-read it from a file into memory for parsing and compilation. If that
-script itself includes other scripts with a C<use> or C<require>
-statement, then each of those scripts will have to be read from their
-respective files as well.
-
-Now think of each logical connection between the Perl parser and an
-individual file as a I<source stream>. A source stream is created when
-the Perl parser opens a file, it continues to exist as the source code
-is read into memory, and it is destroyed when Perl is finished parsing
-the file. If the parser encounters a C<require> or C<use> statement in
-a source stream, a new and distinct stream is created just for that
-file.
-
-The diagram below represents a single source stream, with the flow of
-source from a Perl script file on the left into the Perl parser on the
-right. This is how Perl normally operates.
-
- file -------> parser
-
-There are two important points to remember:
-
-=over 5
-
-=item 1.
-
-Although there can be any number of source streams in existence at any
-given time, only one will be active.
-
-=item 2.
-
-Every source stream is associated with only one file.
-
-=back
-
-A source filter is a special kind of Perl module that intercepts and
-modifies a source stream before it reaches the parser. A source filter
-changes our diagram like this:
-
- file ----> filter ----> parser
-
-If that doesn't make much sense, consider the analogy of a command
-pipeline. Say you have a shell script stored in the compressed file
-I<trial.gz>. The simple pipeline command below runs the script without
-needing to create a temporary file to hold the uncompressed file.
-
- gunzip -c trial.gz | sh
-
-In this case, the data flow from the pipeline can be represented as follows:
-
- trial.gz ----> gunzip ----> sh
-
-With source filters, you can store the text of your script compressed and use a source filter to uncompress it for Perl's parser:
-
- compressed gunzip
- Perl program ---> source filter ---> parser
-
-=head1 USING FILTERS
-
-So how do you use a source filter in a Perl script? Above, I said that
-a source filter is just a special kind of module. Like all Perl
-modules, a source filter is invoked with a use statement.
-
-Say you want to pass your Perl source through the C preprocessor before
-execution. You could use the existing C<-P> command line option to do
-this, but as it happens, the source filters distribution comes with a C
-preprocessor filter module called Filter::cpp. Let's use that instead.
-
-Below is an example program, C<cpp_test>, which makes use of this filter.
-Line numbers have been added to allow specific lines to be referenced
-easily.
-
- 1: use Filter::cpp ;
- 2: #define TRUE 1
- 3: $a = TRUE ;
- 4: print "a = $a\n" ;
-
-When you execute this script, Perl creates a source stream for the
-file. Before the parser processes any of the lines from the file, the
-source stream looks like this:
-
- cpp_test ---------> parser
-
-Line 1, C<use Filter::cpp>, includes and installs the C<cpp> filter
-module. All source filters work this way. The use statement is compiled
-and executed at compile time, before any more of the file is read, and
-it attaches the cpp filter to the source stream behind the scenes. Now
-the data flow looks like this:
-
- cpp_test ----> cpp filter ----> parser
-
-As the parser reads the second and subsequent lines from the source
-stream, it feeds those lines through the C<cpp> source filter before
-processing them. The C<cpp> filter simply passes each line through the
-real C preprocessor. The output from the C preprocessor is then
-inserted back into the source stream by the filter.
-
- .-> cpp --.
- | |
- | |
- | <-'
- cpp_test ----> cpp filter ----> parser
-
-The parser then sees the following code:
-
- use Filter::cpp ;
- $a = 1 ;
- print "a = $a\n" ;
-
-Let's consider what happens when the filtered code includes another
-module with use:
-
- 1: use Filter::cpp ;
- 2: #define TRUE 1
- 3: use Fred ;
- 4: $a = TRUE ;
- 5: print "a = $a\n" ;
-
-The C<cpp> filter does not apply to the text of the Fred module, only
-to the text of the file that used it (C<cpp_test>). Although the use
-statement on line 3 will pass through the cpp filter, the module that
-gets included (C<Fred>) will not. The source streams look like this
-after line 3 has been parsed and before line 4 is parsed:
-
- cpp_test ---> cpp filter ---> parser (INACTIVE)
-
- Fred.pm ----> parser
-
-As you can see, a new stream has been created for reading the source
-from C<Fred.pm>. This stream will remain active until all of C<Fred.pm>
-has been parsed. The source stream for C<cpp_test> will still exist,
-but is inactive. Once the parser has finished reading Fred.pm, the
-source stream associated with it will be destroyed. The source stream
-for C<cpp_test> then becomes active again and the parser reads line 4
-and subsequent lines from C<cpp_test>.
-
-You can use more than one source filter on a single file. Similarly,
-you can reuse the same filter in as many files as you like.
-
-For example, if you have a uuencoded and compressed source file, it is
-possible to stack a uudecode filter and an uncompression filter like
-this:
-
- use Filter::uudecode ; use Filter::uncompress ;
- M'XL(".H<US4''V9I;F%L')Q;>7/;1I;_>_I3=&E=%:F*I"T?22Q/
- M6]9*<IQCO*XFT"0[PL%%'Y+IG?WN^ZYN-$'J.[.JE$,20/?K=_[>
- ...
-
-Once the first line has been processed, the flow will look like this:
-
- file ---> uudecode ---> uncompress ---> parser
- filter filter
-
-Data flows through filters in the same order they appear in the source
-file. The uudecode filter appeared before the uncompress filter, so the
-source file will be uudecoded before it's uncompressed.
-
-=head1 WRITING A SOURCE FILTER
-
-There are three ways to write your own source filter. You can write it
-in C, use an external program as a filter, or write the filter in Perl.
-I won't cover the first two in any great detail, so I'll get them out
-of the way first. Writing the filter in Perl is most convenient, so
-I'll devote the most space to it.
-
-=head1 WRITING A SOURCE FILTER IN C
-
-The first of the three available techniques is to write the filter
-completely in C. The external module you create interfaces directly
-with the source filter hooks provided by Perl.
-
-The advantage of this technique is that you have complete control over
-the implementation of your filter. The big disadvantage is the
-increased complexity required to write the filter - not only do you
-need to understand the source filter hooks, but you also need a
-reasonable knowledge of Perl guts. One of the few times it is worth
-going to this trouble is when writing a source scrambler. The
-C<decrypt> filter (which unscrambles the source before Perl parses it)
-included with the source filter distribution is an example of a C
-source filter (see Decryption Filters, below).
-
-
-=over 5
-
-=item B<Decryption Filters>
-
-All decryption filters work on the principle of "security through
-obscurity." Regardless of how well you write a decryption filter and
-how strong your encryption algorithm, anyone determined enough can
-retrieve the original source code. The reason is quite simple - once
-the decryption filter has decrypted the source back to its original
-form, fragments of it will be stored in the computer's memory as Perl
-parses it. The source might only be in memory for a short period of
-time, but anyone possessing a debugger, skill, and lots of patience can
-eventually reconstruct your program.
-
-That said, there are a number of steps that can be taken to make life
-difficult for the potential cracker. The most important: Write your
-decryption filter in C and statically link the decryption module into
-the Perl binary. For further tips to make life difficult for the
-potential cracker, see the file I<decrypt.pm> in the source filters
-module.
-
-=back
-
-=head1 CREATING A SOURCE FILTER AS A SEPARATE EXECUTABLE
-
-An alternative to writing the filter in C is to create a separate
-executable in the language of your choice. The separate executable
-reads from standard input, does whatever processing is necessary, and
-writes the filtered data to standard output. C<Filter:cpp> is an
-example of a source filter implemented as a separate executable - the
-executable is the C preprocessor bundled with your C compiler.
-
-The source filter distribution includes two modules that simplify this
-task: C<Filter::exec> and C<Filter::sh>. Both allow you to run any
-external executable. Both use a coprocess to control the flow of data
-into and out of the external executable. (For details on coprocesses,
-see Stephens, W.R. "Advanced Programming in the UNIX Environment."
-Addison-Wesley, ISBN 0-210-56317-7, pages 441-445.) The difference
-between them is that C<Filter::exec> spawns the external command
-directly, while C<Filter::sh> spawns a shell to execute the external
-command. (Unix uses the Bourne shell; NT uses the cmd shell.) Spawning
-a shell allows you to make use of the shell metacharacters and
-redirection facilities.
-
-Here is an example script that uses C<Filter::sh>:
-
- use Filter::sh 'tr XYZ PQR' ;
- $a = 1 ;
- print "XYZ a = $a\n" ;
-
-The output you'll get when the script is executed:
-
- PQR a = 1
-
-Writing a source filter as a separate executable works fine, but a
-small performance penalty is incurred. For example, if you execute the
-small example above, a separate subprocess will be created to run the
-Unix C<tr> command. Each use of the filter requires its own subprocess.
-If creating subprocesses is expensive on your system, you might want to
-consider one of the other options for creating source filters.
-
-=head1 WRITING A SOURCE FILTER IN PERL
-
-The easiest and most portable option available for creating your own
-source filter is to write it completely in Perl. To distinguish this
-from the previous two techniques, I'll call it a Perl source filter.
-
-To help understand how to write a Perl source filter we need an example
-to study. Here is a complete source filter that performs rot13
-decoding. (Rot13 is a very simple encryption scheme used in Usenet
-postings to hide the contents of offensive posts. It moves every letter
-forward thirteen places, so that A becomes N, B becomes O, and Z
-becomes M.)
-
-
- package Rot13 ;
-
- use Filter::Util::Call ;
-
- sub import {
- my ($type) = @_ ;
- my ($ref) = [] ;
- filter_add(bless $ref) ;
- }
-
- sub filter {
- my ($self) = @_ ;
- my ($status) ;
-
- tr/n-za-mN-ZA-M/a-zA-Z/
- if ($status = filter_read()) > 0 ;
- $status ;
- }
-
- 1;
-
-All Perl source filters are implemented as Perl classes and have the
-same basic structure as the example above.
-
-First, we include the C<Filter::Util::Call> module, which exports a
-number of functions into your filter's namespace. The filter shown
-above uses two of these functions, C<filter_add()> and
-C<filter_read()>.
-
-Next, we create the filter object and associate it with the source
-stream by defining the C<import> function. If you know Perl well
-enough, you know that C<import> is called automatically every time a
-module is included with a use statement. This makes C<import> the ideal
-place to both create and install a filter object.
-
-In the example filter, the object (C<$ref>) is blessed just like any
-other Perl object. Our example uses an anonymous array, but this isn't
-a requirement. Because this example doesn't need to store any context
-information, we could have used a scalar or hash reference just as
-well. The next section demonstrates context data.
-
-The association between the filter object and the source stream is made
-with the C<filter_add()> function. This takes a filter object as a
-parameter (C<$ref> in this case) and installs it in the source stream.
-
-Finally, there is the code that actually does the filtering. For this
-type of Perl source filter, all the filtering is done in a method
-called C<filter()>. (It is also possible to write a Perl source filter
-using a closure. See the C<Filter::Util::Call> manual page for more
-details.) It's called every time the Perl parser needs another line of
-source to process. The C<filter()> method, in turn, reads lines from
-the source stream using the C<filter_read()> function.
-
-If a line was available from the source stream, C<filter_read()>
-returns a status value greater than zero and appends the line to C<$_>.
-A status value of zero indicates end-of-file, less than zero means an
-error. The filter function itself is expected to return its status in
-the same way, and put the filtered line it wants written to the source
-stream in C<$_>. The use of C<$_> accounts for the brevity of most Perl
-source filters.
-
-In order to make use of the rot13 filter we need some way of encoding
-the source file in rot13 format. The script below, C<mkrot13>, does
-just that.
-
- die "usage mkrot13 filename\n" unless @ARGV ;
- my $in = $ARGV[0] ;
- my $out = "$in.tmp" ;
- open(IN, "<$in") or die "Cannot open file $in: $!\n";
- open(OUT, ">$out") or die "Cannot open file $out: $!\n";
-
- print OUT "use Rot13;\n" ;
- while (<IN>) {
- tr/a-zA-Z/n-za-mN-ZA-M/ ;
- print OUT ;
- }
-
- close IN;
- close OUT;
- unlink $in;
- rename $out, $in;
-
-If we encrypt this with C<mkrot13>:
-
- print " hello fred \n" ;
-
-the result will be this:
-
- use Rot13;
- cevag "uryyb serq\a" ;
-
-Running it produces this output:
-
- hello fred
-
-=head1 USING CONTEXT: THE DEBUG FILTER
-
-The rot13 example was a trivial example. Here's another demonstration
-that shows off a few more features.
-
-Say you wanted to include a lot of debugging code in your Perl script
-during development, but you didn't want it available in the released
-product. Source filters offer a solution. In order to keep the example
-simple, let's say you wanted the debugging output to be controlled by
-an environment variable, C<DEBUG>. Debugging code is enabled if the
-variable exists, otherwise it is disabled.
-
-Two special marker lines will bracket debugging code, like this:
-
- ## DEBUG_BEGIN
- if ($year > 1999) {
- warn "Debug: millennium bug in year $year\n" ;
- }
- ## DEBUG_END
-
-When the C<DEBUG> environment variable exists, the filter ensures that
-Perl parses only the code between the C<DEBUG_BEGIN> and C<DEBUG_END>
-markers. That means that when C<DEBUG> does exist, the code above
-should be passed through the filter unchanged. The marker lines can
-also be passed through as-is, because the Perl parser will see them as
-comment lines. When C<DEBUG> isn't set, we need a way to disable the
-debug code. A simple way to achieve that is to convert the lines
-between the two markers into comments:
-
- ## DEBUG_BEGIN
- #if ($year > 1999) {
- # warn "Debug: millennium bug in year $year\n" ;
- #}
- ## DEBUG_END
-
-Here is the complete Debug filter:
-
- package Debug;
-
- use strict;
- use warnings;
- use Filter::Util::Call ;
-
- use constant TRUE => 1 ;
- use constant FALSE => 0 ;
-
- sub import {
- my ($type) = @_ ;
- my (%context) = (
- Enabled => defined $ENV{DEBUG},
- InTraceBlock => FALSE,
- Filename => (caller)[1],
- LineNo => 0,
- LastBegin => 0,
- ) ;
- filter_add(bless \%context) ;
- }
-
- sub Die {
- my ($self) = shift ;
- my ($message) = shift ;
- my ($line_no) = shift || $self->{LastBegin} ;
- die "$message at $self->{Filename} line $line_no.\n"
- }
-
- sub filter {
- my ($self) = @_ ;
- my ($status) ;
- $status = filter_read() ;
- ++ $self->{LineNo} ;
-
- # deal with EOF/error first
- if ($status <= 0) {
- $self->Die("DEBUG_BEGIN has no DEBUG_END")
- if $self->{InTraceBlock} ;
- return $status ;
- }
-
- if ($self->{InTraceBlock}) {
- if (/^\s*##\s*DEBUG_BEGIN/ ) {
- $self->Die("Nested DEBUG_BEGIN", $self->{LineNo})
- } elsif (/^\s*##\s*DEBUG_END/) {
- $self->{InTraceBlock} = FALSE ;
- }
-
- # comment out the debug lines when the filter is disabled
- s/^/#/ if ! $self->{Enabled} ;
- } elsif ( /^\s*##\s*DEBUG_BEGIN/ ) {
- $self->{InTraceBlock} = TRUE ;
- $self->{LastBegin} = $self->{LineNo} ;
- } elsif ( /^\s*##\s*DEBUG_END/ ) {
- $self->Die("DEBUG_END has no DEBUG_BEGIN", $self->{LineNo});
- }
- return $status ;
- }
-
- 1 ;
-
-The big difference between this filter and the previous example is the
-use of context data in the filter object. The filter object is based on
-a hash reference, and is used to keep various pieces of context
-information between calls to the filter function. All but two of the
-hash fields are used for error reporting. The first of those two,
-Enabled, is used by the filter to determine whether the debugging code
-should be given to the Perl parser. The second, InTraceBlock, is true
-when the filter has encountered a C<DEBUG_BEGIN> line, but has not yet
-encountered the following C<DEBUG_END> line.
-
-If you ignore all the error checking that most of the code does, the
-essence of the filter is as follows:
-
- sub filter {
- my ($self) = @_ ;
- my ($status) ;
- $status = filter_read() ;
-
- # deal with EOF/error first
- return $status if $status <= 0 ;
- if ($self->{InTraceBlock}) {
- if (/^\s*##\s*DEBUG_END/) {
- $self->{InTraceBlock} = FALSE
- }
-
- # comment out debug lines when the filter is disabled
- s/^/#/ if ! $self->{Enabled} ;
- } elsif ( /^\s*##\s*DEBUG_BEGIN/ ) {
- $self->{InTraceBlock} = TRUE ;
- }
- return $status ;
- }
-
-Be warned: just as the C-preprocessor doesn't know C, the Debug filter
-doesn't know Perl. It can be fooled quite easily:
-
- print <<EOM;
- ##DEBUG_BEGIN
- EOM
-
-Such things aside, you can see that a lot can be achieved with a modest
-amount of code.
-
-=head1 CONCLUSION
-
-You now have better understanding of what a source filter is, and you
-might even have a possible use for them. If you feel like playing with
-source filters but need a bit of inspiration, here are some extra
-features you could add to the Debug filter.
-
-First, an easy one. Rather than having debugging code that is
-all-or-nothing, it would be much more useful to be able to control
-which specific blocks of debugging code get included. Try extending the
-syntax for debug blocks to allow each to be identified. The contents of
-the C<DEBUG> environment variable can then be used to control which
-blocks get included.
-
-Once you can identify individual blocks, try allowing them to be
-nested. That isn't difficult either.
-
-Here is a interesting idea that doesn't involve the Debug filter.
-Currently Perl subroutines have fairly limited support for formal
-parameter lists. You can specify the number of parameters and their
-type, but you still have to manually take them out of the C<@_> array
-yourself. Write a source filter that allows you to have a named
-parameter list. Such a filter would turn this:
-
- sub MySub ($first, $second, @rest) { ... }
-
-into this:
-
- sub MySub($$@) {
- my ($first) = shift ;
- my ($second) = shift ;
- my (@rest) = @_ ;
- ...
- }
-
-Finally, if you feel like a real challenge, have a go at writing a
-full-blown Perl macro preprocessor as a source filter. Borrow the
-useful features from the C preprocessor and any other macro processors
-you know. The tricky bit will be choosing how much knowledge of Perl's
-syntax you want your filter to have.
-
-=head1 REQUIREMENTS
-
-The Source Filters distribution is available on CPAN, in
-
- CPAN/modules/by-module/Filter
-
-=head1 AUTHOR
-
-Paul Marquess E<lt>Paul.Marquess@btinternet.comE<gt>
-
-=head1 Copyrights
-
-This article originally appeared in The Perl Journal #11, and is
-copyright 1998 The Perl Journal. It appears courtesy of Jon Orwant and
-The Perl Journal. This document may be distributed under the same terms
-as Perl itself.
diff --git a/contrib/perl5/pod/perlfork.pod b/contrib/perl5/pod/perlfork.pod
deleted file mode 100644
index dc0a82b..0000000
--- a/contrib/perl5/pod/perlfork.pod
+++ /dev/null
@@ -1,317 +0,0 @@
-=head1 NAME
-
-perlfork - Perl's fork() emulation (EXPERIMENTAL, subject to change)
-
-=head1 SYNOPSIS
-
- WARNING: As of the 5.6.1 release, the fork() emulation continues
- to be an experimental feature. Use in production applications is
- not recommended. See the "BUGS" and "CAVEATS AND LIMITATIONS"
- sections below.
-
-Perl provides a fork() keyword that corresponds to the Unix system call
-of the same name. On most Unix-like platforms where the fork() system
-call is available, Perl's fork() simply calls it.
-
-On some platforms such as Windows where the fork() system call is not
-available, Perl can be built to emulate fork() at the interpreter level.
-While the emulation is designed to be as compatible as possible with the
-real fork() at the level of the Perl program, there are certain
-important differences that stem from the fact that all the pseudo child
-"processes" created this way live in the same real process as far as the
-operating system is concerned.
-
-This document provides a general overview of the capabilities and
-limitations of the fork() emulation. Note that the issues discussed here
-are not applicable to platforms where a real fork() is available and Perl
-has been configured to use it.
-
-=head1 DESCRIPTION
-
-The fork() emulation is implemented at the level of the Perl interpreter.
-What this means in general is that running fork() will actually clone the
-running interpreter and all its state, and run the cloned interpreter in
-a separate thread, beginning execution in the new thread just after the
-point where the fork() was called in the parent. We will refer to the
-thread that implements this child "process" as the pseudo-process.
-
-To the Perl program that called fork(), all this is designed to be
-transparent. The parent returns from the fork() with a pseudo-process
-ID that can be subsequently used in any process manipulation functions;
-the child returns from the fork() with a value of C<0> to signify that
-it is the child pseudo-process.
-
-=head2 Behavior of other Perl features in forked pseudo-processes
-
-Most Perl features behave in a natural way within pseudo-processes.
-
-=over 8
-
-=item $$ or $PROCESS_ID
-
-This special variable is correctly set to the pseudo-process ID.
-It can be used to identify pseudo-processes within a particular
-session. Note that this value is subject to recycling if any
-pseudo-processes are launched after others have been wait()-ed on.
-
-=item %ENV
-
-Each pseudo-process maintains its own virtual environment. Modifications
-to %ENV affect the virtual environment, and are only visible within that
-pseudo-process, and in any processes (or pseudo-processes) launched from
-it.
-
-=item chdir() and all other builtins that accept filenames
-
-Each pseudo-process maintains its own virtual idea of the current directory.
-Modifications to the current directory using chdir() are only visible within
-that pseudo-process, and in any processes (or pseudo-processes) launched from
-it. All file and directory accesses from the pseudo-process will correctly
-map the virtual working directory to the real working directory appropriately.
-
-=item wait() and waitpid()
-
-wait() and waitpid() can be passed a pseudo-process ID returned by fork().
-These calls will properly wait for the termination of the pseudo-process
-and return its status.
-
-=item kill()
-
-kill() can be used to terminate a pseudo-process by passing it the ID returned
-by fork(). This should not be used except under dire circumstances, because
-the operating system may not guarantee integrity of the process resources
-when a running thread is terminated. Note that using kill() on a
-pseudo-process() may typically cause memory leaks, because the thread that
-implements the pseudo-process does not get a chance to clean up its resources.
-
-=item exec()
-
-Calling exec() within a pseudo-process actually spawns the requested
-executable in a separate process and waits for it to complete before
-exiting with the same exit status as that process. This means that the
-process ID reported within the running executable will be different from
-what the earlier Perl fork() might have returned. Similarly, any process
-manipulation functions applied to the ID returned by fork() will affect the
-waiting pseudo-process that called exec(), not the real process it is
-waiting for after the exec().
-
-=item exit()
-
-exit() always exits just the executing pseudo-process, after automatically
-wait()-ing for any outstanding child pseudo-processes. Note that this means
-that the process as a whole will not exit unless all running pseudo-processes
-have exited.
-
-=item Open handles to files, directories and network sockets
-
-All open handles are dup()-ed in pseudo-processes, so that closing
-any handles in one process does not affect the others. See below for
-some limitations.
-
-=back
-
-=head2 Resource limits
-
-In the eyes of the operating system, pseudo-processes created via the fork()
-emulation are simply threads in the same process. This means that any
-process-level limits imposed by the operating system apply to all
-pseudo-processes taken together. This includes any limits imposed by the
-operating system on the number of open file, directory and socket handles,
-limits on disk space usage, limits on memory size, limits on CPU utilization
-etc.
-
-=head2 Killing the parent process
-
-If the parent process is killed (either using Perl's kill() builtin, or
-using some external means) all the pseudo-processes are killed as well,
-and the whole process exits.
-
-=head2 Lifetime of the parent process and pseudo-processes
-
-During the normal course of events, the parent process and every
-pseudo-process started by it will wait for their respective pseudo-children
-to complete before they exit. This means that the parent and every
-pseudo-child created by it that is also a pseudo-parent will only exit
-after their pseudo-children have exited.
-
-A way to mark a pseudo-processes as running detached from their parent (so
-that the parent would not have to wait() for them if it doesn't want to)
-will be provided in future.
-
-=head2 CAVEATS AND LIMITATIONS
-
-=over 8
-
-=item BEGIN blocks
-
-The fork() emulation will not work entirely correctly when called from
-within a BEGIN block. The forked copy will run the contents of the
-BEGIN block, but will not continue parsing the source stream after the
-BEGIN block. For example, consider the following code:
-
- BEGIN {
- fork and exit; # fork child and exit the parent
- print "inner\n";
- }
- print "outer\n";
-
-This will print:
-
- inner
-
-rather than the expected:
-
- inner
- outer
-
-This limitation arises from fundamental technical difficulties in
-cloning and restarting the stacks used by the Perl parser in the
-middle of a parse.
-
-=item Open filehandles
-
-Any filehandles open at the time of the fork() will be dup()-ed. Thus,
-the files can be closed independently in the parent and child, but beware
-that the dup()-ed handles will still share the same seek pointer. Changing
-the seek position in the parent will change it in the child and vice-versa.
-One can avoid this by opening files that need distinct seek pointers
-separately in the child.
-
-=item Forking pipe open() not yet implemented
-
-The C<open(FOO, "|-")> and C<open(BAR, "-|")> constructs are not yet
-implemented. This limitation can be easily worked around in new code
-by creating a pipe explicitly. The following example shows how to
-write to a forked child:
-
- # simulate open(FOO, "|-")
- sub pipe_to_fork ($) {
- my $parent = shift;
- pipe my $child, $parent or die;
- my $pid = fork();
- die "fork() failed: $!" unless defined $pid;
- if ($pid) {
- close $child;
- }
- else {
- close $parent;
- open(STDIN, "<&=" . fileno($child)) or die;
- }
- $pid;
- }
-
- if (pipe_to_fork('FOO')) {
- # parent
- print FOO "pipe_to_fork\n";
- close FOO;
- }
- else {
- # child
- while (<STDIN>) { print; }
- close STDIN;
- exit(0);
- }
-
-And this one reads from the child:
-
- # simulate open(FOO, "-|")
- sub pipe_from_fork ($) {
- my $parent = shift;
- pipe $parent, my $child or die;
- my $pid = fork();
- die "fork() failed: $!" unless defined $pid;
- if ($pid) {
- close $child;
- }
- else {
- close $parent;
- open(STDOUT, ">&=" . fileno($child)) or die;
- }
- $pid;
- }
-
- if (pipe_from_fork('BAR')) {
- # parent
- while (<BAR>) { print; }
- close BAR;
- }
- else {
- # child
- print "pipe_from_fork\n";
- close STDOUT;
- exit(0);
- }
-
-Forking pipe open() constructs will be supported in future.
-
-=item Global state maintained by XSUBs
-
-External subroutines (XSUBs) that maintain their own global state may
-not work correctly. Such XSUBs will either need to maintain locks to
-protect simultaneous access to global data from different pseudo-processes,
-or maintain all their state on the Perl symbol table, which is copied
-naturally when fork() is called. A callback mechanism that provides
-extensions an opportunity to clone their state will be provided in the
-near future.
-
-=item Interpreter embedded in larger application
-
-The fork() emulation may not behave as expected when it is executed in an
-application which embeds a Perl interpreter and calls Perl APIs that can
-evaluate bits of Perl code. This stems from the fact that the emulation
-only has knowledge about the Perl interpreter's own data structures and
-knows nothing about the containing application's state. For example, any
-state carried on the application's own call stack is out of reach.
-
-=item Thread-safety of extensions
-
-Since the fork() emulation runs code in multiple threads, extensions
-calling into non-thread-safe libraries may not work reliably when
-calling fork(). As Perl's threading support gradually becomes more
-widely adopted even on platforms with a native fork(), such extensions
-are expected to be fixed for thread-safety.
-
-=back
-
-=head1 BUGS
-
-=over 8
-
-=item *
-
-Perl's regular expression engine currently does not play very nicely
-with the fork() emulation. There are known race conditions arising
-from the regular expression engine modifying state carried in the opcode
-tree at run time (the fork() emulation relies on the opcode tree being
-immutable). This typically happens when the regex contains paren groups
-or variables interpolated within it that force a run time recompilation
-of the regex. Due to this major bug, the fork() emulation is not
-recommended for use in production applications at this time.
-
-=item *
-
-Having pseudo-process IDs be negative integers breaks down for the integer
-C<-1> because the wait() and waitpid() functions treat this number as
-being special. The tacit assumption in the current implementation is that
-the system never allocates a thread ID of C<1> for user threads. A better
-representation for pseudo-process IDs will be implemented in future.
-
-=item *
-
-This document may be incomplete in some respects.
-
-=back
-
-=head1 AUTHOR
-
-Support for concurrent interpreters and the fork() emulation was implemented
-by ActiveState, with funding from Microsoft Corporation.
-
-This document is authored and maintained by Gurusamy Sarathy
-E<lt>gsar@activestate.comE<gt>.
-
-=head1 SEE ALSO
-
-L<perlfunc/"fork">, L<perlipc>
-
-=cut
diff --git a/contrib/perl5/pod/perlform.pod b/contrib/perl5/pod/perlform.pod
deleted file mode 100644
index b2c87fa..0000000
--- a/contrib/perl5/pod/perlform.pod
+++ /dev/null
@@ -1,346 +0,0 @@
-=head1 NAME
-
-perlform - Perl formats
-
-=head1 DESCRIPTION
-
-Perl has a mechanism to help you generate simple reports and charts. To
-facilitate this, Perl helps you code up your output page close to how it
-will look when it's printed. It can keep track of things like how many
-lines are on a page, what page you're on, when to print page headers,
-etc. Keywords are borrowed from FORTRAN: format() to declare and write()
-to execute; see their entries in L<perlfunc>. Fortunately, the layout is
-much more legible, more like BASIC's PRINT USING statement. Think of it
-as a poor man's nroff(1).
-
-Formats, like packages and subroutines, are declared rather than
-executed, so they may occur at any point in your program. (Usually it's
-best to keep them all together though.) They have their own namespace
-apart from all the other "types" in Perl. This means that if you have a
-function named "Foo", it is not the same thing as having a format named
-"Foo". However, the default name for the format associated with a given
-filehandle is the same as the name of the filehandle. Thus, the default
-format for STDOUT is named "STDOUT", and the default format for filehandle
-TEMP is named "TEMP". They just look the same. They aren't.
-
-Output record formats are declared as follows:
-
- format NAME =
- FORMLIST
- .
-
-If name is omitted, format "STDOUT" is defined. FORMLIST consists of
-a sequence of lines, each of which may be one of three types:
-
-=over 4
-
-=item 1.
-
-A comment, indicated by putting a '#' in the first column.
-
-=item 2.
-
-A "picture" line giving the format for one output line.
-
-=item 3.
-
-An argument line supplying values to plug into the previous picture line.
-
-=back
-
-Picture lines are printed exactly as they look, except for certain fields
-that substitute values into the line. Each field in a picture line starts
-with either "@" (at) or "^" (caret). These lines do not undergo any kind
-of variable interpolation. The at field (not to be confused with the array
-marker @) is the normal kind of field; the other kind, caret fields, are used
-to do rudimentary multi-line text block filling. The length of the field
-is supplied by padding out the field with multiple "E<lt>", "E<gt>", or "|"
-characters to specify, respectively, left justification, right
-justification, or centering. If the variable would exceed the width
-specified, it is truncated.
-
-As an alternate form of right justification, you may also use "#"
-characters (with an optional ".") to specify a numeric field. This way
-you can line up the decimal points. If any value supplied for these
-fields contains a newline, only the text up to the newline is printed.
-Finally, the special field "@*" can be used for printing multi-line,
-nontruncated values; it should appear by itself on a line.
-
-The values are specified on the following line in the same order as
-the picture fields. The expressions providing the values should be
-separated by commas. The expressions are all evaluated in a list context
-before the line is processed, so a single list expression could produce
-multiple list elements. The expressions may be spread out to more than
-one line if enclosed in braces. If so, the opening brace must be the first
-token on the first line. If an expression evaluates to a number with a
-decimal part, and if the corresponding picture specifies that the decimal
-part should appear in the output (that is, any picture except multiple "#"
-characters B<without> an embedded "."), the character used for the decimal
-point is B<always> determined by the current LC_NUMERIC locale. This
-means that, if, for example, the run-time environment happens to specify a
-German locale, "," will be used instead of the default ".". See
-L<perllocale> and L<"WARNINGS"> for more information.
-
-Picture fields that begin with ^ rather than @ are treated specially.
-With a # field, the field is blanked out if the value is undefined. For
-other field types, the caret enables a kind of fill mode. Instead of an
-arbitrary expression, the value supplied must be a scalar variable name
-that contains a text string. Perl puts as much text as it can into the
-field, and then chops off the front of the string so that the next time
-the variable is referenced, more of the text can be printed. (Yes, this
-means that the variable itself is altered during execution of the write()
-call, and is not returned.) Normally you would use a sequence of fields
-in a vertical stack to print out a block of text. You might wish to end
-the final field with the text "...", which will appear in the output if
-the text was too long to appear in its entirety. You can change which
-characters are legal to break on by changing the variable C<$:> (that's
-$FORMAT_LINE_BREAK_CHARACTERS if you're using the English module) to a
-list of the desired characters.
-
-Using caret fields can produce variable length records. If the text
-to be formatted is short, you can suppress blank lines by putting a
-"~" (tilde) character anywhere in the line. The tilde will be translated
-to a space upon output. If you put a second tilde contiguous to the
-first, the line will be repeated until all the fields on the line are
-exhausted. (If you use a field of the at variety, the expression you
-supply had better not give the same value every time forever!)
-
-Top-of-form processing is by default handled by a format with the
-same name as the current filehandle with "_TOP" concatenated to it.
-It's triggered at the top of each page. See L<perlfunc/write>.
-
-Examples:
-
- # a report on the /etc/passwd file
- format STDOUT_TOP =
- Passwd File
- Name Login Office Uid Gid Home
- ------------------------------------------------------------------
- .
- format STDOUT =
- @<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<<
- $name, $login, $office,$uid,$gid, $home
- .
-
-
- # a report from a bug report form
- format STDOUT_TOP =
- Bug Reports
- @<<<<<<<<<<<<<<<<<<<<<<< @||| @>>>>>>>>>>>>>>>>>>>>>>>
- $system, $%, $date
- ------------------------------------------------------------------
- .
- format STDOUT =
- Subject: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $subject
- Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $index, $description
- Priority: @<<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $priority, $date, $description
- From: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $from, $description
- Assigned to: @<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $programmer, $description
- ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $description
- ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $description
- ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $description
- ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $description
- ~ ^<<<<<<<<<<<<<<<<<<<<<<<...
- $description
- .
-
-It is possible to intermix print()s with write()s on the same output
-channel, but you'll have to handle C<$-> (C<$FORMAT_LINES_LEFT>)
-yourself.
-
-=head2 Format Variables
-
-The current format name is stored in the variable C<$~> (C<$FORMAT_NAME>),
-and the current top of form format name is in C<$^> (C<$FORMAT_TOP_NAME>).
-The current output page number is stored in C<$%> (C<$FORMAT_PAGE_NUMBER>),
-and the number of lines on the page is in C<$=> (C<$FORMAT_LINES_PER_PAGE>).
-Whether to autoflush output on this handle is stored in C<$|>
-(C<$OUTPUT_AUTOFLUSH>). The string output before each top of page (except
-the first) is stored in C<$^L> (C<$FORMAT_FORMFEED>). These variables are
-set on a per-filehandle basis, so you'll need to select() into a different
-one to affect them:
-
- select((select(OUTF),
- $~ = "My_Other_Format",
- $^ = "My_Top_Format"
- )[0]);
-
-Pretty ugly, eh? It's a common idiom though, so don't be too surprised
-when you see it. You can at least use a temporary variable to hold
-the previous filehandle: (this is a much better approach in general,
-because not only does legibility improve, you now have intermediary
-stage in the expression to single-step the debugger through):
-
- $ofh = select(OUTF);
- $~ = "My_Other_Format";
- $^ = "My_Top_Format";
- select($ofh);
-
-If you use the English module, you can even read the variable names:
-
- use English;
- $ofh = select(OUTF);
- $FORMAT_NAME = "My_Other_Format";
- $FORMAT_TOP_NAME = "My_Top_Format";
- select($ofh);
-
-But you still have those funny select()s. So just use the FileHandle
-module. Now, you can access these special variables using lowercase
-method names instead:
-
- use FileHandle;
- format_name OUTF "My_Other_Format";
- format_top_name OUTF "My_Top_Format";
-
-Much better!
-
-=head1 NOTES
-
-Because the values line may contain arbitrary expressions (for at fields,
-not caret fields), you can farm out more sophisticated processing
-to other functions, like sprintf() or one of your own. For example:
-
- format Ident =
- @<<<<<<<<<<<<<<<
- &commify($n)
- .
-
-To get a real at or caret into the field, do this:
-
- format Ident =
- I have an @ here.
- "@"
- .
-
-To center a whole line of text, do something like this:
-
- format Ident =
- @|||||||||||||||||||||||||||||||||||||||||||||||
- "Some text line"
- .
-
-There is no builtin way to say "float this to the right hand side
-of the page, however wide it is." You have to specify where it goes.
-The truly desperate can generate their own format on the fly, based
-on the current number of columns, and then eval() it:
-
- $format = "format STDOUT = \n"
- . '^' . '<' x $cols . "\n"
- . '$entry' . "\n"
- . "\t^" . "<" x ($cols-8) . "~~\n"
- . '$entry' . "\n"
- . ".\n";
- print $format if $Debugging;
- eval $format;
- die $@ if $@;
-
-Which would generate a format looking something like this:
-
- format STDOUT =
- ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- $entry
- ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
- $entry
- .
-
-Here's a little program that's somewhat like fmt(1):
-
- format =
- ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
- $_
-
- .
-
- $/ = '';
- while (<>) {
- s/\s*\n\s*/ /g;
- write;
- }
-
-=head2 Footers
-
-While $FORMAT_TOP_NAME contains the name of the current header format,
-there is no corresponding mechanism to automatically do the same thing
-for a footer. Not knowing how big a format is going to be until you
-evaluate it is one of the major problems. It's on the TODO list.
-
-Here's one strategy: If you have a fixed-size footer, you can get footers
-by checking $FORMAT_LINES_LEFT before each write() and print the footer
-yourself if necessary.
-
-Here's another strategy: Open a pipe to yourself, using C<open(MYSELF, "|-")>
-(see L<perlfunc/open()>) and always write() to MYSELF instead of STDOUT.
-Have your child process massage its STDIN to rearrange headers and footers
-however you like. Not very convenient, but doable.
-
-=head2 Accessing Formatting Internals
-
-For low-level access to the formatting mechanism. you may use formline()
-and access C<$^A> (the $ACCUMULATOR variable) directly.
-
-For example:
-
- $str = formline <<'END', 1,2,3;
- @<<< @||| @>>>
- END
-
- print "Wow, I just stored `$^A' in the accumulator!\n";
-
-Or to make an swrite() subroutine, which is to write() what sprintf()
-is to printf(), do this:
-
- use Carp;
- sub swrite {
- croak "usage: swrite PICTURE ARGS" unless @_;
- my $format = shift;
- $^A = "";
- formline($format,@_);
- return $^A;
- }
-
- $string = swrite(<<'END', 1, 2, 3);
- Check me out
- @<<< @||| @>>>
- END
- print $string;
-
-=head1 WARNINGS
-
-The lone dot that ends a format can also prematurely end a mail
-message passing through a misconfigured Internet mailer (and based on
-experience, such misconfiguration is the rule, not the exception). So
-when sending format code through mail, you should indent it so that
-the format-ending dot is not on the left margin; this will prevent
-SMTP cutoff.
-
-Lexical variables (declared with "my") are not visible within a
-format unless the format is declared within the scope of the lexical
-variable. (They weren't visible at all before version 5.001.)
-
-Formats are the only part of Perl that unconditionally use information
-from a program's locale; if a program's environment specifies an
-LC_NUMERIC locale, it is always used to specify the decimal point
-character in formatted output. Perl ignores all other aspects of locale
-handling unless the C<use locale> pragma is in effect. Formatted output
-cannot be controlled by C<use locale> because the pragma is tied to the
-block structure of the program, and, for historical reasons, formats
-exist outside that block structure. See L<perllocale> for further
-discussion of locale handling.
-
-Inside of an expression, the whitespace characters \n, \t and \f are
-considered to be equivalent to a single space. Thus, you could think
-of this filter being applied to each value in the format:
-
- $value =~ tr/\n\t\f/ /;
-
-The remaining whitespace character, \r, forces the printing of a new
-line if allowed by the picture line.
diff --git a/contrib/perl5/pod/perlfunc.pod b/contrib/perl5/pod/perlfunc.pod
deleted file mode 100644
index e959abc..0000000
--- a/contrib/perl5/pod/perlfunc.pod
+++ /dev/null
@@ -1,5885 +0,0 @@
-=head1 NAME
-
-perlfunc - Perl builtin functions
-
-=head1 DESCRIPTION
-
-The functions in this section can serve as terms in an expression.
-They fall into two major categories: list operators and named unary
-operators. These differ in their precedence relationship with a
-following comma. (See the precedence table in L<perlop>.) List
-operators take more than one argument, while unary operators can never
-take more than one argument. Thus, a comma terminates the argument of
-a unary operator, but merely separates the arguments of a list
-operator. A unary operator generally provides a scalar context to its
-argument, while a list operator may provide either scalar or list
-contexts for its arguments. If it does both, the scalar arguments will
-be first, and the list argument will follow. (Note that there can ever
-be only one such list argument.) For instance, splice() has three scalar
-arguments followed by a list, whereas gethostbyname() has four scalar
-arguments.
-
-In the syntax descriptions that follow, list operators that expect a
-list (and provide list context for the elements of the list) are shown
-with LIST as an argument. Such a list may consist of any combination
-of scalar arguments or list values; the list values will be included
-in the list as if each individual element were interpolated at that
-point in the list, forming a longer single-dimensional list value.
-Elements of the LIST should be separated by commas.
-
-Any function in the list below may be used either with or without
-parentheses around its arguments. (The syntax descriptions omit the
-parentheses.) If you use the parentheses, the simple (but occasionally
-surprising) rule is this: It I<looks> like a function, therefore it I<is> a
-function, and precedence doesn't matter. Otherwise it's a list
-operator or unary operator, and precedence does matter. And whitespace
-between the function and left parenthesis doesn't count--so you need to
-be careful sometimes:
-
- print 1+2+4; # Prints 7.
- print(1+2) + 4; # Prints 3.
- print (1+2)+4; # Also prints 3!
- print +(1+2)+4; # Prints 7.
- print ((1+2)+4); # Prints 7.
-
-If you run Perl with the B<-w> switch it can warn you about this. For
-example, the third line above produces:
-
- print (...) interpreted as function at - line 1.
- Useless use of integer addition in void context at - line 1.
-
-A few functions take no arguments at all, and therefore work as neither
-unary nor list operators. These include such functions as C<time>
-and C<endpwent>. For example, C<time+86_400> always means
-C<time() + 86_400>.
-
-For functions that can be used in either a scalar or list context,
-nonabortive failure is generally indicated in a scalar context by
-returning the undefined value, and in a list context by returning the
-null list.
-
-Remember the following important rule: There is B<no rule> that relates
-the behavior of an expression in list context to its behavior in scalar
-context, or vice versa. It might do two totally different things.
-Each operator and function decides which sort of value it would be most
-appropriate to return in scalar context. Some operators return the
-length of the list that would have been returned in list context. Some
-operators return the first value in the list. Some operators return the
-last value in the list. Some operators return a count of successful
-operations. In general, they do what you want, unless you want
-consistency.
-
-An named array in scalar context is quite different from what would at
-first glance appear to be a list in scalar context. You can't get a list
-like C<(1,2,3)> into being in scalar context, because the compiler knows
-the context at compile time. It would generate the scalar comma operator
-there, not the list construction version of the comma. That means it
-was never a list to start with.
-
-In general, functions in Perl that serve as wrappers for system calls
-of the same name (like chown(2), fork(2), closedir(2), etc.) all return
-true when they succeed and C<undef> otherwise, as is usually mentioned
-in the descriptions below. This is different from the C interfaces,
-which return C<-1> on failure. Exceptions to this rule are C<wait>,
-C<waitpid>, and C<syscall>. System calls also set the special C<$!>
-variable on failure. Other functions do not, except accidentally.
-
-=head2 Perl Functions by Category
-
-Here are Perl's functions (including things that look like
-functions, like some keywords and named operators)
-arranged by category. Some functions appear in more
-than one place.
-
-=over 4
-
-=item Functions for SCALARs or strings
-
-C<chomp>, C<chop>, C<chr>, C<crypt>, C<hex>, C<index>, C<lc>, C<lcfirst>,
-C<length>, C<oct>, C<ord>, C<pack>, C<q/STRING/>, C<qq/STRING/>, C<reverse>,
-C<rindex>, C<sprintf>, C<substr>, C<tr///>, C<uc>, C<ucfirst>, C<y///>
-
-=item Regular expressions and pattern matching
-
-C<m//>, C<pos>, C<quotemeta>, C<s///>, C<split>, C<study>, C<qr//>
-
-=item Numeric functions
-
-C<abs>, C<atan2>, C<cos>, C<exp>, C<hex>, C<int>, C<log>, C<oct>, C<rand>,
-C<sin>, C<sqrt>, C<srand>
-
-=item Functions for real @ARRAYs
-
-C<pop>, C<push>, C<shift>, C<splice>, C<unshift>
-
-=item Functions for list data
-
-C<grep>, C<join>, C<map>, C<qw/STRING/>, C<reverse>, C<sort>, C<unpack>
-
-=item Functions for real %HASHes
-
-C<delete>, C<each>, C<exists>, C<keys>, C<values>
-
-=item Input and output functions
-
-C<binmode>, C<close>, C<closedir>, C<dbmclose>, C<dbmopen>, C<die>, C<eof>,
-C<fileno>, C<flock>, C<format>, C<getc>, C<print>, C<printf>, C<read>,
-C<readdir>, C<rewinddir>, C<seek>, C<seekdir>, C<select>, C<syscall>,
-C<sysread>, C<sysseek>, C<syswrite>, C<tell>, C<telldir>, C<truncate>,
-C<warn>, C<write>
-
-=item Functions for fixed length data or records
-
-C<pack>, C<read>, C<syscall>, C<sysread>, C<syswrite>, C<unpack>, C<vec>
-
-=item Functions for filehandles, files, or directories
-
-C<-I<X>>, C<chdir>, C<chmod>, C<chown>, C<chroot>, C<fcntl>, C<glob>,
-C<ioctl>, C<link>, C<lstat>, C<mkdir>, C<open>, C<opendir>,
-C<readlink>, C<rename>, C<rmdir>, C<stat>, C<symlink>, C<umask>,
-C<unlink>, C<utime>
-
-=item Keywords related to the control flow of your perl program
-
-C<caller>, C<continue>, C<die>, C<do>, C<dump>, C<eval>, C<exit>,
-C<goto>, C<last>, C<next>, C<redo>, C<return>, C<sub>, C<wantarray>
-
-=item Keywords related to scoping
-
-C<caller>, C<import>, C<local>, C<my>, C<our>, C<package>, C<use>
-
-=item Miscellaneous functions
-
-C<defined>, C<dump>, C<eval>, C<formline>, C<local>, C<my>, C<our>, C<reset>,
-C<scalar>, C<undef>, C<wantarray>
-
-=item Functions for processes and process groups
-
-C<alarm>, C<exec>, C<fork>, C<getpgrp>, C<getppid>, C<getpriority>, C<kill>,
-C<pipe>, C<qx/STRING/>, C<setpgrp>, C<setpriority>, C<sleep>, C<system>,
-C<times>, C<wait>, C<waitpid>
-
-=item Keywords related to perl modules
-
-C<do>, C<import>, C<no>, C<package>, C<require>, C<use>
-
-=item Keywords related to classes and object-orientedness
-
-C<bless>, C<dbmclose>, C<dbmopen>, C<package>, C<ref>, C<tie>, C<tied>,
-C<untie>, C<use>
-
-=item Low-level socket functions
-
-C<accept>, C<bind>, C<connect>, C<getpeername>, C<getsockname>,
-C<getsockopt>, C<listen>, C<recv>, C<send>, C<setsockopt>, C<shutdown>,
-C<socket>, C<socketpair>
-
-=item System V interprocess communication functions
-
-C<msgctl>, C<msgget>, C<msgrcv>, C<msgsnd>, C<semctl>, C<semget>, C<semop>,
-C<shmctl>, C<shmget>, C<shmread>, C<shmwrite>
-
-=item Fetching user and group info
-
-C<endgrent>, C<endhostent>, C<endnetent>, C<endpwent>, C<getgrent>,
-C<getgrgid>, C<getgrnam>, C<getlogin>, C<getpwent>, C<getpwnam>,
-C<getpwuid>, C<setgrent>, C<setpwent>
-
-=item Fetching network info
-
-C<endprotoent>, C<endservent>, C<gethostbyaddr>, C<gethostbyname>,
-C<gethostent>, C<getnetbyaddr>, C<getnetbyname>, C<getnetent>,
-C<getprotobyname>, C<getprotobynumber>, C<getprotoent>,
-C<getservbyname>, C<getservbyport>, C<getservent>, C<sethostent>,
-C<setnetent>, C<setprotoent>, C<setservent>
-
-=item Time-related functions
-
-C<gmtime>, C<localtime>, C<time>, C<times>
-
-=item Functions new in perl5
-
-C<abs>, C<bless>, C<chomp>, C<chr>, C<exists>, C<formline>, C<glob>,
-C<import>, C<lc>, C<lcfirst>, C<map>, C<my>, C<no>, C<our>, C<prototype>,
-C<qx>, C<qw>, C<readline>, C<readpipe>, C<ref>, C<sub*>, C<sysopen>, C<tie>,
-C<tied>, C<uc>, C<ucfirst>, C<untie>, C<use>
-
-* - C<sub> was a keyword in perl4, but in perl5 it is an
-operator, which can be used in expressions.
-
-=item Functions obsoleted in perl5
-
-C<dbmclose>, C<dbmopen>
-
-=back
-
-=head2 Portability
-
-Perl was born in Unix and can therefore access all common Unix
-system calls. In non-Unix environments, the functionality of some
-Unix system calls may not be available, or details of the available
-functionality may differ slightly. The Perl functions affected
-by this are:
-
-C<-X>, C<binmode>, C<chmod>, C<chown>, C<chroot>, C<crypt>,
-C<dbmclose>, C<dbmopen>, C<dump>, C<endgrent>, C<endhostent>,
-C<endnetent>, C<endprotoent>, C<endpwent>, C<endservent>, C<exec>,
-C<fcntl>, C<flock>, C<fork>, C<getgrent>, C<getgrgid>, C<gethostent>,
-C<getlogin>, C<getnetbyaddr>, C<getnetbyname>, C<getnetent>,
-C<getppid>, C<getprgp>, C<getpriority>, C<getprotobynumber>,
-C<getprotoent>, C<getpwent>, C<getpwnam>, C<getpwuid>,
-C<getservbyport>, C<getservent>, C<getsockopt>, C<glob>, C<ioctl>,
-C<kill>, C<link>, C<lstat>, C<msgctl>, C<msgget>, C<msgrcv>,
-C<msgsnd>, C<open>, C<pipe>, C<readlink>, C<rename>, C<select>, C<semctl>,
-C<semget>, C<semop>, C<setgrent>, C<sethostent>, C<setnetent>,
-C<setpgrp>, C<setpriority>, C<setprotoent>, C<setpwent>,
-C<setservent>, C<setsockopt>, C<shmctl>, C<shmget>, C<shmread>,
-C<shmwrite>, C<socket>, C<socketpair>, C<stat>, C<symlink>, C<syscall>,
-C<sysopen>, C<system>, C<times>, C<truncate>, C<umask>, C<unlink>,
-C<utime>, C<wait>, C<waitpid>
-
-For more information about the portability of these functions, see
-L<perlport> and other available platform-specific documentation.
-
-=head2 Alphabetical Listing of Perl Functions
-
-=over 8
-
-=item I<-X> FILEHANDLE
-
-=item I<-X> EXPR
-
-=item I<-X>
-
-A file test, where X is one of the letters listed below. This unary
-operator takes one argument, either a filename or a filehandle, and
-tests the associated file to see if something is true about it. If the
-argument is omitted, tests C<$_>, except for C<-t>, which tests STDIN.
-Unless otherwise documented, it returns C<1> for true and C<''> for false, or
-the undefined value if the file doesn't exist. Despite the funny
-names, precedence is the same as any other named unary operator, and
-the argument may be parenthesized like any other unary operator. The
-operator may be any of:
-X<-r>X<-w>X<-x>X<-o>X<-R>X<-W>X<-X>X<-O>X<-e>X<-z>X<-s>X<-f>X<-d>X<-l>X<-p>
-X<-S>X<-b>X<-c>X<-t>X<-u>X<-g>X<-k>X<-T>X<-B>X<-M>X<-A>X<-C>
-
- -r File is readable by effective uid/gid.
- -w File is writable by effective uid/gid.
- -x File is executable by effective uid/gid.
- -o File is owned by effective uid.
-
- -R File is readable by real uid/gid.
- -W File is writable by real uid/gid.
- -X File is executable by real uid/gid.
- -O File is owned by real uid.
-
- -e File exists.
- -z File has zero size (is empty).
- -s File has nonzero size (returns size in bytes).
-
- -f File is a plain file.
- -d File is a directory.
- -l File is a symbolic link.
- -p File is a named pipe (FIFO), or Filehandle is a pipe.
- -S File is a socket.
- -b File is a block special file.
- -c File is a character special file.
- -t Filehandle is opened to a tty.
-
- -u File has setuid bit set.
- -g File has setgid bit set.
- -k File has sticky bit set.
-
- -T File is an ASCII text file.
- -B File is a "binary" file (opposite of -T).
-
- -M Age of file in days when script started.
- -A Same for access time.
- -C Same for inode change time.
-
-Example:
-
- while (<>) {
- chomp;
- next unless -f $_; # ignore specials
- #...
- }
-
-The interpretation of the file permission operators C<-r>, C<-R>,
-C<-w>, C<-W>, C<-x>, and C<-X> is by default based solely on the mode
-of the file and the uids and gids of the user. There may be other
-reasons you can't actually read, write, or execute the file. Such
-reasons may be for example network filesystem access controls, ACLs
-(access control lists), read-only filesystems, and unrecognized
-executable formats.
-
-Also note that, for the superuser on the local filesystems, the C<-r>,
-C<-R>, C<-w>, and C<-W> tests always return 1, and C<-x> and C<-X> return 1
-if any execute bit is set in the mode. Scripts run by the superuser
-may thus need to do a stat() to determine the actual mode of the file,
-or temporarily set their effective uid to something else.
-
-If you are using ACLs, there is a pragma called C<filetest> that may
-produce more accurate results than the bare stat() mode bits.
-When under the C<use filetest 'access'> the above-mentioned filetests
-will test whether the permission can (not) be granted using the
-access() family of system calls. Also note that the C<-x> and C<-X> may
-under this pragma return true even if there are no execute permission
-bits set (nor any extra execute permission ACLs). This strangeness is
-due to the underlying system calls' definitions. Read the
-documentation for the C<filetest> pragma for more information.
-
-Note that C<-s/a/b/> does not do a negated substitution. Saying
-C<-exp($foo)> still works as expected, however--only single letters
-following a minus are interpreted as file tests.
-
-The C<-T> and C<-B> switches work as follows. The first block or so of the
-file is examined for odd characters such as strange control codes or
-characters with the high bit set. If too many strange characters (>30%)
-are found, it's a C<-B> file, otherwise it's a C<-T> file. Also, any file
-containing null in the first block is considered a binary file. If C<-T>
-or C<-B> is used on a filehandle, the current stdio buffer is examined
-rather than the first block. Both C<-T> and C<-B> return true on a null
-file, or a file at EOF when testing a filehandle. Because you have to
-read a file to do the C<-T> test, on most occasions you want to use a C<-f>
-against the file first, as in C<next unless -f $file && -T $file>.
-
-If any of the file tests (or either the C<stat> or C<lstat> operators) are given
-the special filehandle consisting of a solitary underline, then the stat
-structure of the previous file test (or stat operator) is used, saving
-a system call. (This doesn't work with C<-t>, and you need to remember
-that lstat() and C<-l> will leave values in the stat structure for the
-symbolic link, not the real file.) Example:
-
- print "Can do.\n" if -r $a || -w _ || -x _;
-
- stat($filename);
- print "Readable\n" if -r _;
- print "Writable\n" if -w _;
- print "Executable\n" if -x _;
- print "Setuid\n" if -u _;
- print "Setgid\n" if -g _;
- print "Sticky\n" if -k _;
- print "Text\n" if -T _;
- print "Binary\n" if -B _;
-
-=item abs VALUE
-
-=item abs
-
-Returns the absolute value of its argument.
-If VALUE is omitted, uses C<$_>.
-
-=item accept NEWSOCKET,GENERICSOCKET
-
-Accepts an incoming socket connect, just as the accept(2) system call
-does. Returns the packed address if it succeeded, false otherwise.
-See the example in L<perlipc/"Sockets: Client/Server Communication">.
-
-On systems that support a close-on-exec flag on files, the flag will
-be set for the newly opened file descriptor, as determined by the
-value of $^F. See L<perlvar/$^F>.
-
-=item alarm SECONDS
-
-=item alarm
-
-Arranges to have a SIGALRM delivered to this process after the
-specified number of seconds have elapsed. If SECONDS is not specified,
-the value stored in C<$_> is used. (On some machines,
-unfortunately, the elapsed time may be up to one second less than you
-specified because of how seconds are counted.) Only one timer may be
-counting at once. Each call disables the previous timer, and an
-argument of C<0> may be supplied to cancel the previous timer without
-starting a new one. The returned value is the amount of time remaining
-on the previous timer.
-
-For delays of finer granularity than one second, you may use Perl's
-four-argument version of select() leaving the first three arguments
-undefined, or you might be able to use the C<syscall> interface to
-access setitimer(2) if your system supports it. The Time::HiRes module
-from CPAN may also prove useful.
-
-It is usually a mistake to intermix C<alarm> and C<sleep> calls.
-(C<sleep> may be internally implemented in your system with C<alarm>)
-
-If you want to use C<alarm> to time out a system call you need to use an
-C<eval>/C<die> pair. You can't rely on the alarm causing the system call to
-fail with C<$!> set to C<EINTR> because Perl sets up signal handlers to
-restart system calls on some systems. Using C<eval>/C<die> always works,
-modulo the caveats given in L<perlipc/"Signals">.
-
- eval {
- local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
- alarm $timeout;
- $nread = sysread SOCKET, $buffer, $size;
- alarm 0;
- };
- if ($@) {
- die unless $@ eq "alarm\n"; # propagate unexpected errors
- # timed out
- }
- else {
- # didn't
- }
-
-=item atan2 Y,X
-
-Returns the arctangent of Y/X in the range -PI to PI.
-
-For the tangent operation, you may use the C<Math::Trig::tan>
-function, or use the familiar relation:
-
- sub tan { sin($_[0]) / cos($_[0]) }
-
-=item bind SOCKET,NAME
-
-Binds a network address to a socket, just as the bind system call
-does. Returns true if it succeeded, false otherwise. NAME should be a
-packed address of the appropriate type for the socket. See the examples in
-L<perlipc/"Sockets: Client/Server Communication">.
-
-=item binmode FILEHANDLE, DISCIPLINE
-
-=item binmode FILEHANDLE
-
-Arranges for FILEHANDLE to be read or written in "binary" or "text" mode
-on systems where the run-time libraries distinguish between binary and
-text files. If FILEHANDLE is an expression, the value is taken as the
-name of the filehandle. DISCIPLINE can be either of C<":raw"> for
-binary mode or C<":crlf"> for "text" mode. If the DISCIPLINE is
-omitted, it defaults to C<":raw">.
-
-binmode() should be called after open() but before any I/O is done on
-the filehandle.
-
-On many systems binmode() currently has no effect, but in future, it
-will be extended to support user-defined input and output disciplines.
-On some systems binmode() is necessary when you're not working with a
-text file. For the sake of portability it is a good idea to always use
-it when appropriate, and to never use it when it isn't appropriate.
-
-In other words: Regardless of platform, use binmode() on binary
-files, and do not use binmode() on text files.
-
-The C<open> pragma can be used to establish default disciplines.
-See L<open>.
-
-The operating system, device drivers, C libraries, and Perl run-time
-system all work together to let the programmer treat a single
-character (C<\n>) as the line terminator, irrespective of the external
-representation. On many operating systems, the native text file
-representation matches the internal representation, but on some
-platforms the external representation of C<\n> is made up of more than
-one character.
-
-Mac OS and all variants of Unix use a single character to end each line
-in the external representation of text (even though that single
-character is not necessarily the same across these platforms).
-Consequently binmode() has no effect on these operating systems. In
-other systems like VMS, MS-DOS and the various flavors of MS-Windows
-your program sees a C<\n> as a simple C<\cJ>, but what's stored in text
-files are the two characters C<\cM\cJ>. That means that, if you don't
-use binmode() on these systems, C<\cM\cJ> sequences on disk will be
-converted to C<\n> on input, and any C<\n> in your program will be
-converted back to C<\cM\cJ> on output. This is what you want for text
-files, but it can be disastrous for binary files.
-
-Another consequence of using binmode() (on some systems) is that
-special end-of-file markers will be seen as part of the data stream.
-For systems from the Microsoft family this means that if your binary
-data contains C<\cZ>, the I/O subsystem will regard it as the end of
-the file, unless you use binmode().
-
-binmode() is not only important for readline() and print() operations,
-but also when using read(), seek(), sysread(), syswrite() and tell()
-(see L<perlport> for more details). See the C<$/> and C<$\> variables
-in L<perlvar> for how to manually set your input and output
-line-termination sequences.
-
-=item bless REF,CLASSNAME
-
-=item bless REF
-
-This function tells the thingy referenced by REF that it is now an object
-in the CLASSNAME package. If CLASSNAME is omitted, the current package
-is used. Because a C<bless> is often the last thing in a constructor,
-it returns the reference for convenience. Always use the two-argument
-version if the function doing the blessing might be inherited by a
-derived class. See L<perltoot> and L<perlobj> for more about the blessing
-(and blessings) of objects.
-
-Consider always blessing objects in CLASSNAMEs that are mixed case.
-Namespaces with all lowercase names are considered reserved for
-Perl pragmata. Builtin types have all uppercase names, so to prevent
-confusion, you may wish to avoid such package names as well. Make sure
-that CLASSNAME is a true value.
-
-See L<perlmod/"Perl Modules">.
-
-=item caller EXPR
-
-=item caller
-
-Returns the context of the current subroutine call. In scalar context,
-returns the caller's package name if there is a caller, that is, if
-we're in a subroutine or C<eval> or C<require>, and the undefined value
-otherwise. In list context, returns
-
- ($package, $filename, $line) = caller;
-
-With EXPR, it returns some extra information that the debugger uses to
-print a stack trace. The value of EXPR indicates how many call frames
-to go back before the current one.
-
- ($package, $filename, $line, $subroutine, $hasargs,
- $wantarray, $evaltext, $is_require, $hints, $bitmask) = caller($i);
-
-Here $subroutine may be C<(eval)> if the frame is not a subroutine
-call, but an C<eval>. In such a case additional elements $evaltext and
-C<$is_require> are set: C<$is_require> is true if the frame is created by a
-C<require> or C<use> statement, $evaltext contains the text of the
-C<eval EXPR> statement. In particular, for an C<eval BLOCK> statement,
-$filename is C<(eval)>, but $evaltext is undefined. (Note also that
-each C<use> statement creates a C<require> frame inside an C<eval EXPR>)
-frame. C<$hasargs> is true if a new instance of C<@_> was set up for the
-frame. C<$hints> and C<$bitmask> contain pragmatic hints that the caller
-was compiled with. The C<$hints> and C<$bitmask> values are subject to
-change between versions of Perl, and are not meant for external use.
-
-Furthermore, when called from within the DB package, caller returns more
-detailed information: it sets the list variable C<@DB::args> to be the
-arguments with which the subroutine was invoked.
-
-Be aware that the optimizer might have optimized call frames away before
-C<caller> had a chance to get the information. That means that C<caller(N)>
-might not return information about the call frame you expect it do, for
-C<< N > 1 >>. In particular, C<@DB::args> might have information from the
-previous time C<caller> was called.
-
-=item chdir EXPR
-
-Changes the working directory to EXPR, if possible. If EXPR is omitted,
-changes to the directory specified by C<$ENV{HOME}>, if set; if not,
-changes to the directory specified by C<$ENV{LOGDIR}>. If neither is
-set, C<chdir> does nothing. It returns true upon success, false
-otherwise. See the example under C<die>.
-
-=item chmod LIST
-
-Changes the permissions of a list of files. The first element of the
-list must be the numerical mode, which should probably be an octal
-number, and which definitely should I<not> a string of octal digits:
-C<0644> is okay, C<'0644'> is not. Returns the number of files
-successfully changed. See also L</oct>, if all you have is a string.
-
- $cnt = chmod 0755, 'foo', 'bar';
- chmod 0755, @executables;
- $mode = '0644'; chmod $mode, 'foo'; # !!! sets mode to
- # --w----r-T
- $mode = '0644'; chmod oct($mode), 'foo'; # this is better
- $mode = 0644; chmod $mode, 'foo'; # this is best
-
-You can also import the symbolic C<S_I*> constants from the Fcntl
-module:
-
- use Fcntl ':mode';
-
- chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, @executables;
- # This is identical to the chmod 0755 of the above example.
-
-=item chomp VARIABLE
-
-=item chomp LIST
-
-=item chomp
-
-This safer version of L</chop> removes any trailing string
-that corresponds to the current value of C<$/> (also known as
-$INPUT_RECORD_SEPARATOR in the C<English> module). It returns the total
-number of characters removed from all its arguments. It's often used to
-remove the newline from the end of an input record when you're worried
-that the final record may be missing its newline. When in paragraph
-mode (C<$/ = "">), it removes all trailing newlines from the string.
-When in slurp mode (C<$/ = undef>) or fixed-length record mode (C<$/> is
-a reference to an integer or the like, see L<perlvar>) chomp() won't
-remove anything.
-If VARIABLE is omitted, it chomps C<$_>. Example:
-
- while (<>) {
- chomp; # avoid \n on last field
- @array = split(/:/);
- # ...
- }
-
-If VARIABLE is a hash, it chomps the hash's values, but not its keys.
-
-You can actually chomp anything that's an lvalue, including an assignment:
-
- chomp($cwd = `pwd`);
- chomp($answer = <STDIN>);
-
-If you chomp a list, each element is chomped, and the total number of
-characters removed is returned.
-
-=item chop VARIABLE
-
-=item chop LIST
-
-=item chop
-
-Chops off the last character of a string and returns the character
-chopped. It is much more efficient than C<s/.$//s> because it neither
-scans nor copies the string. If VARIABLE is omitted, chops C<$_>.
-If VARIABLE is a hash, it chops the hash's values, but not its keys.
-
-You can actually chop anything that's an lvalue, including an assignment.
-
-If you chop a list, each element is chopped. Only the value of the
-last C<chop> is returned.
-
-Note that C<chop> returns the last character. To return all but the last
-character, use C<substr($string, 0, -1)>.
-
-=item chown LIST
-
-Changes the owner (and group) of a list of files. The first two
-elements of the list must be the I<numeric> uid and gid, in that
-order. A value of -1 in either position is interpreted by most
-systems to leave that value unchanged. Returns the number of files
-successfully changed.
-
- $cnt = chown $uid, $gid, 'foo', 'bar';
- chown $uid, $gid, @filenames;
-
-Here's an example that looks up nonnumeric uids in the passwd file:
-
- print "User: ";
- chomp($user = <STDIN>);
- print "Files: ";
- chomp($pattern = <STDIN>);
-
- ($login,$pass,$uid,$gid) = getpwnam($user)
- or die "$user not in passwd file";
-
- @ary = glob($pattern); # expand filenames
- chown $uid, $gid, @ary;
-
-On most systems, you are not allowed to change the ownership of the
-file unless you're the superuser, although you should be able to change
-the group to any of your secondary groups. On insecure systems, these
-restrictions may be relaxed, but this is not a portable assumption.
-On POSIX systems, you can detect this condition this way:
-
- use POSIX qw(sysconf _PC_CHOWN_RESTRICTED);
- $can_chown_giveaway = not sysconf(_PC_CHOWN_RESTRICTED);
-
-=item chr NUMBER
-
-=item chr
-
-Returns the character represented by that NUMBER in the character set.
-For example, C<chr(65)> is C<"A"> in either ASCII or Unicode, and
-chr(0x263a) is a Unicode smiley face (but only within the scope of
-a C<use utf8>). For the reverse, use L</ord>.
-See L<utf8> for more about Unicode.
-
-If NUMBER is omitted, uses C<$_>.
-
-=item chroot FILENAME
-
-=item chroot
-
-This function works like the system call by the same name: it makes the
-named directory the new root directory for all further pathnames that
-begin with a C</> by your process and all its children. (It doesn't
-change your current working directory, which is unaffected.) For security
-reasons, this call is restricted to the superuser. If FILENAME is
-omitted, does a C<chroot> to C<$_>.
-
-=item close FILEHANDLE
-
-=item close
-
-Closes the file or pipe associated with the file handle, returning true
-only if stdio successfully flushes buffers and closes the system file
-descriptor. Closes the currently selected filehandle if the argument
-is omitted.
-
-You don't have to close FILEHANDLE if you are immediately going to do
-another C<open> on it, because C<open> will close it for you. (See
-C<open>.) However, an explicit C<close> on an input file resets the line
-counter (C<$.>), while the implicit close done by C<open> does not.
-
-If the file handle came from a piped open C<close> will additionally
-return false if one of the other system calls involved fails or if the
-program exits with non-zero status. (If the only problem was that the
-program exited non-zero C<$!> will be set to C<0>.) Closing a pipe
-also waits for the process executing on the pipe to complete, in case you
-want to look at the output of the pipe afterwards, and
-implicitly puts the exit status value of that command into C<$?>.
-
-Prematurely closing the read end of a pipe (i.e. before the process
-writing to it at the other end has closed it) will result in a
-SIGPIPE being delivered to the writer. If the other end can't
-handle that, be sure to read all the data before closing the pipe.
-
-Example:
-
- open(OUTPUT, '|sort >foo') # pipe to sort
- or die "Can't start sort: $!";
- #... # print stuff to output
- close OUTPUT # wait for sort to finish
- or warn $! ? "Error closing sort pipe: $!"
- : "Exit status $? from sort";
- open(INPUT, 'foo') # get sort's results
- or die "Can't open 'foo' for input: $!";
-
-FILEHANDLE may be an expression whose value can be used as an indirect
-filehandle, usually the real filehandle name.
-
-=item closedir DIRHANDLE
-
-Closes a directory opened by C<opendir> and returns the success of that
-system call.
-
-DIRHANDLE may be an expression whose value can be used as an indirect
-dirhandle, usually the real dirhandle name.
-
-=item connect SOCKET,NAME
-
-Attempts to connect to a remote socket, just as the connect system call
-does. Returns true if it succeeded, false otherwise. NAME should be a
-packed address of the appropriate type for the socket. See the examples in
-L<perlipc/"Sockets: Client/Server Communication">.
-
-=item continue BLOCK
-
-Actually a flow control statement rather than a function. If there is a
-C<continue> BLOCK attached to a BLOCK (typically in a C<while> or
-C<foreach>), it is always executed just before the conditional is about to
-be evaluated again, just like the third part of a C<for> loop in C. Thus
-it can be used to increment a loop variable, even when the loop has been
-continued via the C<next> statement (which is similar to the C C<continue>
-statement).
-
-C<last>, C<next>, or C<redo> may appear within a C<continue>
-block. C<last> and C<redo> will behave as if they had been executed within
-the main block. So will C<next>, but since it will execute a C<continue>
-block, it may be more entertaining.
-
- while (EXPR) {
- ### redo always comes here
- do_something;
- } continue {
- ### next always comes here
- do_something_else;
- # then back the top to re-check EXPR
- }
- ### last always comes here
-
-Omitting the C<continue> section is semantically equivalent to using an
-empty one, logically enough. In that case, C<next> goes directly back
-to check the condition at the top of the loop.
-
-=item cos EXPR
-
-=item cos
-
-Returns the cosine of EXPR (expressed in radians). If EXPR is omitted,
-takes cosine of C<$_>.
-
-For the inverse cosine operation, you may use the C<Math::Trig::acos()>
-function, or use this relation:
-
- sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) }
-
-=item crypt PLAINTEXT,SALT
-
-Encrypts a string exactly like the crypt(3) function in the C library
-(assuming that you actually have a version there that has not been
-extirpated as a potential munition). This can prove useful for checking
-the password file for lousy passwords, amongst other things. Only the
-guys wearing white hats should do this.
-
-Note that C<crypt> is intended to be a one-way function, much like breaking
-eggs to make an omelette. There is no (known) corresponding decrypt
-function. As a result, this function isn't all that useful for
-cryptography. (For that, see your nearby CPAN mirror.)
-
-When verifying an existing encrypted string you should use the encrypted
-text as the salt (like C<crypt($plain, $crypted) eq $crypted>). This
-allows your code to work with the standard C<crypt> and with more
-exotic implementations. When choosing a new salt create a random two
-character string whose characters come from the set C<[./0-9A-Za-z]>
-(like C<join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64]>).
-
-Here's an example that makes sure that whoever runs this program knows
-their own password:
-
- $pwd = (getpwuid($<))[1];
-
- system "stty -echo";
- print "Password: ";
- chomp($word = <STDIN>);
- print "\n";
- system "stty echo";
-
- if (crypt($word, $pwd) ne $pwd) {
- die "Sorry...\n";
- } else {
- print "ok\n";
- }
-
-Of course, typing in your own password to whoever asks you
-for it is unwise.
-
-The L<crypt> function is unsuitable for encrypting large quantities
-of data, not least of all because you can't get the information
-back. Look at the F<by-module/Crypt> and F<by-module/PGP> directories
-on your favorite CPAN mirror for a slew of potentially useful
-modules.
-
-=item dbmclose HASH
-
-[This function has been largely superseded by the C<untie> function.]
-
-Breaks the binding between a DBM file and a hash.
-
-=item dbmopen HASH,DBNAME,MASK
-
-[This function has been largely superseded by the C<tie> function.]
-
-This binds a dbm(3), ndbm(3), sdbm(3), gdbm(3), or Berkeley DB file to a
-hash. HASH is the name of the hash. (Unlike normal C<open>, the first
-argument is I<not> a filehandle, even though it looks like one). DBNAME
-is the name of the database (without the F<.dir> or F<.pag> extension if
-any). If the database does not exist, it is created with protection
-specified by MASK (as modified by the C<umask>). If your system supports
-only the older DBM functions, you may perform only one C<dbmopen> in your
-program. In older versions of Perl, if your system had neither DBM nor
-ndbm, calling C<dbmopen> produced a fatal error; it now falls back to
-sdbm(3).
-
-If you don't have write access to the DBM file, you can only read hash
-variables, not set them. If you want to test whether you can write,
-either use file tests or try setting a dummy hash entry inside an C<eval>,
-which will trap the error.
-
-Note that functions such as C<keys> and C<values> may return huge lists
-when used on large DBM files. You may prefer to use the C<each>
-function to iterate over large DBM files. Example:
-
- # print out history file offsets
- dbmopen(%HIST,'/usr/lib/news/history',0666);
- while (($key,$val) = each %HIST) {
- print $key, ' = ', unpack('L',$val), "\n";
- }
- dbmclose(%HIST);
-
-See also L<AnyDBM_File> for a more general description of the pros and
-cons of the various dbm approaches, as well as L<DB_File> for a particularly
-rich implementation.
-
-You can control which DBM library you use by loading that library
-before you call dbmopen():
-
- use DB_File;
- dbmopen(%NS_Hist, "$ENV{HOME}/.netscape/history.db")
- or die "Can't open netscape history file: $!";
-
-=item defined EXPR
-
-=item defined
-
-Returns a Boolean value telling whether EXPR has a value other than
-the undefined value C<undef>. If EXPR is not present, C<$_> will be
-checked.
-
-Many operations return C<undef> to indicate failure, end of file,
-system error, uninitialized variable, and other exceptional
-conditions. This function allows you to distinguish C<undef> from
-other values. (A simple Boolean test will not distinguish among
-C<undef>, zero, the empty string, and C<"0">, which are all equally
-false.) Note that since C<undef> is a valid scalar, its presence
-doesn't I<necessarily> indicate an exceptional condition: C<pop>
-returns C<undef> when its argument is an empty array, I<or> when the
-element to return happens to be C<undef>.
-
-You may also use C<defined(&func)> to check whether subroutine C<&func>
-has ever been defined. The return value is unaffected by any forward
-declarations of C<&foo>. Note that a subroutine which is not defined
-may still be callable: its package may have an C<AUTOLOAD> method that
-makes it spring into existence the first time that it is called -- see
-L<perlsub>.
-
-Use of C<defined> on aggregates (hashes and arrays) is deprecated. It
-used to report whether memory for that aggregate has ever been
-allocated. This behavior may disappear in future versions of Perl.
-You should instead use a simple test for size:
-
- if (@an_array) { print "has array elements\n" }
- if (%a_hash) { print "has hash members\n" }
-
-When used on a hash element, it tells you whether the value is defined,
-not whether the key exists in the hash. Use L</exists> for the latter
-purpose.
-
-Examples:
-
- print if defined $switch{'D'};
- print "$val\n" while defined($val = pop(@ary));
- die "Can't readlink $sym: $!"
- unless defined($value = readlink $sym);
- sub foo { defined &$bar ? &$bar(@_) : die "No bar"; }
- $debugging = 0 unless defined $debugging;
-
-Note: Many folks tend to overuse C<defined>, and then are surprised to
-discover that the number C<0> and C<""> (the zero-length string) are, in fact,
-defined values. For example, if you say
-
- "ab" =~ /a(.*)b/;
-
-The pattern match succeeds, and C<$1> is defined, despite the fact that it
-matched "nothing". But it didn't really match nothing--rather, it
-matched something that happened to be zero characters long. This is all
-very above-board and honest. When a function returns an undefined value,
-it's an admission that it couldn't give you an honest answer. So you
-should use C<defined> only when you're questioning the integrity of what
-you're trying to do. At other times, a simple comparison to C<0> or C<""> is
-what you want.
-
-See also L</undef>, L</exists>, L</ref>.
-
-=item delete EXPR
-
-Given an expression that specifies a hash element, array element, hash slice,
-or array slice, deletes the specified element(s) from the hash or array.
-In the case of an array, if the array elements happen to be at the end,
-the size of the array will shrink to the highest element that tests
-true for exists() (or 0 if no such element exists).
-
-Returns each element so deleted or the undefined value if there was no such
-element. Deleting from C<$ENV{}> modifies the environment. Deleting from
-a hash tied to a DBM file deletes the entry from the DBM file. Deleting
-from a C<tie>d hash or array may not necessarily return anything.
-
-Deleting an array element effectively returns that position of the array
-to its initial, uninitialized state. Subsequently testing for the same
-element with exists() will return false. Note that deleting array
-elements in the middle of an array will not shift the index of the ones
-after them down--use splice() for that. See L</exists>.
-
-The following (inefficiently) deletes all the values of %HASH and @ARRAY:
-
- foreach $key (keys %HASH) {
- delete $HASH{$key};
- }
-
- foreach $index (0 .. $#ARRAY) {
- delete $ARRAY[$index];
- }
-
-And so do these:
-
- delete @HASH{keys %HASH};
-
- delete @ARRAY[0 .. $#ARRAY];
-
-But both of these are slower than just assigning the empty list
-or undefining %HASH or @ARRAY:
-
- %HASH = (); # completely empty %HASH
- undef %HASH; # forget %HASH ever existed
-
- @ARRAY = (); # completely empty @ARRAY
- undef @ARRAY; # forget @ARRAY ever existed
-
-Note that the EXPR can be arbitrarily complicated as long as the final
-operation is a hash element, array element, hash slice, or array slice
-lookup:
-
- delete $ref->[$x][$y]{$key};
- delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys};
-
- delete $ref->[$x][$y][$index];
- delete @{$ref->[$x][$y]}[$index1, $index2, @moreindices];
-
-=item die LIST
-
-Outside an C<eval>, prints the value of LIST to C<STDERR> and
-exits with the current value of C<$!> (errno). If C<$!> is C<0>,
-exits with the value of C<<< ($? >> 8) >>> (backtick `command`
-status). If C<<< ($? >> 8) >>> is C<0>, exits with C<255>. Inside
-an C<eval(),> the error message is stuffed into C<$@> and the
-C<eval> is terminated with the undefined value. This makes
-C<die> the way to raise an exception.
-
-Equivalent examples:
-
- die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news';
- chdir '/usr/spool/news' or die "Can't cd to spool: $!\n"
-
-If the value of EXPR does not end in a newline, the current script line
-number and input line number (if any) are also printed, and a newline
-is supplied. Note that the "input line number" (also known as "chunk")
-is subject to whatever notion of "line" happens to be currently in
-effect, and is also available as the special variable C<$.>.
-See L<perlvar/"$/"> and L<perlvar/"$.">.
-
-Hint: sometimes appending C<", stopped"> to your message
-will cause it to make better sense when the string C<"at foo line 123"> is
-appended. Suppose you are running script "canasta".
-
- die "/etc/games is no good";
- die "/etc/games is no good, stopped";
-
-produce, respectively
-
- /etc/games is no good at canasta line 123.
- /etc/games is no good, stopped at canasta line 123.
-
-See also exit(), warn(), and the Carp module.
-
-If LIST is empty and C<$@> already contains a value (typically from a
-previous eval) that value is reused after appending C<"\t...propagated">.
-This is useful for propagating exceptions:
-
- eval { ... };
- die unless $@ =~ /Expected exception/;
-
-If C<$@> is empty then the string C<"Died"> is used.
-
-die() can also be called with a reference argument. If this happens to be
-trapped within an eval(), $@ contains the reference. This behavior permits
-a more elaborate exception handling implementation using objects that
-maintain arbitrary state about the nature of the exception. Such a scheme
-is sometimes preferable to matching particular string values of $@ using
-regular expressions. Here's an example:
-
- eval { ... ; die Some::Module::Exception->new( FOO => "bar" ) };
- if ($@) {
- if (ref($@) && UNIVERSAL::isa($@,"Some::Module::Exception")) {
- # handle Some::Module::Exception
- }
- else {
- # handle all other possible exceptions
- }
- }
-
-Because perl will stringify uncaught exception messages before displaying
-them, you may want to overload stringification operations on such custom
-exception objects. See L<overload> for details about that.
-
-You can arrange for a callback to be run just before the C<die>
-does its deed, by setting the C<$SIG{__DIE__}> hook. The associated
-handler will be called with the error text and can change the error
-message, if it sees fit, by calling C<die> again. See
-L<perlvar/$SIG{expr}> for details on setting C<%SIG> entries, and
-L<"eval BLOCK"> for some examples. Although this feature was meant
-to be run only right before your program was to exit, this is not
-currently the case--the C<$SIG{__DIE__}> hook is currently called
-even inside eval()ed blocks/strings! If one wants the hook to do
-nothing in such situations, put
-
- die @_ if $^S;
-
-as the first line of the handler (see L<perlvar/$^S>). Because
-this promotes strange action at a distance, this counterintuitive
-behavior may be fixed in a future release.
-
-=item do BLOCK
-
-Not really a function. Returns the value of the last command in the
-sequence of commands indicated by BLOCK. When modified by a loop
-modifier, executes the BLOCK once before testing the loop condition.
-(On other statements the loop modifiers test the conditional first.)
-
-C<do BLOCK> does I<not> count as a loop, so the loop control statements
-C<next>, C<last>, or C<redo> cannot be used to leave or restart the block.
-See L<perlsyn> for alternative strategies.
-
-=item do SUBROUTINE(LIST)
-
-A deprecated form of subroutine call. See L<perlsub>.
-
-=item do EXPR
-
-Uses the value of EXPR as a filename and executes the contents of the
-file as a Perl script. Its primary use is to include subroutines
-from a Perl subroutine library.
-
- do 'stat.pl';
-
-is just like
-
- scalar eval `cat stat.pl`;
-
-except that it's more efficient and concise, keeps track of the current
-filename for error messages, searches the @INC libraries, and updates
-C<%INC> if the file is found. See L<perlvar/Predefined Names> for these
-variables. It also differs in that code evaluated with C<do FILENAME>
-cannot see lexicals in the enclosing scope; C<eval STRING> does. It's the
-same, however, in that it does reparse the file every time you call it,
-so you probably don't want to do this inside a loop.
-
-If C<do> cannot read the file, it returns undef and sets C<$!> to the
-error. If C<do> can read the file but cannot compile it, it
-returns undef and sets an error message in C<$@>. If the file is
-successfully compiled, C<do> returns the value of the last expression
-evaluated.
-
-Note that inclusion of library modules is better done with the
-C<use> and C<require> operators, which also do automatic error checking
-and raise an exception if there's a problem.
-
-You might like to use C<do> to read in a program configuration
-file. Manual error checking can be done this way:
-
- # read in config files: system first, then user
- for $file ("/share/prog/defaults.rc",
- "$ENV{HOME}/.someprogrc")
- {
- unless ($return = do $file) {
- warn "couldn't parse $file: $@" if $@;
- warn "couldn't do $file: $!" unless defined $return;
- warn "couldn't run $file" unless $return;
- }
- }
-
-=item dump LABEL
-
-=item dump
-
-This function causes an immediate core dump. See also the B<-u>
-command-line switch in L<perlrun>, which does the same thing.
-Primarily this is so that you can use the B<undump> program (not
-supplied) to turn your core dump into an executable binary after
-having initialized all your variables at the beginning of the
-program. When the new binary is executed it will begin by executing
-a C<goto LABEL> (with all the restrictions that C<goto> suffers).
-Think of it as a goto with an intervening core dump and reincarnation.
-If C<LABEL> is omitted, restarts the program from the top.
-
-B<WARNING>: Any files opened at the time of the dump will I<not>
-be open any more when the program is reincarnated, with possible
-resulting confusion on the part of Perl.
-
-This function is now largely obsolete, partly because it's very
-hard to convert a core file into an executable, and because the
-real compiler backends for generating portable bytecode and compilable
-C code have superseded it.
-
-If you're looking to use L<dump> to speed up your program, consider
-generating bytecode or native C code as described in L<perlcc>. If
-you're just trying to accelerate a CGI script, consider using the
-C<mod_perl> extension to B<Apache>, or the CPAN module, Fast::CGI.
-You might also consider autoloading or selfloading, which at least
-make your program I<appear> to run faster.
-
-=item each HASH
-
-When called in list context, returns a 2-element list consisting of the
-key and value for the next element of a hash, so that you can iterate over
-it. When called in scalar context, returns only the key for the next
-element in the hash.
-
-Entries are returned in an apparently random order. The actual random
-order is subject to change in future versions of perl, but it is guaranteed
-to be in the same order as either the C<keys> or C<values> function
-would produce on the same (unmodified) hash.
-
-When the hash is entirely read, a null array is returned in list context
-(which when assigned produces a false (C<0>) value), and C<undef> in
-scalar context. The next call to C<each> after that will start iterating
-again. There is a single iterator for each hash, shared by all C<each>,
-C<keys>, and C<values> function calls in the program; it can be reset by
-reading all the elements from the hash, or by evaluating C<keys HASH> or
-C<values HASH>. If you add or delete elements of a hash while you're
-iterating over it, you may get entries skipped or duplicated, so
-don't. Exception: It is always safe to delete the item most recently
-returned by C<each()>, which means that the following code will work:
-
- while (($key, $value) = each %hash) {
- print $key, "\n";
- delete $hash{$key}; # This is safe
- }
-
-The following prints out your environment like the printenv(1) program,
-only in a different order:
-
- while (($key,$value) = each %ENV) {
- print "$key=$value\n";
- }
-
-See also C<keys>, C<values> and C<sort>.
-
-=item eof FILEHANDLE
-
-=item eof ()
-
-=item eof
-
-Returns 1 if the next read on FILEHANDLE will return end of file, or if
-FILEHANDLE is not open. FILEHANDLE may be an expression whose value
-gives the real filehandle. (Note that this function actually
-reads a character and then C<ungetc>s it, so isn't very useful in an
-interactive context.) Do not read from a terminal file (or call
-C<eof(FILEHANDLE)> on it) after end-of-file is reached. File types such
-as terminals may lose the end-of-file condition if you do.
-
-An C<eof> without an argument uses the last file read. Using C<eof()>
-with empty parentheses is very different. It refers to the pseudo file
-formed from the files listed on the command line and accessed via the
-C<< <> >> operator. Since C<< <> >> isn't explicitly opened,
-as a normal filehandle is, an C<eof()> before C<< <> >> has been
-used will cause C<@ARGV> to be examined to determine if input is
-available.
-
-In a C<< while (<>) >> loop, C<eof> or C<eof(ARGV)> can be used to
-detect the end of each file, C<eof()> will only detect the end of the
-last file. Examples:
-
- # reset line numbering on each input file
- while (<>) {
- next if /^\s*#/; # skip comments
- print "$.\t$_";
- } continue {
- close ARGV if eof; # Not eof()!
- }
-
- # insert dashes just before last line of last file
- while (<>) {
- if (eof()) { # check for end of current file
- print "--------------\n";
- close(ARGV); # close or last; is needed if we
- # are reading from the terminal
- }
- print;
- }
-
-Practical hint: you almost never need to use C<eof> in Perl, because the
-input operators typically return C<undef> when they run out of data, or if
-there was an error.
-
-=item eval EXPR
-
-=item eval BLOCK
-
-In the first form, the return value of EXPR is parsed and executed as if it
-were a little Perl program. The value of the expression (which is itself
-determined within scalar context) is first parsed, and if there weren't any
-errors, executed in the lexical context of the current Perl program, so
-that any variable settings or subroutine and format definitions remain
-afterwards. Note that the value is parsed every time the eval executes.
-If EXPR is omitted, evaluates C<$_>. This form is typically used to
-delay parsing and subsequent execution of the text of EXPR until run time.
-
-In the second form, the code within the BLOCK is parsed only once--at the
-same time the code surrounding the eval itself was parsed--and executed
-within the context of the current Perl program. This form is typically
-used to trap exceptions more efficiently than the first (see below), while
-also providing the benefit of checking the code within BLOCK at compile
-time.
-
-The final semicolon, if any, may be omitted from the value of EXPR or within
-the BLOCK.
-
-In both forms, the value returned is the value of the last expression
-evaluated inside the mini-program; a return statement may be also used, just
-as with subroutines. The expression providing the return value is evaluated
-in void, scalar, or list context, depending on the context of the eval itself.
-See L</wantarray> for more on how the evaluation context can be determined.
-
-If there is a syntax error or runtime error, or a C<die> statement is
-executed, an undefined value is returned by C<eval>, and C<$@> is set to the
-error message. If there was no error, C<$@> is guaranteed to be a null
-string. Beware that using C<eval> neither silences perl from printing
-warnings to STDERR, nor does it stuff the text of warning messages into C<$@>.
-To do either of those, you have to use the C<$SIG{__WARN__}> facility. See
-L</warn> and L<perlvar>.
-
-Note that, because C<eval> traps otherwise-fatal errors, it is useful for
-determining whether a particular feature (such as C<socket> or C<symlink>)
-is implemented. It is also Perl's exception trapping mechanism, where
-the die operator is used to raise exceptions.
-
-If the code to be executed doesn't vary, you may use the eval-BLOCK
-form to trap run-time errors without incurring the penalty of
-recompiling each time. The error, if any, is still returned in C<$@>.
-Examples:
-
- # make divide-by-zero nonfatal
- eval { $answer = $a / $b; }; warn $@ if $@;
-
- # same thing, but less efficient
- eval '$answer = $a / $b'; warn $@ if $@;
-
- # a compile-time error
- eval { $answer = }; # WRONG
-
- # a run-time error
- eval '$answer ='; # sets $@
-
-Due to the current arguably broken state of C<__DIE__> hooks, when using
-the C<eval{}> form as an exception trap in libraries, you may wish not
-to trigger any C<__DIE__> hooks that user code may have installed.
-You can use the C<local $SIG{__DIE__}> construct for this purpose,
-as shown in this example:
-
- # a very private exception trap for divide-by-zero
- eval { local $SIG{'__DIE__'}; $answer = $a / $b; };
- warn $@ if $@;
-
-This is especially significant, given that C<__DIE__> hooks can call
-C<die> again, which has the effect of changing their error messages:
-
- # __DIE__ hooks may modify error messages
- {
- local $SIG{'__DIE__'} =
- sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
- eval { die "foo lives here" };
- print $@ if $@; # prints "bar lives here"
- }
-
-Because this promotes action at a distance, this counterintuitive behavior
-may be fixed in a future release.
-
-With an C<eval>, you should be especially careful to remember what's
-being looked at when:
-
- eval $x; # CASE 1
- eval "$x"; # CASE 2
-
- eval '$x'; # CASE 3
- eval { $x }; # CASE 4
-
- eval "\$$x++"; # CASE 5
- $$x++; # CASE 6
-
-Cases 1 and 2 above behave identically: they run the code contained in
-the variable $x. (Although case 2 has misleading double quotes making
-the reader wonder what else might be happening (nothing is).) Cases 3
-and 4 likewise behave in the same way: they run the code C<'$x'>, which
-does nothing but return the value of $x. (Case 4 is preferred for
-purely visual reasons, but it also has the advantage of compiling at
-compile-time instead of at run-time.) Case 5 is a place where
-normally you I<would> like to use double quotes, except that in this
-particular situation, you can just use symbolic references instead, as
-in case 6.
-
-C<eval BLOCK> does I<not> count as a loop, so the loop control statements
-C<next>, C<last>, or C<redo> cannot be used to leave or restart the block.
-
-=item exec LIST
-
-=item exec PROGRAM LIST
-
-The C<exec> function executes a system command I<and never returns>--
-use C<system> instead of C<exec> if you want it to return. It fails and
-returns false only if the command does not exist I<and> it is executed
-directly instead of via your system's command shell (see below).
-
-Since it's a common mistake to use C<exec> instead of C<system>, Perl
-warns you if there is a following statement which isn't C<die>, C<warn>,
-or C<exit> (if C<-w> is set - but you always do that). If you
-I<really> want to follow an C<exec> with some other statement, you
-can use one of these styles to avoid the warning:
-
- exec ('foo') or print STDERR "couldn't exec foo: $!";
- { exec ('foo') }; print STDERR "couldn't exec foo: $!";
-
-If there is more than one argument in LIST, or if LIST is an array
-with more than one value, calls execvp(3) with the arguments in LIST.
-If there is only one scalar argument or an array with one element in it,
-the argument is checked for shell metacharacters, and if there are any,
-the entire argument is passed to the system's command shell for parsing
-(this is C</bin/sh -c> on Unix platforms, but varies on other platforms).
-If there are no shell metacharacters in the argument, it is split into
-words and passed directly to C<execvp>, which is more efficient.
-Examples:
-
- exec '/bin/echo', 'Your arguments are: ', @ARGV;
- exec "sort $outfile | uniq";
-
-If you don't really want to execute the first argument, but want to lie
-to the program you are executing about its own name, you can specify
-the program you actually want to run as an "indirect object" (without a
-comma) in front of the LIST. (This always forces interpretation of the
-LIST as a multivalued list, even if there is only a single scalar in
-the list.) Example:
-
- $shell = '/bin/csh';
- exec $shell '-sh'; # pretend it's a login shell
-
-or, more directly,
-
- exec {'/bin/csh'} '-sh'; # pretend it's a login shell
-
-When the arguments get executed via the system shell, results will
-be subject to its quirks and capabilities. See L<perlop/"`STRING`">
-for details.
-
-Using an indirect object with C<exec> or C<system> is also more
-secure. This usage (which also works fine with system()) forces
-interpretation of the arguments as a multivalued list, even if the
-list had just one argument. That way you're safe from the shell
-expanding wildcards or splitting up words with whitespace in them.
-
- @args = ( "echo surprise" );
-
- exec @args; # subject to shell escapes
- # if @args == 1
- exec { $args[0] } @args; # safe even with one-arg list
-
-The first version, the one without the indirect object, ran the I<echo>
-program, passing it C<"surprise"> an argument. The second version
-didn't--it tried to run a program literally called I<"echo surprise">,
-didn't find it, and set C<$?> to a non-zero value indicating failure.
-
-Beginning with v5.6.0, Perl will attempt to flush all files opened for
-output before the exec, but this may not be supported on some platforms
-(see L<perlport>). To be safe, you may need to set C<$|> ($AUTOFLUSH
-in English) or call the C<autoflush()> method of C<IO::Handle> on any
-open handles in order to avoid lost output.
-
-Note that C<exec> will not call your C<END> blocks, nor will it call
-any C<DESTROY> methods in your objects.
-
-=item exists EXPR
-
-Given an expression that specifies a hash element or array element,
-returns true if the specified element in the hash or array has ever
-been initialized, even if the corresponding value is undefined. The
-element is not autovivified if it doesn't exist.
-
- print "Exists\n" if exists $hash{$key};
- print "Defined\n" if defined $hash{$key};
- print "True\n" if $hash{$key};
-
- print "Exists\n" if exists $array[$index];
- print "Defined\n" if defined $array[$index];
- print "True\n" if $array[$index];
-
-A hash or array element can be true only if it's defined, and defined if
-it exists, but the reverse doesn't necessarily hold true.
-
-Given an expression that specifies the name of a subroutine,
-returns true if the specified subroutine has ever been declared, even
-if it is undefined. Mentioning a subroutine name for exists or defined
-does not count as declaring it. Note that a subroutine which does not
-exist may still be callable: its package may have an C<AUTOLOAD>
-method that makes it spring into existence the first time that it is
-called -- see L<perlsub>.
-
- print "Exists\n" if exists &subroutine;
- print "Defined\n" if defined &subroutine;
-
-Note that the EXPR can be arbitrarily complicated as long as the final
-operation is a hash or array key lookup or subroutine name:
-
- if (exists $ref->{A}->{B}->{$key}) { }
- if (exists $hash{A}{B}{$key}) { }
-
- if (exists $ref->{A}->{B}->[$ix]) { }
- if (exists $hash{A}{B}[$ix]) { }
-
- if (exists &{$ref->{A}{B}{$key}}) { }
-
-Although the deepest nested array or hash will not spring into existence
-just because its existence was tested, any intervening ones will.
-Thus C<< $ref->{"A"} >> and C<< $ref->{"A"}->{"B"} >> will spring
-into existence due to the existence test for the $key element above.
-This happens anywhere the arrow operator is used, including even:
-
- undef $ref;
- if (exists $ref->{"Some key"}) { }
- print $ref; # prints HASH(0x80d3d5c)
-
-This surprising autovivification in what does not at first--or even
-second--glance appear to be an lvalue context may be fixed in a future
-release.
-
-See L<perlref/"Pseudo-hashes: Using an array as a hash"> for specifics
-on how exists() acts when used on a pseudo-hash.
-
-Use of a subroutine call, rather than a subroutine name, as an argument
-to exists() is an error.
-
- exists &sub; # OK
- exists &sub(); # Error
-
-=item exit EXPR
-
-Evaluates EXPR and exits immediately with that value. Example:
-
- $ans = <STDIN>;
- exit 0 if $ans =~ /^[Xx]/;
-
-See also C<die>. If EXPR is omitted, exits with C<0> status. The only
-universally recognized values for EXPR are C<0> for success and C<1>
-for error; other values are subject to interpretation depending on the
-environment in which the Perl program is running. For example, exiting
-69 (EX_UNAVAILABLE) from a I<sendmail> incoming-mail filter will cause
-the mailer to return the item undelivered, but that's not true everywhere.
-
-Don't use C<exit> to abort a subroutine if there's any chance that
-someone might want to trap whatever error happened. Use C<die> instead,
-which can be trapped by an C<eval>.
-
-The exit() function does not always exit immediately. It calls any
-defined C<END> routines first, but these C<END> routines may not
-themselves abort the exit. Likewise any object destructors that need to
-be called are called before the real exit. If this is a problem, you
-can call C<POSIX:_exit($status)> to avoid END and destructor processing.
-See L<perlmod> for details.
-
-=item exp EXPR
-
-=item exp
-
-Returns I<e> (the natural logarithm base) to the power of EXPR.
-If EXPR is omitted, gives C<exp($_)>.
-
-=item fcntl FILEHANDLE,FUNCTION,SCALAR
-
-Implements the fcntl(2) function. You'll probably have to say
-
- use Fcntl;
-
-first to get the correct constant definitions. Argument processing and
-value return works just like C<ioctl> below.
-For example:
-
- use Fcntl;
- fcntl($filehandle, F_GETFL, $packed_return_buffer)
- or die "can't fcntl F_GETFL: $!";
-
-You don't have to check for C<defined> on the return from C<fnctl>.
-Like C<ioctl>, it maps a C<0> return from the system call into
-C<"0 but true"> in Perl. This string is true in boolean context and C<0>
-in numeric context. It is also exempt from the normal B<-w> warnings
-on improper numeric conversions.
-
-Note that C<fcntl> will produce a fatal error if used on a machine that
-doesn't implement fcntl(2). See the Fcntl module or your fcntl(2)
-manpage to learn what functions are available on your system.
-
-=item fileno FILEHANDLE
-
-Returns the file descriptor for a filehandle, or undefined if the
-filehandle is not open. This is mainly useful for constructing
-bitmaps for C<select> and low-level POSIX tty-handling operations.
-If FILEHANDLE is an expression, the value is taken as an indirect
-filehandle, generally its name.
-
-You can use this to find out whether two handles refer to the
-same underlying descriptor:
-
- if (fileno(THIS) == fileno(THAT)) {
- print "THIS and THAT are dups\n";
- }
-
-=item flock FILEHANDLE,OPERATION
-
-Calls flock(2), or an emulation of it, on FILEHANDLE. Returns true
-for success, false on failure. Produces a fatal error if used on a
-machine that doesn't implement flock(2), fcntl(2) locking, or lockf(3).
-C<flock> is Perl's portable file locking interface, although it locks
-only entire files, not records.
-
-Two potentially non-obvious but traditional C<flock> semantics are
-that it waits indefinitely until the lock is granted, and that its locks
-B<merely advisory>. Such discretionary locks are more flexible, but offer
-fewer guarantees. This means that files locked with C<flock> may be
-modified by programs that do not also use C<flock>. See L<perlport>,
-your port's specific documentation, or your system-specific local manpages
-for details. It's best to assume traditional behavior if you're writing
-portable programs. (But if you're not, you should as always feel perfectly
-free to write for your own system's idiosyncrasies (sometimes called
-"features"). Slavish adherence to portability concerns shouldn't get
-in the way of your getting your job done.)
-
-OPERATION is one of LOCK_SH, LOCK_EX, or LOCK_UN, possibly combined with
-LOCK_NB. These constants are traditionally valued 1, 2, 8 and 4, but
-you can use the symbolic names if you import them from the Fcntl module,
-either individually, or as a group using the ':flock' tag. LOCK_SH
-requests a shared lock, LOCK_EX requests an exclusive lock, and LOCK_UN
-releases a previously requested lock. If LOCK_NB is bitwise-or'ed with
-LOCK_SH or LOCK_EX then C<flock> will return immediately rather than blocking
-waiting for the lock (check the return status to see if you got it).
-
-To avoid the possibility of miscoordination, Perl now flushes FILEHANDLE
-before locking or unlocking it.
-
-Note that the emulation built with lockf(3) doesn't provide shared
-locks, and it requires that FILEHANDLE be open with write intent. These
-are the semantics that lockf(3) implements. Most if not all systems
-implement lockf(3) in terms of fcntl(2) locking, though, so the
-differing semantics shouldn't bite too many people.
-
-Note also that some versions of C<flock> cannot lock things over the
-network; you would need to use the more system-specific C<fcntl> for
-that. If you like you can force Perl to ignore your system's flock(2)
-function, and so provide its own fcntl(2)-based emulation, by passing
-the switch C<-Ud_flock> to the F<Configure> program when you configure
-perl.
-
-Here's a mailbox appender for BSD systems.
-
- use Fcntl ':flock'; # import LOCK_* constants
-
- sub lock {
- flock(MBOX,LOCK_EX);
- # and, in case someone appended
- # while we were waiting...
- seek(MBOX, 0, 2);
- }
-
- sub unlock {
- flock(MBOX,LOCK_UN);
- }
-
- open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
- or die "Can't open mailbox: $!";
-
- lock();
- print MBOX $msg,"\n\n";
- unlock();
-
-On systems that support a real flock(), locks are inherited across fork()
-calls, whereas those that must resort to the more capricious fcntl()
-function lose the locks, making it harder to write servers.
-
-See also L<DB_File> for other flock() examples.
-
-=item fork
-
-Does a fork(2) system call to create a new process running the
-same program at the same point. It returns the child pid to the
-parent process, C<0> to the child process, or C<undef> if the fork is
-unsuccessful. File descriptors (and sometimes locks on those descriptors)
-are shared, while everything else is copied. On most systems supporting
-fork(), great care has gone into making it extremely efficient (for
-example, using copy-on-write technology on data pages), making it the
-dominant paradigm for multitasking over the last few decades.
-
-Beginning with v5.6.0, Perl will attempt to flush all files opened for
-output before forking the child process, but this may not be supported
-on some platforms (see L<perlport>). To be safe, you may need to set
-C<$|> ($AUTOFLUSH in English) or call the C<autoflush()> method of
-C<IO::Handle> on any open handles in order to avoid duplicate output.
-
-If you C<fork> without ever waiting on your children, you will
-accumulate zombies. On some systems, you can avoid this by setting
-C<$SIG{CHLD}> to C<"IGNORE">. See also L<perlipc> for more examples of
-forking and reaping moribund children.
-
-Note that if your forked child inherits system file descriptors like
-STDIN and STDOUT that are actually connected by a pipe or socket, even
-if you exit, then the remote server (such as, say, a CGI script or a
-backgrounded job launched from a remote shell) won't think you're done.
-You should reopen those to F</dev/null> if it's any issue.
-
-=item format
-
-Declare a picture format for use by the C<write> function. For
-example:
-
- format Something =
- Test: @<<<<<<<< @||||| @>>>>>
- $str, $%, '$' . int($num)
- .
-
- $str = "widget";
- $num = $cost/$quantity;
- $~ = 'Something';
- write;
-
-See L<perlform> for many details and examples.
-
-=item formline PICTURE,LIST
-
-This is an internal function used by C<format>s, though you may call it,
-too. It formats (see L<perlform>) a list of values according to the
-contents of PICTURE, placing the output into the format output
-accumulator, C<$^A> (or C<$ACCUMULATOR> in English).
-Eventually, when a C<write> is done, the contents of
-C<$^A> are written to some filehandle, but you could also read C<$^A>
-yourself and then set C<$^A> back to C<"">. Note that a format typically
-does one C<formline> per line of form, but the C<formline> function itself
-doesn't care how many newlines are embedded in the PICTURE. This means
-that the C<~> and C<~~> tokens will treat the entire PICTURE as a single line.
-You may therefore need to use multiple formlines to implement a single
-record format, just like the format compiler.
-
-Be careful if you put double quotes around the picture, because an C<@>
-character may be taken to mean the beginning of an array name.
-C<formline> always returns true. See L<perlform> for other examples.
-
-=item getc FILEHANDLE
-
-=item getc
-
-Returns the next character from the input file attached to FILEHANDLE,
-or the undefined value at end of file, or if there was an error.
-If FILEHANDLE is omitted, reads from STDIN. This is not particularly
-efficient. However, it cannot be used by itself to fetch single
-characters without waiting for the user to hit enter. For that, try
-something more like:
-
- if ($BSD_STYLE) {
- system "stty cbreak </dev/tty >/dev/tty 2>&1";
- }
- else {
- system "stty", '-icanon', 'eol', "\001";
- }
-
- $key = getc(STDIN);
-
- if ($BSD_STYLE) {
- system "stty -cbreak </dev/tty >/dev/tty 2>&1";
- }
- else {
- system "stty", 'icanon', 'eol', '^@'; # ASCII null
- }
- print "\n";
-
-Determination of whether $BSD_STYLE should be set
-is left as an exercise to the reader.
-
-The C<POSIX::getattr> function can do this more portably on
-systems purporting POSIX compliance. See also the C<Term::ReadKey>
-module from your nearest CPAN site; details on CPAN can be found on
-L<perlmodlib/CPAN>.
-
-=item getlogin
-
-Implements the C library function of the same name, which on most
-systems returns the current login from F</etc/utmp>, if any. If null,
-use C<getpwuid>.
-
- $login = getlogin || getpwuid($<) || "Kilroy";
-
-Do not consider C<getlogin> for authentication: it is not as
-secure as C<getpwuid>.
-
-=item getpeername SOCKET
-
-Returns the packed sockaddr address of other end of the SOCKET connection.
-
- use Socket;
- $hersockaddr = getpeername(SOCK);
- ($port, $iaddr) = sockaddr_in($hersockaddr);
- $herhostname = gethostbyaddr($iaddr, AF_INET);
- $herstraddr = inet_ntoa($iaddr);
-
-=item getpgrp PID
-
-Returns the current process group for the specified PID. Use
-a PID of C<0> to get the current process group for the
-current process. Will raise an exception if used on a machine that
-doesn't implement getpgrp(2). If PID is omitted, returns process
-group of current process. Note that the POSIX version of C<getpgrp>
-does not accept a PID argument, so only C<PID==0> is truly portable.
-
-=item getppid
-
-Returns the process id of the parent process.
-
-=item getpriority WHICH,WHO
-
-Returns the current priority for a process, a process group, or a user.
-(See L<getpriority(2)>.) Will raise a fatal exception if used on a
-machine that doesn't implement getpriority(2).
-
-=item getpwnam NAME
-
-=item getgrnam NAME
-
-=item gethostbyname NAME
-
-=item getnetbyname NAME
-
-=item getprotobyname NAME
-
-=item getpwuid UID
-
-=item getgrgid GID
-
-=item getservbyname NAME,PROTO
-
-=item gethostbyaddr ADDR,ADDRTYPE
-
-=item getnetbyaddr ADDR,ADDRTYPE
-
-=item getprotobynumber NUMBER
-
-=item getservbyport PORT,PROTO
-
-=item getpwent
-
-=item getgrent
-
-=item gethostent
-
-=item getnetent
-
-=item getprotoent
-
-=item getservent
-
-=item setpwent
-
-=item setgrent
-
-=item sethostent STAYOPEN
-
-=item setnetent STAYOPEN
-
-=item setprotoent STAYOPEN
-
-=item setservent STAYOPEN
-
-=item endpwent
-
-=item endgrent
-
-=item endhostent
-
-=item endnetent
-
-=item endprotoent
-
-=item endservent
-
-These routines perform the same functions as their counterparts in the
-system library. In list context, the return values from the
-various get routines are as follows:
-
- ($name,$passwd,$uid,$gid,
- $quota,$comment,$gcos,$dir,$shell,$expire) = getpw*
- ($name,$passwd,$gid,$members) = getgr*
- ($name,$aliases,$addrtype,$length,@addrs) = gethost*
- ($name,$aliases,$addrtype,$net) = getnet*
- ($name,$aliases,$proto) = getproto*
- ($name,$aliases,$port,$proto) = getserv*
-
-(If the entry doesn't exist you get a null list.)
-
-The exact meaning of the $gcos field varies but it usually contains
-the real name of the user (as opposed to the login name) and other
-information pertaining to the user. Beware, however, that in many
-system users are able to change this information and therefore it
-cannot be trusted and therefore the $gcos is tainted (see
-L<perlsec>). The $passwd and $shell, user's encrypted password and
-login shell, are also tainted, because of the same reason.
-
-In scalar context, you get the name, unless the function was a
-lookup by name, in which case you get the other thing, whatever it is.
-(If the entry doesn't exist you get the undefined value.) For example:
-
- $uid = getpwnam($name);
- $name = getpwuid($num);
- $name = getpwent();
- $gid = getgrnam($name);
- $name = getgrgid($num;
- $name = getgrent();
- #etc.
-
-In I<getpw*()> the fields $quota, $comment, and $expire are special
-cases in the sense that in many systems they are unsupported. If the
-$quota is unsupported, it is an empty scalar. If it is supported, it
-usually encodes the disk quota. If the $comment field is unsupported,
-it is an empty scalar. If it is supported it usually encodes some
-administrative comment about the user. In some systems the $quota
-field may be $change or $age, fields that have to do with password
-aging. In some systems the $comment field may be $class. The $expire
-field, if present, encodes the expiration period of the account or the
-password. For the availability and the exact meaning of these fields
-in your system, please consult your getpwnam(3) documentation and your
-F<pwd.h> file. You can also find out from within Perl what your
-$quota and $comment fields mean and whether you have the $expire field
-by using the C<Config> module and the values C<d_pwquota>, C<d_pwage>,
-C<d_pwchange>, C<d_pwcomment>, and C<d_pwexpire>. Shadow password
-files are only supported if your vendor has implemented them in the
-intuitive fashion that calling the regular C library routines gets the
-shadow versions if you're running under privilege or if there exists
-the shadow(3) functions as found in System V ( this includes Solaris
-and Linux.) Those systems which implement a proprietary shadow password
-facility are unlikely to be supported.
-
-The $members value returned by I<getgr*()> is a space separated list of
-the login names of the members of the group.
-
-For the I<gethost*()> functions, if the C<h_errno> variable is supported in
-C, it will be returned to you via C<$?> if the function call fails. The
-C<@addrs> value returned by a successful call is a list of the raw
-addresses returned by the corresponding system library call. In the
-Internet domain, each address is four bytes long and you can unpack it
-by saying something like:
-
- ($a,$b,$c,$d) = unpack('C4',$addr[0]);
-
-The Socket library makes this slightly easier:
-
- use Socket;
- $iaddr = inet_aton("127.1"); # or whatever address
- $name = gethostbyaddr($iaddr, AF_INET);
-
- # or going the other way
- $straddr = inet_ntoa($iaddr);
-
-If you get tired of remembering which element of the return list
-contains which return value, by-name interfaces are provided
-in standard modules: C<File::stat>, C<Net::hostent>, C<Net::netent>,
-C<Net::protoent>, C<Net::servent>, C<Time::gmtime>, C<Time::localtime>,
-and C<User::grent>. These override the normal built-ins, supplying
-versions that return objects with the appropriate names
-for each field. For example:
-
- use File::stat;
- use User::pwent;
- $is_his = (stat($filename)->uid == pwent($whoever)->uid);
-
-Even though it looks like they're the same method calls (uid),
-they aren't, because a C<File::stat> object is different from
-a C<User::pwent> object.
-
-=item getsockname SOCKET
-
-Returns the packed sockaddr address of this end of the SOCKET connection,
-in case you don't know the address because you have several different
-IPs that the connection might have come in on.
-
- use Socket;
- $mysockaddr = getsockname(SOCK);
- ($port, $myaddr) = sockaddr_in($mysockaddr);
- printf "Connect to %s [%s]\n",
- scalar gethostbyaddr($myaddr, AF_INET),
- inet_ntoa($myaddr);
-
-=item getsockopt SOCKET,LEVEL,OPTNAME
-
-Returns the socket option requested, or undef if there is an error.
-
-=item glob EXPR
-
-=item glob
-
-Returns the value of EXPR with filename expansions such as the
-standard Unix shell F</bin/csh> would do. This is the internal function
-implementing the C<< <*.c> >> operator, but you can use it directly.
-If EXPR is omitted, C<$_> is used. The C<< <*.c> >> operator is
-discussed in more detail in L<perlop/"I/O Operators">.
-
-Beginning with v5.6.0, this operator is implemented using the standard
-C<File::Glob> extension. See L<File::Glob> for details.
-
-=item gmtime EXPR
-
-Converts a time as returned by the time function to a 8-element list
-with the time localized for the standard Greenwich time zone.
-Typically used as follows:
-
- # 0 1 2 3 4 5 6 7
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) =
- gmtime(time);
-
-All list elements are numeric, and come straight out of the C `struct
-tm'. $sec, $min, and $hour are the seconds, minutes, and hours of the
-specified time. $mday is the day of the month, and $mon is the month
-itself, in the range C<0..11> with 0 indicating January and 11
-indicating December. $year is the number of years since 1900. That
-is, $year is C<123> in year 2023. $wday is the day of the week, with
-0 indicating Sunday and 3 indicating Wednesday. $yday is the day of
-the year, in the range C<0..364> (or C<0..365> in leap years.)
-
-Note that the $year element is I<not> simply the last two digits of
-the year. If you assume it is, then you create non-Y2K-compliant
-programs--and you wouldn't want to do that, would you?
-
-The proper way to get a complete 4-digit year is simply:
-
- $year += 1900;
-
-And to get the last two digits of the year (e.g., '01' in 2001) do:
-
- $year = sprintf("%02d", $year % 100);
-
-If EXPR is omitted, C<gmtime()> uses the current time (C<gmtime(time)>).
-
-In scalar context, C<gmtime()> returns the ctime(3) value:
-
- $now_string = gmtime; # e.g., "Thu Oct 13 04:54:34 1994"
-
-Also see the C<timegm> function provided by the C<Time::Local> module,
-and the strftime(3) function available via the POSIX module.
-
-This scalar value is B<not> locale dependent (see L<perllocale>), but
-is instead a Perl builtin. Also see the C<Time::Local> module, and the
-strftime(3) and mktime(3) functions available via the POSIX module. To
-get somewhat similar but locale dependent date strings, set up your
-locale environment variables appropriately (please see L<perllocale>)
-and try for example:
-
- use POSIX qw(strftime);
- $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;
-
-Note that the C<%a> and C<%b> escapes, which represent the short forms
-of the day of the week and the month of the year, may not necessarily
-be three characters wide in all locales.
-
-=item goto LABEL
-
-=item goto EXPR
-
-=item goto &NAME
-
-The C<goto-LABEL> form finds the statement labeled with LABEL and resumes
-execution there. It may not be used to go into any construct that
-requires initialization, such as a subroutine or a C<foreach> loop. It
-also can't be used to go into a construct that is optimized away,
-or to get out of a block or subroutine given to C<sort>.
-It can be used to go almost anywhere else within the dynamic scope,
-including out of subroutines, but it's usually better to use some other
-construct such as C<last> or C<die>. The author of Perl has never felt the
-need to use this form of C<goto> (in Perl, that is--C is another matter).
-
-The C<goto-EXPR> form expects a label name, whose scope will be resolved
-dynamically. This allows for computed C<goto>s per FORTRAN, but isn't
-necessarily recommended if you're optimizing for maintainability:
-
- goto ("FOO", "BAR", "GLARCH")[$i];
-
-The C<goto-&NAME> form is quite different from the other forms of C<goto>.
-In fact, it isn't a goto in the normal sense at all, and doesn't have
-the stigma associated with other gotos. Instead, it
-substitutes a call to the named subroutine for the currently running
-subroutine. This is used by C<AUTOLOAD> subroutines that wish to load
-another subroutine and then pretend that the other subroutine had been
-called in the first place (except that any modifications to C<@_>
-in the current subroutine are propagated to the other subroutine.)
-After the C<goto>, not even C<caller> will be able to tell that this
-routine was called first.
-
-NAME needn't be the name of a subroutine; it can be a scalar variable
-containing a code reference, or a block which evaluates to a code
-reference.
-
-=item grep BLOCK LIST
-
-=item grep EXPR,LIST
-
-This is similar in spirit to, but not the same as, grep(1) and its
-relatives. In particular, it is not limited to using regular expressions.
-
-Evaluates the BLOCK or EXPR for each element of LIST (locally setting
-C<$_> to each element) and returns the list value consisting of those
-elements for which the expression evaluated to true. In scalar
-context, returns the number of times the expression was true.
-
- @foo = grep(!/^#/, @bar); # weed out comments
-
-or equivalently,
-
- @foo = grep {!/^#/} @bar; # weed out comments
-
-Note that C<$_> is an alias to the list value, so it can be used to
-modify the elements of the LIST. While this is useful and supported,
-it can cause bizarre results if the elements of LIST are not variables.
-Similarly, grep returns aliases into the original list, much as a for
-loop's index variable aliases the list elements. That is, modifying an
-element of a list returned by grep (for example, in a C<foreach>, C<map>
-or another C<grep>) actually modifies the element in the original list.
-This is usually something to be avoided when writing clear code.
-
-See also L</map> for a list composed of the results of the BLOCK or EXPR.
-
-=item hex EXPR
-
-=item hex
-
-Interprets EXPR as a hex string and returns the corresponding value.
-(To convert strings that might start with either 0, 0x, or 0b, see
-L</oct>.) If EXPR is omitted, uses C<$_>.
-
- print hex '0xAf'; # prints '175'
- print hex 'aF'; # same
-
-Hex strings may only represent integers. Strings that would cause
-integer overflow trigger a warning.
-
-=item import
-
-There is no builtin C<import> function. It is just an ordinary
-method (subroutine) defined (or inherited) by modules that wish to export
-names to another module. The C<use> function calls the C<import> method
-for the package used. See also L</use>, L<perlmod>, and L<Exporter>.
-
-=item index STR,SUBSTR,POSITION
-
-=item index STR,SUBSTR
-
-The index function searches for one string within another, but without
-the wildcard-like behavior of a full regular-expression pattern match.
-It returns the position of the first occurrence of SUBSTR in STR at
-or after POSITION. If POSITION is omitted, starts searching from the
-beginning of the string. The return value is based at C<0> (or whatever
-you've set the C<$[> variable to--but don't do that). If the substring
-is not found, returns one less than the base, ordinarily C<-1>.
-
-=item int EXPR
-
-=item int
-
-Returns the integer portion of EXPR. If EXPR is omitted, uses C<$_>.
-You should not use this function for rounding: one because it truncates
-towards C<0>, and two because machine representations of floating point
-numbers can sometimes produce counterintuitive results. For example,
-C<int(-6.725/0.025)> produces -268 rather than the correct -269; that's
-because it's really more like -268.99999999999994315658 instead. Usually,
-the C<sprintf>, C<printf>, or the C<POSIX::floor> and C<POSIX::ceil>
-functions will serve you better than will int().
-
-=item ioctl FILEHANDLE,FUNCTION,SCALAR
-
-Implements the ioctl(2) function. You'll probably first have to say
-
- require "ioctl.ph"; # probably in /usr/local/lib/perl/ioctl.ph
-
-to get the correct function definitions. If F<ioctl.ph> doesn't
-exist or doesn't have the correct definitions you'll have to roll your
-own, based on your C header files such as F<< <sys/ioctl.h> >>.
-(There is a Perl script called B<h2ph> that comes with the Perl kit that
-may help you in this, but it's nontrivial.) SCALAR will be read and/or
-written depending on the FUNCTION--a pointer to the string value of SCALAR
-will be passed as the third argument of the actual C<ioctl> call. (If SCALAR
-has no string value but does have a numeric value, that value will be
-passed rather than a pointer to the string value. To guarantee this to be
-true, add a C<0> to the scalar before using it.) The C<pack> and C<unpack>
-functions may be needed to manipulate the values of structures used by
-C<ioctl>.
-
-The return value of C<ioctl> (and C<fcntl>) is as follows:
-
- if OS returns: then Perl returns:
- -1 undefined value
- 0 string "0 but true"
- anything else that number
-
-Thus Perl returns true on success and false on failure, yet you can
-still easily determine the actual value returned by the operating
-system:
-
- $retval = ioctl(...) || -1;
- printf "System returned %d\n", $retval;
-
-The special string "C<0> but true" is exempt from B<-w> complaints
-about improper numeric conversions.
-
-Here's an example of setting a filehandle named C<REMOTE> to be
-non-blocking at the system level. You'll have to negotiate C<$|>
-on your own, though.
-
- use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
-
- $flags = fcntl(REMOTE, F_GETFL, 0)
- or die "Can't get flags for the socket: $!\n";
-
- $flags = fcntl(REMOTE, F_SETFL, $flags | O_NONBLOCK)
- or die "Can't set flags for the socket: $!\n";
-
-=item join EXPR,LIST
-
-Joins the separate strings of LIST into a single string with fields
-separated by the value of EXPR, and returns that new string. Example:
-
- $rec = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);
-
-Beware that unlike C<split>, C<join> doesn't take a pattern as its
-first argument. Compare L</split>.
-
-=item keys HASH
-
-Returns a list consisting of all the keys of the named hash. (In
-scalar context, returns the number of keys.) The keys are returned in
-an apparently random order. The actual random order is subject to
-change in future versions of perl, but it is guaranteed to be the same
-order as either the C<values> or C<each> function produces (given
-that the hash has not been modified). As a side effect, it resets
-HASH's iterator.
-
-Here is yet another way to print your environment:
-
- @keys = keys %ENV;
- @values = values %ENV;
- while (@keys) {
- print pop(@keys), '=', pop(@values), "\n";
- }
-
-or how about sorted by key:
-
- foreach $key (sort(keys %ENV)) {
- print $key, '=', $ENV{$key}, "\n";
- }
-
-The returned values are copies of the original keys in the hash, so
-modifying them will not affect the original hash. Compare L</values>.
-
-To sort a hash by value, you'll need to use a C<sort> function.
-Here's a descending numeric sort of a hash by its values:
-
- foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash) {
- printf "%4d %s\n", $hash{$key}, $key;
- }
-
-As an lvalue C<keys> allows you to increase the number of hash buckets
-allocated for the given hash. This can gain you a measure of efficiency if
-you know the hash is going to get big. (This is similar to pre-extending
-an array by assigning a larger number to $#array.) If you say
-
- keys %hash = 200;
-
-then C<%hash> will have at least 200 buckets allocated for it--256 of them,
-in fact, since it rounds up to the next power of two. These
-buckets will be retained even if you do C<%hash = ()>, use C<undef
-%hash> if you want to free the storage while C<%hash> is still in scope.
-You can't shrink the number of buckets allocated for the hash using
-C<keys> in this way (but you needn't worry about doing this by accident,
-as trying has no effect).
-
-See also C<each>, C<values> and C<sort>.
-
-=item kill SIGNAL, LIST
-
-Sends a signal to a list of processes. Returns the number of
-processes successfully signaled (which is not necessarily the
-same as the number actually killed).
-
- $cnt = kill 1, $child1, $child2;
- kill 9, @goners;
-
-If SIGNAL is zero, no signal is sent to the process. This is a
-useful way to check that the process is alive and hasn't changed
-its UID. See L<perlport> for notes on the portability of this
-construct.
-
-Unlike in the shell, if SIGNAL is negative, it kills
-process groups instead of processes. (On System V, a negative I<PROCESS>
-number will also kill process groups, but that's not portable.) That
-means you usually want to use positive not negative signals. You may also
-use a signal name in quotes. See L<perlipc/"Signals"> for details.
-
-=item last LABEL
-
-=item last
-
-The C<last> command is like the C<break> statement in C (as used in
-loops); it immediately exits the loop in question. If the LABEL is
-omitted, the command refers to the innermost enclosing loop. The
-C<continue> block, if any, is not executed:
-
- LINE: while (<STDIN>) {
- last LINE if /^$/; # exit when done with header
- #...
- }
-
-C<last> cannot be used to exit a block which returns a value such as
-C<eval {}>, C<sub {}> or C<do {}>, and should not be used to exit
-a grep() or map() operation.
-
-Note that a block by itself is semantically identical to a loop
-that executes once. Thus C<last> can be used to effect an early
-exit out of such a block.
-
-See also L</continue> for an illustration of how C<last>, C<next>, and
-C<redo> work.
-
-=item lc EXPR
-
-=item lc
-
-Returns an lowercased version of EXPR. This is the internal function
-implementing the C<\L> escape in double-quoted strings.
-Respects current LC_CTYPE locale if C<use locale> in force. See L<perllocale>
-and L<utf8>.
-
-If EXPR is omitted, uses C<$_>.
-
-=item lcfirst EXPR
-
-=item lcfirst
-
-Returns the value of EXPR with the first character lowercased. This is
-the internal function implementing the C<\l> escape in double-quoted strings.
-Respects current LC_CTYPE locale if C<use locale> in force. See L<perllocale>.
-
-If EXPR is omitted, uses C<$_>.
-
-=item length EXPR
-
-=item length
-
-Returns the length in characters of the value of EXPR. If EXPR is
-omitted, returns length of C<$_>. Note that this cannot be used on
-an entire array or hash to find out how many elements these have.
-For that, use C<scalar @array> and C<scalar keys %hash> respectively.
-
-=item link OLDFILE,NEWFILE
-
-Creates a new filename linked to the old filename. Returns true for
-success, false otherwise.
-
-=item listen SOCKET,QUEUESIZE
-
-Does the same thing that the listen system call does. Returns true if
-it succeeded, false otherwise. See the example in
-L<perlipc/"Sockets: Client/Server Communication">.
-
-=item local EXPR
-
-You really probably want to be using C<my> instead, because C<local> isn't
-what most people think of as "local". See
-L<perlsub/"Private Variables via my()"> for details.
-
-A local modifies the listed variables to be local to the enclosing
-block, file, or eval. If more than one value is listed, the list must
-be placed in parentheses. See L<perlsub/"Temporary Values via local()">
-for details, including issues with tied arrays and hashes.
-
-=item localtime EXPR
-
-Converts a time as returned by the time function to a 9-element list
-with the time analyzed for the local time zone. Typically used as
-follows:
-
- # 0 1 2 3 4 5 6 7 8
- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
- localtime(time);
-
-All list elements are numeric, and come straight out of the C `struct
-tm'. $sec, $min, and $hour are the seconds, minutes, and hours of the
-specified time. $mday is the day of the month, and $mon is the month
-itself, in the range C<0..11> with 0 indicating January and 11
-indicating December. $year is the number of years since 1900. That
-is, $year is C<123> in year 2023. $wday is the day of the week, with
-0 indicating Sunday and 3 indicating Wednesday. $yday is the day of
-the year, in the range C<0..364> (or C<0..365> in leap years.) $isdst
-is true if the specified time occurs during daylight savings time,
-false otherwise.
-
-Note that the $year element is I<not> simply the last two digits of
-the year. If you assume it is, then you create non-Y2K-compliant
-programs--and you wouldn't want to do that, would you?
-
-The proper way to get a complete 4-digit year is simply:
-
- $year += 1900;
-
-And to get the last two digits of the year (e.g., '01' in 2001) do:
-
- $year = sprintf("%02d", $year % 100);
-
-If EXPR is omitted, C<localtime()> uses the current time (C<localtime(time)>).
-
-In scalar context, C<localtime()> returns the ctime(3) value:
-
- $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
-
-This scalar value is B<not> locale dependent, see L<perllocale>, but
-instead a Perl builtin. Also see the C<Time::Local> module
-(to convert the second, minutes, hours, ... back to seconds since the
-stroke of midnight the 1st of January 1970, the value returned by
-time()), and the strftime(3) and mktime(3) functions available via the
-POSIX module. To get somewhat similar but locale dependent date
-strings, set up your locale environment variables appropriately
-(please see L<perllocale>) and try for example:
-
- use POSIX qw(strftime);
- $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
-
-Note that the C<%a> and C<%b>, the short forms of the day of the week
-and the month of the year, may not necessarily be three characters wide.
-
-=item lock
-
- lock I<THING>
-
-This function places an advisory lock on a variable, subroutine,
-or referenced object contained in I<THING> until the lock goes out
-of scope. This is a built-in function only if your version of Perl
-was built with threading enabled, and if you've said C<use Threads>.
-Otherwise a user-defined function by this name will be called. See
-L<Thread>.
-
-=item log EXPR
-
-=item log
-
-Returns the natural logarithm (base I<e>) of EXPR. If EXPR is omitted,
-returns log of C<$_>. To get the log of another base, use basic algebra:
-The base-N log of a number is equal to the natural log of that number
-divided by the natural log of N. For example:
-
- sub log10 {
- my $n = shift;
- return log($n)/log(10);
- }
-
-See also L</exp> for the inverse operation.
-
-=item lstat FILEHANDLE
-
-=item lstat EXPR
-
-=item lstat
-
-Does the same thing as the C<stat> function (including setting the
-special C<_> filehandle) but stats a symbolic link instead of the file
-the symbolic link points to. If symbolic links are unimplemented on
-your system, a normal C<stat> is done.
-
-If EXPR is omitted, stats C<$_>.
-
-=item m//
-
-The match operator. See L<perlop>.
-
-=item map BLOCK LIST
-
-=item map EXPR,LIST
-
-Evaluates the BLOCK or EXPR for each element of LIST (locally setting
-C<$_> to each element) and returns the list value composed of the
-results of each such evaluation. In scalar context, returns the
-total number of elements so generated. Evaluates BLOCK or EXPR in
-list context, so each element of LIST may produce zero, one, or
-more elements in the returned value.
-
- @chars = map(chr, @nums);
-
-translates a list of numbers to the corresponding characters. And
-
- %hash = map { getkey($_) => $_ } @array;
-
-is just a funny way to write
-
- %hash = ();
- foreach $_ (@array) {
- $hash{getkey($_)} = $_;
- }
-
-Note that C<$_> is an alias to the list value, so it can be used to
-modify the elements of the LIST. While this is useful and supported,
-it can cause bizarre results if the elements of LIST are not variables.
-Using a regular C<foreach> loop for this purpose would be clearer in
-most cases. See also L</grep> for an array composed of those items of
-the original list for which the BLOCK or EXPR evaluates to true.
-
-C<{> starts both hash references and blocks, so C<map { ...> could be either
-the start of map BLOCK LIST or map EXPR, LIST. Because perl doesn't look
-ahead for the closing C<}> it has to take a guess at which its dealing with
-based what it finds just after the C<{>. Usually it gets it right, but if it
-doesn't it won't realize something is wrong until it gets to the C<}> and
-encounters the missing (or unexpected) comma. The syntax error will be
-reported close to the C<}> but you'll need to change something near the C<{>
-such as using a unary C<+> to give perl some help:
-
- %hash = map { "\L$_", 1 } @array # perl guesses EXPR. wrong
- %hash = map { +"\L$_", 1 } @array # perl guesses BLOCK. right
- %hash = map { ("\L$_", 1) } @array # this also works
- %hash = map { lc($_), 1 } @array # as does this.
- %hash = map +( lc($_), 1 ), @array # this is EXPR and works!
-
- %hash = map ( lc($_), 1 ), @array # evaluates to (1, @array)
-
-or to force an anon hash constructor use C<+{>
-
- @hashes = map +{ lc($_), 1 }, @array # EXPR, so needs , at end
-
-and you get list of anonymous hashes each with only 1 entry.
-
-=item mkdir FILENAME,MASK
-
-=item mkdir FILENAME
-
-Creates the directory specified by FILENAME, with permissions
-specified by MASK (as modified by C<umask>). If it succeeds it
-returns true, otherwise it returns false and sets C<$!> (errno).
-If omitted, MASK defaults to 0777.
-
-In general, it is better to create directories with permissive MASK,
-and let the user modify that with their C<umask>, than it is to supply
-a restrictive MASK and give the user no way to be more permissive.
-The exceptions to this rule are when the file or directory should be
-kept private (mail files, for instance). The perlfunc(1) entry on
-C<umask> discusses the choice of MASK in more detail.
-
-=item msgctl ID,CMD,ARG
-
-Calls the System V IPC function msgctl(2). You'll probably have to say
-
- use IPC::SysV;
-
-first to get the correct constant definitions. If CMD is C<IPC_STAT>,
-then ARG must be a variable which will hold the returned C<msqid_ds>
-structure. Returns like C<ioctl>: the undefined value for error,
-C<"0 but true"> for zero, or the actual return value otherwise. See also
-L<perlipc/"SysV IPC">, C<IPC::SysV>, and C<IPC::Semaphore> documentation.
-
-=item msgget KEY,FLAGS
-
-Calls the System V IPC function msgget(2). Returns the message queue
-id, or the undefined value if there is an error. See also
-L<perlipc/"SysV IPC"> and C<IPC::SysV> and C<IPC::Msg> documentation.
-
-=item msgrcv ID,VAR,SIZE,TYPE,FLAGS
-
-Calls the System V IPC function msgrcv to receive a message from
-message queue ID into variable VAR with a maximum message size of
-SIZE. Note that when a message is received, the message type as a
-native long integer will be the first thing in VAR, followed by the
-actual message. This packing may be opened with C<unpack("l! a*")>.
-Taints the variable. Returns true if successful, or false if there is
-an error. See also L<perlipc/"SysV IPC">, C<IPC::SysV>, and
-C<IPC::SysV::Msg> documentation.
-
-=item msgsnd ID,MSG,FLAGS
-
-Calls the System V IPC function msgsnd to send the message MSG to the
-message queue ID. MSG must begin with the native long integer message
-type, and be followed by the length of the actual message, and finally
-the message itself. This kind of packing can be achieved with
-C<pack("l! a*", $type, $message)>. Returns true if successful,
-or false if there is an error. See also C<IPC::SysV>
-and C<IPC::SysV::Msg> documentation.
-
-=item my EXPR
-
-=item my EXPR : ATTRIBUTES
-
-A C<my> declares the listed variables to be local (lexically) to the
-enclosing block, file, or C<eval>. If
-more than one value is listed, the list must be placed in parentheses. See
-L<perlsub/"Private Variables via my()"> for details.
-
-=item next LABEL
-
-=item next
-
-The C<next> command is like the C<continue> statement in C; it starts
-the next iteration of the loop:
-
- LINE: while (<STDIN>) {
- next LINE if /^#/; # discard comments
- #...
- }
-
-Note that if there were a C<continue> block on the above, it would get
-executed even on discarded lines. If the LABEL is omitted, the command
-refers to the innermost enclosing loop.
-
-C<next> cannot be used to exit a block which returns a value such as
-C<eval {}>, C<sub {}> or C<do {}>, and should not be used to exit
-a grep() or map() operation.
-
-Note that a block by itself is semantically identical to a loop
-that executes once. Thus C<next> will exit such a block early.
-
-See also L</continue> for an illustration of how C<last>, C<next>, and
-C<redo> work.
-
-=item no Module LIST
-
-See the L</use> function, which C<no> is the opposite of.
-
-=item oct EXPR
-
-=item oct
-
-Interprets EXPR as an octal string and returns the corresponding
-value. (If EXPR happens to start off with C<0x>, interprets it as a
-hex string. If EXPR starts off with C<0b>, it is interpreted as a
-binary string.) The following will handle decimal, binary, octal, and
-hex in the standard Perl or C notation:
-
- $val = oct($val) if $val =~ /^0/;
-
-If EXPR is omitted, uses C<$_>. To go the other way (produce a number
-in octal), use sprintf() or printf():
-
- $perms = (stat("filename"))[2] & 07777;
- $oct_perms = sprintf "%lo", $perms;
-
-The oct() function is commonly used when a string such as C<644> needs
-to be converted into a file mode, for example. (Although perl will
-automatically convert strings into numbers as needed, this automatic
-conversion assumes base 10.)
-
-=item open FILEHANDLE,MODE,LIST
-
-=item open FILEHANDLE,EXPR
-
-=item open FILEHANDLE
-
-Opens the file whose filename is given by EXPR, and associates it with
-FILEHANDLE. If FILEHANDLE is an expression, its value is used as the
-name of the real filehandle wanted. (This is considered a symbolic
-reference, so C<use strict 'refs'> should I<not> be in effect.)
-
-If EXPR is omitted, the scalar
-variable of the same name as the FILEHANDLE contains the filename.
-(Note that lexical variables--those declared with C<my>--will not work
-for this purpose; so if you're using C<my>, specify EXPR in your call
-to open.) See L<perlopentut> for a kinder, gentler explanation of opening
-files.
-
-If MODE is C<< '<' >> or nothing, the file is opened for input.
-If MODE is C<< '>' >>, the file is truncated and opened for
-output, being created if necessary. If MODE is C<<< '>>' >>>,
-the file is opened for appending, again being created if necessary.
-You can put a C<'+'> in front of the C<< '>' >> or C<< '<' >> to indicate that
-you want both read and write access to the file; thus C<< '+<' >> is almost
-always preferred for read/write updates--the C<< '+>' >> mode would clobber the
-file first. You can't usually use either read-write mode for updating
-textfiles, since they have variable length records. See the B<-i>
-switch in L<perlrun> for a better approach. The file is created with
-permissions of C<0666> modified by the process' C<umask> value.
-
-These various prefixes correspond to the fopen(3) modes of C<'r'>, C<'r+'>,
-C<'w'>, C<'w+'>, C<'a'>, and C<'a+'>.
-
-In the 2-arguments (and 1-argument) form of the call the mode and
-filename should be concatenated (in this order), possibly separated by
-spaces. It is possible to omit the mode if the mode is C<< '<' >>.
-
-If the filename begins with C<'|'>, the filename is interpreted as a
-command to which output is to be piped, and if the filename ends with a
-C<'|'>, the filename is interpreted as a command which pipes output to
-us. See L<perlipc/"Using open() for IPC">
-for more examples of this. (You are not allowed to C<open> to a command
-that pipes both in I<and> out, but see L<IPC::Open2>, L<IPC::Open3>,
-and L<perlipc/"Bidirectional Communication with Another Process">
-for alternatives.)
-
-If MODE is C<'|-'>, the filename is interpreted as a
-command to which output is to be piped, and if MODE is
-C<'-|'>, the filename is interpreted as a command which pipes output to
-us. In the 2-arguments (and 1-argument) form one should replace dash
-(C<'-'>) with the command. See L<perlipc/"Using open() for IPC">
-for more examples of this. (You are not allowed to C<open> to a command
-that pipes both in I<and> out, but see L<IPC::Open2>, L<IPC::Open3>,
-and L<perlipc/"Bidirectional Communication"> for alternatives.)
-
-In the 2-arguments (and 1-argument) form opening C<'-'> opens STDIN
-and opening C<< '>-' >> opens STDOUT.
-
-Open returns
-nonzero upon success, the undefined value otherwise. If the C<open>
-involved a pipe, the return value happens to be the pid of the
-subprocess.
-
-If you're unfortunate enough to be running Perl on a system that
-distinguishes between text files and binary files (modern operating
-systems don't care), then you should check out L</binmode> for tips for
-dealing with this. The key distinction between systems that need C<binmode>
-and those that don't is their text file formats. Systems like Unix, MacOS, and
-Plan9, which delimit lines with a single character, and which encode that
-character in C as C<"\n">, do not need C<binmode>. The rest need it.
-
-When opening a file, it's usually a bad idea to continue normal execution
-if the request failed, so C<open> is frequently used in connection with
-C<die>. Even if C<die> won't do what you want (say, in a CGI script,
-where you want to make a nicely formatted error message (but there are
-modules that can help with that problem)) you should always check
-the return value from opening a file. The infrequent exception is when
-working with an unopened filehandle is actually what you want to do.
-
-Examples:
-
- $ARTICLE = 100;
- open ARTICLE or die "Can't find article $ARTICLE: $!\n";
- while (<ARTICLE>) {...
-
- open(LOG, '>>/usr/spool/news/twitlog'); # (log is reserved)
- # if the open fails, output is discarded
-
- open(DBASE, '+<', 'dbase.mine') # open for update
- or die "Can't open 'dbase.mine' for update: $!";
-
- open(DBASE, '+<dbase.mine') # ditto
- or die "Can't open 'dbase.mine' for update: $!";
-
- open(ARTICLE, '-|', "caesar <$article") # decrypt article
- or die "Can't start caesar: $!";
-
- open(ARTICLE, "caesar <$article |") # ditto
- or die "Can't start caesar: $!";
-
- open(EXTRACT, "|sort >/tmp/Tmp$$") # $$ is our process id
- or die "Can't start sort: $!";
-
- # process argument list of files along with any includes
-
- foreach $file (@ARGV) {
- process($file, 'fh00');
- }
-
- sub process {
- my($filename, $input) = @_;
- $input++; # this is a string increment
- unless (open($input, $filename)) {
- print STDERR "Can't open $filename: $!\n";
- return;
- }
-
- local $_;
- while (<$input>) { # note use of indirection
- if (/^#include "(.*)"/) {
- process($1, $input);
- next;
- }
- #... # whatever
- }
- }
-
-You may also, in the Bourne shell tradition, specify an EXPR beginning
-with C<< '>&' >>, in which case the rest of the string is interpreted as the
-name of a filehandle (or file descriptor, if numeric) to be
-duped and opened. You may use C<&> after C<< > >>, C<<< >> >>>,
-C<< < >>, C<< +> >>, C<<< +>> >>>, and C<< +< >>. The
-mode you specify should match the mode of the original filehandle.
-(Duping a filehandle does not take into account any existing contents of
-stdio buffers.) Duping file handles is not yet supported for 3-argument
-open().
-
-Here is a script that saves, redirects, and restores STDOUT and
-STDERR:
-
- #!/usr/bin/perl
- open(OLDOUT, ">&STDOUT");
- open(OLDERR, ">&STDERR");
-
- open(STDOUT, '>', "foo.out") || die "Can't redirect stdout";
- open(STDERR, ">&STDOUT") || die "Can't dup stdout";
-
- select(STDERR); $| = 1; # make unbuffered
- select(STDOUT); $| = 1; # make unbuffered
-
- print STDOUT "stdout 1\n"; # this works for
- print STDERR "stderr 1\n"; # subprocesses too
-
- close(STDOUT);
- close(STDERR);
-
- open(STDOUT, ">&OLDOUT");
- open(STDERR, ">&OLDERR");
-
- print STDOUT "stdout 2\n";
- print STDERR "stderr 2\n";
-
-If you specify C<< '<&=N' >>, where C<N> is a number, then Perl will do an
-equivalent of C's C<fdopen> of that file descriptor; this is more
-parsimonious of file descriptors. For example:
-
- open(FILEHANDLE, "<&=$fd")
-
-Note that this feature depends on the fdopen() C library function.
-On many UNIX systems, fdopen() is known to fail when file descriptors
-exceed a certain value, typically 255. If you need more file
-descriptors than that, consider rebuilding Perl to use the C<sfio>
-library.
-
-If you open a pipe on the command C<'-'>, i.e., either C<'|-'> or C<'-|'>
-with 2-arguments (or 1-argument) form of open(), then
-there is an implicit fork done, and the return value of open is the pid
-of the child within the parent process, and C<0> within the child
-process. (Use C<defined($pid)> to determine whether the open was successful.)
-The filehandle behaves normally for the parent, but i/o to that
-filehandle is piped from/to the STDOUT/STDIN of the child process.
-In the child process the filehandle isn't opened--i/o happens from/to
-the new STDOUT or STDIN. Typically this is used like the normal
-piped open when you want to exercise more control over just how the
-pipe command gets executed, such as when you are running setuid, and
-don't want to have to scan shell commands for metacharacters.
-The following triples are more or less equivalent:
-
- open(FOO, "|tr '[a-z]' '[A-Z]'");
- open(FOO, '|-', "tr '[a-z]' '[A-Z]'");
- open(FOO, '|-') || exec 'tr', '[a-z]', '[A-Z]';
-
- open(FOO, "cat -n '$file'|");
- open(FOO, '-|', "cat -n '$file'");
- open(FOO, '-|') || exec 'cat', '-n', $file;
-
-See L<perlipc/"Safe Pipe Opens"> for more examples of this.
-
-Beginning with v5.6.0, Perl will attempt to flush all files opened for
-output before any operation that may do a fork, but this may not be
-supported on some platforms (see L<perlport>). To be safe, you may need
-to set C<$|> ($AUTOFLUSH in English) or call the C<autoflush()> method
-of C<IO::Handle> on any open handles.
-
-On systems that support a
-close-on-exec flag on files, the flag will be set for the newly opened
-file descriptor as determined by the value of $^F. See L<perlvar/$^F>.
-
-Closing any piped filehandle causes the parent process to wait for the
-child to finish, and returns the status value in C<$?>.
-
-The filename passed to 2-argument (or 1-argument) form of open()
-will have leading and trailing
-whitespace deleted, and the normal redirection characters
-honored. This property, known as "magic open",
-can often be used to good effect. A user could specify a filename of
-F<"rsh cat file |">, or you could change certain filenames as needed:
-
- $filename =~ s/(.*\.gz)\s*$/gzip -dc < $1|/;
- open(FH, $filename) or die "Can't open $filename: $!";
-
-Use 3-argument form to open a file with arbitrary weird characters in it,
-
- open(FOO, '<', $file);
-
-otherwise it's necessary to protect any leading and trailing whitespace:
-
- $file =~ s#^(\s)#./$1#;
- open(FOO, "< $file\0");
-
-(this may not work on some bizarre filesystems). One should
-conscientiously choose between the I<magic> and 3-arguments form
-of open():
-
- open IN, $ARGV[0];
-
-will allow the user to specify an argument of the form C<"rsh cat file |">,
-but will not work on a filename which happens to have a trailing space, while
-
- open IN, '<', $ARGV[0];
-
-will have exactly the opposite restrictions.
-
-If you want a "real" C C<open> (see L<open(2)> on your system), then you
-should use the C<sysopen> function, which involves no such magic (but
-may use subtly different filemodes than Perl open(), which is mapped
-to C fopen()). This is
-another way to protect your filenames from interpretation. For example:
-
- use IO::Handle;
- sysopen(HANDLE, $path, O_RDWR|O_CREAT|O_EXCL)
- or die "sysopen $path: $!";
- $oldfh = select(HANDLE); $| = 1; select($oldfh);
- print HANDLE "stuff $$\n";
- seek(HANDLE, 0, 0);
- print "File contains: ", <HANDLE>;
-
-Using the constructor from the C<IO::Handle> package (or one of its
-subclasses, such as C<IO::File> or C<IO::Socket>), you can generate anonymous
-filehandles that have the scope of whatever variables hold references to
-them, and automatically close whenever and however you leave that scope:
-
- use IO::File;
- #...
- sub read_myfile_munged {
- my $ALL = shift;
- my $handle = new IO::File;
- open($handle, "myfile") or die "myfile: $!";
- $first = <$handle>
- or return (); # Automatically closed here.
- mung $first or die "mung failed"; # Or here.
- return $first, <$handle> if $ALL; # Or here.
- $first; # Or here.
- }
-
-See L</seek> for some details about mixing reading and writing.
-
-=item opendir DIRHANDLE,EXPR
-
-Opens a directory named EXPR for processing by C<readdir>, C<telldir>,
-C<seekdir>, C<rewinddir>, and C<closedir>. Returns true if successful.
-DIRHANDLEs have their own namespace separate from FILEHANDLEs.
-
-=item ord EXPR
-
-=item ord
-
-Returns the numeric (ASCII or Unicode) value of the first character of EXPR. If
-EXPR is omitted, uses C<$_>. For the reverse, see L</chr>.
-See L<utf8> for more about Unicode.
-
-=item our EXPR
-
-An C<our> declares the listed variables to be valid globals within
-the enclosing block, file, or C<eval>. That is, it has the same
-scoping rules as a "my" declaration, but does not create a local
-variable. If more than one value is listed, the list must be placed
-in parentheses. The C<our> declaration has no semantic effect unless
-"use strict vars" is in effect, in which case it lets you use the
-declared global variable without qualifying it with a package name.
-(But only within the lexical scope of the C<our> declaration. In this
-it differs from "use vars", which is package scoped.)
-
-An C<our> declaration declares a global variable that will be visible
-across its entire lexical scope, even across package boundaries. The
-package in which the variable is entered is determined at the point
-of the declaration, not at the point of use. This means the following
-behavior holds:
-
- package Foo;
- our $bar; # declares $Foo::bar for rest of lexical scope
- $bar = 20;
-
- package Bar;
- print $bar; # prints 20
-
-Multiple C<our> declarations in the same lexical scope are allowed
-if they are in different packages. If they happened to be in the same
-package, Perl will emit warnings if you have asked for them.
-
- use warnings;
- package Foo;
- our $bar; # declares $Foo::bar for rest of lexical scope
- $bar = 20;
-
- package Bar;
- our $bar = 30; # declares $Bar::bar for rest of lexical scope
- print $bar; # prints 30
-
- our $bar; # emits warning
-
-=item pack TEMPLATE,LIST
-
-Takes a LIST of values and converts it into a string using the rules
-given by the TEMPLATE. The resulting string is the concatenation of
-the converted values. Typically, each converted value looks
-like its machine-level representation. For example, on 32-bit machines
-a converted integer may be represented by a sequence of 4 bytes.
-
-The TEMPLATE is a
-sequence of characters that give the order and type of values, as
-follows:
-
- a A string with arbitrary binary data, will be null padded.
- A An ASCII string, will be space padded.
- Z A null terminated (asciz) string, will be null padded.
-
- b A bit string (ascending bit order inside each byte, like vec()).
- B A bit string (descending bit order inside each byte).
- h A hex string (low nybble first).
- H A hex string (high nybble first).
-
- c A signed char value.
- C An unsigned char value. Only does bytes. See U for Unicode.
-
- s A signed short value.
- S An unsigned short value.
- (This 'short' is _exactly_ 16 bits, which may differ from
- what a local C compiler calls 'short'. If you want
- native-length shorts, use the '!' suffix.)
-
- i A signed integer value.
- I An unsigned integer value.
- (This 'integer' is _at_least_ 32 bits wide. Its exact
- size depends on what a local C compiler calls 'int',
- and may even be larger than the 'long' described in
- the next item.)
-
- l A signed long value.
- L An unsigned long value.
- (This 'long' is _exactly_ 32 bits, which may differ from
- what a local C compiler calls 'long'. If you want
- native-length longs, use the '!' suffix.)
-
- n An unsigned short in "network" (big-endian) order.
- N An unsigned long in "network" (big-endian) order.
- v An unsigned short in "VAX" (little-endian) order.
- V An unsigned long in "VAX" (little-endian) order.
- (These 'shorts' and 'longs' are _exactly_ 16 bits and
- _exactly_ 32 bits, respectively.)
-
- q A signed quad (64-bit) value.
- Q An unsigned quad value.
- (Quads are available only if your system supports 64-bit
- integer values _and_ if Perl has been compiled to support those.
- Causes a fatal error otherwise.)
-
- f A single-precision float in the native format.
- d A double-precision float in the native format.
-
- p A pointer to a null-terminated string.
- P A pointer to a structure (fixed-length string).
-
- u A uuencoded string.
- U A Unicode character number. Encodes to UTF-8 internally.
- Works even if C<use utf8> is not in effect.
-
- w A BER compressed integer. Its bytes represent an unsigned
- integer in base 128, most significant digit first, with as
- few digits as possible. Bit eight (the high bit) is set
- on each byte except the last.
-
- x A null byte.
- X Back up a byte.
- @ Null fill to absolute position.
-
-The following rules apply:
-
-=over 8
-
-=item *
-
-Each letter may optionally be followed by a number giving a repeat
-count. With all types except C<a>, C<A>, C<Z>, C<b>, C<B>, C<h>,
-C<H>, and C<P> the pack function will gobble up that many values from
-the LIST. A C<*> for the repeat count means to use however many items are
-left, except for C<@>, C<x>, C<X>, where it is equivalent
-to C<0>, and C<u>, where it is equivalent to 1 (or 45, what is the
-same).
-
-When used with C<Z>, C<*> results in the addition of a trailing null
-byte (so the packed result will be one longer than the byte C<length>
-of the item).
-
-The repeat count for C<u> is interpreted as the maximal number of bytes
-to encode per line of output, with 0 and 1 replaced by 45.
-
-=item *
-
-The C<a>, C<A>, and C<Z> types gobble just one value, but pack it as a
-string of length count, padding with nulls or spaces as necessary. When
-unpacking, C<A> strips trailing spaces and nulls, C<Z> strips everything
-after the first null, and C<a> returns data verbatim. When packing,
-C<a>, and C<Z> are equivalent.
-
-If the value-to-pack is too long, it is truncated. If too long and an
-explicit count is provided, C<Z> packs only C<$count-1> bytes, followed
-by a null byte. Thus C<Z> always packs a trailing null byte under
-all circumstances.
-
-=item *
-
-Likewise, the C<b> and C<B> fields pack a string that many bits long.
-Each byte of the input field of pack() generates 1 bit of the result.
-Each result bit is based on the least-significant bit of the corresponding
-input byte, i.e., on C<ord($byte)%2>. In particular, bytes C<"0"> and
-C<"1"> generate bits 0 and 1, as do bytes C<"\0"> and C<"\1">.
-
-Starting from the beginning of the input string of pack(), each 8-tuple
-of bytes is converted to 1 byte of output. With format C<b>
-the first byte of the 8-tuple determines the least-significant bit of a
-byte, and with format C<B> it determines the most-significant bit of
-a byte.
-
-If the length of the input string is not exactly divisible by 8, the
-remainder is packed as if the input string were padded by null bytes
-at the end. Similarly, during unpack()ing the "extra" bits are ignored.
-
-If the input string of pack() is longer than needed, extra bytes are ignored.
-A C<*> for the repeat count of pack() means to use all the bytes of
-the input field. On unpack()ing the bits are converted to a string
-of C<"0">s and C<"1">s.
-
-=item *
-
-The C<h> and C<H> fields pack a string that many nybbles (4-bit groups,
-representable as hexadecimal digits, 0-9a-f) long.
-
-Each byte of the input field of pack() generates 4 bits of the result.
-For non-alphabetical bytes the result is based on the 4 least-significant
-bits of the input byte, i.e., on C<ord($byte)%16>. In particular,
-bytes C<"0"> and C<"1"> generate nybbles 0 and 1, as do bytes
-C<"\0"> and C<"\1">. For bytes C<"a".."f"> and C<"A".."F"> the result
-is compatible with the usual hexadecimal digits, so that C<"a"> and
-C<"A"> both generate the nybble C<0xa==10>. The result for bytes
-C<"g".."z"> and C<"G".."Z"> is not well-defined.
-
-Starting from the beginning of the input string of pack(), each pair
-of bytes is converted to 1 byte of output. With format C<h> the
-first byte of the pair determines the least-significant nybble of the
-output byte, and with format C<H> it determines the most-significant
-nybble.
-
-If the length of the input string is not even, it behaves as if padded
-by a null byte at the end. Similarly, during unpack()ing the "extra"
-nybbles are ignored.
-
-If the input string of pack() is longer than needed, extra bytes are ignored.
-A C<*> for the repeat count of pack() means to use all the bytes of
-the input field. On unpack()ing the bits are converted to a string
-of hexadecimal digits.
-
-=item *
-
-The C<p> type packs a pointer to a null-terminated string. You are
-responsible for ensuring the string is not a temporary value (which can
-potentially get deallocated before you get around to using the packed result).
-The C<P> type packs a pointer to a structure of the size indicated by the
-length. A NULL pointer is created if the corresponding value for C<p> or
-C<P> is C<undef>, similarly for unpack().
-
-=item *
-
-The C</> template character allows packing and unpacking of strings where
-the packed structure contains a byte count followed by the string itself.
-You write I<length-item>C</>I<string-item>.
-
-The I<length-item> can be any C<pack> template letter,
-and describes how the length value is packed.
-The ones likely to be of most use are integer-packing ones like
-C<n> (for Java strings), C<w> (for ASN.1 or SNMP)
-and C<N> (for Sun XDR).
-
-The I<string-item> must, at present, be C<"A*">, C<"a*"> or C<"Z*">.
-For C<unpack> the length of the string is obtained from the I<length-item>,
-but if you put in the '*' it will be ignored.
-
- unpack 'C/a', "\04Gurusamy"; gives 'Guru'
- unpack 'a3/A* A*', '007 Bond J '; gives (' Bond','J')
- pack 'n/a* w/a*','hello,','world'; gives "\000\006hello,\005world"
-
-The I<length-item> is not returned explicitly from C<unpack>.
-
-Adding a count to the I<length-item> letter is unlikely to do anything
-useful, unless that letter is C<A>, C<a> or C<Z>. Packing with a
-I<length-item> of C<a> or C<Z> may introduce C<"\000"> characters,
-which Perl does not regard as legal in numeric strings.
-
-=item *
-
-The integer types C<s>, C<S>, C<l>, and C<L> may be
-immediately followed by a C<!> suffix to signify native shorts or
-longs--as you can see from above for example a bare C<l> does mean
-exactly 32 bits, the native C<long> (as seen by the local C compiler)
-may be larger. This is an issue mainly in 64-bit platforms. You can
-see whether using C<!> makes any difference by
-
- print length(pack("s")), " ", length(pack("s!")), "\n";
- print length(pack("l")), " ", length(pack("l!")), "\n";
-
-C<i!> and C<I!> also work but only because of completeness;
-they are identical to C<i> and C<I>.
-
-The actual sizes (in bytes) of native shorts, ints, longs, and long
-longs on the platform where Perl was built are also available via
-L<Config>:
-
- use Config;
- print $Config{shortsize}, "\n";
- print $Config{intsize}, "\n";
- print $Config{longsize}, "\n";
- print $Config{longlongsize}, "\n";
-
-(The C<$Config{longlongsize}> will be undefine if your system does
-not support long longs.)
-
-=item *
-
-The integer formats C<s>, C<S>, C<i>, C<I>, C<l>, and C<L>
-are inherently non-portable between processors and operating systems
-because they obey the native byteorder and endianness. For example a
-4-byte integer 0x12345678 (305419896 decimal) be ordered natively
-(arranged in and handled by the CPU registers) into bytes as
-
- 0x12 0x34 0x56 0x78 # big-endian
- 0x78 0x56 0x34 0x12 # little-endian
-
-Basically, the Intel and VAX CPUs are little-endian, while everybody
-else, for example Motorola m68k/88k, PPC, Sparc, HP PA, Power, and
-Cray are big-endian. Alpha and MIPS can be either: Digital/Compaq
-used/uses them in little-endian mode; SGI/Cray uses them in big-endian mode.
-
-The names `big-endian' and `little-endian' are comic references to
-the classic "Gulliver's Travels" (via the paper "On Holy Wars and a
-Plea for Peace" by Danny Cohen, USC/ISI IEN 137, April 1, 1980) and
-the egg-eating habits of the Lilliputians.
-
-Some systems may have even weirder byte orders such as
-
- 0x56 0x78 0x12 0x34
- 0x34 0x12 0x78 0x56
-
-You can see your system's preference with
-
- print join(" ", map { sprintf "%#02x", $_ }
- unpack("C*",pack("L",0x12345678))), "\n";
-
-The byteorder on the platform where Perl was built is also available
-via L<Config>:
-
- use Config;
- print $Config{byteorder}, "\n";
-
-Byteorders C<'1234'> and C<'12345678'> are little-endian, C<'4321'>
-and C<'87654321'> are big-endian.
-
-If you want portable packed integers use the formats C<n>, C<N>,
-C<v>, and C<V>, their byte endianness and size is known.
-See also L<perlport>.
-
-=item *
-
-Real numbers (floats and doubles) are in the native machine format only;
-due to the multiplicity of floating formats around, and the lack of a
-standard "network" representation, no facility for interchange has been
-made. This means that packed floating point data written on one machine
-may not be readable on another - even if both use IEEE floating point
-arithmetic (as the endian-ness of the memory representation is not part
-of the IEEE spec). See also L<perlport>.
-
-Note that Perl uses doubles internally for all numeric calculation, and
-converting from double into float and thence back to double again will
-lose precision (i.e., C<unpack("f", pack("f", $foo)>) will not in general
-equal $foo).
-
-=item *
-
-If the pattern begins with a C<U>, the resulting string will be treated
-as Unicode-encoded. You can force UTF8 encoding on in a string with an
-initial C<U0>, and the bytes that follow will be interpreted as Unicode
-characters. If you don't want this to happen, you can begin your pattern
-with C<C0> (or anything else) to force Perl not to UTF8 encode your
-string, and then follow this with a C<U*> somewhere in your pattern.
-
-=item *
-
-You must yourself do any alignment or padding by inserting for example
-enough C<'x'>es while packing. There is no way to pack() and unpack()
-could know where the bytes are going to or coming from. Therefore
-C<pack> (and C<unpack>) handle their output and input as flat
-sequences of bytes.
-
-=item *
-
-A comment in a TEMPLATE starts with C<#> and goes to the end of line.
-
-=item *
-
-If TEMPLATE requires more arguments to pack() than actually given, pack()
-assumes additional C<""> arguments. If TEMPLATE requires less arguments
-to pack() than actually given, extra arguments are ignored.
-
-=back
-
-Examples:
-
- $foo = pack("CCCC",65,66,67,68);
- # foo eq "ABCD"
- $foo = pack("C4",65,66,67,68);
- # same thing
- $foo = pack("U4",0x24b6,0x24b7,0x24b8,0x24b9);
- # same thing with Unicode circled letters
-
- $foo = pack("ccxxcc",65,66,67,68);
- # foo eq "AB\0\0CD"
-
- # note: the above examples featuring "C" and "c" are true
- # only on ASCII and ASCII-derived systems such as ISO Latin 1
- # and UTF-8. In EBCDIC the first example would be
- # $foo = pack("CCCC",193,194,195,196);
-
- $foo = pack("s2",1,2);
- # "\1\0\2\0" on little-endian
- # "\0\1\0\2" on big-endian
-
- $foo = pack("a4","abcd","x","y","z");
- # "abcd"
-
- $foo = pack("aaaa","abcd","x","y","z");
- # "axyz"
-
- $foo = pack("a14","abcdefg");
- # "abcdefg\0\0\0\0\0\0\0"
-
- $foo = pack("i9pl", gmtime);
- # a real struct tm (on my system anyway)
-
- $utmp_template = "Z8 Z8 Z16 L";
- $utmp = pack($utmp_template, @utmp1);
- # a struct utmp (BSDish)
-
- @utmp2 = unpack($utmp_template, $utmp);
- # "@utmp1" eq "@utmp2"
-
- sub bintodec {
- unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
- }
-
- $foo = pack('sx2l', 12, 34);
- # short 12, two zero bytes padding, long 34
- $bar = pack('s@4l', 12, 34);
- # short 12, zero fill to position 4, long 34
- # $foo eq $bar
-
-The same template may generally also be used in unpack().
-
-=item package NAMESPACE
-
-=item package
-
-Declares the compilation unit as being in the given namespace. The scope
-of the package declaration is from the declaration itself through the end
-of the enclosing block, file, or eval (the same as the C<my> operator).
-All further unqualified dynamic identifiers will be in this namespace.
-A package statement affects only dynamic variables--including those
-you've used C<local> on--but I<not> lexical variables, which are created
-with C<my>. Typically it would be the first declaration in a file to
-be included by the C<require> or C<use> operator. You can switch into a
-package in more than one place; it merely influences which symbol table
-is used by the compiler for the rest of that block. You can refer to
-variables and filehandles in other packages by prefixing the identifier
-with the package name and a double colon: C<$Package::Variable>.
-If the package name is null, the C<main> package as assumed. That is,
-C<$::sail> is equivalent to C<$main::sail> (as well as to C<$main'sail>,
-still seen in older code).
-
-If NAMESPACE is omitted, then there is no current package, and all
-identifiers must be fully qualified or lexicals. This is stricter
-than C<use strict>, since it also extends to function names.
-
-See L<perlmod/"Packages"> for more information about packages, modules,
-and classes. See L<perlsub> for other scoping issues.
-
-=item pipe READHANDLE,WRITEHANDLE
-
-Opens a pair of connected pipes like the corresponding system call.
-Note that if you set up a loop of piped processes, deadlock can occur
-unless you are very careful. In addition, note that Perl's pipes use
-stdio buffering, so you may need to set C<$|> to flush your WRITEHANDLE
-after each command, depending on the application.
-
-See L<IPC::Open2>, L<IPC::Open3>, and L<perlipc/"Bidirectional Communication">
-for examples of such things.
-
-On systems that support a close-on-exec flag on files, the flag will be set
-for the newly opened file descriptors as determined by the value of $^F.
-See L<perlvar/$^F>.
-
-=item pop ARRAY
-
-=item pop
-
-Pops and returns the last value of the array, shortening the array by
-one element. Has an effect similar to
-
- $ARRAY[$#ARRAY--]
-
-If there are no elements in the array, returns the undefined value
-(although this may happen at other times as well). If ARRAY is
-omitted, pops the C<@ARGV> array in the main program, and the C<@_>
-array in subroutines, just like C<shift>.
-
-=item pos SCALAR
-
-=item pos
-
-Returns the offset of where the last C<m//g> search left off for the variable
-in question (C<$_> is used when the variable is not specified). May be
-modified to change that offset. Such modification will also influence
-the C<\G> zero-width assertion in regular expressions. See L<perlre> and
-L<perlop>.
-
-=item print FILEHANDLE LIST
-
-=item print LIST
-
-=item print
-
-Prints a string or a list of strings. Returns true if successful.
-FILEHANDLE may be a scalar variable name, in which case the variable
-contains the name of or a reference to the filehandle, thus introducing
-one level of indirection. (NOTE: If FILEHANDLE is a variable and
-the next token is a term, it may be misinterpreted as an operator
-unless you interpose a C<+> or put parentheses around the arguments.)
-If FILEHANDLE is omitted, prints by default to standard output (or
-to the last selected output channel--see L</select>). If LIST is
-also omitted, prints C<$_> to the currently selected output channel.
-To set the default output channel to something other than STDOUT
-use the select operation. The current value of C<$,> (if any) is
-printed between each LIST item. The current value of C<$\> (if
-any) is printed after the entire LIST has been printed. Because
-print takes a LIST, anything in the LIST is evaluated in list
-context, and any subroutine that you call will have one or more of
-its expressions evaluated in list context. Also be careful not to
-follow the print keyword with a left parenthesis unless you want
-the corresponding right parenthesis to terminate the arguments to
-the print--interpose a C<+> or put parentheses around all the
-arguments.
-
-Note that if you're storing FILEHANDLES in an array or other expression,
-you will have to use a block returning its value instead:
-
- print { $files[$i] } "stuff\n";
- print { $OK ? STDOUT : STDERR } "stuff\n";
-
-=item printf FILEHANDLE FORMAT, LIST
-
-=item printf FORMAT, LIST
-
-Equivalent to C<print FILEHANDLE sprintf(FORMAT, LIST)>, except that C<$\>
-(the output record separator) is not appended. The first argument
-of the list will be interpreted as the C<printf> format. If C<use locale> is
-in effect, the character used for the decimal point in formatted real numbers
-is affected by the LC_NUMERIC locale. See L<perllocale>.
-
-Don't fall into the trap of using a C<printf> when a simple
-C<print> would do. The C<print> is more efficient and less
-error prone.
-
-=item prototype FUNCTION
-
-Returns the prototype of a function as a string (or C<undef> if the
-function has no prototype). FUNCTION is a reference to, or the name of,
-the function whose prototype you want to retrieve.
-
-If FUNCTION is a string starting with C<CORE::>, the rest is taken as a
-name for Perl builtin. If the builtin is not I<overridable> (such as
-C<qw//>) or its arguments cannot be expressed by a prototype (such as
-C<system>) returns C<undef> because the builtin does not really behave
-like a Perl function. Otherwise, the string describing the equivalent
-prototype is returned.
-
-=item push ARRAY,LIST
-
-Treats ARRAY as a stack, and pushes the values of LIST
-onto the end of ARRAY. The length of ARRAY increases by the length of
-LIST. Has the same effect as
-
- for $value (LIST) {
- $ARRAY[++$#ARRAY] = $value;
- }
-
-but is more efficient. Returns the new number of elements in the array.
-
-=item q/STRING/
-
-=item qq/STRING/
-
-=item qr/STRING/
-
-=item qx/STRING/
-
-=item qw/STRING/
-
-Generalized quotes. See L<perlop/"Regexp Quote-Like Operators">.
-
-=item quotemeta EXPR
-
-=item quotemeta
-
-Returns the value of EXPR with all non-"word"
-characters backslashed. (That is, all characters not matching
-C</[A-Za-z_0-9]/> will be preceded by a backslash in the
-returned string, regardless of any locale settings.)
-This is the internal function implementing
-the C<\Q> escape in double-quoted strings.
-
-If EXPR is omitted, uses C<$_>.
-
-=item rand EXPR
-
-=item rand
-
-Returns a random fractional number greater than or equal to C<0> and less
-than the value of EXPR. (EXPR should be positive.) If EXPR is
-omitted, the value C<1> is used. Automatically calls C<srand> unless
-C<srand> has already been called. See also C<srand>.
-
-(Note: If your rand function consistently returns numbers that are too
-large or too small, then your version of Perl was probably compiled
-with the wrong number of RANDBITS.)
-
-=item read FILEHANDLE,SCALAR,LENGTH,OFFSET
-
-=item read FILEHANDLE,SCALAR,LENGTH
-
-Attempts to read LENGTH bytes of data into variable SCALAR from the
-specified FILEHANDLE. Returns the number of bytes actually read, C<0>
-at end of file, or undef if there was an error. SCALAR will be grown
-or shrunk to the length actually read. If SCALAR needs growing, the
-new bytes will be zero bytes. An OFFSET may be specified to place
-the read data into some other place in SCALAR than the beginning.
-The call is actually implemented in terms of stdio's fread(3) call.
-To get a true read(2) system call, see C<sysread>.
-
-=item readdir DIRHANDLE
-
-Returns the next directory entry for a directory opened by C<opendir>.
-If used in list context, returns all the rest of the entries in the
-directory. If there are no more entries, returns an undefined value in
-scalar context or a null list in list context.
-
-If you're planning to filetest the return values out of a C<readdir>, you'd
-better prepend the directory in question. Otherwise, because we didn't
-C<chdir> there, it would have been testing the wrong file.
-
- opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!";
- @dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
- closedir DIR;
-
-=item readline EXPR
-
-Reads from the filehandle whose typeglob is contained in EXPR. In scalar
-context, each call reads and returns the next line, until end-of-file is
-reached, whereupon the subsequent call returns undef. In list context,
-reads until end-of-file is reached and returns a list of lines. Note that
-the notion of "line" used here is however you may have defined it
-with C<$/> or C<$INPUT_RECORD_SEPARATOR>). See L<perlvar/"$/">.
-
-When C<$/> is set to C<undef>, when readline() is in scalar
-context (i.e. file slurp mode), and when an empty file is read, it
-returns C<''> the first time, followed by C<undef> subsequently.
-
-This is the internal function implementing the C<< <EXPR> >>
-operator, but you can use it directly. The C<< <EXPR> >>
-operator is discussed in more detail in L<perlop/"I/O Operators">.
-
- $line = <STDIN>;
- $line = readline(*STDIN); # same thing
-
-=item readlink EXPR
-
-=item readlink
-
-Returns the value of a symbolic link, if symbolic links are
-implemented. If not, gives a fatal error. If there is some system
-error, returns the undefined value and sets C<$!> (errno). If EXPR is
-omitted, uses C<$_>.
-
-=item readpipe EXPR
-
-EXPR is executed as a system command.
-The collected standard output of the command is returned.
-In scalar context, it comes back as a single (potentially
-multi-line) string. In list context, returns a list of lines
-(however you've defined lines with C<$/> or C<$INPUT_RECORD_SEPARATOR>).
-This is the internal function implementing the C<qx/EXPR/>
-operator, but you can use it directly. The C<qx/EXPR/>
-operator is discussed in more detail in L<perlop/"I/O Operators">.
-
-=item recv SOCKET,SCALAR,LENGTH,FLAGS
-
-Receives a message on a socket. Attempts to receive LENGTH bytes of
-data into variable SCALAR from the specified SOCKET filehandle. SCALAR
-will be grown or shrunk to the length actually read. Takes the same
-flags as the system call of the same name. Returns the address of the
-sender if SOCKET's protocol supports this; returns an empty string
-otherwise. If there's an error, returns the undefined value. This call
-is actually implemented in terms of recvfrom(2) system call. See
-L<perlipc/"UDP: Message Passing"> for examples.
-
-=item redo LABEL
-
-=item redo
-
-The C<redo> command restarts the loop block without evaluating the
-conditional again. The C<continue> block, if any, is not executed. If
-the LABEL is omitted, the command refers to the innermost enclosing
-loop. This command is normally used by programs that want to lie to
-themselves about what was just input:
-
- # a simpleminded Pascal comment stripper
- # (warning: assumes no { or } in strings)
- LINE: while (<STDIN>) {
- while (s|({.*}.*){.*}|$1 |) {}
- s|{.*}| |;
- if (s|{.*| |) {
- $front = $_;
- while (<STDIN>) {
- if (/}/) { # end of comment?
- s|^|$front\{|;
- redo LINE;
- }
- }
- }
- print;
- }
-
-C<redo> cannot be used to retry a block which returns a value such as
-C<eval {}>, C<sub {}> or C<do {}>, and should not be used to exit
-a grep() or map() operation.
-
-Note that a block by itself is semantically identical to a loop
-that executes once. Thus C<redo> inside such a block will effectively
-turn it into a looping construct.
-
-See also L</continue> for an illustration of how C<last>, C<next>, and
-C<redo> work.
-
-=item ref EXPR
-
-=item ref
-
-Returns a true value if EXPR is a reference, false otherwise. If EXPR
-is not specified, C<$_> will be used. The value returned depends on the
-type of thing the reference is a reference to.
-Builtin types include:
-
- SCALAR
- ARRAY
- HASH
- CODE
- REF
- GLOB
- LVALUE
-
-If the referenced object has been blessed into a package, then that package
-name is returned instead. You can think of C<ref> as a C<typeof> operator.
-
- if (ref($r) eq "HASH") {
- print "r is a reference to a hash.\n";
- }
- unless (ref($r)) {
- print "r is not a reference at all.\n";
- }
- if (UNIVERSAL::isa($r, "HASH")) { # for subclassing
- print "r is a reference to something that isa hash.\n";
- }
-
-See also L<perlref>.
-
-=item rename OLDNAME,NEWNAME
-
-Changes the name of a file; an existing file NEWNAME will be
-clobbered. Returns true for success, false otherwise.
-
-Behavior of this function varies wildly depending on your system
-implementation. For example, it will usually not work across file system
-boundaries, even though the system I<mv> command sometimes compensates
-for this. Other restrictions include whether it works on directories,
-open files, or pre-existing files. Check L<perlport> and either the
-rename(2) manpage or equivalent system documentation for details.
-
-=item require VERSION
-
-=item require EXPR
-
-=item require
-
-Demands some semantics specified by EXPR, or by C<$_> if EXPR is not
-supplied.
-
-If a VERSION is specified as a literal of the form v5.6.1,
-demands that the current version of Perl (C<$^V> or $PERL_VERSION) be
-at least as recent as that version, at run time. (For compatibility
-with older versions of Perl, a numeric argument will also be interpreted
-as VERSION.) Compare with L</use>, which can do a similar check at
-compile time.
-
- require v5.6.1; # run time version check
- require 5.6.1; # ditto
- require 5.005_03; # float version allowed for compatibility
-
-Otherwise, demands that a library file be included if it hasn't already
-been included. The file is included via the do-FILE mechanism, which is
-essentially just a variety of C<eval>. Has semantics similar to the following
-subroutine:
-
- sub require {
- my($filename) = @_;
- return 1 if $INC{$filename};
- my($realfilename,$result);
- ITER: {
- foreach $prefix (@INC) {
- $realfilename = "$prefix/$filename";
- if (-f $realfilename) {
- $INC{$filename} = $realfilename;
- $result = do $realfilename;
- last ITER;
- }
- }
- die "Can't find $filename in \@INC";
- }
- delete $INC{$filename} if $@ || !$result;
- die $@ if $@;
- die "$filename did not return true value" unless $result;
- return $result;
- }
-
-Note that the file will not be included twice under the same specified
-name. The file must return true as the last statement to indicate
-successful execution of any initialization code, so it's customary to
-end such a file with C<1;> unless you're sure it'll return true
-otherwise. But it's better just to put the C<1;>, in case you add more
-statements.
-
-If EXPR is a bareword, the require assumes a "F<.pm>" extension and
-replaces "F<::>" with "F</>" in the filename for you,
-to make it easy to load standard modules. This form of loading of
-modules does not risk altering your namespace.
-
-In other words, if you try this:
-
- require Foo::Bar; # a splendid bareword
-
-The require function will actually look for the "F<Foo/Bar.pm>" file in the
-directories specified in the C<@INC> array.
-
-But if you try this:
-
- $class = 'Foo::Bar';
- require $class; # $class is not a bareword
- #or
- require "Foo::Bar"; # not a bareword because of the ""
-
-The require function will look for the "F<Foo::Bar>" file in the @INC array and
-will complain about not finding "F<Foo::Bar>" there. In this case you can do:
-
- eval "require $class";
-
-For a yet-more-powerful import facility, see L</use> and L<perlmod>.
-
-=item reset EXPR
-
-=item reset
-
-Generally used in a C<continue> block at the end of a loop to clear
-variables and reset C<??> searches so that they work again. The
-expression is interpreted as a list of single characters (hyphens
-allowed for ranges). All variables and arrays beginning with one of
-those letters are reset to their pristine state. If the expression is
-omitted, one-match searches (C<?pattern?>) are reset to match again. Resets
-only variables or searches in the current package. Always returns
-1. Examples:
-
- reset 'X'; # reset all X variables
- reset 'a-z'; # reset lower case variables
- reset; # just reset ?one-time? searches
-
-Resetting C<"A-Z"> is not recommended because you'll wipe out your
-C<@ARGV> and C<@INC> arrays and your C<%ENV> hash. Resets only package
-variables--lexical variables are unaffected, but they clean themselves
-up on scope exit anyway, so you'll probably want to use them instead.
-See L</my>.
-
-=item return EXPR
-
-=item return
-
-Returns from a subroutine, C<eval>, or C<do FILE> with the value
-given in EXPR. Evaluation of EXPR may be in list, scalar, or void
-context, depending on how the return value will be used, and the context
-may vary from one execution to the next (see C<wantarray>). If no EXPR
-is given, returns an empty list in list context, the undefined value in
-scalar context, and (of course) nothing at all in a void context.
-
-(Note that in the absence of a explicit C<return>, a subroutine, eval,
-or do FILE will automatically return the value of the last expression
-evaluated.)
-
-=item reverse LIST
-
-In list context, returns a list value consisting of the elements
-of LIST in the opposite order. In scalar context, concatenates the
-elements of LIST and returns a string value with all characters
-in the opposite order.
-
- print reverse <>; # line tac, last line first
-
- undef $/; # for efficiency of <>
- print scalar reverse <>; # character tac, last line tsrif
-
-This operator is also handy for inverting a hash, although there are some
-caveats. If a value is duplicated in the original hash, only one of those
-can be represented as a key in the inverted hash. Also, this has to
-unwind one hash and build a whole new one, which may take some time
-on a large hash, such as from a DBM file.
-
- %by_name = reverse %by_address; # Invert the hash
-
-=item rewinddir DIRHANDLE
-
-Sets the current position to the beginning of the directory for the
-C<readdir> routine on DIRHANDLE.
-
-=item rindex STR,SUBSTR,POSITION
-
-=item rindex STR,SUBSTR
-
-Works just like index() except that it returns the position of the LAST
-occurrence of SUBSTR in STR. If POSITION is specified, returns the
-last occurrence at or before that position.
-
-=item rmdir FILENAME
-
-=item rmdir
-
-Deletes the directory specified by FILENAME if that directory is empty. If it
-succeeds it returns true, otherwise it returns false and sets C<$!> (errno). If
-FILENAME is omitted, uses C<$_>.
-
-=item s///
-
-The substitution operator. See L<perlop>.
-
-=item scalar EXPR
-
-Forces EXPR to be interpreted in scalar context and returns the value
-of EXPR.
-
- @counts = ( scalar @a, scalar @b, scalar @c );
-
-There is no equivalent operator to force an expression to
-be interpolated in list context because in practice, this is never
-needed. If you really wanted to do so, however, you could use
-the construction C<@{[ (some expression) ]}>, but usually a simple
-C<(some expression)> suffices.
-
-Because C<scalar> is unary operator, if you accidentally use for EXPR a
-parenthesized list, this behaves as a scalar comma expression, evaluating
-all but the last element in void context and returning the final element
-evaluated in scalar context. This is seldom what you want.
-
-The following single statement:
-
- print uc(scalar(&foo,$bar)),$baz;
-
-is the moral equivalent of these two:
-
- &foo;
- print(uc($bar),$baz);
-
-See L<perlop> for more details on unary operators and the comma operator.
-
-=item seek FILEHANDLE,POSITION,WHENCE
-
-Sets FILEHANDLE's position, just like the C<fseek> call of C<stdio>.
-FILEHANDLE may be an expression whose value gives the name of the
-filehandle. The values for WHENCE are C<0> to set the new position to
-POSITION, C<1> to set it to the current position plus POSITION, and
-C<2> to set it to EOF plus POSITION (typically negative). For WHENCE
-you may use the constants C<SEEK_SET>, C<SEEK_CUR>, and C<SEEK_END>
-(start of the file, current position, end of the file) from the Fcntl
-module. Returns C<1> upon success, C<0> otherwise.
-
-If you want to position file for C<sysread> or C<syswrite>, don't use
-C<seek>--buffering makes its effect on the file's system position
-unpredictable and non-portable. Use C<sysseek> instead.
-
-Due to the rules and rigors of ANSI C, on some systems you have to do a
-seek whenever you switch between reading and writing. Amongst other
-things, this may have the effect of calling stdio's clearerr(3).
-A WHENCE of C<1> (C<SEEK_CUR>) is useful for not moving the file position:
-
- seek(TEST,0,1);
-
-This is also useful for applications emulating C<tail -f>. Once you hit
-EOF on your read, and then sleep for a while, you might have to stick in a
-seek() to reset things. The C<seek> doesn't change the current position,
-but it I<does> clear the end-of-file condition on the handle, so that the
-next C<< <FILE> >> makes Perl try again to read something. We hope.
-
-If that doesn't work (some stdios are particularly cantankerous), then
-you may need something more like this:
-
- for (;;) {
- for ($curpos = tell(FILE); $_ = <FILE>;
- $curpos = tell(FILE)) {
- # search for some stuff and put it into files
- }
- sleep($for_a_while);
- seek(FILE, $curpos, 0);
- }
-
-=item seekdir DIRHANDLE,POS
-
-Sets the current position for the C<readdir> routine on DIRHANDLE. POS
-must be a value returned by C<telldir>. Has the same caveats about
-possible directory compaction as the corresponding system library
-routine.
-
-=item select FILEHANDLE
-
-=item select
-
-Returns the currently selected filehandle. Sets the current default
-filehandle for output, if FILEHANDLE is supplied. This has two
-effects: first, a C<write> or a C<print> without a filehandle will
-default to this FILEHANDLE. Second, references to variables related to
-output will refer to this output channel. For example, if you have to
-set the top of form format for more than one output channel, you might
-do the following:
-
- select(REPORT1);
- $^ = 'report1_top';
- select(REPORT2);
- $^ = 'report2_top';
-
-FILEHANDLE may be an expression whose value gives the name of the
-actual filehandle. Thus:
-
- $oldfh = select(STDERR); $| = 1; select($oldfh);
-
-Some programmers may prefer to think of filehandles as objects with
-methods, preferring to write the last example as:
-
- use IO::Handle;
- STDERR->autoflush(1);
-
-=item select RBITS,WBITS,EBITS,TIMEOUT
-
-This calls the select(2) system call with the bit masks specified, which
-can be constructed using C<fileno> and C<vec>, along these lines:
-
- $rin = $win = $ein = '';
- vec($rin,fileno(STDIN),1) = 1;
- vec($win,fileno(STDOUT),1) = 1;
- $ein = $rin | $win;
-
-If you want to select on many filehandles you might wish to write a
-subroutine:
-
- sub fhbits {
- my(@fhlist) = split(' ',$_[0]);
- my($bits);
- for (@fhlist) {
- vec($bits,fileno($_),1) = 1;
- }
- $bits;
- }
- $rin = fhbits('STDIN TTY SOCK');
-
-The usual idiom is:
-
- ($nfound,$timeleft) =
- select($rout=$rin, $wout=$win, $eout=$ein, $timeout);
-
-or to block until something becomes ready just do this
-
- $nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);
-
-Most systems do not bother to return anything useful in $timeleft, so
-calling select() in scalar context just returns $nfound.
-
-Any of the bit masks can also be undef. The timeout, if specified, is
-in seconds, which may be fractional. Note: not all implementations are
-capable of returning the$timeleft. If not, they always return
-$timeleft equal to the supplied $timeout.
-
-You can effect a sleep of 250 milliseconds this way:
-
- select(undef, undef, undef, 0.25);
-
-B<WARNING>: One should not attempt to mix buffered I/O (like C<read>
-or <FH>) with C<select>, except as permitted by POSIX, and even
-then only on POSIX systems. You have to use C<sysread> instead.
-
-=item semctl ID,SEMNUM,CMD,ARG
-
-Calls the System V IPC function C<semctl>. You'll probably have to say
-
- use IPC::SysV;
-
-first to get the correct constant definitions. If CMD is IPC_STAT or
-GETALL, then ARG must be a variable which will hold the returned
-semid_ds structure or semaphore value array. Returns like C<ioctl>:
-the undefined value for error, "C<0 but true>" for zero, or the actual
-return value otherwise. The ARG must consist of a vector of native
-short integers, which may be created with C<pack("s!",(0)x$nsem)>.
-See also L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::Semaphore>
-documentation.
-
-=item semget KEY,NSEMS,FLAGS
-
-Calls the System V IPC function semget. Returns the semaphore id, or
-the undefined value if there is an error. See also
-L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::SysV::Semaphore>
-documentation.
-
-=item semop KEY,OPSTRING
-
-Calls the System V IPC function semop to perform semaphore operations
-such as signaling and waiting. OPSTRING must be a packed array of
-semop structures. Each semop structure can be generated with
-C<pack("sss", $semnum, $semop, $semflag)>. The number of semaphore
-operations is implied by the length of OPSTRING. Returns true if
-successful, or false if there is an error. As an example, the
-following code waits on semaphore $semnum of semaphore id $semid:
-
- $semop = pack("sss", $semnum, -1, 0);
- die "Semaphore trouble: $!\n" unless semop($semid, $semop);
-
-To signal the semaphore, replace C<-1> with C<1>. See also
-L<perlipc/"SysV IPC">, C<IPC::SysV>, and C<IPC::SysV::Semaphore>
-documentation.
-
-=item send SOCKET,MSG,FLAGS,TO
-
-=item send SOCKET,MSG,FLAGS
-
-Sends a message on a socket. Takes the same flags as the system call
-of the same name. On unconnected sockets you must specify a
-destination to send TO, in which case it does a C C<sendto>. Returns
-the number of characters sent, or the undefined value if there is an
-error. The C system call sendmsg(2) is currently unimplemented.
-See L<perlipc/"UDP: Message Passing"> for examples.
-
-=item setpgrp PID,PGRP
-
-Sets the current process group for the specified PID, C<0> for the current
-process. Will produce a fatal error if used on a machine that doesn't
-implement POSIX setpgid(2) or BSD setpgrp(2). If the arguments are omitted,
-it defaults to C<0,0>. Note that the BSD 4.2 version of C<setpgrp> does not
-accept any arguments, so only C<setpgrp(0,0)> is portable. See also
-C<POSIX::setsid()>.
-
-=item setpriority WHICH,WHO,PRIORITY
-
-Sets the current priority for a process, a process group, or a user.
-(See setpriority(2).) Will produce a fatal error if used on a machine
-that doesn't implement setpriority(2).
-
-=item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
-
-Sets the socket option requested. Returns undefined if there is an
-error. OPTVAL may be specified as C<undef> if you don't want to pass an
-argument.
-
-=item shift ARRAY
-
-=item shift
-
-Shifts the first value of the array off and returns it, shortening the
-array by 1 and moving everything down. If there are no elements in the
-array, returns the undefined value. If ARRAY is omitted, shifts the
-C<@_> array within the lexical scope of subroutines and formats, and the
-C<@ARGV> array at file scopes or within the lexical scopes established by
-the C<eval ''>, C<BEGIN {}>, C<INIT {}>, C<CHECK {}>, and C<END {}>
-constructs.
-
-See also C<unshift>, C<push>, and C<pop>. C<shift> and C<unshift> do the
-same thing to the left end of an array that C<pop> and C<push> do to the
-right end.
-
-=item shmctl ID,CMD,ARG
-
-Calls the System V IPC function shmctl. You'll probably have to say
-
- use IPC::SysV;
-
-first to get the correct constant definitions. If CMD is C<IPC_STAT>,
-then ARG must be a variable which will hold the returned C<shmid_ds>
-structure. Returns like ioctl: the undefined value for error, "C<0> but
-true" for zero, or the actual return value otherwise.
-See also L<perlipc/"SysV IPC"> and C<IPC::SysV> documentation.
-
-=item shmget KEY,SIZE,FLAGS
-
-Calls the System V IPC function shmget. Returns the shared memory
-segment id, or the undefined value if there is an error.
-See also L<perlipc/"SysV IPC"> and C<IPC::SysV> documentation.
-
-=item shmread ID,VAR,POS,SIZE
-
-=item shmwrite ID,STRING,POS,SIZE
-
-Reads or writes the System V shared memory segment ID starting at
-position POS for size SIZE by attaching to it, copying in/out, and
-detaching from it. When reading, VAR must be a variable that will
-hold the data read. When writing, if STRING is too long, only SIZE
-bytes are used; if STRING is too short, nulls are written to fill out
-SIZE bytes. Return true if successful, or false if there is an error.
-shmread() taints the variable. See also L<perlipc/"SysV IPC">,
-C<IPC::SysV> documentation, and the C<IPC::Shareable> module from CPAN.
-
-=item shutdown SOCKET,HOW
-
-Shuts down a socket connection in the manner indicated by HOW, which
-has the same interpretation as in the system call of the same name.
-
- shutdown(SOCKET, 0); # I/we have stopped reading data
- shutdown(SOCKET, 1); # I/we have stopped writing data
- shutdown(SOCKET, 2); # I/we have stopped using this socket
-
-This is useful with sockets when you want to tell the other
-side you're done writing but not done reading, or vice versa.
-It's also a more insistent form of close because it also
-disables the file descriptor in any forked copies in other
-processes.
-
-=item sin EXPR
-
-=item sin
-
-Returns the sine of EXPR (expressed in radians). If EXPR is omitted,
-returns sine of C<$_>.
-
-For the inverse sine operation, you may use the C<Math::Trig::asin>
-function, or use this relation:
-
- sub asin { atan2($_[0], sqrt(1 - $_[0] * $_[0])) }
-
-=item sleep EXPR
-
-=item sleep
-
-Causes the script to sleep for EXPR seconds, or forever if no EXPR.
-May be interrupted if the process receives a signal such as C<SIGALRM>.
-Returns the number of seconds actually slept. You probably cannot
-mix C<alarm> and C<sleep> calls, because C<sleep> is often implemented
-using C<alarm>.
-
-On some older systems, it may sleep up to a full second less than what
-you requested, depending on how it counts seconds. Most modern systems
-always sleep the full amount. They may appear to sleep longer than that,
-however, because your process might not be scheduled right away in a
-busy multitasking system.
-
-For delays of finer granularity than one second, you may use Perl's
-C<syscall> interface to access setitimer(2) if your system supports
-it, or else see L</select> above. The Time::HiRes module from CPAN
-may also help.
-
-See also the POSIX module's C<pause> function.
-
-=item socket SOCKET,DOMAIN,TYPE,PROTOCOL
-
-Opens a socket of the specified kind and attaches it to filehandle
-SOCKET. DOMAIN, TYPE, and PROTOCOL are specified the same as for
-the system call of the same name. You should C<use Socket> first
-to get the proper definitions imported. See the examples in
-L<perlipc/"Sockets: Client/Server Communication">.
-
-On systems that support a close-on-exec flag on files, the flag will
-be set for the newly opened file descriptor, as determined by the
-value of $^F. See L<perlvar/$^F>.
-
-=item socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
-
-Creates an unnamed pair of sockets in the specified domain, of the
-specified type. DOMAIN, TYPE, and PROTOCOL are specified the same as
-for the system call of the same name. If unimplemented, yields a fatal
-error. Returns true if successful.
-
-On systems that support a close-on-exec flag on files, the flag will
-be set for the newly opened file descriptors, as determined by the value
-of $^F. See L<perlvar/$^F>.
-
-Some systems defined C<pipe> in terms of C<socketpair>, in which a call
-to C<pipe(Rdr, Wtr)> is essentially:
-
- use Socket;
- socketpair(Rdr, Wtr, AF_UNIX, SOCK_STREAM, PF_UNSPEC);
- shutdown(Rdr, 1); # no more writing for reader
- shutdown(Wtr, 0); # no more reading for writer
-
-See L<perlipc> for an example of socketpair use.
-
-=item sort SUBNAME LIST
-
-=item sort BLOCK LIST
-
-=item sort LIST
-
-Sorts the LIST and returns the sorted list value. If SUBNAME or BLOCK
-is omitted, C<sort>s in standard string comparison order. If SUBNAME is
-specified, it gives the name of a subroutine that returns an integer
-less than, equal to, or greater than C<0>, depending on how the elements
-of the list are to be ordered. (The C<< <=> >> and C<cmp>
-operators are extremely useful in such routines.) SUBNAME may be a
-scalar variable name (unsubscripted), in which case the value provides
-the name of (or a reference to) the actual subroutine to use. In place
-of a SUBNAME, you can provide a BLOCK as an anonymous, in-line sort
-subroutine.
-
-If the subroutine's prototype is C<($$)>, the elements to be compared
-are passed by reference in C<@_>, as for a normal subroutine. This is
-slower than unprototyped subroutines, where the elements to be
-compared are passed into the subroutine
-as the package global variables $a and $b (see example below). Note that
-in the latter case, it is usually counter-productive to declare $a and
-$b as lexicals.
-
-In either case, the subroutine may not be recursive. The values to be
-compared are always passed by reference, so don't modify them.
-
-You also cannot exit out of the sort block or subroutine using any of the
-loop control operators described in L<perlsyn> or with C<goto>.
-
-When C<use locale> is in effect, C<sort LIST> sorts LIST according to the
-current collation locale. See L<perllocale>.
-
-Examples:
-
- # sort lexically
- @articles = sort @files;
-
- # same thing, but with explicit sort routine
- @articles = sort {$a cmp $b} @files;
-
- # now case-insensitively
- @articles = sort {uc($a) cmp uc($b)} @files;
-
- # same thing in reversed order
- @articles = sort {$b cmp $a} @files;
-
- # sort numerically ascending
- @articles = sort {$a <=> $b} @files;
-
- # sort numerically descending
- @articles = sort {$b <=> $a} @files;
-
- # this sorts the %age hash by value instead of key
- # using an in-line function
- @eldest = sort { $age{$b} <=> $age{$a} } keys %age;
-
- # sort using explicit subroutine name
- sub byage {
- $age{$a} <=> $age{$b}; # presuming numeric
- }
- @sortedclass = sort byage @class;
-
- sub backwards { $b cmp $a }
- @harry = qw(dog cat x Cain Abel);
- @george = qw(gone chased yz Punished Axed);
- print sort @harry;
- # prints AbelCaincatdogx
- print sort backwards @harry;
- # prints xdogcatCainAbel
- print sort @george, 'to', @harry;
- # prints AbelAxedCainPunishedcatchaseddoggonetoxyz
-
- # inefficiently sort by descending numeric compare using
- # the first integer after the first = sign, or the
- # whole record case-insensitively otherwise
-
- @new = sort {
- ($b =~ /=(\d+)/)[0] <=> ($a =~ /=(\d+)/)[0]
- ||
- uc($a) cmp uc($b)
- } @old;
-
- # same thing, but much more efficiently;
- # we'll build auxiliary indices instead
- # for speed
- @nums = @caps = ();
- for (@old) {
- push @nums, /=(\d+)/;
- push @caps, uc($_);
- }
-
- @new = @old[ sort {
- $nums[$b] <=> $nums[$a]
- ||
- $caps[$a] cmp $caps[$b]
- } 0..$#old
- ];
-
- # same thing, but without any temps
- @new = map { $_->[0] }
- sort { $b->[1] <=> $a->[1]
- ||
- $a->[2] cmp $b->[2]
- } map { [$_, /=(\d+)/, uc($_)] } @old;
-
- # using a prototype allows you to use any comparison subroutine
- # as a sort subroutine (including other package's subroutines)
- package other;
- sub backwards ($$) { $_[1] cmp $_[0]; } # $a and $b are not set here
-
- package main;
- @new = sort other::backwards @old;
-
-If you're using strict, you I<must not> declare $a
-and $b as lexicals. They are package globals. That means
-if you're in the C<main> package and type
-
- @articles = sort {$b <=> $a} @files;
-
-then C<$a> and C<$b> are C<$main::a> and C<$main::b> (or C<$::a> and C<$::b>),
-but if you're in the C<FooPack> package, it's the same as typing
-
- @articles = sort {$FooPack::b <=> $FooPack::a} @files;
-
-The comparison function is required to behave. If it returns
-inconsistent results (sometimes saying C<$x[1]> is less than C<$x[2]> and
-sometimes saying the opposite, for example) the results are not
-well-defined.
-
-=item splice ARRAY,OFFSET,LENGTH,LIST
-
-=item splice ARRAY,OFFSET,LENGTH
-
-=item splice ARRAY,OFFSET
-
-=item splice ARRAY
-
-Removes the elements designated by OFFSET and LENGTH from an array, and
-replaces them with the elements of LIST, if any. In list context,
-returns the elements removed from the array. In scalar context,
-returns the last element removed, or C<undef> if no elements are
-removed. The array grows or shrinks as necessary.
-If OFFSET is negative then it starts that far from the end of the array.
-If LENGTH is omitted, removes everything from OFFSET onward.
-If LENGTH is negative, leaves that many elements off the end of the array.
-If both OFFSET and LENGTH are omitted, removes everything.
-
-The following equivalences hold (assuming C<$[ == 0>):
-
- push(@a,$x,$y) splice(@a,@a,0,$x,$y)
- pop(@a) splice(@a,-1)
- shift(@a) splice(@a,0,1)
- unshift(@a,$x,$y) splice(@a,0,0,$x,$y)
- $a[$x] = $y splice(@a,$x,1,$y)
-
-Example, assuming array lengths are passed before arrays:
-
- sub aeq { # compare two list values
- my(@a) = splice(@_,0,shift);
- my(@b) = splice(@_,0,shift);
- return 0 unless @a == @b; # same len?
- while (@a) {
- return 0 if pop(@a) ne pop(@b);
- }
- return 1;
- }
- if (&aeq($len,@foo[1..$len],0+@bar,@bar)) { ... }
-
-=item split /PATTERN/,EXPR,LIMIT
-
-=item split /PATTERN/,EXPR
-
-=item split /PATTERN/
-
-=item split
-
-Splits a string into a list of strings and returns that list. By default,
-empty leading fields are preserved, and empty trailing ones are deleted.
-
-In scalar context, returns the number of fields found and splits into
-the C<@_> array. Use of split in scalar context is deprecated, however,
-because it clobbers your subroutine arguments.
-
-If EXPR is omitted, splits the C<$_> string. If PATTERN is also omitted,
-splits on whitespace (after skipping any leading whitespace). Anything
-matching PATTERN is taken to be a delimiter separating the fields. (Note
-that the delimiter may be longer than one character.)
-
-If LIMIT is specified and positive, splits into no more than that
-many fields (though it may split into fewer). If LIMIT is unspecified
-or zero, trailing null fields are stripped (which potential users
-of C<pop> would do well to remember). If LIMIT is negative, it is
-treated as if an arbitrarily large LIMIT had been specified.
-
-A pattern matching the null string (not to be confused with
-a null pattern C<//>, which is just one member of the set of patterns
-matching a null string) will split the value of EXPR into separate
-characters at each point it matches that way. For example:
-
- print join(':', split(/ */, 'hi there'));
-
-produces the output 'h:i:t:h:e:r:e'.
-
-Empty leading (or trailing) fields are produced when there positive width
-matches at the beginning (or end) of the string; a zero-width match at the
-beginning (or end) of the string does not produce an empty field. For
-example:
-
- print join(':', split(/(?=\w)/, 'hi there!'));
-
-produces the output 'h:i :t:h:e:r:e!'.
-
-The LIMIT parameter can be used to split a line partially
-
- ($login, $passwd, $remainder) = split(/:/, $_, 3);
-
-When assigning to a list, if LIMIT is omitted, Perl supplies a LIMIT
-one larger than the number of variables in the list, to avoid
-unnecessary work. For the list above LIMIT would have been 4 by
-default. In time critical applications it behooves you not to split
-into more fields than you really need.
-
-If the PATTERN contains parentheses, additional list elements are
-created from each matching substring in the delimiter.
-
- split(/([,-])/, "1-10,20", 3);
-
-produces the list value
-
- (1, '-', 10, ',', 20)
-
-If you had the entire header of a normal Unix email message in $header,
-you could split it up into fields and their values this way:
-
- $header =~ s/\n\s+/ /g; # fix continuation lines
- %hdrs = (UNIX_FROM => split /^(\S*?):\s*/m, $header);
-
-The pattern C</PATTERN/> may be replaced with an expression to specify
-patterns that vary at runtime. (To do runtime compilation only once,
-use C</$variable/o>.)
-
-As a special case, specifying a PATTERN of space (C<' '>) will split on
-white space just as C<split> with no arguments does. Thus, C<split(' ')> can
-be used to emulate B<awk>'s default behavior, whereas C<split(/ /)>
-will give you as many null initial fields as there are leading spaces.
-A C<split> on C</\s+/> is like a C<split(' ')> except that any leading
-whitespace produces a null first field. A C<split> with no arguments
-really does a C<split(' ', $_)> internally.
-
-A PATTERN of C</^/> is treated as if it were C</^/m>, since it isn't
-much use otherwise.
-
-Example:
-
- open(PASSWD, '/etc/passwd');
- while (<PASSWD>) {
- chomp;
- ($login, $passwd, $uid, $gid,
- $gcos, $home, $shell) = split(/:/);
- #...
- }
-
-
-=item sprintf FORMAT, LIST
-
-Returns a string formatted by the usual C<printf> conventions of the C
-library function C<sprintf>. See below for more details
-and see L<sprintf(3)> or L<printf(3)> on your system for an explanation of
-the general principles.
-
-For example:
-
- # Format number with up to 8 leading zeroes
- $result = sprintf("%08d", $number);
-
- # Round number to 3 digits after decimal point
- $rounded = sprintf("%.3f", $number);
-
-Perl does its own C<sprintf> formatting--it emulates the C
-function C<sprintf>, but it doesn't use it (except for floating-point
-numbers, and even then only the standard modifiers are allowed). As a
-result, any non-standard extensions in your local C<sprintf> are not
-available from Perl.
-
-Unlike C<printf>, C<sprintf> does not do what you probably mean when you
-pass it an array as your first argument. The array is given scalar context,
-and instead of using the 0th element of the array as the format, Perl will
-use the count of elements in the array as the format, which is almost never
-useful.
-
-Perl's C<sprintf> permits the following universally-known conversions:
-
- %% a percent sign
- %c a character with the given number
- %s a string
- %d a signed integer, in decimal
- %u an unsigned integer, in decimal
- %o an unsigned integer, in octal
- %x an unsigned integer, in hexadecimal
- %e a floating-point number, in scientific notation
- %f a floating-point number, in fixed decimal notation
- %g a floating-point number, in %e or %f notation
-
-In addition, Perl permits the following widely-supported conversions:
-
- %X like %x, but using upper-case letters
- %E like %e, but using an upper-case "E"
- %G like %g, but with an upper-case "E" (if applicable)
- %b an unsigned integer, in binary
- %p a pointer (outputs the Perl value's address in hexadecimal)
- %n special: *stores* the number of characters output so far
- into the next variable in the parameter list
-
-Finally, for backward (and we do mean "backward") compatibility, Perl
-permits these unnecessary but widely-supported conversions:
-
- %i a synonym for %d
- %D a synonym for %ld
- %U a synonym for %lu
- %O a synonym for %lo
- %F a synonym for %f
-
-Note that the number of exponent digits in the scientific notation by
-C<%e>, C<%E>, C<%g> and C<%G> for numbers with the modulus of the
-exponent less than 100 is system-dependent: it may be three or less
-(zero-padded as necessary). In other words, 1.23 times ten to the
-99th may be either "1.23e99" or "1.23e099".
-
-Perl permits the following universally-known flags between the C<%>
-and the conversion letter:
-
- space prefix positive number with a space
- + prefix positive number with a plus sign
- - left-justify within the field
- 0 use zeros, not spaces, to right-justify
- # prefix non-zero octal with "0", non-zero hex with "0x"
- number minimum field width
- .number "precision": digits after decimal point for
- floating-point, max length for string, minimum length
- for integer
- l interpret integer as C type "long" or "unsigned long"
- h interpret integer as C type "short" or "unsigned short"
- If no flags, interpret integer as C type "int" or "unsigned"
-
-There are also two Perl-specific flags:
-
- V interpret integer as Perl's standard integer type
- v interpret string as a vector of integers, output as
- numbers separated either by dots, or by an arbitrary
- string received from the argument list when the flag
- is preceded by C<*>
-
-Where a number would appear in the flags, an asterisk (C<*>) may be
-used instead, in which case Perl uses the next item in the parameter
-list as the given number (that is, as the field width or precision).
-If a field width obtained through C<*> is negative, it has the same
-effect as the C<-> flag: left-justification.
-
-The C<v> flag is useful for displaying ordinal values of characters
-in arbitrary strings:
-
- printf "version is v%vd\n", $^V; # Perl's version
- printf "address is %*vX\n", ":", $addr; # IPv6 address
- printf "bits are %*vb\n", " ", $bits; # random bitstring
-
-If C<use locale> is in effect, the character used for the decimal
-point in formatted real numbers is affected by the LC_NUMERIC locale.
-See L<perllocale>.
-
-If Perl understands "quads" (64-bit integers) (this requires
-either that the platform natively support quads or that Perl
-be specifically compiled to support quads), the characters
-
- d u o x X b i D U O
-
-print quads, and they may optionally be preceded by
-
- ll L q
-
-For example
-
- %lld %16LX %qo
-
-You can find out whether your Perl supports quads via L<Config>:
-
- use Config;
- ($Config{use64bitint} eq 'define' || $Config{longsize} == 8) &&
- print "quads\n";
-
-If Perl understands "long doubles" (this requires that the platform
-support long doubles), the flags
-
- e f g E F G
-
-may optionally be preceded by
-
- ll L
-
-For example
-
- %llf %Lg
-
-You can find out whether your Perl supports long doubles via L<Config>:
-
- use Config;
- $Config{d_longdbl} eq 'define' && print "long doubles\n";
-
-=item sqrt EXPR
-
-=item sqrt
-
-Return the square root of EXPR. If EXPR is omitted, returns square
-root of C<$_>. Only works on non-negative operands, unless you've
-loaded the standard Math::Complex module.
-
- use Math::Complex;
- print sqrt(-2); # prints 1.4142135623731i
-
-=item srand EXPR
-
-=item srand
-
-Sets the random number seed for the C<rand> operator. If EXPR is
-omitted, uses a semi-random value supplied by the kernel (if it supports
-the F</dev/urandom> device) or based on the current time and process
-ID, among other things. In versions of Perl prior to 5.004 the default
-seed was just the current C<time>. This isn't a particularly good seed,
-so many old programs supply their own seed value (often C<time ^ $$> or
-C<time ^ ($$ + ($$ << 15))>), but that isn't necessary any more.
-
-In fact, it's usually not necessary to call C<srand> at all, because if
-it is not called explicitly, it is called implicitly at the first use of
-the C<rand> operator. However, this was not the case in version of Perl
-before 5.004, so if your script will run under older Perl versions, it
-should call C<srand>.
-
-Note that you need something much more random than the default seed for
-cryptographic purposes. Checksumming the compressed output of one or more
-rapidly changing operating system status programs is the usual method. For
-example:
-
- srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
-
-If you're particularly concerned with this, see the C<Math::TrulyRandom>
-module in CPAN.
-
-Do I<not> call C<srand> multiple times in your program unless you know
-exactly what you're doing and why you're doing it. The point of the
-function is to "seed" the C<rand> function so that C<rand> can produce
-a different sequence each time you run your program. Just do it once at the
-top of your program, or you I<won't> get random numbers out of C<rand>!
-
-Frequently called programs (like CGI scripts) that simply use
-
- time ^ $$
-
-for a seed can fall prey to the mathematical property that
-
- a^b == (a+1)^(b+1)
-
-one-third of the time. So don't do that.
-
-=item stat FILEHANDLE
-
-=item stat EXPR
-
-=item stat
-
-Returns a 13-element list giving the status info for a file, either
-the file opened via FILEHANDLE, or named by EXPR. If EXPR is omitted,
-it stats C<$_>. Returns a null list if the stat fails. Typically used
-as follows:
-
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
- $atime,$mtime,$ctime,$blksize,$blocks)
- = stat($filename);
-
-Not all fields are supported on all filesystem types. Here are the
-meaning of the fields:
-
- 0 dev device number of filesystem
- 1 ino inode number
- 2 mode file mode (type and permissions)
- 3 nlink number of (hard) links to the file
- 4 uid numeric user ID of file's owner
- 5 gid numeric group ID of file's owner
- 6 rdev the device identifier (special files only)
- 7 size total size of file, in bytes
- 8 atime last access time in seconds since the epoch
- 9 mtime last modify time in seconds since the epoch
- 10 ctime inode change time (NOT creation time!) in seconds since the epoch
- 11 blksize preferred block size for file system I/O
- 12 blocks actual number of blocks allocated
-
-(The epoch was at 00:00 January 1, 1970 GMT.)
-
-If stat is passed the special filehandle consisting of an underline, no
-stat is done, but the current contents of the stat structure from the
-last stat or filetest are returned. Example:
-
- if (-x $file && (($d) = stat(_)) && $d < 0) {
- print "$file is executable NFS file\n";
- }
-
-(This works on machines only for which the device number is negative
-under NFS.)
-
-Because the mode contains both the file type and its permissions, you
-should mask off the file type portion and (s)printf using a C<"%o">
-if you want to see the real permissions.
-
- $mode = (stat($filename))[2];
- printf "Permissions are %04o\n", $mode & 07777;
-
-In scalar context, C<stat> returns a boolean value indicating success
-or failure, and, if successful, sets the information associated with
-the special filehandle C<_>.
-
-The File::stat module provides a convenient, by-name access mechanism:
-
- use File::stat;
- $sb = stat($filename);
- printf "File is %s, size is %s, perm %04o, mtime %s\n",
- $filename, $sb->size, $sb->mode & 07777,
- scalar localtime $sb->mtime;
-
-You can import symbolic mode constants (C<S_IF*>) and functions
-(C<S_IS*>) from the Fcntl module:
-
- use Fcntl ':mode';
-
- $mode = (stat($filename))[2];
-
- $user_rwx = ($mode & S_IRWXU) >> 6;
- $group_read = ($mode & S_IRGRP) >> 3;
- $other_execute = $mode & S_IXOTH;
-
- printf "Permissions are %04o\n", S_ISMODE($mode), "\n";
-
- $is_setuid = $mode & S_ISUID;
- $is_setgid = S_ISDIR($mode);
-
-You could write the last two using the C<-u> and C<-d> operators.
-The commonly available S_IF* constants are
-
- # Permissions: read, write, execute, for user, group, others.
-
- S_IRWXU S_IRUSR S_IWUSR S_IXUSR
- S_IRWXG S_IRGRP S_IWGRP S_IXGRP
- S_IRWXO S_IROTH S_IWOTH S_IXOTH
-
- # Setuid/Setgid/Stickiness.
-
- S_ISUID S_ISGID S_ISVTX S_ISTXT
-
- # File types. Not necessarily all are available on your system.
-
- S_IFREG S_IFDIR S_IFLNK S_IFBLK S_ISCHR S_IFIFO S_IFSOCK S_IFWHT S_ENFMT
-
- # The following are compatibility aliases for S_IRUSR, S_IWUSR, S_IXUSR.
-
- S_IREAD S_IWRITE S_IEXEC
-
-and the S_IF* functions are
-
- S_IFMODE($mode) the part of $mode containing the permission bits
- and the setuid/setgid/sticky bits
-
- S_IFMT($mode) the part of $mode containing the file type
- which can be bit-anded with e.g. S_IFREG
- or with the following functions
-
- # The operators -f, -d, -l, -b, -c, -p, and -s.
-
- S_ISREG($mode) S_ISDIR($mode) S_ISLNK($mode)
- S_ISBLK($mode) S_ISCHR($mode) S_ISFIFO($mode) S_ISSOCK($mode)
-
- # No direct -X operator counterpart, but for the first one
- # the -g operator is often equivalent. The ENFMT stands for
- # record flocking enforcement, a platform-dependent feature.
-
- S_ISENFMT($mode) S_ISWHT($mode)
-
-See your native chmod(2) and stat(2) documentation for more details
-about the S_* constants.
-
-=item study SCALAR
-
-=item study
-
-Takes extra time to study SCALAR (C<$_> if unspecified) in anticipation of
-doing many pattern matches on the string before it is next modified.
-This may or may not save time, depending on the nature and number of
-patterns you are searching on, and on the distribution of character
-frequencies in the string to be searched--you probably want to compare
-run times with and without it to see which runs faster. Those loops
-which scan for many short constant strings (including the constant
-parts of more complex patterns) will benefit most. You may have only
-one C<study> active at a time--if you study a different scalar the first
-is "unstudied". (The way C<study> works is this: a linked list of every
-character in the string to be searched is made, so we know, for
-example, where all the C<'k'> characters are. From each search string,
-the rarest character is selected, based on some static frequency tables
-constructed from some C programs and English text. Only those places
-that contain this "rarest" character are examined.)
-
-For example, here is a loop that inserts index producing entries
-before any line containing a certain pattern:
-
- while (<>) {
- study;
- print ".IX foo\n" if /\bfoo\b/;
- print ".IX bar\n" if /\bbar\b/;
- print ".IX blurfl\n" if /\bblurfl\b/;
- # ...
- print;
- }
-
-In searching for C</\bfoo\b/>, only those locations in C<$_> that contain C<f>
-will be looked at, because C<f> is rarer than C<o>. In general, this is
-a big win except in pathological cases. The only question is whether
-it saves you more time than it took to build the linked list in the
-first place.
-
-Note that if you have to look for strings that you don't know till
-runtime, you can build an entire loop as a string and C<eval> that to
-avoid recompiling all your patterns all the time. Together with
-undefining C<$/> to input entire files as one record, this can be very
-fast, often faster than specialized programs like fgrep(1). The following
-scans a list of files (C<@files>) for a list of words (C<@words>), and prints
-out the names of those files that contain a match:
-
- $search = 'while (<>) { study;';
- foreach $word (@words) {
- $search .= "++\$seen{\$ARGV} if /\\b$word\\b/;\n";
- }
- $search .= "}";
- @ARGV = @files;
- undef $/;
- eval $search; # this screams
- $/ = "\n"; # put back to normal input delimiter
- foreach $file (sort keys(%seen)) {
- print $file, "\n";
- }
-
-=item sub BLOCK
-
-=item sub NAME
-
-=item sub NAME BLOCK
-
-This is subroutine definition, not a real function I<per se>. With just a
-NAME (and possibly prototypes or attributes), it's just a forward declaration.
-Without a NAME, it's an anonymous function declaration, and does actually
-return a value: the CODE ref of the closure you just created. See L<perlsub>
-and L<perlref> for details.
-
-=item substr EXPR,OFFSET,LENGTH,REPLACEMENT
-
-=item substr EXPR,OFFSET,LENGTH
-
-=item substr EXPR,OFFSET
-
-Extracts a substring out of EXPR and returns it. First character is at
-offset C<0>, or whatever you've set C<$[> to (but don't do that).
-If OFFSET is negative (or more precisely, less than C<$[>), starts
-that far from the end of the string. If LENGTH is omitted, returns
-everything to the end of the string. If LENGTH is negative, leaves that
-many characters off the end of the string.
-
-You can use the substr() function as an lvalue, in which case EXPR
-must itself be an lvalue. If you assign something shorter than LENGTH,
-the string will shrink, and if you assign something longer than LENGTH,
-the string will grow to accommodate it. To keep the string the same
-length you may need to pad or chop your value using C<sprintf>.
-
-If OFFSET and LENGTH specify a substring that is partly outside the
-string, only the part within the string is returned. If the substring
-is beyond either end of the string, substr() returns the undefined
-value and produces a warning. When used as an lvalue, specifying a
-substring that is entirely outside the string is a fatal error.
-Here's an example showing the behavior for boundary cases:
-
- my $name = 'fred';
- substr($name, 4) = 'dy'; # $name is now 'freddy'
- my $null = substr $name, 6, 2; # returns '' (no warning)
- my $oops = substr $name, 7; # returns undef, with warning
- substr($name, 7) = 'gap'; # fatal error
-
-An alternative to using substr() as an lvalue is to specify the
-replacement string as the 4th argument. This allows you to replace
-parts of the EXPR and return what was there before in one operation,
-just as you can with splice().
-
-=item symlink OLDFILE,NEWFILE
-
-Creates a new filename symbolically linked to the old filename.
-Returns C<1> for success, C<0> otherwise. On systems that don't support
-symbolic links, produces a fatal error at run time. To check for that,
-use eval:
-
- $symlink_exists = eval { symlink("",""); 1 };
-
-=item syscall LIST
-
-Calls the system call specified as the first element of the list,
-passing the remaining elements as arguments to the system call. If
-unimplemented, produces a fatal error. The arguments are interpreted
-as follows: if a given argument is numeric, the argument is passed as
-an int. If not, the pointer to the string value is passed. You are
-responsible to make sure a string is pre-extended long enough to
-receive any result that might be written into a string. You can't use a
-string literal (or other read-only string) as an argument to C<syscall>
-because Perl has to assume that any string pointer might be written
-through. If your
-integer arguments are not literals and have never been interpreted in a
-numeric context, you may need to add C<0> to them to force them to look
-like numbers. This emulates the C<syswrite> function (or vice versa):
-
- require 'syscall.ph'; # may need to run h2ph
- $s = "hi there\n";
- syscall(&SYS_write, fileno(STDOUT), $s, length $s);
-
-Note that Perl supports passing of up to only 14 arguments to your system call,
-which in practice should usually suffice.
-
-Syscall returns whatever value returned by the system call it calls.
-If the system call fails, C<syscall> returns C<-1> and sets C<$!> (errno).
-Note that some system calls can legitimately return C<-1>. The proper
-way to handle such calls is to assign C<$!=0;> before the call and
-check the value of C<$!> if syscall returns C<-1>.
-
-There's a problem with C<syscall(&SYS_pipe)>: it returns the file
-number of the read end of the pipe it creates. There is no way
-to retrieve the file number of the other end. You can avoid this
-problem by using C<pipe> instead.
-
-=item sysopen FILEHANDLE,FILENAME,MODE
-
-=item sysopen FILEHANDLE,FILENAME,MODE,PERMS
-
-Opens the file whose filename is given by FILENAME, and associates it
-with FILEHANDLE. If FILEHANDLE is an expression, its value is used as
-the name of the real filehandle wanted. This function calls the
-underlying operating system's C<open> function with the parameters
-FILENAME, MODE, PERMS.
-
-The possible values and flag bits of the MODE parameter are
-system-dependent; they are available via the standard module C<Fcntl>.
-See the documentation of your operating system's C<open> to see which
-values and flag bits are available. You may combine several flags
-using the C<|>-operator.
-
-Some of the most common values are C<O_RDONLY> for opening the file in
-read-only mode, C<O_WRONLY> for opening the file in write-only mode,
-and C<O_RDWR> for opening the file in read-write mode, and.
-
-For historical reasons, some values work on almost every system
-supported by perl: zero means read-only, one means write-only, and two
-means read/write. We know that these values do I<not> work under
-OS/390 & VM/ESA Unix and on the Macintosh; you probably don't want to
-use them in new code.
-
-If the file named by FILENAME does not exist and the C<open> call creates
-it (typically because MODE includes the C<O_CREAT> flag), then the value of
-PERMS specifies the permissions of the newly created file. If you omit
-the PERMS argument to C<sysopen>, Perl uses the octal value C<0666>.
-These permission values need to be in octal, and are modified by your
-process's current C<umask>.
-
-In many systems the C<O_EXCL> flag is available for opening files in
-exclusive mode. This is B<not> locking: exclusiveness means here that
-if the file already exists, sysopen() fails. The C<O_EXCL> wins
-C<O_TRUNC>.
-
-Sometimes you may want to truncate an already-existing file: C<O_TRUNC>.
-
-You should seldom if ever use C<0644> as argument to C<sysopen>, because
-that takes away the user's option to have a more permissive umask.
-Better to omit it. See the perlfunc(1) entry on C<umask> for more
-on this.
-
-Note that C<sysopen> depends on the fdopen() C library function.
-On many UNIX systems, fdopen() is known to fail when file descriptors
-exceed a certain value, typically 255. If you need more file
-descriptors than that, consider rebuilding Perl to use the C<sfio>
-library, or perhaps using the POSIX::open() function.
-
-See L<perlopentut> for a kinder, gentler explanation of opening files.
-
-=item sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
-
-=item sysread FILEHANDLE,SCALAR,LENGTH
-
-Attempts to read LENGTH bytes of data into variable SCALAR from the
-specified FILEHANDLE, using the system call read(2). It bypasses stdio,
-so mixing this with other kinds of reads, C<print>, C<write>,
-C<seek>, C<tell>, or C<eof> can cause confusion because stdio
-usually buffers data. Returns the number of bytes actually read, C<0>
-at end of file, or undef if there was an error. SCALAR will be grown or
-shrunk so that the last byte actually read is the last byte of the
-scalar after the read.
-
-An OFFSET may be specified to place the read data at some place in the
-string other than the beginning. A negative OFFSET specifies
-placement at that many bytes counting backwards from the end of the
-string. A positive OFFSET greater than the length of SCALAR results
-in the string being padded to the required size with C<"\0"> bytes before
-the result of the read is appended.
-
-There is no syseof() function, which is ok, since eof() doesn't work
-very well on device files (like ttys) anyway. Use sysread() and check
-for a return value for 0 to decide whether you're done.
-
-=item sysseek FILEHANDLE,POSITION,WHENCE
-
-Sets FILEHANDLE's system position using the system call lseek(2). It
-bypasses stdio, so mixing this with reads (other than C<sysread>),
-C<print>, C<write>, C<seek>, C<tell>, or C<eof> may cause confusion.
-FILEHANDLE may be an expression whose value gives the name of the
-filehandle. The values for WHENCE are C<0> to set the new position to
-POSITION, C<1> to set the it to the current position plus POSITION,
-and C<2> to set it to EOF plus POSITION (typically negative). For
-WHENCE, you may also use the constants C<SEEK_SET>, C<SEEK_CUR>, and
-C<SEEK_END> (start of the file, current position, end of the file)
-from the Fcntl module.
-
-Returns the new position, or the undefined value on failure. A position
-of zero is returned as the string C<"0 but true">; thus C<sysseek> returns
-true on success and false on failure, yet you can still easily determine
-the new position.
-
-=item system LIST
-
-=item system PROGRAM LIST
-
-Does exactly the same thing as C<exec LIST>, except that a fork is
-done first, and the parent process waits for the child process to
-complete. Note that argument processing varies depending on the
-number of arguments. If there is more than one argument in LIST,
-or if LIST is an array with more than one value, starts the program
-given by the first element of the list with arguments given by the
-rest of the list. If there is only one scalar argument, the argument
-is checked for shell metacharacters, and if there are any, the
-entire argument is passed to the system's command shell for parsing
-(this is C</bin/sh -c> on Unix platforms, but varies on other
-platforms). If there are no shell metacharacters in the argument,
-it is split into words and passed directly to C<execvp>, which is
-more efficient.
-
-Beginning with v5.6.0, Perl will attempt to flush all files opened for
-output before any operation that may do a fork, but this may not be
-supported on some platforms (see L<perlport>). To be safe, you may need
-to set C<$|> ($AUTOFLUSH in English) or call the C<autoflush()> method
-of C<IO::Handle> on any open handles.
-
-The return value is the exit status of the program as
-returned by the C<wait> call. To get the actual exit value divide by
-256. See also L</exec>. This is I<not> what you want to use to capture
-the output from a command, for that you should use merely backticks or
-C<qx//>, as described in L<perlop/"`STRING`">. Return value of -1
-indicates a failure to start the program (inspect $! for the reason).
-
-Like C<exec>, C<system> allows you to lie to a program about its name if
-you use the C<system PROGRAM LIST> syntax. Again, see L</exec>.
-
-Because C<system> and backticks block C<SIGINT> and C<SIGQUIT>, killing the
-program they're running doesn't actually interrupt your program.
-
- @args = ("command", "arg1", "arg2");
- system(@args) == 0
- or die "system @args failed: $?"
-
-You can check all the failure possibilities by inspecting
-C<$?> like this:
-
- $exit_value = $? >> 8;
- $signal_num = $? & 127;
- $dumped_core = $? & 128;
-
-When the arguments get executed via the system shell, results
-and return codes will be subject to its quirks and capabilities.
-See L<perlop/"`STRING`"> and L</exec> for details.
-
-=item syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET
-
-=item syswrite FILEHANDLE,SCALAR,LENGTH
-
-=item syswrite FILEHANDLE,SCALAR
-
-Attempts to write LENGTH bytes of data from variable SCALAR to the
-specified FILEHANDLE, using the system call write(2). If LENGTH
-is not specified, writes whole SCALAR. It bypasses stdio, so mixing
-this with reads (other than C<sysread())>, C<print>, C<write>,
-C<seek>, C<tell>, or C<eof> may cause confusion because stdio
-usually buffers data. Returns the number of bytes actually written,
-or C<undef> if there was an error. If the LENGTH is greater than
-the available data in the SCALAR after the OFFSET, only as much
-data as is available will be written.
-
-An OFFSET may be specified to write the data from some part of the
-string other than the beginning. A negative OFFSET specifies writing
-that many bytes counting backwards from the end of the string. In the
-case the SCALAR is empty you can use OFFSET but only zero offset.
-
-=item tell FILEHANDLE
-
-=item tell
-
-Returns the current position for FILEHANDLE, or -1 on error. FILEHANDLE
-may be an expression whose value gives the name of the actual filehandle.
-If FILEHANDLE is omitted, assumes the file last read.
-
-The return value of tell() for the standard streams like the STDIN
-depends on the operating system: it may return -1 or something else.
-tell() on pipes, fifos, and sockets usually returns -1.
-
-There is no C<systell> function. Use C<sysseek(FH, 0, 1)> for that.
-
-=item telldir DIRHANDLE
-
-Returns the current position of the C<readdir> routines on DIRHANDLE.
-Value may be given to C<seekdir> to access a particular location in a
-directory. Has the same caveats about possible directory compaction as
-the corresponding system library routine.
-
-=item tie VARIABLE,CLASSNAME,LIST
-
-This function binds a variable to a package class that will provide the
-implementation for the variable. VARIABLE is the name of the variable
-to be enchanted. CLASSNAME is the name of a class implementing objects
-of correct type. Any additional arguments are passed to the C<new>
-method of the class (meaning C<TIESCALAR>, C<TIEHANDLE>, C<TIEARRAY>,
-or C<TIEHASH>). Typically these are arguments such as might be passed
-to the C<dbm_open()> function of C. The object returned by the C<new>
-method is also returned by the C<tie> function, which would be useful
-if you want to access other methods in CLASSNAME.
-
-Note that functions such as C<keys> and C<values> may return huge lists
-when used on large objects, like DBM files. You may prefer to use the
-C<each> function to iterate over such. Example:
-
- # print out history file offsets
- use NDBM_File;
- tie(%HIST, 'NDBM_File', '/usr/lib/news/history', 1, 0);
- while (($key,$val) = each %HIST) {
- print $key, ' = ', unpack('L',$val), "\n";
- }
- untie(%HIST);
-
-A class implementing a hash should have the following methods:
-
- TIEHASH classname, LIST
- FETCH this, key
- STORE this, key, value
- DELETE this, key
- CLEAR this
- EXISTS this, key
- FIRSTKEY this
- NEXTKEY this, lastkey
- DESTROY this
- UNTIE this
-
-A class implementing an ordinary array should have the following methods:
-
- TIEARRAY classname, LIST
- FETCH this, key
- STORE this, key, value
- FETCHSIZE this
- STORESIZE this, count
- CLEAR this
- PUSH this, LIST
- POP this
- SHIFT this
- UNSHIFT this, LIST
- SPLICE this, offset, length, LIST
- EXTEND this, count
- DESTROY this
- UNTIE this
-
-A class implementing a file handle should have the following methods:
-
- TIEHANDLE classname, LIST
- READ this, scalar, length, offset
- READLINE this
- GETC this
- WRITE this, scalar, length, offset
- PRINT this, LIST
- PRINTF this, format, LIST
- BINMODE this
- EOF this
- FILENO this
- SEEK this, position, whence
- TELL this
- OPEN this, mode, LIST
- CLOSE this
- DESTROY this
- UNTIE this
-
-A class implementing a scalar should have the following methods:
-
- TIESCALAR classname, LIST
- FETCH this,
- STORE this, value
- DESTROY this
- UNTIE this
-
-Not all methods indicated above need be implemented. See L<perltie>,
-L<Tie::Hash>, L<Tie::Array>, L<Tie::Scalar>, and L<Tie::Handle>.
-
-Unlike C<dbmopen>, the C<tie> function will not use or require a module
-for you--you need to do that explicitly yourself. See L<DB_File>
-or the F<Config> module for interesting C<tie> implementations.
-
-For further details see L<perltie>, L<"tied VARIABLE">.
-
-=item tied VARIABLE
-
-Returns a reference to the object underlying VARIABLE (the same value
-that was originally returned by the C<tie> call that bound the variable
-to a package.) Returns the undefined value if VARIABLE isn't tied to a
-package.
-
-=item time
-
-Returns the number of non-leap seconds since whatever time the system
-considers to be the epoch (that's 00:00:00, January 1, 1904 for MacOS,
-and 00:00:00 UTC, January 1, 1970 for most other systems).
-Suitable for feeding to C<gmtime> and C<localtime>.
-
-For measuring time in better granularity than one second,
-you may use either the Time::HiRes module from CPAN, or
-if you have gettimeofday(2), you may be able to use the
-C<syscall> interface of Perl, see L<perlfaq8> for details.
-
-=item times
-
-Returns a four-element list giving the user and system times, in
-seconds, for this process and the children of this process.
-
- ($user,$system,$cuser,$csystem) = times;
-
-=item tr///
-
-The transliteration operator. Same as C<y///>. See L<perlop>.
-
-=item truncate FILEHANDLE,LENGTH
-
-=item truncate EXPR,LENGTH
-
-Truncates the file opened on FILEHANDLE, or named by EXPR, to the
-specified length. Produces a fatal error if truncate isn't implemented
-on your system. Returns true if successful, the undefined value
-otherwise.
-
-=item uc EXPR
-
-=item uc
-
-Returns an uppercased version of EXPR. This is the internal function
-implementing the C<\U> escape in double-quoted strings.
-Respects current LC_CTYPE locale if C<use locale> in force. See L<perllocale>.
-Under Unicode (C<use utf8>) it uses the standard Unicode uppercase mappings. (It
-does not attempt to do titlecase mapping on initial letters. See C<ucfirst> for that.)
-
-If EXPR is omitted, uses C<$_>.
-
-=item ucfirst EXPR
-
-=item ucfirst
-
-Returns the value of EXPR with the first character
-in uppercase (titlecase in Unicode). This is
-the internal function implementing the C<\u> escape in double-quoted strings.
-Respects current LC_CTYPE locale if C<use locale> in force. See L<perllocale>
-and L<utf8>.
-
-If EXPR is omitted, uses C<$_>.
-
-=item umask EXPR
-
-=item umask
-
-Sets the umask for the process to EXPR and returns the previous value.
-If EXPR is omitted, merely returns the current umask.
-
-The Unix permission C<rwxr-x---> is represented as three sets of three
-bits, or three octal digits: C<0750> (the leading 0 indicates octal
-and isn't one of the digits). The C<umask> value is such a number
-representing disabled permissions bits. The permission (or "mode")
-values you pass C<mkdir> or C<sysopen> are modified by your umask, so
-even if you tell C<sysopen> to create a file with permissions C<0777>,
-if your umask is C<0022> then the file will actually be created with
-permissions C<0755>. If your C<umask> were C<0027> (group can't
-write; others can't read, write, or execute), then passing
-C<sysopen> C<0666> would create a file with mode C<0640> (C<0666 &~
-027> is C<0640>).
-
-Here's some advice: supply a creation mode of C<0666> for regular
-files (in C<sysopen>) and one of C<0777> for directories (in
-C<mkdir>) and executable files. This gives users the freedom of
-choice: if they want protected files, they might choose process umasks
-of C<022>, C<027>, or even the particularly antisocial mask of C<077>.
-Programs should rarely if ever make policy decisions better left to
-the user. The exception to this is when writing files that should be
-kept private: mail files, web browser cookies, I<.rhosts> files, and
-so on.
-
-If umask(2) is not implemented on your system and you are trying to
-restrict access for I<yourself> (i.e., (EXPR & 0700) > 0), produces a
-fatal error at run time. If umask(2) is not implemented and you are
-not trying to restrict access for yourself, returns C<undef>.
-
-Remember that a umask is a number, usually given in octal; it is I<not> a
-string of octal digits. See also L</oct>, if all you have is a string.
-
-=item undef EXPR
-
-=item undef
-
-Undefines the value of EXPR, which must be an lvalue. Use only on a
-scalar value, an array (using C<@>), a hash (using C<%>), a subroutine
-(using C<&>), or a typeglob (using <*>). (Saying C<undef $hash{$key}>
-will probably not do what you expect on most predefined variables or
-DBM list values, so don't do that; see L<delete>.) Always returns the
-undefined value. You can omit the EXPR, in which case nothing is
-undefined, but you still get an undefined value that you could, for
-instance, return from a subroutine, assign to a variable or pass as a
-parameter. Examples:
-
- undef $foo;
- undef $bar{'blurfl'}; # Compare to: delete $bar{'blurfl'};
- undef @ary;
- undef %hash;
- undef &mysub;
- undef *xyz; # destroys $xyz, @xyz, %xyz, &xyz, etc.
- return (wantarray ? (undef, $errmsg) : undef) if $they_blew_it;
- select undef, undef, undef, 0.25;
- ($a, $b, undef, $c) = &foo; # Ignore third value returned
-
-Note that this is a unary operator, not a list operator.
-
-=item unlink LIST
-
-=item unlink
-
-Deletes a list of files. Returns the number of files successfully
-deleted.
-
- $cnt = unlink 'a', 'b', 'c';
- unlink @goners;
- unlink <*.bak>;
-
-Note: C<unlink> will not delete directories unless you are superuser and
-the B<-U> flag is supplied to Perl. Even if these conditions are
-met, be warned that unlinking a directory can inflict damage on your
-filesystem. Use C<rmdir> instead.
-
-If LIST is omitted, uses C<$_>.
-
-=item unpack TEMPLATE,EXPR
-
-C<unpack> does the reverse of C<pack>: it takes a string
-and expands it out into a list of values.
-(In scalar context, it returns merely the first value produced.)
-
-The string is broken into chunks described by the TEMPLATE. Each chunk
-is converted separately to a value. Typically, either the string is a result
-of C<pack>, or the bytes of the string represent a C structure of some
-kind.
-
-The TEMPLATE has the same format as in the C<pack> function.
-Here's a subroutine that does substring:
-
- sub substr {
- my($what,$where,$howmuch) = @_;
- unpack("x$where a$howmuch", $what);
- }
-
-and then there's
-
- sub ordinal { unpack("c",$_[0]); } # same as ord()
-
-In addition to fields allowed in pack(), you may prefix a field with
-a %<number> to indicate that
-you want a <number>-bit checksum of the items instead of the items
-themselves. Default is a 16-bit checksum. Checksum is calculated by
-summing numeric values of expanded values (for string fields the sum of
-C<ord($char)> is taken, for bit fields the sum of zeroes and ones).
-
-For example, the following
-computes the same number as the System V sum program:
-
- $checksum = do {
- local $/; # slurp!
- unpack("%32C*",<>) % 65535;
- };
-
-The following efficiently counts the number of set bits in a bit vector:
-
- $setbits = unpack("%32b*", $selectmask);
-
-The C<p> and C<P> formats should be used with care. Since Perl
-has no way of checking whether the value passed to C<unpack()>
-corresponds to a valid memory location, passing a pointer value that's
-not known to be valid is likely to have disastrous consequences.
-
-If the repeat count of a field is larger than what the remainder of
-the input string allows, repeat count is decreased. If the input string
-is longer than one described by the TEMPLATE, the rest is ignored.
-
-See L</pack> for more examples and notes.
-
-=item untie VARIABLE
-
-Breaks the binding between a variable and a package. (See C<tie>.)
-
-=item unshift ARRAY,LIST
-
-Does the opposite of a C<shift>. Or the opposite of a C<push>,
-depending on how you look at it. Prepends list to the front of the
-array, and returns the new number of elements in the array.
-
- unshift(ARGV, '-e') unless $ARGV[0] =~ /^-/;
-
-Note the LIST is prepended whole, not one element at a time, so the
-prepended elements stay in the same order. Use C<reverse> to do the
-reverse.
-
-=item use Module VERSION LIST
-
-=item use Module VERSION
-
-=item use Module LIST
-
-=item use Module
-
-=item use VERSION
-
-Imports some semantics into the current package from the named module,
-generally by aliasing certain subroutine or variable names into your
-package. It is exactly equivalent to
-
- BEGIN { require Module; import Module LIST; }
-
-except that Module I<must> be a bareword.
-
-VERSION, which can be specified as a literal of the form v5.6.1, demands
-that the current version of Perl (C<$^V> or $PERL_VERSION) be at least
-as recent as that version. (For compatibility with older versions of Perl,
-a numeric literal will also be interpreted as VERSION.) If the version
-of the running Perl interpreter is less than VERSION, then an error
-message is printed and Perl exits immediately without attempting to
-parse the rest of the file. Compare with L</require>, which can do a
-similar check at run time.
-
- use v5.6.1; # compile time version check
- use 5.6.1; # ditto
- use 5.005_03; # float version allowed for compatibility
-
-This is often useful if you need to check the current Perl version before
-C<use>ing library modules that have changed in incompatible ways from
-older versions of Perl. (We try not to do this more than we have to.)
-
-The C<BEGIN> forces the C<require> and C<import> to happen at compile time. The
-C<require> makes sure the module is loaded into memory if it hasn't been
-yet. The C<import> is not a builtin--it's just an ordinary static method
-call into the C<Module> package to tell the module to import the list of
-features back into the current package. The module can implement its
-C<import> method any way it likes, though most modules just choose to
-derive their C<import> method via inheritance from the C<Exporter> class that
-is defined in the C<Exporter> module. See L<Exporter>. If no C<import>
-method can be found then the call is skipped.
-
-If you do not want to call the package's C<import> method (for instance,
-to stop your namespace from being altered), explicitly supply the empty list:
-
- use Module ();
-
-That is exactly equivalent to
-
- BEGIN { require Module }
-
-If the VERSION argument is present between Module and LIST, then the
-C<use> will call the VERSION method in class Module with the given
-version as an argument. The default VERSION method, inherited from
-the UNIVERSAL class, croaks if the given version is larger than the
-value of the variable C<$Module::VERSION>.
-
-Again, there is a distinction between omitting LIST (C<import> called
-with no arguments) and an explicit empty LIST C<()> (C<import> not
-called). Note that there is no comma after VERSION!
-
-Because this is a wide-open interface, pragmas (compiler directives)
-are also implemented this way. Currently implemented pragmas are:
-
- use constant;
- use diagnostics;
- use integer;
- use sigtrap qw(SEGV BUS);
- use strict qw(subs vars refs);
- use subs qw(afunc blurfl);
- use warnings qw(all);
-
-Some of these pseudo-modules import semantics into the current
-block scope (like C<strict> or C<integer>, unlike ordinary modules,
-which import symbols into the current package (which are effective
-through the end of the file).
-
-There's a corresponding C<no> command that unimports meanings imported
-by C<use>, i.e., it calls C<unimport Module LIST> instead of C<import>.
-
- no integer;
- no strict 'refs';
- no warnings;
-
-If no C<unimport> method can be found the call fails with a fatal error.
-
-See L<perlmodlib> for a list of standard modules and pragmas. See L<perlrun>
-for the C<-M> and C<-m> command-line options to perl that give C<use>
-functionality from the command-line.
-
-=item utime LIST
-
-Changes the access and modification times on each file of a list of
-files. The first two elements of the list must be the NUMERICAL access
-and modification times, in that order. Returns the number of files
-successfully changed. The inode change time of each file is set
-to the current time. This code has the same effect as the C<touch>
-command if the files already exist:
-
- #!/usr/bin/perl
- $now = time;
- utime $now, $now, @ARGV;
-
-=item values HASH
-
-Returns a list consisting of all the values of the named hash. (In a
-scalar context, returns the number of values.) The values are
-returned in an apparently random order. The actual random order is
-subject to change in future versions of perl, but it is guaranteed to
-be the same order as either the C<keys> or C<each> function would
-produce on the same (unmodified) hash.
-
-Note that the values are not copied, which means modifying them will
-modify the contents of the hash:
-
- for (values %hash) { s/foo/bar/g } # modifies %hash values
- for (@hash{keys %hash}) { s/foo/bar/g } # same
-
-As a side effect, calling values() resets the HASH's internal iterator.
-See also C<keys>, C<each>, and C<sort>.
-
-=item vec EXPR,OFFSET,BITS
-
-Treats the string in EXPR as a bit vector made up of elements of
-width BITS, and returns the value of the element specified by OFFSET
-as an unsigned integer. BITS therefore specifies the number of bits
-that are reserved for each element in the bit vector. This must
-be a power of two from 1 to 32 (or 64, if your platform supports
-that).
-
-If BITS is 8, "elements" coincide with bytes of the input string.
-
-If BITS is 16 or more, bytes of the input string are grouped into chunks
-of size BITS/8, and each group is converted to a number as with
-pack()/unpack() with big-endian formats C<n>/C<N> (and analogously
-for BITS==64). See L<"pack"> for details.
-
-If bits is 4 or less, the string is broken into bytes, then the bits
-of each byte are broken into 8/BITS groups. Bits of a byte are
-numbered in a little-endian-ish way, as in C<0x01>, C<0x02>,
-C<0x04>, C<0x08>, C<0x10>, C<0x20>, C<0x40>, C<0x80>. For example,
-breaking the single input byte C<chr(0x36)> into two groups gives a list
-C<(0x6, 0x3)>; breaking it into 4 groups gives C<(0x2, 0x1, 0x3, 0x0)>.
-
-C<vec> may also be assigned to, in which case parentheses are needed
-to give the expression the correct precedence as in
-
- vec($image, $max_x * $x + $y, 8) = 3;
-
-If the selected element is outside the string, the value 0 is returned.
-If an element off the end of the string is written to, Perl will first
-extend the string with sufficiently many zero bytes. It is an error
-to try to write off the beginning of the string (i.e. negative OFFSET).
-
-The string should not contain any character with the value > 255 (which
-can only happen if you're using UTF8 encoding). If it does, it will be
-treated as something which is not UTF8 encoded. When the C<vec> was
-assigned to, other parts of your program will also no longer consider the
-string to be UTF8 encoded. In other words, if you do have such characters
-in your string, vec() will operate on the actual byte string, and not the
-conceptual character string.
-
-Strings created with C<vec> can also be manipulated with the logical
-operators C<|>, C<&>, C<^>, and C<~>. These operators will assume a bit
-vector operation is desired when both operands are strings.
-See L<perlop/"Bitwise String Operators">.
-
-The following code will build up an ASCII string saying C<'PerlPerlPerl'>.
-The comments show the string after each step. Note that this code works
-in the same way on big-endian or little-endian machines.
-
- my $foo = '';
- vec($foo, 0, 32) = 0x5065726C; # 'Perl'
-
- # $foo eq "Perl" eq "\x50\x65\x72\x6C", 32 bits
- print vec($foo, 0, 8); # prints 80 == 0x50 == ord('P')
-
- vec($foo, 2, 16) = 0x5065; # 'PerlPe'
- vec($foo, 3, 16) = 0x726C; # 'PerlPerl'
- vec($foo, 8, 8) = 0x50; # 'PerlPerlP'
- vec($foo, 9, 8) = 0x65; # 'PerlPerlPe'
- vec($foo, 20, 4) = 2; # 'PerlPerlPe' . "\x02"
- vec($foo, 21, 4) = 7; # 'PerlPerlPer'
- # 'r' is "\x72"
- vec($foo, 45, 2) = 3; # 'PerlPerlPer' . "\x0c"
- vec($foo, 93, 1) = 1; # 'PerlPerlPer' . "\x2c"
- vec($foo, 94, 1) = 1; # 'PerlPerlPerl'
- # 'l' is "\x6c"
-
-To transform a bit vector into a string or list of 0's and 1's, use these:
-
- $bits = unpack("b*", $vector);
- @bits = split(//, unpack("b*", $vector));
-
-If you know the exact length in bits, it can be used in place of the C<*>.
-
-Here is an example to illustrate how the bits actually fall in place:
-
- #!/usr/bin/perl -wl
-
- print <<'EOT';
- 0 1 2 3
- unpack("V",$_) 01234567890123456789012345678901
- ------------------------------------------------------------------
- EOT
-
- for $w (0..3) {
- $width = 2**$w;
- for ($shift=0; $shift < $width; ++$shift) {
- for ($off=0; $off < 32/$width; ++$off) {
- $str = pack("B*", "0"x32);
- $bits = (1<<$shift);
- vec($str, $off, $width) = $bits;
- $res = unpack("b*",$str);
- $val = unpack("V", $str);
- write;
- }
- }
- }
-
- format STDOUT =
- vec($_,@#,@#) = @<< == @######### @>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- $off, $width, $bits, $val, $res
- .
- __END__
-
-Regardless of the machine architecture on which it is run, the above
-example should print the following table:
-
- 0 1 2 3
- unpack("V",$_) 01234567890123456789012345678901
- ------------------------------------------------------------------
- vec($_, 0, 1) = 1 == 1 10000000000000000000000000000000
- vec($_, 1, 1) = 1 == 2 01000000000000000000000000000000
- vec($_, 2, 1) = 1 == 4 00100000000000000000000000000000
- vec($_, 3, 1) = 1 == 8 00010000000000000000000000000000
- vec($_, 4, 1) = 1 == 16 00001000000000000000000000000000
- vec($_, 5, 1) = 1 == 32 00000100000000000000000000000000
- vec($_, 6, 1) = 1 == 64 00000010000000000000000000000000
- vec($_, 7, 1) = 1 == 128 00000001000000000000000000000000
- vec($_, 8, 1) = 1 == 256 00000000100000000000000000000000
- vec($_, 9, 1) = 1 == 512 00000000010000000000000000000000
- vec($_,10, 1) = 1 == 1024 00000000001000000000000000000000
- vec($_,11, 1) = 1 == 2048 00000000000100000000000000000000
- vec($_,12, 1) = 1 == 4096 00000000000010000000000000000000
- vec($_,13, 1) = 1 == 8192 00000000000001000000000000000000
- vec($_,14, 1) = 1 == 16384 00000000000000100000000000000000
- vec($_,15, 1) = 1 == 32768 00000000000000010000000000000000
- vec($_,16, 1) = 1 == 65536 00000000000000001000000000000000
- vec($_,17, 1) = 1 == 131072 00000000000000000100000000000000
- vec($_,18, 1) = 1 == 262144 00000000000000000010000000000000
- vec($_,19, 1) = 1 == 524288 00000000000000000001000000000000
- vec($_,20, 1) = 1 == 1048576 00000000000000000000100000000000
- vec($_,21, 1) = 1 == 2097152 00000000000000000000010000000000
- vec($_,22, 1) = 1 == 4194304 00000000000000000000001000000000
- vec($_,23, 1) = 1 == 8388608 00000000000000000000000100000000
- vec($_,24, 1) = 1 == 16777216 00000000000000000000000010000000
- vec($_,25, 1) = 1 == 33554432 00000000000000000000000001000000
- vec($_,26, 1) = 1 == 67108864 00000000000000000000000000100000
- vec($_,27, 1) = 1 == 134217728 00000000000000000000000000010000
- vec($_,28, 1) = 1 == 268435456 00000000000000000000000000001000
- vec($_,29, 1) = 1 == 536870912 00000000000000000000000000000100
- vec($_,30, 1) = 1 == 1073741824 00000000000000000000000000000010
- vec($_,31, 1) = 1 == 2147483648 00000000000000000000000000000001
- vec($_, 0, 2) = 1 == 1 10000000000000000000000000000000
- vec($_, 1, 2) = 1 == 4 00100000000000000000000000000000
- vec($_, 2, 2) = 1 == 16 00001000000000000000000000000000
- vec($_, 3, 2) = 1 == 64 00000010000000000000000000000000
- vec($_, 4, 2) = 1 == 256 00000000100000000000000000000000
- vec($_, 5, 2) = 1 == 1024 00000000001000000000000000000000
- vec($_, 6, 2) = 1 == 4096 00000000000010000000000000000000
- vec($_, 7, 2) = 1 == 16384 00000000000000100000000000000000
- vec($_, 8, 2) = 1 == 65536 00000000000000001000000000000000
- vec($_, 9, 2) = 1 == 262144 00000000000000000010000000000000
- vec($_,10, 2) = 1 == 1048576 00000000000000000000100000000000
- vec($_,11, 2) = 1 == 4194304 00000000000000000000001000000000
- vec($_,12, 2) = 1 == 16777216 00000000000000000000000010000000
- vec($_,13, 2) = 1 == 67108864 00000000000000000000000000100000
- vec($_,14, 2) = 1 == 268435456 00000000000000000000000000001000
- vec($_,15, 2) = 1 == 1073741824 00000000000000000000000000000010
- vec($_, 0, 2) = 2 == 2 01000000000000000000000000000000
- vec($_, 1, 2) = 2 == 8 00010000000000000000000000000000
- vec($_, 2, 2) = 2 == 32 00000100000000000000000000000000
- vec($_, 3, 2) = 2 == 128 00000001000000000000000000000000
- vec($_, 4, 2) = 2 == 512 00000000010000000000000000000000
- vec($_, 5, 2) = 2 == 2048 00000000000100000000000000000000
- vec($_, 6, 2) = 2 == 8192 00000000000001000000000000000000
- vec($_, 7, 2) = 2 == 32768 00000000000000010000000000000000
- vec($_, 8, 2) = 2 == 131072 00000000000000000100000000000000
- vec($_, 9, 2) = 2 == 524288 00000000000000000001000000000000
- vec($_,10, 2) = 2 == 2097152 00000000000000000000010000000000
- vec($_,11, 2) = 2 == 8388608 00000000000000000000000100000000
- vec($_,12, 2) = 2 == 33554432 00000000000000000000000001000000
- vec($_,13, 2) = 2 == 134217728 00000000000000000000000000010000
- vec($_,14, 2) = 2 == 536870912 00000000000000000000000000000100
- vec($_,15, 2) = 2 == 2147483648 00000000000000000000000000000001
- vec($_, 0, 4) = 1 == 1 10000000000000000000000000000000
- vec($_, 1, 4) = 1 == 16 00001000000000000000000000000000
- vec($_, 2, 4) = 1 == 256 00000000100000000000000000000000
- vec($_, 3, 4) = 1 == 4096 00000000000010000000000000000000
- vec($_, 4, 4) = 1 == 65536 00000000000000001000000000000000
- vec($_, 5, 4) = 1 == 1048576 00000000000000000000100000000000
- vec($_, 6, 4) = 1 == 16777216 00000000000000000000000010000000
- vec($_, 7, 4) = 1 == 268435456 00000000000000000000000000001000
- vec($_, 0, 4) = 2 == 2 01000000000000000000000000000000
- vec($_, 1, 4) = 2 == 32 00000100000000000000000000000000
- vec($_, 2, 4) = 2 == 512 00000000010000000000000000000000
- vec($_, 3, 4) = 2 == 8192 00000000000001000000000000000000
- vec($_, 4, 4) = 2 == 131072 00000000000000000100000000000000
- vec($_, 5, 4) = 2 == 2097152 00000000000000000000010000000000
- vec($_, 6, 4) = 2 == 33554432 00000000000000000000000001000000
- vec($_, 7, 4) = 2 == 536870912 00000000000000000000000000000100
- vec($_, 0, 4) = 4 == 4 00100000000000000000000000000000
- vec($_, 1, 4) = 4 == 64 00000010000000000000000000000000
- vec($_, 2, 4) = 4 == 1024 00000000001000000000000000000000
- vec($_, 3, 4) = 4 == 16384 00000000000000100000000000000000
- vec($_, 4, 4) = 4 == 262144 00000000000000000010000000000000
- vec($_, 5, 4) = 4 == 4194304 00000000000000000000001000000000
- vec($_, 6, 4) = 4 == 67108864 00000000000000000000000000100000
- vec($_, 7, 4) = 4 == 1073741824 00000000000000000000000000000010
- vec($_, 0, 4) = 8 == 8 00010000000000000000000000000000
- vec($_, 1, 4) = 8 == 128 00000001000000000000000000000000
- vec($_, 2, 4) = 8 == 2048 00000000000100000000000000000000
- vec($_, 3, 4) = 8 == 32768 00000000000000010000000000000000
- vec($_, 4, 4) = 8 == 524288 00000000000000000001000000000000
- vec($_, 5, 4) = 8 == 8388608 00000000000000000000000100000000
- vec($_, 6, 4) = 8 == 134217728 00000000000000000000000000010000
- vec($_, 7, 4) = 8 == 2147483648 00000000000000000000000000000001
- vec($_, 0, 8) = 1 == 1 10000000000000000000000000000000
- vec($_, 1, 8) = 1 == 256 00000000100000000000000000000000
- vec($_, 2, 8) = 1 == 65536 00000000000000001000000000000000
- vec($_, 3, 8) = 1 == 16777216 00000000000000000000000010000000
- vec($_, 0, 8) = 2 == 2 01000000000000000000000000000000
- vec($_, 1, 8) = 2 == 512 00000000010000000000000000000000
- vec($_, 2, 8) = 2 == 131072 00000000000000000100000000000000
- vec($_, 3, 8) = 2 == 33554432 00000000000000000000000001000000
- vec($_, 0, 8) = 4 == 4 00100000000000000000000000000000
- vec($_, 1, 8) = 4 == 1024 00000000001000000000000000000000
- vec($_, 2, 8) = 4 == 262144 00000000000000000010000000000000
- vec($_, 3, 8) = 4 == 67108864 00000000000000000000000000100000
- vec($_, 0, 8) = 8 == 8 00010000000000000000000000000000
- vec($_, 1, 8) = 8 == 2048 00000000000100000000000000000000
- vec($_, 2, 8) = 8 == 524288 00000000000000000001000000000000
- vec($_, 3, 8) = 8 == 134217728 00000000000000000000000000010000
- vec($_, 0, 8) = 16 == 16 00001000000000000000000000000000
- vec($_, 1, 8) = 16 == 4096 00000000000010000000000000000000
- vec($_, 2, 8) = 16 == 1048576 00000000000000000000100000000000
- vec($_, 3, 8) = 16 == 268435456 00000000000000000000000000001000
- vec($_, 0, 8) = 32 == 32 00000100000000000000000000000000
- vec($_, 1, 8) = 32 == 8192 00000000000001000000000000000000
- vec($_, 2, 8) = 32 == 2097152 00000000000000000000010000000000
- vec($_, 3, 8) = 32 == 536870912 00000000000000000000000000000100
- vec($_, 0, 8) = 64 == 64 00000010000000000000000000000000
- vec($_, 1, 8) = 64 == 16384 00000000000000100000000000000000
- vec($_, 2, 8) = 64 == 4194304 00000000000000000000001000000000
- vec($_, 3, 8) = 64 == 1073741824 00000000000000000000000000000010
- vec($_, 0, 8) = 128 == 128 00000001000000000000000000000000
- vec($_, 1, 8) = 128 == 32768 00000000000000010000000000000000
- vec($_, 2, 8) = 128 == 8388608 00000000000000000000000100000000
- vec($_, 3, 8) = 128 == 2147483648 00000000000000000000000000000001
-
-=item wait
-
-Behaves like the wait(2) system call on your system: it waits for a child
-process to terminate and returns the pid of the deceased process, or
-C<-1> if there are no child processes. The status is returned in C<$?>.
-Note that a return value of C<-1> could mean that child processes are
-being automatically reaped, as described in L<perlipc>.
-
-=item waitpid PID,FLAGS
-
-Waits for a particular child process to terminate and returns the pid of
-the deceased process, or C<-1> if there is no such child process. On some
-systems, a value of 0 indicates that there are processes still running.
-The status is returned in C<$?>. If you say
-
- use POSIX ":sys_wait_h";
- #...
- do {
- $kid = waitpid(-1,&WNOHANG);
- } until $kid == -1;
-
-then you can do a non-blocking wait for all pending zombie processes.
-Non-blocking wait is available on machines supporting either the
-waitpid(2) or wait4(2) system calls. However, waiting for a particular
-pid with FLAGS of C<0> is implemented everywhere. (Perl emulates the
-system call by remembering the status values of processes that have
-exited but have not been harvested by the Perl script yet.)
-
-Note that on some systems, a return value of C<-1> could mean that child
-processes are being automatically reaped. See L<perlipc> for details,
-and for other examples.
-
-=item wantarray
-
-Returns true if the context of the currently executing subroutine is
-looking for a list value. Returns false if the context is looking
-for a scalar. Returns the undefined value if the context is looking
-for no value (void context).
-
- return unless defined wantarray; # don't bother doing more
- my @a = complex_calculation();
- return wantarray ? @a : "@a";
-
-This function should have been named wantlist() instead.
-
-=item warn LIST
-
-Produces a message on STDERR just like C<die>, but doesn't exit or throw
-an exception.
-
-If LIST is empty and C<$@> already contains a value (typically from a
-previous eval) that value is used after appending C<"\t...caught">
-to C<$@>. This is useful for staying almost, but not entirely similar to
-C<die>.
-
-If C<$@> is empty then the string C<"Warning: Something's wrong"> is used.
-
-No message is printed if there is a C<$SIG{__WARN__}> handler
-installed. It is the handler's responsibility to deal with the message
-as it sees fit (like, for instance, converting it into a C<die>). Most
-handlers must therefore make arrangements to actually display the
-warnings that they are not prepared to deal with, by calling C<warn>
-again in the handler. Note that this is quite safe and will not
-produce an endless loop, since C<__WARN__> hooks are not called from
-inside one.
-
-You will find this behavior is slightly different from that of
-C<$SIG{__DIE__}> handlers (which don't suppress the error text, but can
-instead call C<die> again to change it).
-
-Using a C<__WARN__> handler provides a powerful way to silence all
-warnings (even the so-called mandatory ones). An example:
-
- # wipe out *all* compile-time warnings
- BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
- my $foo = 10;
- my $foo = 20; # no warning about duplicate my $foo,
- # but hey, you asked for it!
- # no compile-time or run-time warnings before here
- $DOWARN = 1;
-
- # run-time warnings enabled after here
- warn "\$foo is alive and $foo!"; # does show up
-
-See L<perlvar> for details on setting C<%SIG> entries, and for more
-examples. See the Carp module for other kinds of warnings using its
-carp() and cluck() functions.
-
-=item write FILEHANDLE
-
-=item write EXPR
-
-=item write
-
-Writes a formatted record (possibly multi-line) to the specified FILEHANDLE,
-using the format associated with that file. By default the format for
-a file is the one having the same name as the filehandle, but the
-format for the current output channel (see the C<select> function) may be set
-explicitly by assigning the name of the format to the C<$~> variable.
-
-Top of form processing is handled automatically: if there is
-insufficient room on the current page for the formatted record, the
-page is advanced by writing a form feed, a special top-of-page format
-is used to format the new page header, and then the record is written.
-By default the top-of-page format is the name of the filehandle with
-"_TOP" appended, but it may be dynamically set to the format of your
-choice by assigning the name to the C<$^> variable while the filehandle is
-selected. The number of lines remaining on the current page is in
-variable C<$->, which can be set to C<0> to force a new page.
-
-If FILEHANDLE is unspecified, output goes to the current default output
-channel, which starts out as STDOUT but may be changed by the
-C<select> operator. If the FILEHANDLE is an EXPR, then the expression
-is evaluated and the resulting string is used to look up the name of
-the FILEHANDLE at run time. For more on formats, see L<perlform>.
-
-Note that write is I<not> the opposite of C<read>. Unfortunately.
-
-=item y///
-
-The transliteration operator. Same as C<tr///>. See L<perlop>.
-
-=back
diff --git a/contrib/perl5/pod/perlguts.pod b/contrib/perl5/pod/perlguts.pod
deleted file mode 100644
index 9993cc1..0000000
--- a/contrib/perl5/pod/perlguts.pod
+++ /dev/null
@@ -1,2318 +0,0 @@
-=head1 NAME
-
-perlguts - Introduction to the Perl API
-
-=head1 DESCRIPTION
-
-This document attempts to describe how to use the Perl API, as well as
-containing some info on the basic workings of the Perl core. It is far
-from complete and probably contains many errors. Please refer any
-questions or comments to the author below.
-
-=head1 Variables
-
-=head2 Datatypes
-
-Perl has three typedefs that handle Perl's three main data types:
-
- SV Scalar Value
- AV Array Value
- HV Hash Value
-
-Each typedef has specific routines that manipulate the various data types.
-
-=head2 What is an "IV"?
-
-Perl uses a special typedef IV which is a simple signed integer type that is
-guaranteed to be large enough to hold a pointer (as well as an integer).
-Additionally, there is the UV, which is simply an unsigned IV.
-
-Perl also uses two special typedefs, I32 and I16, which will always be at
-least 32-bits and 16-bits long, respectively. (Again, there are U32 and U16,
-as well.)
-
-=head2 Working with SVs
-
-An SV can be created and loaded with one command. There are four types of
-values that can be loaded: an integer value (IV), a double (NV),
-a string (PV), and another scalar (SV).
-
-The six routines are:
-
- SV* newSViv(IV);
- SV* newSVnv(double);
- SV* newSVpv(const char*, int);
- SV* newSVpvn(const char*, int);
- SV* newSVpvf(const char*, ...);
- SV* newSVsv(SV*);
-
-To change the value of an *already-existing* SV, there are seven routines:
-
- void sv_setiv(SV*, IV);
- void sv_setuv(SV*, UV);
- void sv_setnv(SV*, double);
- void sv_setpv(SV*, const char*);
- void sv_setpvn(SV*, const char*, int)
- void sv_setpvf(SV*, const char*, ...);
- void sv_setpvfn(SV*, const char*, STRLEN, va_list *, SV **, I32, bool);
- void sv_setsv(SV*, SV*);
-
-Notice that you can choose to specify the length of the string to be
-assigned by using C<sv_setpvn>, C<newSVpvn>, or C<newSVpv>, or you may
-allow Perl to calculate the length by using C<sv_setpv> or by specifying
-0 as the second argument to C<newSVpv>. Be warned, though, that Perl will
-determine the string's length by using C<strlen>, which depends on the
-string terminating with a NUL character.
-
-The arguments of C<sv_setpvf> are processed like C<sprintf>, and the
-formatted output becomes the value.
-
-C<sv_setpvfn> is an analogue of C<vsprintf>, but it allows you to specify
-either a pointer to a variable argument list or the address and length of
-an array of SVs. The last argument points to a boolean; on return, if that
-boolean is true, then locale-specific information has been used to format
-the string, and the string's contents are therefore untrustworthy (see
-L<perlsec>). This pointer may be NULL if that information is not
-important. Note that this function requires you to specify the length of
-the format.
-
-STRLEN is an integer type (Size_t, usually defined as size_t in
-config.h) guaranteed to be large enough to represent the size of
-any string that perl can handle.
-
-The C<sv_set*()> functions are not generic enough to operate on values
-that have "magic". See L<Magic Virtual Tables> later in this document.
-
-All SVs that contain strings should be terminated with a NUL character.
-If it is not NUL-terminated there is a risk of
-core dumps and corruptions from code which passes the string to C
-functions or system calls which expect a NUL-terminated string.
-Perl's own functions typically add a trailing NUL for this reason.
-Nevertheless, you should be very careful when you pass a string stored
-in an SV to a C function or system call.
-
-To access the actual value that an SV points to, you can use the macros:
-
- SvIV(SV*)
- SvUV(SV*)
- SvNV(SV*)
- SvPV(SV*, STRLEN len)
- SvPV_nolen(SV*)
-
-which will automatically coerce the actual scalar type into an IV, UV, double,
-or string.
-
-In the C<SvPV> macro, the length of the string returned is placed into the
-variable C<len> (this is a macro, so you do I<not> use C<&len>). If you do
-not care what the length of the data is, use the C<SvPV_nolen> macro.
-Historically the C<SvPV> macro with the global variable C<PL_na> has been
-used in this case. But that can be quite inefficient because C<PL_na> must
-be accessed in thread-local storage in threaded Perl. In any case, remember
-that Perl allows arbitrary strings of data that may both contain NULs and
-might not be terminated by a NUL.
-
-Also remember that C doesn't allow you to safely say C<foo(SvPV(s, len),
-len);>. It might work with your compiler, but it won't work for everyone.
-Break this sort of statement up into separate assignments:
-
- SV *s;
- STRLEN len;
- char * ptr;
- ptr = SvPV(s, len);
- foo(ptr, len);
-
-If you want to know if the scalar value is TRUE, you can use:
-
- SvTRUE(SV*)
-
-Although Perl will automatically grow strings for you, if you need to force
-Perl to allocate more memory for your SV, you can use the macro
-
- SvGROW(SV*, STRLEN newlen)
-
-which will determine if more memory needs to be allocated. If so, it will
-call the function C<sv_grow>. Note that C<SvGROW> can only increase, not
-decrease, the allocated memory of an SV and that it does not automatically
-add a byte for the a trailing NUL (perl's own string functions typically do
-C<SvGROW(sv, len + 1)>).
-
-If you have an SV and want to know what kind of data Perl thinks is stored
-in it, you can use the following macros to check the type of SV you have.
-
- SvIOK(SV*)
- SvNOK(SV*)
- SvPOK(SV*)
-
-You can get and set the current length of the string stored in an SV with
-the following macros:
-
- SvCUR(SV*)
- SvCUR_set(SV*, I32 val)
-
-You can also get a pointer to the end of the string stored in the SV
-with the macro:
-
- SvEND(SV*)
-
-But note that these last three macros are valid only if C<SvPOK()> is true.
-
-If you want to append something to the end of string stored in an C<SV*>,
-you can use the following functions:
-
- void sv_catpv(SV*, const char*);
- void sv_catpvn(SV*, const char*, STRLEN);
- void sv_catpvf(SV*, const char*, ...);
- void sv_catpvfn(SV*, const char*, STRLEN, va_list *, SV **, I32, bool);
- void sv_catsv(SV*, SV*);
-
-The first function calculates the length of the string to be appended by
-using C<strlen>. In the second, you specify the length of the string
-yourself. The third function processes its arguments like C<sprintf> and
-appends the formatted output. The fourth function works like C<vsprintf>.
-You can specify the address and length of an array of SVs instead of the
-va_list argument. The fifth function extends the string stored in the first
-SV with the string stored in the second SV. It also forces the second SV
-to be interpreted as a string.
-
-The C<sv_cat*()> functions are not generic enough to operate on values that
-have "magic". See L<Magic Virtual Tables> later in this document.
-
-If you know the name of a scalar variable, you can get a pointer to its SV
-by using the following:
-
- SV* get_sv("package::varname", FALSE);
-
-This returns NULL if the variable does not exist.
-
-If you want to know if this variable (or any other SV) is actually C<defined>,
-you can call:
-
- SvOK(SV*)
-
-The scalar C<undef> value is stored in an SV instance called C<PL_sv_undef>. Its
-address can be used whenever an C<SV*> is needed.
-
-There are also the two values C<PL_sv_yes> and C<PL_sv_no>, which contain Boolean
-TRUE and FALSE values, respectively. Like C<PL_sv_undef>, their addresses can
-be used whenever an C<SV*> is needed.
-
-Do not be fooled into thinking that C<(SV *) 0> is the same as C<&PL_sv_undef>.
-Take this code:
-
- SV* sv = (SV*) 0;
- if (I-am-to-return-a-real-value) {
- sv = sv_2mortal(newSViv(42));
- }
- sv_setsv(ST(0), sv);
-
-This code tries to return a new SV (which contains the value 42) if it should
-return a real value, or undef otherwise. Instead it has returned a NULL
-pointer which, somewhere down the line, will cause a segmentation violation,
-bus error, or just weird results. Change the zero to C<&PL_sv_undef> in the first
-line and all will be well.
-
-To free an SV that you've created, call C<SvREFCNT_dec(SV*)>. Normally this
-call is not necessary (see L<Reference Counts and Mortality>).
-
-=head2 Offsets
-
-Perl provides the function C<sv_chop> to efficiently remove characters
-from the beginning of a string; you give it an SV and a pointer to
-somewhere inside the the PV, and it discards everything before the
-pointer. The efficiency comes by means of a little hack: instead of
-actually removing the characters, C<sv_chop> sets the flag C<OOK>
-(offset OK) to signal to other functions that the offset hack is in
-effect, and it puts the number of bytes chopped off into the IV field
-of the SV. It then moves the PV pointer (called C<SvPVX>) forward that
-many bytes, and adjusts C<SvCUR> and C<SvLEN>.
-
-Hence, at this point, the start of the buffer that we allocated lives
-at C<SvPVX(sv) - SvIV(sv)> in memory and the PV pointer is pointing
-into the middle of this allocated storage.
-
-This is best demonstrated by example:
-
- % ./perl -Ilib -MDevel::Peek -le '$a="12345"; $a=~s/.//; Dump($a)'
- SV = PVIV(0x8128450) at 0x81340f0
- REFCNT = 1
- FLAGS = (POK,OOK,pPOK)
- IV = 1 (OFFSET)
- PV = 0x8135781 ( "1" . ) "2345"\0
- CUR = 4
- LEN = 5
-
-Here the number of bytes chopped off (1) is put into IV, and
-C<Devel::Peek::Dump> helpfully reminds us that this is an offset. The
-portion of the string between the "real" and the "fake" beginnings is
-shown in parentheses, and the values of C<SvCUR> and C<SvLEN> reflect
-the fake beginning, not the real one.
-
-Something similar to the offset hack is perfomed on AVs to enable
-efficient shifting and splicing off the beginning of the array; while
-C<AvARRAY> points to the first element in the array that is visible from
-Perl, C<AvALLOC> points to the real start of the C array. These are
-usually the same, but a C<shift> operation can be carried out by
-increasing C<AvARRAY> by one and decreasing C<AvFILL> and C<AvLEN>.
-Again, the location of the real start of the C array only comes into
-play when freeing the array. See C<av_shift> in F<av.c>.
-
-=head2 What's Really Stored in an SV?
-
-Recall that the usual method of determining the type of scalar you have is
-to use C<Sv*OK> macros. Because a scalar can be both a number and a string,
-usually these macros will always return TRUE and calling the C<Sv*V>
-macros will do the appropriate conversion of string to integer/double or
-integer/double to string.
-
-If you I<really> need to know if you have an integer, double, or string
-pointer in an SV, you can use the following three macros instead:
-
- SvIOKp(SV*)
- SvNOKp(SV*)
- SvPOKp(SV*)
-
-These will tell you if you truly have an integer, double, or string pointer
-stored in your SV. The "p" stands for private.
-
-In general, though, it's best to use the C<Sv*V> macros.
-
-=head2 Working with AVs
-
-There are two ways to create and load an AV. The first method creates an
-empty AV:
-
- AV* newAV();
-
-The second method both creates the AV and initially populates it with SVs:
-
- AV* av_make(I32 num, SV **ptr);
-
-The second argument points to an array containing C<num> C<SV*>'s. Once the
-AV has been created, the SVs can be destroyed, if so desired.
-
-Once the AV has been created, the following operations are possible on AVs:
-
- void av_push(AV*, SV*);
- SV* av_pop(AV*);
- SV* av_shift(AV*);
- void av_unshift(AV*, I32 num);
-
-These should be familiar operations, with the exception of C<av_unshift>.
-This routine adds C<num> elements at the front of the array with the C<undef>
-value. You must then use C<av_store> (described below) to assign values
-to these new elements.
-
-Here are some other functions:
-
- I32 av_len(AV*);
- SV** av_fetch(AV*, I32 key, I32 lval);
- SV** av_store(AV*, I32 key, SV* val);
-
-The C<av_len> function returns the highest index value in array (just
-like $#array in Perl). If the array is empty, -1 is returned. The
-C<av_fetch> function returns the value at index C<key>, but if C<lval>
-is non-zero, then C<av_fetch> will store an undef value at that index.
-The C<av_store> function stores the value C<val> at index C<key>, and does
-not increment the reference count of C<val>. Thus the caller is responsible
-for taking care of that, and if C<av_store> returns NULL, the caller will
-have to decrement the reference count to avoid a memory leak. Note that
-C<av_fetch> and C<av_store> both return C<SV**>'s, not C<SV*>'s as their
-return value.
-
- void av_clear(AV*);
- void av_undef(AV*);
- void av_extend(AV*, I32 key);
-
-The C<av_clear> function deletes all the elements in the AV* array, but
-does not actually delete the array itself. The C<av_undef> function will
-delete all the elements in the array plus the array itself. The
-C<av_extend> function extends the array so that it contains at least C<key+1>
-elements. If C<key+1> is less than the currently allocated length of the array,
-then nothing is done.
-
-If you know the name of an array variable, you can get a pointer to its AV
-by using the following:
-
- AV* get_av("package::varname", FALSE);
-
-This returns NULL if the variable does not exist.
-
-See L<Understanding the Magic of Tied Hashes and Arrays> for more
-information on how to use the array access functions on tied arrays.
-
-=head2 Working with HVs
-
-To create an HV, you use the following routine:
-
- HV* newHV();
-
-Once the HV has been created, the following operations are possible on HVs:
-
- SV** hv_store(HV*, const char* key, U32 klen, SV* val, U32 hash);
- SV** hv_fetch(HV*, const char* key, U32 klen, I32 lval);
-
-The C<klen> parameter is the length of the key being passed in (Note that
-you cannot pass 0 in as a value of C<klen> to tell Perl to measure the
-length of the key). The C<val> argument contains the SV pointer to the
-scalar being stored, and C<hash> is the precomputed hash value (zero if
-you want C<hv_store> to calculate it for you). The C<lval> parameter
-indicates whether this fetch is actually a part of a store operation, in
-which case a new undefined value will be added to the HV with the supplied
-key and C<hv_fetch> will return as if the value had already existed.
-
-Remember that C<hv_store> and C<hv_fetch> return C<SV**>'s and not just
-C<SV*>. To access the scalar value, you must first dereference the return
-value. However, you should check to make sure that the return value is
-not NULL before dereferencing it.
-
-These two functions check if a hash table entry exists, and deletes it.
-
- bool hv_exists(HV*, const char* key, U32 klen);
- SV* hv_delete(HV*, const char* key, U32 klen, I32 flags);
-
-If C<flags> does not include the C<G_DISCARD> flag then C<hv_delete> will
-create and return a mortal copy of the deleted value.
-
-And more miscellaneous functions:
-
- void hv_clear(HV*);
- void hv_undef(HV*);
-
-Like their AV counterparts, C<hv_clear> deletes all the entries in the hash
-table but does not actually delete the hash table. The C<hv_undef> deletes
-both the entries and the hash table itself.
-
-Perl keeps the actual data in linked list of structures with a typedef of HE.
-These contain the actual key and value pointers (plus extra administrative
-overhead). The key is a string pointer; the value is an C<SV*>. However,
-once you have an C<HE*>, to get the actual key and value, use the routines
-specified below.
-
- I32 hv_iterinit(HV*);
- /* Prepares starting point to traverse hash table */
- HE* hv_iternext(HV*);
- /* Get the next entry, and return a pointer to a
- structure that has both the key and value */
- char* hv_iterkey(HE* entry, I32* retlen);
- /* Get the key from an HE structure and also return
- the length of the key string */
- SV* hv_iterval(HV*, HE* entry);
- /* Return a SV pointer to the value of the HE
- structure */
- SV* hv_iternextsv(HV*, char** key, I32* retlen);
- /* This convenience routine combines hv_iternext,
- hv_iterkey, and hv_iterval. The key and retlen
- arguments are return values for the key and its
- length. The value is returned in the SV* argument */
-
-If you know the name of a hash variable, you can get a pointer to its HV
-by using the following:
-
- HV* get_hv("package::varname", FALSE);
-
-This returns NULL if the variable does not exist.
-
-The hash algorithm is defined in the C<PERL_HASH(hash, key, klen)> macro:
-
- hash = 0;
- while (klen--)
- hash = (hash * 33) + *key++;
- hash = hash + (hash >> 5); /* after 5.6 */
-
-The last step was added in version 5.6 to improve distribution of
-lower bits in the resulting hash value.
-
-See L<Understanding the Magic of Tied Hashes and Arrays> for more
-information on how to use the hash access functions on tied hashes.
-
-=head2 Hash API Extensions
-
-Beginning with version 5.004, the following functions are also supported:
-
- HE* hv_fetch_ent (HV* tb, SV* key, I32 lval, U32 hash);
- HE* hv_store_ent (HV* tb, SV* key, SV* val, U32 hash);
-
- bool hv_exists_ent (HV* tb, SV* key, U32 hash);
- SV* hv_delete_ent (HV* tb, SV* key, I32 flags, U32 hash);
-
- SV* hv_iterkeysv (HE* entry);
-
-Note that these functions take C<SV*> keys, which simplifies writing
-of extension code that deals with hash structures. These functions
-also allow passing of C<SV*> keys to C<tie> functions without forcing
-you to stringify the keys (unlike the previous set of functions).
-
-They also return and accept whole hash entries (C<HE*>), making their
-use more efficient (since the hash number for a particular string
-doesn't have to be recomputed every time). See L<perlapi> for detailed
-descriptions.
-
-The following macros must always be used to access the contents of hash
-entries. Note that the arguments to these macros must be simple
-variables, since they may get evaluated more than once. See
-L<perlapi> for detailed descriptions of these macros.
-
- HePV(HE* he, STRLEN len)
- HeVAL(HE* he)
- HeHASH(HE* he)
- HeSVKEY(HE* he)
- HeSVKEY_force(HE* he)
- HeSVKEY_set(HE* he, SV* sv)
-
-These two lower level macros are defined, but must only be used when
-dealing with keys that are not C<SV*>s:
-
- HeKEY(HE* he)
- HeKLEN(HE* he)
-
-Note that both C<hv_store> and C<hv_store_ent> do not increment the
-reference count of the stored C<val>, which is the caller's responsibility.
-If these functions return a NULL value, the caller will usually have to
-decrement the reference count of C<val> to avoid a memory leak.
-
-=head2 References
-
-References are a special type of scalar that point to other data types
-(including references).
-
-To create a reference, use either of the following functions:
-
- SV* newRV_inc((SV*) thing);
- SV* newRV_noinc((SV*) thing);
-
-The C<thing> argument can be any of an C<SV*>, C<AV*>, or C<HV*>. The
-functions are identical except that C<newRV_inc> increments the reference
-count of the C<thing>, while C<newRV_noinc> does not. For historical
-reasons, C<newRV> is a synonym for C<newRV_inc>.
-
-Once you have a reference, you can use the following macro to dereference
-the reference:
-
- SvRV(SV*)
-
-then call the appropriate routines, casting the returned C<SV*> to either an
-C<AV*> or C<HV*>, if required.
-
-To determine if an SV is a reference, you can use the following macro:
-
- SvROK(SV*)
-
-To discover what type of value the reference refers to, use the following
-macro and then check the return value.
-
- SvTYPE(SvRV(SV*))
-
-The most useful types that will be returned are:
-
- SVt_IV Scalar
- SVt_NV Scalar
- SVt_PV Scalar
- SVt_RV Scalar
- SVt_PVAV Array
- SVt_PVHV Hash
- SVt_PVCV Code
- SVt_PVGV Glob (possible a file handle)
- SVt_PVMG Blessed or Magical Scalar
-
- See the sv.h header file for more details.
-
-=head2 Blessed References and Class Objects
-
-References are also used to support object-oriented programming. In the
-OO lexicon, an object is simply a reference that has been blessed into a
-package (or class). Once blessed, the programmer may now use the reference
-to access the various methods in the class.
-
-A reference can be blessed into a package with the following function:
-
- SV* sv_bless(SV* sv, HV* stash);
-
-The C<sv> argument must be a reference. The C<stash> argument specifies
-which class the reference will belong to. See
-L<Stashes and Globs> for information on converting class names into stashes.
-
-/* Still under construction */
-
-Upgrades rv to reference if not already one. Creates new SV for rv to
-point to. If C<classname> is non-null, the SV is blessed into the specified
-class. SV is returned.
-
- SV* newSVrv(SV* rv, const char* classname);
-
-Copies integer or double into an SV whose reference is C<rv>. SV is blessed
-if C<classname> is non-null.
-
- SV* sv_setref_iv(SV* rv, const char* classname, IV iv);
- SV* sv_setref_nv(SV* rv, const char* classname, NV iv);
-
-Copies the pointer value (I<the address, not the string!>) into an SV whose
-reference is rv. SV is blessed if C<classname> is non-null.
-
- SV* sv_setref_pv(SV* rv, const char* classname, PV iv);
-
-Copies string into an SV whose reference is C<rv>. Set length to 0 to let
-Perl calculate the string length. SV is blessed if C<classname> is non-null.
-
- SV* sv_setref_pvn(SV* rv, const char* classname, PV iv, STRLEN length);
-
-Tests whether the SV is blessed into the specified class. It does not
-check inheritance relationships.
-
- int sv_isa(SV* sv, const char* name);
-
-Tests whether the SV is a reference to a blessed object.
-
- int sv_isobject(SV* sv);
-
-Tests whether the SV is derived from the specified class. SV can be either
-a reference to a blessed object or a string containing a class name. This
-is the function implementing the C<UNIVERSAL::isa> functionality.
-
- bool sv_derived_from(SV* sv, const char* name);
-
-To check if you've got an object derived from a specific class you have
-to write:
-
- if (sv_isobject(sv) && sv_derived_from(sv, class)) { ... }
-
-=head2 Creating New Variables
-
-To create a new Perl variable with an undef value which can be accessed from
-your Perl script, use the following routines, depending on the variable type.
-
- SV* get_sv("package::varname", TRUE);
- AV* get_av("package::varname", TRUE);
- HV* get_hv("package::varname", TRUE);
-
-Notice the use of TRUE as the second parameter. The new variable can now
-be set, using the routines appropriate to the data type.
-
-There are additional macros whose values may be bitwise OR'ed with the
-C<TRUE> argument to enable certain extra features. Those bits are:
-
- GV_ADDMULTI Marks the variable as multiply defined, thus preventing the
- "Name <varname> used only once: possible typo" warning.
- GV_ADDWARN Issues the warning "Had to create <varname> unexpectedly" if
- the variable did not exist before the function was called.
-
-If you do not specify a package name, the variable is created in the current
-package.
-
-=head2 Reference Counts and Mortality
-
-Perl uses an reference count-driven garbage collection mechanism. SVs,
-AVs, or HVs (xV for short in the following) start their life with a
-reference count of 1. If the reference count of an xV ever drops to 0,
-then it will be destroyed and its memory made available for reuse.
-
-This normally doesn't happen at the Perl level unless a variable is
-undef'ed or the last variable holding a reference to it is changed or
-overwritten. At the internal level, however, reference counts can be
-manipulated with the following macros:
-
- int SvREFCNT(SV* sv);
- SV* SvREFCNT_inc(SV* sv);
- void SvREFCNT_dec(SV* sv);
-
-However, there is one other function which manipulates the reference
-count of its argument. The C<newRV_inc> function, you will recall,
-creates a reference to the specified argument. As a side effect,
-it increments the argument's reference count. If this is not what
-you want, use C<newRV_noinc> instead.
-
-For example, imagine you want to return a reference from an XSUB function.
-Inside the XSUB routine, you create an SV which initially has a reference
-count of one. Then you call C<newRV_inc>, passing it the just-created SV.
-This returns the reference as a new SV, but the reference count of the
-SV you passed to C<newRV_inc> has been incremented to two. Now you
-return the reference from the XSUB routine and forget about the SV.
-But Perl hasn't! Whenever the returned reference is destroyed, the
-reference count of the original SV is decreased to one and nothing happens.
-The SV will hang around without any way to access it until Perl itself
-terminates. This is a memory leak.
-
-The correct procedure, then, is to use C<newRV_noinc> instead of
-C<newRV_inc>. Then, if and when the last reference is destroyed,
-the reference count of the SV will go to zero and it will be destroyed,
-stopping any memory leak.
-
-There are some convenience functions available that can help with the
-destruction of xVs. These functions introduce the concept of "mortality".
-An xV that is mortal has had its reference count marked to be decremented,
-but not actually decremented, until "a short time later". Generally the
-term "short time later" means a single Perl statement, such as a call to
-an XSUB function. The actual determinant for when mortal xVs have their
-reference count decremented depends on two macros, SAVETMPS and FREETMPS.
-See L<perlcall> and L<perlxs> for more details on these macros.
-
-"Mortalization" then is at its simplest a deferred C<SvREFCNT_dec>.
-However, if you mortalize a variable twice, the reference count will
-later be decremented twice.
-
-You should be careful about creating mortal variables. Strange things
-can happen if you make the same value mortal within multiple contexts,
-or if you make a variable mortal multiple times.
-
-To create a mortal variable, use the functions:
-
- SV* sv_newmortal()
- SV* sv_2mortal(SV*)
- SV* sv_mortalcopy(SV*)
-
-The first call creates a mortal SV, the second converts an existing
-SV to a mortal SV (and thus defers a call to C<SvREFCNT_dec>), and the
-third creates a mortal copy of an existing SV.
-
-The mortal routines are not just for SVs -- AVs and HVs can be
-made mortal by passing their address (type-casted to C<SV*>) to the
-C<sv_2mortal> or C<sv_mortalcopy> routines.
-
-=head2 Stashes and Globs
-
-A "stash" is a hash that contains all of the different objects that
-are contained within a package. Each key of the stash is a symbol
-name (shared by all the different types of objects that have the same
-name), and each value in the hash table is a GV (Glob Value). This GV
-in turn contains references to the various objects of that name,
-including (but not limited to) the following:
-
- Scalar Value
- Array Value
- Hash Value
- I/O Handle
- Format
- Subroutine
-
-There is a single stash called "PL_defstash" that holds the items that exist
-in the "main" package. To get at the items in other packages, append the
-string "::" to the package name. The items in the "Foo" package are in
-the stash "Foo::" in PL_defstash. The items in the "Bar::Baz" package are
-in the stash "Baz::" in "Bar::"'s stash.
-
-To get the stash pointer for a particular package, use the function:
-
- HV* gv_stashpv(const char* name, I32 create)
- HV* gv_stashsv(SV*, I32 create)
-
-The first function takes a literal string, the second uses the string stored
-in the SV. Remember that a stash is just a hash table, so you get back an
-C<HV*>. The C<create> flag will create a new package if it is set.
-
-The name that C<gv_stash*v> wants is the name of the package whose symbol table
-you want. The default package is called C<main>. If you have multiply nested
-packages, pass their names to C<gv_stash*v>, separated by C<::> as in the Perl
-language itself.
-
-Alternately, if you have an SV that is a blessed reference, you can find
-out the stash pointer by using:
-
- HV* SvSTASH(SvRV(SV*));
-
-then use the following to get the package name itself:
-
- char* HvNAME(HV* stash);
-
-If you need to bless or re-bless an object you can use the following
-function:
-
- SV* sv_bless(SV*, HV* stash)
-
-where the first argument, an C<SV*>, must be a reference, and the second
-argument is a stash. The returned C<SV*> can now be used in the same way
-as any other SV.
-
-For more information on references and blessings, consult L<perlref>.
-
-=head2 Double-Typed SVs
-
-Scalar variables normally contain only one type of value, an integer,
-double, pointer, or reference. Perl will automatically convert the
-actual scalar data from the stored type into the requested type.
-
-Some scalar variables contain more than one type of scalar data. For
-example, the variable C<$!> contains either the numeric value of C<errno>
-or its string equivalent from either C<strerror> or C<sys_errlist[]>.
-
-To force multiple data values into an SV, you must do two things: use the
-C<sv_set*v> routines to add the additional scalar type, then set a flag
-so that Perl will believe it contains more than one type of data. The
-four macros to set the flags are:
-
- SvIOK_on
- SvNOK_on
- SvPOK_on
- SvROK_on
-
-The particular macro you must use depends on which C<sv_set*v> routine
-you called first. This is because every C<sv_set*v> routine turns on
-only the bit for the particular type of data being set, and turns off
-all the rest.
-
-For example, to create a new Perl variable called "dberror" that contains
-both the numeric and descriptive string error values, you could use the
-following code:
-
- extern int dberror;
- extern char *dberror_list;
-
- SV* sv = get_sv("dberror", TRUE);
- sv_setiv(sv, (IV) dberror);
- sv_setpv(sv, dberror_list[dberror]);
- SvIOK_on(sv);
-
-If the order of C<sv_setiv> and C<sv_setpv> had been reversed, then the
-macro C<SvPOK_on> would need to be called instead of C<SvIOK_on>.
-
-=head2 Magic Variables
-
-[This section still under construction. Ignore everything here. Post no
-bills. Everything not permitted is forbidden.]
-
-Any SV may be magical, that is, it has special features that a normal
-SV does not have. These features are stored in the SV structure in a
-linked list of C<struct magic>'s, typedef'ed to C<MAGIC>.
-
- struct magic {
- MAGIC* mg_moremagic;
- MGVTBL* mg_virtual;
- U16 mg_private;
- char mg_type;
- U8 mg_flags;
- SV* mg_obj;
- char* mg_ptr;
- I32 mg_len;
- };
-
-Note this is current as of patchlevel 0, and could change at any time.
-
-=head2 Assigning Magic
-
-Perl adds magic to an SV using the sv_magic function:
-
- void sv_magic(SV* sv, SV* obj, int how, const char* name, I32 namlen);
-
-The C<sv> argument is a pointer to the SV that is to acquire a new magical
-feature.
-
-If C<sv> is not already magical, Perl uses the C<SvUPGRADE> macro to
-set the C<SVt_PVMG> flag for the C<sv>. Perl then continues by adding
-it to the beginning of the linked list of magical features. Any prior
-entry of the same type of magic is deleted. Note that this can be
-overridden, and multiple instances of the same type of magic can be
-associated with an SV.
-
-The C<name> and C<namlen> arguments are used to associate a string with
-the magic, typically the name of a variable. C<namlen> is stored in the
-C<mg_len> field and if C<name> is non-null and C<namlen> >= 0 a malloc'd
-copy of the name is stored in C<mg_ptr> field.
-
-The sv_magic function uses C<how> to determine which, if any, predefined
-"Magic Virtual Table" should be assigned to the C<mg_virtual> field.
-See the "Magic Virtual Table" section below. The C<how> argument is also
-stored in the C<mg_type> field.
-
-The C<obj> argument is stored in the C<mg_obj> field of the C<MAGIC>
-structure. If it is not the same as the C<sv> argument, the reference
-count of the C<obj> object is incremented. If it is the same, or if
-the C<how> argument is "#", or if it is a NULL pointer, then C<obj> is
-merely stored, without the reference count being incremented.
-
-There is also a function to add magic to an C<HV>:
-
- void hv_magic(HV *hv, GV *gv, int how);
-
-This simply calls C<sv_magic> and coerces the C<gv> argument into an C<SV>.
-
-To remove the magic from an SV, call the function sv_unmagic:
-
- void sv_unmagic(SV *sv, int type);
-
-The C<type> argument should be equal to the C<how> value when the C<SV>
-was initially made magical.
-
-=head2 Magic Virtual Tables
-
-The C<mg_virtual> field in the C<MAGIC> structure is a pointer to a
-C<MGVTBL>, which is a structure of function pointers and stands for
-"Magic Virtual Table" to handle the various operations that might be
-applied to that variable.
-
-The C<MGVTBL> has five pointers to the following routine types:
-
- int (*svt_get)(SV* sv, MAGIC* mg);
- int (*svt_set)(SV* sv, MAGIC* mg);
- U32 (*svt_len)(SV* sv, MAGIC* mg);
- int (*svt_clear)(SV* sv, MAGIC* mg);
- int (*svt_free)(SV* sv, MAGIC* mg);
-
-This MGVTBL structure is set at compile-time in C<perl.h> and there are
-currently 19 types (or 21 with overloading turned on). These different
-structures contain pointers to various routines that perform additional
-actions depending on which function is being called.
-
- Function pointer Action taken
- ---------------- ------------
- svt_get Do something after the value of the SV is retrieved.
- svt_set Do something after the SV is assigned a value.
- svt_len Report on the SV's length.
- svt_clear Clear something the SV represents.
- svt_free Free any extra storage associated with the SV.
-
-For instance, the MGVTBL structure called C<vtbl_sv> (which corresponds
-to an C<mg_type> of '\0') contains:
-
- { magic_get, magic_set, magic_len, 0, 0 }
-
-Thus, when an SV is determined to be magical and of type '\0', if a get
-operation is being performed, the routine C<magic_get> is called. All
-the various routines for the various magical types begin with C<magic_>.
-NOTE: the magic routines are not considered part of the Perl API, and may
-not be exported by the Perl library.
-
-The current kinds of Magic Virtual Tables are:
-
- mg_type MGVTBL Type of magic
- ------- ------ ----------------------------
- \0 vtbl_sv Special scalar variable
- A vtbl_amagic %OVERLOAD hash
- a vtbl_amagicelem %OVERLOAD hash element
- c (none) Holds overload table (AMT) on stash
- B vtbl_bm Boyer-Moore (fast string search)
- D vtbl_regdata Regex match position data (@+ and @- vars)
- d vtbl_regdatum Regex match position data element
- E vtbl_env %ENV hash
- e vtbl_envelem %ENV hash element
- f vtbl_fm Formline ('compiled' format)
- g vtbl_mglob m//g target / study()ed string
- I vtbl_isa @ISA array
- i vtbl_isaelem @ISA array element
- k vtbl_nkeys scalar(keys()) lvalue
- L (none) Debugger %_<filename
- l vtbl_dbline Debugger %_<filename element
- o vtbl_collxfrm Locale transformation
- P vtbl_pack Tied array or hash
- p vtbl_packelem Tied array or hash element
- q vtbl_packelem Tied scalar or handle
- S vtbl_sig %SIG hash
- s vtbl_sigelem %SIG hash element
- t vtbl_taint Taintedness
- U vtbl_uvar Available for use by extensions
- v vtbl_vec vec() lvalue
- x vtbl_substr substr() lvalue
- y vtbl_defelem Shadow "foreach" iterator variable /
- smart parameter vivification
- * vtbl_glob GV (typeglob)
- # vtbl_arylen Array length ($#ary)
- . vtbl_pos pos() lvalue
- ~ (none) Available for use by extensions
-
-When an uppercase and lowercase letter both exist in the table, then the
-uppercase letter is used to represent some kind of composite type (a list
-or a hash), and the lowercase letter is used to represent an element of
-that composite type.
-
-The '~' and 'U' magic types are defined specifically for use by
-extensions and will not be used by perl itself. Extensions can use
-'~' magic to 'attach' private information to variables (typically
-objects). This is especially useful because there is no way for
-normal perl code to corrupt this private information (unlike using
-extra elements of a hash object).
-
-Similarly, 'U' magic can be used much like tie() to call a C function
-any time a scalar's value is used or changed. The C<MAGIC>'s
-C<mg_ptr> field points to a C<ufuncs> structure:
-
- struct ufuncs {
- I32 (*uf_val)(IV, SV*);
- I32 (*uf_set)(IV, SV*);
- IV uf_index;
- };
-
-When the SV is read from or written to, the C<uf_val> or C<uf_set>
-function will be called with C<uf_index> as the first arg and a
-pointer to the SV as the second. A simple example of how to add 'U'
-magic is shown below. Note that the ufuncs structure is copied by
-sv_magic, so you can safely allocate it on the stack.
-
- void
- Umagic(sv)
- SV *sv;
- PREINIT:
- struct ufuncs uf;
- CODE:
- uf.uf_val = &my_get_fn;
- uf.uf_set = &my_set_fn;
- uf.uf_index = 0;
- sv_magic(sv, 0, 'U', (char*)&uf, sizeof(uf));
-
-Note that because multiple extensions may be using '~' or 'U' magic,
-it is important for extensions to take extra care to avoid conflict.
-Typically only using the magic on objects blessed into the same class
-as the extension is sufficient. For '~' magic, it may also be
-appropriate to add an I32 'signature' at the top of the private data
-area and check that.
-
-Also note that the C<sv_set*()> and C<sv_cat*()> functions described
-earlier do B<not> invoke 'set' magic on their targets. This must
-be done by the user either by calling the C<SvSETMAGIC()> macro after
-calling these functions, or by using one of the C<sv_set*_mg()> or
-C<sv_cat*_mg()> functions. Similarly, generic C code must call the
-C<SvGETMAGIC()> macro to invoke any 'get' magic if they use an SV
-obtained from external sources in functions that don't handle magic.
-See L<perlapi> for a description of these functions.
-For example, calls to the C<sv_cat*()> functions typically need to be
-followed by C<SvSETMAGIC()>, but they don't need a prior C<SvGETMAGIC()>
-since their implementation handles 'get' magic.
-
-=head2 Finding Magic
-
- MAGIC* mg_find(SV*, int type); /* Finds the magic pointer of that type */
-
-This routine returns a pointer to the C<MAGIC> structure stored in the SV.
-If the SV does not have that magical feature, C<NULL> is returned. Also,
-if the SV is not of type SVt_PVMG, Perl may core dump.
-
- int mg_copy(SV* sv, SV* nsv, const char* key, STRLEN klen);
-
-This routine checks to see what types of magic C<sv> has. If the mg_type
-field is an uppercase letter, then the mg_obj is copied to C<nsv>, but
-the mg_type field is changed to be the lowercase letter.
-
-=head2 Understanding the Magic of Tied Hashes and Arrays
-
-Tied hashes and arrays are magical beasts of the 'P' magic type.
-
-WARNING: As of the 5.004 release, proper usage of the array and hash
-access functions requires understanding a few caveats. Some
-of these caveats are actually considered bugs in the API, to be fixed
-in later releases, and are bracketed with [MAYCHANGE] below. If
-you find yourself actually applying such information in this section, be
-aware that the behavior may change in the future, umm, without warning.
-
-The perl tie function associates a variable with an object that implements
-the various GET, SET etc methods. To perform the equivalent of the perl
-tie function from an XSUB, you must mimic this behaviour. The code below
-carries out the necessary steps - firstly it creates a new hash, and then
-creates a second hash which it blesses into the class which will implement
-the tie methods. Lastly it ties the two hashes together, and returns a
-reference to the new tied hash. Note that the code below does NOT call the
-TIEHASH method in the MyTie class -
-see L<Calling Perl Routines from within C Programs> for details on how
-to do this.
-
- SV*
- mytie()
- PREINIT:
- HV *hash;
- HV *stash;
- SV *tie;
- CODE:
- hash = newHV();
- tie = newRV_noinc((SV*)newHV());
- stash = gv_stashpv("MyTie", TRUE);
- sv_bless(tie, stash);
- hv_magic(hash, tie, 'P');
- RETVAL = newRV_noinc(hash);
- OUTPUT:
- RETVAL
-
-The C<av_store> function, when given a tied array argument, merely
-copies the magic of the array onto the value to be "stored", using
-C<mg_copy>. It may also return NULL, indicating that the value did not
-actually need to be stored in the array. [MAYCHANGE] After a call to
-C<av_store> on a tied array, the caller will usually need to call
-C<mg_set(val)> to actually invoke the perl level "STORE" method on the
-TIEARRAY object. If C<av_store> did return NULL, a call to
-C<SvREFCNT_dec(val)> will also be usually necessary to avoid a memory
-leak. [/MAYCHANGE]
-
-The previous paragraph is applicable verbatim to tied hash access using the
-C<hv_store> and C<hv_store_ent> functions as well.
-
-C<av_fetch> and the corresponding hash functions C<hv_fetch> and
-C<hv_fetch_ent> actually return an undefined mortal value whose magic
-has been initialized using C<mg_copy>. Note the value so returned does not
-need to be deallocated, as it is already mortal. [MAYCHANGE] But you will
-need to call C<mg_get()> on the returned value in order to actually invoke
-the perl level "FETCH" method on the underlying TIE object. Similarly,
-you may also call C<mg_set()> on the return value after possibly assigning
-a suitable value to it using C<sv_setsv>, which will invoke the "STORE"
-method on the TIE object. [/MAYCHANGE]
-
-[MAYCHANGE]
-In other words, the array or hash fetch/store functions don't really
-fetch and store actual values in the case of tied arrays and hashes. They
-merely call C<mg_copy> to attach magic to the values that were meant to be
-"stored" or "fetched". Later calls to C<mg_get> and C<mg_set> actually
-do the job of invoking the TIE methods on the underlying objects. Thus
-the magic mechanism currently implements a kind of lazy access to arrays
-and hashes.
-
-Currently (as of perl version 5.004), use of the hash and array access
-functions requires the user to be aware of whether they are operating on
-"normal" hashes and arrays, or on their tied variants. The API may be
-changed to provide more transparent access to both tied and normal data
-types in future versions.
-[/MAYCHANGE]
-
-You would do well to understand that the TIEARRAY and TIEHASH interfaces
-are mere sugar to invoke some perl method calls while using the uniform hash
-and array syntax. The use of this sugar imposes some overhead (typically
-about two to four extra opcodes per FETCH/STORE operation, in addition to
-the creation of all the mortal variables required to invoke the methods).
-This overhead will be comparatively small if the TIE methods are themselves
-substantial, but if they are only a few statements long, the overhead
-will not be insignificant.
-
-=head2 Localizing changes
-
-Perl has a very handy construction
-
- {
- local $var = 2;
- ...
- }
-
-This construction is I<approximately> equivalent to
-
- {
- my $oldvar = $var;
- $var = 2;
- ...
- $var = $oldvar;
- }
-
-The biggest difference is that the first construction would
-reinstate the initial value of $var, irrespective of how control exits
-the block: C<goto>, C<return>, C<die>/C<eval> etc. It is a little bit
-more efficient as well.
-
-There is a way to achieve a similar task from C via Perl API: create a
-I<pseudo-block>, and arrange for some changes to be automatically
-undone at the end of it, either explicit, or via a non-local exit (via
-die()). A I<block>-like construct is created by a pair of
-C<ENTER>/C<LEAVE> macros (see L<perlcall/"Returning a Scalar">).
-Such a construct may be created specially for some important localized
-task, or an existing one (like boundaries of enclosing Perl
-subroutine/block, or an existing pair for freeing TMPs) may be
-used. (In the second case the overhead of additional localization must
-be almost negligible.) Note that any XSUB is automatically enclosed in
-an C<ENTER>/C<LEAVE> pair.
-
-Inside such a I<pseudo-block> the following service is available:
-
-=over 4
-
-=item C<SAVEINT(int i)>
-
-=item C<SAVEIV(IV i)>
-
-=item C<SAVEI32(I32 i)>
-
-=item C<SAVELONG(long i)>
-
-These macros arrange things to restore the value of integer variable
-C<i> at the end of enclosing I<pseudo-block>.
-
-=item C<SAVESPTR(s)>
-
-=item C<SAVEPPTR(p)>
-
-These macros arrange things to restore the value of pointers C<s> and
-C<p>. C<s> must be a pointer of a type which survives conversion to
-C<SV*> and back, C<p> should be able to survive conversion to C<char*>
-and back.
-
-=item C<SAVEFREESV(SV *sv)>
-
-The refcount of C<sv> would be decremented at the end of
-I<pseudo-block>. This is similar to C<sv_2mortal> in that it is also a
-mechanism for doing a delayed C<SvREFCNT_dec>. However, while C<sv_2mortal>
-extends the lifetime of C<sv> until the beginning of the next statement,
-C<SAVEFREESV> extends it until the end of the enclosing scope. These
-lifetimes can be wildly different.
-
-Also compare C<SAVEMORTALIZESV>.
-
-=item C<SAVEMORTALIZESV(SV *sv)>
-
-Just like C<SAVEFREESV>, but mortalizes C<sv> at the end of the current
-scope instead of decrementing its reference count. This usually has the
-effect of keeping C<sv> alive until the statement that called the currently
-live scope has finished executing.
-
-=item C<SAVEFREEOP(OP *op)>
-
-The C<OP *> is op_free()ed at the end of I<pseudo-block>.
-
-=item C<SAVEFREEPV(p)>
-
-The chunk of memory which is pointed to by C<p> is Safefree()ed at the
-end of I<pseudo-block>.
-
-=item C<SAVECLEARSV(SV *sv)>
-
-Clears a slot in the current scratchpad which corresponds to C<sv> at
-the end of I<pseudo-block>.
-
-=item C<SAVEDELETE(HV *hv, char *key, I32 length)>
-
-The key C<key> of C<hv> is deleted at the end of I<pseudo-block>. The
-string pointed to by C<key> is Safefree()ed. If one has a I<key> in
-short-lived storage, the corresponding string may be reallocated like
-this:
-
- SAVEDELETE(PL_defstash, savepv(tmpbuf), strlen(tmpbuf));
-
-=item C<SAVEDESTRUCTOR(DESTRUCTORFUNC_NOCONTEXT_t f, void *p)>
-
-At the end of I<pseudo-block> the function C<f> is called with the
-only argument C<p>.
-
-=item C<SAVEDESTRUCTOR_X(DESTRUCTORFUNC_t f, void *p)>
-
-At the end of I<pseudo-block> the function C<f> is called with the
-implicit context argument (if any), and C<p>.
-
-=item C<SAVESTACK_POS()>
-
-The current offset on the Perl internal stack (cf. C<SP>) is restored
-at the end of I<pseudo-block>.
-
-=back
-
-The following API list contains functions, thus one needs to
-provide pointers to the modifiable data explicitly (either C pointers,
-or Perlish C<GV *>s). Where the above macros take C<int>, a similar
-function takes C<int *>.
-
-=over 4
-
-=item C<SV* save_scalar(GV *gv)>
-
-Equivalent to Perl code C<local $gv>.
-
-=item C<AV* save_ary(GV *gv)>
-
-=item C<HV* save_hash(GV *gv)>
-
-Similar to C<save_scalar>, but localize C<@gv> and C<%gv>.
-
-=item C<void save_item(SV *item)>
-
-Duplicates the current value of C<SV>, on the exit from the current
-C<ENTER>/C<LEAVE> I<pseudo-block> will restore the value of C<SV>
-using the stored value.
-
-=item C<void save_list(SV **sarg, I32 maxsarg)>
-
-A variant of C<save_item> which takes multiple arguments via an array
-C<sarg> of C<SV*> of length C<maxsarg>.
-
-=item C<SV* save_svref(SV **sptr)>
-
-Similar to C<save_scalar>, but will reinstate a C<SV *>.
-
-=item C<void save_aptr(AV **aptr)>
-
-=item C<void save_hptr(HV **hptr)>
-
-Similar to C<save_svref>, but localize C<AV *> and C<HV *>.
-
-=back
-
-The C<Alias> module implements localization of the basic types within the
-I<caller's scope>. People who are interested in how to localize things in
-the containing scope should take a look there too.
-
-=head1 Subroutines
-
-=head2 XSUBs and the Argument Stack
-
-The XSUB mechanism is a simple way for Perl programs to access C subroutines.
-An XSUB routine will have a stack that contains the arguments from the Perl
-program, and a way to map from the Perl data structures to a C equivalent.
-
-The stack arguments are accessible through the C<ST(n)> macro, which returns
-the C<n>'th stack argument. Argument 0 is the first argument passed in the
-Perl subroutine call. These arguments are C<SV*>, and can be used anywhere
-an C<SV*> is used.
-
-Most of the time, output from the C routine can be handled through use of
-the RETVAL and OUTPUT directives. However, there are some cases where the
-argument stack is not already long enough to handle all the return values.
-An example is the POSIX tzname() call, which takes no arguments, but returns
-two, the local time zone's standard and summer time abbreviations.
-
-To handle this situation, the PPCODE directive is used and the stack is
-extended using the macro:
-
- EXTEND(SP, num);
-
-where C<SP> is the macro that represents the local copy of the stack pointer,
-and C<num> is the number of elements the stack should be extended by.
-
-Now that there is room on the stack, values can be pushed on it using the
-macros to push IVs, doubles, strings, and SV pointers respectively:
-
- PUSHi(IV)
- PUSHn(double)
- PUSHp(char*, I32)
- PUSHs(SV*)
-
-And now the Perl program calling C<tzname>, the two values will be assigned
-as in:
-
- ($standard_abbrev, $summer_abbrev) = POSIX::tzname;
-
-An alternate (and possibly simpler) method to pushing values on the stack is
-to use the macros:
-
- XPUSHi(IV)
- XPUSHn(double)
- XPUSHp(char*, I32)
- XPUSHs(SV*)
-
-These macros automatically adjust the stack for you, if needed. Thus, you
-do not need to call C<EXTEND> to extend the stack.
-However, see L</Putting a C value on Perl stack>
-
-For more information, consult L<perlxs> and L<perlxstut>.
-
-=head2 Calling Perl Routines from within C Programs
-
-There are four routines that can be used to call a Perl subroutine from
-within a C program. These four are:
-
- I32 call_sv(SV*, I32);
- I32 call_pv(const char*, I32);
- I32 call_method(const char*, I32);
- I32 call_argv(const char*, I32, register char**);
-
-The routine most often used is C<call_sv>. The C<SV*> argument
-contains either the name of the Perl subroutine to be called, or a
-reference to the subroutine. The second argument consists of flags
-that control the context in which the subroutine is called, whether
-or not the subroutine is being passed arguments, how errors should be
-trapped, and how to treat return values.
-
-All four routines return the number of arguments that the subroutine returned
-on the Perl stack.
-
-These routines used to be called C<perl_call_sv> etc., before Perl v5.6.0,
-but those names are now deprecated; macros of the same name are provided for
-compatibility.
-
-When using any of these routines (except C<call_argv>), the programmer
-must manipulate the Perl stack. These include the following macros and
-functions:
-
- dSP
- SP
- PUSHMARK()
- PUTBACK
- SPAGAIN
- ENTER
- SAVETMPS
- FREETMPS
- LEAVE
- XPUSH*()
- POP*()
-
-For a detailed description of calling conventions from C to Perl,
-consult L<perlcall>.
-
-=head2 Memory Allocation
-
-All memory meant to be used with the Perl API functions should be manipulated
-using the macros described in this section. The macros provide the necessary
-transparency between differences in the actual malloc implementation that is
-used within perl.
-
-It is suggested that you enable the version of malloc that is distributed
-with Perl. It keeps pools of various sizes of unallocated memory in
-order to satisfy allocation requests more quickly. However, on some
-platforms, it may cause spurious malloc or free errors.
-
- New(x, pointer, number, type);
- Newc(x, pointer, number, type, cast);
- Newz(x, pointer, number, type);
-
-These three macros are used to initially allocate memory.
-
-The first argument C<x> was a "magic cookie" that was used to keep track
-of who called the macro, to help when debugging memory problems. However,
-the current code makes no use of this feature (most Perl developers now
-use run-time memory checkers), so this argument can be any number.
-
-The second argument C<pointer> should be the name of a variable that will
-point to the newly allocated memory.
-
-The third and fourth arguments C<number> and C<type> specify how many of
-the specified type of data structure should be allocated. The argument
-C<type> is passed to C<sizeof>. The final argument to C<Newc>, C<cast>,
-should be used if the C<pointer> argument is different from the C<type>
-argument.
-
-Unlike the C<New> and C<Newc> macros, the C<Newz> macro calls C<memzero>
-to zero out all the newly allocated memory.
-
- Renew(pointer, number, type);
- Renewc(pointer, number, type, cast);
- Safefree(pointer)
-
-These three macros are used to change a memory buffer size or to free a
-piece of memory no longer needed. The arguments to C<Renew> and C<Renewc>
-match those of C<New> and C<Newc> with the exception of not needing the
-"magic cookie" argument.
-
- Move(source, dest, number, type);
- Copy(source, dest, number, type);
- Zero(dest, number, type);
-
-These three macros are used to move, copy, or zero out previously allocated
-memory. The C<source> and C<dest> arguments point to the source and
-destination starting points. Perl will move, copy, or zero out C<number>
-instances of the size of the C<type> data structure (using the C<sizeof>
-function).
-
-=head2 PerlIO
-
-The most recent development releases of Perl has been experimenting with
-removing Perl's dependency on the "normal" standard I/O suite and allowing
-other stdio implementations to be used. This involves creating a new
-abstraction layer that then calls whichever implementation of stdio Perl
-was compiled with. All XSUBs should now use the functions in the PerlIO
-abstraction layer and not make any assumptions about what kind of stdio
-is being used.
-
-For a complete description of the PerlIO abstraction, consult L<perlapio>.
-
-=head2 Putting a C value on Perl stack
-
-A lot of opcodes (this is an elementary operation in the internal perl
-stack machine) put an SV* on the stack. However, as an optimization
-the corresponding SV is (usually) not recreated each time. The opcodes
-reuse specially assigned SVs (I<target>s) which are (as a corollary)
-not constantly freed/created.
-
-Each of the targets is created only once (but see
-L<Scratchpads and recursion> below), and when an opcode needs to put
-an integer, a double, or a string on stack, it just sets the
-corresponding parts of its I<target> and puts the I<target> on stack.
-
-The macro to put this target on stack is C<PUSHTARG>, and it is
-directly used in some opcodes, as well as indirectly in zillions of
-others, which use it via C<(X)PUSH[pni]>.
-
-Because the target is reused, you must be careful when pushing multiple
-values on the stack. The following code will not do what you think:
-
- XPUSHi(10);
- XPUSHi(20);
-
-This translates as "set C<TARG> to 10, push a pointer to C<TARG> onto
-the stack; set C<TARG> to 20, push a pointer to C<TARG> onto the stack".
-At the end of the operation, the stack does not contain the values 10
-and 20, but actually contains two pointers to C<TARG>, which we have set
-to 20. If you need to push multiple different values, use C<XPUSHs>,
-which bypasses C<TARG>.
-
-On a related note, if you do use C<(X)PUSH[npi]>, then you're going to
-need a C<dTARG> in your variable declarations so that the C<*PUSH*>
-macros can make use of the local variable C<TARG>.
-
-=head2 Scratchpads
-
-The question remains on when the SVs which are I<target>s for opcodes
-are created. The answer is that they are created when the current unit --
-a subroutine or a file (for opcodes for statements outside of
-subroutines) -- is compiled. During this time a special anonymous Perl
-array is created, which is called a scratchpad for the current
-unit.
-
-A scratchpad keeps SVs which are lexicals for the current unit and are
-targets for opcodes. One can deduce that an SV lives on a scratchpad
-by looking on its flags: lexicals have C<SVs_PADMY> set, and
-I<target>s have C<SVs_PADTMP> set.
-
-The correspondence between OPs and I<target>s is not 1-to-1. Different
-OPs in the compile tree of the unit can use the same target, if this
-would not conflict with the expected life of the temporary.
-
-=head2 Scratchpads and recursion
-
-In fact it is not 100% true that a compiled unit contains a pointer to
-the scratchpad AV. In fact it contains a pointer to an AV of
-(initially) one element, and this element is the scratchpad AV. Why do
-we need an extra level of indirection?
-
-The answer is B<recursion>, and maybe (sometime soon) B<threads>. Both
-these can create several execution pointers going into the same
-subroutine. For the subroutine-child not write over the temporaries
-for the subroutine-parent (lifespan of which covers the call to the
-child), the parent and the child should have different
-scratchpads. (I<And> the lexicals should be separate anyway!)
-
-So each subroutine is born with an array of scratchpads (of length 1).
-On each entry to the subroutine it is checked that the current
-depth of the recursion is not more than the length of this array, and
-if it is, new scratchpad is created and pushed into the array.
-
-The I<target>s on this scratchpad are C<undef>s, but they are already
-marked with correct flags.
-
-=head1 Compiled code
-
-=head2 Code tree
-
-Here we describe the internal form your code is converted to by
-Perl. Start with a simple example:
-
- $a = $b + $c;
-
-This is converted to a tree similar to this one:
-
- assign-to
- / \
- + $a
- / \
- $b $c
-
-(but slightly more complicated). This tree reflects the way Perl
-parsed your code, but has nothing to do with the execution order.
-There is an additional "thread" going through the nodes of the tree
-which shows the order of execution of the nodes. In our simplified
-example above it looks like:
-
- $b ---> $c ---> + ---> $a ---> assign-to
-
-But with the actual compile tree for C<$a = $b + $c> it is different:
-some nodes I<optimized away>. As a corollary, though the actual tree
-contains more nodes than our simplified example, the execution order
-is the same as in our example.
-
-=head2 Examining the tree
-
-If you have your perl compiled for debugging (usually done with C<-D
-optimize=-g> on C<Configure> command line), you may examine the
-compiled tree by specifying C<-Dx> on the Perl command line. The
-output takes several lines per node, and for C<$b+$c> it looks like
-this:
-
- 5 TYPE = add ===> 6
- TARG = 1
- FLAGS = (SCALAR,KIDS)
- {
- TYPE = null ===> (4)
- (was rv2sv)
- FLAGS = (SCALAR,KIDS)
- {
- 3 TYPE = gvsv ===> 4
- FLAGS = (SCALAR)
- GV = main::b
- }
- }
- {
- TYPE = null ===> (5)
- (was rv2sv)
- FLAGS = (SCALAR,KIDS)
- {
- 4 TYPE = gvsv ===> 5
- FLAGS = (SCALAR)
- GV = main::c
- }
- }
-
-This tree has 5 nodes (one per C<TYPE> specifier), only 3 of them are
-not optimized away (one per number in the left column). The immediate
-children of the given node correspond to C<{}> pairs on the same level
-of indentation, thus this listing corresponds to the tree:
-
- add
- / \
- null null
- | |
- gvsv gvsv
-
-The execution order is indicated by C<===E<gt>> marks, thus it is C<3
-4 5 6> (node C<6> is not included into above listing), i.e.,
-C<gvsv gvsv add whatever>.
-
-Each of these nodes represents an op, a fundamental operation inside the
-Perl core. The code which implements each operation can be found in the
-F<pp*.c> files; the function which implements the op with type C<gvsv>
-is C<pp_gvsv>, and so on. As the tree above shows, different ops have
-different numbers of children: C<add> is a binary operator, as one would
-expect, and so has two children. To accommodate the various different
-numbers of children, there are various types of op data structure, and
-they link together in different ways.
-
-The simplest type of op structure is C<OP>: this has no children. Unary
-operators, C<UNOP>s, have one child, and this is pointed to by the
-C<op_first> field. Binary operators (C<BINOP>s) have not only an
-C<op_first> field but also an C<op_last> field. The most complex type of
-op is a C<LISTOP>, which has any number of children. In this case, the
-first child is pointed to by C<op_first> and the last child by
-C<op_last>. The children in between can be found by iteratively
-following the C<op_sibling> pointer from the first child to the last.
-
-There are also two other op types: a C<PMOP> holds a regular expression,
-and has no children, and a C<LOOP> may or may not have children. If the
-C<op_children> field is non-zero, it behaves like a C<LISTOP>. To
-complicate matters, if a C<UNOP> is actually a C<null> op after
-optimization (see L</Compile pass 2: context propagation>) it will still
-have children in accordance with its former type.
-
-=head2 Compile pass 1: check routines
-
-The tree is created by the compiler while I<yacc> code feeds it
-the constructions it recognizes. Since I<yacc> works bottom-up, so does
-the first pass of perl compilation.
-
-What makes this pass interesting for perl developers is that some
-optimization may be performed on this pass. This is optimization by
-so-called "check routines". The correspondence between node names
-and corresponding check routines is described in F<opcode.pl> (do not
-forget to run C<make regen_headers> if you modify this file).
-
-A check routine is called when the node is fully constructed except
-for the execution-order thread. Since at this time there are no
-back-links to the currently constructed node, one can do most any
-operation to the top-level node, including freeing it and/or creating
-new nodes above/below it.
-
-The check routine returns the node which should be inserted into the
-tree (if the top-level node was not modified, check routine returns
-its argument).
-
-By convention, check routines have names C<ck_*>. They are usually
-called from C<new*OP> subroutines (or C<convert>) (which in turn are
-called from F<perly.y>).
-
-=head2 Compile pass 1a: constant folding
-
-Immediately after the check routine is called the returned node is
-checked for being compile-time executable. If it is (the value is
-judged to be constant) it is immediately executed, and a I<constant>
-node with the "return value" of the corresponding subtree is
-substituted instead. The subtree is deleted.
-
-If constant folding was not performed, the execution-order thread is
-created.
-
-=head2 Compile pass 2: context propagation
-
-When a context for a part of compile tree is known, it is propagated
-down through the tree. At this time the context can have 5 values
-(instead of 2 for runtime context): void, boolean, scalar, list, and
-lvalue. In contrast with the pass 1 this pass is processed from top
-to bottom: a node's context determines the context for its children.
-
-Additional context-dependent optimizations are performed at this time.
-Since at this moment the compile tree contains back-references (via
-"thread" pointers), nodes cannot be free()d now. To allow
-optimized-away nodes at this stage, such nodes are null()ified instead
-of free()ing (i.e. their type is changed to OP_NULL).
-
-=head2 Compile pass 3: peephole optimization
-
-After the compile tree for a subroutine (or for an C<eval> or a file)
-is created, an additional pass over the code is performed. This pass
-is neither top-down or bottom-up, but in the execution order (with
-additional complications for conditionals). These optimizations are
-done in the subroutine peep(). Optimizations performed at this stage
-are subject to the same restrictions as in the pass 2.
-
-=head1 Examining internal data structures with the C<dump> functions
-
-To aid debugging, the source file F<dump.c> contains a number of
-functions which produce formatted output of internal data structures.
-
-The most commonly used of these functions is C<Perl_sv_dump>; it's used
-for dumping SVs, AVs, HVs, and CVs. The C<Devel::Peek> module calls
-C<sv_dump> to produce debugging output from Perl-space, so users of that
-module should already be familiar with its format.
-
-C<Perl_op_dump> can be used to dump an C<OP> structure or any of its
-derivatives, and produces output similiar to C<perl -Dx>; in fact,
-C<Perl_dump_eval> will dump the main root of the code being evaluated,
-exactly like C<-Dx>.
-
-Other useful functions are C<Perl_dump_sub>, which turns a C<GV> into an
-op tree, C<Perl_dump_packsubs> which calls C<Perl_dump_sub> on all the
-subroutines in a package like so: (Thankfully, these are all xsubs, so
-there is no op tree)
-
- (gdb) print Perl_dump_packsubs(PL_defstash)
-
- SUB attributes::bootstrap = (xsub 0x811fedc 0)
-
- SUB UNIVERSAL::can = (xsub 0x811f50c 0)
-
- SUB UNIVERSAL::isa = (xsub 0x811f304 0)
-
- SUB UNIVERSAL::VERSION = (xsub 0x811f7ac 0)
-
- SUB DynaLoader::boot_DynaLoader = (xsub 0x805b188 0)
-
-and C<Perl_dump_all>, which dumps all the subroutines in the stash and
-the op tree of the main root.
-
-=head1 How multiple interpreters and concurrency are supported
-
-=head2 Background and PERL_IMPLICIT_CONTEXT
-
-The Perl interpreter can be regarded as a closed box: it has an API
-for feeding it code or otherwise making it do things, but it also has
-functions for its own use. This smells a lot like an object, and
-there are ways for you to build Perl so that you can have multiple
-interpreters, with one interpreter represented either as a C++ object,
-a C structure, or inside a thread. The thread, the C structure, or
-the C++ object will contain all the context, the state of that
-interpreter.
-
-Three macros control the major Perl build flavors: MULTIPLICITY,
-USE_THREADS and PERL_OBJECT. The MULTIPLICITY build has a C structure
-that packages all the interpreter state, there is a similar thread-specific
-data structure under USE_THREADS, and the (now deprecated) PERL_OBJECT
-build has a C++ class to maintain interpreter state. In all three cases,
-PERL_IMPLICIT_CONTEXT is also normally defined, and enables the
-support for passing in a "hidden" first argument that represents all three
-data structures.
-
-All this obviously requires a way for the Perl internal functions to be
-C++ methods, subroutines taking some kind of structure as the first
-argument, or subroutines taking nothing as the first argument. To
-enable these three very different ways of building the interpreter,
-the Perl source (as it does in so many other situations) makes heavy
-use of macros and subroutine naming conventions.
-
-First problem: deciding which functions will be public API functions and
-which will be private. All functions whose names begin C<S_> are private
-(think "S" for "secret" or "static"). All other functions begin with
-"Perl_", but just because a function begins with "Perl_" does not mean it is
-part of the API. (See L</Internal Functions>.) The easiest way to be B<sure> a
-function is part of the API is to find its entry in L<perlapi>.
-If it exists in L<perlapi>, it's part of the API. If it doesn't, and you
-think it should be (i.e., you need it for your extension), send mail via
-L<perlbug> explaining why you think it should be.
-
-Second problem: there must be a syntax so that the same subroutine
-declarations and calls can pass a structure as their first argument,
-or pass nothing. To solve this, the subroutines are named and
-declared in a particular way. Here's a typical start of a static
-function used within the Perl guts:
-
- STATIC void
- S_incline(pTHX_ char *s)
-
-STATIC becomes "static" in C, and is #define'd to nothing in C++.
-
-A public function (i.e. part of the internal API, but not necessarily
-sanctioned for use in extensions) begins like this:
-
- void
- Perl_sv_setsv(pTHX_ SV* dsv, SV* ssv)
-
-C<pTHX_> is one of a number of macros (in perl.h) that hide the
-details of the interpreter's context. THX stands for "thread", "this",
-or "thingy", as the case may be. (And no, George Lucas is not involved. :-)
-The first character could be 'p' for a B<p>rototype, 'a' for B<a>rgument,
-or 'd' for B<d>eclaration, so we have C<pTHX>, C<aTHX> and C<dTHX>, and
-their variants.
-
-When Perl is built without options that set PERL_IMPLICIT_CONTEXT, there is no
-first argument containing the interpreter's context. The trailing underscore
-in the pTHX_ macro indicates that the macro expansion needs a comma
-after the context argument because other arguments follow it. If
-PERL_IMPLICIT_CONTEXT is not defined, pTHX_ will be ignored, and the
-subroutine is not prototyped to take the extra argument. The form of the
-macro without the trailing underscore is used when there are no additional
-explicit arguments.
-
-When a core function calls another, it must pass the context. This
-is normally hidden via macros. Consider C<sv_setsv>. It expands into
-something like this:
-
- ifdef PERL_IMPLICIT_CONTEXT
- define sv_setsv(a,b) Perl_sv_setsv(aTHX_ a, b)
- /* can't do this for vararg functions, see below */
- else
- define sv_setsv Perl_sv_setsv
- endif
-
-This works well, and means that XS authors can gleefully write:
-
- sv_setsv(foo, bar);
-
-and still have it work under all the modes Perl could have been
-compiled with.
-
-Under PERL_OBJECT in the core, that will translate to either:
-
- CPerlObj::Perl_sv_setsv(foo,bar); # in CPerlObj functions,
- # C++ takes care of 'this'
- or
-
- pPerl->Perl_sv_setsv(foo,bar); # in truly static functions,
- # see objXSUB.h
-
-Under PERL_OBJECT in extensions (aka PERL_CAPI), or under
-MULTIPLICITY/USE_THREADS with PERL_IMPLICIT_CONTEXT in both core
-and extensions, it will become:
-
- Perl_sv_setsv(aTHX_ foo, bar); # the canonical Perl "API"
- # for all build flavors
-
-This doesn't work so cleanly for varargs functions, though, as macros
-imply that the number of arguments is known in advance. Instead we
-either need to spell them out fully, passing C<aTHX_> as the first
-argument (the Perl core tends to do this with functions like
-Perl_warner), or use a context-free version.
-
-The context-free version of Perl_warner is called
-Perl_warner_nocontext, and does not take the extra argument. Instead
-it does dTHX; to get the context from thread-local storage. We
-C<#define warner Perl_warner_nocontext> so that extensions get source
-compatibility at the expense of performance. (Passing an arg is
-cheaper than grabbing it from thread-local storage.)
-
-You can ignore [pad]THX[xo] when browsing the Perl headers/sources.
-Those are strictly for use within the core. Extensions and embedders
-need only be aware of [pad]THX.
-
-=head2 So what happened to dTHR?
-
-C<dTHR> was introduced in perl 5.005 to support the older thread model.
-The older thread model now uses the C<THX> mechanism to pass context
-pointers around, so C<dTHR> is not useful any more. Perl 5.6.0 and
-later still have it for backward source compatibility, but it is defined
-to be a no-op.
-
-=head2 How do I use all this in extensions?
-
-When Perl is built with PERL_IMPLICIT_CONTEXT, extensions that call
-any functions in the Perl API will need to pass the initial context
-argument somehow. The kicker is that you will need to write it in
-such a way that the extension still compiles when Perl hasn't been
-built with PERL_IMPLICIT_CONTEXT enabled.
-
-There are three ways to do this. First, the easy but inefficient way,
-which is also the default, in order to maintain source compatibility
-with extensions: whenever XSUB.h is #included, it redefines the aTHX
-and aTHX_ macros to call a function that will return the context.
-Thus, something like:
-
- sv_setsv(asv, bsv);
-
-in your extension will translate to this when PERL_IMPLICIT_CONTEXT is
-in effect:
-
- Perl_sv_setsv(Perl_get_context(), asv, bsv);
-
-or to this otherwise:
-
- Perl_sv_setsv(asv, bsv);
-
-You have to do nothing new in your extension to get this; since
-the Perl library provides Perl_get_context(), it will all just
-work.
-
-The second, more efficient way is to use the following template for
-your Foo.xs:
-
- #define PERL_NO_GET_CONTEXT /* we want efficiency */
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
-
- static my_private_function(int arg1, int arg2);
-
- static SV *
- my_private_function(int arg1, int arg2)
- {
- dTHX; /* fetch context */
- ... call many Perl API functions ...
- }
-
- [... etc ...]
-
- MODULE = Foo PACKAGE = Foo
-
- /* typical XSUB */
-
- void
- my_xsub(arg)
- int arg
- CODE:
- my_private_function(arg, 10);
-
-Note that the only two changes from the normal way of writing an
-extension is the addition of a C<#define PERL_NO_GET_CONTEXT> before
-including the Perl headers, followed by a C<dTHX;> declaration at
-the start of every function that will call the Perl API. (You'll
-know which functions need this, because the C compiler will complain
-that there's an undeclared identifier in those functions.) No changes
-are needed for the XSUBs themselves, because the XS() macro is
-correctly defined to pass in the implicit context if needed.
-
-The third, even more efficient way is to ape how it is done within
-the Perl guts:
-
-
- #define PERL_NO_GET_CONTEXT /* we want efficiency */
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
-
- /* pTHX_ only needed for functions that call Perl API */
- static my_private_function(pTHX_ int arg1, int arg2);
-
- static SV *
- my_private_function(pTHX_ int arg1, int arg2)
- {
- /* dTHX; not needed here, because THX is an argument */
- ... call Perl API functions ...
- }
-
- [... etc ...]
-
- MODULE = Foo PACKAGE = Foo
-
- /* typical XSUB */
-
- void
- my_xsub(arg)
- int arg
- CODE:
- my_private_function(aTHX_ arg, 10);
-
-This implementation never has to fetch the context using a function
-call, since it is always passed as an extra argument. Depending on
-your needs for simplicity or efficiency, you may mix the previous
-two approaches freely.
-
-Never add a comma after C<pTHX> yourself--always use the form of the
-macro with the underscore for functions that take explicit arguments,
-or the form without the argument for functions with no explicit arguments.
-
-=head2 Should I do anything special if I call perl from multiple threads?
-
-If you create interpreters in one thread and then proceed to call them in
-another, you need to make sure perl's own Thread Local Storage (TLS) slot is
-initialized correctly in each of those threads.
-
-The C<perl_alloc> and C<perl_clone> API functions will automatically set
-the TLS slot to the interpreter they created, so that there is no need to do
-anything special if the interpreter is always accessed in the same thread that
-created it, and that thread did not create or call any other interpreters
-afterwards. If that is not the case, you have to set the TLS slot of the
-thread before calling any functions in the Perl API on that particular
-interpreter. This is done by calling the C<PERL_SET_CONTEXT> macro in that
-thread as the first thing you do:
-
- /* do this before doing anything else with some_perl */
- PERL_SET_CONTEXT(some_perl);
-
- ... other Perl API calls on some_perl go here ...
-
-=head2 Future Plans and PERL_IMPLICIT_SYS
-
-Just as PERL_IMPLICIT_CONTEXT provides a way to bundle up everything
-that the interpreter knows about itself and pass it around, so too are
-there plans to allow the interpreter to bundle up everything it knows
-about the environment it's running on. This is enabled with the
-PERL_IMPLICIT_SYS macro. Currently it only works with PERL_OBJECT
-and USE_THREADS on Windows (see inside iperlsys.h).
-
-This allows the ability to provide an extra pointer (called the "host"
-environment) for all the system calls. This makes it possible for
-all the system stuff to maintain their own state, broken down into
-seven C structures. These are thin wrappers around the usual system
-calls (see win32/perllib.c) for the default perl executable, but for a
-more ambitious host (like the one that would do fork() emulation) all
-the extra work needed to pretend that different interpreters are
-actually different "processes", would be done here.
-
-The Perl engine/interpreter and the host are orthogonal entities.
-There could be one or more interpreters in a process, and one or
-more "hosts", with free association between them.
-
-=head1 Internal Functions
-
-All of Perl's internal functions which will be exposed to the outside
-world are be prefixed by C<Perl_> so that they will not conflict with XS
-functions or functions used in a program in which Perl is embedded.
-Similarly, all global variables begin with C<PL_>. (By convention,
-static functions start with C<S_>)
-
-Inside the Perl core, you can get at the functions either with or
-without the C<Perl_> prefix, thanks to a bunch of defines that live in
-F<embed.h>. This header file is generated automatically from
-F<embed.pl>. F<embed.pl> also creates the prototyping header files for
-the internal functions, generates the documentation and a lot of other
-bits and pieces. It's important that when you add a new function to the
-core or change an existing one, you change the data in the table at the
-end of F<embed.pl> as well. Here's a sample entry from that table:
-
- Apd |SV** |av_fetch |AV* ar|I32 key|I32 lval
-
-The second column is the return type, the third column the name. Columns
-after that are the arguments. The first column is a set of flags:
-
-=over 3
-
-=item A
-
-This function is a part of the public API.
-
-=item p
-
-This function has a C<Perl_> prefix; ie, it is defined as C<Perl_av_fetch>
-
-=item d
-
-This function has documentation using the C<apidoc> feature which we'll
-look at in a second.
-
-=back
-
-Other available flags are:
-
-=over 3
-
-=item s
-
-This is a static function and is defined as C<S_whatever>, and usually
-called within the sources as C<whatever(...)>.
-
-=item n
-
-This does not use C<aTHX_> and C<pTHX> to pass interpreter context. (See
-L<perlguts/Background and PERL_IMPLICIT_CONTEXT>.)
-
-=item r
-
-This function never returns; C<croak>, C<exit> and friends.
-
-=item f
-
-This function takes a variable number of arguments, C<printf> style.
-The argument list should end with C<...>, like this:
-
- Afprd |void |croak |const char* pat|...
-
-=item M
-
-This function is part of the experimental development API, and may change
-or disappear without notice.
-
-=item o
-
-This function should not have a compatibility macro to define, say,
-C<Perl_parse> to C<parse>. It must be called as C<Perl_parse>.
-
-=item j
-
-This function is not a member of C<CPerlObj>. If you don't know
-what this means, don't use it.
-
-=item x
-
-This function isn't exported out of the Perl core.
-
-=back
-
-If you edit F<embed.pl>, you will need to run C<make regen_headers> to
-force a rebuild of F<embed.h> and other auto-generated files.
-
-=head2 Formatted Printing of IVs, UVs, and NVs
-
-If you are printing IVs, UVs, or NVS instead of the stdio(3) style
-formatting codes like C<%d>, C<%ld>, C<%f>, you should use the
-following macros for portability
-
- IVdf IV in decimal
- UVuf UV in decimal
- UVof UV in octal
- UVxf UV in hexadecimal
- NVef NV %e-like
- NVff NV %f-like
- NVgf NV %g-like
-
-These will take care of 64-bit integers and long doubles.
-For example:
-
- printf("IV is %"IVdf"\n", iv);
-
-The IVdf will expand to whatever is the correct format for the IVs.
-
-If you are printing addresses of pointers, use UVxf combined
-with PTR2UV(), do not use %lx or %p.
-
-=head2 Pointer-To-Integer and Integer-To-Pointer
-
-Because pointer size does not necessarily equal integer size,
-use the follow macros to do it right.
-
- PTR2UV(pointer)
- PTR2IV(pointer)
- PTR2NV(pointer)
- INT2PTR(pointertotype, integer)
-
-For example:
-
- IV iv = ...;
- SV *sv = INT2PTR(SV*, iv);
-
-and
-
- AV *av = ...;
- UV uv = PTR2UV(av);
-
-=head2 Source Documentation
-
-There's an effort going on to document the internal functions and
-automatically produce reference manuals from them - L<perlapi> is one
-such manual which details all the functions which are available to XS
-writers. L<perlintern> is the autogenerated manual for the functions
-which are not part of the API and are supposedly for internal use only.
-
-Source documentation is created by putting POD comments into the C
-source, like this:
-
- /*
- =for apidoc sv_setiv
-
- Copies an integer into the given SV. Does not handle 'set' magic. See
- C<sv_setiv_mg>.
-
- =cut
- */
-
-Please try and supply some documentation if you add functions to the
-Perl core.
-
-=head1 Unicode Support
-
-Perl 5.6.0 introduced Unicode support. It's important for porters and XS
-writers to understand this support and make sure that the code they
-write does not corrupt Unicode data.
-
-=head2 What B<is> Unicode, anyway?
-
-In the olden, less enlightened times, we all used to use ASCII. Most of
-us did, anyway. The big problem with ASCII is that it's American. Well,
-no, that's not actually the problem; the problem is that it's not
-particularly useful for people who don't use the Roman alphabet. What
-used to happen was that particular languages would stick their own
-alphabet in the upper range of the sequence, between 128 and 255. Of
-course, we then ended up with plenty of variants that weren't quite
-ASCII, and the whole point of it being a standard was lost.
-
-Worse still, if you've got a language like Chinese or
-Japanese that has hundreds or thousands of characters, then you really
-can't fit them into a mere 256, so they had to forget about ASCII
-altogether, and build their own systems using pairs of numbers to refer
-to one character.
-
-To fix this, some people formed Unicode, Inc. and
-produced a new character set containing all the characters you can
-possibly think of and more. There are several ways of representing these
-characters, and the one Perl uses is called UTF8. UTF8 uses
-a variable number of bytes to represent a character, instead of just
-one. You can learn more about Unicode at http://www.unicode.org/
-
-=head2 How can I recognise a UTF8 string?
-
-You can't. This is because UTF8 data is stored in bytes just like
-non-UTF8 data. The Unicode character 200, (C<0xC8> for you hex types)
-capital E with a grave accent, is represented by the two bytes
-C<v196.172>. Unfortunately, the non-Unicode string C<chr(196).chr(172)>
-has that byte sequence as well. So you can't tell just by looking - this
-is what makes Unicode input an interesting problem.
-
-The API function C<is_utf8_string> can help; it'll tell you if a string
-contains only valid UTF8 characters. However, it can't do the work for
-you. On a character-by-character basis, C<is_utf8_char> will tell you
-whether the current character in a string is valid UTF8.
-
-=head2 How does UTF8 represent Unicode characters?
-
-As mentioned above, UTF8 uses a variable number of bytes to store a
-character. Characters with values 1...128 are stored in one byte, just
-like good ol' ASCII. Character 129 is stored as C<v194.129>; this
-continues up to character 191, which is C<v194.191>. Now we've run out of
-bits (191 is binary C<10111111>) so we move on; 192 is C<v195.128>. And
-so it goes on, moving to three bytes at character 2048.
-
-Assuming you know you're dealing with a UTF8 string, you can find out
-how long the first character in it is with the C<UTF8SKIP> macro:
-
- char *utf = "\305\233\340\240\201";
- I32 len;
-
- len = UTF8SKIP(utf); /* len is 2 here */
- utf += len;
- len = UTF8SKIP(utf); /* len is 3 here */
-
-Another way to skip over characters in a UTF8 string is to use
-C<utf8_hop>, which takes a string and a number of characters to skip
-over. You're on your own about bounds checking, though, so don't use it
-lightly.
-
-All bytes in a multi-byte UTF8 character will have the high bit set, so
-you can test if you need to do something special with this character
-like this:
-
- UV uv;
-
- if (utf & 0x80)
- /* Must treat this as UTF8 */
- uv = utf8_to_uv(utf);
- else
- /* OK to treat this character as a byte */
- uv = *utf;
-
-You can also see in that example that we use C<utf8_to_uv> to get the
-value of the character; the inverse function C<uv_to_utf8> is available
-for putting a UV into UTF8:
-
- if (uv > 0x80)
- /* Must treat this as UTF8 */
- utf8 = uv_to_utf8(utf8, uv);
- else
- /* OK to treat this character as a byte */
- *utf8++ = uv;
-
-You B<must> convert characters to UVs using the above functions if
-you're ever in a situation where you have to match UTF8 and non-UTF8
-characters. You may not skip over UTF8 characters in this case. If you
-do this, you'll lose the ability to match hi-bit non-UTF8 characters;
-for instance, if your UTF8 string contains C<v196.172>, and you skip
-that character, you can never match a C<chr(200)> in a non-UTF8 string.
-So don't do that!
-
-=head2 How does Perl store UTF8 strings?
-
-Currently, Perl deals with Unicode strings and non-Unicode strings
-slightly differently. If a string has been identified as being UTF-8
-encoded, Perl will set a flag in the SV, C<SVf_UTF8>. You can check and
-manipulate this flag with the following macros:
-
- SvUTF8(sv)
- SvUTF8_on(sv)
- SvUTF8_off(sv)
-
-This flag has an important effect on Perl's treatment of the string: if
-Unicode data is not properly distinguished, regular expressions,
-C<length>, C<substr> and other string handling operations will have
-undesirable results.
-
-The problem comes when you have, for instance, a string that isn't
-flagged is UTF8, and contains a byte sequence that could be UTF8 -
-especially when combining non-UTF8 and UTF8 strings.
-
-Never forget that the C<SVf_UTF8> flag is separate to the PV value; you
-need be sure you don't accidentally knock it off while you're
-manipulating SVs. More specifically, you cannot expect to do this:
-
- SV *sv;
- SV *nsv;
- STRLEN len;
- char *p;
-
- p = SvPV(sv, len);
- frobnicate(p);
- nsv = newSVpvn(p, len);
-
-The C<char*> string does not tell you the whole story, and you can't
-copy or reconstruct an SV just by copying the string value. Check if the
-old SV has the UTF8 flag set, and act accordingly:
-
- p = SvPV(sv, len);
- frobnicate(p);
- nsv = newSVpvn(p, len);
- if (SvUTF8(sv))
- SvUTF8_on(nsv);
-
-In fact, your C<frobnicate> function should be made aware of whether or
-not it's dealing with UTF8 data, so that it can handle the string
-appropriately.
-
-=head2 How do I convert a string to UTF8?
-
-If you're mixing UTF8 and non-UTF8 strings, you might find it necessary
-to upgrade one of the strings to UTF8. If you've got an SV, the easiest
-way to do this is:
-
- sv_utf8_upgrade(sv);
-
-However, you must not do this, for example:
-
- if (!SvUTF8(left))
- sv_utf8_upgrade(left);
-
-If you do this in a binary operator, you will actually change one of the
-strings that came into the operator, and, while it shouldn't be noticeable
-by the end user, it can cause problems.
-
-Instead, C<bytes_to_utf8> will give you a UTF8-encoded B<copy> of its
-string argument. This is useful for having the data available for
-comparisons and so on, without harming the original SV. There's also
-C<utf8_to_bytes> to go the other way, but naturally, this will fail if
-the string contains any characters above 255 that can't be represented
-in a single byte.
-
-=head2 Is there anything else I need to know?
-
-Not really. Just remember these things:
-
-=over 3
-
-=item *
-
-There's no way to tell if a string is UTF8 or not. You can tell if an SV
-is UTF8 by looking at is C<SvUTF8> flag. Don't forget to set the flag if
-something should be UTF8. Treat the flag as part of the PV, even though
-it's not - if you pass on the PV to somewhere, pass on the flag too.
-
-=item *
-
-If a string is UTF8, B<always> use C<utf8_to_uv> to get at the value,
-unless C<!(*s & 0x80)> in which case you can use C<*s>.
-
-=item *
-
-When writing to a UTF8 string, B<always> use C<uv_to_utf8>, unless
-C<uv < 0x80> in which case you can use C<*s = uv>.
-
-=item *
-
-Mixing UTF8 and non-UTF8 strings is tricky. Use C<bytes_to_utf8> to get
-a new string which is UTF8 encoded. There are tricks you can use to
-delay deciding whether you need to use a UTF8 string until you get to a
-high character - C<HALF_UPGRADE> is one of those.
-
-=back
-
-=head1 AUTHORS
-
-Until May 1997, this document was maintained by Jeff Okamoto
-<okamoto@corp.hp.com>. It is now maintained as part of Perl itself
-by the Perl 5 Porters <perl5-porters@perl.org>.
-
-With lots of help and suggestions from Dean Roehrich, Malcolm Beattie,
-Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil
-Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer,
-Stephen McCamant, and Gurusamy Sarathy.
-
-API Listing originally by Dean Roehrich <roehrich@cray.com>.
-
-Modifications to autogenerate the API listing (L<perlapi>) by Benjamin
-Stuhl.
-
-=head1 SEE ALSO
-
-perlapi(1), perlintern(1), perlxs(1), perlembed(1)
diff --git a/contrib/perl5/pod/perlhack.pod b/contrib/perl5/pod/perlhack.pod
deleted file mode 100644
index d524fe5..0000000
--- a/contrib/perl5/pod/perlhack.pod
+++ /dev/null
@@ -1,1722 +0,0 @@
-=head1 NAME
-
-perlhack - How to hack at the Perl internals
-
-=head1 DESCRIPTION
-
-This document attempts to explain how Perl development takes place,
-and ends with some suggestions for people wanting to become bona fide
-porters.
-
-The perl5-porters mailing list is where the Perl standard distribution
-is maintained and developed. The list can get anywhere from 10 to 150
-messages a day, depending on the heatedness of the debate. Most days
-there are two or three patches, extensions, features, or bugs being
-discussed at a time.
-
-A searchable archive of the list is at:
-
- http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
-
-The list is also archived under the usenet group name
-C<perl.porters-gw> at:
-
- http://www.deja.com/
-
-List subscribers (the porters themselves) come in several flavours.
-Some are quiet curious lurkers, who rarely pitch in and instead watch
-the ongoing development to ensure they're forewarned of new changes or
-features in Perl. Some are representatives of vendors, who are there
-to make sure that Perl continues to compile and work on their
-platforms. Some patch any reported bug that they know how to fix,
-some are actively patching their pet area (threads, Win32, the regexp
-engine), while others seem to do nothing but complain. In other
-words, it's your usual mix of technical people.
-
-Over this group of porters presides Larry Wall. He has the final word
-in what does and does not change in the Perl language. Various
-releases of Perl are shepherded by a ``pumpking'', a porter
-responsible for gathering patches, deciding on a patch-by-patch
-feature-by-feature basis what will and will not go into the release.
-For instance, Gurusamy Sarathy is the pumpking for the 5.6 release of
-Perl.
-
-In addition, various people are pumpkings for different things. For
-instance, Andy Dougherty and Jarkko Hietaniemi share the I<Configure>
-pumpkin, and Tom Christiansen is the documentation pumpking.
-
-Larry sees Perl development along the lines of the US government:
-there's the Legislature (the porters), the Executive branch (the
-pumpkings), and the Supreme Court (Larry). The legislature can
-discuss and submit patches to the executive branch all they like, but
-the executive branch is free to veto them. Rarely, the Supreme Court
-will side with the executive branch over the legislature, or the
-legislature over the executive branch. Mostly, however, the
-legislature and the executive branch are supposed to get along and
-work out their differences without impeachment or court cases.
-
-You might sometimes see reference to Rule 1 and Rule 2. Larry's power
-as Supreme Court is expressed in The Rules:
-
-=over 4
-
-=item 1
-
-Larry is always by definition right about how Perl should behave.
-This means he has final veto power on the core functionality.
-
-=item 2
-
-Larry is allowed to change his mind about any matter at a later date,
-regardless of whether he previously invoked Rule 1.
-
-=back
-
-Got that? Larry is always right, even when he was wrong. It's rare
-to see either Rule exercised, but they are often alluded to.
-
-New features and extensions to the language are contentious, because
-the criteria used by the pumpkings, Larry, and other porters to decide
-which features should be implemented and incorporated are not codified
-in a few small design goals as with some other languages. Instead,
-the heuristics are flexible and often difficult to fathom. Here is
-one person's list, roughly in decreasing order of importance, of
-heuristics that new features have to be weighed against:
-
-=over 4
-
-=item Does concept match the general goals of Perl?
-
-These haven't been written anywhere in stone, but one approximation
-is:
-
- 1. Keep it fast, simple, and useful.
- 2. Keep features/concepts as orthogonal as possible.
- 3. No arbitrary limits (platforms, data sizes, cultures).
- 4. Keep it open and exciting to use/patch/advocate Perl everywhere.
- 5. Either assimilate new technologies, or build bridges to them.
-
-=item Where is the implementation?
-
-All the talk in the world is useless without an implementation. In
-almost every case, the person or people who argue for a new feature
-will be expected to be the ones who implement it. Porters capable
-of coding new features have their own agendas, and are not available
-to implement your (possibly good) idea.
-
-=item Backwards compatibility
-
-It's a cardinal sin to break existing Perl programs. New warnings are
-contentious--some say that a program that emits warnings is not
-broken, while others say it is. Adding keywords has the potential to
-break programs, changing the meaning of existing token sequences or
-functions might break programs.
-
-=item Could it be a module instead?
-
-Perl 5 has extension mechanisms, modules and XS, specifically to avoid
-the need to keep changing the Perl interpreter. You can write modules
-that export functions, you can give those functions prototypes so they
-can be called like built-in functions, you can even write XS code to
-mess with the runtime data structures of the Perl interpreter if you
-want to implement really complicated things. If it can be done in a
-module instead of in the core, it's highly unlikely to be added.
-
-=item Is the feature generic enough?
-
-Is this something that only the submitter wants added to the language,
-or would it be broadly useful? Sometimes, instead of adding a feature
-with a tight focus, the porters might decide to wait until someone
-implements the more generalized feature. For instance, instead of
-implementing a ``delayed evaluation'' feature, the porters are waiting
-for a macro system that would permit delayed evaluation and much more.
-
-=item Does it potentially introduce new bugs?
-
-Radical rewrites of large chunks of the Perl interpreter have the
-potential to introduce new bugs. The smaller and more localized the
-change, the better.
-
-=item Does it preclude other desirable features?
-
-A patch is likely to be rejected if it closes off future avenues of
-development. For instance, a patch that placed a true and final
-interpretation on prototypes is likely to be rejected because there
-are still options for the future of prototypes that haven't been
-addressed.
-
-=item Is the implementation robust?
-
-Good patches (tight code, complete, correct) stand more chance of
-going in. Sloppy or incorrect patches might be placed on the back
-burner until the pumpking has time to fix, or might be discarded
-altogether without further notice.
-
-=item Is the implementation generic enough to be portable?
-
-The worst patches make use of a system-specific features. It's highly
-unlikely that nonportable additions to the Perl language will be
-accepted.
-
-=item Is there enough documentation?
-
-Patches without documentation are probably ill-thought out or
-incomplete. Nothing can be added without documentation, so submitting
-a patch for the appropriate manpages as well as the source code is
-always a good idea. If appropriate, patches should add to the test
-suite as well.
-
-=item Is there another way to do it?
-
-Larry said ``Although the Perl Slogan is I<There's More Than One Way
-to Do It>, I hesitate to make 10 ways to do something''. This is a
-tricky heuristic to navigate, though--one man's essential addition is
-another man's pointless cruft.
-
-=item Does it create too much work?
-
-Work for the pumpking, work for Perl programmers, work for module
-authors, ... Perl is supposed to be easy.
-
-=item Patches speak louder than words
-
-Working code is always preferred to pie-in-the-sky ideas. A patch to
-add a feature stands a much higher chance of making it to the language
-than does a random feature request, no matter how fervently argued the
-request might be. This ties into ``Will it be useful?'', as the fact
-that someone took the time to make the patch demonstrates a strong
-desire for the feature.
-
-=back
-
-If you're on the list, you might hear the word ``core'' bandied
-around. It refers to the standard distribution. ``Hacking on the
-core'' means you're changing the C source code to the Perl
-interpreter. ``A core module'' is one that ships with Perl.
-
-=head2 Keeping in sync
-
-The source code to the Perl interpreter, in its different versions, is
-kept in a repository managed by a revision control system (which is
-currently the Perforce program, see http://perforce.com/). The
-pumpkings and a few others have access to the repository to check in
-changes. Periodically the pumpking for the development version of Perl
-will release a new version, so the rest of the porters can see what's
-changed. The current state of the main trunk of repository, and patches
-that describe the individual changes that have happened since the last
-public release are available at this location:
-
- ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/
-
-If you are a member of the perl5-porters mailing list, it is a good
-thing to keep in touch with the most recent changes. If not only to
-verify if what you would have posted as a bug report isn't already
-solved in the most recent available perl development branch, also
-known as perl-current, bleading edge perl, bleedperl or bleadperl.
-
-Needless to say, the source code in perl-current is usually in a perpetual
-state of evolution. You should expect it to be very buggy. Do B<not> use
-it for any purpose other than testing and development.
-
-Keeping in sync with the most recent branch can be done in several ways,
-but the most convenient and reliable way is using B<rsync>, available at
-ftp://rsync.samba.org/pub/rsync/ . (You can also get the most recent
-branch by FTP.)
-
-If you choose to keep in sync using rsync, there are two approaches
-to doing so:
-
-=over 4
-
-=item rsync'ing the source tree
-
-Presuming you are in the directory where your perl source resides
-and you have rsync installed and available, you can `upgrade' to
-the bleadperl using:
-
- # rsync -avz rsync://ftp.linux.activestate.com/perl-current/ .
-
-This takes care of updating every single item in the source tree to
-the latest applied patch level, creating files that are new (to your
-distribution) and setting date/time stamps of existing files to
-reflect the bleadperl status.
-
-You can than check what patch was the latest that was applied by
-looking in the file B<.patch>, which will show the number of the
-latest patch.
-
-If you have more than one machine to keep in sync, and not all of
-them have access to the WAN (so you are not able to rsync all the
-source trees to the real source), there are some ways to get around
-this problem.
-
-=over 4
-
-=item Using rsync over the LAN
-
-Set up a local rsync server which makes the rsynced source tree
-available to the LAN and sync the other machines against this
-directory.
-
-From http://rsync.samba.org/README.html:
-
- "Rsync uses rsh or ssh for communication. It does not need to be
- setuid and requires no special privileges for installation. It
- does not require a inetd entry or a deamon. You must, however,
- have a working rsh or ssh system. Using ssh is recommended for
- its security features."
-
-=item Using pushing over the NFS
-
-Having the other systems mounted over the NFS, you can take an
-active pushing approach by checking the just updated tree against
-the other not-yet synced trees. An example would be
-
- #!/usr/bin/perl -w
-
- use strict;
- use File::Copy;
-
- my %MF = map {
- m/(\S+)/;
- $1 => [ (stat $1)[2, 7, 9] ]; # mode, size, mtime
- } `cat MANIFEST`;
-
- my %remote = map { $_ => "/$_/pro/3gl/CPAN/perl-5.7.1" } qw(host1 host2);
-
- foreach my $host (keys %remote) {
- unless (-d $remote{$host}) {
- print STDERR "Cannot Xsync for host $host\n";
- next;
- }
- foreach my $file (keys %MF) {
- my $rfile = "$remote{$host}/$file";
- my ($mode, $size, $mtime) = (stat $rfile)[2, 7, 9];
- defined $size or ($mode, $size, $mtime) = (0, 0, 0);
- $size == $MF{$file}[1] && $mtime == $MF{$file}[2] and next;
- printf "%4s %-34s %8d %9d %8d %9d\n",
- $host, $file, $MF{$file}[1], $MF{$file}[2], $size, $mtime;
- unlink $rfile;
- copy ($file, $rfile);
- utime time, $MF{$file}[2], $rfile;
- chmod $MF{$file}[0], $rfile;
- }
- }
-
-though this is not perfect. It could be improved with checking
-file checksums before updating. Not all NFS systems support
-reliable utime support (when used over the NFS).
-
-=back
-
-=item rsync'ing the patches
-
-The source tree is maintained by the pumpking who applies patches to
-the files in the tree. These patches are either created by the
-pumpking himself using C<diff -c> after updating the file manually or
-by applying patches sent in by posters on the perl5-porters list.
-These patches are also saved and rsync'able, so you can apply them
-yourself to the source files.
-
-Presuming you are in a directory where your patches reside, you can
-get them in sync with
-
- # rsync -avz rsync://ftp.linux.activestate.com/perl-current-diffs/ .
-
-This makes sure the latest available patch is downloaded to your
-patch directory.
-
-It's then up to you to apply these patches, using something like
-
- # last=`ls -rt1 *.gz | tail -1`
- # rsync -avz rsync://ftp.linux.activestate.com/perl-current-diffs/ .
- # find . -name '*.gz' -newer $last -exec gzcat {} \; >blead.patch
- # cd ../perl-current
- # patch -p1 -N <../perl-current-diffs/blead.patch
-
-or, since this is only a hint towards how it works, use CPAN-patchaperl
-from Andreas König to have better control over the patching process.
-
-=back
-
-=head2 Why rsync the source tree
-
-=over 4
-
-=item It's easier
-
-Since you don't have to apply the patches yourself, you are sure all
-files in the source tree are in the right state.
-
-=item It's more recent
-
-According to Gurusamy Sarathy:
-
- "... The rsync mirror is automatic and syncs with the repository
- every five minutes.
-
- "Updating the patch area still requires manual intervention
- (with all the goofiness that implies, which you've noted) and
- is typically on a daily cycle. Making this process automatic
- is on my tuit list, but don't ask me when."
-
-=item It's more reliable
-
-Well, since the patches are updated by hand, I don't have to say any
-more ... (see Sarathy's remark).
-
-=back
-
-=head2 Why rsync the patches
-
-=over 4
-
-=item It's easier
-
-If you have more than one machine that you want to keep in track with
-bleadperl, it's easier to rsync the patches only once and then apply
-them to all the source trees on the different machines.
-
-In case you try to keep in pace on 5 different machines, for which
-only one of them has access to the WAN, rsync'ing all the source
-trees should than be done 5 times over the NFS. Having
-rsync'ed the patches only once, I can apply them to all the source
-trees automatically. Need you say more ;-)
-
-=item It's a good reference
-
-If you do not only like to have the most recent development branch,
-but also like to B<fix> bugs, or extend features, you want to dive
-into the sources. If you are a seasoned perl core diver, you don't
-need no manuals, tips, roadmaps, perlguts.pod or other aids to find
-your way around. But if you are a starter, the patches may help you
-in finding where you should start and how to change the bits that
-bug you.
-
-The file B<Changes> is updated on occasions the pumpking sees as his
-own little sync points. On those occasions, he releases a tar-ball of
-the current source tree (i.e. perl@7582.tar.gz), which will be an
-excellent point to start with when choosing to use the 'rsync the
-patches' scheme. Starting with perl@7582, which means a set of source
-files on which the latest applied patch is number 7582, you apply all
-succeeding patches available from then on (7583, 7584, ...).
-
-You can use the patches later as a kind of search archive.
-
-=over 4
-
-=item Finding a start point
-
-If you want to fix/change the behaviour of function/feature Foo, just
-scan the patches for patches that mention Foo either in the subject,
-the comments, or the body of the fix. A good chance the patch shows
-you the files that are affected by that patch which are very likely
-to be the starting point of your journey into the guts of perl.
-
-=item Finding how to fix a bug
-
-If you've found I<where> the function/feature Foo misbehaves, but you
-don't know how to fix it (but you do know the change you want to
-make), you can, again, peruse the patches for similar changes and
-look how others apply the fix.
-
-=item Finding the source of misbehaviour
-
-When you keep in sync with bleadperl, the pumpking would love to
-I<see> that the community efforts realy work. So after each of his
-sync points, you are to 'make test' to check if everything is still
-in working order. If it is, you do 'make ok', which will send an OK
-report to perlbug@perl.org. (If you do not have access to a mailer
-from the system you just finished successfully 'make test', you can
-do 'make okfile', which creates the file C<perl.ok>, which you can
-than take to your favourite mailer and mail yourself).
-
-But of course, as always, things will not allways lead to a success
-path, and one or more test do not pass the 'make test'. Before
-sending in a bug report (using 'make nok' or 'make nokfile'), check
-the mailing list if someone else has reported the bug already and if
-so, confirm it by replying to that message. If not, you might want to
-trace the source of that misbehaviour B<before> sending in the bug,
-which will help all the other porters in finding the solution.
-
-Here the saved patches come in very handy. You can check the list of
-patches to see which patch changed what file and what change caused
-the misbehaviour. If you note that in the bug report, it saves the
-one trying to solve it, looking for that point.
-
-=back
-
-If searching the patches is too bothersome, you might consider using
-perl's bugtron to find more information about discussions and
-ramblings on posted bugs.
-
-=back
-
-If you want to get the best of both worlds, rsync both the source
-tree for convenience, reliability and ease and rsync the patches
-for reference.
-
-=head2 Submitting patches
-
-Always submit patches to I<perl5-porters@perl.org>. This lets other
-porters review your patch, which catches a surprising number of errors
-in patches. Either use the diff program (available in source code
-form from I<ftp://ftp.gnu.org/pub/gnu/>), or use Johan Vromans'
-I<makepatch> (available from I<CPAN/authors/id/JV/>). Unified diffs
-are preferred, but context diffs are accepted. Do not send RCS-style
-diffs or diffs without context lines. More information is given in
-the I<Porting/patching.pod> file in the Perl source distribution.
-Please patch against the latest B<development> version (e.g., if
-you're fixing a bug in the 5.005 track, patch against the latest
-5.005_5x version). Only patches that survive the heat of the
-development branch get applied to maintenance versions.
-
-Your patch should update the documentation and test suite.
-
-To report a bug in Perl, use the program I<perlbug> which comes with
-Perl (if you can't get Perl to work, send mail to the address
-I<perlbug@perl.org> or I<perlbug@perl.com>). Reporting bugs through
-I<perlbug> feeds into the automated bug-tracking system, access to
-which is provided through the web at I<http://bugs.perl.org/>. It
-often pays to check the archives of the perl5-porters mailing list to
-see whether the bug you're reporting has been reported before, and if
-so whether it was considered a bug. See above for the location of
-the searchable archives.
-
-The CPAN testers (I<http://testers.cpan.org/>) are a group of
-volunteers who test CPAN modules on a variety of platforms. Perl Labs
-(I<http://labs.perl.org/>) automatically tests Perl source releases on
-platforms and gives feedback to the CPAN testers mailing list. Both
-efforts welcome volunteers.
-
-It's a good idea to read and lurk for a while before chipping in.
-That way you'll get to see the dynamic of the conversations, learn the
-personalities of the players, and hopefully be better prepared to make
-a useful contribution when do you speak up.
-
-If after all this you still think you want to join the perl5-porters
-mailing list, send mail to I<perl5-porters-subscribe@perl.org>. To
-unsubscribe, send mail to I<perl5-porters-unsubscribe@perl.org>.
-
-To hack on the Perl guts, you'll need to read the following things:
-
-=over 3
-
-=item L<perlguts>
-
-This is of paramount importance, since it's the documentation of what
-goes where in the Perl source. Read it over a couple of times and it
-might start to make sense - don't worry if it doesn't yet, because the
-best way to study it is to read it in conjunction with poking at Perl
-source, and we'll do that later on.
-
-You might also want to look at Gisle Aas's illustrated perlguts -
-there's no guarantee that this will be absolutely up-to-date with the
-latest documentation in the Perl core, but the fundamentals will be
-right. (http://gisle.aas.no/perl/illguts/)
-
-=item L<perlxstut> and L<perlxs>
-
-A working knowledge of XSUB programming is incredibly useful for core
-hacking; XSUBs use techniques drawn from the PP code, the portion of the
-guts that actually executes a Perl program. It's a lot gentler to learn
-those techniques from simple examples and explanation than from the core
-itself.
-
-=item L<perlapi>
-
-The documentation for the Perl API explains what some of the internal
-functions do, as well as the many macros used in the source.
-
-=item F<Porting/pumpkin.pod>
-
-This is a collection of words of wisdom for a Perl porter; some of it is
-only useful to the pumpkin holder, but most of it applies to anyone
-wanting to go about Perl development.
-
-=item The perl5-porters FAQ
-
-This is posted to perl5-porters at the beginning on every month, and
-should be available from http://perlhacker.org/p5p-faq; alternatively,
-you can get the FAQ emailed to you by sending mail to
-C<perl5-porters-faq@perl.org>. It contains hints on reading
-perl5-porters, information on how perl5-porters works and how Perl
-development in general works.
-
-=back
-
-=head2 Finding Your Way Around
-
-Perl maintenance can be split into a number of areas, and certain people
-(pumpkins) will have responsibility for each area. These areas sometimes
-correspond to files or directories in the source kit. Among the areas are:
-
-=over 3
-
-=item Core modules
-
-Modules shipped as part of the Perl core live in the F<lib/> and F<ext/>
-subdirectories: F<lib/> is for the pure-Perl modules, and F<ext/>
-contains the core XS modules.
-
-=item Documentation
-
-Documentation maintenance includes looking after everything in the
-F<pod/> directory, (as well as contributing new documentation) and
-the documentation to the modules in core.
-
-=item Configure
-
-The configure process is the way we make Perl portable across the
-myriad of operating systems it supports. Responsibility for the
-configure, build and installation process, as well as the overall
-portability of the core code rests with the configure pumpkin - others
-help out with individual operating systems.
-
-The files involved are the operating system directories, (F<win32/>,
-F<os2/>, F<vms/> and so on) the shell scripts which generate F<config.h>
-and F<Makefile>, as well as the metaconfig files which generate
-F<Configure>. (metaconfig isn't included in the core distribution.)
-
-=item Interpreter
-
-And of course, there's the core of the Perl interpreter itself. Let's
-have a look at that in a little more detail.
-
-=back
-
-Before we leave looking at the layout, though, don't forget that
-F<MANIFEST> contains not only the file names in the Perl distribution,
-but short descriptions of what's in them, too. For an overview of the
-important files, try this:
-
- perl -lne 'print if /^[^\/]+\.[ch]\s+/' MANIFEST
-
-=head2 Elements of the interpreter
-
-The work of the interpreter has two main stages: compiling the code
-into the internal representation, or bytecode, and then executing it.
-L<perlguts/Compiled code> explains exactly how the compilation stage
-happens.
-
-Here is a short breakdown of perl's operation:
-
-=over 3
-
-=item Startup
-
-The action begins in F<perlmain.c>. (or F<miniperlmain.c> for miniperl)
-This is very high-level code, enough to fit on a single screen, and it
-resembles the code found in L<perlembed>; most of the real action takes
-place in F<perl.c>
-
-First, F<perlmain.c> allocates some memory and constructs a Perl
-interpreter:
-
- 1 PERL_SYS_INIT3(&argc,&argv,&env);
- 2
- 3 if (!PL_do_undump) {
- 4 my_perl = perl_alloc();
- 5 if (!my_perl)
- 6 exit(1);
- 7 perl_construct(my_perl);
- 8 PL_perl_destruct_level = 0;
- 9 }
-
-Line 1 is a macro, and its definition is dependent on your operating
-system. Line 3 references C<PL_do_undump>, a global variable - all
-global variables in Perl start with C<PL_>. This tells you whether the
-current running program was created with the C<-u> flag to perl and then
-F<undump>, which means it's going to be false in any sane context.
-
-Line 4 calls a function in F<perl.c> to allocate memory for a Perl
-interpreter. It's quite a simple function, and the guts of it looks like
-this:
-
- my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
-
-Here you see an example of Perl's system abstraction, which we'll see
-later: C<PerlMem_malloc> is either your system's C<malloc>, or Perl's
-own C<malloc> as defined in F<malloc.c> if you selected that option at
-configure time.
-
-Next, in line 7, we construct the interpreter; this sets up all the
-special variables that Perl needs, the stacks, and so on.
-
-Now we pass Perl the command line options, and tell it to go:
-
- exitstatus = perl_parse(my_perl, xs_init, argc, argv, (char **)NULL);
- if (!exitstatus) {
- exitstatus = perl_run(my_perl);
- }
-
-
-C<perl_parse> is actually a wrapper around C<S_parse_body>, as defined
-in F<perl.c>, which processes the command line options, sets up any
-statically linked XS modules, opens the program and calls C<yyparse> to
-parse it.
-
-=item Parsing
-
-The aim of this stage is to take the Perl source, and turn it into an op
-tree. We'll see what one of those looks like later. Strictly speaking,
-there's three things going on here.
-
-C<yyparse>, the parser, lives in F<perly.c>, although you're better off
-reading the original YACC input in F<perly.y>. (Yes, Virginia, there
-B<is> a YACC grammar for Perl!) The job of the parser is to take your
-code and `understand' it, splitting it into sentences, deciding which
-operands go with which operators and so on.
-
-The parser is nobly assisted by the lexer, which chunks up your input
-into tokens, and decides what type of thing each token is: a variable
-name, an operator, a bareword, a subroutine, a core function, and so on.
-The main point of entry to the lexer is C<yylex>, and that and its
-associated routines can be found in F<toke.c>. Perl isn't much like
-other computer languages; it's highly context sensitive at times, it can
-be tricky to work out what sort of token something is, or where a token
-ends. As such, there's a lot of interplay between the tokeniser and the
-parser, which can get pretty frightening if you're not used to it.
-
-As the parser understands a Perl program, it builds up a tree of
-operations for the interpreter to perform during execution. The routines
-which construct and link together the various operations are to be found
-in F<op.c>, and will be examined later.
-
-=item Optimization
-
-Now the parsing stage is complete, and the finished tree represents
-the operations that the Perl interpreter needs to perform to execute our
-program. Next, Perl does a dry run over the tree looking for
-optimisations: constant expressions such as C<3 + 4> will be computed
-now, and the optimizer will also see if any multiple operations can be
-replaced with a single one. For instance, to fetch the variable C<$foo>,
-instead of grabbing the glob C<*foo> and looking at the scalar
-component, the optimizer fiddles the op tree to use a function which
-directly looks up the scalar in question. The main optimizer is C<peep>
-in F<op.c>, and many ops have their own optimizing functions.
-
-=item Running
-
-Now we're finally ready to go: we have compiled Perl byte code, and all
-that's left to do is run it. The actual execution is done by the
-C<runops_standard> function in F<run.c>; more specifically, it's done by
-these three innocent looking lines:
-
- while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX))) {
- PERL_ASYNC_CHECK();
- }
-
-You may be more comfortable with the Perl version of that:
-
- PERL_ASYNC_CHECK() while $Perl::op = &{$Perl::op->{function}};
-
-Well, maybe not. Anyway, each op contains a function pointer, which
-stipulates the function which will actually carry out the operation.
-This function will return the next op in the sequence - this allows for
-things like C<if> which choose the next op dynamically at run time.
-The C<PERL_ASYNC_CHECK> makes sure that things like signals interrupt
-execution if required.
-
-The actual functions called are known as PP code, and they're spread
-between four files: F<pp_hot.c> contains the `hot' code, which is most
-often used and highly optimized, F<pp_sys.c> contains all the
-system-specific functions, F<pp_ctl.c> contains the functions which
-implement control structures (C<if>, C<while> and the like) and F<pp.c>
-contains everything else. These are, if you like, the C code for Perl's
-built-in functions and operators.
-
-=back
-
-=head2 Internal Variable Types
-
-You should by now have had a look at L<perlguts>, which tells you about
-Perl's internal variable types: SVs, HVs, AVs and the rest. If not, do
-that now.
-
-These variables are used not only to represent Perl-space variables, but
-also any constants in the code, as well as some structures completely
-internal to Perl. The symbol table, for instance, is an ordinary Perl
-hash. Your code is represented by an SV as it's read into the parser;
-any program files you call are opened via ordinary Perl filehandles, and
-so on.
-
-The core L<Devel::Peek|Devel::Peek> module lets us examine SVs from a
-Perl program. Let's see, for instance, how Perl treats the constant
-C<"hello">.
-
- % perl -MDevel::Peek -e 'Dump("hello")'
- 1 SV = PV(0xa041450) at 0xa04ecbc
- 2 REFCNT = 1
- 3 FLAGS = (POK,READONLY,pPOK)
- 4 PV = 0xa0484e0 "hello"\0
- 5 CUR = 5
- 6 LEN = 6
-
-Reading C<Devel::Peek> output takes a bit of practise, so let's go
-through it line by line.
-
-Line 1 tells us we're looking at an SV which lives at C<0xa04ecbc> in
-memory. SVs themselves are very simple structures, but they contain a
-pointer to a more complex structure. In this case, it's a PV, a
-structure which holds a string value, at location C<0xa041450>. Line 2
-is the reference count; there are no other references to this data, so
-it's 1.
-
-Line 3 are the flags for this SV - it's OK to use it as a PV, it's a
-read-only SV (because it's a constant) and the data is a PV internally.
-Next we've got the contents of the string, starting at location
-C<0xa0484e0>.
-
-Line 5 gives us the current length of the string - note that this does
-B<not> include the null terminator. Line 6 is not the length of the
-string, but the length of the currently allocated buffer; as the string
-grows, Perl automatically extends the available storage via a routine
-called C<SvGROW>.
-
-You can get at any of these quantities from C very easily; just add
-C<Sv> to the name of the field shown in the snippet, and you've got a
-macro which will return the value: C<SvCUR(sv)> returns the current
-length of the string, C<SvREFCOUNT(sv)> returns the reference count,
-C<SvPV(sv, len)> returns the string itself with its length, and so on.
-More macros to manipulate these properties can be found in L<perlguts>.
-
-Let's take an example of manipulating a PV, from C<sv_catpvn>, in F<sv.c>
-
- 1 void
- 2 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
- 3 {
- 4 STRLEN tlen;
- 5 char *junk;
-
- 6 junk = SvPV_force(sv, tlen);
- 7 SvGROW(sv, tlen + len + 1);
- 8 if (ptr == junk)
- 9 ptr = SvPVX(sv);
- 10 Move(ptr,SvPVX(sv)+tlen,len,char);
- 11 SvCUR(sv) += len;
- 12 *SvEND(sv) = '\0';
- 13 (void)SvPOK_only_UTF8(sv); /* validate pointer */
- 14 SvTAINT(sv);
- 15 }
-
-This is a function which adds a string, C<ptr>, of length C<len> onto
-the end of the PV stored in C<sv>. The first thing we do in line 6 is
-make sure that the SV B<has> a valid PV, by calling the C<SvPV_force>
-macro to force a PV. As a side effect, C<tlen> gets set to the current
-value of the PV, and the PV itself is returned to C<junk>.
-
-In line 7, we make sure that the SV will have enough room to accommodate
-the old string, the new string and the null terminator. If C<LEN> isn't
-big enough, C<SvGROW> will reallocate space for us.
-
-Now, if C<junk> is the same as the string we're trying to add, we can
-grab the string directly from the SV; C<SvPVX> is the address of the PV
-in the SV.
-
-Line 10 does the actual catenation: the C<Move> macro moves a chunk of
-memory around: we move the string C<ptr> to the end of the PV - that's
-the start of the PV plus its current length. We're moving C<len> bytes
-of type C<char>. After doing so, we need to tell Perl we've extended the
-string, by altering C<CUR> to reflect the new length. C<SvEND> is a
-macro which gives us the end of the string, so that needs to be a
-C<"\0">.
-
-Line 13 manipulates the flags; since we've changed the PV, any IV or NV
-values will no longer be valid: if we have C<$a=10; $a.="6";> we don't
-want to use the old IV of 10. C<SvPOK_only_utf8> is a special UTF8-aware
-version of C<SvPOK_only>, a macro which turns off the IOK and NOK flags
-and turns on POK. The final C<SvTAINT> is a macro which launders tainted
-data if taint mode is turned on.
-
-AVs and HVs are more complicated, but SVs are by far the most common
-variable type being thrown around. Having seen something of how we
-manipulate these, let's go on and look at how the op tree is
-constructed.
-
-=head2 Op Trees
-
-First, what is the op tree, anyway? The op tree is the parsed
-representation of your program, as we saw in our section on parsing, and
-it's the sequence of operations that Perl goes through to execute your
-program, as we saw in L</Running>.
-
-An op is a fundamental operation that Perl can perform: all the built-in
-functions and operators are ops, and there are a series of ops which
-deal with concepts the interpreter needs internally - entering and
-leaving a block, ending a statement, fetching a variable, and so on.
-
-The op tree is connected in two ways: you can imagine that there are two
-"routes" through it, two orders in which you can traverse the tree.
-First, parse order reflects how the parser understood the code, and
-secondly, execution order tells perl what order to perform the
-operations in.
-
-The easiest way to examine the op tree is to stop Perl after it has
-finished parsing, and get it to dump out the tree. This is exactly what
-the compiler backends L<B::Terse|B::Terse> and L<B::Debug|B::Debug> do.
-
-Let's have a look at how Perl sees C<$a = $b + $c>:
-
- % perl -MO=Terse -e '$a=$b+$c'
- 1 LISTOP (0x8179888) leave
- 2 OP (0x81798b0) enter
- 3 COP (0x8179850) nextstate
- 4 BINOP (0x8179828) sassign
- 5 BINOP (0x8179800) add [1]
- 6 UNOP (0x81796e0) null [15]
- 7 SVOP (0x80fafe0) gvsv GV (0x80fa4cc) *b
- 8 UNOP (0x81797e0) null [15]
- 9 SVOP (0x8179700) gvsv GV (0x80efeb0) *c
- 10 UNOP (0x816b4f0) null [15]
- 11 SVOP (0x816dcf0) gvsv GV (0x80fa460) *a
-
-Let's start in the middle, at line 4. This is a BINOP, a binary
-operator, which is at location C<0x8179828>. The specific operator in
-question is C<sassign> - scalar assignment - and you can find the code
-which implements it in the function C<pp_sassign> in F<pp_hot.c>. As a
-binary operator, it has two children: the add operator, providing the
-result of C<$b+$c>, is uppermost on line 5, and the left hand side is on
-line 10.
-
-Line 10 is the null op: this does exactly nothing. What is that doing
-there? If you see the null op, it's a sign that something has been
-optimized away after parsing. As we mentioned in L</Optimization>,
-the optimization stage sometimes converts two operations into one, for
-example when fetching a scalar variable. When this happens, instead of
-rewriting the op tree and cleaning up the dangling pointers, it's easier
-just to replace the redundant operation with the null op. Originally,
-the tree would have looked like this:
-
- 10 SVOP (0x816b4f0) rv2sv [15]
- 11 SVOP (0x816dcf0) gv GV (0x80fa460) *a
-
-That is, fetch the C<a> entry from the main symbol table, and then look
-at the scalar component of it: C<gvsv> (C<pp_gvsv> into F<pp_hot.c>)
-happens to do both these things.
-
-The right hand side, starting at line 5 is similar to what we've just
-seen: we have the C<add> op (C<pp_add> also in F<pp_hot.c>) add together
-two C<gvsv>s.
-
-Now, what's this about?
-
- 1 LISTOP (0x8179888) leave
- 2 OP (0x81798b0) enter
- 3 COP (0x8179850) nextstate
-
-C<enter> and C<leave> are scoping ops, and their job is to perform any
-housekeeping every time you enter and leave a block: lexical variables
-are tidied up, unreferenced variables are destroyed, and so on. Every
-program will have those first three lines: C<leave> is a list, and its
-children are all the statements in the block. Statements are delimited
-by C<nextstate>, so a block is a collection of C<nextstate> ops, with
-the ops to be performed for each statement being the children of
-C<nextstate>. C<enter> is a single op which functions as a marker.
-
-That's how Perl parsed the program, from top to bottom:
-
- Program
- |
- Statement
- |
- =
- / \
- / \
- $a +
- / \
- $b $c
-
-However, it's impossible to B<perform> the operations in this order:
-you have to find the values of C<$b> and C<$c> before you add them
-together, for instance. So, the other thread that runs through the op
-tree is the execution order: each op has a field C<op_next> which points
-to the next op to be run, so following these pointers tells us how perl
-executes the code. We can traverse the tree in this order using
-the C<exec> option to C<B::Terse>:
-
- % perl -MO=Terse,exec -e '$a=$b+$c'
- 1 OP (0x8179928) enter
- 2 COP (0x81798c8) nextstate
- 3 SVOP (0x81796c8) gvsv GV (0x80fa4d4) *b
- 4 SVOP (0x8179798) gvsv GV (0x80efeb0) *c
- 5 BINOP (0x8179878) add [1]
- 6 SVOP (0x816dd38) gvsv GV (0x80fa468) *a
- 7 BINOP (0x81798a0) sassign
- 8 LISTOP (0x8179900) leave
-
-This probably makes more sense for a human: enter a block, start a
-statement. Get the values of C<$b> and C<$c>, and add them together.
-Find C<$a>, and assign one to the other. Then leave.
-
-The way Perl builds up these op trees in the parsing process can be
-unravelled by examining F<perly.y>, the YACC grammar. Let's take the
-piece we need to construct the tree for C<$a = $b + $c>
-
- 1 term : term ASSIGNOP term
- 2 { $$ = newASSIGNOP(OPf_STACKED, $1, $2, $3); }
- 3 | term ADDOP term
- 4 { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
-
-If you're not used to reading BNF grammars, this is how it works: You're
-fed certain things by the tokeniser, which generally end up in upper
-case. Here, C<ADDOP>, is provided when the tokeniser sees C<+> in your
-code. C<ASSIGNOP> is provided when C<=> is used for assigning. These are
-`terminal symbols', because you can't get any simpler than them.
-
-The grammar, lines one and three of the snippet above, tells you how to
-build up more complex forms. These complex forms, `non-terminal symbols'
-are generally placed in lower case. C<term> here is a non-terminal
-symbol, representing a single expression.
-
-The grammar gives you the following rule: you can make the thing on the
-left of the colon if you see all the things on the right in sequence.
-This is called a "reduction", and the aim of parsing is to completely
-reduce the input. There are several different ways you can perform a
-reduction, separated by vertical bars: so, C<term> followed by C<=>
-followed by C<term> makes a C<term>, and C<term> followed by C<+>
-followed by C<term> can also make a C<term>.
-
-So, if you see two terms with an C<=> or C<+>, between them, you can
-turn them into a single expression. When you do this, you execute the
-code in the block on the next line: if you see C<=>, you'll do the code
-in line 2. If you see C<+>, you'll do the code in line 4. It's this code
-which contributes to the op tree.
-
- | term ADDOP term
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
-
-What this does is creates a new binary op, and feeds it a number of
-variables. The variables refer to the tokens: C<$1> is the first token in
-the input, C<$2> the second, and so on - think regular expression
-backreferences. C<$$> is the op returned from this reduction. So, we
-call C<newBINOP> to create a new binary operator. The first parameter to
-C<newBINOP>, a function in F<op.c>, is the op type. It's an addition
-operator, so we want the type to be C<ADDOP>. We could specify this
-directly, but it's right there as the second token in the input, so we
-use C<$2>. The second parameter is the op's flags: 0 means `nothing
-special'. Then the things to add: the left and right hand side of our
-expression, in scalar context.
-
-=head2 Stacks
-
-When perl executes something like C<addop>, how does it pass on its
-results to the next op? The answer is, through the use of stacks. Perl
-has a number of stacks to store things it's currently working on, and
-we'll look at the three most important ones here.
-
-=over 3
-
-=item Argument stack
-
-Arguments are passed to PP code and returned from PP code using the
-argument stack, C<ST>. The typical way to handle arguments is to pop
-them off the stack, deal with them how you wish, and then push the result
-back onto the stack. This is how, for instance, the cosine operator
-works:
-
- NV value;
- value = POPn;
- value = Perl_cos(value);
- XPUSHn(value);
-
-We'll see a more tricky example of this when we consider Perl's macros
-below. C<POPn> gives you the NV (floating point value) of the top SV on
-the stack: the C<$x> in C<cos($x)>. Then we compute the cosine, and push
-the result back as an NV. The C<X> in C<XPUSHn> means that the stack
-should be extended if necessary - it can't be necessary here, because we
-know there's room for one more item on the stack, since we've just
-removed one! The C<XPUSH*> macros at least guarantee safety.
-
-Alternatively, you can fiddle with the stack directly: C<SP> gives you
-the first element in your portion of the stack, and C<TOP*> gives you
-the top SV/IV/NV/etc. on the stack. So, for instance, to do unary
-negation of an integer:
-
- SETi(-TOPi);
-
-Just set the integer value of the top stack entry to its negation.
-
-Argument stack manipulation in the core is exactly the same as it is in
-XSUBs - see L<perlxstut>, L<perlxs> and L<perlguts> for a longer
-description of the macros used in stack manipulation.
-
-=item Mark stack
-
-I say `your portion of the stack' above because PP code doesn't
-necessarily get the whole stack to itself: if your function calls
-another function, you'll only want to expose the arguments aimed for the
-called function, and not (necessarily) let it get at your own data. The
-way we do this is to have a `virtual' bottom-of-stack, exposed to each
-function. The mark stack keeps bookmarks to locations in the argument
-stack usable by each function. For instance, when dealing with a tied
-variable, (internally, something with `P' magic) Perl has to call
-methods for accesses to the tied variables. However, we need to separate
-the arguments exposed to the method to the argument exposed to the
-original function - the store or fetch or whatever it may be. Here's how
-the tied C<push> is implemented; see C<av_push> in F<av.c>:
-
- 1 PUSHMARK(SP);
- 2 EXTEND(SP,2);
- 3 PUSHs(SvTIED_obj((SV*)av, mg));
- 4 PUSHs(val);
- 5 PUTBACK;
- 6 ENTER;
- 7 call_method("PUSH", G_SCALAR|G_DISCARD);
- 8 LEAVE;
- 9 POPSTACK;
-
-The lines which concern the mark stack are the first, fifth and last
-lines: they save away, restore and remove the current position of the
-argument stack.
-
-Let's examine the whole implementation, for practice:
-
- 1 PUSHMARK(SP);
-
-Push the current state of the stack pointer onto the mark stack. This is
-so that when we've finished adding items to the argument stack, Perl
-knows how many things we've added recently.
-
- 2 EXTEND(SP,2);
- 3 PUSHs(SvTIED_obj((SV*)av, mg));
- 4 PUSHs(val);
-
-We're going to add two more items onto the argument stack: when you have
-a tied array, the C<PUSH> subroutine receives the object and the value
-to be pushed, and that's exactly what we have here - the tied object,
-retrieved with C<SvTIED_obj>, and the value, the SV C<val>.
-
- 5 PUTBACK;
-
-Next we tell Perl to make the change to the global stack pointer: C<dSP>
-only gave us a local copy, not a reference to the global.
-
- 6 ENTER;
- 7 call_method("PUSH", G_SCALAR|G_DISCARD);
- 8 LEAVE;
-
-C<ENTER> and C<LEAVE> localise a block of code - they make sure that all
-variables are tidied up, everything that has been localised gets
-its previous value returned, and so on. Think of them as the C<{> and
-C<}> of a Perl block.
-
-To actually do the magic method call, we have to call a subroutine in
-Perl space: C<call_method> takes care of that, and it's described in
-L<perlcall>. We call the C<PUSH> method in scalar context, and we're
-going to discard its return value.
-
- 9 POPSTACK;
-
-Finally, we remove the value we placed on the mark stack, since we
-don't need it any more.
-
-=item Save stack
-
-C doesn't have a concept of local scope, so perl provides one. We've
-seen that C<ENTER> and C<LEAVE> are used as scoping braces; the save
-stack implements the C equivalent of, for example:
-
- {
- local $foo = 42;
- ...
- }
-
-See L<perlguts/Localising Changes> for how to use the save stack.
-
-=back
-
-=head2 Millions of Macros
-
-One thing you'll notice about the Perl source is that it's full of
-macros. Some have called the pervasive use of macros the hardest thing
-to understand, others find it adds to clarity. Let's take an example,
-the code which implements the addition operator:
-
- 1 PP(pp_add)
- 2 {
- 3 dSP; dATARGET; tryAMAGICbin(add,opASSIGN);
- 4 {
- 5 dPOPTOPnnrl_ul;
- 6 SETn( left + right );
- 7 RETURN;
- 8 }
- 9 }
-
-Every line here (apart from the braces, of course) contains a macro. The
-first line sets up the function declaration as Perl expects for PP code;
-line 3 sets up variable declarations for the argument stack and the
-target, the return value of the operation. Finally, it tries to see if
-the addition operation is overloaded; if so, the appropriate subroutine
-is called.
-
-Line 5 is another variable declaration - all variable declarations start
-with C<d> - which pops from the top of the argument stack two NVs (hence
-C<nn>) and puts them into the variables C<right> and C<left>, hence the
-C<rl>. These are the two operands to the addition operator. Next, we
-call C<SETn> to set the NV of the return value to the result of adding
-the two values. This done, we return - the C<RETURN> macro makes sure
-that our return value is properly handled, and we pass the next operator
-to run back to the main run loop.
-
-Most of these macros are explained in L<perlapi>, and some of the more
-important ones are explained in L<perlxs> as well. Pay special attention
-to L<perlguts/Background and PERL_IMPLICIT_CONTEXT> for information on
-the C<[pad]THX_?> macros.
-
-
-=head2 Poking at Perl
-
-To really poke around with Perl, you'll probably want to build Perl for
-debugging, like this:
-
- ./Configure -d -D optimize=-g
- make
-
-C<-g> is a flag to the C compiler to have it produce debugging
-information which will allow us to step through a running program.
-F<Configure> will also turn on the C<DEBUGGING> compilation symbol which
-enables all the internal debugging code in Perl. There are a whole bunch
-of things you can debug with this: L<perlrun> lists them all, and the
-best way to find out about them is to play about with them. The most
-useful options are probably
-
- l Context (loop) stack processing
- t Trace execution
- o Method and overloading resolution
- c String/numeric conversions
-
-Some of the functionality of the debugging code can be achieved using XS
-modules.
-
- -Dr => use re 'debug'
- -Dx => use O 'Debug'
-
-=head2 Using a source-level debugger
-
-If the debugging output of C<-D> doesn't help you, it's time to step
-through perl's execution with a source-level debugger.
-
-=over 3
-
-=item *
-
-We'll use C<gdb> for our examples here; the principles will apply to any
-debugger, but check the manual of the one you're using.
-
-=back
-
-To fire up the debugger, type
-
- gdb ./perl
-
-You'll want to do that in your Perl source tree so the debugger can read
-the source code. You should see the copyright message, followed by the
-prompt.
-
- (gdb)
-
-C<help> will get you into the documentation, but here are the most
-useful commands:
-
-=over 3
-
-=item run [args]
-
-Run the program with the given arguments.
-
-=item break function_name
-
-=item break source.c:xxx
-
-Tells the debugger that we'll want to pause execution when we reach
-either the named function (but see L<perlguts/Internal Functions>!) or the given
-line in the named source file.
-
-=item step
-
-Steps through the program a line at a time.
-
-=item next
-
-Steps through the program a line at a time, without descending into
-functions.
-
-=item continue
-
-Run until the next breakpoint.
-
-=item finish
-
-Run until the end of the current function, then stop again.
-
-=item 'enter'
-
-Just pressing Enter will do the most recent operation again - it's a
-blessing when stepping through miles of source code.
-
-=item print
-
-Execute the given C code and print its results. B<WARNING>: Perl makes
-heavy use of macros, and F<gdb> is not aware of macros. You'll have to
-substitute them yourself. So, for instance, you can't say
-
- print SvPV_nolen(sv)
-
-but you have to say
-
- print Perl_sv_2pv_nolen(sv)
-
-You may find it helpful to have a "macro dictionary", which you can
-produce by saying C<cpp -dM perl.c | sort>. Even then, F<cpp> won't
-recursively apply the macros for you.
-
-=back
-
-=head2 Dumping Perl Data Structures
-
-One way to get around this macro hell is to use the dumping functions in
-F<dump.c>; these work a little like an internal
-L<Devel::Peek|Devel::Peek>, but they also cover OPs and other structures
-that you can't get at from Perl. Let's take an example. We'll use the
-C<$a = $b + $c> we used before, but give it a bit of context:
-C<$b = "6XXXX"; $c = 2.3;>. Where's a good place to stop and poke around?
-
-What about C<pp_add>, the function we examined earlier to implement the
-C<+> operator:
-
- (gdb) break Perl_pp_add
- Breakpoint 1 at 0x46249f: file pp_hot.c, line 309.
-
-Notice we use C<Perl_pp_add> and not C<pp_add> - see L<perlguts/Internal Functions>.
-With the breakpoint in place, we can run our program:
-
- (gdb) run -e '$b = "6XXXX"; $c = 2.3; $a = $b + $c'
-
-Lots of junk will go past as gdb reads in the relevant source files and
-libraries, and then:
-
- Breakpoint 1, Perl_pp_add () at pp_hot.c:309
- 309 dSP; dATARGET; tryAMAGICbin(add,opASSIGN);
- (gdb) step
- 311 dPOPTOPnnrl_ul;
- (gdb)
-
-We looked at this bit of code before, and we said that C<dPOPTOPnnrl_ul>
-arranges for two C<NV>s to be placed into C<left> and C<right> - let's
-slightly expand it:
-
- #define dPOPTOPnnrl_ul NV right = POPn; \
- SV *leftsv = TOPs; \
- NV left = USE_LEFT(leftsv) ? SvNV(leftsv) : 0.0
-
-C<POPn> takes the SV from the top of the stack and obtains its NV either
-directly (if C<SvNOK> is set) or by calling the C<sv_2nv> function.
-C<TOPs> takes the next SV from the top of the stack - yes, C<POPn> uses
-C<TOPs> - but doesn't remove it. We then use C<SvNV> to get the NV from
-C<leftsv> in the same way as before - yes, C<POPn> uses C<SvNV>.
-
-Since we don't have an NV for C<$b>, we'll have to use C<sv_2nv> to
-convert it. If we step again, we'll find ourselves there:
-
- Perl_sv_2nv (sv=0xa0675d0) at sv.c:1669
- 1669 if (!sv)
- (gdb)
-
-We can now use C<Perl_sv_dump> to investigate the SV:
-
- SV = PV(0xa057cc0) at 0xa0675d0
- REFCNT = 1
- FLAGS = (POK,pPOK)
- PV = 0xa06a510 "6XXXX"\0
- CUR = 5
- LEN = 6
- $1 = void
-
-We know we're going to get C<6> from this, so let's finish the
-subroutine:
-
- (gdb) finish
- Run till exit from #0 Perl_sv_2nv (sv=0xa0675d0) at sv.c:1671
- 0x462669 in Perl_pp_add () at pp_hot.c:311
- 311 dPOPTOPnnrl_ul;
-
-We can also dump out this op: the current op is always stored in
-C<PL_op>, and we can dump it with C<Perl_op_dump>. This'll give us
-similar output to L<B::Debug|B::Debug>.
-
- {
- 13 TYPE = add ===> 14
- TARG = 1
- FLAGS = (SCALAR,KIDS)
- {
- TYPE = null ===> (12)
- (was rv2sv)
- FLAGS = (SCALAR,KIDS)
- {
- 11 TYPE = gvsv ===> 12
- FLAGS = (SCALAR)
- GV = main::b
- }
- }
-
-< finish this later >
-
-=head2 Patching
-
-All right, we've now had a look at how to navigate the Perl sources and
-some things you'll need to know when fiddling with them. Let's now get
-on and create a simple patch. Here's something Larry suggested: if a
-C<U> is the first active format during a C<pack>, (for example,
-C<pack "U3C8", @stuff>) then the resulting string should be treated as
-UTF8 encoded.
-
-How do we prepare to fix this up? First we locate the code in question -
-the C<pack> happens at runtime, so it's going to be in one of the F<pp>
-files. Sure enough, C<pp_pack> is in F<pp.c>. Since we're going to be
-altering this file, let's copy it to F<pp.c~>.
-
-Now let's look over C<pp_pack>: we take a pattern into C<pat>, and then
-loop over the pattern, taking each format character in turn into
-C<datum_type>. Then for each possible format character, we swallow up
-the other arguments in the pattern (a field width, an asterisk, and so
-on) and convert the next chunk input into the specified format, adding
-it onto the output SV C<cat>.
-
-How do we know if the C<U> is the first format in the C<pat>? Well, if
-we have a pointer to the start of C<pat> then, if we see a C<U> we can
-test whether we're still at the start of the string. So, here's where
-C<pat> is set up:
-
- STRLEN fromlen;
- register char *pat = SvPVx(*++MARK, fromlen);
- register char *patend = pat + fromlen;
- register I32 len;
- I32 datumtype;
- SV *fromstr;
-
-We'll have another string pointer in there:
-
- STRLEN fromlen;
- register char *pat = SvPVx(*++MARK, fromlen);
- register char *patend = pat + fromlen;
- + char *patcopy;
- register I32 len;
- I32 datumtype;
- SV *fromstr;
-
-And just before we start the loop, we'll set C<patcopy> to be the start
-of C<pat>:
-
- items = SP - MARK;
- MARK++;
- sv_setpvn(cat, "", 0);
- + patcopy = pat;
- while (pat < patend) {
-
-Now if we see a C<U> which was at the start of the string, we turn on
-the UTF8 flag for the output SV, C<cat>:
-
- + if (datumtype == 'U' && pat==patcopy+1)
- + SvUTF8_on(cat);
- if (datumtype == '#') {
- while (pat < patend && *pat != '\n')
- pat++;
-
-Remember that it has to be C<patcopy+1> because the first character of
-the string is the C<U> which has been swallowed into C<datumtype!>
-
-Oops, we forgot one thing: what if there are spaces at the start of the
-pattern? C<pack(" U*", @stuff)> will have C<U> as the first active
-character, even though it's not the first thing in the pattern. In this
-case, we have to advance C<patcopy> along with C<pat> when we see spaces:
-
- if (isSPACE(datumtype))
- continue;
-
-needs to become
-
- if (isSPACE(datumtype)) {
- patcopy++;
- continue;
- }
-
-OK. That's the C part done. Now we must do two additional things before
-this patch is ready to go: we've changed the behaviour of Perl, and so
-we must document that change. We must also provide some more regression
-tests to make sure our patch works and doesn't create a bug somewhere
-else along the line.
-
-The regression tests for each operator live in F<t/op/>, and so we make
-a copy of F<t/op/pack.t> to F<t/op/pack.t~>. Now we can add our tests
-to the end. First, we'll test that the C<U> does indeed create Unicode
-strings:
-
- print 'not ' unless "1.20.300.4000" eq sprintf "%vd", pack("U*",1,20,300,4000);
- print "ok $test\n"; $test++;
-
-Now we'll test that we got that space-at-the-beginning business right:
-
- print 'not ' unless "1.20.300.4000" eq
- sprintf "%vd", pack(" U*",1,20,300,4000);
- print "ok $test\n"; $test++;
-
-And finally we'll test that we don't make Unicode strings if C<U> is B<not>
-the first active format:
-
- print 'not ' unless v1.20.300.4000 ne
- sprintf "%vd", pack("C0U*",1,20,300,4000);
- print "ok $test\n"; $test++;
-
-Mustn't forget to change the number of tests which appears at the top, or
-else the automated tester will get confused:
-
- -print "1..156\n";
- +print "1..159\n";
-
-We now compile up Perl, and run it through the test suite. Our new
-tests pass, hooray!
-
-Finally, the documentation. The job is never done until the paperwork is
-over, so let's describe the change we've just made. The relevant place
-is F<pod/perlfunc.pod>; again, we make a copy, and then we'll insert
-this text in the description of C<pack>:
-
- =item *
-
- If the pattern begins with a C<U>, the resulting string will be treated
- as Unicode-encoded. You can force UTF8 encoding on in a string with an
- initial C<U0>, and the bytes that follow will be interpreted as Unicode
- characters. If you don't want this to happen, you can begin your pattern
- with C<C0> (or anything else) to force Perl not to UTF8 encode your
- string, and then follow this with a C<U*> somewhere in your pattern.
-
-All done. Now let's create the patch. F<Porting/patching.pod> tells us
-that if we're making major changes, we should copy the entire directory
-to somewhere safe before we begin fiddling, and then do
-
- diff -ruN old new > patch
-
-However, we know which files we've changed, and we can simply do this:
-
- diff -u pp.c~ pp.c > patch
- diff -u t/op/pack.t~ t/op/pack.t >> patch
- diff -u pod/perlfunc.pod~ pod/perlfunc.pod >> patch
-
-We end up with a patch looking a little like this:
-
- --- pp.c~ Fri Jun 02 04:34:10 2000
- +++ pp.c Fri Jun 16 11:37:25 2000
- @@ -4375,6 +4375,7 @@
- register I32 items;
- STRLEN fromlen;
- register char *pat = SvPVx(*++MARK, fromlen);
- + char *patcopy;
- register char *patend = pat + fromlen;
- register I32 len;
- I32 datumtype;
- @@ -4405,6 +4406,7 @@
- ...
-
-And finally, we submit it, with our rationale, to perl5-porters. Job
-done!
-
-=head1 EXTERNAL TOOLS FOR DEBUGGING PERL
-
-Sometimes it helps to use external tools while debugging and
-testing Perl. This section tries to guide you through using
-some common testing and debugging tools with Perl. This is
-meant as a guide to interfacing these tools with Perl, not
-as any kind of guide to the use of the tools themselves.
-
-=head2 Rational Software's Purify
-
-Purify is a commercial tool that is helpful in identifying
-memory overruns, wild pointers, memory leaks and other such
-badness. Perl must be compiled in a specific way for
-optimal testing with Purify. Purify is available under
-Windows NT, Solaris, HP-UX, SGI, and Siemens Unix.
-
-The only currently known leaks happen when there are
-compile-time errors within eval or require. (Fixing these
-is non-trivial, unfortunately, but they must be fixed
-eventually.)
-
-=head2 Purify on Unix
-
-On Unix, Purify creates a new Perl binary. To get the most
-benefit out of Purify, you should create the perl to Purify
-using:
-
- sh Configure -Accflags=-DPURIFY -Doptimize='-g' \
- -Uusemymalloc -Dusemultiplicity
-
-where these arguments mean:
-
-=over 4
-
-=item -Accflags=-DPURIFY
-
-Disables Perl's arena memory allocation functions, as well as
-forcing use of memory allocation functions derived from the
-system malloc.
-
-=item -Doptimize='-g'
-
-Adds debugging information so that you see the exact source
-statements where the problem occurs. Without this flag, all
-you will see is the source filename of where the error occurred.
-
-=item -Uusemymalloc
-
-Disable Perl's malloc so that Purify can more closely monitor
-allocations and leaks. Using Perl's malloc will make Purify
-report most leaks in the "potential" leaks category.
-
-=item -Dusemultiplicity
-
-Enabling the multiplicity option allows perl to clean up
-thoroughly when the interpreter shuts down, which reduces the
-number of bogus leak reports from Purify.
-
-=back
-
-Once you've compiled a perl suitable for Purify'ing, then you
-can just:
-
- make pureperl
-
-which creates a binary named 'pureperl' that has been Purify'ed.
-This binary is used in place of the standard 'perl' binary
-when you want to debug Perl memory problems.
-
-As an example, to show any memory leaks produced during the
-standard Perl testset you would create and run the Purify'ed
-perl as:
-
- make pureperl
- cd t
- ../pureperl -I../lib harness
-
-which would run Perl on test.pl and report any memory problems.
-
-Purify outputs messages in "Viewer" windows by default. If
-you don't have a windowing environment or if you simply
-want the Purify output to unobtrusively go to a log file
-instead of to the interactive window, use these following
-options to output to the log file "perl.log":
-
- setenv PURIFYOPTIONS "-chain-length=25 -windows=no \
- -log-file=perl.log -append-logfile=yes"
-
-If you plan to use the "Viewer" windows, then you only need this option:
-
- setenv PURIFYOPTIONS "-chain-length=25"
-
-=head2 Purify on NT
-
-Purify on Windows NT instruments the Perl binary 'perl.exe'
-on the fly. There are several options in the makefile you
-should change to get the most use out of Purify:
-
-=over 4
-
-=item DEFINES
-
-You should add -DPURIFY to the DEFINES line so the DEFINES
-line looks something like:
-
- DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) -DPURIFY=1
-
-to disable Perl's arena memory allocation functions, as
-well as to force use of memory allocation functions derived
-from the system malloc.
-
-=item USE_MULTI = define
-
-Enabling the multiplicity option allows perl to clean up
-thoroughly when the interpreter shuts down, which reduces the
-number of bogus leak reports from Purify.
-
-=item #PERL_MALLOC = define
-
-Disable Perl's malloc so that Purify can more closely monitor
-allocations and leaks. Using Perl's malloc will make Purify
-report most leaks in the "potential" leaks category.
-
-=item CFG = Debug
-
-Adds debugging information so that you see the exact source
-statements where the problem occurs. Without this flag, all
-you will see is the source filename of where the error occurred.
-
-=back
-
-As an example, to show any memory leaks produced during the
-standard Perl testset you would create and run Purify as:
-
- cd win32
- make
- cd ../t
- purify ../perl -I../lib harness
-
-which would instrument Perl in memory, run Perl on test.pl,
-then finally report any memory problems.
-
-=head2 CONCLUSION
-
-We've had a brief look around the Perl source, an overview of the stages
-F<perl> goes through when it's running your code, and how to use a
-debugger to poke at the Perl guts. We took a very simple problem and
-demonstrated how to solve it fully - with documentation, regression
-tests, and finally a patch for submission to p5p. Finally, we talked
-about how to use external tools to debug and test Perl.
-
-I'd now suggest you read over those references again, and then, as soon
-as possible, get your hands dirty. The best way to learn is by doing,
-so:
-
-=over 3
-
-=item *
-
-Subscribe to perl5-porters, follow the patches and try and understand
-them; don't be afraid to ask if there's a portion you're not clear on -
-who knows, you may unearth a bug in the patch...
-
-=item *
-
-Keep up to date with the bleeding edge Perl distributions and get
-familiar with the changes. Try and get an idea of what areas people are
-working on and the changes they're making.
-
-=item *
-
-Do read the README associated with your operating system, e.g. README.aix
-on the IBM AIX OS. Don't hesitate to supply patches to that README if
-you find anything missing or changed over a new OS release.
-
-=item *
-
-Find an area of Perl that seems interesting to you, and see if you can
-work out how it works. Scan through the source, and step over it in the
-debugger. Play, poke, investigate, fiddle! You'll probably get to
-understand not just your chosen area but a much wider range of F<perl>'s
-activity as well, and probably sooner than you'd think.
-
-=back
-
-=over 3
-
-=item I<The Road goes ever on and on, down from the door where it began.>
-
-=back
-
-If you can do these things, you've started on the long road to Perl porting.
-Thanks for wanting to help make Perl better - and happy hacking!
-
-=head1 AUTHOR
-
-This document was written by Nathan Torkington, and is maintained by
-the perl5-porters mailing list.
-
diff --git a/contrib/perl5/pod/perlhist.pod b/contrib/perl5/pod/perlhist.pod
deleted file mode 100644
index 914c963..0000000
--- a/contrib/perl5/pod/perlhist.pod
+++ /dev/null
@@ -1,571 +0,0 @@
-=head1 NAME
-
-perlhist - the Perl history records
-
-=for RCS
-
-=begin RCS
-
-#
-# $Id: perlhist.pod,v 1.2 2000/01/24 11:44:47 jhi Exp $
-#
-
-=end RCS
-
-=head1 DESCRIPTION
-
-This document aims to record the Perl source code releases.
-
-=head1 INTRODUCTION
-
-Perl history in brief, by Larry Wall:
-
- Perl 0 introduced Perl to my officemates.
- Perl 1 introduced Perl to the world, and changed /\(...\|...\)/ to
- /(...|...)/. \(Dan Faigin still hasn't forgiven me. :-\)
- Perl 2 introduced Henry Spencer's regular expression package.
- Perl 3 introduced the ability to handle binary data (embedded nulls).
- Perl 4 introduced the first Camel book. Really. We mostly just
- switched version numbers so the book could refer to 4.000.
- Perl 5 introduced everything else, including the ability to
- introduce everything else.
-
-=head1 THE KEEPERS OF THE PUMPKIN
-
-Larry Wall, Andy Dougherty, Tom Christiansen, Charles Bailey, Nick
-Ing-Simmons, Chip Salzenberg, Tim Bunce, Malcolm Beattie, Gurusamy
-Sarathy, Graham Barr, Jarkko Hietaniemi.
-
-=head2 PUMPKIN?
-
-[from Porting/pumpkin.pod in the Perl source code distribution]
-
-Chip Salzenberg gets credit for that, with a nod to his cow orker,
-David Croy. We had passed around various names (baton, token, hot
-potato) but none caught on. Then, Chip asked:
-
-[begin quote]
-
- Who has the patch pumpkin?
-
-To explain: David Croy once told me once that at a previous job,
-there was one tape drive and multiple systems that used it for backups.
-But instead of some high-tech exclusion software, they used a low-tech
-method to prevent multiple simultaneous backups: a stuffed pumpkin.
-No one was allowed to make backups unless they had the "backup pumpkin".
-
-[end quote]
-
-The name has stuck. The holder of the pumpkin is sometimes called
-the pumpking (keeping the source afloat?) or the pumpkineer (pulling
-the strings?).
-
-=head1 THE RECORDS
-
- Pump- Release Date Notes
- king (by no means
- comprehensive,
- see Changes*
- for details)
- ===========================================================================
-
- Larry 0 Classified. Don't ask.
-
- Larry 1.000 1987-Dec-18
-
- 1.001..10 1988-Jan-30
- 1.011..14 1988-Feb-02
-
- Larry 2.000 1988-Jun-05
-
- 2.001 1988-Jun-28
-
- Larry 3.000 1989-Oct-18
-
- 3.001 1989-Oct-26
- 3.002..4 1989-Nov-11
- 3.005 1989-Nov-18
- 3.006..8 1989-Dec-22
- 3.009..13 1990-Mar-02
- 3.014 1990-Mar-13
- 3.015 1990-Mar-14
- 3.016..18 1990-Mar-28
- 3.019..27 1990-Aug-10 User subs.
- 3.028 1990-Aug-14
- 3.029..36 1990-Oct-17
- 3.037 1990-Oct-20
- 3.040 1990-Nov-10
- 3.041 1990-Nov-13
- 3.042..43 1990-Jan-??
- 3.044 1991-Jan-12
-
- Larry 4.000 1991-Mar-21
-
- 4.001..3 1991-Apr-12
- 4.004..9 1991-Jun-07
- 4.010 1991-Jun-10
- 4.011..18 1991-Nov-05
- 4.019 1991-Nov-11 Stable.
- 4.020..33 1992-Jun-08
- 4.034 1992-Jun-11
- 4.035 1992-Jun-23
- Larry 4.036 1993-Feb-05 Very stable.
-
- 5.000alpha1 1993-Jul-31
- 5.000alpha2 1993-Aug-16
- 5.000alpha3 1993-Oct-10
- 5.000alpha4 1993-???-??
- 5.000alpha5 1993-???-??
- 5.000alpha6 1994-Mar-18
- 5.000alpha7 1994-Mar-25
- Andy 5.000alpha8 1994-Apr-04
- Larry 5.000alpha9 1994-May-05 ext appears.
- 5.000alpha10 1994-Jun-11
- 5.000alpha11 1994-Jul-01
- Andy 5.000a11a 1994-Jul-07 To fit 14.
- 5.000a11b 1994-Jul-14
- 5.000a11c 1994-Jul-19
- 5.000a11d 1994-Jul-22
- Larry 5.000alpha12 1994-Aug-04
- Andy 5.000a12a 1994-Aug-08
- 5.000a12b 1994-Aug-15
- 5.000a12c 1994-Aug-22
- 5.000a12d 1994-Aug-22
- 5.000a12e 1994-Aug-22
- 5.000a12f 1994-Aug-24
- 5.000a12g 1994-Aug-24
- 5.000a12h 1994-Aug-24
- Larry 5.000beta1 1994-Aug-30
- Andy 5.000b1a 1994-Sep-06
- Larry 5.000beta2 1994-Sep-14 Core slushified.
- Andy 5.000b2a 1994-Sep-14
- 5.000b2b 1994-Sep-17
- 5.000b2c 1994-Sep-17
- Larry 5.000beta3 1994-Sep-??
- Andy 5.000b3a 1994-Sep-18
- 5.000b3b 1994-Sep-22
- 5.000b3c 1994-Sep-23
- 5.000b3d 1994-Sep-27
- 5.000b3e 1994-Sep-28
- 5.000b3f 1994-Sep-30
- 5.000b3g 1994-Oct-04
- Andy 5.000b3h 1994-Oct-07
- Larry? 5.000gamma 1994-Oct-13?
-
- Larry 5.000 1994-Oct-17
-
- Andy 5.000a 1994-Dec-19
- 5.000b 1995-Jan-18
- 5.000c 1995-Jan-18
- 5.000d 1995-Jan-18
- 5.000e 1995-Jan-18
- 5.000f 1995-Jan-18
- 5.000g 1995-Jan-18
- 5.000h 1995-Jan-18
- 5.000i 1995-Jan-26
- 5.000j 1995-Feb-07
- 5.000k 1995-Feb-11
- 5.000l 1995-Feb-21
- 5.000m 1995-Feb-28
- 5.000n 1995-Mar-07
- 5.000o 1995-Mar-13?
-
- Larry 5.001 1995-Mar-13
-
- Andy 5.001a 1995-Mar-15
- 5.001b 1995-Mar-31
- 5.001c 1995-Apr-07
- 5.001d 1995-Apr-14
- 5.001e 1995-Apr-18 Stable.
- 5.001f 1995-May-31
- 5.001g 1995-May-25
- 5.001h 1995-May-25
- 5.001i 1995-May-30
- 5.001j 1995-Jun-05
- 5.001k 1995-Jun-06
- 5.001l 1995-Jun-06 Stable.
- 5.001m 1995-Jul-02 Very stable.
- 5.001n 1995-Oct-31 Very unstable.
- 5.002beta1 1995-Nov-21
- 5.002b1a 1995-Dec-04
- 5.002b1b 1995-Dec-04
- 5.002b1c 1995-Dec-04
- 5.002b1d 1995-Dec-04
- 5.002b1e 1995-Dec-08
- 5.002b1f 1995-Dec-08
- Tom 5.002b1g 1995-Dec-21 Doc release.
- Andy 5.002b1h 1996-Jan-05
- 5.002b2 1996-Jan-14
- Larry 5.002b3 1996-Feb-02
- Andy 5.002gamma 1996-Feb-11
- Larry 5.002delta 1996-Feb-27
-
- Larry 5.002 1996-Feb-29 Prototypes.
-
- Charles 5.002_01 1996-Mar-25
-
- 5.003 1996-Jun-25 Security release.
-
- 5.003_01 1996-Jul-31
- Nick 5.003_02 1996-Aug-10
- Andy 5.003_03 1996-Aug-28
- 5.003_04 1996-Sep-02
- 5.003_05 1996-Sep-12
- 5.003_06 1996-Oct-07
- 5.003_07 1996-Oct-10
- Chip 5.003_08 1996-Nov-19
- 5.003_09 1996-Nov-26
- 5.003_10 1996-Nov-29
- 5.003_11 1996-Dec-06
- 5.003_12 1996-Dec-19
- 5.003_13 1996-Dec-20
- 5.003_14 1996-Dec-23
- 5.003_15 1996-Dec-23
- 5.003_16 1996-Dec-24
- 5.003_17 1996-Dec-27
- 5.003_18 1996-Dec-31
- 5.003_19 1997-Jan-04
- 5.003_20 1997-Jan-07
- 5.003_21 1997-Jan-15
- 5.003_22 1997-Jan-16
- 5.003_23 1997-Jan-25
- 5.003_24 1997-Jan-29
- 5.003_25 1997-Feb-04
- 5.003_26 1997-Feb-10
- 5.003_27 1997-Feb-18
- 5.003_28 1997-Feb-21
- 5.003_90 1997-Feb-25 Ramping up to the 5.004 release.
- 5.003_91 1997-Mar-01
- 5.003_92 1997-Mar-06
- 5.003_93 1997-Mar-10
- 5.003_94 1997-Mar-22
- 5.003_95 1997-Mar-25
- 5.003_96 1997-Apr-01
- 5.003_97 1997-Apr-03 Fairly widely used.
- 5.003_97a 1997-Apr-05
- 5.003_97b 1997-Apr-08
- 5.003_97c 1997-Apr-10
- 5.003_97d 1997-Apr-13
- 5.003_97e 1997-Apr-15
- 5.003_97f 1997-Apr-17
- 5.003_97g 1997-Apr-18
- 5.003_97h 1997-Apr-24
- 5.003_97i 1997-Apr-25
- 5.003_97j 1997-Apr-28
- 5.003_98 1997-Apr-30
- 5.003_99 1997-May-01
- 5.003_99a 1997-May-09
- p54rc1 1997-May-12 Release Candidates.
- p54rc2 1997-May-14
-
- Chip 5.004 1997-May-15 A major maintenance release.
-
- Tim 5.004_01 1997-Jun-13 The 5.004 maintenance track.
- 5.004_02 1997-Aug-07
- 5.004_03 1997-Sep-05
- 5.004_04 1997-Oct-15
- 5.004m5t1 1998-Mar-04 Maintenance Trials (for 5.004_05).
- 5.004_04-m2 1997-May-01
- 5.004_04-m3 1998-May-15
- 5.004_04-m4 1998-May-19
- 5.004_04-MT5 1998-Jul-21
- 5.004_04-MT6 1998-Oct-09
- 5.004_04-MT7 1998-Nov-22
- 5.004_04-MT8 1998-Dec-03
- Chip 5.004_04-MT9 1999-Apr-26
- 5.004_05 1999-Apr-29
-
- Malcolm 5.004_50 1997-Sep-09 The 5.005 development track.
- 5.004_51 1997-Oct-02
- 5.004_52 1997-Oct-15
- 5.004_53 1997-Oct-16
- 5.004_54 1997-Nov-14
- 5.004_55 1997-Nov-25
- 5.004_56 1997-Dec-18
- 5.004_57 1998-Feb-03
- 5.004_58 1998-Feb-06
- 5.004_59 1998-Feb-13
- 5.004_60 1998-Feb-20
- 5.004_61 1998-Feb-27
- 5.004_62 1998-Mar-06
- 5.004_63 1998-Mar-17
- 5.004_64 1998-Apr-03
- 5.004_65 1998-May-15
- 5.004_66 1998-May-29
- Sarathy 5.004_67 1998-Jun-15
- 5.004_68 1998-Jun-23
- 5.004_69 1998-Jun-29
- 5.004_70 1998-Jul-06
- 5.004_71 1998-Jul-09
- 5.004_72 1998-Jul-12
- 5.004_73 1998-Jul-13
- 5.004_74 1998-Jul-14 5.005 beta candidate.
- 5.004_75 1998-Jul-15 5.005 beta1.
- 5.004_76 1998-Jul-21 5.005 beta2.
- 5.005 1998-Jul-22 Oneperl.
-
- Sarathy 5.005_01 1998-Jul-27 The 5.005 maintenance track.
- 5.005_02-T1 1998-Aug-02
- 5.005_02-T2 1998-Aug-05
- 5.005_02 1998-Aug-08
- Graham 5.005_03-MT1 1998-Nov-30
- 5.005_03-MT2 1999-Jan-04
- 5.005_03-MT3 1999-Jan-17
- 5.005_03-MT4 1999-Jan-26
- 5.005_03-MT5 1999-Jan-28
- 5.005_03 1999-Mar-28
- Chip 5.005_04 2000-***-**
-
- Sarathy 5.005_50 1998-Jul-26 The 5.6 development track.
- 5.005_51 1998-Aug-10
- 5.005_52 1998-Sep-25
- 5.005_53 1998-Oct-31
- 5.005_54 1998-Nov-30
- 5.005_55 1999-Feb-16
- 5.005_56 1999-Mar-01
- 5.005_57 1999-May-25
- 5.005_58 1999-Jul-27
- 5.005_59 1999-Aug-02
- 5.005_60 1999-Aug-02
- 5.005_61 1999-Aug-20
- 5.005_62 1999-Oct-15
- 5.005_63 1999-Dec-09
- 5.5.640 2000-Feb-02
- 5.5.650 2000-Feb-08 beta1
- 5.5.660 2000-Feb-22 beta2
- 5.5.670 2000-Feb-29 beta3
- 5.6.0-RC1 2000-Mar-09 release candidate 1
- 5.6.0-RC2 2000-Mar-14 release candidate 2
- 5.6.0-RC3 2000-Mar-21 release candidate 3
- 5.6.0 2000-Mar-22
-
- Sarathy 5.6.1-TRIAL1 2000-Dec-18 The 5.6 maintenance track.
- 5.6.1-TRIAL2 2001-Jan-31
- 5.6.1-TRIAL3 2001-Mar-19
- 5.6.1-foolish 2001-Apr-01 The "fools-gold" release.
- 5.6.1 2001-Apr-08
-
- Jarkko 5.7.0 2000-Sep-02 The 5.7 track: Development.
-
-=head2 SELECTED RELEASE SIZES
-
-For example the notation "core: 212 29" in the release 1.000 means that
-it had in the core 212 kilobytes, in 29 files. The "core".."doc" are
-explained below.
-
- release core lib ext t doc
- ======================================================================
-
- 1.000 212 29 - - - - 38 51 62 3
- 1.014 219 29 - - - - 39 52 68 4
- 2.000 309 31 2 3 - - 55 57 92 4
- 2.001 312 31 2 3 - - 55 57 94 4
- 3.000 508 36 24 11 - - 79 73 156 5
- 3.044 645 37 61 20 - - 90 74 190 6
- 4.000 635 37 59 20 - - 91 75 198 4
- 4.019 680 37 85 29 - - 98 76 199 4
- 4.036 709 37 89 30 - - 98 76 208 5
- 5.000alpha2 785 50 114 32 - - 112 86 209 5
- 5.000alpha3 801 50 117 33 - - 121 87 209 5
- 5.000alpha9 1022 56 149 43 116 29 125 90 217 6
- 5.000a12h 978 49 140 49 205 46 152 97 228 9
- 5.000b3h 1035 53 232 70 216 38 162 94 218 21
- 5.000 1038 53 250 76 216 38 154 92 536 62
- 5.001m 1071 54 388 82 240 38 159 95 544 29
- 5.002 1121 54 661 101 287 43 155 94 847 35
- 5.003 1129 54 680 102 291 43 166 100 853 35
- 5.003_07 1231 60 748 106 396 53 213 137 976 39
- 5.004 1351 60 1230 136 408 51 355 161 1587 55
- 5.004_01 1356 60 1258 138 410 51 358 161 1587 55
- 5.004_04 1375 60 1294 139 413 51 394 162 1629 55
- 5.004_05 1463 60 1435 150 394 50 445 175 1855 59
- 5.004_51 1401 61 1260 140 413 53 358 162 1594 56
- 5.004_53 1422 62 1295 141 438 70 394 162 1637 56
- 5.004_56 1501 66 1301 140 447 74 408 165 1648 57
- 5.004_59 1555 72 1317 142 448 74 424 171 1678 58
- 5.004_62 1602 77 1327 144 629 92 428 173 1674 58
- 5.004_65 1626 77 1358 146 615 92 446 179 1698 60
- 5.004_68 1856 74 1382 152 619 92 463 187 1784 60
- 5.004_70 1863 75 1456 154 675 92 494 194 1809 60
- 5.004_73 1874 76 1467 152 762 102 506 196 1883 61
- 5.004_75 1877 76 1467 152 770 103 508 196 1896 62
- 5.005 1896 76 1469 152 795 103 509 197 1945 63
- 5.005_03 1936 77 1541 153 813 104 551 201 2176 72
- 5.005_50 1969 78 1842 301 795 103 514 198 1948 63
- 5.005_53 1999 79 1885 303 806 104 602 224 2002 67
- 5.005_56 2086 79 1970 307 866 113 672 238 2221 75
-
-The "core"..."doc" mean the following files from the Perl source code
-distribution. The glob notation ** means recursively, (.) means
-regular files.
-
- core *.[hcy]
- lib lib/**/*.p[ml]
- ext ext/**/*.{[hcyt],xs,pm}
- t t/**/*(.)
- doc {README*,INSTALL,*[_.]man{,.?},pod/**/*.pod}
-
-Here are some statistics for the other subdirectories and one file in
-the Perl source distribution for somewhat more selected releases.
-
- ======================================================================
- Legend: kB #
-
- 1.014 2.001 3.044 4.000 4.019 4.036
-
- atarist - - - - - - - - - - 113 31
- Configure 31 1 37 1 62 1 73 1 83 1 86 1
- eg - - 34 28 47 39 47 39 47 39 47 39
- emacs - - - - - - 67 4 67 4 67 4
- h2pl - - - - 12 12 12 12 12 12 12 12
- hints - - - - - - - - 5 42 11 56
- msdos - - - - 41 13 57 15 58 15 60 15
- os2 - - - - 63 22 81 29 81 29 113 31
- usub - - - - 21 16 25 7 43 8 43 8
- x2p 103 17 104 17 137 17 147 18 152 19 154 19
-
- ======================================================================
-
- 5.000a2 5.000a12h 5.000b3h 5.000 5.001m 5.002 5.003
-
- atarist 113 31 113 31 - - - - - - - - - -
- bench - - 0 1 - - - - - - - - - -
- Bugs 2 5 26 1 - - - - - - - - - -
- dlperl 40 5 - - - - - - - - - - - -
- do 127 71 - - - - - - - - - - - -
- Configure - - 153 1 159 1 160 1 180 1 201 1 201 1
- Doc - - 26 1 75 7 11 1 11 1 - - - -
- eg 79 58 53 44 51 43 54 44 54 44 54 44 54 44
- emacs 67 4 104 6 104 6 104 1 104 6 108 1 108 1
- h2pl 12 12 12 12 12 12 12 12 12 12 12 12 12 12
- hints 11 56 12 46 18 48 18 48 44 56 73 59 77 60
- msdos 60 15 60 15 - - - - - - - - - -
- os2 113 31 113 31 - - - - - - 84 17 56 10
- U - - 62 8 112 42 - - - - - - - -
- usub 43 8 - - - - - - - - - - - -
- utils - - - - - - - - - - 87 7 88 7
- vms - - 80 7 123 9 184 15 304 20 500 24 475 26
- x2p 171 22 171 21 162 20 162 20 279 20 280 20 280 20
-
- ======================================================================
-
- 5.003_07 5.004 5.004_04 5.004_62 5.004_65 5.004_68
-
- beos - - - - - - - - 1 1 1 1
- Configure 217 1 225 1 225 1 240 1 248 1 256 1
- cygwin32 - - 23 5 23 5 23 5 24 5 24 5
- djgpp - - - - - - 14 5 14 5 14 5
- eg 54 44 81 62 81 62 81 62 81 62 81 62
- emacs 143 1 194 1 204 1 212 2 212 2 212 2
- h2pl 12 12 12 12 12 12 12 12 12 12 12 12
- hints 90 62 129 69 132 71 144 72 151 74 155 74
- os2 117 42 121 42 127 42 127 44 129 44 129 44
- plan9 79 15 82 15 82 15 82 15 82 15 82 15
- Porting 51 1 94 2 109 4 203 6 234 8 241 9
- qnx - - 1 2 1 2 1 2 1 2 1 2
- utils 97 7 112 8 118 8 124 8 156 9 159 9
- vms 505 27 518 34 524 34 538 34 569 34 569 34
- win32 - - 285 33 378 36 470 39 493 39 575 41
- x2p 280 19 281 19 281 19 281 19 282 19 281 19
-
- ======================================================================
-
- 5.004_70 5.004_73 5.004_75 5.005 5.005_03
-
- apollo - - - - - - - - 0 1
- beos 1 1 1 1 1 1 1 1 1 1
- Configure 256 1 256 1 264 1 264 1 270 1
- cygwin32 24 5 24 5 24 5 24 5 24 5
- djgpp 14 5 14 5 14 5 14 5 15 5
- eg 86 65 86 65 86 65 86 65 86 65
- emacs 262 2 262 2 262 2 262 2 274 2
- h2pl 12 12 12 12 12 12 12 12 12 12
- hints 157 74 157 74 159 74 160 74 179 77
- mint - - - - - - - - 4 7
- mpeix - - - - 5 3 5 3 5 3
- os2 129 44 139 44 142 44 143 44 148 44
- plan9 82 15 82 15 82 15 82 15 82 15
- Porting 241 9 253 9 259 10 264 12 272 13
- qnx 1 2 1 2 1 2 1 2 1 2
- utils 160 9 160 9 160 9 160 9 164 9
- vms 570 34 572 34 573 34 575 34 583 34
- vos - - - - - - - - 156 10
- win32 577 41 585 41 585 41 587 41 600 42
- x2p 281 19 281 19 281 19 281 19 281 19
-
-=head2 SELECTED PATCH SIZES
-
-The "diff lines kb" means that for example the patch 5.003_08, to be
-applied on top of the 5.003_07 (or whatever was before the 5.003_08)
-added lines for 110 kilobytes, it removed lines for 19 kilobytes, and
-changed lines for 424 kilobytes. Just the lines themselves are
-counted, not their context. The "+ - !" become from the diff(1)
-context diff output format.
-
- Pump- Release Date diff lines kB
- king -------------
- + - !
- ===========================================================================
-
- Chip 5.003_08 1996-Nov-19 110 19 424
- 5.003_09 1996-Nov-26 38 9 248
- 5.003_10 1996-Nov-29 29 2 27
- 5.003_11 1996-Dec-06 73 12 165
- 5.003_12 1996-Dec-19 275 6 436
- 5.003_13 1996-Dec-20 95 1 56
- 5.003_14 1996-Dec-23 23 7 333
- 5.003_15 1996-Dec-23 0 0 1
- 5.003_16 1996-Dec-24 12 3 50
- 5.003_17 1996-Dec-27 19 1 14
- 5.003_18 1996-Dec-31 21 1 32
- 5.003_19 1997-Jan-04 80 3 85
- 5.003_20 1997-Jan-07 18 1 146
- 5.003_21 1997-Jan-15 38 10 221
- 5.003_22 1997-Jan-16 4 0 18
- 5.003_23 1997-Jan-25 71 15 119
- 5.003_24 1997-Jan-29 426 1 20
- 5.003_25 1997-Feb-04 21 8 169
- 5.003_26 1997-Feb-10 16 1 15
- 5.003_27 1997-Feb-18 32 10 38
- 5.003_28 1997-Feb-21 58 4 66
- 5.003_90 1997-Feb-25 22 2 34
- 5.003_91 1997-Mar-01 37 1 39
- 5.003_92 1997-Mar-06 16 3 69
- 5.003_93 1997-Mar-10 12 3 15
- 5.003_94 1997-Mar-22 407 7 200
- 5.003_95 1997-Mar-25 41 1 37
- 5.003_96 1997-Apr-01 283 5 261
- 5.003_97 1997-Apr-03 13 2 34
- 5.003_97a 1997-Apr-05 57 1 27
- 5.003_97b 1997-Apr-08 14 1 20
- 5.003_97c 1997-Apr-10 20 1 16
- 5.003_97d 1997-Apr-13 8 0 16
- 5.003_97e 1997-Apr-15 15 4 46
- 5.003_97f 1997-Apr-17 7 1 33
- 5.003_97g 1997-Apr-18 6 1 42
- 5.003_97h 1997-Apr-24 23 3 68
- 5.003_97i 1997-Apr-25 23 1 31
- 5.003_97j 1997-Apr-28 36 1 49
- 5.003_98 1997-Apr-30 171 12 539
- 5.003_99 1997-May-01 6 0 7
- 5.003_99a 1997-May-09 36 2 61
- p54rc1 1997-May-12 8 1 11
- p54rc2 1997-May-14 6 0 40
-
- 5.004 1997-May-15 4 0 4
-
- Tim 5.004_01 1997-Jun-13 222 14 57
- 5.004_02 1997-Aug-07 112 16 119
- 5.004_03 1997-Sep-05 109 0 17
- 5.004_04 1997-Oct-15 66 8 173
-
-=head1 THE KEEPERS OF THE RECORDS
-
-Jarkko Hietaniemi <F<jhi@iki.fi>>.
-
-Thanks to the collective memory of the Perlfolk. In addition to the
-Keepers of the Pumpkin also Alan Champion, Andreas König, John
-Macdonald, Matthias Neeracher, Jeff Okamoto, Michael Peppler,
-Randal Schwartz, and Paul D. Smith sent corrections and additions.
-
-=cut
diff --git a/contrib/perl5/pod/perlintern.pod b/contrib/perl5/pod/perlintern.pod
deleted file mode 100644
index e50be28..0000000
--- a/contrib/perl5/pod/perlintern.pod
+++ /dev/null
@@ -1,120 +0,0 @@
-=head1 NAME
-
-perlintern - autogenerated documentation of purely B<internal>
- Perl functions
-
-=head1 DESCRIPTION
-
-This file is the autogenerated documentation of functions in the
-Perl interpreter that are documented using Perl's internal documentation
-format but are not marked as part of the Perl API. In other words,
-B<they are not for use in extensions>!
-
-=over 8
-
-=item is_gv_magical
-
-Returns C<TRUE> if given the name of a magical GV.
-
-Currently only useful internally when determining if a GV should be
-created even in rvalue contexts.
-
-C<flags> is not used at present but available for future extension to
-allow selecting particular classes of magical variable.
-
- bool is_gv_magical(char *name, STRLEN len, U32 flags)
-
-=for hackers
-Found in file gv.c
-
-=item LVRET
-
-True if this op will be the return value of an lvalue subroutine
-
-=for hackers
-Found in file pp.h
-
-=item PL_DBsingle
-
-When Perl is run in debugging mode, with the B<-d> switch, this SV is a
-boolean which indicates whether subs are being single-stepped.
-Single-stepping is automatically turned on after every step. This is the C
-variable which corresponds to Perl's $DB::single variable. See
-C<PL_DBsub>.
-
- SV * PL_DBsingle
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_DBsub
-
-When Perl is run in debugging mode, with the B<-d> switch, this GV contains
-the SV which holds the name of the sub being debugged. This is the C
-variable which corresponds to Perl's $DB::sub variable. See
-C<PL_DBsingle>.
-
- GV * PL_DBsub
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_DBtrace
-
-Trace variable used when Perl is run in debugging mode, with the B<-d>
-switch. This is the C variable which corresponds to Perl's $DB::trace
-variable. See C<PL_DBsingle>.
-
- SV * PL_DBtrace
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_dowarn
-
-The C variable which corresponds to Perl's $^W warning variable.
-
- bool PL_dowarn
-
-=for hackers
-Found in file intrpvar.h
-
-=item PL_last_in_gv
-
-The GV which was last used for a filehandle input operation. (C<< <FH> >>)
-
- GV* PL_last_in_gv
-
-=for hackers
-Found in file thrdvar.h
-
-=item PL_ofs_sv
-
-The output field separator - C<$,> in Perl space.
-
- SV* PL_ofs_sv
-
-=for hackers
-Found in file thrdvar.h
-
-=item PL_rs
-
-The input record separator - C<$/> in Perl space.
-
- SV* PL_rs
-
-=for hackers
-Found in file thrdvar.h
-
-=back
-
-=head1 AUTHORS
-
-The autodocumentation system was originally added to the Perl core by
-Benjamin Stuhl. Documentation is by whoever was kind enough to
-document their functions.
-
-=head1 SEE ALSO
-
-perlguts(1), perlapi(1)
-
diff --git a/contrib/perl5/pod/perlipc.pod b/contrib/perl5/pod/perlipc.pod
deleted file mode 100644
index a1df3e4..0000000
--- a/contrib/perl5/pod/perlipc.pod
+++ /dev/null
@@ -1,1509 +0,0 @@
-=head1 NAME
-
-perlipc - Perl interprocess communication (signals, fifos, pipes, safe subprocesses, sockets, and semaphores)
-
-=head1 DESCRIPTION
-
-The basic IPC facilities of Perl are built out of the good old Unix
-signals, named pipes, pipe opens, the Berkeley socket routines, and SysV
-IPC calls. Each is used in slightly different situations.
-
-=head1 Signals
-
-Perl uses a simple signal handling model: the %SIG hash contains names or
-references of user-installed signal handlers. These handlers will be called
-with an argument which is the name of the signal that triggered it. A
-signal may be generated intentionally from a particular keyboard sequence like
-control-C or control-Z, sent to you from another process, or
-triggered automatically by the kernel when special events transpire, like
-a child process exiting, your process running out of stack space, or
-hitting file size limit.
-
-For example, to trap an interrupt signal, set up a handler like this.
-Do as little as you possibly can in your handler; notice how all we do is
-set a global variable and then raise an exception. That's because on most
-systems, libraries are not re-entrant; particularly, memory allocation and
-I/O routines are not. That means that doing nearly I<anything> in your
-handler could in theory trigger a memory fault and subsequent core dump.
-
- sub catch_zap {
- my $signame = shift;
- $shucks++;
- die "Somebody sent me a SIG$signame";
- }
- $SIG{INT} = 'catch_zap'; # could fail in modules
- $SIG{INT} = \&catch_zap; # best strategy
-
-The names of the signals are the ones listed out by C<kill -l> on your
-system, or you can retrieve them from the Config module. Set up an
-@signame list indexed by number to get the name and a %signo table
-indexed by name to get the number:
-
- use Config;
- defined $Config{sig_name} || die "No sigs?";
- foreach $name (split(' ', $Config{sig_name})) {
- $signo{$name} = $i;
- $signame[$i] = $name;
- $i++;
- }
-
-So to check whether signal 17 and SIGALRM were the same, do just this:
-
- print "signal #17 = $signame[17]\n";
- if ($signo{ALRM}) {
- print "SIGALRM is $signo{ALRM}\n";
- }
-
-You may also choose to assign the strings C<'IGNORE'> or C<'DEFAULT'> as
-the handler, in which case Perl will try to discard the signal or do the
-default thing.
-
-On most Unix platforms, the C<CHLD> (sometimes also known as C<CLD>) signal
-has special behavior with respect to a value of C<'IGNORE'>.
-Setting C<$SIG{CHLD}> to C<'IGNORE'> on such a platform has the effect of
-not creating zombie processes when the parent process fails to C<wait()>
-on its child processes (i.e. child processes are automatically reaped).
-Calling C<wait()> with C<$SIG{CHLD}> set to C<'IGNORE'> usually returns
-C<-1> on such platforms.
-
-Some signals can be neither trapped nor ignored, such as
-the KILL and STOP (but not the TSTP) signals. One strategy for
-temporarily ignoring signals is to use a local() statement, which will be
-automatically restored once your block is exited. (Remember that local()
-values are "inherited" by functions called from within that block.)
-
- sub precious {
- local $SIG{INT} = 'IGNORE';
- &more_functions;
- }
- sub more_functions {
- # interrupts still ignored, for now...
- }
-
-Sending a signal to a negative process ID means that you send the signal
-to the entire Unix process-group. This code sends a hang-up signal to all
-processes in the current process group (and sets $SIG{HUP} to IGNORE so
-it doesn't kill itself):
-
- {
- local $SIG{HUP} = 'IGNORE';
- kill HUP => -$$;
- # snazzy writing of: kill('HUP', -$$)
- }
-
-Another interesting signal to send is signal number zero. This doesn't
-actually affect another process, but instead checks whether it's alive
-or has changed its UID.
-
- unless (kill 0 => $kid_pid) {
- warn "something wicked happened to $kid_pid";
- }
-
-You might also want to employ anonymous functions for simple signal
-handlers:
-
- $SIG{INT} = sub { die "\nOutta here!\n" };
-
-But that will be problematic for the more complicated handlers that need
-to reinstall themselves. Because Perl's signal mechanism is currently
-based on the signal(3) function from the C library, you may sometimes be so
-misfortunate as to run on systems where that function is "broken", that
-is, it behaves in the old unreliable SysV way rather than the newer, more
-reasonable BSD and POSIX fashion. So you'll see defensive people writing
-signal handlers like this:
-
- sub REAPER {
- $waitedpid = wait;
- # loathe sysV: it makes us not only reinstate
- # the handler, but place it after the wait
- $SIG{CHLD} = \&REAPER;
- }
- $SIG{CHLD} = \&REAPER;
- # now do something that forks...
-
-or even the more elaborate:
-
- use POSIX ":sys_wait_h";
- sub REAPER {
- my $child;
- while (($child = waitpid(-1,WNOHANG)) > 0) {
- $Kid_Status{$child} = $?;
- }
- $SIG{CHLD} = \&REAPER; # still loathe sysV
- }
- $SIG{CHLD} = \&REAPER;
- # do something that forks...
-
-Signal handling is also used for timeouts in Unix, While safely
-protected within an C<eval{}> block, you set a signal handler to trap
-alarm signals and then schedule to have one delivered to you in some
-number of seconds. Then try your blocking operation, clearing the alarm
-when it's done but not before you've exited your C<eval{}> block. If it
-goes off, you'll use die() to jump out of the block, much as you might
-using longjmp() or throw() in other languages.
-
-Here's an example:
-
- eval {
- local $SIG{ALRM} = sub { die "alarm clock restart" };
- alarm 10;
- flock(FH, 2); # blocking write lock
- alarm 0;
- };
- if ($@ and $@ !~ /alarm clock restart/) { die }
-
-If the operation being timed out is system() or qx(), this technique
-is liable to generate zombies. If this matters to you, you'll
-need to do your own fork() and exec(), and kill the errant child process.
-
-For more complex signal handling, you might see the standard POSIX
-module. Lamentably, this is almost entirely undocumented, but
-the F<t/lib/posix.t> file from the Perl source distribution has some
-examples in it.
-
-=head1 Named Pipes
-
-A named pipe (often referred to as a FIFO) is an old Unix IPC
-mechanism for processes communicating on the same machine. It works
-just like a regular, connected anonymous pipes, except that the
-processes rendezvous using a filename and don't have to be related.
-
-To create a named pipe, use the Unix command mknod(1) or on some
-systems, mkfifo(1). These may not be in your normal path.
-
- # system return val is backwards, so && not ||
- #
- $ENV{PATH} .= ":/etc:/usr/etc";
- if ( system('mknod', $path, 'p')
- && system('mkfifo', $path) )
- {
- die "mk{nod,fifo} $path failed";
- }
-
-
-A fifo is convenient when you want to connect a process to an unrelated
-one. When you open a fifo, the program will block until there's something
-on the other end.
-
-For example, let's say you'd like to have your F<.signature> file be a
-named pipe that has a Perl program on the other end. Now every time any
-program (like a mailer, news reader, finger program, etc.) tries to read
-from that file, the reading program will block and your program will
-supply the new signature. We'll use the pipe-checking file test B<-p>
-to find out whether anyone (or anything) has accidentally removed our fifo.
-
- chdir; # go home
- $FIFO = '.signature';
- $ENV{PATH} .= ":/etc:/usr/games";
-
- while (1) {
- unless (-p $FIFO) {
- unlink $FIFO;
- system('mknod', $FIFO, 'p')
- && die "can't mknod $FIFO: $!";
- }
-
- # next line blocks until there's a reader
- open (FIFO, "> $FIFO") || die "can't write $FIFO: $!";
- print FIFO "John Smith (smith\@host.org)\n", `fortune -s`;
- close FIFO;
- sleep 2; # to avoid dup signals
- }
-
-=head2 WARNING
-
-By installing Perl code to deal with signals, you're exposing yourself
-to danger from two things. First, few system library functions are
-re-entrant. If the signal interrupts while Perl is executing one function
-(like malloc(3) or printf(3)), and your signal handler then calls the
-same function again, you could get unpredictable behavior--often, a
-core dump. Second, Perl isn't itself re-entrant at the lowest levels.
-If the signal interrupts Perl while Perl is changing its own internal
-data structures, similarly unpredictable behaviour may result.
-
-There are two things you can do, knowing this: be paranoid or be
-pragmatic. The paranoid approach is to do as little as possible in your
-signal handler. Set an existing integer variable that already has a
-value, and return. This doesn't help you if you're in a slow system call,
-which will just restart. That means you have to C<die> to longjump(3) out
-of the handler. Even this is a little cavalier for the true paranoiac,
-who avoids C<die> in a handler because the system I<is> out to get you.
-The pragmatic approach is to say ``I know the risks, but prefer the
-convenience'', and to do anything you want in your signal handler,
-prepared to clean up core dumps now and again.
-
-To forbid signal handlers altogether would bars you from
-many interesting programs, including virtually everything in this manpage,
-since you could no longer even write SIGCHLD handlers.
-
-
-=head1 Using open() for IPC
-
-Perl's basic open() statement can also be used for unidirectional interprocess
-communication by either appending or prepending a pipe symbol to the second
-argument to open(). Here's how to start something up in a child process you
-intend to write to:
-
- open(SPOOLER, "| cat -v | lpr -h 2>/dev/null")
- || die "can't fork: $!";
- local $SIG{PIPE} = sub { die "spooler pipe broke" };
- print SPOOLER "stuff\n";
- close SPOOLER || die "bad spool: $! $?";
-
-And here's how to start up a child process you intend to read from:
-
- open(STATUS, "netstat -an 2>&1 |")
- || die "can't fork: $!";
- while (<STATUS>) {
- next if /^(tcp|udp)/;
- print;
- }
- close STATUS || die "bad netstat: $! $?";
-
-If one can be sure that a particular program is a Perl script that is
-expecting filenames in @ARGV, the clever programmer can write something
-like this:
-
- % program f1 "cmd1|" - f2 "cmd2|" f3 < tmpfile
-
-and irrespective of which shell it's called from, the Perl program will
-read from the file F<f1>, the process F<cmd1>, standard input (F<tmpfile>
-in this case), the F<f2> file, the F<cmd2> command, and finally the F<f3>
-file. Pretty nifty, eh?
-
-You might notice that you could use backticks for much the
-same effect as opening a pipe for reading:
-
- print grep { !/^(tcp|udp)/ } `netstat -an 2>&1`;
- die "bad netstat" if $?;
-
-While this is true on the surface, it's much more efficient to process the
-file one line or record at a time because then you don't have to read the
-whole thing into memory at once. It also gives you finer control of the
-whole process, letting you to kill off the child process early if you'd
-like.
-
-Be careful to check both the open() and the close() return values. If
-you're I<writing> to a pipe, you should also trap SIGPIPE. Otherwise,
-think of what happens when you start up a pipe to a command that doesn't
-exist: the open() will in all likelihood succeed (it only reflects the
-fork()'s success), but then your output will fail--spectacularly. Perl
-can't know whether the command worked because your command is actually
-running in a separate process whose exec() might have failed. Therefore,
-while readers of bogus commands return just a quick end of file, writers
-to bogus command will trigger a signal they'd better be prepared to
-handle. Consider:
-
- open(FH, "|bogus") or die "can't fork: $!";
- print FH "bang\n" or die "can't write: $!";
- close FH or die "can't close: $!";
-
-That won't blow up until the close, and it will blow up with a SIGPIPE.
-To catch it, you could use this:
-
- $SIG{PIPE} = 'IGNORE';
- open(FH, "|bogus") or die "can't fork: $!";
- print FH "bang\n" or die "can't write: $!";
- close FH or die "can't close: status=$?";
-
-=head2 Filehandles
-
-Both the main process and any child processes it forks share the same
-STDIN, STDOUT, and STDERR filehandles. If both processes try to access
-them at once, strange things can happen. You may also want to close
-or reopen the filehandles for the child. You can get around this by
-opening your pipe with open(), but on some systems this means that the
-child process cannot outlive the parent.
-
-=head2 Background Processes
-
-You can run a command in the background with:
-
- system("cmd &");
-
-The command's STDOUT and STDERR (and possibly STDIN, depending on your
-shell) will be the same as the parent's. You won't need to catch
-SIGCHLD because of the double-fork taking place (see below for more
-details).
-
-=head2 Complete Dissociation of Child from Parent
-
-In some cases (starting server processes, for instance) you'll want to
-completely dissociate the child process from the parent. This is
-often called daemonization. A well behaved daemon will also chdir()
-to the root directory (so it doesn't prevent unmounting the filesystem
-containing the directory from which it was launched) and redirect its
-standard file descriptors from and to F</dev/null> (so that random
-output doesn't wind up on the user's terminal).
-
- use POSIX 'setsid';
-
- sub daemonize {
- chdir '/' or die "Can't chdir to /: $!";
- open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
- open STDOUT, '>/dev/null'
- or die "Can't write to /dev/null: $!";
- defined(my $pid = fork) or die "Can't fork: $!";
- exit if $pid;
- setsid or die "Can't start a new session: $!";
- open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
- }
-
-The fork() has to come before the setsid() to ensure that you aren't a
-process group leader (the setsid() will fail if you are). If your
-system doesn't have the setsid() function, open F</dev/tty> and use the
-C<TIOCNOTTY> ioctl() on it instead. See L<tty(4)> for details.
-
-Non-Unix users should check their Your_OS::Process module for other
-solutions.
-
-=head2 Safe Pipe Opens
-
-Another interesting approach to IPC is making your single program go
-multiprocess and communicate between (or even amongst) yourselves. The
-open() function will accept a file argument of either C<"-|"> or C<"|-">
-to do a very interesting thing: it forks a child connected to the
-filehandle you've opened. The child is running the same program as the
-parent. This is useful for safely opening a file when running under an
-assumed UID or GID, for example. If you open a pipe I<to> minus, you can
-write to the filehandle you opened and your kid will find it in his
-STDIN. If you open a pipe I<from> minus, you can read from the filehandle
-you opened whatever your kid writes to his STDOUT.
-
- use English;
- my $sleep_count = 0;
-
- do {
- $pid = open(KID_TO_WRITE, "|-");
- unless (defined $pid) {
- warn "cannot fork: $!";
- die "bailing out" if $sleep_count++ > 6;
- sleep 10;
- }
- } until defined $pid;
-
- if ($pid) { # parent
- print KID_TO_WRITE @some_data;
- close(KID_TO_WRITE) || warn "kid exited $?";
- } else { # child
- ($EUID, $EGID) = ($UID, $GID); # suid progs only
- open (FILE, "> /safe/file")
- || die "can't open /safe/file: $!";
- while (<STDIN>) {
- print FILE; # child's STDIN is parent's KID
- }
- exit; # don't forget this
- }
-
-Another common use for this construct is when you need to execute
-something without the shell's interference. With system(), it's
-straightforward, but you can't use a pipe open or backticks safely.
-That's because there's no way to stop the shell from getting its hands on
-your arguments. Instead, use lower-level control to call exec() directly.
-
-Here's a safe backtick or pipe open for read:
-
- # add error processing as above
- $pid = open(KID_TO_READ, "-|");
-
- if ($pid) { # parent
- while (<KID_TO_READ>) {
- # do something interesting
- }
- close(KID_TO_READ) || warn "kid exited $?";
-
- } else { # child
- ($EUID, $EGID) = ($UID, $GID); # suid only
- exec($program, @options, @args)
- || die "can't exec program: $!";
- # NOTREACHED
- }
-
-
-And here's a safe pipe open for writing:
-
- # add error processing as above
- $pid = open(KID_TO_WRITE, "|-");
- $SIG{ALRM} = sub { die "whoops, $program pipe broke" };
-
- if ($pid) { # parent
- for (@data) {
- print KID_TO_WRITE;
- }
- close(KID_TO_WRITE) || warn "kid exited $?";
-
- } else { # child
- ($EUID, $EGID) = ($UID, $GID);
- exec($program, @options, @args)
- || die "can't exec program: $!";
- # NOTREACHED
- }
-
-Note that these operations are full Unix forks, which means they may not be
-correctly implemented on alien systems. Additionally, these are not true
-multithreading. If you'd like to learn more about threading, see the
-F<modules> file mentioned below in the SEE ALSO section.
-
-=head2 Bidirectional Communication with Another Process
-
-While this works reasonably well for unidirectional communication, what
-about bidirectional communication? The obvious thing you'd like to do
-doesn't actually work:
-
- open(PROG_FOR_READING_AND_WRITING, "| some program |")
-
-and if you forget to use the C<use warnings> pragma or the B<-w> flag,
-then you'll miss out entirely on the diagnostic message:
-
- Can't do bidirectional pipe at -e line 1.
-
-If you really want to, you can use the standard open2() library function
-to catch both ends. There's also an open3() for tridirectional I/O so you
-can also catch your child's STDERR, but doing so would then require an
-awkward select() loop and wouldn't allow you to use normal Perl input
-operations.
-
-If you look at its source, you'll see that open2() uses low-level
-primitives like Unix pipe() and exec() calls to create all the connections.
-While it might have been slightly more efficient by using socketpair(), it
-would have then been even less portable than it already is. The open2()
-and open3() functions are unlikely to work anywhere except on a Unix
-system or some other one purporting to be POSIX compliant.
-
-Here's an example of using open2():
-
- use FileHandle;
- use IPC::Open2;
- $pid = open2(*Reader, *Writer, "cat -u -n" );
- print Writer "stuff\n";
- $got = <Reader>;
-
-The problem with this is that Unix buffering is really going to
-ruin your day. Even though your C<Writer> filehandle is auto-flushed,
-and the process on the other end will get your data in a timely manner,
-you can't usually do anything to force it to give it back to you
-in a similarly quick fashion. In this case, we could, because we
-gave I<cat> a B<-u> flag to make it unbuffered. But very few Unix
-commands are designed to operate over pipes, so this seldom works
-unless you yourself wrote the program on the other end of the
-double-ended pipe.
-
-A solution to this is the nonstandard F<Comm.pl> library. It uses
-pseudo-ttys to make your program behave more reasonably:
-
- require 'Comm.pl';
- $ph = open_proc('cat -n');
- for (1..10) {
- print $ph "a line\n";
- print "got back ", scalar <$ph>;
- }
-
-This way you don't have to have control over the source code of the
-program you're using. The F<Comm> library also has expect()
-and interact() functions. Find the library (and we hope its
-successor F<IPC::Chat>) at your nearest CPAN archive as detailed
-in the SEE ALSO section below.
-
-The newer Expect.pm module from CPAN also addresses this kind of thing.
-This module requires two other modules from CPAN: IO::Pty and IO::Stty.
-It sets up a pseudo-terminal to interact with programs that insist on
-using talking to the terminal device driver. If your system is
-amongst those supported, this may be your best bet.
-
-=head2 Bidirectional Communication with Yourself
-
-If you want, you may make low-level pipe() and fork()
-to stitch this together by hand. This example only
-talks to itself, but you could reopen the appropriate
-handles to STDIN and STDOUT and call other processes.
-
- #!/usr/bin/perl -w
- # pipe1 - bidirectional communication using two pipe pairs
- # designed for the socketpair-challenged
- use IO::Handle; # thousands of lines just for autoflush :-(
- pipe(PARENT_RDR, CHILD_WTR); # XXX: failure?
- pipe(CHILD_RDR, PARENT_WTR); # XXX: failure?
- CHILD_WTR->autoflush(1);
- PARENT_WTR->autoflush(1);
-
- if ($pid = fork) {
- close PARENT_RDR; close PARENT_WTR;
- print CHILD_WTR "Parent Pid $$ is sending this\n";
- chomp($line = <CHILD_RDR>);
- print "Parent Pid $$ just read this: `$line'\n";
- close CHILD_RDR; close CHILD_WTR;
- waitpid($pid,0);
- } else {
- die "cannot fork: $!" unless defined $pid;
- close CHILD_RDR; close CHILD_WTR;
- chomp($line = <PARENT_RDR>);
- print "Child Pid $$ just read this: `$line'\n";
- print PARENT_WTR "Child Pid $$ is sending this\n";
- close PARENT_RDR; close PARENT_WTR;
- exit;
- }
-
-But you don't actually have to make two pipe calls. If you
-have the socketpair() system call, it will do this all for you.
-
- #!/usr/bin/perl -w
- # pipe2 - bidirectional communication using socketpair
- # "the best ones always go both ways"
-
- use Socket;
- use IO::Handle; # thousands of lines just for autoflush :-(
- # We say AF_UNIX because although *_LOCAL is the
- # POSIX 1003.1g form of the constant, many machines
- # still don't have it.
- socketpair(CHILD, PARENT, AF_UNIX, SOCK_STREAM, PF_UNSPEC)
- or die "socketpair: $!";
-
- CHILD->autoflush(1);
- PARENT->autoflush(1);
-
- if ($pid = fork) {
- close PARENT;
- print CHILD "Parent Pid $$ is sending this\n";
- chomp($line = <CHILD>);
- print "Parent Pid $$ just read this: `$line'\n";
- close CHILD;
- waitpid($pid,0);
- } else {
- die "cannot fork: $!" unless defined $pid;
- close CHILD;
- chomp($line = <PARENT>);
- print "Child Pid $$ just read this: `$line'\n";
- print PARENT "Child Pid $$ is sending this\n";
- close PARENT;
- exit;
- }
-
-=head1 Sockets: Client/Server Communication
-
-While not limited to Unix-derived operating systems (e.g., WinSock on PCs
-provides socket support, as do some VMS libraries), you may not have
-sockets on your system, in which case this section probably isn't going to do
-you much good. With sockets, you can do both virtual circuits (i.e., TCP
-streams) and datagrams (i.e., UDP packets). You may be able to do even more
-depending on your system.
-
-The Perl function calls for dealing with sockets have the same names as
-the corresponding system calls in C, but their arguments tend to differ
-for two reasons: first, Perl filehandles work differently than C file
-descriptors. Second, Perl already knows the length of its strings, so you
-don't need to pass that information.
-
-One of the major problems with old socket code in Perl was that it used
-hard-coded values for some of the constants, which severely hurt
-portability. If you ever see code that does anything like explicitly
-setting C<$AF_INET = 2>, you know you're in for big trouble: An
-immeasurably superior approach is to use the C<Socket> module, which more
-reliably grants access to various constants and functions you'll need.
-
-If you're not writing a server/client for an existing protocol like
-NNTP or SMTP, you should give some thought to how your server will
-know when the client has finished talking, and vice-versa. Most
-protocols are based on one-line messages and responses (so one party
-knows the other has finished when a "\n" is received) or multi-line
-messages and responses that end with a period on an empty line
-("\n.\n" terminates a message/response).
-
-=head2 Internet Line Terminators
-
-The Internet line terminator is "\015\012". Under ASCII variants of
-Unix, that could usually be written as "\r\n", but under other systems,
-"\r\n" might at times be "\015\015\012", "\012\012\015", or something
-completely different. The standards specify writing "\015\012" to be
-conformant (be strict in what you provide), but they also recommend
-accepting a lone "\012" on input (but be lenient in what you require).
-We haven't always been very good about that in the code in this manpage,
-but unless you're on a Mac, you'll probably be ok.
-
-=head2 Internet TCP Clients and Servers
-
-Use Internet-domain sockets when you want to do client-server
-communication that might extend to machines outside of your own system.
-
-Here's a sample TCP client using Internet-domain sockets:
-
- #!/usr/bin/perl -w
- use strict;
- use Socket;
- my ($remote,$port, $iaddr, $paddr, $proto, $line);
-
- $remote = shift || 'localhost';
- $port = shift || 2345; # random port
- if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
- die "No port" unless $port;
- $iaddr = inet_aton($remote) || die "no host: $remote";
- $paddr = sockaddr_in($port, $iaddr);
-
- $proto = getprotobyname('tcp');
- socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
- connect(SOCK, $paddr) || die "connect: $!";
- while (defined($line = <SOCK>)) {
- print $line;
- }
-
- close (SOCK) || die "close: $!";
- exit;
-
-And here's a corresponding server to go along with it. We'll
-leave the address as INADDR_ANY so that the kernel can choose
-the appropriate interface on multihomed hosts. If you want sit
-on a particular interface (like the external side of a gateway
-or firewall machine), you should fill this in with your real address
-instead.
-
- #!/usr/bin/perl -Tw
- use strict;
- BEGIN { $ENV{PATH} = '/usr/ucb:/bin' }
- use Socket;
- use Carp;
- my $EOL = "\015\012";
-
- sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n" }
-
- my $port = shift || 2345;
- my $proto = getprotobyname('tcp');
-
- ($port) = $port =~ /^(\d+)$/ or die "invalid port";
-
- socket(Server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
- setsockopt(Server, SOL_SOCKET, SO_REUSEADDR,
- pack("l", 1)) || die "setsockopt: $!";
- bind(Server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
- listen(Server,SOMAXCONN) || die "listen: $!";
-
- logmsg "server started on port $port";
-
- my $paddr;
-
- $SIG{CHLD} = \&REAPER;
-
- for ( ; $paddr = accept(Client,Server); close Client) {
- my($port,$iaddr) = sockaddr_in($paddr);
- my $name = gethostbyaddr($iaddr,AF_INET);
-
- logmsg "connection from $name [",
- inet_ntoa($iaddr), "]
- at port $port";
-
- print Client "Hello there, $name, it's now ",
- scalar localtime, $EOL;
- }
-
-And here's a multithreaded version. It's multithreaded in that
-like most typical servers, it spawns (forks) a slave server to
-handle the client request so that the master server can quickly
-go back to service a new client.
-
- #!/usr/bin/perl -Tw
- use strict;
- BEGIN { $ENV{PATH} = '/usr/ucb:/bin' }
- use Socket;
- use Carp;
- my $EOL = "\015\012";
-
- sub spawn; # forward declaration
- sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n" }
-
- my $port = shift || 2345;
- my $proto = getprotobyname('tcp');
-
- ($port) = $port =~ /^(\d+)$/ or die "invalid port";
-
- socket(Server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
- setsockopt(Server, SOL_SOCKET, SO_REUSEADDR,
- pack("l", 1)) || die "setsockopt: $!";
- bind(Server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
- listen(Server,SOMAXCONN) || die "listen: $!";
-
- logmsg "server started on port $port";
-
- my $waitedpid = 0;
- my $paddr;
-
- sub REAPER {
- $waitedpid = wait;
- $SIG{CHLD} = \&REAPER; # loathe sysV
- logmsg "reaped $waitedpid" . ($? ? " with exit $?" : '');
- }
-
- $SIG{CHLD} = \&REAPER;
-
- for ( $waitedpid = 0;
- ($paddr = accept(Client,Server)) || $waitedpid;
- $waitedpid = 0, close Client)
- {
- next if $waitedpid and not $paddr;
- my($port,$iaddr) = sockaddr_in($paddr);
- my $name = gethostbyaddr($iaddr,AF_INET);
-
- logmsg "connection from $name [",
- inet_ntoa($iaddr), "]
- at port $port";
-
- spawn sub {
- $|=1;
- print "Hello there, $name, it's now ", scalar localtime, $EOL;
- exec '/usr/games/fortune' # XXX: `wrong' line terminators
- or confess "can't exec fortune: $!";
- };
-
- }
-
- sub spawn {
- my $coderef = shift;
-
- unless (@_ == 0 && $coderef && ref($coderef) eq 'CODE') {
- confess "usage: spawn CODEREF";
- }
-
- my $pid;
- if (!defined($pid = fork)) {
- logmsg "cannot fork: $!";
- return;
- } elsif ($pid) {
- logmsg "begat $pid";
- return; # I'm the parent
- }
- # else I'm the child -- go spawn
-
- open(STDIN, "<&Client") || die "can't dup client to stdin";
- open(STDOUT, ">&Client") || die "can't dup client to stdout";
- ## open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr";
- exit &$coderef();
- }
-
-This server takes the trouble to clone off a child version via fork() for
-each incoming request. That way it can handle many requests at once,
-which you might not always want. Even if you don't fork(), the listen()
-will allow that many pending connections. Forking servers have to be
-particularly careful about cleaning up their dead children (called
-"zombies" in Unix parlance), because otherwise you'll quickly fill up your
-process table.
-
-We suggest that you use the B<-T> flag to use taint checking (see L<perlsec>)
-even if we aren't running setuid or setgid. This is always a good idea
-for servers and other programs run on behalf of someone else (like CGI
-scripts), because it lessens the chances that people from the outside will
-be able to compromise your system.
-
-Let's look at another TCP client. This one connects to the TCP "time"
-service on a number of different machines and shows how far their clocks
-differ from the system on which it's being run:
-
- #!/usr/bin/perl -w
- use strict;
- use Socket;
-
- my $SECS_of_70_YEARS = 2208988800;
- sub ctime { scalar localtime(shift) }
-
- my $iaddr = gethostbyname('localhost');
- my $proto = getprotobyname('tcp');
- my $port = getservbyname('time', 'tcp');
- my $paddr = sockaddr_in(0, $iaddr);
- my($host);
-
- $| = 1;
- printf "%-24s %8s %s\n", "localhost", 0, ctime(time());
-
- foreach $host (@ARGV) {
- printf "%-24s ", $host;
- my $hisiaddr = inet_aton($host) || die "unknown host";
- my $hispaddr = sockaddr_in($port, $hisiaddr);
- socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
- connect(SOCKET, $hispaddr) || die "bind: $!";
- my $rtime = ' ';
- read(SOCKET, $rtime, 4);
- close(SOCKET);
- my $histime = unpack("N", $rtime) - $SECS_of_70_YEARS ;
- printf "%8d %s\n", $histime - time, ctime($histime);
- }
-
-=head2 Unix-Domain TCP Clients and Servers
-
-That's fine for Internet-domain clients and servers, but what about local
-communications? While you can use the same setup, sometimes you don't
-want to. Unix-domain sockets are local to the current host, and are often
-used internally to implement pipes. Unlike Internet domain sockets, Unix
-domain sockets can show up in the file system with an ls(1) listing.
-
- % ls -l /dev/log
- srw-rw-rw- 1 root 0 Oct 31 07:23 /dev/log
-
-You can test for these with Perl's B<-S> file test:
-
- unless ( -S '/dev/log' ) {
- die "something's wicked with the log system";
- }
-
-Here's a sample Unix-domain client:
-
- #!/usr/bin/perl -w
- use Socket;
- use strict;
- my ($rendezvous, $line);
-
- $rendezvous = shift || '/tmp/catsock';
- socket(SOCK, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!";
- connect(SOCK, sockaddr_un($rendezvous)) || die "connect: $!";
- while (defined($line = <SOCK>)) {
- print $line;
- }
- exit;
-
-And here's a corresponding server. You don't have to worry about silly
-network terminators here because Unix domain sockets are guaranteed
-to be on the localhost, and thus everything works right.
-
- #!/usr/bin/perl -Tw
- use strict;
- use Socket;
- use Carp;
-
- BEGIN { $ENV{PATH} = '/usr/ucb:/bin' }
- sub spawn; # forward declaration
- sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n" }
-
- my $NAME = '/tmp/catsock';
- my $uaddr = sockaddr_un($NAME);
- my $proto = getprotobyname('tcp');
-
- socket(Server,PF_UNIX,SOCK_STREAM,0) || die "socket: $!";
- unlink($NAME);
- bind (Server, $uaddr) || die "bind: $!";
- listen(Server,SOMAXCONN) || die "listen: $!";
-
- logmsg "server started on $NAME";
-
- my $waitedpid;
-
- sub REAPER {
- $waitedpid = wait;
- $SIG{CHLD} = \&REAPER; # loathe sysV
- logmsg "reaped $waitedpid" . ($? ? " with exit $?" : '');
- }
-
- $SIG{CHLD} = \&REAPER;
-
-
- for ( $waitedpid = 0;
- accept(Client,Server) || $waitedpid;
- $waitedpid = 0, close Client)
- {
- next if $waitedpid;
- logmsg "connection on $NAME";
- spawn sub {
- print "Hello there, it's now ", scalar localtime, "\n";
- exec '/usr/games/fortune' or die "can't exec fortune: $!";
- };
- }
-
- sub spawn {
- my $coderef = shift;
-
- unless (@_ == 0 && $coderef && ref($coderef) eq 'CODE') {
- confess "usage: spawn CODEREF";
- }
-
- my $pid;
- if (!defined($pid = fork)) {
- logmsg "cannot fork: $!";
- return;
- } elsif ($pid) {
- logmsg "begat $pid";
- return; # I'm the parent
- }
- # else I'm the child -- go spawn
-
- open(STDIN, "<&Client") || die "can't dup client to stdin";
- open(STDOUT, ">&Client") || die "can't dup client to stdout";
- ## open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr";
- exit &$coderef();
- }
-
-As you see, it's remarkably similar to the Internet domain TCP server, so
-much so, in fact, that we've omitted several duplicate functions--spawn(),
-logmsg(), ctime(), and REAPER()--which are exactly the same as in the
-other server.
-
-So why would you ever want to use a Unix domain socket instead of a
-simpler named pipe? Because a named pipe doesn't give you sessions. You
-can't tell one process's data from another's. With socket programming,
-you get a separate session for each client: that's why accept() takes two
-arguments.
-
-For example, let's say that you have a long running database server daemon
-that you want folks from the World Wide Web to be able to access, but only
-if they go through a CGI interface. You'd have a small, simple CGI
-program that does whatever checks and logging you feel like, and then acts
-as a Unix-domain client and connects to your private server.
-
-=head1 TCP Clients with IO::Socket
-
-For those preferring a higher-level interface to socket programming, the
-IO::Socket module provides an object-oriented approach. IO::Socket is
-included as part of the standard Perl distribution as of the 5.004
-release. If you're running an earlier version of Perl, just fetch
-IO::Socket from CPAN, where you'll also find modules providing easy
-interfaces to the following systems: DNS, FTP, Ident (RFC 931), NIS and
-NISPlus, NNTP, Ping, POP3, SMTP, SNMP, SSLeay, Telnet, and Time--just
-to name a few.
-
-=head2 A Simple Client
-
-Here's a client that creates a TCP connection to the "daytime"
-service at port 13 of the host name "localhost" and prints out everything
-that the server there cares to provide.
-
- #!/usr/bin/perl -w
- use IO::Socket;
- $remote = IO::Socket::INET->new(
- Proto => "tcp",
- PeerAddr => "localhost",
- PeerPort => "daytime(13)",
- )
- or die "cannot connect to daytime port at localhost";
- while ( <$remote> ) { print }
-
-When you run this program, you should get something back that
-looks like this:
-
- Wed May 14 08:40:46 MDT 1997
-
-Here are what those parameters to the C<new> constructor mean:
-
-=over 4
-
-=item C<Proto>
-
-This is which protocol to use. In this case, the socket handle returned
-will be connected to a TCP socket, because we want a stream-oriented
-connection, that is, one that acts pretty much like a plain old file.
-Not all sockets are this of this type. For example, the UDP protocol
-can be used to make a datagram socket, used for message-passing.
-
-=item C<PeerAddr>
-
-This is the name or Internet address of the remote host the server is
-running on. We could have specified a longer name like C<"www.perl.com">,
-or an address like C<"204.148.40.9">. For demonstration purposes, we've
-used the special hostname C<"localhost">, which should always mean the
-current machine you're running on. The corresponding Internet address
-for localhost is C<"127.1">, if you'd rather use that.
-
-=item C<PeerPort>
-
-This is the service name or port number we'd like to connect to.
-We could have gotten away with using just C<"daytime"> on systems with a
-well-configured system services file,[FOOTNOTE: The system services file
-is in I</etc/services> under Unix] but just in case, we've specified the
-port number (13) in parentheses. Using just the number would also have
-worked, but constant numbers make careful programmers nervous.
-
-=back
-
-Notice how the return value from the C<new> constructor is used as
-a filehandle in the C<while> loop? That's what's called an indirect
-filehandle, a scalar variable containing a filehandle. You can use
-it the same way you would a normal filehandle. For example, you
-can read one line from it this way:
-
- $line = <$handle>;
-
-all remaining lines from is this way:
-
- @lines = <$handle>;
-
-and send a line of data to it this way:
-
- print $handle "some data\n";
-
-=head2 A Webget Client
-
-Here's a simple client that takes a remote host to fetch a document
-from, and then a list of documents to get from that host. This is a
-more interesting client than the previous one because it first sends
-something to the server before fetching the server's response.
-
- #!/usr/bin/perl -w
- use IO::Socket;
- unless (@ARGV > 1) { die "usage: $0 host document ..." }
- $host = shift(@ARGV);
- $EOL = "\015\012";
- $BLANK = $EOL x 2;
- foreach $document ( @ARGV ) {
- $remote = IO::Socket::INET->new( Proto => "tcp",
- PeerAddr => $host,
- PeerPort => "http(80)",
- );
- unless ($remote) { die "cannot connect to http daemon on $host" }
- $remote->autoflush(1);
- print $remote "GET $document HTTP/1.0" . $BLANK;
- while ( <$remote> ) { print }
- close $remote;
- }
-
-The web server handing the "http" service, which is assumed to be at
-its standard port, number 80. If the web server you're trying to
-connect to is at a different port (like 1080 or 8080), you should specify
-as the named-parameter pair, C<< PeerPort => 8080 >>. The C<autoflush>
-method is used on the socket because otherwise the system would buffer
-up the output we sent it. (If you're on a Mac, you'll also need to
-change every C<"\n"> in your code that sends data over the network to
-be a C<"\015\012"> instead.)
-
-Connecting to the server is only the first part of the process: once you
-have the connection, you have to use the server's language. Each server
-on the network has its own little command language that it expects as
-input. The string that we send to the server starting with "GET" is in
-HTTP syntax. In this case, we simply request each specified document.
-Yes, we really are making a new connection for each document, even though
-it's the same host. That's the way you always used to have to speak HTTP.
-Recent versions of web browsers may request that the remote server leave
-the connection open a little while, but the server doesn't have to honor
-such a request.
-
-Here's an example of running that program, which we'll call I<webget>:
-
- % webget www.perl.com /guanaco.html
- HTTP/1.1 404 File Not Found
- Date: Thu, 08 May 1997 18:02:32 GMT
- Server: Apache/1.2b6
- Connection: close
- Content-type: text/html
-
- <HEAD><TITLE>404 File Not Found</TITLE></HEAD>
- <BODY><H1>File Not Found</H1>
- The requested URL /guanaco.html was not found on this server.<P>
- </BODY>
-
-Ok, so that's not very interesting, because it didn't find that
-particular document. But a long response wouldn't have fit on this page.
-
-For a more fully-featured version of this program, you should look to
-the I<lwp-request> program included with the LWP modules from CPAN.
-
-=head2 Interactive Client with IO::Socket
-
-Well, that's all fine if you want to send one command and get one answer,
-but what about setting up something fully interactive, somewhat like
-the way I<telnet> works? That way you can type a line, get the answer,
-type a line, get the answer, etc.
-
-This client is more complicated than the two we've done so far, but if
-you're on a system that supports the powerful C<fork> call, the solution
-isn't that rough. Once you've made the connection to whatever service
-you'd like to chat with, call C<fork> to clone your process. Each of
-these two identical process has a very simple job to do: the parent
-copies everything from the socket to standard output, while the child
-simultaneously copies everything from standard input to the socket.
-To accomplish the same thing using just one process would be I<much>
-harder, because it's easier to code two processes to do one thing than it
-is to code one process to do two things. (This keep-it-simple principle
-a cornerstones of the Unix philosophy, and good software engineering as
-well, which is probably why it's spread to other systems.)
-
-Here's the code:
-
- #!/usr/bin/perl -w
- use strict;
- use IO::Socket;
- my ($host, $port, $kidpid, $handle, $line);
-
- unless (@ARGV == 2) { die "usage: $0 host port" }
- ($host, $port) = @ARGV;
-
- # create a tcp connection to the specified host and port
- $handle = IO::Socket::INET->new(Proto => "tcp",
- PeerAddr => $host,
- PeerPort => $port)
- or die "can't connect to port $port on $host: $!";
-
- $handle->autoflush(1); # so output gets there right away
- print STDERR "[Connected to $host:$port]\n";
-
- # split the program into two processes, identical twins
- die "can't fork: $!" unless defined($kidpid = fork());
-
- # the if{} block runs only in the parent process
- if ($kidpid) {
- # copy the socket to standard output
- while (defined ($line = <$handle>)) {
- print STDOUT $line;
- }
- kill("TERM", $kidpid); # send SIGTERM to child
- }
- # the else{} block runs only in the child process
- else {
- # copy standard input to the socket
- while (defined ($line = <STDIN>)) {
- print $handle $line;
- }
- }
-
-The C<kill> function in the parent's C<if> block is there to send a
-signal to our child process (current running in the C<else> block)
-as soon as the remote server has closed its end of the connection.
-
-If the remote server sends data a byte at time, and you need that
-data immediately without waiting for a newline (which might not happen),
-you may wish to replace the C<while> loop in the parent with the
-following:
-
- my $byte;
- while (sysread($handle, $byte, 1) == 1) {
- print STDOUT $byte;
- }
-
-Making a system call for each byte you want to read is not very efficient
-(to put it mildly) but is the simplest to explain and works reasonably
-well.
-
-=head1 TCP Servers with IO::Socket
-
-As always, setting up a server is little bit more involved than running a client.
-The model is that the server creates a special kind of socket that
-does nothing but listen on a particular port for incoming connections.
-It does this by calling the C<< IO::Socket::INET->new() >> method with
-slightly different arguments than the client did.
-
-=over 4
-
-=item Proto
-
-This is which protocol to use. Like our clients, we'll
-still specify C<"tcp"> here.
-
-=item LocalPort
-
-We specify a local
-port in the C<LocalPort> argument, which we didn't do for the client.
-This is service name or port number for which you want to be the
-server. (Under Unix, ports under 1024 are restricted to the
-superuser.) In our sample, we'll use port 9000, but you can use
-any port that's not currently in use on your system. If you try
-to use one already in used, you'll get an "Address already in use"
-message. Under Unix, the C<netstat -a> command will show
-which services current have servers.
-
-=item Listen
-
-The C<Listen> parameter is set to the maximum number of
-pending connections we can accept until we turn away incoming clients.
-Think of it as a call-waiting queue for your telephone.
-The low-level Socket module has a special symbol for the system maximum, which
-is SOMAXCONN.
-
-=item Reuse
-
-The C<Reuse> parameter is needed so that we restart our server
-manually without waiting a few minutes to allow system buffers to
-clear out.
-
-=back
-
-Once the generic server socket has been created using the parameters
-listed above, the server then waits for a new client to connect
-to it. The server blocks in the C<accept> method, which eventually an
-bidirectional connection to the remote client. (Make sure to autoflush
-this handle to circumvent buffering.)
-
-To add to user-friendliness, our server prompts the user for commands.
-Most servers don't do this. Because of the prompt without a newline,
-you'll have to use the C<sysread> variant of the interactive client above.
-
-This server accepts one of five different commands, sending output
-back to the client. Note that unlike most network servers, this one
-only handles one incoming client at a time. Multithreaded servers are
-covered in Chapter 6 of the Camel.
-
-Here's the code. We'll
-
- #!/usr/bin/perl -w
- use IO::Socket;
- use Net::hostent; # for OO version of gethostbyaddr
-
- $PORT = 9000; # pick something not in use
-
- $server = IO::Socket::INET->new( Proto => 'tcp',
- LocalPort => $PORT,
- Listen => SOMAXCONN,
- Reuse => 1);
-
- die "can't setup server" unless $server;
- print "[Server $0 accepting clients]\n";
-
- while ($client = $server->accept()) {
- $client->autoflush(1);
- print $client "Welcome to $0; type help for command list.\n";
- $hostinfo = gethostbyaddr($client->peeraddr);
- printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost;
- print $client "Command? ";
- while ( <$client>) {
- next unless /\S/; # blank line
- if (/quit|exit/i) { last; }
- elsif (/date|time/i) { printf $client "%s\n", scalar localtime; }
- elsif (/who/i ) { print $client `who 2>&1`; }
- elsif (/cookie/i ) { print $client `/usr/games/fortune 2>&1`; }
- elsif (/motd/i ) { print $client `cat /etc/motd 2>&1`; }
- else {
- print $client "Commands: quit date who cookie motd\n";
- }
- } continue {
- print $client "Command? ";
- }
- close $client;
- }
-
-=head1 UDP: Message Passing
-
-Another kind of client-server setup is one that uses not connections, but
-messages. UDP communications involve much lower overhead but also provide
-less reliability, as there are no promises that messages will arrive at
-all, let alone in order and unmangled. Still, UDP offers some advantages
-over TCP, including being able to "broadcast" or "multicast" to a whole
-bunch of destination hosts at once (usually on your local subnet). If you
-find yourself overly concerned about reliability and start building checks
-into your message system, then you probably should use just TCP to start
-with.
-
-Note that UDP datagrams are I<not> a bytestream and should not be treated
-as such. This makes using I/O mechanisms with internal buffering
-like stdio (i.e. print() and friends) especially cumbersome. Use syswrite(),
-or better send(), like in the example below.
-
-Here's a UDP program similar to the sample Internet TCP client given
-earlier. However, instead of checking one host at a time, the UDP version
-will check many of them asynchronously by simulating a multicast and then
-using select() to do a timed-out wait for I/O. To do something similar
-with TCP, you'd have to use a different socket handle for each host.
-
- #!/usr/bin/perl -w
- use strict;
- use Socket;
- use Sys::Hostname;
-
- my ( $count, $hisiaddr, $hispaddr, $histime,
- $host, $iaddr, $paddr, $port, $proto,
- $rin, $rout, $rtime, $SECS_of_70_YEARS);
-
- $SECS_of_70_YEARS = 2208988800;
-
- $iaddr = gethostbyname(hostname());
- $proto = getprotobyname('udp');
- $port = getservbyname('time', 'udp');
- $paddr = sockaddr_in(0, $iaddr); # 0 means let kernel pick
-
- socket(SOCKET, PF_INET, SOCK_DGRAM, $proto) || die "socket: $!";
- bind(SOCKET, $paddr) || die "bind: $!";
-
- $| = 1;
- printf "%-12s %8s %s\n", "localhost", 0, scalar localtime time;
- $count = 0;
- for $host (@ARGV) {
- $count++;
- $hisiaddr = inet_aton($host) || die "unknown host";
- $hispaddr = sockaddr_in($port, $hisiaddr);
- defined(send(SOCKET, 0, 0, $hispaddr)) || die "send $host: $!";
- }
-
- $rin = '';
- vec($rin, fileno(SOCKET), 1) = 1;
-
- # timeout after 10.0 seconds
- while ($count && select($rout = $rin, undef, undef, 10.0)) {
- $rtime = '';
- ($hispaddr = recv(SOCKET, $rtime, 4, 0)) || die "recv: $!";
- ($port, $hisiaddr) = sockaddr_in($hispaddr);
- $host = gethostbyaddr($hisiaddr, AF_INET);
- $histime = unpack("N", $rtime) - $SECS_of_70_YEARS ;
- printf "%-12s ", $host;
- printf "%8d %s\n", $histime - time, scalar localtime($histime);
- $count--;
- }
-
-Note that this example does not include any retries and may consequently
-fail to contact a reachable host. The most prominent reason for this
-is congestion of the queues on the sending host if the number of
-list of hosts to contact is sufficiently large.
-
-=head1 SysV IPC
-
-While System V IPC isn't so widely used as sockets, it still has some
-interesting uses. You can't, however, effectively use SysV IPC or
-Berkeley mmap() to have shared memory so as to share a variable amongst
-several processes. That's because Perl would reallocate your string when
-you weren't wanting it to.
-
-Here's a small example showing shared memory usage.
-
- use IPC::SysV qw(IPC_PRIVATE IPC_RMID S_IRWXU);
-
- $size = 2000;
- $id = shmget(IPC_PRIVATE, $size, S_IRWXU) || die "$!";
- print "shm key $id\n";
-
- $message = "Message #1";
- shmwrite($id, $message, 0, 60) || die "$!";
- print "wrote: '$message'\n";
- shmread($id, $buff, 0, 60) || die "$!";
- print "read : '$buff'\n";
-
- # the buffer of shmread is zero-character end-padded.
- substr($buff, index($buff, "\0")) = '';
- print "un" unless $buff eq $message;
- print "swell\n";
-
- print "deleting shm $id\n";
- shmctl($id, IPC_RMID, 0) || die "$!";
-
-Here's an example of a semaphore:
-
- use IPC::SysV qw(IPC_CREAT);
-
- $IPC_KEY = 1234;
- $id = semget($IPC_KEY, 10, 0666 | IPC_CREAT ) || die "$!";
- print "shm key $id\n";
-
-Put this code in a separate file to be run in more than one process.
-Call the file F<take>:
-
- # create a semaphore
-
- $IPC_KEY = 1234;
- $id = semget($IPC_KEY, 0 , 0 );
- die if !defined($id);
-
- $semnum = 0;
- $semflag = 0;
-
- # 'take' semaphore
- # wait for semaphore to be zero
- $semop = 0;
- $opstring1 = pack("s!s!s!", $semnum, $semop, $semflag);
-
- # Increment the semaphore count
- $semop = 1;
- $opstring2 = pack("s!s!s!", $semnum, $semop, $semflag);
- $opstring = $opstring1 . $opstring2;
-
- semop($id,$opstring) || die "$!";
-
-Put this code in a separate file to be run in more than one process.
-Call this file F<give>:
-
- # 'give' the semaphore
- # run this in the original process and you will see
- # that the second process continues
-
- $IPC_KEY = 1234;
- $id = semget($IPC_KEY, 0, 0);
- die if !defined($id);
-
- $semnum = 0;
- $semflag = 0;
-
- # Decrement the semaphore count
- $semop = -1;
- $opstring = pack("s!s!s!", $semnum, $semop, $semflag);
-
- semop($id,$opstring) || die "$!";
-
-The SysV IPC code above was written long ago, and it's definitely
-clunky looking. For a more modern look, see the IPC::SysV module
-which is included with Perl starting from Perl 5.005.
-
-A small example demonstrating SysV message queues:
-
- use IPC::SysV qw(IPC_PRIVATE IPC_RMID IPC_CREAT S_IRWXU);
-
- my $id = msgget(IPC_PRIVATE, IPC_CREAT | S_IRWXU);
-
- my $sent = "message";
- my $type = 1234;
- my $rcvd;
- my $type_rcvd;
-
- if (defined $id) {
- if (msgsnd($id, pack("l! a*", $type_sent, $sent), 0)) {
- if (msgrcv($id, $rcvd, 60, 0, 0)) {
- ($type_rcvd, $rcvd) = unpack("l! a*", $rcvd);
- if ($rcvd eq $sent) {
- print "okay\n";
- } else {
- print "not okay\n";
- }
- } else {
- die "# msgrcv failed\n";
- }
- } else {
- die "# msgsnd failed\n";
- }
- msgctl($id, IPC_RMID, 0) || die "# msgctl failed: $!\n";
- } else {
- die "# msgget failed\n";
- }
-
-=head1 NOTES
-
-Most of these routines quietly but politely return C<undef> when they
-fail instead of causing your program to die right then and there due to
-an uncaught exception. (Actually, some of the new I<Socket> conversion
-functions croak() on bad arguments.) It is therefore essential to
-check return values from these functions. Always begin your socket
-programs this way for optimal success, and don't forget to add B<-T>
-taint checking flag to the #! line for servers:
-
- #!/usr/bin/perl -Tw
- use strict;
- use sigtrap;
- use Socket;
-
-=head1 BUGS
-
-All these routines create system-specific portability problems. As noted
-elsewhere, Perl is at the mercy of your C libraries for much of its system
-behaviour. It's probably safest to assume broken SysV semantics for
-signals and to stick with simple TCP and UDP socket operations; e.g., don't
-try to pass open file descriptors over a local UDP datagram socket if you
-want your code to stand a chance of being portable.
-
-As mentioned in the signals section, because few vendors provide C
-libraries that are safely re-entrant, the prudent programmer will do
-little else within a handler beyond setting a numeric variable that
-already exists; or, if locked into a slow (restarting) system call,
-using die() to raise an exception and longjmp(3) out. In fact, even
-these may in some cases cause a core dump. It's probably best to avoid
-signals except where they are absolutely inevitable. This
-will be addressed in a future release of Perl.
-
-=head1 AUTHOR
-
-Tom Christiansen, with occasional vestiges of Larry Wall's original
-version and suggestions from the Perl Porters.
-
-=head1 SEE ALSO
-
-There's a lot more to networking than this, but this should get you
-started.
-
-For intrepid programmers, the indispensable textbook is I<Unix Network
-Programming> by W. Richard Stevens (published by Addison-Wesley). Note
-that most books on networking address networking from the perspective of
-a C programmer; translation to Perl is left as an exercise for the reader.
-
-The IO::Socket(3) manpage describes the object library, and the Socket(3)
-manpage describes the low-level interface to sockets. Besides the obvious
-functions in L<perlfunc>, you should also check out the F<modules> file
-at your nearest CPAN site. (See L<perlmodlib> or best yet, the F<Perl
-FAQ> for a description of what CPAN is and where to get it.)
-
-Section 5 of the F<modules> file is devoted to "Networking, Device Control
-(modems), and Interprocess Communication", and contains numerous unbundled
-modules numerous networking modules, Chat and Expect operations, CGI
-programming, DCE, FTP, IPC, NNTP, Proxy, Ptty, RPC, SNMP, SMTP, Telnet,
-Threads, and ToolTalk--just to name a few.
diff --git a/contrib/perl5/pod/perllexwarn.pod b/contrib/perl5/pod/perllexwarn.pod
deleted file mode 100644
index 951a470..0000000
--- a/contrib/perl5/pod/perllexwarn.pod
+++ /dev/null
@@ -1,514 +0,0 @@
-=head1 NAME
-
-perllexwarn - Perl Lexical Warnings
-
-=head1 DESCRIPTION
-
-The C<use warnings> pragma is a replacement for both the command line
-flag B<-w> and the equivalent Perl variable, C<$^W>.
-
-The pragma works just like the existing "strict" pragma.
-This means that the scope of the warning pragma is limited to the
-enclosing block. It also means that the pragma setting will not
-leak across files (via C<use>, C<require> or C<do>). This allows
-authors to independently define the degree of warning checks that will
-be applied to their module.
-
-By default, optional warnings are disabled, so any legacy code that
-doesn't attempt to control the warnings will work unchanged.
-
-All warnings are enabled in a block by either of these:
-
- use warnings ;
- use warnings 'all' ;
-
-Similarly all warnings are disabled in a block by either of these:
-
- no warnings ;
- no warnings 'all' ;
-
-For example, consider the code below:
-
- use warnings ;
- my @a ;
- {
- no warnings ;
- my $b = @a[0] ;
- }
- my $c = @a[0];
-
-The code in the enclosing block has warnings enabled, but the inner
-block has them disabled. In this case that means the assignment to the
-scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]">
-warning, but the assignment to the scalar C<$b> will not.
-
-=head2 Default Warnings and Optional Warnings
-
-Before the introduction of lexical warnings, Perl had two classes of
-warnings: mandatory and optional.
-
-As its name suggests, if your code tripped a mandatory warning, you
-would get a warning whether you wanted it or not.
-For example, the code below would always produce an C<"isn't numeric">
-warning about the "2:".
-
- my $a = "2:" + 3;
-
-With the introduction of lexical warnings, mandatory warnings now become
-I<default> warnings. The difference is that although the previously
-mandatory warnings are still enabled by default, they can then be
-subsequently enabled or disabled with the lexical warning pragma. For
-example, in the code below, an C<"isn't numeric"> warning will only
-be reported for the C<$a> variable.
-
- my $a = "2:" + 3;
- no warnings ;
- my $b = "2:" + 3;
-
-Note that neither the B<-w> flag or the C<$^W> can be used to
-disable/enable default warnings. They are still mandatory in this case.
-
-=head2 What's wrong with B<-w> and C<$^W>
-
-Although very useful, the big problem with using B<-w> on the command
-line to enable warnings is that it is all or nothing. Take the typical
-scenario when you are writing a Perl program. Parts of the code you
-will write yourself, but it's very likely that you will make use of
-pre-written Perl modules. If you use the B<-w> flag in this case, you
-end up enabling warnings in pieces of code that you haven't written.
-
-Similarly, using C<$^W> to either disable or enable blocks of code is
-fundamentally flawed. For a start, say you want to disable warnings in
-a block of code. You might expect this to be enough to do the trick:
-
- {
- local ($^W) = 0 ;
- my $a =+ 2 ;
- my $b ; chop $b ;
- }
-
-When this code is run with the B<-w> flag, a warning will be produced
-for the C<$a> line -- C<"Reversed += operator">.
-
-The problem is that Perl has both compile-time and run-time warnings. To
-disable compile-time warnings you need to rewrite the code like this:
-
- {
- BEGIN { $^W = 0 }
- my $a =+ 2 ;
- my $b ; chop $b ;
- }
-
-The other big problem with C<$^W> is the way you can inadvertently
-change the warning setting in unexpected places in your code. For example,
-when the code below is run (without the B<-w> flag), the second call
-to C<doit> will trip a C<"Use of uninitialized value"> warning, whereas
-the first will not.
-
- sub doit
- {
- my $b ; chop $b ;
- }
-
- doit() ;
-
- {
- local ($^W) = 1 ;
- doit()
- }
-
-This is a side-effect of C<$^W> being dynamically scoped.
-
-Lexical warnings get around these limitations by allowing finer control
-over where warnings can or can't be tripped.
-
-=head2 Controlling Warnings from the Command Line
-
-There are three Command Line flags that can be used to control when
-warnings are (or aren't) produced:
-
-=over 5
-
-=item B<-w>
-
-This is the existing flag. If the lexical warnings pragma is B<not>
-used in any of you code, or any of the modules that you use, this flag
-will enable warnings everywhere. See L<Backward Compatibility> for
-details of how this flag interacts with lexical warnings.
-
-=item B<-W>
-
-If the B<-W> flag is used on the command line, it will enable all warnings
-throughout the program regardless of whether warnings were disabled
-locally using C<no warnings> or C<$^W =0>. This includes all files that get
-included via C<use>, C<require> or C<do>.
-Think of it as the Perl equivalent of the "lint" command.
-
-=item B<-X>
-
-Does the exact opposite to the B<-W> flag, i.e. it disables all warnings.
-
-=back
-
-=head2 Backward Compatibility
-
-If you are used with working with a version of Perl prior to the
-introduction of lexically scoped warnings, or have code that uses both
-lexical warnings and C<$^W>, this section will describe how they interact.
-
-How Lexical Warnings interact with B<-w>/C<$^W>:
-
-=over 5
-
-=item 1.
-
-If none of the three command line flags (B<-w>, B<-W> or B<-X>) that
-control warnings is used and neither C<$^W> or the C<warnings> pragma
-are used, then default warnings will be enabled and optional warnings
-disabled.
-This means that legacy code that doesn't attempt to control the warnings
-will work unchanged.
-
-=item 2.
-
-The B<-w> flag just sets the global C<$^W> variable as in 5.005 -- this
-means that any legacy code that currently relies on manipulating C<$^W>
-to control warning behavior will still work as is.
-
-=item 3.
-
-Apart from now being a boolean, the C<$^W> variable operates in exactly
-the same horrible uncontrolled global way, except that it cannot
-disable/enable default warnings.
-
-=item 4.
-
-If a piece of code is under the control of the C<warnings> pragma,
-both the C<$^W> variable and the B<-w> flag will be ignored for the
-scope of the lexical warning.
-
-=item 5.
-
-The only way to override a lexical warnings setting is with the B<-W>
-or B<-X> command line flags.
-
-=back
-
-The combined effect of 3 & 4 is that it will allow code which uses
-the C<warnings> pragma to control the warning behavior of $^W-type
-code (using a C<local $^W=0>) if it really wants to, but not vice-versa.
-
-=head2 Category Hierarchy
-
-A hierarchy of "categories" have been defined to allow groups of warnings
-to be enabled/disabled in isolation.
-
-The current hierarchy is:
-
- all -+
- |
- +- chmod
- |
- +- closure
- |
- +- exiting
- |
- +- glob
- |
- +- io -----------+
- | |
- | +- closed
- | |
- | +- exec
- | |
- | +- newline
- | |
- | +- pipe
- | |
- | +- unopened
- |
- +- misc
- |
- +- numeric
- |
- +- once
- |
- +- overflow
- |
- +- pack
- |
- +- portable
- |
- +- recursion
- |
- +- redefine
- |
- +- regexp
- |
- +- severe -------+
- | |
- | +- debugging
- | |
- | +- inplace
- | |
- | +- internal
- | |
- | +- malloc
- |
- +- signal
- |
- +- substr
- |
- +- syntax -------+
- | |
- | +- ambiguous
- | |
- | +- bareword
- | |
- | +- deprecated
- | |
- | +- digit
- | |
- | +- parenthesis
- | |
- | +- precedence
- | |
- | +- printf
- | |
- | +- prototype
- | |
- | +- qw
- | |
- | +- reserved
- | |
- | +- semicolon
- |
- +- taint
- |
- +- umask
- |
- +- uninitialized
- |
- +- unpack
- |
- +- untie
- |
- +- utf8
- |
- +- void
- |
- +- y2k
-
-Just like the "strict" pragma any of these categories can be combined
-
- use warnings qw(void redefine) ;
- no warnings qw(io syntax untie) ;
-
-Also like the "strict" pragma, if there is more than one instance of the
-C<warnings> pragma in a given scope the cumulative effect is additive.
-
- use warnings qw(void) ; # only "void" warnings enabled
- ...
- use warnings qw(io) ; # only "void" & "io" warnings enabled
- ...
- no warnings qw(void) ; # only "io" warnings enabled
-
-To determine which category a specific warning has been assigned to see
-L<perldiag>.
-
-=head2 Fatal Warnings
-
-The presence of the word "FATAL" in the category list will escalate any
-warnings detected from the categories specified in the lexical scope
-into fatal errors. In the code below, the use of C<time>, C<length>
-and C<join> can all produce a C<"Useless use of xxx in void context">
-warning.
-
- use warnings ;
-
- time ;
-
- {
- use warnings FATAL => qw(void) ;
- length "abc" ;
- }
-
- join "", 1,2,3 ;
-
- print "done\n" ;
-
-When run it produces this output
-
- Useless use of time in void context at fatal line 3.
- Useless use of length in void context at fatal line 7.
-
-The scope where C<length> is used has escalated the C<void> warnings
-category into a fatal error, so the program terminates immediately it
-encounters the warning.
-
-
-=head2 Reporting Warnings from a Module
-
-The C<warnings> pragma provides a number of functions that are useful for
-module authors. These are used when you want to report a module-specific
-warning to a calling module has enabled warnings via the C<warnings>
-pragma.
-
-Consider the module C<MyMod::Abc> below.
-
- package MyMod::Abc;
-
- use warnings::register;
-
- sub open {
- my $path = shift ;
- if (warnings::enabled() && $path !~ m#^/#) {
- warnings::warn("changing relative path to /tmp/");
- $path = "/tmp/$path" ;
- }
- }
-
- 1 ;
-
-The call to C<warnings::register> will create a new warnings category
-called "MyMod::abc", i.e. the new category name matches the current
-package name. The C<open> function in the module will display a warning
-message if it gets given a relative path as a parameter. This warnings
-will only be displayed if the code that uses C<MyMod::Abc> has actually
-enabled them with the C<warnings> pragma like below.
-
- use MyMod::Abc;
- use warnings 'MyMod::Abc';
- ...
- abc::open("../fred.txt");
-
-It is also possible to test whether the pre-defined warnings categories are
-set in the calling module with the C<warnings::enabled> function. Consider
-this snippet of code:
-
- package MyMod::Abc;
-
- sub open {
- warnings::warnif("deprecated",
- "open is deprecated, use new instead") ;
- new(@_) ;
- }
-
- sub new
- ...
- 1 ;
-
-The function C<open> has been deprecated, so code has been included to
-display a warning message whenever the calling module has (at least) the
-"deprecated" warnings category enabled. Something like this, say.
-
- use warnings 'deprecated';
- use MyMod::Abc;
- ...
- MyMod::Abc::open($filename) ;
-
-Either the C<warnings::warn> or C<warnings::warnif> function should be
-used to actually display the warnings message. This is because they can
-make use of the feature that allows warnings to be escalated into fatal
-errors. So in this case
-
- use MyMod::Abc;
- use warnings FATAL => 'MyMod::Abc';
- ...
- MyMod::Abc::open('../fred.txt');
-
-the C<warnings::warnif> function will detect this and die after
-displaying the warning message.
-
-The three warnings functions, C<warnings::warn>, C<warnings::warnif>
-and C<warnings::enabled> can optionally take an object reference in place
-of a category name. In this case the functions will use the class name
-of the object as the warnings category.
-
-Consider this example:
-
- package Original ;
-
- no warnings ;
- use warnings::register ;
-
- sub new
- {
- my $class = shift ;
- bless [], $class ;
- }
-
- sub check
- {
- my $self = shift ;
- my $value = shift ;
-
- if ($value % 2 && warnings::enabled($self))
- { warnings::warn($self, "Odd numbers are unsafe") }
- }
-
- sub doit
- {
- my $self = shift ;
- my $value = shift ;
- $self->check($value) ;
- # ...
- }
-
- 1 ;
-
- package Derived ;
-
- use warnings::register ;
- use Original ;
- our @ISA = qw( Original ) ;
- sub new
- {
- my $class = shift ;
- bless [], $class ;
- }
-
-
- 1 ;
-
-The code below makes use of both modules, but it only enables warnings from
-C<Derived>.
-
- use Original ;
- use Derived ;
- use warnings 'Derived';
- my $a = new Original ;
- $a->doit(1) ;
- my $b = new Derived ;
- $a->doit(1) ;
-
-When this code is run only the C<Derived> object, C<$b>, will generate
-a warning.
-
- Odd numbers are unsafe at main.pl line 7
-
-Notice also that the warning is reported at the line where the object is first
-used.
-
-=head1 TODO
-
- perl5db.pl
- The debugger saves and restores C<$^W> at runtime. I haven't checked
- whether the debugger will still work with the lexical warnings
- patch applied.
-
- diagnostics.pm
- I *think* I've got diagnostics to work with the lexical warnings
- patch, but there were design decisions made in diagnostics to work
- around the limitations of C<$^W>. Now that those limitations are gone,
- the module should be revisited.
-
- document calling the warnings::* functions from XS
-
-=head1 SEE ALSO
-
-L<warnings>, L<perldiag>.
-
-=head1 AUTHOR
-
-Paul Marquess
diff --git a/contrib/perl5/pod/perllocale.pod b/contrib/perl5/pod/perllocale.pod
deleted file mode 100644
index 9964b33..0000000
--- a/contrib/perl5/pod/perllocale.pod
+++ /dev/null
@@ -1,980 +0,0 @@
-=head1 NAME
-
-perllocale - Perl locale handling (internationalization and localization)
-
-=head1 DESCRIPTION
-
-Perl supports language-specific notions of data such as "is this
-a letter", "what is the uppercase equivalent of this letter", and
-"which of these letters comes first". These are important issues,
-especially for languages other than English--but also for English: it
-would be naE<iuml>ve to imagine that C<A-Za-z> defines all the "letters"
-needed to write in English. Perl is also aware that some character other
-than '.' may be preferred as a decimal point, and that output date
-representations may be language-specific. The process of making an
-application take account of its users' preferences in such matters is
-called B<internationalization> (often abbreviated as B<i18n>); telling
-such an application about a particular set of preferences is known as
-B<localization> (B<l10n>).
-
-Perl can understand language-specific data via the standardized (ISO C,
-XPG4, POSIX 1.c) method called "the locale system". The locale system is
-controlled per application using one pragma, one function call, and
-several environment variables.
-
-B<NOTE>: This feature is new in Perl 5.004, and does not apply unless an
-application specifically requests it--see L<Backward compatibility>.
-The one exception is that write() now B<always> uses the current locale
-- see L<"NOTES">.
-
-=head1 PREPARING TO USE LOCALES
-
-If Perl applications are to understand and present your data
-correctly according a locale of your choice, B<all> of the following
-must be true:
-
-=over 4
-
-=item *
-
-B<Your operating system must support the locale system>. If it does,
-you should find that the setlocale() function is a documented part of
-its C library.
-
-=item *
-
-B<Definitions for locales that you use must be installed>. You, or
-your system administrator, must make sure that this is the case. The
-available locales, the location in which they are kept, and the manner
-in which they are installed all vary from system to system. Some systems
-provide only a few, hard-wired locales and do not allow more to be
-added. Others allow you to add "canned" locales provided by the system
-supplier. Still others allow you or the system administrator to define
-and add arbitrary locales. (You may have to ask your supplier to
-provide canned locales that are not delivered with your operating
-system.) Read your system documentation for further illumination.
-
-=item *
-
-B<Perl must believe that the locale system is supported>. If it does,
-C<perl -V:d_setlocale> will say that the value for C<d_setlocale> is
-C<define>.
-
-=back
-
-If you want a Perl application to process and present your data
-according to a particular locale, the application code should include
-the S<C<use locale>> pragma (see L<The use locale pragma>) where
-appropriate, and B<at least one> of the following must be true:
-
-=over 4
-
-=item *
-
-B<The locale-determining environment variables (see L<"ENVIRONMENT">)
-must be correctly set up> at the time the application is started, either
-by yourself or by whoever set up your system account.
-
-=item *
-
-B<The application must set its own locale> using the method described in
-L<The setlocale function>.
-
-=back
-
-=head1 USING LOCALES
-
-=head2 The use locale pragma
-
-By default, Perl ignores the current locale. The S<C<use locale>>
-pragma tells Perl to use the current locale for some operations:
-
-=over 4
-
-=item *
-
-B<The comparison operators> (C<lt>, C<le>, C<cmp>, C<ge>, and C<gt>) and
-the POSIX string collation functions strcoll() and strxfrm() use
-C<LC_COLLATE>. sort() is also affected if used without an
-explicit comparison function, because it uses C<cmp> by default.
-
-B<Note:> C<eq> and C<ne> are unaffected by locale: they always
-perform a byte-by-byte comparison of their scalar operands. What's
-more, if C<cmp> finds that its operands are equal according to the
-collation sequence specified by the current locale, it goes on to
-perform a byte-by-byte comparison, and only returns I<0> (equal) if the
-operands are bit-for-bit identical. If you really want to know whether
-two strings--which C<eq> and C<cmp> may consider different--are equal
-as far as collation in the locale is concerned, see the discussion in
-L<Category LC_COLLATE: Collation>.
-
-=item *
-
-B<Regular expressions and case-modification functions> (uc(), lc(),
-ucfirst(), and lcfirst()) use C<LC_CTYPE>
-
-=item *
-
-B<The formatting functions> (printf(), sprintf() and write()) use
-C<LC_NUMERIC>
-
-=item *
-
-B<The POSIX date formatting function> (strftime()) uses C<LC_TIME>.
-
-=back
-
-C<LC_COLLATE>, C<LC_CTYPE>, and so on, are discussed further in
-L<LOCALE CATEGORIES>.
-
-The default behavior is restored with the S<C<no locale>> pragma, or
-upon reaching the end of block enclosing C<use locale>.
-
-The string result of any operation that uses locale
-information is tainted, as it is possible for a locale to be
-untrustworthy. See L<"SECURITY">.
-
-=head2 The setlocale function
-
-You can switch locales as often as you wish at run time with the
-POSIX::setlocale() function:
-
- # This functionality not usable prior to Perl 5.004
- require 5.004;
-
- # Import locale-handling tool set from POSIX module.
- # This example uses: setlocale -- the function call
- # LC_CTYPE -- explained below
- use POSIX qw(locale_h);
-
- # query and save the old locale
- $old_locale = setlocale(LC_CTYPE);
-
- setlocale(LC_CTYPE, "fr_CA.ISO8859-1");
- # LC_CTYPE now in locale "French, Canada, codeset ISO 8859-1"
-
- setlocale(LC_CTYPE, "");
- # LC_CTYPE now reset to default defined by LC_ALL/LC_CTYPE/LANG
- # environment variables. See below for documentation.
-
- # restore the old locale
- setlocale(LC_CTYPE, $old_locale);
-
-The first argument of setlocale() gives the B<category>, the second the
-B<locale>. The category tells in what aspect of data processing you
-want to apply locale-specific rules. Category names are discussed in
-L<LOCALE CATEGORIES> and L<"ENVIRONMENT">. The locale is the name of a
-collection of customization information corresponding to a particular
-combination of language, country or territory, and codeset. Read on for
-hints on the naming of locales: not all systems name locales as in the
-example.
-
-If no second argument is provided and the category is something else
-than LC_ALL, the function returns a string naming the current locale
-for the category. You can use this value as the second argument in a
-subsequent call to setlocale().
-
-If no second argument is provided and the category is LC_ALL, the
-result is implementation-dependent. It may be a string of
-concatenated locales names (separator also implementation-dependent)
-or a single locale name. Please consult your L<setlocale(3)> for
-details.
-
-If a second argument is given and it corresponds to a valid locale,
-the locale for the category is set to that value, and the function
-returns the now-current locale value. You can then use this in yet
-another call to setlocale(). (In some implementations, the return
-value may sometimes differ from the value you gave as the second
-argument--think of it as an alias for the value you gave.)
-
-As the example shows, if the second argument is an empty string, the
-category's locale is returned to the default specified by the
-corresponding environment variables. Generally, this results in a
-return to the default that was in force when Perl started up: changes
-to the environment made by the application after startup may or may not
-be noticed, depending on your system's C library.
-
-If the second argument does not correspond to a valid locale, the locale
-for the category is not changed, and the function returns I<undef>.
-
-For further information about the categories, consult L<setlocale(3)>.
-
-=head2 Finding locales
-
-For locales available in your system, consult also L<setlocale(3)> to
-see whether it leads to the list of available locales (search for the
-I<SEE ALSO> section). If that fails, try the following command lines:
-
- locale -a
-
- nlsinfo
-
- ls /usr/lib/nls/loc
-
- ls /usr/lib/locale
-
- ls /usr/lib/nls
-
- ls /usr/share/locale
-
-and see whether they list something resembling these
-
- en_US.ISO8859-1 de_DE.ISO8859-1 ru_RU.ISO8859-5
- en_US.iso88591 de_DE.iso88591 ru_RU.iso88595
- en_US de_DE ru_RU
- en de ru
- english german russian
- english.iso88591 german.iso88591 russian.iso88595
- english.roman8 russian.koi8r
-
-Sadly, even though the calling interface for setlocale() has been
-standardized, names of locales and the directories where the
-configuration resides have not been. The basic form of the name is
-I<language_territory>B<.>I<codeset>, but the latter parts after
-I<language> are not always present. The I<language> and I<country>
-are usually from the standards B<ISO 3166> and B<ISO 639>, the
-two-letter abbreviations for the countries and the languages of the
-world, respectively. The I<codeset> part often mentions some B<ISO
-8859> character set, the Latin codesets. For example, C<ISO 8859-1>
-is the so-called "Western European codeset" that can be used to encode
-most Western European languages adequately. Again, there are several
-ways to write even the name of that one standard. Lamentably.
-
-Two special locales are worth particular mention: "C" and "POSIX".
-Currently these are effectively the same locale: the difference is
-mainly that the first one is defined by the C standard, the second by
-the POSIX standard. They define the B<default locale> in which
-every program starts in the absence of locale information in its
-environment. (The I<default> default locale, if you will.) Its language
-is (American) English and its character codeset ASCII.
-
-B<NOTE>: Not all systems have the "POSIX" locale (not all systems are
-POSIX-conformant), so use "C" when you need explicitly to specify this
-default locale.
-
-=head2 LOCALE PROBLEMS
-
-You may encounter the following warning message at Perl startup:
-
- perl: warning: Setting locale failed.
- perl: warning: Please check that your locale settings:
- LC_ALL = "En_US",
- LANG = (unset)
- are supported and installed on your system.
- perl: warning: Falling back to the standard locale ("C").
-
-This means that your locale settings had LC_ALL set to "En_US" and
-LANG exists but has no value. Perl tried to believe you but could not.
-Instead, Perl gave up and fell back to the "C" locale, the default locale
-that is supposed to work no matter what. This usually means your locale
-settings were wrong, they mention locales your system has never heard
-of, or the locale installation in your system has problems (for example,
-some system files are broken or missing). There are quick and temporary
-fixes to these problems, as well as more thorough and lasting fixes.
-
-=head2 Temporarily fixing locale problems
-
-The two quickest fixes are either to render Perl silent about any
-locale inconsistencies or to run Perl under the default locale "C".
-
-Perl's moaning about locale problems can be silenced by setting the
-environment variable PERL_BADLANG to a zero value, for example "0".
-This method really just sweeps the problem under the carpet: you tell
-Perl to shut up even when Perl sees that something is wrong. Do not
-be surprised if later something locale-dependent misbehaves.
-
-Perl can be run under the "C" locale by setting the environment
-variable LC_ALL to "C". This method is perhaps a bit more civilized
-than the PERL_BADLANG approach, but setting LC_ALL (or
-other locale variables) may affect other programs as well, not just
-Perl. In particular, external programs run from within Perl will see
-these changes. If you make the new settings permanent (read on), all
-programs you run see the changes. See L<ENVIRONMENT> for
-the full list of relevant environment variables and L<USING LOCALES>
-for their effects in Perl. Effects in other programs are
-easily deducible. For example, the variable LC_COLLATE may well affect
-your B<sort> program (or whatever the program that arranges `records'
-alphabetically in your system is called).
-
-You can test out changing these variables temporarily, and if the
-new settings seem to help, put those settings into your shell startup
-files. Consult your local documentation for the exact details. For in
-Bourne-like shells (B<sh>, B<ksh>, B<bash>, B<zsh>):
-
- LC_ALL=en_US.ISO8859-1
- export LC_ALL
-
-This assumes that we saw the locale "en_US.ISO8859-1" using the commands
-discussed above. We decided to try that instead of the above faulty
-locale "En_US"--and in Cshish shells (B<csh>, B<tcsh>)
-
- setenv LC_ALL en_US.ISO8859-1
-
-If you do not know what shell you have, consult your local
-helpdesk or the equivalent.
-
-=head2 Permanently fixing locale problems
-
-The slower but superior fixes are when you may be able to yourself
-fix the misconfiguration of your own environment variables. The
-mis(sing)configuration of the whole system's locales usually requires
-the help of your friendly system administrator.
-
-First, see earlier in this document about L<Finding locales>. That tells
-how to find which locales are really supported--and more importantly,
-installed--on your system. In our example error message, environment
-variables affecting the locale are listed in the order of decreasing
-importance (and unset variables do not matter). Therefore, having
-LC_ALL set to "En_US" must have been the bad choice, as shown by the
-error message. First try fixing locale settings listed first.
-
-Second, if using the listed commands you see something B<exactly>
-(prefix matches do not count and case usually counts) like "En_US"
-without the quotes, then you should be okay because you are using a
-locale name that should be installed and available in your system.
-In this case, see L<Permanently fixing your system's locale configuration>.
-
-=head2 Permanently fixing your system's locale configuration
-
-This is when you see something like:
-
- perl: warning: Please check that your locale settings:
- LC_ALL = "En_US",
- LANG = (unset)
- are supported and installed on your system.
-
-but then cannot see that "En_US" listed by the above-mentioned
-commands. You may see things like "en_US.ISO8859-1", but that isn't
-the same. In this case, try running under a locale
-that you can list and which somehow matches what you tried. The
-rules for matching locale names are a bit vague because
-standardization is weak in this area. See again the
-L<Finding locales> about general rules.
-
-=head2 Fixing system locale configuration
-
-Contact a system administrator (preferably your own) and report the exact
-error message you get, and ask them to read this same documentation you
-are now reading. They should be able to check whether there is something
-wrong with the locale configuration of the system. The L<Finding locales>
-section is unfortunately a bit vague about the exact commands and places
-because these things are not that standardized.
-
-=head2 The localeconv function
-
-The POSIX::localeconv() function allows you to get particulars of the
-locale-dependent numeric formatting information specified by the current
-C<LC_NUMERIC> and C<LC_MONETARY> locales. (If you just want the name of
-the current locale for a particular category, use POSIX::setlocale()
-with a single parameter--see L<The setlocale function>.)
-
- use POSIX qw(locale_h);
-
- # Get a reference to a hash of locale-dependent info
- $locale_values = localeconv();
-
- # Output sorted list of the values
- for (sort keys %$locale_values) {
- printf "%-20s = %s\n", $_, $locale_values->{$_}
- }
-
-localeconv() takes no arguments, and returns B<a reference to> a hash.
-The keys of this hash are variable names for formatting, such as
-C<decimal_point> and C<thousands_sep>. The values are the
-corresponding, er, values. See L<POSIX/localeconv> for a longer
-example listing the categories an implementation might be expected to
-provide; some provide more and others fewer. You don't need an
-explicit C<use locale>, because localeconv() always observes the
-current locale.
-
-Here's a simple-minded example program that rewrites its command-line
-parameters as integers correctly formatted in the current locale:
-
- # See comments in previous example
- require 5.004;
- use POSIX qw(locale_h);
-
- # Get some of locale's numeric formatting parameters
- my ($thousands_sep, $grouping) =
- @{localeconv()}{'thousands_sep', 'grouping'};
-
- # Apply defaults if values are missing
- $thousands_sep = ',' unless $thousands_sep;
-
- # grouping and mon_grouping are packed lists
- # of small integers (characters) telling the
- # grouping (thousand_seps and mon_thousand_seps
- # being the group dividers) of numbers and
- # monetary quantities. The integers' meanings:
- # 255 means no more grouping, 0 means repeat
- # the previous grouping, 1-254 means use that
- # as the current grouping. Grouping goes from
- # right to left (low to high digits). In the
- # below we cheat slightly by never using anything
- # else than the first grouping (whatever that is).
- if ($grouping) {
- @grouping = unpack("C*", $grouping);
- } else {
- @grouping = (3);
- }
-
- # Format command line params for current locale
- for (@ARGV) {
- $_ = int; # Chop non-integer part
- 1 while
- s/(\d)(\d{$grouping[0]}($|$thousands_sep))/$1$thousands_sep$2/;
- print "$_";
- }
- print "\n";
-
-=head1 LOCALE CATEGORIES
-
-The following subsections describe basic locale categories. Beyond these,
-some combination categories allow manipulation of more than one
-basic category at a time. See L<"ENVIRONMENT"> for a discussion of these.
-
-=head2 Category LC_COLLATE: Collation
-
-In the scope of S<C<use locale>>, Perl looks to the C<LC_COLLATE>
-environment variable to determine the application's notions on collation
-(ordering) of characters. For example, 'b' follows 'a' in Latin
-alphabets, but where do 'E<aacute>' and 'E<aring>' belong? And while
-'color' follows 'chocolate' in English, what about in Spanish?
-
-The following collations all make sense and you may meet any of them
-if you "use locale".
-
- A B C D E a b c d e
- A a B b C c D d E e
- a A b B c C d D e E
- a b c d e A B C D E
-
-Here is a code snippet to tell what "word"
-characters are in the current locale, in that locale's order:
-
- use locale;
- print +(sort grep /\w/, map { chr } 0..255), "\n";
-
-Compare this with the characters that you see and their order if you
-state explicitly that the locale should be ignored:
-
- no locale;
- print +(sort grep /\w/, map { chr } 0..255), "\n";
-
-This machine-native collation (which is what you get unless S<C<use
-locale>> has appeared earlier in the same block) must be used for
-sorting raw binary data, whereas the locale-dependent collation of the
-first example is useful for natural text.
-
-As noted in L<USING LOCALES>, C<cmp> compares according to the current
-collation locale when C<use locale> is in effect, but falls back to a
-byte-by-byte comparison for strings that the locale says are equal. You
-can use POSIX::strcoll() if you don't want this fall-back:
-
- use POSIX qw(strcoll);
- $equal_in_locale =
- !strcoll("space and case ignored", "SpaceAndCaseIgnored");
-
-$equal_in_locale will be true if the collation locale specifies a
-dictionary-like ordering that ignores space characters completely and
-which folds case.
-
-If you have a single string that you want to check for "equality in
-locale" against several others, you might think you could gain a little
-efficiency by using POSIX::strxfrm() in conjunction with C<eq>:
-
- use POSIX qw(strxfrm);
- $xfrm_string = strxfrm("Mixed-case string");
- print "locale collation ignores spaces\n"
- if $xfrm_string eq strxfrm("Mixed-casestring");
- print "locale collation ignores hyphens\n"
- if $xfrm_string eq strxfrm("Mixedcase string");
- print "locale collation ignores case\n"
- if $xfrm_string eq strxfrm("mixed-case string");
-
-strxfrm() takes a string and maps it into a transformed string for use
-in byte-by-byte comparisons against other transformed strings during
-collation. "Under the hood", locale-affected Perl comparison operators
-call strxfrm() for both operands, then do a byte-by-byte
-comparison of the transformed strings. By calling strxfrm() explicitly
-and using a non locale-affected comparison, the example attempts to save
-a couple of transformations. But in fact, it doesn't save anything: Perl
-magic (see L<perlguts/Magic Variables>) creates the transformed version of a
-string the first time it's needed in a comparison, then keeps this version around
-in case it's needed again. An example rewritten the easy way with
-C<cmp> runs just about as fast. It also copes with null characters
-embedded in strings; if you call strxfrm() directly, it treats the first
-null it finds as a terminator. don't expect the transformed strings
-it produces to be portable across systems--or even from one revision
-of your operating system to the next. In short, don't call strxfrm()
-directly: let Perl do it for you.
-
-Note: C<use locale> isn't shown in some of these examples because it isn't
-needed: strcoll() and strxfrm() exist only to generate locale-dependent
-results, and so always obey the current C<LC_COLLATE> locale.
-
-=head2 Category LC_CTYPE: Character Types
-
-In the scope of S<C<use locale>>, Perl obeys the C<LC_CTYPE> locale
-setting. This controls the application's notion of which characters are
-alphabetic. This affects Perl's C<\w> regular expression metanotation,
-which stands for alphanumeric characters--that is, alphabetic,
-numeric, and including other special characters such as the underscore or
-hyphen. (Consult L<perlre> for more information about
-regular expressions.) Thanks to C<LC_CTYPE>, depending on your locale
-setting, characters like 'E<aelig>', 'E<eth>', 'E<szlig>', and
-'E<oslash>' may be understood as C<\w> characters.
-
-The C<LC_CTYPE> locale also provides the map used in transliterating
-characters between lower and uppercase. This affects the case-mapping
-functions--lc(), lcfirst, uc(), and ucfirst(); case-mapping
-interpolation with C<\l>, C<\L>, C<\u>, or C<\U> in double-quoted strings
-and C<s///> substitutions; and case-independent regular expression
-pattern matching using the C<i> modifier.
-
-Finally, C<LC_CTYPE> affects the POSIX character-class test
-functions--isalpha(), islower(), and so on. For example, if you move
-from the "C" locale to a 7-bit Scandinavian one, you may find--possibly
-to your surprise--that "|" moves from the ispunct() class to isalpha().
-
-B<Note:> A broken or malicious C<LC_CTYPE> locale definition may result
-in clearly ineligible characters being considered to be alphanumeric by
-your application. For strict matching of (mundane) letters and
-digits--for example, in command strings--locale-aware applications
-should use C<\w> inside a C<no locale> block. See L<"SECURITY">.
-
-=head2 Category LC_NUMERIC: Numeric Formatting
-
-In the scope of S<C<use locale>>, Perl obeys the C<LC_NUMERIC> locale
-information, which controls an application's idea of how numbers should
-be formatted for human readability by the printf(), sprintf(), and
-write() functions. String-to-numeric conversion by the POSIX::strtod()
-function is also affected. In most implementations the only effect is to
-change the character used for the decimal point--perhaps from '.' to ','.
-These functions aren't aware of such niceties as thousands separation and
-so on. (See L<The localeconv function> if you care about these things.)
-
-Output produced by print() is also affected by the current locale: it
-depends on whether C<use locale> or C<no locale> is in effect, and
-corresponds to what you'd get from printf() in the "C" locale. The
-same is true for Perl's internal conversions between numeric and
-string formats:
-
- use POSIX qw(strtod);
- use locale;
-
- $n = 5/2; # Assign numeric 2.5 to $n
-
- $a = " $n"; # Locale-dependent conversion to string
-
- print "half five is $n\n"; # Locale-dependent output
-
- printf "half five is %g\n", $n; # Locale-dependent output
-
- print "DECIMAL POINT IS COMMA\n"
- if $n == (strtod("2,5"))[0]; # Locale-dependent conversion
-
-=head2 Category LC_MONETARY: Formatting of monetary amounts
-
-The C standard defines the C<LC_MONETARY> category, but no function
-that is affected by its contents. (Those with experience of standards
-committees will recognize that the working group decided to punt on the
-issue.) Consequently, Perl takes no notice of it. If you really want
-to use C<LC_MONETARY>, you can query its contents--see
-L<The localeconv function>--and use the information that it returns in your
-application's own formatting of currency amounts. However, you may well
-find that the information, voluminous and complex though it may be, still
-does not quite meet your requirements: currency formatting is a hard nut
-to crack.
-
-=head2 LC_TIME
-
-Output produced by POSIX::strftime(), which builds a formatted
-human-readable date/time string, is affected by the current C<LC_TIME>
-locale. Thus, in a French locale, the output produced by the C<%B>
-format element (full month name) for the first month of the year would
-be "janvier". Here's how to get a list of long month names in the
-current locale:
-
- use POSIX qw(strftime);
- for (0..11) {
- $long_month_name[$_] =
- strftime("%B", 0, 0, 0, 1, $_, 96);
- }
-
-Note: C<use locale> isn't needed in this example: as a function that
-exists only to generate locale-dependent results, strftime() always
-obeys the current C<LC_TIME> locale.
-
-=head2 Other categories
-
-The remaining locale category, C<LC_MESSAGES> (possibly supplemented
-by others in particular implementations) is not currently used by
-Perl--except possibly to affect the behavior of library functions
-called by extensions outside the standard Perl distribution and by the
-operating system and its utilities. Note especially that the string
-value of C<$!> and the error messages given by external utilities may
-be changed by C<LC_MESSAGES>. If you want to have portable error
-codes, use C<%!>. See L<Errno>.
-
-=head1 SECURITY
-
-Although the main discussion of Perl security issues can be found in
-L<perlsec>, a discussion of Perl's locale handling would be incomplete
-if it did not draw your attention to locale-dependent security issues.
-Locales--particularly on systems that allow unprivileged users to
-build their own locales--are untrustworthy. A malicious (or just plain
-broken) locale can make a locale-aware application give unexpected
-results. Here are a few possibilities:
-
-=over 4
-
-=item *
-
-Regular expression checks for safe file names or mail addresses using
-C<\w> may be spoofed by an C<LC_CTYPE> locale that claims that
-characters such as "E<gt>" and "|" are alphanumeric.
-
-=item *
-
-String interpolation with case-mapping, as in, say, C<$dest =
-"C:\U$name.$ext">, may produce dangerous results if a bogus LC_CTYPE
-case-mapping table is in effect.
-
-=item *
-
-A sneaky C<LC_COLLATE> locale could result in the names of students with
-"D" grades appearing ahead of those with "A"s.
-
-=item *
-
-An application that takes the trouble to use information in
-C<LC_MONETARY> may format debits as if they were credits and vice versa
-if that locale has been subverted. Or it might make payments in US
-dollars instead of Hong Kong dollars.
-
-=item *
-
-The date and day names in dates formatted by strftime() could be
-manipulated to advantage by a malicious user able to subvert the
-C<LC_DATE> locale. ("Look--it says I wasn't in the building on
-Sunday.")
-
-=back
-
-Such dangers are not peculiar to the locale system: any aspect of an
-application's environment which may be modified maliciously presents
-similar challenges. Similarly, they are not specific to Perl: any
-programming language that allows you to write programs that take
-account of their environment exposes you to these issues.
-
-Perl cannot protect you from all possibilities shown in the
-examples--there is no substitute for your own vigilance--but, when
-C<use locale> is in effect, Perl uses the tainting mechanism (see
-L<perlsec>) to mark string results that become locale-dependent, and
-which may be untrustworthy in consequence. Here is a summary of the
-tainting behavior of operators and functions that may be affected by
-the locale:
-
-=over 4
-
-=item *
-
-B<Comparison operators> (C<lt>, C<le>, C<ge>, C<gt> and C<cmp>):
-
-Scalar true/false (or less/equal/greater) result is never tainted.
-
-=item *
-
-B<Case-mapping interpolation> (with C<\l>, C<\L>, C<\u> or C<\U>)
-
-Result string containing interpolated material is tainted if
-C<use locale> is in effect.
-
-=item *
-
-B<Matching operator> (C<m//>):
-
-Scalar true/false result never tainted.
-
-Subpatterns, either delivered as a list-context result or as $1 etc.
-are tainted if C<use locale> is in effect, and the subpattern regular
-expression contains C<\w> (to match an alphanumeric character), C<\W>
-(non-alphanumeric character), C<\s> (white-space character), or C<\S>
-(non white-space character). The matched-pattern variable, $&, $`
-(pre-match), $' (post-match), and $+ (last match) are also tainted if
-C<use locale> is in effect and the regular expression contains C<\w>,
-C<\W>, C<\s>, or C<\S>.
-
-=item *
-
-B<Substitution operator> (C<s///>):
-
-Has the same behavior as the match operator. Also, the left
-operand of C<=~> becomes tainted when C<use locale> in effect
-if modified as a result of a substitution based on a regular
-expression match involving C<\w>, C<\W>, C<\s>, or C<\S>; or of
-case-mapping with C<\l>, C<\L>,C<\u> or C<\U>.
-
-=item *
-
-B<Output formatting functions> (printf() and write()):
-
-Results are never tainted because otherwise even output from print,
-for example C<print(1/7)>, should be tainted if C<use locale> is in
-effect.
-
-=item *
-
-B<Case-mapping functions> (lc(), lcfirst(), uc(), ucfirst()):
-
-Results are tainted if C<use locale> is in effect.
-
-=item *
-
-B<POSIX locale-dependent functions> (localeconv(), strcoll(),
-strftime(), strxfrm()):
-
-Results are never tainted.
-
-=item *
-
-B<POSIX character class tests> (isalnum(), isalpha(), isdigit(),
-isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(),
-isxdigit()):
-
-True/false results are never tainted.
-
-=back
-
-Three examples illustrate locale-dependent tainting.
-The first program, which ignores its locale, won't run: a value taken
-directly from the command line may not be used to name an output file
-when taint checks are enabled.
-
- #/usr/local/bin/perl -T
- # Run with taint checking
-
- # Command line sanity check omitted...
- $tainted_output_file = shift;
-
- open(F, ">$tainted_output_file")
- or warn "Open of $untainted_output_file failed: $!\n";
-
-The program can be made to run by "laundering" the tainted value through
-a regular expression: the second example--which still ignores locale
-information--runs, creating the file named on its command line
-if it can.
-
- #/usr/local/bin/perl -T
-
- $tainted_output_file = shift;
- $tainted_output_file =~ m%[\w/]+%;
- $untainted_output_file = $&;
-
- open(F, ">$untainted_output_file")
- or warn "Open of $untainted_output_file failed: $!\n";
-
-Compare this with a similar but locale-aware program:
-
- #/usr/local/bin/perl -T
-
- $tainted_output_file = shift;
- use locale;
- $tainted_output_file =~ m%[\w/]+%;
- $localized_output_file = $&;
-
- open(F, ">$localized_output_file")
- or warn "Open of $localized_output_file failed: $!\n";
-
-This third program fails to run because $& is tainted: it is the result
-of a match involving C<\w> while C<use locale> is in effect.
-
-=head1 ENVIRONMENT
-
-=over 12
-
-=item PERL_BADLANG
-
-A string that can suppress Perl's warning about failed locale settings
-at startup. Failure can occur if the locale support in the operating
-system is lacking (broken) in some way--or if you mistyped the name of
-a locale when you set up your environment. If this environment
-variable is absent, or has a value that does not evaluate to integer
-zero--that is, "0" or ""-- Perl will complain about locale setting
-failures.
-
-B<NOTE>: PERL_BADLANG only gives you a way to hide the warning message.
-The message tells about some problem in your system's locale support,
-and you should investigate what the problem is.
-
-=back
-
-The following environment variables are not specific to Perl: They are
-part of the standardized (ISO C, XPG4, POSIX 1.c) setlocale() method
-for controlling an application's opinion on data.
-
-=over 12
-
-=item LC_ALL
-
-C<LC_ALL> is the "override-all" locale environment variable. If
-set, it overrides all the rest of the locale environment variables.
-
-=item LANGUAGE
-
-B<NOTE>: C<LANGUAGE> is a GNU extension, it affects you only if you
-are using the GNU libc. This is the case if you are using e.g. Linux.
-If you are using "commercial" UNIXes you are most probably I<not>
-using GNU libc and you can ignore C<LANGUAGE>.
-
-However, in the case you are using C<LANGUAGE>: it affects the
-language of informational, warning, and error messages output by
-commands (in other words, it's like C<LC_MESSAGES>) but it has higher
-priority than L<LC_ALL>. Moreover, it's not a single value but
-instead a "path" (":"-separated list) of I<languages> (not locales).
-See the GNU C<gettext> library documentation for more information.
-
-=item LC_CTYPE
-
-In the absence of C<LC_ALL>, C<LC_CTYPE> chooses the character type
-locale. In the absence of both C<LC_ALL> and C<LC_CTYPE>, C<LANG>
-chooses the character type locale.
-
-=item LC_COLLATE
-
-In the absence of C<LC_ALL>, C<LC_COLLATE> chooses the collation
-(sorting) locale. In the absence of both C<LC_ALL> and C<LC_COLLATE>,
-C<LANG> chooses the collation locale.
-
-=item LC_MONETARY
-
-In the absence of C<LC_ALL>, C<LC_MONETARY> chooses the monetary
-formatting locale. In the absence of both C<LC_ALL> and C<LC_MONETARY>,
-C<LANG> chooses the monetary formatting locale.
-
-=item LC_NUMERIC
-
-In the absence of C<LC_ALL>, C<LC_NUMERIC> chooses the numeric format
-locale. In the absence of both C<LC_ALL> and C<LC_NUMERIC>, C<LANG>
-chooses the numeric format.
-
-=item LC_TIME
-
-In the absence of C<LC_ALL>, C<LC_TIME> chooses the date and time
-formatting locale. In the absence of both C<LC_ALL> and C<LC_TIME>,
-C<LANG> chooses the date and time formatting locale.
-
-=item LANG
-
-C<LANG> is the "catch-all" locale environment variable. If it is set, it
-is used as the last resort after the overall C<LC_ALL> and the
-category-specific C<LC_...>.
-
-=back
-
-=head1 NOTES
-
-=head2 Backward compatibility
-
-Versions of Perl prior to 5.004 B<mostly> ignored locale information,
-generally behaving as if something similar to the C<"C"> locale were
-always in force, even if the program environment suggested otherwise
-(see L<The setlocale function>). By default, Perl still behaves this
-way for backward compatibility. If you want a Perl application to pay
-attention to locale information, you B<must> use the S<C<use locale>>
-pragma (see L<The use locale pragma>) to instruct it to do so.
-
-Versions of Perl from 5.002 to 5.003 did use the C<LC_CTYPE>
-information if available; that is, C<\w> did understand what
-were the letters according to the locale environment variables.
-The problem was that the user had no control over the feature:
-if the C library supported locales, Perl used them.
-
-=head2 I18N:Collate obsolete
-
-In versions of Perl prior to 5.004, per-locale collation was possible
-using the C<I18N::Collate> library module. This module is now mildly
-obsolete and should be avoided in new applications. The C<LC_COLLATE>
-functionality is now integrated into the Perl core language: One can
-use locale-specific scalar data completely normally with C<use locale>,
-so there is no longer any need to juggle with the scalar references of
-C<I18N::Collate>.
-
-=head2 Sort speed and memory use impacts
-
-Comparing and sorting by locale is usually slower than the default
-sorting; slow-downs of two to four times have been observed. It will
-also consume more memory: once a Perl scalar variable has participated
-in any string comparison or sorting operation obeying the locale
-collation rules, it will take 3-15 times more memory than before. (The
-exact multiplier depends on the string's contents, the operating system
-and the locale.) These downsides are dictated more by the operating
-system's implementation of the locale system than by Perl.
-
-=head2 write() and LC_NUMERIC
-
-Formats are the only part of Perl that unconditionally use information
-from a program's locale; if a program's environment specifies an
-LC_NUMERIC locale, it is always used to specify the decimal point
-character in formatted output. Formatted output cannot be controlled by
-C<use locale> because the pragma is tied to the block structure of the
-program, and, for historical reasons, formats exist outside that block
-structure.
-
-=head2 Freely available locale definitions
-
-There is a large collection of locale definitions at
-C<ftp://dkuug.dk/i18n/WG15-collection>. You should be aware that it is
-unsupported, and is not claimed to be fit for any purpose. If your
-system allows installation of arbitrary locales, you may find the
-definitions useful as they are, or as a basis for the development of
-your own locales.
-
-=head2 I18n and l10n
-
-"Internationalization" is often abbreviated as B<i18n> because its first
-and last letters are separated by eighteen others. (You may guess why
-the internalin ... internaliti ... i18n tends to get abbreviated.) In
-the same way, "localization" is often abbreviated to B<l10n>.
-
-=head2 An imperfect standard
-
-Internationalization, as defined in the C and POSIX standards, can be
-criticized as incomplete, ungainly, and having too large a granularity.
-(Locales apply to a whole process, when it would arguably be more useful
-to have them apply to a single thread, window group, or whatever.) They
-also have a tendency, like standards groups, to divide the world into
-nations, when we all know that the world can equally well be divided
-into bankers, bikers, gamers, and so on. But, for now, it's the only
-standard we've got. This may be construed as a bug.
-
-=head1 BUGS
-
-=head2 Broken systems
-
-In certain systems, the operating system's locale support
-is broken and cannot be fixed or used by Perl. Such deficiencies can
-and will result in mysterious hangs and/or Perl core dumps when the
-C<use locale> is in effect. When confronted with such a system,
-please report in excruciating detail to <F<perlbug@perl.org>>, and
-complain to your vendor: bug fixes may exist for these problems
-in your operating system. Sometimes such bug fixes are called an
-operating system upgrade.
-
-=head1 SEE ALSO
-
-L<POSIX/isalnum>, L<POSIX/isalpha>, L<POSIX/isdigit>,
-L<POSIX/isgraph>, L<POSIX/islower>, L<POSIX/isprint>,
-L<POSIX/ispunct>, L<POSIX/isspace>, L<POSIX/isupper>,
-L<POSIX/isxdigit>, L<POSIX/localeconv>, L<POSIX/setlocale>,
-L<POSIX/strcoll>, L<POSIX/strftime>, L<POSIX/strtod>,
-L<POSIX/strxfrm>.
-
-=head1 HISTORY
-
-Jarkko Hietaniemi's original F<perli18n.pod> heavily hacked by Dominic
-Dunlop, assisted by the perl5-porters. Prose worked over a bit by
-Tom Christiansen.
-
-Last update: Thu Jun 11 08:44:13 MDT 1998
diff --git a/contrib/perl5/pod/perllol.pod b/contrib/perl5/pod/perllol.pod
deleted file mode 100644
index 5c16bfd..0000000
--- a/contrib/perl5/pod/perllol.pod
+++ /dev/null
@@ -1,303 +0,0 @@
-=head1 NAME
-
-perllol - Manipulating Arrays of Arrays in Perl
-
-=head1 DESCRIPTION
-
-=head2 Declaration and Access of Arrays of Arrays
-
-The simplest thing to build an array of arrays (sometimes imprecisely
-called a list of lists). It's reasonably easy to understand, and
-almost everything that applies here will also be applicable later
-on with the fancier data structures.
-
-An array of an array is just a regular old array @AoA that you can
-get at with two subscripts, like C<$AoA[3][2]>. Here's a declaration
-of the array:
-
- # assign to our array, an array of array references
- @AoA = (
- [ "fred", "barney" ],
- [ "george", "jane", "elroy" ],
- [ "homer", "marge", "bart" ],
- );
-
- print $AoA[2][2];
- bart
-
-Now you should be very careful that the outer bracket type
-is a round one, that is, a parenthesis. That's because you're assigning to
-an @array, so you need parentheses. If you wanted there I<not> to be an @AoA,
-but rather just a reference to it, you could do something more like this:
-
- # assign a reference to array of array references
- $ref_to_AoA = [
- [ "fred", "barney", "pebbles", "bambam", "dino", ],
- [ "homer", "bart", "marge", "maggie", ],
- [ "george", "jane", "elroy", "judy", ],
- ];
-
- print $ref_to_AoA->[2][2];
-
-Notice that the outer bracket type has changed, and so our access syntax
-has also changed. That's because unlike C, in perl you can't freely
-interchange arrays and references thereto. $ref_to_AoA is a reference to an
-array, whereas @AoA is an array proper. Likewise, C<$AoA[2]> is not an
-array, but an array ref. So how come you can write these:
-
- $AoA[2][2]
- $ref_to_AoA->[2][2]
-
-instead of having to write these:
-
- $AoA[2]->[2]
- $ref_to_AoA->[2]->[2]
-
-Well, that's because the rule is that on adjacent brackets only (whether
-square or curly), you are free to omit the pointer dereferencing arrow.
-But you cannot do so for the very first one if it's a scalar containing
-a reference, which means that $ref_to_AoA always needs it.
-
-=head2 Growing Your Own
-
-That's all well and good for declaration of a fixed data structure,
-but what if you wanted to add new elements on the fly, or build
-it up entirely from scratch?
-
-First, let's look at reading it in from a file. This is something like
-adding a row at a time. We'll assume that there's a flat file in which
-each line is a row and each word an element. If you're trying to develop an
-@AoA array containing all these, here's the right way to do that:
-
- while (<>) {
- @tmp = split;
- push @AoA, [ @tmp ];
- }
-
-You might also have loaded that from a function:
-
- for $i ( 1 .. 10 ) {
- $AoA[$i] = [ somefunc($i) ];
- }
-
-Or you might have had a temporary variable sitting around with the
-array in it.
-
- for $i ( 1 .. 10 ) {
- @tmp = somefunc($i);
- $AoA[$i] = [ @tmp ];
- }
-
-It's very important that you make sure to use the C<[]> array reference
-constructor. That's because this will be very wrong:
-
- $AoA[$i] = @tmp;
-
-You see, assigning a named array like that to a scalar just counts the
-number of elements in @tmp, which probably isn't what you want.
-
-If you are running under C<use strict>, you'll have to add some
-declarations to make it happy:
-
- use strict;
- my(@AoA, @tmp);
- while (<>) {
- @tmp = split;
- push @AoA, [ @tmp ];
- }
-
-Of course, you don't need the temporary array to have a name at all:
-
- while (<>) {
- push @AoA, [ split ];
- }
-
-You also don't have to use push(). You could just make a direct assignment
-if you knew where you wanted to put it:
-
- my (@AoA, $i, $line);
- for $i ( 0 .. 10 ) {
- $line = <>;
- $AoA[$i] = [ split ' ', $line ];
- }
-
-or even just
-
- my (@AoA, $i);
- for $i ( 0 .. 10 ) {
- $AoA[$i] = [ split ' ', <> ];
- }
-
-You should in general be leery of using functions that could
-potentially return lists in scalar context without explicitly stating
-such. This would be clearer to the casual reader:
-
- my (@AoA, $i);
- for $i ( 0 .. 10 ) {
- $AoA[$i] = [ split ' ', scalar(<>) ];
- }
-
-If you wanted to have a $ref_to_AoA variable as a reference to an array,
-you'd have to do something like this:
-
- while (<>) {
- push @$ref_to_AoA, [ split ];
- }
-
-Now you can add new rows. What about adding new columns? If you're
-dealing with just matrices, it's often easiest to use simple assignment:
-
- for $x (1 .. 10) {
- for $y (1 .. 10) {
- $AoA[$x][$y] = func($x, $y);
- }
- }
-
- for $x ( 3, 7, 9 ) {
- $AoA[$x][20] += func2($x);
- }
-
-It doesn't matter whether those elements are already
-there or not: it'll gladly create them for you, setting
-intervening elements to C<undef> as need be.
-
-If you wanted just to append to a row, you'd have
-to do something a bit funnier looking:
-
- # add new columns to an existing row
- push @{ $AoA[0] }, "wilma", "betty";
-
-Notice that I I<couldn't> say just:
-
- push $AoA[0], "wilma", "betty"; # WRONG!
-
-In fact, that wouldn't even compile. How come? Because the argument
-to push() must be a real array, not just a reference to such.
-
-=head2 Access and Printing
-
-Now it's time to print your data structure out. How
-are you going to do that? Well, if you want only one
-of the elements, it's trivial:
-
- print $AoA[0][0];
-
-If you want to print the whole thing, though, you can't
-say
-
- print @AoA; # WRONG
-
-because you'll get just references listed, and perl will never
-automatically dereference things for you. Instead, you have to
-roll yourself a loop or two. This prints the whole structure,
-using the shell-style for() construct to loop across the outer
-set of subscripts.
-
- for $aref ( @AoA ) {
- print "\t [ @$aref ],\n";
- }
-
-If you wanted to keep track of subscripts, you might do this:
-
- for $i ( 0 .. $#AoA ) {
- print "\t elt $i is [ @{$AoA[$i]} ],\n";
- }
-
-or maybe even this. Notice the inner loop.
-
- for $i ( 0 .. $#AoA ) {
- for $j ( 0 .. $#{$AoA[$i]} ) {
- print "elt $i $j is $AoA[$i][$j]\n";
- }
- }
-
-As you can see, it's getting a bit complicated. That's why
-sometimes is easier to take a temporary on your way through:
-
- for $i ( 0 .. $#AoA ) {
- $aref = $AoA[$i];
- for $j ( 0 .. $#{$aref} ) {
- print "elt $i $j is $AoA[$i][$j]\n";
- }
- }
-
-Hmm... that's still a bit ugly. How about this:
-
- for $i ( 0 .. $#AoA ) {
- $aref = $AoA[$i];
- $n = @$aref - 1;
- for $j ( 0 .. $n ) {
- print "elt $i $j is $AoA[$i][$j]\n";
- }
- }
-
-=head2 Slices
-
-If you want to get at a slice (part of a row) in a multidimensional
-array, you're going to have to do some fancy subscripting. That's
-because while we have a nice synonym for single elements via the
-pointer arrow for dereferencing, no such convenience exists for slices.
-(Remember, of course, that you can always write a loop to do a slice
-operation.)
-
-Here's how to do one operation using a loop. We'll assume an @AoA
-variable as before.
-
- @part = ();
- $x = 4;
- for ($y = 7; $y < 13; $y++) {
- push @part, $AoA[$x][$y];
- }
-
-That same loop could be replaced with a slice operation:
-
- @part = @{ $AoA[4] } [ 7..12 ];
-
-but as you might well imagine, this is pretty rough on the reader.
-
-Ah, but what if you wanted a I<two-dimensional slice>, such as having
-$x run from 4..8 and $y run from 7 to 12? Hmm... here's the simple way:
-
- @newAoA = ();
- for ($startx = $x = 4; $x <= 8; $x++) {
- for ($starty = $y = 7; $y <= 12; $y++) {
- $newAoA[$x - $startx][$y - $starty] = $AoA[$x][$y];
- }
- }
-
-We can reduce some of the looping through slices
-
- for ($x = 4; $x <= 8; $x++) {
- push @newAoA, [ @{ $AoA[$x] } [ 7..12 ] ];
- }
-
-If you were into Schwartzian Transforms, you would probably
-have selected map for that
-
- @newAoA = map { [ @{ $AoA[$_] } [ 7..12 ] ] } 4 .. 8;
-
-Although if your manager accused of seeking job security (or rapid
-insecurity) through inscrutable code, it would be hard to argue. :-)
-If I were you, I'd put that in a function:
-
- @newAoA = splice_2D( \@AoA, 4 => 8, 7 => 12 );
- sub splice_2D {
- my $lrr = shift; # ref to array of array refs!
- my ($x_lo, $x_hi,
- $y_lo, $y_hi) = @_;
-
- return map {
- [ @{ $lrr->[$_] } [ $y_lo .. $y_hi ] ]
- } $x_lo .. $x_hi;
- }
-
-
-=head1 SEE ALSO
-
-perldata(1), perlref(1), perldsc(1)
-
-=head1 AUTHOR
-
-Tom Christiansen <F<tchrist@perl.com>>
-
-Last update: Thu Jun 4 16:16:23 MDT 1998
diff --git a/contrib/perl5/pod/perlmod.pod b/contrib/perl5/pod/perlmod.pod
deleted file mode 100644
index 01056f1..0000000
--- a/contrib/perl5/pod/perlmod.pod
+++ /dev/null
@@ -1,455 +0,0 @@
-=head1 NAME
-
-perlmod - Perl modules (packages and symbol tables)
-
-=head1 DESCRIPTION
-
-=head2 Packages
-
-Perl provides a mechanism for alternative namespaces to protect
-packages from stomping on each other's variables. In fact, there's
-really no such thing as a global variable in Perl. The package
-statement declares the compilation unit as being in the given
-namespace. The scope of the package declaration is from the
-declaration itself through the end of the enclosing block, C<eval>,
-or file, whichever comes first (the same scope as the my() and
-local() operators). Unqualified dynamic identifiers will be in
-this namespace, except for those few identifiers that if unqualified,
-default to the main package instead of the current one as described
-below. A package statement affects only dynamic variables--including
-those you've used local() on--but I<not> lexical variables created
-with my(). Typically it would be the first declaration in a file
-included by the C<do>, C<require>, or C<use> operators. You can
-switch into a package in more than one place; it merely influences
-which symbol table is used by the compiler for the rest of that
-block. You can refer to variables and filehandles in other packages
-by prefixing the identifier with the package name and a double
-colon: C<$Package::Variable>. If the package name is null, the
-C<main> package is assumed. That is, C<$::sail> is equivalent to
-C<$main::sail>.
-
-The old package delimiter was a single quote, but double colon is now the
-preferred delimiter, in part because it's more readable to humans, and
-in part because it's more readable to B<emacs> macros. It also makes C++
-programmers feel like they know what's going on--as opposed to using the
-single quote as separator, which was there to make Ada programmers feel
-like they knew what's going on. Because the old-fashioned syntax is still
-supported for backwards compatibility, if you try to use a string like
-C<"This is $owner's house">, you'll be accessing C<$owner::s>; that is,
-the $s variable in package C<owner>, which is probably not what you meant.
-Use braces to disambiguate, as in C<"This is ${owner}'s house">.
-
-Packages may themselves contain package separators, as in
-C<$OUTER::INNER::var>. This implies nothing about the order of
-name lookups, however. There are no relative packages: all symbols
-are either local to the current package, or must be fully qualified
-from the outer package name down. For instance, there is nowhere
-within package C<OUTER> that C<$INNER::var> refers to
-C<$OUTER::INNER::var>. It would treat package C<INNER> as a totally
-separate global package.
-
-Only identifiers starting with letters (or underscore) are stored
-in a package's symbol table. All other symbols are kept in package
-C<main>, including all punctuation variables, like $_. In addition,
-when unqualified, the identifiers STDIN, STDOUT, STDERR, ARGV,
-ARGVOUT, ENV, INC, and SIG are forced to be in package C<main>,
-even when used for other purposes than their built-in one. If you
-have a package called C<m>, C<s>, or C<y>, then you can't use the
-qualified form of an identifier because it would be instead interpreted
-as a pattern match, a substitution, or a transliteration.
-
-Variables beginning with underscore used to be forced into package
-main, but we decided it was more useful for package writers to be able
-to use leading underscore to indicate private variables and method names.
-$_ is still global though. See also
-L<perlvar/"Technical Note on the Syntax of Variable Names">.
-
-C<eval>ed strings are compiled in the package in which the eval() was
-compiled. (Assignments to C<$SIG{}>, however, assume the signal
-handler specified is in the C<main> package. Qualify the signal handler
-name if you wish to have a signal handler in a package.) For an
-example, examine F<perldb.pl> in the Perl library. It initially switches
-to the C<DB> package so that the debugger doesn't interfere with variables
-in the program you are trying to debug. At various points, however, it
-temporarily switches back to the C<main> package to evaluate various
-expressions in the context of the C<main> package (or wherever you came
-from). See L<perldebug>.
-
-The special symbol C<__PACKAGE__> contains the current package, but cannot
-(easily) be used to construct variables.
-
-See L<perlsub> for other scoping issues related to my() and local(),
-and L<perlref> regarding closures.
-
-=head2 Symbol Tables
-
-The symbol table for a package happens to be stored in the hash of that
-name with two colons appended. The main symbol table's name is thus
-C<%main::>, or C<%::> for short. Likewise the symbol table for the nested
-package mentioned earlier is named C<%OUTER::INNER::>.
-
-The value in each entry of the hash is what you are referring to when you
-use the C<*name> typeglob notation. In fact, the following have the same
-effect, though the first is more efficient because it does the symbol
-table lookups at compile time:
-
- local *main::foo = *main::bar;
- local $main::{foo} = $main::{bar};
-
-(Be sure to note the B<vast> difference between the second line above
-and C<local $main::foo = $main::bar>. The former is accessing the hash
-C<%main::>, which is the symbol table of package C<main>. The latter is
-simply assigning scalar C<$bar> in package C<main> to scalar C<$foo> of
-the same package.)
-
-You can use this to print out all the variables in a package, for
-instance. The standard but antiquated F<dumpvar.pl> library and
-the CPAN module Devel::Symdump make use of this.
-
-Assignment to a typeglob performs an aliasing operation, i.e.,
-
- *dick = *richard;
-
-causes variables, subroutines, formats, and file and directory handles
-accessible via the identifier C<richard> also to be accessible via the
-identifier C<dick>. If you want to alias only a particular variable or
-subroutine, assign a reference instead:
-
- *dick = \$richard;
-
-Which makes $richard and $dick the same variable, but leaves
-@richard and @dick as separate arrays. Tricky, eh?
-
-This mechanism may be used to pass and return cheap references
-into or from subroutines if you don't want to copy the whole
-thing. It only works when assigning to dynamic variables, not
-lexicals.
-
- %some_hash = (); # can't be my()
- *some_hash = fn( \%another_hash );
- sub fn {
- local *hashsym = shift;
- # now use %hashsym normally, and you
- # will affect the caller's %another_hash
- my %nhash = (); # do what you want
- return \%nhash;
- }
-
-On return, the reference will overwrite the hash slot in the
-symbol table specified by the *some_hash typeglob. This
-is a somewhat tricky way of passing around references cheaply
-when you don't want to have to remember to dereference variables
-explicitly.
-
-Another use of symbol tables is for making "constant" scalars.
-
- *PI = \3.14159265358979;
-
-Now you cannot alter C<$PI>, which is probably a good thing all in all.
-This isn't the same as a constant subroutine, which is subject to
-optimization at compile-time. A constant subroutine is one prototyped
-to take no arguments and to return a constant expression. See
-L<perlsub> for details on these. The C<use constant> pragma is a
-convenient shorthand for these.
-
-You can say C<*foo{PACKAGE}> and C<*foo{NAME}> to find out what name and
-package the *foo symbol table entry comes from. This may be useful
-in a subroutine that gets passed typeglobs as arguments:
-
- sub identify_typeglob {
- my $glob = shift;
- print 'You gave me ', *{$glob}{PACKAGE}, '::', *{$glob}{NAME}, "\n";
- }
- identify_typeglob *foo;
- identify_typeglob *bar::baz;
-
-This prints
-
- You gave me main::foo
- You gave me bar::baz
-
-The C<*foo{THING}> notation can also be used to obtain references to the
-individual elements of *foo. See L<perlref>.
-
-Subroutine definitions (and declarations, for that matter) need
-not necessarily be situated in the package whose symbol table they
-occupy. You can define a subroutine outside its package by
-explicitly qualifying the name of the subroutine:
-
- package main;
- sub Some_package::foo { ... } # &foo defined in Some_package
-
-This is just a shorthand for a typeglob assignment at compile time:
-
- BEGIN { *Some_package::foo = sub { ... } }
-
-and is I<not> the same as writing:
-
- {
- package Some_package;
- sub foo { ... }
- }
-
-In the first two versions, the body of the subroutine is
-lexically in the main package, I<not> in Some_package. So
-something like this:
-
- package main;
-
- $Some_package::name = "fred";
- $main::name = "barney";
-
- sub Some_package::foo {
- print "in ", __PACKAGE__, ": \$name is '$name'\n";
- }
-
- Some_package::foo();
-
-prints:
-
- in main: $name is 'barney'
-
-rather than:
-
- in Some_package: $name is 'fred'
-
-This also has implications for the use of the SUPER:: qualifier
-(see L<perlobj>).
-
-=head2 Package Constructors and Destructors
-
-Four special subroutines act as package constructors and destructors.
-These are the C<BEGIN>, C<CHECK>, C<INIT>, and C<END> routines. The
-C<sub> is optional for these routines.
-
-A C<BEGIN> subroutine is executed as soon as possible, that is, the moment
-it is completely defined, even before the rest of the containing file
-is parsed. You may have multiple C<BEGIN> blocks within a file--they
-will execute in order of definition. Because a C<BEGIN> block executes
-immediately, it can pull in definitions of subroutines and such from other
-files in time to be visible to the rest of the file. Once a C<BEGIN>
-has run, it is immediately undefined and any code it used is returned to
-Perl's memory pool. This means you can't ever explicitly call a C<BEGIN>.
-
-An C<END> subroutine is executed as late as possible, that is, after
-perl has finished running the program and just before the interpreter
-is being exited, even if it is exiting as a result of a die() function.
-(But not if it's polymorphing into another program via C<exec>, or
-being blown out of the water by a signal--you have to trap that yourself
-(if you can).) You may have multiple C<END> blocks within a file--they
-will execute in reverse order of definition; that is: last in, first
-out (LIFO). C<END> blocks are not executed when you run perl with the
-C<-c> switch, or if compilation fails.
-
-Inside an C<END> subroutine, C<$?> contains the value that the program is
-going to pass to C<exit()>. You can modify C<$?> to change the exit
-value of the program. Beware of changing C<$?> by accident (e.g. by
-running something via C<system>).
-
-Similar to C<BEGIN> blocks, C<INIT> blocks are run just before the
-Perl runtime begins execution, in "first in, first out" (FIFO) order.
-For example, the code generators documented in L<perlcc> make use of
-C<INIT> blocks to initialize and resolve pointers to XSUBs.
-
-Similar to C<END> blocks, C<CHECK> blocks are run just after the
-Perl compile phase ends and before the run time begins, in
-LIFO order. C<CHECK> blocks are again useful in the Perl compiler
-suite to save the compiled state of the program.
-
-When you use the B<-n> and B<-p> switches to Perl, C<BEGIN> and
-C<END> work just as they do in B<awk>, as a degenerate case.
-Both C<BEGIN> and C<CHECK> blocks are run when you use the B<-c>
-switch for a compile-only syntax check, although your main code
-is not.
-
-=head2 Perl Classes
-
-There is no special class syntax in Perl, but a package may act
-as a class if it provides subroutines to act as methods. Such a
-package may also derive some of its methods from another class (package)
-by listing the other package name(s) in its global @ISA array (which
-must be a package global, not a lexical).
-
-For more on this, see L<perltoot> and L<perlobj>.
-
-=head2 Perl Modules
-
-A module is just a set of related functions in a library file, i.e.,
-a Perl package with the same name as the file. It is specifically
-designed to be reusable by other modules or programs. It may do this
-by providing a mechanism for exporting some of its symbols into the
-symbol table of any package using it. Or it may function as a class
-definition and make its semantics available implicitly through
-method calls on the class and its objects, without explicitly
-exporting anything. Or it can do a little of both.
-
-For example, to start a traditional, non-OO module called Some::Module,
-create a file called F<Some/Module.pm> and start with this template:
-
- package Some::Module; # assumes Some/Module.pm
-
- use strict;
- use warnings;
-
- BEGIN {
- use Exporter ();
- our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-
- # set the version for version checking
- $VERSION = 1.00;
- # if using RCS/CVS, this may be preferred
- $VERSION = do { my @r = (q$Revision: 2.21 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
-
- @ISA = qw(Exporter);
- @EXPORT = qw(&func1 &func2 &func4);
- %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
-
- # your exported package globals go here,
- # as well as any optionally exported functions
- @EXPORT_OK = qw($Var1 %Hashit &func3);
- }
- our @EXPORT_OK;
-
- # exported package globals go here
- our $Var1;
- our %Hashit;
-
- # non-exported package globals go here
- our @more;
- our $stuff;
-
- # initialize package globals, first exported ones
- $Var1 = '';
- %Hashit = ();
-
- # then the others (which are still accessible as $Some::Module::stuff)
- $stuff = '';
- @more = ();
-
- # all file-scoped lexicals must be created before
- # the functions below that use them.
-
- # file-private lexicals go here
- my $priv_var = '';
- my %secret_hash = ();
-
- # here's a file-private function as a closure,
- # callable as &$priv_func; it cannot be prototyped.
- my $priv_func = sub {
- # stuff goes here.
- };
-
- # make all your functions, whether exported or not;
- # remember to put something interesting in the {} stubs
- sub func1 {} # no prototype
- sub func2() {} # proto'd void
- sub func3($$) {} # proto'd to 2 scalars
-
- # this one isn't exported, but could be called!
- sub func4(\%) {} # proto'd to 1 hash ref
-
- END { } # module clean-up code here (global destructor)
-
- ## YOUR CODE GOES HERE
-
- 1; # don't forget to return a true value from the file
-
-Then go on to declare and use your variables in functions without
-any qualifications. See L<Exporter> and the L<perlmodlib> for
-details on mechanics and style issues in module creation.
-
-Perl modules are included into your program by saying
-
- use Module;
-
-or
-
- use Module LIST;
-
-This is exactly equivalent to
-
- BEGIN { require Module; import Module; }
-
-or
-
- BEGIN { require Module; import Module LIST; }
-
-As a special case
-
- use Module ();
-
-is exactly equivalent to
-
- BEGIN { require Module; }
-
-All Perl module files have the extension F<.pm>. The C<use> operator
-assumes this so you don't have to spell out "F<Module.pm>" in quotes.
-This also helps to differentiate new modules from old F<.pl> and
-F<.ph> files. Module names are also capitalized unless they're
-functioning as pragmas; pragmas are in effect compiler directives,
-and are sometimes called "pragmatic modules" (or even "pragmata"
-if you're a classicist).
-
-The two statements:
-
- require SomeModule;
- require "SomeModule.pm";
-
-differ from each other in two ways. In the first case, any double
-colons in the module name, such as C<Some::Module>, are translated
-into your system's directory separator, usually "/". The second
-case does not, and would have to be specified literally. The other
-difference is that seeing the first C<require> clues in the compiler
-that uses of indirect object notation involving "SomeModule", as
-in C<$ob = purge SomeModule>, are method calls, not function calls.
-(Yes, this really can make a difference.)
-
-Because the C<use> statement implies a C<BEGIN> block, the importing
-of semantics happens as soon as the C<use> statement is compiled,
-before the rest of the file is compiled. This is how it is able
-to function as a pragma mechanism, and also how modules are able to
-declare subroutines that are then visible as list or unary operators for
-the rest of the current file. This will not work if you use C<require>
-instead of C<use>. With C<require> you can get into this problem:
-
- require Cwd; # make Cwd:: accessible
- $here = Cwd::getcwd();
-
- use Cwd; # import names from Cwd::
- $here = getcwd();
-
- require Cwd; # make Cwd:: accessible
- $here = getcwd(); # oops! no main::getcwd()
-
-In general, C<use Module ()> is recommended over C<require Module>,
-because it determines module availability at compile time, not in the
-middle of your program's execution. An exception would be if two modules
-each tried to C<use> each other, and each also called a function from
-that other module. In that case, it's easy to use C<require>s instead.
-
-Perl packages may be nested inside other package names, so we can have
-package names containing C<::>. But if we used that package name
-directly as a filename it would make for unwieldy or impossible
-filenames on some systems. Therefore, if a module's name is, say,
-C<Text::Soundex>, then its definition is actually found in the library
-file F<Text/Soundex.pm>.
-
-Perl modules always have a F<.pm> file, but there may also be
-dynamically linked executables (often ending in F<.so>) or autoloaded
-subroutine definitions (often ending in F<.al>) associated with the
-module. If so, these will be entirely transparent to the user of
-the module. It is the responsibility of the F<.pm> file to load
-(or arrange to autoload) any additional functionality. For example,
-although the POSIX module happens to do both dynamic loading and
-autoloading, the user can say just C<use POSIX> to get it all.
-
-=head1 SEE ALSO
-
-See L<perlmodlib> for general style issues related to building Perl
-modules and classes, as well as descriptions of the standard library
-and CPAN, L<Exporter> for how Perl's standard import/export mechanism
-works, L<perltoot> and L<perltootc> for an in-depth tutorial on
-creating classes, L<perlobj> for a hard-core reference document on
-objects, L<perlsub> for an explanation of functions and scoping,
-and L<perlxstut> and L<perlguts> for more information on writing
-extension modules.
diff --git a/contrib/perl5/pod/perlmodinstall.pod b/contrib/perl5/pod/perlmodinstall.pod
deleted file mode 100644
index 0fc359e..0000000
--- a/contrib/perl5/pod/perlmodinstall.pod
+++ /dev/null
@@ -1,486 +0,0 @@
-=head1 NAME
-
-perlmodinstall - Installing CPAN Modules
-
-=head1 DESCRIPTION
-
-You can think of a module as the fundamental unit of reusable Perl
-code; See L<perlmod> for details. Whenever anyone creates a chunk
-of Perl code that they think will be useful to the world, they
-register as a Perl developer at
-http://www.perl.com/CPAN/modules/04pause.html so that they can then
-upload their code to CPAN. CPAN is the Comprehensive Perl Archive
-Network and can be accessed at http://www.perl.com/CPAN/, or searched
-via http://cpan.perl.com/ and
-http://theory.uwinnipeg.ca/mod_perl/cpan-search.pl .
-
-This documentation is for people who want to download CPAN modules
-and install them on their own computer.
-
-=head2 PREAMBLE
-
-You have a file ending in F<.tar.gz> (or, less often, F<.zip>).
-You know there's a tasty module inside. You must now take four
-steps:
-
-=over 5
-
-=item B<DECOMPRESS> the file
-
-=item B<UNPACK> the file into a directory
-
-=item B<BUILD> the module (sometimes unnecessary)
-
-=item B<INSTALL> the module.
-
-=back
-
-Here's how to perform each step for each operating system. This is
-I<not> a substitute for reading the README and INSTALL files that
-might have come with your module!
-
-Also note that these instructions are tailored for installing the
-module into your system's repository of Perl modules. But you can
-install modules into any directory you wish. For instance, where I
-say C<perl Makefile.PL>, you can substitute C<perl
-Makefile.PL PREFIX=/my/perl_directory> to install the modules
-into C</my/perl_directory>. Then you can use the modules
-from your Perl programs with C<use lib
-"/my/perl_directory/lib/site_perl"> or sometimes just C<use
-"/my/perl_directory">.
-
-=over 4
-
-=item *
-
-B<If you're on Unix,>
-
-You can use Andreas Koenig's CPAN module
-(which comes standard with Perl, or can itself be downloaded
-from http://www.perl.com/CPAN/modules/by-module/CPAN)
-to automate the following steps, from DECOMPRESS through INSTALL.
-
-A. DECOMPRESS
-
-Decompress the file with C<gzip -d yourmodule.tar.gz>
-
-You can get gzip from ftp://prep.ai.mit.edu/pub/gnu.
-
-Or, you can combine this step with the next to save disk space:
-
- gzip -dc yourmodule.tar.gz | tar -xof -
-
-B. UNPACK
-
-Unpack the result with C<tar -xof yourmodule.tar>
-
-C. BUILD
-
-Go into the newly-created directory and type:
-
- perl Makefile.PL
- make
- make test
-
-D. INSTALL
-
-While still in that directory, type:
-
- make install
-
-Make sure you have appropriate permissions to install the module
-in your Perl 5 library directory. Often, you'll need to be root.
-
-Perl maintains a record of all module installations. To look at
-this list, simply type:
-
- perldoc perllocal
-
-That's all you need to do on Unix systems with dynamic linking.
-Most Unix systems have dynamic linking--if yours doesn't, or if for
-another reason you have a statically-linked perl, I<and> the
-module requires compilation, you'll need to build a new Perl binary
-that includes the module. Again, you'll probably need to be root.
-
-=item *
-
-B<If you're running Windows 95 or NT with the ActiveState port of Perl>
-
- A. DECOMPRESS
-
-You can use the shareware B<Winzip> program ( http://www.winzip.com ) to
-decompress and unpack modules.
-
- B. UNPACK
-
-If you used WinZip, this was already done for you.
-
- C. BUILD
-
-Does the module require compilation (i.e. does it have files
-that end in .xs, .c, .h, .y, .cc, .cxx, or .C)? If it does, you're on
-your own. You can try compiling it yourself if you have a C compiler.
-If you're successful, consider uploading the resulting binary to
-CPAN for others to use. If it doesn't, go to INSTALL.
-
- D. INSTALL
-
-Copy the module into your Perl's I<lib> directory. That'll be one
-of the directories you see when you type
-
- perl -e 'print "@INC"'
-
-=item *
-
-B<If you're running Windows 95 or NT with the core Windows distribution of
-Perl,>
-
- A. DECOMPRESS
-
-When you download the module, make sure it ends in either
-F<.tar.gz> or F<.zip>. Windows browsers sometimes
-download C<.tar.gz> files as C<_tar.tar>, because
-early versions of Windows prohibited more than one dot in a filename.
-
-You can use the shareware B<WinZip> program ( http://www.winzip.com ) to
-decompress and unpack modules.
-
-Or, you can use InfoZip's C<unzip> utility (
-http://www.cdrom.com/pub/infozip/ ) to uncompress C<.zip> files; type
-C<unzip yourmodule.zip> in your shell.
-
-Or, if you have a working C<tar> and C<gzip>, you can
-type
-
- gzip -cd yourmodule.tar.gz | tar xvf -
-
-in the shell to decompress C<yourmodule.tar.gz>. This will
-UNPACK your module as well.
-
- B. UNPACK
-
-The methods in DECOMPRESS will have done this for you.
-
- C. BUILD
-
-Go into the newly-created directory and type:
-
- perl Makefile.PL
- dmake
- dmake test
-
-Depending on your perl configuration, C<dmake> might not be
-available. You might have to substitute whatever C<perl
--V:make> says. (Usually, that will be C<nmake> or
-C<make>.)
-
- D. INSTALL
-
-While still in that directory, type:
-
- dmake install
-
-=item *
-
-B<If you're using a Macintosh,>
-
-A. DECOMPRESS
-
-First thing you should do is make sure you have the latest B<cpan-mac>
-distribution ( http://www.cpan.org/authors/id/CNANDOR/ ), which has
-utilities for doing all of the steps. Read the cpan-mac directions
-carefully and install it. If you choose not to use cpan-mac
-for some reason, there are alternatives listed here.
-
-After installing cpan-mac, drop the module archive on the
-B<untarzipme> droplet, which will decompress and unpack for you.
-
-B<Or>, you can either use the shareware B<StuffIt Expander> program
-( http://www.aladdinsys.com/expander/ )
-in combination with B<DropStuff with Expander Enhancer>
-( http://www.aladdinsys.com/dropstuff/ )
-or the freeware B<MacGzip> program (
-http://persephone.cps.unizar.es/general/gente/spd/gzip/gzip.html ).
-
-B. UNPACK
-
-If you're using untarzipme or StuffIt, the archive should be extracted
-now. B<Or>, you can use the freeware B<suntar> or I<Tar> (
-http://hyperarchive.lcs.mit.edu/HyperArchive/Archive/cmp/ ).
-
-C. BUILD
-
-Check the contents of the distribution.
-Read the module's documentation, looking for
-reasons why you might have trouble using it with MacPerl. Look for
-F<.xs> and F<.c> files, which normally denote that the distribution
-must be compiled, and you cannot install it "out of the box."
-(See L<"PORTABILITY">.)
-
-If a module does not work on MacPerl but should, or needs to be
-compiled, see if the module exists already as a port on the
-MacPerl Module Porters site (http://pudge.net/mmp/).
-For more information on doing XS with MacPerl yourself, see
-Arved Sandstrom's XS tutorial (http://macperl.com/depts/Tutorials/),
-and then consider uploading your binary to the CPAN and
-registering it on the MMP site.
-
-D. INSTALL
-
-If you are using cpan-mac, just drop the folder on the
-B<installme> droplet, and use the module.
-
-B<Or>, if you aren't using cpan-mac, do some manual labor.
-
-Make sure the newlines for the modules are in Mac format, not Unix format.
-If they are not then you might have decompressed them incorrectly. Check
-your decompression and unpacking utilities settings to make sure they are
-translating text files properly.
-
-As a last resort, you can use the perl one-liner:
-
- perl -i.bak -pe 's/(?:\015)?\012/\015/g' <filenames>
-
-on the source files.
-
-Then move the files (probably just the F<.pm> files, though there
-may be some additional ones, too; check the module documentation)
-to their final destination: This will
-most likely be in C<$ENV{MACPERL}site_lib:> (i.e.,
-C<HD:MacPerl folder:site_lib:>). You can add new paths to
-the default C<@INC> in the Preferences menu item in the
-MacPerl application (C<$ENV{MACPERL}site_lib:> is added
-automagically). Create whatever directory structures are required
-(i.e., for C<Some::Module>, create
-C<$ENV{MACPERL}site_lib:Some:> and put
-C<Module.pm> in that directory).
-
-Then run the following script (or something like it):
-
- #!perl -w
- use AutoSplit;
- my $dir = "${MACPERL}site_perl";
- autosplit("$dir:Some:Module.pm", "$dir:auto", 0, 1, 1);
-
-=item *
-
-B<If you're on the DJGPP port of DOS,>
-
- A. DECOMPRESS
-
-djtarx ( ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2/ )
-will both uncompress and unpack.
-
- B. UNPACK
-
-See above.
-
- C. BUILD
-
-Go into the newly-created directory and type:
-
- perl Makefile.PL
- make
- make test
-
-You will need the packages mentioned in F<README.dos>
-in the Perl distribution.
-
- D. INSTALL
-
-While still in that directory, type:
-
- make install
-
-You will need the packages mentioned in F<README.dos> in the Perl distribution.
-
-=item *
-
-B<If you're on OS/2,>
-
-Get the EMX development suite and gzip/tar, from either Hobbes (
-http://hobbes.nmsu.edu ) or Leo ( http://www.leo.org ), and then follow
-the instructions for Unix.
-
-=item *
-
-B<If you're on VMS,>
-
-When downloading from CPAN, save your file with a F<.tgz>
-extension instead of F<.tar.gz>. All other periods in the
-filename should be replaced with underscores. For example,
-C<Your-Module-1.33.tar.gz> should be downloaded as
-C<Your-Module-1_33.tgz>.
-
-A. DECOMPRESS
-
-Type
-
- gzip -d Your-Module.tgz
-
-or, for zipped modules, type
-
- unzip Your-Module.zip
-
-Executables for gzip, zip, and VMStar ( Alphas:
-http://www.openvms.digital.com/freeware/000TOOLS/ALPHA/ and Vaxen:
-http://www.openvms.digital.com/freeware/000TOOLS/VAX/ ).
-
-gzip and tar
-are also available at ftp://ftp.digital.com/pub/VMS.
-
-Note that GNU's gzip/gunzip is not the same as Info-ZIP's zip/unzip
-package. The former is a simple compression tool; the latter permits
-creation of multi-file archives.
-
-B. UNPACK
-
-If you're using VMStar:
-
- VMStar xf Your-Module.tar
-
-Or, if you're fond of VMS command syntax:
-
- tar/extract/verbose Your_Module.tar
-
-C. BUILD
-
-Make sure you have MMS (from Digital) or the freeware MMK ( available from
-MadGoat at http://www.madgoat.com ). Then type this to create the
-DESCRIP.MMS for the module:
-
- perl Makefile.PL
-
-Now you're ready to build:
-
- mms
- mms test
-
-Substitute C<mmk> for C<mms> above if you're using MMK.
-
-D. INSTALL
-
-Type
-
- mms install
-
-Substitute C<mmk> for C<mms> above if you're using MMK.
-
-=item *
-
-B<If you're on MVS>,
-
-Introduce the F<.tar.gz> file into an HFS as binary; don't translate from
-ASCII to EBCDIC.
-
-A. DECOMPRESS
-
- Decompress the file with C<gzip -d yourmodule.tar.gz>
-
- You can get gzip from
- http://www.s390.ibm.com/products/oe/bpxqp1.html.
-
-B. UNPACK
-
-Unpack the result with
-
- pax -o to=IBM-1047,from=ISO8859-1 -r < yourmodule.tar
-
-The BUILD and INSTALL steps are identical to those for Unix. Some
-modules generate Makefiles that work better with GNU make, which is
-available from http://www.mks.com/s390/gnu/index.htm.
-
-=back
-
-
-=head1 PORTABILITY
-
-Note that not all modules will work with on all platforms.
-See L<perlport> for more information on portability issues.
-Read the documentation to see if the module will work on your
-system. There are basically three categories
-of modules that will not work "out of the box" with all
-platforms (with some possibility of overlap):
-
-=over 4
-
-=item *
-
-B<Those that should, but don't.> These need to be fixed; consider
-contacting the author and possibly writing a patch.
-
-=item *
-
-B<Those that need to be compiled, where the target platform
-doesn't have compilers readily available.> (These modules contain
-F<.xs> or F<.c> files, usually.) You might be able to find
-existing binaries on the CPAN or elsewhere, or you might
-want to try getting compilers and building it yourself, and then
-release the binary for other poor souls to use.
-
-=item *
-
-B<Those that are targeted at a specific platform.>
-(Such as the Win32:: modules.) If the module is targeted
-specifically at a platform other than yours, you're out
-of luck, most likely.
-
-=back
-
-
-
-Check the CPAN Testers if a module should work with your platform
-but it doesn't behave as you'd expect, or you aren't sure whether or
-not a module will work under your platform. If the module you want
-isn't listed there, you can test it yourself and let CPAN Testers know,
-you can join CPAN Testers, or you can request it be tested.
-
- http://testers.cpan.org/
-
-
-=head1 HEY
-
-If you have any suggested changes for this page, let me know. Please
-don't send me mail asking for help on how to install your modules.
-There are too many modules, and too few Orwants, for me to be able to
-answer or even acknowledge all your questions. Contact the module
-author instead, or post to comp.lang.perl.modules, or ask someone
-familiar with Perl on your operating system.
-
-=head1 AUTHOR
-
-Jon Orwant
-
-orwant@tpj.com
-
-The Perl Journal, http://tpj.com
-
-with invaluable help from Brandon Allbery, Charles Bailey, Graham
-Barr, Dominic Dunlop, Jarkko Hietaniemi, Ben Holzman, Tom Horsley,
-Nick Ing-Simmons, Tuomas J. Lukka, Laszlo Molnar, Chris Nandor, Alan
-Olsen, Peter Prymmer, Gurusamy Sarathy, Christoph Spalinger, Dan
-Sugalski, Larry Virden, and Ilya Zakharevich.
-
-First version July 22, 1998
-
-Last Modified August 22, 2000
-
-=head1 COPYRIGHT
-
-Copyright (C) 1998, 2000 Jon Orwant. All Rights Reserved.
-
-Permission is granted to make and distribute verbatim copies of this
-documentation provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-documentation under the conditions for verbatim copying, provided also
-that they are marked clearly as modified versions, that the authors'
-names and title are unchanged (though subtitles and additional
-authors' names may be added), and that the entire resulting derived
-work is distributed under the terms of a permission notice identical
-to this one.
-
-Permission is granted to copy and distribute translations of this
-documentation into another language, under the above conditions for
-modified versions.
diff --git a/contrib/perl5/pod/perlmodlib.PL b/contrib/perl5/pod/perlmodlib.PL
deleted file mode 100755
index 0cdadb7..0000000
--- a/contrib/perl5/pod/perlmodlib.PL
+++ /dev/null
@@ -1,1383 +0,0 @@
-#!../miniperl
-
-open (OUT, ">perlmodlib.tmp") or die $!;
-my (@pragma, @mod);
-open (MANIFEST, "../MANIFEST") or die $!;
-
-while (<MANIFEST>) {
- my $filename;
- next unless s|^lib/|| or m|^ext/|;
- ($filename) = /(\S+)/;
- $filename =~ s|^[^/]+/|| if $filename =~ s|^ext/||;
- next unless $filename =~ /\.p(m|od)$/;
- next unless open (MOD, "../lib/$filename");
-
- my ($name, $thing);
- my $foundit=0;
- {
- local $/="";
- while (<MOD>) {
- next unless /^=head1 NAME/;
- $foundit++;
- last;
- }
- }
- unless ($foundit) {
- warn "$filename missing head1\n";
- next;
- }
- my $title = <MOD>;
- chomp($title);
- close MOD;
-
- my $perlname = $filename;
- $perlname =~ s!\.p(m|od)$!!;
- $perlname =~ s!/!::!g;
-
- ($name, $thing) = split / --? /, $title, 2;
-
- unless ($name and $thing) {
- warn "$filename missing name\n" unless $name;
- warn "$filename missing thing\n" unless $thing;
- next;
- }
-
- $thing =~ s/^perl pragma to //i;
- $thing = ucfirst($thing);
- $title = "=item $perlname\n\n$thing\n\n";
-
- # print "$perlname $thing\n";
-
- if ($filename=~/[A-Z]/) {
- push @mod, $title;
- } else {
- push @pragma, $title;
- }
-}
-
-print OUT <<'EOF';
-# Generated by perlmodlib.PL DO NOT EDIT!
-
-=head1 NAME
-
-perlmodlib - constructing new Perl modules and finding existing ones
-
-=head1 DESCRIPTION
-
-=head1 THE PERL MODULE LIBRARY
-
-Many modules are included the Perl distribution. These are described
-below, and all end in F<.pm>. You may discover compiled library
-file (usually ending in F<.so>) or small pieces of modules to be
-autoloaded (ending in F<.al>); these were automatically generated
-by the installation process. You may also discover files in the
-library directory that end in either F<.pl> or F<.ph>. These are
-old libraries supplied so that old programs that use them still
-run. The F<.pl> files will all eventually be converted into standard
-modules, and the F<.ph> files made by B<h2ph> will probably end up
-as extension modules made by B<h2xs>. (Some F<.ph> values may
-already be available through the POSIX, Errno, or Fcntl modules.)
-The B<pl2pm> file in the distribution may help in your conversion,
-but it's just a mechanical process and therefore far from bulletproof.
-
-=head2 Pragmatic Modules
-
-They work somewhat like compiler directives (pragmata) in that they
-tend to affect the compilation of your program, and thus will usually
-work well only when used within a C<use>, or C<no>. Most of these
-are lexically scoped, so an inner BLOCK may countermand them
-by saying:
-
- no integer;
- no strict 'refs';
- no warnings;
-
-which lasts until the end of that BLOCK.
-
-Some pragmas are lexically scoped--typically those that affect the
-C<$^H> hints variable. Others affect the current package instead,
-like C<use vars> and C<use subs>, which allow you to predeclare a
-variables or subroutines within a particular I<file> rather than
-just a block. Such declarations are effective for the entire file
-for which they were declared. You cannot rescind them with C<no
-vars> or C<no subs>.
-
-The following pragmas are defined (and have their own documentation).
-
-=over 12
-
-EOF
-
-print OUT $_ for (sort @pragma);
-
-print OUT <<EOF;
-=back
-
-=head2 Standard Modules
-
-Standard, bundled modules are all expected to behave in a well-defined
-manner with respect to namespace pollution because they use the
-Exporter module. See their own documentation for details.
-
-=over 12
-
-EOF
-
-print OUT $_ for (sort @mod);
-
-print OUT <<'EOF';
-=back
-
-To find out I<all> modules installed on your system, including
-those without documentation or outside the standard release,
-just do this:
-
- % find `perl -e 'print "@INC"'` -name '*.pm' -print
-
-They should all have their own documentation installed and accessible
-via your system man(1) command. If you do not have a B<find>
-program, you can use the Perl B<find2perl> program instead, which
-generates Perl code as output you can run through perl. If you
-have a B<man> program but it doesn't find your modules, you'll have
-to fix your manpath. See L<perl> for details. If you have no
-system B<man> command, you might try the B<perldoc> program.
-
-=head2 Extension Modules
-
-Extension modules are written in C (or a mix of Perl and C). They
-are usually dynamically loaded into Perl if and when you need them,
-but may also be be linked in statically. Supported extension modules
-include Socket, Fcntl, and POSIX.
-
-Many popular C extension modules do not come bundled (at least, not
-completely) due to their sizes, volatility, or simply lack of time
-for adequate testing and configuration across the multitude of
-platforms on which Perl was beta-tested. You are encouraged to
-look for them on CPAN (described below), or using web search engines
-like Alta Vista or Deja News.
-
-=head1 CPAN
-
-CPAN stands for Comprehensive Perl Archive Network; it's a globally
-replicated trove of Perl materials, including documentation, style
-guides, tricks and traps, alternate ports to non-Unix systems and
-occasional binary distributions for these. Search engines for
-CPAN can be found at http://cpan.perl.com/ and at
-http://theory.uwinnipeg.ca/mod_perl/cpan-search.pl .
-
-Most importantly, CPAN includes around a thousand unbundled modules,
-some of which require a C compiler to build. Major categories of
-modules are:
-
-=over
-
-=item *
-
-Language Extensions and Documentation Tools
-
-=item *
-
-Development Support
-
-=item *
-
-Operating System Interfaces
-
-=item *
-
-Networking, Device Control (modems) and InterProcess Communication
-
-=item *
-
-Data Types and Data Type Utilities
-
-=item *
-
-Database Interfaces
-
-=item *
-
-User Interfaces
-
-=item *
-
-Interfaces to / Emulations of Other Programming Languages
-
-=item *
-
-File Names, File Systems and File Locking (see also File Handles)
-
-=item *
-
-String Processing, Language Text Processing, Parsing, and Searching
-
-=item *
-
-Option, Argument, Parameter, and Configuration File Processing
-
-=item *
-
-Internationalization and Locale
-
-=item *
-
-Authentication, Security, and Encryption
-
-=item *
-
-World Wide Web, HTML, HTTP, CGI, MIME
-
-=item *
-
-Server and Daemon Utilities
-
-=item *
-
-Archiving and Compression
-
-=item *
-
-Images, Pixmap and Bitmap Manipulation, Drawing, and Graphing
-
-=item *
-
-Mail and Usenet News
-
-=item *
-
-Control Flow Utilities (callbacks and exceptions etc)
-
-=item *
-
-File Handle and Input/Output Stream Utilities
-
-=item *
-
-Miscellaneous Modules
-
-=back
-
-Registered CPAN sites as of this writing include the following.
-You should try to choose one close to you:
-
-=head2 Africa
-
-=over 4
-
-=item *
-
-South Africa
-
- ftp://ftp.is.co.za/programming/perl/CPAN/
- ftp://ftp.saix.net/pub/CPAN/
- ftp://ftpza.co.za/pub/mirrors/cpan/
- ftp://ftp.sun.ac.za/CPAN/
-
-=back
-
-=head2 Asia
-
-=over 4
-
-=item *
-
-China
-
- ftp://freesoft.cei.gov.cn/pub/languages/perl/CPAN/
- http://www2.linuxforum.net/mirror/CPAN/
- http://cpan.shellhung.org/
- ftp://ftp.shellhung.org/pub/CPAN
-
-=item *
-
-Hong Kong
-
- http://CPAN.pacific.net.hk/
- ftp://ftp.pacific.net.hk/pub/mirror/CPAN/
-
-=item *
-
-Indonesia
-
- http://piksi.itb.ac.id/CPAN/
- ftp://mirrors.piksi.itb.ac.id/CPAN/
- http://CPAN.mweb.co.id/
- ftp://ftp.mweb.co.id/pub/languages/perl/CPAN/
-
-=item *
-
-Israel
-
- http://www.iglu.org.il:/pub/CPAN/
- ftp://ftp.iglu.org.il/pub/CPAN/
- http://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
- ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
-
-=item *
-
-Japan
-
- ftp://ftp.u-aizu.ac.jp/pub/lang/perl/CPAN/
- ftp://ftp.kddlabs.co.jp/CPAN/
- http://mirror.nucba.ac.jp/mirror/Perl/
- ftp://mirror.nucba.ac.jp/mirror/Perl/
- ftp://ftp.meisei-u.ac.jp/pub/CPAN/
- ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
- ftp://ftp.dti.ad.jp/pub/lang/CPAN/
- ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
-
-=item *
-
-Saudi Arabia
-
- ftp://ftp.isu.net.sa/pub/CPAN/
-
-=item *
-
-Singapore
-
- http://cpan.hjc.edu.sg
- http://ftp.nus.edu.sg/unix/perl/CPAN/
- ftp://ftp.nus.edu.sg/pub/unix/perl/CPAN/
-
-=item *
-
-South Korea
-
- http://CPAN.bora.net/
- ftp://ftp.bora.net/pub/CPAN/
- http://ftp.kornet.net/CPAN/
- ftp://ftp.kornet.net/pub/CPAN/
- ftp://ftp.nuri.net/pub/CPAN/
-
-=item *
-
-Taiwan
-
- ftp://coda.nctu.edu.tw/UNIX/perl/CPAN
- ftp://ftp.ee.ncku.edu.tw/pub/perl/CPAN/
- ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
-
-=item *
-
-Thailand
-
- http://download.nectec.or.th/CPAN/
- ftp://ftp.nectec.or.th/pub/languages/CPAN/
- ftp://ftp.cs.riubon.ac.th/pub/mirrors/CPAN/
-
-=back
-
-=head2 Central America
-
-=over 4
-
-=item *
-
-Costa Rica
-
- ftp://ftp.linux.co.cr/mirrors/CPAN/
- http://ftp.ucr.ac.cr/Unix/CPAN/
- ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
-
-=back
-
-=head2 Europe
-
-=over 4
-
-=item *
-
-Austria
-
- ftp://ftp.tuwien.ac.at/pub/languages/perl/CPAN/
-
-=item *
-
-Belgium
-
- http://ftp.easynet.be/CPAN/
- ftp://ftp.easynet.be/CPAN/
- ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
-
-=item *
-
-Bulgaria
-
- ftp://ftp.ntrl.net/pub/mirrors/CPAN/
-
-=item *
-
-Croatia
-
- ftp://ftp.linux.hr/pub/CPAN/
-
-=item *
-
-Czech Republic
-
- http://www.fi.muni.cz/pub/perl/
- ftp://ftp.fi.muni.cz/pub/perl/
- ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.funet.fi/pub/languages/perl/CPAN/
-
-=item *
-
-Denmark
-
- ftp://sunsite.auc.dk/pub/languages/perl/CPAN/
- http://www.cpan.dk/CPAN/
- ftp://www.cpan.dk/ftp.cpan.org/CPAN/
-
-=item *
-
-England
-
- http://www.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN
- ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
- ftp://ftp.demon.co.uk/pub/mirrors/perl/CPAN/
- ftp://ftp.flirble.org/pub/languages/perl/CPAN/
- ftp://ftp.plig.org/pub/CPAN/
- ftp://sunsite.doc.ic.ac.uk/packages/CPAN/
- http://mirror.uklinux.net/CPAN/
- ftp://mirror.uklinux.net/pub/CPAN/
- ftp://usit.shef.ac.uk/pub/packages/CPAN/
-
-=item *
-
-Estonia
-
- ftp://ftp.ut.ee/pub/languages/perl/CPAN/
-
-=item *
-
-Finland
-
- ftp://ftp.funet.fi/pub/languages/perl/CPAN/
-
-=item *
-
-France
-
- ftp://cpan.ftp.worldonline.fr/pub/CPAN/
- ftp://ftp.club-internet.fr/pub/perl/CPAN/
- ftp://ftp.lip6.fr/pub/perl/CPAN/
- ftp://ftp.oleane.net/pub/mirrors/CPAN/
- ftp://ftp.pasteur.fr/pub/computing/CPAN/
- ftp://cpan.cict.fr/pub/CPAN/
- ftp://ftp.uvsq.fr/pub/perl/CPAN/
-
-=item *
-
-Germany
-
- ftp://ftp.rz.ruhr-uni-bochum.de/pub/CPAN/
- ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
- ftp://ftp.uni-erlangen.de/pub/source/CPAN/
- ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/CPAN
- ftp://ftp.gigabell.net/pub/CPAN/
- http://ftp.gwdg.de/pub/languages/perl/CPAN/
- ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
- ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
- ftp://ftp.leo.org/pub/comp/general/programming/languages/script/perl/CPAN/
- ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
- ftp://ftp.gmd.de/mirrors/CPAN/
-
-=item *
-
-Greece
-
- ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
- ftp://ftp.ntua.gr/pub/lang/perl/
-
-=item *
-
-Hungary
-
- http://cpan.artifact.hu/
- ftp://cpan.artifact.hu/CPAN/
- ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
-
-=item *
-
-Iceland
-
- http://cpan.gm.is/
- ftp://ftp.gm.is/pub/CPAN/
-
-=item *
-
-Ireland
-
- http://cpan.indigo.ie/
- ftp://cpan.indigo.ie/pub/CPAN/
- http://sunsite.compapp.dcu.ie/pub/perl/
- ftp://sunsite.compapp.dcu.ie/pub/perl/
-
-=item *
-
-Italy
-
- http://cpan.nettuno.it/
- http://gusp.dyndns.org/CPAN/
- ftp://gusp.dyndns.org/pub/CPAN
- http://softcity.iol.it/cpan
- ftp://softcity.iol.it/pub/cpan
- ftp://ftp.unina.it/pub/Other/CPAN/
- ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
- ftp://cis.uniRoma2.it/CPAN/
- ftp://ftp.edisontel.it/pub/CPAN_Mirror/
- ftp://ftp.flashnet.it/pub/CPAN/
-
-=item *
-
-Latvia
-
- http://kvin.lv/pub/CPAN/
-
-=item *
-
-Netherlands
-
- ftp://download.xs4all.nl/pub/mirror/CPAN/
- ftp://ftp.nl.uu.net/pub/CPAN/
- ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
- ftp://ftp.cpan.nl/pub/CPAN/
- http://www.cs.uu.nl/mirror/CPAN/
- ftp://ftp.cs.uu.nl/mirror/CPAN/
-
-=item *
-
-Norway
-
- ftp://sunsite.uio.no/pub/languages/perl/CPAN/
- ftp://ftp.uit.no/pub/languages/perl/cpan/
-
-=item *
-
-Poland
-
- ftp://ftp.pk.edu.pl/pub/lang/perl/CPAN/
- ftp://ftp.mega.net.pl/pub/mirrors/ftp.perl.com/
- ftp://ftp.man.torun.pl/pub/doc/CPAN/
- ftp://sunsite.icm.edu.pl/pub/CPAN/
-
-=item *
-
-Portugal
-
- ftp://ftp.ua.pt/pub/CPAN/
- ftp://perl.di.uminho.pt/pub/CPAN/
- ftp://ftp.ist.utl.pt/pub/CPAN/
- ftp://ftp.netc.pt/pub/CPAN/
-
-=item *
-
-Romania
-
- ftp://archive.logicnet.ro/mirrors/ftp.cpan.org/CPAN/
- ftp://ftp.kappa.ro/pub/mirrors/ftp.perl.org/pub/CPAN/
- ftp://ftp.dntis.ro/pub/cpan/
- ftp://ftp.opsynet.com/cpan/
- ftp://ftp.dnttm.ro/pub/CPAN/
- ftp://ftp.timisoara.roedu.net/mirrors/CPAN/
-
-=item *
-
-Russia
-
- ftp://ftp.chg.ru/pub/lang/perl/CPAN/
- http://cpan.rinet.ru/
- ftp://cpan.rinet.ru/pub/mirror/CPAN/
- ftp://ftp.aha.ru/pub/CPAN/
- ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
-
-=item *
-
-Slovakia
-
- ftp://ftp.entry.sk/pub/languages/perl/CPAN/
-
-=item *
-
-Slovenia
-
- ftp://ftp.arnes.si/software/perl/CPAN/
-
-=item *
-
-Spain
-
- ftp://ftp.rediris.es/mirror/CPAN/
- ftp://ftp.etse.urv.es/pub/perl/
-
-=item *
-
-Sweden
-
- http://ftp.du.se/CPAN/
- ftp://ftp.du.se/pub/CPAN/
- ftp://ftp.sunet.se/pub/lang/perl/CPAN/
-
-=item *
-
-Switzerland
-
- ftp://ftp.danyk.ch/CPAN/
- ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
-
-=item *
-
-Turkey
-
- ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
-
-=back
-
-=head2 North America
-
-=over 4
-
-=item *
-
-Canada
-
-=over 8
-
-=item *
-
-Alberta
-
- http://sunsite.ualberta.ca/pub/Mirror/CPAN/
- ftp://sunsite.ualberta.ca/pub/Mirror/CPAN/
-
-=item *
-
-Manitoba
-
- http://theoryx5.uwinnipeg.ca/pub/CPAN/
- ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
-
-=item *
-
-Nova Scotia
-
- ftp://cpan.chebucto.ns.ca/pub/CPAN/
-
-=item *
-
-Ontario
-
- ftp://ftp.crc.ca/pub/packages/lang/perl/CPAN/
-
-=item *
-
-Mexico
-
- http://www.msg.com.mx/CPAN/
- ftp://ftp.msg.com.mx/pub/CPAN/
-
-=back
-
-=item *
-
-United States
-
-=over 8
-
-=item *
-
-Alabama
-
- http://mirror.hiwaay.net/CPAN/
- ftp://mirror.hiwaay.net/CPAN/
-
-=item *
-
-California
-
- http://www.cpan.org/
- ftp://ftp.cpan.org/CPAN/
- ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
- ftp://ftp.digital.com/pub/plan/perl/CPAN/
- http://www.kernel.org/pub/mirrors/cpan/
- ftp://ftp.kernel.org/pub/mirrors/cpan/
- http://www.perl.com/CPAN/
- http://download.sourceforge.net/mirrors/CPAN/
-
-=item *
-
-Colorado
-
- ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
-
-=item *
-
-Florida
-
- ftp://ftp.cise.ufl.edu/pub/perl/CPAN/
-
-=item *
-
-Georgia
-
- ftp://ftp.twoguys.org/CPAN/
-
-=item *
-
-Illinois
-
- http://www.neurogames.com/mirrors/CPAN
- http://uiarchive.uiuc.edu/mirrors/ftp/ftp.cpan.org/pub/CPAN/
- ftp://uiarchive.uiuc.edu/mirrors/ftp/ftp.cpan.org/pub/CPAN/
-
-=item *
-
-Indiana
-
- ftp://ftp.uwsg.indiana.edu/pub/perl/CPAN/
- http://cpan.nitco.com/
- ftp://cpan.nitco.com/pub/CPAN/
- ftp://cpan.in-span.net/
- http://csociety-ftp.ecn.purdue.edu/pub/CPAN
- ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN
-
-=item *
-
-Kentucky
-
- http://cpan.uky.edu/
- ftp://cpan.uky.edu/pub/CPAN/
-
-=item *
-
-Massachusetts
-
- ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
- ftp://ftp.iguide.com/pub/mirrors/packages/perl/CPAN/
-
-=item *
-
-New Jersey
-
- ftp://ftp.cpanel.net/pub/CPAN/
-
-=item *
-
-New York
-
- ftp://ftp.freesoftware.com/pub/perl/CPAN/
- http://www.deao.net/mirrors/CPAN/
- ftp://ftp.deao.net/pub/CPAN/
- ftp://ftp.stealth.net/pub/mirrors/ftp.cpan.org/pub/CPAN/
- http://mirror.nyc.anidea.com/CPAN/
- ftp://mirror.nyc.anidea.com/pub/CPAN/
- http://www.rge.com/pub/languages/perl/
- ftp://ftp.rge.com/pub/languages/perl/
- ftp://mirrors.cloud9.net/pub/mirrors/CPAN/
-
-=item *
-
-North Carolina
-
- ftp://ftp.duke.edu/pub/perl/
-
-=item *
-
-Ohio
-
- ftp://ftp.loaded.net/pub/CPAN/
-
-=item *
-
-Oklahoma
-
- ftp://ftp.ou.edu/mirrors/CPAN/
-
-=item *
-
-Oregon
-
- ftp://ftp.orst.edu/pub/packages/CPAN/
-
-=item *
-
-Pennsylvania
-
- http://ftp.epix.net/CPAN/
- ftp://ftp.epix.net/pub/languages/perl/
- ftp://carroll.cac.psu.edu/pub/CPAN/
-
-=item *
-
-Tennessee
-
- ftp://ftp.sunsite.utk.edu/pub/CPAN/
-
-=item *
-
-Texas
-
- http://ftp.sedl.org/pub/mirrors/CPAN/
- http://jhcloos.com/pub/mirror/CPAN/
- ftp://jhcloos.com/pub/mirror/CPAN/
-
-=item *
-
-Utah
-
- ftp://mirror.xmission.com/CPAN/
-
-=item *
-
-Virginia
-
- http://mirrors.rcn.net/pub/lang/CPAN/
- ftp://mirrors.rcn.net/pub/lang/CPAN/
- ftp://ruff.cs.jmu.edu/pub/CPAN/
- http://perl.Liquidation.com/CPAN/
-
-=item *
-
-Washington
-
- http://cpan.llarian.net/
- ftp://cpan.llarian.net/pub/CPAN/
- ftp://ftp-mirror.internap.com/pub/CPAN/
- ftp://ftp.spu.edu/pub/CPAN/
-
-=back
-
-=back
-
-=head2 Oceania
-
-=over 4
-
-=item *
-
-Australia
-
- http://ftp.planetmirror.com/pub/CPAN/
- ftp://ftp.planetmirror.com/pub/CPAN/
- ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
- ftp://cpan.topend.com.au/pub/CPAN/
-
-=item *
-
-New Zealand
-
- ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
-
-=back
-
-=head2 South America
-
-=over 4
-
-=item *
-
-Argentina
-
- ftp://mirrors.bannerlandia.com.ar/mirrors/CPAN/
-
-=item *
-
-Brazil
-
- ftp://cpan.pop-mg.com.br/pub/CPAN/
- ftp://ftp.matrix.com.br/pub/perl/
- ftp://cpan.if.usp.br/pub/mirror/CPAN/
-
-=item *
-
-Chile
-
- ftp://ftp.psinet.cl/pub/programming/perl/CPAN/
- ftp://sunsite.dcc.uchile.cl/pub/lang/perl/
-
-=back
-
-For an up-to-date listing of CPAN sites,
-see http://www.cpan.org/SITES or ftp://www.cpan.org/SITES .
-
-=head1 Modules: Creation, Use, and Abuse
-
-(The following section is borrowed directly from Tim Bunce's modules
-file, available at your nearest CPAN site.)
-
-Perl implements a class using a package, but the presence of a
-package doesn't imply the presence of a class. A package is just a
-namespace. A class is a package that provides subroutines that can be
-used as methods. A method is just a subroutine that expects, as its
-first argument, either the name of a package (for "static" methods),
-or a reference to something (for "virtual" methods).
-
-A module is a file that (by convention) provides a class of the same
-name (sans the .pm), plus an import method in that class that can be
-called to fetch exported symbols. This module may implement some of
-its methods by loading dynamic C or C++ objects, but that should be
-totally transparent to the user of the module. Likewise, the module
-might set up an AUTOLOAD function to slurp in subroutine definitions on
-demand, but this is also transparent. Only the F<.pm> file is required to
-exist. See L<perlsub>, L<perltoot>, and L<AutoLoader> for details about
-the AUTOLOAD mechanism.
-
-=head2 Guidelines for Module Creation
-
-=over 4
-
-=item *
-
-Do similar modules already exist in some form?
-
-If so, please try to reuse the existing modules either in whole or
-by inheriting useful features into a new class. If this is not
-practical try to get together with the module authors to work on
-extending or enhancing the functionality of the existing modules.
-A perfect example is the plethora of packages in perl4 for dealing
-with command line options.
-
-If you are writing a module to expand an already existing set of
-modules, please coordinate with the author of the package. It
-helps if you follow the same naming scheme and module interaction
-scheme as the original author.
-
-=item *
-
-Try to design the new module to be easy to extend and reuse.
-
-Try to C<use warnings;> (or C<use warnings qw(...);>).
-Remember that you can add C<no warnings qw(...);> to individual blocks
-of code that need less warnings.
-
-Use blessed references. Use the two argument form of bless to bless
-into the class name given as the first parameter of the constructor,
-e.g.,:
-
- sub new {
- my $class = shift;
- return bless {}, $class;
- }
-
-or even this if you'd like it to be used as either a static
-or a virtual method.
-
- sub new {
- my $self = shift;
- my $class = ref($self) || $self;
- return bless {}, $class;
- }
-
-Pass arrays as references so more parameters can be added later
-(it's also faster). Convert functions into methods where
-appropriate. Split large methods into smaller more flexible ones.
-Inherit methods from other modules if appropriate.
-
-Avoid class name tests like: C<die "Invalid" unless ref $ref eq 'FOO'>.
-Generally you can delete the C<eq 'FOO'> part with no harm at all.
-Let the objects look after themselves! Generally, avoid hard-wired
-class names as far as possible.
-
-Avoid C<< $r->Class::func() >> where using C<@ISA=qw(... Class ...)> and
-C<< $r->func() >> would work (see L<perlbot> for more details).
-
-Use autosplit so little used or newly added functions won't be a
-burden to programs that don't use them. Add test functions to
-the module after __END__ either using AutoSplit or by saying:
-
- eval join('',<main::DATA>) || die $@ unless caller();
-
-Does your module pass the 'empty subclass' test? If you say
-C<@SUBCLASS::ISA = qw(YOURCLASS);> your applications should be able
-to use SUBCLASS in exactly the same way as YOURCLASS. For example,
-does your application still work if you change: C<$obj = new YOURCLASS;>
-into: C<$obj = new SUBCLASS;> ?
-
-Avoid keeping any state information in your packages. It makes it
-difficult for multiple other packages to use yours. Keep state
-information in objects.
-
-Always use B<-w>.
-
-Try to C<use strict;> (or C<use strict qw(...);>).
-Remember that you can add C<no strict qw(...);> to individual blocks
-of code that need less strictness.
-
-Always use B<-w>.
-
-Follow the guidelines in the perlstyle(1) manual.
-
-Always use B<-w>.
-
-=item *
-
-Some simple style guidelines
-
-The perlstyle manual supplied with Perl has many helpful points.
-
-Coding style is a matter of personal taste. Many people evolve their
-style over several years as they learn what helps them write and
-maintain good code. Here's one set of assorted suggestions that
-seem to be widely used by experienced developers:
-
-Use underscores to separate words. It is generally easier to read
-$var_names_like_this than $VarNamesLikeThis, especially for
-non-native speakers of English. It's also a simple rule that works
-consistently with VAR_NAMES_LIKE_THIS.
-
-Package/Module names are an exception to this rule. Perl informally
-reserves lowercase module names for 'pragma' modules like integer
-and strict. Other modules normally begin with a capital letter and
-use mixed case with no underscores (need to be short and portable).
-
-You may find it helpful to use letter case to indicate the scope
-or nature of a variable. For example:
-
- $ALL_CAPS_HERE constants only (beware clashes with Perl vars)
- $Some_Caps_Here package-wide global/static
- $no_caps_here function scope my() or local() variables
-
-Function and method names seem to work best as all lowercase.
-e.g., C<< $obj->as_string() >>.
-
-You can use a leading underscore to indicate that a variable or
-function should not be used outside the package that defined it.
-
-=item *
-
-Select what to export.
-
-Do NOT export method names!
-
-Do NOT export anything else by default without a good reason!
-
-Exports pollute the namespace of the module user. If you must
-export try to use @EXPORT_OK in preference to @EXPORT and avoid
-short or common names to reduce the risk of name clashes.
-
-Generally anything not exported is still accessible from outside the
-module using the ModuleName::item_name (or C<< $blessed_ref->method >>)
-syntax. By convention you can use a leading underscore on names to
-indicate informally that they are 'internal' and not for public use.
-
-(It is actually possible to get private functions by saying:
-C<my $subref = sub { ... }; &$subref;>. But there's no way to call that
-directly as a method, because a method must have a name in the symbol
-table.)
-
-As a general rule, if the module is trying to be object oriented
-then export nothing. If it's just a collection of functions then
-@EXPORT_OK anything but use @EXPORT with caution.
-
-=item *
-
-Select a name for the module.
-
-This name should be as descriptive, accurate, and complete as
-possible. Avoid any risk of ambiguity. Always try to use two or
-more whole words. Generally the name should reflect what is special
-about what the module does rather than how it does it. Please use
-nested module names to group informally or categorize a module.
-There should be a very good reason for a module not to have a nested name.
-Module names should begin with a capital letter.
-
-Having 57 modules all called Sort will not make life easy for anyone
-(though having 23 called Sort::Quick is only marginally better :-).
-Imagine someone trying to install your module alongside many others.
-If in any doubt ask for suggestions in comp.lang.perl.misc.
-
-If you are developing a suite of related modules/classes it's good
-practice to use nested classes with a common prefix as this will
-avoid namespace clashes. For example: Xyz::Control, Xyz::View,
-Xyz::Model etc. Use the modules in this list as a naming guide.
-
-If adding a new module to a set, follow the original author's
-standards for naming modules and the interface to methods in
-those modules.
-
-If developing modules for private internal or project specific use,
-that will never be released to the public, then you should ensure
-that their names will not clash with any future public module. You
-can do this either by using the reserved Local::* category or by
-using a category name that includes an underscore like Foo_Corp::*.
-
-To be portable each component of a module name should be limited to
-11 characters. If it might be used on MS-DOS then try to ensure each is
-unique in the first 8 characters. Nested modules make this easier.
-
-=item *
-
-Have you got it right?
-
-How do you know that you've made the right decisions? Have you
-picked an interface design that will cause problems later? Have
-you picked the most appropriate name? Do you have any questions?
-
-The best way to know for sure, and pick up many helpful suggestions,
-is to ask someone who knows. Comp.lang.perl.misc is read by just about
-all the people who develop modules and it's the best place to ask.
-
-All you need to do is post a short summary of the module, its
-purpose and interfaces. A few lines on each of the main methods is
-probably enough. (If you post the whole module it might be ignored
-by busy people - generally the very people you want to read it!)
-
-Don't worry about posting if you can't say when the module will be
-ready - just say so in the message. It might be worth inviting
-others to help you, they may be able to complete it for you!
-
-=item *
-
-README and other Additional Files.
-
-It's well known that software developers usually fully document the
-software they write. If, however, the world is in urgent need of
-your software and there is not enough time to write the full
-documentation please at least provide a README file containing:
-
-=over 10
-
-=item *
-
-A description of the module/package/extension etc.
-
-=item *
-
-A copyright notice - see below.
-
-=item *
-
-Prerequisites - what else you may need to have.
-
-=item *
-
-How to build it - possible changes to Makefile.PL etc.
-
-=item *
-
-How to install it.
-
-=item *
-
-Recent changes in this release, especially incompatibilities
-
-=item *
-
-Changes / enhancements you plan to make in the future.
-
-=back
-
-If the README file seems to be getting too large you may wish to
-split out some of the sections into separate files: INSTALL,
-Copying, ToDo etc.
-
-=over 4
-
-=item Adding a Copyright Notice.
-
-
-How you choose to license your work is a personal decision.
-The general mechanism is to assert your Copyright and then make
-a declaration of how others may copy/use/modify your work.
-
-Perl, for example, is supplied with two types of licence: The GNU
-GPL and The Artistic Licence (see the files README, Copying, and
-Artistic). Larry has good reasons for NOT just using the GNU GPL.
-
-My personal recommendation, out of respect for Larry, Perl, and the
-Perl community at large is to state something simply like:
-
- Copyright (c) 1995 Your Name. All rights reserved.
- This program is free software; you can redistribute it and/or
- modify it under the same terms as Perl itself.
-
-This statement should at least appear in the README file. You may
-also wish to include it in a Copying file and your source files.
-Remember to include the other words in addition to the Copyright.
-
-=item *
-
-Give the module a version/issue/release number.
-
-To be fully compatible with the Exporter and MakeMaker modules you
-should store your module's version number in a non-my package
-variable called $VERSION. This should be a floating point
-number with at least two digits after the decimal (i.e., hundredths,
-e.g, C<$VERSION = "0.01">). Don't use a "1.3.2" style version.
-See L<Exporter> for details.
-
-It may be handy to add a function or method to retrieve the number.
-Use the number in announcements and archive file names when
-releasing the module (ModuleName-1.02.tar.Z).
-See perldoc ExtUtils::MakeMaker.pm for details.
-
-=item *
-
-How to release and distribute a module.
-
-It's good idea to post an announcement of the availability of your
-module (or the module itself if small) to the comp.lang.perl.announce
-Usenet newsgroup. This will at least ensure very wide once-off
-distribution.
-
-If possible, register the module with CPAN. You should
-include details of its location in your announcement.
-
-Some notes about ftp archives: Please use a long descriptive file
-name that includes the version number. Most incoming directories
-will not be readable/listable, i.e., you won't be able to see your
-file after uploading it. Remember to send your email notification
-message as soon as possible after uploading else your file may get
-deleted automatically. Allow time for the file to be processed
-and/or check the file has been processed before announcing its
-location.
-
-FTP Archives for Perl Modules:
-
-Follow the instructions and links on:
-
- http://www.cpan.org/modules/00modlist.long.html
- http://www.cpan.org/modules/04pause.html
-
-or upload to one of these sites:
-
- https://pause.kbx.de/pause/
- http://pause.perl.org/pause/
-
-and notify <modules@perl.org>.
-
-By using the WWW interface you can ask the Upload Server to mirror
-your modules from your ftp or WWW site into your own directory on
-CPAN!
-
-Please remember to send me an updated entry for the Module list!
-
-=item *
-
-Take care when changing a released module.
-
-Always strive to remain compatible with previous released versions.
-Otherwise try to add a mechanism to revert to the
-old behavior if people rely on it. Document incompatible changes.
-
-=back
-
-=back
-
-=head2 Guidelines for Converting Perl 4 Library Scripts into Modules
-
-=over 4
-
-=item *
-
-There is no requirement to convert anything.
-
-If it ain't broke, don't fix it! Perl 4 library scripts should
-continue to work with no problems. You may need to make some minor
-changes (like escaping non-array @'s in double quoted strings) but
-there is no need to convert a .pl file into a Module for just that.
-
-=item *
-
-Consider the implications.
-
-All Perl applications that make use of the script will need to
-be changed (slightly) if the script is converted into a module. Is
-it worth it unless you plan to make other changes at the same time?
-
-=item *
-
-Make the most of the opportunity.
-
-If you are going to convert the script to a module you can use the
-opportunity to redesign the interface. The guidelines for module
-creation above include many of the issues you should consider.
-
-=item *
-
-The pl2pm utility will get you started.
-
-This utility will read *.pl files (given as parameters) and write
-corresponding *.pm files. The pl2pm utilities does the following:
-
-=over 10
-
-=item *
-
-Adds the standard Module prologue lines
-
-=item *
-
-Converts package specifiers from ' to ::
-
-=item *
-
-Converts die(...) to croak(...)
-
-=item *
-
-Several other minor changes
-
-=back
-
-Being a mechanical process pl2pm is not bullet proof. The converted
-code will need careful checking, especially any package statements.
-Don't delete the original .pl file till the new .pm one works!
-
-=back
-
-=head2 Guidelines for Reusing Application Code
-
-=over 4
-
-=item *
-
-Complete applications rarely belong in the Perl Module Library.
-
-=item *
-
-Many applications contain some Perl code that could be reused.
-
-Help save the world! Share your code in a form that makes it easy
-to reuse.
-
-=item *
-
-Break-out the reusable code into one or more separate module files.
-
-=item *
-
-Take the opportunity to reconsider and redesign the interfaces.
-
-=item *
-
-In some cases the 'application' can then be reduced to a small
-
-fragment of code built on top of the reusable modules. In these cases
-the application could invoked as:
-
- % perl -e 'use Module::Name; method(@ARGV)' ...
-or
- % perl -mModule::Name ... (in perl5.002 or higher)
-
-=back
-
-=head1 NOTE
-
-Perl does not enforce private and public parts of its modules as you may
-have been used to in other languages like C++, Ada, or Modula-17. Perl
-doesn't have an infatuation with enforced privacy. It would prefer
-that you stayed out of its living room because you weren't invited, not
-because it has a shotgun.
-
-The module and its user have a contract, part of which is common law,
-and part of which is "written". Part of the common law contract is
-that a module doesn't pollute any namespace it wasn't asked to. The
-written contract for the module (A.K.A. documentation) may make other
-provisions. But then you know when you C<use RedefineTheWorld> that
-you're redefining the world and willing to take the consequences.
-EOF
-
-close MANIFEST or warn "$0: failed to close MANIFEST (../MANIFEST): $!";
-close OUT or warn "$0: failed to close OUT (perlmodlib.tmp): $!";
-
diff --git a/contrib/perl5/pod/perlmodlib.pod b/contrib/perl5/pod/perlmodlib.pod
deleted file mode 100644
index 90bdb43..0000000
--- a/contrib/perl5/pod/perlmodlib.pod
+++ /dev/null
@@ -1,2042 +0,0 @@
-# Generated by perlmodlib.PL DO NOT EDIT!
-
-=head1 NAME
-
-perlmodlib - constructing new Perl modules and finding existing ones
-
-=head1 DESCRIPTION
-
-=head1 THE PERL MODULE LIBRARY
-
-Many modules are included the Perl distribution. These are described
-below, and all end in F<.pm>. You may discover compiled library
-file (usually ending in F<.so>) or small pieces of modules to be
-autoloaded (ending in F<.al>); these were automatically generated
-by the installation process. You may also discover files in the
-library directory that end in either F<.pl> or F<.ph>. These are
-old libraries supplied so that old programs that use them still
-run. The F<.pl> files will all eventually be converted into standard
-modules, and the F<.ph> files made by B<h2ph> will probably end up
-as extension modules made by B<h2xs>. (Some F<.ph> values may
-already be available through the POSIX, Errno, or Fcntl modules.)
-The B<pl2pm> file in the distribution may help in your conversion,
-but it's just a mechanical process and therefore far from bulletproof.
-
-=head2 Pragmatic Modules
-
-They work somewhat like compiler directives (pragmata) in that they
-tend to affect the compilation of your program, and thus will usually
-work well only when used within a C<use>, or C<no>. Most of these
-are lexically scoped, so an inner BLOCK may countermand them
-by saying:
-
- no integer;
- no strict 'refs';
- no warnings;
-
-which lasts until the end of that BLOCK.
-
-Some pragmas are lexically scoped--typically those that affect the
-C<$^H> hints variable. Others affect the current package instead,
-like C<use vars> and C<use subs>, which allow you to predeclare a
-variables or subroutines within a particular I<file> rather than
-just a block. Such declarations are effective for the entire file
-for which they were declared. You cannot rescind them with C<no
-vars> or C<no subs>.
-
-The following pragmas are defined (and have their own documentation).
-
-=over 12
-
-=item attributes
-
-Get/set subroutine or variable attributes
-
-=item attrs
-
-Set/get attributes of a subroutine (deprecated)
-
-=item autouse
-
-Postpone load of modules until a function is used
-
-=item base
-
-Establish IS-A relationship with base class at compile time
-
-=item blib
-
-Use MakeMaker's uninstalled version of a package
-
-=item bytes
-
-Force byte semantics rather than character semantics
-
-=item charnames
-
-Define character names for C<\N{named}> string literal escape.
-
-=item constant
-
-Declare constants
-
-=item diagnostics
-
-Perl compiler pragma to force verbose warning diagnostics
-
-=item fields
-
-Compile-time class fields
-
-=item filetest
-
-Control the filetest permission operators
-
-=item integer
-
-Use integer arithmetic instead of floating point
-
-=item less
-
-Request less of something from the compiler
-
-=item lib
-
-Manipulate @INC at compile time
-
-=item locale
-
-Use and avoid POSIX locales for built-in operations
-
-=item open
-
-Set default disciplines for input and output
-
-=item ops
-
-Restrict unsafe operations when compiling
-
-=item overload
-
-Package for overloading perl operations
-
-=item re
-
-Alter regular expression behaviour
-
-=item sigtrap
-
-Enable simple signal handling
-
-=item strict
-
-Restrict unsafe constructs
-
-=item subs
-
-Predeclare sub names
-
-=item utf8
-
-Enable/disable UTF-8 in source code
-
-=item vars
-
-Predeclare global variable names (obsolete)
-
-=item warnings
-
-Control optional warnings
-
-=item warnings::register
-
-Warnings import function
-
-=back
-
-=head2 Standard Modules
-
-Standard, bundled modules are all expected to behave in a well-defined
-manner with respect to namespace pollution because they use the
-Exporter module. See their own documentation for details.
-
-=over 12
-
-=item AnyDBM_File
-
-Provide framework for multiple DBMs
-
-=item AutoLoader
-
-Load subroutines only on demand
-
-=item AutoSplit
-
-Split a package for autoloading
-
-=item B
-
-The Perl Compiler
-
-=item B::Asmdata
-
-Autogenerated data about Perl ops, used to generate bytecode
-
-=item B::Assembler
-
-Assemble Perl bytecode
-
-=item B::Bblock
-
-Walk basic blocks
-
-=item B::Bytecode
-
-Perl compiler's bytecode backend
-
-=item B::C
-
-Perl compiler's C backend
-
-=item B::CC
-
-Perl compiler's optimized C translation backend
-
-=item B::Concise
-
-Walk Perl syntax tree, printing concise info about ops
-
-=item B::Debug
-
-Walk Perl syntax tree, printing debug info about ops
-
-=item B::Deparse
-
-Perl compiler backend to produce perl code
-
-=item B::Disassembler
-
-Disassemble Perl bytecode
-
-=item B::Lint
-
-Perl lint
-
-=item B::Showlex
-
-Show lexical variables used in functions or files
-
-=item B::Stackobj
-
-Helper module for CC backend
-
-=item B::Stash
-
-Show what stashes are loaded
-
-=item B::Terse
-
-Walk Perl syntax tree, printing terse info about ops
-
-=item B::Xref
-
-Generates cross reference reports for Perl programs
-
-=item Benchmark
-
-Benchmark running times of Perl code
-
-=item ByteLoader
-
-Load byte compiled perl code
-
-=item CGI
-
-Simple Common Gateway Interface Class
-
-=item CGI::Apache
-
-Backward compatibility module for CGI.pm
-
-=item CGI::Carp
-
-CGI routines for writing to the HTTPD (or other) error log
-
-=item CGI::Cookie
-
-Interface to Netscape Cookies
-
-=item CGI::Fast
-
-CGI Interface for Fast CGI
-
-=item CGI::Pretty
-
-Module to produce nicely formatted HTML code
-
-=item CGI::Push
-
-Simple Interface to Server Push
-
-=item CGI::Switch
-
-Backward compatibility module for defunct CGI::Switch
-
-=item CGI::Util
-
-Internal utilities used by CGI module
-
-=item CPAN
-
-Query, download and build perl modules from CPAN sites
-
-=item CPAN::FirstTime
-
-Utility for CPAN::Config file Initialization
-
-=item CPAN::Nox
-
-Wrapper around CPAN.pm without using any XS module
-
-=item Carp
-
-Warn of errors (from perspective of caller)
-
-=item Carp::Heavy
-
-Carp guts
-
-=item Class::Struct
-
-Declare struct-like datatypes as Perl classes
-
-=item Cwd
-
-Get pathname of current working directory
-
-=item DB
-
-Programmatic interface to the Perl debugging API (draft, subject to
-
-=item DB_File
-
-Perl5 access to Berkeley DB version 1.x
-
-=item Devel::SelfStubber
-
-Generate stubs for a SelfLoading module
-
-=item DirHandle
-
-Supply object methods for directory handles
-
-=item Dumpvalue
-
-Provides screen dump of Perl data.
-
-=item English
-
-Use nice English (or awk) names for ugly punctuation variables
-
-=item Env
-
-Perl module that imports environment variables as scalars or arrays
-
-=item Exporter
-
-Implements default import method for modules
-
-=item Exporter::Heavy
-
-Exporter guts
-
-=item ExtUtils::Command
-
-Utilities to replace common UNIX commands in Makefiles etc.
-
-=item ExtUtils::Embed
-
-Utilities for embedding Perl in C/C++ applications
-
-=item ExtUtils::Install
-
-Install files from here to there
-
-=item ExtUtils::Installed
-
-Inventory management of installed modules
-
-=item ExtUtils::Liblist
-
-Determine libraries to use and how to use them
-
-=item ExtUtils::MM_Cygwin
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_OS2
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_Unix
-
-Methods used by ExtUtils::MakeMaker
-
-=item ExtUtils::MM_VMS
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MM_Win32
-
-Methods to override UN*X behaviour in ExtUtils::MakeMaker
-
-=item ExtUtils::MakeMaker
-
-Create an extension Makefile
-
-=item ExtUtils::Manifest
-
-Utilities to write and check a MANIFEST file
-
-=item ExtUtils::Mkbootstrap
-
-Make a bootstrap file for use by DynaLoader
-
-=item ExtUtils::Mksymlists
-
-Write linker options files for dynamic extension
-
-=item ExtUtils::Packlist
-
-Manage .packlist files
-
-=item ExtUtils::testlib
-
-Add blib/* directories to @INC
-
-=item Fatal
-
-Replace functions with equivalents which succeed or die
-
-=item Fcntl
-
-Load the C Fcntl.h defines
-
-=item File::Basename
-
-Split a pathname into pieces
-
-=item File::CheckTree
-
-Run many filetest checks on a tree
-
-=item File::Compare
-
-Compare files or filehandles
-
-=item File::Copy
-
-Copy files or filehandles
-
-=item File::DosGlob
-
-DOS like globbing and then some
-
-=item File::Find
-
-Traverse a file tree
-
-=item File::Path
-
-Create or remove directory trees
-
-=item File::Spec
-
-Portably perform operations on file names
-
-=item File::Spec::Epoc
-
-Methods for Epoc file specs
-
-=item File::Spec::Functions
-
-Portably perform operations on file names
-
-=item File::Spec::Mac
-
-File::Spec for MacOS
-
-=item File::Spec::OS2
-
-Methods for OS/2 file specs
-
-=item File::Spec::Unix
-
-Methods used by File::Spec
-
-=item File::Spec::VMS
-
-Methods for VMS file specs
-
-=item File::Spec::Win32
-
-Methods for Win32 file specs
-
-=item File::Temp
-
-Return name and handle of a temporary file safely
-
-=item File::stat
-
-By-name interface to Perl's built-in stat() functions
-
-=item FileCache
-
-Keep more files open than the system permits
-
-=item FileHandle
-
-Supply object methods for filehandles
-
-=item FindBin
-
-Locate directory of original perl script
-
-=item GDBM_File
-
-Perl5 access to the gdbm library.
-
-=item Getopt::Long
-
-Extended processing of command line options
-
-=item Getopt::Std
-
-Process single-character switches with switch clustering
-
-=item I18N::Collate
-
-Compare 8-bit scalar data according to the current locale
-
-=item IO
-
-Load various IO modules
-
-=item IPC::Open2
-
-Open a process for both reading and writing
-
-=item IPC::Open3
-
-Open a process for reading, writing, and error handling
-
-=item Math::BigFloat
-
-Arbitrary length float math package
-
-=item Math::BigInt
-
-Arbitrary size integer math package
-
-=item Math::Complex
-
-Complex numbers and associated mathematical functions
-
-=item Math::Trig
-
-Trigonometric functions
-
-=item Net::Ping
-
-Check a remote host for reachability
-
-=item Net::hostent
-
-By-name interface to Perl's built-in gethost*() functions
-
-=item Net::netent
-
-By-name interface to Perl's built-in getnet*() functions
-
-=item Net::protoent
-
-By-name interface to Perl's built-in getproto*() functions
-
-=item Net::servent
-
-By-name interface to Perl's built-in getserv*() functions
-
-=item O
-
-Generic interface to Perl Compiler backends
-
-=item Opcode
-
-Disable named opcodes when compiling perl code
-
-=item POSIX
-
-Perl interface to IEEE Std 1003.1
-
-=item Pod::Checker
-
-Check pod documents for syntax errors
-
-=item Pod::Find
-
-Find POD documents in directory trees
-
-=item Pod::Html
-
-Module to convert pod files to HTML
-
-=item Pod::InputObjects
-
-Objects representing POD input paragraphs, commands, etc.
-
-=item Pod::LaTeX
-
-Convert Pod data to formatted Latex
-
-=item Pod::Man
-
-Convert POD data to formatted *roff input
-
-=item Pod::ParseUtils
-
-Helpers for POD parsing and conversion
-
-=item Pod::Parser
-
-Base class for creating POD filters and translators
-
-=item Pod::Plainer
-
-Perl extension for converting Pod to old style Pod.
-
-=item Pod::Select
-
-Extract selected sections of POD from input
-
-=item Pod::Text
-
-Convert POD data to formatted ASCII text
-
-=item Pod::Text::Color
-
-Convert POD data to formatted color ASCII text
-
-=item Pod::Text::Overstrike
-
-Convert POD data to formatted overstrike text
-
-=item Pod::Text::Termcap
-
-Convert POD data to ASCII text with format escapes
-
-=item Pod::Usage
-
-Print a usage message from embedded pod documentation
-
-=item SDBM_File
-
-Tied access to sdbm files
-
-=item Safe
-
-Compile and execute code in restricted compartments
-
-=item Search::Dict
-
-Search for key in dictionary file
-
-=item SelectSaver
-
-Save and restore selected file handle
-
-=item SelfLoader
-
-Load functions only on demand
-
-=item Shell
-
-Run shell commands transparently within perl
-
-=item Socket
-
-Load the C socket.h defines and structure manipulators
-
-=item Symbol
-
-Manipulate Perl symbols and their names
-
-=item Term::ANSIColor
-
-Color screen output using ANSI escape sequences
-
-=item Term::Cap
-
-Perl termcap interface
-
-=item Term::Complete
-
-Perl word completion module
-
-=item Term::ReadLine
-
-Perl interface to various C<readline> packages. If
-
-=item Test
-
-Provides a simple framework for writing test scripts
-
-=item Test::Harness
-
-Run perl standard test scripts with statistics
-
-=item Text::Abbrev
-
-Create an abbreviation table from a list
-
-=item Text::ParseWords
-
-Parse text into an array of tokens or array of arrays
-
-=item Text::Soundex
-
-Implementation of the Soundex Algorithm as Described by Knuth
-
-=item Text::Tabs
-
-Expand and unexpand tabs per the unix expand(1) and unexpand(1)
-
-=item Text::Wrap
-
-Line wrapping to form simple paragraphs
-
-=item Thread
-
-Manipulate threads in Perl (EXPERIMENTAL, subject to change)
-
-=item Thread::Queue
-
-Thread-safe queues
-
-=item Thread::Semaphore
-
-Thread-safe semaphores
-
-=item Thread::Signal
-
-Start a thread which runs signal handlers reliably
-
-=item Thread::Specific
-
-Thread-specific keys
-
-=item Tie::Array
-
-Base class for tied arrays
-
-=item Tie::Handle
-
-Base class definitions for tied handles
-
-=item Tie::Hash
-
-Base class definitions for tied hashes
-
-=item Tie::RefHash
-
-Use references as hash keys
-
-=item Tie::Scalar
-
-Base class definitions for tied scalars
-
-=item Tie::SubstrHash
-
-Fixed-table-size, fixed-key-length hashing
-
-=item Time::Local
-
-Efficiently compute time from local and GMT time
-
-=item Time::gmtime
-
-By-name interface to Perl's built-in gmtime() function
-
-=item Time::localtime
-
-By-name interface to Perl's built-in localtime() function
-
-=item Time::tm
-
-Internal object used by Time::gmtime and Time::localtime
-
-=item UNIVERSAL
-
-Base class for ALL classes (blessed references)
-
-=item User::grent
-
-By-name interface to Perl's built-in getgr*() functions
-
-=item User::pwent
-
-By-name interface to Perl's built-in getpw*() functions
-
-=item Win32
-
-Interfaces to some Win32 API Functions
-
-=back
-
-To find out I<all> modules installed on your system, including
-those without documentation or outside the standard release,
-just do this:
-
- % find `perl -e 'print "@INC"'` -name '*.pm' -print
-
-They should all have their own documentation installed and accessible
-via your system man(1) command. If you do not have a B<find>
-program, you can use the Perl B<find2perl> program instead, which
-generates Perl code as output you can run through perl. If you
-have a B<man> program but it doesn't find your modules, you'll have
-to fix your manpath. See L<perl> for details. If you have no
-system B<man> command, you might try the B<perldoc> program.
-
-=head2 Extension Modules
-
-Extension modules are written in C (or a mix of Perl and C). They
-are usually dynamically loaded into Perl if and when you need them,
-but may also be be linked in statically. Supported extension modules
-include Socket, Fcntl, and POSIX.
-
-Many popular C extension modules do not come bundled (at least, not
-completely) due to their sizes, volatility, or simply lack of time
-for adequate testing and configuration across the multitude of
-platforms on which Perl was beta-tested. You are encouraged to
-look for them on CPAN (described below), or using web search engines
-like Alta Vista or Deja News.
-
-=head1 CPAN
-
-CPAN stands for Comprehensive Perl Archive Network; it's a globally
-replicated trove of Perl materials, including documentation, style
-guides, tricks and traps, alternate ports to non-Unix systems and
-occasional binary distributions for these. Search engines for
-CPAN can be found at http://cpan.perl.com/ and at
-http://theory.uwinnipeg.ca/mod_perl/cpan-search.pl .
-
-Most importantly, CPAN includes around a thousand unbundled modules,
-some of which require a C compiler to build. Major categories of
-modules are:
-
-=over
-
-=item *
-
-Language Extensions and Documentation Tools
-
-=item *
-
-Development Support
-
-=item *
-
-Operating System Interfaces
-
-=item *
-
-Networking, Device Control (modems) and InterProcess Communication
-
-=item *
-
-Data Types and Data Type Utilities
-
-=item *
-
-Database Interfaces
-
-=item *
-
-User Interfaces
-
-=item *
-
-Interfaces to / Emulations of Other Programming Languages
-
-=item *
-
-File Names, File Systems and File Locking (see also File Handles)
-
-=item *
-
-String Processing, Language Text Processing, Parsing, and Searching
-
-=item *
-
-Option, Argument, Parameter, and Configuration File Processing
-
-=item *
-
-Internationalization and Locale
-
-=item *
-
-Authentication, Security, and Encryption
-
-=item *
-
-World Wide Web, HTML, HTTP, CGI, MIME
-
-=item *
-
-Server and Daemon Utilities
-
-=item *
-
-Archiving and Compression
-
-=item *
-
-Images, Pixmap and Bitmap Manipulation, Drawing, and Graphing
-
-=item *
-
-Mail and Usenet News
-
-=item *
-
-Control Flow Utilities (callbacks and exceptions etc)
-
-=item *
-
-File Handle and Input/Output Stream Utilities
-
-=item *
-
-Miscellaneous Modules
-
-=back
-
-Registered CPAN sites as of this writing include the following.
-You should try to choose one close to you:
-
-=head2 Africa
-
-=over 4
-
-=item *
-
-South Africa
-
- ftp://ftp.is.co.za/programming/perl/CPAN/
- ftp://ftp.saix.net/pub/CPAN/
- ftp://ftpza.co.za/pub/mirrors/cpan/
- ftp://ftp.sun.ac.za/CPAN/
-
-=back
-
-=head2 Asia
-
-=over 4
-
-=item *
-
-China
-
- ftp://freesoft.cei.gov.cn/pub/languages/perl/CPAN/
- http://www2.linuxforum.net/mirror/CPAN/
- http://cpan.shellhung.org/
- ftp://ftp.shellhung.org/pub/CPAN
-
-=item *
-
-Hong Kong
-
- http://CPAN.pacific.net.hk/
- ftp://ftp.pacific.net.hk/pub/mirror/CPAN/
-
-=item *
-
-Indonesia
-
- http://piksi.itb.ac.id/CPAN/
- ftp://mirrors.piksi.itb.ac.id/CPAN/
- http://CPAN.mweb.co.id/
- ftp://ftp.mweb.co.id/pub/languages/perl/CPAN/
-
-=item *
-
-Israel
-
- http://www.iglu.org.il:/pub/CPAN/
- ftp://ftp.iglu.org.il/pub/CPAN/
- http://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
- ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
-
-=item *
-
-Japan
-
- ftp://ftp.u-aizu.ac.jp/pub/lang/perl/CPAN/
- ftp://ftp.kddlabs.co.jp/CPAN/
- http://mirror.nucba.ac.jp/mirror/Perl/
- ftp://mirror.nucba.ac.jp/mirror/Perl/
- ftp://ftp.meisei-u.ac.jp/pub/CPAN/
- ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
- ftp://ftp.dti.ad.jp/pub/lang/CPAN/
- ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
-
-=item *
-
-Saudi Arabia
-
- ftp://ftp.isu.net.sa/pub/CPAN/
-
-=item *
-
-Singapore
-
- http://cpan.hjc.edu.sg
- http://ftp.nus.edu.sg/unix/perl/CPAN/
- ftp://ftp.nus.edu.sg/pub/unix/perl/CPAN/
-
-=item *
-
-South Korea
-
- http://CPAN.bora.net/
- ftp://ftp.bora.net/pub/CPAN/
- http://ftp.kornet.net/CPAN/
- ftp://ftp.kornet.net/pub/CPAN/
- ftp://ftp.nuri.net/pub/CPAN/
-
-=item *
-
-Taiwan
-
- ftp://coda.nctu.edu.tw/UNIX/perl/CPAN
- ftp://ftp.ee.ncku.edu.tw/pub/perl/CPAN/
- ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
-
-=item *
-
-Thailand
-
- http://download.nectec.or.th/CPAN/
- ftp://ftp.nectec.or.th/pub/languages/CPAN/
- ftp://ftp.cs.riubon.ac.th/pub/mirrors/CPAN/
-
-=back
-
-=head2 Central America
-
-=over 4
-
-=item *
-
-Costa Rica
-
- ftp://ftp.linux.co.cr/mirrors/CPAN/
- http://ftp.ucr.ac.cr/Unix/CPAN/
- ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
-
-=back
-
-=head2 Europe
-
-=over 4
-
-=item *
-
-Austria
-
- ftp://ftp.tuwien.ac.at/pub/languages/perl/CPAN/
-
-=item *
-
-Belgium
-
- http://ftp.easynet.be/CPAN/
- ftp://ftp.easynet.be/CPAN/
- ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
-
-=item *
-
-Bulgaria
-
- ftp://ftp.ntrl.net/pub/mirrors/CPAN/
-
-=item *
-
-Croatia
-
- ftp://ftp.linux.hr/pub/CPAN/
-
-=item *
-
-Czech Republic
-
- http://www.fi.muni.cz/pub/perl/
- ftp://ftp.fi.muni.cz/pub/perl/
- ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.funet.fi/pub/languages/perl/CPAN/
-
-=item *
-
-Denmark
-
- ftp://sunsite.auc.dk/pub/languages/perl/CPAN/
- http://www.cpan.dk/CPAN/
- ftp://www.cpan.dk/ftp.cpan.org/CPAN/
-
-=item *
-
-England
-
- http://www.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN
- ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
- ftp://ftp.demon.co.uk/pub/mirrors/perl/CPAN/
- ftp://ftp.flirble.org/pub/languages/perl/CPAN/
- ftp://ftp.plig.org/pub/CPAN/
- ftp://sunsite.doc.ic.ac.uk/packages/CPAN/
- http://mirror.uklinux.net/CPAN/
- ftp://mirror.uklinux.net/pub/CPAN/
- ftp://usit.shef.ac.uk/pub/packages/CPAN/
-
-=item *
-
-Estonia
-
- ftp://ftp.ut.ee/pub/languages/perl/CPAN/
-
-=item *
-
-Finland
-
- ftp://ftp.funet.fi/pub/languages/perl/CPAN/
-
-=item *
-
-France
-
- ftp://cpan.ftp.worldonline.fr/pub/CPAN/
- ftp://ftp.club-internet.fr/pub/perl/CPAN/
- ftp://ftp.lip6.fr/pub/perl/CPAN/
- ftp://ftp.oleane.net/pub/mirrors/CPAN/
- ftp://ftp.pasteur.fr/pub/computing/CPAN/
- ftp://cpan.cict.fr/pub/CPAN/
- ftp://ftp.uvsq.fr/pub/perl/CPAN/
-
-=item *
-
-Germany
-
- ftp://ftp.rz.ruhr-uni-bochum.de/pub/CPAN/
- ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
- ftp://ftp.uni-erlangen.de/pub/source/CPAN/
- ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/CPAN
- ftp://ftp.gigabell.net/pub/CPAN/
- http://ftp.gwdg.de/pub/languages/perl/CPAN/
- ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
- ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
- ftp://ftp.leo.org/pub/comp/general/programming/languages/script/perl/CPAN/
- ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
- ftp://ftp.gmd.de/mirrors/CPAN/
-
-=item *
-
-Greece
-
- ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
- ftp://ftp.ntua.gr/pub/lang/perl/
-
-=item *
-
-Hungary
-
- http://cpan.artifact.hu/
- ftp://cpan.artifact.hu/CPAN/
- ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
-
-=item *
-
-Iceland
-
- http://cpan.gm.is/
- ftp://ftp.gm.is/pub/CPAN/
-
-=item *
-
-Ireland
-
- http://cpan.indigo.ie/
- ftp://cpan.indigo.ie/pub/CPAN/
- http://sunsite.compapp.dcu.ie/pub/perl/
- ftp://sunsite.compapp.dcu.ie/pub/perl/
-
-=item *
-
-Italy
-
- http://cpan.nettuno.it/
- http://gusp.dyndns.org/CPAN/
- ftp://gusp.dyndns.org/pub/CPAN
- http://softcity.iol.it/cpan
- ftp://softcity.iol.it/pub/cpan
- ftp://ftp.unina.it/pub/Other/CPAN/
- ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
- ftp://cis.uniRoma2.it/CPAN/
- ftp://ftp.edisontel.it/pub/CPAN_Mirror/
- ftp://ftp.flashnet.it/pub/CPAN/
-
-=item *
-
-Latvia
-
- http://kvin.lv/pub/CPAN/
-
-=item *
-
-Netherlands
-
- ftp://download.xs4all.nl/pub/mirror/CPAN/
- ftp://ftp.nl.uu.net/pub/CPAN/
- ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
- ftp://ftp.cpan.nl/pub/CPAN/
- http://www.cs.uu.nl/mirror/CPAN/
- ftp://ftp.cs.uu.nl/mirror/CPAN/
-
-=item *
-
-Norway
-
- ftp://sunsite.uio.no/pub/languages/perl/CPAN/
- ftp://ftp.uit.no/pub/languages/perl/cpan/
-
-=item *
-
-Poland
-
- ftp://ftp.pk.edu.pl/pub/lang/perl/CPAN/
- ftp://ftp.mega.net.pl/pub/mirrors/ftp.perl.com/
- ftp://ftp.man.torun.pl/pub/doc/CPAN/
- ftp://sunsite.icm.edu.pl/pub/CPAN/
-
-=item *
-
-Portugal
-
- ftp://ftp.ua.pt/pub/CPAN/
- ftp://perl.di.uminho.pt/pub/CPAN/
- ftp://ftp.ist.utl.pt/pub/CPAN/
- ftp://ftp.netc.pt/pub/CPAN/
-
-=item *
-
-Romania
-
- ftp://archive.logicnet.ro/mirrors/ftp.cpan.org/CPAN/
- ftp://ftp.kappa.ro/pub/mirrors/ftp.perl.org/pub/CPAN/
- ftp://ftp.dntis.ro/pub/cpan/
- ftp://ftp.opsynet.com/cpan/
- ftp://ftp.dnttm.ro/pub/CPAN/
- ftp://ftp.timisoara.roedu.net/mirrors/CPAN/
-
-=item *
-
-Russia
-
- ftp://ftp.chg.ru/pub/lang/perl/CPAN/
- http://cpan.rinet.ru/
- ftp://cpan.rinet.ru/pub/mirror/CPAN/
- ftp://ftp.aha.ru/pub/CPAN/
- ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
-
-=item *
-
-Slovakia
-
- ftp://ftp.entry.sk/pub/languages/perl/CPAN/
-
-=item *
-
-Slovenia
-
- ftp://ftp.arnes.si/software/perl/CPAN/
-
-=item *
-
-Spain
-
- ftp://ftp.rediris.es/mirror/CPAN/
- ftp://ftp.etse.urv.es/pub/perl/
-
-=item *
-
-Sweden
-
- http://ftp.du.se/CPAN/
- ftp://ftp.du.se/pub/CPAN/
- ftp://ftp.sunet.se/pub/lang/perl/CPAN/
-
-=item *
-
-Switzerland
-
- ftp://ftp.danyk.ch/CPAN/
- ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
-
-=item *
-
-Turkey
-
- ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
-
-=back
-
-=head2 North America
-
-=over 4
-
-=item *
-
-Canada
-
-=over 8
-
-=item *
-
-Alberta
-
- http://sunsite.ualberta.ca/pub/Mirror/CPAN/
- ftp://sunsite.ualberta.ca/pub/Mirror/CPAN/
-
-=item *
-
-Manitoba
-
- http://theoryx5.uwinnipeg.ca/pub/CPAN/
- ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
-
-=item *
-
-Nova Scotia
-
- ftp://cpan.chebucto.ns.ca/pub/CPAN/
-
-=item *
-
-Ontario
-
- ftp://ftp.crc.ca/pub/packages/lang/perl/CPAN/
-
-=item *
-
-Mexico
-
- http://www.msg.com.mx/CPAN/
- ftp://ftp.msg.com.mx/pub/CPAN/
-
-=back
-
-=item *
-
-United States
-
-=over 8
-
-=item *
-
-Alabama
-
- http://mirror.hiwaay.net/CPAN/
- ftp://mirror.hiwaay.net/CPAN/
-
-=item *
-
-California
-
- http://www.cpan.org/
- ftp://ftp.cpan.org/CPAN/
- ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
- ftp://ftp.digital.com/pub/plan/perl/CPAN/
- http://www.kernel.org/pub/mirrors/cpan/
- ftp://ftp.kernel.org/pub/mirrors/cpan/
- http://www.perl.com/CPAN/
- http://download.sourceforge.net/mirrors/CPAN/
-
-=item *
-
-Colorado
-
- ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
-
-=item *
-
-Florida
-
- ftp://ftp.cise.ufl.edu/pub/perl/CPAN/
-
-=item *
-
-Georgia
-
- ftp://ftp.twoguys.org/CPAN/
-
-=item *
-
-Illinois
-
- http://www.neurogames.com/mirrors/CPAN
- http://uiarchive.uiuc.edu/mirrors/ftp/ftp.cpan.org/pub/CPAN/
- ftp://uiarchive.uiuc.edu/mirrors/ftp/ftp.cpan.org/pub/CPAN/
-
-=item *
-
-Indiana
-
- ftp://ftp.uwsg.indiana.edu/pub/perl/CPAN/
- http://cpan.nitco.com/
- ftp://cpan.nitco.com/pub/CPAN/
- ftp://cpan.in-span.net/
- http://csociety-ftp.ecn.purdue.edu/pub/CPAN
- ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN
-
-=item *
-
-Kentucky
-
- http://cpan.uky.edu/
- ftp://cpan.uky.edu/pub/CPAN/
-
-=item *
-
-Massachusetts
-
- ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
- ftp://ftp.iguide.com/pub/mirrors/packages/perl/CPAN/
-
-=item *
-
-New Jersey
-
- ftp://ftp.cpanel.net/pub/CPAN/
-
-=item *
-
-New York
-
- ftp://ftp.freesoftware.com/pub/perl/CPAN/
- http://www.deao.net/mirrors/CPAN/
- ftp://ftp.deao.net/pub/CPAN/
- ftp://ftp.stealth.net/pub/mirrors/ftp.cpan.org/pub/CPAN/
- http://mirror.nyc.anidea.com/CPAN/
- ftp://mirror.nyc.anidea.com/pub/CPAN/
- http://www.rge.com/pub/languages/perl/
- ftp://ftp.rge.com/pub/languages/perl/
- ftp://mirrors.cloud9.net/pub/mirrors/CPAN/
-
-=item *
-
-North Carolina
-
- ftp://ftp.duke.edu/pub/perl/
-
-=item *
-
-Ohio
-
- ftp://ftp.loaded.net/pub/CPAN/
-
-=item *
-
-Oklahoma
-
- ftp://ftp.ou.edu/mirrors/CPAN/
-
-=item *
-
-Oregon
-
- ftp://ftp.orst.edu/pub/packages/CPAN/
-
-=item *
-
-Pennsylvania
-
- http://ftp.epix.net/CPAN/
- ftp://ftp.epix.net/pub/languages/perl/
- ftp://carroll.cac.psu.edu/pub/CPAN/
-
-=item *
-
-Tennessee
-
- ftp://ftp.sunsite.utk.edu/pub/CPAN/
-
-=item *
-
-Texas
-
- http://ftp.sedl.org/pub/mirrors/CPAN/
- http://jhcloos.com/pub/mirror/CPAN/
- ftp://jhcloos.com/pub/mirror/CPAN/
-
-=item *
-
-Utah
-
- ftp://mirror.xmission.com/CPAN/
-
-=item *
-
-Virginia
-
- http://mirrors.rcn.net/pub/lang/CPAN/
- ftp://mirrors.rcn.net/pub/lang/CPAN/
- ftp://ruff.cs.jmu.edu/pub/CPAN/
- http://perl.Liquidation.com/CPAN/
-
-=item *
-
-Washington
-
- http://cpan.llarian.net/
- ftp://cpan.llarian.net/pub/CPAN/
- ftp://ftp-mirror.internap.com/pub/CPAN/
- ftp://ftp.spu.edu/pub/CPAN/
-
-=back
-
-=back
-
-=head2 Oceania
-
-=over 4
-
-=item *
-
-Australia
-
- http://ftp.planetmirror.com/pub/CPAN/
- ftp://ftp.planetmirror.com/pub/CPAN/
- ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
- ftp://cpan.topend.com.au/pub/CPAN/
-
-=item *
-
-New Zealand
-
- ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
-
-=back
-
-=head2 South America
-
-=over 4
-
-=item *
-
-Argentina
-
- ftp://mirrors.bannerlandia.com.ar/mirrors/CPAN/
-
-=item *
-
-Brazil
-
- ftp://cpan.pop-mg.com.br/pub/CPAN/
- ftp://ftp.matrix.com.br/pub/perl/
- ftp://cpan.if.usp.br/pub/mirror/CPAN/
-
-=item *
-
-Chile
-
- ftp://ftp.psinet.cl/pub/programming/perl/CPAN/
- ftp://sunsite.dcc.uchile.cl/pub/lang/perl/
-
-=back
-
-For an up-to-date listing of CPAN sites,
-see http://www.cpan.org/SITES or ftp://www.cpan.org/SITES .
-
-=head1 Modules: Creation, Use, and Abuse
-
-(The following section is borrowed directly from Tim Bunce's modules
-file, available at your nearest CPAN site.)
-
-Perl implements a class using a package, but the presence of a
-package doesn't imply the presence of a class. A package is just a
-namespace. A class is a package that provides subroutines that can be
-used as methods. A method is just a subroutine that expects, as its
-first argument, either the name of a package (for "static" methods),
-or a reference to something (for "virtual" methods).
-
-A module is a file that (by convention) provides a class of the same
-name (sans the .pm), plus an import method in that class that can be
-called to fetch exported symbols. This module may implement some of
-its methods by loading dynamic C or C++ objects, but that should be
-totally transparent to the user of the module. Likewise, the module
-might set up an AUTOLOAD function to slurp in subroutine definitions on
-demand, but this is also transparent. Only the F<.pm> file is required to
-exist. See L<perlsub>, L<perltoot>, and L<AutoLoader> for details about
-the AUTOLOAD mechanism.
-
-=head2 Guidelines for Module Creation
-
-=over 4
-
-=item *
-
-Do similar modules already exist in some form?
-
-If so, please try to reuse the existing modules either in whole or
-by inheriting useful features into a new class. If this is not
-practical try to get together with the module authors to work on
-extending or enhancing the functionality of the existing modules.
-A perfect example is the plethora of packages in perl4 for dealing
-with command line options.
-
-If you are writing a module to expand an already existing set of
-modules, please coordinate with the author of the package. It
-helps if you follow the same naming scheme and module interaction
-scheme as the original author.
-
-=item *
-
-Try to design the new module to be easy to extend and reuse.
-
-Try to C<use warnings;> (or C<use warnings qw(...);>).
-Remember that you can add C<no warnings qw(...);> to individual blocks
-of code that need less warnings.
-
-Use blessed references. Use the two argument form of bless to bless
-into the class name given as the first parameter of the constructor,
-e.g.,:
-
- sub new {
- my $class = shift;
- return bless {}, $class;
- }
-
-or even this if you'd like it to be used as either a static
-or a virtual method.
-
- sub new {
- my $self = shift;
- my $class = ref($self) || $self;
- return bless {}, $class;
- }
-
-Pass arrays as references so more parameters can be added later
-(it's also faster). Convert functions into methods where
-appropriate. Split large methods into smaller more flexible ones.
-Inherit methods from other modules if appropriate.
-
-Avoid class name tests like: C<die "Invalid" unless ref $ref eq 'FOO'>.
-Generally you can delete the C<eq 'FOO'> part with no harm at all.
-Let the objects look after themselves! Generally, avoid hard-wired
-class names as far as possible.
-
-Avoid C<< $r->Class::func() >> where using C<@ISA=qw(... Class ...)> and
-C<< $r->func() >> would work (see L<perlbot> for more details).
-
-Use autosplit so little used or newly added functions won't be a
-burden to programs that don't use them. Add test functions to
-the module after __END__ either using AutoSplit or by saying:
-
- eval join('',<main::DATA>) || die $@ unless caller();
-
-Does your module pass the 'empty subclass' test? If you say
-C<@SUBCLASS::ISA = qw(YOURCLASS);> your applications should be able
-to use SUBCLASS in exactly the same way as YOURCLASS. For example,
-does your application still work if you change: C<$obj = new YOURCLASS;>
-into: C<$obj = new SUBCLASS;> ?
-
-Avoid keeping any state information in your packages. It makes it
-difficult for multiple other packages to use yours. Keep state
-information in objects.
-
-Always use B<-w>.
-
-Try to C<use strict;> (or C<use strict qw(...);>).
-Remember that you can add C<no strict qw(...);> to individual blocks
-of code that need less strictness.
-
-Always use B<-w>.
-
-Follow the guidelines in the perlstyle(1) manual.
-
-Always use B<-w>.
-
-=item *
-
-Some simple style guidelines
-
-The perlstyle manual supplied with Perl has many helpful points.
-
-Coding style is a matter of personal taste. Many people evolve their
-style over several years as they learn what helps them write and
-maintain good code. Here's one set of assorted suggestions that
-seem to be widely used by experienced developers:
-
-Use underscores to separate words. It is generally easier to read
-$var_names_like_this than $VarNamesLikeThis, especially for
-non-native speakers of English. It's also a simple rule that works
-consistently with VAR_NAMES_LIKE_THIS.
-
-Package/Module names are an exception to this rule. Perl informally
-reserves lowercase module names for 'pragma' modules like integer
-and strict. Other modules normally begin with a capital letter and
-use mixed case with no underscores (need to be short and portable).
-
-You may find it helpful to use letter case to indicate the scope
-or nature of a variable. For example:
-
- $ALL_CAPS_HERE constants only (beware clashes with Perl vars)
- $Some_Caps_Here package-wide global/static
- $no_caps_here function scope my() or local() variables
-
-Function and method names seem to work best as all lowercase.
-e.g., C<< $obj->as_string() >>.
-
-You can use a leading underscore to indicate that a variable or
-function should not be used outside the package that defined it.
-
-=item *
-
-Select what to export.
-
-Do NOT export method names!
-
-Do NOT export anything else by default without a good reason!
-
-Exports pollute the namespace of the module user. If you must
-export try to use @EXPORT_OK in preference to @EXPORT and avoid
-short or common names to reduce the risk of name clashes.
-
-Generally anything not exported is still accessible from outside the
-module using the ModuleName::item_name (or C<< $blessed_ref->method >>)
-syntax. By convention you can use a leading underscore on names to
-indicate informally that they are 'internal' and not for public use.
-
-(It is actually possible to get private functions by saying:
-C<my $subref = sub { ... }; &$subref;>. But there's no way to call that
-directly as a method, because a method must have a name in the symbol
-table.)
-
-As a general rule, if the module is trying to be object oriented
-then export nothing. If it's just a collection of functions then
-@EXPORT_OK anything but use @EXPORT with caution.
-
-=item *
-
-Select a name for the module.
-
-This name should be as descriptive, accurate, and complete as
-possible. Avoid any risk of ambiguity. Always try to use two or
-more whole words. Generally the name should reflect what is special
-about what the module does rather than how it does it. Please use
-nested module names to group informally or categorize a module.
-There should be a very good reason for a module not to have a nested name.
-Module names should begin with a capital letter.
-
-Having 57 modules all called Sort will not make life easy for anyone
-(though having 23 called Sort::Quick is only marginally better :-).
-Imagine someone trying to install your module alongside many others.
-If in any doubt ask for suggestions in comp.lang.perl.misc.
-
-If you are developing a suite of related modules/classes it's good
-practice to use nested classes with a common prefix as this will
-avoid namespace clashes. For example: Xyz::Control, Xyz::View,
-Xyz::Model etc. Use the modules in this list as a naming guide.
-
-If adding a new module to a set, follow the original author's
-standards for naming modules and the interface to methods in
-those modules.
-
-If developing modules for private internal or project specific use,
-that will never be released to the public, then you should ensure
-that their names will not clash with any future public module. You
-can do this either by using the reserved Local::* category or by
-using a category name that includes an underscore like Foo_Corp::*.
-
-To be portable each component of a module name should be limited to
-11 characters. If it might be used on MS-DOS then try to ensure each is
-unique in the first 8 characters. Nested modules make this easier.
-
-=item *
-
-Have you got it right?
-
-How do you know that you've made the right decisions? Have you
-picked an interface design that will cause problems later? Have
-you picked the most appropriate name? Do you have any questions?
-
-The best way to know for sure, and pick up many helpful suggestions,
-is to ask someone who knows. Comp.lang.perl.misc is read by just about
-all the people who develop modules and it's the best place to ask.
-
-All you need to do is post a short summary of the module, its
-purpose and interfaces. A few lines on each of the main methods is
-probably enough. (If you post the whole module it might be ignored
-by busy people - generally the very people you want to read it!)
-
-Don't worry about posting if you can't say when the module will be
-ready - just say so in the message. It might be worth inviting
-others to help you, they may be able to complete it for you!
-
-=item *
-
-README and other Additional Files.
-
-It's well known that software developers usually fully document the
-software they write. If, however, the world is in urgent need of
-your software and there is not enough time to write the full
-documentation please at least provide a README file containing:
-
-=over 10
-
-=item *
-
-A description of the module/package/extension etc.
-
-=item *
-
-A copyright notice - see below.
-
-=item *
-
-Prerequisites - what else you may need to have.
-
-=item *
-
-How to build it - possible changes to Makefile.PL etc.
-
-=item *
-
-How to install it.
-
-=item *
-
-Recent changes in this release, especially incompatibilities
-
-=item *
-
-Changes / enhancements you plan to make in the future.
-
-=back
-
-If the README file seems to be getting too large you may wish to
-split out some of the sections into separate files: INSTALL,
-Copying, ToDo etc.
-
-=over 4
-
-=item Adding a Copyright Notice.
-
-
-How you choose to license your work is a personal decision.
-The general mechanism is to assert your Copyright and then make
-a declaration of how others may copy/use/modify your work.
-
-Perl, for example, is supplied with two types of licence: The GNU
-GPL and The Artistic Licence (see the files README, Copying, and
-Artistic). Larry has good reasons for NOT just using the GNU GPL.
-
-My personal recommendation, out of respect for Larry, Perl, and the
-Perl community at large is to state something simply like:
-
- Copyright (c) 1995 Your Name. All rights reserved.
- This program is free software; you can redistribute it and/or
- modify it under the same terms as Perl itself.
-
-This statement should at least appear in the README file. You may
-also wish to include it in a Copying file and your source files.
-Remember to include the other words in addition to the Copyright.
-
-=item *
-
-Give the module a version/issue/release number.
-
-To be fully compatible with the Exporter and MakeMaker modules you
-should store your module's version number in a non-my package
-variable called $VERSION. This should be a floating point
-number with at least two digits after the decimal (i.e., hundredths,
-e.g, C<$VERSION = "0.01">). Don't use a "1.3.2" style version.
-See L<Exporter> for details.
-
-It may be handy to add a function or method to retrieve the number.
-Use the number in announcements and archive file names when
-releasing the module (ModuleName-1.02.tar.Z).
-See perldoc ExtUtils::MakeMaker.pm for details.
-
-=item *
-
-How to release and distribute a module.
-
-It's good idea to post an announcement of the availability of your
-module (or the module itself if small) to the comp.lang.perl.announce
-Usenet newsgroup. This will at least ensure very wide once-off
-distribution.
-
-If possible, register the module with CPAN. You should
-include details of its location in your announcement.
-
-Some notes about ftp archives: Please use a long descriptive file
-name that includes the version number. Most incoming directories
-will not be readable/listable, i.e., you won't be able to see your
-file after uploading it. Remember to send your email notification
-message as soon as possible after uploading else your file may get
-deleted automatically. Allow time for the file to be processed
-and/or check the file has been processed before announcing its
-location.
-
-FTP Archives for Perl Modules:
-
-Follow the instructions and links on:
-
- http://www.cpan.org/modules/00modlist.long.html
- http://www.cpan.org/modules/04pause.html
-
-or upload to one of these sites:
-
- https://pause.kbx.de/pause/
- http://pause.perl.org/pause/
-
-and notify <modules@perl.org>.
-
-By using the WWW interface you can ask the Upload Server to mirror
-your modules from your ftp or WWW site into your own directory on
-CPAN!
-
-Please remember to send me an updated entry for the Module list!
-
-=item *
-
-Take care when changing a released module.
-
-Always strive to remain compatible with previous released versions.
-Otherwise try to add a mechanism to revert to the
-old behavior if people rely on it. Document incompatible changes.
-
-=back
-
-=back
-
-=head2 Guidelines for Converting Perl 4 Library Scripts into Modules
-
-=over 4
-
-=item *
-
-There is no requirement to convert anything.
-
-If it ain't broke, don't fix it! Perl 4 library scripts should
-continue to work with no problems. You may need to make some minor
-changes (like escaping non-array @'s in double quoted strings) but
-there is no need to convert a .pl file into a Module for just that.
-
-=item *
-
-Consider the implications.
-
-All Perl applications that make use of the script will need to
-be changed (slightly) if the script is converted into a module. Is
-it worth it unless you plan to make other changes at the same time?
-
-=item *
-
-Make the most of the opportunity.
-
-If you are going to convert the script to a module you can use the
-opportunity to redesign the interface. The guidelines for module
-creation above include many of the issues you should consider.
-
-=item *
-
-The pl2pm utility will get you started.
-
-This utility will read *.pl files (given as parameters) and write
-corresponding *.pm files. The pl2pm utilities does the following:
-
-=over 10
-
-=item *
-
-Adds the standard Module prologue lines
-
-=item *
-
-Converts package specifiers from ' to ::
-
-=item *
-
-Converts die(...) to croak(...)
-
-=item *
-
-Several other minor changes
-
-=back
-
-Being a mechanical process pl2pm is not bullet proof. The converted
-code will need careful checking, especially any package statements.
-Don't delete the original .pl file till the new .pm one works!
-
-=back
-
-=head2 Guidelines for Reusing Application Code
-
-=over 4
-
-=item *
-
-Complete applications rarely belong in the Perl Module Library.
-
-=item *
-
-Many applications contain some Perl code that could be reused.
-
-Help save the world! Share your code in a form that makes it easy
-to reuse.
-
-=item *
-
-Break-out the reusable code into one or more separate module files.
-
-=item *
-
-Take the opportunity to reconsider and redesign the interfaces.
-
-=item *
-
-In some cases the 'application' can then be reduced to a small
-
-fragment of code built on top of the reusable modules. In these cases
-the application could invoked as:
-
- % perl -e 'use Module::Name; method(@ARGV)' ...
-or
- % perl -mModule::Name ... (in perl5.002 or higher)
-
-=back
-
-=head1 NOTE
-
-Perl does not enforce private and public parts of its modules as you may
-have been used to in other languages like C++, Ada, or Modula-17. Perl
-doesn't have an infatuation with enforced privacy. It would prefer
-that you stayed out of its living room because you weren't invited, not
-because it has a shotgun.
-
-The module and its user have a contract, part of which is common law,
-and part of which is "written". Part of the common law contract is
-that a module doesn't pollute any namespace it wasn't asked to. The
-written contract for the module (A.K.A. documentation) may make other
-provisions. But then you know when you C<use RedefineTheWorld> that
-you're redefining the world and willing to take the consequences.
diff --git a/contrib/perl5/pod/perlnewmod.pod b/contrib/perl5/pod/perlnewmod.pod
deleted file mode 100644
index ace8d85..0000000
--- a/contrib/perl5/pod/perlnewmod.pod
+++ /dev/null
@@ -1,282 +0,0 @@
-=head1 NAME
-
-perlnewmod - preparing a new module for distribution
-
-=head1 DESCRIPTION
-
-This document gives you some suggestions about how to go about writing
-Perl modules, preparing them for distribution, and making them available
-via CPAN.
-
-One of the things that makes Perl really powerful is the fact that Perl
-hackers tend to want to share the solutions to problems they've faced,
-so you and I don't have to battle with the same problem again.
-
-The main way they do this is by abstracting the solution into a Perl
-module. If you don't know what one of these is, the rest of this
-document isn't going to be much use to you. You're also missing out on
-an awful lot of useful code; consider having a look at L<perlmod>,
-L<perlmodlib> and L<perlmodinstall> before coming back here.
-
-When you've found that there isn't a module available for what you're
-trying to do, and you've had to write the code yourself, consider
-packaging up the solution into a module and uploading it to CPAN so that
-others can benefit.
-
-=head2 Warning
-
-We're going to primarily concentrate on Perl-only modules here, rather
-than XS modules. XS modules serve a rather different purpose, and
-you should consider different things before distributing them - the
-popularity of the library you are gluing, the portability to other
-operating systems, and so on. However, the notes on preparing the Perl
-side of the module and packaging and distributing it will apply equally
-well to an XS module as a pure-Perl one.
-
-=head2 What should I make into a module?
-
-You should make a module out of any code that you think is going to be
-useful to others. Anything that's likely to fill a hole in the communal
-library and which someone else can slot directly into their program. Any
-part of your code which you can isolate and extract and plug into
-something else is a likely candidate.
-
-Let's take an example. Suppose you're reading in data from a local
-format into a hash-of-hashes in Perl, turning that into a tree, walking
-the tree and then piping each node to an Acme Transmogrifier Server.
-
-Now, quite a few people have the Acme Transmogrifier, and you've had to
-write something to talk the protocol from scratch - you'd almost
-certainly want to make that into a module. The level at which you pitch
-it is up to you: you might want protocol-level modules analogous to
-L<Net::SMTP|Net::SMTP> which then talk to higher level modules analogous
-to L<Mail::Send|Mail::Send>. The choice is yours, but you do want to get
-a module out for that server protocol.
-
-Nobody else on the planet is going to talk your local data format, so we
-can ignore that. But what about the thing in the middle? Building tree
-structures from Perl variables and then traversing them is a nice,
-general problem, and if nobody's already written a module that does
-that, you might want to modularise that code too.
-
-So hopefully you've now got a few ideas about what's good to modularise.
-Let's now see how it's done.
-
-=head2 Step-by-step: Preparing the ground
-
-Before we even start scraping out the code, there are a few things we'll
-want to do in advance.
-
-=over 3
-
-=item Look around
-
-Dig into a bunch of modules to see how they're written. I'd suggest
-starting with L<Text::Tabs|Text::Tabs>, since it's in the standard
-library and is nice and simple, and then looking at something like
-L<Time::Zone|Time::Zone>, L<File::Copy|File::Copy> and then some of the
-C<Mail::*> modules if you're planning on writing object oriented code.
-
-These should give you an overall feel for how modules are laid out and
-written.
-
-=item Check it's new
-
-There are a lot of modules on CPAN, and it's easy to miss one that's
-similar to what you're planning on contributing. Have a good plough
-through the modules list and the F<by-module> directories, and make sure
-you're not the one reinventing the wheel!
-
-=item Discuss the need
-
-You might love it. You might feel that everyone else needs it. But there
-might not actually be any real demand for it out there. If you're unsure
-about the demand you're module will have, consider sending out feelers
-on the C<comp.lang.perl.modules> newsgroup, or as a last resort, ask the
-modules list at C<modules@perl.org>. Remember that this is a closed list
-with a very long turn-around time - be prepared to wait a good while for
-a response from them.
-
-=item Choose a name
-
-Perl modules included on CPAN have a naming hierarchy you should try to
-fit in with. See L<perlmodlib> for more details on how this works, and
-browse around CPAN and the modules list to get a feel of it. At the very
-least, remember this: modules should be title capitalised, (This::Thing)
-fit in with a category, and explain their purpose succinctly.
-
-=item Check again
-
-While you're doing that, make really sure you haven't missed a module
-similar to the one you're about to write.
-
-When you've got your name sorted out and you're sure that your module is
-wanted and not currently available, it's time to start coding.
-
-=back
-
-=head2 Step-by-step: Making the module
-
-=over 3
-
-=item Start with F<h2xs>
-
-Originally a utility to convert C header files into XS modules,
-L<h2xs|h2xs> has become a useful utility for churning out skeletons for
-Perl-only modules as well. If you don't want to use the
-L<Autoloader|Autoloader> which splits up big modules into smaller
-subroutine-sized chunks, you'll say something like this:
-
- h2xs -AX -n Net::Acme
-
-The C<-A> omits the Autoloader code, C<-X> omits XS elements, and C<-n>
-specifies the name of the module.
-
-=item Use L<strict|strict> and L<warnings|warnings>
-
-A module's code has to be warning and strict-clean, since you can't
-guarantee the conditions that it'll be used under. Besides, you wouldn't
-want to distribute code that wasn't warning or strict-clean anyway,
-right?
-
-=item Use L<Carp|Carp>
-
-The L<Carp|Carp> module allows you to present your error messages from
-the caller's perspective; this gives you a way to signal a problem with
-the caller and not your module. For instance, if you say this:
-
- warn "No hostname given";
-
-the user will see something like this:
-
- No hostname given at /usr/local/lib/perl5/site_perl/5.6.0/Net/Acme.pm
- line 123.
-
-which looks like your module is doing something wrong. Instead, you want
-to put the blame on the user, and say this:
-
- No hostname given at bad_code, line 10.
-
-You do this by using L<Carp|Carp> and replacing your C<warn>s with
-C<carp>s. If you need to C<die>, say C<croak> instead. However, keep
-C<warn> and C<die> in place for your sanity checks - where it really is
-your module at fault.
-
-=item Use L<Exporter|Exporter> - wisely!
-
-C<h2xs> provides stubs for L<Exporter|Exporter>, which gives you a
-standard way of exporting symbols and subroutines from your module into
-the caller's namespace. For instance, saying C<use Net::Acme qw(&frob)>
-would import the C<frob> subroutine.
-
-The package variable C<@EXPORT> will determine which symbols will get
-exported when the caller simply says C<use Net::Acme> - you will hardly
-ever want to put anything in there. C<@EXPORT_OK>, on the other hand,
-specifies which symbols you're willing to export. If you do want to
-export a bunch of symbols, use the C<%EXPORT_TAGS> and define a standard
-export set - look at L<Exporter> for more details.
-
-=item Use L<plain old documentation|perlpod>
-
-The work isn't over until the paperwork is done, and you're going to
-need to put in some time writing some documentation for your module.
-C<h2xs> will provide a stub for you to fill in; if you're not sure about
-the format, look at L<perlpod> for an introduction. Provide a good
-synopsis of how your module is used in code, a description, and then
-notes on the syntax and function of the individual subroutines or
-methods. Use Perl comments for developer notes and POD for end-user
-notes.
-
-=item Write tests
-
-You're encouraged to create self-tests for your module to ensure it's
-working as intended on the myriad platforms Perl supports; if you upload
-your module to CPAN, a host of testers will build your module and send
-you the results of the tests. Again, C<h2xs> provides a test framework
-which you can extend - you should do something more than just checking
-your module will compile.
-
-=item Write the README
-
-If you're uploading to CPAN, the automated gremlins will extract the
-README file and place that in your CPAN directory. It'll also appear in
-the main F<by-module> and F<by-category> directories if you make it onto
-the modules list. It's a good idea to put here what the module actually
-does in detail, and the user-visible changes since the last release.
-
-=back
-
-=head2 Step-by-step: Distributing your module
-
-=over 3
-
-=item Get a CPAN user ID
-
-Every developer publishing modules on CPAN needs a CPAN ID. See the
-instructions at C<http://www.cpan.org/modules/04pause.html> (or
-equivalent on your nearest mirror) to find out how to do this.
-
-=item C<perl Makefile.PL; make test; make dist>
-
-Once again, C<h2xs> has done all the work for you. It produces the
-standard C<Makefile.PL> you'll have seen when you downloaded and
-installs modules, and this produces a Makefile with a C<dist> target.
-
-Once you've ensured that your module passes its own tests - always a
-good thing to make sure - you can C<make dist>, and the Makefile will
-hopefully produce you a nice tarball of your module, ready for upload.
-
-=item Upload the tarball
-
-The email you got when you received your CPAN ID will tell you how to
-log in to PAUSE, the Perl Authors Upload SErver. From the menus there,
-you can upload your module to CPAN.
-
-=item Announce to the modules list
-
-Once uploaded, it'll sit unnoticed in your author directory. If you want
-it connected to the rest of the CPAN, you'll need to tell the modules
-list about it. The best way to do this is to email them a line in the
-style of the modules list, like this:
-
- Net::Acme bdpO Interface to Acme Frobnicator servers FOOBAR
- ^ ^^^^ ^ ^
- | |||| Module description Your ID
- | ||||
- | |||\- Interface: (O)OP, (r)eferences, (h)ybrid, (f)unctions
- | |||
- | ||\-- Language: (p)ure Perl, C(+)+, (h)ybrid, (C), (o)ther
- | ||
- Module |\--- Support: (d)eveloper, (m)ailing list, (u)senet, (n)one
- Name |
- \---- Maturity: (i)dea, (c)onstructions, (a)lpha, (b)eta,
- (R)eleased, (M)ature, (S)tandard
-
-plus a description of the module and why you think it should be
-included. If you hear nothing back, that means your module will
-probably appear on the modules list at the next update. Don't try
-subscribing to C<modules@perl.org>; it's not another mailing list. Just
-have patience.
-
-=item Announce to clpa
-
-If you have a burning desire to tell the world about your release, post
-an announcement to the moderated C<comp.lang.perl.announce> newsgroup.
-
-=item Fix bugs!
-
-Once you start accumulating users, they'll send you bug reports. If
-you're lucky, they'll even send you patches. Welcome to the joys of
-maintaining a software project...
-
-=back
-
-=head1 AUTHOR
-
-Simon Cozens, C<simon@cpan.org>
-
-=head1 SEE ALSO
-
-L<perlmod>, L<perlmodlib>, L<perlmodinstall>, L<h2xs>, L<strict>,
-L<Carp>, L<Exporter>, L<perlpod>, L<Test>, L<ExtUtils::MakeMaker>,
-http://www.cpan.org/
diff --git a/contrib/perl5/pod/perlnumber.pod b/contrib/perl5/pod/perlnumber.pod
deleted file mode 100644
index 44d921c..0000000
--- a/contrib/perl5/pod/perlnumber.pod
+++ /dev/null
@@ -1,185 +0,0 @@
-=head1 NAME
-
-perlnumber - semantics of numbers and numeric operations in Perl
-
-=head1 SYNOPSIS
-
- $n = 1234; # decimal integer
- $n = 0b1110011; # binary integer
- $n = 01234; # octal integer
- $n = 0x1234; # hexadecimal integer
- $n = 12.34e-56; # exponential notation
- $n = "-12.34e56"; # number specified as a string
- $n = "1234"; # number specified as a string
- $n = v49.50.51.52; # number specified as a string, which in
- # turn is specified in terms of numbers :-)
-
-=head1 DESCRIPTION
-
-This document describes how Perl internally handles numeric values.
-
-Perl's operator overloading facility is completely ignored here. Operator
-overloading allows user-defined behaviors for numbers, such as operations
-over arbitrarily large integers, floating points numbers with arbitrary
-precision, operations over "exotic" numbers such as modular arithmetic or
-p-adic arithmetic, and so on. See L<overload> for details.
-
-=head1 Storing numbers
-
-Perl can internally represent numbers in 3 different ways: as native
-integers, as native floating point numbers, and as decimal strings.
-Decimal strings may have an exponential notation part, as in C<"12.34e-56">.
-I<Native> here means "a format supported by the C compiler which was used
-to build perl".
-
-The term "native" does not mean quite as much when we talk about native
-integers, as it does when native floating point numbers are involved.
-The only implication of the term "native" on integers is that the limits for
-the maximal and the minimal supported true integral quantities are close to
-powers of 2. However, "native" floats have a most fundamental
-restriction: they may represent only those numbers which have a relatively
-"short" representation when converted to a binary fraction. For example,
-0.9 cannot be represented by a native float, since the binary fraction
-for 0.9 is infinite:
-
- binary0.1110011001100...
-
-with the sequence C<1100> repeating again and again. In addition to this
-limitation, the exponent of the binary number is also restricted when it
-is represented as a floating point number. On typical hardware, floating
-point values can store numbers with up to 53 binary digits, and with binary
-exponents between -1024 and 1024. In decimal representation this is close
-to 16 decimal digits and decimal exponents in the range of -304..304.
-The upshot of all this is that Perl cannot store a number like
-12345678901234567 as a floating point number on such architectures without
-loss of information.
-
-Similarly, decimal strings can represent only those numbers which have a
-finite decimal expansion. Being strings, and thus of arbitrary length, there
-is no practical limit for the exponent or number of decimal digits for these
-numbers. (But realize that what we are discussing the rules for just the
-I<storage> of these numbers. The fact that you can store such "large" numbers
-does not mean that the I<operations> over these numbers will use all
-of the significant digits.
-See L<"Numeric operators and numeric conversions"> for details.)
-
-In fact numbers stored in the native integer format may be stored either
-in the signed native form, or in the unsigned native form. Thus the limits
-for Perl numbers stored as native integers would typically be -2**31..2**32-1,
-with appropriate modifications in the case of 64-bit integers. Again, this
-does not mean that Perl can do operations only over integers in this range:
-it is possible to store many more integers in floating point format.
-
-Summing up, Perl numeric values can store only those numbers which have
-a finite decimal expansion or a "short" binary expansion.
-
-=head1 Numeric operators and numeric conversions
-
-As mentioned earlier, Perl can store a number in any one of three formats,
-but most operators typically understand only one of those formats. When
-a numeric value is passed as an argument to such an operator, it will be
-converted to the format understood by the operator.
-
-Six such conversions are possible:
-
- native integer --> native floating point (*)
- native integer --> decimal string
- native floating_point --> native integer (*)
- native floating_point --> decimal string (*)
- decimal string --> native integer
- decimal string --> native floating point (*)
-
-These conversions are governed by the following general rules:
-
-=over 4
-
-=item *
-
-If the source number can be represented in the target form, that
-representation is used.
-
-=item *
-
-If the source number is outside of the limits representable in the target form,
-a representation of the closest limit is used. (I<Loss of information>)
-
-=item *
-
-If the source number is between two numbers representable in the target form,
-a representation of one of these numbers is used. (I<Loss of information>)
-
-=item *
-
-In C<< native floating point --> native integer >> conversions the magnitude
-of the result is less than or equal to the magnitude of the source.
-(I<"Rounding to zero".>)
-
-=item *
-
-If the C<< decimal string --> native integer >> conversion cannot be done
-without loss of information, the result is compatible with the conversion
-sequence C<< decimal_string --> native_floating_point --> native_integer >>.
-In particular, rounding is strongly biased to 0, though a number like
-C<"0.99999999999999999999"> has a chance of being rounded to 1.
-
-=back
-
-B<RESTRICTION>: The conversions marked with C<(*)> above involve steps
-performed by the C compiler. In particular, bugs/features of the compiler
-used may lead to breakage of some of the above rules.
-
-=head1 Flavors of Perl numeric operations
-
-Perl operations which take a numeric argument treat that argument in one
-of four different ways: they may force it to one of the integer/floating/
-string formats, or they may behave differently depending on the format of
-the operand. Forcing a numeric value to a particular format does not
-change the number stored in the value.
-
-All the operators which need an argument in the integer format treat the
-argument as in modular arithmetic, e.g., C<mod 2**32> on a 32-bit
-architecture. C<sprintf "%u", -1> therefore provides the same result as
-C<sprintf "%u", ~0>.
-
-=over 4
-
-=item Arithmetic operators except, C<no integer>
-
-force the argument into the floating point format.
-
-=item Arithmetic operators except, C<use integer>
-
-=item Bitwise operators, C<no integer>
-
-force the argument into the integer format if it is not a string.
-
-=item Bitwise operators, C<use integer>
-
-force the argument into the integer format
-
-=item Operators which expect an integer
-
-force the argument into the integer format. This is applicable
-to the third and fourth arguments of C<sysread>, for example.
-
-=item Operators which expect a string
-
-force the argument into the string format. For example, this is
-applicable to C<printf "%s", $value>.
-
-=back
-
-Though forcing an argument into a particular form does not change the
-stored number, Perl remembers the result of such conversions. In
-particular, though the first such conversion may be time-consuming,
-repeated operations will not need to redo the conversion.
-
-=head1 AUTHOR
-
-Ilya Zakharevich C<ilya@math.ohio-state.edu>
-
-Editorial adjustments by Gurusamy Sarathy <gsar@ActiveState.com>
-
-=head1 SEE ALSO
-
-L<overload>
diff --git a/contrib/perl5/pod/perlobj.pod b/contrib/perl5/pod/perlobj.pod
deleted file mode 100644
index 285ed99..0000000
--- a/contrib/perl5/pod/perlobj.pod
+++ /dev/null
@@ -1,566 +0,0 @@
-=head1 NAME
-
-perlobj - Perl objects
-
-=head1 DESCRIPTION
-
-First you need to understand what references are in Perl.
-See L<perlref> for that. Second, if you still find the following
-reference work too complicated, a tutorial on object-oriented programming
-in Perl can be found in L<perltoot> and L<perltootc>.
-
-If you're still with us, then
-here are three very simple definitions that you should find reassuring.
-
-=over 4
-
-=item 1.
-
-An object is simply a reference that happens to know which class it
-belongs to.
-
-=item 2.
-
-A class is simply a package that happens to provide methods to deal
-with object references.
-
-=item 3.
-
-A method is simply a subroutine that expects an object reference (or
-a package name, for class methods) as the first argument.
-
-=back
-
-We'll cover these points now in more depth.
-
-=head2 An Object is Simply a Reference
-
-Unlike say C++, Perl doesn't provide any special syntax for
-constructors. A constructor is merely a subroutine that returns a
-reference to something "blessed" into a class, generally the
-class that the subroutine is defined in. Here is a typical
-constructor:
-
- package Critter;
- sub new { bless {} }
-
-That word C<new> isn't special. You could have written
-a construct this way, too:
-
- package Critter;
- sub spawn { bless {} }
-
-This might even be preferable, because the C++ programmers won't
-be tricked into thinking that C<new> works in Perl as it does in C++.
-It doesn't. We recommend that you name your constructors whatever
-makes sense in the context of the problem you're solving. For example,
-constructors in the Tk extension to Perl are named after the widgets
-they create.
-
-One thing that's different about Perl constructors compared with those in
-C++ is that in Perl, they have to allocate their own memory. (The other
-things is that they don't automatically call overridden base-class
-constructors.) The C<{}> allocates an anonymous hash containing no
-key/value pairs, and returns it The bless() takes that reference and
-tells the object it references that it's now a Critter, and returns
-the reference. This is for convenience, because the referenced object
-itself knows that it has been blessed, and the reference to it could
-have been returned directly, like this:
-
- sub new {
- my $self = {};
- bless $self;
- return $self;
- }
-
-You often see such a thing in more complicated constructors
-that wish to call methods in the class as part of the construction:
-
- sub new {
- my $self = {};
- bless $self;
- $self->initialize();
- return $self;
- }
-
-If you care about inheritance (and you should; see
-L<perlmodlib/"Modules: Creation, Use, and Abuse">),
-then you want to use the two-arg form of bless
-so that your constructors may be inherited:
-
- sub new {
- my $class = shift;
- my $self = {};
- bless $self, $class;
- $self->initialize();
- return $self;
- }
-
-Or if you expect people to call not just C<< CLASS->new() >> but also
-C<< $obj->new() >>, then use something like this. The initialize()
-method used will be of whatever $class we blessed the
-object into:
-
- sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my $self = {};
- bless $self, $class;
- $self->initialize();
- return $self;
- }
-
-Within the class package, the methods will typically deal with the
-reference as an ordinary reference. Outside the class package,
-the reference is generally treated as an opaque value that may
-be accessed only through the class's methods.
-
-Although a constructor can in theory re-bless a referenced object
-currently belonging to another class, this is almost certainly going
-to get you into trouble. The new class is responsible for all
-cleanup later. The previous blessing is forgotten, as an object
-may belong to only one class at a time. (Although of course it's
-free to inherit methods from many classes.) If you find yourself
-having to do this, the parent class is probably misbehaving, though.
-
-A clarification: Perl objects are blessed. References are not. Objects
-know which package they belong to. References do not. The bless()
-function uses the reference to find the object. Consider
-the following example:
-
- $a = {};
- $b = $a;
- bless $a, BLAH;
- print "\$b is a ", ref($b), "\n";
-
-This reports $b as being a BLAH, so obviously bless()
-operated on the object and not on the reference.
-
-=head2 A Class is Simply a Package
-
-Unlike say C++, Perl doesn't provide any special syntax for class
-definitions. You use a package as a class by putting method
-definitions into the class.
-
-There is a special array within each package called @ISA, which says
-where else to look for a method if you can't find it in the current
-package. This is how Perl implements inheritance. Each element of the
-@ISA array is just the name of another package that happens to be a
-class package. The classes are searched (depth first) for missing
-methods in the order that they occur in @ISA. The classes accessible
-through @ISA are known as base classes of the current class.
-
-All classes implicitly inherit from class C<UNIVERSAL> as their
-last base class. Several commonly used methods are automatically
-supplied in the UNIVERSAL class; see L<"Default UNIVERSAL methods"> for
-more details.
-
-If a missing method is found in a base class, it is cached
-in the current class for efficiency. Changing @ISA or defining new
-subroutines invalidates the cache and causes Perl to do the lookup again.
-
-If neither the current class, its named base classes, nor the UNIVERSAL
-class contains the requested method, these three places are searched
-all over again, this time looking for a method named AUTOLOAD(). If an
-AUTOLOAD is found, this method is called on behalf of the missing method,
-setting the package global $AUTOLOAD to be the fully qualified name of
-the method that was intended to be called.
-
-If none of that works, Perl finally gives up and complains.
-
-If you want to stop the AUTOLOAD inheritance say simply
-
- sub AUTOLOAD;
-
-and the call will die using the name of the sub being called.
-
-Perl classes do method inheritance only. Data inheritance is left up
-to the class itself. By and large, this is not a problem in Perl,
-because most classes model the attributes of their object using an
-anonymous hash, which serves as its own little namespace to be carved up
-by the various classes that might want to do something with the object.
-The only problem with this is that you can't sure that you aren't using
-a piece of the hash that isn't already used. A reasonable workaround
-is to prepend your fieldname in the hash with the package name.
-
- sub bump {
- my $self = shift;
- $self->{ __PACKAGE__ . ".count"}++;
- }
-
-=head2 A Method is Simply a Subroutine
-
-Unlike say C++, Perl doesn't provide any special syntax for method
-definition. (It does provide a little syntax for method invocation
-though. More on that later.) A method expects its first argument
-to be the object (reference) or package (string) it is being invoked
-on. There are two ways of calling methods, which we'll call class
-methods and instance methods.
-
-A class method expects a class name as the first argument. It
-provides functionality for the class as a whole, not for any
-individual object belonging to the class. Constructors are often
-class methods, but see L<perltoot> and L<perltootc> for alternatives.
-Many class methods simply ignore their first argument, because they
-already know what package they're in and don't care what package
-they were invoked via. (These aren't necessarily the same, because
-class methods follow the inheritance tree just like ordinary instance
-methods.) Another typical use for class methods is to look up an
-object by name:
-
- sub find {
- my ($class, $name) = @_;
- $objtable{$name};
- }
-
-An instance method expects an object reference as its first argument.
-Typically it shifts the first argument into a "self" or "this" variable,
-and then uses that as an ordinary reference.
-
- sub display {
- my $self = shift;
- my @keys = @_ ? @_ : sort keys %$self;
- foreach $key (@keys) {
- print "\t$key => $self->{$key}\n";
- }
- }
-
-=head2 Method Invocation
-
-There are two ways to invoke a method, one of which you're already
-familiar with, and the other of which will look familiar. Perl 4
-already had an "indirect object" syntax that you use when you say
-
- print STDERR "help!!!\n";
-
-This same syntax can be used to call either class or instance methods.
-We'll use the two methods defined above, the class method to lookup
-an object reference and the instance method to print out its attributes.
-
- $fred = find Critter "Fred";
- display $fred 'Height', 'Weight';
-
-These could be combined into one statement by using a BLOCK in the
-indirect object slot:
-
- display {find Critter "Fred"} 'Height', 'Weight';
-
-For C++ fans, there's also a syntax using -> notation that does exactly
-the same thing. The parentheses are required if there are any arguments.
-
- $fred = Critter->find("Fred");
- $fred->display('Height', 'Weight');
-
-or in one statement,
-
- Critter->find("Fred")->display('Height', 'Weight');
-
-There are times when one syntax is more readable, and times when the
-other syntax is more readable. The indirect object syntax is less
-cluttered, but it has the same ambiguity as ordinary list operators.
-Indirect object method calls are usually parsed using the same rule as list
-operators: "If it looks like a function, it is a function". (Presuming
-for the moment that you think two words in a row can look like a
-function name. C++ programmers seem to think so with some regularity,
-especially when the first word is "new".) Thus, the parentheses of
-
- new Critter ('Barney', 1.5, 70)
-
-are assumed to surround ALL the arguments of the method call, regardless
-of what comes after. Saying
-
- new Critter ('Bam' x 2), 1.4, 45
-
-would be equivalent to
-
- Critter->new('Bam' x 2), 1.4, 45
-
-which is unlikely to do what you want. Confusingly, however, this
-rule applies only when the indirect object is a bareword package name,
-not when it's a scalar, a BLOCK, or a C<Package::> qualified package name.
-In those cases, the arguments are parsed in the same way as an
-indirect object list operator like print, so
-
- new Critter:: ('Bam' x 2), 1.4, 45
-
-is the same as
-
- Critter::->new(('Bam' x 2), 1.4, 45)
-
-For more reasons why the indirect object syntax is ambiguous, see
-L<"WARNING"> below.
-
-There are times when you wish to specify which class's method to use.
-Here you can call your method as an ordinary subroutine
-call, being sure to pass the requisite first argument explicitly:
-
- $fred = MyCritter::find("Critter", "Fred");
- MyCritter::display($fred, 'Height', 'Weight');
-
-Unlike method calls, function calls don't consider inheritance. If you wish
-merely to specify that Perl should I<START> looking for a method in a
-particular package, use an ordinary method call, but qualify the method
-name with the package like this:
-
- $fred = Critter->MyCritter::find("Fred");
- $fred->MyCritter::display('Height', 'Weight');
-
-If you're trying to control where the method search begins I<and> you're
-executing in the class itself, then you may use the SUPER pseudo class,
-which says to start looking in your base class's @ISA list without having
-to name it explicitly:
-
- $self->SUPER::display('Height', 'Weight');
-
-Please note that the C<SUPER::> construct is meaningful I<only> within the
-class.
-
-Sometimes you want to call a method when you don't know the method name
-ahead of time. You can use the arrow form, replacing the method name
-with a simple scalar variable containing the method name or a
-reference to the function.
-
- $method = $fast ? "findfirst" : "findbest";
- $fred->$method(@args); # call by name
-
- if ($coderef = $fred->can($parent . "::findbest")) {
- $self->$coderef(@args); # call by coderef
- }
-
-=head2 WARNING
-
-While indirect object syntax may well be appealing to English speakers and
-to C++ programmers, be not seduced! It suffers from two grave problems.
-
-The first problem is that an indirect object is limited to a name,
-a scalar variable, or a block, because it would have to do too much
-lookahead otherwise, just like any other postfix dereference in the
-language. (These are the same quirky rules as are used for the filehandle
-slot in functions like C<print> and C<printf>.) This can lead to horribly
-confusing precedence problems, as in these next two lines:
-
- move $obj->{FIELD}; # probably wrong!
- move $ary[$i]; # probably wrong!
-
-Those actually parse as the very surprising:
-
- $obj->move->{FIELD}; # Well, lookee here
- $ary->move([$i]); # Didn't expect this one, eh?
-
-Rather than what you might have expected:
-
- $obj->{FIELD}->move(); # You should be so lucky.
- $ary[$i]->move; # Yeah, sure.
-
-The left side of ``->'' is not so limited, because it's an infix operator,
-not a postfix operator.
-
-As if that weren't bad enough, think about this: Perl must guess I<at
-compile time> whether C<name> and C<move> above are functions or methods.
-Usually Perl gets it right, but when it doesn't it, you get a function
-call compiled as a method, or vice versa. This can introduce subtle
-bugs that are hard to unravel. For example, calling a method C<new>
-in indirect notation--as C++ programmers are so wont to do--can
-be miscompiled into a subroutine call if there's already a C<new>
-function in scope. You'd end up calling the current package's C<new>
-as a subroutine, rather than the desired class's method. The compiler
-tries to cheat by remembering bareword C<require>s, but the grief if it
-messes up just isn't worth the years of debugging it would likely take
-you to track such subtle bugs down.
-
-The infix arrow notation using ``C<< -> >>'' doesn't suffer from either
-of these disturbing ambiguities, so we recommend you use it exclusively.
-
-=head2 Default UNIVERSAL methods
-
-The C<UNIVERSAL> package automatically contains the following methods that
-are inherited by all other classes:
-
-=over 4
-
-=item isa(CLASS)
-
-C<isa> returns I<true> if its object is blessed into a subclass of C<CLASS>
-
-C<isa> is also exportable and can be called as a sub with two arguments. This
-allows the ability to check what a reference points to. Example
-
- use UNIVERSAL qw(isa);
-
- if(isa($ref, 'ARRAY')) {
- #...
- }
-
-=item can(METHOD)
-
-C<can> checks to see if its object has a method called C<METHOD>,
-if it does then a reference to the sub is returned, if it does not then
-I<undef> is returned.
-
-=item VERSION( [NEED] )
-
-C<VERSION> returns the version number of the class (package). If the
-NEED argument is given then it will check that the current version (as
-defined by the $VERSION variable in the given package) not less than
-NEED; it will die if this is not the case. This method is normally
-called as a class method. This method is called automatically by the
-C<VERSION> form of C<use>.
-
- use A 1.2 qw(some imported subs);
- # implies:
- A->VERSION(1.2);
-
-=back
-
-B<NOTE:> C<can> directly uses Perl's internal code for method lookup, and
-C<isa> uses a very similar method and cache-ing strategy. This may cause
-strange effects if the Perl code dynamically changes @ISA in any package.
-
-You may add other methods to the UNIVERSAL class via Perl or XS code.
-You do not need to C<use UNIVERSAL> to make these methods
-available to your program. This is necessary only if you wish to
-have C<isa> available as a plain subroutine in the current package.
-
-=head2 Destructors
-
-When the last reference to an object goes away, the object is
-automatically destroyed. (This may even be after you exit, if you've
-stored references in global variables.) If you want to capture control
-just before the object is freed, you may define a DESTROY method in
-your class. It will automatically be called at the appropriate moment,
-and you can do any extra cleanup you need to do. Perl passes a reference
-to the object under destruction as the first (and only) argument. Beware
-that the reference is a read-only value, and cannot be modified by
-manipulating C<$_[0]> within the destructor. The object itself (i.e.
-the thingy the reference points to, namely C<${$_[0]}>, C<@{$_[0]}>,
-C<%{$_[0]}> etc.) is not similarly constrained.
-
-If you arrange to re-bless the reference before the destructor returns,
-perl will again call the DESTROY method for the re-blessed object after
-the current one returns. This can be used for clean delegation of
-object destruction, or for ensuring that destructors in the base classes
-of your choosing get called. Explicitly calling DESTROY is also possible,
-but is usually never needed.
-
-Do not confuse the previous discussion with how objects I<CONTAINED> in the current
-one are destroyed. Such objects will be freed and destroyed automatically
-when the current object is freed, provided no other references to them exist
-elsewhere.
-
-=head2 Summary
-
-That's about all there is to it. Now you need just to go off and buy a
-book about object-oriented design methodology, and bang your forehead
-with it for the next six months or so.
-
-=head2 Two-Phased Garbage Collection
-
-For most purposes, Perl uses a fast and simple, reference-based
-garbage collection system. That means there's an extra
-dereference going on at some level, so if you haven't built
-your Perl executable using your C compiler's C<-O> flag, performance
-will suffer. If you I<have> built Perl with C<cc -O>, then this
-probably won't matter.
-
-A more serious concern is that unreachable memory with a non-zero
-reference count will not normally get freed. Therefore, this is a bad
-idea:
-
- {
- my $a;
- $a = \$a;
- }
-
-Even thought $a I<should> go away, it can't. When building recursive data
-structures, you'll have to break the self-reference yourself explicitly
-if you don't care to leak. For example, here's a self-referential
-node such as one might use in a sophisticated tree structure:
-
- sub new_node {
- my $self = shift;
- my $class = ref($self) || $self;
- my $node = {};
- $node->{LEFT} = $node->{RIGHT} = $node;
- $node->{DATA} = [ @_ ];
- return bless $node => $class;
- }
-
-If you create nodes like that, they (currently) won't go away unless you
-break their self reference yourself. (In other words, this is not to be
-construed as a feature, and you shouldn't depend on it.)
-
-Almost.
-
-When an interpreter thread finally shuts down (usually when your program
-exits), then a rather costly but complete mark-and-sweep style of garbage
-collection is performed, and everything allocated by that thread gets
-destroyed. This is essential to support Perl as an embedded or a
-multithreadable language. For example, this program demonstrates Perl's
-two-phased garbage collection:
-
- #!/usr/bin/perl
- package Subtle;
-
- sub new {
- my $test;
- $test = \$test;
- warn "CREATING " . \$test;
- return bless \$test;
- }
-
- sub DESTROY {
- my $self = shift;
- warn "DESTROYING $self";
- }
-
- package main;
-
- warn "starting program";
- {
- my $a = Subtle->new;
- my $b = Subtle->new;
- $$a = 0; # break selfref
- warn "leaving block";
- }
-
- warn "just exited block";
- warn "time to die...";
- exit;
-
-When run as F</tmp/test>, the following output is produced:
-
- starting program at /tmp/test line 18.
- CREATING SCALAR(0x8e5b8) at /tmp/test line 7.
- CREATING SCALAR(0x8e57c) at /tmp/test line 7.
- leaving block at /tmp/test line 23.
- DESTROYING Subtle=SCALAR(0x8e5b8) at /tmp/test line 13.
- just exited block at /tmp/test line 26.
- time to die... at /tmp/test line 27.
- DESTROYING Subtle=SCALAR(0x8e57c) during global destruction.
-
-Notice that "global destruction" bit there? That's the thread
-garbage collector reaching the unreachable.
-
-Objects are always destructed, even when regular refs aren't. Objects
-are destructed in a separate pass before ordinary refs just to
-prevent object destructors from using refs that have been themselves
-destructed. Plain refs are only garbage-collected if the destruct level
-is greater than 0. You can test the higher levels of global destruction
-by setting the PERL_DESTRUCT_LEVEL environment variable, presuming
-C<-DDEBUGGING> was enabled during perl build time.
-
-A more complete garbage collection strategy will be implemented
-at a future date.
-
-In the meantime, the best solution is to create a non-recursive container
-class that holds a pointer to the self-referential data structure.
-Define a DESTROY method for the containing object's class that manually
-breaks the circularities in the self-referential structure.
-
-=head1 SEE ALSO
-
-A kinder, gentler tutorial on object-oriented programming in Perl can
-be found in L<perltoot>, L<perlbootc> and L<perltootc>. You should
-also check out L<perlbot> for other object tricks, traps, and tips, as
-well as L<perlmodlib> for some style guides on constructing both
-modules and classes.
diff --git a/contrib/perl5/pod/perlop.pod b/contrib/perl5/pod/perlop.pod
deleted file mode 100644
index 9cae3a2..0000000
--- a/contrib/perl5/pod/perlop.pod
+++ /dev/null
@@ -1,1936 +0,0 @@
-=head1 NAME
-
-perlop - Perl operators and precedence
-
-=head1 SYNOPSIS
-
-Perl operators have the following associativity and precedence,
-listed from highest precedence to lowest. Operators borrowed from
-C keep the same precedence relationship with each other, even where
-C's precedence is slightly screwy. (This makes learning Perl easier
-for C folks.) With very few exceptions, these all operate on scalar
-values only, not array values.
-
- left terms and list operators (leftward)
- left ->
- nonassoc ++ --
- right **
- right ! ~ \ and unary + and -
- left =~ !~
- left * / % x
- left + - .
- left << >>
- nonassoc named unary operators
- nonassoc < > <= >= lt gt le ge
- nonassoc == != <=> eq ne cmp
- left &
- left | ^
- left &&
- left ||
- nonassoc .. ...
- right ?:
- right = += -= *= etc.
- left , =>
- nonassoc list operators (rightward)
- right not
- left and
- left or xor
-
-In the following sections, these operators are covered in precedence order.
-
-Many operators can be overloaded for objects. See L<overload>.
-
-=head1 DESCRIPTION
-
-=head2 Terms and List Operators (Leftward)
-
-A TERM has the highest precedence in Perl. They include variables,
-quote and quote-like operators, any expression in parentheses,
-and any function whose arguments are parenthesized. Actually, there
-aren't really functions in this sense, just list operators and unary
-operators behaving as functions because you put parentheses around
-the arguments. These are all documented in L<perlfunc>.
-
-If any list operator (print(), etc.) or any unary operator (chdir(), etc.)
-is followed by a left parenthesis as the next token, the operator and
-arguments within parentheses are taken to be of highest precedence,
-just like a normal function call.
-
-In the absence of parentheses, the precedence of list operators such as
-C<print>, C<sort>, or C<chmod> is either very high or very low depending on
-whether you are looking at the left side or the right side of the operator.
-For example, in
-
- @ary = (1, 3, sort 4, 2);
- print @ary; # prints 1324
-
-the commas on the right of the sort are evaluated before the sort,
-but the commas on the left are evaluated after. In other words,
-list operators tend to gobble up all arguments that follow, and
-then act like a simple TERM with regard to the preceding expression.
-Be careful with parentheses:
-
- # These evaluate exit before doing the print:
- print($foo, exit); # Obviously not what you want.
- print $foo, exit; # Nor is this.
-
- # These do the print before evaluating exit:
- (print $foo), exit; # This is what you want.
- print($foo), exit; # Or this.
- print ($foo), exit; # Or even this.
-
-Also note that
-
- print ($foo & 255) + 1, "\n";
-
-probably doesn't do what you expect at first glance. See
-L<Named Unary Operators> for more discussion of this.
-
-Also parsed as terms are the C<do {}> and C<eval {}> constructs, as
-well as subroutine and method calls, and the anonymous
-constructors C<[]> and C<{}>.
-
-See also L<Quote and Quote-like Operators> toward the end of this section,
-as well as L<"I/O Operators">.
-
-=head2 The Arrow Operator
-
-"C<< -> >>" is an infix dereference operator, just as it is in C
-and C++. If the right side is either a C<[...]>, C<{...}>, or a
-C<(...)> subscript, then the left side must be either a hard or
-symbolic reference to an array, a hash, or a subroutine respectively.
-(Or technically speaking, a location capable of holding a hard
-reference, if it's an array or hash reference being used for
-assignment.) See L<perlreftut> and L<perlref>.
-
-Otherwise, the right side is a method name or a simple scalar
-variable containing either the method name or a subroutine reference,
-and the left side must be either an object (a blessed reference)
-or a class name (that is, a package name). See L<perlobj>.
-
-=head2 Auto-increment and Auto-decrement
-
-"++" and "--" work as in C. That is, if placed before a variable, they
-increment or decrement the variable before returning the value, and if
-placed after, increment or decrement the variable after returning the value.
-
-The auto-increment operator has a little extra builtin magic to it. If
-you increment a variable that is numeric, or that has ever been used in
-a numeric context, you get a normal increment. If, however, the
-variable has been used in only string contexts since it was set, and
-has a value that is not the empty string and matches the pattern
-C</^[a-zA-Z]*[0-9]*\z/>, the increment is done as a string, preserving each
-character within its range, with carry:
-
- print ++($foo = '99'); # prints '100'
- print ++($foo = 'a0'); # prints 'a1'
- print ++($foo = 'Az'); # prints 'Ba'
- print ++($foo = 'zz'); # prints 'aaa'
-
-The auto-decrement operator is not magical.
-
-=head2 Exponentiation
-
-Binary "**" is the exponentiation operator. It binds even more
-tightly than unary minus, so -2**4 is -(2**4), not (-2)**4. (This is
-implemented using C's pow(3) function, which actually works on doubles
-internally.)
-
-=head2 Symbolic Unary Operators
-
-Unary "!" performs logical negation, i.e., "not". See also C<not> for a lower
-precedence version of this.
-
-Unary "-" performs arithmetic negation if the operand is numeric. If
-the operand is an identifier, a string consisting of a minus sign
-concatenated with the identifier is returned. Otherwise, if the string
-starts with a plus or minus, a string starting with the opposite sign
-is returned. One effect of these rules is that C<-bareword> is equivalent
-to C<"-bareword">.
-
-Unary "~" performs bitwise negation, i.e., 1's complement. For
-example, C<0666 & ~027> is 0640. (See also L<Integer Arithmetic> and
-L<Bitwise String Operators>.) Note that the width of the result is
-platform-dependent: ~0 is 32 bits wide on a 32-bit platform, but 64
-bits wide on a 64-bit platform, so if you are expecting a certain bit
-width, remember use the & operator to mask off the excess bits.
-
-Unary "+" has no effect whatsoever, even on strings. It is useful
-syntactically for separating a function name from a parenthesized expression
-that would otherwise be interpreted as the complete list of function
-arguments. (See examples above under L<Terms and List Operators (Leftward)>.)
-
-Unary "\" creates a reference to whatever follows it. See L<perlreftut>
-and L<perlref>. Do not confuse this behavior with the behavior of
-backslash within a string, although both forms do convey the notion
-of protecting the next thing from interpolation.
-
-=head2 Binding Operators
-
-Binary "=~" binds a scalar expression to a pattern match. Certain operations
-search or modify the string $_ by default. This operator makes that kind
-of operation work on some other string. The right argument is a search
-pattern, substitution, or transliteration. The left argument is what is
-supposed to be searched, substituted, or transliterated instead of the default
-$_. When used in scalar context, the return value generally indicates the
-success of the operation. Behavior in list context depends on the particular
-operator. See L</"Regexp Quote-Like Operators"> for details.
-
-If the right argument is an expression rather than a search pattern,
-substitution, or transliteration, it is interpreted as a search pattern at run
-time. This can be less efficient than an explicit search, because the
-pattern must be compiled every time the expression is evaluated.
-
-Binary "!~" is just like "=~" except the return value is negated in
-the logical sense.
-
-=head2 Multiplicative Operators
-
-Binary "*" multiplies two numbers.
-
-Binary "/" divides two numbers.
-
-Binary "%" computes the modulus of two numbers. Given integer
-operands C<$a> and C<$b>: If C<$b> is positive, then C<$a % $b> is
-C<$a> minus the largest multiple of C<$b> that is not greater than
-C<$a>. If C<$b> is negative, then C<$a % $b> is C<$a> minus the
-smallest multiple of C<$b> that is not less than C<$a> (i.e. the
-result will be less than or equal to zero).
-Note than when C<use integer> is in scope, "%" gives you direct access
-to the modulus operator as implemented by your C compiler. This
-operator is not as well defined for negative operands, but it will
-execute faster.
-
-Binary "x" is the repetition operator. In scalar context or if the left
-operand is not enclosed in parentheses, it returns a string consisting
-of the left operand repeated the number of times specified by the right
-operand. In list context, if the left operand is enclosed in
-parentheses, it repeats the list.
-
- print '-' x 80; # print row of dashes
-
- print "\t" x ($tab/8), ' ' x ($tab%8); # tab over
-
- @ones = (1) x 80; # a list of 80 1's
- @ones = (5) x @ones; # set all elements to 5
-
-
-=head2 Additive Operators
-
-Binary "+" returns the sum of two numbers.
-
-Binary "-" returns the difference of two numbers.
-
-Binary "." concatenates two strings.
-
-=head2 Shift Operators
-
-Binary "<<" returns the value of its left argument shifted left by the
-number of bits specified by the right argument. Arguments should be
-integers. (See also L<Integer Arithmetic>.)
-
-Binary ">>" returns the value of its left argument shifted right by
-the number of bits specified by the right argument. Arguments should
-be integers. (See also L<Integer Arithmetic>.)
-
-=head2 Named Unary Operators
-
-The various named unary operators are treated as functions with one
-argument, with optional parentheses. These include the filetest
-operators, like C<-f>, C<-M>, etc. See L<perlfunc>.
-
-If any list operator (print(), etc.) or any unary operator (chdir(), etc.)
-is followed by a left parenthesis as the next token, the operator and
-arguments within parentheses are taken to be of highest precedence,
-just like a normal function call. For example,
-because named unary operators are higher precedence than ||:
-
- chdir $foo || die; # (chdir $foo) || die
- chdir($foo) || die; # (chdir $foo) || die
- chdir ($foo) || die; # (chdir $foo) || die
- chdir +($foo) || die; # (chdir $foo) || die
-
-but, because * is higher precedence than named operators:
-
- chdir $foo * 20; # chdir ($foo * 20)
- chdir($foo) * 20; # (chdir $foo) * 20
- chdir ($foo) * 20; # (chdir $foo) * 20
- chdir +($foo) * 20; # chdir ($foo * 20)
-
- rand 10 * 20; # rand (10 * 20)
- rand(10) * 20; # (rand 10) * 20
- rand (10) * 20; # (rand 10) * 20
- rand +(10) * 20; # rand (10 * 20)
-
-See also L<"Terms and List Operators (Leftward)">.
-
-=head2 Relational Operators
-
-Binary "<" returns true if the left argument is numerically less than
-the right argument.
-
-Binary ">" returns true if the left argument is numerically greater
-than the right argument.
-
-Binary "<=" returns true if the left argument is numerically less than
-or equal to the right argument.
-
-Binary ">=" returns true if the left argument is numerically greater
-than or equal to the right argument.
-
-Binary "lt" returns true if the left argument is stringwise less than
-the right argument.
-
-Binary "gt" returns true if the left argument is stringwise greater
-than the right argument.
-
-Binary "le" returns true if the left argument is stringwise less than
-or equal to the right argument.
-
-Binary "ge" returns true if the left argument is stringwise greater
-than or equal to the right argument.
-
-=head2 Equality Operators
-
-Binary "==" returns true if the left argument is numerically equal to
-the right argument.
-
-Binary "!=" returns true if the left argument is numerically not equal
-to the right argument.
-
-Binary "<=>" returns -1, 0, or 1 depending on whether the left
-argument is numerically less than, equal to, or greater than the right
-argument. If your platform supports NaNs (not-a-numbers) as numeric
-values, using them with "<=>" returns undef. NaN is not "<", "==", ">",
-"<=" or ">=" anything (even NaN), so those 5 return false. NaN != NaN
-returns true, as does NaN != anything else. If your platform doesn't
-support NaNs then NaN is just a string with numeric value 0.
-
- perl -le '$a = NaN; print "No NaN support here" if $a == $a'
- perl -le '$a = NaN; print "NaN support here" if $a != $a'
-
-Binary "eq" returns true if the left argument is stringwise equal to
-the right argument.
-
-Binary "ne" returns true if the left argument is stringwise not equal
-to the right argument.
-
-Binary "cmp" returns -1, 0, or 1 depending on whether the left
-argument is stringwise less than, equal to, or greater than the right
-argument.
-
-"lt", "le", "ge", "gt" and "cmp" use the collation (sort) order specified
-by the current locale if C<use locale> is in effect. See L<perllocale>.
-
-=head2 Bitwise And
-
-Binary "&" returns its operators ANDed together bit by bit.
-(See also L<Integer Arithmetic> and L<Bitwise String Operators>.)
-
-=head2 Bitwise Or and Exclusive Or
-
-Binary "|" returns its operators ORed together bit by bit.
-(See also L<Integer Arithmetic> and L<Bitwise String Operators>.)
-
-Binary "^" returns its operators XORed together bit by bit.
-(See also L<Integer Arithmetic> and L<Bitwise String Operators>.)
-
-=head2 C-style Logical And
-
-Binary "&&" performs a short-circuit logical AND operation. That is,
-if the left operand is false, the right operand is not even evaluated.
-Scalar or list context propagates down to the right operand if it
-is evaluated.
-
-=head2 C-style Logical Or
-
-Binary "||" performs a short-circuit logical OR operation. That is,
-if the left operand is true, the right operand is not even evaluated.
-Scalar or list context propagates down to the right operand if it
-is evaluated.
-
-The C<||> and C<&&> operators differ from C's in that, rather than returning
-0 or 1, they return the last value evaluated. Thus, a reasonably portable
-way to find out the home directory (assuming it's not "0") might be:
-
- $home = $ENV{'HOME'} || $ENV{'LOGDIR'} ||
- (getpwuid($<))[7] || die "You're homeless!\n";
-
-In particular, this means that you shouldn't use this
-for selecting between two aggregates for assignment:
-
- @a = @b || @c; # this is wrong
- @a = scalar(@b) || @c; # really meant this
- @a = @b ? @b : @c; # this works fine, though
-
-As more readable alternatives to C<&&> and C<||> when used for
-control flow, Perl provides C<and> and C<or> operators (see below).
-The short-circuit behavior is identical. The precedence of "and" and
-"or" is much lower, however, so that you can safely use them after a
-list operator without the need for parentheses:
-
- unlink "alpha", "beta", "gamma"
- or gripe(), next LINE;
-
-With the C-style operators that would have been written like this:
-
- unlink("alpha", "beta", "gamma")
- || (gripe(), next LINE);
-
-Using "or" for assignment is unlikely to do what you want; see below.
-
-=head2 Range Operators
-
-Binary ".." is the range operator, which is really two different
-operators depending on the context. In list context, it returns an
-array of values counting (up by ones) from the left value to the right
-value. If the left value is greater than the right value then it
-returns the empty array. The range operator is useful for writing
-C<foreach (1..10)> loops and for doing slice operations on arrays. In
-the current implementation, no temporary array is created when the
-range operator is used as the expression in C<foreach> loops, but older
-versions of Perl might burn a lot of memory when you write something
-like this:
-
- for (1 .. 1_000_000) {
- # code
- }
-
-In scalar context, ".." returns a boolean value. The operator is
-bistable, like a flip-flop, and emulates the line-range (comma) operator
-of B<sed>, B<awk>, and various editors. Each ".." operator maintains its
-own boolean state. It is false as long as its left operand is false.
-Once the left operand is true, the range operator stays true until the
-right operand is true, I<AFTER> which the range operator becomes false
-again. It doesn't become false till the next time the range operator is
-evaluated. It can test the right operand and become false on the same
-evaluation it became true (as in B<awk>), but it still returns true once.
-If you don't want it to test the right operand till the next
-evaluation, as in B<sed>, just use three dots ("...") instead of
-two. In all other regards, "..." behaves just like ".." does.
-
-The right operand is not evaluated while the operator is in the
-"false" state, and the left operand is not evaluated while the
-operator is in the "true" state. The precedence is a little lower
-than || and &&. The value returned is either the empty string for
-false, or a sequence number (beginning with 1) for true. The
-sequence number is reset for each range encountered. The final
-sequence number in a range has the string "E0" appended to it, which
-doesn't affect its numeric value, but gives you something to search
-for if you want to exclude the endpoint. You can exclude the
-beginning point by waiting for the sequence number to be greater
-than 1. If either operand of scalar ".." is a constant expression,
-that operand is implicitly compared to the C<$.> variable, the
-current line number. Examples:
-
-As a scalar operator:
-
- if (101 .. 200) { print; } # print 2nd hundred lines
- next line if (1 .. /^$/); # skip header lines
- s/^/> / if (/^$/ .. eof()); # quote body
-
- # parse mail messages
- while (<>) {
- $in_header = 1 .. /^$/;
- $in_body = /^$/ .. eof();
- # do something based on those
- } continue {
- close ARGV if eof; # reset $. each file
- }
-
-As a list operator:
-
- for (101 .. 200) { print; } # print $_ 100 times
- @foo = @foo[0 .. $#foo]; # an expensive no-op
- @foo = @foo[$#foo-4 .. $#foo]; # slice last 5 items
-
-The range operator (in list context) makes use of the magical
-auto-increment algorithm if the operands are strings. You
-can say
-
- @alphabet = ('A' .. 'Z');
-
-to get all normal letters of the alphabet, or
-
- $hexdigit = (0 .. 9, 'a' .. 'f')[$num & 15];
-
-to get a hexadecimal digit, or
-
- @z2 = ('01' .. '31'); print $z2[$mday];
-
-to get dates with leading zeros. If the final value specified is not
-in the sequence that the magical increment would produce, the sequence
-goes until the next value would be longer than the final value
-specified.
-
-=head2 Conditional Operator
-
-Ternary "?:" is the conditional operator, just as in C. It works much
-like an if-then-else. If the argument before the ? is true, the
-argument before the : is returned, otherwise the argument after the :
-is returned. For example:
-
- printf "I have %d dog%s.\n", $n,
- ($n == 1) ? '' : "s";
-
-Scalar or list context propagates downward into the 2nd
-or 3rd argument, whichever is selected.
-
- $a = $ok ? $b : $c; # get a scalar
- @a = $ok ? @b : @c; # get an array
- $a = $ok ? @b : @c; # oops, that's just a count!
-
-The operator may be assigned to if both the 2nd and 3rd arguments are
-legal lvalues (meaning that you can assign to them):
-
- ($a_or_b ? $a : $b) = $c;
-
-Because this operator produces an assignable result, using assignments
-without parentheses will get you in trouble. For example, this:
-
- $a % 2 ? $a += 10 : $a += 2
-
-Really means this:
-
- (($a % 2) ? ($a += 10) : $a) += 2
-
-Rather than this:
-
- ($a % 2) ? ($a += 10) : ($a += 2)
-
-That should probably be written more simply as:
-
- $a += ($a % 2) ? 10 : 2;
-
-=head2 Assignment Operators
-
-"=" is the ordinary assignment operator.
-
-Assignment operators work as in C. That is,
-
- $a += 2;
-
-is equivalent to
-
- $a = $a + 2;
-
-although without duplicating any side effects that dereferencing the lvalue
-might trigger, such as from tie(). Other assignment operators work similarly.
-The following are recognized:
-
- **= += *= &= <<= &&=
- -= /= |= >>= ||=
- .= %= ^=
- x=
-
-Although these are grouped by family, they all have the precedence
-of assignment.
-
-Unlike in C, the scalar assignment operator produces a valid lvalue.
-Modifying an assignment is equivalent to doing the assignment and
-then modifying the variable that was assigned to. This is useful
-for modifying a copy of something, like this:
-
- ($tmp = $global) =~ tr [A-Z] [a-z];
-
-Likewise,
-
- ($a += 2) *= 3;
-
-is equivalent to
-
- $a += 2;
- $a *= 3;
-
-Similarly, a list assignment in list context produces the list of
-lvalues assigned to, and a list assignment in scalar context returns
-the number of elements produced by the expression on the right hand
-side of the assignment.
-
-=head2 Comma Operator
-
-Binary "," is the comma operator. In scalar context it evaluates
-its left argument, throws that value away, then evaluates its right
-argument and returns that value. This is just like C's comma operator.
-
-In list context, it's just the list argument separator, and inserts
-both its arguments into the list.
-
-The => digraph is mostly just a synonym for the comma operator. It's useful for
-documenting arguments that come in pairs. As of release 5.001, it also forces
-any word to the left of it to be interpreted as a string.
-
-=head2 List Operators (Rightward)
-
-On the right side of a list operator, it has very low precedence,
-such that it controls all comma-separated expressions found there.
-The only operators with lower precedence are the logical operators
-"and", "or", and "not", which may be used to evaluate calls to list
-operators without the need for extra parentheses:
-
- open HANDLE, "filename"
- or die "Can't open: $!\n";
-
-See also discussion of list operators in L<Terms and List Operators (Leftward)>.
-
-=head2 Logical Not
-
-Unary "not" returns the logical negation of the expression to its right.
-It's the equivalent of "!" except for the very low precedence.
-
-=head2 Logical And
-
-Binary "and" returns the logical conjunction of the two surrounding
-expressions. It's equivalent to && except for the very low
-precedence. This means that it short-circuits: i.e., the right
-expression is evaluated only if the left expression is true.
-
-=head2 Logical or and Exclusive Or
-
-Binary "or" returns the logical disjunction of the two surrounding
-expressions. It's equivalent to || except for the very low precedence.
-This makes it useful for control flow
-
- print FH $data or die "Can't write to FH: $!";
-
-This means that it short-circuits: i.e., the right expression is evaluated
-only if the left expression is false. Due to its precedence, you should
-probably avoid using this for assignment, only for control flow.
-
- $a = $b or $c; # bug: this is wrong
- ($a = $b) or $c; # really means this
- $a = $b || $c; # better written this way
-
-However, when it's a list-context assignment and you're trying to use
-"||" for control flow, you probably need "or" so that the assignment
-takes higher precedence.
-
- @info = stat($file) || die; # oops, scalar sense of stat!
- @info = stat($file) or die; # better, now @info gets its due
-
-Then again, you could always use parentheses.
-
-Binary "xor" returns the exclusive-OR of the two surrounding expressions.
-It cannot short circuit, of course.
-
-=head2 C Operators Missing From Perl
-
-Here is what C has that Perl doesn't:
-
-=over 8
-
-=item unary &
-
-Address-of operator. (But see the "\" operator for taking a reference.)
-
-=item unary *
-
-Dereference-address operator. (Perl's prefix dereferencing
-operators are typed: $, @, %, and &.)
-
-=item (TYPE)
-
-Type-casting operator.
-
-=back
-
-=head2 Quote and Quote-like Operators
-
-While we usually think of quotes as literal values, in Perl they
-function as operators, providing various kinds of interpolating and
-pattern matching capabilities. Perl provides customary quote characters
-for these behaviors, but also provides a way for you to choose your
-quote character for any of them. In the following table, a C<{}> represents
-any pair of delimiters you choose.
-
- Customary Generic Meaning Interpolates
- '' q{} Literal no
- "" qq{} Literal yes
- `` qx{} Command yes (unless '' is delimiter)
- qw{} Word list no
- // m{} Pattern match yes (unless '' is delimiter)
- qr{} Pattern yes (unless '' is delimiter)
- s{}{} Substitution yes (unless '' is delimiter)
- tr{}{} Transliteration no (but see below)
-
-Non-bracketing delimiters use the same character fore and aft, but the four
-sorts of brackets (round, angle, square, curly) will all nest, which means
-that
-
- q{foo{bar}baz}
-
-is the same as
-
- 'foo{bar}baz'
-
-Note, however, that this does not always work for quoting Perl code:
-
- $s = q{ if($a eq "}") ... }; # WRONG
-
-is a syntax error. The C<Text::Balanced> module on CPAN is able to do this
-properly.
-
-There can be whitespace between the operator and the quoting
-characters, except when C<#> is being used as the quoting character.
-C<q#foo#> is parsed as the string C<foo>, while C<q #foo#> is the
-operator C<q> followed by a comment. Its argument will be taken
-from the next line. This allows you to write:
-
- s {foo} # Replace foo
- {bar} # with bar.
-
-For constructs that do interpolate, variables beginning with "C<$>"
-or "C<@>" are interpolated, as are the following escape sequences. Within
-a transliteration, the first eleven of these sequences may be used.
-
- \t tab (HT, TAB)
- \n newline (NL)
- \r return (CR)
- \f form feed (FF)
- \b backspace (BS)
- \a alarm (bell) (BEL)
- \e escape (ESC)
- \033 octal char (ESC)
- \x1b hex char (ESC)
- \x{263a} wide hex char (SMILEY)
- \c[ control char (ESC)
- \N{name} named char
-
- \l lowercase next char
- \u uppercase next char
- \L lowercase till \E
- \U uppercase till \E
- \E end case modification
- \Q quote non-word characters till \E
-
-If C<use locale> is in effect, the case map used by C<\l>, C<\L>, C<\u>
-and C<\U> is taken from the current locale. See L<perllocale>. For
-documentation of C<\N{name}>, see L<charnames>.
-
-All systems use the virtual C<"\n"> to represent a line terminator,
-called a "newline". There is no such thing as an unvarying, physical
-newline character. It is only an illusion that the operating system,
-device drivers, C libraries, and Perl all conspire to preserve. Not all
-systems read C<"\r"> as ASCII CR and C<"\n"> as ASCII LF. For example,
-on a Mac, these are reversed, and on systems without line terminator,
-printing C<"\n"> may emit no actual data. In general, use C<"\n"> when
-you mean a "newline" for your system, but use the literal ASCII when you
-need an exact character. For example, most networking protocols expect
-and prefer a CR+LF (C<"\015\012"> or C<"\cM\cJ">) for line terminators,
-and although they often accept just C<"\012">, they seldom tolerate just
-C<"\015">. If you get in the habit of using C<"\n"> for networking,
-you may be burned some day.
-
-You cannot include a literal C<$> or C<@> within a C<\Q> sequence.
-An unescaped C<$> or C<@> interpolates the corresponding variable,
-while escaping will cause the literal string C<\$> to be inserted.
-You'll need to write something like C<m/\Quser\E\@\Qhost/>.
-
-Patterns are subject to an additional level of interpretation as a
-regular expression. This is done as a second pass, after variables are
-interpolated, so that regular expressions may be incorporated into the
-pattern from the variables. If this is not what you want, use C<\Q> to
-interpolate a variable literally.
-
-Apart from the behavior described above, Perl does not expand
-multiple levels of interpolation. In particular, contrary to the
-expectations of shell programmers, back-quotes do I<NOT> interpolate
-within double quotes, nor do single quotes impede evaluation of
-variables when used within double quotes.
-
-=head2 Regexp Quote-Like Operators
-
-Here are the quote-like operators that apply to pattern
-matching and related activities.
-
-=over 8
-
-=item ?PATTERN?
-
-This is just like the C</pattern/> search, except that it matches only
-once between calls to the reset() operator. This is a useful
-optimization when you want to see only the first occurrence of
-something in each file of a set of files, for instance. Only C<??>
-patterns local to the current package are reset.
-
- while (<>) {
- if (?^$?) {
- # blank line between header and body
- }
- } continue {
- reset if eof; # clear ?? status for next file
- }
-
-This usage is vaguely deprecated, which means it just might possibly
-be removed in some distant future version of Perl, perhaps somewhere
-around the year 2168.
-
-=item m/PATTERN/cgimosx
-
-=item /PATTERN/cgimosx
-
-Searches a string for a pattern match, and in scalar context returns
-true if it succeeds, false if it fails. If no string is specified
-via the C<=~> or C<!~> operator, the $_ string is searched. (The
-string specified with C<=~> need not be an lvalue--it may be the
-result of an expression evaluation, but remember the C<=~> binds
-rather tightly.) See also L<perlre>. See L<perllocale> for
-discussion of additional considerations that apply when C<use locale>
-is in effect.
-
-Options are:
-
- c Do not reset search position on a failed match when /g is in effect.
- g Match globally, i.e., find all occurrences.
- i Do case-insensitive pattern matching.
- m Treat string as multiple lines.
- o Compile pattern only once.
- s Treat string as single line.
- x Use extended regular expressions.
-
-If "/" is the delimiter then the initial C<m> is optional. With the C<m>
-you can use any pair of non-alphanumeric, non-whitespace characters
-as delimiters. This is particularly useful for matching path names
-that contain "/", to avoid LTS (leaning toothpick syndrome). If "?" is
-the delimiter, then the match-only-once rule of C<?PATTERN?> applies.
-If "'" is the delimiter, no interpolation is performed on the PATTERN.
-
-PATTERN may contain variables, which will be interpolated (and the
-pattern recompiled) every time the pattern search is evaluated, except
-for when the delimiter is a single quote. (Note that C<$(>, C<$)>, and
-C<$|> are not interpolated because they look like end-of-string tests.)
-If you want such a pattern to be compiled only once, add a C</o> after
-the trailing delimiter. This avoids expensive run-time recompilations,
-and is useful when the value you are interpolating won't change over
-the life of the script. However, mentioning C</o> constitutes a promise
-that you won't change the variables in the pattern. If you change them,
-Perl won't even notice. See also L<"qr/STRING/imosx">.
-
-If the PATTERN evaluates to the empty string, the last
-I<successfully> matched regular expression is used instead.
-
-If the C</g> option is not used, C<m//> in list context returns a
-list consisting of the subexpressions matched by the parentheses in the
-pattern, i.e., (C<$1>, C<$2>, C<$3>...). (Note that here C<$1> etc. are
-also set, and that this differs from Perl 4's behavior.) When there are
-no parentheses in the pattern, the return value is the list C<(1)> for
-success. With or without parentheses, an empty list is returned upon
-failure.
-
-Examples:
-
- open(TTY, '/dev/tty');
- <TTY> =~ /^y/i && foo(); # do foo if desired
-
- if (/Version: *([0-9.]*)/) { $version = $1; }
-
- next if m#^/usr/spool/uucp#;
-
- # poor man's grep
- $arg = shift;
- while (<>) {
- print if /$arg/o; # compile only once
- }
-
- if (($F1, $F2, $Etc) = ($foo =~ /^(\S+)\s+(\S+)\s*(.*)/))
-
-This last example splits $foo into the first two words and the
-remainder of the line, and assigns those three fields to $F1, $F2, and
-$Etc. The conditional is true if any variables were assigned, i.e., if
-the pattern matched.
-
-The C</g> modifier specifies global pattern matching--that is,
-matching as many times as possible within the string. How it behaves
-depends on the context. In list context, it returns a list of the
-substrings matched by any capturing parentheses in the regular
-expression. If there are no parentheses, it returns a list of all
-the matched strings, as if there were parentheses around the whole
-pattern.
-
-In scalar context, each execution of C<m//g> finds the next match,
-returning true if it matches, and false if there is no further match.
-The position after the last match can be read or set using the pos()
-function; see L<perlfunc/pos>. A failed match normally resets the
-search position to the beginning of the string, but you can avoid that
-by adding the C</c> modifier (e.g. C<m//gc>). Modifying the target
-string also resets the search position.
-
-You can intermix C<m//g> matches with C<m/\G.../g>, where C<\G> is a
-zero-width assertion that matches the exact position where the previous
-C<m//g>, if any, left off. Without the C</g> modifier, the C<\G> assertion
-still anchors at pos(), but the match is of course only attempted once.
-Using C<\G> without C</g> on a target string that has not previously had a
-C</g> match applied to it is the same as using the C<\A> assertion to match
-the beginning of the string.
-
-Examples:
-
- # list context
- ($one,$five,$fifteen) = (`uptime` =~ /(\d+\.\d+)/g);
-
- # scalar context
- $/ = "";
- while (defined($paragraph = <>)) {
- while ($paragraph =~ /[a-z]['")]*[.!?]+['")]*\s/g) {
- $sentences++;
- }
- }
- print "$sentences\n";
-
- # using m//gc with \G
- $_ = "ppooqppqq";
- while ($i++ < 2) {
- print "1: '";
- print $1 while /(o)/gc; print "', pos=", pos, "\n";
- print "2: '";
- print $1 if /\G(q)/gc; print "', pos=", pos, "\n";
- print "3: '";
- print $1 while /(p)/gc; print "', pos=", pos, "\n";
- }
- print "Final: '$1', pos=",pos,"\n" if /\G(.)/;
-
-The last example should print:
-
- 1: 'oo', pos=4
- 2: 'q', pos=5
- 3: 'pp', pos=7
- 1: '', pos=7
- 2: 'q', pos=8
- 3: '', pos=8
- Final: 'q', pos=8
-
-Notice that the final match matched C<q> instead of C<p>, which a match
-without the C<\G> anchor would have done. Also note that the final match
-did not update C<pos> -- C<pos> is only updated on a C</g> match. If the
-final match did indeed match C<p>, it's a good bet that you're running an
-older (pre-5.6.0) Perl.
-
-A useful idiom for C<lex>-like scanners is C</\G.../gc>. You can
-combine several regexps like this to process a string part-by-part,
-doing different actions depending on which regexp matched. Each
-regexp tries to match where the previous one leaves off.
-
- $_ = <<'EOL';
- $url = new URI::URL "http://www/"; die if $url eq "xXx";
- EOL
- LOOP:
- {
- print(" digits"), redo LOOP if /\G\d+\b[,.;]?\s*/gc;
- print(" lowercase"), redo LOOP if /\G[a-z]+\b[,.;]?\s*/gc;
- print(" UPPERCASE"), redo LOOP if /\G[A-Z]+\b[,.;]?\s*/gc;
- print(" Capitalized"), redo LOOP if /\G[A-Z][a-z]+\b[,.;]?\s*/gc;
- print(" MiXeD"), redo LOOP if /\G[A-Za-z]+\b[,.;]?\s*/gc;
- print(" alphanumeric"), redo LOOP if /\G[A-Za-z0-9]+\b[,.;]?\s*/gc;
- print(" line-noise"), redo LOOP if /\G[^A-Za-z0-9]+/gc;
- print ". That's all!\n";
- }
-
-Here is the output (split into several lines):
-
- line-noise lowercase line-noise lowercase UPPERCASE line-noise
- UPPERCASE line-noise lowercase line-noise lowercase line-noise
- lowercase lowercase line-noise lowercase lowercase line-noise
- MiXeD line-noise. That's all!
-
-=item q/STRING/
-
-=item C<'STRING'>
-
-A single-quoted, literal string. A backslash represents a backslash
-unless followed by the delimiter or another backslash, in which case
-the delimiter or backslash is interpolated.
-
- $foo = q!I said, "You said, 'She said it.'"!;
- $bar = q('This is it.');
- $baz = '\n'; # a two-character string
-
-=item qq/STRING/
-
-=item "STRING"
-
-A double-quoted, interpolated string.
-
- $_ .= qq
- (*** The previous line contains the naughty word "$1".\n)
- if /\b(tcl|java|python)\b/i; # :-)
- $baz = "\n"; # a one-character string
-
-=item qr/STRING/imosx
-
-This operator quotes (and possibly compiles) its I<STRING> as a regular
-expression. I<STRING> is interpolated the same way as I<PATTERN>
-in C<m/PATTERN/>. If "'" is used as the delimiter, no interpolation
-is done. Returns a Perl value which may be used instead of the
-corresponding C</STRING/imosx> expression.
-
-For example,
-
- $rex = qr/my.STRING/is;
- s/$rex/foo/;
-
-is equivalent to
-
- s/my.STRING/foo/is;
-
-The result may be used as a subpattern in a match:
-
- $re = qr/$pattern/;
- $string =~ /foo${re}bar/; # can be interpolated in other patterns
- $string =~ $re; # or used standalone
- $string =~ /$re/; # or this way
-
-Since Perl may compile the pattern at the moment of execution of qr()
-operator, using qr() may have speed advantages in some situations,
-notably if the result of qr() is used standalone:
-
- sub match {
- my $patterns = shift;
- my @compiled = map qr/$_/i, @$patterns;
- grep {
- my $success = 0;
- foreach my $pat (@compiled) {
- $success = 1, last if /$pat/;
- }
- $success;
- } @_;
- }
-
-Precompilation of the pattern into an internal representation at
-the moment of qr() avoids a need to recompile the pattern every
-time a match C</$pat/> is attempted. (Perl has many other internal
-optimizations, but none would be triggered in the above example if
-we did not use qr() operator.)
-
-Options are:
-
- i Do case-insensitive pattern matching.
- m Treat string as multiple lines.
- o Compile pattern only once.
- s Treat string as single line.
- x Use extended regular expressions.
-
-See L<perlre> for additional information on valid syntax for STRING, and
-for a detailed look at the semantics of regular expressions.
-
-=item qx/STRING/
-
-=item `STRING`
-
-A string which is (possibly) interpolated and then executed as a
-system command with C</bin/sh> or its equivalent. Shell wildcards,
-pipes, and redirections will be honored. The collected standard
-output of the command is returned; standard error is unaffected. In
-scalar context, it comes back as a single (potentially multi-line)
-string, or undef if the command failed. In list context, returns a
-list of lines (however you've defined lines with $/ or
-$INPUT_RECORD_SEPARATOR), or an empty list if the command failed.
-
-Because backticks do not affect standard error, use shell file descriptor
-syntax (assuming the shell supports this) if you care to address this.
-To capture a command's STDERR and STDOUT together:
-
- $output = `cmd 2>&1`;
-
-To capture a command's STDOUT but discard its STDERR:
-
- $output = `cmd 2>/dev/null`;
-
-To capture a command's STDERR but discard its STDOUT (ordering is
-important here):
-
- $output = `cmd 2>&1 1>/dev/null`;
-
-To exchange a command's STDOUT and STDERR in order to capture the STDERR
-but leave its STDOUT to come out the old STDERR:
-
- $output = `cmd 3>&1 1>&2 2>&3 3>&-`;
-
-To read both a command's STDOUT and its STDERR separately, it's easiest
-and safest to redirect them separately to files, and then read from those
-files when the program is done:
-
- system("program args 1>/tmp/program.stdout 2>/tmp/program.stderr");
-
-Using single-quote as a delimiter protects the command from Perl's
-double-quote interpolation, passing it on to the shell instead:
-
- $perl_info = qx(ps $$); # that's Perl's $$
- $shell_info = qx'ps $$'; # that's the new shell's $$
-
-How that string gets evaluated is entirely subject to the command
-interpreter on your system. On most platforms, you will have to protect
-shell metacharacters if you want them treated literally. This is in
-practice difficult to do, as it's unclear how to escape which characters.
-See L<perlsec> for a clean and safe example of a manual fork() and exec()
-to emulate backticks safely.
-
-On some platforms (notably DOS-like ones), the shell may not be
-capable of dealing with multiline commands, so putting newlines in
-the string may not get you what you want. You may be able to evaluate
-multiple commands in a single line by separating them with the command
-separator character, if your shell supports that (e.g. C<;> on many Unix
-shells; C<&> on the Windows NT C<cmd> shell).
-
-Beginning with v5.6.0, Perl will attempt to flush all files opened for
-output before starting the child process, but this may not be supported
-on some platforms (see L<perlport>). To be safe, you may need to set
-C<$|> ($AUTOFLUSH in English) or call the C<autoflush()> method of
-C<IO::Handle> on any open handles.
-
-Beware that some command shells may place restrictions on the length
-of the command line. You must ensure your strings don't exceed this
-limit after any necessary interpolations. See the platform-specific
-release notes for more details about your particular environment.
-
-Using this operator can lead to programs that are difficult to port,
-because the shell commands called vary between systems, and may in
-fact not be present at all. As one example, the C<type> command under
-the POSIX shell is very different from the C<type> command under DOS.
-That doesn't mean you should go out of your way to avoid backticks
-when they're the right way to get something done. Perl was made to be
-a glue language, and one of the things it glues together is commands.
-Just understand what you're getting yourself into.
-
-See L<"I/O Operators"> for more discussion.
-
-=item qw/STRING/
-
-Evaluates to a list of the words extracted out of STRING, using embedded
-whitespace as the word delimiters. It can be understood as being roughly
-equivalent to:
-
- split(' ', q/STRING/);
-
-the difference being that it generates a real list at compile time. So
-this expression:
-
- qw(foo bar baz)
-
-is semantically equivalent to the list:
-
- 'foo', 'bar', 'baz'
-
-Some frequently seen examples:
-
- use POSIX qw( setlocale localeconv )
- @EXPORT = qw( foo bar baz );
-
-A common mistake is to try to separate the words with comma or to
-put comments into a multi-line C<qw>-string. For this reason, the
-C<use warnings> pragma and the B<-w> switch (that is, the C<$^W> variable)
-produces warnings if the STRING contains the "," or the "#" character.
-
-=item s/PATTERN/REPLACEMENT/egimosx
-
-Searches a string for a pattern, and if found, replaces that pattern
-with the replacement text and returns the number of substitutions
-made. Otherwise it returns false (specifically, the empty string).
-
-If no string is specified via the C<=~> or C<!~> operator, the C<$_>
-variable is searched and modified. (The string specified with C<=~> must
-be scalar variable, an array element, a hash element, or an assignment
-to one of those, i.e., an lvalue.)
-
-If the delimiter chosen is a single quote, no interpolation is
-done on either the PATTERN or the REPLACEMENT. Otherwise, if the
-PATTERN contains a $ that looks like a variable rather than an
-end-of-string test, the variable will be interpolated into the pattern
-at run-time. If you want the pattern compiled only once the first time
-the variable is interpolated, use the C</o> option. If the pattern
-evaluates to the empty string, the last successfully executed regular
-expression is used instead. See L<perlre> for further explanation on these.
-See L<perllocale> for discussion of additional considerations that apply
-when C<use locale> is in effect.
-
-Options are:
-
- e Evaluate the right side as an expression.
- g Replace globally, i.e., all occurrences.
- i Do case-insensitive pattern matching.
- m Treat string as multiple lines.
- o Compile pattern only once.
- s Treat string as single line.
- x Use extended regular expressions.
-
-Any non-alphanumeric, non-whitespace delimiter may replace the
-slashes. If single quotes are used, no interpretation is done on the
-replacement string (the C</e> modifier overrides this, however). Unlike
-Perl 4, Perl 5 treats backticks as normal delimiters; the replacement
-text is not evaluated as a command. If the
-PATTERN is delimited by bracketing quotes, the REPLACEMENT has its own
-pair of quotes, which may or may not be bracketing quotes, e.g.,
-C<s(foo)(bar)> or C<< s<foo>/bar/ >>. A C</e> will cause the
-replacement portion to be treated as a full-fledged Perl expression
-and evaluated right then and there. It is, however, syntax checked at
-compile-time. A second C<e> modifier will cause the replacement portion
-to be C<eval>ed before being run as a Perl expression.
-
-Examples:
-
- s/\bgreen\b/mauve/g; # don't change wintergreen
-
- $path =~ s|/usr/bin|/usr/local/bin|;
-
- s/Login: $foo/Login: $bar/; # run-time pattern
-
- ($foo = $bar) =~ s/this/that/; # copy first, then change
-
- $count = ($paragraph =~ s/Mister\b/Mr./g); # get change-count
-
- $_ = 'abc123xyz';
- s/\d+/$&*2/e; # yields 'abc246xyz'
- s/\d+/sprintf("%5d",$&)/e; # yields 'abc 246xyz'
- s/\w/$& x 2/eg; # yields 'aabbcc 224466xxyyzz'
-
- s/%(.)/$percent{$1}/g; # change percent escapes; no /e
- s/%(.)/$percent{$1} || $&/ge; # expr now, so /e
- s/^=(\w+)/&pod($1)/ge; # use function call
-
- # expand variables in $_, but dynamics only, using
- # symbolic dereferencing
- s/\$(\w+)/${$1}/g;
-
- # Add one to the value of any numbers in the string
- s/(\d+)/1 + $1/eg;
-
- # This will expand any embedded scalar variable
- # (including lexicals) in $_ : First $1 is interpolated
- # to the variable name, and then evaluated
- s/(\$\w+)/$1/eeg;
-
- # Delete (most) C comments.
- $program =~ s {
- /\* # Match the opening delimiter.
- .*? # Match a minimal number of characters.
- \*/ # Match the closing delimiter.
- } []gsx;
-
- s/^\s*(.*?)\s*$/$1/; # trim white space in $_, expensively
-
- for ($variable) { # trim white space in $variable, cheap
- s/^\s+//;
- s/\s+$//;
- }
-
- s/([^ ]*) *([^ ]*)/$2 $1/; # reverse 1st two fields
-
-Note the use of $ instead of \ in the last example. Unlike
-B<sed>, we use the \<I<digit>> form in only the left hand side.
-Anywhere else it's $<I<digit>>.
-
-Occasionally, you can't use just a C</g> to get all the changes
-to occur that you might want. Here are two common cases:
-
- # put commas in the right places in an integer
- 1 while s/(\d)(\d\d\d)(?!\d)/$1,$2/g;
-
- # expand tabs to 8-column spacing
- 1 while s/\t+/' ' x (length($&)*8 - length($`)%8)/e;
-
-=item tr/SEARCHLIST/REPLACEMENTLIST/cds
-
-=item y/SEARCHLIST/REPLACEMENTLIST/cds
-
-Transliterates all occurrences of the characters found in the search list
-with the corresponding character in the replacement list. It returns
-the number of characters replaced or deleted. If no string is
-specified via the =~ or !~ operator, the $_ string is transliterated. (The
-string specified with =~ must be a scalar variable, an array element, a
-hash element, or an assignment to one of those, i.e., an lvalue.)
-
-A character range may be specified with a hyphen, so C<tr/A-J/0-9/>
-does the same replacement as C<tr/ACEGIBDFHJ/0246813579/>.
-For B<sed> devotees, C<y> is provided as a synonym for C<tr>. If the
-SEARCHLIST is delimited by bracketing quotes, the REPLACEMENTLIST has
-its own pair of quotes, which may or may not be bracketing quotes,
-e.g., C<tr[A-Z][a-z]> or C<tr(+\-*/)/ABCD/>.
-
-Note that C<tr> does B<not> do regular expression character classes
-such as C<\d> or C<[:lower:]>. The <tr> operator is not equivalent to
-the tr(1) utility. If you want to map strings between lower/upper
-cases, see L<perlfunc/lc> and L<perlfunc/uc>, and in general consider
-using the C<s> operator if you need regular expressions.
-
-Note also that the whole range idea is rather unportable between
-character sets--and even within character sets they may cause results
-you probably didn't expect. A sound principle is to use only ranges
-that begin from and end at either alphabets of equal case (a-e, A-E),
-or digits (0-4). Anything else is unsafe. If in doubt, spell out the
-character sets in full.
-
-Options:
-
- c Complement the SEARCHLIST.
- d Delete found but unreplaced characters.
- s Squash duplicate replaced characters.
-
-If the C</c> modifier is specified, the SEARCHLIST character set
-is complemented. If the C</d> modifier is specified, any characters
-specified by SEARCHLIST not found in REPLACEMENTLIST are deleted.
-(Note that this is slightly more flexible than the behavior of some
-B<tr> programs, which delete anything they find in the SEARCHLIST,
-period.) If the C</s> modifier is specified, sequences of characters
-that were transliterated to the same character are squashed down
-to a single instance of the character.
-
-If the C</d> modifier is used, the REPLACEMENTLIST is always interpreted
-exactly as specified. Otherwise, if the REPLACEMENTLIST is shorter
-than the SEARCHLIST, the final character is replicated till it is long
-enough. If the REPLACEMENTLIST is empty, the SEARCHLIST is replicated.
-This latter is useful for counting characters in a class or for
-squashing character sequences in a class.
-
-Examples:
-
- $ARGV[1] =~ tr/A-Z/a-z/; # canonicalize to lower case
-
- $cnt = tr/*/*/; # count the stars in $_
-
- $cnt = $sky =~ tr/*/*/; # count the stars in $sky
-
- $cnt = tr/0-9//; # count the digits in $_
-
- tr/a-zA-Z//s; # bookkeeper -> bokeper
-
- ($HOST = $host) =~ tr/a-z/A-Z/;
-
- tr/a-zA-Z/ /cs; # change non-alphas to single space
-
- tr [\200-\377]
- [\000-\177]; # delete 8th bit
-
-If multiple transliterations are given for a character, only the
-first one is used:
-
- tr/AAA/XYZ/
-
-will transliterate any A to X.
-
-Because the transliteration table is built at compile time, neither
-the SEARCHLIST nor the REPLACEMENTLIST are subjected to double quote
-interpolation. That means that if you want to use variables, you
-must use an eval():
-
- eval "tr/$oldlist/$newlist/";
- die $@ if $@;
-
- eval "tr/$oldlist/$newlist/, 1" or die $@;
-
-=back
-
-=head2 Gory details of parsing quoted constructs
-
-When presented with something that might have several different
-interpretations, Perl uses the B<DWIM> (that's "Do What I Mean")
-principle to pick the most probable interpretation. This strategy
-is so successful that Perl programmers often do not suspect the
-ambivalence of what they write. But from time to time, Perl's
-notions differ substantially from what the author honestly meant.
-
-This section hopes to clarify how Perl handles quoted constructs.
-Although the most common reason to learn this is to unravel labyrinthine
-regular expressions, because the initial steps of parsing are the
-same for all quoting operators, they are all discussed together.
-
-The most important Perl parsing rule is the first one discussed
-below: when processing a quoted construct, Perl first finds the end
-of that construct, then interprets its contents. If you understand
-this rule, you may skip the rest of this section on the first
-reading. The other rules are likely to contradict the user's
-expectations much less frequently than this first one.
-
-Some passes discussed below are performed concurrently, but because
-their results are the same, we consider them individually. For different
-quoting constructs, Perl performs different numbers of passes, from
-one to five, but these passes are always performed in the same order.
-
-=over 4
-
-=item Finding the end
-
-The first pass is finding the end of the quoted construct, whether
-it be a multicharacter delimiter C<"\nEOF\n"> in the C<<<EOF>
-construct, a C</> that terminates a C<qq//> construct, a C<]> which
-terminates C<qq[]> construct, or a C<< > >> which terminates a
-fileglob started with C<< < >>.
-
-When searching for single-character non-pairing delimiters, such
-as C</>, combinations of C<\\> and C<\/> are skipped. However,
-when searching for single-character pairing delimiter like C<[>,
-combinations of C<\\>, C<\]>, and C<\[> are all skipped, and nested
-C<[>, C<]> are skipped as well. When searching for multicharacter
-delimiters, nothing is skipped.
-
-For constructs with three-part delimiters (C<s///>, C<y///>, and
-C<tr///>), the search is repeated once more.
-
-During this search no attention is paid to the semantics of the construct.
-Thus:
-
- "$hash{"$foo/$bar"}"
-
-or:
-
- m/
- bar # NOT a comment, this slash / terminated m//!
- /x
-
-do not form legal quoted expressions. The quoted part ends on the
-first C<"> and C</>, and the rest happens to be a syntax error.
-Because the slash that terminated C<m//> was followed by a C<SPACE>,
-the example above is not C<m//x>, but rather C<m//> with no C</x>
-modifier. So the embedded C<#> is interpreted as a literal C<#>.
-
-=item Removal of backslashes before delimiters
-
-During the second pass, text between the starting and ending
-delimiters is copied to a safe location, and the C<\> is removed
-from combinations consisting of C<\> and delimiter--or delimiters,
-meaning both starting and ending delimiters will should these differ.
-This removal does not happen for multi-character delimiters.
-Note that the combination C<\\> is left intact, just as it was.
-
-Starting from this step no information about the delimiters is
-used in parsing.
-
-=item Interpolation
-
-The next step is interpolation in the text obtained, which is now
-delimiter-independent. There are four different cases.
-
-=over 4
-
-=item C<<<'EOF'>, C<m''>, C<s'''>, C<tr///>, C<y///>
-
-No interpolation is performed.
-
-=item C<''>, C<q//>
-
-The only interpolation is removal of C<\> from pairs C<\\>.
-
-=item C<"">, C<``>, C<qq//>, C<qx//>, C<< <file*glob> >>
-
-C<\Q>, C<\U>, C<\u>, C<\L>, C<\l> (possibly paired with C<\E>) are
-converted to corresponding Perl constructs. Thus, C<"$foo\Qbaz$bar">
-is converted to C<$foo . (quotemeta("baz" . $bar))> internally.
-The other combinations are replaced with appropriate expansions.
-
-Let it be stressed that I<whatever falls between C<\Q> and C<\E>>
-is interpolated in the usual way. Something like C<"\Q\\E"> has
-no C<\E> inside. instead, it has C<\Q>, C<\\>, and C<E>, so the
-result is the same as for C<"\\\\E">. As a general rule, backslashes
-between C<\Q> and C<\E> may lead to counterintuitive results. So,
-C<"\Q\t\E"> is converted to C<quotemeta("\t")>, which is the same
-as C<"\\\t"> (since TAB is not alphanumeric). Note also that:
-
- $str = '\t';
- return "\Q$str";
-
-may be closer to the conjectural I<intention> of the writer of C<"\Q\t\E">.
-
-Interpolated scalars and arrays are converted internally to the C<join> and
-C<.> catenation operations. Thus, C<"$foo XXX '@arr'"> becomes:
-
- $foo . " XXX '" . (join $", @arr) . "'";
-
-All operations above are performed simultaneously, left to right.
-
-Because the result of C<"\Q STRING \E"> has all metacharacters
-quoted, there is no way to insert a literal C<$> or C<@> inside a
-C<\Q\E> pair. If protected by C<\>, C<$> will be quoted to became
-C<"\\\$">; if not, it is interpreted as the start of an interpolated
-scalar.
-
-Note also that the interpolation code needs to make a decision on
-where the interpolated scalar ends. For instance, whether
-C<< "a $b -> {c}" >> really means:
-
- "a " . $b . " -> {c}";
-
-or:
-
- "a " . $b -> {c};
-
-Most of the time, the longest possible text that does not include
-spaces between components and which contains matching braces or
-brackets. because the outcome may be determined by voting based
-on heuristic estimators, the result is not strictly predictable.
-Fortunately, it's usually correct for ambiguous cases.
-
-=item C<?RE?>, C</RE/>, C<m/RE/>, C<s/RE/foo/>,
-
-Processing of C<\Q>, C<\U>, C<\u>, C<\L>, C<\l>, and interpolation
-happens (almost) as with C<qq//> constructs, but the substitution
-of C<\> followed by RE-special chars (including C<\>) is not
-performed. Moreover, inside C<(?{BLOCK})>, C<(?# comment )>, and
-a C<#>-comment in a C<//x>-regular expression, no processing is
-performed whatsoever. This is the first step at which the presence
-of the C<//x> modifier is relevant.
-
-Interpolation has several quirks: C<$|>, C<$(>, and C<$)> are not
-interpolated, and constructs C<$var[SOMETHING]> are voted (by several
-different estimators) to be either an array element or C<$var>
-followed by an RE alternative. This is where the notation
-C<${arr[$bar]}> comes handy: C</${arr[0-9]}/> is interpreted as
-array element C<-9>, not as a regular expression from the variable
-C<$arr> followed by a digit, which would be the interpretation of
-C</$arr[0-9]/>. Since voting among different estimators may occur,
-the result is not predictable.
-
-It is at this step that C<\1> is begrudgingly converted to C<$1> in
-the replacement text of C<s///> to correct the incorrigible
-I<sed> hackers who haven't picked up the saner idiom yet. A warning
-is emitted if the C<use warnings> pragma or the B<-w> command-line flag
-(that is, the C<$^W> variable) was set.
-
-The lack of processing of C<\\> creates specific restrictions on
-the post-processed text. If the delimiter is C</>, one cannot get
-the combination C<\/> into the result of this step. C</> will
-finish the regular expression, C<\/> will be stripped to C</> on
-the previous step, and C<\\/> will be left as is. Because C</> is
-equivalent to C<\/> inside a regular expression, this does not
-matter unless the delimiter happens to be character special to the
-RE engine, such as in C<s*foo*bar*>, C<m[foo]>, or C<?foo?>; or an
-alphanumeric char, as in:
-
- m m ^ a \s* b mmx;
-
-In the RE above, which is intentionally obfuscated for illustration, the
-delimiter is C<m>, the modifier is C<mx>, and after backslash-removal the
-RE is the same as for C<m/ ^ a s* b /mx>). There's more than one
-reason you're encouraged to restrict your delimiters to non-alphanumeric,
-non-whitespace choices.
-
-=back
-
-This step is the last one for all constructs except regular expressions,
-which are processed further.
-
-=item Interpolation of regular expressions
-
-Previous steps were performed during the compilation of Perl code,
-but this one happens at run time--although it may be optimized to
-be calculated at compile time if appropriate. After preprocessing
-described above, and possibly after evaluation if catenation,
-joining, casing translation, or metaquoting are involved, the
-resulting I<string> is passed to the RE engine for compilation.
-
-Whatever happens in the RE engine might be better discussed in L<perlre>,
-but for the sake of continuity, we shall do so here.
-
-This is another step where the presence of the C<//x> modifier is
-relevant. The RE engine scans the string from left to right and
-converts it to a finite automaton.
-
-Backslashed characters are either replaced with corresponding
-literal strings (as with C<\{>), or else they generate special nodes
-in the finite automaton (as with C<\b>). Characters special to the
-RE engine (such as C<|>) generate corresponding nodes or groups of
-nodes. C<(?#...)> comments are ignored. All the rest is either
-converted to literal strings to match, or else is ignored (as is
-whitespace and C<#>-style comments if C<//x> is present).
-
-Parsing of the bracketed character class construct, C<[...]>, is
-rather different than the rule used for the rest of the pattern.
-The terminator of this construct is found using the same rules as
-for finding the terminator of a C<{}>-delimited construct, the only
-exception being that C<]> immediately following C<[> is treated as
-though preceded by a backslash. Similarly, the terminator of
-C<(?{...})> is found using the same rules as for finding the
-terminator of a C<{}>-delimited construct.
-
-It is possible to inspect both the string given to RE engine and the
-resulting finite automaton. See the arguments C<debug>/C<debugcolor>
-in the C<use L<re>> pragma, as well as Perl's B<-Dr> command-line
-switch documented in L<perlrun/"Command Switches">.
-
-=item Optimization of regular expressions
-
-This step is listed for completeness only. Since it does not change
-semantics, details of this step are not documented and are subject
-to change without notice. This step is performed over the finite
-automaton that was generated during the previous pass.
-
-It is at this stage that C<split()> silently optimizes C</^/> to
-mean C</^/m>.
-
-=back
-
-=head2 I/O Operators
-
-There are several I/O operators you should know about.
-
-A string enclosed by backticks (grave accents) first undergoes
-double-quote interpolation. It is then interpreted as an external
-command, and the output of that command is the value of the
-backtick string, like in a shell. In scalar context, a single string
-consisting of all output is returned. In list context, a list of
-values is returned, one per line of output. (You can set C<$/> to use
-a different line terminator.) The command is executed each time the
-pseudo-literal is evaluated. The status value of the command is
-returned in C<$?> (see L<perlvar> for the interpretation of C<$?>).
-Unlike in B<csh>, no translation is done on the return data--newlines
-remain newlines. Unlike in any of the shells, single quotes do not
-hide variable names in the command from interpretation. To pass a
-literal dollar-sign through to the shell you need to hide it with a
-backslash. The generalized form of backticks is C<qx//>. (Because
-backticks always undergo shell expansion as well, see L<perlsec> for
-security concerns.)
-
-In scalar context, evaluating a filehandle in angle brackets yields
-the next line from that file (the newline, if any, included), or
-C<undef> at end-of-file or on error. When C<$/> is set to C<undef>
-(sometimes known as file-slurp mode) and the file is empty, it
-returns C<''> the first time, followed by C<undef> subsequently.
-
-Ordinarily you must assign the returned value to a variable, but
-there is one situation where an automatic assignment happens. If
-and only if the input symbol is the only thing inside the conditional
-of a C<while> statement (even if disguised as a C<for(;;)> loop),
-the value is automatically assigned to the global variable $_,
-destroying whatever was there previously. (This may seem like an
-odd thing to you, but you'll use the construct in almost every Perl
-script you write.) The $_ variable is not implicitly localized.
-You'll have to put a C<local $_;> before the loop if you want that
-to happen.
-
-The following lines are equivalent:
-
- while (defined($_ = <STDIN>)) { print; }
- while ($_ = <STDIN>) { print; }
- while (<STDIN>) { print; }
- for (;<STDIN>;) { print; }
- print while defined($_ = <STDIN>);
- print while ($_ = <STDIN>);
- print while <STDIN>;
-
-This also behaves similarly, but avoids $_ :
-
- while (my $line = <STDIN>) { print $line }
-
-In these loop constructs, the assigned value (whether assignment
-is automatic or explicit) is then tested to see whether it is
-defined. The defined test avoids problems where line has a string
-value that would be treated as false by Perl, for example a "" or
-a "0" with no trailing newline. If you really mean for such values
-to terminate the loop, they should be tested for explicitly:
-
- while (($_ = <STDIN>) ne '0') { ... }
- while (<STDIN>) { last unless $_; ... }
-
-In other boolean contexts, C<< <I<filehandle>> >> without an
-explicit C<defined> test or comparison elicit a warning if the
-C<use warnings> pragma or the B<-w>
-command-line switch (the C<$^W> variable) is in effect.
-
-The filehandles STDIN, STDOUT, and STDERR are predefined. (The
-filehandles C<stdin>, C<stdout>, and C<stderr> will also work except
-in packages, where they would be interpreted as local identifiers
-rather than global.) Additional filehandles may be created with
-the open() function, amongst others. See L<perlopentut> and
-L<perlfunc/open> for details on this.
-
-If a <FILEHANDLE> is used in a context that is looking for
-a list, a list comprising all input lines is returned, one line per
-list element. It's easy to grow to a rather large data space this
-way, so use with care.
-
-<FILEHANDLE> may also be spelled C<readline(*FILEHANDLE)>.
-See L<perlfunc/readline>.
-
-The null filehandle <> is special: it can be used to emulate the
-behavior of B<sed> and B<awk>. Input from <> comes either from
-standard input, or from each file listed on the command line. Here's
-how it works: the first time <> is evaluated, the @ARGV array is
-checked, and if it is empty, C<$ARGV[0]> is set to "-", which when opened
-gives you standard input. The @ARGV array is then processed as a list
-of filenames. The loop
-
- while (<>) {
- ... # code for each line
- }
-
-is equivalent to the following Perl-like pseudo code:
-
- unshift(@ARGV, '-') unless @ARGV;
- while ($ARGV = shift) {
- open(ARGV, $ARGV);
- while (<ARGV>) {
- ... # code for each line
- }
- }
-
-except that it isn't so cumbersome to say, and will actually work.
-It really does shift the @ARGV array and put the current filename
-into the $ARGV variable. It also uses filehandle I<ARGV>
-internally--<> is just a synonym for <ARGV>, which
-is magical. (The pseudo code above doesn't work because it treats
-<ARGV> as non-magical.)
-
-You can modify @ARGV before the first <> as long as the array ends up
-containing the list of filenames you really want. Line numbers (C<$.>)
-continue as though the input were one big happy file. See the example
-in L<perlfunc/eof> for how to reset line numbers on each file.
-
-If you want to set @ARGV to your own list of files, go right ahead.
-This sets @ARGV to all plain text files if no @ARGV was given:
-
- @ARGV = grep { -f && -T } glob('*') unless @ARGV;
-
-You can even set them to pipe commands. For example, this automatically
-filters compressed arguments through B<gzip>:
-
- @ARGV = map { /\.(gz|Z)$/ ? "gzip -dc < $_ |" : $_ } @ARGV;
-
-If you want to pass switches into your script, you can use one of the
-Getopts modules or put a loop on the front like this:
-
- while ($_ = $ARGV[0], /^-/) {
- shift;
- last if /^--$/;
- if (/^-D(.*)/) { $debug = $1 }
- if (/^-v/) { $verbose++ }
- # ... # other switches
- }
-
- while (<>) {
- # ... # code for each line
- }
-
-The <> symbol will return C<undef> for end-of-file only once.
-If you call it again after this, it will assume you are processing another
-@ARGV list, and if you haven't set @ARGV, will read input from STDIN.
-
-If angle brackets contain is a simple scalar variable (e.g.,
-<$foo>), then that variable contains the name of the
-filehandle to input from, or its typeglob, or a reference to the
-same. For example:
-
- $fh = \*STDIN;
- $line = <$fh>;
-
-If what's within the angle brackets is neither a filehandle nor a simple
-scalar variable containing a filehandle name, typeglob, or typeglob
-reference, it is interpreted as a filename pattern to be globbed, and
-either a list of filenames or the next filename in the list is returned,
-depending on context. This distinction is determined on syntactic
-grounds alone. That means C<< <$x> >> is always a readline() from
-an indirect handle, but C<< <$hash{key}> >> is always a glob().
-That's because $x is a simple scalar variable, but C<$hash{key}> is
-not--it's a hash element.
-
-One level of double-quote interpretation is done first, but you can't
-say C<< <$foo> >> because that's an indirect filehandle as explained
-in the previous paragraph. (In older versions of Perl, programmers
-would insert curly brackets to force interpretation as a filename glob:
-C<< <${foo}> >>. These days, it's considered cleaner to call the
-internal function directly as C<glob($foo)>, which is probably the right
-way to have done it in the first place.) For example:
-
- while (<*.c>) {
- chmod 0644, $_;
- }
-
-is roughly equivalent to:
-
- open(FOO, "echo *.c | tr -s ' \t\r\f' '\\012\\012\\012\\012'|");
- while (<FOO>) {
- chomp;
- chmod 0644, $_;
- }
-
-except that the globbing is actually done internally using the standard
-C<File::Glob> extension. Of course, the shortest way to do the above is:
-
- chmod 0644, <*.c>;
-
-A (file)glob evaluates its (embedded) argument only when it is
-starting a new list. All values must be read before it will start
-over. In list context, this isn't important because you automatically
-get them all anyway. However, in scalar context the operator returns
-the next value each time it's called, or C<undef> when the list has
-run out. As with filehandle reads, an automatic C<defined> is
-generated when the glob occurs in the test part of a C<while>,
-because legal glob returns (e.g. a file called F<0>) would otherwise
-terminate the loop. Again, C<undef> is returned only once. So if
-you're expecting a single value from a glob, it is much better to
-say
-
- ($file) = <blurch*>;
-
-than
-
- $file = <blurch*>;
-
-because the latter will alternate between returning a filename and
-returning false.
-
-It you're trying to do variable interpolation, it's definitely better
-to use the glob() function, because the older notation can cause people
-to become confused with the indirect filehandle notation.
-
- @files = glob("$dir/*.[ch]");
- @files = glob($files[$i]);
-
-=head2 Constant Folding
-
-Like C, Perl does a certain amount of expression evaluation at
-compile time whenever it determines that all arguments to an
-operator are static and have no side effects. In particular, string
-concatenation happens at compile time between literals that don't do
-variable substitution. Backslash interpolation also happens at
-compile time. You can say
-
- 'Now is the time for all' . "\n" .
- 'good men to come to.'
-
-and this all reduces to one string internally. Likewise, if
-you say
-
- foreach $file (@filenames) {
- if (-s $file > 5 + 100 * 2**16) { }
- }
-
-the compiler will precompute the number which that expression
-represents so that the interpreter won't have to.
-
-=head2 Bitwise String Operators
-
-Bitstrings of any size may be manipulated by the bitwise operators
-(C<~ | & ^>).
-
-If the operands to a binary bitwise op are strings of different
-sizes, B<|> and B<^> ops act as though the shorter operand had
-additional zero bits on the right, while the B<&> op acts as though
-the longer operand were truncated to the length of the shorter.
-The granularity for such extension or truncation is one or more
-bytes.
-
- # ASCII-based examples
- print "j p \n" ^ " a h"; # prints "JAPH\n"
- print "JA" | " ph\n"; # prints "japh\n"
- print "japh\nJunk" & '_____'; # prints "JAPH\n";
- print 'p N$' ^ " E<H\n"; # prints "Perl\n";
-
-If you are intending to manipulate bitstrings, be certain that
-you're supplying bitstrings: If an operand is a number, that will imply
-a B<numeric> bitwise operation. You may explicitly show which type of
-operation you intend by using C<""> or C<0+>, as in the examples below.
-
- $foo = 150 | 105 ; # yields 255 (0x96 | 0x69 is 0xFF)
- $foo = '150' | 105 ; # yields 255
- $foo = 150 | '105'; # yields 255
- $foo = '150' | '105'; # yields string '155' (under ASCII)
-
- $baz = 0+$foo & 0+$bar; # both ops explicitly numeric
- $biz = "$foo" ^ "$bar"; # both ops explicitly stringy
-
-See L<perlfunc/vec> for information on how to manipulate individual bits
-in a bit vector.
-
-=head2 Integer Arithmetic
-
-By default, Perl assumes that it must do most of its arithmetic in
-floating point. But by saying
-
- use integer;
-
-you may tell the compiler that it's okay to use integer operations
-(if it feels like it) from here to the end of the enclosing BLOCK.
-An inner BLOCK may countermand this by saying
-
- no integer;
-
-which lasts until the end of that BLOCK. Note that this doesn't
-mean everything is only an integer, merely that Perl may use integer
-operations if it is so inclined. For example, even under C<use
-integer>, if you take the C<sqrt(2)>, you'll still get C<1.4142135623731>
-or so.
-
-Used on numbers, the bitwise operators ("&", "|", "^", "~", "<<",
-and ">>") always produce integral results. (But see also
-L<Bitwise String Operators>.) However, C<use integer> still has meaning for
-them. By default, their results are interpreted as unsigned integers, but
-if C<use integer> is in effect, their results are interpreted
-as signed integers. For example, C<~0> usually evaluates to a large
-integral value. However, C<use integer; ~0> is C<-1> on twos-complement
-machines.
-
-=head2 Floating-point Arithmetic
-
-While C<use integer> provides integer-only arithmetic, there is no
-analogous mechanism to provide automatic rounding or truncation to a
-certain number of decimal places. For rounding to a certain number
-of digits, sprintf() or printf() is usually the easiest route.
-See L<perlfaq4>.
-
-Floating-point numbers are only approximations to what a mathematician
-would call real numbers. There are infinitely more reals than floats,
-so some corners must be cut. For example:
-
- printf "%.20g\n", 123456789123456789;
- # produces 123456789123456784
-
-Testing for exact equality of floating-point equality or inequality is
-not a good idea. Here's a (relatively expensive) work-around to compare
-whether two floating-point numbers are equal to a particular number of
-decimal places. See Knuth, volume II, for a more robust treatment of
-this topic.
-
- sub fp_equal {
- my ($X, $Y, $POINTS) = @_;
- my ($tX, $tY);
- $tX = sprintf("%.${POINTS}g", $X);
- $tY = sprintf("%.${POINTS}g", $Y);
- return $tX eq $tY;
- }
-
-The POSIX module (part of the standard perl distribution) implements
-ceil(), floor(), and other mathematical and trigonometric functions.
-The Math::Complex module (part of the standard perl distribution)
-defines mathematical functions that work on both the reals and the
-imaginary numbers. Math::Complex not as efficient as POSIX, but
-POSIX can't work with complex numbers.
-
-Rounding in financial applications can have serious implications, and
-the rounding method used should be specified precisely. In these
-cases, it probably pays not to trust whichever system rounding is
-being used by Perl, but to instead implement the rounding function you
-need yourself.
-
-=head2 Bigger Numbers
-
-The standard Math::BigInt and Math::BigFloat modules provide
-variable-precision arithmetic and overloaded operators, although
-they're currently pretty slow. At the cost of some space and
-considerable speed, they avoid the normal pitfalls associated with
-limited-precision representations.
-
- use Math::BigInt;
- $x = Math::BigInt->new('123456789123456789');
- print $x * $x;
-
- # prints +15241578780673678515622620750190521
-
-There are several modules that let you calculate with (bound only by
-memory and cpu-time) unlimited or fixed precision. There are also
-some non-standard modules that provide faster implementations via
-external C libraries.
-
-Here is a short, but incomplete summary:
-
- Math::Fraction big, unlimited fractions like 9973 / 12967
- Math::String treat string sequences like numbers
- Math::FixedPrecision calculate with a fixed precision
- Math::Currency for currency calculations
- Bit::Vector manipulate bit vectors fast (uses C)
- Math::BigIntFast Bit::Vector wrapper for big numbers
- Math::Pari provides access to the Pari C library
- Math::BigInteger uses an external C library
- Math::Cephes uses external Cephes C library (no big numbers)
- Math::Cephes::Fraction fractions via the Cephes library
- Math::GMP another one using an external C library
-
-Choose wisely.
-
-=cut
diff --git a/contrib/perl5/pod/perlopentut.pod b/contrib/perl5/pod/perlopentut.pod
deleted file mode 100644
index b4003f4..0000000
--- a/contrib/perl5/pod/perlopentut.pod
+++ /dev/null
@@ -1,864 +0,0 @@
-=head1 NAME
-
-perlopentut - tutorial on opening things in Perl
-
-=head1 DESCRIPTION
-
-Perl has two simple, built-in ways to open files: the shell way for
-convenience, and the C way for precision. The choice is yours.
-
-=head1 Open E<agrave> la shell
-
-Perl's C<open> function was designed to mimic the way command-line
-redirection in the shell works. Here are some basic examples
-from the shell:
-
- $ myprogram file1 file2 file3
- $ myprogram < inputfile
- $ myprogram > outputfile
- $ myprogram >> outputfile
- $ myprogram | otherprogram
- $ otherprogram | myprogram
-
-And here are some more advanced examples:
-
- $ otherprogram | myprogram f1 - f2
- $ otherprogram 2>&1 | myprogram -
- $ myprogram <&3
- $ myprogram >&4
-
-Programmers accustomed to constructs like those above can take comfort
-in learning that Perl directly supports these familiar constructs using
-virtually the same syntax as the shell.
-
-=head2 Simple Opens
-
-The C<open> function takes two arguments: the first is a filehandle,
-and the second is a single string comprising both what to open and how
-to open it. C<open> returns true when it works, and when it fails,
-returns a false value and sets the special variable $! to reflect
-the system error. If the filehandle was previously opened, it will
-be implicitly closed first.
-
-For example:
-
- open(INFO, "datafile") || die("can't open datafile: $!");
- open(INFO, "< datafile") || die("can't open datafile: $!");
- open(RESULTS,"> runstats") || die("can't open runstats: $!");
- open(LOG, ">> logfile ") || die("can't open logfile: $!");
-
-If you prefer the low-punctuation version, you could write that this way:
-
- open INFO, "< datafile" or die "can't open datafile: $!";
- open RESULTS,"> runstats" or die "can't open runstats: $!";
- open LOG, ">> logfile " or die "can't open logfile: $!";
-
-A few things to notice. First, the leading less-than is optional.
-If omitted, Perl assumes that you want to open the file for reading.
-
-The other important thing to notice is that, just as in the shell,
-any white space before or after the filename is ignored. This is good,
-because you wouldn't want these to do different things:
-
- open INFO, "<datafile"
- open INFO, "< datafile"
- open INFO, "< datafile"
-
-Ignoring surround whitespace also helps for when you read a filename in
-from a different file, and forget to trim it before opening:
-
- $filename = <INFO>; # oops, \n still there
- open(EXTRA, "< $filename") || die "can't open $filename: $!";
-
-This is not a bug, but a feature. Because C<open> mimics the shell in
-its style of using redirection arrows to specify how to open the file, it
-also does so with respect to extra white space around the filename itself
-as well. For accessing files with naughty names, see
-L<"Dispelling the Dweomer">.
-
-=head2 Pipe Opens
-
-In C, when you want to open a file using the standard I/O library,
-you use the C<fopen> function, but when opening a pipe, you use the
-C<popen> function. But in the shell, you just use a different redirection
-character. That's also the case for Perl. The C<open> call
-remains the same--just its argument differs.
-
-If the leading character is a pipe symbol, C<open> starts up a new
-command and open a write-only filehandle leading into that command.
-This lets you write into that handle and have what you write show up on
-that command's standard input. For example:
-
- open(PRINTER, "| lpr -Plp1") || die "cannot fork: $!";
- print PRINTER "stuff\n";
- close(PRINTER) || die "can't close lpr: $!";
-
-If the trailing character is a pipe, you start up a new command and open a
-read-only filehandle leading out of that command. This lets whatever that
-command writes to its standard output show up on your handle for reading.
-For example:
-
- open(NET, "netstat -i -n |") || die "cannot fork: $!";
- while (<NET>) { } # do something with input
- close(NET) || die "can't close netstat: $!";
-
-What happens if you try to open a pipe to or from a non-existent command?
-In most systems, such an C<open> will not return an error. That's
-because in the traditional C<fork>/C<exec> model, running the other
-program happens only in the forked child process, which means that
-the failed C<exec> can't be reflected in the return value of C<open>.
-Only a failed C<fork> shows up there. See
-L<perlfaq8/"Why doesn't open() return an error when a pipe open fails?">
-to see how to cope with this. There's also an explanation in L<perlipc>.
-
-If you would like to open a bidirectional pipe, the IPC::Open2
-library will handle this for you. Check out
-L<perlipc/"Bidirectional Communication with Another Process">
-
-=head2 The Minus File
-
-Again following the lead of the standard shell utilities, Perl's
-C<open> function treats a file whose name is a single minus, "-", in a
-special way. If you open minus for reading, it really means to access
-the standard input. If you open minus for writing, it really means to
-access the standard output.
-
-If minus can be used as the default input or default output, what happens
-if you open a pipe into or out of minus? What's the default command it
-would run? The same script as you're currently running! This is actually
-a stealth C<fork> hidden inside an C<open> call. See
-L<perlipc/"Safe Pipe Opens"> for details.
-
-=head2 Mixing Reads and Writes
-
-It is possible to specify both read and write access. All you do is
-add a "+" symbol in front of the redirection. But as in the shell,
-using a less-than on a file never creates a new file; it only opens an
-existing one. On the other hand, using a greater-than always clobbers
-(truncates to zero length) an existing file, or creates a brand-new one
-if there isn't an old one. Adding a "+" for read-write doesn't affect
-whether it only works on existing files or always clobbers existing ones.
-
- open(WTMP, "+< /usr/adm/wtmp")
- || die "can't open /usr/adm/wtmp: $!";
-
- open(SCREEN, "+> /tmp/lkscreen")
- || die "can't open /tmp/lkscreen: $!";
-
- open(LOGFILE, "+>> /tmp/applog"
- || die "can't open /tmp/applog: $!";
-
-The first one won't create a new file, and the second one will always
-clobber an old one. The third one will create a new file if necessary
-and not clobber an old one, and it will allow you to read at any point
-in the file, but all writes will always go to the end. In short,
-the first case is substantially more common than the second and third
-cases, which are almost always wrong. (If you know C, the plus in
-Perl's C<open> is historically derived from the one in C's fopen(3S),
-which it ultimately calls.)
-
-In fact, when it comes to updating a file, unless you're working on
-a binary file as in the WTMP case above, you probably don't want to
-use this approach for updating. Instead, Perl's B<-i> flag comes to
-the rescue. The following command takes all the C, C++, or yacc source
-or header files and changes all their foo's to bar's, leaving
-the old version in the original file name with a ".orig" tacked
-on the end:
-
- $ perl -i.orig -pe 's/\bfoo\b/bar/g' *.[Cchy]
-
-This is a short cut for some renaming games that are really
-the best way to update textfiles. See the second question in
-L<perlfaq5> for more details.
-
-=head2 Filters
-
-One of the most common uses for C<open> is one you never
-even notice. When you process the ARGV filehandle using
-C<< <ARGV> >>, Perl actually does an implicit open
-on each file in @ARGV. Thus a program called like this:
-
- $ myprogram file1 file2 file3
-
-Can have all its files opened and processed one at a time
-using a construct no more complex than:
-
- while (<>) {
- # do something with $_
- }
-
-If @ARGV is empty when the loop first begins, Perl pretends you've opened
-up minus, that is, the standard input. In fact, $ARGV, the currently
-open file during C<< <ARGV> >> processing, is even set to "-"
-in these circumstances.
-
-You are welcome to pre-process your @ARGV before starting the loop to
-make sure it's to your liking. One reason to do this might be to remove
-command options beginning with a minus. While you can always roll the
-simple ones by hand, the Getopts modules are good for this.
-
- use Getopt::Std;
-
- # -v, -D, -o ARG, sets $opt_v, $opt_D, $opt_o
- getopts("vDo:");
-
- # -v, -D, -o ARG, sets $args{v}, $args{D}, $args{o}
- getopts("vDo:", \%args);
-
-Or the standard Getopt::Long module to permit named arguments:
-
- use Getopt::Long;
- GetOptions( "verbose" => \$verbose, # --verbose
- "Debug" => \$debug, # --Debug
- "output=s" => \$output );
- # --output=somestring or --output somestring
-
-Another reason for preprocessing arguments is to make an empty
-argument list default to all files:
-
- @ARGV = glob("*") unless @ARGV;
-
-You could even filter out all but plain, text files. This is a bit
-silent, of course, and you might prefer to mention them on the way.
-
- @ARGV = grep { -f && -T } @ARGV;
-
-If you're using the B<-n> or B<-p> command-line options, you
-should put changes to @ARGV in a C<BEGIN{}> block.
-
-Remember that a normal C<open> has special properties, in that it might
-call fopen(3S) or it might called popen(3S), depending on what its
-argument looks like; that's why it's sometimes called "magic open".
-Here's an example:
-
- $pwdinfo = `domainname` =~ /^(\(none\))?$/
- ? '< /etc/passwd'
- : 'ypcat passwd |';
-
- open(PWD, $pwdinfo)
- or die "can't open $pwdinfo: $!";
-
-This sort of thing also comes into play in filter processing. Because
-C<< <ARGV> >> processing employs the normal, shell-style Perl C<open>,
-it respects all the special things we've already seen:
-
- $ myprogram f1 "cmd1|" - f2 "cmd2|" f3 < tmpfile
-
-That program will read from the file F<f1>, the process F<cmd1>, standard
-input (F<tmpfile> in this case), the F<f2> file, the F<cmd2> command,
-and finally the F<f3> file.
-
-Yes, this also means that if you have a file named "-" (and so on) in
-your directory, that they won't be processed as literal files by C<open>.
-You'll need to pass them as "./-" much as you would for the I<rm> program.
-Or you could use C<sysopen> as described below.
-
-One of the more interesting applications is to change files of a certain
-name into pipes. For example, to autoprocess gzipped or compressed
-files by decompressing them with I<gzip>:
-
- @ARGV = map { /^\.(gz|Z)$/ ? "gzip -dc $_ |" : $_ } @ARGV;
-
-Or, if you have the I<GET> program installed from LWP,
-you can fetch URLs before processing them:
-
- @ARGV = map { m#^\w+://# ? "GET $_ |" : $_ } @ARGV;
-
-It's not for nothing that this is called magic C<< <ARGV> >>.
-Pretty nifty, eh?
-
-=head1 Open E<agrave> la C
-
-If you want the convenience of the shell, then Perl's C<open> is
-definitely the way to go. On the other hand, if you want finer precision
-than C's simplistic fopen(3S) provides, then you should look to Perl's
-C<sysopen>, which is a direct hook into the open(2) system call.
-That does mean it's a bit more involved, but that's the price of
-precision.
-
-C<sysopen> takes 3 (or 4) arguments.
-
- sysopen HANDLE, PATH, FLAGS, [MASK]
-
-The HANDLE argument is a filehandle just as with C<open>. The PATH is
-a literal path, one that doesn't pay attention to any greater-thans or
-less-thans or pipes or minuses, nor ignore white space. If it's there,
-it's part of the path. The FLAGS argument contains one or more values
-derived from the Fcntl module that have been or'd together using the
-bitwise "|" operator. The final argument, the MASK, is optional; if
-present, it is combined with the user's current umask for the creation
-mode of the file. You should usually omit this.
-
-Although the traditional values of read-only, write-only, and read-write
-are 0, 1, and 2 respectively, this is known not to hold true on some
-systems. Instead, it's best to load in the appropriate constants first
-from the Fcntl module, which supplies the following standard flags:
-
- O_RDONLY Read only
- O_WRONLY Write only
- O_RDWR Read and write
- O_CREAT Create the file if it doesn't exist
- O_EXCL Fail if the file already exists
- O_APPEND Append to the file
- O_TRUNC Truncate the file
- O_NONBLOCK Non-blocking access
-
-Less common flags that are sometimes available on some operating
-systems include C<O_BINARY>, C<O_TEXT>, C<O_SHLOCK>, C<O_EXLOCK>,
-C<O_DEFER>, C<O_SYNC>, C<O_ASYNC>, C<O_DSYNC>, C<O_RSYNC>,
-C<O_NOCTTY>, C<O_NDELAY> and C<O_LARGEFILE>. Consult your open(2)
-manpage or its local equivalent for details. (Note: starting from
-Perl release 5.6 the O_LARGEFILE flag, if available, is automatically
-added to the sysopen() flags because large files are the default.)
-
-Here's how to use C<sysopen> to emulate the simple C<open> calls we had
-before. We'll omit the C<|| die $!> checks for clarity, but make sure
-you always check the return values in real code. These aren't quite
-the same, since C<open> will trim leading and trailing white space,
-but you'll get the idea:
-
-To open a file for reading:
-
- open(FH, "< $path");
- sysopen(FH, $path, O_RDONLY);
-
-To open a file for writing, creating a new file if needed or else truncating
-an old file:
-
- open(FH, "> $path");
- sysopen(FH, $path, O_WRONLY | O_TRUNC | O_CREAT);
-
-To open a file for appending, creating one if necessary:
-
- open(FH, ">> $path");
- sysopen(FH, $path, O_WRONLY | O_APPEND | O_CREAT);
-
-To open a file for update, where the file must already exist:
-
- open(FH, "+< $path");
- sysopen(FH, $path, O_RDWR);
-
-And here are things you can do with C<sysopen> that you cannot do with
-a regular C<open>. As you see, it's just a matter of controlling the
-flags in the third argument.
-
-To open a file for writing, creating a new file which must not previously
-exist:
-
- sysopen(FH, $path, O_WRONLY | O_EXCL | O_CREAT);
-
-To open a file for appending, where that file must already exist:
-
- sysopen(FH, $path, O_WRONLY | O_APPEND);
-
-To open a file for update, creating a new file if necessary:
-
- sysopen(FH, $path, O_RDWR | O_CREAT);
-
-To open a file for update, where that file must not already exist:
-
- sysopen(FH, $path, O_RDWR | O_EXCL | O_CREAT);
-
-To open a file without blocking, creating one if necessary:
-
- sysopen(FH, $path, O_WRONLY | O_NONBLOCK | O_CREAT);
-
-=head2 Permissions E<agrave> la mode
-
-If you omit the MASK argument to C<sysopen>, Perl uses the octal value
-0666. The normal MASK to use for executables and directories should
-be 0777, and for anything else, 0666.
-
-Why so permissive? Well, it isn't really. The MASK will be modified
-by your process's current C<umask>. A umask is a number representing
-I<disabled> permissions bits; that is, bits that will not be turned on
-in the created files' permissions field.
-
-For example, if your C<umask> were 027, then the 020 part would
-disable the group from writing, and the 007 part would disable others
-from reading, writing, or executing. Under these conditions, passing
-C<sysopen> 0666 would create a file with mode 0640, since C<0666 &~ 027>
-is 0640.
-
-You should seldom use the MASK argument to C<sysopen()>. That takes
-away the user's freedom to choose what permission new files will have.
-Denying choice is almost always a bad thing. One exception would be for
-cases where sensitive or private data is being stored, such as with mail
-folders, cookie files, and internal temporary files.
-
-=head1 Obscure Open Tricks
-
-=head2 Re-Opening Files (dups)
-
-Sometimes you already have a filehandle open, and want to make another
-handle that's a duplicate of the first one. In the shell, we place an
-ampersand in front of a file descriptor number when doing redirections.
-For example, C<< 2>&1 >> makes descriptor 2 (that's STDERR in Perl)
-be redirected into descriptor 1 (which is usually Perl's STDOUT).
-The same is essentially true in Perl: a filename that begins with an
-ampersand is treated instead as a file descriptor if a number, or as a
-filehandle if a string.
-
- open(SAVEOUT, ">&SAVEERR") || die "couldn't dup SAVEERR: $!";
- open(MHCONTEXT, "<&4") || die "couldn't dup fd4: $!";
-
-That means that if a function is expecting a filename, but you don't
-want to give it a filename because you already have the file open, you
-can just pass the filehandle with a leading ampersand. It's best to
-use a fully qualified handle though, just in case the function happens
-to be in a different package:
-
- somefunction("&main::LOGFILE");
-
-This way if somefunction() is planning on opening its argument, it can
-just use the already opened handle. This differs from passing a handle,
-because with a handle, you don't open the file. Here you have something
-you can pass to open.
-
-If you have one of those tricky, newfangled I/O objects that the C++
-folks are raving about, then this doesn't work because those aren't a
-proper filehandle in the native Perl sense. You'll have to use fileno()
-to pull out the proper descriptor number, assuming you can:
-
- use IO::Socket;
- $handle = IO::Socket::INET->new("www.perl.com:80");
- $fd = $handle->fileno;
- somefunction("&$fd"); # not an indirect function call
-
-It can be easier (and certainly will be faster) just to use real
-filehandles though:
-
- use IO::Socket;
- local *REMOTE = IO::Socket::INET->new("www.perl.com:80");
- die "can't connect" unless defined(fileno(REMOTE));
- somefunction("&main::REMOTE");
-
-If the filehandle or descriptor number is preceded not just with a simple
-"&" but rather with a "&=" combination, then Perl will not create a
-completely new descriptor opened to the same place using the dup(2)
-system call. Instead, it will just make something of an alias to the
-existing one using the fdopen(3S) library call This is slightly more
-parsimonious of systems resources, although this is less a concern
-these days. Here's an example of that:
-
- $fd = $ENV{"MHCONTEXTFD"};
- open(MHCONTEXT, "<&=$fd") or die "couldn't fdopen $fd: $!";
-
-If you're using magic C<< <ARGV> >>, you could even pass in as a
-command line argument in @ARGV something like C<"<&=$MHCONTEXTFD">,
-but we've never seen anyone actually do this.
-
-=head2 Dispelling the Dweomer
-
-Perl is more of a DWIMmer language than something like Java--where DWIM
-is an acronym for "do what I mean". But this principle sometimes leads
-to more hidden magic than one knows what to do with. In this way, Perl
-is also filled with I<dweomer>, an obscure word meaning an enchantment.
-Sometimes, Perl's DWIMmer is just too much like dweomer for comfort.
-
-If magic C<open> is a bit too magical for you, you don't have to turn
-to C<sysopen>. To open a file with arbitrary weird characters in
-it, it's necessary to protect any leading and trailing whitespace.
-Leading whitespace is protected by inserting a C<"./"> in front of a
-filename that starts with whitespace. Trailing whitespace is protected
-by appending an ASCII NUL byte (C<"\0">) at the end off the string.
-
- $file =~ s#^(\s)#./$1#;
- open(FH, "< $file\0") || die "can't open $file: $!";
-
-This assumes, of course, that your system considers dot the current
-working directory, slash the directory separator, and disallows ASCII
-NULs within a valid filename. Most systems follow these conventions,
-including all POSIX systems as well as proprietary Microsoft systems.
-The only vaguely popular system that doesn't work this way is the
-proprietary Macintosh system, which uses a colon where the rest of us
-use a slash. Maybe C<sysopen> isn't such a bad idea after all.
-
-If you want to use C<< <ARGV> >> processing in a totally boring
-and non-magical way, you could do this first:
-
- # "Sam sat on the ground and put his head in his hands.
- # 'I wish I had never come here, and I don't want to see
- # no more magic,' he said, and fell silent."
- for (@ARGV) {
- s#^([^./])#./$1#;
- $_ .= "\0";
- }
- while (<>) {
- # now process $_
- }
-
-But be warned that users will not appreciate being unable to use "-"
-to mean standard input, per the standard convention.
-
-=head2 Paths as Opens
-
-You've probably noticed how Perl's C<warn> and C<die> functions can
-produce messages like:
-
- Some warning at scriptname line 29, <FH> line 7.
-
-That's because you opened a filehandle FH, and had read in seven records
-from it. But what was the name of the file, not the handle?
-
-If you aren't running with C<strict refs>, or if you've turn them off
-temporarily, then all you have to do is this:
-
- open($path, "< $path") || die "can't open $path: $!";
- while (<$path>) {
- # whatever
- }
-
-Since you're using the pathname of the file as its handle,
-you'll get warnings more like
-
- Some warning at scriptname line 29, </etc/motd> line 7.
-
-=head2 Single Argument Open
-
-Remember how we said that Perl's open took two arguments? That was a
-passive prevarication. You see, it can also take just one argument.
-If and only if the variable is a global variable, not a lexical, you
-can pass C<open> just one argument, the filehandle, and it will
-get the path from the global scalar variable of the same name.
-
- $FILE = "/etc/motd";
- open FILE or die "can't open $FILE: $!";
- while (<FILE>) {
- # whatever
- }
-
-Why is this here? Someone has to cater to the hysterical porpoises.
-It's something that's been in Perl since the very beginning, if not
-before.
-
-=head2 Playing with STDIN and STDOUT
-
-One clever move with STDOUT is to explicitly close it when you're done
-with the program.
-
- END { close(STDOUT) || die "can't close stdout: $!" }
-
-If you don't do this, and your program fills up the disk partition due
-to a command line redirection, it won't report the error exit with a
-failure status.
-
-You don't have to accept the STDIN and STDOUT you were given. You are
-welcome to reopen them if you'd like.
-
- open(STDIN, "< datafile")
- || die "can't open datafile: $!";
-
- open(STDOUT, "> output")
- || die "can't open output: $!";
-
-And then these can be read directly or passed on to subprocesses.
-This makes it look as though the program were initially invoked
-with those redirections from the command line.
-
-It's probably more interesting to connect these to pipes. For example:
-
- $pager = $ENV{PAGER} || "(less || more)";
- open(STDOUT, "| $pager")
- || die "can't fork a pager: $!";
-
-This makes it appear as though your program were called with its stdout
-already piped into your pager. You can also use this kind of thing
-in conjunction with an implicit fork to yourself. You might do this
-if you would rather handle the post processing in your own program,
-just in a different process:
-
- head(100);
- while (<>) {
- print;
- }
-
- sub head {
- my $lines = shift || 20;
- return unless $pid = open(STDOUT, "|-");
- die "cannot fork: $!" unless defined $pid;
- while (<STDIN>) {
- print;
- last if --$lines < 0;
- }
- exit;
- }
-
-This technique can be applied to repeatedly push as many filters on your
-output stream as you wish.
-
-=head1 Other I/O Issues
-
-These topics aren't really arguments related to C<open> or C<sysopen>,
-but they do affect what you do with your open files.
-
-=head2 Opening Non-File Files
-
-When is a file not a file? Well, you could say when it exists but
-isn't a plain file. We'll check whether it's a symbolic link first,
-just in case.
-
- if (-l $file || ! -f _) {
- print "$file is not a plain file\n";
- }
-
-What other kinds of files are there than, well, files? Directories,
-symbolic links, named pipes, Unix-domain sockets, and block and character
-devices. Those are all files, too--just not I<plain> files. This isn't
-the same issue as being a text file. Not all text files are plain files.
-Not all plain files are textfiles. That's why there are separate C<-f>
-and C<-T> file tests.
-
-To open a directory, you should use the C<opendir> function, then
-process it with C<readdir>, carefully restoring the directory
-name if necessary:
-
- opendir(DIR, $dirname) or die "can't opendir $dirname: $!";
- while (defined($file = readdir(DIR))) {
- # do something with "$dirname/$file"
- }
- closedir(DIR);
-
-If you want to process directories recursively, it's better to use the
-File::Find module. For example, this prints out all files recursively,
-add adds a slash to their names if the file is a directory.
-
- @ARGV = qw(.) unless @ARGV;
- use File::Find;
- find sub { print $File::Find::name, -d && '/', "\n" }, @ARGV;
-
-This finds all bogus symbolic links beneath a particular directory:
-
- find sub { print "$File::Find::name\n" if -l && !-e }, $dir;
-
-As you see, with symbolic links, you can just pretend that it is
-what it points to. Or, if you want to know I<what> it points to, then
-C<readlink> is called for:
-
- if (-l $file) {
- if (defined($whither = readlink($file))) {
- print "$file points to $whither\n";
- } else {
- print "$file points nowhere: $!\n";
- }
- }
-
-Named pipes are a different matter. You pretend they're regular files,
-but their opens will normally block until there is both a reader and
-a writer. You can read more about them in L<perlipc/"Named Pipes">.
-Unix-domain sockets are rather different beasts as well; they're
-described in L<perlipc/"Unix-Domain TCP Clients and Servers">.
-
-When it comes to opening devices, it can be easy and it can tricky.
-We'll assume that if you're opening up a block device, you know what
-you're doing. The character devices are more interesting. These are
-typically used for modems, mice, and some kinds of printers. This is
-described in L<perlfaq8/"How do I read and write the serial port?">
-It's often enough to open them carefully:
-
- sysopen(TTYIN, "/dev/ttyS1", O_RDWR | O_NDELAY | O_NOCTTY)
- # (O_NOCTTY no longer needed on POSIX systems)
- or die "can't open /dev/ttyS1: $!";
- open(TTYOUT, "+>&TTYIN")
- or die "can't dup TTYIN: $!";
-
- $ofh = select(TTYOUT); $| = 1; select($ofh);
-
- print TTYOUT "+++at\015";
- $answer = <TTYIN>;
-
-With descriptors that you haven't opened using C<sysopen>, such as a
-socket, you can set them to be non-blocking using C<fcntl>:
-
- use Fcntl;
- fcntl(Connection, F_SETFL, O_NONBLOCK)
- or die "can't set non blocking: $!";
-
-Rather than losing yourself in a morass of twisting, turning C<ioctl>s,
-all dissimilar, if you're going to manipulate ttys, it's best to
-make calls out to the stty(1) program if you have it, or else use the
-portable POSIX interface. To figure this all out, you'll need to read the
-termios(3) manpage, which describes the POSIX interface to tty devices,
-and then L<POSIX>, which describes Perl's interface to POSIX. There are
-also some high-level modules on CPAN that can help you with these games.
-Check out Term::ReadKey and Term::ReadLine.
-
-What else can you open? To open a connection using sockets, you won't use
-one of Perl's two open functions. See
-L<perlipc/"Sockets: Client/Server Communication"> for that. Here's an
-example. Once you have it, you can use FH as a bidirectional filehandle.
-
- use IO::Socket;
- local *FH = IO::Socket::INET->new("www.perl.com:80");
-
-For opening up a URL, the LWP modules from CPAN are just what
-the doctor ordered. There's no filehandle interface, but
-it's still easy to get the contents of a document:
-
- use LWP::Simple;
- $doc = get('http://www.linpro.no/lwp/');
-
-=head2 Binary Files
-
-On certain legacy systems with what could charitably be called terminally
-convoluted (some would say broken) I/O models, a file isn't a file--at
-least, not with respect to the C standard I/O library. On these old
-systems whose libraries (but not kernels) distinguish between text and
-binary streams, to get files to behave properly you'll have to bend over
-backwards to avoid nasty problems. On such infelicitous systems, sockets
-and pipes are already opened in binary mode, and there is currently no
-way to turn that off. With files, you have more options.
-
-Another option is to use the C<binmode> function on the appropriate
-handles before doing regular I/O on them:
-
- binmode(STDIN);
- binmode(STDOUT);
- while (<STDIN>) { print }
-
-Passing C<sysopen> a non-standard flag option will also open the file in
-binary mode on those systems that support it. This is the equivalent of
-opening the file normally, then calling C<binmode>ing on the handle.
-
- sysopen(BINDAT, "records.data", O_RDWR | O_BINARY)
- || die "can't open records.data: $!";
-
-Now you can use C<read> and C<print> on that handle without worrying
-about the system non-standard I/O library breaking your data. It's not
-a pretty picture, but then, legacy systems seldom are. CP/M will be
-with us until the end of days, and after.
-
-On systems with exotic I/O systems, it turns out that, astonishingly
-enough, even unbuffered I/O using C<sysread> and C<syswrite> might do
-sneaky data mutilation behind your back.
-
- while (sysread(WHENCE, $buf, 1024)) {
- syswrite(WHITHER, $buf, length($buf));
- }
-
-Depending on the vicissitudes of your runtime system, even these calls
-may need C<binmode> or C<O_BINARY> first. Systems known to be free of
-such difficulties include Unix, the Mac OS, Plan9, and Inferno.
-
-=head2 File Locking
-
-In a multitasking environment, you may need to be careful not to collide
-with other processes who want to do I/O on the same files as others
-are working on. You'll often need shared or exclusive locks
-on files for reading and writing respectively. You might just
-pretend that only exclusive locks exist.
-
-Never use the existence of a file C<-e $file> as a locking indication,
-because there is a race condition between the test for the existence of
-the file and its creation. Atomicity is critical.
-
-Perl's most portable locking interface is via the C<flock> function,
-whose simplicity is emulated on systems that don't directly support it,
-such as SysV or WindowsNT. The underlying semantics may affect how
-it all works, so you should learn how C<flock> is implemented on your
-system's port of Perl.
-
-File locking I<does not> lock out another process that would like to
-do I/O. A file lock only locks out others trying to get a lock, not
-processes trying to do I/O. Because locks are advisory, if one process
-uses locking and another doesn't, all bets are off.
-
-By default, the C<flock> call will block until a lock is granted.
-A request for a shared lock will be granted as soon as there is no
-exclusive locker. A request for a exclusive lock will be granted as
-soon as there is no locker of any kind. Locks are on file descriptors,
-not file names. You can't lock a file until you open it, and you can't
-hold on to a lock once the file has been closed.
-
-Here's how to get a blocking shared lock on a file, typically used
-for reading:
-
- use 5.004;
- use Fcntl qw(:DEFAULT :flock);
- open(FH, "< filename") or die "can't open filename: $!";
- flock(FH, LOCK_SH) or die "can't lock filename: $!";
- # now read from FH
-
-You can get a non-blocking lock by using C<LOCK_NB>.
-
- flock(FH, LOCK_SH | LOCK_NB)
- or die "can't lock filename: $!";
-
-This can be useful for producing more user-friendly behaviour by warning
-if you're going to be blocking:
-
- use 5.004;
- use Fcntl qw(:DEFAULT :flock);
- open(FH, "< filename") or die "can't open filename: $!";
- unless (flock(FH, LOCK_SH | LOCK_NB)) {
- $| = 1;
- print "Waiting for lock...";
- flock(FH, LOCK_SH) or die "can't lock filename: $!";
- print "got it.\n"
- }
- # now read from FH
-
-To get an exclusive lock, typically used for writing, you have to be
-careful. We C<sysopen> the file so it can be locked before it gets
-emptied. You can get a nonblocking version using C<LOCK_EX | LOCK_NB>.
-
- use 5.004;
- use Fcntl qw(:DEFAULT :flock);
- sysopen(FH, "filename", O_WRONLY | O_CREAT)
- or die "can't open filename: $!";
- flock(FH, LOCK_EX)
- or die "can't lock filename: $!";
- truncate(FH, 0)
- or die "can't truncate filename: $!";
- # now write to FH
-
-Finally, due to the uncounted millions who cannot be dissuaded from
-wasting cycles on useless vanity devices called hit counters, here's
-how to increment a number in a file safely:
-
- use Fcntl qw(:DEFAULT :flock);
-
- sysopen(FH, "numfile", O_RDWR | O_CREAT)
- or die "can't open numfile: $!";
- # autoflush FH
- $ofh = select(FH); $| = 1; select ($ofh);
- flock(FH, LOCK_EX)
- or die "can't write-lock numfile: $!";
-
- $num = <FH> || 0;
- seek(FH, 0, 0)
- or die "can't rewind numfile : $!";
- print FH $num+1, "\n"
- or die "can't write numfile: $!";
-
- truncate(FH, tell(FH))
- or die "can't truncate numfile: $!";
- close(FH)
- or die "can't close numfile: $!";
-
-=head1 SEE ALSO
-
-The C<open> and C<sysopen> function in perlfunc(1);
-the standard open(2), dup(2), fopen(3), and fdopen(3) manpages;
-the POSIX documentation.
-
-=head1 AUTHOR and COPYRIGHT
-
-Copyright 1998 Tom Christiansen.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work may
-be distributed only under the terms of Perl's Artistic License. Any
-distribution of this file or derivatives thereof outside of that
-package require that special arrangements be made with copyright
-holder.
-
-Irrespective of its distribution, all code examples in these files are
-hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun or for profit
-as you see fit. A simple comment in the code giving credit would be
-courteous but is not required.
-
-=head1 HISTORY
-
-First release: Sat Jan 9 08:09:11 MST 1999
diff --git a/contrib/perl5/pod/perlpod.pod b/contrib/perl5/pod/perlpod.pod
deleted file mode 100644
index 1076ffe..0000000
--- a/contrib/perl5/pod/perlpod.pod
+++ /dev/null
@@ -1,318 +0,0 @@
-=head1 NAME
-
-perlpod - plain old documentation
-
-=head1 DESCRIPTION
-
-A pod-to-whatever translator reads a pod file paragraph by paragraph,
-and translates it to the appropriate output format. There are
-three kinds of paragraphs:
-L<verbatim|/"Verbatim Paragraph">,
-L<command|/"Command Paragraph">, and
-L<ordinary text|/"Ordinary Block of Text">.
-
-=head2 Verbatim Paragraph
-
-A verbatim paragraph, distinguished by being indented (that is,
-it starts with space or tab). It should be reproduced exactly,
-with tabs assumed to be on 8-column boundaries. There are no
-special formatting escapes, so you can't italicize or anything
-like that. A \ means \, and nothing else.
-
-=head2 Command Paragraph
-
-All command paragraphs start with "=", followed by an
-identifier, followed by arbitrary text that the command can
-use however it pleases. Currently recognized commands are
-
- =head1 heading
- =head2 heading
- =item text
- =over N
- =back
- =cut
- =pod
- =for X
- =begin X
- =end X
-
-=over 4
-
-=item =pod
-
-=item =cut
-
-The "=pod" directive does nothing beyond telling the compiler to lay
-off parsing code through the next "=cut". It's useful for adding
-another paragraph to the doc if you're mixing up code and pod a lot.
-
-=item =head1
-
-=item =head2
-
-Head1 and head2 produce first and second level headings, with the text in
-the same paragraph as the "=headn" directive forming the heading description.
-
-=item =over
-
-=item =back
-
-=item =item
-
-Item, over, and back require a little more explanation: "=over" starts a
-section specifically for the generation of a list using "=item" commands. At
-the end of your list, use "=back" to end it. You will probably want to give
-"4" as the number to "=over", as some formatters will use this for indentation.
-The unit of indentation is optional. If the unit is not given the natural
-indentation of the formatting system applied will be used. Note also that
-there are some basic rules to using =item: don't use them outside of
-an =over/=back block, use at least one inside an =over/=back block, you don't
-_have_ to include the =back if the list just runs off the document, and
-perhaps most importantly, keep the items consistent: either use "=item *" for
-all of them, to produce bullets, or use "=item 1.", "=item 2.", etc., to
-produce numbered lists, or use "=item foo", "=item bar", etc., i.e., things
-that looks nothing like bullets or numbers. If you start with bullets or
-numbers, stick with them, as many formatters use the first "=item" type to
-decide how to format the list.
-
-=item =for
-
-=item =begin
-
-=item =end
-
-For, begin, and end let you include sections that are not interpreted
-as pod text, but passed directly to particular formatters. A formatter
-that can utilize that format will use the section, otherwise it will be
-completely ignored. The directive "=for" specifies that the entire next
-paragraph is in the format indicated by the first word after
-"=for", like this:
-
- =for html <br>
- <p> This is a raw HTML paragraph </p>
-
-The paired commands "=begin" and "=end" work very similarly to "=for", but
-instead of only accepting a single paragraph, all text from "=begin" to a
-paragraph with a matching "=end" are treated as a particular format.
-
-Here are some examples of how to use these:
-
- =begin html
-
- <br>Figure 1.<IMG SRC="figure1.png"><br>
-
- =end html
-
- =begin text
-
- ---------------
- | foo |
- | bar |
- ---------------
-
- ^^^^ Figure 1. ^^^^
-
- =end text
-
-Some format names that formatters currently are known to accept include
-"roff", "man", "latex", "tex", "text", and "html". (Some formatters will
-treat some of these as synonyms.)
-
-And don't forget, when using any command, that the command lasts up until
-the end of the B<paragraph>, not the line. Hence in the examples below, you
-can see the empty lines after each command to end its paragraph.
-
-Some examples of lists include:
-
- =over 4
-
- =item *
-
- First item
-
- =item *
-
- Second item
-
- =back
-
- =over 4
-
- =item Foo()
-
- Description of Foo function
-
- =item Bar()
-
- Description of Bar function
-
- =back
-
-=back
-
-=head2 Ordinary Block of Text
-
-It will be filled, and maybe even
-justified. Certain interior sequences are recognized both
-here and in commands:
-
- I<text> Italicize text, used for emphasis or variables
- B<text> Embolden text, used for switches and programs
- S<text> Text contains non-breaking spaces
- C<code> Render code in a typewriter font, or give some other
- indication that this represents program text
- L<name> A link (cross reference) to name
- L<name> manual page
- L<name/ident> item in manual page
- L<name/"sec"> section in other manual page
- L<"sec"> section in this manual page
- (the quotes are optional)
- L</"sec"> ditto
- same as above but only 'text' is used for output.
- (Text can not contain the characters '/' and '|',
- and should contain matched '<' or '>')
- L<text|name>
- L<text|name/ident>
- L<text|name/"sec">
- L<text|"sec">
- L<text|/"sec">
-
- F<file> Used for filenames
- X<index> An index entry
- Z<> A zero-width character
- E<escape> A named character (very similar to HTML escapes)
- E<lt> A literal <
- E<gt> A literal >
- E<sol> A literal /
- E<verbar> A literal |
- (these are optional except in other interior
- sequences and when preceded by a capital letter)
- E<n> Character number n (probably in ASCII)
- E<html> Some non-numeric HTML entity, such
- as E<Agrave>
-
-Most of the time, you will only need a single set of angle brackets to
-delimit the beginning and end of interior sequences. However, sometimes
-you will want to put a right angle bracket (or greater-than sign '>')
-inside of a sequence. This is particularly common when using a sequence
-to provide a different font-type for a snippet of code. As with all
-things in Perl, there is more than one way to do it. One way is to
-simply escape the closing bracket using an C<E> sequence:
-
- C<$a E<lt>=E<gt> $b>
-
-This will produce: "C<$a E<lt>=E<gt> $b>"
-
-A more readable, and perhaps more "plain" way is to use an alternate set of
-delimiters that doesn't require a ">" to be escaped. As of perl5.5.660,
-doubled angle brackets ("<<" and ">>") may be used I<if and only if there
-is whitespace immediately following the opening delimiter and immediately
-preceding the closing delimiter!> For example, the following will do the
-trick:
-
- C<< $a <=> $b >>
-
-In fact, you can use as many repeated angle-brackets as you like so
-long as you have the same number of them in the opening and closing
-delimiters, and make sure that whitespace immediately follows the last
-'<' of the opening delimiter, and immediately precedes the first '>' of
-the closing delimiter. So the following will also work:
-
- C<<< $a <=> $b >>>
- C<<<< $a <=> $b >>>>
-
-This is currently supported by pod2text (Pod::Text), pod2man (Pod::Man),
-and any other pod2xxx and Pod::Xxxx translator that uses Pod::Parser
-1.093 or later.
-
-
-=head2 The Intent
-
-That's it. The intent is simplicity, not power. I wanted paragraphs
-to look like paragraphs (block format), so that they stand out
-visually, and so that I could run them through fmt easily to reformat
-them (that's F7 in my version of B<vi>). I wanted the translator (and not
-me) to worry about whether " or ' is a left quote or a right quote
-within filled text, and I wanted it to leave the quotes alone, dammit, in
-verbatim mode, so I could slurp in a working program, shift it over 4
-spaces, and have it print out, er, verbatim. And presumably in a
-constant width font.
-
-In particular, you can leave things like this verbatim in your text:
-
- Perl
- FILEHANDLE
- $variable
- function()
- manpage(3r)
-
-Doubtless a few other commands or sequences will need to be added along
-the way, but I've gotten along surprisingly well with just these.
-
-Note that I'm not at all claiming this to be sufficient for producing a
-book. I'm just trying to make an idiot-proof common source for nroff,
-TeX, and other markup languages, as used for online documentation.
-Translators exist for B<pod2man> (that's for nroff(1) and troff(1)),
-B<pod2text>, B<pod2html>, B<pod2latex>, and B<pod2fm>.
-
-=head2 Embedding Pods in Perl Modules
-
-You can embed pod documentation in your Perl scripts. Start your
-documentation with a "=head1" command at the beginning, and end it
-with a "=cut" command. Perl will ignore the pod text. See any of the
-supplied library modules for examples. If you're going to put your
-pods at the end of the file, and you're using an __END__ or __DATA__
-cut mark, make sure to put an empty line there before the first pod
-directive.
-
- __END__
-
- =head1 NAME
-
- modern - I am a modern module
-
-If you had not had that empty line there, then the translators wouldn't
-have seen it.
-
-=head2 Common Pod Pitfalls
-
-=over 4
-
-=item *
-
-Pod translators usually will require paragraphs to be separated by
-completely empty lines. If you have an apparently empty line with
-some spaces on it, this can cause odd formatting.
-
-=item *
-
-Translators will mostly add wording around a LE<lt>E<gt> link, so that
-C<LE<lt>foo(1)E<gt>> becomes "the I<foo>(1) manpage", for example (see
-B<pod2man> for details). Thus, you shouldn't write things like C<the
-LE<lt>fooE<gt> manpage>, if you want the translated document to read
-sensibly.
-
-If you need total control of the text used for a link in the output
-use the form LE<lt>show this text|fooE<gt> instead.
-
-=item *
-
-The B<podchecker> command is provided to check pod syntax
-for errors and warnings. For example, it checks for completely
-blank lines in pod segments and for unknown escape sequences.
-It is still advised to pass it through
-one or more translators and proofread the result, or print out the
-result and proofread that. Some of the problems found may be bugs in
-the translators, which you may or may not wish to work around.
-
-=back
-
-=head1 SEE ALSO
-
-L<pod2man>, L<perlsyn/"PODs: Embedded Documentation">,
-L<podchecker>
-
-=head1 AUTHOR
-
-Larry Wall
-
diff --git a/contrib/perl5/pod/perlport.pod b/contrib/perl5/pod/perlport.pod
deleted file mode 100644
index 9ae89e0..0000000
--- a/contrib/perl5/pod/perlport.pod
+++ /dev/null
@@ -1,2085 +0,0 @@
-=head1 NAME
-
-perlport - Writing portable Perl
-
-=head1 DESCRIPTION
-
-Perl runs on numerous operating systems. While most of them share
-much in common, they also have their own unique features.
-
-This document is meant to help you to find out what constitutes portable
-Perl code. That way once you make a decision to write portably,
-you know where the lines are drawn, and you can stay within them.
-
-There is a tradeoff between taking full advantage of one particular
-type of computer and taking advantage of a full range of them.
-Naturally, as you broaden your range and become more diverse, the
-common factors drop, and you are left with an increasingly smaller
-area of common ground in which you can operate to accomplish a
-particular task. Thus, when you begin attacking a problem, it is
-important to consider under which part of the tradeoff curve you
-want to operate. Specifically, you must decide whether it is
-important that the task that you are coding have the full generality
-of being portable, or whether to just get the job done right now.
-This is the hardest choice to be made. The rest is easy, because
-Perl provides many choices, whichever way you want to approach your
-problem.
-
-Looking at it another way, writing portable code is usually about
-willfully limiting your available choices. Naturally, it takes
-discipline and sacrifice to do that. The product of portability
-and convenience may be a constant. You have been warned.
-
-Be aware of two important points:
-
-=over 4
-
-=item Not all Perl programs have to be portable
-
-There is no reason you should not use Perl as a language to glue Unix
-tools together, or to prototype a Macintosh application, or to manage the
-Windows registry. If it makes no sense to aim for portability for one
-reason or another in a given program, then don't bother.
-
-=item Nearly all of Perl already I<is> portable
-
-Don't be fooled into thinking that it is hard to create portable Perl
-code. It isn't. Perl tries its level-best to bridge the gaps between
-what's available on different platforms, and all the means available to
-use those features. Thus almost all Perl code runs on any machine
-without modification. But there are some significant issues in
-writing portable code, and this document is entirely about those issues.
-
-=back
-
-Here's the general rule: When you approach a task commonly done
-using a whole range of platforms, think about writing portable
-code. That way, you don't sacrifice much by way of the implementation
-choices you can avail yourself of, and at the same time you can give
-your users lots of platform choices. On the other hand, when you have to
-take advantage of some unique feature of a particular platform, as is
-often the case with systems programming (whether for Unix, Windows,
-S<Mac OS>, VMS, etc.), consider writing platform-specific code.
-
-When the code will run on only two or three operating systems, you
-may need to consider only the differences of those particular systems.
-The important thing is to decide where the code will run and to be
-deliberate in your decision.
-
-The material below is separated into three main sections: main issues of
-portability (L<"ISSUES">, platform-specific issues (L<"PLATFORMS">, and
-built-in perl functions that behave differently on various ports
-(L<"FUNCTION IMPLEMENTATIONS">.
-
-This information should not be considered complete; it includes possibly
-transient information about idiosyncrasies of some of the ports, almost
-all of which are in a state of constant evolution. Thus, this material
-should be considered a perpetual work in progress
-(<IMG SRC="yellow_sign.gif" ALT="Under Construction">).
-
-=head1 ISSUES
-
-=head2 Newlines
-
-In most operating systems, lines in files are terminated by newlines.
-Just what is used as a newline may vary from OS to OS. Unix
-traditionally uses C<\012>, one type of DOSish I/O uses C<\015\012>,
-and S<Mac OS> uses C<\015>.
-
-Perl uses C<\n> to represent the "logical" newline, where what is
-logical may depend on the platform in use. In MacPerl, C<\n> always
-means C<\015>. In DOSish perls, C<\n> usually means C<\012>, but
-when accessing a file in "text" mode, STDIO translates it to (or
-from) C<\015\012>, depending on whether you're reading or writing.
-Unix does the same thing on ttys in canonical mode. C<\015\012>
-is commonly referred to as CRLF.
-
-A common cause of unportable programs is the misuse of chop() to trim
-newlines:
-
- # XXX UNPORTABLE!
- while(<FILE>) {
- chop;
- @array = split(/:/);
- #...
- }
-
-You can get away with this on Unix and MacOS (they have a single
-character end-of-line), but the same program will break under DOSish
-perls because you're only chop()ing half the end-of-line. Instead,
-chomp() should be used to trim newlines. The Dunce::Files module can
-help audit your code for misuses of chop().
-
-When dealing with binary files (or text files in binary mode) be sure
-to explicitly set $/ to the appropriate value for your file format
-before using chomp().
-
-Because of the "text" mode translation, DOSish perls have limitations
-in using C<seek> and C<tell> on a file accessed in "text" mode.
-Stick to C<seek>-ing to locations you got from C<tell> (and no
-others), and you are usually free to use C<seek> and C<tell> even
-in "text" mode. Using C<seek> or C<tell> or other file operations
-may be non-portable. If you use C<binmode> on a file, however, you
-can usually C<seek> and C<tell> with arbitrary values in safety.
-
-A common misconception in socket programming is that C<\n> eq C<\012>
-everywhere. When using protocols such as common Internet protocols,
-C<\012> and C<\015> are called for specifically, and the values of
-the logical C<\n> and C<\r> (carriage return) are not reliable.
-
- print SOCKET "Hi there, client!\r\n"; # WRONG
- print SOCKET "Hi there, client!\015\012"; # RIGHT
-
-However, using C<\015\012> (or C<\cM\cJ>, or C<\x0D\x0A>) can be tedious
-and unsightly, as well as confusing to those maintaining the code. As
-such, the Socket module supplies the Right Thing for those who want it.
-
- use Socket qw(:DEFAULT :crlf);
- print SOCKET "Hi there, client!$CRLF" # RIGHT
-
-When reading from a socket, remember that the default input record
-separator C<$/> is C<\n>, but robust socket code will recognize as
-either C<\012> or C<\015\012> as end of line:
-
- while (<SOCKET>) {
- # ...
- }
-
-Because both CRLF and LF end in LF, the input record separator can
-be set to LF and any CR stripped later. Better to write:
-
- use Socket qw(:DEFAULT :crlf);
- local($/) = LF; # not needed if $/ is already \012
-
- while (<SOCKET>) {
- s/$CR?$LF/\n/; # not sure if socket uses LF or CRLF, OK
- # s/\015?\012/\n/; # same thing
- }
-
-This example is preferred over the previous one--even for Unix
-platforms--because now any C<\015>'s (C<\cM>'s) are stripped out
-(and there was much rejoicing).
-
-Similarly, functions that return text data--such as a function that
-fetches a web page--should sometimes translate newlines before
-returning the data, if they've not yet been translated to the local
-newline representation. A single line of code will often suffice:
-
- $data =~ s/\015?\012/\n/g;
- return $data;
-
-Some of this may be confusing. Here's a handy reference to the ASCII CR
-and LF characters. You can print it out and stick it in your wallet.
-
- LF == \012 == \x0A == \cJ == ASCII 10
- CR == \015 == \x0D == \cM == ASCII 13
-
- | Unix | DOS | Mac |
- ---------------------------
- \n | LF | LF | CR |
- \r | CR | CR | LF |
- \n * | LF | CRLF | CR |
- \r * | CR | CR | LF |
- ---------------------------
- * text-mode STDIO
-
-The Unix column assumes that you are not accessing a serial line
-(like a tty) in canonical mode. If you are, then CR on input becomes
-"\n", and "\n" on output becomes CRLF.
-
-These are just the most common definitions of C<\n> and C<\r> in Perl.
-There may well be others.
-
-=head2 Numbers endianness and Width
-
-Different CPUs store integers and floating point numbers in different
-orders (called I<endianness>) and widths (32-bit and 64-bit being the
-most common today). This affects your programs when they attempt to transfer
-numbers in binary format from one CPU architecture to another,
-usually either "live" via network connection, or by storing the
-numbers to secondary storage such as a disk file or tape.
-
-Conflicting storage orders make utter mess out of the numbers. If a
-little-endian host (Intel, VAX) stores 0x12345678 (305419896 in
-decimal), a big-endian host (Motorola, Sparc, PA) reads it as
-0x78563412 (2018915346 in decimal). Alpha and MIPS can be either:
-Digital/Compaq used/uses them in little-endian mode; SGI/Cray uses
-them in big-endian mode. To avoid this problem in network (socket)
-connections use the C<pack> and C<unpack> formats C<n> and C<N>, the
-"network" orders. These are guaranteed to be portable.
-
-You can explore the endianness of your platform by unpacking a
-data structure packed in native format such as:
-
- print unpack("h*", pack("s2", 1, 2)), "\n";
- # '10002000' on e.g. Intel x86 or Alpha 21064 in little-endian mode
- # '00100020' on e.g. Motorola 68040
-
-If you need to distinguish between endian architectures you could use
-either of the variables set like so:
-
- $is_big_endian = unpack("h*", pack("s", 1)) =~ /01/;
- $is_little_endian = unpack("h*", pack("s", 1)) =~ /^1/;
-
-Differing widths can cause truncation even between platforms of equal
-endianness. The platform of shorter width loses the upper parts of the
-number. There is no good solution for this problem except to avoid
-transferring or storing raw binary numbers.
-
-One can circumnavigate both these problems in two ways. Either
-transfer and store numbers always in text format, instead of raw
-binary, or else consider using modules like Data::Dumper (included in
-the standard distribution as of Perl 5.005) and Storable. Keeping
-all data as text significantly simplifies matters.
-
-=head2 Files and Filesystems
-
-Most platforms these days structure files in a hierarchical fashion.
-So, it is reasonably safe to assume that all platforms support the
-notion of a "path" to uniquely identify a file on the system. How
-that path is really written, though, differs considerably.
-
-Although similar, file path specifications differ between Unix,
-Windows, S<Mac OS>, OS/2, VMS, VOS, S<RISC OS>, and probably others.
-Unix, for example, is one of the few OSes that has the elegant idea
-of a single root directory.
-
-DOS, OS/2, VMS, VOS, and Windows can work similarly to Unix with C</>
-as path separator, or in their own idiosyncratic ways (such as having
-several root directories and various "unrooted" device files such NIL:
-and LPT:).
-
-S<Mac OS> uses C<:> as a path separator instead of C</>.
-
-The filesystem may support neither hard links (C<link>) nor
-symbolic links (C<symlink>, C<readlink>, C<lstat>).
-
-The filesystem may support neither access timestamp nor change
-timestamp (meaning that about the only portable timestamp is the
-modification timestamp), or one second granularity of any timestamps
-(e.g. the FAT filesystem limits the time granularity to two seconds).
-
-VOS perl can emulate Unix filenames with C</> as path separator. The
-native pathname characters greater-than, less-than, number-sign, and
-percent-sign are always accepted.
-
-S<RISC OS> perl can emulate Unix filenames with C</> as path
-separator, or go native and use C<.> for path separator and C<:> to
-signal filesystems and disk names.
-
-If all this is intimidating, have no (well, maybe only a little)
-fear. There are modules that can help. The File::Spec modules
-provide methods to do the Right Thing on whatever platform happens
-to be running the program.
-
- use File::Spec::Functions;
- chdir(updir()); # go up one directory
- $file = catfile(curdir(), 'temp', 'file.txt');
- # on Unix and Win32, './temp/file.txt'
- # on Mac OS, ':temp:file.txt'
- # on VMS, '[.temp]file.txt'
-
-File::Spec is available in the standard distribution as of version
-5.004_05. File::Spec::Functions is only in File::Spec 0.7 and later,
-and some versions of perl come with version 0.6. If File::Spec
-is not updated to 0.7 or later, you must use the object-oriented
-interface from File::Spec (or upgrade File::Spec).
-
-In general, production code should not have file paths hardcoded.
-Making them user-supplied or read from a configuration file is
-better, keeping in mind that file path syntax varies on different
-machines.
-
-This is especially noticeable in scripts like Makefiles and test suites,
-which often assume C</> as a path separator for subdirectories.
-
-Also of use is File::Basename from the standard distribution, which
-splits a pathname into pieces (base filename, full path to directory,
-and file suffix).
-
-Even when on a single platform (if you can call Unix a single platform),
-remember not to count on the existence or the contents of particular
-system-specific files or directories, like F</etc/passwd>,
-F</etc/sendmail.conf>, F</etc/resolv.conf>, or even F</tmp/>. For
-example, F</etc/passwd> may exist but not contain the encrypted
-passwords, because the system is using some form of enhanced security.
-Or it may not contain all the accounts, because the system is using NIS.
-If code does need to rely on such a file, include a description of the
-file and its format in the code's documentation, then make it easy for
-the user to override the default location of the file.
-
-Don't assume a text file will end with a newline. They should,
-but people forget.
-
-Do not have two files of the same name with different case, like
-F<test.pl> and F<Test.pl>, as many platforms have case-insensitive
-filenames. Also, try not to have non-word characters (except for C<.>)
-in the names, and keep them to the 8.3 convention, for maximum
-portability, onerous a burden though this may appear.
-
-Likewise, when using the AutoSplit module, try to keep your functions to
-8.3 naming and case-insensitive conventions; or, at the least,
-make it so the resulting files have a unique (case-insensitively)
-first 8 characters.
-
-Whitespace in filenames is tolerated on most systems, but not all.
-Many systems (DOS, VMS) cannot have more than one C<.> in their filenames.
-
-Don't assume C<< > >> won't be the first character of a filename.
-Always use C<< < >> explicitly to open a file for reading,
-unless you want the user to be able to specify a pipe open.
-
- open(FILE, "< $existing_file") or die $!;
-
-If filenames might use strange characters, it is safest to open it
-with C<sysopen> instead of C<open>. C<open> is magic and can
-translate characters like C<< > >>, C<< < >>, and C<|>, which may
-be the wrong thing to do. (Sometimes, though, it's the right thing.)
-
-=head2 System Interaction
-
-Not all platforms provide a command line. These are usually platforms
-that rely primarily on a Graphical User Interface (GUI) for user
-interaction. A program requiring a command line interface might
-not work everywhere. This is probably for the user of the program
-to deal with, so don't stay up late worrying about it.
-
-Some platforms can't delete or rename files held open by the system.
-Remember to C<close> files when you are done with them. Don't
-C<unlink> or C<rename> an open file. Don't C<tie> or C<open> a
-file already tied or opened; C<untie> or C<close> it first.
-
-Don't open the same file more than once at a time for writing, as some
-operating systems put mandatory locks on such files.
-
-Don't count on a specific environment variable existing in C<%ENV>.
-Don't count on C<%ENV> entries being case-sensitive, or even
-case-preserving. Don't try to clear %ENV by saying C<%ENV = ();>, or,
-if you really have to, make it conditional on C<$^O ne 'VMS'> since in
-VMS the C<%ENV> table is much more than a per-process key-value string
-table.
-
-Don't count on signals or C<%SIG> for anything.
-
-Don't count on filename globbing. Use C<opendir>, C<readdir>, and
-C<closedir> instead.
-
-Don't count on per-program environment variables, or per-program current
-directories.
-
-Don't count on specific values of C<$!>.
-
-=head2 Interprocess Communication (IPC)
-
-In general, don't directly access the system in code meant to be
-portable. That means, no C<system>, C<exec>, C<fork>, C<pipe>,
-C<``>, C<qx//>, C<open> with a C<|>, nor any of the other things
-that makes being a perl hacker worth being.
-
-Commands that launch external processes are generally supported on
-most platforms (though many of them do not support any type of
-forking). The problem with using them arises from what you invoke
-them on. External tools are often named differently on different
-platforms, may not be available in the same location, might accept
-different arguments, can behave differently, and often present their
-results in a platform-dependent way. Thus, you should seldom depend
-on them to produce consistent results. (Then again, if you're calling
-I<netstat -a>, you probably don't expect it to run on both Unix and CP/M.)
-
-One especially common bit of Perl code is opening a pipe to B<sendmail>:
-
- open(MAIL, '|/usr/lib/sendmail -t')
- or die "cannot fork sendmail: $!";
-
-This is fine for systems programming when sendmail is known to be
-available. But it is not fine for many non-Unix systems, and even
-some Unix systems that may not have sendmail installed. If a portable
-solution is needed, see the various distributions on CPAN that deal
-with it. Mail::Mailer and Mail::Send in the MailTools distribution are
-commonly used, and provide several mailing methods, including mail,
-sendmail, and direct SMTP (via Net::SMTP) if a mail transfer agent is
-not available. Mail::Sendmail is a standalone module that provides
-simple, platform-independent mailing.
-
-The Unix System V IPC (C<msg*(), sem*(), shm*()>) is not available
-even on all Unix platforms.
-
-The rule of thumb for portable code is: Do it all in portable Perl, or
-use a module (that may internally implement it with platform-specific
-code, but expose a common interface).
-
-=head2 External Subroutines (XS)
-
-XS code can usually be made to work with any platform, but dependent
-libraries, header files, etc., might not be readily available or
-portable, or the XS code itself might be platform-specific, just as Perl
-code might be. If the libraries and headers are portable, then it is
-normally reasonable to make sure the XS code is portable, too.
-
-A different type of portability issue arises when writing XS code:
-availability of a C compiler on the end-user's system. C brings
-with it its own portability issues, and writing XS code will expose
-you to some of those. Writing purely in Perl is an easier way to
-achieve portability.
-
-=head2 Standard Modules
-
-In general, the standard modules work across platforms. Notable
-exceptions are the CPAN module (which currently makes connections to external
-programs that may not be available), platform-specific modules (like
-ExtUtils::MM_VMS), and DBM modules.
-
-There is no one DBM module available on all platforms.
-SDBM_File and the others are generally available on all Unix and DOSish
-ports, but not in MacPerl, where only NBDM_File and DB_File are
-available.
-
-The good news is that at least some DBM module should be available, and
-AnyDBM_File will use whichever module it can find. Of course, then
-the code needs to be fairly strict, dropping to the greatest common
-factor (e.g., not exceeding 1K for each record), so that it will
-work with any DBM module. See L<AnyDBM_File> for more details.
-
-=head2 Time and Date
-
-The system's notion of time of day and calendar date is controlled in
-widely different ways. Don't assume the timezone is stored in C<$ENV{TZ}>,
-and even if it is, don't assume that you can control the timezone through
-that variable.
-
-Don't assume that the epoch starts at 00:00:00, January 1, 1970,
-because that is OS- and implementation-specific. It is better to store a date
-in an unambiguous representation. The ISO-8601 standard defines
-"YYYY-MM-DD" as the date format. A text representation (like "1987-12-18")
-can be easily converted into an OS-specific value using a module like
-Date::Parse. An array of values, such as those returned by
-C<localtime>, can be converted to an OS-specific representation using
-Time::Local.
-
-When calculating specific times, such as for tests in time or date modules,
-it may be appropriate to calculate an offset for the epoch.
-
- require Time::Local;
- $offset = Time::Local::timegm(0, 0, 0, 1, 0, 70);
-
-The value for C<$offset> in Unix will be C<0>, but in Mac OS will be
-some large number. C<$offset> can then be added to a Unix time value
-to get what should be the proper value on any system.
-
-=head2 Character sets and character encoding
-
-Assume little about character sets. Assume nothing about
-numerical values (C<ord>, C<chr>) of characters. Do not
-assume that the alphabetic characters are encoded contiguously (in
-the numeric sense). Do not assume anything about the ordering of the
-characters. The lowercase letters may come before or after the
-uppercase letters; the lowercase and uppercase may be interlaced so
-that both `a' and `A' come before `b'; the accented and other
-international characters may be interlaced so that E<auml> comes
-before `b'.
-
-=head2 Internationalisation
-
-If you may assume POSIX (a rather large assumption), you may read
-more about the POSIX locale system from L<perllocale>. The locale
-system at least attempts to make things a little bit more portable,
-or at least more convenient and native-friendly for non-English
-users. The system affects character sets and encoding, and date
-and time formatting--amongst other things.
-
-=head2 System Resources
-
-If your code is destined for systems with severely constrained (or
-missing!) virtual memory systems then you want to be I<especially> mindful
-of avoiding wasteful constructs such as:
-
- # NOTE: this is no longer "bad" in perl5.005
- for (0..10000000) {} # bad
- for (my $x = 0; $x <= 10000000; ++$x) {} # good
-
- @lines = <VERY_LARGE_FILE>; # bad
-
- while (<FILE>) {$file .= $_} # sometimes bad
- $file = join('', <FILE>); # better
-
-The last two constructs may appear unintuitive to most people. The
-first repeatedly grows a string, whereas the second allocates a
-large chunk of memory in one go. On some systems, the second is
-more efficient that the first.
-
-=head2 Security
-
-Most multi-user platforms provide basic levels of security, usually
-implemented at the filesystem level. Some, however, do
-not--unfortunately. Thus the notion of user id, or "home" directory,
-or even the state of being logged-in, may be unrecognizable on many
-platforms. If you write programs that are security-conscious, it
-is usually best to know what type of system you will be running
-under so that you can write code explicitly for that platform (or
-class of platforms).
-
-=head2 Style
-
-For those times when it is necessary to have platform-specific code,
-consider keeping the platform-specific code in one place, making porting
-to other platforms easier. Use the Config module and the special
-variable C<$^O> to differentiate platforms, as described in
-L<"PLATFORMS">.
-
-Be careful in the tests you supply with your module or programs.
-Module code may be fully portable, but its tests might not be. This
-often happens when tests spawn off other processes or call external
-programs to aid in the testing, or when (as noted above) the tests
-assume certain things about the filesystem and paths. Be careful
-not to depend on a specific output style for errors, such as when
-checking C<$!> after an system call. Some platforms expect a certain
-output format, and perl on those platforms may have been adjusted
-accordingly. Most specifically, don't anchor a regex when testing
-an error value.
-
-=head1 CPAN Testers
-
-Modules uploaded to CPAN are tested by a variety of volunteers on
-different platforms. These CPAN testers are notified by mail of each
-new upload, and reply to the list with PASS, FAIL, NA (not applicable to
-this platform), or UNKNOWN (unknown), along with any relevant notations.
-
-The purpose of the testing is twofold: one, to help developers fix any
-problems in their code that crop up because of lack of testing on other
-platforms; two, to provide users with information about whether
-a given module works on a given platform.
-
-=over 4
-
-=item Mailing list: cpan-testers@perl.org
-
-=item Testing results: http://testers.cpan.org/
-
-=back
-
-=head1 PLATFORMS
-
-As of version 5.002, Perl is built with a C<$^O> variable that
-indicates the operating system it was built on. This was implemented
-to help speed up code that would otherwise have to C<use Config>
-and use the value of C<$Config{osname}>. Of course, to get more
-detailed information about the system, looking into C<%Config> is
-certainly recommended.
-
-C<%Config> cannot always be trusted, however, because it was built
-at compile time. If perl was built in one place, then transferred
-elsewhere, some values may be wrong. The values may even have been
-edited after the fact.
-
-=head2 Unix
-
-Perl works on a bewildering variety of Unix and Unix-like platforms (see
-e.g. most of the files in the F<hints/> directory in the source code kit).
-On most of these systems, the value of C<$^O> (hence C<$Config{'osname'}>,
-too) is determined either by lowercasing and stripping punctuation from the
-first field of the string returned by typing C<uname -a> (or a similar command)
-at the shell prompt or by testing the file system for the presence of
-uniquely named files such as a kernel or header file. Here, for example,
-are a few of the more popular Unix flavors:
-
- uname $^O $Config{'archname'}
- --------------------------------------------
- AIX aix aix
- BSD/OS bsdos i386-bsdos
- dgux dgux AViiON-dgux
- DYNIX/ptx dynixptx i386-dynixptx
- FreeBSD freebsd freebsd-i386
- Linux linux arm-linux
- Linux linux i386-linux
- Linux linux i586-linux
- Linux linux ppc-linux
- HP-UX hpux PA-RISC1.1
- IRIX irix irix
- Mac OS X rhapsody rhapsody
- MachTen PPC machten powerpc-machten
- NeXT 3 next next-fat
- NeXT 4 next OPENSTEP-Mach
- openbsd openbsd i386-openbsd
- OSF1 dec_osf alpha-dec_osf
- reliantunix-n svr4 RM400-svr4
- SCO_SV sco_sv i386-sco_sv
- SINIX-N svr4 RM400-svr4
- sn4609 unicos CRAY_C90-unicos
- sn6521 unicosmk t3e-unicosmk
- sn9617 unicos CRAY_J90-unicos
- SunOS solaris sun4-solaris
- SunOS solaris i86pc-solaris
- SunOS4 sunos sun4-sunos
-
-Because the value of C<$Config{archname}> may depend on the
-hardware architecture, it can vary more than the value of C<$^O>.
-
-=head2 DOS and Derivatives
-
-Perl has long been ported to Intel-style microcomputers running under
-systems like PC-DOS, MS-DOS, OS/2, and most Windows platforms you can
-bring yourself to mention (except for Windows CE, if you count that).
-Users familiar with I<COMMAND.COM> or I<CMD.EXE> style shells should
-be aware that each of these file specifications may have subtle
-differences:
-
- $filespec0 = "c:/foo/bar/file.txt";
- $filespec1 = "c:\\foo\\bar\\file.txt";
- $filespec2 = 'c:\foo\bar\file.txt';
- $filespec3 = 'c:\\foo\\bar\\file.txt';
-
-System calls accept either C</> or C<\> as the path separator.
-However, many command-line utilities of DOS vintage treat C</> as
-the option prefix, so may get confused by filenames containing C</>.
-Aside from calling any external programs, C</> will work just fine,
-and probably better, as it is more consistent with popular usage,
-and avoids the problem of remembering what to backwhack and what
-not to.
-
-The DOS FAT filesystem can accommodate only "8.3" style filenames. Under
-the "case-insensitive, but case-preserving" HPFS (OS/2) and NTFS (NT)
-filesystems you may have to be careful about case returned with functions
-like C<readdir> or used with functions like C<open> or C<opendir>.
-
-DOS also treats several filenames as special, such as AUX, PRN,
-NUL, CON, COM1, LPT1, LPT2, etc. Unfortunately, sometimes these
-filenames won't even work if you include an explicit directory
-prefix. It is best to avoid such filenames, if you want your code
-to be portable to DOS and its derivatives. It's hard to know what
-these all are, unfortunately.
-
-Users of these operating systems may also wish to make use of
-scripts such as I<pl2bat.bat> or I<pl2cmd> to
-put wrappers around your scripts.
-
-Newline (C<\n>) is translated as C<\015\012> by STDIO when reading from
-and writing to files (see L<"Newlines">). C<binmode(FILEHANDLE)>
-will keep C<\n> translated as C<\012> for that filehandle. Since it is a
-no-op on other systems, C<binmode> should be used for cross-platform code
-that deals with binary data. That's assuming you realize in advance
-that your data is in binary. General-purpose programs should
-often assume nothing about their data.
-
-The C<$^O> variable and the C<$Config{archname}> values for various
-DOSish perls are as follows:
-
- OS $^O $Config{'archname'}
- --------------------------------------------
- MS-DOS dos
- PC-DOS dos
- OS/2 os2
- Windows 95 MSWin32 MSWin32-x86
- Windows 98 MSWin32 MSWin32-x86
- Windows NT MSWin32 MSWin32-x86
- Windows NT MSWin32 MSWin32-ALPHA
- Windows NT MSWin32 MSWin32-ppc
- Cygwin cygwin
-
-The various MSWin32 Perl's can distinguish the OS they are running on
-via the value of the fifth element of the list returned from
-Win32::GetOSVersion(). For example:
-
- if ($^O eq 'MSWin32') {
- my @os_version_info = Win32::GetOSVersion();
- print +('3.1','95','NT')[$os_version_info[4]],"\n";
- }
-
-Also see:
-
-=over 4
-
-=item *
-
-The djgpp environment for DOS, http://www.delorie.com/djgpp/
-and L<perldos>.
-
-=item *
-
-The EMX environment for DOS, OS/2, etc. emx@iaehv.nl,
-http://www.leo.org/pub/comp/os/os2/leo/gnu/emx+gcc/index.html or
-ftp://hobbes.nmsu.edu/pub/os2/dev/emx. Also L<perlos2>.
-
-=item *
-
-Build instructions for Win32 in L<perlwin32>, or under the Cygnus environment
-in L<perlcygwin>.
-
-=item *
-
-The C<Win32::*> modules in L<Win32>.
-
-=item *
-
-The ActiveState Pages, http://www.activestate.com/
-
-=item *
-
-The Cygwin environment for Win32; F<README.cygwin> (installed
-as L<perlcygwin>), http://www.cygwin.com/
-
-=item *
-
-The U/WIN environment for Win32,
-http://www.research.att.com/sw/tools/uwin/
-
-=item *
-
-Build instructions for OS/2, L<perlos2>
-
-=back
-
-=head2 S<Mac OS>
-
-Any module requiring XS compilation is right out for most people, because
-MacPerl is built using non-free (and non-cheap!) compilers. Some XS
-modules that can work with MacPerl are built and distributed in binary
-form on CPAN.
-
-Directories are specified as:
-
- volume:folder:file for absolute pathnames
- volume:folder: for absolute pathnames
- :folder:file for relative pathnames
- :folder: for relative pathnames
- :file for relative pathnames
- file for relative pathnames
-
-Files are stored in the directory in alphabetical order. Filenames are
-limited to 31 characters, and may include any character except for
-null and C<:>, which is reserved as the path separator.
-
-Instead of C<flock>, see C<FSpSetFLock> and C<FSpRstFLock> in the
-Mac::Files module, or C<chmod(0444, ...)> and C<chmod(0666, ...)>.
-
-In the MacPerl application, you can't run a program from the command line;
-programs that expect C<@ARGV> to be populated can be edited with something
-like the following, which brings up a dialog box asking for the command
-line arguments.
-
- if (!@ARGV) {
- @ARGV = split /\s+/, MacPerl::Ask('Arguments?');
- }
-
-A MacPerl script saved as a "droplet" will populate C<@ARGV> with the full
-pathnames of the files dropped onto the script.
-
-Mac users can run programs under a type of command line interface
-under MPW (Macintosh Programmer's Workshop, a free development
-environment from Apple). MacPerl was first introduced as an MPW
-tool, and MPW can be used like a shell:
-
- perl myscript.plx some arguments
-
-ToolServer is another app from Apple that provides access to MPW tools
-from MPW and the MacPerl app, which allows MacPerl programs to use
-C<system>, backticks, and piped C<open>.
-
-"S<Mac OS>" is the proper name for the operating system, but the value
-in C<$^O> is "MacOS". To determine architecture, version, or whether
-the application or MPW tool version is running, check:
-
- $is_app = $MacPerl::Version =~ /App/;
- $is_tool = $MacPerl::Version =~ /MPW/;
- ($version) = $MacPerl::Version =~ /^(\S+)/;
- $is_ppc = $MacPerl::Architecture eq 'MacPPC';
- $is_68k = $MacPerl::Architecture eq 'Mac68K';
-
-S<Mac OS X> and S<Mac OS X Server>, based on NeXT's OpenStep OS, will
-(in theory) be able to run MacPerl natively, under the "Classic"
-environment. The new "Cocoa" environment (formerly called the "Yellow Box")
-may run a slightly modified version of MacPerl, using the Carbon interfaces.
-
-S<Mac OS X Server> and its Open Source version, Darwin, both run Unix
-perl natively (with a few patches). Full support for these
-is slated for perl 5.6.
-
-Also see:
-
-=over 4
-
-=item *
-
-The MacPerl Pages, http://www.macperl.com/ .
-
-=item *
-
-The MacPerl mailing lists, http://www.macperl.org/ .
-
-=item *
-
-MacPerl Module Porters, http://pudge.net/mmp/ .
-
-=back
-
-=head2 VMS
-
-Perl on VMS is discussed in L<perlvms> in the perl distribution.
-Perl on VMS can accept either VMS- or Unix-style file
-specifications as in either of the following:
-
- $ perl -ne "print if /perl_setup/i" SYS$LOGIN:LOGIN.COM
- $ perl -ne "print if /perl_setup/i" /sys$login/login.com
-
-but not a mixture of both as in:
-
- $ perl -ne "print if /perl_setup/i" sys$login:/login.com
- Can't open sys$login:/login.com: file specification syntax error
-
-Interacting with Perl from the Digital Command Language (DCL) shell
-often requires a different set of quotation marks than Unix shells do.
-For example:
-
- $ perl -e "print ""Hello, world.\n"""
- Hello, world.
-
-There are several ways to wrap your perl scripts in DCL F<.COM> files, if
-you are so inclined. For example:
-
- $ write sys$output "Hello from DCL!"
- $ if p1 .eqs. ""
- $ then perl -x 'f$environment("PROCEDURE")
- $ else perl -x - 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8
- $ deck/dollars="__END__"
- #!/usr/bin/perl
-
- print "Hello from Perl!\n";
-
- __END__
- $ endif
-
-Do take care with C<$ ASSIGN/nolog/user SYS$COMMAND: SYS$INPUT> if your
-perl-in-DCL script expects to do things like C<< $read = <STDIN>; >>.
-
-Filenames are in the format "name.extension;version". The maximum
-length for filenames is 39 characters, and the maximum length for
-extensions is also 39 characters. Version is a number from 1 to
-32767. Valid characters are C</[A-Z0-9$_-]/>.
-
-VMS's RMS filesystem is case-insensitive and does not preserve case.
-C<readdir> returns lowercased filenames, but specifying a file for
-opening remains case-insensitive. Files without extensions have a
-trailing period on them, so doing a C<readdir> with a file named F<A.;5>
-will return F<a.> (though that file could be opened with
-C<open(FH, 'A')>).
-
-RMS had an eight level limit on directory depths from any rooted logical
-(allowing 16 levels overall) prior to VMS 7.2. Hence
-C<PERL_ROOT:[LIB.2.3.4.5.6.7.8]> is a valid directory specification but
-C<PERL_ROOT:[LIB.2.3.4.5.6.7.8.9]> is not. F<Makefile.PL> authors might
-have to take this into account, but at least they can refer to the former
-as C</PERL_ROOT/lib/2/3/4/5/6/7/8/>.
-
-The VMS::Filespec module, which gets installed as part of the build
-process on VMS, is a pure Perl module that can easily be installed on
-non-VMS platforms and can be helpful for conversions to and from RMS
-native formats.
-
-What C<\n> represents depends on the type of file opened. It could
-be C<\015>, C<\012>, C<\015\012>, or nothing. The VMS::Stdio module
-provides access to the special fopen() requirements of files with unusual
-attributes on VMS.
-
-TCP/IP stacks are optional on VMS, so socket routines might not be
-implemented. UDP sockets may not be supported.
-
-The value of C<$^O> on OpenVMS is "VMS". To determine the architecture
-that you are running on without resorting to loading all of C<%Config>
-you can examine the content of the C<@INC> array like so:
-
- if (grep(/VMS_AXP/, @INC)) {
- print "I'm on Alpha!\n";
-
- } elsif (grep(/VMS_VAX/, @INC)) {
- print "I'm on VAX!\n";
-
- } else {
- print "I'm not so sure about where $^O is...\n";
- }
-
-On VMS, perl determines the UTC offset from the C<SYS$TIMEZONE_DIFFERENTIAL>
-logical name. Although the VMS epoch began at 17-NOV-1858 00:00:00.00,
-calls to C<localtime> are adjusted to count offsets from
-01-JAN-1970 00:00:00.00, just like Unix.
-
-Also see:
-
-=over 4
-
-=item *
-
-F<README.vms> (installed as L<README_vms>), L<perlvms>
-
-=item *
-
-vmsperl list, majordomo@perl.org
-
-(Put the words C<subscribe vmsperl> in message body.)
-
-=item *
-
-vmsperl on the web, http://www.sidhe.org/vmsperl/index.html
-
-=back
-
-=head2 VOS
-
-Perl on VOS is discussed in F<README.vos> in the perl distribution
-(installed as L<perlvos>). Perl on VOS can accept either VOS- or
-Unix-style file specifications as in either of the following:
-
- $ perl -ne "print if /perl_setup/i" >system>notices
- $ perl -ne "print if /perl_setup/i" /system/notices
-
-or even a mixture of both as in:
-
- $ perl -ne "print if /perl_setup/i" >system/notices
-
-Even though VOS allows the slash character to appear in object
-names, because the VOS port of Perl interprets it as a pathname
-delimiting character, VOS files, directories, or links whose names
-contain a slash character cannot be processed. Such files must be
-renamed before they can be processed by Perl. Note that VOS limits
-file names to 32 or fewer characters.
-
-See F<README.vos> for restrictions that apply when Perl is built
-with the alpha version of VOS POSIX.1 support.
-
-Perl on VOS is built without any extensions and does not support
-dynamic loading.
-
-The value of C<$^O> on VOS is "VOS". To determine the architecture that
-you are running on without resorting to loading all of C<%Config> you
-can examine the content of the @INC array like so:
-
- if ($^O =~ /VOS/) {
- print "I'm on a Stratus box!\n";
- } else {
- print "I'm not on a Stratus box!\n";
- die;
- }
-
- if (grep(/860/, @INC)) {
- print "This box is a Stratus XA/R!\n";
-
- } elsif (grep(/7100/, @INC)) {
- print "This box is a Stratus HP 7100 or 8xxx!\n";
-
- } elsif (grep(/8000/, @INC)) {
- print "This box is a Stratus HP 8xxx!\n";
-
- } else {
- print "This box is a Stratus 68K!\n";
- }
-
-Also see:
-
-=over 4
-
-=item *
-
-F<README.vos>
-
-=item *
-
-The VOS mailing list.
-
-There is no specific mailing list for Perl on VOS. You can post
-comments to the comp.sys.stratus newsgroup, or subscribe to the general
-Stratus mailing list. Send a letter with "Subscribe Info-Stratus" in
-the message body to majordomo@list.stratagy.com.
-
-=item *
-
-VOS Perl on the web at http://ftp.stratus.com/pub/vos/vos.html
-
-=back
-
-=head2 EBCDIC Platforms
-
-Recent versions of Perl have been ported to platforms such as OS/400 on
-AS/400 minicomputers as well as OS/390, VM/ESA, and BS2000 for S/390
-Mainframes. Such computers use EBCDIC character sets internally (usually
-Character Code Set ID 0037 for OS/400 and either 1047 or POSIX-BC for S/390
-systems). On the mainframe perl currently works under the "Unix system
-services for OS/390" (formerly known as OpenEdition), VM/ESA OpenEdition, or
-the BS200 POSIX-BC system (BS2000 is supported in perl 5.6 and greater).
-See L<perlos390> for details.
-
-As of R2.5 of USS for OS/390 and Version 2.3 of VM/ESA these Unix
-sub-systems do not support the C<#!> shebang trick for script invocation.
-Hence, on OS/390 and VM/ESA perl scripts can be executed with a header
-similar to the following simple script:
-
- : # use perl
- eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
- if 0;
- #!/usr/local/bin/perl # just a comment really
-
- print "Hello from perl!\n";
-
-OS/390 will support the C<#!> shebang trick in release 2.8 and beyond.
-Calls to C<system> and backticks can use POSIX shell syntax on all
-S/390 systems.
-
-On the AS/400, if PERL5 is in your library list, you may need
-to wrap your perl scripts in a CL procedure to invoke them like so:
-
- BEGIN
- CALL PGM(PERL5/PERL) PARM('/QOpenSys/hello.pl')
- ENDPGM
-
-This will invoke the perl script F<hello.pl> in the root of the
-QOpenSys file system. On the AS/400 calls to C<system> or backticks
-must use CL syntax.
-
-On these platforms, bear in mind that the EBCDIC character set may have
-an effect on what happens with some perl functions (such as C<chr>,
-C<pack>, C<print>, C<printf>, C<ord>, C<sort>, C<sprintf>, C<unpack>), as
-well as bit-fiddling with ASCII constants using operators like C<^>, C<&>
-and C<|>, not to mention dealing with socket interfaces to ASCII computers
-(see L<"Newlines">).
-
-Fortunately, most web servers for the mainframe will correctly
-translate the C<\n> in the following statement to its ASCII equivalent
-(C<\r> is the same under both Unix and OS/390 & VM/ESA):
-
- print "Content-type: text/html\r\n\r\n";
-
-The values of C<$^O> on some of these platforms includes:
-
- uname $^O $Config{'archname'}
- --------------------------------------------
- OS/390 os390 os390
- OS400 os400 os400
- POSIX-BC posix-bc BS2000-posix-bc
- VM/ESA vmesa vmesa
-
-Some simple tricks for determining if you are running on an EBCDIC
-platform could include any of the following (perhaps all):
-
- if ("\t" eq "\05") { print "EBCDIC may be spoken here!\n"; }
-
- if (ord('A') == 193) { print "EBCDIC may be spoken here!\n"; }
-
- if (chr(169) eq 'z') { print "EBCDIC may be spoken here!\n"; }
-
-One thing you may not want to rely on is the EBCDIC encoding
-of punctuation characters since these may differ from code page to code
-page (and once your module or script is rumoured to work with EBCDIC,
-folks will want it to work with all EBCDIC character sets).
-
-Also see:
-
-=over 4
-
-=item *
-
-*
-
-L<perlos390>, F<README.os390>, F<perlbs2000>, F<README.vmesa>,
-L<perlebcdic>.
-
-=item *
-
-The perl-mvs@perl.org list is for discussion of porting issues as well as
-general usage issues for all EBCDIC Perls. Send a message body of
-"subscribe perl-mvs" to majordomo@perl.org.
-
-=item *
-
-AS/400 Perl information at
-http://as400.rochester.ibm.com/
-as well as on CPAN in the F<ports/> directory.
-
-=back
-
-=head2 Acorn RISC OS
-
-Because Acorns use ASCII with newlines (C<\n>) in text files as C<\012> like
-Unix, and because Unix filename emulation is turned on by default,
-most simple scripts will probably work "out of the box". The native
-filesystem is modular, and individual filesystems are free to be
-case-sensitive or insensitive, and are usually case-preserving. Some
-native filesystems have name length limits, which file and directory
-names are silently truncated to fit. Scripts should be aware that the
-standard filesystem currently has a name length limit of B<10>
-characters, with up to 77 items in a directory, but other filesystems
-may not impose such limitations.
-
-Native filenames are of the form
-
- Filesystem#Special_Field::DiskName.$.Directory.Directory.File
-
-where
-
- Special_Field is not usually present, but may contain . and $ .
- Filesystem =~ m|[A-Za-z0-9_]|
- DsicName =~ m|[A-Za-z0-9_/]|
- $ represents the root directory
- . is the path separator
- @ is the current directory (per filesystem but machine global)
- ^ is the parent directory
- Directory and File =~ m|[^\0- "\.\$\%\&:\@\\^\|\177]+|
-
-The default filename translation is roughly C<tr|/.|./|;>
-
-Note that C<"ADFS::HardDisk.$.File" ne 'ADFS::HardDisk.$.File'> and that
-the second stage of C<$> interpolation in regular expressions will fall
-foul of the C<$.> if scripts are not careful.
-
-Logical paths specified by system variables containing comma-separated
-search lists are also allowed; hence C<System:Modules> is a valid
-filename, and the filesystem will prefix C<Modules> with each section of
-C<System$Path> until a name is made that points to an object on disk.
-Writing to a new file C<System:Modules> would be allowed only if
-C<System$Path> contains a single item list. The filesystem will also
-expand system variables in filenames if enclosed in angle brackets, so
-C<< <System$Dir>.Modules >> would look for the file
-S<C<$ENV{'System$Dir'} . 'Modules'>>. The obvious implication of this is
-that B<fully qualified filenames can start with C<< <> >>> and should
-be protected when C<open> is used for input.
-
-Because C<.> was in use as a directory separator and filenames could not
-be assumed to be unique after 10 characters, Acorn implemented the C
-compiler to strip the trailing C<.c> C<.h> C<.s> and C<.o> suffix from
-filenames specified in source code and store the respective files in
-subdirectories named after the suffix. Hence files are translated:
-
- foo.h h.foo
- C:foo.h C:h.foo (logical path variable)
- sys/os.h sys.h.os (C compiler groks Unix-speak)
- 10charname.c c.10charname
- 10charname.o o.10charname
- 11charname_.c c.11charname (assuming filesystem truncates at 10)
-
-The Unix emulation library's translation of filenames to native assumes
-that this sort of translation is required, and it allows a user-defined list
-of known suffixes that it will transpose in this fashion. This may
-seem transparent, but consider that with these rules C<foo/bar/baz.h>
-and C<foo/bar/h/baz> both map to C<foo.bar.h.baz>, and that C<readdir> and
-C<glob> cannot and do not attempt to emulate the reverse mapping. Other
-C<.>'s in filenames are translated to C</>.
-
-As implied above, the environment accessed through C<%ENV> is global, and
-the convention is that program specific environment variables are of the
-form C<Program$Name>. Each filesystem maintains a current directory,
-and the current filesystem's current directory is the B<global> current
-directory. Consequently, sociable programs don't change the current
-directory but rely on full pathnames, and programs (and Makefiles) cannot
-assume that they can spawn a child process which can change the current
-directory without affecting its parent (and everyone else for that
-matter).
-
-Because native operating system filehandles are global and are currently
-allocated down from 255, with 0 being a reserved value, the Unix emulation
-library emulates Unix filehandles. Consequently, you can't rely on
-passing C<STDIN>, C<STDOUT>, or C<STDERR> to your children.
-
-The desire of users to express filenames of the form
-C<< <Foo$Dir>.Bar >> on the command line unquoted causes problems,
-too: C<``> command output capture has to perform a guessing game. It
-assumes that a string C<< <[^<>]+\$[^<>]> >> is a
-reference to an environment variable, whereas anything else involving
-C<< < >> or C<< > >> is redirection, and generally manages to be 99%
-right. Of course, the problem remains that scripts cannot rely on any
-Unix tools being available, or that any tools found have Unix-like command
-line arguments.
-
-Extensions and XS are, in theory, buildable by anyone using free
-tools. In practice, many don't, as users of the Acorn platform are
-used to binary distributions. MakeMaker does run, but no available
-make currently copes with MakeMaker's makefiles; even if and when
-this should be fixed, the lack of a Unix-like shell will cause
-problems with makefile rules, especially lines of the form C<cd
-sdbm && make all>, and anything using quoting.
-
-"S<RISC OS>" is the proper name for the operating system, but the value
-in C<$^O> is "riscos" (because we don't like shouting).
-
-=head2 Other perls
-
-Perl has been ported to many platforms that do not fit into any of
-the categories listed above. Some, such as AmigaOS, Atari MiNT,
-BeOS, HP MPE/iX, QNX, Plan 9, and VOS, have been well-integrated
-into the standard Perl source code kit. You may need to see the
-F<ports/> directory on CPAN for information, and possibly binaries,
-for the likes of: aos, Atari ST, lynxos, riscos, Novell Netware,
-Tandem Guardian, I<etc.> (Yes, we know that some of these OSes may
-fall under the Unix category, but we are not a standards body.)
-
-Some approximate operating system names and their C<$^O> values
-in the "OTHER" category include:
-
- OS $^O $Config{'archname'}
- ------------------------------------------
- Amiga DOS amigaos m68k-amigos
- MPE/iX mpeix PA-RISC1.1
-
-See also:
-
-=over 4
-
-=item *
-
-Amiga, F<README.amiga> (installed as L<perlamiga>).
-
-=item *
-
-Atari, F<README.mint> and Guido Flohr's web page
-http://stud.uni-sb.de/~gufl0000/
-
-=item *
-
-Be OS, F<README.beos>
-
-=item *
-
-HP 300 MPE/iX, F<README.mpeix> and Mark Bixby's web page
-http://www.bixby.org/mark/perlix.html
-
-=item *
-
-A free perl5-based PERL.NLM for Novell Netware is available in
-precompiled binary and source code form from http://www.novell.com/
-as well as from CPAN.
-
-=item *
-
-Plan 9, F<README.plan9>
-
-=back
-
-=head1 FUNCTION IMPLEMENTATIONS
-
-Listed below are functions that are either completely unimplemented
-or else have been implemented differently on various platforms.
-Following each description will be, in parentheses, a list of
-platforms that the description applies to.
-
-The list may well be incomplete, or even wrong in some places. When
-in doubt, consult the platform-specific README files in the Perl
-source distribution, and any other documentation resources accompanying
-a given port.
-
-Be aware, moreover, that even among Unix-ish systems there are variations.
-
-For many functions, you can also query C<%Config>, exported by
-default from the Config module. For example, to check whether the
-platform has the C<lstat> call, check C<$Config{d_lstat}>. See
-L<Config> for a full description of available variables.
-
-=head2 Alphabetical Listing of Perl Functions
-
-=over 8
-
-=item -X FILEHANDLE
-
-=item -X EXPR
-
-=item -X
-
-C<-r>, C<-w>, and C<-x> have a limited meaning only; directories
-and applications are executable, and there are no uid/gid
-considerations. C<-o> is not supported. (S<Mac OS>)
-
-C<-r>, C<-w>, C<-x>, and C<-o> tell whether the file is accessible,
-which may not reflect UIC-based file protections. (VMS)
-
-C<-s> returns the size of the data fork, not the total size of data fork
-plus resource fork. (S<Mac OS>).
-
-C<-s> by name on an open file will return the space reserved on disk,
-rather than the current extent. C<-s> on an open filehandle returns the
-current size. (S<RISC OS>)
-
-C<-R>, C<-W>, C<-X>, C<-O> are indistinguishable from C<-r>, C<-w>,
-C<-x>, C<-o>. (S<Mac OS>, Win32, VMS, S<RISC OS>)
-
-C<-b>, C<-c>, C<-k>, C<-g>, C<-p>, C<-u>, C<-A> are not implemented.
-(S<Mac OS>)
-
-C<-g>, C<-k>, C<-l>, C<-p>, C<-u>, C<-A> are not particularly meaningful.
-(Win32, VMS, S<RISC OS>)
-
-C<-d> is true if passed a device spec without an explicit directory.
-(VMS)
-
-C<-T> and C<-B> are implemented, but might misclassify Mac text files
-with foreign characters; this is the case will all platforms, but may
-affect S<Mac OS> often. (S<Mac OS>)
-
-C<-x> (or C<-X>) determine if a file ends in one of the executable
-suffixes. C<-S> is meaningless. (Win32)
-
-C<-x> (or C<-X>) determine if a file has an executable file type.
-(S<RISC OS>)
-
-=item alarm SECONDS
-
-=item alarm
-
-Not implemented. (Win32)
-
-=item binmode FILEHANDLE
-
-Meaningless. (S<Mac OS>, S<RISC OS>)
-
-Reopens file and restores pointer; if function fails, underlying
-filehandle may be closed, or pointer may be in a different position.
-(VMS)
-
-The value returned by C<tell> may be affected after the call, and
-the filehandle may be flushed. (Win32)
-
-=item chmod LIST
-
-Only limited meaning. Disabling/enabling write permission is mapped to
-locking/unlocking the file. (S<Mac OS>)
-
-Only good for changing "owner" read-write access, "group", and "other"
-bits are meaningless. (Win32)
-
-Only good for changing "owner" and "other" read-write access. (S<RISC OS>)
-
-Access permissions are mapped onto VOS access-control list changes. (VOS)
-
-=item chown LIST
-
-Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>, VOS)
-
-Does nothing, but won't fail. (Win32)
-
-=item chroot FILENAME
-
-=item chroot
-
-Not implemented. (S<Mac OS>, Win32, VMS, Plan9, S<RISC OS>, VOS, VM/ESA)
-
-=item crypt PLAINTEXT,SALT
-
-May not be available if library or source was not provided when building
-perl. (Win32)
-
-Not implemented. (VOS)
-
-=item dbmclose HASH
-
-Not implemented. (VMS, Plan9, VOS)
-
-=item dbmopen HASH,DBNAME,MODE
-
-Not implemented. (VMS, Plan9, VOS)
-
-=item dump LABEL
-
-Not useful. (S<Mac OS>, S<RISC OS>)
-
-Not implemented. (Win32)
-
-Invokes VMS debugger. (VMS)
-
-=item exec LIST
-
-Not implemented. (S<Mac OS>)
-
-Implemented via Spawn. (VM/ESA)
-
-Does not automatically flush output handles on some platforms.
-(SunOS, Solaris, HP-UX)
-
-=item fcntl FILEHANDLE,FUNCTION,SCALAR
-
-Not implemented. (Win32, VMS)
-
-=item flock FILEHANDLE,OPERATION
-
-Not implemented (S<Mac OS>, VMS, S<RISC OS>, VOS).
-
-Available only on Windows NT (not on Windows 95). (Win32)
-
-=item fork
-
-Not implemented. (S<Mac OS>, AmigaOS, S<RISC OS>, VOS, VM/ESA)
-
-Emulated using multiple interpreters. See L<perlfork>. (Win32)
-
-Does not automatically flush output handles on some platforms.
-(SunOS, Solaris, HP-UX)
-
-=item getlogin
-
-Not implemented. (S<Mac OS>, S<RISC OS>)
-
-=item getpgrp PID
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
-
-=item getppid
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
-
-=item getpriority WHICH,WHO
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
-
-=item getpwnam NAME
-
-Not implemented. (S<Mac OS>, Win32)
-
-Not useful. (S<RISC OS>)
-
-=item getgrnam NAME
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
-
-=item getnetbyname NAME
-
-Not implemented. (S<Mac OS>, Win32, Plan9)
-
-=item getpwuid UID
-
-Not implemented. (S<Mac OS>, Win32)
-
-Not useful. (S<RISC OS>)
-
-=item getgrgid GID
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
-
-=item getnetbyaddr ADDR,ADDRTYPE
-
-Not implemented. (S<Mac OS>, Win32, Plan9)
-
-=item getprotobynumber NUMBER
-
-Not implemented. (S<Mac OS>)
-
-=item getservbyport PORT,PROTO
-
-Not implemented. (S<Mac OS>)
-
-=item getpwent
-
-Not implemented. (S<Mac OS>, Win32, VM/ESA)
-
-=item getgrent
-
-Not implemented. (S<Mac OS>, Win32, VMS, VM/ESA)
-
-=item gethostent
-
-Not implemented. (S<Mac OS>, Win32)
-
-=item getnetent
-
-Not implemented. (S<Mac OS>, Win32, Plan9)
-
-=item getprotoent
-
-Not implemented. (S<Mac OS>, Win32, Plan9)
-
-=item getservent
-
-Not implemented. (Win32, Plan9)
-
-=item setpwent
-
-Not implemented. (S<Mac OS>, Win32, S<RISC OS>)
-
-=item setgrent
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
-
-=item sethostent STAYOPEN
-
-Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
-
-=item setnetent STAYOPEN
-
-Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
-
-=item setprotoent STAYOPEN
-
-Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
-
-=item setservent STAYOPEN
-
-Not implemented. (Plan9, Win32, S<RISC OS>)
-
-=item endpwent
-
-Not implemented. (S<Mac OS>, MPE/iX, VM/ESA, Win32)
-
-=item endgrent
-
-Not implemented. (S<Mac OS>, MPE/iX, S<RISC OS>, VM/ESA, VMS, Win32)
-
-=item endhostent
-
-Not implemented. (S<Mac OS>, Win32)
-
-=item endnetent
-
-Not implemented. (S<Mac OS>, Win32, Plan9)
-
-=item endprotoent
-
-Not implemented. (S<Mac OS>, Win32, Plan9)
-
-=item endservent
-
-Not implemented. (Plan9, Win32)
-
-=item getsockopt SOCKET,LEVEL,OPTNAME
-
-Not implemented. (S<Mac OS>, Plan9)
-
-=item glob EXPR
-
-=item glob
-
-Globbing built-in, but only C<*> and C<?> metacharacters are supported.
-(S<Mac OS>)
-
-This operator is implemented via the File::Glob extension on most
-platforms. See L<File::Glob> for portability information.
-
-=item ioctl FILEHANDLE,FUNCTION,SCALAR
-
-Not implemented. (VMS)
-
-Available only for socket handles, and it does what the ioctlsocket() call
-in the Winsock API does. (Win32)
-
-Available only for socket handles. (S<RISC OS>)
-
-=item kill SIGNAL, LIST
-
-Not implemented, hence not useful for taint checking. (S<Mac OS>,
-S<RISC OS>)
-
-C<kill()> doesn't have the semantics of C<raise()>, i.e. it doesn't send
-a signal to the identified process like it does on Unix platforms.
-Instead C<kill($sig, $pid)> terminates the process identified by $pid,
-and makes it exit immediately with exit status $sig. As in Unix, if
-$sig is 0 and the specified process exists, it returns true without
-actually terminating it. (Win32)
-
-=item link OLDFILE,NEWFILE
-
-Not implemented. (S<Mac OS>, MPE/iX, VMS, S<RISC OS>)
-
-Link count not updated because hard links are not quite that hard
-(They are sort of half-way between hard and soft links). (AmigaOS)
-
-Hard links are implemented on Win32 (Windows NT and Windows 2000)
-under NTFS only.
-
-=item lstat FILEHANDLE
-
-=item lstat EXPR
-
-=item lstat
-
-Not implemented. (VMS, S<RISC OS>)
-
-Return values (especially for device and inode) may be bogus. (Win32)
-
-=item msgctl ID,CMD,ARG
-
-=item msgget KEY,FLAGS
-
-=item msgsnd ID,MSG,FLAGS
-
-=item msgrcv ID,VAR,SIZE,TYPE,FLAGS
-
-Not implemented. (S<Mac OS>, Win32, VMS, Plan9, S<RISC OS>, VOS)
-
-=item open FILEHANDLE,EXPR
-
-=item open FILEHANDLE
-
-The C<|> variants are supported only if ToolServer is installed.
-(S<Mac OS>)
-
-open to C<|-> and C<-|> are unsupported. (S<Mac OS>, Win32, S<RISC OS>)
-
-Opening a process does not automatically flush output handles on some
-platforms. (SunOS, Solaris, HP-UX)
-
-=item pipe READHANDLE,WRITEHANDLE
-
-Not implemented. (S<Mac OS>)
-
-Very limited functionality. (MiNT)
-
-=item readlink EXPR
-
-=item readlink
-
-Not implemented. (Win32, VMS, S<RISC OS>)
-
-=item select RBITS,WBITS,EBITS,TIMEOUT
-
-Only implemented on sockets. (Win32)
-
-Only reliable on sockets. (S<RISC OS>)
-
-Note that the C<socket FILEHANDLE> form is generally portable.
-
-=item semctl ID,SEMNUM,CMD,ARG
-
-=item semget KEY,NSEMS,FLAGS
-
-=item semop KEY,OPSTRING
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
-
-=item setgrent
-
-Not implemented. (MPE/iX, Win32)
-
-=item setpgrp PID,PGRP
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
-
-=item setpriority WHICH,WHO,PRIORITY
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
-
-=item setpwent
-
-Not implemented. (MPE/iX, Win32)
-
-=item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
-
-Not implemented. (S<Mac OS>, Plan9)
-
-=item shmctl ID,CMD,ARG
-
-=item shmget KEY,SIZE,FLAGS
-
-=item shmread ID,VAR,POS,SIZE
-
-=item shmwrite ID,STRING,POS,SIZE
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS)
-
-=item socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
-
-=item stat FILEHANDLE
-
-=item stat EXPR
-
-=item stat
-
-Platforms that do not have rdev, blksize, or blocks will return these
-as '', so numeric comparison or manipulation of these fields may cause
-'not numeric' warnings.
-
-mtime and atime are the same thing, and ctime is creation time instead of
-inode change time. (S<Mac OS>)
-
-device and inode are not meaningful. (Win32)
-
-device and inode are not necessarily reliable. (VMS)
-
-mtime, atime and ctime all return the last modification time. Device and
-inode are not necessarily reliable. (S<RISC OS>)
-
-dev, rdev, blksize, and blocks are not available. inode is not
-meaningful and will differ between stat calls on the same file. (os2)
-
-=item symlink OLDFILE,NEWFILE
-
-Not implemented. (Win32, VMS, S<RISC OS>)
-
-=item syscall LIST
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
-
-=item sysopen FILEHANDLE,FILENAME,MODE,PERMS
-
-The traditional "0", "1", and "2" MODEs are implemented with different
-numeric values on some systems. The flags exported by C<Fcntl>
-(O_RDONLY, O_WRONLY, O_RDWR) should work everywhere though. (S<Mac
-OS>, OS/390, VM/ESA)
-
-=item system LIST
-
-Only implemented if ToolServer is installed. (S<Mac OS>)
-
-As an optimization, may not call the command shell specified in
-C<$ENV{PERL5SHELL}>. C<system(1, @args)> spawns an external
-process and immediately returns its process designator, without
-waiting for it to terminate. Return value may be used subsequently
-in C<wait> or C<waitpid>. Failure to spawn() a subprocess is indicated
-by setting $? to "255 << 8". C<$?> is set in a way compatible with
-Unix (i.e. the exitstatus of the subprocess is obtained by "$? >> 8",
-as described in the documentation). (Win32)
-
-There is no shell to process metacharacters, and the native standard is
-to pass a command line terminated by "\n" "\r" or "\0" to the spawned
-program. Redirection such as C<< > foo >> is performed (if at all) by
-the run time library of the spawned program. C<system> I<list> will call
-the Unix emulation library's C<exec> emulation, which attempts to provide
-emulation of the stdin, stdout, stderr in force in the parent, providing
-the child program uses a compatible version of the emulation library.
-I<scalar> will call the native command line direct and no such emulation
-of a child Unix program will exists. Mileage B<will> vary. (S<RISC OS>)
-
-Far from being POSIX compliant. Because there may be no underlying
-/bin/sh tries to work around the problem by forking and execing the
-first token in its argument string. Handles basic redirection
-("<" or ">") on its own behalf. (MiNT)
-
-Does not automatically flush output handles on some platforms.
-(SunOS, Solaris, HP-UX)
-
-=item times
-
-Only the first entry returned is nonzero. (S<Mac OS>)
-
-"cumulative" times will be bogus. On anything other than Windows NT
-or Windows 2000, "system" time will be bogus, and "user" time is
-actually the time returned by the clock() function in the C runtime
-library. (Win32)
-
-Not useful. (S<RISC OS>)
-
-=item truncate FILEHANDLE,LENGTH
-
-=item truncate EXPR,LENGTH
-
-Not implemented. (VMS)
-
-Truncation to zero-length only. (VOS)
-
-If a FILEHANDLE is supplied, it must be writable and opened in append
-mode (i.e., use C<open(FH, '>>filename')>
-or C<sysopen(FH,...,O_APPEND|O_RDWR)>. If a filename is supplied, it
-should not be held open elsewhere. (Win32)
-
-=item umask EXPR
-
-=item umask
-
-Returns undef where unavailable, as of version 5.005.
-
-C<umask> works but the correct permissions are set only when the file
-is finally closed. (AmigaOS)
-
-=item utime LIST
-
-Only the modification time is updated. (S<Mac OS>, VMS, S<RISC OS>)
-
-May not behave as expected. Behavior depends on the C runtime
-library's implementation of utime(), and the filesystem being
-used. The FAT filesystem typically does not support an "access
-time" field, and it may limit timestamps to a granularity of
-two seconds. (Win32)
-
-=item wait
-
-=item waitpid PID,FLAGS
-
-Not implemented. (S<Mac OS>, VOS)
-
-Can only be applied to process handles returned for processes spawned
-using C<system(1, ...)> or pseudo processes created with C<fork()>. (Win32)
-
-Not useful. (S<RISC OS>)
-
-=back
-
-=head1 CHANGES
-
-=over 4
-
-=item v1.48, 02 February 2001
-
-Various updates from perl5-porters over the past year, supported
-platforms update from Jarkko Hietaniemi.
-
-=item v1.47, 22 March 2000
-
-Various cleanups from Tom Christiansen, including migration of
-long platform listings from L<perl>.
-
-=item v1.46, 12 February 2000
-
-Updates for VOS and MPE/iX. (Peter Prymmer) Other small changes.
-
-=item v1.45, 20 December 1999
-
-Small changes from 5.005_63 distribution, more changes to EBCDIC info.
-
-=item v1.44, 19 July 1999
-
-A bunch of updates from Peter Prymmer for C<$^O> values,
-endianness, File::Spec, VMS, BS2000, OS/400.
-
-=item v1.43, 24 May 1999
-
-Added a lot of cleaning up from Tom Christiansen.
-
-=item v1.42, 22 May 1999
-
-Added notes about tests, sprintf/printf, and epoch offsets.
-
-=item v1.41, 19 May 1999
-
-Lots more little changes to formatting and content.
-
-Added a bunch of C<$^O> and related values
-for various platforms; fixed mail and web addresses, and added
-and changed miscellaneous notes. (Peter Prymmer)
-
-=item v1.40, 11 April 1999
-
-Miscellaneous changes.
-
-=item v1.39, 11 February 1999
-
-Changes from Jarkko and EMX URL fixes Michael Schwern. Additional
-note about newlines added.
-
-=item v1.38, 31 December 1998
-
-More changes from Jarkko.
-
-=item v1.37, 19 December 1998
-
-More minor changes. Merge two separate version 1.35 documents.
-
-=item v1.36, 9 September 1998
-
-Updated for Stratus VOS. Also known as version 1.35.
-
-=item v1.35, 13 August 1998
-
-Integrate more minor changes, plus addition of new sections under
-L<"ISSUES">: L<"Numbers endianness and Width">,
-L<"Character sets and character encoding">,
-L<"Internationalisation">.
-
-=item v1.33, 06 August 1998
-
-Integrate more minor changes.
-
-=item v1.32, 05 August 1998
-
-Integrate more minor changes.
-
-=item v1.30, 03 August 1998
-
-Major update for RISC OS, other minor changes.
-
-=item v1.23, 10 July 1998
-
-First public release with perl5.005.
-
-=back
-
-=head1 Supported Platforms
-
-As of early 2001 (the Perl release 5.6.1), the following platforms are
-able to build Perl from the standard source code distribution
-available at http://www.perl.com/CPAN/src/index.html
-
- AIX
- AmigaOS
- Darwin (Rhapsody)
- DG/UX
- DOS DJGPP 1)
- DYNIX/ptx
- EPOC
- FreeBSD
- HP-UX
- IRIX
- Linux
- MachTen
- MacOS Classic 2)
- NonStop-UX
- ReliantUNIX (SINIX)
- OpenBSD
- OpenVMS (VMS)
- OS/2
- OS X
- QNX
- Solaris
- Tru64 UNIX (DEC OSF/1, Digital UNIX)
- UNICOS
- UNICOS/mk
- VOS
- Win32/NT/2K 3)
-
- 1) in DOS mode either the DOS or OS/2 ports can be used
- 2) Mac OS Classic (pre-X) is almost 5.6.1-ready; building from
- the source does work with 5.6.1, but additional MacOS specific
- source code is needed for a complete build. Contact the mailing
- list macperl-porters@macperl.org for more information.
- 3) compilers: Borland, Cygwin, Mingw32 EGCS/GCC, VC++
-
-The following platforms worked for the previous release (5.6.0),
-but we did not manage to test these in time for the 5.6.1 release.
-There is a very good chance that these will work fine with 5.6.1.
-
- DomainOS
- Hurd
- LynxOS
- MinGW
- MPE/iX
- NetBSD
- PowerMAX
- SCO SV
- SunOS
- SVR4
- Unixware
- Windows 3.1
- Windows 95
- Windows 98
- Windows Me
-
-The following platform worked for the 5.005_03 major release but not
-5.6.0. Standardization on UTF-8 as the internal string representation
-in 5.6.0 and 5.6.1 has introduced incompatibilities in this EBCDIC
-platform. While Perl 5.6.1 will build on this platform some
-regression tests may fail and the C<use utf8;> pragma typically
-introduces text handling errors. UTF-8 support for this platform may
-be enabled in a future release:
-
- OS/390 1)
-
- 1) previously known as MVS, about to become z/OS.
-
-Strongly related to the OS/390 platform by also being EBCDIC-based
-mainframe platforms are the following platforms:
-
- POSIX-BC (BS2000)
- VM/ESA
-
-These are also expected to work, albeit with no UTF-8 support, under 5.6.1
-for the same reasons as OS/390. Contact the mailing list perl-mvs@perl.org
-for more details.
-
-The following platforms have been known to build Perl from source in
-the past (5.005_03 and earlier), but we haven't been able to verify
-their status for the current release, either because the
-hardware/software platforms are rare or because we don't have an
-active champion on these platforms--or both. They used to work,
-though, so go ahead and try compiling them, and let perlbug@perl.org
-of any trouble.
-
- 3b1
- A/UX
- BeOS
- BSD/OS
- ConvexOS
- CX/UX
- DC/OSx
- DDE SMES
- DOS EMX
- Dynix
- EP/IX
- ESIX
- FPS
- GENIX
- Greenhills
- ISC
- MachTen 68k
- MiNT
- MPC
- NEWS-OS
- NextSTEP
- OpenSTEP
- Opus
- Plan 9
- PowerUX
- RISC/os
- SCO ODT/OSR
- Stellar
- SVR2
- TI1500
- TitanOS
- Ultrix
- Unisys Dynix
- Unixware
- UTS
-
-Support for the following platform is planned for a future Perl release:
-
- Netware
-
-The following platforms have their own source code distributions and
-binaries available via http://www.perl.com/CPAN/ports/index.html:
-
- Perl release
-
- Netware 5.003_07
- OS/400 5.005_02
- Tandem Guardian 5.004
-
-The following platforms have only binaries available via
-http://www.perl.com/CPAN/ports/index.html :
-
- Perl release
-
- Acorn RISCOS 5.005_02
- AOS 5.002
- LynxOS 5.004_02
-
-Although we do suggest that you always build your own Perl from
-the source code, both for maximal configurability and for security,
-in case you are in a hurry you can check
-http://www.perl.com/CPAN/ports/index.html for binary distributions.
-
-=head1 SEE ALSO
-
-L<perlaix>, L<perlamiga>, L<perlcygwin>, L<perldos>, L<perlepoc>,
-L<perlebcdic>, L<perlhpux>, L<perlos2>, L<perlos390>, L<perlbs2000>,
-L<perlwin32>, L<perlvms>, L<perlvos>, and L<Win32>.
-
-=head1 AUTHORS / CONTRIBUTORS
-
-Abigail <abigail@fnx.com>,
-Charles Bailey <bailey@newman.upenn.edu>,
-Graham Barr <gbarr@pobox.com>,
-Tom Christiansen <tchrist@perl.com>,
-Nicholas Clark <Nicholas.Clark@liverpool.ac.uk>,
-Thomas Dorner <Thomas.Dorner@start.de>,
-Andy Dougherty <doughera@lafcol.lafayette.edu>,
-Dominic Dunlop <domo@vo.lu>,
-Neale Ferguson <neale@mailbox.tabnsw.com.au>,
-David J. Fiander <davidf@mks.com>,
-Paul Green <Paul_Green@stratus.com>,
-M.J.T. Guy <mjtg@cus.cam.ac.uk>,
-Jarkko Hietaniemi <jhi@iki.fi>,
-Luther Huffman <lutherh@stratcom.com>,
-Nick Ing-Simmons <nick@ni-s.u-net.com>,
-Andreas J. KE<ouml>nig <koenig@kulturbox.de>,
-Markus Laker <mlaker@contax.co.uk>,
-Andrew M. Langmead <aml@world.std.com>,
-Larry Moore <ljmoore@freespace.net>,
-Paul Moore <Paul.Moore@uk.origin-it.com>,
-Chris Nandor <pudge@pobox.com>,
-Matthias Neeracher <neeri@iis.ee.ethz.ch>,
-Gary Ng <71564.1743@CompuServe.COM>,
-Tom Phoenix <rootbeer@teleport.com>,
-AndrE<eacute> Pirard <A.Pirard@ulg.ac.be>,
-Peter Prymmer <pvhp@forte.com>,
-Hugo van der Sanden <hv@crypt0.demon.co.uk>,
-Gurusamy Sarathy <gsar@activestate.com>,
-Paul J. Schinder <schinder@pobox.com>,
-Michael G Schwern <schwern@pobox.com>,
-Dan Sugalski <sugalskd@ous.edu>,
-Nathan Torkington <gnat@frii.com>.
-
-This document is maintained by Chris Nandor
-<pudge@pobox.com>.
-
-=head1 VERSION
-
-Version 1.47, last modified 22 March 2000
diff --git a/contrib/perl5/pod/perlre.pod b/contrib/perl5/pod/perlre.pod
deleted file mode 100644
index ce2b9bd..0000000
--- a/contrib/perl5/pod/perlre.pod
+++ /dev/null
@@ -1,1285 +0,0 @@
-=head1 NAME
-
-perlre - Perl regular expressions
-
-=head1 DESCRIPTION
-
-This page describes the syntax of regular expressions in Perl. For a
-description of how to I<use> regular expressions in matching
-operations, plus various examples of the same, see discussions
-of C<m//>, C<s///>, C<qr//> and C<??> in L<perlop/"Regexp Quote-Like Operators">.
-
-Matching operations can have various modifiers. Modifiers
-that relate to the interpretation of the regular expression inside
-are listed below. Modifiers that alter the way a regular expression
-is used by Perl are detailed in L<perlop/"Regexp Quote-Like Operators"> and
-L<perlop/"Gory details of parsing quoted constructs">.
-
-=over 4
-
-=item i
-
-Do case-insensitive pattern matching.
-
-If C<use locale> is in effect, the case map is taken from the current
-locale. See L<perllocale>.
-
-=item m
-
-Treat string as multiple lines. That is, change "^" and "$" from matching
-the start or end of the string to matching the start or end of any
-line anywhere within the string.
-
-=item s
-
-Treat string as single line. That is, change "." to match any character
-whatsoever, even a newline, which normally it would not match.
-
-The C</s> and C</m> modifiers both override the C<$*> setting. That
-is, no matter what C<$*> contains, C</s> without C</m> will force
-"^" to match only at the beginning of the string and "$" to match
-only at the end (or just before a newline at the end) of the string.
-Together, as /ms, they let the "." match any character whatsoever,
-while still allowing "^" and "$" to match, respectively, just after
-and just before newlines within the string.
-
-=item x
-
-Extend your pattern's legibility by permitting whitespace and comments.
-
-=back
-
-These are usually written as "the C</x> modifier", even though the delimiter
-in question might not really be a slash. Any of these
-modifiers may also be embedded within the regular expression itself using
-the C<(?...)> construct. See below.
-
-The C</x> modifier itself needs a little more explanation. It tells
-the regular expression parser to ignore whitespace that is neither
-backslashed nor within a character class. You can use this to break up
-your regular expression into (slightly) more readable parts. The C<#>
-character is also treated as a metacharacter introducing a comment,
-just as in ordinary Perl code. This also means that if you want real
-whitespace or C<#> characters in the pattern (outside a character
-class, where they are unaffected by C</x>), that you'll either have to
-escape them or encode them using octal or hex escapes. Taken together,
-these features go a long way towards making Perl's regular expressions
-more readable. Note that you have to be careful not to include the
-pattern delimiter in the comment--perl has no way of knowing you did
-not intend to close the pattern early. See the C-comment deletion code
-in L<perlop>.
-
-=head2 Regular Expressions
-
-The patterns used in Perl pattern matching derive from supplied in
-the Version 8 regex routines. (The routines are derived
-(distantly) from Henry Spencer's freely redistributable reimplementation
-of the V8 routines.) See L<Version 8 Regular Expressions> for
-details.
-
-In particular the following metacharacters have their standard I<egrep>-ish
-meanings:
-
- \ Quote the next metacharacter
- ^ Match the beginning of the line
- . Match any character (except newline)
- $ Match the end of the line (or before newline at the end)
- | Alternation
- () Grouping
- [] Character class
-
-By default, the "^" character is guaranteed to match only the
-beginning of the string, the "$" character only the end (or before the
-newline at the end), and Perl does certain optimizations with the
-assumption that the string contains only one line. Embedded newlines
-will not be matched by "^" or "$". You may, however, wish to treat a
-string as a multi-line buffer, such that the "^" will match after any
-newline within the string, and "$" will match before any newline. At the
-cost of a little more overhead, you can do this by using the /m modifier
-on the pattern match operator. (Older programs did this by setting C<$*>,
-but this practice is now deprecated.)
-
-To simplify multi-line substitutions, the "." character never matches a
-newline unless you use the C</s> modifier, which in effect tells Perl to pretend
-the string is a single line--even if it isn't. The C</s> modifier also
-overrides the setting of C<$*>, in case you have some (badly behaved) older
-code that sets it in another module.
-
-The following standard quantifiers are recognized:
-
- * Match 0 or more times
- + Match 1 or more times
- ? Match 1 or 0 times
- {n} Match exactly n times
- {n,} Match at least n times
- {n,m} Match at least n but not more than m times
-
-(If a curly bracket occurs in any other context, it is treated
-as a regular character.) The "*" modifier is equivalent to C<{0,}>, the "+"
-modifier to C<{1,}>, and the "?" modifier to C<{0,1}>. n and m are limited
-to integral values less than a preset limit defined when perl is built.
-This is usually 32766 on the most common platforms. The actual limit can
-be seen in the error message generated by code such as this:
-
- $_ **= $_ , / {$_} / for 2 .. 42;
-
-By default, a quantified subpattern is "greedy", that is, it will match as
-many times as possible (given a particular starting location) while still
-allowing the rest of the pattern to match. If you want it to match the
-minimum number of times possible, follow the quantifier with a "?". Note
-that the meanings don't change, just the "greediness":
-
- *? Match 0 or more times
- +? Match 1 or more times
- ?? Match 0 or 1 time
- {n}? Match exactly n times
- {n,}? Match at least n times
- {n,m}? Match at least n but not more than m times
-
-Because patterns are processed as double quoted strings, the following
-also work:
-
- \t tab (HT, TAB)
- \n newline (LF, NL)
- \r return (CR)
- \f form feed (FF)
- \a alarm (bell) (BEL)
- \e escape (think troff) (ESC)
- \033 octal char (think of a PDP-11)
- \x1B hex char
- \x{263a} wide hex char (Unicode SMILEY)
- \c[ control char
- \N{name} named char
- \l lowercase next char (think vi)
- \u uppercase next char (think vi)
- \L lowercase till \E (think vi)
- \U uppercase till \E (think vi)
- \E end case modification (think vi)
- \Q quote (disable) pattern metacharacters till \E
-
-If C<use locale> is in effect, the case map used by C<\l>, C<\L>, C<\u>
-and C<\U> is taken from the current locale. See L<perllocale>. For
-documentation of C<\N{name}>, see L<charnames>.
-
-You cannot include a literal C<$> or C<@> within a C<\Q> sequence.
-An unescaped C<$> or C<@> interpolates the corresponding variable,
-while escaping will cause the literal string C<\$> to be matched.
-You'll need to write something like C<m/\Quser\E\@\Qhost/>.
-
-In addition, Perl defines the following:
-
- \w Match a "word" character (alphanumeric plus "_")
- \W Match a non-"word" character
- \s Match a whitespace character
- \S Match a non-whitespace character
- \d Match a digit character
- \D Match a non-digit character
- \pP Match P, named property. Use \p{Prop} for longer names.
- \PP Match non-P
- \X Match eXtended Unicode "combining character sequence",
- equivalent to C<(?:\PM\pM*)>
- \C Match a single C char (octet) even under utf8.
-
-A C<\w> matches a single alphanumeric character or C<_>, not a whole word.
-Use C<\w+> to match a string of Perl-identifier characters (which isn't
-the same as matching an English word). If C<use locale> is in effect, the
-list of alphabetic characters generated by C<\w> is taken from the
-current locale. See L<perllocale>. You may use C<\w>, C<\W>, C<\s>, C<\S>,
-C<\d>, and C<\D> within character classes, but if you try to use them
-as endpoints of a range, that's not a range, the "-" is understood literally.
-See L<utf8> for details about C<\pP>, C<\PP>, and C<\X>.
-
-The POSIX character class syntax
-
- [:class:]
-
-is also available. The available classes and their backslash
-equivalents (if available) are as follows:
-
- alpha
- alnum
- ascii
- blank [1]
- cntrl
- digit \d
- graph
- lower
- print
- punct
- space \s [2]
- upper
- word \w [3]
- xdigit
-
- [1] A GNU extension equivalent to C<[ \t]>, `all horizontal whitespace'.
- [2] Not I<exactly equivalent> to C<\s> since the C<[[:space:]]> includes
- also the (very rare) `vertical tabulator', "\ck", chr(11).
- [3] A Perl extension.
-
-For example use C<[:upper:]> to match all the uppercase characters.
-Note that the C<[]> are part of the C<[::]> construct, not part of the
-whole character class. For example:
-
- [01[:alpha:]%]
-
-matches zero, one, any alphabetic character, and the percentage sign.
-
-If the C<utf8> pragma is used, the following equivalences to Unicode
-\p{} constructs and equivalent backslash character classes (if available),
-will hold:
-
- alpha IsAlpha
- alnum IsAlnum
- ascii IsASCII
- blank IsSpace
- cntrl IsCntrl
- digit IsDigit \d
- graph IsGraph
- lower IsLower
- print IsPrint
- punct IsPunct
- space IsSpace
- IsSpacePerl \s
- upper IsUpper
- word IsWord
- xdigit IsXDigit
-
-For example C<[:lower:]> and C<\p{IsLower}> are equivalent.
-
-If the C<utf8> pragma is not used but the C<locale> pragma is, the
-classes correlate with the usual isalpha(3) interface (except for
-`word' and `blank').
-
-The assumedly non-obviously named classes are:
-
-=over 4
-
-=item cntrl
-
-Any control character. Usually characters that don't produce output as
-such but instead control the terminal somehow: for example newline and
-backspace are control characters. All characters with ord() less than
-32 are most often classified as control characters (assuming ASCII,
-the ISO Latin character sets, and Unicode).
-
-=item graph
-
-Any alphanumeric or punctuation (special) character.
-
-=item print
-
-Any alphanumeric or punctuation (special) character or space.
-
-=item punct
-
-Any punctuation (special) character.
-
-=item xdigit
-
-Any hexadecimal digit. Though this may feel silly ([0-9A-Fa-f] would
-work just fine) it is included for completeness.
-
-=back
-
-You can negate the [::] character classes by prefixing the class name
-with a '^'. This is a Perl extension. For example:
-
- POSIX trad. Perl utf8 Perl
-
- [:^digit:] \D \P{IsDigit}
- [:^space:] \S \P{IsSpace}
- [:^word:] \W \P{IsWord}
-
-The POSIX character classes [.cc.] and [=cc=] are recognized but
-B<not> supported and trying to use them will cause an error.
-
-Perl defines the following zero-width assertions:
-
- \b Match a word boundary
- \B Match a non-(word boundary)
- \A Match only at beginning of string
- \Z Match only at end of string, or before newline at the end
- \z Match only at end of string
- \G Match only at pos() (e.g. at the end-of-match position
- of prior m//g)
-
-A word boundary (C<\b>) is a spot between two characters
-that has a C<\w> on one side of it and a C<\W> on the other side
-of it (in either order), counting the imaginary characters off the
-beginning and end of the string as matching a C<\W>. (Within
-character classes C<\b> represents backspace rather than a word
-boundary, just as it normally does in any double-quoted string.)
-The C<\A> and C<\Z> are just like "^" and "$", except that they
-won't match multiple times when the C</m> modifier is used, while
-"^" and "$" will match at every internal line boundary. To match
-the actual end of the string and not ignore an optional trailing
-newline, use C<\z>.
-
-The C<\G> assertion can be used to chain global matches (using
-C<m//g>), as described in L<perlop/"Regexp Quote-Like Operators">.
-It is also useful when writing C<lex>-like scanners, when you have
-several patterns that you want to match against consequent substrings
-of your string, see the previous reference. The actual location
-where C<\G> will match can also be influenced by using C<pos()> as
-an lvalue. See L<perlfunc/pos>.
-
-The bracketing construct C<( ... )> creates capture buffers. To
-refer to the digit'th buffer use \<digit> within the
-match. Outside the match use "$" instead of "\". (The
-\<digit> notation works in certain circumstances outside
-the match. See the warning below about \1 vs $1 for details.)
-Referring back to another part of the match is called a
-I<backreference>.
-
-There is no limit to the number of captured substrings that you may
-use. However Perl also uses \10, \11, etc. as aliases for \010,
-\011, etc. (Recall that 0 means octal, so \011 is the character at
-number 9 in your coded character set; which would be the 10th character,
-a horizontal tab under ASCII.) Perl resolves this
-ambiguity by interpreting \10 as a backreference only if at least 10
-left parentheses have opened before it. Likewise \11 is a
-backreference only if at least 11 left parentheses have opened
-before it. And so on. \1 through \9 are always interpreted as
-backreferences.
-
-Examples:
-
- s/^([^ ]*) *([^ ]*)/$2 $1/; # swap first two words
-
- if (/(.)\1/) { # find first doubled char
- print "'$1' is the first doubled character\n";
- }
-
- if (/Time: (..):(..):(..)/) { # parse out values
- $hours = $1;
- $minutes = $2;
- $seconds = $3;
- }
-
-Several special variables also refer back to portions of the previous
-match. C<$+> returns whatever the last bracket match matched.
-C<$&> returns the entire matched string. (At one point C<$0> did
-also, but now it returns the name of the program.) C<$`> returns
-everything before the matched string. And C<$'> returns everything
-after the matched string.
-
-The numbered variables ($1, $2, $3, etc.) and the related punctuation
-set (C<$+>, C<$&>, C<$`>, and C<$'>) are all dynamically scoped
-until the end of the enclosing block or until the next successful
-match, whichever comes first. (See L<perlsyn/"Compound Statements">.)
-
-B<WARNING>: Once Perl sees that you need one of C<$&>, C<$`>, or
-C<$'> anywhere in the program, it has to provide them for every
-pattern match. This may substantially slow your program. Perl
-uses the same mechanism to produce $1, $2, etc, so you also pay a
-price for each pattern that contains capturing parentheses. (To
-avoid this cost while retaining the grouping behaviour, use the
-extended regular expression C<(?: ... )> instead.) But if you never
-use C<$&>, C<$`> or C<$'>, then patterns I<without> capturing
-parentheses will not be penalized. So avoid C<$&>, C<$'>, and C<$`>
-if you can, but if you can't (and some algorithms really appreciate
-them), once you've used them once, use them at will, because you've
-already paid the price. As of 5.005, C<$&> is not so costly as the
-other two.
-
-Backslashed metacharacters in Perl are alphanumeric, such as C<\b>,
-C<\w>, C<\n>. Unlike some other regular expression languages, there
-are no backslashed symbols that aren't alphanumeric. So anything
-that looks like \\, \(, \), \<, \>, \{, or \} is always
-interpreted as a literal character, not a metacharacter. This was
-once used in a common idiom to disable or quote the special meanings
-of regular expression metacharacters in a string that you want to
-use for a pattern. Simply quote all non-"word" characters:
-
- $pattern =~ s/(\W)/\\$1/g;
-
-(If C<use locale> is set, then this depends on the current locale.)
-Today it is more common to use the quotemeta() function or the C<\Q>
-metaquoting escape sequence to disable all metacharacters' special
-meanings like this:
-
- /$unquoted\Q$quoted\E$unquoted/
-
-Beware that if you put literal backslashes (those not inside
-interpolated variables) between C<\Q> and C<\E>, double-quotish
-backslash interpolation may lead to confusing results. If you
-I<need> to use literal backslashes within C<\Q...\E>,
-consult L<perlop/"Gory details of parsing quoted constructs">.
-
-=head2 Extended Patterns
-
-Perl also defines a consistent extension syntax for features not
-found in standard tools like B<awk> and B<lex>. The syntax is a
-pair of parentheses with a question mark as the first thing within
-the parentheses. The character after the question mark indicates
-the extension.
-
-The stability of these extensions varies widely. Some have been
-part of the core language for many years. Others are experimental
-and may change without warning or be completely removed. Check
-the documentation on an individual feature to verify its current
-status.
-
-A question mark was chosen for this and for the minimal-matching
-construct because 1) question marks are rare in older regular
-expressions, and 2) whenever you see one, you should stop and
-"question" exactly what is going on. That's psychology...
-
-=over 10
-
-=item C<(?#text)>
-
-A comment. The text is ignored. If the C</x> modifier enables
-whitespace formatting, a simple C<#> will suffice. Note that Perl closes
-the comment as soon as it sees a C<)>, so there is no way to put a literal
-C<)> in the comment.
-
-=item C<(?imsx-imsx)>
-
-One or more embedded pattern-match modifiers. This is particularly
-useful for dynamic patterns, such as those read in from a configuration
-file, read in as an argument, are specified in a table somewhere,
-etc. Consider the case that some of which want to be case sensitive
-and some do not. The case insensitive ones need to include merely
-C<(?i)> at the front of the pattern. For example:
-
- $pattern = "foobar";
- if ( /$pattern/i ) { }
-
- # more flexible:
-
- $pattern = "(?i)foobar";
- if ( /$pattern/ ) { }
-
-Letters after a C<-> turn those modifiers off. These modifiers are
-localized inside an enclosing group (if any). For example,
-
- ( (?i) blah ) \s+ \1
-
-will match a repeated (I<including the case>!) word C<blah> in any
-case, assuming C<x> modifier, and no C<i> modifier outside this
-group.
-
-=item C<(?:pattern)>
-
-=item C<(?imsx-imsx:pattern)>
-
-This is for clustering, not capturing; it groups subexpressions like
-"()", but doesn't make backreferences as "()" does. So
-
- @fields = split(/\b(?:a|b|c)\b/)
-
-is like
-
- @fields = split(/\b(a|b|c)\b/)
-
-but doesn't spit out extra fields. It's also cheaper not to capture
-characters if you don't need to.
-
-Any letters between C<?> and C<:> act as flags modifiers as with
-C<(?imsx-imsx)>. For example,
-
- /(?s-i:more.*than).*million/i
-
-is equivalent to the more verbose
-
- /(?:(?s-i)more.*than).*million/i
-
-=item C<(?=pattern)>
-
-A zero-width positive look-ahead assertion. For example, C</\w+(?=\t)/>
-matches a word followed by a tab, without including the tab in C<$&>.
-
-=item C<(?!pattern)>
-
-A zero-width negative look-ahead assertion. For example C</foo(?!bar)/>
-matches any occurrence of "foo" that isn't followed by "bar". Note
-however that look-ahead and look-behind are NOT the same thing. You cannot
-use this for look-behind.
-
-If you are looking for a "bar" that isn't preceded by a "foo", C</(?!foo)bar/>
-will not do what you want. That's because the C<(?!foo)> is just saying that
-the next thing cannot be "foo"--and it's not, it's a "bar", so "foobar" will
-match. You would have to do something like C</(?!foo)...bar/> for that. We
-say "like" because there's the case of your "bar" not having three characters
-before it. You could cover that this way: C</(?:(?!foo)...|^.{0,2})bar/>.
-Sometimes it's still easier just to say:
-
- if (/bar/ && $` !~ /foo$/)
-
-For look-behind see below.
-
-=item C<(?<=pattern)>
-
-A zero-width positive look-behind assertion. For example, C</(?<=\t)\w+/>
-matches a word that follows a tab, without including the tab in C<$&>.
-Works only for fixed-width look-behind.
-
-=item C<(?<!pattern)>
-
-A zero-width negative look-behind assertion. For example C</(?<!bar)foo/>
-matches any occurrence of "foo" that does not follow "bar". Works
-only for fixed-width look-behind.
-
-=item C<(?{ code })>
-
-B<WARNING>: This extended regular expression feature is considered
-highly experimental, and may be changed or deleted without notice.
-
-This zero-width assertion evaluate any embedded Perl code. It
-always succeeds, and its C<code> is not interpolated. Currently,
-the rules to determine where the C<code> ends are somewhat convoluted.
-
-The C<code> is properly scoped in the following sense: If the assertion
-is backtracked (compare L<"Backtracking">), all changes introduced after
-C<local>ization are undone, so that
-
- $_ = 'a' x 8;
- m<
- (?{ $cnt = 0 }) # Initialize $cnt.
- (
- a
- (?{
- local $cnt = $cnt + 1; # Update $cnt, backtracking-safe.
- })
- )*
- aaaa
- (?{ $res = $cnt }) # On success copy to non-localized
- # location.
- >x;
-
-will set C<$res = 4>. Note that after the match, $cnt returns to the globally
-introduced value, because the scopes that restrict C<local> operators
-are unwound.
-
-This assertion may be used as a C<(?(condition)yes-pattern|no-pattern)>
-switch. If I<not> used in this way, the result of evaluation of
-C<code> is put into the special variable C<$^R>. This happens
-immediately, so C<$^R> can be used from other C<(?{ code })> assertions
-inside the same regular expression.
-
-The assignment to C<$^R> above is properly localized, so the old
-value of C<$^R> is restored if the assertion is backtracked; compare
-L<"Backtracking">.
-
-For reasons of security, this construct is forbidden if the regular
-expression involves run-time interpolation of variables, unless the
-perilous C<use re 'eval'> pragma has been used (see L<re>), or the
-variables contain results of C<qr//> operator (see
-L<perlop/"qr/STRING/imosx">).
-
-This restriction is because of the wide-spread and remarkably convenient
-custom of using run-time determined strings as patterns. For example:
-
- $re = <>;
- chomp $re;
- $string =~ /$re/;
-
-Before Perl knew how to execute interpolated code within a pattern,
-this operation was completely safe from a security point of view,
-although it could raise an exception from an illegal pattern. If
-you turn on the C<use re 'eval'>, though, it is no longer secure,
-so you should only do so if you are also using taint checking.
-Better yet, use the carefully constrained evaluation within a Safe
-module. See L<perlsec> for details about both these mechanisms.
-
-=item C<(??{ code })>
-
-B<WARNING>: This extended regular expression feature is considered
-highly experimental, and may be changed or deleted without notice.
-A simplified version of the syntax may be introduced for commonly
-used idioms.
-
-This is a "postponed" regular subexpression. The C<code> is evaluated
-at run time, at the moment this subexpression may match. The result
-of evaluation is considered as a regular expression and matched as
-if it were inserted instead of this construct.
-
-The C<code> is not interpolated. As before, the rules to determine
-where the C<code> ends are currently somewhat convoluted.
-
-The following pattern matches a parenthesized group:
-
- $re = qr{
- \(
- (?:
- (?> [^()]+ ) # Non-parens without backtracking
- |
- (??{ $re }) # Group with matching parens
- )*
- \)
- }x;
-
-=item C<< (?>pattern) >>
-
-B<WARNING>: This extended regular expression feature is considered
-highly experimental, and may be changed or deleted without notice.
-
-An "independent" subexpression, one which matches the substring
-that a I<standalone> C<pattern> would match if anchored at the given
-position, and it matches I<nothing other than this substring>. This
-construct is useful for optimizations of what would otherwise be
-"eternal" matches, because it will not backtrack (see L<"Backtracking">).
-It may also be useful in places where the "grab all you can, and do not
-give anything back" semantic is desirable.
-
-For example: C<< ^(?>a*)ab >> will never match, since C<< (?>a*) >>
-(anchored at the beginning of string, as above) will match I<all>
-characters C<a> at the beginning of string, leaving no C<a> for
-C<ab> to match. In contrast, C<a*ab> will match the same as C<a+b>,
-since the match of the subgroup C<a*> is influenced by the following
-group C<ab> (see L<"Backtracking">). In particular, C<a*> inside
-C<a*ab> will match fewer characters than a standalone C<a*>, since
-this makes the tail match.
-
-An effect similar to C<< (?>pattern) >> may be achieved by writing
-C<(?=(pattern))\1>. This matches the same substring as a standalone
-C<a+>, and the following C<\1> eats the matched string; it therefore
-makes a zero-length assertion into an analogue of C<< (?>...) >>.
-(The difference between these two constructs is that the second one
-uses a capturing group, thus shifting ordinals of backreferences
-in the rest of a regular expression.)
-
-Consider this pattern:
-
- m{ \(
- (
- [^()]+ # x+
- |
- \( [^()]* \)
- )+
- \)
- }x
-
-That will efficiently match a nonempty group with matching parentheses
-two levels deep or less. However, if there is no such group, it
-will take virtually forever on a long string. That's because there
-are so many different ways to split a long string into several
-substrings. This is what C<(.+)+> is doing, and C<(.+)+> is similar
-to a subpattern of the above pattern. Consider how the pattern
-above detects no-match on C<((()aaaaaaaaaaaaaaaaaa> in several
-seconds, but that each extra letter doubles this time. This
-exponential performance will make it appear that your program has
-hung. However, a tiny change to this pattern
-
- m{ \(
- (
- (?> [^()]+ ) # change x+ above to (?> x+ )
- |
- \( [^()]* \)
- )+
- \)
- }x
-
-which uses C<< (?>...) >> matches exactly when the one above does (verifying
-this yourself would be a productive exercise), but finishes in a fourth
-the time when used on a similar string with 1000000 C<a>s. Be aware,
-however, that this pattern currently triggers a warning message under
-the C<use warnings> pragma or B<-w> switch saying it
-C<"matches the null string many times">):
-
-On simple groups, such as the pattern C<< (?> [^()]+ ) >>, a comparable
-effect may be achieved by negative look-ahead, as in C<[^()]+ (?! [^()] )>.
-This was only 4 times slower on a string with 1000000 C<a>s.
-
-The "grab all you can, and do not give anything back" semantic is desirable
-in many situations where on the first sight a simple C<()*> looks like
-the correct solution. Suppose we parse text with comments being delimited
-by C<#> followed by some optional (horizontal) whitespace. Contrary to
-its appearance, C<#[ \t]*> I<is not> the correct subexpression to match
-the comment delimiter, because it may "give up" some whitespace if
-the remainder of the pattern can be made to match that way. The correct
-answer is either one of these:
-
- (?>#[ \t]*)
- #[ \t]*(?![ \t])
-
-For example, to grab non-empty comments into $1, one should use either
-one of these:
-
- / (?> \# [ \t]* ) ( .+ ) /x;
- / \# [ \t]* ( [^ \t] .* ) /x;
-
-Which one you pick depends on which of these expressions better reflects
-the above specification of comments.
-
-=item C<(?(condition)yes-pattern|no-pattern)>
-
-=item C<(?(condition)yes-pattern)>
-
-B<WARNING>: This extended regular expression feature is considered
-highly experimental, and may be changed or deleted without notice.
-
-Conditional expression. C<(condition)> should be either an integer in
-parentheses (which is valid if the corresponding pair of parentheses
-matched), or look-ahead/look-behind/evaluate zero-width assertion.
-
-For example:
-
- m{ ( \( )?
- [^()]+
- (?(1) \) )
- }x
-
-matches a chunk of non-parentheses, possibly included in parentheses
-themselves.
-
-=back
-
-=head2 Backtracking
-
-NOTE: This section presents an abstract approximation of regular
-expression behavior. For a more rigorous (and complicated) view of
-the rules involved in selecting a match among possible alternatives,
-see L<Combining pieces together>.
-
-A fundamental feature of regular expression matching involves the
-notion called I<backtracking>, which is currently used (when needed)
-by all regular expression quantifiers, namely C<*>, C<*?>, C<+>,
-C<+?>, C<{n,m}>, and C<{n,m}?>. Backtracking is often optimized
-internally, but the general principle outlined here is valid.
-
-For a regular expression to match, the I<entire> regular expression must
-match, not just part of it. So if the beginning of a pattern containing a
-quantifier succeeds in a way that causes later parts in the pattern to
-fail, the matching engine backs up and recalculates the beginning
-part--that's why it's called backtracking.
-
-Here is an example of backtracking: Let's say you want to find the
-word following "foo" in the string "Food is on the foo table.":
-
- $_ = "Food is on the foo table.";
- if ( /\b(foo)\s+(\w+)/i ) {
- print "$2 follows $1.\n";
- }
-
-When the match runs, the first part of the regular expression (C<\b(foo)>)
-finds a possible match right at the beginning of the string, and loads up
-$1 with "Foo". However, as soon as the matching engine sees that there's
-no whitespace following the "Foo" that it had saved in $1, it realizes its
-mistake and starts over again one character after where it had the
-tentative match. This time it goes all the way until the next occurrence
-of "foo". The complete regular expression matches this time, and you get
-the expected output of "table follows foo."
-
-Sometimes minimal matching can help a lot. Imagine you'd like to match
-everything between "foo" and "bar". Initially, you write something
-like this:
-
- $_ = "The food is under the bar in the barn.";
- if ( /foo(.*)bar/ ) {
- print "got <$1>\n";
- }
-
-Which perhaps unexpectedly yields:
-
- got <d is under the bar in the >
-
-That's because C<.*> was greedy, so you get everything between the
-I<first> "foo" and the I<last> "bar". Here it's more effective
-to use minimal matching to make sure you get the text between a "foo"
-and the first "bar" thereafter.
-
- if ( /foo(.*?)bar/ ) { print "got <$1>\n" }
- got <d is under the >
-
-Here's another example: let's say you'd like to match a number at the end
-of a string, and you also want to keep the preceding part the match.
-So you write this:
-
- $_ = "I have 2 numbers: 53147";
- if ( /(.*)(\d*)/ ) { # Wrong!
- print "Beginning is <$1>, number is <$2>.\n";
- }
-
-That won't work at all, because C<.*> was greedy and gobbled up the
-whole string. As C<\d*> can match on an empty string the complete
-regular expression matched successfully.
-
- Beginning is <I have 2 numbers: 53147>, number is <>.
-
-Here are some variants, most of which don't work:
-
- $_ = "I have 2 numbers: 53147";
- @pats = qw{
- (.*)(\d*)
- (.*)(\d+)
- (.*?)(\d*)
- (.*?)(\d+)
- (.*)(\d+)$
- (.*?)(\d+)$
- (.*)\b(\d+)$
- (.*\D)(\d+)$
- };
-
- for $pat (@pats) {
- printf "%-12s ", $pat;
- if ( /$pat/ ) {
- print "<$1> <$2>\n";
- } else {
- print "FAIL\n";
- }
- }
-
-That will print out:
-
- (.*)(\d*) <I have 2 numbers: 53147> <>
- (.*)(\d+) <I have 2 numbers: 5314> <7>
- (.*?)(\d*) <> <>
- (.*?)(\d+) <I have > <2>
- (.*)(\d+)$ <I have 2 numbers: 5314> <7>
- (.*?)(\d+)$ <I have 2 numbers: > <53147>
- (.*)\b(\d+)$ <I have 2 numbers: > <53147>
- (.*\D)(\d+)$ <I have 2 numbers: > <53147>
-
-As you see, this can be a bit tricky. It's important to realize that a
-regular expression is merely a set of assertions that gives a definition
-of success. There may be 0, 1, or several different ways that the
-definition might succeed against a particular string. And if there are
-multiple ways it might succeed, you need to understand backtracking to
-know which variety of success you will achieve.
-
-When using look-ahead assertions and negations, this can all get even
-tricker. Imagine you'd like to find a sequence of non-digits not
-followed by "123". You might try to write that as
-
- $_ = "ABC123";
- if ( /^\D*(?!123)/ ) { # Wrong!
- print "Yup, no 123 in $_\n";
- }
-
-But that isn't going to match; at least, not the way you're hoping. It
-claims that there is no 123 in the string. Here's a clearer picture of
-why it that pattern matches, contrary to popular expectations:
-
- $x = 'ABC123' ;
- $y = 'ABC445' ;
-
- print "1: got $1\n" if $x =~ /^(ABC)(?!123)/ ;
- print "2: got $1\n" if $y =~ /^(ABC)(?!123)/ ;
-
- print "3: got $1\n" if $x =~ /^(\D*)(?!123)/ ;
- print "4: got $1\n" if $y =~ /^(\D*)(?!123)/ ;
-
-This prints
-
- 2: got ABC
- 3: got AB
- 4: got ABC
-
-You might have expected test 3 to fail because it seems to a more
-general purpose version of test 1. The important difference between
-them is that test 3 contains a quantifier (C<\D*>) and so can use
-backtracking, whereas test 1 will not. What's happening is
-that you've asked "Is it true that at the start of $x, following 0 or more
-non-digits, you have something that's not 123?" If the pattern matcher had
-let C<\D*> expand to "ABC", this would have caused the whole pattern to
-fail.
-
-The search engine will initially match C<\D*> with "ABC". Then it will
-try to match C<(?!123> with "123", which fails. But because
-a quantifier (C<\D*>) has been used in the regular expression, the
-search engine can backtrack and retry the match differently
-in the hope of matching the complete regular expression.
-
-The pattern really, I<really> wants to succeed, so it uses the
-standard pattern back-off-and-retry and lets C<\D*> expand to just "AB" this
-time. Now there's indeed something following "AB" that is not
-"123". It's "C123", which suffices.
-
-We can deal with this by using both an assertion and a negation.
-We'll say that the first part in $1 must be followed both by a digit
-and by something that's not "123". Remember that the look-aheads
-are zero-width expressions--they only look, but don't consume any
-of the string in their match. So rewriting this way produces what
-you'd expect; that is, case 5 will fail, but case 6 succeeds:
-
- print "5: got $1\n" if $x =~ /^(\D*)(?=\d)(?!123)/ ;
- print "6: got $1\n" if $y =~ /^(\D*)(?=\d)(?!123)/ ;
-
- 6: got ABC
-
-In other words, the two zero-width assertions next to each other work as though
-they're ANDed together, just as you'd use any built-in assertions: C</^$/>
-matches only if you're at the beginning of the line AND the end of the
-line simultaneously. The deeper underlying truth is that juxtaposition in
-regular expressions always means AND, except when you write an explicit OR
-using the vertical bar. C</ab/> means match "a" AND (then) match "b",
-although the attempted matches are made at different positions because "a"
-is not a zero-width assertion, but a one-width assertion.
-
-B<WARNING>: particularly complicated regular expressions can take
-exponential time to solve because of the immense number of possible
-ways they can use backtracking to try match. For example, without
-internal optimizations done by the regular expression engine, this will
-take a painfully long time to run:
-
- 'aaaaaaaaaaaa' =~ /((a{0,5}){0,5})*[c]/
-
-And if you used C<*>'s in the internal groups instead of limiting them
-to 0 through 5 matches, then it would take forever--or until you ran
-out of stack space. Moreover, these internal optimizations are not
-always applicable. For example, if you put C<{0,5}> instead of C<*>
-on the external group, no current optimization is applicable, and the
-match takes a long time to finish.
-
-A powerful tool for optimizing such beasts is what is known as an
-"independent group",
-which does not backtrack (see L<C<< (?>pattern) >>>). Note also that
-zero-length look-ahead/look-behind assertions will not backtrack to make
-the tail match, since they are in "logical" context: only
-whether they match is considered relevant. For an example
-where side-effects of look-ahead I<might> have influenced the
-following match, see L<C<< (?>pattern) >>>.
-
-=head2 Version 8 Regular Expressions
-
-In case you're not familiar with the "regular" Version 8 regex
-routines, here are the pattern-matching rules not described above.
-
-Any single character matches itself, unless it is a I<metacharacter>
-with a special meaning described here or above. You can cause
-characters that normally function as metacharacters to be interpreted
-literally by prefixing them with a "\" (e.g., "\." matches a ".", not any
-character; "\\" matches a "\"). A series of characters matches that
-series of characters in the target string, so the pattern C<blurfl>
-would match "blurfl" in the target string.
-
-You can specify a character class, by enclosing a list of characters
-in C<[]>, which will match any one character from the list. If the
-first character after the "[" is "^", the class matches any character not
-in the list. Within a list, the "-" character specifies a
-range, so that C<a-z> represents all characters between "a" and "z",
-inclusive. If you want either "-" or "]" itself to be a member of a
-class, put it at the start of the list (possibly after a "^"), or
-escape it with a backslash. "-" is also taken literally when it is
-at the end of the list, just before the closing "]". (The
-following all specify the same class of three characters: C<[-az]>,
-C<[az-]>, and C<[a\-z]>. All are different from C<[a-z]>, which
-specifies a class containing twenty-six characters, even on EBCDIC
-based coded character sets.) Also, if you try to use the character
-classes C<\w>, C<\W>, C<\s>, C<\S>, C<\d>, or C<\D> as endpoints of
-a range, that's not a range, the "-" is understood literally.
-
-Note also that the whole range idea is rather unportable between
-character sets--and even within character sets they may cause results
-you probably didn't expect. A sound principle is to use only ranges
-that begin from and end at either alphabets of equal case ([a-e],
-[A-E]), or digits ([0-9]). Anything else is unsafe. If in doubt,
-spell out the character sets in full.
-
-Characters may be specified using a metacharacter syntax much like that
-used in C: "\n" matches a newline, "\t" a tab, "\r" a carriage return,
-"\f" a form feed, etc. More generally, \I<nnn>, where I<nnn> is a string
-of octal digits, matches the character whose coded character set value
-is I<nnn>. Similarly, \xI<nn>, where I<nn> are hexadecimal digits,
-matches the character whose numeric value is I<nn>. The expression \cI<x>
-matches the character control-I<x>. Finally, the "." metacharacter
-matches any character except "\n" (unless you use C</s>).
-
-You can specify a series of alternatives for a pattern using "|" to
-separate them, so that C<fee|fie|foe> will match any of "fee", "fie",
-or "foe" in the target string (as would C<f(e|i|o)e>). The
-first alternative includes everything from the last pattern delimiter
-("(", "[", or the beginning of the pattern) up to the first "|", and
-the last alternative contains everything from the last "|" to the next
-pattern delimiter. That's why it's common practice to include
-alternatives in parentheses: to minimize confusion about where they
-start and end.
-
-Alternatives are tried from left to right, so the first
-alternative found for which the entire expression matches, is the one that
-is chosen. This means that alternatives are not necessarily greedy. For
-example: when matching C<foo|foot> against "barefoot", only the "foo"
-part will match, as that is the first alternative tried, and it successfully
-matches the target string. (This might not seem important, but it is
-important when you are capturing matched text using parentheses.)
-
-Also remember that "|" is interpreted as a literal within square brackets,
-so if you write C<[fee|fie|foe]> you're really only matching C<[feio|]>.
-
-Within a pattern, you may designate subpatterns for later reference
-by enclosing them in parentheses, and you may refer back to the
-I<n>th subpattern later in the pattern using the metacharacter
-\I<n>. Subpatterns are numbered based on the left to right order
-of their opening parenthesis. A backreference matches whatever
-actually matched the subpattern in the string being examined, not
-the rules for that subpattern. Therefore, C<(0|0x)\d*\s\1\d*> will
-match "0x1234 0x4321", but not "0x1234 01234", because subpattern
-1 matched "0x", even though the rule C<0|0x> could potentially match
-the leading 0 in the second number.
-
-=head2 Warning on \1 vs $1
-
-Some people get too used to writing things like:
-
- $pattern =~ s/(\W)/\\\1/g;
-
-This is grandfathered for the RHS of a substitute to avoid shocking the
-B<sed> addicts, but it's a dirty habit to get into. That's because in
-PerlThink, the righthand side of a C<s///> is a double-quoted string. C<\1> in
-the usual double-quoted string means a control-A. The customary Unix
-meaning of C<\1> is kludged in for C<s///>. However, if you get into the habit
-of doing that, you get yourself into trouble if you then add an C</e>
-modifier.
-
- s/(\d+)/ \1 + 1 /eg; # causes warning under -w
-
-Or if you try to do
-
- s/(\d+)/\1000/;
-
-You can't disambiguate that by saying C<\{1}000>, whereas you can fix it with
-C<${1}000>. The operation of interpolation should not be confused
-with the operation of matching a backreference. Certainly they mean two
-different things on the I<left> side of the C<s///>.
-
-=head2 Repeated patterns matching zero-length substring
-
-B<WARNING>: Difficult material (and prose) ahead. This section needs a rewrite.
-
-Regular expressions provide a terse and powerful programming language. As
-with most other power tools, power comes together with the ability
-to wreak havoc.
-
-A common abuse of this power stems from the ability to make infinite
-loops using regular expressions, with something as innocuous as:
-
- 'foo' =~ m{ ( o? )* }x;
-
-The C<o?> can match at the beginning of C<'foo'>, and since the position
-in the string is not moved by the match, C<o?> would match again and again
-because of the C<*> modifier. Another common way to create a similar cycle
-is with the looping modifier C<//g>:
-
- @matches = ( 'foo' =~ m{ o? }xg );
-
-or
-
- print "match: <$&>\n" while 'foo' =~ m{ o? }xg;
-
-or the loop implied by split().
-
-However, long experience has shown that many programming tasks may
-be significantly simplified by using repeated subexpressions that
-may match zero-length substrings. Here's a simple example being:
-
- @chars = split //, $string; # // is not magic in split
- ($whitewashed = $string) =~ s/()/ /g; # parens avoid magic s// /
-
-Thus Perl allows such constructs, by I<forcefully breaking
-the infinite loop>. The rules for this are different for lower-level
-loops given by the greedy modifiers C<*+{}>, and for higher-level
-ones like the C</g> modifier or split() operator.
-
-The lower-level loops are I<interrupted> (that is, the loop is
-broken) when Perl detects that a repeated expression matched a
-zero-length substring. Thus
-
- m{ (?: NON_ZERO_LENGTH | ZERO_LENGTH )* }x;
-
-is made equivalent to
-
- m{ (?: NON_ZERO_LENGTH )*
- |
- (?: ZERO_LENGTH )?
- }x;
-
-The higher level-loops preserve an additional state between iterations:
-whether the last match was zero-length. To break the loop, the following
-match after a zero-length match is prohibited to have a length of zero.
-This prohibition interacts with backtracking (see L<"Backtracking">),
-and so the I<second best> match is chosen if the I<best> match is of
-zero length.
-
-For example:
-
- $_ = 'bar';
- s/\w??/<$&>/g;
-
-results in C<< <><b><><a><><r><> >>. At each position of the string the best
-match given by non-greedy C<??> is the zero-length match, and the I<second
-best> match is what is matched by C<\w>. Thus zero-length matches
-alternate with one-character-long matches.
-
-Similarly, for repeated C<m/()/g> the second-best match is the match at the
-position one notch further in the string.
-
-The additional state of being I<matched with zero-length> is associated with
-the matched string, and is reset by each assignment to pos().
-Zero-length matches at the end of the previous match are ignored
-during C<split>.
-
-=head2 Combining pieces together
-
-Each of the elementary pieces of regular expressions which were described
-before (such as C<ab> or C<\Z>) could match at most one substring
-at the given position of the input string. However, in a typical regular
-expression these elementary pieces are combined into more complicated
-patterns using combining operators C<ST>, C<S|T>, C<S*> etc
-(in these examples C<S> and C<T> are regular subexpressions).
-
-Such combinations can include alternatives, leading to a problem of choice:
-if we match a regular expression C<a|ab> against C<"abc">, will it match
-substring C<"a"> or C<"ab">? One way to describe which substring is
-actually matched is the concept of backtracking (see L<"Backtracking">).
-However, this description is too low-level and makes you think
-in terms of a particular implementation.
-
-Another description starts with notions of "better"/"worse". All the
-substrings which may be matched by the given regular expression can be
-sorted from the "best" match to the "worst" match, and it is the "best"
-match which is chosen. This substitutes the question of "what is chosen?"
-by the question of "which matches are better, and which are worse?".
-
-Again, for elementary pieces there is no such question, since at most
-one match at a given position is possible. This section describes the
-notion of better/worse for combining operators. In the description
-below C<S> and C<T> are regular subexpressions.
-
-=over 4
-
-=item C<ST>
-
-Consider two possible matches, C<AB> and C<A'B'>, C<A> and C<A'> are
-substrings which can be matched by C<S>, C<B> and C<B'> are substrings
-which can be matched by C<T>.
-
-If C<A> is better match for C<S> than C<A'>, C<AB> is a better
-match than C<A'B'>.
-
-If C<A> and C<A'> coincide: C<AB> is a better match than C<AB'> if
-C<B> is better match for C<T> than C<B'>.
-
-=item C<S|T>
-
-When C<S> can match, it is a better match than when only C<T> can match.
-
-Ordering of two matches for C<S> is the same as for C<S>. Similar for
-two matches for C<T>.
-
-=item C<S{REPEAT_COUNT}>
-
-Matches as C<SSS...S> (repeated as many times as necessary).
-
-=item C<S{min,max}>
-
-Matches as C<S{max}|S{max-1}|...|S{min+1}|S{min}>.
-
-=item C<S{min,max}?>
-
-Matches as C<S{min}|S{min+1}|...|S{max-1}|S{max}>.
-
-=item C<S?>, C<S*>, C<S+>
-
-Same as C<S{0,1}>, C<S{0,BIG_NUMBER}>, C<S{1,BIG_NUMBER}> respectively.
-
-=item C<S??>, C<S*?>, C<S+?>
-
-Same as C<S{0,1}?>, C<S{0,BIG_NUMBER}?>, C<S{1,BIG_NUMBER}?> respectively.
-
-=item C<< (?>S) >>
-
-Matches the best match for C<S> and only that.
-
-=item C<(?=S)>, C<(?<=S)>
-
-Only the best match for C<S> is considered. (This is important only if
-C<S> has capturing parentheses, and backreferences are used somewhere
-else in the whole regular expression.)
-
-=item C<(?!S)>, C<(?<!S)>
-
-For this grouping operator there is no need to describe the ordering, since
-only whether or not C<S> can match is important.
-
-=item C<(??{ EXPR })>
-
-The ordering is the same as for the regular expression which is
-the result of EXPR.
-
-=item C<(?(condition)yes-pattern|no-pattern)>
-
-Recall that which of C<yes-pattern> or C<no-pattern> actually matches is
-already determined. The ordering of the matches is the same as for the
-chosen subexpression.
-
-=back
-
-The above recipes describe the ordering of matches I<at a given position>.
-One more rule is needed to understand how a match is determined for the
-whole regular expression: a match at an earlier position is always better
-than a match at a later position.
-
-=head2 Creating custom RE engines
-
-Overloaded constants (see L<overload>) provide a simple way to extend
-the functionality of the RE engine.
-
-Suppose that we want to enable a new RE escape-sequence C<\Y|> which
-matches at boundary between white-space characters and non-whitespace
-characters. Note that C<(?=\S)(?<!\S)|(?!\S)(?<=\S)> matches exactly
-at these positions, so we want to have each C<\Y|> in the place of the
-more complicated version. We can create a module C<customre> to do
-this:
-
- package customre;
- use overload;
-
- sub import {
- shift;
- die "No argument to customre::import allowed" if @_;
- overload::constant 'qr' => \&convert;
- }
-
- sub invalid { die "/$_[0]/: invalid escape '\\$_[1]'"}
-
- my %rules = ( '\\' => '\\',
- 'Y|' => qr/(?=\S)(?<!\S)|(?!\S)(?<=\S)/ );
- sub convert {
- my $re = shift;
- $re =~ s{
- \\ ( \\ | Y . )
- }
- { $rules{$1} or invalid($re,$1) }sgex;
- return $re;
- }
-
-Now C<use customre> enables the new escape in constant regular
-expressions, i.e., those without any runtime variable interpolations.
-As documented in L<overload>, this conversion will work only over
-literal parts of regular expressions. For C<\Y|$re\Y|> the variable
-part of this regular expression needs to be converted explicitly
-(but only if the special meaning of C<\Y|> should be enabled inside $re):
-
- use customre;
- $re = <>;
- chomp $re;
- $re = customre::convert $re;
- /\Y|$re\Y|/;
-
-=head1 BUGS
-
-This document varies from difficult to understand to completely
-and utterly opaque. The wandering prose riddled with jargon is
-hard to fathom in several places.
-
-This document needs a rewrite that separates the tutorial content
-from the reference content.
-
-=head1 SEE ALSO
-
-L<perlop/"Regexp Quote-Like Operators">.
-
-L<perlop/"Gory details of parsing quoted constructs">.
-
-L<perlfaq6>.
-
-L<perlfunc/pos>.
-
-L<perllocale>.
-
-L<perlebcdic>.
-
-I<Mastering Regular Expressions> by Jeffrey Friedl, published
-by O'Reilly and Associates.
diff --git a/contrib/perl5/pod/perlref.pod b/contrib/perl5/pod/perlref.pod
deleted file mode 100644
index 2727e95..0000000
--- a/contrib/perl5/pod/perlref.pod
+++ /dev/null
@@ -1,703 +0,0 @@
-=head1 NAME
-
-perlref - Perl references and nested data structures
-
-=head1 NOTE
-
-This is complete documentation about all aspects of references.
-For a shorter, tutorial introduction to just the essential features,
-see L<perlreftut>.
-
-=head1 DESCRIPTION
-
-Before release 5 of Perl it was difficult to represent complex data
-structures, because all references had to be symbolic--and even then
-it was difficult to refer to a variable instead of a symbol table entry.
-Perl now not only makes it easier to use symbolic references to variables,
-but also lets you have "hard" references to any piece of data or code.
-Any scalar may hold a hard reference. Because arrays and hashes contain
-scalars, you can now easily build arrays of arrays, arrays of hashes,
-hashes of arrays, arrays of hashes of functions, and so on.
-
-Hard references are smart--they keep track of reference counts for you,
-automatically freeing the thing referred to when its reference count goes
-to zero. (Reference counts for values in self-referential or
-cyclic data structures may not go to zero without a little help; see
-L<perlobj/"Two-Phased Garbage Collection"> for a detailed explanation.)
-If that thing happens to be an object, the object is destructed. See
-L<perlobj> for more about objects. (In a sense, everything in Perl is an
-object, but we usually reserve the word for references to objects that
-have been officially "blessed" into a class package.)
-
-Symbolic references are names of variables or other objects, just as a
-symbolic link in a Unix filesystem contains merely the name of a file.
-The C<*glob> notation is something of a of symbolic reference. (Symbolic
-references are sometimes called "soft references", but please don't call
-them that; references are confusing enough without useless synonyms.)
-
-In contrast, hard references are more like hard links in a Unix file
-system: They are used to access an underlying object without concern for
-what its (other) name is. When the word "reference" is used without an
-adjective, as in the following paragraph, it is usually talking about a
-hard reference.
-
-References are easy to use in Perl. There is just one overriding
-principle: Perl does no implicit referencing or dereferencing. When a
-scalar is holding a reference, it always behaves as a simple scalar. It
-doesn't magically start being an array or hash or subroutine; you have to
-tell it explicitly to do so, by dereferencing it.
-
-=head2 Making References
-
-References can be created in several ways.
-
-=over 4
-
-=item 1.
-
-By using the backslash operator on a variable, subroutine, or value.
-(This works much like the & (address-of) operator in C.)
-This typically creates I<another> reference to a variable, because
-there's already a reference to the variable in the symbol table. But
-the symbol table reference might go away, and you'll still have the
-reference that the backslash returned. Here are some examples:
-
- $scalarref = \$foo;
- $arrayref = \@ARGV;
- $hashref = \%ENV;
- $coderef = \&handler;
- $globref = \*foo;
-
-It isn't possible to create a true reference to an IO handle (filehandle
-or dirhandle) using the backslash operator. The most you can get is a
-reference to a typeglob, which is actually a complete symbol table entry.
-But see the explanation of the C<*foo{THING}> syntax below. However,
-you can still use type globs and globrefs as though they were IO handles.
-
-=item 2.
-
-A reference to an anonymous array can be created using square
-brackets:
-
- $arrayref = [1, 2, ['a', 'b', 'c']];
-
-Here we've created a reference to an anonymous array of three elements
-whose final element is itself a reference to another anonymous array of three
-elements. (The multidimensional syntax described later can be used to
-access this. For example, after the above, C<< $arrayref->[2][1] >> would have
-the value "b".)
-
-Taking a reference to an enumerated list is not the same
-as using square brackets--instead it's the same as creating
-a list of references!
-
- @list = (\$a, \@b, \%c);
- @list = \($a, @b, %c); # same thing!
-
-As a special case, C<\(@foo)> returns a list of references to the contents
-of C<@foo>, not a reference to C<@foo> itself. Likewise for C<%foo>,
-except that the key references are to copies (since the keys are just
-strings rather than full-fledged scalars).
-
-=item 3.
-
-A reference to an anonymous hash can be created using curly
-brackets:
-
- $hashref = {
- 'Adam' => 'Eve',
- 'Clyde' => 'Bonnie',
- };
-
-Anonymous hash and array composers like these can be intermixed freely to
-produce as complicated a structure as you want. The multidimensional
-syntax described below works for these too. The values above are
-literals, but variables and expressions would work just as well, because
-assignment operators in Perl (even within local() or my()) are executable
-statements, not compile-time declarations.
-
-Because curly brackets (braces) are used for several other things
-including BLOCKs, you may occasionally have to disambiguate braces at the
-beginning of a statement by putting a C<+> or a C<return> in front so
-that Perl realizes the opening brace isn't starting a BLOCK. The economy and
-mnemonic value of using curlies is deemed worth this occasional extra
-hassle.
-
-For example, if you wanted a function to make a new hash and return a
-reference to it, you have these options:
-
- sub hashem { { @_ } } # silently wrong
- sub hashem { +{ @_ } } # ok
- sub hashem { return { @_ } } # ok
-
-On the other hand, if you want the other meaning, you can do this:
-
- sub showem { { @_ } } # ambiguous (currently ok, but may change)
- sub showem { {; @_ } } # ok
- sub showem { { return @_ } } # ok
-
-The leading C<+{> and C<{;> always serve to disambiguate
-the expression to mean either the HASH reference, or the BLOCK.
-
-=item 4.
-
-A reference to an anonymous subroutine can be created by using
-C<sub> without a subname:
-
- $coderef = sub { print "Boink!\n" };
-
-Note the semicolon. Except for the code
-inside not being immediately executed, a C<sub {}> is not so much a
-declaration as it is an operator, like C<do{}> or C<eval{}>. (However, no
-matter how many times you execute that particular line (unless you're in an
-C<eval("...")>), $coderef will still have a reference to the I<same>
-anonymous subroutine.)
-
-Anonymous subroutines act as closures with respect to my() variables,
-that is, variables lexically visible within the current scope. Closure
-is a notion out of the Lisp world that says if you define an anonymous
-function in a particular lexical context, it pretends to run in that
-context even when it's called outside the context.
-
-In human terms, it's a funny way of passing arguments to a subroutine when
-you define it as well as when you call it. It's useful for setting up
-little bits of code to run later, such as callbacks. You can even
-do object-oriented stuff with it, though Perl already provides a different
-mechanism to do that--see L<perlobj>.
-
-You might also think of closure as a way to write a subroutine
-template without using eval(). Here's a small example of how
-closures work:
-
- sub newprint {
- my $x = shift;
- return sub { my $y = shift; print "$x, $y!\n"; };
- }
- $h = newprint("Howdy");
- $g = newprint("Greetings");
-
- # Time passes...
-
- &$h("world");
- &$g("earthlings");
-
-This prints
-
- Howdy, world!
- Greetings, earthlings!
-
-Note particularly that $x continues to refer to the value passed
-into newprint() I<despite> "my $x" having gone out of scope by the
-time the anonymous subroutine runs. That's what a closure is all
-about.
-
-This applies only to lexical variables, by the way. Dynamic variables
-continue to work as they have always worked. Closure is not something
-that most Perl programmers need trouble themselves about to begin with.
-
-=item 5.
-
-References are often returned by special subroutines called constructors.
-Perl objects are just references to a special type of object that happens to know
-which package it's associated with. Constructors are just special
-subroutines that know how to create that association. They do so by
-starting with an ordinary reference, and it remains an ordinary reference
-even while it's also being an object. Constructors are often
-named new() and called indirectly:
-
- $objref = new Doggie (Tail => 'short', Ears => 'long');
-
-But don't have to be:
-
- $objref = Doggie->new(Tail => 'short', Ears => 'long');
-
- use Term::Cap;
- $terminal = Term::Cap->Tgetent( { OSPEED => 9600 });
-
- use Tk;
- $main = MainWindow->new();
- $menubar = $main->Frame(-relief => "raised",
- -borderwidth => 2)
-
-=item 6.
-
-References of the appropriate type can spring into existence if you
-dereference them in a context that assumes they exist. Because we haven't
-talked about dereferencing yet, we can't show you any examples yet.
-
-=item 7.
-
-A reference can be created by using a special syntax, lovingly known as
-the *foo{THING} syntax. *foo{THING} returns a reference to the THING
-slot in *foo (which is the symbol table entry which holds everything
-known as foo).
-
- $scalarref = *foo{SCALAR};
- $arrayref = *ARGV{ARRAY};
- $hashref = *ENV{HASH};
- $coderef = *handler{CODE};
- $ioref = *STDIN{IO};
- $globref = *foo{GLOB};
-
-All of these are self-explanatory except for C<*foo{IO}>. It returns
-the IO handle, used for file handles (L<perlfunc/open>), sockets
-(L<perlfunc/socket> and L<perlfunc/socketpair>), and directory
-handles (L<perlfunc/opendir>). For compatibility with previous
-versions of Perl, C<*foo{FILEHANDLE}> is a synonym for C<*foo{IO}>.
-
-C<*foo{THING}> returns undef if that particular THING hasn't been used yet,
-except in the case of scalars. C<*foo{SCALAR}> returns a reference to an
-anonymous scalar if $foo hasn't been used yet. This might change in a
-future release.
-
-C<*foo{IO}> is an alternative to the C<*HANDLE> mechanism given in
-L<perldata/"Typeglobs and Filehandles"> for passing filehandles
-into or out of subroutines, or storing into larger data structures.
-Its disadvantage is that it won't create a new filehandle for you.
-Its advantage is that you have less risk of clobbering more than
-you want to with a typeglob assignment. (It still conflates file
-and directory handles, though.) However, if you assign the incoming
-value to a scalar instead of a typeglob as we do in the examples
-below, there's no risk of that happening.
-
- splutter(*STDOUT); # pass the whole glob
- splutter(*STDOUT{IO}); # pass both file and dir handles
-
- sub splutter {
- my $fh = shift;
- print $fh "her um well a hmmm\n";
- }
-
- $rec = get_rec(*STDIN); # pass the whole glob
- $rec = get_rec(*STDIN{IO}); # pass both file and dir handles
-
- sub get_rec {
- my $fh = shift;
- return scalar <$fh>;
- }
-
-=back
-
-=head2 Using References
-
-That's it for creating references. By now you're probably dying to
-know how to use references to get back to your long-lost data. There
-are several basic methods.
-
-=over 4
-
-=item 1.
-
-Anywhere you'd put an identifier (or chain of identifiers) as part
-of a variable or subroutine name, you can replace the identifier with
-a simple scalar variable containing a reference of the correct type:
-
- $bar = $$scalarref;
- push(@$arrayref, $filename);
- $$arrayref[0] = "January";
- $$hashref{"KEY"} = "VALUE";
- &$coderef(1,2,3);
- print $globref "output\n";
-
-It's important to understand that we are specifically I<not> dereferencing
-C<$arrayref[0]> or C<$hashref{"KEY"}> there. The dereference of the
-scalar variable happens I<before> it does any key lookups. Anything more
-complicated than a simple scalar variable must use methods 2 or 3 below.
-However, a "simple scalar" includes an identifier that itself uses method
-1 recursively. Therefore, the following prints "howdy".
-
- $refrefref = \\\"howdy";
- print $$$$refrefref;
-
-=item 2.
-
-Anywhere you'd put an identifier (or chain of identifiers) as part of a
-variable or subroutine name, you can replace the identifier with a
-BLOCK returning a reference of the correct type. In other words, the
-previous examples could be written like this:
-
- $bar = ${$scalarref};
- push(@{$arrayref}, $filename);
- ${$arrayref}[0] = "January";
- ${$hashref}{"KEY"} = "VALUE";
- &{$coderef}(1,2,3);
- $globref->print("output\n"); # iff IO::Handle is loaded
-
-Admittedly, it's a little silly to use the curlies in this case, but
-the BLOCK can contain any arbitrary expression, in particular,
-subscripted expressions:
-
- &{ $dispatch{$index} }(1,2,3); # call correct routine
-
-Because of being able to omit the curlies for the simple case of C<$$x>,
-people often make the mistake of viewing the dereferencing symbols as
-proper operators, and wonder about their precedence. If they were,
-though, you could use parentheses instead of braces. That's not the case.
-Consider the difference below; case 0 is a short-hand version of case 1,
-I<not> case 2:
-
- $$hashref{"KEY"} = "VALUE"; # CASE 0
- ${$hashref}{"KEY"} = "VALUE"; # CASE 1
- ${$hashref{"KEY"}} = "VALUE"; # CASE 2
- ${$hashref->{"KEY"}} = "VALUE"; # CASE 3
-
-Case 2 is also deceptive in that you're accessing a variable
-called %hashref, not dereferencing through $hashref to the hash
-it's presumably referencing. That would be case 3.
-
-=item 3.
-
-Subroutine calls and lookups of individual array elements arise often
-enough that it gets cumbersome to use method 2. As a form of
-syntactic sugar, the examples for method 2 may be written:
-
- $arrayref->[0] = "January"; # Array element
- $hashref->{"KEY"} = "VALUE"; # Hash element
- $coderef->(1,2,3); # Subroutine call
-
-The left side of the arrow can be any expression returning a reference,
-including a previous dereference. Note that C<$array[$x]> is I<not> the
-same thing as C<< $array->[$x] >> here:
-
- $array[$x]->{"foo"}->[0] = "January";
-
-This is one of the cases we mentioned earlier in which references could
-spring into existence when in an lvalue context. Before this
-statement, C<$array[$x]> may have been undefined. If so, it's
-automatically defined with a hash reference so that we can look up
-C<{"foo"}> in it. Likewise C<< $array[$x]->{"foo"} >> will automatically get
-defined with an array reference so that we can look up C<[0]> in it.
-This process is called I<autovivification>.
-
-One more thing here. The arrow is optional I<between> brackets
-subscripts, so you can shrink the above down to
-
- $array[$x]{"foo"}[0] = "January";
-
-Which, in the degenerate case of using only ordinary arrays, gives you
-multidimensional arrays just like C's:
-
- $score[$x][$y][$z] += 42;
-
-Well, okay, not entirely like C's arrays, actually. C doesn't know how
-to grow its arrays on demand. Perl does.
-
-=item 4.
-
-If a reference happens to be a reference to an object, then there are
-probably methods to access the things referred to, and you should probably
-stick to those methods unless you're in the class package that defines the
-object's methods. In other words, be nice, and don't violate the object's
-encapsulation without a very good reason. Perl does not enforce
-encapsulation. We are not totalitarians here. We do expect some basic
-civility though.
-
-=back
-
-Using a string or number as a reference produces a symbolic reference,
-as explained above. Using a reference as a number produces an
-integer representing its storage location in memory. The only
-useful thing to be done with this is to compare two references
-numerically to see whether they refer to the same location.
-
- if ($ref1 == $ref2) { # cheap numeric compare of references
- print "refs 1 and 2 refer to the same thing\n";
- }
-
-Using a reference as a string produces both its referent's type,
-including any package blessing as described in L<perlobj>, as well
-as the numeric address expressed in hex. The ref() operator returns
-just the type of thing the reference is pointing to, without the
-address. See L<perlfunc/ref> for details and examples of its use.
-
-The bless() operator may be used to associate the object a reference
-points to with a package functioning as an object class. See L<perlobj>.
-
-A typeglob may be dereferenced the same way a reference can, because
-the dereference syntax always indicates the type of reference desired.
-So C<${*foo}> and C<${\$foo}> both indicate the same scalar variable.
-
-Here's a trick for interpolating a subroutine call into a string:
-
- print "My sub returned @{[mysub(1,2,3)]} that time.\n";
-
-The way it works is that when the C<@{...}> is seen in the double-quoted
-string, it's evaluated as a block. The block creates a reference to an
-anonymous array containing the results of the call to C<mysub(1,2,3)>. So
-the whole block returns a reference to an array, which is then
-dereferenced by C<@{...}> and stuck into the double-quoted string. This
-chicanery is also useful for arbitrary expressions:
-
- print "That yields @{[$n + 5]} widgets\n";
-
-=head2 Symbolic references
-
-We said that references spring into existence as necessary if they are
-undefined, but we didn't say what happens if a value used as a
-reference is already defined, but I<isn't> a hard reference. If you
-use it as a reference, it'll be treated as a symbolic
-reference. That is, the value of the scalar is taken to be the I<name>
-of a variable, rather than a direct link to a (possibly) anonymous
-value.
-
-People frequently expect it to work like this. So it does.
-
- $name = "foo";
- $$name = 1; # Sets $foo
- ${$name} = 2; # Sets $foo
- ${$name x 2} = 3; # Sets $foofoo
- $name->[0] = 4; # Sets $foo[0]
- @$name = (); # Clears @foo
- &$name(); # Calls &foo() (as in Perl 4)
- $pack = "THAT";
- ${"${pack}::$name"} = 5; # Sets $THAT::foo without eval
-
-This is powerful, and slightly dangerous, in that it's possible
-to intend (with the utmost sincerity) to use a hard reference, and
-accidentally use a symbolic reference instead. To protect against
-that, you can say
-
- use strict 'refs';
-
-and then only hard references will be allowed for the rest of the enclosing
-block. An inner block may countermand that with
-
- no strict 'refs';
-
-Only package variables (globals, even if localized) are visible to
-symbolic references. Lexical variables (declared with my()) aren't in
-a symbol table, and thus are invisible to this mechanism. For example:
-
- local $value = 10;
- $ref = "value";
- {
- my $value = 20;
- print $$ref;
- }
-
-This will still print 10, not 20. Remember that local() affects package
-variables, which are all "global" to the package.
-
-=head2 Not-so-symbolic references
-
-A new feature contributing to readability in perl version 5.001 is that the
-brackets around a symbolic reference behave more like quotes, just as they
-always have within a string. That is,
-
- $push = "pop on ";
- print "${push}over";
-
-has always meant to print "pop on over", even though push is
-a reserved word. This has been generalized to work the same outside
-of quotes, so that
-
- print ${push} . "over";
-
-and even
-
- print ${ push } . "over";
-
-will have the same effect. (This would have been a syntax error in
-Perl 5.000, though Perl 4 allowed it in the spaceless form.) This
-construct is I<not> considered to be a symbolic reference when you're
-using strict refs:
-
- use strict 'refs';
- ${ bareword }; # Okay, means $bareword.
- ${ "bareword" }; # Error, symbolic reference.
-
-Similarly, because of all the subscripting that is done using single
-words, we've applied the same rule to any bareword that is used for
-subscripting a hash. So now, instead of writing
-
- $array{ "aaa" }{ "bbb" }{ "ccc" }
-
-you can write just
-
- $array{ aaa }{ bbb }{ ccc }
-
-and not worry about whether the subscripts are reserved words. In the
-rare event that you do wish to do something like
-
- $array{ shift }
-
-you can force interpretation as a reserved word by adding anything that
-makes it more than a bareword:
-
- $array{ shift() }
- $array{ +shift }
- $array{ shift @_ }
-
-The C<use warnings> pragma or the B<-w> switch will warn you if it
-interprets a reserved word as a string.
-But it will no longer warn you about using lowercase words, because the
-string is effectively quoted.
-
-=head2 Pseudo-hashes: Using an array as a hash
-
-B<WARNING>: This section describes an experimental feature. Details may
-change without notice in future versions.
-
-Beginning with release 5.005 of Perl, you may use an array reference
-in some contexts that would normally require a hash reference. This
-allows you to access array elements using symbolic names, as if they
-were fields in a structure.
-
-For this to work, the array must contain extra information. The first
-element of the array has to be a hash reference that maps field names
-to array indices. Here is an example:
-
- $struct = [{foo => 1, bar => 2}, "FOO", "BAR"];
-
- $struct->{foo}; # same as $struct->[1], i.e. "FOO"
- $struct->{bar}; # same as $struct->[2], i.e. "BAR"
-
- keys %$struct; # will return ("foo", "bar") in some order
- values %$struct; # will return ("FOO", "BAR") in same some order
-
- while (my($k,$v) = each %$struct) {
- print "$k => $v\n";
- }
-
-Perl will raise an exception if you try to access nonexistent fields.
-To avoid inconsistencies, always use the fields::phash() function
-provided by the C<fields> pragma.
-
- use fields;
- $pseudohash = fields::phash(foo => "FOO", bar => "BAR");
-
-For better performance, Perl can also do the translation from field
-names to array indices at compile time for typed object references.
-See L<fields>.
-
-There are two ways to check for the existence of a key in a
-pseudo-hash. The first is to use exists(). This checks to see if the
-given field has ever been set. It acts this way to match the behavior
-of a regular hash. For instance:
-
- use fields;
- $phash = fields::phash([qw(foo bar pants)], ['FOO']);
- $phash->{pants} = undef;
-
- print exists $phash->{foo}; # true, 'foo' was set in the declaration
- print exists $phash->{bar}; # false, 'bar' has not been used.
- print exists $phash->{pants}; # true, your 'pants' have been touched
-
-The second is to use exists() on the hash reference sitting in the
-first array element. This checks to see if the given key is a valid
-field in the pseudo-hash.
-
- print exists $phash->[0]{bar}; # true, 'bar' is a valid field
- print exists $phash->[0]{shoes};# false, 'shoes' can't be used
-
-delete() on a pseudo-hash element only deletes the value corresponding
-to the key, not the key itself. To delete the key, you'll have to
-explicitly delete it from the first hash element.
-
- print delete $phash->{foo}; # prints $phash->[1], "FOO"
- print exists $phash->{foo}; # false
- print exists $phash->[0]{foo}; # true, key still exists
- print delete $phash->[0]{foo}; # now key is gone
- print $phash->{foo}; # runtime exception
-
-=head2 Function Templates
-
-As explained above, a closure is an anonymous function with access to the
-lexical variables visible when that function was compiled. It retains
-access to those variables even though it doesn't get run until later,
-such as in a signal handler or a Tk callback.
-
-Using a closure as a function template allows us to generate many functions
-that act similarly. Suppose you wanted functions named after the colors
-that generated HTML font changes for the various colors:
-
- print "Be ", red("careful"), "with that ", green("light");
-
-The red() and green() functions would be similar. To create these,
-we'll assign a closure to a typeglob of the name of the function we're
-trying to build.
-
- @colors = qw(red blue green yellow orange purple violet);
- for my $name (@colors) {
- no strict 'refs'; # allow symbol table manipulation
- *$name = *{uc $name} = sub { "<FONT COLOR='$name'>@_</FONT>" };
- }
-
-Now all those different functions appear to exist independently. You can
-call red(), RED(), blue(), BLUE(), green(), etc. This technique saves on
-both compile time and memory use, and is less error-prone as well, since
-syntax checks happen at compile time. It's critical that any variables in
-the anonymous subroutine be lexicals in order to create a proper closure.
-That's the reasons for the C<my> on the loop iteration variable.
-
-This is one of the only places where giving a prototype to a closure makes
-much sense. If you wanted to impose scalar context on the arguments of
-these functions (probably not a wise idea for this particular example),
-you could have written it this way instead:
-
- *$name = sub ($) { "<FONT COLOR='$name'>$_[0]</FONT>" };
-
-However, since prototype checking happens at compile time, the assignment
-above happens too late to be of much use. You could address this by
-putting the whole loop of assignments within a BEGIN block, forcing it
-to occur during compilation.
-
-Access to lexicals that change over type--like those in the C<for> loop
-above--only works with closures, not general subroutines. In the general
-case, then, named subroutines do not nest properly, although anonymous
-ones do. If you are accustomed to using nested subroutines in other
-programming languages with their own private variables, you'll have to
-work at it a bit in Perl. The intuitive coding of this type of thing
-incurs mysterious warnings about ``will not stay shared''. For example,
-this won't work:
-
- sub outer {
- my $x = $_[0] + 35;
- sub inner { return $x * 19 } # WRONG
- return $x + inner();
- }
-
-A work-around is the following:
-
- sub outer {
- my $x = $_[0] + 35;
- local *inner = sub { return $x * 19 };
- return $x + inner();
- }
-
-Now inner() can only be called from within outer(), because of the
-temporary assignments of the closure (anonymous subroutine). But when
-it does, it has normal access to the lexical variable $x from the scope
-of outer().
-
-This has the interesting effect of creating a function local to another
-function, something not normally supported in Perl.
-
-=head1 WARNING
-
-You may not (usefully) use a reference as the key to a hash. It will be
-converted into a string:
-
- $x{ \$a } = $a;
-
-If you try to dereference the key, it won't do a hard dereference, and
-you won't accomplish what you're attempting. You might want to do something
-more like
-
- $r = \@a;
- $x{ $r } = $r;
-
-And then at least you can use the values(), which will be
-real refs, instead of the keys(), which won't.
-
-The standard Tie::RefHash module provides a convenient workaround to this.
-
-=head1 SEE ALSO
-
-Besides the obvious documents, source code can be instructive.
-Some pathological examples of the use of references can be found
-in the F<t/op/ref.t> regression test in the Perl source directory.
-
-See also L<perldsc> and L<perllol> for how to use references to create
-complex data structures, and L<perltoot>, L<perlobj>, and L<perlbot>
-for how to use them to create objects.
diff --git a/contrib/perl5/pod/perlreftut.pod b/contrib/perl5/pod/perlreftut.pod
deleted file mode 100644
index 073d358..0000000
--- a/contrib/perl5/pod/perlreftut.pod
+++ /dev/null
@@ -1,416 +0,0 @@
-
-=head1 NAME
-
-perlreftut - Mark's very short tutorial about references
-
-=head1 DESCRIPTION
-
-One of the most important new features in Perl 5 was the capability to
-manage complicated data structures like multidimensional arrays and
-nested hashes. To enable these, Perl 5 introduced a feature called
-`references', and using references is the key to managing complicated,
-structured data in Perl. Unfortunately, there's a lot of funny syntax
-to learn, and the main manual page can be hard to follow. The manual
-is quite complete, and sometimes people find that a problem, because
-it can be hard to tell what is important and what isn't.
-
-Fortunately, you only need to know 10% of what's in the main page to get
-90% of the benefit. This page will show you that 10%.
-
-=head1 Who Needs Complicated Data Structures?
-
-One problem that came up all the time in Perl 4 was how to represent a
-hash whose values were lists. Perl 4 had hashes, of course, but the
-values had to be scalars; they couldn't be lists.
-
-Why would you want a hash of lists? Let's take a simple example: You
-have a file of city and country names, like this:
-
- Chicago, USA
- Frankfurt, Germany
- Berlin, Germany
- Washington, USA
- Helsinki, Finland
- New York, USA
-
-and you want to produce an output like this, with each country mentioned
-once, and then an alphabetical list of the cities in that country:
-
- Finland: Helsinki.
- Germany: Berlin, Frankfurt.
- USA: Chicago, New York, Washington.
-
-The natural way to do this is to have a hash whose keys are country
-names. Associated with each country name key is a list of the cities in
-that country. Each time you read a line of input, split it into a country
-and a city, look up the list of cities already known to be in that
-country, and append the new city to the list. When you're done reading
-the input, iterate over the hash as usual, sorting each list of cities
-before you print it out.
-
-If hash values can't be lists, you lose. In Perl 4, hash values can't
-be lists; they can only be strings. You lose. You'd probably have to
-combine all the cities into a single string somehow, and then when
-time came to write the output, you'd have to break the string into a
-list, sort the list, and turn it back into a string. This is messy
-and error-prone. And it's frustrating, because Perl already has
-perfectly good lists that would solve the problem if only you could
-use them.
-
-=head1 The Solution
-
-By the time Perl 5 rolled around, we were already stuck with this
-design: Hash values must be scalars. The solution to this is
-references.
-
-A reference is a scalar value that I<refers to> an entire array or an
-entire hash (or to just about anything else). Names are one kind of
-reference that you're already familiar with. Think of the President:
-a messy, inconvenient bag of blood and bones. But to talk about him,
-or to represent him in a computer program, all you need is the easy,
-convenient scalar string "Bill Clinton".
-
-References in Perl are like names for arrays and hashes. They're
-Perl's private, internal names, so you can be sure they're
-unambiguous. Unlike "Bill Clinton", a reference only refers to one
-thing, and you always know what it refers to. If you have a reference
-to an array, you can recover the entire array from it. If you have a
-reference to a hash, you can recover the entire hash. But the
-reference is still an easy, compact scalar value.
-
-You can't have a hash whose values are arrays; hash values can only be
-scalars. We're stuck with that. But a single reference can refer to
-an entire array, and references are scalars, so you can have a hash of
-references to arrays, and it'll act a lot like a hash of arrays, and
-it'll be just as useful as a hash of arrays.
-
-We'll come back to this city-country problem later, after we've seen
-some syntax for managing references.
-
-
-=head1 Syntax
-
-There are just two ways to make a reference, and just two ways to use
-it once you have it.
-
-=head2 Making References
-
-B<Make Rule 1>
-
-If you put a C<\> in front of a variable, you get a
-reference to that variable.
-
- $aref = \@array; # $aref now holds a reference to @array
- $href = \%hash; # $href now holds a reference to %hash
-
-Once the reference is stored in a variable like $aref or $href, you
-can copy it or store it just the same as any other scalar value:
-
- $xy = $aref; # $xy now holds a reference to @array
- $p[3] = $href; # $p[3] now holds a reference to %hash
- $z = $p[3]; # $z now holds a reference to %hash
-
-
-These examples show how to make references to variables with names.
-Sometimes you want to make an array or a hash that doesn't have a
-name. This is analogous to the way you like to be able to use the
-string C<"\n"> or the number 80 without having to store it in a named
-variable first.
-
-B<Make Rule 2>
-
-C<[ ITEMS ]> makes a new, anonymous array, and returns a reference to
-that array. C<{ ITEMS }> makes a new, anonymous hash. and returns a
-reference to that hash.
-
- $aref = [ 1, "foo", undef, 13 ];
- # $aref now holds a reference to an array
-
- $href = { APR => 4, AUG => 8 };
- # $href now holds a reference to a hash
-
-
-The references you get from rule 2 are the same kind of
-references that you get from rule 1:
-
- # This:
- $aref = [ 1, 2, 3 ];
-
- # Does the same as this:
- @array = (1, 2, 3);
- $aref = \@array;
-
-
-The first line is an abbreviation for the following two lines, except
-that it doesn't create the superfluous array variable C<@array>.
-
-
-=head2 Using References
-
-What can you do with a reference once you have it? It's a scalar
-value, and we've seen that you can store it as a scalar and get it back
-again just like any scalar. There are just two more ways to use it:
-
-B<Use Rule 1>
-
-If C<$aref> contains a reference to an array, then you
-can put C<{$aref}> anywhere you would normally put the name of an
-array. For example, C<@{$aref}> instead of C<@array>.
-
-Here are some examples of that:
-
-Arrays:
-
-
- @a @{$aref} An array
- reverse @a reverse @{$aref} Reverse the array
- $a[3] ${$aref}[3] An element of the array
- $a[3] = 17; ${$aref}[3] = 17 Assigning an element
-
-
-On each line are two expressions that do the same thing. The
-left-hand versions operate on the array C<@a>, and the right-hand
-versions operate on the array that is referred to by C<$aref>, but
-once they find the array they're operating on, they do the same things
-to the arrays.
-
-Using a hash reference is I<exactly> the same:
-
- %h %{$href} A hash
- keys %h keys %{$href} Get the keys from the hash
- $h{'red'} ${$href}{'red'} An element of the hash
- $h{'red'} = 17 ${$href}{'red'} = 17 Assigning an element
-
-
-B<Use Rule 2>
-
-C<${$aref}[3]> is too hard to read, so you can write C<< $aref->[3] >>
-instead.
-
-C<${$href}{red}> is too hard to read, so you can write
-C<< $href->{red} >> instead.
-
-Most often, when you have an array or a hash, you want to get or set a
-single element from it. C<${$aref}[3]> and C<${$href}{'red'}> have
-too much punctuation, and Perl lets you abbreviate.
-
-If C<$aref> holds a reference to an array, then C<< $aref->[3] >> is
-the fourth element of the array. Don't confuse this with C<$aref[3]>,
-which is the fourth element of a totally different array, one
-deceptively named C<@aref>. C<$aref> and C<@aref> are unrelated the
-same way that C<$item> and C<@item> are.
-
-Similarly, C<< $href->{'red'} >> is part of the hash referred to by
-the scalar variable C<$href>, perhaps even one with no name.
-C<$href{'red'}> is part of the deceptively named C<%href> hash. It's
-easy to forget to leave out the C<< -> >>, and if you do, you'll get
-bizarre results when your program gets array and hash elements out of
-totally unexpected hashes and arrays that weren't the ones you wanted
-to use.
-
-
-=head1 An Example
-
-Let's see a quick example of how all this is useful.
-
-First, remember that C<[1, 2, 3]> makes an anonymous array containing
-C<(1, 2, 3)>, and gives you a reference to that array.
-
-Now think about
-
- @a = ( [1, 2, 3],
- [4, 5, 6],
- [7, 8, 9]
- );
-
-@a is an array with three elements, and each one is a reference to
-another array.
-
-C<$a[1]> is one of these references. It refers to an array, the array
-containing C<(4, 5, 6)>, and because it is a reference to an array,
-B<USE RULE 2> says that we can write C<< $a[1]->[2] >> to get the
-third element from that array. C<< $a[1]->[2] >> is the 6.
-Similarly, C<< $a[0]->[1] >> is the 2. What we have here is like a
-two-dimensional array; you can write C<< $a[ROW]->[COLUMN] >> to get
-or set the element in any row and any column of the array.
-
-The notation still looks a little cumbersome, so there's one more
-abbreviation:
-
-=head1 Arrow Rule
-
-In between two B<subscripts>, the arrow is optional.
-
-Instead of C<< $a[1]->[2] >>, we can write C<$a[1][2]>; it means the
-same thing. Instead of C<< $a[0]->[1] >>, we can write C<$a[0][1]>;
-it means the same thing.
-
-Now it really looks like two-dimensional arrays!
-
-You can see why the arrows are important. Without them, we would have
-had to write C<${$a[1]}[2]> instead of C<$a[1][2]>. For
-three-dimensional arrays, they let us write C<$x[2][3][5]> instead of
-the unreadable C<${${$x[2]}[3]}[5]>.
-
-
-=head1 Solution
-
-Here's the answer to the problem I posed earlier, of reformatting a
-file of city and country names.
-
- 1 while (<>) {
- 2 chomp;
- 3 my ($city, $country) = split /, /;
- 4 push @{$table{$country}}, $city;
- 5 }
- 6
- 7 foreach $country (sort keys %table) {
- 8 print "$country: ";
- 9 my @cities = @{$table{$country}};
- 10 print join ', ', sort @cities;
- 11 print ".\n";
- 12 }
-
-
-The program has two pieces: Lines 1--5 read the input and build a
-data structure, and lines 7--12 analyze the data and print out the
-report.
-
-In the first part, line 4 is the important one. We're going to have a
-hash, C<%table>, whose keys are country names, and whose values are
-(references to) arrays of city names. After acquiring a city and
-country name, the program looks up C<$table{$country}>, which holds (a
-reference to) the list of cities seen in that country so far. Line 4 is
-totally analogous to
-
- push @array, $city;
-
-except that the name C<array> has been replaced by the reference
-C<{$table{$country}}>. The C<push> adds a city name to the end of the
-referred-to array.
-
-In the second part, line 9 is the important one. Again,
-C<$table{$country}> is (a reference to) the list of cities in the country, so
-we can recover the original list, and copy it into the array C<@cities>,
-by using C<@{$table{$country}}>. Line 9 is totally analogous to
-
- @cities = @array;
-
-except that the name C<array> has been replaced by the reference
-C<{$table{$country}}>. The C<@> tells Perl to get the entire array.
-
-The rest of the program is just familiar uses of C<chomp>, C<split>, C<sort>,
-C<print>, and doesn't involve references at all.
-
-There's one fine point I skipped. Suppose the program has just read
-the first line in its input that happens to mention Greece.
-Control is at line 4, C<$country> is C<'Greece'>, and C<$city> is
-C<'Athens'>. Since this is the first city in Greece,
-C<$table{$country}> is undefined---in fact there isn't an C<'Greece'> key
-in C<%table> at all. What does line 4 do here?
-
- 4 push @{$table{$country}}, $city;
-
-
-This is Perl, so it does the exact right thing. It sees that you want
-to push C<Athens> onto an array that doesn't exist, so it helpfully
-makes a new, empty, anonymous array for you, installs it in the table,
-and then pushes C<Athens> onto it. This is called `autovivification'.
-
-
-=head1 The Rest
-
-I promised to give you 90% of the benefit with 10% of the details, and
-that means I left out 90% of the details. Now that you have an
-overview of the important parts, it should be easier to read the
-L<perlref> manual page, which discusses 100% of the details.
-
-Some of the highlights of L<perlref>:
-
-=over 4
-
-=item *
-
-You can make references to anything, including scalars, functions, and
-other references.
-
-=item *
-
-In B<USE RULE 1>, you can omit the curly brackets whenever the thing
-inside them is an atomic scalar variable like C<$aref>. For example,
-C<@$aref> is the same as C<@{$aref}>, and C<$$aref[1]> is the same as
-C<${$aref}[1]>. If you're just starting out, you may want to adopt
-the habit of always including the curly brackets.
-
-=item *
-
-To see if a variable contains a reference, use the `ref' function.
-It returns true if its argument is a reference. Actually it's a
-little better than that: It returns HASH for hash references and
-ARRAY for array references.
-
-=item *
-
-If you try to use a reference like a string, you get strings like
-
- ARRAY(0x80f5dec) or HASH(0x826afc0)
-
-If you ever see a string that looks like this, you'll know you
-printed out a reference by mistake.
-
-A side effect of this representation is that you can use C<eq> to see
-if two references refer to the same thing. (But you should usually use
-C<==> instead because it's much faster.)
-
-=item *
-
-You can use a string as if it were a reference. If you use the string
-C<"foo"> as an array reference, it's taken to be a reference to the
-array C<@foo>. This is called a I<soft reference> or I<symbolic reference>.
-
-=back
-
-You might prefer to go on to L<perllol> instead of L<perlref>; it
-discusses lists of lists and multidimensional arrays in detail. After
-that, you should move on to L<perldsc>; it's a Data Structure Cookbook
-that shows recipes for using and printing out arrays of hashes, hashes
-of arrays, and other kinds of data.
-
-=head1 Summary
-
-Everyone needs compound data structures, and in Perl the way you get
-them is with references. There are four important rules for managing
-references: Two for making references and two for using them. Once
-you know these rules you can do most of the important things you need
-to do with references.
-
-=head1 Credits
-
-Author: Mark-Jason Dominus, Plover Systems (C<mjd-perl-ref+@plover.com>)
-
-This article originally appeared in I<The Perl Journal>
-(http://tpj.com) volume 3, #2. Reprinted with permission.
-
-The original title was I<Understand References Today>.
-
-=head2 Distribution Conditions
-
-Copyright 1998 The Perl Journal.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work may
-be distributed only under the terms of Perl's Artistic License. Any
-distribution of this file or derivatives thereof outside of that
-package require that special arrangements be made with copyright
-holder.
-
-Irrespective of its distribution, all code examples in these files are
-hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun or for profit
-as you see fit. A simple comment in the code giving credit would be
-courteous but is not required.
-
-
-
-
-=cut
diff --git a/contrib/perl5/pod/perlrequick.pod b/contrib/perl5/pod/perlrequick.pod
deleted file mode 100644
index 5b72a35..0000000
--- a/contrib/perl5/pod/perlrequick.pod
+++ /dev/null
@@ -1,503 +0,0 @@
-=head1 NAME
-
-perlrequick - Perl regular expressions quick start
-
-=head1 DESCRIPTION
-
-This page covers the very basics of understanding, creating and
-using regular expressions ('regexes') in Perl.
-
-
-=head1 The Guide
-
-=head2 Simple word matching
-
-The simplest regex is simply a word, or more generally, a string of
-characters. A regex consisting of a word matches any string that
-contains that word:
-
- "Hello World" =~ /World/; # matches
-
-In this statement, C<World> is a regex and the C<//> enclosing
-C</World/> tells perl to search a string for a match. The operator
-C<=~> associates the string with the regex match and produces a true
-value if the regex matched, or false if the regex did not match. In
-our case, C<World> matches the second word in C<"Hello World">, so the
-expression is true. This idea has several variations.
-
-Expressions like this are useful in conditionals:
-
- print "It matches\n" if "Hello World" =~ /World/;
-
-The sense of the match can be reversed by using C<!~> operator:
-
- print "It doesn't match\n" if "Hello World" !~ /World/;
-
-The literal string in the regex can be replaced by a variable:
-
- $greeting = "World";
- print "It matches\n" if "Hello World" =~ /$greeting/;
-
-If you're matching against C<$_>, the C<$_ =~> part can be omitted:
-
- $_ = "Hello World";
- print "It matches\n" if /World/;
-
-Finally, the C<//> default delimiters for a match can be changed to
-arbitrary delimiters by putting an C<'m'> out front:
-
- "Hello World" =~ m!World!; # matches, delimited by '!'
- "Hello World" =~ m{World}; # matches, note the matching '{}'
- "/usr/bin/perl" =~ m"/perl"; # matches after '/usr/bin',
- # '/' becomes an ordinary char
-
-Regexes must match a part of the string I<exactly> in order for the
-statement to be true:
-
- "Hello World" =~ /world/; # doesn't match, case sensitive
- "Hello World" =~ /o W/; # matches, ' ' is an ordinary char
- "Hello World" =~ /World /; # doesn't match, no ' ' at end
-
-perl will always match at the earliest possible point in the string:
-
- "Hello World" =~ /o/; # matches 'o' in 'Hello'
- "That hat is red" =~ /hat/; # matches 'hat' in 'That'
-
-Not all characters can be used 'as is' in a match. Some characters,
-called B<metacharacters>, are reserved for use in regex notation.
-The metacharacters are
-
- {}[]()^$.|*+?\
-
-A metacharacter can be matched by putting a backslash before it:
-
- "2+2=4" =~ /2+2/; # doesn't match, + is a metacharacter
- "2+2=4" =~ /2\+2/; # matches, \+ is treated like an ordinary +
- 'C:\WIN32' =~ /C:\\WIN/; # matches
- "/usr/bin/perl" =~ /\/usr\/local\/bin\/perl/; # matches
-
-In the last regex, the forward slash C<'/'> is also backslashed,
-because it is used to delimit the regex.
-
-Non-printable ASCII characters are represented by B<escape sequences>.
-Common examples are C<\t> for a tab, C<\n> for a newline, and C<\r>
-for a carriage return. Arbitrary bytes are represented by octal
-escape sequences, e.g., C<\033>, or hexadecimal escape sequences,
-e.g., C<\x1B>:
-
- "1000\t2000" =~ m(0\t2) # matches
- "cat" =~ /\143\x61\x74/ # matches, but a weird way to spell cat
-
-Regexes are treated mostly as double quoted strings, so variable
-substitution works:
-
- $foo = 'house';
- 'cathouse' =~ /cat$foo/; # matches
- 'housecat' =~ /${foo}cat/; # matches
-
-With all of the regexes above, if the regex matched anywhere in the
-string, it was considered a match. To specify I<where> it should
-match, we would use the B<anchor> metacharacters C<^> and C<$>. The
-anchor C<^> means match at the beginning of the string and the anchor
-C<$> means match at the end of the string, or before a newline at the
-end of the string. Some examples:
-
- "housekeeper" =~ /keeper/; # matches
- "housekeeper" =~ /^keeper/; # doesn't match
- "housekeeper" =~ /keeper$/; # matches
- "housekeeper\n" =~ /keeper$/; # matches
- "housekeeper" =~ /^housekeeper$/; # matches
-
-=head2 Using character classes
-
-A B<character class> allows a set of possible characters, rather than
-just a single character, to match at a particular point in a regex.
-Character classes are denoted by brackets C<[...]>, with the set of
-characters to be possibly matched inside. Here are some examples:
-
- /cat/; # matches 'cat'
- /[bcr]at/; # matches 'bat', 'cat', or 'rat'
- "abc" =~ /[cab]/; # matches 'a'
-
-In the last statement, even though C<'c'> is the first character in
-the class, the earliest point at which the regex can match is C<'a'>.
-
- /[yY][eE][sS]/; # match 'yes' in a case-insensitive way
- # 'yes', 'Yes', 'YES', etc.
- /yes/i; # also match 'yes' in a case-insensitive way
-
-The last example shows a match with an C<'i'> B<modifier>, which makes
-the match case-insensitive.
-
-Character classes also have ordinary and special characters, but the
-sets of ordinary and special characters inside a character class are
-different than those outside a character class. The special
-characters for a character class are C<-]\^$> and are matched using an
-escape:
-
- /[\]c]def/; # matches ']def' or 'cdef'
- $x = 'bcr';
- /[$x]at/; # matches 'bat, 'cat', or 'rat'
- /[\$x]at/; # matches '$at' or 'xat'
- /[\\$x]at/; # matches '\at', 'bat, 'cat', or 'rat'
-
-The special character C<'-'> acts as a range operator within character
-classes, so that the unwieldy C<[0123456789]> and C<[abc...xyz]>
-become the svelte C<[0-9]> and C<[a-z]>:
-
- /item[0-9]/; # matches 'item0' or ... or 'item9'
- /[0-9a-fA-F]/; # matches a hexadecimal digit
-
-If C<'-'> is the first or last character in a character class, it is
-treated as an ordinary character.
-
-The special character C<^> in the first position of a character class
-denotes a B<negated character class>, which matches any character but
-those in the brackets. Both C<[...]> and C<[^...]> must match a
-character, or the match fails. Then
-
- /[^a]at/; # doesn't match 'aat' or 'at', but matches
- # all other 'bat', 'cat, '0at', '%at', etc.
- /[^0-9]/; # matches a non-numeric character
- /[a^]at/; # matches 'aat' or '^at'; here '^' is ordinary
-
-Perl has several abbreviations for common character classes:
-
-=over 4
-
-=item *
-
-\d is a digit and represents [0-9]
-
-=item *
-
-\s is a whitespace character and represents [\ \t\r\n\f]
-
-=item *
-
-\w is a word character (alphanumeric or _) and represents [0-9a-zA-Z_]
-
-=item *
-
-\D is a negated \d; it represents any character but a digit [^0-9]
-
-=item *
-
-\S is a negated \s; it represents any non-whitespace character [^\s]
-
-=item *
-
-\W is a negated \w; it represents any non-word character [^\w]
-
-=item *
-
-The period '.' matches any character but "\n"
-
-=back
-
-The C<\d\s\w\D\S\W> abbreviations can be used both inside and outside
-of character classes. Here are some in use:
-
- /\d\d:\d\d:\d\d/; # matches a hh:mm:ss time format
- /[\d\s]/; # matches any digit or whitespace character
- /\w\W\w/; # matches a word char, followed by a
- # non-word char, followed by a word char
- /..rt/; # matches any two chars, followed by 'rt'
- /end\./; # matches 'end.'
- /end[.]/; # same thing, matches 'end.'
-
-The S<B<word anchor> > C<\b> matches a boundary between a word
-character and a non-word character C<\w\W> or C<\W\w>:
-
- $x = "Housecat catenates house and cat";
- $x =~ /\bcat/; # matches cat in 'catenates'
- $x =~ /cat\b/; # matches cat in 'housecat'
- $x =~ /\bcat\b/; # matches 'cat' at end of string
-
-In the last example, the end of the string is considered a word
-boundary.
-
-=head2 Matching this or that
-
-We can match match different character strings with the B<alternation>
-metacharacter C<'|'>. To match C<dog> or C<cat>, we form the regex
-C<dog|cat>. As before, perl will try to match the regex at the
-earliest possible point in the string. At each character position,
-perl will first try to match the the first alternative, C<dog>. If
-C<dog> doesn't match, perl will then try the next alternative, C<cat>.
-If C<cat> doesn't match either, then the match fails and perl moves to
-the next position in the string. Some examples:
-
- "cats and dogs" =~ /cat|dog|bird/; # matches "cat"
- "cats and dogs" =~ /dog|cat|bird/; # matches "cat"
-
-Even though C<dog> is the first alternative in the second regex,
-C<cat> is able to match earlier in the string.
-
- "cats" =~ /c|ca|cat|cats/; # matches "c"
- "cats" =~ /cats|cat|ca|c/; # matches "cats"
-
-At a given character position, the first alternative that allows the
-regex match to succeed wil be the one that matches. Here, all the
-alternatives match at the first string position, so th first matches.
-
-=head2 Grouping things and hierarchical matching
-
-The B<grouping> metacharacters C<()> allow a part of a regex to be
-treated as a single unit. Parts of a regex are grouped by enclosing
-them in parentheses. The regex C<house(cat|keeper)> means match
-C<house> followed by either C<cat> or C<keeper>. Some more examples
-are
-
- /(a|b)b/; # matches 'ab' or 'bb'
- /(^a|b)c/; # matches 'ac' at start of string or 'bc' anywhere
-
- /house(cat|)/; # matches either 'housecat' or 'house'
- /house(cat(s|)|)/; # matches either 'housecats' or 'housecat' or
- # 'house'. Note groups can be nested.
-
- "20" =~ /(19|20|)\d\d/; # matches the null alternative '()\d\d',
- # because '20\d\d' can't match
-
-=head2 Extracting matches
-
-The grouping metacharacters C<()> also allow the extraction of the
-parts of a string that matched. For each grouping, the part that
-matched inside goes into the special variables C<$1>, C<$2>, etc.
-They can be used just as ordinary variables:
-
- # extract hours, minutes, seconds
- $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format
- $hours = $1;
- $minutes = $2;
- $seconds = $3;
-
-In list context, a match C</regex/> with groupings will return the
-list of matched values C<($1,$2,...)>. So we could rewrite it as
-
- ($hours, $minutes, $second) = ($time =~ /(\d\d):(\d\d):(\d\d)/);
-
-If the groupings in a regex are nested, C<$1> gets the group with the
-leftmost opening parenthesis, C<$2> the next opening parenthesis,
-etc. For example, here is a complex regex and the matching variables
-indicated below it:
-
- /(ab(cd|ef)((gi)|j))/;
- 1 2 34
-
-Associated with the matching variables C<$1>, C<$2>, ... are
-the B<backreferences> C<\1>, C<\2>, ... Backreferences are
-matching variables that can be used I<inside> a regex:
-
- /(\w\w\w)\s\1/; # find sequences like 'the the' in string
-
-C<$1>, C<$2>, ... should only be used outside of a regex, and C<\1>,
-C<\2>, ... only inside a regex.
-
-=head2 Matching repetitions
-
-The B<quantifier> metacharacters C<?>, C<*>, C<+>, and C<{}> allow us
-to determine the number of repeats of a portion of a regex we
-consider to be a match. Quantifiers are put immediately after the
-character, character class, or grouping that we want to specify. They
-have the following meanings:
-
-=over 4
-
-=item *
-
-C<a?> = match 'a' 1 or 0 times
-
-=item *
-
-C<a*> = match 'a' 0 or more times, i.e., any number of times
-
-=item *
-
-C<a+> = match 'a' 1 or more times, i.e., at least once
-
-=item *
-
-C<a{n,m}> = match at least C<n> times, but not more than C<m>
-times.
-
-=item *
-
-C<a{n,}> = match at least C<n> or more times
-
-=item *
-
-C<a{n}> = match exactly C<n> times
-
-=back
-
-Here are some examples:
-
- /[a-z]+\s+\d*/; # match a lowercase word, at least some space, and
- # any number of digits
- /(\w+)\s+\1/; # match doubled words of arbitrary length
- $year =~ /\d{2,4}/; # make sure year is at least 2 but not more
- # than 4 digits
- $year =~ /\d{4}|\d{2}/; # better match; throw out 3 digit dates
-
-These quantifiers will try to match as much of the string as possible,
-while still allowing the regex to match. So we have
-
- $x = 'the cat in the hat';
- $x =~ /^(.*)(at)(.*)$/; # matches,
- # $1 = 'the cat in the h'
- # $2 = 'at'
- # $3 = '' (0 matches)
-
-The first quantifier C<.*> grabs as much of the string as possible
-while still having the regex match. The second quantifier C<.*> has
-no string left to it, so it matches 0 times.
-
-=head2 More matching
-
-There are a few more things you might want to know about matching
-operators. In the code
-
- $pattern = 'Seuss';
- while (<>) {
- print if /$pattern/;
- }
-
-perl has to re-evaluate C<$pattern> each time through the loop. If
-C<$pattern> won't be changing, use the C<//o> modifier, to only
-perform variable substitutions once. If you don't want any
-substitutions at all, use the special delimiter C<m''>:
-
- $pattern = 'Seuss';
- m'$pattern'; # matches '$pattern', not 'Seuss'
-
-The global modifier C<//g> allows the matching operator to match
-within a string as many times as possible. In scalar context,
-successive matches against a string will have C<//g> jump from match
-to match, keeping track of position in the string as it goes along.
-You can get or set the position with the C<pos()> function.
-For example,
-
- $x = "cat dog house"; # 3 words
- while ($x =~ /(\w+)/g) {
- print "Word is $1, ends at position ", pos $x, "\n";
- }
-
-prints
-
- Word is cat, ends at position 3
- Word is dog, ends at position 7
- Word is house, ends at position 13
-
-A failed match or changing the target string resets the position. If
-you don't want the position reset after failure to match, add the
-C<//c>, as in C</regex/gc>.
-
-In list context, C<//g> returns a list of matched groupings, or if
-there are no groupings, a list of matches to the whole regex. So
-
- @words = ($x =~ /(\w+)/g); # matches,
- # $word[0] = 'cat'
- # $word[1] = 'dog'
- # $word[2] = 'house'
-
-=head2 Search and replace
-
-Search and replace is performed using C<s/regex/replacement/modifiers>.
-The C<replacement> is a Perl double quoted string that replaces in the
-string whatever is matched with the C<regex>. The operator C<=~> is
-also used here to associate a string with C<s///>. If matching
-against C<$_>, the S<C<$_ =~> > can be dropped. If there is a match,
-C<s///> returns the number of substitutions made, otherwise it returns
-false. Here are a few examples:
-
- $x = "Time to feed the cat!";
- $x =~ s/cat/hacker/; # $x contains "Time to feed the hacker!"
- $y = "'quoted words'";
- $y =~ s/^'(.*)'$/$1/; # strip single quotes,
- # $y contains "quoted words"
-
-With the C<s///> operator, the matched variables C<$1>, C<$2>, etc.
-are immediately available for use in the replacement expression. With
-the global modifier, C<s///g> will search and replace all occurrences
-of the regex in the string:
-
- $x = "I batted 4 for 4";
- $x =~ s/4/four/; # $x contains "I batted four for 4"
- $x = "I batted 4 for 4";
- $x =~ s/4/four/g; # $x contains "I batted four for four"
-
-The evaluation modifier C<s///e> wraps an C<eval{...}> around the
-replacement string and the evaluated result is substituted for the
-matched substring. Some examples:
-
- # reverse all the words in a string
- $x = "the cat in the hat";
- $x =~ s/(\w+)/reverse $1/ge; # $x contains "eht tac ni eht tah"
-
- # convert percentage to decimal
- $x = "A 39% hit rate";
- $x =~ s!(\d+)%!$1/100!e; # $x contains "A 0.39 hit rate"
-
-The last example shows that C<s///> can use other delimiters, such as
-C<s!!!> and C<s{}{}>, and even C<s{}//>. If single quotes are used
-C<s'''>, then the regex and replacement are treated as single quoted
-strings.
-
-=head2 The split operator
-
-C<split /regex/, string> splits C<string> into a list of substrings
-and returns that list. The regex determines the character sequence
-that C<string> is split with respect to. For example, to split a
-string into words, use
-
- $x = "Calvin and Hobbes";
- @word = split /\s+/, $x; # $word[0] = 'Calvin'
- # $word[1] = 'and'
- # $word[2] = 'Hobbes'
-
-To extract a comma-delimited list of numbers, use
-
- $x = "1.618,2.718, 3.142";
- @const = split /,\s*/, $x; # $const[0] = '1.618'
- # $const[1] = '2.718'
- # $const[2] = '3.142'
-
-If the empty regex C<//> is used, the string is split into individual
-characters. If the regex has groupings, then list produced contains
-the matched substrings from the groupings as well:
-
- $x = "/usr/bin";
- @parts = split m!(/)!, $x; # $parts[0] = ''
- # $parts[1] = '/'
- # $parts[2] = 'usr'
- # $parts[3] = '/'
- # $parts[4] = 'bin'
-
-Since the first character of $x matched the regex, C<split> prepended
-an empty initial element to the list.
-
-=head1 BUGS
-
-None.
-
-=head1 SEE ALSO
-
-This is just a quick start guide. For a more in-depth tutorial on
-regexes, see L<perlretut> and for the reference page, see L<perlre>.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 2000 Mark Kvale
-All rights reserved.
-
-This document may be distributed under the same terms as Perl itself.
-
-=head2 Acknowledgments
-
-The author would like to thank Mark-Jason Dominus, Tom Christiansen,
-Ilya Zakharevich, Brad Hughes, and Mike Giroux for all their helpful
-comments.
-
-=cut
-
diff --git a/contrib/perl5/pod/perlretut.pod b/contrib/perl5/pod/perlretut.pod
deleted file mode 100644
index fa6479c..0000000
--- a/contrib/perl5/pod/perlretut.pod
+++ /dev/null
@@ -1,2504 +0,0 @@
-=head1 NAME
-
-perlretut - Perl regular expressions tutorial
-
-=head1 DESCRIPTION
-
-This page provides a basic tutorial on understanding, creating and
-using regular expressions in Perl. It serves as a complement to the
-reference page on regular expressions L<perlre>. Regular expressions
-are an integral part of the C<m//>, C<s///>, C<qr//> and C<split>
-operators and so this tutorial also overlaps with
-L<perlop/"Regexp Quote-Like Operators"> and L<perlfunc/split>.
-
-Perl is widely renowned for excellence in text processing, and regular
-expressions are one of the big factors behind this fame. Perl regular
-expressions display an efficiency and flexibility unknown in most
-other computer languages. Mastering even the basics of regular
-expressions will allow you to manipulate text with surprising ease.
-
-What is a regular expression? A regular expression is simply a string
-that describes a pattern. Patterns are in common use these days;
-examples are the patterns typed into a search engine to find web pages
-and the patterns used to list files in a directory, e.g., C<ls *.txt>
-or C<dir *.*>. In Perl, the patterns described by regular expressions
-are used to search strings, extract desired parts of strings, and to
-do search and replace operations.
-
-Regular expressions have the undeserved reputation of being abstract
-and difficult to understand. Regular expressions are constructed using
-simple concepts like conditionals and loops and are no more difficult
-to understand than the corresponding C<if> conditionals and C<while>
-loops in the Perl language itself. In fact, the main challenge in
-learning regular expressions is just getting used to the terse
-notation used to express these concepts.
-
-This tutorial flattens the learning curve by discussing regular
-expression concepts, along with their notation, one at a time and with
-many examples. The first part of the tutorial will progress from the
-simplest word searches to the basic regular expression concepts. If
-you master the first part, you will have all the tools needed to solve
-about 98% of your needs. The second part of the tutorial is for those
-comfortable with the basics and hungry for more power tools. It
-discusses the more advanced regular expression operators and
-introduces the latest cutting edge innovations in 5.6.0.
-
-A note: to save time, 'regular expression' is often abbreviated as
-regexp or regex. Regexp is a more natural abbreviation than regex, but
-is harder to pronounce. The Perl pod documentation is evenly split on
-regexp vs regex; in Perl, there is more than one way to abbreviate it.
-We'll use regexp in this tutorial.
-
-=head1 Part 1: The basics
-
-=head2 Simple word matching
-
-The simplest regexp is simply a word, or more generally, a string of
-characters. A regexp consisting of a word matches any string that
-contains that word:
-
- "Hello World" =~ /World/; # matches
-
-What is this perl statement all about? C<"Hello World"> is a simple
-double quoted string. C<World> is the regular expression and the
-C<//> enclosing C</World/> tells perl to search a string for a match.
-The operator C<=~> associates the string with the regexp match and
-produces a true value if the regexp matched, or false if the regexp
-did not match. In our case, C<World> matches the second word in
-C<"Hello World">, so the expression is true. Expressions like this
-are useful in conditionals:
-
- if ("Hello World" =~ /World/) {
- print "It matches\n";
- }
- else {
- print "It doesn't match\n";
- }
-
-There are useful variations on this theme. The sense of the match can
-be reversed by using C<!~> operator:
-
- if ("Hello World" !~ /World/) {
- print "It doesn't match\n";
- }
- else {
- print "It matches\n";
- }
-
-The literal string in the regexp can be replaced by a variable:
-
- $greeting = "World";
- if ("Hello World" =~ /$greeting/) {
- print "It matches\n";
- }
- else {
- print "It doesn't match\n";
- }
-
-If you're matching against the special default variable C<$_>, the
-C<$_ =~> part can be omitted:
-
- $_ = "Hello World";
- if (/World/) {
- print "It matches\n";
- }
- else {
- print "It doesn't match\n";
- }
-
-And finally, the C<//> default delimiters for a match can be changed
-to arbitrary delimiters by putting an C<'m'> out front:
-
- "Hello World" =~ m!World!; # matches, delimited by '!'
- "Hello World" =~ m{World}; # matches, note the matching '{}'
- "/usr/bin/perl" =~ m"/perl"; # matches after '/usr/bin',
- # '/' becomes an ordinary char
-
-C</World/>, C<m!World!>, and C<m{World}> all represent the
-same thing. When, e.g., C<""> is used as a delimiter, the forward
-slash C<'/'> becomes an ordinary character and can be used in a regexp
-without trouble.
-
-Let's consider how different regexps would match C<"Hello World">:
-
- "Hello World" =~ /world/; # doesn't match
- "Hello World" =~ /o W/; # matches
- "Hello World" =~ /oW/; # doesn't match
- "Hello World" =~ /World /; # doesn't match
-
-The first regexp C<world> doesn't match because regexps are
-case-sensitive. The second regexp matches because the substring
-S<C<'o W'> > occurs in the string S<C<"Hello World"> >. The space
-character ' ' is treated like any other character in a regexp and is
-needed to match in this case. The lack of a space character is the
-reason the third regexp C<'oW'> doesn't match. The fourth regexp
-C<'World '> doesn't match because there is a space at the end of the
-regexp, but not at the end of the string. The lesson here is that
-regexps must match a part of the string I<exactly> in order for the
-statement to be true.
-
-If a regexp matches in more than one place in the string, perl will
-always match at the earliest possible point in the string:
-
- "Hello World" =~ /o/; # matches 'o' in 'Hello'
- "That hat is red" =~ /hat/; # matches 'hat' in 'That'
-
-With respect to character matching, there are a few more points you
-need to know about. First of all, not all characters can be used 'as
-is' in a match. Some characters, called B<metacharacters>, are reserved
-for use in regexp notation. The metacharacters are
-
- {}[]()^$.|*+?\
-
-The significance of each of these will be explained
-in the rest of the tutorial, but for now, it is important only to know
-that a metacharacter can be matched by putting a backslash before it:
-
- "2+2=4" =~ /2+2/; # doesn't match, + is a metacharacter
- "2+2=4" =~ /2\+2/; # matches, \+ is treated like an ordinary +
- "The interval is [0,1)." =~ /[0,1)./ # is a syntax error!
- "The interval is [0,1)." =~ /\[0,1\)\./ # matches
- "/usr/bin/perl" =~ /\/usr\/local\/bin\/perl/; # matches
-
-In the last regexp, the forward slash C<'/'> is also backslashed,
-because it is used to delimit the regexp. This can lead to LTS
-(leaning toothpick syndrome), however, and it is often more readable
-to change delimiters.
-
-
-The backslash character C<'\'> is a metacharacter itself and needs to
-be backslashed:
-
- 'C:\WIN32' =~ /C:\\WIN/; # matches
-
-In addition to the metacharacters, there are some ASCII characters
-which don't have printable character equivalents and are instead
-represented by B<escape sequences>. Common examples are C<\t> for a
-tab, C<\n> for a newline, C<\r> for a carriage return and C<\a> for a
-bell. If your string is better thought of as a sequence of arbitrary
-bytes, the octal escape sequence, e.g., C<\033>, or hexadecimal escape
-sequence, e.g., C<\x1B> may be a more natural representation for your
-bytes. Here are some examples of escapes:
-
- "1000\t2000" =~ m(0\t2) # matches
- "1000\n2000" =~ /0\n20/ # matches
- "1000\t2000" =~ /\000\t2/ # doesn't match, "0" ne "\000"
- "cat" =~ /\143\x61\x74/ # matches, but a weird way to spell cat
-
-If you've been around Perl a while, all this talk of escape sequences
-may seem familiar. Similar escape sequences are used in double-quoted
-strings and in fact the regexps in Perl are mostly treated as
-double-quoted strings. This means that variables can be used in
-regexps as well. Just like double-quoted strings, the values of the
-variables in the regexp will be substituted in before the regexp is
-evaluated for matching purposes. So we have:
-
- $foo = 'house';
- 'housecat' =~ /$foo/; # matches
- 'cathouse' =~ /cat$foo/; # matches
- 'housecat' =~ /${foo}cat/; # matches
-
-So far, so good. With the knowledge above you can already perform
-searches with just about any literal string regexp you can dream up.
-Here is a I<very simple> emulation of the Unix grep program:
-
- % cat > simple_grep
- #!/usr/bin/perl
- $regexp = shift;
- while (<>) {
- print if /$regexp/;
- }
- ^D
-
- % chmod +x simple_grep
-
- % simple_grep abba /usr/dict/words
- Babbage
- cabbage
- cabbages
- sabbath
- Sabbathize
- Sabbathizes
- sabbatical
- scabbard
- scabbards
-
-This program is easy to understand. C<#!/usr/bin/perl> is the standard
-way to invoke a perl program from the shell.
-S<C<$regexp = shift;> > saves the first command line argument as the
-regexp to be used, leaving the rest of the command line arguments to
-be treated as files. S<C<< while (<>) >> > loops over all the lines in
-all the files. For each line, S<C<print if /$regexp/;> > prints the
-line if the regexp matches the line. In this line, both C<print> and
-C</$regexp/> use the default variable C<$_> implicitly.
-
-With all of the regexps above, if the regexp matched anywhere in the
-string, it was considered a match. Sometimes, however, we'd like to
-specify I<where> in the string the regexp should try to match. To do
-this, we would use the B<anchor> metacharacters C<^> and C<$>. The
-anchor C<^> means match at the beginning of the string and the anchor
-C<$> means match at the end of the string, or before a newline at the
-end of the string. Here is how they are used:
-
- "housekeeper" =~ /keeper/; # matches
- "housekeeper" =~ /^keeper/; # doesn't match
- "housekeeper" =~ /keeper$/; # matches
- "housekeeper\n" =~ /keeper$/; # matches
-
-The second regexp doesn't match because C<^> constrains C<keeper> to
-match only at the beginning of the string, but C<"housekeeper"> has
-keeper starting in the middle. The third regexp does match, since the
-C<$> constrains C<keeper> to match only at the end of the string.
-
-When both C<^> and C<$> are used at the same time, the regexp has to
-match both the beginning and the end of the string, i.e., the regexp
-matches the whole string. Consider
-
- "keeper" =~ /^keep$/; # doesn't match
- "keeper" =~ /^keeper$/; # matches
- "" =~ /^$/; # ^$ matches an empty string
-
-The first regexp doesn't match because the string has more to it than
-C<keep>. Since the second regexp is exactly the string, it
-matches. Using both C<^> and C<$> in a regexp forces the complete
-string to match, so it gives you complete control over which strings
-match and which don't. Suppose you are looking for a fellow named
-bert, off in a string by himself:
-
- "dogbert" =~ /bert/; # matches, but not what you want
-
- "dilbert" =~ /^bert/; # doesn't match, but ..
- "bertram" =~ /^bert/; # matches, so still not good enough
-
- "bertram" =~ /^bert$/; # doesn't match, good
- "dilbert" =~ /^bert$/; # doesn't match, good
- "bert" =~ /^bert$/; # matches, perfect
-
-Of course, in the case of a literal string, one could just as easily
-use the string equivalence S<C<$string eq 'bert'> > and it would be
-more efficient. The C<^...$> regexp really becomes useful when we
-add in the more powerful regexp tools below.
-
-=head2 Using character classes
-
-Although one can already do quite a lot with the literal string
-regexps above, we've only scratched the surface of regular expression
-technology. In this and subsequent sections we will introduce regexp
-concepts (and associated metacharacter notations) that will allow a
-regexp to not just represent a single character sequence, but a I<whole
-class> of them.
-
-One such concept is that of a B<character class>. A character class
-allows a set of possible characters, rather than just a single
-character, to match at a particular point in a regexp. Character
-classes are denoted by brackets C<[...]>, with the set of characters
-to be possibly matched inside. Here are some examples:
-
- /cat/; # matches 'cat'
- /[bcr]at/; # matches 'bat, 'cat', or 'rat'
- /item[0123456789]/; # matches 'item0' or ... or 'item9'
- "abc" =~ /[cab]/; # matches 'a'
-
-In the last statement, even though C<'c'> is the first character in
-the class, C<'a'> matches because the first character position in the
-string is the earliest point at which the regexp can match.
-
- /[yY][eE][sS]/; # match 'yes' in a case-insensitive way
- # 'yes', 'Yes', 'YES', etc.
-
-This regexp displays a common task: perform a a case-insensitive
-match. Perl provides away of avoiding all those brackets by simply
-appending an C<'i'> to the end of the match. Then C</[yY][eE][sS]/;>
-can be rewritten as C</yes/i;>. The C<'i'> stands for
-case-insensitive and is an example of a B<modifier> of the matching
-operation. We will meet other modifiers later in the tutorial.
-
-We saw in the section above that there were ordinary characters, which
-represented themselves, and special characters, which needed a
-backslash C<\> to represent themselves. The same is true in a
-character class, but the sets of ordinary and special characters
-inside a character class are different than those outside a character
-class. The special characters for a character class are C<-]\^$>. C<]>
-is special because it denotes the end of a character class. C<$> is
-special because it denotes a scalar variable. C<\> is special because
-it is used in escape sequences, just like above. Here is how the
-special characters C<]$\> are handled:
-
- /[\]c]def/; # matches ']def' or 'cdef'
- $x = 'bcr';
- /[$x]at/; # matches 'bat', 'cat', or 'rat'
- /[\$x]at/; # matches '$at' or 'xat'
- /[\\$x]at/; # matches '\at', 'bat, 'cat', or 'rat'
-
-The last two are a little tricky. in C<[\$x]>, the backslash protects
-the dollar sign, so the character class has two members C<$> and C<x>.
-In C<[\\$x]>, the backslash is protected, so C<$x> is treated as a
-variable and substituted in double quote fashion.
-
-The special character C<'-'> acts as a range operator within character
-classes, so that a contiguous set of characters can be written as a
-range. With ranges, the unwieldy C<[0123456789]> and C<[abc...xyz]>
-become the svelte C<[0-9]> and C<[a-z]>. Some examples are
-
- /item[0-9]/; # matches 'item0' or ... or 'item9'
- /[0-9bx-z]aa/; # matches '0aa', ..., '9aa',
- # 'baa', 'xaa', 'yaa', or 'zaa'
- /[0-9a-fA-F]/; # matches a hexadecimal digit
- /[0-9a-zA-Z_]/; # matches a "word" character,
- # like those in a perl variable name
-
-If C<'-'> is the first or last character in a character class, it is
-treated as an ordinary character; C<[-ab]>, C<[ab-]> and C<[a\-b]> are
-all equivalent.
-
-The special character C<^> in the first position of a character class
-denotes a B<negated character class>, which matches any character but
-those in the brackets. Both C<[...]> and C<[^...]> must match a
-character, or the match fails. Then
-
- /[^a]at/; # doesn't match 'aat' or 'at', but matches
- # all other 'bat', 'cat, '0at', '%at', etc.
- /[^0-9]/; # matches a non-numeric character
- /[a^]at/; # matches 'aat' or '^at'; here '^' is ordinary
-
-Now, even C<[0-9]> can be a bother the write multiple times, so in the
-interest of saving keystrokes and making regexps more readable, Perl
-has several abbreviations for common character classes:
-
-=over 4
-
-=item *
-
-\d is a digit and represents [0-9]
-
-=item *
-
-\s is a whitespace character and represents [\ \t\r\n\f]
-
-=item *
-
-\w is a word character (alphanumeric or _) and represents [0-9a-zA-Z_]
-
-=item *
-
-\D is a negated \d; it represents any character but a digit [^0-9]
-
-=item *
-
-\S is a negated \s; it represents any non-whitespace character [^\s]
-
-=item *
-
-\W is a negated \w; it represents any non-word character [^\w]
-
-=item *
-
-The period '.' matches any character but "\n"
-
-=back
-
-The C<\d\s\w\D\S\W> abbreviations can be used both inside and outside
-of character classes. Here are some in use:
-
- /\d\d:\d\d:\d\d/; # matches a hh:mm:ss time format
- /[\d\s]/; # matches any digit or whitespace character
- /\w\W\w/; # matches a word char, followed by a
- # non-word char, followed by a word char
- /..rt/; # matches any two chars, followed by 'rt'
- /end\./; # matches 'end.'
- /end[.]/; # same thing, matches 'end.'
-
-Because a period is a metacharacter, it needs to be escaped to match
-as an ordinary period. Because, for example, C<\d> and C<\w> are sets
-of characters, it is incorrect to think of C<[^\d\w]> as C<[\D\W]>; in
-fact C<[^\d\w]> is the same as C<[^\w]>, which is the same as
-C<[\W]>. Think DeMorgan's laws.
-
-An anchor useful in basic regexps is the S<B<word anchor> >
-C<\b>. This matches a boundary between a word character and a non-word
-character C<\w\W> or C<\W\w>:
-
- $x = "Housecat catenates house and cat";
- $x =~ /cat/; # matches cat in 'housecat'
- $x =~ /\bcat/; # matches cat in 'catenates'
- $x =~ /cat\b/; # matches cat in 'housecat'
- $x =~ /\bcat\b/; # matches 'cat' at end of string
-
-Note in the last example, the end of the string is considered a word
-boundary.
-
-You might wonder why C<'.'> matches everything but C<"\n"> - why not
-every character? The reason is that often one is matching against
-lines and would like to ignore the newline characters. For instance,
-while the string C<"\n"> represents one line, we would like to think
-of as empty. Then
-
- "" =~ /^$/; # matches
- "\n" =~ /^$/; # matches, "\n" is ignored
-
- "" =~ /./; # doesn't match; it needs a char
- "" =~ /^.$/; # doesn't match; it needs a char
- "\n" =~ /^.$/; # doesn't match; it needs a char other than "\n"
- "a" =~ /^.$/; # matches
- "a\n" =~ /^.$/; # matches, ignores the "\n"
-
-This behavior is convenient, because we usually want to ignore
-newlines when we count and match characters in a line. Sometimes,
-however, we want to keep track of newlines. We might even want C<^>
-and C<$> to anchor at the beginning and end of lines within the
-string, rather than just the beginning and end of the string. Perl
-allows us to choose between ignoring and paying attention to newlines
-by using the C<//s> and C<//m> modifiers. C<//s> and C<//m> stand for
-single line and multi-line and they determine whether a string is to
-be treated as one continuous string, or as a set of lines. The two
-modifiers affect two aspects of how the regexp is interpreted: 1) how
-the C<'.'> character class is defined, and 2) where the anchors C<^>
-and C<$> are able to match. Here are the four possible combinations:
-
-=over 4
-
-=item *
-
-no modifiers (//): Default behavior. C<'.'> matches any character
-except C<"\n">. C<^> matches only at the beginning of the string and
-C<$> matches only at the end or before a newline at the end.
-
-=item *
-
-s modifier (//s): Treat string as a single long line. C<'.'> matches
-any character, even C<"\n">. C<^> matches only at the beginning of
-the string and C<$> matches only at the end or before a newline at the
-end.
-
-=item *
-
-m modifier (//m): Treat string as a set of multiple lines. C<'.'>
-matches any character except C<"\n">. C<^> and C<$> are able to match
-at the start or end of I<any> line within the string.
-
-=item *
-
-both s and m modifiers (//sm): Treat string as a single long line, but
-detect multiple lines. C<'.'> matches any character, even
-C<"\n">. C<^> and C<$>, however, are able to match at the start or end
-of I<any> line within the string.
-
-=back
-
-Here are examples of C<//s> and C<//m> in action:
-
- $x = "There once was a girl\nWho programmed in Perl\n";
-
- $x =~ /^Who/; # doesn't match, "Who" not at start of string
- $x =~ /^Who/s; # doesn't match, "Who" not at start of string
- $x =~ /^Who/m; # matches, "Who" at start of second line
- $x =~ /^Who/sm; # matches, "Who" at start of second line
-
- $x =~ /girl.Who/; # doesn't match, "." doesn't match "\n"
- $x =~ /girl.Who/s; # matches, "." matches "\n"
- $x =~ /girl.Who/m; # doesn't match, "." doesn't match "\n"
- $x =~ /girl.Who/sm; # matches, "." matches "\n"
-
-Most of the time, the default behavior is what is want, but C<//s> and
-C<//m> are occasionally very useful. If C<//m> is being used, the start
-of the string can still be matched with C<\A> and the end of string
-can still be matched with the anchors C<\Z> (matches both the end and
-the newline before, like C<$>), and C<\z> (matches only the end):
-
- $x =~ /^Who/m; # matches, "Who" at start of second line
- $x =~ /\AWho/m; # doesn't match, "Who" is not at start of string
-
- $x =~ /girl$/m; # matches, "girl" at end of first line
- $x =~ /girl\Z/m; # doesn't match, "girl" is not at end of string
-
- $x =~ /Perl\Z/m; # matches, "Perl" is at newline before end
- $x =~ /Perl\z/m; # doesn't match, "Perl" is not at end of string
-
-We now know how to create choices among classes of characters in a
-regexp. What about choices among words or character strings? Such
-choices are described in the next section.
-
-=head2 Matching this or that
-
-Sometimes we would like to our regexp to be able to match different
-possible words or character strings. This is accomplished by using
-the B<alternation> metacharacter C<|>. To match C<dog> or C<cat>, we
-form the regexp C<dog|cat>. As before, perl will try to match the
-regexp at the earliest possible point in the string. At each
-character position, perl will first try to match the first
-alternative, C<dog>. If C<dog> doesn't match, perl will then try the
-next alternative, C<cat>. If C<cat> doesn't match either, then the
-match fails and perl moves to the next position in the string. Some
-examples:
-
- "cats and dogs" =~ /cat|dog|bird/; # matches "cat"
- "cats and dogs" =~ /dog|cat|bird/; # matches "cat"
-
-Even though C<dog> is the first alternative in the second regexp,
-C<cat> is able to match earlier in the string.
-
- "cats" =~ /c|ca|cat|cats/; # matches "c"
- "cats" =~ /cats|cat|ca|c/; # matches "cats"
-
-Here, all the alternatives match at the first string position, so the
-first alternative is the one that matches. If some of the
-alternatives are truncations of the others, put the longest ones first
-to give them a chance to match.
-
- "cab" =~ /a|b|c/ # matches "c"
- # /a|b|c/ == /[abc]/
-
-The last example points out that character classes are like
-alternations of characters. At a given character position, the first
-alternative that allows the regexp match to succeed wil be the one
-that matches.
-
-=head2 Grouping things and hierarchical matching
-
-Alternation allows a regexp to choose among alternatives, but by
-itself it unsatisfying. The reason is that each alternative is a whole
-regexp, but sometime we want alternatives for just part of a
-regexp. For instance, suppose we want to search for housecats or
-housekeepers. The regexp C<housecat|housekeeper> fits the bill, but is
-inefficient because we had to type C<house> twice. It would be nice to
-have parts of the regexp be constant, like C<house>, and and some
-parts have alternatives, like C<cat|keeper>.
-
-The B<grouping> metacharacters C<()> solve this problem. Grouping
-allows parts of a regexp to be treated as a single unit. Parts of a
-regexp are grouped by enclosing them in parentheses. Thus we could solve
-the C<housecat|housekeeper> by forming the regexp as
-C<house(cat|keeper)>. The regexp C<house(cat|keeper)> means match
-C<house> followed by either C<cat> or C<keeper>. Some more examples
-are
-
- /(a|b)b/; # matches 'ab' or 'bb'
- /(ac|b)b/; # matches 'acb' or 'bb'
- /(^a|b)c/; # matches 'ac' at start of string or 'bc' anywhere
- /(a|[bc])d/; # matches 'ad', 'bd', or 'cd'
-
- /house(cat|)/; # matches either 'housecat' or 'house'
- /house(cat(s|)|)/; # matches either 'housecats' or 'housecat' or
- # 'house'. Note groups can be nested.
-
- /(19|20|)\d\d/; # match years 19xx, 20xx, or the Y2K problem, xx
- "20" =~ /(19|20|)\d\d/; # matches the null alternative '()\d\d',
- # because '20\d\d' can't match
-
-Alternations behave the same way in groups as out of them: at a given
-string position, the leftmost alternative that allows the regexp to
-match is taken. So in the last example at tth first string position,
-C<"20"> matches the second alternative, but there is nothing left over
-to match the next two digits C<\d\d>. So perl moves on to the next
-alternative, which is the null alternative and that works, since
-C<"20"> is two digits.
-
-The process of trying one alternative, seeing if it matches, and
-moving on to the next alternative if it doesn't, is called
-B<backtracking>. The term 'backtracking' comes from the idea that
-matching a regexp is like a walk in the woods. Successfully matching
-a regexp is like arriving at a destination. There are many possible
-trailheads, one for each string position, and each one is tried in
-order, left to right. From each trailhead there may be many paths,
-some of which get you there, and some which are dead ends. When you
-walk along a trail and hit a dead end, you have to backtrack along the
-trail to an earlier point to try another trail. If you hit your
-destination, you stop immediately and forget about trying all the
-other trails. You are persistent, and only if you have tried all the
-trails from all the trailheads and not arrived at your destination, do
-you declare failure. To be concrete, here is a step-by-step analysis
-of what perl does when it tries to match the regexp
-
- "abcde" =~ /(abd|abc)(df|d|de)/;
-
-=over 4
-
-=item 0
-
-Start with the first letter in the string 'a'.
-
-=item 1
-
-Try the first alternative in the first group 'abd'.
-
-=item 2
-
-Match 'a' followed by 'b'. So far so good.
-
-=item 3
-
-'d' in the regexp doesn't match 'c' in the string - a dead
-end. So backtrack two characters and pick the second alternative in
-the first group 'abc'.
-
-=item 4
-
-Match 'a' followed by 'b' followed by 'c'. We are on a roll
-and have satisfied the first group. Set $1 to 'abc'.
-
-=item 5
-
-Move on to the second group and pick the first alternative
-'df'.
-
-=item 6
-
-Match the 'd'.
-
-=item 7
-
-'f' in the regexp doesn't match 'e' in the string, so a dead
-end. Backtrack one character and pick the second alternative in the
-second group 'd'.
-
-=item 8
-
-'d' matches. The second grouping is satisfied, so set $2 to
-'d'.
-
-=item 9
-
-We are at the end of the regexp, so we are done! We have
-matched 'abcd' out of the string "abcde".
-
-=back
-
-There are a couple of things to note about this analysis. First, the
-third alternative in the second group 'de' also allows a match, but we
-stopped before we got to it - at a given character position, leftmost
-wins. Second, we were able to get a match at the first character
-position of the string 'a'. If there were no matches at the first
-position, perl would move to the second character position 'b' and
-attempt the match all over again. Only when all possible paths at all
-possible character positions have been exhausted does perl give give
-up and declare S<C<$string =~ /(abd|abc)(df|d|de)/;> > to be false.
-
-Even with all this work, regexp matching happens remarkably fast. To
-speed things up, during compilation stage, perl compiles the regexp
-into a compact sequence of opcodes that can often fit inside a
-processor cache. When the code is executed, these opcodes can then run
-at full throttle and search very quickly.
-
-=head2 Extracting matches
-
-The grouping metacharacters C<()> also serve another completely
-different function: they allow the extraction of the parts of a string
-that matched. This is very useful to find out what matched and for
-text processing in general. For each grouping, the part that matched
-inside goes into the special variables C<$1>, C<$2>, etc. They can be
-used just as ordinary variables:
-
- # extract hours, minutes, seconds
- $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format
- $hours = $1;
- $minutes = $2;
- $seconds = $3;
-
-Now, we know that in scalar context,
-S<C<$time =~ /(\d\d):(\d\d):(\d\d)/> > returns a true or false
-value. In list context, however, it returns the list of matched values
-C<($1,$2,$3)>. So we could write the code more compactly as
-
- # extract hours, minutes, seconds
- ($hours, $minutes, $second) = ($time =~ /(\d\d):(\d\d):(\d\d)/);
-
-If the groupings in a regexp are nested, C<$1> gets the group with the
-leftmost opening parenthesis, C<$2> the next opening parenthesis,
-etc. For example, here is a complex regexp and the matching variables
-indicated below it:
-
- /(ab(cd|ef)((gi)|j))/;
- 1 2 34
-
-so that if the regexp matched, e.g., C<$2> would contain 'cd' or 'ef'.
-For convenience, perl sets C<$+> to the highest numbered C<$1>, C<$2>,
-... that got assigned.
-
-Closely associated with the matching variables C<$1>, C<$2>, ... are
-the B<backreferences> C<\1>, C<\2>, ... . Backreferences are simply
-matching variables that can be used I<inside> a regexp. This is a
-really nice feature - what matches later in a regexp can depend on
-what matched earlier in the regexp. Suppose we wanted to look
-for doubled words in text, like 'the the'. The following regexp finds
-all 3-letter doubles with a space in between:
-
- /(\w\w\w)\s\1/;
-
-The grouping assigns a value to \1, so that the same 3 letter sequence
-is used for both parts. Here are some words with repeated parts:
-
- % simple_grep '^(\w\w\w\w|\w\w\w|\w\w|\w)\1$' /usr/dict/words
- beriberi
- booboo
- coco
- mama
- murmur
- papa
-
-The regexp has a single grouping which considers 4-letter
-combinations, then 3-letter combinations, etc. and uses C<\1> to look for
-a repeat. Although C<$1> and C<\1> represent the same thing, care should be
-taken to use matched variables C<$1>, C<$2>, ... only outside a regexp
-and backreferences C<\1>, C<\2>, ... only inside a regexp; not doing
-so may lead to surprising and/or undefined results.
-
-In addition to what was matched, Perl 5.6.0 also provides the
-positions of what was matched with the C<@-> and C<@+>
-arrays. C<$-[0]> is the position of the start of the entire match and
-C<$+[0]> is the position of the end. Similarly, C<$-[n]> is the
-position of the start of the C<$n> match and C<$+[n]> is the position
-of the end. If C<$n> is undefined, so are C<$-[n]> and C<$+[n]>. Then
-this code
-
- $x = "Mmm...donut, thought Homer";
- $x =~ /^(Mmm|Yech)\.\.\.(donut|peas)/; # matches
- foreach $expr (1..$#-) {
- print "Match $expr: '${$expr}' at position ($-[$expr],$+[$expr])\n";
- }
-
-prints
-
- Match 1: 'Mmm' at position (0,3)
- Match 2: 'donut' at position (6,11)
-
-Even if there are no groupings in a regexp, it is still possible to
-find out what exactly matched in a string. If you use them, perl
-will set C<$`> to the part of the string before the match, will set C<$&>
-to the part of the string that matched, and will set C<$'> to the part
-of the string after the match. An example:
-
- $x = "the cat caught the mouse";
- $x =~ /cat/; # $` = 'the ', $& = 'cat', $' = ' caught the mouse'
- $x =~ /the/; # $` = '', $& = 'the', $' = ' cat caught the mouse'
-
-In the second match, S<C<$` = ''> > because the regexp matched at the
-first character position in the string and stopped, it never saw the
-second 'the'. It is important to note that using C<$`> and C<$'>
-slows down regexp matching quite a bit, and C< $& > slows it down to a
-lesser extent, because if they are used in one regexp in a program,
-they are generated for <all> regexps in the program. So if raw
-performance is a goal of your application, they should be avoided.
-If you need them, use C<@-> and C<@+> instead:
-
- $` is the same as substr( $x, 0, $-[0] )
- $& is the same as substr( $x, $-[0], $+[0]-$-[0] )
- $' is the same as substr( $x, $+[0] )
-
-=head2 Matching repetitions
-
-The examples in the previous section display an annoying weakness. We
-were only matching 3-letter words, or syllables of 4 letters or
-less. We'd like to be able to match words or syllables of any length,
-without writing out tedious alternatives like
-C<\w\w\w\w|\w\w\w|\w\w|\w>.
-
-This is exactly the problem the B<quantifier> metacharacters C<?>,
-C<*>, C<+>, and C<{}> were created for. They allow us to determine the
-number of repeats of a portion of a regexp we consider to be a
-match. Quantifiers are put immediately after the character, character
-class, or grouping that we want to specify. They have the following
-meanings:
-
-=over 4
-
-=item *
-
-C<a?> = match 'a' 1 or 0 times
-
-=item *
-
-C<a*> = match 'a' 0 or more times, i.e., any number of times
-
-=item *
-
-C<a+> = match 'a' 1 or more times, i.e., at least once
-
-=item *
-
-C<a{n,m}> = match at least C<n> times, but not more than C<m>
-times.
-
-=item *
-
-C<a{n,}> = match at least C<n> or more times
-
-=item *
-
-C<a{n}> = match exactly C<n> times
-
-=back
-
-Here are some examples:
-
- /[a-z]+\s+\d*/; # match a lowercase word, at least some space, and
- # any number of digits
- /(\w+)\s+\1/; # match doubled words of arbitrary length
- /y(es)?/i; # matches 'y', 'Y', or a case-insensitive 'yes'
- $year =~ /\d{2,4}/; # make sure year is at least 2 but not more
- # than 4 digits
- $year =~ /\d{4}|\d{2}/; # better match; throw out 3 digit dates
- $year =~ /\d{2}(\d{2})?/; # same thing written differently. However,
- # this produces $1 and the other does not.
-
- % simple_grep '^(\w+)\1$' /usr/dict/words # isn't this easier?
- beriberi
- booboo
- coco
- mama
- murmur
- papa
-
-For all of these quantifiers, perl will try to match as much of the
-string as possible, while still allowing the regexp to succeed. Thus
-with C</a?.../>, perl will first try to match the regexp with the C<a>
-present; if that fails, perl will try to match the regexp without the
-C<a> present. For the quantifier C<*>, we get the following:
-
- $x = "the cat in the hat";
- $x =~ /^(.*)(cat)(.*)$/; # matches,
- # $1 = 'the '
- # $2 = 'cat'
- # $3 = ' in the hat'
-
-Which is what we might expect, the match finds the only C<cat> in the
-string and locks onto it. Consider, however, this regexp:
-
- $x =~ /^(.*)(at)(.*)$/; # matches,
- # $1 = 'the cat in the h'
- # $2 = 'at'
- # $3 = '' (0 matches)
-
-One might initially guess that perl would find the C<at> in C<cat> and
-stop there, but that wouldn't give the longest possible string to the
-first quantifier C<.*>. Instead, the first quantifier C<.*> grabs as
-much of the string as possible while still having the regexp match. In
-this example, that means having the C<at> sequence with the final C<at>
-in the string. The other important principle illustrated here is that
-when there are two or more elements in a regexp, the I<leftmost>
-quantifier, if there is one, gets to grab as much the string as
-possible, leaving the rest of the regexp to fight over scraps. Thus in
-our example, the first quantifier C<.*> grabs most of the string, while
-the second quantifier C<.*> gets the empty string. Quantifiers that
-grab as much of the string as possible are called B<maximal match> or
-B<greedy> quantifiers.
-
-When a regexp can match a string in several different ways, we can use
-the principles above to predict which way the regexp will match:
-
-=over 4
-
-=item *
-
-Principle 0: Taken as a whole, any regexp will be matched at the
-earliest possible position in the string.
-
-=item *
-
-Principle 1: In an alternation C<a|b|c...>, the leftmost alternative
-that allows a match for the whole regexp will be the one used.
-
-=item *
-
-Principle 2: The maximal matching quantifiers C<?>, C<*>, C<+> and
-C<{n,m}> will in general match as much of the string as possible while
-still allowing the whole regexp to match.
-
-=item *
-
-Principle 3: If there are two or more elements in a regexp, the
-leftmost greedy quantifier, if any, will match as much of the string
-as possible while still allowing the whole regexp to match. The next
-leftmost greedy quantifier, if any, will try to match as much of the
-string remaining available to it as possible, while still allowing the
-whole regexp to match. And so on, until all the regexp elements are
-satisfied.
-
-=back
-
-As we have seen above, Principle 0 overrides the others - the regexp
-will be matched as early as possible, with the other principles
-determining how the regexp matches at that earliest character
-position.
-
-Here is an example of these principles in action:
-
- $x = "The programming republic of Perl";
- $x =~ /^(.+)(e|r)(.*)$/; # matches,
- # $1 = 'The programming republic of Pe'
- # $2 = 'r'
- # $3 = 'l'
-
-This regexp matches at the earliest string position, C<'T'>. One
-might think that C<e>, being leftmost in the alternation, would be
-matched, but C<r> produces the longest string in the first quantifier.
-
- $x =~ /(m{1,2})(.*)$/; # matches,
- # $1 = 'mm'
- # $2 = 'ing republic of Perl'
-
-Here, The earliest possible match is at the first C<'m'> in
-C<programming>. C<m{1,2}> is the first quantifier, so it gets to match
-a maximal C<mm>.
-
- $x =~ /.*(m{1,2})(.*)$/; # matches,
- # $1 = 'm'
- # $2 = 'ing republic of Perl'
-
-Here, the regexp matches at the start of the string. The first
-quantifier C<.*> grabs as much as possible, leaving just a single
-C<'m'> for the second quantifier C<m{1,2}>.
-
- $x =~ /(.?)(m{1,2})(.*)$/; # matches,
- # $1 = 'a'
- # $2 = 'mm'
- # $3 = 'ing republic of Perl'
-
-Here, C<.?> eats its maximal one character at the earliest possible
-position in the string, C<'a'> in C<programming>, leaving C<m{1,2}>
-the opportunity to match both C<m>'s. Finally,
-
- "aXXXb" =~ /(X*)/; # matches with $1 = ''
-
-because it can match zero copies of C<'X'> at the beginning of the
-string. If you definitely want to match at least one C<'X'>, use
-C<X+>, not C<X*>.
-
-Sometimes greed is not good. At times, we would like quantifiers to
-match a I<minimal> piece of string, rather than a maximal piece. For
-this purpose, Larry Wall created the S<B<minimal match> > or
-B<non-greedy> quantifiers C<??>,C<*?>, C<+?>, and C<{}?>. These are
-the usual quantifiers with a C<?> appended to them. They have the
-following meanings:
-
-=over 4
-
-=item *
-
-C<a??> = match 'a' 0 or 1 times. Try 0 first, then 1.
-
-=item *
-
-C<a*?> = match 'a' 0 or more times, i.e., any number of times,
-but as few times as possible
-
-=item *
-
-C<a+?> = match 'a' 1 or more times, i.e., at least once, but
-as few times as possible
-
-=item *
-
-C<a{n,m}?> = match at least C<n> times, not more than C<m>
-times, as few times as possible
-
-=item *
-
-C<a{n,}?> = match at least C<n> times, but as few times as
-possible
-
-=item *
-
-C<a{n}?> = match exactly C<n> times. Because we match exactly
-C<n> times, C<a{n}?> is equivalent to C<a{n}> and is just there for
-notational consistency.
-
-=back
-
-Let's look at the example above, but with minimal quantifiers:
-
- $x = "The programming republic of Perl";
- $x =~ /^(.+?)(e|r)(.*)$/; # matches,
- # $1 = 'Th'
- # $2 = 'e'
- # $3 = ' programming republic of Perl'
-
-The minimal string that will allow both the start of the string C<^>
-and the alternation to match is C<Th>, with the alternation C<e|r>
-matching C<e>. The second quantifier C<.*> is free to gobble up the
-rest of the string.
-
- $x =~ /(m{1,2}?)(.*?)$/; # matches,
- # $1 = 'm'
- # $2 = 'ming republic of Perl'
-
-The first string position that this regexp can match is at the first
-C<'m'> in C<programming>. At this position, the minimal C<m{1,2}?>
-matches just one C<'m'>. Although the second quantifier C<.*?> would
-prefer to match no characters, it is constrained by the end-of-string
-anchor C<$> to match the rest of the string.
-
- $x =~ /(.*?)(m{1,2}?)(.*)$/; # matches,
- # $1 = 'The progra'
- # $2 = 'm'
- # $3 = 'ming republic of Perl'
-
-In this regexp, you might expect the first minimal quantifier C<.*?>
-to match the empty string, because it is not constrained by a C<^>
-anchor to match the beginning of the word. Principle 0 applies here,
-however. Because it is possible for the whole regexp to match at the
-start of the string, it I<will> match at the start of the string. Thus
-the first quantifier has to match everything up to the first C<m>. The
-second minimal quantifier matches just one C<m> and the third
-quantifier matches the rest of the string.
-
- $x =~ /(.??)(m{1,2})(.*)$/; # matches,
- # $1 = 'a'
- # $2 = 'mm'
- # $3 = 'ing republic of Perl'
-
-Just as in the previous regexp, the first quantifier C<.??> can match
-earliest at position C<'a'>, so it does. The second quantifier is
-greedy, so it matches C<mm>, and the third matches the rest of the
-string.
-
-We can modify principle 3 above to take into account non-greedy
-quantifiers:
-
-=over 4
-
-=item *
-
-Principle 3: If there are two or more elements in a regexp, the
-leftmost greedy (non-greedy) quantifier, if any, will match as much
-(little) of the string as possible while still allowing the whole
-regexp to match. The next leftmost greedy (non-greedy) quantifier, if
-any, will try to match as much (little) of the string remaining
-available to it as possible, while still allowing the whole regexp to
-match. And so on, until all the regexp elements are satisfied.
-
-=back
-
-Just like alternation, quantifiers are also susceptible to
-backtracking. Here is a step-by-step analysis of the example
-
- $x = "the cat in the hat";
- $x =~ /^(.*)(at)(.*)$/; # matches,
- # $1 = 'the cat in the h'
- # $2 = 'at'
- # $3 = '' (0 matches)
-
-=over 4
-
-=item 0
-
-Start with the first letter in the string 't'.
-
-=item 1
-
-The first quantifier '.*' starts out by matching the whole
-string 'the cat in the hat'.
-
-=item 2
-
-'a' in the regexp element 'at' doesn't match the end of the
-string. Backtrack one character.
-
-=item 3
-
-'a' in the regexp element 'at' still doesn't match the last
-letter of the string 't', so backtrack one more character.
-
-=item 4
-
-Now we can match the 'a' and the 't'.
-
-=item 5
-
-Move on to the third element '.*'. Since we are at the end of
-the string and '.*' can match 0 times, assign it the empty string.
-
-=item 6
-
-We are done!
-
-=back
-
-Most of the time, all this moving forward and backtracking happens
-quickly and searching is fast. There are some pathological regexps,
-however, whose execution time exponentially grows with the size of the
-string. A typical structure that blows up in your face is of the form
-
- /(a|b+)*/;
-
-The problem is the nested indeterminate quantifiers. There are many
-different ways of partitioning a string of length n between the C<+>
-and C<*>: one repetition with C<b+> of length n, two repetitions with
-the first C<b+> length k and the second with length n-k, m repetitions
-whose bits add up to length n, etc. In fact there are an exponential
-number of ways to partition a string as a function of length. A
-regexp may get lucky and match early in the process, but if there is
-no match, perl will try I<every> possibility before giving up. So be
-careful with nested C<*>'s, C<{n,m}>'s, and C<+>'s. The book
-I<Mastering regular expressions> by Jeffrey Friedl gives a wonderful
-discussion of this and other efficiency issues.
-
-=head2 Building a regexp
-
-At this point, we have all the basic regexp concepts covered, so let's
-give a more involved example of a regular expression. We will build a
-regexp that matches numbers.
-
-The first task in building a regexp is to decide what we want to match
-and what we want to exclude. In our case, we want to match both
-integers and floating point numbers and we want to reject any string
-that isn't a number.
-
-The next task is to break the problem down into smaller problems that
-are easily converted into a regexp.
-
-The simplest case is integers. These consist of a sequence of digits,
-with an optional sign in front. The digits we can represent with
-C<\d+> and the sign can be matched with C<[+-]>. Thus the integer
-regexp is
-
- /[+-]?\d+/; # matches integers
-
-A floating point number potentially has a sign, an integral part, a
-decimal point, a fractional part, and an exponent. One or more of these
-parts is optional, so we need to check out the different
-possibilities. Floating point numbers which are in proper form include
-123., 0.345, .34, -1e6, and 25.4E-72. As with integers, the sign out
-front is completely optional and can be matched by C<[+-]?>. We can
-see that if there is no exponent, floating point numbers must have a
-decimal point, otherwise they are integers. We might be tempted to
-model these with C<\d*\.\d*>, but this would also match just a single
-decimal point, which is not a number. So the three cases of floating
-point number sans exponent are
-
- /[+-]?\d+\./; # 1., 321., etc.
- /[+-]?\.\d+/; # .1, .234, etc.
- /[+-]?\d+\.\d+/; # 1.0, 30.56, etc.
-
-These can be combined into a single regexp with a three-way alternation:
-
- /[+-]?(\d+\.\d+|\d+\.|\.\d+)/; # floating point, no exponent
-
-In this alternation, it is important to put C<'\d+\.\d+'> before
-C<'\d+\.'>. If C<'\d+\.'> were first, the regexp would happily match that
-and ignore the fractional part of the number.
-
-Now consider floating point numbers with exponents. The key
-observation here is that I<both> integers and numbers with decimal
-points are allowed in front of an exponent. Then exponents, like the
-overall sign, are independent of whether we are matching numbers with
-or without decimal points, and can be 'decoupled' from the
-mantissa. The overall form of the regexp now becomes clear:
-
- /^(optional sign)(integer | f.p. mantissa)(optional exponent)$/;
-
-The exponent is an C<e> or C<E>, followed by an integer. So the
-exponent regexp is
-
- /[eE][+-]?\d+/; # exponent
-
-Putting all the parts together, we get a regexp that matches numbers:
-
- /^[+-]?(\d+\.\d+|\d+\.|\.\d+|\d+)([eE][+-]?\d+)?$/; # Ta da!
-
-Long regexps like this may impress your friends, but can be hard to
-decipher. In complex situations like this, the C<//x> modifier for a
-match is invaluable. It allows one to put nearly arbitrary whitespace
-and comments into a regexp without affecting their meaning. Using it,
-we can rewrite our 'extended' regexp in the more pleasing form
-
- /^
- [+-]? # first, match an optional sign
- ( # then match integers or f.p. mantissas:
- \d+\.\d+ # mantissa of the form a.b
- |\d+\. # mantissa of the form a.
- |\.\d+ # mantissa of the form .b
- |\d+ # integer of the form a
- )
- ([eE][+-]?\d+)? # finally, optionally match an exponent
- $/x;
-
-If whitespace is mostly irrelevant, how does one include space
-characters in an extended regexp? The answer is to backslash it
-S<C<'\ '> > or put it in a character class S<C<[ ]> >. The same thing
-goes for pound signs, use C<\#> or C<[#]>. For instance, Perl allows
-a space between the sign and the mantissa/integer, and we could add
-this to our regexp as follows:
-
- /^
- [+-]?\ * # first, match an optional sign *and space*
- ( # then match integers or f.p. mantissas:
- \d+\.\d+ # mantissa of the form a.b
- |\d+\. # mantissa of the form a.
- |\.\d+ # mantissa of the form .b
- |\d+ # integer of the form a
- )
- ([eE][+-]?\d+)? # finally, optionally match an exponent
- $/x;
-
-In this form, it is easier to see a way to simplify the
-alternation. Alternatives 1, 2, and 4 all start with C<\d+>, so it
-could be factored out:
-
- /^
- [+-]?\ * # first, match an optional sign
- ( # then match integers or f.p. mantissas:
- \d+ # start out with a ...
- (
- \.\d* # mantissa of the form a.b or a.
- )? # ? takes care of integers of the form a
- |\.\d+ # mantissa of the form .b
- )
- ([eE][+-]?\d+)? # finally, optionally match an exponent
- $/x;
-
-or written in the compact form,
-
- /^[+-]?\ *(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;
-
-This is our final regexp. To recap, we built a regexp by
-
-=over 4
-
-=item *
-
-specifying the task in detail,
-
-=item *
-
-breaking down the problem into smaller parts,
-
-=item *
-
-translating the small parts into regexps,
-
-=item *
-
-combining the regexps,
-
-=item *
-
-and optimizing the final combined regexp.
-
-=back
-
-These are also the typical steps involved in writing a computer
-program. This makes perfect sense, because regular expressions are
-essentially programs written a little computer language that specifies
-patterns.
-
-=head2 Using regular expressions in Perl
-
-The last topic of Part 1 briefly covers how regexps are used in Perl
-programs. Where do they fit into Perl syntax?
-
-We have already introduced the matching operator in its default
-C</regexp/> and arbitrary delimiter C<m!regexp!> forms. We have used
-the binding operator C<=~> and its negation C<!~> to test for string
-matches. Associated with the matching operator, we have discussed the
-single line C<//s>, multi-line C<//m>, case-insensitive C<//i> and
-extended C<//x> modifiers.
-
-There are a few more things you might want to know about matching
-operators. First, we pointed out earlier that variables in regexps are
-substituted before the regexp is evaluated:
-
- $pattern = 'Seuss';
- while (<>) {
- print if /$pattern/;
- }
-
-This will print any lines containing the word C<Seuss>. It is not as
-efficient as it could be, however, because perl has to re-evaluate
-C<$pattern> each time through the loop. If C<$pattern> won't be
-changing over the lifetime of the script, we can add the C<//o>
-modifier, which directs perl to only perform variable substitutions
-once:
-
- #!/usr/bin/perl
- # Improved simple_grep
- $regexp = shift;
- while (<>) {
- print if /$regexp/o; # a good deal faster
- }
-
-If you change C<$pattern> after the first substitution happens, perl
-will ignore it. If you don't want any substitutions at all, use the
-special delimiter C<m''>:
-
- $pattern = 'Seuss';
- while (<>) {
- print if m'$pattern'; # matches '$pattern', not 'Seuss'
- }
-
-C<m''> acts like single quotes on a regexp; all other C<m> delimiters
-act like double quotes. If the regexp evaluates to the empty string,
-the regexp in the I<last successful match> is used instead. So we have
-
- "dog" =~ /d/; # 'd' matches
- "dogbert =~ //; # this matches the 'd' regexp used before
-
-The final two modifiers C<//g> and C<//c> concern multiple matches.
-The modifier C<//g> stands for global matching and allows the the
-matching operator to match within a string as many times as possible.
-In scalar context, successive invocations against a string will have
-`C<//g> jump from match to match, keeping track of position in the
-string as it goes along. You can get or set the position with the
-C<pos()> function.
-
-The use of C<//g> is shown in the following example. Suppose we have
-a string that consists of words separated by spaces. If we know how
-many words there are in advance, we could extract the words using
-groupings:
-
- $x = "cat dog house"; # 3 words
- $x =~ /^\s*(\w+)\s+(\w+)\s+(\w+)\s*$/; # matches,
- # $1 = 'cat'
- # $2 = 'dog'
- # $3 = 'house'
-
-But what if we had an indeterminate number of words? This is the sort
-of task C<//g> was made for. To extract all words, form the simple
-regexp C<(\w+)> and loop over all matches with C</(\w+)/g>:
-
- while ($x =~ /(\w+)/g) {
- print "Word is $1, ends at position ", pos $x, "\n";
- }
-
-prints
-
- Word is cat, ends at position 3
- Word is dog, ends at position 7
- Word is house, ends at position 13
-
-A failed match or changing the target string resets the position. If
-you don't want the position reset after failure to match, add the
-C<//c>, as in C</regexp/gc>. The current position in the string is
-associated with the string, not the regexp. This means that different
-strings have different positions and their respective positions can be
-set or read independently.
-
-In list context, C<//g> returns a list of matched groupings, or if
-there are no groupings, a list of matches to the whole regexp. So if
-we wanted just the words, we could use
-
- @words = ($x =~ /(\w+)/g); # matches,
- # $word[0] = 'cat'
- # $word[1] = 'dog'
- # $word[2] = 'house'
-
-Closely associated with the C<//g> modifier is the C<\G> anchor. The
-C<\G> anchor matches at the point where the previous C<//g> match left
-off. C<\G> allows us to easily do context-sensitive matching:
-
- $metric = 1; # use metric units
- ...
- $x = <FILE>; # read in measurement
- $x =~ /^([+-]?\d+)\s*/g; # get magnitude
- $weight = $1;
- if ($metric) { # error checking
- print "Units error!" unless $x =~ /\Gkg\./g;
- }
- else {
- print "Units error!" unless $x =~ /\Glbs\./g;
- }
- $x =~ /\G\s+(widget|sprocket)/g; # continue processing
-
-The combination of C<//g> and C<\G> allows us to process the string a
-bit at a time and use arbitrary Perl logic to decide what to do next.
-
-C<\G> is also invaluable in processing fixed length records with
-regexps. Suppose we have a snippet of coding region DNA, encoded as
-base pair letters C<ATCGTTGAAT...> and we want to find all the stop
-codons C<TGA>. In a coding region, codons are 3-letter sequences, so
-we can think of the DNA snippet as a sequence of 3-letter records. The
-naive regexp
-
- # expanded, this is "ATC GTT GAA TGC AAA TGA CAT GAC"
- $dna = "ATCGTTGAATGCAAATGACATGAC";
- $dna =~ /TGA/;
-
-doesn't work; it may match an C<TGA>, but there is no guarantee that
-the match is aligned with codon boundaries, e.g., the substring
-S<C<GTT GAA> > gives a match. A better solution is
-
- while ($dna =~ /(\w\w\w)*?TGA/g) { # note the minimal *?
- print "Got a TGA stop codon at position ", pos $dna, "\n";
- }
-
-which prints
-
- Got a TGA stop codon at position 18
- Got a TGA stop codon at position 23
-
-Position 18 is good, but position 23 is bogus. What happened?
-
-The answer is that our regexp works well until we get past the last
-real match. Then the regexp will fail to match a synchronized C<TGA>
-and start stepping ahead one character position at a time, not what we
-want. The solution is to use C<\G> to anchor the match to the codon
-alignment:
-
- while ($dna =~ /\G(\w\w\w)*?TGA/g) {
- print "Got a TGA stop codon at position ", pos $dna, "\n";
- }
-
-This prints
-
- Got a TGA stop codon at position 18
-
-which is the correct answer. This example illustrates that it is
-important not only to match what is desired, but to reject what is not
-desired.
-
-B<search and replace>
-
-Regular expressions also play a big role in B<search and replace>
-operations in Perl. Search and replace is accomplished with the
-C<s///> operator. The general form is
-C<s/regexp/replacement/modifiers>, with everything we know about
-regexps and modifiers applying in this case as well. The
-C<replacement> is a Perl double quoted string that replaces in the
-string whatever is matched with the C<regexp>. The operator C<=~> is
-also used here to associate a string with C<s///>. If matching
-against C<$_>, the S<C<$_ =~> > can be dropped. If there is a match,
-C<s///> returns the number of substitutions made, otherwise it returns
-false. Here are a few examples:
-
- $x = "Time to feed the cat!";
- $x =~ s/cat/hacker/; # $x contains "Time to feed the hacker!"
- if ($x =~ s/^(Time.*hacker)!$/$1 now!/) {
- $more_insistent = 1;
- }
- $y = "'quoted words'";
- $y =~ s/^'(.*)'$/$1/; # strip single quotes,
- # $y contains "quoted words"
-
-In the last example, the whole string was matched, but only the part
-inside the single quotes was grouped. With the C<s///> operator, the
-matched variables C<$1>, C<$2>, etc. are immediately available for use
-in the replacement expression, so we use C<$1> to replace the quoted
-string with just what was quoted. With the global modifier, C<s///g>
-will search and replace all occurrences of the regexp in the string:
-
- $x = "I batted 4 for 4";
- $x =~ s/4/four/; # doesn't do it all:
- # $x contains "I batted four for 4"
- $x = "I batted 4 for 4";
- $x =~ s/4/four/g; # does it all:
- # $x contains "I batted four for four"
-
-If you prefer 'regex' over 'regexp' in this tutorial, you could use
-the following program to replace it:
-
- % cat > simple_replace
- #!/usr/bin/perl
- $regexp = shift;
- $replacement = shift;
- while (<>) {
- s/$regexp/$replacement/go;
- print;
- }
- ^D
-
- % simple_replace regexp regex perlretut.pod
-
-In C<simple_replace> we used the C<s///g> modifier to replace all
-occurrences of the regexp on each line and the C<s///o> modifier to
-compile the regexp only once. As with C<simple_grep>, both the
-C<print> and the C<s/$regexp/$replacement/go> use C<$_> implicitly.
-
-A modifier available specifically to search and replace is the
-C<s///e> evaluation modifier. C<s///e> wraps an C<eval{...}> around
-the replacement string and the evaluated result is substituted for the
-matched substring. C<s///e> is useful if you need to do a bit of
-computation in the process of replacing text. This example counts
-character frequencies in a line:
-
- $x = "Bill the cat";
- $x =~ s/(.)/$chars{$1}++;$1/eg; # final $1 replaces char with itself
- print "frequency of '$_' is $chars{$_}\n"
- foreach (sort {$chars{$b} <=> $chars{$a}} keys %chars);
-
-This prints
-
- frequency of ' ' is 2
- frequency of 't' is 2
- frequency of 'l' is 2
- frequency of 'B' is 1
- frequency of 'c' is 1
- frequency of 'e' is 1
- frequency of 'h' is 1
- frequency of 'i' is 1
- frequency of 'a' is 1
-
-As with the match C<m//> operator, C<s///> can use other delimiters,
-such as C<s!!!> and C<s{}{}>, and even C<s{}//>. If single quotes are
-used C<s'''>, then the regexp and replacement are treated as single
-quoted strings and there are no substitutions. C<s///> in list context
-returns the same thing as in scalar context, i.e., the number of
-matches.
-
-B<The split operator>
-
-The B<C<split> > function can also optionally use a matching operator
-C<m//> to split a string. C<split /regexp/, string, limit> splits
-C<string> into a list of substrings and returns that list. The regexp
-is used to match the character sequence that the C<string> is split
-with respect to. The C<limit>, if present, constrains splitting into
-no more than C<limit> number of strings. For example, to split a
-string into words, use
-
- $x = "Calvin and Hobbes";
- @words = split /\s+/, $x; # $word[0] = 'Calvin'
- # $word[1] = 'and'
- # $word[2] = 'Hobbes'
-
-If the empty regexp C<//> is used, the regexp always matches and
-the string is split into individual characters. If the regexp has
-groupings, then list produced contains the matched substrings from the
-groupings as well. For instance,
-
- $x = "/usr/bin/perl";
- @dirs = split m!/!, $x; # $dirs[0] = ''
- # $dirs[1] = 'usr'
- # $dirs[2] = 'bin'
- # $dirs[3] = 'perl'
- @parts = split m!(/)!, $x; # $parts[0] = ''
- # $parts[1] = '/'
- # $parts[2] = 'usr'
- # $parts[3] = '/'
- # $parts[4] = 'bin'
- # $parts[5] = '/'
- # $parts[6] = 'perl'
-
-Since the first character of $x matched the regexp, C<split> prepended
-an empty initial element to the list.
-
-If you have read this far, congratulations! You now have all the basic
-tools needed to use regular expressions to solve a wide range of text
-processing problems. If this is your first time through the tutorial,
-why not stop here and play around with regexps a while... S<Part 2>
-concerns the more esoteric aspects of regular expressions and those
-concepts certainly aren't needed right at the start.
-
-=head1 Part 2: Power tools
-
-OK, you know the basics of regexps and you want to know more. If
-matching regular expressions is analogous to a walk in the woods, then
-the tools discussed in Part 1 are analogous to topo maps and a
-compass, basic tools we use all the time. Most of the tools in part 2
-are are analogous to flare guns and satellite phones. They aren't used
-too often on a hike, but when we are stuck, they can be invaluable.
-
-What follows are the more advanced, less used, or sometimes esoteric
-capabilities of perl regexps. In Part 2, we will assume you are
-comfortable with the basics and concentrate on the new features.
-
-=head2 More on characters, strings, and character classes
-
-There are a number of escape sequences and character classes that we
-haven't covered yet.
-
-There are several escape sequences that convert characters or strings
-between upper and lower case. C<\l> and C<\u> convert the next
-character to lower or upper case, respectively:
-
- $x = "perl";
- $string =~ /\u$x/; # matches 'Perl' in $string
- $x = "M(rs?|s)\\."; # note the double backslash
- $string =~ /\l$x/; # matches 'mr.', 'mrs.', and 'ms.',
-
-C<\L> and C<\U> converts a whole substring, delimited by C<\L> or
-C<\U> and C<\E>, to lower or upper case:
-
- $x = "This word is in lower case:\L SHOUT\E";
- $x =~ /shout/; # matches
- $x = "I STILL KEYPUNCH CARDS FOR MY 360"
- $x =~ /\Ukeypunch/; # matches punch card string
-
-If there is no C<\E>, case is converted until the end of the
-string. The regexps C<\L\u$word> or C<\u\L$word> convert the first
-character of C<$word> to uppercase and the rest of the characters to
-lowercase.
-
-Control characters can be escaped with C<\c>, so that a control-Z
-character would be matched with C<\cZ>. The escape sequence
-C<\Q>...C<\E> quotes, or protects most non-alphabetic characters. For
-instance,
-
- $x = "\QThat !^*&%~& cat!";
- $x =~ /\Q!^*&%~&\E/; # check for rough language
-
-It does not protect C<$> or C<@>, so that variables can still be
-substituted.
-
-With the advent of 5.6.0, perl regexps can handle more than just the
-standard ASCII character set. Perl now supports B<Unicode>, a standard
-for encoding the character sets from many of the world's written
-languages. Unicode does this by allowing characters to be more than
-one byte wide. Perl uses the UTF-8 encoding, in which ASCII characters
-are still encoded as one byte, but characters greater than C<chr(127)>
-may be stored as two or more bytes.
-
-What does this mean for regexps? Well, regexp users don't need to know
-much about perl's internal representation of strings. But they do need
-to know 1) how to represent Unicode characters in a regexp and 2) when
-a matching operation will treat the string to be searched as a
-sequence of bytes (the old way) or as a sequence of Unicode characters
-(the new way). The answer to 1) is that Unicode characters greater
-than C<chr(127)> may be represented using the C<\x{hex}> notation,
-with C<hex> a hexadecimal integer:
-
- use utf8; # We will be doing Unicode processing
- /\x{263a}/; # match a Unicode smiley face :)
-
-Unicode characters in the range of 128-255 use two hexadecimal digits
-with braces: C<\x{ab}>. Note that this is different than C<\xab>,
-which is just a hexadecimal byte with no Unicode
-significance.
-
-Figuring out the hexadecimal sequence of a Unicode character you want
-or deciphering someone else's hexadecimal Unicode regexp is about as
-much fun as programming in machine code. So another way to specify
-Unicode characters is to use the S<B<named character> > escape
-sequence C<\N{name}>. C<name> is a name for the Unicode character, as
-specified in the Unicode standard. For instance, if we wanted to
-represent or match the astrological sign for the planet Mercury, we
-could use
-
- use utf8; # We will be doing Unicode processing
- use charnames ":full"; # use named chars with Unicode full names
- $x = "abc\N{MERCURY}def";
- $x =~ /\N{MERCURY}/; # matches
-
-One can also use short names or restrict names to a certain alphabet:
-
- use utf8; # We will be doing Unicode processing
-
- use charnames ':full';
- print "\N{GREEK SMALL LETTER SIGMA} is called sigma.\n";
-
- use charnames ":short";
- print "\N{greek:Sigma} is an upper-case sigma.\n";
-
- use charnames qw(greek);
- print "\N{sigma} is Greek sigma\n";
-
-A list of full names is found in the file Names.txt in the
-lib/perl5/5.6.0/unicode directory.
-
-The answer to requirement 2), as of 5.6.0, is that if a regexp
-contains Unicode characters, the string is searched as a sequence of
-Unicode characters. Otherwise, the string is searched as a sequence of
-bytes. If the string is being searched as a sequence of Unicode
-characters, but matching a single byte is required, we can use the C<\C>
-escape sequence. C<\C> is a character class akin to C<.> except that
-it matches I<any> byte 0-255. So
-
- use utf8; # We will be doing Unicode processing
- use charnames ":full"; # use named chars with Unicode full names
- $x = "a";
- $x =~ /\C/; # matches 'a', eats one byte
- $x = "";
- $x =~ /\C/; # doesn't match, no bytes to match
- $x = "\N{MERCURY}"; # two-byte Unicode character
- $x =~ /\C/; # matches, but dangerous!
-
-The last regexp matches, but is dangerous because the string
-I<character> position is no longer synchronized to the string I<byte>
-position. This generates the warning 'Malformed UTF-8
-character'. C<\C> is best used for matching the binary data in strings
-with binary data intermixed with Unicode characters.
-
-Let us now discuss the rest of the character classes. Just as with
-Unicode characters, there are named Unicode character classes
-represented by the C<\p{name}> escape sequence. Closely associated is
-the C<\P{name}> character class, which is the negation of the
-C<\p{name}> class. For example, to match lower and uppercase
-characters,
-
- use utf8; # We will be doing Unicode processing
- use charnames ":full"; # use named chars with Unicode full names
- $x = "BOB";
- $x =~ /^\p{IsUpper}/; # matches, uppercase char class
- $x =~ /^\P{IsUpper}/; # doesn't match, char class sans uppercase
- $x =~ /^\p{IsLower}/; # doesn't match, lowercase char class
- $x =~ /^\P{IsLower}/; # matches, char class sans lowercase
-
-Here is the association between some Perl named classes and the
-traditional Unicode classes:
-
- Perl class name Unicode class name or regular expression
-
- IsAlpha /^[LM]/
- IsAlnum /^[LMN]/
- IsASCII $code <= 127
- IsCntrl /^C/
- IsBlank $code =~ /^(0020|0009)$/ || /^Z[^lp]/
- IsDigit Nd
- IsGraph /^([LMNPS]|Co)/
- IsLower Ll
- IsPrint /^([LMNPS]|Co|Zs)/
- IsPunct /^P/
- IsSpace /^Z/ || ($code =~ /^(0009|000A|000B|000C|000D)$/
- IsSpacePerl /^Z/ || ($code =~ /^(0009|000A|000C|000D)$/
- IsUpper /^L[ut]/
- IsWord /^[LMN]/ || $code eq "005F"
- IsXDigit $code =~ /^00(3[0-9]|[46][1-6])$/
-
-You can also use the official Unicode class names with the C<\p> and
-C<\P>, like C<\p{L}> for Unicode 'letters', or C<\p{Lu}> for uppercase
-letters, or C<\P{Nd}> for non-digits. If a C<name> is just one
-letter, the braces can be dropped. For instance, C<\pM> is the
-character class of Unicode 'marks'.
-
-C<\X> is an abbreviation for a character class sequence that includes
-the Unicode 'combining character sequences'. A 'combining character
-sequence' is a base character followed by any number of combining
-characters. An example of a combining character is an accent. Using
-the Unicode full names, e.g., S<C<A + COMBINING RING> > is a combining
-character sequence with base character C<A> and combining character
-S<C<COMBINING RING> >, which translates in Danish to A with the circle
-atop it, as in the word Angstrom. C<\X> is equivalent to C<\PM\pM*}>,
-i.e., a non-mark followed by one or more marks.
-
-As if all those classes weren't enough, Perl also defines POSIX style
-character classes. These have the form C<[:name:]>, with C<name> the
-name of the POSIX class. The POSIX classes are C<alpha>, C<alnum>,
-C<ascii>, C<cntrl>, C<digit>, C<graph>, C<lower>, C<print>, C<punct>,
-C<space>, C<upper>, and C<xdigit>, and two extensions, C<word> (a Perl
-extension to match C<\w>), and C<blank> (a GNU extension). If C<utf8>
-is being used, then these classes are defined the same as their
-corresponding perl Unicode classes: C<[:upper:]> is the same as
-C<\p{IsUpper}>, etc. The POSIX character classes, however, don't
-require using C<utf8>. The C<[:digit:]>, C<[:word:]>, and
-C<[:space:]> correspond to the familiar C<\d>, C<\w>, and C<\s>
-character classes. To negate a POSIX class, put a C<^> in front of
-the name, so that, e.g., C<[:^digit:]> corresponds to C<\D> and under
-C<utf8>, C<\P{IsDigit}>. The Unicode and POSIX character classes can
-be used just like C<\d>, both inside and outside of character classes:
-
- /\s+[abc[:digit:]xyz]\s*/; # match a,b,c,x,y,z, or a digit
- /^=item\s[:digit:]/; # match '=item',
- # followed by a space and a digit
- use utf8;
- use charnames ":full";
- /\s+[abc\p{IsDigit}xyz]\s+/; # match a,b,c,x,y,z, or a digit
- /^=item\s\p{IsDigit}/; # match '=item',
- # followed by a space and a digit
-
-Whew! That is all the rest of the characters and character classes.
-
-=head2 Compiling and saving regular expressions
-
-In Part 1 we discussed the C<//o> modifier, which compiles a regexp
-just once. This suggests that a compiled regexp is some data structure
-that can be stored once and used again and again. The regexp quote
-C<qr//> does exactly that: C<qr/string/> compiles the C<string> as a
-regexp and transforms the result into a form that can be assigned to a
-variable:
-
- $reg = qr/foo+bar?/; # reg contains a compiled regexp
-
-Then C<$reg> can be used as a regexp:
-
- $x = "fooooba";
- $x =~ $reg; # matches, just like /foo+bar?/
- $x =~ /$reg/; # same thing, alternate form
-
-C<$reg> can also be interpolated into a larger regexp:
-
- $x =~ /(abc)?$reg/; # still matches
-
-As with the matching operator, the regexp quote can use different
-delimiters, e.g., C<qr!!>, C<qr{}> and C<qr~~>. The single quote
-delimiters C<qr''> prevent any interpolation from taking place.
-
-Pre-compiled regexps are useful for creating dynamic matches that
-don't need to be recompiled each time they are encountered. Using
-pre-compiled regexps, C<simple_grep> program can be expanded into a
-program that matches multiple patterns:
-
- % cat > multi_grep
- #!/usr/bin/perl
- # multi_grep - match any of <number> regexps
- # usage: multi_grep <number> regexp1 regexp2 ... file1 file2 ...
-
- $number = shift;
- $regexp[$_] = shift foreach (0..$number-1);
- @compiled = map qr/$_/, @regexp;
- while ($line = <>) {
- foreach $pattern (@compiled) {
- if ($line =~ /$pattern/) {
- print $line;
- last; # we matched, so move onto the next line
- }
- }
- }
- ^D
-
- % multi_grep 2 last for multi_grep
- $regexp[$_] = shift foreach (0..$number-1);
- foreach $pattern (@compiled) {
- last;
-
-Storing pre-compiled regexps in an array C<@compiled> allows us to
-simply loop through the regexps without any recompilation, thus gaining
-flexibility without sacrificing speed.
-
-=head2 Embedding comments and modifiers in a regular expression
-
-Starting with this section, we will be discussing Perl's set of
-B<extended patterns>. These are extensions to the traditional regular
-expression syntax that provide powerful new tools for pattern
-matching. We have already seen extensions in the form of the minimal
-matching constructs C<??>, C<*?>, C<+?>, C<{n,m}?>, and C<{n,}?>. The
-rest of the extensions below have the form C<(?char...)>, where the
-C<char> is a character that determines the type of extension.
-
-The first extension is an embedded comment C<(?#text)>. This embeds a
-comment into the regular expression without affecting its meaning. The
-comment should not have any closing parentheses in the text. An
-example is
-
- /(?# Match an integer:)[+-]?\d+/;
-
-This style of commenting has been largely superseded by the raw,
-freeform commenting that is allowed with the C<//x> modifier.
-
-The modifiers C<//i>, C<//m>, C<//s>, and C<//x> can also embedded in
-a regexp using C<(?i)>, C<(?m)>, C<(?s)>, and C<(?x)>. For instance,
-
- /(?i)yes/; # match 'yes' case insensitively
- /yes/i; # same thing
- /(?x)( # freeform version of an integer regexp
- [+-]? # match an optional sign
- \d+ # match a sequence of digits
- )
- /x;
-
-Embedded modifiers can have two important advantages over the usual
-modifiers. Embedded modifiers allow a custom set of modifiers to
-I<each> regexp pattern. This is great for matching an array of regexps
-that must have different modifiers:
-
- $pattern[0] = '(?i)doctor';
- $pattern[1] = 'Johnson';
- ...
- while (<>) {
- foreach $patt (@pattern) {
- print if /$patt/;
- }
- }
-
-The second advantage is that embedded modifiers only affect the regexp
-inside the group the embedded modifier is contained in. So grouping
-can be used to localize the modifier's effects:
-
- /Answer: ((?i)yes)/; # matches 'Answer: yes', 'Answer: YES', etc.
-
-Embedded modifiers can also turn off any modifiers already present
-by using, e.g., C<(?-i)>. Modifiers can also be combined into
-a single expression, e.g., C<(?s-i)> turns on single line mode and
-turns off case insensitivity.
-
-=head2 Non-capturing groupings
-
-We noted in Part 1 that groupings C<()> had two distinct functions: 1)
-group regexp elements together as a single unit, and 2) extract, or
-capture, substrings that matched the regexp in the
-grouping. Non-capturing groupings, denoted by C<(?:regexp)>, allow the
-regexp to be treated as a single unit, but don't extract substrings or
-set matching variables C<$1>, etc. Both capturing and non-capturing
-groupings are allowed to co-exist in the same regexp. Because there is
-no extraction, non-capturing groupings are faster than capturing
-groupings. Non-capturing groupings are also handy for choosing exactly
-which parts of a regexp are to be extracted to matching variables:
-
- # match a number, $1-$4 are set, but we only want $1
- /([+-]?\ *(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?)/;
-
- # match a number faster , only $1 is set
- /([+-]?\ *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?)/;
-
- # match a number, get $1 = whole number, $2 = exponent
- /([+-]?\ *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE]([+-]?\d+))?)/;
-
-Non-capturing groupings are also useful for removing nuisance
-elements gathered from a split operation:
-
- $x = '12a34b5';
- @num = split /(a|b)/, $x; # @num = ('12','a','34','b','5')
- @num = split /(?:a|b)/, $x; # @num = ('12','34','5')
-
-Non-capturing groupings may also have embedded modifiers:
-C<(?i-m:regexp)> is a non-capturing grouping that matches C<regexp>
-case insensitively and turns off multi-line mode.
-
-=head2 Looking ahead and looking behind
-
-This section concerns the lookahead and lookbehind assertions. First,
-a little background.
-
-In Perl regular expressions, most regexp elements 'eat up' a certain
-amount of string when they match. For instance, the regexp element
-C<[abc}]> eats up one character of the string when it matches, in the
-sense that perl moves to the next character position in the string
-after the match. There are some elements, however, that don't eat up
-characters (advance the character position) if they match. The examples
-we have seen so far are the anchors. The anchor C<^> matches the
-beginning of the line, but doesn't eat any characters. Similarly, the
-word boundary anchor C<\b> matches, e.g., if the character to the left
-is a word character and the character to the right is a non-word
-character, but it doesn't eat up any characters itself. Anchors are
-examples of 'zero-width assertions'. Zero-width, because they consume
-no characters, and assertions, because they test some property of the
-string. In the context of our walk in the woods analogy to regexp
-matching, most regexp elements move us along a trail, but anchors have
-us stop a moment and check our surroundings. If the local environment
-checks out, we can proceed forward. But if the local environment
-doesn't satisfy us, we must backtrack.
-
-Checking the environment entails either looking ahead on the trail,
-looking behind, or both. C<^> looks behind, to see that there are no
-characters before. C<$> looks ahead, to see that there are no
-characters after. C<\b> looks both ahead and behind, to see if the
-characters on either side differ in their 'word'-ness.
-
-The lookahead and lookbehind assertions are generalizations of the
-anchor concept. Lookahead and lookbehind are zero-width assertions
-that let us specify which characters we want to test for. The
-lookahead assertion is denoted by C<(?=regexp)> and the lookbehind
-assertion is denoted by C<< (?<=fixed-regexp) >>. Some examples are
-
- $x = "I catch the housecat 'Tom-cat' with catnip";
- $x =~ /cat(?=\s+)/; # matches 'cat' in 'housecat'
- @catwords = ($x =~ /(?<=\s)cat\w+/g); # matches,
- # $catwords[0] = 'catch'
- # $catwords[1] = 'catnip'
- $x =~ /\bcat\b/; # matches 'cat' in 'Tom-cat'
- $x =~ /(?<=\s)cat(?=\s)/; # doesn't match; no isolated 'cat' in
- # middle of $x
-
-Note that the parentheses in C<(?=regexp)> and C<< (?<=regexp) >> are
-non-capturing, since these are zero-width assertions. Thus in the
-second regexp, the substrings captured are those of the whole regexp
-itself. Lookahead C<(?=regexp)> can match arbitrary regexps, but
-lookbehind C<< (?<=fixed-regexp) >> only works for regexps of fixed
-width, i.e., a fixed number of characters long. Thus
-C<< (?<=(ab|bc)) >> is fine, but C<< (?<=(ab)*) >> is not. The
-negated versions of the lookahead and lookbehind assertions are
-denoted by C<(?!regexp)> and C<< (?<!fixed-regexp) >> respectively.
-They evaluate true if the regexps do I<not> match:
-
- $x = "foobar";
- $x =~ /foo(?!bar)/; # doesn't match, 'bar' follows 'foo'
- $x =~ /foo(?!baz)/; # matches, 'baz' doesn't follow 'foo'
- $x =~ /(?<!\s)foo/; # matches, there is no \s before 'foo'
-
-=head2 Using independent subexpressions to prevent backtracking
-
-The last few extended patterns in this tutorial are experimental as of
-5.6.0. Play with them, use them in some code, but don't rely on them
-just yet for production code.
-
-S<B<Independent subexpressions> > are regular expressions, in the
-context of a larger regular expression, that function independently of
-the larger regular expression. That is, they consume as much or as
-little of the string as they wish without regard for the ability of
-the larger regexp to match. Independent subexpressions are represented
-by C<< (?>regexp) >>. We can illustrate their behavior by first
-considering an ordinary regexp:
-
- $x = "ab";
- $x =~ /a*ab/; # matches
-
-This obviously matches, but in the process of matching, the
-subexpression C<a*> first grabbed the C<a>. Doing so, however,
-wouldn't allow the whole regexp to match, so after backtracking, C<a*>
-eventually gave back the C<a> and matched the empty string. Here, what
-C<a*> matched was I<dependent> on what the rest of the regexp matched.
-
-Contrast that with an independent subexpression:
-
- $x =~ /(?>a*)ab/; # doesn't match!
-
-The independent subexpression C<< (?>a*) >> doesn't care about the rest
-of the regexp, so it sees an C<a> and grabs it. Then the rest of the
-regexp C<ab> cannot match. Because C<< (?>a*) >> is independent, there
-is no backtracking and and the independent subexpression does not give
-up its C<a>. Thus the match of the regexp as a whole fails. A similar
-behavior occurs with completely independent regexps:
-
- $x = "ab";
- $x =~ /a*/g; # matches, eats an 'a'
- $x =~ /\Gab/g; # doesn't match, no 'a' available
-
-Here C<//g> and C<\G> create a 'tag team' handoff of the string from
-one regexp to the other. Regexps with an independent subexpression are
-much like this, with a handoff of the string to the independent
-subexpression, and a handoff of the string back to the enclosing
-regexp.
-
-The ability of an independent subexpression to prevent backtracking
-can be quite useful. Suppose we want to match a non-empty string
-enclosed in parentheses up to two levels deep. Then the following
-regexp matches:
-
- $x = "abc(de(fg)h"; # unbalanced parentheses
- $x =~ /\( ( [^()]+ | \([^()]*\) )+ \)/x;
-
-The regexp matches an open parenthesis, one or more copies of an
-alternation, and a close parenthesis. The alternation is two-way, with
-the first alternative C<[^()]+> matching a substring with no
-parentheses and the second alternative C<\([^()]*\)> matching a
-substring delimited by parentheses. The problem with this regexp is
-that it is pathological: it has nested indeterminate quantifiers
- of the form C<(a+|b)+>. We discussed in Part 1 how nested quantifiers
-like this could take an exponentially long time to execute if there
-was no match possible. To prevent the exponential blowup, we need to
-prevent useless backtracking at some point. This can be done by
-enclosing the inner quantifier as an independent subexpression:
-
- $x =~ /\( ( (?>[^()]+) | \([^()]*\) )+ \)/x;
-
-Here, C<< (?>[^()]+) >> breaks the degeneracy of string partitioning
-by gobbling up as much of the string as possible and keeping it. Then
-match failures fail much more quickly.
-
-=head2 Conditional expressions
-
-A S<B<conditional expression> > is a form of if-then-else statement
-that allows one to choose which patterns are to be matched, based on
-some condition. There are two types of conditional expression:
-C<(?(condition)yes-regexp)> and
-C<(?(condition)yes-regexp|no-regexp)>. C<(?(condition)yes-regexp)> is
-like an S<C<'if () {}'> > statement in Perl. If the C<condition> is true,
-the C<yes-regexp> will be matched. If the C<condition> is false, the
-C<yes-regexp> will be skipped and perl will move onto the next regexp
-element. The second form is like an S<C<'if () {} else {}'> > statement
-in Perl. If the C<condition> is true, the C<yes-regexp> will be
-matched, otherwise the C<no-regexp> will be matched.
-
-The C<condition> can have two forms. The first form is simply an
-integer in parentheses C<(integer)>. It is true if the corresponding
-backreference C<\integer> matched earlier in the regexp. The second
-form is a bare zero width assertion C<(?...)>, either a
-lookahead, a lookbehind, or a code assertion (discussed in the next
-section).
-
-The integer form of the C<condition> allows us to choose, with more
-flexibility, what to match based on what matched earlier in the
-regexp. This searches for words of the form C<"$x$x"> or
-C<"$x$y$y$x">:
-
- % simple_grep '^(\w+)(\w+)?(?(2)\2\1|\1)$' /usr/dict/words
- beriberi
- coco
- couscous
- deed
- ...
- toot
- toto
- tutu
-
-The lookbehind C<condition> allows, along with backreferences,
-an earlier part of the match to influence a later part of the
-match. For instance,
-
- /[ATGC]+(?(?<=AA)G|C)$/;
-
-matches a DNA sequence such that it either ends in C<AAG>, or some
-other base pair combination and C<C>. Note that the form is
-C<< (?(?<=AA)G|C) >> and not C<< (?((?<=AA))G|C) >>; for the
-lookahead, lookbehind or code assertions, the parentheses around the
-conditional are not needed.
-
-=head2 A bit of magic: executing Perl code in a regular expression
-
-Normally, regexps are a part of Perl expressions.
-S<B<Code evaluation> > expressions turn that around by allowing
-arbitrary Perl code to be a part of of a regexp. A code evaluation
-expression is denoted C<(?{code})>, with C<code> a string of Perl
-statements.
-
-Code expressions are zero-width assertions, and the value they return
-depends on their environment. There are two possibilities: either the
-code expression is used as a conditional in a conditional expression
-C<(?(condition)...)>, or it is not. If the code expression is a
-conditional, the code is evaluated and the result (i.e., the result of
-the last statement) is used to determine truth or falsehood. If the
-code expression is not used as a conditional, the assertion always
-evaluates true and the result is put into the special variable
-C<$^R>. The variable C<$^R> can then be used in code expressions later
-in the regexp. Here are some silly examples:
-
- $x = "abcdef";
- $x =~ /abc(?{print "Hi Mom!";})def/; # matches,
- # prints 'Hi Mom!'
- $x =~ /aaa(?{print "Hi Mom!";})def/; # doesn't match,
- # no 'Hi Mom!'
-
-Pay careful attention to the next example:
-
- $x =~ /abc(?{print "Hi Mom!";})ddd/; # doesn't match,
- # no 'Hi Mom!'
- # but why not?
-
-At first glance, you'd think that it shouldn't print, because obviously
-the C<ddd> isn't going to match the target string. But look at this
-example:
-
- $x =~ /abc(?{print "Hi Mom!";})[d]dd/; # doesn't match,
- # but _does_ print
-
-Hmm. What happened here? If you've been following along, you know that
-the above pattern should be effectively the same as the last one --
-enclosing the d in a character class isn't going to change what it
-matches. So why does the first not print while the second one does?
-
-The answer lies in the optimizations the REx engine makes. In the first
-case, all the engine sees are plain old characters (aside from the
-C<?{}> construct). It's smart enough to realize that the string 'ddd'
-doesn't occur in our target string before actually running the pattern
-through. But in the second case, we've tricked it into thinking that our
-pattern is more complicated than it is. It takes a look, sees our
-character class, and decides that it will have to actually run the
-pattern to determine whether or not it matches, and in the process of
-running it hits the print statement before it discovers that we don't
-have a match.
-
-To take a closer look at how the engine does optimizations, see the
-section L<"Pragmas and debugging"> below.
-
-More fun with C<?{}>:
-
- $x =~ /(?{print "Hi Mom!";})/; # matches,
- # prints 'Hi Mom!'
- $x =~ /(?{$c = 1;})(?{print "$c";})/; # matches,
- # prints '1'
- $x =~ /(?{$c = 1;})(?{print "$^R";})/; # matches,
- # prints '1'
-
-The bit of magic mentioned in the section title occurs when the regexp
-backtracks in the process of searching for a match. If the regexp
-backtracks over a code expression and if the variables used within are
-localized using C<local>, the changes in the variables produced by the
-code expression are undone! Thus, if we wanted to count how many times
-a character got matched inside a group, we could use, e.g.,
-
- $x = "aaaa";
- $count = 0; # initialize 'a' count
- $c = "bob"; # test if $c gets clobbered
- $x =~ /(?{local $c = 0;}) # initialize count
- ( a # match 'a'
- (?{local $c = $c + 1;}) # increment count
- )* # do this any number of times,
- aa # but match 'aa' at the end
- (?{$count = $c;}) # copy local $c var into $count
- /x;
- print "'a' count is $count, \$c variable is '$c'\n";
-
-This prints
-
- 'a' count is 2, $c variable is 'bob'
-
-If we replace the S<C< (?{local $c = $c + 1;})> > with
-S<C< (?{$c = $c + 1;})> >, the variable changes are I<not> undone
-during backtracking, and we get
-
- 'a' count is 4, $c variable is 'bob'
-
-Note that only localized variable changes are undone. Other side
-effects of code expression execution are permanent. Thus
-
- $x = "aaaa";
- $x =~ /(a(?{print "Yow\n";}))*aa/;
-
-produces
-
- Yow
- Yow
- Yow
- Yow
-
-The result C<$^R> is automatically localized, so that it will behave
-properly in the presence of backtracking.
-
-This example uses a code expression in a conditional to match the
-article 'the' in either English or German:
-
- $lang = 'DE'; # use German
- ...
- $text = "das";
- print "matched\n"
- if $text =~ /(?(?{
- $lang eq 'EN'; # is the language English?
- })
- the | # if so, then match 'the'
- (die|das|der) # else, match 'die|das|der'
- )
- /xi;
-
-Note that the syntax here is C<(?(?{...})yes-regexp|no-regexp)>, not
-C<(?((?{...}))yes-regexp|no-regexp)>. In other words, in the case of a
-code expression, we don't need the extra parentheses around the
-conditional.
-
-If you try to use code expressions with interpolating variables, perl
-may surprise you:
-
- $bar = 5;
- $pat = '(?{ 1 })';
- /foo(?{ $bar })bar/; # compiles ok, $bar not interpolated
- /foo(?{ 1 })$bar/; # compile error!
- /foo${pat}bar/; # compile error!
-
- $pat = qr/(?{ $foo = 1 })/; # precompile code regexp
- /foo${pat}bar/; # compiles ok
-
-If a regexp has (1) code expressions and interpolating variables,or
-(2) a variable that interpolates a code expression, perl treats the
-regexp as an error. If the code expression is precompiled into a
-variable, however, interpolating is ok. The question is, why is this
-an error?
-
-The reason is that variable interpolation and code expressions
-together pose a security risk. The combination is dangerous because
-many programmers who write search engines often take user input and
-plug it directly into a regexp:
-
- $regexp = <>; # read user-supplied regexp
- $chomp $regexp; # get rid of possible newline
- $text =~ /$regexp/; # search $text for the $regexp
-
-If the C<$regexp> variable contains a code expression, the user could
-then execute arbitrary Perl code. For instance, some joker could
-search for S<C<system('rm -rf *');> > to erase your files. In this
-sense, the combination of interpolation and code expressions B<taints>
-your regexp. So by default, using both interpolation and code
-expressions in the same regexp is not allowed. If you're not
-concerned about malicious users, it is possible to bypass this
-security check by invoking S<C<use re 'eval'> >:
-
- use re 'eval'; # throw caution out the door
- $bar = 5;
- $pat = '(?{ 1 })';
- /foo(?{ 1 })$bar/; # compiles ok
- /foo${pat}bar/; # compiles ok
-
-Another form of code expression is the S<B<pattern code expression> >.
-The pattern code expression is like a regular code expression, except
-that the result of the code evaluation is treated as a regular
-expression and matched immediately. A simple example is
-
- $length = 5;
- $char = 'a';
- $x = 'aaaaabb';
- $x =~ /(??{$char x $length})/x; # matches, there are 5 of 'a'
-
-
-This final example contains both ordinary and pattern code
-expressions. It detects if a binary string C<1101010010001...> has a
-Fibonacci spacing 0,1,1,2,3,5,... of the C<1>'s:
-
- $s0 = 0; $s1 = 1; # initial conditions
- $x = "1101010010001000001";
- print "It is a Fibonacci sequence\n"
- if $x =~ /^1 # match an initial '1'
- (
- (??{'0' x $s0}) # match $s0 of '0'
- 1 # and then a '1'
- (?{
- $largest = $s0; # largest seq so far
- $s2 = $s1 + $s0; # compute next term
- $s0 = $s1; # in Fibonacci sequence
- $s1 = $s2;
- })
- )+ # repeat as needed
- $ # that is all there is
- /x;
- print "Largest sequence matched was $largest\n";
-
-This prints
-
- It is a Fibonacci sequence
- Largest sequence matched was 5
-
-Ha! Try that with your garden variety regexp package...
-
-Note that the variables C<$s0> and C<$s1> are not substituted when the
-regexp is compiled, as happens for ordinary variables outside a code
-expression. Rather, the code expressions are evaluated when perl
-encounters them during the search for a match.
-
-The regexp without the C<//x> modifier is
-
- /^1((??{'0'x$s0})1(?{$largest=$s0;$s2=$s1+$s0$s0=$s1;$s1=$s2;}))+$/;
-
-and is a great start on an Obfuscated Perl entry :-) When working with
-code and conditional expressions, the extended form of regexps is
-almost necessary in creating and debugging regexps.
-
-=head2 Pragmas and debugging
-
-Speaking of debugging, there are several pragmas available to control
-and debug regexps in Perl. We have already encountered one pragma in
-the previous section, S<C<use re 'eval';> >, that allows variable
-interpolation and code expressions to coexist in a regexp. The other
-pragmas are
-
- use re 'taint';
- $tainted = <>;
- @parts = ($tainted =~ /(\w+)\s+(\w+)/; # @parts is now tainted
-
-The C<taint> pragma causes any substrings from a match with a tainted
-variable to be tainted as well. This is not normally the case, as
-regexps are often used to extract the safe bits from a tainted
-variable. Use C<taint> when you are not extracting safe bits, but are
-performing some other processing. Both C<taint> and C<eval> pragmas
-are lexically scoped, which means they are in effect only until
-the end of the block enclosing the pragmas.
-
- use re 'debug';
- /^(.*)$/s; # output debugging info
-
- use re 'debugcolor';
- /^(.*)$/s; # output debugging info in living color
-
-The global C<debug> and C<debugcolor> pragmas allow one to get
-detailed debugging info about regexp compilation and
-execution. C<debugcolor> is the same as debug, except the debugging
-information is displayed in color on terminals that can display
-termcap color sequences. Here is example output:
-
- % perl -e 'use re "debug"; "abc" =~ /a*b+c/;'
- Compiling REx `a*b+c'
- size 9 first at 1
- 1: STAR(4)
- 2: EXACT <a>(0)
- 4: PLUS(7)
- 5: EXACT <b>(0)
- 7: EXACT <c>(9)
- 9: END(0)
- floating `bc' at 0..2147483647 (checking floating) minlen 2
- Guessing start of match, REx `a*b+c' against `abc'...
- Found floating substr `bc' at offset 1...
- Guessed: match at offset 0
- Matching REx `a*b+c' against `abc'
- Setting an EVAL scope, savestack=3
- 0 <> <abc> | 1: STAR
- EXACT <a> can match 1 times out of 32767...
- Setting an EVAL scope, savestack=3
- 1 <a> <bc> | 4: PLUS
- EXACT <b> can match 1 times out of 32767...
- Setting an EVAL scope, savestack=3
- 2 <ab> <c> | 7: EXACT <c>
- 3 <abc> <> | 9: END
- Match successful!
- Freeing REx: `a*b+c'
-
-If you have gotten this far into the tutorial, you can probably guess
-what the different parts of the debugging output tell you. The first
-part
-
- Compiling REx `a*b+c'
- size 9 first at 1
- 1: STAR(4)
- 2: EXACT <a>(0)
- 4: PLUS(7)
- 5: EXACT <b>(0)
- 7: EXACT <c>(9)
- 9: END(0)
-
-describes the compilation stage. C<STAR(4)> means that there is a
-starred object, in this case C<'a'>, and if it matches, goto line 4,
-i.e., C<PLUS(7)>. The middle lines describe some heuristics and
-optimizations performed before a match:
-
- floating `bc' at 0..2147483647 (checking floating) minlen 2
- Guessing start of match, REx `a*b+c' against `abc'...
- Found floating substr `bc' at offset 1...
- Guessed: match at offset 0
-
-Then the match is executed and the remaining lines describe the
-process:
-
- Matching REx `a*b+c' against `abc'
- Setting an EVAL scope, savestack=3
- 0 <> <abc> | 1: STAR
- EXACT <a> can match 1 times out of 32767...
- Setting an EVAL scope, savestack=3
- 1 <a> <bc> | 4: PLUS
- EXACT <b> can match 1 times out of 32767...
- Setting an EVAL scope, savestack=3
- 2 <ab> <c> | 7: EXACT <c>
- 3 <abc> <> | 9: END
- Match successful!
- Freeing REx: `a*b+c'
-
-Each step is of the form S<C<< n <x> <y> >> >, with C<< <x> >> the
-part of the string matched and C<< <y> >> the part not yet
-matched. The S<C<< | 1: STAR >> > says that perl is at line number 1
-n the compilation list above. See
-L<perldebguts/"Debugging regular expressions"> for much more detail.
-
-An alternative method of debugging regexps is to embed C<print>
-statements within the regexp. This provides a blow-by-blow account of
-the backtracking in an alternation:
-
- "that this" =~ m@(?{print "Start at position ", pos, "\n";})
- t(?{print "t1\n";})
- h(?{print "h1\n";})
- i(?{print "i1\n";})
- s(?{print "s1\n";})
- |
- t(?{print "t2\n";})
- h(?{print "h2\n";})
- a(?{print "a2\n";})
- t(?{print "t2\n";})
- (?{print "Done at position ", pos, "\n";})
- @x;
-
-prints
-
- Start at position 0
- t1
- h1
- t2
- h2
- a2
- t2
- Done at position 4
-
-=head1 BUGS
-
-Code expressions, conditional expressions, and independent expressions
-are B<experimental>. Don't use them in production code. Yet.
-
-=head1 SEE ALSO
-
-This is just a tutorial. For the full story on perl regular
-expressions, see the L<perlre> regular expressions reference page.
-
-For more information on the matching C<m//> and substitution C<s///>
-operators, see L<perlop/"Regexp Quote-Like Operators">. For
-information on the C<split> operation, see L<perlfunc/split>.
-
-For an excellent all-around resource on the care and feeding of
-regular expressions, see the book I<Mastering Regular Expressions> by
-Jeffrey Friedl (published by O'Reilly, ISBN 1556592-257-3).
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 2000 Mark Kvale
-All rights reserved.
-
-This document may be distributed under the same terms as Perl itself.
-
-=head2 Acknowledgments
-
-The inspiration for the stop codon DNA example came from the ZIP
-code example in chapter 7 of I<Mastering Regular Expressions>.
-
-The author would like to thank Jeff Pinyan, Andrew Johnson, Peter
-Haworth, Ronald J Kimball, and Joe Smith for all their helpful
-comments.
-
-=cut
-
diff --git a/contrib/perl5/pod/perlrun.pod b/contrib/perl5/pod/perlrun.pod
deleted file mode 100644
index 30e82fc..0000000
--- a/contrib/perl5/pod/perlrun.pod
+++ /dev/null
@@ -1,859 +0,0 @@
-=head1 NAME
-
-perlrun - how to execute the Perl interpreter
-
-=head1 SYNOPSIS
-
-B<perl> S<[ B<-CsTuUWX> ]>
- S<[ B<-hv> ] [ B<-V>[:I<configvar>] ]>
- S<[ B<-cw> ] [ B<-d>[:I<debugger>] ] [ B<-D>[I<number/list>] ]>
- S<[ B<-pna> ] [ B<-F>I<pattern> ] [ B<-l>[I<octal>] ] [ B<-0>[I<octal>] ]>
- S<[ B<-I>I<dir> ] [ B<-m>[B<->]I<module> ] [ B<-M>[B<->]I<'module...'> ]>
- S<[ B<-P> ]>
- S<[ B<-S> ]>
- S<[ B<-x>[I<dir>] ]>
- S<[ B<-i>[I<extension>] ]>
- S<[ B<-e> I<'command'> ] [ B<--> ] [ I<programfile> ] [ I<argument> ]...>
-
-=head1 DESCRIPTION
-
-The normal way to run a Perl program is by making it directly
-executable, or else by passing the name of the source file as an
-argument on the command line. (An interactive Perl environment
-is also possible--see L<perldebug> for details on how to do that.)
-Upon startup, Perl looks for your program in one of the following
-places:
-
-=over 4
-
-=item 1.
-
-Specified line by line via B<-e> switches on the command line.
-
-=item 2.
-
-Contained in the file specified by the first filename on the command line.
-(Note that systems supporting the #! notation invoke interpreters this
-way. See L<Location of Perl>.)
-
-=item 3.
-
-Passed in implicitly via standard input. This works only if there are
-no filename arguments--to pass arguments to a STDIN-read program you
-must explicitly specify a "-" for the program name.
-
-=back
-
-With methods 2 and 3, Perl starts parsing the input file from the
-beginning, unless you've specified a B<-x> switch, in which case it
-scans for the first line starting with #! and containing the word
-"perl", and starts there instead. This is useful for running a program
-embedded in a larger message. (In this case you would indicate the end
-of the program using the C<__END__> token.)
-
-The #! line is always examined for switches as the line is being
-parsed. Thus, if you're on a machine that allows only one argument
-with the #! line, or worse, doesn't even recognize the #! line, you
-still can get consistent switch behavior regardless of how Perl was
-invoked, even if B<-x> was used to find the beginning of the program.
-
-Because historically some operating systems silently chopped off
-kernel interpretation of the #! line after 32 characters, some
-switches may be passed in on the command line, and some may not;
-you could even get a "-" without its letter, if you're not careful.
-You probably want to make sure that all your switches fall either
-before or after that 32-character boundary. Most switches don't
-actually care if they're processed redundantly, but getting a "-"
-instead of a complete switch could cause Perl to try to execute
-standard input instead of your program. And a partial B<-I> switch
-could also cause odd results.
-
-Some switches do care if they are processed twice, for instance
-combinations of B<-l> and B<-0>. Either put all the switches after
-the 32-character boundary (if applicable), or replace the use of
-B<-0>I<digits> by C<BEGIN{ $/ = "\0digits"; }>.
-
-Parsing of the #! switches starts wherever "perl" is mentioned in the line.
-The sequences "-*" and "- " are specifically ignored so that you could,
-if you were so inclined, say
-
- #!/bin/sh -- # -*- perl -*- -p
- eval 'exec perl -wS $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-to let Perl see the B<-p> switch.
-
-A similar trick involves the B<env> program, if you have it.
-
- #!/usr/bin/env perl
-
-The examples above use a relative path to the perl interpreter,
-getting whatever version is first in the user's path. If you want
-a specific version of Perl, say, perl5.005_57, you should place
-that directly in the #! line's path.
-
-If the #! line does not contain the word "perl", the program named after
-the #! is executed instead of the Perl interpreter. This is slightly
-bizarre, but it helps people on machines that don't do #!, because they
-can tell a program that their SHELL is F</usr/bin/perl>, and Perl will then
-dispatch the program to the correct interpreter for them.
-
-After locating your program, Perl compiles the entire program to an
-internal form. If there are any compilation errors, execution of the
-program is not attempted. (This is unlike the typical shell script,
-which might run part-way through before finding a syntax error.)
-
-If the program is syntactically correct, it is executed. If the program
-runs off the end without hitting an exit() or die() operator, an implicit
-C<exit(0)> is provided to indicate successful completion.
-
-=head2 #! and quoting on non-Unix systems
-
-Unix's #! technique can be simulated on other systems:
-
-=over 4
-
-=item OS/2
-
-Put
-
- extproc perl -S -your_switches
-
-as the first line in C<*.cmd> file (B<-S> due to a bug in cmd.exe's
-`extproc' handling).
-
-=item MS-DOS
-
-Create a batch file to run your program, and codify it in
-C<ALTERNATIVE_SHEBANG> (see the F<dosish.h> file in the source
-distribution for more information).
-
-=item Win95/NT
-
-The Win95/NT installation, when using the ActiveState installer for Perl,
-will modify the Registry to associate the F<.pl> extension with the perl
-interpreter. If you install Perl by other means (including building from
-the sources), you may have to modify the Registry yourself. Note that
-this means you can no longer tell the difference between an executable
-Perl program and a Perl library file.
-
-=item Macintosh
-
-A Macintosh perl program will have the appropriate Creator and
-Type, so that double-clicking them will invoke the perl application.
-
-=item VMS
-
-Put
-
- $ perl -mysw 'f$env("procedure")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' !
- $ exit++ + ++$status != 0 and $exit = $status = undef;
-
-at the top of your program, where B<-mysw> are any command line switches you
-want to pass to Perl. You can now invoke the program directly, by saying
-C<perl program>, or as a DCL procedure, by saying C<@program> (or implicitly
-via F<DCL$PATH> by just using the name of the program).
-
-This incantation is a bit much to remember, but Perl will display it for
-you if you say C<perl "-V:startperl">.
-
-=back
-
-Command-interpreters on non-Unix systems have rather different ideas
-on quoting than Unix shells. You'll need to learn the special
-characters in your command-interpreter (C<*>, C<\> and C<"> are
-common) and how to protect whitespace and these characters to run
-one-liners (see B<-e> below).
-
-On some systems, you may have to change single-quotes to double ones,
-which you must I<not> do on Unix or Plan9 systems. You might also
-have to change a single % to a %%.
-
-For example:
-
- # Unix
- perl -e 'print "Hello world\n"'
-
- # MS-DOS, etc.
- perl -e "print \"Hello world\n\""
-
- # Macintosh
- print "Hello world\n"
- (then Run "Myscript" or Shift-Command-R)
-
- # VMS
- perl -e "print ""Hello world\n"""
-
-The problem is that none of this is reliable: it depends on the
-command and it is entirely possible neither works. If B<4DOS> were
-the command shell, this would probably work better:
-
- perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
-
-B<CMD.EXE> in Windows NT slipped a lot of standard Unix functionality in
-when nobody was looking, but just try to find documentation for its
-quoting rules.
-
-Under the Macintosh, it depends which environment you are using. The MacPerl
-shell, or MPW, is much like Unix shells in its support for several
-quoting variants, except that it makes free use of the Macintosh's non-ASCII
-characters as control characters.
-
-There is no general solution to all of this. It's just a mess.
-
-=head2 Location of Perl
-
-It may seem obvious to say, but Perl is useful only when users can
-easily find it. When possible, it's good for both F</usr/bin/perl>
-and F</usr/local/bin/perl> to be symlinks to the actual binary. If
-that can't be done, system administrators are strongly encouraged
-to put (symlinks to) perl and its accompanying utilities into a
-directory typically found along a user's PATH, or in some other
-obvious and convenient place.
-
-In this documentation, C<#!/usr/bin/perl> on the first line of the program
-will stand in for whatever method works on your system. You are
-advised to use a specific path if you care about a specific version.
-
- #!/usr/local/bin/perl5.00554
-
-or if you just want to be running at least version, place a statement
-like this at the top of your program:
-
- use 5.005_54;
-
-=head2 Command Switches
-
-As with all standard commands, a single-character switch may be
-clustered with the following switch, if any.
-
- #!/usr/bin/perl -spi.orig # same as -s -p -i.orig
-
-Switches include:
-
-=over 5
-
-=item B<-0>[I<digits>]
-
-specifies the input record separator (C<$/>) as an octal number. If there are
-no digits, the null character is the separator. Other switches may
-precede or follow the digits. For example, if you have a version of
-B<find> which can print filenames terminated by the null character, you
-can say this:
-
- find . -name '*.orig' -print0 | perl -n0e unlink
-
-The special value 00 will cause Perl to slurp files in paragraph mode.
-The value 0777 will cause Perl to slurp files whole because there is no
-legal character with that value.
-
-=item B<-a>
-
-turns on autosplit mode when used with a B<-n> or B<-p>. An implicit
-split command to the @F array is done as the first thing inside the
-implicit while loop produced by the B<-n> or B<-p>.
-
- perl -ane 'print pop(@F), "\n";'
-
-is equivalent to
-
- while (<>) {
- @F = split(' ');
- print pop(@F), "\n";
- }
-
-An alternate delimiter may be specified using B<-F>.
-
-=item B<-C>
-
-enables Perl to use the native wide character APIs on the target system.
-The magic variable C<${^WIDE_SYSTEM_CALLS}> reflects the state of
-this switch. See L<perlvar/"${^WIDE_SYSTEM_CALLS}">.
-
-This feature is currently only implemented on the Win32 platform.
-
-=item B<-c>
-
-causes Perl to check the syntax of the program and then exit without
-executing it. Actually, it I<will> execute C<BEGIN>, C<CHECK>, and
-C<use> blocks, because these are considered as occurring outside the
-execution of your program. C<INIT> and C<END> blocks, however, will
-be skipped.
-
-=item B<-d>
-
-runs the program under the Perl debugger. See L<perldebug>.
-
-=item B<-d:>I<foo[=bar,baz]>
-
-runs the program under the control of a debugging, profiling, or
-tracing module installed as Devel::foo. E.g., B<-d:DProf> executes
-the program using the Devel::DProf profiler. As with the B<-M>
-flag, options may be passed to the Devel::foo package where they
-will be received and interpreted by the Devel::foo::import routine.
-The comma-separated list of options must follow a C<=> character.
-See L<perldebug>.
-
-=item B<-D>I<letters>
-
-=item B<-D>I<number>
-
-sets debugging flags. To watch how it executes your program, use
-B<-Dtls>. (This works only if debugging is compiled into your
-Perl.) Another nice value is B<-Dx>, which lists your compiled
-syntax tree. And B<-Dr> displays compiled regular expressions. As an
-alternative, specify a number instead of list of letters (e.g., B<-D14> is
-equivalent to B<-Dtls>):
-
- 1 p Tokenizing and parsing
- 2 s Stack snapshots
- 4 l Context (loop) stack processing
- 8 t Trace execution
- 16 o Method and overloading resolution
- 32 c String/numeric conversions
- 64 P Print preprocessor command for -P, source file input state
- 128 m Memory allocation
- 256 f Format processing
- 512 r Regular expression parsing and execution
- 1024 x Syntax tree dump
- 2048 u Tainting checks
- 4096 L Memory leaks (needs -DLEAKTEST when compiling Perl)
- 8192 H Hash dump -- usurps values()
- 16384 X Scratchpad allocation
- 32768 D Cleaning up
- 65536 S Thread synchronization
- 131072 T Tokenising
-
-All these flags require B<-DDEBUGGING> when you compile the Perl
-executable. See the F<INSTALL> file in the Perl source distribution
-for how to do this. This flag is automatically set if you include B<-g>
-option when C<Configure> asks you about optimizer/debugger flags.
-
-If you're just trying to get a print out of each line of Perl code
-as it executes, the way that C<sh -x> provides for shell scripts,
-you can't use Perl's B<-D> switch. Instead do this
-
- # Bourne shell syntax
- $ PERLDB_OPTS="NonStop=1 AutoTrace=1 frame=2" perl -dS program
-
- # csh syntax
- % (setenv PERLDB_OPTS "NonStop=1 AutoTrace=1 frame=2"; perl -dS program)
-
-See L<perldebug> for details and variations.
-
-=item B<-e> I<commandline>
-
-may be used to enter one line of program. If B<-e> is given, Perl
-will not look for a filename in the argument list. Multiple B<-e>
-commands may be given to build up a multi-line script. Make sure
-to use semicolons where you would in a normal program.
-
-=item B<-F>I<pattern>
-
-specifies the pattern to split on if B<-a> is also in effect. The
-pattern may be surrounded by C<//>, C<"">, or C<''>, otherwise it will be
-put in single quotes.
-
-=item B<-h>
-
-prints a summary of the options.
-
-=item B<-i>[I<extension>]
-
-specifies that files processed by the C<E<lt>E<gt>> construct are to be
-edited in-place. It does this by renaming the input file, opening the
-output file by the original name, and selecting that output file as the
-default for print() statements. The extension, if supplied, is used to
-modify the name of the old file to make a backup copy, following these
-rules:
-
-If no extension is supplied, no backup is made and the current file is
-overwritten.
-
-If the extension doesn't contain a C<*>, then it is appended to the
-end of the current filename as a suffix. If the extension does
-contain one or more C<*> characters, then each C<*> is replaced
-with the current filename. In Perl terms, you could think of this
-as:
-
- ($backup = $extension) =~ s/\*/$file_name/g;
-
-This allows you to add a prefix to the backup file, instead of (or in
-addition to) a suffix:
-
- $ perl -pi 'orig_*' -e 's/bar/baz/' fileA # backup to 'orig_fileA'
-
-Or even to place backup copies of the original files into another
-directory (provided the directory already exists):
-
- $ perl -pi 'old/*.orig' -e 's/bar/baz/' fileA # backup to 'old/fileA.orig'
-
-These sets of one-liners are equivalent:
-
- $ perl -pi -e 's/bar/baz/' fileA # overwrite current file
- $ perl -pi '*' -e 's/bar/baz/' fileA # overwrite current file
-
- $ perl -pi '.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
- $ perl -pi '*.orig' -e 's/bar/baz/' fileA # backup to 'fileA.orig'
-
-From the shell, saying
-
- $ perl -p -i.orig -e "s/foo/bar/; ... "
-
-is the same as using the program:
-
- #!/usr/bin/perl -pi.orig
- s/foo/bar/;
-
-which is equivalent to
-
- #!/usr/bin/perl
- $extension = '.orig';
- LINE: while (<>) {
- if ($ARGV ne $oldargv) {
- if ($extension !~ /\*/) {
- $backup = $ARGV . $extension;
- }
- else {
- ($backup = $extension) =~ s/\*/$ARGV/g;
- }
- rename($ARGV, $backup);
- open(ARGVOUT, ">$ARGV");
- select(ARGVOUT);
- $oldargv = $ARGV;
- }
- s/foo/bar/;
- }
- continue {
- print; # this prints to original filename
- }
- select(STDOUT);
-
-except that the B<-i> form doesn't need to compare $ARGV to $oldargv to
-know when the filename has changed. It does, however, use ARGVOUT for
-the selected filehandle. Note that STDOUT is restored as the default
-output filehandle after the loop.
-
-As shown above, Perl creates the backup file whether or not any output
-is actually changed. So this is just a fancy way to copy files:
-
- $ perl -p -i '/some/file/path/*' -e 1 file1 file2 file3...
-or
- $ perl -p -i '.orig' -e 1 file1 file2 file3...
-
-You can use C<eof> without parentheses to locate the end of each input
-file, in case you want to append to each file, or reset line numbering
-(see example in L<perlfunc/eof>).
-
-If, for a given file, Perl is unable to create the backup file as
-specified in the extension then it will skip that file and continue on
-with the next one (if it exists).
-
-For a discussion of issues surrounding file permissions and B<-i>,
-see L<perlfaq5/Why does Perl let me delete read-only files? Why does -i clobber protected files? Isn't this a bug in Perl?>.
-
-You cannot use B<-i> to create directories or to strip extensions from
-files.
-
-Perl does not expand C<~> in filenames, which is good, since some
-folks use it for their backup files:
-
- $ perl -pi~ -e 's/foo/bar/' file1 file2 file3...
-
-Finally, the B<-i> switch does not impede execution when no
-files are given on the command line. In this case, no backup is made
-(the original file cannot, of course, be determined) and processing
-proceeds from STDIN to STDOUT as might be expected.
-
-=item B<-I>I<directory>
-
-Directories specified by B<-I> are prepended to the search path for
-modules (C<@INC>), and also tells the C preprocessor where to search for
-include files. The C preprocessor is invoked with B<-P>; by default it
-searches /usr/include and /usr/lib/perl.
-
-=item B<-l>[I<octnum>]
-
-enables automatic line-ending processing. It has two separate
-effects. First, it automatically chomps C<$/> (the input record
-separator) when used with B<-n> or B<-p>. Second, it assigns C<$\>
-(the output record separator) to have the value of I<octnum> so
-that any print statements will have that separator added back on.
-If I<octnum> is omitted, sets C<$\> to the current value of
-C<$/>. For instance, to trim lines to 80 columns:
-
- perl -lpe 'substr($_, 80) = ""'
-
-Note that the assignment C<$\ = $/> is done when the switch is processed,
-so the input record separator can be different than the output record
-separator if the B<-l> switch is followed by a B<-0> switch:
-
- gnufind / -print0 | perl -ln0e 'print "found $_" if -p'
-
-This sets C<$\> to newline and then sets C<$/> to the null character.
-
-=item B<-m>[B<->]I<module>
-
-=item B<-M>[B<->]I<module>
-
-=item B<-M>[B<->]I<'module ...'>
-
-=item B<-[mM]>[B<->]I<module=arg[,arg]...>
-
-B<-m>I<module> executes C<use> I<module> C<();> before executing your
-program.
-
-B<-M>I<module> executes C<use> I<module> C<;> before executing your
-program. You can use quotes to add extra code after the module name,
-e.g., C<'-Mmodule qw(foo bar)'>.
-
-If the first character after the B<-M> or B<-m> is a dash (C<->)
-then the 'use' is replaced with 'no'.
-
-A little builtin syntactic sugar means you can also say
-B<-mmodule=foo,bar> or B<-Mmodule=foo,bar> as a shortcut for
-C<'-Mmodule qw(foo bar)'>. This avoids the need to use quotes when
-importing symbols. The actual code generated by B<-Mmodule=foo,bar> is
-C<use module split(/,/,q{foo,bar})>. Note that the C<=> form
-removes the distinction between B<-m> and B<-M>.
-
-=item B<-n>
-
-causes Perl to assume the following loop around your program, which
-makes it iterate over filename arguments somewhat like B<sed -n> or
-B<awk>:
-
- LINE:
- while (<>) {
- ... # your program goes here
- }
-
-Note that the lines are not printed by default. See B<-p> to have
-lines printed. If a file named by an argument cannot be opened for
-some reason, Perl warns you about it and moves on to the next file.
-
-Here is an efficient way to delete all files older than a week:
-
- find . -mtime +7 -print | perl -nle unlink
-
-This is faster than using the B<-exec> switch of B<find> because you don't
-have to start a process on every filename found. It does suffer from
-the bug of mishandling newlines in pathnames, which you can fix if
-you
-
-C<BEGIN> and C<END> blocks may be used to capture control before or after
-the implicit program loop, just as in B<awk>.
-
-=item B<-p>
-
-causes Perl to assume the following loop around your program, which
-makes it iterate over filename arguments somewhat like B<sed>:
-
-
- LINE:
- while (<>) {
- ... # your program goes here
- } continue {
- print or die "-p destination: $!\n";
- }
-
-If a file named by an argument cannot be opened for some reason, Perl
-warns you about it, and moves on to the next file. Note that the
-lines are printed automatically. An error occurring during printing is
-treated as fatal. To suppress printing use the B<-n> switch. A B<-p>
-overrides a B<-n> switch.
-
-C<BEGIN> and C<END> blocks may be used to capture control before or after
-the implicit loop, just as in B<awk>.
-
-=item B<-P>
-
-causes your program to be run through the C preprocessor before
-compilation by Perl. Because both comments and B<cpp> directives begin
-with the # character, you should avoid starting comments with any words
-recognized by the C preprocessor such as C<"if">, C<"else">, or C<"define">.
-Also, in some platforms the C preprocessor knows too much: it knows
-about the C++ -style until-end-of-line comments starting with C<"//">.
-This will cause problems with common Perl constructs like
-
- s/foo//;
-
-because after -P this will became illegal code
-
- s/foo
-
-The workaround is to use some other quoting separator than C<"/">,
-like for example C<"!">:
-
- s!foo!!;
-
-=item B<-s>
-
-enables rudimentary switch parsing for switches on the command
-line after the program name but before any filename arguments (or before
-an argument of B<-->). This means you can have switches with two leading
-dashes (B<--help>). Any switch found there is removed from @ARGV and sets the
-corresponding variable in the Perl program. The following program
-prints "1" if the program is invoked with a B<-xyz> switch, and "abc"
-if it is invoked with B<-xyz=abc>.
-
- #!/usr/bin/perl -s
- if ($xyz) { print "$xyz\n" }
-
-Do note that B<--help> creates the variable ${-help}, which is not compliant
-with C<strict refs>.
-
-=item B<-S>
-
-makes Perl use the PATH environment variable to search for the
-program (unless the name of the program contains directory separators).
-
-On some platforms, this also makes Perl append suffixes to the
-filename while searching for it. For example, on Win32 platforms,
-the ".bat" and ".cmd" suffixes are appended if a lookup for the
-original name fails, and if the name does not already end in one
-of those suffixes. If your Perl was compiled with DEBUGGING turned
-on, using the -Dp switch to Perl shows how the search progresses.
-
-Typically this is used to emulate #! startup on platforms that
-don't support #!. This example works on many platforms that
-have a shell compatible with Bourne shell:
-
- #!/usr/bin/perl
- eval 'exec /usr/bin/perl -wS $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-The system ignores the first line and feeds the program to F</bin/sh>,
-which proceeds to try to execute the Perl program as a shell script.
-The shell executes the second line as a normal shell command, and thus
-starts up the Perl interpreter. On some systems $0 doesn't always
-contain the full pathname, so the B<-S> tells Perl to search for the
-program if necessary. After Perl locates the program, it parses the
-lines and ignores them because the variable $running_under_some_shell
-is never true. If the program will be interpreted by csh, you will need
-to replace C<${1+"$@"}> with C<$*>, even though that doesn't understand
-embedded spaces (and such) in the argument list. To start up sh rather
-than csh, some systems may have to replace the #! line with a line
-containing just a colon, which will be politely ignored by Perl. Other
-systems can't control that, and need a totally devious construct that
-will work under any of B<csh>, B<sh>, or Perl, such as the following:
-
- eval '(exit $?0)' && eval 'exec perl -wS $0 ${1+"$@"}'
- & eval 'exec /usr/bin/perl -wS $0 $argv:q'
- if $running_under_some_shell;
-
-If the filename supplied contains directory separators (i.e., is an
-absolute or relative pathname), and if that file is not found,
-platforms that append file extensions will do so and try to look
-for the file with those extensions added, one by one.
-
-On DOS-like platforms, if the program does not contain directory
-separators, it will first be searched for in the current directory
-before being searched for on the PATH. On Unix platforms, the
-program will be searched for strictly on the PATH.
-
-=item B<-T>
-
-forces "taint" checks to be turned on so you can test them. Ordinarily
-these checks are done only when running setuid or setgid. It's a
-good idea to turn them on explicitly for programs that run on behalf
-of someone else whom you might not necessarily trust, such as CGI
-programs or any internet servers you might write in Perl. See
-L<perlsec> for details. For security reasons, this option must be
-seen by Perl quite early; usually this means it must appear early
-on the command line or in the #! line for systems which support
-that construct.
-
-=item B<-u>
-
-This obsolete switch causes Perl to dump core after compiling your
-program. You can then in theory take this core dump and turn it
-into an executable file by using the B<undump> program (not supplied).
-This speeds startup at the expense of some disk space (which you
-can minimize by stripping the executable). (Still, a "hello world"
-executable comes out to about 200K on my machine.) If you want to
-execute a portion of your program before dumping, use the dump()
-operator instead. Note: availability of B<undump> is platform
-specific and may not be available for a specific port of Perl.
-
-This switch has been superseded in favor of the new Perl code
-generator backends to the compiler. See L<B> and L<B::Bytecode>
-for details.
-
-=item B<-U>
-
-allows Perl to do unsafe operations. Currently the only "unsafe"
-operations are the unlinking of directories while running as superuser,
-and running setuid programs with fatal taint checks turned into
-warnings. Note that the B<-w> switch (or the C<$^W> variable) must
-be used along with this option to actually I<generate> the
-taint-check warnings.
-
-=item B<-v>
-
-prints the version and patchlevel of your perl executable.
-
-=item B<-V>
-
-prints summary of the major perl configuration values and the current
-values of @INC.
-
-=item B<-V:>I<name>
-
-Prints to STDOUT the value of the named configuration variable.
-For example,
-
- $ perl -V:man.dir
-
-will provide strong clues about what your MANPATH variable should
-be set to in order to access the Perl documentation.
-
-=item B<-w>
-
-prints warnings about dubious constructs, such as variable names
-that are mentioned only once and scalar variables that are used
-before being set, redefined subroutines, references to undefined
-filehandles or filehandles opened read-only that you are attempting
-to write on, values used as a number that doesn't look like numbers,
-using an array as though it were a scalar, if your subroutines
-recurse more than 100 deep, and innumerable other things.
-
-This switch really just enables the internal C<^$W> variable. You
-can disable or promote into fatal errors specific warnings using
-C<__WARN__> hooks, as described in L<perlvar> and L<perlfunc/warn>.
-See also L<perldiag> and L<perltrap>. A new, fine-grained warning
-facility is also available if you want to manipulate entire classes
-of warnings; see L<warnings> or L<perllexwarn>.
-
-=item B<-W>
-
-Enables all warnings regardless of C<no warnings> or C<$^W>.
-See L<perllexwarn>.
-
-=item B<-X>
-
-Disables all warnings regardless of C<use warnings> or C<$^W>.
-See L<perllexwarn>.
-
-=item B<-x> I<directory>
-
-tells Perl that the program is embedded in a larger chunk of unrelated
-ASCII text, such as in a mail message. Leading garbage will be
-discarded until the first line that starts with #! and contains the
-string "perl". Any meaningful switches on that line will be applied.
-If a directory name is specified, Perl will switch to that directory
-before running the program. The B<-x> switch controls only the
-disposal of leading garbage. The program must be terminated with
-C<__END__> if there is trailing garbage to be ignored (the program
-can process any or all of the trailing garbage via the DATA filehandle
-if desired).
-
-=back
-
-=head1 ENVIRONMENT
-
-=over 12
-
-=item HOME
-
-Used if chdir has no argument.
-
-=item LOGDIR
-
-Used if chdir has no argument and HOME is not set.
-
-=item PATH
-
-Used in executing subprocesses, and in finding the program if B<-S> is
-used.
-
-=item PERL5LIB
-
-A colon-separated list of directories in which to look for Perl library
-files before looking in the standard library and the current
-directory. Any architecture-specific directories under the specified
-locations are automatically included if they exist. If PERL5LIB is not
-defined, PERLLIB is used.
-
-When running taint checks (either because the program was running setuid
-or setgid, or the B<-T> switch was used), neither variable is used.
-The program should instead say:
-
- use lib "/my/directory";
-
-=item PERL5OPT
-
-Command-line options (switches). Switches in this variable are taken
-as if they were on every Perl command line. Only the B<-[DIMUdmw]>
-switches are allowed. When running taint checks (because the program
-was running setuid or setgid, or the B<-T> switch was used), this
-variable is ignored. If PERL5OPT begins with B<-T>, tainting will be
-enabled, and any subsequent options ignored.
-
-=item PERLLIB
-
-A colon-separated list of directories in which to look for Perl library
-files before looking in the standard library and the current directory.
-If PERL5LIB is defined, PERLLIB is not used.
-
-=item PERL5DB
-
-The command used to load the debugger code. The default is:
-
- BEGIN { require 'perl5db.pl' }
-
-=item PERL5SHELL (specific to the Win32 port)
-
-May be set to an alternative shell that perl must use internally for
-executing "backtick" commands or system(). Default is C<cmd.exe /x/c>
-on WindowsNT and C<command.com /c> on Windows95. The value is considered
-to be space-separated. Precede any character that needs to be protected
-(like a space or backslash) with a backslash.
-
-Note that Perl doesn't use COMSPEC for this purpose because
-COMSPEC has a high degree of variability among users, leading to
-portability concerns. Besides, perl can use a shell that may not be
-fit for interactive use, and setting COMSPEC to such a shell may
-interfere with the proper functioning of other programs (which usually
-look in COMSPEC to find a shell fit for interactive use).
-
-=item PERL_DEBUG_MSTATS
-
-Relevant only if perl is compiled with the malloc included with the perl
-distribution (that is, if C<perl -V:d_mymalloc> is 'define').
-If set, this causes memory statistics to be dumped after execution. If set
-to an integer greater than one, also causes memory statistics to be dumped
-after compilation.
-
-=item PERL_DESTRUCT_LEVEL
-
-Relevant only if your perl executable was built with B<-DDEBUGGING>,
-this controls the behavior of global destruction of objects and other
-references.
-
-=item PERL_ROOT (specific to the VMS port)
-
-A translation concealed rooted logical name that contains perl and the
-logical device for the @INC path on VMS only. Other logical names that
-affect perl on VMS include PERLSHR, PERL_ENV_TABLES, and
-SYS$TIMEZONE_DIFFERENTIAL but are optional and discussed further in
-L<perlvms> and in F<README.vms> in the Perl source distribution.
-
-=item SYS$LOGIN (specific to the VMS port)
-
-Used if chdir has no argument and HOME and LOGDIR are not set.
-
-=back
-
-Perl also has environment variables that control how Perl handles data
-specific to particular natural languages. See L<perllocale>.
-
-Apart from these, Perl uses no other environment variables, except
-to make them available to the program being executed, and to child
-processes. However, programs running setuid would do well to execute
-the following lines before doing anything else, just to keep people
-honest:
-
- $ENV{PATH} = '/bin:/usr/bin'; # or whatever you need
- $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL};
- delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
diff --git a/contrib/perl5/pod/perlsec.pod b/contrib/perl5/pod/perlsec.pod
deleted file mode 100644
index 3870c2e..0000000
--- a/contrib/perl5/pod/perlsec.pod
+++ /dev/null
@@ -1,365 +0,0 @@
-=head1 NAME
-
-perlsec - Perl security
-
-=head1 DESCRIPTION
-
-Perl is designed to make it easy to program securely even when running
-with extra privileges, like setuid or setgid programs. Unlike most
-command line shells, which are based on multiple substitution passes on
-each line of the script, Perl uses a more conventional evaluation scheme
-with fewer hidden snags. Additionally, because the language has more
-builtin functionality, it can rely less upon external (and possibly
-untrustworthy) programs to accomplish its purposes.
-
-Perl automatically enables a set of special security checks, called I<taint
-mode>, when it detects its program running with differing real and effective
-user or group IDs. The setuid bit in Unix permissions is mode 04000, the
-setgid bit mode 02000; either or both may be set. You can also enable taint
-mode explicitly by using the B<-T> command line flag. This flag is
-I<strongly> suggested for server programs and any program run on behalf of
-someone else, such as a CGI script. Once taint mode is on, it's on for
-the remainder of your script.
-
-While in this mode, Perl takes special precautions called I<taint
-checks> to prevent both obvious and subtle traps. Some of these checks
-are reasonably simple, such as verifying that path directories aren't
-writable by others; careful programmers have always used checks like
-these. Other checks, however, are best supported by the language itself,
-and it is these checks especially that contribute to making a set-id Perl
-program more secure than the corresponding C program.
-
-You may not use data derived from outside your program to affect
-something else outside your program--at least, not by accident. All
-command line arguments, environment variables, locale information (see
-L<perllocale>), results of certain system calls (readdir(),
-readlink(), the variable of shmread(), the messages returned by
-msgrcv(), the password, gcos and shell fields returned by the
-getpwxxx() calls), and all file input are marked as "tainted".
-Tainted data may not be used directly or indirectly in any command
-that invokes a sub-shell, nor in any command that modifies files,
-directories, or processes, B<with the following exceptions>:
-
-=over 4
-
-=item *
-
-If you pass a list of arguments to either C<system> or C<exec>,
-the elements of that list are B<not> checked for taintedness.
-
-=item *
-
-Arguments to C<print> and C<syswrite> are B<not> checked for taintedness.
-
-=back
-
-Any variable set to a value
-derived from tainted data will itself be tainted, even if it is
-logically impossible for the tainted data to alter the variable.
-Because taintedness is associated with each scalar value, some
-elements of an array can be tainted and others not.
-
-For example:
-
- $arg = shift; # $arg is tainted
- $hid = $arg, 'bar'; # $hid is also tainted
- $line = <>; # Tainted
- $line = <STDIN>; # Also tainted
- open FOO, "/home/me/bar" or die $!;
- $line = <FOO>; # Still tainted
- $path = $ENV{'PATH'}; # Tainted, but see below
- $data = 'abc'; # Not tainted
-
- system "echo $arg"; # Insecure
- system "/bin/echo", $arg; # Secure (doesn't use sh)
- system "echo $hid"; # Insecure
- system "echo $data"; # Insecure until PATH set
-
- $path = $ENV{'PATH'}; # $path now tainted
-
- $ENV{'PATH'} = '/bin:/usr/bin';
- delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
-
- $path = $ENV{'PATH'}; # $path now NOT tainted
- system "echo $data"; # Is secure now!
-
- open(FOO, "< $arg"); # OK - read-only file
- open(FOO, "> $arg"); # Not OK - trying to write
-
- open(FOO,"echo $arg|"); # Not OK, but...
- open(FOO,"-|")
- or exec 'echo', $arg; # OK
-
- $shout = `echo $arg`; # Insecure, $shout now tainted
-
- unlink $data, $arg; # Insecure
- umask $arg; # Insecure
-
- exec "echo $arg"; # Insecure
- exec "echo", $arg; # Secure (doesn't use the shell)
- exec "sh", '-c', $arg; # Considered secure, alas!
-
- @files = <*.c>; # insecure (uses readdir() or similar)
- @files = glob('*.c'); # insecure (uses readdir() or similar)
-
-If you try to do something insecure, you will get a fatal error saying
-something like "Insecure dependency" or "Insecure $ENV{PATH}". Note that you
-can still write an insecure B<system> or B<exec>, but only by explicitly
-doing something like the "considered secure" example above.
-
-=head2 Laundering and Detecting Tainted Data
-
-To test whether a variable contains tainted data, and whose use would thus
-trigger an "Insecure dependency" message, check your nearby CPAN mirror
-for the F<Taint.pm> module, which should become available around November
-1997. Or you may be able to use the following I<is_tainted()> function.
-
- sub is_tainted {
- return ! eval {
- join('',@_), kill 0;
- 1;
- };
- }
-
-This function makes use of the fact that the presence of tainted data
-anywhere within an expression renders the entire expression tainted. It
-would be inefficient for every operator to test every argument for
-taintedness. Instead, the slightly more efficient and conservative
-approach is used that if any tainted value has been accessed within the
-same expression, the whole expression is considered tainted.
-
-But testing for taintedness gets you only so far. Sometimes you have just
-to clear your data's taintedness. The only way to bypass the tainting
-mechanism is by referencing subpatterns from a regular expression match.
-Perl presumes that if you reference a substring using $1, $2, etc., that
-you knew what you were doing when you wrote the pattern. That means using
-a bit of thought--don't just blindly untaint anything, or you defeat the
-entire mechanism. It's better to verify that the variable has only good
-characters (for certain values of "good") rather than checking whether it
-has any bad characters. That's because it's far too easy to miss bad
-characters that you never thought of.
-
-Here's a test to make sure that the data contains nothing but "word"
-characters (alphabetics, numerics, and underscores), a hyphen, an at sign,
-or a dot.
-
- if ($data =~ /^([-\@\w.]+)$/) {
- $data = $1; # $data now untainted
- } else {
- die "Bad data in $data"; # log this somewhere
- }
-
-This is fairly secure because C</\w+/> doesn't normally match shell
-metacharacters, nor are dot, dash, or at going to mean something special
-to the shell. Use of C</.+/> would have been insecure in theory because
-it lets everything through, but Perl doesn't check for that. The lesson
-is that when untainting, you must be exceedingly careful with your patterns.
-Laundering data using regular expression is the I<only> mechanism for
-untainting dirty data, unless you use the strategy detailed below to fork
-a child of lesser privilege.
-
-The example does not untaint $data if C<use locale> is in effect,
-because the characters matched by C<\w> are determined by the locale.
-Perl considers that locale definitions are untrustworthy because they
-contain data from outside the program. If you are writing a
-locale-aware program, and want to launder data with a regular expression
-containing C<\w>, put C<no locale> ahead of the expression in the same
-block. See L<perllocale/SECURITY> for further discussion and examples.
-
-=head2 Switches On the "#!" Line
-
-When you make a script executable, in order to make it usable as a
-command, the system will pass switches to perl from the script's #!
-line. Perl checks that any command line switches given to a setuid
-(or setgid) script actually match the ones set on the #! line. Some
-Unix and Unix-like environments impose a one-switch limit on the #!
-line, so you may need to use something like C<-wU> instead of C<-w -U>
-under such systems. (This issue should arise only in Unix or
-Unix-like environments that support #! and setuid or setgid scripts.)
-
-=head2 Cleaning Up Your Path
-
-For "Insecure C<$ENV{PATH}>" messages, you need to set C<$ENV{'PATH'}> to a
-known value, and each directory in the path must be non-writable by others
-than its owner and group. You may be surprised to get this message even
-if the pathname to your executable is fully qualified. This is I<not>
-generated because you didn't supply a full path to the program; instead,
-it's generated because you never set your PATH environment variable, or
-you didn't set it to something that was safe. Because Perl can't
-guarantee that the executable in question isn't itself going to turn
-around and execute some other program that is dependent on your PATH, it
-makes sure you set the PATH.
-
-The PATH isn't the only environment variable which can cause problems.
-Because some shells may use the variables IFS, CDPATH, ENV, and
-BASH_ENV, Perl checks that those are either empty or untainted when
-starting subprocesses. You may wish to add something like this to your
-setid and taint-checking scripts.
-
- delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer
-
-It's also possible to get into trouble with other operations that don't
-care whether they use tainted values. Make judicious use of the file
-tests in dealing with any user-supplied filenames. When possible, do
-opens and such B<after> properly dropping any special user (or group!)
-privileges. Perl doesn't prevent you from opening tainted filenames for reading,
-so be careful what you print out. The tainting mechanism is intended to
-prevent stupid mistakes, not to remove the need for thought.
-
-Perl does not call the shell to expand wild cards when you pass B<system>
-and B<exec> explicit parameter lists instead of strings with possible shell
-wildcards in them. Unfortunately, the B<open>, B<glob>, and
-backtick functions provide no such alternate calling convention, so more
-subterfuge will be required.
-
-Perl provides a reasonably safe way to open a file or pipe from a setuid
-or setgid program: just create a child process with reduced privilege who
-does the dirty work for you. First, fork a child using the special
-B<open> syntax that connects the parent and child by a pipe. Now the
-child resets its ID set and any other per-process attributes, like
-environment variables, umasks, current working directories, back to the
-originals or known safe values. Then the child process, which no longer
-has any special permissions, does the B<open> or other system call.
-Finally, the child passes the data it managed to access back to the
-parent. Because the file or pipe was opened in the child while running
-under less privilege than the parent, it's not apt to be tricked into
-doing something it shouldn't.
-
-Here's a way to do backticks reasonably safely. Notice how the B<exec> is
-not called with a string that the shell could expand. This is by far the
-best way to call something that might be subjected to shell escapes: just
-never call the shell at all.
-
- use English;
- die "Can't fork: $!" unless defined($pid = open(KID, "-|"));
- if ($pid) { # parent
- while (<KID>) {
- # do something
- }
- close KID;
- } else {
- my @temp = ($EUID, $EGID);
- my $orig_uid = $UID;
- my $orig_gid = $GID;
- $EUID = $UID;
- $EGID = $GID;
- # Drop privileges
- $UID = $orig_uid;
- $GID = $orig_gid;
- # Make sure privs are really gone
- ($EUID, $EGID) = @temp;
- die "Can't drop privileges"
- unless $UID == $EUID && $GID eq $EGID;
- $ENV{PATH} = "/bin:/usr/bin"; # Minimal PATH.
- # Consider sanitizing the environment even more.
- exec 'myprog', 'arg1', 'arg2'
- or die "can't exec myprog: $!";
- }
-
-A similar strategy would work for wildcard expansion via C<glob>, although
-you can use C<readdir> instead.
-
-Taint checking is most useful when although you trust yourself not to have
-written a program to give away the farm, you don't necessarily trust those
-who end up using it not to try to trick it into doing something bad. This
-is the kind of security checking that's useful for set-id programs and
-programs launched on someone else's behalf, like CGI programs.
-
-This is quite different, however, from not even trusting the writer of the
-code not to try to do something evil. That's the kind of trust needed
-when someone hands you a program you've never seen before and says, "Here,
-run this." For that kind of safety, check out the Safe module,
-included standard in the Perl distribution. This module allows the
-programmer to set up special compartments in which all system operations
-are trapped and namespace access is carefully controlled.
-
-=head2 Security Bugs
-
-Beyond the obvious problems that stem from giving special privileges to
-systems as flexible as scripts, on many versions of Unix, set-id scripts
-are inherently insecure right from the start. The problem is a race
-condition in the kernel. Between the time the kernel opens the file to
-see which interpreter to run and when the (now-set-id) interpreter turns
-around and reopens the file to interpret it, the file in question may have
-changed, especially if you have symbolic links on your system.
-
-Fortunately, sometimes this kernel "feature" can be disabled.
-Unfortunately, there are two ways to disable it. The system can simply
-outlaw scripts with any set-id bit set, which doesn't help much.
-Alternately, it can simply ignore the set-id bits on scripts. If the
-latter is true, Perl can emulate the setuid and setgid mechanism when it
-notices the otherwise useless setuid/gid bits on Perl scripts. It does
-this via a special executable called B<suidperl> that is automatically
-invoked for you if it's needed.
-
-However, if the kernel set-id script feature isn't disabled, Perl will
-complain loudly that your set-id script is insecure. You'll need to
-either disable the kernel set-id script feature, or put a C wrapper around
-the script. A C wrapper is just a compiled program that does nothing
-except call your Perl program. Compiled programs are not subject to the
-kernel bug that plagues set-id scripts. Here's a simple wrapper, written
-in C:
-
- #define REAL_PATH "/path/to/script"
- main(ac, av)
- char **av;
- {
- execv(REAL_PATH, av);
- }
-
-Compile this wrapper into a binary executable and then make I<it> rather
-than your script setuid or setgid.
-
-In recent years, vendors have begun to supply systems free of this
-inherent security bug. On such systems, when the kernel passes the name
-of the set-id script to open to the interpreter, rather than using a
-pathname subject to meddling, it instead passes I</dev/fd/3>. This is a
-special file already opened on the script, so that there can be no race
-condition for evil scripts to exploit. On these systems, Perl should be
-compiled with C<-DSETUID_SCRIPTS_ARE_SECURE_NOW>. The B<Configure>
-program that builds Perl tries to figure this out for itself, so you
-should never have to specify this yourself. Most modern releases of
-SysVr4 and BSD 4.4 use this approach to avoid the kernel race condition.
-
-Prior to release 5.6.1 of Perl, bugs in the code of B<suidperl> could
-introduce a security hole.
-
-=head2 Protecting Your Programs
-
-There are a number of ways to hide the source to your Perl programs,
-with varying levels of "security".
-
-First of all, however, you I<can't> take away read permission, because
-the source code has to be readable in order to be compiled and
-interpreted. (That doesn't mean that a CGI script's source is
-readable by people on the web, though.) So you have to leave the
-permissions at the socially friendly 0755 level. This lets
-people on your local system only see your source.
-
-Some people mistakenly regard this as a security problem. If your program does
-insecure things, and relies on people not knowing how to exploit those
-insecurities, it is not secure. It is often possible for someone to
-determine the insecure things and exploit them without viewing the
-source. Security through obscurity, the name for hiding your bugs
-instead of fixing them, is little security indeed.
-
-You can try using encryption via source filters (Filter::* from CPAN).
-But crackers might be able to decrypt it. You can try using the
-byte code compiler and interpreter described below, but crackers might
-be able to de-compile it. You can try using the native-code compiler
-described below, but crackers might be able to disassemble it. These
-pose varying degrees of difficulty to people wanting to get at your
-code, but none can definitively conceal it (this is true of every
-language, not just Perl).
-
-If you're concerned about people profiting from your code, then the
-bottom line is that nothing but a restrictive licence will give you
-legal security. License your software and pepper it with threatening
-statements like "This is unpublished proprietary software of XYZ Corp.
-Your access to it does not give you permission to use it blah blah
-blah." You should see a lawyer to be sure your licence's wording will
-stand up in court.
-
-=head1 SEE ALSO
-
-L<perlrun> for its description of cleaning up environment variables.
diff --git a/contrib/perl5/pod/perlstyle.pod b/contrib/perl5/pod/perlstyle.pod
deleted file mode 100644
index bfe5b76..0000000
--- a/contrib/perl5/pod/perlstyle.pod
+++ /dev/null
@@ -1,277 +0,0 @@
-=head1 NAME
-
-perlstyle - Perl style guide
-
-=head1 DESCRIPTION
-
-Each programmer will, of course, have his or her own preferences in
-regards to formatting, but there are some general guidelines that will
-make your programs easier to read, understand, and maintain.
-
-The most important thing is to run your programs under the B<-w>
-flag at all times. You may turn it off explicitly for particular
-portions of code via the C<use warnings> pragma or the C<$^W> variable
-if you must. You should
-also always run under C<use strict> or know the reason why not.
-The C<use sigtrap> and even C<use diagnostics> pragmas may also prove
-useful.
-
-Regarding aesthetics of code lay out, about the only thing Larry
-cares strongly about is that the closing curly bracket of
-a multi-line BLOCK should line up with the keyword that started the construct.
-Beyond that, he has other preferences that aren't so strong:
-
-=over 4
-
-=item *
-
-4-column indent.
-
-=item *
-
-Opening curly on same line as keyword, if possible, otherwise line up.
-
-=item *
-
-Space before the opening curly of a multi-line BLOCK.
-
-=item *
-
-One-line BLOCK may be put on one line, including curlies.
-
-=item *
-
-No space before the semicolon.
-
-=item *
-
-Semicolon omitted in "short" one-line BLOCK.
-
-=item *
-
-Space around most operators.
-
-=item *
-
-Space around a "complex" subscript (inside brackets).
-
-=item *
-
-Blank lines between chunks that do different things.
-
-=item *
-
-Uncuddled elses.
-
-=item *
-
-No space between function name and its opening parenthesis.
-
-=item *
-
-Space after each comma.
-
-=item *
-
-Long lines broken after an operator (except "and" and "or").
-
-=item *
-
-Space after last parenthesis matching on current line.
-
-=item *
-
-Line up corresponding items vertically.
-
-=item *
-
-Omit redundant punctuation as long as clarity doesn't suffer.
-
-=back
-
-Larry has his reasons for each of these things, but he doesn't claim that
-everyone else's mind works the same as his does.
-
-Here are some other more substantive style issues to think about:
-
-=over 4
-
-=item *
-
-Just because you I<CAN> do something a particular way doesn't mean that
-you I<SHOULD> do it that way. Perl is designed to give you several
-ways to do anything, so consider picking the most readable one. For
-instance
-
- open(FOO,$foo) || die "Can't open $foo: $!";
-
-is better than
-
- die "Can't open $foo: $!" unless open(FOO,$foo);
-
-because the second way hides the main point of the statement in a
-modifier. On the other hand
-
- print "Starting analysis\n" if $verbose;
-
-is better than
-
- $verbose && print "Starting analysis\n";
-
-because the main point isn't whether the user typed B<-v> or not.
-
-Similarly, just because an operator lets you assume default arguments
-doesn't mean that you have to make use of the defaults. The defaults
-are there for lazy systems programmers writing one-shot programs. If
-you want your program to be readable, consider supplying the argument.
-
-Along the same lines, just because you I<CAN> omit parentheses in many
-places doesn't mean that you ought to:
-
- return print reverse sort num values %array;
- return print(reverse(sort num (values(%array))));
-
-When in doubt, parenthesize. At the very least it will let some poor
-schmuck bounce on the % key in B<vi>.
-
-Even if you aren't in doubt, consider the mental welfare of the person
-who has to maintain the code after you, and who will probably put
-parentheses in the wrong place.
-
-=item *
-
-Don't go through silly contortions to exit a loop at the top or the
-bottom, when Perl provides the C<last> operator so you can exit in
-the middle. Just "outdent" it a little to make it more visible:
-
- LINE:
- for (;;) {
- statements;
- last LINE if $foo;
- next LINE if /^#/;
- statements;
- }
-
-=item *
-
-Don't be afraid to use loop labels--they're there to enhance
-readability as well as to allow multilevel loop breaks. See the
-previous example.
-
-=item *
-
-Avoid using grep() (or map()) or `backticks` in a void context, that is,
-when you just throw away their return values. Those functions all
-have return values, so use them. Otherwise use a foreach() loop or
-the system() function instead.
-
-=item *
-
-For portability, when using features that may not be implemented on
-every machine, test the construct in an eval to see if it fails. If
-you know what version or patchlevel a particular feature was
-implemented, you can test C<$]> (C<$PERL_VERSION> in C<English>) to see if it
-will be there. The C<Config> module will also let you interrogate values
-determined by the B<Configure> program when Perl was installed.
-
-=item *
-
-Choose mnemonic identifiers. If you can't remember what mnemonic means,
-you've got a problem.
-
-=item *
-
-While short identifiers like $gotit are probably ok, use underscores to
-separate words. It is generally easier to read $var_names_like_this than
-$VarNamesLikeThis, especially for non-native speakers of English. It's
-also a simple rule that works consistently with VAR_NAMES_LIKE_THIS.
-
-Package names are sometimes an exception to this rule. Perl informally
-reserves lowercase module names for "pragma" modules like C<integer> and
-C<strict>. Other modules should begin with a capital letter and use mixed
-case, but probably without underscores due to limitations in primitive
-file systems' representations of module names as files that must fit into a
-few sparse bytes.
-
-=item *
-
-You may find it helpful to use letter case to indicate the scope
-or nature of a variable. For example:
-
- $ALL_CAPS_HERE constants only (beware clashes with perl vars!)
- $Some_Caps_Here package-wide global/static
- $no_caps_here function scope my() or local() variables
-
-Function and method names seem to work best as all lowercase.
-E.g., $obj-E<gt>as_string().
-
-You can use a leading underscore to indicate that a variable or
-function should not be used outside the package that defined it.
-
-=item *
-
-If you have a really hairy regular expression, use the C</x> modifier and
-put in some whitespace to make it look a little less like line noise.
-Don't use slash as a delimiter when your regexp has slashes or backslashes.
-
-=item *
-
-Use the new "and" and "or" operators to avoid having to parenthesize
-list operators so much, and to reduce the incidence of punctuation
-operators like C<&&> and C<||>. Call your subroutines as if they were
-functions or list operators to avoid excessive ampersands and parentheses.
-
-=item *
-
-Use here documents instead of repeated print() statements.
-
-=item *
-
-Line up corresponding things vertically, especially if it'd be too long
-to fit on one line anyway.
-
- $IDX = $ST_MTIME;
- $IDX = $ST_ATIME if $opt_u;
- $IDX = $ST_CTIME if $opt_c;
- $IDX = $ST_SIZE if $opt_s;
-
- mkdir $tmpdir, 0700 or die "can't mkdir $tmpdir: $!";
- chdir($tmpdir) or die "can't chdir $tmpdir: $!";
- mkdir 'tmp', 0777 or die "can't mkdir $tmpdir/tmp: $!";
-
-=item *
-
-Always check the return codes of system calls. Good error messages should
-go to STDERR, include which program caused the problem, what the failed
-system call and arguments were, and (VERY IMPORTANT) should contain the
-standard system error message for what went wrong. Here's a simple but
-sufficient example:
-
- opendir(D, $dir) or die "can't opendir $dir: $!";
-
-=item *
-
-Line up your transliterations when it makes sense:
-
- tr [abc]
- [xyz];
-
-=item *
-
-Think about reusability. Why waste brainpower on a one-shot when you
-might want to do something like it again? Consider generalizing your
-code. Consider writing a module or object class. Consider making your
-code run cleanly with C<use strict> and C<use warnings> (or B<-w>) in effect
-Consider giving away
-your code. Consider changing your whole world view. Consider... oh,
-never mind.
-
-=item *
-
-Be consistent.
-
-=item *
-
-Be nice.
-
-=back
diff --git a/contrib/perl5/pod/perlsub.pod b/contrib/perl5/pod/perlsub.pod
deleted file mode 100644
index b440cd1..0000000
--- a/contrib/perl5/pod/perlsub.pod
+++ /dev/null
@@ -1,1278 +0,0 @@
-=head1 NAME
-
-perlsub - Perl subroutines
-
-=head1 SYNOPSIS
-
-To declare subroutines:
-
- sub NAME; # A "forward" declaration.
- sub NAME(PROTO); # ditto, but with prototypes
- sub NAME : ATTRS; # with attributes
- sub NAME(PROTO) : ATTRS; # with attributes and prototypes
-
- sub NAME BLOCK # A declaration and a definition.
- sub NAME(PROTO) BLOCK # ditto, but with prototypes
- sub NAME : ATTRS BLOCK # with attributes
- sub NAME(PROTO) : ATTRS BLOCK # with prototypes and attributes
-
-To define an anonymous subroutine at runtime:
-
- $subref = sub BLOCK; # no proto
- $subref = sub (PROTO) BLOCK; # with proto
- $subref = sub : ATTRS BLOCK; # with attributes
- $subref = sub (PROTO) : ATTRS BLOCK; # with proto and attributes
-
-To import subroutines:
-
- use MODULE qw(NAME1 NAME2 NAME3);
-
-To call subroutines:
-
- NAME(LIST); # & is optional with parentheses.
- NAME LIST; # Parentheses optional if predeclared/imported.
- &NAME(LIST); # Circumvent prototypes.
- &NAME; # Makes current @_ visible to called subroutine.
-
-=head1 DESCRIPTION
-
-Like many languages, Perl provides for user-defined subroutines.
-These may be located anywhere in the main program, loaded in from
-other files via the C<do>, C<require>, or C<use> keywords, or
-generated on the fly using C<eval> or anonymous subroutines.
-You can even call a function indirectly using a variable containing
-its name or a CODE reference.
-
-The Perl model for function call and return values is simple: all
-functions are passed as parameters one single flat list of scalars, and
-all functions likewise return to their caller one single flat list of
-scalars. Any arrays or hashes in these call and return lists will
-collapse, losing their identities--but you may always use
-pass-by-reference instead to avoid this. Both call and return lists may
-contain as many or as few scalar elements as you'd like. (Often a
-function without an explicit return statement is called a subroutine, but
-there's really no difference from Perl's perspective.)
-
-Any arguments passed in show up in the array C<@_>. Therefore, if
-you called a function with two arguments, those would be stored in
-C<$_[0]> and C<$_[1]>. The array C<@_> is a local array, but its
-elements are aliases for the actual scalar parameters. In particular,
-if an element C<$_[0]> is updated, the corresponding argument is
-updated (or an error occurs if it is not updatable). If an argument
-is an array or hash element which did not exist when the function
-was called, that element is created only when (and if) it is modified
-or a reference to it is taken. (Some earlier versions of Perl
-created the element whether or not the element was assigned to.)
-Assigning to the whole array C<@_> removes that aliasing, and does
-not update any arguments.
-
-The return value of a subroutine is the value of the last expression
-evaluated. More explicitly, a C<return> statement may be used to exit the
-subroutine, optionally specifying the returned value, which will be
-evaluated in the appropriate context (list, scalar, or void) depending
-on the context of the subroutine call. If you specify no return value,
-the subroutine returns an empty list in list context, the undefined
-value in scalar context, or nothing in void context. If you return
-one or more aggregates (arrays and hashes), these will be flattened
-together into one large indistinguishable list.
-
-Perl does not have named formal parameters. In practice all you
-do is assign to a C<my()> list of these. Variables that aren't
-declared to be private are global variables. For gory details
-on creating private variables, see L<"Private Variables via my()">
-and L<"Temporary Values via local()">. To create protected
-environments for a set of functions in a separate package (and
-probably a separate file), see L<perlmod/"Packages">.
-
-Example:
-
- sub max {
- my $max = shift(@_);
- foreach $foo (@_) {
- $max = $foo if $max < $foo;
- }
- return $max;
- }
- $bestday = max($mon,$tue,$wed,$thu,$fri);
-
-Example:
-
- # get a line, combining continuation lines
- # that start with whitespace
-
- sub get_line {
- $thisline = $lookahead; # global variables!
- LINE: while (defined($lookahead = <STDIN>)) {
- if ($lookahead =~ /^[ \t]/) {
- $thisline .= $lookahead;
- }
- else {
- last LINE;
- }
- }
- return $thisline;
- }
-
- $lookahead = <STDIN>; # get first line
- while (defined($line = get_line())) {
- ...
- }
-
-Assigning to a list of private variables to name your arguments:
-
- sub maybeset {
- my($key, $value) = @_;
- $Foo{$key} = $value unless $Foo{$key};
- }
-
-Because the assignment copies the values, this also has the effect
-of turning call-by-reference into call-by-value. Otherwise a
-function is free to do in-place modifications of C<@_> and change
-its caller's values.
-
- upcase_in($v1, $v2); # this changes $v1 and $v2
- sub upcase_in {
- for (@_) { tr/a-z/A-Z/ }
- }
-
-You aren't allowed to modify constants in this way, of course. If an
-argument were actually literal and you tried to change it, you'd take a
-(presumably fatal) exception. For example, this won't work:
-
- upcase_in("frederick");
-
-It would be much safer if the C<upcase_in()> function
-were written to return a copy of its parameters instead
-of changing them in place:
-
- ($v3, $v4) = upcase($v1, $v2); # this doesn't change $v1 and $v2
- sub upcase {
- return unless defined wantarray; # void context, do nothing
- my @parms = @_;
- for (@parms) { tr/a-z/A-Z/ }
- return wantarray ? @parms : $parms[0];
- }
-
-Notice how this (unprototyped) function doesn't care whether it was
-passed real scalars or arrays. Perl sees all arguments as one big,
-long, flat parameter list in C<@_>. This is one area where
-Perl's simple argument-passing style shines. The C<upcase()>
-function would work perfectly well without changing the C<upcase()>
-definition even if we fed it things like this:
-
- @newlist = upcase(@list1, @list2);
- @newlist = upcase( split /:/, $var );
-
-Do not, however, be tempted to do this:
-
- (@a, @b) = upcase(@list1, @list2);
-
-Like the flattened incoming parameter list, the return list is also
-flattened on return. So all you have managed to do here is stored
-everything in C<@a> and made C<@b> an empty list. See
-L<Pass by Reference> for alternatives.
-
-A subroutine may be called using an explicit C<&> prefix. The
-C<&> is optional in modern Perl, as are parentheses if the
-subroutine has been predeclared. The C<&> is I<not> optional
-when just naming the subroutine, such as when it's used as
-an argument to defined() or undef(). Nor is it optional when you
-want to do an indirect subroutine call with a subroutine name or
-reference using the C<&$subref()> or C<&{$subref}()> constructs,
-although the C<< $subref->() >> notation solves that problem.
-See L<perlref> for more about all that.
-
-Subroutines may be called recursively. If a subroutine is called
-using the C<&> form, the argument list is optional, and if omitted,
-no C<@_> array is set up for the subroutine: the C<@_> array at the
-time of the call is visible to subroutine instead. This is an
-efficiency mechanism that new users may wish to avoid.
-
- &foo(1,2,3); # pass three arguments
- foo(1,2,3); # the same
-
- foo(); # pass a null list
- &foo(); # the same
-
- &foo; # foo() get current args, like foo(@_) !!
- foo; # like foo() IFF sub foo predeclared, else "foo"
-
-Not only does the C<&> form make the argument list optional, it also
-disables any prototype checking on arguments you do provide. This
-is partly for historical reasons, and partly for having a convenient way
-to cheat if you know what you're doing. See L<Prototypes> below.
-
-Functions whose names are in all upper case are reserved to the Perl
-core, as are modules whose names are in all lower case. A
-function in all capitals is a loosely-held convention meaning it
-will be called indirectly by the run-time system itself, usually
-due to a triggered event. Functions that do special, pre-defined
-things include C<BEGIN>, C<CHECK>, C<INIT>, C<END>, C<AUTOLOAD>, and
-C<DESTROY>--plus all functions mentioned in L<perltie>.
-
-=head2 Private Variables via my()
-
-Synopsis:
-
- my $foo; # declare $foo lexically local
- my (@wid, %get); # declare list of variables local
- my $foo = "flurp"; # declare $foo lexical, and init it
- my @oof = @bar; # declare @oof lexical, and init it
- my $x : Foo = $y; # similar, with an attribute applied
-
-B<WARNING>: The use of attribute lists on C<my> declarations is
-experimental. This feature should not be relied upon. It may
-change or disappear in future releases of Perl. See L<attributes>.
-
-The C<my> operator declares the listed variables to be lexically
-confined to the enclosing block, conditional (C<if/unless/elsif/else>),
-loop (C<for/foreach/while/until/continue>), subroutine, C<eval>,
-or C<do/require/use>'d file. If more than one value is listed, the
-list must be placed in parentheses. All listed elements must be
-legal lvalues. Only alphanumeric identifiers may be lexically
-scoped--magical built-ins like C<$/> must currently be C<local>ize
-with C<local> instead.
-
-Unlike dynamic variables created by the C<local> operator, lexical
-variables declared with C<my> are totally hidden from the outside
-world, including any called subroutines. This is true if it's the
-same subroutine called from itself or elsewhere--every call gets
-its own copy.
-
-This doesn't mean that a C<my> variable declared in a statically
-enclosing lexical scope would be invisible. Only dynamic scopes
-are cut off. For example, the C<bumpx()> function below has access
-to the lexical $x variable because both the C<my> and the C<sub>
-occurred at the same scope, presumably file scope.
-
- my $x = 10;
- sub bumpx { $x++ }
-
-An C<eval()>, however, can see lexical variables of the scope it is
-being evaluated in, so long as the names aren't hidden by declarations within
-the C<eval()> itself. See L<perlref>.
-
-The parameter list to my() may be assigned to if desired, which allows you
-to initialize your variables. (If no initializer is given for a
-particular variable, it is created with the undefined value.) Commonly
-this is used to name input parameters to a subroutine. Examples:
-
- $arg = "fred"; # "global" variable
- $n = cube_root(27);
- print "$arg thinks the root is $n\n";
- fred thinks the root is 3
-
- sub cube_root {
- my $arg = shift; # name doesn't matter
- $arg **= 1/3;
- return $arg;
- }
-
-The C<my> is simply a modifier on something you might assign to. So when
-you do assign to variables in its argument list, C<my> doesn't
-change whether those variables are viewed as a scalar or an array. So
-
- my ($foo) = <STDIN>; # WRONG?
- my @FOO = <STDIN>;
-
-both supply a list context to the right-hand side, while
-
- my $foo = <STDIN>;
-
-supplies a scalar context. But the following declares only one variable:
-
- my $foo, $bar = 1; # WRONG
-
-That has the same effect as
-
- my $foo;
- $bar = 1;
-
-The declared variable is not introduced (is not visible) until after
-the current statement. Thus,
-
- my $x = $x;
-
-can be used to initialize a new $x with the value of the old $x, and
-the expression
-
- my $x = 123 and $x == 123
-
-is false unless the old $x happened to have the value C<123>.
-
-Lexical scopes of control structures are not bounded precisely by the
-braces that delimit their controlled blocks; control expressions are
-part of that scope, too. Thus in the loop
-
- while (my $line = <>) {
- $line = lc $line;
- } continue {
- print $line;
- }
-
-the scope of $line extends from its declaration throughout the rest of
-the loop construct (including the C<continue> clause), but not beyond
-it. Similarly, in the conditional
-
- if ((my $answer = <STDIN>) =~ /^yes$/i) {
- user_agrees();
- } elsif ($answer =~ /^no$/i) {
- user_disagrees();
- } else {
- chomp $answer;
- die "'$answer' is neither 'yes' nor 'no'";
- }
-
-the scope of $answer extends from its declaration through the rest
-of that conditional, including any C<elsif> and C<else> clauses,
-but not beyond it.
-
-None of the foregoing text applies to C<if/unless> or C<while/until>
-modifiers appended to simple statements. Such modifiers are not
-control structures and have no effect on scoping.
-
-The C<foreach> loop defaults to scoping its index variable dynamically
-in the manner of C<local>. However, if the index variable is
-prefixed with the keyword C<my>, or if there is already a lexical
-by that name in scope, then a new lexical is created instead. Thus
-in the loop
-
- for my $i (1, 2, 3) {
- some_function();
- }
-
-the scope of $i extends to the end of the loop, but not beyond it,
-rendering the value of $i inaccessible within C<some_function()>.
-
-Some users may wish to encourage the use of lexically scoped variables.
-As an aid to catching implicit uses to package variables,
-which are always global, if you say
-
- use strict 'vars';
-
-then any variable mentioned from there to the end of the enclosing
-block must either refer to a lexical variable, be predeclared via
-C<our> or C<use vars>, or else must be fully qualified with the package name.
-A compilation error results otherwise. An inner block may countermand
-this with C<no strict 'vars'>.
-
-A C<my> has both a compile-time and a run-time effect. At compile
-time, the compiler takes notice of it. The principal usefulness
-of this is to quiet C<use strict 'vars'>, but it is also essential
-for generation of closures as detailed in L<perlref>. Actual
-initialization is delayed until run time, though, so it gets executed
-at the appropriate time, such as each time through a loop, for
-example.
-
-Variables declared with C<my> are not part of any package and are therefore
-never fully qualified with the package name. In particular, you're not
-allowed to try to make a package variable (or other global) lexical:
-
- my $pack::var; # ERROR! Illegal syntax
- my $_; # also illegal (currently)
-
-In fact, a dynamic variable (also known as package or global variables)
-are still accessible using the fully qualified C<::> notation even while a
-lexical of the same name is also visible:
-
- package main;
- local $x = 10;
- my $x = 20;
- print "$x and $::x\n";
-
-That will print out C<20> and C<10>.
-
-You may declare C<my> variables at the outermost scope of a file
-to hide any such identifiers from the world outside that file. This
-is similar in spirit to C's static variables when they are used at
-the file level. To do this with a subroutine requires the use of
-a closure (an anonymous function that accesses enclosing lexicals).
-If you want to create a private subroutine that cannot be called
-from outside that block, it can declare a lexical variable containing
-an anonymous sub reference:
-
- my $secret_version = '1.001-beta';
- my $secret_sub = sub { print $secret_version };
- &$secret_sub();
-
-As long as the reference is never returned by any function within the
-module, no outside module can see the subroutine, because its name is not in
-any package's symbol table. Remember that it's not I<REALLY> called
-C<$some_pack::secret_version> or anything; it's just $secret_version,
-unqualified and unqualifiable.
-
-This does not work with object methods, however; all object methods
-have to be in the symbol table of some package to be found. See
-L<perlref/"Function Templates"> for something of a work-around to
-this.
-
-=head2 Persistent Private Variables
-
-Just because a lexical variable is lexically (also called statically)
-scoped to its enclosing block, C<eval>, or C<do> FILE, this doesn't mean that
-within a function it works like a C static. It normally works more
-like a C auto, but with implicit garbage collection.
-
-Unlike local variables in C or C++, Perl's lexical variables don't
-necessarily get recycled just because their scope has exited.
-If something more permanent is still aware of the lexical, it will
-stick around. So long as something else references a lexical, that
-lexical won't be freed--which is as it should be. You wouldn't want
-memory being free until you were done using it, or kept around once you
-were done. Automatic garbage collection takes care of this for you.
-
-This means that you can pass back or save away references to lexical
-variables, whereas to return a pointer to a C auto is a grave error.
-It also gives us a way to simulate C's function statics. Here's a
-mechanism for giving a function private variables with both lexical
-scoping and a static lifetime. If you do want to create something like
-C's static variables, just enclose the whole function in an extra block,
-and put the static variable outside the function but in the block.
-
- {
- my $secret_val = 0;
- sub gimme_another {
- return ++$secret_val;
- }
- }
- # $secret_val now becomes unreachable by the outside
- # world, but retains its value between calls to gimme_another
-
-If this function is being sourced in from a separate file
-via C<require> or C<use>, then this is probably just fine. If it's
-all in the main program, you'll need to arrange for the C<my>
-to be executed early, either by putting the whole block above
-your main program, or more likely, placing merely a C<BEGIN>
-sub around it to make sure it gets executed before your program
-starts to run:
-
- sub BEGIN {
- my $secret_val = 0;
- sub gimme_another {
- return ++$secret_val;
- }
- }
-
-See L<perlmod/"Package Constructors and Destructors"> about the
-special triggered functions, C<BEGIN>, C<CHECK>, C<INIT> and C<END>.
-
-If declared at the outermost scope (the file scope), then lexicals
-work somewhat like C's file statics. They are available to all
-functions in that same file declared below them, but are inaccessible
-from outside that file. This strategy is sometimes used in modules
-to create private variables that the whole module can see.
-
-=head2 Temporary Values via local()
-
-B<WARNING>: In general, you should be using C<my> instead of C<local>, because
-it's faster and safer. Exceptions to this include the global punctuation
-variables, filehandles and formats, and direct manipulation of the Perl
-symbol table itself. Format variables often use C<local> though, as do
-other variables whose current value must be visible to called
-subroutines.
-
-Synopsis:
-
- local $foo; # declare $foo dynamically local
- local (@wid, %get); # declare list of variables local
- local $foo = "flurp"; # declare $foo dynamic, and init it
- local @oof = @bar; # declare @oof dynamic, and init it
-
- local *FH; # localize $FH, @FH, %FH, &FH ...
- local *merlyn = *randal; # now $merlyn is really $randal, plus
- # @merlyn is really @randal, etc
- local *merlyn = 'randal'; # SAME THING: promote 'randal' to *randal
- local *merlyn = \$randal; # just alias $merlyn, not @merlyn etc
-
-A C<local> modifies its listed variables to be "local" to the
-enclosing block, C<eval>, or C<do FILE>--and to I<any subroutine
-called from within that block>. A C<local> just gives temporary
-values to global (meaning package) variables. It does I<not> create
-a local variable. This is known as dynamic scoping. Lexical scoping
-is done with C<my>, which works more like C's auto declarations.
-
-If more than one variable is given to C<local>, they must be placed in
-parentheses. All listed elements must be legal lvalues. This operator works
-by saving the current values of those variables in its argument list on a
-hidden stack and restoring them upon exiting the block, subroutine, or
-eval. This means that called subroutines can also reference the local
-variable, but not the global one. The argument list may be assigned to if
-desired, which allows you to initialize your local variables. (If no
-initializer is given for a particular variable, it is created with an
-undefined value.) Commonly this is used to name the parameters to a
-subroutine. Examples:
-
- for $i ( 0 .. 9 ) {
- $digits{$i} = $i;
- }
- # assume this function uses global %digits hash
- parse_num();
-
- # now temporarily add to %digits hash
- if ($base12) {
- # (NOTE: not claiming this is efficient!)
- local %digits = (%digits, 't' => 10, 'e' => 11);
- parse_num(); # parse_num gets this new %digits!
- }
- # old %digits restored here
-
-Because C<local> is a run-time operator, it gets executed each time
-through a loop. In releases of Perl previous to 5.0, this used more stack
-storage each time until the loop was exited. Perl now reclaims the space
-each time through, but it's still more efficient to declare your variables
-outside the loop.
-
-A C<local> is simply a modifier on an lvalue expression. When you assign to
-a C<local>ized variable, the C<local> doesn't change whether its list is viewed
-as a scalar or an array. So
-
- local($foo) = <STDIN>;
- local @FOO = <STDIN>;
-
-both supply a list context to the right-hand side, while
-
- local $foo = <STDIN>;
-
-supplies a scalar context.
-
-A note about C<local()> and composite types is in order. Something
-like C<local(%foo)> works by temporarily placing a brand new hash in
-the symbol table. The old hash is left alone, but is hidden "behind"
-the new one.
-
-This means the old variable is completely invisible via the symbol
-table (i.e. the hash entry in the C<*foo> typeglob) for the duration
-of the dynamic scope within which the C<local()> was seen. This
-has the effect of allowing one to temporarily occlude any magic on
-composite types. For instance, this will briefly alter a tied
-hash to some other implementation:
-
- tie %ahash, 'APackage';
- [...]
- {
- local %ahash;
- tie %ahash, 'BPackage';
- [..called code will see %ahash tied to 'BPackage'..]
- {
- local %ahash;
- [..%ahash is a normal (untied) hash here..]
- }
- }
- [..%ahash back to its initial tied self again..]
-
-As another example, a custom implementation of C<%ENV> might look
-like this:
-
- {
- local %ENV;
- tie %ENV, 'MyOwnEnv';
- [..do your own fancy %ENV manipulation here..]
- }
- [..normal %ENV behavior here..]
-
-It's also worth taking a moment to explain what happens when you
-C<local>ize a member of a composite type (i.e. an array or hash element).
-In this case, the element is C<local>ized I<by name>. This means that
-when the scope of the C<local()> ends, the saved value will be
-restored to the hash element whose key was named in the C<local()>, or
-the array element whose index was named in the C<local()>. If that
-element was deleted while the C<local()> was in effect (e.g. by a
-C<delete()> from a hash or a C<shift()> of an array), it will spring
-back into existence, possibly extending an array and filling in the
-skipped elements with C<undef>. For instance, if you say
-
- %hash = ( 'This' => 'is', 'a' => 'test' );
- @ary = ( 0..5 );
- {
- local($ary[5]) = 6;
- local($hash{'a'}) = 'drill';
- while (my $e = pop(@ary)) {
- print "$e . . .\n";
- last unless $e > 3;
- }
- if (@ary) {
- $hash{'only a'} = 'test';
- delete $hash{'a'};
- }
- }
- print join(' ', map { "$_ $hash{$_}" } sort keys %hash),".\n";
- print "The array has ",scalar(@ary)," elements: ",
- join(', ', map { defined $_ ? $_ : 'undef' } @ary),"\n";
-
-Perl will print
-
- 6 . . .
- 4 . . .
- 3 . . .
- This is a test only a test.
- The array has 6 elements: 0, 1, 2, undef, undef, 5
-
-The behavior of local() on non-existent members of composite
-types is subject to change in future.
-
-=head2 Lvalue subroutines
-
-B<WARNING>: Lvalue subroutines are still experimental and the implementation
-may change in future versions of Perl.
-
-It is possible to return a modifiable value from a subroutine.
-To do this, you have to declare the subroutine to return an lvalue.
-
- my $val;
- sub canmod : lvalue {
- $val;
- }
- sub nomod {
- $val;
- }
-
- canmod() = 5; # assigns to $val
- nomod() = 5; # ERROR
-
-The scalar/list context for the subroutine and for the right-hand
-side of assignment is determined as if the subroutine call is replaced
-by a scalar. For example, consider:
-
- data(2,3) = get_data(3,4);
-
-Both subroutines here are called in a scalar context, while in:
-
- (data(2,3)) = get_data(3,4);
-
-and in:
-
- (data(2),data(3)) = get_data(3,4);
-
-all the subroutines are called in a list context.
-
-=head2 Passing Symbol Table Entries (typeglobs)
-
-B<WARNING>: The mechanism described in this section was originally
-the only way to simulate pass-by-reference in older versions of
-Perl. While it still works fine in modern versions, the new reference
-mechanism is generally easier to work with. See below.
-
-Sometimes you don't want to pass the value of an array to a subroutine
-but rather the name of it, so that the subroutine can modify the global
-copy of it rather than working with a local copy. In perl you can
-refer to all objects of a particular name by prefixing the name
-with a star: C<*foo>. This is often known as a "typeglob", because the
-star on the front can be thought of as a wildcard match for all the
-funny prefix characters on variables and subroutines and such.
-
-When evaluated, the typeglob produces a scalar value that represents
-all the objects of that name, including any filehandle, format, or
-subroutine. When assigned to, it causes the name mentioned to refer to
-whatever C<*> value was assigned to it. Example:
-
- sub doubleary {
- local(*someary) = @_;
- foreach $elem (@someary) {
- $elem *= 2;
- }
- }
- doubleary(*foo);
- doubleary(*bar);
-
-Scalars are already passed by reference, so you can modify
-scalar arguments without using this mechanism by referring explicitly
-to C<$_[0]> etc. You can modify all the elements of an array by passing
-all the elements as scalars, but you have to use the C<*> mechanism (or
-the equivalent reference mechanism) to C<push>, C<pop>, or change the size of
-an array. It will certainly be faster to pass the typeglob (or reference).
-
-Even if you don't want to modify an array, this mechanism is useful for
-passing multiple arrays in a single LIST, because normally the LIST
-mechanism will merge all the array values so that you can't extract out
-the individual arrays. For more on typeglobs, see
-L<perldata/"Typeglobs and Filehandles">.
-
-=head2 When to Still Use local()
-
-Despite the existence of C<my>, there are still three places where the
-C<local> operator still shines. In fact, in these three places, you
-I<must> use C<local> instead of C<my>.
-
-=over 4
-
-=item 1.
-
-You need to give a global variable a temporary value, especially $_.
-
-The global variables, like C<@ARGV> or the punctuation variables, must be
-C<local>ized with C<local()>. This block reads in F</etc/motd>, and splits
-it up into chunks separated by lines of equal signs, which are placed
-in C<@Fields>.
-
- {
- local @ARGV = ("/etc/motd");
- local $/ = undef;
- local $_ = <>;
- @Fields = split /^\s*=+\s*$/;
- }
-
-It particular, it's important to C<local>ize $_ in any routine that assigns
-to it. Look out for implicit assignments in C<while> conditionals.
-
-=item 2.
-
-You need to create a local file or directory handle or a local function.
-
-A function that needs a filehandle of its own must use
-C<local()> on a complete typeglob. This can be used to create new symbol
-table entries:
-
- sub ioqueue {
- local (*READER, *WRITER); # not my!
- pipe (READER, WRITER); or die "pipe: $!";
- return (*READER, *WRITER);
- }
- ($head, $tail) = ioqueue();
-
-See the Symbol module for a way to create anonymous symbol table
-entries.
-
-Because assignment of a reference to a typeglob creates an alias, this
-can be used to create what is effectively a local function, or at least,
-a local alias.
-
- {
- local *grow = \&shrink; # only until this block exists
- grow(); # really calls shrink()
- move(); # if move() grow()s, it shrink()s too
- }
- grow(); # get the real grow() again
-
-See L<perlref/"Function Templates"> for more about manipulating
-functions by name in this way.
-
-=item 3.
-
-You want to temporarily change just one element of an array or hash.
-
-You can C<local>ize just one element of an aggregate. Usually this
-is done on dynamics:
-
- {
- local $SIG{INT} = 'IGNORE';
- funct(); # uninterruptible
- }
- # interruptibility automatically restored here
-
-But it also works on lexically declared aggregates. Prior to 5.005,
-this operation could on occasion misbehave.
-
-=back
-
-=head2 Pass by Reference
-
-If you want to pass more than one array or hash into a function--or
-return them from it--and have them maintain their integrity, then
-you're going to have to use an explicit pass-by-reference. Before you
-do that, you need to understand references as detailed in L<perlref>.
-This section may not make much sense to you otherwise.
-
-Here are a few simple examples. First, let's pass in several arrays
-to a function and have it C<pop> all of then, returning a new list
-of all their former last elements:
-
- @tailings = popmany ( \@a, \@b, \@c, \@d );
-
- sub popmany {
- my $aref;
- my @retlist = ();
- foreach $aref ( @_ ) {
- push @retlist, pop @$aref;
- }
- return @retlist;
- }
-
-Here's how you might write a function that returns a
-list of keys occurring in all the hashes passed to it:
-
- @common = inter( \%foo, \%bar, \%joe );
- sub inter {
- my ($k, $href, %seen); # locals
- foreach $href (@_) {
- while ( $k = each %$href ) {
- $seen{$k}++;
- }
- }
- return grep { $seen{$_} == @_ } keys %seen;
- }
-
-So far, we're using just the normal list return mechanism.
-What happens if you want to pass or return a hash? Well,
-if you're using only one of them, or you don't mind them
-concatenating, then the normal calling convention is ok, although
-a little expensive.
-
-Where people get into trouble is here:
-
- (@a, @b) = func(@c, @d);
-or
- (%a, %b) = func(%c, %d);
-
-That syntax simply won't work. It sets just C<@a> or C<%a> and
-clears the C<@b> or C<%b>. Plus the function didn't get passed
-into two separate arrays or hashes: it got one long list in C<@_>,
-as always.
-
-If you can arrange for everyone to deal with this through references, it's
-cleaner code, although not so nice to look at. Here's a function that
-takes two array references as arguments, returning the two array elements
-in order of how many elements they have in them:
-
- ($aref, $bref) = func(\@c, \@d);
- print "@$aref has more than @$bref\n";
- sub func {
- my ($cref, $dref) = @_;
- if (@$cref > @$dref) {
- return ($cref, $dref);
- } else {
- return ($dref, $cref);
- }
- }
-
-It turns out that you can actually do this also:
-
- (*a, *b) = func(\@c, \@d);
- print "@a has more than @b\n";
- sub func {
- local (*c, *d) = @_;
- if (@c > @d) {
- return (\@c, \@d);
- } else {
- return (\@d, \@c);
- }
- }
-
-Here we're using the typeglobs to do symbol table aliasing. It's
-a tad subtle, though, and also won't work if you're using C<my>
-variables, because only globals (even in disguise as C<local>s)
-are in the symbol table.
-
-If you're passing around filehandles, you could usually just use the bare
-typeglob, like C<*STDOUT>, but typeglobs references work, too.
-For example:
-
- splutter(\*STDOUT);
- sub splutter {
- my $fh = shift;
- print $fh "her um well a hmmm\n";
- }
-
- $rec = get_rec(\*STDIN);
- sub get_rec {
- my $fh = shift;
- return scalar <$fh>;
- }
-
-If you're planning on generating new filehandles, you could do this.
-Notice to pass back just the bare *FH, not its reference.
-
- sub openit {
- my $path = shift;
- local *FH;
- return open (FH, $path) ? *FH : undef;
- }
-
-=head2 Prototypes
-
-Perl supports a very limited kind of compile-time argument checking
-using function prototyping. If you declare
-
- sub mypush (\@@)
-
-then C<mypush()> takes arguments exactly like C<push()> does. The
-function declaration must be visible at compile time. The prototype
-affects only interpretation of new-style calls to the function,
-where new-style is defined as not using the C<&> character. In
-other words, if you call it like a built-in function, then it behaves
-like a built-in function. If you call it like an old-fashioned
-subroutine, then it behaves like an old-fashioned subroutine. It
-naturally falls out from this rule that prototypes have no influence
-on subroutine references like C<\&foo> or on indirect subroutine
-calls like C<&{$subref}> or C<< $subref->() >>.
-
-Method calls are not influenced by prototypes either, because the
-function to be called is indeterminate at compile time, since
-the exact code called depends on inheritance.
-
-Because the intent of this feature is primarily to let you define
-subroutines that work like built-in functions, here are prototypes
-for some other functions that parse almost exactly like the
-corresponding built-in.
-
- Declared as Called as
-
- sub mylink ($$) mylink $old, $new
- sub myvec ($$$) myvec $var, $offset, 1
- sub myindex ($$;$) myindex &getstring, "substr"
- sub mysyswrite ($$$;$) mysyswrite $buf, 0, length($buf) - $off, $off
- sub myreverse (@) myreverse $a, $b, $c
- sub myjoin ($@) myjoin ":", $a, $b, $c
- sub mypop (\@) mypop @array
- sub mysplice (\@$$@) mysplice @array, @array, 0, @pushme
- sub mykeys (\%) mykeys %{$hashref}
- sub myopen (*;$) myopen HANDLE, $name
- sub mypipe (**) mypipe READHANDLE, WRITEHANDLE
- sub mygrep (&@) mygrep { /foo/ } $a, $b, $c
- sub myrand ($) myrand 42
- sub mytime () mytime
-
-Any backslashed prototype character represents an actual argument
-that absolutely must start with that character. The value passed
-as part of C<@_> will be a reference to the actual argument given
-in the subroutine call, obtained by applying C<\> to that argument.
-
-Unbackslashed prototype characters have special meanings. Any
-unbackslashed C<@> or C<%> eats all remaining arguments, and forces
-list context. An argument represented by C<$> forces scalar context. An
-C<&> requires an anonymous subroutine, which, if passed as the first
-argument, does not require the C<sub> keyword or a subsequent comma.
-
-A C<*> allows the subroutine to accept a bareword, constant, scalar expression,
-typeglob, or a reference to a typeglob in that slot. The value will be
-available to the subroutine either as a simple scalar, or (in the latter
-two cases) as a reference to the typeglob. If you wish to always convert
-such arguments to a typeglob reference, use Symbol::qualify_to_ref() as
-follows:
-
- use Symbol 'qualify_to_ref';
-
- sub foo (*) {
- my $fh = qualify_to_ref(shift, caller);
- ...
- }
-
-A semicolon separates mandatory arguments from optional arguments.
-It is redundant before C<@> or C<%>, which gobble up everything else.
-
-Note how the last three examples in the table above are treated
-specially by the parser. C<mygrep()> is parsed as a true list
-operator, C<myrand()> is parsed as a true unary operator with unary
-precedence the same as C<rand()>, and C<mytime()> is truly without
-arguments, just like C<time()>. That is, if you say
-
- mytime +2;
-
-you'll get C<mytime() + 2>, not C<mytime(2)>, which is how it would be parsed
-without a prototype.
-
-The interesting thing about C<&> is that you can generate new syntax with it,
-provided it's in the initial position:
-
- sub try (&@) {
- my($try,$catch) = @_;
- eval { &$try };
- if ($@) {
- local $_ = $@;
- &$catch;
- }
- }
- sub catch (&) { $_[0] }
-
- try {
- die "phooey";
- } catch {
- /phooey/ and print "unphooey\n";
- };
-
-That prints C<"unphooey">. (Yes, there are still unresolved
-issues having to do with visibility of C<@_>. I'm ignoring that
-question for the moment. (But note that if we make C<@_> lexically
-scoped, those anonymous subroutines can act like closures... (Gee,
-is this sounding a little Lispish? (Never mind.))))
-
-And here's a reimplementation of the Perl C<grep> operator:
-
- sub mygrep (&@) {
- my $code = shift;
- my @result;
- foreach $_ (@_) {
- push(@result, $_) if &$code;
- }
- @result;
- }
-
-Some folks would prefer full alphanumeric prototypes. Alphanumerics have
-been intentionally left out of prototypes for the express purpose of
-someday in the future adding named, formal parameters. The current
-mechanism's main goal is to let module writers provide better diagnostics
-for module users. Larry feels the notation quite understandable to Perl
-programmers, and that it will not intrude greatly upon the meat of the
-module, nor make it harder to read. The line noise is visually
-encapsulated into a small pill that's easy to swallow.
-
-It's probably best to prototype new functions, not retrofit prototyping
-into older ones. That's because you must be especially careful about
-silent impositions of differing list versus scalar contexts. For example,
-if you decide that a function should take just one parameter, like this:
-
- sub func ($) {
- my $n = shift;
- print "you gave me $n\n";
- }
-
-and someone has been calling it with an array or expression
-returning a list:
-
- func(@foo);
- func( split /:/ );
-
-Then you've just supplied an automatic C<scalar> in front of their
-argument, which can be more than a bit surprising. The old C<@foo>
-which used to hold one thing doesn't get passed in. Instead,
-C<func()> now gets passed in a C<1>; that is, the number of elements
-in C<@foo>. And the C<split> gets called in scalar context so it
-starts scribbling on your C<@_> parameter list. Ouch!
-
-This is all very powerful, of course, and should be used only in moderation
-to make the world a better place.
-
-=head2 Constant Functions
-
-Functions with a prototype of C<()> are potential candidates for
-inlining. If the result after optimization and constant folding
-is either a constant or a lexically-scoped scalar which has no other
-references, then it will be used in place of function calls made
-without C<&>. Calls made using C<&> are never inlined. (See
-F<constant.pm> for an easy way to declare most constants.)
-
-The following functions would all be inlined:
-
- sub pi () { 3.14159 } # Not exact, but close.
- sub PI () { 4 * atan2 1, 1 } # As good as it gets,
- # and it's inlined, too!
- sub ST_DEV () { 0 }
- sub ST_INO () { 1 }
-
- sub FLAG_FOO () { 1 << 8 }
- sub FLAG_BAR () { 1 << 9 }
- sub FLAG_MASK () { FLAG_FOO | FLAG_BAR }
-
- sub OPT_BAZ () { not (0x1B58 & FLAG_MASK) }
- sub BAZ_VAL () {
- if (OPT_BAZ) {
- return 23;
- }
- else {
- return 42;
- }
- }
-
- sub N () { int(BAZ_VAL) / 3 }
- BEGIN {
- my $prod = 1;
- for (1..N) { $prod *= $_ }
- sub N_FACTORIAL () { $prod }
- }
-
-If you redefine a subroutine that was eligible for inlining, you'll get
-a mandatory warning. (You can use this warning to tell whether or not a
-particular subroutine is considered constant.) The warning is
-considered severe enough not to be optional because previously compiled
-invocations of the function will still be using the old value of the
-function. If you need to be able to redefine the subroutine, you need to
-ensure that it isn't inlined, either by dropping the C<()> prototype
-(which changes calling semantics, so beware) or by thwarting the
-inlining mechanism in some other way, such as
-
- sub not_inlined () {
- 23 if $];
- }
-
-=head2 Overriding Built-in Functions
-
-Many built-in functions may be overridden, though this should be tried
-only occasionally and for good reason. Typically this might be
-done by a package attempting to emulate missing built-in functionality
-on a non-Unix system.
-
-Overriding may be done only by importing the name from a
-module--ordinary predeclaration isn't good enough. However, the
-C<use subs> pragma lets you, in effect, predeclare subs
-via the import syntax, and these names may then override built-in ones:
-
- use subs 'chdir', 'chroot', 'chmod', 'chown';
- chdir $somewhere;
- sub chdir { ... }
-
-To unambiguously refer to the built-in form, precede the
-built-in name with the special package qualifier C<CORE::>. For example,
-saying C<CORE::open()> always refers to the built-in C<open()>, even
-if the current package has imported some other subroutine called
-C<&open()> from elsewhere. Even though it looks like a regular
-function call, it isn't: you can't take a reference to it, such as
-the incorrect C<\&CORE::open> might appear to produce.
-
-Library modules should not in general export built-in names like C<open>
-or C<chdir> as part of their default C<@EXPORT> list, because these may
-sneak into someone else's namespace and change the semantics unexpectedly.
-Instead, if the module adds that name to C<@EXPORT_OK>, then it's
-possible for a user to import the name explicitly, but not implicitly.
-That is, they could say
-
- use Module 'open';
-
-and it would import the C<open> override. But if they said
-
- use Module;
-
-they would get the default imports without overrides.
-
-The foregoing mechanism for overriding built-in is restricted, quite
-deliberately, to the package that requests the import. There is a second
-method that is sometimes applicable when you wish to override a built-in
-everywhere, without regard to namespace boundaries. This is achieved by
-importing a sub into the special namespace C<CORE::GLOBAL::>. Here is an
-example that quite brazenly replaces the C<glob> operator with something
-that understands regular expressions.
-
- package REGlob;
- require Exporter;
- @ISA = 'Exporter';
- @EXPORT_OK = 'glob';
-
- sub import {
- my $pkg = shift;
- return unless @_;
- my $sym = shift;
- my $where = ($sym =~ s/^GLOBAL_// ? 'CORE::GLOBAL' : caller(0));
- $pkg->export($where, $sym, @_);
- }
-
- sub glob {
- my $pat = shift;
- my @got;
- local *D;
- if (opendir D, '.') {
- @got = grep /$pat/, readdir D;
- closedir D;
- }
- return @got;
- }
- 1;
-
-And here's how it could be (ab)used:
-
- #use REGlob 'GLOBAL_glob'; # override glob() in ALL namespaces
- package Foo;
- use REGlob 'glob'; # override glob() in Foo:: only
- print for <^[a-z_]+\.pm\$>; # show all pragmatic modules
-
-The initial comment shows a contrived, even dangerous example.
-By overriding C<glob> globally, you would be forcing the new (and
-subversive) behavior for the C<glob> operator for I<every> namespace,
-without the complete cognizance or cooperation of the modules that own
-those namespaces. Naturally, this should be done with extreme caution--if
-it must be done at all.
-
-The C<REGlob> example above does not implement all the support needed to
-cleanly override perl's C<glob> operator. The built-in C<glob> has
-different behaviors depending on whether it appears in a scalar or list
-context, but our C<REGlob> doesn't. Indeed, many perl built-in have such
-context sensitive behaviors, and these must be adequately supported by
-a properly written override. For a fully functional example of overriding
-C<glob>, study the implementation of C<File::DosGlob> in the standard
-library.
-
-=head2 Autoloading
-
-If you call a subroutine that is undefined, you would ordinarily
-get an immediate, fatal error complaining that the subroutine doesn't
-exist. (Likewise for subroutines being used as methods, when the
-method doesn't exist in any base class of the class's package.)
-However, if an C<AUTOLOAD> subroutine is defined in the package or
-packages used to locate the original subroutine, then that
-C<AUTOLOAD> subroutine is called with the arguments that would have
-been passed to the original subroutine. The fully qualified name
-of the original subroutine magically appears in the global $AUTOLOAD
-variable of the same package as the C<AUTOLOAD> routine. The name
-is not passed as an ordinary argument because, er, well, just
-because, that's why...
-
-Many C<AUTOLOAD> routines load in a definition for the requested
-subroutine using eval(), then execute that subroutine using a special
-form of goto() that erases the stack frame of the C<AUTOLOAD> routine
-without a trace. (See the source to the standard module documented
-in L<AutoLoader>, for example.) But an C<AUTOLOAD> routine can
-also just emulate the routine and never define it. For example,
-let's pretend that a function that wasn't defined should just invoke
-C<system> with those arguments. All you'd do is:
-
- sub AUTOLOAD {
- my $program = $AUTOLOAD;
- $program =~ s/.*:://;
- system($program, @_);
- }
- date();
- who('am', 'i');
- ls('-l');
-
-In fact, if you predeclare functions you want to call that way, you don't
-even need parentheses:
-
- use subs qw(date who ls);
- date;
- who "am", "i";
- ls -l;
-
-A more complete example of this is the standard Shell module, which
-can treat undefined subroutine calls as calls to external programs.
-
-Mechanisms are available to help modules writers split their modules
-into autoloadable files. See the standard AutoLoader module
-described in L<AutoLoader> and in L<AutoSplit>, the standard
-SelfLoader modules in L<SelfLoader>, and the document on adding C
-functions to Perl code in L<perlxs>.
-
-=head2 Subroutine Attributes
-
-A subroutine declaration or definition may have a list of attributes
-associated with it. If such an attribute list is present, it is
-broken up at space or colon boundaries and treated as though a
-C<use attributes> had been seen. See L<attributes> for details
-about what attributes are currently supported.
-Unlike the limitation with the obsolescent C<use attrs>, the
-C<sub : ATTRLIST> syntax works to associate the attributes with
-a pre-declaration, and not just with a subroutine definition.
-
-The attributes must be valid as simple identifier names (without any
-punctuation other than the '_' character). They may have a parameter
-list appended, which is only checked for whether its parentheses ('(',')')
-nest properly.
-
-Examples of valid syntax (even though the attributes are unknown):
-
- sub fnord (&\%) : switch(10,foo(7,3)) : expensive ;
- sub plugh () : Ugly('\(") :Bad ;
- sub xyzzy : _5x5 { ... }
-
-Examples of invalid syntax:
-
- sub fnord : switch(10,foo() ; # ()-string not balanced
- sub snoid : Ugly('(') ; # ()-string not balanced
- sub xyzzy : 5x5 ; # "5x5" not a valid identifier
- sub plugh : Y2::north ; # "Y2::north" not a simple identifier
- sub snurt : foo + bar ; # "+" not a colon or space
-
-The attribute list is passed as a list of constant strings to the code
-which associates them with the subroutine. In particular, the second example
-of valid syntax above currently looks like this in terms of how it's
-parsed and invoked:
-
- use attributes __PACKAGE__, \&plugh, q[Ugly('\(")], 'Bad';
-
-For further details on attribute lists and their manipulation,
-see L<attributes>.
-
-=head1 SEE ALSO
-
-See L<perlref/"Function Templates"> for more about references and closures.
-See L<perlxs> if you'd like to learn about calling C subroutines from Perl.
-See L<perlembed> if you'd like to learn about calling Perl subroutines from C.
-See L<perlmod> to learn about bundling up your functions in separate files.
-See L<perlmodlib> to learn what library modules come standard on your system.
-See L<perltoot> to learn how to make object method calls.
diff --git a/contrib/perl5/pod/perlsyn.pod b/contrib/perl5/pod/perlsyn.pod
deleted file mode 100644
index aad4efd..0000000
--- a/contrib/perl5/pod/perlsyn.pod
+++ /dev/null
@@ -1,639 +0,0 @@
-=head1 NAME
-
-perlsyn - Perl syntax
-
-=head1 DESCRIPTION
-
-A Perl script consists of a sequence of declarations and statements.
-The sequence of statements is executed just once, unlike in B<sed>
-and B<awk> scripts, where the sequence of statements is executed
-for each input line. While this means that you must explicitly
-loop over the lines of your input file (or files), it also means
-you have much more control over which files and which lines you look at.
-(Actually, I'm lying--it is possible to do an implicit loop with
-either the B<-n> or B<-p> switch. It's just not the mandatory
-default like it is in B<sed> and B<awk>.)
-
-Perl is, for the most part, a free-form language. (The only exception
-to this is format declarations, for obvious reasons.) Text from a
-C<"#"> character until the end of the line is a comment, and is
-ignored. If you attempt to use C</* */> C-style comments, it will be
-interpreted either as division or pattern matching, depending on the
-context, and C++ C<//> comments just look like a null regular
-expression, so don't do that.
-
-=head2 Declarations
-
-The only things you need to declare in Perl are report formats
-and subroutines--and even undefined subroutines can be handled
-through AUTOLOAD. A variable holds the undefined value (C<undef>)
-until it has been assigned a defined value, which is anything
-other than C<undef>. When used as a number, C<undef> is treated
-as C<0>; when used as a string, it is treated the empty string,
-C<"">; and when used as a reference that isn't being assigned
-to, it is treated as an error. If you enable warnings, you'll
-be notified of an uninitialized value whenever you treat C<undef>
-as a string or a number. Well, usually. Boolean ("don't-care")
-contexts and operators such as C<++>, C<-->, C<+=>, C<-=>, and
-C<.=> are always exempt from such warnings.
-
-A declaration can be put anywhere a statement can, but has no effect on
-the execution of the primary sequence of statements--declarations all
-take effect at compile time. Typically all the declarations are put at
-the beginning or the end of the script. However, if you're using
-lexically-scoped private variables created with C<my()>, you'll
-have to make sure
-your format or subroutine definition is within the same block scope
-as the my if you expect to be able to access those private variables.
-
-Declaring a subroutine allows a subroutine name to be used as if it were a
-list operator from that point forward in the program. You can declare a
-subroutine without defining it by saying C<sub name>, thus:
-
- sub myname;
- $me = myname $0 or die "can't get myname";
-
-Note that myname() functions as a list operator, not as a unary operator;
-so be careful to use C<or> instead of C<||> in this case. However, if
-you were to declare the subroutine as C<sub myname ($)>, then
-C<myname> would function as a unary operator, so either C<or> or
-C<||> would work.
-
-Subroutines declarations can also be loaded up with the C<require> statement
-or both loaded and imported into your namespace with a C<use> statement.
-See L<perlmod> for details on this.
-
-A statement sequence may contain declarations of lexically-scoped
-variables, but apart from declaring a variable name, the declaration acts
-like an ordinary statement, and is elaborated within the sequence of
-statements as if it were an ordinary statement. That means it actually
-has both compile-time and run-time effects.
-
-=head2 Simple statements
-
-The only kind of simple statement is an expression evaluated for its
-side effects. Every simple statement must be terminated with a
-semicolon, unless it is the final statement in a block, in which case
-the semicolon is optional. (A semicolon is still encouraged there if the
-block takes up more than one line, because you may eventually add another line.)
-Note that there are some operators like C<eval {}> and C<do {}> that look
-like compound statements, but aren't (they're just TERMs in an expression),
-and thus need an explicit termination if used as the last item in a statement.
-
-Any simple statement may optionally be followed by a I<SINGLE> modifier,
-just before the terminating semicolon (or block ending). The possible
-modifiers are:
-
- if EXPR
- unless EXPR
- while EXPR
- until EXPR
- foreach EXPR
-
-The C<if> and C<unless> modifiers have the expected semantics,
-presuming you're a speaker of English. The C<foreach> modifier is an
-iterator: For each value in EXPR, it aliases C<$_> to the value and
-executes the statement. The C<while> and C<until> modifiers have the
-usual "C<while> loop" semantics (conditional evaluated first), except
-when applied to a C<do>-BLOCK (or to the deprecated C<do>-SUBROUTINE
-statement), in which case the block executes once before the
-conditional is evaluated. This is so that you can write loops like:
-
- do {
- $line = <STDIN>;
- ...
- } until $line eq ".\n";
-
-See L<perlfunc/do>. Note also that the loop control statements described
-later will I<NOT> work in this construct, because modifiers don't take
-loop labels. Sorry. You can always put another block inside of it
-(for C<next>) or around it (for C<last>) to do that sort of thing.
-For C<next>, just double the braces:
-
- do {{
- next if $x == $y;
- # do something here
- }} until $x++ > $z;
-
-For C<last>, you have to be more elaborate:
-
- LOOP: {
- do {
- last if $x = $y**2;
- # do something here
- } while $x++ <= $z;
- }
-
-=head2 Compound statements
-
-In Perl, a sequence of statements that defines a scope is called a block.
-Sometimes a block is delimited by the file containing it (in the case
-of a required file, or the program as a whole), and sometimes a block
-is delimited by the extent of a string (in the case of an eval).
-
-But generally, a block is delimited by curly brackets, also known as braces.
-We will call this syntactic construct a BLOCK.
-
-The following compound statements may be used to control flow:
-
- if (EXPR) BLOCK
- if (EXPR) BLOCK else BLOCK
- if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
- LABEL while (EXPR) BLOCK
- LABEL while (EXPR) BLOCK continue BLOCK
- LABEL for (EXPR; EXPR; EXPR) BLOCK
- LABEL foreach VAR (LIST) BLOCK
- LABEL foreach VAR (LIST) BLOCK continue BLOCK
- LABEL BLOCK continue BLOCK
-
-Note that, unlike C and Pascal, these are defined in terms of BLOCKs,
-not statements. This means that the curly brackets are I<required>--no
-dangling statements allowed. If you want to write conditionals without
-curly brackets there are several other ways to do it. The following
-all do the same thing:
-
- if (!open(FOO)) { die "Can't open $FOO: $!"; }
- die "Can't open $FOO: $!" unless open(FOO);
- open(FOO) or die "Can't open $FOO: $!"; # FOO or bust!
- open(FOO) ? 'hi mom' : die "Can't open $FOO: $!";
- # a bit exotic, that last one
-
-The C<if> statement is straightforward. Because BLOCKs are always
-bounded by curly brackets, there is never any ambiguity about which
-C<if> an C<else> goes with. If you use C<unless> in place of C<if>,
-the sense of the test is reversed.
-
-The C<while> statement executes the block as long as the expression is
-true (does not evaluate to the null string C<""> or C<0> or C<"0">).
-The LABEL is optional, and if present, consists of an identifier followed
-by a colon. The LABEL identifies the loop for the loop control
-statements C<next>, C<last>, and C<redo>.
-If the LABEL is omitted, the loop control statement
-refers to the innermost enclosing loop. This may include dynamically
-looking back your call-stack at run time to find the LABEL. Such
-desperate behavior triggers a warning if you use the C<use warnings>
-pragma or the B<-w> flag.
-Unlike a C<foreach> statement, a C<while> statement never implicitly
-localises any variables.
-
-If there is a C<continue> BLOCK, it is always executed just before the
-conditional is about to be evaluated again, just like the third part of a
-C<for> loop in C. Thus it can be used to increment a loop variable, even
-when the loop has been continued via the C<next> statement (which is
-similar to the C C<continue> statement).
-
-=head2 Loop Control
-
-The C<next> command is like the C<continue> statement in C; it starts
-the next iteration of the loop:
-
- LINE: while (<STDIN>) {
- next LINE if /^#/; # discard comments
- ...
- }
-
-The C<last> command is like the C<break> statement in C (as used in
-loops); it immediately exits the loop in question. The
-C<continue> block, if any, is not executed:
-
- LINE: while (<STDIN>) {
- last LINE if /^$/; # exit when done with header
- ...
- }
-
-The C<redo> command restarts the loop block without evaluating the
-conditional again. The C<continue> block, if any, is I<not> executed.
-This command is normally used by programs that want to lie to themselves
-about what was just input.
-
-For example, when processing a file like F</etc/termcap>.
-If your input lines might end in backslashes to indicate continuation, you
-want to skip ahead and get the next record.
-
- while (<>) {
- chomp;
- if (s/\\$//) {
- $_ .= <>;
- redo unless eof();
- }
- # now process $_
- }
-
-which is Perl short-hand for the more explicitly written version:
-
- LINE: while (defined($line = <ARGV>)) {
- chomp($line);
- if ($line =~ s/\\$//) {
- $line .= <ARGV>;
- redo LINE unless eof(); # not eof(ARGV)!
- }
- # now process $line
- }
-
-Note that if there were a C<continue> block on the above code, it would get
-executed even on discarded lines. This is often used to reset line counters
-or C<?pat?> one-time matches.
-
- # inspired by :1,$g/fred/s//WILMA/
- while (<>) {
- ?(fred)? && s//WILMA $1 WILMA/;
- ?(barney)? && s//BETTY $1 BETTY/;
- ?(homer)? && s//MARGE $1 MARGE/;
- } continue {
- print "$ARGV $.: $_";
- close ARGV if eof(); # reset $.
- reset if eof(); # reset ?pat?
- }
-
-If the word C<while> is replaced by the word C<until>, the sense of the
-test is reversed, but the conditional is still tested before the first
-iteration.
-
-The loop control statements don't work in an C<if> or C<unless>, since
-they aren't loops. You can double the braces to make them such, though.
-
- if (/pattern/) {{
- next if /fred/;
- next if /barney/;
- # so something here
- }}
-
-The form C<while/if BLOCK BLOCK>, available in Perl 4, is no longer
-available. Replace any occurrence of C<if BLOCK> by C<if (do BLOCK)>.
-
-=head2 For Loops
-
-Perl's C-style C<for> loop works like the corresponding C<while> loop;
-that means that this:
-
- for ($i = 1; $i < 10; $i++) {
- ...
- }
-
-is the same as this:
-
- $i = 1;
- while ($i < 10) {
- ...
- } continue {
- $i++;
- }
-
-There is one minor difference: if variables are declared with C<my>
-in the initialization section of the C<for>, the lexical scope of
-those variables is exactly the C<for> loop (the body of the loop
-and the control sections).
-
-Besides the normal array index looping, C<for> can lend itself
-to many other interesting applications. Here's one that avoids the
-problem you get into if you explicitly test for end-of-file on
-an interactive file descriptor causing your program to appear to
-hang.
-
- $on_a_tty = -t STDIN && -t STDOUT;
- sub prompt { print "yes? " if $on_a_tty }
- for ( prompt(); <STDIN>; prompt() ) {
- # do something
- }
-
-=head2 Foreach Loops
-
-The C<foreach> loop iterates over a normal list value and sets the
-variable VAR to be each element of the list in turn. If the variable
-is preceded with the keyword C<my>, then it is lexically scoped, and
-is therefore visible only within the loop. Otherwise, the variable is
-implicitly local to the loop and regains its former value upon exiting
-the loop. If the variable was previously declared with C<my>, it uses
-that variable instead of the global one, but it's still localized to
-the loop.
-
-The C<foreach> keyword is actually a synonym for the C<for> keyword, so
-you can use C<foreach> for readability or C<for> for brevity. (Or because
-the Bourne shell is more familiar to you than I<csh>, so writing C<for>
-comes more naturally.) If VAR is omitted, C<$_> is set to each value.
-
-If any element of LIST is an lvalue, you can modify it by modifying
-VAR inside the loop. Conversely, if any element of LIST is NOT an
-lvalue, any attempt to modify that element will fail. In other words,
-the C<foreach> loop index variable is an implicit alias for each item
-in the list that you're looping over.
-
-If any part of LIST is an array, C<foreach> will get very confused if
-you add or remove elements within the loop body, for example with
-C<splice>. So don't do that.
-
-C<foreach> probably won't do what you expect if VAR is a tied or other
-special variable. Don't do that either.
-
-Examples:
-
- for (@ary) { s/foo/bar/ }
-
- for my $elem (@elements) {
- $elem *= 2;
- }
-
- for $count (10,9,8,7,6,5,4,3,2,1,'BOOM') {
- print $count, "\n"; sleep(1);
- }
-
- for (1..15) { print "Merry Christmas\n"; }
-
- foreach $item (split(/:[\\\n:]*/, $ENV{TERMCAP})) {
- print "Item: $item\n";
- }
-
-Here's how a C programmer might code up a particular algorithm in Perl:
-
- for (my $i = 0; $i < @ary1; $i++) {
- for (my $j = 0; $j < @ary2; $j++) {
- if ($ary1[$i] > $ary2[$j]) {
- last; # can't go to outer :-(
- }
- $ary1[$i] += $ary2[$j];
- }
- # this is where that last takes me
- }
-
-Whereas here's how a Perl programmer more comfortable with the idiom might
-do it:
-
- OUTER: for my $wid (@ary1) {
- INNER: for my $jet (@ary2) {
- next OUTER if $wid > $jet;
- $wid += $jet;
- }
- }
-
-See how much easier this is? It's cleaner, safer, and faster. It's
-cleaner because it's less noisy. It's safer because if code gets added
-between the inner and outer loops later on, the new code won't be
-accidentally executed. The C<next> explicitly iterates the other loop
-rather than merely terminating the inner one. And it's faster because
-Perl executes a C<foreach> statement more rapidly than it would the
-equivalent C<for> loop.
-
-=head2 Basic BLOCKs and Switch Statements
-
-A BLOCK by itself (labeled or not) is semantically equivalent to a
-loop that executes once. Thus you can use any of the loop control
-statements in it to leave or restart the block. (Note that this is
-I<NOT> true in C<eval{}>, C<sub{}>, or contrary to popular belief
-C<do{}> blocks, which do I<NOT> count as loops.) The C<continue>
-block is optional.
-
-The BLOCK construct is particularly nice for doing case
-structures.
-
- SWITCH: {
- if (/^abc/) { $abc = 1; last SWITCH; }
- if (/^def/) { $def = 1; last SWITCH; }
- if (/^xyz/) { $xyz = 1; last SWITCH; }
- $nothing = 1;
- }
-
-There is no official C<switch> statement in Perl, because there are
-already several ways to write the equivalent. In addition to the
-above, you could write
-
- SWITCH: {
- $abc = 1, last SWITCH if /^abc/;
- $def = 1, last SWITCH if /^def/;
- $xyz = 1, last SWITCH if /^xyz/;
- $nothing = 1;
- }
-
-(That's actually not as strange as it looks once you realize that you can
-use loop control "operators" within an expression, That's just the normal
-C comma operator.)
-
-or
-
- SWITCH: {
- /^abc/ && do { $abc = 1; last SWITCH; };
- /^def/ && do { $def = 1; last SWITCH; };
- /^xyz/ && do { $xyz = 1; last SWITCH; };
- $nothing = 1;
- }
-
-or formatted so it stands out more as a "proper" C<switch> statement:
-
- SWITCH: {
- /^abc/ && do {
- $abc = 1;
- last SWITCH;
- };
-
- /^def/ && do {
- $def = 1;
- last SWITCH;
- };
-
- /^xyz/ && do {
- $xyz = 1;
- last SWITCH;
- };
- $nothing = 1;
- }
-
-or
-
- SWITCH: {
- /^abc/ and $abc = 1, last SWITCH;
- /^def/ and $def = 1, last SWITCH;
- /^xyz/ and $xyz = 1, last SWITCH;
- $nothing = 1;
- }
-
-or even, horrors,
-
- if (/^abc/)
- { $abc = 1 }
- elsif (/^def/)
- { $def = 1 }
- elsif (/^xyz/)
- { $xyz = 1 }
- else
- { $nothing = 1 }
-
-A common idiom for a C<switch> statement is to use C<foreach>'s aliasing to make
-a temporary assignment to C<$_> for convenient matching:
-
- SWITCH: for ($where) {
- /In Card Names/ && do { push @flags, '-e'; last; };
- /Anywhere/ && do { push @flags, '-h'; last; };
- /In Rulings/ && do { last; };
- die "unknown value for form variable where: `$where'";
- }
-
-Another interesting approach to a switch statement is arrange
-for a C<do> block to return the proper value:
-
- $amode = do {
- if ($flag & O_RDONLY) { "r" } # XXX: isn't this 0?
- elsif ($flag & O_WRONLY) { ($flag & O_APPEND) ? "a" : "w" }
- elsif ($flag & O_RDWR) {
- if ($flag & O_CREAT) { "w+" }
- else { ($flag & O_APPEND) ? "a+" : "r+" }
- }
- };
-
-Or
-
- print do {
- ($flags & O_WRONLY) ? "write-only" :
- ($flags & O_RDWR) ? "read-write" :
- "read-only";
- };
-
-Or if you are certainly that all the C<&&> clauses are true, you can use
-something like this, which "switches" on the value of the
-C<HTTP_USER_AGENT> environment variable.
-
- #!/usr/bin/perl
- # pick out jargon file page based on browser
- $dir = 'http://www.wins.uva.nl/~mes/jargon';
- for ($ENV{HTTP_USER_AGENT}) {
- $page = /Mac/ && 'm/Macintrash.html'
- || /Win(dows )?NT/ && 'e/evilandrude.html'
- || /Win|MSIE|WebTV/ && 'm/MicroslothWindows.html'
- || /Linux/ && 'l/Linux.html'
- || /HP-UX/ && 'h/HP-SUX.html'
- || /SunOS/ && 's/ScumOS.html'
- || 'a/AppendixB.html';
- }
- print "Location: $dir/$page\015\012\015\012";
-
-That kind of switch statement only works when you know the C<&&> clauses
-will be true. If you don't, the previous C<?:> example should be used.
-
-You might also consider writing a hash of subroutine references
-instead of synthesizing a C<switch> statement.
-
-=head2 Goto
-
-Although not for the faint of heart, Perl does support a C<goto>
-statement. There are three forms: C<goto>-LABEL, C<goto>-EXPR, and
-C<goto>-&NAME. A loop's LABEL is not actually a valid target for
-a C<goto>; it's just the name of the loop.
-
-The C<goto>-LABEL form finds the statement labeled with LABEL and resumes
-execution there. It may not be used to go into any construct that
-requires initialization, such as a subroutine or a C<foreach> loop. It
-also can't be used to go into a construct that is optimized away. It
-can be used to go almost anywhere else within the dynamic scope,
-including out of subroutines, but it's usually better to use some other
-construct such as C<last> or C<die>. The author of Perl has never felt the
-need to use this form of C<goto> (in Perl, that is--C is another matter).
-
-The C<goto>-EXPR form expects a label name, whose scope will be resolved
-dynamically. This allows for computed C<goto>s per FORTRAN, but isn't
-necessarily recommended if you're optimizing for maintainability:
-
- goto(("FOO", "BAR", "GLARCH")[$i]);
-
-The C<goto>-&NAME form is highly magical, and substitutes a call to the
-named subroutine for the currently running subroutine. This is used by
-C<AUTOLOAD()> subroutines that wish to load another subroutine and then
-pretend that the other subroutine had been called in the first place
-(except that any modifications to C<@_> in the current subroutine are
-propagated to the other subroutine.) After the C<goto>, not even C<caller()>
-will be able to tell that this routine was called first.
-
-In almost all cases like this, it's usually a far, far better idea to use the
-structured control flow mechanisms of C<next>, C<last>, or C<redo> instead of
-resorting to a C<goto>. For certain applications, the catch and throw pair of
-C<eval{}> and die() for exception processing can also be a prudent approach.
-
-=head2 PODs: Embedded Documentation
-
-Perl has a mechanism for intermixing documentation with source code.
-While it's expecting the beginning of a new statement, if the compiler
-encounters a line that begins with an equal sign and a word, like this
-
- =head1 Here There Be Pods!
-
-Then that text and all remaining text up through and including a line
-beginning with C<=cut> will be ignored. The format of the intervening
-text is described in L<perlpod>.
-
-This allows you to intermix your source code
-and your documentation text freely, as in
-
- =item snazzle($)
-
- The snazzle() function will behave in the most spectacular
- form that you can possibly imagine, not even excepting
- cybernetic pyrotechnics.
-
- =cut back to the compiler, nuff of this pod stuff!
-
- sub snazzle($) {
- my $thingie = shift;
- .........
- }
-
-Note that pod translators should look at only paragraphs beginning
-with a pod directive (it makes parsing easier), whereas the compiler
-actually knows to look for pod escapes even in the middle of a
-paragraph. This means that the following secret stuff will be
-ignored by both the compiler and the translators.
-
- $a=3;
- =secret stuff
- warn "Neither POD nor CODE!?"
- =cut back
- print "got $a\n";
-
-You probably shouldn't rely upon the C<warn()> being podded out forever.
-Not all pod translators are well-behaved in this regard, and perhaps
-the compiler will become pickier.
-
-One may also use pod directives to quickly comment out a section
-of code.
-
-=head2 Plain Old Comments (Not!)
-
-Much like the C preprocessor, Perl can process line directives. Using
-this, one can control Perl's idea of filenames and line numbers in
-error or warning messages (especially for strings that are processed
-with C<eval()>). The syntax for this mechanism is the same as for most
-C preprocessors: it matches the regular expression
-C</^#\s*line\s+(\d+)\s*(?:\s"([^"]+)")?\s*$/> with C<$1> being the line
-number for the next line, and C<$2> being the optional filename
-(specified within quotes).
-
-There is a fairly obvious gotcha included with the line directive:
-Debuggers and profilers will only show the last source line to appear
-at a particular line number in a given file. Care should be taken not
-to cause line number collisions in code you'd like to debug later.
-
-Here are some examples that you should be able to type into your command
-shell:
-
- % perl
- # line 200 "bzzzt"
- # the `#' on the previous line must be the first char on line
- die 'foo';
- __END__
- foo at bzzzt line 201.
-
- % perl
- # line 200 "bzzzt"
- eval qq[\n#line 2001 ""\ndie 'foo']; print $@;
- __END__
- foo at - line 2001.
-
- % perl
- eval qq[\n#line 200 "foo bar"\ndie 'foo']; print $@;
- __END__
- foo at foo bar line 200.
-
- % perl
- # line 345 "goop"
- eval "\n#line " . __LINE__ . ' "' . __FILE__ ."\"\ndie 'foo'";
- print $@;
- __END__
- foo at goop line 345.
-
-=cut
diff --git a/contrib/perl5/pod/perlthrtut.pod b/contrib/perl5/pod/perlthrtut.pod
deleted file mode 100644
index 0b7092b..0000000
--- a/contrib/perl5/pod/perlthrtut.pod
+++ /dev/null
@@ -1,1067 +0,0 @@
-=head1 NAME
-
-perlthrtut - tutorial on threads in Perl
-
-=head1 DESCRIPTION
-
- WARNING: Threading is an experimental feature. Both the interface
- and implementation are subject to change drastically. In fact, this
- documentation describes the flavor of threads that was in version
- 5.005. Perl 5.6.0 and later have the beginnings of support for
- interpreter threads, which (when finished) is expected to be
- significantly different from what is described here. The information
- contained here may therefore soon be obsolete. Use at your own risk!
-
-One of the most prominent new features of Perl 5.005 is the inclusion
-of threads. Threads make a number of things a lot easier, and are a
-very useful addition to your bag of programming tricks.
-
-=head1 What Is A Thread Anyway?
-
-A thread is a flow of control through a program with a single
-execution point.
-
-Sounds an awful lot like a process, doesn't it? Well, it should.
-Threads are one of the pieces of a process. Every process has at least
-one thread and, up until now, every process running Perl had only one
-thread. With 5.005, though, you can create extra threads. We're going
-to show you how, when, and why.
-
-=head1 Threaded Program Models
-
-There are three basic ways that you can structure a threaded
-program. Which model you choose depends on what you need your program
-to do. For many non-trivial threaded programs you'll need to choose
-different models for different pieces of your program.
-
-=head2 Boss/Worker
-
-The boss/worker model usually has one `boss' thread and one or more
-`worker' threads. The boss thread gathers or generates tasks that need
-to be done, then parcels those tasks out to the appropriate worker
-thread.
-
-This model is common in GUI and server programs, where a main thread
-waits for some event and then passes that event to the appropriate
-worker threads for processing. Once the event has been passed on, the
-boss thread goes back to waiting for another event.
-
-The boss thread does relatively little work. While tasks aren't
-necessarily performed faster than with any other method, it tends to
-have the best user-response times.
-
-=head2 Work Crew
-
-In the work crew model, several threads are created that do
-essentially the same thing to different pieces of data. It closely
-mirrors classical parallel processing and vector processors, where a
-large array of processors do the exact same thing to many pieces of
-data.
-
-This model is particularly useful if the system running the program
-will distribute multiple threads across different processors. It can
-also be useful in ray tracing or rendering engines, where the
-individual threads can pass on interim results to give the user visual
-feedback.
-
-=head2 Pipeline
-
-The pipeline model divides up a task into a series of steps, and
-passes the results of one step on to the thread processing the
-next. Each thread does one thing to each piece of data and passes the
-results to the next thread in line.
-
-This model makes the most sense if you have multiple processors so two
-or more threads will be executing in parallel, though it can often
-make sense in other contexts as well. It tends to keep the individual
-tasks small and simple, as well as allowing some parts of the pipeline
-to block (on I/O or system calls, for example) while other parts keep
-going. If you're running different parts of the pipeline on different
-processors you may also take advantage of the caches on each
-processor.
-
-This model is also handy for a form of recursive programming where,
-rather than having a subroutine call itself, it instead creates
-another thread. Prime and Fibonacci generators both map well to this
-form of the pipeline model. (A version of a prime number generator is
-presented later on.)
-
-=head1 Native threads
-
-There are several different ways to implement threads on a system. How
-threads are implemented depends both on the vendor and, in some cases,
-the version of the operating system. Often the first implementation
-will be relatively simple, but later versions of the OS will be more
-sophisticated.
-
-While the information in this section is useful, it's not necessary,
-so you can skip it if you don't feel up to it.
-
-There are three basic categories of threads-user-mode threads, kernel
-threads, and multiprocessor kernel threads.
-
-User-mode threads are threads that live entirely within a program and
-its libraries. In this model, the OS knows nothing about threads. As
-far as it's concerned, your process is just a process.
-
-This is the easiest way to implement threads, and the way most OSes
-start. The big disadvantage is that, since the OS knows nothing about
-threads, if one thread blocks they all do. Typical blocking activities
-include most system calls, most I/O, and things like sleep().
-
-Kernel threads are the next step in thread evolution. The OS knows
-about kernel threads, and makes allowances for them. The main
-difference between a kernel thread and a user-mode thread is
-blocking. With kernel threads, things that block a single thread don't
-block other threads. This is not the case with user-mode threads,
-where the kernel blocks at the process level and not the thread level.
-
-This is a big step forward, and can give a threaded program quite a
-performance boost over non-threaded programs. Threads that block
-performing I/O, for example, won't block threads that are doing other
-things. Each process still has only one thread running at once,
-though, regardless of how many CPUs a system might have.
-
-Since kernel threading can interrupt a thread at any time, they will
-uncover some of the implicit locking assumptions you may make in your
-program. For example, something as simple as C<$a = $a + 2> can behave
-unpredictably with kernel threads if $a is visible to other
-threads, as another thread may have changed $a between the time it
-was fetched on the right hand side and the time the new value is
-stored.
-
-Multiprocessor Kernel Threads are the final step in thread
-support. With multiprocessor kernel threads on a machine with multiple
-CPUs, the OS may schedule two or more threads to run simultaneously on
-different CPUs.
-
-This can give a serious performance boost to your threaded program,
-since more than one thread will be executing at the same time. As a
-tradeoff, though, any of those nagging synchronization issues that
-might not have shown with basic kernel threads will appear with a
-vengeance.
-
-In addition to the different levels of OS involvement in threads,
-different OSes (and different thread implementations for a particular
-OS) allocate CPU cycles to threads in different ways.
-
-Cooperative multitasking systems have running threads give up control
-if one of two things happen. If a thread calls a yield function, it
-gives up control. It also gives up control if the thread does
-something that would cause it to block, such as perform I/O. In a
-cooperative multitasking implementation, one thread can starve all the
-others for CPU time if it so chooses.
-
-Preemptive multitasking systems interrupt threads at regular intervals
-while the system decides which thread should run next. In a preemptive
-multitasking system, one thread usually won't monopolize the CPU.
-
-On some systems, there can be cooperative and preemptive threads
-running simultaneously. (Threads running with realtime priorities
-often behave cooperatively, for example, while threads running at
-normal priorities behave preemptively.)
-
-=head1 What kind of threads are perl threads?
-
-If you have experience with other thread implementations, you might
-find that things aren't quite what you expect. It's very important to
-remember when dealing with Perl threads that Perl Threads Are Not X
-Threads, for all values of X. They aren't POSIX threads, or
-DecThreads, or Java's Green threads, or Win32 threads. There are
-similarities, and the broad concepts are the same, but if you start
-looking for implementation details you're going to be either
-disappointed or confused. Possibly both.
-
-This is not to say that Perl threads are completely different from
-everything that's ever come before--they're not. Perl's threading
-model owes a lot to other thread models, especially POSIX. Just as
-Perl is not C, though, Perl threads are not POSIX threads. So if you
-find yourself looking for mutexes, or thread priorities, it's time to
-step back a bit and think about what you want to do and how Perl can
-do it.
-
-=head1 Threadsafe Modules
-
-The addition of threads has changed Perl's internals
-substantially. There are implications for people who write
-modules--especially modules with XS code or external libraries. While
-most modules won't encounter any problems, modules that aren't
-explicitly tagged as thread-safe should be tested before being used in
-production code.
-
-Not all modules that you might use are thread-safe, and you should
-always assume a module is unsafe unless the documentation says
-otherwise. This includes modules that are distributed as part of the
-core. Threads are a beta feature, and even some of the standard
-modules aren't thread-safe.
-
-If you're using a module that's not thread-safe for some reason, you
-can protect yourself by using semaphores and lots of programming
-discipline to control access to the module. Semaphores are covered
-later in the article. Perl Threads Are Different
-
-=head1 Thread Basics
-
-The core Thread module provides the basic functions you need to write
-threaded programs. In the following sections we'll cover the basics,
-showing you what you need to do to create a threaded program. After
-that, we'll go over some of the features of the Thread module that
-make threaded programming easier.
-
-=head2 Basic Thread Support
-
-Thread support is a Perl compile-time option-it's something that's
-turned on or off when Perl is built at your site, rather than when
-your programs are compiled. If your Perl wasn't compiled with thread
-support enabled, then any attempt to use threads will fail.
-
-Remember that the threading support in 5.005 is in beta release, and
-should be treated as such. You should expect that it may not function
-entirely properly, and the thread interface may well change some
-before it is a fully supported, production release. The beta version
-shouldn't be used for mission-critical projects. Having said that,
-threaded Perl is pretty nifty, and worth a look.
-
-Your programs can use the Config module to check whether threads are
-enabled. If your program can't run without them, you can say something
-like:
-
- $Config{usethreads} or die "Recompile Perl with threads to run this program.";
-
-A possibly-threaded program using a possibly-threaded module might
-have code like this:
-
- use Config;
- use MyMod;
-
- if ($Config{usethreads}) {
- # We have threads
- require MyMod_threaded;
- import MyMod_threaded;
- } else {
- require MyMod_unthreaded;
- import MyMod_unthreaded;
- }
-
-Since code that runs both with and without threads is usually pretty
-messy, it's best to isolate the thread-specific code in its own
-module. In our example above, that's what MyMod_threaded is, and it's
-only imported if we're running on a threaded Perl.
-
-=head2 Creating Threads
-
-The Thread package provides the tools you need to create new
-threads. Like any other module, you need to tell Perl you want to use
-it; use Thread imports all the pieces you need to create basic
-threads.
-
-The simplest, straightforward way to create a thread is with new():
-
- use Thread;
-
- $thr = new Thread \&sub1;
-
- sub sub1 {
- print "In the thread\n";
- }
-
-The new() method takes a reference to a subroutine and creates a new
-thread, which starts executing in the referenced subroutine. Control
-then passes both to the subroutine and the caller.
-
-If you need to, your program can pass parameters to the subroutine as
-part of the thread startup. Just include the list of parameters as
-part of the C<Thread::new> call, like this:
-
- use Thread;
- $Param3 = "foo";
- $thr = new Thread \&sub1, "Param 1", "Param 2", $Param3;
- $thr = new Thread \&sub1, @ParamList;
- $thr = new Thread \&sub1, qw(Param1 Param2 $Param3);
-
- sub sub1 {
- my @InboundParameters = @_;
- print "In the thread\n";
- print "got parameters >", join("<>", @InboundParameters), "<\n";
- }
-
-
-The subroutine runs like a normal Perl subroutine, and the call to new
-Thread returns whatever the subroutine returns.
-
-The last example illustrates another feature of threads. You can spawn
-off several threads using the same subroutine. Each thread executes
-the same subroutine, but in a separate thread with a separate
-environment and potentially separate arguments.
-
-The other way to spawn a new thread is with async(), which is a way to
-spin off a chunk of code like eval(), but into its own thread:
-
- use Thread qw(async);
-
- $LineCount = 0;
-
- $thr = async {
- while(<>) {$LineCount++}
- print "Got $LineCount lines\n";
- };
-
- print "Waiting for the linecount to end\n";
- $thr->join;
- print "All done\n";
-
-You'll notice we did a use Thread qw(async) in that example. async is
-not exported by default, so if you want it, you'll either need to
-import it before you use it or fully qualify it as
-Thread::async. You'll also note that there's a semicolon after the
-closing brace. That's because async() treats the following block as an
-anonymous subroutine, so the semicolon is necessary.
-
-Like eval(), the code executes in the same context as it would if it
-weren't spun off. Since both the code inside and after the async start
-executing, you need to be careful with any shared resources. Locking
-and other synchronization techniques are covered later.
-
-=head2 Giving up control
-
-There are times when you may find it useful to have a thread
-explicitly give up the CPU to another thread. Your threading package
-might not support preemptive multitasking for threads, for example, or
-you may be doing something compute-intensive and want to make sure
-that the user-interface thread gets called frequently. Regardless,
-there are times that you might want a thread to give up the processor.
-
-Perl's threading package provides the yield() function that does
-this. yield() is pretty straightforward, and works like this:
-
- use Thread qw(yield async);
- async {
- my $foo = 50;
- while ($foo--) { print "first async\n" }
- yield;
- $foo = 50;
- while ($foo--) { print "first async\n" }
- };
- async {
- my $foo = 50;
- while ($foo--) { print "second async\n" }
- yield;
- $foo = 50;
- while ($foo--) { print "second async\n" }
- };
-
-=head2 Waiting For A Thread To Exit
-
-Since threads are also subroutines, they can return values. To wait
-for a thread to exit and extract any scalars it might return, you can
-use the join() method.
-
- use Thread;
- $thr = new Thread \&sub1;
-
- @ReturnData = $thr->join;
- print "Thread returned @ReturnData";
-
- sub sub1 { return "Fifty-six", "foo", 2; }
-
-In the example above, the join() method returns as soon as the thread
-ends. In addition to waiting for a thread to finish and gathering up
-any values that the thread might have returned, join() also performs
-any OS cleanup necessary for the thread. That cleanup might be
-important, especially for long-running programs that spawn lots of
-threads. If you don't want the return values and don't want to wait
-for the thread to finish, you should call the detach() method
-instead. detach() is covered later in the article.
-
-=head2 Errors In Threads
-
-So what happens when an error occurs in a thread? Any errors that
-could be caught with eval() are postponed until the thread is
-joined. If your program never joins, the errors appear when your
-program exits.
-
-Errors deferred until a join() can be caught with eval():
-
- use Thread qw(async);
- $thr = async {$b = 3/0}; # Divide by zero error
- $foo = eval {$thr->join};
- if ($@) {
- print "died with error $@\n";
- } else {
- print "Hey, why aren't you dead?\n";
- }
-
-eval() passes any results from the joined thread back unmodified, so
-if you want the return value of the thread, this is your only chance
-to get them.
-
-=head2 Ignoring A Thread
-
-join() does three things: it waits for a thread to exit, cleans up
-after it, and returns any data the thread may have produced. But what
-if you're not interested in the thread's return values, and you don't
-really care when the thread finishes? All you want is for the thread
-to get cleaned up after when it's done.
-
-In this case, you use the detach() method. Once a thread is detached,
-it'll run until it's finished, then Perl will clean up after it
-automatically.
-
- use Thread;
- $thr = new Thread \&sub1; # Spawn the thread
-
- $thr->detach; # Now we officially don't care any more
-
- sub sub1 {
- $a = 0;
- while (1) {
- $a++;
- print "\$a is $a\n";
- sleep 1;
- }
- }
-
-
-Once a thread is detached, it may not be joined, and any output that
-it might have produced (if it was done and waiting for a join) is
-lost.
-
-=head1 Threads And Data
-
-Now that we've covered the basics of threads, it's time for our next
-topic: data. Threading introduces a couple of complications to data
-access that non-threaded programs never need to worry about.
-
-=head2 Shared And Unshared Data
-
-The single most important thing to remember when using threads is that
-all threads potentially have access to all the data anywhere in your
-program. While this is true with a nonthreaded Perl program as well,
-it's especially important to remember with a threaded program, since
-more than one thread can be accessing this data at once.
-
-Perl's scoping rules don't change because you're using threads. If a
-subroutine (or block, in the case of async()) could see a variable if
-you weren't running with threads, it can see it if you are. This is
-especially important for the subroutines that create, and makes C<my>
-variables even more important. Remember--if your variables aren't
-lexically scoped (declared with C<my>) you're probably sharing them
-between threads.
-
-=head2 Thread Pitfall: Races
-
-While threads bring a new set of useful tools, they also bring a
-number of pitfalls. One pitfall is the race condition:
-
- use Thread;
- $a = 1;
- $thr1 = Thread->new(\&sub1);
- $thr2 = Thread->new(\&sub2);
-
- sleep 10;
- print "$a\n";
-
- sub sub1 { $foo = $a; $a = $foo + 1; }
- sub sub2 { $bar = $a; $a = $bar + 1; }
-
-What do you think $a will be? The answer, unfortunately, is "it
-depends." Both sub1() and sub2() access the global variable $a, once
-to read and once to write. Depending on factors ranging from your
-thread implementation's scheduling algorithm to the phase of the moon,
-$a can be 2 or 3.
-
-Race conditions are caused by unsynchronized access to shared
-data. Without explicit synchronization, there's no way to be sure that
-nothing has happened to the shared data between the time you access it
-and the time you update it. Even this simple code fragment has the
-possibility of error:
-
- use Thread qw(async);
- $a = 2;
- async{ $b = $a; $a = $b + 1; };
- async{ $c = $a; $a = $c + 1; };
-
-Two threads both access $a. Each thread can potentially be interrupted
-at any point, or be executed in any order. At the end, $a could be 3
-or 4, and both $b and $c could be 2 or 3.
-
-Whenever your program accesses data or resources that can be accessed
-by other threads, you must take steps to coordinate access or risk
-data corruption and race conditions.
-
-=head2 Controlling access: lock()
-
-The lock() function takes a variable (or subroutine, but we'll get to
-that later) and puts a lock on it. No other thread may lock the
-variable until the locking thread exits the innermost block containing
-the lock. Using lock() is straightforward:
-
- use Thread qw(async);
- $a = 4;
- $thr1 = async {
- $foo = 12;
- {
- lock ($a); # Block until we get access to $a
- $b = $a;
- $a = $b * $foo;
- }
- print "\$foo was $foo\n";
- };
- $thr2 = async {
- $bar = 7;
- {
- lock ($a); # Block until we can get access to $a
- $c = $a;
- $a = $c * $bar;
- }
- print "\$bar was $bar\n";
- };
- $thr1->join;
- $thr2->join;
- print "\$a is $a\n";
-
-lock() blocks the thread until the variable being locked is
-available. When lock() returns, your thread can be sure that no other
-thread can lock that variable until the innermost block containing the
-lock exits.
-
-It's important to note that locks don't prevent access to the variable
-in question, only lock attempts. This is in keeping with Perl's
-longstanding tradition of courteous programming, and the advisory file
-locking that flock() gives you. Locked subroutines behave differently,
-however. We'll cover that later in the article.
-
-You may lock arrays and hashes as well as scalars. Locking an array,
-though, will not block subsequent locks on array elements, just lock
-attempts on the array itself.
-
-Finally, locks are recursive, which means it's okay for a thread to
-lock a variable more than once. The lock will last until the outermost
-lock() on the variable goes out of scope.
-
-=head2 Thread Pitfall: Deadlocks
-
-Locks are a handy tool to synchronize access to data. Using them
-properly is the key to safe shared data. Unfortunately, locks aren't
-without their dangers. Consider the following code:
-
- use Thread qw(async yield);
- $a = 4;
- $b = "foo";
- async {
- lock($a);
- yield;
- sleep 20;
- lock ($b);
- };
- async {
- lock($b);
- yield;
- sleep 20;
- lock ($a);
- };
-
-This program will probably hang until you kill it. The only way it
-won't hang is if one of the two async() routines acquires both locks
-first. A guaranteed-to-hang version is more complicated, but the
-principle is the same.
-
-The first thread spawned by async() will grab a lock on $a then, a
-second or two later, try to grab a lock on $b. Meanwhile, the second
-thread grabs a lock on $b, then later tries to grab a lock on $a. The
-second lock attempt for both threads will block, each waiting for the
-other to release its lock.
-
-This condition is called a deadlock, and it occurs whenever two or
-more threads are trying to get locks on resources that the others
-own. Each thread will block, waiting for the other to release a lock
-on a resource. That never happens, though, since the thread with the
-resource is itself waiting for a lock to be released.
-
-There are a number of ways to handle this sort of problem. The best
-way is to always have all threads acquire locks in the exact same
-order. If, for example, you lock variables $a, $b, and $c, always lock
-$a before $b, and $b before $c. It's also best to hold on to locks for
-as short a period of time to minimize the risks of deadlock.
-
-=head2 Queues: Passing Data Around
-
-A queue is a special thread-safe object that lets you put data in one
-end and take it out the other without having to worry about
-synchronization issues. They're pretty straightforward, and look like
-this:
-
- use Thread qw(async);
- use Thread::Queue;
-
- my $DataQueue = new Thread::Queue;
- $thr = async {
- while ($DataElement = $DataQueue->dequeue) {
- print "Popped $DataElement off the queue\n";
- }
- };
-
- $DataQueue->enqueue(12);
- $DataQueue->enqueue("A", "B", "C");
- $DataQueue->enqueue(\$thr);
- sleep 10;
- $DataQueue->enqueue(undef);
-
-You create the queue with new Thread::Queue. Then you can add lists of
-scalars onto the end with enqueue(), and pop scalars off the front of
-it with dequeue(). A queue has no fixed size, and can grow as needed
-to hold everything pushed on to it.
-
-If a queue is empty, dequeue() blocks until another thread enqueues
-something. This makes queues ideal for event loops and other
-communications between threads.
-
-=head1 Threads And Code
-
-In addition to providing thread-safe access to data via locks and
-queues, threaded Perl also provides general-purpose semaphores for
-coarser synchronization than locks provide and thread-safe access to
-entire subroutines.
-
-=head2 Semaphores: Synchronizing Data Access
-
-Semaphores are a kind of generic locking mechanism. Unlike lock, which
-gets a lock on a particular scalar, Perl doesn't associate any
-particular thing with a semaphore so you can use them to control
-access to anything you like. In addition, semaphores can allow more
-than one thread to access a resource at once, though by default
-semaphores only allow one thread access at a time.
-
-=over 4
-
-=item Basic semaphores
-
-Semaphores have two methods, down and up. down decrements the resource
-count, while up increments it. down calls will block if the
-semaphore's current count would decrement below zero. This program
-gives a quick demonstration:
-
- use Thread qw(yield);
- use Thread::Semaphore;
- my $semaphore = new Thread::Semaphore;
- $GlobalVariable = 0;
-
- $thr1 = new Thread \&sample_sub, 1;
- $thr2 = new Thread \&sample_sub, 2;
- $thr3 = new Thread \&sample_sub, 3;
-
- sub sample_sub {
- my $SubNumber = shift @_;
- my $TryCount = 10;
- my $LocalCopy;
- sleep 1;
- while ($TryCount--) {
- $semaphore->down;
- $LocalCopy = $GlobalVariable;
- print "$TryCount tries left for sub $SubNumber (\$GlobalVariable is $GlobalVariable)\n";
- yield;
- sleep 2;
- $LocalCopy++;
- $GlobalVariable = $LocalCopy;
- $semaphore->up;
- }
- }
-
-The three invocations of the subroutine all operate in sync. The
-semaphore, though, makes sure that only one thread is accessing the
-global variable at once.
-
-=item Advanced Semaphores
-
-By default, semaphores behave like locks, letting only one thread
-down() them at a time. However, there are other uses for semaphores.
-
-Each semaphore has a counter attached to it. down() decrements the
-counter and up() increments the counter. By default, semaphores are
-created with the counter set to one, down() decrements by one, and
-up() increments by one. If down() attempts to decrement the counter
-below zero, it blocks until the counter is large enough. Note that
-while a semaphore can be created with a starting count of zero, any
-up() or down() always changes the counter by at least
-one. $semaphore->down(0) is the same as $semaphore->down(1).
-
-The question, of course, is why would you do something like this? Why
-create a semaphore with a starting count that's not one, or why
-decrement/increment it by more than one? The answer is resource
-availability. Many resources that you want to manage access for can be
-safely used by more than one thread at once.
-
-For example, let's take a GUI driven program. It has a semaphore that
-it uses to synchronize access to the display, so only one thread is
-ever drawing at once. Handy, but of course you don't want any thread
-to start drawing until things are properly set up. In this case, you
-can create a semaphore with a counter set to zero, and up it when
-things are ready for drawing.
-
-Semaphores with counters greater than one are also useful for
-establishing quotas. Say, for example, that you have a number of
-threads that can do I/O at once. You don't want all the threads
-reading or writing at once though, since that can potentially swamp
-your I/O channels, or deplete your process' quota of filehandles. You
-can use a semaphore initialized to the number of concurrent I/O
-requests (or open files) that you want at any one time, and have your
-threads quietly block and unblock themselves.
-
-Larger increments or decrements are handy in those cases where a
-thread needs to check out or return a number of resources at once.
-
-=back
-
-=head2 Attributes: Restricting Access To Subroutines
-
-In addition to synchronizing access to data or resources, you might
-find it useful to synchronize access to subroutines. You may be
-accessing a singular machine resource (perhaps a vector processor), or
-find it easier to serialize calls to a particular subroutine than to
-have a set of locks and semaphores.
-
-One of the additions to Perl 5.005 is subroutine attributes. The
-Thread package uses these to provide several flavors of
-serialization. It's important to remember that these attributes are
-used in the compilation phase of your program so you can't change a
-subroutine's behavior while your program is actually running.
-
-=head2 Subroutine Locks
-
-The basic subroutine lock looks like this:
-
- sub test_sub :locked {
- }
-
-This ensures that only one thread will be executing this subroutine at
-any one time. Once a thread calls this subroutine, any other thread
-that calls it will block until the thread in the subroutine exits
-it. A more elaborate example looks like this:
-
- use Thread qw(yield);
-
- new Thread \&thread_sub, 1;
- new Thread \&thread_sub, 2;
- new Thread \&thread_sub, 3;
- new Thread \&thread_sub, 4;
-
- sub sync_sub :locked {
- my $CallingThread = shift @_;
- print "In sync_sub for thread $CallingThread\n";
- yield;
- sleep 3;
- print "Leaving sync_sub for thread $CallingThread\n";
- }
-
- sub thread_sub {
- my $ThreadID = shift @_;
- print "Thread $ThreadID calling sync_sub\n";
- sync_sub($ThreadID);
- print "$ThreadID is done with sync_sub\n";
- }
-
-The C<locked> attribute tells perl to lock sync_sub(), and if you run
-this, you can see that only one thread is in it at any one time.
-
-=head2 Methods
-
-Locking an entire subroutine can sometimes be overkill, especially
-when dealing with Perl objects. When calling a method for an object,
-for example, you want to serialize calls to a method, so that only one
-thread will be in the subroutine for a particular object, but threads
-calling that subroutine for a different object aren't blocked. The
-method attribute indicates whether the subroutine is really a method.
-
- use Thread;
-
- sub tester {
- my $thrnum = shift @_;
- my $bar = new Foo;
- foreach (1..10) {
- print "$thrnum calling per_object\n";
- $bar->per_object($thrnum);
- print "$thrnum out of per_object\n";
- yield;
- print "$thrnum calling one_at_a_time\n";
- $bar->one_at_a_time($thrnum);
- print "$thrnum out of one_at_a_time\n";
- yield;
- }
- }
-
- foreach my $thrnum (1..10) {
- new Thread \&tester, $thrnum;
- }
-
- package Foo;
- sub new {
- my $class = shift @_;
- return bless [@_], $class;
- }
-
- sub per_object :locked :method {
- my ($class, $thrnum) = @_;
- print "In per_object for thread $thrnum\n";
- yield;
- sleep 2;
- print "Exiting per_object for thread $thrnum\n";
- }
-
- sub one_at_a_time :locked {
- my ($class, $thrnum) = @_;
- print "In one_at_a_time for thread $thrnum\n";
- yield;
- sleep 2;
- print "Exiting one_at_a_time for thread $thrnum\n";
- }
-
-As you can see from the output (omitted for brevity; it's 800 lines)
-all the threads can be in per_object() simultaneously, but only one
-thread is ever in one_at_a_time() at once.
-
-=head2 Locking A Subroutine
-
-You can lock a subroutine as you would lock a variable. Subroutine locks
-work the same as specifying a C<locked> attribute for the subroutine,
-and block all access to the subroutine for other threads until the
-lock goes out of scope. When the subroutine isn't locked, any number
-of threads can be in it at once, and getting a lock on a subroutine
-doesn't affect threads already in the subroutine. Getting a lock on a
-subroutine looks like this:
-
- lock(\&sub_to_lock);
-
-Simple enough. Unlike the C<locked> attribute, which is a compile time
-option, locking and unlocking a subroutine can be done at runtime at your
-discretion. There is some runtime penalty to using lock(\&sub) instead
-of the C<locked> attribute, so make sure you're choosing the proper
-method to do the locking.
-
-You'd choose lock(\&sub) when writing modules and code to run on both
-threaded and unthreaded Perl, especially for code that will run on
-5.004 or earlier Perls. In that case, it's useful to have subroutines
-that should be serialized lock themselves if they're running threaded,
-like so:
-
- package Foo;
- use Config;
- $Running_Threaded = 0;
-
- BEGIN { $Running_Threaded = $Config{'usethreads'} }
-
- sub sub1 { lock(\&sub1) if $Running_Threaded }
-
-
-This way you can ensure single-threadedness regardless of which
-version of Perl you're running.
-
-=head1 General Thread Utility Routines
-
-We've covered the workhorse parts of Perl's threading package, and
-with these tools you should be well on your way to writing threaded
-code and packages. There are a few useful little pieces that didn't
-really fit in anyplace else.
-
-=head2 What Thread Am I In?
-
-The Thread->self method provides your program with a way to get an
-object representing the thread it's currently in. You can use this
-object in the same way as the ones returned from the thread creation.
-
-=head2 Thread IDs
-
-tid() is a thread object method that returns the thread ID of the
-thread the object represents. Thread IDs are integers, with the main
-thread in a program being 0. Currently Perl assigns a unique tid to
-every thread ever created in your program, assigning the first thread
-to be created a tid of 1, and increasing the tid by 1 for each new
-thread that's created.
-
-=head2 Are These Threads The Same?
-
-The equal() method takes two thread objects and returns true
-if the objects represent the same thread, and false if they don't.
-
-=head2 What Threads Are Running?
-
-Thread->list returns a list of thread objects, one for each thread
-that's currently running. Handy for a number of things, including
-cleaning up at the end of your program:
-
- # Loop through all the threads
- foreach $thr (Thread->list) {
- # Don't join the main thread or ourselves
- if ($thr->tid && !Thread::equal($thr, Thread->self)) {
- $thr->join;
- }
- }
-
-The example above is just for illustration. It isn't strictly
-necessary to join all the threads you create, since Perl detaches all
-the threads before it exits.
-
-=head1 A Complete Example
-
-Confused yet? It's time for an example program to show some of the
-things we've covered. This program finds prime numbers using threads.
-
- 1 #!/usr/bin/perl -w
- 2 # prime-pthread, courtesy of Tom Christiansen
- 3
- 4 use strict;
- 5
- 6 use Thread;
- 7 use Thread::Queue;
- 8
- 9 my $stream = new Thread::Queue;
- 10 my $kid = new Thread(\&check_num, $stream, 2);
- 11
- 12 for my $i ( 3 .. 1000 ) {
- 13 $stream->enqueue($i);
- 14 }
- 15
- 16 $stream->enqueue(undef);
- 17 $kid->join();
- 18
- 19 sub check_num {
- 20 my ($upstream, $cur_prime) = @_;
- 21 my $kid;
- 22 my $downstream = new Thread::Queue;
- 23 while (my $num = $upstream->dequeue) {
- 24 next unless $num % $cur_prime;
- 25 if ($kid) {
- 26 $downstream->enqueue($num);
- 27 } else {
- 28 print "Found prime $num\n";
- 29 $kid = new Thread(\&check_num, $downstream, $num);
- 30 }
- 31 }
- 32 $downstream->enqueue(undef) if $kid;
- 33 $kid->join() if $kid;
- 34 }
-
-This program uses the pipeline model to generate prime numbers. Each
-thread in the pipeline has an input queue that feeds numbers to be
-checked, a prime number that it's responsible for, and an output queue
-that it funnels numbers that have failed the check into. If the thread
-has a number that's failed its check and there's no child thread, then
-the thread must have found a new prime number. In that case, a new
-child thread is created for that prime and stuck on the end of the
-pipeline.
-
-This probably sounds a bit more confusing than it really is, so lets
-go through this program piece by piece and see what it does. (For
-those of you who might be trying to remember exactly what a prime
-number is, it's a number that's only evenly divisible by itself and 1)
-
-The bulk of the work is done by the check_num() subroutine, which
-takes a reference to its input queue and a prime number that it's
-responsible for. After pulling in the input queue and the prime that
-the subroutine's checking (line 20), we create a new queue (line 22)
-and reserve a scalar for the thread that we're likely to create later
-(line 21).
-
-The while loop from lines 23 to line 31 grabs a scalar off the input
-queue and checks against the prime this thread is responsible
-for. Line 24 checks to see if there's a remainder when we modulo the
-number to be checked against our prime. If there is one, the number
-must not be evenly divisible by our prime, so we need to either pass
-it on to the next thread if we've created one (line 26) or create a
-new thread if we haven't.
-
-The new thread creation is line 29. We pass on to it a reference to
-the queue we've created, and the prime number we've found.
-
-Finally, once the loop terminates (because we got a 0 or undef in the
-queue, which serves as a note to die), we pass on the notice to our
-child and wait for it to exit if we've created a child (Lines 32 and
-37).
-
-Meanwhile, back in the main thread, we create a queue (line 9) and the
-initial child thread (line 10), and pre-seed it with the first prime:
-2. Then we queue all the numbers from 3 to 1000 for checking (lines
-12-14), then queue a die notice (line 16) and wait for the first child
-thread to terminate (line 17). Because a child won't die until its
-child has died, we know that we're done once we return from the join.
-
-That's how it works. It's pretty simple; as with many Perl programs,
-the explanation is much longer than the program.
-
-=head1 Conclusion
-
-A complete thread tutorial could fill a book (and has, many times),
-but this should get you well on your way. The final authority on how
-Perl's threads behave is the documentation bundled with the Perl
-distribution, but with what we've covered in this article, you should
-be well on your way to becoming a threaded Perl expert.
-
-=head1 Bibliography
-
-Here's a short bibliography courtesy of Jürgen Christoffel:
-
-=head2 Introductory Texts
-
-Birrell, Andrew D. An Introduction to Programming with
-Threads. Digital Equipment Corporation, 1989, DEC-SRC Research Report
-#35 online as
-http://www.research.digital.com/SRC/staff/birrell/bib.html (highly
-recommended)
-
-Robbins, Kay. A., and Steven Robbins. Practical Unix Programming: A
-Guide to Concurrency, Communication, and
-Multithreading. Prentice-Hall, 1996.
-
-Lewis, Bill, and Daniel J. Berg. Multithreaded Programming with
-Pthreads. Prentice Hall, 1997, ISBN 0-13-443698-9 (a well-written
-introduction to threads).
-
-Nelson, Greg (editor). Systems Programming with Modula-3. Prentice
-Hall, 1991, ISBN 0-13-590464-1.
-
-Nichols, Bradford, Dick Buttlar, and Jacqueline Proulx Farrell.
-Pthreads Programming. O'Reilly & Associates, 1996, ISBN 156592-115-1
-(covers POSIX threads).
-
-=head2 OS-Related References
-
-Boykin, Joseph, David Kirschen, Alan Langerman, and Susan
-LoVerso. Programming under Mach. Addison-Wesley, 1994, ISBN
-0-201-52739-1.
-
-Tanenbaum, Andrew S. Distributed Operating Systems. Prentice Hall,
-1995, ISBN 0-13-219908-4 (great textbook).
-
-Silberschatz, Abraham, and Peter B. Galvin. Operating System Concepts,
-4th ed. Addison-Wesley, 1995, ISBN 0-201-59292-4
-
-=head2 Other References
-
-Arnold, Ken and James Gosling. The Java Programming Language, 2nd
-ed. Addison-Wesley, 1998, ISBN 0-201-31006-6.
-
-Le Sergent, T. and B. Berthomieu. "Incremental MultiThreaded Garbage
-Collection on Virtually Shared Memory Architectures" in Memory
-Management: Proc. of the International Workshop IWMM 92, St. Malo,
-France, September 1992, Yves Bekkers and Jacques Cohen, eds. Springer,
-1992, ISBN 3540-55940-X (real-life thread applications).
-
-=head1 Acknowledgements
-
-Thanks (in no particular order) to Chaim Frenkel, Steve Fink, Gurusamy
-Sarathy, Ilya Zakharevich, Benjamin Sugars, Jürgen Christoffel, Joshua
-Pritikin, and Alan Burlison, for their help in reality-checking and
-polishing this article. Big thanks to Tom Christiansen for his rewrite
-of the prime number generator.
-
-=head1 AUTHOR
-
-Dan Sugalski E<lt>sugalskd@ous.eduE<gt>
-
-=head1 Copyrights
-
-This article originally appeared in The Perl Journal #10, and is
-copyright 1998 The Perl Journal. It appears courtesy of Jon Orwant and
-The Perl Journal. This document may be distributed under the same terms
-as Perl itself.
-
-
diff --git a/contrib/perl5/pod/perltie.pod b/contrib/perl5/pod/perltie.pod
deleted file mode 100644
index 1bba005..0000000
--- a/contrib/perl5/pod/perltie.pod
+++ /dev/null
@@ -1,1084 +0,0 @@
-=head1 NAME
-
-perltie - how to hide an object class in a simple variable
-
-=head1 SYNOPSIS
-
- tie VARIABLE, CLASSNAME, LIST
-
- $object = tied VARIABLE
-
- untie VARIABLE
-
-=head1 DESCRIPTION
-
-Prior to release 5.0 of Perl, a programmer could use dbmopen()
-to connect an on-disk database in the standard Unix dbm(3x)
-format magically to a %HASH in their program. However, their Perl was either
-built with one particular dbm library or another, but not both, and
-you couldn't extend this mechanism to other packages or types of variables.
-
-Now you can.
-
-The tie() function binds a variable to a class (package) that will provide
-the implementation for access methods for that variable. Once this magic
-has been performed, accessing a tied variable automatically triggers
-method calls in the proper class. The complexity of the class is
-hidden behind magic methods calls. The method names are in ALL CAPS,
-which is a convention that Perl uses to indicate that they're called
-implicitly rather than explicitly--just like the BEGIN() and END()
-functions.
-
-In the tie() call, C<VARIABLE> is the name of the variable to be
-enchanted. C<CLASSNAME> is the name of a class implementing objects of
-the correct type. Any additional arguments in the C<LIST> are passed to
-the appropriate constructor method for that class--meaning TIESCALAR(),
-TIEARRAY(), TIEHASH(), or TIEHANDLE(). (Typically these are arguments
-such as might be passed to the dbminit() function of C.) The object
-returned by the "new" method is also returned by the tie() function,
-which would be useful if you wanted to access other methods in
-C<CLASSNAME>. (You don't actually have to return a reference to a right
-"type" (e.g., HASH or C<CLASSNAME>) so long as it's a properly blessed
-object.) You can also retrieve a reference to the underlying object
-using the tied() function.
-
-Unlike dbmopen(), the tie() function will not C<use> or C<require> a module
-for you--you need to do that explicitly yourself.
-
-=head2 Tying Scalars
-
-A class implementing a tied scalar should define the following methods:
-TIESCALAR, FETCH, STORE, and possibly UNTIE and/or DESTROY.
-
-Let's look at each in turn, using as an example a tie class for
-scalars that allows the user to do something like:
-
- tie $his_speed, 'Nice', getppid();
- tie $my_speed, 'Nice', $$;
-
-And now whenever either of those variables is accessed, its current
-system priority is retrieved and returned. If those variables are set,
-then the process's priority is changed!
-
-We'll use Jarkko Hietaniemi <F<jhi@iki.fi>>'s BSD::Resource class (not
-included) to access the PRIO_PROCESS, PRIO_MIN, and PRIO_MAX constants
-from your system, as well as the getpriority() and setpriority() system
-calls. Here's the preamble of the class.
-
- package Nice;
- use Carp;
- use BSD::Resource;
- use strict;
- $Nice::DEBUG = 0 unless defined $Nice::DEBUG;
-
-=over 4
-
-=item TIESCALAR classname, LIST
-
-This is the constructor for the class. That means it is
-expected to return a blessed reference to a new scalar
-(probably anonymous) that it's creating. For example:
-
- sub TIESCALAR {
- my $class = shift;
- my $pid = shift || $$; # 0 means me
-
- if ($pid !~ /^\d+$/) {
- carp "Nice::Tie::Scalar got non-numeric pid $pid" if $^W;
- return undef;
- }
-
- unless (kill 0, $pid) { # EPERM or ERSCH, no doubt
- carp "Nice::Tie::Scalar got bad pid $pid: $!" if $^W;
- return undef;
- }
-
- return bless \$pid, $class;
- }
-
-This tie class has chosen to return an error rather than raising an
-exception if its constructor should fail. While this is how dbmopen() works,
-other classes may well not wish to be so forgiving. It checks the global
-variable C<$^W> to see whether to emit a bit of noise anyway.
-
-=item FETCH this
-
-This method will be triggered every time the tied variable is accessed
-(read). It takes no arguments beyond its self reference, which is the
-object representing the scalar we're dealing with. Because in this case
-we're using just a SCALAR ref for the tied scalar object, a simple $$self
-allows the method to get at the real value stored there. In our example
-below, that real value is the process ID to which we've tied our variable.
-
- sub FETCH {
- my $self = shift;
- confess "wrong type" unless ref $self;
- croak "usage error" if @_;
- my $nicety;
- local($!) = 0;
- $nicety = getpriority(PRIO_PROCESS, $$self);
- if ($!) { croak "getpriority failed: $!" }
- return $nicety;
- }
-
-This time we've decided to blow up (raise an exception) if the renice
-fails--there's no place for us to return an error otherwise, and it's
-probably the right thing to do.
-
-=item STORE this, value
-
-This method will be triggered every time the tied variable is set
-(assigned). Beyond its self reference, it also expects one (and only one)
-argument--the new value the user is trying to assign.
-
- sub STORE {
- my $self = shift;
- confess "wrong type" unless ref $self;
- my $new_nicety = shift;
- croak "usage error" if @_;
-
- if ($new_nicety < PRIO_MIN) {
- carp sprintf
- "WARNING: priority %d less than minimum system priority %d",
- $new_nicety, PRIO_MIN if $^W;
- $new_nicety = PRIO_MIN;
- }
-
- if ($new_nicety > PRIO_MAX) {
- carp sprintf
- "WARNING: priority %d greater than maximum system priority %d",
- $new_nicety, PRIO_MAX if $^W;
- $new_nicety = PRIO_MAX;
- }
-
- unless (defined setpriority(PRIO_PROCESS, $$self, $new_nicety)) {
- confess "setpriority failed: $!";
- }
- return $new_nicety;
- }
-
-=item UNTIE this
-
-This method will be triggered when the C<untie> occurs. This can be useful
-if the class needs to know when no further calls will be made. (Except DESTROY
-of course.) See below for more details.
-
-=item DESTROY this
-
-This method will be triggered when the tied variable needs to be destructed.
-As with other object classes, such a method is seldom necessary, because Perl
-deallocates its moribund object's memory for you automatically--this isn't
-C++, you know. We'll use a DESTROY method here for debugging purposes only.
-
- sub DESTROY {
- my $self = shift;
- confess "wrong type" unless ref $self;
- carp "[ Nice::DESTROY pid $$self ]" if $Nice::DEBUG;
- }
-
-=back
-
-That's about all there is to it. Actually, it's more than all there
-is to it, because we've done a few nice things here for the sake
-of completeness, robustness, and general aesthetics. Simpler
-TIESCALAR classes are certainly possible.
-
-=head2 Tying Arrays
-
-A class implementing a tied ordinary array should define the following
-methods: TIEARRAY, FETCH, STORE, FETCHSIZE, STORESIZE and perhaps UNTIE and/or DESTROY.
-
-FETCHSIZE and STORESIZE are used to provide C<$#array> and
-equivalent C<scalar(@array)> access.
-
-The methods POP, PUSH, SHIFT, UNSHIFT, SPLICE, DELETE, and EXISTS are
-required if the perl operator with the corresponding (but lowercase) name
-is to operate on the tied array. The B<Tie::Array> class can be used as a
-base class to implement the first five of these in terms of the basic
-methods above. The default implementations of DELETE and EXISTS in
-B<Tie::Array> simply C<croak>.
-
-In addition EXTEND will be called when perl would have pre-extended
-allocation in a real array.
-
-For this discussion, we'll implement an array whose elements are a fixed
-size at creation. If you try to create an element larger than the fixed
-size, you'll take an exception. For example:
-
- use FixedElem_Array;
- tie @array, 'FixedElem_Array', 3;
- $array[0] = 'cat'; # ok.
- $array[1] = 'dogs'; # exception, length('dogs') > 3.
-
-The preamble code for the class is as follows:
-
- package FixedElem_Array;
- use Carp;
- use strict;
-
-=over 4
-
-=item TIEARRAY classname, LIST
-
-This is the constructor for the class. That means it is expected to
-return a blessed reference through which the new array (probably an
-anonymous ARRAY ref) will be accessed.
-
-In our example, just to show you that you don't I<really> have to return an
-ARRAY reference, we'll choose a HASH reference to represent our object.
-A HASH works out well as a generic record type: the C<{ELEMSIZE}> field will
-store the maximum element size allowed, and the C<{ARRAY}> field will hold the
-true ARRAY ref. If someone outside the class tries to dereference the
-object returned (doubtless thinking it an ARRAY ref), they'll blow up.
-This just goes to show you that you should respect an object's privacy.
-
- sub TIEARRAY {
- my $class = shift;
- my $elemsize = shift;
- if ( @_ || $elemsize =~ /\D/ ) {
- croak "usage: tie ARRAY, '" . __PACKAGE__ . "', elem_size";
- }
- return bless {
- ELEMSIZE => $elemsize,
- ARRAY => [],
- }, $class;
- }
-
-=item FETCH this, index
-
-This method will be triggered every time an individual element the tied array
-is accessed (read). It takes one argument beyond its self reference: the
-index whose value we're trying to fetch.
-
- sub FETCH {
- my $self = shift;
- my $index = shift;
- return $self->{ARRAY}->[$index];
- }
-
-If a negative array index is used to read from an array, the index
-will be translated to a positive one internally by calling FETCHSIZE
-before being passed to FETCH.
-
-As you may have noticed, the name of the FETCH method (et al.) is the same
-for all accesses, even though the constructors differ in names (TIESCALAR
-vs TIEARRAY). While in theory you could have the same class servicing
-several tied types, in practice this becomes cumbersome, and it's easiest
-to keep them at simply one tie type per class.
-
-=item STORE this, index, value
-
-This method will be triggered every time an element in the tied array is set
-(written). It takes two arguments beyond its self reference: the index at
-which we're trying to store something and the value we're trying to put
-there.
-
-In our example, C<undef> is really C<$self-E<gt>{ELEMSIZE}> number of
-spaces so we have a little more work to do here:
-
- sub STORE {
- my $self = shift;
- my( $index, $value ) = @_;
- if ( length $value > $self->{ELEMSIZE} ) {
- croak "length of $value is greater than $self->{ELEMSIZE}";
- }
- # fill in the blanks
- $self->EXTEND( $index ) if $index > $self->FETCHSIZE();
- # right justify to keep element size for smaller elements
- $self->{ARRAY}->[$index] = sprintf "%$self->{ELEMSIZE}s", $value;
- }
-
-Negative indexes are treated the same as with FETCH.
-
-=item FETCHSIZE this
-
-Returns the total number of items in the tied array associated with
-object I<this>. (Equivalent to C<scalar(@array)>). For example:
-
- sub FETCHSIZE {
- my $self = shift;
- return scalar @{$self->{ARRAY}};
- }
-
-=item STORESIZE this, count
-
-Sets the total number of items in the tied array associated with
-object I<this> to be I<count>. If this makes the array larger then
-class's mapping of C<undef> should be returned for new positions.
-If the array becomes smaller then entries beyond count should be
-deleted.
-
-In our example, 'undef' is really an element containing
-C<$self-E<gt>{ELEMSIZE}> number of spaces. Observe:
-
- sub STORESIZE {
- my $self = shift;
- my $count = shift;
- if ( $count > $self->FETCHSIZE() ) {
- foreach ( $count - $self->FETCHSIZE() .. $count ) {
- $self->STORE( $_, '' );
- }
- } elsif ( $count < $self->FETCHSIZE() ) {
- foreach ( 0 .. $self->FETCHSIZE() - $count - 2 ) {
- $self->POP();
- }
- }
- }
-
-=item EXTEND this, count
-
-Informative call that array is likely to grow to have I<count> entries.
-Can be used to optimize allocation. This method need do nothing.
-
-In our example, we want to make sure there are no blank (C<undef>)
-entries, so C<EXTEND> will make use of C<STORESIZE> to fill elements
-as needed:
-
- sub EXTEND {
- my $self = shift;
- my $count = shift;
- $self->STORESIZE( $count );
- }
-
-=item EXISTS this, key
-
-Verify that the element at index I<key> exists in the tied array I<this>.
-
-In our example, we will determine that if an element consists of
-C<$self-E<gt>{ELEMSIZE}> spaces only, it does not exist:
-
- sub EXISTS {
- my $self = shift;
- my $index = shift;
- return 0 if ! defined $self->{ARRAY}->[$index] ||
- $self->{ARRAY}->[$index] eq ' ' x $self->{ELEMSIZE};
- return 1;
- }
-
-=item DELETE this, key
-
-Delete the element at index I<key> from the tied array I<this>.
-
-In our example, a deleted item is C<$self->{ELEMSIZE}> spaces:
-
- sub DELETE {
- my $self = shift;
- my $index = shift;
- return $self->STORE( $index, '' );
- }
-
-=item CLEAR this
-
-Clear (remove, delete, ...) all values from the tied array associated with
-object I<this>. For example:
-
- sub CLEAR {
- my $self = shift;
- return $self->{ARRAY} = [];
- }
-
-=item PUSH this, LIST
-
-Append elements of I<LIST> to the array. For example:
-
- sub PUSH {
- my $self = shift;
- my @list = @_;
- my $last = $self->FETCHSIZE();
- $self->STORE( $last + $_, $list[$_] ) foreach 0 .. $#list;
- return $self->FETCHSIZE();
- }
-
-=item POP this
-
-Remove last element of the array and return it. For example:
-
- sub POP {
- my $self = shift;
- return pop @{$self->{ARRAY}};
- }
-
-=item SHIFT this
-
-Remove the first element of the array (shifting other elements down)
-and return it. For example:
-
- sub SHIFT {
- my $self = shift;
- return shift @{$self->{ARRAY}};
- }
-
-=item UNSHIFT this, LIST
-
-Insert LIST elements at the beginning of the array, moving existing elements
-up to make room. For example:
-
- sub UNSHIFT {
- my $self = shift;
- my @list = @_;
- my $size = scalar( @list );
- # make room for our list
- @{$self->{ARRAY}}[ $size .. $#{$self->{ARRAY}} + $size ]
- = @{$self->{ARRAY}};
- $self->STORE( $_, $list[$_] ) foreach 0 .. $#list;
- }
-
-=item SPLICE this, offset, length, LIST
-
-Perform the equivalent of C<splice> on the array.
-
-I<offset> is optional and defaults to zero, negative values count back
-from the end of the array.
-
-I<length> is optional and defaults to rest of the array.
-
-I<LIST> may be empty.
-
-Returns a list of the original I<length> elements at I<offset>.
-
-In our example, we'll use a little shortcut if there is a I<LIST>:
-
- sub SPLICE {
- my $self = shift;
- my $offset = shift || 0;
- my $length = shift || $self->FETCHSIZE() - $offset;
- my @list = ();
- if ( @_ ) {
- tie @list, __PACKAGE__, $self->{ELEMSIZE};
- @list = @_;
- }
- return splice @{$self->{ARRAY}}, $offset, $length, @list;
- }
-
-=item UNTIE this
-
-Will be called when C<untie> happens. (See below.)
-
-=item DESTROY this
-
-This method will be triggered when the tied variable needs to be destructed.
-As with the scalar tie class, this is almost never needed in a
-language that does its own garbage collection, so this time we'll
-just leave it out.
-
-=back
-
-=head2 Tying Hashes
-
-Hashes were the first Perl data type to be tied (see dbmopen()). A class
-implementing a tied hash should define the following methods: TIEHASH is
-the constructor. FETCH and STORE access the key and value pairs. EXISTS
-reports whether a key is present in the hash, and DELETE deletes one.
-CLEAR empties the hash by deleting all the key and value pairs. FIRSTKEY
-and NEXTKEY implement the keys() and each() functions to iterate over all
-the keys. UNTIE is called when C<untie> happens, and DESTROY is called when
-the tied variable is garbage collected.
-
-If this seems like a lot, then feel free to inherit from merely the
-standard Tie::Hash module for most of your methods, redefining only the
-interesting ones. See L<Tie::Hash> for details.
-
-Remember that Perl distinguishes between a key not existing in the hash,
-and the key existing in the hash but having a corresponding value of
-C<undef>. The two possibilities can be tested with the C<exists()> and
-C<defined()> functions.
-
-Here's an example of a somewhat interesting tied hash class: it gives you
-a hash representing a particular user's dot files. You index into the hash
-with the name of the file (minus the dot) and you get back that dot file's
-contents. For example:
-
- use DotFiles;
- tie %dot, 'DotFiles';
- if ( $dot{profile} =~ /MANPATH/ ||
- $dot{login} =~ /MANPATH/ ||
- $dot{cshrc} =~ /MANPATH/ )
- {
- print "you seem to set your MANPATH\n";
- }
-
-Or here's another sample of using our tied class:
-
- tie %him, 'DotFiles', 'daemon';
- foreach $f ( keys %him ) {
- printf "daemon dot file %s is size %d\n",
- $f, length $him{$f};
- }
-
-In our tied hash DotFiles example, we use a regular
-hash for the object containing several important
-fields, of which only the C<{LIST}> field will be what the
-user thinks of as the real hash.
-
-=over 5
-
-=item USER
-
-whose dot files this object represents
-
-=item HOME
-
-where those dot files live
-
-=item CLOBBER
-
-whether we should try to change or remove those dot files
-
-=item LIST
-
-the hash of dot file names and content mappings
-
-=back
-
-Here's the start of F<Dotfiles.pm>:
-
- package DotFiles;
- use Carp;
- sub whowasi { (caller(1))[3] . '()' }
- my $DEBUG = 0;
- sub debug { $DEBUG = @_ ? shift : 1 }
-
-For our example, we want to be able to emit debugging info to help in tracing
-during development. We keep also one convenience function around
-internally to help print out warnings; whowasi() returns the function name
-that calls it.
-
-Here are the methods for the DotFiles tied hash.
-
-=over 4
-
-=item TIEHASH classname, LIST
-
-This is the constructor for the class. That means it is expected to
-return a blessed reference through which the new object (probably but not
-necessarily an anonymous hash) will be accessed.
-
-Here's the constructor:
-
- sub TIEHASH {
- my $self = shift;
- my $user = shift || $>;
- my $dotdir = shift || '';
- croak "usage: @{[&whowasi]} [USER [DOTDIR]]" if @_;
- $user = getpwuid($user) if $user =~ /^\d+$/;
- my $dir = (getpwnam($user))[7]
- || croak "@{[&whowasi]}: no user $user";
- $dir .= "/$dotdir" if $dotdir;
-
- my $node = {
- USER => $user,
- HOME => $dir,
- LIST => {},
- CLOBBER => 0,
- };
-
- opendir(DIR, $dir)
- || croak "@{[&whowasi]}: can't opendir $dir: $!";
- foreach $dot ( grep /^\./ && -f "$dir/$_", readdir(DIR)) {
- $dot =~ s/^\.//;
- $node->{LIST}{$dot} = undef;
- }
- closedir DIR;
- return bless $node, $self;
- }
-
-It's probably worth mentioning that if you're going to filetest the
-return values out of a readdir, you'd better prepend the directory
-in question. Otherwise, because we didn't chdir() there, it would
-have been testing the wrong file.
-
-=item FETCH this, key
-
-This method will be triggered every time an element in the tied hash is
-accessed (read). It takes one argument beyond its self reference: the key
-whose value we're trying to fetch.
-
-Here's the fetch for our DotFiles example.
-
- sub FETCH {
- carp &whowasi if $DEBUG;
- my $self = shift;
- my $dot = shift;
- my $dir = $self->{HOME};
- my $file = "$dir/.$dot";
-
- unless (exists $self->{LIST}->{$dot} || -f $file) {
- carp "@{[&whowasi]}: no $dot file" if $DEBUG;
- return undef;
- }
-
- if (defined $self->{LIST}->{$dot}) {
- return $self->{LIST}->{$dot};
- } else {
- return $self->{LIST}->{$dot} = `cat $dir/.$dot`;
- }
- }
-
-It was easy to write by having it call the Unix cat(1) command, but it
-would probably be more portable to open the file manually (and somewhat
-more efficient). Of course, because dot files are a Unixy concept, we're
-not that concerned.
-
-=item STORE this, key, value
-
-This method will be triggered every time an element in the tied hash is set
-(written). It takes two arguments beyond its self reference: the index at
-which we're trying to store something, and the value we're trying to put
-there.
-
-Here in our DotFiles example, we'll be careful not to let
-them try to overwrite the file unless they've called the clobber()
-method on the original object reference returned by tie().
-
- sub STORE {
- carp &whowasi if $DEBUG;
- my $self = shift;
- my $dot = shift;
- my $value = shift;
- my $file = $self->{HOME} . "/.$dot";
- my $user = $self->{USER};
-
- croak "@{[&whowasi]}: $file not clobberable"
- unless $self->{CLOBBER};
-
- open(F, "> $file") || croak "can't open $file: $!";
- print F $value;
- close(F);
- }
-
-If they wanted to clobber something, they might say:
-
- $ob = tie %daemon_dots, 'daemon';
- $ob->clobber(1);
- $daemon_dots{signature} = "A true daemon\n";
-
-Another way to lay hands on a reference to the underlying object is to
-use the tied() function, so they might alternately have set clobber
-using:
-
- tie %daemon_dots, 'daemon';
- tied(%daemon_dots)->clobber(1);
-
-The clobber method is simply:
-
- sub clobber {
- my $self = shift;
- $self->{CLOBBER} = @_ ? shift : 1;
- }
-
-=item DELETE this, key
-
-This method is triggered when we remove an element from the hash,
-typically by using the delete() function. Again, we'll
-be careful to check whether they really want to clobber files.
-
- sub DELETE {
- carp &whowasi if $DEBUG;
-
- my $self = shift;
- my $dot = shift;
- my $file = $self->{HOME} . "/.$dot";
- croak "@{[&whowasi]}: won't remove file $file"
- unless $self->{CLOBBER};
- delete $self->{LIST}->{$dot};
- my $success = unlink($file);
- carp "@{[&whowasi]}: can't unlink $file: $!" unless $success;
- $success;
- }
-
-The value returned by DELETE becomes the return value of the call
-to delete(). If you want to emulate the normal behavior of delete(),
-you should return whatever FETCH would have returned for this key.
-In this example, we have chosen instead to return a value which tells
-the caller whether the file was successfully deleted.
-
-=item CLEAR this
-
-This method is triggered when the whole hash is to be cleared, usually by
-assigning the empty list to it.
-
-In our example, that would remove all the user's dot files! It's such a
-dangerous thing that they'll have to set CLOBBER to something higher than
-1 to make it happen.
-
- sub CLEAR {
- carp &whowasi if $DEBUG;
- my $self = shift;
- croak "@{[&whowasi]}: won't remove all dot files for $self->{USER}"
- unless $self->{CLOBBER} > 1;
- my $dot;
- foreach $dot ( keys %{$self->{LIST}}) {
- $self->DELETE($dot);
- }
- }
-
-=item EXISTS this, key
-
-This method is triggered when the user uses the exists() function
-on a particular hash. In our example, we'll look at the C<{LIST}>
-hash element for this:
-
- sub EXISTS {
- carp &whowasi if $DEBUG;
- my $self = shift;
- my $dot = shift;
- return exists $self->{LIST}->{$dot};
- }
-
-=item FIRSTKEY this
-
-This method will be triggered when the user is going
-to iterate through the hash, such as via a keys() or each()
-call.
-
- sub FIRSTKEY {
- carp &whowasi if $DEBUG;
- my $self = shift;
- my $a = keys %{$self->{LIST}}; # reset each() iterator
- each %{$self->{LIST}}
- }
-
-=item NEXTKEY this, lastkey
-
-This method gets triggered during a keys() or each() iteration. It has a
-second argument which is the last key that had been accessed. This is
-useful if you're carrying about ordering or calling the iterator from more
-than one sequence, or not really storing things in a hash anywhere.
-
-For our example, we're using a real hash so we'll do just the simple
-thing, but we'll have to go through the LIST field indirectly.
-
- sub NEXTKEY {
- carp &whowasi if $DEBUG;
- my $self = shift;
- return each %{ $self->{LIST} }
- }
-
-=item UNTIE this
-
-This is called when C<untie> occurs.
-
-=item DESTROY this
-
-This method is triggered when a tied hash is about to go out of
-scope. You don't really need it unless you're trying to add debugging
-or have auxiliary state to clean up. Here's a very simple function:
-
- sub DESTROY {
- carp &whowasi if $DEBUG;
- }
-
-=back
-
-Note that functions such as keys() and values() may return huge lists
-when used on large objects, like DBM files. You may prefer to use the
-each() function to iterate over such. Example:
-
- # print out history file offsets
- use NDBM_File;
- tie(%HIST, 'NDBM_File', '/usr/lib/news/history', 1, 0);
- while (($key,$val) = each %HIST) {
- print $key, ' = ', unpack('L',$val), "\n";
- }
- untie(%HIST);
-
-=head2 Tying FileHandles
-
-This is partially implemented now.
-
-A class implementing a tied filehandle should define the following
-methods: TIEHANDLE, at least one of PRINT, PRINTF, WRITE, READLINE, GETC,
-READ, and possibly CLOSE, UNTIE and DESTROY. The class can also provide: BINMODE,
-OPEN, EOF, FILENO, SEEK, TELL - if the corresponding perl operators are
-used on the handle.
-
-It is especially useful when perl is embedded in some other program,
-where output to STDOUT and STDERR may have to be redirected in some
-special way. See nvi and the Apache module for examples.
-
-In our example we're going to create a shouting handle.
-
- package Shout;
-
-=over 4
-
-=item TIEHANDLE classname, LIST
-
-This is the constructor for the class. That means it is expected to
-return a blessed reference of some sort. The reference can be used to
-hold some internal information.
-
- sub TIEHANDLE { print "<shout>\n"; my $i; bless \$i, shift }
-
-=item WRITE this, LIST
-
-This method will be called when the handle is written to via the
-C<syswrite> function.
-
- sub WRITE {
- $r = shift;
- my($buf,$len,$offset) = @_;
- print "WRITE called, \$buf=$buf, \$len=$len, \$offset=$offset";
- }
-
-=item PRINT this, LIST
-
-This method will be triggered every time the tied handle is printed to
-with the C<print()> function.
-Beyond its self reference it also expects the list that was passed to
-the print function.
-
- sub PRINT { $r = shift; $$r++; print join($,,map(uc($_),@_)),$\ }
-
-=item PRINTF this, LIST
-
-This method will be triggered every time the tied handle is printed to
-with the C<printf()> function.
-Beyond its self reference it also expects the format and list that was
-passed to the printf function.
-
- sub PRINTF {
- shift;
- my $fmt = shift;
- print sprintf($fmt, @_)."\n";
- }
-
-=item READ this, LIST
-
-This method will be called when the handle is read from via the C<read>
-or C<sysread> functions.
-
- sub READ {
- my $self = shift;
- my $$bufref = \$_[0];
- my(undef,$len,$offset) = @_;
- print "READ called, \$buf=$bufref, \$len=$len, \$offset=$offset";
- # add to $$bufref, set $len to number of characters read
- $len;
- }
-
-=item READLINE this
-
-This method will be called when the handle is read from via <HANDLE>.
-The method should return undef when there is no more data.
-
- sub READLINE { $r = shift; "READLINE called $$r times\n"; }
-
-=item GETC this
-
-This method will be called when the C<getc> function is called.
-
- sub GETC { print "Don't GETC, Get Perl"; return "a"; }
-
-=item CLOSE this
-
-This method will be called when the handle is closed via the C<close>
-function.
-
- sub CLOSE { print "CLOSE called.\n" }
-
-=item UNTIE this
-
-As with the other types of ties, this method will be called when C<untie> happens.
-It may be appropriate to "auto CLOSE" when this occurs.
-
-=item DESTROY this
-
-As with the other types of ties, this method will be called when the
-tied handle is about to be destroyed. This is useful for debugging and
-possibly cleaning up.
-
- sub DESTROY { print "</shout>\n" }
-
-=back
-
-Here's how to use our little example:
-
- tie(*FOO,'Shout');
- print FOO "hello\n";
- $a = 4; $b = 6;
- print FOO $a, " plus ", $b, " equals ", $a + $b, "\n";
- print <FOO>;
-
-=head2 UNTIE this
-
-You can define for all tie types an UNTIE method that will be called
-at untie().
-
-=head2 The C<untie> Gotcha
-
-If you intend making use of the object returned from either tie() or
-tied(), and if the tie's target class defines a destructor, there is a
-subtle gotcha you I<must> guard against.
-
-As setup, consider this (admittedly rather contrived) example of a
-tie; all it does is use a file to keep a log of the values assigned to
-a scalar.
-
- package Remember;
-
- use strict;
- use warnings;
- use IO::File;
-
- sub TIESCALAR {
- my $class = shift;
- my $filename = shift;
- my $handle = new IO::File "> $filename"
- or die "Cannot open $filename: $!\n";
-
- print $handle "The Start\n";
- bless {FH => $handle, Value => 0}, $class;
- }
-
- sub FETCH {
- my $self = shift;
- return $self->{Value};
- }
-
- sub STORE {
- my $self = shift;
- my $value = shift;
- my $handle = $self->{FH};
- print $handle "$value\n";
- $self->{Value} = $value;
- }
-
- sub DESTROY {
- my $self = shift;
- my $handle = $self->{FH};
- print $handle "The End\n";
- close $handle;
- }
-
- 1;
-
-Here is an example that makes use of this tie:
-
- use strict;
- use Remember;
-
- my $fred;
- tie $fred, 'Remember', 'myfile.txt';
- $fred = 1;
- $fred = 4;
- $fred = 5;
- untie $fred;
- system "cat myfile.txt";
-
-This is the output when it is executed:
-
- The Start
- 1
- 4
- 5
- The End
-
-So far so good. Those of you who have been paying attention will have
-spotted that the tied object hasn't been used so far. So lets add an
-extra method to the Remember class to allow comments to be included in
-the file -- say, something like this:
-
- sub comment {
- my $self = shift;
- my $text = shift;
- my $handle = $self->{FH};
- print $handle $text, "\n";
- }
-
-And here is the previous example modified to use the C<comment> method
-(which requires the tied object):
-
- use strict;
- use Remember;
-
- my ($fred, $x);
- $x = tie $fred, 'Remember', 'myfile.txt';
- $fred = 1;
- $fred = 4;
- comment $x "changing...";
- $fred = 5;
- untie $fred;
- system "cat myfile.txt";
-
-When this code is executed there is no output. Here's why:
-
-When a variable is tied, it is associated with the object which is the
-return value of the TIESCALAR, TIEARRAY, or TIEHASH function. This
-object normally has only one reference, namely, the implicit reference
-from the tied variable. When untie() is called, that reference is
-destroyed. Then, as in the first example above, the object's
-destructor (DESTROY) is called, which is normal for objects that have
-no more valid references; and thus the file is closed.
-
-In the second example, however, we have stored another reference to
-the tied object in $x. That means that when untie() gets called
-there will still be a valid reference to the object in existence, so
-the destructor is not called at that time, and thus the file is not
-closed. The reason there is no output is because the file buffers
-have not been flushed to disk.
-
-Now that you know what the problem is, what can you do to avoid it?
-Prior to the introduction of the optional UNTIE method the only way
-was the good old C<-w> flag. Which will spot any instances where you call
-untie() and there are still valid references to the tied object. If
-the second script above this near the top C<use warnings 'untie'>
-or was run with the C<-w> flag, Perl prints this
-warning message:
-
- untie attempted while 1 inner references still exist
-
-To get the script to work properly and silence the warning make sure
-there are no valid references to the tied object I<before> untie() is
-called:
-
- undef $x;
- untie $fred;
-
-Now that UNTIE exists the class designer can decide which parts of the
-class functionality are really associated with C<untie> and which with
-the object being destroyed. What makes sense for a given class depends
-on whether the inner references are being kept so that non-tie-related
-methods can be called on the object. But in most cases it probably makes
-sense to move the functionality that would have been in DESTROY to the UNTIE
-method.
-
-If the UNTIE method exists then the warning above does not occur. Instead the
-UNTIE method is passed the count of "extra" references and can issue its own
-warning if appropriate. e.g. to replicate the no UNTIE case this method can
-be used:
-
- sub UNTIE
- {
- my ($obj,$count) = @_;
- carp "untie attempted while $count inner references still exist" if $count;
- }
-
-=head1 SEE ALSO
-
-See L<DB_File> or L<Config> for some interesting tie() implementations.
-A good starting point for many tie() implementations is with one of the
-modules L<Tie::Scalar>, L<Tie::Array>, L<Tie::Hash>, or L<Tie::Handle>.
-
-=head1 BUGS
-
-You cannot easily tie a multilevel data structure (such as a hash of
-hashes) to a dbm file. The first problem is that all but GDBM and
-Berkeley DB have size limitations, but beyond that, you also have problems
-with how references are to be represented on disk. One experimental
-module that does attempt to address this need partially is the MLDBM
-module. Check your nearest CPAN site as described in L<perlmodlib> for
-source code to MLDBM.
-
-Tied filehandles are still incomplete. sysopen(), truncate(),
-flock(), fcntl(), stat() and -X can't currently be trapped.
-
-=head1 AUTHOR
-
-Tom Christiansen
-
-TIEHANDLE by Sven Verdoolaege <F<skimo@dns.ufsia.ac.be>> and Doug MacEachern <F<dougm@osf.org>>
-
-UNTIE by Nick Ing-Simmons <F<nick@ing-simmons.net>>
-
-Tying Arrays by Casey Tweten <F<crt@kiski.net>>
diff --git a/contrib/perl5/pod/perltoc.pod b/contrib/perl5/pod/perltoc.pod
deleted file mode 100644
index 7bae86e..0000000
--- a/contrib/perl5/pod/perltoc.pod
+++ /dev/null
@@ -1,13046 +0,0 @@
-
-=head1 NAME
-
-perltoc - perl documentation table of contents
-
-=head1 DESCRIPTION
-
-This page provides a brief table of contents for the rest of the Perl
-documentation set. It is meant to be scanned quickly or grepped
-through to locate the proper section you're looking for.
-
-=head1 BASIC DOCUMENTATION
-
-=head2 perl - Practical Extraction and Report Language
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AVAILABILITY
-
-=item ENVIRONMENT
-
-=item AUTHOR
-
-=item FILES
-
-=item SEE ALSO
-
-=item DIAGNOSTICS
-
-=item BUGS
-
-=item NOTES
-
-=back
-
-=head2 perlfaq - frequently asked questions about Perl ($Date: 1999/05/23
-20:38:02 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item perlfaq: Structural overview of the FAQ.
-
-=item L<perlfaq1>: General Questions About Perl
-
-=item L<perlfaq2>: Obtaining and Learning about Perl
-
-=item L<perlfaq3>: Programming Tools
-
-=item L<perlfaq4>: Data Manipulation
-
-=item L<perlfaq5>: Files and Formats
-
-=item L<perlfaq6>: Regexps
-
-=item L<perlfaq7>: General Perl Language Issues
-
-=item L<perlfaq8>: System Interaction
-
-=item L<perlfaq9>: Networking
-
-=back
-
-=item About the perlfaq documents
-
-=over 4
-
-=item Where to get the perlfaq
-
-=item How to contribute to the perlfaq
-
-=item What will happen if you mail your Perl programming problems to the
-authors
-
-=back
-
-=item Credits
-
-=item Author and Copyright Information
-
-=over 4
-
-=item Bundled Distributions
-
-=item Disclaimer
-
-=back
-
-=item Changes
-
-1/November/2000, 23/May/99, 13/April/99, 7/January/99, 22/June/98,
-24/April/97, 23/April/97, 25/March/97, 18/March/97, 17/March/97 Version,
-Initial Release: 11/March/97
-
-=back
-
-=head2 perlbook - Perl book information
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 perlsyn - Perl syntax
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Declarations
-
-=item Simple statements
-
-=item Compound statements
-
-=item Loop Control
-
-=item For Loops
-
-=item Foreach Loops
-
-=item Basic BLOCKs and Switch Statements
-
-=item Goto
-
-=item PODs: Embedded Documentation
-
-=item Plain Old Comments (Not!)
-
-=back
-
-=back
-
-=head2 perldata - Perl data types
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Variable names
-
-=item Context
-
-=item Scalar values
-
-=item Scalar value constructors
-
-=item List value constructors
-
-=item Slices
-
-=item Typeglobs and Filehandles
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlop - Perl operators and precedence
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Terms and List Operators (Leftward)
-
-=item The Arrow Operator
-
-=item Auto-increment and Auto-decrement
-
-=item Exponentiation
-
-=item Symbolic Unary Operators
-
-=item Binding Operators
-
-=item Multiplicative Operators
-
-=item Additive Operators
-
-=item Shift Operators
-
-=item Named Unary Operators
-
-=item Relational Operators
-
-=item Equality Operators
-
-=item Bitwise And
-
-=item Bitwise Or and Exclusive Or
-
-=item C-style Logical And
-
-=item C-style Logical Or
-
-=item Range Operators
-
-=item Conditional Operator
-
-=item Assignment Operators
-
-=item Comma Operator
-
-=item List Operators (Rightward)
-
-=item Logical Not
-
-=item Logical And
-
-=item Logical or and Exclusive Or
-
-=item C Operators Missing From Perl
-
-unary &, unary *, (TYPE)
-
-=item Quote and Quote-like Operators
-
-=item Regexp Quote-Like Operators
-
-?PATTERN?, m/PATTERN/cgimosx, /PATTERN/cgimosx, q/STRING/, C<'STRING'>,
-qq/STRING/, "STRING", qr/STRING/imosx, qx/STRING/, `STRING`, qw/STRING/,
-s/PATTERN/REPLACEMENT/egimosx, tr/SEARCHLIST/REPLACEMENTLIST/cds,
-y/SEARCHLIST/REPLACEMENTLIST/cds
-
-=item Gory details of parsing quoted constructs
-
-Finding the end, Removal of backslashes before delimiters, Interpolation,
-C<<<'EOF'>, C<m''>, C<s'''>, C<tr///>, C<y///>, C<''>, C<q//>, C<"">,
-C<``>, C<qq//>, C<qx//>, C<< <file*glob> >>, C<?RE?>, C</RE/>, C<m/RE/>,
-C<s/RE/foo/>,, Interpolation of regular expressions, Optimization of
-regular expressions
-
-=item I/O Operators
-
-=item Constant Folding
-
-=item Bitwise String Operators
-
-=item Integer Arithmetic
-
-=item Floating-point Arithmetic
-
-=item Bigger Numbers
-
-=back
-
-=back
-
-=head2 perlsub - Perl subroutines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Private Variables via my()
-
-=item Persistent Private Variables
-
-=item Temporary Values via local()
-
-=item Lvalue subroutines
-
-=item Passing Symbol Table Entries (typeglobs)
-
-=item When to Still Use local()
-
-=item Pass by Reference
-
-=item Prototypes
-
-=item Constant Functions
-
-=item Overriding Built-in Functions
-
-=item Autoloading
-
-=item Subroutine Attributes
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlfunc - Perl builtin functions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Perl Functions by Category
-
-Functions for SCALARs or strings, Regular expressions and pattern matching,
-Numeric functions, Functions for real @ARRAYs, Functions for list data,
-Functions for real %HASHes, Input and output functions, Functions for fixed
-length data or records, Functions for filehandles, files, or directories,
-Keywords related to the control flow of your perl program, Keywords related
-to scoping, Miscellaneous functions, Functions for processes and process
-groups, Keywords related to perl modules, Keywords related to classes and
-object-orientedness, Low-level socket functions, System V interprocess
-communication functions, Fetching user and group info, Fetching network
-info, Time-related functions, Functions new in perl5, Functions obsoleted
-in perl5
-
-=item Portability
-
-=item Alphabetical Listing of Perl Functions
-
-I<-X> FILEHANDLE, I<-X> EXPR, I<-X>, abs VALUE, abs, accept
-NEWSOCKET,GENERICSOCKET, alarm SECONDS, alarm, atan2 Y,X, bind SOCKET,NAME,
-binmode FILEHANDLE, DISCIPLINE, binmode FILEHANDLE, bless REF,CLASSNAME,
-bless REF, caller EXPR, caller, chdir EXPR, chmod LIST, chomp VARIABLE,
-chomp LIST, chomp, chop VARIABLE, chop LIST, chop, chown LIST, chr NUMBER,
-chr, chroot FILENAME, chroot, close FILEHANDLE, close, closedir DIRHANDLE,
-connect SOCKET,NAME, continue BLOCK, cos EXPR, cos, crypt PLAINTEXT,SALT,
-dbmclose HASH, dbmopen HASH,DBNAME,MASK, defined EXPR, defined, delete
-EXPR, die LIST, do BLOCK, do SUBROUTINE(LIST), do EXPR, dump LABEL, dump,
-each HASH, eof FILEHANDLE, eof (), eof, eval EXPR, eval BLOCK, exec LIST,
-exec PROGRAM LIST, exists EXPR, exit EXPR, exp EXPR, exp, fcntl
-FILEHANDLE,FUNCTION,SCALAR, fileno FILEHANDLE, flock FILEHANDLE,OPERATION,
-fork, format, formline PICTURE,LIST, getc FILEHANDLE, getc, getlogin,
-getpeername SOCKET, getpgrp PID, getppid, getpriority WHICH,WHO, getpwnam
-NAME, getgrnam NAME, gethostbyname NAME, getnetbyname NAME, getprotobyname
-NAME, getpwuid UID, getgrgid GID, getservbyname NAME,PROTO, gethostbyaddr
-ADDR,ADDRTYPE, getnetbyaddr ADDR,ADDRTYPE, getprotobynumber NUMBER,
-getservbyport PORT,PROTO, getpwent, getgrent, gethostent, getnetent,
-getprotoent, getservent, setpwent, setgrent, sethostent STAYOPEN, setnetent
-STAYOPEN, setprotoent STAYOPEN, setservent STAYOPEN, endpwent, endgrent,
-endhostent, endnetent, endprotoent, endservent, getsockname SOCKET,
-getsockopt SOCKET,LEVEL,OPTNAME, glob EXPR, glob, gmtime EXPR, goto LABEL,
-goto EXPR, goto &NAME, grep BLOCK LIST, grep EXPR,LIST, hex EXPR, hex,
-import, index STR,SUBSTR,POSITION, index STR,SUBSTR, int EXPR, int, ioctl
-FILEHANDLE,FUNCTION,SCALAR, join EXPR,LIST, keys HASH, kill SIGNAL, LIST,
-last LABEL, last, lc EXPR, lc, lcfirst EXPR, lcfirst, length EXPR, length,
-link OLDFILE,NEWFILE, listen SOCKET,QUEUESIZE, local EXPR, localtime EXPR,
-lock, log EXPR, log, lstat FILEHANDLE, lstat EXPR, lstat, m//, map BLOCK
-LIST, map EXPR,LIST, mkdir FILENAME,MASK, mkdir FILENAME, msgctl
-ID,CMD,ARG, msgget KEY,FLAGS, msgrcv ID,VAR,SIZE,TYPE,FLAGS, msgsnd
-ID,MSG,FLAGS, my EXPR, my EXPR : ATTRIBUTES, next LABEL, next, no Module
-LIST, oct EXPR, oct, open FILEHANDLE,MODE,LIST, open FILEHANDLE,EXPR, open
-FILEHANDLE, opendir DIRHANDLE,EXPR, ord EXPR, ord, our EXPR, pack
-TEMPLATE,LIST, package NAMESPACE, package, pipe READHANDLE,WRITEHANDLE, pop
-ARRAY, pop, pos SCALAR, pos, print FILEHANDLE LIST, print LIST, print,
-printf FILEHANDLE FORMAT, LIST, printf FORMAT, LIST, prototype FUNCTION,
-push ARRAY,LIST, q/STRING/, qq/STRING/, qr/STRING/, qx/STRING/, qw/STRING/,
-quotemeta EXPR, quotemeta, rand EXPR, rand, read
-FILEHANDLE,SCALAR,LENGTH,OFFSET, read FILEHANDLE,SCALAR,LENGTH, readdir
-DIRHANDLE, readline EXPR, readlink EXPR, readlink, readpipe EXPR, recv
-SOCKET,SCALAR,LENGTH,FLAGS, redo LABEL, redo, ref EXPR, ref, rename
-OLDNAME,NEWNAME, require VERSION, require EXPR, require, reset EXPR, reset,
-return EXPR, return, reverse LIST, rewinddir DIRHANDLE, rindex
-STR,SUBSTR,POSITION, rindex STR,SUBSTR, rmdir FILENAME, rmdir, s///, scalar
-EXPR, seek FILEHANDLE,POSITION,WHENCE, seekdir DIRHANDLE,POS, select
-FILEHANDLE, select, select RBITS,WBITS,EBITS,TIMEOUT, semctl
-ID,SEMNUM,CMD,ARG, semget KEY,NSEMS,FLAGS, semop KEY,OPSTRING, send
-SOCKET,MSG,FLAGS,TO, send SOCKET,MSG,FLAGS, setpgrp PID,PGRP, setpriority
-WHICH,WHO,PRIORITY, setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL, shift ARRAY,
-shift, shmctl ID,CMD,ARG, shmget KEY,SIZE,FLAGS, shmread ID,VAR,POS,SIZE,
-shmwrite ID,STRING,POS,SIZE, shutdown SOCKET,HOW, sin EXPR, sin, sleep
-EXPR, sleep, socket SOCKET,DOMAIN,TYPE,PROTOCOL, socketpair
-SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL, sort SUBNAME LIST, sort BLOCK LIST,
-sort LIST, splice ARRAY,OFFSET,LENGTH,LIST, splice ARRAY,OFFSET,LENGTH,
-splice ARRAY,OFFSET, splice ARRAY, split /PATTERN/,EXPR,LIMIT, split
-/PATTERN/,EXPR, split /PATTERN/, split, sprintf FORMAT, LIST, sqrt EXPR,
-sqrt, srand EXPR, srand, stat FILEHANDLE, stat EXPR, stat, study SCALAR,
-study, sub BLOCK, sub NAME, sub NAME BLOCK, substr
-EXPR,OFFSET,LENGTH,REPLACEMENT, substr EXPR,OFFSET,LENGTH, substr
-EXPR,OFFSET, symlink OLDFILE,NEWFILE, syscall LIST, sysopen
-FILEHANDLE,FILENAME,MODE, sysopen FILEHANDLE,FILENAME,MODE,PERMS, sysread
-FILEHANDLE,SCALAR,LENGTH,OFFSET, sysread FILEHANDLE,SCALAR,LENGTH, sysseek
-FILEHANDLE,POSITION,WHENCE, system LIST, system PROGRAM LIST, syswrite
-FILEHANDLE,SCALAR,LENGTH,OFFSET, syswrite FILEHANDLE,SCALAR,LENGTH,
-syswrite FILEHANDLE,SCALAR, tell FILEHANDLE, tell, telldir DIRHANDLE, tie
-VARIABLE,CLASSNAME,LIST, tied VARIABLE, time, times, tr///, truncate
-FILEHANDLE,LENGTH, truncate EXPR,LENGTH, uc EXPR, uc, ucfirst EXPR,
-ucfirst, umask EXPR, umask, undef EXPR, undef, unlink LIST, unlink, unpack
-TEMPLATE,EXPR, untie VARIABLE, unshift ARRAY,LIST, use Module VERSION LIST,
-use Module VERSION, use Module LIST, use Module, use VERSION, utime LIST,
-values HASH, vec EXPR,OFFSET,BITS, wait, waitpid PID,FLAGS, wantarray, warn
-LIST, write FILEHANDLE, write EXPR, write, y///
-
-=back
-
-=back
-
-=head2 perlreftut - Mark's very short tutorial about references
-
-=over 4
-
-=item DESCRIPTION
-
-=item Who Needs Complicated Data Structures?
-
-=item The Solution
-
-=item Syntax
-
-=over 4
-
-=item Making References
-
-=item Using References
-
-=back
-
-=item An Example
-
-=item Arrow Rule
-
-=item Solution
-
-=item The Rest
-
-=item Summary
-
-=item Credits
-
-=over 4
-
-=item Distribution Conditions
-
-=back
-
-=back
-
-=head2 perldsc - Perl Data Structures Cookbook
-
-=over 4
-
-=item DESCRIPTION
-
-arrays of arrays, hashes of arrays, arrays of hashes, hashes of hashes,
-more elaborate constructs
-
-=item REFERENCES
-
-=item COMMON MISTAKES
-
-=item CAVEAT ON PRECEDENCE
-
-=item WHY YOU SHOULD ALWAYS C<use strict>
-
-=item DEBUGGING
-
-=item CODE EXAMPLES
-
-=item ARRAYS OF ARRAYS
-
-=over 4
-
-=item Declaration of a ARRAY OF ARRAYS
-
-=item Generation of a ARRAY OF ARRAYS
-
-=item Access and Printing of a ARRAY OF ARRAYS
-
-=back
-
-=item HASHES OF ARRAYS
-
-=over 4
-
-=item Declaration of a HASH OF ARRAYS
-
-=item Generation of a HASH OF ARRAYS
-
-=item Access and Printing of a HASH OF ARRAYS
-
-=back
-
-=item ARRAYS OF HASHES
-
-=over 4
-
-=item Declaration of a ARRAY OF HASHES
-
-=item Generation of a ARRAY OF HASHES
-
-=item Access and Printing of a ARRAY OF HASHES
-
-=back
-
-=item HASHES OF HASHES
-
-=over 4
-
-=item Declaration of a HASH OF HASHES
-
-=item Generation of a HASH OF HASHES
-
-=item Access and Printing of a HASH OF HASHES
-
-=back
-
-=item MORE ELABORATE RECORDS
-
-=over 4
-
-=item Declaration of MORE ELABORATE RECORDS
-
-=item Declaration of a HASH OF COMPLEX RECORDS
-
-=item Generation of a HASH OF COMPLEX RECORDS
-
-=back
-
-=item Database Ties
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perlrequick - Perl regular expressions quick start
-
-=over 4
-
-=item DESCRIPTION
-
-=item The Guide
-
-=over 4
-
-=item Simple word matching
-
-=item Using character classes
-
-=item Matching this or that
-
-=item Grouping things and hierarchical matching
-
-=item Extracting matches
-
-=item Matching repetitions
-
-=item More matching
-
-=item Search and replace
-
-=item The split operator
-
-=back
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
-
-=over 4
-
-=item Acknowledgments
-
-=back
-
-=back
-
-=head2 perlpod - plain old documentation
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Verbatim Paragraph
-
-=item Command Paragraph
-
-=item Ordinary Block of Text
-
-=item The Intent
-
-=item Embedding Pods in Perl Modules
-
-=item Common Pod Pitfalls
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perlstyle - Perl style guide
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 perltrap - Perl traps for the unwary
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Awk Traps
-
-=item C Traps
-
-=item Sed Traps
-
-=item Shell Traps
-
-=item Perl Traps
-
-=item Perl4 to Perl5 Traps
-
-Discontinuance, Deprecation, and BugFix traps, Parsing Traps, Numerical
-Traps, General data type traps, Context Traps - scalar, list contexts,
-Precedence Traps, General Regular Expression Traps using s///, etc,
-Subroutine, Signal, Sorting Traps, OS Traps, DBM Traps, Unclassified Traps
-
-=item Discontinuance, Deprecation, and BugFix traps
-
-Discontinuance, Deprecation, BugFix, Discontinuance, Discontinuance,
-Discontinuance, BugFix, Discontinuance, Discontinuance, BugFix,
-Discontinuance, Deprecation, Discontinuance, Discontinuance
-
-=item Parsing Traps
-
-Parsing, Parsing, Parsing, Parsing
-
-=item Numerical Traps
-
-Numerical, Numerical, Numerical, Bitwise string ops
-
-=item General data type traps
-
-(Arrays), (Arrays), (Hashes), (Globs), (Globs), (Scalar String),
-(Constants), (Scalars), (Variable Suicide)
-
-=item Context Traps - scalar, list contexts
-
-(list context), (scalar context), (scalar context), (list, builtin)
-
-=item Precedence Traps
-
-Precedence, Precedence, Precedence, Precedence, Precedence, Precedence,
-Precedence
-
-=item General Regular Expression Traps using s///, etc.
-
-Regular Expression, Regular Expression, Regular Expression, Regular
-Expression, Regular Expression, Regular Expression, Regular Expression,
-Regular Expression
-
-=item Subroutine, Signal, Sorting Traps
-
-(Signals), (Sort Subroutine), warn() won't let you specify a filehandle
-
-=item OS Traps
-
-(SysV), (SysV)
-
-=item Interpolation Traps
-
-Interpolation, Interpolation, Interpolation, Interpolation, Interpolation,
-Interpolation, Interpolation, Interpolation, Interpolation
-
-=item DBM Traps
-
-DBM, DBM
-
-=item Unclassified Traps
-
-C<require>/C<do> trap using returned value, C<split> on empty string with
-LIMIT specified
-
-=back
-
-=back
-
-=head2 perlrun - how to execute the Perl interpreter
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item #! and quoting on non-Unix systems
-
-OS/2, MS-DOS, Win95/NT, Macintosh, VMS
-
-=item Location of Perl
-
-=item Command Switches
-
-B<-0>[I<digits>], B<-a>, B<-C>, B<-c>, B<-d>, B<-d:>I<foo[=bar,baz]>,
-B<-D>I<letters>, B<-D>I<number>, B<-e> I<commandline>, B<-F>I<pattern>,
-B<-h>, B<-i>[I<extension>], B<-I>I<directory>, B<-l>[I<octnum>],
-B<-m>[B<->]I<module>, B<-M>[B<->]I<module>, B<-M>[B<->]I<'module ...'>,
-B<-[mM]>[B<->]I<module=arg[,arg]...>, B<-n>, B<-p>, B<-P>, B<-s>, B<-S>,
-B<-T>, B<-u>, B<-U>, B<-v>, B<-V>, B<-V:>I<name>, B<-w>, B<-W>, B<-X>,
-B<-x> I<directory>
-
-=back
-
-=item ENVIRONMENT
-
-HOME, LOGDIR, PATH, PERL5LIB, PERL5OPT, PERLLIB, PERL5DB, PERL5SHELL
-(specific to the Win32 port), PERL_DEBUG_MSTATS, PERL_DESTRUCT_LEVEL,
-PERL_ROOT (specific to the VMS port), SYS$LOGIN (specific to the VMS port)
-
-=back
-
-=head2 perldiag - various Perl diagnostics
-
-=over 4
-
-=item DESCRIPTION
-
-=back
-
-=head2 perllexwarn - Perl Lexical Warnings
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Default Warnings and Optional Warnings
-
-=item What's wrong with B<-w> and C<$^W>
-
-=item Controlling Warnings from the Command Line
-
-B<-w>, B<-W>, B<-X>
-
-=item Backward Compatibility
-
-=item Category Hierarchy
-
-=item Fatal Warnings
-
-=item Reporting Warnings from a Module
-
-=back
-
-=item TODO
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perldebtut - Perl debugging tutorial
-
-=over 4
-
-=item DESCRIPTION
-
-=item use strict
-
-=item Looking at data and -w and w
-
-=item help
-
-=item Stepping through code
-
-=item Placeholder for a, w, t, T
-
-=item REGULAR EXPRESSIONS
-
-=item OUTPUT TIPS
-
-=item CGI
-
-=item GUIs
-
-=item SUMMARY
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item CONTRIBUTORS
-
-=back
-
-=head2 perldebug - Perl debugging
-
-=over 4
-
-=item DESCRIPTION
-
-=item The Perl Debugger
-
-=over 4
-
-=item Debugger Commands
-
-h [command], p expr, x expr, V [pkg [vars]], X [vars], T, s [expr], n
-[expr], r, <CR>, c [line|sub], l, l min+incr, l min-max, l line, l subname,
--, w [line], f filename, /pattern/, ?pattern?, L, S [[!]regex], t, t expr,
-b [line] [condition], b subname [condition], b postpone subname
-[condition], b load filename, b compile subname, d [line], D, a [line]
-command, a [line], A, W expr, W, O booloption .., O anyoption? .., O
-option=value .., < ?, < [ command ], << command, > ?, > command, >>
-command, { ?, { [ command ], {{ command, ! number, ! -number, ! pattern, !!
-cmd, H -number, q or ^D, R, |dbcmd, ||dbcmd, command, m expr, man [manpage]
-
-=item Configurable Options
-
-C<recallCommand>, C<ShellBang>, C<pager>, C<tkRunning>, C<signalLevel>,
-C<warnLevel>, C<dieLevel>, C<AutoTrace>, C<LineInfo>, C<inhibit_exit>,
-C<PrintRet>, C<ornaments>, C<frame>, C<maxTraceLen>, C<arrayDepth>,
-C<hashDepth>, C<compactDump>, C<veryCompact>, C<globPrint>, C<DumpDBFiles>,
-C<DumpPackages>, C<DumpReused>, C<quote>, C<HighBit>, C<undefPrint>,
-C<UsageOnly>, C<TTY>, C<noTTY>, C<ReadLine>, C<NonStop>
-
-=item Debugger input/output
-
-Prompt, Multiline commands, Stack backtrace, Line Listing Format, Frame
-listing
-
-=item Debugging compile-time statements
-
-=item Debugger Customization
-
-=item Readline Support
-
-=item Editor Support for Debugging
-
-=item The Perl Profiler
-
-=back
-
-=item Debugging regular expressions
-
-=item Debugging memory usage
-
-=item SEE ALSO
-
-=item BUGS
-
-=back
-
-=head2 perlvar - Perl predefined variables
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Predefined Names
-
-$ARG, $_, $<I<digits>>, $MATCH, $&, $PREMATCH, $`, $POSTMATCH, $',
-$LAST_PAREN_MATCH, $+, @LAST_MATCH_END, @+, $MULTILINE_MATCHING, $*,
-input_line_number HANDLE EXPR, $INPUT_LINE_NUMBER, $NR, $,
-input_record_separator HANDLE EXPR, $INPUT_RECORD_SEPARATOR, $RS, $/,
-autoflush HANDLE EXPR, $OUTPUT_AUTOFLUSH, $|, output_field_separator HANDLE
-EXPR, $OUTPUT_FIELD_SEPARATOR, $OFS, $,, output_record_separator HANDLE
-EXPR, $OUTPUT_RECORD_SEPARATOR, $ORS, $\, $LIST_SEPARATOR, $",
-$SUBSCRIPT_SEPARATOR, $SUBSEP, $;, $OFMT, $#, format_page_number HANDLE
-EXPR, $FORMAT_PAGE_NUMBER, $%, format_lines_per_page HANDLE EXPR,
-$FORMAT_LINES_PER_PAGE, $=, format_lines_left HANDLE EXPR,
-$FORMAT_LINES_LEFT, $-, @LAST_MATCH_START, @-, C<$`> is the same as
-C<substr($var, 0, $-[0])>, C<$&> is the same as C<substr($var, $-[0], $+[0]
-- $-[0])>, C<$'> is the same as C<substr($var, $+[0])>, C<$1> is the same
-as C<substr($var, $-[1], $+[1] - $-[1])>, C<$2> is the same as
-C<substr($var, $-[2], $+[2] - $-[2])>, C<$3> is the same as C<substr $var,
-$-[3], $+[3] - $-[3])>, format_name HANDLE EXPR, $FORMAT_NAME, $~,
-format_top_name HANDLE EXPR, $FORMAT_TOP_NAME, $^,
-format_line_break_characters HANDLE EXPR, $FORMAT_LINE_BREAK_CHARACTERS,
-$:, format_formfeed HANDLE EXPR, $FORMAT_FORMFEED, $^L, $ACCUMULATOR, $^A,
-$CHILD_ERROR, $?, $OS_ERROR, $ERRNO, $!, $EXTENDED_OS_ERROR, $^E,
-$EVAL_ERROR, $@, $PROCESS_ID, $PID, $$, $REAL_USER_ID, $UID, $<,
-$EFFECTIVE_USER_ID, $EUID, $>, $REAL_GROUP_ID, $GID, $(,
-$EFFECTIVE_GROUP_ID, $EGID, $), $PROGRAM_NAME, $0, $[, $], $COMPILING, $^C,
-$DEBUGGING, $^D, $SYSTEM_FD_MAX, $^F, $^H, %^H, $INPLACE_EDIT, $^I, $^M,
-$OSNAME, $^O, $PERLDB, $^P, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-0x100, 0x200, $LAST_REGEXP_CODE_RESULT, $^R, $EXCEPTIONS_BEING_CAUGHT, $^S,
-$BASETIME, $^T, $PERL_VERSION, $^V, $WARNING, $^W, ${^WARNING_BITS},
-${^WIDE_SYSTEM_CALLS}, $EXECUTABLE_NAME, $^X, $ARGV, @ARGV, @INC, @_, %INC,
-%ENV, $ENV{expr}, %SIG, $SIG{expr}
-
-=item Error Indicators
-
-=item Technical Note on the Syntax of Variable Names
-
-=back
-
-=item BUGS
-
-=back
-
-=head2 perllol - Manipulating Arrays of Arrays in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Declaration and Access of Arrays of Arrays
-
-=item Growing Your Own
-
-=item Access and Printing
-
-=item Slices
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perlopentut - tutorial on opening things in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item Open E<agrave> la shell
-
-=over 4
-
-=item Simple Opens
-
-=item Pipe Opens
-
-=item The Minus File
-
-=item Mixing Reads and Writes
-
-=item Filters
-
-=back
-
-=item Open E<agrave> la C
-
-=over 4
-
-=item Permissions E<agrave> la mode
-
-=back
-
-=item Obscure Open Tricks
-
-=over 4
-
-=item Re-Opening Files (dups)
-
-=item Dispelling the Dweomer
-
-=item Paths as Opens
-
-=item Single Argument Open
-
-=item Playing with STDIN and STDOUT
-
-=back
-
-=item Other I/O Issues
-
-=over 4
-
-=item Opening Non-File Files
-
-=item Binary Files
-
-=item File Locking
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR and COPYRIGHT
-
-=item HISTORY
-
-=back
-
-=head2 perlretut - Perl regular expressions tutorial
-
-=over 4
-
-=item DESCRIPTION
-
-=item Part 1: The basics
-
-=over 4
-
-=item Simple word matching
-
-=item Using character classes
-
-=item Matching this or that
-
-=item Grouping things and hierarchical matching
-
-=item Extracting matches
-
-=item Matching repetitions
-
-=item Building a regexp
-
-=item Using regular expressions in Perl
-
-=back
-
-=item Part 2: Power tools
-
-=over 4
-
-=item More on characters, strings, and character classes
-
-=item Compiling and saving regular expressions
-
-=item Embedding comments and modifiers in a regular expression
-
-=item Non-capturing groupings
-
-=item Looking ahead and looking behind
-
-=item Using independent subexpressions to prevent backtracking
-
-=item Conditional expressions
-
-=item A bit of magic: executing Perl code in a regular expression
-
-=item Pragmas and debugging
-
-=back
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
-
-=over 4
-
-=item Acknowledgments
-
-=back
-
-=back
-
-=head2 perlre - Perl regular expressions
-
-=over 4
-
-=item DESCRIPTION
-
-i, m, s, x
-
-=over 4
-
-=item Regular Expressions
-
-cntrl, graph, print, punct, xdigit
-
-=item Extended Patterns
-
-C<(?#text)>, C<(?imsx-imsx)>, C<(?:pattern)>, C<(?imsx-imsx:pattern)>,
-C<(?=pattern)>, C<(?!pattern)>, C<(?<=pattern)>, C<(?<!pattern)>, C<(?{
-code })>, C<(??{ code })>, C<< (?>pattern) >>,
-C<(?(condition)yes-pattern|no-pattern)>, C<(?(condition)yes-pattern)>
-
-=item Backtracking
-
-=item Version 8 Regular Expressions
-
-=item Warning on \1 vs $1
-
-=item Repeated patterns matching zero-length substring
-
-=item Combining pieces together
-
-C<ST>, C<S|T>, C<S{REPEAT_COUNT}>, C<S{min,max}>, C<S{min,max}?>, C<S?>,
-C<S*>, C<S+>, C<S??>, C<S*?>, C<S+?>, C<< (?>S) >>, C<(?=S)>, C<(?<=S)>,
-C<(?!S)>, C<(?<!S)>, C<(??{ EXPR })>,
-C<(?(condition)yes-pattern|no-pattern)>
-
-=item Creating custom RE engines
-
-=back
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlref - Perl references and nested data structures
-
-=over 4
-
-=item NOTE
-
-=item DESCRIPTION
-
-=over 4
-
-=item Making References
-
-=item Using References
-
-=item Symbolic references
-
-=item Not-so-symbolic references
-
-=item Pseudo-hashes: Using an array as a hash
-
-=item Function Templates
-
-=back
-
-=item WARNING
-
-=item SEE ALSO
-
-=back
-
-=head2 perlform - Perl formats
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Format Variables
-
-=back
-
-=item NOTES
-
-=over 4
-
-=item Footers
-
-=item Accessing Formatting Internals
-
-=back
-
-=item WARNINGS
-
-=back
-
-=head2 perlboot - Beginner's Object-Oriented Tutorial
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item If we could talk to the animals...
-
-=item Introducing the method invocation arrow
-
-=item Invoking a barnyard
-
-=item The extra parameter of method invocation
-
-=item Calling a second method to simplify things
-
-=item Inheriting the windpipes
-
-=item A few notes about @ISA
-
-=item Overriding the methods
-
-=item Starting the search from a different place
-
-=item The SUPER way of doing things
-
-=item Where we're at so far...
-
-=item A horse is a horse, of course of course -- or is it?
-
-=item Invoking an instance method
-
-=item Accessing the instance data
-
-=item How to build a horse
-
-=item Inheriting the constructor
-
-=item Making a method work with either classes or instances
-
-=item Adding parameters to a method
-
-=item More interesting instances
-
-=item A horse of a different color
-
-=item Summary
-
-=back
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=back
-
-=head2 perltoot - Tom's object-oriented tutorial for perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item Creating a Class
-
-=over 4
-
-=item Object Representation
-
-=item Class Interface
-
-=item Constructors and Instance Methods
-
-=item Planning for the Future: Better Constructors
-
-=item Destructors
-
-=item Other Object Methods
-
-=back
-
-=item Class Data
-
-=over 4
-
-=item Accessing Class Data
-
-=item Debugging Methods
-
-=item Class Destructors
-
-=item Documenting the Interface
-
-=back
-
-=item Aggregation
-
-=item Inheritance
-
-=over 4
-
-=item Overridden Methods
-
-=item Multiple Inheritance
-
-=item UNIVERSAL: The Root of All Objects
-
-=back
-
-=item Alternate Object Representations
-
-=over 4
-
-=item Arrays as Objects
-
-=item Closures as Objects
-
-=back
-
-=item AUTOLOAD: Proxy Methods
-
-=over 4
-
-=item Autoloaded Data Methods
-
-=item Inherited Autoloaded Data Methods
-
-=back
-
-=item Metaclassical Tools
-
-=over 4
-
-=item Class::Struct
-
-=item Data Members as Variables
-
-=back
-
-=item NOTES
-
-=over 4
-
-=item Object Terminology
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
-
-=item COPYRIGHT
-
-=over 4
-
-=item Acknowledgments
-
-=back
-
-=back
-
-=head2 perltootc - Tom's OO Tutorial for Class Data in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item Class Data in a Can
-
-=item Class Data as Package Variables
-
-=over 4
-
-=item Putting All Your Eggs in One Basket
-
-=item Inheritance Concerns
-
-=item The Eponymous Meta-Object
-
-=item Indirect References to Class Data
-
-=item Monadic Classes
-
-=item Translucent Attributes
-
-=back
-
-=item Class Data as Lexical Variables
-
-=over 4
-
-=item Privacy and Responsibility
-
-=item File-Scoped Lexicals
-
-=item More Inheritance Concerns
-
-=item Locking the Door and Throwing Away the Key
-
-=item Translucency Revisited
-
-=back
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR AND COPYRIGHT
-
-=item ACKNOWLEDGEMENTS
-
-=item HISTORY
-
-=back
-
-=head2 perlobj - Perl objects
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item An Object is Simply a Reference
-
-=item A Class is Simply a Package
-
-=item A Method is Simply a Subroutine
-
-=item Method Invocation
-
-=item WARNING
-
-=item Default UNIVERSAL methods
-
-isa(CLASS), can(METHOD), VERSION( [NEED] )
-
-=item Destructors
-
-=item Summary
-
-=item Two-Phased Garbage Collection
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlbot - Bag'o Object Tricks (the BOT)
-
-=over 4
-
-=item DESCRIPTION
-
-=item OO SCALING TIPS
-
-=item INSTANCE VARIABLES
-
-=item SCALAR INSTANCE VARIABLES
-
-=item INSTANCE VARIABLE INHERITANCE
-
-=item OBJECT RELATIONSHIPS
-
-=item OVERRIDING SUPERCLASS METHODS
-
-=item USING RELATIONSHIP WITH SDBM
-
-=item THINKING OF CODE REUSE
-
-=item CLASS CONTEXT AND THE OBJECT
-
-=item INHERITING A CONSTRUCTOR
-
-=item DELEGATION
-
-=back
-
-=head2 perltie - how to hide an object class in a simple variable
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Tying Scalars
-
-TIESCALAR classname, LIST, FETCH this, STORE this, value, UNTIE this,
-DESTROY this
-
-=item Tying Arrays
-
-TIEARRAY classname, LIST, FETCH this, index, STORE this, index, value,
-FETCHSIZE this, STORESIZE this, count, EXTEND this, count, EXISTS this,
-key, DELETE this, key, CLEAR this, PUSH this, LIST, POP this, SHIFT this,
-UNSHIFT this, LIST, SPLICE this, offset, length, LIST, UNTIE this, DESTROY
-this
-
-=item Tying Hashes
-
-USER, HOME, CLOBBER, LIST, TIEHASH classname, LIST, FETCH this, key, STORE
-this, key, value, DELETE this, key, CLEAR this, EXISTS this, key, FIRSTKEY
-this, NEXTKEY this, lastkey, UNTIE this, DESTROY this
-
-=item Tying FileHandles
-
-TIEHANDLE classname, LIST, WRITE this, LIST, PRINT this, LIST, PRINTF this,
-LIST, READ this, LIST, READLINE this, GETC this, CLOSE this, UNTIE this,
-DESTROY this
-
-=item UNTIE this
-
-=item The C<untie> Gotcha
-
-=back
-
-=item SEE ALSO
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 perlipc - Perl interprocess communication (signals, fifos, pipes,
-safe subprocesses, sockets, and semaphores)
-
-=over 4
-
-=item DESCRIPTION
-
-=item Signals
-
-=item Named Pipes
-
-=over 4
-
-=item WARNING
-
-=back
-
-=item Using open() for IPC
-
-=over 4
-
-=item Filehandles
-
-=item Background Processes
-
-=item Complete Dissociation of Child from Parent
-
-=item Safe Pipe Opens
-
-=item Bidirectional Communication with Another Process
-
-=item Bidirectional Communication with Yourself
-
-=back
-
-=item Sockets: Client/Server Communication
-
-=over 4
-
-=item Internet Line Terminators
-
-=item Internet TCP Clients and Servers
-
-=item Unix-Domain TCP Clients and Servers
-
-=back
-
-=item TCP Clients with IO::Socket
-
-=over 4
-
-=item A Simple Client
-
-C<Proto>, C<PeerAddr>, C<PeerPort>
-
-=item A Webget Client
-
-=item Interactive Client with IO::Socket
-
-=back
-
-=item TCP Servers with IO::Socket
-
-Proto, LocalPort, Listen, Reuse
-
-=item UDP: Message Passing
-
-=item SysV IPC
-
-=item NOTES
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlfork - Perl's fork() emulation (EXPERIMENTAL, subject to change)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Behavior of other Perl features in forked pseudo-processes
-
-$$ or $PROCESS_ID, %ENV, chdir() and all other builtins that accept
-filenames, wait() and waitpid(), kill(), exec(), exit(), Open handles to
-files, directories and network sockets
-
-=item Resource limits
-
-=item Killing the parent process
-
-=item Lifetime of the parent process and pseudo-processes
-
-=item CAVEATS AND LIMITATIONS
-
-BEGIN blocks, Open filehandles, Forking pipe open() not yet implemented,
-Global state maintained by XSUBs, Interpreter embedded in larger
-application, Thread-safety of extensions
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlnumber - semantics of numbers and numeric operations in Perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Storing numbers
-
-=item Numeric operators and numeric conversions
-
-=item Flavors of Perl numeric operations
-
-Arithmetic operators except, C<no integer>, Arithmetic operators except,
-C<use integer>, Bitwise operators, C<no integer>, Bitwise operators, C<use
-integer>, Operators which expect an integer, Operators which expect a
-string
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlthrtut - tutorial on threads in Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item What Is A Thread Anyway?
-
-=item Threaded Program Models
-
-=over 4
-
-=item Boss/Worker
-
-=item Work Crew
-
-=item Pipeline
-
-=back
-
-=item Native threads
-
-=item What kind of threads are perl threads?
-
-=item Threadsafe Modules
-
-=item Thread Basics
-
-=over 4
-
-=item Basic Thread Support
-
-=item Creating Threads
-
-=item Giving up control
-
-=item Waiting For A Thread To Exit
-
-=item Errors In Threads
-
-=item Ignoring A Thread
-
-=back
-
-=item Threads And Data
-
-=over 4
-
-=item Shared And Unshared Data
-
-=item Thread Pitfall: Races
-
-=item Controlling access: lock()
-
-=item Thread Pitfall: Deadlocks
-
-=item Queues: Passing Data Around
-
-=back
-
-=item Threads And Code
-
-=over 4
-
-=item Semaphores: Synchronizing Data Access
-
-Basic semaphores, Advanced Semaphores
-
-=item Attributes: Restricting Access To Subroutines
-
-=item Subroutine Locks
-
-=item Methods
-
-=item Locking A Subroutine
-
-=back
-
-=item General Thread Utility Routines
-
-=over 4
-
-=item What Thread Am I In?
-
-=item Thread IDs
-
-=item Are These Threads The Same?
-
-=item What Threads Are Running?
-
-=back
-
-=item A Complete Example
-
-=item Conclusion
-
-=item Bibliography
-
-=over 4
-
-=item Introductory Texts
-
-=item OS-Related References
-
-=item Other References
-
-=back
-
-=item Acknowledgements
-
-=item AUTHOR
-
-=item Copyrights
-
-=back
-
-=head2 perlport - Writing portable Perl
-
-=over 4
-
-=item DESCRIPTION
-
-Not all Perl programs have to be portable, Nearly all of Perl already I<is>
-portable
-
-=item ISSUES
-
-=over 4
-
-=item Newlines
-
-=item Numbers endianness and Width
-
-=item Files and Filesystems
-
-=item System Interaction
-
-=item Interprocess Communication (IPC)
-
-=item External Subroutines (XS)
-
-=item Standard Modules
-
-=item Time and Date
-
-=item Character sets and character encoding
-
-=item Internationalisation
-
-=item System Resources
-
-=item Security
-
-=item Style
-
-=back
-
-=item CPAN Testers
-
-Mailing list: cpan-testers@perl.org, Testing results:
-http://testers.cpan.org/
-
-=item PLATFORMS
-
-=over 4
-
-=item Unix
-
-=item DOS and Derivatives
-
-=item S<Mac OS>
-
-=item VMS
-
-=item VOS
-
-=item EBCDIC Platforms
-
-=item Acorn RISC OS
-
-=item Other perls
-
-=back
-
-=item FUNCTION IMPLEMENTATIONS
-
-=over 4
-
-=item Alphabetical Listing of Perl Functions
-
--I<X> FILEHANDLE, -I<X> EXPR, -I<X>, alarm SECONDS, alarm, binmode
-FILEHANDLE, chmod LIST, chown LIST, chroot FILENAME, chroot, crypt
-PLAINTEXT,SALT, dbmclose HASH, dbmopen HASH,DBNAME,MODE, dump LABEL, exec
-LIST, fcntl FILEHANDLE,FUNCTION,SCALAR, flock FILEHANDLE,OPERATION, fork,
-getlogin, getpgrp PID, getppid, getpriority WHICH,WHO, getpwnam NAME,
-getgrnam NAME, getnetbyname NAME, getpwuid UID, getgrgid GID, getnetbyaddr
-ADDR,ADDRTYPE, getprotobynumber NUMBER, getservbyport PORT,PROTO, getpwent,
-getgrent, gethostent, getnetent, getprotoent, getservent, setpwent,
-setgrent, sethostent STAYOPEN, setnetent STAYOPEN, setprotoent STAYOPEN,
-setservent STAYOPEN, endpwent, endgrent, endhostent, endnetent,
-endprotoent, endservent, getsockopt SOCKET,LEVEL,OPTNAME, glob EXPR, glob,
-ioctl FILEHANDLE,FUNCTION,SCALAR, kill SIGNAL, LIST, link OLDFILE,NEWFILE,
-lstat FILEHANDLE, lstat EXPR, lstat, msgctl ID,CMD,ARG, msgget KEY,FLAGS,
-msgsnd ID,MSG,FLAGS, msgrcv ID,VAR,SIZE,TYPE,FLAGS, open FILEHANDLE,EXPR,
-open FILEHANDLE, pipe READHANDLE,WRITEHANDLE, readlink EXPR, readlink,
-select RBITS,WBITS,EBITS,TIMEOUT, semctl ID,SEMNUM,CMD,ARG, semget
-KEY,NSEMS,FLAGS, semop KEY,OPSTRING, setgrent, setpgrp PID,PGRP,
-setpriority WHICH,WHO,PRIORITY, setpwent, setsockopt
-SOCKET,LEVEL,OPTNAME,OPTVAL, shmctl ID,CMD,ARG, shmget KEY,SIZE,FLAGS,
-shmread ID,VAR,POS,SIZE, shmwrite ID,STRING,POS,SIZE, socketpair
-SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL, stat FILEHANDLE, stat EXPR, stat,
-symlink OLDFILE,NEWFILE, syscall LIST, sysopen
-FILEHANDLE,FILENAME,MODE,PERMS, system LIST, times, truncate
-FILEHANDLE,LENGTH, truncate EXPR,LENGTH, umask EXPR, umask, utime LIST,
-wait, waitpid PID,FLAGS
-
-=back
-
-=item CHANGES
-
-v1.48, 02 February 2001, v1.47, 22 March 2000, v1.46, 12 February 2000,
-v1.45, 20 December 1999, v1.44, 19 July 1999, v1.43, 24 May 1999, v1.42, 22
-May 1999, v1.41, 19 May 1999, v1.40, 11 April 1999, v1.39, 11 February
-1999, v1.38, 31 December 1998, v1.37, 19 December 1998, v1.36, 9 September
-1998, v1.35, 13 August 1998, v1.33, 06 August 1998, v1.32, 05 August 1998,
-v1.30, 03 August 1998, v1.23, 10 July 1998
-
-=item Supported Platforms
-
-=item SEE ALSO
-
-=item AUTHORS / CONTRIBUTORS
-
-=item VERSION
-
-=back
-
-=head2 perllocale - Perl locale handling (internationalization and
-localization)
-
-=over 4
-
-=item DESCRIPTION
-
-=item PREPARING TO USE LOCALES
-
-=item USING LOCALES
-
-=over 4
-
-=item The use locale pragma
-
-=item The setlocale function
-
-=item Finding locales
-
-=item LOCALE PROBLEMS
-
-=item Temporarily fixing locale problems
-
-=item Permanently fixing locale problems
-
-=item Permanently fixing your system's locale configuration
-
-=item Fixing system locale configuration
-
-=item The localeconv function
-
-=back
-
-=item LOCALE CATEGORIES
-
-=over 4
-
-=item Category LC_COLLATE: Collation
-
-=item Category LC_CTYPE: Character Types
-
-=item Category LC_NUMERIC: Numeric Formatting
-
-=item Category LC_MONETARY: Formatting of monetary amounts
-
-=item LC_TIME
-
-=item Other categories
-
-=back
-
-=item SECURITY
-
-=item ENVIRONMENT
-
-PERL_BADLANG, LC_ALL, LANGUAGE, LC_CTYPE, LC_COLLATE, LC_MONETARY,
-LC_NUMERIC, LC_TIME, LANG
-
-=item NOTES
-
-=over 4
-
-=item Backward compatibility
-
-=item I18N:Collate obsolete
-
-=item Sort speed and memory use impacts
-
-=item write() and LC_NUMERIC
-
-=item Freely available locale definitions
-
-=item I18n and l10n
-
-=item An imperfect standard
-
-=back
-
-=item BUGS
-
-=over 4
-
-=item Broken systems
-
-=back
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perlunicode - Unicode support in Perl (EXPERIMENTAL, subject to
-change)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Important Caveat
-
-Input and Output Disciplines, Regular Expressions, C<use utf8> still needed
-to enable a few features
-
-=item Byte and Character semantics
-
-=item Effects of character semantics
-
-=item Character encodings for input and output
-
-=back
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlebcdic - Considerations for running Perl on EBCDIC platforms
-
-=over 4
-
-=item DESCRIPTION
-
-=item COMMON CHARACTER CODE SETS
-
-=over 4
-
-=item ASCII
-
-=item ISO 8859
-
-=item Latin 1 (ISO 8859-1)
-
-=item EBCDIC
-
-=item 13 variant characters
-
-=item 0037
-
-=item 1047
-
-=item POSIX-BC
-
-=back
-
-=item SINGLE OCTET TABLES
-
-recipe 0, recipe 1, recipe 2, recipe 3, recipe 4
-
-=item IDENTIFYING CHARACTER CODE SETS
-
-=item CONVERSIONS
-
-=over 4
-
-=item tr///
-
-=item iconv
-
-=item C RTL
-
-=back
-
-=item OPERATOR DIFFERENCES
-
-=item FUNCTION DIFFERENCES
-
-chr(), ord(), pack(), print(), printf(), sort(), sprintf(), unpack()
-
-=item REGULAR EXPRESSION DIFFERENCES
-
-=item SOCKETS
-
-=item SORTING
-
-=over 4
-
-=item Ignore ASCII vs. EBCDIC sort differences.
-
-=item MONO CASE then sort data.
-
-=item Convert, sort data, then re convert.
-
-=item Perform sorting on one type of machine only.
-
-=back
-
-=item TRANFORMATION FORMATS
-
-=over 4
-
-=item URL decoding and encoding
-
-=item uu encoding and decoding
-
-=item Quoted-Printable encoding and decoding
-
-=item Caesarian cyphers
-
-=back
-
-=item Hashing order and checksums
-
-=item I18N AND L10N
-
-=item MULTI OCTET CHARACTER SETS
-
-=item OS ISSUES
-
-=over 4
-
-=item OS/400
-
-IFS access
-
-=item OS/390
-
-chcp, dataset access, OS/390 iconv, locales
-
-=item VM/ESA?
-
-=item POSIX-BC?
-
-=back
-
-=item BUGS
-
-=item SEE ALSO
-
-=item REFERENCES
-
-=item AUTHOR
-
-=back
-
-=head2 perlsec - Perl security
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Laundering and Detecting Tainted Data
-
-=item Switches On the "#!" Line
-
-=item Cleaning Up Your Path
-
-=item Security Bugs
-
-=item Protecting Your Programs
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlmod - Perl modules (packages and symbol tables)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Packages
-
-=item Symbol Tables
-
-=item Package Constructors and Destructors
-
-=item Perl Classes
-
-=item Perl Modules
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlmodlib - constructing new Perl modules and finding existing ones
-
-=over 4
-
-=item DESCRIPTION
-
-=item THE PERL MODULE LIBRARY
-
-=over 4
-
-=item Pragmatic Modules
-
-attributes, attrs, autouse, base, blib, bytes, charnames, constant,
-diagnostics, fields, filetest, integer, less, lib, locale, open, ops,
-overload, re, sigtrap, strict, subs, utf8, vars, warnings,
-warnings::register
-
-=item Standard Modules
-
-AnyDBM_File, AutoLoader, AutoSplit, B, B::Asmdata, B::Assembler, B::Bblock,
-B::Bytecode, B::C, B::CC, B::Concise, B::Debug, B::Deparse,
-B::Disassembler, B::Lint, B::Showlex, B::Stackobj, B::Stash, B::Terse,
-B::Xref, Benchmark, ByteLoader, CGI, CGI::Apache, CGI::Carp, CGI::Cookie,
-CGI::Fast, CGI::Pretty, CGI::Push, CGI::Switch, CGI::Util, CPAN,
-CPAN::FirstTime, CPAN::Nox, Carp, Carp::Heavy, Class::Struct, Cwd, DB,
-DB_File, Devel::SelfStubber, DirHandle, Dumpvalue, English, Env, Exporter,
-Exporter::Heavy, ExtUtils::Command, ExtUtils::Embed, ExtUtils::Install,
-ExtUtils::Installed, ExtUtils::Liblist, ExtUtils::MM_Cygwin,
-ExtUtils::MM_OS2, ExtUtils::MM_Unix, ExtUtils::MM_VMS, ExtUtils::MM_Win32,
-ExtUtils::MakeMaker, ExtUtils::Manifest, ExtUtils::Mkbootstrap,
-ExtUtils::Mksymlists, ExtUtils::Packlist, ExtUtils::testlib, Fatal, Fcntl,
-File::Basename, File::CheckTree, File::Compare, File::Copy, File::DosGlob,
-File::Find, File::Path, File::Spec, File::Spec::Epoc,
-File::Spec::Functions, File::Spec::Mac, File::Spec::OS2, File::Spec::Unix,
-File::Spec::VMS, File::Spec::Win32, File::Temp, File::stat, FileCache,
-FileHandle, FindBin, GDBM_File, Getopt::Long, Getopt::Std, I18N::Collate,
-IO, IPC::Open2, IPC::Open3, Math::BigFloat, Math::BigInt, Math::Complex,
-Math::Trig, Net::Ping, Net::hostent, Net::netent, Net::protoent,
-Net::servent, O, Opcode, POSIX, Pod::Checker, Pod::Find, Pod::Html,
-Pod::InputObjects, Pod::LaTeX, Pod::Man, Pod::ParseUtils, Pod::Parser,
-Pod::Plainer, Pod::Select, Pod::Text, Pod::Text::Color,
-Pod::Text::Overstrike, Pod::Text::Termcap, Pod::Usage, SDBM_File, Safe,
-Search::Dict, SelectSaver, SelfLoader, Shell, Socket, Symbol,
-Term::ANSIColor, Term::Cap, Term::Complete, Term::ReadLine, Test,
-Test::Harness, Text::Abbrev, Text::ParseWords, Text::Soundex, Text::Tabs,
-Text::Wrap, Thread, Thread::Queue, Thread::Semaphore, Thread::Signal,
-Thread::Specific, Tie::Array, Tie::Handle, Tie::Hash, Tie::RefHash,
-Tie::Scalar, Tie::SubstrHash, Time::Local, Time::gmtime, Time::localtime,
-Time::tm, UNIVERSAL, User::grent, User::pwent, Win32
-
-=item Extension Modules
-
-=back
-
-=item CPAN
-
-=over 4
-
-=item Africa
-
-=item Asia
-
-=item Central America
-
-=item Europe
-
-=item North America
-
-=item Oceania
-
-=item South America
-
-=back
-
-=item Modules: Creation, Use, and Abuse
-
-=over 4
-
-=item Guidelines for Module Creation
-
-Adding a Copyright Notice
-
-=item Guidelines for Converting Perl 4 Library Scripts into Modules
-
-=item Guidelines for Reusing Application Code
-
-=back
-
-=item NOTE
-
-=back
-
-=head2 perlmodinstall - Installing CPAN Modules
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item PREAMBLE
-
-B<DECOMPRESS> the file, B<UNPACK> the file into a directory, B<BUILD> the
-module (sometimes unnecessary), B<INSTALL> the module
-
-=back
-
-=item PORTABILITY
-
-=item HEY
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 perlnewmod - preparing a new module for distribution
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Warning
-
-=item What should I make into a module?
-
-=item Step-by-step: Preparing the ground
-
-Look around, Check it's new, Discuss the need, Choose a name, Check again
-
-=item Step-by-step: Making the module
-
-Start with F<h2xs>, Use L<strict|strict> and L<warnings|warnings>, Use
-L<Carp|Carp>, Use L<Exporter|Exporter> - wisely!, Use L<plain old
-documentation|perlpod>, Write tests, Write the README
-
-=item Step-by-step: Distributing your module
-
-Get a CPAN user ID, C<perl Makefile.PL; make test; make dist>, Upload the
-tarball, Announce to the modules list, Announce to clpa, Fix bugs!
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlfaq1 - General Questions About Perl ($Revision: 1.23 $, $Date:
-1999/05/23 16:08:30 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item What is Perl?
-
-=item Who supports Perl? Who develops it? Why is it free?
-
-=item Which version of Perl should I use?
-
-=item What are perl4 and perl5?
-
-=item What is perl6?
-
-=item How stable is Perl?
-
-=item Is Perl difficult to learn?
-
-=item How does Perl compare with other languages like Java, Python, REXX,
-Scheme, or Tcl?
-
-=item Can I do [task] in Perl?
-
-=item When shouldn't I program in Perl?
-
-=item What's the difference between "perl" and "Perl"?
-
-=item Is it a Perl program or a Perl script?
-
-=item What is a JAPH?
-
-=item Where can I get a list of Larry Wall witticisms?
-
-=item How can I convince my sysadmin/supervisor/employees to use version
-5/5.005/Perl instead of some other language?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq2 - Obtaining and Learning about Perl ($Revision: 1.32 $,
-$Date: 1999/10/14 18:46:09 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item What machines support Perl? Where do I get it?
-
-=item How can I get a binary version of Perl?
-
-=item I don't have a C compiler on my system. How can I compile perl?
-
-=item I copied the Perl binary from one machine to another, but scripts
-don't work.
-
-=item I grabbed the sources and tried to compile but gdbm/dynamic
-loading/malloc/linking/... failed. How do I make it work?
-
-=item What modules and extensions are available for Perl? What is CPAN?
-What does CPAN/src/... mean?
-
-=item Is there an ISO or ANSI certified version of Perl?
-
-=item Where can I get information on Perl?
-
-=item What are the Perl newsgroups on Usenet? Where do I post questions?
-
-=item Where should I post source code?
-
-=item Perl Books
-
-References, Tutorials, Task-Oriented, Special Topics
-
-=item Perl in Magazines
-
-=item Perl on the Net: FTP and WWW Access
-
-=item What mailing lists are there for Perl?
-
-=item Archives of comp.lang.perl.misc
-
-=item Where can I buy a commercial version of Perl?
-
-=item Where do I send bug reports?
-
-=item What is perl.com? Perl Mongers? pm.org? perl.org?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq3 - Programming Tools ($Revision: 1.38 $, $Date: 1999/05/23
-16:08:30 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item How do I do (anything)?
-
-=item How can I use Perl interactively?
-
-=item Is there a Perl shell?
-
-=item How do I debug my Perl programs?
-
-=item How do I profile my Perl programs?
-
-=item How do I cross-reference my Perl programs?
-
-=item Is there a pretty-printer (formatter) for Perl?
-
-=item Is there a ctags for Perl?
-
-=item Is there an IDE or Windows Perl Editor?
-
-CodeMagicCD, Komodo, The Object System, PerlBuilder, Perl code magic,
-visiPerl+, GNU Emacs, MicroEMACS, XEmacs, Elvis, Vile, Vim, Codewright,
-MultiEdit, SlickEdit, Bash, Ksh, Tcsh, Zsh, BBEdit and BBEdit Lite, Alpha
-
-=item Where can I get Perl macros for vi?
-
-=item Where can I get perl-mode for emacs?
-
-=item How can I use curses with Perl?
-
-=item How can I use X or Tk with Perl?
-
-=item How can I generate simple menus without using CGI or Tk?
-
-=item What is undump?
-
-=item How can I make my Perl program run faster?
-
-=item How can I make my Perl program take less memory?
-
-=item Is it unsafe to return a pointer to local data?
-
-=item How can I free an array or hash so my program shrinks?
-
-=item How can I make my CGI script more efficient?
-
-=item How can I hide the source for my Perl program?
-
-=item How can I compile my Perl program into byte code or C?
-
-=item How can I compile Perl into Java?
-
-=item How can I get C<#!perl> to work on [MS-DOS,NT,...]?
-
-=item Can I write useful Perl programs on the command line?
-
-=item Why don't Perl one-liners work on my DOS/Mac/VMS system?
-
-=item Where can I learn about CGI or Web programming in Perl?
-
-=item Where can I learn about object-oriented Perl programming?
-
-=item Where can I learn about linking C with Perl? [h2xs, xsubpp]
-
-=item I've read perlembed, perlguts, etc., but I can't embed perl in
-my C program; what am I doing wrong?
-
-=item When I tried to run my script, I got this message. What does it
-mean?
-
-=item What's MakeMaker?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq4 - Data Manipulation ($Revision: 1.49 $, $Date: 1999/05/23
-20:37:49 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=item Data: Numbers
-
-=over 4
-
-=item Why am I getting long decimals (eg, 19.9499999999999) instead of the
-numbers I should be getting (eg, 19.95)?
-
-=item Why isn't my octal data interpreted correctly?
-
-=item Does Perl have a round() function? What about ceil() and floor()?
-Trig functions?
-
-=item How do I convert bits into ints?
-
-=item Why doesn't & work the way I want it to?
-
-=item How do I multiply matrices?
-
-=item How do I perform an operation on a series of integers?
-
-=item How can I output Roman numerals?
-
-=item Why aren't my random numbers random?
-
-=back
-
-=item Data: Dates
-
-=over 4
-
-=item How do I find the week-of-the-year/day-of-the-year?
-
-=item How do I find the current century or millennium?
-
-=item How can I compare two dates and find the difference?
-
-=item How can I take a string and turn it into epoch seconds?
-
-=item How can I find the Julian Day?
-
-=item How do I find yesterday's date?
-
-=item Does Perl have a Year 2000 problem? Is Perl Y2K compliant?
-
-=back
-
-=item Data: Strings
-
-=over 4
-
-=item How do I validate input?
-
-=item How do I unescape a string?
-
-=item How do I remove consecutive pairs of characters?
-
-=item How do I expand function calls in a string?
-
-=item How do I find matching/nesting anything?
-
-=item How do I reverse a string?
-
-=item How do I expand tabs in a string?
-
-=item How do I reformat a paragraph?
-
-=item How can I access/change the first N letters of a string?
-
-=item How do I change the Nth occurrence of something?
-
-=item How can I count the number of occurrences of a substring within a
-string?
-
-=item How do I capitalize all the words on one line?
-
-=item How can I split a [character] delimited string except when inside
-[character]? (Comma-separated files)
-
-=item How do I strip blank space from the beginning/end of a string?
-
-=item How do I pad a string with blanks or pad a number with zeroes?
-
-=item How do I extract selected columns from a string?
-
-=item How do I find the soundex value of a string?
-
-=item How can I expand variables in text strings?
-
-=item What's wrong with always quoting "$vars"?
-
-=item Why don't my <<HERE documents work?
-
-1. There must be no space after the << part, 2. There (probably) should be
-a semicolon at the end, 3. You can't (easily) have any space in front of
-the tag
-
-=back
-
-=item Data: Arrays
-
-=over 4
-
-=item What is the difference between a list and an array?
-
-=item What is the difference between $array[1] and @array[1]?
-
-=item How can I remove duplicate elements from a list or array?
-
-a), b), c), d), e)
-
-=item How can I tell whether a list or array contains a certain element?
-
-=item How do I compute the difference of two arrays? How do I compute the
-intersection of two arrays?
-
-=item How do I test whether two arrays or hashes are equal?
-
-=item How do I find the first array element for which a condition is true?
-
-=item How do I handle linked lists?
-
-=item How do I handle circular lists?
-
-=item How do I shuffle an array randomly?
-
-=item How do I process/modify each element of an array?
-
-=item How do I select a random element from an array?
-
-=item How do I permute N elements of a list?
-
-=item How do I sort an array by (anything)?
-
-=item How do I manipulate arrays of bits?
-
-=item Why does defined() return true on empty arrays and hashes?
-
-=back
-
-=item Data: Hashes (Associative Arrays)
-
-=over 4
-
-=item How do I process an entire hash?
-
-=item What happens if I add or remove keys from a hash while iterating over
-it?
-
-=item How do I look up a hash element by value?
-
-=item How can I know how many entries are in a hash?
-
-=item How do I sort a hash (optionally by value instead of key)?
-
-=item How can I always keep my hash sorted?
-
-=item What's the difference between "delete" and "undef" with hashes?
-
-=item Why don't my tied hashes make the defined/exists distinction?
-
-=item How do I reset an each() operation part-way through?
-
-=item How can I get the unique keys from two hashes?
-
-=item How can I store a multidimensional array in a DBM file?
-
-=item How can I make my hash remember the order I put elements into it?
-
-=item Why does passing a subroutine an undefined element in a hash create
-it?
-
-=item How can I make the Perl equivalent of a C structure/C++ class/hash or
-array of hashes or arrays?
-
-=item How can I use a reference as a hash key?
-
-=back
-
-=item Data: Misc
-
-=over 4
-
-=item How do I handle binary data correctly?
-
-=item How do I determine whether a scalar is a number/whole/integer/float?
-
-=item How do I keep persistent data across program calls?
-
-=item How do I print out or copy a recursive data structure?
-
-=item How do I define methods for every class/object?
-
-=item How do I verify a credit card checksum?
-
-=item How do I pack arrays of doubles or floats for XS code?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq5 - Files and Formats ($Revision: 1.38 $, $Date: 1999/05/23
-16:08:30 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item How do I flush/unbuffer an output filehandle? Why must I do this?
-
-=item How do I change one line in a file/delete a line in a file/insert a
-line in the middle of a file/append to the beginning of a file?
-
-=item How do I count the number of lines in a file?
-
-=item How do I make a temporary file name?
-
-=item How can I manipulate fixed-record-length files?
-
-=item How can I make a filehandle local to a subroutine? How do I pass
-filehandles between subroutines? How do I make an array of filehandles?
-
-=item How can I use a filehandle indirectly?
-
-=item How can I set up a footer format to be used with write()?
-
-=item How can I write() into a string?
-
-=item How can I output my numbers with commas added?
-
-=item How can I translate tildes (~) in a filename?
-
-=item How come when I open a file read-write it wipes it out?
-
-=item Why do I sometimes get an "Argument list too long" when I use <*>?
-
-=item Is there a leak/bug in glob()?
-
-=item How can I open a file with a leading ">" or trailing blanks?
-
-=item How can I reliably rename a file?
-
-=item How can I lock a file?
-
-=item Why can't I just open(FH, ">file.lock")?
-
-=item I still don't get locking. I just want to increment the number in
-the file. How can I do this?
-
-=item How do I randomly update a binary file?
-
-=item How do I get a file's timestamp in perl?
-
-=item How do I set a file's timestamp in perl?
-
-=item How do I print to more than one file at once?
-
-=item How can I read in an entire file all at once?
-
-=item How can I read in a file by paragraphs?
-
-=item How can I read a single character from a file? From the keyboard?
-
-=item How can I tell whether there's a character waiting on a filehandle?
-
-=item How do I do a C<tail -f> in perl?
-
-=item How do I dup() a filehandle in Perl?
-
-=item How do I close a file descriptor by number?
-
-=item Why can't I use "C:\temp\foo" in DOS paths? What doesn't
-`C:\temp\foo.exe` work?
-
-=item Why doesn't glob("*.*") get all the files?
-
-=item Why does Perl let me delete read-only files? Why does C<-i> clobber
-protected files? Isn't this a bug in Perl?
-
-=item How do I select a random line from a file?
-
-=item Why do I get weird spaces when I print an array of lines?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq6 - Regexes ($Revision: 1.27 $, $Date: 1999/05/23 16:08:30 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item How can I hope to use regular expressions without creating illegible
-and unmaintainable code?
-
-Comments Outside the Regex, Comments Inside the Regex, Different Delimiters
-
-=item I'm having trouble matching over more than one line. What's wrong?
-
-=item How can I pull out lines between two patterns that are themselves on
-different lines?
-
-=item I put a regular expression into $/ but it didn't work. What's wrong?
-
-=item How do I substitute case insensitively on the LHS while preserving
-case on the RHS?
-
-=item How can I make C<\w> match national character sets?
-
-=item How can I match a locale-smart version of C</[a-zA-Z]/>?
-
-=item How can I quote a variable to use in a regex?
-
-=item What is C</o> really for?
-
-=item How do I use a regular expression to strip C style comments from a
-file?
-
-=item Can I use Perl regular expressions to match balanced text?
-
-=item What does it mean that regexes are greedy? How can I get around it?
-
-=item How do I process each word on each line?
-
-=item How can I print out a word-frequency or line-frequency summary?
-
-=item How can I do approximate matching?
-
-=item How do I efficiently match many regular expressions at once?
-
-=item Why don't word-boundary searches with C<\b> work for me?
-
-=item Why does using $&, $`, or $' slow my program down?
-
-=item What good is C<\G> in a regular expression?
-
-=item Are Perl regexes DFAs or NFAs? Are they POSIX compliant?
-
-=item What's wrong with using grep or map in a void context?
-
-=item How can I match strings with multibyte characters?
-
-=item How do I match a pattern that is supplied by the user?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq7 - Perl Language Issues ($Revision: 1.28 $, $Date:
-1999/05/23 20:36:18 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Can I get a BNF/yacc/RE for the Perl language?
-
-=item What are all these $@%&* punctuation signs, and how do I know when to
-use them?
-
-=item Do I always/never have to quote my strings or use semicolons and
-commas?
-
-=item How do I skip some return values?
-
-=item How do I temporarily block warnings?
-
-=item What's an extension?
-
-=item Why do Perl operators have different precedence than C operators?
-
-=item How do I declare/create a structure?
-
-=item How do I create a module?
-
-=item How do I create a class?
-
-=item How can I tell if a variable is tainted?
-
-=item What's a closure?
-
-=item What is variable suicide and how can I prevent it?
-
-=item How can I pass/return a {Function, FileHandle, Array, Hash, Method,
-Regex}?
-
-Passing Variables and Functions, Passing Filehandles, Passing Regexes,
-Passing Methods
-
-=item How do I create a static variable?
-
-=item What's the difference between dynamic and lexical (static) scoping?
-Between local() and my()?
-
-=item How can I access a dynamic variable while a similarly named lexical
-is in scope?
-
-=item What's the difference between deep and shallow binding?
-
-=item Why doesn't "my($foo) = <FILE>;" work right?
-
-=item How do I redefine a builtin function, operator, or method?
-
-=item What's the difference between calling a function as &foo and foo()?
-
-=item How do I create a switch or case statement?
-
-=item How can I catch accesses to undefined variables/functions/methods?
-
-=item Why can't a method included in this same file be found?
-
-=item How can I find out my current package?
-
-=item How can I comment out a large block of perl code?
-
-=item How do I clear a package?
-
-=item How can I use a variable as a variable name?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq8 - System Interaction ($Revision: 1.39 $, $Date: 1999/05/23
-18:37:57 $)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item How do I find out which operating system I'm running under?
-
-=item How come exec() doesn't return?
-
-=item How do I do fancy stuff with the keyboard/screen/mouse?
-
-Keyboard, Screen, Mouse
-
-=item How do I print something out in color?
-
-=item How do I read just one key without waiting for a return key?
-
-=item How do I check whether input is ready on the keyboard?
-
-=item How do I clear the screen?
-
-=item How do I get the screen size?
-
-=item How do I ask the user for a password?
-
-=item How do I read and write the serial port?
-
-lockfiles, open mode, end of line, flushing output, non-blocking input
-
-=item How do I decode encrypted password files?
-
-=item How do I start a process in the background?
-
-STDIN, STDOUT, and STDERR are shared, Signals, Zombies
-
-=item How do I trap control characters/signals?
-
-=item How do I modify the shadow password file on a Unix system?
-
-=item How do I set the time and date?
-
-=item How can I sleep() or alarm() for under a second?
-
-=item How can I measure time under a second?
-
-=item How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
-
-=item Why doesn't my sockets program work under System V (Solaris)? What
-does the error message "Protocol not supported" mean?
-
-=item How can I call my system's unique C functions from Perl?
-
-=item Where do I get the include files to do ioctl() or syscall()?
-
-=item Why do setuid perl scripts complain about kernel problems?
-
-=item How can I open a pipe both to and from a command?
-
-=item Why can't I get the output of a command with system()?
-
-=item How can I capture STDERR from an external command?
-
-=item Why doesn't open() return an error when a pipe open fails?
-
-=item What's wrong with using backticks in a void context?
-
-=item How can I call backticks without shell processing?
-
-=item Why can't my script read from STDIN after I gave it EOF (^D on Unix,
-^Z on MS-DOS)?
-
-=item How can I convert my shell script to perl?
-
-=item Can I use perl to run a telnet or ftp session?
-
-=item How can I write expect in Perl?
-
-=item Is there a way to hide perl's command line from programs such as
-"ps"?
-
-=item I {changed directory, modified my environment} in a perl script. How
-come the change disappeared when I exited the script? How do I get my
-changes to be visible?
-
-Unix
-
-=item How do I close a process's filehandle without waiting for it to
-complete?
-
-=item How do I fork a daemon process?
-
-=item How do I find out if I'm running interactively or not?
-
-=item How do I timeout a slow event?
-
-=item How do I set CPU limits?
-
-=item How do I avoid zombies on a Unix system?
-
-=item How do I use an SQL database?
-
-=item How do I make a system() exit on control-C?
-
-=item How do I open a file without blocking?
-
-=item How do I install a module from CPAN?
-
-=item What's the difference between require and use?
-
-=item How do I keep my own module/library directory?
-
-=item How do I add the directory my program lives in to the module/library
-search path?
-
-=item How do I add a directory to my include path at runtime?
-
-=item What is socket.ph and where do I get it?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlfaq9 - Networking ($Revision: 1.26 $, $Date: 1999/05/23 16:08:30
-$)
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item My CGI script runs from the command line but not the browser. (500
-Server Error)
-
-=item How can I get better error messages from a CGI program?
-
-=item How do I remove HTML from a string?
-
-=item How do I extract URLs?
-
-=item How do I download a file from the user's machine? How do I open a
-file on another machine?
-
-=item How do I make a pop-up menu in HTML?
-
-=item How do I fetch an HTML file?
-
-=item How do I automate an HTML form submission?
-
-=item How do I decode or create those %-encodings on the web?
-
-=item How do I redirect to another page?
-
-=item How do I put a password on my web pages?
-
-=item How do I edit my .htpasswd and .htgroup files with Perl?
-
-=item How do I make sure users can't enter values into a form that cause my
-CGI script to do bad things?
-
-=item How do I parse a mail header?
-
-=item How do I decode a CGI form?
-
-=item How do I check a valid mail address?
-
-=item How do I decode a MIME/BASE64 string?
-
-=item How do I return the user's mail address?
-
-=item How do I send mail?
-
-=item How do I use MIME to make an attachment to a mail message?
-
-=item How do I read mail?
-
-=item How do I find out my hostname/domainname/IP address?
-
-=item How do I fetch a news article or the active newsgroups?
-
-=item How do I fetch/put an FTP file?
-
-=item How can I do RPC in Perl?
-
-=back
-
-=item AUTHOR AND COPYRIGHT
-
-=back
-
-=head2 perlcompile - Introduction to the Perl Compiler-Translator
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Layout
-
-B::Bytecode, B::C, B::CC, B::Lint, B::Deparse, B::Xref
-
-=back
-
-=item Using The Back Ends
-
-=over 4
-
-=item The Cross Referencing Back End
-
-i, &, s, r
-
-=item The Decompiling Back End
-
-=item The Lint Back End
-
-=item The Simple C Back End
-
-=item The Bytecode Back End
-
-=item The Optimized C Back End
-
-B, O, B::Asmdata, B::Assembler, B::Bblock, B::Bytecode, B::C, B::CC,
-B::Debug, B::Deparse, B::Disassembler, B::Lint, B::Showlex, B::Stackobj,
-B::Stash, B::Terse, B::Xref
-
-=back
-
-=item KNOWN PROBLEMS
-
-=item AUTHOR
-
-=back
-
-=head2 perlembed - how to embed perl in your C program
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item PREAMBLE
-
-B<Use C from Perl?>, B<Use a Unix program from Perl?>, B<Use Perl from
-Perl?>, B<Use C from C?>, B<Use Perl from C?>
-
-=item ROADMAP
-
-=item Compiling your C program
-
-=item Adding a Perl interpreter to your C program
-
-=item Calling a Perl subroutine from your C program
-
-=item Evaluating a Perl statement from your C program
-
-=item Performing Perl pattern matches and substitutions from your C program
-
-=item Fiddling with the Perl stack from your C program
-
-=item Maintaining a persistent interpreter
-
-=item Maintaining multiple interpreter instances
-
-=item Using Perl modules, which themselves use C libraries, from your C
-program
-
-=back
-
-=item Embedding Perl under Win32
-
-=item MORAL
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 perldebguts - Guts of Perl debugging
-
-=over 4
-
-=item DESCRIPTION
-
-=item Debugger Internals
-
-=over 4
-
-=item Writing Your Own Debugger
-
-=back
-
-=item Frame Listing Output Examples
-
-=item Debugging regular expressions
-
-=over 4
-
-=item Compile-time output
-
-C<anchored> I<STRING> C<at> I<POS>, C<floating> I<STRING> C<at>
-I<POS1..POS2>, C<matching floating/anchored>, C<minlen>, C<stclass>
-I<TYPE>, C<noscan>, C<isall>, C<GPOS>, C<plus>, C<implicit>, C<with eval>,
-C<anchored(TYPE)>
-
-=item Types of nodes
-
-=item Run-time output
-
-=back
-
-=item Debugging Perl memory usage
-
-=over 4
-
-=item Using C<$ENV{PERL_DEBUG_MSTATS}>
-
-C<buckets SMALLEST(APPROX)..GREATEST(APPROX)>, Free/Used, C<Total sbrk():
-SBRKed/SBRKs:CONTINUOUS>, C<pad: 0>, C<heads: 2192>, C<chain: 0>, C<tail:
-6144>
-
-=item Example of using B<-DL> switch
-
-C<717>, C<002>, C<054>, C<602>, C<702>, C<704>
-
-=item B<-DL> details
-
-C<!!!>, C<!!>, C<!>
-
-=item Limitations of B<-DL> statistics
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlxstut, perlXStut - Tutorial for writing XSUBs
-
-=over 4
-
-=item DESCRIPTION
-
-=item SPECIAL NOTES
-
-=over 4
-
-=item make
-
-=item Version caveat
-
-=item Dynamic Loading versus Static Loading
-
-=back
-
-=item TUTORIAL
-
-=over 4
-
-=item EXAMPLE 1
-
-=item EXAMPLE 2
-
-=item What has gone on?
-
-=item Writing good test scripts
-
-=item EXAMPLE 3
-
-=item What's new here?
-
-=item Input and Output Parameters
-
-=item The XSUBPP Program
-
-=item The TYPEMAP file
-
-=item Warning about Output Arguments
-
-=item EXAMPLE 4
-
-=item What has happened here?
-
-=item Anatomy of .xs file
-
-=item Getting the fat out of XSUBs
-
-=item More about XSUB arguments
-
-=item The Argument Stack
-
-=item Extending your Extension
-
-=item Documenting your Extension
-
-=item Installing your Extension
-
-=item EXAMPLE 5
-
-=item New Things in this Example
-
-=item EXAMPLE 6
-
-=item New Things in this Example
-
-=item EXAMPLE 7 (Coming Soon)
-
-=item EXAMPLE 8 (Coming Soon)
-
-=item EXAMPLE 9 (Coming Soon)
-
-=item Troubleshooting these Examples
-
-=back
-
-=item See also
-
-=item Author
-
-=over 4
-
-=item Last Changed
-
-=back
-
-=back
-
-=head2 perlxs - XS language reference manual
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Introduction
-
-=item On The Road
-
-=item The Anatomy of an XSUB
-
-=item The Argument Stack
-
-=item The RETVAL Variable
-
-=item The MODULE Keyword
-
-=item The PACKAGE Keyword
-
-=item The PREFIX Keyword
-
-=item The OUTPUT: Keyword
-
-=item The NO_OUTPUT Keyword
-
-=item The CODE: Keyword
-
-=item The INIT: Keyword
-
-=item The NO_INIT Keyword
-
-=item Initializing Function Parameters
-
-=item Default Parameter Values
-
-=item The PREINIT: Keyword
-
-=item The SCOPE: Keyword
-
-=item The INPUT: Keyword
-
-=item The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords
-
-=item Variable-length Parameter Lists
-
-=item The C_ARGS: Keyword
-
-=item The PPCODE: Keyword
-
-=item Returning Undef And Empty Lists
-
-=item The REQUIRE: Keyword
-
-=item The CLEANUP: Keyword
-
-=item The POST_CALL: Keyword
-
-=item The BOOT: Keyword
-
-=item The VERSIONCHECK: Keyword
-
-=item The PROTOTYPES: Keyword
-
-=item The PROTOTYPE: Keyword
-
-=item The ALIAS: Keyword
-
-=item The INTERFACE: Keyword
-
-=item The INTERFACE_MACRO: Keyword
-
-=item The INCLUDE: Keyword
-
-=item The CASE: Keyword
-
-=item The & Unary Operator
-
-=item Inserting POD, Comments and C Preprocessor Directives
-
-=item Using XS With C++
-
-=item Interface Strategy
-
-=item Perl Objects And C Structures
-
-=item The Typemap
-
-=back
-
-=item EXAMPLES
-
-=item XS VERSION
-
-=item AUTHOR
-
-=back
-
-=head2 perlclib - Internal replacements for standard C library functions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Conventions
-
-C<t>, C<p>, C<n>, C<s>
-
-=item File Operations
-
-=item File Input and Output
-
-=item File Positioning
-
-=item Memory Management and String Handling
-
-=item Character Class Tests
-
-=item F<stdlib.h> functions
-
-=item Miscellaneous functions
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 perlguts - Introduction to the Perl API
-
-=over 4
-
-=item DESCRIPTION
-
-=item Variables
-
-=over 4
-
-=item Datatypes
-
-=item What is an "IV"?
-
-=item Working with SVs
-
-=item Offsets
-
-=item What's Really Stored in an SV?
-
-=item Working with AVs
-
-=item Working with HVs
-
-=item Hash API Extensions
-
-=item References
-
-=item Blessed References and Class Objects
-
-=item Creating New Variables
-
-=item Reference Counts and Mortality
-
-=item Stashes and Globs
-
-=item Double-Typed SVs
-
-=item Magic Variables
-
-=item Assigning Magic
-
-=item Magic Virtual Tables
-
-=item Finding Magic
-
-=item Understanding the Magic of Tied Hashes and Arrays
-
-=item Localizing changes
-
-C<SAVEINT(int i)>, C<SAVEIV(IV i)>, C<SAVEI32(I32 i)>, C<SAVELONG(long i)>,
-C<SAVESPTR(s)>, C<SAVEPPTR(p)>, C<SAVEFREESV(SV *sv)>, C<SAVEMORTALIZESV(SV
-*sv)>, C<SAVEFREEOP(OP *op)>, C<SAVEFREEPV(p)>, C<SAVECLEARSV(SV *sv)>,
-C<SAVEDELETE(HV *hv, char *key, I32 length)>,
-C<SAVEDESTRUCTOR(DESTRUCTORFUNC_NOCONTEXT_t f, void *p)>,
-C<SAVEDESTRUCTOR_X(DESTRUCTORFUNC_t f, void *p)>, C<SAVESTACK_POS()>, C<SV*
-save_scalar(GV *gv)>, C<AV* save_ary(GV *gv)>, C<HV* save_hash(GV *gv)>,
-C<void save_item(SV *item)>, C<void save_list(SV **sarg, I32 maxsarg)>,
-C<SV* save_svref(SV **sptr)>, C<void save_aptr(AV **aptr)>, C<void
-save_hptr(HV **hptr)>
-
-=back
-
-=item Subroutines
-
-=over 4
-
-=item XSUBs and the Argument Stack
-
-=item Calling Perl Routines from within C Programs
-
-=item Memory Allocation
-
-=item PerlIO
-
-=item Putting a C value on Perl stack
-
-=item Scratchpads
-
-=item Scratchpads and recursion
-
-=back
-
-=item Compiled code
-
-=over 4
-
-=item Code tree
-
-=item Examining the tree
-
-=item Compile pass 1: check routines
-
-=item Compile pass 1a: constant folding
-
-=item Compile pass 2: context propagation
-
-=item Compile pass 3: peephole optimization
-
-=back
-
-=item Examining internal data structures with the C<dump> functions
-
-=item How multiple interpreters and concurrency are supported
-
-=over 4
-
-=item Background and PERL_IMPLICIT_CONTEXT
-
-=item So what happened to dTHR?
-
-=item How do I use all this in extensions?
-
-=item Should I do anything special if I call perl from multiple threads?
-
-=item Future Plans and PERL_IMPLICIT_SYS
-
-=back
-
-=item Internal Functions
-
-A, p, d, s, n, r, f, M, o, j, x
-
-=over 4
-
-=item Formatted Printing of IVs, UVs, and NVs
-
-=item Pointer-To-Integer and Integer-To-Pointer
-
-=item Source Documentation
-
-=back
-
-=item Unicode Support
-
-=over 4
-
-=item What B<is> Unicode, anyway?
-
-=item How can I recognise a UTF8 string?
-
-=item How does UTF8 represent Unicode characters?
-
-=item How does Perl store UTF8 strings?
-
-=item How do I convert a string to UTF8?
-
-=item Is there anything else I need to know?
-
-=back
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlcall - Perl calling conventions from C
-
-=over 4
-
-=item DESCRIPTION
-
-An Error Handler, An Event Driven Program
-
-=item THE CALL_ FUNCTIONS
-
-call_sv, call_pv, call_method, call_argv
-
-=item FLAG VALUES
-
-=over 4
-
-=item G_VOID
-
-=item G_SCALAR
-
-=item G_ARRAY
-
-=item G_DISCARD
-
-=item G_NOARGS
-
-=item G_EVAL
-
-=item G_KEEPERR
-
-=item Determining the Context
-
-=back
-
-=item KNOWN PROBLEMS
-
-=item EXAMPLES
-
-=over 4
-
-=item No Parameters, Nothing returned
-
-=item Passing Parameters
-
-=item Returning a Scalar
-
-=item Returning a list of values
-
-=item Returning a list in a scalar context
-
-=item Returning Data from Perl via the parameter list
-
-=item Using G_EVAL
-
-=item Using G_KEEPERR
-
-=item Using call_sv
-
-=item Using call_argv
-
-=item Using call_method
-
-=item Using GIMME_V
-
-=item Using Perl to dispose of temporaries
-
-=item Strategies for storing Callback Context Information
-
-1. Ignore the problem - Allow only 1 callback, 2. Create a sequence of
-callbacks - hard wired limit, 3. Use a parameter to map to the Perl
-callback
-
-=item Alternate Stack Manipulation
-
-=item Creating and calling an anonymous subroutine in C
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlutil - utilities packaged with the Perl distribution
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item DOCUMENTATION
-
-L<perldoc|perldoc>, L<pod2man|pod2man> and L<pod2text|pod2text>,
-L<pod2html|pod2html> and L<pod2latex|pod2latex>, L<pod2usage|pod2usage>,
-L<podselect|podselect>, L<podchecker|podchecker>, L<splain|splain>,
-L<roffitall|roffitall>
-
-=item CONVERTORS
-
-L<a2p|a2p>, L<s2p|s2p>, L<find2perl|find2perl>
-
-=item Development
-
-L<perlbug|perlbug>, L<h2ph|h2ph>, L<c2ph|c2ph> and L<pstruct|pstruct>,
-L<h2xs|h2xs>, L<dprofpp|dprofpp>, L<perlcc|perlcc>
-
-=item SEE ALSO
-
-=back
-
-=back
-
-=head2 perlfilter - Source Filters
-
-=over 4
-
-=item DESCRIPTION
-
-=item CONCEPTS
-
-=item USING FILTERS
-
-=item WRITING A SOURCE FILTER
-
-=item WRITING A SOURCE FILTER IN C
-
-B<Decryption Filters>
-
-=item CREATING A SOURCE FILTER AS A SEPARATE EXECUTABLE
-
-=item WRITING A SOURCE FILTER IN PERL
-
-=item USING CONTEXT: THE DEBUG FILTER
-
-=item CONCLUSION
-
-=item REQUIREMENTS
-
-=item AUTHOR
-
-=item Copyrights
-
-=back
-
-=head2 perldbmfilter - Perl DBM Filters
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<filter_store_key>, B<filter_store_value>, B<filter_fetch_key>,
-B<filter_fetch_value>
-
-=over 4
-
-=item The Filter
-
-=item An Example -- the NULL termination problem.
-
-=item Another Example -- Key is a C int.
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 perlapi - autogenerated documentation for the perl public API
-
-=over 4
-
-=item DESCRIPTION
-
-AvFILL, av_clear, av_delete, av_exists, av_extend, av_fetch, av_fill,
-av_len, av_make, av_pop, av_push, av_shift, av_store, av_undef, av_unshift,
-bytes_from_utf8, bytes_to_utf8, call_argv, call_method, call_pv, call_sv,
-CLASS, Copy, croak, CvSTASH, dMARK, dORIGMARK, dSP, dXSARGS, dXSI32, ENTER,
-eval_pv, eval_sv, EXTEND, fbm_compile, fbm_instr, FREETMPS, get_av, get_cv,
-get_hv, get_sv, GIMME, GIMME_V, GvSV, gv_fetchmeth, gv_fetchmethod,
-gv_fetchmethod_autoload, gv_stashpv, gv_stashsv, G_ARRAY, G_DISCARD,
-G_EVAL, G_NOARGS, G_SCALAR, G_VOID, HEf_SVKEY, HeHASH, HeKEY, HeKLEN, HePV,
-HeSVKEY, HeSVKEY_force, HeSVKEY_set, HeVAL, HvNAME, hv_clear, hv_delete,
-hv_delete_ent, hv_exists, hv_exists_ent, hv_fetch, hv_fetch_ent,
-hv_iterinit, hv_iterkey, hv_iterkeysv, hv_iternext, hv_iternextsv,
-hv_iterval, hv_magic, hv_store, hv_store_ent, hv_undef, isALNUM, isALPHA,
-isDIGIT, isLOWER, isSPACE, isUPPER, is_utf8_char, is_utf8_string, items,
-ix, LEAVE, looks_like_number, MARK, mg_clear, mg_copy, mg_find, mg_free,
-mg_get, mg_length, mg_magical, mg_set, Move, New, newAV, Newc, newCONSTSUB,
-newHV, newRV_inc, newRV_noinc, NEWSV, newSViv, newSVnv, newSVpv, newSVpvf,
-newSVpvn, newSVrv, newSVsv, newSVuv, newXS, newXSproto, Newz, Nullav,
-Nullch, Nullcv, Nullhv, Nullsv, ORIGMARK, perl_alloc, perl_construct,
-perl_destruct, perl_free, perl_parse, perl_run, PL_modglobal, PL_na,
-PL_sv_no, PL_sv_undef, PL_sv_yes, POPi, POPl, POPn, POPp, POPs, PUSHi,
-PUSHMARK, PUSHn, PUSHp, PUSHs, PUSHu, PUTBACK, Renew, Renewc, require_pv,
-RETVAL, Safefree, savepv, savepvn, SAVETMPS, SP, SPAGAIN, ST, strEQ, strGE,
-strGT, strLE, strLT, strNE, strnEQ, strnNE, StructCopy, SvCUR, SvCUR_set,
-SvEND, SvGETMAGIC, SvGROW, SvIOK, SvIOKp, SvIOK_notUV, SvIOK_off, SvIOK_on,
-SvIOK_only, SvIOK_only_UV, SvIOK_UV, SvIV, SvIVX, SvLEN, SvNIOK, SvNIOKp,
-SvNIOK_off, SvNOK, SvNOKp, SvNOK_off, SvNOK_on, SvNOK_only, SvNV, SvNVX,
-SvOK, SvOOK, SvPOK, SvPOKp, SvPOK_off, SvPOK_on, SvPOK_only,
-SvPOK_only_UTF8, SvPV, SvPVX, SvPV_force, SvPV_nolen, SvREFCNT,
-SvREFCNT_dec, SvREFCNT_inc, SvROK, SvROK_off, SvROK_on, SvRV, SvSETMAGIC,
-SvSetSV, SvSetSV_nosteal, SvSTASH, SvTAINT, SvTAINTED, SvTAINTED_off,
-SvTAINTED_on, SvTRUE, svtype, SvTYPE, SVt_IV, SVt_NV, SVt_PV, SVt_PVAV,
-SVt_PVCV, SVt_PVHV, SVt_PVMG, SvUPGRADE, SvUTF8, SvUTF8_off, SvUTF8_on,
-SvUV, SvUVX, sv_2mortal, sv_bless, sv_catpv, sv_catpvf, sv_catpvf_mg,
-sv_catpvn, sv_catpvn_mg, sv_catpv_mg, sv_catsv, sv_catsv_mg, sv_chop,
-sv_clear, sv_cmp, sv_cmp_locale, sv_dec, sv_derived_from, sv_eq, sv_free,
-sv_gets, sv_grow, sv_inc, sv_insert, sv_isa, sv_isobject, sv_len,
-sv_len_utf8, sv_magic, sv_mortalcopy, sv_newmortal, sv_pvn_force,
-sv_pvutf8n_force, sv_reftype, sv_replace, sv_rvweaken, sv_setiv,
-sv_setiv_mg, sv_setnv, sv_setnv_mg, sv_setpv, sv_setpvf, sv_setpvf_mg,
-sv_setpviv, sv_setpviv_mg, sv_setpvn, sv_setpvn_mg, sv_setpv_mg,
-sv_setref_iv, sv_setref_nv, sv_setref_pv, sv_setref_pvn, sv_setsv,
-sv_setsv_mg, sv_setuv, sv_setuv_mg, sv_true, sv_unmagic, sv_unref,
-sv_upgrade, sv_usepvn, sv_usepvn_mg, sv_utf8_downgrade, sv_utf8_encode,
-sv_utf8_upgrade, sv_vcatpvfn, sv_vsetpvfn, THIS, toLOWER, toUPPER,
-utf8_distance, utf8_hop, utf8_length, utf8_to_bytes, utf8_to_uv,
-utf8_to_uv_simple, uv_to_utf8, warn, XPUSHi, XPUSHn, XPUSHp, XPUSHs,
-XPUSHu, XS, XSRETURN, XSRETURN_EMPTY, XSRETURN_IV, XSRETURN_NO,
-XSRETURN_NV, XSRETURN_PV, XSRETURN_UNDEF, XSRETURN_YES, XST_mIV, XST_mNO,
-XST_mNV, XST_mPV, XST_mUNDEF, XST_mYES, XS_VERSION, XS_VERSION_BOOTCHECK,
-Zero
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlintern - autogenerated documentation of purely B<internal>
- Perl functions
-
-=over 4
-
-=item DESCRIPTION
-
-is_gv_magical, LVRET, PL_DBsingle, PL_DBsub, PL_DBtrace, PL_dowarn,
-PL_last_in_gv, PL_ofs_sv, PL_rs
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlapio - perl's IO abstraction interface.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<PerlIO *>, B<PerlIO_stdin()>, B<PerlIO_stdout()>, B<PerlIO_stderr()>,
-B<PerlIO_open(path, mode)>, B<PerlIO_fdopen(fd,mode)>,
-B<PerlIO_printf(f,fmt,...)>, B<PerlIO_vprintf(f,fmt,a)>,
-B<PerlIO_stdoutf(fmt,...)>, B<PerlIO_read(f,buf,count)>,
-B<PerlIO_write(f,buf,count)>, B<PerlIO_close(f)>, B<PerlIO_puts(f,s)>,
-B<PerlIO_putc(f,c)>, B<PerlIO_ungetc(f,c)>, B<PerlIO_getc(f)>,
-B<PerlIO_eof(f)>, B<PerlIO_error(f)>, B<PerlIO_fileno(f)>,
-B<PerlIO_clearerr(f)>, B<PerlIO_flush(f)>, B<PerlIO_tell(f)>,
-B<PerlIO_seek(f,o,w)>, B<PerlIO_getpos(f,p)>, B<PerlIO_setpos(f,p)>,
-B<PerlIO_rewind(f)>, B<PerlIO_tmpfile()>
-
-=over 4
-
-=item Co-existence with stdio
-
-B<PerlIO_importFILE(f,flags)>, B<PerlIO_exportFILE(f,flags)>,
-B<PerlIO_findFILE(f)>, B<PerlIO_releaseFILE(p,f)>, B<PerlIO_setlinebuf(f)>,
-B<PerlIO_has_cntptr(f)>, B<PerlIO_get_ptr(f)>, B<PerlIO_get_cnt(f)>,
-B<PerlIO_canset_cnt(f)>, B<PerlIO_fast_gets(f)>,
-B<PerlIO_set_ptrcnt(f,p,c)>, B<PerlIO_set_cnt(f,c)>, B<PerlIO_has_base(f)>,
-B<PerlIO_get_base(f)>, B<PerlIO_get_bufsiz(f)>
-
-=back
-
-=back
-
-=head2 perltodo - Perl TO-DO List
-
-=over 4
-
-=item DESCRIPTION
-
-=item Infrastructure
-
-=over 4
-
-=item Mailing list archives
-
-=item Bug tracking system
-
-=item Regression Tests
-
-Coverage, Regression, __DIE__, suidperl, The 25% slowdown from perl4 to
-perl5
-
-=back
-
-=item Configure
-
-=over 4
-
-=item Install HTML
-
-=back
-
-=item Perl Language
-
-=over 4
-
-=item 64-bit Perl
-
-=item Prototypes
-
-Named prototypes, Indirect objects, Method calls, Context, Scoped subs
-
-=back
-
-=item Perl Internals
-
-=over 4
-
-=item magic_setisa
-
-=item Garbage Collection
-
-=item Reliable signals
-
-Alternate runops() for signal despatch, Figure out how to die() in delayed
-sighandler, Add tests for Thread::Signal, Automatic tests against CPAN
-
-=item Interpolated regex performance bugs
-
-=item Memory leaks from failed eval/regcomp
-
-=item Make XS easier to use
-
-=item Make embedded Perl easier to use
-
-=item Namespace cleanup
-
-=item MULTIPLICITY
-
-=item MacPerl
-
-=back
-
-=item Documentation
-
-=over 4
-
-=item A clear division into tutorial and reference
-
-=item Remove the artificial distinction between operators and functions
-
-=item More tutorials
-
-Regular expressions, I/O, pack/unpack, Debugging
-
-=item Include a search tool
-
-=item Include a locate tool
-
-=item Separate function manpages by default
-
-=item Users can't find the manpages
-
-=item Install ALL Documentation
-
-=item Outstanding issues to be documented
-
-=item Adapt www.linuxhq.com for Perl
-
-=item Replace man with a perl program
-
-=item Unicode tutorial
-
-=back
-
-=item Modules
-
-=over 4
-
-=item Update the POSIX extension to conform with the POSIX 1003.1 Edition 2
-
-=item Module versions
-
-=item New modules
-
-=item Profiler
-
-=item Tie Modules
-
-VecArray, SubstrArray, VirtualArray, ShiftSplice
-
-=item Procedural options
-
-=item RPC
-
-=item y2k localtime/gmtime
-
-=item Export File::Find variables
-
-=item Ioctl
-
-=item Debugger attach/detach
-
-=item Regular Expression debugger
-
-=item Alternative RE Syntax
-
-=item Bundled modules
-
-=item Expect
-
-=item GUI::Native
-
-=item Update semibroken auxiliary tools; h2ph, a2p, etc.
-
-=item pod2html
-
-=item Podchecker
-
-=back
-
-=item Tom's Wishes
-
-=over 4
-
-=item Webperl
-
-=item Mobile agents
-
-=item POSIX on non-POSIX
-
-=item Portable installations
-
-=back
-
-=item Win32 Stuff
-
-=over 4
-
-=item Rename new headers to be consistent with the rest
-
-=item Sort out the spawnvp() mess
-
-=item Work out DLL versioning
-
-=item Style-check
-
-=back
-
-=item Would be nice to have
-
-C<pack "(stuff)*">, Contiguous bitfields in pack/unpack, lexperl, Bundled
-perl preprocessor, Use posix calls internally where possible, format
-BOTTOM, -i rename file only when successfully changed, All ARGV input
-should act like <>, report HANDLE [formats], support in perlmain to rerun
-debugger, lvalue functions
-
-=item Possible pragmas
-
-=over 4
-
-=item 'less'
-
-=back
-
-=item Optimizations
-
-=over 4
-
-=item constant function cache
-
-=item foreach(reverse...)
-
-=item Cache eval tree
-
-=item rcatmaybe
-
-=item Shrink opcode tables
-
-=item Cache hash value
-
-=item Optimize away @_ where possible
-
-=item Optimize sort by { $a <=> $b }
-
-=item Rewrite regexp parser for better integrated optimization
-
-=back
-
-=item Vague possibilities
-
-ref function in list context, make tr/// return histogram in list context?,
-Loop control on do{} et al, Explicit switch statements, compile to real
-threaded code, structured types, Modifiable $1 et al
-
-=item To Do Or Not To Do
-
-=over 4
-
-=item Making my() work on "package" variables
-
-=item "or" testing defined not truth
-
-=item "dynamic" lexicals
-
-=item "class"-based, rather than package-based "lexicals"
-
-=back
-
-=item Threading
-
-=over 4
-
-=item Modules
-
-=item Testing
-
-=item $AUTOLOAD
-
-=item exit/die
-
-=item External threads
-
-=item Thread::Pool
-
-=item thread-safety
-
-=item Per-thread GVs
-
-=back
-
-=item Compiler
-
-=over 4
-
-=item Optimization
-
-=item Byteperl
-
-=item Precompiled modules
-
-=item Executables
-
-=item Typed lexicals
-
-=item Win32
-
-=item END blocks
-
-=item _AUTOLOAD
-
-=item comppadlist
-
-=item Cached compilation
-
-=back
-
-=item Recently Finished Tasks
-
-=over 4
-
-=item Figure a way out of $^(capital letter)
-
-=item Filenames
-
-=item Foreign lines
-
-=item Namespace cleanup
-
-=item ISA.pm
-
-=item gettimeofday
-
-=item autocroak?
-
-=back
-
-=back
-
-=head2 perlhack - How to hack at the Perl internals
-
-=over 4
-
-=item DESCRIPTION
-
-Does concept match the general goals of Perl?, Where is the
-implementation?, Backwards compatibility, Could it be a module instead?, Is
-the feature generic enough?, Does it potentially introduce new bugs?, Does
-it preclude other desirable features?, Is the implementation robust?, Is
-the implementation generic enough to be portable?, Is there enough
-documentation?, Is there another way to do it?, Does it create too much
-work?, Patches speak louder than words
-
-=over 4
-
-=item Keeping in sync
-
-rsync'ing the source tree, Using rsync over the LAN, Using pushing over the
-NFS, rsync'ing the patches
-
-=item Why rsync the source tree
-
-It's easier, It's more recent, It's more reliable
-
-=item Why rsync the patches
-
-It's easier, It's a good reference, Finding a start point, Finding how to
-fix a bug, Finding the source of misbehaviour
-
-=item Submitting patches
-
-L<perlguts>, L<perlxstut> and L<perlxs>, L<perlapi>,
-F<Porting/pumpkin.pod>, The perl5-porters FAQ
-
-=item Finding Your Way Around
-
-Core modules, Documentation, Configure, Interpreter
-
-=item Elements of the interpreter
-
-Startup, Parsing, Optimization, Running
-
-=item Internal Variable Types
-
-=item Op Trees
-
-=item Stacks
-
-Argument stack, Mark stack, Save stack
-
-=item Millions of Macros
-
-=item Poking at Perl
-
-=item Using a source-level debugger
-
-run [args], break function_name, break source.c:xxx, step, next, continue,
-finish, 'enter', print
-
-=item Dumping Perl Data Structures
-
-=item Patching
-
-=back
-
-=item EXTERNAL TOOLS FOR DEBUGGING PERL
-
-=over 4
-
-=item Rational Software's Purify
-
-=item Purify on Unix
-
--Accflags=-DPURIFY, -Doptimize='-g', -Uusemymalloc, -Dusemultiplicity
-
-=item Purify on NT
-
-DEFINES, USE_MULTI = define, #PERL_MALLOC = define, CFG = Debug
-
-=item CONCLUSION
-
-I<The Road goes ever on and on, down from the door where it began.>
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 perlhist - the Perl history records
-
-=over 4
-
-=item DESCRIPTION
-
-=item INTRODUCTION
-
-=item THE KEEPERS OF THE PUMPKIN
-
-=over 4
-
-=item PUMPKIN?
-
-=back
-
-=item THE RECORDS
-
-=over 4
-
-=item SELECTED RELEASE SIZES
-
-=item SELECTED PATCH SIZES
-
-=back
-
-=item THE KEEPERS OF THE RECORDS
-
-=back
-
-=head2 perldelta - what's new for perl v5.6
-
-=over 4
-
-=item DESCRIPTION
-
-=item Summary of changes between 5.6.0 and 5.6.1
-
-=over 4
-
-=item Security Issues
-
-=item Core bug fixes
-
-C<UNIVERSAL::isa()>, Memory leaks, Numeric conversions, qw(a\\b), caller(),
-Bugs in regular expressions, "slurp" mode, Autovivification of symbolic
-references to special variables, Lexical warnings, Spurious warnings and
-errors, glob(), Tainting, sort(), #line directives, Subroutine prototypes,
-map(), Debugger, Locales, PERL5OPT, chop(), Unicode support, 64-bit
-support, Compiler, Lvalue subroutines, IO::Socket, File::Find, xsubpp, C<no
-Module;>, Tests
-
-=item Core features
-
-=item Configuration issues
-
-=item Documentation
-
-=item Bundled modules
-
-B::Concise, File::Temp, Pod::LaTeX, Pod::Text::Overstrike, CGI, CPAN,
-Class::Struct, DB_File, Devel::Peek, File::Find, Getopt::Long, IO::Poll,
-IPC::Open3, Math::BigFloat, Math::Complex, Net::Ping, Opcode, Pod::Parser,
-Pod::Text, SDBM_File, Sys::Syslog, Tie::RefHash, Tie::SubstrHash
-
-=item Platform-specific improvements
-
-NCR MP-RAS, NonStop-UX
-
-=item Interpreter cloning, threads, and concurrency
-
-=item Lexically scoped warning categories
-
-=item Unicode and UTF-8 support
-
-=item Support for interpolating named characters
-
-=item "our" declarations
-
-=item Support for strings represented as a vector of ordinals
-
-=item Improved Perl version numbering system
-
-=item New syntax for declaring subroutine attributes
-
-=item File and directory handles can be autovivified
-
-=item open() with more than two arguments
-
-=item 64-bit support
-
-=item Large file support
-
-=item Long doubles
-
-=item "more bits"
-
-=item Enhanced support for sort() subroutines
-
-=item C<sort $coderef @foo> allowed
-
-=item File globbing implemented internally
-
-=item Support for CHECK blocks
-
-=item POSIX character class syntax [: :] supported
-
-=item Better pseudo-random number generator
-
-=item Improved C<qw//> operator
-
-=item Better worst-case behavior of hashes
-
-=item pack() format 'Z' supported
-
-=item pack() format modifier '!' supported
-
-=item pack() and unpack() support counted strings
-
-=item Comments in pack() templates
-
-=item Weak references
-
-=item Binary numbers supported
-
-=item Lvalue subroutines
-
-=item Some arrows may be omitted in calls through references
-
-=item Boolean assignment operators are legal lvalues
-
-=item exists() is supported on subroutine names
-
-=item exists() and delete() are supported on array elements
-
-=item Pseudo-hashes work better
-
-=item Automatic flushing of output buffers
-
-=item Better diagnostics on meaningless filehandle operations
-
-=item Where possible, buffered data discarded from duped input filehandle
-
-=item eof() has the same old magic as <>
-
-=item binmode() can be used to set :crlf and :raw modes
-
-=item C<-T> filetest recognizes UTF-8 encoded files as "text"
-
-=item system(), backticks and pipe open now reflect exec() failure
-
-=item Improved diagnostics
-
-=item Diagnostics follow STDERR
-
-=item More consistent close-on-exec behavior
-
-=item syswrite() ease-of-use
-
-=item Better syntax checks on parenthesized unary operators
-
-=item Bit operators support full native integer width
-
-=item Improved security features
-
-=item More functional bareword prototype (*)
-
-=item C<require> and C<do> may be overridden
-
-=item $^X variables may now have names longer than one character
-
-=item New variable $^C reflects C<-c> switch
-
-=item New variable $^V contains Perl version as a string
-
-=item Optional Y2K warnings
-
-=item Arrays now always interpolate into double-quoted strings
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item Modules
-
-attributes, B, Benchmark, ByteLoader, constant, charnames, Data::Dumper,
-DB, DB_File, Devel::DProf, Devel::Peek, Dumpvalue, DynaLoader, English,
-Env, Fcntl, File::Compare, File::Find, File::Glob, File::Spec,
-File::Spec::Functions, Getopt::Long, IO, JPL, lib, Math::BigInt,
-Math::Complex, Math::Trig, Pod::Parser, Pod::InputObjects, Pod::Checker,
-podchecker, Pod::ParseUtils, Pod::Find, Pod::Select, podselect, Pod::Usage,
-pod2usage, Pod::Text and Pod::Man, SDBM_File, Sys::Syslog, Sys::Hostname,
-Term::ANSIColor, Time::Local, Win32, XSLoader, DBM Filters
-
-=item Pragmata
-
-=back
-
-=item Utility Changes
-
-=over 4
-
-=item dprofpp
-
-=item find2perl
-
-=item h2xs
-
-=item perlcc
-
-=item perldoc
-
-=item The Perl Debugger
-
-=back
-
-=item Improved Documentation
-
-perlapi.pod, perlboot.pod, perlcompile.pod, perldbmfilter.pod,
-perldebug.pod, perldebguts.pod, perlfork.pod, perlfilter.pod, perlhack.pod,
-perlintern.pod, perllexwarn.pod, perlnumber.pod, perlopentut.pod,
-perlreftut.pod, perltootc.pod, perltodo.pod, perlunicode.pod
-
-=item Performance enhancements
-
-=over 4
-
-=item Simple sort() using { $a <=> $b } and the like are optimized
-
-=item Optimized assignments to lexical variables
-
-=item Faster subroutine calls
-
-=item delete(), each(), values() and hash iteration are faster
-
-=back
-
-=item Installation and Configuration Improvements
-
-=over 4
-
-=item -Dusethreads means something different
-
-=item New Configure flags
-
-=item Threadedness and 64-bitness now more daring
-
-=item Long Doubles
-
-=item -Dusemorebits
-
-=item -Duselargefiles
-
-=item installusrbinperl
-
-=item SOCKS support
-
-=item C<-A> flag
-
-=item Enhanced Installation Directories
-
-=item gcc automatically tried if 'cc' does not seem to be working
-
-=back
-
-=item Platform specific changes
-
-=over 4
-
-=item Supported platforms
-
-=item DOS
-
-=item OS390 (OpenEdition MVS)
-
-=item VMS
-
-=item Win32
-
-=back
-
-=item Significant bug fixes
-
-=over 4
-
-=item <HANDLE> on empty files
-
-=item C<eval '...'> improvements
-
-=item All compilation errors are true errors
-
-=item Implicitly closed filehandles are safer
-
-=item Behavior of list slices is more consistent
-
-=item C<(\$)> prototype and C<$foo{a}>
-
-=item C<goto &sub> and AUTOLOAD
-
-=item C<-bareword> allowed under C<use integer>
-
-=item Failures in DESTROY()
-
-=item Locale bugs fixed
-
-=item Memory leaks
-
-=item Spurious subroutine stubs after failed subroutine calls
-
-=item Taint failures under C<-U>
-
-=item END blocks and the C<-c> switch
-
-=item Potential to leak DATA filehandles
-
-=back
-
-=item New or Changed Diagnostics
-
-"%s" variable %s masks earlier declaration in same %s, "my sub" not yet
-implemented, "our" variable %s redeclared, '!' allowed only after types %s,
-/ cannot take a count, / must be followed by a, A or Z, / must be followed
-by a*, A* or Z*, / must follow a numeric type, /%s/: Unrecognized escape
-\\%c passed through, /%s/: Unrecognized escape \\%c in character class
-passed through, /%s/ should probably be written as "%s", %s() called too
-early to check prototype, %s argument is not a HASH or ARRAY element, %s
-argument is not a HASH or ARRAY element or slice, %s argument is not a
-subroutine name, %s package attribute may clash with future reserved word:
-%s, (in cleanup) %s, <> should be quotes, Attempt to join self, Bad evalled
-substitution pattern, Bad realloc() ignored, Bareword found in conditional,
-Binary number > 0b11111111111111111111111111111111 non-portable, Bit vector
-size > 32 non-portable, Buffer overflow in prime_env_iter: %s, Can't check
-filesystem of script "%s", Can't declare class for non-scalar %s in "%s",
-Can't declare %s in "%s", Can't ignore signal CHLD, forcing to default,
-Can't modify non-lvalue subroutine call, Can't read CRTL environ, Can't
-remove %s: %s, skipping file, Can't return %s from lvalue subroutine, Can't
-weaken a nonreference, Character class [:%s:] unknown, Character class
-syntax [%s] belongs inside character classes, Constant is not %s reference,
-constant(%s): %s, CORE::%s is not a keyword, defined(@array) is deprecated,
-defined(%hash) is deprecated, Did not produce a valid header, (Did you mean
-"local" instead of "our"?), Document contains no data, entering effective
-%s failed, false [] range "%s" in regexp, Filehandle %s opened only for
-output, flock() on closed filehandle %s, Global symbol "%s" requires
-explicit package name, Hexadecimal number > 0xffffffff non-portable,
-Ill-formed CRTL environ value "%s", Ill-formed message in prime_env_iter:
-|%s|, Illegal binary digit %s, Illegal binary digit %s ignored, Illegal
-number of bits in vec, Integer overflow in %s number, Invalid %s attribute:
-%s, Invalid %s attributes: %s, invalid [] range "%s" in regexp, Invalid
-separator character %s in attribute list, Invalid separator character %s in
-subroutine attribute list, leaving effective %s failed, Lvalue subs
-returning %s not implemented yet, Method %s not permitted, Missing
-%sbrace%s on \N{}, Missing command in piped open, Missing name in "my sub",
-No %s specified for -%c, No package name allowed for variable %s in "our",
-No space allowed after -%c, no UTC offset information; assuming local time
-is UTC, Octal number > 037777777777 non-portable, panic: del_backref,
-panic: kid popen errno read, panic: magic_killbackrefs, Parentheses missing
-around "%s" list, Possible unintended interpolation of %s in string,
-Possible Y2K bug: %s, pragma "attrs" is deprecated, use "sub NAME : ATTRS"
-instead, Premature end of script headers, Repeat count in pack overflows,
-Repeat count in unpack overflows, realloc() of freed memory ignored,
-Reference is already weak, setpgrp can't take arguments, Strange *+?{} on
-zero-length expression, switching effective %s is not implemented, This
-Perl can't reset CRTL environ elements (%s), This Perl can't set CRTL
-environ elements (%s=%s), Too late to run %s block, Unknown open() mode
-'%s', Unknown process %x sent message to prime_env_iter: %s, Unrecognized
-escape \\%c passed through, Unterminated attribute parameter in attribute
-list, Unterminated attribute list, Unterminated attribute parameter in
-subroutine attribute list, Unterminated subroutine attribute list, Value of
-CLI symbol "%s" too long, Version number must be a constant number
-
-=item New tests
-
-=item Incompatible Changes
-
-=over 4
-
-=item Perl Source Incompatibilities
-
-CHECK is a new keyword, Treatment of list slices of undef has changed,
-Format of $English::PERL_VERSION is different, Literals of the form
-C<1.2.3> parse differently, Possibly changed pseudo-random number
-generator, Hashing function for hash keys has changed, C<undef> fails on
-read only values, Close-on-exec bit may be set on pipe and socket handles,
-Writing C<"$$1"> to mean C<"${$}1"> is unsupported, delete(), each(),
-values() and C<\(%h)>, vec(EXPR,OFFSET,BITS) enforces powers-of-two BITS,
-Text of some diagnostic output has changed, C<%@> has been removed,
-Parenthesized not() behaves like a list operator, Semantics of bareword
-prototype C<(*)> have changed, Semantics of bit operators may have changed
-on 64-bit platforms, More builtins taint their results
-
-=item C Source Incompatibilities
-
-C<PERL_POLLUTE>, C<PERL_IMPLICIT_CONTEXT>, C<PERL_POLLUTE_MALLOC>
-
-=item Compatible C Source API Changes
-
-C<PATCHLEVEL> is now C<PERL_VERSION>
-
-=item Binary Incompatibilities
-
-=back
-
-=item Known Problems
-
-=over 4
-
-=item Localizing a tied hash element may leak memory
-
-=item Known test failures
-
-64-bit builds, Failure of Thread tests, NEXTSTEP 3.3 POSIX test failure,
-Tru64 (aka Digital UNIX, aka DEC OSF/1) lib/sdbm test failure with gcc
-
-=item EBCDIC platforms not fully supported
-
-=item UNICOS/mk CC failures during Configure run
-
-=item Arrow operator and arrays
-
-=item Experimental features
-
-Threads, Unicode, 64-bit support, Lvalue subroutines, Weak references, The
-pseudo-hash data type, The Compiler suite, Internal implementation of file
-globbing, The DB module, The regular expression code constructs:
-
-=back
-
-=item Obsolete Diagnostics
-
-Character class syntax [: :] is reserved for future extensions, Ill-formed
-logical name |%s| in prime_env_iter, In string, @%s now must be written as
-\@%s, Probable precedence problem on %s, regexp too big, Use of "$$<digit>"
-to mean "${$}<digit>" is deprecated
-
-=item Reporting Bugs
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perl5005delta, perldelta - what's new for perl5.005
-
-=over 4
-
-=item DESCRIPTION
-
-=item About the new versioning system
-
-=item Incompatible Changes
-
-=over 4
-
-=item WARNING: This version is not binary compatible with Perl 5.004.
-
-=item Default installation structure has changed
-
-=item Perl Source Compatibility
-
-=item C Source Compatibility
-
-=item Binary Compatibility
-
-=item Security fixes may affect compatibility
-
-=item Relaxed new mandatory warnings introduced in 5.004
-
-=item Licensing
-
-=back
-
-=item Core Changes
-
-=over 4
-
-=item Threads
-
-=item Compiler
-
-=item Regular Expressions
-
-Many new and improved optimizations, Many bug fixes, New regular expression
-constructs, New operator for precompiled regular expressions, Other
-improvements, Incompatible changes
-
-=item Improved malloc()
-
-=item Quicksort is internally implemented
-
-=item Reliable signals
-
-=item Reliable stack pointers
-
-=item More generous treatment of carriage returns
-
-=item Memory leaks
-
-=item Better support for multiple interpreters
-
-=item Behavior of local() on array and hash elements is now well-defined
-
-=item C<%!> is transparently tied to the L<Errno> module
-
-=item Pseudo-hashes are supported
-
-=item C<EXPR foreach EXPR> is supported
-
-=item Keywords can be globally overridden
-
-=item C<$^E> is meaningful on Win32
-
-=item C<foreach (1..1000000)> optimized
-
-=item C<Foo::> can be used as implicitly quoted package name
-
-=item C<exists $Foo::{Bar::}> tests existence of a package
-
-=item Better locale support
-
-=item Experimental support for 64-bit platforms
-
-=item prototype() returns useful results on builtins
-
-=item Extended support for exception handling
-
-=item Re-blessing in DESTROY() supported for chaining DESTROY() methods
-
-=item All C<printf> format conversions are handled internally
-
-=item New C<INIT> keyword
-
-=item New C<lock> keyword
-
-=item New C<qr//> operator
-
-=item C<our> is now a reserved word
-
-=item Tied arrays are now fully supported
-
-=item Tied handles support is better
-
-=item 4th argument to substr
-
-=item Negative LENGTH argument to splice
-
-=item Magic lvalues are now more magical
-
-=item <> now reads in records
-
-=back
-
-=item Supported Platforms
-
-=over 4
-
-=item New Platforms
-
-=item Changes in existing support
-
-=back
-
-=item Modules and Pragmata
-
-=over 4
-
-=item New Modules
-
-B, Data::Dumper, Dumpvalue, Errno, File::Spec, ExtUtils::Installed,
-ExtUtils::Packlist, Fatal, IPC::SysV, Test, Tie::Array, Tie::Handle,
-Thread, attrs, fields, re
-
-=item Changes in existing modules
-
-Benchmark, Carp, CGI, Fcntl, Math::Complex, Math::Trig, POSIX, DB_File,
-MakeMaker, CPAN, Cwd
-
-=back
-
-=item Utility Changes
-
-=item Documentation Changes
-
-=item New Diagnostics
-
-Ambiguous call resolved as CORE::%s(), qualify as such or use &, Bad index
-while coercing array into hash, Bareword "%s" refers to nonexistent
-package, Can't call method "%s" on an undefined value, Can't check
-filesystem of script "%s" for nosuid, Can't coerce array into hash, Can't
-goto subroutine from an eval-string, Can't localize pseudo-hash element,
-Can't use %%! because Errno.pm is not available, Cannot find an opnumber
-for "%s", Character class syntax [. .] is reserved for future extensions,
-Character class syntax [: :] is reserved for future extensions, Character
-class syntax [= =] is reserved for future extensions, %s: Eval-group in
-insecure regular expression, %s: Eval-group not allowed, use re 'eval', %s:
-Eval-group not allowed at run time, Explicit blessing to '' (assuming
-package main), Illegal hex digit ignored, No such array field, No such
-field "%s" in variable %s of type %s, Out of memory during ridiculously
-large request, Range iterator outside integer range, Recursive inheritance
-detected while looking for method '%s' %s, Reference found where even-sized
-list expected, Undefined value assigned to typeglob, Use of reserved word
-"%s" is deprecated, perl: warning: Setting locale failed
-
-=item Obsolete Diagnostics
-
-Can't mktemp(), Can't write to temp file for B<-e>: %s, Cannot open
-temporary file, regexp too big
-
-=item Configuration Changes
-
-=item BUGS
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perl5004delta, perldelta - what's new for perl5.004
-
-=over 4
-
-=item DESCRIPTION
-
-=item Supported Environments
-
-=item Core Changes
-
-=over 4
-
-=item List assignment to %ENV works
-
-=item Change to "Can't locate Foo.pm in @INC" error
-
-=item Compilation option: Binary compatibility with 5.003
-
-=item $PERL5OPT environment variable
-
-=item Limitations on B<-M>, B<-m>, and B<-T> options
-
-=item More precise warnings
-
-=item Deprecated: Inherited C<AUTOLOAD> for non-methods
-
-=item Previously deprecated %OVERLOAD is no longer usable
-
-=item Subroutine arguments created only when they're modified
-
-=item Group vector changeable with C<$)>
-
-=item Fixed parsing of $$<digit>, &$<digit>, etc.
-
-=item Fixed localization of $<digit>, $&, etc.
-
-=item No resetting of $. on implicit close
-
-=item C<wantarray> may return undef
-
-=item C<eval EXPR> determines value of EXPR in scalar context
-
-=item Changes to tainting checks
-
-No glob() or <*>, No spawning if tainted $CDPATH, $ENV, $BASH_ENV, No
-spawning if tainted $TERM doesn't look like a terminal name
-
-=item New Opcode module and revised Safe module
-
-=item Embedding improvements
-
-=item Internal change: FileHandle class based on IO::* classes
-
-=item Internal change: PerlIO abstraction interface
-
-=item New and changed syntax
-
-$coderef->(PARAMS)
-
-=item New and changed builtin constants
-
-__PACKAGE__
-
-=item New and changed builtin variables
-
-$^E, $^H, $^M
-
-=item New and changed builtin functions
-
-delete on slices, flock, printf and sprintf, keys as an lvalue, my() in
-Control Structures, pack() and unpack(), sysseek(), use VERSION, use Module
-VERSION LIST, prototype(FUNCTION), srand, $_ as Default, C<m//gc> does not
-reset search position on failure, C<m//x> ignores whitespace before ?*+{},
-nested C<sub{}> closures work now, formats work right on changing lexicals
-
-=item New builtin methods
-
-isa(CLASS), can(METHOD), VERSION( [NEED] )
-
-=item TIEHANDLE now supported
-
-TIEHANDLE classname, LIST, PRINT this, LIST, PRINTF this, LIST, READ this
-LIST, READLINE this, GETC this, DESTROY this
-
-=item Malloc enhancements
-
--DPERL_EMERGENCY_SBRK, -DPACK_MALLOC, -DTWO_POT_OPTIMIZE
-
-=item Miscellaneous efficiency enhancements
-
-=back
-
-=item Support for More Operating Systems
-
-=over 4
-
-=item Win32
-
-=item Plan 9
-
-=item QNX
-
-=item AmigaOS
-
-=back
-
-=item Pragmata
-
-use autouse MODULE => qw(sub1 sub2 sub3), use blib, use blib 'dir', use
-constant NAME => VALUE, use locale, use ops, use vmsish
-
-=item Modules
-
-=over 4
-
-=item Required Updates
-
-=item Installation directories
-
-=item Module information summary
-
-=item Fcntl
-
-=item IO
-
-=item Math::Complex
-
-=item Math::Trig
-
-=item DB_File
-
-=item Net::Ping
-
-=item Object-oriented overrides for builtin operators
-
-=back
-
-=item Utility Changes
-
-=over 4
-
-=item pod2html
-
-Sends converted HTML to standard output
-
-=item xsubpp
-
-C<void> XSUBs now default to returning nothing
-
-=back
-
-=item C Language API Changes
-
-C<gv_fetchmethod> and C<perl_call_sv>, C<perl_eval_pv>, Extended API for
-manipulating hashes
-
-=item Documentation Changes
-
-L<perldelta>, L<perlfaq>, L<perllocale>, L<perltoot>, L<perlapio>,
-L<perlmodlib>, L<perldebug>, L<perlsec>
-
-=item New Diagnostics
-
-"my" variable %s masks earlier declaration in same scope, %s argument is
-not a HASH element or slice, Allocation too large: %lx, Allocation too
-large, Applying %s to %s will act on scalar(%s), Attempt to free
-nonexistent shared string, Attempt to use reference as lvalue in substr,
-Bareword "%s" refers to nonexistent package, Can't redefine active sort
-subroutine %s, Can't use bareword ("%s") as %s ref while "strict refs" in
-use, Cannot resolve method `%s' overloading `%s' in package `%s', Constant
-subroutine %s redefined, Constant subroutine %s undefined, Copy method did
-not return a reference, Died, Exiting pseudo-block via %s, Identifier too
-long, Illegal character %s (carriage return), Illegal switch in PERL5OPT:
-%s, Integer overflow in hex number, Integer overflow in octal number,
-internal error: glob failed, Invalid conversion in %s: "%s", Invalid type
-in pack: '%s', Invalid type in unpack: '%s', Name "%s::%s" used only once:
-possible typo, Null picture in formline, Offset outside string, Out of
-memory!, Out of memory during request for %s, panic: frexp, Possible
-attempt to put comments in qw() list, Possible attempt to separate words
-with commas, Scalar value @%s{%s} better written as $%s{%s}, Stub found
-while resolving method `%s' overloading `%s' in %s, Too late for "B<-T>"
-option, untie attempted while %d inner references still exist, Unrecognized
-character %s, Unsupported function fork, Use of "$$<digit>" to mean
-"${$}<digit>" is deprecated, Value of %s can be "0"; test with defined(),
-Variable "%s" may be unavailable, Variable "%s" will not stay shared,
-Warning: something's wrong, Ill-formed logical name |%s| in prime_env_iter,
-Got an error from DosAllocMem, Malformed PERLLIB_PREFIX, PERL_SH_DIR too
-long, Process terminated by SIG%s
-
-=item BUGS
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 perlaix, README.aix - Perl version 5 on IBM Unix (AIX) systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Compiling Perl 5 on AIX
-
-=item OS level
-
-=item Building Dynamic Extensions on AIX
-
-=item The IBM ANSI C Compiler
-
-=item Using GNU's gcc for building perl
-
-=item Using Large Files with Perl
-
-=item Threaded Perl
-
-=item 64-bit Perl
-
-=item GDBM and Threads
-
-=item NFS filesystems and utime(2)
-
-=back
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlamiga - Perl under Amiga OS
-
-=over 4
-
-=item SYNOPSIS
-
-=back
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Prerequisites
-
-B<Unix emulation for AmigaOS: ixemul.library>, B<Version of Amiga OS>
-
-=item Starting Perl programs under AmigaOS
-
-=item Shortcomings of Perl under AmigaOS
-
-=back
-
-=item INSTALLATION
-
-=item Accessing documentation
-
-=over 4
-
-=item Manpages
-
-=item B<HTML>
-
-=item B<GNU> C<info> files
-
-=item C<LaTeX> docs
-
-=back
-
-=item BUILD
-
-=over 4
-
-=item Prerequisites
-
-=item Getting the perl source
-
-=item Making
-
-sh Configure -Dprefix=/ade -Dloclibpth=/ade/lib
-
-=item Testing
-
-=item Installing the built perl
-
-=back
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 perlbs2000, README.BS2000 - building and installing Perl for BS2000.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item gzip
-
-=item bison
-
-=item Unpacking
-
-=item Compiling
-
-=item Testing
-
-=item Install
-
-=item Using Perl in the Posix-Shell
-
-=item Using Perl in "native" BS2000
-
-=item Floating point anomalies
-
-=back
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=over 4
-
-=item Mailing list
-
-=back
-
-=item HISTORY
-
-=back
-
-=head2 perlcygwin, README.cygwin - Perl for Cygwin
-
-=over 4
-
-=item SYNOPSIS
-
-=item PREREQUISITES
-
-=over 4
-
-=item Cygwin = GNU+Cygnus+Windows (Don't leave UNIX without it)
-
-=item Cygwin Configuration
-
-C<PATH>, I<nroff>, Permissions
-
-=back
-
-=item CONFIGURE
-
-=over 4
-
-=item Strip Binaries
-
-=item Optional Libraries
-
-C<-lcrypt>, C<-lgdbm> (C<use GDBM_File>), C<-ldb> (C<use DB_File>),
-C<-lcygipc> (C<use IPC::SysV>)
-
-=item Configure-time Options
-
-C<-Uusedl>, C<-Uusemymalloc>, C<-Dusemultiplicity>, C<-Duseperlio>,
-C<-Duse64bitint>, C<-Duselongdouble>, C<-Dusethreads>, C<-Duselargefiles>
-
-=item Suspicious Warnings
-
-I<dlsym()>, Win9x and C<d_eofnblk>, Compiler/Preprocessor defines
-
-=back
-
-=item MAKE
-
-=over 4
-
-=item Warnings
-
-=item ld2
-
-=back
-
-=item TEST
-
-=over 4
-
-=item File Permissions
-
-=item Hard Links
-
-=item Filetime Granularity
-
-=item Tainting Checks
-
-=item /etc/group
-
-=item Script Portability
-
-Pathnames, Text/Binary, F<.exe>, chown(), Miscellaneous
-
-=back
-
-=item INSTALL
-
-=item MANIFEST
-
-Documentation, Build, Configure, Make, Install, Tests, Compiled Perl
-Source, Compiled Module Source, Perl Modules/Scripts
-
-=item BUGS
-
-=item AUTHORS
-
-=item HISTORY
-
-=back
-
-=head2 perldos - Perl under DOS, W31, W95.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Prerequisites
-
-DJGPP, Pthreads
-
-=item Shortcomings of Perl under DOS
-
-=item Building
-
-=item Testing
-
-=item Installation
-
-=back
-
-=item BUILDING AND INSTALLING MODULES
-
-=over 4
-
-=item Prerequisites
-
-=item Unpacking CPAN Modules
-
-=item Building Non-XS Modules
-
-=item Building XS Modules
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlepoc, README.epoc - Perl for EPOC
-
-=over 4
-
-=item SYNOPSIS
-
-=item INTRODUCTION
-
-=item INSTALLING PERL ON EPOC
-
-=item STARTING PERL ON EPOC
-
-=item STOPPING PERL ON EPOC
-
-=item USING PERL ON EPOC
-
-=over 4
-
-=item I/O Redirection
-
-=item PATH Names
-
-=item Editors
-
-=item Features
-
-=item Restrictions
-
-=item Compiling Perl 5 on the EPOC cross compiling environment
-
-=back
-
-=item SUPPORT STATUS
-
-=item AUTHOR
-
-=item LAST UPDATE
-
-=back
-
-=head2 perlhpux, README.hpux - Perl version 5 on Hewlett-Packard Unix
-(HP-UX) systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Compiling Perl 5 on HP-UX
-
-=item PA-RISC
-
-=item PA-RISC 1.0
-
-=item PA-RISC 1.1
-
-=item PA-RISC 2.0
-
-=item Portability Between PA-RISC Versions
-
-=item Building Dynamic Extensions on HP-UX
-
-=item The HP ANSI C Compiler
-
-=item Using Large Files with Perl
-
-=item Threaded Perl
-
-=item 64-bit Perl
-
-=item GDBM and Threads
-
-=item NFS filesystems and utime(2)
-
-=item perl -P and //
-
-=back
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlmachten, README.machten - Perl version 5 on Power MachTen
-systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Compiling Perl 5 on MachTen
-
-=item Failures during C<make test>
-
-op/lexassign.t, pragma/warnings.t
-
-=item Building external modules
-
-=back
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlmacos, README.macos - Perl under Mac OS (Classic)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item DATE
-
-=back
-
-=head2 perlmpeix, README.mpeix - Perl/iX for HP e3000 MPE
-
-=head1 SYNOPSIS
-
-=over 4
-
-=item What's New
-
-=item System Requirements
-
-=item How to Obtain Perl/iX
-
-=item Distribution Contents Highlights
-
-README, public_html/feedback.cgi, 4, 6
-
-=item Getting Started with Perl/iX
-
-=item MPE/iX Implementation Considerations
-
-=item Change History
-
-=back
-
-=head2 perlos2 - Perl under OS/2, DOS, Win0.3*, Win0.95 and WinNT.
-
-=over 4
-
-=item SYNOPSIS
-
-=back
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Target
-
-=item Other OSes
-
-=item Prerequisites
-
-EMX, RSX, HPFS, pdksh
-
-=item Starting Perl programs under OS/2 (and DOS and...)
-
-=item Starting OS/2 (and DOS) programs under Perl
-
-=back
-
-=item Frequently asked questions
-
-=over 4
-
-=item "It does not work"
-
-=item I cannot run external programs
-
-=item I cannot embed perl into my program, or use F<perl.dll> from my
-program.
-
-Is your program EMX-compiled with C<-Zmt -Zcrtdll>?, Did you use
-L<ExtUtils::Embed>?
-
-=item C<``> and pipe-C<open> do not work under DOS.
-
-=item Cannot start C<find.exe "pattern" file>
-
-=back
-
-=item INSTALLATION
-
-=over 4
-
-=item Automatic binary installation
-
-C<PERL_BADLANG>, C<PERL_BADFREE>, F<Config.pm>
-
-=item Manual binary installation
-
-Perl VIO and PM executables (dynamically linked), Perl_ VIO executable
-(statically linked), Executables for Perl utilities, Main Perl library,
-Additional Perl modules, Tools to compile Perl modules, Manpages for Perl
-and utilities, Manpages for Perl modules, Source for Perl documentation,
-Perl manual in F<.INF> format, Pdksh
-
-=item B<Warning>
-
-=back
-
-=item Accessing documentation
-
-=over 4
-
-=item OS/2 F<.INF> file
-
-=item Plain text
-
-=item Manpages
-
-=item HTML
-
-=item GNU C<info> files
-
-=item F<.PDF> files
-
-=item C<LaTeX> docs
-
-=back
-
-=item BUILD
-
-=over 4
-
-=item The short story
-
-=item Prerequisites
-
-=item Getting perl source
-
-=item Application of the patches
-
-=item Hand-editing
-
-=item Making
-
-=item Testing
-
-A lot of C<bad free>, Process terminated by SIGTERM/SIGINT, F<op/fs.t>,
-F<op/stat.t>
-
-=item Installing the built perl
-
-=item C<a.out>-style build
-
-=back
-
-=item Build FAQ
-
-=over 4
-
-=item Some C</> became C<\> in pdksh.
-
-=item C<'errno'> - unresolved external
-
-=item Problems with tr or sed
-
-=item Some problem (forget which ;-)
-
-=item Library ... not found
-
-=item Segfault in make
-
-=item op/sprintf test failure
-
-=back
-
-=item Specific (mis)features of OS/2 port
-
-=over 4
-
-=item C<setpriority>, C<getpriority>
-
-=item C<system()>
-
-=item C<extproc> on the first line
-
-=item Additional modules:
-
-=item Prebuilt methods:
-
-C<File::Copy::syscopy>, C<DynaLoader::mod2fname>, C<Cwd::current_drive()>,
- C<Cwd::sys_chdir(name)>, C<Cwd::change_drive(name)>,
-C<Cwd::sys_is_absolute(name)>, C<Cwd::sys_is_rooted(name)>,
-C<Cwd::sys_is_relative(name)>, C<Cwd::sys_cwd(name)>,
-C<Cwd::sys_abspath(name, dir)>, C<Cwd::extLibpath([type])>,
-C<Cwd::extLibpath_set( path [, type ] )>,
-C<OS2::Error(do_harderror,do_exception)>, C<OS2::Errors2Drive(drive)>,
-OS2::SysInfo(), OS2::BootDrive(), C<OS2::MorphPM(serve)>,
-C<OS2::UnMorphPM(serve)>, C<OS2::Serve_Messages(force)>,
-C<OS2::Process_Messages(force [, cnt])>, C<OS2::_control87(new,mask)>,
-OS2::get_control87(), C<OS2::set_control87_em(new=MCW_EM,mask=MCW_EM)>
-
-=item Prebuilt variables:
-
-$OS2::emx_rev, $OS2::emx_env, $OS2::os_ver
-
-=item Misfeatures
-
-=item Modifications
-
-C<popen>, C<tmpnam>, C<tmpfile>, C<ctermid>, C<stat>, C<mkdir>, C<rmdir>,
-C<flock>
-
-=item Identifying DLLs
-
-=item Centralized management of resources
-
-C<HAB>, C<HMQ>
-
-=back
-
-=item Perl flavors
-
-=over 4
-
-=item F<perl.exe>
-
-=item F<perl_.exe>
-
-=item F<perl__.exe>
-
-=item F<perl___.exe>
-
-=item Why strange names?
-
-=item Why dynamic linking?
-
-=item Why chimera build?
-
-=back
-
-=item ENVIRONMENT
-
-=over 4
-
-=item C<PERLLIB_PREFIX>
-
-=item C<PERL_BADLANG>
-
-=item C<PERL_BADFREE>
-
-=item C<PERL_SH_DIR>
-
-=item C<USE_PERL_FLOCK>
-
-=item C<TMP> or C<TEMP>
-
-=back
-
-=item Evolution
-
-=over 4
-
-=item Priorities
-
-=item DLL name mangling
-
-=item Threading
-
-=item Calls to external programs
-
-=item Memory allocation
-
-=item Threads
-
-C<COND_WAIT>, F<os2.c>
-
-=back
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 perlos390, README.os390 - building and installing Perl for OS/390.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Unpacking
-
-=item Setup and utilities
-
-=item Configure
-
-=item Build, test, install
-
-=item build anomalies
-
-=item testing anomalies
-
-=item installation anomalies
-
-=item Usage Hints
-
-=item Floating point anomalies
-
-=item Modules and Extensions
-
-=back
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=over 4
-
-=item Mailing list
-
-=back
-
-=item HISTORY
-
-=back
-
-=head2 perlsolaris, README.solaris - Perl version 5 on Solaris systems
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Solaris Version Numbers.
-
-=back
-
-=item RESOURCES
-
-Solaris FAQ, Precompiled Binaries, Solaris Documentation
-
-=item SETTING UP
-
-=over 4
-
-=item File Extraction Problems.
-
-=item Compiler and Related Tools.
-
-=item Environment
-
-=back
-
-=item RUN CONFIGURE.
-
-=over 4
-
-=item 64-bit Issues.
-
-=item Threads.
-
-=item Malloc Issues.
-
-=back
-
-=item MAKE PROBLEMS.
-
-Dynamic Loading Problems With GNU as and GNU ld, ld.so.1: ./perl: fatal:
-relocation error:, dlopen: stub interception failed, #error "No
-DATAMODEL_NATIVE specified", sh: ar: not found
-
-=item MAKE TEST
-
-=over 4
-
-=item op/stat.t test 4
-
-=back
-
-=item PREBUILT BINARIES.
-
-=item RUNTIME ISSUES.
-
-=over 4
-
-=item Limits on Numbers of Open Files.
-
-=back
-
-=item SOLARIS-SPECIFIC MODULES.
-
-=item SOLARIS-SPECIFIC PROBLEMS WITH MODULES.
-
-=over 4
-
-=item Proc::ProcessTable
-
-=item BSD::Resource
-
-=item Net::SSLeay
-
-=back
-
-=item AUTHOR
-
-=item LAST MODIFIED
-
-=back
-
-=head2 perlvmesa, README.vmesa - building and installing Perl for VM/ESA.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Unpacking
-
-=item Setup and utilities
-
-=item Configure
-
-Don't turn on the compiler optimization flag "-O". There's a bug in the
-compiler (APAR PQ18812) that generates some bad code the optimizer is on,
-As VM/ESA doesn't fully support the fork() API programs relying on this
-call will not work. I've replaced fork()/exec() with spawn() and the
-standalone exec() with spawn(). This has a side effect when opening unnamed
-pipes in a shell script: there is no child process generated under
-
-=item testing anomalies
-
-=item Usage Hints
-
-When using perl on VM/ESA please keep in mind that the EBCDIC and ASCII
-character sets are different. Perl builtin functions that may behave
-differently under EBCDIC are mentioned in the perlport.pod document.
-
-=back
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=over 4
-
-=item Mailing list
-
-=back
-
-=back
-
-=head2 perlvms - VMS-specific documentation for Perl
-
-=over 4
-
-=item DESCRIPTION
-
-=item Installation
-
-=item Organization of Perl Images
-
-=over 4
-
-=item Core Images
-
-=item Perl Extensions
-
-=item Installing static extensions
-
-=item Installing dynamic extensions
-
-=back
-
-=item File specifications
-
-=over 4
-
-=item Syntax
-
-=item Wildcard expansion
-
-=item Pipes
-
-=back
-
-=item PERL5LIB and PERLLIB
-
-=item Command line
-
-=over 4
-
-=item I/O redirection and backgrounding
-
-=item Command line switches
-
--i, -S, -u
-
-=back
-
-=item Perl functions
-
-File tests, backticks, binmode FILEHANDLE, crypt PLAINTEXT, USER, dump,
-exec LIST, fork, getpwent, getpwnam, getpwuid, gmtime, kill, qx//, select
-(system call), stat EXPR, system LIST, time, times, unlink LIST, utime
-LIST, waitpid PID,FLAGS
-
-=item Perl variables
-
-%ENV, CRTL_ENV, CLISYM_[LOCAL], Any other string, $!, $^E, $?, $^S, $|
-
-=item Standard modules with VMS-specific differences
-
-=over 4
-
-=item SDBM_File
-
-=back
-
-=item Revision date
-
-=item AUTHOR
-
-=back
-
-=head2 perlvos, README.vos - Perl for Stratus VOS
-
-=over 4
-
-=item SYNOPSIS
-
-=over 4
-
-=item Stratus POSIX Support
-
-=back
-
-=item INSTALLING PERL IN VOS
-
-=over 4
-
-=item Compiling Perl 5 on VOS
-
-=item Installing Perl 5 on VOS
-
-=back
-
-=item USING PERL IN VOS
-
-=over 4
-
-=item Unimplemented Features
-
-=item Restrictions
-
-=back
-
-=item SUPPORT STATUS
-
-=item AUTHOR
-
-=item LAST UPDATE
-
-=back
-
-=head2 perlwin32 - Perl under Win32
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Setting Up
-
-Make, Command Shell, Borland C++, Microsoft Visual C++, Mingw32 with GCC
-
-=item Building
-
-=item Testing
-
-=item Installation
-
-=item Usage Hints
-
-Environment Variables, File Globbing, Using perl from the command line,
-Building Extensions, Command-line Wildcard Expansion, Win32 Specific
-Extensions, Running Perl Scripts, Miscellaneous Things
-
-=back
-
-=item BUGS AND CAVEATS
-
-=item AUTHORS
-
-Gary Ng E<lt>71564.1743@CompuServe.COME<gt>, Gurusamy Sarathy
-E<lt>gsar@activestate.comE<gt>, Nick Ing-Simmons
-E<lt>nick@ni-s.u-net.comE<gt>
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head1 PRAGMA DOCUMENTATION
-
-=head2 attrs - set/get attributes of a subroutine (deprecated)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-method, locked
-
-=back
-
-=head2 re - Perl pragma to alter regular expression behaviour
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 attributes - get/set subroutine or variable attributes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Built-in Attributes
-
-locked, method, lvalue
-
-=item Available Subroutines
-
-get, reftype
-
-=item Package-specific Attribute Handling
-
-FETCH_I<type>_ATTRIBUTES, MODIFY_I<type>_ATTRIBUTES
-
-=item Syntax of Attribute Lists
-
-=back
-
-=item EXPORTS
-
-=over 4
-
-=item Default exports
-
-=item Available exports
-
-=item Export tags defined
-
-=back
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=back
-
-=head2 attrs - set/get attributes of a subroutine (deprecated)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-method, locked
-
-=back
-
-=head2 autouse - postpone load of modules until a function is used
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item WARNING
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 base - Establish IS-A relationship with base class at compile time
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item HISTORY
-
-=item SEE ALSO
-
-=back
-
-=head2 blib - Use MakeMaker's uninstalled version of a package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 bytes - Perl pragma to force byte semantics rather than character
-semantics
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 charnames - define character names for C<\N{named}> string literal
-escape.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CUSTOM TRANSLATORS
-
-=item BUGS
-
-=back
-
-=head2 constant - Perl pragma to declare constants
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTES
-
-=item TECHNICAL NOTE
-
-=item BUGS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 diagnostics - Perl compiler pragma to force verbose warning
-diagnostics
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The C<diagnostics> Pragma
-
-=item The I<splain> Program
-
-=back
-
-=item EXAMPLES
-
-=item INTERNALS
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 fields - compile-time class fields
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-new, phash
-
-=item SEE ALSO
-
-=back
-
-=head2 filetest - Perl pragma to control the filetest permission operators
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item subpragma access
-
-=back
-
-=back
-
-=head2 integer - Perl pragma to use integer arithmetic instead of floating
-point
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 less - perl pragma to request less of something from the compiler
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 lib - manipulate @INC at compile time
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Adding directories to @INC
-
-=item Deleting directories from @INC
-
-=item Restoring original @INC
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 locale - Perl pragma to use and avoid POSIX locales for built-in
-operations
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 open - perl pragma to set default disciplines for input and output
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item UNIMPLEMENTED FUNCTIONALITY
-
-=item SEE ALSO
-
-=back
-
-=head2 ops - Perl pragma to restrict unsafe operations when compiling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 overload - Package for overloading perl operations
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Declaration of overloaded functions
-
-=item Calling Conventions for Binary Operations
-
-FALSE, TRUE, C<undef>
-
-=item Calling Conventions for Unary Operations
-
-=item Calling Conventions for Mutators
-
-C<++> and C<-->, C<x=> and other assignment versions
-
-=item Overloadable Operations
-
-I<Arithmetic operations>, I<Comparison operations>, I<Bit operations>,
-I<Increment and decrement>, I<Transcendental functions>, I<Boolean, string
-and numeric conversion>, I<Iteration>, I<Dereferencing>, I<Special>
-
-=item Inheritance and overloading
-
-Strings as values of C<use overload> directive, Overloading of an operation
-is inherited by derived classes
-
-=back
-
-=item SPECIAL SYMBOLS FOR C<use overload>
-
-=over 4
-
-=item Last Resort
-
-=item Fallback
-
-C<undef>, TRUE, defined, but FALSE
-
-=item Copy Constructor
-
-B<Example>
-
-=back
-
-=item MAGIC AUTOGENERATION
-
-I<Assignment forms of arithmetic operations>, I<Conversion operations>,
-I<Increment and decrement>, C<abs($a)>, I<Unary minus>, I<Negation>,
-I<Concatenation>, I<Comparison operations>, I<Iterator>, I<Dereferencing>,
-I<Copy operator>
-
-=item Losing overloading
-
-=item Run-time Overloading
-
-=item Public functions
-
-overload::StrVal(arg), overload::Overloaded(arg), overload::Method(obj,op)
-
-=item Overloading constants
-
-integer, float, binary, q, qr
-
-=item IMPLEMENTATION
-
-=item Metaphor clash
-
-=item Cookbook
-
-=over 4
-
-=item Two-face scalars
-
-=item Two-face references
-
-=item Symbolic calculator
-
-=item I<Really> symbolic calculator
-
-=back
-
-=item AUTHOR
-
-=item DIAGNOSTICS
-
-Odd number of arguments for overload::constant, `%s' is not an overloadable
-type, `%s' is not a code reference
-
-=item BUGS
-
-=back
-
-=head2 re - Perl pragma to alter regular expression behaviour
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 sigtrap - Perl pragma to enable simple signal handling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-=over 4
-
-=item SIGNAL HANDLERS
-
-B<stack-trace>, B<die>, B<handler> I<your-handler>
-
-=item SIGNAL LISTS
-
-B<normal-signals>, B<error-signals>, B<old-interface-signals>
-
-=item OTHER
-
-B<untrapped>, B<any>, I<signal>, I<number>
-
-=back
-
-=item EXAMPLES
-
-=back
-
-=head2 strict - Perl pragma to restrict unsafe constructs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<strict refs>, C<strict vars>, C<strict subs>
-
-=back
-
-=head2 subs - Perl pragma to predeclare sub names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 utf8 - Perl pragma to enable/disable UTF-8 in source code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 vars - Perl pragma to predeclare global variable names (obsolete)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 warnings - Perl pragma to control optional warnings
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-use warnings::register, warnings::enabled(), warnings::enabled($category),
-warnings::enabled($object), warnings::warn($message),
-warnings::warn($category, $message), warnings::warn($object, $message),
-warnings::warnif($message), warnings::warnif($category, $message),
-warnings::warnif($object, $message)
-
-=back
-
-=head2 warnings::register - warnings import function
-
-=head1 MODULE DOCUMENTATION
-
-=head2 AnyDBM_File - provide framework for multiple DBMs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item DBM Comparisons
-
-[0], [1], [2], [3]
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 AutoLoader - load subroutines only on demand
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Subroutine Stubs
-
-=item Using B<AutoLoader>'s AUTOLOAD Subroutine
-
-=item Overriding B<AutoLoader>'s AUTOLOAD Subroutine
-
-=item Package Lexicals
-
-=item Not Using AutoLoader
-
-=item B<AutoLoader> vs. B<SelfLoader>
-
-=back
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=back
-
-=head2 AutoSplit - split a package for autoloading
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$keep, $check, $modtime
-
-=over 4
-
-=item Multiple packages
-
-=back
-
-=item DIAGNOSTICS
-
-=back
-
-=head2 B - The Perl Compiler
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OVERVIEW OF CLASSES
-
-=over 4
-
-=item SV-RELATED CLASSES
-
-=item B::SV METHODS
-
-REFCNT, FLAGS
-
-=item B::IV METHODS
-
-IV, IVX, UVX, int_value, needs64bits, packiv
-
-=item B::NV METHODS
-
-NV, NVX
-
-=item B::RV METHODS
-
-RV
-
-=item B::PV METHODS
-
-PV, PVX
-
-=item B::PVMG METHODS
-
-MAGIC, SvSTASH
-
-=item B::MAGIC METHODS
-
-MOREMAGIC, PRIVATE, TYPE, FLAGS, OBJ, PTR
-
-=item B::PVLV METHODS
-
-TARGOFF, TARGLEN, TYPE, TARG
-
-=item B::BM METHODS
-
-USEFUL, PREVIOUS, RARE, TABLE
-
-=item B::GV METHODS
-
-is_empty, NAME, SAFENAME, STASH, SV, IO, FORM, AV, HV, EGV, CV, CVGEN,
-LINE, FILE, FILEGV, GvREFCNT, FLAGS
-
-=item B::IO METHODS
-
-LINES, PAGE, PAGE_LEN, LINES_LEFT, TOP_NAME, TOP_GV, FMT_NAME, FMT_GV,
-BOTTOM_NAME, BOTTOM_GV, SUBPROCESS, IoTYPE, IoFLAGS
-
-=item B::AV METHODS
-
-FILL, MAX, OFF, ARRAY, AvFLAGS
-
-=item B::CV METHODS
-
-STASH, START, ROOT, GV, FILE, DEPTH, PADLIST, OUTSIDE, XSUB, XSUBANY,
-CvFLAGS
-
-=item B::HV METHODS
-
-FILL, MAX, KEYS, RITER, NAME, PMROOT, ARRAY
-
-=item OP-RELATED CLASSES
-
-=item B::OP METHODS
-
-next, sibling, name, ppaddr, desc, targ, type, seq, flags, private
-
-=item B::UNOP METHOD
-
-first
-
-=item B::BINOP METHOD
-
-last
-
-=item B::LOGOP METHOD
-
-other
-
-=item B::LISTOP METHOD
-
-children
-
-=item B::PMOP METHODS
-
-pmreplroot, pmreplstart, pmnext, pmregexp, pmflags, pmpermflags, precomp
-
-=item B::SVOP METHOD
-
-sv, gv
-
-=item B::PADOP METHOD
-
-padix
-
-=item B::PVOP METHOD
-
-pv
-
-=item B::LOOP METHODS
-
-redoop, nextop, lastop
-
-=item B::COP METHODS
-
-label, stash, file, cop_seq, arybase, line
-
-=back
-
-=item FUNCTIONS EXPORTED BY C<B>
-
-main_cv, init_av, main_root, main_start, comppadlist, sv_undef, sv_yes,
-sv_no, amagic_generation, walkoptree(OP, METHOD), walkoptree_debug(DEBUG),
-walksymtable(SYMREF, METHOD, RECURSE), svref_2object(SV), ppname(OPNUM),
-hash(STR), cast_I32(I), minus_c, cstring(STR), class(OBJ), threadsv_names
-
-=item AUTHOR
-
-=back
-
-=head2 B::Asmdata - Autogenerated data about Perl ops, used to generate
-bytecode
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Assembler - Assemble Perl bytecode
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHORS
-
-=back
-
-=head2 B::Bblock - Walk basic blocks
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Bytecode - Perl compiler's bytecode backend
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-B<-ofilename>, B<-afilename>, B<-->, B<-f>, B<-fcompress-nullops>,
-B<-fomit-sequence-numbers>, B<-fbypass-nullops>, B<-On>, B<-D>, B<-Do>,
-B<-Db>, B<-Da>, B<-DC>, B<-S>, B<-upackage> Stores package in the
-output. =back
-
-=item EXAMPLES
-
-=item BUGS
-
-=item AUTHORS
-
-=back
-
-=head2 B::C - Perl compiler's C backend
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-B<-ofilename>, B<-v>, B<-->, B<-uPackname>, B<-D>, B<-Do>, B<-Dc>, B<-DA>,
-B<-DC>, B<-DM>, B<-f>, B<-fcog>, B<-fno-cog>, B<-On>, B<-llimit>
-
-=item EXAMPLES
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 B::CC - Perl compiler's optimized C translation backend
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-B<-ofilename>, B<-v>, B<-->, B<-uPackname>, B<-mModulename>, B<-D>, B<-Dr>,
-B<-DO>, B<-Ds>, B<-Dp>, B<-Dq>, B<-Dl>, B<-Dt>, B<-f>,
-B<-ffreetmps-each-bblock>, B<-ffreetmps-each-loop>, B<-fomit-taint>, B<-On>
-
-=item EXAMPLES
-
-=item BUGS
-
-=item DIFFERENCES
-
-=over 4
-
-=item Loops
-
-=item Context of ".."
-
-=item Arithmetic
-
-=item Deprecated features
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 B::Concise - Walk Perl syntax tree, printing concise info about ops
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-B<-basic>, B<-exec>, B<-tree>, B<-compact>, B<-loose>, B<-vt>, B<-ascii>,
-B<-main>, B<-base>I<n>, B<-bigendian>, B<-littleendian>, B<-concise>,
-B<-terse>, B<-linenoise>, B<-debug>, B<-env>
-
-=item FORMATTING SPECIFICATIONS
-
-B<(x(>I<exec_text>B<;>I<basic_text>B<)x)>, B<(*(>I<text>B<)*)>,
-B<(*(>I<text1>B<;>I<text2>B<)*)>, B<(?(>I<text1>B<#>I<var>I<Text2>B<)?)>,
-B<#>I<var>, B<#>I<var>I<N>, B<~>, B<#addr>, B<#arg>, B<#class>,
-B<#classym>, B<#coplabel>, B<#exname>, B<#extarg>, B<#firstaddr>,
-B<#flags>, B<#flagval>, B<#hyphenseq>, B<#label>, B<#lastaddr>, B<#name>,
-B<#NAME>, B<#next>, B<#nextaddr>, B<#noise>, B<#private>, B<#privval>,
-B<#seq>, B<#seqnum>, B<#sibaddr>, B<#svaddr>, B<#svclass>, B<#svval>,
-B<#targ>, B<#targarg>, B<#targarglife>, B<#typenum>
-
-=item ABBREVIATIONS
-
-=over 4
-
-=item OP flags abbreviations
-
-=item OP class abbreviations
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 B::Debug - Walk Perl syntax tree, printing debug info about ops
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Deparse - Perl compiler backend to produce perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-B<-l>, B<-p>, B<-q>, B<-u>I<PACKAGE>, B<-s>I<LETTERS>, B<C>, B<i>I<NUMBER>,
-B<T>, B<v>I<STRING>B<.>, B<-x>I<LEVEL>
-
-=item USING B::Deparse AS A MODULE
-
-=over 4
-
-=item Synopsis
-
-=item Description
-
-=item new
-
-=item coderef2text
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 B::Disassembler - Disassemble Perl bytecode
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Lint - Perl lint
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS AND LINT CHECKS
-
-B<context>, B<implicit-read> and B<implicit-write>, B<dollar-underscore>,
-B<private-names>, B<undefined-subs>, B<regexp-variables>, B<all>, B<none>
-
-=item NON LINT-CHECK OPTIONS
-
-B<-u Package>
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 B::O, O - Generic interface to Perl Compiler backends
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONVENTIONS
-
-=item IMPLEMENTATION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Showlex - Show lexical variables used in functions or files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Stackobj - Helper module for CC backend
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Stash - show what stashes are loaded
-
-=head2 B::Terse - Walk Perl syntax tree, printing terse info about ops
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 B::Xref - Generates cross reference reports for Perl programs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-C<-oFILENAME>, C<-r>, C<-D[tO]>
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Bblock, B::Bblock - Walk basic blocks
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 Benchmark - benchmark running times of Perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Methods
-
-new, debug, iters
-
-=item Standard Exports
-
-timeit(COUNT, CODE), timethis ( COUNT, CODE, [ TITLE, [ STYLE ]] ),
-timethese ( COUNT, CODEHASHREF, [ STYLE ] ), timediff ( T1, T2 ), timestr (
-TIMEDIFF, [ STYLE, [ FORMAT ] ] )
-
-=item Optional Exports
-
-clearcache ( COUNT ), clearallcache ( ), cmpthese ( COUT, CODEHASHREF, [
-STYLE ] ), cmpthese ( RESULTSHASHREF ), countit(TIME, CODE), disablecache (
-), enablecache ( ), timesum ( T1, T2 )
-
-=back
-
-=item NOTES
-
-=item EXAMPLES
-
-=item INHERITANCE
-
-=item CAVEATS
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item MODIFICATION HISTORY
-
-=back
-
-=head2 ByteLoader - load byte compiled perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Bytecode, B::Bytecode - Perl compiler's bytecode backend
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPTIONS
-
-B<-ofilename>, B<-afilename>, B<-->, B<-f>, B<-fcompress-nullops>,
-B<-fomit-sequence-numbers>, B<-fbypass-nullops>, B<-On>, B<-D>, B<-Do>,
-B<-Db>, B<-Da>, B<-DC>, B<-S>, B<-upackage> Stores package in the
-output. =back
-
-=item EXAMPLES
-
-=item BUGS
-
-=item AUTHORS
-
-=back
-
-=head2 CGI - Simple Common Gateway Interface Class
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=over 4
-
-=item PROGRAMMING STYLE
-
-=item CALLING CGI.PM ROUTINES
-
-=item CREATING A NEW QUERY OBJECT (OBJECT-ORIENTED STYLE):
-
-=item CREATING A NEW QUERY OBJECT FROM AN INPUT FILE
-
-=item FETCHING A LIST OF KEYWORDS FROM THE QUERY:
-
-=item FETCHING THE NAMES OF ALL THE PARAMETERS PASSED TO YOUR SCRIPT:
-
-=item FETCHING THE VALUE OR VALUES OF A SINGLE NAMED PARAMETER:
-
-=item SETTING THE VALUE(S) OF A NAMED PARAMETER:
-
-=item APPENDING ADDITIONAL VALUES TO A NAMED PARAMETER:
-
-=item IMPORTING ALL PARAMETERS INTO A NAMESPACE:
-
-=item DELETING A PARAMETER COMPLETELY:
-
-=item DELETING ALL PARAMETERS:
-
-=item DIRECT ACCESS TO THE PARAMETER LIST:
-
-=item FETCHING THE PARAMETER LIST AS A HASH:
-
-=item SAVING THE STATE OF THE SCRIPT TO A FILE:
-
-=item RETRIEVING CGI ERRORS
-
-=item USING THE FUNCTION-ORIENTED INTERFACE
-
-B<:cgi>, B<:form>, B<:html2>, B<:html3>, B<:netscape>, B<:html>,
-B<:standard>, B<:all>
-
-=item PRAGMAS
-
--any, -compile, -nosticky, -no_xhtml, -nph, -newstyle_urls, -oldstyle_urls,
--autoload, -no_debug, -debug, -private_tempfiles
-
-=item SPECIAL FORMS FOR IMPORTING HTML-TAG FUNCTIONS
-
-1. start_table() (generates a <TABLE> tag), 2. end_table() (generates a
-</TABLE> tag), 3. start_ul() (generates a <UL> tag), 4. end_ul() (generates
-a </UL> tag)
-
-=back
-
-=item GENERATING DYNAMIC DOCUMENTS
-
-=over 4
-
-=item CREATING A STANDARD HTTP HEADER:
-
-=item GENERATING A REDIRECTION HEADER
-
-=item CREATING THE HTML DOCUMENT HEADER
-
-B<Parameters:>, 4, 5, 6..
-
-=item ENDING THE HTML DOCUMENT:
-
-=item CREATING A SELF-REFERENCING URL THAT PRESERVES STATE INFORMATION:
-
-=item OBTAINING THE SCRIPT'S URL
-
-B<-absolute>, B<-relative>, B<-full>, B<-path> (B<-path_info>), B<-query>
-(B<-query_string>), B<-base>
-
-=item MIXING POST AND URL PARAMETERS
-
-=back
-
-=item CREATING STANDARD HTML ELEMENTS:
-
-=over 4
-
-=item PROVIDING ARGUMENTS TO HTML SHORTCUTS
-
-=item THE DISTRIBUTIVE PROPERTY OF HTML SHORTCUTS
-
-=item HTML SHORTCUTS AND LIST INTERPOLATION
-
-=item NON-STANDARD HTML SHORTCUTS
-
-=item AUTOESCAPING HTML
-
-$escaped_string = escapeHTML("unescaped string");, $charset =
-charset([$charset]);, $flag = autoEscape([$flag]);
-
-=item PRETTY-PRINTING HTML
-
-=back
-
-=item CREATING FILL-OUT FORMS:
-
-=over 4
-
-=item CREATING AN ISINDEX TAG
-
-=item STARTING AND ENDING A FORM
-
-B<application/x-www-form-urlencoded>, B<multipart/form-data>
-
-=item CREATING A TEXT FIELD
-
-B<Parameters>
-
-=item CREATING A BIG TEXT FIELD
-
-=item CREATING A PASSWORD FIELD
-
-=item CREATING A FILE UPLOAD FIELD
-
-B<Parameters>
-
-=item CREATING A POPUP MENU
-
-=item CREATING A SCROLLING LIST
-
-B<Parameters:>
-
-=item CREATING A GROUP OF RELATED CHECKBOXES
-
-B<Parameters:>
-
-=item CREATING A STANDALONE CHECKBOX
-
-B<Parameters:>
-
-=item CREATING A RADIO BUTTON GROUP
-
-B<Parameters:>
-
-=item CREATING A SUBMIT BUTTON
-
-B<Parameters:>
-
-=item CREATING A RESET BUTTON
-
-=item CREATING A DEFAULT BUTTON
-
-=item CREATING A HIDDEN FIELD
-
-B<Parameters:>
-
-=item CREATING A CLICKABLE IMAGE BUTTON
-
-B<Parameters:>
-
-=item CREATING A JAVASCRIPT ACTION BUTTON
-
-=back
-
-=item HTTP COOKIES
-
-1. an expiration time, 2. a domain, 3. a path, 4. a "secure" flag,
-B<-name>, B<-value>, B<-path>, B<-domain>, B<-expires>, B<-secure>
-
-=item WORKING WITH FRAMES
-
-1. Create a <Frameset> document, 2. Specify the destination for the
-document in the HTTP header, 3. Specify the destination for the document in
-the <FORM> tag
-
-=item LIMITED SUPPORT FOR CASCADING STYLE SHEETS
-
-=item DEBUGGING
-
-=over 4
-
-=item DUMPING OUT ALL THE NAME/VALUE PAIRS
-
-=back
-
-=item FETCHING ENVIRONMENT VARIABLES
-
-B<Accept()>, B<raw_cookie()>, B<user_agent()>, B<path_info()>,
-B<path_translated()>, B<remote_host()>, B<script_name()>, B<referer()>,
-B<auth_type ()>, B<server_name ()>, B<virtual_host ()>, B<server_port ()>,
-B<server_software ()>, B<remote_user ()>, B<user_name ()>,
-B<request_method()>, B<content_type()>, B<http()>, B<https()>
-
-=item USING NPH SCRIPTS
-
-In the B<use> statement, By calling the B<nph()> method:, By using B<-nph>
-parameters
-
-=item Server Push
-
-multipart_init(), multipart_start(), multipart_end(), multipart_final()
-
-=item Avoiding Denial of Service Attacks
-
-B<$CGI::POST_MAX>, B<$CGI::DISABLE_UPLOADS>, B<1. On a script-by-script
-basis>, B<2. Globally for all scripts>
-
-=item COMPATIBILITY WITH CGI-LIB.PL
-
-=item AUTHOR INFORMATION
-
-=item CREDITS
-
-Matt Heffron (heffron@falstaff.css.beckman.com), James Taylor
-(james.taylor@srs.gov), Scott Anguish <sanguish@digifix.com>, Mike Jewell
-(mlj3u@virginia.edu), Timothy Shimmin (tes@kbs.citri.edu.au), Joergen Haegg
-(jh@axis.se), Laurent Delfosse (delfosse@delfosse.com), Richard Resnick
-(applepi1@aol.com), Craig Bishop (csb@barwonwater.vic.gov.au), Tony Curtis
-(tc@vcpc.univie.ac.at), Tim Bunce (Tim.Bunce@ig.co.uk), Tom Christiansen
-(tchrist@convex.com), Andreas Koenig (k@franz.ww.TU-Berlin.DE), Tim
-MacKenzie (Tim.MacKenzie@fulcrum.com.au), Kevin B. Hendricks
-(kbhend@dogwood.tyler.wm.edu), Stephen Dahmen (joyfire@inxpress.net), Ed
-Jordan (ed@fidalgo.net), David Alan Pisoni (david@cnation.com), Doug
-MacEachern (dougm@opengroup.org), Robin Houston (robin@oneworld.org),
-...and many many more..
-
-=item A COMPLETE EXAMPLE OF A SIMPLE FORM-BASED SCRIPT
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Apache - Backward compatibility module for CGI.pm
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Carp, B<CGI::Carp> - CGI routines for writing to the HTTPD (or
-other) error log
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item REDIRECTING ERROR MESSAGES
-
-=item MAKING PERL ERRORS APPEAR IN THE BROWSER WINDOW
-
-=over 4
-
-=item Changing the default message
-
-=back
-
-=item MAKING WARNINGS APPEAR AS HTML COMMENTS
-
-=item CHANGE LOG
-
-=item AUTHORS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Cookie - Interface to Netscape Cookies
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USING CGI::Cookie
-
-B<1. expiration date>, B<2. domain>, B<3. path>, B<4. secure flag>
-
-=over 4
-
-=item Creating New Cookies
-
-=item Sending the Cookie to the Browser
-
-=item Recovering Previous Cookies
-
-=item Manipulating Cookies
-
-B<name()>, B<value()>, B<domain()>, B<path()>, B<expires()>
-
-=back
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Fast - CGI Interface for Fast CGI
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OTHER PIECES OF THE PUZZLE
-
-=item WRITING FASTCGI PERL SCRIPTS
-
-=item INSTALLING FASTCGI SCRIPTS
-
-=item USING FASTCGI SCRIPTS AS CGI SCRIPTS
-
-=item CAVEATS
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Pretty - module to produce nicely formatted HTML code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Tags that won't be formatted
-
-=item Customizing the Indenting
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Push - Simple Interface to Server Push
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USING CGI::Push
-
--next_page, -last_page, -type, -delay, -cookie, -target, -expires, -nph
-
-=over 4
-
-=item Heterogeneous Pages
-
-=item Changing the Page Delay on the Fly
-
-=back
-
-=item INSTALLING CGI::Push SCRIPTS
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Switch - Backward compatibility module for defunct CGI::Switch
-
-=over 4
-
-=item SYNOPSIS
-
-=item ABSTRACT
-
-=item DESCRIPTION
-
-=item AUTHOR INFORMATION
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 CGI::Util - Internal utilities used by CGI module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR INFORMATION
-
-=item SEE ALSO
-
-=back
-
-=head2 CPAN - query, download and build perl modules from CPAN sites
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Interactive Mode
-
-Searching for authors, bundles, distribution files and modules, make, test,
-install, clean modules or distributions, get, readme, look module or
-distribution, ls author, Signals
-
-=item CPAN::Shell
-
-=item autobundle
-
-=item recompile
-
-=item The four C<CPAN::*> Classes: Author, Bundle, Module, Distribution
-
-=item Programmer's interface
-
-expand($type,@things), expandany(@things), Programming Examples
-
-=item Methods in the other Classes
-
-CPAN::Author::as_glimpse(), CPAN::Author::as_string(),
-CPAN::Author::email(), CPAN::Author::fullname(), CPAN::Author::name(),
-CPAN::Bundle::as_glimpse(), CPAN::Bundle::as_string(),
-CPAN::Bundle::clean(), CPAN::Bundle::contains(),
-CPAN::Bundle::force($method,@args), CPAN::Bundle::get(),
-CPAN::Bundle::inst_file(), CPAN::Bundle::inst_version(),
-CPAN::Bundle::uptodate(), CPAN::Bundle::install(), CPAN::Bundle::make(),
-CPAN::Bundle::readme(), CPAN::Bundle::test(),
-CPAN::Distribution::as_glimpse(), CPAN::Distribution::as_string(),
-CPAN::Distribution::clean(), CPAN::Distribution::containsmods(),
-CPAN::Distribution::cvs_import(), CPAN::Distribution::dir(),
-CPAN::Distribution::force($method,@args), CPAN::Distribution::get(),
-CPAN::Distribution::install(), CPAN::Distribution::isa_perl(),
-CPAN::Distribution::look(), CPAN::Distribution::make(),
-CPAN::Distribution::prereq_pm(), CPAN::Distribution::readme(),
-CPAN::Distribution::test(), CPAN::Distribution::uptodate(),
-CPAN::Index::force_reload(), CPAN::Index::reload(), CPAN::InfoObj::dump(),
-CPAN::Module::as_glimpse(), CPAN::Module::as_string(),
-CPAN::Module::clean(), CPAN::Module::cpan_file(),
-CPAN::Module::cpan_version(), CPAN::Module::cvs_import(),
-CPAN::Module::description(), CPAN::Module::force($method,@args),
-CPAN::Module::get(), CPAN::Module::inst_file(),
-CPAN::Module::inst_version(), CPAN::Module::install(),
-CPAN::Module::look(), CPAN::Module::make(),
-CPAN::Module::manpage_headline(), CPAN::Module::readme(),
-CPAN::Module::test(), CPAN::Module::uptodate(), CPAN::Module::userid()
-
-=item Cache Manager
-
-=item Bundles
-
-=item Prerequisites
-
-=item Finding packages and VERSION
-
-=item Debugging
-
-=item Floppy, Zip, Offline Mode
-
-=back
-
-=item CONFIGURATION
-
-C<o conf E<lt>scalar optionE<gt>>, C<o conf E<lt>scalar optionE<gt>
-E<lt>valueE<gt>>, C<o conf E<lt>list optionE<gt>>, C<o conf E<lt>list
-optionE<gt> [shift|pop]>, C<o conf E<lt>list optionE<gt>
-[unshift|push|splice] E<lt>listE<gt>>
-
-=over 4
-
-=item Note on urllist parameter's format
-
-=item urllist parameter has CD-ROM support
-
-=back
-
-=item SECURITY
-
-=item EXPORT
-
-=item POPULATE AN INSTALLATION WITH LOTS OF MODULES
-
-=item WORKING WITH CPAN.pm BEHIND FIREWALLS
-
-=over 4
-
-=item Three basic types of firewalls
-
-http firewall, ftp firewall, One way visibility, SOCKS, IP Masquerade
-
-=item Configuring lynx or ncftp for going through a firewall
-
-=back
-
-=item FAQ
-
-1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
-
-=item BUGS
-
-=item AUTHOR
-
-=item TRANSLATIONS
-
-=item SEE ALSO
-
-=back
-
-=head2 CPAN::FirstTime - Utility for CPAN::Config file Initialization
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 CPANox, CPAN::Nox - Wrapper around CPAN.pm without using any XS
-module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 Carp, carp - warn of errors (from perspective of caller)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Forcing a Stack Trace
-
-=back
-
-=item BUGS
-
-=back
-
-=head2 Carp::Heavy - Carp guts
-
-=over 4
-
-=item SYNOPIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 Class::Struct - declare struct-like datatypes as Perl classes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The C<struct()> function
-
-=item Class Creation at Compile Time
-
-=item Element Types and Accessor Methods
-
-Scalar (C<'$'> or C<'*$'>), Array (C<'@'> or C<'*@'>), Hash (C<'%'> or
-C<'*%'>), Class (C<'Class_Name'> or C<'*Class_Name'>)
-
-=item Initializing with C<new>
-
-=back
-
-=item EXAMPLES
-
-Example 1, Example 2, Example 3
-
-=item Author and Modification History
-
-=back
-
-=head2 Config - access Perl configuration information
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-myconfig(), config_sh(), config_vars(@names)
-
-=item EXAMPLE
-
-=item WARNING
-
-=item GLOSSARY
-
-=over 4
-
-=item _
-
-C<_a>, C<_exe>, C<_o>
-
-=item a
-
-C<afs>, C<alignbytes>, C<ansi2knr>, C<aphostname>, C<api_revision>,
-C<api_subversion>, C<api_version>, C<api_versionstring>, C<ar>, C<archlib>,
-C<archlibexp>, C<archname64>, C<archname>, C<archobjs>, C<awk>
-
-=item b
-
-C<baserev>, C<bash>, C<bin>, C<bincompat5005>, C<binexp>, C<bison>,
-C<byacc>, C<byteorder>
-
-=item c
-
-C<c>, C<castflags>, C<cat>, C<cc>, C<cccdlflags>, C<ccdlflags>, C<ccflags>,
-C<ccflags_uselargefiles>, C<ccname>, C<ccsymbols>, C<ccversion>, C<cf_by>,
-C<cf_email>, C<cf_time>, C<charsize>, C<chgrp>, C<chmod>, C<chown>,
-C<clocktype>, C<comm>, C<compress>
-
-=item C
-
-C<CONFIGDOTSH>, C<contains>, C<cp>, C<cpio>, C<cpp>, C<cpp_stuff>,
-C<cppccsymbols>, C<cppflags>, C<cpplast>, C<cppminus>, C<cpprun>,
-C<cppstdin>, C<cppsymbols>, C<crosscompile>, C<cryptlib>, C<csh>
-
-=item d
-
-C<d__fwalk>, C<d_access>, C<d_accessx>, C<d_alarm>, C<d_archlib>,
-C<d_atolf>, C<d_atoll>, C<d_attribut>, C<d_bcmp>, C<d_bcopy>,
-C<d_bincompat5005>, C<d_bsd>, C<d_bsdgetpgrp>, C<d_bsdsetpgrp>, C<d_bzero>,
-C<d_casti32>, C<d_castneg>, C<d_charvspr>, C<d_chown>, C<d_chroot>,
-C<d_chsize>, C<d_closedir>, C<d_const>, C<d_crypt>, C<d_csh>, C<d_cuserid>,
-C<d_dbl_dig>, C<d_difftime>, C<d_dirnamlen>, C<d_dlerror>, C<d_dlopen>,
-C<d_dlsymun>, C<d_dosuid>, C<d_drand48proto>, C<d_dup2>, C<d_eaccess>,
-C<d_endgrent>, C<d_endhent>, C<d_endnent>, C<d_endpent>, C<d_endpwent>,
-C<d_endsent>, C<d_eofnblk>, C<d_eunice>, C<d_fchmod>, C<d_fchown>,
-C<d_fcntl>, C<d_fcntl_can_lock>, C<d_fd_macros>, C<d_fd_set>,
-C<d_fds_bits>, C<d_fgetpos>, C<d_flexfnam>, C<d_flock>, C<d_fork>,
-C<d_fpathconf>, C<d_fpos64_t>, C<d_frexpl>, C<d_fs_data_s>, C<d_fseeko>,
-C<d_fsetpos>, C<d_fstatfs>, C<d_fstatvfs>, C<d_fsync>, C<d_ftello>,
-C<d_ftime>, C<d_Gconvert>, C<d_getcwd>, C<d_getespwnam>, C<d_getfsstat>,
-C<d_getgrent>, C<d_getgrps>, C<d_gethbyaddr>, C<d_gethbyname>,
-C<d_gethent>, C<d_gethname>, C<d_gethostprotos>, C<d_getlogin>,
-C<d_getmnt>, C<d_getmntent>, C<d_getnbyaddr>, C<d_getnbyname>,
-C<d_getnent>, C<d_getnetprotos>, C<d_getpagsz>, C<d_getpbyname>,
-C<d_getpbynumber>, C<d_getpent>, C<d_getpgid>, C<d_getpgrp2>, C<d_getpgrp>,
-C<d_getppid>, C<d_getprior>, C<d_getprotoprotos>, C<d_getprpwnam>,
-C<d_getpwent>, C<d_getsbyname>, C<d_getsbyport>, C<d_getsent>,
-C<d_getservprotos>, C<d_getspnam>, C<d_gettimeod>, C<d_gnulibc>,
-C<d_grpasswd>, C<d_hasmntopt>, C<d_htonl>, C<d_iconv>, C<d_index>,
-C<d_inetaton>, C<d_int64_t>, C<d_isascii>, C<d_isnan>, C<d_isnanl>,
-C<d_killpg>, C<d_lchown>, C<d_ldbl_dig>, C<d_link>, C<d_locconv>,
-C<d_lockf>, C<d_longdbl>, C<d_longlong>, C<d_lseekproto>, C<d_lstat>,
-C<d_madvise>, C<d_mblen>, C<d_mbstowcs>, C<d_mbtowc>, C<d_memchr>,
-C<d_memcmp>, C<d_memcpy>, C<d_memmove>, C<d_memset>, C<d_mkdir>,
-C<d_mkdtemp>, C<d_mkfifo>, C<d_mkstemp>, C<d_mkstemps>, C<d_mktime>,
-C<d_mmap>, C<d_modfl>, C<d_mprotect>, C<d_msg>, C<d_msg_ctrunc>,
-C<d_msg_dontroute>, C<d_msg_oob>, C<d_msg_peek>, C<d_msg_proxy>,
-C<d_msgctl>, C<d_msgget>, C<d_msgrcv>, C<d_msgsnd>, C<d_msync>,
-C<d_munmap>, C<d_mymalloc>, C<d_nice>, C<d_nv_preserves_uv>,
-C<d_nv_preserves_uv_bits>, C<d_off64_t>, C<d_old_pthread_create_joinable>,
-C<d_oldpthreads>, C<d_oldsock>, C<d_open3>, C<d_pathconf>, C<d_pause>,
-C<d_perl_otherlibdirs>, C<d_phostname>, C<d_pipe>, C<d_poll>,
-C<d_portable>, C<d_PRId64>, C<d_PRIeldbl>, C<d_PRIEUldbl>, C<d_PRIfldbl>,
-C<d_PRIFUldbl>, C<d_PRIgldbl>, C<d_PRIGUldbl>, C<d_PRIi64>, C<d_PRIo64>,
-C<d_PRIu64>, C<d_PRIx64>, C<d_PRIXU64>, C<d_pthread_yield>, C<d_pwage>,
-C<d_pwchange>, C<d_pwclass>, C<d_pwcomment>, C<d_pwexpire>, C<d_pwgecos>,
-C<d_pwpasswd>, C<d_pwquota>, C<d_qgcvt>, C<d_quad>, C<d_readdir>,
-C<d_readlink>, C<d_rename>, C<d_rewinddir>, C<d_rmdir>, C<d_safebcpy>,
-C<d_safemcpy>, C<d_sanemcmp>, C<d_sbrkproto>, C<d_sched_yield>,
-C<d_scm_rights>, C<d_SCNfldbl>, C<d_seekdir>, C<d_select>, C<d_sem>,
-C<d_semctl>, C<d_semctl_semid_ds>, C<d_semctl_semun>, C<d_semget>,
-C<d_semop>, C<d_setegid>, C<d_seteuid>, C<d_setgrent>, C<d_setgrps>,
-C<d_sethent>, C<d_setlinebuf>, C<d_setlocale>, C<d_setnent>, C<d_setpent>,
-C<d_setpgid>, C<d_setpgrp2>, C<d_setpgrp>, C<d_setprior>,
-C<d_setproctitle>, C<d_setpwent>, C<d_setregid>, C<d_setresgid>,
-C<d_setresuid>, C<d_setreuid>, C<d_setrgid>, C<d_setruid>, C<d_setsent>,
-C<d_setsid>, C<d_setvbuf>, C<d_sfio>, C<d_shm>, C<d_shmat>,
-C<d_shmatprototype>, C<d_shmctl>, C<d_shmdt>, C<d_shmget>, C<d_sigaction>,
-C<d_sigprocmask>, C<d_sigsetjmp>, C<d_socket>, C<d_socklen_t>,
-C<d_sockpair>, C<d_socks5_init>, C<d_sqrtl>, C<d_statblks>,
-C<d_statfs_f_flags>, C<d_statfs_s>, C<d_statvfs>, C<d_stdio_cnt_lval>,
-C<d_stdio_ptr_lval>, C<d_stdio_ptr_lval_nochange_cnt>,
-C<d_stdio_ptr_lval_sets_cnt>, C<d_stdio_stream_array>, C<d_stdiobase>,
-C<d_stdstdio>, C<d_strchr>, C<d_strcoll>, C<d_strctcpy>, C<d_strerrm>,
-C<d_strerror>, C<d_strtod>, C<d_strtol>, C<d_strtold>, C<d_strtoll>,
-C<d_strtoq>, C<d_strtoul>, C<d_strtoull>, C<d_strtouq>, C<d_strxfrm>,
-C<d_suidsafe>, C<d_symlink>, C<d_syscall>, C<d_sysconf>, C<d_sysernlst>,
-C<d_syserrlst>, C<d_system>, C<d_tcgetpgrp>, C<d_tcsetpgrp>, C<d_telldir>,
-C<d_telldirproto>, C<d_time>, C<d_times>, C<d_truncate>, C<d_tzname>,
-C<d_umask>, C<d_uname>, C<d_union_semun>, C<d_ustat>, C<d_vendorarch>,
-C<d_vendorbin>, C<d_vendorlib>, C<d_vfork>, C<d_void_closedir>,
-C<d_voidsig>, C<d_voidtty>, C<d_volatile>, C<d_vprintf>, C<d_wait4>,
-C<d_waitpid>, C<d_wcstombs>, C<d_wctomb>, C<d_xenix>, C<date>,
-C<db_hashtype>, C<db_prefixtype>, C<defvoidused>, C<direntrytype>,
-C<dlext>, C<dlsrc>, C<doublesize>, C<drand01>, C<dynamic_ext>
-
-=item e
-
-C<eagain>, C<ebcdic>, C<echo>, C<egrep>, C<emacs>, C<eunicefix>,
-C<exe_ext>, C<expr>, C<extensions>
-
-=item f
-
-C<fflushall>, C<fflushNULL>, C<find>, C<firstmakefile>, C<flex>,
-C<fpossize>, C<fpostype>, C<freetype>, C<full_ar>, C<full_csh>, C<full_sed>
-
-=item g
-
-C<gccosandvers>, C<gccversion>, C<gidformat>, C<gidsign>, C<gidsize>,
-C<gidtype>, C<glibpth>, C<grep>, C<groupcat>, C<groupstype>, C<gzip>
-
-=item h
-
-C<h_fcntl>, C<h_sysfile>, C<hint>, C<hostcat>
-
-=item i
-
-C<i16size>, C<i16type>, C<i32size>, C<i32type>, C<i64size>, C<i64type>,
-C<i8size>, C<i8type>, C<i_arpainet>, C<i_bsdioctl>, C<i_db>, C<i_dbm>,
-C<i_dirent>, C<i_dld>, C<i_dlfcn>, C<i_fcntl>, C<i_float>, C<i_gdbm>,
-C<i_grp>, C<i_iconv>, C<i_ieeefp>, C<i_inttypes>, C<i_libutil>,
-C<i_limits>, C<i_locale>, C<i_machcthr>, C<i_malloc>, C<i_math>,
-C<i_memory>, C<i_mntent>, C<i_ndbm>, C<i_netdb>, C<i_neterrno>,
-C<i_netinettcp>, C<i_niin>, C<i_poll>, C<i_prot>, C<i_pthread>, C<i_pwd>,
-C<i_rpcsvcdbm>, C<i_sfio>, C<i_sgtty>, C<i_shadow>, C<i_socks>,
-C<i_stdarg>, C<i_stddef>, C<i_stdlib>, C<i_string>, C<i_sunmath>,
-C<i_sysaccess>, C<i_sysdir>, C<i_sysfile>, C<i_sysfilio>, C<i_sysin>,
-C<i_sysioctl>, C<i_syslog>, C<i_sysmman>, C<i_sysmode>, C<i_sysmount>,
-C<i_sysndir>, C<i_sysparam>, C<i_sysresrc>, C<i_syssecrt>, C<i_sysselct>,
-C<i_syssockio>, C<i_sysstat>, C<i_sysstatfs>, C<i_sysstatvfs>,
-C<i_systime>, C<i_systimek>, C<i_systimes>, C<i_systypes>, C<i_sysuio>,
-C<i_sysun>, C<i_sysutsname>, C<i_sysvfs>, C<i_syswait>, C<i_termio>,
-C<i_termios>, C<i_time>, C<i_unistd>, C<i_ustat>, C<i_utime>, C<i_values>,
-C<i_varargs>, C<i_varhdr>, C<i_vfork>, C<ignore_versioned_solibs>,
-C<inc_version_list>, C<inc_version_list_init>, C<incpath>, C<inews>,
-C<installarchlib>, C<installbin>, C<installman1dir>, C<installman3dir>,
-C<installprefix>, C<installprefixexp>, C<installprivlib>, C<installscript>,
-C<installsitearch>, C<installsitebin>, C<installsitelib>, C<installstyle>,
-C<installusrbinperl>, C<installvendorarch>, C<installvendorbin>,
-C<installvendorlib>, C<intsize>, C<issymlink>, C<ivdformat>, C<ivsize>,
-C<ivtype>
-
-=item k
-
-C<known_extensions>, C<ksh>
-
-=item l
-
-C<ld>, C<lddlflags>, C<ldflags>, C<ldflags_uselargefiles>, C<ldlibpthname>,
-C<less>, C<lib_ext>, C<libc>, C<libperl>, C<libpth>, C<libs>, C<libsdirs>,
-C<libsfiles>, C<libsfound>, C<libspath>, C<libswanted>,
-C<libswanted_uselargefiles>, C<line>, C<lint>, C<lkflags>, C<ln>, C<lns>,
-C<locincpth>, C<loclibpth>, C<longdblsize>, C<longlongsize>, C<longsize>,
-C<lp>, C<lpr>, C<ls>, C<lseeksize>, C<lseektype>
-
-=item m
-
-C<mail>, C<mailx>, C<make>, C<make_set_make>, C<mallocobj>, C<mallocsrc>,
-C<malloctype>, C<man1dir>, C<man1direxp>, C<man1ext>, C<man3dir>,
-C<man3direxp>, C<man3ext>
-
-=item M
-
-C<Mcc>, C<mips_type>, C<mkdir>, C<mmaptype>, C<modetype>, C<more>,
-C<multiarch>, C<mv>, C<myarchname>, C<mydomain>, C<myhostname>, C<myuname>
-
-=item n
-
-C<n>, C<need_va_copy>, C<netdb_hlen_type>, C<netdb_host_type>,
-C<netdb_name_type>, C<netdb_net_type>, C<nm>, C<nm_opt>, C<nm_so_opt>,
-C<nonxs_ext>, C<nroff>, C<nveformat>, C<nvEUformat>, C<nvfformat>,
-C<nvFUformat>, C<nvgformat>, C<nvGUformat>, C<nvsize>, C<nvtype>
-
-=item o
-
-C<o_nonblock>, C<obj_ext>, C<old_pthread_create_joinable>, C<optimize>,
-C<orderlib>, C<osname>, C<osvers>, C<otherlibdirs>
-
-=item p
-
-C<package>, C<pager>, C<passcat>, C<patchlevel>, C<path_sep>, C<perl5>,
-C<perl>
-
-=item P
-
-C<PERL_REVISION>, C<PERL_SUBVERSION>, C<PERL_VERSION>, C<perladmin>,
-C<perllibs>, C<perlpath>, C<pg>, C<phostname>, C<pidtype>, C<plibpth>,
-C<pm_apiversion>, C<pmake>, C<pr>, C<prefix>, C<prefixexp>, C<privlib>,
-C<privlibexp>, C<prototype>, C<ptrsize>
-
-=item q
-
-C<quadkind>, C<quadtype>
-
-=item r
-
-C<randbits>, C<randfunc>, C<randseedtype>, C<ranlib>, C<rd_nodata>,
-C<revision>, C<rm>, C<rmail>, C<runnm>
-
-=item s
-
-C<sched_yield>, C<scriptdir>, C<scriptdirexp>, C<sed>, C<seedfunc>,
-C<selectminbits>, C<selecttype>, C<sendmail>, C<sh>, C<shar>, C<sharpbang>,
-C<shmattype>, C<shortsize>, C<shrpenv>, C<shsharp>, C<sig_count>,
-C<sig_name>, C<sig_name_init>, C<sig_num>, C<sig_num_init>, C<sig_size>,
-C<signal_t>, C<sitearch>, C<sitearchexp>, C<sitebin>, C<sitebinexp>,
-C<sitelib>, C<sitelib_stem>, C<sitelibexp>, C<siteprefix>,
-C<siteprefixexp>, C<sizesize>, C<sizetype>, C<sleep>, C<smail>, C<so>,
-C<sockethdr>, C<socketlib>, C<socksizetype>, C<sort>, C<spackage>,
-C<spitshell>, C<sPRId64>, C<sPRIeldbl>, C<sPRIEUldbl>, C<sPRIfldbl>,
-C<sPRIFUldbl>, C<sPRIgldbl>, C<sPRIGUldbl>, C<sPRIi64>, C<sPRIo64>,
-C<sPRIu64>, C<sPRIx64>, C<sPRIXU64>, C<src>, C<sSCNfldbl>, C<ssizetype>,
-C<startperl>, C<startsh>, C<static_ext>, C<stdchar>, C<stdio_base>,
-C<stdio_bufsiz>, C<stdio_cnt>, C<stdio_filbuf>, C<stdio_ptr>,
-C<stdio_stream_array>, C<strings>, C<submit>, C<subversion>, C<sysman>
-
-=item t
-
-C<tail>, C<tar>, C<tbl>, C<tee>, C<test>, C<timeincl>, C<timetype>,
-C<touch>, C<tr>, C<trnl>, C<troff>
-
-=item u
-
-C<u16size>, C<u16type>, C<u32size>, C<u32type>, C<u64size>, C<u64type>,
-C<u8size>, C<u8type>, C<uidformat>, C<uidsign>, C<uidsize>, C<uidtype>,
-C<uname>, C<uniq>, C<uquadtype>, C<use5005threads>, C<use64bitall>,
-C<use64bitint>, C<usedl>, C<useithreads>, C<uselargefiles>,
-C<uselongdouble>, C<usemorebits>, C<usemultiplicity>, C<usemymalloc>,
-C<usenm>, C<useopcode>, C<useperlio>, C<useposix>, C<usesfio>,
-C<useshrplib>, C<usesocks>, C<usethreads>, C<usevendorprefix>, C<usevfork>,
-C<usrinc>, C<uuname>, C<uvoformat>, C<uvsize>, C<uvtype>, C<uvuformat>,
-C<uvxformat>, C<uvXUformat>
-
-=item v
-
-C<vendorarch>, C<vendorarchexp>, C<vendorbin>, C<vendorbinexp>,
-C<vendorlib>, C<vendorlib_stem>, C<vendorlibexp>, C<vendorprefix>,
-C<vendorprefixexp>, C<version>, C<versiononly>, C<vi>, C<voidflags>
-
-=item x
-
-C<xlibpth>, C<xs_apiversion>
-
-=item z
-
-C<zcat>, C<zip>
-
-=back
-
-=item NOTE
-
-=back
-
-=head2 Cwd - get pathname of current working directory
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 DB - programmatic interface to the Perl debugging API (draft,
-subject to
-change)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Global Variables
-
- $DB::sub, %DB::sub, $DB::single, $DB::signal, $DB::trace, @DB::args,
-@DB::dbline, %DB::dbline, $DB::package, $DB::filename, $DB::subname,
-$DB::lineno
-
-=item API Methods
-
-CLIENT->register(), CLIENT->evalcode(STRING), CLIENT->skippkg('D::hide'),
-CLIENT->run(), CLIENT->step(), CLIENT->next(), CLIENT->done()
-
-=item Client Callback Methods
-
-CLIENT->init(), CLIENT->prestop([STRING]), CLIENT->stop(), CLIENT->idle(),
-CLIENT->poststop([STRING]), CLIENT->evalcode(STRING), CLIENT->cleanup(),
-CLIENT->output(LIST)
-
-=back
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 DB_File - Perl5 access to Berkeley DB version 1.x
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-B<DB_HASH>, B<DB_BTREE>, B<DB_RECNO>
-
-=over 4
-
-=item Using DB_File with Berkeley DB version 2 or 3
-
-=item Interface to Berkeley DB
-
-=item Opening a Berkeley DB Database File
-
-=item Default Parameters
-
-=item In Memory Databases
-
-=back
-
-=item DB_HASH
-
-=over 4
-
-=item A Simple Example
-
-=back
-
-=item DB_BTREE
-
-=over 4
-
-=item Changing the BTREE sort order
-
-=item Handling Duplicate Keys
-
-=item The get_dup() Method
-
-=item The find_dup() Method
-
-=item The del_dup() Method
-
-=item Matching Partial Keys
-
-=back
-
-=item DB_RECNO
-
-=over 4
-
-=item The 'bval' Option
-
-=item A Simple Example
-
-=item Extra RECNO Methods
-
-B<$X-E<gt>push(list) ;>, B<$value = $X-E<gt>pop ;>, B<$X-E<gt>shift>,
-B<$X-E<gt>unshift(list) ;>, B<$X-E<gt>length>
-
-=item Another Example
-
-=back
-
-=item THE API INTERFACE
-
-B<$status = $X-E<gt>get($key, $value [, $flags]) ;>, B<$status =
-$X-E<gt>put($key, $value [, $flags]) ;>, B<$status = $X-E<gt>del($key [,
-$flags]) ;>, B<$status = $X-E<gt>fd ;>, B<$status = $X-E<gt>seq($key,
-$value, $flags) ;>, B<$status = $X-E<gt>sync([$flags]) ;>
-
-=item DBM FILTERS
-
-B<filter_store_key>, B<filter_store_value>, B<filter_fetch_key>,
-B<filter_fetch_value>
-
-=over 4
-
-=item The Filter
-
-=item An Example -- the NULL termination problem.
-
-=item Another Example -- Key is a C int.
-
-=back
-
-=item HINTS AND TIPS
-
-=over 4
-
-=item Locking: The Trouble with fd
-
-=item Safe ways to lock a database
-
-B<Tie::DB_Lock>, B<Tie::DB_LockFile>, B<DB_File::Lock>
-
-=item Sharing Databases With C Applications
-
-=item The untie() Gotcha
-
-=back
-
-=item COMMON QUESTIONS
-
-=over 4
-
-=item Why is there Perl source in my database?
-
-=item How do I store complex data structures with DB_File?
-
-=item What does "Invalid Argument" mean?
-
-=item What does "Bareword 'DB_File' not allowed" mean?
-
-=back
-
-=item REFERENCES
-
-=item HISTORY
-
-=item BUGS
-
-=item AVAILABILITY
-
-=item COPYRIGHT
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Data::Dumper - stringified perl data structures, suitable for both
-printing and C<eval>
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Methods
-
-I<PACKAGE>->new(I<ARRAYREF [>, I<ARRAYREF]>), I<$OBJ>->Dump I<or>
-I<PACKAGE>->Dump(I<ARRAYREF [>, I<ARRAYREF]>), I<$OBJ>->Seen(I<[HASHREF]>),
-I<$OBJ>->Values(I<[ARRAYREF]>), I<$OBJ>->Names(I<[ARRAYREF]>),
-I<$OBJ>->Reset
-
-=item Functions
-
-Dumper(I<LIST>)
-
-=item Configuration Variables or Methods
-
-$Data::Dumper::Indent I<or> I<$OBJ>->Indent(I<[NEWVAL]>),
-$Data::Dumper::Purity I<or> I<$OBJ>->Purity(I<[NEWVAL]>),
-$Data::Dumper::Pad I<or> I<$OBJ>->Pad(I<[NEWVAL]>),
-$Data::Dumper::Varname I<or> I<$OBJ>->Varname(I<[NEWVAL]>),
-$Data::Dumper::Useqq I<or> I<$OBJ>->Useqq(I<[NEWVAL]>),
-$Data::Dumper::Terse I<or> I<$OBJ>->Terse(I<[NEWVAL]>),
-$Data::Dumper::Freezer I<or> $I<OBJ>->Freezer(I<[NEWVAL]>),
-$Data::Dumper::Toaster I<or> $I<OBJ>->Toaster(I<[NEWVAL]>),
-$Data::Dumper::Deepcopy I<or> $I<OBJ>->Deepcopy(I<[NEWVAL]>),
-$Data::Dumper::Quotekeys I<or> $I<OBJ>->Quotekeys(I<[NEWVAL]>),
-$Data::Dumper::Bless I<or> $I<OBJ>->Bless(I<[NEWVAL]>),
-$Data::Dumper::Maxdepth I<or> $I<OBJ>->Maxdepth(I<[NEWVAL]>)
-
-=item Exports
-
-Dumper
-
-=back
-
-=item EXAMPLES
-
-=item BUGS
-
-=item AUTHOR
-
-=item VERSION
-
-=item SEE ALSO
-
-=back
-
-=head2 Devel::DProf - a Perl code profiler
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item PROFILE FORMAT
-
-=item AUTOLOAD
-
-=item ENVIRONMENT
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Devel::Peek - A data debugging tool for the XS programmer
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Memory footprint debugging
-
-=back
-
-=item EXAMPLES
-
-=over 4
-
-=item A simple scalar string
-
-=item A simple scalar number
-
-=item A simple scalar with an extra reference
-
-=item A reference to a simple scalar
-
-=item A reference to an array
-
-=item A reference to a hash
-
-=item Dumping a large array or hash
-
-=item A reference to an SV which holds a C pointer
-
-=item A reference to a subroutine
-
-=back
-
-=item EXPORTS
-
-=item BUGS
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Devel::SelfStubber - generate stubs for a SelfLoading module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 DirHandle - supply object methods for directory handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 Dumpvalue - provides screen dump of Perl data.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Creation
-
-C<arrayDepth>, C<hashDepth>, C<compactDump>, C<veryCompact>, C<globPrint>,
-C<DumpDBFiles>, C<DumpPackages>, C<DumpReused>, C<tick>, C<HighBit>,
-C<printUndef>, C<UsageOnly>, unctrl, subdump, bareStringify, quoteHighBit,
-stopDbSignal
-
-=item Methods
-
-dumpValue, dumpValues, dumpvars, set_quote, set_unctrl, compactDump,
-veryCompact, set, get
-
-=back
-
-=back
-
-=head2 DynaLoader - Dynamically load C libraries into Perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-@dl_library_path, @dl_resolve_using, @dl_require_symbols, @dl_librefs,
-@dl_modules, dl_error(), $dl_debug, dl_findfile(), dl_expandspec(),
-dl_load_file(), dl_unload_file(), dl_loadflags(), dl_find_symbol(),
-dl_find_symbol_anywhere(), dl_undef_symbols(), dl_install_xsub(),
-bootstrap()
-
-=item AUTHOR
-
-=back
-
-=head2 DynaLoader::XSLoader, XSLoader - Dynamically load C libraries into
-Perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 English - use nice English (or awk) names for ugly punctuation
-variables
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=back
-
-=head2 Env - perl module that imports environment variables as scalars or
-arrays
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item LIMITATIONS
-
-=item AUTHOR
-
-=back
-
-=head2 Errno - System errno constants
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Exporter - Implements default import method for modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item How to Export
-
-=item Selecting What To Export
-
-=item Specialised Import Lists
-
-=item Exporting without using Export's import method
-
-=item Module Version Checking
-
-=item Managing Unknown Symbols
-
-=item Tag Handling Utility Functions
-
-=back
-
-=back
-
-=head2 Exporter::Heavy - Exporter guts
-
-=over 4
-
-=item SYNOPIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::Command - utilities to replace common UNIX commands in
-Makefiles etc.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-cat
-
-eqtime src dst
-
-rm_f files...
-
-rm_f files...
-
-touch files ..
-
-mv source... destination
-
-cp source... destination
-
-chmod mode files..
-
-mkpath directory..
-
-test_f file
-
-=over 4
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Embed - Utilities for embedding Perl in C/C++ applications
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item @EXPORT
-
-=item FUNCTIONS
-
-xsinit(), Examples, ldopts(), Examples, perl_inc(), ccflags(), ccdlflags(),
-ccopts(), xsi_header(), xsi_protos(@modules), xsi_body(@modules)
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Install - install files from here to there
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::Installed - Inventory management of installed modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USAGE
-
-=item FUNCTIONS
-
-new(), modules(), files(), directories(), directory_tree(), validate(),
-packlist(), version()
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Liblist - determine libraries to use and how to use them
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-For static extensions, For dynamic extensions, For dynamic extensions
-
-=over 4
-
-=item EXTRALIBS
-
-=item LDLOADLIBS and LD_RUN_PATH
-
-=item BSLOADLIBS
-
-=back
-
-=item PORTABILITY
-
-=over 4
-
-=item VMS implementation
-
-=item Win32 implementation
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM_Cygwin - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-canonpath, cflags, manifypods, perl_archive
-
-=back
-
-perl_archive_after
-
-=head2 ExtUtils::MM_OS2 - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-=over 4
-
-=item Preloaded methods
-
-canonpath
-
-=back
-
-=back
-
-catdir
-
-catfile
-
-curdir
-
-rootdir
-
-updir
-
-=over 4
-
-=item SelfLoaded methods
-
-c_o (o)
-
-=back
-
-cflags (o)
-
-clean (o)
-
-const_cccmd (o)
-
-const_config (o)
-
-const_loadlibs (o)
-
-constants (o)
-
-depend (o)
-
-dir_target (o)
-
-dist (o)
-
-dist_basics (o)
-
-dist_ci (o)
-
-dist_core (o)
-
-dist_dir (o)
-
-dist_test (o)
-
-dlsyms (o)
-
-dynamic (o)
-
-dynamic_bs (o)
-
-dynamic_lib (o)
-
-exescan
-
-extliblist
-
-file_name_is_absolute
-
-find_perl
-
-=over 4
-
-=item Methods to actually produce chunks of text for the Makefile
-
-fixin
-
-=back
-
-force (o)
-
-guess_name
-
-has_link_code
-
-htmlifypods (o)
-
-init_dirscan
-
-init_main
-
-init_others
-
-install (o)
-
-installbin (o)
-
-libscan (o)
-
-linkext (o)
-
-lsdir
-
-macro (o)
-
-makeaperl (o)
-
-makefile (o)
-
-manifypods (o)
-
-maybe_command
-
-maybe_command_in_dirs
-
-needs_linking (o)
-
-nicetext
-
-parse_version
-
-parse_abstract
-
-pasthru (o)
-
-path
-
-perl_script
-
-perldepend (o)
-
-ppd
-
-perm_rw (o)
-
-perm_rwx (o)
-
-pm_to_blib
-
-post_constants (o)
-
-post_initialize (o)
-
-postamble (o)
-
-prefixify
-
-processPL (o)
-
-realclean (o)
-
-replace_manpage_separator
-
-static (o)
-
-static_lib (o)
-
-staticmake (o)
-
-subdir_x (o)
-
-subdirs (o)
-
-test (o)
-
-test_via_harness (o)
-
-test_via_script (o)
-
-tool_autosplit (o)
-
-tools_other (o)
-
-tool_xsubpp (o)
-
-top_targets (o)
-
-writedoc
-
-xs_c (o)
-
-xs_cpp (o)
-
-xs_o (o)
-
-perl_archive
-
-perl_archive_after
-
-export_list
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::MM_VMS - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Methods always loaded
-
-wraplist
-
-=back
-
-=back
-
-rootdir (override)
-
-=over 4
-
-=item SelfLoaded methods
-
-guess_name (override)
-
-=back
-
-find_perl (override)
-
-path (override)
-
-maybe_command (override)
-
-maybe_command_in_dirs (override)
-
-perl_script (override)
-
-file_name_is_absolute (override)
-
-replace_manpage_separator
-
-init_others (override)
-
-constants (override)
-
-cflags (override)
-
-const_cccmd (override)
-
-pm_to_blib (override)
-
-tool_autosplit (override)
-
-tool_sxubpp (override)
-
-xsubpp_version (override)
-
-tools_other (override)
-
-dist (override)
-
-c_o (override)
-
-xs_c (override)
-
-xs_o (override)
-
-top_targets (override)
-
-dlsyms (override)
-
-dynamic_lib (override)
-
-dynamic_bs (override)
-
-static_lib (override)
-
-manifypods (override)
-
-processPL (override)
-
-installbin (override)
-
-subdir_x (override)
-
-clean (override)
-
-realclean (override)
-
-dist_basics (override)
-
-dist_core (override)
-
-dist_dir (override)
-
-dist_test (override)
-
-install (override)
-
-perldepend (override)
-
-makefile (override)
-
-test (override)
-
-test_via_harness (override)
-
-test_via_script (override)
-
-makeaperl (override)
-
-nicetext (override)
-
-=head2 ExtUtils::MM_Win32 - methods to override UN*X behaviour in
-ExtUtils::MakeMaker
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-catfile
-
-constants (o)
-
-static_lib (o)
-
-dynamic_bs (o)
-
-dynamic_lib (o)
-
-canonpath
-
-perl_script
-
-pm_to_blib
-
-test_via_harness (o)
-
-tool_autosplit (override)
-
-tools_other (o)
-
-xs_o (o)
-
-top_targets (o)
-
-htmlifypods (o)
-
-manifypods (o)
-
-dist_ci (o)
-
-dist_core (o)
-
-pasthru (o)
-
-=head2 ExtUtils::MakeMaker - create an extension Makefile
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item How To Write A Makefile.PL
-
-=item Default Makefile Behaviour
-
-=item make test
-
-=item make testdb
-
-=item make install
-
-=item PREFIX and LIB attribute
-
-=item AFS users
-
-=item Static Linking of a new Perl Binary
-
-=item Determination of Perl Library and Installation Locations
-
-=item Which architecture dependent directory?
-
-=item Using Attributes and Parameters
-
-ABSTRACT, ABSTRACT_FROM, AUTHOR, BINARY_LOCATION, C, CAPI, CCFLAGS, CONFIG,
-CONFIGURE, DEFINE, DIR, DISTNAME, DL_FUNCS, DL_VARS, EXCLUDE_EXT,
-EXE_FILES, FIRST_MAKEFILE, FULLPERL, FUNCLIST, H, HTMLLIBPODS,
-HTMLSCRIPTPODS, IMPORTS, INC, INCLUDE_EXT, INSTALLARCHLIB, INSTALLBIN,
-INSTALLDIRS, INSTALLHTMLPRIVLIBDIR, INSTALLHTMLSCRIPTDIR,
-INSTALLHTMLSITELIBDIR, INSTALLMAN1DIR, INSTALLMAN3DIR, INSTALLPRIVLIB,
-INSTALLSCRIPT, INSTALLSITEARCH, INSTALLSITELIB, INST_ARCHLIB, INST_BIN,
-INST_EXE, INST_HTMLLIBDIR, INST_HTMLSCRIPTDIR, INST_LIB, INST_MAN1DIR,
-INST_MAN3DIR, INST_SCRIPT, LDFROM, LIB, LIBPERL_A, LIBS, LINKTYPE,
-MAKEAPERL, MAKEFILE, MAN1PODS, MAN3PODS, MAP_TARGET, MYEXTLIB, NAME,
-NEEDS_LINKING, NOECHO, NORECURS, NO_VC, OBJECT, OPTIMIZE, PERL, PERLMAINCC,
-PERL_ARCHLIB, PERL_LIB, PERL_MALLOC_OK, PERL_SRC, PERM_RW, PERM_RWX,
-PL_FILES, PM, PMLIBDIRS, PM_FILTER, POLLUTE, PPM_INSTALL_EXEC,
-PPM_INSTALL_SCRIPT, PREFIX, PREREQ_PM, SKIP, TYPEMAPS, VERSION,
-VERSION_FROM, XS, XSOPT, XSPROTOARG, XS_VERSION
-
-=item Additional lowercase attributes
-
-clean, depend, dist, dynamic_lib, linkext, macro, realclean, test,
-tool_autosplit
-
-=item Overriding MakeMaker Methods
-
-=item Hintsfile support
-
-=item Distribution Support
-
- make distcheck, make skipcheck, make distclean, make manifest,
- make distdir, make tardist, make dist, make uutardist, make
-shdist, make zipdist, make ci
-
-=item Disabling an extension
-
-=back
-
-=item ENVIRONMENT
-
-PERL_MM_OPT
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 ExtUtils::Manifest - utilities to write and check a MANIFEST file
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item MANIFEST.SKIP
-
-=item EXPORT_OK
-
-=item GLOBAL VARIABLES
-
-=item DIAGNOSTICS
-
-C<Not in MANIFEST:> I<file>, C<No such file:> I<file>, C<MANIFEST:> I<$!>,
-C<Added to MANIFEST:> I<file>
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::Miniperl, writemain - write the C code for perlmain.c
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 ExtUtils::Mkbootstrap - make a bootstrap file for use by DynaLoader
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 ExtUtils::Mksymlists - write linker options files for dynamic
-extension
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-DLBASE, DL_FUNCS, DL_VARS, FILE, FUNCLIST, IMPORTS, NAME
-
-=item AUTHOR
-
-=item REVISION
-
-=back
-
-=head2 ExtUtils::Packlist - manage .packlist files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item USAGE
-
-=item FUNCTIONS
-
-new(), read(), write(), validate(), packlist_file()
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=back
-
-=head2 ExtUtils::testlib - add blib/* directories to @INC
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 Fatal - replace functions with equivalents which succeed or die
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 Fcntl - load the C Fcntl.h defines
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item EXPORTED SYMBOLS
-
-=back
-
-=head2 File::Basename, fileparse - split a pathname into pieces
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-fileparse_set_fstype, fileparse
-
-=item EXAMPLES
-
-C<basename>, C<dirname>
-
-=back
-
-=head2 File::CheckTree, validate - run many filetest checks on a tree
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 File::Compare - Compare files or filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item RETURN
-
-=item AUTHOR
-
-=back
-
-=head2 File::Copy - Copy files or filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Special behaviour if C<syscopy> is defined (OS/2, VMS and Win32)
-
-rmscopy($from,$to[,$date_flag])
-
-=back
-
-=item RETURN
-
-=item AUTHOR
-
-=back
-
-=head2 File::DosGlob - DOS like globbing and then some
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXPORTS (by request only)
-
-=item BUGS
-
-=item AUTHOR
-
-=item HISTORY
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Find, find - traverse a file tree
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<wanted>, C<bydepth>, C<preprocess>, C<postprocess>, C<follow>,
-C<follow_fast>, C<follow_skip>, C<no_chdir>, C<untaint>,
-C<untaint_pattern>, C<untaint_skip>
-
-=item CAVEAT
-
-=back
-
-=head2 File::Glob - Perl extension for BSD glob routine
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<GLOB_ERR>, C<GLOB_MARK>, C<GLOB_NOCASE>, C<GLOB_NOCHECK>, C<GLOB_NOSORT>,
-C<GLOB_BRACE>, C<GLOB_NOMAGIC>, C<GLOB_QUOTE>, C<GLOB_TILDE>, C<GLOB_CSH>,
-C<GLOB_ALPHASORT>
-
-=item DIAGNOSTICS
-
-C<GLOB_NOSPACE>, C<GLOB_ABEND>
-
-=item NOTES
-
-=item AUTHOR
-
-=back
-
-=head2 File::Path - create or remove directory trees
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHORS
-
-=back
-
-=head2 File::Spec - portably perform operations on file names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 File::Spec::Epoc - methods for Epoc file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-devnull
-
-=back
-
-tmpdir
-
-path
-
-canonpath
-
-splitpath
-
-splitdir
-
-catpath
-
-abs2rel
-
-rel2abs
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::Functions - portably perform operations on file names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Exports
-
-=back
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::Mac - File::Spec for MacOS
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-canonpath
-
-=back
-
-catdir
-
-catfile
-
-curdir
-
-devnull
-
-rootdir
-
-tmpdir
-
-updir
-
-file_name_is_absolute
-
-path
-
-splitpath
-
-splitdir
-
-catpath
-
-abs2rel
-
-rel2abs
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::OS2 - methods for OS/2 file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 File::Spec::Unix - methods used by File::Spec
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-canonpath
-
-=back
-
-catdir
-
-catfile
-
-curdir
-
-devnull
-
-rootdir
-
-tmpdir
-
-updir
-
-no_upwards
-
-case_tolerant
-
-file_name_is_absolute
-
-path
-
-join
-
-splitpath
-
-splitdir
-
-catpath
-
-abs2rel
-
-rel2abs
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::VMS - methods for VMS file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-eliminate_macros
-
-=back
-
-fixpath
-
-=over 4
-
-=item Methods always loaded
-
-canonpath (override)
-
-=back
-
-catdir
-
-catfile
-
-curdir (override)
-
-devnull (override)
-
-rootdir (override)
-
-tmpdir (override)
-
-updir (override)
-
-case_tolerant (override)
-
-path (override)
-
-file_name_is_absolute (override)
-
-splitpath (override)
-
-splitdir (override)
-
-catpath (override)
-
-abs2rel (override)
-
-rel2abs (override)
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Spec::Win32 - methods for Win32 file specs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-devnull
-
-=back
-
-tmpdir
-
-catfile
-
-canonpath
-
-splitpath
-
-splitdir
-
-catpath
-
-=over 4
-
-=item SEE ALSO
-
-=back
-
-=head2 File::Temp - return name and handle of a temporary file safely
-
-=over 4
-
-=item PORTABILITY
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item FUNCTIONS
-
-B<tempfile>
-
-=back
-
-B<tempdir>
-
-=over 4
-
-=item MKTEMP FUNCTIONS
-
-B<mkstemp>
-
-=back
-
-B<mkstemps>
-
-B<mkdtemp>
-
-B<mktemp>
-
-=over 4
-
-=item POSIX FUNCTIONS
-
-B<tmpnam>
-
-=back
-
-B<tmpfile>
-
-=over 4
-
-=item ADDITIONAL FUNCTIONS
-
-B<tempnam>
-
-=back
-
-=over 4
-
-=item UTILITY FUNCTIONS
-
-B<unlink0>
-
-=back
-
-=over 4
-
-=item PACKAGE VARIABLES
-
-B<safe_level>, STANDARD, MEDIUM, HIGH
-
-=back
-
-TopSystemUID
-
-=over 4
-
-=item WARNING
-
-=over 4
-
-=item Temporary files and NFS
-
-=back
-
-=item HISTORY
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 File::stat - by-name interface to Perl's built-in stat() functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 FileCache - keep more files open than the system permits
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=back
-
-=head2 FileHandle - supply object methods for filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$fh->print, $fh->printf, $fh->getline, $fh->getlines
-
-=item SEE ALSO
-
-=back
-
-=head2 FindBin - Locate directory of original perl script
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXPORTABLE VARIABLES
-
-=item KNOWN BUGS
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 GDBM_File - Perl5 access to the gdbm library.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AVAILABILITY
-
-=item BUGS
-
-=item SEE ALSO
-
-=back
-
-=head2 Getopt::Long - Extended processing of command line options
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Command Line Options, an Introduction
-
-=item Getting Started with Getopt::Long
-
-=over 4
-
-=item Simple options
-
-=item A little bit less simple options
-
-=item Mixing command line option with other arguments
-
-=item Options with values
-
-=item Options with multiple values
-
-=item Options with hash values
-
-=item User-defined subroutines to handle options
-
-=item Options with multiple names
-
-=item Case and abbreviations
-
-=item Summary of Option Specifications
-
-!, +, s, i, f, : I<type> [ I<desttype> ]
-
-=back
-
-=item Advanced Possibilities
-
-=over 4
-
-=item Object oriented interface
-
-=item Documentation and help texts
-
-=item Storing options in a hash
-
-=item Bundling
-
-=item The lonesome dash
-
-=item Argument call-back
-
-=back
-
-=item Configuring Getopt::Long
-
-default, posix_default, auto_abbrev, getopt_compat, gnu_compat, gnu_getopt,
-require_order, permute, bundling (default: disabled), bundling_override
-(default: disabled), ignore_case (default: enabled), ignore_case_always
-(default: disabled), pass_through (default: disabled), prefix,
-prefix_pattern, debug (default: disabled)
-
-=item Return values and Errors
-
-=item Legacy
-
-=over 4
-
-=item Default destinations
-
-=item Alternative option starters
-
-=item Configuration variables
-
-=back
-
-=item Trouble Shooting
-
-=over 4
-
-=item Warning: Ignoring '!' modifier for short option
-
-=item GetOptions does not return a false result when an option is not
-supplied
-
-=back
-
-=item AUTHOR
-
-=item COPYRIGHT AND DISCLAIMER
-
-=back
-
-=head2 Getopt::Std, getopt - Process single-character switches with switch
-clustering
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 I18N::Collate - compare 8-bit scalar data according to the current
-locale
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 IO - load various IO modules
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 IO::Dir - supply object methods for directory handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-new ( [ DIRNAME ] ), open ( DIRNAME ), read (), seek ( POS ), tell (),
-rewind (), close (), tie %hash, IO::Dir, DIRNAME [, OPTIONS ]
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::File - supply object methods for filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( FILENAME [,MODE [,PERMS]] ), new_tmpfile
-
-=item METHODS
-
-open( FILENAME [,MODE [,PERMS]] )
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 IO::Handle - supply object methods for I/O handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new (), new_from_fd ( FD, MODE )
-
-=item METHODS
-
-$io->fdopen ( FD, MODE ), $io->opened, $io->getline, $io->getlines,
-$io->ungetc ( ORD ), $io->write ( BUF, LEN [, OFFSET ] ), $io->error,
-$io->clearerr, $io->sync, $io->flush, $io->printflush ( ARGS ),
-$io->blocking ( [ BOOL ] ), $io->untaint
-
-=item NOTE
-
-=item SEE ALSO
-
-=item BUGS
-
-=item HISTORY
-
-=back
-
-=head2 IO::Pipe - supply object methods for pipes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [READER, WRITER] )
-
-=item METHODS
-
-reader ([ARGS]), writer ([ARGS]), handles ()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Poll - Object interface to system poll call
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-mask ( IO [, EVENT_MASK ] ), poll ( [ TIMEOUT ] ), events ( IO ), remove (
-IO ), handles( [ EVENT_MASK ] )
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Seekable - supply seek based methods for I/O objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$io->getpos, $io->setpos, $io->setpos ( POS, WHENCE ), WHENCE=0 (SEEK_SET),
-WHENCE=1 (SEEK_CUR), WHENCE=1 (SEEK_END), $io->sysseek( POS, WHENCE ),
-$io->tell
-
-=item HISTORY
-
-=back
-
-=head2 IO::Select - OO interface to the select system call
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ HANDLES ] )
-
-=item METHODS
-
-add ( HANDLES ), remove ( HANDLES ), exists ( HANDLE ), handles, can_read (
-[ TIMEOUT ] ), can_write ( [ TIMEOUT ] ), has_exception ( [ TIMEOUT ] ),
-count (), bits(), select ( READ, WRITE, ERROR [, TIMEOUT ] )
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket - Object interface to socket communications
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-accept([PKG]), socketpair(DOMAIN, TYPE, PROTOCOL), timeout([VAL]),
-sockopt(OPT [, VAL]), sockdomain, socktype, protocol, connected
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket::INET - Object interface for AF_INET domain sockets
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=over 4
-
-=item METHODS
-
-sockaddr (), sockport (), sockhost (), peeraddr (), peerport (), peerhost
-()
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::Socket::UNIX - Object interface for AF_UNIX domain sockets
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-hostpath(), peerpath()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Dir, IO::Dir - supply object methods for directory
-handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-new ( [ DIRNAME ] ), open ( DIRNAME ), read (), seek ( POS ), tell (),
-rewind (), close (), tie %hash, IO::Dir, DIRNAME [, OPTIONS ]
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::File, IO::File - supply object methods for filehandles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( FILENAME [,MODE [,PERMS]] ), new_tmpfile
-
-=item METHODS
-
-open( FILENAME [,MODE [,PERMS]] )
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
-=head2 IO::lib::IO::Handle, IO::Handle - supply object methods for I/O
-handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new (), new_from_fd ( FD, MODE )
-
-=item METHODS
-
-$io->fdopen ( FD, MODE ), $io->opened, $io->getline, $io->getlines,
-$io->ungetc ( ORD ), $io->write ( BUF, LEN [, OFFSET ] ), $io->error,
-$io->clearerr, $io->sync, $io->flush, $io->printflush ( ARGS ),
-$io->blocking ( [ BOOL ] ), $io->untaint
-
-=item NOTE
-
-=item SEE ALSO
-
-=item BUGS
-
-=item HISTORY
-
-=back
-
-=head2 IO::lib::IO::Pipe, IO::Pipe - supply object methods for pipes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [READER, WRITER] )
-
-=item METHODS
-
-reader ([ARGS]), writer ([ARGS]), handles ()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Poll, IO::Poll - Object interface to system poll call
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-mask ( IO [, EVENT_MASK ] ), poll ( [ TIMEOUT ] ), events ( IO ), remove (
-IO ), handles( [ EVENT_MASK ] )
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Seekable, IO::Seekable - supply seek based methods for
-I/O objects
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-$io->getpos, $io->setpos, $io->setpos ( POS, WHENCE ), WHENCE=0 (SEEK_SET),
-WHENCE=1 (SEEK_CUR), WHENCE=1 (SEEK_END), $io->sysseek( POS, WHENCE ),
-$io->tell
-
-=item HISTORY
-
-=back
-
-=head2 IO::lib::IO::Select, IO::Select - OO interface to the select system
-call
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ HANDLES ] )
-
-=item METHODS
-
-add ( HANDLES ), remove ( HANDLES ), exists ( HANDLE ), handles, can_read (
-[ TIMEOUT ] ), can_write ( [ TIMEOUT ] ), has_exception ( [ TIMEOUT ] ),
-count (), bits(), select ( READ, WRITE, ERROR [, TIMEOUT ] )
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Socket, IO::Socket - Object interface to socket
-communications
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-accept([PKG]), socketpair(DOMAIN, TYPE, PROTOCOL), timeout([VAL]),
-sockopt(OPT [, VAL]), sockdomain, socktype, protocol, connected
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Socket::INET, IO::Socket::INET - Object interface for
-AF_INET domain sockets
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=over 4
-
-=item METHODS
-
-sockaddr (), sockport (), sockhost (), peeraddr (), peerport (), peerhost
-()
-
-=back
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IO::lib::IO::Socket::UNIX, IO::Socket::UNIX - Object interface for
-AF_UNIX domain sockets
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ARGS] )
-
-=item METHODS
-
-hostpath(), peerpath()
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::Msg - SysV Msg IPC object class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , FLAGS ), id, rcv ( BUF, LEN [, TYPE [, FLAGS ]] ), remove, set
-( STAT ), set ( NAME => VALUE [, NAME => VALUE ...] ), snd ( TYPE, MSG [,
-FLAGS ] ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::Open2, open2 - open a process for both reading and writing
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item WARNING
-
-=item SEE ALSO
-
-=back
-
-=head2 IPC::Open3, open3 - open a process for reading, writing, and error
-handling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item WARNING
-
-=back
-
-=head2 IPC::Semaphore - SysV Semaphore IPC object class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , NSEMS , FLAGS ), getall, getncnt ( SEM ), getpid ( SEM ),
-getval ( SEM ), getzcnt ( SEM ), id, op ( OPLIST ), remove, set ( STAT ),
-set ( NAME => VALUE [, NAME => VALUE ...] ), setall ( VALUES ), setval ( N
-, VALUE ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::SysV - SysV IPC constants
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-ftok( PATH, ID )
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::SysV::Msg, IPC::Msg - SysV Msg IPC object class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , FLAGS ), id, rcv ( BUF, LEN [, TYPE [, FLAGS ]] ), remove, set
-( STAT ), set ( NAME => VALUE [, NAME => VALUE ...] ), snd ( TYPE, MSG [,
-FLAGS ] ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 IPC::SysV::Semaphore, IPC::Semaphore - SysV Semaphore IPC object
-class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item METHODS
-
-new ( KEY , NSEMS , FLAGS ), getall, getncnt ( SEM ), getpid ( SEM ),
-getval ( SEM ), getzcnt ( SEM ), id, op ( OPLIST ), remove, set ( STAT ),
-set ( NAME => VALUE [, NAME => VALUE ...] ), setall ( VALUES ), setval ( N
-, VALUE ), stat
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
-=head2 Math::BigFloat - Arbitrary length float math package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-number format, Error returns 'NaN', Division is computed to, Rounding is
-performed
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Math::BigInt - Arbitrary size integer math package
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-Canonical notation, Input, Output
-
-=item EXAMPLES
-
-=item Autocreating constants
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Math::Complex - complex numbers and associated mathematical
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item OPERATIONS
-
-=item CREATION
-
-=item STRINGIFICATION
-
-=over 4
-
-=item CHANGED IN PERL 5.6
-
-=back
-
-=item USAGE
-
-=item ERRORS DUE TO DIVISION BY ZERO OR LOGARITHM OF ZERO
-
-=item ERRORS DUE TO INDIGESTIBLE ARGUMENTS
-
-=item BUGS
-
-=item AUTHORS
-
-=back
-
-=head2 Math::Trig - trigonometric functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item TRIGONOMETRIC FUNCTIONS
-
-B<tan>
-
-=over 4
-
-=item ERRORS DUE TO DIVISION BY ZERO
-
-=item SIMPLE (REAL) ARGUMENTS, COMPLEX RESULTS
-
-=back
-
-=item PLANE ANGLE CONVERSIONS
-
-=item RADIAL COORDINATE CONVERSIONS
-
-=over 4
-
-=item COORDINATE SYSTEMS
-
-=item 3-D ANGLE CONVERSIONS
-
-cartesian_to_cylindrical, cartesian_to_spherical, cylindrical_to_cartesian,
-cylindrical_to_spherical, spherical_to_cartesian, spherical_to_cylindrical
-
-=back
-
-=item GREAT CIRCLE DISTANCES
-
-=item EXAMPLES
-
-=item BUGS
-
-=item AUTHORS
-
-=back
-
-=head2 NDBM_File - Tied access to ndbm files
-
-=over 4
-
-=item SYNOPSIS
-
-C<O_RDONLY>, C<O_WRONLY>, C<O_RDWR>
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item C<ndbm store returned -1, errno 22, key "..." at ...>
-
-=back
-
-=item BUGS AND WARNINGS
-
-=back
-
-=head2 Net::Ping - check a remote host for reachability
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Functions
-
-Net::Ping->new([$proto [, $def_timeout [, $bytes]]]);, $p->ping($host [,
-$timeout]);, $p->close();, pingecho($host [, $timeout]);
-
-=back
-
-=item WARNING
-
-=item NOTES
-
-=back
-
-=head2 Net::hostent - by-name interface to Perl's built-in gethost*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Net::netent - by-name interface to Perl's built-in getnet*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Net::protoent - by-name interface to Perl's built-in getproto*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Net::servent - by-name interface to Perl's built-in getserv*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 O - Generic interface to Perl Compiler backends
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONVENTIONS
-
-=item IMPLEMENTATION
-
-=item AUTHOR
-
-=back
-
-=head2 ODBM_File - Tied access to odbm files
-
-=over 4
-
-=item SYNOPSIS
-
-C<O_RDONLY>, C<O_WRONLY>, C<O_RDWR>
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item C<odbm store returned -1, errno 22, key "..." at ...>
-
-=back
-
-=item BUGS AND WARNINGS
-
-=back
-
-=head2 Opcode - Disable named opcodes when compiling perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item WARNING
-
-=item Operator Names and Operator Lists
-
-an operator name (opname), an operator tag name (optag), a negated opname
-or optag, an operator set (opset)
-
-=item Opcode Functions
-
-opcodes, opset (OP, ...), opset_to_ops (OPSET), opset_to_hex (OPSET),
-full_opset, empty_opset, invert_opset (OPSET), verify_opset (OPSET, ...),
-define_optag (OPTAG, OPSET), opmask_add (OPSET), opmask, opdesc (OP, ...),
-opdump (PAT)
-
-=item Manipulating Opsets
-
-=item TO DO (maybe)
-
-=back
-
-=over 4
-
-=item Predefined Opcode Tags
-
-:base_core, :base_mem, :base_loop, :base_io, :base_orig, :base_math,
-:base_thread, :default, :filesys_read, :sys_db, :browse, :filesys_open,
-:filesys_write, :subprocess, :ownprocess, :others, :still_to_be_decided,
-:dangerous
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=back
-
-=head2 Opcode::Safe, Safe - Compile and execute code in restricted
-compartments
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-a new namespace, an operator mask
-
-=item WARNING
-
-=over 4
-
-=item RECENT CHANGES
-
-=item Methods in class Safe
-
-permit (OP, ...), permit_only (OP, ...), deny (OP, ...), deny_only (OP,
-...), trap (OP, ...), untrap (OP, ...), share (NAME, ...), share_from
-(PACKAGE, ARRAYREF), varglob (VARNAME), reval (STRING), rdo (FILENAME),
-root (NAMESPACE), mask (MASK)
-
-=item Some Safety Issues
-
-Memory, CPU, Snooping, Signals, State Changes
-
-=item AUTHOR
-
-=back
-
-=back
-
-=head2 Opcode::ops, ops - Perl pragma to restrict unsafe operations when
-compiling
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=back
-
-=head2 POSIX - Perl interface to IEEE Std 1003.1
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item CAVEATS
-
-=item FUNCTIONS
-
-_exit, abort, abs, access, acos, alarm, asctime, asin, assert, atan, atan2,
-atexit, atof, atoi, atol, bsearch, calloc, ceil, chdir, chmod, chown,
-clearerr, clock, close, closedir, cos, cosh, creat, ctermid, ctime,
-cuserid, difftime, div, dup, dup2, errno, execl, execle, execlp, execv,
-execve, execvp, exit, exp, fabs, fclose, fcntl, fdopen, feof, ferror,
-fflush, fgetc, fgetpos, fgets, fileno, floor, fmod, fopen, fork, fpathconf,
-fprintf, fputc, fputs, fread, free, freopen, frexp, fscanf, fseek, fsetpos,
-fstat, ftell, fwrite, getc, getchar, getcwd, getegid, getenv, geteuid,
-getgid, getgrgid, getgrnam, getgroups, getlogin, getpgrp, getpid, getppid,
-getpwnam, getpwuid, gets, getuid, gmtime, isalnum, isalpha, isatty,
-iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper,
-isxdigit, kill, labs, ldexp, ldiv, link, localeconv, localtime, log, log10,
-longjmp, lseek, malloc, mblen, mbstowcs, mbtowc, memchr, memcmp, memcpy,
-memmove, memset, mkdir, mkfifo, mktime, modf, nice, offsetof, open,
-opendir, pathconf, pause, perror, pipe, pow, printf, putc, putchar, puts,
-qsort, raise, rand, read, readdir, realloc, remove, rename, rewind,
-rewinddir, rmdir, scanf, setgid, setjmp, setlocale, setpgid, setsid,
-setuid, sigaction, siglongjmp, sigpending, sigprocmask, sigsetjmp,
-sigsuspend, sin, sinh, sleep, sprintf, sqrt, srand, sscanf, stat, strcat,
-strchr, strcmp, strcoll, strcpy, strcspn, strerror, strftime, strlen,
-strncat, strncmp, strncpy, strpbrk, strrchr, strspn, strstr, strtod,
-strtok, strtol, strtoul, strxfrm, sysconf, system, tan, tanh, tcdrain,
-tcflow, tcflush, tcgetpgrp, tcsendbreak, tcsetpgrp, time, times, tmpfile,
-tmpnam, tolower, toupper, ttyname, tzname, tzset, umask, uname, ungetc,
-unlink, utime, vfprintf, vprintf, vsprintf, wait, waitpid, wcstombs,
-wctomb, write
-
-=item CLASSES
-
-=over 4
-
-=item POSIX::SigAction
-
-new
-
-=item POSIX::SigSet
-
-new, addset, delset, emptyset, fillset, ismember
-
-=item POSIX::Termios
-
-new, getattr, getcc, getcflag, getiflag, getispeed, getlflag, getoflag,
-getospeed, setattr, setcc, setcflag, setiflag, setispeed, setlflag,
-setoflag, setospeed, Baud rate values, Terminal interface values, c_cc
-field values, c_cflag field values, c_iflag field values, c_lflag field
-values, c_oflag field values
-
-=back
-
-=item PATHNAME CONSTANTS
-
-Constants
-
-=item POSIX CONSTANTS
-
-Constants
-
-=item SYSTEM CONFIGURATION
-
-Constants
-
-=item ERRNO
-
-Constants
-
-=item FCNTL
-
-Constants
-
-=item FLOAT
-
-Constants
-
-=item LIMITS
-
-Constants
-
-=item LOCALE
-
-Constants
-
-=item MATH
-
-Constants
-
-=item SIGNAL
-
-Constants
-
-=item STAT
-
-Constants, Macros
-
-=item STDLIB
-
-Constants
-
-=item STDIO
-
-Constants
-
-=item TIME
-
-Constants
-
-=item UNISTD
-
-Constants
-
-=item WAIT
-
-Constants, Macros
-
-=back
-
-=head2 Pod::Checker, podchecker() - check pod documents for syntax errors
-
-=over 4
-
-=item SYNOPSIS
-
-=item OPTIONS/ARGUMENTS
-
-=over 4
-
-=item podchecker()
-
-B<-warnings> =E<gt> I<val>
-
-=back
-
-=item DESCRIPTION
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item Errors
-
-empty =headn, =over on line I<N> without closing =back, =item without
-previous =over, =back without previous =over, No argument for =begin, =end
-without =begin, Nested =begin's, =for without formatter specification,
-unresolved internal link I<NAME>, Unknown command "I<CMD>", Unknown
-interior-sequence "I<SEQ>", nested commands
-I<CMD>E<lt>...I<CMD>E<lt>...E<gt>...E<gt>, garbled entity I<STRING>, Entity
-number out of range, malformed link LE<lt>E<gt>, nonempty ZE<lt>E<gt>,
-empty XE<lt>E<gt>, Spurious text after =pod / =cut, Spurious character(s)
-after =back
-
-=item Warnings
-
-multiple occurence of link target I<name>, line containing nothing but
-whitespace in paragraph, file does not start with =head, previous =item has
-no contents, preceding non-item paragraph(s), =item type mismatch (I<one>
-vs. I<two>), I<N> unescaped C<E<lt>E<gt>> in paragraph, Unknown entity, No
-items in =over, No argument for =item, empty section in previous paragraph,
-Verbatim paragraph in NAME section
-
-=item Hyperlinks
-
-ignoring leading/trailing whitespace in link, (section) in '$page'
-deprecated, alternative text/node '%s' contains non-escaped | or /
-
-=back
-
-=item RETURN VALUE
-
-=item EXAMPLES
-
-=item INTERFACE
-
-=back
-
-C<Pod::Checker-E<gt>new( %options )>
-
-C<$checker-E<gt>poderror( @args )>, C<$checker-E<gt>poderror( {%opts},
-@args )>
-
-C<$checker-E<gt>num_errors()>
-
-C<$checker-E<gt>name()>
-
-C<$checker-E<gt>node()>
-
-C<$checker-E<gt>idx()>
-
-C<$checker-E<gt>hyperlink()>
-
-=over 4
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Find - find POD documents in directory trees
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item C<pod_find( { %opts } , @directories )>
-
-C<-verbose =E<gt> 1>, C<-perl =E<gt> 1>, C<-script =E<gt> 1>, C<-inc =E<gt>
-1>
-
-=back
-
-=over 4
-
-=item C<simplify_name( $str )>
-
-=back
-
-=over 4
-
-=item C<pod_where( { %opts }, $pod )>
-
-C<-inc =E<gt> 1>, C<-dirs =E<gt> [ $dir1, $dir2, ... ]>, C<-verbose =E<gt>
-1>
-
-=back
-
-=over 4
-
-=item C<contains_pod( $file , $verbose )>
-
-=back
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Pod::Html - module to convert pod files to HTML
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item ARGUMENTS
-
-backlink, css, flush, header, help, htmldir, htmlroot, index, infile,
-libpods, netscape, outfile, podpath, podroot, quiet, recurse, title,
-verbose
-
-=item EXAMPLE
-
-=item ENVIRONMENT
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=item COPYRIGHT
-
-=back
-
-=head2 Pod::InputObjects - objects representing POD input paragraphs,
-commands, etc.
-
-=over 4
-
-=item SYNOPSIS
-
-=item REQUIRES
-
-=item EXPORTS
-
-=item DESCRIPTION
-
-package B<Pod::InputSource>, package B<Pod::Paragraph>, package
-B<Pod::InteriorSequence>, package B<Pod::ParseTree>
-
-=back
-
-=over 4
-
-=item B<Pod::InputSource>
-
-=back
-
-=over 4
-
-=item B<new()>
-
-=back
-
-=over 4
-
-=item B<name()>
-
-=back
-
-=over 4
-
-=item B<handle()>
-
-=back
-
-=over 4
-
-=item B<was_cutting()>
-
-=back
-
-=over 4
-
-=item B<Pod::Paragraph>
-
-=back
-
-=over 4
-
-=item Pod::Paragraph-E<gt>B<new()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<cmd_name()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<text()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<raw_text()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<cmd_prefix()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<cmd_separator()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<parse_tree()>
-
-=back
-
-=over 4
-
-=item $pod_para-E<gt>B<file_line()>
-
-=back
-
-=over 4
-
-=item B<Pod::InteriorSequence>
-
-=back
-
-=over 4
-
-=item Pod::InteriorSequence-E<gt>B<new()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<cmd_name()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<prepend()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<append()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<nested()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<raw_text()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<left_delimiter()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<right_delimiter()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<parse_tree()>
-
-=back
-
-=over 4
-
-=item $pod_seq-E<gt>B<file_line()>
-
-=back
-
-=over 4
-
-=item Pod::InteriorSequence::B<DESTROY()>
-
-=back
-
-=over 4
-
-=item B<Pod::ParseTree>
-
-=back
-
-=over 4
-
-=item Pod::ParseTree-E<gt>B<new()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<top()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<children()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<prepend()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<append()>
-
-=back
-
-=over 4
-
-=item $ptree-E<gt>B<raw_text()>
-
-=back
-
-=over 4
-
-=item Pod::ParseTree::B<DESTROY()>
-
-=back
-
-=over 4
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::LaTeX - Convert Pod data to formatted Latex
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item OBJECT METHODS
-
-C<initialize>
-
-=back
-
-=over 4
-
-=item Data Accessors
-
-B<AddPreamble>
-
-=back
-
-B<AddPostamble>
-
-B<Head1Level>
-
-B<Label>
-
-B<LevelNoNum>
-
-B<MakeIndex>
-
-B<ReplaceNAMEwithSection>
-
-B<StartWithNewPage>
-
-B<TableOfContents>
-
-B<UniqueLabels>
-
-B<UserPreamble>
-
-B<UserPostamble>
-
-B<Lists>
-
-=over 4
-
-=item Subclassed methods
-
-=back
-
-B<begin_pod>
-
-B<end_pod>
-
-B<command>
-
-B<verbatim>
-
-B<textblock>
-
-B<interior_sequence>
-
-=over 4
-
-=item List Methods
-
-B<begin_list>
-
-=back
-
-B<end_list>
-
-B<add_item>
-
-=over 4
-
-=item Methods for headings
-
-B<head>
-
-=back
-
-=over 4
-
-=item Internal methods
-
-B<_output>
-
-=back
-
-B<_replace_special_chars>
-
-B<_create_label>
-
-B<_create_index>
-
-B<_clean_latex_commands>
-
-=over 4
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item COPYRIGHT
-
-=item REVISION
-
-=back
-
-=head2 Pod::Man - Convert POD data to formatted *roff input
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-center, date, fixed, fixedbold, fixeditalic, fixedbolditalic, quotes,
-release, section
-
-=item DIAGNOSTICS
-
-roff font should be 1 or 2 chars, not "%s", Invalid link %s, Invalid quote
-specification "%s", %s:%d: Unknown command paragraph "%s", Unknown escape
-EE<lt>%sE<gt>, Unknown sequence %s, %s: Unknown command paragraph "%s" on
-line %d, Unmatched =back
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::ParseUtils - helpers for POD parsing and conversion
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=over 4
-
-=item Pod::List
-
-Pod::List-E<gt>new()
-
-=back
-
-$list-E<gt>file()
-
-$list-E<gt>start()
-
-$list-E<gt>indent()
-
-$list-E<gt>type()
-
-$list-E<gt>rx()
-
-$list-E<gt>item()
-
-$list-E<gt>parent()
-
-$list-E<gt>tag()
-
-=over 4
-
-=item Pod::Hyperlink
-
-Pod::Hyperlink-E<gt>new()
-
-=back
-
-$link-E<gt>parse($string)
-
-$link-E<gt>markup($string)
-
-$link-E<gt>text()
-
-$link-E<gt>warning()
-
-$link-E<gt>file(), $link-E<gt>line()
-
-$link-E<gt>page()
-
-$link-E<gt>node()
-
-$link-E<gt>alttext()
-
-$link-E<gt>type()
-
-$link-E<gt>link()
-
-=over 4
-
-=item Pod::Cache
-
-Pod::Cache-E<gt>new()
-
-=back
-
-$cache-E<gt>item()
-
-$cache-E<gt>find_page($name)
-
-=over 4
-
-=item Pod::Cache::Item
-
-Pod::Cache::Item-E<gt>new()
-
-=back
-
-$cacheitem-E<gt>page()
-
-$cacheitem-E<gt>description()
-
-$cacheitem-E<gt>path()
-
-$cacheitem-E<gt>file()
-
-$cacheitem-E<gt>nodes()
-
-$cacheitem-E<gt>find_node($name)
-
-$cacheitem-E<gt>idx()
-
-=over 4
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Pod::Parser - base class for creating POD filters and translators
-
-=over 4
-
-=item SYNOPSIS
-
-=item REQUIRES
-
-=item EXPORTS
-
-=item DESCRIPTION
-
-=item QUICK OVERVIEW
-
-=item PARSING OPTIONS
-
-B<-want_nonPODs> (default: unset), B<-process_cut_cmd> (default: unset),
-B<-warnings> (default: unset)
-
-=back
-
-=over 4
-
-=item RECOMMENDED SUBROUTINE/METHOD OVERRIDES
-
-=back
-
-=over 4
-
-=item B<command()>
-
-C<$cmd>, C<$text>, C<$line_num>, C<$pod_para>
-
-=back
-
-=over 4
-
-=item B<verbatim()>
-
-C<$text>, C<$line_num>, C<$pod_para>
-
-=back
-
-=over 4
-
-=item B<textblock()>
-
-C<$text>, C<$line_num>, C<$pod_para>
-
-=back
-
-=over 4
-
-=item B<interior_sequence()>
-
-=back
-
-=over 4
-
-=item OPTIONAL SUBROUTINE/METHOD OVERRIDES
-
-=back
-
-=over 4
-
-=item B<new()>
-
-=back
-
-=over 4
-
-=item B<initialize()>
-
-=back
-
-=over 4
-
-=item B<begin_pod()>
-
-=back
-
-=over 4
-
-=item B<begin_input()>
-
-=back
-
-=over 4
-
-=item B<end_input()>
-
-=back
-
-=over 4
-
-=item B<end_pod()>
-
-=back
-
-=over 4
-
-=item B<preprocess_line()>
-
-=back
-
-=over 4
-
-=item B<preprocess_paragraph()>
-
-=back
-
-=over 4
-
-=item METHODS FOR PARSING AND PROCESSING
-
-=back
-
-=over 4
-
-=item B<parse_text()>
-
-B<-expand_seq> =E<gt> I<code-ref>|I<method-name>, B<-expand_text> =E<gt>
-I<code-ref>|I<method-name>, B<-expand_ptree> =E<gt>
-I<code-ref>|I<method-name>
-
-=back
-
-=over 4
-
-=item B<interpolate()>
-
-=back
-
-=over 4
-
-=item B<parse_paragraph()>
-
-=back
-
-=over 4
-
-=item B<parse_from_filehandle()>
-
-=back
-
-=over 4
-
-=item B<parse_from_file()>
-
-=back
-
-=over 4
-
-=item ACCESSOR METHODS
-
-=back
-
-=over 4
-
-=item B<errorsub()>
-
-=back
-
-=over 4
-
-=item B<cutting()>
-
-=back
-
-=over 4
-
-=item B<parseopts()>
-
-=back
-
-=over 4
-
-=item B<output_file()>
-
-=back
-
-=over 4
-
-=item B<output_handle()>
-
-=back
-
-=over 4
-
-=item B<input_file()>
-
-=back
-
-=over 4
-
-=item B<input_handle()>
-
-=back
-
-=over 4
-
-=item B<input_streams()>
-
-=back
-
-=over 4
-
-=item B<top_stream()>
-
-=back
-
-=over 4
-
-=item PRIVATE METHODS AND DATA
-
-=back
-
-=over 4
-
-=item B<_push_input_stream()>
-
-=back
-
-=over 4
-
-=item B<_pop_input_stream()>
-
-=back
-
-=over 4
-
-=item TREE-BASED PARSING
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Plainer - Perl extension for converting Pod to old style Pod.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item EXPORT
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
-=head2 Pod::Select, podselect() - extract selected sections of POD from
-input
-
-=over 4
-
-=item SYNOPSIS
-
-=item REQUIRES
-
-=item EXPORTS
-
-=item DESCRIPTION
-
-=item SECTION SPECIFICATIONS
-
-=item RANGE SPECIFICATIONS
-
-=back
-
-=over 4
-
-=item OBJECT METHODS
-
-=back
-
-=over 4
-
-=item B<curr_headings()>
-
-=back
-
-=over 4
-
-=item B<select()>
-
-=back
-
-=over 4
-
-=item B<add_selection()>
-
-=back
-
-=over 4
-
-=item B<clear_selections()>
-
-=back
-
-=over 4
-
-=item B<match_section()>
-
-=back
-
-=over 4
-
-=item B<is_selected()>
-
-=back
-
-=over 4
-
-=item EXPORTED FUNCTIONS
-
-=back
-
-=over 4
-
-=item B<podselect()>
-
-B<-output>, B<-sections>, B<-ranges>
-
-=back
-
-=over 4
-
-=item PRIVATE METHODS AND DATA
-
-=back
-
-=over 4
-
-=item B<_compile_section_spec()>
-
-=back
-
-=over 4
-
-=item $self->{_SECTION_HEADINGS}
-
-=back
-
-=over 4
-
-=item $self->{_SELECTED_SECTIONS}
-
-=back
-
-=over 4
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Text - Convert POD data to formatted ASCII text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-alt, indent, loose, quotes, sentence, width
-
-=item DIAGNOSTICS
-
-Bizarre space in item, Can't open %s for reading: %s, Invalid quote
-specification "%s", %s:%d: Unknown command paragraph "%s", Unknown escape:
-%s, Unknown sequence: %s, Unmatched =back
-
-=item RESTRICTIONS
-
-=item NOTES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Text::Color - Convert POD data to formatted color ASCII text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Text::Overstrike - Convert POD data to formatted overstrike
-text
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Text::Termcap, Pod::Text::Color - Convert POD data to ASCII
-text with format escapes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Pod::Usage, pod2usage() - print a usage message from embedded pod
-documentation
-
-=over 4
-
-=item SYNOPSIS
-
-=item ARGUMENTS
-
-C<-message>, C<-msg>, C<-exitval>, C<-verbose>, C<-output>, C<-input>,
-C<-pathlist>
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=over 4
-
-=item Recommended Use
-
-=back
-
-=item CAVEATS
-
-=item AUTHOR
-
-=item ACKNOWLEDGEMENTS
-
-=back
-
-=head2 SDBM_File - Tied access to sdbm files
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-C<O_RDONLY>, C<O_WRONLY>, C<O_RDWR>
-
-=item DIAGNOSTICS
-
-=over 4
-
-=item C<sdbm store returned -1, errno 22, key "..." at ...>
-
-=back
-
-=item BUGS AND WARNINGS
-
-=back
-
-=head2 Safe - Compile and execute code in restricted compartments
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-a new namespace, an operator mask
-
-=item WARNING
-
-=over 4
-
-=item RECENT CHANGES
-
-=item Methods in class Safe
-
-permit (OP, ...), permit_only (OP, ...), deny (OP, ...), deny_only (OP,
-...), trap (OP, ...), untrap (OP, ...), share (NAME, ...), share_from
-(PACKAGE, ARRAYREF), varglob (VARNAME), reval (STRING), rdo (FILENAME),
-root (NAMESPACE), mask (MASK)
-
-=item Some Safety Issues
-
-Memory, CPU, Snooping, Signals, State Changes
-
-=item AUTHOR
-
-=back
-
-=back
-
-=head2 Search::Dict, look - search for key in dictionary file
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 SelectSaver - save and restore selected file handle
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 SelfLoader - load functions only on demand
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The __DATA__ token
-
-=item SelfLoader autoloading
-
-=item Autoloading and package lexicals
-
-=item SelfLoader and AutoLoader
-
-=item __DATA__, __END__, and the FOOBAR::DATA filehandle.
-
-=item Classes and inherited methods.
-
-=back
-
-=item Multiple packages and fully qualified subroutine names
-
-=back
-
-=head2 Shell - run shell commands transparently within perl
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item OBJECT ORIENTED SYNTAX
-
-=back
-
-=item AUTHOR
-
-=back
-
-=head2 Socket, sockaddr_in, sockaddr_un, inet_aton, inet_ntoa - load the C
-socket.h defines and structure manipulators
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-inet_aton HOSTNAME, inet_ntoa IP_ADDRESS, INADDR_ANY, INADDR_BROADCAST,
-INADDR_LOOPBACK, INADDR_NONE, sockaddr_in PORT, ADDRESS, sockaddr_in
-SOCKADDR_IN, pack_sockaddr_in PORT, IP_ADDRESS, unpack_sockaddr_in
-SOCKADDR_IN, sockaddr_un PATHNAME, sockaddr_un SOCKADDR_UN,
-pack_sockaddr_un PATH, unpack_sockaddr_un SOCKADDR_UN
-
-=back
-
-=head2 Symbol - manipulate Perl symbols and their names
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 Sys::Hostname - Try every conceivable way to get hostname
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 Syslog, Sys::Syslog, openlog, closelog, setlogmask, syslog - Perl
-interface to the UNIX syslog(3) calls
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-openlog $ident, $logopt, $facility, syslog $priority, $format, @args,
-setlogmask $mask_priority, setlogsock $sock_type (added in 5.004_02),
-closelog
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Syslog::Syslog, Sys::Syslog, openlog, closelog, setlogmask, syslog -
-Perl interface to the UNIX syslog(3) calls
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-openlog $ident, $logopt, $facility, syslog $priority, $format, @args,
-setlogmask $mask_priority, setlogsock $sock_type (added in 5.004_02),
-closelog
-
-=item EXAMPLES
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Term::ANSIColor - Color screen output using ANSI escape sequences
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item DIAGNOSTICS
-
-Invalid attribute name %s, Name "%s" used only once: possible typo, No
-comma allowed after filehandle, Bareword "%s" not allowed while "strict
-subs" in use
-
-=item RESTRICTIONS
-
-=item NOTES
-
-=item AUTHORS
-
-=back
-
-=head2 Term::Cap - Perl termcap interface
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=back
-
-=head2 Term::Complete - Perl word completion module
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-E<lt>tabE<gt>, ^D, ^U, E<lt>delE<gt>, E<lt>bsE<gt>
-
-=item DIAGNOSTICS
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Term::ReadLine - Perl interface to various C<readline> packages. If
-no real package is found, substitutes stubs instead of basic functions.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item Minimal set of supported functions
-
-C<ReadLine>, C<new>, C<readline>, C<addhistory>, C<IN>, $C<OUT>,
-C<MinLine>, C<findConsole>, Attribs, C<Features>
-
-=item Additional supported functions
-
-C<tkRunning>, C<ornaments>, C<newTTY>
-
-=item EXPORTS
-
-=item ENVIRONMENT
-
-=back
-
-=head2 Test - provides a simple framework for writing test scripts
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item TEST TYPES
-
-NORMAL TESTS, SKIPPED TESTS, TODO TESTS
-
-=item RETURN VALUE
-
-=item ONFAIL
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=back
-
-=head2 Test::Harness - run perl standard test scripts with statistics
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item The test script output
-
-=back
-
-=item EXPORT
-
-=item DIAGNOSTICS
-
-C<All tests successful.\nFiles=%d, Tests=%d, %s>, C<FAILED tests
-%s\n\tFailed %d/%d tests, %.2f%% okay.>, C<Test returned status %d (wstat
-%d)>, C<Failed 1 test, %.2f%% okay. %s>, C<Failed %d/%d tests, %.2f%% okay.
-%s>
-
-=item ENVIRONMENT
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item BUGS
-
-=back
-
-=head2 Text::Abbrev, abbrev - create an abbreviation table from a list
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLE
-
-=back
-
-=head2 Text::ParseWords - parse text into an array of tokens or array of
-arrays
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item AUTHORS
-
-=back
-
-=head2 Text::Soundex - Implementation of the Soundex Algorithm as Described
-by Knuth
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item LIMITATIONS
-
-=item AUTHOR
-
-=back
-
-=head2 Text::Tabs -- expand and unexpand tabs per the unix expand(1) and
-unexpand(1)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=item AUTHOR
-
-=back
-
-=head2 Text::Wrap - line wrapping to form simple paragraphs
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=back
-
-=head2 Thread - manipulate threads in Perl (EXPERIMENTAL, subject to
-change)
-
-=over 4
-
-=item CAVEAT
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS
-
-new \&start_sub, new \&start_sub, LIST, lock VARIABLE, async BLOCK;,
-Thread->self, Thread->list, cond_wait VARIABLE, cond_signal VARIABLE,
-cond_broadcast VARIABLE, yield
-
-=item METHODS
-
-join, eval, detach, equal, tid
-
-=item LIMITATIONS
-
-=item SEE ALSO
-
-=back
-
-=head2 Thread::Queue - thread-safe queues
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS AND METHODS
-
-new, enqueue LIST, dequeue, dequeue_nb, pending
-
-=item SEE ALSO
-
-=back
-
-=head2 Thread::Semaphore - thread-safe semaphores
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item FUNCTIONS AND METHODS
-
-new, new NUMBER, down, down NUMBER, up, up NUMBER
-
-=back
-
-=head2 Thread::Signal - Start a thread which runs signal handlers reliably
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item BUGS
-
-=back
-
-=head2 Thread::Specific - thread-specific keys
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=back
-
-=head2 Tie::Array - base class for tied arrays
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-TIEARRAY classname, LIST, STORE this, index, value, FETCH this, index,
-FETCHSIZE this, STORESIZE this, count, EXTEND this, count, EXISTS this,
-key, DELETE this, key, CLEAR this, DESTROY this, PUSH this, LIST, POP this,
-SHIFT this, UNSHIFT this, LIST, SPLICE this, offset, length, LIST
-
-=item CAVEATS
-
-=item AUTHOR
-
-=back
-
-=head2 Tie::Handle, Tie::StdHandle - base class definitions for tied
-handles
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-TIEHANDLE classname, LIST, WRITE this, scalar, length, offset, PRINT this,
-LIST, PRINTF this, format, LIST, READ this, scalar, length, offset,
-READLINE this, GETC this, CLOSE this, OPEN this, filename, BINMODE this,
-EOF this, TELL this, SEEK this, offset, whence, DESTROY this
-
-=item MORE INFORMATION
-
-=item COMPATIBILITY
-
-=back
-
-=head2 Tie::Hash, Tie::StdHash - base class definitions for tied hashes
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-TIEHASH classname, LIST, STORE this, key, value, FETCH this, key, FIRSTKEY
-this, NEXTKEY this, lastkey, EXISTS this, key, DELETE this, key, CLEAR this
-
-=item CAVEATS
-
-=item MORE INFORMATION
-
-=back
-
-=head2 Tie::RefHash - use references as hash keys
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item EXAMPLE
-
-=item AUTHOR
-
-=item VERSION
-
-=item SEE ALSO
-
-=back
-
-=head2 Tie::Scalar, Tie::StdScalar - base class definitions for tied
-scalars
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-TIESCALAR classname, LIST, FETCH this, STORE this, value, DESTROY this
-
-=item MORE INFORMATION
-
-=back
-
-=head2 Tie::SubstrHash - Fixed-table-size, fixed-key-length hashing
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CAVEATS
-
-=back
-
-=head2 Time::Local - efficiently compute time from local and GMT time
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item IMPLEMENTATION
-
-=item BUGS
-
-=back
-
-=head2 Time::gmtime - by-name interface to Perl's built-in gmtime()
-function
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Time::localtime - by-name interface to Perl's built-in localtime()
-function
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 Time::tm - internal object used by Time::gmtime and Time::localtime
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head2 UNIVERSAL - base class for ALL classes (blessed references)
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-isa ( TYPE ), can ( METHOD ), VERSION ( [ REQUIRE ] ), UNIVERSAL::isa (
-VAL, TYPE ), UNIVERSAL::can ( VAL, METHOD )
-
-=back
-
-=head2 User::grent - by-name interface to Perl's built-in getgr*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item NOTE
-
-=item AUTHOR
-
-=back
-
-=head2 User::pwent - by-name interface to Perl's built-in getpw*()
-functions
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item System Specifics
-
-=back
-
-=item NOTE
-
-=item AUTHOR
-
-=item HISTORY
-
-March 18th, 2000
-
-=back
-
-=head2 Win32 - Interfaces to some Win32 API Functions
-
-=over 4
-
-=item DESCRIPTION
-
-=over 4
-
-=item Alphabetical Listing of Win32 Functions
-
-Win32::AbortSystemShutdown(MACHINE), Win32::BuildNumber(),
-Win32::CopyFile(FROM, TO, OVERWRITE), Win32::DomainName(),
-Win32::ExpandEnvironmentStrings(STRING), Win32::FormatMessage(ERRORCODE),
-Win32::FsType(), Win32::FreeLibrary(HANDLE), Win32::GetArchName(),
-Win32::GetChipName(), Win32::GetCwd(), Win32::GetFullPathName(FILENAME),
-Win32::GetLastError(), Win32::GetLongPathName(PATHNAME),
-Win32::GetNextAvailDrive(), Win32::GetOSVersion(),
-Win32::GetShortPathName(PATHNAME), Win32::GetProcAddress(INSTANCE,
-PROCNAME), Win32::GetTickCount(), Win32::InitiateSystemShutdown,
-Win32::IsWinNT(), Win32::IsWin95(), Win32::LoadLibrary(LIBNAME),
-Win32::LoginName(), Win32::LookupAccountName(SYSTEM, ACCOUNT, DOMAIN, SID,
-SIDTYPE), Win32::LookupAccountSID(SYSTEM, SID, ACCOUNT, DOMAIN, SIDTYPE),
-Win32::MsgBox(MESSAGE [, FLAGS [, TITLE]]), Win32::NodeName(),
-Win32::RegisterServer(LIBRARYNAME), Win32::SetCwd(NEWDIRECTORY),
-Win32::SetLastError(ERROR), Win32::Sleep(TIME), Win32::Spawn(COMMAND, ARGS,
-PID), Win32::UnregisterServer(LIBRARYNAME)
-
-=back
-
-=back
-
-=head2 XSLoader - Dynamically load C libraries into Perl code
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item AUTHOR
-
-=back
-
-=head1 AUXILIARY DOCUMENTATION
-
-Here should be listed all the extra programs' documentation, but they
-don't all have manual pages yet:
-
-=over 4
-
-=item a2p
-
-=item s2p
-
-=item find2perl
-
-=item h2ph
-
-=item c2ph
-
-=item h2xs
-
-=item xsubpp
-
-=item pod2man
-
-=item wrapsuid
-
-=back
-
-=head1 AUTHOR
-
-Larry Wall <F<larry@wall.org>>, with the help of oodles
-of other folks.
-
diff --git a/contrib/perl5/pod/perltodo.pod b/contrib/perl5/pod/perltodo.pod
deleted file mode 100644
index f38ba88..0000000
--- a/contrib/perl5/pod/perltodo.pod
+++ /dev/null
@@ -1,858 +0,0 @@
-=head1 NAME
-
-perltodo - Perl TO-DO List
-
-=head1 DESCRIPTION
-
-This is a list of wishes for Perl. It is maintained by Nathan
-Torkington for the Perl porters. Send updates to
-I<perl5-porters@perl.org>. If you want to work on any of these
-projects, be sure to check the perl5-porters archives for past ideas,
-flames, and propaganda. This will save you time and also prevent you
-from implementing something that Larry has already vetoed. One set
-of archives may be found at:
-
- http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
-
-
-=head1 Infrastructure
-
-=head2 Mailing list archives
-
-Chaim suggests contacting egroup and asking them to archive the other
-perl.org mailing lists. Probably not advocacy, but definitely
-perl6-porters, etc.
-
-=head2 Bug tracking system
-
-Richard Foley I<richard@perl.org> is writing one. We looked at
-several, like gnats and the Debian system, but at the time we
-investigated them, none met our needs. Since then, Jitterbug has
-matured, and may be worth reinvestigation.
-
-The system we've developed is the recipient of perlbug mail, and any
-followups it generates from perl5-porters. New bugs are entered
-into a mysql database, and sent on to
-perl5-porters with the subject line rewritten to include a "ticket
-number" (unique ID for the new bug). If the incoming message already
-had a ticket number in the subject line, then the message is logged
-against that bug. There is a separate email interface (not forwarding
-to p5p) that permits porters to claim, categorize, and close tickets.
-
-There is also a web interface to the system at http://bugs.perl.org.
-
-The current delay in implementation is caused by perl.org lockups.
-One suspect is the mail handling system, possibly going into loops.
-
-We still desperately need a bugmaster, someone who will look at
-every new "bug" and kill those that we already know about, those
-that are not bugs at all, etc.
-
-=head2 Regression Tests
-
-The test suite for Perl serves two needs: ensuring features work, and
-ensuring old bugs have not been reintroduced. Both need work.
-
-Brent LaVelle (lavelle@metronet.com) has stepped forward to work on
-performance tests and improving the size of the test suite.
-
-=over 4
-
-=item Coverage
-
-Do the tests that come with Perl exercise every line (or every block,
-or ...) of the Perl interpreter, and if not then how can we make them
-do so?
-
-=item Regression
-
-No bug fixes should be made without a corresponding testsuite addition.
-This needs a dedicated enforcer, as the current pumpking is either too
-lazy or too stupid or both and lets enforcement wander all over the
-map. :-)
-
-=item __DIE__
-
-Tests that fail need to be of a form that can be readily mailed
-to perlbug and diagnosed with minimal back-and-forth's to determine
-which test failed, due to what cause, etc.
-
-=item suidperl
-
-We need regression/sanity tests for suidperl
-
-=item The 25% slowdown from perl4 to perl5
-
-This value may or may not be accurate, but it certainly is
-eye-catching. For some things perl5 is faster than perl4, but often
-the reliability and extensibility have come at a cost of speed. The
-benchmark suite that Gisle released earlier has been hailed as both a
-fantastic solution and as a source of entirely meaningless figures.
-Do we need to test "real applications"? Can you do so? Anyone have
-machines to dedicate to the task? Identify the things that have grown
-slower, and see if there's a way to make them faster.
-
-=back
-
-=head1 Configure
-
-Andy Dougherty maintain(ed|s) a list of "todo" items for the configure
-that comes with Perl. See Porting/pumpkin.pod in the latest
-source release.
-
-=head2 Install HTML
-
-Have "make install" give you the option to install HTML as well. This
-would be part of Configure. Andy Wardley (certified Perl studmuffin)
-will look into the current problems of HTML installation--is
-'installhtml' preventing this from happening cleanly, or is pod2html
-the problem? If the latter, Brad Appleton's pod work may fix the
-problem for free.
-
-=head1 Perl Language
-
-=head2 64-bit Perl
-
-Verify complete 64 bit support so that the value of sysseek, or C<-s>, or
-stat(), or tell can fit into a perl number without losing precision.
-Work with the perl-64bit mailing list on perl.org.
-
-=head2 Prototypes
-
-=over 4
-
-=item Named prototypes
-
-Add proper named prototypes that actually work usefully.
-
-=item Indirect objects
-
-Fix prototype bug that forgets indirect objects.
-
-=item Method calls
-
-Prototypes for method calls.
-
-=item Context
-
-Return context prototype declarations.
-
-=item Scoped subs
-
-lexically-scoped subs, e.g. my sub
-
-=back
-
-=head1 Perl Internals
-
-=head2 magic_setisa
-
-C<magic_setisa> should be made to update %FIELDS [???]
-
-=head2 Garbage Collection
-
-There was talk of a mark-and-sweep garbage collector at TPC2, but the
-(to users) unpredictable nature of its behaviour put some off.
-Sarathy, I believe, did the work. Here's what he has to say:
-
-Yeah, I hope to implement it someday too. The points that were
-raised in TPC2 were all to do with calling DESTROY() methods, but
-I think we can accommodate that by extending bless() to stash
-extra information for objects so we track their lifetime accurately
-for those that want their DESTROY() to be predictable (this will be
-a speed hit, naturally, and will therefore be optional, naturally. :)
-
-[N.B. Don't even ask me about this now! When I have the time to
-write a cogent summary, I'll post it.]
-
-=head2 Reliable signals
-
-Sarathy and Dan Sugalski are working on this. Chip posted a patch
-earlier, but it was not accepted into 5.005. The issue is tricky,
-because it has the potential to greatly slow down the core.
-
-There are at least three things to consider:
-
-=over 4
-
-=item Alternate runops() for signal despatch
-
-Sarathy and Dan are discussed this on perl5-porters.
-
-=item Figure out how to die() in delayed sighandler
-
-=item Add tests for Thread::Signal
-
-=item Automatic tests against CPAN
-
-Is there some way to automatically build all/most of CPAN with
-the new Perl and check that the modules there pass all the tests?
-
-=back
-
-=head2 Interpolated regex performance bugs
-
- while (<>) {
- $found = 0;
- foreach $pat (@patterns) {
- $found++ if /$pat/o;
- }
- print if $found;
- }
-
-The qr// syntax added in 5.005 has solved this problem, but
-it needs more thorough documentation.
-
-=head2 Memory leaks from failed eval/regcomp
-
-The only known memory leaks in Perl are in failed code or regexp
-compilation. Fix this. Hugo Van Der Sanden will attempt this but
-won't have tuits until January 1999.
-
-=head2 Make XS easier to use
-
-There was interest in SWIG from porters, but nothing has happened
-lately.
-
-=head2 Make embedded Perl easier to use
-
-This is probably difficult for the same reasons that "XS For Dummies"
-will be difficult.
-
-=head2 Namespace cleanup
-
- CPP-space: restrict CPP symbols exported from headers
- header-space: move into CORE/perl/
- API-space: begin list of things that constitute public api
- env-space: Configure should use PERL_CONFIG instead of CONFIG etc.
-
-=head2 MULTIPLICITY
-
-Complete work on safe recursive interpreters C<Perl-E<gt>new()>.
-Sarathy says that a reference implementation exists.
-
-=head2 MacPerl
-
-Chris Nandor and Matthias Neeracher are working on better integrating
-MacPerl into the Perl distribution.
-
-=head1 Documentation
-
-There's a lot of documentation that comes with Perl. The quantity of
-documentation makes it difficult for users to know which section of
-which manpage to read in order to solve their problem. Tom
-Christiansen has done much of the documentation work in the past.
-
-=head2 A clear division into tutorial and reference
-
-Some manpages (e.g., perltoot and perlreftut) clearly set out to
-educate the reader about a subject. Other manpages (e.g., perlsub)
-are references for which there is no tutorial, or are references with
-a slight tutorial bent. If things are either tutorial or reference,
-then the reader knows which manpage to read to learn about a subject,
-and which manpage to read to learn all about an aspect of that
-subject. Part of the solution to this is:
-
-=head2 Remove the artificial distinction between operators and functions
-
-History shows us that users, and often porters, aren't clear on the
-operator-function distinction. The present split in reference
-material between perlfunc and perlop hinders user navigation. Given
-that perlfunc is by far the larger of the two, move operator reference
-into perlfunc.
-
-=head2 More tutorials
-
-More documents of a tutorial nature could help. Here are some
-candidates:
-
-=over 4
-
-=item Regular expressions
-
-Robin Berjon (r.berjon@ltconsulting.net) has volunteered.
-
-=item I/O
-
-Mark-Jason Dominus (mjd@plover.com) has an outline for perliotut.
-
-=item pack/unpack
-
-This is badly needed. There has been some discussion on the
-subject on perl5-porters.
-
-=item Debugging
-
-Ronald Kimball (rjk@linguist.dartmouth.edu) has volunteered.
-
-=back
-
-=head2 Include a search tool
-
-perldoc should be able to 'grep' fulltext indices of installed POD
-files. This would let people say:
-
- perldoc -find printing numbers with commas
-
-and get back the perlfaq entry on 'commify'.
-
-This solution, however, requires documentation to contain the keywords
-the user is searching for. Even when the users know what they're
-looking for, often they can't spell it.
-
-=head2 Include a locate tool
-
-perldoc should be able to help people find the manpages on a
-particular high-level subject:
-
- perldoc -find web
-
-would tell them manpages, web pages, and books with material on web
-programming. Similarly C<perldoc -find databases>, C<perldoc -find
-references> and so on.
-
-We need something in the vicinity of:
-
- % perl -help random stuff
- No documentation for perl function `random stuff' found
- The following entry in perlfunc.pod matches /random/a:
- =item rand EXPR
-
- =item rand
-
- Returns a random fractional number greater than or equal to C<0> and less
- than the value of EXPR. (EXPR should be positive.) If EXPR is
- omitted, the value C<1> is used. Automatically calls C<srand()> unless
- C<srand()> has already been called. See also C<srand()>.
-
- (Note: If your rand function consistently returns numbers that are too
- large or too small, then your version of Perl was probably compiled
- with the wrong number of RANDBITS.)
- The following pod pages seem to have /stuff/a:
- perlfunc.pod (7 hits)
- perlfaq7.pod (6 hits)
- perlmod.pod (4 hits)
- perlsyn.pod (3 hits)
- perlfaq8.pod (2 hits)
- perlipc.pod (2 hits)
- perl5004delta.pod (1 hit)
- perl5005delta.pod (1 hit)
- perlcall.pod (1 hit)
- perldelta.pod (1 hit)
- perlfaq3.pod (1 hit)
- perlfaq5.pod (1 hit)
- perlhist.pod (1 hit)
- perlref.pod (1 hit)
- perltoc.pod (1 hit)
- perltrap.pod (1 hit)
- Proceed to open perlfunc.pod? [y] n
- Do you want to speak perl interactively? [y] n
- Should I dial 911? [y] n
- Do you need psychiatric help? [y] y
- <PELIZA> Hi, what bothers you today?
- A Python programmer in the next cubby is driving me nuts!
- <PELIZA> Hmm, thats fixable. Just [rest censored]
-
-=head2 Separate function manpages by default
-
-Perl should install 'manpages' for every function/operator into the
-3pl or 3p manual section. By default. The splitman program in the
-Perl source distribution does the work of turning big perlfunc into
-little 3p pages.
-
-=head2 Users can't find the manpages
-
-Make C<perldoc> tell users what they need to add to their .login or
-.cshrc to set their MANPATH correctly.
-
-=head2 Install ALL Documentation
-
-Make the standard documentation kit include the VMS, OS/2, Win32,
-Threads, etc information. installperl and pod/Makefile should know
-enough to copy README.foo to perlfoo.pod before building everything,
-when appropriate.
-
-=head2 Outstanding issues to be documented
-
-Tom has a list of 5.005_5* features or changes that require
-documentation.
-
-Create one document that coherently explains the delta between the
-last camel release and the current release. perldelta was supposed
-to be that, but no longer. The things in perldelta never seemed to
-get placed in the right places in the real manpages, either. This
-needs work.
-
-=head2 Adapt www.linuxhq.com for Perl
-
-This should help glorify documentation and get more people involved in
-perl development.
-
-=head2 Replace man with a perl program
-
-Can we reimplement man in Perl? Tom has a start. I believe some of
-the Linux systems distribute a manalike. Alternatively, build on
-perldoc to remove the unfeatures like "is slow" and "has no apropos".
-
-=head2 Unicode tutorial
-
-We could use more work on helping people understand Perl's new
-Unicode support that Larry has created.
-
-=head1 Modules
-
-=head2 Update the POSIX extension to conform with the POSIX 1003.1 Edition 2
-
-The current state of the POSIX extension is as of Edition 1, 1991,
-whereas the Edition 2 came out in 1996. ISO/IEC 9945:1-1996(E),
-ANSI/IEEE Std 1003.1, 1996 Edition. ISBN 1-55937-573-6. The updates
-were legion: threads, IPC, and real time extensions.
-
-=head2 Module versions
-
-Automate the checking of versions in the standard distribution so
-it's easy for a pumpking to check whether CPAN has a newer version
-that we should be including?
-
-=head2 New modules
-
-Which modules should be added to the standard distribution? This ties
-in with the SDK discussed on the perl-sdk list at perl.org.
-
-=head2 Profiler
-
-Make the profiler (Devel::DProf) part of the standard release, and
-document it well.
-
-=head2 Tie Modules
-
-=over 4
-
-=item VecArray
-
-Implement array using vec(). Nathan Torkington has working code to
-do this.
-
-=item SubstrArray
-
-Implement array using substr()
-
-=item VirtualArray
-
-Implement array using a file
-
-=item ShiftSplice
-
-Defines shift et al in terms of splice method
-
-=back
-
-=head2 Procedural options
-
-Support procedural interfaces for the common cases of Perl's
-gratuitously OOO modules. Tom objects to "use IO::File" reading many
-thousands of lines of code.
-
-=head2 RPC
-
-Write a module for transparent, portable remote procedure calls. (Not
-core). This touches on the CORBA and ILU work.
-
-=head2 y2k localtime/gmtime
-
-Write a module, Y2k::Catch, which overloads localtime and gmtime's
-returned year value and catches "bad" attempts to use it.
-
-=head2 Export File::Find variables
-
-Make File::Find export C<$name> etc manually, at least if asked to.
-
-=head2 Ioctl
-
-Finish a proper Ioctl module.
-
-=head2 Debugger attach/detach
-
-Permit a user to debug an already-running program.
-
-=head2 Regular Expression debugger
-
-Create a visual profiler/debugger tool that stepped you through the
-execution of a regular expression point by point. Ilya has a module
-to color-code and display regular expression parses and executions.
-There's something at http://tkworld.org/ that might be a good start,
-it's a Tk/Tcl RE wizard, that builds regexen of many flavours.
-
-=head2 Alternative RE Syntax
-
-Make an alternative regular expression syntax that is accessed through
-a module. For instance,
-
- use RE;
- $re = start_of_line()
- ->literal("1998/10/08")
- ->optional( whitespace() )
- ->literal("[")
- ->remember( many( or( "-", digit() ) ) );
-
- if (/$re/) {
- print "time is $1\n";
- }
-
-Newbies to regular expressions typically only use a subset of the full
-language. Perhaps you wouldn't have to implement the full feature set.
-
-=head2 Bundled modules
-
-Nicholas Clark (nick@flirble.org) had a patch for storing modules in
-zipped format. This needs exploring and concluding.
-
-=head2 Expect
-
-Adopt IO::Tty, make it as portable as Don Libes' "expect" (can we link
-against expect code?), and perfect a Perl version of expect. IO::Tty
-and expect could then be distributed as part of the core distribution,
-replacing Comm.pl and other hacks.
-
-=head2 GUI::Native
-
-A simple-to-use interface to native graphical abilities would
-be welcomed. Oh, Perl's access Tk is nice enough, and reasonably
-portable, but it's not particularly as fast as one would like.
-Simple access to the mouse's cut buffer or mouse-presses shouldn't
-required loading a few terabytes of Tk code.
-
-=head2 Update semibroken auxiliary tools; h2ph, a2p, etc.
-
-Kurt Starsinic is working on h2ph. mjd has fixed bugs in a2p in the
-past. a2p apparently doesn't work on nawk and gawk extensions.
-Graham Barr has an Include module that does h2ph work at runtime.
-
-=head2 pod2html
-
-A short-term fix: pod2html generates absolute HTML links. Make it
-generate relative links.
-
-=head2 Podchecker
-
-Something like lint for Pod would be good. Something that catches
-common errors as well as gross ones. Brad Appleton is putting
-together something as part of his PodParser work.
-
-=head1 Tom's Wishes
-
-=head2 Webperl
-
-Design a webperl environment that's as tightly integrated and as
-easy-to-use as Perl's current command-line environment.
-
-=head2 Mobile agents
-
-More work on a safe and secure execution environment for mobile
-agents would be neat; the Safe.pm module is a start, but there's a
-still a lot to be done in that area. Adopt Penguin?
-
-=head2 POSIX on non-POSIX
-
-Standard programming constructs for non-POSIX systems would help a
-lot of programmers stuck on primitive, legacy systems. For example,
-Microsoft still hasn't made a usable POSIX interface on their clunky
-systems, which means that standard operations such as alarm() and
-fork(), both critical for sophisticated client-server programming,
-must both be kludged around.
-
-I'm unsure whether Tom means to emulate alarm( )and fork(), or merely
-to provide a document like perlport.pod to say which features are
-portable and which are not.
-
-=head2 Portable installations
-
-Figure out a portable semi-gelled installation, that is, one without
-full paths. Larry has said that he's thinking about this. Ilya
-pointed out that perllib_mangle() is good for this.
-
-=head1 Win32 Stuff
-
-=head2 Rename new headers to be consistent with the rest
-
-=head2 Sort out the spawnvp() mess
-
-=head2 Work out DLL versioning
-
-=head2 Style-check
-
-=head1 Would be nice to have
-
-=over 4
-
-=item C<pack "(stuff)*">
-
-=item Contiguous bitfields in pack/unpack
-
-=item lexperl
-
-=item Bundled perl preprocessor
-
-=item Use posix calls internally where possible
-
-=item format BOTTOM
-
-=item -i rename file only when successfully changed
-
-=item All ARGV input should act like <>
-
-=item report HANDLE [formats].
-
-=item support in perlmain to rerun debugger
-
-=item lvalue functions
-
-Tuomas Lukka, on behalf of the PDL project, greatly desires this and
-Ilya has a patch for it (probably against an older version of Perl).
-Tuomas points out that what PDL really wants is lvalue I<methods>,
-not just subs.
-
-=back
-
-=head1 Possible pragmas
-
-=head2 'less'
-
-(use less memory, CPU)
-
-=head1 Optimizations
-
-=head2 constant function cache
-
-=head2 foreach(reverse...)
-
-=head2 Cache eval tree
-
-Unless lexical outer scope used (mark in &compiling?).
-
-=head2 rcatmaybe
-
-=head2 Shrink opcode tables
-
-Via multiple implementations selected in peep.
-
-=head2 Cache hash value
-
-Not a win, according to Guido.
-
-=head2 Optimize away @_ where possible
-
-=head2 Optimize sort by { $a <=> $b }
-
-Greg Bacon added several more sort optimizations. These have
-made it into 5.005_55, thanks to Hans Mulder.
-
-=head2 Rewrite regexp parser for better integrated optimization
-
-The regexp parser was rewritten for 5.005. Ilya's the regexp guru.
-
-=head1 Vague possibilities
-
-=over 4
-
-=item ref function in list context
-
-This seems impossible to do without substantially breaking code.
-
-=item make tr/// return histogram in list context?
-
-=item Loop control on do{} et al
-
-=item Explicit switch statements
-
-Nobody has yet managed to come up with a switch syntax that would
-allow for mixed hash, constant, regexp checks. Submit implementation
-with syntax, please.
-
-=item compile to real threaded code
-
-=item structured types
-
-=item Modifiable $1 et al
-
-The intent is for this to be a means of editing the matched portions of
-the target string.
-
-=back
-
-=head1 To Do Or Not To Do
-
-These are things that have been discussed in the past and roundly
-criticized for being of questionable value.
-
-=head2 Making my() work on "package" variables
-
-Being able to say my($Foo::Bar), something that sounds ludicrous and
-the 5.6 pumpking has mocked.
-
-=head2 "or" testing defined not truth
-
-We tell people that C<||> can be used to give a default value to a
-variable:
-
- $children = shift || 5; # default is 5 children
-
-which is almost (but not):
-
- $children = shift;
- $children = 5 unless $children;
-
-but if the first argument was given and is "0", then it will be
-considered false by C<||> and C<5> used instead. Really we want
-an C<||>-like operator that behaves like:
-
- $children = shift;
- $children = 5 unless defined $children;
-
-Namely, a C<||> that tests defined-ness rather than truth. One was
-discussed, and a patch submitted, but the objections were many. While
-there were objections, many still feel the need. At least it was
-decided that C<??> is the best name for the operator.
-
-=head2 "dynamic" lexicals
-
- my $x;
- sub foo {
- local $x;
- }
-
-Localizing, as Tim Bunce points out, is a separate concept from
-whether the variable is global or lexical. Chip Salzenberg had
-an implementation once, but Larry thought it had potential to
-confuse.
-
-=head2 "class"-based, rather than package-based "lexicals"
-
-This is like what the Alias module provides, but the variables would
-be lexicals reserved by perl at compile-time, which really are indices
-pointing into the pseudo-hash object visible inside every method so
-declared.
-
-=head1 Threading
-
-=head2 Modules
-
-Which of the standard modules are thread-safe? Which CPAN modules?
-How easy is it to fix those non-safe modules?
-
-=head2 Testing
-
-Threading is still experimental. Every reproducible bug identifies
-something else for us to fix. Find and submit more of these problems.
-
-=head2 $AUTOLOAD
-
-=head2 exit/die
-
-Consistent semantics for exit/die in threads.
-
-=head2 External threads
-
-Better support for externally created threads.
-
-=head2 Thread::Pool
-
-=head2 thread-safety
-
-Spot-check globals like statcache and global GVs for thread-safety.
-"B<Part done>", says Sarathy.
-
-=head2 Per-thread GVs
-
-According to Sarathy, this would make @_ be the same in threaded
-and non-threaded, as well as helping solve problems like filehandles
-(the same filehandle currently cannot be used in two threads).
-
-=head1 Compiler
-
-=head2 Optimization
-
-The compiler's back-end code-generators for creating bytecode or
-compilable C code could use optimization work.
-
-=head2 Byteperl
-
-Figure out how and where byteperl will be built for the various
-platforms.
-
-=head2 Precompiled modules
-
-Save byte-compiled modules on disk.
-
-=head2 Executables
-
-Auto-produce executable.
-
-=head2 Typed lexicals
-
-Typed lexicals should affect B::CC::load_pad.
-
-=head2 Win32
-
-Workarounds to help Win32 dynamic loading.
-
-=head2 END blocks
-
-END blocks need saving in compiled output, now that CHECK blocks
-are available.
-
-=head2 _AUTOLOAD
-
-_AUTOLOAD prodding.
-
-=head2 comppadlist
-
-Fix comppadlist (names in comppad_name can have fake SvCUR
-from where newASSIGNOP steals the field).
-
-=head2 Cached compilation
-
-Can we install modules as bytecode?
-
-=head1 Recently Finished Tasks
-
-=head2 Figure a way out of $^(capital letter)
-
-Figure out a clean way to extend $^(capital letter) beyond
-the 26 alphabets. (${^WORD} maybe?)
-
-Mark-Jason Dominus sent a patch which went into 5.005_56.
-
-=head2 Filenames
-
-Keep filenames in the distribution and in the standard module set
-be 8.3 friendly where feasible. Good luck changing the standard
-modules, though.
-
-=head2 Foreign lines
-
-Perl should be more generous in accepting foreign line terminations.
-Mostly B<done> in 5.005.
-
-=head2 Namespace cleanup
-
- symbol-space: "pl_" prefix for all global vars
- "Perl_" prefix for all functions
-
- CPP-space: stop malloc()/free() pollution unless asked
-
-=head2 ISA.pm
-
-Rename and alter ISA.pm. B<Done>. It is now base.pm.
-
-=head2 gettimeofday
-
-See Time::HiRes.
-
-=head2 autocroak?
-
-This is the Fatal.pm module, so any builtin that does
-not return success automatically die()s. If you're feeling brave, tie
-this in with the unified exceptions scheme.
-
-=cut
diff --git a/contrib/perl5/pod/perltoot.pod b/contrib/perl5/pod/perltoot.pod
deleted file mode 100644
index 38cc1f3..0000000
--- a/contrib/perl5/pod/perltoot.pod
+++ /dev/null
@@ -1,1798 +0,0 @@
-=head1 NAME
-
-perltoot - Tom's object-oriented tutorial for perl
-
-=head1 DESCRIPTION
-
-Object-oriented programming is a big seller these days. Some managers
-would rather have objects than sliced bread. Why is that? What's so
-special about an object? Just what I<is> an object anyway?
-
-An object is nothing but a way of tucking away complex behaviours into
-a neat little easy-to-use bundle. (This is what professors call
-abstraction.) Smart people who have nothing to do but sit around for
-weeks on end figuring out really hard problems make these nifty
-objects that even regular people can use. (This is what professors call
-software reuse.) Users (well, programmers) can play with this little
-bundle all they want, but they aren't to open it up and mess with the
-insides. Just like an expensive piece of hardware, the contract says
-that you void the warranty if you muck with the cover. So don't do that.
-
-The heart of objects is the class, a protected little private namespace
-full of data and functions. A class is a set of related routines that
-addresses some problem area. You can think of it as a user-defined type.
-The Perl package mechanism, also used for more traditional modules,
-is used for class modules as well. Objects "live" in a class, meaning
-that they belong to some package.
-
-More often than not, the class provides the user with little bundles.
-These bundles are objects. They know whose class they belong to,
-and how to behave. Users ask the class to do something, like "give
-me an object." Or they can ask one of these objects to do something.
-Asking a class to do something for you is calling a I<class method>.
-Asking an object to do something for you is calling an I<object method>.
-Asking either a class (usually) or an object (sometimes) to give you
-back an object is calling a I<constructor>, which is just a
-kind of method.
-
-That's all well and good, but how is an object different from any other
-Perl data type? Just what is an object I<really>; that is, what's its
-fundamental type? The answer to the first question is easy. An object
-is different from any other data type in Perl in one and only one way:
-you may dereference it using not merely string or numeric subscripts
-as with simple arrays and hashes, but with named subroutine calls.
-In a word, with I<methods>.
-
-The answer to the second question is that it's a reference, and not just
-any reference, mind you, but one whose referent has been I<bless>()ed
-into a particular class (read: package). What kind of reference? Well,
-the answer to that one is a bit less concrete. That's because in Perl
-the designer of the class can employ any sort of reference they'd like
-as the underlying intrinsic data type. It could be a scalar, an array,
-or a hash reference. It could even be a code reference. But because
-of its inherent flexibility, an object is usually a hash reference.
-
-=head1 Creating a Class
-
-Before you create a class, you need to decide what to name it. That's
-because the class (package) name governs the name of the file used to
-house it, just as with regular modules. Then, that class (package)
-should provide one or more ways to generate objects. Finally, it should
-provide mechanisms to allow users of its objects to indirectly manipulate
-these objects from a distance.
-
-For example, let's make a simple Person class module. It gets stored in
-the file Person.pm. If it were called a Happy::Person class, it would
-be stored in the file Happy/Person.pm, and its package would become
-Happy::Person instead of just Person. (On a personal computer not
-running Unix or Plan 9, but something like MacOS or VMS, the directory
-separator may be different, but the principle is the same.) Do not assume
-any formal relationship between modules based on their directory names.
-This is merely a grouping convenience, and has no effect on inheritance,
-variable accessibility, or anything else.
-
-For this module we aren't going to use Exporter, because we're
-a well-behaved class module that doesn't export anything at all.
-In order to manufacture objects, a class needs to have a I<constructor
-method>. A constructor gives you back not just a regular data type,
-but a brand-new object in that class. This magic is taken care of by
-the bless() function, whose sole purpose is to enable its referent to
-be used as an object. Remember: being an object really means nothing
-more than that methods may now be called against it.
-
-While a constructor may be named anything you'd like, most Perl
-programmers seem to like to call theirs new(). However, new() is not
-a reserved word, and a class is under no obligation to supply such.
-Some programmers have also been known to use a function with
-the same name as the class as the constructor.
-
-=head2 Object Representation
-
-By far the most common mechanism used in Perl to represent a Pascal
-record, a C struct, or a C++ class is an anonymous hash. That's because a
-hash has an arbitrary number of data fields, each conveniently accessed by
-an arbitrary name of your own devising.
-
-If you were just doing a simple
-struct-like emulation, you would likely go about it something like this:
-
- $rec = {
- name => "Jason",
- age => 23,
- peers => [ "Norbert", "Rhys", "Phineas"],
- };
-
-If you felt like it, you could add a bit of visual distinction
-by up-casing the hash keys:
-
- $rec = {
- NAME => "Jason",
- AGE => 23,
- PEERS => [ "Norbert", "Rhys", "Phineas"],
- };
-
-And so you could get at C<< $rec->{NAME} >> to find "Jason", or
-C<< @{ $rec->{PEERS} } >> to get at "Norbert", "Rhys", and "Phineas".
-(Have you ever noticed how many 23-year-old programmers seem to
-be named "Jason" these days? :-)
-
-This same model is often used for classes, although it is not considered
-the pinnacle of programming propriety for folks from outside the
-class to come waltzing into an object, brazenly accessing its data
-members directly. Generally speaking, an object should be considered
-an opaque cookie that you use I<object methods> to access. Visually,
-methods look like you're dereffing a reference using a function name
-instead of brackets or braces.
-
-=head2 Class Interface
-
-Some languages provide a formal syntactic interface to a class's methods,
-but Perl does not. It relies on you to read the documentation of each
-class. If you try to call an undefined method on an object, Perl won't
-complain, but the program will trigger an exception while it's running.
-Likewise, if you call a method expecting a prime number as its argument
-with a non-prime one instead, you can't expect the compiler to catch this.
-(Well, you can expect it all you like, but it's not going to happen.)
-
-Let's suppose you have a well-educated user of your Person class,
-someone who has read the docs that explain the prescribed
-interface. Here's how they might use the Person class:
-
- use Person;
-
- $him = Person->new();
- $him->name("Jason");
- $him->age(23);
- $him->peers( "Norbert", "Rhys", "Phineas" );
-
- push @All_Recs, $him; # save object in array for later
-
- printf "%s is %d years old.\n", $him->name, $him->age;
- print "His peers are: ", join(", ", $him->peers), "\n";
-
- printf "Last rec's name is %s\n", $All_Recs[-1]->name;
-
-As you can see, the user of the class doesn't know (or at least, has no
-business paying attention to the fact) that the object has one particular
-implementation or another. The interface to the class and its objects
-is exclusively via methods, and that's all the user of the class should
-ever play with.
-
-=head2 Constructors and Instance Methods
-
-Still, I<someone> has to know what's in the object. And that someone is
-the class. It implements methods that the programmer uses to access
-the object. Here's how to implement the Person class using the standard
-hash-ref-as-an-object idiom. We'll make a class method called new() to
-act as the constructor, and three object methods called name(), age(), and
-peers() to get at per-object data hidden away in our anonymous hash.
-
- package Person;
- use strict;
-
- ##################################################
- ## the object constructor (simplistic version) ##
- ##################################################
- sub new {
- my $self = {};
- $self->{NAME} = undef;
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- bless($self); # but see below
- return $self;
- }
-
- ##############################################
- ## methods to access per-object data ##
- ## ##
- ## With args, they set the value. Without ##
- ## any, they only retrieve it/them. ##
- ##############################################
-
- sub name {
- my $self = shift;
- if (@_) { $self->{NAME} = shift }
- return $self->{NAME};
- }
-
- sub age {
- my $self = shift;
- if (@_) { $self->{AGE} = shift }
- return $self->{AGE};
- }
-
- sub peers {
- my $self = shift;
- if (@_) { @{ $self->{PEERS} } = @_ }
- return @{ $self->{PEERS} };
- }
-
- 1; # so the require or use succeeds
-
-We've created three methods to access an object's data, name(), age(),
-and peers(). These are all substantially similar. If called with an
-argument, they set the appropriate field; otherwise they return the
-value held by that field, meaning the value of that hash key.
-
-=head2 Planning for the Future: Better Constructors
-
-Even though at this point you may not even know what it means, someday
-you're going to worry about inheritance. (You can safely ignore this
-for now and worry about it later if you'd like.) To ensure that this
-all works out smoothly, you must use the double-argument form of bless().
-The second argument is the class into which the referent will be blessed.
-By not assuming our own class as the default second argument and instead
-using the class passed into us, we make our constructor inheritable.
-
-While we're at it, let's make our constructor a bit more flexible.
-Rather than being uniquely a class method, we'll set it up so that
-it can be called as either a class method I<or> an object
-method. That way you can say:
-
- $me = Person->new();
- $him = $me->new();
-
-To do this, all we have to do is check whether what was passed in
-was a reference or not. If so, we were invoked as an object method,
-and we need to extract the package (class) using the ref() function.
-If not, we just use the string passed in as the package name
-for blessing our referent.
-
- sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- $self->{NAME} = undef;
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- bless ($self, $class);
- return $self;
- }
-
-That's about all there is for constructors. These methods bring objects
-to life, returning neat little opaque bundles to the user to be used in
-subsequent method calls.
-
-=head2 Destructors
-
-Every story has a beginning and an end. The beginning of the object's
-story is its constructor, explicitly called when the object comes into
-existence. But the ending of its story is the I<destructor>, a method
-implicitly called when an object leaves this life. Any per-object
-clean-up code is placed in the destructor, which must (in Perl) be called
-DESTROY.
-
-If constructors can have arbitrary names, then why not destructors?
-Because while a constructor is explicitly called, a destructor is not.
-Destruction happens automatically via Perl's garbage collection (GC)
-system, which is a quick but somewhat lazy reference-based GC system.
-To know what to call, Perl insists that the destructor be named DESTROY.
-Perl's notion of the right time to call a destructor is not well-defined
-currently, which is why your destructors should not rely on when they are
-called.
-
-Why is DESTROY in all caps? Perl on occasion uses purely uppercase
-function names as a convention to indicate that the function will
-be automatically called by Perl in some way. Others that are called
-implicitly include BEGIN, END, AUTOLOAD, plus all methods used by
-tied objects, described in L<perltie>.
-
-In really good object-oriented programming languages, the user doesn't
-care when the destructor is called. It just happens when it's supposed
-to. In low-level languages without any GC at all, there's no way to
-depend on this happening at the right time, so the programmer must
-explicitly call the destructor to clean up memory and state, crossing
-their fingers that it's the right time to do so. Unlike C++, an
-object destructor is nearly never needed in Perl, and even when it is,
-explicit invocation is uncalled for. In the case of our Person class,
-we don't need a destructor because Perl takes care of simple matters
-like memory deallocation.
-
-The only situation where Perl's reference-based GC won't work is
-when there's a circularity in the data structure, such as:
-
- $this->{WHATEVER} = $this;
-
-In that case, you must delete the self-reference manually if you expect
-your program not to leak memory. While admittedly error-prone, this is
-the best we can do right now. Nonetheless, rest assured that when your
-program is finished, its objects' destructors are all duly called.
-So you are guaranteed that an object I<eventually> gets properly
-destroyed, except in the unique case of a program that never exits.
-(If you're running Perl embedded in another application, this full GC
-pass happens a bit more frequently--whenever a thread shuts down.)
-
-=head2 Other Object Methods
-
-The methods we've talked about so far have either been constructors or
-else simple "data methods", interfaces to data stored in the object.
-These are a bit like an object's data members in the C++ world, except
-that strangers don't access them as data. Instead, they should only
-access the object's data indirectly via its methods. This is an
-important rule: in Perl, access to an object's data should I<only>
-be made through methods.
-
-Perl doesn't impose restrictions on who gets to use which methods.
-The public-versus-private distinction is by convention, not syntax.
-(Well, unless you use the Alias module described below in
-L<Data Members as Variables>.) Occasionally you'll see method names beginning or ending
-with an underscore or two. This marking is a convention indicating
-that the methods are private to that class alone and sometimes to its
-closest acquaintances, its immediate subclasses. But this distinction
-is not enforced by Perl itself. It's up to the programmer to behave.
-
-There's no reason to limit methods to those that simply access data.
-Methods can do anything at all. The key point is that they're invoked
-against an object or a class. Let's say we'd like object methods that
-do more than fetch or set one particular field.
-
- sub exclaim {
- my $self = shift;
- return sprintf "Hi, I'm %s, age %d, working with %s",
- $self->{NAME}, $self->{AGE}, join(", ", @{$self->{PEERS}});
- }
-
-Or maybe even one like this:
-
- sub happy_birthday {
- my $self = shift;
- return ++$self->{AGE};
- }
-
-Some might argue that one should go at these this way:
-
- sub exclaim {
- my $self = shift;
- return sprintf "Hi, I'm %s, age %d, working with %s",
- $self->name, $self->age, join(", ", $self->peers);
- }
-
- sub happy_birthday {
- my $self = shift;
- return $self->age( $self->age() + 1 );
- }
-
-But since these methods are all executing in the class itself, this
-may not be critical. There are tradeoffs to be made. Using direct
-hash access is faster (about an order of magnitude faster, in fact), and
-it's more convenient when you want to interpolate in strings. But using
-methods (the external interface) internally shields not just the users of
-your class but even you yourself from changes in your data representation.
-
-=head1 Class Data
-
-What about "class data", data items common to each object in a class?
-What would you want that for? Well, in your Person class, you might
-like to keep track of the total people alive. How do you implement that?
-
-You I<could> make it a global variable called $Person::Census. But about
-only reason you'd do that would be if you I<wanted> people to be able to
-get at your class data directly. They could just say $Person::Census
-and play around with it. Maybe this is ok in your design scheme.
-You might even conceivably want to make it an exported variable. To be
-exportable, a variable must be a (package) global. If this were a
-traditional module rather than an object-oriented one, you might do that.
-
-While this approach is expected in most traditional modules, it's
-generally considered rather poor form in most object modules. In an
-object module, you should set up a protective veil to separate interface
-from implementation. So provide a class method to access class data
-just as you provide object methods to access object data.
-
-So, you I<could> still keep $Census as a package global and rely upon
-others to honor the contract of the module and therefore not play around
-with its implementation. You could even be supertricky and make $Census a
-tied object as described in L<perltie>, thereby intercepting all accesses.
-
-But more often than not, you just want to make your class data a
-file-scoped lexical. To do so, simply put this at the top of the file:
-
- my $Census = 0;
-
-Even though the scope of a my() normally expires when the block in which
-it was declared is done (in this case the whole file being required or
-used), Perl's deep binding of lexical variables guarantees that the
-variable will not be deallocated, remaining accessible to functions
-declared within that scope. This doesn't work with global variables
-given temporary values via local(), though.
-
-Irrespective of whether you leave $Census a package global or make
-it instead a file-scoped lexical, you should make these
-changes to your Person::new() constructor:
-
- sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- $Census++;
- $self->{NAME} = undef;
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- bless ($self, $class);
- return $self;
- }
-
- sub population {
- return $Census;
- }
-
-Now that we've done this, we certainly do need a destructor so that
-when Person is destroyed, the $Census goes down. Here's how
-this could be done:
-
- sub DESTROY { --$Census }
-
-Notice how there's no memory to deallocate in the destructor? That's
-something that Perl takes care of for you all by itself.
-
-Alternatively, you could use the Class::Data::Inheritable module from
-CPAN.
-
-
-=head2 Accessing Class Data
-
-It turns out that this is not really a good way to go about handling
-class data. A good scalable rule is that I<you must never reference class
-data directly from an object method>. Otherwise you aren't building a
-scalable, inheritable class. The object must be the rendezvous point
-for all operations, especially from an object method. The globals
-(class data) would in some sense be in the "wrong" package in your
-derived classes. In Perl, methods execute in the context of the class
-they were defined in, I<not> that of the object that triggered them.
-Therefore, namespace visibility of package globals in methods is unrelated
-to inheritance.
-
-Got that? Maybe not. Ok, let's say that some other class "borrowed"
-(well, inherited) the DESTROY method as it was defined above. When those
-objects are destroyed, the original $Census variable will be altered,
-not the one in the new class's package namespace. Perhaps this is what
-you want, but probably it isn't.
-
-Here's how to fix this. We'll store a reference to the data in the
-value accessed by the hash key "_CENSUS". Why the underscore? Well,
-mostly because an initial underscore already conveys strong feelings
-of magicalness to a C programmer. It's really just a mnemonic device
-to remind ourselves that this field is special and not to be used as
-a public data member in the same way that NAME, AGE, and PEERS are.
-(Because we've been developing this code under the strict pragma, prior
-to perl version 5.004 we'll have to quote the field name.)
-
- sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- $self->{NAME} = undef;
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- # "private" data
- $self->{"_CENSUS"} = \$Census;
- bless ($self, $class);
- ++ ${ $self->{"_CENSUS"} };
- return $self;
- }
-
- sub population {
- my $self = shift;
- if (ref $self) {
- return ${ $self->{"_CENSUS"} };
- } else {
- return $Census;
- }
- }
-
- sub DESTROY {
- my $self = shift;
- -- ${ $self->{"_CENSUS"} };
- }
-
-=head2 Debugging Methods
-
-It's common for a class to have a debugging mechanism. For example,
-you might want to see when objects are created or destroyed. To do that,
-add a debugging variable as a file-scoped lexical. For this, we'll pull
-in the standard Carp module to emit our warnings and fatal messages.
-That way messages will come out with the caller's filename and
-line number instead of our own; if we wanted them to be from our own
-perspective, we'd just use die() and warn() directly instead of croak()
-and carp() respectively.
-
- use Carp;
- my $Debugging = 0;
-
-Now add a new class method to access the variable.
-
- sub debug {
- my $class = shift;
- if (ref $class) { confess "Class method called as object method" }
- unless (@_ == 1) { confess "usage: CLASSNAME->debug(level)" }
- $Debugging = shift;
- }
-
-Now fix up DESTROY to murmur a bit as the moribund object expires:
-
- sub DESTROY {
- my $self = shift;
- if ($Debugging) { carp "Destroying $self " . $self->name }
- -- ${ $self->{"_CENSUS"} };
- }
-
-One could conceivably make a per-object debug state. That
-way you could call both of these:
-
- Person->debug(1); # entire class
- $him->debug(1); # just this object
-
-To do so, we need our debugging method to be a "bimodal" one, one that
-works on both classes I<and> objects. Therefore, adjust the debug()
-and DESTROY methods as follows:
-
- sub debug {
- my $self = shift;
- confess "usage: thing->debug(level)" unless @_ == 1;
- my $level = shift;
- if (ref($self)) {
- $self->{"_DEBUG"} = $level; # just myself
- } else {
- $Debugging = $level; # whole class
- }
- }
-
- sub DESTROY {
- my $self = shift;
- if ($Debugging || $self->{"_DEBUG"}) {
- carp "Destroying $self " . $self->name;
- }
- -- ${ $self->{"_CENSUS"} };
- }
-
-What happens if a derived class (which we'll call Employee) inherits
-methods from this Person base class? Then C<< Employee->debug() >>, when called
-as a class method, manipulates $Person::Debugging not $Employee::Debugging.
-
-=head2 Class Destructors
-
-The object destructor handles the death of each distinct object. But sometimes
-you want a bit of cleanup when the entire class is shut down, which
-currently only happens when the program exits. To make such a
-I<class destructor>, create a function in that class's package named
-END. This works just like the END function in traditional modules,
-meaning that it gets called whenever your program exits unless it execs
-or dies of an uncaught signal. For example,
-
- sub END {
- if ($Debugging) {
- print "All persons are going away now.\n";
- }
- }
-
-When the program exits, all the class destructors (END functions) are
-be called in the opposite order that they were loaded in (LIFO order).
-
-=head2 Documenting the Interface
-
-And there you have it: we've just shown you the I<implementation> of this
-Person class. Its I<interface> would be its documentation. Usually this
-means putting it in pod ("plain old documentation") format right there
-in the same file. In our Person example, we would place the following
-docs anywhere in the Person.pm file. Even though it looks mostly like
-code, it's not. It's embedded documentation such as would be used by
-the pod2man, pod2html, or pod2text programs. The Perl compiler ignores
-pods entirely, just as the translators ignore code. Here's an example of
-some pods describing the informal interface:
-
- =head1 NAME
-
- Person - class to implement people
-
- =head1 SYNOPSIS
-
- use Person;
-
- #################
- # class methods #
- #################
- $ob = Person->new;
- $count = Person->population;
-
- #######################
- # object data methods #
- #######################
-
- ### get versions ###
- $who = $ob->name;
- $years = $ob->age;
- @pals = $ob->peers;
-
- ### set versions ###
- $ob->name("Jason");
- $ob->age(23);
- $ob->peers( "Norbert", "Rhys", "Phineas" );
-
- ########################
- # other object methods #
- ########################
-
- $phrase = $ob->exclaim;
- $ob->happy_birthday;
-
- =head1 DESCRIPTION
-
- The Person class implements dah dee dah dee dah....
-
-That's all there is to the matter of interface versus implementation.
-A programmer who opens up the module and plays around with all the private
-little shiny bits that were safely locked up behind the interface contract
-has voided the warranty, and you shouldn't worry about their fate.
-
-=head1 Aggregation
-
-Suppose you later want to change the class to implement better names.
-Perhaps you'd like to support both given names (called Christian names,
-irrespective of one's religion) and family names (called surnames), plus
-nicknames and titles. If users of your Person class have been properly
-accessing it through its documented interface, then you can easily change
-the underlying implementation. If they haven't, then they lose and
-it's their fault for breaking the contract and voiding their warranty.
-
-To do this, we'll make another class, this one called Fullname. What's
-the Fullname class look like? To answer that question, you have to
-first figure out how you want to use it. How about we use it this way:
-
- $him = Person->new();
- $him->fullname->title("St");
- $him->fullname->christian("Thomas");
- $him->fullname->surname("Aquinas");
- $him->fullname->nickname("Tommy");
- printf "His normal name is %s\n", $him->name;
- printf "But his real name is %s\n", $him->fullname->as_string;
-
-Ok. To do this, we'll change Person::new() so that it supports
-a full name field this way:
-
- sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- $self->{FULLNAME} = Fullname->new();
- $self->{AGE} = undef;
- $self->{PEERS} = [];
- $self->{"_CENSUS"} = \$Census;
- bless ($self, $class);
- ++ ${ $self->{"_CENSUS"} };
- return $self;
- }
-
- sub fullname {
- my $self = shift;
- return $self->{FULLNAME};
- }
-
-Then to support old code, define Person::name() this way:
-
- sub name {
- my $self = shift;
- return $self->{FULLNAME}->nickname(@_)
- || $self->{FULLNAME}->christian(@_);
- }
-
-Here's the Fullname class. We'll use the same technique
-of using a hash reference to hold data fields, and methods
-by the appropriate name to access them:
-
- package Fullname;
- use strict;
-
- sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {
- TITLE => undef,
- CHRISTIAN => undef,
- SURNAME => undef,
- NICK => undef,
- };
- bless ($self, $class);
- return $self;
- }
-
- sub christian {
- my $self = shift;
- if (@_) { $self->{CHRISTIAN} = shift }
- return $self->{CHRISTIAN};
- }
-
- sub surname {
- my $self = shift;
- if (@_) { $self->{SURNAME} = shift }
- return $self->{SURNAME};
- }
-
- sub nickname {
- my $self = shift;
- if (@_) { $self->{NICK} = shift }
- return $self->{NICK};
- }
-
- sub title {
- my $self = shift;
- if (@_) { $self->{TITLE} = shift }
- return $self->{TITLE};
- }
-
- sub as_string {
- my $self = shift;
- my $name = join(" ", @$self{'CHRISTIAN', 'SURNAME'});
- if ($self->{TITLE}) {
- $name = $self->{TITLE} . " " . $name;
- }
- return $name;
- }
-
- 1;
-
-Finally, here's the test program:
-
- #!/usr/bin/perl -w
- use strict;
- use Person;
- sub END { show_census() }
-
- sub show_census () {
- printf "Current population: %d\n", Person->population;
- }
-
- Person->debug(1);
-
- show_census();
-
- my $him = Person->new();
-
- $him->fullname->christian("Thomas");
- $him->fullname->surname("Aquinas");
- $him->fullname->nickname("Tommy");
- $him->fullname->title("St");
- $him->age(1);
-
- printf "%s is really %s.\n", $him->name, $him->fullname;
- printf "%s's age: %d.\n", $him->name, $him->age;
- $him->happy_birthday;
- printf "%s's age: %d.\n", $him->name, $him->age;
-
- show_census();
-
-=head1 Inheritance
-
-Object-oriented programming systems all support some notion of
-inheritance. Inheritance means allowing one class to piggy-back on
-top of another one so you don't have to write the same code again and
-again. It's about software reuse, and therefore related to Laziness,
-the principal virtue of a programmer. (The import/export mechanisms in
-traditional modules are also a form of code reuse, but a simpler one than
-the true inheritance that you find in object modules.)
-
-Sometimes the syntax of inheritance is built into the core of the
-language, and sometimes it's not. Perl has no special syntax for
-specifying the class (or classes) to inherit from. Instead, it's all
-strictly in the semantics. Each package can have a variable called @ISA,
-which governs (method) inheritance. If you try to call a method on an
-object or class, and that method is not found in that object's package,
-Perl then looks to @ISA for other packages to go looking through in
-search of the missing method.
-
-Like the special per-package variables recognized by Exporter (such as
-@EXPORT, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS, and $VERSION), the @ISA
-array I<must> be a package-scoped global and not a file-scoped lexical
-created via my(). Most classes have just one item in their @ISA array.
-In this case, we have what's called "single inheritance", or SI for short.
-
-Consider this class:
-
- package Employee;
- use Person;
- @ISA = ("Person");
- 1;
-
-Not a lot to it, eh? All it's doing so far is loading in another
-class and stating that this one will inherit methods from that
-other class if need be. We have given it none of its own methods.
-We rely upon an Employee to behave just like a Person.
-
-Setting up an empty class like this is called the "empty subclass test";
-that is, making a derived class that does nothing but inherit from a
-base class. If the original base class has been designed properly,
-then the new derived class can be used as a drop-in replacement for the
-old one. This means you should be able to write a program like this:
-
- use Employee;
- my $empl = Employee->new();
- $empl->name("Jason");
- $empl->age(23);
- printf "%s is age %d.\n", $empl->name, $empl->age;
-
-By proper design, we mean always using the two-argument form of bless(),
-avoiding direct access of global data, and not exporting anything. If you
-look back at the Person::new() function we defined above, we were careful
-to do that. There's a bit of package data used in the constructor,
-but the reference to this is stored on the object itself and all other
-methods access package data via that reference, so we should be ok.
-
-What do we mean by the Person::new() function -- isn't that actually
-a method? Well, in principle, yes. A method is just a function that
-expects as its first argument a class name (package) or object
-(blessed reference). Person::new() is the function that both the
-C<< Person->new() >> method and the C<< Employee->new() >> method end
-up calling. Understand that while a method call looks a lot like a
-function call, they aren't really quite the same, and if you treat them
-as the same, you'll very soon be left with nothing but broken programs.
-First, the actual underlying calling conventions are different: method
-calls get an extra argument. Second, function calls don't do inheritance,
-but methods do.
-
- Method Call Resulting Function Call
- ----------- ------------------------
- Person->new() Person::new("Person")
- Employee->new() Person::new("Employee")
-
-So don't use function calls when you mean to call a method.
-
-If an employee is just a Person, that's not all too very interesting.
-So let's add some other methods. We'll give our employee
-data fields to access their salary, their employee ID, and their
-start date.
-
-If you're getting a little tired of creating all these nearly identical
-methods just to get at the object's data, do not despair. Later,
-we'll describe several different convenience mechanisms for shortening
-this up. Meanwhile, here's the straight-forward way:
-
- sub salary {
- my $self = shift;
- if (@_) { $self->{SALARY} = shift }
- return $self->{SALARY};
- }
-
- sub id_number {
- my $self = shift;
- if (@_) { $self->{ID} = shift }
- return $self->{ID};
- }
-
- sub start_date {
- my $self = shift;
- if (@_) { $self->{START_DATE} = shift }
- return $self->{START_DATE};
- }
-
-=head2 Overridden Methods
-
-What happens when both a derived class and its base class have the same
-method defined? Well, then you get the derived class's version of that
-method. For example, let's say that we want the peers() method called on
-an employee to act a bit differently. Instead of just returning the list
-of peer names, let's return slightly different strings. So doing this:
-
- $empl->peers("Peter", "Paul", "Mary");
- printf "His peers are: %s\n", join(", ", $empl->peers);
-
-will produce:
-
- His peers are: PEON=PETER, PEON=PAUL, PEON=MARY
-
-To do this, merely add this definition into the Employee.pm file:
-
- sub peers {
- my $self = shift;
- if (@_) { @{ $self->{PEERS} } = @_ }
- return map { "PEON=\U$_" } @{ $self->{PEERS} };
- }
-
-There, we've just demonstrated the high-falutin' concept known in certain
-circles as I<polymorphism>. We've taken on the form and behaviour of
-an existing object, and then we've altered it to suit our own purposes.
-This is a form of Laziness. (Getting polymorphed is also what happens
-when the wizard decides you'd look better as a frog.)
-
-Every now and then you'll want to have a method call trigger both its
-derived class (also known as "subclass") version as well as its base class
-(also known as "superclass") version. In practice, constructors and
-destructors are likely to want to do this, and it probably also makes
-sense in the debug() method we showed previously.
-
-To do this, add this to Employee.pm:
-
- use Carp;
- my $Debugging = 0;
-
- sub debug {
- my $self = shift;
- confess "usage: thing->debug(level)" unless @_ == 1;
- my $level = shift;
- if (ref($self)) {
- $self->{"_DEBUG"} = $level;
- } else {
- $Debugging = $level; # whole class
- }
- Person::debug($self, $Debugging); # don't really do this
- }
-
-As you see, we turn around and call the Person package's debug() function.
-But this is far too fragile for good design. What if Person doesn't
-have a debug() function, but is inheriting I<its> debug() method
-from elsewhere? It would have been slightly better to say
-
- Person->debug($Debugging);
-
-But even that's got too much hard-coded. It's somewhat better to say
-
- $self->Person::debug($Debugging);
-
-Which is a funny way to say to start looking for a debug() method up
-in Person. This strategy is more often seen on overridden object methods
-than on overridden class methods.
-
-There is still something a bit off here. We've hard-coded our
-superclass's name. This in particular is bad if you change which classes
-you inherit from, or add others. Fortunately, the pseudoclass SUPER
-comes to the rescue here.
-
- $self->SUPER::debug($Debugging);
-
-This way it starts looking in my class's @ISA. This only makes sense
-from I<within> a method call, though. Don't try to access anything
-in SUPER:: from anywhere else, because it doesn't exist outside
-an overridden method call.
-
-Things are getting a bit complicated here. Have we done anything
-we shouldn't? As before, one way to test whether we're designing
-a decent class is via the empty subclass test. Since we already have
-an Employee class that we're trying to check, we'd better get a new
-empty subclass that can derive from Employee. Here's one:
-
- package Boss;
- use Employee; # :-)
- @ISA = qw(Employee);
-
-And here's the test program:
-
- #!/usr/bin/perl -w
- use strict;
- use Boss;
- Boss->debug(1);
-
- my $boss = Boss->new();
-
- $boss->fullname->title("Don");
- $boss->fullname->surname("Pichon Alvarez");
- $boss->fullname->christian("Federico Jesus");
- $boss->fullname->nickname("Fred");
-
- $boss->age(47);
- $boss->peers("Frank", "Felipe", "Faust");
-
- printf "%s is age %d.\n", $boss->fullname, $boss->age;
- printf "His peers are: %s\n", join(", ", $boss->peers);
-
-Running it, we see that we're still ok. If you'd like to dump out your
-object in a nice format, somewhat like the way the 'x' command works in
-the debugger, you could use the Data::Dumper module from CPAN this way:
-
- use Data::Dumper;
- print "Here's the boss:\n";
- print Dumper($boss);
-
-Which shows us something like this:
-
- Here's the boss:
- $VAR1 = bless( {
- _CENSUS => \1,
- FULLNAME => bless( {
- TITLE => 'Don',
- SURNAME => 'Pichon Alvarez',
- NICK => 'Fred',
- CHRISTIAN => 'Federico Jesus'
- }, 'Fullname' ),
- AGE => 47,
- PEERS => [
- 'Frank',
- 'Felipe',
- 'Faust'
- ]
- }, 'Boss' );
-
-Hm.... something's missing there. What about the salary, start date,
-and ID fields? Well, we never set them to anything, even undef, so they
-don't show up in the hash's keys. The Employee class has no new() method
-of its own, and the new() method in Person doesn't know about Employees.
-(Nor should it: proper OO design dictates that a subclass be allowed to
-know about its immediate superclass, but never vice-versa.) So let's
-fix up Employee::new() this way:
-
- sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = $class->SUPER::new();
- $self->{SALARY} = undef;
- $self->{ID} = undef;
- $self->{START_DATE} = undef;
- bless ($self, $class); # reconsecrate
- return $self;
- }
-
-Now if you dump out an Employee or Boss object, you'll find
-that new fields show up there now.
-
-=head2 Multiple Inheritance
-
-Ok, at the risk of confusing beginners and annoying OO gurus, it's
-time to confess that Perl's object system includes that controversial
-notion known as multiple inheritance, or MI for short. All this means
-is that rather than having just one parent class who in turn might
-itself have a parent class, etc., that you can directly inherit from
-two or more parents. It's true that some uses of MI can get you into
-trouble, although hopefully not quite so much trouble with Perl as with
-dubiously-OO languages like C++.
-
-The way it works is actually pretty simple: just put more than one package
-name in your @ISA array. When it comes time for Perl to go finding
-methods for your object, it looks at each of these packages in order.
-Well, kinda. It's actually a fully recursive, depth-first order.
-Consider a bunch of @ISA arrays like this:
-
- @First::ISA = qw( Alpha );
- @Second::ISA = qw( Beta );
- @Third::ISA = qw( First Second );
-
-If you have an object of class Third:
-
- my $ob = Third->new();
- $ob->spin();
-
-How do we find a spin() method (or a new() method for that matter)?
-Because the search is depth-first, classes will be looked up
-in the following order: Third, First, Alpha, Second, and Beta.
-
-In practice, few class modules have been seen that actually
-make use of MI. One nearly always chooses simple containership of
-one class within another over MI. That's why our Person
-object I<contained> a Fullname object. That doesn't mean
-it I<was> one.
-
-However, there is one particular area where MI in Perl is rampant:
-borrowing another class's class methods. This is rather common,
-especially with some bundled "objectless" classes,
-like Exporter, DynaLoader, AutoLoader, and SelfLoader. These classes
-do not provide constructors; they exist only so you may inherit their
-class methods. (It's not entirely clear why inheritance was done
-here rather than traditional module importation.)
-
-For example, here is the POSIX module's @ISA:
-
- package POSIX;
- @ISA = qw(Exporter DynaLoader);
-
-The POSIX module isn't really an object module, but then,
-neither are Exporter or DynaLoader. They're just lending their
-classes' behaviours to POSIX.
-
-Why don't people use MI for object methods much? One reason is that
-it can have complicated side-effects. For one thing, your inheritance
-graph (no longer a tree) might converge back to the same base class.
-Although Perl guards against recursive inheritance, merely having parents
-who are related to each other via a common ancestor, incestuous though
-it sounds, is not forbidden. What if in our Third class shown above we
-wanted its new() method to also call both overridden constructors in its
-two parent classes? The SUPER notation would only find the first one.
-Also, what about if the Alpha and Beta classes both had a common ancestor,
-like Nought? If you kept climbing up the inheritance tree calling
-overridden methods, you'd end up calling Nought::new() twice,
-which might well be a bad idea.
-
-=head2 UNIVERSAL: The Root of All Objects
-
-Wouldn't it be convenient if all objects were rooted at some ultimate
-base class? That way you could give every object common methods without
-having to go and add it to each and every @ISA. Well, it turns out that
-you can. You don't see it, but Perl tacitly and irrevocably assumes
-that there's an extra element at the end of @ISA: the class UNIVERSAL.
-In version 5.003, there were no predefined methods there, but you could put
-whatever you felt like into it.
-
-However, as of version 5.004 (or some subversive releases, like 5.003_08),
-UNIVERSAL has some methods in it already. These are builtin to your Perl
-binary, so they don't take any extra time to load. Predefined methods
-include isa(), can(), and VERSION(). isa() tells you whether an object or
-class "is" another one without having to traverse the hierarchy yourself:
-
- $has_io = $fd->isa("IO::Handle");
- $itza_handle = IO::Socket->isa("IO::Handle");
-
-The can() method, called against that object or class, reports back
-whether its string argument is a callable method name in that class.
-In fact, it gives you back a function reference to that method:
-
- $his_print_method = $obj->can('as_string');
-
-Finally, the VERSION method checks whether the class (or the object's
-class) has a package global called $VERSION that's high enough, as in:
-
- Some_Module->VERSION(3.0);
- $his_vers = $ob->VERSION();
-
-However, we don't usually call VERSION ourselves. (Remember that an all
-uppercase function name is a Perl convention that indicates that the
-function will be automatically used by Perl in some way.) In this case,
-it happens when you say
-
- use Some_Module 3.0;
-
-If you wanted to add version checking to your Person class explained
-above, just add this to Person.pm:
-
- our $VERSION = '1.1';
-
-and then in Employee.pm could you can say
-
- use Employee 1.1;
-
-And it would make sure that you have at least that version number or
-higher available. This is not the same as loading in that exact version
-number. No mechanism currently exists for concurrent installation of
-multiple versions of a module. Lamentably.
-
-=head1 Alternate Object Representations
-
-Nothing requires objects to be implemented as hash references. An object
-can be any sort of reference so long as its referent has been suitably
-blessed. That means scalar, array, and code references are also fair
-game.
-
-A scalar would work if the object has only one datum to hold. An array
-would work for most cases, but makes inheritance a bit dodgy because
-you have to invent new indices for the derived classes.
-
-=head2 Arrays as Objects
-
-If the user of your class honors the contract and sticks to the advertised
-interface, then you can change its underlying interface if you feel
-like it. Here's another implementation that conforms to the same
-interface specification. This time we'll use an array reference
-instead of a hash reference to represent the object.
-
- package Person;
- use strict;
-
- my($NAME, $AGE, $PEERS) = ( 0 .. 2 );
-
- ############################################
- ## the object constructor (array version) ##
- ############################################
- sub new {
- my $self = [];
- $self->[$NAME] = undef; # this is unnecessary
- $self->[$AGE] = undef; # as is this
- $self->[$PEERS] = []; # but this isn't, really
- bless($self);
- return $self;
- }
-
- sub name {
- my $self = shift;
- if (@_) { $self->[$NAME] = shift }
- return $self->[$NAME];
- }
-
- sub age {
- my $self = shift;
- if (@_) { $self->[$AGE] = shift }
- return $self->[$AGE];
- }
-
- sub peers {
- my $self = shift;
- if (@_) { @{ $self->[$PEERS] } = @_ }
- return @{ $self->[$PEERS] };
- }
-
- 1; # so the require or use succeeds
-
-You might guess that the array access would be a lot faster than the
-hash access, but they're actually comparable. The array is a I<little>
-bit faster, but not more than ten or fifteen percent, even when you
-replace the variables above like $AGE with literal numbers, like 1.
-A bigger difference between the two approaches can be found in memory use.
-A hash representation takes up more memory than an array representation
-because you have to allocate memory for the keys as well as for the values.
-However, it really isn't that bad, especially since as of version 5.004,
-memory is only allocated once for a given hash key, no matter how many
-hashes have that key. It's expected that sometime in the future, even
-these differences will fade into obscurity as more efficient underlying
-representations are devised.
-
-Still, the tiny edge in speed (and somewhat larger one in memory)
-is enough to make some programmers choose an array representation
-for simple classes. There's still a little problem with
-scalability, though, because later in life when you feel
-like creating subclasses, you'll find that hashes just work
-out better.
-
-=head2 Closures as Objects
-
-Using a code reference to represent an object offers some fascinating
-possibilities. We can create a new anonymous function (closure) who
-alone in all the world can see the object's data. This is because we
-put the data into an anonymous hash that's lexically visible only to
-the closure we create, bless, and return as the object. This object's
-methods turn around and call the closure as a regular subroutine call,
-passing it the field we want to affect. (Yes,
-the double-function call is slow, but if you wanted fast, you wouldn't
-be using objects at all, eh? :-)
-
-Use would be similar to before:
-
- use Person;
- $him = Person->new();
- $him->name("Jason");
- $him->age(23);
- $him->peers( [ "Norbert", "Rhys", "Phineas" ] );
- printf "%s is %d years old.\n", $him->name, $him->age;
- print "His peers are: ", join(", ", @{$him->peers}), "\n";
-
-but the implementation would be radically, perhaps even sublimely
-different:
-
- package Person;
-
- sub new {
- my $that = shift;
- my $class = ref($that) || $that;
- my $self = {
- NAME => undef,
- AGE => undef,
- PEERS => [],
- };
- my $closure = sub {
- my $field = shift;
- if (@_) { $self->{$field} = shift }
- return $self->{$field};
- };
- bless($closure, $class);
- return $closure;
- }
-
- sub name { &{ $_[0] }("NAME", @_[ 1 .. $#_ ] ) }
- sub age { &{ $_[0] }("AGE", @_[ 1 .. $#_ ] ) }
- sub peers { &{ $_[0] }("PEERS", @_[ 1 .. $#_ ] ) }
-
- 1;
-
-Because this object is hidden behind a code reference, it's probably a bit
-mysterious to those whose background is more firmly rooted in standard
-procedural or object-based programming languages than in functional
-programming languages whence closures derive. The object
-created and returned by the new() method is itself not a data reference
-as we've seen before. It's an anonymous code reference that has within
-it access to a specific version (lexical binding and instantiation)
-of the object's data, which are stored in the private variable $self.
-Although this is the same function each time, it contains a different
-version of $self.
-
-When a method like C<$him-E<gt>name("Jason")> is called, its implicit
-zeroth argument is the invoking object--just as it is with all method
-calls. But in this case, it's our code reference (something like a
-function pointer in C++, but with deep binding of lexical variables).
-There's not a lot to be done with a code reference beyond calling it, so
-that's just what we do when we say C<&{$_[0]}>. This is just a regular
-function call, not a method call. The initial argument is the string
-"NAME", and any remaining arguments are whatever had been passed to the
-method itself.
-
-Once we're executing inside the closure that had been created in new(),
-the $self hash reference suddenly becomes visible. The closure grabs
-its first argument ("NAME" in this case because that's what the name()
-method passed it), and uses that string to subscript into the private
-hash hidden in its unique version of $self.
-
-Nothing under the sun will allow anyone outside the executing method to
-be able to get at this hidden data. Well, nearly nothing. You I<could>
-single step through the program using the debugger and find out the
-pieces while you're in the method, but everyone else is out of luck.
-
-There, if that doesn't excite the Scheme folks, then I just don't know
-what will. Translation of this technique into C++, Java, or any other
-braindead-static language is left as a futile exercise for aficionados
-of those camps.
-
-You could even add a bit of nosiness via the caller() function and
-make the closure refuse to operate unless called via its own package.
-This would no doubt satisfy certain fastidious concerns of programming
-police and related puritans.
-
-If you were wondering when Hubris, the third principle virtue of a
-programmer, would come into play, here you have it. (More seriously,
-Hubris is just the pride in craftsmanship that comes from having written
-a sound bit of well-designed code.)
-
-=head1 AUTOLOAD: Proxy Methods
-
-Autoloading is a way to intercept calls to undefined methods. An autoload
-routine may choose to create a new function on the fly, either loaded
-from disk or perhaps just eval()ed right there. This define-on-the-fly
-strategy is why it's called autoloading.
-
-But that's only one possible approach. Another one is to just
-have the autoloaded method itself directly provide the
-requested service. When used in this way, you may think
-of autoloaded methods as "proxy" methods.
-
-When Perl tries to call an undefined function in a particular package
-and that function is not defined, it looks for a function in
-that same package called AUTOLOAD. If one exists, it's called
-with the same arguments as the original function would have had.
-The fully-qualified name of the function is stored in that package's
-global variable $AUTOLOAD. Once called, the function can do anything
-it would like, including defining a new function by the right name, and
-then doing a really fancy kind of C<goto> right to it, erasing itself
-from the call stack.
-
-What does this have to do with objects? After all, we keep talking about
-functions, not methods. Well, since a method is just a function with
-an extra argument and some fancier semantics about where it's found,
-we can use autoloading for methods, too. Perl doesn't start looking
-for an AUTOLOAD method until it has exhausted the recursive hunt up
-through @ISA, though. Some programmers have even been known to define
-a UNIVERSAL::AUTOLOAD method to trap unresolved method calls to any
-kind of object.
-
-=head2 Autoloaded Data Methods
-
-You probably began to get a little suspicious about the duplicated
-code way back earlier when we first showed you the Person class, and
-then later the Employee class. Each method used to access the
-hash fields looked virtually identical. This should have tickled
-that great programming virtue, Impatience, but for the time,
-we let Laziness win out, and so did nothing. Proxy methods can cure
-this.
-
-Instead of writing a new function every time we want a new data field,
-we'll use the autoload mechanism to generate (actually, mimic) methods on
-the fly. To verify that we're accessing a valid member, we will check
-against an C<_permitted> (pronounced "under-permitted") field, which
-is a reference to a file-scoped lexical (like a C file static) hash of permitted fields in this record
-called %fields. Why the underscore? For the same reason as the _CENSUS
-field we once used: as a marker that means "for internal use only".
-
-Here's what the module initialization code and class
-constructor will look like when taking this approach:
-
- package Person;
- use Carp;
- our $AUTOLOAD; # it's a package global
-
- my %fields = (
- name => undef,
- age => undef,
- peers => undef,
- );
-
- sub new {
- my $that = shift;
- my $class = ref($that) || $that;
- my $self = {
- _permitted => \%fields,
- %fields,
- };
- bless $self, $class;
- return $self;
- }
-
-If we wanted our record to have default values, we could fill those in
-where current we have C<undef> in the %fields hash.
-
-Notice how we saved a reference to our class data on the object itself?
-Remember that it's important to access class data through the object
-itself instead of having any method reference %fields directly, or else
-you won't have a decent inheritance.
-
-The real magic, though, is going to reside in our proxy method, which
-will handle all calls to undefined methods for objects of class Person
-(or subclasses of Person). It has to be called AUTOLOAD. Again, it's
-all caps because it's called for us implicitly by Perl itself, not by
-a user directly.
-
- sub AUTOLOAD {
- my $self = shift;
- my $type = ref($self)
- or croak "$self is not an object";
-
- my $name = $AUTOLOAD;
- $name =~ s/.*://; # strip fully-qualified portion
-
- unless (exists $self->{_permitted}->{$name} ) {
- croak "Can't access `$name' field in class $type";
- }
-
- if (@_) {
- return $self->{$name} = shift;
- } else {
- return $self->{$name};
- }
- }
-
-Pretty nifty, eh? All we have to do to add new data fields
-is modify %fields. No new functions need be written.
-
-I could have avoided the C<_permitted> field entirely, but I
-wanted to demonstrate how to store a reference to class data on the
-object so you wouldn't have to access that class data
-directly from an object method.
-
-=head2 Inherited Autoloaded Data Methods
-
-But what about inheritance? Can we define our Employee
-class similarly? Yes, so long as we're careful enough.
-
-Here's how to be careful:
-
- package Employee;
- use Person;
- use strict;
- our @ISA = qw(Person);
-
- my %fields = (
- id => undef,
- salary => undef,
- );
-
- sub new {
- my $that = shift;
- my $class = ref($that) || $that;
- my $self = bless $that->SUPER::new(), $class;
- my($element);
- foreach $element (keys %fields) {
- $self->{_permitted}->{$element} = $fields{$element};
- }
- @{$self}{keys %fields} = values %fields;
- return $self;
- }
-
-Once we've done this, we don't even need to have an
-AUTOLOAD function in the Employee package, because
-we'll grab Person's version of that via inheritance,
-and it will all work out just fine.
-
-=head1 Metaclassical Tools
-
-Even though proxy methods can provide a more convenient approach to making
-more struct-like classes than tediously coding up data methods as
-functions, it still leaves a bit to be desired. For one thing, it means
-you have to handle bogus calls that you don't mean to trap via your proxy.
-It also means you have to be quite careful when dealing with inheritance,
-as detailed above.
-
-Perl programmers have responded to this by creating several different
-class construction classes. These metaclasses are classes
-that create other classes. A couple worth looking at are
-Class::Struct and Alias. These and other related metaclasses can be
-found in the modules directory on CPAN.
-
-=head2 Class::Struct
-
-One of the older ones is Class::Struct. In fact, its syntax and
-interface were sketched out long before perl5 even solidified into a
-real thing. What it does is provide you a way to "declare" a class
-as having objects whose fields are of a specific type. The function
-that does this is called, not surprisingly enough, struct(). Because
-structures or records are not base types in Perl, each time you want to
-create a class to provide a record-like data object, you yourself have
-to define a new() method, plus separate data-access methods for each of
-that record's fields. You'll quickly become bored with this process.
-The Class::Struct::struct() function alleviates this tedium.
-
-Here's a simple example of using it:
-
- use Class::Struct qw(struct);
- use Jobbie; # user-defined; see below
-
- struct 'Fred' => {
- one => '$',
- many => '@',
- profession => Jobbie, # calls Jobbie->new()
- };
-
- $ob = Fred->new;
- $ob->one("hmmmm");
-
- $ob->many(0, "here");
- $ob->many(1, "you");
- $ob->many(2, "go");
- print "Just set: ", $ob->many(2), "\n";
-
- $ob->profession->salary(10_000);
-
-You can declare types in the struct to be basic Perl types, or
-user-defined types (classes). User types will be initialized by calling
-that class's new() method.
-
-Here's a real-world example of using struct generation. Let's say you
-wanted to override Perl's idea of gethostbyname() and gethostbyaddr() so
-that they would return objects that acted like C structures. We don't
-care about high-falutin' OO gunk. All we want is for these objects to
-act like structs in the C sense.
-
- use Socket;
- use Net::hostent;
- $h = gethostbyname("perl.com"); # object return
- printf "perl.com's real name is %s, address %s\n",
- $h->name, inet_ntoa($h->addr);
-
-Here's how to do this using the Class::Struct module.
-The crux is going to be this call:
-
- struct 'Net::hostent' => [ # note bracket
- name => '$',
- aliases => '@',
- addrtype => '$',
- 'length' => '$',
- addr_list => '@',
- ];
-
-Which creates object methods of those names and types.
-It even creates a new() method for us.
-
-We could also have implemented our object this way:
-
- struct 'Net::hostent' => { # note brace
- name => '$',
- aliases => '@',
- addrtype => '$',
- 'length' => '$',
- addr_list => '@',
- };
-
-and then Class::Struct would have used an anonymous hash as the object
-type, instead of an anonymous array. The array is faster and smaller,
-but the hash works out better if you eventually want to do inheritance.
-Since for this struct-like object we aren't planning on inheritance,
-this time we'll opt for better speed and size over better flexibility.
-
-Here's the whole implementation:
-
- package Net::hostent;
- use strict;
-
- BEGIN {
- use Exporter ();
- our @EXPORT = qw(gethostbyname gethostbyaddr gethost);
- our @EXPORT_OK = qw(
- $h_name @h_aliases
- $h_addrtype $h_length
- @h_addr_list $h_addr
- );
- our %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
- }
- our @EXPORT_OK;
-
- # Class::Struct forbids use of @ISA
- sub import { goto &Exporter::import }
-
- use Class::Struct qw(struct);
- struct 'Net::hostent' => [
- name => '$',
- aliases => '@',
- addrtype => '$',
- 'length' => '$',
- addr_list => '@',
- ];
-
- sub addr { shift->addr_list->[0] }
-
- sub populate (@) {
- return unless @_;
- my $hob = new(); # Class::Struct made this!
- $h_name = $hob->[0] = $_[0];
- @h_aliases = @{ $hob->[1] } = split ' ', $_[1];
- $h_addrtype = $hob->[2] = $_[2];
- $h_length = $hob->[3] = $_[3];
- $h_addr = $_[4];
- @h_addr_list = @{ $hob->[4] } = @_[ (4 .. $#_) ];
- return $hob;
- }
-
- sub gethostbyname ($) { populate(CORE::gethostbyname(shift)) }
-
- sub gethostbyaddr ($;$) {
- my ($addr, $addrtype);
- $addr = shift;
- require Socket unless @_;
- $addrtype = @_ ? shift : Socket::AF_INET();
- populate(CORE::gethostbyaddr($addr, $addrtype))
- }
-
- sub gethost($) {
- if ($_[0] =~ /^\d+(?:\.\d+(?:\.\d+(?:\.\d+)?)?)?$/) {
- require Socket;
- &gethostbyaddr(Socket::inet_aton(shift));
- } else {
- &gethostbyname;
- }
- }
-
- 1;
-
-We've snuck in quite a fair bit of other concepts besides just dynamic
-class creation, like overriding core functions, import/export bits,
-function prototyping, short-cut function call via C<&whatever>, and
-function replacement with C<goto &whatever>. These all mostly make
-sense from the perspective of a traditional module, but as you can see,
-we can also use them in an object module.
-
-You can look at other object-based, struct-like overrides of core
-functions in the 5.004 release of Perl in File::stat, Net::hostent,
-Net::netent, Net::protoent, Net::servent, Time::gmtime, Time::localtime,
-User::grent, and User::pwent. These modules have a final component
-that's all lowercase, by convention reserved for compiler pragmas,
-because they affect the compilation and change a builtin function.
-They also have the type names that a C programmer would most expect.
-
-=head2 Data Members as Variables
-
-If you're used to C++ objects, then you're accustomed to being able to
-get at an object's data members as simple variables from within a method.
-The Alias module provides for this, as well as a good bit more, such
-as the possibility of private methods that the object can call but folks
-outside the class cannot.
-
-Here's an example of creating a Person using the Alias module.
-When you update these magical instance variables, you automatically
-update value fields in the hash. Convenient, eh?
-
- package Person;
-
- # this is the same as before...
- sub new {
- my $that = shift;
- my $class = ref($that) || $that;
- my $self = {
- NAME => undef,
- AGE => undef,
- PEERS => [],
- };
- bless($self, $class);
- return $self;
- }
-
- use Alias qw(attr);
- our ($NAME, $AGE, $PEERS);
-
- sub name {
- my $self = attr shift;
- if (@_) { $NAME = shift; }
- return $NAME;
- }
-
- sub age {
- my $self = attr shift;
- if (@_) { $AGE = shift; }
- return $AGE;
- }
-
- sub peers {
- my $self = attr shift;
- if (@_) { @PEERS = @_; }
- return @PEERS;
- }
-
- sub exclaim {
- my $self = attr shift;
- return sprintf "Hi, I'm %s, age %d, working with %s",
- $NAME, $AGE, join(", ", @PEERS);
- }
-
- sub happy_birthday {
- my $self = attr shift;
- return ++$AGE;
- }
-
-The need for the C<our> declaration is because what Alias does
-is play with package globals with the same name as the fields. To use
-globals while C<use strict> is in effect, you have to predeclare them.
-These package variables are localized to the block enclosing the attr()
-call just as if you'd used a local() on them. However, that means that
-they're still considered global variables with temporary values, just
-as with any other local().
-
-It would be nice to combine Alias with
-something like Class::Struct or Class::MethodMaker.
-
-=head1 NOTES
-
-=head2 Object Terminology
-
-In the various OO literature, it seems that a lot of different words
-are used to describe only a few different concepts. If you're not
-already an object programmer, then you don't need to worry about all
-these fancy words. But if you are, then you might like to know how to
-get at the same concepts in Perl.
-
-For example, it's common to call an object an I<instance> of a class
-and to call those objects' methods I<instance methods>. Data fields
-peculiar to each object are often called I<instance data> or I<object
-attributes>, and data fields common to all members of that class are
-I<class data>, I<class attributes>, or I<static data members>.
-
-Also, I<base class>, I<generic class>, and I<superclass> all describe
-the same notion, whereas I<derived class>, I<specific class>, and
-I<subclass> describe the other related one.
-
-C++ programmers have I<static methods> and I<virtual methods>,
-but Perl only has I<class methods> and I<object methods>.
-Actually, Perl only has methods. Whether a method gets used
-as a class or object method is by usage only. You could accidentally
-call a class method (one expecting a string argument) on an
-object (one expecting a reference), or vice versa.
-
-From the C++ perspective, all methods in Perl are virtual.
-This, by the way, is why they are never checked for function
-prototypes in the argument list as regular builtin and user-defined
-functions can be.
-
-Because a class is itself something of an object, Perl's classes can be
-taken as describing both a "class as meta-object" (also called I<object
-factory>) philosophy and the "class as type definition" (I<declaring>
-behaviour, not I<defining> mechanism) idea. C++ supports the latter
-notion, but not the former.
-
-=head1 SEE ALSO
-
-The following manpages will doubtless provide more
-background for this one:
-L<perlmod>,
-L<perlref>,
-L<perlobj>,
-L<perlbot>,
-L<perltie>,
-and
-L<overload>.
-
-L<perlboot> is a kinder, gentler introduction to object-oriented
-programming.
-
-L<perltootc> provides more detail on class data.
-
-Some modules which might prove interesting are Class::Accessor,
-Class::Class, Class::Contract, Class::Data::Inheritable,
-Class::MethodMaker and Tie::SecureHash
-
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1997, 1998 Tom Christiansen
-All rights reserved.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work
-may be distributed only under the terms of Perl's Artistic License.
-Any distribution of this file or derivatives thereof I<outside>
-of that package require that special arrangements be made with
-copyright holder.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
-
-=head1 COPYRIGHT
-
-=head2 Acknowledgments
-
-Thanks to
-Larry Wall,
-Roderick Schertler,
-Gurusamy Sarathy,
-Dean Roehrich,
-Raphael Manfredi,
-Brent Halsey,
-Greg Bacon,
-Brad Appleton,
-and many others for their helpful comments.
diff --git a/contrib/perl5/pod/perltootc.pod b/contrib/perl5/pod/perltootc.pod
deleted file mode 100644
index d2d881c..0000000
--- a/contrib/perl5/pod/perltootc.pod
+++ /dev/null
@@ -1,1347 +0,0 @@
-=head1 NAME
-
-perltootc - Tom's OO Tutorial for Class Data in Perl
-
-=head1 DESCRIPTION
-
-When designing an object class, you are sometimes faced with the situation
-of wanting common state shared by all objects of that class.
-Such I<class attributes> act somewhat like global variables for the entire
-class, but unlike program-wide globals, class attributes have meaning only to
-the class itself.
-
-Here are a few examples where class attributes might come in handy:
-
-=over 4
-
-=item *
-
-to keep a count of the objects you've created, or how many are
-still extant.
-
-=item *
-
-to extract the name or file descriptor for a logfile used by a debugging
-method.
-
-=item *
-
-to access collective data, like the total amount of cash dispensed by
-all ATMs in a network in a given day.
-
-=item *
-
-to access the last object created by a class, or the most accessed object,
-or to retrieve a list of all objects.
-
-=back
-
-Unlike a true global, class attributes should not be accessed directly.
-Instead, their state should be inspected, and perhaps altered, only
-through the mediated access of I<class methods>. These class attributes
-accessor methods are similar in spirit and function to accessors used
-to manipulate the state of instance attributes on an object. They provide a
-clear firewall between interface and implementation.
-
-You should allow access to class attributes through either the class
-name or any object of that class. If we assume that $an_object is of
-type Some_Class, and the &Some_Class::population_count method accesses
-class attributes, then these two invocations should both be possible,
-and almost certainly equivalent.
-
- Some_Class->population_count()
- $an_object->population_count()
-
-The question is, where do you store the state which that method accesses?
-Unlike more restrictive languages like C++, where these are called
-static data members, Perl provides no syntactic mechanism to declare
-class attributes, any more than it provides a syntactic mechanism to
-declare instance attributes. Perl provides the developer with a broad
-set of powerful but flexible features that can be uniquely crafted to
-the particular demands of the situation.
-
-A class in Perl is typically implemented in a module. A module consists
-of two complementary feature sets: a package for interfacing with the
-outside world, and a lexical file scope for privacy. Either of these
-two mechanisms can be used to implement class attributes. That means you
-get to decide whether to put your class attributes in package variables
-or to put them in lexical variables.
-
-And those aren't the only decisions to make. If you choose to use package
-variables, you can make your class attribute accessor methods either ignorant
-of inheritance or sensitive to it. If you choose lexical variables,
-you can elect to permit access to them from anywhere in the entire file
-scope, or you can limit direct data access exclusively to the methods
-implementing those attributes.
-
-=head1 Class Data in a Can
-
-One of the easiest ways to solve a hard problem is to let someone else
-do it for you! In this case, Class::Data::Inheritable (available on a
-CPAN near you) offers a canned solution to the class data problem
-using closures. So before you wade into this document, consider
-having a look at that module.
-
-
-=head1 Class Data as Package Variables
-
-Because a class in Perl is really just a package, using package variables
-to hold class attributes is the most natural choice. This makes it simple
-for each class to have its own class attributes. Let's say you have a class
-called Some_Class that needs a couple of different attributes that you'd
-like to be global to the entire class. The simplest thing to do is to
-use package variables like $Some_Class::CData1 and $Some_Class::CData2
-to hold these attributes. But we certainly don't want to encourage
-outsiders to touch those data directly, so we provide methods
-to mediate access.
-
-In the accessor methods below, we'll for now just ignore the first
-argument--that part to the left of the arrow on method invocation, which
-is either a class name or an object reference.
-
- package Some_Class;
- sub CData1 {
- shift; # XXX: ignore calling class/object
- $Some_Class::CData1 = shift if @_;
- return $Some_Class::CData1;
- }
- sub CData2 {
- shift; # XXX: ignore calling class/object
- $Some_Class::CData2 = shift if @_;
- return $Some_Class::CData2;
- }
-
-This technique is highly legible and should be completely straightforward
-to even the novice Perl programmer. By fully qualifying the package
-variables, they stand out clearly when reading the code. Unfortunately,
-if you misspell one of these, you've introduced an error that's hard
-to catch. It's also somewhat disconcerting to see the class name itself
-hard-coded in so many places.
-
-Both these problems can be easily fixed. Just add the C<use strict>
-pragma, then pre-declare your package variables. (The C<our> operator
-will be new in 5.6, and will work for package globals just like C<my>
-works for scoped lexicals.)
-
- package Some_Class;
- use strict;
- our($CData1, $CData2); # our() is new to perl5.6
- sub CData1 {
- shift; # XXX: ignore calling class/object
- $CData1 = shift if @_;
- return $CData1;
- }
- sub CData2 {
- shift; # XXX: ignore calling class/object
- $CData2 = shift if @_;
- return $CData2;
- }
-
-
-As with any other global variable, some programmers prefer to start their
-package variables with capital letters. This helps clarity somewhat, but
-by no longer fully qualifying the package variables, their significance
-can be lost when reading the code. You can fix this easily enough by
-choosing better names than were used here.
-
-=head2 Putting All Your Eggs in One Basket
-
-Just as the mindless enumeration of accessor methods for instance attributes
-grows tedious after the first few (see L<perltoot>), so too does the
-repetition begin to grate when listing out accessor methods for class
-data. Repetition runs counter to the primary virtue of a programmer:
-Laziness, here manifesting as that innate urge every programmer feels
-to factor out duplicate code whenever possible.
-
-Here's what to do. First, make just one hash to hold all class attributes.
-
- package Some_Class;
- use strict;
- our %ClassData = ( # our() is new to perl5.6
- CData1 => "",
- CData2 => "",
- );
-
-Using closures (see L<perlref>) and direct access to the package symbol
-table (see L<perlmod>), now clone an accessor method for each key in
-the %ClassData hash. Each of these methods is used to fetch or store
-values to the specific, named class attribute.
-
- for my $datum (keys %ClassData) {
- no strict "refs"; # to register new methods in package
- *$datum = sub {
- shift; # XXX: ignore calling class/object
- $ClassData{$datum} = shift if @_;
- return $ClassData{$datum};
- }
- }
-
-It's true that you could work out a solution employing an &AUTOLOAD
-method, but this approach is unlikely to prove satisfactory. Your
-function would have to distinguish between class attributes and object
-attributes; it could interfere with inheritance; and it would have to
-careful about DESTROY. Such complexity is uncalled for in most cases,
-and certainly in this one.
-
-You may wonder why we're rescinding strict refs for the loop. We're
-manipulating the package's symbol table to introduce new function names
-using symbolic references (indirect naming), which the strict pragma
-would otherwise forbid. Normally, symbolic references are a dodgy
-notion at best. This isn't just because they can be used accidentally
-when you aren't meaning to. It's also because for most uses
-to which beginning Perl programmers attempt to put symbolic references,
-we have much better approaches, like nested hashes or hashes of arrays.
-But there's nothing wrong with using symbolic references to manipulate
-something that is meaningful only from the perspective of the package
-symbol table, like method names or package variables. In other
-words, when you want to refer to the symbol table, use symbol references.
-
-Clustering all the class attributes in one place has several advantages.
-They're easy to spot, initialize, and change. The aggregation also
-makes them convenient to access externally, such as from a debugger
-or a persistence package. The only possible problem is that we don't
-automatically know the name of each class's class object, should it have
-one. This issue is addressed below in L<"The Eponymous Meta-Object">.
-
-=head2 Inheritance Concerns
-
-Suppose you have an instance of a derived class, and you access class
-data using an inherited method call. Should that end up referring
-to the base class's attributes, or to those in the derived class?
-How would it work in the earlier examples? The derived class inherits
-all the base class's methods, including those that access class attributes.
-But what package are the class attributes stored in?
-
-The answer is that, as written, class attributes are stored in the package into
-which those methods were compiled. When you invoke the &CData1 method
-on the name of the derived class or on one of that class's objects, the
-version shown above is still run, so you'll access $Some_Class::CData1--or
-in the method cloning version, C<$Some_Class::ClassData{CData1}>.
-
-Think of these class methods as executing in the context of their base
-class, not in that of their derived class. Sometimes this is exactly
-what you want. If Feline subclasses Carnivore, then the population of
-Carnivores in the world should go up when a new Feline is born.
-But what if you wanted to figure out how many Felines you have apart
-from Carnivores? The current approach doesn't support that.
-
-You'll have to decide on a case-by-case basis whether it makes any sense
-for class attributes to be package-relative. If you want it to be so,
-then stop ignoring the first argument to the function. Either it will
-be a package name if the method was invoked directly on a class name,
-or else it will be an object reference if the method was invoked on an
-object reference. In the latter case, the ref() function provides the
-class of that object.
-
- package Some_Class;
- sub CData1 {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- my $varname = $class . "::CData1";
- no strict "refs"; # to access package data symbolically
- $$varname = shift if @_;
- return $$varname;
- }
-
-And then do likewise for all other class attributes (such as CData2,
-etc.) that you wish to access as package variables in the invoking package
-instead of the compiling package as we had previously.
-
-Once again we temporarily disable the strict references ban, because
-otherwise we couldn't use the fully-qualified symbolic name for
-the package global. This is perfectly reasonable: since all package
-variables by definition live in a package, there's nothing wrong with
-accessing them via that package's symbol table. That's what it's there
-for (well, somewhat).
-
-What about just using a single hash for everything and then cloning
-methods? What would that look like? The only difference would be the
-closure used to produce new method entries for the class's symbol table.
-
- no strict "refs";
- *$datum = sub {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- my $varname = $class . "::ClassData";
- $varname->{$datum} = shift if @_;
- return $varname->{$datum};
- }
-
-=head2 The Eponymous Meta-Object
-
-It could be argued that the %ClassData hash in the previous example is
-neither the most imaginative nor the most intuitive of names. Is there
-something else that might make more sense, be more useful, or both?
-
-As it happens, yes, there is. For the "class meta-object", we'll use
-a package variable of the same name as the package itself. Within the
-scope of a package Some_Class declaration, we'll use the eponymously
-named hash %Some_Class as that class's meta-object. (Using an eponymously
-named hash is somewhat reminiscent of classes that name their constructors
-eponymously in the Python or C++ fashion. That is, class Some_Class would
-use &Some_Class::Some_Class as a constructor, probably even exporting that
-name as well. The StrNum class in Recipe 13.14 in I<The Perl Cookbook>
-does this, if you're looking for an example.)
-
-This predictable approach has many benefits, including having a well-known
-identifier to aid in debugging, transparent persistence,
-or checkpointing. It's also the obvious name for monadic classes and
-translucent attributes, discussed later.
-
-Here's an example of such a class. Notice how the name of the
-hash storing the meta-object is the same as the name of the package
-used to implement the class.
-
- package Some_Class;
- use strict;
-
- # create class meta-object using that most perfect of names
- our %Some_Class = ( # our() is new to perl5.6
- CData1 => "",
- CData2 => "",
- );
-
- # this accessor is calling-package-relative
- sub CData1 {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- no strict "refs"; # to access eponymous meta-object
- $class->{CData1} = shift if @_;
- return $class->{CData1};
- }
-
- # but this accessor is not
- sub CData2 {
- shift; # XXX: ignore calling class/object
- no strict "refs"; # to access eponymous meta-object
- __PACKAGE__ -> {CData2} = shift if @_;
- return __PACKAGE__ -> {CData2};
- }
-
-In the second accessor method, the __PACKAGE__ notation was used for
-two reasons. First, to avoid hardcoding the literal package name
-in the code in case we later want to change that name. Second, to
-clarify to the reader that what matters here is the package currently
-being compiled into, not the package of the invoking object or class.
-If the long sequence of non-alphabetic characters bothers you, you can
-always put the __PACKAGE__ in a variable first.
-
- sub CData2 {
- shift; # XXX: ignore calling class/object
- no strict "refs"; # to access eponymous meta-object
- my $class = __PACKAGE__;
- $class->{CData2} = shift if @_;
- return $class->{CData2};
- }
-
-Even though we're using symbolic references for good not evil, some
-folks tend to become unnerved when they see so many places with strict
-ref checking disabled. Given a symbolic reference, you can always
-produce a real reference (the reverse is not true, though). So we'll
-create a subroutine that does this conversion for us. If invoked as a
-function of no arguments, it returns a reference to the compiling class's
-eponymous hash. Invoked as a class method, it returns a reference to
-the eponymous hash of its caller. And when invoked as an object method,
-this function returns a reference to the eponymous hash for whatever
-class the object belongs to.
-
- package Some_Class;
- use strict;
-
- our %Some_Class = ( # our() is new to perl5.6
- CData1 => "",
- CData2 => "",
- );
-
- # tri-natured: function, class method, or object method
- sub _classobj {
- my $obclass = shift || __PACKAGE__;
- my $class = ref($obclass) || $obclass;
- no strict "refs"; # to convert sym ref to real one
- return \%$class;
- }
-
- for my $datum (keys %{ _classobj() } ) {
- # turn off strict refs so that we can
- # register a method in the symbol table
- no strict "refs";
- *$datum = sub {
- use strict "refs";
- my $self = shift->_classobj();
- $self->{$datum} = shift if @_;
- return $self->{$datum};
- }
- }
-
-=head2 Indirect References to Class Data
-
-A reasonably common strategy for handling class attributes is to store
-a reference to each package variable on the object itself. This is
-a strategy you've probably seen before, such as in L<perltoot> and
-L<perlbot>, but there may be variations in the example below that you
-haven't thought of before.
-
- package Some_Class;
- our($CData1, $CData2); # our() is new to perl5.6
-
- sub new {
- my $obclass = shift;
- return bless my $self = {
- ObData1 => "",
- ObData2 => "",
- CData1 => \$CData1,
- CData2 => \$CData2,
- } => (ref $obclass || $obclass);
- }
-
- sub ObData1 {
- my $self = shift;
- $self->{ObData1} = shift if @_;
- return $self->{ObData1};
- }
-
- sub ObData2 {
- my $self = shift;
- $self->{ObData2} = shift if @_;
- return $self->{ObData2};
- }
-
- sub CData1 {
- my $self = shift;
- my $dataref = ref $self
- ? $self->{CData1}
- : \$CData1;
- $$dataref = shift if @_;
- return $$dataref;
- }
-
- sub CData2 {
- my $self = shift;
- my $dataref = ref $self
- ? $self->{CData2}
- : \$CData2;
- $$dataref = shift if @_;
- return $$dataref;
- }
-
-As written above, a derived class will inherit these methods, which
-will consequently access package variables in the base class's package.
-This is not necessarily expected behavior in all circumstances. Here's an
-example that uses a variable meta-object, taking care to access the
-proper package's data.
-
- package Some_Class;
- use strict;
-
- our %Some_Class = ( # our() is new to perl5.6
- CData1 => "",
- CData2 => "",
- );
-
- sub _classobj {
- my $self = shift;
- my $class = ref($self) || $self;
- no strict "refs";
- # get (hard) ref to eponymous meta-object
- return \%$class;
- }
-
- sub new {
- my $obclass = shift;
- my $classobj = $obclass->_classobj();
- bless my $self = {
- ObData1 => "",
- ObData2 => "",
- CData1 => \$classobj->{CData1},
- CData2 => \$classobj->{CData2},
- } => (ref $obclass || $obclass);
- return $self;
- }
-
- sub ObData1 {
- my $self = shift;
- $self->{ObData1} = shift if @_;
- return $self->{ObData1};
- }
-
- sub ObData2 {
- my $self = shift;
- $self->{ObData2} = shift if @_;
- return $self->{ObData2};
- }
-
- sub CData1 {
- my $self = shift;
- $self = $self->_classobj() unless ref $self;
- my $dataref = $self->{CData1};
- $$dataref = shift if @_;
- return $$dataref;
- }
-
- sub CData2 {
- my $self = shift;
- $self = $self->_classobj() unless ref $self;
- my $dataref = $self->{CData2};
- $$dataref = shift if @_;
- return $$dataref;
- }
-
-Not only are we now strict refs clean, using an eponymous meta-object
-seems to make the code cleaner. Unlike the previous version, this one
-does something interesting in the face of inheritance: it accesses the
-class meta-object in the invoking class instead of the one into which
-the method was initially compiled.
-
-You can easily access data in the class meta-object, making
-it easy to dump the complete class state using an external mechanism such
-as when debugging or implementing a persistent class. This works because
-the class meta-object is a package variable, has a well-known name, and
-clusters all its data together. (Transparent persistence
-is not always feasible, but it's certainly an appealing idea.)
-
-There's still no check that object accessor methods have not been
-invoked on a class name. If strict ref checking is enabled, you'd
-blow up. If not, then you get the eponymous meta-object. What you do
-with--or about--this is up to you. The next two sections demonstrate
-innovative uses for this powerful feature.
-
-=head2 Monadic Classes
-
-Some of the standard modules shipped with Perl provide class interfaces
-without any attribute methods whatsoever. The most commonly used module
-not numbered amongst the pragmata, the Exporter module, is a class with
-neither constructors nor attributes. Its job is simply to provide a
-standard interface for modules wishing to export part of their namespace
-into that of their caller. Modules use the Exporter's &import method by
-setting their inheritance list in their package's @ISA array to mention
-"Exporter". But class Exporter provides no constructor, so you can't
-have several instances of the class. In fact, you can't have any--it
-just doesn't make any sense. All you get is its methods. Its interface
-contains no statefulness, so state data is wholly superfluous.
-
-Another sort of class that pops up from time to time is one that supports
-a unique instance. Such classes are called I<monadic classes>, or less
-formally, I<singletons> or I<highlander classes>.
-
-If a class is monadic, where do you store its state, that is,
-its attributes? How do you make sure that there's never more than
-one instance? While you could merely use a slew of package variables,
-it's a lot cleaner to use the eponymously named hash. Here's a complete
-example of a monadic class:
-
- package Cosmos;
- %Cosmos = ();
-
- # accessor method for "name" attribute
- sub name {
- my $self = shift;
- $self->{name} = shift if @_;
- return $self->{name};
- }
-
- # read-only accessor method for "birthday" attribute
- sub birthday {
- my $self = shift;
- die "can't reset birthday" if @_; # XXX: croak() is better
- return $self->{birthday};
- }
-
- # accessor method for "stars" attribute
- sub stars {
- my $self = shift;
- $self->{stars} = shift if @_;
- return $self->{stars};
- }
-
- # oh my - one of our stars just went out!
- sub supernova {
- my $self = shift;
- my $count = $self->stars();
- $self->stars($count - 1) if $count > 0;
- }
-
- # constructor/initializer method - fix by reboot
- sub bigbang {
- my $self = shift;
- %$self = (
- name => "the world according to tchrist",
- birthday => time(),
- stars => 0,
- );
- return $self; # yes, it's probably a class. SURPRISE!
- }
-
- # After the class is compiled, but before any use or require
- # returns, we start off the universe with a bang.
- __PACKAGE__ -> bigbang();
-
-Hold on, that doesn't look like anything special. Those attribute
-accessors look no different than they would if this were a regular class
-instead of a monadic one. The crux of the matter is there's nothing
-that says that $self must hold a reference to a blessed object. It merely
-has to be something you can invoke methods on. Here the package name
-itself, Cosmos, works as an object. Look at the &supernova method. Is that
-a class method or an object method? The answer is that static analysis
-cannot reveal the answer. Perl doesn't care, and neither should you.
-In the three attribute methods, C<%$self> is really accessing the %Cosmos
-package variable.
-
-If like Stephen Hawking, you posit the existence of multiple, sequential,
-and unrelated universes, then you can invoke the &bigbang method yourself
-at any time to start everything all over again. You might think of
-&bigbang as more of an initializer than a constructor, since the function
-doesn't allocate new memory; it only initializes what's already there.
-But like any other constructor, it does return a scalar value to use
-for later method invocations.
-
-Imagine that some day in the future, you decide that one universe just
-isn't enough. You could write a new class from scratch, but you already
-have an existing class that does what you want--except that it's monadic,
-and you want more than just one cosmos.
-
-That's what code reuse via subclassing is all about. Look how short
-the new code is:
-
- package Multiverse;
- use Cosmos;
- @ISA = qw(Cosmos);
-
- sub new {
- my $protoverse = shift;
- my $class = ref($protoverse) || $protoverse;
- my $self = {};
- return bless($self, $class)->bigbang();
- }
- 1;
-
-Because we were careful to be good little creators when we designed our
-Cosmos class, we can now reuse it without touching a single line of code
-when it comes time to write our Multiverse class. The same code that
-worked when invoked as a class method continues to work perfectly well
-when invoked against separate instances of a derived class.
-
-The astonishing thing about the Cosmos class above is that the value
-returned by the &bigbang "constructor" is not a reference to a blessed
-object at all. It's just the class's own name. A class name is, for
-virtually all intents and purposes, a perfectly acceptable object.
-It has state, behavior, and identify, the three crucial components
-of an object system. It even manifests inheritance, polymorphism,
-and encapsulation. And what more can you ask of an object?
-
-To understand object orientation in Perl, it's important to recognize the
-unification of what other programming languages might think of as class
-methods and object methods into just plain methods. "Class methods"
-and "object methods" are distinct only in the compartmentalizing mind
-of the Perl programmer, not in the Perl language itself.
-
-Along those same lines, a constructor is nothing special either, which
-is one reason why Perl has no pre-ordained name for them. "Constructor"
-is just an informal term loosely used to describe a method that returns
-a scalar value that you can make further method calls against. So long
-as it's either a class name or an object reference, that's good enough.
-It doesn't even have to be a reference to a brand new object.
-
-You can have as many--or as few--constructors as you want, and you can
-name them whatever you care to. Blindly and obediently using new()
-for each and every constructor you ever write is to speak Perl with
-such a severe C++ accent that you do a disservice to both languages.
-There's no reason to insist that each class have but one constructor,
-or that that constructor be named new(), or that that constructor be
-used solely as a class method and not an object method.
-
-The next section shows how useful it can be to further distance ourselves
-from any formal distinction between class method calls and object method
-calls, both in constructors and in accessor methods.
-
-=head2 Translucent Attributes
-
-A package's eponymous hash can be used for more than just containing
-per-class, global state data. It can also serve as a sort of template
-containing default settings for object attributes. These default
-settings can then be used in constructors for initialization of a
-particular object. The class's eponymous hash can also be used to
-implement I<translucent attributes>. A translucent attribute is one
-that has a class-wide default. Each object can set its own value for the
-attribute, in which case C<< $object->attribute() >> returns that value.
-But if no value has been set, then C<< $object->attribute() >> returns
-the class-wide default.
-
-We'll apply something of a copy-on-write approach to these translucent
-attributes. If you're just fetching values from them, you get
-translucency. But if you store a new value to them, that new value is
-set on the current object. On the other hand, if you use the class as
-an object and store the attribute value directly on the class, then the
-meta-object's value changes, and later fetch operations on objects with
-uninitialized values for those attributes will retrieve the meta-object's
-new values. Objects with their own initialized values, however, won't
-see any change.
-
-Let's look at some concrete examples of using these properties before we
-show how to implement them. Suppose that a class named Some_Class
-had a translucent data attribute called "color". First you set the color
-in the meta-object, then you create three objects using a constructor
-that happens to be named &spawn.
-
- use Vermin;
- Vermin->color("vermilion");
-
- $ob1 = Vermin->spawn(); # so that's where Jedi come from
- $ob2 = Vermin->spawn();
- $ob3 = Vermin->spawn();
-
- print $obj3->color(); # prints "vermilion"
-
-Each of these objects' colors is now "vermilion", because that's the
-meta-object's value that attribute, and these objects do not have
-individual color values set.
-
-Changing the attribute on one object has no effect on other objects
-previously created.
-
- $ob3->color("chartreuse");
- print $ob3->color(); # prints "chartreuse"
- print $ob1->color(); # prints "vermilion", translucently
-
-If you now use $ob3 to spawn off another object, the new object will
-take the color its parent held, which now happens to be "chartreuse".
-That's because the constructor uses the invoking object as its template
-for initializing attributes. When that invoking object is the
-class name, the object used as a template is the eponymous meta-object.
-When the invoking object is a reference to an instantiated object, the
-&spawn constructor uses that existing object as a template.
-
- $ob4 = $ob3->spawn(); # $ob3 now template, not %Vermin
- print $ob4->color(); # prints "chartreuse"
-
-Any actual values set on the template object will be copied to the
-new object. But attributes undefined in the template object, being
-translucent, will remain undefined and consequently translucent in the
-new one as well.
-
-Now let's change the color attribute on the entire class:
-
- Vermin->color("azure");
- print $ob1->color(); # prints "azure"
- print $ob2->color(); # prints "azure"
- print $ob3->color(); # prints "chartreuse"
- print $ob4->color(); # prints "chartreuse"
-
-That color change took effect only in the first pair of objects, which
-were still translucently accessing the meta-object's values. The second
-pair had per-object initialized colors, and so didn't change.
-
-One important question remains. Changes to the meta-object are reflected
-in translucent attributes in the entire class, but what about
-changes to discrete objects? If you change the color of $ob3, does the
-value of $ob4 see that change? Or vice-versa. If you change the color
-of $ob4, does then the value of $ob3 shift?
-
- $ob3->color("amethyst");
- print $ob3->color(); # prints "amethyst"
- print $ob4->color(); # hmm: "chartreuse" or "amethyst"?
-
-While one could argue that in certain rare cases it should, let's not
-do that. Good taste aside, we want the answer to the question posed in
-the comment above to be "chartreuse", not "amethyst". So we'll treat
-these attributes similar to the way process attributes like environment
-variables, user and group IDs, or the current working directory are
-treated across a fork(). You can change only yourself, but you will see
-those changes reflected in your unspawned children. Changes to one object
-will propagate neither up to the parent nor down to any existing child objects.
-Those objects made later, however, will see the changes.
-
-If you have an object with an actual attribute value, and you want to
-make that object's attribute value translucent again, what do you do?
-Let's design the class so that when you invoke an accessor method with
-C<undef> as its argument, that attribute returns to translucency.
-
- $ob4->color(undef); # back to "azure"
-
-Here's a complete implementation of Vermin as described above.
-
- package Vermin;
-
- # here's the class meta-object, eponymously named.
- # it holds all class attributes, and also all instance attributes
- # so the latter can be used for both initialization
- # and translucency.
-
- our %Vermin = ( # our() is new to perl5.6
- PopCount => 0, # capital for class attributes
- color => "beige", # small for instance attributes
- );
-
- # constructor method
- # invoked as class method or object method
- sub spawn {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- my $self = {};
- bless($self, $class);
- $class->{PopCount}++;
- # init fields from invoking object, or omit if
- # invoking object is the class to provide translucency
- %$self = %$obclass if ref $obclass;
- return $self;
- }
-
- # translucent accessor for "color" attribute
- # invoked as class method or object method
- sub color {
- my $self = shift;
- my $class = ref($self) || $self;
-
- # handle class invocation
- unless (ref $self) {
- $class->{color} = shift if @_;
- return $class->{color}
- }
-
- # handle object invocation
- $self->{color} = shift if @_;
- if (defined $self->{color}) { # not exists!
- return $self->{color};
- } else {
- return $class->{color};
- }
- }
-
- # accessor for "PopCount" class attribute
- # invoked as class method or object method
- # but uses object solely to locate meta-object
- sub population {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- return $class->{PopCount};
- }
-
- # instance destructor
- # invoked only as object method
- sub DESTROY {
- my $self = shift;
- my $class = ref $self;
- $class->{PopCount}--;
- }
-
-Here are a couple of helper methods that might be convenient. They aren't
-accessor methods at all. They're used to detect accessibility of data
-attributes. The &is_translucent method determines whether a particular
-object attribute is coming from the meta-object. The &has_attribute
-method detects whether a class implements a particular property at all.
-It could also be used to distinguish undefined properties from non-existent
-ones.
-
- # detect whether an object attribute is translucent
- # (typically?) invoked only as object method
- sub is_translucent {
- my($self, $attr) = @_;
- return !defined $self->{$attr};
- }
-
- # test for presence of attribute in class
- # invoked as class method or object method
- sub has_attribute {
- my($self, $attr) = @_;
- my $class = ref $self if $self;
- return exists $class->{$attr};
- }
-
-If you prefer to install your accessors more generically, you can make
-use of the upper-case versus lower-case convention to register into the
-package appropriate methods cloned from generic closures.
-
- for my $datum (keys %{ +__PACKAGE__ }) {
- *$datum = ($datum =~ /^[A-Z]/)
- ? sub { # install class accessor
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- return $class->{$datum};
- }
- : sub { # install translucent accessor
- my $self = shift;
- my $class = ref($self) || $self;
- unless (ref $self) {
- $class->{$datum} = shift if @_;
- return $class->{$datum}
- }
- $self->{$datum} = shift if @_;
- return defined $self->{$datum}
- ? $self -> {$datum}
- : $class -> {$datum}
- }
- }
-
-Translations of this closure-based approach into C++, Java, and Python
-have been left as exercises for the reader. Be sure to send us mail as
-soon as you're done.
-
-=head1 Class Data as Lexical Variables
-
-=head2 Privacy and Responsibility
-
-Unlike conventions used by some Perl programmers, in the previous
-examples, we didn't prefix the package variables used for class attributes
-with an underscore, nor did we do so for the names of the hash keys used
-for instance attributes. You don't need little markers on data names to
-suggest nominal privacy on attribute variables or hash keys, because these
-are B<already> notionally private! Outsiders have no business whatsoever
-playing with anything within a class save through the mediated access of
-its documented interface; in other words, through method invocations.
-And not even through just any method, either. Methods that begin with
-an underscore are traditionally considered off-limits outside the class.
-If outsiders skip the documented method interface to poke around the
-internals of your class and end up breaking something, that's not your
-fault--it's theirs.
-
-Perl believes in individual responsibility rather than mandated control.
-Perl respects you enough to let you choose your own preferred level of
-pain, or of pleasure. Perl believes that you are creative, intelligent,
-and capable of making your own decisions--and fully expects you to
-take complete responsibility for your own actions. In a perfect world,
-these admonitions alone would suffice, and everyone would be intelligent,
-responsible, happy, and creative. And careful. One probably shouldn't
-forget careful, and that's a good bit harder to expect. Even Einstein
-would take wrong turns by accident and end up lost in the wrong part
-of town.
-
-Some folks get the heebie-jeebies when they see package variables
-hanging out there for anyone to reach over and alter them. Some folks
-live in constant fear that someone somewhere might do something wicked.
-The solution to that problem is simply to fire the wicked, of course.
-But unfortunately, it's not as simple as all that. These cautious
-types are also afraid that they or others will do something not so
-much wicked as careless, whether by accident or out of desperation.
-If we fire everyone who ever gets careless, pretty soon there won't be
-anybody left to get any work done.
-
-Whether it's needless paranoia or sensible caution, this uneasiness can
-be a problem for some people. We can take the edge off their discomfort
-by providing the option of storing class attributes as lexical variables
-instead of as package variables. The my() operator is the source of
-all privacy in Perl, and it is a powerful form of privacy indeed.
-
-It is widely perceived, and indeed has often been written, that Perl
-provides no data hiding, that it affords the class designer no privacy
-nor isolation, merely a rag-tag assortment of weak and unenforcible
-social conventions instead. This perception is demonstrably false and
-easily disproven. In the next section, we show how to implement forms
-of privacy that are far stronger than those provided in nearly any
-other object-oriented language.
-
-=head2 File-Scoped Lexicals
-
-A lexical variable is visible only through the end of its static scope.
-That means that the only code able to access that variable is code
-residing textually below the my() operator through the end of its block
-if it has one, or through the end of the current file if it doesn't.
-
-Starting again with our simplest example given at the start of this
-document, we replace our() variables with my() versions.
-
- package Some_Class;
- my($CData1, $CData2); # file scope, not in any package
- sub CData1 {
- shift; # XXX: ignore calling class/object
- $CData1 = shift if @_;
- return $CData1;
- }
- sub CData2 {
- shift; # XXX: ignore calling class/object
- $CData2 = shift if @_;
- return $CData2;
- }
-
-So much for that old $Some_Class::CData1 package variable and its brethren!
-Those are gone now, replaced with lexicals. No one outside the
-scope can reach in and alter the class state without resorting to the
-documented interface. Not even subclasses or superclasses of
-this one have unmediated access to $CData1. They have to invoke the &CData1
-method against Some_Class or an instance thereof, just like anybody else.
-
-To be scrupulously honest, that last statement assumes you haven't packed
-several classes together into the same file scope, nor strewn your class
-implementation across several different files. Accessibility of those
-variables is based uniquely on the static file scope. It has nothing to
-do with the package. That means that code in a different file but
-the same package (class) could not access those variables, yet code in the
-same file but a different package (class) could. There are sound reasons
-why we usually suggest a one-to-one mapping between files and packages
-and modules and classes. You don't have to stick to this suggestion if
-you really know what you're doing, but you're apt to confuse yourself
-otherwise, especially at first.
-
-If you'd like to aggregate your class attributes into one lexically scoped,
-composite structure, you're perfectly free to do so.
-
- package Some_Class;
- my %ClassData = (
- CData1 => "",
- CData2 => "",
- );
- sub CData1 {
- shift; # XXX: ignore calling class/object
- $ClassData{CData1} = shift if @_;
- return $ClassData{CData1};
- }
- sub CData2 {
- shift; # XXX: ignore calling class/object
- $ClassData{CData2} = shift if @_;
- return $ClassData{CData2};
- }
-
-To make this more scalable as other class attributes are added, we can
-again register closures into the package symbol table to create accessor
-methods for them.
-
- package Some_Class;
- my %ClassData = (
- CData1 => "",
- CData2 => "",
- );
- for my $datum (keys %ClassData) {
- no strict "refs";
- *$datum = sub {
- shift; # XXX: ignore calling class/object
- $ClassData{$datum} = shift if @_;
- return $ClassData{$datum};
- };
- }
-
-Requiring even your own class to use accessor methods like anybody else is
-probably a good thing. But demanding and expecting that everyone else,
-be they subclass or superclass, friend or foe, will all come to your
-object through mediation is more than just a good idea. It's absolutely
-critical to the model. Let there be in your mind no such thing as
-"public" data, nor even "protected" data, which is a seductive but
-ultimately destructive notion. Both will come back to bite at you.
-That's because as soon as you take that first step out of the solid
-position in which all state is considered completely private, save from the
-perspective of its own accessor methods, you have violated the envelope.
-And, having pierced that encapsulating envelope, you shall doubtless
-someday pay the price when future changes in the implementation break
-unrelated code. Considering that avoiding this infelicitous outcome was
-precisely why you consented to suffer the slings and arrows of obsequious
-abstraction by turning to object orientation in the first place, such
-breakage seems unfortunate in the extreme.
-
-=head2 More Inheritance Concerns
-
-Suppose that Some_Class were used as a base class from which to derive
-Another_Class. If you invoke a &CData method on the derived class or
-on an object of that class, what do you get? Would the derived class
-have its own state, or would it piggyback on its base class's versions
-of the class attributes?
-
-The answer is that under the scheme outlined above, the derived class
-would B<not> have its own state data. As before, whether you consider
-this a good thing or a bad one depends on the semantics of the classes
-involved.
-
-The cleanest, sanest, simplest way to address per-class state in a
-lexical is for the derived class to override its base class's version
-of the method that accesses the class attributes. Since the actual method
-called is the one in the object's derived class if this exists, you
-automatically get per-class state this way. Any urge to provide an
-unadvertised method to sneak out a reference to the %ClassData hash
-should be strenuously resisted.
-
-As with any other overridden method, the implementation in the
-derived class always has the option of invoking its base class's
-version of the method in addition to its own. Here's an example:
-
- package Another_Class;
- @ISA = qw(Some_Class);
-
- my %ClassData = (
- CData1 => "",
- );
-
- sub CData1 {
- my($self, $newvalue) = @_;
- if (@_ > 1) {
- # set locally first
- $ClassData{CData1} = $newvalue;
-
- # then pass the buck up to the first
- # overridden version, if there is one
- if ($self->can("SUPER::CData1")) {
- $self->SUPER::CData1($newvalue);
- }
- }
- return $ClassData{CData1};
- }
-
-Those dabbling in multiple inheritance might be concerned
-about there being more than one override.
-
- for my $parent (@ISA) {
- my $methname = $parent . "::CData1";
- if ($self->can($methname)) {
- $self->$methname($newvalue);
- }
- }
-
-Because the &UNIVERSAL::can method returns a reference
-to the function directly, you can use this directly
-for a significant performance improvement:
-
- for my $parent (@ISA) {
- if (my $coderef = $self->can($parent . "::CData1")) {
- $self->$coderef($newvalue);
- }
- }
-
-=head2 Locking the Door and Throwing Away the Key
-
-As currently implemented, any code within the same scope as the
-file-scoped lexical %ClassData can alter that hash directly. Is that
-ok? Is it acceptable or even desirable to allow other parts of the
-implementation of this class to access class attributes directly?
-
-That depends on how careful you want to be. Think back to the Cosmos
-class. If the &supernova method had directly altered $Cosmos::Stars or
-C<$Cosmos::Cosmos{stars}>, then we wouldn't have been able to reuse the
-class when it came to inventing a Multiverse. So letting even the class
-itself access its own class attributes without the mediating intervention of
-properly designed accessor methods is probably not a good idea after all.
-
-Restricting access to class attributes from the class itself is usually
-not enforcible even in strongly object-oriented languages. But in Perl,
-you can.
-
-Here's one way:
-
- package Some_Class;
-
- { # scope for hiding $CData1
- my $CData1;
- sub CData1 {
- shift; # XXX: unused
- $CData1 = shift if @_;
- return $CData1;
- }
- }
-
- { # scope for hiding $CData2
- my $CData2;
- sub CData2 {
- shift; # XXX: unused
- $CData2 = shift if @_;
- return $CData2;
- }
- }
-
-No one--absolutely no one--is allowed to read or write the class
-attributes without the mediation of the managing accessor method, since
-only that method has access to the lexical variable it's managing.
-This use of mediated access to class attributes is a form of privacy far
-stronger than most OO languages provide.
-
-The repetition of code used to create per-datum accessor methods chafes
-at our Laziness, so we'll again use closures to create similar
-methods.
-
- package Some_Class;
-
- { # scope for ultra-private meta-object for class attributes
- my %ClassData = (
- CData1 => "",
- CData2 => "",
- );
-
- for my $datum (keys %ClassData ) {
- no strict "refs";
- *$datum = sub {
- use strict "refs";
- my ($self, $newvalue) = @_;
- $ClassData{$datum} = $newvalue if @_ > 1;
- return $ClassData{$datum};
- }
- }
-
- }
-
-The closure above can be modified to take inheritance into account using
-the &UNIVERSAL::can method and SUPER as shown previously.
-
-=head2 Translucency Revisited
-
-The Vermin class demonstrates translucency using a package variable,
-eponymously named %Vermin, as its meta-object. If you prefer to
-use absolutely no package variables beyond those necessary to appease
-inheritance or possibly the Exporter, this strategy is closed to you.
-That's too bad, because translucent attributes are an appealing
-technique, so it would be valuable to devise an implementation using
-only lexicals.
-
-There's a second reason why you might wish to avoid the eponymous
-package hash. If you use class names with double-colons in them, you
-would end up poking around somewhere you might not have meant to poke.
-
- package Vermin;
- $class = "Vermin";
- $class->{PopCount}++;
- # accesses $Vermin::Vermin{PopCount}
-
- package Vermin::Noxious;
- $class = "Vermin::Noxious";
- $class->{PopCount}++;
- # accesses $Vermin::Noxious{PopCount}
-
-In the first case, because the class name had no double-colons, we got
-the hash in the current package. But in the second case, instead of
-getting some hash in the current package, we got the hash %Noxious in
-the Vermin package. (The noxious vermin just invaded another package and
-sprayed their data around it. :-) Perl doesn't support relative packages
-in its naming conventions, so any double-colons trigger a fully-qualified
-lookup instead of just looking in the current package.
-
-In practice, it is unlikely that the Vermin class had an existing
-package variable named %Noxious that you just blew away. If you're
-still mistrustful, you could always stake out your own territory
-where you know the rules, such as using Eponymous::Vermin::Noxious or
-Hieronymus::Vermin::Boschious or Leave_Me_Alone::Vermin::Noxious as class
-names instead. Sure, it's in theory possible that someone else has
-a class named Eponymous::Vermin with its own %Noxious hash, but this
-kind of thing is always true. There's no arbiter of package names.
-It's always the case that globals like @Cwd::ISA would collide if more
-than one class uses the same Cwd package.
-
-If this still leaves you with an uncomfortable twinge of paranoia,
-we have another solution for you. There's nothing that says that you
-have to have a package variable to hold a class meta-object, either for
-monadic classes or for translucent attributes. Just code up the methods
-so that they access a lexical instead.
-
-Here's another implementation of the Vermin class with semantics identical
-to those given previously, but this time using no package variables.
-
- package Vermin;
-
-
- # Here's the class meta-object, eponymously named.
- # It holds all class data, and also all instance data
- # so the latter can be used for both initialization
- # and translucency. it's a template.
- my %ClassData = (
- PopCount => 0, # capital for class attributes
- color => "beige", # small for instance attributes
- );
-
- # constructor method
- # invoked as class method or object method
- sub spawn {
- my $obclass = shift;
- my $class = ref($obclass) || $obclass;
- my $self = {};
- bless($self, $class);
- $ClassData{PopCount}++;
- # init fields from invoking object, or omit if
- # invoking object is the class to provide translucency
- %$self = %$obclass if ref $obclass;
- return $self;
- }
-
- # translucent accessor for "color" attribute
- # invoked as class method or object method
- sub color {
- my $self = shift;
-
- # handle class invocation
- unless (ref $self) {
- $ClassData{color} = shift if @_;
- return $ClassData{color}
- }
-
- # handle object invocation
- $self->{color} = shift if @_;
- if (defined $self->{color}) { # not exists!
- return $self->{color};
- } else {
- return $ClassData{color};
- }
- }
-
- # class attribute accessor for "PopCount" attribute
- # invoked as class method or object method
- sub population {
- return $ClassData{PopCount};
- }
-
- # instance destructor; invoked only as object method
- sub DESTROY {
- $ClassData{PopCount}--;
- }
-
- # detect whether an object attribute is translucent
- # (typically?) invoked only as object method
- sub is_translucent {
- my($self, $attr) = @_;
- $self = \%ClassData if !ref $self;
- return !defined $self->{$attr};
- }
-
- # test for presence of attribute in class
- # invoked as class method or object method
- sub has_attribute {
- my($self, $attr) = @_;
- return exists $ClassData{$attr};
- }
-
-=head1 NOTES
-
-Inheritance is a powerful but subtle device, best used only after careful
-forethought and design. Aggregation instead of inheritance is often a
-better approach.
-
-We use the hypothetical our() syntax for package variables. It works
-like C<use vars>, but looks like my(). It should be in this summer's
-major release (5.6) of perl--we hope.
-
-You can't use file-scoped lexicals in conjunction with the SelfLoader
-or the AutoLoader, because they alter the lexical scope in which the
-module's methods wind up getting compiled.
-
-The usual mealy-mouthed package-mungeing doubtless applies to setting
-up names of object attributes. For example, C<< $self->{ObData1} >>
-should probably be C<< $self->{ __PACKAGE__ . "_ObData1" } >>, but that
-would just confuse the examples.
-
-=head1 SEE ALSO
-
-L<perltoot>, L<perlobj>, L<perlmod>, and L<perlbot>.
-
-The Tie::SecureHash and Class::Data::Inheritable modules from CPAN are
-worth checking out.
-
-=head1 AUTHOR AND COPYRIGHT
-
-Copyright (c) 1999 Tom Christiansen.
-All rights reserved.
-
-When included as part of the Standard Version of Perl, or as part of
-its complete documentation whether printed or otherwise, this work
-may be distributed only under the terms of Perl's Artistic License.
-Any distribution of this file or derivatives thereof I<outside>
-of that package require that special arrangements be made with
-copyright holder.
-
-Irrespective of its distribution, all code examples in this file
-are hereby placed into the public domain. You are permitted and
-encouraged to use this code in your own programs for fun
-or for profit as you see fit. A simple comment in the code giving
-credit would be courteous but is not required.
-
-=head1 ACKNOWLEDGEMENTS
-
-Russ Albery, Jon Orwant, Randy Ray, Larry Rosler, Nat Torkington,
-and Stephen Warren all contributed suggestions and corrections to this
-piece. Thanks especially to Damian Conway for his ideas and feedback,
-and without whose indirect prodding I might never have taken the time
-to show others how much Perl has to offer in the way of objects once
-you start thinking outside the tiny little box that today's "popular"
-object-oriented languages enforce.
-
-=head1 HISTORY
-
-Last edit: Sun Feb 4 20:50:28 EST 2001
diff --git a/contrib/perl5/pod/perltrap.pod b/contrib/perl5/pod/perltrap.pod
deleted file mode 100644
index 753e721..0000000
--- a/contrib/perl5/pod/perltrap.pod
+++ /dev/null
@@ -1,1538 +0,0 @@
-=head1 NAME
-
-perltrap - Perl traps for the unwary
-
-=head1 DESCRIPTION
-
-The biggest trap of all is forgetting to C<use warnings> or use the B<-w>
-switch; see L<perllexwarn> and L<perlrun>. The second biggest trap is not
-making your entire program runnable under C<use strict>. The third biggest
-trap is not reading the list of changes in this version of Perl; see
-L<perldelta>.
-
-=head2 Awk Traps
-
-Accustomed B<awk> users should take special note of the following:
-
-=over 4
-
-=item *
-
-The English module, loaded via
-
- use English;
-
-allows you to refer to special variables (like C<$/>) with names (like
-$RS), as though they were in B<awk>; see L<perlvar> for details.
-
-=item *
-
-Semicolons are required after all simple statements in Perl (except
-at the end of a block). Newline is not a statement delimiter.
-
-=item *
-
-Curly brackets are required on C<if>s and C<while>s.
-
-=item *
-
-Variables begin with "$", "@" or "%" in Perl.
-
-=item *
-
-Arrays index from 0. Likewise string positions in substr() and
-index().
-
-=item *
-
-You have to decide whether your array has numeric or string indices.
-
-=item *
-
-Hash values do not spring into existence upon mere reference.
-
-=item *
-
-You have to decide whether you want to use string or numeric
-comparisons.
-
-=item *
-
-Reading an input line does not split it for you. You get to split it
-to an array yourself. And the split() operator has different
-arguments than B<awk>'s.
-
-=item *
-
-The current input line is normally in $_, not $0. It generally does
-not have the newline stripped. ($0 is the name of the program
-executed.) See L<perlvar>.
-
-=item *
-
-$<I<digit>> does not refer to fields--it refers to substrings matched
-by the last match pattern.
-
-=item *
-
-The print() statement does not add field and record separators unless
-you set C<$,> and C<$\>. You can set $OFS and $ORS if you're using
-the English module.
-
-=item *
-
-You must open your files before you print to them.
-
-=item *
-
-The range operator is "..", not comma. The comma operator works as in
-C.
-
-=item *
-
-The match operator is "=~", not "~". ("~" is the one's complement
-operator, as in C.)
-
-=item *
-
-The exponentiation operator is "**", not "^". "^" is the XOR
-operator, as in C. (You know, one could get the feeling that B<awk> is
-basically incompatible with C.)
-
-=item *
-
-The concatenation operator is ".", not the null string. (Using the
-null string would render C</pat/ /pat/> unparsable, because the third slash
-would be interpreted as a division operator--the tokenizer is in fact
-slightly context sensitive for operators like "/", "?", and ">".
-And in fact, "." itself can be the beginning of a number.)
-
-=item *
-
-The C<next>, C<exit>, and C<continue> keywords work differently.
-
-=item *
-
-
-The following variables work differently:
-
- Awk Perl
- ARGC scalar @ARGV (compare with $#ARGV)
- ARGV[0] $0
- FILENAME $ARGV
- FNR $. - something
- FS (whatever you like)
- NF $#Fld, or some such
- NR $.
- OFMT $#
- OFS $,
- ORS $\
- RLENGTH length($&)
- RS $/
- RSTART length($`)
- SUBSEP $;
-
-=item *
-
-You cannot set $RS to a pattern, only a string.
-
-=item *
-
-When in doubt, run the B<awk> construct through B<a2p> and see what it
-gives you.
-
-=back
-
-=head2 C Traps
-
-Cerebral C programmers should take note of the following:
-
-=over 4
-
-=item *
-
-Curly brackets are required on C<if>'s and C<while>'s.
-
-=item *
-
-You must use C<elsif> rather than C<else if>.
-
-=item *
-
-The C<break> and C<continue> keywords from C become in
-Perl C<last> and C<next>, respectively.
-Unlike in C, these do I<not> work within a C<do { } while> construct.
-
-=item *
-
-There's no switch statement. (But it's easy to build one on the fly.)
-
-=item *
-
-Variables begin with "$", "@" or "%" in Perl.
-
-=item *
-
-Comments begin with "#", not "/*".
-
-=item *
-
-You can't take the address of anything, although a similar operator
-in Perl is the backslash, which creates a reference.
-
-=item *
-
-C<ARGV> must be capitalized. C<$ARGV[0]> is C's C<argv[1]>, and C<argv[0]>
-ends up in C<$0>.
-
-=item *
-
-System calls such as link(), unlink(), rename(), etc. return nonzero for
-success, not 0. (system(), however, returns zero for success.)
-
-=item *
-
-Signal handlers deal with signal names, not numbers. Use C<kill -l>
-to find their names on your system.
-
-=back
-
-=head2 Sed Traps
-
-Seasoned B<sed> programmers should take note of the following:
-
-=over 4
-
-=item *
-
-Backreferences in substitutions use "$" rather than "\".
-
-=item *
-
-The pattern matching metacharacters "(", ")", and "|" do not have backslashes
-in front.
-
-=item *
-
-The range operator is C<...>, rather than comma.
-
-=back
-
-=head2 Shell Traps
-
-Sharp shell programmers should take note of the following:
-
-=over 4
-
-=item *
-
-The backtick operator does variable interpolation without regard to
-the presence of single quotes in the command.
-
-=item *
-
-The backtick operator does no translation of the return value, unlike B<csh>.
-
-=item *
-
-Shells (especially B<csh>) do several levels of substitution on each
-command line. Perl does substitution in only certain constructs
-such as double quotes, backticks, angle brackets, and search patterns.
-
-=item *
-
-Shells interpret scripts a little bit at a time. Perl compiles the
-entire program before executing it (except for C<BEGIN> blocks, which
-execute at compile time).
-
-=item *
-
-The arguments are available via @ARGV, not $1, $2, etc.
-
-=item *
-
-The environment is not automatically made available as separate scalar
-variables.
-
-=back
-
-=head2 Perl Traps
-
-Practicing Perl Programmers should take note of the following:
-
-=over 4
-
-=item *
-
-Remember that many operations behave differently in a list
-context than they do in a scalar one. See L<perldata> for details.
-
-=item *
-
-Avoid barewords if you can, especially all lowercase ones.
-You can't tell by just looking at it whether a bareword is
-a function or a string. By using quotes on strings and
-parentheses on function calls, you won't ever get them confused.
-
-=item *
-
-You cannot discern from mere inspection which builtins
-are unary operators (like chop() and chdir())
-and which are list operators (like print() and unlink()).
-(Unless prototyped, user-defined subroutines can B<only> be list
-operators, never unary ones.) See L<perlop> and L<perlsub>.
-
-=item *
-
-People have a hard time remembering that some functions
-default to $_, or @ARGV, or whatever, but that others which
-you might expect to do not.
-
-=item *
-
-The <FH> construct is not the name of the filehandle, it is a readline
-operation on that handle. The data read is assigned to $_ only if the
-file read is the sole condition in a while loop:
-
- while (<FH>) { }
- while (defined($_ = <FH>)) { }..
- <FH>; # data discarded!
-
-=item *
-
-Remember not to use C<=> when you need C<=~>;
-these two constructs are quite different:
-
- $x = /foo/;
- $x =~ /foo/;
-
-=item *
-
-The C<do {}> construct isn't a real loop that you can use
-loop control on.
-
-=item *
-
-Use C<my()> for local variables whenever you can get away with
-it (but see L<perlform> for where you can't).
-Using C<local()> actually gives a local value to a global
-variable, which leaves you open to unforeseen side-effects
-of dynamic scoping.
-
-=item *
-
-If you localize an exported variable in a module, its exported value will
-not change. The local name becomes an alias to a new value but the
-external name is still an alias for the original.
-
-=back
-
-=head2 Perl4 to Perl5 Traps
-
-Practicing Perl4 Programmers should take note of the following
-Perl4-to-Perl5 specific traps.
-
-They're crudely ordered according to the following list:
-
-=over 4
-
-=item Discontinuance, Deprecation, and BugFix traps
-
-Anything that's been fixed as a perl4 bug, removed as a perl4 feature
-or deprecated as a perl4 feature with the intent to encourage usage of
-some other perl5 feature.
-
-=item Parsing Traps
-
-Traps that appear to stem from the new parser.
-
-=item Numerical Traps
-
-Traps having to do with numerical or mathematical operators.
-
-=item General data type traps
-
-Traps involving perl standard data types.
-
-=item Context Traps - scalar, list contexts
-
-Traps related to context within lists, scalar statements/declarations.
-
-=item Precedence Traps
-
-Traps related to the precedence of parsing, evaluation, and execution of
-code.
-
-=item General Regular Expression Traps using s///, etc.
-
-Traps related to the use of pattern matching.
-
-=item Subroutine, Signal, Sorting Traps
-
-Traps related to the use of signals and signal handlers, general subroutines,
-and sorting, along with sorting subroutines.
-
-=item OS Traps
-
-OS-specific traps.
-
-=item DBM Traps
-
-Traps specific to the use of C<dbmopen()>, and specific dbm implementations.
-
-=item Unclassified Traps
-
-Everything else.
-
-=back
-
-If you find an example of a conversion trap that is not listed here,
-please submit it to <F<perlbug@perl.org>> for inclusion.
-Also note that at least some of these can be caught with the
-C<use warnings> pragma or the B<-w> switch.
-
-=head2 Discontinuance, Deprecation, and BugFix traps
-
-Anything that has been discontinued, deprecated, or fixed as
-a bug from perl4.
-
-=over 4
-
-=item * Discontinuance
-
-Symbols starting with "_" are no longer forced into package main, except
-for C<$_> itself (and C<@_>, etc.).
-
- package test;
- $_legacy = 1;
-
- package main;
- print "\$_legacy is ",$_legacy,"\n";
-
- # perl4 prints: $_legacy is 1
- # perl5 prints: $_legacy is
-
-=item * Deprecation
-
-Double-colon is now a valid package separator in a variable name. Thus these
-behave differently in perl4 vs. perl5, because the packages don't exist.
-
- $a=1;$b=2;$c=3;$var=4;
- print "$a::$b::$c ";
- print "$var::abc::xyz\n";
-
- # perl4 prints: 1::2::3 4::abc::xyz
- # perl5 prints: 3
-
-Given that C<::> is now the preferred package delimiter, it is debatable
-whether this should be classed as a bug or not.
-(The older package delimiter, ' ,is used here)
-
- $x = 10 ;
- print "x=${'x}\n" ;
-
- # perl4 prints: x=10
- # perl5 prints: Can't find string terminator "'" anywhere before EOF
-
-You can avoid this problem, and remain compatible with perl4, if you
-always explicitly include the package name:
-
- $x = 10 ;
- print "x=${main'x}\n" ;
-
-Also see precedence traps, for parsing C<$:>.
-
-=item * BugFix
-
-The second and third arguments of C<splice()> are now evaluated in scalar
-context (as the Camel says) rather than list context.
-
- sub sub1{return(0,2) } # return a 2-element list
- sub sub2{ return(1,2,3)} # return a 3-element list
- @a1 = ("a","b","c","d","e");
- @a2 = splice(@a1,&sub1,&sub2);
- print join(' ',@a2),"\n";
-
- # perl4 prints: a b
- # perl5 prints: c d e
-
-=item * Discontinuance
-
-You can't do a C<goto> into a block that is optimized away. Darn.
-
- goto marker1;
-
- for(1){
- marker1:
- print "Here I is!\n";
- }
-
- # perl4 prints: Here I is!
- # perl5 errors: Can't "goto" into the middle of a foreach loop
-
-=item * Discontinuance
-
-It is no longer syntactically legal to use whitespace as the name
-of a variable, or as a delimiter for any kind of quote construct.
-Double darn.
-
- $a = ("foo bar");
- $b = q baz ;
- print "a is $a, b is $b\n";
-
- # perl4 prints: a is foo bar, b is baz
- # perl5 errors: Bareword found where operator expected
-
-=item * Discontinuance
-
-The archaic while/if BLOCK BLOCK syntax is no longer supported.
-
- if { 1 } {
- print "True!";
- }
- else {
- print "False!";
- }
-
- # perl4 prints: True!
- # perl5 errors: syntax error at test.pl line 1, near "if {"
-
-=item * BugFix
-
-The C<**> operator now binds more tightly than unary minus.
-It was documented to work this way before, but didn't.
-
- print -4**2,"\n";
-
- # perl4 prints: 16
- # perl5 prints: -16
-
-=item * Discontinuance
-
-The meaning of C<foreach{}> has changed slightly when it is iterating over a
-list which is not an array. This used to assign the list to a
-temporary array, but no longer does so (for efficiency). This means
-that you'll now be iterating over the actual values, not over copies of
-the values. Modifications to the loop variable can change the original
-values.
-
- @list = ('ab','abc','bcd','def');
- foreach $var (grep(/ab/,@list)){
- $var = 1;
- }
- print (join(':',@list));
-
- # perl4 prints: ab:abc:bcd:def
- # perl5 prints: 1:1:bcd:def
-
-To retain Perl4 semantics you need to assign your list
-explicitly to a temporary array and then iterate over that. For
-example, you might need to change
-
- foreach $var (grep(/ab/,@list)){
-
-to
-
- foreach $var (@tmp = grep(/ab/,@list)){
-
-Otherwise changing $var will clobber the values of @list. (This most often
-happens when you use C<$_> for the loop variable, and call subroutines in
-the loop that don't properly localize C<$_>.)
-
-=item * Discontinuance
-
-C<split> with no arguments now behaves like C<split ' '> (which doesn't
-return an initial null field if $_ starts with whitespace), it used to
-behave like C<split /\s+/> (which does).
-
- $_ = ' hi mom';
- print join(':', split);
-
- # perl4 prints: :hi:mom
- # perl5 prints: hi:mom
-
-=item * BugFix
-
-Perl 4 would ignore any text which was attached to an B<-e> switch,
-always taking the code snippet from the following arg. Additionally, it
-would silently accept an B<-e> switch without a following arg. Both of
-these behaviors have been fixed.
-
- perl -e'print "attached to -e"' 'print "separate arg"'
-
- # perl4 prints: separate arg
- # perl5 prints: attached to -e
-
- perl -e
-
- # perl4 prints:
- # perl5 dies: No code specified for -e.
-
-=item * Discontinuance
-
-In Perl 4 the return value of C<push> was undocumented, but it was
-actually the last value being pushed onto the target list. In Perl 5
-the return value of C<push> is documented, but has changed, it is the
-number of elements in the resulting list.
-
- @x = ('existing');
- print push(@x, 'first new', 'second new');
-
- # perl4 prints: second new
- # perl5 prints: 3
-
-=item * Deprecation
-
-Some error messages will be different.
-
-=item * Discontinuance
-
-In Perl 4, if in list context the delimiters to the first argument of
-C<split()> were C<??>, the result would be placed in C<@_> as well as
-being returned. Perl 5 has more respect for your subroutine arguments.
-
-=item * Discontinuance
-
-Some bugs may have been inadvertently removed. :-)
-
-=back
-
-=head2 Parsing Traps
-
-Perl4-to-Perl5 traps from having to do with parsing.
-
-=over 4
-
-=item * Parsing
-
-Note the space between . and =
-
- $string . = "more string";
- print $string;
-
- # perl4 prints: more string
- # perl5 prints: syntax error at - line 1, near ". ="
-
-=item * Parsing
-
-Better parsing in perl 5
-
- sub foo {}
- &foo
- print("hello, world\n");
-
- # perl4 prints: hello, world
- # perl5 prints: syntax error
-
-=item * Parsing
-
-"if it looks like a function, it is a function" rule.
-
- print
- ($foo == 1) ? "is one\n" : "is zero\n";
-
- # perl4 prints: is zero
- # perl5 warns: "Useless use of a constant in void context" if using -w
-
-=item * Parsing
-
-String interpolation of the C<$#array> construct differs when braces
-are to used around the name.
-
- @a = (1..3);
- print "${#a}";
-
- # perl4 prints: 2
- # perl5 fails with syntax error
-
- @ = (1..3);
- print "$#{a}";
-
- # perl4 prints: {a}
- # perl5 prints: 2
-
-=back
-
-=head2 Numerical Traps
-
-Perl4-to-Perl5 traps having to do with numerical operators,
-operands, or output from same.
-
-=over 5
-
-=item * Numerical
-
-Formatted output and significant digits
-
- print 7.373504 - 0, "\n";
- printf "%20.18f\n", 7.373504 - 0;
-
- # Perl4 prints:
- 7.375039999999996141
- 7.37503999999999614
-
- # Perl5 prints:
- 7.373504
- 7.37503999999999614
-
-=item * Numerical
-
-This specific item has been deleted. It demonstrated how the auto-increment
-operator would not catch when a number went over the signed int limit. Fixed
-in version 5.003_04. But always be wary when using large integers.
-If in doubt:
-
- use Math::BigInt;
-
-=item * Numerical
-
-Assignment of return values from numeric equality tests
-does not work in perl5 when the test evaluates to false (0).
-Logical tests now return an null, instead of 0
-
- $p = ($test == 1);
- print $p,"\n";
-
- # perl4 prints: 0
- # perl5 prints:
-
-Also see L<"General Regular Expression Traps using s///, etc.">
-for another example of this new feature...
-
-=item * Bitwise string ops
-
-When bitwise operators which can operate upon either numbers or
-strings (C<& | ^ ~>) are given only strings as arguments, perl4 would
-treat the operands as bitstrings so long as the program contained a call
-to the C<vec()> function. perl5 treats the string operands as bitstrings.
-(See L<perlop/Bitwise String Operators> for more details.)
-
- $fred = "10";
- $barney = "12";
- $betty = $fred & $barney;
- print "$betty\n";
- # Uncomment the next line to change perl4's behavior
- # ($dummy) = vec("dummy", 0, 0);
-
- # Perl4 prints:
- 8
-
- # Perl5 prints:
- 10
-
- # If vec() is used anywhere in the program, both print:
- 10
-
-=back
-
-=head2 General data type traps
-
-Perl4-to-Perl5 traps involving most data-types, and their usage
-within certain expressions and/or context.
-
-=over 5
-
-=item * (Arrays)
-
-Negative array subscripts now count from the end of the array.
-
- @a = (1, 2, 3, 4, 5);
- print "The third element of the array is $a[3] also expressed as $a[-2] \n";
-
- # perl4 prints: The third element of the array is 4 also expressed as
- # perl5 prints: The third element of the array is 4 also expressed as 4
-
-=item * (Arrays)
-
-Setting C<$#array> lower now discards array elements, and makes them
-impossible to recover.
-
- @a = (a,b,c,d,e);
- print "Before: ",join('',@a);
- $#a =1;
- print ", After: ",join('',@a);
- $#a =3;
- print ", Recovered: ",join('',@a),"\n";
-
- # perl4 prints: Before: abcde, After: ab, Recovered: abcd
- # perl5 prints: Before: abcde, After: ab, Recovered: ab
-
-=item * (Hashes)
-
-Hashes get defined before use
-
- local($s,@a,%h);
- die "scalar \$s defined" if defined($s);
- die "array \@a defined" if defined(@a);
- die "hash \%h defined" if defined(%h);
-
- # perl4 prints:
- # perl5 dies: hash %h defined
-
-Perl will now generate a warning when it sees defined(@a) and
-defined(%h).
-
-=item * (Globs)
-
-glob assignment from variable to variable will fail if the assigned
-variable is localized subsequent to the assignment
-
- @a = ("This is Perl 4");
- *b = *a;
- local(@a);
- print @b,"\n";
-
- # perl4 prints: This is Perl 4
- # perl5 prints:
-
-=item * (Globs)
-
-Assigning C<undef> to a glob has no effect in Perl 5. In Perl 4
-it undefines the associated scalar (but may have other side effects
-including SEGVs). Perl 5 will also warn if C<undef> is assigned to a
-typeglob. (Note that assigning C<undef> to a typeglob is different
-than calling the C<undef> function on a typeglob (C<undef *foo>), which
-has quite a few effects.
-
- $foo = "bar";
- *foo = undef;
- print $foo;
-
- # perl4 prints:
- # perl4 warns: "Use of uninitialized variable" if using -w
- # perl5 prints: bar
- # perl5 warns: "Undefined value assigned to typeglob" if using -w
-
-=item * (Scalar String)
-
-Changes in unary negation (of strings)
-This change effects both the return value and what it
-does to auto(magic)increment.
-
- $x = "aaa";
- print ++$x," : ";
- print -$x," : ";
- print ++$x,"\n";
-
- # perl4 prints: aab : -0 : 1
- # perl5 prints: aab : -aab : aac
-
-=item * (Constants)
-
-perl 4 lets you modify constants:
-
- $foo = "x";
- &mod($foo);
- for ($x = 0; $x < 3; $x++) {
- &mod("a");
- }
- sub mod {
- print "before: $_[0]";
- $_[0] = "m";
- print " after: $_[0]\n";
- }
-
- # perl4:
- # before: x after: m
- # before: a after: m
- # before: m after: m
- # before: m after: m
-
- # Perl5:
- # before: x after: m
- # Modification of a read-only value attempted at foo.pl line 12.
- # before: a
-
-=item * (Scalars)
-
-The behavior is slightly different for:
-
- print "$x", defined $x
-
- # perl 4: 1
- # perl 5: <no output, $x is not called into existence>
-
-=item * (Variable Suicide)
-
-Variable suicide behavior is more consistent under Perl 5.
-Perl5 exhibits the same behavior for hashes and scalars,
-that perl4 exhibits for only scalars.
-
- $aGlobal{ "aKey" } = "global value";
- print "MAIN:", $aGlobal{"aKey"}, "\n";
- $GlobalLevel = 0;
- &test( *aGlobal );
-
- sub test {
- local( *theArgument ) = @_;
- local( %aNewLocal ); # perl 4 != 5.001l,m
- $aNewLocal{"aKey"} = "this should never appear";
- print "SUB: ", $theArgument{"aKey"}, "\n";
- $aNewLocal{"aKey"} = "level $GlobalLevel"; # what should print
- $GlobalLevel++;
- if( $GlobalLevel<4 ) {
- &test( *aNewLocal );
- }
- }
-
- # Perl4:
- # MAIN:global value
- # SUB: global value
- # SUB: level 0
- # SUB: level 1
- # SUB: level 2
-
- # Perl5:
- # MAIN:global value
- # SUB: global value
- # SUB: this should never appear
- # SUB: this should never appear
- # SUB: this should never appear
-
-=back
-
-=head2 Context Traps - scalar, list contexts
-
-=over 5
-
-=item * (list context)
-
-The elements of argument lists for formats are now evaluated in list
-context. This means you can interpolate list values now.
-
- @fmt = ("foo","bar","baz");
- format STDOUT=
- @<<<<< @||||| @>>>>>
- @fmt;
- .
- write;
-
- # perl4 errors: Please use commas to separate fields in file
- # perl5 prints: foo bar baz
-
-=item * (scalar context)
-
-The C<caller()> function now returns a false value in a scalar context
-if there is no caller. This lets library files determine if they're
-being required.
-
- caller() ? (print "You rang?\n") : (print "Got a 0\n");
-
- # perl4 errors: There is no caller
- # perl5 prints: Got a 0
-
-=item * (scalar context)
-
-The comma operator in a scalar context is now guaranteed to give a
-scalar context to its arguments.
-
- @y= ('a','b','c');
- $x = (1, 2, @y);
- print "x = $x\n";
-
- # Perl4 prints: x = c # Thinks list context interpolates list
- # Perl5 prints: x = 3 # Knows scalar uses length of list
-
-=item * (list, builtin)
-
-C<sprintf()> is prototyped as ($;@), so its first argument is given scalar
-context. Thus, if passed an array, it will probably not do what you want,
-unlike Perl 4:
-
- @z = ('%s%s', 'foo', 'bar');
- $x = sprintf(@z);
- print $x;
-
- # perl4 prints: foobar
- # perl5 prints: 3
-
-C<printf()> works the same as it did in Perl 4, though:
-
- @z = ('%s%s', 'foo', 'bar');
- printf STDOUT (@z);
-
- # perl4 prints: foobar
- # perl5 prints: foobar
-
-=back
-
-=head2 Precedence Traps
-
-Perl4-to-Perl5 traps involving precedence order.
-
-Perl 4 has almost the same precedence rules as Perl 5 for the operators
-that they both have. Perl 4 however, seems to have had some
-inconsistencies that made the behavior differ from what was documented.
-
-=over 5
-
-=item * Precedence
-
-LHS vs. RHS of any assignment operator. LHS is evaluated first
-in perl4, second in perl5; this can affect the relationship
-between side-effects in sub-expressions.
-
- @arr = ( 'left', 'right' );
- $a{shift @arr} = shift @arr;
- print join( ' ', keys %a );
-
- # perl4 prints: left
- # perl5 prints: right
-
-=item * Precedence
-
-These are now semantic errors because of precedence:
-
- @list = (1,2,3,4,5);
- %map = ("a",1,"b",2,"c",3,"d",4);
- $n = shift @list + 2; # first item in list plus 2
- print "n is $n, ";
- $m = keys %map + 2; # number of items in hash plus 2
- print "m is $m\n";
-
- # perl4 prints: n is 3, m is 6
- # perl5 errors and fails to compile
-
-=item * Precedence
-
-The precedence of assignment operators is now the same as the precedence
-of assignment. Perl 4 mistakenly gave them the precedence of the associated
-operator. So you now must parenthesize them in expressions like
-
- /foo/ ? ($a += 2) : ($a -= 2);
-
-Otherwise
-
- /foo/ ? $a += 2 : $a -= 2
-
-would be erroneously parsed as
-
- (/foo/ ? $a += 2 : $a) -= 2;
-
-On the other hand,
-
- $a += /foo/ ? 1 : 2;
-
-now works as a C programmer would expect.
-
-=item * Precedence
-
- open FOO || die;
-
-is now incorrect. You need parentheses around the filehandle.
-Otherwise, perl5 leaves the statement as its default precedence:
-
- open(FOO || die);
-
- # perl4 opens or dies
- # perl5 opens FOO, dying only if 'FOO' is false, i.e. never
-
-=item * Precedence
-
-perl4 gives the special variable, C<$:> precedence, where perl5
-treats C<$::> as main C<package>
-
- $a = "x"; print "$::a";
-
- # perl 4 prints: -:a
- # perl 5 prints: x
-
-=item * Precedence
-
-perl4 had buggy precedence for the file test operators vis-a-vis
-the assignment operators. Thus, although the precedence table
-for perl4 leads one to believe C<-e $foo .= "q"> should parse as
-C<((-e $foo) .= "q")>, it actually parses as C<(-e ($foo .= "q"))>.
-In perl5, the precedence is as documented.
-
- -e $foo .= "q"
-
- # perl4 prints: no output
- # perl5 prints: Can't modify -e in concatenation
-
-=item * Precedence
-
-In perl4, keys(), each() and values() were special high-precedence operators
-that operated on a single hash, but in perl5, they are regular named unary
-operators. As documented, named unary operators have lower precedence
-than the arithmetic and concatenation operators C<+ - .>, but the perl4
-variants of these operators actually bind tighter than C<+ - .>.
-Thus, for:
-
- %foo = 1..10;
- print keys %foo - 1
-
- # perl4 prints: 4
- # perl5 prints: Type of arg 1 to keys must be hash (not subtraction)
-
-The perl4 behavior was probably more useful, if less consistent.
-
-=back
-
-=head2 General Regular Expression Traps using s///, etc.
-
-All types of RE traps.
-
-=over 5
-
-=item * Regular Expression
-
-C<s'$lhs'$rhs'> now does no interpolation on either side. It used to
-interpolate $lhs but not $rhs. (And still does not match a literal
-'$' in string)
-
- $a=1;$b=2;
- $string = '1 2 $a $b';
- $string =~ s'$a'$b';
- print $string,"\n";
-
- # perl4 prints: $b 2 $a $b
- # perl5 prints: 1 2 $a $b
-
-=item * Regular Expression
-
-C<m//g> now attaches its state to the searched string rather than the
-regular expression. (Once the scope of a block is left for the sub, the
-state of the searched string is lost)
-
- $_ = "ababab";
- while(m/ab/g){
- &doit("blah");
- }
- sub doit{local($_) = shift; print "Got $_ "}
-
- # perl4 prints: Got blah Got blah Got blah Got blah
- # perl5 prints: infinite loop blah...
-
-=item * Regular Expression
-
-Currently, if you use the C<m//o> qualifier on a regular expression
-within an anonymous sub, I<all> closures generated from that anonymous
-sub will use the regular expression as it was compiled when it was used
-the very first time in any such closure. For instance, if you say
-
- sub build_match {
- my($left,$right) = @_;
- return sub { $_[0] =~ /$left stuff $right/o; };
- }
- $good = build_match('foo','bar');
- $bad = build_match('baz','blarch');
- print $good->('foo stuff bar') ? "ok\n" : "not ok\n";
- print $bad->('baz stuff blarch') ? "ok\n" : "not ok\n";
- print $bad->('foo stuff bar') ? "not ok\n" : "ok\n";
-
-For most builds of Perl5, this will print:
-ok
-not ok
-not ok
-
-build_match() will always return a sub which matches the contents of
-$left and $right as they were the I<first> time that build_match()
-was called, not as they are in the current call.
-
-=item * Regular Expression
-
-If no parentheses are used in a match, Perl4 sets C<$+> to
-the whole match, just like C<$&>. Perl5 does not.
-
- "abcdef" =~ /b.*e/;
- print "\$+ = $+\n";
-
- # perl4 prints: bcde
- # perl5 prints:
-
-=item * Regular Expression
-
-substitution now returns the null string if it fails
-
- $string = "test";
- $value = ($string =~ s/foo//);
- print $value, "\n";
-
- # perl4 prints: 0
- # perl5 prints:
-
-Also see L<Numerical Traps> for another example of this new feature.
-
-=item * Regular Expression
-
-C<s`lhs`rhs`> (using backticks) is now a normal substitution, with no
-backtick expansion
-
- $string = "";
- $string =~ s`^`hostname`;
- print $string, "\n";
-
- # perl4 prints: <the local hostname>
- # perl5 prints: hostname
-
-=item * Regular Expression
-
-Stricter parsing of variables used in regular expressions
-
- s/^([^$grpc]*$grpc[$opt$plus$rep]?)//o;
-
- # perl4: compiles w/o error
- # perl5: with Scalar found where operator expected ..., near "$opt$plus"
-
-an added component of this example, apparently from the same script, is
-the actual value of the s'd string after the substitution.
-C<[$opt]> is a character class in perl4 and an array subscript in perl5
-
- $grpc = 'a';
- $opt = 'r';
- $_ = 'bar';
- s/^([^$grpc]*$grpc[$opt]?)/foo/;
- print ;
-
- # perl4 prints: foo
- # perl5 prints: foobar
-
-=item * Regular Expression
-
-Under perl5, C<m?x?> matches only once, like C<?x?>. Under perl4, it matched
-repeatedly, like C</x/> or C<m!x!>.
-
- $test = "once";
- sub match { $test =~ m?once?; }
- &match();
- if( &match() ) {
- # m?x? matches more then once
- print "perl4\n";
- } else {
- # m?x? matches only once
- print "perl5\n";
- }
-
- # perl4 prints: perl4
- # perl5 prints: perl5
-
-
-=back
-
-=head2 Subroutine, Signal, Sorting Traps
-
-The general group of Perl4-to-Perl5 traps having to do with
-Signals, Sorting, and their related subroutines, as well as
-general subroutine traps. Includes some OS-Specific traps.
-
-=over 5
-
-=item * (Signals)
-
-Barewords that used to look like strings to Perl will now look like subroutine
-calls if a subroutine by that name is defined before the compiler sees them.
-
- sub SeeYa { warn"Hasta la vista, baby!" }
- $SIG{'TERM'} = SeeYa;
- print "SIGTERM is now $SIG{'TERM'}\n";
-
- # perl4 prints: SIGTERM is now main'SeeYa
- # perl5 prints: SIGTERM is now main::1 (and warns "Hasta la vista, baby!")
-
-Use B<-w> to catch this one
-
-=item * (Sort Subroutine)
-
-reverse is no longer allowed as the name of a sort subroutine.
-
- sub reverse{ print "yup "; $a <=> $b }
- print sort reverse (2,1,3);
-
- # perl4 prints: yup yup 123
- # perl5 prints: 123
- # perl5 warns (if using -w): Ambiguous call resolved as CORE::reverse()
-
-=item * warn() won't let you specify a filehandle.
-
-Although it _always_ printed to STDERR, warn() would let you specify a
-filehandle in perl4. With perl5 it does not.
-
- warn STDERR "Foo!";
-
- # perl4 prints: Foo!
- # perl5 prints: String found where operator expected
-
-=back
-
-=head2 OS Traps
-
-=over 5
-
-=item * (SysV)
-
-Under HPUX, and some other SysV OSes, one had to reset any signal handler,
-within the signal handler function, each time a signal was handled with
-perl4. With perl5, the reset is now done correctly. Any code relying
-on the handler _not_ being reset will have to be reworked.
-
-Since version 5.002, Perl uses sigaction() under SysV.
-
- sub gotit {
- print "Got @_... ";
- }
- $SIG{'INT'} = 'gotit';
-
- $| = 1;
- $pid = fork;
- if ($pid) {
- kill('INT', $pid);
- sleep(1);
- kill('INT', $pid);
- } else {
- while (1) {sleep(10);}
- }
-
- # perl4 (HPUX) prints: Got INT...
- # perl5 (HPUX) prints: Got INT... Got INT...
-
-=item * (SysV)
-
-Under SysV OSes, C<seek()> on a file opened to append C<<< >> >>> now does
-the right thing w.r.t. the fopen() manpage. e.g., - When a file is opened
-for append, it is impossible to overwrite information already in
-the file.
-
- open(TEST,">>seek.test");
- $start = tell TEST ;
- foreach(1 .. 9){
- print TEST "$_ ";
- }
- $end = tell TEST ;
- seek(TEST,$start,0);
- print TEST "18 characters here";
-
- # perl4 (solaris) seek.test has: 18 characters here
- # perl5 (solaris) seek.test has: 1 2 3 4 5 6 7 8 9 18 characters here
-
-
-
-=back
-
-=head2 Interpolation Traps
-
-Perl4-to-Perl5 traps having to do with how things get interpolated
-within certain expressions, statements, contexts, or whatever.
-
-=over 5
-
-=item * Interpolation
-
-@ now always interpolates an array in double-quotish strings.
-
- print "To: someone@somewhere.com\n";
-
- # perl4 prints: To:someone@somewhere.com
- # perl < 5.6.1, error : In string, @somewhere now must be written as \@somewhere
- # perl >= 5.6.1, warning : Possible unintended interpolation of @somewhere in string
-
-=item * Interpolation
-
-Double-quoted strings may no longer end with an unescaped $ or @.
-
- $foo = "foo$";
- $bar = "bar@";
- print "foo is $foo, bar is $bar\n";
-
- # perl4 prints: foo is foo$, bar is bar@
- # perl5 errors: Final $ should be \$ or $name
-
-Note: perl5 DOES NOT error on the terminating @ in $bar
-
-=item * Interpolation
-
-Perl now sometimes evaluates arbitrary expressions inside braces that occur
-within double quotes (usually when the opening brace is preceded by C<$>
-or C<@>).
-
- @www = "buz";
- $foo = "foo";
- $bar = "bar";
- sub foo { return "bar" };
- print "|@{w.w.w}|${main'foo}|";
-
- # perl4 prints: |@{w.w.w}|foo|
- # perl5 prints: |buz|bar|
-
-Note that you can C<use strict;> to ward off such trappiness under perl5.
-
-=item * Interpolation
-
-The construct "this is $$x" used to interpolate the pid at that point, but
-now tries to dereference $x. C<$$> by itself still works fine, however.
-
- $s = "a reference";
- $x = *s;
- print "this is $$x\n";
-
- # perl4 prints: this is XXXx (XXX is the current pid)
- # perl5 prints: this is a reference
-
-=item * Interpolation
-
-Creation of hashes on the fly with C<eval "EXPR"> now requires either both
-C<$>'s to be protected in the specification of the hash name, or both curlies
-to be protected. If both curlies are protected, the result will be compatible
-with perl4 and perl5. This is a very common practice, and should be changed
-to use the block form of C<eval{}> if possible.
-
- $hashname = "foobar";
- $key = "baz";
- $value = 1234;
- eval "\$$hashname{'$key'} = q|$value|";
- (defined($foobar{'baz'})) ? (print "Yup") : (print "Nope");
-
- # perl4 prints: Yup
- # perl5 prints: Nope
-
-Changing
-
- eval "\$$hashname{'$key'} = q|$value|";
-
-to
-
- eval "\$\$hashname{'$key'} = q|$value|";
-
-causes the following result:
-
- # perl4 prints: Nope
- # perl5 prints: Yup
-
-or, changing to
-
- eval "\$$hashname\{'$key'\} = q|$value|";
-
-causes the following result:
-
- # perl4 prints: Yup
- # perl5 prints: Yup
- # and is compatible for both versions
-
-
-=item * Interpolation
-
-perl4 programs which unconsciously rely on the bugs in earlier perl versions.
-
- perl -e '$bar=q/not/; print "This is $foo{$bar} perl5"'
-
- # perl4 prints: This is not perl5
- # perl5 prints: This is perl5
-
-=item * Interpolation
-
-You also have to be careful about array references.
-
- print "$foo{"
-
- perl 4 prints: {
- perl 5 prints: syntax error
-
-=item * Interpolation
-
-Similarly, watch out for:
-
- $foo = "baz";
- print "\$$foo{bar}\n";
-
- # perl4 prints: $baz{bar}
- # perl5 prints: $
-
-Perl 5 is looking for C<$foo{bar}> which doesn't exist, but perl 4 is
-happy just to expand $foo to "baz" by itself. Watch out for this
-especially in C<eval>'s.
-
-=item * Interpolation
-
-C<qq()> string passed to C<eval>
-
- eval qq(
- foreach \$y (keys %\$x\) {
- \$count++;
- }
- );
-
- # perl4 runs this ok
- # perl5 prints: Can't find string terminator ")"
-
-=back
-
-=head2 DBM Traps
-
-General DBM traps.
-
-=over 5
-
-=item * DBM
-
-Existing dbm databases created under perl4 (or any other dbm/ndbm tool)
-may cause the same script, run under perl5, to fail. The build of perl5
-must have been linked with the same dbm/ndbm as the default for C<dbmopen()>
-to function properly without C<tie>'ing to an extension dbm implementation.
-
- dbmopen (%dbm, "file", undef);
- print "ok\n";
-
- # perl4 prints: ok
- # perl5 prints: ok (IFF linked with -ldbm or -lndbm)
-
-
-=item * DBM
-
-Existing dbm databases created under perl4 (or any other dbm/ndbm tool)
-may cause the same script, run under perl5, to fail. The error generated
-when exceeding the limit on the key/value size will cause perl5 to exit
-immediately.
-
- dbmopen(DB, "testdb",0600) || die "couldn't open db! $!";
- $DB{'trap'} = "x" x 1024; # value too large for most dbm/ndbm
- print "YUP\n";
-
- # perl4 prints:
- dbm store returned -1, errno 28, key "trap" at - line 3.
- YUP
-
- # perl5 prints:
- dbm store returned -1, errno 28, key "trap" at - line 3.
-
-=back
-
-=head2 Unclassified Traps
-
-Everything else.
-
-=over 5
-
-=item * C<require>/C<do> trap using returned value
-
-If the file doit.pl has:
-
- sub foo {
- $rc = do "./do.pl";
- return 8;
- }
- print &foo, "\n";
-
-And the do.pl file has the following single line:
-
- return 3;
-
-Running doit.pl gives the following:
-
- # perl 4 prints: 3 (aborts the subroutine early)
- # perl 5 prints: 8
-
-Same behavior if you replace C<do> with C<require>.
-
-=item * C<split> on empty string with LIMIT specified
-
- $string = '';
- @list = split(/foo/, $string, 2)
-
-Perl4 returns a one element list containing the empty string but Perl5
-returns an empty list.
-
-=back
-
-As always, if any of these are ever officially declared as bugs,
-they'll be fixed and removed.
-
diff --git a/contrib/perl5/pod/perlunicode.pod b/contrib/perl5/pod/perlunicode.pod
deleted file mode 100644
index 5b0fe2f..0000000
--- a/contrib/perl5/pod/perlunicode.pod
+++ /dev/null
@@ -1,242 +0,0 @@
-=head1 NAME
-
-perlunicode - Unicode support in Perl (EXPERIMENTAL, subject to change)
-
-=head1 DESCRIPTION
-
-=head2 Important Caveat
-
- WARNING: As of the 5.6.1 release, the implementation of Unicode
- support in Perl is incomplete, and continues to be highly experimental.
-
-The following areas need further work. They are being rapidly addressed
-in the 5.7.x development branch.
-
-=over 4
-
-=item Input and Output Disciplines
-
-There is currently no easy way to mark data read from a file or other
-external source as being utf8. This will be one of the major areas of
-focus in the near future.
-
-=item Regular Expressions
-
-The existing regular expression compiler does not produce polymorphic
-opcodes. This means that the determination on whether to match Unicode
-characters is made when the pattern is compiled, based on whether the
-pattern contains Unicode characters, and not when the matching happens
-at run time. This needs to be changed to adaptively match Unicode if
-the string to be matched is Unicode.
-
-=item C<use utf8> still needed to enable a few features
-
-The C<utf8> pragma implements the tables used for Unicode support. These
-tables are automatically loaded on demand, so the C<utf8> pragma need not
-normally be used.
-
-However, as a compatibility measure, this pragma must be explicitly used
-to enable recognition of UTF-8 encoded literals and identifiers in the
-source text.
-
-=back
-
-=head2 Byte and Character semantics
-
-Beginning with version 5.6, Perl uses logically wide characters to
-represent strings internally. This internal representation of strings
-uses the UTF-8 encoding.
-
-In future, Perl-level operations can be expected to work with characters
-rather than bytes, in general.
-
-However, as strictly an interim compatibility measure, Perl v5.6 aims to
-provide a safe migration path from byte semantics to character semantics
-for programs. For operations where Perl can unambiguously decide that the
-input data is characters, Perl now switches to character semantics.
-For operations where this determination cannot be made without additional
-information from the user, Perl decides in favor of compatibility, and
-chooses to use byte semantics.
-
-This behavior preserves compatibility with earlier versions of Perl,
-which allowed byte semantics in Perl operations, but only as long as
-none of the program's inputs are marked as being as source of Unicode
-character data. Such data may come from filehandles, from calls to
-external programs, from information provided by the system (such as %ENV),
-or from literals and constants in the source text.
-
-If the C<-C> command line switch is used, (or the ${^WIDE_SYSTEM_CALLS}
-global flag is set to C<1>), all system calls will use the
-corresponding wide character APIs. This is currently only implemented
-on Windows.
-
-Regardless of the above, the C<bytes> pragma can always be used to force
-byte semantics in a particular lexical scope. See L<bytes>.
-
-The C<utf8> pragma is primarily a compatibility device that enables
-recognition of UTF-8 in literals encountered by the parser. It may also
-be used for enabling some of the more experimental Unicode support features.
-Note that this pragma is only required until a future version of Perl
-in which character semantics will become the default. This pragma may
-then become a no-op. See L<utf8>.
-
-Unless mentioned otherwise, Perl operators will use character semantics
-when they are dealing with Unicode data, and byte semantics otherwise.
-Thus, character semantics for these operations apply transparently; if
-the input data came from a Unicode source (for example, by adding a
-character encoding discipline to the filehandle whence it came, or a
-literal UTF-8 string constant in the program), character semantics
-apply; otherwise, byte semantics are in effect. To force byte semantics
-on Unicode data, the C<bytes> pragma should be used.
-
-Under character semantics, many operations that formerly operated on
-bytes change to operating on characters. For ASCII data this makes
-no difference, because UTF-8 stores ASCII in single bytes, but for
-any character greater than C<chr(127)>, the character may be stored in
-a sequence of two or more bytes, all of which have the high bit set.
-But by and large, the user need not worry about this, because Perl
-hides it from the user. A character in Perl is logically just a number
-ranging from 0 to 2**32 or so. Larger characters encode to longer
-sequences of bytes internally, but again, this is just an internal
-detail which is hidden at the Perl level.
-
-=head2 Effects of character semantics
-
-Character semantics have the following effects:
-
-=over 4
-
-=item *
-
-Strings and patterns may contain characters that have an ordinal value
-larger than 255.
-
-Presuming you use a Unicode editor to edit your program, such characters
-will typically occur directly within the literal strings as UTF-8
-characters, but you can also specify a particular character with an
-extension of the C<\x> notation. UTF-8 characters are specified by
-putting the hexadecimal code within curlies after the C<\x>. For instance,
-a Unicode smiley face is C<\x{263A}>.
-
-=item *
-
-Identifiers within the Perl script may contain Unicode alphanumeric
-characters, including ideographs. (You are currently on your own when
-it comes to using the canonical forms of characters--Perl doesn't (yet)
-attempt to canonicalize variable names for you.)
-
-=item *
-
-Regular expressions match characters instead of bytes. For instance,
-"." matches a character instead of a byte. (However, the C<\C> pattern
-is provided to force a match a single byte ("C<char>" in C, hence
-C<\C>).)
-
-=item *
-
-Character classes in regular expressions match characters instead of
-bytes, and match against the character properties specified in the
-Unicode properties database. So C<\w> can be used to match an ideograph,
-for instance.
-
-=item *
-
-Named Unicode properties and block ranges make be used as character
-classes via the new C<\p{}> (matches property) and C<\P{}> (doesn't
-match property) constructs. For instance, C<\p{Lu}> matches any
-character with the Unicode uppercase property, while C<\p{M}> matches
-any mark character. Single letter properties may omit the brackets, so
-that can be written C<\pM> also. Many predefined character classes are
-available, such as C<\p{IsMirrored}> and C<\p{InTibetan}>.
-
-=item *
-
-The special pattern C<\X> match matches any extended Unicode sequence
-(a "combining character sequence" in Standardese), where the first
-character is a base character and subsequent characters are mark
-characters that apply to the base character. It is equivalent to
-C<(?:\PM\pM*)>.
-
-=item *
-
-The C<tr///> operator translates characters instead of bytes. Note
-that the C<tr///CU> functionality has been removed, as the interface
-was a mistake. For similar functionality see pack('U0', ...) and
-pack('C0', ...).
-
-=item *
-
-Case translation operators use the Unicode case translation tables
-when provided character input. Note that C<uc()> translates to
-uppercase, while C<ucfirst> translates to titlecase (for languages
-that make the distinction). Naturally the corresponding backslash
-sequences have the same semantics.
-
-=item *
-
-Most operators that deal with positions or lengths in the string will
-automatically switch to using character positions, including C<chop()>,
-C<substr()>, C<pos()>, C<index()>, C<rindex()>, C<sprintf()>,
-C<write()>, and C<length()>. Operators that specifically don't switch
-include C<vec()>, C<pack()>, and C<unpack()>. Operators that really
-don't care include C<chomp()>, as well as any other operator that
-treats a string as a bucket of bits, such as C<sort()>, and the
-operators dealing with filenames.
-
-=item *
-
-The C<pack()>/C<unpack()> letters "C<c>" and "C<C>" do I<not> change,
-since they're often used for byte-oriented formats. (Again, think
-"C<char>" in the C language.) However, there is a new "C<U>" specifier
-that will convert between UTF-8 characters and integers. (It works
-outside of the utf8 pragma too.)
-
-=item *
-
-The C<chr()> and C<ord()> functions work on characters. This is like
-C<pack("U")> and C<unpack("U")>, not like C<pack("C")> and
-C<unpack("C")>. In fact, the latter are how you now emulate
-byte-oriented C<chr()> and C<ord()> under utf8.
-
-=item *
-
-The bit string operators C<& | ^ ~> can operate on character data.
-However, for backward compatibility reasons (bit string operations
-when the characters all are less than 256 in ordinal value) one cannot
-mix C<~> (the bit complement) and characters both less than 256 and
-equal or greater than 256. Most importantly, the DeMorgan's laws
-(C<~($x|$y) eq ~$x&~$y>, C<~($x&$y) eq ~$x|~$y>) won't hold.
-Another way to look at this is that the complement cannot return
-B<both> the 8-bit (byte) wide bit complement, and the full character
-wide bit complement.
-
-=item *
-
-And finally, C<scalar reverse()> reverses by character rather than by byte.
-
-=back
-
-=head2 Character encodings for input and output
-
-[XXX: This feature is not yet implemented.]
-
-=head1 CAVEATS
-
-As of yet, there is no method for automatically coercing input and
-output to some encoding other than UTF-8. This is planned in the near
-future, however.
-
-Whether an arbitrary piece of data will be treated as "characters" or
-"bytes" by internal operations cannot be divined at the current time.
-
-Use of locales with utf8 may lead to odd results. Currently there is
-some attempt to apply 8-bit locale info to characters in the range
-0..255, but this is demonstrably incorrect for locales that use
-characters above that range (when mapped into Unicode). It will also
-tend to run slower. Avoidance of locales is strongly encouraged.
-
-=head1 SEE ALSO
-
-L<bytes>, L<utf8>, L<perlvar/"${^WIDE_SYSTEM_CALLS}">
-
-=cut
diff --git a/contrib/perl5/pod/perlutil.pod b/contrib/perl5/pod/perlutil.pod
deleted file mode 100644
index be7a345..0000000
--- a/contrib/perl5/pod/perlutil.pod
+++ /dev/null
@@ -1,185 +0,0 @@
-=head1 NAME
-
-perlutil - utilities packaged with the Perl distribution
-
-=head1 DESCRIPTION
-
-Along with the Perl interpreter itself, the Perl distribution installs a
-range of utilities on your system. There are also several utilities
-which are used by the Perl distribution itself as part of the install
-process. This document exists to list all of these utilities, explain
-what they are for and provide pointers to each module's documentation,
-if appropriate.
-
-=head2 DOCUMENTATION
-
-=over 3
-
-=item L<perldoc|perldoc>
-
-The main interface to Perl's documentation is C<perldoc>, although
-if you're reading this, it's more than likely that you've already found
-it. F<perldoc> will extract and format the documentation from any file
-in the current directory, any Perl module installed on the system, or
-any of the standard documentation pages, such as this one. Use
-C<perldoc E<lt>nameE<gt>> to get information on any of the utilities
-described in this document.
-
-=item L<pod2man|pod2man> and L<pod2text|pod2text>
-
-If it's run from a terminal, F<perldoc> will usually call F<pod2man> to
-translate POD (Plain Old Documentation - see L<perlpod> for an
-explanation) into a man page, and then run F<man> to display it; if
-F<man> isn't available, F<pod2text> will be used instead and the output
-piped through your favourite pager.
-
-=item L<pod2html|pod2html> and L<pod2latex|pod2latex>
-
-As well as these two, there are two other converters: F<pod2html> will
-produce HTML pages from POD, and F<pod2latex>, which produces LaTeX
-files.
-
-=item L<pod2usage|pod2usage>
-
-If you just want to know how to use the utilities described here,
-F<pod2usage> will just extract the "USAGE" section; some of
-the utilities will automatically call F<pod2usage> on themselves when
-you call them with C<-help>.
-
-=item L<podselect|podselect>
-
-F<pod2usage> is a special case of F<podselect>, a utility to extract
-named sections from documents written in POD. For instance, while
-utilities have "USAGE" sections, Perl modules usually have "SYNOPSIS"
-sections: C<podselect -s "SYNOPSIS" ...> will extract this section for
-a given file.
-
-=item L<podchecker|podchecker>
-
-If you're writing your own documentation in POD, the F<podchecker>
-utility will look for errors in your markup.
-
-=item L<splain|splain>
-
-F<splain> is an interface to L<perldiag> - paste in your error message
-to it, and it'll explain it for you.
-
-=item L<roffitall|roffitall>
-
-The C<roffitall> utility is not installed on your system but lives in
-the F<pod/> directory of your Perl source kit; it converts all the
-documentation from the distribution to F<*roff> format, and produces a
-typeset PostScript or text file of the whole lot.
-
-=back
-
-=head2 CONVERTORS
-
-To help you convert legacy programs to Perl, we've included three
-conversion filters:
-
-=over 3
-
-=item L<a2p|a2p>
-
-F<a2p> converts F<awk> scripts to Perl programs; for example, C<a2p -F:>
-on the simple F<awk> script C<{print $2}> will produce a Perl program
-based around this code:
-
- while (<>) {
- ($Fld1,$Fld2) = split(/[:\n]/, $_, 9999);
- print $Fld2;
- }
-
-=item L<s2p|s2p>
-
-Similarly, F<s2p> converts F<sed> scripts to Perl programs. F<s2p> run
-on C<s/foo/bar> will produce a Perl program based around this:
-
- while (<>) {
- chomp;
- s/foo/bar/g;
- print if $printit;
- }
-
-=item L<find2perl|find2perl>
-
-Finally, F<find2perl> translates C<find> commands to Perl equivalents which
-use the L<File::Find|File::Find> module. As an example,
-C<find2perl . -user root -perm 4000 -print> produces the following callback
-subroutine for C<File::Find>:
-
- sub wanted {
- my ($dev,$ino,$mode,$nlink,$uid,$gid);
- (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
- $uid == $uid{'root'}) &&
- (($mode & 0777) == 04000);
- print("$name\n");
- }
-
-=back
-
-As well as these filters for converting other languages, the
-L<pl2pm|pl2pm> utility will help you convert old-style Perl 4 libraries to
-new-style Perl5 modules.
-
-=head2 Development
-
-There are a set of utilities which help you in developing Perl programs,
-and in particular, extending Perl with C.
-
-=over 3
-
-=item L<perlbug|perlbug>
-
-F<perlbug> is the recommended way to report bugs in the perl interpreter
-itself or any of the standard library modules back to the developers;
-please read through the documentation for F<perlbug> thoroughly before
-using it to submit a bug report.
-
-=item L<h2ph|h2ph>
-
-Back before Perl had the XS system for connecting with C libraries,
-programmers used to get library constants by reading through the C
-header files. You may still see C<require 'syscall.ph'> or similar
-around - the F<.ph> file should be created by running F<h2ph> on the
-corresponding F<.h> file. See the F<h2ph> documentation for more on how
-to convert a whole bunch of header files at ones.
-
-=item L<c2ph|c2ph> and L<pstruct|pstruct>
-
-F<c2ph> and F<pstruct>, which are actually the same program but behave
-differently depending on how they are called, provide another way of
-getting at C with Perl - they'll convert C structures and union declarations
-to Perl code. This is deprecated in favour of F<h2xs> these days.
-
-=item L<h2xs|h2xs>
-
-F<h2xs> converts C header files into XS modules, and will try and write
-as much glue between C libraries and Perl modules as it can. It's also
-very useful for creating skeletons of pure Perl modules.
-
-=item L<dprofpp|dprofpp>
-
-Perl comes with a profiler, the F<Devel::Dprof> module. The
-F<dprofpp> utility analyzes the output of this profiler and tells you
-which subroutines are taking up the most run time. See L<Devel::Dprof>
-for more information.
-
-=item L<perlcc|perlcc>
-
-F<perlcc> is the interface to the experimental Perl compiler suite.
-
-=back
-
-=head2 SEE ALSO
-
-L<perldoc|perldoc>, L<pod2man|pod2man>, L<perlpod>,
-L<pod2html|pod2html>, L<pod2usage|pod2usage>, L<podselect|podselect>,
-L<podchecker|podchecker>, L<splain|splain>, L<perldiag>,
-L<roffitall|roffitall>, L<a2p|a2p>, L<s2p|s2p>, L<find2perl|find2perl>,
-L<File::Find|File::Find>, L<pl2pm|pl2pm>, L<perlbug|perlbug>,
-L<h2ph|h2ph>, L<c2ph|c2ph>, L<h2xs|h2xs>, L<dprofpp|dprofpp>,
-L<Devel::Dprof>, L<perlcc|perlcc>
-
-=cut
diff --git a/contrib/perl5/pod/perlvar.pod b/contrib/perl5/pod/perlvar.pod
deleted file mode 100644
index 765ff04..0000000
--- a/contrib/perl5/pod/perlvar.pod
+++ /dev/null
@@ -1,1234 +0,0 @@
-=head1 NAME
-
-perlvar - Perl predefined variables
-
-=head1 DESCRIPTION
-
-=head2 Predefined Names
-
-The following names have special meaning to Perl. Most
-punctuation names have reasonable mnemonics, or analogs in the
-shells. Nevertheless, if you wish to use long variable names,
-you need only say
-
- use English;
-
-at the top of your program. This will alias all the short names to the
-long names in the current package. Some even have medium names,
-generally borrowed from B<awk>.
-
-If you don't mind the performance hit, variables that depend on the
-currently selected filehandle may instead be set by calling an
-appropriate object method on the IO::Handle object. (Summary lines
-below for this contain the word HANDLE.) First you must say
-
- use IO::Handle;
-
-after which you may use either
-
- method HANDLE EXPR
-
-or more safely,
-
- HANDLE->method(EXPR)
-
-Each method returns the old value of the IO::Handle attribute.
-The methods each take an optional EXPR, which if supplied specifies the
-new value for the IO::Handle attribute in question. If not supplied,
-most methods do nothing to the current value--except for
-autoflush(), which will assume a 1 for you, just to be different.
-Because loading in the IO::Handle class is an expensive operation, you should
-learn how to use the regular built-in variables.
-
-A few of these variables are considered "read-only". This means that if
-you try to assign to this variable, either directly or indirectly through
-a reference, you'll raise a run-time exception.
-
-The following list is ordered by scalar variables first, then the
-arrays, then the hashes.
-
-=over 8
-
-=item $ARG
-
-=item $_
-
-The default input and pattern-searching space. The following pairs are
-equivalent:
-
- while (<>) {...} # equivalent only in while!
- while (defined($_ = <>)) {...}
-
- /^Subject:/
- $_ =~ /^Subject:/
-
- tr/a-z/A-Z/
- $_ =~ tr/a-z/A-Z/
-
- chomp
- chomp($_)
-
-Here are the places where Perl will assume $_ even if you
-don't use it:
-
-=over 3
-
-=item *
-
-Various unary functions, including functions like ord() and int(), as well
-as the all file tests (C<-f>, C<-d>) except for C<-t>, which defaults to
-STDIN.
-
-=item *
-
-Various list functions like print() and unlink().
-
-=item *
-
-The pattern matching operations C<m//>, C<s///>, and C<tr///> when used
-without an C<=~> operator.
-
-=item *
-
-The default iterator variable in a C<foreach> loop if no other
-variable is supplied.
-
-=item *
-
-The implicit iterator variable in the grep() and map() functions.
-
-=item *
-
-The default place to put an input record when a C<< <FH> >>
-operation's result is tested by itself as the sole criterion of a C<while>
-test. Outside a C<while> test, this will not happen.
-
-=back
-
-(Mnemonic: underline is understood in certain operations.)
-
-=back
-
-=over 8
-
-=item $<I<digits>>
-
-Contains the subpattern from the corresponding set of capturing
-parentheses from the last pattern match, not counting patterns
-matched in nested blocks that have been exited already. (Mnemonic:
-like \digits.) These variables are all read-only and dynamically
-scoped to the current BLOCK.
-
-=item $MATCH
-
-=item $&
-
-The string matched by the last successful pattern match (not counting
-any matches hidden within a BLOCK or eval() enclosed by the current
-BLOCK). (Mnemonic: like & in some editors.) This variable is read-only
-and dynamically scoped to the current BLOCK.
-
-The use of this variable anywhere in a program imposes a considerable
-performance penalty on all regular expression matches. See L<BUGS>.
-
-=item $PREMATCH
-
-=item $`
-
-The string preceding whatever was matched by the last successful
-pattern match (not counting any matches hidden within a BLOCK or eval
-enclosed by the current BLOCK). (Mnemonic: C<`> often precedes a quoted
-string.) This variable is read-only.
-
-The use of this variable anywhere in a program imposes a considerable
-performance penalty on all regular expression matches. See L<BUGS>.
-
-=item $POSTMATCH
-
-=item $'
-
-The string following whatever was matched by the last successful
-pattern match (not counting any matches hidden within a BLOCK or eval()
-enclosed by the current BLOCK). (Mnemonic: C<'> often follows a quoted
-string.) Example:
-
- $_ = 'abcdefghi';
- /def/;
- print "$`:$&:$'\n"; # prints abc:def:ghi
-
-This variable is read-only and dynamically scoped to the current BLOCK.
-
-The use of this variable anywhere in a program imposes a considerable
-performance penalty on all regular expression matches. See L<BUGS>.
-
-=item $LAST_PAREN_MATCH
-
-=item $+
-
-The last bracket matched by the last search pattern. This is useful if
-you don't know which one of a set of alternative patterns matched. For
-example:
-
- /Version: (.*)|Revision: (.*)/ && ($rev = $+);
-
-(Mnemonic: be positive and forward looking.)
-This variable is read-only and dynamically scoped to the current BLOCK.
-
-=item @LAST_MATCH_END
-
-=item @+
-
-This array holds the offsets of the ends of the last successful
-submatches in the currently active dynamic scope. C<$+[0]> is
-the offset into the string of the end of the entire match. This
-is the same value as what the C<pos> function returns when called
-on the variable that was matched against. The I<n>th element
-of this array holds the offset of the I<n>th submatch, so
-C<$+[1]> is the offset past where $1 ends, C<$+[2]> the offset
-past where $2 ends, and so on. You can use C<$#+> to determine
-how many subgroups were in the last successful match. See the
-examples given for the C<@-> variable.
-
-=item $MULTILINE_MATCHING
-
-=item $*
-
-Set to a non-zero integer value to do multi-line matching within a
-string, 0 (or undefined) to tell Perl that it can assume that strings
-contain a single line, for the purpose of optimizing pattern matches.
-Pattern matches on strings containing multiple newlines can produce
-confusing results when C<$*> is 0 or undefined. Default is undefined.
-(Mnemonic: * matches multiple things.) This variable influences the
-interpretation of only C<^> and C<$>. A literal newline can be searched
-for even when C<$* == 0>.
-
-Use of C<$*> is deprecated in modern Perl, supplanted by
-the C</s> and C</m> modifiers on pattern matching.
-
-Assigning a non-numerical value to C<$*> triggers a warning (and makes
-C<$*> act if C<$* == 0>), while assigning a numerical value to C<$*>
-makes that an implicit C<int> is applied on the value.
-
-=item input_line_number HANDLE EXPR
-
-=item $INPUT_LINE_NUMBER
-
-=item $NR
-
-=item $.
-
-The current input record number for the last file handle from which
-you just read() (or called a C<seek> or C<tell> on). The value
-may be different from the actual physical line number in the file,
-depending on what notion of "line" is in effect--see C<$/> on how
-to change that. An explicit close on a filehandle resets the line
-number. Because C<< <> >> never does an explicit close, line
-numbers increase across ARGV files (but see examples in L<perlfunc/eof>).
-Consider this variable read-only: setting it does not reposition
-the seek pointer; you'll have to do that on your own. Localizing C<$.>
-has the effect of also localizing Perl's notion of "the last read
-filehandle". (Mnemonic: many programs use "." to mean the current line
-number.)
-
-=item input_record_separator HANDLE EXPR
-
-=item $INPUT_RECORD_SEPARATOR
-
-=item $RS
-
-=item $/
-
-The input record separator, newline by default. This
-influences Perl's idea of what a "line" is. Works like B<awk>'s RS
-variable, including treating empty lines as a terminator if set to
-the null string. (An empty line cannot contain any spaces
-or tabs.) You may set it to a multi-character string to match a
-multi-character terminator, or to C<undef> to read through the end
-of file. Setting it to C<"\n\n"> means something slightly
-different than setting to C<"">, if the file contains consecutive
-empty lines. Setting to C<""> will treat two or more consecutive
-empty lines as a single empty line. Setting to C<"\n\n"> will
-blindly assume that the next input character belongs to the next
-paragraph, even if it's a newline. (Mnemonic: / delimits
-line boundaries when quoting poetry.)
-
- undef $/; # enable "slurp" mode
- $_ = <FH>; # whole file now here
- s/\n[ \t]+/ /g;
-
-Remember: the value of C<$/> is a string, not a regex. B<awk> has to be
-better for something. :-)
-
-Setting C<$/> to a reference to an integer, scalar containing an integer, or
-scalar that's convertible to an integer will attempt to read records
-instead of lines, with the maximum record size being the referenced
-integer. So this:
-
- $/ = \32768; # or \"32768", or \$var_containing_32768
- open(FILE, $myfile);
- $_ = <FILE>;
-
-will read a record of no more than 32768 bytes from FILE. If you're
-not reading from a record-oriented file (or your OS doesn't have
-record-oriented files), then you'll likely get a full chunk of data
-with every read. If a record is larger than the record size you've
-set, you'll get the record back in pieces.
-
-On VMS, record reads are done with the equivalent of C<sysread>,
-so it's best not to mix record and non-record reads on the same
-file. (This is unlikely to be a problem, because any file you'd
-want to read in record mode is probably unusable in line mode.)
-Non-VMS systems do normal I/O, so it's safe to mix record and
-non-record reads of a file.
-
-See also L<perlport/"Newlines">. Also see C<$.>.
-
-=item autoflush HANDLE EXPR
-
-=item $OUTPUT_AUTOFLUSH
-
-=item $|
-
-If set to nonzero, forces a flush right away and after every write
-or print on the currently selected output channel. Default is 0
-(regardless of whether the channel is really buffered by the
-system or not; C<$|> tells you only whether you've asked Perl
-explicitly to flush after each write). STDOUT will
-typically be line buffered if output is to the terminal and block
-buffered otherwise. Setting this variable is useful primarily when
-you are outputting to a pipe or socket, such as when you are running
-a Perl program under B<rsh> and want to see the output as it's
-happening. This has no effect on input buffering. See L<perlfunc/getc>
-for that. (Mnemonic: when you want your pipes to be piping hot.)
-
-=item output_field_separator HANDLE EXPR
-
-=item $OUTPUT_FIELD_SEPARATOR
-
-=item $OFS
-
-=item $,
-
-The output field separator for the print operator. Ordinarily the
-print operator simply prints out its arguments without further
-adornment. To get behavior more like B<awk>, set this variable as
-you would set B<awk>'s OFS variable to specify what is printed
-between fields. (Mnemonic: what is printed when there is a "," in
-your print statement.)
-
-=item output_record_separator HANDLE EXPR
-
-=item $OUTPUT_RECORD_SEPARATOR
-
-=item $ORS
-
-=item $\
-
-The output record separator for the print operator. Ordinarily the
-print operator simply prints out its arguments as is, with no
-trailing newline or other end-of-record string added. To get
-behavior more like B<awk>, set this variable as you would set
-B<awk>'s ORS variable to specify what is printed at the end of the
-print. (Mnemonic: you set C<$\> instead of adding "\n" at the
-end of the print. Also, it's just like C<$/>, but it's what you
-get "back" from Perl.)
-
-=item $LIST_SEPARATOR
-
-=item $"
-
-This is like C<$,> except that it applies to array and slice values
-interpolated into a double-quoted string (or similar interpreted
-string). Default is a space. (Mnemonic: obvious, I think.)
-
-=item $SUBSCRIPT_SEPARATOR
-
-=item $SUBSEP
-
-=item $;
-
-The subscript separator for multidimensional array emulation. If you
-refer to a hash element as
-
- $foo{$a,$b,$c}
-
-it really means
-
- $foo{join($;, $a, $b, $c)}
-
-But don't put
-
- @foo{$a,$b,$c} # a slice--note the @
-
-which means
-
- ($foo{$a},$foo{$b},$foo{$c})
-
-Default is "\034", the same as SUBSEP in B<awk>. If your
-keys contain binary data there might not be any safe value for C<$;>.
-(Mnemonic: comma (the syntactic subscript separator) is a
-semi-semicolon. Yeah, I know, it's pretty lame, but C<$,> is already
-taken for something more important.)
-
-Consider using "real" multidimensional arrays as described
-in L<perllol>.
-
-=item $OFMT
-
-=item $#
-
-The output format for printed numbers. This variable is a half-hearted
-attempt to emulate B<awk>'s OFMT variable. There are times, however,
-when B<awk> and Perl have differing notions of what counts as
-numeric. The initial value is "%.I<n>g", where I<n> is the value
-of the macro DBL_DIG from your system's F<float.h>. This is different from
-B<awk>'s default OFMT setting of "%.6g", so you need to set C<$#>
-explicitly to get B<awk>'s value. (Mnemonic: # is the number sign.)
-
-Use of C<$#> is deprecated.
-
-=item format_page_number HANDLE EXPR
-
-=item $FORMAT_PAGE_NUMBER
-
-=item $%
-
-The current page number of the currently selected output channel.
-Used with formats.
-(Mnemonic: % is page number in B<nroff>.)
-
-=item format_lines_per_page HANDLE EXPR
-
-=item $FORMAT_LINES_PER_PAGE
-
-=item $=
-
-The current page length (printable lines) of the currently selected
-output channel. Default is 60.
-Used with formats.
-(Mnemonic: = has horizontal lines.)
-
-=item format_lines_left HANDLE EXPR
-
-=item $FORMAT_LINES_LEFT
-
-=item $-
-
-The number of lines left on the page of the currently selected output
-channel.
-Used with formats.
-(Mnemonic: lines_on_page - lines_printed.)
-
-=item @LAST_MATCH_START
-
-=item @-
-
-$-[0] is the offset of the start of the last successful match.
-C<$-[>I<n>C<]> is the offset of the start of the substring matched by
-I<n>-th subpattern, or undef if the subpattern did not match.
-
-Thus after a match against $_, $& coincides with C<substr $_, $-[0],
-$+[0] - $-[0]>. Similarly, C<$>I<n> coincides with C<substr $_, $-[>I<n>C<],
-$+[>I<n>C<] - $-[>I<n>C<]> if C<$-[>I<n>C<]> is defined, and $+ coincides with
-C<substr $_, $-[$#-], $+[$#-]>. One can use C<$#-> to find the last
-matched subgroup in the last successful match. Contrast with
-C<$#+>, the number of subgroups in the regular expression. Compare
-with C<@+>.
-
-This array holds the offsets of the beginnings of the last
-successful submatches in the currently active dynamic scope.
-C<$-[0]> is the offset into the string of the beginning of the
-entire match. The I<n>th element of this array holds the offset
-of the I<n>th submatch, so C<$+[1]> is the offset where $1
-begins, C<$+[2]> the offset where $2 begins, and so on.
-You can use C<$#-> to determine how many subgroups were in the
-last successful match. Compare with the C<@+> variable.
-
-After a match against some variable $var:
-
-=over 5
-
-=item C<$`> is the same as C<substr($var, 0, $-[0])>
-
-=item C<$&> is the same as C<substr($var, $-[0], $+[0] - $-[0])>
-
-=item C<$'> is the same as C<substr($var, $+[0])>
-
-=item C<$1> is the same as C<substr($var, $-[1], $+[1] - $-[1])>
-
-=item C<$2> is the same as C<substr($var, $-[2], $+[2] - $-[2])>
-
-=item C<$3> is the same as C<substr $var, $-[3], $+[3] - $-[3])>
-
-=back
-
-=item format_name HANDLE EXPR
-
-=item $FORMAT_NAME
-
-=item $~
-
-The name of the current report format for the currently selected output
-channel. Default is the name of the filehandle. (Mnemonic: brother to
-C<$^>.)
-
-=item format_top_name HANDLE EXPR
-
-=item $FORMAT_TOP_NAME
-
-=item $^
-
-The name of the current top-of-page format for the currently selected
-output channel. Default is the name of the filehandle with _TOP
-appended. (Mnemonic: points to top of page.)
-
-=item format_line_break_characters HANDLE EXPR
-
-=item $FORMAT_LINE_BREAK_CHARACTERS
-
-=item $:
-
-The current set of characters after which a string may be broken to
-fill continuation fields (starting with ^) in a format. Default is
-S<" \n-">, to break on whitespace or hyphens. (Mnemonic: a "colon" in
-poetry is a part of a line.)
-
-=item format_formfeed HANDLE EXPR
-
-=item $FORMAT_FORMFEED
-
-=item $^L
-
-What formats output as a form feed. Default is \f.
-
-=item $ACCUMULATOR
-
-=item $^A
-
-The current value of the write() accumulator for format() lines. A format
-contains formline() calls that put their result into C<$^A>. After
-calling its format, write() prints out the contents of C<$^A> and empties.
-So you never really see the contents of C<$^A> unless you call
-formline() yourself and then look at it. See L<perlform> and
-L<perlfunc/formline()>.
-
-=item $CHILD_ERROR
-
-=item $?
-
-The status returned by the last pipe close, backtick (C<``>) command,
-successful call to wait() or waitpid(), or from the system()
-operator. This is just the 16-bit status word returned by the
-wait() system call (or else is made up to look like it). Thus, the
-exit value of the subprocess is really (C<<< $? >> 8 >>>), and
-C<$? & 127> gives which signal, if any, the process died from, and
-C<$? & 128> reports whether there was a core dump. (Mnemonic:
-similar to B<sh> and B<ksh>.)
-
-Additionally, if the C<h_errno> variable is supported in C, its value
-is returned via $? if any C<gethost*()> function fails.
-
-If you have installed a signal handler for C<SIGCHLD>, the
-value of C<$?> will usually be wrong outside that handler.
-
-Inside an C<END> subroutine C<$?> contains the value that is going to be
-given to C<exit()>. You can modify C<$?> in an C<END> subroutine to
-change the exit status of your program. For example:
-
- END {
- $? = 1 if $? == 255; # die would make it 255
- }
-
-Under VMS, the pragma C<use vmsish 'status'> makes C<$?> reflect the
-actual VMS exit status, instead of the default emulation of POSIX
-status.
-
-Also see L<Error Indicators>.
-
-=item $OS_ERROR
-
-=item $ERRNO
-
-=item $!
-
-If used numerically, yields the current value of the C C<errno>
-variable, with all the usual caveats. (This means that you shouldn't
-depend on the value of C<$!> to be anything in particular unless
-you've gotten a specific error return indicating a system error.)
-If used an a string, yields the corresponding system error string.
-You can assign a number to C<$!> to set I<errno> if, for instance,
-you want C<"$!"> to return the string for error I<n>, or you want
-to set the exit value for the die() operator. (Mnemonic: What just
-went bang?)
-
-Also see L<Error Indicators>.
-
-=item $EXTENDED_OS_ERROR
-
-=item $^E
-
-Error information specific to the current operating system. At
-the moment, this differs from C<$!> under only VMS, OS/2, and Win32
-(and for MacPerl). On all other platforms, C<$^E> is always just
-the same as C<$!>.
-
-Under VMS, C<$^E> provides the VMS status value from the last
-system error. This is more specific information about the last
-system error than that provided by C<$!>. This is particularly
-important when C<$!> is set to B<EVMSERR>.
-
-Under OS/2, C<$^E> is set to the error code of the last call to
-OS/2 API either via CRT, or directly from perl.
-
-Under Win32, C<$^E> always returns the last error information
-reported by the Win32 call C<GetLastError()> which describes
-the last error from within the Win32 API. Most Win32-specific
-code will report errors via C<$^E>. ANSI C and Unix-like calls
-set C<errno> and so most portable Perl code will report errors
-via C<$!>.
-
-Caveats mentioned in the description of C<$!> generally apply to
-C<$^E>, also. (Mnemonic: Extra error explanation.)
-
-Also see L<Error Indicators>.
-
-=item $EVAL_ERROR
-
-=item $@
-
-The Perl syntax error message from the last eval() operator. If null, the
-last eval() parsed and executed correctly (although the operations you
-invoked may have failed in the normal fashion). (Mnemonic: Where was
-the syntax error "at"?)
-
-Warning messages are not collected in this variable. You can,
-however, set up a routine to process warnings by setting C<$SIG{__WARN__}>
-as described below.
-
-Also see L<Error Indicators>.
-
-=item $PROCESS_ID
-
-=item $PID
-
-=item $$
-
-The process number of the Perl running this script. You should
-consider this variable read-only, although it will be altered
-across fork() calls. (Mnemonic: same as shells.)
-
-=item $REAL_USER_ID
-
-=item $UID
-
-=item $<
-
-The real uid of this process. (Mnemonic: it's the uid you came I<from>,
-if you're running setuid.)
-
-=item $EFFECTIVE_USER_ID
-
-=item $EUID
-
-=item $>
-
-The effective uid of this process. Example:
-
- $< = $>; # set real to effective uid
- ($<,$>) = ($>,$<); # swap real and effective uid
-
-(Mnemonic: it's the uid you went I<to>, if you're running setuid.)
-C<< $< >> and C<< $> >> can be swapped only on machines
-supporting setreuid().
-
-=item $REAL_GROUP_ID
-
-=item $GID
-
-=item $(
-
-The real gid of this process. If you are on a machine that supports
-membership in multiple groups simultaneously, gives a space separated
-list of groups you are in. The first number is the one returned by
-getgid(), and the subsequent ones by getgroups(), one of which may be
-the same as the first number.
-
-However, a value assigned to C<$(> must be a single number used to
-set the real gid. So the value given by C<$(> should I<not> be assigned
-back to C<$(> without being forced numeric, such as by adding zero.
-
-(Mnemonic: parentheses are used to I<group> things. The real gid is the
-group you I<left>, if you're running setgid.)
-
-=item $EFFECTIVE_GROUP_ID
-
-=item $EGID
-
-=item $)
-
-The effective gid of this process. If you are on a machine that
-supports membership in multiple groups simultaneously, gives a space
-separated list of groups you are in. The first number is the one
-returned by getegid(), and the subsequent ones by getgroups(), one of
-which may be the same as the first number.
-
-Similarly, a value assigned to C<$)> must also be a space-separated
-list of numbers. The first number sets the effective gid, and
-the rest (if any) are passed to setgroups(). To get the effect of an
-empty list for setgroups(), just repeat the new effective gid; that is,
-to force an effective gid of 5 and an effectively empty setgroups()
-list, say C< $) = "5 5" >.
-
-(Mnemonic: parentheses are used to I<group> things. The effective gid
-is the group that's I<right> for you, if you're running setgid.)
-
-C<< $< >>, C<< $> >>, C<$(> and C<$)> can be set only on
-machines that support the corresponding I<set[re][ug]id()> routine. C<$(>
-and C<$)> can be swapped only on machines supporting setregid().
-
-=item $PROGRAM_NAME
-
-=item $0
-
-Contains the name of the program being executed. On some operating
-systems assigning to C<$0> modifies the argument area that the B<ps>
-program sees. This is more useful as a way of indicating the current
-program state than it is for hiding the program you're running.
-(Mnemonic: same as B<sh> and B<ksh>.)
-
-Note for BSD users: setting C<$0> does not completely remove "perl"
-from the ps(1) output. For example, setting C<$0> to C<"foobar"> will
-result in C<"perl: foobar (perl)">. This is an operating system
-feature.
-
-=item $[
-
-The index of the first element in an array, and of the first character
-in a substring. Default is 0, but you could theoretically set it
-to 1 to make Perl behave more like B<awk> (or Fortran) when
-subscripting and when evaluating the index() and substr() functions.
-(Mnemonic: [ begins subscripts.)
-
-As of release 5 of Perl, assignment to C<$[> is treated as a compiler
-directive, and cannot influence the behavior of any other file.
-Its use is highly discouraged.
-
-=item $]
-
-The version + patchlevel / 1000 of the Perl interpreter. This variable
-can be used to determine whether the Perl interpreter executing a
-script is in the right range of versions. (Mnemonic: Is this version
-of perl in the right bracket?) Example:
-
- warn "No checksumming!\n" if $] < 3.019;
-
-See also the documentation of C<use VERSION> and C<require VERSION>
-for a convenient way to fail if the running Perl interpreter is too old.
-
-The use of this variable is deprecated. The floating point representation
-can sometimes lead to inaccurate numeric comparisons. See C<$^V> for a
-more modern representation of the Perl version that allows accurate string
-comparisons.
-
-=item $COMPILING
-
-=item $^C
-
-The current value of the flag associated with the B<-c> switch.
-Mainly of use with B<-MO=...> to allow code to alter its behavior
-when being compiled, such as for example to AUTOLOAD at compile
-time rather than normal, deferred loading. See L<perlcc>. Setting
-C<$^C = 1> is similar to calling C<B::minus_c>.
-
-=item $DEBUGGING
-
-=item $^D
-
-The current value of the debugging flags. (Mnemonic: value of B<-D>
-switch.)
-
-=item $SYSTEM_FD_MAX
-
-=item $^F
-
-The maximum system file descriptor, ordinarily 2. System file
-descriptors are passed to exec()ed processes, while higher file
-descriptors are not. Also, during an open(), system file descriptors are
-preserved even if the open() fails. (Ordinary file descriptors are
-closed before the open() is attempted.) The close-on-exec
-status of a file descriptor will be decided according to the value of
-C<$^F> when the corresponding file, pipe, or socket was opened, not the
-time of the exec().
-
-=item $^H
-
-WARNING: This variable is strictly for internal use only. Its availability,
-behavior, and contents are subject to change without notice.
-
-This variable contains compile-time hints for the Perl interpreter. At the
-end of compilation of a BLOCK the value of this variable is restored to the
-value when the interpreter started to compile the BLOCK.
-
-When perl begins to parse any block construct that provides a lexical scope
-(e.g., eval body, required file, subroutine body, loop body, or conditional
-block), the existing value of $^H is saved, but its value is left unchanged.
-When the compilation of the block is completed, it regains the saved value.
-Between the points where its value is saved and restored, code that
-executes within BEGIN blocks is free to change the value of $^H.
-
-This behavior provides the semantic of lexical scoping, and is used in,
-for instance, the C<use strict> pragma.
-
-The contents should be an integer; different bits of it are used for
-different pragmatic flags. Here's an example:
-
- sub add_100 { $^H |= 0x100 }
-
- sub foo {
- BEGIN { add_100() }
- bar->baz($boon);
- }
-
-Consider what happens during execution of the BEGIN block. At this point
-the BEGIN block has already been compiled, but the body of foo() is still
-being compiled. The new value of $^H will therefore be visible only while
-the body of foo() is being compiled.
-
-Substitution of the above BEGIN block with:
-
- BEGIN { require strict; strict->import('vars') }
-
-demonstrates how C<use strict 'vars'> is implemented. Here's a conditional
-version of the same lexical pragma:
-
- BEGIN { require strict; strict->import('vars') if $condition }
-
-=item %^H
-
-WARNING: This variable is strictly for internal use only. Its availability,
-behavior, and contents are subject to change without notice.
-
-The %^H hash provides the same scoping semantic as $^H. This makes it
-useful for implementation of lexically scoped pragmas.
-
-=item $INPLACE_EDIT
-
-=item $^I
-
-The current value of the inplace-edit extension. Use C<undef> to disable
-inplace editing. (Mnemonic: value of B<-i> switch.)
-
-=item $^M
-
-By default, running out of memory is an untrappable, fatal error.
-However, if suitably built, Perl can use the contents of C<$^M>
-as an emergency memory pool after die()ing. Suppose that your Perl
-were compiled with -DPERL_EMERGENCY_SBRK and used Perl's malloc.
-Then
-
- $^M = 'a' x (1 << 16);
-
-would allocate a 64K buffer for use in an emergency. See the
-F<INSTALL> file in the Perl distribution for information on how to
-enable this option. To discourage casual use of this advanced
-feature, there is no L<English|English> long name for this variable.
-
-=item $OSNAME
-
-=item $^O
-
-The name of the operating system under which this copy of Perl was
-built, as determined during the configuration process. The value
-is identical to C<$Config{'osname'}>. See also L<Config> and the
-B<-V> command-line switch documented in L<perlrun>.
-
-=item $PERLDB
-
-=item $^P
-
-The internal variable for debugging support. The meanings of the
-various bits are subject to change, but currently indicate:
-
-=over 6
-
-=item 0x01
-
-Debug subroutine enter/exit.
-
-=item 0x02
-
-Line-by-line debugging.
-
-=item 0x04
-
-Switch off optimizations.
-
-=item 0x08
-
-Preserve more data for future interactive inspections.
-
-=item 0x10
-
-Keep info about source lines on which a subroutine is defined.
-
-=item 0x20
-
-Start with single-step on.
-
-=item 0x40
-
-Use subroutine address instead of name when reporting.
-
-=item 0x80
-
-Report C<goto &subroutine> as well.
-
-=item 0x100
-
-Provide informative "file" names for evals based on the place they were compiled.
-
-=item 0x200
-
-Provide informative names to anonymous subroutines based on the place they
-were compiled.
-
-=back
-
-Some bits may be relevant at compile-time only, some at
-run-time only. This is a new mechanism and the details may change.
-
-=item $LAST_REGEXP_CODE_RESULT
-
-=item $^R
-
-The result of evaluation of the last successful C<(?{ code })>
-regular expression assertion (see L<perlre>). May be written to.
-
-=item $EXCEPTIONS_BEING_CAUGHT
-
-=item $^S
-
-Current state of the interpreter. Undefined if parsing of the current
-module/eval is not finished (may happen in $SIG{__DIE__} and
-$SIG{__WARN__} handlers). True if inside an eval(), otherwise false.
-
-=item $BASETIME
-
-=item $^T
-
-The time at which the program began running, in seconds since the
-epoch (beginning of 1970). The values returned by the B<-M>, B<-A>,
-and B<-C> filetests are based on this value.
-
-=item $PERL_VERSION
-
-=item $^V
-
-The revision, version, and subversion of the Perl interpreter, represented
-as a string composed of characters with those ordinals. Thus in Perl v5.6.0
-it equals C<chr(5) . chr(6) . chr(0)> and will return true for
-C<$^V eq v5.6.0>. Note that the characters in this string value can
-potentially be in Unicode range.
-
-This can be used to determine whether the Perl interpreter executing a
-script is in the right range of versions. (Mnemonic: use ^V for Version
-Control.) Example:
-
- warn "No \"our\" declarations!\n" if $^V and $^V lt v5.6.0;
-
-See the documentation of C<use VERSION> and C<require VERSION>
-for a convenient way to fail if the running Perl interpreter is too old.
-
-See also C<$]> for an older representation of the Perl version.
-
-=item $WARNING
-
-=item $^W
-
-The current value of the warning switch, initially true if B<-w>
-was used, false otherwise, but directly modifiable. (Mnemonic:
-related to the B<-w> switch.) See also L<warnings>.
-
-=item ${^WARNING_BITS}
-
-The current set of warning checks enabled by the C<use warnings> pragma.
-See the documentation of C<warnings> for more details.
-
-=item ${^WIDE_SYSTEM_CALLS}
-
-Global flag that enables system calls made by Perl to use wide character
-APIs native to the system, if available. This is currently only implemented
-on the Windows platform.
-
-This can also be enabled from the command line using the C<-C> switch.
-
-The initial value is typically C<0> for compatibility with Perl versions
-earlier than 5.6, but may be automatically set to C<1> by Perl if the system
-provides a user-settable default (e.g., C<$ENV{LC_CTYPE}>).
-
-The C<bytes> pragma always overrides the effect of this flag in the current
-lexical scope. See L<bytes>.
-
-=item $EXECUTABLE_NAME
-
-=item $^X
-
-The name that the Perl binary itself was executed as, from C's C<argv[0]>.
-This may not be a full pathname, nor even necessarily in your path.
-
-=item $ARGV
-
-contains the name of the current file when reading from <>.
-
-=item @ARGV
-
-The array @ARGV contains the command-line arguments intended for
-the script. C<$#ARGV> is generally the number of arguments minus
-one, because C<$ARGV[0]> is the first argument, I<not> the program's
-command name itself. See C<$0> for the command name.
-
-=item @INC
-
-The array @INC contains the list of places that the C<do EXPR>,
-C<require>, or C<use> constructs look for their library files. It
-initially consists of the arguments to any B<-I> command-line
-switches, followed by the default Perl library, probably
-F</usr/local/lib/perl>, followed by ".", to represent the current
-directory. If you need to modify this at runtime, you should use
-the C<use lib> pragma to get the machine-dependent library properly
-loaded also:
-
- use lib '/mypath/libdir/';
- use SomeMod;
-
-=item @_
-
-Within a subroutine the array @_ contains the parameters passed to that
-subroutine. See L<perlsub>.
-
-=item %INC
-
-The hash %INC contains entries for each filename included via the
-C<do>, C<require>, or C<use> operators. The key is the filename
-you specified (with module names converted to pathnames), and the
-value is the location of the file found. The C<require>
-operator uses this hash to determine whether a particular file has
-already been included.
-
-=item %ENV
-
-=item $ENV{expr}
-
-The hash %ENV contains your current environment. Setting a
-value in C<ENV> changes the environment for any child processes
-you subsequently fork() off.
-
-=item %SIG
-
-=item $SIG{expr}
-
-The hash %SIG contains signal handlers for signals. For example:
-
- sub handler { # 1st argument is signal name
- my($sig) = @_;
- print "Caught a SIG$sig--shutting down\n";
- close(LOG);
- exit(0);
- }
-
- $SIG{'INT'} = \&handler;
- $SIG{'QUIT'} = \&handler;
- ...
- $SIG{'INT'} = 'DEFAULT'; # restore default action
- $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT
-
-Using a value of C<'IGNORE'> usually has the effect of ignoring the
-signal, except for the C<CHLD> signal. See L<perlipc> for more about
-this special case.
-
-Here are some other examples:
-
- $SIG{"PIPE"} = "Plumber"; # assumes main::Plumber (not recommended)
- $SIG{"PIPE"} = \&Plumber; # just fine; assume current Plumber
- $SIG{"PIPE"} = *Plumber; # somewhat esoteric
- $SIG{"PIPE"} = Plumber(); # oops, what did Plumber() return??
-
-Be sure not to use a bareword as the name of a signal handler,
-lest you inadvertently call it.
-
-If your system has the sigaction() function then signal handlers are
-installed using it. This means you get reliable signal handling. If
-your system has the SA_RESTART flag it is used when signals handlers are
-installed. This means that system calls for which restarting is supported
-continue rather than returning when a signal arrives. If you want your
-system calls to be interrupted by signal delivery then do something like
-this:
-
- use POSIX ':signal_h';
-
- my $alarm = 0;
- sigaction SIGALRM, new POSIX::SigAction sub { $alarm = 1 }
- or die "Error setting SIGALRM handler: $!\n";
-
-See L<POSIX>.
-
-Certain internal hooks can be also set using the %SIG hash. The
-routine indicated by C<$SIG{__WARN__}> is called when a warning message is
-about to be printed. The warning message is passed as the first
-argument. The presence of a __WARN__ hook causes the ordinary printing
-of warnings to STDERR to be suppressed. You can use this to save warnings
-in a variable, or turn warnings into fatal errors, like this:
-
- local $SIG{__WARN__} = sub { die $_[0] };
- eval $proggie;
-
-The routine indicated by C<$SIG{__DIE__}> is called when a fatal exception
-is about to be thrown. The error message is passed as the first
-argument. When a __DIE__ hook routine returns, the exception
-processing continues as it would have in the absence of the hook,
-unless the hook routine itself exits via a C<goto>, a loop exit, or a die().
-The C<__DIE__> handler is explicitly disabled during the call, so that you
-can die from a C<__DIE__> handler. Similarly for C<__WARN__>.
-
-Due to an implementation glitch, the C<$SIG{__DIE__}> hook is called
-even inside an eval(). Do not use this to rewrite a pending exception
-in C<$@>, or as a bizarre substitute for overriding CORE::GLOBAL::die().
-This strange action at a distance may be fixed in a future release
-so that C<$SIG{__DIE__}> is only called if your program is about
-to exit, as was the original intent. Any other use is deprecated.
-
-C<__DIE__>/C<__WARN__> handlers are very special in one respect:
-they may be called to report (probable) errors found by the parser.
-In such a case the parser may be in inconsistent state, so any
-attempt to evaluate Perl code from such a handler will probably
-result in a segfault. This means that warnings or errors that
-result from parsing Perl should be used with extreme caution, like
-this:
-
- require Carp if defined $^S;
- Carp::confess("Something wrong") if defined &Carp::confess;
- die "Something wrong, but could not load Carp to give backtrace...
- To see backtrace try starting Perl with -MCarp switch";
-
-Here the first line will load Carp I<unless> it is the parser who
-called the handler. The second line will print backtrace and die if
-Carp was available. The third line will be executed only if Carp was
-not available.
-
-See L<perlfunc/die>, L<perlfunc/warn>, L<perlfunc/eval>, and
-L<warnings> for additional information.
-
-=back
-
-=head2 Error Indicators
-
-The variables C<$@>, C<$!>, C<$^E>, and C<$?> contain information
-about different types of error conditions that may appear during
-execution of a Perl program. The variables are shown ordered by
-the "distance" between the subsystem which reported the error and
-the Perl process. They correspond to errors detected by the Perl
-interpreter, C library, operating system, or an external program,
-respectively.
-
-To illustrate the differences between these variables, consider the
-following Perl expression, which uses a single-quoted string:
-
- eval q{
- open PIPE, "/cdrom/install |";
- @res = <PIPE>;
- close PIPE or die "bad pipe: $?, $!";
- };
-
-After execution of this statement all 4 variables may have been set.
-
-C<$@> is set if the string to be C<eval>-ed did not compile (this
-may happen if C<open> or C<close> were imported with bad prototypes),
-or if Perl code executed during evaluation die()d . In these cases
-the value of $@ is the compile error, or the argument to C<die>
-(which will interpolate C<$!> and C<$?>!). (See also L<Fatal>,
-though.)
-
-When the eval() expression above is executed, open(), C<< <PIPE> >>,
-and C<close> are translated to calls in the C run-time library and
-thence to the operating system kernel. C<$!> is set to the C library's
-C<errno> if one of these calls fails.
-
-Under a few operating systems, C<$^E> may contain a more verbose
-error indicator, such as in this case, "CDROM tray not closed."
-Systems that do not support extended error messages leave C<$^E>
-the same as C<$!>.
-
-Finally, C<$?> may be set to non-0 value if the external program
-F</cdrom/install> fails. The upper eight bits reflect specific
-error conditions encountered by the program (the program's exit()
-value). The lower eight bits reflect mode of failure, like signal
-death and core dump information See wait(2) for details. In
-contrast to C<$!> and C<$^E>, which are set only if error condition
-is detected, the variable C<$?> is set on each C<wait> or pipe
-C<close>, overwriting the old value. This is more like C<$@>, which
-on every eval() is always set on failure and cleared on success.
-
-For more details, see the individual descriptions at C<$@>, C<$!>, C<$^E>,
-and C<$?>.
-
-=head2 Technical Note on the Syntax of Variable Names
-
-Variable names in Perl can have several formats. Usually, they
-must begin with a letter or underscore, in which case they can be
-arbitrarily long (up to an internal limit of 251 characters) and
-may contain letters, digits, underscores, or the special sequence
-C<::> or C<'>. In this case, the part before the last C<::> or
-C<'> is taken to be a I<package qualifier>; see L<perlmod>.
-
-Perl variable names may also be a sequence of digits or a single
-punctuation or control character. These names are all reserved for
-special uses by Perl; for example, the all-digits names are used
-to hold data captured by backreferences after a regular expression
-match. Perl has a special syntax for the single-control-character
-names: It understands C<^X> (caret C<X>) to mean the control-C<X>
-character. For example, the notation C<$^W> (dollar-sign caret
-C<W>) is the scalar variable whose name is the single character
-control-C<W>. This is better than typing a literal control-C<W>
-into your program.
-
-Finally, new in Perl 5.6, Perl variable names may be alphanumeric
-strings that begin with control characters (or better yet, a caret).
-These variables must be written in the form C<${^Foo}>; the braces
-are not optional. C<${^Foo}> denotes the scalar variable whose
-name is a control-C<F> followed by two C<o>'s. These variables are
-reserved for future special uses by Perl, except for the ones that
-begin with C<^_> (control-underscore or caret-underscore). No
-control-character name that begins with C<^_> will acquire a special
-meaning in any future version of Perl; such names may therefore be
-used safely in programs. C<$^_> itself, however, I<is> reserved.
-
-Perl identifiers that begin with digits, control characters, or
-punctuation characters are exempt from the effects of the C<package>
-declaration and are always forced to be in package C<main>. A few
-other names are also exempt:
-
- ENV STDIN
- INC STDOUT
- ARGV STDERR
- ARGVOUT
- SIG
-
-In particular, the new special C<${^_XYZ}> variables are always taken
-to be in package C<main>, regardless of any C<package> declarations
-presently in scope.
-
-=head1 BUGS
-
-Due to an unfortunate accident of Perl's implementation, C<use
-English> imposes a considerable performance penalty on all regular
-expression matches in a program, regardless of whether they occur
-in the scope of C<use English>. For that reason, saying C<use
-English> in libraries is strongly discouraged. See the
-Devel::SawAmpersand module documentation from CPAN
-(http://www.perl.com/CPAN/modules/by-module/Devel/)
-for more information.
-
-Having to even think about the C<$^S> variable in your exception
-handlers is simply wrong. C<$SIG{__DIE__}> as currently implemented
-invites grievous and difficult to track down errors. Avoid it
-and use an C<END{}> or CORE::GLOBAL::die override instead.
diff --git a/contrib/perl5/pod/perlxs.pod b/contrib/perl5/pod/perlxs.pod
deleted file mode 100644
index 541f75e..0000000
--- a/contrib/perl5/pod/perlxs.pod
+++ /dev/null
@@ -1,1780 +0,0 @@
-=head1 NAME
-
-perlxs - XS language reference manual
-
-=head1 DESCRIPTION
-
-=head2 Introduction
-
-XS is an interface description file format used to create an extension
-interface between Perl and C code (or a C library) which one wishes
-to use with Perl. The XS interface is combined with the library to
-create a new library which can then be either dynamically loaded
-or statically linked into perl. The XS interface description is
-written in the XS language and is the core component of the Perl
-extension interface.
-
-An B<XSUB> forms the basic unit of the XS interface. After compilation
-by the B<xsubpp> compiler, each XSUB amounts to a C function definition
-which will provide the glue between Perl calling conventions and C
-calling conventions.
-
-The glue code pulls the arguments from the Perl stack, converts these
-Perl values to the formats expected by a C function, call this C function,
-transfers the return values of the C function back to Perl.
-Return values here may be a conventional C return value or any C
-function arguments that may serve as output parameters. These return
-values may be passed back to Perl either by putting them on the
-Perl stack, or by modifying the arguments supplied from the Perl side.
-
-The above is a somewhat simplified view of what really happens. Since
-Perl allows more flexible calling conventions than C, XSUBs may do much
-more in practice, such as checking input parameters for validity,
-throwing exceptions (or returning undef/empty list) if the return value
-from the C function indicates failure, calling different C functions
-based on numbers and types of the arguments, providing an object-oriented
-interface, etc.
-
-Of course, one could write such glue code directly in C. However, this
-would be a tedious task, especially if one needs to write glue for
-multiple C functions, and/or one is not familiar enough with the Perl
-stack discipline and other such arcana. XS comes to the rescue here:
-instead of writing this glue C code in long-hand, one can write
-a more concise short-hand I<description> of what should be done by
-the glue, and let the XS compiler B<xsubpp> handle the rest.
-
-The XS language allows one to describe the mapping between how the C
-routine is used, and how the corresponding Perl routine is used. It
-also allows creation of Perl routines which are directly translated to
-C code and which are not related to a pre-existing C function. In cases
-when the C interface coincides with the Perl interface, the XSUB
-declaration is almost identical to a declaration of a C function (in K&R
-style). In such circumstances, there is another tool called C<h2xs>
-that is able to translate an entire C header file into a corresponding
-XS file that will provide glue to the functions/macros described in
-the header file.
-
-The XS compiler is called B<xsubpp>. This compiler creates
-the constructs necessary to let an XSUB manipulate Perl values, and
-creates the glue necessary to let Perl call the XSUB. The compiler
-uses B<typemaps> to determine how to map C function parameters
-and output values to Perl values and back. The default typemap
-(which comes with Perl) handles many common C types. A supplementary
-typemap may also be needed to handle any special structures and types
-for the library being linked.
-
-A file in XS format starts with a C language section which goes until the
-first C<MODULE =Z<>> directive. Other XS directives and XSUB definitions
-may follow this line. The "language" used in this part of the file
-is usually referred to as the XS language. B<xsubpp> recognizes and
-skips POD (see L<perlpod>) in both the C and XS language sections, which
-allows the XS file to contain embedded documentation.
-
-See L<perlxstut> for a tutorial on the whole extension creation process.
-
-Note: For some extensions, Dave Beazley's SWIG system may provide a
-significantly more convenient mechanism for creating the extension
-glue code. See http://www.swig.org/ for more information.
-
-=head2 On The Road
-
-Many of the examples which follow will concentrate on creating an interface
-between Perl and the ONC+ RPC bind library functions. The rpcb_gettime()
-function is used to demonstrate many features of the XS language. This
-function has two parameters; the first is an input parameter and the second
-is an output parameter. The function also returns a status value.
-
- bool_t rpcb_gettime(const char *host, time_t *timep);
-
-From C this function will be called with the following
-statements.
-
- #include <rpc/rpc.h>
- bool_t status;
- time_t timep;
- status = rpcb_gettime( "localhost", &timep );
-
-If an XSUB is created to offer a direct translation between this function
-and Perl, then this XSUB will be used from Perl with the following code.
-The $status and $timep variables will contain the output of the function.
-
- use RPC;
- $status = rpcb_gettime( "localhost", $timep );
-
-The following XS file shows an XS subroutine, or XSUB, which
-demonstrates one possible interface to the rpcb_gettime()
-function. This XSUB represents a direct translation between
-C and Perl and so preserves the interface even from Perl.
-This XSUB will be invoked from Perl with the usage shown
-above. Note that the first three #include statements, for
-C<EXTERN.h>, C<perl.h>, and C<XSUB.h>, will always be present at the
-beginning of an XS file. This approach and others will be
-expanded later in this document.
-
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
- #include <rpc/rpc.h>
-
- MODULE = RPC PACKAGE = RPC
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep
-
-Any extension to Perl, including those containing XSUBs,
-should have a Perl module to serve as the bootstrap which
-pulls the extension into Perl. This module will export the
-extension's functions and variables to the Perl program and
-will cause the extension's XSUBs to be linked into Perl.
-The following module will be used for most of the examples
-in this document and should be used from Perl with the C<use>
-command as shown earlier. Perl modules are explained in
-more detail later in this document.
-
- package RPC;
-
- require Exporter;
- require DynaLoader;
- @ISA = qw(Exporter DynaLoader);
- @EXPORT = qw( rpcb_gettime );
-
- bootstrap RPC;
- 1;
-
-Throughout this document a variety of interfaces to the rpcb_gettime()
-XSUB will be explored. The XSUBs will take their parameters in different
-orders or will take different numbers of parameters. In each case the
-XSUB is an abstraction between Perl and the real C rpcb_gettime()
-function, and the XSUB must always ensure that the real rpcb_gettime()
-function is called with the correct parameters. This abstraction will
-allow the programmer to create a more Perl-like interface to the C
-function.
-
-=head2 The Anatomy of an XSUB
-
-The simplest XSUBs consist of 3 parts: a description of the return
-value, the name of the XSUB routine and the names of its arguments,
-and a description of types or formats of the arguments.
-
-The following XSUB allows a Perl program to access a C library function
-called sin(). The XSUB will imitate the C function which takes a single
-argument and returns a single value.
-
- double
- sin(x)
- double x
-
-Optionally, one can merge the description of types and the list of
-argument names, rewriting this as
-
- double
- sin(double x)
-
-This makes this XSUB look similar to an ANSI C declaration. An optional
-semicolon is allowed after the argument list, as in
-
- double
- sin(double x);
-
-Parameters with C pointer types can have different semantic: C functions
-with similar declarations
-
- bool string_looks_as_a_number(char *s);
- bool make_char_uppercase(char *c);
-
-are used in absolutely incompatible manner. Parameters to these functions
-could be described B<xsubpp> like this:
-
- char * s
- char &c
-
-Both these XS declarations correspond to the C<char*> C type, but they have
-different semantics, see L<"The & Unary Operator">.
-
-It is convenient to think that the indirection operator
-C<*> should be considered as a part of the type and the address operator C<&>
-should be considered part of the variable. See L<"The Typemap">
-for more info about handling qualifiers and unary operators in C types.
-
-The function name and the return type must be placed on
-separate lines and should be flush left-adjusted.
-
- INCORRECT CORRECT
-
- double sin(x) double
- double x sin(x)
- double x
-
-The rest of the function description may be indented or left-adjusted. The
-following example shows a function with its body left-adjusted. Most
-examples in this document will indent the body for better readability.
-
- CORRECT
-
- double
- sin(x)
- double x
-
-More complicated XSUBs may contain many other sections. Each section of
-an XSUB starts with the corresponding keyword, such as INIT: or CLEANUP:.
-However, the first two lines of an XSUB always contain the same data:
-descriptions of the return type and the names of the function and its
-parameters. Whatever immediately follows these is considered to be
-an INPUT: section unless explicitly marked with another keyword.
-(See L<The INPUT: Keyword>.)
-
-An XSUB section continues until another section-start keyword is found.
-
-=head2 The Argument Stack
-
-The Perl argument stack is used to store the values which are
-sent as parameters to the XSUB and to store the XSUB's
-return value(s). In reality all Perl functions (including non-XSUB
-ones) keep their values on this stack all the same time, each limited
-to its own range of positions on the stack. In this document the
-first position on that stack which belongs to the active
-function will be referred to as position 0 for that function.
-
-XSUBs refer to their stack arguments with the macro B<ST(x)>, where I<x>
-refers to a position in this XSUB's part of the stack. Position 0 for that
-function would be known to the XSUB as ST(0). The XSUB's incoming
-parameters and outgoing return values always begin at ST(0). For many
-simple cases the B<xsubpp> compiler will generate the code necessary to
-handle the argument stack by embedding code fragments found in the
-typemaps. In more complex cases the programmer must supply the code.
-
-=head2 The RETVAL Variable
-
-The RETVAL variable is a special C variable that is declared automatically
-for you. The C type of RETVAL matches the return type of the C library
-function. The B<xsubpp> compiler will declare this variable in each XSUB
-with non-C<void> return type. By default the generated C function
-will use RETVAL to hold the return value of the C library function being
-called. In simple cases the value of RETVAL will be placed in ST(0) of
-the argument stack where it can be received by Perl as the return value
-of the XSUB.
-
-If the XSUB has a return type of C<void> then the compiler will
-not declare a RETVAL variable for that function. When using
-a PPCODE: section no manipulation of the RETVAL variable is required, the
-section may use direct stack manipulation to place output values on the stack.
-
-If PPCODE: directive is not used, C<void> return value should be used
-only for subroutines which do not return a value, I<even if> CODE:
-directive is used which sets ST(0) explicitly.
-
-Older versions of this document recommended to use C<void> return
-value in such cases. It was discovered that this could lead to
-segfaults in cases when XSUB was I<truly> C<void>. This practice is
-now deprecated, and may be not supported at some future version. Use
-the return value C<SV *> in such cases. (Currently C<xsubpp> contains
-some heuristic code which tries to disambiguate between "truly-void"
-and "old-practice-declared-as-void" functions. Hence your code is at
-mercy of this heuristics unless you use C<SV *> as return value.)
-
-=head2 The MODULE Keyword
-
-The MODULE keyword is used to start the XS code and to specify the package
-of the functions which are being defined. All text preceding the first
-MODULE keyword is considered C code and is passed through to the output with
-POD stripped, but otherwise untouched. Every XS module will have a
-bootstrap function which is used to hook the XSUBs into Perl. The package
-name of this bootstrap function will match the value of the last MODULE
-statement in the XS source files. The value of MODULE should always remain
-constant within the same XS file, though this is not required.
-
-The following example will start the XS code and will place
-all functions in a package named RPC.
-
- MODULE = RPC
-
-=head2 The PACKAGE Keyword
-
-When functions within an XS source file must be separated into packages
-the PACKAGE keyword should be used. This keyword is used with the MODULE
-keyword and must follow immediately after it when used.
-
- MODULE = RPC PACKAGE = RPC
-
- [ XS code in package RPC ]
-
- MODULE = RPC PACKAGE = RPCB
-
- [ XS code in package RPCB ]
-
- MODULE = RPC PACKAGE = RPC
-
- [ XS code in package RPC ]
-
-Although this keyword is optional and in some cases provides redundant
-information it should always be used. This keyword will ensure that the
-XSUBs appear in the desired package.
-
-=head2 The PREFIX Keyword
-
-The PREFIX keyword designates prefixes which should be
-removed from the Perl function names. If the C function is
-C<rpcb_gettime()> and the PREFIX value is C<rpcb_> then Perl will
-see this function as C<gettime()>.
-
-This keyword should follow the PACKAGE keyword when used.
-If PACKAGE is not used then PREFIX should follow the MODULE
-keyword.
-
- MODULE = RPC PREFIX = rpc_
-
- MODULE = RPC PACKAGE = RPCB PREFIX = rpcb_
-
-=head2 The OUTPUT: Keyword
-
-The OUTPUT: keyword indicates that certain function parameters should be
-updated (new values made visible to Perl) when the XSUB terminates or that
-certain values should be returned to the calling Perl function. For
-simple functions which have no CODE: or PPCODE: section,
-such as the sin() function above, the RETVAL variable is
-automatically designated as an output value. For more complex functions
-the B<xsubpp> compiler will need help to determine which variables are output
-variables.
-
-This keyword will normally be used to complement the CODE: keyword.
-The RETVAL variable is not recognized as an output variable when the
-CODE: keyword is present. The OUTPUT: keyword is used in this
-situation to tell the compiler that RETVAL really is an output
-variable.
-
-The OUTPUT: keyword can also be used to indicate that function parameters
-are output variables. This may be necessary when a parameter has been
-modified within the function and the programmer would like the update to
-be seen by Perl.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep
-
-The OUTPUT: keyword will also allow an output parameter to
-be mapped to a matching piece of code rather than to a
-typemap.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep sv_setnv(ST(1), (double)timep);
-
-B<xsubpp> emits an automatic C<SvSETMAGIC()> for all parameters in the
-OUTPUT section of the XSUB, except RETVAL. This is the usually desired
-behavior, as it takes care of properly invoking 'set' magic on output
-parameters (needed for hash or array element parameters that must be
-created if they didn't exist). If for some reason, this behavior is
-not desired, the OUTPUT section may contain a C<SETMAGIC: DISABLE> line
-to disable it for the remainder of the parameters in the OUTPUT section.
-Likewise, C<SETMAGIC: ENABLE> can be used to reenable it for the
-remainder of the OUTPUT section. See L<perlguts> for more details
-about 'set' magic.
-
-=head2 The NO_OUTPUT Keyword
-
-The NO_OUTPUT can be placed as the first token of the XSUB. This keyword
-indicates that while the C subroutine we provide an interface to has
-a non-C<void> return type, the return value of this C subroutine should not
-be returned from the generated Perl subroutine.
-
-With this keyword present L<The RETVAL Variable> is created, and in the
-generated call to the subroutine this variable is assigned to, but the value
-of this variable is not going to be used in the auto-generated code.
-
-This keyword makes sense only if C<RETVAL> is going to be accessed by the
-user-supplied code. It is especially useful to make a function interface
-more Perl-like, especially when the C return value is just an error condition
-indicator. For example,
-
- NO_OUTPUT int
- delete_file(char *name)
- POST_CALL:
- if (RETVAL != 0)
- croak("Error %d while deleting file '%s'", RETVAL, name);
-
-Here the generated XS function returns nothing on success, and will die()
-with a meaningful error message on error.
-
-=head2 The CODE: Keyword
-
-This keyword is used in more complicated XSUBs which require
-special handling for the C function. The RETVAL variable is
-still declared, but it will not be returned unless it is specified
-in the OUTPUT: section.
-
-The following XSUB is for a C function which requires special handling of
-its parameters. The Perl usage is given first.
-
- $status = rpcb_gettime( "localhost", $timep );
-
-The XSUB follows.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t timep
- CODE:
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-=head2 The INIT: Keyword
-
-The INIT: keyword allows initialization to be inserted into the XSUB before
-the compiler generates the call to the C function. Unlike the CODE: keyword
-above, this keyword does not affect the way the compiler handles RETVAL.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- INIT:
- printf("# Host is %s\n", host );
- OUTPUT:
- timep
-
-Another use for the INIT: section is to check for preconditions before
-making a call to the C function:
-
- long long
- lldiv(a,b)
- long long a
- long long b
- INIT:
- if (a == 0 && b == 0)
- XSRETURN_UNDEF;
- if (b == 0)
- croak("lldiv: cannot divide by 0");
-
-=head2 The NO_INIT Keyword
-
-The NO_INIT keyword is used to indicate that a function
-parameter is being used only as an output value. The B<xsubpp>
-compiler will normally generate code to read the values of
-all function parameters from the argument stack and assign
-them to C variables upon entry to the function. NO_INIT
-will tell the compiler that some parameters will be used for
-output rather than for input and that they will be handled
-before the function terminates.
-
-The following example shows a variation of the rpcb_gettime() function.
-This function uses the timep variable only as an output variable and does
-not care about its initial contents.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep = NO_INIT
- OUTPUT:
- timep
-
-=head2 Initializing Function Parameters
-
-C function parameters are normally initialized with their values from
-the argument stack (which in turn contains the parameters that were
-passed to the XSUB from Perl). The typemaps contain the
-code segments which are used to translate the Perl values to
-the C parameters. The programmer, however, is allowed to
-override the typemaps and supply alternate (or additional)
-initialization code. Initialization code starts with the first
-C<=>, C<;> or C<+> on a line in the INPUT: section. The only
-exception happens if this C<;> terminates the line, then this C<;>
-is quietly ignored.
-
-The following code demonstrates how to supply initialization code for
-function parameters. The initialization code is eval'd within double
-quotes by the compiler before it is added to the output so anything
-which should be interpreted literally [mainly C<$>, C<@>, or C<\\>]
-must be protected with backslashes. The variables $var, $arg,
-and $type can be used as in typemaps.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host = (char *)SvPV($arg,PL_na);
- time_t &timep = 0;
- OUTPUT:
- timep
-
-This should not be used to supply default values for parameters. One
-would normally use this when a function parameter must be processed by
-another library function before it can be used. Default parameters are
-covered in the next section.
-
-If the initialization begins with C<=>, then it is output in
-the declaration for the input variable, replacing the initialization
-supplied by the typemap. If the initialization
-begins with C<;> or C<+>, then it is performed after
-all of the input variables have been declared. In the C<;>
-case the initialization normally supplied by the typemap is not performed.
-For the C<+> case, the declaration for the variable will include the
-initialization from the typemap. A global
-variable, C<%v>, is available for the truly rare case where
-information from one initialization is needed in another
-initialization.
-
-Here's a truly obscure example:
-
- bool_t
- rpcb_gettime(host,timep)
- time_t &timep ; /* \$v{timep}=@{[$v{timep}=$arg]} */
- char *host + SvOK($v{timep}) ? SvPV($arg,PL_na) : NULL;
- OUTPUT:
- timep
-
-The construct C<\$v{timep}=@{[$v{timep}=$arg]}> used in the above
-example has a two-fold purpose: first, when this line is processed by
-B<xsubpp>, the Perl snippet C<$v{timep}=$arg> is evaluated. Second,
-the text of the evaluated snippet is output into the generated C file
-(inside a C comment)! During the processing of C<char *host> line,
-$arg will evaluate to C<ST(0)>, and C<$v{timep}> will evaluate to
-C<ST(1)>.
-
-=head2 Default Parameter Values
-
-Default values for XSUB arguments can be specified by placing an
-assignment statement in the parameter list. The default value may
-be a number, a string or the special string C<NO_INIT>. Defaults should
-always be used on the right-most parameters only.
-
-To allow the XSUB for rpcb_gettime() to have a default host
-value the parameters to the XSUB could be rearranged. The
-XSUB will then call the real rpcb_gettime() function with
-the parameters in the correct order. This XSUB can be called
-from Perl with either of the following statements:
-
- $status = rpcb_gettime( $timep, $host );
-
- $status = rpcb_gettime( $timep );
-
-The XSUB will look like the code which follows. A CODE:
-block is used to call the real rpcb_gettime() function with
-the parameters in the correct order for that function.
-
- bool_t
- rpcb_gettime(timep,host="localhost")
- char *host
- time_t timep = NO_INIT
- CODE:
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-=head2 The PREINIT: Keyword
-
-The PREINIT: keyword allows extra variables to be declared immediately
-before or after the declarations of the parameters from the INPUT: section
-are emitted.
-
-If a variable is declared inside a CODE: section it will follow any typemap
-code that is emitted for the input parameters. This may result in the
-declaration ending up after C code, which is C syntax error. Similar
-errors may happen with an explicit C<;>-type or C<+>-type initialization of
-parameters is used (see L<"Initializing Function Parameters">). Declaring
-these variables in an INIT: section will not help.
-
-In such cases, to force an additional variable to be declared together
-with declarations of other variables, place the declaration into a
-PREINIT: section. The PREINIT: keyword may be used one or more times
-within an XSUB.
-
-The following examples are equivalent, but if the code is using complex
-typemaps then the first example is safer.
-
- bool_t
- rpcb_gettime(timep)
- time_t timep = NO_INIT
- PREINIT:
- char *host = "localhost";
- CODE:
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-For this particular case an INIT: keyword would generate the
-same C code as the PREINIT: keyword. Another correct, but error-prone example:
-
- bool_t
- rpcb_gettime(timep)
- time_t timep = NO_INIT
- CODE:
- char *host = "localhost";
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-Another way to declare C<host> is to use a C block in the CODE: section:
-
- bool_t
- rpcb_gettime(timep)
- time_t timep = NO_INIT
- CODE:
- {
- char *host = "localhost";
- RETVAL = rpcb_gettime( host, &timep );
- }
- OUTPUT:
- timep
- RETVAL
-
-The ability to put additional declarations before the typemap entries are
-processed is very handy in the cases when typemap conversions manipulate
-some global state:
-
- MyObject
- mutate(o)
- PREINIT:
- MyState st = global_state;
- INPUT:
- MyObject o;
- CLEANUP:
- reset_to(global_state, st);
-
-Here we suppose that conversion to C<MyObject> in the INPUT: section and from
-MyObject when processing RETVAL will modify a global variable C<global_state>.
-After these conversions are performed, we restore the old value of
-C<global_state> (to avoid memory leaks, for example).
-
-There is another way to trade clarity for compactness: INPUT sections allow
-declaration of C variables which do not appear in the parameter list of
-a subroutine. Thus the above code for mutate() can be rewritten as
-
- MyObject
- mutate(o)
- MyState st = global_state;
- MyObject o;
- CLEANUP:
- reset_to(global_state, st);
-
-and the code for rpcb_gettime() can be rewritten as
-
- bool_t
- rpcb_gettime(timep)
- time_t timep = NO_INIT
- char *host = "localhost";
- C_ARGS:
- host, &timep
- OUTPUT:
- timep
- RETVAL
-
-=head2 The SCOPE: Keyword
-
-The SCOPE: keyword allows scoping to be enabled for a particular XSUB. If
-enabled, the XSUB will invoke ENTER and LEAVE automatically.
-
-To support potentially complex type mappings, if a typemap entry used
-by an XSUB contains a comment like C</*scope*/> then scoping will
-be automatically enabled for that XSUB.
-
-To enable scoping:
-
- SCOPE: ENABLE
-
-To disable scoping:
-
- SCOPE: DISABLE
-
-=head2 The INPUT: Keyword
-
-The XSUB's parameters are usually evaluated immediately after entering the
-XSUB. The INPUT: keyword can be used to force those parameters to be
-evaluated a little later. The INPUT: keyword can be used multiple times
-within an XSUB and can be used to list one or more input variables. This
-keyword is used with the PREINIT: keyword.
-
-The following example shows how the input parameter C<timep> can be
-evaluated late, after a PREINIT.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- PREINIT:
- time_t tt;
- INPUT:
- time_t timep
- CODE:
- RETVAL = rpcb_gettime( host, &tt );
- timep = tt;
- OUTPUT:
- timep
- RETVAL
-
-The next example shows each input parameter evaluated late.
-
- bool_t
- rpcb_gettime(host,timep)
- PREINIT:
- time_t tt;
- INPUT:
- char *host
- PREINIT:
- char *h;
- INPUT:
- time_t timep
- CODE:
- h = host;
- RETVAL = rpcb_gettime( h, &tt );
- timep = tt;
- OUTPUT:
- timep
- RETVAL
-
-Since INPUT sections allow declaration of C variables which do not appear
-in the parameter list of a subroutine, this may be shortened to:
-
- bool_t
- rpcb_gettime(host,timep)
- time_t tt;
- char *host;
- char *h = host;
- time_t timep;
- CODE:
- RETVAL = rpcb_gettime( h, &tt );
- timep = tt;
- OUTPUT:
- timep
- RETVAL
-
-(We used our knowledge that input conversion for C<char *> is a "simple" one,
-thus C<host> is initialized on the declaration line, and our assignment
-C<h = host> is not performed too early. Otherwise one would need to have the
-assignment C<h = host> in a CODE: or INIT: section.)
-
-=head2 The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords
-
-In the list of parameters for an XSUB, one can precede parameter names
-by the C<IN>/C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT> keywords.
-C<IN> keyword is the default, the other keywords indicate how the Perl
-interface should differ from the C interface.
-
-Parameters preceded by C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT>
-keywords are considered to be used by the C subroutine I<via
-pointers>. C<OUTLIST>/C<OUT> keywords indicate that the C subroutine
-does not inspect the memory pointed by this parameter, but will write
-through this pointer to provide additional return values.
-
-Parameters preceded by C<OUTLIST> keyword do not appear in the usage
-signature of the generated Perl function.
-
-Parameters preceded by C<IN_OUTLIST>/C<IN_OUT>/C<OUT> I<do> appear as
-parameters to the Perl function. With the exception of
-C<OUT>-parameters, these parameters are converted to the corresponding
-C type, then pointers to these data are given as arguments to the C
-function. It is expected that the C function will write through these
-pointers.
-
-The return list of the generated Perl function consists of the C return value
-from the function (unless the XSUB is of C<void> return type or
-C<The NO_OUTPUT Keyword> was used) followed by all the C<OUTLIST>
-and C<IN_OUTLIST> parameters (in the order of appearance). On the
-return from the XSUB the C<IN_OUT>/C<OUT> Perl parameter will be
-modified to have the values written by the C function.
-
-For example, an XSUB
-
- void
- day_month(OUTLIST day, IN unix_time, OUTLIST month)
- int day
- int unix_time
- int month
-
-should be used from Perl as
-
- my ($day, $month) = day_month(time);
-
-The C signature of the corresponding function should be
-
- void day_month(int *day, int unix_time, int *month);
-
-The C<IN>/C<OUTLIST>/C<IN_OUTLIST>/C<IN_OUT>/C<OUT> keywords can be
-mixed with ANSI-style declarations, as in
-
- void
- day_month(OUTLIST int day, int unix_time, OUTLIST int month)
-
-(here the optional C<IN> keyword is omitted).
-
-The C<IN_OUT> parameters are identical with parameters introduced with
-L<The & Unary Operator> and put into the C<OUTPUT:> section (see
-L<The OUTPUT: Keyword>). The C<IN_OUTLIST> parameters are very similar,
-the only difference being that the value C function writes through the
-pointer would not modify the Perl parameter, but is put in the output
-list.
-
-The C<OUTLIST>/C<OUT> parameter differ from C<IN_OUTLIST>/C<IN_OUT>
-parameters only by the the initial value of the Perl parameter not
-being read (and not being given to the C function - which gets some
-garbage instead). For example, the same C function as above can be
-interfaced with as
-
- void day_month(OUT int day, int unix_time, OUT int month);
-
-or
-
- void
- day_month(day, unix_time, month)
- int &day = NO_INIT
- int unix_time
- int &month = NO_INIT
- OUTPUT:
- day
- month
-
-However, the generated Perl function is called in very C-ish style:
-
- my ($day, $month);
- day_month($day, time, $month);
-
-=head2 Variable-length Parameter Lists
-
-XSUBs can have variable-length parameter lists by specifying an ellipsis
-C<(...)> in the parameter list. This use of the ellipsis is similar to that
-found in ANSI C. The programmer is able to determine the number of
-arguments passed to the XSUB by examining the C<items> variable which the
-B<xsubpp> compiler supplies for all XSUBs. By using this mechanism one can
-create an XSUB which accepts a list of parameters of unknown length.
-
-The I<host> parameter for the rpcb_gettime() XSUB can be
-optional so the ellipsis can be used to indicate that the
-XSUB will take a variable number of parameters. Perl should
-be able to call this XSUB with either of the following statements.
-
- $status = rpcb_gettime( $timep, $host );
-
- $status = rpcb_gettime( $timep );
-
-The XS code, with ellipsis, follows.
-
- bool_t
- rpcb_gettime(timep, ...)
- time_t timep = NO_INIT
- PREINIT:
- char *host = "localhost";
- STRLEN n_a;
- CODE:
- if( items > 1 )
- host = (char *)SvPV(ST(1), n_a);
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-=head2 The C_ARGS: Keyword
-
-The C_ARGS: keyword allows creating of XSUBS which have different
-calling sequence from Perl than from C, without a need to write
-CODE: or PPCODE: section. The contents of the C_ARGS: paragraph is
-put as the argument to the called C function without any change.
-
-For example, suppose that a C function is declared as
-
- symbolic nth_derivative(int n, symbolic function, int flags);
-
-and that the default flags are kept in a global C variable
-C<default_flags>. Suppose that you want to create an interface which
-is called as
-
- $second_deriv = $function->nth_derivative(2);
-
-To do this, declare the XSUB as
-
- symbolic
- nth_derivative(function, n)
- symbolic function
- int n
- C_ARGS:
- n, function, default_flags
-
-=head2 The PPCODE: Keyword
-
-The PPCODE: keyword is an alternate form of the CODE: keyword and is used
-to tell the B<xsubpp> compiler that the programmer is supplying the code to
-control the argument stack for the XSUBs return values. Occasionally one
-will want an XSUB to return a list of values rather than a single value.
-In these cases one must use PPCODE: and then explicitly push the list of
-values on the stack. The PPCODE: and CODE: keywords should not be used
-together within the same XSUB.
-
-The actual difference between PPCODE: and CODE: sections is in the
-initialization of C<SP> macro (which stands for the I<current> Perl
-stack pointer), and in the handling of data on the stack when returning
-from an XSUB. In CODE: sections SP preserves the value which was on
-entry to the XSUB: SP is on the function pointer (which follows the
-last parameter). In PPCODE: sections SP is moved backward to the
-beginning of the parameter list, which allows C<PUSH*()> macros
-to place output values in the place Perl expects them to be when
-the XSUB returns back to Perl.
-
-The generated trailer for a CODE: section ensures that the number of return
-values Perl will see is either 0 or 1 (depending on the C<void>ness of the
-return value of the C function, and heuristics mentioned in
-L<"The RETVAL Variable">). The trailer generated for a PPCODE: section
-is based on the number of return values and on the number of times
-C<SP> was updated by C<[X]PUSH*()> macros.
-
-Note that macros C<ST(i)>, C<XST_m*()> and C<XSRETURN*()> work equally
-well in CODE: sections and PPCODE: sections.
-
-The following XSUB will call the C rpcb_gettime() function
-and will return its two output values, timep and status, to
-Perl as a single list.
-
- void
- rpcb_gettime(host)
- char *host
- PREINIT:
- time_t timep;
- bool_t status;
- PPCODE:
- status = rpcb_gettime( host, &timep );
- EXTEND(SP, 2);
- PUSHs(sv_2mortal(newSViv(status)));
- PUSHs(sv_2mortal(newSViv(timep)));
-
-Notice that the programmer must supply the C code necessary
-to have the real rpcb_gettime() function called and to have
-the return values properly placed on the argument stack.
-
-The C<void> return type for this function tells the B<xsubpp> compiler that
-the RETVAL variable is not needed or used and that it should not be created.
-In most scenarios the void return type should be used with the PPCODE:
-directive.
-
-The EXTEND() macro is used to make room on the argument
-stack for 2 return values. The PPCODE: directive causes the
-B<xsubpp> compiler to create a stack pointer available as C<SP>, and it
-is this pointer which is being used in the EXTEND() macro.
-The values are then pushed onto the stack with the PUSHs()
-macro.
-
-Now the rpcb_gettime() function can be used from Perl with
-the following statement.
-
- ($status, $timep) = rpcb_gettime("localhost");
-
-When handling output parameters with a PPCODE section, be sure to handle
-'set' magic properly. See L<perlguts> for details about 'set' magic.
-
-=head2 Returning Undef And Empty Lists
-
-Occasionally the programmer will want to return simply
-C<undef> or an empty list if a function fails rather than a
-separate status value. The rpcb_gettime() function offers
-just this situation. If the function succeeds we would like
-to have it return the time and if it fails we would like to
-have undef returned. In the following Perl code the value
-of $timep will either be undef or it will be a valid time.
-
- $timep = rpcb_gettime( "localhost" );
-
-The following XSUB uses the C<SV *> return type as a mnemonic only,
-and uses a CODE: block to indicate to the compiler
-that the programmer has supplied all the necessary code. The
-sv_newmortal() call will initialize the return value to undef, making that
-the default return value.
-
- SV *
- rpcb_gettime(host)
- char * host
- PREINIT:
- time_t timep;
- bool_t x;
- CODE:
- ST(0) = sv_newmortal();
- if( rpcb_gettime( host, &timep ) )
- sv_setnv( ST(0), (double)timep);
-
-The next example demonstrates how one would place an explicit undef in the
-return value, should the need arise.
-
- SV *
- rpcb_gettime(host)
- char * host
- PREINIT:
- time_t timep;
- bool_t x;
- CODE:
- ST(0) = sv_newmortal();
- if( rpcb_gettime( host, &timep ) ){
- sv_setnv( ST(0), (double)timep);
- }
- else{
- ST(0) = &PL_sv_undef;
- }
-
-To return an empty list one must use a PPCODE: block and
-then not push return values on the stack.
-
- void
- rpcb_gettime(host)
- char *host
- PREINIT:
- time_t timep;
- PPCODE:
- if( rpcb_gettime( host, &timep ) )
- PUSHs(sv_2mortal(newSViv(timep)));
- else{
- /* Nothing pushed on stack, so an empty
- * list is implicitly returned. */
- }
-
-Some people may be inclined to include an explicit C<return> in the above
-XSUB, rather than letting control fall through to the end. In those
-situations C<XSRETURN_EMPTY> should be used, instead. This will ensure that
-the XSUB stack is properly adjusted. Consult L<perlguts/"API LISTING"> for
-other C<XSRETURN> macros.
-
-Since C<XSRETURN_*> macros can be used with CODE blocks as well, one can
-rewrite this example as:
-
- int
- rpcb_gettime(host)
- char *host
- PREINIT:
- time_t timep;
- CODE:
- RETVAL = rpcb_gettime( host, &timep );
- if (RETVAL == 0)
- XSRETURN_UNDEF;
- OUTPUT:
- RETVAL
-
-In fact, one can put this check into a POST_CALL: section as well. Together
-with PREINIT: simplifications, this leads to:
-
- int
- rpcb_gettime(host)
- char *host
- time_t timep;
- POST_CALL:
- if (RETVAL == 0)
- XSRETURN_UNDEF;
-
-=head2 The REQUIRE: Keyword
-
-The REQUIRE: keyword is used to indicate the minimum version of the
-B<xsubpp> compiler needed to compile the XS module. An XS module which
-contains the following statement will compile with only B<xsubpp> version
-1.922 or greater:
-
- REQUIRE: 1.922
-
-=head2 The CLEANUP: Keyword
-
-This keyword can be used when an XSUB requires special cleanup procedures
-before it terminates. When the CLEANUP: keyword is used it must follow
-any CODE:, PPCODE:, or OUTPUT: blocks which are present in the XSUB. The
-code specified for the cleanup block will be added as the last statements
-in the XSUB.
-
-=head2 The POST_CALL: Keyword
-
-This keyword can be used when an XSUB requires special procedures
-executed after the C subroutine call is performed. When the POST_CALL:
-keyword is used it must precede OUTPUT: and CLEANUP: blocks which are
-present in the XSUB.
-
-The POST_CALL: block does not make a lot of sense when the C subroutine
-call is supplied by user by providing either CODE: or PPCODE: section.
-
-=head2 The BOOT: Keyword
-
-The BOOT: keyword is used to add code to the extension's bootstrap
-function. The bootstrap function is generated by the B<xsubpp> compiler and
-normally holds the statements necessary to register any XSUBs with Perl.
-With the BOOT: keyword the programmer can tell the compiler to add extra
-statements to the bootstrap function.
-
-This keyword may be used any time after the first MODULE keyword and should
-appear on a line by itself. The first blank line after the keyword will
-terminate the code block.
-
- BOOT:
- # The following message will be printed when the
- # bootstrap function executes.
- printf("Hello from the bootstrap!\n");
-
-=head2 The VERSIONCHECK: Keyword
-
-The VERSIONCHECK: keyword corresponds to B<xsubpp>'s C<-versioncheck> and
-C<-noversioncheck> options. This keyword overrides the command line
-options. Version checking is enabled by default. When version checking is
-enabled the XS module will attempt to verify that its version matches the
-version of the PM module.
-
-To enable version checking:
-
- VERSIONCHECK: ENABLE
-
-To disable version checking:
-
- VERSIONCHECK: DISABLE
-
-=head2 The PROTOTYPES: Keyword
-
-The PROTOTYPES: keyword corresponds to B<xsubpp>'s C<-prototypes> and
-C<-noprototypes> options. This keyword overrides the command line options.
-Prototypes are enabled by default. When prototypes are enabled XSUBs will
-be given Perl prototypes. This keyword may be used multiple times in an XS
-module to enable and disable prototypes for different parts of the module.
-
-To enable prototypes:
-
- PROTOTYPES: ENABLE
-
-To disable prototypes:
-
- PROTOTYPES: DISABLE
-
-=head2 The PROTOTYPE: Keyword
-
-This keyword is similar to the PROTOTYPES: keyword above but can be used to
-force B<xsubpp> to use a specific prototype for the XSUB. This keyword
-overrides all other prototype options and keywords but affects only the
-current XSUB. Consult L<perlsub/Prototypes> for information about Perl
-prototypes.
-
- bool_t
- rpcb_gettime(timep, ...)
- time_t timep = NO_INIT
- PROTOTYPE: $;$
- PREINIT:
- char *host = "localhost";
- STRLEN n_a;
- CODE:
- if( items > 1 )
- host = (char *)SvPV(ST(1), n_a);
- RETVAL = rpcb_gettime( host, &timep );
- OUTPUT:
- timep
- RETVAL
-
-=head2 The ALIAS: Keyword
-
-The ALIAS: keyword allows an XSUB to have two or more unique Perl names
-and to know which of those names was used when it was invoked. The Perl
-names may be fully-qualified with package names. Each alias is given an
-index. The compiler will setup a variable called C<ix> which contain the
-index of the alias which was used. When the XSUB is called with its
-declared name C<ix> will be 0.
-
-The following example will create aliases C<FOO::gettime()> and
-C<BAR::getit()> for this function.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- ALIAS:
- FOO::gettime = 1
- BAR::getit = 2
- INIT:
- printf("# ix = %d\n", ix );
- OUTPUT:
- timep
-
-=head2 The INTERFACE: Keyword
-
-This keyword declares the current XSUB as a keeper of the given
-calling signature. If some text follows this keyword, it is
-considered as a list of functions which have this signature, and
-should be attached to the current XSUB.
-
-For example, if you have 4 C functions multiply(), divide(), add(),
-subtract() all having the signature:
-
- symbolic f(symbolic, symbolic);
-
-you can make them all to use the same XSUB using this:
-
- symbolic
- interface_s_ss(arg1, arg2)
- symbolic arg1
- symbolic arg2
- INTERFACE:
- multiply divide
- add subtract
-
-(This is the complete XSUB code for 4 Perl functions!) Four generated
-Perl function share names with corresponding C functions.
-
-The advantage of this approach comparing to ALIAS: keyword is that there
-is no need to code a switch statement, each Perl function (which shares
-the same XSUB) knows which C function it should call. Additionally, one
-can attach an extra function remainder() at runtime by using
-
- CV *mycv = newXSproto("Symbolic::remainder",
- XS_Symbolic_interface_s_ss, __FILE__, "$$");
- XSINTERFACE_FUNC_SET(mycv, remainder);
-
-say, from another XSUB. (This example supposes that there was no
-INTERFACE_MACRO: section, otherwise one needs to use something else instead of
-C<XSINTERFACE_FUNC_SET>, see the next section.)
-
-=head2 The INTERFACE_MACRO: Keyword
-
-This keyword allows one to define an INTERFACE using a different way
-to extract a function pointer from an XSUB. The text which follows
-this keyword should give the name of macros which would extract/set a
-function pointer. The extractor macro is given return type, C<CV*>,
-and C<XSANY.any_dptr> for this C<CV*>. The setter macro is given cv,
-and the function pointer.
-
-The default value is C<XSINTERFACE_FUNC> and C<XSINTERFACE_FUNC_SET>.
-An INTERFACE keyword with an empty list of functions can be omitted if
-INTERFACE_MACRO keyword is used.
-
-Suppose that in the previous example functions pointers for
-multiply(), divide(), add(), subtract() are kept in a global C array
-C<fp[]> with offsets being C<multiply_off>, C<divide_off>, C<add_off>,
-C<subtract_off>. Then one can use
-
- #define XSINTERFACE_FUNC_BYOFFSET(ret,cv,f) \
- ((XSINTERFACE_CVT(ret,))fp[CvXSUBANY(cv).any_i32])
- #define XSINTERFACE_FUNC_BYOFFSET_set(cv,f) \
- CvXSUBANY(cv).any_i32 = CAT2( f, _off )
-
-in C section,
-
- symbolic
- interface_s_ss(arg1, arg2)
- symbolic arg1
- symbolic arg2
- INTERFACE_MACRO:
- XSINTERFACE_FUNC_BYOFFSET
- XSINTERFACE_FUNC_BYOFFSET_set
- INTERFACE:
- multiply divide
- add subtract
-
-in XSUB section.
-
-=head2 The INCLUDE: Keyword
-
-This keyword can be used to pull other files into the XS module. The other
-files may have XS code. INCLUDE: can also be used to run a command to
-generate the XS code to be pulled into the module.
-
-The file F<Rpcb1.xsh> contains our C<rpcb_gettime()> function:
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep
-
-The XS module can use INCLUDE: to pull that file into it.
-
- INCLUDE: Rpcb1.xsh
-
-If the parameters to the INCLUDE: keyword are followed by a pipe (C<|>) then
-the compiler will interpret the parameters as a command.
-
- INCLUDE: cat Rpcb1.xsh |
-
-=head2 The CASE: Keyword
-
-The CASE: keyword allows an XSUB to have multiple distinct parts with each
-part acting as a virtual XSUB. CASE: is greedy and if it is used then all
-other XS keywords must be contained within a CASE:. This means nothing may
-precede the first CASE: in the XSUB and anything following the last CASE: is
-included in that case.
-
-A CASE: might switch via a parameter of the XSUB, via the C<ix> ALIAS:
-variable (see L<"The ALIAS: Keyword">), or maybe via the C<items> variable
-(see L<"Variable-length Parameter Lists">). The last CASE: becomes the
-B<default> case if it is not associated with a conditional. The following
-example shows CASE switched via C<ix> with a function C<rpcb_gettime()>
-having an alias C<x_gettime()>. When the function is called as
-C<rpcb_gettime()> its parameters are the usual C<(char *host, time_t *timep)>,
-but when the function is called as C<x_gettime()> its parameters are
-reversed, C<(time_t *timep, char *host)>.
-
- long
- rpcb_gettime(a,b)
- CASE: ix == 1
- ALIAS:
- x_gettime = 1
- INPUT:
- # 'a' is timep, 'b' is host
- char *b
- time_t a = NO_INIT
- CODE:
- RETVAL = rpcb_gettime( b, &a );
- OUTPUT:
- a
- RETVAL
- CASE:
- # 'a' is host, 'b' is timep
- char *a
- time_t &b = NO_INIT
- OUTPUT:
- b
- RETVAL
-
-That function can be called with either of the following statements. Note
-the different argument lists.
-
- $status = rpcb_gettime( $host, $timep );
-
- $status = x_gettime( $timep, $host );
-
-=head2 The & Unary Operator
-
-The C<&> unary operator in the INPUT: section is used to tell B<xsubpp>
-that it should convert a Perl value to/from C using the C type to the left
-of C<&>, but provide a pointer to this value when the C function is called.
-
-This is useful to avoid a CODE: block for a C function which takes a parameter
-by reference. Typically, the parameter should be not a pointer type (an
-C<int> or C<long> but not a C<int*> or C<long*>).
-
-The following XSUB will generate incorrect C code. The B<xsubpp> compiler will
-turn this into code which calls C<rpcb_gettime()> with parameters C<(char
-*host, time_t timep)>, but the real C<rpcb_gettime()> wants the C<timep>
-parameter to be of type C<time_t*> rather than C<time_t>.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t timep
- OUTPUT:
- timep
-
-That problem is corrected by using the C<&> operator. The B<xsubpp> compiler
-will now turn this into code which calls C<rpcb_gettime()> correctly with
-parameters C<(char *host, time_t *timep)>. It does this by carrying the
-C<&> through, so the function call looks like C<rpcb_gettime(host, &timep)>.
-
- bool_t
- rpcb_gettime(host,timep)
- char *host
- time_t &timep
- OUTPUT:
- timep
-
-=head2 Inserting POD, Comments and C Preprocessor Directives
-
-C preprocessor directives are allowed within BOOT:, PREINIT: INIT:, CODE:,
-PPCODE:, POST_CALL:, and CLEANUP: blocks, as well as outside the functions.
-Comments are allowed anywhere after the MODULE keyword. The compiler will
-pass the preprocessor directives through untouched and will remove the
-commented lines. POD documentation is allowed at any point, both in the
-C and XS language sections. POD must be terminated with a C<=cut> command;
-C<xsubpp> will exit with an error if it does not. It is very unlikely that
-human generated C code will be mistaken for POD, as most indenting styles
-result in whitespace in front of any line starting with C<=>. Machine
-generated XS files may fall into this trap unless care is taken to
-ensure that a space breaks the sequence "\n=".
-
-Comments can be added to XSUBs by placing a C<#> as the first
-non-whitespace of a line. Care should be taken to avoid making the
-comment look like a C preprocessor directive, lest it be interpreted as
-such. The simplest way to prevent this is to put whitespace in front of
-the C<#>.
-
-If you use preprocessor directives to choose one of two
-versions of a function, use
-
- #if ... version1
- #else /* ... version2 */
- #endif
-
-and not
-
- #if ... version1
- #endif
- #if ... version2
- #endif
-
-because otherwise B<xsubpp> will believe that you made a duplicate
-definition of the function. Also, put a blank line before the
-#else/#endif so it will not be seen as part of the function body.
-
-=head2 Using XS With C++
-
-If an XSUB name contains C<::>, it is considered to be a C++ method.
-The generated Perl function will assume that
-its first argument is an object pointer. The object pointer
-will be stored in a variable called THIS. The object should
-have been created by C++ with the new() function and should
-be blessed by Perl with the sv_setref_pv() macro. The
-blessing of the object by Perl can be handled by a typemap. An example
-typemap is shown at the end of this section.
-
-If the return type of the XSUB includes C<static>, the method is considered
-to be a static method. It will call the C++
-function using the class::method() syntax. If the method is not static
-the function will be called using the THIS-E<gt>method() syntax.
-
-The next examples will use the following C++ class.
-
- class color {
- public:
- color();
- ~color();
- int blue();
- void set_blue( int );
-
- private:
- int c_blue;
- };
-
-The XSUBs for the blue() and set_blue() methods are defined with the class
-name but the parameter for the object (THIS, or "self") is implicit and is
-not listed.
-
- int
- color::blue()
-
- void
- color::set_blue( val )
- int val
-
-Both Perl functions will expect an object as the first parameter. In the
-generated C++ code the object is called C<THIS>, and the method call will
-be performed on this object. So in the C++ code the blue() and set_blue()
-methods will be called as this:
-
- RETVAL = THIS->blue();
-
- THIS->set_blue( val );
-
-You could also write a single get/set method using an optional argument:
-
- int
- color::blue( val = NO_INIT )
- int val
- PROTOTYPE $;$
- CODE:
- if (items > 1)
- THIS->set_blue( val );
- RETVAL = THIS->blue();
- OUTPUT:
- RETVAL
-
-If the function's name is B<DESTROY> then the C++ C<delete> function will be
-called and C<THIS> will be given as its parameter. The generated C++ code for
-
- void
- color::DESTROY()
-
-will look like this:
-
- color *THIS = ...; // Initialized as in typemap
-
- delete THIS;
-
-If the function's name is B<new> then the C++ C<new> function will be called
-to create a dynamic C++ object. The XSUB will expect the class name, which
-will be kept in a variable called C<CLASS>, to be given as the first
-argument.
-
- color *
- color::new()
-
-The generated C++ code will call C<new>.
-
- RETVAL = new color();
-
-The following is an example of a typemap that could be used for this C++
-example.
-
- TYPEMAP
- color * O_OBJECT
-
- OUTPUT
- # The Perl object is blessed into 'CLASS', which should be a
- # char* having the name of the package for the blessing.
- O_OBJECT
- sv_setref_pv( $arg, CLASS, (void*)$var );
-
- INPUT
- O_OBJECT
- if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
- $var = ($type)SvIV((SV*)SvRV( $arg ));
- else{
- warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
- XSRETURN_UNDEF;
- }
-
-=head2 Interface Strategy
-
-When designing an interface between Perl and a C library a straight
-translation from C to XS (such as created by C<h2xs -x>) is often sufficient.
-However, sometimes the interface will look
-very C-like and occasionally nonintuitive, especially when the C function
-modifies one of its parameters, or returns failure inband (as in "negative
-return values mean failure"). In cases where the programmer wishes to
-create a more Perl-like interface the following strategy may help to
-identify the more critical parts of the interface.
-
-Identify the C functions with input/output or output parameters. The XSUBs for
-these functions may be able to return lists to Perl.
-
-Identify the C functions which use some inband info as an indication
-of failure. They may be
-candidates to return undef or an empty list in case of failure. If the
-failure may be detected without a call to the C function, you may want to use
-an INIT: section to report the failure. For failures detectable after the C
-function returns one may want to use a POST_CALL: section to process the
-failure. In more complicated cases use CODE: or PPCODE: sections.
-
-If many functions use the same failure indication based on the return value,
-you may want to create a special typedef to handle this situation. Put
-
- typedef int negative_is_failure;
-
-near the beginning of XS file, and create an OUTPUT typemap entry
-for C<negative_is_failure> which converts negative values to C<undef>, or
-maybe croak()s. After this the return value of type C<negative_is_failure>
-will create more Perl-like interface.
-
-Identify which values are used by only the C and XSUB functions
-themselves, say, when a parameter to a function should be a contents of a
-global variable. If Perl does not need to access the contents of the value
-then it may not be necessary to provide a translation for that value
-from C to Perl.
-
-Identify the pointers in the C function parameter lists and return
-values. Some pointers may be used to implement input/output or
-output parameters, they can be handled in XS with the C<&> unary operator,
-and, possibly, using the NO_INIT keyword.
-Some others will require handling of types like C<int *>, and one needs
-to decide what a useful Perl translation will do in such a case. When
-the semantic is clear, it is advisable to put the translation into a typemap
-file.
-
-Identify the structures used by the C functions. In many
-cases it may be helpful to use the T_PTROBJ typemap for
-these structures so they can be manipulated by Perl as
-blessed objects. (This is handled automatically by C<h2xs -x>.)
-
-If the same C type is used in several different contexts which require
-different translations, C<typedef> several new types mapped to this C type,
-and create separate F<typemap> entries for these new types. Use these
-types in declarations of return type and parameters to XSUBs.
-
-=head2 Perl Objects And C Structures
-
-When dealing with C structures one should select either
-B<T_PTROBJ> or B<T_PTRREF> for the XS type. Both types are
-designed to handle pointers to complex objects. The
-T_PTRREF type will allow the Perl object to be unblessed
-while the T_PTROBJ type requires that the object be blessed.
-By using T_PTROBJ one can achieve a form of type-checking
-because the XSUB will attempt to verify that the Perl object
-is of the expected type.
-
-The following XS code shows the getnetconfigent() function which is used
-with ONC+ TIRPC. The getnetconfigent() function will return a pointer to a
-C structure and has the C prototype shown below. The example will
-demonstrate how the C pointer will become a Perl reference. Perl will
-consider this reference to be a pointer to a blessed object and will
-attempt to call a destructor for the object. A destructor will be
-provided in the XS source to free the memory used by getnetconfigent().
-Destructors in XS can be created by specifying an XSUB function whose name
-ends with the word B<DESTROY>. XS destructors can be used to free memory
-which may have been malloc'd by another XSUB.
-
- struct netconfig *getnetconfigent(const char *netid);
-
-A C<typedef> will be created for C<struct netconfig>. The Perl
-object will be blessed in a class matching the name of the C
-type, with the tag C<Ptr> appended, and the name should not
-have embedded spaces if it will be a Perl package name. The
-destructor will be placed in a class corresponding to the
-class of the object and the PREFIX keyword will be used to
-trim the name to the word DESTROY as Perl will expect.
-
- typedef struct netconfig Netconfig;
-
- MODULE = RPC PACKAGE = RPC
-
- Netconfig *
- getnetconfigent(netid)
- char *netid
-
- MODULE = RPC PACKAGE = NetconfigPtr PREFIX = rpcb_
-
- void
- rpcb_DESTROY(netconf)
- Netconfig *netconf
- CODE:
- printf("Now in NetconfigPtr::DESTROY\n");
- free( netconf );
-
-This example requires the following typemap entry. Consult the typemap
-section for more information about adding new typemaps for an extension.
-
- TYPEMAP
- Netconfig * T_PTROBJ
-
-This example will be used with the following Perl statements.
-
- use RPC;
- $netconf = getnetconfigent("udp");
-
-When Perl destroys the object referenced by $netconf it will send the
-object to the supplied XSUB DESTROY function. Perl cannot determine, and
-does not care, that this object is a C struct and not a Perl object. In
-this sense, there is no difference between the object created by the
-getnetconfigent() XSUB and an object created by a normal Perl subroutine.
-
-=head2 The Typemap
-
-The typemap is a collection of code fragments which are used by the B<xsubpp>
-compiler to map C function parameters and values to Perl values. The
-typemap file may consist of three sections labelled C<TYPEMAP>, C<INPUT>, and
-C<OUTPUT>. An unlabelled initial section is assumed to be a C<TYPEMAP>
-section. The INPUT section tells
-the compiler how to translate Perl values
-into variables of certain C types. The OUTPUT section tells the compiler
-how to translate the values from certain C types into values Perl can
-understand. The TYPEMAP section tells the compiler which of the INPUT and
-OUTPUT code fragments should be used to map a given C type to a Perl value.
-The section labels C<TYPEMAP>, C<INPUT>, or C<OUTPUT> must begin
-in the first column on a line by themselves, and must be in uppercase.
-
-The default typemap in the C<lib/ExtUtils> directory of the Perl source
-contains many useful types which can be used by Perl extensions. Some
-extensions define additional typemaps which they keep in their own directory.
-These additional typemaps may reference INPUT and OUTPUT maps in the main
-typemap. The B<xsubpp> compiler will allow the extension's own typemap to
-override any mappings which are in the default typemap.
-
-Most extensions which require a custom typemap will need only the TYPEMAP
-section of the typemap file. The custom typemap used in the
-getnetconfigent() example shown earlier demonstrates what may be the typical
-use of extension typemaps. That typemap is used to equate a C structure
-with the T_PTROBJ typemap. The typemap used by getnetconfigent() is shown
-here. Note that the C type is separated from the XS type with a tab and
-that the C unary operator C<*> is considered to be a part of the C type name.
-
- TYPEMAP
- Netconfig *<tab>T_PTROBJ
-
-Here's a more complicated example: suppose that you wanted C<struct
-netconfig> to be blessed into the class C<Net::Config>. One way to do
-this is to use underscores (_) to separate package names, as follows:
-
- typedef struct netconfig * Net_Config;
-
-And then provide a typemap entry C<T_PTROBJ_SPECIAL> that maps underscores to
-double-colons (::), and declare C<Net_Config> to be of that type:
-
-
- TYPEMAP
- Net_Config T_PTROBJ_SPECIAL
-
- INPUT
- T_PTROBJ_SPECIAL
- if (sv_derived_from($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = ($type) tmp;
- }
- else
- croak(\"$var is not of type ${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\")
-
- OUTPUT
- T_PTROBJ_SPECIAL
- sv_setref_pv($arg, \"${(my $ntt=$ntype)=~s/_/::/g;\$ntt}\",
- (void*)$var);
-
-The INPUT and OUTPUT sections substitute underscores for double-colons
-on the fly, giving the desired effect. This example demonstrates some
-of the power and versatility of the typemap facility.
-
-=head1 EXAMPLES
-
-File C<RPC.xs>: Interface to some ONC+ RPC bind library functions.
-
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
-
- #include <rpc/rpc.h>
-
- typedef struct netconfig Netconfig;
-
- MODULE = RPC PACKAGE = RPC
-
- SV *
- rpcb_gettime(host="localhost")
- char *host
- PREINIT:
- time_t timep;
- CODE:
- ST(0) = sv_newmortal();
- if( rpcb_gettime( host, &timep ) )
- sv_setnv( ST(0), (double)timep );
-
- Netconfig *
- getnetconfigent(netid="udp")
- char *netid
-
- MODULE = RPC PACKAGE = NetconfigPtr PREFIX = rpcb_
-
- void
- rpcb_DESTROY(netconf)
- Netconfig *netconf
- CODE:
- printf("NetconfigPtr::DESTROY\n");
- free( netconf );
-
-File C<typemap>: Custom typemap for RPC.xs.
-
- TYPEMAP
- Netconfig * T_PTROBJ
-
-File C<RPC.pm>: Perl module for the RPC extension.
-
- package RPC;
-
- require Exporter;
- require DynaLoader;
- @ISA = qw(Exporter DynaLoader);
- @EXPORT = qw(rpcb_gettime getnetconfigent);
-
- bootstrap RPC;
- 1;
-
-File C<rpctest.pl>: Perl test program for the RPC extension.
-
- use RPC;
-
- $netconf = getnetconfigent();
- $a = rpcb_gettime();
- print "time = $a\n";
- print "netconf = $netconf\n";
-
- $netconf = getnetconfigent("tcp");
- $a = rpcb_gettime("poplar");
- print "time = $a\n";
- print "netconf = $netconf\n";
-
-
-=head1 XS VERSION
-
-This document covers features supported by C<xsubpp> 1.935.
-
-=head1 AUTHOR
-
-Originally written by Dean Roehrich <F<roehrich@cray.com>>.
-
-Maintained since 1996 by The Perl Porters <F<perlbug@perl.org>>.
diff --git a/contrib/perl5/pod/perlxstut.pod b/contrib/perl5/pod/perlxstut.pod
deleted file mode 100644
index f06e166..0000000
--- a/contrib/perl5/pod/perlxstut.pod
+++ /dev/null
@@ -1,1263 +0,0 @@
-=head1 NAME
-
-perlXStut - Tutorial for writing XSUBs
-
-=head1 DESCRIPTION
-
-This tutorial will educate the reader on the steps involved in creating
-a Perl extension. The reader is assumed to have access to L<perlguts>,
-L<perlapi> and L<perlxs>.
-
-This tutorial starts with very simple examples and becomes more complex,
-with each new example adding new features. Certain concepts may not be
-completely explained until later in the tutorial in order to slowly ease
-the reader into building extensions.
-
-This tutorial was written from a Unix point of view. Where I know them
-to be otherwise different for other platforms (e.g. Win32), I will list
-them. If you find something that was missed, please let me know.
-
-=head1 SPECIAL NOTES
-
-=head2 make
-
-This tutorial assumes that the make program that Perl is configured to
-use is called C<make>. Instead of running "make" in the examples that
-follow, you may have to substitute whatever make program Perl has been
-configured to use. Running B<perl -V:make> should tell you what it is.
-
-=head2 Version caveat
-
-When writing a Perl extension for general consumption, one should expect that
-the extension will be used with versions of Perl different from the
-version available on your machine. Since you are reading this document,
-the version of Perl on your machine is probably 5.005 or later, but the users
-of your extension may have more ancient versions.
-
-To understand what kinds of incompatibilities one may expect, and in the rare
-case that the version of Perl on your machine is older than this document,
-see the section on "Troubleshooting these Examples" for more information.
-
-If your extension uses some features of Perl which are not available on older
-releases of Perl, your users would appreciate an early meaningful warning.
-You would probably put this information into the F<README> file, but nowadays
-installation of extensions may be performed automatically, guided by F<CPAN.pm>
-module or other tools.
-
-In MakeMaker-based installations, F<Makefile.PL> provides the earliest
-opportunity to perform version checks. One can put something like this
-in F<Makefile.PL> for this purpose:
-
- eval { require 5.007 }
- or die <<EOD;
- ############
- ### This module uses frobnication framework which is not available before
- ### version 5.007 of Perl. Upgrade your Perl before installing Kara::Mba.
- ############
- EOD
-
-=head2 Dynamic Loading versus Static Loading
-
-It is commonly thought that if a system does not have the capability to
-dynamically load a library, you cannot build XSUBs. This is incorrect.
-You I<can> build them, but you must link the XSUBs subroutines with the
-rest of Perl, creating a new executable. This situation is similar to
-Perl 4.
-
-This tutorial can still be used on such a system. The XSUB build mechanism
-will check the system and build a dynamically-loadable library if possible,
-or else a static library and then, optionally, a new statically-linked
-executable with that static library linked in.
-
-Should you wish to build a statically-linked executable on a system which
-can dynamically load libraries, you may, in all the following examples,
-where the command "C<make>" with no arguments is executed, run the command
-"C<make perl>" instead.
-
-If you have generated such a statically-linked executable by choice, then
-instead of saying "C<make test>", you should say "C<make test_static>".
-On systems that cannot build dynamically-loadable libraries at all, simply
-saying "C<make test>" is sufficient.
-
-=head1 TUTORIAL
-
-Now let's go on with the show!
-
-=head2 EXAMPLE 1
-
-Our first extension will be very simple. When we call the routine in the
-extension, it will print out a well-known message and return.
-
-Run "C<h2xs -A -n Mytest>". This creates a directory named Mytest,
-possibly under ext/ if that directory exists in the current working
-directory. Several files will be created in the Mytest dir, including
-MANIFEST, Makefile.PL, Mytest.pm, Mytest.xs, test.pl, and Changes.
-
-The MANIFEST file contains the names of all the files just created in the
-Mytest directory.
-
-The file Makefile.PL should look something like this:
-
- use ExtUtils::MakeMaker;
- # See lib/ExtUtils/MakeMaker.pm for details of how to influence
- # the contents of the Makefile that is written.
- WriteMakefile(
- NAME => 'Mytest',
- VERSION_FROM => 'Mytest.pm', # finds $VERSION
- LIBS => [''], # e.g., '-lm'
- DEFINE => '', # e.g., '-DHAVE_SOMETHING'
- INC => '', # e.g., '-I/usr/include/other'
- );
-
-The file Mytest.pm should start with something like this:
-
- package Mytest;
-
- use strict;
- use warnings;
-
- require Exporter;
- require DynaLoader;
-
- our @ISA = qw(Exporter DynaLoader);
- # Items to export into callers namespace by default. Note: do not export
- # names by default without a very good reason. Use EXPORT_OK instead.
- # Do not simply export all your public functions/methods/constants.
- our @EXPORT = qw(
-
- );
- our $VERSION = '0.01';
-
- bootstrap Mytest $VERSION;
-
- # Preloaded methods go here.
-
- # Autoload methods go after __END__, and are processed by the autosplit program.
-
- 1;
- __END__
- # Below is the stub of documentation for your module. You better edit it!
-
-The rest of the .pm file contains sample code for providing documentation for
-the extension.
-
-Finally, the Mytest.xs file should look something like this:
-
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
-
- MODULE = Mytest PACKAGE = Mytest
-
-Let's edit the .xs file by adding this to the end of the file:
-
- void
- hello()
- CODE:
- printf("Hello, world!\n");
-
-It is okay for the lines starting at the "CODE:" line to not be indented.
-However, for readability purposes, it is suggested that you indent CODE:
-one level and the lines following one more level.
-
-Now we'll run "C<perl Makefile.PL>". This will create a real Makefile,
-which make needs. Its output looks something like:
-
- % perl Makefile.PL
- Checking if your kit is complete...
- Looks good
- Writing Makefile for Mytest
- %
-
-Now, running make will produce output that looks something like this (some
-long lines have been shortened for clarity and some extraneous lines have
-been deleted):
-
- % make
- umask 0 && cp Mytest.pm ./blib/Mytest.pm
- perl xsubpp -typemap typemap Mytest.xs >Mytest.tc && mv Mytest.tc Mytest.c
- Please specify prototyping behavior for Mytest.xs (see perlxs manual)
- cc -c Mytest.c
- Running Mkbootstrap for Mytest ()
- chmod 644 Mytest.bs
- LD_RUN_PATH="" ld -o ./blib/PA-RISC1.1/auto/Mytest/Mytest.sl -b Mytest.o
- chmod 755 ./blib/PA-RISC1.1/auto/Mytest/Mytest.sl
- cp Mytest.bs ./blib/PA-RISC1.1/auto/Mytest/Mytest.bs
- chmod 644 ./blib/PA-RISC1.1/auto/Mytest/Mytest.bs
- Manifying ./blib/man3/Mytest.3
- %
-
-You can safely ignore the line about "prototyping behavior" - it is
-explained in the section "The PROTOTYPES: Keyword" in L<perlxs>.
-
-If you are on a Win32 system, and the build process fails with linker
-errors for functions in the C library, check if your Perl is configured
-to use PerlCRT (running B<perl -V:libc> should show you if this is the
-case). If Perl is configured to use PerlCRT, you have to make sure
-PerlCRT.lib is copied to the same location that msvcrt.lib lives in,
-so that the compiler can find it on its own. msvcrt.lib is usually
-found in the Visual C compiler's lib directory (e.g. C:/DevStudio/VC/lib).
-
-Perl has its own special way of easily writing test scripts, but for this
-example only, we'll create our own test script. Create a file called hello
-that looks like this:
-
- #! /opt/perl5/bin/perl
-
- use ExtUtils::testlib;
-
- use Mytest;
-
- Mytest::hello();
-
-Now we make the script executable (C<chmod -x hello>), run the script
-and we should see the following output:
-
- % ./hello
- Hello, world!
- %
-
-=head2 EXAMPLE 2
-
-Now let's add to our extension a subroutine that will take a single numeric
-argument as input and return 0 if the number is even or 1 if the number
-is odd.
-
-Add the following to the end of Mytest.xs:
-
- int
- is_even(input)
- int input
- CODE:
- RETVAL = (input % 2 == 0);
- OUTPUT:
- RETVAL
-
-There does not need to be white space at the start of the "C<int input>"
-line, but it is useful for improving readability. Placing a semi-colon at
-the end of that line is also optional. Any amount and kind of white space
-may be placed between the "C<int>" and "C<input>".
-
-Now re-run make to rebuild our new shared library.
-
-Now perform the same steps as before, generating a Makefile from the
-Makefile.PL file, and running make.
-
-In order to test that our extension works, we now need to look at the
-file test.pl. This file is set up to imitate the same kind of testing
-structure that Perl itself has. Within the test script, you perform a
-number of tests to confirm the behavior of the extension, printing "ok"
-when the test is correct, "not ok" when it is not. Change the print
-statement in the BEGIN block to print "1..4", and add the following code
-to the end of the file:
-
- print &Mytest::is_even(0) == 1 ? "ok 2" : "not ok 2", "\n";
- print &Mytest::is_even(1) == 0 ? "ok 3" : "not ok 3", "\n";
- print &Mytest::is_even(2) == 1 ? "ok 4" : "not ok 4", "\n";
-
-We will be calling the test script through the command "C<make test>". You
-should see output that looks something like this:
-
- % make test
- PERL_DL_NONLAZY=1 /opt/perl5.004/bin/perl (lots of -I arguments) test.pl
- 1..4
- ok 1
- ok 2
- ok 3
- ok 4
- %
-
-=head2 What has gone on?
-
-The program h2xs is the starting point for creating extensions. In later
-examples we'll see how we can use h2xs to read header files and generate
-templates to connect to C routines.
-
-h2xs creates a number of files in the extension directory. The file
-Makefile.PL is a perl script which will generate a true Makefile to build
-the extension. We'll take a closer look at it later.
-
-The .pm and .xs files contain the meat of the extension. The .xs file holds
-the C routines that make up the extension. The .pm file contains routines
-that tell Perl how to load your extension.
-
-Generating the Makefile and running C<make> created a directory called blib
-(which stands for "build library") in the current working directory. This
-directory will contain the shared library that we will build. Once we have
-tested it, we can install it into its final location.
-
-Invoking the test script via "C<make test>" did something very important.
-It invoked perl with all those C<-I> arguments so that it could find the
-various files that are part of the extension. It is I<very> important that
-while you are still testing extensions that you use "C<make test>". If you
-try to run the test script all by itself, you will get a fatal error.
-Another reason it is important to use "C<make test>" to run your test
-script is that if you are testing an upgrade to an already-existing version,
-using "C<make test>" insures that you will test your new extension, not the
-already-existing version.
-
-When Perl sees a C<use extension;>, it searches for a file with the same name
-as the C<use>'d extension that has a .pm suffix. If that file cannot be found,
-Perl dies with a fatal error. The default search path is contained in the
-C<@INC> array.
-
-In our case, Mytest.pm tells perl that it will need the Exporter and Dynamic
-Loader extensions. It then sets the C<@ISA> and C<@EXPORT> arrays and the
-C<$VERSION> scalar; finally it tells perl to bootstrap the module. Perl
-will call its dynamic loader routine (if there is one) and load the shared
-library.
-
-The two arrays C<@ISA> and C<@EXPORT> are very important. The C<@ISA>
-array contains a list of other packages in which to search for methods (or
-subroutines) that do not exist in the current package. This is usually
-only important for object-oriented extensions (which we will talk about
-much later), and so usually doesn't need to be modified.
-
-The C<@EXPORT> array tells Perl which of the extension's variables and
-subroutines should be placed into the calling package's namespace. Because
-you don't know if the user has already used your variable and subroutine
-names, it's vitally important to carefully select what to export. Do I<not>
-export method or variable names I<by default> without a good reason.
-
-As a general rule, if the module is trying to be object-oriented then don't
-export anything. If it's just a collection of functions and variables, then
-you can export them via another array, called C<@EXPORT_OK>. This array
-does not automatically place its subroutine and variable names into the
-namespace unless the user specifically requests that this be done.
-
-See L<perlmod> for more information.
-
-The C<$VERSION> variable is used to ensure that the .pm file and the shared
-library are "in sync" with each other. Any time you make changes to
-the .pm or .xs files, you should increment the value of this variable.
-
-=head2 Writing good test scripts
-
-The importance of writing good test scripts cannot be overemphasized. You
-should closely follow the "ok/not ok" style that Perl itself uses, so that
-it is very easy and unambiguous to determine the outcome of each test case.
-When you find and fix a bug, make sure you add a test case for it.
-
-By running "C<make test>", you ensure that your test.pl script runs and uses
-the correct version of your extension. If you have many test cases, you
-might want to copy Perl's test style. Create a directory named "t" in the
-extension's directory and append the suffix ".t" to the names of your test
-files. When you run "C<make test>", all of these test files will be executed.
-
-=head2 EXAMPLE 3
-
-Our third extension will take one argument as its input, round off that
-value, and set the I<argument> to the rounded value.
-
-Add the following to the end of Mytest.xs:
-
- void
- round(arg)
- double arg
- CODE:
- if (arg > 0.0) {
- arg = floor(arg + 0.5);
- } else if (arg < 0.0) {
- arg = ceil(arg - 0.5);
- } else {
- arg = 0.0;
- }
- OUTPUT:
- arg
-
-Edit the Makefile.PL file so that the corresponding line looks like this:
-
- 'LIBS' => ['-lm'], # e.g., '-lm'
-
-Generate the Makefile and run make. Change the BEGIN block to print
-"1..9" and add the following to test.pl:
-
- $i = -1.5; &Mytest::round($i); print $i == -2.0 ? "ok 5" : "not ok 5", "\n";
- $i = -1.1; &Mytest::round($i); print $i == -1.0 ? "ok 6" : "not ok 6", "\n";
- $i = 0.0; &Mytest::round($i); print $i == 0.0 ? "ok 7" : "not ok 7", "\n";
- $i = 0.5; &Mytest::round($i); print $i == 1.0 ? "ok 8" : "not ok 8", "\n";
- $i = 1.2; &Mytest::round($i); print $i == 1.0 ? "ok 9" : "not ok 9", "\n";
-
-Running "C<make test>" should now print out that all nine tests are okay.
-
-Notice that in these new test cases, the argument passed to round was a
-scalar variable. You might be wondering if you can round a constant or
-literal. To see what happens, temporarily add the following line to test.pl:
-
- &Mytest::round(3);
-
-Run "C<make test>" and notice that Perl dies with a fatal error. Perl won't
-let you change the value of constants!
-
-=head2 What's new here?
-
-=over 4
-
-=item *
-
-We've made some changes to Makefile.PL. In this case, we've specified an
-extra library to be linked into the extension's shared library, the math
-library libm in this case. We'll talk later about how to write XSUBs that
-can call every routine in a library.
-
-=item *
-
-The value of the function is not being passed back as the function's return
-value, but by changing the value of the variable that was passed into the
-function. You might have guessed that when you saw that the return value
-of round is of type "void".
-
-=back
-
-=head2 Input and Output Parameters
-
-You specify the parameters that will be passed into the XSUB on the line(s)
-after you declare the function's return value and name. Each input parameter
-line starts with optional white space, and may have an optional terminating
-semicolon.
-
-The list of output parameters occurs at the very end of the function, just
-before after the OUTPUT: directive. The use of RETVAL tells Perl that you
-wish to send this value back as the return value of the XSUB function. In
-Example 3, we wanted the "return value" placed in the original variable
-which we passed in, so we listed it (and not RETVAL) in the OUTPUT: section.
-
-=head2 The XSUBPP Program
-
-The B<xsubpp> program takes the XS code in the .xs file and translates it into
-C code, placing it in a file whose suffix is .c. The C code created makes
-heavy use of the C functions within Perl.
-
-=head2 The TYPEMAP file
-
-The B<xsubpp> program uses rules to convert from Perl's data types (scalar,
-array, etc.) to C's data types (int, char, etc.). These rules are stored
-in the typemap file ($PERLLIB/ExtUtils/typemap). This file is split into
-three parts.
-
-The first section maps various C data types to a name, which corresponds
-somewhat with the various Perl types. The second section contains C code
-which B<xsubpp> uses to handle input parameters. The third section contains
-C code which B<xsubpp> uses to handle output parameters.
-
-Let's take a look at a portion of the .c file created for our extension.
-The file name is Mytest.c:
-
- XS(XS_Mytest_round)
- {
- dXSARGS;
- if (items != 1)
- croak("Usage: Mytest::round(arg)");
- {
- double arg = (double)SvNV(ST(0)); /* XXXXX */
- if (arg > 0.0) {
- arg = floor(arg + 0.5);
- } else if (arg < 0.0) {
- arg = ceil(arg - 0.5);
- } else {
- arg = 0.0;
- }
- sv_setnv(ST(0), (double)arg); /* XXXXX */
- }
- XSRETURN(1);
- }
-
-Notice the two lines commented with "XXXXX". If you check the first section
-of the typemap file, you'll see that doubles are of type T_DOUBLE. In the
-INPUT section, an argument that is T_DOUBLE is assigned to the variable
-arg by calling the routine SvNV on something, then casting it to double,
-then assigned to the variable arg. Similarly, in the OUTPUT section,
-once arg has its final value, it is passed to the sv_setnv function to
-be passed back to the calling subroutine. These two functions are explained
-in L<perlguts>; we'll talk more later about what that "ST(0)" means in the
-section on the argument stack.
-
-=head2 Warning about Output Arguments
-
-In general, it's not a good idea to write extensions that modify their input
-parameters, as in Example 3. Instead, you should probably return multiple
-values in an array and let the caller handle them (we'll do this in a later
-example). However, in order to better accommodate calling pre-existing C
-routines, which often do modify their input parameters, this behavior is
-tolerated.
-
-=head2 EXAMPLE 4
-
-In this example, we'll now begin to write XSUBs that will interact with
-pre-defined C libraries. To begin with, we will build a small library of
-our own, then let h2xs write our .pm and .xs files for us.
-
-Create a new directory called Mytest2 at the same level as the directory
-Mytest. In the Mytest2 directory, create another directory called mylib,
-and cd into that directory.
-
-Here we'll create some files that will generate a test library. These will
-include a C source file and a header file. We'll also create a Makefile.PL
-in this directory. Then we'll make sure that running make at the Mytest2
-level will automatically run this Makefile.PL file and the resulting Makefile.
-
-In the mylib directory, create a file mylib.h that looks like this:
-
- #define TESTVAL 4
-
- extern double foo(int, long, const char*);
-
-Also create a file mylib.c that looks like this:
-
- #include <stdlib.h>
- #include "./mylib.h"
-
- double
- foo(int a, long b, const char *c)
- {
- return (a + b + atof(c) + TESTVAL);
- }
-
-And finally create a file Makefile.PL that looks like this:
-
- use ExtUtils::MakeMaker;
- $Verbose = 1;
- WriteMakefile(
- NAME => 'Mytest2::mylib',
- SKIP => [qw(all static static_lib dynamic dynamic_lib)],
- clean => {'FILES' => 'libmylib$(LIBEEXT)'},
- );
-
-
- sub MY::top_targets {
- '
- all :: static
-
- pure_all :: static
-
- static :: libmylib$(LIB_EXT)
-
- libmylib$(LIB_EXT): $(O_FILES)
- $(AR) cr libmylib$(LIB_EXT) $(O_FILES)
- $(RANLIB) libmylib$(LIB_EXT)
-
- ';
- }
-
-Make sure you use a tab and not spaces on the lines beginning with "$(AR)"
-and "$(RANLIB)". Make will not function properly if you use spaces.
-It has also been reported that the "cr" argument to $(AR) is unnecessary
-on Win32 systems.
-
-We will now create the main top-level Mytest2 files. Change to the directory
-above Mytest2 and run the following command:
-
- % h2xs -O -n Mytest2 ./Mytest2/mylib/mylib.h
-
-This will print out a warning about overwriting Mytest2, but that's okay.
-Our files are stored in Mytest2/mylib, and will be untouched.
-
-The normal Makefile.PL that h2xs generates doesn't know about the mylib
-directory. We need to tell it that there is a subdirectory and that we
-will be generating a library in it. Let's add the argument MYEXTLIB to
-the WriteMakefile call so that it looks like this:
-
- WriteMakefile(
- 'NAME' => 'Mytest2',
- 'VERSION_FROM' => 'Mytest2.pm', # finds $VERSION
- 'LIBS' => [''], # e.g., '-lm'
- 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING'
- 'INC' => '', # e.g., '-I/usr/include/other'
- 'MYEXTLIB' => 'mylib/libmylib$(LIB_EXT)',
- );
-
-and then at the end add a subroutine (which will override the pre-existing
-subroutine). Remember to use a tab character to indent the line beginning
-with "cd"!
-
- sub MY::postamble {
- '
- $(MYEXTLIB): mylib/Makefile
- cd mylib && $(MAKE) $(PASSTHRU)
- ';
- }
-
-Let's also fix the MANIFEST file so that it accurately reflects the contents
-of our extension. The single line that says "mylib" should be replaced by
-the following three lines:
-
- mylib/Makefile.PL
- mylib/mylib.c
- mylib/mylib.h
-
-To keep our namespace nice and unpolluted, edit the .pm file and change
-the variable C<@EXPORT> to C<@EXPORT_OK>. Finally, in the
-.xs file, edit the #include line to read:
-
- #include "mylib/mylib.h"
-
-And also add the following function definition to the end of the .xs file:
-
- double
- foo(a,b,c)
- int a
- long b
- const char * c
- OUTPUT:
- RETVAL
-
-Now we also need to create a typemap file because the default Perl doesn't
-currently support the const char * type. Create a file called typemap in
-the Mytest2 directory and place the following in it:
-
- const char * T_PV
-
-Now run perl on the top-level Makefile.PL. Notice that it also created a
-Makefile in the mylib directory. Run make and watch that it does cd into
-the mylib directory and run make in there as well.
-
-Now edit the test.pl script and change the BEGIN block to print "1..4",
-and add the following lines to the end of the script:
-
- print &Mytest2::foo(1, 2, "Hello, world!") == 7 ? "ok 2\n" : "not ok 2\n";
- print &Mytest2::foo(1, 2, "0.0") == 7 ? "ok 3\n" : "not ok 3\n";
- print abs(&Mytest2::foo(0, 0, "-3.4") - 0.6) <= 0.01 ? "ok 4\n" : "not ok 4\n";
-
-(When dealing with floating-point comparisons, it is best to not check for
-equality, but rather that the difference between the expected and actual
-result is below a certain amount (called epsilon) which is 0.01 in this case)
-
-Run "C<make test>" and all should be well.
-
-=head2 What has happened here?
-
-Unlike previous examples, we've now run h2xs on a real include file. This
-has caused some extra goodies to appear in both the .pm and .xs files.
-
-=over 4
-
-=item *
-
-In the .xs file, there's now a #include directive with the absolute path to
-the mylib.h header file. We changed this to a relative path so that we
-could move the extension directory if we wanted to.
-
-=item *
-
-There's now some new C code that's been added to the .xs file. The purpose
-of the C<constant> routine is to make the values that are #define'd in the
-header file accessible by the Perl script (by calling either C<TESTVAL> or
-C<&Mytest2::TESTVAL>). There's also some XS code to allow calls to the
-C<constant> routine.
-
-=item *
-
-The .pm file originally exported the name C<TESTVAL> in the C<@EXPORT> array.
-This could lead to name clashes. A good rule of thumb is that if the #define
-is only going to be used by the C routines themselves, and not by the user,
-they should be removed from the C<@EXPORT> array. Alternately, if you don't
-mind using the "fully qualified name" of a variable, you could move most
-or all of the items from the C<@EXPORT> array into the C<@EXPORT_OK> array.
-
-=item *
-
-If our include file had contained #include directives, these would not have
-been processed by h2xs. There is no good solution to this right now.
-
-=item *
-
-We've also told Perl about the library that we built in the mylib
-subdirectory. That required only the addition of the C<MYEXTLIB> variable
-to the WriteMakefile call and the replacement of the postamble subroutine
-to cd into the subdirectory and run make. The Makefile.PL for the
-library is a bit more complicated, but not excessively so. Again we
-replaced the postamble subroutine to insert our own code. This code
-simply specified that the library to be created here was a static archive
-library (as opposed to a dynamically loadable library) and provided the
-commands to build it.
-
-=back
-
-=head2 Anatomy of .xs file
-
-The .xs file of L<"EXAMPLE 4"> contained some new elements. To understand
-the meaning of these elements, pay attention to the line which reads
-
- MODULE = Mytest2 PACKAGE = Mytest2
-
-Anything before this line is plain C code which describes which headers
-to include, and defines some convenience functions. No translations are
-performed on this part, apart from having embedded POD documentation
-skipped over (see L<perlpod>) it goes into the generated output C file as is.
-
-Anything after this line is the description of XSUB functions.
-These descriptions are translated by B<xsubpp> into C code which
-implements these functions using Perl calling conventions, and which
-makes these functions visible from Perl interpreter.
-
-Pay a special attention to the function C<constant>. This name appears
-twice in the generated .xs file: once in the first part, as a static C
-function, the another time in the second part, when an XSUB interface to
-this static C function is defined.
-
-This is quite typical for .xs files: usually the .xs file provides
-an interface to an existing C function. Then this C function is defined
-somewhere (either in an external library, or in the first part of .xs file),
-and a Perl interface to this function (i.e. "Perl glue") is described in the
-second part of .xs file. The situation in L<"EXAMPLE 1">, L<"EXAMPLE 2">,
-and L<"EXAMPLE 3">, when all the work is done inside the "Perl glue", is
-somewhat of an exception rather than the rule.
-
-=head2 Getting the fat out of XSUBs
-
-In L<"EXAMPLE 4"> the second part of .xs file contained the following
-description of an XSUB:
-
- double
- foo(a,b,c)
- int a
- long b
- const char * c
- OUTPUT:
- RETVAL
-
-Note that in contrast with L<"EXAMPLE 1">, L<"EXAMPLE 2"> and L<"EXAMPLE 3">,
-this description does not contain the actual I<code> for what is done
-is done during a call to Perl function foo(). To understand what is going
-on here, one can add a CODE section to this XSUB:
-
- double
- foo(a,b,c)
- int a
- long b
- const char * c
- CODE:
- RETVAL = foo(a,b,c);
- OUTPUT:
- RETVAL
-
-However, these two XSUBs provide almost identical generated C code: B<xsubpp>
-compiler is smart enough to figure out the C<CODE:> section from the first
-two lines of the description of XSUB. What about C<OUTPUT:> section? In
-fact, that is absolutely the same! The C<OUTPUT:> section can be removed
-as well, I<as far as C<CODE:> section or C<PPCODE:> section> is not
-specified: B<xsubpp> can see that it needs to generate a function call
-section, and will autogenerate the OUTPUT section too. Thus one can
-shortcut the XSUB to become:
-
- double
- foo(a,b,c)
- int a
- long b
- const char * c
-
-Can we do the same with an XSUB
-
- int
- is_even(input)
- int input
- CODE:
- RETVAL = (input % 2 == 0);
- OUTPUT:
- RETVAL
-
-of L<"EXAMPLE 2">? To do this, one needs to define a C function C<int
-is_even(int input)>. As we saw in L<Anatomy of .xs file>, a proper place
-for this definition is in the first part of .xs file. In fact a C function
-
- int
- is_even(int arg)
- {
- return (arg % 2 == 0);
- }
-
-is probably overkill for this. Something as simple as a C<#define> will
-do too:
-
- #define is_even(arg) ((arg) % 2 == 0)
-
-After having this in the first part of .xs file, the "Perl glue" part becomes
-as simple as
-
- int
- is_even(input)
- int input
-
-This technique of separation of the glue part from the workhorse part has
-obvious tradeoffs: if you want to change a Perl interface, you need to
-change two places in your code. However, it removes a lot of clutter,
-and makes the workhorse part independent from idiosyncrasies of Perl calling
-convention. (In fact, there is nothing Perl-specific in the above description,
-a different version of B<xsubpp> might have translated this to TCL glue or
-Python glue as well.)
-
-=head2 More about XSUB arguments
-
-With the completion of Example 4, we now have an easy way to simulate some
-real-life libraries whose interfaces may not be the cleanest in the world.
-We shall now continue with a discussion of the arguments passed to the
-B<xsubpp> compiler.
-
-When you specify arguments to routines in the .xs file, you are really
-passing three pieces of information for each argument listed. The first
-piece is the order of that argument relative to the others (first, second,
-etc). The second is the type of argument, and consists of the type
-declaration of the argument (e.g., int, char*, etc). The third piece is
-the calling convention for the argument in the call to the library function.
-
-While Perl passes arguments to functions by reference,
-C passes arguments by value; to implement a C function which modifies data
-of one of the "arguments", the actual argument of this C function would be
-a pointer to the data. Thus two C functions with declarations
-
- int string_length(char *s);
- int upper_case_char(char *cp);
-
-may have completely different semantics: the first one may inspect an array
-of chars pointed by s, and the second one may immediately dereference C<cp>
-and manipulate C<*cp> only (using the return value as, say, a success
-indicator). From Perl one would use these functions in
-a completely different manner.
-
-One conveys this info to B<xsubpp> by replacing C<*> before the
-argument by C<&>. C<&> means that the argument should be passed to a library
-function by its address. The above two function may be XSUB-ified as
-
- int
- string_length(s)
- char * s
-
- int
- upper_case_char(cp)
- char &cp
-
-For example, consider:
-
- int
- foo(a,b)
- char &a
- char * b
-
-The first Perl argument to this function would be treated as a char and assigned
-to the variable a, and its address would be passed into the function foo.
-The second Perl argument would be treated as a string pointer and assigned to the
-variable b. The I<value> of b would be passed into the function foo. The
-actual call to the function foo that B<xsubpp> generates would look like this:
-
- foo(&a, b);
-
-B<xsubpp> will parse the following function argument lists identically:
-
- char &a
- char&a
- char & a
-
-However, to help ease understanding, it is suggested that you place a "&"
-next to the variable name and away from the variable type), and place a
-"*" near the variable type, but away from the variable name (as in the
-call to foo above). By doing so, it is easy to understand exactly what
-will be passed to the C function -- it will be whatever is in the "last
-column".
-
-You should take great pains to try to pass the function the type of variable
-it wants, when possible. It will save you a lot of trouble in the long run.
-
-=head2 The Argument Stack
-
-If we look at any of the C code generated by any of the examples except
-example 1, you will notice a number of references to ST(n), where n is
-usually 0. "ST" is actually a macro that points to the n'th argument
-on the argument stack. ST(0) is thus the first argument on the stack and
-therefore the first argument passed to the XSUB, ST(1) is the second
-argument, and so on.
-
-When you list the arguments to the XSUB in the .xs file, that tells B<xsubpp>
-which argument corresponds to which of the argument stack (i.e., the first
-one listed is the first argument, and so on). You invite disaster if you
-do not list them in the same order as the function expects them.
-
-The actual values on the argument stack are pointers to the values passed
-in. When an argument is listed as being an OUTPUT value, its corresponding
-value on the stack (i.e., ST(0) if it was the first argument) is changed.
-You can verify this by looking at the C code generated for Example 3.
-The code for the round() XSUB routine contains lines that look like this:
-
- double arg = (double)SvNV(ST(0));
- /* Round the contents of the variable arg */
- sv_setnv(ST(0), (double)arg);
-
-The arg variable is initially set by taking the value from ST(0), then is
-stored back into ST(0) at the end of the routine.
-
-XSUBs are also allowed to return lists, not just scalars. This must be
-done by manipulating stack values ST(0), ST(1), etc, in a subtly
-different way. See L<perlxs> for details.
-
-XSUBs are also allowed to avoid automatic conversion of Perl function arguments
-to C function arguments. See L<perlxs> for details. Some people prefer
-manual conversion by inspecting C<ST(i)> even in the cases when automatic
-conversion will do, arguing that this makes the logic of an XSUB call clearer.
-Compare with L<"Getting the fat out of XSUBs"> for a similar tradeoff of
-a complete separation of "Perl glue" and "workhorse" parts of an XSUB.
-
-While experts may argue about these idioms, a novice to Perl guts may
-prefer a way which is as little Perl-guts-specific as possible, meaning
-automatic conversion and automatic call generation, as in
-L<"Getting the fat out of XSUBs">. This approach has the additional
-benefit of protecting the XSUB writer from future changes to the Perl API.
-
-=head2 Extending your Extension
-
-Sometimes you might want to provide some extra methods or subroutines
-to assist in making the interface between Perl and your extension simpler
-or easier to understand. These routines should live in the .pm file.
-Whether they are automatically loaded when the extension itself is loaded
-or only loaded when called depends on where in the .pm file the subroutine
-definition is placed. You can also consult L<AutoLoader> for an alternate
-way to store and load your extra subroutines.
-
-=head2 Documenting your Extension
-
-There is absolutely no excuse for not documenting your extension.
-Documentation belongs in the .pm file. This file will be fed to pod2man,
-and the embedded documentation will be converted to the man page format,
-then placed in the blib directory. It will be copied to Perl's man
-page directory when the extension is installed.
-
-You may intersperse documentation and Perl code within the .pm file.
-In fact, if you want to use method autoloading, you must do this,
-as the comment inside the .pm file explains.
-
-See L<perlpod> for more information about the pod format.
-
-=head2 Installing your Extension
-
-Once your extension is complete and passes all its tests, installing it
-is quite simple: you simply run "make install". You will either need
-to have write permission into the directories where Perl is installed,
-or ask your system administrator to run the make for you.
-
-Alternately, you can specify the exact directory to place the extension's
-files by placing a "PREFIX=/destination/directory" after the make install.
-(or in between the make and install if you have a brain-dead version of make).
-This can be very useful if you are building an extension that will eventually
-be distributed to multiple systems. You can then just archive the files in
-the destination directory and distribute them to your destination systems.
-
-=head2 EXAMPLE 5
-
-In this example, we'll do some more work with the argument stack. The
-previous examples have all returned only a single value. We'll now
-create an extension that returns an array.
-
-This extension is very Unix-oriented (struct statfs and the statfs system
-call). If you are not running on a Unix system, you can substitute for
-statfs any other function that returns multiple values, you can hard-code
-values to be returned to the caller (although this will be a bit harder
-to test the error case), or you can simply not do this example. If you
-change the XSUB, be sure to fix the test cases to match the changes.
-
-Return to the Mytest directory and add the following code to the end of
-Mytest.xs:
-
- void
- statfs(path)
- char * path
- INIT:
- int i;
- struct statfs buf;
-
- PPCODE:
- i = statfs(path, &buf);
- if (i == 0) {
- XPUSHs(sv_2mortal(newSVnv(buf.f_bavail)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_bfree)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_blocks)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_bsize)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_ffree)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_files)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_type)));
- XPUSHs(sv_2mortal(newSVnv(buf.f_fsid[0])));
- XPUSHs(sv_2mortal(newSVnv(buf.f_fsid[1])));
- } else {
- XPUSHs(sv_2mortal(newSVnv(errno)));
- }
-
-You'll also need to add the following code to the top of the .xs file, just
-after the include of "XSUB.h":
-
- #include <sys/vfs.h>
-
-Also add the following code segment to test.pl while incrementing the "1..9"
-string in the BEGIN block to "1..11":
-
- @a = &Mytest::statfs("/blech");
- print ((scalar(@a) == 1 && $a[0] == 2) ? "ok 10\n" : "not ok 10\n");
- @a = &Mytest::statfs("/");
- print scalar(@a) == 9 ? "ok 11\n" : "not ok 11\n";
-
-=head2 New Things in this Example
-
-This example added quite a few new concepts. We'll take them one at a time.
-
-=over 4
-
-=item *
-
-The INIT: directive contains code that will be placed immediately after
-the argument stack is decoded. C does not allow variable declarations at
-arbitrary locations inside a function,
-so this is usually the best way to declare local variables needed by the XSUB.
-(Alternatively, one could put the whole C<PPCODE:> section into braces, and
-put these declarations on top.)
-
-=item *
-
-This routine also returns a different number of arguments depending on the
-success or failure of the call to statfs. If there is an error, the error
-number is returned as a single-element array. If the call is successful,
-then a 9-element array is returned. Since only one argument is passed into
-this function, we need room on the stack to hold the 9 values which may be
-returned.
-
-We do this by using the PPCODE: directive, rather than the CODE: directive.
-This tells B<xsubpp> that we will be managing the return values that will be
-put on the argument stack by ourselves.
-
-=item *
-
-When we want to place values to be returned to the caller onto the stack,
-we use the series of macros that begin with "XPUSH". There are five
-different versions, for placing integers, unsigned integers, doubles,
-strings, and Perl scalars on the stack. In our example, we placed a
-Perl scalar onto the stack. (In fact this is the only macro which
-can be used to return multiple values.)
-
-The XPUSH* macros will automatically extend the return stack to prevent
-it from being overrun. You push values onto the stack in the order you
-want them seen by the calling program.
-
-=item *
-
-The values pushed onto the return stack of the XSUB are actually mortal SV's.
-They are made mortal so that once the values are copied by the calling
-program, the SV's that held the returned values can be deallocated.
-If they were not mortal, then they would continue to exist after the XSUB
-routine returned, but would not be accessible. This is a memory leak.
-
-=item *
-
-If we were interested in performance, not in code compactness, in the success
-branch we would not use C<XPUSHs> macros, but C<PUSHs> macros, and would
-pre-extend the stack before pushing the return values:
-
- EXTEND(SP, 9);
-
-The tradeoff is that one needs to calculate the number of return values
-in advance (though overextending the stack will not typically hurt
-anything but memory consumption).
-
-Similarly, in the failure branch we could use C<PUSHs> I<without> extending
-the stack: the Perl function reference comes to an XSUB on the stack, thus
-the stack is I<always> large enough to take one return value.
-
-=back
-
-=head2 EXAMPLE 6
-
-In this example, we will accept a reference to an array as an input
-parameter, and return a reference to an array of hashes. This will
-demonstrate manipulation of complex Perl data types from an XSUB.
-
-This extension is somewhat contrived. It is based on the code in
-the previous example. It calls the statfs function multiple times,
-accepting a reference to an array of filenames as input, and returning
-a reference to an array of hashes containing the data for each of the
-filesystems.
-
-Return to the Mytest directory and add the following code to the end of
-Mytest.xs:
-
- SV *
- multi_statfs(paths)
- SV * paths
- INIT:
- AV * results;
- I32 numpaths = 0;
- int i, n;
- struct statfs buf;
-
- if ((!SvROK(paths))
- || (SvTYPE(SvRV(paths)) != SVt_PVAV)
- || ((numpaths = av_len((AV *)SvRV(paths))) < 0))
- {
- XSRETURN_UNDEF;
- }
- results = (AV *)sv_2mortal((SV *)newAV());
- CODE:
- for (n = 0; n <= numpaths; n++) {
- HV * rh;
- STRLEN l;
- char * fn = SvPV(*av_fetch((AV *)SvRV(paths), n, 0), l);
-
- i = statfs(fn, &buf);
- if (i != 0) {
- av_push(results, newSVnv(errno));
- continue;
- }
-
- rh = (HV *)sv_2mortal((SV *)newHV());
-
- hv_store(rh, "f_bavail", 8, newSVnv(buf.f_bavail), 0);
- hv_store(rh, "f_bfree", 7, newSVnv(buf.f_bfree), 0);
- hv_store(rh, "f_blocks", 8, newSVnv(buf.f_blocks), 0);
- hv_store(rh, "f_bsize", 7, newSVnv(buf.f_bsize), 0);
- hv_store(rh, "f_ffree", 7, newSVnv(buf.f_ffree), 0);
- hv_store(rh, "f_files", 7, newSVnv(buf.f_files), 0);
- hv_store(rh, "f_type", 6, newSVnv(buf.f_type), 0);
-
- av_push(results, newRV((SV *)rh));
- }
- RETVAL = newRV((SV *)results);
- OUTPUT:
- RETVAL
-
-And add the following code to test.pl, while incrementing the "1..11"
-string in the BEGIN block to "1..13":
-
- $results = Mytest::multi_statfs([ '/', '/blech' ]);
- print ((ref $results->[0]) ? "ok 12\n" : "not ok 12\n");
- print ((! ref $results->[1]) ? "ok 13\n" : "not ok 13\n");
-
-=head2 New Things in this Example
-
-There are a number of new concepts introduced here, described below:
-
-=over 4
-
-=item *
-
-This function does not use a typemap. Instead, we declare it as accepting
-one SV* (scalar) parameter, and returning an SV* value, and we take care of
-populating these scalars within the code. Because we are only returning
-one value, we don't need a C<PPCODE:> directive - instead, we use C<CODE:>
-and C<OUTPUT:> directives.
-
-=item *
-
-When dealing with references, it is important to handle them with caution.
-The C<INIT:> block first checks that
-C<SvROK> returns true, which indicates that paths is a valid reference. It
-then verifies that the object referenced by paths is an array, using C<SvRV>
-to dereference paths, and C<SvTYPE> to discover its type. As an added test,
-it checks that the array referenced by paths is non-empty, using the C<av_len>
-function (which returns -1 if the array is empty). The XSRETURN_UNDEF macro
-is used to abort the XSUB and return the undefined value whenever all three of
-these conditions are not met.
-
-=item *
-
-We manipulate several arrays in this XSUB. Note that an array is represented
-internally by an AV* pointer. The functions and macros for manipulating
-arrays are similar to the functions in Perl: C<av_len> returns the highest
-index in an AV*, much like $#array; C<av_fetch> fetches a single scalar value
-from an array, given its index; C<av_push> pushes a scalar value onto the
-end of the array, automatically extending the array as necessary.
-
-Specifically, we read pathnames one at a time from the input array, and
-store the results in an output array (results) in the same order. If
-statfs fails, the element pushed onto the return array is the value of
-errno after the failure. If statfs succeeds, though, the value pushed
-onto the return array is a reference to a hash containing some of the
-information in the statfs structure.
-
-As with the return stack, it would be possible (and a small performance win)
-to pre-extend the return array before pushing data into it, since we know
-how many elements we will return:
-
- av_extend(results, numpaths);
-
-=item *
-
-We are performing only one hash operation in this function, which is storing
-a new scalar under a key using C<hv_store>. A hash is represented by an HV*
-pointer. Like arrays, the functions for manipulating hashes from an XSUB
-mirror the functionality available from Perl. See L<perlguts> and L<perlapi>
-for details.
-
-=item *
-
-To create a reference, we use the C<newRV> function. Note that you can
-cast an AV* or an HV* to type SV* in this case (and many others). This
-allows you to take references to arrays, hashes and scalars with the same
-function. Conversely, the C<SvRV> function always returns an SV*, which may
-need to be be cast to the appropriate type if it is something other than a
-scalar (check with C<SvTYPE>).
-
-=item *
-
-At this point, xsubpp is doing very little work - the differences between
-Mytest.xs and Mytest.c are minimal.
-
-=back
-
-=head2 EXAMPLE 7 (Coming Soon)
-
-XPUSH args AND set RETVAL AND assign return value to array
-
-=head2 EXAMPLE 8 (Coming Soon)
-
-Setting $!
-
-=head2 EXAMPLE 9 (Coming Soon)
-
-Getting fd's from filehandles
-
-=head2 Troubleshooting these Examples
-
-As mentioned at the top of this document, if you are having problems with
-these example extensions, you might see if any of these help you.
-
-=over 4
-
-=item *
-
-In versions of 5.002 prior to the gamma version, the test script in Example
-1 will not function properly. You need to change the "use lib" line to
-read:
-
- use lib './blib';
-
-=item *
-
-In versions of 5.002 prior to version 5.002b1h, the test.pl file was not
-automatically created by h2xs. This means that you cannot say "make test"
-to run the test script. You will need to add the following line before the
-"use extension" statement:
-
- use lib './blib';
-
-=item *
-
-In versions 5.000 and 5.001, instead of using the above line, you will need
-to use the following line:
-
- BEGIN { unshift(@INC, "./blib") }
-
-=item *
-
-This document assumes that the executable named "perl" is Perl version 5.
-Some systems may have installed Perl version 5 as "perl5".
-
-=back
-
-=head1 See also
-
-For more information, consult L<perlguts>, L<perlapi>, L<perlxs>, L<perlmod>,
-and L<perlpod>.
-
-=head1 Author
-
-Jeff Okamoto <F<okamoto@corp.hp.com>>
-
-Reviewed and assisted by Dean Roehrich, Ilya Zakharevich, Andreas Koenig,
-and Tim Bunce.
-
-=head2 Last Changed
-
-1999/11/30
diff --git a/contrib/perl5/pod/pod2html.PL b/contrib/perl5/pod/pod2html.PL
deleted file mode 100644
index 366dc16..0000000
--- a/contrib/perl5/pod/pod2html.PL
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-=pod
-
-=head1 NAME
-
-pod2html - convert .pod files to .html files
-
-=head1 SYNOPSIS
-
- pod2html --help --htmlroot=<name> --infile=<name> --outfile=<name>
- --podpath=<name>:...:<name> --podroot=<name>
- --libpods=<name>:...:<name> --recurse --norecurse --verbose
- --index --noindex --title=<name>
-
-=head1 DESCRIPTION
-
-Converts files from pod format (see L<perlpod>) to HTML format.
-
-=head1 ARGUMENTS
-
-pod2html takes the following arguments:
-
-=over 4
-
-=item help
-
- --help
-
-Displays the usage message.
-
-=item htmlroot
-
- --htmlroot=name
-
-Sets the base URL for the HTML files. When cross-references are made,
-the HTML root is prepended to the URL.
-
-=item infile
-
- --infile=name
-
-Specify the pod file to convert. Input is taken from STDIN if no
-infile is specified.
-
-=item outfile
-
- --outfile=name
-
-Specify the HTML file to create. Output goes to STDOUT if no outfile
-is specified.
-
-=item podroot
-
- --podroot=name
-
-Specify the base directory for finding library pods.
-
-=item podpath
-
- --podpath=name:...:name
-
-Specify which subdirectories of the podroot contain pod files whose
-HTML converted forms can be linked-to in cross-references.
-
-=item libpods
-
- --libpods=name:...:name
-
-List of page names (eg, "perlfunc") which contain linkable C<=item>s.
-
-=item netscape
-
- --netscape
-
-Use Netscape HTML directives when applicable.
-
-=item nonetscape
-
- --nonetscape
-
-Do not use Netscape HTML directives (default).
-
-=item index
-
- --index
-
-Generate an index at the top of the HTML file (default behaviour).
-
-=item noindex
-
- --noindex
-
-Do not generate an index at the top of the HTML file.
-
-
-=item recurse
-
- --recurse
-
-Recurse into subdirectories specified in podpath (default behaviour).
-
-=item norecurse
-
- --norecurse
-
-Do not recurse into subdirectories specified in podpath.
-
-=item title
-
- --title=title
-
-Specify the title of the resulting HTML file.
-
-=item verbose
-
- --verbose
-
-Display progress messages.
-
-=back
-
-=head1 AUTHOR
-
-Tom Christiansen, E<lt>tchrist@perl.comE<gt>.
-
-=head1 BUGS
-
-See L<Pod::Html> for a list of known bugs in the translator.
-
-=head1 SEE ALSO
-
-L<perlpod>, L<Pod::Html>
-
-=head1 COPYRIGHT
-
-This program is distributed under the Artistic License.
-
-=cut
-
-use Pod::Html;
-
-pod2html @ARGV;
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/pod2latex.PL b/contrib/perl5/pod/pod2latex.PL
deleted file mode 100644
index 3d3cfb6..0000000
--- a/contrib/perl5/pod/pod2latex.PL
+++ /dev/null
@@ -1,350 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-# pod2latex conversion program
-
-use Pod::LaTeX;
-use Pod::Find qw/ pod_find /;
-use Pod::Usage;
-use Getopt::Long;
-use File::Basename;
-
-# Read command line arguments
-
-my %options = (
- "help" => 0,
- "man" => 0,
- "sections" => [],
- "full" => 0,
- "out" => undef,
- "verbose" => 0,
- "modify" => 0,
- );
-
-GetOptions(\%options,
- "help",
- "man",
- "verbose",
- "full",
- "sections=s@",
- "out=s",
- "modify",
- ) || pod2usage(2);
-
-pod2usage(1) if ($options{help});
-pod2usage(-verbose => 2) if ($options{man});
-
-
-# Read all the files from the command line
-my @files = @ARGV;
-
-# Now find which ones are real pods and convert
-# directories to their contents.
-
-# Extract the pods from each arg since some of them might
-# be directories
-# This is not as efficient as using pod_find to search through
-# everything at once but it allows us to preserve the order
-# supplied by the user
-
-my @pods;
-foreach my $arg (@files) {
- my %pods = pod_find($arg);
- push(@pods, sort keys %pods);
-}
-
-# Abort if nothing to do
-if ($#pods == -1) {
- warn "None of the supplied Pod files actually exist\n";
- exit;
-}
-
-
-
-# If $options{'out'} is set we are processing to a single output file
-my $multi_documents;
-if (exists $options{'out'} && defined $options{'out'}) {
- $multi_documents = 0;
-} else {
- $multi_documents = 1;
-}
-
-# If the output file is not specified it is assumed that
-# a single output file is required per input file using
-# a .tex extension rather than any exisiting extension
-
-if ($multi_documents) {
-
- # Case where we just generate one input per output
-
- foreach my $pod (@pods) {
-
- if (-f $pod) {
-
- my $output = $pod;
- $output = basename($output, '.pm', '.pod','.pl') . '.tex';
-
- # Create a new parser object
- my $parser = new Pod::LaTeX(
- AddPreamble => $options{'full'},
- AddPostamble => $options{'full'},
- MakeIndex => $options{'full'},
- TableOfContents => $options{'full'},
- ReplaceNAMEwithSection => $options{'modify'},
- UniqueLabels => $options{'modify'},
- );
-
- # Select sections if supplied
- $parser->select(@{ $options{'sections'}})
- if @{$options{'sections'}};
-
- # Derive the input file from the output file
- $parser->parse_from_file($pod, $output);
-
- print "Written output to $output\n" if $options{'verbose'};
-
- } else {
- warn "File $pod not found\n";
- }
-
- }
-} else {
-
- # Case where we want everything to be in a single document
-
- # Need to open the output file ourselves
- my $output = $options{'out'};
- $output .= '.tex' unless $output =~ /\.tex$/;
-
- # Use auto-vivified file handle in perl 5.6
- use Symbol;
- my $outfh = gensym;
- open ($outfh, ">$output") || die "Could not open output file: $!\n";
-
- # Flag to indicate whether we have converted at least one file
- # indicates how many files have been converted
- my $converted = 0;
-
- # Loop over the input files
- foreach my $pod (@pods) {
-
- if (-f $pod) {
-
- warn "Converting $pod\n" if $options{'verbose'};
-
- # Open the file (need the handle)
- # Use auto-vivified handle in perl 5.6
- my $podfh = gensym;
- open ($podfh, "<$pod") || die "Could not open pod file $pod: $!\n";
-
- # if this is the first file to be converted we may want to add
- # a preamble (controlled by command line option)
- if ($converted == 0 && $options{'full'}) {
- $preamble = 1;
- } else {
- $preamble = 0;
- }
-
- # if this is the last file to be converted may want to add
- # a postamble (controlled by command line option)
- # relies on a previous pass to check existence of all pods we
- # are converting.
- my $postamble = ( ($converted == $#pods && $options{'full'}) ? 1 : 0 );
-
- # Open parser object
- # May want to start with a preamble for the first one and
- # end with an index for the last
- my $parser = new Pod::LaTeX(
- MakeIndex => $options{'full'},
- TableOfContents => $preamble,
- ReplaceNAMEwithSection => $options{'modify'},
- UniqueLabels => $options{'modify'},
- StartWithNewPage => $options{'full'},
- AddPreamble => $preamble,
- AddPostamble => $postamble,
- );
-
- # Store the file name for error messages
- # This is a kluge that breaks the data hiding of the object
- $parser->{_INFILE} = $pod;
-
- # Select sections if supplied
- $parser->select(@{ $options{'sections'}})
- if @{$options{'sections'}};
-
- # Parse it
- $parser->parse_from_filehandle($podfh, $outfh);
-
- # We have converted at least one file
- $converted++;
-
- } else {
- warn "File $pod not found\n";
- }
-
- }
-
- # Should unlink the file if we didn't convert anything!
- # dont check for return status of unlink
- # since there is not a lot to be done if the unlink failed
- # and the program does not rely upon it.
- unlink "$output" unless $converted;
-
- # If verbose
- warn "Converted $converted files\n" if $options{'verbose'};
-
-}
-
-exit;
-
-__END__
-
-=head1 NAME
-
-pod2latex - convert pod documentation to latex format
-
-=head1 SYNOPSIS
-
- pod2latex *.pm
-
- pod2latex -out mytex.tex *.pod
-
- pod2latex -full -sections 'DESCRIPTION|NAME' SomeDir
-
-=head1 DESCRIPTION
-
-C<pod2latex> is a program to convert POD format documentation
-(L<perlpod>) into latex. It can process multiple input documents at a
-time and either generate a latex file per input document or a single
-combined output file.
-
-=head1 OPTIONS AND ARGUMENTS
-
-This section describes the supported command line options. Minium
-matching is supported.
-
-=over 4
-
-=item B<-out>
-
-Name of the output file to be used. If there are multiple input pods
-it is assumed that the intention is to write all translated output
-into a single file. C<.tex> is appended if not present. If the
-argument is not supplied, a single document will be created for each
-input file.
-
-=item B<-full>
-
-Creates a complete C<latex> file that can be processed immediately
-(unless C<=for/=begin> directives are used that rely on extra packages).
-Table of contents and index generation commands are included in the
-wrapper C<latex> code.
-
-=item B<-sections>
-
-Specify pod sections to include (or remove if negated) in the
-translation. See L<Pod::Select/"SECTION SPECIFICATIONS"> for the
-format to use for I<section-spec>. This option may be given multiple
-times on the command line.This is identical to the similar option in
-the C<podselect()> command.
-
-=item B<-modify>
-
-This option causes the output C<latex> to be slightly
-modified from the input pod such that when a C<=head1 NAME>
-is encountered a section is created containing the actual
-pod name (rather than B<NAME>) and all subsequent C<=head1>
-directives are treated as subsections. This has the advantage
-that the description of a module will be in its own section
-which is helpful for including module descriptions in documentation.
-Also forces C<latex> label and index entries to be prefixed by the
-name of the module.
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print the manual page and exit.
-
-=item B<-verbose>
-
-Print information messages as each document is processed.
-
-=back
-
-=head1 BUGS
-
-Known bugs are:
-
-=over 4
-
-=item *
-
-Cross references between documents are not resolved when multiple
-pod documents are converted into a single output C<latex> file.
-
-=item *
-
-Functions and variables are not automatically recognized
-and they will therefore not be marked up in any special way
-unless instructed by an explicit pod command.
-
-=back
-
-=head1 SEE ALSO
-
-L<Pod::LaTeX>
-
-=head1 AUTHOR
-
-Tim Jenness E<lt>t.jenness@jach.hawaii.eduE<gt>
-
-This program is free software; you can redistribute it
-and/or modify it under the same terms as Perl itself.
-
-Copyright (C) 2000 Tim Jenness.
-
-=cut
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/pod2man.PL b/contrib/perl5/pod/pod2man.PL
deleted file mode 100644
index f320a3c..0000000
--- a/contrib/perl5/pod/pod2man.PL
+++ /dev/null
@@ -1,496 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-# pod2man -- Convert POD data to formatted *roff input.
-# $Id: pod2man.PL,v 1.4 2000/11/19 05:47:46 eagle Exp $
-#
-# Copyright 1999, 2000 by Russ Allbery <rra@stanford.edu>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-
-require 5.004;
-
-use Getopt::Long qw(GetOptions);
-use Pod::Man ();
-use Pod::Usage qw(pod2usage);
-
-use strict;
-
-# Insert -- into @ARGV before any single dash argument to hide it from
-# Getopt::Long; we want to interpret it as meaning stdin (which Pod::Parser
-# does correctly).
-my $stdin;
-@ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV;
-
-# Parse our options, trying to retain backwards compatibility with pod2man
-# but allowing short forms as well. --lax is currently ignored.
-my %options;
-Getopt::Long::config ('bundling_override');
-GetOptions (\%options, 'section|s=s', 'release|r=s', 'center|c=s',
- 'date|d=s', 'fixed=s', 'fixedbold=s', 'fixeditalic=s',
- 'fixedbolditalic=s', 'official|o', 'quotes|q=s', 'lax|l',
- 'help|h') or exit 1;
-pod2usage (0) if $options{help};
-
-# Official sets --center, but don't override things explicitly set.
-if ($options{official} && !defined $options{center}) {
- $options{center} = 'Perl Programmers Reference Guide';
-}
-
-# Initialize and run the formatter, pulling a pair of input and output off
-# at a time.
-my $parser = Pod::Man->new (%options);
-my @files;
-do {
- @files = splice (@ARGV, 0, 2);
- $parser->parse_from_file (@files);
-} while (@ARGV);
-
-__END__
-
-=head1 NAME
-
-pod2man - Convert POD data to formatted *roff input
-
-=head1 SYNOPSIS
-
-pod2man [B<--section>=I<manext>] [B<--release>=I<version>]
-[B<--center>=I<string>] [B<--date>=I<string>] [B<--fixed>=I<font>]
-[B<--fixedbold>=I<font>] [B<--fixeditalic>=I<font>]
-[B<--fixedbolditalic>=I<font>] [B<--official>] [B<--lax>]
-[B<--quotes>=I<quotes>] [I<input> [I<output>] ...]
-
-pod2man B<--help>
-
-=head1 DESCRIPTION
-
-B<pod2man> is a front-end for Pod::Man, using it to generate *roff input
-from POD source. The resulting *roff code is suitable for display on a
-terminal using nroff(1), normally via man(1), or printing using troff(1).
-
-I<input> is the file to read for POD source (the POD can be embedded in
-code). If I<input> isn't given, it defaults to STDIN. I<output>, if given,
-is the file to which to write the formatted output. If I<output> isn't
-given, the formatted output is written to STDOUT. Several POD files can be
-processed in the same B<pod2man> invocation (saving module load and compile
-times) by providing multiple pairs of I<input> and I<output> files on the
-command line.
-
-B<--section>, B<--release>, B<--center>, B<--date>, and B<--official> can be
-used to set the headers and footers to use; if not given, Pod::Man will
-assume various defaults. See below or L<Pod::Man> for details.
-
-B<pod2man> assumes that your *roff formatters have a fixed-width font named
-CW. If yours is called something else (like CR), use B<--fixed> to specify
-it. This generally only matters for troff output for printing. Similarly,
-you can set the fonts used for bold, italic, and bold italic fixed-width
-output.
-
-Besides the obvious pod conversions, Pod::Man, and therefore pod2man also
-takes care of formatting func(), func(n), and simple variable references
-like $foo or @bar so you don't have to use code escapes for them; complex
-expressions like C<$fred{'stuff'}> will still need to be escaped, though.
-It also translates dashes that aren't used as hyphens into en dashes, makes
-long dashes--like this--into proper em dashes, fixes "paired quotes," and
-takes care of several other troff-specific tweaks. See L<Pod::Man> for
-complete information.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<-c> I<string>, B<--center>=I<string>
-
-Sets the centered page header to I<string>. The default is "User
-Contributed Perl Documentation", but also see B<--official> below.
-
-=item B<-d> I<string>, B<--date>=I<string>
-
-Set the left-hand footer string to this value. By default, the modification
-date of the input file will be used, or the current date if input comes from
-STDIN.
-
-=item B<--fixed>=I<font>
-
-The fixed-width font to use for vertabim text and code. Defaults to CW.
-Some systems may want CR instead. Only matters for troff(1) output.
-
-=item B<--fixedbold>=I<font>
-
-Bold version of the fixed-width font. Defaults to CB. Only matters for
-troff(1) output.
-
-=item B<--fixeditalic>=I<font>
-
-Italic version of the fixed-width font (actually, something of a misnomer,
-since most fixed-width fonts only have an oblique version, not an italic
-version). Defaults to CI. Only matters for troff(1) output.
-
-=item B<--fixedbolditalic>=I<font>
-
-Bold italic (probably actually oblique) version of the fixed-width font.
-Pod::Man doesn't assume you have this, and defaults to CB. Some systems
-(such as Solaris) have this font available as CX. Only matters for troff(1)
-output.
-
-=item B<-h>, B<--help>
-
-Print out usage information.
-
-=item B<-l>, B<--lax>
-
-Don't complain when required sections are missing. Not currently used, as
-POD checking functionality is not yet implemented in Pod::Man.
-
-=item B<-o>, B<--official>
-
-Set the default header to indicate that this page is part of the standard
-Perl release, if B<--center> is not also given.
-
-=item B<-q> I<quotes>, B<--quotes>=I<quotes>
-
-Sets the quote marks used to surround CE<lt>> text to I<quotes>. If
-I<quotes> is a single character, it is used as both the left and right
-quote; if I<quotes> is two characters, the first character is used as the
-left quote and the second as the right quoted; and if I<quotes> is four
-characters, the first two are used as the left quote and the second two as
-the right quote.
-
-I<quotes> may also be set to the special value C<none>, in which case no
-quote marks are added around CE<lt>> text (but the font is still changed for
-troff output).
-
-=item B<-r>, B<--release>
-
-Set the centered footer. By default, this is the version of Perl you run
-B<pod2man> under. Note that some system an macro sets assume that the
-centered footer will be a modification date and will prepend something like
-"Last modified: "; if this is the case, you may want to set B<--release> to
-the last modified date and B<--date> to the version number.
-
-=item B<-s>, B<--section>
-
-Set the section for the C<.TH> macro. The standard section numbering
-convention is to use 1 for user commands, 2 for system calls, 3 for
-functions, 4 for devices, 5 for file formats, 6 for games, 7 for
-miscellaneous information, and 8 for administrator commands. There is a lot
-of variation here, however; some systems (like Solaris) use 4 for file
-formats, 5 for miscellaneous information, and 7 for devices. Still others
-use 1m instead of 8, or some mix of both. About the only section numbers
-that are reliably consistent are 1, 2, and 3.
-
-By default, section 1 will be used unless the file ends in .pm in which case
-section 3 will be selected.
-
-=back
-
-=head1 DIAGNOSTICS
-
-If B<pod2man> fails with errors, see L<Pod::Man> and L<Pod::Parser> for
-information about what those errors might mean.
-
-=head1 EXAMPLES
-
- pod2man program > program.1
- pod2man SomeModule.pm /usr/perl/man/man3/SomeModule.3
- pod2man --section=7 note.pod > note.7
-
-If you would like to print out a lot of man page continuously, you probably
-want to set the C and D registers to set contiguous page numbering and
-even/odd paging, at least on some versions of man(7).
-
- troff -man -rC1 -rD1 perl.1 perldata.1 perlsyn.1 ...
-
-To get index entries on stderr, turn on the F register, as in:
-
- troff -man -rF1 perl.1
-
-The indexing merely outputs messages via C<.tm> for each major page,
-section, subsection, item, and any C<XE<lt>E<gt>> directives. See
-L<Pod::Man> for more details.
-
-=head1 BUGS
-
-Lots of this documentation is duplicated from L<Pod::Man>.
-
-POD checking and the corresponding B<--lax> option don't work yet.
-
-=head1 NOTES
-
-For those not sure of the proper layout of a man page, here are some notes
-on writing a proper man page.
-
-The name of the program being documented is conventionally written in bold
-(using BE<lt>E<gt>) wherever it occurs, as are all program options.
-Arguments should be written in italics (IE<lt>E<gt>). Functions are
-traditionally written in italics; if you write a function as function(),
-Pod::Man will take care of this for you. Literal code or commands should
-be in CE<lt>E<gt>. References to other man pages should be in the form
-C<manpage(section)>, and Pod::Man will automatically format those
-appropriately. As an exception, it's traditional not to use this form when
-referring to module documentation; use C<LE<lt>Module::NameE<gt>> instead.
-
-References to other programs or functions are normally in the form of man
-page references so that cross-referencing tools can provide the user with
-links and the like. It's possible to overdo this, though, so be careful not
-to clutter your documentation with too much markup.
-
-The major headers should be set out using a C<=head1> directive, and are
-historically written in the rather startling ALL UPPER CASE format, although
-this is not mandatory. Minor headers may be included using C<=head2>, and
-are typically in mixed case.
-
-The standard sections of a manual page are:
-
-=over 4
-
-=item NAME
-
-Mandatory section; should be a comma-separated list of programs or functions
-documented by this podpage, such as:
-
- foo, bar - programs to do something
-
-Manual page indexers are often extremely picky about the format of this
-section, so don't put anything in it except this line. A single dash, and
-only a single dash, should separate the list of programs or functions from
-the description. Functions should not be qualified with C<()> or the like.
-The description should ideally fit on a single line, even if a man program
-replaces the dash with a few tabs.
-
-=item SYNOPSIS
-
-A short usage summary for programs and functions. This section is mandatory
-for section 3 pages.
-
-=item DESCRIPTION
-
-Extended description and discussion of the program or functions, or the body
-of the documentation for man pages that document something else. If
-particularly long, it's a good idea to break this up into subsections
-C<=head2> directives like:
-
- =head2 Normal Usage
-
- =head2 Advanced Features
-
- =head2 Writing Configuration Files
-
-or whatever is appropriate for your documentation.
-
-=item OPTIONS
-
-Detailed description of each of the command-line options taken by the
-program. This should be separate from the description for the use of things
-like L<Pod::Usage|Pod::Usage>. This is normally presented as a list, with
-each option as a separate C<=item>. The specific option string should be
-enclosed in BE<lt>E<gt>. Any values that the option takes should be
-enclosed in IE<lt>E<gt>. For example, the section for the option
-B<--section>=I<manext> would be introduced with:
-
- =item B<--section>=I<manext>
-
-Synonymous options (like both the short and long forms) are separated by a
-comma and a space on the same C<=item> line, or optionally listed as their
-own item with a reference to the canonical name. For example, since
-B<--section> can also be written as B<-s>, the above would be:
-
- =item B<-s> I<manext>, B<--section>=I<manext>
-
-(Writing the short option first is arguably easier to read, since the long
-option is long enough to draw the eye to it anyway and the short option can
-otherwise get lost in visual noise.)
-
-=item RETURN VALUE
-
-What the program or function returns, if successful. This section can be
-omitted for programs whose precise exit codes aren't important, provided
-they return 0 on success as is standard. It should always be present for
-functions.
-
-=item ERRORS
-
-Exceptions, error return codes, exit statuses, and errno settings.
-Typically used for function documentation; program documentation uses
-DIAGNOSTICS instead. The general rule of thumb is that errors printed to
-STDOUT or STDERR and intended for the end user are documented in DIAGNOSTICS
-while errors passed internal to the calling program and intended for other
-programmers are documented in ERRORS. When documenting a function that sets
-errno, a full list of the possible errno values should be given here.
-
-=item DIAGNOSTICS
-
-All possible messages the program can print out--and what they mean. You
-may wish to follow the same documentation style as the Perl documentation;
-see perldiag(1) for more details (and look at the POD source as well).
-
-If applicable, please include details on what the user should do to correct
-the error; documenting an error as indicating "the input buffer is too
-small" without telling the user how to increase the size of the input buffer
-(or at least telling them that it isn't possible) aren't very useful.
-
-=item EXAMPLES
-
-Give some example uses of the program or function. Don't skimp; users often
-find this the most useful part of the documentation. The examples are
-generally given as verbatim paragraphs.
-
-Don't just present an example without explaining what it does. Adding a
-short paragraph saying what the example will do can increase the value of
-the example immensely.
-
-=item ENVIRONMENT
-
-Environment variables that the program cares about, normally presented as a
-list using C<=over>, C<=item>, and C<=back>. For example:
-
- =over 6
-
- =item HOME
-
- Used to determine the user's home directory. F<.foorc> in this
- directory is read for configuration details, if it exists.
-
- =back
-
-Since environment variables are normally in all uppercase, no additional
-special formatting is generally needed; they're glaring enough as it is.
-
-=item FILES
-
-All files used by the program or function, normally presented as a list, and
-what it uses them for. File names should be enclosed in FE<lt>E<gt>. It's
-particularly important to document files that will be potentially modified.
-
-=item CAVEATS
-
-Things to take special care with, sometimes called WARNINGS.
-
-=item BUGS
-
-Things that are broken or just don't work quite right.
-
-=item RESTRICTIONS
-
-Bugs you don't plan to fix. :-)
-
-=item NOTES
-
-Miscellaneous commentary.
-
-=item SEE ALSO
-
-Other man pages to check out, like man(1), man(7), makewhatis(8), or
-catman(8). Normally a simple list of man pages separated by commas, or a
-paragraph giving the name of a reference work. Man page references, if they
-use the standard C<name(section)> form, don't have to be enclosed in
-LE<lt>E<gt>, but other things in this section probably should be when
-appropriate. You may need to use the C<LE<lt>...|...E<gt>> syntax to keep
-B<pod2man> and B<pod2text> from being too verbose; see perlpod(1).
-
-If the package has a web site, include a URL here.
-
-=item AUTHOR
-
-Who wrote it (use AUTHORS for multiple people). Including your current
-e-mail address (or some e-mail address to which bug reports should be sent)
-so that users have a way of contacting you is a good idea. Remember that
-program documentation tends to roam the wild for far longer than you expect
-and pick an e-mail address that's likely to last if possible.
-
-=item HISTORY
-
-Programs derived from other sources sometimes have this, or you might keep a
-modification log here.
-
-=back
-
-In addition, some systems use CONFORMING TO to note conformance to relevant
-standards and MT-LEVEL to note safeness for use in threaded programs or
-signal handlers. These headings are primarily useful when documenting parts
-of a C library. Documentation of object-oriented libraries or modules may
-use CONSTRUCTORS and METHODS sections for detailed documentation of the
-parts of the library and save the DESCRIPTION section for an overview; other
-large modules may use FUNCTIONS for similar reasons. Some people use
-OVERVIEW to summarize the description if it's quite long. Sometimes there's
-an additional COPYRIGHT section at the bottom, for licensing terms.
-AVAILABILITY is sometimes added, giving the canonical download site for the
-software or a URL for updates.
-
-Section ordering varies, although NAME should I<always> be the first section
-(you'll break some man page systems otherwise), and NAME, SYNOPSIS,
-DESCRIPTION, and OPTIONS generally always occur first and in that order if
-present. In general, SEE ALSO, AUTHOR, and similar material should be left
-for last. Some systems also move WARNINGS and NOTES to last. The order
-given above should be reasonable for most purposes.
-
-Finally, as a general note, try not to use an excessive amount of markup.
-As documented here and in L<Pod::Man>, you can safely leave Perl variables,
-function names, man page references, and the like unadorned by markup and
-the POD translators will figure it out for you. This makes it much easier
-to later edit the documentation. Note that many existing translators
-(including this one currently) will do the wrong thing with e-mail addresses
-or URLs when wrapped in LE<lt>E<gt>, so don't do that.
-
-For additional information that may be more accurate for your specific
-system, see either man(5) or man(7) depending on your system manual section
-numbering conventions.
-
-=head1 SEE ALSO
-
-L<Pod::Man|Pod::Man>, L<Pod::Parser|Pod::Parser>, man(1), nroff(1),
-troff(1), man(7)
-
-The man page documenting the an macro set may be man(5) instead of man(7) on
-your system.
-
-=head1 AUTHOR
-
-Russ Allbery E<lt>rra@stanford.eduE<gt>, based I<very> heavily on the
-original B<pod2man> by Larry Wall and Tom Christiansen. Large portions of
-this documentation, particularly the sections on the anatomy of a proper man
-page, are taken from the B<pod2man> documentation by Tom.
-
-=cut
-!NO!SUBS!
-#'# (cperl-mode)
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/pod2text.PL b/contrib/perl5/pod/pod2text.PL
deleted file mode 100644
index 7b5727d..0000000
--- a/contrib/perl5/pod/pod2text.PL
+++ /dev/null
@@ -1,254 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-# pod2text -- Convert POD data to formatted ASCII text.
-#
-# Copyright 1999, 2000 by Russ Allbery <rra@stanford.edu>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# The driver script for Pod::Text, Pod::Text::Termcap, and Pod::Text::Color,
-# invoked by perldoc -t among other things.
-
-require 5.004;
-
-use Getopt::Long qw(GetOptions);
-use Pod::Text ();
-use Pod::Usage qw(pod2usage);
-
-use strict;
-
-# Take an initial pass through our options, looking for one of the form
-# -<number>. We turn that into -w <number> for compatibility with the
-# original pod2text script.
-for (my $i = 0; $i < @ARGV; $i++) {
- last if $ARGV[$i] =~ /^--$/;
- if ($ARGV[$i] =~ /^-(\d+)$/) {
- splice (@ARGV, $i++, 1, '-w', $1);
- }
-}
-
-# Insert -- into @ARGV before any single dash argument to hide it from
-# Getopt::Long; we want to interpret it as meaning stdin (which Pod::Parser
-# does correctly).
-my $stdin;
-@ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV;
-
-# Parse our options. Use the same names as Pod::Text for simplicity, and
-# default to sentence boundaries turned off for compatibility.
-my %options;
-$options{sentence} = 0;
-Getopt::Long::config ('bundling');
-GetOptions (\%options, 'alt|a', 'color|c', 'help|h', 'indent|i=i',
- 'loose|l', 'overstrike|o', 'quotes|q=s', 'sentence|s',
- 'termcap|t', 'width|w=i') or exit 1;
-pod2usage (1) if $options{help};
-
-# Figure out what formatter we're going to use. -c overrides -t.
-my $formatter = 'Pod::Text';
-if ($options{color}) {
- $formatter = 'Pod::Text::Color';
- eval { require Term::ANSIColor };
- if ($@) { die "-c (--color) requires Term::ANSIColor be installed\n" }
- require Pod::Text::Color;
-} elsif ($options{termcap}) {
- $formatter = 'Pod::Text::Termcap';
- require Pod::Text::Termcap;
-} elsif ($options{overstrike}) {
- $formatter = 'Pod::Text::Overstrike';
- require Pod::Text::Overstrike;
-}
-delete @options{'color', 'termcap', 'overstrike'};
-
-# Initialize and run the formatter.
-my $parser = $formatter->new (%options);
-$parser->parse_from_file (@ARGV);
-
-__END__
-
-=head1 NAME
-
-pod2text - Convert POD data to formatted ASCII text
-
-=head1 SYNOPSIS
-
-pod2text [B<-aclost>] [B<-i> I<indent>] [B<-q> I<quotes>] [B<-w> I<width>]
-[I<input> [I<output>]]
-
-pod2text B<-h>
-
-=head1 DESCRIPTION
-
-B<pod2text> is a front-end for Pod::Text and its subclasses. It uses them
-to generate formatted ASCII text from POD source. It can optionally use
-either termcap sequences or ANSI color escape sequences to format the text.
-
-I<input> is the file to read for POD source (the POD can be embedded in
-code). If I<input> isn't given, it defaults to STDIN. I<output>, if given,
-is the file to which to write the formatted output. If I<output> isn't
-given, the formatted output is written to STDOUT.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<-a>, B<--alt>
-
-Use an alternate output format that, among other things, uses a different
-heading style and marks C<=item> entries with a colon in the left margin.
-
-=item B<-c>, B<--color>
-
-Format the output with ANSI color escape sequences. Using this option
-requires that Term::ANSIColor be installed on your system.
-
-=item B<-i> I<indent>, B<--indent=>I<indent>
-
-Set the number of spaces to indent regular text, and the default indentation
-for C<=over> blocks. Defaults to 4 spaces if this option isn't given.
-
-=item B<-h>, B<--help>
-
-Print out usage information and exit.
-
-=item B<-l>, B<--loose>
-
-Print a blank line after a C<=head1> heading. Normally, no blank line is
-printed after C<=head1>, although one is still printed after C<=head2>,
-because this is the expected formatting for manual pages; if you're
-formatting arbitrary text documents, using this option is recommended.
-
-=item B<-o>, B<--overstrike>
-
-Format the output with overstruck printing. Bold text is rendered as
-character, backspace, character. Italics and file names are rendered as
-underscore, backspace, character. Many pagers, such as B<less>, know how
-to convert this to bold or underlined text.
-
-=item B<-q> I<quotes>, B<--quotes>=I<quotes>
-
-Sets the quote marks used to surround CE<lt>> text to I<quotes>. If
-I<quotes> is a single character, it is used as both the left and right
-quote; if I<quotes> is two characters, the first character is used as the
-left quote and the second as the right quoted; and if I<quotes> is four
-characters, the first two are used as the left quote and the second two as
-the right quote.
-
-I<quotes> may also be set to the special value C<none>, in which case no
-quote marks are added around CE<lt>> text.
-
-=item B<-s>, B<--sentence>
-
-Assume each sentence ends with two spaces and try to preserve that spacing.
-Without this option, all consecutive whitespace in non-verbatim paragraphs
-is compressed into a single space.
-
-=item B<-t>, B<--termcap>
-
-Try to determine the width of the screen and the bold and underline
-sequences for the terminal from termcap, and use that information in
-formatting the output. Output will be wrapped at two columns less than the
-width of your terminal device. Using this option requires that your system
-have a termcap file somewhere where Term::Cap can find it and requires that
-your system support termios. With this option, the output of B<pod2text>
-will contain terminal control sequences for your current terminal type.
-
-=item B<-w>, B<--width=>I<width>, B<->I<width>
-
-The column at which to wrap text on the right-hand side. Defaults to 76,
-unless B<-t> is given, in which case it's two columns less than the width of
-your terminal device.
-
-=back
-
-=head1 DIAGNOSTICS
-
-If B<pod2text> fails with errors, see L<Pod::Text> and L<Pod::Parser> for
-information about what those errors might mean. Internally, it can also
-produce the following diagnostics:
-
-=over 4
-
-=item -c (--color) requires Term::ANSIColor be installed
-
-(F) B<-c> or B<--color> were given, but Term::ANSIColor could not be
-loaded.
-
-=item Unknown option: %s
-
-(F) An unknown command line option was given.
-
-=back
-
-In addition, other L<Getopt::Long|Getopt::Long> error messages may result
-from invalid command-line options.
-
-=head1 ENVIRONMENT
-
-=over 4
-
-=item COLUMNS
-
-If B<-t> is given, B<pod2text> will take the current width of your screen
-from this environment variable, if available. It overrides terminal width
-information in TERMCAP.
-
-=item TERMCAP
-
-If B<-t> is given, B<pod2text> will use the contents of this environment
-variable if available to determine the correct formatting sequences for your
-current terminal device.
-
-=back
-
-=head1 SEE ALSO
-
-L<Pod::Text|Pod::Text>, L<Pod::Text::Color|Pod::Text::Color>,
-L<Pod::Text::Termcap|Pod::Text::Termcap>, L<Pod::Parser|Pod::Parser>
-
-=head1 AUTHOR
-
-Russ Allbery E<lt>rra@stanford.eduE<gt>.
-
-=cut
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/pod2usage.PL b/contrib/perl5/pod/pod2usage.PL
deleted file mode 100644
index 1c1296a..0000000
--- a/contrib/perl5/pod/pod2usage.PL
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$// if ($^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
-$file =~ s/\.pl$/.com/ if ($^O eq 'VMS'); # "case-forgiving"
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-#############################################################################
-# pod2usage -- command to print usage messages from embedded pod docs
-#
-# Copyright (c) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-use diagnostics;
-
-=head1 NAME
-
-pod2usage - print usage messages from embedded pod docs in files
-
-=head1 SYNOPSIS
-
-=over 12
-
-=item B<pod2usage>
-
-[B<-help>]
-[B<-man>]
-[B<-exit>S< >I<exitval>]
-[B<-output>S< >I<outfile>]
-[B<-verbose> I<level>]
-[B<-pathlist> I<dirlist>]
-I<file>
-
-=back
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print this command's manual page and exit.
-
-=item B<-exit> I<exitval>
-
-The exit status value to return.
-
-=item B<-output> I<outfile>
-
-The output file to print to. If the special names "-" or ">&1" or ">&STDOUT"
-are used then standard output is used. If ">&2" or ">&STDERR" is used then
-standard error is used.
-
-=item B<-verbose> I<level>
-
-The desired level of verbosity to use:
-
- 1 : print SYNOPSIS only
- 2 : print SYNOPSIS sections and any OPTIONS/ARGUMENTS sections
- 3 : print the entire manpage (similar to running pod2text)
-
-=item B<-pathlist> I<dirlist>
-
-Specifies one or more directories to search for the input file if it
-was not supplied with an absolute path. Each directory path in the given
-list should be separated by a ':' on Unix (';' on MSWin32 and DOS).
-
-=item I<file>
-
-The pathname of a file containing pod documentation to be output in
-usage mesage format (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<pod2usage> will read the given input file looking for pod
-documentation and will print the corresponding usage message.
-If no input file is specifed than standard input is read.
-
-B<pod2usage> invokes the B<pod2usage()> function in the B<Pod::Usage>
-module. Please see L<Pod::Usage/pod2usage()>.
-
-=head1 SEE ALSO
-
-L<Pod::Usage>, L<pod2text(1)>
-
-=head1 AUTHOR
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-Based on code for B<pod2text(1)> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=cut
-
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options = ();
-my @opt_specs = (
- "help",
- "man",
- "exit=i",
- "output=s",
- "pathlist=s",
- "verbose=i",
-);
-
-## Parse options
-GetOptions(\%options, @opt_specs) || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(VERBOSE => 2) if ($options{man});
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
-@ARGV = ("-") unless (@ARGV > 0);
-if (@ARGV > 1) {
- print STDERR "pod2usage: Too many filenames given\n\n";
- pod2usage(2);
-}
-
-my %usage = ();
-$usage{-input} = shift(@ARGV);
-$usage{-exitval} = $options{"exit"} if (defined $options{"exit"});
-$usage{-output} = $options{"output"} if (defined $options{"output"});
-$usage{-verbose} = $options{"verbose"} if (defined $options{"verbose"});
-$usage{-pathlist} = $options{"pathlist"} if (defined $options{"pathlist"});
-
-pod2usage(\%usage);
-
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/podchecker.PL b/contrib/perl5/pod/podchecker.PL
deleted file mode 100644
index 20d5e94..0000000
--- a/contrib/perl5/pod/podchecker.PL
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$//
- if ($^O eq 'VMS' or $^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-#############################################################################
-# podchecker -- command to invoke the podchecker function in Pod::Checker
-#
-# Copyright (c) 1998-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-#use diagnostics;
-
-=head1 NAME
-
-podchecker - check the syntax of POD format documentation files
-
-=head1 SYNOPSIS
-
-B<podchecker> [B<-help>] [B<-man>] [B<-(no)warnings>] [I<file>S< >...]
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print the manual page and exit.
-
-=item B<-warnings> B<-nowarnings>
-
-Turn on/off printing of warnings. Repeating B<-warnings> increases the
-warning level, i.e. more warnings are printed. Currently increasing to
-level two causes flagging of unescaped "E<lt>,E<gt>" characters.
-
-=item I<file>
-
-The pathname of a POD file to syntax-check (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<podchecker> will read the given input files looking for POD
-syntax errors in the POD documentation and will print any errors
-it find to STDERR. At the end, it will print a status message
-indicating the number of errors found.
-
-Directories are ignored, an appropriate warning message is printed.
-
-B<podchecker> invokes the B<podchecker()> function exported by B<Pod::Checker>
-Please see L<Pod::Checker/podchecker()> for more details.
-
-=head1 RETURN VALUE
-
-B<podchecker> returns a 0 (zero) exit status if all specified
-POD files are ok.
-
-=head1 ERRORS
-
-B<podchecker> returns the exit status 1 if at least one of
-the given POD files has syntax errors.
-
-The status 2 indicates that at least one of the specified
-files does not contain I<any> POD commands.
-
-Status 1 overrides status 2. If you want unambigouus
-results, call B<podchecker> with one single argument only.
-
-=head1 SEE ALSO
-
-L<Pod::Parser> and L<Pod::Checker>
-
-=head1 AUTHORS
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>,
-Marek Rouchal E<lt>marek@saftsack.fs.uni-bayreuth.deE<gt>
-
-Based on code for B<Pod::Text::pod2text(1)> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=cut
-
-
-use Pod::Checker;
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options;
-
-## Parse options
-GetOptions(\%options, qw(help man warnings+ nowarnings)) || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(-verbose => 2) if ($options{man});
-
-if($options{nowarnings}) {
- $options{warnings} = 0;
-}
-elsif(!defined $options{warnings}) {
- $options{warnings} = 1; # default is warnings on
-}
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
-## Invoke podchecker()
-my $status = 0;
-@ARGV = qw(-) unless(@ARGV);
-for (@ARGV) {
- if($_ eq '-') {
- $_ = "<&STDIN";
- }
- elsif(-d) {
- warn "podchecker: Warning: Ignoring directory '$_'\n";
- next;
- }
- my $s = podchecker($_, undef, '-warnings' => $options{warnings});
- if($s > 0) {
- # errors occurred
- $status = 1;
- }
- elsif($s < 0) {
- # no pod found
- $status = 2 unless($status);
- }
-}
-exit $status;
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/podselect.PL b/contrib/perl5/pod/podselect.PL
deleted file mode 100644
index b6b8c9b..0000000
--- a/contrib/perl5/pod/podselect.PL
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$// if ($^O eq 'os2' or $^O eq 'dos'); # "case-forgiving"
-$file =~ s/\.pl$/.com/ if ($^O eq 'VMS'); # "case-forgiving"
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-#############################################################################
-# podselect -- command to invoke the podselect function in Pod::Select
-#
-# Copyright (c) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-use diagnostics;
-
-=head1 NAME
-
-podselect - print selected sections of pod documentation on standard output
-
-=head1 SYNOPSIS
-
-B<podselect> [B<-help>] [B<-man>] [B<-section>S< >I<section-spec>]
-[I<file>S< >...]
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print the manual page and exit.
-
-=item B<-section>S< >I<section-spec>
-
-Specify a section to include in the output.
-See L<Pod::Parser/"SECTION SPECIFICATIONS">
-for the format to use for I<section-spec>.
-This option may be given multiple times on the command line.
-
-=item I<file>
-
-The pathname of a file from which to select sections of pod
-documentation (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<podselect> will read the given input files looking for pod
-documentation and will print out (in raw pod format) all sections that
-match one ore more of the given section specifications. If no section
-specifications are given than all pod sections encountered are output.
-
-B<podselect> invokes the B<podselect()> function exported by B<Pod::Select>
-Please see L<Pod::Select/podselect()> for more details.
-
-=head1 SEE ALSO
-
-L<Pod::Parser> and L<Pod::Select>
-
-=head1 AUTHOR
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-Based on code for B<Pod::Text::pod2text(1)> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=cut
-
-use Pod::Select;
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options = (
- "help" => 0,
- "man" => 0,
- "sections" => [],
-);
-
-## Parse options
-GetOptions(\%options, "help", "man", "sections|select=s@") || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(-verbose => 2) if ($options{man});
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
-## Invoke podselect().
-if (@{ $options{"sections"} } > 0) {
- podselect({ -sections => $options{"sections"} }, @ARGV);
-}
-else {
- podselect(@ARGV);
-}
-
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/pod/roffitall b/contrib/perl5/pod/roffitall
deleted file mode 100644
index 396da6f..0000000
--- a/contrib/perl5/pod/roffitall
+++ /dev/null
@@ -1,312 +0,0 @@
-#!/bin/sh
-#
-# Usage: roffitall [-nroff|-psroff|-groff]
-#
-# Authors: Tom Christiansen, Raphael Manfredi
-
-me=roffitall
-tmp=.
-
-if test -f ../config.sh; then
- . ../config.sh
-fi
-
-mandir=$installman1dir
-libdir=$installman3dir
-
-test -d $mandir || mandir=/usr/new/man/man1
-test -d $libdir || libdir=/usr/new/man/man3
-
-case "$1" in
--nroff) cmd="nroff -man"; ext='txt';;
--psroff) cmd="psroff -t"; ext='ps';;
--groff) cmd="groff -man"; ext='ps';;
-*)
- echo "Usage: roffitall [-nroff|-psroff|-groff]" >&2
- exit 1
- ;;
-esac
-
-# NEEDS TO BE BUILT BASED ON Makefile (or Makefile.SH, should such happen)
-toroff=`
- echo \
- $mandir/perl.1 \
- $mandir/perl5004delta.1 \
- $mandir/perl5005delta.1 \
- $mandir/perl56delta.1 \
- $mandir/perlapi.1 \
- $mandir/perlapio.1 \
- $mandir/perlbook.1 \
- $mandir/perlboot.1 \
- $mandir/perlbot.1 \
- $mandir/perlcall.1 \
- $mandir/perlcompile.1 \
- $mandir/perldata.1 \
- $mandir/perldbmfilter.1 \
- $mandir/perldebguts.1 \
- $mandir/perldebug.1 \
- $mandir/perldelta.1 \
- $mandir/perldiag.1 \
- $mandir/perldsc.1 \
- $mandir/perlembed.1 \
- $mandir/perlfaq.1 \
- $mandir/perlfaq1.1 \
- $mandir/perlfaq2.1 \
- $mandir/perlfaq3.1 \
- $mandir/perlfaq4.1 \
- $mandir/perlfaq5.1 \
- $mandir/perlfaq6.1 \
- $mandir/perlfaq7.1 \
- $mandir/perlfaq8.1 \
- $mandir/perlfaq9.1 \
- $mandir/perlfilter.1 \
- $mandir/perlfork.1 \
- $mandir/perlform.1 \
- $mandir/perlfunc.1 \
- $mandir/perlguts.1 \
- $mandir/perlhack.1 \
- $mandir/perlhist.1 \
- $mandir/perlintern.1 \
- $mandir/perlipc.1 \
- $mandir/perllexwarn.1 \
- $mandir/perllocale.1 \
- $mandir/perllol.1 \
- $mandir/perlmod.1 \
- $mandir/perlmodinstall.1 \
- $mandir/perlmodlib.1 \
- $mandir/perlnewmod.1 \
- $mandir/perlnumber.1 \
- $mandir/perlobj.1 \
- $mandir/perlop.1 \
- $mandir/perlopentut.1 \
- $mandir/perlpod.1 \
- $mandir/perlport.1 \
- $mandir/perlre.1 \
- $mandir/perlref.1 \
- $mandir/perlreftut.1 \
- $mandir/perlrequick.1 \
- $mandir/perlretut.1 \
- $mandir/perlrun.1 \
- $mandir/perlsec.1 \
- $mandir/perlstyle.1 \
- $mandir/perlsub.1 \
- $mandir/perlsyn.1 \
- $mandir/perlthrtut.1 \
- $mandir/perltie.1 \
- $mandir/perltoc.1 \
- $mandir/perltodo.1 \
- $mandir/perltoot.1 \
- $mandir/perltootc.1 \
- $mandir/perltrap.1 \
- $mandir/perlunicode.1 \
- $mandir/perlutil.1 \
- $mandir/perlvar.1 \
- $mandir/perlxs.1 \
- $mandir/perlxstut.1 \
- \
- $mandir/a2p.1 \
- $mandir/c2ph.1 \
- $mandir/dprofpp.1 \
- $mandir/h2ph.1 \
- $mandir/h2xs.1 \
- $mandir/perlbug.1 \
- $mandir/perldoc.1 \
- $mandir/pl2pm.1 \
- $mandir/pod2html.1 \
- $mandir/pod2man.1 \
- $mandir/s2p.1 \
- $mandir/splain.1 \
- $mandir/xsubpp.1 \
- \
- $libdir/attrs.3 \
- $libdir/autouse.3 \
- $libdir/base.3 \
- $libdir/blib.3 \
- $libdir/constant.3 \
- $libdir/diagnostics.3 \
- $libdir/fields.3 \
- $libdir/filetest.3 \
- $libdir/integer.3 \
- $libdir/less.3 \
- $libdir/lib.3 \
- $libdir/locale.3 \
- $libdir/ops.3 \
- $libdir/overload.3 \
- $libdir/re.3 \
- $libdir/sigtrap.3 \
- $libdir/strict.3 \
- $libdir/subs.3 \
- $libdir/vars.3 \
- \
- $libdir/AnyDBM_File.3 \
- $libdir/AutoLoader.3 \
- $libdir/AutoSplit.3 \
- $libdir/B.3 \
- $libdir/B::Asmdata.3 \
- $libdir/B::Assembler.3 \
- $libdir/B::Bblock.3 \
- $libdir/B::Bytecode.3 \
- $libdir/B::C.3 \
- $libdir/B::CC.3 \
- $libdir/B::Debug.3 \
- $libdir/B::Deparse.3 \
- $libdir/B::Disassembler.3 \
- $libdir/B::Lint.3 \
- $libdir/B::Showlex.3 \
- $libdir/B::Stackobj.3 \
- $libdir/B::Terse.3 \
- $libdir/B::Xref.3 \
- $libdir/Benchmark.3 \
- $libdir/Carp.3 \
- $libdir/CGI.3 \
- $libdir/CGI::Apache.3 \
- $libdir/CGI::Carp.3 \
- $libdir/CGI::Cookie.3 \
- $libdir/CGI::Fast.3 \
- $libdir/CGI::Push.3 \
- $libdir/CGI::Switch.3 \
- $libdir/Class::Struct.3 \
- $libdir/Config.3 \
- $libdir/CPAN.3 \
- $libdir/CPAN::FirstTime.3 \
- $libdir/CPAN::Nox.3 \
- $libdir/Cwd.3 \
- $libdir/Data::Dumper.3 \
- $libdir/DB_File.3 \
- $libdir/Devel::SelfStubber.3 \
- $libdir/DirHandle.3 \
- $libdir/DynaLoader.3 \
- $libdir/Dumpvalue.3 \
- $libdir/English.3 \
- $libdir/Env.3 \
- $libdir/Errno.3 \
- $libdir/Exporter.3 \
- $libdir/ExtUtils::Command.3 \
- $libdir/ExtUtils::Embed.3 \
- $libdir/ExtUtils::Install.3 \
- $libdir/ExtUtils::Installed.3 \
- $libdir/ExtUtils::Liblist.3 \
- $libdir/ExtUtils::MakeMaker.3 \
- $libdir/ExtUtils::Manifest.3 \
- $libdir/ExtUtils::Miniperl.3 \
- $libdir/ExtUtils::Mkbootstrap.3 \
- $libdir/ExtUtils::Mksymlists.3 \
- $libdir/ExtUtils::MM_OS2.3 \
- $libdir/ExtUtils::MM_Unix.3 \
- $libdir/ExtUtils::MM_VMS.3 \
- $libdir/ExtUtils::MM_Win32.3 \
- $libdir/ExtUtils::Packlist.3 \
- $libdir/ExtUtils::testlib.3 \
- $libdir/Fatal.3 \
- $libdir/Fcntl.3 \
- $libdir/File::Basename.3 \
- $libdir/File::CheckTree.3 \
- $libdir/File::Compare.3 \
- $libdir/File::Copy.3 \
- $libdir/File::DosGlob.3 \
- $libdir/File::Find.3 \
- $libdir/File::Path.3 \
- $libdir/File::Spec.3 \
- $libdir/File::Spec::Mac.3 \
- $libdir/File::Spec::OS2.3 \
- $libdir/File::Spec::Unix.3 \
- $libdir/File::Spec::VMS.3 \
- $libdir/File::Spec::Win32.3 \
- $libdir/File::stat.3 \
- $libdir/FileCache.3 \
- $libdir/FileHandle.3 \
- $libdir/FindBin.3 \
- $libdir/GDBM_File.3 \
- $libdir/Getopt::Long.3 \
- $libdir/Getopt::Std.3 \
- $libdir/I18N::Collate.3 \
- $libdir/IO.3 \
- $libdir/IO::File.3 \
- $libdir/IO::Handle.3 \
- $libdir/IO::Pipe.3 \
- $libdir/IO::Seekable.3 \
- $libdir/IO::Select.3 \
- $libdir/IO::Socket.3 \
- $libdir/IPC::Msg.3 \
- $libdir/IPC::Open2.3 \
- $libdir/IPC::Open3.3 \
- $libdir/IPC::Semaphore.3 \
- $libdir/IPC::SysV.3 \
- $libdir/Math::BigFloat.3 \
- $libdir/Math::BigInt.3 \
- $libdir/Math::Complex.3 \
- $libdir/Math::Trig.3 \
- $libdir/NDBM_File.3 \
- $libdir/Net::hostent.3 \
- $libdir/Net::netent.3 \
- $libdir/Net::Ping.3 \
- $libdir/Net::protoent.3 \
- $libdir/Net::servent.3 \
- $libdir/O.3 \
- $libdir/Opcode.3 \
- $libdir/Pod::Html.3 \
- $libdir/Pod::Text.3 \
- $libdir/POSIX.3 \
- $libdir/Safe.3 \
- $libdir/SDBM_File.3 \
- $libdir/Search::Dict.3 \
- $libdir/SelectSaver.3 \
- $libdir/SelfLoader.3 \
- $libdir/Shell.3 \
- $libdir/Socket.3 \
- $libdir/Symbol.3 \
- $libdir/Sys::Hostname.3 \
- $libdir/Sys::Syslog.3 \
- $libdir/Term::Cap.3 \
- $libdir/Term::Complete.3 \
- $libdir/Term::ReadLine.3 \
- $libdir/Test.3 \
- $libdir/Test::Harness.3 \
- $libdir/Text::Abbrev.3 \
- $libdir/Text::ParseWords.3 \
- $libdir/Text::Soundex.3 \
- $libdir/Text::Tabs.3 \
- $libdir/Text::Wrap.3 \
- $libdir/Tie::Array.3 \
- $libdir/Tie::Handle.3 \
- $libdir/Tie::Hash.3 \
- $libdir/Tie::RefHash.3 \
- $libdir/Tie::Scalar.3 \
- $libdir/Tie::SubstrHash.3 \
- $libdir/Time::gmtime.3 \
- $libdir/Time::Local.3 \
- $libdir/Time::localtime.3 \
- $libdir/Time::tm.3 \
- $libdir/UNIVERSAL.3 \
- $libdir/User::grent.3 \
- $libdir/User::pwent.3 | \
- perl -ne 'map { -r && print "$_ " } split'`
-
- # Bypass internal shell buffer limit -- can't use case
- if perl -e '$a = shift; exit($a =~ m|/|)' $toroff; then
- echo "$me: empty file list -- did you run install?" >&2
- exit 1
- fi
-
- #psroff -t -man -rC1 -rD1 -rF1 > $tmp/PerlDoc.ps 2>$tmp/PerlTOC.raw
- #nroff -man -rC1 -rD1 -rF1 > $tmp/PerlDoc.txt 2>$tmp/PerlTOC.nr.raw
-
- # First, create the raw data
- run="$cmd -rC1 -rD1 -rF1 >$tmp/PerlDoc.$ext 2>$tmp/PerlTOC.$ext.raw"
- echo "$me: running $run"
- eval $run $toroff
-
- #Now create the TOC
- echo "$me: parsing TOC"
- ./rofftoc $tmp/PerlTOC.$ext.raw > $tmp/PerlTOC.tmp.man
- run="$cmd $tmp/PerlTOC.tmp.man >$tmp/PerlTOC.$ext"
- echo "$me: running $run"
- eval $run
-
- # Finally, recreate the Doc, without the blank page 0
- run="$cmd -rC1 -rD1 >$tmp/PerlDoc.$ext 2>$tmp/PerlTOC.$ext.raw"
- echo "$me: running $run"
- eval $run $toroff
- rm -f $tmp/PerlTOC.tmp.man $tmp/PerlTOC.$ext.raw
- echo "$me: leaving you with $tmp/PerlDoc.$ext and $tmp/PerlTOC.$ext"
-
diff --git a/contrib/perl5/pod/rofftoc b/contrib/perl5/pod/rofftoc
deleted file mode 100755
index a2d0e7b..0000000
--- a/contrib/perl5/pod/rofftoc
+++ /dev/null
@@ -1,66 +0,0 @@
-# feed this into perl
- eval 'exec perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-# Usage: rofftoc PerlTOC.xxx.raw
-#
-# Post-processes roffitall output. Called from roffitall to produce
-# a formatted table of contents.
-#
-# Author: Tom Christiansen
-
-print <<'EOF';
-.de NP
-'.sp 0.8i
-.tl ''- % -''
-'bp
-'sp 0.5i
-.tl ''\fB\s+2Perl Table of Contents\s0\fR''
-'sp 0.3i
-..
-.wh -1i NP
-.af % i
-.sp 0.5i
-.tl ''\fB\s+5Perl Table of Contents\s0\fR''
-.sp 0.5i
-.nf
-.na
-EOF
-while (<>) {
- #chomp;
- s/Index://;
- ($type, $page, $desc) = split ' ', $_, 3;
- $desc =~ s/^"(.*)"$/$1/;
- if ($type eq 'Title') {
- ($name = $desc) =~ s/ .*//;
- next;
- } elsif ($type eq 'Name') {
- #print STDERR $page, "\t", $desc;
- print ".ne 5\n";
- print ".in 0\n";
- print ".sp\n";
- print ".ft B\n";
- print "$desc\n";
- print ".ft P\n";
- print ".in 5n\n";
- } elsif ($type eq 'Header') {
- print ".br\n", $page, "\t", $desc;
- } elsif ($type eq 'Subsection') {
- print ".br\n", $page, "\t\t", $desc;
- } elsif ($type eq 'Item') {
- next if $desc =~ /\\bu/;
- next unless $name =~ /POSIX|func/i;
- print ".br\n", $page, "\t\t\t", $desc;
- }
-}
-__END__
-Index:Title 1 "PERL 1"
-Index:Name 1 "perl - Practical Extraction and Report Language"
-Index:Header 1 "NAME"
-Index:Header 1 "SYNOPSIS"
-Index:Header 2 "DESCRIPTION"
-Index:Item 2 "\(bu Many usability enhancements"
-Index:Item 2 "\(bu Simplified grammar"
-Index:Item 2 "\(bu Lexical scoping"
-Index:Item 2 "\(bu Arbitrarily nested data structures"
-Index:Item 2 "\(bu Modularity and reusability"
diff --git a/contrib/perl5/pod/splitman b/contrib/perl5/pod/splitman
deleted file mode 100755
index 9fe404a..0000000
--- a/contrib/perl5/pod/splitman
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-
-while (<>) {
- if ($seqno = 1 .. /^\.TH/) {
- unless ($seqno =~ /e/i) {
- $header .= $_;
- }
- next;
- }
-
- if ( /^\.Ip\s*"(.*)"\s*\d+$/) {
- $desking = 0;
- $desc = $1;
- if (name($desc) ne $myname) {
- $myname = name($desc);
- print $myname, "\n";
- open(MAN, "> $myname.3pl");
- print MAN <<EOALL;
-$header
-.TH $myname 3PL "\\*(RP"
-.SH NAME
-$myname
-.SH SYNOPSIS
-.B $desc
-EOALL
- } else {
- print MAN <<EOMORE;
-.br
-.ti +3n
-or
-.br
-.B $desc
-EOMORE
- }
- next;
- }
- unless ($desking) {
- print MAN ".SH DESCRIPTION\n";
- $desking = 1;
- }
- print MAN;
-}
-
-sub name {
- ($_[0] =~ /(\w+)/)[0];
-}
diff --git a/contrib/perl5/pod/splitpod b/contrib/perl5/pod/splitpod
deleted file mode 100755
index fd38e51..0000000
--- a/contrib/perl5/pod/splitpod
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/perl
-
-use lib '../lib'; # If you haven't installed perl yet.
-use Pod::Functions;
-
-local $/ = '';
-
-$cur = '';
-while (<>) {
-
- next unless /^=(?!cut)/ .. /^=cut/;
-
- if (s/=item (\S+)/$1/) {
- #$cur = "POSIX::" . $1;
- $next{$cur} = $1;
- $cur = $1;
- $syn{$cur} .= $_;
- next;
- } else {
- #s,L</,L<POSIX/,g;
- s,L</,L<perlfunc/,g;
- push @{$pod{$cur}}, $_ if $cur;
- }
-}
-
-for $f ( keys %syn ) {
- next unless $Type{$f};
- $flavor = $Flavor{$f};
- $orig = $f;
- ($name = $f) =~ s/\W//g;
-
- # deal with several functions sharing a description
- $func = $orig;
- $func = $next{$func} until $pod{$func};
- my $body = join "", @{$pod{$func}};
-
- # deal with unbalanced =over and =back cause by the split
- my $has_over = $body =~ /^=over/;
- my $has_back = $body =~ /^=back/;
- $body =~ s/^=over\s*//m if $has_over and !$has_back;
- $body =~ s/^=back\s*//m if $has_back and !$has_over;
- open (POD, "> $name.pod") || die "can't open $name.pod: $!";
- print POD <<EOF;
-=head1 NAME
-
-$orig - $flavor
-
-=head1 SYNOPSIS
-
-$syn{$orig}
-
-=head1 DESCRIPTION
-
-$body
-
-EOF
-
- close POD;
-
-}
diff --git a/contrib/perl5/pp.c b/contrib/perl5/pp.c
deleted file mode 100644
index b57419b..0000000
--- a/contrib/perl5/pp.c
+++ /dev/null
@@ -1,5419 +0,0 @@
-/* pp.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $FreeBSD$
- */
-
-/*
- * "It's a big house this, and very peculiar. Always a bit more to discover,
- * and no knowing what you'll find around a corner. And Elves, sir!" --Samwise
- */
-
-#include "EXTERN.h"
-#define PERL_IN_PP_C
-#include "perl.h"
-
-/*
- * The compiler on Concurrent CX/UX systems has a subtle bug which only
- * seems to show up when compiling pp.c - it generates the wrong double
- * precision constant value for (double)UV_MAX when used inline in the body
- * of the code below, so this makes a static variable up front (which the
- * compiler seems to get correct) and uses it in place of UV_MAX below.
- */
-#ifdef CXUX_BROKEN_CONSTANT_CONVERT
-static double UV_MAX_cxux = ((double)UV_MAX);
-#endif
-
-/*
- * Offset for integer pack/unpack.
- *
- * On architectures where I16 and I32 aren't really 16 and 32 bits,
- * which for now are all Crays, pack and unpack have to play games.
- */
-
-/*
- * These values are required for portability of pack() output.
- * If they're not right on your machine, then pack() and unpack()
- * wouldn't work right anyway; you'll need to apply the Cray hack.
- * (I'd like to check them with #if, but you can't use sizeof() in
- * the preprocessor.) --???
- */
-/*
- The appropriate SHORTSIZE, INTSIZE, LONGSIZE, and LONGLONGSIZE
- defines are now in config.h. --Andy Dougherty April 1998
- */
-#define SIZE16 2
-#define SIZE32 4
-
-/* CROSSCOMPILE and MULTIARCH are going to affect pp_pack() and pp_unpack().
- --jhi Feb 1999 */
-
-#if SHORTSIZE != SIZE16 || LONGSIZE != SIZE32
-# define PERL_NATINT_PACK
-#endif
-
-#if LONGSIZE > 4 && defined(_CRAY)
-# if BYTEORDER == 0x12345678
-# define OFF16(p) (char*)(p)
-# define OFF32(p) (char*)(p)
-# else
-# if BYTEORDER == 0x87654321
-# define OFF16(p) ((char*)(p) + (sizeof(U16) - SIZE16))
-# define OFF32(p) ((char*)(p) + (sizeof(U32) - SIZE32))
-# else
- }}}} bad cray byte order
-# endif
-# endif
-# define COPY16(s,p) (*(p) = 0, Copy(s, OFF16(p), SIZE16, char))
-# define COPY32(s,p) (*(p) = 0, Copy(s, OFF32(p), SIZE32, char))
-# define COPYNN(s,p,n) (*(p) = 0, Copy(s, (char *)(p), n, char))
-# define CAT16(sv,p) sv_catpvn(sv, OFF16(p), SIZE16)
-# define CAT32(sv,p) sv_catpvn(sv, OFF32(p), SIZE32)
-#else
-# define COPY16(s,p) Copy(s, p, SIZE16, char)
-# define COPY32(s,p) Copy(s, p, SIZE32, char)
-# define COPYNN(s,p,n) Copy(s, (char *)(p), n, char)
-# define CAT16(sv,p) sv_catpvn(sv, (char*)(p), SIZE16)
-# define CAT32(sv,p) sv_catpvn(sv, (char*)(p), SIZE32)
-#endif
-
-/* variations on pp_null */
-
-/* XXX I can't imagine anyone who doesn't have this actually _needs_
- it, since pid_t is an integral type.
- --AD 2/20/1998
-*/
-#ifdef NEED_GETPID_PROTO
-extern Pid_t getpid (void);
-#endif
-
-PP(pp_stub)
-{
- dSP;
- if (GIMME_V == G_SCALAR)
- XPUSHs(&PL_sv_undef);
- RETURN;
-}
-
-PP(pp_scalar)
-{
- return NORMAL;
-}
-
-/* Pushy stuff. */
-
-PP(pp_padav)
-{
- dSP; dTARGET;
- if (PL_op->op_private & OPpLVAL_INTRO)
- SAVECLEARSV(PL_curpad[PL_op->op_targ]);
- EXTEND(SP, 1);
- if (PL_op->op_flags & OPf_REF) {
- PUSHs(TARG);
- RETURN;
- } else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
- PUSHs(TARG);
- RETURN;
- }
- if (GIMME == G_ARRAY) {
- I32 maxarg = AvFILL((AV*)TARG) + 1;
- EXTEND(SP, maxarg);
- if (SvMAGICAL(TARG)) {
- U32 i;
- for (i=0; i < maxarg; i++) {
- SV **svp = av_fetch((AV*)TARG, i, FALSE);
- SP[i+1] = (svp) ? *svp : &PL_sv_undef;
- }
- }
- else {
- Copy(AvARRAY((AV*)TARG), SP+1, maxarg, SV*);
- }
- SP += maxarg;
- }
- else {
- SV* sv = sv_newmortal();
- I32 maxarg = AvFILL((AV*)TARG) + 1;
- sv_setiv(sv, maxarg);
- PUSHs(sv);
- }
- RETURN;
-}
-
-PP(pp_padhv)
-{
- dSP; dTARGET;
- I32 gimme;
-
- XPUSHs(TARG);
- if (PL_op->op_private & OPpLVAL_INTRO)
- SAVECLEARSV(PL_curpad[PL_op->op_targ]);
- if (PL_op->op_flags & OPf_REF)
- RETURN;
- else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
- RETURN;
- }
- gimme = GIMME_V;
- if (gimme == G_ARRAY) {
- RETURNOP(do_kv());
- }
- else if (gimme == G_SCALAR) {
- SV* sv = sv_newmortal();
- if (HvFILL((HV*)TARG))
- Perl_sv_setpvf(aTHX_ sv, "%ld/%ld",
- (long)HvFILL((HV*)TARG), (long)HvMAX((HV*)TARG) + 1);
- else
- sv_setiv(sv, 0);
- SETs(sv);
- }
- RETURN;
-}
-
-PP(pp_padany)
-{
- DIE(aTHX_ "NOT IMPL LINE %d",__LINE__);
-}
-
-/* Translations. */
-
-PP(pp_rv2gv)
-{
- dSP; dTOPss;
-
- if (SvROK(sv)) {
- wasref:
- tryAMAGICunDEREF(to_gv);
-
- sv = SvRV(sv);
- if (SvTYPE(sv) == SVt_PVIO) {
- GV *gv = (GV*) sv_newmortal();
- gv_init(gv, 0, "", 0, 0);
- GvIOp(gv) = (IO *)sv;
- (void)SvREFCNT_inc(sv);
- sv = (SV*) gv;
- }
- else if (SvTYPE(sv) != SVt_PVGV)
- DIE(aTHX_ "Not a GLOB reference");
- }
- else {
- if (SvTYPE(sv) != SVt_PVGV) {
- char *sym;
- STRLEN len;
-
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- if (SvROK(sv))
- goto wasref;
- }
- if (!SvOK(sv) && sv != &PL_sv_undef) {
- /* If this is a 'my' scalar and flag is set then vivify
- * NI-S 1999/05/07
- */
- if (PL_op->op_private & OPpDEREF) {
- char *name;
- GV *gv;
- if (cUNOP->op_targ) {
- STRLEN len;
- SV *namesv = PL_curpad[cUNOP->op_targ];
- name = SvPV(namesv, len);
- gv = (GV*)NEWSV(0,0);
- gv_init(gv, CopSTASH(PL_curcop), name, len, 0);
- }
- else {
- name = CopSTASHPV(PL_curcop);
- gv = newGVgen(name);
- }
- sv_upgrade(sv, SVt_RV);
- SvRV(sv) = (SV*)gv;
- SvROK_on(sv);
- SvSETMAGIC(sv);
- goto wasref;
- }
- if (PL_op->op_flags & OPf_REF ||
- PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_usym, "a symbol");
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- RETSETUNDEF;
- }
- sym = SvPV(sv,len);
- if ((PL_op->op_flags & OPf_SPECIAL) &&
- !(PL_op->op_flags & OPf_MOD))
- {
- sv = (SV*)gv_fetchpv(sym, FALSE, SVt_PVGV);
- if (!sv
- && (!is_gv_magical(sym,len,0)
- || !(sv = (SV*)gv_fetchpv(sym, TRUE, SVt_PVGV))))
- {
- RETSETUNDEF;
- }
- }
- else {
- if (PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_symref, sym, "a symbol");
- sv = (SV*)gv_fetchpv(sym, TRUE, SVt_PVGV);
- }
- }
- }
- if (PL_op->op_private & OPpLVAL_INTRO)
- save_gp((GV*)sv, !(PL_op->op_flags & OPf_SPECIAL));
- SETs(sv);
- RETURN;
-}
-
-PP(pp_rv2sv)
-{
- dSP; dTOPss;
-
- if (SvROK(sv)) {
- wasref:
- tryAMAGICunDEREF(to_sv);
-
- sv = SvRV(sv);
- switch (SvTYPE(sv)) {
- case SVt_PVAV:
- case SVt_PVHV:
- case SVt_PVCV:
- DIE(aTHX_ "Not a SCALAR reference");
- }
- }
- else {
- GV *gv = (GV*)sv;
- char *sym;
- STRLEN len;
-
- if (SvTYPE(gv) != SVt_PVGV) {
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- if (SvROK(sv))
- goto wasref;
- }
- if (!SvOK(sv)) {
- if (PL_op->op_flags & OPf_REF ||
- PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_usym, "a SCALAR");
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- RETSETUNDEF;
- }
- sym = SvPV(sv, len);
- if ((PL_op->op_flags & OPf_SPECIAL) &&
- !(PL_op->op_flags & OPf_MOD))
- {
- gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PV);
- if (!gv
- && (!is_gv_magical(sym,len,0)
- || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PV))))
- {
- RETSETUNDEF;
- }
- }
- else {
- if (PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_symref, sym, "a SCALAR");
- gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PV);
- }
- }
- sv = GvSV(gv);
- }
- if (PL_op->op_flags & OPf_MOD) {
- if (PL_op->op_private & OPpLVAL_INTRO)
- sv = save_scalar((GV*)TOPs);
- else if (PL_op->op_private & OPpDEREF)
- vivify_ref(sv, PL_op->op_private & OPpDEREF);
- }
- SETs(sv);
- RETURN;
-}
-
-PP(pp_av2arylen)
-{
- dSP;
- AV *av = (AV*)TOPs;
- SV *sv = AvARYLEN(av);
- if (!sv) {
- AvARYLEN(av) = sv = NEWSV(0,0);
- sv_upgrade(sv, SVt_IV);
- sv_magic(sv, (SV*)av, '#', Nullch, 0);
- }
- SETs(sv);
- RETURN;
-}
-
-PP(pp_pos)
-{
- dSP; dTARGET; dPOPss;
-
- if (PL_op->op_flags & OPf_MOD || LVRET) {
- if (SvTYPE(TARG) < SVt_PVLV) {
- sv_upgrade(TARG, SVt_PVLV);
- sv_magic(TARG, Nullsv, '.', Nullch, 0);
- }
-
- LvTYPE(TARG) = '.';
- if (LvTARG(TARG) != sv) {
- if (LvTARG(TARG))
- SvREFCNT_dec(LvTARG(TARG));
- LvTARG(TARG) = SvREFCNT_inc(sv);
- }
- PUSHs(TARG); /* no SvSETMAGIC */
- RETURN;
- }
- else {
- MAGIC* mg;
-
- if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
- mg = mg_find(sv, 'g');
- if (mg && mg->mg_len >= 0) {
- I32 i = mg->mg_len;
- if (DO_UTF8(sv))
- sv_pos_b2u(sv, &i);
- PUSHi(i + PL_curcop->cop_arybase);
- RETURN;
- }
- }
- RETPUSHUNDEF;
- }
-}
-
-PP(pp_rv2cv)
-{
- dSP;
- GV *gv;
- HV *stash;
-
- /* We usually try to add a non-existent subroutine in case of AUTOLOAD. */
- /* (But not in defined().) */
- CV *cv = sv_2cv(TOPs, &stash, &gv, !(PL_op->op_flags & OPf_SPECIAL));
- if (cv) {
- if (CvCLONE(cv))
- cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
- if ((PL_op->op_private & OPpLVAL_INTRO)) {
- if (gv && GvCV(gv) == cv && (gv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), FALSE)))
- cv = GvCV(gv);
- if (!CvLVALUE(cv))
- DIE(aTHX_ "Can't modify non-lvalue subroutine call");
- }
- }
- else
- cv = (CV*)&PL_sv_undef;
- SETs((SV*)cv);
- RETURN;
-}
-
-PP(pp_prototype)
-{
- dSP;
- CV *cv;
- HV *stash;
- GV *gv;
- SV *ret;
-
- ret = &PL_sv_undef;
- if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
- char *s = SvPVX(TOPs);
- if (strnEQ(s, "CORE::", 6)) {
- int code;
-
- code = keyword(s + 6, SvCUR(TOPs) - 6);
- if (code < 0) { /* Overridable. */
-#define MAX_ARGS_OP ((sizeof(I32) - 1) * 2)
- int i = 0, n = 0, seen_question = 0;
- I32 oa;
- char str[ MAX_ARGS_OP * 2 + 2 ]; /* One ';', one '\0' */
-
- while (i < MAXO) { /* The slow way. */
- if (strEQ(s + 6, PL_op_name[i])
- || strEQ(s + 6, PL_op_desc[i]))
- {
- goto found;
- }
- i++;
- }
- goto nonesuch; /* Should not happen... */
- found:
- oa = PL_opargs[i] >> OASHIFT;
- while (oa) {
- if (oa & OA_OPTIONAL) {
- seen_question = 1;
- str[n++] = ';';
- }
- else if (n && str[0] == ';' && seen_question)
- goto set; /* XXXX system, exec */
- if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF
- && (oa & (OA_OPTIONAL - 1)) <= OA_HVREF) {
- str[n++] = '\\';
- }
- /* What to do with R ((un)tie, tied, (sys)read, recv)? */
- str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)];
- oa = oa >> 4;
- }
- str[n++] = '\0';
- ret = sv_2mortal(newSVpvn(str, n - 1));
- }
- else if (code) /* Non-Overridable */
- goto set;
- else { /* None such */
- nonesuch:
- DIE(aTHX_ "Can't find an opnumber for \"%s\"", s+6);
- }
- }
- }
- cv = sv_2cv(TOPs, &stash, &gv, FALSE);
- if (cv && SvPOK(cv))
- ret = sv_2mortal(newSVpvn(SvPVX(cv), SvCUR(cv)));
- set:
- SETs(ret);
- RETURN;
-}
-
-PP(pp_anoncode)
-{
- dSP;
- CV* cv = (CV*)PL_curpad[PL_op->op_targ];
- if (CvCLONE(cv))
- cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
- EXTEND(SP,1);
- PUSHs((SV*)cv);
- RETURN;
-}
-
-PP(pp_srefgen)
-{
- dSP;
- *SP = refto(*SP);
- RETURN;
-}
-
-PP(pp_refgen)
-{
- dSP; dMARK;
- if (GIMME != G_ARRAY) {
- if (++MARK <= SP)
- *MARK = *SP;
- else
- *MARK = &PL_sv_undef;
- *MARK = refto(*MARK);
- SP = MARK;
- RETURN;
- }
- EXTEND_MORTAL(SP - MARK);
- while (++MARK <= SP)
- *MARK = refto(*MARK);
- RETURN;
-}
-
-STATIC SV*
-S_refto(pTHX_ SV *sv)
-{
- SV* rv;
-
- if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
- if (LvTARGLEN(sv))
- vivify_defelem(sv);
- if (!(sv = LvTARG(sv)))
- sv = &PL_sv_undef;
- else
- (void)SvREFCNT_inc(sv);
- }
- else if (SvTYPE(sv) == SVt_PVAV) {
- if (!AvREAL((AV*)sv) && AvREIFY((AV*)sv))
- av_reify((AV*)sv);
- SvTEMP_off(sv);
- (void)SvREFCNT_inc(sv);
- }
- else if (SvPADTMP(sv))
- sv = newSVsv(sv);
- else {
- SvTEMP_off(sv);
- (void)SvREFCNT_inc(sv);
- }
- rv = sv_newmortal();
- sv_upgrade(rv, SVt_RV);
- SvRV(rv) = sv;
- SvROK_on(rv);
- return rv;
-}
-
-PP(pp_ref)
-{
- dSP; dTARGET;
- SV *sv;
- char *pv;
-
- sv = POPs;
-
- if (sv && SvGMAGICAL(sv))
- mg_get(sv);
-
- if (!sv || !SvROK(sv))
- RETPUSHNO;
-
- sv = SvRV(sv);
- pv = sv_reftype(sv,TRUE);
- PUSHp(pv, strlen(pv));
- RETURN;
-}
-
-PP(pp_bless)
-{
- dSP;
- HV *stash;
-
- if (MAXARG == 1)
- stash = CopSTASH(PL_curcop);
- else {
- SV *ssv = POPs;
- STRLEN len;
- char *ptr = SvPV(ssv,len);
- if (ckWARN(WARN_MISC) && len == 0)
- Perl_warner(aTHX_ WARN_MISC,
- "Explicit blessing to '' (assuming package main)");
- stash = gv_stashpvn(ptr, len, TRUE);
- }
-
- (void)sv_bless(TOPs, stash);
- RETURN;
-}
-
-PP(pp_gelem)
-{
- GV *gv;
- SV *sv;
- SV *tmpRef;
- char *elem;
- dSP;
- STRLEN n_a;
-
- sv = POPs;
- elem = SvPV(sv, n_a);
- gv = (GV*)POPs;
- tmpRef = Nullsv;
- sv = Nullsv;
- switch (elem ? *elem : '\0')
- {
- case 'A':
- if (strEQ(elem, "ARRAY"))
- tmpRef = (SV*)GvAV(gv);
- break;
- case 'C':
- if (strEQ(elem, "CODE"))
- tmpRef = (SV*)GvCVu(gv);
- break;
- case 'F':
- if (strEQ(elem, "FILEHANDLE")) /* XXX deprecate in 5.005 */
- tmpRef = (SV*)GvIOp(gv);
- break;
- case 'G':
- if (strEQ(elem, "GLOB"))
- tmpRef = (SV*)gv;
- break;
- case 'H':
- if (strEQ(elem, "HASH"))
- tmpRef = (SV*)GvHV(gv);
- break;
- case 'I':
- if (strEQ(elem, "IO"))
- tmpRef = (SV*)GvIOp(gv);
- break;
- case 'N':
- if (strEQ(elem, "NAME"))
- sv = newSVpvn(GvNAME(gv), GvNAMELEN(gv));
- break;
- case 'P':
- if (strEQ(elem, "PACKAGE"))
- sv = newSVpv(HvNAME(GvSTASH(gv)), 0);
- break;
- case 'S':
- if (strEQ(elem, "SCALAR"))
- tmpRef = GvSV(gv);
- break;
- }
- if (tmpRef)
- sv = newRV(tmpRef);
- if (sv)
- sv_2mortal(sv);
- else
- sv = &PL_sv_undef;
- XPUSHs(sv);
- RETURN;
-}
-
-/* Pattern matching */
-
-PP(pp_study)
-{
- dSP; dPOPss;
- register unsigned char *s;
- register I32 pos;
- register I32 ch;
- register I32 *sfirst;
- register I32 *snext;
- STRLEN len;
-
- if (sv == PL_lastscream) {
- if (SvSCREAM(sv))
- RETPUSHYES;
- }
- else {
- if (PL_lastscream) {
- SvSCREAM_off(PL_lastscream);
- SvREFCNT_dec(PL_lastscream);
- }
- PL_lastscream = SvREFCNT_inc(sv);
- }
-
- s = (unsigned char*)(SvPV(sv, len));
- pos = len;
- if (pos <= 0)
- RETPUSHNO;
- if (pos > PL_maxscream) {
- if (PL_maxscream < 0) {
- PL_maxscream = pos + 80;
- New(301, PL_screamfirst, 256, I32);
- New(302, PL_screamnext, PL_maxscream, I32);
- }
- else {
- PL_maxscream = pos + pos / 4;
- Renew(PL_screamnext, PL_maxscream, I32);
- }
- }
-
- sfirst = PL_screamfirst;
- snext = PL_screamnext;
-
- if (!sfirst || !snext)
- DIE(aTHX_ "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;
- }
-
- SvSCREAM_on(sv);
- sv_magic(sv, Nullsv, 'g', Nullch, 0); /* piggyback on m//g magic */
- RETPUSHYES;
-}
-
-PP(pp_trans)
-{
- dSP; dTARG;
- SV *sv;
-
- if (PL_op->op_flags & OPf_STACKED)
- sv = POPs;
- else {
- sv = DEFSV;
- EXTEND(SP,1);
- }
- TARG = sv_newmortal();
- PUSHi(do_trans(sv));
- RETURN;
-}
-
-/* Lvalue operators. */
-
-PP(pp_schop)
-{
- dSP; dTARGET;
- do_chop(TARG, TOPs);
- SETTARG;
- RETURN;
-}
-
-PP(pp_chop)
-{
- dSP; dMARK; dTARGET; dORIGMARK;
- while (MARK < SP)
- do_chop(TARG, *++MARK);
- SP = ORIGMARK;
- PUSHTARG;
- RETURN;
-}
-
-PP(pp_schomp)
-{
- dSP; dTARGET;
- SETi(do_chomp(TOPs));
- RETURN;
-}
-
-PP(pp_chomp)
-{
- dSP; dMARK; dTARGET;
- register I32 count = 0;
-
- while (SP > MARK)
- count += do_chomp(POPs);
- PUSHi(count);
- RETURN;
-}
-
-PP(pp_defined)
-{
- dSP;
- register SV* sv;
-
- sv = POPs;
- if (!sv || !SvANY(sv))
- RETPUSHNO;
- switch (SvTYPE(sv)) {
- case SVt_PVAV:
- if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv,'P')))
- RETPUSHYES;
- break;
- case SVt_PVHV:
- if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv,'P')))
- RETPUSHYES;
- break;
- case SVt_PVCV:
- if (CvROOT(sv) || CvXSUB(sv))
- RETPUSHYES;
- break;
- default:
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvOK(sv))
- RETPUSHYES;
- }
- RETPUSHNO;
-}
-
-PP(pp_undef)
-{
- dSP;
- SV *sv;
-
- if (!PL_op->op_private) {
- EXTEND(SP, 1);
- RETPUSHUNDEF;
- }
-
- sv = POPs;
- if (!sv)
- RETPUSHUNDEF;
-
- if (SvTHINKFIRST(sv))
- sv_force_normal(sv);
-
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- break;
- case SVt_PVAV:
- av_undef((AV*)sv);
- break;
- case SVt_PVHV:
- hv_undef((HV*)sv);
- break;
- case SVt_PVCV:
- if (ckWARN(WARN_MISC) && cv_const_sv((CV*)sv))
- Perl_warner(aTHX_ WARN_MISC, "Constant subroutine %s undefined",
- CvANON((CV*)sv) ? "(anonymous)" : GvENAME(CvGV((CV*)sv)));
- /* FALL THROUGH */
- case SVt_PVFM:
- {
- /* let user-undef'd sub keep its identity */
- GV* gv = CvGV((CV*)sv);
- cv_undef((CV*)sv);
- CvGV((CV*)sv) = gv;
- }
- break;
- case SVt_PVGV:
- if (SvFAKE(sv))
- SvSetMagicSV(sv, &PL_sv_undef);
- else {
- GP *gp;
- gp_free((GV*)sv);
- Newz(602, gp, 1, GP);
- GvGP(sv) = gp_ref(gp);
- GvSV(sv) = NEWSV(72,0);
- GvLINE(sv) = CopLINE(PL_curcop);
- GvEGV(sv) = (GV*)sv;
- GvMULTI_on(sv);
- }
- break;
- default:
- if (SvTYPE(sv) >= SVt_PV && SvPVX(sv) && SvLEN(sv)) {
- (void)SvOOK_off(sv);
- Safefree(SvPVX(sv));
- SvPV_set(sv, Nullch);
- SvLEN_set(sv, 0);
- }
- (void)SvOK_off(sv);
- SvSETMAGIC(sv);
- }
-
- RETPUSHUNDEF;
-}
-
-PP(pp_predec)
-{
- dSP;
- if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
- DIE(aTHX_ PL_no_modify);
- if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
- SvIVX(TOPs) != IV_MIN)
- {
- --SvIVX(TOPs);
- SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
- }
- else
- sv_dec(TOPs);
- SvSETMAGIC(TOPs);
- return NORMAL;
-}
-
-PP(pp_postinc)
-{
- dSP; dTARGET;
- if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
- DIE(aTHX_ PL_no_modify);
- sv_setsv(TARG, TOPs);
- if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
- SvIVX(TOPs) != IV_MAX)
- {
- ++SvIVX(TOPs);
- SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
- }
- else
- sv_inc(TOPs);
- SvSETMAGIC(TOPs);
- if (!SvOK(TARG))
- sv_setiv(TARG, 0);
- SETs(TARG);
- return NORMAL;
-}
-
-PP(pp_postdec)
-{
- dSP; dTARGET;
- if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
- DIE(aTHX_ PL_no_modify);
- sv_setsv(TARG, TOPs);
- if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
- SvIVX(TOPs) != IV_MIN)
- {
- --SvIVX(TOPs);
- SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
- }
- else
- sv_dec(TOPs);
- SvSETMAGIC(TOPs);
- SETs(TARG);
- return NORMAL;
-}
-
-/* Ordinary operators. */
-
-PP(pp_pow)
-{
- dSP; dATARGET; tryAMAGICbin(pow,opASSIGN);
- {
- dPOPTOPnnrl;
- SETn( Perl_pow( left, right) );
- RETURN;
- }
-}
-
-PP(pp_multiply)
-{
- dSP; dATARGET; tryAMAGICbin(mult,opASSIGN);
- {
- dPOPTOPnnrl;
- SETn( left * right );
- RETURN;
- }
-}
-
-PP(pp_divide)
-{
- dSP; dATARGET; tryAMAGICbin(div,opASSIGN);
- {
- dPOPPOPnnrl;
- NV value;
- if (right == 0.0)
- DIE(aTHX_ "Illegal division by zero");
-#ifdef SLOPPYDIVIDE
- /* insure that 20./5. == 4. */
- {
- IV k;
- if ((NV)I_V(left) == left &&
- (NV)I_V(right) == right &&
- (k = I_V(left)/I_V(right))*I_V(right) == I_V(left)) {
- value = k;
- }
- else {
- value = left / right;
- }
- }
-#else
- value = left / right;
-#endif
- PUSHn( value );
- RETURN;
- }
-}
-
-PP(pp_modulo)
-{
- dSP; dATARGET; tryAMAGICbin(modulo,opASSIGN);
- {
- UV left;
- UV right;
- bool left_neg;
- bool right_neg;
- bool use_double = 0;
- NV dright;
- NV dleft;
-
- if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)) {
- IV i = SvIVX(POPs);
- right = (right_neg = (i < 0)) ? -i : i;
- }
- else {
- dright = POPn;
- use_double = 1;
- right_neg = dright < 0;
- if (right_neg)
- dright = -dright;
- }
-
- if (!use_double && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)) {
- IV i = SvIVX(POPs);
- left = (left_neg = (i < 0)) ? -i : i;
- }
- else {
- dleft = POPn;
- if (!use_double) {
- use_double = 1;
- dright = right;
- }
- left_neg = dleft < 0;
- if (left_neg)
- dleft = -dleft;
- }
-
- if (use_double) {
- NV dans;
-
-#if 1
-/* Somehow U_V is pessimized even if CASTFLAGS is 0 */
-# if CASTFLAGS & 2
-# define CAST_D2UV(d) U_V(d)
-# else
-# define CAST_D2UV(d) ((UV)(d))
-# endif
- /* Tried to do this only in the case DOUBLESIZE <= UV_SIZE,
- * or, in other words, precision of UV more than of NV.
- * But in fact the approach below turned out to be an
- * optimization - floor() may be slow */
- if (dright <= UV_MAX && dleft <= UV_MAX) {
- right = CAST_D2UV(dright);
- left = CAST_D2UV(dleft);
- goto do_uv;
- }
-#endif
-
- /* Backward-compatibility clause: */
- dright = Perl_floor(dright + 0.5);
- dleft = Perl_floor(dleft + 0.5);
-
- if (!dright)
- DIE(aTHX_ "Illegal modulus zero");
-
- dans = Perl_fmod(dleft, dright);
- if ((left_neg != right_neg) && dans)
- dans = dright - dans;
- if (right_neg)
- dans = -dans;
- sv_setnv(TARG, dans);
- }
- else {
- UV ans;
-
- do_uv:
- if (!right)
- DIE(aTHX_ "Illegal modulus zero");
-
- ans = left % right;
- if ((left_neg != right_neg) && ans)
- ans = right - ans;
- if (right_neg) {
- /* XXX may warn: unary minus operator applied to unsigned type */
- /* could change -foo to be (~foo)+1 instead */
- if (ans <= ~((UV)IV_MAX)+1)
- sv_setiv(TARG, ~ans+1);
- else
- sv_setnv(TARG, -(NV)ans);
- }
- else
- sv_setuv(TARG, ans);
- }
- PUSHTARG;
- RETURN;
- }
-}
-
-PP(pp_repeat)
-{
- dSP; dATARGET; tryAMAGICbin(repeat,opASSIGN);
- {
- register IV count = POPi;
- if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) {
- dMARK;
- I32 items = SP - MARK;
- I32 max;
-
- max = items * count;
- MEXTEND(MARK, max);
- if (count > 1) {
- while (SP > MARK) {
- if (*SP)
- SvTEMP_off((*SP));
- SP--;
- }
- MARK++;
- repeatcpy((char*)(MARK + items), (char*)MARK,
- items * sizeof(SV*), count - 1);
- SP += max;
- }
- else if (count <= 0)
- SP -= items;
- }
- else { /* Note: mark already snarfed by pp_list */
- SV *tmpstr = POPs;
- STRLEN len;
- bool isutf;
-
- SvSetSV(TARG, tmpstr);
- SvPV_force(TARG, len);
- isutf = DO_UTF8(TARG);
- if (count != 1) {
- if (count < 1)
- SvCUR_set(TARG, 0);
- else {
- SvGROW(TARG, (count * len) + 1);
- repeatcpy(SvPVX(TARG) + len, SvPVX(TARG), len, count - 1);
- SvCUR(TARG) *= count;
- }
- *SvEND(TARG) = '\0';
- }
- if (isutf)
- (void)SvPOK_only_UTF8(TARG);
- else
- (void)SvPOK_only(TARG);
- PUSHTARG;
- }
- RETURN;
- }
-}
-
-PP(pp_subtract)
-{
- dSP; dATARGET; tryAMAGICbin(subtr,opASSIGN);
- {
- dPOPTOPnnrl_ul;
- SETn( left - right );
- RETURN;
- }
-}
-
-PP(pp_left_shift)
-{
- dSP; dATARGET; tryAMAGICbin(lshift,opASSIGN);
- {
- IV shift = POPi;
- if (PL_op->op_private & HINT_INTEGER) {
- IV i = TOPi;
- SETi(i << shift);
- }
- else {
- UV u = TOPu;
- SETu(u << shift);
- }
- RETURN;
- }
-}
-
-PP(pp_right_shift)
-{
- dSP; dATARGET; tryAMAGICbin(rshift,opASSIGN);
- {
- IV shift = POPi;
- if (PL_op->op_private & HINT_INTEGER) {
- IV i = TOPi;
- SETi(i >> shift);
- }
- else {
- UV u = TOPu;
- SETu(u >> shift);
- }
- RETURN;
- }
-}
-
-PP(pp_lt)
-{
- dSP; tryAMAGICbinSET(lt,0);
- {
- dPOPnv;
- SETs(boolSV(TOPn < value));
- RETURN;
- }
-}
-
-PP(pp_gt)
-{
- dSP; tryAMAGICbinSET(gt,0);
- {
- dPOPnv;
- SETs(boolSV(TOPn > value));
- RETURN;
- }
-}
-
-PP(pp_le)
-{
- dSP; tryAMAGICbinSET(le,0);
- {
- dPOPnv;
- SETs(boolSV(TOPn <= value));
- RETURN;
- }
-}
-
-PP(pp_ge)
-{
- dSP; tryAMAGICbinSET(ge,0);
- {
- dPOPnv;
- SETs(boolSV(TOPn >= value));
- RETURN;
- }
-}
-
-PP(pp_ne)
-{
- dSP; tryAMAGICbinSET(ne,0);
- {
- dPOPnv;
- SETs(boolSV(TOPn != value));
- RETURN;
- }
-}
-
-PP(pp_ncmp)
-{
- dSP; dTARGET; tryAMAGICbin(ncmp,0);
- {
- dPOPTOPnnrl;
- I32 value;
-
-#ifdef Perl_isnan
- if (Perl_isnan(left) || Perl_isnan(right)) {
- SETs(&PL_sv_undef);
- RETURN;
- }
- value = (left > right) - (left < right);
-#else
- if (left == right)
- value = 0;
- else if (left < right)
- value = -1;
- else if (left > right)
- value = 1;
- else {
- SETs(&PL_sv_undef);
- RETURN;
- }
-#endif
- SETi(value);
- RETURN;
- }
-}
-
-PP(pp_slt)
-{
- dSP; tryAMAGICbinSET(slt,0);
- {
- dPOPTOPssrl;
- int cmp = ((PL_op->op_private & OPpLOCALE)
- ? sv_cmp_locale(left, right)
- : sv_cmp(left, right));
- SETs(boolSV(cmp < 0));
- RETURN;
- }
-}
-
-PP(pp_sgt)
-{
- dSP; tryAMAGICbinSET(sgt,0);
- {
- dPOPTOPssrl;
- int cmp = ((PL_op->op_private & OPpLOCALE)
- ? sv_cmp_locale(left, right)
- : sv_cmp(left, right));
- SETs(boolSV(cmp > 0));
- RETURN;
- }
-}
-
-PP(pp_sle)
-{
- dSP; tryAMAGICbinSET(sle,0);
- {
- dPOPTOPssrl;
- int cmp = ((PL_op->op_private & OPpLOCALE)
- ? sv_cmp_locale(left, right)
- : sv_cmp(left, right));
- SETs(boolSV(cmp <= 0));
- RETURN;
- }
-}
-
-PP(pp_sge)
-{
- dSP; tryAMAGICbinSET(sge,0);
- {
- dPOPTOPssrl;
- int cmp = ((PL_op->op_private & OPpLOCALE)
- ? sv_cmp_locale(left, right)
- : sv_cmp(left, right));
- SETs(boolSV(cmp >= 0));
- RETURN;
- }
-}
-
-PP(pp_seq)
-{
- dSP; tryAMAGICbinSET(seq,0);
- {
- dPOPTOPssrl;
- SETs(boolSV(sv_eq(left, right)));
- RETURN;
- }
-}
-
-PP(pp_sne)
-{
- dSP; tryAMAGICbinSET(sne,0);
- {
- dPOPTOPssrl;
- SETs(boolSV(!sv_eq(left, right)));
- RETURN;
- }
-}
-
-PP(pp_scmp)
-{
- dSP; dTARGET; tryAMAGICbin(scmp,0);
- {
- dPOPTOPssrl;
- int cmp = ((PL_op->op_private & OPpLOCALE)
- ? sv_cmp_locale(left, right)
- : sv_cmp(left, right));
- SETi( cmp );
- RETURN;
- }
-}
-
-PP(pp_bit_and)
-{
- dSP; dATARGET; tryAMAGICbin(band,opASSIGN);
- {
- dPOPTOPssrl;
- if (SvNIOKp(left) || SvNIOKp(right)) {
- if (PL_op->op_private & HINT_INTEGER) {
- IV i = SvIV(left) & SvIV(right);
- SETi(i);
- }
- else {
- UV u = SvUV(left) & SvUV(right);
- SETu(u);
- }
- }
- else {
- do_vop(PL_op->op_type, TARG, left, right);
- SETTARG;
- }
- RETURN;
- }
-}
-
-PP(pp_bit_xor)
-{
- dSP; dATARGET; tryAMAGICbin(bxor,opASSIGN);
- {
- dPOPTOPssrl;
- if (SvNIOKp(left) || SvNIOKp(right)) {
- if (PL_op->op_private & HINT_INTEGER) {
- IV i = (USE_LEFT(left) ? SvIV(left) : 0) ^ SvIV(right);
- SETi(i);
- }
- else {
- UV u = (USE_LEFT(left) ? SvUV(left) : 0) ^ SvUV(right);
- SETu(u);
- }
- }
- else {
- do_vop(PL_op->op_type, TARG, left, right);
- SETTARG;
- }
- RETURN;
- }
-}
-
-PP(pp_bit_or)
-{
- dSP; dATARGET; tryAMAGICbin(bor,opASSIGN);
- {
- dPOPTOPssrl;
- if (SvNIOKp(left) || SvNIOKp(right)) {
- if (PL_op->op_private & HINT_INTEGER) {
- IV i = (USE_LEFT(left) ? SvIV(left) : 0) | SvIV(right);
- SETi(i);
- }
- else {
- UV u = (USE_LEFT(left) ? SvUV(left) : 0) | SvUV(right);
- SETu(u);
- }
- }
- else {
- do_vop(PL_op->op_type, TARG, left, right);
- SETTARG;
- }
- RETURN;
- }
-}
-
-PP(pp_negate)
-{
- dSP; dTARGET; tryAMAGICun(neg);
- {
- dTOPss;
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvIOKp(sv) && !SvNOKp(sv) && !SvPOKp(sv)) {
- if (SvIsUV(sv)) {
- if (SvIVX(sv) == IV_MIN) {
- SETi(SvIVX(sv)); /* special case: -((UV)IV_MAX+1) == IV_MIN */
- RETURN;
- }
- else if (SvUVX(sv) <= IV_MAX) {
- SETi(-SvIVX(sv));
- RETURN;
- }
- }
- else if (SvIVX(sv) != IV_MIN) {
- SETi(-SvIVX(sv));
- RETURN;
- }
- }
- if (SvNIOKp(sv))
- SETn(-SvNV(sv));
- else if (SvPOKp(sv)) {
- STRLEN len;
- char *s = SvPV(sv, len);
- if (isIDFIRST(*s)) {
- sv_setpvn(TARG, "-", 1);
- sv_catsv(TARG, sv);
- }
- else if (*s == '+' || *s == '-') {
- sv_setsv(TARG, sv);
- *SvPV_force(TARG, len) = *s == '-' ? '+' : '-';
- }
- else if (DO_UTF8(sv) && UTF8_IS_START(*s) && isIDFIRST_utf8((U8*)s)) {
- sv_setpvn(TARG, "-", 1);
- sv_catsv(TARG, sv);
- }
- else
- sv_setnv(TARG, -SvNV(sv));
- SETTARG;
- }
- else
- SETn(-SvNV(sv));
- }
- RETURN;
-}
-
-PP(pp_not)
-{
- dSP; tryAMAGICunSET(not);
- *PL_stack_sp = boolSV(!SvTRUE(*PL_stack_sp));
- return NORMAL;
-}
-
-PP(pp_complement)
-{
- dSP; dTARGET; tryAMAGICun(compl);
- {
- dTOPss;
- if (SvNIOKp(sv)) {
- if (PL_op->op_private & HINT_INTEGER) {
- IV i = ~SvIV(sv);
- SETi(i);
- }
- else {
- UV u = ~SvUV(sv);
- SETu(u);
- }
- }
- else {
- register U8 *tmps;
- register I32 anum;
- STRLEN len;
-
- SvSetSV(TARG, sv);
- tmps = (U8*)SvPV_force(TARG, len);
- anum = len;
- if (SvUTF8(TARG)) {
- /* Calculate exact length, let's not estimate. */
- STRLEN targlen = 0;
- U8 *result;
- U8 *send;
- STRLEN l;
- UV nchar = 0;
- UV nwide = 0;
-
- send = tmps + len;
- while (tmps < send) {
- UV c = utf8_to_uv(tmps, send-tmps, &l, UTF8_ALLOW_ANYUV);
- tmps += UTF8SKIP(tmps);
- targlen += UNISKIP(~c);
- nchar++;
- if (c > 0xff)
- nwide++;
- }
-
- /* Now rewind strings and write them. */
- tmps -= len;
-
- if (nwide) {
- Newz(0, result, targlen + 1, U8);
- while (tmps < send) {
- UV c = utf8_to_uv(tmps, send-tmps, &l, UTF8_ALLOW_ANYUV);
- tmps += UTF8SKIP(tmps);
- result = uv_to_utf8(result, ~c);
- }
- *result = '\0';
- result -= targlen;
- sv_setpvn(TARG, (char*)result, targlen);
- SvUTF8_on(TARG);
- }
- else {
- Newz(0, result, nchar + 1, U8);
- while (tmps < send) {
- U8 c = (U8)utf8_to_uv(tmps, 0, &l, UTF8_ALLOW_ANY);
- tmps += UTF8SKIP(tmps);
- *result++ = ~c;
- }
- *result = '\0';
- result -= nchar;
- sv_setpvn(TARG, (char*)result, nchar);
- }
- Safefree(result);
- SETs(TARG);
- RETURN;
- }
-#ifdef LIBERAL
- {
- register long *tmpl;
- for ( ; anum && (unsigned long)tmps % sizeof(long); anum--, tmps++)
- *tmps = ~*tmps;
- tmpl = (long*)tmps;
- for ( ; anum >= sizeof(long); anum -= sizeof(long), tmpl++)
- *tmpl = ~*tmpl;
- tmps = (U8*)tmpl;
- }
-#endif
- for ( ; anum > 0; anum--, tmps++)
- *tmps = ~*tmps;
-
- SETs(TARG);
- }
- RETURN;
- }
-}
-
-/* integer versions of some of the above */
-
-PP(pp_i_multiply)
-{
- dSP; dATARGET; tryAMAGICbin(mult,opASSIGN);
- {
- dPOPTOPiirl;
- SETi( left * right );
- RETURN;
- }
-}
-
-PP(pp_i_divide)
-{
- dSP; dATARGET; tryAMAGICbin(div,opASSIGN);
- {
- dPOPiv;
- if (value == 0)
- DIE(aTHX_ "Illegal division by zero");
- value = POPi / value;
- PUSHi( value );
- RETURN;
- }
-}
-
-PP(pp_i_modulo)
-{
- dSP; dATARGET; tryAMAGICbin(modulo,opASSIGN);
- {
- dPOPTOPiirl;
- if (!right)
- DIE(aTHX_ "Illegal modulus zero");
- SETi( left % right );
- RETURN;
- }
-}
-
-PP(pp_i_add)
-{
- dSP; dATARGET; tryAMAGICbin(add,opASSIGN);
- {
- dPOPTOPiirl_ul;
- SETi( left + right );
- RETURN;
- }
-}
-
-PP(pp_i_subtract)
-{
- dSP; dATARGET; tryAMAGICbin(subtr,opASSIGN);
- {
- dPOPTOPiirl_ul;
- SETi( left - right );
- RETURN;
- }
-}
-
-PP(pp_i_lt)
-{
- dSP; tryAMAGICbinSET(lt,0);
- {
- dPOPTOPiirl;
- SETs(boolSV(left < right));
- RETURN;
- }
-}
-
-PP(pp_i_gt)
-{
- dSP; tryAMAGICbinSET(gt,0);
- {
- dPOPTOPiirl;
- SETs(boolSV(left > right));
- RETURN;
- }
-}
-
-PP(pp_i_le)
-{
- dSP; tryAMAGICbinSET(le,0);
- {
- dPOPTOPiirl;
- SETs(boolSV(left <= right));
- RETURN;
- }
-}
-
-PP(pp_i_ge)
-{
- dSP; tryAMAGICbinSET(ge,0);
- {
- dPOPTOPiirl;
- SETs(boolSV(left >= right));
- RETURN;
- }
-}
-
-PP(pp_i_eq)
-{
- dSP; tryAMAGICbinSET(eq,0);
- {
- dPOPTOPiirl;
- SETs(boolSV(left == right));
- RETURN;
- }
-}
-
-PP(pp_i_ne)
-{
- dSP; tryAMAGICbinSET(ne,0);
- {
- dPOPTOPiirl;
- SETs(boolSV(left != right));
- RETURN;
- }
-}
-
-PP(pp_i_ncmp)
-{
- dSP; dTARGET; tryAMAGICbin(ncmp,0);
- {
- dPOPTOPiirl;
- I32 value;
-
- if (left > right)
- value = 1;
- else if (left < right)
- value = -1;
- else
- value = 0;
- SETi(value);
- RETURN;
- }
-}
-
-PP(pp_i_negate)
-{
- dSP; dTARGET; tryAMAGICun(neg);
- SETi(-TOPi);
- RETURN;
-}
-
-/* High falutin' math. */
-
-PP(pp_atan2)
-{
- dSP; dTARGET; tryAMAGICbin(atan2,0);
- {
- dPOPTOPnnrl;
- SETn(Perl_atan2(left, right));
- RETURN;
- }
-}
-
-PP(pp_sin)
-{
- dSP; dTARGET; tryAMAGICun(sin);
- {
- NV value;
- value = POPn;
- value = Perl_sin(value);
- XPUSHn(value);
- RETURN;
- }
-}
-
-PP(pp_cos)
-{
- dSP; dTARGET; tryAMAGICun(cos);
- {
- NV value;
- value = POPn;
- value = Perl_cos(value);
- XPUSHn(value);
- RETURN;
- }
-}
-
-/* Support Configure command-line overrides for rand() functions.
- After 5.005, perhaps we should replace this by Configure support
- for drand48(), random(), or rand(). For 5.005, though, maintain
- compatibility by calling rand() but allow the user to override it.
- See INSTALL for details. --Andy Dougherty 15 July 1998
-*/
-/* Now it's after 5.005, and Configure supports drand48() and random(),
- in addition to rand(). So the overrides should not be needed any more.
- --Jarkko Hietaniemi 27 September 1998
- */
-
-#ifndef HAS_DRAND48_PROTO
-extern double drand48 (void);
-#endif
-
-PP(pp_rand)
-{
- dSP; dTARGET;
- NV value;
- if (MAXARG < 1)
- value = 1.0;
- else
- value = POPn;
- if (value == 0.0)
- value = 1.0;
- if (!PL_srand_called) {
- (void)seedDrand01((Rand_seed_t)seed());
- PL_srand_called = TRUE;
- }
- value *= Drand01();
- XPUSHn(value);
- RETURN;
-}
-
-PP(pp_srand)
-{
- dSP;
- UV anum;
- if (MAXARG < 1)
- anum = seed();
- else
- anum = POPu;
- (void)seedDrand01((Rand_seed_t)anum);
- PL_srand_called = TRUE;
- EXTEND(SP, 1);
- RETPUSHYES;
-}
-
-STATIC U32
-S_seed(pTHX)
-{
- /*
- * This is really just a quick hack which grabs various garbage
- * values. It really should be a real hash algorithm which
- * spreads the effect of every input bit onto every output bit,
- * if someone who knows about such things would bother to write it.
- * Might be a good idea to add that function to CORE as well.
- * No numbers below come from careful analysis or anything here,
- * except they are primes and SEED_C1 > 1E6 to get a full-width
- * value from (tv_sec * SEED_C1 + tv_usec). The multipliers should
- * probably be bigger too.
- */
-#if RANDBITS > 16
-# define SEED_C1 1000003
-#define SEED_C4 73819
-#else
-# define SEED_C1 25747
-#define SEED_C4 20639
-#endif
-#define SEED_C2 3
-#define SEED_C3 269
-#define SEED_C5 26107
-
-#ifndef PERL_NO_DEV_RANDOM
- int fd;
-#endif
- U32 u;
-#ifdef VMS
-# include <starlet.h>
- /* when[] = (low 32 bits, high 32 bits) of time since epoch
- * in 100-ns units, typically incremented ever 10 ms. */
- unsigned int when[2];
-#else
-# ifdef HAS_GETTIMEOFDAY
- struct timeval when;
-# else
- Time_t when;
-# endif
-#endif
-
-/* This test is an escape hatch, this symbol isn't set by Configure. */
-#ifndef PERL_NO_DEV_RANDOM
-#ifndef PERL_RANDOM_DEVICE
- /* /dev/random isn't used by default because reads from it will block
- * if there isn't enough entropy available. You can compile with
- * PERL_RANDOM_DEVICE to it if you'd prefer Perl to block until there
- * is enough real entropy to fill the seed. */
-# define PERL_RANDOM_DEVICE "/dev/urandom"
-#endif
- fd = PerlLIO_open(PERL_RANDOM_DEVICE, 0);
- if (fd != -1) {
- if (PerlLIO_read(fd, &u, sizeof u) != sizeof u)
- u = 0;
- PerlLIO_close(fd);
- if (u)
- return u;
- }
-#endif
-
-#ifdef VMS
- _ckvmssts(sys$gettim(when));
- u = (U32)SEED_C1 * when[0] + (U32)SEED_C2 * when[1];
-#else
-# ifdef HAS_GETTIMEOFDAY
- gettimeofday(&when,(struct timezone *) 0);
- u = (U32)SEED_C1 * when.tv_sec + (U32)SEED_C2 * when.tv_usec;
-# else
- (void)time(&when);
- u = (U32)SEED_C1 * when;
-# endif
-#endif
- u += SEED_C3 * (U32)PerlProc_getpid();
- u += SEED_C4 * (U32)PTR2UV(PL_stack_sp);
-#ifndef PLAN9 /* XXX Plan9 assembler chokes on this; fix needed */
- u += SEED_C5 * (U32)PTR2UV(&when);
-#endif
- return u;
-}
-
-PP(pp_exp)
-{
- dSP; dTARGET; tryAMAGICun(exp);
- {
- NV value;
- value = POPn;
- value = Perl_exp(value);
- XPUSHn(value);
- RETURN;
- }
-}
-
-PP(pp_log)
-{
- dSP; dTARGET; tryAMAGICun(log);
- {
- NV value;
- value = POPn;
- if (value <= 0.0) {
- SET_NUMERIC_STANDARD();
- DIE(aTHX_ "Can't take log of %g", value);
- }
- value = Perl_log(value);
- XPUSHn(value);
- RETURN;
- }
-}
-
-PP(pp_sqrt)
-{
- dSP; dTARGET; tryAMAGICun(sqrt);
- {
- NV value;
- value = POPn;
- if (value < 0.0) {
- SET_NUMERIC_STANDARD();
- DIE(aTHX_ "Can't take sqrt of %g", value);
- }
- value = Perl_sqrt(value);
- XPUSHn(value);
- RETURN;
- }
-}
-
-PP(pp_int)
-{
- dSP; dTARGET;
- {
- NV value = TOPn;
- IV iv;
-
- if (SvIOKp(TOPs) && !SvNOKp(TOPs) && !SvPOKp(TOPs)) {
- iv = SvIVX(TOPs);
- SETi(iv);
- }
- else {
- if (value >= 0.0) {
-#if defined(HAS_MODFL) || defined(LONG_DOUBLE_EQUALS_DOUBLE)
- (void)Perl_modf(value, &value);
-#else
- double tmp = (double)value;
- (void)Perl_modf(tmp, &tmp);
- value = (NV)tmp;
-#endif
- }
- else {
-#if defined(HAS_MODFL) || defined(LONG_DOUBLE_EQUALS_DOUBLE)
- (void)Perl_modf(-value, &value);
- value = -value;
-#else
- double tmp = (double)value;
- (void)Perl_modf(-tmp, &tmp);
- value = -(NV)tmp;
-#endif
- }
- iv = I_V(value);
- if (iv == value)
- SETi(iv);
- else
- SETn(value);
- }
- }
- RETURN;
-}
-
-PP(pp_abs)
-{
- dSP; dTARGET; tryAMAGICun(abs);
- {
- NV value = TOPn;
- IV iv;
-
- if (SvIOKp(TOPs) && !SvNOKp(TOPs) && !SvPOKp(TOPs) &&
- (iv = SvIVX(TOPs)) != IV_MIN) {
- if (iv < 0)
- iv = -iv;
- SETi(iv);
- }
- else {
- if (value < 0.0)
- value = -value;
- SETn(value);
- }
- }
- RETURN;
-}
-
-PP(pp_hex)
-{
- dSP; dTARGET;
- char *tmps;
- STRLEN argtype;
- STRLEN len;
-
- tmps = (SvPVx(POPs, len));
- argtype = 1; /* allow underscores */
- XPUSHn(scan_hex(tmps, len, &argtype));
- RETURN;
-}
-
-PP(pp_oct)
-{
- dSP; dTARGET;
- NV value;
- STRLEN argtype;
- char *tmps;
- STRLEN len;
-
- tmps = (SvPVx(POPs, len));
- while (*tmps && len && isSPACE(*tmps))
- tmps++, len--;
- if (*tmps == '0')
- tmps++, len--;
- argtype = 1; /* allow underscores */
- if (*tmps == 'x')
- value = scan_hex(++tmps, --len, &argtype);
- else if (*tmps == 'b')
- value = scan_bin(++tmps, --len, &argtype);
- else
- value = scan_oct(tmps, len, &argtype);
- XPUSHn(value);
- RETURN;
-}
-
-/* String stuff. */
-
-PP(pp_length)
-{
- dSP; dTARGET;
- SV *sv = TOPs;
-
- if (DO_UTF8(sv))
- SETi(sv_len_utf8(sv));
- else
- SETi(sv_len(sv));
- RETURN;
-}
-
-PP(pp_substr)
-{
- dSP; dTARGET;
- SV *sv;
- I32 len;
- STRLEN curlen;
- STRLEN utf8_curlen;
- I32 pos;
- I32 rem;
- I32 fail;
- I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
- char *tmps;
- I32 arybase = PL_curcop->cop_arybase;
- SV *repl_sv = NULL;
- char *repl = 0;
- STRLEN repl_len;
- int num_args = PL_op->op_private & 7;
- bool repl_need_utf8_upgrade = FALSE;
- bool repl_is_utf8 = FALSE;
-
- SvTAINTED_off(TARG); /* decontaminate */
- SvUTF8_off(TARG); /* decontaminate */
- if (num_args > 2) {
- if (num_args > 3) {
- repl_sv = POPs;
- repl = SvPV(repl_sv, repl_len);
- repl_is_utf8 = DO_UTF8(repl_sv) && SvCUR(repl_sv);
- }
- len = POPi;
- }
- pos = POPi;
- sv = POPs;
- PUTBACK;
- if (repl_sv) {
- if (repl_is_utf8) {
- if (!DO_UTF8(sv))
- sv_utf8_upgrade(sv);
- }
- else if (DO_UTF8(sv))
- repl_need_utf8_upgrade = TRUE;
- }
- tmps = SvPV(sv, curlen);
- if (DO_UTF8(sv)) {
- utf8_curlen = sv_len_utf8(sv);
- if (utf8_curlen == curlen)
- utf8_curlen = 0;
- else
- curlen = utf8_curlen;
- }
- else
- utf8_curlen = 0;
-
- if (pos >= arybase) {
- pos -= arybase;
- rem = curlen-pos;
- fail = rem;
- if (num_args > 2) {
- if (len < 0) {
- rem += len;
- if (rem < 0)
- rem = 0;
- }
- else if (rem > len)
- rem = len;
- }
- }
- else {
- pos += curlen;
- if (num_args < 3)
- rem = curlen;
- else if (len >= 0) {
- rem = pos+len;
- if (rem > (I32)curlen)
- rem = curlen;
- }
- else {
- rem = curlen+len;
- if (rem < pos)
- rem = pos;
- }
- if (pos < 0)
- pos = 0;
- fail = rem;
- rem -= pos;
- }
- if (fail < 0) {
- if (lvalue || repl)
- Perl_croak(aTHX_ "substr outside of string");
- if (ckWARN(WARN_SUBSTR))
- Perl_warner(aTHX_ WARN_SUBSTR, "substr outside of string");
- RETPUSHUNDEF;
- }
- else {
- I32 upos = pos;
- I32 urem = rem;
- if (utf8_curlen)
- sv_pos_u2b(sv, &pos, &rem);
- tmps += pos;
- sv_setpvn(TARG, tmps, rem);
- if (utf8_curlen)
- SvUTF8_on(TARG);
- if (repl) {
- SV* repl_sv_copy = NULL;
-
- if (repl_need_utf8_upgrade) {
- repl_sv_copy = newSVsv(repl_sv);
- sv_utf8_upgrade(repl_sv_copy);
- repl = SvPV(repl_sv_copy, repl_len);
- repl_is_utf8 = DO_UTF8(repl_sv_copy) && SvCUR(sv);
- }
- sv_insert(sv, pos, rem, repl, repl_len);
- if (repl_is_utf8)
- SvUTF8_on(sv);
- if (repl_sv_copy)
- SvREFCNT_dec(repl_sv_copy);
- }
- else if (lvalue) { /* it's an lvalue! */
- if (!SvGMAGICAL(sv)) {
- if (SvROK(sv)) {
- STRLEN n_a;
- SvPV_force(sv,n_a);
- if (ckWARN(WARN_SUBSTR))
- Perl_warner(aTHX_ WARN_SUBSTR,
- "Attempt to use reference as lvalue in substr");
- }
- if (SvOK(sv)) /* is it defined ? */
- (void)SvPOK_only_UTF8(sv);
- else
- sv_setpvn(sv,"",0); /* avoid lexical reincarnation */
- }
-
- if (SvTYPE(TARG) < SVt_PVLV) {
- sv_upgrade(TARG, SVt_PVLV);
- sv_magic(TARG, Nullsv, 'x', Nullch, 0);
- }
-
- LvTYPE(TARG) = 'x';
- if (LvTARG(TARG) != sv) {
- if (LvTARG(TARG))
- SvREFCNT_dec(LvTARG(TARG));
- LvTARG(TARG) = SvREFCNT_inc(sv);
- }
- LvTARGOFF(TARG) = upos;
- LvTARGLEN(TARG) = urem;
- }
- }
- SPAGAIN;
- PUSHs(TARG); /* avoid SvSETMAGIC here */
- RETURN;
-}
-
-PP(pp_vec)
-{
- dSP; dTARGET;
- register IV size = POPi;
- register IV offset = POPi;
- register SV *src = POPs;
- I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
-
- SvTAINTED_off(TARG); /* decontaminate */
- if (lvalue) { /* it's an lvalue! */
- if (SvTYPE(TARG) < SVt_PVLV) {
- sv_upgrade(TARG, SVt_PVLV);
- sv_magic(TARG, Nullsv, 'v', Nullch, 0);
- }
- LvTYPE(TARG) = 'v';
- if (LvTARG(TARG) != src) {
- if (LvTARG(TARG))
- SvREFCNT_dec(LvTARG(TARG));
- LvTARG(TARG) = SvREFCNT_inc(src);
- }
- LvTARGOFF(TARG) = offset;
- LvTARGLEN(TARG) = size;
- }
-
- sv_setuv(TARG, do_vecget(src, offset, size));
- PUSHs(TARG);
- RETURN;
-}
-
-PP(pp_index)
-{
- dSP; dTARGET;
- SV *big;
- SV *little;
- I32 offset;
- I32 retval;
- char *tmps;
- char *tmps2;
- STRLEN biglen;
- I32 arybase = PL_curcop->cop_arybase;
-
- if (MAXARG < 3)
- offset = 0;
- else
- offset = POPi - arybase;
- little = POPs;
- big = POPs;
- tmps = SvPV(big, biglen);
- if (offset > 0 && DO_UTF8(big))
- sv_pos_u2b(big, &offset, 0);
- if (offset < 0)
- offset = 0;
- else if (offset > biglen)
- offset = biglen;
- if (!(tmps2 = fbm_instr((unsigned char*)tmps + offset,
- (unsigned char*)tmps + biglen, little, 0)))
- retval = -1;
- else
- retval = tmps2 - tmps;
- if (retval > 0 && DO_UTF8(big))
- sv_pos_b2u(big, &retval);
- PUSHi(retval + arybase);
- RETURN;
-}
-
-PP(pp_rindex)
-{
- dSP; dTARGET;
- SV *big;
- SV *little;
- STRLEN blen;
- STRLEN llen;
- I32 offset;
- I32 retval;
- char *tmps;
- char *tmps2;
- I32 arybase = PL_curcop->cop_arybase;
-
- if (MAXARG >= 3)
- offset = POPi;
- little = POPs;
- big = POPs;
- tmps2 = SvPV(little, llen);
- tmps = SvPV(big, blen);
- if (MAXARG < 3)
- offset = blen;
- else {
- if (offset > 0 && DO_UTF8(big))
- sv_pos_u2b(big, &offset, 0);
- offset = offset - arybase + llen;
- }
- if (offset < 0)
- offset = 0;
- else if (offset > blen)
- offset = blen;
- if (!(tmps2 = rninstr(tmps, tmps + offset,
- tmps2, tmps2 + llen)))
- retval = -1;
- else
- retval = tmps2 - tmps;
- if (retval > 0 && DO_UTF8(big))
- sv_pos_b2u(big, &retval);
- PUSHi(retval + arybase);
- RETURN;
-}
-
-PP(pp_sprintf)
-{
- dSP; dMARK; dORIGMARK; dTARGET;
- do_sprintf(TARG, SP-MARK, MARK+1);
- TAINT_IF(SvTAINTED(TARG));
- SP = ORIGMARK;
- PUSHTARG;
- RETURN;
-}
-
-PP(pp_ord)
-{
- dSP; dTARGET;
- SV *argsv = POPs;
- STRLEN len;
- U8 *s = (U8*)SvPVx(argsv, len);
-
- XPUSHu(DO_UTF8(argsv) ? utf8_to_uv_simple(s, 0) : (*s & 0xff));
- RETURN;
-}
-
-PP(pp_chr)
-{
- dSP; dTARGET;
- char *tmps;
- UV value = POPu;
-
- (void)SvUPGRADE(TARG,SVt_PV);
-
- if (value > 255 && !IN_BYTE) {
- SvGROW(TARG, UTF8_MAXLEN+1);
- tmps = SvPVX(TARG);
- tmps = (char*)uv_to_utf8((U8*)tmps, (UV)value);
- SvCUR_set(TARG, tmps - SvPVX(TARG));
- *tmps = '\0';
- (void)SvPOK_only(TARG);
- SvUTF8_on(TARG);
- XPUSHs(TARG);
- RETURN;
- }
-
- SvGROW(TARG,2);
- SvCUR_set(TARG, 1);
- tmps = SvPVX(TARG);
- *tmps++ = value;
- *tmps = '\0';
- (void)SvPOK_only(TARG);
- XPUSHs(TARG);
- RETURN;
-}
-
-PP(pp_crypt)
-{
- dSP; dTARGET; dPOPTOPssrl;
- STRLEN n_a;
-#ifdef HAS_CRYPT
- char *tmps = SvPV(left, n_a);
-#ifdef FCRYPT
- sv_setpv(TARG, fcrypt(tmps, SvPV(right, n_a)));
-#else
- sv_setpv(TARG, PerlProc_crypt(tmps, SvPV(right, n_a)));
-#endif
-#else
- DIE(aTHX_
- "The crypt() function is unimplemented due to excessive paranoia.");
-#endif
- SETs(TARG);
- RETURN;
-}
-
-PP(pp_ucfirst)
-{
- dSP;
- SV *sv = TOPs;
- register U8 *s;
- STRLEN slen;
-
- if (DO_UTF8(sv) && (s = (U8*)SvPV(sv, slen)) && slen && UTF8_IS_START(*s)) {
- STRLEN ulen;
- U8 tmpbuf[UTF8_MAXLEN+1];
- U8 *tend;
- UV uv = utf8_to_uv(s, slen, &ulen, 0);
-
- if (PL_op->op_private & OPpLOCALE) {
- TAINT;
- SvTAINTED_on(sv);
- uv = toTITLE_LC_uni(uv);
- }
- else
- uv = toTITLE_utf8(s);
-
- tend = uv_to_utf8(tmpbuf, uv);
-
- if (!SvPADTMP(sv) || tend - tmpbuf != ulen || SvREADONLY(sv)) {
- dTARGET;
- sv_setpvn(TARG, (char*)tmpbuf, tend - tmpbuf);
- sv_catpvn(TARG, (char*)(s + ulen), slen - ulen);
- SvUTF8_on(TARG);
- SETs(TARG);
- }
- else {
- s = (U8*)SvPV_force(sv, slen);
- Copy(tmpbuf, s, ulen, U8);
- }
- }
- else {
- if (!SvPADTMP(sv) || SvREADONLY(sv)) {
- dTARGET;
- SvUTF8_off(TARG); /* decontaminate */
- sv_setsv(TARG, sv);
- sv = TARG;
- SETs(sv);
- }
- s = (U8*)SvPV_force(sv, slen);
- if (*s) {
- if (PL_op->op_private & OPpLOCALE) {
- TAINT;
- SvTAINTED_on(sv);
- *s = toUPPER_LC(*s);
- }
- else
- *s = toUPPER(*s);
- }
- }
- if (SvSMAGICAL(sv))
- mg_set(sv);
- RETURN;
-}
-
-PP(pp_lcfirst)
-{
- dSP;
- SV *sv = TOPs;
- register U8 *s;
- STRLEN slen;
-
- if (DO_UTF8(sv) && (s = (U8*)SvPV(sv, slen)) && slen && UTF8_IS_START(*s)) {
- STRLEN ulen;
- U8 tmpbuf[UTF8_MAXLEN+1];
- U8 *tend;
- UV uv = utf8_to_uv(s, slen, &ulen, 0);
-
- if (PL_op->op_private & OPpLOCALE) {
- TAINT;
- SvTAINTED_on(sv);
- uv = toLOWER_LC_uni(uv);
- }
- else
- uv = toLOWER_utf8(s);
-
- tend = uv_to_utf8(tmpbuf, uv);
-
- if (!SvPADTMP(sv) || tend - tmpbuf != ulen || SvREADONLY(sv)) {
- dTARGET;
- sv_setpvn(TARG, (char*)tmpbuf, tend - tmpbuf);
- sv_catpvn(TARG, (char*)(s + ulen), slen - ulen);
- SvUTF8_on(TARG);
- SETs(TARG);
- }
- else {
- s = (U8*)SvPV_force(sv, slen);
- Copy(tmpbuf, s, ulen, U8);
- }
- }
- else {
- if (!SvPADTMP(sv) || SvREADONLY(sv)) {
- dTARGET;
- SvUTF8_off(TARG); /* decontaminate */
- sv_setsv(TARG, sv);
- sv = TARG;
- SETs(sv);
- }
- s = (U8*)SvPV_force(sv, slen);
- if (*s) {
- if (PL_op->op_private & OPpLOCALE) {
- TAINT;
- SvTAINTED_on(sv);
- *s = toLOWER_LC(*s);
- }
- else
- *s = toLOWER(*s);
- }
- }
- if (SvSMAGICAL(sv))
- mg_set(sv);
- RETURN;
-}
-
-PP(pp_uc)
-{
- dSP;
- SV *sv = TOPs;
- register U8 *s;
- STRLEN len;
-
- if (DO_UTF8(sv)) {
- dTARGET;
- STRLEN ulen;
- register U8 *d;
- U8 *send;
-
- s = (U8*)SvPV(sv,len);
- if (!len) {
- SvUTF8_off(TARG); /* decontaminate */
- sv_setpvn(TARG, "", 0);
- SETs(TARG);
- }
- else {
- (void)SvUPGRADE(TARG, SVt_PV);
- SvGROW(TARG, (len * 2) + 1);
- (void)SvPOK_only(TARG);
- d = (U8*)SvPVX(TARG);
- send = s + len;
- if (PL_op->op_private & OPpLOCALE) {
- TAINT;
- SvTAINTED_on(TARG);
- while (s < send) {
- d = uv_to_utf8(d, toUPPER_LC_uni( utf8_to_uv(s, len, &ulen, 0)));
- s += ulen;
- }
- }
- else {
- while (s < send) {
- d = uv_to_utf8(d, toUPPER_utf8( s ));
- s += UTF8SKIP(s);
- }
- }
- *d = '\0';
- SvUTF8_on(TARG);
- SvCUR_set(TARG, d - (U8*)SvPVX(TARG));
- SETs(TARG);
- }
- }
- else {
- if (!SvPADTMP(sv) || SvREADONLY(sv)) {
- dTARGET;
- SvUTF8_off(TARG); /* decontaminate */
- sv_setsv(TARG, sv);
- sv = TARG;
- SETs(sv);
- }
- s = (U8*)SvPV_force(sv, len);
- if (len) {
- register U8 *send = s + len;
-
- if (PL_op->op_private & OPpLOCALE) {
- TAINT;
- SvTAINTED_on(sv);
- for (; s < send; s++)
- *s = toUPPER_LC(*s);
- }
- else {
- for (; s < send; s++)
- *s = toUPPER(*s);
- }
- }
- }
- if (SvSMAGICAL(sv))
- mg_set(sv);
- RETURN;
-}
-
-PP(pp_lc)
-{
- dSP;
- SV *sv = TOPs;
- register U8 *s;
- STRLEN len;
-
- if (DO_UTF8(sv)) {
- dTARGET;
- STRLEN ulen;
- register U8 *d;
- U8 *send;
-
- s = (U8*)SvPV(sv,len);
- if (!len) {
- SvUTF8_off(TARG); /* decontaminate */
- sv_setpvn(TARG, "", 0);
- SETs(TARG);
- }
- else {
- (void)SvUPGRADE(TARG, SVt_PV);
- SvGROW(TARG, (len * 2) + 1);
- (void)SvPOK_only(TARG);
- d = (U8*)SvPVX(TARG);
- send = s + len;
- if (PL_op->op_private & OPpLOCALE) {
- TAINT;
- SvTAINTED_on(TARG);
- while (s < send) {
- d = uv_to_utf8(d, toLOWER_LC_uni( utf8_to_uv(s, len, &ulen, 0)));
- s += ulen;
- }
- }
- else {
- while (s < send) {
- d = uv_to_utf8(d, toLOWER_utf8(s));
- s += UTF8SKIP(s);
- }
- }
- *d = '\0';
- SvUTF8_on(TARG);
- SvCUR_set(TARG, d - (U8*)SvPVX(TARG));
- SETs(TARG);
- }
- }
- else {
- if (!SvPADTMP(sv) || SvREADONLY(sv)) {
- dTARGET;
- SvUTF8_off(TARG); /* decontaminate */
- sv_setsv(TARG, sv);
- sv = TARG;
- SETs(sv);
- }
-
- s = (U8*)SvPV_force(sv, len);
- if (len) {
- register U8 *send = s + len;
-
- if (PL_op->op_private & OPpLOCALE) {
- TAINT;
- SvTAINTED_on(sv);
- for (; s < send; s++)
- *s = toLOWER_LC(*s);
- }
- else {
- for (; s < send; s++)
- *s = toLOWER(*s);
- }
- }
- }
- if (SvSMAGICAL(sv))
- mg_set(sv);
- RETURN;
-}
-
-PP(pp_quotemeta)
-{
- dSP; dTARGET;
- SV *sv = TOPs;
- STRLEN len;
- register char *s = SvPV(sv,len);
- register char *d;
-
- SvUTF8_off(TARG); /* decontaminate */
- if (len) {
- (void)SvUPGRADE(TARG, SVt_PV);
- SvGROW(TARG, (len * 2) + 1);
- d = SvPVX(TARG);
- if (DO_UTF8(sv)) {
- while (len) {
- if (UTF8_IS_CONTINUED(*s)) {
- STRLEN ulen = UTF8SKIP(s);
- if (ulen > len)
- ulen = len;
- len -= ulen;
- while (ulen--)
- *d++ = *s++;
- }
- else {
- if (!isALNUM(*s))
- *d++ = '\\';
- *d++ = *s++;
- len--;
- }
- }
- SvUTF8_on(TARG);
- }
- else {
- while (len--) {
- if (!isALNUM(*s))
- *d++ = '\\';
- *d++ = *s++;
- }
- }
- *d = '\0';
- SvCUR_set(TARG, d - SvPVX(TARG));
- (void)SvPOK_only_UTF8(TARG);
- }
- else
- sv_setpvn(TARG, s, len);
- SETs(TARG);
- if (SvSMAGICAL(TARG))
- mg_set(TARG);
- RETURN;
-}
-
-/* Arrays. */
-
-PP(pp_aslice)
-{
- dSP; dMARK; dORIGMARK;
- register SV** svp;
- register AV* av = (AV*)POPs;
- register I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
- I32 arybase = PL_curcop->cop_arybase;
- I32 elem;
-
- if (SvTYPE(av) == SVt_PVAV) {
- if (lval && PL_op->op_private & OPpLVAL_INTRO) {
- I32 max = -1;
- for (svp = MARK + 1; svp <= SP; svp++) {
- elem = SvIVx(*svp);
- if (elem > max)
- max = elem;
- }
- if (max > AvMAX(av))
- av_extend(av, max);
- }
- while (++MARK <= SP) {
- elem = SvIVx(*MARK);
-
- if (elem > 0)
- elem -= arybase;
- svp = av_fetch(av, elem, lval);
- if (lval) {
- if (!svp || *svp == &PL_sv_undef)
- DIE(aTHX_ PL_no_aelem, elem);
- if (PL_op->op_private & OPpLVAL_INTRO)
- save_aelem(av, elem, svp);
- }
- *MARK = svp ? *svp : &PL_sv_undef;
- }
- }
- if (GIMME != G_ARRAY) {
- MARK = ORIGMARK;
- *++MARK = *SP;
- SP = MARK;
- }
- RETURN;
-}
-
-/* Associative arrays. */
-
-PP(pp_each)
-{
- dSP;
- HV *hash = (HV*)POPs;
- HE *entry;
- I32 gimme = GIMME_V;
- I32 realhv = (SvTYPE(hash) == SVt_PVHV);
-
- PUTBACK;
- /* might clobber stack_sp */
- entry = realhv ? hv_iternext(hash) : avhv_iternext((AV*)hash);
- SPAGAIN;
-
- EXTEND(SP, 2);
- if (entry) {
- PUSHs(hv_iterkeysv(entry)); /* won't clobber stack_sp */
- if (gimme == G_ARRAY) {
- SV *val;
- PUTBACK;
- /* might clobber stack_sp */
- val = realhv ?
- hv_iterval(hash, entry) : avhv_iterval((AV*)hash, entry);
- SPAGAIN;
- PUSHs(val);
- }
- }
- else if (gimme == G_SCALAR)
- RETPUSHUNDEF;
-
- RETURN;
-}
-
-PP(pp_values)
-{
- return do_kv();
-}
-
-PP(pp_keys)
-{
- return do_kv();
-}
-
-PP(pp_delete)
-{
- dSP;
- I32 gimme = GIMME_V;
- I32 discard = (gimme == G_VOID) ? G_DISCARD : 0;
- SV *sv;
- HV *hv;
-
- if (PL_op->op_private & OPpSLICE) {
- dMARK; dORIGMARK;
- U32 hvtype;
- hv = (HV*)POPs;
- hvtype = SvTYPE(hv);
- if (hvtype == SVt_PVHV) { /* hash element */
- while (++MARK <= SP) {
- sv = hv_delete_ent(hv, *MARK, discard, 0);
- *MARK = sv ? sv : &PL_sv_undef;
- }
- }
- else if (hvtype == SVt_PVAV) {
- if (PL_op->op_flags & OPf_SPECIAL) { /* array element */
- while (++MARK <= SP) {
- sv = av_delete((AV*)hv, SvIV(*MARK), discard);
- *MARK = sv ? sv : &PL_sv_undef;
- }
- }
- else { /* pseudo-hash element */
- while (++MARK <= SP) {
- sv = avhv_delete_ent((AV*)hv, *MARK, discard, 0);
- *MARK = sv ? sv : &PL_sv_undef;
- }
- }
- }
- else
- DIE(aTHX_ "Not a HASH reference");
- if (discard)
- SP = ORIGMARK;
- else if (gimme == G_SCALAR) {
- MARK = ORIGMARK;
- *++MARK = *SP;
- SP = MARK;
- }
- }
- else {
- SV *keysv = POPs;
- hv = (HV*)POPs;
- if (SvTYPE(hv) == SVt_PVHV)
- sv = hv_delete_ent(hv, keysv, discard, 0);
- else if (SvTYPE(hv) == SVt_PVAV) {
- if (PL_op->op_flags & OPf_SPECIAL)
- sv = av_delete((AV*)hv, SvIV(keysv), discard);
- else
- sv = avhv_delete_ent((AV*)hv, keysv, discard, 0);
- }
- else
- DIE(aTHX_ "Not a HASH reference");
- if (!sv)
- sv = &PL_sv_undef;
- if (!discard)
- PUSHs(sv);
- }
- RETURN;
-}
-
-PP(pp_exists)
-{
- dSP;
- SV *tmpsv;
- HV *hv;
-
- if (PL_op->op_private & OPpEXISTS_SUB) {
- GV *gv;
- CV *cv;
- SV *sv = POPs;
- cv = sv_2cv(sv, &hv, &gv, FALSE);
- if (cv)
- RETPUSHYES;
- if (gv && isGV(gv) && GvCV(gv) && !GvCVGEN(gv))
- RETPUSHYES;
- RETPUSHNO;
- }
- tmpsv = POPs;
- hv = (HV*)POPs;
- if (SvTYPE(hv) == SVt_PVHV) {
- if (hv_exists_ent(hv, tmpsv, 0))
- RETPUSHYES;
- }
- else if (SvTYPE(hv) == SVt_PVAV) {
- if (PL_op->op_flags & OPf_SPECIAL) { /* array element */
- if (av_exists((AV*)hv, SvIV(tmpsv)))
- RETPUSHYES;
- }
- else if (avhv_exists_ent((AV*)hv, tmpsv, 0)) /* pseudo-hash element */
- RETPUSHYES;
- }
- else {
- DIE(aTHX_ "Not a HASH reference");
- }
- RETPUSHNO;
-}
-
-PP(pp_hslice)
-{
- dSP; dMARK; dORIGMARK;
- register HV *hv = (HV*)POPs;
- register I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
- I32 realhv = (SvTYPE(hv) == SVt_PVHV);
-
- if (!realhv && PL_op->op_private & OPpLVAL_INTRO)
- DIE(aTHX_ "Can't localize pseudo-hash element");
-
- if (realhv || SvTYPE(hv) == SVt_PVAV) {
- while (++MARK <= SP) {
- SV *keysv = *MARK;
- SV **svp;
- if (realhv) {
- HE *he = hv_fetch_ent(hv, keysv, lval, 0);
- svp = he ? &HeVAL(he) : 0;
- }
- else {
- svp = avhv_fetch_ent((AV*)hv, keysv, lval, 0);
- }
- if (lval) {
- if (!svp || *svp == &PL_sv_undef) {
- STRLEN n_a;
- DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
- }
- if (PL_op->op_private & OPpLVAL_INTRO)
- save_helem(hv, keysv, svp);
- }
- *MARK = svp ? *svp : &PL_sv_undef;
- }
- }
- if (GIMME != G_ARRAY) {
- MARK = ORIGMARK;
- *++MARK = *SP;
- SP = MARK;
- }
- RETURN;
-}
-
-/* List operators. */
-
-PP(pp_list)
-{
- dSP; dMARK;
- if (GIMME != G_ARRAY) {
- if (++MARK <= SP)
- *MARK = *SP; /* unwanted list, return last item */
- else
- *MARK = &PL_sv_undef;
- SP = MARK;
- }
- RETURN;
-}
-
-PP(pp_lslice)
-{
- dSP;
- SV **lastrelem = PL_stack_sp;
- SV **lastlelem = PL_stack_base + POPMARK;
- SV **firstlelem = PL_stack_base + POPMARK + 1;
- register SV **firstrelem = lastlelem + 1;
- I32 arybase = PL_curcop->cop_arybase;
- I32 lval = PL_op->op_flags & OPf_MOD;
- I32 is_something_there = lval;
-
- register I32 max = lastrelem - lastlelem;
- register SV **lelem;
- register I32 ix;
-
- if (GIMME != G_ARRAY) {
- ix = SvIVx(*lastlelem);
- if (ix < 0)
- ix += max;
- else
- ix -= arybase;
- if (ix < 0 || ix >= max)
- *firstlelem = &PL_sv_undef;
- else
- *firstlelem = firstrelem[ix];
- SP = firstlelem;
- RETURN;
- }
-
- if (max == 0) {
- SP = firstlelem - 1;
- RETURN;
- }
-
- for (lelem = firstlelem; lelem <= lastlelem; lelem++) {
- ix = SvIVx(*lelem);
- if (ix < 0)
- ix += max;
- else
- ix -= arybase;
- if (ix < 0 || ix >= max)
- *lelem = &PL_sv_undef;
- else {
- is_something_there = TRUE;
- if (!(*lelem = firstrelem[ix]))
- *lelem = &PL_sv_undef;
- }
- }
- if (is_something_there)
- SP = lastlelem;
- else
- SP = firstlelem - 1;
- RETURN;
-}
-
-PP(pp_anonlist)
-{
- dSP; dMARK; dORIGMARK;
- I32 items = SP - MARK;
- SV *av = sv_2mortal((SV*)av_make(items, MARK+1));
- SP = ORIGMARK; /* av_make() might realloc stack_sp */
- XPUSHs(av);
- RETURN;
-}
-
-PP(pp_anonhash)
-{
- dSP; dMARK; dORIGMARK;
- HV* hv = (HV*)sv_2mortal((SV*)newHV());
-
- while (MARK < SP) {
- SV* key = *++MARK;
- SV *val = NEWSV(46, 0);
- if (MARK < SP)
- sv_setsv(val, *++MARK);
- else if (ckWARN(WARN_MISC))
- Perl_warner(aTHX_ WARN_MISC, "Odd number of elements in hash assignment");
- (void)hv_store_ent(hv,key,val,0);
- }
- SP = ORIGMARK;
- XPUSHs((SV*)hv);
- RETURN;
-}
-
-PP(pp_splice)
-{
- dSP; dMARK; dORIGMARK;
- register AV *ary = (AV*)*++MARK;
- register SV **src;
- register SV **dst;
- register I32 i;
- register I32 offset;
- register I32 length;
- I32 newlen;
- I32 after;
- I32 diff;
- SV **tmparyval = 0;
- MAGIC *mg;
-
- if ((mg = SvTIED_mg((SV*)ary, 'P'))) {
- *MARK-- = SvTIED_obj((SV*)ary, mg);
- PUSHMARK(MARK);
- PUTBACK;
- ENTER;
- call_method("SPLICE",GIMME_V);
- LEAVE;
- SPAGAIN;
- RETURN;
- }
-
- SP++;
-
- if (++MARK < SP) {
- offset = i = SvIVx(*MARK);
- if (offset < 0)
- offset += AvFILLp(ary) + 1;
- else
- offset -= PL_curcop->cop_arybase;
- if (offset < 0)
- DIE(aTHX_ PL_no_aelem, i);
- if (++MARK < SP) {
- length = SvIVx(*MARK++);
- if (length < 0) {
- length += AvFILLp(ary) - offset + 1;
- if (length < 0)
- length = 0;
- }
- }
- else
- length = AvMAX(ary) + 1; /* close enough to infinity */
- }
- else {
- offset = 0;
- length = AvMAX(ary) + 1;
- }
- if (offset > AvFILLp(ary) + 1)
- offset = AvFILLp(ary) + 1;
- after = AvFILLp(ary) + 1 - (offset + length);
- if (after < 0) { /* not that much array */
- length += after; /* offset+length now in array */
- after = 0;
- if (!AvALLOC(ary))
- av_extend(ary, 0);
- }
-
- /* At this point, MARK .. SP-1 is our new LIST */
-
- newlen = SP - MARK;
- diff = newlen - length;
- if (newlen && !AvREAL(ary) && AvREIFY(ary))
- av_reify(ary);
-
- if (diff < 0) { /* shrinking the area */
- if (newlen) {
- New(451, tmparyval, newlen, SV*); /* so remember insertion */
- Copy(MARK, tmparyval, newlen, SV*);
- }
-
- MARK = ORIGMARK + 1;
- if (GIMME == G_ARRAY) { /* copy return vals to stack */
- MEXTEND(MARK, length);
- Copy(AvARRAY(ary)+offset, MARK, length, SV*);
- if (AvREAL(ary)) {
- EXTEND_MORTAL(length);
- for (i = length, dst = MARK; i; i--) {
- sv_2mortal(*dst); /* free them eventualy */
- dst++;
- }
- }
- MARK += length - 1;
- }
- else {
- *MARK = AvARRAY(ary)[offset+length-1];
- if (AvREAL(ary)) {
- sv_2mortal(*MARK);
- for (i = length - 1, dst = &AvARRAY(ary)[offset]; i > 0; i--)
- SvREFCNT_dec(*dst++); /* free them now */
- }
- }
- AvFILLp(ary) += diff;
-
- /* pull up or down? */
-
- if (offset < after) { /* easier to pull up */
- if (offset) { /* esp. if nothing to pull */
- src = &AvARRAY(ary)[offset-1];
- dst = src - diff; /* diff is negative */
- for (i = offset; i > 0; i--) /* can't trust Copy */
- *dst-- = *src--;
- }
- dst = AvARRAY(ary);
- SvPVX(ary) = (char*)(AvARRAY(ary) - diff); /* diff is negative */
- AvMAX(ary) += diff;
- }
- else {
- if (after) { /* anything to pull down? */
- src = AvARRAY(ary) + offset + length;
- dst = src + diff; /* diff is negative */
- Move(src, dst, after, SV*);
- }
- dst = &AvARRAY(ary)[AvFILLp(ary)+1];
- /* avoid later double free */
- }
- i = -diff;
- while (i)
- dst[--i] = &PL_sv_undef;
-
- if (newlen) {
- for (src = tmparyval, dst = AvARRAY(ary) + offset;
- newlen; newlen--) {
- *dst = NEWSV(46, 0);
- sv_setsv(*dst++, *src++);
- }
- Safefree(tmparyval);
- }
- }
- else { /* no, expanding (or same) */
- if (length) {
- New(452, tmparyval, length, SV*); /* so remember deletion */
- Copy(AvARRAY(ary)+offset, tmparyval, length, SV*);
- }
-
- if (diff > 0) { /* expanding */
-
- /* push up or down? */
-
- if (offset < after && diff <= AvARRAY(ary) - AvALLOC(ary)) {
- if (offset) {
- src = AvARRAY(ary);
- dst = src - diff;
- Move(src, dst, offset, SV*);
- }
- SvPVX(ary) = (char*)(AvARRAY(ary) - diff);/* diff is positive */
- AvMAX(ary) += diff;
- AvFILLp(ary) += diff;
- }
- else {
- if (AvFILLp(ary) + diff >= AvMAX(ary)) /* oh, well */
- av_extend(ary, AvFILLp(ary) + diff);
- AvFILLp(ary) += diff;
-
- if (after) {
- dst = AvARRAY(ary) + AvFILLp(ary);
- src = dst - diff;
- for (i = after; i; i--) {
- *dst-- = *src--;
- }
- }
- }
- }
-
- for (src = MARK, dst = AvARRAY(ary) + offset; newlen; newlen--) {
- *dst = NEWSV(46, 0);
- sv_setsv(*dst++, *src++);
- }
- MARK = ORIGMARK + 1;
- if (GIMME == G_ARRAY) { /* copy return vals to stack */
- if (length) {
- Copy(tmparyval, MARK, length, SV*);
- if (AvREAL(ary)) {
- EXTEND_MORTAL(length);
- for (i = length, dst = MARK; i; i--) {
- sv_2mortal(*dst); /* free them eventualy */
- dst++;
- }
- }
- Safefree(tmparyval);
- }
- MARK += length - 1;
- }
- else if (length--) {
- *MARK = tmparyval[length];
- if (AvREAL(ary)) {
- sv_2mortal(*MARK);
- while (length-- > 0)
- SvREFCNT_dec(tmparyval[length]);
- }
- Safefree(tmparyval);
- }
- else
- *MARK = &PL_sv_undef;
- }
- SP = MARK;
- RETURN;
-}
-
-PP(pp_push)
-{
- dSP; dMARK; dORIGMARK; dTARGET;
- register AV *ary = (AV*)*++MARK;
- register SV *sv = &PL_sv_undef;
- MAGIC *mg;
-
- if ((mg = SvTIED_mg((SV*)ary, 'P'))) {
- *MARK-- = SvTIED_obj((SV*)ary, mg);
- PUSHMARK(MARK);
- PUTBACK;
- ENTER;
- call_method("PUSH",G_SCALAR|G_DISCARD);
- LEAVE;
- SPAGAIN;
- }
- else {
- /* Why no pre-extend of ary here ? */
- for (++MARK; MARK <= SP; MARK++) {
- sv = NEWSV(51, 0);
- if (*MARK)
- sv_setsv(sv, *MARK);
- av_push(ary, sv);
- }
- }
- SP = ORIGMARK;
- PUSHi( AvFILL(ary) + 1 );
- RETURN;
-}
-
-PP(pp_pop)
-{
- dSP;
- AV *av = (AV*)POPs;
- SV *sv = av_pop(av);
- if (AvREAL(av))
- (void)sv_2mortal(sv);
- PUSHs(sv);
- RETURN;
-}
-
-PP(pp_shift)
-{
- dSP;
- AV *av = (AV*)POPs;
- SV *sv = av_shift(av);
- EXTEND(SP, 1);
- if (!sv)
- RETPUSHUNDEF;
- if (AvREAL(av))
- (void)sv_2mortal(sv);
- PUSHs(sv);
- RETURN;
-}
-
-PP(pp_unshift)
-{
- dSP; dMARK; dORIGMARK; dTARGET;
- register AV *ary = (AV*)*++MARK;
- register SV *sv;
- register I32 i = 0;
- MAGIC *mg;
-
- if ((mg = SvTIED_mg((SV*)ary, 'P'))) {
- *MARK-- = SvTIED_obj((SV*)ary, mg);
- PUSHMARK(MARK);
- PUTBACK;
- ENTER;
- call_method("UNSHIFT",G_SCALAR|G_DISCARD);
- LEAVE;
- SPAGAIN;
- }
- else {
- av_unshift(ary, SP - MARK);
- while (MARK < SP) {
- sv = NEWSV(27, 0);
- sv_setsv(sv, *++MARK);
- (void)av_store(ary, i++, sv);
- }
- }
- SP = ORIGMARK;
- PUSHi( AvFILL(ary) + 1 );
- RETURN;
-}
-
-PP(pp_reverse)
-{
- dSP; dMARK;
- register SV *tmp;
- SV **oldsp = SP;
-
- if (GIMME == G_ARRAY) {
- MARK++;
- while (MARK < SP) {
- tmp = *MARK;
- *MARK++ = *SP;
- *SP-- = tmp;
- }
- /* safe as long as stack cannot get extended in the above */
- SP = oldsp;
- }
- else {
- register char *up;
- register char *down;
- register I32 tmp;
- dTARGET;
- STRLEN len;
-
- SvUTF8_off(TARG); /* decontaminate */
- if (SP - MARK > 1)
- do_join(TARG, &PL_sv_no, MARK, SP);
- else
- sv_setsv(TARG, (SP > MARK) ? *SP : DEFSV);
- up = SvPV_force(TARG, len);
- if (len > 1) {
- if (DO_UTF8(TARG)) { /* first reverse each character */
- U8* s = (U8*)SvPVX(TARG);
- U8* send = (U8*)(s + len);
- while (s < send) {
- if (UTF8_IS_ASCII(*s)) {
- s++;
- continue;
- }
- else {
- if (!utf8_to_uv_simple(s, 0))
- break;
- up = (char*)s;
- s += UTF8SKIP(s);
- down = (char*)(s - 1);
- /* reverse this character */
- while (down > up) {
- tmp = *up;
- *up++ = *down;
- *down-- = tmp;
- }
- }
- }
- up = SvPVX(TARG);
- }
- down = SvPVX(TARG) + len - 1;
- while (down > up) {
- tmp = *up;
- *up++ = *down;
- *down-- = tmp;
- }
- (void)SvPOK_only_UTF8(TARG);
- }
- SP = MARK + 1;
- SETTARG;
- }
- RETURN;
-}
-
-STATIC SV *
-S_mul128(pTHX_ SV *sv, U8 m)
-{
- STRLEN len;
- char *s = SvPV(sv, len);
- char *t;
- U32 i = 0;
-
- if (!strnEQ(s, "0000", 4)) { /* need to grow sv */
- SV *tmpNew = newSVpvn("0000000000", 10);
-
- sv_catsv(tmpNew, sv);
- SvREFCNT_dec(sv); /* free old sv */
- sv = tmpNew;
- s = SvPV(sv, len);
- }
- t = s + len - 1;
- while (!*t) /* trailing '\0'? */
- t--;
- while (t > s) {
- i = ((*t - '0') << 7) + m;
- *(t--) = '0' + (i % 10);
- m = i / 10;
- }
- return (sv);
-}
-
-/* Explosives and implosives. */
-
-#if 'I' == 73 && 'J' == 74
-/* On an ASCII/ISO kind of system */
-#define ISUUCHAR(ch) ((ch) >= ' ' && (ch) < 'a')
-#else
-/*
- Some other sort of character set - use memchr() so we don't match
- the null byte.
- */
-#define ISUUCHAR(ch) (memchr(PL_uuemap, (ch), sizeof(PL_uuemap)-1) || (ch) == ' ')
-#endif
-
-PP(pp_unpack)
-{
- dSP;
- dPOPPOPssrl;
- I32 start_sp_offset = SP - PL_stack_base;
- I32 gimme = GIMME_V;
- SV *sv;
- STRLEN llen;
- STRLEN rlen;
- register char *pat = SvPV(left, llen);
- register char *s = SvPV(right, rlen);
- char *strend = s + rlen;
- char *strbeg = s;
- register char *patend = pat + llen;
- I32 datumtype;
- register I32 len;
- register I32 bits;
- register char *str;
-
- /* These must not be in registers: */
- short ashort;
- int aint;
- long along;
-#ifdef HAS_QUAD
- Quad_t aquad;
-#endif
- U16 aushort;
- unsigned int auint;
- U32 aulong;
-#ifdef HAS_QUAD
- Uquad_t auquad;
-#endif
- char *aptr;
- float afloat;
- double adouble;
- I32 checksum = 0;
- register U32 culong;
- NV cdouble;
- int commas = 0;
- int star;
-#ifdef PERL_NATINT_PACK
- int natint; /* native integer */
- int unatint; /* unsigned native integer */
-#endif
-
- if (gimme != G_ARRAY) { /* arrange to do first one only */
- /*SUPPRESS 530*/
- for (patend = pat; !isALPHA(*patend) || *patend == 'x'; patend++) ;
- if (strchr("aAZbBhHP", *patend) || *pat == '%') {
- patend++;
- while (isDIGIT(*patend) || *patend == '*')
- patend++;
- }
- else
- patend++;
- }
- while (pat < patend) {
- reparse:
- datumtype = *pat++ & 0xFF;
-#ifdef PERL_NATINT_PACK
- natint = 0;
-#endif
- if (isSPACE(datumtype))
- continue;
- if (datumtype == '#') {
- while (pat < patend && *pat != '\n')
- pat++;
- continue;
- }
- if (*pat == '!') {
- char *natstr = "sSiIlL";
-
- if (strchr(natstr, datumtype)) {
-#ifdef PERL_NATINT_PACK
- natint = 1;
-#endif
- pat++;
- }
- else
- DIE(aTHX_ "'!' allowed only after types %s", natstr);
- }
- star = 0;
- if (pat >= patend)
- len = 1;
- else if (*pat == '*') {
- len = strend - strbeg; /* long enough */
- pat++;
- star = 1;
- }
- else if (isDIGIT(*pat)) {
- len = *pat++ - '0';
- while (isDIGIT(*pat)) {
- len = (len * 10) + (*pat++ - '0');
- if (len < 0)
- DIE(aTHX_ "Repeat count in unpack overflows");
- }
- }
- else
- len = (datumtype != '@');
- redo_switch:
- switch(datumtype) {
- default:
- DIE(aTHX_ "Invalid type in unpack: '%c'", (int)datumtype);
- case ',': /* grandfather in commas but with a warning */
- if (commas++ == 0 && ckWARN(WARN_UNPACK))
- Perl_warner(aTHX_ WARN_UNPACK,
- "Invalid type in unpack: '%c'", (int)datumtype);
- 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 - strbeg)
- DIE(aTHX_ "@ outside of string");
- s = strbeg + len;
- break;
- case 'X':
- if (len > s - strbeg)
- DIE(aTHX_ "X outside of string");
- s -= len;
- break;
- case 'x':
- if (len > strend - s)
- DIE(aTHX_ "x outside of string");
- s += len;
- break;
- case '/':
- if (start_sp_offset >= SP - PL_stack_base)
- DIE(aTHX_ "/ must follow a numeric type");
- datumtype = *pat++;
- if (*pat == '*')
- pat++; /* ignore '*' for compatibility with pack */
- if (isDIGIT(*pat))
- DIE(aTHX_ "/ cannot take a count" );
- len = POPi;
- star = 0;
- goto redo_switch;
- case 'A':
- case 'Z':
- case 'a':
- if (len > strend - s)
- len = strend - s;
- if (checksum)
- goto uchar_checksum;
- sv = NEWSV(35, len);
- sv_setpvn(sv, s, len);
- s += len;
- if (datumtype == 'A' || datumtype == 'Z') {
- aptr = s; /* borrow register */
- if (datumtype == 'Z') { /* 'Z' strips stuff after first null */
- s = SvPVX(sv);
- while (*s)
- s++;
- }
- else { /* 'A' strips both nulls and spaces */
- s = SvPVX(sv) + len - 1;
- while (s >= SvPVX(sv) && (!*s || isSPACE(*s)))
- s--;
- *++s = '\0';
- }
- SvCUR_set(sv, s - SvPVX(sv));
- s = aptr; /* unborrow register */
- }
- XPUSHs(sv_2mortal(sv));
- break;
- case 'B':
- case 'b':
- if (star || len > (strend - s) * 8)
- len = (strend - s) * 8;
- if (checksum) {
- if (!PL_bitcount) {
- Newz(601, PL_bitcount, 256, char);
- for (bits = 1; bits < 256; bits++) {
- if (bits & 1) PL_bitcount[bits]++;
- if (bits & 2) PL_bitcount[bits]++;
- if (bits & 4) PL_bitcount[bits]++;
- if (bits & 8) PL_bitcount[bits]++;
- if (bits & 16) PL_bitcount[bits]++;
- if (bits & 32) PL_bitcount[bits]++;
- if (bits & 64) PL_bitcount[bits]++;
- if (bits & 128) PL_bitcount[bits]++;
- }
- }
- while (len >= 8) {
- culong += PL_bitcount[*(unsigned char*)s++];
- len -= 8;
- }
- if (len) {
- bits = *s;
- if (datumtype == 'b') {
- while (len-- > 0) {
- if (bits & 1) culong++;
- bits >>= 1;
- }
- }
- else {
- while (len-- > 0) {
- if (bits & 128) culong++;
- bits <<= 1;
- }
- }
- }
- break;
- }
- sv = NEWSV(35, len + 1);
- SvCUR_set(sv, len);
- SvPOK_on(sv);
- str = SvPVX(sv);
- if (datumtype == 'b') {
- aint = len;
- for (len = 0; len < aint; len++) {
- if (len & 7) /*SUPPRESS 595*/
- bits >>= 1;
- else
- bits = *s++;
- *str++ = '0' + (bits & 1);
- }
- }
- else {
- aint = len;
- for (len = 0; len < aint; len++) {
- if (len & 7)
- bits <<= 1;
- else
- bits = *s++;
- *str++ = '0' + ((bits & 128) != 0);
- }
- }
- *str = '\0';
- XPUSHs(sv_2mortal(sv));
- break;
- case 'H':
- case 'h':
- if (star || len > (strend - s) * 2)
- len = (strend - s) * 2;
- sv = NEWSV(35, len + 1);
- SvCUR_set(sv, len);
- SvPOK_on(sv);
- str = SvPVX(sv);
- if (datumtype == 'h') {
- aint = len;
- for (len = 0; len < aint; len++) {
- if (len & 1)
- bits >>= 4;
- else
- bits = *s++;
- *str++ = PL_hexdigit[bits & 15];
- }
- }
- else {
- aint = len;
- for (len = 0; len < aint; len++) {
- if (len & 1)
- bits <<= 4;
- else
- bits = *s++;
- *str++ = PL_hexdigit[(bits >> 4) & 15];
- }
- }
- *str = '\0';
- XPUSHs(sv_2mortal(sv));
- 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 {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- aint = *s++;
- if (aint >= 128) /* fake up signed chars */
- aint -= 256;
- sv = NEWSV(36, 0);
- sv_setiv(sv, (IV)aint);
- PUSHs(sv_2mortal(sv));
- }
- }
- break;
- case 'C':
- if (len > strend - s)
- len = strend - s;
- if (checksum) {
- uchar_checksum:
- while (len-- > 0) {
- auint = *s++ & 255;
- culong += auint;
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- auint = *s++ & 255;
- sv = NEWSV(37, 0);
- sv_setiv(sv, (IV)auint);
- PUSHs(sv_2mortal(sv));
- }
- }
- break;
- case 'U':
- if (len > strend - s)
- len = strend - s;
- if (checksum) {
- while (len-- > 0 && s < strend) {
- STRLEN alen;
- auint = utf8_to_uv((U8*)s, strend - s, &alen, 0);
- along = alen;
- s += along;
- if (checksum > 32)
- cdouble += (NV)auint;
- else
- culong += auint;
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0 && s < strend) {
- STRLEN alen;
- auint = utf8_to_uv((U8*)s, strend - s, &alen, 0);
- along = alen;
- s += along;
- sv = NEWSV(37, 0);
- sv_setuv(sv, (UV)auint);
- PUSHs(sv_2mortal(sv));
- }
- }
- break;
- case 's':
-#if SHORTSIZE == SIZE16
- along = (strend - s) / SIZE16;
-#else
- along = (strend - s) / (natint ? sizeof(short) : SIZE16);
-#endif
- if (len > along)
- len = along;
- if (checksum) {
-#if SHORTSIZE != SIZE16
- if (natint) {
- short ashort;
- while (len-- > 0) {
- COPYNN(s, &ashort, sizeof(short));
- s += sizeof(short);
- culong += ashort;
-
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- COPY16(s, &ashort);
-#if SHORTSIZE > SIZE16
- if (ashort > 32767)
- ashort -= 65536;
-#endif
- s += SIZE16;
- culong += ashort;
- }
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
-#if SHORTSIZE != SIZE16
- if (natint) {
- short ashort;
- while (len-- > 0) {
- COPYNN(s, &ashort, sizeof(short));
- s += sizeof(short);
- sv = NEWSV(38, 0);
- sv_setiv(sv, (IV)ashort);
- PUSHs(sv_2mortal(sv));
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- COPY16(s, &ashort);
-#if SHORTSIZE > SIZE16
- if (ashort > 32767)
- ashort -= 65536;
-#endif
- s += SIZE16;
- sv = NEWSV(38, 0);
- sv_setiv(sv, (IV)ashort);
- PUSHs(sv_2mortal(sv));
- }
- }
- }
- break;
- case 'v':
- case 'n':
- case 'S':
-#if SHORTSIZE == SIZE16
- along = (strend - s) / SIZE16;
-#else
- unatint = natint && datumtype == 'S';
- along = (strend - s) / (unatint ? sizeof(unsigned short) : SIZE16);
-#endif
- if (len > along)
- len = along;
- if (checksum) {
-#if SHORTSIZE != SIZE16
- if (unatint) {
- unsigned short aushort;
- while (len-- > 0) {
- COPYNN(s, &aushort, sizeof(unsigned short));
- s += sizeof(unsigned short);
- culong += aushort;
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- COPY16(s, &aushort);
- s += SIZE16;
-#ifdef HAS_NTOHS
- if (datumtype == 'n')
- aushort = PerlSock_ntohs(aushort);
-#endif
-#ifdef HAS_VTOHS
- if (datumtype == 'v')
- aushort = vtohs(aushort);
-#endif
- culong += aushort;
- }
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
-#if SHORTSIZE != SIZE16
- if (unatint) {
- unsigned short aushort;
- while (len-- > 0) {
- COPYNN(s, &aushort, sizeof(unsigned short));
- s += sizeof(unsigned short);
- sv = NEWSV(39, 0);
- sv_setiv(sv, (UV)aushort);
- PUSHs(sv_2mortal(sv));
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- COPY16(s, &aushort);
- s += SIZE16;
- sv = NEWSV(39, 0);
-#ifdef HAS_NTOHS
- if (datumtype == 'n')
- aushort = PerlSock_ntohs(aushort);
-#endif
-#ifdef HAS_VTOHS
- if (datumtype == 'v')
- aushort = vtohs(aushort);
-#endif
- sv_setiv(sv, (UV)aushort);
- PUSHs(sv_2mortal(sv));
- }
- }
- }
- break;
- case 'i':
- along = (strend - s) / sizeof(int);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &aint, 1, int);
- s += sizeof(int);
- if (checksum > 32)
- cdouble += (NV)aint;
- else
- culong += aint;
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &aint, 1, int);
- s += sizeof(int);
- sv = NEWSV(40, 0);
-#ifdef __osf__
- /* Without the dummy below unpack("i", pack("i",-1))
- * return 0xFFffFFff instead of -1 for Digital Unix V4.0
- * cc with optimization turned on.
- *
- * The bug was detected in
- * DEC C V5.8-009 on Digital UNIX V4.0 (Rev. 1091) (V4.0E)
- * with optimization (-O4) turned on.
- * DEC C V5.2-040 on Digital UNIX V4.0 (Rev. 564) (V4.0B)
- * does not have this problem even with -O4.
- *
- * This bug was reported as DECC_BUGS 1431
- * and tracked internally as GEM_BUGS 7775.
- *
- * The bug is fixed in
- * Tru64 UNIX V5.0: Compaq C V6.1-006 or later
- * UNIX V4.0F support: DEC C V5.9-006 or later
- * UNIX V4.0E support: DEC C V5.8-011 or later
- * and also in DTK.
- *
- * See also few lines later for the same bug.
- */
- (aint) ?
- sv_setiv(sv, (IV)aint) :
-#endif
- sv_setiv(sv, (IV)aint);
- PUSHs(sv_2mortal(sv));
- }
- }
- break;
- case 'I':
- along = (strend - s) / sizeof(unsigned int);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &auint, 1, unsigned int);
- s += sizeof(unsigned int);
- if (checksum > 32)
- cdouble += (NV)auint;
- else
- culong += auint;
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &auint, 1, unsigned int);
- s += sizeof(unsigned int);
- sv = NEWSV(41, 0);
-#ifdef __osf__
- /* Without the dummy below unpack("I", pack("I",0xFFFFFFFF))
- * returns 1.84467440737096e+19 instead of 0xFFFFFFFF.
- * See details few lines earlier. */
- (auint) ?
- sv_setuv(sv, (UV)auint) :
-#endif
- sv_setuv(sv, (UV)auint);
- PUSHs(sv_2mortal(sv));
- }
- }
- break;
- case 'l':
-#if LONGSIZE == SIZE32
- along = (strend - s) / SIZE32;
-#else
- along = (strend - s) / (natint ? sizeof(long) : SIZE32);
-#endif
- if (len > along)
- len = along;
- if (checksum) {
-#if LONGSIZE != SIZE32
- if (natint) {
- while (len-- > 0) {
- COPYNN(s, &along, sizeof(long));
- s += sizeof(long);
- if (checksum > 32)
- cdouble += (NV)along;
- else
- culong += along;
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
-#if LONGSIZE > SIZE32 && INTSIZE == SIZE32
- I32 along;
-#endif
- COPY32(s, &along);
-#if LONGSIZE > SIZE32
- if (along > 2147483647)
- along -= 4294967296;
-#endif
- s += SIZE32;
- if (checksum > 32)
- cdouble += (NV)along;
- else
- culong += along;
- }
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
-#if LONGSIZE != SIZE32
- if (natint) {
- while (len-- > 0) {
- COPYNN(s, &along, sizeof(long));
- s += sizeof(long);
- sv = NEWSV(42, 0);
- sv_setiv(sv, (IV)along);
- PUSHs(sv_2mortal(sv));
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
-#if LONGSIZE > SIZE32 && INTSIZE == SIZE32
- I32 along;
-#endif
- COPY32(s, &along);
-#if LONGSIZE > SIZE32
- if (along > 2147483647)
- along -= 4294967296;
-#endif
- s += SIZE32;
- sv = NEWSV(42, 0);
- sv_setiv(sv, (IV)along);
- PUSHs(sv_2mortal(sv));
- }
- }
- }
- break;
- case 'V':
- case 'N':
- case 'L':
-#if LONGSIZE == SIZE32
- along = (strend - s) / SIZE32;
-#else
- unatint = natint && datumtype == 'L';
- along = (strend - s) / (unatint ? sizeof(unsigned long) : SIZE32);
-#endif
- if (len > along)
- len = along;
- if (checksum) {
-#if LONGSIZE != SIZE32
- if (unatint) {
- unsigned long aulong;
- while (len-- > 0) {
- COPYNN(s, &aulong, sizeof(unsigned long));
- s += sizeof(unsigned long);
- if (checksum > 32)
- cdouble += (NV)aulong;
- else
- culong += aulong;
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- COPY32(s, &aulong);
- s += SIZE32;
-#ifdef HAS_NTOHL
- if (datumtype == 'N')
- aulong = PerlSock_ntohl(aulong);
-#endif
-#ifdef HAS_VTOHL
- if (datumtype == 'V')
- aulong = vtohl(aulong);
-#endif
- if (checksum > 32)
- cdouble += (NV)aulong;
- else
- culong += aulong;
- }
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
-#if LONGSIZE != SIZE32
- if (unatint) {
- unsigned long aulong;
- while (len-- > 0) {
- COPYNN(s, &aulong, sizeof(unsigned long));
- s += sizeof(unsigned long);
- sv = NEWSV(43, 0);
- sv_setuv(sv, (UV)aulong);
- PUSHs(sv_2mortal(sv));
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- COPY32(s, &aulong);
- s += SIZE32;
-#ifdef HAS_NTOHL
- if (datumtype == 'N')
- aulong = PerlSock_ntohl(aulong);
-#endif
-#ifdef HAS_VTOHL
- if (datumtype == 'V')
- aulong = vtohl(aulong);
-#endif
- sv = NEWSV(43, 0);
- sv_setuv(sv, (UV)aulong);
- PUSHs(sv_2mortal(sv));
- }
- }
- }
- break;
- case 'p':
- along = (strend - s) / sizeof(char*);
- if (len > along)
- len = along;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- if (sizeof(char*) > strend - s)
- break;
- else {
- Copy(s, &aptr, 1, char*);
- s += sizeof(char*);
- }
- sv = NEWSV(44, 0);
- if (aptr)
- sv_setpv(sv, aptr);
- PUSHs(sv_2mortal(sv));
- }
- break;
- case 'w':
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- {
- UV auv = 0;
- U32 bytes = 0;
-
- while ((len > 0) && (s < strend)) {
- auv = (auv << 7) | (*s & 0x7f);
- if (UTF8_IS_ASCII(*s++)) {
- bytes = 0;
- sv = NEWSV(40, 0);
- sv_setuv(sv, auv);
- PUSHs(sv_2mortal(sv));
- len--;
- auv = 0;
- }
- else if (++bytes >= sizeof(UV)) { /* promote to string */
- char *t;
- STRLEN n_a;
-
- sv = Perl_newSVpvf(aTHX_ "%.*"UVf, (int)TYPE_DIGITS(UV), auv);
- while (s < strend) {
- sv = mul128(sv, *s & 0x7f);
- if (!(*s++ & 0x80)) {
- bytes = 0;
- break;
- }
- }
- t = SvPV(sv, n_a);
- while (*t == '0')
- t++;
- sv_chop(sv, t);
- PUSHs(sv_2mortal(sv));
- len--;
- auv = 0;
- }
- }
- if ((s >= strend) && bytes)
- DIE(aTHX_ "Unterminated compressed integer");
- }
- break;
- case 'P':
- EXTEND(SP, 1);
- if (sizeof(char*) > strend - s)
- break;
- else {
- Copy(s, &aptr, 1, char*);
- s += sizeof(char*);
- }
- sv = NEWSV(44, 0);
- if (aptr)
- sv_setpvn(sv, aptr, len);
- PUSHs(sv_2mortal(sv));
- break;
-#ifdef HAS_QUAD
- case 'q':
- along = (strend - s) / sizeof(Quad_t);
- if (len > along)
- len = along;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- if (s + sizeof(Quad_t) > strend)
- aquad = 0;
- else {
- Copy(s, &aquad, 1, Quad_t);
- s += sizeof(Quad_t);
- }
- sv = NEWSV(42, 0);
- if (aquad >= IV_MIN && aquad <= IV_MAX)
- sv_setiv(sv, (IV)aquad);
- else
- sv_setnv(sv, (NV)aquad);
- PUSHs(sv_2mortal(sv));
- }
- break;
- case 'Q':
- along = (strend - s) / sizeof(Quad_t);
- if (len > along)
- len = along;
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- if (s + sizeof(Uquad_t) > strend)
- auquad = 0;
- else {
- Copy(s, &auquad, 1, Uquad_t);
- s += sizeof(Uquad_t);
- }
- sv = NEWSV(43, 0);
- if (auquad <= UV_MAX)
- sv_setuv(sv, (UV)auquad);
- else
- sv_setnv(sv, (NV)auquad);
- PUSHs(sv_2mortal(sv));
- }
- break;
-#endif
- /* 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) {
- Copy(s, &afloat, 1, float);
- s += sizeof(float);
- cdouble += afloat;
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &afloat, 1, float);
- s += sizeof(float);
- sv = NEWSV(47, 0);
- sv_setnv(sv, (NV)afloat);
- PUSHs(sv_2mortal(sv));
- }
- }
- break;
- case 'd':
- case 'D':
- along = (strend - s) / sizeof(double);
- if (len > along)
- len = along;
- if (checksum) {
- while (len-- > 0) {
- Copy(s, &adouble, 1, double);
- s += sizeof(double);
- cdouble += adouble;
- }
- }
- else {
- EXTEND(SP, len);
- EXTEND_MORTAL(len);
- while (len-- > 0) {
- Copy(s, &adouble, 1, double);
- s += sizeof(double);
- sv = NEWSV(48, 0);
- sv_setnv(sv, (NV)adouble);
- PUSHs(sv_2mortal(sv));
- }
- }
- break;
- case 'u':
- /* MKS:
- * Initialise the decode mapping. By using a table driven
- * algorithm, the code will be character-set independent
- * (and just as fast as doing character arithmetic)
- */
- if (PL_uudmap['M'] == 0) {
- int i;
-
- for (i = 0; i < sizeof(PL_uuemap); i += 1)
- PL_uudmap[(U8)PL_uuemap[i]] = i;
- /*
- * Because ' ' and '`' map to the same value,
- * we need to decode them both the same.
- */
- PL_uudmap[' '] = 0;
- }
-
- along = (strend - s) * 3 / 4;
- sv = NEWSV(42, along);
- if (along)
- SvPOK_on(sv);
- while (s < strend && *s > ' ' && ISUUCHAR(*s)) {
- I32 a, b, c, d;
- char hunk[4];
-
- hunk[3] = '\0';
- len = PL_uudmap[*(U8*)s++] & 077;
- while (len > 0) {
- if (s < strend && ISUUCHAR(*s))
- a = PL_uudmap[*(U8*)s++] & 077;
- else
- a = 0;
- if (s < strend && ISUUCHAR(*s))
- b = PL_uudmap[*(U8*)s++] & 077;
- else
- b = 0;
- if (s < strend && ISUUCHAR(*s))
- c = PL_uudmap[*(U8*)s++] & 077;
- else
- c = 0;
- if (s < strend && ISUUCHAR(*s))
- d = PL_uudmap[*(U8*)s++] & 077;
- else
- d = 0;
- hunk[0] = (a << 2) | (b >> 4);
- hunk[1] = (b << 4) | (c >> 2);
- hunk[2] = (c << 6) | d;
- sv_catpvn(sv, hunk, (len > 3) ? 3 : len);
- len -= 3;
- }
- if (*s == '\n')
- s++;
- else if (s[1] == '\n') /* possible checksum byte */
- s += 2;
- }
- XPUSHs(sv_2mortal(sv));
- break;
- }
- if (checksum) {
- sv = NEWSV(42, 0);
- if (strchr("fFdD", datumtype) ||
- (checksum > 32 && strchr("iIlLNU", datumtype)) ) {
- NV 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 = Perl_modf(cdouble / adouble, &trouble) * adouble;
- sv_setnv(sv, cdouble);
- }
- else {
- if (checksum < 32) {
- aulong = (1 << checksum) - 1;
- culong &= aulong;
- }
- sv_setuv(sv, (UV)culong);
- }
- XPUSHs(sv_2mortal(sv));
- checksum = 0;
- }
- }
- if (SP - PL_stack_base == start_sp_offset && gimme == G_SCALAR)
- PUSHs(&PL_sv_undef);
- RETURN;
-}
-
-STATIC void
-S_doencodes(pTHX_ register SV *sv, register char *s, register I32 len)
-{
- char hunk[5];
-
- *hunk = PL_uuemap[len];
- sv_catpvn(sv, hunk, 1);
- hunk[4] = '\0';
- while (len > 2) {
- hunk[0] = PL_uuemap[(077 & (*s >> 2))];
- hunk[1] = PL_uuemap[(077 & (((*s << 4) & 060) | ((s[1] >> 4) & 017)))];
- hunk[2] = PL_uuemap[(077 & (((s[1] << 2) & 074) | ((s[2] >> 6) & 03)))];
- hunk[3] = PL_uuemap[(077 & (s[2] & 077))];
- sv_catpvn(sv, hunk, 4);
- s += 3;
- len -= 3;
- }
- if (len > 0) {
- char r = (len > 1 ? s[1] : '\0');
- hunk[0] = PL_uuemap[(077 & (*s >> 2))];
- hunk[1] = PL_uuemap[(077 & (((*s << 4) & 060) | ((r >> 4) & 017)))];
- hunk[2] = PL_uuemap[(077 & ((r << 2) & 074))];
- hunk[3] = PL_uuemap[0];
- sv_catpvn(sv, hunk, 4);
- }
- sv_catpvn(sv, "\n", 1);
-}
-
-STATIC SV *
-S_is_an_int(pTHX_ char *s, STRLEN l)
-{
- STRLEN n_a;
- SV *result = newSVpvn(s, l);
- char *result_c = SvPV(result, n_a); /* convenience */
- char *out = result_c;
- bool skip = 1;
- bool ignore = 0;
-
- while (*s) {
- switch (*s) {
- case ' ':
- break;
- case '+':
- if (!skip) {
- SvREFCNT_dec(result);
- return (NULL);
- }
- break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- skip = 0;
- if (!ignore) {
- *(out++) = *s;
- }
- break;
- case '.':
- ignore = 1;
- break;
- default:
- SvREFCNT_dec(result);
- return (NULL);
- }
- s++;
- }
- *(out++) = '\0';
- SvCUR_set(result, out - result_c);
- return (result);
-}
-
-/* pnum must be '\0' terminated */
-STATIC int
-S_div128(pTHX_ SV *pnum, bool *done)
-{
- STRLEN len;
- char *s = SvPV(pnum, len);
- int m = 0;
- int r = 0;
- char *t = s;
-
- *done = 1;
- while (*t) {
- int i;
-
- i = m * 10 + (*t - '0');
- m = i & 0x7F;
- r = (i >> 7); /* r < 10 */
- if (r) {
- *done = 0;
- }
- *(t++) = '0' + r;
- }
- *(t++) = '\0';
- SvCUR_set(pnum, (STRLEN) (t - s));
- return (m);
-}
-
-
-PP(pp_pack)
-{
- dSP; dMARK; dORIGMARK; dTARGET;
- register SV *cat = TARG;
- register I32 items;
- STRLEN fromlen;
- register char *pat = SvPVx(*++MARK, fromlen);
- char *patcopy;
- register char *patend = pat + fromlen;
- register I32 len;
- I32 datumtype;
- SV *fromstr;
- /*SUPPRESS 442*/
- static char null10[] = {0,0,0,0,0,0,0,0,0,0};
- static char *space10 = " ";
-
- /* These must not be in registers: */
- char achar;
- I16 ashort;
- int aint;
- unsigned int auint;
- I32 along;
- U32 aulong;
-#ifdef HAS_QUAD
- Quad_t aquad;
- Uquad_t auquad;
-#endif
- char *aptr;
- float afloat;
- double adouble;
- int commas = 0;
-#ifdef PERL_NATINT_PACK
- int natint; /* native integer */
-#endif
-
- items = SP - MARK;
- MARK++;
- sv_setpvn(cat, "", 0);
- patcopy = pat;
- while (pat < patend) {
- SV *lengthcode = Nullsv;
-#define NEXTFROM ( lengthcode ? lengthcode : items-- > 0 ? *MARK++ : &PL_sv_no)
- datumtype = *pat++ & 0xFF;
-#ifdef PERL_NATINT_PACK
- natint = 0;
-#endif
- if (isSPACE(datumtype)) {
- patcopy++;
- continue;
- }
- if (datumtype == 'U' && pat == patcopy+1)
- SvUTF8_on(cat);
- if (datumtype == '#') {
- while (pat < patend && *pat != '\n')
- pat++;
- continue;
- }
- if (*pat == '!') {
- char *natstr = "sSiIlL";
-
- if (strchr(natstr, datumtype)) {
-#ifdef PERL_NATINT_PACK
- natint = 1;
-#endif
- pat++;
- }
- else
- DIE(aTHX_ "'!' allowed only after types %s", natstr);
- }
- if (*pat == '*') {
- len = strchr("@Xxu", datumtype) ? 0 : items;
- pat++;
- }
- else if (isDIGIT(*pat)) {
- len = *pat++ - '0';
- while (isDIGIT(*pat)) {
- len = (len * 10) + (*pat++ - '0');
- if (len < 0)
- DIE(aTHX_ "Repeat count in pack overflows");
- }
- }
- else
- len = 1;
- if (*pat == '/') {
- ++pat;
- if ((*pat != 'a' && *pat != 'A' && *pat != 'Z') || pat[1] != '*')
- DIE(aTHX_ "/ must be followed by a*, A* or Z*");
- lengthcode = sv_2mortal(newSViv(sv_len(items > 0
- ? *MARK : &PL_sv_no)
- + (*pat == 'Z' ? 1 : 0)));
- }
- switch(datumtype) {
- default:
- DIE(aTHX_ "Invalid type in pack: '%c'", (int)datumtype);
- case ',': /* grandfather in commas but with a warning */
- if (commas++ == 0 && ckWARN(WARN_PACK))
- Perl_warner(aTHX_ WARN_PACK,
- "Invalid type in pack: '%c'", (int)datumtype);
- break;
- case '%':
- DIE(aTHX_ "%% may only be used in unpack");
- case '@':
- len -= SvCUR(cat);
- if (len > 0)
- goto grow;
- len = -len;
- if (len > 0)
- goto shrink;
- break;
- case 'X':
- shrink:
- if (SvCUR(cat) < len)
- DIE(aTHX_ "X outside of string");
- SvCUR(cat) -= len;
- *SvEND(cat) = '\0';
- break;
- case 'x':
- grow:
- while (len >= 10) {
- sv_catpvn(cat, null10, 10);
- len -= 10;
- }
- sv_catpvn(cat, null10, len);
- break;
- case 'A':
- case 'Z':
- case 'a':
- fromstr = NEXTFROM;
- aptr = SvPV(fromstr, fromlen);
- if (pat[-1] == '*') {
- len = fromlen;
- if (datumtype == 'Z')
- ++len;
- }
- if (fromlen >= len) {
- sv_catpvn(cat, aptr, len);
- if (datumtype == 'Z')
- *(SvEND(cat)-1) = '\0';
- }
- else {
- sv_catpvn(cat, aptr, fromlen);
- len -= fromlen;
- if (datumtype == 'A') {
- while (len >= 10) {
- sv_catpvn(cat, space10, 10);
- len -= 10;
- }
- sv_catpvn(cat, space10, len);
- }
- else {
- while (len >= 10) {
- sv_catpvn(cat, null10, 10);
- len -= 10;
- }
- sv_catpvn(cat, null10, len);
- }
- }
- break;
- case 'B':
- case 'b':
- {
- register char *str;
- I32 saveitems;
-
- fromstr = NEXTFROM;
- saveitems = items;
- str = SvPV(fromstr, fromlen);
- if (pat[-1] == '*')
- len = fromlen;
- aint = SvCUR(cat);
- SvCUR(cat) += (len+7)/8;
- SvGROW(cat, SvCUR(cat) + 1);
- aptr = SvPVX(cat) + aint;
- if (len > fromlen)
- len = fromlen;
- aint = len;
- items = 0;
- if (datumtype == 'B') {
- for (len = 0; len++ < aint;) {
- items |= *str++ & 1;
- if (len & 7)
- items <<= 1;
- else {
- *aptr++ = items & 0xff;
- items = 0;
- }
- }
- }
- else {
- for (len = 0; len++ < aint;) {
- if (*str++ & 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;
- }
- str = SvPVX(cat) + SvCUR(cat);
- while (aptr <= str)
- *aptr++ = '\0';
-
- items = saveitems;
- }
- break;
- case 'H':
- case 'h':
- {
- register char *str;
- I32 saveitems;
-
- fromstr = NEXTFROM;
- saveitems = items;
- str = SvPV(fromstr, fromlen);
- if (pat[-1] == '*')
- len = fromlen;
- aint = SvCUR(cat);
- SvCUR(cat) += (len+1)/2;
- SvGROW(cat, SvCUR(cat) + 1);
- aptr = SvPVX(cat) + aint;
- if (len > fromlen)
- len = fromlen;
- aint = len;
- items = 0;
- if (datumtype == 'H') {
- for (len = 0; len++ < aint;) {
- if (isALPHA(*str))
- items |= ((*str++ & 15) + 9) & 15;
- else
- items |= *str++ & 15;
- if (len & 1)
- items <<= 4;
- else {
- *aptr++ = items & 0xff;
- items = 0;
- }
- }
- }
- else {
- for (len = 0; len++ < aint;) {
- if (isALPHA(*str))
- items |= (((*str++ & 15) + 9) & 15) << 4;
- else
- items |= (*str++ & 15) << 4;
- if (len & 1)
- items >>= 4;
- else {
- *aptr++ = items & 0xff;
- items = 0;
- }
- }
- }
- if (aint & 1)
- *aptr++ = items & 0xff;
- str = SvPVX(cat) + SvCUR(cat);
- while (aptr <= str)
- *aptr++ = '\0';
-
- items = saveitems;
- }
- break;
- case 'C':
- case 'c':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aint = SvIV(fromstr);
- achar = aint;
- sv_catpvn(cat, &achar, sizeof(char));
- }
- break;
- case 'U':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- auint = SvUV(fromstr);
- SvGROW(cat, SvCUR(cat) + UTF8_MAXLEN + 1);
- SvCUR_set(cat, (char*)uv_to_utf8((U8*)SvEND(cat),auint)
- - SvPVX(cat));
- }
- *SvEND(cat) = '\0';
- 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)SvNV(fromstr);
- sv_catpvn(cat, (char *)&afloat, sizeof (float));
- }
- break;
- case 'd':
- case 'D':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- adouble = (double)SvNV(fromstr);
- sv_catpvn(cat, (char *)&adouble, sizeof (double));
- }
- break;
- case 'n':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- ashort = (I16)SvIV(fromstr);
-#ifdef HAS_HTONS
- ashort = PerlSock_htons(ashort);
-#endif
- CAT16(cat, &ashort);
- }
- break;
- case 'v':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- ashort = (I16)SvIV(fromstr);
-#ifdef HAS_HTOVS
- ashort = htovs(ashort);
-#endif
- CAT16(cat, &ashort);
- }
- break;
- case 'S':
-#if SHORTSIZE != SIZE16
- if (natint) {
- unsigned short aushort;
-
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aushort = SvUV(fromstr);
- sv_catpvn(cat, (char *)&aushort, sizeof(unsigned short));
- }
- }
- else
-#endif
- {
- U16 aushort;
-
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aushort = (U16)SvUV(fromstr);
- CAT16(cat, &aushort);
- }
-
- }
- break;
- case 's':
-#if SHORTSIZE != SIZE16
- if (natint) {
- short ashort;
-
- while (len-- > 0) {
- fromstr = NEXTFROM;
- ashort = SvIV(fromstr);
- sv_catpvn(cat, (char *)&ashort, sizeof(short));
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- fromstr = NEXTFROM;
- ashort = (I16)SvIV(fromstr);
- CAT16(cat, &ashort);
- }
- }
- break;
- case 'I':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- auint = SvUV(fromstr);
- sv_catpvn(cat, (char*)&auint, sizeof(unsigned int));
- }
- break;
- case 'w':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- adouble = Perl_floor(SvNV(fromstr));
-
- if (adouble < 0)
- DIE(aTHX_ "Cannot compress negative numbers");
-
- if (
-#if UVSIZE > 4 && UVSIZE >= NVSIZE
- adouble <= 0xffffffff
-#else
-# ifdef CXUX_BROKEN_CONSTANT_CONVERT
- adouble <= UV_MAX_cxux
-# else
- adouble <= UV_MAX
-# endif
-#endif
- )
- {
- char buf[1 + sizeof(UV)];
- char *in = buf + sizeof(buf);
- UV auv = U_V(adouble);
-
- do {
- *--in = (auv & 0x7f) | 0x80;
- auv >>= 7;
- } while (auv);
- buf[sizeof(buf) - 1] &= 0x7f; /* clear continue bit */
- sv_catpvn(cat, in, (buf + sizeof(buf)) - in);
- }
- else if (SvPOKp(fromstr)) { /* decimal string arithmetics */
- char *from, *result, *in;
- SV *norm;
- STRLEN len;
- bool done;
-
- /* Copy string and check for compliance */
- from = SvPV(fromstr, len);
- if ((norm = is_an_int(from, len)) == NULL)
- DIE(aTHX_ "can compress only unsigned integer");
-
- New('w', result, len, char);
- in = result + len;
- done = FALSE;
- while (!done)
- *--in = div128(norm, &done) | 0x80;
- result[len - 1] &= 0x7F; /* clear continue bit */
- sv_catpvn(cat, in, (result + len) - in);
- Safefree(result);
- SvREFCNT_dec(norm); /* free norm */
- }
- else if (SvNOKp(fromstr)) {
- char buf[sizeof(double) * 2]; /* 8/7 <= 2 */
- char *in = buf + sizeof(buf);
-
- do {
- double next = floor(adouble / 128);
- *--in = (unsigned char)(adouble - (next * 128)) | 0x80;
- if (in <= buf) /* this cannot happen ;-) */
- DIE(aTHX_ "Cannot compress integer");
- in--;
- adouble = next;
- } while (adouble > 0);
- buf[sizeof(buf) - 1] &= 0x7f; /* clear continue bit */
- sv_catpvn(cat, in, (buf + sizeof(buf)) - in);
- }
- else
- DIE(aTHX_ "Cannot compress non integer");
- }
- break;
- case 'i':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aint = SvIV(fromstr);
- sv_catpvn(cat, (char*)&aint, sizeof(int));
- }
- break;
- case 'N':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aulong = SvUV(fromstr);
-#ifdef HAS_HTONL
- aulong = PerlSock_htonl(aulong);
-#endif
- CAT32(cat, &aulong);
- }
- break;
- case 'V':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aulong = SvUV(fromstr);
-#ifdef HAS_HTOVL
- aulong = htovl(aulong);
-#endif
- CAT32(cat, &aulong);
- }
- break;
- case 'L':
-#if LONGSIZE != SIZE32
- if (natint) {
- unsigned long aulong;
-
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aulong = SvUV(fromstr);
- sv_catpvn(cat, (char *)&aulong, sizeof(unsigned long));
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aulong = SvUV(fromstr);
- CAT32(cat, &aulong);
- }
- }
- break;
- case 'l':
-#if LONGSIZE != SIZE32
- if (natint) {
- long along;
-
- while (len-- > 0) {
- fromstr = NEXTFROM;
- along = SvIV(fromstr);
- sv_catpvn(cat, (char *)&along, sizeof(long));
- }
- }
- else
-#endif
- {
- while (len-- > 0) {
- fromstr = NEXTFROM;
- along = SvIV(fromstr);
- CAT32(cat, &along);
- }
- }
- break;
-#ifdef HAS_QUAD
- case 'Q':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- auquad = (Uquad_t)SvUV(fromstr);
- sv_catpvn(cat, (char*)&auquad, sizeof(Uquad_t));
- }
- break;
- case 'q':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- aquad = (Quad_t)SvIV(fromstr);
- sv_catpvn(cat, (char*)&aquad, sizeof(Quad_t));
- }
- break;
-#endif
- case 'P':
- len = 1; /* assume SV is correct length */
- /* FALL THROUGH */
- case 'p':
- while (len-- > 0) {
- fromstr = NEXTFROM;
- if (fromstr == &PL_sv_undef)
- aptr = NULL;
- else {
- STRLEN n_a;
- /* XXX better yet, could spirit away the string to
- * a safe spot and hang on to it until the result
- * of pack() (and all copies of the result) are
- * gone.
- */
- if (ckWARN(WARN_PACK) && (SvTEMP(fromstr)
- || (SvPADTMP(fromstr)
- && !SvREADONLY(fromstr))))
- {
- Perl_warner(aTHX_ WARN_PACK,
- "Attempt to pack pointer to temporary value");
- }
- if (SvPOK(fromstr) || SvNIOK(fromstr))
- aptr = SvPV(fromstr,n_a);
- else
- aptr = SvPV_force(fromstr,n_a);
- }
- sv_catpvn(cat, (char*)&aptr, sizeof(char*));
- }
- break;
- case 'u':
- fromstr = NEXTFROM;
- aptr = SvPV(fromstr, fromlen);
- SvGROW(cat, fromlen * 4 / 3);
- if (len <= 1)
- len = 45;
- else
- len = len / 3 * 3;
- while (fromlen > 0) {
- I32 todo;
-
- if (fromlen > len)
- todo = len;
- else
- todo = fromlen;
- doencodes(cat, aptr, todo);
- fromlen -= todo;
- aptr += todo;
- }
- break;
- }
- }
- SvSETMAGIC(cat);
- SP = ORIGMARK;
- PUSHs(cat);
- RETURN;
-}
-#undef NEXTFROM
-
-
-PP(pp_split)
-{
- dSP; dTARG;
- AV *ary;
- register IV limit = POPi; /* note, negative is forever */
- SV *sv = POPs;
- STRLEN len;
- register char *s = SvPV(sv, len);
- bool do_utf8 = DO_UTF8(sv);
- char *strend = s + len;
- register PMOP *pm;
- register REGEXP *rx;
- register SV *dstr;
- register char *m;
- I32 iters = 0;
- STRLEN slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : (strend - s);
- I32 maxiters = slen + 10;
- I32 i;
- char *orig;
- I32 origlimit = limit;
- I32 realarray = 0;
- I32 base;
- AV *oldstack = PL_curstack;
- I32 gimme = GIMME_V;
- I32 oldsave = PL_savestack_ix;
- I32 make_mortal = 1;
- MAGIC *mg = (MAGIC *) NULL;
-
-#ifdef DEBUGGING
- Copy(&LvTARGOFF(POPs), &pm, 1, PMOP*);
-#else
- pm = (PMOP*)POPs;
-#endif
- if (!pm || !s)
- DIE(aTHX_ "panic: pp_split");
- rx = pm->op_pmregexp;
-
- TAINT_IF((pm->op_pmflags & PMf_LOCALE) &&
- (pm->op_pmflags & (PMf_WHITE | PMf_SKIPWHITE)));
-
- if (pm->op_pmreplroot) {
-#ifdef USE_ITHREADS
- ary = GvAVn((GV*)PL_curpad[(PADOFFSET)pm->op_pmreplroot]);
-#else
- ary = GvAVn((GV*)pm->op_pmreplroot);
-#endif
- }
- else if (gimme != G_ARRAY)
-#ifdef USE_THREADS
- ary = (AV*)PL_curpad[0];
-#else
- ary = GvAVn(PL_defgv);
-#endif /* USE_THREADS */
- else
- ary = Nullav;
- if (ary && (gimme != G_ARRAY || (pm->op_pmflags & PMf_ONCE))) {
- realarray = 1;
- PUTBACK;
- av_extend(ary,0);
- av_clear(ary);
- SPAGAIN;
- if ((mg = SvTIED_mg((SV*)ary, 'P'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)ary, mg));
- }
- else {
- if (!AvREAL(ary)) {
- AvREAL_on(ary);
- AvREIFY_off(ary);
- for (i = AvFILLp(ary); i >= 0; i--)
- AvARRAY(ary)[i] = &PL_sv_undef; /* don't free mere refs */
- }
- /* temporarily switch stacks */
- SWITCHSTACK(PL_curstack, ary);
- make_mortal = 0;
- }
- }
- base = SP - PL_stack_base;
- orig = s;
- if (pm->op_pmflags & PMf_SKIPWHITE) {
- if (pm->op_pmflags & PMf_LOCALE) {
- while (isSPACE_LC(*s))
- s++;
- }
- else {
- while (isSPACE(*s))
- s++;
- }
- }
- if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
- SAVEINT(PL_multiline);
- PL_multiline = pm->op_pmflags & PMf_MULTILINE;
- }
-
- if (!limit)
- limit = maxiters + 2;
- if (pm->op_pmflags & PMf_WHITE) {
- while (--limit) {
- m = s;
- while (m < strend &&
- !((pm->op_pmflags & PMf_LOCALE)
- ? isSPACE_LC(*m) : isSPACE(*m)))
- ++m;
- if (m >= strend)
- break;
-
- dstr = NEWSV(30, m-s);
- sv_setpvn(dstr, s, m-s);
- if (make_mortal)
- sv_2mortal(dstr);
- if (do_utf8)
- (void)SvUTF8_on(dstr);
- XPUSHs(dstr);
-
- s = m + 1;
- while (s < strend &&
- ((pm->op_pmflags & PMf_LOCALE)
- ? isSPACE_LC(*s) : isSPACE(*s)))
- ++s;
- }
- }
- else if (strEQ("^", rx->precomp)) {
- while (--limit) {
- /*SUPPRESS 530*/
- for (m = s; m < strend && *m != '\n'; m++) ;
- m++;
- if (m >= strend)
- break;
- dstr = NEWSV(30, m-s);
- sv_setpvn(dstr, s, m-s);
- if (make_mortal)
- sv_2mortal(dstr);
- if (do_utf8)
- (void)SvUTF8_on(dstr);
- XPUSHs(dstr);
- s = m;
- }
- }
- else if ((rx->reganch & RE_USE_INTUIT) && !rx->nparens
- && (rx->reganch & ROPT_CHECK_ALL)
- && !(rx->reganch & ROPT_ANCH)) {
- int tail = (rx->reganch & RE_INTUIT_TAIL);
- SV *csv = CALLREG_INTUIT_STRING(aTHX_ rx);
-
- len = rx->minlen;
- if (len == 1 && !(rx->reganch & ROPT_UTF8) && !tail) {
- STRLEN n_a;
- char c = *SvPV(csv, n_a);
- while (--limit) {
- /*SUPPRESS 530*/
- for (m = s; m < strend && *m != c; m++) ;
- if (m >= strend)
- break;
- dstr = NEWSV(30, m-s);
- sv_setpvn(dstr, s, m-s);
- if (make_mortal)
- sv_2mortal(dstr);
- if (do_utf8)
- (void)SvUTF8_on(dstr);
- XPUSHs(dstr);
- /* The rx->minlen is in characters but we want to step
- * s ahead by bytes. */
- if (do_utf8)
- s = (char*)utf8_hop((U8*)m, len);
- else
- s = m + len; /* Fake \n at the end */
- }
- }
- else {
-#ifndef lint
- while (s < strend && --limit &&
- (m = fbm_instr((unsigned char*)s, (unsigned char*)strend,
- csv, PL_multiline ? FBMrf_MULTILINE : 0)) )
-#endif
- {
- dstr = NEWSV(31, m-s);
- sv_setpvn(dstr, s, m-s);
- if (make_mortal)
- sv_2mortal(dstr);
- if (do_utf8)
- (void)SvUTF8_on(dstr);
- XPUSHs(dstr);
- /* The rx->minlen is in characters but we want to step
- * s ahead by bytes. */
- if (do_utf8)
- s = (char*)utf8_hop((U8*)m, len);
- else
- s = m + len; /* Fake \n at the end */
- }
- }
- }
- else {
- maxiters += slen * rx->nparens;
- while (s < strend && --limit
-/* && (!rx->check_substr
- || ((s = CALLREG_INTUIT_START(aTHX_ rx, sv, s, strend,
- 0, NULL))))
-*/ && CALLREGEXEC(aTHX_ rx, s, strend, orig,
- 1 /* minend */, sv, NULL, 0))
- {
- TAINT_IF(RX_MATCH_TAINTED(rx));
- if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
- m = s;
- s = orig;
- orig = rx->subbeg;
- s = orig + (m - s);
- strend = s + (strend - m);
- }
- m = rx->startp[0] + orig;
- dstr = NEWSV(32, m-s);
- sv_setpvn(dstr, s, m-s);
- if (make_mortal)
- sv_2mortal(dstr);
- if (do_utf8)
- (void)SvUTF8_on(dstr);
- XPUSHs(dstr);
- if (rx->nparens) {
- for (i = 1; i <= rx->nparens; i++) {
- s = rx->startp[i] + orig;
- m = rx->endp[i] + orig;
- if (m && s) {
- dstr = NEWSV(33, m-s);
- sv_setpvn(dstr, s, m-s);
- }
- else
- dstr = NEWSV(33, 0);
- if (make_mortal)
- sv_2mortal(dstr);
- if (do_utf8)
- (void)SvUTF8_on(dstr);
- XPUSHs(dstr);
- }
- }
- s = rx->endp[0] + orig;
- }
- }
-
- LEAVE_SCOPE(oldsave);
- iters = (SP - PL_stack_base) - base;
- if (iters > maxiters)
- DIE(aTHX_ "Split loop");
-
- /* keep field after final delim? */
- if (s < strend || (iters && origlimit)) {
- STRLEN l = strend - s;
- dstr = NEWSV(34, l);
- sv_setpvn(dstr, s, l);
- if (make_mortal)
- sv_2mortal(dstr);
- if (do_utf8)
- (void)SvUTF8_on(dstr);
- XPUSHs(dstr);
- iters++;
- }
- else if (!origlimit) {
- while (iters > 0 && (!TOPs || !SvANY(TOPs) || SvCUR(TOPs) == 0))
- iters--, SP--;
- }
-
- if (realarray) {
- if (!mg) {
- SWITCHSTACK(ary, oldstack);
- if (SvSMAGICAL(ary)) {
- PUTBACK;
- mg_set((SV*)ary);
- SPAGAIN;
- }
- if (gimme == G_ARRAY) {
- EXTEND(SP, iters);
- Copy(AvARRAY(ary), SP + 1, iters, SV*);
- SP += iters;
- RETURN;
- }
- }
- else {
- PUTBACK;
- ENTER;
- call_method("PUSH",G_SCALAR|G_DISCARD);
- LEAVE;
- SPAGAIN;
- if (gimme == G_ARRAY) {
- /* EXTEND should not be needed - we just popped them */
- EXTEND(SP, iters);
- for (i=0; i < iters; i++) {
- SV **svp = av_fetch(ary, i, FALSE);
- PUSHs((svp) ? *svp : &PL_sv_undef);
- }
- RETURN;
- }
- }
- }
- else {
- if (gimme == G_ARRAY)
- RETURN;
- }
- if (iters || !pm->op_pmreplroot) {
- GETTARGET;
- PUSHi(iters);
- RETURN;
- }
- RETPUSHUNDEF;
-}
-
-#ifdef USE_THREADS
-void
-Perl_unlock_condpair(pTHX_ void *svv)
-{
- MAGIC *mg = mg_find((SV*)svv, 'm');
-
- if (!mg)
- Perl_croak(aTHX_ "panic: unlock_condpair unlocking non-mutex");
- MUTEX_LOCK(MgMUTEXP(mg));
- if (MgOWNER(mg) != thr)
- Perl_croak(aTHX_ "panic: unlock_condpair unlocking mutex that we don't own");
- MgOWNER(mg) = 0;
- COND_SIGNAL(MgOWNERCONDP(mg));
- DEBUG_S(PerlIO_printf(Perl_debug_log, "0x%"UVxf": unlock 0x%"UVxf"\n",
- PTR2UV(thr), PTR2UV(svv));)
- MUTEX_UNLOCK(MgMUTEXP(mg));
-}
-#endif /* USE_THREADS */
-
-PP(pp_lock)
-{
- dSP;
- dTOPss;
- SV *retsv = sv;
-#ifdef USE_THREADS
- sv_lock(sv);
-#endif /* USE_THREADS */
- if (SvTYPE(retsv) == SVt_PVAV || SvTYPE(retsv) == SVt_PVHV
- || SvTYPE(retsv) == SVt_PVCV) {
- retsv = refto(retsv);
- }
- SETs(retsv);
- RETURN;
-}
-
-PP(pp_threadsv)
-{
-#ifdef USE_THREADS
- dSP;
- EXTEND(SP, 1);
- if (PL_op->op_private & OPpLVAL_INTRO)
- PUSHs(*save_threadsv(PL_op->op_targ));
- else
- PUSHs(THREADSV(PL_op->op_targ));
- RETURN;
-#else
- DIE(aTHX_ "tried to access per-thread data in non-threaded perl");
-#endif /* USE_THREADS */
-}
diff --git a/contrib/perl5/pp.h b/contrib/perl5/pp.h
deleted file mode 100644
index 10da964..0000000
--- a/contrib/perl5/pp.h
+++ /dev/null
@@ -1,383 +0,0 @@
-/* pp.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-#ifdef USE_THREADS
-#define ARGS thr
-#define dARGS struct perl_thread *thr;
-#else
-#define ARGS
-#define dARGS
-#endif /* USE_THREADS */
-
-#define PP(s) OP * Perl_##s(pTHX)
-
-/*
-=for apidoc AmU||SP
-Stack pointer. This is usually handled by C<xsubpp>. See C<dSP> and
-C<SPAGAIN>.
-
-=for apidoc AmU||MARK
-Stack marker variable for the XSUB. See C<dMARK>.
-
-=for apidoc Ams||PUSHMARK
-Opening bracket for arguments on a callback. See C<PUTBACK> and
-L<perlcall>.
-
-=for apidoc Ams||dSP
-Declares a local copy of perl's stack pointer for the XSUB, available via
-the C<SP> macro. See C<SP>.
-
-=for apidoc Ams||dMARK
-Declare a stack marker variable, C<mark>, for the XSUB. See C<MARK> and
-C<dORIGMARK>.
-
-=for apidoc Ams||dORIGMARK
-Saves the original stack mark for the XSUB. See C<ORIGMARK>.
-
-=for apidoc AmU||ORIGMARK
-The original stack mark for the XSUB. See C<dORIGMARK>.
-
-=for apidoc Ams||SPAGAIN
-Refetch the stack pointer. Used after a callback. See L<perlcall>.
-
-=cut
-*/
-
-#undef SP /* Solaris 2.7 i386 has this in /usr/include/sys/reg.h */
-#define SP sp
-#define MARK mark
-#define TARG targ
-
-#define PUSHMARK(p) if (++PL_markstack_ptr == PL_markstack_max) \
- markstack_grow(); \
- *PL_markstack_ptr = (p) - PL_stack_base
-
-#define TOPMARK (*PL_markstack_ptr)
-#define POPMARK (*PL_markstack_ptr--)
-
-#define dSP register SV **sp = PL_stack_sp
-#define djSP dSP
-#define dMARK register SV **mark = PL_stack_base + POPMARK
-#define dORIGMARK I32 origmark = mark - PL_stack_base
-#define SETORIGMARK origmark = mark - PL_stack_base
-#define ORIGMARK (PL_stack_base + origmark)
-
-#define SPAGAIN sp = PL_stack_sp
-#define MSPAGAIN sp = PL_stack_sp; mark = ORIGMARK
-
-#define GETTARGETSTACKED targ = (PL_op->op_flags & OPf_STACKED ? POPs : PAD_SV(PL_op->op_targ))
-#define dTARGETSTACKED SV * GETTARGETSTACKED
-
-#define GETTARGET targ = PAD_SV(PL_op->op_targ)
-#define dTARGET SV * GETTARGET
-
-#define GETATARGET targ = (PL_op->op_flags & OPf_STACKED ? sp[-1] : PAD_SV(PL_op->op_targ))
-#define dATARGET SV * GETATARGET
-
-#define dTARG SV *targ
-
-#define NORMAL PL_op->op_next
-#define DIE return Perl_die
-
-/*
-=for apidoc Ams||PUTBACK
-Closing bracket for XSUB arguments. This is usually handled by C<xsubpp>.
-See C<PUSHMARK> and L<perlcall> for other uses.
-
-=for apidoc Amn|SV*|POPs
-Pops an SV off the stack.
-
-=for apidoc Amn|char*|POPp
-Pops a string off the stack.
-
-=for apidoc Amn|NV|POPn
-Pops a double off the stack.
-
-=for apidoc Amn|IV|POPi
-Pops an integer off the stack.
-
-=for apidoc Amn|long|POPl
-Pops a long off the stack.
-
-=cut
-*/
-
-#define PUTBACK PL_stack_sp = sp
-#define RETURN return PUTBACK, NORMAL
-#define RETURNOP(o) return PUTBACK, o
-#define RETURNX(x) return x, PUTBACK, NORMAL
-
-#define POPs (*sp--)
-#define POPp (SvPVx(POPs, PL_na)) /* deprecated */
-#define POPpx (SvPVx(POPs, n_a))
-#define POPn (SvNVx(POPs))
-#define POPi ((IV)SvIVx(POPs))
-#define POPu ((UV)SvUVx(POPs))
-#define POPl ((long)SvIVx(POPs))
-#define POPul ((unsigned long)SvIVx(POPs))
-#ifdef HAS_QUAD
-#define POPq ((Quad_t)SvIVx(POPs))
-#define POPuq ((Uquad_t)SvUVx(POPs))
-#endif
-
-#define TOPs (*sp)
-#define TOPp (SvPV(TOPs, PL_na)) /* deprecated */
-#define TOPpx (SvPV(TOPs, n_a))
-#define TOPn (SvNV(TOPs))
-#define TOPi ((IV)SvIV(TOPs))
-#define TOPu ((UV)SvUV(TOPs))
-#define TOPl ((long)SvIV(TOPs))
-#define TOPul ((unsigned long)SvUV(TOPs))
-#ifdef HAS_QUAD
-#define TOPq ((Quad_t)SvIV(TOPs))
-#define TOPuq ((Uquad_t)SvUV(TOPs))
-#endif
-
-/* Go to some pains in the rare event that we must extend the stack. */
-
-/*
-=for apidoc Am|void|EXTEND|SP|int nitems
-Used to extend the argument stack for an XSUB's return values. Once
-used, guarantees that there is room for at least C<nitems> to be pushed
-onto the stack.
-
-=for apidoc Am|void|PUSHs|SV* sv
-Push an SV onto the stack. The stack must have room for this element.
-Does not handle 'set' magic. See C<XPUSHs>.
-
-=for apidoc Am|void|PUSHp|char* str|STRLEN len
-Push a string onto the stack. The stack must have room for this element.
-The C<len> indicates the length of the string. Handles 'set' magic. See
-C<XPUSHp>.
-
-=for apidoc Am|void|PUSHn|NV nv
-Push a double onto the stack. The stack must have room for this element.
-Handles 'set' magic. See C<XPUSHn>.
-
-=for apidoc Am|void|PUSHi|IV iv
-Push an integer onto the stack. The stack must have room for this element.
-Handles 'set' magic. See C<XPUSHi>.
-
-=for apidoc Am|void|PUSHu|UV uv
-Push an unsigned integer onto the stack. The stack must have room for this
-element. See C<XPUSHu>.
-
-=for apidoc Am|void|XPUSHs|SV* sv
-Push an SV onto the stack, extending the stack if necessary. Does not
-handle 'set' magic. See C<PUSHs>.
-
-=for apidoc Am|void|XPUSHp|char* str|STRLEN len
-Push a string onto the stack, extending the stack if necessary. The C<len>
-indicates the length of the string. Handles 'set' magic. See
-C<PUSHp>.
-
-=for apidoc Am|void|XPUSHn|NV nv
-Push a double onto the stack, extending the stack if necessary. Handles
-'set' magic. See C<PUSHn>.
-
-=for apidoc Am|void|XPUSHi|IV iv
-Push an integer onto the stack, extending the stack if necessary. Handles
-'set' magic. See C<PUSHi>.
-
-=for apidoc Am|void|XPUSHu|UV uv
-Push an unsigned integer onto the stack, extending the stack if necessary.
-See C<PUSHu>.
-
-=cut
-*/
-
-#define EXTEND(p,n) STMT_START { if (PL_stack_max - p < (n)) { \
- sp = stack_grow(sp,p, (int) (n)); \
- } } STMT_END
-
-/* Same thing, but update mark register too. */
-#define MEXTEND(p,n) STMT_START {if (PL_stack_max - p < (n)) { \
- int markoff = mark - PL_stack_base; \
- sp = stack_grow(sp,p,(int) (n)); \
- mark = PL_stack_base + markoff; \
- } } STMT_END
-
-#define PUSHs(s) (*++sp = (s))
-#define PUSHTARG STMT_START { SvSETMAGIC(TARG); PUSHs(TARG); } STMT_END
-#define PUSHp(p,l) STMT_START { sv_setpvn(TARG, (p), (l)); PUSHTARG; } STMT_END
-#define PUSHn(n) STMT_START { sv_setnv(TARG, (NV)(n)); PUSHTARG; } STMT_END
-#define PUSHi(i) STMT_START { sv_setiv(TARG, (IV)(i)); PUSHTARG; } STMT_END
-#define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
-
-#define XPUSHs(s) STMT_START { EXTEND(sp,1); (*++sp = (s)); } STMT_END
-#define XPUSHTARG STMT_START { SvSETMAGIC(TARG); XPUSHs(TARG); } STMT_END
-#define XPUSHp(p,l) STMT_START { sv_setpvn(TARG, (p), (l)); XPUSHTARG; } STMT_END
-#define XPUSHn(n) STMT_START { sv_setnv(TARG, (NV)(n)); XPUSHTARG; } STMT_END
-#define XPUSHi(i) STMT_START { sv_setiv(TARG, (IV)(i)); XPUSHTARG; } STMT_END
-#define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
-#define XPUSHundef STMT_START { SvOK_off(TARG); XPUSHs(TARG); } STMT_END
-
-#define SETs(s) (*sp = s)
-#define SETTARG STMT_START { SvSETMAGIC(TARG); SETs(TARG); } STMT_END
-#define SETp(p,l) STMT_START { sv_setpvn(TARG, (p), (l)); SETTARG; } STMT_END
-#define SETn(n) STMT_START { sv_setnv(TARG, (NV)(n)); SETTARG; } STMT_END
-#define SETi(i) STMT_START { sv_setiv(TARG, (IV)(i)); SETTARG; } STMT_END
-#define SETu(u) STMT_START { sv_setuv(TARG, (UV)(u)); SETTARG; } STMT_END
-
-#define dTOPss SV *sv = TOPs
-#define dPOPss SV *sv = POPs
-#define dTOPnv NV value = TOPn
-#define dPOPnv NV value = POPn
-#define dTOPiv IV value = TOPi
-#define dPOPiv IV value = POPi
-#define dTOPuv UV value = TOPu
-#define dPOPuv UV value = POPu
-#ifdef HAS_QUAD
-#define dTOPqv Quad_t value = TOPu
-#define dPOPqv Quad_t value = POPu
-#define dTOPuqv Uquad_t value = TOPuq
-#define dPOPuqv Uquad_t value = POPuq
-#endif
-
-#define dPOPXssrl(X) SV *right = POPs; SV *left = CAT2(X,s)
-#define dPOPXnnrl(X) NV right = POPn; NV left = CAT2(X,n)
-#define dPOPXiirl(X) IV right = POPi; IV left = CAT2(X,i)
-
-#define USE_LEFT(sv) \
- (SvOK(sv) || SvGMAGICAL(sv) || !(PL_op->op_flags & OPf_STACKED))
-#define dPOPXnnrl_ul(X) \
- NV right = POPn; \
- SV *leftsv = CAT2(X,s); \
- NV left = USE_LEFT(leftsv) ? SvNV(leftsv) : 0.0
-#define dPOPXiirl_ul(X) \
- IV right = POPi; \
- SV *leftsv = CAT2(X,s); \
- IV left = USE_LEFT(leftsv) ? SvIV(leftsv) : 0
-
-#define dPOPPOPssrl dPOPXssrl(POP)
-#define dPOPPOPnnrl dPOPXnnrl(POP)
-#define dPOPPOPnnrl_ul dPOPXnnrl_ul(POP)
-#define dPOPPOPiirl dPOPXiirl(POP)
-#define dPOPPOPiirl_ul dPOPXiirl_ul(POP)
-
-#define dPOPTOPssrl dPOPXssrl(TOP)
-#define dPOPTOPnnrl dPOPXnnrl(TOP)
-#define dPOPTOPnnrl_ul dPOPXnnrl_ul(TOP)
-#define dPOPTOPiirl dPOPXiirl(TOP)
-#define dPOPTOPiirl_ul dPOPXiirl_ul(TOP)
-
-#define RETPUSHYES RETURNX(PUSHs(&PL_sv_yes))
-#define RETPUSHNO RETURNX(PUSHs(&PL_sv_no))
-#define RETPUSHUNDEF RETURNX(PUSHs(&PL_sv_undef))
-
-#define RETSETYES RETURNX(SETs(&PL_sv_yes))
-#define RETSETNO RETURNX(SETs(&PL_sv_no))
-#define RETSETUNDEF RETURNX(SETs(&PL_sv_undef))
-
-#define ARGTARG PL_op->op_targ
-
- /* See OPpTARGET_MY: */
-#define MAXARG (PL_op->op_private & 15)
-
-#define SWITCHSTACK(f,t) \
- STMT_START { \
- AvFILLp(f) = sp - PL_stack_base; \
- PL_stack_base = AvARRAY(t); \
- PL_stack_max = PL_stack_base + AvMAX(t); \
- sp = PL_stack_sp = PL_stack_base + AvFILLp(t); \
- PL_curstack = t; \
- } STMT_END
-
-#define EXTEND_MORTAL(n) \
- STMT_START { \
- if (PL_tmps_ix + (n) >= PL_tmps_max) \
- tmps_grow(n); \
- } STMT_END
-
-#define AMGf_noright 1
-#define AMGf_noleft 2
-#define AMGf_assign 4
-#define AMGf_unary 8
-
-#define tryAMAGICbinW(meth,assign,set) STMT_START { \
- if (PL_amagic_generation) { \
- SV* tmpsv; \
- SV* right= *(sp); SV* left= *(sp-1);\
- if ((SvAMAGIC(left)||SvAMAGIC(right))&&\
- (tmpsv=amagic_call(left, \
- right, \
- CAT2(meth,_amg), \
- (assign)? AMGf_assign: 0))) {\
- SPAGAIN; \
- (void)POPs; set(tmpsv); RETURN; } \
- } \
- } STMT_END
-
-#define tryAMAGICbin(meth,assign) tryAMAGICbinW(meth,assign,SETsv)
-#define tryAMAGICbinSET(meth,assign) tryAMAGICbinW(meth,assign,SETs)
-
-#define AMG_CALLun(sv,meth) amagic_call(sv,&PL_sv_undef, \
- CAT2(meth,_amg),AMGf_noright | AMGf_unary)
-#define AMG_CALLbinL(left,right,meth) \
- amagic_call(left,right,CAT2(meth,_amg),AMGf_noright)
-
-#define tryAMAGICunW(meth,set,shift,ret) STMT_START { \
- if (PL_amagic_generation) { \
- SV* tmpsv; \
- SV* arg= sp[shift]; \
- am_again: \
- if ((SvAMAGIC(arg))&&\
- (tmpsv=AMG_CALLun(arg,meth))) {\
- SPAGAIN; if (shift) sp += shift; \
- set(tmpsv); ret; } \
- } \
- } STMT_END
-
-#define FORCE_SETs(sv) STMT_START { sv_setsv(TARG, (sv)); SETTARG; } STMT_END
-
-#define tryAMAGICun(meth) tryAMAGICunW(meth,SETsvUN,0,RETURN)
-#define tryAMAGICunSET(meth) tryAMAGICunW(meth,SETs,0,RETURN)
-#define tryAMAGICunTARGET(meth, shift) \
- { dSP; sp--; /* get TARGET from below PL_stack_sp */ \
- { dTARGETSTACKED; \
- { dSP; tryAMAGICunW(meth,FORCE_SETs,shift,RETURN);}}}
-
-#define setAGAIN(ref) sv = ref; \
- if (!SvROK(ref)) \
- Perl_croak(aTHX_ "Overloaded dereference did not return a reference"); \
- if (ref != arg && SvRV(ref) != SvRV(arg)) { \
- arg = ref; \
- goto am_again; \
- }
-
-#define tryAMAGICunDEREF(meth) tryAMAGICunW(meth,setAGAIN,0,(void)0)
-
-#define opASSIGN (PL_op->op_flags & OPf_STACKED)
-#define SETsv(sv) STMT_START { \
- if (opASSIGN || (SvFLAGS(TARG) & SVs_PADMY)) \
- { sv_setsv(TARG, (sv)); SETTARG; } \
- else SETs(sv); } STMT_END
-
-#define SETsvUN(sv) STMT_START { \
- if (SvFLAGS(TARG) & SVs_PADMY) \
- { sv_setsv(TARG, (sv)); SETTARG; } \
- else SETs(sv); } STMT_END
-
-/* newSVsv does not behave as advertised, so we copy missing
- * information by hand */
-
-/* SV* ref causes confusion with the member variable
- changed SV* ref to SV* tmpRef */
-#define RvDEEPCP(rv) STMT_START { SV* tmpRef=SvRV(rv); \
- if (SvREFCNT(tmpRef)>1) { \
- SvREFCNT_dec(tmpRef); \
- SvRV(rv)=AMG_CALLun(rv,copy); \
- } } STMT_END
-
-/*
-=for apidoc mU||LVRET
-True if this op will be the return value of an lvalue subroutine
-
-=cut */
-#define LVRET ((PL_op->op_private & OPpMAYBE_LVSUB) && is_lvalue_sub())
diff --git a/contrib/perl5/pp.sym b/contrib/perl5/pp.sym
deleted file mode 100644
index 2bd3922..0000000
--- a/contrib/perl5/pp.sym
+++ /dev/null
@@ -1,393 +0,0 @@
-#
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by opcode.pl from its data. Any changes made here
-# will be lost!
-#
-
-Perl_ck_anoncode
-Perl_ck_bitop
-Perl_ck_concat
-Perl_ck_defined
-Perl_ck_delete
-Perl_ck_eof
-Perl_ck_eval
-Perl_ck_exec
-Perl_ck_exists
-Perl_ck_exit
-Perl_ck_ftst
-Perl_ck_fun
-Perl_ck_fun_locale
-Perl_ck_glob
-Perl_ck_grep
-Perl_ck_index
-Perl_ck_join
-Perl_ck_lengthconst
-Perl_ck_lfun
-Perl_ck_listiob
-Perl_ck_match
-Perl_ck_method
-Perl_ck_null
-Perl_ck_open
-Perl_ck_repeat
-Perl_ck_require
-Perl_ck_return
-Perl_ck_rfun
-Perl_ck_rvconst
-Perl_ck_sassign
-Perl_ck_scmp
-Perl_ck_select
-Perl_ck_shift
-Perl_ck_sort
-Perl_ck_spair
-Perl_ck_split
-Perl_ck_subr
-Perl_ck_substr
-Perl_ck_svconst
-Perl_ck_trunc
-Perl_pp_null
-Perl_pp_stub
-Perl_pp_scalar
-Perl_pp_pushmark
-Perl_pp_wantarray
-Perl_pp_const
-Perl_pp_gvsv
-Perl_pp_gv
-Perl_pp_gelem
-Perl_pp_padsv
-Perl_pp_padav
-Perl_pp_padhv
-Perl_pp_padany
-Perl_pp_pushre
-Perl_pp_rv2gv
-Perl_pp_rv2sv
-Perl_pp_av2arylen
-Perl_pp_rv2cv
-Perl_pp_anoncode
-Perl_pp_prototype
-Perl_pp_refgen
-Perl_pp_srefgen
-Perl_pp_ref
-Perl_pp_bless
-Perl_pp_backtick
-Perl_pp_glob
-Perl_pp_readline
-Perl_pp_rcatline
-Perl_pp_regcmaybe
-Perl_pp_regcreset
-Perl_pp_regcomp
-Perl_pp_match
-Perl_pp_qr
-Perl_pp_subst
-Perl_pp_substcont
-Perl_pp_trans
-Perl_pp_sassign
-Perl_pp_aassign
-Perl_pp_chop
-Perl_pp_schop
-Perl_pp_chomp
-Perl_pp_schomp
-Perl_pp_defined
-Perl_pp_undef
-Perl_pp_study
-Perl_pp_pos
-Perl_pp_preinc
-Perl_pp_predec
-Perl_pp_postinc
-Perl_pp_postdec
-Perl_pp_pow
-Perl_pp_multiply
-Perl_pp_i_multiply
-Perl_pp_divide
-Perl_pp_i_divide
-Perl_pp_modulo
-Perl_pp_i_modulo
-Perl_pp_repeat
-Perl_pp_add
-Perl_pp_i_add
-Perl_pp_subtract
-Perl_pp_i_subtract
-Perl_pp_concat
-Perl_pp_stringify
-Perl_pp_left_shift
-Perl_pp_right_shift
-Perl_pp_lt
-Perl_pp_i_lt
-Perl_pp_gt
-Perl_pp_i_gt
-Perl_pp_le
-Perl_pp_i_le
-Perl_pp_ge
-Perl_pp_i_ge
-Perl_pp_eq
-Perl_pp_i_eq
-Perl_pp_ne
-Perl_pp_i_ne
-Perl_pp_ncmp
-Perl_pp_i_ncmp
-Perl_pp_slt
-Perl_pp_sgt
-Perl_pp_sle
-Perl_pp_sge
-Perl_pp_seq
-Perl_pp_sne
-Perl_pp_scmp
-Perl_pp_bit_and
-Perl_pp_bit_xor
-Perl_pp_bit_or
-Perl_pp_negate
-Perl_pp_i_negate
-Perl_pp_not
-Perl_pp_complement
-Perl_pp_atan2
-Perl_pp_sin
-Perl_pp_cos
-Perl_pp_rand
-Perl_pp_srand
-Perl_pp_exp
-Perl_pp_log
-Perl_pp_sqrt
-Perl_pp_int
-Perl_pp_hex
-Perl_pp_oct
-Perl_pp_abs
-Perl_pp_length
-Perl_pp_substr
-Perl_pp_vec
-Perl_pp_index
-Perl_pp_rindex
-Perl_pp_sprintf
-Perl_pp_formline
-Perl_pp_ord
-Perl_pp_chr
-Perl_pp_crypt
-Perl_pp_ucfirst
-Perl_pp_lcfirst
-Perl_pp_uc
-Perl_pp_lc
-Perl_pp_quotemeta
-Perl_pp_rv2av
-Perl_pp_aelemfast
-Perl_pp_aelem
-Perl_pp_aslice
-Perl_pp_each
-Perl_pp_values
-Perl_pp_keys
-Perl_pp_delete
-Perl_pp_exists
-Perl_pp_rv2hv
-Perl_pp_helem
-Perl_pp_hslice
-Perl_pp_unpack
-Perl_pp_pack
-Perl_pp_split
-Perl_pp_join
-Perl_pp_list
-Perl_pp_lslice
-Perl_pp_anonlist
-Perl_pp_anonhash
-Perl_pp_splice
-Perl_pp_push
-Perl_pp_pop
-Perl_pp_shift
-Perl_pp_unshift
-Perl_pp_sort
-Perl_pp_reverse
-Perl_pp_grepstart
-Perl_pp_grepwhile
-Perl_pp_mapstart
-Perl_pp_mapwhile
-Perl_pp_range
-Perl_pp_flip
-Perl_pp_flop
-Perl_pp_and
-Perl_pp_or
-Perl_pp_xor
-Perl_pp_cond_expr
-Perl_pp_andassign
-Perl_pp_orassign
-Perl_pp_method
-Perl_pp_entersub
-Perl_pp_leavesub
-Perl_pp_leavesublv
-Perl_pp_caller
-Perl_pp_warn
-Perl_pp_die
-Perl_pp_reset
-Perl_pp_lineseq
-Perl_pp_nextstate
-Perl_pp_dbstate
-Perl_pp_unstack
-Perl_pp_enter
-Perl_pp_leave
-Perl_pp_scope
-Perl_pp_enteriter
-Perl_pp_iter
-Perl_pp_enterloop
-Perl_pp_leaveloop
-Perl_pp_return
-Perl_pp_last
-Perl_pp_next
-Perl_pp_redo
-Perl_pp_dump
-Perl_pp_goto
-Perl_pp_exit
-Perl_pp_open
-Perl_pp_close
-Perl_pp_pipe_op
-Perl_pp_fileno
-Perl_pp_umask
-Perl_pp_binmode
-Perl_pp_tie
-Perl_pp_untie
-Perl_pp_tied
-Perl_pp_dbmopen
-Perl_pp_dbmclose
-Perl_pp_sselect
-Perl_pp_select
-Perl_pp_getc
-Perl_pp_read
-Perl_pp_enterwrite
-Perl_pp_leavewrite
-Perl_pp_prtf
-Perl_pp_print
-Perl_pp_sysopen
-Perl_pp_sysseek
-Perl_pp_sysread
-Perl_pp_syswrite
-Perl_pp_send
-Perl_pp_recv
-Perl_pp_eof
-Perl_pp_tell
-Perl_pp_seek
-Perl_pp_truncate
-Perl_pp_fcntl
-Perl_pp_ioctl
-Perl_pp_flock
-Perl_pp_socket
-Perl_pp_sockpair
-Perl_pp_bind
-Perl_pp_connect
-Perl_pp_listen
-Perl_pp_accept
-Perl_pp_shutdown
-Perl_pp_gsockopt
-Perl_pp_ssockopt
-Perl_pp_getsockname
-Perl_pp_getpeername
-Perl_pp_lstat
-Perl_pp_stat
-Perl_pp_ftrread
-Perl_pp_ftrwrite
-Perl_pp_ftrexec
-Perl_pp_fteread
-Perl_pp_ftewrite
-Perl_pp_fteexec
-Perl_pp_ftis
-Perl_pp_fteowned
-Perl_pp_ftrowned
-Perl_pp_ftzero
-Perl_pp_ftsize
-Perl_pp_ftmtime
-Perl_pp_ftatime
-Perl_pp_ftctime
-Perl_pp_ftsock
-Perl_pp_ftchr
-Perl_pp_ftblk
-Perl_pp_ftfile
-Perl_pp_ftdir
-Perl_pp_ftpipe
-Perl_pp_ftlink
-Perl_pp_ftsuid
-Perl_pp_ftsgid
-Perl_pp_ftsvtx
-Perl_pp_fttty
-Perl_pp_fttext
-Perl_pp_ftbinary
-Perl_pp_chdir
-Perl_pp_chown
-Perl_pp_chroot
-Perl_pp_unlink
-Perl_pp_chmod
-Perl_pp_utime
-Perl_pp_rename
-Perl_pp_link
-Perl_pp_symlink
-Perl_pp_readlink
-Perl_pp_mkdir
-Perl_pp_rmdir
-Perl_pp_open_dir
-Perl_pp_readdir
-Perl_pp_telldir
-Perl_pp_seekdir
-Perl_pp_rewinddir
-Perl_pp_closedir
-Perl_pp_fork
-Perl_pp_wait
-Perl_pp_waitpid
-Perl_pp_system
-Perl_pp_exec
-Perl_pp_kill
-Perl_pp_getppid
-Perl_pp_getpgrp
-Perl_pp_setpgrp
-Perl_pp_getpriority
-Perl_pp_setpriority
-Perl_pp_time
-Perl_pp_tms
-Perl_pp_localtime
-Perl_pp_gmtime
-Perl_pp_alarm
-Perl_pp_sleep
-Perl_pp_shmget
-Perl_pp_shmctl
-Perl_pp_shmread
-Perl_pp_shmwrite
-Perl_pp_msgget
-Perl_pp_msgctl
-Perl_pp_msgsnd
-Perl_pp_msgrcv
-Perl_pp_semget
-Perl_pp_semctl
-Perl_pp_semop
-Perl_pp_require
-Perl_pp_dofile
-Perl_pp_entereval
-Perl_pp_leaveeval
-Perl_pp_entertry
-Perl_pp_leavetry
-Perl_pp_ghbyname
-Perl_pp_ghbyaddr
-Perl_pp_ghostent
-Perl_pp_gnbyname
-Perl_pp_gnbyaddr
-Perl_pp_gnetent
-Perl_pp_gpbyname
-Perl_pp_gpbynumber
-Perl_pp_gprotoent
-Perl_pp_gsbyname
-Perl_pp_gsbyport
-Perl_pp_gservent
-Perl_pp_shostent
-Perl_pp_snetent
-Perl_pp_sprotoent
-Perl_pp_sservent
-Perl_pp_ehostent
-Perl_pp_enetent
-Perl_pp_eprotoent
-Perl_pp_eservent
-Perl_pp_gpwnam
-Perl_pp_gpwuid
-Perl_pp_gpwent
-Perl_pp_spwent
-Perl_pp_epwent
-Perl_pp_ggrnam
-Perl_pp_ggrgid
-Perl_pp_ggrent
-Perl_pp_sgrent
-Perl_pp_egrent
-Perl_pp_getlogin
-Perl_pp_syscall
-Perl_pp_lock
-Perl_pp_threadsv
-Perl_pp_setstate
-Perl_pp_method_named
diff --git a/contrib/perl5/pp_ctl.c b/contrib/perl5/pp_ctl.c
deleted file mode 100644
index b267060..0000000
--- a/contrib/perl5/pp_ctl.c
+++ /dev/null
@@ -1,4665 +0,0 @@
-/* pp_ctl.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * Now far ahead the Road has gone,
- * And I must follow, if I can,
- * Pursuing it with eager feet,
- * Until it joins some larger way
- * Where many paths and errands meet.
- * And whither then? I cannot say.
- */
-
-#include "EXTERN.h"
-#define PERL_IN_PP_CTL_C
-#include "perl.h"
-
-#ifndef WORD_ALIGN
-#define WORD_ALIGN sizeof(U16)
-#endif
-
-#define DOCATCH(o) ((CATCH_GET == TRUE) ? docatch(o) : (o))
-
-static I32 sortcv(pTHXo_ SV *a, SV *b);
-static I32 sortcv_stacked(pTHXo_ SV *a, SV *b);
-static I32 sortcv_xsub(pTHXo_ SV *a, SV *b);
-static I32 sv_ncmp(pTHXo_ SV *a, SV *b);
-static I32 sv_i_ncmp(pTHXo_ SV *a, SV *b);
-static I32 amagic_ncmp(pTHXo_ SV *a, SV *b);
-static I32 amagic_i_ncmp(pTHXo_ SV *a, SV *b);
-static I32 amagic_cmp(pTHXo_ SV *a, SV *b);
-static I32 amagic_cmp_locale(pTHXo_ SV *a, SV *b);
-static I32 run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen);
-
-#ifdef PERL_OBJECT
-static I32 sv_cmp_static(pTHXo_ SV *a, SV *b);
-static I32 sv_cmp_locale_static(pTHXo_ SV *a, SV *b);
-#else
-#define sv_cmp_static Perl_sv_cmp
-#define sv_cmp_locale_static Perl_sv_cmp_locale
-#endif
-
-PP(pp_wantarray)
-{
- dSP;
- I32 cxix;
- EXTEND(SP, 1);
-
- cxix = dopoptosub(cxstack_ix);
- if (cxix < 0)
- RETPUSHUNDEF;
-
- switch (cxstack[cxix].blk_gimme) {
- case G_ARRAY:
- RETPUSHYES;
- case G_SCALAR:
- RETPUSHNO;
- default:
- RETPUSHUNDEF;
- }
-}
-
-PP(pp_regcmaybe)
-{
- return NORMAL;
-}
-
-PP(pp_regcreset)
-{
- /* XXXX Should store the old value to allow for tie/overload - and
- restore in regcomp, where marked with XXXX. */
- PL_reginterp_cnt = 0;
- return NORMAL;
-}
-
-PP(pp_regcomp)
-{
- dSP;
- register PMOP *pm = (PMOP*)cLOGOP->op_other;
- register char *t;
- SV *tmpstr;
- STRLEN len;
- MAGIC *mg = Null(MAGIC*);
-
- tmpstr = POPs;
- if (SvROK(tmpstr)) {
- SV *sv = SvRV(tmpstr);
- if(SvMAGICAL(sv))
- mg = mg_find(sv, 'r');
- }
- if (mg) {
- regexp *re = (regexp *)mg->mg_obj;
- ReREFCNT_dec(pm->op_pmregexp);
- pm->op_pmregexp = ReREFCNT_inc(re);
- }
- else {
- t = SvPV(tmpstr, len);
-
- /* Check against the last compiled regexp. */
- if (!pm->op_pmregexp || !pm->op_pmregexp->precomp ||
- pm->op_pmregexp->prelen != len ||
- memNE(pm->op_pmregexp->precomp, t, len))
- {
- if (pm->op_pmregexp) {
- ReREFCNT_dec(pm->op_pmregexp);
- pm->op_pmregexp = Null(REGEXP*); /* crucial if regcomp aborts */
- }
- if (PL_op->op_flags & OPf_SPECIAL)
- PL_reginterp_cnt = I32_MAX; /* Mark as safe. */
-
- pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
- if (DO_UTF8(tmpstr))
- pm->op_pmdynflags |= PMdf_UTF8;
- pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
- PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
- inside tie/overload accessors. */
- }
- }
-
-#ifndef INCOMPLETE_TAINTS
- if (PL_tainting) {
- if (PL_tainted)
- pm->op_pmdynflags |= PMdf_TAINTED;
- else
- pm->op_pmdynflags &= ~PMdf_TAINTED;
- }
-#endif
-
- if (!pm->op_pmregexp->prelen && PL_curpm)
- pm = PL_curpm;
- else if (strEQ("\\s+", pm->op_pmregexp->precomp))
- pm->op_pmflags |= PMf_WHITE;
-
- /* XXX runtime compiled output needs to move to the pad */
- if (pm->op_pmflags & PMf_KEEP) {
- pm->op_private &= ~OPpRUNTIME; /* no point compiling again */
-#if !defined(USE_ITHREADS) && !defined(USE_THREADS)
- /* XXX can't change the optree at runtime either */
- cLOGOP->op_first->op_next = PL_op->op_next;
-#endif
- }
- RETURN;
-}
-
-PP(pp_substcont)
-{
- dSP;
- register PMOP *pm = (PMOP*) cLOGOP->op_other;
- register PERL_CONTEXT *cx = &cxstack[cxstack_ix];
- register SV *dstr = cx->sb_dstr;
- register char *s = cx->sb_s;
- register char *m = cx->sb_m;
- char *orig = cx->sb_orig;
- register REGEXP *rx = cx->sb_rx;
-
- rxres_restore(&cx->sb_rxres, rx);
-
- if (cx->sb_iters++) {
- if (cx->sb_iters > cx->sb_maxiters)
- DIE(aTHX_ "Substitution loop");
-
- if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
- cx->sb_rxtainted |= 2;
- sv_catsv(dstr, POPs);
-
- /* Are we done */
- if (cx->sb_once || !CALLREGEXEC(aTHX_ rx, s, cx->sb_strend, orig,
- s == m, cx->sb_targ, NULL,
- ((cx->sb_rflags & REXEC_COPY_STR)
- ? (REXEC_IGNOREPOS|REXEC_NOT_FIRST)
- : (REXEC_COPY_STR|REXEC_IGNOREPOS|REXEC_NOT_FIRST))))
- {
- SV *targ = cx->sb_targ;
- bool isutf8;
-
- sv_catpvn(dstr, s, cx->sb_strend - s);
- cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
-
- (void)SvOOK_off(targ);
- Safefree(SvPVX(targ));
- SvPVX(targ) = SvPVX(dstr);
- SvCUR_set(targ, SvCUR(dstr));
- SvLEN_set(targ, SvLEN(dstr));
- isutf8 = DO_UTF8(dstr);
- SvPVX(dstr) = 0;
- sv_free(dstr);
-
- TAINT_IF(cx->sb_rxtainted & 1);
- PUSHs(sv_2mortal(newSViv((I32)cx->sb_iters - 1)));
-
- (void)SvPOK_only(targ);
- if (isutf8)
- SvUTF8_on(targ);
- TAINT_IF(cx->sb_rxtainted);
- SvSETMAGIC(targ);
- SvTAINT(targ);
-
- LEAVE_SCOPE(cx->sb_oldsave);
- POPSUBST(cx);
- RETURNOP(pm->op_next);
- }
- }
- if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
- m = s;
- s = orig;
- cx->sb_orig = orig = rx->subbeg;
- s = orig + (m - s);
- cx->sb_strend = s + (cx->sb_strend - m);
- }
- cx->sb_m = m = rx->startp[0] + orig;
- sv_catpvn(dstr, s, m-s);
- cx->sb_s = rx->endp[0] + orig;
- { /* Update the pos() information. */
- SV *sv = cx->sb_targ;
- MAGIC *mg;
- I32 i;
- if (SvTYPE(sv) < SVt_PVMG)
- SvUPGRADE(sv, SVt_PVMG);
- if (!(mg = mg_find(sv, 'g'))) {
- sv_magic(sv, Nullsv, 'g', Nullch, 0);
- mg = mg_find(sv, 'g');
- }
- i = m - orig;
- if (DO_UTF8(sv))
- sv_pos_b2u(sv, &i);
- mg->mg_len = i;
- }
- cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
- rxres_save(&cx->sb_rxres, rx);
- RETURNOP(pm->op_pmreplstart);
-}
-
-void
-Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx)
-{
- UV *p = (UV*)*rsp;
- U32 i;
-
- if (!p || p[1] < rx->nparens) {
- i = 6 + rx->nparens * 2;
- if (!p)
- New(501, p, i, UV);
- else
- Renew(p, i, UV);
- *rsp = (void*)p;
- }
-
- *p++ = PTR2UV(RX_MATCH_COPIED(rx) ? rx->subbeg : Nullch);
- RX_MATCH_COPIED_off(rx);
-
- *p++ = rx->nparens;
-
- *p++ = PTR2UV(rx->subbeg);
- *p++ = (UV)rx->sublen;
- for (i = 0; i <= rx->nparens; ++i) {
- *p++ = (UV)rx->startp[i];
- *p++ = (UV)rx->endp[i];
- }
-}
-
-void
-Perl_rxres_restore(pTHX_ void **rsp, REGEXP *rx)
-{
- UV *p = (UV*)*rsp;
- U32 i;
-
- if (RX_MATCH_COPIED(rx))
- Safefree(rx->subbeg);
- RX_MATCH_COPIED_set(rx, *p);
- *p++ = 0;
-
- rx->nparens = *p++;
-
- rx->subbeg = INT2PTR(char*,*p++);
- rx->sublen = (I32)(*p++);
- for (i = 0; i <= rx->nparens; ++i) {
- rx->startp[i] = (I32)(*p++);
- rx->endp[i] = (I32)(*p++);
- }
-}
-
-void
-Perl_rxres_free(pTHX_ void **rsp)
-{
- UV *p = (UV*)*rsp;
-
- if (p) {
- Safefree(INT2PTR(char*,*p));
- Safefree(p);
- *rsp = Null(void*);
- }
-}
-
-PP(pp_formline)
-{
- dSP; dMARK; dORIGMARK;
- register SV *tmpForm = *++MARK;
- register U16 *fpc;
- register char *t;
- register char *f;
- register char *s;
- register char *send;
- register I32 arg;
- register SV *sv;
- char *item;
- I32 itemsize;
- I32 fieldsize;
- I32 lines = 0;
- bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
- char *chophere;
- char *linemark;
- NV value;
- bool gotsome;
- STRLEN len;
- STRLEN fudge = SvCUR(tmpForm) * (IN_BYTE ? 1 : 3) + 1;
- bool item_is_utf = FALSE;
-
- if (!SvMAGICAL(tmpForm) || !SvCOMPILED(tmpForm)) {
- if (SvREADONLY(tmpForm)) {
- SvREADONLY_off(tmpForm);
- doparseform(tmpForm);
- SvREADONLY_on(tmpForm);
- }
- else
- doparseform(tmpForm);
- }
-
- SvPV_force(PL_formtarget, len);
- t = SvGROW(PL_formtarget, len + fudge + 1); /* XXX SvCUR bad */
- t += len;
- f = SvPV(tmpForm, len);
- /* need to jump to the next word */
- s = f + len + WORD_ALIGN - SvCUR(tmpForm) % WORD_ALIGN;
-
- fpc = (U16*)s;
-
- for (;;) {
- DEBUG_f( {
- char *name = "???";
- arg = -1;
- switch (*fpc) {
- case FF_LITERAL: arg = fpc[1]; name = "LITERAL"; break;
- case FF_BLANK: arg = fpc[1]; name = "BLANK"; break;
- case FF_SKIP: arg = fpc[1]; name = "SKIP"; break;
- case FF_FETCH: arg = fpc[1]; name = "FETCH"; break;
- case FF_DECIMAL: arg = fpc[1]; name = "DECIMAL"; break;
-
- case FF_CHECKNL: name = "CHECKNL"; break;
- case FF_CHECKCHOP: name = "CHECKCHOP"; break;
- case FF_SPACE: name = "SPACE"; break;
- case FF_HALFSPACE: name = "HALFSPACE"; break;
- case FF_ITEM: name = "ITEM"; break;
- case FF_CHOP: name = "CHOP"; break;
- case FF_LINEGLOB: name = "LINEGLOB"; break;
- case FF_NEWLINE: name = "NEWLINE"; break;
- case FF_MORE: name = "MORE"; break;
- case FF_LINEMARK: name = "LINEMARK"; break;
- case FF_END: name = "END"; break;
- }
- if (arg >= 0)
- PerlIO_printf(Perl_debug_log, "%-16s%ld\n", name, (long) arg);
- else
- PerlIO_printf(Perl_debug_log, "%-16s\n", name);
- } )
- switch (*fpc++) {
- case FF_LINEMARK:
- linemark = t;
- lines++;
- gotsome = FALSE;
- break;
-
- case FF_LITERAL:
- arg = *fpc++;
- while (arg--)
- *t++ = *f++;
- break;
-
- case FF_SKIP:
- f += *fpc++;
- break;
-
- case FF_FETCH:
- arg = *fpc++;
- f += arg;
- fieldsize = arg;
-
- if (MARK < SP)
- sv = *++MARK;
- else {
- sv = &PL_sv_no;
- if (ckWARN(WARN_SYNTAX))
- Perl_warner(aTHX_ WARN_SYNTAX, "Not enough format arguments");
- }
- break;
-
- case FF_CHECKNL:
- item = s = SvPV(sv, len);
- itemsize = len;
- if (DO_UTF8(sv)) {
- itemsize = sv_len_utf8(sv);
- if (itemsize != len) {
- I32 itembytes;
- if (itemsize > fieldsize) {
- itemsize = fieldsize;
- itembytes = itemsize;
- sv_pos_u2b(sv, &itembytes, 0);
- }
- else
- itembytes = len;
- send = chophere = s + itembytes;
- while (s < send) {
- if (*s & ~31)
- gotsome = TRUE;
- else if (*s == '\n')
- break;
- s++;
- }
- item_is_utf = TRUE;
- itemsize = s - item;
- sv_pos_b2u(sv, &itemsize);
- break;
- }
- }
- item_is_utf = FALSE;
- if (itemsize > fieldsize)
- itemsize = fieldsize;
- send = chophere = s + itemsize;
- while (s < send) {
- if (*s & ~31)
- gotsome = TRUE;
- else if (*s == '\n')
- break;
- s++;
- }
- itemsize = s - item;
- break;
-
- case FF_CHECKCHOP:
- item = s = SvPV(sv, len);
- itemsize = len;
- if (DO_UTF8(sv)) {
- itemsize = sv_len_utf8(sv);
- if (itemsize != len) {
- I32 itembytes;
- if (itemsize <= fieldsize) {
- send = chophere = s + itemsize;
- while (s < send) {
- if (*s == '\r') {
- itemsize = s - item;
- break;
- }
- if (*s++ & ~31)
- gotsome = TRUE;
- }
- }
- else {
- itemsize = fieldsize;
- itembytes = itemsize;
- sv_pos_u2b(sv, &itembytes, 0);
- send = chophere = s + itembytes;
- while (s < send || (s == send && isSPACE(*s))) {
- if (isSPACE(*s)) {
- if (chopspace)
- chophere = s;
- if (*s == '\r')
- break;
- }
- else {
- if (*s & ~31)
- gotsome = TRUE;
- if (strchr(PL_chopset, *s))
- chophere = s + 1;
- }
- s++;
- }
- itemsize = chophere - item;
- sv_pos_b2u(sv, &itemsize);
- }
- item_is_utf = TRUE;
- break;
- }
- }
- item_is_utf = FALSE;
- if (itemsize <= fieldsize) {
- send = chophere = s + itemsize;
- while (s < send) {
- if (*s == '\r') {
- itemsize = s - item;
- break;
- }
- if (*s++ & ~31)
- gotsome = TRUE;
- }
- }
- else {
- itemsize = fieldsize;
- send = chophere = s + itemsize;
- while (s < send || (s == send && isSPACE(*s))) {
- if (isSPACE(*s)) {
- if (chopspace)
- chophere = s;
- if (*s == '\r')
- break;
- }
- else {
- if (*s & ~31)
- gotsome = TRUE;
- if (strchr(PL_chopset, *s))
- chophere = s + 1;
- }
- s++;
- }
- itemsize = chophere - item;
- }
- break;
-
- case FF_SPACE:
- arg = fieldsize - itemsize;
- if (arg) {
- fieldsize -= arg;
- while (arg-- > 0)
- *t++ = ' ';
- }
- break;
-
- case FF_HALFSPACE:
- arg = fieldsize - itemsize;
- if (arg) {
- arg /= 2;
- fieldsize -= arg;
- while (arg-- > 0)
- *t++ = ' ';
- }
- break;
-
- case FF_ITEM:
- arg = itemsize;
- s = item;
- if (item_is_utf) {
- while (arg--) {
- if (UTF8_IS_CONTINUED(*s)) {
- switch (UTF8SKIP(s)) {
- case 7: *t++ = *s++;
- case 6: *t++ = *s++;
- case 5: *t++ = *s++;
- case 4: *t++ = *s++;
- case 3: *t++ = *s++;
- case 2: *t++ = *s++;
- case 1: *t++ = *s++;
- }
- }
- else {
- if ( !((*t++ = *s++) & ~31) )
- t[-1] = ' ';
- }
- }
- break;
- }
- while (arg--) {
-#ifdef EBCDIC
- int ch = *t++ = *s++;
- if (iscntrl(ch))
-#else
- if ( !((*t++ = *s++) & ~31) )
-#endif
- t[-1] = ' ';
- }
- break;
-
- case FF_CHOP:
- s = chophere;
- if (chopspace) {
- while (*s && isSPACE(*s))
- s++;
- }
- sv_chop(sv,s);
- break;
-
- case FF_LINEGLOB:
- item = s = SvPV(sv, len);
- itemsize = len;
- item_is_utf = FALSE; /* XXX is this correct? */
- if (itemsize) {
- gotsome = TRUE;
- send = s + itemsize;
- while (s < send) {
- if (*s++ == '\n') {
- if (s == send)
- itemsize--;
- else
- lines++;
- }
- }
- SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
- sv_catpvn(PL_formtarget, item, itemsize);
- SvGROW(PL_formtarget, SvCUR(PL_formtarget) + fudge + 1);
- t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
- }
- break;
-
- case FF_DECIMAL:
- /* If the field is marked with ^ and the value is undefined,
- blank it out. */
- arg = *fpc++;
- if ((arg & 512) && !SvOK(sv)) {
- arg = fieldsize;
- while (arg--)
- *t++ = ' ';
- break;
- }
- gotsome = TRUE;
- value = SvNV(sv);
- /* Formats aren't yet marked for locales, so assume "yes". */
- {
- STORE_NUMERIC_STANDARD_SET_LOCAL();
-#if defined(USE_LONG_DOUBLE)
- if (arg & 256) {
- sprintf(t, "%#*.*" PERL_PRIfldbl,
- (int) fieldsize, (int) arg & 255, value);
- } else {
- sprintf(t, "%*.0" PERL_PRIfldbl, (int) fieldsize, value);
- }
-#else
- if (arg & 256) {
- sprintf(t, "%#*.*f",
- (int) fieldsize, (int) arg & 255, value);
- } else {
- sprintf(t, "%*.0f",
- (int) fieldsize, value);
- }
-#endif
- RESTORE_NUMERIC_STANDARD();
- }
- t += fieldsize;
- break;
-
- case FF_NEWLINE:
- f++;
- while (t-- > linemark && *t == ' ') ;
- t++;
- *t++ = '\n';
- break;
-
- case FF_BLANK:
- arg = *fpc++;
- if (gotsome) {
- if (arg) { /* repeat until fields exhausted? */
- *t = '\0';
- SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
- lines += FmLINES(PL_formtarget);
- if (lines == 200) {
- arg = t - linemark;
- if (strnEQ(linemark, linemark - arg, arg))
- DIE(aTHX_ "Runaway format");
- }
- FmLINES(PL_formtarget) = lines;
- SP = ORIGMARK;
- RETURNOP(cLISTOP->op_first);
- }
- }
- else {
- t = linemark;
- lines--;
- }
- break;
-
- case FF_MORE:
- s = chophere;
- send = item + len;
- if (chopspace) {
- while (*s && isSPACE(*s) && s < send)
- s++;
- }
- if (s < send) {
- arg = fieldsize - itemsize;
- if (arg) {
- fieldsize -= arg;
- while (arg-- > 0)
- *t++ = ' ';
- }
- s = t - 3;
- if (strnEQ(s," ",3)) {
- while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
- s--;
- }
- *s++ = '.';
- *s++ = '.';
- *s++ = '.';
- }
- break;
-
- case FF_END:
- *t = '\0';
- SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
- FmLINES(PL_formtarget) += lines;
- SP = ORIGMARK;
- RETPUSHYES;
- }
- }
-}
-
-PP(pp_grepstart)
-{
- dSP;
- SV *src;
-
- if (PL_stack_base + *PL_markstack_ptr == SP) {
- (void)POPMARK;
- if (GIMME_V == G_SCALAR)
- XPUSHs(sv_2mortal(newSViv(0)));
- RETURNOP(PL_op->op_next->op_next);
- }
- PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
- pp_pushmark(); /* push dst */
- pp_pushmark(); /* push src */
- ENTER; /* enter outer scope */
-
- SAVETMPS;
- /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
- SAVESPTR(DEFSV);
- ENTER; /* enter inner scope */
- SAVEVPTR(PL_curpm);
-
- src = PL_stack_base[*PL_markstack_ptr];
- SvTEMP_off(src);
- DEFSV = src;
-
- PUTBACK;
- if (PL_op->op_type == OP_MAPSTART)
- pp_pushmark(); /* push top */
- return ((LOGOP*)PL_op->op_next)->op_other;
-}
-
-PP(pp_mapstart)
-{
- DIE(aTHX_ "panic: mapstart"); /* uses grepstart */
-}
-
-PP(pp_mapwhile)
-{
- dSP;
- I32 items = (SP - PL_stack_base) - *PL_markstack_ptr; /* how many new items */
- I32 count;
- I32 shift;
- SV** src;
- SV** dst;
-
- /* first, move source pointer to the next item in the source list */
- ++PL_markstack_ptr[-1];
-
- /* if there are new items, push them into the destination list */
- if (items) {
- /* might need to make room back there first */
- if (items > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
- /* XXX this implementation is very pessimal because the stack
- * is repeatedly extended for every set of items. Is possible
- * to do this without any stack extension or copying at all
- * by maintaining a separate list over which the map iterates
- * (like foreach does). --gsar */
-
- /* everything in the stack after the destination list moves
- * towards the end the stack by the amount of room needed */
- shift = items - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
-
- /* items to shift up (accounting for the moved source pointer) */
- count = (SP - PL_stack_base) - (PL_markstack_ptr[-1] - 1);
-
- /* This optimization is by Ben Tilly and it does
- * things differently from what Sarathy (gsar)
- * is describing. The downside of this optimization is
- * that leaves "holes" (uninitialized and hopefully unused areas)
- * to the Perl stack, but on the other hand this
- * shouldn't be a problem. If Sarathy's idea gets
- * implemented, this optimization should become
- * irrelevant. --jhi */
- if (shift < count)
- shift = count; /* Avoid shifting too often --Ben Tilly */
-
- EXTEND(SP,shift);
- src = SP;
- dst = (SP += shift);
- PL_markstack_ptr[-1] += shift;
- *PL_markstack_ptr += shift;
- while (count--)
- *dst-- = *src--;
- }
- /* copy the new items down to the destination list */
- dst = PL_stack_base + (PL_markstack_ptr[-2] += items) - 1;
- while (items--)
- *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs);
- }
- LEAVE; /* exit inner scope */
-
- /* All done yet? */
- if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
- I32 gimme = GIMME_V;
-
- (void)POPMARK; /* pop top */
- LEAVE; /* exit outer scope */
- (void)POPMARK; /* pop src */
- items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
- (void)POPMARK; /* pop dst */
- SP = PL_stack_base + POPMARK; /* pop original mark */
- if (gimme == G_SCALAR) {
- dTARGET;
- XPUSHi(items);
- }
- else if (gimme == G_ARRAY)
- SP += items;
- RETURN;
- }
- else {
- SV *src;
-
- ENTER; /* enter inner scope */
- SAVEVPTR(PL_curpm);
-
- /* set $_ to the new source item */
- src = PL_stack_base[PL_markstack_ptr[-1]];
- SvTEMP_off(src);
- DEFSV = src;
-
- RETURNOP(cLOGOP->op_other);
- }
-}
-
-PP(pp_sort)
-{
- dSP; dMARK; dORIGMARK;
- register SV **up;
- SV **myorigmark = ORIGMARK;
- register I32 max;
- HV *stash;
- GV *gv;
- CV *cv;
- I32 gimme = GIMME;
- OP* nextop = PL_op->op_next;
- I32 overloading = 0;
- bool hasargs = FALSE;
- I32 is_xsub = 0;
-
- if (gimme != G_ARRAY) {
- SP = MARK;
- RETPUSHUNDEF;
- }
-
- ENTER;
- SAVEVPTR(PL_sortcop);
- if (PL_op->op_flags & OPf_STACKED) {
- if (PL_op->op_flags & OPf_SPECIAL) {
- OP *kid = cLISTOP->op_first->op_sibling; /* pass pushmark */
- kid = kUNOP->op_first; /* pass rv2gv */
- kid = kUNOP->op_first; /* pass leave */
- PL_sortcop = kid->op_next;
- stash = CopSTASH(PL_curcop);
- }
- else {
- cv = sv_2cv(*++MARK, &stash, &gv, 0);
- if (cv && SvPOK(cv)) {
- STRLEN n_a;
- char *proto = SvPV((SV*)cv, n_a);
- if (proto && strEQ(proto, "$$")) {
- hasargs = TRUE;
- }
- }
- if (!(cv && CvROOT(cv))) {
- if (cv && CvXSUB(cv)) {
- is_xsub = 1;
- }
- else if (gv) {
- SV *tmpstr = sv_newmortal();
- gv_efullname3(tmpstr, gv, Nullch);
- DIE(aTHX_ "Undefined sort subroutine \"%s\" called",
- SvPVX(tmpstr));
- }
- else {
- DIE(aTHX_ "Undefined subroutine in sort");
- }
- }
-
- if (is_xsub)
- PL_sortcop = (OP*)cv;
- else {
- PL_sortcop = CvSTART(cv);
- SAVEVPTR(CvROOT(cv)->op_ppaddr);
- CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL];
-
- SAVEVPTR(PL_curpad);
- PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
- }
- }
- }
- else {
- PL_sortcop = Nullop;
- stash = CopSTASH(PL_curcop);
- }
-
- up = myorigmark + 1;
- while (MARK < SP) { /* This may or may not shift down one here. */
- /*SUPPRESS 560*/
- if ((*up = *++MARK)) { /* Weed out nulls. */
- SvTEMP_off(*up);
- if (!PL_sortcop && !SvPOK(*up)) {
- STRLEN n_a;
- if (SvAMAGIC(*up))
- overloading = 1;
- else
- (void)sv_2pv(*up, &n_a);
- }
- up++;
- }
- }
- max = --up - myorigmark;
- if (PL_sortcop) {
- if (max > 1) {
- PERL_CONTEXT *cx;
- SV** newsp;
- bool oldcatch = CATCH_GET;
-
- SAVETMPS;
- SAVEOP();
-
- CATCH_SET(TRUE);
- PUSHSTACKi(PERLSI_SORT);
- if (!hasargs && !is_xsub) {
- if (PL_sortstash != stash || !PL_firstgv || !PL_secondgv) {
- SAVESPTR(PL_firstgv);
- SAVESPTR(PL_secondgv);
- PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
- PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
- PL_sortstash = stash;
- }
-#ifdef USE_THREADS
- sv_lock((SV *)PL_firstgv);
- sv_lock((SV *)PL_secondgv);
-#endif
- SAVESPTR(GvSV(PL_firstgv));
- SAVESPTR(GvSV(PL_secondgv));
- }
-
- PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
- if (!(PL_op->op_flags & OPf_SPECIAL)) {
- cx->cx_type = CXt_SUB;
- cx->blk_gimme = G_SCALAR;
- PUSHSUB(cx);
- if (!CvDEPTH(cv))
- (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
- }
- PL_sortcxix = cxstack_ix;
-
- if (hasargs && !is_xsub) {
- /* This is mostly copied from pp_entersub */
- AV *av = (AV*)PL_curpad[0];
-
-#ifndef USE_THREADS
- cx->blk_sub.savearray = GvAV(PL_defgv);
- GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
-#endif /* USE_THREADS */
- cx->blk_sub.oldcurpad = PL_curpad;
- cx->blk_sub.argarray = av;
- }
- qsortsv((myorigmark+1), max,
- is_xsub ? sortcv_xsub : hasargs ? sortcv_stacked : sortcv);
-
- POPBLOCK(cx,PL_curpm);
- PL_stack_sp = newsp;
- POPSTACK;
- CATCH_SET(oldcatch);
- }
- }
- else {
- if (max > 1) {
- MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
- qsortsv(ORIGMARK+1, max,
- (PL_op->op_private & OPpSORT_NUMERIC)
- ? ( (PL_op->op_private & OPpSORT_INTEGER)
- ? ( overloading ? amagic_i_ncmp : sv_i_ncmp)
- : ( overloading ? amagic_ncmp : sv_ncmp))
- : ( (PL_op->op_private & OPpLOCALE)
- ? ( overloading
- ? amagic_cmp_locale
- : sv_cmp_locale_static)
- : ( overloading ? amagic_cmp : sv_cmp_static)));
- if (PL_op->op_private & OPpSORT_REVERSE) {
- SV **p = ORIGMARK+1;
- SV **q = ORIGMARK+max;
- while (p < q) {
- SV *tmp = *p;
- *p++ = *q;
- *q-- = tmp;
- }
- }
- }
- }
- LEAVE;
- PL_stack_sp = ORIGMARK + max;
- return nextop;
-}
-
-/* Range stuff. */
-
-PP(pp_range)
-{
- if (GIMME == G_ARRAY)
- return NORMAL;
- if (SvTRUEx(PAD_SV(PL_op->op_targ)))
- return cLOGOP->op_other;
- else
- return NORMAL;
-}
-
-PP(pp_flip)
-{
- dSP;
-
- if (GIMME == G_ARRAY) {
- RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
- }
- else {
- dTOPss;
- SV *targ = PAD_SV(PL_op->op_targ);
- int flip;
-
- if (PL_op->op_private & OPpFLIP_LINENUM) {
- struct io *gp_io;
- flip = PL_last_in_gv
- && (gp_io = GvIOp(PL_last_in_gv))
- && SvIV(sv) == (IV)IoLINES(gp_io);
- } else {
- flip = SvTRUE(sv);
- }
- if (flip) {
- sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
- if (PL_op->op_flags & OPf_SPECIAL) {
- sv_setiv(targ, 1);
- SETs(targ);
- RETURN;
- }
- else {
- sv_setiv(targ, 0);
- SP--;
- RETURNOP(((LOGOP*)cUNOP->op_first)->op_other);
- }
- }
- sv_setpv(TARG, "");
- SETs(targ);
- RETURN;
- }
-}
-
-PP(pp_flop)
-{
- dSP;
-
- if (GIMME == G_ARRAY) {
- dPOPPOPssrl;
- register I32 i, j;
- register SV *sv;
- I32 max;
-
- if (SvGMAGICAL(left))
- mg_get(left);
- if (SvGMAGICAL(right))
- mg_get(right);
-
- if (SvNIOKp(left) || !SvPOKp(left) ||
- SvNIOKp(right) || !SvPOKp(right) ||
- (looks_like_number(left) && *SvPVX(left) != '0' &&
- looks_like_number(right) && *SvPVX(right) != '0'))
- {
- if (SvNV(left) < IV_MIN || SvNV(right) > IV_MAX)
- DIE(aTHX_ "Range iterator outside integer range");
- i = SvIV(left);
- max = SvIV(right);
- if (max >= i) {
- j = max - i + 1;
- EXTEND_MORTAL(j);
- EXTEND(SP, j);
- }
- else
- j = 0;
- while (j--) {
- sv = sv_2mortal(newSViv(i++));
- PUSHs(sv);
- }
- }
- else {
- SV *final = sv_mortalcopy(right);
- STRLEN len, n_a;
- char *tmps = SvPV(final, len);
-
- sv = sv_mortalcopy(left);
- SvPV_force(sv,n_a);
- while (!SvNIOKp(sv) && SvCUR(sv) <= len) {
- XPUSHs(sv);
- if (strEQ(SvPVX(sv),tmps))
- break;
- sv = sv_2mortal(newSVsv(sv));
- sv_inc(sv);
- }
- }
- }
- else {
- dTOPss;
- SV *targ = PAD_SV(cUNOP->op_first->op_targ);
- sv_inc(targ);
- if ((PL_op->op_private & OPpFLIP_LINENUM)
- ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
- : SvTRUE(sv) ) {
- sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
- sv_catpv(targ, "E0");
- }
- SETs(targ);
- }
-
- RETURN;
-}
-
-/* Control. */
-
-STATIC I32
-S_dopoptolabel(pTHX_ char *label)
-{
- register I32 i;
- register PERL_CONTEXT *cx;
-
- for (i = cxstack_ix; i >= 0; i--) {
- cx = &cxstack[i];
- switch (CxTYPE(cx)) {
- case CXt_SUBST:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
- PL_op_name[PL_op->op_type]);
- break;
- case CXt_SUB:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
- PL_op_name[PL_op->op_type]);
- break;
- case CXt_FORMAT:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
- PL_op_name[PL_op->op_type]);
- break;
- case CXt_EVAL:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
- PL_op_name[PL_op->op_type]);
- break;
- case CXt_NULL:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
- PL_op_name[PL_op->op_type]);
- return -1;
- case CXt_LOOP:
- if (!cx->blk_loop.label ||
- strNE(label, cx->blk_loop.label) ) {
- DEBUG_l(Perl_deb(aTHX_ "(Skipping label #%ld %s)\n",
- (long)i, cx->blk_loop.label));
- continue;
- }
- DEBUG_l( Perl_deb(aTHX_ "(Found label #%ld %s)\n", (long)i, label));
- return i;
- }
- }
- return i;
-}
-
-I32
-Perl_dowantarray(pTHX)
-{
- I32 gimme = block_gimme();
- return (gimme == G_VOID) ? G_SCALAR : gimme;
-}
-
-I32
-Perl_block_gimme(pTHX)
-{
- I32 cxix;
-
- cxix = dopoptosub(cxstack_ix);
- if (cxix < 0)
- return G_VOID;
-
- switch (cxstack[cxix].blk_gimme) {
- case G_VOID:
- return G_VOID;
- case G_SCALAR:
- return G_SCALAR;
- case G_ARRAY:
- return G_ARRAY;
- default:
- Perl_croak(aTHX_ "panic: bad gimme: %d\n", cxstack[cxix].blk_gimme);
- /* NOTREACHED */
- return 0;
- }
-}
-
-I32
-Perl_is_lvalue_sub(pTHX)
-{
- I32 cxix;
-
- cxix = dopoptosub(cxstack_ix);
- assert(cxix >= 0); /* We should only be called from inside subs */
-
- if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
- return cxstack[cxix].blk_sub.lval;
- else
- return 0;
-}
-
-STATIC I32
-S_dopoptosub(pTHX_ I32 startingblock)
-{
- return dopoptosub_at(cxstack, startingblock);
-}
-
-STATIC I32
-S_dopoptosub_at(pTHX_ PERL_CONTEXT *cxstk, I32 startingblock)
-{
- I32 i;
- register PERL_CONTEXT *cx;
- for (i = startingblock; i >= 0; i--) {
- cx = &cxstk[i];
- switch (CxTYPE(cx)) {
- default:
- continue;
- case CXt_EVAL:
- case CXt_SUB:
- case CXt_FORMAT:
- DEBUG_l( Perl_deb(aTHX_ "(Found sub #%ld)\n", (long)i));
- return i;
- }
- }
- return i;
-}
-
-STATIC I32
-S_dopoptoeval(pTHX_ I32 startingblock)
-{
- I32 i;
- register PERL_CONTEXT *cx;
- for (i = startingblock; i >= 0; i--) {
- cx = &cxstack[i];
- switch (CxTYPE(cx)) {
- default:
- continue;
- case CXt_EVAL:
- DEBUG_l( Perl_deb(aTHX_ "(Found eval #%ld)\n", (long)i));
- return i;
- }
- }
- return i;
-}
-
-STATIC I32
-S_dopoptoloop(pTHX_ I32 startingblock)
-{
- I32 i;
- register PERL_CONTEXT *cx;
- for (i = startingblock; i >= 0; i--) {
- cx = &cxstack[i];
- switch (CxTYPE(cx)) {
- case CXt_SUBST:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting substitution via %s",
- PL_op_name[PL_op->op_type]);
- break;
- case CXt_SUB:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting subroutine via %s",
- PL_op_name[PL_op->op_type]);
- break;
- case CXt_FORMAT:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting format via %s",
- PL_op_name[PL_op->op_type]);
- break;
- case CXt_EVAL:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting eval via %s",
- PL_op_name[PL_op->op_type]);
- break;
- case CXt_NULL:
- if (ckWARN(WARN_EXITING))
- Perl_warner(aTHX_ WARN_EXITING, "Exiting pseudo-block via %s",
- PL_op_name[PL_op->op_type]);
- return -1;
- case CXt_LOOP:
- DEBUG_l( Perl_deb(aTHX_ "(Found loop #%ld)\n", (long)i));
- return i;
- }
- }
- return i;
-}
-
-void
-Perl_dounwind(pTHX_ I32 cxix)
-{
- register PERL_CONTEXT *cx;
- I32 optype;
-
- while (cxstack_ix > cxix) {
- SV *sv;
- cx = &cxstack[cxstack_ix];
- DEBUG_l(PerlIO_printf(Perl_debug_log, "Unwinding block %ld, type %s\n",
- (long) cxstack_ix, PL_block_type[CxTYPE(cx)]));
- /* Note: we don't need to restore the base context info till the end. */
- switch (CxTYPE(cx)) {
- case CXt_SUBST:
- POPSUBST(cx);
- continue; /* not break */
- case CXt_SUB:
- POPSUB(cx,sv);
- LEAVESUB(sv);
- break;
- case CXt_EVAL:
- POPEVAL(cx);
- break;
- case CXt_LOOP:
- POPLOOP(cx);
- break;
- case CXt_NULL:
- break;
- case CXt_FORMAT:
- POPFORMAT(cx);
- break;
- }
- cxstack_ix--;
- }
-}
-
-void
-Perl_qerror(pTHX_ SV *err)
-{
- if (PL_in_eval)
- sv_catsv(ERRSV, err);
- else if (PL_errors)
- sv_catsv(PL_errors, err);
- else
- Perl_warn(aTHX_ "%"SVf, err);
- ++PL_error_count;
-}
-
-OP *
-Perl_die_where(pTHX_ char *message, STRLEN msglen)
-{
- STRLEN n_a;
- if (PL_in_eval) {
- I32 cxix;
- register PERL_CONTEXT *cx;
- I32 gimme;
- SV **newsp;
-
- if (message) {
- if (PL_in_eval & EVAL_KEEPERR) {
- static char prefix[] = "\t(in cleanup) ";
- SV *err = ERRSV;
- char *e = Nullch;
- if (!SvPOK(err))
- sv_setpv(err,"");
- else if (SvCUR(err) >= sizeof(prefix)+msglen-1) {
- e = SvPV(err, n_a);
- e += n_a - msglen;
- if (*e != *message || strNE(e,message))
- e = Nullch;
- }
- if (!e) {
- SvGROW(err, SvCUR(err)+sizeof(prefix)+msglen);
- sv_catpvn(err, prefix, sizeof(prefix)-1);
- sv_catpvn(err, message, msglen);
- if (ckWARN(WARN_MISC)) {
- STRLEN start = SvCUR(err)-msglen-sizeof(prefix)+1;
- Perl_warner(aTHX_ WARN_MISC, SvPVX(err)+start);
- }
- }
- }
- else
- sv_setpvn(ERRSV, message, msglen);
- }
- else
- message = SvPVx(ERRSV, msglen);
-
- while ((cxix = dopoptoeval(cxstack_ix)) < 0
- && PL_curstackinfo->si_prev)
- {
- dounwind(-1);
- POPSTACK;
- }
-
- if (cxix >= 0) {
- I32 optype;
-
- if (cxix < cxstack_ix)
- dounwind(cxix);
-
- POPBLOCK(cx,PL_curpm);
- if (CxTYPE(cx) != CXt_EVAL) {
- PerlIO_write(Perl_error_log, "panic: die ", 11);
- PerlIO_write(Perl_error_log, message, msglen);
- my_exit(1);
- }
- POPEVAL(cx);
-
- if (gimme == G_SCALAR)
- *++newsp = &PL_sv_undef;
- PL_stack_sp = newsp;
-
- LEAVE;
-
- /* LEAVE could clobber PL_curcop (see save_re_context())
- * XXX it might be better to find a way to avoid messing with
- * PL_curcop in save_re_context() instead, but this is a more
- * minimal fix --GSAR */
- PL_curcop = cx->blk_oldcop;
-
- if (optype == OP_REQUIRE) {
- char* msg = SvPVx(ERRSV, n_a);
- DIE(aTHX_ "%sCompilation failed in require",
- *msg ? msg : "Unknown error\n");
- }
- return pop_return();
- }
- }
- if (!message)
- message = SvPVx(ERRSV, msglen);
- {
-#ifdef USE_SFIO
- /* SFIO can really mess with your errno */
- int e = errno;
-#endif
- PerlIO *serr = Perl_error_log;
-
- PerlIO_write(serr, message, msglen);
- (void)PerlIO_flush(serr);
-#ifdef USE_SFIO
- errno = e;
-#endif
- }
- my_failure_exit();
- /* NOTREACHED */
- return 0;
-}
-
-PP(pp_xor)
-{
- dSP; dPOPTOPssrl;
- if (SvTRUE(left) != SvTRUE(right))
- RETSETYES;
- else
- RETSETNO;
-}
-
-PP(pp_andassign)
-{
- dSP;
- if (!SvTRUE(TOPs))
- RETURN;
- else
- RETURNOP(cLOGOP->op_other);
-}
-
-PP(pp_orassign)
-{
- dSP;
- if (SvTRUE(TOPs))
- RETURN;
- else
- RETURNOP(cLOGOP->op_other);
-}
-
-PP(pp_caller)
-{
- dSP;
- register I32 cxix = dopoptosub(cxstack_ix);
- register PERL_CONTEXT *cx;
- register PERL_CONTEXT *ccstack = cxstack;
- PERL_SI *top_si = PL_curstackinfo;
- I32 dbcxix;
- I32 gimme;
- char *stashname;
- SV *sv;
- I32 count = 0;
-
- if (MAXARG)
- count = POPi;
- EXTEND(SP, 10);
- for (;;) {
- /* we may be in a higher stacklevel, so dig down deeper */
- while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
- top_si = top_si->si_prev;
- ccstack = top_si->si_cxstack;
- cxix = dopoptosub_at(ccstack, top_si->si_cxix);
- }
- if (cxix < 0) {
- if (GIMME != G_ARRAY)
- RETPUSHUNDEF;
- RETURN;
- }
- if (PL_DBsub && cxix >= 0 &&
- ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
- count++;
- if (!count--)
- break;
- cxix = dopoptosub_at(ccstack, cxix - 1);
- }
-
- cx = &ccstack[cxix];
- if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
- dbcxix = dopoptosub_at(ccstack, cxix - 1);
- /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
- field below is defined for any cx. */
- if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
- cx = &ccstack[dbcxix];
- }
-
- stashname = CopSTASHPV(cx->blk_oldcop);
- if (GIMME != G_ARRAY) {
- if (!stashname)
- PUSHs(&PL_sv_undef);
- else {
- dTARGET;
- sv_setpv(TARG, stashname);
- PUSHs(TARG);
- }
- RETURN;
- }
-
- if (!stashname)
- PUSHs(&PL_sv_undef);
- else
- PUSHs(sv_2mortal(newSVpv(stashname, 0)));
- PUSHs(sv_2mortal(newSVpv(CopFILE(cx->blk_oldcop), 0)));
- PUSHs(sv_2mortal(newSViv((I32)CopLINE(cx->blk_oldcop))));
- if (!MAXARG)
- RETURN;
- if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
- /* So is ccstack[dbcxix]. */
- sv = NEWSV(49, 0);
- gv_efullname3(sv, CvGV(ccstack[cxix].blk_sub.cv), Nullch);
- PUSHs(sv_2mortal(sv));
- PUSHs(sv_2mortal(newSViv((I32)cx->blk_sub.hasargs)));
- }
- else {
- PUSHs(sv_2mortal(newSVpvn("(eval)",6)));
- PUSHs(sv_2mortal(newSViv(0)));
- }
- gimme = (I32)cx->blk_gimme;
- if (gimme == G_VOID)
- PUSHs(&PL_sv_undef);
- else
- PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
- if (CxTYPE(cx) == CXt_EVAL) {
- /* eval STRING */
- if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
- PUSHs(cx->blk_eval.cur_text);
- PUSHs(&PL_sv_no);
- }
- /* require */
- else if (cx->blk_eval.old_namesv) {
- PUSHs(sv_2mortal(newSVsv(cx->blk_eval.old_namesv)));
- PUSHs(&PL_sv_yes);
- }
- /* eval BLOCK (try blocks have old_namesv == 0) */
- else {
- PUSHs(&PL_sv_undef);
- PUSHs(&PL_sv_undef);
- }
- }
- else {
- PUSHs(&PL_sv_undef);
- PUSHs(&PL_sv_undef);
- }
- if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs
- && CopSTASH_eq(PL_curcop, PL_debstash))
- {
- AV *ary = cx->blk_sub.argarray;
- int off = AvARRAY(ary) - AvALLOC(ary);
-
- if (!PL_dbargs) {
- GV* tmpgv;
- PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
- SVt_PVAV)));
- GvMULTI_on(tmpgv);
- AvREAL_off(PL_dbargs); /* XXX should be REIFY (see av.h) */
- }
-
- if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
- av_extend(PL_dbargs, AvFILLp(ary) + off);
- Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
- AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
- }
- /* XXX only hints propagated via op_private are currently
- * visible (others are not easily accessible, since they
- * use the global PL_hints) */
- PUSHs(sv_2mortal(newSViv((I32)cx->blk_oldcop->op_private &
- HINT_PRIVATE_MASK)));
- {
- SV * mask ;
- SV * old_warnings = cx->blk_oldcop->cop_warnings ;
-
- if (old_warnings == pWARN_NONE ||
- (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0))
- mask = newSVpvn(WARN_NONEstring, WARNsize) ;
- else if (old_warnings == pWARN_ALL ||
- (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON))
- mask = newSVpvn(WARN_ALLstring, WARNsize) ;
- else
- mask = newSVsv(old_warnings);
- PUSHs(sv_2mortal(mask));
- }
- RETURN;
-}
-
-PP(pp_reset)
-{
- dSP;
- char *tmps;
- STRLEN n_a;
-
- if (MAXARG < 1)
- tmps = "";
- else
- tmps = POPpx;
- sv_reset(tmps, CopSTASH(PL_curcop));
- PUSHs(&PL_sv_yes);
- RETURN;
-}
-
-PP(pp_lineseq)
-{
- return NORMAL;
-}
-
-PP(pp_dbstate)
-{
- PL_curcop = (COP*)PL_op;
- TAINT_NOT; /* Each statement is presumed innocent */
- PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
- FREETMPS;
-
- if (PL_op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
- {
- dSP;
- register CV *cv;
- register PERL_CONTEXT *cx;
- I32 gimme = G_ARRAY;
- I32 hasargs;
- GV *gv;
-
- gv = PL_DBgv;
- cv = GvCV(gv);
- if (!cv)
- DIE(aTHX_ "No DB::DB routine defined");
-
- if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
- return NORMAL;
-
- ENTER;
- SAVETMPS;
-
- SAVEI32(PL_debug);
- SAVESTACK_POS();
- PL_debug = 0;
- hasargs = 0;
- SPAGAIN;
-
- push_return(PL_op->op_next);
- PUSHBLOCK(cx, CXt_SUB, SP);
- PUSHSUB(cx);
- CvDEPTH(cv)++;
- (void)SvREFCNT_inc(cv);
- SAVEVPTR(PL_curpad);
- PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
- RETURNOP(CvSTART(cv));
- }
- else
- return NORMAL;
-}
-
-PP(pp_scope)
-{
- return NORMAL;
-}
-
-PP(pp_enteriter)
-{
- dSP; dMARK;
- register PERL_CONTEXT *cx;
- I32 gimme = GIMME_V;
- SV **svp;
- U32 cxtype = CXt_LOOP;
-#ifdef USE_ITHREADS
- void *iterdata;
-#endif
-
- ENTER;
- SAVETMPS;
-
-#ifdef USE_THREADS
- if (PL_op->op_flags & OPf_SPECIAL) {
- svp = &THREADSV(PL_op->op_targ); /* per-thread variable */
- SAVEGENERICSV(*svp);
- *svp = NEWSV(0,0);
- }
- else
-#endif /* USE_THREADS */
- if (PL_op->op_targ) {
-#ifndef USE_ITHREADS
- svp = &PL_curpad[PL_op->op_targ]; /* "my" variable */
- SAVESPTR(*svp);
-#else
- SAVEPADSV(PL_op->op_targ);
- iterdata = (void*)PL_op->op_targ;
- cxtype |= CXp_PADVAR;
-#endif
- }
- else {
- GV *gv = (GV*)POPs;
- svp = &GvSV(gv); /* symbol table variable */
- SAVEGENERICSV(*svp);
- *svp = NEWSV(0,0);
-#ifdef USE_ITHREADS
- iterdata = (void*)gv;
-#endif
- }
-
- ENTER;
-
- PUSHBLOCK(cx, cxtype, SP);
-#ifdef USE_ITHREADS
- PUSHLOOP(cx, iterdata, MARK);
-#else
- PUSHLOOP(cx, svp, MARK);
-#endif
- if (PL_op->op_flags & OPf_STACKED) {
- cx->blk_loop.iterary = (AV*)SvREFCNT_inc(POPs);
- if (SvTYPE(cx->blk_loop.iterary) != SVt_PVAV) {
- dPOPss;
- if (SvNIOKp(sv) || !SvPOKp(sv) ||
- SvNIOKp(cx->blk_loop.iterary) || !SvPOKp(cx->blk_loop.iterary) ||
- (looks_like_number(sv) && *SvPVX(sv) != '0' &&
- looks_like_number((SV*)cx->blk_loop.iterary) &&
- *SvPVX(cx->blk_loop.iterary) != '0'))
- {
- if (SvNV(sv) < IV_MIN ||
- SvNV((SV*)cx->blk_loop.iterary) >= IV_MAX)
- DIE(aTHX_ "Range iterator outside integer range");
- cx->blk_loop.iterix = SvIV(sv);
- cx->blk_loop.itermax = SvIV((SV*)cx->blk_loop.iterary);
- }
- else
- cx->blk_loop.iterlval = newSVsv(sv);
- }
- }
- else {
- cx->blk_loop.iterary = PL_curstack;
- AvFILLp(PL_curstack) = SP - PL_stack_base;
- cx->blk_loop.iterix = MARK - PL_stack_base;
- }
-
- RETURN;
-}
-
-PP(pp_enterloop)
-{
- dSP;
- register PERL_CONTEXT *cx;
- I32 gimme = GIMME_V;
-
- ENTER;
- SAVETMPS;
- ENTER;
-
- PUSHBLOCK(cx, CXt_LOOP, SP);
- PUSHLOOP(cx, 0, SP);
-
- RETURN;
-}
-
-PP(pp_leaveloop)
-{
- dSP;
- register PERL_CONTEXT *cx;
- I32 gimme;
- SV **newsp;
- PMOP *newpm;
- SV **mark;
-
- POPBLOCK(cx,newpm);
- mark = newsp;
- newsp = PL_stack_base + cx->blk_loop.resetsp;
-
- TAINT_NOT;
- if (gimme == G_VOID)
- ; /* do nothing */
- else if (gimme == G_SCALAR) {
- if (mark < SP)
- *++newsp = sv_mortalcopy(*SP);
- else
- *++newsp = &PL_sv_undef;
- }
- else {
- while (mark < SP) {
- *++newsp = sv_mortalcopy(*++mark);
- TAINT_NOT; /* Each item is independent */
- }
- }
- SP = newsp;
- PUTBACK;
-
- POPLOOP(cx); /* Stack values are safe: release loop vars ... */
- PL_curpm = newpm; /* ... and pop $1 et al */
-
- LEAVE;
- LEAVE;
-
- return NORMAL;
-}
-
-PP(pp_return)
-{
- dSP; dMARK;
- I32 cxix;
- register PERL_CONTEXT *cx;
- bool popsub2 = FALSE;
- bool clear_errsv = FALSE;
- I32 gimme;
- SV **newsp;
- PMOP *newpm;
- I32 optype = 0;
- SV *sv;
-
- if (PL_curstackinfo->si_type == PERLSI_SORT) {
- if (cxstack_ix == PL_sortcxix
- || dopoptosub(cxstack_ix) <= PL_sortcxix)
- {
- if (cxstack_ix > PL_sortcxix)
- dounwind(PL_sortcxix);
- AvARRAY(PL_curstack)[1] = *SP;
- PL_stack_sp = PL_stack_base + 1;
- return 0;
- }
- }
-
- cxix = dopoptosub(cxstack_ix);
- if (cxix < 0)
- DIE(aTHX_ "Can't return outside a subroutine");
- if (cxix < cxstack_ix)
- dounwind(cxix);
-
- POPBLOCK(cx,newpm);
- switch (CxTYPE(cx)) {
- case CXt_SUB:
- popsub2 = TRUE;
- break;
- case CXt_EVAL:
- if (!(PL_in_eval & EVAL_KEEPERR))
- clear_errsv = TRUE;
- POPEVAL(cx);
- if (CxTRYBLOCK(cx))
- break;
- lex_end();
- if (optype == OP_REQUIRE &&
- (MARK == SP || (gimme == G_SCALAR && !SvTRUE(*SP))) )
- {
- /* Unassume the success we assumed earlier. */
- SV *nsv = cx->blk_eval.old_namesv;
- (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
- DIE(aTHX_ "%s did not return a true value", SvPVX(nsv));
- }
- break;
- case CXt_FORMAT:
- POPFORMAT(cx);
- break;
- default:
- DIE(aTHX_ "panic: return");
- }
-
- TAINT_NOT;
- if (gimme == G_SCALAR) {
- if (MARK < SP) {
- if (popsub2) {
- if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
- if (SvTEMP(TOPs)) {
- *++newsp = SvREFCNT_inc(*SP);
- FREETMPS;
- sv_2mortal(*newsp);
- }
- else {
- sv = SvREFCNT_inc(*SP); /* FREETMPS could clobber it */
- FREETMPS;
- *++newsp = sv_mortalcopy(sv);
- SvREFCNT_dec(sv);
- }
- }
- else
- *++newsp = (SvTEMP(*SP)) ? *SP : sv_mortalcopy(*SP);
- }
- else
- *++newsp = sv_mortalcopy(*SP);
- }
- else
- *++newsp = &PL_sv_undef;
- }
- else if (gimme == G_ARRAY) {
- while (++MARK <= SP) {
- *++newsp = (popsub2 && SvTEMP(*MARK))
- ? *MARK : sv_mortalcopy(*MARK);
- TAINT_NOT; /* Each item is independent */
- }
- }
- PL_stack_sp = newsp;
-
- /* Stack values are safe: */
- if (popsub2) {
- POPSUB(cx,sv); /* release CV and @_ ... */
- }
- else
- sv = Nullsv;
- PL_curpm = newpm; /* ... and pop $1 et al */
-
- LEAVE;
- LEAVESUB(sv);
- if (clear_errsv)
- sv_setpv(ERRSV,"");
- return pop_return();
-}
-
-PP(pp_last)
-{
- dSP;
- I32 cxix;
- register PERL_CONTEXT *cx;
- I32 pop2 = 0;
- I32 gimme;
- I32 optype;
- OP *nextop;
- SV **newsp;
- PMOP *newpm;
- SV **mark;
- SV *sv = Nullsv;
-
- if (PL_op->op_flags & OPf_SPECIAL) {
- cxix = dopoptoloop(cxstack_ix);
- if (cxix < 0)
- DIE(aTHX_ "Can't \"last\" outside a loop block");
- }
- else {
- cxix = dopoptolabel(cPVOP->op_pv);
- if (cxix < 0)
- DIE(aTHX_ "Label not found for \"last %s\"", cPVOP->op_pv);
- }
- if (cxix < cxstack_ix)
- dounwind(cxix);
-
- POPBLOCK(cx,newpm);
- mark = newsp;
- switch (CxTYPE(cx)) {
- case CXt_LOOP:
- pop2 = CXt_LOOP;
- newsp = PL_stack_base + cx->blk_loop.resetsp;
- nextop = cx->blk_loop.last_op->op_next;
- break;
- case CXt_SUB:
- pop2 = CXt_SUB;
- nextop = pop_return();
- break;
- case CXt_EVAL:
- POPEVAL(cx);
- nextop = pop_return();
- break;
- case CXt_FORMAT:
- POPFORMAT(cx);
- nextop = pop_return();
- break;
- default:
- DIE(aTHX_ "panic: last");
- }
-
- TAINT_NOT;
- if (gimme == G_SCALAR) {
- if (MARK < SP)
- *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
- ? *SP : sv_mortalcopy(*SP);
- else
- *++newsp = &PL_sv_undef;
- }
- else if (gimme == G_ARRAY) {
- while (++MARK <= SP) {
- *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*MARK))
- ? *MARK : sv_mortalcopy(*MARK);
- TAINT_NOT; /* Each item is independent */
- }
- }
- SP = newsp;
- PUTBACK;
-
- /* Stack values are safe: */
- switch (pop2) {
- case CXt_LOOP:
- POPLOOP(cx); /* release loop vars ... */
- LEAVE;
- break;
- case CXt_SUB:
- POPSUB(cx,sv); /* release CV and @_ ... */
- break;
- }
- PL_curpm = newpm; /* ... and pop $1 et al */
-
- LEAVE;
- LEAVESUB(sv);
- return nextop;
-}
-
-PP(pp_next)
-{
- I32 cxix;
- register PERL_CONTEXT *cx;
- I32 inner;
-
- if (PL_op->op_flags & OPf_SPECIAL) {
- cxix = dopoptoloop(cxstack_ix);
- if (cxix < 0)
- DIE(aTHX_ "Can't \"next\" outside a loop block");
- }
- else {
- cxix = dopoptolabel(cPVOP->op_pv);
- if (cxix < 0)
- DIE(aTHX_ "Label not found for \"next %s\"", cPVOP->op_pv);
- }
- if (cxix < cxstack_ix)
- dounwind(cxix);
-
- /* clear off anything above the scope we're re-entering, but
- * save the rest until after a possible continue block */
- inner = PL_scopestack_ix;
- TOPBLOCK(cx);
- if (PL_scopestack_ix < inner)
- leave_scope(PL_scopestack[PL_scopestack_ix]);
- return cx->blk_loop.next_op;
-}
-
-PP(pp_redo)
-{
- I32 cxix;
- register PERL_CONTEXT *cx;
- I32 oldsave;
-
- if (PL_op->op_flags & OPf_SPECIAL) {
- cxix = dopoptoloop(cxstack_ix);
- if (cxix < 0)
- DIE(aTHX_ "Can't \"redo\" outside a loop block");
- }
- else {
- cxix = dopoptolabel(cPVOP->op_pv);
- if (cxix < 0)
- DIE(aTHX_ "Label not found for \"redo %s\"", cPVOP->op_pv);
- }
- if (cxix < cxstack_ix)
- dounwind(cxix);
-
- TOPBLOCK(cx);
- oldsave = PL_scopestack[PL_scopestack_ix - 1];
- LEAVE_SCOPE(oldsave);
- return cx->blk_loop.redo_op;
-}
-
-STATIC OP *
-S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
-{
- OP *kid;
- OP **ops = opstack;
- static char too_deep[] = "Target of goto is too deeply nested";
-
- if (ops >= oplimit)
- Perl_croak(aTHX_ too_deep);
- if (o->op_type == OP_LEAVE ||
- o->op_type == OP_SCOPE ||
- o->op_type == OP_LEAVELOOP ||
- o->op_type == OP_LEAVETRY)
- {
- *ops++ = cUNOPo->op_first;
- if (ops >= oplimit)
- Perl_croak(aTHX_ too_deep);
- }
- *ops = 0;
- if (o->op_flags & OPf_KIDS) {
- /* First try all the kids at this level, since that's likeliest. */
- for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
- if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
- kCOP->cop_label && strEQ(kCOP->cop_label, label))
- return kid;
- }
- for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
- if (kid == PL_lastgotoprobe)
- continue;
- if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
- (ops == opstack ||
- (ops[-1]->op_type != OP_NEXTSTATE &&
- ops[-1]->op_type != OP_DBSTATE)))
- *ops++ = kid;
- if ((o = dofindlabel(kid, label, ops, oplimit)))
- return o;
- }
- }
- *ops = 0;
- return 0;
-}
-
-PP(pp_dump)
-{
- return pp_goto();
- /*NOTREACHED*/
-}
-
-PP(pp_goto)
-{
- dSP;
- OP *retop = 0;
- I32 ix;
- register PERL_CONTEXT *cx;
-#define GOTO_DEPTH 64
- OP *enterops[GOTO_DEPTH];
- char *label;
- int do_dump = (PL_op->op_type == OP_DUMP);
- static char must_have_label[] = "goto must have label";
-
- label = 0;
- if (PL_op->op_flags & OPf_STACKED) {
- SV *sv = POPs;
- STRLEN n_a;
-
- /* This egregious kludge implements goto &subroutine */
- if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
- I32 cxix;
- register PERL_CONTEXT *cx;
- CV* cv = (CV*)SvRV(sv);
- SV** mark;
- I32 items = 0;
- I32 oldsave;
-
- retry:
- if (!CvROOT(cv) && !CvXSUB(cv)) {
- GV *gv = CvGV(cv);
- GV *autogv;
- if (gv) {
- SV *tmpstr;
- /* autoloaded stub? */
- if (cv != GvCV(gv) && (cv = GvCV(gv)))
- goto retry;
- autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv),
- GvNAMELEN(gv), FALSE);
- if (autogv && (cv = GvCV(autogv)))
- goto retry;
- tmpstr = sv_newmortal();
- gv_efullname3(tmpstr, gv, Nullch);
- DIE(aTHX_ "Goto undefined subroutine &%s",SvPVX(tmpstr));
- }
- DIE(aTHX_ "Goto undefined subroutine");
- }
-
- /* First do some returnish stuff. */
- cxix = dopoptosub(cxstack_ix);
- if (cxix < 0)
- DIE(aTHX_ "Can't goto subroutine outside a subroutine");
- if (cxix < cxstack_ix)
- dounwind(cxix);
- TOPBLOCK(cx);
- if (CxTYPE(cx) == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL)
- DIE(aTHX_ "Can't goto subroutine from an eval-string");
- mark = PL_stack_sp;
- if (CxTYPE(cx) == CXt_SUB && cx->blk_sub.hasargs) {
- /* put @_ back onto stack */
- AV* av = cx->blk_sub.argarray;
-
- items = AvFILLp(av) + 1;
- PL_stack_sp++;
- EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
- Copy(AvARRAY(av), PL_stack_sp, items, SV*);
- PL_stack_sp += items;
-#ifndef USE_THREADS
- SvREFCNT_dec(GvAV(PL_defgv));
- GvAV(PL_defgv) = cx->blk_sub.savearray;
-#endif /* USE_THREADS */
- /* abandon @_ if it got reified */
- if (AvREAL(av)) {
- (void)sv_2mortal((SV*)av); /* delay until return */
- av = newAV();
- av_extend(av, items-1);
- AvFLAGS(av) = AVf_REIFY;
- PL_curpad[0] = (SV*)(cx->blk_sub.argarray = av);
- }
- }
- else if (CvXSUB(cv)) { /* put GvAV(defgv) back onto stack */
- AV* av;
-#ifdef USE_THREADS
- av = (AV*)PL_curpad[0];
-#else
- av = GvAV(PL_defgv);
-#endif
- items = AvFILLp(av) + 1;
- PL_stack_sp++;
- EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
- Copy(AvARRAY(av), PL_stack_sp, items, SV*);
- PL_stack_sp += items;
- }
- if (CxTYPE(cx) == CXt_SUB &&
- !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
- SvREFCNT_dec(cx->blk_sub.cv);
- oldsave = PL_scopestack[PL_scopestack_ix - 1];
- LEAVE_SCOPE(oldsave);
-
- /* Now do some callish stuff. */
- SAVETMPS;
- if (CvXSUB(cv)) {
-#ifdef PERL_XSUB_OLDSTYLE
- if (CvOLDSTYLE(cv)) {
- I32 (*fp3)(int,int,int);
- while (SP > mark) {
- SP[1] = SP[0];
- SP--;
- }
- fp3 = (I32(*)(int,int,int))CvXSUB(cv);
- items = (*fp3)(CvXSUBANY(cv).any_i32,
- mark - PL_stack_base + 1,
- items);
- SP = PL_stack_base + items;
- }
- else
-#endif /* PERL_XSUB_OLDSTYLE */
- {
- SV **newsp;
- I32 gimme;
-
- PL_stack_sp--; /* There is no cv arg. */
- /* Push a mark for the start of arglist */
- PUSHMARK(mark);
- (void)(*CvXSUB(cv))(aTHXo_ cv);
- /* Pop the current context like a decent sub should */
- POPBLOCK(cx, PL_curpm);
- /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
- }
- LEAVE;
- return pop_return();
- }
- else {
- AV* padlist = CvPADLIST(cv);
- SV** svp = AvARRAY(padlist);
- if (CxTYPE(cx) == CXt_EVAL) {
- PL_in_eval = cx->blk_eval.old_in_eval;
- PL_eval_root = cx->blk_eval.old_eval_root;
- cx->cx_type = CXt_SUB;
- cx->blk_sub.hasargs = 0;
- }
- cx->blk_sub.cv = cv;
- cx->blk_sub.olddepth = CvDEPTH(cv);
- CvDEPTH(cv)++;
- if (CvDEPTH(cv) < 2)
- (void)SvREFCNT_inc(cv);
- else { /* save temporaries on recursion? */
- if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION))
- sub_crush_depth(cv);
- if (CvDEPTH(cv) > AvFILLp(padlist)) {
- AV *newpad = newAV();
- SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
- I32 ix = AvFILLp((AV*)svp[1]);
- I32 names_fill = AvFILLp((AV*)svp[0]);
- svp = AvARRAY(svp[0]);
- for ( ;ix > 0; ix--) {
- if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
- char *name = SvPVX(svp[ix]);
- if ((SvFLAGS(svp[ix]) & SVf_FAKE)
- || *name == '&')
- {
- /* outer lexical or anon code */
- av_store(newpad, ix,
- SvREFCNT_inc(oldpad[ix]) );
- }
- else { /* our own lexical */
- if (*name == '@')
- av_store(newpad, ix, sv = (SV*)newAV());
- else if (*name == '%')
- av_store(newpad, ix, sv = (SV*)newHV());
- else
- av_store(newpad, ix, sv = NEWSV(0,0));
- SvPADMY_on(sv);
- }
- }
- else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
- av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
- }
- else {
- av_store(newpad, ix, sv = NEWSV(0,0));
- SvPADTMP_on(sv);
- }
- }
- if (cx->blk_sub.hasargs) {
- AV* av = newAV();
- av_extend(av, 0);
- av_store(newpad, 0, (SV*)av);
- AvFLAGS(av) = AVf_REIFY;
- }
- av_store(padlist, CvDEPTH(cv), (SV*)newpad);
- AvFILLp(padlist) = CvDEPTH(cv);
- svp = AvARRAY(padlist);
- }
- }
-#ifdef USE_THREADS
- if (!cx->blk_sub.hasargs) {
- AV* av = (AV*)PL_curpad[0];
-
- items = AvFILLp(av) + 1;
- if (items) {
- /* Mark is at the end of the stack. */
- EXTEND(SP, items);
- Copy(AvARRAY(av), SP + 1, items, SV*);
- SP += items;
- PUTBACK ;
- }
- }
-#endif /* USE_THREADS */
- SAVEVPTR(PL_curpad);
- PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
-#ifndef USE_THREADS
- if (cx->blk_sub.hasargs)
-#endif /* USE_THREADS */
- {
- AV* av = (AV*)PL_curpad[0];
- SV** ary;
-
-#ifndef USE_THREADS
- cx->blk_sub.savearray = GvAV(PL_defgv);
- GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
-#endif /* USE_THREADS */
- cx->blk_sub.oldcurpad = PL_curpad;
- cx->blk_sub.argarray = av;
- ++mark;
-
- if (items >= AvMAX(av) + 1) {
- ary = AvALLOC(av);
- if (AvARRAY(av) != ary) {
- AvMAX(av) += AvARRAY(av) - AvALLOC(av);
- SvPVX(av) = (char*)ary;
- }
- if (items >= AvMAX(av) + 1) {
- AvMAX(av) = items - 1;
- Renew(ary,items+1,SV*);
- AvALLOC(av) = ary;
- SvPVX(av) = (char*)ary;
- }
- }
- Copy(mark,AvARRAY(av),items,SV*);
- AvFILLp(av) = items - 1;
- assert(!AvREAL(av));
- while (items--) {
- if (*mark)
- SvTEMP_off(*mark);
- mark++;
- }
- }
- if (PERLDB_SUB) { /* Checking curstash breaks DProf. */
- /*
- * We do not care about using sv to call CV;
- * it's for informational purposes only.
- */
- SV *sv = GvSV(PL_DBsub);
- CV *gotocv;
-
- if (PERLDB_SUB_NN) {
- SvIVX(sv) = PTR2IV(cv); /* Already upgraded, saved */
- } else {
- save_item(sv);
- gv_efullname3(sv, CvGV(cv), Nullch);
- }
- if ( PERLDB_GOTO
- && (gotocv = get_cv("DB::goto", FALSE)) ) {
- PUSHMARK( PL_stack_sp );
- call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
- PL_stack_sp--;
- }
- }
- RETURNOP(CvSTART(cv));
- }
- }
- else {
- label = SvPV(sv,n_a);
- if (!(do_dump || *label))
- DIE(aTHX_ must_have_label);
- }
- }
- else if (PL_op->op_flags & OPf_SPECIAL) {
- if (! do_dump)
- DIE(aTHX_ must_have_label);
- }
- else
- label = cPVOP->op_pv;
-
- if (label && *label) {
- OP *gotoprobe = 0;
-
- /* find label */
-
- PL_lastgotoprobe = 0;
- *enterops = 0;
- for (ix = cxstack_ix; ix >= 0; ix--) {
- cx = &cxstack[ix];
- switch (CxTYPE(cx)) {
- case CXt_EVAL:
- gotoprobe = PL_eval_root; /* XXX not good for nested eval */
- break;
- case CXt_LOOP:
- gotoprobe = cx->blk_oldcop->op_sibling;
- break;
- case CXt_SUBST:
- continue;
- case CXt_BLOCK:
- if (ix)
- gotoprobe = cx->blk_oldcop->op_sibling;
- else
- gotoprobe = PL_main_root;
- break;
- case CXt_SUB:
- if (CvDEPTH(cx->blk_sub.cv)) {
- gotoprobe = CvROOT(cx->blk_sub.cv);
- break;
- }
- /* FALL THROUGH */
- case CXt_FORMAT:
- case CXt_NULL:
- DIE(aTHX_ "Can't \"goto\" out of a pseudo block");
- default:
- if (ix)
- DIE(aTHX_ "panic: goto");
- gotoprobe = PL_main_root;
- break;
- }
- if (gotoprobe) {
- retop = dofindlabel(gotoprobe, label,
- enterops, enterops + GOTO_DEPTH);
- if (retop)
- break;
- }
- PL_lastgotoprobe = gotoprobe;
- }
- if (!retop)
- DIE(aTHX_ "Can't find label %s", label);
-
- /* pop unwanted frames */
-
- if (ix < cxstack_ix) {
- I32 oldsave;
-
- if (ix < 0)
- ix = 0;
- dounwind(ix);
- TOPBLOCK(cx);
- oldsave = PL_scopestack[PL_scopestack_ix];
- LEAVE_SCOPE(oldsave);
- }
-
- /* push wanted frames */
-
- if (*enterops && enterops[1]) {
- OP *oldop = PL_op;
- for (ix = 1; enterops[ix]; ix++) {
- PL_op = enterops[ix];
- /* Eventually we may want to stack the needed arguments
- * for each op. For now, we punt on the hard ones. */
- if (PL_op->op_type == OP_ENTERITER)
- DIE(aTHX_ "Can't \"goto\" into the middle of a foreach loop");
- CALL_FPTR(PL_op->op_ppaddr)(aTHX);
- }
- PL_op = oldop;
- }
- }
-
- if (do_dump) {
-#ifdef VMS
- if (!retop) retop = PL_main_start;
-#endif
- PL_restartop = retop;
- PL_do_undump = TRUE;
-
- my_unexec();
-
- PL_restartop = 0; /* hmm, must be GNU unexec().. */
- PL_do_undump = FALSE;
- }
-
- RETURNOP(retop);
-}
-
-PP(pp_exit)
-{
- dSP;
- I32 anum;
-
- if (MAXARG < 1)
- anum = 0;
- else {
- anum = SvIVx(POPs);
-#ifdef VMS
- if (anum == 1 && (PL_op->op_private & OPpEXIT_VMSISH))
- anum = 0;
-#endif
- }
- PL_exit_flags |= PERL_EXIT_EXPECTED;
- my_exit(anum);
- PUSHs(&PL_sv_undef);
- RETURN;
-}
-
-#ifdef NOTYET
-PP(pp_nswitch)
-{
- dSP;
- NV value = SvNVx(GvSV(cCOP->cop_gv));
- register I32 match = I_32(value);
-
- if (value < 0.0) {
- if (((NV)match) > value)
- --match; /* was fractional--truncate other way */
- }
- match -= cCOP->uop.scop.scop_offset;
- if (match < 0)
- match = 0;
- else if (match > cCOP->uop.scop.scop_max)
- match = cCOP->uop.scop.scop_max;
- PL_op = cCOP->uop.scop.scop_next[match];
- RETURNOP(PL_op);
-}
-
-PP(pp_cswitch)
-{
- dSP;
- register I32 match;
-
- if (PL_multiline)
- PL_op = PL_op->op_next; /* can't assume anything */
- else {
- STRLEN n_a;
- match = *(SvPVx(GvSV(cCOP->cop_gv), n_a)) & 255;
- match -= cCOP->uop.scop.scop_offset;
- if (match < 0)
- match = 0;
- else if (match > cCOP->uop.scop.scop_max)
- match = cCOP->uop.scop.scop_max;
- PL_op = cCOP->uop.scop.scop_next[match];
- }
- RETURNOP(PL_op);
-}
-#endif
-
-/* Eval. */
-
-STATIC void
-S_save_lines(pTHX_ AV *array, SV *sv)
-{
- register char *s = SvPVX(sv);
- register char *send = SvPVX(sv) + SvCUR(sv);
- register char *t;
- register I32 line = 1;
-
- while (s && s < send) {
- SV *tmpstr = NEWSV(85,0);
-
- sv_upgrade(tmpstr, SVt_PVMG);
- t = strchr(s, '\n');
- if (t)
- t++;
- else
- t = send;
-
- sv_setpvn(tmpstr, s, t - s);
- av_store(array, line++, tmpstr);
- s = t;
- }
-}
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-STATIC void *
-S_docatch_body(pTHX_ va_list args)
-{
- return docatch_body();
-}
-#endif
-
-STATIC void *
-S_docatch_body(pTHX)
-{
- CALLRUNOPS(aTHX);
- return NULL;
-}
-
-STATIC OP *
-S_docatch(pTHX_ OP *o)
-{
- int ret;
- OP *oldop = PL_op;
- volatile PERL_SI *cursi = PL_curstackinfo;
- dJMPENV;
-
-#ifdef DEBUGGING
- assert(CATCH_GET == TRUE);
-#endif
- PL_op = o;
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- redo_body:
- CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body));
-#else
- JMPENV_PUSH(ret);
-#endif
- switch (ret) {
- case 0:
-#ifndef PERL_FLEXIBLE_EXCEPTIONS
- redo_body:
- docatch_body();
-#endif
- break;
- case 3:
- if (PL_restartop && cursi == PL_curstackinfo) {
- PL_op = PL_restartop;
- PL_restartop = 0;
- goto redo_body;
- }
- /* FALL THROUGH */
- default:
- JMPENV_POP;
- PL_op = oldop;
- JMPENV_JUMP(ret);
- /* NOTREACHED */
- }
- JMPENV_POP;
- PL_op = oldop;
- return Nullop;
-}
-
-OP *
-Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, char *code, AV** avp)
-/* sv Text to convert to OP tree. */
-/* startop op_free() this to undo. */
-/* code Short string id of the caller. */
-{
- dSP; /* Make POPBLOCK work. */
- PERL_CONTEXT *cx;
- SV **newsp;
- I32 gimme = 0; /* SUSPECT - INITIALZE TO WHAT? NI-S */
- I32 optype;
- OP dummy;
- OP *rop;
- char tbuf[TYPE_DIGITS(long) + 12 + 10];
- char *tmpbuf = tbuf;
- char *safestr;
-
- ENTER;
- lex_start(sv);
- SAVETMPS;
- /* switch to eval mode */
-
- if (PL_curcop == &PL_compiling) {
- SAVECOPSTASH_FREE(&PL_compiling);
- CopSTASH_set(&PL_compiling, PL_curstash);
- }
- if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
- SV *sv = sv_newmortal();
- Perl_sv_setpvf(aTHX_ sv, "_<(%.10seval %lu)[%s:%"IVdf"]",
- code, (unsigned long)++PL_evalseq,
- CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
- tmpbuf = SvPVX(sv);
- }
- else
- sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
- SAVECOPFILE_FREE(&PL_compiling);
- CopFILE_set(&PL_compiling, tmpbuf+2);
- SAVECOPLINE(&PL_compiling);
- CopLINE_set(&PL_compiling, 1);
- /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
- deleting the eval's FILEGV from the stash before gv_check() runs
- (i.e. before run-time proper). To work around the coredump that
- ensues, we always turn GvMULTI_on for any globals that were
- introduced within evals. See force_ident(). GSAR 96-10-12 */
- safestr = savepv(tmpbuf);
- SAVEDELETE(PL_defstash, safestr, strlen(safestr));
- SAVEHINTS();
-#ifdef OP_IN_REGISTER
- PL_opsave = op;
-#else
- SAVEVPTR(PL_op);
-#endif
- PL_hints = 0;
-
- PL_op = &dummy;
- PL_op->op_type = OP_ENTEREVAL;
- PL_op->op_flags = 0; /* Avoid uninit warning. */
- PUSHBLOCK(cx, CXt_EVAL|(PL_curcop == &PL_compiling ? 0 : CXp_REAL), SP);
- PUSHEVAL(cx, 0, Nullgv);
- rop = doeval(G_SCALAR, startop);
- POPBLOCK(cx,PL_curpm);
- POPEVAL(cx);
-
- (*startop)->op_type = OP_NULL;
- (*startop)->op_ppaddr = PL_ppaddr[OP_NULL];
- lex_end();
- *avp = (AV*)SvREFCNT_inc(PL_comppad);
- LEAVE;
- if (PL_curcop == &PL_compiling)
- PL_compiling.op_private = PL_hints;
-#ifdef OP_IN_REGISTER
- op = PL_opsave;
-#endif
- return rop;
-}
-
-/* With USE_THREADS, eval_owner must be held on entry to doeval */
-STATIC OP *
-S_doeval(pTHX_ int gimme, OP** startop)
-{
- dSP;
- OP *saveop = PL_op;
- CV *caller;
- AV* comppadlist;
- I32 i;
-
- PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
- ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
- : EVAL_INEVAL);
-
- PUSHMARK(SP);
-
- /* set up a scratch pad */
-
- SAVEI32(PL_padix);
- SAVEVPTR(PL_curpad);
- SAVESPTR(PL_comppad);
- SAVESPTR(PL_comppad_name);
- SAVEI32(PL_comppad_name_fill);
- SAVEI32(PL_min_intro_pending);
- SAVEI32(PL_max_intro_pending);
-
- caller = PL_compcv;
- for (i = cxstack_ix - 1; i >= 0; i--) {
- PERL_CONTEXT *cx = &cxstack[i];
- if (CxTYPE(cx) == CXt_EVAL)
- break;
- else if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
- caller = cx->blk_sub.cv;
- break;
- }
- }
-
- SAVESPTR(PL_compcv);
- PL_compcv = (CV*)NEWSV(1104,0);
- sv_upgrade((SV *)PL_compcv, SVt_PVCV);
- CvEVAL_on(PL_compcv);
-#ifdef USE_THREADS
- CvOWNER(PL_compcv) = 0;
- New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
- MUTEX_INIT(CvMUTEXP(PL_compcv));
-#endif /* USE_THREADS */
-
- PL_comppad = newAV();
- av_push(PL_comppad, Nullsv);
- PL_curpad = AvARRAY(PL_comppad);
- PL_comppad_name = newAV();
- PL_comppad_name_fill = 0;
- PL_min_intro_pending = 0;
- PL_padix = 0;
-#ifdef USE_THREADS
- av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
- PL_curpad[0] = (SV*)newAV();
- SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
-#endif /* USE_THREADS */
-
- comppadlist = newAV();
- AvREAL_off(comppadlist);
- av_store(comppadlist, 0, (SV*)PL_comppad_name);
- av_store(comppadlist, 1, (SV*)PL_comppad);
- CvPADLIST(PL_compcv) = comppadlist;
-
- if (!saveop ||
- (saveop->op_type != OP_REQUIRE && saveop->op_type != OP_DOFILE))
- {
- CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
- }
-
- SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
-
- /* make sure we compile in the right package */
-
- if (CopSTASH_ne(PL_curcop, PL_curstash)) {
- SAVESPTR(PL_curstash);
- PL_curstash = CopSTASH(PL_curcop);
- }
- SAVESPTR(PL_beginav);
- PL_beginav = newAV();
- SAVEFREESV(PL_beginav);
- SAVEI32(PL_error_count);
-
- /* try to compile it */
-
- PL_eval_root = Nullop;
- PL_error_count = 0;
- PL_curcop = &PL_compiling;
- PL_curcop->cop_arybase = 0;
- SvREFCNT_dec(PL_rs);
- PL_rs = newSVpvn("\n", 1);
- if (saveop && saveop->op_flags & OPf_SPECIAL)
- PL_in_eval |= EVAL_KEEPERR;
- else
- sv_setpv(ERRSV,"");
- if (yyparse() || PL_error_count || !PL_eval_root) {
- SV **newsp;
- I32 gimme;
- PERL_CONTEXT *cx;
- I32 optype = 0; /* Might be reset by POPEVAL. */
- STRLEN n_a;
-
- PL_op = saveop;
- if (PL_eval_root) {
- op_free(PL_eval_root);
- PL_eval_root = Nullop;
- }
- SP = PL_stack_base + POPMARK; /* pop original mark */
- if (!startop) {
- POPBLOCK(cx,PL_curpm);
- POPEVAL(cx);
- pop_return();
- }
- lex_end();
- LEAVE;
- if (optype == OP_REQUIRE) {
- char* msg = SvPVx(ERRSV, n_a);
- DIE(aTHX_ "%sCompilation failed in require",
- *msg ? msg : "Unknown error\n");
- }
- else if (startop) {
- char* msg = SvPVx(ERRSV, n_a);
-
- POPBLOCK(cx,PL_curpm);
- POPEVAL(cx);
- Perl_croak(aTHX_ "%sCompilation failed in regexp",
- (*msg ? msg : "Unknown error\n"));
- }
- SvREFCNT_dec(PL_rs);
- PL_rs = SvREFCNT_inc(PL_nrs);
-#ifdef USE_THREADS
- MUTEX_LOCK(&PL_eval_mutex);
- PL_eval_owner = 0;
- COND_SIGNAL(&PL_eval_cond);
- MUTEX_UNLOCK(&PL_eval_mutex);
-#endif /* USE_THREADS */
- RETPUSHUNDEF;
- }
- SvREFCNT_dec(PL_rs);
- PL_rs = SvREFCNT_inc(PL_nrs);
- CopLINE_set(&PL_compiling, 0);
- if (startop) {
- *startop = PL_eval_root;
- SvREFCNT_dec(CvOUTSIDE(PL_compcv));
- CvOUTSIDE(PL_compcv) = Nullcv;
- } else
- SAVEFREEOP(PL_eval_root);
- if (gimme & G_VOID)
- scalarvoid(PL_eval_root);
- else if (gimme & G_ARRAY)
- list(PL_eval_root);
- else
- scalar(PL_eval_root);
-
- DEBUG_x(dump_eval());
-
- /* Register with debugger: */
- if (PERLDB_INTER && saveop->op_type == OP_REQUIRE) {
- CV *cv = get_cv("DB::postponed", FALSE);
- if (cv) {
- dSP;
- PUSHMARK(SP);
- XPUSHs((SV*)CopFILEGV(&PL_compiling));
- PUTBACK;
- call_sv((SV*)cv, G_DISCARD);
- }
- }
-
- /* compiled okay, so do it */
-
- CvDEPTH(PL_compcv) = 1;
- SP = PL_stack_base + POPMARK; /* pop original mark */
- PL_op = saveop; /* The caller may need it. */
- PL_lex_state = LEX_NOTPARSING; /* $^S needs this. */
-#ifdef USE_THREADS
- MUTEX_LOCK(&PL_eval_mutex);
- PL_eval_owner = 0;
- COND_SIGNAL(&PL_eval_cond);
- MUTEX_UNLOCK(&PL_eval_mutex);
-#endif /* USE_THREADS */
-
- RETURNOP(PL_eval_start);
-}
-
-STATIC PerlIO *
-S_doopen_pmc(pTHX_ const char *name, const char *mode)
-{
- STRLEN namelen = strlen(name);
- PerlIO *fp;
-
- if (namelen > 3 && strEQ(name + namelen - 3, ".pm")) {
- SV *pmcsv = Perl_newSVpvf(aTHX_ "%s%c", name, 'c');
- char *pmc = SvPV_nolen(pmcsv);
- Stat_t pmstat;
- Stat_t pmcstat;
- if (PerlLIO_stat(pmc, &pmcstat) < 0) {
- fp = PerlIO_open(name, mode);
- }
- else {
- if (PerlLIO_stat(name, &pmstat) < 0 ||
- pmstat.st_mtime < pmcstat.st_mtime)
- {
- fp = PerlIO_open(pmc, mode);
- }
- else {
- fp = PerlIO_open(name, mode);
- }
- }
- SvREFCNT_dec(pmcsv);
- }
- else {
- fp = PerlIO_open(name, mode);
- }
- return fp;
-}
-
-PP(pp_require)
-{
- dSP;
- register PERL_CONTEXT *cx;
- SV *sv;
- char *name;
- STRLEN len;
- char *tryname;
- SV *namesv = Nullsv;
- SV** svp;
- I32 gimme = G_SCALAR;
- PerlIO *tryrsfp = 0;
- STRLEN n_a;
- int filter_has_file = 0;
- GV *filter_child_proc = 0;
- SV *filter_state = 0;
- SV *filter_sub = 0;
-
- sv = POPs;
- if (SvNIOKp(sv)) {
- if (SvPOK(sv) && SvNOK(sv)) { /* require v5.6.1 */
- UV rev = 0, ver = 0, sver = 0;
- STRLEN len;
- U8 *s = (U8*)SvPVX(sv);
- U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
- if (s < end) {
- rev = utf8_to_uv(s, end - s, &len, 0);
- s += len;
- if (s < end) {
- ver = utf8_to_uv(s, end - s, &len, 0);
- s += len;
- if (s < end)
- sver = utf8_to_uv(s, end - s, &len, 0);
- }
- }
- if (PERL_REVISION < rev
- || (PERL_REVISION == rev
- && (PERL_VERSION < ver
- || (PERL_VERSION == ver
- && PERL_SUBVERSION < sver))))
- {
- DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--this is only "
- "v%d.%d.%d, stopped", rev, ver, sver, PERL_REVISION,
- PERL_VERSION, PERL_SUBVERSION);
- }
- RETPUSHYES;
- }
- else if (!SvPOKp(sv)) { /* require 5.005_03 */
- if ((NV)PERL_REVISION + ((NV)PERL_VERSION/(NV)1000)
- + ((NV)PERL_SUBVERSION/(NV)1000000)
- + 0.00000099 < SvNV(sv))
- {
- NV nrev = SvNV(sv);
- UV rev = (UV)nrev;
- NV nver = (nrev - rev) * 1000;
- UV ver = (UV)(nver + 0.0009);
- NV nsver = (nver - ver) * 1000;
- UV sver = (UV)(nsver + 0.0009);
-
- /* help out with the "use 5.6" confusion */
- if (sver == 0 && (rev > 5 || (rev == 5 && ver >= 100))) {
- DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
- "this is only v%d.%d.%d, stopped"
- " (did you mean v%"UVuf".%"UVuf".0?)",
- rev, ver, sver, PERL_REVISION, PERL_VERSION,
- PERL_SUBVERSION, rev, ver/100);
- }
- else {
- DIE(aTHX_ "Perl v%"UVuf".%"UVuf".%"UVuf" required--"
- "this is only v%d.%d.%d, stopped",
- rev, ver, sver, PERL_REVISION, PERL_VERSION,
- PERL_SUBVERSION);
- }
- }
- RETPUSHYES;
- }
- }
- name = SvPV(sv, len);
- if (!(name && len > 0 && *name))
- DIE(aTHX_ "Null filename used");
- TAINT_PROPER("require");
- if (PL_op->op_type == OP_REQUIRE &&
- (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
- *svp != &PL_sv_undef)
- RETPUSHYES;
-
- /* prepare to compile file */
-
-#ifdef MACOS_TRADITIONAL
- if (PERL_FILE_IS_ABSOLUTE(name)
- || (*name == ':' && name[1] != ':' && strchr(name+2, ':')))
- {
- tryname = name;
- tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
- /* We consider paths of the form :a:b ambiguous and interpret them first
- as global then as local
- */
- if (!tryrsfp && *name == ':' && name[1] != ':' && strchr(name+2, ':'))
- goto trylocal;
- }
- else
-trylocal: {
-#else
- if (PERL_FILE_IS_ABSOLUTE(name)
- || (*name == '.' && (name[1] == '/' ||
- (name[1] == '.' && name[2] == '/'))))
- {
- tryname = name;
- tryrsfp = doopen_pmc(name,PERL_SCRIPT_MODE);
- }
- else {
-#endif
- AV *ar = GvAVn(PL_incgv);
- I32 i;
-#ifdef VMS
- char *unixname;
- if ((unixname = tounixspec(name, Nullch)) != Nullch)
-#endif
- {
- namesv = NEWSV(806, 0);
- for (i = 0; i <= AvFILL(ar); i++) {
- SV *dirsv = *av_fetch(ar, i, TRUE);
-
- if (SvROK(dirsv)) {
- int count;
- SV *loader = dirsv;
-
- if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
- loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
- }
-
- Perl_sv_setpvf(aTHX_ namesv, "/loader/0x%"UVxf"/%s",
- PTR2UV(SvANY(loader)), name);
- tryname = SvPVX(namesv);
- tryrsfp = 0;
-
- ENTER;
- SAVETMPS;
- EXTEND(SP, 2);
-
- PUSHMARK(SP);
- PUSHs(dirsv);
- PUSHs(sv);
- PUTBACK;
- if (sv_isobject(loader))
- count = call_method("INC", G_ARRAY);
- else
- count = call_sv(loader, G_ARRAY);
- SPAGAIN;
-
- if (count > 0) {
- int i = 0;
- SV *arg;
-
- SP -= count - 1;
- arg = SP[i++];
-
- if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVGV) {
- arg = SvRV(arg);
- }
-
- if (SvTYPE(arg) == SVt_PVGV) {
- IO *io = GvIO((GV *)arg);
-
- ++filter_has_file;
-
- if (io) {
- tryrsfp = IoIFP(io);
- if (IoTYPE(io) == IoTYPE_PIPE) {
- /* reading from a child process doesn't
- nest -- when returning from reading
- the inner module, the outer one is
- unreadable (closed?) I've tried to
- save the gv to manage the lifespan of
- the pipe, but this didn't help. XXX */
- filter_child_proc = (GV *)arg;
- (void)SvREFCNT_inc(filter_child_proc);
- }
- else {
- if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
- PerlIO_close(IoOFP(io));
- }
- IoIFP(io) = Nullfp;
- IoOFP(io) = Nullfp;
- }
- }
-
- if (i < count) {
- arg = SP[i++];
- }
- }
-
- if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVCV) {
- filter_sub = arg;
- (void)SvREFCNT_inc(filter_sub);
-
- if (i < count) {
- filter_state = SP[i];
- (void)SvREFCNT_inc(filter_state);
- }
-
- if (tryrsfp == 0) {
- tryrsfp = PerlIO_open("/dev/null",
- PERL_SCRIPT_MODE);
- }
- }
- }
-
- PUTBACK;
- FREETMPS;
- LEAVE;
-
- if (tryrsfp) {
- break;
- }
-
- filter_has_file = 0;
- if (filter_child_proc) {
- SvREFCNT_dec(filter_child_proc);
- filter_child_proc = 0;
- }
- if (filter_state) {
- SvREFCNT_dec(filter_state);
- filter_state = 0;
- }
- if (filter_sub) {
- SvREFCNT_dec(filter_sub);
- filter_sub = 0;
- }
- }
- else {
- char *dir = SvPVx(dirsv, n_a);
-#ifdef MACOS_TRADITIONAL
- char buf[256];
- Perl_sv_setpvf(aTHX_ namesv, "%s%s", MacPerl_CanonDir(dir, buf), name+(name[0] == ':'));
-#else
-#ifdef VMS
- char *unixdir;
- if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
- continue;
- sv_setpv(namesv, unixdir);
- sv_catpv(namesv, unixname);
-#else
- Perl_sv_setpvf(aTHX_ namesv, "%s/%s", dir, name);
-#endif
-#endif
- TAINT_PROPER("require");
- tryname = SvPVX(namesv);
-#ifdef MACOS_TRADITIONAL
- {
- /* Convert slashes in the name part, but not the directory part, to colons */
- char * colon;
- for (colon = tryname+strlen(dir); colon = strchr(colon, '/'); )
- *colon++ = ':';
- }
-#endif
- tryrsfp = doopen_pmc(tryname, PERL_SCRIPT_MODE);
- if (tryrsfp) {
- if (tryname[0] == '.' && tryname[1] == '/')
- tryname += 2;
- break;
- }
- }
- }
- }
- }
- SAVECOPFILE_FREE(&PL_compiling);
- CopFILE_set(&PL_compiling, tryrsfp ? tryname : name);
- SvREFCNT_dec(namesv);
- if (!tryrsfp) {
- if (PL_op->op_type == OP_REQUIRE) {
- char *msgstr = name;
- if (namesv) { /* did we lookup @INC? */
- SV *msg = sv_2mortal(newSVpv(msgstr,0));
- SV *dirmsgsv = NEWSV(0, 0);
- AV *ar = GvAVn(PL_incgv);
- I32 i;
- sv_catpvn(msg, " in @INC", 8);
- if (instr(SvPVX(msg), ".h "))
- sv_catpv(msg, " (change .h to .ph maybe?)");
- if (instr(SvPVX(msg), ".ph "))
- sv_catpv(msg, " (did you run h2ph?)");
- sv_catpv(msg, " (@INC contains:");
- for (i = 0; i <= AvFILL(ar); i++) {
- char *dir = SvPVx(*av_fetch(ar, i, TRUE), n_a);
- Perl_sv_setpvf(aTHX_ dirmsgsv, " %s", dir);
- sv_catsv(msg, dirmsgsv);
- }
- sv_catpvn(msg, ")", 1);
- SvREFCNT_dec(dirmsgsv);
- msgstr = SvPV_nolen(msg);
- }
- DIE(aTHX_ "Can't locate %s", msgstr);
- }
-
- RETPUSHUNDEF;
- }
- else
- SETERRNO(0, SS$_NORMAL);
-
- /* Assume success here to prevent recursive requirement. */
- (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
- newSVpv(CopFILE(&PL_compiling), 0), 0 );
-
- ENTER;
- SAVETMPS;
- lex_start(sv_2mortal(newSVpvn("",0)));
- SAVEGENERICSV(PL_rsfp_filters);
- PL_rsfp_filters = Nullav;
-
- PL_rsfp = tryrsfp;
- SAVEHINTS();
- PL_hints = 0;
- SAVESPTR(PL_compiling.cop_warnings);
- if (PL_dowarn & G_WARN_ALL_ON)
- PL_compiling.cop_warnings = pWARN_ALL ;
- else if (PL_dowarn & G_WARN_ALL_OFF)
- PL_compiling.cop_warnings = pWARN_NONE ;
- else
- PL_compiling.cop_warnings = pWARN_STD ;
-
- if (filter_sub || filter_child_proc) {
- SV *datasv = filter_add(run_user_filter, Nullsv);
- IoLINES(datasv) = filter_has_file;
- IoFMT_GV(datasv) = (GV *)filter_child_proc;
- IoTOP_GV(datasv) = (GV *)filter_state;
- IoBOTTOM_GV(datasv) = (GV *)filter_sub;
- }
-
- /* switch to eval mode */
- push_return(PL_op->op_next);
- PUSHBLOCK(cx, CXt_EVAL, SP);
- PUSHEVAL(cx, name, Nullgv);
-
- SAVECOPLINE(&PL_compiling);
- CopLINE_set(&PL_compiling, 0);
-
- PUTBACK;
-#ifdef USE_THREADS
- MUTEX_LOCK(&PL_eval_mutex);
- if (PL_eval_owner && PL_eval_owner != thr)
- while (PL_eval_owner)
- COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
- PL_eval_owner = thr;
- MUTEX_UNLOCK(&PL_eval_mutex);
-#endif /* USE_THREADS */
- return DOCATCH(doeval(G_SCALAR, NULL));
-}
-
-PP(pp_dofile)
-{
- return pp_require();
-}
-
-PP(pp_entereval)
-{
- dSP;
- register PERL_CONTEXT *cx;
- dPOPss;
- I32 gimme = GIMME_V, was = PL_sub_generation;
- char tbuf[TYPE_DIGITS(long) + 12];
- char *tmpbuf = tbuf;
- char *safestr;
- STRLEN len;
- OP *ret;
-
- if (!SvPV(sv,len) || !len)
- RETPUSHUNDEF;
- TAINT_PROPER("eval");
-
- ENTER;
- lex_start(sv);
- SAVETMPS;
-
- /* switch to eval mode */
-
- if (PERLDB_NAMEEVAL && CopLINE(PL_curcop)) {
- SV *sv = sv_newmortal();
- Perl_sv_setpvf(aTHX_ sv, "_<(eval %lu)[%s:%"IVdf"]",
- (unsigned long)++PL_evalseq,
- CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
- tmpbuf = SvPVX(sv);
- }
- else
- sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
- SAVECOPFILE_FREE(&PL_compiling);
- CopFILE_set(&PL_compiling, tmpbuf+2);
- SAVECOPLINE(&PL_compiling);
- CopLINE_set(&PL_compiling, 1);
- /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
- deleting the eval's FILEGV from the stash before gv_check() runs
- (i.e. before run-time proper). To work around the coredump that
- ensues, we always turn GvMULTI_on for any globals that were
- introduced within evals. See force_ident(). GSAR 96-10-12 */
- safestr = savepv(tmpbuf);
- SAVEDELETE(PL_defstash, safestr, strlen(safestr));
- SAVEHINTS();
- PL_hints = PL_op->op_targ;
- SAVESPTR(PL_compiling.cop_warnings);
- if (specialWARN(PL_curcop->cop_warnings))
- PL_compiling.cop_warnings = PL_curcop->cop_warnings;
- else {
- PL_compiling.cop_warnings = newSVsv(PL_curcop->cop_warnings);
- SAVEFREESV(PL_compiling.cop_warnings);
- }
-
- push_return(PL_op->op_next);
- PUSHBLOCK(cx, (CXt_EVAL|CXp_REAL), SP);
- PUSHEVAL(cx, 0, Nullgv);
-
- /* prepare to compile string */
-
- if (PERLDB_LINE && PL_curstash != PL_debstash)
- save_lines(CopFILEAV(&PL_compiling), PL_linestr);
- PUTBACK;
-#ifdef USE_THREADS
- MUTEX_LOCK(&PL_eval_mutex);
- if (PL_eval_owner && PL_eval_owner != thr)
- while (PL_eval_owner)
- COND_WAIT(&PL_eval_cond, &PL_eval_mutex);
- PL_eval_owner = thr;
- MUTEX_UNLOCK(&PL_eval_mutex);
-#endif /* USE_THREADS */
- ret = doeval(gimme, NULL);
- if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
- && ret != PL_op->op_next) { /* Successive compilation. */
- strcpy(safestr, "_<(eval )"); /* Anything fake and short. */
- }
- return DOCATCH(ret);
-}
-
-PP(pp_leaveeval)
-{
- dSP;
- register SV **mark;
- SV **newsp;
- PMOP *newpm;
- I32 gimme;
- register PERL_CONTEXT *cx;
- OP *retop;
- U8 save_flags = PL_op -> op_flags;
- I32 optype;
-
- POPBLOCK(cx,newpm);
- POPEVAL(cx);
- retop = pop_return();
-
- TAINT_NOT;
- if (gimme == G_VOID)
- MARK = newsp;
- else if (gimme == G_SCALAR) {
- MARK = newsp + 1;
- if (MARK <= SP) {
- if (SvFLAGS(TOPs) & SVs_TEMP)
- *MARK = TOPs;
- else
- *MARK = sv_mortalcopy(TOPs);
- }
- else {
- MEXTEND(mark,0);
- *MARK = &PL_sv_undef;
- }
- SP = MARK;
- }
- else {
- /* in case LEAVE wipes old return values */
- for (mark = newsp + 1; mark <= SP; mark++) {
- if (!(SvFLAGS(*mark) & SVs_TEMP)) {
- *mark = sv_mortalcopy(*mark);
- TAINT_NOT; /* Each item is independent */
- }
- }
- }
- PL_curpm = newpm; /* Don't pop $1 et al till now */
-
-#ifdef DEBUGGING
- assert(CvDEPTH(PL_compcv) == 1);
-#endif
- CvDEPTH(PL_compcv) = 0;
- lex_end();
-
- if (optype == OP_REQUIRE &&
- !(gimme == G_SCALAR ? SvTRUE(*SP) : SP > newsp))
- {
- /* Unassume the success we assumed earlier. */
- SV *nsv = cx->blk_eval.old_namesv;
- (void)hv_delete(GvHVn(PL_incgv), SvPVX(nsv), SvCUR(nsv), G_DISCARD);
- retop = Perl_die(aTHX_ "%s did not return a true value", SvPVX(nsv));
- /* die_where() did LEAVE, or we won't be here */
- }
- else {
- LEAVE;
- if (!(save_flags & OPf_SPECIAL))
- sv_setpv(ERRSV,"");
- }
-
- RETURNOP(retop);
-}
-
-PP(pp_entertry)
-{
- dSP;
- register PERL_CONTEXT *cx;
- I32 gimme = GIMME_V;
-
- ENTER;
- SAVETMPS;
-
- push_return(cLOGOP->op_other->op_next);
- PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), SP);
- PUSHEVAL(cx, 0, 0);
- PL_eval_root = PL_op; /* Only needed so that goto works right. */
-
- PL_in_eval = EVAL_INEVAL;
- sv_setpv(ERRSV,"");
- PUTBACK;
- return DOCATCH(PL_op->op_next);
-}
-
-PP(pp_leavetry)
-{
- dSP;
- register SV **mark;
- SV **newsp;
- PMOP *newpm;
- I32 gimme;
- register PERL_CONTEXT *cx;
- I32 optype;
-
- POPBLOCK(cx,newpm);
- POPEVAL(cx);
- pop_return();
-
- TAINT_NOT;
- if (gimme == G_VOID)
- SP = newsp;
- else if (gimme == G_SCALAR) {
- MARK = newsp + 1;
- if (MARK <= SP) {
- if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
- *MARK = TOPs;
- else
- *MARK = sv_mortalcopy(TOPs);
- }
- else {
- MEXTEND(mark,0);
- *MARK = &PL_sv_undef;
- }
- SP = MARK;
- }
- else {
- /* in case LEAVE wipes old return values */
- for (mark = newsp + 1; mark <= SP; mark++) {
- if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
- *mark = sv_mortalcopy(*mark);
- TAINT_NOT; /* Each item is independent */
- }
- }
- }
- PL_curpm = newpm; /* Don't pop $1 et al till now */
-
- LEAVE;
- sv_setpv(ERRSV,"");
- RETURN;
-}
-
-STATIC void
-S_doparseform(pTHX_ SV *sv)
-{
- STRLEN len;
- register char *s = SvPV_force(sv, len);
- register char *send = s + len;
- register char *base;
- register I32 skipspaces = 0;
- bool noblank;
- bool repeat;
- bool postspace = FALSE;
- U16 *fops;
- register U16 *fpc;
- U16 *linepc;
- register I32 arg;
- bool ischop;
-
- if (len == 0)
- Perl_croak(aTHX_ "Null picture in formline");
-
- New(804, fops, (send - s)*3+10, U16); /* Almost certainly too long... */
- fpc = fops;
-
- if (s < send) {
- linepc = fpc;
- *fpc++ = FF_LINEMARK;
- noblank = repeat = FALSE;
- base = s;
- }
-
- while (s <= send) {
- switch (*s++) {
- default:
- skipspaces = 0;
- continue;
-
- case '~':
- if (*s == '~') {
- repeat = TRUE;
- *s = ' ';
- }
- noblank = TRUE;
- s[-1] = ' ';
- /* FALL THROUGH */
- case ' ': case '\t':
- skipspaces++;
- continue;
-
- case '\n': case 0:
- arg = s - base;
- skipspaces++;
- arg -= skipspaces;
- if (arg) {
- if (postspace)
- *fpc++ = FF_SPACE;
- *fpc++ = FF_LITERAL;
- *fpc++ = arg;
- }
- postspace = FALSE;
- if (s <= send)
- skipspaces--;
- if (skipspaces) {
- *fpc++ = FF_SKIP;
- *fpc++ = skipspaces;
- }
- skipspaces = 0;
- if (s <= send)
- *fpc++ = FF_NEWLINE;
- if (noblank) {
- *fpc++ = FF_BLANK;
- if (repeat)
- arg = fpc - linepc + 1;
- else
- arg = 0;
- *fpc++ = arg;
- }
- if (s < send) {
- linepc = fpc;
- *fpc++ = FF_LINEMARK;
- noblank = repeat = FALSE;
- base = s;
- }
- else
- s++;
- continue;
-
- case '@':
- case '^':
- ischop = s[-1] == '^';
-
- if (postspace) {
- *fpc++ = FF_SPACE;
- postspace = FALSE;
- }
- arg = (s - base) - 1;
- if (arg) {
- *fpc++ = FF_LITERAL;
- *fpc++ = arg;
- }
-
- base = s - 1;
- *fpc++ = FF_FETCH;
- if (*s == '*') {
- s++;
- *fpc++ = 0;
- *fpc++ = FF_LINEGLOB;
- }
- else if (*s == '#' || (*s == '.' && s[1] == '#')) {
- arg = ischop ? 512 : 0;
- base = s - 1;
- while (*s == '#')
- s++;
- if (*s == '.') {
- char *f;
- s++;
- f = s;
- while (*s == '#')
- s++;
- arg |= 256 + (s - f);
- }
- *fpc++ = s - base; /* fieldsize for FETCH */
- *fpc++ = FF_DECIMAL;
- *fpc++ = arg;
- }
- else {
- I32 prespace = 0;
- bool ismore = FALSE;
-
- if (*s == '>') {
- while (*++s == '>') ;
- prespace = FF_SPACE;
- }
- else if (*s == '|') {
- while (*++s == '|') ;
- prespace = FF_HALFSPACE;
- postspace = TRUE;
- }
- else {
- if (*s == '<')
- while (*++s == '<') ;
- postspace = TRUE;
- }
- if (*s == '.' && s[1] == '.' && s[2] == '.') {
- s += 3;
- ismore = TRUE;
- }
- *fpc++ = s - base; /* fieldsize for FETCH */
-
- *fpc++ = ischop ? FF_CHECKCHOP : FF_CHECKNL;
-
- if (prespace)
- *fpc++ = prespace;
- *fpc++ = FF_ITEM;
- if (ismore)
- *fpc++ = FF_MORE;
- if (ischop)
- *fpc++ = FF_CHOP;
- }
- base = s;
- skipspaces = 0;
- continue;
- }
- }
- *fpc++ = FF_END;
-
- arg = fpc - fops;
- { /* need to jump to the next word */
- int z;
- z = WORD_ALIGN - SvCUR(sv) % WORD_ALIGN;
- SvGROW(sv, SvCUR(sv) + z + arg * sizeof(U16) + 4);
- s = SvPVX(sv) + SvCUR(sv) + z;
- }
- Copy(fops, s, arg, U16);
- Safefree(fops);
- sv_magic(sv, Nullsv, 'f', Nullch, 0);
- SvCOMPILED_on(sv);
-}
-
-/*
- * The rest of this file was derived from source code contributed
- * by Tom Horsley.
- *
- * NOTE: this code was derived from Tom Horsley's qsort replacement
- * and should not be confused with the original code.
- */
-
-/* Copyright (C) Tom Horsley, 1997. All rights reserved.
-
- Permission granted to distribute under the same terms as perl which are
- (briefly):
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- a) the GNU General Public License as published by the Free
- Software Foundation; either version 1, or (at your option) any
- later version, or
-
- b) the "Artistic License" which comes with this Kit.
-
- Details on the perl license can be found in the perl source code which
- may be located via the www.perl.com web page.
-
- This is the most wonderfulest possible qsort I can come up with (and
- still be mostly portable) My (limited) tests indicate it consistently
- does about 20% fewer calls to compare than does the qsort in the Visual
- C++ library, other vendors may vary.
-
- Some of the ideas in here can be found in "Algorithms" by Sedgewick,
- others I invented myself (or more likely re-invented since they seemed
- pretty obvious once I watched the algorithm operate for a while).
-
- Most of this code was written while watching the Marlins sweep the Giants
- in the 1997 National League Playoffs - no Braves fans allowed to use this
- code (just kidding :-).
-
- I realize that if I wanted to be true to the perl tradition, the only
- comment in this file would be something like:
-
- ...they shuffled back towards the rear of the line. 'No, not at the
- rear!' the slave-driver shouted. 'Three files up. And stay there...
-
- However, I really needed to violate that tradition just so I could keep
- track of what happens myself, not to mention some poor fool trying to
- understand this years from now :-).
-*/
-
-/* ********************************************************** Configuration */
-
-#ifndef QSORT_ORDER_GUESS
-#define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
-#endif
-
-/* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
- future processing - a good max upper bound is log base 2 of memory size
- (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
- safely be smaller than that since the program is taking up some space and
- most operating systems only let you grab some subset of contiguous
- memory (not to mention that you are normally sorting data larger than
- 1 byte element size :-).
-*/
-#ifndef QSORT_MAX_STACK
-#define QSORT_MAX_STACK 32
-#endif
-
-/* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
- Anything bigger and we use qsort. If you make this too small, the qsort
- will probably break (or become less efficient), because it doesn't expect
- the middle element of a partition to be the same as the right or left -
- you have been warned).
-*/
-#ifndef QSORT_BREAK_EVEN
-#define QSORT_BREAK_EVEN 6
-#endif
-
-/* ************************************************************* Data Types */
-
-/* hold left and right index values of a partition waiting to be sorted (the
- partition includes both left and right - right is NOT one past the end or
- anything like that).
-*/
-struct partition_stack_entry {
- int left;
- int right;
-#ifdef QSORT_ORDER_GUESS
- int qsort_break_even;
-#endif
-};
-
-/* ******************************************************* Shorthand Macros */
-
-/* Note that these macros will be used from inside the qsort function where
- we happen to know that the variable 'elt_size' contains the size of an
- array element and the variable 'temp' points to enough space to hold a
- temp element and the variable 'array' points to the array being sorted
- and 'compare' is the pointer to the compare routine.
-
- Also note that there are very many highly architecture specific ways
- these might be sped up, but this is simply the most generally portable
- code I could think of.
-*/
-
-/* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
-*/
-#define qsort_cmp(elt1, elt2) \
- ((*compare)(aTHXo_ array[elt1], array[elt2]))
-
-#ifdef QSORT_ORDER_GUESS
-#define QSORT_NOTICE_SWAP swapped++;
-#else
-#define QSORT_NOTICE_SWAP
-#endif
-
-/* swaps contents of array elements elt1, elt2.
-*/
-#define qsort_swap(elt1, elt2) \
- STMT_START { \
- QSORT_NOTICE_SWAP \
- temp = array[elt1]; \
- array[elt1] = array[elt2]; \
- array[elt2] = temp; \
- } STMT_END
-
-/* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
- elt3 and elt3 gets elt1.
-*/
-#define qsort_rotate(elt1, elt2, elt3) \
- STMT_START { \
- QSORT_NOTICE_SWAP \
- temp = array[elt1]; \
- array[elt1] = array[elt2]; \
- array[elt2] = array[elt3]; \
- array[elt3] = temp; \
- } STMT_END
-
-/* ************************************************************ Debug stuff */
-
-#ifdef QSORT_DEBUG
-
-static void
-break_here()
-{
- return; /* good place to set a breakpoint */
-}
-
-#define qsort_assert(t) (void)( (t) || (break_here(), 0) )
-
-static void
-doqsort_all_asserts(
- void * array,
- size_t num_elts,
- size_t elt_size,
- int (*compare)(const void * elt1, const void * elt2),
- int pc_left, int pc_right, int u_left, int u_right)
-{
- int i;
-
- qsort_assert(pc_left <= pc_right);
- qsort_assert(u_right < pc_left);
- qsort_assert(pc_right < u_left);
- for (i = u_right + 1; i < pc_left; ++i) {
- qsort_assert(qsort_cmp(i, pc_left) < 0);
- }
- for (i = pc_left; i < pc_right; ++i) {
- qsort_assert(qsort_cmp(i, pc_right) == 0);
- }
- for (i = pc_right + 1; i < u_left; ++i) {
- qsort_assert(qsort_cmp(pc_right, i) < 0);
- }
-}
-
-#define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
- doqsort_all_asserts(array, num_elts, elt_size, compare, \
- PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
-
-#else
-
-#define qsort_assert(t) ((void)0)
-
-#define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
-
-#endif
-
-/* ****************************************************************** qsort */
-
-STATIC void
-S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare)
-{
- register SV * temp;
-
- struct partition_stack_entry partition_stack[QSORT_MAX_STACK];
- int next_stack_entry = 0;
-
- int part_left;
- int part_right;
-#ifdef QSORT_ORDER_GUESS
- int qsort_break_even;
- int swapped;
-#endif
-
- /* Make sure we actually have work to do.
- */
- if (num_elts <= 1) {
- return;
- }
-
- /* Setup the initial partition definition and fall into the sorting loop
- */
- part_left = 0;
- part_right = (int)(num_elts - 1);
-#ifdef QSORT_ORDER_GUESS
- qsort_break_even = QSORT_BREAK_EVEN;
-#else
-#define qsort_break_even QSORT_BREAK_EVEN
-#endif
- for ( ; ; ) {
- if ((part_right - part_left) >= qsort_break_even) {
- /* OK, this is gonna get hairy, so lets try to document all the
- concepts and abbreviations and variables and what they keep
- track of:
-
- pc: pivot chunk - the set of array elements we accumulate in the
- middle of the partition, all equal in value to the original
- pivot element selected. The pc is defined by:
-
- pc_left - the leftmost array index of the pc
- pc_right - the rightmost array index of the pc
-
- we start with pc_left == pc_right and only one element
- in the pivot chunk (but it can grow during the scan).
-
- u: uncompared elements - the set of elements in the partition
- we have not yet compared to the pivot value. There are two
- uncompared sets during the scan - one to the left of the pc
- and one to the right.
-
- u_right - the rightmost index of the left side's uncompared set
- u_left - the leftmost index of the right side's uncompared set
-
- The leftmost index of the left sides's uncompared set
- doesn't need its own variable because it is always defined
- by the leftmost edge of the whole partition (part_left). The
- same goes for the rightmost edge of the right partition
- (part_right).
-
- We know there are no uncompared elements on the left once we
- get u_right < part_left and no uncompared elements on the
- right once u_left > part_right. When both these conditions
- are met, we have completed the scan of the partition.
-
- Any elements which are between the pivot chunk and the
- uncompared elements should be less than the pivot value on
- the left side and greater than the pivot value on the right
- side (in fact, the goal of the whole algorithm is to arrange
- for that to be true and make the groups of less-than and
- greater-then elements into new partitions to sort again).
-
- As you marvel at the complexity of the code and wonder why it
- has to be so confusing. Consider some of the things this level
- of confusion brings:
-
- Once I do a compare, I squeeze every ounce of juice out of it. I
- never do compare calls I don't have to do, and I certainly never
- do redundant calls.
-
- I also never swap any elements unless I can prove there is a
- good reason. Many sort algorithms will swap a known value with
- an uncompared value just to get things in the right place (or
- avoid complexity :-), but that uncompared value, once it gets
- compared, may then have to be swapped again. A lot of the
- complexity of this code is due to the fact that it never swaps
- anything except compared values, and it only swaps them when the
- compare shows they are out of position.
- */
- int pc_left, pc_right;
- int u_right, u_left;
-
- int s;
-
- pc_left = ((part_left + part_right) / 2);
- pc_right = pc_left;
- u_right = pc_left - 1;
- u_left = pc_right + 1;
-
- /* Qsort works best when the pivot value is also the median value
- in the partition (unfortunately you can't find the median value
- without first sorting :-), so to give the algorithm a helping
- hand, we pick 3 elements and sort them and use the median value
- of that tiny set as the pivot value.
-
- Some versions of qsort like to use the left middle and right as
- the 3 elements to sort so they can insure the ends of the
- partition will contain values which will stop the scan in the
- compare loop, but when you have to call an arbitrarily complex
- routine to do a compare, its really better to just keep track of
- array index values to know when you hit the edge of the
- partition and avoid the extra compare. An even better reason to
- avoid using a compare call is the fact that you can drop off the
- edge of the array if someone foolishly provides you with an
- unstable compare function that doesn't always provide consistent
- results.
-
- So, since it is simpler for us to compare the three adjacent
- elements in the middle of the partition, those are the ones we
- pick here (conveniently pointed at by u_right, pc_left, and
- u_left). The values of the left, center, and right elements
- are refered to as l c and r in the following comments.
- */
-
-#ifdef QSORT_ORDER_GUESS
- swapped = 0;
-#endif
- s = qsort_cmp(u_right, pc_left);
- if (s < 0) {
- /* l < c */
- s = qsort_cmp(pc_left, u_left);
- /* if l < c, c < r - already in order - nothing to do */
- if (s == 0) {
- /* l < c, c == r - already in order, pc grows */
- ++pc_right;
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- } else if (s > 0) {
- /* l < c, c > r - need to know more */
- s = qsort_cmp(u_right, u_left);
- if (s < 0) {
- /* l < c, c > r, l < r - swap c & r to get ordered */
- qsort_swap(pc_left, u_left);
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- } else if (s == 0) {
- /* l < c, c > r, l == r - swap c&r, grow pc */
- qsort_swap(pc_left, u_left);
- --pc_left;
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- } else {
- /* l < c, c > r, l > r - make lcr into rlc to get ordered */
- qsort_rotate(pc_left, u_right, u_left);
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- }
- }
- } else if (s == 0) {
- /* l == c */
- s = qsort_cmp(pc_left, u_left);
- if (s < 0) {
- /* l == c, c < r - already in order, grow pc */
- --pc_left;
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- } else if (s == 0) {
- /* l == c, c == r - already in order, grow pc both ways */
- --pc_left;
- ++pc_right;
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- } else {
- /* l == c, c > r - swap l & r, grow pc */
- qsort_swap(u_right, u_left);
- ++pc_right;
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- }
- } else {
- /* l > c */
- s = qsort_cmp(pc_left, u_left);
- if (s < 0) {
- /* l > c, c < r - need to know more */
- s = qsort_cmp(u_right, u_left);
- if (s < 0) {
- /* l > c, c < r, l < r - swap l & c to get ordered */
- qsort_swap(u_right, pc_left);
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- } else if (s == 0) {
- /* l > c, c < r, l == r - swap l & c, grow pc */
- qsort_swap(u_right, pc_left);
- ++pc_right;
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- } else {
- /* l > c, c < r, l > r - rotate lcr into crl to order */
- qsort_rotate(u_right, pc_left, u_left);
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- }
- } else if (s == 0) {
- /* l > c, c == r - swap ends, grow pc */
- qsort_swap(u_right, u_left);
- --pc_left;
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- } else {
- /* l > c, c > r - swap ends to get in order */
- qsort_swap(u_right, u_left);
- qsort_all_asserts(pc_left, pc_right, u_left + 1, u_right - 1);
- }
- }
- /* We now know the 3 middle elements have been compared and
- arranged in the desired order, so we can shrink the uncompared
- sets on both sides
- */
- --u_right;
- ++u_left;
- qsort_all_asserts(pc_left, pc_right, u_left, u_right);
-
- /* The above massive nested if was the simple part :-). We now have
- the middle 3 elements ordered and we need to scan through the
- uncompared sets on either side, swapping elements that are on
- the wrong side or simply shuffling equal elements around to get
- all equal elements into the pivot chunk.
- */
-
- for ( ; ; ) {
- int still_work_on_left;
- int still_work_on_right;
-
- /* Scan the uncompared values on the left. If I find a value
- equal to the pivot value, move it over so it is adjacent to
- the pivot chunk and expand the pivot chunk. If I find a value
- less than the pivot value, then just leave it - its already
- on the correct side of the partition. If I find a greater
- value, then stop the scan.
- */
- while ((still_work_on_left = (u_right >= part_left))) {
- s = qsort_cmp(u_right, pc_left);
- if (s < 0) {
- --u_right;
- } else if (s == 0) {
- --pc_left;
- if (pc_left != u_right) {
- qsort_swap(u_right, pc_left);
- }
- --u_right;
- } else {
- break;
- }
- qsort_assert(u_right < pc_left);
- qsort_assert(pc_left <= pc_right);
- qsort_assert(qsort_cmp(u_right + 1, pc_left) <= 0);
- qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
- }
-
- /* Do a mirror image scan of uncompared values on the right
- */
- while ((still_work_on_right = (u_left <= part_right))) {
- s = qsort_cmp(pc_right, u_left);
- if (s < 0) {
- ++u_left;
- } else if (s == 0) {
- ++pc_right;
- if (pc_right != u_left) {
- qsort_swap(pc_right, u_left);
- }
- ++u_left;
- } else {
- break;
- }
- qsort_assert(u_left > pc_right);
- qsort_assert(pc_left <= pc_right);
- qsort_assert(qsort_cmp(pc_right, u_left - 1) <= 0);
- qsort_assert(qsort_cmp(pc_left, pc_right) == 0);
- }
-
- if (still_work_on_left) {
- /* I know I have a value on the left side which needs to be
- on the right side, but I need to know more to decide
- exactly the best thing to do with it.
- */
- if (still_work_on_right) {
- /* I know I have values on both side which are out of
- position. This is a big win because I kill two birds
- with one swap (so to speak). I can advance the
- uncompared pointers on both sides after swapping both
- of them into the right place.
- */
- qsort_swap(u_right, u_left);
- --u_right;
- ++u_left;
- qsort_all_asserts(pc_left, pc_right, u_left, u_right);
- } else {
- /* I have an out of position value on the left, but the
- right is fully scanned, so I "slide" the pivot chunk
- and any less-than values left one to make room for the
- greater value over on the right. If the out of position
- value is immediately adjacent to the pivot chunk (there
- are no less-than values), I can do that with a swap,
- otherwise, I have to rotate one of the less than values
- into the former position of the out of position value
- and the right end of the pivot chunk into the left end
- (got all that?).
- */
- --pc_left;
- if (pc_left == u_right) {
- qsort_swap(u_right, pc_right);
- qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
- } else {
- qsort_rotate(u_right, pc_left, pc_right);
- qsort_all_asserts(pc_left, pc_right-1, u_left, u_right-1);
- }
- --pc_right;
- --u_right;
- }
- } else if (still_work_on_right) {
- /* Mirror image of complex case above: I have an out of
- position value on the right, but the left is fully
- scanned, so I need to shuffle things around to make room
- for the right value on the left.
- */
- ++pc_right;
- if (pc_right == u_left) {
- qsort_swap(u_left, pc_left);
- qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
- } else {
- qsort_rotate(pc_right, pc_left, u_left);
- qsort_all_asserts(pc_left+1, pc_right, u_left+1, u_right);
- }
- ++pc_left;
- ++u_left;
- } else {
- /* No more scanning required on either side of partition,
- break out of loop and figure out next set of partitions
- */
- break;
- }
- }
-
- /* The elements in the pivot chunk are now in the right place. They
- will never move or be compared again. All I have to do is decide
- what to do with the stuff to the left and right of the pivot
- chunk.
-
- Notes on the QSORT_ORDER_GUESS ifdef code:
-
- 1. If I just built these partitions without swapping any (or
- very many) elements, there is a chance that the elements are
- already ordered properly (being properly ordered will
- certainly result in no swapping, but the converse can't be
- proved :-).
-
- 2. A (properly written) insertion sort will run faster on
- already ordered data than qsort will.
-
- 3. Perhaps there is some way to make a good guess about
- switching to an insertion sort earlier than partition size 6
- (for instance - we could save the partition size on the stack
- and increase the size each time we find we didn't swap, thus
- switching to insertion sort earlier for partitions with a
- history of not swapping).
-
- 4. Naturally, if I just switch right away, it will make
- artificial benchmarks with pure ascending (or descending)
- data look really good, but is that a good reason in general?
- Hard to say...
- */
-
-#ifdef QSORT_ORDER_GUESS
- if (swapped < 3) {
-#if QSORT_ORDER_GUESS == 1
- qsort_break_even = (part_right - part_left) + 1;
-#endif
-#if QSORT_ORDER_GUESS == 2
- qsort_break_even *= 2;
-#endif
-#if QSORT_ORDER_GUESS == 3
- int prev_break = qsort_break_even;
- qsort_break_even *= qsort_break_even;
- if (qsort_break_even < prev_break) {
- qsort_break_even = (part_right - part_left) + 1;
- }
-#endif
- } else {
- qsort_break_even = QSORT_BREAK_EVEN;
- }
-#endif
-
- if (part_left < pc_left) {
- /* There are elements on the left which need more processing.
- Check the right as well before deciding what to do.
- */
- if (pc_right < part_right) {
- /* We have two partitions to be sorted. Stack the biggest one
- and process the smallest one on the next iteration. This
- minimizes the stack height by insuring that any additional
- stack entries must come from the smallest partition which
- (because it is smallest) will have the fewest
- opportunities to generate additional stack entries.
- */
- if ((part_right - pc_right) > (pc_left - part_left)) {
- /* stack the right partition, process the left */
- partition_stack[next_stack_entry].left = pc_right + 1;
- partition_stack[next_stack_entry].right = part_right;
-#ifdef QSORT_ORDER_GUESS
- partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
-#endif
- part_right = pc_left - 1;
- } else {
- /* stack the left partition, process the right */
- partition_stack[next_stack_entry].left = part_left;
- partition_stack[next_stack_entry].right = pc_left - 1;
-#ifdef QSORT_ORDER_GUESS
- partition_stack[next_stack_entry].qsort_break_even = qsort_break_even;
-#endif
- part_left = pc_right + 1;
- }
- qsort_assert(next_stack_entry < QSORT_MAX_STACK);
- ++next_stack_entry;
- } else {
- /* The elements on the left are the only remaining elements
- that need sorting, arrange for them to be processed as the
- next partition.
- */
- part_right = pc_left - 1;
- }
- } else if (pc_right < part_right) {
- /* There is only one chunk on the right to be sorted, make it
- the new partition and loop back around.
- */
- part_left = pc_right + 1;
- } else {
- /* This whole partition wound up in the pivot chunk, so
- we need to get a new partition off the stack.
- */
- if (next_stack_entry == 0) {
- /* the stack is empty - we are done */
- break;
- }
- --next_stack_entry;
- part_left = partition_stack[next_stack_entry].left;
- part_right = partition_stack[next_stack_entry].right;
-#ifdef QSORT_ORDER_GUESS
- qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
-#endif
- }
- } else {
- /* This partition is too small to fool with qsort complexity, just
- do an ordinary insertion sort to minimize overhead.
- */
- int i;
- /* Assume 1st element is in right place already, and start checking
- at 2nd element to see where it should be inserted.
- */
- for (i = part_left + 1; i <= part_right; ++i) {
- int j;
- /* Scan (backwards - just in case 'i' is already in right place)
- through the elements already sorted to see if the ith element
- belongs ahead of one of them.
- */
- for (j = i - 1; j >= part_left; --j) {
- if (qsort_cmp(i, j) >= 0) {
- /* i belongs right after j
- */
- break;
- }
- }
- ++j;
- if (j != i) {
- /* Looks like we really need to move some things
- */
- int k;
- temp = array[i];
- for (k = i - 1; k >= j; --k)
- array[k + 1] = array[k];
- array[j] = temp;
- }
- }
-
- /* That partition is now sorted, grab the next one, or get out
- of the loop if there aren't any more.
- */
-
- if (next_stack_entry == 0) {
- /* the stack is empty - we are done */
- break;
- }
- --next_stack_entry;
- part_left = partition_stack[next_stack_entry].left;
- part_right = partition_stack[next_stack_entry].right;
-#ifdef QSORT_ORDER_GUESS
- qsort_break_even = partition_stack[next_stack_entry].qsort_break_even;
-#endif
- }
- }
-
- /* Believe it or not, the array is sorted at this point! */
-}
-
-
-#ifdef PERL_OBJECT
-#undef this
-#define this pPerl
-#include "XSUB.h"
-#endif
-
-
-static I32
-sortcv(pTHXo_ SV *a, SV *b)
-{
- I32 oldsaveix = PL_savestack_ix;
- I32 oldscopeix = PL_scopestack_ix;
- I32 result;
- GvSV(PL_firstgv) = a;
- GvSV(PL_secondgv) = b;
- PL_stack_sp = PL_stack_base;
- PL_op = PL_sortcop;
- CALLRUNOPS(aTHX);
- if (PL_stack_sp != PL_stack_base + 1)
- Perl_croak(aTHX_ "Sort subroutine didn't return single value");
- if (!SvNIOKp(*PL_stack_sp))
- Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
- result = SvIV(*PL_stack_sp);
- while (PL_scopestack_ix > oldscopeix) {
- LEAVE;
- }
- leave_scope(oldsaveix);
- return result;
-}
-
-static I32
-sortcv_stacked(pTHXo_ SV *a, SV *b)
-{
- I32 oldsaveix = PL_savestack_ix;
- I32 oldscopeix = PL_scopestack_ix;
- I32 result;
- AV *av;
-
-#ifdef USE_THREADS
- av = (AV*)PL_curpad[0];
-#else
- av = GvAV(PL_defgv);
-#endif
-
- if (AvMAX(av) < 1) {
- SV** ary = AvALLOC(av);
- if (AvARRAY(av) != ary) {
- AvMAX(av) += AvARRAY(av) - AvALLOC(av);
- SvPVX(av) = (char*)ary;
- }
- if (AvMAX(av) < 1) {
- AvMAX(av) = 1;
- Renew(ary,2,SV*);
- SvPVX(av) = (char*)ary;
- }
- }
- AvFILLp(av) = 1;
-
- AvARRAY(av)[0] = a;
- AvARRAY(av)[1] = b;
- PL_stack_sp = PL_stack_base;
- PL_op = PL_sortcop;
- CALLRUNOPS(aTHX);
- if (PL_stack_sp != PL_stack_base + 1)
- Perl_croak(aTHX_ "Sort subroutine didn't return single value");
- if (!SvNIOKp(*PL_stack_sp))
- Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
- result = SvIV(*PL_stack_sp);
- while (PL_scopestack_ix > oldscopeix) {
- LEAVE;
- }
- leave_scope(oldsaveix);
- return result;
-}
-
-static I32
-sortcv_xsub(pTHXo_ SV *a, SV *b)
-{
- dSP;
- I32 oldsaveix = PL_savestack_ix;
- I32 oldscopeix = PL_scopestack_ix;
- I32 result;
- CV *cv=(CV*)PL_sortcop;
-
- SP = PL_stack_base;
- PUSHMARK(SP);
- EXTEND(SP, 2);
- *++SP = a;
- *++SP = b;
- PUTBACK;
- (void)(*CvXSUB(cv))(aTHXo_ cv);
- if (PL_stack_sp != PL_stack_base + 1)
- Perl_croak(aTHX_ "Sort subroutine didn't return single value");
- if (!SvNIOKp(*PL_stack_sp))
- Perl_croak(aTHX_ "Sort subroutine didn't return a numeric value");
- result = SvIV(*PL_stack_sp);
- while (PL_scopestack_ix > oldscopeix) {
- LEAVE;
- }
- leave_scope(oldsaveix);
- return result;
-}
-
-
-static I32
-sv_ncmp(pTHXo_ SV *a, SV *b)
-{
- NV nv1 = SvNV(a);
- NV nv2 = SvNV(b);
- return nv1 < nv2 ? -1 : nv1 > nv2 ? 1 : 0;
-}
-
-static I32
-sv_i_ncmp(pTHXo_ SV *a, SV *b)
-{
- IV iv1 = SvIV(a);
- IV iv2 = SvIV(b);
- return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
-}
-#define tryCALL_AMAGICbin(left,right,meth,svp) STMT_START { \
- *svp = Nullsv; \
- if (PL_amagic_generation) { \
- if (SvAMAGIC(left)||SvAMAGIC(right))\
- *svp = amagic_call(left, \
- right, \
- CAT2(meth,_amg), \
- 0); \
- } \
- } STMT_END
-
-static I32
-amagic_ncmp(pTHXo_ register SV *a, register SV *b)
-{
- SV *tmpsv;
- tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
- if (tmpsv) {
- NV d;
-
- if (SvIOK(tmpsv)) {
- I32 i = SvIVX(tmpsv);
- if (i > 0)
- return 1;
- return i? -1 : 0;
- }
- d = SvNV(tmpsv);
- if (d > 0)
- return 1;
- return d? -1 : 0;
- }
- return sv_ncmp(aTHXo_ a, b);
-}
-
-static I32
-amagic_i_ncmp(pTHXo_ register SV *a, register SV *b)
-{
- SV *tmpsv;
- tryCALL_AMAGICbin(a,b,ncmp,&tmpsv);
- if (tmpsv) {
- NV d;
-
- if (SvIOK(tmpsv)) {
- I32 i = SvIVX(tmpsv);
- if (i > 0)
- return 1;
- return i? -1 : 0;
- }
- d = SvNV(tmpsv);
- if (d > 0)
- return 1;
- return d? -1 : 0;
- }
- return sv_i_ncmp(aTHXo_ a, b);
-}
-
-static I32
-amagic_cmp(pTHXo_ register SV *str1, register SV *str2)
-{
- SV *tmpsv;
- tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
- if (tmpsv) {
- NV d;
-
- if (SvIOK(tmpsv)) {
- I32 i = SvIVX(tmpsv);
- if (i > 0)
- return 1;
- return i? -1 : 0;
- }
- d = SvNV(tmpsv);
- if (d > 0)
- return 1;
- return d? -1 : 0;
- }
- return sv_cmp(str1, str2);
-}
-
-static I32
-amagic_cmp_locale(pTHXo_ register SV *str1, register SV *str2)
-{
- SV *tmpsv;
- tryCALL_AMAGICbin(str1,str2,scmp,&tmpsv);
- if (tmpsv) {
- NV d;
-
- if (SvIOK(tmpsv)) {
- I32 i = SvIVX(tmpsv);
- if (i > 0)
- return 1;
- return i? -1 : 0;
- }
- d = SvNV(tmpsv);
- if (d > 0)
- return 1;
- return d? -1 : 0;
- }
- return sv_cmp_locale(str1, str2);
-}
-
-static I32
-run_user_filter(pTHXo_ int idx, SV *buf_sv, int maxlen)
-{
- SV *datasv = FILTER_DATA(idx);
- int filter_has_file = IoLINES(datasv);
- GV *filter_child_proc = (GV *)IoFMT_GV(datasv);
- SV *filter_state = (SV *)IoTOP_GV(datasv);
- SV *filter_sub = (SV *)IoBOTTOM_GV(datasv);
- int len = 0;
-
- /* I was having segfault trouble under Linux 2.2.5 after a
- parse error occured. (Had to hack around it with a test
- for PL_error_count == 0.) Solaris doesn't segfault --
- not sure where the trouble is yet. XXX */
-
- if (filter_has_file) {
- len = FILTER_READ(idx+1, buf_sv, maxlen);
- }
-
- if (filter_sub && len >= 0) {
- dSP;
- int count;
-
- ENTER;
- SAVE_DEFSV;
- SAVETMPS;
- EXTEND(SP, 2);
-
- DEFSV = buf_sv;
- PUSHMARK(SP);
- PUSHs(sv_2mortal(newSViv(maxlen)));
- if (filter_state) {
- PUSHs(filter_state);
- }
- PUTBACK;
- count = call_sv(filter_sub, G_SCALAR);
- SPAGAIN;
-
- if (count > 0) {
- SV *out = POPs;
- if (SvOK(out)) {
- len = SvIV(out);
- }
- }
-
- PUTBACK;
- FREETMPS;
- LEAVE;
- }
-
- if (len <= 0) {
- IoLINES(datasv) = 0;
- if (filter_child_proc) {
- SvREFCNT_dec(filter_child_proc);
- IoFMT_GV(datasv) = Nullgv;
- }
- if (filter_state) {
- SvREFCNT_dec(filter_state);
- IoTOP_GV(datasv) = Nullgv;
- }
- if (filter_sub) {
- SvREFCNT_dec(filter_sub);
- IoBOTTOM_GV(datasv) = Nullgv;
- }
- filter_del(run_user_filter);
- }
-
- return len;
-}
-
-#ifdef PERL_OBJECT
-
-static I32
-sv_cmp_locale_static(pTHXo_ register SV *str1, register SV *str2)
-{
- return sv_cmp_locale(str1, str2);
-}
-
-static I32
-sv_cmp_static(pTHXo_ register SV *str1, register SV *str2)
-{
- return sv_cmp(str1, str2);
-}
-
-#endif /* PERL_OBJECT */
diff --git a/contrib/perl5/pp_hot.c b/contrib/perl5/pp_hot.c
deleted file mode 100644
index aecfaba..0000000
--- a/contrib/perl5/pp_hot.c
+++ /dev/null
@@ -1,3008 +0,0 @@
-/* pp_hot.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
- * shaking the air.
- *
- * Awake! Awake! Fear, Fire, Foes! Awake!
- * Fire, Foes! Awake!
- */
-
-#include "EXTERN.h"
-#define PERL_IN_PP_HOT_C
-#include "perl.h"
-
-/* Hot code. */
-
-#ifdef USE_THREADS
-static void unset_cvowner(pTHXo_ void *cvarg);
-#endif /* USE_THREADS */
-
-PP(pp_const)
-{
- dSP;
- XPUSHs(cSVOP_sv);
- RETURN;
-}
-
-PP(pp_nextstate)
-{
- PL_curcop = (COP*)PL_op;
- TAINT_NOT; /* Each statement is presumed innocent */
- PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
- FREETMPS;
- return NORMAL;
-}
-
-PP(pp_gvsv)
-{
- dSP;
- EXTEND(SP,1);
- if (PL_op->op_private & OPpLVAL_INTRO)
- PUSHs(save_scalar(cGVOP_gv));
- else
- PUSHs(GvSV(cGVOP_gv));
- RETURN;
-}
-
-PP(pp_null)
-{
- return NORMAL;
-}
-
-PP(pp_setstate)
-{
- PL_curcop = (COP*)PL_op;
- return NORMAL;
-}
-
-PP(pp_pushmark)
-{
- PUSHMARK(PL_stack_sp);
- return NORMAL;
-}
-
-PP(pp_stringify)
-{
- dSP; dTARGET;
- STRLEN len;
- char *s;
- s = SvPV(TOPs,len);
- sv_setpvn(TARG,s,len);
- if (SvUTF8(TOPs))
- SvUTF8_on(TARG);
- else
- SvUTF8_off(TARG);
- SETTARG;
- RETURN;
-}
-
-PP(pp_gv)
-{
- dSP;
- XPUSHs((SV*)cGVOP_gv);
- RETURN;
-}
-
-PP(pp_and)
-{
- dSP;
- if (!SvTRUE(TOPs))
- RETURN;
- else {
- --SP;
- RETURNOP(cLOGOP->op_other);
- }
-}
-
-PP(pp_sassign)
-{
- dSP; dPOPTOPssrl;
-
- if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
- SV *temp;
- temp = left; left = right; right = temp;
- }
- if (PL_tainting && PL_tainted && !SvTAINTED(left))
- TAINT_NOT;
- SvSetMagicSV(right, left);
- SETs(right);
- RETURN;
-}
-
-PP(pp_cond_expr)
-{
- dSP;
- if (SvTRUEx(POPs))
- RETURNOP(cLOGOP->op_other);
- else
- RETURNOP(cLOGOP->op_next);
-}
-
-PP(pp_unstack)
-{
- I32 oldsave;
- TAINT_NOT; /* Each statement is presumed innocent */
- PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
- FREETMPS;
- oldsave = PL_scopestack[PL_scopestack_ix - 1];
- LEAVE_SCOPE(oldsave);
- return NORMAL;
-}
-
-PP(pp_concat)
-{
- dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
- {
- dPOPTOPssrl;
- SV* rcopy = Nullsv;
-
- if (SvGMAGICAL(left))
- mg_get(left);
- if (TARG == right && SvGMAGICAL(right))
- mg_get(right);
-
- if (TARG == right && left != right)
- /* Clone since otherwise we cannot prepend. */
- rcopy = sv_2mortal(newSVsv(right));
-
- if (TARG != left)
- sv_setsv(TARG, left);
-
- if (TARG == right) {
- if (left == right) {
- /* $right = $right . $right; */
- STRLEN rlen;
- char *rpv = SvPV(right, rlen);
-
- sv_catpvn(TARG, rpv, rlen);
- }
- else /* $right = $left . $right; */
- sv_catsv(TARG, rcopy);
- }
- else {
- if (!SvOK(TARG)) /* Avoid warning when concatenating to undef. */
- sv_setpv(TARG, "");
- /* $other = $left . $right; */
- /* $left = $left . $right; */
- sv_catsv(TARG, right);
- }
-
-#if defined(PERL_Y2KWARN)
- if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K)) {
- STRLEN n;
- char *s = SvPV(TARG,n);
- if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
- && (n == 2 || !isDIGIT(s[n-3])))
- {
- Perl_warner(aTHX_ WARN_Y2K, "Possible Y2K bug: %s",
- "about to append an integer to '19'");
- }
- }
-#endif
-
- SETTARG;
- RETURN;
- }
-}
-
-PP(pp_padsv)
-{
- dSP; dTARGET;
- XPUSHs(TARG);
- if (PL_op->op_flags & OPf_MOD) {
- if (PL_op->op_private & OPpLVAL_INTRO)
- SAVECLEARSV(PL_curpad[PL_op->op_targ]);
- else if (PL_op->op_private & OPpDEREF) {
- PUTBACK;
- vivify_ref(PL_curpad[PL_op->op_targ], PL_op->op_private & OPpDEREF);
- SPAGAIN;
- }
- }
- RETURN;
-}
-
-PP(pp_readline)
-{
- tryAMAGICunTARGET(iter, 0);
- PL_last_in_gv = (GV*)(*PL_stack_sp--);
- if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
- if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
- PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
- else {
- dSP;
- XPUSHs((SV*)PL_last_in_gv);
- PUTBACK;
- pp_rv2gv();
- PL_last_in_gv = (GV*)(*PL_stack_sp--);
- }
- }
- return do_readline();
-}
-
-PP(pp_eq)
-{
- dSP; tryAMAGICbinSET(eq,0);
- {
- dPOPnv;
- SETs(boolSV(TOPn == value));
- RETURN;
- }
-}
-
-PP(pp_preinc)
-{
- dSP;
- if (SvREADONLY(TOPs) || SvTYPE(TOPs) > SVt_PVLV)
- DIE(aTHX_ PL_no_modify);
- if (SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs) &&
- SvIVX(TOPs) != IV_MAX)
- {
- ++SvIVX(TOPs);
- SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
- }
- else
- sv_inc(TOPs);
- SvSETMAGIC(TOPs);
- return NORMAL;
-}
-
-PP(pp_or)
-{
- dSP;
- if (SvTRUE(TOPs))
- RETURN;
- else {
- --SP;
- RETURNOP(cLOGOP->op_other);
- }
-}
-
-PP(pp_add)
-{
- dSP; dATARGET; tryAMAGICbin(add,opASSIGN);
- {
- dPOPTOPnnrl_ul;
- SETn( left + right );
- RETURN;
- }
-}
-
-PP(pp_aelemfast)
-{
- dSP;
- AV *av = GvAV(cGVOP_gv);
- U32 lval = PL_op->op_flags & OPf_MOD;
- SV** svp = av_fetch(av, PL_op->op_private, lval);
- SV *sv = (svp ? *svp : &PL_sv_undef);
- EXTEND(SP, 1);
- if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
- sv = sv_mortalcopy(sv);
- PUSHs(sv);
- RETURN;
-}
-
-PP(pp_join)
-{
- dSP; dMARK; dTARGET;
- MARK++;
- do_join(TARG, *MARK, MARK, SP);
- SP = MARK;
- SETs(TARG);
- RETURN;
-}
-
-PP(pp_pushre)
-{
- dSP;
-#ifdef DEBUGGING
- /*
- * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
- * will be enough to hold an OP*.
- */
- SV* sv = sv_newmortal();
- sv_upgrade(sv, SVt_PVLV);
- LvTYPE(sv) = '/';
- Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
- XPUSHs(sv);
-#else
- XPUSHs((SV*)PL_op);
-#endif
- RETURN;
-}
-
-/* Oversized hot code. */
-
-PP(pp_print)
-{
- dSP; dMARK; dORIGMARK;
- GV *gv;
- IO *io;
- register PerlIO *fp;
- MAGIC *mg;
- STRLEN n_a;
-
- if (PL_op->op_flags & OPf_STACKED)
- gv = (GV*)*++MARK;
- else
- gv = PL_defoutgv;
- if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
- had_magic:
- if (MARK == ORIGMARK) {
- /* If using default handle then we need to make space to
- * pass object as 1st arg, so move other args up ...
- */
- MEXTEND(SP, 1);
- ++MARK;
- Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
- ++SP;
- }
- PUSHMARK(MARK - 1);
- *MARK = SvTIED_obj((SV*)gv, mg);
- PUTBACK;
- ENTER;
- call_method("PRINT", G_SCALAR);
- LEAVE;
- SPAGAIN;
- MARK = ORIGMARK + 1;
- *MARK = *SP;
- SP = MARK;
- RETURN;
- }
- if (!(io = GvIO(gv))) {
- if ((GvEGV(gv)) && (mg = SvTIED_mg((SV*)GvEGV(gv),'q')))
- goto had_magic;
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,RMS$_IFI);
- goto just_say_no;
- }
- else if (!(fp = IoOFP(io))) {
- if (ckWARN2(WARN_CLOSED, WARN_IO)) {
- if (IoIFP(io)) {
- /* integrate with report_evil_fh()? */
- char *name = NULL;
- if (isGV(gv)) {
- SV* sv = sv_newmortal();
- gv_efullname4(sv, gv, Nullch, FALSE);
- name = SvPV_nolen(sv);
- }
- if (name && *name)
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle %s opened only for input", name);
- else
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle opened only for input");
- }
- else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- }
- SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
- goto just_say_no;
- }
- else {
- MARK++;
- if (PL_ofslen) {
- while (MARK <= SP) {
- if (!do_print(*MARK, fp))
- break;
- MARK++;
- if (MARK <= SP) {
- if (PerlIO_write(fp, PL_ofs, PL_ofslen) == 0 || PerlIO_error(fp)) {
- MARK--;
- break;
- }
- }
- }
- }
- else {
- while (MARK <= SP) {
- if (!do_print(*MARK, fp))
- break;
- MARK++;
- }
- }
- if (MARK <= SP)
- goto just_say_no;
- else {
- if (PL_orslen)
- if (PerlIO_write(fp, PL_ors, PL_orslen) == 0 || PerlIO_error(fp))
- goto just_say_no;
-
- if (IoFLAGS(io) & IOf_FLUSH)
- if (PerlIO_flush(fp) == EOF)
- goto just_say_no;
- }
- }
- SP = ORIGMARK;
- PUSHs(&PL_sv_yes);
- RETURN;
-
- just_say_no:
- SP = ORIGMARK;
- PUSHs(&PL_sv_undef);
- RETURN;
-}
-
-PP(pp_rv2av)
-{
- dSP; dTOPss;
- AV *av;
-
- if (SvROK(sv)) {
- wasref:
- tryAMAGICunDEREF(to_av);
-
- av = (AV*)SvRV(sv);
- if (SvTYPE(av) != SVt_PVAV)
- DIE(aTHX_ "Not an ARRAY reference");
- if (PL_op->op_flags & OPf_REF) {
- SETs((SV*)av);
- RETURN;
- }
- else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
- SETs((SV*)av);
- RETURN;
- }
- }
- else {
- if (SvTYPE(sv) == SVt_PVAV) {
- av = (AV*)sv;
- if (PL_op->op_flags & OPf_REF) {
- SETs((SV*)av);
- RETURN;
- }
- else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return array to lvalue"
- " scalar context");
- SETs((SV*)av);
- RETURN;
- }
- }
- else {
- GV *gv;
-
- if (SvTYPE(sv) != SVt_PVGV) {
- char *sym;
- STRLEN len;
-
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- if (SvROK(sv))
- goto wasref;
- }
- if (!SvOK(sv)) {
- if (PL_op->op_flags & OPf_REF ||
- PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_usym, "an ARRAY");
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- if (GIMME == G_ARRAY) {
- (void)POPs;
- RETURN;
- }
- RETSETUNDEF;
- }
- sym = SvPV(sv,len);
- if ((PL_op->op_flags & OPf_SPECIAL) &&
- !(PL_op->op_flags & OPf_MOD))
- {
- gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
- if (!gv
- && (!is_gv_magical(sym,len,0)
- || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
- {
- RETSETUNDEF;
- }
- }
- else {
- if (PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
- gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
- }
- }
- else {
- gv = (GV*)sv;
- }
- av = GvAVn(gv);
- if (PL_op->op_private & OPpLVAL_INTRO)
- av = save_ary(gv);
- if (PL_op->op_flags & OPf_REF) {
- SETs((SV*)av);
- RETURN;
- }
- else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return array to lvalue"
- " scalar context");
- SETs((SV*)av);
- RETURN;
- }
- }
- }
-
- if (GIMME == G_ARRAY) {
- I32 maxarg = AvFILL(av) + 1;
- (void)POPs; /* XXXX May be optimized away? */
- EXTEND(SP, maxarg);
- if (SvRMAGICAL(av)) {
- U32 i;
- for (i=0; i < maxarg; i++) {
- SV **svp = av_fetch(av, i, FALSE);
- SP[i+1] = (svp) ? *svp : &PL_sv_undef;
- }
- }
- else {
- Copy(AvARRAY(av), SP+1, maxarg, SV*);
- }
- SP += maxarg;
- }
- else {
- dTARGET;
- I32 maxarg = AvFILL(av) + 1;
- SETi(maxarg);
- }
- RETURN;
-}
-
-PP(pp_rv2hv)
-{
- dSP; dTOPss;
- HV *hv;
-
- if (SvROK(sv)) {
- wasref:
- tryAMAGICunDEREF(to_hv);
-
- hv = (HV*)SvRV(sv);
- if (SvTYPE(hv) != SVt_PVHV && SvTYPE(hv) != SVt_PVAV)
- DIE(aTHX_ "Not a HASH reference");
- if (PL_op->op_flags & OPf_REF) {
- SETs((SV*)hv);
- RETURN;
- }
- else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
- SETs((SV*)hv);
- RETURN;
- }
- }
- else {
- if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
- hv = (HV*)sv;
- if (PL_op->op_flags & OPf_REF) {
- SETs((SV*)hv);
- RETURN;
- }
- else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return hash to lvalue"
- " scalar context");
- SETs((SV*)hv);
- RETURN;
- }
- }
- else {
- GV *gv;
-
- if (SvTYPE(sv) != SVt_PVGV) {
- char *sym;
- STRLEN len;
-
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- if (SvROK(sv))
- goto wasref;
- }
- if (!SvOK(sv)) {
- if (PL_op->op_flags & OPf_REF ||
- PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_usym, "a HASH");
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- if (GIMME == G_ARRAY) {
- SP--;
- RETURN;
- }
- RETSETUNDEF;
- }
- sym = SvPV(sv,len);
- if ((PL_op->op_flags & OPf_SPECIAL) &&
- !(PL_op->op_flags & OPf_MOD))
- {
- gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
- if (!gv
- && (!is_gv_magical(sym,len,0)
- || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
- {
- RETSETUNDEF;
- }
- }
- else {
- if (PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_symref, sym, "a HASH");
- gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
- }
- }
- else {
- gv = (GV*)sv;
- }
- hv = GvHVn(gv);
- if (PL_op->op_private & OPpLVAL_INTRO)
- hv = save_hash(gv);
- if (PL_op->op_flags & OPf_REF) {
- SETs((SV*)hv);
- RETURN;
- }
- else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return hash to lvalue"
- " scalar context");
- SETs((SV*)hv);
- RETURN;
- }
- }
- }
-
- if (GIMME == G_ARRAY) { /* array wanted */
- *PL_stack_sp = (SV*)hv;
- return do_kv();
- }
- else {
- dTARGET;
- if (SvTYPE(hv) == SVt_PVAV)
- hv = avhv_keys((AV*)hv);
- if (HvFILL(hv))
- Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
- (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
- else
- sv_setiv(TARG, 0);
-
- SETTARG;
- RETURN;
- }
-}
-
-STATIC int
-S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem,
- SV **lastrelem)
-{
- OP *leftop;
- I32 i;
-
- leftop = ((BINOP*)PL_op)->op_last;
- assert(leftop);
- assert(leftop->op_type == OP_NULL && leftop->op_targ == OP_LIST);
- leftop = ((LISTOP*)leftop)->op_first;
- assert(leftop);
- /* Skip PUSHMARK and each element already assigned to. */
- for (i = lelem - firstlelem; i > 0; i--) {
- leftop = leftop->op_sibling;
- assert(leftop);
- }
- if (leftop->op_type != OP_RV2HV)
- return 0;
-
- /* pseudohash */
- if (av_len(ary) > 0)
- av_fill(ary, 0); /* clear all but the fields hash */
- if (lastrelem >= relem) {
- while (relem < lastrelem) { /* gobble up all the rest */
- SV *tmpstr;
- assert(relem[0]);
- assert(relem[1]);
- /* Avoid a memory leak when avhv_store_ent dies. */
- tmpstr = sv_newmortal();
- sv_setsv(tmpstr,relem[1]); /* value */
- relem[1] = tmpstr;
- if (avhv_store_ent(ary,relem[0],tmpstr,0))
- (void)SvREFCNT_inc(tmpstr);
- if (SvMAGICAL(ary) != 0 && SvSMAGICAL(tmpstr))
- mg_set(tmpstr);
- relem += 2;
- TAINT_NOT;
- }
- }
- if (relem == lastrelem)
- return 1;
- return 2;
-}
-
-STATIC void
-S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
-{
- if (*relem) {
- SV *tmpstr;
- if (ckWARN(WARN_MISC)) {
- if (relem == firstrelem &&
- SvROK(*relem) &&
- (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
- SvTYPE(SvRV(*relem)) == SVt_PVHV))
- {
- Perl_warner(aTHX_ WARN_MISC,
- "Reference found where even-sized list expected");
- }
- else
- Perl_warner(aTHX_ WARN_MISC,
- "Odd number of elements in hash assignment");
- }
- if (SvTYPE(hash) == SVt_PVAV) {
- /* pseudohash */
- tmpstr = sv_newmortal();
- if (avhv_store_ent((AV*)hash,*relem,tmpstr,0))
- (void)SvREFCNT_inc(tmpstr);
- if (SvMAGICAL(hash) && SvSMAGICAL(tmpstr))
- mg_set(tmpstr);
- }
- else {
- HE *didstore;
- tmpstr = NEWSV(29,0);
- didstore = hv_store_ent(hash,*relem,tmpstr,0);
- if (SvMAGICAL(hash)) {
- if (SvSMAGICAL(tmpstr))
- mg_set(tmpstr);
- if (!didstore)
- sv_2mortal(tmpstr);
- }
- }
- TAINT_NOT;
- }
-}
-
-PP(pp_aassign)
-{
- dSP;
- SV **lastlelem = PL_stack_sp;
- SV **lastrelem = PL_stack_base + POPMARK;
- SV **firstrelem = PL_stack_base + POPMARK + 1;
- SV **firstlelem = lastrelem + 1;
-
- register SV **relem;
- register SV **lelem;
-
- register SV *sv;
- register AV *ary;
-
- I32 gimme;
- HV *hash;
- I32 i;
- int magic;
-
- PL_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 (PL_op->op_private & (OPpASSIGN_COMMON)) {
- EXTEND_MORTAL(lastrelem - firstrelem + 1);
- for (relem = firstrelem; relem <= lastrelem; relem++) {
- /*SUPPRESS 560*/
- if ((sv = *relem)) {
- TAINT_NOT; /* Each item is independent */
- *relem = sv_mortalcopy(sv);
- }
- }
- }
-
- relem = firstrelem;
- lelem = firstlelem;
- ary = Null(AV*);
- hash = Null(HV*);
-
- while (lelem <= lastlelem) {
- TAINT_NOT; /* Each item stands on its own, taintwise. */
- sv = *lelem++;
- switch (SvTYPE(sv)) {
- case SVt_PVAV:
- ary = (AV*)sv;
- magic = SvMAGICAL(ary) != 0;
- if (PL_op->op_private & OPpASSIGN_HASH) {
- switch (do_maybe_phash(ary, lelem, firstlelem, relem,
- lastrelem))
- {
- case 0:
- goto normal_array;
- case 1:
- do_oddball((HV*)ary, relem, firstrelem);
- }
- relem = lastrelem + 1;
- break;
- }
- normal_array:
- av_clear(ary);
- av_extend(ary, lastrelem - relem);
- i = 0;
- while (relem <= lastrelem) { /* gobble up all the rest */
- SV **didstore;
- sv = NEWSV(28,0);
- assert(*relem);
- sv_setsv(sv,*relem);
- *(relem++) = sv;
- didstore = av_store(ary,i++,sv);
- if (magic) {
- if (SvSMAGICAL(sv))
- mg_set(sv);
- if (!didstore)
- sv_2mortal(sv);
- }
- TAINT_NOT;
- }
- break;
- case SVt_PVHV: { /* normal hash */
- SV *tmpstr;
-
- hash = (HV*)sv;
- magic = SvMAGICAL(hash) != 0;
- hv_clear(hash);
-
- while (relem < lastrelem) { /* gobble up all the rest */
- HE *didstore;
- if (*relem)
- sv = *(relem++);
- else
- sv = &PL_sv_no, relem++;
- tmpstr = NEWSV(29,0);
- if (*relem)
- sv_setsv(tmpstr,*relem); /* value */
- *(relem++) = tmpstr;
- didstore = hv_store_ent(hash,sv,tmpstr,0);
- if (magic) {
- if (SvSMAGICAL(tmpstr))
- mg_set(tmpstr);
- if (!didstore)
- sv_2mortal(tmpstr);
- }
- TAINT_NOT;
- }
- if (relem == lastrelem) {
- do_oddball(hash, relem, firstrelem);
- relem++;
- }
- }
- break;
- default:
- if (SvIMMORTAL(sv)) {
- if (relem <= lastrelem)
- relem++;
- break;
- }
- if (relem <= lastrelem) {
- sv_setsv(sv, *relem);
- *(relem++) = sv;
- }
- else
- sv_setsv(sv, &PL_sv_undef);
- SvSETMAGIC(sv);
- break;
- }
- }
- if (PL_delaymagic & ~DM_DELAY) {
- if (PL_delaymagic & DM_UID) {
-#ifdef HAS_SETRESUID
- (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
-#else
-# ifdef HAS_SETREUID
- (void)setreuid(PL_uid,PL_euid);
-# else
-# ifdef HAS_SETRUID
- if ((PL_delaymagic & DM_UID) == DM_RUID) {
- (void)setruid(PL_uid);
- PL_delaymagic &= ~DM_RUID;
- }
-# endif /* HAS_SETRUID */
-# ifdef HAS_SETEUID
- if ((PL_delaymagic & DM_UID) == DM_EUID) {
- (void)seteuid(PL_uid);
- PL_delaymagic &= ~DM_EUID;
- }
-# endif /* HAS_SETEUID */
- if (PL_delaymagic & DM_UID) {
- if (PL_uid != PL_euid)
- DIE(aTHX_ "No setreuid available");
- (void)PerlProc_setuid(PL_uid);
- }
-# endif /* HAS_SETREUID */
-#endif /* HAS_SETRESUID */
- PL_uid = PerlProc_getuid();
- PL_euid = PerlProc_geteuid();
- }
- if (PL_delaymagic & DM_GID) {
-#ifdef HAS_SETRESGID
- (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
-#else
-# ifdef HAS_SETREGID
- (void)setregid(PL_gid,PL_egid);
-# else
-# ifdef HAS_SETRGID
- if ((PL_delaymagic & DM_GID) == DM_RGID) {
- (void)setrgid(PL_gid);
- PL_delaymagic &= ~DM_RGID;
- }
-# endif /* HAS_SETRGID */
-# ifdef HAS_SETEGID
- if ((PL_delaymagic & DM_GID) == DM_EGID) {
- (void)setegid(PL_gid);
- PL_delaymagic &= ~DM_EGID;
- }
-# endif /* HAS_SETEGID */
- if (PL_delaymagic & DM_GID) {
- if (PL_gid != PL_egid)
- DIE(aTHX_ "No setregid available");
- (void)PerlProc_setgid(PL_gid);
- }
-# endif /* HAS_SETREGID */
-#endif /* HAS_SETRESGID */
- PL_gid = PerlProc_getgid();
- PL_egid = PerlProc_getegid();
- }
- PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
- }
- PL_delaymagic = 0;
-
- gimme = GIMME_V;
- if (gimme == G_VOID)
- SP = firstrelem - 1;
- else if (gimme == G_SCALAR) {
- dTARGET;
- SP = firstrelem;
- SETi(lastrelem - firstrelem + 1);
- }
- else {
- if (ary || hash)
- SP = lastrelem;
- else
- SP = firstrelem + (lastlelem - firstlelem);
- lelem = firstlelem + (relem - firstrelem);
- while (relem <= SP)
- *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
- }
- RETURN;
-}
-
-PP(pp_qr)
-{
- dSP;
- register PMOP *pm = cPMOP;
- SV *rv = sv_newmortal();
- SV *sv = newSVrv(rv, "Regexp");
- sv_magic(sv,(SV*)ReREFCNT_inc(pm->op_pmregexp),'r',0,0);
- RETURNX(PUSHs(rv));
-}
-
-PP(pp_match)
-{
- dSP; dTARG;
- register PMOP *pm = cPMOP;
- register char *t;
- register char *s;
- char *strend;
- I32 global;
- I32 r_flags = REXEC_CHECKED;
- char *truebase; /* Start of string */
- register REGEXP *rx = pm->op_pmregexp;
- bool rxtainted;
- I32 gimme = GIMME;
- STRLEN len;
- I32 minmatch = 0;
- I32 oldsave = PL_savestack_ix;
- I32 update_minmatch = 1;
- I32 had_zerolen = 0;
-
- if (PL_op->op_flags & OPf_STACKED)
- TARG = POPs;
- else {
- TARG = DEFSV;
- EXTEND(SP,1);
- }
- PUTBACK; /* EVAL blocks need stack_sp. */
- s = SvPV(TARG, len);
- strend = s + len;
- if (!s)
- DIE(aTHX_ "panic: pp_match");
- rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
- (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
- TAINT_NOT;
-
- if (pm->op_pmdynflags & PMdf_USED) {
- failure:
- if (gimme == G_ARRAY)
- RETURN;
- RETPUSHNO;
- }
-
- if (!rx->prelen && PL_curpm) {
- pm = PL_curpm;
- rx = pm->op_pmregexp;
- }
- if (rx->minlen > len) goto failure;
-
- truebase = t = s;
-
- /* XXXX What part of this is needed with true \G-support? */
- if ((global = pm->op_pmflags & PMf_GLOBAL)) {
- rx->startp[0] = -1;
- if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
- MAGIC* mg = mg_find(TARG, 'g');
- if (mg && mg->mg_len >= 0) {
- if (!(rx->reganch & ROPT_GPOS_SEEN))
- rx->endp[0] = rx->startp[0] = mg->mg_len;
- else if (rx->reganch & ROPT_ANCH_GPOS) {
- r_flags |= REXEC_IGNOREPOS;
- rx->endp[0] = rx->startp[0] = mg->mg_len;
- }
- minmatch = (mg->mg_flags & MGf_MINMATCH);
- update_minmatch = 0;
- }
- }
- }
- if ((!global && rx->nparens)
- || SvTEMP(TARG) || PL_sawampersand)
- r_flags |= REXEC_COPY_STR;
- if (SvSCREAM(TARG))
- r_flags |= REXEC_SCREAM;
-
- if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
- SAVEINT(PL_multiline);
- PL_multiline = pm->op_pmflags & PMf_MULTILINE;
- }
-
-play_it_again:
- if (global && rx->startp[0] != -1) {
- t = s = rx->endp[0] + truebase;
- if ((s + rx->minlen) > strend)
- goto nope;
- if (update_minmatch++)
- minmatch = had_zerolen;
- }
- if (rx->reganch & RE_USE_INTUIT &&
- DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
- s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
-
- if (!s)
- goto nope;
- if ( (rx->reganch & ROPT_CHECK_ALL)
- && !PL_sawampersand
- && ((rx->reganch & ROPT_NOSCAN)
- || !((rx->reganch & RE_INTUIT_TAIL)
- && (r_flags & REXEC_SCREAM)))
- && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
- goto yup;
- }
- if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
- {
- PL_curpm = pm;
- if (pm->op_pmflags & PMf_ONCE)
- pm->op_pmdynflags |= PMdf_USED;
- goto gotcha;
- }
- else
- goto ret_no;
- /*NOTREACHED*/
-
- gotcha:
- if (rxtainted)
- RX_MATCH_TAINTED_on(rx);
- TAINT_IF(RX_MATCH_TAINTED(rx));
- if (gimme == G_ARRAY) {
- I32 iters, i, len;
-
- iters = rx->nparens;
- if (global && !iters)
- i = 1;
- else
- i = 0;
- SPAGAIN; /* EVAL blocks could move the stack. */
- EXTEND(SP, iters + i);
- EXTEND_MORTAL(iters + i);
- for (i = !i; i <= iters; i++) {
- PUSHs(sv_newmortal());
- /*SUPPRESS 560*/
- if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
- len = rx->endp[i] - rx->startp[i];
- s = rx->startp[i] + truebase;
- sv_setpvn(*SP, s, len);
- if ((pm->op_pmdynflags & PMdf_UTF8) && !IN_BYTE) {
- SvUTF8_on(*SP);
- sv_utf8_downgrade(*SP, TRUE);
- }
- }
- }
- if (global) {
- had_zerolen = (rx->startp[0] != -1
- && rx->startp[0] == rx->endp[0]);
- PUTBACK; /* EVAL blocks may use stack */
- r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
- goto play_it_again;
- }
- else if (!iters)
- XPUSHs(&PL_sv_yes);
- LEAVE_SCOPE(oldsave);
- RETURN;
- }
- else {
- if (global) {
- MAGIC* mg = 0;
- if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
- mg = mg_find(TARG, 'g');
- if (!mg) {
- sv_magic(TARG, (SV*)0, 'g', Nullch, 0);
- mg = mg_find(TARG, 'g');
- }
- if (rx->startp[0] != -1) {
- mg->mg_len = rx->endp[0];
- if (rx->startp[0] == rx->endp[0])
- mg->mg_flags |= MGf_MINMATCH;
- else
- mg->mg_flags &= ~MGf_MINMATCH;
- }
- }
- LEAVE_SCOPE(oldsave);
- RETPUSHYES;
- }
-
-yup: /* Confirmed by INTUIT */
- if (rxtainted)
- RX_MATCH_TAINTED_on(rx);
- TAINT_IF(RX_MATCH_TAINTED(rx));
- PL_curpm = pm;
- if (pm->op_pmflags & PMf_ONCE)
- pm->op_pmdynflags |= PMdf_USED;
- if (RX_MATCH_COPIED(rx))
- Safefree(rx->subbeg);
- RX_MATCH_COPIED_off(rx);
- rx->subbeg = Nullch;
- if (global) {
- rx->subbeg = truebase;
- rx->startp[0] = s - truebase;
- rx->endp[0] = s - truebase + rx->minlen;
- rx->sublen = strend - truebase;
- goto gotcha;
- }
- if (PL_sawampersand) {
- I32 off;
-
- rx->subbeg = savepvn(t, strend - t);
- rx->sublen = strend - t;
- RX_MATCH_COPIED_on(rx);
- off = rx->startp[0] = s - t;
- rx->endp[0] = off + rx->minlen;
- }
- else { /* startp/endp are used by @- @+. */
- rx->startp[0] = s - truebase;
- rx->endp[0] = s - truebase + rx->minlen;
- }
- rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
- LEAVE_SCOPE(oldsave);
- RETPUSHYES;
-
-nope:
-ret_no:
- if (global && !(pm->op_pmflags & PMf_CONTINUE)) {
- if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
- MAGIC* mg = mg_find(TARG, 'g');
- if (mg)
- mg->mg_len = -1;
- }
- }
- LEAVE_SCOPE(oldsave);
- if (gimme == G_ARRAY)
- RETURN;
- RETPUSHNO;
-}
-
-OP *
-Perl_do_readline(pTHX)
-{
- dSP; dTARGETSTACKED;
- register SV *sv;
- STRLEN tmplen = 0;
- STRLEN offset;
- PerlIO *fp;
- register IO *io = GvIO(PL_last_in_gv);
- register I32 type = PL_op->op_type;
- I32 gimme = GIMME_V;
- MAGIC *mg;
-
- if ((mg = SvTIED_mg((SV*)PL_last_in_gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)PL_last_in_gv, mg));
- PUTBACK;
- ENTER;
- call_method("READLINE", gimme);
- LEAVE;
- SPAGAIN;
- if (gimme == G_SCALAR)
- SvSetMagicSV_nosteal(TARG, TOPs);
- RETURN;
- }
- fp = Nullfp;
- if (io) {
- fp = IoIFP(io);
- if (!fp) {
- if (IoFLAGS(io) & IOf_ARGV) {
- if (IoFLAGS(io) & IOf_START) {
- IoLINES(io) = 0;
- if (av_len(GvAVn(PL_last_in_gv)) < 0) {
- IoFLAGS(io) &= ~IOf_START;
- do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
- sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
- SvSETMAGIC(GvSV(PL_last_in_gv));
- fp = IoIFP(io);
- goto have_fp;
- }
- }
- fp = nextargv(PL_last_in_gv);
- if (!fp) { /* Note: fp != IoIFP(io) */
- (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
- }
- }
- else if (type == OP_GLOB) {
- SV *tmpcmd = NEWSV(55, 0);
- SV *tmpglob = POPs;
- ENTER;
- SAVEFREESV(tmpcmd);
-#ifdef VMS /* expand the wildcards right here, rather than opening a pipe, */
- /* since spawning off a process is a real performance hit */
- {
-#include <descrip.h>
-#include <lib$routines.h>
-#include <nam.h>
-#include <rmsdef.h>
- char rslt[NAM$C_MAXRSS+1+sizeof(unsigned short int)] = {'\0','\0'};
- char vmsspec[NAM$C_MAXRSS+1];
- char *rstr = rslt + sizeof(unsigned short int), *begin, *end, *cp;
- char tmpfnam[L_tmpnam] = "SYS$SCRATCH:";
- $DESCRIPTOR(dfltdsc,"SYS$DISK:[]*.*;");
- PerlIO *tmpfp;
- STRLEN i;
- struct dsc$descriptor_s wilddsc
- = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
- struct dsc$descriptor_vs rsdsc
- = {sizeof rslt, DSC$K_DTYPE_VT, DSC$K_CLASS_VS, rslt};
- unsigned long int cxt = 0, sts = 0, ok = 1, hasdir = 0, hasver = 0, isunix = 0;
-
- /* We could find out if there's an explicit dev/dir or version
- by peeking into lib$find_file's internal context at
- ((struct NAM *)((struct FAB *)cxt)->fab$l_nam)->nam$l_fnb
- but that's unsupported, so I don't want to do it now and
- have it bite someone in the future. */
- strcat(tmpfnam,PerlLIO_tmpnam(NULL));
- cp = SvPV(tmpglob,i);
- for (; i; i--) {
- if (cp[i] == ';') hasver = 1;
- if (cp[i] == '.') {
- if (sts) hasver = 1;
- else sts = 1;
- }
- if (cp[i] == '/') {
- hasdir = isunix = 1;
- break;
- }
- if (cp[i] == ']' || cp[i] == '>' || cp[i] == ':') {
- hasdir = 1;
- break;
- }
- }
- if ((tmpfp = PerlIO_open(tmpfnam,"w+","fop=dlt")) != NULL) {
- Stat_t st;
- if (!PerlLIO_stat(SvPVX(tmpglob),&st) && S_ISDIR(st.st_mode))
- ok = ((wilddsc.dsc$a_pointer = tovmspath(SvPVX(tmpglob),vmsspec)) != NULL);
- else ok = ((wilddsc.dsc$a_pointer = tovmsspec(SvPVX(tmpglob),vmsspec)) != NULL);
- if (ok) wilddsc.dsc$w_length = (unsigned short int) strlen(wilddsc.dsc$a_pointer);
- while (ok && ((sts = lib$find_file(&wilddsc,&rsdsc,&cxt,
- &dfltdsc,NULL,NULL,NULL))&1)) {
- end = rstr + (unsigned long int) *rslt;
- if (!hasver) while (*end != ';') end--;
- *(end++) = '\n'; *end = '\0';
- for (cp = rstr; *cp; cp++) *cp = _tolower(*cp);
- if (hasdir) {
- if (isunix) trim_unixpath(rstr,SvPVX(tmpglob),1);
- begin = rstr;
- }
- else {
- begin = end;
- while (*(--begin) != ']' && *begin != '>') ;
- ++begin;
- }
- ok = (PerlIO_puts(tmpfp,begin) != EOF);
- }
- if (cxt) (void)lib$find_file_end(&cxt);
- if (ok && sts != RMS$_NMF &&
- sts != RMS$_DNF && sts != RMS$_FNF) ok = 0;
- if (!ok) {
- if (!(sts & 1)) {
- SETERRNO((sts == RMS$_SYN ? EINVAL : EVMSERR),sts);
- }
- PerlIO_close(tmpfp);
- fp = NULL;
- }
- else {
- PerlIO_rewind(tmpfp);
- IoTYPE(io) = IoTYPE_RDONLY;
- IoIFP(io) = fp = tmpfp;
- IoFLAGS(io) &= ~IOf_UNTAINT; /* maybe redundant */
- }
- }
- }
-#else /* !VMS */
-#ifdef MACOS_TRADITIONAL
- sv_setpv(tmpcmd, "glob ");
- sv_catsv(tmpcmd, tmpglob);
- sv_catpv(tmpcmd, " |");
-#else
-#ifdef DOSISH
-#ifdef OS2
- sv_setpv(tmpcmd, "for a in ");
- sv_catsv(tmpcmd, tmpglob);
- sv_catpv(tmpcmd, "; do echo \"$a\\0\\c\"; done |");
-#else
-#ifdef DJGPP
- sv_setpv(tmpcmd, "/dev/dosglob/"); /* File System Extension */
- sv_catsv(tmpcmd, tmpglob);
-#else
- sv_setpv(tmpcmd, "perlglob ");
- sv_catsv(tmpcmd, tmpglob);
- sv_catpv(tmpcmd, " |");
-#endif /* !DJGPP */
-#endif /* !OS2 */
-#else /* !DOSISH */
-#if defined(CSH)
- sv_setpvn(tmpcmd, PL_cshname, PL_cshlen);
- sv_catpv(tmpcmd, " -cf 'set nonomatch; glob ");
- sv_catsv(tmpcmd, tmpglob);
- sv_catpv(tmpcmd, "' 2>/dev/null |");
-#else
- sv_setpv(tmpcmd, "echo ");
- sv_catsv(tmpcmd, tmpglob);
-#if 'z' - 'a' == 25
- sv_catpv(tmpcmd, "|tr -s ' \t\f\r' '\\012\\012\\012\\012'|");
-#else
- sv_catpv(tmpcmd, "|tr -s ' \t\f\r' '\\n\\n\\n\\n'|");
-#endif
-#endif /* !CSH */
-#endif /* !DOSISH */
-#endif /* MACOS_TRADITIONAL */
- (void)do_open(PL_last_in_gv, SvPVX(tmpcmd), SvCUR(tmpcmd),
- FALSE, O_RDONLY, 0, Nullfp);
- fp = IoIFP(io);
-#endif /* !VMS */
- LEAVE;
- }
- }
- else if (type == OP_GLOB)
- SP--;
- else if (ckWARN(WARN_IO) /* stdout/stderr or other write fh */
- && (IoTYPE(io) == IoTYPE_WRONLY || fp == PerlIO_stdout()
- || fp == PerlIO_stderr()))
- {
- /* integrate with report_evil_fh()? */
- char *name = NULL;
- if (isGV(PL_last_in_gv)) { /* can this ever fail? */
- SV* sv = sv_newmortal();
- gv_efullname4(sv, PL_last_in_gv, Nullch, FALSE);
- name = SvPV_nolen(sv);
- }
- if (name && *name)
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle %s opened only for output", name);
- else
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle opened only for output");
- }
- }
- if (!fp) {
- if (ckWARN2(WARN_GLOB, WARN_CLOSED)
- && (!io || !(IoFLAGS(io) & IOf_START))) {
- if (type == OP_GLOB)
- Perl_warner(aTHX_ WARN_GLOB,
- "glob failed (can't start child: %s)",
- Strerror(errno));
- else
- report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
- }
- if (gimme == G_SCALAR) {
- (void)SvOK_off(TARG);
- PUSHTARG;
- }
- RETURN;
- }
- have_fp:
- if (gimme == G_SCALAR) {
- sv = TARG;
- if (SvROK(sv))
- sv_unref(sv);
- (void)SvUPGRADE(sv, SVt_PV);
- tmplen = SvLEN(sv); /* remember if already alloced */
- if (!tmplen)
- Sv_Grow(sv, 80); /* try short-buffering it */
- if (type == OP_RCATLINE)
- offset = SvCUR(sv);
- else
- offset = 0;
- }
- else {
- sv = sv_2mortal(NEWSV(57, 80));
- offset = 0;
- }
-
- /* This should not be marked tainted if the fp is marked clean */
-#define MAYBE_TAINT_LINE(io, sv) \
- if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
- TAINT; \
- SvTAINTED_on(sv); \
- }
-
-/* delay EOF state for a snarfed empty file */
-#define SNARF_EOF(gimme,rs,io,sv) \
- (gimme != G_SCALAR || SvCUR(sv) \
- || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
-
- for (;;) {
- if (!sv_gets(sv, fp, offset)
- && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
- {
- PerlIO_clearerr(fp);
- if (IoFLAGS(io) & IOf_ARGV) {
- fp = nextargv(PL_last_in_gv);
- if (fp)
- continue;
- (void)do_close(PL_last_in_gv, FALSE);
- }
- else if (type == OP_GLOB) {
- if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
- Perl_warner(aTHX_ WARN_GLOB,
- "glob failed (child exited with status %d%s)",
- (int)(STATUS_CURRENT >> 8),
- (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
- }
- }
- if (gimme == G_SCALAR) {
- (void)SvOK_off(TARG);
- PUSHTARG;
- }
- MAYBE_TAINT_LINE(io, sv);
- RETURN;
- }
- MAYBE_TAINT_LINE(io, sv);
- IoLINES(io)++;
- IoFLAGS(io) |= IOf_NOLINE;
- SvSETMAGIC(sv);
- XPUSHs(sv);
- if (type == OP_GLOB) {
- char *tmps;
-
- if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
- tmps = SvEND(sv) - 1;
- if (*tmps == *SvPVX(PL_rs)) {
- *tmps = '\0';
- SvCUR(sv)--;
- }
- }
- for (tmps = SvPVX(sv); *tmps; tmps++)
- if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
- strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
- break;
- if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
- (void)POPs; /* Unmatched wildcard? Chuck it... */
- continue;
- }
- }
- if (gimme == G_ARRAY) {
- if (SvLEN(sv) - SvCUR(sv) > 20) {
- SvLEN_set(sv, SvCUR(sv)+1);
- Renew(SvPVX(sv), SvLEN(sv), char);
- }
- sv = sv_2mortal(NEWSV(58, 80));
- continue;
- }
- else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
- /* try to reclaim a bit of scalar space (only on 1st alloc) */
- if (SvCUR(sv) < 60)
- SvLEN_set(sv, 80);
- else
- SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
- Renew(SvPVX(sv), SvLEN(sv), char);
- }
- RETURN;
- }
-}
-
-PP(pp_enter)
-{
- dSP;
- register PERL_CONTEXT *cx;
- I32 gimme = OP_GIMME(PL_op, -1);
-
- if (gimme == -1) {
- if (cxstack_ix >= 0)
- gimme = cxstack[cxstack_ix].blk_gimme;
- else
- gimme = G_SCALAR;
- }
-
- ENTER;
-
- SAVETMPS;
- PUSHBLOCK(cx, CXt_BLOCK, SP);
-
- RETURN;
-}
-
-PP(pp_helem)
-{
- dSP;
- HE* he;
- SV **svp;
- SV *keysv = POPs;
- HV *hv = (HV*)POPs;
- U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
- U32 defer = PL_op->op_private & OPpLVAL_DEFER;
- SV *sv;
-
- if (SvTYPE(hv) == SVt_PVHV) {
- he = hv_fetch_ent(hv, keysv, lval && !defer, 0);
- svp = he ? &HeVAL(he) : 0;
- }
- else if (SvTYPE(hv) == SVt_PVAV) {
- if (PL_op->op_private & OPpLVAL_INTRO)
- DIE(aTHX_ "Can't localize pseudo-hash element");
- svp = avhv_fetch_ent((AV*)hv, keysv, lval && !defer, 0);
- }
- else {
- RETPUSHUNDEF;
- }
- if (lval) {
- if (!svp || *svp == &PL_sv_undef) {
- SV* lv;
- SV* key2;
- if (!defer) {
- STRLEN n_a;
- DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
- }
- lv = sv_newmortal();
- sv_upgrade(lv, SVt_PVLV);
- LvTYPE(lv) = 'y';
- sv_magic(lv, key2 = newSVsv(keysv), 'y', Nullch, 0);
- SvREFCNT_dec(key2); /* sv_magic() increments refcount */
- LvTARG(lv) = SvREFCNT_inc(hv);
- LvTARGLEN(lv) = 1;
- PUSHs(lv);
- RETURN;
- }
- if (PL_op->op_private & OPpLVAL_INTRO) {
- if (HvNAME(hv) && isGV(*svp))
- save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
- else
- save_helem(hv, keysv, svp);
- }
- else if (PL_op->op_private & OPpDEREF)
- vivify_ref(*svp, PL_op->op_private & OPpDEREF);
- }
- sv = (svp ? *svp : &PL_sv_undef);
- /* This makes C<local $tied{foo} = $tied{foo}> possible.
- * Pushing the magical RHS on to the stack is useless, since
- * that magic is soon destined to be misled by the local(),
- * and thus the later pp_sassign() will fail to mg_get() the
- * old value. This should also cure problems with delayed
- * mg_get()s. GSAR 98-07-03 */
- if (!lval && SvGMAGICAL(sv))
- sv = sv_mortalcopy(sv);
- PUSHs(sv);
- RETURN;
-}
-
-PP(pp_leave)
-{
- dSP;
- register PERL_CONTEXT *cx;
- register SV **mark;
- SV **newsp;
- PMOP *newpm;
- I32 gimme;
-
- if (PL_op->op_flags & OPf_SPECIAL) {
- cx = &cxstack[cxstack_ix];
- cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
- }
-
- POPBLOCK(cx,newpm);
-
- gimme = OP_GIMME(PL_op, -1);
- if (gimme == -1) {
- if (cxstack_ix >= 0)
- gimme = cxstack[cxstack_ix].blk_gimme;
- else
- gimme = G_SCALAR;
- }
-
- TAINT_NOT;
- if (gimme == G_VOID)
- SP = newsp;
- else if (gimme == G_SCALAR) {
- MARK = newsp + 1;
- if (MARK <= SP)
- if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
- *MARK = TOPs;
- else
- *MARK = sv_mortalcopy(TOPs);
- else {
- MEXTEND(mark,0);
- *MARK = &PL_sv_undef;
- }
- SP = MARK;
- }
- else if (gimme == G_ARRAY) {
- /* in case LEAVE wipes old return values */
- for (mark = newsp + 1; mark <= SP; mark++) {
- if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
- *mark = sv_mortalcopy(*mark);
- TAINT_NOT; /* Each item is independent */
- }
- }
- }
- PL_curpm = newpm; /* Don't pop $1 et al till now */
-
- LEAVE;
-
- RETURN;
-}
-
-PP(pp_iter)
-{
- dSP;
- register PERL_CONTEXT *cx;
- SV* sv;
- AV* av;
- SV **itersvp;
-
- EXTEND(SP, 1);
- cx = &cxstack[cxstack_ix];
- if (CxTYPE(cx) != CXt_LOOP)
- DIE(aTHX_ "panic: pp_iter");
-
- itersvp = CxITERVAR(cx);
- av = cx->blk_loop.iterary;
- if (SvTYPE(av) != SVt_PVAV) {
- /* iterate ($min .. $max) */
- if (cx->blk_loop.iterlval) {
- /* string increment */
- register SV* cur = cx->blk_loop.iterlval;
- STRLEN maxlen;
- char *max = SvPV((SV*)av, maxlen);
- if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
-#ifndef USE_THREADS /* don't risk potential race */
- if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
- /* safe to reuse old SV */
- sv_setsv(*itersvp, cur);
- }
- else
-#endif
- {
- /* we need a fresh SV every time so that loop body sees a
- * completely new SV for closures/references to work as
- * they used to */
- SvREFCNT_dec(*itersvp);
- *itersvp = newSVsv(cur);
- }
- if (strEQ(SvPVX(cur), max))
- sv_setiv(cur, 0); /* terminate next time */
- else
- sv_inc(cur);
- RETPUSHYES;
- }
- RETPUSHNO;
- }
- /* integer increment */
- if (cx->blk_loop.iterix > cx->blk_loop.itermax)
- RETPUSHNO;
-
-#ifndef USE_THREADS /* don't risk potential race */
- if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
- /* safe to reuse old SV */
- sv_setiv(*itersvp, cx->blk_loop.iterix++);
- }
- else
-#endif
- {
- /* we need a fresh SV every time so that loop body sees a
- * completely new SV for closures/references to work as they
- * used to */
- SvREFCNT_dec(*itersvp);
- *itersvp = newSViv(cx->blk_loop.iterix++);
- }
- RETPUSHYES;
- }
-
- /* iterate array */
- if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
- RETPUSHNO;
-
- SvREFCNT_dec(*itersvp);
-
- if ((sv = SvMAGICAL(av)
- ? *av_fetch(av, ++cx->blk_loop.iterix, FALSE)
- : AvARRAY(av)[++cx->blk_loop.iterix]))
- SvTEMP_off(sv);
- else
- sv = &PL_sv_undef;
- if (av != PL_curstack && SvIMMORTAL(sv)) {
- SV *lv = cx->blk_loop.iterlval;
- if (lv && SvREFCNT(lv) > 1) {
- SvREFCNT_dec(lv);
- lv = Nullsv;
- }
- if (lv)
- SvREFCNT_dec(LvTARG(lv));
- else {
- lv = cx->blk_loop.iterlval = NEWSV(26, 0);
- sv_upgrade(lv, SVt_PVLV);
- LvTYPE(lv) = 'y';
- sv_magic(lv, Nullsv, 'y', Nullch, 0);
- }
- LvTARG(lv) = SvREFCNT_inc(av);
- LvTARGOFF(lv) = cx->blk_loop.iterix;
- LvTARGLEN(lv) = (STRLEN)UV_MAX;
- sv = (SV*)lv;
- }
-
- *itersvp = SvREFCNT_inc(sv);
- RETPUSHYES;
-}
-
-PP(pp_subst)
-{
- dSP; dTARG;
- register PMOP *pm = cPMOP;
- PMOP *rpm = pm;
- register SV *dstr, *rstr;
- register char *s;
- char *strend;
- register char *m;
- char *c;
- register char *d;
- STRLEN clen;
- I32 iters = 0;
- I32 maxiters;
- register I32 i;
- bool once;
- bool rxtainted;
- char *orig;
- I32 r_flags;
- register REGEXP *rx = pm->op_pmregexp;
- STRLEN len;
- int force_on_match = 0;
- I32 oldsave = PL_savestack_ix;
- bool do_utf8;
- STRLEN slen;
-
- /* known replacement string? */
- rstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
- if (PL_op->op_flags & OPf_STACKED)
- TARG = POPs;
- else {
- TARG = DEFSV;
- EXTEND(SP,1);
- }
- do_utf8 = DO_UTF8(TARG);
- if (SvFAKE(TARG) && SvREADONLY(TARG))
- sv_force_normal(TARG);
- if (SvREADONLY(TARG)
- || (SvTYPE(TARG) > SVt_PVLV
- && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG))))
- DIE(aTHX_ PL_no_modify);
- PUTBACK;
-
- s = SvPV(TARG, len);
- if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
- force_on_match = 1;
- rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
- (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
- if (PL_tainted)
- rxtainted |= 2;
- TAINT_NOT;
-
- force_it:
- if (!pm || !s)
- DIE(aTHX_ "panic: pp_subst");
-
- strend = s + len;
- slen = do_utf8 ? utf8_length((U8*)s, (U8*)strend) : len;
- maxiters = 2 * slen + 10; /* We can match twice at each
- position, once with zero-length,
- second time with non-zero. */
-
- if (!rx->prelen && PL_curpm) {
- pm = PL_curpm;
- rx = pm->op_pmregexp;
- }
- r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
- ? REXEC_COPY_STR : 0;
- if (SvSCREAM(TARG))
- r_flags |= REXEC_SCREAM;
- if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
- SAVEINT(PL_multiline);
- PL_multiline = pm->op_pmflags & PMf_MULTILINE;
- }
- orig = m = s;
- if (rx->reganch & RE_USE_INTUIT) {
- s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
-
- if (!s)
- goto nope;
- /* How to do it in subst? */
-/* if ( (rx->reganch & ROPT_CHECK_ALL)
- && !PL_sawampersand
- && ((rx->reganch & ROPT_NOSCAN)
- || !((rx->reganch & RE_INTUIT_TAIL)
- && (r_flags & REXEC_SCREAM))))
- goto yup;
-*/
- }
-
- /* only replace once? */
- once = !(rpm->op_pmflags & PMf_GLOBAL);
-
- /* known replacement string? */
- c = rstr ? SvPV(rstr, clen) : Nullch;
-
- /* can do inplace substitution? */
- if (c && clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
- && do_utf8 == DO_UTF8(rstr)
- && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
- if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
- r_flags | REXEC_CHECKED))
- {
- SPAGAIN;
- PUSHs(&PL_sv_no);
- LEAVE_SCOPE(oldsave);
- RETURN;
- }
- if (force_on_match) {
- force_on_match = 0;
- s = SvPV_force(TARG, len);
- goto force_it;
- }
- d = s;
- PL_curpm = pm;
- SvSCREAM_off(TARG); /* disable possible screamer */
- if (once) {
- rxtainted |= RX_MATCH_TAINTED(rx);
- m = orig + rx->startp[0];
- d = orig + rx->endp[0];
- s = orig;
- if (m - s > strend - d) { /* faster to shorten from end */
- if (clen) {
- Copy(c, m, clen, char);
- m += clen;
- }
- i = strend - d;
- if (i > 0) {
- Move(d, m, i, char);
- m += i;
- }
- *m = '\0';
- SvCUR_set(TARG, m - s);
- }
- /*SUPPRESS 560*/
- else if ((i = m - s)) { /* faster from front */
- d -= clen;
- m = d;
- sv_chop(TARG, d-i);
- s += i;
- while (i--)
- *--d = *--s;
- if (clen)
- Copy(c, m, clen, char);
- }
- else if (clen) {
- d -= clen;
- sv_chop(TARG, d);
- Copy(c, d, clen, char);
- }
- else {
- sv_chop(TARG, d);
- }
- TAINT_IF(rxtainted & 1);
- SPAGAIN;
- PUSHs(&PL_sv_yes);
- }
- else {
- do {
- if (iters++ > maxiters)
- DIE(aTHX_ "Substitution loop");
- rxtainted |= RX_MATCH_TAINTED(rx);
- m = rx->startp[0] + orig;
- /*SUPPRESS 560*/
- if ((i = m - s)) {
- if (s != d)
- Move(s, d, i, char);
- d += i;
- }
- if (clen) {
- Copy(c, d, clen, char);
- d += clen;
- }
- s = rx->endp[0] + orig;
- } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
- TARG, NULL,
- /* don't match same null twice */
- REXEC_NOT_FIRST|REXEC_IGNOREPOS));
- if (s != d) {
- i = strend - s;
- SvCUR_set(TARG, d - SvPVX(TARG) + i);
- Move(s, d, i+1, char); /* include the NUL */
- }
- TAINT_IF(rxtainted & 1);
- SPAGAIN;
- PUSHs(sv_2mortal(newSViv((I32)iters)));
- }
- (void)SvPOK_only_UTF8(TARG);
- TAINT_IF(rxtainted);
- if (SvSMAGICAL(TARG)) {
- PUTBACK;
- mg_set(TARG);
- SPAGAIN;
- }
- SvTAINT(TARG);
- LEAVE_SCOPE(oldsave);
- RETURN;
- }
-
- if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
- r_flags | REXEC_CHECKED))
- {
- bool isutf8;
-
- if (force_on_match) {
- force_on_match = 0;
- s = SvPV_force(TARG, len);
- goto force_it;
- }
- rxtainted |= RX_MATCH_TAINTED(rx);
- dstr = NEWSV(25, len);
- sv_setpvn(dstr, m, s-m);
- if (do_utf8)
- SvUTF8_on(dstr);
- PL_curpm = pm;
- if (!c) {
- register PERL_CONTEXT *cx;
- SPAGAIN;
- PUSHSUBST(cx);
- RETURNOP(cPMOP->op_pmreplroot);
- }
- r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
- do {
- if (iters++ > maxiters)
- DIE(aTHX_ "Substitution loop");
- rxtainted |= RX_MATCH_TAINTED(rx);
- if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
- m = s;
- s = orig;
- orig = rx->subbeg;
- s = orig + (m - s);
- strend = s + (strend - m);
- }
- m = rx->startp[0] + orig;
- sv_catpvn(dstr, s, m-s);
- s = rx->endp[0] + orig;
- if (clen)
- sv_catsv(dstr, rstr);
- if (once)
- break;
- } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m, TARG, NULL, r_flags));
- sv_catpvn(dstr, s, strend - s);
-
- (void)SvOOK_off(TARG);
- Safefree(SvPVX(TARG));
- SvPVX(TARG) = SvPVX(dstr);
- SvCUR_set(TARG, SvCUR(dstr));
- SvLEN_set(TARG, SvLEN(dstr));
- isutf8 = DO_UTF8(dstr);
- SvPVX(dstr) = 0;
- sv_free(dstr);
-
- TAINT_IF(rxtainted & 1);
- SPAGAIN;
- PUSHs(sv_2mortal(newSViv((I32)iters)));
-
- (void)SvPOK_only(TARG);
- if (isutf8)
- SvUTF8_on(TARG);
- TAINT_IF(rxtainted);
- SvSETMAGIC(TARG);
- SvTAINT(TARG);
- LEAVE_SCOPE(oldsave);
- RETURN;
- }
- goto ret_no;
-
-nope:
-ret_no:
- SPAGAIN;
- PUSHs(&PL_sv_no);
- LEAVE_SCOPE(oldsave);
- RETURN;
-}
-
-PP(pp_grepwhile)
-{
- dSP;
-
- if (SvTRUEx(POPs))
- PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
- ++*PL_markstack_ptr;
- LEAVE; /* exit inner scope */
-
- /* All done yet? */
- if (PL_stack_base + *PL_markstack_ptr > SP) {
- I32 items;
- I32 gimme = GIMME_V;
-
- LEAVE; /* exit outer scope */
- (void)POPMARK; /* pop src */
- items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
- (void)POPMARK; /* pop dst */
- SP = PL_stack_base + POPMARK; /* pop original mark */
- if (gimme == G_SCALAR) {
- dTARGET;
- XPUSHi(items);
- }
- else if (gimme == G_ARRAY)
- SP += items;
- RETURN;
- }
- else {
- SV *src;
-
- ENTER; /* enter inner scope */
- SAVEVPTR(PL_curpm);
-
- src = PL_stack_base[*PL_markstack_ptr];
- SvTEMP_off(src);
- DEFSV = src;
-
- RETURNOP(cLOGOP->op_other);
- }
-}
-
-PP(pp_leavesub)
-{
- dSP;
- SV **mark;
- SV **newsp;
- PMOP *newpm;
- I32 gimme;
- register PERL_CONTEXT *cx;
- SV *sv;
-
- POPBLOCK(cx,newpm);
-
- TAINT_NOT;
- if (gimme == G_SCALAR) {
- MARK = newsp + 1;
- if (MARK <= SP) {
- if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
- if (SvTEMP(TOPs)) {
- *MARK = SvREFCNT_inc(TOPs);
- FREETMPS;
- sv_2mortal(*MARK);
- }
- else {
- sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
- FREETMPS;
- *MARK = sv_mortalcopy(sv);
- SvREFCNT_dec(sv);
- }
- }
- else
- *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
- }
- else {
- MEXTEND(MARK, 0);
- *MARK = &PL_sv_undef;
- }
- SP = MARK;
- }
- else if (gimme == G_ARRAY) {
- for (MARK = newsp + 1; MARK <= SP; MARK++) {
- if (!SvTEMP(*MARK)) {
- *MARK = sv_mortalcopy(*MARK);
- TAINT_NOT; /* Each item is independent */
- }
- }
- }
- PUTBACK;
-
- POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
- PL_curpm = newpm; /* ... and pop $1 et al */
-
- LEAVE;
- LEAVESUB(sv);
- return pop_return();
-}
-
-/* This duplicates the above code because the above code must not
- * get any slower by more conditions */
-PP(pp_leavesublv)
-{
- dSP;
- SV **mark;
- SV **newsp;
- PMOP *newpm;
- I32 gimme;
- register PERL_CONTEXT *cx;
- SV *sv;
-
- POPBLOCK(cx,newpm);
-
- TAINT_NOT;
-
- if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
- /* We are an argument to a function or grep().
- * This kind of lvalueness was legal before lvalue
- * subroutines too, so be backward compatible:
- * cannot report errors. */
-
- /* Scalar context *is* possible, on the LHS of -> only,
- * as in f()->meth(). But this is not an lvalue. */
- if (gimme == G_SCALAR)
- goto temporise;
- if (gimme == G_ARRAY) {
- if (!CvLVALUE(cx->blk_sub.cv))
- goto temporise_array;
- EXTEND_MORTAL(SP - newsp);
- for (mark = newsp + 1; mark <= SP; mark++) {
- if (SvTEMP(*mark))
- /* empty */ ;
- else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
- *mark = sv_mortalcopy(*mark);
- else {
- /* Can be a localized value subject to deletion. */
- PL_tmps_stack[++PL_tmps_ix] = *mark;
- (void)SvREFCNT_inc(*mark);
- }
- }
- }
- }
- else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
- /* Here we go for robustness, not for speed, so we change all
- * the refcounts so the caller gets a live guy. Cannot set
- * TEMP, so sv_2mortal is out of question. */
- if (!CvLVALUE(cx->blk_sub.cv)) {
- POPSUB(cx,sv);
- PL_curpm = newpm;
- LEAVE;
- LEAVESUB(sv);
- DIE(aTHX_ "Can't modify non-lvalue subroutine call");
- }
- if (gimme == G_SCALAR) {
- MARK = newsp + 1;
- EXTEND_MORTAL(1);
- if (MARK == SP) {
- if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
- POPSUB(cx,sv);
- PL_curpm = newpm;
- LEAVE;
- LEAVESUB(sv);
- DIE(aTHX_ "Can't return a %s from lvalue subroutine",
- SvREADONLY(TOPs) ? "readonly value" : "temporary");
- }
- else { /* Can be a localized value
- * subject to deletion. */
- PL_tmps_stack[++PL_tmps_ix] = *mark;
- (void)SvREFCNT_inc(*mark);
- }
- }
- else { /* Should not happen? */
- POPSUB(cx,sv);
- PL_curpm = newpm;
- LEAVE;
- LEAVESUB(sv);
- DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
- (MARK > SP ? "Empty array" : "Array"));
- }
- SP = MARK;
- }
- else if (gimme == G_ARRAY) {
- EXTEND_MORTAL(SP - newsp);
- for (mark = newsp + 1; mark <= SP; mark++) {
- if (SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
- /* Might be flattened array after $#array = */
- PUTBACK;
- POPSUB(cx,sv);
- PL_curpm = newpm;
- LEAVE;
- LEAVESUB(sv);
- DIE(aTHX_ "Can't return %s from lvalue subroutine",
- (*mark != &PL_sv_undef)
- ? (SvREADONLY(TOPs)
- ? "a readonly value" : "a temporary")
- : "an uninitialized value");
- }
- else {
- /* Can be a localized value subject to deletion. */
- PL_tmps_stack[++PL_tmps_ix] = *mark;
- (void)SvREFCNT_inc(*mark);
- }
- }
- }
- }
- else {
- if (gimme == G_SCALAR) {
- temporise:
- MARK = newsp + 1;
- if (MARK <= SP) {
- if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
- if (SvTEMP(TOPs)) {
- *MARK = SvREFCNT_inc(TOPs);
- FREETMPS;
- sv_2mortal(*MARK);
- }
- else {
- sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
- FREETMPS;
- *MARK = sv_mortalcopy(sv);
- SvREFCNT_dec(sv);
- }
- }
- else
- *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
- }
- else {
- MEXTEND(MARK, 0);
- *MARK = &PL_sv_undef;
- }
- SP = MARK;
- }
- else if (gimme == G_ARRAY) {
- temporise_array:
- for (MARK = newsp + 1; MARK <= SP; MARK++) {
- if (!SvTEMP(*MARK)) {
- *MARK = sv_mortalcopy(*MARK);
- TAINT_NOT; /* Each item is independent */
- }
- }
- }
- }
- PUTBACK;
-
- POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
- PL_curpm = newpm; /* ... and pop $1 et al */
-
- LEAVE;
- LEAVESUB(sv);
- return pop_return();
-}
-
-
-STATIC CV *
-S_get_db_sub(pTHX_ SV **svp, CV *cv)
-{
- SV *dbsv = GvSV(PL_DBsub);
-
- if (!PERLDB_SUB_NN) {
- GV *gv = CvGV(cv);
-
- save_item(dbsv);
- if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
- || strEQ(GvNAME(gv), "END")
- || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
- !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
- && (gv = (GV*)*svp) ))) {
- /* Use GV from the stack as a fallback. */
- /* GV is potentially non-unique, or contain different CV. */
- SV *tmp = newRV((SV*)cv);
- sv_setsv(dbsv, tmp);
- SvREFCNT_dec(tmp);
- }
- else {
- gv_efullname3(dbsv, gv, Nullch);
- }
- }
- else {
- (void)SvUPGRADE(dbsv, SVt_PVIV);
- (void)SvIOK_on(dbsv);
- SAVEIV(SvIVX(dbsv));
- SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
- }
-
- if (CvXSUB(cv))
- PL_curcopdb = PL_curcop;
- cv = GvCV(PL_DBsub);
- return cv;
-}
-
-PP(pp_entersub)
-{
- dSP; dPOPss;
- GV *gv;
- HV *stash;
- register CV *cv;
- register PERL_CONTEXT *cx;
- I32 gimme;
- bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
-
- if (!sv)
- DIE(aTHX_ "Not a CODE reference");
- switch (SvTYPE(sv)) {
- default:
- if (!SvROK(sv)) {
- char *sym;
- STRLEN n_a;
-
- if (sv == &PL_sv_yes) { /* unfound import, ignore */
- if (hasargs)
- SP = PL_stack_base + POPMARK;
- RETURN;
- }
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
- }
- else
- sym = SvPV(sv, n_a);
- if (!sym)
- DIE(aTHX_ PL_no_usym, "a subroutine");
- if (PL_op->op_private & HINT_STRICT_REFS)
- DIE(aTHX_ PL_no_symref, sym, "a subroutine");
- cv = get_cv(sym, TRUE);
- break;
- }
- {
- SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
- tryAMAGICunDEREF(to_cv);
- }
- cv = (CV*)SvRV(sv);
- if (SvTYPE(cv) == SVt_PVCV)
- break;
- /* FALL THROUGH */
- case SVt_PVHV:
- case SVt_PVAV:
- DIE(aTHX_ "Not a CODE reference");
- case SVt_PVCV:
- cv = (CV*)sv;
- break;
- case SVt_PVGV:
- if (!(cv = GvCVu((GV*)sv)))
- cv = sv_2cv(sv, &stash, &gv, FALSE);
- if (!cv) {
- ENTER;
- SAVETMPS;
- goto try_autoload;
- }
- break;
- }
-
- ENTER;
- SAVETMPS;
-
- retry:
- if (!CvROOT(cv) && !CvXSUB(cv)) {
- GV* autogv;
- SV* sub_name;
-
- /* anonymous or undef'd function leaves us no recourse */
- if (CvANON(cv) || !(gv = CvGV(cv)))
- DIE(aTHX_ "Undefined subroutine called");
-
- /* autoloaded stub? */
- if (cv != GvCV(gv)) {
- cv = GvCV(gv);
- }
- /* should call AUTOLOAD now? */
- else {
-try_autoload:
- if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
- FALSE)))
- {
- cv = GvCV(autogv);
- }
- /* sorry */
- else {
- sub_name = sv_newmortal();
- gv_efullname3(sub_name, gv, Nullch);
- DIE(aTHX_ "Undefined subroutine &%s called", SvPVX(sub_name));
- }
- }
- if (!cv)
- DIE(aTHX_ "Not a CODE reference");
- goto retry;
- }
-
- gimme = GIMME_V;
- if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
- cv = get_db_sub(&sv, cv);
- if (!cv)
- DIE(aTHX_ "No DBsub routine");
- }
-
-#ifdef USE_THREADS
- /*
- * First we need to check if the sub or method requires locking.
- * If so, we gain a lock on the CV, the first argument or the
- * stash (for static methods), as appropriate. This has to be
- * inline because for FAKE_THREADS, COND_WAIT inlines code to
- * reschedule by returning a new op.
- */
- MUTEX_LOCK(CvMUTEXP(cv));
- if (CvFLAGS(cv) & CVf_LOCKED) {
- MAGIC *mg;
- if (CvFLAGS(cv) & CVf_METHOD) {
- if (SP > PL_stack_base + TOPMARK)
- sv = *(PL_stack_base + TOPMARK + 1);
- else {
- AV *av = (AV*)PL_curpad[0];
- if (hasargs || !av || AvFILLp(av) < 0
- || !(sv = AvARRAY(av)[0]))
- {
- MUTEX_UNLOCK(CvMUTEXP(cv));
- DIE(aTHX_ "no argument for locked method call");
- }
- }
- if (SvROK(sv))
- sv = SvRV(sv);
- else {
- STRLEN len;
- char *stashname = SvPV(sv, len);
- sv = (SV*)gv_stashpvn(stashname, len, TRUE);
- }
- }
- else {
- sv = (SV*)cv;
- }
- MUTEX_UNLOCK(CvMUTEXP(cv));
- mg = condpair_magic(sv);
- MUTEX_LOCK(MgMUTEXP(mg));
- if (MgOWNER(mg) == thr)
- MUTEX_UNLOCK(MgMUTEXP(mg));
- else {
- while (MgOWNER(mg))
- COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
- MgOWNER(mg) = thr;
- DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: pp_entersub lock %p\n",
- thr, sv);)
- MUTEX_UNLOCK(MgMUTEXP(mg));
- SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
- }
- MUTEX_LOCK(CvMUTEXP(cv));
- }
- /*
- * Now we have permission to enter the sub, we must distinguish
- * four cases. (0) It's an XSUB (in which case we don't care
- * about ownership); (1) it's ours already (and we're recursing);
- * (2) it's free (but we may already be using a cached clone);
- * (3) another thread owns it. Case (1) is easy: we just use it.
- * Case (2) means we look for a clone--if we have one, use it
- * otherwise grab ownership of cv. Case (3) means we look for a
- * clone (for non-XSUBs) and have to create one if we don't
- * already have one.
- * Why look for a clone in case (2) when we could just grab
- * ownership of cv straight away? Well, we could be recursing,
- * i.e. we originally tried to enter cv while another thread
- * owned it (hence we used a clone) but it has been freed up
- * and we're now recursing into it. It may or may not be "better"
- * to use the clone but at least CvDEPTH can be trusted.
- */
- if (CvOWNER(cv) == thr || CvXSUB(cv))
- MUTEX_UNLOCK(CvMUTEXP(cv));
- else {
- /* Case (2) or (3) */
- SV **svp;
-
- /*
- * XXX Might it be better to release CvMUTEXP(cv) while we
- * do the hv_fetch? We might find someone has pinched it
- * when we look again, in which case we would be in case
- * (3) instead of (2) so we'd have to clone. Would the fact
- * that we released the mutex more quickly make up for this?
- */
- if ((svp = hv_fetch(thr->cvcache, (char *)cv, sizeof(cv), FALSE)))
- {
- /* We already have a clone to use */
- MUTEX_UNLOCK(CvMUTEXP(cv));
- cv = *(CV**)svp;
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "entersub: %p already has clone %p:%s\n",
- thr, cv, SvPEEK((SV*)cv)));
- CvOWNER(cv) = thr;
- SvREFCNT_inc(cv);
- if (CvDEPTH(cv) == 0)
- SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
- }
- else {
- /* (2) => grab ownership of cv. (3) => make clone */
- if (!CvOWNER(cv)) {
- CvOWNER(cv) = thr;
- SvREFCNT_inc(cv);
- MUTEX_UNLOCK(CvMUTEXP(cv));
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "entersub: %p grabbing %p:%s in stash %s\n",
- thr, cv, SvPEEK((SV*)cv), CvSTASH(cv) ?
- HvNAME(CvSTASH(cv)) : "(none)"));
- }
- else {
- /* Make a new clone. */
- CV *clonecv;
- SvREFCNT_inc(cv); /* don't let it vanish from under us */
- MUTEX_UNLOCK(CvMUTEXP(cv));
- DEBUG_S((PerlIO_printf(Perl_debug_log,
- "entersub: %p cloning %p:%s\n",
- thr, cv, SvPEEK((SV*)cv))));
- /*
- * We're creating a new clone so there's no race
- * between the original MUTEX_UNLOCK and the
- * SvREFCNT_inc since no one will be trying to undef
- * it out from underneath us. At least, I don't think
- * there's a race...
- */
- clonecv = cv_clone(cv);
- SvREFCNT_dec(cv); /* finished with this */
- hv_store(thr->cvcache, (char*)cv, sizeof(cv), (SV*)clonecv,0);
- CvOWNER(clonecv) = thr;
- cv = clonecv;
- SvREFCNT_inc(cv);
- }
- DEBUG_S(if (CvDEPTH(cv) != 0)
- PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
- CvDEPTH(cv)););
- SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
- }
- }
-#endif /* USE_THREADS */
-
- if (CvXSUB(cv)) {
-#ifdef PERL_XSUB_OLDSTYLE
- if (CvOLDSTYLE(cv)) {
- I32 (*fp3)(int,int,int);
- dMARK;
- register I32 items = SP - MARK;
- /* We dont worry to copy from @_. */
- while (SP > mark) {
- SP[1] = SP[0];
- SP--;
- }
- PL_stack_sp = mark + 1;
- fp3 = (I32(*)(int,int,int))CvXSUB(cv);
- items = (*fp3)(CvXSUBANY(cv).any_i32,
- MARK - PL_stack_base + 1,
- items);
- PL_stack_sp = PL_stack_base + items;
- }
- else
-#endif /* PERL_XSUB_OLDSTYLE */
- {
- I32 markix = TOPMARK;
-
- PUTBACK;
-
- if (!hasargs) {
- /* Need to copy @_ to stack. Alternative may be to
- * switch stack to @_, and copy return values
- * back. This would allow popping @_ in XSUB, e.g.. XXXX */
- AV* av;
- I32 items;
-#ifdef USE_THREADS
- av = (AV*)PL_curpad[0];
-#else
- av = GvAV(PL_defgv);
-#endif /* USE_THREADS */
- items = AvFILLp(av) + 1; /* @_ is not tieable */
-
- if (items) {
- /* Mark is at the end of the stack. */
- EXTEND(SP, items);
- Copy(AvARRAY(av), SP + 1, items, SV*);
- SP += items;
- PUTBACK ;
- }
- }
- /* We assume first XSUB in &DB::sub is the called one. */
- if (PL_curcopdb) {
- SAVEVPTR(PL_curcop);
- PL_curcop = PL_curcopdb;
- PL_curcopdb = NULL;
- }
- /* Do we need to open block here? XXXX */
- (void)(*CvXSUB(cv))(aTHXo_ cv);
-
- /* Enforce some sanity in scalar context. */
- if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
- if (markix > PL_stack_sp - PL_stack_base)
- *(PL_stack_base + markix) = &PL_sv_undef;
- else
- *(PL_stack_base + markix) = *PL_stack_sp;
- PL_stack_sp = PL_stack_base + markix;
- }
- }
- LEAVE;
- return NORMAL;
- }
- else {
- dMARK;
- register I32 items = SP - MARK;
- AV* padlist = CvPADLIST(cv);
- SV** svp = AvARRAY(padlist);
- push_return(PL_op->op_next);
- PUSHBLOCK(cx, CXt_SUB, MARK);
- PUSHSUB(cx);
- CvDEPTH(cv)++;
- /* XXX This would be a natural place to set C<PL_compcv = cv> so
- * that eval'' ops within this sub know the correct lexical space.
- * Owing the speed considerations, we choose to search for the cv
- * in doeval() instead.
- */
- if (CvDEPTH(cv) < 2)
- (void)SvREFCNT_inc(cv);
- else { /* save temporaries on recursion? */
- PERL_STACK_OVERFLOW_CHECK();
- if (CvDEPTH(cv) > AvFILLp(padlist)) {
- AV *av;
- AV *newpad = newAV();
- SV **oldpad = AvARRAY(svp[CvDEPTH(cv)-1]);
- I32 ix = AvFILLp((AV*)svp[1]);
- I32 names_fill = AvFILLp((AV*)svp[0]);
- svp = AvARRAY(svp[0]);
- for ( ;ix > 0; ix--) {
- if (names_fill >= ix && svp[ix] != &PL_sv_undef) {
- char *name = SvPVX(svp[ix]);
- if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
- || *name == '&') /* anonymous code? */
- {
- av_store(newpad, ix, SvREFCNT_inc(oldpad[ix]));
- }
- else { /* our own lexical */
- if (*name == '@')
- av_store(newpad, ix, sv = (SV*)newAV());
- else if (*name == '%')
- av_store(newpad, ix, sv = (SV*)newHV());
- else
- av_store(newpad, ix, sv = NEWSV(0,0));
- SvPADMY_on(sv);
- }
- }
- else if (IS_PADGV(oldpad[ix]) || IS_PADCONST(oldpad[ix])) {
- av_store(newpad, ix, sv = SvREFCNT_inc(oldpad[ix]));
- }
- else {
- av_store(newpad, ix, sv = NEWSV(0,0));
- SvPADTMP_on(sv);
- }
- }
- av = newAV(); /* will be @_ */
- av_extend(av, 0);
- av_store(newpad, 0, (SV*)av);
- AvFLAGS(av) = AVf_REIFY;
- av_store(padlist, CvDEPTH(cv), (SV*)newpad);
- AvFILLp(padlist) = CvDEPTH(cv);
- svp = AvARRAY(padlist);
- }
- }
-#ifdef USE_THREADS
- if (!hasargs) {
- AV* av = (AV*)PL_curpad[0];
-
- items = AvFILLp(av) + 1;
- if (items) {
- /* Mark is at the end of the stack. */
- EXTEND(SP, items);
- Copy(AvARRAY(av), SP + 1, items, SV*);
- SP += items;
- PUTBACK ;
- }
- }
-#endif /* USE_THREADS */
- SAVEVPTR(PL_curpad);
- PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
-#ifndef USE_THREADS
- if (hasargs)
-#endif /* USE_THREADS */
- {
- AV* av;
- SV** ary;
-
-#if 0
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p entersub preparing @_\n", thr));
-#endif
- av = (AV*)PL_curpad[0];
- if (AvREAL(av)) {
- /* @_ is normally not REAL--this should only ever
- * happen when DB::sub() calls things that modify @_ */
- av_clear(av);
- AvREAL_off(av);
- AvREIFY_on(av);
- }
-#ifndef USE_THREADS
- cx->blk_sub.savearray = GvAV(PL_defgv);
- GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
-#endif /* USE_THREADS */
- cx->blk_sub.oldcurpad = PL_curpad;
- cx->blk_sub.argarray = av;
- ++MARK;
-
- if (items > AvMAX(av) + 1) {
- ary = AvALLOC(av);
- if (AvARRAY(av) != ary) {
- AvMAX(av) += AvARRAY(av) - AvALLOC(av);
- SvPVX(av) = (char*)ary;
- }
- if (items > AvMAX(av) + 1) {
- AvMAX(av) = items - 1;
- Renew(ary,items,SV*);
- AvALLOC(av) = ary;
- SvPVX(av) = (char*)ary;
- }
- }
- Copy(MARK,AvARRAY(av),items,SV*);
- AvFILLp(av) = items - 1;
-
- while (items--) {
- if (*MARK)
- SvTEMP_off(*MARK);
- MARK++;
- }
- }
- /* warning must come *after* we fully set up the context
- * stuff so that __WARN__ handlers can safely dounwind()
- * if they want to
- */
- if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
- && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
- sub_crush_depth(cv);
-#if 0
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p entersub returning %p\n", thr, CvSTART(cv)));
-#endif
- RETURNOP(CvSTART(cv));
- }
-}
-
-void
-Perl_sub_crush_depth(pTHX_ CV *cv)
-{
- if (CvANON(cv))
- Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on anonymous subroutine");
- else {
- SV* tmpstr = sv_newmortal();
- gv_efullname3(tmpstr, CvGV(cv), Nullch);
- Perl_warner(aTHX_ WARN_RECURSION, "Deep recursion on subroutine \"%s\"",
- SvPVX(tmpstr));
- }
-}
-
-PP(pp_aelem)
-{
- dSP;
- SV** svp;
- IV elem = POPi;
- AV* av = (AV*)POPs;
- U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
- U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
- SV *sv;
-
- if (elem > 0)
- elem -= PL_curcop->cop_arybase;
- if (SvTYPE(av) != SVt_PVAV)
- RETPUSHUNDEF;
- svp = av_fetch(av, elem, lval && !defer);
- if (lval) {
- if (!svp || *svp == &PL_sv_undef) {
- SV* lv;
- if (!defer)
- DIE(aTHX_ PL_no_aelem, elem);
- lv = sv_newmortal();
- sv_upgrade(lv, SVt_PVLV);
- LvTYPE(lv) = 'y';
- sv_magic(lv, Nullsv, 'y', Nullch, 0);
- LvTARG(lv) = SvREFCNT_inc(av);
- LvTARGOFF(lv) = elem;
- LvTARGLEN(lv) = 1;
- PUSHs(lv);
- RETURN;
- }
- if (PL_op->op_private & OPpLVAL_INTRO)
- save_aelem(av, elem, svp);
- else if (PL_op->op_private & OPpDEREF)
- vivify_ref(*svp, PL_op->op_private & OPpDEREF);
- }
- sv = (svp ? *svp : &PL_sv_undef);
- if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
- sv = sv_mortalcopy(sv);
- PUSHs(sv);
- RETURN;
-}
-
-void
-Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
-{
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (!SvOK(sv)) {
- if (SvREADONLY(sv))
- Perl_croak(aTHX_ PL_no_modify);
- if (SvTYPE(sv) < SVt_RV)
- sv_upgrade(sv, SVt_RV);
- else if (SvTYPE(sv) >= SVt_PV) {
- (void)SvOOK_off(sv);
- Safefree(SvPVX(sv));
- SvLEN(sv) = SvCUR(sv) = 0;
- }
- switch (to_what) {
- case OPpDEREF_SV:
- SvRV(sv) = NEWSV(355,0);
- break;
- case OPpDEREF_AV:
- SvRV(sv) = (SV*)newAV();
- break;
- case OPpDEREF_HV:
- SvRV(sv) = (SV*)newHV();
- break;
- }
- SvROK_on(sv);
- SvSETMAGIC(sv);
- }
-}
-
-PP(pp_method)
-{
- dSP;
- SV* sv = TOPs;
-
- if (SvROK(sv)) {
- SV* rsv = SvRV(sv);
- if (SvTYPE(rsv) == SVt_PVCV) {
- SETs(rsv);
- RETURN;
- }
- }
-
- SETs(method_common(sv, Null(U32*)));
- RETURN;
-}
-
-PP(pp_method_named)
-{
- dSP;
- SV* sv = cSVOP->op_sv;
- U32 hash = SvUVX(sv);
-
- XPUSHs(method_common(sv, &hash));
- RETURN;
-}
-
-STATIC SV *
-S_method_common(pTHX_ SV* meth, U32* hashp)
-{
- SV* sv;
- SV* ob;
- GV* gv;
- HV* stash;
- char* name;
- STRLEN namelen;
- char* packname;
- STRLEN packlen;
-
- name = SvPV(meth, namelen);
- sv = *(PL_stack_base + TOPMARK + 1);
-
- if (!sv)
- Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
-
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvROK(sv))
- ob = (SV*)SvRV(sv);
- else {
- GV* iogv;
-
- packname = Nullch;
- if (!SvOK(sv) ||
- !(packname = SvPV(sv, packlen)) ||
- !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
- !(ob=(SV*)GvIO(iogv)))
- {
- if (!packname ||
- ((UTF8_IS_START(*packname) && DO_UTF8(sv))
- ? !isIDFIRST_utf8((U8*)packname)
- : !isIDFIRST(*packname)
- ))
- {
- Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
- SvOK(sv) ? "without a package or object reference"
- : "on an undefined value");
- }
- stash = gv_stashpvn(packname, packlen, TRUE);
- goto fetch;
- }
- *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
- }
-
- if (!ob || !(SvOBJECT(ob)
- || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
- && SvOBJECT(ob))))
- {
- Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
- name);
- }
-
- stash = SvSTASH(ob);
-
- fetch:
- /* shortcut for simple names */
- if (hashp) {
- HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
- if (he) {
- gv = (GV*)HeVAL(he);
- if (isGV(gv) && GvCV(gv) &&
- (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
- return (SV*)GvCV(gv);
- }
- }
-
- gv = gv_fetchmethod(stash, name);
- if (!gv) {
- char* leaf = name;
- char* sep = Nullch;
- char* p;
- GV* gv;
-
- for (p = name; *p; p++) {
- if (*p == '\'')
- sep = p, leaf = p + 1;
- else if (*p == ':' && *(p + 1) == ':')
- sep = p, leaf = p + 2;
- }
- if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
- packname = sep ? CopSTASHPV(PL_curcop) : HvNAME(stash);
- packlen = strlen(packname);
- }
- else {
- packname = name;
- packlen = sep - name;
- }
- gv = gv_fetchpv(packname, 0, SVt_PVHV);
- if (gv && isGV(gv)) {
- Perl_croak(aTHX_
- "Can't locate object method \"%s\" via package \"%s\"",
- leaf, packname);
- }
- else {
- Perl_croak(aTHX_
- "Can't locate object method \"%s\" via package \"%s\""
- " (perhaps you forgot to load \"%s\"?)",
- leaf, packname, packname);
- }
- }
- return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;
-}
-
-#ifdef USE_THREADS
-static void
-unset_cvowner(pTHXo_ void *cvarg)
-{
- register CV* cv = (CV *) cvarg;
-
- DEBUG_S((PerlIO_printf(Perl_debug_log, "%p unsetting CvOWNER of %p:%s\n",
- thr, cv, SvPEEK((SV*)cv))));
- MUTEX_LOCK(CvMUTEXP(cv));
- DEBUG_S(if (CvDEPTH(cv) != 0)
- PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
- CvDEPTH(cv)););
- assert(thr == CvOWNER(cv));
- CvOWNER(cv) = 0;
- MUTEX_UNLOCK(CvMUTEXP(cv));
- SvREFCNT_dec(cv);
-}
-#endif /* USE_THREADS */
diff --git a/contrib/perl5/pp_proto.h b/contrib/perl5/pp_proto.h
deleted file mode 100644
index c3b24e8..0000000
--- a/contrib/perl5/pp_proto.h
+++ /dev/null
@@ -1,394 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by opcode.pl from its data. Any changes made here
- will be lost!
-*/
-
-PERL_CKDEF(Perl_ck_anoncode)
-PERL_CKDEF(Perl_ck_bitop)
-PERL_CKDEF(Perl_ck_concat)
-PERL_CKDEF(Perl_ck_defined)
-PERL_CKDEF(Perl_ck_delete)
-PERL_CKDEF(Perl_ck_eof)
-PERL_CKDEF(Perl_ck_eval)
-PERL_CKDEF(Perl_ck_exec)
-PERL_CKDEF(Perl_ck_exists)
-PERL_CKDEF(Perl_ck_exit)
-PERL_CKDEF(Perl_ck_ftst)
-PERL_CKDEF(Perl_ck_fun)
-PERL_CKDEF(Perl_ck_fun_locale)
-PERL_CKDEF(Perl_ck_glob)
-PERL_CKDEF(Perl_ck_grep)
-PERL_CKDEF(Perl_ck_index)
-PERL_CKDEF(Perl_ck_join)
-PERL_CKDEF(Perl_ck_lengthconst)
-PERL_CKDEF(Perl_ck_lfun)
-PERL_CKDEF(Perl_ck_listiob)
-PERL_CKDEF(Perl_ck_match)
-PERL_CKDEF(Perl_ck_method)
-PERL_CKDEF(Perl_ck_null)
-PERL_CKDEF(Perl_ck_open)
-PERL_CKDEF(Perl_ck_repeat)
-PERL_CKDEF(Perl_ck_require)
-PERL_CKDEF(Perl_ck_return)
-PERL_CKDEF(Perl_ck_rfun)
-PERL_CKDEF(Perl_ck_rvconst)
-PERL_CKDEF(Perl_ck_sassign)
-PERL_CKDEF(Perl_ck_scmp)
-PERL_CKDEF(Perl_ck_select)
-PERL_CKDEF(Perl_ck_shift)
-PERL_CKDEF(Perl_ck_sort)
-PERL_CKDEF(Perl_ck_spair)
-PERL_CKDEF(Perl_ck_split)
-PERL_CKDEF(Perl_ck_subr)
-PERL_CKDEF(Perl_ck_substr)
-PERL_CKDEF(Perl_ck_svconst)
-PERL_CKDEF(Perl_ck_trunc)
-
-
-PERL_PPDEF(Perl_pp_null)
-PERL_PPDEF(Perl_pp_stub)
-PERL_PPDEF(Perl_pp_scalar)
-PERL_PPDEF(Perl_pp_pushmark)
-PERL_PPDEF(Perl_pp_wantarray)
-PERL_PPDEF(Perl_pp_const)
-PERL_PPDEF(Perl_pp_gvsv)
-PERL_PPDEF(Perl_pp_gv)
-PERL_PPDEF(Perl_pp_gelem)
-PERL_PPDEF(Perl_pp_padsv)
-PERL_PPDEF(Perl_pp_padav)
-PERL_PPDEF(Perl_pp_padhv)
-PERL_PPDEF(Perl_pp_padany)
-PERL_PPDEF(Perl_pp_pushre)
-PERL_PPDEF(Perl_pp_rv2gv)
-PERL_PPDEF(Perl_pp_rv2sv)
-PERL_PPDEF(Perl_pp_av2arylen)
-PERL_PPDEF(Perl_pp_rv2cv)
-PERL_PPDEF(Perl_pp_anoncode)
-PERL_PPDEF(Perl_pp_prototype)
-PERL_PPDEF(Perl_pp_refgen)
-PERL_PPDEF(Perl_pp_srefgen)
-PERL_PPDEF(Perl_pp_ref)
-PERL_PPDEF(Perl_pp_bless)
-PERL_PPDEF(Perl_pp_backtick)
-PERL_PPDEF(Perl_pp_glob)
-PERL_PPDEF(Perl_pp_readline)
-PERL_PPDEF(Perl_pp_rcatline)
-PERL_PPDEF(Perl_pp_regcmaybe)
-PERL_PPDEF(Perl_pp_regcreset)
-PERL_PPDEF(Perl_pp_regcomp)
-PERL_PPDEF(Perl_pp_match)
-PERL_PPDEF(Perl_pp_qr)
-PERL_PPDEF(Perl_pp_subst)
-PERL_PPDEF(Perl_pp_substcont)
-PERL_PPDEF(Perl_pp_trans)
-PERL_PPDEF(Perl_pp_sassign)
-PERL_PPDEF(Perl_pp_aassign)
-PERL_PPDEF(Perl_pp_chop)
-PERL_PPDEF(Perl_pp_schop)
-PERL_PPDEF(Perl_pp_chomp)
-PERL_PPDEF(Perl_pp_schomp)
-PERL_PPDEF(Perl_pp_defined)
-PERL_PPDEF(Perl_pp_undef)
-PERL_PPDEF(Perl_pp_study)
-PERL_PPDEF(Perl_pp_pos)
-PERL_PPDEF(Perl_pp_preinc)
-PERL_PPDEF(Perl_pp_predec)
-PERL_PPDEF(Perl_pp_postinc)
-PERL_PPDEF(Perl_pp_postdec)
-PERL_PPDEF(Perl_pp_pow)
-PERL_PPDEF(Perl_pp_multiply)
-PERL_PPDEF(Perl_pp_i_multiply)
-PERL_PPDEF(Perl_pp_divide)
-PERL_PPDEF(Perl_pp_i_divide)
-PERL_PPDEF(Perl_pp_modulo)
-PERL_PPDEF(Perl_pp_i_modulo)
-PERL_PPDEF(Perl_pp_repeat)
-PERL_PPDEF(Perl_pp_add)
-PERL_PPDEF(Perl_pp_i_add)
-PERL_PPDEF(Perl_pp_subtract)
-PERL_PPDEF(Perl_pp_i_subtract)
-PERL_PPDEF(Perl_pp_concat)
-PERL_PPDEF(Perl_pp_stringify)
-PERL_PPDEF(Perl_pp_left_shift)
-PERL_PPDEF(Perl_pp_right_shift)
-PERL_PPDEF(Perl_pp_lt)
-PERL_PPDEF(Perl_pp_i_lt)
-PERL_PPDEF(Perl_pp_gt)
-PERL_PPDEF(Perl_pp_i_gt)
-PERL_PPDEF(Perl_pp_le)
-PERL_PPDEF(Perl_pp_i_le)
-PERL_PPDEF(Perl_pp_ge)
-PERL_PPDEF(Perl_pp_i_ge)
-PERL_PPDEF(Perl_pp_eq)
-PERL_PPDEF(Perl_pp_i_eq)
-PERL_PPDEF(Perl_pp_ne)
-PERL_PPDEF(Perl_pp_i_ne)
-PERL_PPDEF(Perl_pp_ncmp)
-PERL_PPDEF(Perl_pp_i_ncmp)
-PERL_PPDEF(Perl_pp_slt)
-PERL_PPDEF(Perl_pp_sgt)
-PERL_PPDEF(Perl_pp_sle)
-PERL_PPDEF(Perl_pp_sge)
-PERL_PPDEF(Perl_pp_seq)
-PERL_PPDEF(Perl_pp_sne)
-PERL_PPDEF(Perl_pp_scmp)
-PERL_PPDEF(Perl_pp_bit_and)
-PERL_PPDEF(Perl_pp_bit_xor)
-PERL_PPDEF(Perl_pp_bit_or)
-PERL_PPDEF(Perl_pp_negate)
-PERL_PPDEF(Perl_pp_i_negate)
-PERL_PPDEF(Perl_pp_not)
-PERL_PPDEF(Perl_pp_complement)
-PERL_PPDEF(Perl_pp_atan2)
-PERL_PPDEF(Perl_pp_sin)
-PERL_PPDEF(Perl_pp_cos)
-PERL_PPDEF(Perl_pp_rand)
-PERL_PPDEF(Perl_pp_srand)
-PERL_PPDEF(Perl_pp_exp)
-PERL_PPDEF(Perl_pp_log)
-PERL_PPDEF(Perl_pp_sqrt)
-PERL_PPDEF(Perl_pp_int)
-PERL_PPDEF(Perl_pp_hex)
-PERL_PPDEF(Perl_pp_oct)
-PERL_PPDEF(Perl_pp_abs)
-PERL_PPDEF(Perl_pp_length)
-PERL_PPDEF(Perl_pp_substr)
-PERL_PPDEF(Perl_pp_vec)
-PERL_PPDEF(Perl_pp_index)
-PERL_PPDEF(Perl_pp_rindex)
-PERL_PPDEF(Perl_pp_sprintf)
-PERL_PPDEF(Perl_pp_formline)
-PERL_PPDEF(Perl_pp_ord)
-PERL_PPDEF(Perl_pp_chr)
-PERL_PPDEF(Perl_pp_crypt)
-PERL_PPDEF(Perl_pp_ucfirst)
-PERL_PPDEF(Perl_pp_lcfirst)
-PERL_PPDEF(Perl_pp_uc)
-PERL_PPDEF(Perl_pp_lc)
-PERL_PPDEF(Perl_pp_quotemeta)
-PERL_PPDEF(Perl_pp_rv2av)
-PERL_PPDEF(Perl_pp_aelemfast)
-PERL_PPDEF(Perl_pp_aelem)
-PERL_PPDEF(Perl_pp_aslice)
-PERL_PPDEF(Perl_pp_each)
-PERL_PPDEF(Perl_pp_values)
-PERL_PPDEF(Perl_pp_keys)
-PERL_PPDEF(Perl_pp_delete)
-PERL_PPDEF(Perl_pp_exists)
-PERL_PPDEF(Perl_pp_rv2hv)
-PERL_PPDEF(Perl_pp_helem)
-PERL_PPDEF(Perl_pp_hslice)
-PERL_PPDEF(Perl_pp_unpack)
-PERL_PPDEF(Perl_pp_pack)
-PERL_PPDEF(Perl_pp_split)
-PERL_PPDEF(Perl_pp_join)
-PERL_PPDEF(Perl_pp_list)
-PERL_PPDEF(Perl_pp_lslice)
-PERL_PPDEF(Perl_pp_anonlist)
-PERL_PPDEF(Perl_pp_anonhash)
-PERL_PPDEF(Perl_pp_splice)
-PERL_PPDEF(Perl_pp_push)
-PERL_PPDEF(Perl_pp_pop)
-PERL_PPDEF(Perl_pp_shift)
-PERL_PPDEF(Perl_pp_unshift)
-PERL_PPDEF(Perl_pp_sort)
-PERL_PPDEF(Perl_pp_reverse)
-PERL_PPDEF(Perl_pp_grepstart)
-PERL_PPDEF(Perl_pp_grepwhile)
-PERL_PPDEF(Perl_pp_mapstart)
-PERL_PPDEF(Perl_pp_mapwhile)
-PERL_PPDEF(Perl_pp_range)
-PERL_PPDEF(Perl_pp_flip)
-PERL_PPDEF(Perl_pp_flop)
-PERL_PPDEF(Perl_pp_and)
-PERL_PPDEF(Perl_pp_or)
-PERL_PPDEF(Perl_pp_xor)
-PERL_PPDEF(Perl_pp_cond_expr)
-PERL_PPDEF(Perl_pp_andassign)
-PERL_PPDEF(Perl_pp_orassign)
-PERL_PPDEF(Perl_pp_method)
-PERL_PPDEF(Perl_pp_entersub)
-PERL_PPDEF(Perl_pp_leavesub)
-PERL_PPDEF(Perl_pp_leavesublv)
-PERL_PPDEF(Perl_pp_caller)
-PERL_PPDEF(Perl_pp_warn)
-PERL_PPDEF(Perl_pp_die)
-PERL_PPDEF(Perl_pp_reset)
-PERL_PPDEF(Perl_pp_lineseq)
-PERL_PPDEF(Perl_pp_nextstate)
-PERL_PPDEF(Perl_pp_dbstate)
-PERL_PPDEF(Perl_pp_unstack)
-PERL_PPDEF(Perl_pp_enter)
-PERL_PPDEF(Perl_pp_leave)
-PERL_PPDEF(Perl_pp_scope)
-PERL_PPDEF(Perl_pp_enteriter)
-PERL_PPDEF(Perl_pp_iter)
-PERL_PPDEF(Perl_pp_enterloop)
-PERL_PPDEF(Perl_pp_leaveloop)
-PERL_PPDEF(Perl_pp_return)
-PERL_PPDEF(Perl_pp_last)
-PERL_PPDEF(Perl_pp_next)
-PERL_PPDEF(Perl_pp_redo)
-PERL_PPDEF(Perl_pp_dump)
-PERL_PPDEF(Perl_pp_goto)
-PERL_PPDEF(Perl_pp_exit)
-PERL_PPDEF(Perl_pp_open)
-PERL_PPDEF(Perl_pp_close)
-PERL_PPDEF(Perl_pp_pipe_op)
-PERL_PPDEF(Perl_pp_fileno)
-PERL_PPDEF(Perl_pp_umask)
-PERL_PPDEF(Perl_pp_binmode)
-PERL_PPDEF(Perl_pp_tie)
-PERL_PPDEF(Perl_pp_untie)
-PERL_PPDEF(Perl_pp_tied)
-PERL_PPDEF(Perl_pp_dbmopen)
-PERL_PPDEF(Perl_pp_dbmclose)
-PERL_PPDEF(Perl_pp_sselect)
-PERL_PPDEF(Perl_pp_select)
-PERL_PPDEF(Perl_pp_getc)
-PERL_PPDEF(Perl_pp_read)
-PERL_PPDEF(Perl_pp_enterwrite)
-PERL_PPDEF(Perl_pp_leavewrite)
-PERL_PPDEF(Perl_pp_prtf)
-PERL_PPDEF(Perl_pp_print)
-PERL_PPDEF(Perl_pp_sysopen)
-PERL_PPDEF(Perl_pp_sysseek)
-PERL_PPDEF(Perl_pp_sysread)
-PERL_PPDEF(Perl_pp_syswrite)
-PERL_PPDEF(Perl_pp_send)
-PERL_PPDEF(Perl_pp_recv)
-PERL_PPDEF(Perl_pp_eof)
-PERL_PPDEF(Perl_pp_tell)
-PERL_PPDEF(Perl_pp_seek)
-PERL_PPDEF(Perl_pp_truncate)
-PERL_PPDEF(Perl_pp_fcntl)
-PERL_PPDEF(Perl_pp_ioctl)
-PERL_PPDEF(Perl_pp_flock)
-PERL_PPDEF(Perl_pp_socket)
-PERL_PPDEF(Perl_pp_sockpair)
-PERL_PPDEF(Perl_pp_bind)
-PERL_PPDEF(Perl_pp_connect)
-PERL_PPDEF(Perl_pp_listen)
-PERL_PPDEF(Perl_pp_accept)
-PERL_PPDEF(Perl_pp_shutdown)
-PERL_PPDEF(Perl_pp_gsockopt)
-PERL_PPDEF(Perl_pp_ssockopt)
-PERL_PPDEF(Perl_pp_getsockname)
-PERL_PPDEF(Perl_pp_getpeername)
-PERL_PPDEF(Perl_pp_lstat)
-PERL_PPDEF(Perl_pp_stat)
-PERL_PPDEF(Perl_pp_ftrread)
-PERL_PPDEF(Perl_pp_ftrwrite)
-PERL_PPDEF(Perl_pp_ftrexec)
-PERL_PPDEF(Perl_pp_fteread)
-PERL_PPDEF(Perl_pp_ftewrite)
-PERL_PPDEF(Perl_pp_fteexec)
-PERL_PPDEF(Perl_pp_ftis)
-PERL_PPDEF(Perl_pp_fteowned)
-PERL_PPDEF(Perl_pp_ftrowned)
-PERL_PPDEF(Perl_pp_ftzero)
-PERL_PPDEF(Perl_pp_ftsize)
-PERL_PPDEF(Perl_pp_ftmtime)
-PERL_PPDEF(Perl_pp_ftatime)
-PERL_PPDEF(Perl_pp_ftctime)
-PERL_PPDEF(Perl_pp_ftsock)
-PERL_PPDEF(Perl_pp_ftchr)
-PERL_PPDEF(Perl_pp_ftblk)
-PERL_PPDEF(Perl_pp_ftfile)
-PERL_PPDEF(Perl_pp_ftdir)
-PERL_PPDEF(Perl_pp_ftpipe)
-PERL_PPDEF(Perl_pp_ftlink)
-PERL_PPDEF(Perl_pp_ftsuid)
-PERL_PPDEF(Perl_pp_ftsgid)
-PERL_PPDEF(Perl_pp_ftsvtx)
-PERL_PPDEF(Perl_pp_fttty)
-PERL_PPDEF(Perl_pp_fttext)
-PERL_PPDEF(Perl_pp_ftbinary)
-PERL_PPDEF(Perl_pp_chdir)
-PERL_PPDEF(Perl_pp_chown)
-PERL_PPDEF(Perl_pp_chroot)
-PERL_PPDEF(Perl_pp_unlink)
-PERL_PPDEF(Perl_pp_chmod)
-PERL_PPDEF(Perl_pp_utime)
-PERL_PPDEF(Perl_pp_rename)
-PERL_PPDEF(Perl_pp_link)
-PERL_PPDEF(Perl_pp_symlink)
-PERL_PPDEF(Perl_pp_readlink)
-PERL_PPDEF(Perl_pp_mkdir)
-PERL_PPDEF(Perl_pp_rmdir)
-PERL_PPDEF(Perl_pp_open_dir)
-PERL_PPDEF(Perl_pp_readdir)
-PERL_PPDEF(Perl_pp_telldir)
-PERL_PPDEF(Perl_pp_seekdir)
-PERL_PPDEF(Perl_pp_rewinddir)
-PERL_PPDEF(Perl_pp_closedir)
-PERL_PPDEF(Perl_pp_fork)
-PERL_PPDEF(Perl_pp_wait)
-PERL_PPDEF(Perl_pp_waitpid)
-PERL_PPDEF(Perl_pp_system)
-PERL_PPDEF(Perl_pp_exec)
-PERL_PPDEF(Perl_pp_kill)
-PERL_PPDEF(Perl_pp_getppid)
-PERL_PPDEF(Perl_pp_getpgrp)
-PERL_PPDEF(Perl_pp_setpgrp)
-PERL_PPDEF(Perl_pp_getpriority)
-PERL_PPDEF(Perl_pp_setpriority)
-PERL_PPDEF(Perl_pp_time)
-PERL_PPDEF(Perl_pp_tms)
-PERL_PPDEF(Perl_pp_localtime)
-PERL_PPDEF(Perl_pp_gmtime)
-PERL_PPDEF(Perl_pp_alarm)
-PERL_PPDEF(Perl_pp_sleep)
-PERL_PPDEF(Perl_pp_shmget)
-PERL_PPDEF(Perl_pp_shmctl)
-PERL_PPDEF(Perl_pp_shmread)
-PERL_PPDEF(Perl_pp_shmwrite)
-PERL_PPDEF(Perl_pp_msgget)
-PERL_PPDEF(Perl_pp_msgctl)
-PERL_PPDEF(Perl_pp_msgsnd)
-PERL_PPDEF(Perl_pp_msgrcv)
-PERL_PPDEF(Perl_pp_semget)
-PERL_PPDEF(Perl_pp_semctl)
-PERL_PPDEF(Perl_pp_semop)
-PERL_PPDEF(Perl_pp_require)
-PERL_PPDEF(Perl_pp_dofile)
-PERL_PPDEF(Perl_pp_entereval)
-PERL_PPDEF(Perl_pp_leaveeval)
-PERL_PPDEF(Perl_pp_entertry)
-PERL_PPDEF(Perl_pp_leavetry)
-PERL_PPDEF(Perl_pp_ghbyname)
-PERL_PPDEF(Perl_pp_ghbyaddr)
-PERL_PPDEF(Perl_pp_ghostent)
-PERL_PPDEF(Perl_pp_gnbyname)
-PERL_PPDEF(Perl_pp_gnbyaddr)
-PERL_PPDEF(Perl_pp_gnetent)
-PERL_PPDEF(Perl_pp_gpbyname)
-PERL_PPDEF(Perl_pp_gpbynumber)
-PERL_PPDEF(Perl_pp_gprotoent)
-PERL_PPDEF(Perl_pp_gsbyname)
-PERL_PPDEF(Perl_pp_gsbyport)
-PERL_PPDEF(Perl_pp_gservent)
-PERL_PPDEF(Perl_pp_shostent)
-PERL_PPDEF(Perl_pp_snetent)
-PERL_PPDEF(Perl_pp_sprotoent)
-PERL_PPDEF(Perl_pp_sservent)
-PERL_PPDEF(Perl_pp_ehostent)
-PERL_PPDEF(Perl_pp_enetent)
-PERL_PPDEF(Perl_pp_eprotoent)
-PERL_PPDEF(Perl_pp_eservent)
-PERL_PPDEF(Perl_pp_gpwnam)
-PERL_PPDEF(Perl_pp_gpwuid)
-PERL_PPDEF(Perl_pp_gpwent)
-PERL_PPDEF(Perl_pp_spwent)
-PERL_PPDEF(Perl_pp_epwent)
-PERL_PPDEF(Perl_pp_ggrnam)
-PERL_PPDEF(Perl_pp_ggrgid)
-PERL_PPDEF(Perl_pp_ggrent)
-PERL_PPDEF(Perl_pp_sgrent)
-PERL_PPDEF(Perl_pp_egrent)
-PERL_PPDEF(Perl_pp_getlogin)
-PERL_PPDEF(Perl_pp_syscall)
-PERL_PPDEF(Perl_pp_lock)
-PERL_PPDEF(Perl_pp_threadsv)
-PERL_PPDEF(Perl_pp_setstate)
-PERL_PPDEF(Perl_pp_method_named)
diff --git a/contrib/perl5/pp_sys.c b/contrib/perl5/pp_sys.c
deleted file mode 100644
index 8423bd0..0000000
--- a/contrib/perl5/pp_sys.c
+++ /dev/null
@@ -1,5382 +0,0 @@
-/* pp_sys.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * But only a short way ahead its floor and the walls on either side were
- * cloven by a great fissure, out of which the red glare came, now leaping
- * up, now dying down into darkness; and all the while far below there was
- * a rumour and a trouble as of great engines throbbing and labouring.
- */
-
-#include "EXTERN.h"
-#define PERL_IN_PP_SYS_C
-#include "perl.h"
-
-#ifdef I_SHADOW
-/* Shadow password support for solaris - pdo@cs.umd.edu
- * Not just Solaris: at least HP-UX, IRIX, Linux.
- * The API is from SysV.
- *
- * There are at least two more shadow interfaces,
- * see the comments in pp_gpwent().
- *
- * --jhi */
-# ifdef __hpux__
-/* There is a MAXINT coming from <shadow.h> <- <hpsecurity.h> <- <values.h>
- * and another MAXINT from "perl.h" <- <sys/param.h>. */
-# undef MAXINT
-# endif
-# include <shadow.h>
-#endif
-
-#ifdef HAS_SYSCALL
-#ifdef __cplusplus
-extern "C" int syscall(unsigned long,...);
-#endif
-#endif
-
-#ifdef I_SYS_WAIT
-# include <sys/wait.h>
-#endif
-
-#ifdef I_SYS_RESOURCE
-# include <sys/resource.h>
-#endif
-
-#ifdef HAS_SELECT
-# ifdef I_SYS_SELECT
-# include <sys/select.h>
-# endif
-#endif
-
-/* XXX Configure test needed.
- h_errno might not be a simple 'int', especially for multi-threaded
- applications, see "extern int errno in perl.h". Creating such
- a test requires taking into account the differences between
- compiling multithreaded and singlethreaded ($ccflags et al).
- HOST_NOT_FOUND is typically defined in <netdb.h>.
-*/
-#if defined(HOST_NOT_FOUND) && !defined(h_errno) && !defined(__CYGWIN__)
-extern int h_errno;
-#endif
-
-#ifdef HAS_PASSWD
-# ifdef I_PWD
-# include <pwd.h>
-# else
- struct passwd *getpwnam (char *);
- struct passwd *getpwuid (Uid_t);
-# endif
-# ifdef HAS_GETPWENT
- struct passwd *getpwent (void);
-# endif
-#endif
-
-#ifdef HAS_GROUP
-# ifdef I_GRP
-# include <grp.h>
-# else
- struct group *getgrnam (char *);
- struct group *getgrgid (Gid_t);
-# endif
-# ifdef HAS_GETGRENT
- struct group *getgrent (void);
-# endif
-#endif
-
-#ifdef I_UTIME
-# if defined(_MSC_VER) || defined(__MINGW32__)
-# include <sys/utime.h>
-# else
-# include <utime.h>
-# endif
-#endif
-
-/* Put this after #includes because fork and vfork prototypes may conflict. */
-#ifndef HAS_VFORK
-# define vfork fork
-#endif
-
-#ifdef HAS_CHSIZE
-# ifdef my_chsize /* Probably #defined to Perl_my_chsize in embed.h */
-# undef my_chsize
-# endif
-# define my_chsize PerlLIO_chsize
-#endif
-
-#ifdef HAS_FLOCK
-# define FLOCK flock
-#else /* no flock() */
-
- /* fcntl.h might not have been included, even if it exists, because
- the current Configure only sets I_FCNTL if it's needed to pick up
- the *_OK constants. Make sure it has been included before testing
- the fcntl() locking constants. */
-# if defined(HAS_FCNTL) && !defined(I_FCNTL)
-# include <fcntl.h>
-# endif
-
-# if defined(HAS_FCNTL) && defined(FCNTL_CAN_LOCK)
-# define FLOCK fcntl_emulate_flock
-# define FCNTL_EMULATE_FLOCK
-# else /* no flock() or fcntl(F_SETLK,...) */
-# ifdef HAS_LOCKF
-# define FLOCK lockf_emulate_flock
-# define LOCKF_EMULATE_FLOCK
-# endif /* lockf */
-# endif /* no flock() or fcntl(F_SETLK,...) */
-
-# ifdef FLOCK
- static int FLOCK (int, int);
-
- /*
- * These are the flock() constants. Since this sytems doesn't have
- * flock(), the values of the constants are probably not available.
- */
-# ifndef LOCK_SH
-# define LOCK_SH 1
-# endif
-# ifndef LOCK_EX
-# define LOCK_EX 2
-# endif
-# ifndef LOCK_NB
-# define LOCK_NB 4
-# endif
-# ifndef LOCK_UN
-# define LOCK_UN 8
-# endif
-# endif /* emulating flock() */
-
-#endif /* no flock() */
-
-#define ZBTLEN 10
-static char zero_but_true[ZBTLEN + 1] = "0 but true";
-
-#if defined(I_SYS_ACCESS) && !defined(R_OK)
-# include <sys/access.h>
-#endif
-
-#if defined(HAS_FCNTL) && defined(F_SETFD) && !defined(FD_CLOEXEC)
-# define FD_CLOEXEC 1 /* NeXT needs this */
-#endif
-
-#undef PERL_EFF_ACCESS_R_OK /* EFFective uid/gid ACCESS R_OK */
-#undef PERL_EFF_ACCESS_W_OK
-#undef PERL_EFF_ACCESS_X_OK
-
-/* F_OK unused: if stat() cannot find it... */
-
-#if !defined(PERL_EFF_ACCESS_R_OK) && defined(HAS_ACCESS) && defined(EFF_ONLY_OK) && !defined(NO_EFF_ONLY_OK)
- /* Digital UNIX (when the EFF_ONLY_OK gets fixed), UnixWare */
-# define PERL_EFF_ACCESS_R_OK(p) (access((p), R_OK | EFF_ONLY_OK))
-# define PERL_EFF_ACCESS_W_OK(p) (access((p), W_OK | EFF_ONLY_OK))
-# define PERL_EFF_ACCESS_X_OK(p) (access((p), X_OK | EFF_ONLY_OK))
-#endif
-
-#if !defined(PERL_EFF_ACCESS_R_OK) && defined(HAS_EACCESS)
-# ifdef I_SYS_SECURITY
-# include <sys/security.h>
-# endif
-# ifdef ACC_SELF
- /* HP SecureWare */
-# define PERL_EFF_ACCESS_R_OK(p) (eaccess((p), R_OK, ACC_SELF))
-# define PERL_EFF_ACCESS_W_OK(p) (eaccess((p), W_OK, ACC_SELF))
-# define PERL_EFF_ACCESS_X_OK(p) (eaccess((p), X_OK, ACC_SELF))
-# else
- /* SCO */
-# define PERL_EFF_ACCESS_R_OK(p) (eaccess((p), R_OK))
-# define PERL_EFF_ACCESS_W_OK(p) (eaccess((p), W_OK))
-# define PERL_EFF_ACCESS_X_OK(p) (eaccess((p), X_OK))
-# endif
-#endif
-
-#if !defined(PERL_EFF_ACCESS_R_OK) && defined(HAS_ACCESSX) && defined(ACC_SELF)
- /* AIX */
-# define PERL_EFF_ACCESS_R_OK(p) (accessx((p), R_OK, ACC_SELF))
-# define PERL_EFF_ACCESS_W_OK(p) (accessx((p), W_OK, ACC_SELF))
-# define PERL_EFF_ACCESS_X_OK(p) (accessx((p), X_OK, ACC_SELF))
-#endif
-
-#if !defined(PERL_EFF_ACCESS_R_OK) && defined(HAS_ACCESS) \
- && (defined(HAS_SETREUID) || defined(HAS_SETRESUID) \
- || defined(HAS_SETREGID) || defined(HAS_SETRESGID))
-/* The Hard Way. */
-STATIC int
-S_emulate_eaccess(pTHX_ const char* path, Mode_t mode)
-{
- Uid_t ruid = getuid();
- Uid_t euid = geteuid();
- Gid_t rgid = getgid();
- Gid_t egid = getegid();
- int res;
-
- LOCK_CRED_MUTEX;
-#if !defined(HAS_SETREUID) && !defined(HAS_SETRESUID)
- Perl_croak(aTHX_ "switching effective uid is not implemented");
-#else
-#ifdef HAS_SETREUID
- if (setreuid(euid, ruid))
-#else
-#ifdef HAS_SETRESUID
- if (setresuid(euid, ruid, (Uid_t)-1))
-#endif
-#endif
- Perl_croak(aTHX_ "entering effective uid failed");
-#endif
-
-#if !defined(HAS_SETREGID) && !defined(HAS_SETRESGID)
- Perl_croak(aTHX_ "switching effective gid is not implemented");
-#else
-#ifdef HAS_SETREGID
- if (setregid(egid, rgid))
-#else
-#ifdef HAS_SETRESGID
- if (setresgid(egid, rgid, (Gid_t)-1))
-#endif
-#endif
- Perl_croak(aTHX_ "entering effective gid failed");
-#endif
-
- res = access(path, mode);
-
-#ifdef HAS_SETREUID
- if (setreuid(ruid, euid))
-#else
-#ifdef HAS_SETRESUID
- if (setresuid(ruid, euid, (Uid_t)-1))
-#endif
-#endif
- Perl_croak(aTHX_ "leaving effective uid failed");
-
-#ifdef HAS_SETREGID
- if (setregid(rgid, egid))
-#else
-#ifdef HAS_SETRESGID
- if (setresgid(rgid, egid, (Gid_t)-1))
-#endif
-#endif
- Perl_croak(aTHX_ "leaving effective gid failed");
- UNLOCK_CRED_MUTEX;
-
- return res;
-}
-# define PERL_EFF_ACCESS_R_OK(p) (emulate_eaccess((p), R_OK))
-# define PERL_EFF_ACCESS_W_OK(p) (emulate_eaccess((p), W_OK))
-# define PERL_EFF_ACCESS_X_OK(p) (emulate_eaccess((p), X_OK))
-#endif
-
-#if !defined(PERL_EFF_ACCESS_R_OK)
-STATIC int
-S_emulate_eaccess(pTHX_ const char* path, Mode_t mode)
-{
- Perl_croak(aTHX_ "switching effective uid is not implemented");
- /*NOTREACHED*/
- return -1;
-}
-#endif
-
-PP(pp_backtick)
-{
- dSP; dTARGET;
- PerlIO *fp;
- STRLEN n_a;
- char *tmps = POPpx;
- I32 gimme = GIMME_V;
- char *mode = "r";
-
- TAINT_PROPER("``");
- if (PL_op->op_private & OPpOPEN_IN_RAW)
- mode = "rb";
- else if (PL_op->op_private & OPpOPEN_IN_CRLF)
- mode = "rt";
- fp = PerlProc_popen(tmps, mode);
- if (fp) {
- if (gimme == G_VOID) {
- char tmpbuf[256];
- while (PerlIO_read(fp, tmpbuf, sizeof tmpbuf) > 0)
- /*SUPPRESS 530*/
- ;
- }
- else if (gimme == G_SCALAR) {
- sv_setpv(TARG, ""); /* note that this preserves previous buffer */
- while (sv_gets(TARG, fp, SvCUR(TARG)) != Nullch)
- /*SUPPRESS 530*/
- ;
- XPUSHs(TARG);
- SvTAINTED_on(TARG);
- }
- else {
- SV *sv;
-
- for (;;) {
- sv = NEWSV(56, 79);
- if (sv_gets(sv, fp, 0) == Nullch) {
- SvREFCNT_dec(sv);
- break;
- }
- XPUSHs(sv_2mortal(sv));
- if (SvLEN(sv) - SvCUR(sv) > 20) {
- SvLEN_set(sv, SvCUR(sv)+1);
- Renew(SvPVX(sv), SvLEN(sv), char);
- }
- SvTAINTED_on(sv);
- }
- }
- STATUS_NATIVE_SET(PerlProc_pclose(fp));
- TAINT; /* "I believe that this is not gratuitous!" */
- }
- else {
- STATUS_NATIVE_SET(-1);
- if (gimme == G_SCALAR)
- RETPUSHUNDEF;
- }
-
- RETURN;
-}
-
-PP(pp_glob)
-{
- OP *result;
- tryAMAGICunTARGET(iter, -1);
-
- /* Note that we only ever get here if File::Glob fails to load
- * without at the same time croaking, for some reason, or if
- * perl was built with PERL_EXTERNAL_GLOB */
-
- ENTER;
-
-#ifndef VMS
- if (PL_tainting) {
- /*
- * The external globbing program may use things we can't control,
- * so for security reasons we must assume the worst.
- */
- TAINT;
- taint_proper(PL_no_security, "glob");
- }
-#endif /* !VMS */
-
- SAVESPTR(PL_last_in_gv); /* We don't want this to be permanent. */
- PL_last_in_gv = (GV*)*PL_stack_sp--;
-
- SAVESPTR(PL_rs); /* This is not permanent, either. */
- PL_rs = sv_2mortal(newSVpvn("\000", 1));
-#ifndef DOSISH
-#ifndef CSH
- *SvPVX(PL_rs) = '\n';
-#endif /* !CSH */
-#endif /* !DOSISH */
-
- result = do_readline();
- LEAVE;
- return result;
-}
-
-#if 0 /* XXX never used! */
-PP(pp_indread)
-{
- STRLEN n_a;
- PL_last_in_gv = gv_fetchpv(SvPVx(GvSV((GV*)(*PL_stack_sp--)), n_a), TRUE,SVt_PVIO);
- return do_readline();
-}
-#endif
-
-PP(pp_rcatline)
-{
- PL_last_in_gv = cGVOP_gv;
- return do_readline();
-}
-
-PP(pp_warn)
-{
- dSP; dMARK;
- SV *tmpsv;
- char *tmps;
- STRLEN len;
- if (SP - MARK != 1) {
- dTARGET;
- do_join(TARG, &PL_sv_no, MARK, SP);
- tmpsv = TARG;
- SP = MARK + 1;
- }
- else {
- tmpsv = TOPs;
- }
- tmps = SvPV(tmpsv, len);
- if (!tmps || !len) {
- SV *error = ERRSV;
- (void)SvUPGRADE(error, SVt_PV);
- if (SvPOK(error) && SvCUR(error))
- sv_catpv(error, "\t...caught");
- tmpsv = error;
- tmps = SvPV(tmpsv, len);
- }
- if (!tmps || !len)
- tmpsv = sv_2mortal(newSVpvn("Warning: something's wrong", 26));
-
- Perl_warn(aTHX_ "%"SVf, tmpsv);
- RETSETYES;
-}
-
-PP(pp_die)
-{
- dSP; dMARK;
- char *tmps;
- SV *tmpsv;
- STRLEN len;
- bool multiarg = 0;
- if (SP - MARK != 1) {
- dTARGET;
- do_join(TARG, &PL_sv_no, MARK, SP);
- tmpsv = TARG;
- tmps = SvPV(tmpsv, len);
- multiarg = 1;
- SP = MARK + 1;
- }
- else {
- tmpsv = TOPs;
- tmps = SvROK(tmpsv) ? Nullch : SvPV(tmpsv, len);
- }
- if (!tmps || !len) {
- SV *error = ERRSV;
- (void)SvUPGRADE(error, SVt_PV);
- if (multiarg ? SvROK(error) : SvROK(tmpsv)) {
- if (!multiarg)
- SvSetSV(error,tmpsv);
- else if (sv_isobject(error)) {
- HV *stash = SvSTASH(SvRV(error));
- GV *gv = gv_fetchmethod(stash, "PROPAGATE");
- if (gv) {
- SV *file = sv_2mortal(newSVpv(CopFILE(PL_curcop),0));
- SV *line = sv_2mortal(newSVuv(CopLINE(PL_curcop)));
- EXTEND(SP, 3);
- PUSHMARK(SP);
- PUSHs(error);
- PUSHs(file);
- PUSHs(line);
- PUTBACK;
- call_sv((SV*)GvCV(gv),
- G_SCALAR|G_EVAL|G_KEEPERR);
- sv_setsv(error,*PL_stack_sp--);
- }
- }
- DIE(aTHX_ Nullch);
- }
- else {
- if (SvPOK(error) && SvCUR(error))
- sv_catpv(error, "\t...propagated");
- tmpsv = error;
- tmps = SvPV(tmpsv, len);
- }
- }
- if (!tmps || !len)
- tmpsv = sv_2mortal(newSVpvn("Died", 4));
-
- DIE(aTHX_ "%"SVf, tmpsv);
-}
-
-/* I/O. */
-
-PP(pp_open)
-{
- dSP; dTARGET;
- GV *gv;
- SV *sv;
- SV *name = Nullsv;
- I32 have_name = 0;
- char *tmps;
- STRLEN len;
- MAGIC *mg;
-
- if (MAXARG > 2) {
- name = POPs;
- have_name = 1;
- }
- if (MAXARG > 1)
- sv = POPs;
- if (!isGV(TOPs))
- DIE(aTHX_ PL_no_usym, "filehandle");
- if (MAXARG <= 1)
- sv = GvSV(TOPs);
- gv = (GV*)POPs;
- if (!isGV(gv))
- DIE(aTHX_ PL_no_usym, "filehandle");
- if (GvIOp(gv))
- IoFLAGS(GvIOp(gv)) &= ~IOf_UNTAINT;
-
- if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- XPUSHs(sv);
- if (have_name)
- XPUSHs(name);
- PUTBACK;
- ENTER;
- call_method("OPEN", G_SCALAR);
- LEAVE;
- SPAGAIN;
- RETURN;
- }
-
- tmps = SvPV(sv, len);
- if (do_open9(gv, tmps, len, FALSE, O_RDONLY, 0, Nullfp, name, have_name))
- PUSHi( (I32)PL_forkprocess );
- else if (PL_forkprocess == 0) /* we are a new child */
- PUSHi(0);
- else
- RETPUSHUNDEF;
- RETURN;
-}
-
-PP(pp_close)
-{
- dSP;
- GV *gv;
- MAGIC *mg;
-
- if (MAXARG == 0)
- gv = PL_defoutgv;
- else
- gv = (GV*)POPs;
-
- if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- PUTBACK;
- ENTER;
- call_method("CLOSE", G_SCALAR);
- LEAVE;
- SPAGAIN;
- RETURN;
- }
- EXTEND(SP, 1);
- PUSHs(boolSV(do_close(gv, TRUE)));
- RETURN;
-}
-
-PP(pp_pipe_op)
-{
- dSP;
-#ifdef HAS_PIPE
- GV *rgv;
- GV *wgv;
- register IO *rstio;
- register IO *wstio;
- int fd[2];
-
- wgv = (GV*)POPs;
- rgv = (GV*)POPs;
-
- if (!rgv || !wgv)
- goto badexit;
-
- if (SvTYPE(rgv) != SVt_PVGV || SvTYPE(wgv) != SVt_PVGV)
- DIE(aTHX_ PL_no_usym, "filehandle");
- rstio = GvIOn(rgv);
- wstio = GvIOn(wgv);
-
- if (IoIFP(rstio))
- do_close(rgv, FALSE);
- if (IoIFP(wstio))
- do_close(wgv, FALSE);
-
- if (PerlProc_pipe(fd) < 0)
- goto badexit;
-
- IoIFP(rstio) = PerlIO_fdopen(fd[0], "r");
- IoOFP(wstio) = PerlIO_fdopen(fd[1], "w");
- IoIFP(wstio) = IoOFP(wstio);
- IoTYPE(rstio) = IoTYPE_RDONLY;
- IoTYPE(wstio) = IoTYPE_WRONLY;
-
- if (!IoIFP(rstio) || !IoOFP(wstio)) {
- if (IoIFP(rstio)) PerlIO_close(IoIFP(rstio));
- else PerlLIO_close(fd[0]);
- if (IoOFP(wstio)) PerlIO_close(IoOFP(wstio));
- else PerlLIO_close(fd[1]);
- goto badexit;
- }
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- fcntl(fd[0],F_SETFD,fd[0] > PL_maxsysfd); /* ensure close-on-exec */
- fcntl(fd[1],F_SETFD,fd[1] > PL_maxsysfd); /* ensure close-on-exec */
-#endif
- RETPUSHYES;
-
-badexit:
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_func, "pipe");
-#endif
-}
-
-PP(pp_fileno)
-{
- dSP; dTARGET;
- GV *gv;
- IO *io;
- PerlIO *fp;
- MAGIC *mg;
-
- if (MAXARG < 1)
- RETPUSHUNDEF;
- gv = (GV*)POPs;
-
- if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- PUTBACK;
- ENTER;
- call_method("FILENO", G_SCALAR);
- LEAVE;
- SPAGAIN;
- RETURN;
- }
-
- if (!gv || !(io = GvIO(gv)) || !(fp = IoIFP(io)))
- RETPUSHUNDEF;
- PUSHi(PerlIO_fileno(fp));
- RETURN;
-}
-
-PP(pp_umask)
-{
- dSP; dTARGET;
- Mode_t anum;
-
-#ifdef HAS_UMASK
- if (MAXARG < 1) {
- anum = PerlLIO_umask(0);
- (void)PerlLIO_umask(anum);
- }
- else
- anum = PerlLIO_umask(POPi);
- TAINT_PROPER("umask");
- XPUSHi(anum);
-#else
- /* Only DIE if trying to restrict permissions on `user' (self).
- * Otherwise it's harmless and more useful to just return undef
- * since 'group' and 'other' concepts probably don't exist here. */
- if (MAXARG >= 1 && (POPi & 0700))
- DIE(aTHX_ "umask not implemented");
- XPUSHs(&PL_sv_undef);
-#endif
- RETURN;
-}
-
-PP(pp_binmode)
-{
- dSP;
- GV *gv;
- IO *io;
- PerlIO *fp;
- MAGIC *mg;
- SV *discp = Nullsv;
-
- if (MAXARG < 1)
- RETPUSHUNDEF;
- if (MAXARG > 1)
- discp = POPs;
-
- gv = (GV*)POPs;
-
- if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- if (discp)
- XPUSHs(discp);
- PUTBACK;
- ENTER;
- call_method("BINMODE", G_SCALAR);
- LEAVE;
- SPAGAIN;
- RETURN;
- }
-
- EXTEND(SP, 1);
- if (!(io = GvIO(gv)) || !(fp = IoIFP(io)))
- RETPUSHUNDEF;
-
- if (do_binmode(fp,IoTYPE(io),mode_from_discipline(discp)))
- RETPUSHYES;
- else
- RETPUSHUNDEF;
-}
-
-PP(pp_tie)
-{
- dSP;
- dMARK;
- SV *varsv;
- HV* stash;
- GV *gv;
- SV *sv;
- I32 markoff = MARK - PL_stack_base;
- char *methname;
- int how = 'P';
- U32 items;
- STRLEN n_a;
-
- varsv = *++MARK;
- switch(SvTYPE(varsv)) {
- case SVt_PVHV:
- methname = "TIEHASH";
- break;
- case SVt_PVAV:
- methname = "TIEARRAY";
- break;
- case SVt_PVGV:
- methname = "TIEHANDLE";
- how = 'q';
- break;
- default:
- methname = "TIESCALAR";
- how = 'q';
- break;
- }
- items = SP - MARK++;
- if (sv_isobject(*MARK)) {
- ENTER;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,items);
- while (items--)
- PUSHs(*MARK++);
- PUTBACK;
- call_method(methname, G_SCALAR);
- }
- else {
- /* Not clear why we don't call call_method here too.
- * perhaps to get different error message ?
- */
- stash = gv_stashsv(*MARK, FALSE);
- if (!stash || !(gv = gv_fetchmethod(stash, methname))) {
- DIE(aTHX_ "Can't locate object method \"%s\" via package \"%s\"",
- methname, SvPV(*MARK,n_a));
- }
- ENTER;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,items);
- while (items--)
- PUSHs(*MARK++);
- PUTBACK;
- call_sv((SV*)GvCV(gv), G_SCALAR);
- }
- SPAGAIN;
-
- sv = TOPs;
- POPSTACK;
- if (sv_isobject(sv)) {
- sv_unmagic(varsv, how);
- sv_magic(varsv, (SvRV(sv) == varsv ? Nullsv : sv), how, Nullch, 0);
- }
- LEAVE;
- SP = PL_stack_base + markoff;
- PUSHs(sv);
- RETURN;
-}
-
-PP(pp_untie)
-{
- dSP;
- SV *sv = POPs;
- char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) ? 'P' : 'q';
-
- MAGIC * mg ;
- if ((mg = SvTIED_mg(sv, how))) {
- SV *obj = SvRV(mg->mg_obj);
- GV *gv;
- CV *cv = NULL;
- if ((gv = gv_fetchmethod_autoload(SvSTASH(obj), "UNTIE", FALSE)) &&
- isGV(gv) && (cv = GvCV(gv))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- XPUSHs(sv_2mortal(newSViv(SvREFCNT(obj)-1)));
- PUTBACK;
- ENTER;
- call_sv((SV *)cv, G_VOID);
- LEAVE;
- SPAGAIN;
- }
- else if (ckWARN(WARN_UNTIE)) {
- if (mg && SvREFCNT(obj) > 1)
- Perl_warner(aTHX_ WARN_UNTIE,
- "untie attempted while %"UVuf" inner references still exist",
- (UV)SvREFCNT(obj) - 1 ) ;
- }
- }
- sv_unmagic(sv, how);
- RETPUSHYES;
-}
-
-PP(pp_tied)
-{
- dSP;
- SV *sv = POPs;
- char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) ? 'P' : 'q';
- MAGIC *mg;
-
- if ((mg = SvTIED_mg(sv, how))) {
- SV *osv = SvTIED_obj(sv, mg);
- if (osv == mg->mg_obj)
- osv = sv_mortalcopy(osv);
- PUSHs(osv);
- RETURN;
- }
- RETPUSHUNDEF;
-}
-
-PP(pp_dbmopen)
-{
- dSP;
- HV *hv;
- dPOPPOPssrl;
- HV* stash;
- GV *gv;
- SV *sv;
-
- hv = (HV*)POPs;
-
- sv = sv_mortalcopy(&PL_sv_no);
- sv_setpv(sv, "AnyDBM_File");
- stash = gv_stashsv(sv, FALSE);
- if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH"))) {
- PUTBACK;
- require_pv("AnyDBM_File.pm");
- SPAGAIN;
- if (!(gv = gv_fetchmethod(stash, "TIEHASH")))
- DIE(aTHX_ "No dbm on this machine");
- }
-
- ENTER;
- PUSHMARK(SP);
-
- EXTEND(SP, 5);
- PUSHs(sv);
- PUSHs(left);
- if (SvIV(right))
- PUSHs(sv_2mortal(newSVuv(O_RDWR|O_CREAT)));
- else
- PUSHs(sv_2mortal(newSVuv(O_RDWR)));
- PUSHs(right);
- PUTBACK;
- call_sv((SV*)GvCV(gv), G_SCALAR);
- SPAGAIN;
-
- if (!sv_isobject(TOPs)) {
- SP--;
- PUSHMARK(SP);
- PUSHs(sv);
- PUSHs(left);
- PUSHs(sv_2mortal(newSVuv(O_RDONLY)));
- PUSHs(right);
- PUTBACK;
- call_sv((SV*)GvCV(gv), G_SCALAR);
- SPAGAIN;
- }
-
- if (sv_isobject(TOPs)) {
- sv_unmagic((SV *) hv, 'P');
- sv_magic((SV*)hv, TOPs, 'P', Nullch, 0);
- }
- LEAVE;
- RETURN;
-}
-
-PP(pp_dbmclose)
-{
- return pp_untie();
-}
-
-PP(pp_sselect)
-{
- dSP; dTARGET;
-#ifdef HAS_SELECT
- register I32 i;
- register I32 j;
- register char *s;
- register SV *sv;
- NV value;
- I32 maxlen = 0;
- I32 nfound;
- struct timeval timebuf;
- struct timeval *tbuf = &timebuf;
- I32 growsize;
- char *fd_sets[4];
- STRLEN n_a;
-#if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
- I32 masksize;
- I32 offset;
- I32 k;
-
-# if BYTEORDER & 0xf0000
-# define ORDERBYTE (0x88888888 - BYTEORDER)
-# else
-# define ORDERBYTE (0x4444 - BYTEORDER)
-# endif
-
-#endif
-
- SP -= 4;
- for (i = 1; i <= 3; i++) {
- if (!SvPOK(SP[i]))
- continue;
- j = SvCUR(SP[i]);
- if (maxlen < j)
- maxlen = j;
- }
-
-/* little endians can use vecs directly */
-#if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
-# if SELECT_MIN_BITS > 1
- /* If SELECT_MIN_BITS is greater than one we most probably will want
- * to align the sizes with SELECT_MIN_BITS/8 because for example
- * in many little-endian (Intel, Alpha) systems (Linux, OS/2, Digital
- * UNIX, Solaris, NeXT, Darwin) the smallest quantum select() operates
- * on (sets/tests/clears bits) is 32 bits. */
- growsize = maxlen + (SELECT_MIN_BITS/8 - (maxlen % (SELECT_MIN_BITS/8)));
-# else
- growsize = sizeof(fd_set);
-# endif
-# 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
-
- sv = SP[4];
- if (SvOK(sv)) {
- value = SvNV(sv);
- if (value < 0.0)
- value = 0.0;
- timebuf.tv_sec = (long)value;
- value -= (NV)timebuf.tv_sec;
- timebuf.tv_usec = (long)(value * 1000000.0);
- }
- else
- tbuf = Null(struct timeval*);
-
- for (i = 1; i <= 3; i++) {
- sv = SP[i];
- if (!SvOK(sv)) {
- fd_sets[i] = 0;
- continue;
- }
- else if (!SvPOK(sv))
- SvPV_force(sv,n_a); /* force string conversion */
- j = SvLEN(sv);
- if (j < growsize) {
- Sv_Grow(sv, growsize);
- }
- j = SvCUR(sv);
- s = SvPVX(sv) + j;
- while (++j <= growsize) {
- *s++ = '\0';
- }
-
-#if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
- s = SvPVX(sv);
- 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];
- }
-#else
- fd_sets[i] = SvPVX(sv);
-#endif
- }
-
- nfound = PerlSock_select(
- maxlen * 8,
- (Select_fd_set_t) fd_sets[1],
- (Select_fd_set_t) fd_sets[2],
- (Select_fd_set_t) fd_sets[3],
- tbuf);
- for (i = 1; i <= 3; i++) {
- if (fd_sets[i]) {
- sv = SP[i];
-#if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
- s = SvPVX(sv);
- 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];
- }
- Safefree(fd_sets[i]);
-#endif
- SvSETMAGIC(sv);
- }
- }
-
- PUSHi(nfound);
- if (GIMME == G_ARRAY && tbuf) {
- value = (NV)(timebuf.tv_sec) +
- (NV)(timebuf.tv_usec) / 1000000.0;
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setnv(sv, value);
- }
- RETURN;
-#else
- DIE(aTHX_ "select not implemented");
-#endif
-}
-
-void
-Perl_setdefout(pTHX_ GV *gv)
-{
- if (gv)
- (void)SvREFCNT_inc(gv);
- if (PL_defoutgv)
- SvREFCNT_dec(PL_defoutgv);
- PL_defoutgv = gv;
-}
-
-PP(pp_select)
-{
- dSP; dTARGET;
- GV *newdefout, *egv;
- HV *hv;
-
- newdefout = (PL_op->op_private > 0) ? ((GV *) POPs) : (GV *) NULL;
-
- egv = GvEGV(PL_defoutgv);
- if (!egv)
- egv = PL_defoutgv;
- hv = GvSTASH(egv);
- if (! hv)
- XPUSHs(&PL_sv_undef);
- else {
- GV **gvp = (GV**)hv_fetch(hv, GvNAME(egv), GvNAMELEN(egv), FALSE);
- if (gvp && *gvp == egv) {
- gv_efullname4(TARG, PL_defoutgv, Nullch, TRUE);
- XPUSHTARG;
- }
- else {
- XPUSHs(sv_2mortal(newRV((SV*)egv)));
- }
- }
-
- if (newdefout) {
- if (!GvIO(newdefout))
- gv_IOadd(newdefout);
- setdefout(newdefout);
- }
-
- RETURN;
-}
-
-PP(pp_getc)
-{
- dSP; dTARGET;
- GV *gv;
- MAGIC *mg;
-
- if (MAXARG == 0)
- gv = PL_stdingv;
- else
- gv = (GV*)POPs;
-
- if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
- I32 gimme = GIMME_V;
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- PUTBACK;
- ENTER;
- call_method("GETC", gimme);
- LEAVE;
- SPAGAIN;
- if (gimme == G_SCALAR)
- SvSetMagicSV_nosteal(TARG, TOPs);
- RETURN;
- }
- if (!gv || do_eof(gv)) /* make sure we have fp with something */
- RETPUSHUNDEF;
- TAINT;
- sv_setpv(TARG, " ");
- *SvPVX(TARG) = PerlIO_getc(IoIFP(GvIOp(gv))); /* should never be EOF */
- PUSHTARG;
- RETURN;
-}
-
-PP(pp_read)
-{
- return pp_sysread();
-}
-
-STATIC OP *
-S_doform(pTHX_ CV *cv, GV *gv, OP *retop)
-{
- register PERL_CONTEXT *cx;
- I32 gimme = GIMME_V;
- AV* padlist = CvPADLIST(cv);
- SV** svp = AvARRAY(padlist);
-
- ENTER;
- SAVETMPS;
-
- push_return(retop);
- PUSHBLOCK(cx, CXt_FORMAT, PL_stack_sp);
- PUSHFORMAT(cx);
- SAVEVPTR(PL_curpad);
- PL_curpad = AvARRAY((AV*)svp[1]);
-
- setdefout(gv); /* locally select filehandle so $% et al work */
- return CvSTART(cv);
-}
-
-PP(pp_enterwrite)
-{
- dSP;
- register GV *gv;
- register IO *io;
- GV *fgv;
- CV *cv;
-
- if (MAXARG == 0)
- gv = PL_defoutgv;
- else {
- gv = (GV*)POPs;
- if (!gv)
- gv = PL_defoutgv;
- }
- EXTEND(SP, 1);
- io = GvIO(gv);
- if (!io) {
- RETPUSHNO;
- }
- if (IoFMT_GV(io))
- fgv = IoFMT_GV(io);
- else
- fgv = gv;
-
- cv = GvFORM(fgv);
- if (!cv) {
- char *name = NULL;
- if (fgv) {
- SV *tmpsv = sv_newmortal();
- gv_efullname4(tmpsv, fgv, Nullch, FALSE);
- name = SvPV_nolen(tmpsv);
- }
- if (name && *name)
- DIE(aTHX_ "Undefined format \"%s\" called", name);
- DIE(aTHX_ "Not a format reference");
- }
- if (CvCLONE(cv))
- cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
-
- IoFLAGS(io) &= ~IOf_DIDTOP;
- return doform(cv,gv,PL_op->op_next);
-}
-
-PP(pp_leavewrite)
-{
- dSP;
- GV *gv = cxstack[cxstack_ix].blk_sub.gv;
- register IO *io = GvIOp(gv);
- PerlIO *ofp = IoOFP(io);
- PerlIO *fp;
- SV **newsp;
- I32 gimme;
- register PERL_CONTEXT *cx;
-
- DEBUG_f(PerlIO_printf(Perl_debug_log, "left=%ld, todo=%ld\n",
- (long)IoLINES_LEFT(io), (long)FmLINES(PL_formtarget)));
- if (IoLINES_LEFT(io) < FmLINES(PL_formtarget) &&
- PL_formtarget != PL_toptarget)
- {
- GV *fgv;
- CV *cv;
- if (!IoTOP_GV(io)) {
- GV *topgv;
- SV *topname;
-
- if (!IoTOP_NAME(io)) {
- if (!IoFMT_NAME(io))
- IoFMT_NAME(io) = savepv(GvNAME(gv));
- topname = sv_2mortal(Perl_newSVpvf(aTHX_ "%s_TOP", IoFMT_NAME(io)));
- topgv = gv_fetchpv(SvPVX(topname), FALSE, SVt_PVFM);
- if ((topgv && GvFORM(topgv)) ||
- !gv_fetchpv("top",FALSE,SVt_PVFM))
- IoTOP_NAME(io) = savepv(SvPVX(topname));
- else
- IoTOP_NAME(io) = savepv("top");
- }
- topgv = gv_fetchpv(IoTOP_NAME(io),FALSE, SVt_PVFM);
- if (!topgv || !GvFORM(topgv)) {
- IoLINES_LEFT(io) = 100000000;
- goto forget_top;
- }
- IoTOP_GV(io) = topgv;
- }
- if (IoFLAGS(io) & IOf_DIDTOP) { /* Oh dear. It still doesn't fit. */
- I32 lines = IoLINES_LEFT(io);
- char *s = SvPVX(PL_formtarget);
- if (lines <= 0) /* Yow, header didn't even fit!!! */
- goto forget_top;
- while (lines-- > 0) {
- s = strchr(s, '\n');
- if (!s)
- break;
- s++;
- }
- if (s) {
- PerlIO_write(ofp, SvPVX(PL_formtarget), s - SvPVX(PL_formtarget));
- sv_chop(PL_formtarget, s);
- FmLINES(PL_formtarget) -= IoLINES_LEFT(io);
- }
- }
- if (IoLINES_LEFT(io) >= 0 && IoPAGE(io) > 0)
- PerlIO_write(ofp, SvPVX(PL_formfeed), SvCUR(PL_formfeed));
- IoLINES_LEFT(io) = IoPAGE_LEN(io);
- IoPAGE(io)++;
- PL_formtarget = PL_toptarget;
- IoFLAGS(io) |= IOf_DIDTOP;
- fgv = IoTOP_GV(io);
- if (!fgv)
- DIE(aTHX_ "bad top format reference");
- cv = GvFORM(fgv);
- {
- char *name = NULL;
- if (!cv) {
- SV *sv = sv_newmortal();
- gv_efullname4(sv, fgv, Nullch, FALSE);
- name = SvPV_nolen(sv);
- }
- if (name && *name)
- DIE(aTHX_ "Undefined top format \"%s\" called",name);
- /* why no:
- else
- DIE(aTHX_ "Undefined top format called");
- ?*/
- }
- if (CvCLONE(cv))
- cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
- return doform(cv,gv,PL_op);
- }
-
- forget_top:
- POPBLOCK(cx,PL_curpm);
- POPFORMAT(cx);
- LEAVE;
-
- fp = IoOFP(io);
- if (!fp) {
- if (ckWARN2(WARN_CLOSED,WARN_IO)) {
- if (IoIFP(io)) {
- /* integrate with report_evil_fh()? */
- char *name = NULL;
- if (isGV(gv)) {
- SV* sv = sv_newmortal();
- gv_efullname4(sv, gv, Nullch, FALSE);
- name = SvPV_nolen(sv);
- }
- if (name && *name)
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle %s opened only for input", name);
- else
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle opened only for input");
- }
- else if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- }
- PUSHs(&PL_sv_no);
- }
- else {
- if ((IoLINES_LEFT(io) -= FmLINES(PL_formtarget)) < 0) {
- if (ckWARN(WARN_IO))
- Perl_warner(aTHX_ WARN_IO, "page overflow");
- }
- if (!PerlIO_write(ofp, SvPVX(PL_formtarget), SvCUR(PL_formtarget)) ||
- PerlIO_error(fp))
- PUSHs(&PL_sv_no);
- else {
- FmLINES(PL_formtarget) = 0;
- SvCUR_set(PL_formtarget, 0);
- *SvEND(PL_formtarget) = '\0';
- if (IoFLAGS(io) & IOf_FLUSH)
- (void)PerlIO_flush(fp);
- PUSHs(&PL_sv_yes);
- }
- }
- PL_formtarget = PL_bodytarget;
- PUTBACK;
- return pop_return();
-}
-
-PP(pp_prtf)
-{
- dSP; dMARK; dORIGMARK;
- GV *gv;
- IO *io;
- PerlIO *fp;
- SV *sv;
- MAGIC *mg;
- STRLEN n_a;
-
- if (PL_op->op_flags & OPf_STACKED)
- gv = (GV*)*++MARK;
- else
- gv = PL_defoutgv;
-
- if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
- if (MARK == ORIGMARK) {
- MEXTEND(SP, 1);
- ++MARK;
- Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
- ++SP;
- }
- PUSHMARK(MARK - 1);
- *MARK = SvTIED_obj((SV*)gv, mg);
- PUTBACK;
- ENTER;
- call_method("PRINTF", G_SCALAR);
- LEAVE;
- SPAGAIN;
- MARK = ORIGMARK + 1;
- *MARK = *SP;
- SP = MARK;
- RETURN;
- }
-
- sv = NEWSV(0,0);
- if (!(io = GvIO(gv))) {
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,RMS$_IFI);
- goto just_say_no;
- }
- else if (!(fp = IoOFP(io))) {
- if (ckWARN2(WARN_CLOSED,WARN_IO)) {
- /* integrate with report_evil_fh()? */
- if (IoIFP(io)) {
- char *name = NULL;
- if (isGV(gv)) {
- gv_efullname4(sv, gv, Nullch, FALSE);
- name = SvPV_nolen(sv);
- }
- if (name && *name)
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle %s opened only for input", name);
- else
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle opened only for input");
- }
- else if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- }
- SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
- goto just_say_no;
- }
- else {
- do_sprintf(sv, SP - MARK, MARK + 1);
- if (!do_print(sv, fp))
- goto just_say_no;
-
- if (IoFLAGS(io) & IOf_FLUSH)
- if (PerlIO_flush(fp) == EOF)
- goto just_say_no;
- }
- SvREFCNT_dec(sv);
- SP = ORIGMARK;
- PUSHs(&PL_sv_yes);
- RETURN;
-
- just_say_no:
- SvREFCNT_dec(sv);
- SP = ORIGMARK;
- PUSHs(&PL_sv_undef);
- RETURN;
-}
-
-PP(pp_sysopen)
-{
- dSP;
- GV *gv;
- SV *sv;
- char *tmps;
- STRLEN len;
- int mode, perm;
-
- if (MAXARG > 3)
- perm = POPi;
- else
- perm = 0666;
- mode = POPi;
- sv = POPs;
- gv = (GV *)POPs;
-
- /* Need TIEHANDLE method ? */
-
- tmps = SvPV(sv, len);
- if (do_open(gv, tmps, len, TRUE, mode, perm, Nullfp)) {
- IoLINES(GvIOp(gv)) = 0;
- PUSHs(&PL_sv_yes);
- }
- else {
- PUSHs(&PL_sv_undef);
- }
- RETURN;
-}
-
-PP(pp_sysread)
-{
- dSP; dMARK; dORIGMARK; dTARGET;
- int offset;
- GV *gv;
- IO *io;
- char *buffer;
- SSize_t length;
- Sock_size_t bufsize;
- SV *bufsv;
- STRLEN blen;
- MAGIC *mg;
-
- gv = (GV*)*++MARK;
- if ((PL_op->op_type == OP_READ || PL_op->op_type == OP_SYSREAD) &&
- (mg = SvTIED_mg((SV*)gv, 'q')))
- {
- SV *sv;
-
- PUSHMARK(MARK-1);
- *MARK = SvTIED_obj((SV*)gv, mg);
- ENTER;
- call_method("READ", G_SCALAR);
- LEAVE;
- SPAGAIN;
- sv = POPs;
- SP = ORIGMARK;
- PUSHs(sv);
- RETURN;
- }
-
- if (!gv)
- goto say_undef;
- bufsv = *++MARK;
- if (! SvOK(bufsv))
- sv_setpvn(bufsv, "", 0);
- buffer = SvPV_force(bufsv, blen);
- length = SvIVx(*++MARK);
- if (length < 0)
- DIE(aTHX_ "Negative length");
- SETERRNO(0,0);
- if (MARK < SP)
- offset = SvIVx(*++MARK);
- else
- offset = 0;
- io = GvIO(gv);
- if (!io || !IoIFP(io))
- goto say_undef;
-#ifdef HAS_SOCKET
- if (PL_op->op_type == OP_RECV) {
- char namebuf[MAXPATHLEN];
-#if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(MPE)
- bufsize = sizeof (struct sockaddr_in);
-#else
- bufsize = sizeof namebuf;
-#endif
-#ifdef OS2 /* At least Warp3+IAK: only the first byte of bufsize set */
- if (bufsize >= 256)
- bufsize = 255;
-#endif
- buffer = SvGROW(bufsv, length+1);
- /* 'offset' means 'flags' here */
- length = PerlSock_recvfrom(PerlIO_fileno(IoIFP(io)), buffer, length, offset,
- (struct sockaddr *)namebuf, &bufsize);
- if (length < 0)
- RETPUSHUNDEF;
-#ifdef EPOC
- /* Bogus return without padding */
- bufsize = sizeof (struct sockaddr_in);
-#endif
- SvCUR_set(bufsv, length);
- *SvEND(bufsv) = '\0';
- (void)SvPOK_only(bufsv);
- SvSETMAGIC(bufsv);
- /* This should not be marked tainted if the fp is marked clean */
- if (!(IoFLAGS(io) & IOf_UNTAINT))
- SvTAINTED_on(bufsv);
- SP = ORIGMARK;
- sv_setpvn(TARG, namebuf, bufsize);
- PUSHs(TARG);
- RETURN;
- }
-#else
- if (PL_op->op_type == OP_RECV)
- DIE(aTHX_ PL_no_sock_func, "recv");
-#endif
- if (offset < 0) {
- if (-offset > blen)
- DIE(aTHX_ "Offset outside string");
- offset += blen;
- }
- bufsize = SvCUR(bufsv);
- buffer = SvGROW(bufsv, length+offset+1);
- if (offset > bufsize) { /* Zero any newly allocated space */
- Zero(buffer+bufsize, offset-bufsize, char);
- }
- if (PL_op->op_type == OP_SYSREAD) {
-#ifdef PERL_SOCK_SYSREAD_IS_RECV
- if (IoTYPE(io) == IoTYPE_SOCKET) {
- length = PerlSock_recv(PerlIO_fileno(IoIFP(io)),
- buffer+offset, length, 0);
- }
- else
-#endif
- {
- length = PerlLIO_read(PerlIO_fileno(IoIFP(io)),
- buffer+offset, length);
- }
- }
- else
-#ifdef HAS_SOCKET__bad_code_maybe
- if (IoTYPE(io) == IoTYPE_SOCKET) {
- char namebuf[MAXPATHLEN];
-#if defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)
- bufsize = sizeof (struct sockaddr_in);
-#else
- bufsize = sizeof namebuf;
-#endif
- length = PerlSock_recvfrom(PerlIO_fileno(IoIFP(io)), buffer+offset, length, 0,
- (struct sockaddr *)namebuf, &bufsize);
- }
- else
-#endif
- {
- length = PerlIO_read(IoIFP(io), buffer+offset, length);
- /* fread() returns 0 on both error and EOF */
- if (length == 0 && PerlIO_error(IoIFP(io)))
- length = -1;
- }
- if (length < 0) {
- if ((IoTYPE(io) == IoTYPE_WRONLY || IoIFP(io) == PerlIO_stdout()
- || IoIFP(io) == PerlIO_stderr()) && ckWARN(WARN_IO))
- {
- /* integrate with report_evil_fh()? */
- char *name = NULL;
- if (isGV(gv)) {
- SV* sv = sv_newmortal();
- gv_efullname4(sv, gv, Nullch, FALSE);
- name = SvPV_nolen(sv);
- }
- if (name && *name)
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle %s opened only for output", name);
- else
- Perl_warner(aTHX_ WARN_IO,
- "Filehandle opened only for output");
- }
- goto say_undef;
- }
- SvCUR_set(bufsv, length+offset);
- *SvEND(bufsv) = '\0';
- (void)SvPOK_only(bufsv);
- SvSETMAGIC(bufsv);
- /* This should not be marked tainted if the fp is marked clean */
- if (!(IoFLAGS(io) & IOf_UNTAINT))
- SvTAINTED_on(bufsv);
- SP = ORIGMARK;
- PUSHi(length);
- RETURN;
-
- say_undef:
- SP = ORIGMARK;
- RETPUSHUNDEF;
-}
-
-PP(pp_syswrite)
-{
- dSP;
- int items = (SP - PL_stack_base) - TOPMARK;
- if (items == 2) {
- SV *sv;
- EXTEND(SP, 1);
- sv = sv_2mortal(newSViv(sv_len(*SP)));
- PUSHs(sv);
- PUTBACK;
- }
- return pp_send();
-}
-
-PP(pp_send)
-{
- dSP; dMARK; dORIGMARK; dTARGET;
- GV *gv;
- IO *io;
- SV *bufsv;
- char *buffer;
- Size_t length;
- SSize_t retval;
- IV offset;
- STRLEN blen;
- MAGIC *mg;
-
- gv = (GV*)*++MARK;
- if (PL_op->op_type == OP_SYSWRITE && (mg = SvTIED_mg((SV*)gv, 'q'))) {
- SV *sv;
-
- PUSHMARK(MARK-1);
- *MARK = SvTIED_obj((SV*)gv, mg);
- ENTER;
- call_method("WRITE", G_SCALAR);
- LEAVE;
- SPAGAIN;
- sv = POPs;
- SP = ORIGMARK;
- PUSHs(sv);
- RETURN;
- }
- if (!gv)
- goto say_undef;
- bufsv = *++MARK;
- buffer = SvPV(bufsv, blen);
-#if Size_t_size > IVSIZE
- length = (Size_t)SvNVx(*++MARK);
-#else
- length = (Size_t)SvIVx(*++MARK);
-#endif
- if ((SSize_t)length < 0)
- DIE(aTHX_ "Negative length");
- SETERRNO(0,0);
- io = GvIO(gv);
- if (!io || !IoIFP(io)) {
- retval = -1;
- if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- }
- else if (PL_op->op_type == OP_SYSWRITE) {
- if (MARK < SP) {
- offset = SvIVx(*++MARK);
- if (offset < 0) {
- if (-offset > blen)
- DIE(aTHX_ "Offset outside string");
- offset += blen;
- } else if (offset >= blen && blen > 0)
- DIE(aTHX_ "Offset outside string");
- } else
- offset = 0;
- if (length > blen - offset)
- length = blen - offset;
-#ifdef PERL_SOCK_SYSWRITE_IS_SEND
- if (IoTYPE(io) == IoTYPE_SOCKET) {
- retval = PerlSock_send(PerlIO_fileno(IoIFP(io)),
- buffer+offset, length, 0);
- }
- else
-#endif
- {
- /* See the note at doio.c:do_print about filesize limits. --jhi */
- retval = PerlLIO_write(PerlIO_fileno(IoIFP(io)),
- buffer+offset, length);
- }
- }
-#ifdef HAS_SOCKET
- else if (SP > MARK) {
- char *sockbuf;
- STRLEN mlen;
- sockbuf = SvPVx(*++MARK, mlen);
- retval = PerlSock_sendto(PerlIO_fileno(IoIFP(io)), buffer, blen,
- length, (struct sockaddr *)sockbuf, mlen);
- }
- else
- retval = PerlSock_send(PerlIO_fileno(IoIFP(io)), buffer, blen, length);
-
-#else
- else
- DIE(aTHX_ PL_no_sock_func, "send");
-#endif
- if (retval < 0)
- goto say_undef;
- SP = ORIGMARK;
-#if Size_t_size > IVSIZE
- PUSHn(retval);
-#else
- PUSHi(retval);
-#endif
- RETURN;
-
- say_undef:
- SP = ORIGMARK;
- RETPUSHUNDEF;
-}
-
-PP(pp_recv)
-{
- return pp_sysread();
-}
-
-PP(pp_eof)
-{
- dSP;
- GV *gv;
- MAGIC *mg;
-
- if (MAXARG == 0) {
- if (PL_op->op_flags & OPf_SPECIAL) { /* eof() */
- IO *io;
- gv = PL_last_in_gv = PL_argvgv;
- io = GvIO(gv);
- if (io && !IoIFP(io)) {
- if ((IoFLAGS(io) & IOf_START) && av_len(GvAVn(gv)) < 0) {
- IoLINES(io) = 0;
- IoFLAGS(io) &= ~IOf_START;
- do_open(gv, "-", 1, FALSE, O_RDONLY, 0, Nullfp);
- sv_setpvn(GvSV(gv), "-", 1);
- SvSETMAGIC(GvSV(gv));
- }
- else if (!nextargv(gv))
- RETPUSHYES;
- }
- }
- else
- gv = PL_last_in_gv; /* eof */
- }
- else
- gv = PL_last_in_gv = (GV*)POPs; /* eof(FH) */
-
- if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- PUTBACK;
- ENTER;
- call_method("EOF", G_SCALAR);
- LEAVE;
- SPAGAIN;
- RETURN;
- }
-
- PUSHs(boolSV(!gv || do_eof(gv)));
- RETURN;
-}
-
-PP(pp_tell)
-{
- dSP; dTARGET;
- GV *gv;
- MAGIC *mg;
-
- if (MAXARG == 0)
- gv = PL_last_in_gv;
- else
- gv = PL_last_in_gv = (GV*)POPs;
-
- if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- PUTBACK;
- ENTER;
- call_method("TELL", G_SCALAR);
- LEAVE;
- SPAGAIN;
- RETURN;
- }
-
-#if LSEEKSIZE > IVSIZE
- PUSHn( do_tell(gv) );
-#else
- PUSHi( do_tell(gv) );
-#endif
- RETURN;
-}
-
-PP(pp_seek)
-{
- return pp_sysseek();
-}
-
-PP(pp_sysseek)
-{
- dSP;
- GV *gv;
- int whence = POPi;
-#if LSEEKSIZE > IVSIZE
- Off_t offset = (Off_t)SvNVx(POPs);
-#else
- Off_t offset = (Off_t)SvIVx(POPs);
-#endif
- MAGIC *mg;
-
- gv = PL_last_in_gv = (GV*)POPs;
-
- if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
-#if LSEEKSIZE > IVSIZE
- XPUSHs(sv_2mortal(newSVnv((NV) offset)));
-#else
- XPUSHs(sv_2mortal(newSViv(offset)));
-#endif
- XPUSHs(sv_2mortal(newSViv(whence)));
- PUTBACK;
- ENTER;
- call_method("SEEK", G_SCALAR);
- LEAVE;
- SPAGAIN;
- RETURN;
- }
-
- if (PL_op->op_type == OP_SEEK)
- PUSHs(boolSV(do_seek(gv, offset, whence)));
- else {
- Off_t sought = do_sysseek(gv, offset, whence);
- if (sought < 0)
- PUSHs(&PL_sv_undef);
- else {
- SV* sv = sought ?
-#if LSEEKSIZE > IVSIZE
- newSVnv((NV)sought)
-#else
- newSViv(sought)
-#endif
- : newSVpvn(zero_but_true, ZBTLEN);
- PUSHs(sv_2mortal(sv));
- }
- }
- RETURN;
-}
-
-PP(pp_truncate)
-{
- dSP;
- /* There seems to be no consensus on the length type of truncate()
- * and ftruncate(), both off_t and size_t have supporters. In
- * general one would think that when using large files, off_t is
- * at least as wide as size_t, so using an off_t should be okay. */
- /* XXX Configure probe for the length type of *truncate() needed XXX */
- Off_t len;
- int result = 1;
- GV *tmpgv;
- STRLEN n_a;
-
-#if Size_t_size > IVSIZE
- len = (Off_t)POPn;
-#else
- len = (Off_t)POPi;
-#endif
- /* Checking for length < 0 is problematic as the type might or
- * might not be signed: if it is not, clever compilers will moan. */
- /* XXX Configure probe for the signedness of the length type of *truncate() needed? XXX */
- SETERRNO(0,0);
-#if defined(HAS_TRUNCATE) || defined(HAS_CHSIZE) || defined(F_FREESP)
- if (PL_op->op_flags & OPf_SPECIAL) {
- tmpgv = gv_fetchpv(POPpx, FALSE, SVt_PVIO);
- do_ftruncate:
- TAINT_PROPER("truncate");
- if (!GvIO(tmpgv) || !IoIFP(GvIOp(tmpgv)))
- result = 0;
- else {
- PerlIO_flush(IoIFP(GvIOp(tmpgv)));
-#ifdef HAS_TRUNCATE
- if (ftruncate(PerlIO_fileno(IoIFP(GvIOn(tmpgv))), len) < 0)
-#else
- if (my_chsize(PerlIO_fileno(IoIFP(GvIOn(tmpgv))), len) < 0)
-#endif
- result = 0;
- }
- }
- else {
- SV *sv = POPs;
- char *name;
- STRLEN n_a;
-
- if (SvTYPE(sv) == SVt_PVGV) {
- tmpgv = (GV*)sv; /* *main::FRED for example */
- goto do_ftruncate;
- }
- else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVGV) {
- tmpgv = (GV*) SvRV(sv); /* \*main::FRED for example */
- goto do_ftruncate;
- }
-
- name = SvPV(sv, n_a);
- TAINT_PROPER("truncate");
-#ifdef HAS_TRUNCATE
- if (truncate(name, len) < 0)
- result = 0;
-#else
- {
- int tmpfd;
- if ((tmpfd = PerlLIO_open(name, O_RDWR)) < 0)
- result = 0;
- else {
- if (my_chsize(tmpfd, len) < 0)
- result = 0;
- PerlLIO_close(tmpfd);
- }
- }
-#endif
- }
-
- if (result)
- RETPUSHYES;
- if (!errno)
- SETERRNO(EBADF,RMS$_IFI);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ "truncate not implemented");
-#endif
-}
-
-PP(pp_fcntl)
-{
- return pp_ioctl();
-}
-
-PP(pp_ioctl)
-{
- dSP; dTARGET;
- SV *argsv = POPs;
- unsigned int func = U_I(POPn);
- int optype = PL_op->op_type;
- char *s;
- IV retval;
- GV *gv = (GV*)POPs;
- IO *io = GvIOn(gv);
-
- if (!io || !argsv || !IoIFP(io)) {
- SETERRNO(EBADF,RMS$_IFI); /* well, sort of... */
- RETPUSHUNDEF;
- }
-
- if (SvPOK(argsv) || !SvNIOK(argsv)) {
- STRLEN len;
- STRLEN need;
- s = SvPV_force(argsv, len);
- need = IOCPARM_LEN(func);
- if (len < need) {
- s = Sv_Grow(argsv, need + 1);
- SvCUR_set(argsv, need);
- }
-
- s[SvCUR(argsv)] = 17; /* a little sanity check here */
- }
- else {
- retval = SvIV(argsv);
- s = INT2PTR(char*,retval); /* ouch */
- }
-
- TAINT_PROPER(optype == OP_IOCTL ? "ioctl" : "fcntl");
-
- if (optype == OP_IOCTL)
-#ifdef HAS_IOCTL
- retval = PerlLIO_ioctl(PerlIO_fileno(IoIFP(io)), func, s);
-#else
- DIE(aTHX_ "ioctl is not implemented");
-#endif
- else
-#ifdef HAS_FCNTL
-#if defined(OS2) && defined(__EMX__)
- retval = fcntl(PerlIO_fileno(IoIFP(io)), func, (int)s);
-#else
- retval = fcntl(PerlIO_fileno(IoIFP(io)), func, s);
-#endif
-#else
- DIE(aTHX_ "fcntl is not implemented");
-#endif
-
- if (SvPOK(argsv)) {
- if (s[SvCUR(argsv)] != 17)
- DIE(aTHX_ "Possible memory corruption: %s overflowed 3rd argument",
- PL_op_name[optype]);
- s[SvCUR(argsv)] = 0; /* put our null back */
- SvSETMAGIC(argsv); /* Assume it has changed */
- }
-
- if (retval == -1)
- RETPUSHUNDEF;
- if (retval != 0) {
- PUSHi(retval);
- }
- else {
- PUSHp(zero_but_true, ZBTLEN);
- }
- RETURN;
-}
-
-PP(pp_flock)
-{
- dSP; dTARGET;
- I32 value;
- int argtype;
- GV *gv;
- IO *io = NULL;
- PerlIO *fp;
-
-#ifdef FLOCK
- argtype = POPi;
- if (MAXARG == 0)
- gv = PL_last_in_gv;
- else
- gv = (GV*)POPs;
- if (gv && (io = GvIO(gv)))
- fp = IoIFP(io);
- else {
- fp = Nullfp;
- io = NULL;
- }
- if (fp) {
- (void)PerlIO_flush(fp);
- value = (I32)(PerlLIO_flock(PerlIO_fileno(fp), argtype) >= 0);
- }
- else {
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- value = 0;
- SETERRNO(EBADF,RMS$_IFI);
- }
- PUSHi(value);
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "flock()");
-#endif
-}
-
-/* Sockets. */
-
-PP(pp_socket)
-{
- dSP;
-#ifdef HAS_SOCKET
- GV *gv;
- register IO *io;
- int protocol = POPi;
- int type = POPi;
- int domain = POPi;
- int fd;
-
- gv = (GV*)POPs;
-
- if (!gv) {
- SETERRNO(EBADF,LIB$_INVARG);
- RETPUSHUNDEF;
- }
-
- io = GvIOn(gv);
- if (IoIFP(io))
- do_close(gv, FALSE);
-
- TAINT_PROPER("socket");
- fd = PerlSock_socket(domain, type, protocol);
- if (fd < 0)
- RETPUSHUNDEF;
- IoIFP(io) = PerlIO_fdopen(fd, "r"); /* stdio gets confused about sockets */
- IoOFP(io) = PerlIO_fdopen(fd, "w");
- IoTYPE(io) = IoTYPE_SOCKET;
- if (!IoIFP(io) || !IoOFP(io)) {
- if (IoIFP(io)) PerlIO_close(IoIFP(io));
- if (IoOFP(io)) PerlIO_close(IoOFP(io));
- if (!IoIFP(io) && !IoOFP(io)) PerlLIO_close(fd);
- RETPUSHUNDEF;
- }
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- fcntl(fd, F_SETFD, fd > PL_maxsysfd); /* ensure close-on-exec */
-#endif
-
-#ifdef EPOC
- setbuf( IoIFP(io), NULL); /* EPOC gets confused about sockets */
-#endif
-
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "socket");
-#endif
-}
-
-PP(pp_sockpair)
-{
- dSP;
-#ifdef HAS_SOCKETPAIR
- GV *gv1;
- GV *gv2;
- register IO *io1;
- register IO *io2;
- int protocol = POPi;
- int type = POPi;
- int domain = POPi;
- int fd[2];
-
- gv2 = (GV*)POPs;
- gv1 = (GV*)POPs;
- if (!gv1 || !gv2)
- RETPUSHUNDEF;
-
- io1 = GvIOn(gv1);
- io2 = GvIOn(gv2);
- if (IoIFP(io1))
- do_close(gv1, FALSE);
- if (IoIFP(io2))
- do_close(gv2, FALSE);
-
- TAINT_PROPER("socketpair");
- if (PerlSock_socketpair(domain, type, protocol, fd) < 0)
- RETPUSHUNDEF;
- IoIFP(io1) = PerlIO_fdopen(fd[0], "r");
- IoOFP(io1) = PerlIO_fdopen(fd[0], "w");
- IoTYPE(io1) = IoTYPE_SOCKET;
- IoIFP(io2) = PerlIO_fdopen(fd[1], "r");
- IoOFP(io2) = PerlIO_fdopen(fd[1], "w");
- IoTYPE(io2) = IoTYPE_SOCKET;
- if (!IoIFP(io1) || !IoOFP(io1) || !IoIFP(io2) || !IoOFP(io2)) {
- if (IoIFP(io1)) PerlIO_close(IoIFP(io1));
- if (IoOFP(io1)) PerlIO_close(IoOFP(io1));
- if (!IoIFP(io1) && !IoOFP(io1)) PerlLIO_close(fd[0]);
- if (IoIFP(io2)) PerlIO_close(IoIFP(io2));
- if (IoOFP(io2)) PerlIO_close(IoOFP(io2));
- if (!IoIFP(io2) && !IoOFP(io2)) PerlLIO_close(fd[1]);
- RETPUSHUNDEF;
- }
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- fcntl(fd[0],F_SETFD,fd[0] > PL_maxsysfd); /* ensure close-on-exec */
- fcntl(fd[1],F_SETFD,fd[1] > PL_maxsysfd); /* ensure close-on-exec */
-#endif
-
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "socketpair");
-#endif
-}
-
-PP(pp_bind)
-{
- dSP;
-#ifdef HAS_SOCKET
-#ifdef MPE /* Requires PRIV mode to bind() to ports < 1024 */
- extern GETPRIVMODE();
- extern GETUSERMODE();
-#endif
- SV *addrsv = POPs;
- char *addr;
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
- STRLEN len;
- int bind_ok = 0;
-#ifdef MPE
- int mpeprivmode = 0;
-#endif
-
- if (!io || !IoIFP(io))
- goto nuts;
-
- addr = SvPV(addrsv, len);
- TAINT_PROPER("bind");
-#ifdef MPE /* Deal with MPE bind() peculiarities */
- if (((struct sockaddr *)addr)->sa_family == AF_INET) {
- /* The address *MUST* stupidly be zero. */
- ((struct sockaddr_in *)addr)->sin_addr.s_addr = INADDR_ANY;
- /* PRIV mode is required to bind() to ports < 1024. */
- if (((struct sockaddr_in *)addr)->sin_port < 1024 &&
- ((struct sockaddr_in *)addr)->sin_port > 0) {
- GETPRIVMODE(); /* If this fails, we are aborted by MPE/iX. */
- mpeprivmode = 1;
- }
- }
-#endif /* MPE */
- if (PerlSock_bind(PerlIO_fileno(IoIFP(io)),
- (struct sockaddr *)addr, len) >= 0)
- bind_ok = 1;
-
-#ifdef MPE /* Switch back to USER mode */
- if (mpeprivmode)
- GETUSERMODE();
-#endif /* MPE */
-
- if (bind_ok)
- RETPUSHYES;
- else
- RETPUSHUNDEF;
-
-nuts:
- if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,SS$_IVCHAN);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_sock_func, "bind");
-#endif
-}
-
-PP(pp_connect)
-{
- dSP;
-#ifdef HAS_SOCKET
- SV *addrsv = POPs;
- char *addr;
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
- STRLEN len;
-
- if (!io || !IoIFP(io))
- goto nuts;
-
- addr = SvPV(addrsv, len);
- TAINT_PROPER("connect");
- if (PerlSock_connect(PerlIO_fileno(IoIFP(io)), (struct sockaddr *)addr, len) >= 0)
- RETPUSHYES;
- else
- RETPUSHUNDEF;
-
-nuts:
- if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,SS$_IVCHAN);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_sock_func, "connect");
-#endif
-}
-
-PP(pp_listen)
-{
- dSP;
-#ifdef HAS_SOCKET
- int backlog = POPi;
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
-
- if (!io || !IoIFP(io))
- goto nuts;
-
- if (PerlSock_listen(PerlIO_fileno(IoIFP(io)), backlog) >= 0)
- RETPUSHYES;
- else
- RETPUSHUNDEF;
-
-nuts:
- if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,SS$_IVCHAN);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_sock_func, "listen");
-#endif
-}
-
-PP(pp_accept)
-{
- dSP; dTARGET;
-#ifdef HAS_SOCKET
- GV *ngv;
- GV *ggv;
- register IO *nstio;
- register IO *gstio;
- struct sockaddr saddr; /* use a struct to avoid alignment problems */
- Sock_size_t len = sizeof saddr;
- int fd;
-
- ggv = (GV*)POPs;
- ngv = (GV*)POPs;
-
- if (!ngv)
- goto badexit;
- if (!ggv)
- goto nuts;
-
- gstio = GvIO(ggv);
- if (!gstio || !IoIFP(gstio))
- goto nuts;
-
- nstio = GvIOn(ngv);
- if (IoIFP(nstio))
- do_close(ngv, FALSE);
-
- fd = PerlSock_accept(PerlIO_fileno(IoIFP(gstio)), (struct sockaddr *)&saddr, &len);
- if (fd < 0)
- goto badexit;
- IoIFP(nstio) = PerlIO_fdopen(fd, "r");
- IoOFP(nstio) = PerlIO_fdopen(fd, "w");
- IoTYPE(nstio) = IoTYPE_SOCKET;
- if (!IoIFP(nstio) || !IoOFP(nstio)) {
- if (IoIFP(nstio)) PerlIO_close(IoIFP(nstio));
- if (IoOFP(nstio)) PerlIO_close(IoOFP(nstio));
- if (!IoIFP(nstio) && !IoOFP(nstio)) PerlLIO_close(fd);
- goto badexit;
- }
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- fcntl(fd, F_SETFD, fd > PL_maxsysfd); /* ensure close-on-exec */
-#endif
-
-#ifdef EPOC
- len = sizeof saddr; /* EPOC somehow truncates info */
- setbuf( IoIFP(nstio), NULL); /* EPOC gets confused about sockets */
-#endif
-
- PUSHp((char *)&saddr, len);
- RETURN;
-
-nuts:
- if (ckWARN(WARN_CLOSED))
- report_evil_fh(ggv, ggv ? GvIO(ggv) : 0, PL_op->op_type);
- SETERRNO(EBADF,SS$_IVCHAN);
-
-badexit:
- RETPUSHUNDEF;
-
-#else
- DIE(aTHX_ PL_no_sock_func, "accept");
-#endif
-}
-
-PP(pp_shutdown)
-{
- dSP; dTARGET;
-#ifdef HAS_SOCKET
- int how = POPi;
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
-
- if (!io || !IoIFP(io))
- goto nuts;
-
- PUSHi( PerlSock_shutdown(PerlIO_fileno(IoIFP(io)), how) >= 0 );
- RETURN;
-
-nuts:
- if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, PL_op->op_type);
- SETERRNO(EBADF,SS$_IVCHAN);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_sock_func, "shutdown");
-#endif
-}
-
-PP(pp_gsockopt)
-{
-#ifdef HAS_SOCKET
- return pp_ssockopt();
-#else
- DIE(aTHX_ PL_no_sock_func, "getsockopt");
-#endif
-}
-
-PP(pp_ssockopt)
-{
- dSP;
-#ifdef HAS_SOCKET
- int optype = PL_op->op_type;
- SV *sv;
- int fd;
- unsigned int optname;
- unsigned int lvl;
- GV *gv;
- register IO *io;
- Sock_size_t len;
-
- if (optype == OP_GSOCKOPT)
- sv = sv_2mortal(NEWSV(22, 257));
- else
- sv = POPs;
- optname = (unsigned int) POPi;
- lvl = (unsigned int) POPi;
-
- gv = (GV*)POPs;
- io = GvIOn(gv);
- if (!io || !IoIFP(io))
- goto nuts;
-
- fd = PerlIO_fileno(IoIFP(io));
- switch (optype) {
- case OP_GSOCKOPT:
- SvGROW(sv, 257);
- (void)SvPOK_only(sv);
- SvCUR_set(sv,256);
- *SvEND(sv) ='\0';
- len = SvCUR(sv);
- if (PerlSock_getsockopt(fd, lvl, optname, SvPVX(sv), &len) < 0)
- goto nuts2;
- SvCUR_set(sv, len);
- *SvEND(sv) ='\0';
- PUSHs(sv);
- break;
- case OP_SSOCKOPT: {
- char *buf;
- int aint;
- if (SvPOKp(sv)) {
- STRLEN l;
- buf = SvPV(sv, l);
- len = l;
- }
- else {
- aint = (int)SvIV(sv);
- buf = (char*)&aint;
- len = sizeof(int);
- }
- if (PerlSock_setsockopt(fd, lvl, optname, buf, len) < 0)
- goto nuts2;
- PUSHs(&PL_sv_yes);
- }
- break;
- }
- RETURN;
-
-nuts:
- if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, optype);
- SETERRNO(EBADF,SS$_IVCHAN);
-nuts2:
- RETPUSHUNDEF;
-
-#else
- DIE(aTHX_ PL_no_sock_func, "setsockopt");
-#endif
-}
-
-PP(pp_getsockname)
-{
-#ifdef HAS_SOCKET
- return pp_getpeername();
-#else
- DIE(aTHX_ PL_no_sock_func, "getsockname");
-#endif
-}
-
-PP(pp_getpeername)
-{
- dSP;
-#ifdef HAS_SOCKET
- int optype = PL_op->op_type;
- SV *sv;
- int fd;
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
- Sock_size_t len;
-
- if (!io || !IoIFP(io))
- goto nuts;
-
- sv = sv_2mortal(NEWSV(22, 257));
- (void)SvPOK_only(sv);
- len = 256;
- SvCUR_set(sv, len);
- *SvEND(sv) ='\0';
- fd = PerlIO_fileno(IoIFP(io));
- switch (optype) {
- case OP_GETSOCKNAME:
- if (PerlSock_getsockname(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
- goto nuts2;
- break;
- case OP_GETPEERNAME:
- if (PerlSock_getpeername(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
- goto nuts2;
-#if defined(VMS_DO_SOCKETS) && defined (DECCRTL_SOCKETS)
- {
- static const char nowhere[] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
- /* If the call succeeded, make sure we don't have a zeroed port/addr */
- if (((struct sockaddr *)SvPVX(sv))->sa_family == AF_INET &&
- !memcmp((char *)SvPVX(sv) + sizeof(u_short), nowhere,
- sizeof(u_short) + sizeof(struct in_addr))) {
- goto nuts2;
- }
- }
-#endif
- break;
- }
-#ifdef BOGUS_GETNAME_RETURN
- /* Interactive Unix, getpeername() and getsockname()
- does not return valid namelen */
- if (len == BOGUS_GETNAME_RETURN)
- len = sizeof(struct sockaddr);
-#endif
- SvCUR_set(sv, len);
- *SvEND(sv) ='\0';
- PUSHs(sv);
- RETURN;
-
-nuts:
- if (ckWARN(WARN_CLOSED))
- report_evil_fh(gv, io, optype);
- SETERRNO(EBADF,SS$_IVCHAN);
-nuts2:
- RETPUSHUNDEF;
-
-#else
- DIE(aTHX_ PL_no_sock_func, "getpeername");
-#endif
-}
-
-/* Stat calls. */
-
-PP(pp_lstat)
-{
- return pp_stat();
-}
-
-PP(pp_stat)
-{
- dSP;
- GV *gv;
- I32 gimme;
- I32 max = 13;
- STRLEN n_a;
-
- if (PL_op->op_flags & OPf_REF) {
- gv = cGVOP_gv;
- do_fstat:
- if (gv != PL_defgv) {
- PL_laststype = OP_STAT;
- PL_statgv = gv;
- sv_setpv(PL_statname, "");
- PL_laststatval = (GvIO(gv) && IoIFP(GvIOp(gv))
- ? PerlLIO_fstat(PerlIO_fileno(IoIFP(GvIOn(gv))), &PL_statcache) : -1);
- }
- if (PL_laststatval < 0) {
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
- report_evil_fh(gv, GvIO(gv), PL_op->op_type);
- max = 0;
- }
- }
- else {
- SV* sv = POPs;
- if (SvTYPE(sv) == SVt_PVGV) {
- gv = (GV*)sv;
- goto do_fstat;
- }
- else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVGV) {
- gv = (GV*)SvRV(sv);
- goto do_fstat;
- }
- sv_setpv(PL_statname, SvPV(sv,n_a));
- PL_statgv = Nullgv;
-#ifdef HAS_LSTAT
- PL_laststype = PL_op->op_type;
- if (PL_op->op_type == OP_LSTAT)
- PL_laststatval = PerlLIO_lstat(SvPV(PL_statname, n_a), &PL_statcache);
- else
-#endif
- PL_laststatval = PerlLIO_stat(SvPV(PL_statname, n_a), &PL_statcache);
- if (PL_laststatval < 0) {
- if (ckWARN(WARN_NEWLINE) && strchr(SvPV(PL_statname, n_a), '\n'))
- Perl_warner(aTHX_ WARN_NEWLINE, PL_warn_nl, "stat");
- max = 0;
- }
- }
-
- gimme = GIMME_V;
- if (gimme != G_ARRAY) {
- if (gimme != G_VOID)
- XPUSHs(boolSV(max));
- RETURN;
- }
- if (max) {
- EXTEND(SP, max);
- EXTEND_MORTAL(max);
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_dev)));
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_ino)));
- PUSHs(sv_2mortal(newSVuv(PL_statcache.st_mode)));
- PUSHs(sv_2mortal(newSVuv(PL_statcache.st_nlink)));
-#if Uid_t_size > IVSIZE
- PUSHs(sv_2mortal(newSVnv(PL_statcache.st_uid)));
-#else
-# if Uid_t_sign <= 0
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_uid)));
-# else
- PUSHs(sv_2mortal(newSVuv(PL_statcache.st_uid)));
-# endif
-#endif
-#if Gid_t_size > IVSIZE
- PUSHs(sv_2mortal(newSVnv(PL_statcache.st_gid)));
-#else
-# if Gid_t_sign <= 0
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_gid)));
-# else
- PUSHs(sv_2mortal(newSVuv(PL_statcache.st_gid)));
-# endif
-#endif
-#ifdef USE_STAT_RDEV
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_rdev)));
-#else
- PUSHs(sv_2mortal(newSVpvn("", 0)));
-#endif
-#if Off_t_size > IVSIZE
- PUSHs(sv_2mortal(newSVnv(PL_statcache.st_size)));
-#else
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_size)));
-#endif
-#ifdef BIG_TIME
- PUSHs(sv_2mortal(newSVnv(PL_statcache.st_atime)));
- PUSHs(sv_2mortal(newSVnv(PL_statcache.st_mtime)));
- PUSHs(sv_2mortal(newSVnv(PL_statcache.st_ctime)));
-#else
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_atime)));
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_mtime)));
- PUSHs(sv_2mortal(newSViv(PL_statcache.st_ctime)));
-#endif
-#ifdef USE_STAT_BLOCKS
- PUSHs(sv_2mortal(newSVuv(PL_statcache.st_blksize)));
- PUSHs(sv_2mortal(newSVuv(PL_statcache.st_blocks)));
-#else
- PUSHs(sv_2mortal(newSVpvn("", 0)));
- PUSHs(sv_2mortal(newSVpvn("", 0)));
-#endif
- }
- RETURN;
-}
-
-PP(pp_ftrread)
-{
- I32 result;
- dSP;
-#if defined(HAS_ACCESS) && defined(R_OK)
- STRLEN n_a;
- if ((PL_hints & HINT_FILETEST_ACCESS) && SvPOK(TOPs)) {
- result = access(TOPpx, R_OK);
- if (result == 0)
- RETPUSHYES;
- if (result < 0)
- RETPUSHUNDEF;
- RETPUSHNO;
- }
- else
- result = my_stat();
-#else
- result = my_stat();
-#endif
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (cando(S_IRUSR, 0, &PL_statcache))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftrwrite)
-{
- I32 result;
- dSP;
-#if defined(HAS_ACCESS) && defined(W_OK)
- STRLEN n_a;
- if ((PL_hints & HINT_FILETEST_ACCESS) && SvPOK(TOPs)) {
- result = access(TOPpx, W_OK);
- if (result == 0)
- RETPUSHYES;
- if (result < 0)
- RETPUSHUNDEF;
- RETPUSHNO;
- }
- else
- result = my_stat();
-#else
- result = my_stat();
-#endif
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (cando(S_IWUSR, 0, &PL_statcache))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftrexec)
-{
- I32 result;
- dSP;
-#if defined(HAS_ACCESS) && defined(X_OK)
- STRLEN n_a;
- if ((PL_hints & HINT_FILETEST_ACCESS) && SvPOK(TOPs)) {
- result = access(TOPpx, X_OK);
- if (result == 0)
- RETPUSHYES;
- if (result < 0)
- RETPUSHUNDEF;
- RETPUSHNO;
- }
- else
- result = my_stat();
-#else
- result = my_stat();
-#endif
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (cando(S_IXUSR, 0, &PL_statcache))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_fteread)
-{
- I32 result;
- dSP;
-#ifdef PERL_EFF_ACCESS_R_OK
- STRLEN n_a;
- if ((PL_hints & HINT_FILETEST_ACCESS) && SvPOK(TOPs)) {
- result = PERL_EFF_ACCESS_R_OK(TOPpx);
- if (result == 0)
- RETPUSHYES;
- if (result < 0)
- RETPUSHUNDEF;
- RETPUSHNO;
- }
- else
- result = my_stat();
-#else
- result = my_stat();
-#endif
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (cando(S_IRUSR, 1, &PL_statcache))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftewrite)
-{
- I32 result;
- dSP;
-#ifdef PERL_EFF_ACCESS_W_OK
- STRLEN n_a;
- if ((PL_hints & HINT_FILETEST_ACCESS) && SvPOK(TOPs)) {
- result = PERL_EFF_ACCESS_W_OK(TOPpx);
- if (result == 0)
- RETPUSHYES;
- if (result < 0)
- RETPUSHUNDEF;
- RETPUSHNO;
- }
- else
- result = my_stat();
-#else
- result = my_stat();
-#endif
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (cando(S_IWUSR, 1, &PL_statcache))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_fteexec)
-{
- I32 result;
- dSP;
-#ifdef PERL_EFF_ACCESS_X_OK
- STRLEN n_a;
- if ((PL_hints & HINT_FILETEST_ACCESS) && SvPOK(TOPs)) {
- result = PERL_EFF_ACCESS_X_OK(TOPpx);
- if (result == 0)
- RETPUSHYES;
- if (result < 0)
- RETPUSHUNDEF;
- RETPUSHNO;
- }
- else
- result = my_stat();
-#else
- result = my_stat();
-#endif
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (cando(S_IXUSR, 1, &PL_statcache))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftis)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- RETPUSHYES;
-}
-
-PP(pp_fteowned)
-{
- return pp_ftrowned();
-}
-
-PP(pp_ftrowned)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (PL_statcache.st_uid == (PL_op->op_type == OP_FTEOWNED ?
- PL_euid : PL_uid) )
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftzero)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (PL_statcache.st_size == 0)
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftsize)
-{
- I32 result = my_stat();
- dSP; dTARGET;
- if (result < 0)
- RETPUSHUNDEF;
-#if Off_t_size > IVSIZE
- PUSHn(PL_statcache.st_size);
-#else
- PUSHi(PL_statcache.st_size);
-#endif
- RETURN;
-}
-
-PP(pp_ftmtime)
-{
- I32 result = my_stat();
- dSP; dTARGET;
- if (result < 0)
- RETPUSHUNDEF;
- PUSHn( (PL_basetime - PL_statcache.st_mtime) / 86400.0 );
- RETURN;
-}
-
-PP(pp_ftatime)
-{
- I32 result = my_stat();
- dSP; dTARGET;
- if (result < 0)
- RETPUSHUNDEF;
- PUSHn( (PL_basetime - PL_statcache.st_atime) / 86400.0 );
- RETURN;
-}
-
-PP(pp_ftctime)
-{
- I32 result = my_stat();
- dSP; dTARGET;
- if (result < 0)
- RETPUSHUNDEF;
- PUSHn( (PL_basetime - PL_statcache.st_ctime) / 86400.0 );
- RETURN;
-}
-
-PP(pp_ftsock)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (S_ISSOCK(PL_statcache.st_mode))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftchr)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (S_ISCHR(PL_statcache.st_mode))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftblk)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (S_ISBLK(PL_statcache.st_mode))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftfile)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (S_ISREG(PL_statcache.st_mode))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftdir)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (S_ISDIR(PL_statcache.st_mode))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftpipe)
-{
- I32 result = my_stat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (S_ISFIFO(PL_statcache.st_mode))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftlink)
-{
- I32 result = my_lstat();
- dSP;
- if (result < 0)
- RETPUSHUNDEF;
- if (S_ISLNK(PL_statcache.st_mode))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-PP(pp_ftsuid)
-{
- dSP;
-#ifdef S_ISUID
- I32 result = my_stat();
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (PL_statcache.st_mode & S_ISUID)
- RETPUSHYES;
-#endif
- RETPUSHNO;
-}
-
-PP(pp_ftsgid)
-{
- dSP;
-#ifdef S_ISGID
- I32 result = my_stat();
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (PL_statcache.st_mode & S_ISGID)
- RETPUSHYES;
-#endif
- RETPUSHNO;
-}
-
-PP(pp_ftsvtx)
-{
- dSP;
-#ifdef S_ISVTX
- I32 result = my_stat();
- SPAGAIN;
- if (result < 0)
- RETPUSHUNDEF;
- if (PL_statcache.st_mode & S_ISVTX)
- RETPUSHYES;
-#endif
- RETPUSHNO;
-}
-
-PP(pp_fttty)
-{
- dSP;
- int fd;
- GV *gv;
- char *tmps = Nullch;
- STRLEN n_a;
-
- if (PL_op->op_flags & OPf_REF)
- gv = cGVOP_gv;
- else if (isGV(TOPs))
- gv = (GV*)POPs;
- else if (SvROK(TOPs) && isGV(SvRV(TOPs)))
- gv = (GV*)SvRV(POPs);
- else
- gv = gv_fetchpv(tmps = POPpx, FALSE, SVt_PVIO);
-
- if (GvIO(gv) && IoIFP(GvIOp(gv)))
- fd = PerlIO_fileno(IoIFP(GvIOp(gv)));
- else if (tmps && isDIGIT(*tmps))
- fd = atoi(tmps);
- else
- RETPUSHUNDEF;
- if (PerlLIO_isatty(fd))
- RETPUSHYES;
- RETPUSHNO;
-}
-
-#if defined(atarist) /* this will work with atariST. Configure will
- make guesses for other systems. */
-# define FILE_base(f) ((f)->_base)
-# define FILE_ptr(f) ((f)->_ptr)
-# define FILE_cnt(f) ((f)->_cnt)
-# define FILE_bufsiz(f) ((f)->_cnt + ((f)->_ptr - (f)->_base))
-#endif
-
-PP(pp_fttext)
-{
- dSP;
- I32 i;
- I32 len;
- I32 odd = 0;
- STDCHAR tbuf[512];
- register STDCHAR *s;
- register IO *io;
- register SV *sv;
- GV *gv;
- STRLEN n_a;
- PerlIO *fp;
-
- if (PL_op->op_flags & OPf_REF)
- gv = cGVOP_gv;
- else if (isGV(TOPs))
- gv = (GV*)POPs;
- else if (SvROK(TOPs) && isGV(SvRV(TOPs)))
- gv = (GV*)SvRV(POPs);
- else
- gv = Nullgv;
-
- if (gv) {
- EXTEND(SP, 1);
- if (gv == PL_defgv) {
- if (PL_statgv)
- io = GvIO(PL_statgv);
- else {
- sv = PL_statname;
- goto really_filename;
- }
- }
- else {
- PL_statgv = gv;
- PL_laststatval = -1;
- sv_setpv(PL_statname, "");
- io = GvIO(PL_statgv);
- }
- if (io && IoIFP(io)) {
- if (! PerlIO_has_base(IoIFP(io)))
- DIE(aTHX_ "-T and -B not implemented on filehandles");
- PL_laststatval = PerlLIO_fstat(PerlIO_fileno(IoIFP(io)), &PL_statcache);
- if (PL_laststatval < 0)
- RETPUSHUNDEF;
- if (S_ISDIR(PL_statcache.st_mode)) /* handle NFS glitch */
- if (PL_op->op_type == OP_FTTEXT)
- RETPUSHNO;
- else
- RETPUSHYES;
- if (PerlIO_get_cnt(IoIFP(io)) <= 0) {
- i = PerlIO_getc(IoIFP(io));
- if (i != EOF)
- (void)PerlIO_ungetc(IoIFP(io),i);
- }
- if (PerlIO_get_cnt(IoIFP(io)) <= 0) /* null file is anything */
- RETPUSHYES;
- len = PerlIO_get_bufsiz(IoIFP(io));
- s = (STDCHAR *) PerlIO_get_base(IoIFP(io));
- /* sfio can have large buffers - limit to 512 */
- if (len > 512)
- len = 512;
- }
- else {
- if (ckWARN2(WARN_UNOPENED,WARN_CLOSED)) {
- gv = cGVOP_gv;
- report_evil_fh(gv, GvIO(gv), PL_op->op_type);
- }
- SETERRNO(EBADF,RMS$_IFI);
- RETPUSHUNDEF;
- }
- }
- else {
- sv = POPs;
- really_filename:
- PL_statgv = Nullgv;
- PL_laststatval = -1;
- sv_setpv(PL_statname, SvPV(sv, n_a));
- if (!(fp = PerlIO_open(SvPVX(PL_statname), "r"))) {
- if (ckWARN(WARN_NEWLINE) && strchr(SvPV(sv, n_a), '\n'))
- Perl_warner(aTHX_ WARN_NEWLINE, PL_warn_nl, "open");
- RETPUSHUNDEF;
- }
- PL_laststatval = PerlLIO_fstat(PerlIO_fileno(fp), &PL_statcache);
- if (PL_laststatval < 0) {
- (void)PerlIO_close(fp);
- RETPUSHUNDEF;
- }
- do_binmode(fp, '<', O_BINARY);
- len = PerlIO_read(fp, tbuf, sizeof(tbuf));
- (void)PerlIO_close(fp);
- if (len <= 0) {
- if (S_ISDIR(PL_statcache.st_mode) && PL_op->op_type == OP_FTTEXT)
- RETPUSHNO; /* special case NFS directories */
- RETPUSHYES; /* null file is anything */
- }
- s = tbuf;
- }
-
- /* now scan s to look for textiness */
- /* XXX ASCII dependent code */
-
-#if defined(DOSISH) || defined(USEMYBINMODE)
- /* ignore trailing ^Z on short files */
- if (len && len < sizeof(tbuf) && tbuf[len-1] == 26)
- --len;
-#endif
-
- for (i = 0; i < len; i++, s++) {
- if (!*s) { /* null never allowed in text */
- odd += len;
- break;
- }
-#ifdef EBCDIC
- else if (!(isPRINT(*s) || isSPACE(*s)))
- odd++;
-#else
- else if (*s & 128) {
-#ifdef USE_LOCALE
- if ((PL_op->op_private & OPpLOCALE) && isALPHA_LC(*s))
- continue;
-#endif
- /* utf8 characters don't count as odd */
- if (UTF8_IS_START(*s)) {
- int ulen = UTF8SKIP(s);
- if (ulen < len - i) {
- int j;
- for (j = 1; j < ulen; j++) {
- if (!UTF8_IS_CONTINUATION(s[j]))
- goto not_utf8;
- }
- --ulen; /* loop does extra increment */
- s += ulen;
- i += ulen;
- continue;
- }
- }
- not_utf8:
- odd++;
- }
- else if (*s < 32 &&
- *s != '\n' && *s != '\r' && *s != '\b' &&
- *s != '\t' && *s != '\f' && *s != 27)
- odd++;
-#endif
- }
-
- if ((odd * 3 > len) == (PL_op->op_type == OP_FTTEXT)) /* allow 1/3 odd */
- RETPUSHNO;
- else
- RETPUSHYES;
-}
-
-PP(pp_ftbinary)
-{
- return pp_fttext();
-}
-
-/* File calls. */
-
-PP(pp_chdir)
-{
- dSP; dTARGET;
- char *tmps;
- SV **svp;
- STRLEN n_a;
-
- if (MAXARG < 1)
- tmps = Nullch;
- else
- tmps = POPpx;
- if (!tmps || !*tmps) {
- svp = hv_fetch(GvHVn(PL_envgv), "HOME", 4, FALSE);
- if (svp)
- tmps = SvPV(*svp, n_a);
- }
- if (!tmps || !*tmps) {
- svp = hv_fetch(GvHVn(PL_envgv), "LOGDIR", 6, FALSE);
- if (svp)
- tmps = SvPV(*svp, n_a);
- }
-#ifdef VMS
- if (!tmps || !*tmps) {
- svp = hv_fetch(GvHVn(PL_envgv), "SYS$LOGIN", 9, FALSE);
- if (svp)
- tmps = SvPV(*svp, n_a);
- }
-#endif
- TAINT_PROPER("chdir");
- PUSHi( PerlDir_chdir(tmps) >= 0 );
-#ifdef VMS
- /* Clear the DEFAULT element of ENV so we'll get the new value
- * in the future. */
- hv_delete(GvHVn(PL_envgv),"DEFAULT",7,G_DISCARD);
-#endif
- RETURN;
-}
-
-PP(pp_chown)
-{
- dSP; dMARK; dTARGET;
- I32 value;
-#ifdef HAS_CHOWN
- value = (I32)apply(PL_op->op_type, MARK, SP);
- SP = MARK;
- PUSHi(value);
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "Unsupported function chown");
-#endif
-}
-
-PP(pp_chroot)
-{
- dSP; dTARGET;
- char *tmps;
-#ifdef HAS_CHROOT
- STRLEN n_a;
- tmps = POPpx;
- TAINT_PROPER("chroot");
- PUSHi( chroot(tmps) >= 0 );
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "chroot");
-#endif
-}
-
-PP(pp_unlink)
-{
- dSP; dMARK; dTARGET;
- I32 value;
- value = (I32)apply(PL_op->op_type, MARK, SP);
- SP = MARK;
- PUSHi(value);
- RETURN;
-}
-
-PP(pp_chmod)
-{
- dSP; dMARK; dTARGET;
- I32 value;
- value = (I32)apply(PL_op->op_type, MARK, SP);
- SP = MARK;
- PUSHi(value);
- RETURN;
-}
-
-PP(pp_utime)
-{
- dSP; dMARK; dTARGET;
- I32 value;
- value = (I32)apply(PL_op->op_type, MARK, SP);
- SP = MARK;
- PUSHi(value);
- RETURN;
-}
-
-PP(pp_rename)
-{
- dSP; dTARGET;
- int anum;
- STRLEN n_a;
-
- char *tmps2 = POPpx;
- char *tmps = SvPV(TOPs, n_a);
- TAINT_PROPER("rename");
-#ifdef HAS_RENAME
- anum = PerlLIO_rename(tmps, tmps2);
-#else
- if (!(anum = PerlLIO_stat(tmps, &PL_statbuf))) {
- if (same_dirent(tmps2, tmps)) /* can always rename to same name */
- anum = 1;
- else {
- if (PL_euid || PerlLIO_stat(tmps2, &PL_statbuf) < 0 || !S_ISDIR(PL_statbuf.st_mode))
- (void)UNLINK(tmps2);
- if (!(anum = link(tmps, tmps2)))
- anum = UNLINK(tmps);
- }
- }
-#endif
- SETi( anum >= 0 );
- RETURN;
-}
-
-PP(pp_link)
-{
- dSP; dTARGET;
-#ifdef HAS_LINK
- STRLEN n_a;
- char *tmps2 = POPpx;
- char *tmps = SvPV(TOPs, n_a);
- TAINT_PROPER("link");
- SETi( PerlLIO_link(tmps, tmps2) >= 0 );
-#else
- DIE(aTHX_ PL_no_func, "Unsupported function link");
-#endif
- RETURN;
-}
-
-PP(pp_symlink)
-{
- dSP; dTARGET;
-#ifdef HAS_SYMLINK
- STRLEN n_a;
- char *tmps2 = POPpx;
- char *tmps = SvPV(TOPs, n_a);
- TAINT_PROPER("symlink");
- SETi( symlink(tmps, tmps2) >= 0 );
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "symlink");
-#endif
-}
-
-PP(pp_readlink)
-{
- dSP; dTARGET;
-#ifdef HAS_SYMLINK
- char *tmps;
- char buf[MAXPATHLEN];
- int len;
- STRLEN n_a;
-
-#ifndef INCOMPLETE_TAINTS
- TAINT;
-#endif
- tmps = POPpx;
- len = readlink(tmps, buf, sizeof buf);
- EXTEND(SP, 1);
- if (len < 0)
- RETPUSHUNDEF;
- PUSHp(buf, len);
- RETURN;
-#else
- EXTEND(SP, 1);
- RETSETUNDEF; /* just pretend it's a normal file */
-#endif
-}
-
-#if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-STATIC int
-S_dooneliner(pTHX_ char *cmd, char *filename)
-{
- char *save_filename = filename;
- char *cmdline;
- char *s;
- PerlIO *myfp;
- int anum = 1;
-
- New(666, cmdline, strlen(cmd) + (strlen(filename) * 2) + 10, char);
- strcpy(cmdline, cmd);
- strcat(cmdline, " ");
- for (s = cmdline + strlen(cmdline); *filename; ) {
- *s++ = '\\';
- *s++ = *filename++;
- }
- strcpy(s, " 2>&1");
- myfp = PerlProc_popen(cmdline, "r");
- Safefree(cmdline);
-
- if (myfp) {
- SV *tmpsv = sv_newmortal();
- /* Need to save/restore 'PL_rs' ?? */
- s = sv_gets(tmpsv, myfp, 0);
- (void)PerlProc_pclose(myfp);
- if (s != Nullch) {
- int e;
- for (e = 1;
-#ifdef HAS_SYS_ERRLIST
- e <= sys_nerr
-#endif
- ; e++)
- {
- /* you don't see this */
- char *errmsg =
-#ifdef HAS_SYS_ERRLIST
- sys_errlist[e]
-#else
- strerror(e)
-#endif
- ;
- if (!errmsg)
- break;
- if (instr(s, errmsg)) {
- SETERRNO(e,0);
- return 0;
- }
- }
- SETERRNO(0,0);
-#ifndef EACCES
-#define EACCES EPERM
-#endif
- if (instr(s, "cannot make"))
- SETERRNO(EEXIST,RMS$_FEX);
- else if (instr(s, "existing file"))
- SETERRNO(EEXIST,RMS$_FEX);
- else if (instr(s, "ile exists"))
- SETERRNO(EEXIST,RMS$_FEX);
- else if (instr(s, "non-exist"))
- SETERRNO(ENOENT,RMS$_FNF);
- else if (instr(s, "does not exist"))
- SETERRNO(ENOENT,RMS$_FNF);
- else if (instr(s, "not empty"))
- SETERRNO(EBUSY,SS$_DEVOFFLINE);
- else if (instr(s, "cannot access"))
- SETERRNO(EACCES,RMS$_PRV);
- else
- SETERRNO(EPERM,RMS$_PRV);
- return 0;
- }
- else { /* some mkdirs return no failure indication */
- anum = (PerlLIO_stat(save_filename, &PL_statbuf) >= 0);
- if (PL_op->op_type == OP_RMDIR)
- anum = !anum;
- if (anum)
- SETERRNO(0,0);
- else
- SETERRNO(EACCES,RMS$_PRV); /* a guess */
- }
- return anum;
- }
- else
- return 0;
-}
-#endif
-
-PP(pp_mkdir)
-{
- dSP; dTARGET;
- int mode;
-#ifndef HAS_MKDIR
- int oldumask;
-#endif
- STRLEN n_a;
- char *tmps;
-
- if (MAXARG > 1)
- mode = POPi;
- else
- mode = 0777;
-
- tmps = SvPV(TOPs, n_a);
-
- TAINT_PROPER("mkdir");
-#ifdef HAS_MKDIR
- SETi( PerlDir_mkdir(tmps, mode) >= 0 );
-#else
- SETi( dooneliner("mkdir", tmps) );
- oldumask = PerlLIO_umask(0);
- PerlLIO_umask(oldumask);
- PerlLIO_chmod(tmps, (mode & ~oldumask) & 0777);
-#endif
- RETURN;
-}
-
-PP(pp_rmdir)
-{
- dSP; dTARGET;
- char *tmps;
- STRLEN n_a;
-
- tmps = POPpx;
- TAINT_PROPER("rmdir");
-#ifdef HAS_RMDIR
- XPUSHi( PerlDir_rmdir(tmps) >= 0 );
-#else
- XPUSHi( dooneliner("rmdir", tmps) );
-#endif
- RETURN;
-}
-
-/* Directory calls. */
-
-PP(pp_open_dir)
-{
- dSP;
-#if defined(Direntry_t) && defined(HAS_READDIR)
- STRLEN n_a;
- char *dirname = POPpx;
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
-
- if (!io)
- goto nope;
-
- if (IoDIRP(io))
- PerlDir_close(IoDIRP(io));
- if (!(IoDIRP(io) = PerlDir_open(dirname)))
- goto nope;
-
- RETPUSHYES;
-nope:
- if (!errno)
- SETERRNO(EBADF,RMS$_DIR);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_dir_func, "opendir");
-#endif
-}
-
-PP(pp_readdir)
-{
- dSP;
-#if defined(Direntry_t) && defined(HAS_READDIR)
-#ifndef I_DIRENT
- Direntry_t *readdir (DIR *);
-#endif
- register Direntry_t *dp;
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
- SV *sv;
-
- if (!io || !IoDIRP(io))
- goto nope;
-
- if (GIMME == G_ARRAY) {
- /*SUPPRESS 560*/
- while ((dp = (Direntry_t *)PerlDir_read(IoDIRP(io)))) {
-#ifdef DIRNAMLEN
- sv = newSVpvn(dp->d_name, dp->d_namlen);
-#else
- sv = newSVpv(dp->d_name, 0);
-#endif
-#ifndef INCOMPLETE_TAINTS
- if (!(IoFLAGS(io) & IOf_UNTAINT))
- SvTAINTED_on(sv);
-#endif
- XPUSHs(sv_2mortal(sv));
- }
- }
- else {
- if (!(dp = (Direntry_t *)PerlDir_read(IoDIRP(io))))
- goto nope;
-#ifdef DIRNAMLEN
- sv = newSVpvn(dp->d_name, dp->d_namlen);
-#else
- sv = newSVpv(dp->d_name, 0);
-#endif
-#ifndef INCOMPLETE_TAINTS
- if (!(IoFLAGS(io) & IOf_UNTAINT))
- SvTAINTED_on(sv);
-#endif
- XPUSHs(sv_2mortal(sv));
- }
- RETURN;
-
-nope:
- if (!errno)
- SETERRNO(EBADF,RMS$_ISI);
- if (GIMME == G_ARRAY)
- RETURN;
- else
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_dir_func, "readdir");
-#endif
-}
-
-PP(pp_telldir)
-{
- dSP; dTARGET;
-#if defined(HAS_TELLDIR) || defined(telldir)
- /* XXX does _anyone_ need this? --AD 2/20/1998 */
- /* XXX netbsd still seemed to.
- XXX HAS_TELLDIR_PROTO is new style, NEED_TELLDIR_PROTO is old style.
- --JHI 1999-Feb-02 */
-# if !defined(HAS_TELLDIR_PROTO) || defined(NEED_TELLDIR_PROTO)
- long telldir (DIR *);
-# endif
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
-
- if (!io || !IoDIRP(io))
- goto nope;
-
- PUSHi( PerlDir_tell(IoDIRP(io)) );
- RETURN;
-nope:
- if (!errno)
- SETERRNO(EBADF,RMS$_ISI);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_dir_func, "telldir");
-#endif
-}
-
-PP(pp_seekdir)
-{
- dSP;
-#if defined(HAS_SEEKDIR) || defined(seekdir)
- long along = POPl;
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
-
- if (!io || !IoDIRP(io))
- goto nope;
-
- (void)PerlDir_seek(IoDIRP(io), along);
-
- RETPUSHYES;
-nope:
- if (!errno)
- SETERRNO(EBADF,RMS$_ISI);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_dir_func, "seekdir");
-#endif
-}
-
-PP(pp_rewinddir)
-{
- dSP;
-#if defined(HAS_REWINDDIR) || defined(rewinddir)
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
-
- if (!io || !IoDIRP(io))
- goto nope;
-
- (void)PerlDir_rewind(IoDIRP(io));
- RETPUSHYES;
-nope:
- if (!errno)
- SETERRNO(EBADF,RMS$_ISI);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_dir_func, "rewinddir");
-#endif
-}
-
-PP(pp_closedir)
-{
- dSP;
-#if defined(Direntry_t) && defined(HAS_READDIR)
- GV *gv = (GV*)POPs;
- register IO *io = GvIOn(gv);
-
- if (!io || !IoDIRP(io))
- goto nope;
-
-#ifdef VOID_CLOSEDIR
- PerlDir_close(IoDIRP(io));
-#else
- if (PerlDir_close(IoDIRP(io)) < 0) {
- IoDIRP(io) = 0; /* Don't try to close again--coredumps on SysV */
- goto nope;
- }
-#endif
- IoDIRP(io) = 0;
-
- RETPUSHYES;
-nope:
- if (!errno)
- SETERRNO(EBADF,RMS$_IFI);
- RETPUSHUNDEF;
-#else
- DIE(aTHX_ PL_no_dir_func, "closedir");
-#endif
-}
-
-/* Process control. */
-
-PP(pp_fork)
-{
-#ifdef HAS_FORK
- dSP; dTARGET;
- Pid_t childpid;
- GV *tmpgv;
-
- EXTEND(SP, 1);
- PERL_FLUSHALL_FOR_CHILD;
- childpid = fork();
- if (childpid < 0)
- RETSETUNDEF;
- if (!childpid) {
- /*SUPPRESS 560*/
- if ((tmpgv = gv_fetchpv("$", TRUE, SVt_PV)))
- sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid());
- hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */
- }
- PUSHi(childpid);
- RETURN;
-#else
-# if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
- dSP; dTARGET;
- Pid_t childpid;
-
- EXTEND(SP, 1);
- PERL_FLUSHALL_FOR_CHILD;
- childpid = PerlProc_fork();
- if (childpid == -1)
- RETSETUNDEF;
- PUSHi(childpid);
- RETURN;
-# else
- DIE(aTHX_ PL_no_func, "Unsupported function fork");
-# endif
-#endif
-}
-
-PP(pp_wait)
-{
-#if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(MACOS_TRADITIONAL)
- dSP; dTARGET;
- Pid_t childpid;
- int argflags;
-
- childpid = wait4pid(-1, &argflags, 0);
-# if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
- /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
- STATUS_NATIVE_SET((childpid && childpid != -1) ? argflags : -1);
-# else
- STATUS_NATIVE_SET((childpid > 0) ? argflags : -1);
-# endif
- XPUSHi(childpid);
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "Unsupported function wait");
-#endif
-}
-
-PP(pp_waitpid)
-{
-#if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(MACOS_TRADITIONAL)
- dSP; dTARGET;
- Pid_t childpid;
- int optype;
- int argflags;
-
- optype = POPi;
- childpid = TOPi;
- childpid = wait4pid(childpid, &argflags, optype);
-# if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
- /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
- STATUS_NATIVE_SET((childpid && childpid != -1) ? argflags : -1);
-# else
- STATUS_NATIVE_SET((childpid > 0) ? argflags : -1);
-# endif
- SETi(childpid);
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "Unsupported function waitpid");
-#endif
-}
-
-PP(pp_system)
-{
- dSP; dMARK; dORIGMARK; dTARGET;
- I32 value;
- Pid_t childpid;
- int result;
- int status;
- Sigsave_t ihand,qhand; /* place to save signals during system() */
- STRLEN n_a;
- I32 did_pipes = 0;
- int pp[2];
-
- if (SP - MARK == 1) {
- if (PL_tainting) {
- char *junk = SvPV(TOPs, n_a);
- TAINT_ENV();
- TAINT_PROPER("system");
- }
- }
- PERL_FLUSHALL_FOR_CHILD;
-#if (defined(HAS_FORK) || defined(AMIGAOS)) && !defined(VMS) && !defined(OS2) && !defined(__CYGWIN__)
- if (PerlProc_pipe(pp) >= 0)
- did_pipes = 1;
- while ((childpid = vfork()) == -1) {
- if (errno != EAGAIN) {
- value = -1;
- SP = ORIGMARK;
- PUSHi(value);
- if (did_pipes) {
- PerlLIO_close(pp[0]);
- PerlLIO_close(pp[1]);
- }
- RETURN;
- }
- sleep(5);
- }
- if (childpid > 0) {
- if (did_pipes)
- PerlLIO_close(pp[1]);
- rsignal_save(SIGINT, SIG_IGN, &ihand);
- rsignal_save(SIGQUIT, SIG_IGN, &qhand);
- do {
- result = wait4pid(childpid, &status, 0);
- } while (result == -1 && errno == EINTR);
- (void)rsignal_restore(SIGINT, &ihand);
- (void)rsignal_restore(SIGQUIT, &qhand);
- STATUS_NATIVE_SET(result == -1 ? -1 : status);
- do_execfree(); /* free any memory child malloced on vfork */
- SP = ORIGMARK;
- if (did_pipes) {
- int errkid;
- int n = 0, n1;
-
- while (n < sizeof(int)) {
- n1 = PerlLIO_read(pp[0],
- (void*)(((char*)&errkid)+n),
- (sizeof(int)) - n);
- if (n1 <= 0)
- break;
- n += n1;
- }
- PerlLIO_close(pp[0]);
- if (n) { /* Error */
- if (n != sizeof(int))
- DIE(aTHX_ "panic: kid popen errno read");
- errno = errkid; /* Propagate errno from kid */
- STATUS_CURRENT = -1;
- }
- }
- PUSHi(STATUS_CURRENT);
- RETURN;
- }
- if (did_pipes) {
- PerlLIO_close(pp[0]);
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- fcntl(pp[1], F_SETFD, FD_CLOEXEC);
-#endif
- }
- if (PL_op->op_flags & OPf_STACKED) {
- SV *really = *++MARK;
- value = (I32)do_aexec5(really, MARK, SP, pp[1], did_pipes);
- }
- else if (SP - MARK != 1)
- value = (I32)do_aexec5(Nullsv, MARK, SP, pp[1], did_pipes);
- else {
- value = (I32)do_exec3(SvPVx(sv_mortalcopy(*SP), n_a), pp[1], did_pipes);
- }
- PerlProc__exit(-1);
-#else /* ! FORK or VMS or OS/2 */
- PL_statusvalue = 0;
- result = 0;
- if (PL_op->op_flags & OPf_STACKED) {
- SV *really = *++MARK;
- value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
- }
- else if (SP - MARK != 1)
- value = (I32)do_aspawn(Nullsv, (void **)MARK, (void **)SP);
- else {
- value = (I32)do_spawn(SvPVx(sv_mortalcopy(*SP), n_a));
- }
- if (PL_statusvalue == -1) /* hint that value must be returned as is */
- result = 1;
- STATUS_NATIVE_SET(value);
- do_execfree();
- SP = ORIGMARK;
- PUSHi(result ? value : STATUS_CURRENT);
-#endif /* !FORK or VMS */
- RETURN;
-}
-
-PP(pp_exec)
-{
- dSP; dMARK; dORIGMARK; dTARGET;
- I32 value;
- STRLEN n_a;
-
- PERL_FLUSHALL_FOR_CHILD;
- if (PL_op->op_flags & OPf_STACKED) {
- SV *really = *++MARK;
- value = (I32)do_aexec(really, MARK, SP);
- }
- else if (SP - MARK != 1)
-#ifdef VMS
- value = (I32)vms_do_aexec(Nullsv, MARK, SP);
-#else
-# ifdef __OPEN_VM
- {
- (void ) do_aspawn(Nullsv, MARK, SP);
- value = 0;
- }
-# else
- value = (I32)do_aexec(Nullsv, MARK, SP);
-# endif
-#endif
- else {
- if (PL_tainting) {
- char *junk = SvPV(*SP, n_a);
- TAINT_ENV();
- TAINT_PROPER("exec");
- }
-#ifdef VMS
- value = (I32)vms_do_exec(SvPVx(sv_mortalcopy(*SP), n_a));
-#else
-# ifdef __OPEN_VM
- (void) do_spawn(SvPVx(sv_mortalcopy(*SP), n_a));
- value = 0;
-# else
- value = (I32)do_exec(SvPVx(sv_mortalcopy(*SP), n_a));
-# endif
-#endif
- }
-
-#if !defined(HAS_FORK) && defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
- if (value >= 0)
- my_exit(value);
-#endif
-
- SP = ORIGMARK;
- PUSHi(value);
- RETURN;
-}
-
-PP(pp_kill)
-{
- dSP; dMARK; dTARGET;
- I32 value;
-#ifdef HAS_KILL
- value = (I32)apply(PL_op->op_type, MARK, SP);
- SP = MARK;
- PUSHi(value);
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "Unsupported function kill");
-#endif
-}
-
-PP(pp_getppid)
-{
-#ifdef HAS_GETPPID
- dSP; dTARGET;
- XPUSHi( getppid() );
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "getppid");
-#endif
-}
-
-PP(pp_getpgrp)
-{
-#ifdef HAS_GETPGRP
- dSP; dTARGET;
- Pid_t pid;
- Pid_t pgrp;
-
- if (MAXARG < 1)
- pid = 0;
- else
- pid = SvIVx(POPs);
-#ifdef BSD_GETPGRP
- pgrp = (I32)BSD_GETPGRP(pid);
-#else
- if (pid != 0 && pid != PerlProc_getpid())
- DIE(aTHX_ "POSIX getpgrp can't take an argument");
- pgrp = getpgrp();
-#endif
- XPUSHi(pgrp);
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "getpgrp()");
-#endif
-}
-
-PP(pp_setpgrp)
-{
-#ifdef HAS_SETPGRP
- dSP; dTARGET;
- Pid_t pgrp;
- Pid_t pid;
- if (MAXARG < 2) {
- pgrp = 0;
- pid = 0;
- }
- else {
- pgrp = POPi;
- pid = TOPi;
- }
-
- TAINT_PROPER("setpgrp");
-#ifdef BSD_SETPGRP
- SETi( BSD_SETPGRP(pid, pgrp) >= 0 );
-#else
- if ((pgrp != 0 && pgrp != PerlProc_getpid())
- || (pid != 0 && pid != PerlProc_getpid()))
- {
- DIE(aTHX_ "setpgrp can't take arguments");
- }
- SETi( setpgrp() >= 0 );
-#endif /* USE_BSDPGRP */
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "setpgrp()");
-#endif
-}
-
-PP(pp_getpriority)
-{
- dSP; dTARGET;
- int which;
- int who;
-#ifdef HAS_GETPRIORITY
- who = POPi;
- which = TOPi;
- SETi( getpriority(which, who) );
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "getpriority()");
-#endif
-}
-
-PP(pp_setpriority)
-{
- dSP; dTARGET;
- int which;
- int who;
- int niceval;
-#ifdef HAS_SETPRIORITY
- niceval = POPi;
- who = POPi;
- which = TOPi;
- TAINT_PROPER("setpriority");
- SETi( setpriority(which, who, niceval) >= 0 );
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "setpriority()");
-#endif
-}
-
-/* Time calls. */
-
-PP(pp_time)
-{
- dSP; dTARGET;
-#ifdef BIG_TIME
- XPUSHn( time(Null(Time_t*)) );
-#else
- XPUSHi( time(Null(Time_t*)) );
-#endif
- RETURN;
-}
-
-/* XXX The POSIX name is CLK_TCK; it is to be preferred
- to HZ. Probably. For now, assume that if the system
- defines HZ, it does so correctly. (Will this break
- on VMS?)
- Probably we ought to use _sysconf(_SC_CLK_TCK), if
- it's supported. --AD 9/96.
-*/
-
-#ifndef HZ
-# ifdef CLK_TCK
-# define HZ CLK_TCK
-# else
-# define HZ 60
-# endif
-#endif
-
-PP(pp_tms)
-{
- dSP;
-
-#ifndef HAS_TIMES
- DIE(aTHX_ "times not implemented");
-#else
- EXTEND(SP, 4);
-
-#ifndef VMS
- (void)PerlProc_times(&PL_timesbuf);
-#else
- (void)PerlProc_times((tbuffer_t *)&PL_timesbuf); /* time.h uses different name for */
- /* struct tms, though same data */
- /* is returned. */
-#endif
-
- PUSHs(sv_2mortal(newSVnv(((NV)PL_timesbuf.tms_utime)/HZ)));
- if (GIMME == G_ARRAY) {
- PUSHs(sv_2mortal(newSVnv(((NV)PL_timesbuf.tms_stime)/HZ)));
- PUSHs(sv_2mortal(newSVnv(((NV)PL_timesbuf.tms_cutime)/HZ)));
- PUSHs(sv_2mortal(newSVnv(((NV)PL_timesbuf.tms_cstime)/HZ)));
- }
- RETURN;
-#endif /* HAS_TIMES */
-}
-
-PP(pp_localtime)
-{
- return pp_gmtime();
-}
-
-PP(pp_gmtime)
-{
- dSP;
- Time_t when;
- struct tm *tmbuf;
- static char *dayname[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
- static char *monname[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
-
- if (MAXARG < 1)
- (void)time(&when);
- else
-#ifdef BIG_TIME
- when = (Time_t)SvNVx(POPs);
-#else
- when = (Time_t)SvIVx(POPs);
-#endif
-
- if (PL_op->op_type == OP_LOCALTIME)
- tmbuf = localtime(&when);
- else
- tmbuf = gmtime(&when);
-
- EXTEND(SP, 9);
- EXTEND_MORTAL(9);
- if (GIMME != G_ARRAY) {
- SV *tsv;
- if (!tmbuf)
- RETPUSHUNDEF;
- tsv = Perl_newSVpvf(aTHX_ "%s %s %2d %02d:%02d:%02d %d",
- dayname[tmbuf->tm_wday],
- monname[tmbuf->tm_mon],
- tmbuf->tm_mday,
- tmbuf->tm_hour,
- tmbuf->tm_min,
- tmbuf->tm_sec,
- tmbuf->tm_year + 1900);
- PUSHs(sv_2mortal(tsv));
- }
- else if (tmbuf) {
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_sec)));
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_min)));
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_hour)));
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_mday)));
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_mon)));
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_year)));
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_wday)));
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_yday)));
- PUSHs(sv_2mortal(newSViv(tmbuf->tm_isdst)));
- }
- RETURN;
-}
-
-PP(pp_alarm)
-{
- dSP; dTARGET;
- int anum;
-#ifdef HAS_ALARM
- anum = POPi;
- anum = alarm((unsigned int)anum);
- EXTEND(SP, 1);
- if (anum < 0)
- RETPUSHUNDEF;
- PUSHi(anum);
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "Unsupported function alarm");
-#endif
-}
-
-PP(pp_sleep)
-{
- dSP; dTARGET;
- I32 duration;
- Time_t lasttime;
- Time_t when;
-
- (void)time(&lasttime);
- if (MAXARG < 1)
- PerlProc_pause();
- else {
- duration = POPi;
- PerlProc_sleep((unsigned int)duration);
- }
- (void)time(&when);
- XPUSHi(when - lasttime);
- RETURN;
-}
-
-/* Shared memory. */
-
-PP(pp_shmget)
-{
- return pp_semget();
-}
-
-PP(pp_shmctl)
-{
- return pp_semctl();
-}
-
-PP(pp_shmread)
-{
- return pp_shmwrite();
-}
-
-PP(pp_shmwrite)
-{
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
- dSP; dMARK; dTARGET;
- I32 value = (I32)(do_shmio(PL_op->op_type, MARK, SP) >= 0);
- SP = MARK;
- PUSHi(value);
- RETURN;
-#else
- return pp_semget();
-#endif
-}
-
-/* Message passing. */
-
-PP(pp_msgget)
-{
- return pp_semget();
-}
-
-PP(pp_msgctl)
-{
- return pp_semctl();
-}
-
-PP(pp_msgsnd)
-{
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
- dSP; dMARK; dTARGET;
- I32 value = (I32)(do_msgsnd(MARK, SP) >= 0);
- SP = MARK;
- PUSHi(value);
- RETURN;
-#else
- return pp_semget();
-#endif
-}
-
-PP(pp_msgrcv)
-{
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
- dSP; dMARK; dTARGET;
- I32 value = (I32)(do_msgrcv(MARK, SP) >= 0);
- SP = MARK;
- PUSHi(value);
- RETURN;
-#else
- return pp_semget();
-#endif
-}
-
-/* Semaphores. */
-
-PP(pp_semget)
-{
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
- dSP; dMARK; dTARGET;
- int anum = do_ipcget(PL_op->op_type, MARK, SP);
- SP = MARK;
- if (anum == -1)
- RETPUSHUNDEF;
- PUSHi(anum);
- RETURN;
-#else
- DIE(aTHX_ "System V IPC is not implemented on this machine");
-#endif
-}
-
-PP(pp_semctl)
-{
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
- dSP; dMARK; dTARGET;
- int anum = do_ipcctl(PL_op->op_type, MARK, SP);
- SP = MARK;
- if (anum == -1)
- RETSETUNDEF;
- if (anum != 0) {
- PUSHi(anum);
- }
- else {
- PUSHp(zero_but_true, ZBTLEN);
- }
- RETURN;
-#else
- return pp_semget();
-#endif
-}
-
-PP(pp_semop)
-{
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
- dSP; dMARK; dTARGET;
- I32 value = (I32)(do_semop(MARK, SP) >= 0);
- SP = MARK;
- PUSHi(value);
- RETURN;
-#else
- return pp_semget();
-#endif
-}
-
-/* Get system info. */
-
-PP(pp_ghbyname)
-{
-#ifdef HAS_GETHOSTBYNAME
- return pp_ghostent();
-#else
- DIE(aTHX_ PL_no_sock_func, "gethostbyname");
-#endif
-}
-
-PP(pp_ghbyaddr)
-{
-#ifdef HAS_GETHOSTBYADDR
- return pp_ghostent();
-#else
- DIE(aTHX_ PL_no_sock_func, "gethostbyaddr");
-#endif
-}
-
-PP(pp_ghostent)
-{
- dSP;
-#if defined(HAS_GETHOSTBYNAME) || defined(HAS_GETHOSTBYADDR) || defined(HAS_GETHOSTENT)
- I32 which = PL_op->op_type;
- register char **elem;
- register SV *sv;
-#ifndef HAS_GETHOST_PROTOS /* XXX Do we need individual probes? */
- struct hostent *PerlSock_gethostbyaddr(Netdb_host_t, Netdb_hlen_t, int);
- struct hostent *PerlSock_gethostbyname(Netdb_name_t);
- struct hostent *PerlSock_gethostent(void);
-#endif
- struct hostent *hent;
- unsigned long len;
- STRLEN n_a;
-
- EXTEND(SP, 10);
- if (which == OP_GHBYNAME)
-#ifdef HAS_GETHOSTBYNAME
- hent = PerlSock_gethostbyname(POPpx);
-#else
- DIE(aTHX_ PL_no_sock_func, "gethostbyname");
-#endif
- else if (which == OP_GHBYADDR) {
-#ifdef HAS_GETHOSTBYADDR
- int addrtype = POPi;
- SV *addrsv = POPs;
- STRLEN addrlen;
- Netdb_host_t addr = (Netdb_host_t) SvPV(addrsv, addrlen);
-
- hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
-#else
- DIE(aTHX_ PL_no_sock_func, "gethostbyaddr");
-#endif
- }
- else
-#ifdef HAS_GETHOSTENT
- hent = PerlSock_gethostent();
-#else
- DIE(aTHX_ PL_no_sock_func, "gethostent");
-#endif
-
-#ifdef HOST_NOT_FOUND
- if (!hent)
- STATUS_NATIVE_SET(h_errno);
-#endif
-
- if (GIMME != G_ARRAY) {
- PUSHs(sv = sv_newmortal());
- if (hent) {
- if (which == OP_GHBYNAME) {
- if (hent->h_addr)
- sv_setpvn(sv, hent->h_addr, hent->h_length);
- }
- else
- sv_setpv(sv, (char*)hent->h_name);
- }
- RETURN;
- }
-
- if (hent) {
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, (char*)hent->h_name);
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- for (elem = hent->h_aliases; elem && *elem; elem++) {
- sv_catpv(sv, *elem);
- if (elem[1])
- sv_catpvn(sv, " ", 1);
- }
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setiv(sv, (IV)hent->h_addrtype);
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- len = hent->h_length;
- sv_setiv(sv, (IV)len);
-#ifdef h_addr
- for (elem = hent->h_addr_list; elem && *elem; elem++) {
- XPUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpvn(sv, *elem, len);
- }
-#else
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- if (hent->h_addr)
- sv_setpvn(sv, hent->h_addr, len);
-#endif /* h_addr */
- }
- RETURN;
-#else
- DIE(aTHX_ PL_no_sock_func, "gethostent");
-#endif
-}
-
-PP(pp_gnbyname)
-{
-#ifdef HAS_GETNETBYNAME
- return pp_gnetent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getnetbyname");
-#endif
-}
-
-PP(pp_gnbyaddr)
-{
-#ifdef HAS_GETNETBYADDR
- return pp_gnetent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getnetbyaddr");
-#endif
-}
-
-PP(pp_gnetent)
-{
- dSP;
-#if defined(HAS_GETNETBYNAME) || defined(HAS_GETNETBYADDR) || defined(HAS_GETNETENT)
- I32 which = PL_op->op_type;
- register char **elem;
- register SV *sv;
-#ifndef HAS_GETNET_PROTOS /* XXX Do we need individual probes? */
- struct netent *PerlSock_getnetbyaddr(Netdb_net_t, int);
- struct netent *PerlSock_getnetbyname(Netdb_name_t);
- struct netent *PerlSock_getnetent(void);
-#endif
- struct netent *nent;
- STRLEN n_a;
-
- if (which == OP_GNBYNAME)
-#ifdef HAS_GETNETBYNAME
- nent = PerlSock_getnetbyname(POPpx);
-#else
- DIE(aTHX_ PL_no_sock_func, "getnetbyname");
-#endif
- else if (which == OP_GNBYADDR) {
-#ifdef HAS_GETNETBYADDR
- int addrtype = POPi;
- Netdb_net_t addr = (Netdb_net_t) U_L(POPn);
- nent = PerlSock_getnetbyaddr(addr, addrtype);
-#else
- DIE(aTHX_ PL_no_sock_func, "getnetbyaddr");
-#endif
- }
- else
-#ifdef HAS_GETNETENT
- nent = PerlSock_getnetent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getnetent");
-#endif
-
- EXTEND(SP, 4);
- if (GIMME != G_ARRAY) {
- PUSHs(sv = sv_newmortal());
- if (nent) {
- if (which == OP_GNBYNAME)
- sv_setiv(sv, (IV)nent->n_net);
- else
- sv_setpv(sv, nent->n_name);
- }
- RETURN;
- }
-
- if (nent) {
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, nent->n_name);
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- for (elem = nent->n_aliases; elem && *elem; elem++) {
- sv_catpv(sv, *elem);
- if (elem[1])
- sv_catpvn(sv, " ", 1);
- }
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setiv(sv, (IV)nent->n_addrtype);
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setiv(sv, (IV)nent->n_net);
- }
-
- RETURN;
-#else
- DIE(aTHX_ PL_no_sock_func, "getnetent");
-#endif
-}
-
-PP(pp_gpbyname)
-{
-#ifdef HAS_GETPROTOBYNAME
- return pp_gprotoent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getprotobyname");
-#endif
-}
-
-PP(pp_gpbynumber)
-{
-#ifdef HAS_GETPROTOBYNUMBER
- return pp_gprotoent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getprotobynumber");
-#endif
-}
-
-PP(pp_gprotoent)
-{
- dSP;
-#if defined(HAS_GETPROTOBYNAME) || defined(HAS_GETPROTOBYNUMBER) || defined(HAS_GETPROTOENT)
- I32 which = PL_op->op_type;
- register char **elem;
- register SV *sv;
-#ifndef HAS_GETPROTO_PROTOS /* XXX Do we need individual probes? */
- struct protoent *PerlSock_getprotobyname(Netdb_name_t);
- struct protoent *PerlSock_getprotobynumber(int);
- struct protoent *PerlSock_getprotoent(void);
-#endif
- struct protoent *pent;
- STRLEN n_a;
-
- if (which == OP_GPBYNAME)
-#ifdef HAS_GETPROTOBYNAME
- pent = PerlSock_getprotobyname(POPpx);
-#else
- DIE(aTHX_ PL_no_sock_func, "getprotobyname");
-#endif
- else if (which == OP_GPBYNUMBER)
-#ifdef HAS_GETPROTOBYNUMBER
- pent = PerlSock_getprotobynumber(POPi);
-#else
- DIE(aTHX_ PL_no_sock_func, "getprotobynumber");
-#endif
- else
-#ifdef HAS_GETPROTOENT
- pent = PerlSock_getprotoent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getprotoent");
-#endif
-
- EXTEND(SP, 3);
- if (GIMME != G_ARRAY) {
- PUSHs(sv = sv_newmortal());
- if (pent) {
- if (which == OP_GPBYNAME)
- sv_setiv(sv, (IV)pent->p_proto);
- else
- sv_setpv(sv, pent->p_name);
- }
- RETURN;
- }
-
- if (pent) {
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, pent->p_name);
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- for (elem = pent->p_aliases; elem && *elem; elem++) {
- sv_catpv(sv, *elem);
- if (elem[1])
- sv_catpvn(sv, " ", 1);
- }
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setiv(sv, (IV)pent->p_proto);
- }
-
- RETURN;
-#else
- DIE(aTHX_ PL_no_sock_func, "getprotoent");
-#endif
-}
-
-PP(pp_gsbyname)
-{
-#ifdef HAS_GETSERVBYNAME
- return pp_gservent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getservbyname");
-#endif
-}
-
-PP(pp_gsbyport)
-{
-#ifdef HAS_GETSERVBYPORT
- return pp_gservent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getservbyport");
-#endif
-}
-
-PP(pp_gservent)
-{
- dSP;
-#if defined(HAS_GETSERVBYNAME) || defined(HAS_GETSERVBYPORT) || defined(HAS_GETSERVENT)
- I32 which = PL_op->op_type;
- register char **elem;
- register SV *sv;
-#ifndef HAS_GETSERV_PROTOS /* XXX Do we need individual probes? */
- struct servent *PerlSock_getservbyname(Netdb_name_t, Netdb_name_t);
- struct servent *PerlSock_getservbyport(int, Netdb_name_t);
- struct servent *PerlSock_getservent(void);
-#endif
- struct servent *sent;
- STRLEN n_a;
-
- if (which == OP_GSBYNAME) {
-#ifdef HAS_GETSERVBYNAME
- char *proto = POPpx;
- char *name = POPpx;
-
- if (proto && !*proto)
- proto = Nullch;
-
- sent = PerlSock_getservbyname(name, proto);
-#else
- DIE(aTHX_ PL_no_sock_func, "getservbyname");
-#endif
- }
- else if (which == OP_GSBYPORT) {
-#ifdef HAS_GETSERVBYPORT
- char *proto = POPpx;
- unsigned short port = POPu;
-
-#ifdef HAS_HTONS
- port = PerlSock_htons(port);
-#endif
- sent = PerlSock_getservbyport(port, proto);
-#else
- DIE(aTHX_ PL_no_sock_func, "getservbyport");
-#endif
- }
- else
-#ifdef HAS_GETSERVENT
- sent = PerlSock_getservent();
-#else
- DIE(aTHX_ PL_no_sock_func, "getservent");
-#endif
-
- EXTEND(SP, 4);
- if (GIMME != G_ARRAY) {
- PUSHs(sv = sv_newmortal());
- if (sent) {
- if (which == OP_GSBYNAME) {
-#ifdef HAS_NTOHS
- sv_setiv(sv, (IV)PerlSock_ntohs(sent->s_port));
-#else
- sv_setiv(sv, (IV)(sent->s_port));
-#endif
- }
- else
- sv_setpv(sv, sent->s_name);
- }
- RETURN;
- }
-
- if (sent) {
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, sent->s_name);
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- for (elem = sent->s_aliases; elem && *elem; elem++) {
- sv_catpv(sv, *elem);
- if (elem[1])
- sv_catpvn(sv, " ", 1);
- }
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
-#ifdef HAS_NTOHS
- sv_setiv(sv, (IV)PerlSock_ntohs(sent->s_port));
-#else
- sv_setiv(sv, (IV)(sent->s_port));
-#endif
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, sent->s_proto);
- }
-
- RETURN;
-#else
- DIE(aTHX_ PL_no_sock_func, "getservent");
-#endif
-}
-
-PP(pp_shostent)
-{
- dSP;
-#ifdef HAS_SETHOSTENT
- PerlSock_sethostent(TOPi);
- RETSETYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "sethostent");
-#endif
-}
-
-PP(pp_snetent)
-{
- dSP;
-#ifdef HAS_SETNETENT
- PerlSock_setnetent(TOPi);
- RETSETYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "setnetent");
-#endif
-}
-
-PP(pp_sprotoent)
-{
- dSP;
-#ifdef HAS_SETPROTOENT
- PerlSock_setprotoent(TOPi);
- RETSETYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "setprotoent");
-#endif
-}
-
-PP(pp_sservent)
-{
- dSP;
-#ifdef HAS_SETSERVENT
- PerlSock_setservent(TOPi);
- RETSETYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "setservent");
-#endif
-}
-
-PP(pp_ehostent)
-{
- dSP;
-#ifdef HAS_ENDHOSTENT
- PerlSock_endhostent();
- EXTEND(SP,1);
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "endhostent");
-#endif
-}
-
-PP(pp_enetent)
-{
- dSP;
-#ifdef HAS_ENDNETENT
- PerlSock_endnetent();
- EXTEND(SP,1);
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "endnetent");
-#endif
-}
-
-PP(pp_eprotoent)
-{
- dSP;
-#ifdef HAS_ENDPROTOENT
- PerlSock_endprotoent();
- EXTEND(SP,1);
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "endprotoent");
-#endif
-}
-
-PP(pp_eservent)
-{
- dSP;
-#ifdef HAS_ENDSERVENT
- PerlSock_endservent();
- EXTEND(SP,1);
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_sock_func, "endservent");
-#endif
-}
-
-PP(pp_gpwnam)
-{
-#ifdef HAS_PASSWD
- return pp_gpwent();
-#else
- DIE(aTHX_ PL_no_func, "getpwnam");
-#endif
-}
-
-PP(pp_gpwuid)
-{
-#ifdef HAS_PASSWD
- return pp_gpwent();
-#else
- DIE(aTHX_ PL_no_func, "getpwuid");
-#endif
-}
-
-PP(pp_gpwent)
-{
- dSP;
-#ifdef HAS_PASSWD
- I32 which = PL_op->op_type;
- register SV *sv;
- STRLEN n_a;
- struct passwd *pwent = NULL;
- /*
- * We currently support only the SysV getsp* shadow password interface.
- * The interface is declared in <shadow.h> and often one needs to link
- * with -lsecurity or some such.
- * This interface is used at least by Solaris, HP-UX, IRIX, and Linux.
- * (and SCO?)
- *
- * AIX getpwnam() is clever enough to return the encrypted password
- * only if the caller (euid?) is root.
- *
- * There are at least two other shadow password APIs. Many platforms
- * seem to contain more than one interface for accessing the shadow
- * password databases, possibly for compatibility reasons.
- * The getsp*() is by far he simplest one, the other two interfaces
- * are much more complicated, but also very similar to each other.
- *
- * <sys/types.h>
- * <sys/security.h>
- * <prot.h>
- * struct pr_passwd *getprpw*();
- * The password is in
- * char getprpw*(...).ufld.fd_encrypt[]
- * Mention HAS_GETPRPWNAM here so that Configure probes for it.
- *
- * <sys/types.h>
- * <sys/security.h>
- * <prot.h>
- * struct es_passwd *getespw*();
- * The password is in
- * char *(getespw*(...).ufld.fd_encrypt)
- * Mention HAS_GETESPWNAM here so that Configure probes for it.
- *
- * Mention I_PROT here so that Configure probes for it.
- *
- * In HP-UX for getprpw*() the manual page claims that one should include
- * <hpsecurity.h> instead of <sys/security.h>, but that is not needed
- * if one includes <shadow.h> as that includes <hpsecurity.h>,
- * and pp_sys.c already includes <shadow.h> if there is such.
- *
- * Note that <sys/security.h> is already probed for, but currently
- * it is only included in special cases.
- *
- * In Digital UNIX/Tru64 if using the getespw*() (which seems to be
- * be preferred interface, even though also the getprpw*() interface
- * is available) one needs to link with -lsecurity -ldb -laud -lm.
- * One also needs to call set_auth_parameters() in main() before
- * doing anything else, whether one is using getespw*() or getprpw*().
- *
- * Note that accessing the shadow databases can be magnitudes
- * slower than accessing the standard databases.
- *
- * --jhi
- */
-
- switch (which) {
- case OP_GPWNAM:
- pwent = getpwnam(POPpx);
- break;
- case OP_GPWUID:
- pwent = getpwuid((Uid_t)POPi);
- break;
- case OP_GPWENT:
-# ifdef HAS_GETPWENT
- pwent = getpwent();
-# else
- DIE(aTHX_ PL_no_func, "getpwent");
-# endif
- break;
- }
-
- EXTEND(SP, 10);
- if (GIMME != G_ARRAY) {
- PUSHs(sv = sv_newmortal());
- if (pwent) {
- if (which == OP_GPWNAM)
-# if Uid_t_sign <= 0
- sv_setiv(sv, (IV)pwent->pw_uid);
-# else
- sv_setuv(sv, (UV)pwent->pw_uid);
-# endif
- else
- sv_setpv(sv, pwent->pw_name);
- }
- RETURN;
- }
-
- if (pwent) {
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, pwent->pw_name);
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- SvPOK_off(sv);
- /* If we have getspnam(), we try to dig up the shadow
- * password. If we are underprivileged, the shadow
- * interface will set the errno to EACCES or similar,
- * and return a null pointer. If this happens, we will
- * use the dummy password (usually "*" or "x") from the
- * standard password database.
- *
- * In theory we could skip the shadow call completely
- * if euid != 0 but in practice we cannot know which
- * security measures are guarding the shadow databases
- * on a random platform.
- *
- * Resist the urge to use additional shadow interfaces.
- * Divert the urge to writing an extension instead.
- *
- * --jhi */
-# ifdef HAS_GETSPNAM
- {
- struct spwd *spwent;
- int saverrno; /* Save and restore errno so that
- * underprivileged attempts seem
- * to have never made the unsccessful
- * attempt to retrieve the shadow password. */
-
- saverrno = errno;
- spwent = getspnam(pwent->pw_name);
- errno = saverrno;
- if (spwent && spwent->sp_pwdp)
- sv_setpv(sv, spwent->sp_pwdp);
- }
-# endif
-# ifdef PWPASSWD
- if (!SvPOK(sv)) /* Use the standard password, then. */
- sv_setpv(sv, pwent->pw_passwd);
-# endif
-
-# ifndef INCOMPLETE_TAINTS
- /* passwd is tainted because user himself can diddle with it.
- * admittedly not much and in a very limited way, but nevertheless. */
- SvTAINTED_on(sv);
-# endif
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
-# if Uid_t_sign <= 0
- sv_setiv(sv, (IV)pwent->pw_uid);
-# else
- sv_setuv(sv, (UV)pwent->pw_uid);
-# endif
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
-# if Uid_t_sign <= 0
- sv_setiv(sv, (IV)pwent->pw_gid);
-# else
- sv_setuv(sv, (UV)pwent->pw_gid);
-# endif
- /* pw_change, pw_quota, and pw_age are mutually exclusive--
- * because of the poor interface of the Perl getpw*(),
- * not because there's some standard/convention saying so.
- * A better interface would have been to return a hash,
- * but we are accursed by our history, alas. --jhi. */
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
-# ifdef PWCHANGE
- sv_setiv(sv, (IV)pwent->pw_change);
-# else
-# ifdef PWQUOTA
- sv_setiv(sv, (IV)pwent->pw_quota);
-# else
-# ifdef PWAGE
- sv_setpv(sv, pwent->pw_age);
-# endif
-# endif
-# endif
-
- /* pw_class and pw_comment are mutually exclusive--.
- * see the above note for pw_change, pw_quota, and pw_age. */
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
-# ifdef PWCLASS
- sv_setpv(sv, pwent->pw_class);
-# else
-# ifdef PWCOMMENT
- sv_setpv(sv, pwent->pw_comment);
-# endif
-# endif
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
-# ifdef PWGECOS
- sv_setpv(sv, pwent->pw_gecos);
-# endif
-# ifndef INCOMPLETE_TAINTS
- /* pw_gecos is tainted because user himself can diddle with it. */
- SvTAINTED_on(sv);
-# endif
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, pwent->pw_dir);
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, pwent->pw_shell);
-# ifndef INCOMPLETE_TAINTS
- /* pw_shell is tainted because user himself can diddle with it. */
- SvTAINTED_on(sv);
-# endif
-
-# ifdef PWEXPIRE
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setiv(sv, (IV)pwent->pw_expire);
-# endif
- }
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "getpwent");
-#endif
-}
-
-PP(pp_spwent)
-{
- dSP;
-#if defined(HAS_PASSWD) && defined(HAS_SETPWENT)
- setpwent();
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_func, "setpwent");
-#endif
-}
-
-PP(pp_epwent)
-{
- dSP;
-#if defined(HAS_PASSWD) && defined(HAS_ENDPWENT)
- endpwent();
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_func, "endpwent");
-#endif
-}
-
-PP(pp_ggrnam)
-{
-#ifdef HAS_GROUP
- return pp_ggrent();
-#else
- DIE(aTHX_ PL_no_func, "getgrnam");
-#endif
-}
-
-PP(pp_ggrgid)
-{
-#ifdef HAS_GROUP
- return pp_ggrent();
-#else
- DIE(aTHX_ PL_no_func, "getgrgid");
-#endif
-}
-
-PP(pp_ggrent)
-{
- dSP;
-#ifdef HAS_GROUP
- I32 which = PL_op->op_type;
- register char **elem;
- register SV *sv;
- struct group *grent;
- STRLEN n_a;
-
- if (which == OP_GGRNAM)
- grent = (struct group *)getgrnam(POPpx);
- else if (which == OP_GGRGID)
- grent = (struct group *)getgrgid(POPi);
- else
-#ifdef HAS_GETGRENT
- grent = (struct group *)getgrent();
-#else
- DIE(aTHX_ PL_no_func, "getgrent");
-#endif
-
- EXTEND(SP, 4);
- if (GIMME != G_ARRAY) {
- PUSHs(sv = sv_newmortal());
- if (grent) {
- if (which == OP_GGRNAM)
- sv_setiv(sv, (IV)grent->gr_gid);
- else
- sv_setpv(sv, grent->gr_name);
- }
- RETURN;
- }
-
- if (grent) {
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setpv(sv, grent->gr_name);
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
-#ifdef GRPASSWD
- sv_setpv(sv, grent->gr_passwd);
-#endif
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- sv_setiv(sv, (IV)grent->gr_gid);
-
- PUSHs(sv = sv_mortalcopy(&PL_sv_no));
- for (elem = grent->gr_mem; elem && *elem; elem++) {
- sv_catpv(sv, *elem);
- if (elem[1])
- sv_catpvn(sv, " ", 1);
- }
- }
-
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "getgrent");
-#endif
-}
-
-PP(pp_sgrent)
-{
- dSP;
-#if defined(HAS_GROUP) && defined(HAS_SETGRENT)
- setgrent();
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_func, "setgrent");
-#endif
-}
-
-PP(pp_egrent)
-{
- dSP;
-#if defined(HAS_GROUP) && defined(HAS_ENDGRENT)
- endgrent();
- RETPUSHYES;
-#else
- DIE(aTHX_ PL_no_func, "endgrent");
-#endif
-}
-
-PP(pp_getlogin)
-{
- dSP; dTARGET;
-#ifdef HAS_GETLOGIN
- char *tmps;
- EXTEND(SP, 1);
- if (!(tmps = PerlProc_getlogin()))
- RETPUSHUNDEF;
- PUSHp(tmps, strlen(tmps));
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "getlogin");
-#endif
-}
-
-/* Miscellaneous. */
-
-PP(pp_syscall)
-{
-#ifdef HAS_SYSCALL
- dSP; dMARK; dORIGMARK; dTARGET;
- register I32 items = SP - MARK;
- unsigned long a[20];
- register I32 i = 0;
- I32 retval = -1;
- STRLEN n_a;
-
- if (PL_tainting) {
- while (++MARK <= SP) {
- if (SvTAINTED(*MARK)) {
- TAINT;
- break;
- }
- }
- MARK = ORIGMARK;
- TAINT_PROPER("syscall");
- }
-
- /* 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 (++MARK <= SP) {
- if (SvNIOK(*MARK) || !i)
- a[i++] = SvIV(*MARK);
- else if (*MARK == &PL_sv_undef)
- a[i++] = 0;
- else
- a[i++] = (unsigned long)SvPV_force(*MARK, n_a);
- if (i > 15)
- break;
- }
- switch (items) {
- default:
- DIE(aTHX_ "Too many args to syscall");
- case 0:
- DIE(aTHX_ "Too few args to syscall");
- case 1:
- retval = syscall(a[0]);
- break;
- case 2:
- retval = syscall(a[0],a[1]);
- break;
- case 3:
- retval = syscall(a[0],a[1],a[2]);
- break;
- case 4:
- retval = syscall(a[0],a[1],a[2],a[3]);
- break;
- case 5:
- retval = syscall(a[0],a[1],a[2],a[3],a[4]);
- break;
- case 6:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5]);
- break;
- case 7:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6]);
- break;
- case 8:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]);
- break;
-#ifdef atarist
- case 9:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
- break;
- case 10:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
- break;
- case 11:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
- a[10]);
- break;
- case 12:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
- a[10],a[11]);
- break;
- case 13:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
- a[10],a[11],a[12]);
- break;
- case 14:
- retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],
- a[10],a[11],a[12],a[13]);
- break;
-#endif /* atarist */
- }
- SP = ORIGMARK;
- PUSHi(retval);
- RETURN;
-#else
- DIE(aTHX_ PL_no_func, "syscall");
-#endif
-}
-
-#ifdef FCNTL_EMULATE_FLOCK
-
-/* XXX Emulate flock() with fcntl().
- What's really needed is a good file locking module.
-*/
-
-static int
-fcntl_emulate_flock(int fd, int operation)
-{
- struct flock flock;
-
- switch (operation & ~LOCK_NB) {
- case LOCK_SH:
- flock.l_type = F_RDLCK;
- break;
- case LOCK_EX:
- flock.l_type = F_WRLCK;
- break;
- case LOCK_UN:
- flock.l_type = F_UNLCK;
- break;
- default:
- errno = EINVAL;
- return -1;
- }
- flock.l_whence = SEEK_SET;
- flock.l_start = flock.l_len = (Off_t)0;
-
- return fcntl(fd, (operation & LOCK_NB) ? F_SETLK : F_SETLKW, &flock);
-}
-
-#endif /* FCNTL_EMULATE_FLOCK */
-
-#ifdef LOCKF_EMULATE_FLOCK
-
-/* XXX Emulate flock() with lockf(). This is just to increase
- portability of scripts. The calls are not completely
- interchangeable. What's really needed is a good file
- locking module.
-*/
-
-/* The lockf() constants might have been defined in <unistd.h>.
- Unfortunately, <unistd.h> causes troubles on some mixed
- (BSD/POSIX) systems, such as SunOS 4.1.3.
-
- Further, the lockf() constants aren't POSIX, so they might not be
- visible if we're compiling with _POSIX_SOURCE defined. Thus, we'll
- just stick in the SVID values and be done with it. Sigh.
-*/
-
-# ifndef F_ULOCK
-# define F_ULOCK 0 /* Unlock a previously locked region */
-# endif
-# ifndef F_LOCK
-# define F_LOCK 1 /* Lock a region for exclusive use */
-# endif
-# ifndef F_TLOCK
-# define F_TLOCK 2 /* Test and lock a region for exclusive use */
-# endif
-# ifndef F_TEST
-# define F_TEST 3 /* Test a region for other processes locks */
-# endif
-
-static int
-lockf_emulate_flock(int fd, int operation)
-{
- int i;
- int save_errno;
- Off_t pos;
-
- /* flock locks entire file so for lockf we need to do the same */
- save_errno = errno;
- pos = PerlLIO_lseek(fd, (Off_t)0, SEEK_CUR); /* get pos to restore later */
- if (pos > 0) /* is seekable and needs to be repositioned */
- if (PerlLIO_lseek(fd, (Off_t)0, SEEK_SET) < 0)
- pos = -1; /* seek failed, so don't seek back afterwards */
- errno = save_errno;
-
- switch (operation) {
-
- /* LOCK_SH - get a shared lock */
- case LOCK_SH:
- /* LOCK_EX - get an exclusive lock */
- case LOCK_EX:
- i = lockf (fd, F_LOCK, 0);
- break;
-
- /* LOCK_SH|LOCK_NB - get a non-blocking shared lock */
- case LOCK_SH|LOCK_NB:
- /* LOCK_EX|LOCK_NB - get a non-blocking exclusive lock */
- case LOCK_EX|LOCK_NB:
- i = lockf (fd, F_TLOCK, 0);
- if (i == -1)
- if ((errno == EAGAIN) || (errno == EACCES))
- errno = EWOULDBLOCK;
- break;
-
- /* LOCK_UN - unlock (non-blocking is a no-op) */
- case LOCK_UN:
- case LOCK_UN|LOCK_NB:
- i = lockf (fd, F_ULOCK, 0);
- break;
-
- /* Default - can't decipher operation */
- default:
- i = -1;
- errno = EINVAL;
- break;
- }
-
- if (pos > 0) /* need to restore position of the handle */
- PerlLIO_lseek(fd, pos, SEEK_SET); /* ignore error here */
-
- return (i);
-}
-
-#endif /* LOCKF_EMULATE_FLOCK */
diff --git a/contrib/perl5/proto.h b/contrib/perl5/proto.h
deleted file mode 100644
index 8794951..0000000
--- a/contrib/perl5/proto.h
+++ /dev/null
@@ -1,1278 +0,0 @@
-/*
- * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- * This file is autogenerated from data in embed.pl. Edit that file
- * and run 'make regen_headers' to effect changes.
- */
-
-
-
-START_EXTERN_C
-
-#if defined(PERL_IMPLICIT_SYS)
-PERL_CALLCONV PerlInterpreter* perl_alloc_using(struct IPerlMem* m, struct IPerlMem* ms, struct IPerlMem* mp, struct IPerlEnv* e, struct IPerlStdIO* io, struct IPerlLIO* lio, struct IPerlDir* d, struct IPerlSock* s, struct IPerlProc* p);
-#endif
-PERL_CALLCONV PerlInterpreter* perl_alloc(void);
-PERL_CALLCONV void perl_construct(PerlInterpreter* interp);
-PERL_CALLCONV void perl_destruct(PerlInterpreter* interp);
-PERL_CALLCONV void perl_free(PerlInterpreter* interp);
-PERL_CALLCONV int perl_run(PerlInterpreter* interp);
-PERL_CALLCONV int perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env);
-#if defined(USE_ITHREADS)
-PERL_CALLCONV PerlInterpreter* perl_clone(PerlInterpreter* interp, UV flags);
-# if defined(PERL_IMPLICIT_SYS)
-PERL_CALLCONV PerlInterpreter* perl_clone_using(PerlInterpreter *interp, UV flags, struct IPerlMem* m, struct IPerlMem* ms, struct IPerlMem* mp, struct IPerlEnv* e, struct IPerlStdIO* io, struct IPerlLIO* lio, struct IPerlDir* d, struct IPerlSock* s, struct IPerlProc* p);
-# endif
-#endif
-
-#if defined(MYMALLOC)
-PERL_CALLCONV Malloc_t Perl_malloc(MEM_SIZE nbytes);
-PERL_CALLCONV Malloc_t Perl_calloc(MEM_SIZE elements, MEM_SIZE size);
-PERL_CALLCONV Malloc_t Perl_realloc(Malloc_t where, MEM_SIZE nbytes);
-PERL_CALLCONV Free_t Perl_mfree(Malloc_t where);
-PERL_CALLCONV MEM_SIZE Perl_malloced_size(void *p);
-#endif
-
-PERL_CALLCONV void* Perl_get_context(void);
-PERL_CALLCONV void Perl_set_context(void *thx);
-
-END_EXTERN_C
-
-/* functions with flag 'n' should come before here */
-#if defined(PERL_OBJECT)
-class CPerlObj {
-public:
- struct interpreter interp;
- CPerlObj(IPerlMem*, IPerlMem*, IPerlMem*, IPerlEnv*, IPerlStdIO*,
- IPerlLIO*, IPerlDir*, IPerlSock*, IPerlProc*);
- void* operator new(size_t nSize, IPerlMem *pvtbl);
-#ifndef __BORLANDC__
- static void operator delete(void* pPerl, IPerlMem *pvtbl);
-#endif
- int do_aspawn (void *vreally, void **vmark, void **vsp);
-#endif
-#if defined(PERL_OBJECT)
-public:
-#else
-START_EXTERN_C
-#endif
-# include "pp_proto.h"
-PERL_CALLCONV SV* Perl_amagic_call(pTHX_ SV* left, SV* right, int method, int dir);
-PERL_CALLCONV bool Perl_Gv_AMupdate(pTHX_ HV* stash);
-PERL_CALLCONV OP* Perl_append_elem(pTHX_ I32 optype, OP* head, OP* tail);
-PERL_CALLCONV OP* Perl_append_list(pTHX_ I32 optype, LISTOP* first, LISTOP* last);
-PERL_CALLCONV I32 Perl_apply(pTHX_ I32 type, SV** mark, SV** sp);
-PERL_CALLCONV void Perl_apply_attrs_string(pTHX_ char *stashpv, CV *cv, char *attrstr, STRLEN len);
-PERL_CALLCONV SV* Perl_avhv_delete_ent(pTHX_ AV *ar, SV* keysv, I32 flags, U32 hash);
-PERL_CALLCONV bool Perl_avhv_exists_ent(pTHX_ AV *ar, SV* keysv, U32 hash);
-PERL_CALLCONV SV** Perl_avhv_fetch_ent(pTHX_ AV *ar, SV* keysv, I32 lval, U32 hash);
-PERL_CALLCONV SV** Perl_avhv_store_ent(pTHX_ AV *ar, SV* keysv, SV* val, U32 hash);
-PERL_CALLCONV HE* Perl_avhv_iternext(pTHX_ AV *ar);
-PERL_CALLCONV SV* Perl_avhv_iterval(pTHX_ AV *ar, HE* entry);
-PERL_CALLCONV HV* Perl_avhv_keys(pTHX_ AV *ar);
-PERL_CALLCONV void Perl_av_clear(pTHX_ AV* ar);
-PERL_CALLCONV SV* Perl_av_delete(pTHX_ AV* ar, I32 key, I32 flags);
-PERL_CALLCONV bool Perl_av_exists(pTHX_ AV* ar, I32 key);
-PERL_CALLCONV void Perl_av_extend(pTHX_ AV* ar, I32 key);
-PERL_CALLCONV AV* Perl_av_fake(pTHX_ I32 size, SV** svp);
-PERL_CALLCONV SV** Perl_av_fetch(pTHX_ AV* ar, I32 key, I32 lval);
-PERL_CALLCONV void Perl_av_fill(pTHX_ AV* ar, I32 fill);
-PERL_CALLCONV I32 Perl_av_len(pTHX_ AV* ar);
-PERL_CALLCONV AV* Perl_av_make(pTHX_ I32 size, SV** svp);
-PERL_CALLCONV SV* Perl_av_pop(pTHX_ AV* ar);
-PERL_CALLCONV void Perl_av_push(pTHX_ AV* ar, SV* val);
-PERL_CALLCONV void Perl_av_reify(pTHX_ AV* ar);
-PERL_CALLCONV SV* Perl_av_shift(pTHX_ AV* ar);
-PERL_CALLCONV SV** Perl_av_store(pTHX_ AV* ar, I32 key, SV* val);
-PERL_CALLCONV void Perl_av_undef(pTHX_ AV* ar);
-PERL_CALLCONV void Perl_av_unshift(pTHX_ AV* ar, I32 num);
-PERL_CALLCONV OP* Perl_bind_match(pTHX_ I32 type, OP* left, OP* pat);
-PERL_CALLCONV OP* Perl_block_end(pTHX_ I32 floor, OP* seq);
-PERL_CALLCONV I32 Perl_block_gimme(pTHX);
-PERL_CALLCONV int Perl_block_start(pTHX_ int full);
-PERL_CALLCONV void Perl_boot_core_UNIVERSAL(pTHX);
-PERL_CALLCONV void Perl_call_list(pTHX_ I32 oldscope, AV* av_list);
-PERL_CALLCONV bool Perl_cando(pTHX_ Mode_t mode, Uid_t effective, Stat_t* statbufp);
-PERL_CALLCONV U32 Perl_cast_ulong(pTHX_ NV f);
-PERL_CALLCONV I32 Perl_cast_i32(pTHX_ NV f);
-PERL_CALLCONV IV Perl_cast_iv(pTHX_ NV f);
-PERL_CALLCONV UV Perl_cast_uv(pTHX_ NV f);
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-PERL_CALLCONV I32 Perl_my_chsize(pTHX_ int fd, Off_t length);
-#endif
-#if defined(USE_THREADS)
-PERL_CALLCONV MAGIC* Perl_condpair_magic(pTHX_ SV *sv);
-#endif
-PERL_CALLCONV OP* Perl_convert(pTHX_ I32 optype, I32 flags, OP* o);
-PERL_CALLCONV void Perl_croak(pTHX_ const char* pat, ...) __attribute__((noreturn))
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_1,pTHX_2)))
-#endif
-;
-PERL_CALLCONV void Perl_vcroak(pTHX_ const char* pat, va_list* args) __attribute__((noreturn));
-#if defined(PERL_IMPLICIT_CONTEXT)
-PERL_CALLCONV void Perl_croak_nocontext(const char* pat, ...) __attribute__((noreturn))
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,1,2)))
-#endif
-;
-PERL_CALLCONV OP* Perl_die_nocontext(const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,1,2)))
-#endif
-;
-PERL_CALLCONV void Perl_deb_nocontext(const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,1,2)))
-#endif
-;
-PERL_CALLCONV char* Perl_form_nocontext(const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,1,2)))
-#endif
-;
-PERL_CALLCONV void Perl_load_module_nocontext(U32 flags, SV* name, SV* ver, ...);
-PERL_CALLCONV SV* Perl_mess_nocontext(const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,1,2)))
-#endif
-;
-PERL_CALLCONV void Perl_warn_nocontext(const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,1,2)))
-#endif
-;
-PERL_CALLCONV void Perl_warner_nocontext(U32 err, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,2,3)))
-#endif
-;
-PERL_CALLCONV SV* Perl_newSVpvf_nocontext(const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,1,2)))
-#endif
-;
-PERL_CALLCONV void Perl_sv_catpvf_nocontext(SV* sv, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,2,3)))
-#endif
-;
-PERL_CALLCONV void Perl_sv_setpvf_nocontext(SV* sv, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,2,3)))
-#endif
-;
-PERL_CALLCONV void Perl_sv_catpvf_mg_nocontext(SV* sv, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,2,3)))
-#endif
-;
-PERL_CALLCONV void Perl_sv_setpvf_mg_nocontext(SV* sv, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,2,3)))
-#endif
-;
-PERL_CALLCONV int Perl_fprintf_nocontext(PerlIO* stream, const char* fmt, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,2,3)))
-#endif
-;
-PERL_CALLCONV int Perl_printf_nocontext(const char* fmt, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,1,2)))
-#endif
-;
-#endif
-PERL_CALLCONV void Perl_cv_ckproto(pTHX_ CV* cv, GV* gv, char* p);
-PERL_CALLCONV CV* Perl_cv_clone(pTHX_ CV* proto);
-PERL_CALLCONV SV* Perl_cv_const_sv(pTHX_ CV* cv);
-PERL_CALLCONV SV* Perl_op_const_sv(pTHX_ OP* o, CV* cv);
-PERL_CALLCONV void Perl_cv_undef(pTHX_ CV* cv);
-PERL_CALLCONV void Perl_cx_dump(pTHX_ PERL_CONTEXT* cs);
-PERL_CALLCONV SV* Perl_filter_add(pTHX_ filter_t funcp, SV* datasv);
-PERL_CALLCONV void Perl_filter_del(pTHX_ filter_t funcp);
-PERL_CALLCONV I32 Perl_filter_read(pTHX_ int idx, SV* buffer, int maxlen);
-PERL_CALLCONV char** Perl_get_op_descs(pTHX);
-PERL_CALLCONV char** Perl_get_op_names(pTHX);
-PERL_CALLCONV char* Perl_get_no_modify(pTHX);
-PERL_CALLCONV U32* Perl_get_opargs(pTHX);
-PERL_CALLCONV PPADDR_t* Perl_get_ppaddr(pTHX);
-PERL_CALLCONV I32 Perl_cxinc(pTHX);
-PERL_CALLCONV void Perl_deb(pTHX_ const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_1,pTHX_2)))
-#endif
-;
-PERL_CALLCONV void Perl_vdeb(pTHX_ const char* pat, va_list* args);
-PERL_CALLCONV void Perl_debprofdump(pTHX);
-PERL_CALLCONV I32 Perl_debop(pTHX_ OP* o);
-PERL_CALLCONV I32 Perl_debstack(pTHX);
-PERL_CALLCONV I32 Perl_debstackptrs(pTHX);
-PERL_CALLCONV char* Perl_delimcpy(pTHX_ char* to, char* toend, char* from, char* fromend, int delim, I32* retlen);
-PERL_CALLCONV void Perl_deprecate(pTHX_ char* s);
-PERL_CALLCONV OP* Perl_die(pTHX_ const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_1,pTHX_2)))
-#endif
-;
-PERL_CALLCONV OP* Perl_vdie(pTHX_ const char* pat, va_list* args);
-PERL_CALLCONV OP* Perl_die_where(pTHX_ char* message, STRLEN msglen);
-PERL_CALLCONV void Perl_dounwind(pTHX_ I32 cxix);
-PERL_CALLCONV bool Perl_do_aexec(pTHX_ SV* really, SV** mark, SV** sp);
-PERL_CALLCONV bool Perl_do_aexec5(pTHX_ SV* really, SV** mark, SV** sp, int fd, int flag);
-PERL_CALLCONV int Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode);
-PERL_CALLCONV void Perl_do_chop(pTHX_ SV* asv, SV* sv);
-PERL_CALLCONV bool Perl_do_close(pTHX_ GV* gv, bool not_implicit);
-PERL_CALLCONV bool Perl_do_eof(pTHX_ GV* gv);
-PERL_CALLCONV bool Perl_do_exec(pTHX_ char* cmd);
-#if !defined(WIN32)
-PERL_CALLCONV bool Perl_do_exec3(pTHX_ char* cmd, int fd, int flag);
-#endif
-PERL_CALLCONV void Perl_do_execfree(pTHX);
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-PERL_CALLCONV I32 Perl_do_ipcctl(pTHX_ I32 optype, SV** mark, SV** sp);
-PERL_CALLCONV I32 Perl_do_ipcget(pTHX_ I32 optype, SV** mark, SV** sp);
-PERL_CALLCONV I32 Perl_do_msgrcv(pTHX_ SV** mark, SV** sp);
-PERL_CALLCONV I32 Perl_do_msgsnd(pTHX_ SV** mark, SV** sp);
-PERL_CALLCONV I32 Perl_do_semop(pTHX_ SV** mark, SV** sp);
-PERL_CALLCONV I32 Perl_do_shmio(pTHX_ I32 optype, SV** mark, SV** sp);
-#endif
-PERL_CALLCONV void Perl_do_join(pTHX_ SV* sv, SV* del, SV** mark, SV** sp);
-PERL_CALLCONV OP* Perl_do_kv(pTHX);
-PERL_CALLCONV bool Perl_do_open(pTHX_ GV* gv, char* name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO* supplied_fp);
-PERL_CALLCONV bool Perl_do_open9(pTHX_ GV *gv, char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num);
-PERL_CALLCONV void Perl_do_pipe(pTHX_ SV* sv, GV* rgv, GV* wgv);
-PERL_CALLCONV bool Perl_do_print(pTHX_ SV* sv, PerlIO* fp);
-PERL_CALLCONV OP* Perl_do_readline(pTHX);
-PERL_CALLCONV I32 Perl_do_chomp(pTHX_ SV* sv);
-PERL_CALLCONV bool Perl_do_seek(pTHX_ GV* gv, Off_t pos, int whence);
-PERL_CALLCONV void Perl_do_sprintf(pTHX_ SV* sv, I32 len, SV** sarg);
-PERL_CALLCONV Off_t Perl_do_sysseek(pTHX_ GV* gv, Off_t pos, int whence);
-PERL_CALLCONV Off_t Perl_do_tell(pTHX_ GV* gv);
-PERL_CALLCONV I32 Perl_do_trans(pTHX_ SV* sv);
-PERL_CALLCONV UV Perl_do_vecget(pTHX_ SV* sv, I32 offset, I32 size);
-PERL_CALLCONV void Perl_do_vecset(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_do_vop(pTHX_ I32 optype, SV* sv, SV* left, SV* right);
-PERL_CALLCONV OP* Perl_dofile(pTHX_ OP* term);
-PERL_CALLCONV I32 Perl_dowantarray(pTHX);
-PERL_CALLCONV void Perl_dump_all(pTHX);
-PERL_CALLCONV void Perl_dump_eval(pTHX);
-#if defined(DUMP_FDS)
-PERL_CALLCONV void Perl_dump_fds(pTHX_ char* s);
-#endif
-PERL_CALLCONV void Perl_dump_form(pTHX_ GV* gv);
-PERL_CALLCONV void Perl_gv_dump(pTHX_ GV* gv);
-PERL_CALLCONV void Perl_op_dump(pTHX_ OP* arg);
-PERL_CALLCONV void Perl_pmop_dump(pTHX_ PMOP* pm);
-PERL_CALLCONV void Perl_dump_packsubs(pTHX_ HV* stash);
-PERL_CALLCONV void Perl_dump_sub(pTHX_ GV* gv);
-PERL_CALLCONV void Perl_fbm_compile(pTHX_ SV* sv, U32 flags);
-PERL_CALLCONV char* Perl_fbm_instr(pTHX_ unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags);
-PERL_CALLCONV char* Perl_find_script(pTHX_ char *scriptname, bool dosearch, char **search_ext, I32 flags);
-#if defined(USE_THREADS)
-PERL_CALLCONV PADOFFSET Perl_find_threadsv(pTHX_ const char *name);
-#endif
-PERL_CALLCONV OP* Perl_force_list(pTHX_ OP* arg);
-PERL_CALLCONV OP* Perl_fold_constants(pTHX_ OP* arg);
-PERL_CALLCONV char* Perl_form(pTHX_ const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_1,pTHX_2)))
-#endif
-;
-PERL_CALLCONV char* Perl_vform(pTHX_ const char* pat, va_list* args);
-PERL_CALLCONV void Perl_free_tmps(pTHX);
-PERL_CALLCONV OP* Perl_gen_constant_list(pTHX_ OP* o);
-#if !defined(HAS_GETENV_LEN)
-PERL_CALLCONV char* Perl_getenv_len(pTHX_ const char* key, unsigned long *len);
-#endif
-PERL_CALLCONV void Perl_gp_free(pTHX_ GV* gv);
-PERL_CALLCONV GP* Perl_gp_ref(pTHX_ GP* gp);
-PERL_CALLCONV GV* Perl_gv_AVadd(pTHX_ GV* gv);
-PERL_CALLCONV GV* Perl_gv_HVadd(pTHX_ GV* gv);
-PERL_CALLCONV GV* Perl_gv_IOadd(pTHX_ GV* gv);
-PERL_CALLCONV GV* Perl_gv_autoload4(pTHX_ HV* stash, const char* name, STRLEN len, I32 method);
-PERL_CALLCONV void Perl_gv_check(pTHX_ HV* stash);
-PERL_CALLCONV void Perl_gv_efullname(pTHX_ SV* sv, GV* gv);
-PERL_CALLCONV void Perl_gv_efullname3(pTHX_ SV* sv, GV* gv, const char* prefix);
-PERL_CALLCONV void Perl_gv_efullname4(pTHX_ SV* sv, GV* gv, const char* prefix, bool keepmain);
-PERL_CALLCONV GV* Perl_gv_fetchfile(pTHX_ const char* name);
-PERL_CALLCONV GV* Perl_gv_fetchmeth(pTHX_ HV* stash, const char* name, STRLEN len, I32 level);
-PERL_CALLCONV GV* Perl_gv_fetchmethod(pTHX_ HV* stash, const char* name);
-PERL_CALLCONV GV* Perl_gv_fetchmethod_autoload(pTHX_ HV* stash, const char* name, I32 autoload);
-PERL_CALLCONV GV* Perl_gv_fetchpv(pTHX_ const char* name, I32 add, I32 sv_type);
-PERL_CALLCONV void Perl_gv_fullname(pTHX_ SV* sv, GV* gv);
-PERL_CALLCONV void Perl_gv_fullname3(pTHX_ SV* sv, GV* gv, const char* prefix);
-PERL_CALLCONV void Perl_gv_fullname4(pTHX_ SV* sv, GV* gv, const char* prefix, bool keepmain);
-PERL_CALLCONV void Perl_gv_init(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, int multi);
-PERL_CALLCONV HV* Perl_gv_stashpv(pTHX_ const char* name, I32 create);
-PERL_CALLCONV HV* Perl_gv_stashpvn(pTHX_ const char* name, U32 namelen, I32 create);
-PERL_CALLCONV HV* Perl_gv_stashsv(pTHX_ SV* sv, I32 create);
-PERL_CALLCONV void Perl_hv_clear(pTHX_ HV* tb);
-PERL_CALLCONV void Perl_hv_delayfree_ent(pTHX_ HV* hv, HE* entry);
-PERL_CALLCONV SV* Perl_hv_delete(pTHX_ HV* tb, const char* key, U32 klen, I32 flags);
-PERL_CALLCONV SV* Perl_hv_delete_ent(pTHX_ HV* tb, SV* key, I32 flags, U32 hash);
-PERL_CALLCONV bool Perl_hv_exists(pTHX_ HV* tb, const char* key, U32 klen);
-PERL_CALLCONV bool Perl_hv_exists_ent(pTHX_ HV* tb, SV* key, U32 hash);
-PERL_CALLCONV SV** Perl_hv_fetch(pTHX_ HV* tb, const char* key, U32 klen, I32 lval);
-PERL_CALLCONV HE* Perl_hv_fetch_ent(pTHX_ HV* tb, SV* key, I32 lval, U32 hash);
-PERL_CALLCONV void Perl_hv_free_ent(pTHX_ HV* hv, HE* entry);
-PERL_CALLCONV I32 Perl_hv_iterinit(pTHX_ HV* tb);
-PERL_CALLCONV char* Perl_hv_iterkey(pTHX_ HE* entry, I32* retlen);
-PERL_CALLCONV SV* Perl_hv_iterkeysv(pTHX_ HE* entry);
-PERL_CALLCONV HE* Perl_hv_iternext(pTHX_ HV* tb);
-PERL_CALLCONV SV* Perl_hv_iternextsv(pTHX_ HV* hv, char** key, I32* retlen);
-PERL_CALLCONV SV* Perl_hv_iterval(pTHX_ HV* tb, HE* entry);
-PERL_CALLCONV void Perl_hv_ksplit(pTHX_ HV* hv, IV newmax);
-PERL_CALLCONV void Perl_hv_magic(pTHX_ HV* hv, GV* gv, int how);
-PERL_CALLCONV SV** Perl_hv_store(pTHX_ HV* tb, const char* key, U32 klen, SV* val, U32 hash);
-PERL_CALLCONV HE* Perl_hv_store_ent(pTHX_ HV* tb, SV* key, SV* val, U32 hash);
-PERL_CALLCONV void Perl_hv_undef(pTHX_ HV* tb);
-PERL_CALLCONV I32 Perl_ibcmp(pTHX_ const char* a, const char* b, I32 len);
-PERL_CALLCONV I32 Perl_ibcmp_locale(pTHX_ const char* a, const char* b, I32 len);
-PERL_CALLCONV bool Perl_ingroup(pTHX_ Gid_t testgid, Uid_t effective);
-PERL_CALLCONV void Perl_init_debugger(pTHX);
-PERL_CALLCONV void Perl_init_stacks(pTHX);
-PERL_CALLCONV U32 Perl_intro_my(pTHX);
-PERL_CALLCONV char* Perl_instr(pTHX_ const char* big, const char* little);
-PERL_CALLCONV bool Perl_io_close(pTHX_ IO* io, bool not_implicit);
-PERL_CALLCONV OP* Perl_invert(pTHX_ OP* cmd);
-PERL_CALLCONV bool Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags);
-PERL_CALLCONV I32 Perl_is_lvalue_sub(pTHX);
-PERL_CALLCONV bool Perl_is_uni_alnum(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_alnumc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_idfirst(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_alpha(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_ascii(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_space(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_cntrl(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_graph(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_digit(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_upper(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_lower(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_print(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_punct(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_xdigit(pTHX_ U32 c);
-PERL_CALLCONV U32 Perl_to_uni_upper(pTHX_ U32 c);
-PERL_CALLCONV U32 Perl_to_uni_title(pTHX_ U32 c);
-PERL_CALLCONV U32 Perl_to_uni_lower(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_alnum_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_alnumc_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_idfirst_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_alpha_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_ascii_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_space_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_cntrl_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_graph_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_digit_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_upper_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_lower_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_print_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_punct_lc(pTHX_ U32 c);
-PERL_CALLCONV bool Perl_is_uni_xdigit_lc(pTHX_ U32 c);
-PERL_CALLCONV U32 Perl_to_uni_upper_lc(pTHX_ U32 c);
-PERL_CALLCONV U32 Perl_to_uni_title_lc(pTHX_ U32 c);
-PERL_CALLCONV U32 Perl_to_uni_lower_lc(pTHX_ U32 c);
-PERL_CALLCONV STRLEN Perl_is_utf8_char(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_string(pTHX_ U8 *s, STRLEN len);
-PERL_CALLCONV bool Perl_is_utf8_alnum(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_alnumc(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_idfirst(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_alpha(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_ascii(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_space(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_cntrl(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_digit(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_graph(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_upper(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_lower(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_print(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_punct(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_xdigit(pTHX_ U8 *p);
-PERL_CALLCONV bool Perl_is_utf8_mark(pTHX_ U8 *p);
-PERL_CALLCONV OP* Perl_jmaybe(pTHX_ OP* arg);
-PERL_CALLCONV I32 Perl_keyword(pTHX_ char* d, I32 len);
-PERL_CALLCONV void Perl_leave_scope(pTHX_ I32 base);
-PERL_CALLCONV void Perl_lex_end(pTHX);
-PERL_CALLCONV void Perl_lex_start(pTHX_ SV* line);
-PERL_CALLCONV OP* Perl_linklist(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_list(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_listkids(pTHX_ OP* o);
-PERL_CALLCONV void Perl_load_module(pTHX_ U32 flags, SV* name, SV* ver, ...);
-PERL_CALLCONV void Perl_vload_module(pTHX_ U32 flags, SV* name, SV* ver, va_list* args);
-PERL_CALLCONV OP* Perl_localize(pTHX_ OP* arg, I32 lexical);
-PERL_CALLCONV I32 Perl_looks_like_number(pTHX_ SV* sv);
-PERL_CALLCONV int Perl_magic_clearenv(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_clear_all_env(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_clearpack(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_clearsig(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_existspack(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_freeregexp(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_get(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getarylen(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getdefelem(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getglob(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getnkeys(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getpack(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getpos(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getsig(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getsubstr(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_gettaint(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getuvar(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_getvec(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV U32 Perl_magic_len(pTHX_ SV* sv, MAGIC* mg);
-#if defined(USE_THREADS)
-PERL_CALLCONV int Perl_magic_mutexfree(pTHX_ SV* sv, MAGIC* mg);
-#endif
-PERL_CALLCONV int Perl_magic_nextpack(pTHX_ SV* sv, MAGIC* mg, SV* key);
-PERL_CALLCONV U32 Perl_magic_regdata_cnt(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_regdatum_get(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_set(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setamagic(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setarylen(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setbm(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setdbline(pTHX_ SV* sv, MAGIC* mg);
-#if defined(USE_LOCALE_COLLATE)
-PERL_CALLCONV int Perl_magic_setcollxfrm(pTHX_ SV* sv, MAGIC* mg);
-#endif
-PERL_CALLCONV int Perl_magic_setdefelem(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setenv(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setfm(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setisa(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setglob(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setmglob(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setnkeys(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setpack(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setpos(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setsig(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setsubstr(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_settaint(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setuvar(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_setvec(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_set_all_env(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV U32 Perl_magic_sizepack(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV int Perl_magic_wipepack(pTHX_ SV* sv, MAGIC* mg);
-PERL_CALLCONV void Perl_magicname(pTHX_ char* sym, char* name, I32 namlen);
-PERL_CALLCONV void Perl_markstack_grow(pTHX);
-#if defined(USE_LOCALE_COLLATE)
-PERL_CALLCONV char* Perl_mem_collxfrm(pTHX_ const char* s, STRLEN len, STRLEN* xlen);
-#endif
-PERL_CALLCONV SV* Perl_mess(pTHX_ const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_1,pTHX_2)))
-#endif
-;
-PERL_CALLCONV SV* Perl_vmess(pTHX_ const char* pat, va_list* args);
-PERL_CALLCONV void Perl_qerror(pTHX_ SV* err);
-PERL_CALLCONV int Perl_mg_clear(pTHX_ SV* sv);
-PERL_CALLCONV int Perl_mg_copy(pTHX_ SV* sv, SV* nsv, const char* key, I32 klen);
-PERL_CALLCONV MAGIC* Perl_mg_find(pTHX_ SV* sv, int type);
-PERL_CALLCONV int Perl_mg_free(pTHX_ SV* sv);
-PERL_CALLCONV int Perl_mg_get(pTHX_ SV* sv);
-PERL_CALLCONV U32 Perl_mg_length(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_mg_magical(pTHX_ SV* sv);
-PERL_CALLCONV int Perl_mg_set(pTHX_ SV* sv);
-PERL_CALLCONV I32 Perl_mg_size(pTHX_ SV* sv);
-PERL_CALLCONV OP* Perl_mod(pTHX_ OP* o, I32 type);
-PERL_CALLCONV int Perl_mode_from_discipline(pTHX_ SV* discp);
-PERL_CALLCONV char* Perl_moreswitches(pTHX_ char* s);
-PERL_CALLCONV OP* Perl_my(pTHX_ OP* o);
-PERL_CALLCONV NV Perl_my_atof(pTHX_ const char *s);
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
-PERL_CALLCONV char* Perl_my_bcopy(const char* from, char* to, I32 len);
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-PERL_CALLCONV char* Perl_my_bzero(char* loc, I32 len);
-#endif
-PERL_CALLCONV void Perl_my_exit(pTHX_ U32 status) __attribute__((noreturn));
-PERL_CALLCONV void Perl_my_failure_exit(pTHX) __attribute__((noreturn));
-PERL_CALLCONV I32 Perl_my_fflush_all(pTHX);
-PERL_CALLCONV I32 Perl_my_lstat(pTHX);
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-PERL_CALLCONV I32 Perl_my_memcmp(const char* s1, const char* s2, I32 len);
-#endif
-#if !defined(HAS_MEMSET)
-PERL_CALLCONV void* Perl_my_memset(char* loc, I32 ch, I32 len);
-#endif
-#if !defined(PERL_OBJECT)
-PERL_CALLCONV I32 Perl_my_pclose(pTHX_ PerlIO* ptr);
-PERL_CALLCONV PerlIO* Perl_my_popen(pTHX_ char* cmd, char* mode);
-#endif
-PERL_CALLCONV void Perl_my_setenv(pTHX_ char* nam, char* val);
-PERL_CALLCONV I32 Perl_my_stat(pTHX);
-#if defined(MYSWAP)
-PERL_CALLCONV short Perl_my_swap(pTHX_ short s);
-PERL_CALLCONV long Perl_my_htonl(pTHX_ long l);
-PERL_CALLCONV long Perl_my_ntohl(pTHX_ long l);
-#endif
-PERL_CALLCONV void Perl_my_unexec(pTHX);
-PERL_CALLCONV OP* Perl_newANONLIST(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_newANONHASH(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_newANONSUB(pTHX_ I32 floor, OP* proto, OP* block);
-PERL_CALLCONV OP* Perl_newASSIGNOP(pTHX_ I32 flags, OP* left, I32 optype, OP* right);
-PERL_CALLCONV OP* Perl_newCONDOP(pTHX_ I32 flags, OP* expr, OP* trueop, OP* falseop);
-PERL_CALLCONV void Perl_newCONSTSUB(pTHX_ HV* stash, char* name, SV* sv);
-PERL_CALLCONV void Perl_newFORM(pTHX_ I32 floor, OP* o, OP* block);
-PERL_CALLCONV OP* Perl_newFOROP(pTHX_ I32 flags, char* label, line_t forline, OP* sclr, OP* expr, OP*block, OP*cont);
-PERL_CALLCONV OP* Perl_newLOGOP(pTHX_ I32 optype, I32 flags, OP* left, OP* right);
-PERL_CALLCONV OP* Perl_newLOOPEX(pTHX_ I32 type, OP* label);
-PERL_CALLCONV OP* Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP* expr, OP* block);
-PERL_CALLCONV OP* Perl_newNULLLIST(pTHX);
-PERL_CALLCONV OP* Perl_newOP(pTHX_ I32 optype, I32 flags);
-PERL_CALLCONV void Perl_newPROG(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_newRANGE(pTHX_ I32 flags, OP* left, OP* right);
-PERL_CALLCONV OP* Perl_newSLICEOP(pTHX_ I32 flags, OP* subscript, OP* listop);
-PERL_CALLCONV OP* Perl_newSTATEOP(pTHX_ I32 flags, char* label, OP* o);
-PERL_CALLCONV CV* Perl_newSUB(pTHX_ I32 floor, OP* o, OP* proto, OP* block);
-PERL_CALLCONV CV* Perl_newXS(pTHX_ char* name, XSUBADDR_t f, char* filename);
-PERL_CALLCONV AV* Perl_newAV(pTHX);
-PERL_CALLCONV OP* Perl_newAVREF(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_newBINOP(pTHX_ I32 type, I32 flags, OP* first, OP* last);
-PERL_CALLCONV OP* Perl_newCVREF(pTHX_ I32 flags, OP* o);
-PERL_CALLCONV OP* Perl_newGVOP(pTHX_ I32 type, I32 flags, GV* gv);
-PERL_CALLCONV GV* Perl_newGVgen(pTHX_ char* pack);
-PERL_CALLCONV OP* Perl_newGVREF(pTHX_ I32 type, OP* o);
-PERL_CALLCONV OP* Perl_newHVREF(pTHX_ OP* o);
-PERL_CALLCONV HV* Perl_newHV(pTHX);
-PERL_CALLCONV HV* Perl_newHVhv(pTHX_ HV* hv);
-PERL_CALLCONV IO* Perl_newIO(pTHX);
-PERL_CALLCONV OP* Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP* first, OP* last);
-PERL_CALLCONV OP* Perl_newPADOP(pTHX_ I32 type, I32 flags, SV* sv);
-PERL_CALLCONV OP* Perl_newPMOP(pTHX_ I32 type, I32 flags);
-PERL_CALLCONV OP* Perl_newPVOP(pTHX_ I32 type, I32 flags, char* pv);
-PERL_CALLCONV SV* Perl_newRV(pTHX_ SV* pref);
-PERL_CALLCONV SV* Perl_newRV_noinc(pTHX_ SV *sv);
-PERL_CALLCONV SV* Perl_newSV(pTHX_ STRLEN len);
-PERL_CALLCONV OP* Perl_newSVREF(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_newSVOP(pTHX_ I32 type, I32 flags, SV* sv);
-PERL_CALLCONV SV* Perl_newSViv(pTHX_ IV i);
-PERL_CALLCONV SV* Perl_newSVuv(pTHX_ UV u);
-PERL_CALLCONV SV* Perl_newSVnv(pTHX_ NV n);
-PERL_CALLCONV SV* Perl_newSVpv(pTHX_ const char* s, STRLEN len);
-PERL_CALLCONV SV* Perl_newSVpvn(pTHX_ const char* s, STRLEN len);
-PERL_CALLCONV SV* Perl_newSVpvf(pTHX_ const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_1,pTHX_2)))
-#endif
-;
-PERL_CALLCONV SV* Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args);
-PERL_CALLCONV SV* Perl_newSVrv(pTHX_ SV* rv, const char* classname);
-PERL_CALLCONV SV* Perl_newSVsv(pTHX_ SV* old);
-PERL_CALLCONV OP* Perl_newUNOP(pTHX_ I32 type, I32 flags, OP* first);
-PERL_CALLCONV OP* Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP* loop, I32 whileline, OP* expr, OP* block, OP* cont);
-
-PERL_CALLCONV PERL_SI* Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems);
-PERL_CALLCONV PerlIO* Perl_nextargv(pTHX_ GV* gv);
-PERL_CALLCONV char* Perl_ninstr(pTHX_ const char* big, const char* bigend, const char* little, const char* lend);
-PERL_CALLCONV OP* Perl_oopsCV(pTHX_ OP* o);
-PERL_CALLCONV void Perl_op_free(pTHX_ OP* arg);
-PERL_CALLCONV void Perl_package(pTHX_ OP* o);
-PERL_CALLCONV PADOFFSET Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype);
-PERL_CALLCONV PADOFFSET Perl_pad_allocmy(pTHX_ char* name);
-PERL_CALLCONV PADOFFSET Perl_pad_findmy(pTHX_ char* name);
-PERL_CALLCONV OP* Perl_oopsAV(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_oopsHV(pTHX_ OP* o);
-PERL_CALLCONV void Perl_pad_leavemy(pTHX_ I32 fill);
-PERL_CALLCONV SV* Perl_pad_sv(pTHX_ PADOFFSET po);
-PERL_CALLCONV void Perl_pad_free(pTHX_ PADOFFSET po);
-PERL_CALLCONV void Perl_pad_reset(pTHX);
-PERL_CALLCONV void Perl_pad_swipe(pTHX_ PADOFFSET po);
-PERL_CALLCONV void Perl_peep(pTHX_ OP* o);
-#if defined(PERL_OBJECT)
-PERL_CALLCONV void Perl_construct(pTHX);
-PERL_CALLCONV void Perl_destruct(pTHX);
-PERL_CALLCONV void Perl_free(pTHX);
-PERL_CALLCONV int Perl_run(pTHX);
-PERL_CALLCONV int Perl_parse(pTHX_ XSINIT_t xsinit, int argc, char** argv, char** env);
-#endif
-#if defined(USE_THREADS)
-PERL_CALLCONV struct perl_thread* Perl_new_struct_thread(pTHX_ struct perl_thread *t);
-#endif
-PERL_CALLCONV void Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr);
-PERL_CALLCONV I32 Perl_call_argv(pTHX_ const char* sub_name, I32 flags, char** argv);
-PERL_CALLCONV I32 Perl_call_method(pTHX_ const char* methname, I32 flags);
-PERL_CALLCONV I32 Perl_call_pv(pTHX_ const char* sub_name, I32 flags);
-PERL_CALLCONV I32 Perl_call_sv(pTHX_ SV* sv, I32 flags);
-PERL_CALLCONV SV* Perl_eval_pv(pTHX_ const char* p, I32 croak_on_error);
-PERL_CALLCONV I32 Perl_eval_sv(pTHX_ SV* sv, I32 flags);
-PERL_CALLCONV SV* Perl_get_sv(pTHX_ const char* name, I32 create);
-PERL_CALLCONV AV* Perl_get_av(pTHX_ const char* name, I32 create);
-PERL_CALLCONV HV* Perl_get_hv(pTHX_ const char* name, I32 create);
-PERL_CALLCONV CV* Perl_get_cv(pTHX_ const char* name, I32 create);
-PERL_CALLCONV int Perl_init_i18nl10n(pTHX_ int printwarn);
-PERL_CALLCONV int Perl_init_i18nl14n(pTHX_ int printwarn);
-PERL_CALLCONV void Perl_new_collate(pTHX_ char* newcoll);
-PERL_CALLCONV void Perl_new_ctype(pTHX_ char* newctype);
-PERL_CALLCONV void Perl_new_numeric(pTHX_ char* newcoll);
-PERL_CALLCONV void Perl_set_numeric_local(pTHX);
-PERL_CALLCONV void Perl_set_numeric_radix(pTHX);
-PERL_CALLCONV void Perl_set_numeric_standard(pTHX);
-PERL_CALLCONV void Perl_require_pv(pTHX_ const char* pv);
-PERL_CALLCONV void Perl_pidgone(pTHX_ Pid_t pid, int status);
-PERL_CALLCONV void Perl_pmflag(pTHX_ U16* pmfl, int ch);
-PERL_CALLCONV OP* Perl_pmruntime(pTHX_ OP* pm, OP* expr, OP* repl);
-PERL_CALLCONV OP* Perl_pmtrans(pTHX_ OP* o, OP* expr, OP* repl);
-PERL_CALLCONV OP* Perl_pop_return(pTHX);
-PERL_CALLCONV void Perl_pop_scope(pTHX);
-PERL_CALLCONV OP* Perl_prepend_elem(pTHX_ I32 optype, OP* head, OP* tail);
-PERL_CALLCONV void Perl_push_return(pTHX_ OP* o);
-PERL_CALLCONV void Perl_push_scope(pTHX);
-PERL_CALLCONV OP* Perl_ref(pTHX_ OP* o, I32 type);
-PERL_CALLCONV OP* Perl_refkids(pTHX_ OP* o, I32 type);
-PERL_CALLCONV void Perl_regdump(pTHX_ regexp* r);
-PERL_CALLCONV I32 Perl_pregexec(pTHX_ regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, U32 nosave);
-PERL_CALLCONV void Perl_pregfree(pTHX_ struct regexp* r);
-PERL_CALLCONV regexp* Perl_pregcomp(pTHX_ char* exp, char* xend, PMOP* pm);
-PERL_CALLCONV char* Perl_re_intuit_start(pTHX_ regexp* prog, SV* sv, char* strpos, char* strend, U32 flags, struct re_scream_pos_data_s *data);
-PERL_CALLCONV SV* Perl_re_intuit_string(pTHX_ regexp* prog);
-PERL_CALLCONV I32 Perl_regexec_flags(pTHX_ regexp* prog, char* stringarg, char* strend, char* strbeg, I32 minend, SV* screamer, void* data, U32 flags);
-PERL_CALLCONV regnode* Perl_regnext(pTHX_ regnode* p);
-PERL_CALLCONV void Perl_regprop(pTHX_ SV* sv, regnode* o);
-PERL_CALLCONV void Perl_repeatcpy(pTHX_ char* to, const char* from, I32 len, I32 count);
-PERL_CALLCONV char* Perl_rninstr(pTHX_ const char* big, const char* bigend, const char* little, const char* lend);
-PERL_CALLCONV Sighandler_t Perl_rsignal(pTHX_ int i, Sighandler_t t);
-PERL_CALLCONV int Perl_rsignal_restore(pTHX_ int i, Sigsave_t* t);
-PERL_CALLCONV int Perl_rsignal_save(pTHX_ int i, Sighandler_t t1, Sigsave_t* t2);
-PERL_CALLCONV Sighandler_t Perl_rsignal_state(pTHX_ int i);
-PERL_CALLCONV void Perl_rxres_free(pTHX_ void** rsp);
-PERL_CALLCONV void Perl_rxres_restore(pTHX_ void** rsp, REGEXP* prx);
-PERL_CALLCONV void Perl_rxres_save(pTHX_ void** rsp, REGEXP* prx);
-#if !defined(HAS_RENAME)
-PERL_CALLCONV I32 Perl_same_dirent(pTHX_ char* a, char* b);
-#endif
-PERL_CALLCONV char* Perl_savepv(pTHX_ const char* sv);
-PERL_CALLCONV char* Perl_savepvn(pTHX_ const char* sv, I32 len);
-PERL_CALLCONV void Perl_savestack_grow(pTHX);
-PERL_CALLCONV void Perl_save_aelem(pTHX_ AV* av, I32 idx, SV **sptr);
-PERL_CALLCONV I32 Perl_save_alloc(pTHX_ I32 size, I32 pad);
-PERL_CALLCONV void Perl_save_aptr(pTHX_ AV** aptr);
-PERL_CALLCONV AV* Perl_save_ary(pTHX_ GV* gv);
-PERL_CALLCONV void Perl_save_clearsv(pTHX_ SV** svp);
-PERL_CALLCONV void Perl_save_delete(pTHX_ HV* hv, char* key, I32 klen);
-PERL_CALLCONV void Perl_save_destructor(pTHX_ DESTRUCTORFUNC_NOCONTEXT_t f, void* p);
-PERL_CALLCONV void Perl_save_destructor_x(pTHX_ DESTRUCTORFUNC_t f, void* p);
-PERL_CALLCONV void Perl_save_freesv(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_save_freeop(pTHX_ OP* o);
-PERL_CALLCONV void Perl_save_freepv(pTHX_ char* pv);
-PERL_CALLCONV void Perl_save_generic_svref(pTHX_ SV** sptr);
-PERL_CALLCONV void Perl_save_generic_pvref(pTHX_ char** str);
-PERL_CALLCONV void Perl_save_gp(pTHX_ GV* gv, I32 empty);
-PERL_CALLCONV HV* Perl_save_hash(pTHX_ GV* gv);
-PERL_CALLCONV void Perl_save_helem(pTHX_ HV* hv, SV *key, SV **sptr);
-PERL_CALLCONV void Perl_save_hints(pTHX);
-PERL_CALLCONV void Perl_save_hptr(pTHX_ HV** hptr);
-PERL_CALLCONV void Perl_save_I16(pTHX_ I16* intp);
-PERL_CALLCONV void Perl_save_I32(pTHX_ I32* intp);
-PERL_CALLCONV void Perl_save_I8(pTHX_ I8* bytep);
-PERL_CALLCONV void Perl_save_int(pTHX_ int* intp);
-PERL_CALLCONV void Perl_save_item(pTHX_ SV* item);
-PERL_CALLCONV void Perl_save_iv(pTHX_ IV* iv);
-PERL_CALLCONV void Perl_save_list(pTHX_ SV** sarg, I32 maxsarg);
-PERL_CALLCONV void Perl_save_long(pTHX_ long* longp);
-PERL_CALLCONV void Perl_save_mortalizesv(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_save_nogv(pTHX_ GV* gv);
-PERL_CALLCONV void Perl_save_op(pTHX);
-PERL_CALLCONV SV* Perl_save_scalar(pTHX_ GV* gv);
-PERL_CALLCONV void Perl_save_pptr(pTHX_ char** pptr);
-PERL_CALLCONV void Perl_save_vptr(pTHX_ void* pptr);
-PERL_CALLCONV void Perl_save_re_context(pTHX);
-PERL_CALLCONV void Perl_save_padsv(pTHX_ PADOFFSET off);
-PERL_CALLCONV void Perl_save_sptr(pTHX_ SV** sptr);
-PERL_CALLCONV SV* Perl_save_svref(pTHX_ SV** sptr);
-PERL_CALLCONV SV** Perl_save_threadsv(pTHX_ PADOFFSET i);
-PERL_CALLCONV OP* Perl_sawparens(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_scalar(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_scalarkids(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_scalarseq(pTHX_ OP* o);
-PERL_CALLCONV OP* Perl_scalarvoid(pTHX_ OP* o);
-PERL_CALLCONV NV Perl_scan_bin(pTHX_ char* start, STRLEN len, STRLEN* retlen);
-PERL_CALLCONV NV Perl_scan_hex(pTHX_ char* start, STRLEN len, STRLEN* retlen);
-PERL_CALLCONV char* Perl_scan_num(pTHX_ char* s, YYSTYPE *lvalp);
-PERL_CALLCONV NV Perl_scan_oct(pTHX_ char* start, STRLEN len, STRLEN* retlen);
-PERL_CALLCONV OP* Perl_scope(pTHX_ OP* o);
-PERL_CALLCONV char* Perl_screaminstr(pTHX_ SV* bigsv, SV* littlesv, I32 start_shift, I32 end_shift, I32 *state, I32 last);
-#if !defined(VMS)
-PERL_CALLCONV I32 Perl_setenv_getix(pTHX_ char* nam);
-#endif
-PERL_CALLCONV void Perl_setdefout(pTHX_ GV* gv);
-PERL_CALLCONV char* Perl_sharepvn(pTHX_ const char* sv, I32 len, U32 hash);
-PERL_CALLCONV HEK* Perl_share_hek(pTHX_ const char* sv, I32 len, U32 hash);
-PERL_CALLCONV Signal_t Perl_sighandler(int sig);
-PERL_CALLCONV SV** Perl_stack_grow(pTHX_ SV** sp, SV**p, int n);
-PERL_CALLCONV I32 Perl_start_subparse(pTHX_ I32 is_format, U32 flags);
-PERL_CALLCONV void Perl_sub_crush_depth(pTHX_ CV* cv);
-PERL_CALLCONV bool Perl_sv_2bool(pTHX_ SV* sv);
-PERL_CALLCONV CV* Perl_sv_2cv(pTHX_ SV* sv, HV** st, GV** gvp, I32 lref);
-PERL_CALLCONV IO* Perl_sv_2io(pTHX_ SV* sv);
-PERL_CALLCONV IV Perl_sv_2iv(pTHX_ SV* sv);
-PERL_CALLCONV SV* Perl_sv_2mortal(pTHX_ SV* sv);
-PERL_CALLCONV NV Perl_sv_2nv(pTHX_ SV* sv);
-PERL_CALLCONV char* Perl_sv_2pv(pTHX_ SV* sv, STRLEN* lp);
-PERL_CALLCONV char* Perl_sv_2pvutf8(pTHX_ SV* sv, STRLEN* lp);
-PERL_CALLCONV char* Perl_sv_2pvbyte(pTHX_ SV* sv, STRLEN* lp);
-PERL_CALLCONV UV Perl_sv_2uv(pTHX_ SV* sv);
-PERL_CALLCONV IV Perl_sv_iv(pTHX_ SV* sv);
-PERL_CALLCONV UV Perl_sv_uv(pTHX_ SV* sv);
-PERL_CALLCONV NV Perl_sv_nv(pTHX_ SV* sv);
-PERL_CALLCONV char* Perl_sv_pvn(pTHX_ SV *sv, STRLEN *len);
-PERL_CALLCONV char* Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *len);
-PERL_CALLCONV char* Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *len);
-PERL_CALLCONV I32 Perl_sv_true(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_sv_add_arena(pTHX_ char* ptr, U32 size, U32 flags);
-PERL_CALLCONV int Perl_sv_backoff(pTHX_ SV* sv);
-PERL_CALLCONV SV* Perl_sv_bless(pTHX_ SV* sv, HV* stash);
-PERL_CALLCONV void Perl_sv_catpvf(pTHX_ SV* sv, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_2,pTHX_3)))
-#endif
-;
-PERL_CALLCONV void Perl_sv_vcatpvf(pTHX_ SV* sv, const char* pat, va_list* args);
-PERL_CALLCONV void Perl_sv_catpv(pTHX_ SV* sv, const char* ptr);
-PERL_CALLCONV void Perl_sv_catpvn(pTHX_ SV* sv, const char* ptr, STRLEN len);
-PERL_CALLCONV void Perl_sv_catsv(pTHX_ SV* dsv, SV* ssv);
-PERL_CALLCONV void Perl_sv_chop(pTHX_ SV* sv, char* ptr);
-PERL_CALLCONV I32 Perl_sv_clean_all(pTHX);
-PERL_CALLCONV void Perl_sv_clean_objs(pTHX);
-PERL_CALLCONV void Perl_sv_clear(pTHX_ SV* sv);
-PERL_CALLCONV I32 Perl_sv_cmp(pTHX_ SV* sv1, SV* sv2);
-PERL_CALLCONV I32 Perl_sv_cmp_locale(pTHX_ SV* sv1, SV* sv2);
-#if defined(USE_LOCALE_COLLATE)
-PERL_CALLCONV char* Perl_sv_collxfrm(pTHX_ SV* sv, STRLEN* nxp);
-#endif
-PERL_CALLCONV OP* Perl_sv_compile_2op(pTHX_ SV* sv, OP** startp, char* code, AV** avp);
-PERL_CALLCONV void Perl_sv_dec(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_sv_dump(pTHX_ SV* sv);
-PERL_CALLCONV bool Perl_sv_derived_from(pTHX_ SV* sv, const char* name);
-PERL_CALLCONV I32 Perl_sv_eq(pTHX_ SV* sv1, SV* sv2);
-PERL_CALLCONV void Perl_sv_free(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_sv_free_arenas(pTHX);
-PERL_CALLCONV char* Perl_sv_gets(pTHX_ SV* sv, PerlIO* fp, I32 append);
-PERL_CALLCONV char* Perl_sv_grow(pTHX_ SV* sv, STRLEN newlen);
-PERL_CALLCONV void Perl_sv_inc(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_sv_insert(pTHX_ SV* bigsv, STRLEN offset, STRLEN len, char* little, STRLEN littlelen);
-PERL_CALLCONV int Perl_sv_isa(pTHX_ SV* sv, const char* name);
-PERL_CALLCONV int Perl_sv_isobject(pTHX_ SV* sv);
-PERL_CALLCONV STRLEN Perl_sv_len(pTHX_ SV* sv);
-PERL_CALLCONV STRLEN Perl_sv_len_utf8(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_sv_magic(pTHX_ SV* sv, SV* obj, int how, const char* name, I32 namlen);
-PERL_CALLCONV SV* Perl_sv_mortalcopy(pTHX_ SV* oldsv);
-PERL_CALLCONV SV* Perl_sv_newmortal(pTHX);
-PERL_CALLCONV SV* Perl_sv_newref(pTHX_ SV* sv);
-PERL_CALLCONV char* Perl_sv_peek(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_sv_pos_u2b(pTHX_ SV* sv, I32* offsetp, I32* lenp);
-PERL_CALLCONV void Perl_sv_pos_b2u(pTHX_ SV* sv, I32* offsetp);
-PERL_CALLCONV char* Perl_sv_pvn_force(pTHX_ SV* sv, STRLEN* lp);
-PERL_CALLCONV char* Perl_sv_pvutf8n_force(pTHX_ SV* sv, STRLEN* lp);
-PERL_CALLCONV char* Perl_sv_pvbyten_force(pTHX_ SV* sv, STRLEN* lp);
-PERL_CALLCONV char* Perl_sv_reftype(pTHX_ SV* sv, int ob);
-PERL_CALLCONV void Perl_sv_replace(pTHX_ SV* sv, SV* nsv);
-PERL_CALLCONV void Perl_sv_report_used(pTHX);
-PERL_CALLCONV void Perl_sv_reset(pTHX_ char* s, HV* stash);
-PERL_CALLCONV void Perl_sv_setpvf(pTHX_ SV* sv, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_2,pTHX_3)))
-#endif
-;
-PERL_CALLCONV void Perl_sv_vsetpvf(pTHX_ SV* sv, const char* pat, va_list* args);
-PERL_CALLCONV void Perl_sv_setiv(pTHX_ SV* sv, IV num);
-PERL_CALLCONV void Perl_sv_setpviv(pTHX_ SV* sv, IV num);
-PERL_CALLCONV void Perl_sv_setuv(pTHX_ SV* sv, UV num);
-PERL_CALLCONV void Perl_sv_setnv(pTHX_ SV* sv, NV num);
-PERL_CALLCONV SV* Perl_sv_setref_iv(pTHX_ SV* rv, const char* classname, IV iv);
-PERL_CALLCONV SV* Perl_sv_setref_nv(pTHX_ SV* rv, const char* classname, NV nv);
-PERL_CALLCONV SV* Perl_sv_setref_pv(pTHX_ SV* rv, const char* classname, void* pv);
-PERL_CALLCONV SV* Perl_sv_setref_pvn(pTHX_ SV* rv, const char* classname, char* pv, STRLEN n);
-PERL_CALLCONV void Perl_sv_setpv(pTHX_ SV* sv, const char* ptr);
-PERL_CALLCONV void Perl_sv_setpvn(pTHX_ SV* sv, const char* ptr, STRLEN len);
-PERL_CALLCONV void Perl_sv_setsv(pTHX_ SV* dsv, SV* ssv);
-PERL_CALLCONV void Perl_sv_taint(pTHX_ SV* sv);
-PERL_CALLCONV bool Perl_sv_tainted(pTHX_ SV* sv);
-PERL_CALLCONV int Perl_sv_unmagic(pTHX_ SV* sv, int type);
-PERL_CALLCONV void Perl_sv_unref(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_sv_untaint(pTHX_ SV* sv);
-PERL_CALLCONV bool Perl_sv_upgrade(pTHX_ SV* sv, U32 mt);
-PERL_CALLCONV void Perl_sv_usepvn(pTHX_ SV* sv, char* ptr, STRLEN len);
-PERL_CALLCONV void Perl_sv_vcatpvfn(pTHX_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted);
-PERL_CALLCONV void Perl_sv_vsetpvfn(pTHX_ SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted);
-PERL_CALLCONV NV Perl_str_to_version(pTHX_ SV *sv);
-PERL_CALLCONV SV* Perl_swash_init(pTHX_ char* pkg, char* name, SV* listsv, I32 minbits, I32 none);
-PERL_CALLCONV UV Perl_swash_fetch(pTHX_ SV *sv, U8 *ptr);
-PERL_CALLCONV void Perl_taint_env(pTHX);
-PERL_CALLCONV void Perl_taint_proper(pTHX_ const char* f, const char* s);
-PERL_CALLCONV UV Perl_to_utf8_lower(pTHX_ U8 *p);
-PERL_CALLCONV UV Perl_to_utf8_upper(pTHX_ U8 *p);
-PERL_CALLCONV UV Perl_to_utf8_title(pTHX_ U8 *p);
-#if defined(UNLINK_ALL_VERSIONS)
-PERL_CALLCONV I32 Perl_unlnk(pTHX_ char* f);
-#endif
-#if defined(USE_THREADS)
-PERL_CALLCONV void Perl_unlock_condpair(pTHX_ void* svv);
-#endif
-PERL_CALLCONV void Perl_unsharepvn(pTHX_ const char* sv, I32 len, U32 hash);
-PERL_CALLCONV void Perl_unshare_hek(pTHX_ HEK* hek);
-PERL_CALLCONV void Perl_utilize(pTHX_ int aver, I32 floor, OP* version, OP* id, OP* arg);
-PERL_CALLCONV U8* Perl_utf16_to_utf8(pTHX_ U8* p, U8 *d, I32 bytelen, I32 *newlen);
-PERL_CALLCONV U8* Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8 *d, I32 bytelen, I32 *newlen);
-PERL_CALLCONV STRLEN Perl_utf8_length(pTHX_ U8* s, U8 *e);
-PERL_CALLCONV IV Perl_utf8_distance(pTHX_ U8 *a, U8 *b);
-PERL_CALLCONV U8* Perl_utf8_hop(pTHX_ U8 *s, I32 off);
-PERL_CALLCONV U8* Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *len);
-PERL_CALLCONV U8* Perl_bytes_from_utf8(pTHX_ U8 *s, STRLEN *len, bool *is_utf8);
-PERL_CALLCONV U8* Perl_bytes_to_utf8(pTHX_ U8 *s, STRLEN *len);
-PERL_CALLCONV UV Perl_utf8_to_uv_simple(pTHX_ U8 *s, STRLEN* retlen);
-PERL_CALLCONV UV Perl_utf8_to_uv(pTHX_ U8 *s, STRLEN curlen, STRLEN* retlen, U32 flags);
-PERL_CALLCONV U8* Perl_uv_to_utf8(pTHX_ U8 *d, UV uv);
-PERL_CALLCONV void Perl_vivify_defelem(pTHX_ SV* sv);
-PERL_CALLCONV void Perl_vivify_ref(pTHX_ SV* sv, U32 to_what);
-PERL_CALLCONV I32 Perl_wait4pid(pTHX_ Pid_t pid, int* statusp, int flags);
-PERL_CALLCONV void Perl_report_evil_fh(pTHX_ GV *gv, IO *io, I32 op);
-PERL_CALLCONV void Perl_report_uninit(pTHX);
-PERL_CALLCONV void Perl_warn(pTHX_ const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_1,pTHX_2)))
-#endif
-;
-PERL_CALLCONV void Perl_vwarn(pTHX_ const char* pat, va_list* args);
-PERL_CALLCONV void Perl_warner(pTHX_ U32 err, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_2,pTHX_3)))
-#endif
-;
-PERL_CALLCONV void Perl_vwarner(pTHX_ U32 err, const char* pat, va_list* args);
-PERL_CALLCONV void Perl_watch(pTHX_ char** addr);
-PERL_CALLCONV I32 Perl_whichsig(pTHX_ char* sig);
-PERL_CALLCONV int Perl_yyerror(pTHX_ char* s);
-#ifdef USE_PURE_BISON
-PERL_CALLCONV int Perl_yylex_r(pTHX_ YYSTYPE *lvalp, int *lcharp);
-#endif
-PERL_CALLCONV int Perl_yylex(pTHX);
-PERL_CALLCONV int Perl_yyparse(pTHX);
-PERL_CALLCONV int Perl_yywarn(pTHX_ char* s);
-#if defined(MYMALLOC)
-PERL_CALLCONV void Perl_dump_mstats(pTHX_ char* s);
-PERL_CALLCONV int Perl_get_mstats(pTHX_ perl_mstats_t *buf, int buflen, int level);
-#endif
-PERL_CALLCONV Malloc_t Perl_safesysmalloc(MEM_SIZE nbytes);
-PERL_CALLCONV Malloc_t Perl_safesyscalloc(MEM_SIZE elements, MEM_SIZE size);
-PERL_CALLCONV Malloc_t Perl_safesysrealloc(Malloc_t where, MEM_SIZE nbytes);
-PERL_CALLCONV Free_t Perl_safesysfree(Malloc_t where);
-#if defined(LEAKTEST)
-PERL_CALLCONV Malloc_t Perl_safexmalloc(I32 x, MEM_SIZE size);
-PERL_CALLCONV Malloc_t Perl_safexcalloc(I32 x, MEM_SIZE elements, MEM_SIZE size);
-PERL_CALLCONV Malloc_t Perl_safexrealloc(Malloc_t where, MEM_SIZE size);
-PERL_CALLCONV void Perl_safexfree(Malloc_t where);
-#endif
-#if defined(PERL_GLOBAL_STRUCT)
-PERL_CALLCONV struct perl_vars * Perl_GetVars(pTHX);
-#endif
-PERL_CALLCONV int Perl_runops_standard(pTHX);
-PERL_CALLCONV int Perl_runops_debug(pTHX);
-#if defined(USE_THREADS)
-PERL_CALLCONV SV* Perl_sv_lock(pTHX_ SV *sv);
-#endif
-PERL_CALLCONV void Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_2,pTHX_3)))
-#endif
-;
-PERL_CALLCONV void Perl_sv_vcatpvf_mg(pTHX_ SV* sv, const char* pat, va_list* args);
-PERL_CALLCONV void Perl_sv_catpv_mg(pTHX_ SV *sv, const char *ptr);
-PERL_CALLCONV void Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len);
-PERL_CALLCONV void Perl_sv_catsv_mg(pTHX_ SV *dstr, SV *sstr);
-PERL_CALLCONV void Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_2,pTHX_3)))
-#endif
-;
-PERL_CALLCONV void Perl_sv_vsetpvf_mg(pTHX_ SV* sv, const char* pat, va_list* args);
-PERL_CALLCONV void Perl_sv_setiv_mg(pTHX_ SV *sv, IV i);
-PERL_CALLCONV void Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv);
-PERL_CALLCONV void Perl_sv_setuv_mg(pTHX_ SV *sv, UV u);
-PERL_CALLCONV void Perl_sv_setnv_mg(pTHX_ SV *sv, NV num);
-PERL_CALLCONV void Perl_sv_setpv_mg(pTHX_ SV *sv, const char *ptr);
-PERL_CALLCONV void Perl_sv_setpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len);
-PERL_CALLCONV void Perl_sv_setsv_mg(pTHX_ SV *dstr, SV *sstr);
-PERL_CALLCONV void Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len);
-PERL_CALLCONV MGVTBL* Perl_get_vtbl(pTHX_ int vtbl_id);
-PERL_CALLCONV char* Perl_pv_display(pTHX_ SV *sv, char *pv, STRLEN cur, STRLEN len, STRLEN pvlim);
-PERL_CALLCONV void Perl_dump_indent(pTHX_ I32 level, PerlIO *file, const char* pat, ...)
-#ifdef CHECK_FORMAT
- __attribute__((format(printf,pTHX_3,pTHX_4)))
-#endif
-;
-PERL_CALLCONV void Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char* pat, va_list *args);
-PERL_CALLCONV void Perl_do_gv_dump(pTHX_ I32 level, PerlIO *file, char *name, GV *sv);
-PERL_CALLCONV void Perl_do_gvgv_dump(pTHX_ I32 level, PerlIO *file, char *name, GV *sv);
-PERL_CALLCONV void Perl_do_hv_dump(pTHX_ I32 level, PerlIO *file, char *name, HV *sv);
-PERL_CALLCONV void Perl_do_magic_dump(pTHX_ I32 level, PerlIO *file, MAGIC *mg, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim);
-PERL_CALLCONV void Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o);
-PERL_CALLCONV void Perl_do_pmop_dump(pTHX_ I32 level, PerlIO *file, PMOP *pm);
-PERL_CALLCONV void Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim);
-PERL_CALLCONV void Perl_magic_dump(pTHX_ MAGIC *mg);
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-PERL_CALLCONV void* Perl_default_protect(pTHX_ volatile JMPENV *je, int *excpt, protect_body_t body, ...);
-PERL_CALLCONV void* Perl_vdefault_protect(pTHX_ volatile JMPENV *je, int *excpt, protect_body_t body, va_list *args);
-#endif
-PERL_CALLCONV void Perl_reginitcolors(pTHX);
-PERL_CALLCONV char* Perl_sv_2pv_nolen(pTHX_ SV* sv);
-PERL_CALLCONV char* Perl_sv_2pvutf8_nolen(pTHX_ SV* sv);
-PERL_CALLCONV char* Perl_sv_2pvbyte_nolen(pTHX_ SV* sv);
-PERL_CALLCONV char* Perl_sv_pv(pTHX_ SV *sv);
-PERL_CALLCONV char* Perl_sv_pvutf8(pTHX_ SV *sv);
-PERL_CALLCONV char* Perl_sv_pvbyte(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_sv_utf8_upgrade(pTHX_ SV *sv);
-PERL_CALLCONV bool Perl_sv_utf8_downgrade(pTHX_ SV *sv, bool fail_ok);
-PERL_CALLCONV void Perl_sv_utf8_encode(pTHX_ SV *sv);
-PERL_CALLCONV bool Perl_sv_utf8_decode(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_sv_force_normal(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv);
-PERL_CALLCONV void Perl_sv_del_backref(pTHX_ SV *sv);
-PERL_CALLCONV void Perl_tmps_grow(pTHX_ I32 n);
-PERL_CALLCONV SV* Perl_sv_rvweaken(pTHX_ SV *sv);
-PERL_CALLCONV int Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg);
-PERL_CALLCONV OP* Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block);
-PERL_CALLCONV CV* Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block);
-PERL_CALLCONV void Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block);
-PERL_CALLCONV OP * Perl_my_attrs(pTHX_ OP *o, OP *attrs);
-PERL_CALLCONV void Perl_boot_core_xsutils(pTHX);
-#if defined(USE_ITHREADS)
-PERL_CALLCONV PERL_CONTEXT* Perl_cx_dup(pTHX_ PERL_CONTEXT* cx, I32 ix, I32 max);
-PERL_CALLCONV PERL_SI* Perl_si_dup(pTHX_ PERL_SI* si);
-PERL_CALLCONV ANY* Perl_ss_dup(pTHX_ PerlInterpreter* proto_perl);
-PERL_CALLCONV void* Perl_any_dup(pTHX_ void* v, PerlInterpreter* proto_perl);
-PERL_CALLCONV HE* Perl_he_dup(pTHX_ HE* e, bool shared);
-PERL_CALLCONV REGEXP* Perl_re_dup(pTHX_ REGEXP* r);
-PERL_CALLCONV PerlIO* Perl_fp_dup(pTHX_ PerlIO* fp, char type);
-PERL_CALLCONV DIR* Perl_dirp_dup(pTHX_ DIR* dp);
-PERL_CALLCONV GP* Perl_gp_dup(pTHX_ GP* gp);
-PERL_CALLCONV MAGIC* Perl_mg_dup(pTHX_ MAGIC* mg);
-PERL_CALLCONV SV* Perl_sv_dup(pTHX_ SV* sstr);
-#if defined(HAVE_INTERP_INTERN)
-PERL_CALLCONV void Perl_sys_intern_dup(pTHX_ struct interp_intern* src, struct interp_intern* dst);
-#endif
-PERL_CALLCONV PTR_TBL_t* Perl_ptr_table_new(pTHX);
-PERL_CALLCONV void* Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv);
-PERL_CALLCONV void Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldsv, void *newsv);
-PERL_CALLCONV void Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl);
-PERL_CALLCONV void Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl);
-PERL_CALLCONV void Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl);
-#endif
-#if defined(HAVE_INTERP_INTERN)
-PERL_CALLCONV void Perl_sys_intern_clear(pTHX);
-PERL_CALLCONV void Perl_sys_intern_init(pTHX);
-#endif
-
-#if defined(PERL_OBJECT)
-protected:
-#else
-END_EXTERN_C
-#endif
-
-#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-STATIC I32 S_avhv_index_sv(pTHX_ SV* sv);
-STATIC I32 S_avhv_index(pTHX_ AV* av, SV* sv, U32 hash);
-#endif
-
-#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-STATIC I32 S_do_trans_simple(pTHX_ SV *sv);
-STATIC I32 S_do_trans_count(pTHX_ SV *sv);
-STATIC I32 S_do_trans_complex(pTHX_ SV *sv);
-STATIC I32 S_do_trans_simple_utf8(pTHX_ SV *sv);
-STATIC I32 S_do_trans_count_utf8(pTHX_ SV *sv);
-STATIC I32 S_do_trans_complex_utf8(pTHX_ SV *sv);
-#endif
-
-#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-STATIC void S_gv_init_sv(pTHX_ GV *gv, I32 sv_type);
-#endif
-
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-STATIC void S_hsplit(pTHX_ HV *hv);
-STATIC void S_hfreeentries(pTHX_ HV *hv);
-STATIC void S_more_he(pTHX);
-STATIC HE* S_new_he(pTHX);
-STATIC void S_del_he(pTHX_ HE *p);
-STATIC HEK* S_save_hek(pTHX_ const char *str, I32 len, U32 hash);
-STATIC void S_hv_magic_check(pTHX_ HV *hv, bool *needs_copy, bool *needs_store);
-#endif
-
-#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-STATIC void S_save_magic(pTHX_ I32 mgs_ix, SV *sv);
-STATIC int S_magic_methpack(pTHX_ SV *sv, MAGIC *mg, char *meth);
-STATIC int S_magic_methcall(pTHX_ SV *sv, MAGIC *mg, char *meth, I32 f, int n, SV *val);
-#endif
-
-#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-STATIC I32 S_list_assignment(pTHX_ OP *o);
-STATIC void S_bad_type(pTHX_ I32 n, char *t, char *name, OP *kid);
-STATIC void S_cop_free(pTHX_ COP *cop);
-STATIC OP* S_modkids(pTHX_ OP *o, I32 type);
-STATIC void S_no_bareword_allowed(pTHX_ OP *o);
-STATIC OP* S_no_fh_allowed(pTHX_ OP *o);
-STATIC OP* S_scalarboolean(pTHX_ OP *o);
-STATIC OP* S_too_few_arguments(pTHX_ OP *o, char* name);
-STATIC OP* S_too_many_arguments(pTHX_ OP *o, char* name);
-STATIC U8* S_trlist_upgrade(pTHX_ U8** sp, U8** ep);
-STATIC void S_op_clear(pTHX_ OP* o);
-STATIC void S_null(pTHX_ OP* o);
-STATIC PADOFFSET S_pad_addlex(pTHX_ SV* name);
-STATIC PADOFFSET S_pad_findlex(pTHX_ char* name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix, I32 saweval, U32 flags);
-STATIC OP* S_newDEFSVOP(pTHX);
-STATIC OP* S_new_logop(pTHX_ I32 type, I32 flags, OP **firstp, OP **otherp);
-STATIC void S_simplify_sort(pTHX_ OP *o);
-STATIC bool S_is_handle_constructor(pTHX_ OP *o, I32 argnum);
-STATIC char* S_gv_ename(pTHX_ GV *gv);
-STATIC void S_cv_dump(pTHX_ CV *cv);
-STATIC CV* S_cv_clone2(pTHX_ CV *proto, CV *outside);
-STATIC bool S_scalar_mod_type(pTHX_ OP *o, I32 type);
-STATIC OP * S_my_kid(pTHX_ OP *o, OP *attrs);
-STATIC OP * S_dup_attrlist(pTHX_ OP *o);
-STATIC void S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs);
-# if defined(PL_OP_SLAB_ALLOC)
-STATIC void* S_Slab_Alloc(pTHX_ int m, size_t sz);
-# endif
-#endif
-
-#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
-STATIC void S_find_beginning(pTHX);
-STATIC void S_forbid_setid(pTHX_ char *);
-STATIC void S_incpush(pTHX_ char *, int, int);
-STATIC void S_init_interp(pTHX);
-STATIC void S_init_ids(pTHX);
-STATIC void S_init_lexer(pTHX);
-STATIC void S_init_main_stash(pTHX);
-STATIC void S_init_perllib(pTHX);
-STATIC void S_init_postdump_symbols(pTHX_ int, char **, char **);
-STATIC void S_init_predump_symbols(pTHX);
-STATIC void S_my_exit_jump(pTHX) __attribute__((noreturn));
-STATIC void S_nuke_stacks(pTHX);
-STATIC void S_open_script(pTHX_ char *, bool, SV *, int *fd);
-STATIC void S_usage(pTHX_ char *);
-STATIC void S_validate_suid(pTHX_ char *, char*, int);
-# if defined(IAMSUID)
-STATIC int S_fd_on_nosuid_fs(pTHX_ int fd);
-# endif
-STATIC void* S_parse_body(pTHX_ char **env, XSINIT_t xsinit);
-STATIC void* S_run_body(pTHX_ I32 oldscope);
-STATIC void S_call_body(pTHX_ OP *myop, int is_eval);
-STATIC void* S_call_list_body(pTHX_ CV *cv);
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-STATIC void* S_vparse_body(pTHX_ va_list args);
-STATIC void* S_vrun_body(pTHX_ va_list args);
-STATIC void* S_vcall_body(pTHX_ va_list args);
-STATIC void* S_vcall_list_body(pTHX_ va_list args);
-#endif
-# if defined(USE_THREADS)
-STATIC struct perl_thread * S_init_main_thread(pTHX);
-# endif
-#endif
-
-#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-STATIC void S_doencodes(pTHX_ SV* sv, char* s, I32 len);
-STATIC SV* S_refto(pTHX_ SV* sv);
-STATIC U32 S_seed(pTHX);
-STATIC SV* S_mul128(pTHX_ SV *sv, U8 m);
-STATIC SV* S_is_an_int(pTHX_ char *s, STRLEN l);
-STATIC int S_div128(pTHX_ SV *pnum, bool *done);
-#endif
-
-#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-STATIC OP* S_docatch(pTHX_ OP *o);
-STATIC void* S_docatch_body(pTHX);
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-STATIC void* S_vdocatch_body(pTHX_ va_list args);
-#endif
-STATIC OP* S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit);
-STATIC void S_doparseform(pTHX_ SV *sv);
-STATIC I32 S_dopoptoeval(pTHX_ I32 startingblock);
-STATIC I32 S_dopoptolabel(pTHX_ char *label);
-STATIC I32 S_dopoptoloop(pTHX_ I32 startingblock);
-STATIC I32 S_dopoptosub(pTHX_ I32 startingblock);
-STATIC I32 S_dopoptosub_at(pTHX_ PERL_CONTEXT* cxstk, I32 startingblock);
-STATIC void S_save_lines(pTHX_ AV *array, SV *sv);
-STATIC OP* S_doeval(pTHX_ int gimme, OP** startop);
-STATIC PerlIO * S_doopen_pmc(pTHX_ const char *name, const char *mode);
-STATIC void S_qsortsv(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t f);
-#endif
-
-#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-STATIC int S_do_maybe_phash(pTHX_ AV *ary, SV **lelem, SV **firstlelem, SV **relem, SV **lastrelem);
-STATIC void S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem);
-STATIC CV* S_get_db_sub(pTHX_ SV **svp, CV *cv);
-STATIC SV* S_method_common(pTHX_ SV* meth, U32* hashp);
-#endif
-
-#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-STATIC OP* S_doform(pTHX_ CV *cv, GV *gv, OP *retop);
-STATIC int S_emulate_eaccess(pTHX_ const char* path, Mode_t mode);
-# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-STATIC int S_dooneliner(pTHX_ char *cmd, char *filename);
-# endif
-#endif
-
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-STATIC regnode* S_reg(pTHX_ I32, I32 *);
-STATIC regnode* S_reganode(pTHX_ U8, U32);
-STATIC regnode* S_regatom(pTHX_ I32 *);
-STATIC regnode* S_regbranch(pTHX_ I32 *, I32);
-STATIC void S_reguni(pTHX_ UV, char *, STRLEN*);
-STATIC regnode* S_regclass(pTHX);
-STATIC regnode* S_regclassutf8(pTHX);
-STATIC I32 S_regcurly(pTHX_ char *);
-STATIC regnode* S_reg_node(pTHX_ U8);
-STATIC regnode* S_regpiece(pTHX_ I32 *);
-STATIC void S_reginsert(pTHX_ U8, regnode *);
-STATIC void S_regoptail(pTHX_ regnode *, regnode *);
-STATIC void S_regtail(pTHX_ regnode *, regnode *);
-STATIC char* S_regwhite(pTHX_ char *, char *);
-STATIC char* S_nextchar(pTHX);
-STATIC regnode* S_dumpuntil(pTHX_ regnode *start, regnode *node, regnode *last, SV* sv, I32 l);
-STATIC void S_put_byte(pTHX_ SV* sv, int c);
-STATIC void S_scan_commit(pTHX_ struct scan_data_t *data);
-STATIC void S_cl_anything(pTHX_ struct regnode_charclass_class *cl);
-STATIC int S_cl_is_anything(pTHX_ struct regnode_charclass_class *cl);
-STATIC void S_cl_init(pTHX_ struct regnode_charclass_class *cl);
-STATIC void S_cl_init_zero(pTHX_ struct regnode_charclass_class *cl);
-STATIC void S_cl_and(pTHX_ struct regnode_charclass_class *cl, struct regnode_charclass_class *and_with);
-STATIC void S_cl_or(pTHX_ struct regnode_charclass_class *cl, struct regnode_charclass_class *or_with);
-STATIC I32 S_study_chunk(pTHX_ regnode **scanp, I32 *deltap, regnode *last, struct scan_data_t *data, U32 flags);
-STATIC I32 S_add_data(pTHX_ I32 n, char *s);
-STATIC void S_re_croak2(pTHX_ const char* pat1, const char* pat2, ...) __attribute__((noreturn));
-STATIC I32 S_regpposixcc(pTHX_ I32 value);
-STATIC void S_checkposixcc(pTHX);
-#endif
-
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-STATIC I32 S_regmatch(pTHX_ regnode *prog);
-STATIC I32 S_regrepeat(pTHX_ regnode *p, I32 max);
-STATIC I32 S_regrepeat_hard(pTHX_ regnode *p, I32 max, I32 *lp);
-STATIC I32 S_regtry(pTHX_ regexp *prog, char *startpos);
-STATIC bool S_reginclass(pTHX_ regnode *p, I32 c);
-STATIC bool S_reginclassutf8(pTHX_ regnode *f, U8* p);
-STATIC CHECKPOINT S_regcppush(pTHX_ I32 parenfloor);
-STATIC char* S_regcppop(pTHX);
-STATIC char* S_regcp_set_to(pTHX_ I32 ss);
-STATIC void S_cache_re(pTHX_ regexp *prog);
-STATIC U8* S_reghop(pTHX_ U8 *pos, I32 off);
-STATIC U8* S_reghopmaybe(pTHX_ U8 *pos, I32 off);
-STATIC char* S_find_byclass(pTHX_ regexp * prog, regnode *c, char *s, char *strend, char *startpos, I32 norun);
-#endif
-
-#if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT)
-STATIC void S_debprof(pTHX_ OP *o);
-#endif
-
-#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-STATIC SV* S_save_scalar_at(pTHX_ SV **sptr);
-#endif
-
-#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-STATIC IV S_asIV(pTHX_ SV* sv);
-STATIC UV S_asUV(pTHX_ SV* sv);
-STATIC SV* S_more_sv(pTHX);
-STATIC void S_more_xiv(pTHX);
-STATIC void S_more_xnv(pTHX);
-STATIC void S_more_xpv(pTHX);
-STATIC void S_more_xpviv(pTHX);
-STATIC void S_more_xpvnv(pTHX);
-STATIC void S_more_xpvcv(pTHX);
-STATIC void S_more_xpvav(pTHX);
-STATIC void S_more_xpvhv(pTHX);
-STATIC void S_more_xpvmg(pTHX);
-STATIC void S_more_xpvlv(pTHX);
-STATIC void S_more_xpvbm(pTHX);
-STATIC void S_more_xrv(pTHX);
-STATIC XPVIV* S_new_xiv(pTHX);
-STATIC XPVNV* S_new_xnv(pTHX);
-STATIC XPV* S_new_xpv(pTHX);
-STATIC XPVIV* S_new_xpviv(pTHX);
-STATIC XPVNV* S_new_xpvnv(pTHX);
-STATIC XPVCV* S_new_xpvcv(pTHX);
-STATIC XPVAV* S_new_xpvav(pTHX);
-STATIC XPVHV* S_new_xpvhv(pTHX);
-STATIC XPVMG* S_new_xpvmg(pTHX);
-STATIC XPVLV* S_new_xpvlv(pTHX);
-STATIC XPVBM* S_new_xpvbm(pTHX);
-STATIC XRV* S_new_xrv(pTHX);
-STATIC void S_del_xiv(pTHX_ XPVIV* p);
-STATIC void S_del_xnv(pTHX_ XPVNV* p);
-STATIC void S_del_xpv(pTHX_ XPV* p);
-STATIC void S_del_xpviv(pTHX_ XPVIV* p);
-STATIC void S_del_xpvnv(pTHX_ XPVNV* p);
-STATIC void S_del_xpvcv(pTHX_ XPVCV* p);
-STATIC void S_del_xpvav(pTHX_ XPVAV* p);
-STATIC void S_del_xpvhv(pTHX_ XPVHV* p);
-STATIC void S_del_xpvmg(pTHX_ XPVMG* p);
-STATIC void S_del_xpvlv(pTHX_ XPVLV* p);
-STATIC void S_del_xpvbm(pTHX_ XPVBM* p);
-STATIC void S_del_xrv(pTHX_ XRV* p);
-STATIC void S_sv_unglob(pTHX_ SV* sv);
-STATIC void S_not_a_number(pTHX_ SV *sv);
-STATIC I32 S_visit(pTHX_ SVFUNC_t f);
-# if defined(DEBUGGING)
-STATIC void S_del_sv(pTHX_ SV *p);
-# endif
-#endif
-
-#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
-STATIC void S_check_uni(pTHX);
-STATIC void S_force_next(pTHX_ I32 type);
-STATIC char* S_force_version(pTHX_ char *start);
-STATIC char* S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack, int allow_tick);
-STATIC SV* S_tokeq(pTHX_ SV *sv);
-STATIC char* S_scan_const(pTHX_ char *start);
-STATIC char* S_scan_formline(pTHX_ char *s);
-STATIC char* S_scan_heredoc(pTHX_ char *s);
-STATIC char* S_scan_ident(pTHX_ char *s, char *send, char *dest, STRLEN destlen, I32 ck_uni);
-STATIC char* S_scan_inputsymbol(pTHX_ char *start);
-STATIC char* S_scan_pat(pTHX_ char *start, I32 type);
-STATIC char* S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims);
-STATIC char* S_scan_subst(pTHX_ char *start);
-STATIC char* S_scan_trans(pTHX_ char *start);
-STATIC char* S_scan_word(pTHX_ char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp);
-STATIC char* S_skipspace(pTHX_ char *s);
-STATIC char* S_swallow_bom(pTHX_ U8 *s);
-STATIC void S_checkcomma(pTHX_ char *s, char *name, char *what);
-STATIC void S_force_ident(pTHX_ char *s, int kind);
-STATIC void S_incline(pTHX_ char *s);
-STATIC int S_intuit_method(pTHX_ char *s, GV *gv);
-STATIC int S_intuit_more(pTHX_ char *s);
-STATIC I32 S_lop(pTHX_ I32 f, int x, char *s);
-STATIC void S_missingterm(pTHX_ char *s);
-STATIC void S_no_op(pTHX_ char *what, char *s);
-STATIC void S_set_csh(pTHX);
-STATIC I32 S_sublex_done(pTHX);
-STATIC I32 S_sublex_push(pTHX);
-STATIC I32 S_sublex_start(pTHX);
-STATIC char * S_filter_gets(pTHX_ SV *sv, PerlIO *fp, STRLEN append);
-STATIC HV * S_find_in_my_stash(pTHX_ char *pkgname, I32 len);
-STATIC SV* S_new_constant(pTHX_ char *s, STRLEN len, const char *key, SV *sv, SV *pv, const char *type);
-STATIC int S_ao(pTHX_ int toketype);
-STATIC void S_depcom(pTHX);
-STATIC char* S_incl_perldb(pTHX);
-#if 0
-STATIC I32 S_utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen);
-STATIC I32 S_utf16rev_textfilter(pTHX_ int idx, SV *sv, int maxlen);
-#endif
-# if defined(CRIPPLED_CC)
-STATIC int S_uni(pTHX_ I32 f, char *s);
-# endif
-# if defined(PERL_CR_FILTER)
-STATIC I32 S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen);
-# endif
-#endif
-
-#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-STATIC SV* S_isa_lookup(pTHX_ HV *stash, const char *name, int len, int level);
-#endif
-
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-STATIC char* S_stdize_locale(pTHX_ char* locs);
-STATIC SV* S_mess_alloc(pTHX);
-# if defined(LEAKTEST)
-STATIC void S_xstat(pTHX_ int);
-# endif
-#endif
-
-#if defined(PERL_OBJECT)
-};
-#endif
diff --git a/contrib/perl5/regcomp.c b/contrib/perl5/regcomp.c
deleted file mode 100644
index b0d238f..0000000
--- a/contrib/perl5/regcomp.c
+++ /dev/null
@@ -1,4599 +0,0 @@
-/* regcomp.c
- */
-
-/*
- * "A fair jaw-cracker dwarf-language must be." --Samwise Gamgee
- */
-
-/* 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.
- */
-
-/* The names of the functions have been changed from regcomp and
- * regexec to pregcomp and pregexec in order to avoid conflicts
- * with the POSIX routines of the same names.
-*/
-
-#ifdef PERL_EXT_RE_BUILD
-/* need to replace pregcomp et al, so enable that */
-# ifndef PERL_IN_XSUB_RE
-# define PERL_IN_XSUB_RE
-# endif
-/* need access to debugger hooks */
-# if defined(PERL_EXT_RE_DEBUG) && !defined(DEBUGGING)
-# define DEBUGGING
-# endif
-#endif
-
-#ifdef PERL_IN_XSUB_RE
-/* We *really* need to overwrite these symbols: */
-# define Perl_pregcomp my_regcomp
-# define Perl_regdump my_regdump
-# define Perl_regprop my_regprop
-# define Perl_pregfree my_regfree
-# define Perl_re_intuit_string my_re_intuit_string
-/* *These* symbols are masked to allow static link. */
-# define Perl_regnext my_regnext
-# define Perl_save_re_context my_save_re_context
-# define Perl_reginitcolors my_reginitcolors
-
-# define PERL_NO_GET_CONTEXT
-#endif
-
-/*SUPPRESS 112*/
-/*
- * pregcomp and pregexec -- 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) 1991-2001, Larry Wall
- ****
- **** You may distribute under the terms of either the GNU General Public
- **** License or the Artistic License, as specified in the README file.
-
- *
- * 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"
-#define PERL_IN_REGCOMP_C
-#include "perl.h"
-
-#ifdef PERL_IN_XSUB_RE
-# if defined(PERL_CAPI) || defined(PERL_OBJECT)
-# include "XSUB.h"
-# endif
-#else
-# include "INTERN.h"
-#endif
-
-#define REG_COMP_C
-#include "regcomp.h"
-
-#ifdef op
-#undef op
-#endif /* op */
-
-#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)))
-
-#ifdef SPSTART
-#undef SPSTART /* dratted cpp namespace... */
-#endif
-/*
- * Flags to be passed up and down.
- */
-#define WORST 0 /* Worst case. */
-#define HASWIDTH 0x1 /* Known to match non-null strings. */
-#define SIMPLE 0x2 /* Simple enough to be STAR/PLUS operand. */
-#define SPSTART 0x4 /* Starts with * or +. */
-#define TRYAGAIN 0x8 /* Weeded out a declaration. */
-
-/* Length of a variant. */
-
-typedef struct scan_data_t {
- I32 len_min;
- I32 len_delta;
- I32 pos_min;
- I32 pos_delta;
- SV *last_found;
- I32 last_end; /* min value, <0 unless valid. */
- I32 last_start_min;
- I32 last_start_max;
- SV **longest; /* Either &l_fixed, or &l_float. */
- SV *longest_fixed;
- I32 offset_fixed;
- SV *longest_float;
- I32 offset_float_min;
- I32 offset_float_max;
- I32 flags;
- I32 whilem_c;
- I32 *last_closep;
- struct regnode_charclass_class *start_class;
-} scan_data_t;
-
-/*
- * Forward declarations for pregcomp()'s friends.
- */
-
-static scan_data_t zero_scan_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0};
-
-#define SF_BEFORE_EOL (SF_BEFORE_SEOL|SF_BEFORE_MEOL)
-#define SF_BEFORE_SEOL 0x1
-#define SF_BEFORE_MEOL 0x2
-#define SF_FIX_BEFORE_EOL (SF_FIX_BEFORE_SEOL|SF_FIX_BEFORE_MEOL)
-#define SF_FL_BEFORE_EOL (SF_FL_BEFORE_SEOL|SF_FL_BEFORE_MEOL)
-
-#ifdef NO_UNARY_PLUS
-# define SF_FIX_SHIFT_EOL (0+2)
-# define SF_FL_SHIFT_EOL (0+4)
-#else
-# define SF_FIX_SHIFT_EOL (+2)
-# define SF_FL_SHIFT_EOL (+4)
-#endif
-
-#define SF_FIX_BEFORE_SEOL (SF_BEFORE_SEOL << SF_FIX_SHIFT_EOL)
-#define SF_FIX_BEFORE_MEOL (SF_BEFORE_MEOL << SF_FIX_SHIFT_EOL)
-
-#define SF_FL_BEFORE_SEOL (SF_BEFORE_SEOL << SF_FL_SHIFT_EOL)
-#define SF_FL_BEFORE_MEOL (SF_BEFORE_MEOL << SF_FL_SHIFT_EOL) /* 0x20 */
-#define SF_IS_INF 0x40
-#define SF_HAS_PAR 0x80
-#define SF_IN_PAR 0x100
-#define SF_HAS_EVAL 0x200
-#define SCF_DO_SUBSTR 0x400
-#define SCF_DO_STCLASS_AND 0x0800
-#define SCF_DO_STCLASS_OR 0x1000
-#define SCF_DO_STCLASS (SCF_DO_STCLASS_AND|SCF_DO_STCLASS_OR)
-#define SCF_WHILEM_VISITED_POS 0x2000
-
-#define RF_utf8 8
-#define UTF (PL_reg_flags & RF_utf8)
-#define LOC (PL_regflags & PMf_LOCALE)
-#define FOLD (PL_regflags & PMf_FOLD)
-
-#define OOB_CHAR8 1234
-#define OOB_UTF8 123456
-#define OOB_NAMEDCLASS -1
-
-#define CHR_SVLEN(sv) (UTF ? sv_len_utf8(sv) : SvCUR(sv))
-#define CHR_DIST(a,b) (UTF ? utf8_distance(a,b) : a - b)
-
-
-/* length of regex to show in messages that don't mark a position within */
-#define RegexLengthToShowInErrorMessages 127
-
-/*
- * If MARKER[12] are adjusted, be sure to adjust the constants at the top
- * of t/op/regmesg.t, the tests in t/op/re_tests, and those in
- * op/pragma/warn/regcomp.
- */
-#define MARKER1 "HERE" /* marker as it appears in the description */
-#define MARKER2 " << HERE " /* marker as it appears within the regex */
-
-#define REPORT_LOCATION " before " MARKER1 " mark in regex m/%.*s" MARKER2 "%s/"
-
-/*
- * Calls SAVEDESTRUCTOR_X if needed, then calls Perl_croak with the given
- * arg. Show regex, up to a maximum length. If it's too long, chop and add
- * "...".
- */
-#define FAIL(msg) \
- STMT_START { \
- char *ellipses = ""; \
- unsigned len = strlen(PL_regprecomp); \
- \
- if (!SIZE_ONLY) \
- SAVEDESTRUCTOR_X(clear_re,(void*)PL_regcomp_rx); \
- \
- if (len > RegexLengthToShowInErrorMessages) { \
- /* chop 10 shorter than the max, to ensure meaning of "..." */ \
- len = RegexLengthToShowInErrorMessages - 10; \
- ellipses = "..."; \
- } \
- Perl_croak(aTHX_ "%s in regex m/%.*s%s/", \
- msg, (int)len, PL_regprecomp, ellipses); \
- } STMT_END
-
-/*
- * Calls SAVEDESTRUCTOR_X if needed, then calls Perl_croak with the given
- * args. Show regex, up to a maximum length. If it's too long, chop and add
- * "...".
- */
-#define FAIL2(pat,msg) \
- STMT_START { \
- char *ellipses = ""; \
- unsigned len = strlen(PL_regprecomp); \
- \
- if (!SIZE_ONLY) \
- SAVEDESTRUCTOR_X(clear_re,(void*)PL_regcomp_rx); \
- \
- if (len > RegexLengthToShowInErrorMessages) { \
- /* chop 10 shorter than the max, to ensure meaning of "..." */ \
- len = RegexLengthToShowInErrorMessages - 10; \
- ellipses = "..."; \
- } \
- S_re_croak2(aTHX_ pat, " in regex m/%.*s%s/", \
- msg, (int)len, PL_regprecomp, ellipses); \
- } STMT_END
-
-
-/*
- * Simple_vFAIL -- like FAIL, but marks the current location in the scan
- */
-#define Simple_vFAIL(m) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp)-(PL_regxend-PL_regcomp_parse); \
- \
- Perl_croak(aTHX_ "%s" REPORT_LOCATION, \
- m, (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END
-
-/*
- * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL()
- */
-#define vFAIL(m) \
- STMT_START { \
- if (!SIZE_ONLY) \
- SAVEDESTRUCTOR_X(clear_re,(void*)PL_regcomp_rx); \
- Simple_vFAIL(m); \
- } STMT_END
-
-/*
- * Like Simple_vFAIL(), but accepts two arguments.
- */
-#define Simple_vFAIL2(m,a1) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp)-(PL_regxend-PL_regcomp_parse); \
- \
- S_re_croak2(aTHX_ m, REPORT_LOCATION, a1, \
- (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END
-
-/*
- * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL2().
- */
-#define vFAIL2(m,a1) \
- STMT_START { \
- if (!SIZE_ONLY) \
- SAVEDESTRUCTOR_X(clear_re,(void*)PL_regcomp_rx); \
- Simple_vFAIL2(m, a1); \
- } STMT_END
-
-
-/*
- * Like Simple_vFAIL(), but accepts three arguments.
- */
-#define Simple_vFAIL3(m, a1, a2) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp)-(PL_regxend-PL_regcomp_parse); \
- \
- S_re_croak2(aTHX_ m, REPORT_LOCATION, a1, a2, \
- (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END
-
-/*
- * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL3().
- */
-#define vFAIL3(m,a1,a2) \
- STMT_START { \
- if (!SIZE_ONLY) \
- SAVEDESTRUCTOR_X(clear_re,(void*)PL_regcomp_rx); \
- Simple_vFAIL3(m, a1, a2); \
- } STMT_END
-
-/*
- * Like Simple_vFAIL(), but accepts four arguments.
- */
-#define Simple_vFAIL4(m, a1, a2, a3) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp)-(PL_regxend-PL_regcomp_parse); \
- \
- S_re_croak2(aTHX_ m, REPORT_LOCATION, a1, a2, a3,\
- (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END
-
-/*
- * Like Simple_vFAIL(), but accepts five arguments.
- */
-#define Simple_vFAIL5(m, a1, a2, a3, a4) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp)-(PL_regxend-PL_regcomp_parse); \
- S_re_croak2(aTHX_ m, REPORT_LOCATION, a1, a2, a3, a4,\
- (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END
-
-
-#define vWARN(loc,m) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp)-(PL_regxend-(loc)); \
- Perl_warner(aTHX_ WARN_REGEXP, "%s" REPORT_LOCATION,\
- m, (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END \
-
-
-#define vWARN2(loc, m, a1) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp)-(PL_regxend-(loc)); \
- Perl_warner(aTHX_ WARN_REGEXP, m REPORT_LOCATION,\
- a1, \
- (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END
-
-#define vWARN3(loc, m, a1, a2) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp) - (PL_regxend - (loc)); \
- Perl_warner(aTHX_ WARN_REGEXP, m REPORT_LOCATION, \
- a1, a2, \
- (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END
-
-#define vWARN4(loc, m, a1, a2, a3) \
- STMT_START { \
- unsigned offset = strlen(PL_regprecomp)-(PL_regxend-(loc)); \
- Perl_warner(aTHX_ WARN_REGEXP, m REPORT_LOCATION,\
- a1, a2, a3, \
- (int)offset, PL_regprecomp, PL_regprecomp + offset); \
- } STMT_END
-
-
-
-/* Allow for side effects in s */
-#define REGC(c,s) STMT_START { if (!SIZE_ONLY) *(s) = (c); else (s);} STMT_END
-
-static void clear_re(pTHXo_ void *r);
-
-/* Mark that we cannot extend a found fixed substring at this point.
- Updata the longest found anchored substring and the longest found
- floating substrings if needed. */
-
-STATIC void
-S_scan_commit(pTHX_ scan_data_t *data)
-{
- STRLEN l = CHR_SVLEN(data->last_found);
- STRLEN old_l = CHR_SVLEN(*data->longest);
-
- if ((l >= old_l) && ((l > old_l) || (data->flags & SF_BEFORE_EOL))) {
- sv_setsv(*data->longest, data->last_found);
- if (*data->longest == data->longest_fixed) {
- data->offset_fixed = l ? data->last_start_min : data->pos_min;
- if (data->flags & SF_BEFORE_EOL)
- data->flags
- |= ((data->flags & SF_BEFORE_EOL) << SF_FIX_SHIFT_EOL);
- else
- data->flags &= ~SF_FIX_BEFORE_EOL;
- }
- else {
- data->offset_float_min = l ? data->last_start_min : data->pos_min;
- data->offset_float_max = (l
- ? data->last_start_max
- : data->pos_min + data->pos_delta);
- if (data->flags & SF_BEFORE_EOL)
- data->flags
- |= ((data->flags & SF_BEFORE_EOL) << SF_FL_SHIFT_EOL);
- else
- data->flags &= ~SF_FL_BEFORE_EOL;
- }
- }
- SvCUR_set(data->last_found, 0);
- data->last_end = -1;
- data->flags &= ~SF_BEFORE_EOL;
-}
-
-/* Can match anything (initialization) */
-STATIC void
-S_cl_anything(pTHX_ struct regnode_charclass_class *cl)
-{
- int value;
-
- ANYOF_CLASS_ZERO(cl);
- for (value = 0; value < 256; ++value)
- ANYOF_BITMAP_SET(cl, value);
- cl->flags = ANYOF_EOS;
- if (LOC)
- cl->flags |= ANYOF_LOCALE;
-}
-
-/* Can match anything (initialization) */
-STATIC int
-S_cl_is_anything(pTHX_ struct regnode_charclass_class *cl)
-{
- int value;
-
- for (value = 0; value <= ANYOF_MAX; value += 2)
- if (ANYOF_CLASS_TEST(cl, value) && ANYOF_CLASS_TEST(cl, value + 1))
- return 1;
- for (value = 0; value < 256; ++value)
- if (!ANYOF_BITMAP_TEST(cl, value))
- return 0;
- return 1;
-}
-
-/* Can match anything (initialization) */
-STATIC void
-S_cl_init(pTHX_ struct regnode_charclass_class *cl)
-{
- Zero(cl, 1, struct regnode_charclass_class);
- cl->type = ANYOF;
- cl_anything(cl);
-}
-
-STATIC void
-S_cl_init_zero(pTHX_ struct regnode_charclass_class *cl)
-{
- Zero(cl, 1, struct regnode_charclass_class);
- cl->type = ANYOF;
- cl_anything(cl);
- if (LOC)
- cl->flags |= ANYOF_LOCALE;
-}
-
-/* 'And' a given class with another one. Can create false positives */
-/* We assume that cl is not inverted */
-STATIC void
-S_cl_and(pTHX_ struct regnode_charclass_class *cl,
- struct regnode_charclass_class *and_with)
-{
- if (!(and_with->flags & ANYOF_CLASS)
- && !(cl->flags & ANYOF_CLASS)
- && (and_with->flags & ANYOF_LOCALE) == (cl->flags & ANYOF_LOCALE)
- && !(and_with->flags & ANYOF_FOLD)
- && !(cl->flags & ANYOF_FOLD)) {
- int i;
-
- if (and_with->flags & ANYOF_INVERT)
- for (i = 0; i < ANYOF_BITMAP_SIZE; i++)
- cl->bitmap[i] &= ~and_with->bitmap[i];
- else
- for (i = 0; i < ANYOF_BITMAP_SIZE; i++)
- cl->bitmap[i] &= and_with->bitmap[i];
- } /* XXXX: logic is complicated otherwise, leave it along for a moment. */
- if (!(and_with->flags & ANYOF_EOS))
- cl->flags &= ~ANYOF_EOS;
-}
-
-/* 'OR' a given class with another one. Can create false positives */
-/* We assume that cl is not inverted */
-STATIC void
-S_cl_or(pTHX_ struct regnode_charclass_class *cl, struct regnode_charclass_class *or_with)
-{
- if (or_with->flags & ANYOF_INVERT) {
- /* We do not use
- * (B1 | CL1) | (!B2 & !CL2) = (B1 | !B2 & !CL2) | (CL1 | (!B2 & !CL2))
- * <= (B1 | !B2) | (CL1 | !CL2)
- * which is wasteful if CL2 is small, but we ignore CL2:
- * (B1 | CL1) | (!B2 & !CL2) <= (B1 | CL1) | !B2 = (B1 | !B2) | CL1
- * XXXX Can we handle case-fold? Unclear:
- * (OK1(i) | OK1(i')) | !(OK1(i) | OK1(i')) =
- * (OK1(i) | OK1(i')) | (!OK1(i) & !OK1(i'))
- */
- if ( (or_with->flags & ANYOF_LOCALE) == (cl->flags & ANYOF_LOCALE)
- && !(or_with->flags & ANYOF_FOLD)
- && !(cl->flags & ANYOF_FOLD) ) {
- int i;
-
- for (i = 0; i < ANYOF_BITMAP_SIZE; i++)
- cl->bitmap[i] |= ~or_with->bitmap[i];
- } /* XXXX: logic is complicated otherwise */
- else {
- cl_anything(cl);
- }
- } else {
- /* (B1 | CL1) | (B2 | CL2) = (B1 | B2) | (CL1 | CL2)) */
- if ( (or_with->flags & ANYOF_LOCALE) == (cl->flags & ANYOF_LOCALE)
- && (!(or_with->flags & ANYOF_FOLD)
- || (cl->flags & ANYOF_FOLD)) ) {
- int i;
-
- /* OR char bitmap and class bitmap separately */
- for (i = 0; i < ANYOF_BITMAP_SIZE; i++)
- cl->bitmap[i] |= or_with->bitmap[i];
- if (or_with->flags & ANYOF_CLASS) {
- for (i = 0; i < ANYOF_CLASSBITMAP_SIZE; i++)
- cl->classflags[i] |= or_with->classflags[i];
- cl->flags |= ANYOF_CLASS;
- }
- }
- else { /* XXXX: logic is complicated, leave it along for a moment. */
- cl_anything(cl);
- }
- }
- if (or_with->flags & ANYOF_EOS)
- cl->flags |= ANYOF_EOS;
-}
-
-/* REx optimizer. Converts nodes into quickier variants "in place".
- Finds fixed substrings. */
-
-/* Stops at toplevel WHILEM as well as at `last'. At end *scanp is set
- to the position after last scanned or to NULL. */
-
-STATIC I32
-S_study_chunk(pTHX_ regnode **scanp, I32 *deltap, regnode *last, scan_data_t *data, U32 flags)
- /* scanp: Start here (read-write). */
- /* deltap: Write maxlen-minlen here. */
- /* last: Stop before this one. */
-{
- I32 min = 0, pars = 0, code;
- regnode *scan = *scanp, *next;
- I32 delta = 0;
- int is_inf = (flags & SCF_DO_SUBSTR) && (data->flags & SF_IS_INF);
- int is_inf_internal = 0; /* The studied chunk is infinite */
- I32 is_par = OP(scan) == OPEN ? ARG(scan) : 0;
- scan_data_t data_fake;
- struct regnode_charclass_class and_with; /* Valid if flags & SCF_DO_STCLASS_OR */
-
- while (scan && OP(scan) != END && scan < last) {
- /* Peephole optimizer: */
-
- if (PL_regkind[(U8)OP(scan)] == EXACT) {
- /* Merge several consecutive EXACTish nodes into one. */
- regnode *n = regnext(scan);
- U32 stringok = 1;
-#ifdef DEBUGGING
- regnode *stop = scan;
-#endif
-
- next = scan + NODE_SZ_STR(scan);
- /* Skip NOTHING, merge EXACT*. */
- while (n &&
- ( PL_regkind[(U8)OP(n)] == NOTHING ||
- (stringok && (OP(n) == OP(scan))))
- && NEXT_OFF(n)
- && NEXT_OFF(scan) + NEXT_OFF(n) < I16_MAX) {
- if (OP(n) == TAIL || n > next)
- stringok = 0;
- if (PL_regkind[(U8)OP(n)] == NOTHING) {
- NEXT_OFF(scan) += NEXT_OFF(n);
- next = n + NODE_STEP_REGNODE;
-#ifdef DEBUGGING
- if (stringok)
- stop = n;
-#endif
- n = regnext(n);
- }
- else if (stringok) {
- int oldl = STR_LEN(scan);
- regnode *nnext = regnext(n);
-
- if (oldl + STR_LEN(n) > U8_MAX)
- break;
- NEXT_OFF(scan) += NEXT_OFF(n);
- STR_LEN(scan) += STR_LEN(n);
- next = n + NODE_SZ_STR(n);
- /* Now we can overwrite *n : */
- Move(STRING(n), STRING(scan) + oldl, STR_LEN(n), char);
-#ifdef DEBUGGING
- stop = next - 1;
-#endif
- n = nnext;
- }
- }
-#ifdef DEBUGGING
- /* Allow dumping */
- n = scan + NODE_SZ_STR(scan);
- while (n <= stop) {
- if (PL_regkind[(U8)OP(n)] != NOTHING || OP(n) == NOTHING) {
- OP(n) = OPTIMIZED;
- NEXT_OFF(n) = 0;
- }
- n++;
- }
-#endif
- }
- /* Follow the next-chain of the current node and optimize
- away all the NOTHINGs from it. */
- if (OP(scan) != CURLYX) {
- int max = (reg_off_by_arg[OP(scan)]
- ? I32_MAX
- /* I32 may be smaller than U16 on CRAYs! */
- : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
- int off = (reg_off_by_arg[OP(scan)] ? ARG(scan) : NEXT_OFF(scan));
- int noff;
- regnode *n = scan;
-
- /* Skip NOTHING and LONGJMP. */
- while ((n = regnext(n))
- && ((PL_regkind[(U8)OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
- || ((OP(n) == LONGJMP) && (noff = ARG(n))))
- && off + noff < max)
- off += noff;
- if (reg_off_by_arg[OP(scan)])
- ARG(scan) = off;
- else
- NEXT_OFF(scan) = off;
- }
- /* The principal pseudo-switch. Cannot be a switch, since we
- look into several different things. */
- if (OP(scan) == BRANCH || OP(scan) == BRANCHJ
- || OP(scan) == IFTHEN || OP(scan) == SUSPEND) {
- next = regnext(scan);
- code = OP(scan);
-
- if (OP(next) == code || code == IFTHEN || code == SUSPEND) {
- I32 max1 = 0, min1 = I32_MAX, num = 0;
- struct regnode_charclass_class accum;
-
- if (flags & SCF_DO_SUBSTR) /* XXXX Add !SUSPEND? */
- scan_commit(data); /* Cannot merge strings after this. */
- if (flags & SCF_DO_STCLASS)
- cl_init_zero(&accum);
- while (OP(scan) == code) {
- I32 deltanext, minnext, f = 0, fake = 0;
- struct regnode_charclass_class this_class;
-
- num++;
- data_fake.flags = 0;
- if (data) {
- data_fake.whilem_c = data->whilem_c;
- data_fake.last_closep = data->last_closep;
- }
- else
- data_fake.last_closep = &fake;
- next = regnext(scan);
- scan = NEXTOPER(scan);
- if (code != BRANCH)
- scan = NEXTOPER(scan);
- if (flags & SCF_DO_STCLASS) {
- cl_init(&this_class);
- data_fake.start_class = &this_class;
- f = SCF_DO_STCLASS_AND;
- }
- if (flags & SCF_WHILEM_VISITED_POS)
- f |= SCF_WHILEM_VISITED_POS;
- /* we suppose the run is continuous, last=next...*/
- minnext = study_chunk(&scan, &deltanext, next,
- &data_fake, f);
- if (min1 > minnext)
- min1 = minnext;
- if (max1 < minnext + deltanext)
- max1 = minnext + deltanext;
- if (deltanext == I32_MAX)
- is_inf = is_inf_internal = 1;
- scan = next;
- if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
- pars++;
- if (data && (data_fake.flags & SF_HAS_EVAL))
- data->flags |= SF_HAS_EVAL;
- if (data)
- data->whilem_c = data_fake.whilem_c;
- if (flags & SCF_DO_STCLASS)
- cl_or(&accum, &this_class);
- if (code == SUSPEND)
- break;
- }
- if (code == IFTHEN && num < 2) /* Empty ELSE branch */
- min1 = 0;
- if (flags & SCF_DO_SUBSTR) {
- data->pos_min += min1;
- data->pos_delta += max1 - min1;
- if (max1 != min1 || is_inf)
- data->longest = &(data->longest_float);
- }
- min += min1;
- delta += max1 - min1;
- if (flags & SCF_DO_STCLASS_OR) {
- cl_or(data->start_class, &accum);
- if (min1) {
- cl_and(data->start_class, &and_with);
- flags &= ~SCF_DO_STCLASS;
- }
- }
- else if (flags & SCF_DO_STCLASS_AND) {
- if (min1) {
- cl_and(data->start_class, &accum);
- flags &= ~SCF_DO_STCLASS;
- }
- else {
- /* Switch to OR mode: cache the old value of
- * data->start_class */
- StructCopy(data->start_class, &and_with,
- struct regnode_charclass_class);
- flags &= ~SCF_DO_STCLASS_AND;
- StructCopy(&accum, data->start_class,
- struct regnode_charclass_class);
- flags |= SCF_DO_STCLASS_OR;
- data->start_class->flags |= ANYOF_EOS;
- }
- }
- }
- else if (code == BRANCHJ) /* single branch is optimized. */
- scan = NEXTOPER(NEXTOPER(scan));
- else /* single branch is optimized. */
- scan = NEXTOPER(scan);
- continue;
- }
- else if (OP(scan) == EXACT) {
- I32 l = STR_LEN(scan);
- if (UTF) {
- unsigned char *s = (unsigned char *)STRING(scan);
- unsigned char *e = s + l;
- I32 newl = 0;
- while (s < e) {
- newl++;
- s += UTF8SKIP(s);
- }
- l = newl;
- }
- min += l;
- if (flags & SCF_DO_SUBSTR) { /* Update longest substr. */
- /* The code below prefers earlier match for fixed
- offset, later match for variable offset. */
- if (data->last_end == -1) { /* Update the start info. */
- data->last_start_min = data->pos_min;
- data->last_start_max = is_inf
- ? I32_MAX : data->pos_min + data->pos_delta;
- }
- sv_catpvn(data->last_found, STRING(scan), STR_LEN(scan));
- data->last_end = data->pos_min + l;
- data->pos_min += l; /* As in the first entry. */
- data->flags &= ~SF_BEFORE_EOL;
- }
- if (flags & SCF_DO_STCLASS_AND) {
- /* Check whether it is compatible with what we know already! */
- int compat = 1;
-
- if (!(data->start_class->flags & (ANYOF_CLASS | ANYOF_LOCALE))
- && !ANYOF_BITMAP_TEST(data->start_class, *STRING(scan))
- && (!(data->start_class->flags & ANYOF_FOLD)
- || !ANYOF_BITMAP_TEST(data->start_class,
- PL_fold[*(U8*)STRING(scan)])))
- compat = 0;
- ANYOF_CLASS_ZERO(data->start_class);
- ANYOF_BITMAP_ZERO(data->start_class);
- if (compat)
- ANYOF_BITMAP_SET(data->start_class, *STRING(scan));
- data->start_class->flags &= ~ANYOF_EOS;
- }
- else if (flags & SCF_DO_STCLASS_OR) {
- /* false positive possible if the class is case-folded */
- ANYOF_BITMAP_SET(data->start_class, *STRING(scan));
- data->start_class->flags &= ~ANYOF_EOS;
- cl_and(data->start_class, &and_with);
- }
- flags &= ~SCF_DO_STCLASS;
- }
- else if (PL_regkind[(U8)OP(scan)] == EXACT) { /* But OP != EXACT! */
- I32 l = STR_LEN(scan);
-
- /* Search for fixed substrings supports EXACT only. */
- if (flags & SCF_DO_SUBSTR)
- scan_commit(data);
- if (UTF) {
- unsigned char *s = (unsigned char *)STRING(scan);
- unsigned char *e = s + l;
- I32 newl = 0;
- while (s < e) {
- newl++;
- s += UTF8SKIP(s);
- }
- l = newl;
- }
- min += l;
- if (data && (flags & SCF_DO_SUBSTR))
- data->pos_min += l;
- if (flags & SCF_DO_STCLASS_AND) {
- /* Check whether it is compatible with what we know already! */
- int compat = 1;
-
- if (!(data->start_class->flags & (ANYOF_CLASS | ANYOF_LOCALE))
- && !ANYOF_BITMAP_TEST(data->start_class, *STRING(scan))
- && !ANYOF_BITMAP_TEST(data->start_class,
- PL_fold[*(U8*)STRING(scan)]))
- compat = 0;
- ANYOF_CLASS_ZERO(data->start_class);
- ANYOF_BITMAP_ZERO(data->start_class);
- if (compat) {
- ANYOF_BITMAP_SET(data->start_class, *STRING(scan));
- data->start_class->flags &= ~ANYOF_EOS;
- data->start_class->flags |= ANYOF_FOLD;
- if (OP(scan) == EXACTFL)
- data->start_class->flags |= ANYOF_LOCALE;
- }
- }
- else if (flags & SCF_DO_STCLASS_OR) {
- if (data->start_class->flags & ANYOF_FOLD) {
- /* false positive possible if the class is case-folded.
- Assume that the locale settings are the same... */
- ANYOF_BITMAP_SET(data->start_class, *STRING(scan));
- data->start_class->flags &= ~ANYOF_EOS;
- }
- cl_and(data->start_class, &and_with);
- }
- flags &= ~SCF_DO_STCLASS;
- }
- else if (strchr((char*)PL_varies,OP(scan))) {
- I32 mincount, maxcount, minnext, deltanext, fl;
- I32 f = flags, pos_before = 0;
- regnode *oscan = scan;
- struct regnode_charclass_class this_class;
- struct regnode_charclass_class *oclass = NULL;
-
- switch (PL_regkind[(U8)OP(scan)]) {
- case WHILEM: /* End of (?:...)* . */
- scan = NEXTOPER(scan);
- goto finish;
- case PLUS:
- if (flags & (SCF_DO_SUBSTR | SCF_DO_STCLASS)) {
- next = NEXTOPER(scan);
- if (OP(next) == EXACT || (flags & SCF_DO_STCLASS)) {
- mincount = 1;
- maxcount = REG_INFTY;
- next = regnext(scan);
- scan = NEXTOPER(scan);
- goto do_curly;
- }
- }
- if (flags & SCF_DO_SUBSTR)
- data->pos_min++;
- min++;
- /* Fall through. */
- case STAR:
- if (flags & SCF_DO_STCLASS) {
- mincount = 0;
- maxcount = REG_INFTY;
- next = regnext(scan);
- scan = NEXTOPER(scan);
- goto do_curly;
- }
- is_inf = is_inf_internal = 1;
- scan = regnext(scan);
- if (flags & SCF_DO_SUBSTR) {
- scan_commit(data); /* Cannot extend fixed substrings */
- data->longest = &(data->longest_float);
- }
- goto optimize_curly_tail;
- case CURLY:
- mincount = ARG1(scan);
- maxcount = ARG2(scan);
- next = regnext(scan);
- if (OP(scan) == CURLYX) {
- I32 lp = (data ? *(data->last_closep) : 0);
-
- scan->flags = ((lp <= U8_MAX) ? lp : U8_MAX);
- }
- scan = NEXTOPER(scan) + EXTRA_STEP_2ARGS;
- do_curly:
- if (flags & SCF_DO_SUBSTR) {
- if (mincount == 0) scan_commit(data); /* Cannot extend fixed substrings */
- pos_before = data->pos_min;
- }
- if (data) {
- fl = data->flags;
- data->flags &= ~(SF_HAS_PAR|SF_IN_PAR|SF_HAS_EVAL);
- if (is_inf)
- data->flags |= SF_IS_INF;
- }
- if (flags & SCF_DO_STCLASS) {
- cl_init(&this_class);
- oclass = data->start_class;
- data->start_class = &this_class;
- f |= SCF_DO_STCLASS_AND;
- f &= ~SCF_DO_STCLASS_OR;
- }
- /* These are the cases when once a subexpression
- fails at a particular position, it cannot succeed
- even after backtracking at the enclosing scope.
-
- XXXX what if minimal match and we are at the
- initial run of {n,m}? */
- if ((mincount != maxcount - 1) && (maxcount != REG_INFTY))
- f &= ~SCF_WHILEM_VISITED_POS;
-
- /* This will finish on WHILEM, setting scan, or on NULL: */
- minnext = study_chunk(&scan, &deltanext, last, data,
- mincount == 0
- ? (f & ~SCF_DO_SUBSTR) : f);
-
- if (flags & SCF_DO_STCLASS)
- data->start_class = oclass;
- if (mincount == 0 || minnext == 0) {
- if (flags & SCF_DO_STCLASS_OR) {
- cl_or(data->start_class, &this_class);
- }
- else if (flags & SCF_DO_STCLASS_AND) {
- /* Switch to OR mode: cache the old value of
- * data->start_class */
- StructCopy(data->start_class, &and_with,
- struct regnode_charclass_class);
- flags &= ~SCF_DO_STCLASS_AND;
- StructCopy(&this_class, data->start_class,
- struct regnode_charclass_class);
- flags |= SCF_DO_STCLASS_OR;
- data->start_class->flags |= ANYOF_EOS;
- }
- } else { /* Non-zero len */
- if (flags & SCF_DO_STCLASS_OR) {
- cl_or(data->start_class, &this_class);
- cl_and(data->start_class, &and_with);
- }
- else if (flags & SCF_DO_STCLASS_AND)
- cl_and(data->start_class, &this_class);
- flags &= ~SCF_DO_STCLASS;
- }
- if (!scan) /* It was not CURLYX, but CURLY. */
- scan = next;
- if (ckWARN(WARN_REGEXP) && (minnext + deltanext == 0)
- && !(data->flags & (SF_HAS_PAR|SF_IN_PAR))
- && maxcount <= REG_INFTY/3) /* Complement check for big count */
- {
- vWARN(PL_regcomp_parse,
- "Quantifier unexpected on zero-length expression");
- }
-
- min += minnext * mincount;
- is_inf_internal |= ((maxcount == REG_INFTY
- && (minnext + deltanext) > 0)
- || deltanext == I32_MAX);
- is_inf |= is_inf_internal;
- delta += (minnext + deltanext) * maxcount - minnext * mincount;
-
- /* Try powerful optimization CURLYX => CURLYN. */
- if ( OP(oscan) == CURLYX && data
- && data->flags & SF_IN_PAR
- && !(data->flags & SF_HAS_EVAL)
- && !deltanext && minnext == 1 ) {
- /* Try to optimize to CURLYN. */
- regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS;
- regnode *nxt1 = nxt, *nxt2;
-
- /* Skip open. */
- nxt = regnext(nxt);
- if (!strchr((char*)PL_simple,OP(nxt))
- && !(PL_regkind[(U8)OP(nxt)] == EXACT
- && STR_LEN(nxt) == 1))
- goto nogo;
- nxt2 = nxt;
- nxt = regnext(nxt);
- if (OP(nxt) != CLOSE)
- goto nogo;
- /* Now we know that nxt2 is the only contents: */
- oscan->flags = ARG(nxt);
- OP(oscan) = CURLYN;
- OP(nxt1) = NOTHING; /* was OPEN. */
-#ifdef DEBUGGING
- OP(nxt1 + 1) = OPTIMIZED; /* was count. */
- NEXT_OFF(nxt1+ 1) = 0; /* just for consistancy. */
- NEXT_OFF(nxt2) = 0; /* just for consistancy with CURLY. */
- OP(nxt) = OPTIMIZED; /* was CLOSE. */
- OP(nxt + 1) = OPTIMIZED; /* was count. */
- NEXT_OFF(nxt+ 1) = 0; /* just for consistancy. */
-#endif
- }
- nogo:
-
- /* Try optimization CURLYX => CURLYM. */
- if ( OP(oscan) == CURLYX && data
- && !(data->flags & SF_HAS_PAR)
- && !(data->flags & SF_HAS_EVAL)
- && !deltanext ) {
- /* XXXX How to optimize if data == 0? */
- /* Optimize to a simpler form. */
- regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS; /* OPEN */
- regnode *nxt2;
-
- OP(oscan) = CURLYM;
- while ( (nxt2 = regnext(nxt)) /* skip over embedded stuff*/
- && (OP(nxt2) != WHILEM))
- nxt = nxt2;
- OP(nxt2) = SUCCEED; /* Whas WHILEM */
- /* Need to optimize away parenths. */
- if (data->flags & SF_IN_PAR) {
- /* Set the parenth number. */
- regnode *nxt1 = NEXTOPER(oscan) + EXTRA_STEP_2ARGS; /* OPEN*/
-
- if (OP(nxt) != CLOSE)
- FAIL("Panic opt close");
- oscan->flags = ARG(nxt);
- OP(nxt1) = OPTIMIZED; /* was OPEN. */
- OP(nxt) = OPTIMIZED; /* was CLOSE. */
-#ifdef DEBUGGING
- OP(nxt1 + 1) = OPTIMIZED; /* was count. */
- OP(nxt + 1) = OPTIMIZED; /* was count. */
- NEXT_OFF(nxt1 + 1) = 0; /* just for consistancy. */
- NEXT_OFF(nxt + 1) = 0; /* just for consistancy. */
-#endif
-#if 0
- while ( nxt1 && (OP(nxt1) != WHILEM)) {
- regnode *nnxt = regnext(nxt1);
-
- if (nnxt == nxt) {
- if (reg_off_by_arg[OP(nxt1)])
- ARG_SET(nxt1, nxt2 - nxt1);
- else if (nxt2 - nxt1 < U16_MAX)
- NEXT_OFF(nxt1) = nxt2 - nxt1;
- else
- OP(nxt) = NOTHING; /* Cannot beautify */
- }
- nxt1 = nnxt;
- }
-#endif
- /* Optimize again: */
- study_chunk(&nxt1, &deltanext, nxt, NULL, 0);
- }
- else
- oscan->flags = 0;
- }
- else if ((OP(oscan) == CURLYX)
- && (flags & SCF_WHILEM_VISITED_POS)
- /* See the comment on a similar expression above.
- However, this time it not a subexpression
- we care about, but the expression itself. */
- && (maxcount == REG_INFTY)
- && data && ++data->whilem_c < 16) {
- /* This stays as CURLYX, we can put the count/of pair. */
- /* Find WHILEM (as in regexec.c) */
- regnode *nxt = oscan + NEXT_OFF(oscan);
-
- if (OP(PREVOPER(nxt)) == NOTHING) /* LONGJMP */
- nxt += ARG(nxt);
- PREVOPER(nxt)->flags = data->whilem_c
- | (PL_reg_whilem_seen << 4); /* On WHILEM */
- }
- if (data && fl & (SF_HAS_PAR|SF_IN_PAR))
- pars++;
- if (flags & SCF_DO_SUBSTR) {
- SV *last_str = Nullsv;
- int counted = mincount != 0;
-
- if (data->last_end > 0 && mincount != 0) { /* Ends with a string. */
- I32 b = pos_before >= data->last_start_min
- ? pos_before : data->last_start_min;
- STRLEN l;
- char *s = SvPV(data->last_found, l);
- I32 old = b - data->last_start_min;
-
- if (UTF)
- old = utf8_hop((U8*)s, old) - (U8*)s;
-
- l -= old;
- /* Get the added string: */
- last_str = newSVpvn(s + old, l);
- if (deltanext == 0 && pos_before == b) {
- /* What was added is a constant string */
- if (mincount > 1) {
- SvGROW(last_str, (mincount * l) + 1);
- repeatcpy(SvPVX(last_str) + l,
- SvPVX(last_str), l, mincount - 1);
- SvCUR(last_str) *= mincount;
- /* Add additional parts. */
- SvCUR_set(data->last_found,
- SvCUR(data->last_found) - l);
- sv_catsv(data->last_found, last_str);
- data->last_end += l * (mincount - 1);
- }
- } else {
- /* start offset must point into the last copy */
- data->last_start_min += minnext * (mincount - 1);
- data->last_start_max += is_inf ? 0 : (maxcount - 1)
- * (minnext + data->pos_delta);
- }
- }
- /* It is counted once already... */
- data->pos_min += minnext * (mincount - counted);
- data->pos_delta += - counted * deltanext +
- (minnext + deltanext) * maxcount - minnext * mincount;
- if (mincount != maxcount) {
- /* Cannot extend fixed substrings found inside
- the group. */
- scan_commit(data);
- if (mincount && last_str) {
- sv_setsv(data->last_found, last_str);
- data->last_end = data->pos_min;
- data->last_start_min =
- data->pos_min - CHR_SVLEN(last_str);
- data->last_start_max = is_inf
- ? I32_MAX
- : data->pos_min + data->pos_delta
- - CHR_SVLEN(last_str);
- }
- data->longest = &(data->longest_float);
- }
- SvREFCNT_dec(last_str);
- }
- if (data && (fl & SF_HAS_EVAL))
- data->flags |= SF_HAS_EVAL;
- optimize_curly_tail:
- if (OP(oscan) != CURLYX) {
- while (PL_regkind[(U8)OP(next = regnext(oscan))] == NOTHING
- && NEXT_OFF(next))
- NEXT_OFF(oscan) += NEXT_OFF(next);
- }
- continue;
- default: /* REF and CLUMP only? */
- if (flags & SCF_DO_SUBSTR) {
- scan_commit(data); /* Cannot expect anything... */
- data->longest = &(data->longest_float);
- }
- is_inf = is_inf_internal = 1;
- if (flags & SCF_DO_STCLASS_OR)
- cl_anything(data->start_class);
- flags &= ~SCF_DO_STCLASS;
- break;
- }
- }
- else if (strchr((char*)PL_simple,OP(scan)) || PL_regkind[(U8)OP(scan)] == ANYUTF8) {
- int value;
-
- if (flags & SCF_DO_SUBSTR) {
- scan_commit(data);
- data->pos_min++;
- }
- min++;
- if (flags & SCF_DO_STCLASS) {
- data->start_class->flags &= ~ANYOF_EOS; /* No match on empty */
-
- /* Some of the logic below assumes that switching
- locale on will only add false positives. */
- switch (PL_regkind[(U8)OP(scan)]) {
- case ANYUTF8:
- case SANY:
- case SANYUTF8:
- case ALNUMUTF8:
- case ANYOFUTF8:
- case ALNUMLUTF8:
- case NALNUMUTF8:
- case NALNUMLUTF8:
- case SPACEUTF8:
- case NSPACEUTF8:
- case SPACELUTF8:
- case NSPACELUTF8:
- case DIGITUTF8:
- case NDIGITUTF8:
- default:
- do_default:
- /* Perl_croak(aTHX_ "panic: unexpected simple REx opcode %d", OP(scan)); */
- if (flags & SCF_DO_STCLASS_OR) /* Allow everything */
- cl_anything(data->start_class);
- break;
- case REG_ANY:
- if (OP(scan) == SANY)
- goto do_default;
- if (flags & SCF_DO_STCLASS_OR) { /* Everything but \n */
- value = (ANYOF_BITMAP_TEST(data->start_class,'\n')
- || (data->start_class->flags & ANYOF_CLASS));
- cl_anything(data->start_class);
- }
- if (flags & SCF_DO_STCLASS_AND || !value)
- ANYOF_BITMAP_CLEAR(data->start_class,'\n');
- break;
- case ANYOF:
- if (flags & SCF_DO_STCLASS_AND)
- cl_and(data->start_class,
- (struct regnode_charclass_class*)scan);
- else
- cl_or(data->start_class,
- (struct regnode_charclass_class*)scan);
- break;
- case ALNUM:
- if (flags & SCF_DO_STCLASS_AND) {
- if (!(data->start_class->flags & ANYOF_LOCALE)) {
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_NALNUM);
- for (value = 0; value < 256; value++)
- if (!isALNUM(value))
- ANYOF_BITMAP_CLEAR(data->start_class, value);
- }
- }
- else {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_SET(data->start_class,ANYOF_ALNUM);
- else {
- for (value = 0; value < 256; value++)
- if (isALNUM(value))
- ANYOF_BITMAP_SET(data->start_class, value);
- }
- }
- break;
- case ALNUML:
- if (flags & SCF_DO_STCLASS_AND) {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_NALNUM);
- }
- else {
- ANYOF_CLASS_SET(data->start_class,ANYOF_ALNUM);
- data->start_class->flags |= ANYOF_LOCALE;
- }
- break;
- case NALNUM:
- if (flags & SCF_DO_STCLASS_AND) {
- if (!(data->start_class->flags & ANYOF_LOCALE)) {
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_ALNUM);
- for (value = 0; value < 256; value++)
- if (isALNUM(value))
- ANYOF_BITMAP_CLEAR(data->start_class, value);
- }
- }
- else {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_SET(data->start_class,ANYOF_NALNUM);
- else {
- for (value = 0; value < 256; value++)
- if (!isALNUM(value))
- ANYOF_BITMAP_SET(data->start_class, value);
- }
- }
- break;
- case NALNUML:
- if (flags & SCF_DO_STCLASS_AND) {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_ALNUM);
- }
- else {
- data->start_class->flags |= ANYOF_LOCALE;
- ANYOF_CLASS_SET(data->start_class,ANYOF_NALNUM);
- }
- break;
- case SPACE:
- if (flags & SCF_DO_STCLASS_AND) {
- if (!(data->start_class->flags & ANYOF_LOCALE)) {
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_NSPACE);
- for (value = 0; value < 256; value++)
- if (!isSPACE(value))
- ANYOF_BITMAP_CLEAR(data->start_class, value);
- }
- }
- else {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_SET(data->start_class,ANYOF_SPACE);
- else {
- for (value = 0; value < 256; value++)
- if (isSPACE(value))
- ANYOF_BITMAP_SET(data->start_class, value);
- }
- }
- break;
- case SPACEL:
- if (flags & SCF_DO_STCLASS_AND) {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_NSPACE);
- }
- else {
- data->start_class->flags |= ANYOF_LOCALE;
- ANYOF_CLASS_SET(data->start_class,ANYOF_SPACE);
- }
- break;
- case NSPACE:
- if (flags & SCF_DO_STCLASS_AND) {
- if (!(data->start_class->flags & ANYOF_LOCALE)) {
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_SPACE);
- for (value = 0; value < 256; value++)
- if (isSPACE(value))
- ANYOF_BITMAP_CLEAR(data->start_class, value);
- }
- }
- else {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_SET(data->start_class,ANYOF_NSPACE);
- else {
- for (value = 0; value < 256; value++)
- if (!isSPACE(value))
- ANYOF_BITMAP_SET(data->start_class, value);
- }
- }
- break;
- case NSPACEL:
- if (flags & SCF_DO_STCLASS_AND) {
- if (data->start_class->flags & ANYOF_LOCALE) {
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_SPACE);
- for (value = 0; value < 256; value++)
- if (!isSPACE(value))
- ANYOF_BITMAP_CLEAR(data->start_class, value);
- }
- }
- else {
- data->start_class->flags |= ANYOF_LOCALE;
- ANYOF_CLASS_SET(data->start_class,ANYOF_NSPACE);
- }
- break;
- case DIGIT:
- if (flags & SCF_DO_STCLASS_AND) {
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_NDIGIT);
- for (value = 0; value < 256; value++)
- if (!isDIGIT(value))
- ANYOF_BITMAP_CLEAR(data->start_class, value);
- }
- else {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_SET(data->start_class,ANYOF_DIGIT);
- else {
- for (value = 0; value < 256; value++)
- if (isDIGIT(value))
- ANYOF_BITMAP_SET(data->start_class, value);
- }
- }
- break;
- case NDIGIT:
- if (flags & SCF_DO_STCLASS_AND) {
- ANYOF_CLASS_CLEAR(data->start_class,ANYOF_DIGIT);
- for (value = 0; value < 256; value++)
- if (isDIGIT(value))
- ANYOF_BITMAP_CLEAR(data->start_class, value);
- }
- else {
- if (data->start_class->flags & ANYOF_LOCALE)
- ANYOF_CLASS_SET(data->start_class,ANYOF_NDIGIT);
- else {
- for (value = 0; value < 256; value++)
- if (!isDIGIT(value))
- ANYOF_BITMAP_SET(data->start_class, value);
- }
- }
- break;
- }
- if (flags & SCF_DO_STCLASS_OR)
- cl_and(data->start_class, &and_with);
- flags &= ~SCF_DO_STCLASS;
- }
- }
- else if (PL_regkind[(U8)OP(scan)] == EOL && flags & SCF_DO_SUBSTR) {
- data->flags |= (OP(scan) == MEOL
- ? SF_BEFORE_MEOL
- : SF_BEFORE_SEOL);
- }
- else if ( PL_regkind[(U8)OP(scan)] == BRANCHJ
- /* Lookbehind, or need to calculate parens/evals/stclass: */
- && (scan->flags || data || (flags & SCF_DO_STCLASS))
- && (OP(scan) == IFMATCH || OP(scan) == UNLESSM)) {
- /* Lookahead/lookbehind */
- I32 deltanext, minnext, fake = 0;
- regnode *nscan;
- struct regnode_charclass_class intrnl;
- int f = 0;
-
- data_fake.flags = 0;
- if (data) {
- data_fake.whilem_c = data->whilem_c;
- data_fake.last_closep = data->last_closep;
- }
- else
- data_fake.last_closep = &fake;
- if ( flags & SCF_DO_STCLASS && !scan->flags
- && OP(scan) == IFMATCH ) { /* Lookahead */
- cl_init(&intrnl);
- data_fake.start_class = &intrnl;
- f |= SCF_DO_STCLASS_AND;
- }
- if (flags & SCF_WHILEM_VISITED_POS)
- f |= SCF_WHILEM_VISITED_POS;
- next = regnext(scan);
- nscan = NEXTOPER(NEXTOPER(scan));
- minnext = study_chunk(&nscan, &deltanext, last, &data_fake, f);
- if (scan->flags) {
- if (deltanext) {
- vFAIL("Variable length lookbehind not implemented");
- }
- else if (minnext > U8_MAX) {
- vFAIL2("Lookbehind longer than %"UVuf" not implemented", (UV)U8_MAX);
- }
- scan->flags = minnext;
- }
- if (data && data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
- pars++;
- if (data && (data_fake.flags & SF_HAS_EVAL))
- data->flags |= SF_HAS_EVAL;
- if (data)
- data->whilem_c = data_fake.whilem_c;
- if (f & SCF_DO_STCLASS_AND) {
- int was = (data->start_class->flags & ANYOF_EOS);
-
- cl_and(data->start_class, &intrnl);
- if (was)
- data->start_class->flags |= ANYOF_EOS;
- }
- }
- else if (OP(scan) == OPEN) {
- pars++;
- }
- else if (OP(scan) == CLOSE) {
- if (ARG(scan) == is_par) {
- next = regnext(scan);
-
- if ( next && (OP(next) != WHILEM) && next < last)
- is_par = 0; /* Disable optimization */
- }
- if (data)
- *(data->last_closep) = ARG(scan);
- }
- else if (OP(scan) == EVAL) {
- if (data)
- data->flags |= SF_HAS_EVAL;
- }
- else if (OP(scan) == LOGICAL && scan->flags == 2) { /* Embedded follows */
- if (flags & SCF_DO_SUBSTR) {
- scan_commit(data);
- data->longest = &(data->longest_float);
- }
- is_inf = is_inf_internal = 1;
- if (flags & SCF_DO_STCLASS_OR) /* Allow everything */
- cl_anything(data->start_class);
- flags &= ~SCF_DO_STCLASS;
- }
- /* Else: zero-length, ignore. */
- scan = regnext(scan);
- }
-
- finish:
- *scanp = scan;
- *deltap = is_inf_internal ? I32_MAX : delta;
- if (flags & SCF_DO_SUBSTR && is_inf)
- data->pos_delta = I32_MAX - data->pos_min;
- if (is_par > U8_MAX)
- is_par = 0;
- if (is_par && pars==1 && data) {
- data->flags |= SF_IN_PAR;
- data->flags &= ~SF_HAS_PAR;
- }
- else if (pars && data) {
- data->flags |= SF_HAS_PAR;
- data->flags &= ~SF_IN_PAR;
- }
- if (flags & SCF_DO_STCLASS_OR)
- cl_and(data->start_class, &and_with);
- return min;
-}
-
-STATIC I32
-S_add_data(pTHX_ I32 n, char *s)
-{
- if (PL_regcomp_rx->data) {
- Renewc(PL_regcomp_rx->data,
- sizeof(*PL_regcomp_rx->data) + sizeof(void*) * (PL_regcomp_rx->data->count + n - 1),
- char, struct reg_data);
- Renew(PL_regcomp_rx->data->what, PL_regcomp_rx->data->count + n, U8);
- PL_regcomp_rx->data->count += n;
- }
- else {
- Newc(1207, PL_regcomp_rx->data, sizeof(*PL_regcomp_rx->data) + sizeof(void*) * (n - 1),
- char, struct reg_data);
- New(1208, PL_regcomp_rx->data->what, n, U8);
- PL_regcomp_rx->data->count = n;
- }
- Copy(s, PL_regcomp_rx->data->what + PL_regcomp_rx->data->count - n, n, U8);
- return PL_regcomp_rx->data->count - n;
-}
-
-void
-Perl_reginitcolors(pTHX)
-{
- int i = 0;
- char *s = PerlEnv_getenv("PERL_RE_COLORS");
-
- if (s) {
- PL_colors[0] = s = savepv(s);
- while (++i < 6) {
- s = strchr(s, '\t');
- if (s) {
- *s = '\0';
- PL_colors[i] = ++s;
- }
- else
- PL_colors[i] = s = "";
- }
- } else {
- while (i < 6)
- PL_colors[i++] = "";
- }
- PL_colorset = 1;
-}
-
-
-/*
- - pregcomp - 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 *
-Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm)
-{
- register regexp *r;
- regnode *scan;
- regnode *first;
- I32 flags;
- I32 minlen = 0;
- I32 sawplus = 0;
- I32 sawopen = 0;
- scan_data_t data;
-
- if (exp == NULL)
- FAIL("NULL regexp argument");
-
- if (pm->op_pmdynflags & PMdf_UTF8) {
- PL_reg_flags |= RF_utf8;
- }
- else
- PL_reg_flags = 0;
-
- PL_regprecomp = exp;
- DEBUG_r(if (!PL_colorset) reginitcolors());
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%sCompiling REx%s `%s%*s%s'\n",
- PL_colors[4],PL_colors[5],PL_colors[0],
- (int)(xend - exp), PL_regprecomp, PL_colors[1]));
- PL_regflags = pm->op_pmflags;
- PL_regsawback = 0;
-
- PL_regseen = 0;
- PL_seen_zerolen = *exp == '^' ? -1 : 0;
- PL_seen_evals = 0;
- PL_extralen = 0;
-
- /* First pass: determine size, legality. */
- PL_regcomp_parse = exp;
- PL_regxend = xend;
- PL_regnaughty = 0;
- PL_regnpar = 1;
- PL_regsize = 0L;
- PL_regcode = &PL_regdummy;
- PL_reg_whilem_seen = 0;
-#if 0 /* REGC() is (currently) a NOP at the first pass.
- * Clever compilers notice this and complain. --jhi */
- REGC((U8)REG_MAGIC, (char*)PL_regcode);
-#endif
- if (reg(0, &flags) == NULL) {
- PL_regprecomp = Nullch;
- return(NULL);
- }
- DEBUG_r(PerlIO_printf(Perl_debug_log, "size %"IVdf" ", (IV)PL_regsize));
-
- /* Small enough for pointer-storage convention?
- If extralen==0, this means that we will not need long jumps. */
- if (PL_regsize >= 0x10000L && PL_extralen)
- PL_regsize += PL_extralen;
- else
- PL_extralen = 0;
- if (PL_reg_whilem_seen > 15)
- PL_reg_whilem_seen = 15;
-
- /* Allocate space and initialize. */
- Newc(1001, r, sizeof(regexp) + (unsigned)PL_regsize * sizeof(regnode),
- char, regexp);
- if (r == NULL)
- FAIL("Regexp out of space");
-
-#ifdef DEBUGGING
- /* avoid reading uninitialized memory in DEBUGGING code in study_chunk() */
- Zero(r, sizeof(regexp) + (unsigned)PL_regsize * sizeof(regnode), char);
-#endif
- r->refcnt = 1;
- r->prelen = xend - exp;
- r->precomp = savepvn(PL_regprecomp, r->prelen);
- r->subbeg = NULL;
- r->reganch = pm->op_pmflags & PMf_COMPILETIME;
- r->nparens = PL_regnpar - 1; /* set early to validate backrefs */
-
- r->substrs = 0; /* Useful during FAIL. */
- r->startp = 0; /* Useful during FAIL. */
- r->endp = 0; /* Useful during FAIL. */
-
- PL_regcomp_rx = r;
-
- /* Second pass: emit code. */
- PL_regcomp_parse = exp;
- PL_regxend = xend;
- PL_regnaughty = 0;
- PL_regnpar = 1;
- PL_regcode = r->program;
- /* Store the count of eval-groups for security checks: */
- PL_regcode->next_off = ((PL_seen_evals > U16_MAX) ? U16_MAX : PL_seen_evals);
- REGC((U8)REG_MAGIC, (char*) PL_regcode++);
- r->data = 0;
- if (reg(0, &flags) == NULL)
- return(NULL);
-
- /* Dig out information for optimizations. */
- r->reganch = pm->op_pmflags & PMf_COMPILETIME; /* Again? */
- pm->op_pmflags = PL_regflags;
- if (UTF)
- r->reganch |= ROPT_UTF8;
- r->regstclass = NULL;
- if (PL_regnaughty >= 10) /* Probably an expensive pattern. */
- r->reganch |= ROPT_NAUGHTY;
- scan = r->program + 1; /* First BRANCH. */
-
- /* XXXX To minimize changes to RE engine we always allocate
- 3-units-long substrs field. */
- Newz(1004, r->substrs, 1, struct reg_substr_data);
-
- StructCopy(&zero_scan_data, &data, scan_data_t);
- /* XXXX Should not we check for something else? Usually it is OPEN1... */
- if (OP(scan) != BRANCH) { /* Only one top-level choice. */
- I32 fake;
- STRLEN longest_float_length, longest_fixed_length;
- struct regnode_charclass_class ch_class;
- int stclass_flag;
- I32 last_close = 0;
-
- first = scan;
- /* Skip introductions and multiplicators >= 1. */
- while ((OP(first) == OPEN && (sawopen = 1)) ||
- /* An OR of *one* alternative - should not happen now. */
- (OP(first) == BRANCH && OP(regnext(first)) != BRANCH) ||
- (OP(first) == PLUS) ||
- (OP(first) == MINMOD) ||
- /* An {n,m} with n>0 */
- (PL_regkind[(U8)OP(first)] == CURLY && ARG1(first) > 0) ) {
- if (OP(first) == PLUS)
- sawplus = 1;
- else
- first += regarglen[(U8)OP(first)];
- first = NEXTOPER(first);
- }
-
- /* Starting-point info. */
- again:
- if (PL_regkind[(U8)OP(first)] == EXACT) {
- if (OP(first) == EXACT); /* Empty, get anchored substr later. */
- else if ((OP(first) == EXACTF || OP(first) == EXACTFL)
- && !UTF)
- r->regstclass = first;
- }
- else if (strchr((char*)PL_simple,OP(first)))
- r->regstclass = first;
- else if (PL_regkind[(U8)OP(first)] == BOUND ||
- PL_regkind[(U8)OP(first)] == NBOUND)
- r->regstclass = first;
- else if (PL_regkind[(U8)OP(first)] == BOL) {
- r->reganch |= (OP(first) == MBOL
- ? ROPT_ANCH_MBOL
- : (OP(first) == SBOL
- ? ROPT_ANCH_SBOL
- : ROPT_ANCH_BOL));
- first = NEXTOPER(first);
- goto again;
- }
- else if (OP(first) == GPOS) {
- r->reganch |= ROPT_ANCH_GPOS;
- first = NEXTOPER(first);
- goto again;
- }
- else if ((OP(first) == STAR &&
- PL_regkind[(U8)OP(NEXTOPER(first))] == REG_ANY) &&
- !(r->reganch & ROPT_ANCH) )
- {
- /* turn .* into ^.* with an implied $*=1 */
- int type = OP(NEXTOPER(first));
-
- if (type == REG_ANY || type == ANYUTF8)
- type = ROPT_ANCH_MBOL;
- else
- type = ROPT_ANCH_SBOL;
-
- r->reganch |= type | ROPT_IMPLICIT;
- first = NEXTOPER(first);
- goto again;
- }
- if (sawplus && (!sawopen || !PL_regsawback)
- && !(PL_regseen & REG_SEEN_EVAL)) /* May examine pos and $& */
- /* x+ must match at the 1st pos of run of x's */
- r->reganch |= ROPT_SKIP;
-
- /* Scan is after the zeroth branch, first is atomic matcher. */
- DEBUG_r(PerlIO_printf(Perl_debug_log, "first at %"IVdf"\n",
- (IV)(first - scan + 1)));
- /*
- * 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 c_offset_min has been invalidated, since the
- * earlier string may buy us something the later one won't.]
- */
- minlen = 0;
-
- data.longest_fixed = newSVpvn("",0);
- data.longest_float = newSVpvn("",0);
- data.last_found = newSVpvn("",0);
- data.longest = &(data.longest_fixed);
- first = scan;
- if (!r->regstclass) {
- cl_init(&ch_class);
- data.start_class = &ch_class;
- stclass_flag = SCF_DO_STCLASS_AND;
- } else /* XXXX Check for BOUND? */
- stclass_flag = 0;
- data.last_closep = &last_close;
-
- minlen = study_chunk(&first, &fake, scan + PL_regsize, /* Up to end */
- &data, SCF_DO_SUBSTR | SCF_WHILEM_VISITED_POS | stclass_flag);
- if ( PL_regnpar == 1 && data.longest == &(data.longest_fixed)
- && data.last_start_min == 0 && data.last_end > 0
- && !PL_seen_zerolen
- && (!(PL_regseen & REG_SEEN_GPOS) || (r->reganch & ROPT_ANCH_GPOS)))
- r->reganch |= ROPT_CHECK_ALL;
- scan_commit(&data);
- SvREFCNT_dec(data.last_found);
-
- longest_float_length = CHR_SVLEN(data.longest_float);
- if (longest_float_length
- || (data.flags & SF_FL_BEFORE_EOL
- && (!(data.flags & SF_FL_BEFORE_MEOL)
- || (PL_regflags & PMf_MULTILINE)))) {
- int t;
-
- if (SvCUR(data.longest_fixed) /* ok to leave SvCUR */
- && data.offset_fixed == data.offset_float_min
- && SvCUR(data.longest_fixed) == SvCUR(data.longest_float))
- goto remove_float; /* As in (a)+. */
-
- r->float_substr = data.longest_float;
- r->float_min_offset = data.offset_float_min;
- r->float_max_offset = data.offset_float_max;
- t = (data.flags & SF_FL_BEFORE_EOL /* Can't have SEOL and MULTI */
- && (!(data.flags & SF_FL_BEFORE_MEOL)
- || (PL_regflags & PMf_MULTILINE)));
- fbm_compile(r->float_substr, t ? FBMcf_TAIL : 0);
- }
- else {
- remove_float:
- r->float_substr = Nullsv;
- SvREFCNT_dec(data.longest_float);
- longest_float_length = 0;
- }
-
- longest_fixed_length = CHR_SVLEN(data.longest_fixed);
- if (longest_fixed_length
- || (data.flags & SF_FIX_BEFORE_EOL /* Cannot have SEOL and MULTI */
- && (!(data.flags & SF_FIX_BEFORE_MEOL)
- || (PL_regflags & PMf_MULTILINE)))) {
- int t;
-
- r->anchored_substr = data.longest_fixed;
- r->anchored_offset = data.offset_fixed;
- t = (data.flags & SF_FIX_BEFORE_EOL /* Can't have SEOL and MULTI */
- && (!(data.flags & SF_FIX_BEFORE_MEOL)
- || (PL_regflags & PMf_MULTILINE)));
- fbm_compile(r->anchored_substr, t ? FBMcf_TAIL : 0);
- }
- else {
- r->anchored_substr = Nullsv;
- SvREFCNT_dec(data.longest_fixed);
- longest_fixed_length = 0;
- }
- if (r->regstclass
- && (OP(r->regstclass) == REG_ANY || OP(r->regstclass) == ANYUTF8
- || OP(r->regstclass) == SANYUTF8 || OP(r->regstclass) == SANY))
- r->regstclass = NULL;
- if ((!r->anchored_substr || r->anchored_offset) && stclass_flag
- && !(data.start_class->flags & ANYOF_EOS)
- && !cl_is_anything(data.start_class)) {
- SV *sv;
- I32 n = add_data(1, "f");
-
- New(1006, PL_regcomp_rx->data->data[n], 1,
- struct regnode_charclass_class);
- StructCopy(data.start_class,
- (struct regnode_charclass_class*)PL_regcomp_rx->data->data[n],
- struct regnode_charclass_class);
- r->regstclass = (regnode*)PL_regcomp_rx->data->data[n];
- r->reganch &= ~ROPT_SKIP; /* Used in find_byclass(). */
- DEBUG_r((sv = sv_newmortal(),
- regprop(sv, (regnode*)data.start_class),
- PerlIO_printf(Perl_debug_log, "synthetic stclass `%s'.\n",
- SvPVX(sv))));
- }
-
- /* A temporary algorithm prefers floated substr to fixed one to dig more info. */
- if (longest_fixed_length > longest_float_length) {
- r->check_substr = r->anchored_substr;
- r->check_offset_min = r->check_offset_max = r->anchored_offset;
- if (r->reganch & ROPT_ANCH_SINGLE)
- r->reganch |= ROPT_NOSCAN;
- }
- else {
- r->check_substr = r->float_substr;
- r->check_offset_min = data.offset_float_min;
- r->check_offset_max = data.offset_float_max;
- }
- /* XXXX Currently intuiting is not compatible with ANCH_GPOS.
- This should be changed ASAP! */
- if (r->check_substr && !(r->reganch & ROPT_ANCH_GPOS)) {
- r->reganch |= RE_USE_INTUIT;
- if (SvTAIL(r->check_substr))
- r->reganch |= RE_INTUIT_TAIL;
- }
- }
- else {
- /* Several toplevels. Best we can is to set minlen. */
- I32 fake;
- struct regnode_charclass_class ch_class;
- I32 last_close = 0;
-
- DEBUG_r(PerlIO_printf(Perl_debug_log, "\n"));
- scan = r->program + 1;
- cl_init(&ch_class);
- data.start_class = &ch_class;
- data.last_closep = &last_close;
- minlen = study_chunk(&scan, &fake, scan + PL_regsize, &data, SCF_DO_STCLASS_AND|SCF_WHILEM_VISITED_POS);
- r->check_substr = r->anchored_substr = r->float_substr = Nullsv;
- if (!(data.start_class->flags & ANYOF_EOS)
- && !cl_is_anything(data.start_class)) {
- SV *sv;
- I32 n = add_data(1, "f");
-
- New(1006, PL_regcomp_rx->data->data[n], 1,
- struct regnode_charclass_class);
- StructCopy(data.start_class,
- (struct regnode_charclass_class*)PL_regcomp_rx->data->data[n],
- struct regnode_charclass_class);
- r->regstclass = (regnode*)PL_regcomp_rx->data->data[n];
- r->reganch &= ~ROPT_SKIP; /* Used in find_byclass(). */
- DEBUG_r((sv = sv_newmortal(),
- regprop(sv, (regnode*)data.start_class),
- PerlIO_printf(Perl_debug_log, "synthetic stclass `%s'.\n",
- SvPVX(sv))));
- }
- }
-
- r->minlen = minlen;
- if (PL_regseen & REG_SEEN_GPOS)
- r->reganch |= ROPT_GPOS_SEEN;
- if (PL_regseen & REG_SEEN_LOOKBEHIND)
- r->reganch |= ROPT_LOOKBEHIND_SEEN;
- if (PL_regseen & REG_SEEN_EVAL)
- r->reganch |= ROPT_EVAL_SEEN;
- Newz(1002, r->startp, PL_regnpar, I32);
- Newz(1002, r->endp, PL_regnpar, I32);
- PL_regdata = r->data; /* for regprop() ANYOFUTF8 */
- DEBUG_r(regdump(r));
- 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 regnode *
-S_reg(pTHX_ I32 paren, I32 *flagp)
- /* paren: Parenthesized? 0=top, 1=(, inside: changed to letter. */
-{
- register regnode *ret; /* Will be the head of the group. */
- register regnode *br;
- register regnode *lastbr;
- register regnode *ender = 0;
- register I32 parno = 0;
- I32 flags, oregflags = PL_regflags, have_branch = 0, open = 0;
- char *oregcomp_parse = PL_regcomp_parse;
- char c;
-
- *flagp = 0; /* Tentatively. */
-
- /* Make an OPEN node, if parenthesized. */
- if (paren) {
- if (*PL_regcomp_parse == '?') {
- U16 posflags = 0, negflags = 0;
- U16 *flagsp = &posflags;
- int logical = 0;
- char *seqstart = PL_regcomp_parse;
-
- PL_regcomp_parse++;
- paren = *PL_regcomp_parse++;
- ret = NULL; /* For look-ahead/behind. */
- switch (paren) {
- case '<':
- PL_regseen |= REG_SEEN_LOOKBEHIND;
- if (*PL_regcomp_parse == '!')
- paren = ',';
- if (*PL_regcomp_parse != '=' && *PL_regcomp_parse != '!')
- goto unknown;
- PL_regcomp_parse++;
- case '=':
- case '!':
- PL_seen_zerolen++;
- case ':':
- case '>':
- break;
- case '$':
- case '@':
- vFAIL2("Sequence (?%c...) not implemented", (int)paren);
- break;
- case '#':
- while (*PL_regcomp_parse && *PL_regcomp_parse != ')')
- PL_regcomp_parse++;
- if (*PL_regcomp_parse != ')')
- FAIL("Sequence (?#... not terminated");
- nextchar();
- *flagp = TRYAGAIN;
- return NULL;
- case 'p':
- if (SIZE_ONLY)
- vWARN(PL_regcomp_parse, "(?p{}) is deprecated - use (??{})");
- /* FALL THROUGH*/
- case '?':
- logical = 1;
- paren = *PL_regcomp_parse++;
- /* FALL THROUGH */
- case '{':
- {
- I32 count = 1, n = 0;
- char c;
- char *s = PL_regcomp_parse;
- SV *sv;
- OP_4tree *sop, *rop;
-
- PL_seen_zerolen++;
- PL_regseen |= REG_SEEN_EVAL;
- while (count && (c = *PL_regcomp_parse)) {
- if (c == '\\' && PL_regcomp_parse[1])
- PL_regcomp_parse++;
- else if (c == '{')
- count++;
- else if (c == '}')
- count--;
- PL_regcomp_parse++;
- }
- if (*PL_regcomp_parse != ')')
- {
- PL_regcomp_parse = s;
- vFAIL("Sequence (?{...}) not terminated or not {}-balanced");
- }
- if (!SIZE_ONLY) {
- AV *av;
-
- if (PL_regcomp_parse - 1 - s)
- sv = newSVpvn(s, PL_regcomp_parse - 1 - s);
- else
- sv = newSVpvn("", 0);
-
- ENTER;
- Perl_save_re_context(aTHX);
- rop = sv_compile_2op(sv, &sop, "re", &av);
- LEAVE;
-
- n = add_data(3, "nop");
- PL_regcomp_rx->data->data[n] = (void*)rop;
- PL_regcomp_rx->data->data[n+1] = (void*)sop;
- PL_regcomp_rx->data->data[n+2] = (void*)av;
- SvREFCNT_dec(sv);
- }
- else { /* First pass */
- if (PL_reginterp_cnt < ++PL_seen_evals
- && PL_curcop != &PL_compiling)
- /* No compiled RE interpolated, has runtime
- components ===> unsafe. */
- FAIL("Eval-group not allowed at runtime, use re 'eval'");
- if (PL_tainted)
- FAIL("Eval-group in insecure regular expression");
- }
-
- nextchar();
- if (logical) {
- ret = reg_node(LOGICAL);
- if (!SIZE_ONLY)
- ret->flags = 2;
- regtail(ret, reganode(EVAL, n));
- return ret;
- }
- return reganode(EVAL, n);
- }
- case '(':
- {
- if (PL_regcomp_parse[0] == '?') {
- if (PL_regcomp_parse[1] == '=' || PL_regcomp_parse[1] == '!'
- || PL_regcomp_parse[1] == '<'
- || PL_regcomp_parse[1] == '{') { /* Lookahead or eval. */
- I32 flag;
-
- ret = reg_node(LOGICAL);
- if (!SIZE_ONLY)
- ret->flags = 1;
- regtail(ret, reg(1, &flag));
- goto insert_if;
- }
- }
- else if (PL_regcomp_parse[0] >= '1' && PL_regcomp_parse[0] <= '9' ) {
- parno = atoi(PL_regcomp_parse++);
-
- while (isDIGIT(*PL_regcomp_parse))
- PL_regcomp_parse++;
- ret = reganode(GROUPP, parno);
- if ((c = *nextchar()) != ')')
- vFAIL("Switch condition not recognized");
- insert_if:
- regtail(ret, reganode(IFTHEN, 0));
- br = regbranch(&flags, 1);
- if (br == NULL)
- br = reganode(LONGJMP, 0);
- else
- regtail(br, reganode(LONGJMP, 0));
- c = *nextchar();
- if (flags&HASWIDTH)
- *flagp |= HASWIDTH;
- if (c == '|') {
- lastbr = reganode(IFTHEN, 0); /* Fake one for optimizer. */
- regbranch(&flags, 1);
- regtail(ret, lastbr);
- if (flags&HASWIDTH)
- *flagp |= HASWIDTH;
- c = *nextchar();
- }
- else
- lastbr = NULL;
- if (c != ')')
- vFAIL("Switch (?(condition)... contains too many branches");
- ender = reg_node(TAIL);
- regtail(br, ender);
- if (lastbr) {
- regtail(lastbr, ender);
- regtail(NEXTOPER(NEXTOPER(lastbr)), ender);
- }
- else
- regtail(ret, ender);
- return ret;
- }
- else {
- vFAIL2("Unknown switch condition (?(%.2s", PL_regcomp_parse);
- }
- }
- case 0:
- PL_regcomp_parse--; /* for vFAIL to print correctly */
- vFAIL("Sequence (? incomplete");
- break;
- default:
- --PL_regcomp_parse;
- parse_flags:
- while (*PL_regcomp_parse && strchr("iogcmsx", *PL_regcomp_parse)) {
- if (*PL_regcomp_parse != 'o')
- pmflag(flagsp, *PL_regcomp_parse);
- ++PL_regcomp_parse;
- }
- if (*PL_regcomp_parse == '-') {
- flagsp = &negflags;
- ++PL_regcomp_parse;
- goto parse_flags;
- }
- PL_regflags |= posflags;
- PL_regflags &= ~negflags;
- if (*PL_regcomp_parse == ':') {
- PL_regcomp_parse++;
- paren = ':';
- break;
- }
- unknown:
- if (*PL_regcomp_parse != ')') {
- PL_regcomp_parse++;
- vFAIL3("Sequence (%.*s...) not recognized", PL_regcomp_parse-seqstart, seqstart);
- }
- nextchar();
- *flagp = TRYAGAIN;
- return NULL;
- }
- }
- else {
- parno = PL_regnpar;
- PL_regnpar++;
- ret = reganode(OPEN, parno);
- open = 1;
- }
- }
- else
- ret = NULL;
-
- /* Pick up the branches, linking them together. */
- br = regbranch(&flags, 1);
- if (br == NULL)
- return(NULL);
- if (*PL_regcomp_parse == '|') {
- if (!SIZE_ONLY && PL_extralen) {
- reginsert(BRANCHJ, br);
- }
- else
- reginsert(BRANCH, br);
- have_branch = 1;
- if (SIZE_ONLY)
- PL_extralen += 1; /* For BRANCHJ-BRANCH. */
- }
- else if (paren == ':') {
- *flagp |= flags&SIMPLE;
- }
- if (open) { /* Starts with OPEN. */
- regtail(ret, br); /* OPEN -> first. */
- }
- else if (paren != '?') /* Not Conditional */
- ret = br;
- if (flags&HASWIDTH)
- *flagp |= HASWIDTH;
- *flagp |= flags&SPSTART;
- lastbr = br;
- while (*PL_regcomp_parse == '|') {
- if (!SIZE_ONLY && PL_extralen) {
- ender = reganode(LONGJMP,0);
- regtail(NEXTOPER(NEXTOPER(lastbr)), ender); /* Append to the previous. */
- }
- if (SIZE_ONLY)
- PL_extralen += 2; /* Account for LONGJMP. */
- nextchar();
- br = regbranch(&flags, 0);
- if (br == NULL)
- return(NULL);
- regtail(lastbr, br); /* BRANCH -> BRANCH. */
- lastbr = br;
- if (flags&HASWIDTH)
- *flagp |= HASWIDTH;
- *flagp |= flags&SPSTART;
- }
-
- if (have_branch || paren != ':') {
- /* Make a closing node, and hook it on the end. */
- switch (paren) {
- case ':':
- ender = reg_node(TAIL);
- break;
- case 1:
- ender = reganode(CLOSE, parno);
- break;
- case '<':
- case ',':
- case '=':
- case '!':
- *flagp &= ~HASWIDTH;
- /* FALL THROUGH */
- case '>':
- ender = reg_node(SUCCEED);
- break;
- case 0:
- ender = reg_node(END);
- break;
- }
- regtail(lastbr, ender);
-
- if (have_branch) {
- /* Hook the tails of the branches to the closing node. */
- for (br = ret; br != NULL; br = regnext(br)) {
- regoptail(br, ender);
- }
- }
- }
-
- {
- char *p;
- static char parens[] = "=!<,>";
-
- if (paren && (p = strchr(parens, paren))) {
- int node = ((p - parens) % 2) ? UNLESSM : IFMATCH;
- int flag = (p - parens) > 1;
-
- if (paren == '>')
- node = SUSPEND, flag = 0;
- reginsert(node,ret);
- ret->flags = flag;
- regtail(ret, reg_node(TAIL));
- }
- }
-
- /* Check for proper termination. */
- if (paren) {
- PL_regflags = oregflags;
- if (PL_regcomp_parse >= PL_regxend || *nextchar() != ')') {
- PL_regcomp_parse = oregcomp_parse;
- vFAIL("Unmatched (");
- }
- }
- else if (!paren && PL_regcomp_parse < PL_regxend) {
- if (*PL_regcomp_parse == ')') {
- PL_regcomp_parse++;
- vFAIL("Unmatched )");
- }
- else
- FAIL("Junk on end of regexp"); /* "Can't happen". */
- /* NOTREACHED */
- }
-
- return(ret);
-}
-
-/*
- - regbranch - one alternative of an | operator
- *
- * Implements the concatenation operator.
- */
-STATIC regnode *
-S_regbranch(pTHX_ I32 *flagp, I32 first)
-{
- register regnode *ret;
- register regnode *chain = NULL;
- register regnode *latest;
- I32 flags = 0, c = 0;
-
- if (first)
- ret = NULL;
- else {
- if (!SIZE_ONLY && PL_extralen)
- ret = reganode(BRANCHJ,0);
- else
- ret = reg_node(BRANCH);
- }
-
- if (!first && SIZE_ONLY)
- PL_extralen += 1; /* BRANCHJ */
-
- *flagp = WORST; /* Tentatively. */
-
- PL_regcomp_parse--;
- nextchar();
- while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != '|' && *PL_regcomp_parse != ')') {
- flags &= ~TRYAGAIN;
- latest = regpiece(&flags);
- if (latest == NULL) {
- if (flags & TRYAGAIN)
- continue;
- return(NULL);
- }
- else if (ret == NULL)
- ret = latest;
- *flagp |= flags&HASWIDTH;
- if (chain == NULL) /* First piece. */
- *flagp |= flags&SPSTART;
- else {
- PL_regnaughty++;
- regtail(chain, latest);
- }
- chain = latest;
- c++;
- }
- if (chain == NULL) { /* Loop ran zero times. */
- chain = reg_node(NOTHING);
- if (ret == NULL)
- ret = chain;
- }
- if (c == 1) {
- *flagp |= flags&SIMPLE;
- }
-
- 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 regnode *
-S_regpiece(pTHX_ I32 *flagp)
-{
- register regnode *ret;
- register char op;
- register char *next;
- I32 flags;
- char *origparse = PL_regcomp_parse;
- char *maxpos;
- I32 min;
- I32 max = REG_INFTY;
-
- ret = regatom(&flags);
- if (ret == NULL) {
- if (flags & TRYAGAIN)
- *flagp |= TRYAGAIN;
- return(NULL);
- }
-
- op = *PL_regcomp_parse;
-
- if (op == '{' && regcurly(PL_regcomp_parse)) {
- next = PL_regcomp_parse + 1;
- maxpos = Nullch;
- while (isDIGIT(*next) || *next == ',') {
- if (*next == ',') {
- if (maxpos)
- break;
- else
- maxpos = next;
- }
- next++;
- }
- if (*next == '}') { /* got one */
- if (!maxpos)
- maxpos = next;
- PL_regcomp_parse++;
- min = atoi(PL_regcomp_parse);
- if (*maxpos == ',')
- maxpos++;
- else
- maxpos = PL_regcomp_parse;
- max = atoi(maxpos);
- if (!max && *maxpos != '0')
- max = REG_INFTY; /* meaning "infinity" */
- else if (max >= REG_INFTY)
- vFAIL2("Quantifier in {,} bigger than %d", REG_INFTY - 1);
- PL_regcomp_parse = next;
- nextchar();
-
- do_curly:
- if ((flags&SIMPLE)) {
- PL_regnaughty += 2 + PL_regnaughty / 2;
- reginsert(CURLY, ret);
- }
- else {
- regnode *w = reg_node(WHILEM);
-
- w->flags = 0;
- regtail(ret, w);
- if (!SIZE_ONLY && PL_extralen) {
- reginsert(LONGJMP,ret);
- reginsert(NOTHING,ret);
- NEXT_OFF(ret) = 3; /* Go over LONGJMP. */
- }
- reginsert(CURLYX,ret);
- if (!SIZE_ONLY && PL_extralen)
- NEXT_OFF(ret) = 3; /* Go over NOTHING to LONGJMP. */
- regtail(ret, reg_node(NOTHING));
- if (SIZE_ONLY)
- PL_reg_whilem_seen++, PL_extralen += 3;
- PL_regnaughty += 4 + PL_regnaughty; /* compound interest */
- }
- ret->flags = 0;
-
- if (min > 0)
- *flagp = WORST;
- if (max > 0)
- *flagp |= HASWIDTH;
- if (max && max < min)
- vFAIL("Can't do {n,m} with n > m");
- if (!SIZE_ONLY) {
- ARG1_SET(ret, min);
- ARG2_SET(ret, max);
- }
-
- goto nest_check;
- }
- }
-
- if (!ISMULT1(op)) {
- *flagp = flags;
- return(ret);
- }
-
-#if 0 /* Now runtime fix should be reliable. */
-
- /* if this is reinstated, don't forget to put this back into perldiag:
-
- =item Regexp *+ operand could be empty at {#} in regex m/%s/
-
- (F) The part of the regexp subject to either the * or + quantifier
- could match an empty string. The {#} shows in the regular
- expression about where the problem was discovered.
-
- */
-
- if (!(flags&HASWIDTH) && op != '?')
- vFAIL("Regexp *+ operand could be empty");
-#endif
-
- nextchar();
-
- *flagp = (op != '+') ? (WORST|SPSTART|HASWIDTH) : (WORST|HASWIDTH);
-
- if (op == '*' && (flags&SIMPLE)) {
- reginsert(STAR, ret);
- ret->flags = 0;
- PL_regnaughty += 4;
- }
- else if (op == '*') {
- min = 0;
- goto do_curly;
- }
- else if (op == '+' && (flags&SIMPLE)) {
- reginsert(PLUS, ret);
- ret->flags = 0;
- PL_regnaughty += 3;
- }
- else if (op == '+') {
- min = 1;
- goto do_curly;
- }
- else if (op == '?') {
- min = 0; max = 1;
- goto do_curly;
- }
- nest_check:
- if (ckWARN(WARN_REGEXP) && !SIZE_ONLY && !(flags&HASWIDTH) && max > REG_INFTY/3) {
- vWARN3(PL_regcomp_parse,
- "%.*s matches null string many times",
- PL_regcomp_parse - origparse,
- origparse);
- }
-
- if (*PL_regcomp_parse == '?') {
- nextchar();
- reginsert(MINMOD, ret);
- regtail(ret, ret + NODE_STEP_REGNODE);
- }
- if (ISMULT2(PL_regcomp_parse)) {
- PL_regcomp_parse++;
- vFAIL("Nested quantifiers");
- }
-
- 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 regnode *
-S_regatom(pTHX_ I32 *flagp)
-{
- register regnode *ret = 0;
- I32 flags;
-
- *flagp = WORST; /* Tentatively. */
-
-tryagain:
- switch (*PL_regcomp_parse) {
- case '^':
- PL_seen_zerolen++;
- nextchar();
- if (PL_regflags & PMf_MULTILINE)
- ret = reg_node(MBOL);
- else if (PL_regflags & PMf_SINGLELINE)
- ret = reg_node(SBOL);
- else
- ret = reg_node(BOL);
- break;
- case '$':
- nextchar();
- if (*PL_regcomp_parse)
- PL_seen_zerolen++;
- if (PL_regflags & PMf_MULTILINE)
- ret = reg_node(MEOL);
- else if (PL_regflags & PMf_SINGLELINE)
- ret = reg_node(SEOL);
- else
- ret = reg_node(EOL);
- break;
- case '.':
- nextchar();
- if (UTF) {
- if (PL_regflags & PMf_SINGLELINE)
- ret = reg_node(SANYUTF8);
- else
- ret = reg_node(ANYUTF8);
- *flagp |= HASWIDTH;
- }
- else {
- if (PL_regflags & PMf_SINGLELINE)
- ret = reg_node(SANY);
- else
- ret = reg_node(REG_ANY);
- *flagp |= HASWIDTH|SIMPLE;
- }
- PL_regnaughty++;
- break;
- case '[':
- {
- char *oregcomp_parse = ++PL_regcomp_parse;
- ret = (UTF ? regclassutf8() : regclass());
- if (*PL_regcomp_parse != ']') {
- PL_regcomp_parse = oregcomp_parse;
- vFAIL("Unmatched [");
- }
- nextchar();
- *flagp |= HASWIDTH|SIMPLE;
- break;
- }
- case '(':
- nextchar();
- ret = reg(1, &flags);
- if (ret == NULL) {
- if (flags & TRYAGAIN) {
- if (PL_regcomp_parse == PL_regxend) {
- /* Make parent create an empty node if needed. */
- *flagp |= TRYAGAIN;
- return(NULL);
- }
- goto tryagain;
- }
- return(NULL);
- }
- *flagp |= flags&(HASWIDTH|SPSTART|SIMPLE);
- break;
- case '|':
- case ')':
- if (flags & TRYAGAIN) {
- *flagp |= TRYAGAIN;
- return NULL;
- }
- vFAIL("Internal urp");
- /* Supposed to be caught earlier. */
- break;
- case '{':
- if (!regcurly(PL_regcomp_parse)) {
- PL_regcomp_parse++;
- goto defchar;
- }
- /* FALL THROUGH */
- case '?':
- case '+':
- case '*':
- PL_regcomp_parse++;
- vFAIL("Quantifier follows nothing");
- break;
- case '\\':
- switch (*++PL_regcomp_parse) {
- case 'A':
- PL_seen_zerolen++;
- ret = reg_node(SBOL);
- *flagp |= SIMPLE;
- nextchar();
- break;
- case 'G':
- ret = reg_node(GPOS);
- PL_regseen |= REG_SEEN_GPOS;
- *flagp |= SIMPLE;
- nextchar();
- break;
- case 'Z':
- ret = reg_node(SEOL);
- *flagp |= SIMPLE;
- nextchar();
- break;
- case 'z':
- ret = reg_node(EOS);
- *flagp |= SIMPLE;
- PL_seen_zerolen++; /* Do not optimize RE away */
- nextchar();
- break;
- case 'C':
- ret = reg_node(SANY);
- *flagp |= HASWIDTH|SIMPLE;
- nextchar();
- break;
- case 'X':
- ret = reg_node(CLUMP);
- *flagp |= HASWIDTH;
- nextchar();
- if (UTF && !PL_utf8_mark)
- is_utf8_mark((U8*)"~"); /* preload table */
- break;
- case 'w':
- ret = reg_node(
- UTF
- ? (LOC ? ALNUMLUTF8 : ALNUMUTF8)
- : (LOC ? ALNUML : ALNUM));
- *flagp |= HASWIDTH|SIMPLE;
- nextchar();
- if (UTF && !PL_utf8_alnum)
- is_utf8_alnum((U8*)"a"); /* preload table */
- break;
- case 'W':
- ret = reg_node(
- UTF
- ? (LOC ? NALNUMLUTF8 : NALNUMUTF8)
- : (LOC ? NALNUML : NALNUM));
- *flagp |= HASWIDTH|SIMPLE;
- nextchar();
- if (UTF && !PL_utf8_alnum)
- is_utf8_alnum((U8*)"a"); /* preload table */
- break;
- case 'b':
- PL_seen_zerolen++;
- PL_regseen |= REG_SEEN_LOOKBEHIND;
- ret = reg_node(
- UTF
- ? (LOC ? BOUNDLUTF8 : BOUNDUTF8)
- : (LOC ? BOUNDL : BOUND));
- *flagp |= SIMPLE;
- nextchar();
- if (UTF && !PL_utf8_alnum)
- is_utf8_alnum((U8*)"a"); /* preload table */
- break;
- case 'B':
- PL_seen_zerolen++;
- PL_regseen |= REG_SEEN_LOOKBEHIND;
- ret = reg_node(
- UTF
- ? (LOC ? NBOUNDLUTF8 : NBOUNDUTF8)
- : (LOC ? NBOUNDL : NBOUND));
- *flagp |= SIMPLE;
- nextchar();
- if (UTF && !PL_utf8_alnum)
- is_utf8_alnum((U8*)"a"); /* preload table */
- break;
- case 's':
- ret = reg_node(
- UTF
- ? (LOC ? SPACELUTF8 : SPACEUTF8)
- : (LOC ? SPACEL : SPACE));
- *flagp |= HASWIDTH|SIMPLE;
- nextchar();
- if (UTF && !PL_utf8_space)
- is_utf8_space((U8*)" "); /* preload table */
- break;
- case 'S':
- ret = reg_node(
- UTF
- ? (LOC ? NSPACELUTF8 : NSPACEUTF8)
- : (LOC ? NSPACEL : NSPACE));
- *flagp |= HASWIDTH|SIMPLE;
- nextchar();
- if (UTF && !PL_utf8_space)
- is_utf8_space((U8*)" "); /* preload table */
- break;
- case 'd':
- ret = reg_node(UTF ? DIGITUTF8 : DIGIT);
- *flagp |= HASWIDTH|SIMPLE;
- nextchar();
- if (UTF && !PL_utf8_digit)
- is_utf8_digit((U8*)"1"); /* preload table */
- break;
- case 'D':
- ret = reg_node(UTF ? NDIGITUTF8 : NDIGIT);
- *flagp |= HASWIDTH|SIMPLE;
- nextchar();
- if (UTF && !PL_utf8_digit)
- is_utf8_digit((U8*)"1"); /* preload table */
- break;
- case 'p':
- case 'P':
- { /* a lovely hack--pretend we saw [\pX] instead */
- char* oldregxend = PL_regxend;
-
- if (PL_regcomp_parse[1] == '{') {
- PL_regxend = strchr(PL_regcomp_parse, '}');
- if (!PL_regxend) {
- PL_regcomp_parse += 2;
- PL_regxend = oldregxend;
- vFAIL("Missing right brace on \\p{}");
- }
- PL_regxend++;
- }
- else
- PL_regxend = PL_regcomp_parse + 2;
- PL_regcomp_parse--;
-
- ret = regclassutf8();
-
- PL_regxend = oldregxend;
- PL_regcomp_parse--;
- nextchar();
- *flagp |= HASWIDTH|SIMPLE;
- }
- 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':
- {
- I32 num = atoi(PL_regcomp_parse);
-
- if (num > 9 && num >= PL_regnpar)
- goto defchar;
- else {
- while (isDIGIT(*PL_regcomp_parse))
- PL_regcomp_parse++;
-
- if (!SIZE_ONLY && num > PL_regcomp_rx->nparens)
- vFAIL("Reference to nonexistent group");
- PL_regsawback = 1;
- ret = reganode(FOLD
- ? (LOC ? REFFL : REFF)
- : REF, num);
- *flagp |= HASWIDTH;
- PL_regcomp_parse--;
- nextchar();
- }
- }
- break;
- case '\0':
- if (PL_regcomp_parse >= PL_regxend)
- FAIL("Trailing \\");
- /* FALL THROUGH */
- default:
- /* Do not generate `unrecognized' warnings here, we fall
- back into the quick-grab loop below */
- goto defchar;
- }
- break;
-
- case '#':
- if (PL_regflags & PMf_EXTENDED) {
- while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != '\n') PL_regcomp_parse++;
- if (PL_regcomp_parse < PL_regxend)
- goto tryagain;
- }
- /* FALL THROUGH */
-
- default: {
- register STRLEN len;
- register UV ender;
- register char *p;
- char *oldp, *s;
- STRLEN numlen;
-
- PL_regcomp_parse++;
-
- defchar:
- ret = reg_node(FOLD
- ? (LOC ? EXACTFL : EXACTF)
- : EXACT);
- s = STRING(ret);
- for (len = 0, p = PL_regcomp_parse - 1;
- len < 127 && p < PL_regxend;
- len++)
- {
- oldp = p;
-
- if (PL_regflags & PMf_EXTENDED)
- p = regwhite(p, PL_regxend);
- switch (*p) {
- case '^':
- case '$':
- case '.':
- case '[':
- case '(':
- case ')':
- case '|':
- goto loopdone;
- case '\\':
- switch (*++p) {
- case 'A':
- case 'G':
- case 'Z':
- case 'z':
- case 'w':
- case 'W':
- case 'b':
- case 'B':
- case 's':
- case 'S':
- case 'd':
- case 'D':
- case 'p':
- case 'P':
- --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':
-#ifdef ASCIIish
- ender = '\033';
-#else
- ender = '\047';
-#endif
- p++;
- break;
- case 'a':
-#ifdef ASCIIish
- ender = '\007';
-#else
- ender = '\057';
-#endif
- p++;
- break;
- case 'x':
- if (*++p == '{') {
- char* e = strchr(p, '}');
-
- if (!e) {
- PL_regcomp_parse = p + 1;
- vFAIL("Missing right brace on \\x{}");
- }
- else {
- numlen = 1; /* allow underscores */
- ender = (UV)scan_hex(p + 1, e - p - 1, &numlen);
- /* numlen is generous */
- if (numlen + len >= 127) {
- p--;
- goto loopdone;
- }
- p = e + 1;
- }
- }
- else {
- numlen = 0; /* disallow underscores */
- ender = (UV)scan_hex(p, 2, &numlen);
- p += numlen;
- }
- break;
- case 'c':
- p++;
- ender = UCHARAT(p++);
- ender = toCTRL(ender);
- 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) >= PL_regnpar) ) {
- numlen = 0; /* disallow underscores */
- ender = (UV)scan_oct(p, 3, &numlen);
- p += numlen;
- }
- else {
- --p;
- goto loopdone;
- }
- break;
- case '\0':
- if (p >= PL_regxend)
- FAIL("Trailing \\");
- /* FALL THROUGH */
- default:
- if (!SIZE_ONLY && ckWARN(WARN_REGEXP) && isALPHA(*p))
- vWARN2(p +1, "Unrecognized escape \\%c passed through", *p);
- goto normal_default;
- }
- break;
- default:
- normal_default:
- if (UTF8_IS_START(*p) && UTF) {
- ender = utf8_to_uv((U8*)p, PL_regxend - p,
- &numlen, 0);
- p += numlen;
- }
- else
- ender = *p++;
- break;
- }
- if (PL_regflags & PMf_EXTENDED)
- p = regwhite(p, PL_regxend);
- if (UTF && FOLD) {
- if (LOC)
- ender = toLOWER_LC_uni(ender);
- else
- ender = toLOWER_uni(ender);
- }
- if (ISMULT2(p)) { /* Back off on ?+*. */
- if (len)
- p = oldp;
- /* ender is a Unicode value so it can be > 0xff --
- * in other words, do not use UTF8_IS_CONTINUED(). */
- else if (ender >= 0x80 && UTF) {
- reguni(ender, s, &numlen);
- s += numlen;
- len += numlen;
- }
- else {
- len++;
- REGC(ender, s++);
- }
- break;
- }
- /* ender is a Unicode value so it can be > 0xff --
- * in other words, do not use UTF8_IS_CONTINUED(). */
- if (ender >= 0x80 && UTF) {
- reguni(ender, s, &numlen);
- s += numlen;
- len += numlen - 1;
- }
- else
- REGC(ender, s++);
- }
- loopdone:
- PL_regcomp_parse = p - 1;
- nextchar();
- {
- /* len is STRLEN which is unsigned, need to copy to signed */
- IV iv = len;
- if (iv < 0)
- vFAIL("Internal disaster");
- }
- if (len > 0)
- *flagp |= HASWIDTH;
- if (len == 1)
- *flagp |= SIMPLE;
- if (!SIZE_ONLY)
- STR_LEN(ret) = len;
- if (SIZE_ONLY)
- PL_regsize += STR_SZ(len);
- else
- PL_regcode += STR_SZ(len);
- }
- break;
- }
-
- return(ret);
-}
-
-STATIC char *
-S_regwhite(pTHX_ char *p, char *e)
-{
- while (p < e) {
- if (isSPACE(*p))
- ++p;
- else if (*p == '#') {
- do {
- p++;
- } while (p < e && *p != '\n');
- }
- else
- break;
- }
- return p;
-}
-
-/* Parse POSIX character classes: [[:foo:]], [[=foo=]], [[.foo.]].
- Character classes ([:foo:]) can also be negated ([:^foo:]).
- Returns a named class id (ANYOF_XXX) if successful, -1 otherwise.
- Equivalence classes ([=foo=]) and composites ([.foo.]) are parsed,
- but trigger warnings because they are currently unimplemented. */
-STATIC I32
-S_regpposixcc(pTHX_ I32 value)
-{
- char *posixcc = 0;
- I32 namedclass = OOB_NAMEDCLASS;
-
- if (value == '[' && PL_regcomp_parse + 1 < PL_regxend &&
- /* I smell either [: or [= or [. -- POSIX has been here, right? */
- (*PL_regcomp_parse == ':' ||
- *PL_regcomp_parse == '=' ||
- *PL_regcomp_parse == '.')) {
- char c = *PL_regcomp_parse;
- char* s = PL_regcomp_parse++;
-
- while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != c)
- PL_regcomp_parse++;
- if (PL_regcomp_parse == PL_regxend)
- /* Grandfather lone [:, [=, [. */
- PL_regcomp_parse = s;
- else {
- char* t = PL_regcomp_parse++; /* skip over the c */
-
- if (*PL_regcomp_parse == ']') {
- PL_regcomp_parse++; /* skip over the ending ] */
- posixcc = s + 1;
- if (*s == ':') {
- I32 complement = *posixcc == '^' ? *posixcc++ : 0;
- I32 skip = 5; /* the most common skip */
-
- switch (*posixcc) {
- case 'a':
- if (strnEQ(posixcc, "alnum", 5))
- namedclass =
- complement ? ANYOF_NALNUMC : ANYOF_ALNUMC;
- else if (strnEQ(posixcc, "alpha", 5))
- namedclass =
- complement ? ANYOF_NALPHA : ANYOF_ALPHA;
- else if (strnEQ(posixcc, "ascii", 5))
- namedclass =
- complement ? ANYOF_NASCII : ANYOF_ASCII;
- break;
- case 'b':
- if (strnEQ(posixcc, "blank", 5))
- namedclass =
- complement ? ANYOF_NBLANK : ANYOF_BLANK;
- break;
- case 'c':
- if (strnEQ(posixcc, "cntrl", 5))
- namedclass =
- complement ? ANYOF_NCNTRL : ANYOF_CNTRL;
- break;
- case 'd':
- if (strnEQ(posixcc, "digit", 5))
- namedclass =
- complement ? ANYOF_NDIGIT : ANYOF_DIGIT;
- break;
- case 'g':
- if (strnEQ(posixcc, "graph", 5))
- namedclass =
- complement ? ANYOF_NGRAPH : ANYOF_GRAPH;
- break;
- case 'l':
- if (strnEQ(posixcc, "lower", 5))
- namedclass =
- complement ? ANYOF_NLOWER : ANYOF_LOWER;
- break;
- case 'p':
- if (strnEQ(posixcc, "print", 5))
- namedclass =
- complement ? ANYOF_NPRINT : ANYOF_PRINT;
- else if (strnEQ(posixcc, "punct", 5))
- namedclass =
- complement ? ANYOF_NPUNCT : ANYOF_PUNCT;
- break;
- case 's':
- if (strnEQ(posixcc, "space", 5))
- namedclass =
- complement ? ANYOF_NPSXSPC : ANYOF_PSXSPC;
- break;
- case 'u':
- if (strnEQ(posixcc, "upper", 5))
- namedclass =
- complement ? ANYOF_NUPPER : ANYOF_UPPER;
- break;
- case 'w': /* this is not POSIX, this is the Perl \w */
- if (strnEQ(posixcc, "word", 4)) {
- namedclass =
- complement ? ANYOF_NALNUM : ANYOF_ALNUM;
- skip = 4;
- }
- break;
- case 'x':
- if (strnEQ(posixcc, "xdigit", 6)) {
- namedclass =
- complement ? ANYOF_NXDIGIT : ANYOF_XDIGIT;
- skip = 6;
- }
- break;
- }
- if (namedclass == OOB_NAMEDCLASS ||
- posixcc[skip] != ':' ||
- posixcc[skip+1] != ']')
- {
- Simple_vFAIL3("POSIX class [:%.*s:] unknown",
- t - s - 1, s + 1);
- }
- } else if (!SIZE_ONLY) {
- /* [[=foo=]] and [[.foo.]] are still future. */
-
- /* adjust PL_regcomp_parse so the warning shows after
- the class closes */
- while (*PL_regcomp_parse && *PL_regcomp_parse != ']')
- PL_regcomp_parse++;
- Simple_vFAIL3("POSIX syntax [%c %c] is reserved for future extensions", c, c);
- }
- } else {
- /* Maternal grandfather:
- * "[:" ending in ":" but not in ":]" */
- PL_regcomp_parse = s;
- }
- }
- }
-
- return namedclass;
-}
-
-STATIC void
-S_checkposixcc(pTHX)
-{
- if (!SIZE_ONLY && ckWARN(WARN_REGEXP) &&
- (*PL_regcomp_parse == ':' ||
- *PL_regcomp_parse == '=' ||
- *PL_regcomp_parse == '.')) {
- char *s = PL_regcomp_parse;
- char c = *s++;
-
- while(*s && isALNUM(*s))
- s++;
- if (*s && c == *s && s[1] == ']') {
- vWARN3(s+2, "POSIX syntax [%c %c] belongs inside character classes", c, c);
-
- /* [[=foo=]] and [[.foo.]] are still future. */
- if (c == '=' || c == '.')
- {
- /* adjust PL_regcomp_parse so the error shows after
- the class closes */
- while (*PL_regcomp_parse && *PL_regcomp_parse++ != ']')
- ;
- Simple_vFAIL3("POSIX syntax [%c %c] is reserved for future extensions", c, c);
- }
- }
- }
-}
-
-STATIC regnode *
-S_regclass(pTHX)
-{
- register U32 value;
- register I32 lastvalue = OOB_CHAR8;
- register I32 range = 0;
- register regnode *ret;
- STRLEN numlen;
- I32 namedclass;
- char *rangebegin;
- bool need_class = 0;
-
- ret = reg_node(ANYOF);
- if (SIZE_ONLY)
- PL_regsize += ANYOF_SKIP;
- else {
- ret->flags = 0;
- ANYOF_BITMAP_ZERO(ret);
- PL_regcode += ANYOF_SKIP;
- if (FOLD)
- ANYOF_FLAGS(ret) |= ANYOF_FOLD;
- if (LOC)
- ANYOF_FLAGS(ret) |= ANYOF_LOCALE;
- }
- if (*PL_regcomp_parse == '^') { /* Complement of range. */
- PL_regnaughty++;
- PL_regcomp_parse++;
- if (!SIZE_ONLY)
- ANYOF_FLAGS(ret) |= ANYOF_INVERT;
- }
-
- if (!SIZE_ONLY && ckWARN(WARN_REGEXP))
- checkposixcc();
-
- if (*PL_regcomp_parse == ']' || *PL_regcomp_parse == '-')
- goto skipcond; /* allow 1st char to be ] or - */
- while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != ']') {
- skipcond:
- namedclass = OOB_NAMEDCLASS;
- if (!range)
- rangebegin = PL_regcomp_parse;
- value = UCHARAT(PL_regcomp_parse++);
- if (value == '[')
- namedclass = regpposixcc(value);
- else if (value == '\\') {
- value = UCHARAT(PL_regcomp_parse++);
- /* Some compilers cannot handle switching on 64-bit integer
- * values, therefore the 'value' cannot be an UV. --jhi */
- switch (value) {
- case 'w': namedclass = ANYOF_ALNUM; break;
- case 'W': namedclass = ANYOF_NALNUM; break;
- case 's': namedclass = ANYOF_SPACE; break;
- case 'S': namedclass = ANYOF_NSPACE; break;
- case 'd': namedclass = ANYOF_DIGIT; break;
- case 'D': namedclass = ANYOF_NDIGIT; break;
- case 'n': value = '\n'; break;
- case 'r': value = '\r'; break;
- case 't': value = '\t'; break;
- case 'f': value = '\f'; break;
- case 'b': value = '\b'; break;
-#ifdef ASCIIish
- case 'e': value = '\033'; break;
- case 'a': value = '\007'; break;
-#else
- case 'e': value = '\047'; break;
- case 'a': value = '\057'; break;
-#endif
- case 'x':
- numlen = 0; /* disallow underscores */
- value = (UV)scan_hex(PL_regcomp_parse, 2, &numlen);
- PL_regcomp_parse += numlen;
- break;
- case 'c':
- value = UCHARAT(PL_regcomp_parse++);
- value = toCTRL(value);
- break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- numlen = 0; /* disallow underscores */
- value = (UV)scan_oct(--PL_regcomp_parse, 3, &numlen);
- PL_regcomp_parse += numlen;
- break;
- default:
- if (!SIZE_ONLY && ckWARN(WARN_REGEXP) && isALPHA(value))
-
- vWARN2(PL_regcomp_parse, "Unrecognized escape \\%c in character class passed through", (int)value);
- break;
- }
- }
- if (namedclass > OOB_NAMEDCLASS) {
- if (!need_class && !SIZE_ONLY)
- ANYOF_CLASS_ZERO(ret);
- need_class = 1;
- if (range) { /* a-\d, a-[:digit:] */
- if (!SIZE_ONLY) {
- if (ckWARN(WARN_REGEXP))
- vWARN4(PL_regcomp_parse,
- "False [] range \"%*.*s\"",
- PL_regcomp_parse - rangebegin,
- PL_regcomp_parse - rangebegin,
- rangebegin);
- ANYOF_BITMAP_SET(ret, lastvalue);
- ANYOF_BITMAP_SET(ret, '-');
- }
- range = 0; /* this is not a true range */
- }
- if (!SIZE_ONLY) {
- switch (namedclass) {
- case ANYOF_ALNUM:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_ALNUM);
- else {
- for (value = 0; value < 256; value++)
- if (isALNUM(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NALNUM:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NALNUM);
- else {
- for (value = 0; value < 256; value++)
- if (!isALNUM(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_SPACE:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_SPACE);
- else {
- for (value = 0; value < 256; value++)
- if (isSPACE(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NSPACE:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NSPACE);
- else {
- for (value = 0; value < 256; value++)
- if (!isSPACE(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_DIGIT:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_DIGIT);
- else {
- for (value = '0'; value <= '9'; value++)
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NDIGIT:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NDIGIT);
- else {
- for (value = 0; value < '0'; value++)
- ANYOF_BITMAP_SET(ret, value);
- for (value = '9' + 1; value < 256; value++)
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NALNUMC:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NALNUMC);
- else {
- for (value = 0; value < 256; value++)
- if (!isALNUMC(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_ALNUMC:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_ALNUMC);
- else {
- for (value = 0; value < 256; value++)
- if (isALNUMC(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_ALPHA:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_ALPHA);
- else {
- for (value = 0; value < 256; value++)
- if (isALPHA(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NALPHA:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NALPHA);
- else {
- for (value = 0; value < 256; value++)
- if (!isALPHA(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_ASCII:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_ASCII);
- else {
-#ifdef ASCIIish
- for (value = 0; value < 128; value++)
- ANYOF_BITMAP_SET(ret, value);
-#else /* EBCDIC */
- for (value = 0; value < 256; value++)
- if (isASCII(value))
- ANYOF_BITMAP_SET(ret, value);
-#endif /* EBCDIC */
- }
- break;
- case ANYOF_NASCII:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NASCII);
- else {
-#ifdef ASCIIish
- for (value = 128; value < 256; value++)
- ANYOF_BITMAP_SET(ret, value);
-#else /* EBCDIC */
- for (value = 0; value < 256; value++)
- if (!isASCII(value))
- ANYOF_BITMAP_SET(ret, value);
-#endif /* EBCDIC */
- }
- break;
- case ANYOF_BLANK:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_BLANK);
- else {
- for (value = 0; value < 256; value++)
- if (isBLANK(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NBLANK:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NBLANK);
- else {
- for (value = 0; value < 256; value++)
- if (!isBLANK(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_CNTRL:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_CNTRL);
- else {
- for (value = 0; value < 256; value++)
- if (isCNTRL(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- lastvalue = OOB_CHAR8;
- break;
- case ANYOF_NCNTRL:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NCNTRL);
- else {
- for (value = 0; value < 256; value++)
- if (!isCNTRL(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_GRAPH:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_GRAPH);
- else {
- for (value = 0; value < 256; value++)
- if (isGRAPH(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NGRAPH:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NGRAPH);
- else {
- for (value = 0; value < 256; value++)
- if (!isGRAPH(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_LOWER:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_LOWER);
- else {
- for (value = 0; value < 256; value++)
- if (isLOWER(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NLOWER:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NLOWER);
- else {
- for (value = 0; value < 256; value++)
- if (!isLOWER(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_PRINT:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_PRINT);
- else {
- for (value = 0; value < 256; value++)
- if (isPRINT(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NPRINT:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NPRINT);
- else {
- for (value = 0; value < 256; value++)
- if (!isPRINT(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_PSXSPC:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_PSXSPC);
- else {
- for (value = 0; value < 256; value++)
- if (isPSXSPC(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NPSXSPC:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NPSXSPC);
- else {
- for (value = 0; value < 256; value++)
- if (!isPSXSPC(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_PUNCT:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_PUNCT);
- else {
- for (value = 0; value < 256; value++)
- if (isPUNCT(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NPUNCT:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NPUNCT);
- else {
- for (value = 0; value < 256; value++)
- if (!isPUNCT(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_UPPER:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_UPPER);
- else {
- for (value = 0; value < 256; value++)
- if (isUPPER(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NUPPER:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NUPPER);
- else {
- for (value = 0; value < 256; value++)
- if (!isUPPER(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_XDIGIT:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_XDIGIT);
- else {
- for (value = 0; value < 256; value++)
- if (isXDIGIT(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- case ANYOF_NXDIGIT:
- if (LOC)
- ANYOF_CLASS_SET(ret, ANYOF_NXDIGIT);
- else {
- for (value = 0; value < 256; value++)
- if (!isXDIGIT(value))
- ANYOF_BITMAP_SET(ret, value);
- }
- break;
- default:
- vFAIL("Invalid [::] class");
- break;
- }
- if (LOC)
- ANYOF_FLAGS(ret) |= ANYOF_CLASS;
- continue;
- }
- }
- if (range) {
- if (lastvalue > value) /* b-a */ {
- Simple_vFAIL4("Invalid [] range \"%*.*s\"",
- PL_regcomp_parse - rangebegin,
- PL_regcomp_parse - rangebegin,
- rangebegin);
- }
- range = 0;
- }
- else {
- lastvalue = value;
- if (*PL_regcomp_parse == '-' && PL_regcomp_parse+1 < PL_regxend &&
- PL_regcomp_parse[1] != ']') {
- PL_regcomp_parse++;
- if (namedclass > OOB_NAMEDCLASS) { /* \w-, [:word:]- */
- if (ckWARN(WARN_REGEXP))
- vWARN4(PL_regcomp_parse,
- "False [] range \"%*.*s\"",
- PL_regcomp_parse - rangebegin,
- PL_regcomp_parse - rangebegin,
- rangebegin);
- if (!SIZE_ONLY)
- ANYOF_BITMAP_SET(ret, '-');
- } else
- range = 1;
- continue; /* do it next time */
- }
- }
- /* now is the next time */
- if (!SIZE_ONLY) {
-#ifndef ASCIIish /* EBCDIC, for example. */
- if ((isLOWER(lastvalue) && isLOWER(value)) ||
- (isUPPER(lastvalue) && isUPPER(value)))
- {
- I32 i;
- if (isLOWER(lastvalue)) {
- for (i = lastvalue; i <= value; i++)
- if (isLOWER(i))
- ANYOF_BITMAP_SET(ret, i);
- } else {
- for (i = lastvalue; i <= value; i++)
- if (isUPPER(i))
- ANYOF_BITMAP_SET(ret, i);
- }
- }
- else
-#endif
- for ( ; lastvalue <= value; lastvalue++)
- ANYOF_BITMAP_SET(ret, lastvalue);
- }
- range = 0;
- }
- if (need_class) {
- if (SIZE_ONLY)
- PL_regsize += ANYOF_CLASS_ADD_SKIP;
- else
- PL_regcode += ANYOF_CLASS_ADD_SKIP;
- }
- /* optimize case-insensitive simple patterns (e.g. /[a-z]/i) */
- if (!SIZE_ONLY &&
- (ANYOF_FLAGS(ret) & (ANYOF_FLAGS_ALL ^ ANYOF_INVERT)) == ANYOF_FOLD) {
- for (value = 0; value < 256; ++value) {
- if (ANYOF_BITMAP_TEST(ret, value)) {
- I32 cf = PL_fold[value];
- ANYOF_BITMAP_SET(ret, cf);
- }
- }
- ANYOF_FLAGS(ret) &= ~ANYOF_FOLD;
- }
- /* optimize inverted simple patterns (e.g. [^a-z]) */
- if (!SIZE_ONLY && (ANYOF_FLAGS(ret) & ANYOF_FLAGS_ALL) == ANYOF_INVERT) {
- for (value = 0; value < ANYOF_BITMAP_SIZE; ++value)
- ANYOF_BITMAP(ret)[value] ^= ANYOF_FLAGS_ALL;
- ANYOF_FLAGS(ret) = 0;
- }
- return ret;
-}
-
-STATIC regnode *
-S_regclassutf8(pTHX)
-{
- register char *e;
- register U32 value;
- register U32 lastvalue = OOB_UTF8;
- register I32 range = 0;
- register regnode *ret;
- STRLEN numlen;
- I32 n;
- SV *listsv;
- U8 flags = 0;
- I32 namedclass;
- char *rangebegin;
-
- if (*PL_regcomp_parse == '^') { /* Complement of range. */
- PL_regnaughty++;
- PL_regcomp_parse++;
- if (!SIZE_ONLY)
- flags |= ANYOF_INVERT;
- }
- if (!SIZE_ONLY) {
- if (FOLD)
- flags |= ANYOF_FOLD;
- if (LOC)
- flags |= ANYOF_LOCALE;
- listsv = newSVpvn("# comment\n", 10);
- }
-
- if (!SIZE_ONLY && ckWARN(WARN_REGEXP))
- checkposixcc();
-
- if (*PL_regcomp_parse == ']' || *PL_regcomp_parse == '-')
- goto skipcond; /* allow 1st char to be ] or - */
-
- while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != ']') {
- skipcond:
- namedclass = OOB_NAMEDCLASS;
- if (!range)
- rangebegin = PL_regcomp_parse;
- value = utf8_to_uv((U8*)PL_regcomp_parse,
- PL_regxend - PL_regcomp_parse,
- &numlen, 0);
- PL_regcomp_parse += numlen;
- if (value == '[')
- namedclass = regpposixcc(value);
- else if (value == '\\') {
- value = (U32)utf8_to_uv((U8*)PL_regcomp_parse,
- PL_regxend - PL_regcomp_parse,
- &numlen, 0);
- PL_regcomp_parse += numlen;
- /* Some compilers cannot handle switching on 64-bit integer
- * values, therefore value cannot be an UV. Yes, this will
- * be a problem later if we want switch on Unicode. --jhi */
- switch (value) {
- case 'w': namedclass = ANYOF_ALNUM; break;
- case 'W': namedclass = ANYOF_NALNUM; break;
- case 's': namedclass = ANYOF_SPACE; break;
- case 'S': namedclass = ANYOF_NSPACE; break;
- case 'd': namedclass = ANYOF_DIGIT; break;
- case 'D': namedclass = ANYOF_NDIGIT; break;
- case 'p':
- case 'P':
- if (*PL_regcomp_parse == '{') {
- e = strchr(PL_regcomp_parse++, '}');
- if (!e)
- vFAIL("Missing right brace on \\p{}");
- n = e - PL_regcomp_parse;
- }
- else {
- e = PL_regcomp_parse;
- n = 1;
- }
- if (!SIZE_ONLY) {
- if (value == 'p')
- Perl_sv_catpvf(aTHX_ listsv,
- "+utf8::%.*s\n", (int)n, PL_regcomp_parse);
- else
- Perl_sv_catpvf(aTHX_ listsv,
- "!utf8::%.*s\n", (int)n, PL_regcomp_parse);
- }
- PL_regcomp_parse = e + 1;
- lastvalue = OOB_UTF8;
- continue;
- case 'n': value = '\n'; break;
- case 'r': value = '\r'; break;
- case 't': value = '\t'; break;
- case 'f': value = '\f'; break;
- case 'b': value = '\b'; break;
-#ifdef ASCIIish
- case 'e': value = '\033'; break;
- case 'a': value = '\007'; break;
-#else
- case 'e': value = '\047'; break;
- case 'a': value = '\057'; break;
-#endif
- case 'x':
- if (*PL_regcomp_parse == '{') {
- e = strchr(PL_regcomp_parse++, '}');
- if (!e)
- vFAIL("Missing right brace on \\x{}");
- numlen = 1; /* allow underscores */
- value = (UV)scan_hex(PL_regcomp_parse,
- e - PL_regcomp_parse,
- &numlen);
- PL_regcomp_parse = e + 1;
- }
- else {
- numlen = 0; /* disallow underscores */
- value = (UV)scan_hex(PL_regcomp_parse, 2, &numlen);
- PL_regcomp_parse += numlen;
- }
- break;
- case 'c':
- value = UCHARAT(PL_regcomp_parse++);
- value = toCTRL(value);
- break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- numlen = 0; /* disallow underscores */
- value = (UV)scan_oct(--PL_regcomp_parse, 3, &numlen);
- PL_regcomp_parse += numlen;
- break;
- default:
- if (!SIZE_ONLY && ckWARN(WARN_REGEXP) && isALPHA(value))
- vWARN2(PL_regcomp_parse,
- "Unrecognized escape \\%c in character class passed through",
- (int)value);
- break;
- }
- }
- if (namedclass > OOB_NAMEDCLASS) {
- if (range) { /* a-\d, a-[:digit:] */
- if (!SIZE_ONLY) {
- if (ckWARN(WARN_REGEXP))
- vWARN4(PL_regcomp_parse,
- "False [] range \"%*.*s\"",
- PL_regcomp_parse - rangebegin,
- PL_regcomp_parse - rangebegin,
- rangebegin);
- Perl_sv_catpvf(aTHX_ listsv,
- /* 0x002D is Unicode for '-' */
- "%04"UVxf"\n002D\n", (UV)lastvalue);
- }
- range = 0;
- }
- if (!SIZE_ONLY) {
- switch (namedclass) {
- case ANYOF_ALNUM:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsWord\n"); break;
- case ANYOF_NALNUM:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsWord\n"); break;
- case ANYOF_ALNUMC:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsAlnum\n"); break;
- case ANYOF_NALNUMC:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsAlnum\n"); break;
- case ANYOF_ALPHA:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsAlpha\n"); break;
- case ANYOF_NALPHA:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsAlpha\n"); break;
- case ANYOF_ASCII:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsASCII\n"); break;
- case ANYOF_NASCII:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsASCII\n"); break;
- case ANYOF_CNTRL:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsCntrl\n"); break;
- case ANYOF_NCNTRL:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsCntrl\n"); break;
- case ANYOF_GRAPH:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsGraph\n"); break;
- case ANYOF_NGRAPH:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsGraph\n"); break;
- case ANYOF_DIGIT:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsDigit\n"); break;
- case ANYOF_NDIGIT:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsDigit\n"); break;
- case ANYOF_LOWER:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsLower\n"); break;
- case ANYOF_NLOWER:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsLower\n"); break;
- case ANYOF_PRINT:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsPrint\n"); break;
- case ANYOF_NPRINT:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsPrint\n"); break;
- case ANYOF_PUNCT:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsPunct\n"); break;
- case ANYOF_NPUNCT:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsPunct\n"); break;
- case ANYOF_SPACE:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsSpacePerl\n");break;
- case ANYOF_NSPACE:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsSpacePerl\n");break;
- case ANYOF_BLANK:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsBlank\n"); break;
- case ANYOF_NBLANK:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsBlank\n"); break;
- case ANYOF_PSXSPC:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsSpace\n"); break;
- case ANYOF_NPSXSPC:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsSpace\n"); break;
- case ANYOF_UPPER:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsUpper\n"); break;
- case ANYOF_NUPPER:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsUpper\n"); break;
- case ANYOF_XDIGIT:
- Perl_sv_catpvf(aTHX_ listsv, "+utf8::IsXDigit\n"); break;
- case ANYOF_NXDIGIT:
- Perl_sv_catpvf(aTHX_ listsv, "!utf8::IsXDigit\n"); break;
- }
- continue;
- }
- }
- if (range) {
- if (lastvalue > value) { /* b-a */
- Simple_vFAIL4("Invalid [] range \"%*.*s\"",
- PL_regcomp_parse - rangebegin,
- PL_regcomp_parse - rangebegin,
- rangebegin);
- }
- range = 0;
- }
- else {
- lastvalue = value;
- if (*PL_regcomp_parse == '-' && PL_regcomp_parse+1 < PL_regxend &&
- PL_regcomp_parse[1] != ']') {
- PL_regcomp_parse++;
- if (namedclass > OOB_NAMEDCLASS) { /* \w-, [:word:]- */
- if (ckWARN(WARN_REGEXP))
- vWARN4(PL_regcomp_parse,
- "False [] range \"%*.*s\"",
- PL_regcomp_parse - rangebegin,
- PL_regcomp_parse - rangebegin,
- rangebegin);
- if (!SIZE_ONLY)
- Perl_sv_catpvf(aTHX_ listsv,
- /* 0x002D is Unicode for '-' */
- "002D\n");
- } else
- range = 1;
- continue; /* do it next time */
- }
- }
- /* now is the next time */
- if (!SIZE_ONLY)
- Perl_sv_catpvf(aTHX_ listsv, "%04"UVxf"\t%04"UVxf"\n",
- (UV)lastvalue, (UV)value);
- range = 0;
- }
-
- ret = reganode(ANYOFUTF8, 0);
-
- if (!SIZE_ONLY) {
- SV *rv = swash_init("utf8", "", listsv, 1, 0);
-#ifdef DEBUGGING
- AV *av = newAV();
- av_push(av, rv);
- av_push(av, listsv);
- rv = newRV_noinc((SV*)av);
-#else
- SvREFCNT_dec(listsv);
-#endif
- n = add_data(1,"s");
- PL_regcomp_rx->data->data[n] = (void*)rv;
- ARG1_SET(ret, flags);
- ARG2_SET(ret, n);
- }
-
- return ret;
-}
-
-STATIC char*
-S_nextchar(pTHX)
-{
- char* retval = PL_regcomp_parse++;
-
- for (;;) {
- if (*PL_regcomp_parse == '(' && PL_regcomp_parse[1] == '?' &&
- PL_regcomp_parse[2] == '#') {
- while (*PL_regcomp_parse && *PL_regcomp_parse != ')')
- PL_regcomp_parse++;
- PL_regcomp_parse++;
- continue;
- }
- if (PL_regflags & PMf_EXTENDED) {
- if (isSPACE(*PL_regcomp_parse)) {
- PL_regcomp_parse++;
- continue;
- }
- else if (*PL_regcomp_parse == '#') {
- while (*PL_regcomp_parse && *PL_regcomp_parse != '\n')
- PL_regcomp_parse++;
- PL_regcomp_parse++;
- continue;
- }
- }
- return retval;
- }
-}
-
-/*
-- reg_node - emit a node
-*/
-STATIC regnode * /* Location. */
-S_reg_node(pTHX_ U8 op)
-{
- register regnode *ret;
- register regnode *ptr;
-
- ret = PL_regcode;
- if (SIZE_ONLY) {
- SIZE_ALIGN(PL_regsize);
- PL_regsize += 1;
- return(ret);
- }
-
- NODE_ALIGN_FILL(ret);
- ptr = ret;
- FILL_ADVANCE_NODE(ptr, op);
- PL_regcode = ptr;
-
- return(ret);
-}
-
-/*
-- reganode - emit a node with an argument
-*/
-STATIC regnode * /* Location. */
-S_reganode(pTHX_ U8 op, U32 arg)
-{
- register regnode *ret;
- register regnode *ptr;
-
- ret = PL_regcode;
- if (SIZE_ONLY) {
- SIZE_ALIGN(PL_regsize);
- PL_regsize += 2;
- return(ret);
- }
-
- NODE_ALIGN_FILL(ret);
- ptr = ret;
- FILL_ADVANCE_NODE_ARG(ptr, op, arg);
- PL_regcode = ptr;
-
- return(ret);
-}
-
-/*
-- reguni - emit (if appropriate) a Unicode character
-*/
-STATIC void
-S_reguni(pTHX_ UV uv, char* s, STRLEN* lenp)
-{
- *lenp = SIZE_ONLY ? UNISKIP(uv) : (uv_to_utf8((U8*)s, uv) - (U8*)s);
-}
-
-/*
-- reginsert - insert an operator in front of already-emitted operand
-*
-* Means relocating the operand.
-*/
-STATIC void
-S_reginsert(pTHX_ U8 op, regnode *opnd)
-{
- register regnode *src;
- register regnode *dst;
- register regnode *place;
- register int offset = regarglen[(U8)op];
-
-/* (PL_regkind[(U8)op] == CURLY ? EXTRA_STEP_2ARGS : 0); */
-
- if (SIZE_ONLY) {
- PL_regsize += NODE_STEP_REGNODE + offset;
- return;
- }
-
- src = PL_regcode;
- PL_regcode += NODE_STEP_REGNODE + offset;
- dst = PL_regcode;
- while (src > opnd)
- StructCopy(--src, --dst, regnode);
-
- place = opnd; /* Op node, where operand used to be. */
- src = NEXTOPER(place);
- FILL_ADVANCE_NODE(place, op);
- Zero(src, offset, regnode);
-}
-
-/*
-- regtail - set the next-pointer at the end of a node chain of p to val.
-*/
-STATIC void
-S_regtail(pTHX_ regnode *p, regnode *val)
-{
- register regnode *scan;
- register regnode *temp;
-
- if (SIZE_ONLY)
- return;
-
- /* Find last node. */
- scan = p;
- for (;;) {
- temp = regnext(scan);
- if (temp == NULL)
- break;
- scan = temp;
- }
-
- if (reg_off_by_arg[OP(scan)]) {
- ARG_SET(scan, val - scan);
- }
- else {
- NEXT_OFF(scan) = val - scan;
- }
-}
-
-/*
-- regoptail - regtail on operand of first argument; nop if operandless
-*/
-STATIC void
-S_regoptail(pTHX_ regnode *p, regnode *val)
-{
- /* "Operandless" and "op != BRANCH" are synonymous in practice. */
- if (p == NULL || SIZE_ONLY)
- return;
- if (PL_regkind[(U8)OP(p)] == BRANCH) {
- regtail(NEXTOPER(p), val);
- }
- else if ( PL_regkind[(U8)OP(p)] == BRANCHJ) {
- regtail(NEXTOPER(NEXTOPER(p)), val);
- }
- else
- return;
-}
-
-/*
- - regcurly - a little FSA that accepts {\d+,?\d*}
- */
-STATIC I32
-S_regcurly(pTHX_ 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;
-}
-
-
-STATIC regnode *
-S_dumpuntil(pTHX_ regnode *start, regnode *node, regnode *last, SV* sv, I32 l)
-{
-#ifdef DEBUGGING
- register U8 op = EXACT; /* Arbitrary non-END op. */
- register regnode *next;
-
- while (op != END && (!last || node < last)) {
- /* While that wasn't END last time... */
-
- NODE_ALIGN(node);
- op = OP(node);
- if (op == CLOSE)
- l--;
- next = regnext(node);
- /* Where, what. */
- if (OP(node) == OPTIMIZED)
- goto after_print;
- regprop(sv, node);
- PerlIO_printf(Perl_debug_log, "%4"IVdf":%*s%s", (IV)(node - start),
- (int)(2*l + 1), "", SvPVX(sv));
- if (next == NULL) /* Next ptr. */
- PerlIO_printf(Perl_debug_log, "(0)");
- else
- PerlIO_printf(Perl_debug_log, "(%"IVdf")", (IV)(next - start));
- (void)PerlIO_putc(Perl_debug_log, '\n');
- after_print:
- if (PL_regkind[(U8)op] == BRANCHJ) {
- register regnode *nnode = (OP(next) == LONGJMP
- ? regnext(next)
- : next);
- if (last && nnode > last)
- nnode = last;
- node = dumpuntil(start, NEXTOPER(NEXTOPER(node)), nnode, sv, l + 1);
- }
- else if (PL_regkind[(U8)op] == BRANCH) {
- node = dumpuntil(start, NEXTOPER(node), next, sv, l + 1);
- }
- else if ( op == CURLY) { /* `next' might be very big: optimizer */
- node = dumpuntil(start, NEXTOPER(node) + EXTRA_STEP_2ARGS,
- NEXTOPER(node) + EXTRA_STEP_2ARGS + 1, sv, l + 1);
- }
- else if (PL_regkind[(U8)op] == CURLY && op != CURLYX) {
- node = dumpuntil(start, NEXTOPER(node) + EXTRA_STEP_2ARGS,
- next, sv, l + 1);
- }
- else if ( op == PLUS || op == STAR) {
- node = dumpuntil(start, NEXTOPER(node), NEXTOPER(node) + 1, sv, l + 1);
- }
- else if (op == ANYOF) {
- node = NEXTOPER(node);
- node += ANYOF_SKIP;
- }
- else if (PL_regkind[(U8)op] == EXACT) {
- /* Literal string, where present. */
- node += NODE_SZ_STR(node) - 1;
- node = NEXTOPER(node);
- }
- else {
- node = NEXTOPER(node);
- node += regarglen[(U8)op];
- }
- if (op == CURLYX || op == OPEN)
- l++;
- else if (op == WHILEM)
- l--;
- }
-#endif /* DEBUGGING */
- return node;
-}
-
-/*
- - regdump - dump a regexp onto Perl_debug_log in vaguely comprehensible form
- */
-void
-Perl_regdump(pTHX_ regexp *r)
-{
-#ifdef DEBUGGING
- SV *sv = sv_newmortal();
-
- (void)dumpuntil(r->program, r->program + 1, NULL, sv, 0);
-
- /* Header fields of interest. */
- if (r->anchored_substr)
- PerlIO_printf(Perl_debug_log,
- "anchored `%s%.*s%s'%s at %"IVdf" ",
- PL_colors[0],
- (int)(SvCUR(r->anchored_substr) - (SvTAIL(r->anchored_substr)!=0)),
- SvPVX(r->anchored_substr),
- PL_colors[1],
- SvTAIL(r->anchored_substr) ? "$" : "",
- (IV)r->anchored_offset);
- if (r->float_substr)
- PerlIO_printf(Perl_debug_log,
- "floating `%s%.*s%s'%s at %"IVdf"..%"UVuf" ",
- PL_colors[0],
- (int)(SvCUR(r->float_substr) - (SvTAIL(r->float_substr)!=0)),
- SvPVX(r->float_substr),
- PL_colors[1],
- SvTAIL(r->float_substr) ? "$" : "",
- (IV)r->float_min_offset, (UV)r->float_max_offset);
- if (r->check_substr)
- PerlIO_printf(Perl_debug_log,
- r->check_substr == r->float_substr
- ? "(checking floating" : "(checking anchored");
- if (r->reganch & ROPT_NOSCAN)
- PerlIO_printf(Perl_debug_log, " noscan");
- if (r->reganch & ROPT_CHECK_ALL)
- PerlIO_printf(Perl_debug_log, " isall");
- if (r->check_substr)
- PerlIO_printf(Perl_debug_log, ") ");
-
- if (r->regstclass) {
- regprop(sv, r->regstclass);
- PerlIO_printf(Perl_debug_log, "stclass `%s' ", SvPVX(sv));
- }
- if (r->reganch & ROPT_ANCH) {
- PerlIO_printf(Perl_debug_log, "anchored");
- if (r->reganch & ROPT_ANCH_BOL)
- PerlIO_printf(Perl_debug_log, "(BOL)");
- if (r->reganch & ROPT_ANCH_MBOL)
- PerlIO_printf(Perl_debug_log, "(MBOL)");
- if (r->reganch & ROPT_ANCH_SBOL)
- PerlIO_printf(Perl_debug_log, "(SBOL)");
- if (r->reganch & ROPT_ANCH_GPOS)
- PerlIO_printf(Perl_debug_log, "(GPOS)");
- PerlIO_putc(Perl_debug_log, ' ');
- }
- if (r->reganch & ROPT_GPOS_SEEN)
- PerlIO_printf(Perl_debug_log, "GPOS ");
- if (r->reganch & ROPT_SKIP)
- PerlIO_printf(Perl_debug_log, "plus ");
- if (r->reganch & ROPT_IMPLICIT)
- PerlIO_printf(Perl_debug_log, "implicit ");
- PerlIO_printf(Perl_debug_log, "minlen %ld ", (long) r->minlen);
- if (r->reganch & ROPT_EVAL_SEEN)
- PerlIO_printf(Perl_debug_log, "with eval ");
- PerlIO_printf(Perl_debug_log, "\n");
-#endif /* DEBUGGING */
-}
-
-STATIC void
-S_put_byte(pTHX_ SV *sv, int c)
-{
- if (isCNTRL(c) || c == 127 || c == 255)
- Perl_sv_catpvf(aTHX_ sv, "\\%o", c);
- else if (c == '-' || c == ']' || c == '\\' || c == '^')
- Perl_sv_catpvf(aTHX_ sv, "\\%c", c);
- else
- Perl_sv_catpvf(aTHX_ sv, "%c", c);
-}
-
-/*
-- regprop - printable representation of opcode
-*/
-void
-Perl_regprop(pTHX_ SV *sv, regnode *o)
-{
-#ifdef DEBUGGING
- register int k;
-
- sv_setpvn(sv, "", 0);
- if (OP(o) >= reg_num) /* regnode.type is unsigned */
- FAIL("Corrupted regexp opcode");
- sv_catpv(sv, (char*)reg_name[OP(o)]); /* Take off const! */
-
- k = PL_regkind[(U8)OP(o)];
-
- if (k == EXACT)
- Perl_sv_catpvf(aTHX_ sv, " <%s%.*s%s>", PL_colors[0],
- STR_LEN(o), STRING(o), PL_colors[1]);
- else if (k == CURLY) {
- if (OP(o) == CURLYM || OP(o) == CURLYN || OP(o) == CURLYX)
- Perl_sv_catpvf(aTHX_ sv, "[%d]", o->flags); /* Parenth number */
- Perl_sv_catpvf(aTHX_ sv, " {%d,%d}", ARG1(o), ARG2(o));
- }
- else if (k == WHILEM && o->flags) /* Ordinal/of */
- Perl_sv_catpvf(aTHX_ sv, "[%d/%d]", o->flags & 0xf, o->flags>>4);
- else if (k == REF || k == OPEN || k == CLOSE || k == GROUPP )
- Perl_sv_catpvf(aTHX_ sv, "%d", (int)ARG(o)); /* Parenth number */
- else if (k == LOGICAL)
- Perl_sv_catpvf(aTHX_ sv, "[%d]", o->flags); /* 2: embedded, otherwise 1 */
- else if (k == ANYOF) {
- int i, rangestart = -1;
- bool anyofutf8 = OP(o) == ANYOFUTF8;
- U8 flags = anyofutf8 ? ARG1(o) : o->flags;
- const char * const anyofs[] = { /* Should be syncronized with
- * ANYOF_ #xdefines in regcomp.h */
- "\\w",
- "\\W",
- "\\s",
- "\\S",
- "\\d",
- "\\D",
- "[:alnum:]",
- "[:^alnum:]",
- "[:alpha:]",
- "[:^alpha:]",
- "[:ascii:]",
- "[:^ascii:]",
- "[:ctrl:]",
- "[:^ctrl:]",
- "[:graph:]",
- "[:^graph:]",
- "[:lower:]",
- "[:^lower:]",
- "[:print:]",
- "[:^print:]",
- "[:punct:]",
- "[:^punct:]",
- "[:upper:]",
- "[:^upper:]",
- "[:xdigit:]",
- "[:^xdigit:]",
- "[:space:]",
- "[:^space:]",
- "[:blank:]",
- "[:^blank:]"
- };
-
- if (flags & ANYOF_LOCALE)
- sv_catpv(sv, "{loc}");
- if (flags & ANYOF_FOLD)
- sv_catpv(sv, "{i}");
- Perl_sv_catpvf(aTHX_ sv, "[%s", PL_colors[0]);
- if (flags & ANYOF_INVERT)
- sv_catpv(sv, "^");
- if (OP(o) == ANYOF) {
- for (i = 0; i <= 256; i++) {
- if (i < 256 && ANYOF_BITMAP_TEST(o,i)) {
- if (rangestart == -1)
- rangestart = i;
- } else if (rangestart != -1) {
- if (i <= rangestart + 3)
- for (; rangestart < i; rangestart++)
- put_byte(sv, rangestart);
- else {
- put_byte(sv, rangestart);
- sv_catpv(sv, "-");
- put_byte(sv, i - 1);
- }
- rangestart = -1;
- }
- }
- if (o->flags & ANYOF_CLASS)
- for (i = 0; i < sizeof(anyofs)/sizeof(char*); i++)
- if (ANYOF_CLASS_TEST(o,i))
- sv_catpv(sv, anyofs[i]);
- }
- else {
- SV *rv = (SV*)PL_regdata->data[ARG2(o)];
- AV *av = (AV*)SvRV((SV*)rv);
- SV *sw = *av_fetch(av, 0, FALSE);
- SV *lv = *av_fetch(av, 1, FALSE);
- UV i;
- U8 s[UTF8_MAXLEN+1];
- for (i = 0; i <= 256; i++) { /* just the first 256 */
- U8 *e = uv_to_utf8(s, i);
- if (i < 256 && swash_fetch(sw, s)) {
- if (rangestart == -1)
- rangestart = i;
- } else if (rangestart != -1) {
- U8 *p;
-
- if (i <= rangestart + 3)
- for (; rangestart < i; rangestart++) {
- for(e = uv_to_utf8(s, rangestart), p = s; p < e; p++)
- put_byte(sv, *p);
- }
- else {
- for (e = uv_to_utf8(s, rangestart), p = s; p < e; p++)
- put_byte(sv, *p);
- sv_catpv(sv, "-");
- for (e = uv_to_utf8(s, i - 1), p = s; p < e; p++)
- put_byte(sv, *p);
- }
- rangestart = -1;
- }
- }
- sv_catpv(sv, "...");
- {
- char *s = savepv(SvPVX(lv));
-
- while(*s && *s != '\n') s++;
- if (*s == '\n') {
- char *t = ++s;
-
- while (*s) {
- if (*s == '\n')
- *s = ' ';
- s++;
- }
- if (s[-1] == ' ')
- s[-1] = 0;
-
- sv_catpv(sv, t);
- }
- }
- }
- Perl_sv_catpvf(aTHX_ sv, "%s]", PL_colors[1]);
- }
- else if (k == BRANCHJ && (OP(o) == UNLESSM || OP(o) == IFMATCH))
- Perl_sv_catpvf(aTHX_ sv, "[-%d]", o->flags);
-#endif /* DEBUGGING */
-}
-
-SV *
-Perl_re_intuit_string(pTHX_ regexp *prog)
-{ /* Assume that RE_INTUIT is set */
- DEBUG_r(
- { STRLEN n_a;
- char *s = SvPV(prog->check_substr,n_a);
-
- if (!PL_colorset) reginitcolors();
- PerlIO_printf(Perl_debug_log,
- "%sUsing REx substr:%s `%s%.60s%s%s'\n",
- PL_colors[4],PL_colors[5],PL_colors[0],
- s,
- PL_colors[1],
- (strlen(s) > 60 ? "..." : ""));
- } );
-
- return prog->check_substr;
-}
-
-void
-Perl_pregfree(pTHX_ struct regexp *r)
-{
- DEBUG_r(if (!PL_colorset) reginitcolors());
-
- if (!r || (--r->refcnt > 0))
- return;
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- "%sFreeing REx:%s `%s%.60s%s%s'\n",
- PL_colors[4],PL_colors[5],PL_colors[0],
- r->precomp,
- PL_colors[1],
- (strlen(r->precomp) > 60 ? "..." : "")));
-
- if (r->precomp)
- Safefree(r->precomp);
- if (RX_MATCH_COPIED(r))
- Safefree(r->subbeg);
- if (r->substrs) {
- if (r->anchored_substr)
- SvREFCNT_dec(r->anchored_substr);
- if (r->float_substr)
- SvREFCNT_dec(r->float_substr);
- Safefree(r->substrs);
- }
- if (r->data) {
- int n = r->data->count;
- AV* new_comppad = NULL;
- AV* old_comppad;
- SV** old_curpad;
-
- while (--n >= 0) {
- switch (r->data->what[n]) {
- case 's':
- SvREFCNT_dec((SV*)r->data->data[n]);
- break;
- case 'f':
- Safefree(r->data->data[n]);
- break;
- case 'p':
- new_comppad = (AV*)r->data->data[n];
- break;
- case 'o':
- if (new_comppad == NULL)
- Perl_croak(aTHX_ "panic: pregfree comppad");
- old_comppad = PL_comppad;
- old_curpad = PL_curpad;
- /* Watch out for global destruction's random ordering. */
- if (SvTYPE(new_comppad) == SVt_PVAV) {
- PL_comppad = new_comppad;
- PL_curpad = AvARRAY(new_comppad);
- }
- else
- PL_curpad = NULL;
- op_free((OP_4tree*)r->data->data[n]);
- PL_comppad = old_comppad;
- PL_curpad = old_curpad;
- SvREFCNT_dec((SV*)new_comppad);
- new_comppad = NULL;
- break;
- case 'n':
- break;
- default:
- FAIL2("panic: regfree data code '%c'", r->data->what[n]);
- }
- }
- Safefree(r->data->what);
- Safefree(r->data);
- }
- Safefree(r->startp);
- Safefree(r->endp);
- Safefree(r);
-}
-
-/*
- - 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.]
- */
-regnode *
-Perl_regnext(pTHX_ register regnode *p)
-{
- register I32 offset;
-
- if (p == &PL_regdummy)
- return(NULL);
-
- offset = (reg_off_by_arg[OP(p)] ? ARG(p) : NEXT_OFF(p));
- if (offset == 0)
- return(NULL);
-
- return(p+offset);
-}
-
-STATIC void
-S_re_croak2(pTHX_ const char* pat1,const char* pat2,...)
-{
- va_list args;
- STRLEN l1 = strlen(pat1);
- STRLEN l2 = strlen(pat2);
- char buf[512];
- SV *msv;
- char *message;
-
- if (l1 > 510)
- l1 = 510;
- if (l1 + l2 > 510)
- l2 = 510 - l1;
- Copy(pat1, buf, l1 , char);
- Copy(pat2, buf + l1, l2 , char);
- buf[l1 + l2] = '\n';
- buf[l1 + l2 + 1] = '\0';
-#ifdef I_STDARG
- /* ANSI variant takes additional second argument */
- va_start(args, pat2);
-#else
- va_start(args);
-#endif
- msv = vmess(buf, &args);
- va_end(args);
- message = SvPV(msv,l1);
- if (l1 > 512)
- l1 = 512;
- Copy(message, buf, l1 , char);
- buf[l1] = '\0'; /* Overwrite \n */
- Perl_croak(aTHX_ "%s", buf);
-}
-
-/* XXX Here's a total kludge. But we need to re-enter for swash routines. */
-
-void
-Perl_save_re_context(pTHX)
-{
- SAVEPPTR(PL_bostr);
- SAVEPPTR(PL_regprecomp); /* uncompiled string. */
- SAVEI32(PL_regnpar); /* () count. */
- SAVEI32(PL_regsize); /* Code size. */
- SAVEI16(PL_regflags); /* are we folding, multilining? */
- SAVEPPTR(PL_reginput); /* String-input pointer. */
- SAVEPPTR(PL_regbol); /* Beginning of input, for ^ check. */
- SAVEPPTR(PL_regeol); /* End of input, for $ check. */
- SAVEVPTR(PL_regstartp); /* Pointer to startp array. */
- SAVEVPTR(PL_regendp); /* Ditto for endp. */
- SAVEVPTR(PL_reglastparen); /* Similarly for lastparen. */
- SAVEPPTR(PL_regtill); /* How far we are required to go. */
- SAVEI8(PL_regprev); /* char before regbol, \n if none */
- SAVEGENERICPV(PL_reg_start_tmp); /* from regexec.c */
- PL_reg_start_tmp = 0;
- SAVEI32(PL_reg_start_tmpl); /* from regexec.c */
- PL_reg_start_tmpl = 0;
- SAVEVPTR(PL_regdata);
- SAVEI32(PL_reg_flags); /* from regexec.c */
- SAVEI32(PL_reg_eval_set); /* from regexec.c */
- SAVEI32(PL_regnarrate); /* from regexec.c */
- SAVEVPTR(PL_regprogram); /* from regexec.c */
- SAVEINT(PL_regindent); /* from regexec.c */
- SAVEVPTR(PL_regcc); /* from regexec.c */
- SAVEVPTR(PL_curcop);
- SAVEVPTR(PL_regcomp_rx); /* from regcomp.c */
- SAVEI32(PL_regseen); /* from regcomp.c */
- SAVEI32(PL_regsawback); /* Did we see \1, ...? */
- SAVEI32(PL_regnaughty); /* How bad is this pattern? */
- SAVEVPTR(PL_regcode); /* Code-emit pointer; &regdummy = don't */
- SAVEPPTR(PL_regxend); /* End of input for compile */
- SAVEPPTR(PL_regcomp_parse); /* Input-scan pointer. */
- SAVEVPTR(PL_reg_call_cc); /* from regexec.c */
- SAVEVPTR(PL_reg_re); /* from regexec.c */
- SAVEPPTR(PL_reg_ganch); /* from regexec.c */
- SAVESPTR(PL_reg_sv); /* from regexec.c */
- SAVEVPTR(PL_reg_magic); /* from regexec.c */
- SAVEI32(PL_reg_oldpos); /* from regexec.c */
- SAVEVPTR(PL_reg_oldcurpm); /* from regexec.c */
- SAVEVPTR(PL_reg_curpm); /* from regexec.c */
- SAVEI32(PL_regnpar); /* () count. */
-#ifdef DEBUGGING
- SAVEPPTR(PL_reg_starttry); /* from regexec.c */
-#endif
-}
-
-#ifdef PERL_OBJECT
-#include "XSUB.h"
-#undef this
-#define this pPerl
-#endif
-
-static void
-clear_re(pTHXo_ void *r)
-{
- ReREFCNT_dec((regexp *)r);
-}
-
diff --git a/contrib/perl5/regcomp.h b/contrib/perl5/regcomp.h
deleted file mode 100644
index 225ff74..0000000
--- a/contrib/perl5/regcomp.h
+++ /dev/null
@@ -1,343 +0,0 @@
-/* regcomp.h
- */
-
-typedef OP OP_4tree; /* Will be redefined later. */
-
-/*
- * 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 sv 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 SV* 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 pregcomp() 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 pregexec() needs it and pregcomp() 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:
- */
-
-/*
- * 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.
- *
- * [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.]
- */
-
-struct regnode_string {
- U8 str_len;
- U8 type;
- U16 next_off;
- char string[1];
-};
-
-struct regnode_1 {
- U8 flags;
- U8 type;
- U16 next_off;
- U32 arg1;
-};
-
-struct regnode_2 {
- U8 flags;
- U8 type;
- U16 next_off;
- U16 arg1;
- U16 arg2;
-};
-
-#define ANYOF_BITMAP_SIZE 32 /* 256 b/(8 b/B) */
-#define ANYOF_CLASSBITMAP_SIZE 4
-
-struct regnode_charclass {
- U8 flags;
- U8 type;
- U16 next_off;
- char bitmap[ANYOF_BITMAP_SIZE];
-};
-
-struct regnode_charclass_class {
- U8 flags;
- U8 type;
- U16 next_off;
- char bitmap[ANYOF_BITMAP_SIZE];
- char classflags[ANYOF_CLASSBITMAP_SIZE];
-};
-
-/* XXX fix this description.
- Impose a limit of REG_INFTY on various pattern matching operations
- to limit stack growth and to avoid "infinite" recursions.
-*/
-/* The default size for REG_INFTY is I16_MAX, which is the same as
- SHORT_MAX (see perl.h). Unfortunately I16 isn't necessarily 16 bits
- (see handy.h). On the Cray C90, sizeof(short)==4 and hence I16_MAX is
- ((1<<31)-1), while on the Cray T90, sizeof(short)==8 and I16_MAX is
- ((1<<63)-1). To limit stack growth to reasonable sizes, supply a
- smaller default.
- --Andy Dougherty 11 June 1998
-*/
-#if SHORTSIZE > 2
-# ifndef REG_INFTY
-# define REG_INFTY ((1<<15)-1)
-# endif
-#endif
-
-#ifndef REG_INFTY
-# define REG_INFTY I16_MAX
-#endif
-
-#define ARG_VALUE(arg) (arg)
-#define ARG__SET(arg,val) ((arg) = (val))
-
-#define ARG(p) ARG_VALUE(ARG_LOC(p))
-#define ARG1(p) ARG_VALUE(ARG1_LOC(p))
-#define ARG2(p) ARG_VALUE(ARG2_LOC(p))
-#define ARG_SET(p, val) ARG__SET(ARG_LOC(p), (val))
-#define ARG1_SET(p, val) ARG__SET(ARG1_LOC(p), (val))
-#define ARG2_SET(p, val) ARG__SET(ARG2_LOC(p), (val))
-
-#ifndef lint
-# define NEXT_OFF(p) ((p)->next_off)
-# define NODE_ALIGN(node)
-# define NODE_ALIGN_FILL(node) ((node)->flags = 0xde) /* deadbeef */
-#else /* lint */
-# define NEXT_OFF(p) 0
-# define NODE_ALIGN(node)
-# define NODE_ALIGN_FILL(node)
-#endif /* lint */
-
-#define SIZE_ALIGN NODE_ALIGN
-
-#define OP(p) ((p)->type)
-#define OPERAND(p) (((struct regnode_string *)p)->string)
-#define MASK(p) ((char*)OPERAND(p))
-#define STR_LEN(p) (((struct regnode_string *)p)->str_len)
-#define STRING(p) (((struct regnode_string *)p)->string)
-#define STR_SZ(l) ((l + sizeof(regnode) - 1) / sizeof(regnode))
-#define NODE_SZ_STR(p) (STR_SZ(STR_LEN(p))+1)
-
-#define NODE_ALIGN(node)
-#define ARG_LOC(p) (((struct regnode_1 *)p)->arg1)
-#define ARG1_LOC(p) (((struct regnode_2 *)p)->arg1)
-#define ARG2_LOC(p) (((struct regnode_2 *)p)->arg2)
-#define NODE_STEP_REGNODE 1 /* sizeof(regnode)/sizeof(regnode) */
-#define EXTRA_STEP_2ARGS EXTRA_SIZE(struct regnode_2)
-
-#define NODE_STEP_B 4
-
-#define NEXTOPER(p) ((p) + NODE_STEP_REGNODE)
-#define PREVOPER(p) ((p) - NODE_STEP_REGNODE)
-
-#define FILL_ADVANCE_NODE(ptr, op) STMT_START { \
- (ptr)->type = op; (ptr)->next_off = 0; (ptr)++; } STMT_END
-#define FILL_ADVANCE_NODE_ARG(ptr, op, arg) STMT_START { \
- ARG_SET(ptr, arg); FILL_ADVANCE_NODE(ptr, op); (ptr) += 1; } STMT_END
-
-#define REG_MAGIC 0234
-
-#define SIZE_ONLY (PL_regcode == &PL_regdummy)
-
-/* Flags for node->flags of ANYOF */
-
-#define ANYOF_CLASS 0x08
-#define ANYOF_INVERT 0x04
-#define ANYOF_FOLD 0x02
-#define ANYOF_LOCALE 0x01
-
-/* Used for regstclass only */
-#define ANYOF_EOS 0x10 /* Can match an empty string too */
-
-/* Character classes for node->classflags of ANYOF */
-/* Should be synchronized with a table in regprop() */
-/* 2n should pair with 2n+1 */
-
-#define ANYOF_ALNUM 0 /* \w, PL_utf8_alnum, utf8::IsWord, ALNUM */
-#define ANYOF_NALNUM 1
-#define ANYOF_SPACE 2 /* \s */
-#define ANYOF_NSPACE 3
-#define ANYOF_DIGIT 4
-#define ANYOF_NDIGIT 5
-#define ANYOF_ALNUMC 6 /* isalnum(3), utf8::IsAlnum, ALNUMC */
-#define ANYOF_NALNUMC 7
-#define ANYOF_ALPHA 8
-#define ANYOF_NALPHA 9
-#define ANYOF_ASCII 10
-#define ANYOF_NASCII 11
-#define ANYOF_CNTRL 12
-#define ANYOF_NCNTRL 13
-#define ANYOF_GRAPH 14
-#define ANYOF_NGRAPH 15
-#define ANYOF_LOWER 16
-#define ANYOF_NLOWER 17
-#define ANYOF_PRINT 18
-#define ANYOF_NPRINT 19
-#define ANYOF_PUNCT 20
-#define ANYOF_NPUNCT 21
-#define ANYOF_UPPER 22
-#define ANYOF_NUPPER 23
-#define ANYOF_XDIGIT 24
-#define ANYOF_NXDIGIT 25
-#define ANYOF_PSXSPC 26 /* POSIX space: \s plus the vertical tab */
-#define ANYOF_NPSXSPC 27
-#define ANYOF_BLANK 28 /* GNU extension: space and tab */
-#define ANYOF_NBLANK 29
-
-#define ANYOF_MAX 32
-
-/* Backward source code compatibility. */
-
-#define ANYOF_ALNUML ANYOF_ALNUM
-#define ANYOF_NALNUML ANYOF_NALNUM
-#define ANYOF_SPACEL ANYOF_SPACE
-#define ANYOF_NSPACEL ANYOF_NSPACE
-
-/* Utility macros for the bitmap and classes of ANYOF */
-
-#define ANYOF_SIZE (sizeof(struct regnode_charclass))
-#define ANYOF_CLASS_SIZE (sizeof(struct regnode_charclass_class))
-
-#define ANYOF_FLAGS(p) ((p)->flags)
-#define ANYOF_FLAGS_ALL 0xff
-
-#define ANYOF_BIT(c) (1 << ((c) & 7))
-
-#define ANYOF_CLASS_BYTE(p, c) (((struct regnode_charclass_class*)(p))->classflags[((c) >> 3) & 3])
-#define ANYOF_CLASS_SET(p, c) (ANYOF_CLASS_BYTE(p, c) |= ANYOF_BIT(c))
-#define ANYOF_CLASS_CLEAR(p, c) (ANYOF_CLASS_BYTE(p, c) &= ~ANYOF_BIT(c))
-#define ANYOF_CLASS_TEST(p, c) (ANYOF_CLASS_BYTE(p, c) & ANYOF_BIT(c))
-
-#define ANYOF_CLASS_ZERO(ret) Zero(((struct regnode_charclass_class*)(ret))->classflags, ANYOF_CLASSBITMAP_SIZE, char)
-#define ANYOF_BITMAP_ZERO(ret) Zero(((struct regnode_charclass*)(ret))->bitmap, ANYOF_BITMAP_SIZE, char)
-
-#define ANYOF_BITMAP(p) (((struct regnode_charclass*)(p))->bitmap)
-#define ANYOF_BITMAP_BYTE(p, c) (ANYOF_BITMAP(p)[((c) >> 3) & 31])
-#define ANYOF_BITMAP_SET(p, c) (ANYOF_BITMAP_BYTE(p, c) |= ANYOF_BIT(c))
-#define ANYOF_BITMAP_CLEAR(p,c) (ANYOF_BITMAP_BYTE(p, c) &= ~ANYOF_BIT(c))
-#define ANYOF_BITMAP_TEST(p, c) (ANYOF_BITMAP_BYTE(p, c) & ANYOF_BIT(c))
-
-#define ANYOF_SKIP ((ANYOF_SIZE - 1)/sizeof(regnode))
-#define ANYOF_CLASS_SKIP ((ANYOF_CLASS_SIZE - 1)/sizeof(regnode))
-#define ANYOF_CLASS_ADD_SKIP (ANYOF_CLASS_SKIP - ANYOF_SKIP)
-
-/*
- * Utility definitions.
- */
-#ifndef lint
-#ifndef CHARMASK
-#define UCHARAT(p) ((int)*(U8*)(p))
-#else
-#define UCHARAT(p) ((int)*(p)&CHARMASK)
-#endif
-#else /* lint */
-#define UCHARAT(p) PL_regdummy
-#endif /* lint */
-
-#define EXTRA_SIZE(guy) ((sizeof(guy)-1)/sizeof(struct regnode))
-
-#define REG_SEEN_ZERO_LEN 1
-#define REG_SEEN_LOOKBEHIND 2
-#define REG_SEEN_GPOS 4
-#define REG_SEEN_EVAL 8
-
-START_EXTERN_C
-
-#include "regnodes.h"
-
-/* The following have no fixed length. U8 so we can do strchr() on it. */
-#ifndef DOINIT
-EXTCONST U8 PL_varies[];
-#else
-EXTCONST U8 PL_varies[] = {
- BRANCH, BACK, STAR, PLUS, CURLY, CURLYX, REF, REFF, REFFL,
- WHILEM, CURLYM, CURLYN, BRANCHJ, IFTHEN, SUSPEND, CLUMP, 0
-};
-#endif
-
-/* The following always have a length of 1. U8 we can do strchr() on it. */
-/* (Note that length 1 means "one character" under UTF8, not "one octet".) */
-#ifndef DOINIT
-EXTCONST U8 PL_simple[];
-#else
-EXTCONST U8 PL_simple[] = {
- REG_ANY, ANYUTF8, SANY, SANYUTF8, ANYOF, ANYOFUTF8,
- ALNUM, ALNUMUTF8, ALNUML, ALNUMLUTF8,
- NALNUM, NALNUMUTF8, NALNUML, NALNUMLUTF8,
- SPACE, SPACEUTF8, SPACEL, SPACELUTF8,
- NSPACE, NSPACEUTF8, NSPACEL, NSPACELUTF8,
- DIGIT, DIGITUTF8, NDIGIT, NDIGITUTF8, 0
-};
-#endif
-
-END_EXTERN_C
-
-typedef struct re_scream_pos_data_s
-{
- char **scream_olds; /* match pos */
- I32 *scream_pos; /* Internal iterator of scream. */
-} re_scream_pos_data;
-
-struct reg_data {
- U32 count;
- U8 *what;
- void* data[1];
-};
-
-struct reg_substr_datum {
- I32 min_offset;
- I32 max_offset;
- SV *substr;
-};
-
-struct reg_substr_data {
- struct reg_substr_datum data[3]; /* Actual array */
-};
-
-#define anchored_substr substrs->data[0].substr
-#define anchored_offset substrs->data[0].min_offset
-#define float_substr substrs->data[1].substr
-#define float_min_offset substrs->data[1].min_offset
-#define float_max_offset substrs->data[1].max_offset
-#define check_substr substrs->data[2].substr
-#define check_offset_min substrs->data[2].min_offset
-#define check_offset_max substrs->data[2].max_offset
diff --git a/contrib/perl5/regcomp.pl b/contrib/perl5/regcomp.pl
deleted file mode 100644
index 6ae8478..0000000
--- a/contrib/perl5/regcomp.pl
+++ /dev/null
@@ -1,119 +0,0 @@
-#use Fatal qw(open close rename chmod unlink);
-open DESC, 'regcomp.sym';
-$ind = 0;
-
-while (<DESC>) {
- next if /^\s*($|\#)/;
- $ind++;
- chomp;
- ($name[$ind], $desc, $rest[$ind]) = split /\t+/, $_, 3;
- ($type[$ind], $code[$ind], $args[$ind], $longj[$ind])
- = split /[,\s]\s*/, $desc, 4;
-}
-close DESC;
-$tot = $ind;
-
-$tmp_h = 'tmp_reg.h';
-
-unlink $tmp_h if -f $tmp_h;
-
-open OUT, ">$tmp_h";
-
-print OUT <<EOP;
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by regcomp.pl from regcomp.sym.
- Any changes made here will be lost!
-*/
-
-EOP
-
-$ind = 0;
-while (++$ind <= $tot) {
- $oind = $ind - 1;
- $hind = sprintf "%#4x", $oind;
- print OUT <<EOP;
-#define $name[$ind] $oind /* $hind $rest[$ind] */
-EOP
-}
-
-print OUT <<EOP;
-
-#ifndef DOINIT
-EXTCONST U8 PL_regkind[];
-#else
-EXTCONST U8 PL_regkind[] = {
-EOP
-
-$ind = 0;
-while (++$ind <= $tot) {
- print OUT <<EOP;
- $type[$ind], /* $name[$ind] */
-EOP
-}
-
-print OUT <<EOP;
-};
-#endif
-
-
-#ifdef REG_COMP_C
-static const U8 regarglen[] = {
-EOP
-
-$ind = 0;
-while (++$ind <= $tot) {
- $size = 0;
- $size = "EXTRA_SIZE(struct regnode_$args[$ind])" if $args[$ind];
-
- print OUT <<EOP;
- $size, /* $name[$ind] */
-EOP
-}
-
-print OUT <<EOP;
-};
-
-static const char reg_off_by_arg[] = {
-EOP
-
-$ind = 0;
-while (++$ind <= $tot) {
- $size = $longj[$ind] || 0;
-
- print OUT <<EOP;
- $size, /* $name[$ind] */
-EOP
-}
-
-print OUT <<EOP;
-};
-
-#ifdef DEBUGGING
-static const char * const reg_name[] = {
-EOP
-
-$ind = 0;
-while (++$ind <= $tot) {
- $hind = sprintf "%#4x", $ind-1;
- $size = $longj[$ind] || 0;
-
- print OUT <<EOP;
- "$name[$ind]", /* $hind */
-EOP
-}
-
-print OUT <<EOP;
-};
-
-static const int reg_num = $tot;
-
-#endif /* DEBUGGING */
-#endif /* REG_COMP_C */
-
-EOP
-
-close OUT;
-
-chmod 0666, 'regnodes.h';
-unlink 'regnodes.h';
-rename $tmp_h, 'regnodes.h';
diff --git a/contrib/perl5/regcomp.sym b/contrib/perl5/regcomp.sym
deleted file mode 100644
index bb5f8f8..0000000
--- a/contrib/perl5/regcomp.sym
+++ /dev/null
@@ -1,134 +0,0 @@
-# Format:
-# NAME \t TYPE, arg-description [num-args] [longjump-len] \t DESCRIPTION
-
-# Empty rows and #-comment rows are ignored.
-
-# Exit points
-END END, no End of program.
-SUCCEED END, no Return from a subroutine, basically.
-
-# Anchors:
-BOL BOL, no Match "" at beginning of line.
-MBOL BOL, no Same, assuming multiline.
-SBOL BOL, no Same, assuming singleline.
-EOS EOL, no Match "" at end of string.
-EOL EOL, no Match "" at end of line.
-MEOL EOL, no Same, assuming multiline.
-SEOL EOL, no Same, assuming singleline.
-BOUND BOUND, no Match "" at any word boundary
-BOUNDUTF8 BOUND, no Match "" at any word boundary
-BOUNDL BOUND, no Match "" at any word boundary
-BOUNDLUTF8 BOUND, no Match "" at any word boundary
-NBOUND NBOUND, no Match "" at any word non-boundary
-NBOUNDUTF8 NBOUND, no Match "" at any word non-boundary
-NBOUNDL NBOUND, no Match "" at any word non-boundary
-NBOUNDLUTF8 NBOUND, no Match "" at any word non-boundary
-GPOS GPOS, no Matches where last m//g left off.
-
-# [Special] alternatives
-REG_ANY REG_ANY, no Match any one character (except newline).
-ANYUTF8 REG_ANY, no Match any one Unicode character (except newline).
-SANY REG_ANY, no Match any one character.
-SANYUTF8 REG_ANY, no Match any one Unicode character.
-ANYOF ANYOF, sv Match character in (or not in) this class.
-ANYOFUTF8 ANYOF, sv 1 Match character in (or not in) this class.
-ALNUM ALNUM, no Match any alphanumeric character
-ALNUMUTF8 ALNUM, no Match any alphanumeric character in utf8
-ALNUML ALNUM, no Match any alphanumeric char in locale
-ALNUMLUTF8 ALNUM, no Match any alphanumeric char in locale+utf8
-NALNUM NALNUM, no Match any non-alphanumeric character
-NALNUMUTF8 NALNUM, no Match any non-alphanumeric character in utf8
-NALNUML NALNUM, no Match any non-alphanumeric char in locale
-NALNUMLUTF8 NALNUM, no Match any non-alphanumeric char in locale+utf8
-SPACE SPACE, no Match any whitespace character
-SPACEUTF8 SPACE, no Match any whitespace character in utf8
-SPACEL SPACE, no Match any whitespace char in locale
-SPACELUTF8 SPACE, no Match any whitespace char in locale+utf8
-NSPACE NSPACE, no Match any non-whitespace character
-NSPACEUTF8 NSPACE, no Match any non-whitespace character in utf8
-NSPACEL NSPACE, no Match any non-whitespace char in locale
-NSPACELUTF8 NSPACE, no Match any non-whitespace char in locale+utf8
-DIGIT DIGIT, no Match any numeric character
-DIGITUTF8 DIGIT, no Match any numeric character in utf8
-DIGITL DIGIT, no Match any numeric character in locale
-DIGITLUTF8 DIGIT, no Match any numeric character in locale+utf8
-NDIGIT NDIGIT, no Match any non-numeric character
-NDIGITUTF8 NDIGIT, no Match any non-numeric character in utf8
-NDIGITL NDIGIT, no Match any non-numeric character in locale
-NDIGITLUTF8 NDIGIT, no Match any non-numeric character in locale+utf8
-CLUMP CLUMP, no Match any combining character sequence
-
-# 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.
-#
-BRANCH BRANCH, node Match this alternative, or the next...
-
-# BACK Normal "next" pointers all implicitly point forward; BACK
-# exists to make loop structures possible.
-# not used
-BACK BACK, no Match "", "next" ptr points backward.
-
-# Literals
-EXACT EXACT, sv Match this string (preceded by length).
-EXACTF EXACT, sv Match this string, folded (prec. by length).
-EXACTFL EXACT, sv Match this string, folded in locale (w/len).
-
-# Do nothing
-NOTHING NOTHING,no Match empty string.
-# A variant of above which delimits a group, thus stops optimizations
-TAIL NOTHING,no Match empty string. Can jump here from outside.
-
-# 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.
-#
-STAR STAR, node Match this (simple) thing 0 or more times.
-PLUS PLUS, node Match this (simple) thing 1 or more times.
-
-CURLY CURLY, sv 2 Match this simple thing {n,m} times.
-CURLYN CURLY, no 2 Match next-after-this simple thing
-# {n,m} times, set parenths.
-CURLYM CURLY, no 2 Match this medium-complex thing {n,m} times.
-CURLYX CURLY, sv 2 Match this complex thing {n,m} times.
-
-# This terminator creates a loop structure for CURLYX
-WHILEM WHILEM, no Do curly processing and see if rest matches.
-
-# OPEN,CLOSE,GROUPP ...are numbered at compile time.
-OPEN OPEN, num 1 Mark this point in input as start of #n.
-CLOSE CLOSE, num 1 Analogous to OPEN.
-
-REF REF, num 1 Match some already matched string
-REFF REF, num 1 Match already matched string, folded
-REFFL REF, num 1 Match already matched string, folded in loc.
-
-# grouping assertions
-IFMATCH BRANCHJ,off 1 2 Succeeds if the following matches.
-UNLESSM BRANCHJ,off 1 2 Fails if the following matches.
-SUSPEND BRANCHJ,off 1 1 "Independent" sub-RE.
-IFTHEN BRANCHJ,off 1 1 Switch, should be preceeded by switcher .
-GROUPP GROUPP, num 1 Whether the group matched.
-
-# Support for long RE
-LONGJMP LONGJMP,off 1 1 Jump far away.
-BRANCHJ BRANCHJ,off 1 1 BRANCH with long offset.
-
-# The heavy worker
-EVAL EVAL, evl 1 Execute some Perl code.
-
-# Modifiers
-MINMOD MINMOD, no Next operator is not greedy.
-LOGICAL LOGICAL,no Next opcode should set the flag only.
-
-# This is not used yet
-RENUM BRANCHJ,off 1 1 Group with independently numbered parens.
-
-# This is not really a node, but an optimized away piece of a "long" node.
-# To simplify debugging output, we mark it as if it were a node
-OPTIMIZED NOTHING,off Placeholder for dump.
diff --git a/contrib/perl5/regexec.c b/contrib/perl5/regexec.c
deleted file mode 100644
index f4db4e0..0000000
--- a/contrib/perl5/regexec.c
+++ /dev/null
@@ -1,3895 +0,0 @@
-/* regexec.c
- */
-
-/*
- * "One Ring to rule them all, One Ring to find them..."
- */
-
-/* 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.
- */
-
-/* The names of the functions have been changed from regcomp and
- * regexec to pregcomp and pregexec in order to avoid conflicts
- * with the POSIX routines of the same names.
-*/
-
-#ifdef PERL_EXT_RE_BUILD
-/* need to replace pregcomp et al, so enable that */
-# ifndef PERL_IN_XSUB_RE
-# define PERL_IN_XSUB_RE
-# endif
-/* need access to debugger hooks */
-# if defined(PERL_EXT_RE_DEBUG) && !defined(DEBUGGING)
-# define DEBUGGING
-# endif
-#endif
-
-#ifdef PERL_IN_XSUB_RE
-/* We *really* need to overwrite these symbols: */
-# define Perl_regexec_flags my_regexec
-# define Perl_regdump my_regdump
-# define Perl_regprop my_regprop
-# define Perl_re_intuit_start my_re_intuit_start
-/* *These* symbols are masked to allow static link. */
-# define Perl_pregexec my_pregexec
-# define Perl_reginitcolors my_reginitcolors
-
-# define PERL_NO_GET_CONTEXT
-#endif
-
-/*SUPPRESS 112*/
-/*
- * pregcomp and pregexec -- 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) 1991-2001, Larry Wall
- ****
- **** You may distribute under the terms of either the GNU General Public
- **** License or the Artistic License, as specified in the README file.
- *
- * 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"
-#define PERL_IN_REGEXEC_C
-#include "perl.h"
-
-#ifdef PERL_IN_XSUB_RE
-# if defined(PERL_CAPI) || defined(PERL_OBJECT)
-# include "XSUB.h"
-# endif
-#endif
-
-#include "regcomp.h"
-
-#define RF_tainted 1 /* tainted information used? */
-#define RF_warned 2 /* warned about big count? */
-#define RF_evaled 4 /* Did an EVAL with setting? */
-#define RF_utf8 8 /* String contains multibyte chars? */
-
-#define UTF (PL_reg_flags & RF_utf8)
-
-#define RS_init 1 /* eval environment created */
-#define RS_set 2 /* replsv value is set */
-
-#ifndef STATIC
-#define STATIC static
-#endif
-
-/*
- * Forwards.
- */
-
-#define REGINCLASS(p,c) (ANYOF_FLAGS(p) ? reginclass(p,c) : ANYOF_BITMAP_TEST(p,c))
-#ifdef DEBUGGING
-# define REGINCLASSUTF8(f,p) (ARG1(f) ? reginclassutf8(f,p) : swash_fetch(*av_fetch((AV*)SvRV((SV*)PL_regdata->data[ARG2(f)]),0,FALSE),p))
-#else
-# define REGINCLASSUTF8(f,p) (ARG1(f) ? reginclassutf8(f,p) : swash_fetch((SV*)PL_regdata->data[ARG2(f)],p))
-#endif
-
-#define CHR_SVLEN(sv) (UTF ? sv_len_utf8(sv) : SvCUR(sv))
-#define CHR_DIST(a,b) (UTF ? utf8_distance(a,b) : a - b)
-
-#define reghop_c(pos,off) ((char*)reghop((U8*)pos, off))
-#define reghopmaybe_c(pos,off) ((char*)reghopmaybe((U8*)pos, off))
-#define HOP(pos,off) (UTF ? reghop((U8*)pos, off) : (U8*)(pos + off))
-#define HOPMAYBE(pos,off) (UTF ? reghopmaybe((U8*)pos, off) : (U8*)(pos + off))
-#define HOPc(pos,off) ((char*)HOP(pos,off))
-#define HOPMAYBEc(pos,off) ((char*)HOPMAYBE(pos,off))
-
-static void restore_pos(pTHXo_ void *arg);
-
-
-STATIC CHECKPOINT
-S_regcppush(pTHX_ I32 parenfloor)
-{
- int retval = PL_savestack_ix;
-#define REGCP_PAREN_ELEMS 4
- int paren_elems_to_push = (PL_regsize - parenfloor) * REGCP_PAREN_ELEMS;
- int p;
-
-#define REGCP_OTHER_ELEMS 5
- SSCHECK(paren_elems_to_push + REGCP_OTHER_ELEMS);
- for (p = PL_regsize; p > parenfloor; p--) {
-/* REGCP_PARENS_ELEMS are pushed per pairs of parentheses. */
- SSPUSHINT(PL_regendp[p]);
- SSPUSHINT(PL_regstartp[p]);
- SSPUSHPTR(PL_reg_start_tmp[p]);
- SSPUSHINT(p);
- }
-/* REGCP_OTHER_ELEMS are pushed in any case, parentheses or no. */
- SSPUSHINT(PL_regsize);
- SSPUSHINT(*PL_reglastparen);
- SSPUSHPTR(PL_reginput);
-#define REGCP_FRAME_ELEMS 2
-/* REGCP_FRAME_ELEMS are part of the REGCP_OTHER_ELEMS and
- * are needed for the regexp context stack bookkeeping. */
- SSPUSHINT(paren_elems_to_push + REGCP_OTHER_ELEMS - REGCP_FRAME_ELEMS);
- SSPUSHINT(SAVEt_REGCONTEXT); /* Magic cookie. */
-
- return retval;
-}
-
-/* These are needed since we do not localize EVAL nodes: */
-# define REGCP_SET(cp) DEBUG_r(PerlIO_printf(Perl_debug_log, \
- " Setting an EVAL scope, savestack=%"IVdf"\n", \
- (IV)PL_savestack_ix)); cp = PL_savestack_ix
-
-# define REGCP_UNWIND(cp) DEBUG_r(cp != PL_savestack_ix ? \
- PerlIO_printf(Perl_debug_log, \
- " Clearing an EVAL scope, savestack=%"IVdf"..%"IVdf"\n", \
- (IV)(cp), (IV)PL_savestack_ix) : 0); regcpblow(cp)
-
-STATIC char *
-S_regcppop(pTHX)
-{
- I32 i;
- U32 paren = 0;
- char *input;
- I32 tmps;
-
- /* Pop REGCP_OTHER_ELEMS before the parentheses loop starts. */
- i = SSPOPINT;
- assert(i == SAVEt_REGCONTEXT); /* Check that the magic cookie is there. */
- i = SSPOPINT; /* Parentheses elements to pop. */
- input = (char *) SSPOPPTR;
- *PL_reglastparen = SSPOPINT;
- PL_regsize = SSPOPINT;
-
- /* Now restore the parentheses context. */
- for (i -= (REGCP_OTHER_ELEMS - REGCP_FRAME_ELEMS);
- i > 0; i -= REGCP_PAREN_ELEMS) {
- paren = (U32)SSPOPINT;
- PL_reg_start_tmp[paren] = (char *) SSPOPPTR;
- PL_regstartp[paren] = SSPOPINT;
- tmps = SSPOPINT;
- if (paren <= *PL_reglastparen)
- PL_regendp[paren] = tmps;
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- " restoring \\%"UVuf" to %"IVdf"(%"IVdf")..%"IVdf"%s\n",
- (UV)paren, (IV)PL_regstartp[paren],
- (IV)(PL_reg_start_tmp[paren] - PL_bostr),
- (IV)PL_regendp[paren],
- (paren > *PL_reglastparen ? "(no)" : ""));
- );
- }
- DEBUG_r(
- if (*PL_reglastparen + 1 <= PL_regnpar) {
- PerlIO_printf(Perl_debug_log,
- " restoring \\%"IVdf"..\\%"IVdf" to undef\n",
- (IV)(*PL_reglastparen + 1), (IV)PL_regnpar);
- }
- );
-#if 1
- /* It would seem that the similar code in regtry()
- * already takes care of this, and in fact it is in
- * a better location to since this code can #if 0-ed out
- * but the code in regtry() is needed or otherwise tests
- * requiring null fields (pat.t#187 and split.t#{13,14}
- * (as of patchlevel 7877) will fail. Then again,
- * this code seems to be necessary or otherwise
- * building DynaLoader will fail:
- * "Error: '*' not in typemap in DynaLoader.xs, line 164"
- * --jhi */
- for (paren = *PL_reglastparen + 1; paren <= PL_regnpar; paren++) {
- if (paren > PL_regsize)
- PL_regstartp[paren] = -1;
- PL_regendp[paren] = -1;
- }
-#endif
- return input;
-}
-
-STATIC char *
-S_regcp_set_to(pTHX_ I32 ss)
-{
- I32 tmp = PL_savestack_ix;
-
- PL_savestack_ix = ss;
- regcppop();
- PL_savestack_ix = tmp;
- return Nullch;
-}
-
-typedef struct re_cc_state
-{
- I32 ss;
- regnode *node;
- struct re_cc_state *prev;
- CURCUR *cc;
- regexp *re;
-} re_cc_state;
-
-#define regcpblow(cp) LEAVE_SCOPE(cp) /* Ignores regcppush()ed data. */
-
-#define TRYPAREN(paren, n, input) { \
- if (paren) { \
- if (n) { \
- PL_regstartp[paren] = HOPc(input, -1) - PL_bostr; \
- PL_regendp[paren] = input - PL_bostr; \
- } \
- else \
- PL_regendp[paren] = -1; \
- } \
- if (regmatch(next)) \
- sayYES; \
- if (paren && n) \
- PL_regendp[paren] = -1; \
-}
-
-
-/*
- * pregexec and friends
- */
-
-/*
- - pregexec - match a regexp against a string
- */
-I32
-Perl_pregexec(pTHX_ register regexp *prog, char *stringarg, register char *strend,
- char *strbeg, I32 minend, SV *screamer, U32 nosave)
-/* strend: pointer to null at end of string */
-/* strbeg: real beginning of string */
-/* minend: end of match must be >=minend after stringarg. */
-/* nosave: For optimizations. */
-{
- return
- regexec_flags(prog, stringarg, strend, strbeg, minend, screamer, NULL,
- nosave ? 0 : REXEC_COPY_STR);
-}
-
-STATIC void
-S_cache_re(pTHX_ regexp *prog)
-{
- PL_regprecomp = prog->precomp; /* Needed for FAIL. */
-#ifdef DEBUGGING
- PL_regprogram = prog->program;
-#endif
- PL_regnpar = prog->nparens;
- PL_regdata = prog->data;
- PL_reg_re = prog;
-}
-
-/*
- * Need to implement the following flags for reg_anch:
- *
- * USE_INTUIT_NOML - Useful to call re_intuit_start() first
- * USE_INTUIT_ML
- * INTUIT_AUTORITATIVE_NOML - Can trust a positive answer
- * INTUIT_AUTORITATIVE_ML
- * INTUIT_ONCE_NOML - Intuit can match in one location only.
- * INTUIT_ONCE_ML
- *
- * Another flag for this function: SECOND_TIME (so that float substrs
- * with giant delta may be not rechecked).
- */
-
-/* Assumptions: if ANCH_GPOS, then strpos is anchored. XXXX Check GPOS logic */
-
-/* If SCREAM, then SvPVX(sv) should be compatible with strpos and strend.
- Otherwise, only SvCUR(sv) is used to get strbeg. */
-
-/* XXXX We assume that strpos is strbeg unless sv. */
-
-/* XXXX Some places assume that there is a fixed substring.
- An update may be needed if optimizer marks as "INTUITable"
- RExen without fixed substrings. Similarly, it is assumed that
- lengths of all the strings are no more than minlen, thus they
- cannot come from lookahead.
- (Or minlen should take into account lookahead.) */
-
-/* A failure to find a constant substring means that there is no need to make
- an expensive call to REx engine, thus we celebrate a failure. Similarly,
- finding a substring too deep into the string means that less calls to
- regtry() should be needed.
-
- REx compiler's optimizer found 4 possible hints:
- a) Anchored substring;
- b) Fixed substring;
- c) Whether we are anchored (beginning-of-line or \G);
- d) First node (of those at offset 0) which may distingush positions;
- We use a)b)d) and multiline-part of c), and try to find a position in the
- string which does not contradict any of them.
- */
-
-/* Most of decisions we do here should have been done at compile time.
- The nodes of the REx which we used for the search should have been
- deleted from the finite automaton. */
-
-char *
-Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos,
- char *strend, U32 flags, re_scream_pos_data *data)
-{
- register I32 start_shift;
- /* Should be nonnegative! */
- register I32 end_shift;
- register char *s;
- register SV *check;
- char *strbeg;
- char *t;
- I32 ml_anch;
- char *tmp;
- register char *other_last = Nullch; /* other substr checked before this */
- char *check_at; /* check substr found at this pos */
-#ifdef DEBUGGING
- char *i_strpos = strpos;
-#endif
-
- DEBUG_r( if (!PL_colorset) reginitcolors() );
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- "%sGuessing start of match, REx%s `%s%.60s%s%s' against `%s%.*s%s%s'...\n",
- PL_colors[4],PL_colors[5],PL_colors[0],
- prog->precomp,
- PL_colors[1],
- (strlen(prog->precomp) > 60 ? "..." : ""),
- PL_colors[0],
- (int)(strend - strpos > 60 ? 60 : strend - strpos),
- strpos, PL_colors[1],
- (strend - strpos > 60 ? "..." : ""))
- );
-
- if (prog->minlen > strend - strpos) {
- DEBUG_r(PerlIO_printf(Perl_debug_log, "String too short...\n"));
- goto fail;
- }
- strbeg = (sv && SvPOK(sv)) ? strend - SvCUR(sv) : strpos;
- check = prog->check_substr;
- if (prog->reganch & ROPT_ANCH) { /* Match at beg-of-str or after \n */
- ml_anch = !( (prog->reganch & ROPT_ANCH_SINGLE)
- || ( (prog->reganch & ROPT_ANCH_BOL)
- && !PL_multiline ) ); /* Check after \n? */
-
- if (!ml_anch) {
- if ( !(prog->reganch & ROPT_ANCH_GPOS) /* Checked by the caller */
- /* SvCUR is not set on references: SvRV and SvPVX overlap */
- && sv && !SvROK(sv)
- && (strpos != strbeg)) {
- DEBUG_r(PerlIO_printf(Perl_debug_log, "Not at start...\n"));
- goto fail;
- }
- if (prog->check_offset_min == prog->check_offset_max) {
- /* Substring at constant offset from beg-of-str... */
- I32 slen;
-
- PL_regeol = strend; /* Used in HOP() */
- s = HOPc(strpos, prog->check_offset_min);
- if (SvTAIL(check)) {
- slen = SvCUR(check); /* >= 1 */
-
- if ( strend - s > slen || strend - s < slen - 1
- || (strend - s == slen && strend[-1] != '\n')) {
- DEBUG_r(PerlIO_printf(Perl_debug_log, "String too long...\n"));
- goto fail_finish;
- }
- /* Now should match s[0..slen-2] */
- slen--;
- if (slen && (*SvPVX(check) != *s
- || (slen > 1
- && memNE(SvPVX(check), s, slen)))) {
- report_neq:
- DEBUG_r(PerlIO_printf(Perl_debug_log, "String not equal...\n"));
- goto fail_finish;
- }
- }
- else if (*SvPVX(check) != *s
- || ((slen = SvCUR(check)) > 1
- && memNE(SvPVX(check), s, slen)))
- goto report_neq;
- goto success_at_start;
- }
- }
- /* Match is anchored, but substr is not anchored wrt beg-of-str. */
- s = strpos;
- start_shift = prog->check_offset_min; /* okay to underestimate on CC */
- end_shift = prog->minlen - start_shift -
- CHR_SVLEN(check) + (SvTAIL(check) != 0);
- if (!ml_anch) {
- I32 end = prog->check_offset_max + CHR_SVLEN(check)
- - (SvTAIL(check) != 0);
- I32 eshift = strend - s - end;
-
- if (end_shift < eshift)
- end_shift = eshift;
- }
- }
- else { /* Can match at random position */
- ml_anch = 0;
- s = strpos;
- start_shift = prog->check_offset_min; /* okay to underestimate on CC */
- /* Should be nonnegative! */
- end_shift = prog->minlen - start_shift -
- CHR_SVLEN(check) + (SvTAIL(check) != 0);
- }
-
-#ifdef DEBUGGING /* 7/99: reports of failure (with the older version) */
- if (end_shift < 0)
- Perl_croak(aTHX_ "panic: end_shift");
-#endif
-
- restart:
- other_last = Nullch;
-
- /* Find a possible match in the region s..strend by looking for
- the "check" substring in the region corrected by start/end_shift. */
- if (flags & REXEC_SCREAM) {
- I32 p = -1; /* Internal iterator of scream. */
- I32 *pp = data ? data->scream_pos : &p;
-
- if (PL_screamfirst[BmRARE(check)] >= 0
- || ( BmRARE(check) == '\n'
- && (BmPREVIOUS(check) == SvCUR(check) - 1)
- && SvTAIL(check) ))
- s = screaminstr(sv, check,
- start_shift + (s - strbeg), end_shift, pp, 0);
- else
- goto fail_finish;
- if (data)
- *data->scream_olds = s;
- }
- else
- s = fbm_instr((unsigned char*)s + start_shift,
- (unsigned char*)strend - end_shift,
- check, PL_multiline ? FBMrf_MULTILINE : 0);
-
- /* Update the count-of-usability, remove useless subpatterns,
- unshift s. */
-
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%s %s substr `%s%.*s%s'%s%s",
- (s ? "Found" : "Did not find"),
- ((check == prog->anchored_substr) ? "anchored" : "floating"),
- PL_colors[0],
- (int)(SvCUR(check) - (SvTAIL(check)!=0)),
- SvPVX(check),
- PL_colors[1], (SvTAIL(check) ? "$" : ""),
- (s ? " at offset " : "...\n") ) );
-
- if (!s)
- goto fail_finish;
-
- check_at = s;
-
- /* Finish the diagnostic message */
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%ld...\n", (long)(s - i_strpos)) );
-
- /* Got a candidate. Check MBOL anchoring, and the *other* substr.
- Start with the other substr.
- XXXX no SCREAM optimization yet - and a very coarse implementation
- XXXX /ttx+/ results in anchored=`ttx', floating=`x'. floating will
- *always* match. Probably should be marked during compile...
- Probably it is right to do no SCREAM here...
- */
-
- if (prog->float_substr && prog->anchored_substr) {
- /* Take into account the "other" substring. */
- /* XXXX May be hopelessly wrong for UTF... */
- if (!other_last)
- other_last = strpos;
- if (check == prog->float_substr) {
- do_other_anchored:
- {
- char *last = s - start_shift, *last1, *last2;
- char *s1 = s;
-
- tmp = PL_bostr;
- t = s - prog->check_offset_max;
- if (s - strpos > prog->check_offset_max /* signed-corrected t > strpos */
- && (!(prog->reganch & ROPT_UTF8)
- || (PL_bostr = strpos, /* Used in regcopmaybe() */
- (t = reghopmaybe_c(s, -(prog->check_offset_max)))
- && t > strpos)))
- /* EMPTY */;
- else
- t = strpos;
- t += prog->anchored_offset;
- if (t < other_last) /* These positions already checked */
- t = other_last;
- PL_bostr = tmp;
- last2 = last1 = strend - prog->minlen;
- if (last < last1)
- last1 = last;
- /* XXXX It is not documented what units *_offsets are in. Assume bytes. */
- /* On end-of-str: see comment below. */
- s = fbm_instr((unsigned char*)t,
- (unsigned char*)last1 + prog->anchored_offset
- + SvCUR(prog->anchored_substr)
- - (SvTAIL(prog->anchored_substr)!=0),
- prog->anchored_substr, PL_multiline ? FBMrf_MULTILINE : 0);
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%s anchored substr `%s%.*s%s'%s",
- (s ? "Found" : "Contradicts"),
- PL_colors[0],
- (int)(SvCUR(prog->anchored_substr)
- - (SvTAIL(prog->anchored_substr)!=0)),
- SvPVX(prog->anchored_substr),
- PL_colors[1], (SvTAIL(prog->anchored_substr) ? "$" : "")));
- if (!s) {
- if (last1 >= last2) {
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- ", giving up...\n"));
- goto fail_finish;
- }
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- ", trying floating at offset %ld...\n",
- (long)(s1 + 1 - i_strpos)));
- PL_regeol = strend; /* Used in HOP() */
- other_last = last1 + prog->anchored_offset + 1;
- s = HOPc(last, 1);
- goto restart;
- }
- else {
- DEBUG_r(PerlIO_printf(Perl_debug_log, " at offset %ld...\n",
- (long)(s - i_strpos)));
- t = s - prog->anchored_offset;
- other_last = s + 1;
- s = s1;
- if (t == strpos)
- goto try_at_start;
- goto try_at_offset;
- }
- }
- }
- else { /* Take into account the floating substring. */
- char *last, *last1;
- char *s1 = s;
-
- t = s - start_shift;
- last1 = last = strend - prog->minlen + prog->float_min_offset;
- if (last - t > prog->float_max_offset)
- last = t + prog->float_max_offset;
- s = t + prog->float_min_offset;
- if (s < other_last)
- s = other_last;
- /* XXXX It is not documented what units *_offsets are in. Assume bytes. */
- /* fbm_instr() takes into account exact value of end-of-str
- if the check is SvTAIL(ed). Since false positives are OK,
- and end-of-str is not later than strend we are OK. */
- s = fbm_instr((unsigned char*)s,
- (unsigned char*)last + SvCUR(prog->float_substr)
- - (SvTAIL(prog->float_substr)!=0),
- prog->float_substr, PL_multiline ? FBMrf_MULTILINE : 0);
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%s floating substr `%s%.*s%s'%s",
- (s ? "Found" : "Contradicts"),
- PL_colors[0],
- (int)(SvCUR(prog->float_substr)
- - (SvTAIL(prog->float_substr)!=0)),
- SvPVX(prog->float_substr),
- PL_colors[1], (SvTAIL(prog->float_substr) ? "$" : "")));
- if (!s) {
- if (last1 == last) {
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- ", giving up...\n"));
- goto fail_finish;
- }
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- ", trying anchored starting at offset %ld...\n",
- (long)(s1 + 1 - i_strpos)));
- other_last = last;
- PL_regeol = strend; /* Used in HOP() */
- s = HOPc(t, 1);
- goto restart;
- }
- else {
- DEBUG_r(PerlIO_printf(Perl_debug_log, " at offset %ld...\n",
- (long)(s - i_strpos)));
- other_last = s; /* Fix this later. --Hugo */
- s = s1;
- if (t == strpos)
- goto try_at_start;
- goto try_at_offset;
- }
- }
- }
-
- t = s - prog->check_offset_max;
- tmp = PL_bostr;
- if (s - strpos > prog->check_offset_max /* signed-corrected t > strpos */
- && (!(prog->reganch & ROPT_UTF8)
- || (PL_bostr = strpos, /* Used in regcopmaybe() */
- ((t = reghopmaybe_c(s, -(prog->check_offset_max)))
- && t > strpos)))) {
- PL_bostr = tmp;
- /* Fixed substring is found far enough so that the match
- cannot start at strpos. */
- try_at_offset:
- if (ml_anch && t[-1] != '\n') {
- /* Eventually fbm_*() should handle this, but often
- anchored_offset is not 0, so this check will not be wasted. */
- /* XXXX In the code below we prefer to look for "^" even in
- presence of anchored substrings. And we search even
- beyond the found float position. These pessimizations
- are historical artefacts only. */
- find_anchor:
- while (t < strend - prog->minlen) {
- if (*t == '\n') {
- if (t < check_at - prog->check_offset_min) {
- if (prog->anchored_substr) {
- /* Since we moved from the found position,
- we definitely contradict the found anchored
- substr. Due to the above check we do not
- contradict "check" substr.
- Thus we can arrive here only if check substr
- is float. Redo checking for "other"=="fixed".
- */
- strpos = t + 1;
- DEBUG_r(PerlIO_printf(Perl_debug_log, "Found /%s^%s/m at offset %ld, rescanning for anchored from offset %ld...\n",
- PL_colors[0],PL_colors[1], (long)(strpos - i_strpos), (long)(strpos - i_strpos + prog->anchored_offset)));
- goto do_other_anchored;
- }
- /* We don't contradict the found floating substring. */
- /* XXXX Why not check for STCLASS? */
- s = t + 1;
- DEBUG_r(PerlIO_printf(Perl_debug_log, "Found /%s^%s/m at offset %ld...\n",
- PL_colors[0],PL_colors[1], (long)(s - i_strpos)));
- goto set_useful;
- }
- /* Position contradicts check-string */
- /* XXXX probably better to look for check-string
- than for "\n", so one should lower the limit for t? */
- DEBUG_r(PerlIO_printf(Perl_debug_log, "Found /%s^%s/m, restarting lookup for check-string at offset %ld...\n",
- PL_colors[0],PL_colors[1], (long)(t + 1 - i_strpos)));
- other_last = strpos = s = t + 1;
- goto restart;
- }
- t++;
- }
- DEBUG_r(PerlIO_printf(Perl_debug_log, "Did not find /%s^%s/m...\n",
- PL_colors[0],PL_colors[1]));
- goto fail_finish;
- }
- else {
- DEBUG_r(PerlIO_printf(Perl_debug_log, "Starting position does not contradict /%s^%s/m...\n",
- PL_colors[0],PL_colors[1]));
- }
- s = t;
- set_useful:
- ++BmUSEFUL(prog->check_substr); /* hooray/5 */
- }
- else {
- PL_bostr = tmp;
- /* The found string does not prohibit matching at strpos,
- - no optimization of calling REx engine can be performed,
- unless it was an MBOL and we are not after MBOL,
- or a future STCLASS check will fail this. */
- try_at_start:
- /* Even in this situation we may use MBOL flag if strpos is offset
- wrt the start of the string. */
- if (ml_anch && sv && !SvROK(sv) /* See prev comment on SvROK */
- && (strpos != strbeg) && strpos[-1] != '\n'
- /* May be due to an implicit anchor of m{.*foo} */
- && !(prog->reganch & ROPT_IMPLICIT))
- {
- t = strpos;
- goto find_anchor;
- }
- DEBUG_r( if (ml_anch)
- PerlIO_printf(Perl_debug_log, "Position at offset %ld does not contradict /%s^%s/m...\n",
- (long)(strpos - i_strpos), PL_colors[0],PL_colors[1]);
- );
- success_at_start:
- if (!(prog->reganch & ROPT_NAUGHTY) /* XXXX If strpos moved? */
- && prog->check_substr /* Could be deleted already */
- && --BmUSEFUL(prog->check_substr) < 0
- && prog->check_substr == prog->float_substr)
- {
- /* If flags & SOMETHING - do not do it many times on the same match */
- DEBUG_r(PerlIO_printf(Perl_debug_log, "... Disabling check substring...\n"));
- SvREFCNT_dec(prog->check_substr);
- prog->check_substr = Nullsv; /* disable */
- prog->float_substr = Nullsv; /* clear */
- check = Nullsv; /* abort */
- s = strpos;
- /* XXXX This is a remnant of the old implementation. It
- looks wasteful, since now INTUIT can use many
- other heuristics. */
- prog->reganch &= ~RE_USE_INTUIT;
- }
- else
- s = strpos;
- }
-
- /* Last resort... */
- /* XXXX BmUSEFUL already changed, maybe multiple change is meaningful... */
- if (prog->regstclass) {
- /* minlen == 0 is possible if regstclass is \b or \B,
- and the fixed substr is ''$.
- Since minlen is already taken into account, s+1 is before strend;
- accidentally, minlen >= 1 guaranties no false positives at s + 1
- even for \b or \B. But (minlen? 1 : 0) below assumes that
- regstclass does not come from lookahead... */
- /* If regstclass takes bytelength more than 1: If charlength==1, OK.
- This leaves EXACTF only, which is dealt with in find_byclass(). */
- int cl_l = (PL_regkind[(U8)OP(prog->regstclass)] == EXACT
- ? STR_LEN(prog->regstclass)
- : 1);
- char *endpos = (prog->anchored_substr || ml_anch)
- ? s + (prog->minlen? cl_l : 0)
- : (prog->float_substr ? check_at - start_shift + cl_l
- : strend) ;
- char *startpos = strbeg;
-
- t = s;
- if (prog->reganch & ROPT_UTF8) {
- PL_regdata = prog->data; /* Used by REGINCLASS UTF logic */
- PL_bostr = startpos;
- }
- s = find_byclass(prog, prog->regstclass, s, endpos, startpos, 1);
- if (!s) {
-#ifdef DEBUGGING
- char *what;
-#endif
- if (endpos == strend) {
- DEBUG_r( PerlIO_printf(Perl_debug_log,
- "Could not match STCLASS...\n") );
- goto fail;
- }
- DEBUG_r( PerlIO_printf(Perl_debug_log,
- "This position contradicts STCLASS...\n") );
- if ((prog->reganch & ROPT_ANCH) && !ml_anch)
- goto fail;
- /* Contradict one of substrings */
- if (prog->anchored_substr) {
- if (prog->anchored_substr == check) {
- DEBUG_r( what = "anchored" );
- hop_and_restart:
- PL_regeol = strend; /* Used in HOP() */
- s = HOPc(t, 1);
- if (s + start_shift + end_shift > strend) {
- /* XXXX Should be taken into account earlier? */
- DEBUG_r( PerlIO_printf(Perl_debug_log,
- "Could not match STCLASS...\n") );
- goto fail;
- }
- if (!check)
- goto giveup;
- DEBUG_r( PerlIO_printf(Perl_debug_log,
- "Looking for %s substr starting at offset %ld...\n",
- what, (long)(s + start_shift - i_strpos)) );
- goto restart;
- }
- /* Have both, check_string is floating */
- if (t + start_shift >= check_at) /* Contradicts floating=check */
- goto retry_floating_check;
- /* Recheck anchored substring, but not floating... */
- s = check_at;
- if (!check)
- goto giveup;
- DEBUG_r( PerlIO_printf(Perl_debug_log,
- "Looking for anchored substr starting at offset %ld...\n",
- (long)(other_last - i_strpos)) );
- goto do_other_anchored;
- }
- /* Another way we could have checked stclass at the
- current position only: */
- if (ml_anch) {
- s = t = t + 1;
- if (!check)
- goto giveup;
- DEBUG_r( PerlIO_printf(Perl_debug_log,
- "Looking for /%s^%s/m starting at offset %ld...\n",
- PL_colors[0],PL_colors[1], (long)(t - i_strpos)) );
- goto try_at_offset;
- }
- if (!prog->float_substr) /* Could have been deleted */
- goto fail;
- /* Check is floating subtring. */
- retry_floating_check:
- t = check_at - start_shift;
- DEBUG_r( what = "floating" );
- goto hop_and_restart;
- }
- DEBUG_r( if (t != s)
- PerlIO_printf(Perl_debug_log,
- "By STCLASS: moving %ld --> %ld\n",
- (long)(t - i_strpos), (long)(s - i_strpos));
- else
- PerlIO_printf(Perl_debug_log,
- "Does not contradict STCLASS...\n") );
- }
- giveup:
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%s%s:%s match at offset %ld\n",
- PL_colors[4], (check ? "Guessed" : "Giving up"),
- PL_colors[5], (long)(s - i_strpos)) );
- return s;
-
- fail_finish: /* Substring not found */
- if (prog->check_substr) /* could be removed already */
- BmUSEFUL(prog->check_substr) += 5; /* hooray */
- fail:
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%sMatch rejected by optimizer%s\n",
- PL_colors[4],PL_colors[5]));
- return Nullch;
-}
-
-/* We know what class REx starts with. Try to find this position... */
-STATIC char *
-S_find_byclass(pTHX_ regexp * prog, regnode *c, char *s, char *strend, char *startpos, I32 norun)
-{
- I32 doevery = (prog->reganch & ROPT_SKIP) == 0;
- char *m;
- STRLEN ln;
- unsigned int c1;
- unsigned int c2;
- char *e;
- register I32 tmp = 1; /* Scratch variable? */
-
- /* We know what class it must start with. */
- switch (OP(c)) {
- case ANYOFUTF8:
- while (s < strend) {
- if (REGINCLASSUTF8(c, (U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case ANYOF:
- while (s < strend) {
- if (REGINCLASS(c, *(U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case EXACTF:
- m = STRING(c);
- ln = STR_LEN(c);
- c1 = *(U8*)m;
- c2 = PL_fold[c1];
- goto do_exactf;
- case EXACTFL:
- m = STRING(c);
- ln = STR_LEN(c);
- c1 = *(U8*)m;
- c2 = PL_fold_locale[c1];
- do_exactf:
- e = strend - ln;
-
- if (norun && e < s)
- e = s; /* Due to minlen logic of intuit() */
- /* Here it is NOT UTF! */
- if (c1 == c2) {
- while (s <= e) {
- if ( *(U8*)s == c1
- && (ln == 1 || !(OP(c) == EXACTF
- ? ibcmp(s, m, ln)
- : ibcmp_locale(s, m, ln)))
- && (norun || regtry(prog, s)) )
- goto got_it;
- s++;
- }
- } else {
- while (s <= e) {
- if ( (*(U8*)s == c1 || *(U8*)s == c2)
- && (ln == 1 || !(OP(c) == EXACTF
- ? ibcmp(s, m, ln)
- : ibcmp_locale(s, m, ln)))
- && (norun || regtry(prog, s)) )
- goto got_it;
- s++;
- }
- }
- break;
- case BOUNDL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case BOUND:
- tmp = (s != startpos) ? UCHARAT(s - 1) : '\n';
- tmp = ((OP(c) == BOUND ? isALNUM(tmp) : isALNUM_LC(tmp)) != 0);
- while (s < strend) {
- if (tmp == !(OP(c) == BOUND ? isALNUM(*s) : isALNUM_LC(*s))) {
- tmp = !tmp;
- if ((norun || regtry(prog, s)))
- goto got_it;
- }
- s++;
- }
- if ((!prog->minlen && tmp) && (norun || regtry(prog, s)))
- goto got_it;
- break;
- case BOUNDLUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case BOUNDUTF8:
- if (s == startpos)
- tmp = '\n';
- else {
- U8 *r = reghop((U8*)s, -1);
-
- tmp = (I32)utf8_to_uv(r, s - (char*)r, 0, 0);
- }
- tmp = ((OP(c) == BOUNDUTF8 ?
- isALNUM_uni(tmp) : isALNUM_LC_uni(tmp)) != 0);
- while (s < strend) {
- if (tmp == !(OP(c) == BOUNDUTF8 ?
- swash_fetch(PL_utf8_alnum, (U8*)s) :
- isALNUM_LC_utf8((U8*)s)))
- {
- tmp = !tmp;
- if ((norun || regtry(prog, s)))
- goto got_it;
- }
- s += UTF8SKIP(s);
- }
- if ((!prog->minlen && tmp) && (norun || regtry(prog, s)))
- goto got_it;
- break;
- case NBOUNDL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case NBOUND:
- tmp = (s != startpos) ? UCHARAT(s - 1) : '\n';
- tmp = ((OP(c) == NBOUND ? isALNUM(tmp) : isALNUM_LC(tmp)) != 0);
- while (s < strend) {
- if (tmp == !(OP(c) == NBOUND ? isALNUM(*s) : isALNUM_LC(*s)))
- tmp = !tmp;
- else if ((norun || regtry(prog, s)))
- goto got_it;
- s++;
- }
- if ((!prog->minlen && !tmp) && (norun || regtry(prog, s)))
- goto got_it;
- break;
- case NBOUNDLUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case NBOUNDUTF8:
- if (s == startpos)
- tmp = '\n';
- else {
- U8 *r = reghop((U8*)s, -1);
-
- tmp = (I32)utf8_to_uv(r, s - (char*)r, 0, 0);
- }
- tmp = ((OP(c) == NBOUNDUTF8 ?
- isALNUM_uni(tmp) : isALNUM_LC_uni(tmp)) != 0);
- while (s < strend) {
- if (tmp == !(OP(c) == NBOUNDUTF8 ?
- swash_fetch(PL_utf8_alnum, (U8*)s) :
- isALNUM_LC_utf8((U8*)s)))
- tmp = !tmp;
- else if ((norun || regtry(prog, s)))
- goto got_it;
- s += UTF8SKIP(s);
- }
- if ((!prog->minlen && !tmp) && (norun || regtry(prog, s)))
- goto got_it;
- break;
- case ALNUM:
- while (s < strend) {
- if (isALNUM(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case ALNUMUTF8:
- while (s < strend) {
- if (swash_fetch(PL_utf8_alnum, (U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case ALNUML:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (isALNUM_LC(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case ALNUMLUTF8:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (isALNUM_LC_utf8((U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case NALNUM:
- while (s < strend) {
- if (!isALNUM(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case NALNUMUTF8:
- while (s < strend) {
- if (!swash_fetch(PL_utf8_alnum, (U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case NALNUML:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (!isALNUM_LC(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case NALNUMLUTF8:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (!isALNUM_LC_utf8((U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case SPACE:
- while (s < strend) {
- if (isSPACE(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case SPACEUTF8:
- while (s < strend) {
- if (*s == ' ' || swash_fetch(PL_utf8_space,(U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case SPACEL:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (isSPACE_LC(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case SPACELUTF8:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (*s == ' ' || isSPACE_LC_utf8((U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case NSPACE:
- while (s < strend) {
- if (!isSPACE(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case NSPACEUTF8:
- while (s < strend) {
- if (!(*s == ' ' || swash_fetch(PL_utf8_space,(U8*)s))) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case NSPACEL:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (!isSPACE_LC(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case NSPACELUTF8:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (!(*s == ' ' || isSPACE_LC_utf8((U8*)s))) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case DIGIT:
- while (s < strend) {
- if (isDIGIT(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case DIGITUTF8:
- while (s < strend) {
- if (swash_fetch(PL_utf8_digit,(U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case DIGITL:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (isDIGIT_LC(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case DIGITLUTF8:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (isDIGIT_LC_utf8((U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case NDIGIT:
- while (s < strend) {
- if (!isDIGIT(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case NDIGITUTF8:
- while (s < strend) {
- if (!swash_fetch(PL_utf8_digit,(U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- case NDIGITL:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (!isDIGIT_LC(*s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s++;
- }
- break;
- case NDIGITLUTF8:
- PL_reg_flags |= RF_tainted;
- while (s < strend) {
- if (!isDIGIT_LC_utf8((U8*)s)) {
- if (tmp && (norun || regtry(prog, s)))
- goto got_it;
- else
- tmp = doevery;
- }
- else
- tmp = 1;
- s += UTF8SKIP(s);
- }
- break;
- default:
- Perl_croak(aTHX_ "panic: unknown regstclass %d", (int)OP(c));
- break;
- }
- return 0;
- got_it:
- return s;
-}
-
-/*
- - regexec_flags - match a regexp against a string
- */
-I32
-Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char *strend,
- char *strbeg, I32 minend, SV *sv, void *data, U32 flags)
-/* strend: pointer to null at end of string */
-/* strbeg: real beginning of string */
-/* minend: end of match must be >=minend after stringarg. */
-/* data: May be used for some additional optimizations. */
-/* nosave: For optimizations. */
-{
- register char *s;
- register regnode *c;
- register char *startpos = stringarg;
- I32 minlen; /* must match at least this many chars */
- I32 dontbother = 0; /* how many characters not to try at end */
- /* I32 start_shift = 0; */ /* Offset of the start to find
- constant substr. */ /* CC */
- I32 end_shift = 0; /* Same for the end. */ /* CC */
- I32 scream_pos = -1; /* Internal iterator of scream. */
- char *scream_olds;
- SV* oreplsv = GvSV(PL_replgv);
-
- PL_regcc = 0;
-
- cache_re(prog);
-#ifdef DEBUGGING
- PL_regnarrate = PL_debug & 512;
-#endif
-
- /* Be paranoid... */
- if (prog == NULL || startpos == NULL) {
- Perl_croak(aTHX_ "NULL regexp parameter");
- return 0;
- }
-
- minlen = prog->minlen;
- if (strend - startpos < minlen) goto phooey;
-
- if (startpos == strbeg) /* is ^ valid at stringarg? */
- PL_regprev = '\n';
- else {
- PL_regprev = (U32)stringarg[-1];
- if (!PL_multiline && PL_regprev == '\n')
- PL_regprev = '\0'; /* force ^ to NOT match */
- }
-
- /* Check validity of program. */
- if (UCHARAT(prog->program) != REG_MAGIC) {
- Perl_croak(aTHX_ "corrupted regexp program");
- }
-
- PL_reg_flags = 0;
- PL_reg_eval_set = 0;
- PL_reg_maxiter = 0;
-
- if (prog->reganch & ROPT_UTF8)
- PL_reg_flags |= RF_utf8;
-
- /* Mark beginning of line for ^ and lookbehind. */
- PL_regbol = startpos;
- PL_bostr = strbeg;
- PL_reg_sv = sv;
-
- /* Mark end of line for $ (and such) */
- PL_regeol = strend;
-
- /* see how far we have to get to not match where we matched before */
- PL_regtill = startpos+minend;
-
- /* We start without call_cc context. */
- PL_reg_call_cc = 0;
-
- /* If there is a "must appear" string, look for it. */
- s = startpos;
-
- if (prog->reganch & ROPT_GPOS_SEEN) { /* Need to have PL_reg_ganch */
- MAGIC *mg;
-
- if (flags & REXEC_IGNOREPOS) /* Means: check only at start */
- PL_reg_ganch = startpos;
- else if (sv && SvTYPE(sv) >= SVt_PVMG
- && SvMAGIC(sv)
- && (mg = mg_find(sv, 'g')) && mg->mg_len >= 0) {
- PL_reg_ganch = strbeg + mg->mg_len; /* Defined pos() */
- if (prog->reganch & ROPT_ANCH_GPOS) {
- if (s > PL_reg_ganch)
- goto phooey;
- s = PL_reg_ganch;
- }
- }
- else /* pos() not defined */
- PL_reg_ganch = strbeg;
- }
-
- if (!(flags & REXEC_CHECKED) && prog->check_substr != Nullsv) {
- re_scream_pos_data d;
-
- d.scream_olds = &scream_olds;
- d.scream_pos = &scream_pos;
- s = re_intuit_start(prog, sv, s, strend, flags, &d);
- if (!s)
- goto phooey; /* not present */
- }
-
- DEBUG_r( if (!PL_colorset) reginitcolors() );
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- "%sMatching REx%s `%s%.60s%s%s' against `%s%.*s%s%s'\n",
- PL_colors[4],PL_colors[5],PL_colors[0],
- prog->precomp,
- PL_colors[1],
- (strlen(prog->precomp) > 60 ? "..." : ""),
- PL_colors[0],
- (int)(strend - startpos > 60 ? 60 : strend - startpos),
- startpos, PL_colors[1],
- (strend - startpos > 60 ? "..." : ""))
- );
-
- /* Simplest case: anchored match need be tried only once. */
- /* [unless only anchor is BOL and multiline is set] */
- if (prog->reganch & (ROPT_ANCH & ~ROPT_ANCH_GPOS)) {
- if (s == startpos && regtry(prog, startpos))
- goto got_it;
- else if (PL_multiline || (prog->reganch & ROPT_IMPLICIT)
- || (prog->reganch & ROPT_ANCH_MBOL)) /* XXXX SBOL? */
- {
- char *end;
-
- if (minlen)
- dontbother = minlen - 1;
- end = HOPc(strend, -dontbother) - 1;
- /* for multiline we only have to try after newlines */
- if (prog->check_substr) {
- if (s == startpos)
- goto after_try;
- while (1) {
- if (regtry(prog, s))
- goto got_it;
- after_try:
- if (s >= end)
- goto phooey;
- if (prog->reganch & RE_USE_INTUIT) {
- s = re_intuit_start(prog, sv, s + 1, strend, flags, NULL);
- if (!s)
- goto phooey;
- }
- else
- s++;
- }
- } else {
- if (s > startpos)
- s--;
- while (s < end) {
- if (*s++ == '\n') { /* don't need PL_utf8skip here */
- if (regtry(prog, s))
- goto got_it;
- }
- }
- }
- }
- goto phooey;
- } else if (prog->reganch & ROPT_ANCH_GPOS) {
- if (regtry(prog, PL_reg_ganch))
- goto got_it;
- goto phooey;
- }
-
- /* Messy cases: unanchored match. */
- if (prog->anchored_substr && prog->reganch & ROPT_SKIP) {
- /* we have /x+whatever/ */
- /* it must be a one character string (XXXX Except UTF?) */
- char ch = SvPVX(prog->anchored_substr)[0];
-#ifdef DEBUGGING
- int did_match = 0;
-#endif
-
- if (UTF) {
- while (s < strend) {
- if (*s == ch) {
- DEBUG_r( did_match = 1 );
- if (regtry(prog, s)) goto got_it;
- s += UTF8SKIP(s);
- while (s < strend && *s == ch)
- s += UTF8SKIP(s);
- }
- s += UTF8SKIP(s);
- }
- }
- else {
- while (s < strend) {
- if (*s == ch) {
- DEBUG_r( did_match = 1 );
- if (regtry(prog, s)) goto got_it;
- s++;
- while (s < strend && *s == ch)
- s++;
- }
- s++;
- }
- }
- DEBUG_r(did_match ||
- PerlIO_printf(Perl_debug_log,
- "Did not find anchored character...\n"));
- }
- /*SUPPRESS 560*/
- else if (prog->anchored_substr != Nullsv
- || (prog->float_substr != Nullsv
- && prog->float_max_offset < strend - s)) {
- SV *must = prog->anchored_substr
- ? prog->anchored_substr : prog->float_substr;
- I32 back_max =
- prog->anchored_substr ? prog->anchored_offset : prog->float_max_offset;
- I32 back_min =
- prog->anchored_substr ? prog->anchored_offset : prog->float_min_offset;
- char *last = HOPc(strend, /* Cannot start after this */
- -(I32)(CHR_SVLEN(must)
- - (SvTAIL(must) != 0) + back_min));
- char *last1; /* Last position checked before */
-#ifdef DEBUGGING
- int did_match = 0;
-#endif
-
- if (s > PL_bostr)
- last1 = HOPc(s, -1);
- else
- last1 = s - 1; /* bogus */
-
- /* XXXX check_substr already used to find `s', can optimize if
- check_substr==must. */
- scream_pos = -1;
- dontbother = end_shift;
- strend = HOPc(strend, -dontbother);
- while ( (s <= last) &&
- ((flags & REXEC_SCREAM)
- ? (s = screaminstr(sv, must, HOPc(s, back_min) - strbeg,
- end_shift, &scream_pos, 0))
- : (s = fbm_instr((unsigned char*)HOP(s, back_min),
- (unsigned char*)strend, must,
- PL_multiline ? FBMrf_MULTILINE : 0))) ) {
- DEBUG_r( did_match = 1 );
- if (HOPc(s, -back_max) > last1) {
- last1 = HOPc(s, -back_min);
- s = HOPc(s, -back_max);
- }
- else {
- char *t = (last1 >= PL_bostr) ? HOPc(last1, 1) : last1 + 1;
-
- last1 = HOPc(s, -back_min);
- s = t;
- }
- if (UTF) {
- while (s <= last1) {
- if (regtry(prog, s))
- goto got_it;
- s += UTF8SKIP(s);
- }
- }
- else {
- while (s <= last1) {
- if (regtry(prog, s))
- goto got_it;
- s++;
- }
- }
- }
- DEBUG_r(did_match ||
- PerlIO_printf(Perl_debug_log, "Did not find %s substr `%s%.*s%s'%s...\n",
- ((must == prog->anchored_substr)
- ? "anchored" : "floating"),
- PL_colors[0],
- (int)(SvCUR(must) - (SvTAIL(must)!=0)),
- SvPVX(must),
- PL_colors[1], (SvTAIL(must) ? "$" : "")));
- goto phooey;
- }
- else if ((c = prog->regstclass)) {
- if (minlen && PL_regkind[(U8)OP(prog->regstclass)] != EXACT)
- /* don't bother with what can't match */
- strend = HOPc(strend, -(minlen - 1));
- if (find_byclass(prog, c, s, strend, startpos, 0))
- goto got_it;
- DEBUG_r(PerlIO_printf(Perl_debug_log, "Contradicts stclass...\n"));
- }
- else {
- dontbother = 0;
- if (prog->float_substr != Nullsv) { /* Trim the end. */
- char *last;
-
- if (flags & REXEC_SCREAM) {
- last = screaminstr(sv, prog->float_substr, s - strbeg,
- end_shift, &scream_pos, 1); /* last one */
- if (!last)
- last = scream_olds; /* Only one occurence. */
- }
- else {
- STRLEN len;
- char *little = SvPV(prog->float_substr, len);
-
- if (SvTAIL(prog->float_substr)) {
- if (memEQ(strend - len + 1, little, len - 1))
- last = strend - len + 1;
- else if (!PL_multiline)
- last = memEQ(strend - len, little, len)
- ? strend - len : Nullch;
- else
- goto find_last;
- } else {
- find_last:
- if (len)
- last = rninstr(s, strend, little, little + len);
- else
- last = strend; /* matching `$' */
- }
- }
- if (last == NULL) {
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- "%sCan't trim the tail, match fails (should not happen)%s\n",
- PL_colors[4],PL_colors[5]));
- goto phooey; /* Should not happen! */
- }
- dontbother = strend - last + prog->float_min_offset;
- }
- if (minlen && (dontbother < minlen))
- dontbother = minlen - 1;
- strend -= dontbother; /* this one's always in bytes! */
- /* We don't know much -- general case. */
- if (UTF) {
- for (;;) {
- if (regtry(prog, s))
- goto got_it;
- if (s >= strend)
- break;
- s += UTF8SKIP(s);
- };
- }
- else {
- do {
- if (regtry(prog, s))
- goto got_it;
- } while (s++ < strend);
- }
- }
-
- /* Failure. */
- goto phooey;
-
-got_it:
- RX_MATCH_TAINTED_set(prog, PL_reg_flags & RF_tainted);
-
- if (PL_reg_eval_set) {
- /* Preserve the current value of $^R */
- if (oreplsv != GvSV(PL_replgv))
- sv_setsv(oreplsv, GvSV(PL_replgv));/* So that when GvSV(replgv) is
- restored, the value remains
- the same. */
- restore_pos(aTHXo_ 0);
- }
-
- /* make sure $`, $&, $', and $digit will work later */
- if ( !(flags & REXEC_NOT_FIRST) ) {
- if (RX_MATCH_COPIED(prog)) {
- Safefree(prog->subbeg);
- RX_MATCH_COPIED_off(prog);
- }
- if (flags & REXEC_COPY_STR) {
- I32 i = PL_regeol - startpos + (stringarg - strbeg);
-
- s = savepvn(strbeg, i);
- prog->subbeg = s;
- prog->sublen = i;
- RX_MATCH_COPIED_on(prog);
- }
- else {
- prog->subbeg = strbeg;
- prog->sublen = PL_regeol - strbeg; /* strend may have been modified */
- }
- }
-
- return 1;
-
-phooey:
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%sMatch failed%s\n",
- PL_colors[4],PL_colors[5]));
- if (PL_reg_eval_set)
- restore_pos(aTHXo_ 0);
- return 0;
-}
-
-/*
- - regtry - try match at specific point
- */
-STATIC I32 /* 0 failure, 1 success */
-S_regtry(pTHX_ regexp *prog, char *startpos)
-{
- register I32 i;
- register I32 *sp;
- register I32 *ep;
- CHECKPOINT lastcp;
-
-#ifdef DEBUGGING
- PL_regindent = 0; /* XXXX Not good when matches are reenterable... */
-#endif
- if ((prog->reganch & ROPT_EVAL_SEEN) && !PL_reg_eval_set) {
- MAGIC *mg;
-
- PL_reg_eval_set = RS_init;
- DEBUG_r(DEBUG_s(
- PerlIO_printf(Perl_debug_log, " setting stack tmpbase at %"IVdf"\n",
- (IV)(PL_stack_sp - PL_stack_base));
- ));
- SAVEI32(cxstack[cxstack_ix].blk_oldsp);
- cxstack[cxstack_ix].blk_oldsp = PL_stack_sp - PL_stack_base;
- /* Otherwise OP_NEXTSTATE will free whatever on stack now. */
- SAVETMPS;
- /* Apparently this is not needed, judging by wantarray. */
- /* SAVEI8(cxstack[cxstack_ix].blk_gimme);
- cxstack[cxstack_ix].blk_gimme = G_SCALAR; */
-
- if (PL_reg_sv) {
- /* Make $_ available to executed code. */
- if (PL_reg_sv != DEFSV) {
- /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
- SAVESPTR(DEFSV);
- DEFSV = PL_reg_sv;
- }
-
- if (!(SvTYPE(PL_reg_sv) >= SVt_PVMG && SvMAGIC(PL_reg_sv)
- && (mg = mg_find(PL_reg_sv, 'g')))) {
- /* prepare for quick setting of pos */
- sv_magic(PL_reg_sv, (SV*)0, 'g', Nullch, 0);
- mg = mg_find(PL_reg_sv, 'g');
- mg->mg_len = -1;
- }
- PL_reg_magic = mg;
- PL_reg_oldpos = mg->mg_len;
- SAVEDESTRUCTOR_X(restore_pos, 0);
- }
- if (!PL_reg_curpm)
- Newz(22,PL_reg_curpm, 1, PMOP);
- PL_reg_curpm->op_pmregexp = prog;
- PL_reg_oldcurpm = PL_curpm;
- PL_curpm = PL_reg_curpm;
- if (RX_MATCH_COPIED(prog)) {
- /* Here is a serious problem: we cannot rewrite subbeg,
- since it may be needed if this match fails. Thus
- $` inside (?{}) could fail... */
- PL_reg_oldsaved = prog->subbeg;
- PL_reg_oldsavedlen = prog->sublen;
- RX_MATCH_COPIED_off(prog);
- }
- else
- PL_reg_oldsaved = Nullch;
- prog->subbeg = PL_bostr;
- prog->sublen = PL_regeol - PL_bostr; /* strend may have been modified */
- }
- prog->startp[0] = startpos - PL_bostr;
- PL_reginput = startpos;
- PL_regstartp = prog->startp;
- PL_regendp = prog->endp;
- PL_reglastparen = &prog->lastparen;
- prog->lastparen = 0;
- PL_regsize = 0;
- DEBUG_r(PL_reg_starttry = startpos);
- if (PL_reg_start_tmpl <= prog->nparens) {
- PL_reg_start_tmpl = prog->nparens*3/2 + 3;
- if(PL_reg_start_tmp)
- Renew(PL_reg_start_tmp, PL_reg_start_tmpl, char*);
- else
- New(22,PL_reg_start_tmp, PL_reg_start_tmpl, char*);
- }
-
- /* XXXX What this code is doing here?!!! There should be no need
- to do this again and again, PL_reglastparen should take care of
- this! --ilya*/
-
- /* Tests pat.t#187 and split.t#{13,14} seem to depend on this code.
- * Actually, the code in regcppop() (which Ilya may be meaning by
- * PL_reglastparen), is not needed at all by the test suite
- * (op/regexp, op/pat, op/split), but that code is needed, oddly
- * enough, for building DynaLoader, or otherwise this
- * "Error: '*' not in typemap in DynaLoader.xs, line 164"
- * will happen. Meanwhile, this code *is* needed for the
- * above-mentioned test suite tests to succeed. The common theme
- * on those tests seems to be returning null fields from matches.
- * --jhi */
-#if 1
- sp = prog->startp;
- ep = prog->endp;
- if (prog->nparens) {
- for (i = prog->nparens; i > *PL_reglastparen; i--) {
- *++sp = -1;
- *++ep = -1;
- }
- }
-#endif
- REGCP_SET(lastcp);
- if (regmatch(prog->program + 1)) {
- prog->endp[0] = PL_reginput - PL_bostr;
- return 1;
- }
- REGCP_UNWIND(lastcp);
- return 0;
-}
-
-#define RE_UNWIND_BRANCH 1
-#define RE_UNWIND_BRANCHJ 2
-
-union re_unwind_t;
-
-typedef struct { /* XX: makes sense to enlarge it... */
- I32 type;
- I32 prev;
- CHECKPOINT lastcp;
-} re_unwind_generic_t;
-
-typedef struct {
- I32 type;
- I32 prev;
- CHECKPOINT lastcp;
- I32 lastparen;
- regnode *next;
- char *locinput;
- I32 nextchr;
-#ifdef DEBUGGING
- int regindent;
-#endif
-} re_unwind_branch_t;
-
-typedef union re_unwind_t {
- I32 type;
- re_unwind_generic_t generic;
- re_unwind_branch_t branch;
-} re_unwind_t;
-
-/*
- - 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 I32 /* 0 failure, 1 success */
-S_regmatch(pTHX_ regnode *prog)
-{
- register regnode *scan; /* Current node. */
- regnode *next; /* Next node. */
- regnode *inner; /* Next node in internal branch. */
- register I32 nextchr; /* renamed nextchr - nextchar colides with
- function of same name */
- register I32 n; /* no or next */
- register I32 ln; /* len or last */
- register char *s; /* operand or save */
- register char *locinput = PL_reginput;
- register I32 c1, c2, paren; /* case fold search, parenth */
- int minmod = 0, sw = 0, logical = 0;
- I32 unwind = 0;
- I32 firstcp = PL_savestack_ix;
-
-#ifdef DEBUGGING
- PL_regindent++;
-#endif
-
- /* Note that nextchr is a byte even in UTF */
- nextchr = UCHARAT(locinput);
- scan = prog;
- while (scan != NULL) {
-#define sayNO_L (logical ? (logical = 0, sw = 0, goto cont) : sayNO)
-#if 1
-# define sayYES goto yes
-# define sayNO goto no
-# define sayYES_FINAL goto yes_final
-# define sayYES_LOUD goto yes_loud
-# define sayNO_FINAL goto no_final
-# define sayNO_SILENT goto do_no
-# define saySAME(x) if (x) goto yes; else goto no
-# define REPORT_CODE_OFF 24
-#else
-# define sayYES return 1
-# define sayNO return 0
-# define sayYES_FINAL return 1
-# define sayYES_LOUD return 1
-# define sayNO_FINAL return 0
-# define sayNO_SILENT return 0
-# define saySAME(x) return x
-#endif
- DEBUG_r( {
- SV *prop = sv_newmortal();
- int docolor = *PL_colors[0];
- int taill = (docolor ? 10 : 7); /* 3 chars for "> <" */
- int l = (PL_regeol - locinput > taill ? taill : PL_regeol - locinput);
- /* The part of the string before starttry has one color
- (pref0_len chars), between starttry and current
- position another one (pref_len - pref0_len chars),
- after the current position the third one.
- We assume that pref0_len <= pref_len, otherwise we
- decrease pref0_len. */
- int pref_len = (locinput - PL_bostr > (5 + taill) - l
- ? (5 + taill) - l : locinput - PL_bostr);
- int pref0_len = pref_len - (locinput - PL_reg_starttry);
-
- if (l + pref_len < (5 + taill) && l < PL_regeol - locinput)
- l = ( PL_regeol - locinput > (5 + taill) - pref_len
- ? (5 + taill) - pref_len : PL_regeol - locinput);
- if (pref0_len < 0)
- pref0_len = 0;
- if (pref0_len > pref_len)
- pref0_len = pref_len;
- regprop(prop, scan);
- PerlIO_printf(Perl_debug_log,
- "%4"IVdf" <%s%.*s%s%s%.*s%s%s%s%.*s%s>%*s|%3"IVdf":%*s%s\n",
- (IV)(locinput - PL_bostr),
- PL_colors[4], pref0_len,
- locinput - pref_len, PL_colors[5],
- PL_colors[2], pref_len - pref0_len,
- locinput - pref_len + pref0_len, PL_colors[3],
- (docolor ? "" : "> <"),
- PL_colors[0], l, locinput, PL_colors[1],
- 15 - l - pref_len + 1,
- "",
- (IV)(scan - PL_regprogram), PL_regindent*2, "",
- SvPVX(prop));
- } );
-
- next = scan + NEXT_OFF(scan);
- if (next == scan)
- next = NULL;
-
- switch (OP(scan)) {
- case BOL:
- if (locinput == PL_bostr
- ? PL_regprev == '\n'
- : (PL_multiline &&
- (nextchr || locinput < PL_regeol) && locinput[-1] == '\n') )
- {
- /* regtill = regbol; */
- break;
- }
- sayNO;
- case MBOL:
- if (locinput == PL_bostr
- ? PL_regprev == '\n'
- : ((nextchr || locinput < PL_regeol) && locinput[-1] == '\n') )
- {
- break;
- }
- sayNO;
- case SBOL:
- if (locinput == PL_bostr)
- break;
- sayNO;
- case GPOS:
- if (locinput == PL_reg_ganch)
- break;
- sayNO;
- case EOL:
- if (PL_multiline)
- goto meol;
- else
- goto seol;
- case MEOL:
- meol:
- if ((nextchr || locinput < PL_regeol) && nextchr != '\n')
- sayNO;
- break;
- case SEOL:
- seol:
- if ((nextchr || locinput < PL_regeol) && nextchr != '\n')
- sayNO;
- if (PL_regeol - locinput > 1)
- sayNO;
- break;
- case EOS:
- if (PL_regeol != locinput)
- sayNO;
- break;
- case SANYUTF8:
- if (nextchr & 0x80) {
- locinput += PL_utf8skip[nextchr];
- if (locinput > PL_regeol)
- sayNO;
- nextchr = UCHARAT(locinput);
- break;
- }
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case SANY:
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case ANYUTF8:
- if (nextchr & 0x80) {
- locinput += PL_utf8skip[nextchr];
- if (locinput > PL_regeol)
- sayNO;
- nextchr = UCHARAT(locinput);
- break;
- }
- if ((!nextchr && locinput >= PL_regeol) || nextchr == '\n')
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case REG_ANY:
- if ((!nextchr && locinput >= PL_regeol) || nextchr == '\n')
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case EXACT:
- s = STRING(scan);
- ln = STR_LEN(scan);
- /* Inline the first character, for speed. */
- if (UCHARAT(s) != nextchr)
- sayNO;
- if (PL_regeol - locinput < ln)
- sayNO;
- if (ln > 1 && memNE(s, locinput, ln))
- sayNO;
- locinput += ln;
- nextchr = UCHARAT(locinput);
- break;
- case EXACTFL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case EXACTF:
- s = STRING(scan);
- ln = STR_LEN(scan);
-
- if (UTF) {
- char *l = locinput;
- char *e = s + ln;
- c1 = OP(scan) == EXACTF;
- while (s < e) {
- if (l >= PL_regeol)
- sayNO;
- if (utf8_to_uv((U8*)s, e - s, 0, 0) !=
- (c1 ?
- toLOWER_utf8((U8*)l) :
- toLOWER_LC_utf8((U8*)l)))
- {
- sayNO;
- }
- s += UTF8SKIP(s);
- l += UTF8SKIP(l);
- }
- locinput = l;
- nextchr = UCHARAT(locinput);
- break;
- }
-
- /* Inline the first character, for speed. */
- if (UCHARAT(s) != nextchr &&
- UCHARAT(s) != ((OP(scan) == EXACTF)
- ? PL_fold : PL_fold_locale)[nextchr])
- sayNO;
- if (PL_regeol - locinput < ln)
- sayNO;
- if (ln > 1 && (OP(scan) == EXACTF
- ? ibcmp(s, locinput, ln)
- : ibcmp_locale(s, locinput, ln)))
- sayNO;
- locinput += ln;
- nextchr = UCHARAT(locinput);
- break;
- case ANYOFUTF8:
- if (!REGINCLASSUTF8(scan, (U8*)locinput))
- sayNO;
- if (locinput >= PL_regeol)
- sayNO;
- locinput += PL_utf8skip[nextchr];
- nextchr = UCHARAT(locinput);
- break;
- case ANYOF:
- if (nextchr < 0)
- nextchr = UCHARAT(locinput);
- if (!REGINCLASS(scan, nextchr))
- sayNO;
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case ALNUML:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case ALNUM:
- if (!nextchr)
- sayNO;
- if (!(OP(scan) == ALNUM
- ? isALNUM(nextchr) : isALNUM_LC(nextchr)))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case ALNUMLUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case ALNUMUTF8:
- if (!nextchr)
- sayNO;
- if (nextchr & 0x80) {
- if (!(OP(scan) == ALNUMUTF8
- ? swash_fetch(PL_utf8_alnum, (U8*)locinput)
- : isALNUM_LC_utf8((U8*)locinput)))
- {
- sayNO;
- }
- locinput += PL_utf8skip[nextchr];
- nextchr = UCHARAT(locinput);
- break;
- }
- if (!(OP(scan) == ALNUMUTF8
- ? isALNUM(nextchr) : isALNUM_LC(nextchr)))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case NALNUML:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case NALNUM:
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- if (OP(scan) == NALNUM
- ? isALNUM(nextchr) : isALNUM_LC(nextchr))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case NALNUMLUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case NALNUMUTF8:
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- if (nextchr & 0x80) {
- if (OP(scan) == NALNUMUTF8
- ? swash_fetch(PL_utf8_alnum, (U8*)locinput)
- : isALNUM_LC_utf8((U8*)locinput))
- {
- sayNO;
- }
- locinput += PL_utf8skip[nextchr];
- nextchr = UCHARAT(locinput);
- break;
- }
- if (OP(scan) == NALNUMUTF8
- ? isALNUM(nextchr) : isALNUM_LC(nextchr))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case BOUNDL:
- case NBOUNDL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case BOUND:
- case NBOUND:
- /* was last char in word? */
- ln = (locinput != PL_regbol) ? UCHARAT(locinput - 1) : PL_regprev;
- if (OP(scan) == BOUND || OP(scan) == NBOUND) {
- ln = isALNUM(ln);
- n = isALNUM(nextchr);
- }
- else {
- ln = isALNUM_LC(ln);
- n = isALNUM_LC(nextchr);
- }
- if (((!ln) == (!n)) == (OP(scan) == BOUND || OP(scan) == BOUNDL))
- sayNO;
- break;
- case BOUNDLUTF8:
- case NBOUNDLUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case BOUNDUTF8:
- case NBOUNDUTF8:
- /* was last char in word? */
- if (locinput == PL_regbol)
- ln = PL_regprev;
- else {
- U8 *r = reghop((U8*)locinput, -1);
-
- ln = utf8_to_uv(r, s - (char*)r, 0, 0);
- }
- if (OP(scan) == BOUNDUTF8 || OP(scan) == NBOUNDUTF8) {
- ln = isALNUM_uni(ln);
- n = swash_fetch(PL_utf8_alnum, (U8*)locinput);
- }
- else {
- ln = isALNUM_LC_uni(ln);
- n = isALNUM_LC_utf8((U8*)locinput);
- }
- if (((!ln) == (!n)) == (OP(scan) == BOUNDUTF8 || OP(scan) == BOUNDLUTF8))
- sayNO;
- break;
- case SPACEL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case SPACE:
- if (!nextchr)
- sayNO;
- if (!(OP(scan) == SPACE
- ? isSPACE(nextchr) : isSPACE_LC(nextchr)))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case SPACELUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case SPACEUTF8:
- if (!nextchr)
- sayNO;
- if (nextchr & 0x80) {
- if (!(OP(scan) == SPACEUTF8
- ? swash_fetch(PL_utf8_space, (U8*)locinput)
- : isSPACE_LC_utf8((U8*)locinput)))
- {
- sayNO;
- }
- locinput += PL_utf8skip[nextchr];
- nextchr = UCHARAT(locinput);
- break;
- }
- if (!(OP(scan) == SPACEUTF8
- ? isSPACE(nextchr) : isSPACE_LC(nextchr)))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case NSPACEL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case NSPACE:
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- if (OP(scan) == NSPACE
- ? isSPACE(nextchr) : isSPACE_LC(nextchr))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case NSPACELUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case NSPACEUTF8:
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- if (nextchr & 0x80) {
- if (OP(scan) == NSPACEUTF8
- ? swash_fetch(PL_utf8_space, (U8*)locinput)
- : isSPACE_LC_utf8((U8*)locinput))
- {
- sayNO;
- }
- locinput += PL_utf8skip[nextchr];
- nextchr = UCHARAT(locinput);
- break;
- }
- if (OP(scan) == NSPACEUTF8
- ? isSPACE(nextchr) : isSPACE_LC(nextchr))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case DIGITL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case DIGIT:
- if (!nextchr)
- sayNO;
- if (!(OP(scan) == DIGIT
- ? isDIGIT(nextchr) : isDIGIT_LC(nextchr)))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case DIGITLUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case DIGITUTF8:
- if (!nextchr)
- sayNO;
- if (nextchr & 0x80) {
- if (!(OP(scan) == DIGITUTF8
- ? swash_fetch(PL_utf8_digit, (U8*)locinput)
- : isDIGIT_LC_utf8((U8*)locinput)))
- {
- sayNO;
- }
- locinput += PL_utf8skip[nextchr];
- nextchr = UCHARAT(locinput);
- break;
- }
- if (!(OP(scan) == DIGITUTF8
- ? isDIGIT(nextchr) : isDIGIT_LC(nextchr)))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case NDIGITL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case NDIGIT:
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- if (OP(scan) == NDIGIT
- ? isDIGIT(nextchr) : isDIGIT_LC(nextchr))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case NDIGITLUTF8:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case NDIGITUTF8:
- if (!nextchr && locinput >= PL_regeol)
- sayNO;
- if (nextchr & 0x80) {
- if (OP(scan) == NDIGITUTF8
- ? swash_fetch(PL_utf8_digit, (U8*)locinput)
- : isDIGIT_LC_utf8((U8*)locinput))
- {
- sayNO;
- }
- locinput += PL_utf8skip[nextchr];
- nextchr = UCHARAT(locinput);
- break;
- }
- if (OP(scan) == NDIGITUTF8
- ? isDIGIT(nextchr) : isDIGIT_LC(nextchr))
- sayNO;
- nextchr = UCHARAT(++locinput);
- break;
- case CLUMP:
- if (locinput >= PL_regeol || swash_fetch(PL_utf8_mark,(U8*)locinput))
- sayNO;
- locinput += PL_utf8skip[nextchr];
- while (locinput < PL_regeol && swash_fetch(PL_utf8_mark,(U8*)locinput))
- locinput += UTF8SKIP(locinput);
- if (locinput > PL_regeol)
- sayNO;
- nextchr = UCHARAT(locinput);
- break;
- case REFFL:
- PL_reg_flags |= RF_tainted;
- /* FALL THROUGH */
- case REF:
- case REFF:
- n = ARG(scan); /* which paren pair */
- ln = PL_regstartp[n];
- PL_reg_leftiter = PL_reg_maxiter; /* Void cache */
- if (*PL_reglastparen < n || ln == -1)
- sayNO; /* Do not match unless seen CLOSEn. */
- if (ln == PL_regendp[n])
- break;
-
- s = PL_bostr + ln;
- if (UTF && OP(scan) != REF) { /* REF can do byte comparison */
- char *l = locinput;
- char *e = PL_bostr + PL_regendp[n];
- /*
- * Note that we can't do the "other character" lookup trick as
- * in the 8-bit case (no pun intended) because in Unicode we
- * have to map both upper and title case to lower case.
- */
- if (OP(scan) == REFF) {
- while (s < e) {
- if (l >= PL_regeol)
- sayNO;
- if (toLOWER_utf8((U8*)s) != toLOWER_utf8((U8*)l))
- sayNO;
- s += UTF8SKIP(s);
- l += UTF8SKIP(l);
- }
- }
- else {
- while (s < e) {
- if (l >= PL_regeol)
- sayNO;
- if (toLOWER_LC_utf8((U8*)s) != toLOWER_LC_utf8((U8*)l))
- sayNO;
- s += UTF8SKIP(s);
- l += UTF8SKIP(l);
- }
- }
- locinput = l;
- nextchr = UCHARAT(locinput);
- break;
- }
-
- /* Inline the first character, for speed. */
- if (UCHARAT(s) != nextchr &&
- (OP(scan) == REF ||
- (UCHARAT(s) != ((OP(scan) == REFF
- ? PL_fold : PL_fold_locale)[nextchr]))))
- sayNO;
- ln = PL_regendp[n] - ln;
- if (locinput + ln > PL_regeol)
- sayNO;
- if (ln > 1 && (OP(scan) == REF
- ? memNE(s, locinput, ln)
- : (OP(scan) == REFF
- ? ibcmp(s, locinput, ln)
- : ibcmp_locale(s, locinput, ln))))
- sayNO;
- locinput += ln;
- nextchr = UCHARAT(locinput);
- break;
-
- case NOTHING:
- case TAIL:
- break;
- case BACK:
- break;
- case EVAL:
- {
- dSP;
- OP_4tree *oop = PL_op;
- COP *ocurcop = PL_curcop;
- SV **ocurpad = PL_curpad;
- SV *ret;
-
- n = ARG(scan);
- PL_op = (OP_4tree*)PL_regdata->data[n];
- DEBUG_r( PerlIO_printf(Perl_debug_log, " re_eval 0x%"UVxf"\n", PTR2UV(PL_op)) );
- PL_curpad = AvARRAY((AV*)PL_regdata->data[n + 2]);
- PL_regendp[0] = PL_reg_magic->mg_len = locinput - PL_bostr;
-
- CALLRUNOPS(aTHX); /* Scalar context. */
- SPAGAIN;
- ret = POPs;
- PUTBACK;
-
- PL_op = oop;
- PL_curpad = ocurpad;
- PL_curcop = ocurcop;
- if (logical) {
- if (logical == 2) { /* Postponed subexpression. */
- regexp *re;
- MAGIC *mg = Null(MAGIC*);
- re_cc_state state;
- CHECKPOINT cp, lastcp;
-
- if(SvROK(ret) || SvRMAGICAL(ret)) {
- SV *sv = SvROK(ret) ? SvRV(ret) : ret;
-
- if(SvMAGICAL(sv))
- mg = mg_find(sv, 'r');
- }
- if (mg) {
- re = (regexp *)mg->mg_obj;
- (void)ReREFCNT_inc(re);
- }
- else {
- STRLEN len;
- char *t = SvPV(ret, len);
- PMOP pm;
- char *oprecomp = PL_regprecomp;
- I32 osize = PL_regsize;
- I32 onpar = PL_regnpar;
-
- pm.op_pmflags = 0;
- pm.op_pmdynflags = (UTF||DO_UTF8(ret) ? PMdf_UTF8 : 0);
- re = CALLREGCOMP(aTHX_ t, t + len, &pm);
- if (!(SvFLAGS(ret)
- & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)))
- sv_magic(ret,(SV*)ReREFCNT_inc(re),'r',0,0);
- PL_regprecomp = oprecomp;
- PL_regsize = osize;
- PL_regnpar = onpar;
- }
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "Entering embedded `%s%.60s%s%s'\n",
- PL_colors[0],
- re->precomp,
- PL_colors[1],
- (strlen(re->precomp) > 60 ? "..." : ""))
- );
- state.node = next;
- state.prev = PL_reg_call_cc;
- state.cc = PL_regcc;
- state.re = PL_reg_re;
-
- PL_regcc = 0;
-
- cp = regcppush(0); /* Save *all* the positions. */
- REGCP_SET(lastcp);
- cache_re(re);
- state.ss = PL_savestack_ix;
- *PL_reglastparen = 0;
- PL_reg_call_cc = &state;
- PL_reginput = locinput;
-
- /* XXXX This is too dramatic a measure... */
- PL_reg_maxiter = 0;
-
- if (regmatch(re->program + 1)) {
- /* Even though we succeeded, we need to restore
- global variables, since we may be wrapped inside
- SUSPEND, thus the match may be not finished yet. */
-
- /* XXXX Do this only if SUSPENDed? */
- PL_reg_call_cc = state.prev;
- PL_regcc = state.cc;
- PL_reg_re = state.re;
- cache_re(PL_reg_re);
-
- /* XXXX This is too dramatic a measure... */
- PL_reg_maxiter = 0;
-
- /* These are needed even if not SUSPEND. */
- ReREFCNT_dec(re);
- regcpblow(cp);
- sayYES;
- }
- ReREFCNT_dec(re);
- REGCP_UNWIND(lastcp);
- regcppop();
- PL_reg_call_cc = state.prev;
- PL_regcc = state.cc;
- PL_reg_re = state.re;
- cache_re(PL_reg_re);
-
- /* XXXX This is too dramatic a measure... */
- PL_reg_maxiter = 0;
-
- sayNO;
- }
- sw = SvTRUE(ret);
- logical = 0;
- }
- else
- sv_setsv(save_scalar(PL_replgv), ret);
- break;
- }
- case OPEN:
- n = ARG(scan); /* which paren pair */
- PL_reg_start_tmp[n] = locinput;
- if (n > PL_regsize)
- PL_regsize = n;
- break;
- case CLOSE:
- n = ARG(scan); /* which paren pair */
- PL_regstartp[n] = PL_reg_start_tmp[n] - PL_bostr;
- PL_regendp[n] = locinput - PL_bostr;
- if (n > *PL_reglastparen)
- *PL_reglastparen = n;
- break;
- case GROUPP:
- n = ARG(scan); /* which paren pair */
- sw = (*PL_reglastparen >= n && PL_regendp[n] != -1);
- break;
- case IFTHEN:
- PL_reg_leftiter = PL_reg_maxiter; /* Void cache */
- if (sw)
- next = NEXTOPER(NEXTOPER(scan));
- else {
- next = scan + ARG(scan);
- if (OP(next) == IFTHEN) /* Fake one. */
- next = NEXTOPER(NEXTOPER(next));
- }
- break;
- case LOGICAL:
- logical = scan->flags;
- break;
-/*******************************************************************
- PL_regcc contains infoblock about the innermost (...)* loop, and
- a pointer to the next outer infoblock.
-
- Here is how Y(A)*Z is processed (if it is compiled into CURLYX/WHILEM):
-
- 1) After matching X, regnode for CURLYX is processed;
-
- 2) This regnode creates infoblock on the stack, and calls
- regmatch() recursively with the starting point at WHILEM node;
-
- 3) Each hit of WHILEM node tries to match A and Z (in the order
- depending on the current iteration, min/max of {min,max} and
- greediness). The information about where are nodes for "A"
- and "Z" is read from the infoblock, as is info on how many times "A"
- was already matched, and greediness.
-
- 4) After A matches, the same WHILEM node is hit again.
-
- 5) Each time WHILEM is hit, PL_regcc is the infoblock created by CURLYX
- of the same pair. Thus when WHILEM tries to match Z, it temporarily
- resets PL_regcc, since this Y(A)*Z can be a part of some other loop:
- as in (Y(A)*Z)*. If Z matches, the automaton will hit the WHILEM node
- of the external loop.
-
- Currently present infoblocks form a tree with a stem formed by PL_curcc
- and whatever it mentions via ->next, and additional attached trees
- corresponding to temporarily unset infoblocks as in "5" above.
-
- In the following picture infoblocks for outer loop of
- (Y(A)*?Z)*?T are denoted O, for inner I. NULL starting block
- is denoted by x. The matched string is YAAZYAZT. Temporarily postponed
- infoblocks are drawn below the "reset" infoblock.
-
- In fact in the picture below we do not show failed matches for Z and T
- by WHILEM blocks. [We illustrate minimal matches, since for them it is
- more obvious *why* one needs to *temporary* unset infoblocks.]
-
- Matched REx position InfoBlocks Comment
- (Y(A)*?Z)*?T x
- Y(A)*?Z)*?T x <- O
- Y (A)*?Z)*?T x <- O
- Y A)*?Z)*?T x <- O <- I
- YA )*?Z)*?T x <- O <- I
- YA A)*?Z)*?T x <- O <- I
- YAA )*?Z)*?T x <- O <- I
- YAA Z)*?T x <- O # Temporary unset I
- I
-
- YAAZ Y(A)*?Z)*?T x <- O
- I
-
- YAAZY (A)*?Z)*?T x <- O
- I
-
- YAAZY A)*?Z)*?T x <- O <- I
- I
-
- YAAZYA )*?Z)*?T x <- O <- I
- I
-
- YAAZYA Z)*?T x <- O # Temporary unset I
- I,I
-
- YAAZYAZ )*?T x <- O
- I,I
-
- YAAZYAZ T x # Temporary unset O
- O
- I,I
-
- YAAZYAZT x
- O
- I,I
- *******************************************************************/
- case CURLYX: {
- CURCUR cc;
- CHECKPOINT cp = PL_savestack_ix;
- /* No need to save/restore up to this paren */
- I32 parenfloor = scan->flags;
-
- if (OP(PREVOPER(next)) == NOTHING) /* LONGJMP */
- next += ARG(next);
- cc.oldcc = PL_regcc;
- PL_regcc = &cc;
- /* XXXX Probably it is better to teach regpush to support
- parenfloor > PL_regsize... */
- if (parenfloor > *PL_reglastparen)
- parenfloor = *PL_reglastparen; /* Pessimization... */
- cc.parenfloor = parenfloor;
- cc.cur = -1;
- cc.min = ARG1(scan);
- cc.max = ARG2(scan);
- cc.scan = NEXTOPER(scan) + EXTRA_STEP_2ARGS;
- cc.next = next;
- cc.minmod = minmod;
- cc.lastloc = 0;
- PL_reginput = locinput;
- n = regmatch(PREVOPER(next)); /* start on the WHILEM */
- regcpblow(cp);
- PL_regcc = cc.oldcc;
- saySAME(n);
- }
- /* NOT REACHED */
- case WHILEM: {
- /*
- * This is really hard to understand, because after we match
- * what we're trying to match, we must make sure the rest of
- * the REx is going to match for sure, and to do that we have
- * to go back UP the parse tree by recursing ever deeper. And
- * if it fails, we have to reset our parent's current state
- * that we can try again after backing off.
- */
-
- CHECKPOINT cp, lastcp;
- CURCUR* cc = PL_regcc;
- char *lastloc = cc->lastloc; /* Detection of 0-len. */
-
- n = cc->cur + 1; /* how many we know we matched */
- PL_reginput = locinput;
-
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s %ld out of %ld..%ld cc=%lx\n",
- REPORT_CODE_OFF+PL_regindent*2, "",
- (long)n, (long)cc->min,
- (long)cc->max, (long)cc)
- );
-
- /* If degenerate scan matches "", assume scan done. */
-
- if (locinput == cc->lastloc && n >= cc->min) {
- PL_regcc = cc->oldcc;
- if (PL_regcc)
- ln = PL_regcc->cur;
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s empty match detected, try continuation...\n",
- REPORT_CODE_OFF+PL_regindent*2, "")
- );
- if (regmatch(cc->next))
- sayYES;
- if (PL_regcc)
- PL_regcc->cur = ln;
- PL_regcc = cc;
- sayNO;
- }
-
- /* First just match a string of min scans. */
-
- if (n < cc->min) {
- cc->cur = n;
- cc->lastloc = locinput;
- if (regmatch(cc->scan))
- sayYES;
- cc->cur = n - 1;
- cc->lastloc = lastloc;
- sayNO;
- }
-
- if (scan->flags) {
- /* Check whether we already were at this position.
- Postpone detection until we know the match is not
- *that* much linear. */
- if (!PL_reg_maxiter) {
- PL_reg_maxiter = (PL_regeol - PL_bostr + 1) * (scan->flags>>4);
- PL_reg_leftiter = PL_reg_maxiter;
- }
- if (PL_reg_leftiter-- == 0) {
- I32 size = (PL_reg_maxiter + 7)/8;
- if (PL_reg_poscache) {
- if (PL_reg_poscache_size < size) {
- Renew(PL_reg_poscache, size, char);
- PL_reg_poscache_size = size;
- }
- Zero(PL_reg_poscache, size, char);
- }
- else {
- PL_reg_poscache_size = size;
- Newz(29, PL_reg_poscache, size, char);
- }
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%sDetected a super-linear match, switching on caching%s...\n",
- PL_colors[4], PL_colors[5])
- );
- }
- if (PL_reg_leftiter < 0) {
- I32 o = locinput - PL_bostr, b;
-
- o = (scan->flags & 0xf) - 1 + o * (scan->flags>>4);
- b = o % 8;
- o /= 8;
- if (PL_reg_poscache[o] & (1<<b)) {
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s already tried at this position...\n",
- REPORT_CODE_OFF+PL_regindent*2, "")
- );
- sayNO_SILENT;
- }
- PL_reg_poscache[o] |= (1<<b);
- }
- }
-
- /* Prefer next over scan for minimal matching. */
-
- if (cc->minmod) {
- PL_regcc = cc->oldcc;
- if (PL_regcc)
- ln = PL_regcc->cur;
- cp = regcppush(cc->parenfloor);
- REGCP_SET(lastcp);
- if (regmatch(cc->next)) {
- regcpblow(cp);
- sayYES; /* All done. */
- }
- REGCP_UNWIND(lastcp);
- regcppop();
- if (PL_regcc)
- PL_regcc->cur = ln;
- PL_regcc = cc;
-
- if (n >= cc->max) { /* Maximum greed exceeded? */
- if (ckWARN(WARN_REGEXP) && n >= REG_INFTY
- && !(PL_reg_flags & RF_warned)) {
- PL_reg_flags |= RF_warned;
- Perl_warner(aTHX_ WARN_REGEXP, "%s limit (%d) exceeded",
- "Complex regular subexpression recursion",
- REG_INFTY - 1);
- }
- sayNO;
- }
-
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s trying longer...\n",
- REPORT_CODE_OFF+PL_regindent*2, "")
- );
- /* Try scanning more and see if it helps. */
- PL_reginput = locinput;
- cc->cur = n;
- cc->lastloc = locinput;
- cp = regcppush(cc->parenfloor);
- REGCP_SET(lastcp);
- if (regmatch(cc->scan)) {
- regcpblow(cp);
- sayYES;
- }
- REGCP_UNWIND(lastcp);
- regcppop();
- cc->cur = n - 1;
- cc->lastloc = lastloc;
- sayNO;
- }
-
- /* Prefer scan over next for maximal matching. */
-
- if (n < cc->max) { /* More greed allowed? */
- cp = regcppush(cc->parenfloor);
- cc->cur = n;
- cc->lastloc = locinput;
- REGCP_SET(lastcp);
- if (regmatch(cc->scan)) {
- regcpblow(cp);
- sayYES;
- }
- REGCP_UNWIND(lastcp);
- regcppop(); /* Restore some previous $<digit>s? */
- PL_reginput = locinput;
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s failed, try continuation...\n",
- REPORT_CODE_OFF+PL_regindent*2, "")
- );
- }
- if (ckWARN(WARN_REGEXP) && n >= REG_INFTY
- && !(PL_reg_flags & RF_warned)) {
- PL_reg_flags |= RF_warned;
- Perl_warner(aTHX_ WARN_REGEXP, "%s limit (%d) exceeded",
- "Complex regular subexpression recursion",
- REG_INFTY - 1);
- }
-
- /* Failed deeper matches of scan, so see if this one works. */
- PL_regcc = cc->oldcc;
- if (PL_regcc)
- ln = PL_regcc->cur;
- if (regmatch(cc->next))
- sayYES;
- if (PL_regcc)
- PL_regcc->cur = ln;
- PL_regcc = cc;
- cc->cur = n - 1;
- cc->lastloc = lastloc;
- sayNO;
- }
- /* NOT REACHED */
- case BRANCHJ:
- next = scan + ARG(scan);
- if (next == scan)
- next = NULL;
- inner = NEXTOPER(NEXTOPER(scan));
- goto do_branch;
- case BRANCH:
- inner = NEXTOPER(scan);
- do_branch:
- {
- CHECKPOINT lastcp;
- c1 = OP(scan);
- if (OP(next) != c1) /* No choice. */
- next = inner; /* Avoid recursion. */
- else {
- I32 lastparen = *PL_reglastparen;
- I32 unwind1;
- re_unwind_branch_t *uw;
-
- /* Put unwinding data on stack */
- unwind1 = SSNEWt(1,re_unwind_branch_t);
- uw = SSPTRt(unwind1,re_unwind_branch_t);
- uw->prev = unwind;
- unwind = unwind1;
- uw->type = ((c1 == BRANCH)
- ? RE_UNWIND_BRANCH
- : RE_UNWIND_BRANCHJ);
- uw->lastparen = lastparen;
- uw->next = next;
- uw->locinput = locinput;
- uw->nextchr = nextchr;
-#ifdef DEBUGGING
- uw->regindent = ++PL_regindent;
-#endif
-
- REGCP_SET(uw->lastcp);
-
- /* Now go into the first branch */
- next = inner;
- }
- }
- break;
- case MINMOD:
- minmod = 1;
- break;
- case CURLYM:
- {
- I32 l = 0;
- CHECKPOINT lastcp;
-
- /* We suppose that the next guy does not need
- backtracking: in particular, it is of constant length,
- and has no parenths to influence future backrefs. */
- ln = ARG1(scan); /* min to match */
- n = ARG2(scan); /* max to match */
- paren = scan->flags;
- if (paren) {
- if (paren > PL_regsize)
- PL_regsize = paren;
- if (paren > *PL_reglastparen)
- *PL_reglastparen = paren;
- }
- scan = NEXTOPER(scan) + NODE_STEP_REGNODE;
- if (paren)
- scan += NEXT_OFF(scan); /* Skip former OPEN. */
- PL_reginput = locinput;
- if (minmod) {
- minmod = 0;
- if (ln && regrepeat_hard(scan, ln, &l) < ln)
- sayNO;
- if (ln && l == 0 && n >= ln
- /* In fact, this is tricky. If paren, then the
- fact that we did/didnot match may influence
- future execution. */
- && !(paren && ln == 0))
- ln = n;
- locinput = PL_reginput;
- if (PL_regkind[(U8)OP(next)] == EXACT) {
- c1 = (U8)*STRING(next);
- if (OP(next) == EXACTF)
- c2 = PL_fold[c1];
- else if (OP(next) == EXACTFL)
- c2 = PL_fold_locale[c1];
- else
- c2 = c1;
- }
- else
- c1 = c2 = -1000;
- REGCP_SET(lastcp);
- /* This may be improved if l == 0. */
- while (n >= ln || (n == REG_INFTY && ln > 0 && l)) { /* ln overflow ? */
- /* If it could work, try it. */
- if (c1 == -1000 ||
- UCHARAT(PL_reginput) == c1 ||
- UCHARAT(PL_reginput) == c2)
- {
- if (paren) {
- if (n) {
- PL_regstartp[paren] =
- HOPc(PL_reginput, -l) - PL_bostr;
- PL_regendp[paren] = PL_reginput - PL_bostr;
- }
- else
- PL_regendp[paren] = -1;
- }
- if (regmatch(next))
- sayYES;
- REGCP_UNWIND(lastcp);
- }
- /* Couldn't or didn't -- move forward. */
- PL_reginput = locinput;
- if (regrepeat_hard(scan, 1, &l)) {
- ln++;
- locinput = PL_reginput;
- }
- else
- sayNO;
- }
- }
- else {
- n = regrepeat_hard(scan, n, &l);
- if (n != 0 && l == 0
- /* In fact, this is tricky. If paren, then the
- fact that we did/didnot match may influence
- future execution. */
- && !(paren && ln == 0))
- ln = n;
- locinput = PL_reginput;
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s matched %"IVdf" times, len=%"IVdf"...\n",
- (int)(REPORT_CODE_OFF+PL_regindent*2), "",
- (IV) n, (IV)l)
- );
- if (n >= ln) {
- if (PL_regkind[(U8)OP(next)] == EXACT) {
- c1 = (U8)*STRING(next);
- if (OP(next) == EXACTF)
- c2 = PL_fold[c1];
- else if (OP(next) == EXACTFL)
- c2 = PL_fold_locale[c1];
- else
- c2 = c1;
- }
- else
- c1 = c2 = -1000;
- }
- REGCP_SET(lastcp);
- while (n >= ln) {
- /* If it could work, try it. */
- if (c1 == -1000 ||
- UCHARAT(PL_reginput) == c1 ||
- UCHARAT(PL_reginput) == c2)
- {
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s trying tail with n=%"IVdf"...\n",
- (int)(REPORT_CODE_OFF+PL_regindent*2), "", (IV)n)
- );
- if (paren) {
- if (n) {
- PL_regstartp[paren] = HOPc(PL_reginput, -l) - PL_bostr;
- PL_regendp[paren] = PL_reginput - PL_bostr;
- }
- else
- PL_regendp[paren] = -1;
- }
- if (regmatch(next))
- sayYES;
- REGCP_UNWIND(lastcp);
- }
- /* Couldn't or didn't -- back up. */
- n--;
- locinput = HOPc(locinput, -l);
- PL_reginput = locinput;
- }
- }
- sayNO;
- break;
- }
- case CURLYN:
- paren = scan->flags; /* Which paren to set */
- if (paren > PL_regsize)
- PL_regsize = paren;
- if (paren > *PL_reglastparen)
- *PL_reglastparen = paren;
- ln = ARG1(scan); /* min to match */
- n = ARG2(scan); /* max to match */
- scan = regnext(NEXTOPER(scan) + NODE_STEP_REGNODE);
- goto repeat;
- case CURLY:
- paren = 0;
- ln = ARG1(scan); /* min to match */
- n = ARG2(scan); /* max to match */
- scan = NEXTOPER(scan) + NODE_STEP_REGNODE;
- goto repeat;
- case STAR:
- ln = 0;
- n = REG_INFTY;
- scan = NEXTOPER(scan);
- paren = 0;
- goto repeat;
- case PLUS:
- ln = 1;
- n = REG_INFTY;
- scan = NEXTOPER(scan);
- paren = 0;
- repeat:
- /*
- * Lookahead to avoid useless match attempts
- * when we know what character comes next.
- */
- if (PL_regkind[(U8)OP(next)] == EXACT) {
- c1 = (U8)*STRING(next);
- if (OP(next) == EXACTF)
- c2 = PL_fold[c1];
- else if (OP(next) == EXACTFL)
- c2 = PL_fold_locale[c1];
- else
- c2 = c1;
- }
- else
- c1 = c2 = -1000;
- PL_reginput = locinput;
- if (minmod) {
- CHECKPOINT lastcp;
- minmod = 0;
- if (ln && regrepeat(scan, ln) < ln)
- sayNO;
- locinput = PL_reginput;
- REGCP_SET(lastcp);
- if (c1 != -1000) {
- char *e = locinput + n - ln; /* Should not check after this */
- char *old = locinput;
-
- if (e >= PL_regeol || (n == REG_INFTY))
- e = PL_regeol - 1;
- while (1) {
- /* Find place 'next' could work */
- if (c1 == c2) {
- while (locinput <= e && *locinput != c1)
- locinput++;
- } else {
- while (locinput <= e
- && *locinput != c1
- && *locinput != c2)
- locinput++;
- }
- if (locinput > e)
- sayNO;
- /* PL_reginput == old now */
- if (locinput != old) {
- ln = 1; /* Did some */
- if (regrepeat(scan, locinput - old) <
- locinput - old)
- sayNO;
- }
- /* PL_reginput == locinput now */
- TRYPAREN(paren, ln, locinput);
- PL_reginput = locinput; /* Could be reset... */
- REGCP_UNWIND(lastcp);
- /* Couldn't or didn't -- move forward. */
- old = locinput++;
- }
- }
- else
- while (n >= ln || (n == REG_INFTY && ln > 0)) { /* ln overflow ? */
- /* If it could work, try it. */
- if (c1 == -1000 ||
- UCHARAT(PL_reginput) == c1 ||
- UCHARAT(PL_reginput) == c2)
- {
- TRYPAREN(paren, n, PL_reginput);
- REGCP_UNWIND(lastcp);
- }
- /* Couldn't or didn't -- move forward. */
- PL_reginput = locinput;
- if (regrepeat(scan, 1)) {
- ln++;
- locinput = PL_reginput;
- }
- else
- sayNO;
- }
- }
- else {
- CHECKPOINT lastcp;
- n = regrepeat(scan, n);
- locinput = PL_reginput;
- if (ln < n && PL_regkind[(U8)OP(next)] == EOL &&
- (!PL_multiline || OP(next) == SEOL || OP(next) == EOS)) {
- ln = n; /* why back off? */
- /* ...because $ and \Z can match before *and* after
- newline at the end. Consider "\n\n" =~ /\n+\Z\n/.
- We should back off by one in this case. */
- if (UCHARAT(PL_reginput - 1) == '\n' && OP(next) != EOS)
- ln--;
- }
- REGCP_SET(lastcp);
- if (paren) {
- while (n >= ln) {
- /* If it could work, try it. */
- if (c1 == -1000 ||
- UCHARAT(PL_reginput) == c1 ||
- UCHARAT(PL_reginput) == c2)
- {
- TRYPAREN(paren, n, PL_reginput);
- REGCP_UNWIND(lastcp);
- }
- /* Couldn't or didn't -- back up. */
- n--;
- PL_reginput = locinput = HOPc(locinput, -1);
- }
- }
- else {
- while (n >= ln) {
- /* If it could work, try it. */
- if (c1 == -1000 ||
- UCHARAT(PL_reginput) == c1 ||
- UCHARAT(PL_reginput) == c2)
- {
- TRYPAREN(paren, n, PL_reginput);
- REGCP_UNWIND(lastcp);
- }
- /* Couldn't or didn't -- back up. */
- n--;
- PL_reginput = locinput = HOPc(locinput, -1);
- }
- }
- }
- sayNO;
- break;
- case END:
- if (PL_reg_call_cc) {
- re_cc_state *cur_call_cc = PL_reg_call_cc;
- CURCUR *cctmp = PL_regcc;
- regexp *re = PL_reg_re;
- CHECKPOINT cp, lastcp;
-
- cp = regcppush(0); /* Save *all* the positions. */
- REGCP_SET(lastcp);
- regcp_set_to(PL_reg_call_cc->ss); /* Restore parens of
- the caller. */
- PL_reginput = locinput; /* Make position available to
- the callcc. */
- cache_re(PL_reg_call_cc->re);
- PL_regcc = PL_reg_call_cc->cc;
- PL_reg_call_cc = PL_reg_call_cc->prev;
- if (regmatch(cur_call_cc->node)) {
- PL_reg_call_cc = cur_call_cc;
- regcpblow(cp);
- sayYES;
- }
- REGCP_UNWIND(lastcp);
- regcppop();
- PL_reg_call_cc = cur_call_cc;
- PL_regcc = cctmp;
- PL_reg_re = re;
- cache_re(re);
-
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s continuation failed...\n",
- REPORT_CODE_OFF+PL_regindent*2, "")
- );
- sayNO_SILENT;
- }
- if (locinput < PL_regtill) {
- DEBUG_r(PerlIO_printf(Perl_debug_log,
- "%sMatch possible, but length=%ld is smaller than requested=%ld, failing!%s\n",
- PL_colors[4],
- (long)(locinput - PL_reg_starttry),
- (long)(PL_regtill - PL_reg_starttry),
- PL_colors[5]));
- sayNO_FINAL; /* Cannot match: too short. */
- }
- PL_reginput = locinput; /* put where regtry can find it */
- sayYES_FINAL; /* Success! */
- case SUCCEED:
- PL_reginput = locinput; /* put where regtry can find it */
- sayYES_LOUD; /* Success! */
- case SUSPEND:
- n = 1;
- PL_reginput = locinput;
- goto do_ifmatch;
- case UNLESSM:
- n = 0;
- if (scan->flags) {
- if (UTF) { /* XXXX This is absolutely
- broken, we read before
- start of string. */
- s = HOPMAYBEc(locinput, -scan->flags);
- if (!s)
- goto say_yes;
- PL_reginput = s;
- }
- else {
- if (locinput < PL_bostr + scan->flags)
- goto say_yes;
- PL_reginput = locinput - scan->flags;
- goto do_ifmatch;
- }
- }
- else
- PL_reginput = locinput;
- goto do_ifmatch;
- case IFMATCH:
- n = 1;
- if (scan->flags) {
- if (UTF) { /* XXXX This is absolutely
- broken, we read before
- start of string. */
- s = HOPMAYBEc(locinput, -scan->flags);
- if (!s || s < PL_bostr)
- goto say_no;
- PL_reginput = s;
- }
- else {
- if (locinput < PL_bostr + scan->flags)
- goto say_no;
- PL_reginput = locinput - scan->flags;
- goto do_ifmatch;
- }
- }
- else
- PL_reginput = locinput;
-
- do_ifmatch:
- inner = NEXTOPER(NEXTOPER(scan));
- if (regmatch(inner) != n) {
- say_no:
- if (logical) {
- logical = 0;
- sw = 0;
- goto do_longjump;
- }
- else
- sayNO;
- }
- say_yes:
- if (logical) {
- logical = 0;
- sw = 1;
- }
- if (OP(scan) == SUSPEND) {
- locinput = PL_reginput;
- nextchr = UCHARAT(locinput);
- }
- /* FALL THROUGH. */
- case LONGJMP:
- do_longjump:
- next = scan + ARG(scan);
- if (next == scan)
- next = NULL;
- break;
- default:
- PerlIO_printf(Perl_error_log, "%"UVxf" %d\n",
- PTR2UV(scan), OP(scan));
- Perl_croak(aTHX_ "regexp memory corruption");
- }
- reenter:
- scan = next;
- }
-
- /*
- * We get here only if there's trouble -- normally "case END" is
- * the terminating point.
- */
- Perl_croak(aTHX_ "corrupted regexp pointers");
- /*NOTREACHED*/
- sayNO;
-
-yes_loud:
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s %scould match...%s\n",
- REPORT_CODE_OFF+PL_regindent*2, "", PL_colors[4],PL_colors[5])
- );
- goto yes;
-yes_final:
- DEBUG_r(PerlIO_printf(Perl_debug_log, "%sMatch successful!%s\n",
- PL_colors[4],PL_colors[5]));
-yes:
-#ifdef DEBUGGING
- PL_regindent--;
-#endif
-
-#if 0 /* Breaks $^R */
- if (unwind)
- regcpblow(firstcp);
-#endif
- return 1;
-
-no:
- DEBUG_r(
- PerlIO_printf(Perl_debug_log,
- "%*s %sfailed...%s\n",
- REPORT_CODE_OFF+PL_regindent*2, "",PL_colors[4],PL_colors[5])
- );
- goto do_no;
-no_final:
-do_no:
- if (unwind) {
- re_unwind_t *uw = SSPTRt(unwind,re_unwind_t);
-
- switch (uw->type) {
- case RE_UNWIND_BRANCH:
- case RE_UNWIND_BRANCHJ:
- {
- re_unwind_branch_t *uwb = &(uw->branch);
- I32 lastparen = uwb->lastparen;
-
- REGCP_UNWIND(uwb->lastcp);
- for (n = *PL_reglastparen; n > lastparen; n--)
- PL_regendp[n] = -1;
- *PL_reglastparen = n;
- scan = next = uwb->next;
- if ( !scan ||
- OP(scan) != (uwb->type == RE_UNWIND_BRANCH
- ? BRANCH : BRANCHJ) ) { /* Failure */
- unwind = uwb->prev;
-#ifdef DEBUGGING
- PL_regindent--;
-#endif
- goto do_no;
- }
- /* Have more choice yet. Reuse the same uwb. */
- /*SUPPRESS 560*/
- if ((n = (uwb->type == RE_UNWIND_BRANCH
- ? NEXT_OFF(next) : ARG(next))))
- next += n;
- else
- next = NULL; /* XXXX Needn't unwinding in this case... */
- uwb->next = next;
- next = NEXTOPER(scan);
- if (uwb->type == RE_UNWIND_BRANCHJ)
- next = NEXTOPER(next);
- locinput = uwb->locinput;
- nextchr = uwb->nextchr;
-#ifdef DEBUGGING
- PL_regindent = uwb->regindent;
-#endif
-
- goto reenter;
- }
- /* NOT REACHED */
- default:
- Perl_croak(aTHX_ "regexp unwind memory corruption");
- }
- /* NOT REACHED */
- }
-#ifdef DEBUGGING
- PL_regindent--;
-#endif
- return 0;
-}
-
-/*
- - 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. [Er, except utf8.]]
- */
-STATIC I32
-S_regrepeat(pTHX_ regnode *p, I32 max)
-{
- register char *scan;
- register I32 c;
- register char *loceol = PL_regeol;
- register I32 hardcount = 0;
-
- scan = PL_reginput;
- if (max != REG_INFTY && max < loceol - scan)
- loceol = scan + max;
- switch (OP(p)) {
- case REG_ANY:
- while (scan < loceol && *scan != '\n')
- scan++;
- break;
- case SANY:
- scan = loceol;
- break;
- case ANYUTF8:
- loceol = PL_regeol;
- while (scan < loceol && *scan != '\n') {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case SANYUTF8:
- loceol = PL_regeol;
- while (scan < loceol) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case EXACT: /* length of string is 1 */
- c = (U8)*STRING(p);
- while (scan < loceol && UCHARAT(scan) == c)
- scan++;
- break;
- case EXACTF: /* length of string is 1 */
- c = (U8)*STRING(p);
- while (scan < loceol &&
- (UCHARAT(scan) == c || UCHARAT(scan) == PL_fold[c]))
- scan++;
- break;
- case EXACTFL: /* length of string is 1 */
- PL_reg_flags |= RF_tainted;
- c = (U8)*STRING(p);
- while (scan < loceol &&
- (UCHARAT(scan) == c || UCHARAT(scan) == PL_fold_locale[c]))
- scan++;
- break;
- case ANYOFUTF8:
- loceol = PL_regeol;
- while (scan < loceol && REGINCLASSUTF8(p, (U8*)scan)) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case ANYOF:
- while (scan < loceol && REGINCLASS(p, *scan))
- scan++;
- break;
- case ALNUM:
- while (scan < loceol && isALNUM(*scan))
- scan++;
- break;
- case ALNUMUTF8:
- loceol = PL_regeol;
- while (scan < loceol && swash_fetch(PL_utf8_alnum, (U8*)scan)) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case ALNUML:
- PL_reg_flags |= RF_tainted;
- while (scan < loceol && isALNUM_LC(*scan))
- scan++;
- break;
- case ALNUMLUTF8:
- PL_reg_flags |= RF_tainted;
- loceol = PL_regeol;
- while (scan < loceol && isALNUM_LC_utf8((U8*)scan)) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- break;
- case NALNUM:
- while (scan < loceol && !isALNUM(*scan))
- scan++;
- break;
- case NALNUMUTF8:
- loceol = PL_regeol;
- while (scan < loceol && !swash_fetch(PL_utf8_alnum, (U8*)scan)) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case NALNUML:
- PL_reg_flags |= RF_tainted;
- while (scan < loceol && !isALNUM_LC(*scan))
- scan++;
- break;
- case NALNUMLUTF8:
- PL_reg_flags |= RF_tainted;
- loceol = PL_regeol;
- while (scan < loceol && !isALNUM_LC_utf8((U8*)scan)) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case SPACE:
- while (scan < loceol && isSPACE(*scan))
- scan++;
- break;
- case SPACEUTF8:
- loceol = PL_regeol;
- while (scan < loceol && (*scan == ' ' || swash_fetch(PL_utf8_space,(U8*)scan))) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case SPACEL:
- PL_reg_flags |= RF_tainted;
- while (scan < loceol && isSPACE_LC(*scan))
- scan++;
- break;
- case SPACELUTF8:
- PL_reg_flags |= RF_tainted;
- loceol = PL_regeol;
- while (scan < loceol && (*scan == ' ' || isSPACE_LC_utf8((U8*)scan))) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case NSPACE:
- while (scan < loceol && !isSPACE(*scan))
- scan++;
- break;
- case NSPACEUTF8:
- loceol = PL_regeol;
- while (scan < loceol && !(*scan == ' ' || swash_fetch(PL_utf8_space,(U8*)scan))) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case NSPACEL:
- PL_reg_flags |= RF_tainted;
- while (scan < loceol && !isSPACE_LC(*scan))
- scan++;
- break;
- case NSPACELUTF8:
- PL_reg_flags |= RF_tainted;
- loceol = PL_regeol;
- while (scan < loceol && !(*scan == ' ' || isSPACE_LC_utf8((U8*)scan))) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- case DIGIT:
- while (scan < loceol && isDIGIT(*scan))
- scan++;
- break;
- case DIGITUTF8:
- loceol = PL_regeol;
- while (scan < loceol && swash_fetch(PL_utf8_digit,(U8*)scan)) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- break;
- case NDIGIT:
- while (scan < loceol && !isDIGIT(*scan))
- scan++;
- break;
- case NDIGITUTF8:
- loceol = PL_regeol;
- while (scan < loceol && !swash_fetch(PL_utf8_digit,(U8*)scan)) {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
- break;
- default: /* Called on something of 0 width. */
- break; /* So match right here or not at all. */
- }
-
- if (hardcount)
- c = hardcount;
- else
- c = scan - PL_reginput;
- PL_reginput = scan;
-
- DEBUG_r(
- {
- SV *prop = sv_newmortal();
-
- regprop(prop, p);
- PerlIO_printf(Perl_debug_log,
- "%*s %s can match %"IVdf" times out of %"IVdf"...\n",
- REPORT_CODE_OFF+1, "", SvPVX(prop),(IV)c,(IV)max);
- });
-
- return(c);
-}
-
-/*
- - regrepeat_hard - repeatedly match something, report total lenth and length
- *
- * The repeater is supposed to have constant length.
- */
-
-STATIC I32
-S_regrepeat_hard(pTHX_ regnode *p, I32 max, I32 *lp)
-{
- register char *scan;
- register char *start;
- register char *loceol = PL_regeol;
- I32 l = 0;
- I32 count = 0, res = 1;
-
- if (!max)
- return 0;
-
- start = PL_reginput;
- if (UTF) {
- while (PL_reginput < loceol && (scan = PL_reginput, res = regmatch(p))) {
- if (!count++) {
- l = 0;
- while (start < PL_reginput) {
- l++;
- start += UTF8SKIP(start);
- }
- *lp = l;
- if (l == 0)
- return max;
- }
- if (count == max)
- return count;
- }
- }
- else {
- while (PL_reginput < loceol && (scan = PL_reginput, res = regmatch(p))) {
- if (!count++) {
- *lp = l = PL_reginput - start;
- if (max != REG_INFTY && l*max < loceol - scan)
- loceol = scan + l*max;
- if (l == 0)
- return max;
- }
- }
- }
- if (!res)
- PL_reginput = scan;
-
- return count;
-}
-
-/*
- - reginclass - determine if a character falls into a character class
- */
-
-STATIC bool
-S_reginclass(pTHX_ register regnode *p, register I32 c)
-{
- char flags = ANYOF_FLAGS(p);
- bool match = FALSE;
-
- c &= 0xFF;
- if (ANYOF_BITMAP_TEST(p, c))
- match = TRUE;
- else if (flags & ANYOF_FOLD) {
- I32 cf;
- if (flags & ANYOF_LOCALE) {
- PL_reg_flags |= RF_tainted;
- cf = PL_fold_locale[c];
- }
- else
- cf = PL_fold[c];
- if (ANYOF_BITMAP_TEST(p, cf))
- match = TRUE;
- }
-
- if (!match && (flags & ANYOF_CLASS)) {
- PL_reg_flags |= RF_tainted;
- if (
- (ANYOF_CLASS_TEST(p, ANYOF_ALNUM) && isALNUM_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NALNUM) && !isALNUM_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_SPACE) && isSPACE_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NSPACE) && !isSPACE_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_DIGIT) && isDIGIT_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NDIGIT) && !isDIGIT_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_ALNUMC) && isALNUMC_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NALNUMC) && !isALNUMC_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_ALPHA) && isALPHA_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NALPHA) && !isALPHA_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_ASCII) && isASCII(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NASCII) && !isASCII(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_CNTRL) && isCNTRL_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NCNTRL) && !isCNTRL_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_GRAPH) && isGRAPH_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NGRAPH) && !isGRAPH_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_LOWER) && isLOWER_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NLOWER) && !isLOWER_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_PRINT) && isPRINT_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NPRINT) && !isPRINT_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_PUNCT) && isPUNCT_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NPUNCT) && !isPUNCT_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_UPPER) && isUPPER_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NUPPER) && !isUPPER_LC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_XDIGIT) && isXDIGIT(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NXDIGIT) && !isXDIGIT(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_PSXSPC) && isPSXSPC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NPSXSPC) && !isPSXSPC(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_BLANK) && isBLANK(c)) ||
- (ANYOF_CLASS_TEST(p, ANYOF_NBLANK) && !isBLANK(c))
- ) /* How's that for a conditional? */
- {
- match = TRUE;
- }
- }
-
- return (flags & ANYOF_INVERT) ? !match : match;
-}
-
-STATIC bool
-S_reginclassutf8(pTHX_ regnode *f, U8 *p)
-{
- char flags = ARG1(f);
- bool match = FALSE;
-#ifdef DEBUGGING
- SV *rv = (SV*)PL_regdata->data[ARG2(f)];
- AV *av = (AV*)SvRV((SV*)rv);
- SV *sw = *av_fetch(av, 0, FALSE);
- SV *lv = *av_fetch(av, 1, FALSE);
-#else
- SV *sw = (SV*)PL_regdata->data[ARG2(f)];
-#endif
-
- if (swash_fetch(sw, p))
- match = TRUE;
- else if (flags & ANYOF_FOLD) {
- U8 tmpbuf[UTF8_MAXLEN+1];
- if (flags & ANYOF_LOCALE) {
- PL_reg_flags |= RF_tainted;
- uv_to_utf8(tmpbuf, toLOWER_LC_utf8(p));
- }
- else
- uv_to_utf8(tmpbuf, toLOWER_utf8(p));
- if (swash_fetch(sw, tmpbuf))
- match = TRUE;
- }
-
- /* UTF8 combined with ANYOF_CLASS is ill-defined. */
-
- return (flags & ANYOF_INVERT) ? !match : match;
-}
-
-STATIC U8 *
-S_reghop(pTHX_ U8 *s, I32 off)
-{
- if (off >= 0) {
- while (off-- && s < (U8*)PL_regeol)
- s += UTF8SKIP(s);
- }
- else {
- while (off++) {
- if (s > (U8*)PL_bostr) {
- s--;
- if (*s & 0x80) {
- while (s > (U8*)PL_bostr && (*s & 0xc0) == 0x80)
- s--;
- } /* XXX could check well-formedness here */
- }
- }
- }
- return s;
-}
-
-STATIC U8 *
-S_reghopmaybe(pTHX_ U8* s, I32 off)
-{
- if (off >= 0) {
- while (off-- && s < (U8*)PL_regeol)
- s += UTF8SKIP(s);
- if (off >= 0)
- return 0;
- }
- else {
- while (off++) {
- if (s > (U8*)PL_bostr) {
- s--;
- if (*s & 0x80) {
- while (s > (U8*)PL_bostr && (*s & 0xc0) == 0x80)
- s--;
- } /* XXX could check well-formedness here */
- }
- else
- break;
- }
- if (off <= 0)
- return 0;
- }
- return s;
-}
-
-#ifdef PERL_OBJECT
-#include "XSUB.h"
-#endif
-
-static void
-restore_pos(pTHXo_ void *arg)
-{
- if (PL_reg_eval_set) {
- if (PL_reg_oldsaved) {
- PL_reg_re->subbeg = PL_reg_oldsaved;
- PL_reg_re->sublen = PL_reg_oldsavedlen;
- RX_MATCH_COPIED_on(PL_reg_re);
- }
- PL_reg_magic->mg_len = PL_reg_oldpos;
- PL_reg_eval_set = 0;
- PL_curpm = PL_reg_oldcurpm;
- }
-}
diff --git a/contrib/perl5/regexp.h b/contrib/perl5/regexp.h
deleted file mode 100644
index 3c71060..0000000
--- a/contrib/perl5/regexp.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* regexp.h
- */
-
-/*
- * Definitions etc. for regexp(3) routines.
- *
- * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof],
- * not the System V one.
- */
-
-
-struct regnode {
- U8 flags;
- U8 type;
- U16 next_off;
-};
-
-typedef struct regnode regnode;
-
-struct reg_substr_data;
-
-struct reg_data;
-
-typedef struct regexp {
- I32 *startp;
- I32 *endp;
- regnode *regstclass;
- struct reg_substr_data *substrs;
- char *precomp; /* pre-compilation regular expression */
- struct reg_data *data; /* Additional data. */
- char *subbeg; /* saved or original string
- so \digit works forever. */
- I32 sublen; /* Length of string pointed by subbeg */
- I32 refcnt;
- I32 minlen; /* mininum possible length of $& */
- I32 prelen; /* length of precomp */
- U32 nparens; /* number of parentheses */
- U32 lastparen; /* last paren matched */
- U32 reganch; /* Internal use only +
- Tainted information used by regexec? */
- regnode program[1]; /* Unwarranted chumminess with compiler. */
-} regexp;
-
-#define ROPT_ANCH (ROPT_ANCH_BOL|ROPT_ANCH_MBOL|ROPT_ANCH_GPOS|ROPT_ANCH_SBOL)
-#define ROPT_ANCH_SINGLE (ROPT_ANCH_SBOL|ROPT_ANCH_GPOS)
-#define ROPT_ANCH_BOL 0x00001
-#define ROPT_ANCH_MBOL 0x00002
-#define ROPT_ANCH_SBOL 0x00004
-#define ROPT_ANCH_GPOS 0x00008
-#define ROPT_SKIP 0x00010
-#define ROPT_IMPLICIT 0x00020 /* Converted .* to ^.* */
-#define ROPT_NOSCAN 0x00040 /* Check-string always at start. */
-#define ROPT_GPOS_SEEN 0x00080
-#define ROPT_CHECK_ALL 0x00100
-#define ROPT_LOOKBEHIND_SEEN 0x00200
-#define ROPT_EVAL_SEEN 0x00400
-
-/* 0xf800 of reganch is used by PMf_COMPILETIME */
-
-#define ROPT_UTF8 0x10000
-#define ROPT_NAUGHTY 0x20000 /* how exponential is this pattern? */
-#define ROPT_COPY_DONE 0x40000 /* subbeg is a copy of the string */
-#define ROPT_TAINTED_SEEN 0x80000
-
-#define RE_USE_INTUIT_NOML 0x0100000 /* Best to intuit before matching */
-#define RE_USE_INTUIT_ML 0x0200000
-#define REINT_AUTORITATIVE_NOML 0x0400000 /* Can trust a positive answer */
-#define REINT_AUTORITATIVE_ML 0x0800000
-#define REINT_ONCE_NOML 0x1000000 /* Intuit can succed once only. */
-#define REINT_ONCE_ML 0x2000000
-#define RE_INTUIT_ONECHAR 0x4000000
-#define RE_INTUIT_TAIL 0x8000000
-
-#define RE_USE_INTUIT (RE_USE_INTUIT_NOML|RE_USE_INTUIT_ML)
-#define REINT_AUTORITATIVE (REINT_AUTORITATIVE_NOML|REINT_AUTORITATIVE_ML)
-#define REINT_ONCE (REINT_ONCE_NOML|REINT_ONCE_ML)
-
-#define RX_MATCH_TAINTED(prog) ((prog)->reganch & ROPT_TAINTED_SEEN)
-#define RX_MATCH_TAINTED_on(prog) ((prog)->reganch |= ROPT_TAINTED_SEEN)
-#define RX_MATCH_TAINTED_off(prog) ((prog)->reganch &= ~ROPT_TAINTED_SEEN)
-#define RX_MATCH_TAINTED_set(prog, t) ((t) \
- ? RX_MATCH_TAINTED_on(prog) \
- : RX_MATCH_TAINTED_off(prog))
-
-#define RX_MATCH_COPIED(prog) ((prog)->reganch & ROPT_COPY_DONE)
-#define RX_MATCH_COPIED_on(prog) ((prog)->reganch |= ROPT_COPY_DONE)
-#define RX_MATCH_COPIED_off(prog) ((prog)->reganch &= ~ROPT_COPY_DONE)
-#define RX_MATCH_COPIED_set(prog,t) ((t) \
- ? RX_MATCH_COPIED_on(prog) \
- : RX_MATCH_COPIED_off(prog))
-
-#define REXEC_COPY_STR 0x01 /* Need to copy the string. */
-#define REXEC_CHECKED 0x02 /* check_substr already checked. */
-#define REXEC_SCREAM 0x04 /* use scream table. */
-#define REXEC_IGNOREPOS 0x08 /* \G matches at start. */
-#define REXEC_NOT_FIRST 0x10 /* This is another iteration of //g. */
-#define REXEC_ML 0x20 /* $* was set. */
-
-#define ReREFCNT_inc(re) ((void)(re && re->refcnt++), re)
-#define ReREFCNT_dec(re) CALLREGFREE(aTHX_ re)
-
-#define FBMcf_TAIL_DOLLAR 1
-#define FBMcf_TAIL_DOLLARM 2
-#define FBMcf_TAIL_Z 4
-#define FBMcf_TAIL_z 8
-#define FBMcf_TAIL (FBMcf_TAIL_DOLLAR|FBMcf_TAIL_DOLLARM|FBMcf_TAIL_Z|FBMcf_TAIL_z)
-
-#define FBMrf_MULTILINE 1
-
-struct re_scream_pos_data_s;
diff --git a/contrib/perl5/regnodes.h b/contrib/perl5/regnodes.h
deleted file mode 100644
index 89c78e6..0000000
--- a/contrib/perl5/regnodes.h
+++ /dev/null
@@ -1,430 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by regcomp.pl from regcomp.sym.
- Any changes made here will be lost!
-*/
-
-#define END 0 /* 0 End of program. */
-#define SUCCEED 1 /* 0x1 Return from a subroutine, basically. */
-#define BOL 2 /* 0x2 Match "" at beginning of line. */
-#define MBOL 3 /* 0x3 Same, assuming multiline. */
-#define SBOL 4 /* 0x4 Same, assuming singleline. */
-#define EOS 5 /* 0x5 Match "" at end of string. */
-#define EOL 6 /* 0x6 Match "" at end of line. */
-#define MEOL 7 /* 0x7 Same, assuming multiline. */
-#define SEOL 8 /* 0x8 Same, assuming singleline. */
-#define BOUND 9 /* 0x9 Match "" at any word boundary */
-#define BOUNDUTF8 10 /* 0xa Match "" at any word boundary */
-#define BOUNDL 11 /* 0xb Match "" at any word boundary */
-#define BOUNDLUTF8 12 /* 0xc Match "" at any word boundary */
-#define NBOUND 13 /* 0xd Match "" at any word non-boundary */
-#define NBOUNDUTF8 14 /* 0xe Match "" at any word non-boundary */
-#define NBOUNDL 15 /* 0xf Match "" at any word non-boundary */
-#define NBOUNDLUTF8 16 /* 0x10 Match "" at any word non-boundary */
-#define GPOS 17 /* 0x11 Matches where last m//g left off. */
-#define REG_ANY 18 /* 0x12 Match any one character (except newline). */
-#define ANYUTF8 19 /* 0x13 Match any one Unicode character (except newline). */
-#define SANY 20 /* 0x14 Match any one character. */
-#define SANYUTF8 21 /* 0x15 Match any one Unicode character. */
-#define ANYOF 22 /* 0x16 Match character in (or not in) this class. */
-#define ANYOFUTF8 23 /* 0x17 Match character in (or not in) this class. */
-#define ALNUM 24 /* 0x18 Match any alphanumeric character */
-#define ALNUMUTF8 25 /* 0x19 Match any alphanumeric character in utf8 */
-#define ALNUML 26 /* 0x1a Match any alphanumeric char in locale */
-#define ALNUMLUTF8 27 /* 0x1b Match any alphanumeric char in locale+utf8 */
-#define NALNUM 28 /* 0x1c Match any non-alphanumeric character */
-#define NALNUMUTF8 29 /* 0x1d Match any non-alphanumeric character in utf8 */
-#define NALNUML 30 /* 0x1e Match any non-alphanumeric char in locale */
-#define NALNUMLUTF8 31 /* 0x1f Match any non-alphanumeric char in locale+utf8 */
-#define SPACE 32 /* 0x20 Match any whitespace character */
-#define SPACEUTF8 33 /* 0x21 Match any whitespace character in utf8 */
-#define SPACEL 34 /* 0x22 Match any whitespace char in locale */
-#define SPACELUTF8 35 /* 0x23 Match any whitespace char in locale+utf8 */
-#define NSPACE 36 /* 0x24 Match any non-whitespace character */
-#define NSPACEUTF8 37 /* 0x25 Match any non-whitespace character in utf8 */
-#define NSPACEL 38 /* 0x26 Match any non-whitespace char in locale */
-#define NSPACELUTF8 39 /* 0x27 Match any non-whitespace char in locale+utf8 */
-#define DIGIT 40 /* 0x28 Match any numeric character */
-#define DIGITUTF8 41 /* 0x29 Match any numeric character in utf8 */
-#define DIGITL 42 /* 0x2a Match any numeric character in locale */
-#define DIGITLUTF8 43 /* 0x2b Match any numeric character in locale+utf8 */
-#define NDIGIT 44 /* 0x2c Match any non-numeric character */
-#define NDIGITUTF8 45 /* 0x2d Match any non-numeric character in utf8 */
-#define NDIGITL 46 /* 0x2e Match any non-numeric character in locale */
-#define NDIGITLUTF8 47 /* 0x2f Match any non-numeric character in locale+utf8 */
-#define CLUMP 48 /* 0x30 Match any combining character sequence */
-#define BRANCH 49 /* 0x31 Match this alternative, or the next... */
-#define BACK 50 /* 0x32 Match "", "next" ptr points backward. */
-#define EXACT 51 /* 0x33 Match this string (preceded by length). */
-#define EXACTF 52 /* 0x34 Match this string, folded (prec. by length). */
-#define EXACTFL 53 /* 0x35 Match this string, folded in locale (w/len). */
-#define NOTHING 54 /* 0x36 Match empty string. */
-#define TAIL 55 /* 0x37 Match empty string. Can jump here from outside. */
-#define STAR 56 /* 0x38 Match this (simple) thing 0 or more times. */
-#define PLUS 57 /* 0x39 Match this (simple) thing 1 or more times. */
-#define CURLY 58 /* 0x3a Match this simple thing {n,m} times. */
-#define CURLYN 59 /* 0x3b Match next-after-this simple thing */
-#define CURLYM 60 /* 0x3c Match this medium-complex thing {n,m} times. */
-#define CURLYX 61 /* 0x3d Match this complex thing {n,m} times. */
-#define WHILEM 62 /* 0x3e Do curly processing and see if rest matches. */
-#define OPEN 63 /* 0x3f Mark this point in input as start of #n. */
-#define CLOSE 64 /* 0x40 Analogous to OPEN. */
-#define REF 65 /* 0x41 Match some already matched string */
-#define REFF 66 /* 0x42 Match already matched string, folded */
-#define REFFL 67 /* 0x43 Match already matched string, folded in loc. */
-#define IFMATCH 68 /* 0x44 Succeeds if the following matches. */
-#define UNLESSM 69 /* 0x45 Fails if the following matches. */
-#define SUSPEND 70 /* 0x46 "Independent" sub-RE. */
-#define IFTHEN 71 /* 0x47 Switch, should be preceeded by switcher . */
-#define GROUPP 72 /* 0x48 Whether the group matched. */
-#define LONGJMP 73 /* 0x49 Jump far away. */
-#define BRANCHJ 74 /* 0x4a BRANCH with long offset. */
-#define EVAL 75 /* 0x4b Execute some Perl code. */
-#define MINMOD 76 /* 0x4c Next operator is not greedy. */
-#define LOGICAL 77 /* 0x4d Next opcode should set the flag only. */
-#define RENUM 78 /* 0x4e Group with independently numbered parens. */
-#define OPTIMIZED 79 /* 0x4f Placeholder for dump. */
-
-#ifndef DOINIT
-EXTCONST U8 PL_regkind[];
-#else
-EXTCONST U8 PL_regkind[] = {
- END, /* END */
- END, /* SUCCEED */
- BOL, /* BOL */
- BOL, /* MBOL */
- BOL, /* SBOL */
- EOL, /* EOS */
- EOL, /* EOL */
- EOL, /* MEOL */
- EOL, /* SEOL */
- BOUND, /* BOUND */
- BOUND, /* BOUNDUTF8 */
- BOUND, /* BOUNDL */
- BOUND, /* BOUNDLUTF8 */
- NBOUND, /* NBOUND */
- NBOUND, /* NBOUNDUTF8 */
- NBOUND, /* NBOUNDL */
- NBOUND, /* NBOUNDLUTF8 */
- GPOS, /* GPOS */
- REG_ANY, /* REG_ANY */
- REG_ANY, /* ANYUTF8 */
- REG_ANY, /* SANY */
- REG_ANY, /* SANYUTF8 */
- ANYOF, /* ANYOF */
- ANYOF, /* ANYOFUTF8 */
- ALNUM, /* ALNUM */
- ALNUM, /* ALNUMUTF8 */
- ALNUM, /* ALNUML */
- ALNUM, /* ALNUMLUTF8 */
- NALNUM, /* NALNUM */
- NALNUM, /* NALNUMUTF8 */
- NALNUM, /* NALNUML */
- NALNUM, /* NALNUMLUTF8 */
- SPACE, /* SPACE */
- SPACE, /* SPACEUTF8 */
- SPACE, /* SPACEL */
- SPACE, /* SPACELUTF8 */
- NSPACE, /* NSPACE */
- NSPACE, /* NSPACEUTF8 */
- NSPACE, /* NSPACEL */
- NSPACE, /* NSPACELUTF8 */
- DIGIT, /* DIGIT */
- DIGIT, /* DIGITUTF8 */
- DIGIT, /* DIGITL */
- DIGIT, /* DIGITLUTF8 */
- NDIGIT, /* NDIGIT */
- NDIGIT, /* NDIGITUTF8 */
- NDIGIT, /* NDIGITL */
- NDIGIT, /* NDIGITLUTF8 */
- CLUMP, /* CLUMP */
- BRANCH, /* BRANCH */
- BACK, /* BACK */
- EXACT, /* EXACT */
- EXACT, /* EXACTF */
- EXACT, /* EXACTFL */
- NOTHING, /* NOTHING */
- NOTHING, /* TAIL */
- STAR, /* STAR */
- PLUS, /* PLUS */
- CURLY, /* CURLY */
- CURLY, /* CURLYN */
- CURLY, /* CURLYM */
- CURLY, /* CURLYX */
- WHILEM, /* WHILEM */
- OPEN, /* OPEN */
- CLOSE, /* CLOSE */
- REF, /* REF */
- REF, /* REFF */
- REF, /* REFFL */
- BRANCHJ, /* IFMATCH */
- BRANCHJ, /* UNLESSM */
- BRANCHJ, /* SUSPEND */
- BRANCHJ, /* IFTHEN */
- GROUPP, /* GROUPP */
- LONGJMP, /* LONGJMP */
- BRANCHJ, /* BRANCHJ */
- EVAL, /* EVAL */
- MINMOD, /* MINMOD */
- LOGICAL, /* LOGICAL */
- BRANCHJ, /* RENUM */
- NOTHING, /* OPTIMIZED */
-};
-#endif
-
-
-#ifdef REG_COMP_C
-static const U8 regarglen[] = {
- 0, /* END */
- 0, /* SUCCEED */
- 0, /* BOL */
- 0, /* MBOL */
- 0, /* SBOL */
- 0, /* EOS */
- 0, /* EOL */
- 0, /* MEOL */
- 0, /* SEOL */
- 0, /* BOUND */
- 0, /* BOUNDUTF8 */
- 0, /* BOUNDL */
- 0, /* BOUNDLUTF8 */
- 0, /* NBOUND */
- 0, /* NBOUNDUTF8 */
- 0, /* NBOUNDL */
- 0, /* NBOUNDLUTF8 */
- 0, /* GPOS */
- 0, /* REG_ANY */
- 0, /* ANYUTF8 */
- 0, /* SANY */
- 0, /* SANYUTF8 */
- 0, /* ANYOF */
- EXTRA_SIZE(struct regnode_1), /* ANYOFUTF8 */
- 0, /* ALNUM */
- 0, /* ALNUMUTF8 */
- 0, /* ALNUML */
- 0, /* ALNUMLUTF8 */
- 0, /* NALNUM */
- 0, /* NALNUMUTF8 */
- 0, /* NALNUML */
- 0, /* NALNUMLUTF8 */
- 0, /* SPACE */
- 0, /* SPACEUTF8 */
- 0, /* SPACEL */
- 0, /* SPACELUTF8 */
- 0, /* NSPACE */
- 0, /* NSPACEUTF8 */
- 0, /* NSPACEL */
- 0, /* NSPACELUTF8 */
- 0, /* DIGIT */
- 0, /* DIGITUTF8 */
- 0, /* DIGITL */
- 0, /* DIGITLUTF8 */
- 0, /* NDIGIT */
- 0, /* NDIGITUTF8 */
- 0, /* NDIGITL */
- 0, /* NDIGITLUTF8 */
- 0, /* CLUMP */
- 0, /* BRANCH */
- 0, /* BACK */
- 0, /* EXACT */
- 0, /* EXACTF */
- 0, /* EXACTFL */
- 0, /* NOTHING */
- 0, /* TAIL */
- 0, /* STAR */
- 0, /* PLUS */
- EXTRA_SIZE(struct regnode_2), /* CURLY */
- EXTRA_SIZE(struct regnode_2), /* CURLYN */
- EXTRA_SIZE(struct regnode_2), /* CURLYM */
- EXTRA_SIZE(struct regnode_2), /* CURLYX */
- 0, /* WHILEM */
- EXTRA_SIZE(struct regnode_1), /* OPEN */
- EXTRA_SIZE(struct regnode_1), /* CLOSE */
- EXTRA_SIZE(struct regnode_1), /* REF */
- EXTRA_SIZE(struct regnode_1), /* REFF */
- EXTRA_SIZE(struct regnode_1), /* REFFL */
- EXTRA_SIZE(struct regnode_1), /* IFMATCH */
- EXTRA_SIZE(struct regnode_1), /* UNLESSM */
- EXTRA_SIZE(struct regnode_1), /* SUSPEND */
- EXTRA_SIZE(struct regnode_1), /* IFTHEN */
- EXTRA_SIZE(struct regnode_1), /* GROUPP */
- EXTRA_SIZE(struct regnode_1), /* LONGJMP */
- EXTRA_SIZE(struct regnode_1), /* BRANCHJ */
- EXTRA_SIZE(struct regnode_1), /* EVAL */
- 0, /* MINMOD */
- 0, /* LOGICAL */
- EXTRA_SIZE(struct regnode_1), /* RENUM */
- 0, /* OPTIMIZED */
-};
-
-static const char reg_off_by_arg[] = {
- 0, /* END */
- 0, /* SUCCEED */
- 0, /* BOL */
- 0, /* MBOL */
- 0, /* SBOL */
- 0, /* EOS */
- 0, /* EOL */
- 0, /* MEOL */
- 0, /* SEOL */
- 0, /* BOUND */
- 0, /* BOUNDUTF8 */
- 0, /* BOUNDL */
- 0, /* BOUNDLUTF8 */
- 0, /* NBOUND */
- 0, /* NBOUNDUTF8 */
- 0, /* NBOUNDL */
- 0, /* NBOUNDLUTF8 */
- 0, /* GPOS */
- 0, /* REG_ANY */
- 0, /* ANYUTF8 */
- 0, /* SANY */
- 0, /* SANYUTF8 */
- 0, /* ANYOF */
- 0, /* ANYOFUTF8 */
- 0, /* ALNUM */
- 0, /* ALNUMUTF8 */
- 0, /* ALNUML */
- 0, /* ALNUMLUTF8 */
- 0, /* NALNUM */
- 0, /* NALNUMUTF8 */
- 0, /* NALNUML */
- 0, /* NALNUMLUTF8 */
- 0, /* SPACE */
- 0, /* SPACEUTF8 */
- 0, /* SPACEL */
- 0, /* SPACELUTF8 */
- 0, /* NSPACE */
- 0, /* NSPACEUTF8 */
- 0, /* NSPACEL */
- 0, /* NSPACELUTF8 */
- 0, /* DIGIT */
- 0, /* DIGITUTF8 */
- 0, /* DIGITL */
- 0, /* DIGITLUTF8 */
- 0, /* NDIGIT */
- 0, /* NDIGITUTF8 */
- 0, /* NDIGITL */
- 0, /* NDIGITLUTF8 */
- 0, /* CLUMP */
- 0, /* BRANCH */
- 0, /* BACK */
- 0, /* EXACT */
- 0, /* EXACTF */
- 0, /* EXACTFL */
- 0, /* NOTHING */
- 0, /* TAIL */
- 0, /* STAR */
- 0, /* PLUS */
- 0, /* CURLY */
- 0, /* CURLYN */
- 0, /* CURLYM */
- 0, /* CURLYX */
- 0, /* WHILEM */
- 0, /* OPEN */
- 0, /* CLOSE */
- 0, /* REF */
- 0, /* REFF */
- 0, /* REFFL */
- 2, /* IFMATCH */
- 2, /* UNLESSM */
- 1, /* SUSPEND */
- 1, /* IFTHEN */
- 0, /* GROUPP */
- 1, /* LONGJMP */
- 1, /* BRANCHJ */
- 0, /* EVAL */
- 0, /* MINMOD */
- 0, /* LOGICAL */
- 1, /* RENUM */
- 0, /* OPTIMIZED */
-};
-
-#ifdef DEBUGGING
-static const char * const reg_name[] = {
- "END", /* 0 */
- "SUCCEED", /* 0x1 */
- "BOL", /* 0x2 */
- "MBOL", /* 0x3 */
- "SBOL", /* 0x4 */
- "EOS", /* 0x5 */
- "EOL", /* 0x6 */
- "MEOL", /* 0x7 */
- "SEOL", /* 0x8 */
- "BOUND", /* 0x9 */
- "BOUNDUTF8", /* 0xa */
- "BOUNDL", /* 0xb */
- "BOUNDLUTF8", /* 0xc */
- "NBOUND", /* 0xd */
- "NBOUNDUTF8", /* 0xe */
- "NBOUNDL", /* 0xf */
- "NBOUNDLUTF8", /* 0x10 */
- "GPOS", /* 0x11 */
- "REG_ANY", /* 0x12 */
- "ANYUTF8", /* 0x13 */
- "SANY", /* 0x14 */
- "SANYUTF8", /* 0x15 */
- "ANYOF", /* 0x16 */
- "ANYOFUTF8", /* 0x17 */
- "ALNUM", /* 0x18 */
- "ALNUMUTF8", /* 0x19 */
- "ALNUML", /* 0x1a */
- "ALNUMLUTF8", /* 0x1b */
- "NALNUM", /* 0x1c */
- "NALNUMUTF8", /* 0x1d */
- "NALNUML", /* 0x1e */
- "NALNUMLUTF8", /* 0x1f */
- "SPACE", /* 0x20 */
- "SPACEUTF8", /* 0x21 */
- "SPACEL", /* 0x22 */
- "SPACELUTF8", /* 0x23 */
- "NSPACE", /* 0x24 */
- "NSPACEUTF8", /* 0x25 */
- "NSPACEL", /* 0x26 */
- "NSPACELUTF8", /* 0x27 */
- "DIGIT", /* 0x28 */
- "DIGITUTF8", /* 0x29 */
- "DIGITL", /* 0x2a */
- "DIGITLUTF8", /* 0x2b */
- "NDIGIT", /* 0x2c */
- "NDIGITUTF8", /* 0x2d */
- "NDIGITL", /* 0x2e */
- "NDIGITLUTF8", /* 0x2f */
- "CLUMP", /* 0x30 */
- "BRANCH", /* 0x31 */
- "BACK", /* 0x32 */
- "EXACT", /* 0x33 */
- "EXACTF", /* 0x34 */
- "EXACTFL", /* 0x35 */
- "NOTHING", /* 0x36 */
- "TAIL", /* 0x37 */
- "STAR", /* 0x38 */
- "PLUS", /* 0x39 */
- "CURLY", /* 0x3a */
- "CURLYN", /* 0x3b */
- "CURLYM", /* 0x3c */
- "CURLYX", /* 0x3d */
- "WHILEM", /* 0x3e */
- "OPEN", /* 0x3f */
- "CLOSE", /* 0x40 */
- "REF", /* 0x41 */
- "REFF", /* 0x42 */
- "REFFL", /* 0x43 */
- "IFMATCH", /* 0x44 */
- "UNLESSM", /* 0x45 */
- "SUSPEND", /* 0x46 */
- "IFTHEN", /* 0x47 */
- "GROUPP", /* 0x48 */
- "LONGJMP", /* 0x49 */
- "BRANCHJ", /* 0x4a */
- "EVAL", /* 0x4b */
- "MINMOD", /* 0x4c */
- "LOGICAL", /* 0x4d */
- "RENUM", /* 0x4e */
- "OPTIMIZED", /* 0x4f */
-};
-
-static const int reg_num = 80;
-
-#endif /* DEBUGGING */
-#endif /* REG_COMP_C */
-
diff --git a/contrib/perl5/run.c b/contrib/perl5/run.c
deleted file mode 100644
index 1b1e72b..0000000
--- a/contrib/perl5/run.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* run.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-#include "EXTERN.h"
-#define PERL_IN_RUN_C
-#include "perl.h"
-
-/*
- * "Away now, Shadowfax! Run, greatheart, run as you have never run before!
- * Now we are come to the lands where you were foaled, and every stone you
- * know. Run now! Hope is in speed!" --Gandalf
- */
-
-int
-Perl_runops_standard(pTHX)
-{
- while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX))) {
- PERL_ASYNC_CHECK();
- }
-
- TAINT_NOT;
- return 0;
-}
-
-int
-Perl_runops_debug(pTHX)
-{
-#ifdef DEBUGGING
- if (!PL_op) {
- if (ckWARN_d(WARN_DEBUGGING))
- Perl_warner(aTHX_ WARN_DEBUGGING, "NULL OP IN RUN");
- return 0;
- }
-
- do {
- PERL_ASYNC_CHECK();
- if (PL_debug) {
- if (PL_watchaddr != 0 && *PL_watchaddr != PL_watchok)
- PerlIO_printf(Perl_debug_log,
- "WARNING: %"UVxf" changed from %"UVxf" to %"UVxf"\n",
- PTR2UV(PL_watchaddr), PTR2UV(PL_watchok),
- PTR2UV(*PL_watchaddr));
- DEBUG_s(debstack());
- DEBUG_t(debop(PL_op));
- DEBUG_P(debprof(PL_op));
- }
- } while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX)));
-
- TAINT_NOT;
- return 0;
-#else
- return runops_standard();
-#endif /* DEBUGGING */
-}
-
-I32
-Perl_debop(pTHX_ OP *o)
-{
-#ifdef DEBUGGING
- SV *sv;
- SV **svp;
- STRLEN n_a;
- Perl_deb(aTHX_ "%s", PL_op_name[o->op_type]);
- switch (o->op_type) {
- case OP_CONST:
- PerlIO_printf(Perl_debug_log, "(%s)", SvPEEK(cSVOPo_sv));
- break;
- case OP_GVSV:
- case OP_GV:
- if (cGVOPo_gv) {
- sv = NEWSV(0,0);
- gv_fullname3(sv, cGVOPo_gv, Nullch);
- PerlIO_printf(Perl_debug_log, "(%s)", SvPV(sv, n_a));
- SvREFCNT_dec(sv);
- }
- else
- PerlIO_printf(Perl_debug_log, "(NULL)");
- break;
- case OP_PADSV:
- case OP_PADAV:
- case OP_PADHV:
- /* print the lexical's name */
- svp = av_fetch(PL_comppad_name, o->op_targ, FALSE);
- if (svp)
- PerlIO_printf(Perl_debug_log, "(%s)", SvPV(*svp,n_a));
- else
- PerlIO_printf(Perl_debug_log, "[%"UVuf"]", (UV)o->op_targ);
- break;
- default:
- break;
- }
- PerlIO_printf(Perl_debug_log, "\n");
-#endif /* DEBUGGING */
- return 0;
-}
-
-void
-Perl_watch(pTHX_ char **addr)
-{
-#ifdef DEBUGGING
- PL_watchaddr = addr;
- PL_watchok = *addr;
- PerlIO_printf(Perl_debug_log, "WATCHING, %"UVxf" is currently %"UVxf"\n",
- PTR2UV(PL_watchaddr), PTR2UV(PL_watchok));
-#endif /* DEBUGGING */
-}
-
-STATIC void
-S_debprof(pTHX_ OP *o)
-{
-#ifdef DEBUGGING
- if (!PL_profiledata)
- Newz(000, PL_profiledata, MAXO, U32);
- ++PL_profiledata[o->op_type];
-#endif /* DEBUGGING */
-}
-
-void
-Perl_debprofdump(pTHX)
-{
-#ifdef DEBUGGING
- unsigned i;
- if (!PL_profiledata)
- return;
- for (i = 0; i < MAXO; i++) {
- if (PL_profiledata[i])
- PerlIO_printf(Perl_debug_log,
- "%5lu %s\n", (unsigned long)PL_profiledata[i],
- PL_op_name[i]);
- }
-#endif /* DEBUGGING */
-}
diff --git a/contrib/perl5/scope.c b/contrib/perl5/scope.c
deleted file mode 100644
index bb4143b..0000000
--- a/contrib/perl5/scope.c
+++ /dev/null
@@ -1,1063 +0,0 @@
-/* scope.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "For the fashion of Minas Tirith was such that it was built on seven
- * levels..."
- */
-
-#include "EXTERN.h"
-#define PERL_IN_SCOPE_C
-#include "perl.h"
-
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-void *
-Perl_default_protect(pTHX_ volatile JMPENV *pcur_env, int *excpt,
- protect_body_t body, ...)
-{
- void *ret;
- va_list args;
- va_start(args, body);
- ret = vdefault_protect(pcur_env, excpt, body, &args);
- va_end(args);
- return ret;
-}
-
-void *
-Perl_vdefault_protect(pTHX_ volatile JMPENV *pcur_env, int *excpt,
- protect_body_t body, va_list *args)
-{
- int ex;
- void *ret;
-
- JMPENV_PUSH(ex);
- if (ex)
- ret = NULL;
- else
- ret = CALL_FPTR(body)(aTHX_ *args);
- *excpt = ex;
- JMPENV_POP;
- return ret;
-}
-#endif
-
-SV**
-Perl_stack_grow(pTHX_ SV **sp, SV **p, int n)
-{
-#if defined(DEBUGGING) && !defined(USE_THREADS)
- static int growing = 0;
- if (growing++)
- abort();
-#endif
- PL_stack_sp = sp;
-#ifndef STRESS_REALLOC
- av_extend(PL_curstack, (p - PL_stack_base) + (n) + 128);
-#else
- av_extend(PL_curstack, (p - PL_stack_base) + (n) + 1);
-#endif
-#if defined(DEBUGGING) && !defined(USE_THREADS)
- growing--;
-#endif
- return PL_stack_sp;
-}
-
-#ifndef STRESS_REALLOC
-#define GROW(old) ((old) * 3 / 2)
-#else
-#define GROW(old) ((old) + 1)
-#endif
-
-PERL_SI *
-Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems)
-{
- PERL_SI *si;
- New(56, si, 1, PERL_SI);
- si->si_stack = newAV();
- AvREAL_off(si->si_stack);
- av_extend(si->si_stack, stitems > 0 ? stitems-1 : 0);
- AvALLOC(si->si_stack)[0] = &PL_sv_undef;
- AvFILLp(si->si_stack) = 0;
- si->si_prev = 0;
- si->si_next = 0;
- si->si_cxmax = cxitems - 1;
- si->si_cxix = -1;
- si->si_type = PERLSI_UNDEF;
- New(56, si->si_cxstack, cxitems, PERL_CONTEXT);
- return si;
-}
-
-I32
-Perl_cxinc(pTHX)
-{
- cxstack_max = GROW(cxstack_max);
- Renew(cxstack, cxstack_max + 1, PERL_CONTEXT); /* XXX should fix CXINC macro */
- return cxstack_ix + 1;
-}
-
-void
-Perl_push_return(pTHX_ OP *retop)
-{
- if (PL_retstack_ix == PL_retstack_max) {
- PL_retstack_max = GROW(PL_retstack_max);
- Renew(PL_retstack, PL_retstack_max, OP*);
- }
- PL_retstack[PL_retstack_ix++] = retop;
-}
-
-OP *
-Perl_pop_return(pTHX)
-{
- if (PL_retstack_ix > 0)
- return PL_retstack[--PL_retstack_ix];
- else
- return Nullop;
-}
-
-void
-Perl_push_scope(pTHX)
-{
- if (PL_scopestack_ix == PL_scopestack_max) {
- PL_scopestack_max = GROW(PL_scopestack_max);
- Renew(PL_scopestack, PL_scopestack_max, I32);
- }
- PL_scopestack[PL_scopestack_ix++] = PL_savestack_ix;
-
-}
-
-void
-Perl_pop_scope(pTHX)
-{
- I32 oldsave = PL_scopestack[--PL_scopestack_ix];
- LEAVE_SCOPE(oldsave);
-}
-
-void
-Perl_markstack_grow(pTHX)
-{
- I32 oldmax = PL_markstack_max - PL_markstack;
- I32 newmax = GROW(oldmax);
-
- Renew(PL_markstack, newmax, I32);
- PL_markstack_ptr = PL_markstack + oldmax;
- PL_markstack_max = PL_markstack + newmax;
-}
-
-void
-Perl_savestack_grow(pTHX)
-{
- PL_savestack_max = GROW(PL_savestack_max) + 4;
- Renew(PL_savestack, PL_savestack_max, ANY);
-}
-
-#undef GROW
-
-void
-Perl_tmps_grow(pTHX_ I32 n)
-{
-#ifndef STRESS_REALLOC
- if (n < 128)
- n = (PL_tmps_max < 512) ? 128 : 512;
-#endif
- PL_tmps_max = PL_tmps_ix + n + 1;
- Renew(PL_tmps_stack, PL_tmps_max, SV*);
-}
-
-
-void
-Perl_free_tmps(pTHX)
-{
- /* XXX should tmps_floor live in cxstack? */
- I32 myfloor = PL_tmps_floor;
- while (PL_tmps_ix > myfloor) { /* clean up after last statement */
- SV* sv = PL_tmps_stack[PL_tmps_ix];
- PL_tmps_stack[PL_tmps_ix--] = Nullsv;
- if (sv) {
- SvTEMP_off(sv);
- SvREFCNT_dec(sv); /* note, can modify tmps_ix!!! */
- }
- }
-}
-
-STATIC SV *
-S_save_scalar_at(pTHX_ SV **sptr)
-{
- register SV *sv;
- SV *osv = *sptr;
-
- sv = *sptr = NEWSV(0,0);
- if (SvTYPE(osv) >= SVt_PVMG && SvMAGIC(osv) && SvTYPE(osv) != SVt_PVGV) {
- sv_upgrade(sv, SvTYPE(osv));
- if (SvGMAGICAL(osv)) {
- MAGIC* mg;
- bool oldtainted = PL_tainted;
- mg_get(osv); /* note, can croak! */
- if (PL_tainting && PL_tainted && (mg = mg_find(osv, 't'))) {
- SAVESPTR(mg->mg_obj);
- mg->mg_obj = osv;
- }
- SvFLAGS(osv) |= (SvFLAGS(osv) &
- (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
- PL_tainted = oldtainted;
- }
- SvMAGIC(sv) = SvMAGIC(osv);
- SvFLAGS(sv) |= SvMAGICAL(osv);
- /* XXX SvMAGIC() is *shared* between osv and sv. This can
- * lead to coredumps when both SVs are destroyed without one
- * of their SvMAGIC() slots being NULLed. */
- PL_localizing = 1;
- SvSETMAGIC(sv);
- PL_localizing = 0;
- }
- return sv;
-}
-
-SV *
-Perl_save_scalar(pTHX_ GV *gv)
-{
- SV **sptr = &GvSV(gv);
- SSCHECK(3);
- SSPUSHPTR(SvREFCNT_inc(gv));
- SSPUSHPTR(SvREFCNT_inc(*sptr));
- SSPUSHINT(SAVEt_SV);
- return save_scalar_at(sptr);
-}
-
-SV*
-Perl_save_svref(pTHX_ SV **sptr)
-{
- SSCHECK(3);
- SSPUSHPTR(sptr);
- SSPUSHPTR(SvREFCNT_inc(*sptr));
- SSPUSHINT(SAVEt_SVREF);
- return save_scalar_at(sptr);
-}
-
-/* Like save_sptr(), but also SvREFCNT_dec()s the new value. Can be used to
- * restore a global SV to its prior contents, freeing new value. */
-void
-Perl_save_generic_svref(pTHX_ SV **sptr)
-{
- SSCHECK(3);
- SSPUSHPTR(sptr);
- SSPUSHPTR(SvREFCNT_inc(*sptr));
- SSPUSHINT(SAVEt_GENERIC_SVREF);
-}
-
-/* Like save_pptr(), but also Safefree()s the new value if it is different
- * from the old one. Can be used to restore a global char* to its prior
- * contents, freeing new value. */
-void
-Perl_save_generic_pvref(pTHX_ char **str)
-{
- SSCHECK(3);
- SSPUSHPTR(str);
- SSPUSHPTR(*str);
- SSPUSHINT(SAVEt_GENERIC_PVREF);
-}
-
-void
-Perl_save_gp(pTHX_ GV *gv, I32 empty)
-{
- SSCHECK(6);
- SSPUSHIV((IV)SvLEN(gv));
- SvLEN(gv) = 0; /* forget that anything was allocated here */
- SSPUSHIV((IV)SvCUR(gv));
- SSPUSHPTR(SvPVX(gv));
- SvPOK_off(gv);
- SSPUSHPTR(SvREFCNT_inc(gv));
- SSPUSHPTR(GvGP(gv));
- SSPUSHINT(SAVEt_GP);
-
- if (empty) {
- register GP *gp;
-
- Newz(602, gp, 1, GP);
-
- if (GvCVu(gv))
- PL_sub_generation++; /* taking a method out of circulation */
- if (GvIOp(gv) && (IoFLAGS(GvIOp(gv)) & IOf_ARGV)) {
- gp->gp_io = newIO();
- IoFLAGS(gp->gp_io) |= IOf_ARGV|IOf_START;
- }
- GvGP(gv) = gp_ref(gp);
- GvSV(gv) = NEWSV(72,0);
- GvLINE(gv) = CopLINE(PL_curcop);
- GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : "";
- GvEGV(gv) = gv;
- }
- else {
- gp_ref(GvGP(gv));
- GvINTRO_on(gv);
- }
-}
-
-AV *
-Perl_save_ary(pTHX_ GV *gv)
-{
- AV *oav = GvAVn(gv);
- AV *av;
-
- if (!AvREAL(oav) && AvREIFY(oav))
- av_reify(oav);
- SSCHECK(3);
- SSPUSHPTR(gv);
- SSPUSHPTR(oav);
- SSPUSHINT(SAVEt_AV);
-
- GvAV(gv) = Null(AV*);
- av = GvAVn(gv);
- if (SvMAGIC(oav)) {
- SvMAGIC(av) = SvMAGIC(oav);
- SvFLAGS((SV*)av) |= SvMAGICAL(oav);
- SvMAGICAL_off(oav);
- SvMAGIC(oav) = 0;
- PL_localizing = 1;
- SvSETMAGIC((SV*)av);
- PL_localizing = 0;
- }
- return av;
-}
-
-HV *
-Perl_save_hash(pTHX_ GV *gv)
-{
- HV *ohv, *hv;
-
- SSCHECK(3);
- SSPUSHPTR(gv);
- SSPUSHPTR(ohv = GvHVn(gv));
- SSPUSHINT(SAVEt_HV);
-
- GvHV(gv) = Null(HV*);
- hv = GvHVn(gv);
- if (SvMAGIC(ohv)) {
- SvMAGIC(hv) = SvMAGIC(ohv);
- SvFLAGS((SV*)hv) |= SvMAGICAL(ohv);
- SvMAGICAL_off(ohv);
- SvMAGIC(ohv) = 0;
- PL_localizing = 1;
- SvSETMAGIC((SV*)hv);
- PL_localizing = 0;
- }
- return hv;
-}
-
-void
-Perl_save_item(pTHX_ register SV *item)
-{
- register SV *sv = NEWSV(0,0);
-
- sv_setsv(sv,item);
- SSCHECK(3);
- SSPUSHPTR(item); /* remember the pointer */
- SSPUSHPTR(sv); /* remember the value */
- SSPUSHINT(SAVEt_ITEM);
-}
-
-void
-Perl_save_int(pTHX_ int *intp)
-{
- SSCHECK(3);
- SSPUSHINT(*intp);
- SSPUSHPTR(intp);
- SSPUSHINT(SAVEt_INT);
-}
-
-void
-Perl_save_long(pTHX_ long int *longp)
-{
- SSCHECK(3);
- SSPUSHLONG(*longp);
- SSPUSHPTR(longp);
- SSPUSHINT(SAVEt_LONG);
-}
-
-void
-Perl_save_I32(pTHX_ I32 *intp)
-{
- SSCHECK(3);
- SSPUSHINT(*intp);
- SSPUSHPTR(intp);
- SSPUSHINT(SAVEt_I32);
-}
-
-void
-Perl_save_I16(pTHX_ I16 *intp)
-{
- SSCHECK(3);
- SSPUSHINT(*intp);
- SSPUSHPTR(intp);
- SSPUSHINT(SAVEt_I16);
-}
-
-void
-Perl_save_I8(pTHX_ I8 *bytep)
-{
- SSCHECK(3);
- SSPUSHINT(*bytep);
- SSPUSHPTR(bytep);
- SSPUSHINT(SAVEt_I8);
-}
-
-void
-Perl_save_iv(pTHX_ IV *ivp)
-{
- SSCHECK(3);
- SSPUSHIV(*ivp);
- SSPUSHPTR(ivp);
- SSPUSHINT(SAVEt_IV);
-}
-
-/* Cannot use save_sptr() to store a char* since the SV** cast will
- * force word-alignment and we'll miss the pointer.
- */
-void
-Perl_save_pptr(pTHX_ char **pptr)
-{
- SSCHECK(3);
- SSPUSHPTR(*pptr);
- SSPUSHPTR(pptr);
- SSPUSHINT(SAVEt_PPTR);
-}
-
-void
-Perl_save_vptr(pTHX_ void *ptr)
-{
- SSCHECK(3);
- SSPUSHPTR(*(char**)ptr);
- SSPUSHPTR(ptr);
- SSPUSHINT(SAVEt_VPTR);
-}
-
-void
-Perl_save_sptr(pTHX_ SV **sptr)
-{
- SSCHECK(3);
- SSPUSHPTR(*sptr);
- SSPUSHPTR(sptr);
- SSPUSHINT(SAVEt_SPTR);
-}
-
-void
-Perl_save_padsv(pTHX_ PADOFFSET off)
-{
- SSCHECK(4);
- SSPUSHPTR(PL_curpad[off]);
- SSPUSHPTR(PL_curpad);
- SSPUSHLONG((long)off);
- SSPUSHINT(SAVEt_PADSV);
-}
-
-SV **
-Perl_save_threadsv(pTHX_ PADOFFSET i)
-{
-#ifdef USE_THREADS
- SV **svp = &THREADSV(i); /* XXX Change to save by offset */
- DEBUG_S(PerlIO_printf(Perl_debug_log, "save_threadsv %"UVuf": %p %p:%s\n",
- (UV)i, svp, *svp, SvPEEK(*svp)));
- save_svref(svp);
- return svp;
-#else
- Perl_croak(aTHX_ "panic: save_threadsv called in non-threaded perl");
- return 0;
-#endif /* USE_THREADS */
-}
-
-void
-Perl_save_nogv(pTHX_ GV *gv)
-{
- SSCHECK(2);
- SSPUSHPTR(gv);
- SSPUSHINT(SAVEt_NSTAB);
-}
-
-void
-Perl_save_hptr(pTHX_ HV **hptr)
-{
- SSCHECK(3);
- SSPUSHPTR(*hptr);
- SSPUSHPTR(hptr);
- SSPUSHINT(SAVEt_HPTR);
-}
-
-void
-Perl_save_aptr(pTHX_ AV **aptr)
-{
- SSCHECK(3);
- SSPUSHPTR(*aptr);
- SSPUSHPTR(aptr);
- SSPUSHINT(SAVEt_APTR);
-}
-
-void
-Perl_save_freesv(pTHX_ SV *sv)
-{
- SSCHECK(2);
- SSPUSHPTR(sv);
- SSPUSHINT(SAVEt_FREESV);
-}
-
-void
-Perl_save_mortalizesv(pTHX_ SV *sv)
-{
- SSCHECK(2);
- SSPUSHPTR(sv);
- SSPUSHINT(SAVEt_MORTALIZESV);
-}
-
-void
-Perl_save_freeop(pTHX_ OP *o)
-{
- SSCHECK(2);
- SSPUSHPTR(o);
- SSPUSHINT(SAVEt_FREEOP);
-}
-
-void
-Perl_save_freepv(pTHX_ char *pv)
-{
- SSCHECK(2);
- SSPUSHPTR(pv);
- SSPUSHINT(SAVEt_FREEPV);
-}
-
-void
-Perl_save_clearsv(pTHX_ SV **svp)
-{
- SSCHECK(2);
- SSPUSHLONG((long)(svp-PL_curpad));
- SSPUSHINT(SAVEt_CLEARSV);
-}
-
-void
-Perl_save_delete(pTHX_ HV *hv, char *key, I32 klen)
-{
- SSCHECK(4);
- SSPUSHINT(klen);
- SSPUSHPTR(key);
- SSPUSHPTR(SvREFCNT_inc(hv));
- SSPUSHINT(SAVEt_DELETE);
-}
-
-void
-Perl_save_list(pTHX_ register SV **sarg, I32 maxsarg)
-{
- register SV *sv;
- register I32 i;
-
- for (i = 1; i <= maxsarg; i++) {
- sv = NEWSV(0,0);
- sv_setsv(sv,sarg[i]);
- SSCHECK(3);
- SSPUSHPTR(sarg[i]); /* remember the pointer */
- SSPUSHPTR(sv); /* remember the value */
- SSPUSHINT(SAVEt_ITEM);
- }
-}
-
-void
-Perl_save_destructor(pTHX_ DESTRUCTORFUNC_NOCONTEXT_t f, void* p)
-{
- SSCHECK(3);
- SSPUSHDPTR(f);
- SSPUSHPTR(p);
- SSPUSHINT(SAVEt_DESTRUCTOR);
-}
-
-void
-Perl_save_destructor_x(pTHX_ DESTRUCTORFUNC_t f, void* p)
-{
- SSCHECK(3);
- SSPUSHDXPTR(f);
- SSPUSHPTR(p);
- SSPUSHINT(SAVEt_DESTRUCTOR_X);
-}
-
-void
-Perl_save_aelem(pTHX_ AV *av, I32 idx, SV **sptr)
-{
- SSCHECK(4);
- SSPUSHPTR(SvREFCNT_inc(av));
- SSPUSHINT(idx);
- SSPUSHPTR(SvREFCNT_inc(*sptr));
- SSPUSHINT(SAVEt_AELEM);
- save_scalar_at(sptr);
-}
-
-void
-Perl_save_helem(pTHX_ HV *hv, SV *key, SV **sptr)
-{
- SSCHECK(4);
- SSPUSHPTR(SvREFCNT_inc(hv));
- SSPUSHPTR(SvREFCNT_inc(key));
- SSPUSHPTR(SvREFCNT_inc(*sptr));
- SSPUSHINT(SAVEt_HELEM);
- save_scalar_at(sptr);
-}
-
-void
-Perl_save_op(pTHX)
-{
- SSCHECK(2);
- SSPUSHPTR(PL_op);
- SSPUSHINT(SAVEt_OP);
-}
-
-I32
-Perl_save_alloc(pTHX_ I32 size, I32 pad)
-{
- register I32 start = pad + ((char*)&PL_savestack[PL_savestack_ix]
- - (char*)PL_savestack);
- register I32 elems = 1 + ((size + pad - 1) / sizeof(*PL_savestack));
-
- /* SSCHECK may not be good enough */
- while (PL_savestack_ix + elems + 2 > PL_savestack_max)
- savestack_grow();
-
- PL_savestack_ix += elems;
- SSPUSHINT(elems);
- SSPUSHINT(SAVEt_ALLOC);
- return start;
-}
-
-void
-Perl_leave_scope(pTHX_ I32 base)
-{
- register SV *sv;
- register SV *value;
- register GV *gv;
- register AV *av;
- register HV *hv;
- register void* ptr;
- register char* str;
- I32 i;
-
- if (base < -1)
- Perl_croak(aTHX_ "panic: corrupt saved stack index");
- while (PL_savestack_ix > base) {
- switch (SSPOPINT) {
- case SAVEt_ITEM: /* normal string */
- value = (SV*)SSPOPPTR;
- sv = (SV*)SSPOPPTR;
- sv_replace(sv,value);
- PL_localizing = 2;
- SvSETMAGIC(sv);
- PL_localizing = 0;
- break;
- case SAVEt_SV: /* scalar reference */
- value = (SV*)SSPOPPTR;
- gv = (GV*)SSPOPPTR;
- ptr = &GvSV(gv);
- SvREFCNT_dec(gv);
- goto restore_sv;
- case SAVEt_GENERIC_PVREF: /* generic pv */
- str = (char*)SSPOPPTR;
- ptr = SSPOPPTR;
- if (*(char**)ptr != str) {
- Safefree(*(char**)ptr);
- *(char**)ptr = str;
- }
- break;
- case SAVEt_GENERIC_SVREF: /* generic sv */
- value = (SV*)SSPOPPTR;
- ptr = SSPOPPTR;
- sv = *(SV**)ptr;
- *(SV**)ptr = value;
- SvREFCNT_dec(sv);
- SvREFCNT_dec(value);
- break;
- case SAVEt_SVREF: /* scalar reference */
- value = (SV*)SSPOPPTR;
- ptr = SSPOPPTR;
- restore_sv:
- sv = *(SV**)ptr;
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "restore svref: %p %p:%s -> %p:%s\n",
- ptr, sv, SvPEEK(sv), value, SvPEEK(value)));
- if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv) &&
- SvTYPE(sv) != SVt_PVGV)
- {
- (void)SvUPGRADE(value, SvTYPE(sv));
- SvMAGIC(value) = SvMAGIC(sv);
- SvFLAGS(value) |= SvMAGICAL(sv);
- SvMAGICAL_off(sv);
- SvMAGIC(sv) = 0;
- }
- /* XXX This branch is pretty bogus. This code irretrievably
- * clears(!) the magic on the SV (either to avoid further
- * croaking that might ensue when the SvSETMAGIC() below is
- * called, or to avoid two different SVs pointing at the same
- * SvMAGIC()). This needs a total rethink. --GSAR */
- else if (SvTYPE(value) >= SVt_PVMG && SvMAGIC(value) &&
- SvTYPE(value) != SVt_PVGV)
- {
- SvFLAGS(value) |= (SvFLAGS(value) &
- (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
- SvMAGICAL_off(value);
- /* XXX this is a leak when we get here because the
- * mg_get() in save_scalar_at() croaked */
- SvMAGIC(value) = 0;
- }
- SvREFCNT_dec(sv);
- *(SV**)ptr = value;
- PL_localizing = 2;
- SvSETMAGIC(value);
- PL_localizing = 0;
- SvREFCNT_dec(value);
- break;
- case SAVEt_AV: /* array reference */
- av = (AV*)SSPOPPTR;
- gv = (GV*)SSPOPPTR;
- if (GvAV(gv)) {
- AV *goner = GvAV(gv);
- SvMAGIC(av) = SvMAGIC(goner);
- SvFLAGS((SV*)av) |= SvMAGICAL(goner);
- SvMAGICAL_off(goner);
- SvMAGIC(goner) = 0;
- SvREFCNT_dec(goner);
- }
- GvAV(gv) = av;
- if (SvMAGICAL(av)) {
- PL_localizing = 2;
- SvSETMAGIC((SV*)av);
- PL_localizing = 0;
- }
- break;
- case SAVEt_HV: /* hash reference */
- hv = (HV*)SSPOPPTR;
- gv = (GV*)SSPOPPTR;
- if (GvHV(gv)) {
- HV *goner = GvHV(gv);
- SvMAGIC(hv) = SvMAGIC(goner);
- SvFLAGS(hv) |= SvMAGICAL(goner);
- SvMAGICAL_off(goner);
- SvMAGIC(goner) = 0;
- SvREFCNT_dec(goner);
- }
- GvHV(gv) = hv;
- if (SvMAGICAL(hv)) {
- PL_localizing = 2;
- SvSETMAGIC((SV*)hv);
- PL_localizing = 0;
- }
- break;
- case SAVEt_INT: /* int reference */
- ptr = SSPOPPTR;
- *(int*)ptr = (int)SSPOPINT;
- break;
- case SAVEt_LONG: /* long reference */
- ptr = SSPOPPTR;
- *(long*)ptr = (long)SSPOPLONG;
- break;
- case SAVEt_I32: /* I32 reference */
- ptr = SSPOPPTR;
- *(I32*)ptr = (I32)SSPOPINT;
- break;
- case SAVEt_I16: /* I16 reference */
- ptr = SSPOPPTR;
- *(I16*)ptr = (I16)SSPOPINT;
- break;
- case SAVEt_I8: /* I8 reference */
- ptr = SSPOPPTR;
- *(I8*)ptr = (I8)SSPOPINT;
- break;
- case SAVEt_IV: /* IV reference */
- ptr = SSPOPPTR;
- *(IV*)ptr = (IV)SSPOPIV;
- break;
- case SAVEt_SPTR: /* SV* reference */
- ptr = SSPOPPTR;
- *(SV**)ptr = (SV*)SSPOPPTR;
- break;
- case SAVEt_VPTR: /* random* reference */
- case SAVEt_PPTR: /* char* reference */
- ptr = SSPOPPTR;
- *(char**)ptr = (char*)SSPOPPTR;
- break;
- case SAVEt_HPTR: /* HV* reference */
- ptr = SSPOPPTR;
- *(HV**)ptr = (HV*)SSPOPPTR;
- break;
- case SAVEt_APTR: /* AV* reference */
- ptr = SSPOPPTR;
- *(AV**)ptr = (AV*)SSPOPPTR;
- break;
- case SAVEt_NSTAB:
- gv = (GV*)SSPOPPTR;
- (void)sv_clear((SV*)gv);
- break;
- case SAVEt_GP: /* scalar reference */
- ptr = SSPOPPTR;
- gv = (GV*)SSPOPPTR;
- if (SvPVX(gv) && SvLEN(gv) > 0) {
- Safefree(SvPVX(gv));
- }
- SvPVX(gv) = (char *)SSPOPPTR;
- SvCUR(gv) = (STRLEN)SSPOPIV;
- SvLEN(gv) = (STRLEN)SSPOPIV;
- gp_free(gv);
- GvGP(gv) = (GP*)ptr;
- if (GvCVu(gv))
- PL_sub_generation++; /* putting a method back into circulation */
- SvREFCNT_dec(gv);
- break;
- case SAVEt_FREESV:
- ptr = SSPOPPTR;
- SvREFCNT_dec((SV*)ptr);
- break;
- case SAVEt_MORTALIZESV:
- ptr = SSPOPPTR;
- sv_2mortal((SV*)ptr);
- break;
- case SAVEt_FREEOP:
- ptr = SSPOPPTR;
- if (PL_comppad)
- PL_curpad = AvARRAY(PL_comppad);
- op_free((OP*)ptr);
- break;
- case SAVEt_FREEPV:
- ptr = SSPOPPTR;
- Safefree((char*)ptr);
- break;
- case SAVEt_CLEARSV:
- ptr = (void*)&PL_curpad[SSPOPLONG];
- sv = *(SV**)ptr;
- /* Can clear pad variable in place? */
- if (SvREFCNT(sv) <= 1 && !SvOBJECT(sv)) {
- if (SvTHINKFIRST(sv))
- sv_force_normal(sv);
- if (SvMAGICAL(sv))
- mg_free(sv);
-
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- break;
- case SVt_PVAV:
- av_clear((AV*)sv);
- break;
- case SVt_PVHV:
- hv_clear((HV*)sv);
- break;
- case SVt_PVCV:
- Perl_croak(aTHX_ "panic: leave_scope pad code");
- case SVt_RV:
- case SVt_IV:
- case SVt_NV:
- (void)SvOK_off(sv);
- break;
- default:
- (void)SvOK_off(sv);
- (void)SvOOK_off(sv);
- break;
- }
- }
- else { /* Someone has a claim on this, so abandon it. */
- U32 padflags = SvFLAGS(sv) & (SVs_PADBUSY|SVs_PADMY|SVs_PADTMP);
- switch (SvTYPE(sv)) { /* Console ourselves with a new value */
- case SVt_PVAV: *(SV**)ptr = (SV*)newAV(); break;
- case SVt_PVHV: *(SV**)ptr = (SV*)newHV(); break;
- default: *(SV**)ptr = NEWSV(0,0); break;
- }
- SvREFCNT_dec(sv); /* Cast current value to the winds. */
- SvFLAGS(*(SV**)ptr) |= padflags; /* preserve pad nature */
- }
- break;
- case SAVEt_DELETE:
- ptr = SSPOPPTR;
- hv = (HV*)ptr;
- ptr = SSPOPPTR;
- (void)hv_delete(hv, (char*)ptr, (U32)SSPOPINT, G_DISCARD);
- SvREFCNT_dec(hv);
- Safefree(ptr);
- break;
- case SAVEt_DESTRUCTOR:
- ptr = SSPOPPTR;
- (*SSPOPDPTR)(ptr);
- break;
- case SAVEt_DESTRUCTOR_X:
- ptr = SSPOPPTR;
- (*SSPOPDXPTR)(aTHXo_ ptr);
- break;
- case SAVEt_REGCONTEXT:
- case SAVEt_ALLOC:
- i = SSPOPINT;
- PL_savestack_ix -= i; /* regexp must have croaked */
- break;
- case SAVEt_STACK_POS: /* Position on Perl stack */
- i = SSPOPINT;
- PL_stack_sp = PL_stack_base + i;
- break;
- case SAVEt_AELEM: /* array element */
- value = (SV*)SSPOPPTR;
- i = SSPOPINT;
- av = (AV*)SSPOPPTR;
- ptr = av_fetch(av,i,1);
- if (ptr) {
- sv = *(SV**)ptr;
- if (sv && sv != &PL_sv_undef) {
- if (SvTIED_mg((SV*)av, 'P'))
- (void)SvREFCNT_inc(sv);
- SvREFCNT_dec(av);
- goto restore_sv;
- }
- }
- SvREFCNT_dec(av);
- SvREFCNT_dec(value);
- break;
- case SAVEt_HELEM: /* hash element */
- value = (SV*)SSPOPPTR;
- sv = (SV*)SSPOPPTR;
- hv = (HV*)SSPOPPTR;
- ptr = hv_fetch_ent(hv, sv, 1, 0);
- if (ptr) {
- SV *oval = HeVAL((HE*)ptr);
- if (oval && oval != &PL_sv_undef) {
- ptr = &HeVAL((HE*)ptr);
- if (SvTIED_mg((SV*)hv, 'P'))
- (void)SvREFCNT_inc(*(SV**)ptr);
- SvREFCNT_dec(hv);
- SvREFCNT_dec(sv);
- goto restore_sv;
- }
- }
- SvREFCNT_dec(hv);
- SvREFCNT_dec(sv);
- SvREFCNT_dec(value);
- break;
- case SAVEt_OP:
- PL_op = (OP*)SSPOPPTR;
- break;
- case SAVEt_HINTS:
- *(I32*)&PL_hints = (I32)SSPOPINT;
- break;
- case SAVEt_COMPPAD:
- PL_comppad = (AV*)SSPOPPTR;
- if (PL_comppad)
- PL_curpad = AvARRAY(PL_comppad);
- else
- PL_curpad = Null(SV**);
- break;
- case SAVEt_PADSV:
- {
- PADOFFSET off = (PADOFFSET)SSPOPLONG;
- ptr = SSPOPPTR;
- if (ptr)
- ((SV**)ptr)[off] = (SV*)SSPOPPTR;
- }
- break;
- default:
- Perl_croak(aTHX_ "panic: leave_scope inconsistency");
- }
- }
-}
-
-void
-Perl_cx_dump(pTHX_ PERL_CONTEXT *cx)
-{
-#ifdef DEBUGGING
- PerlIO_printf(Perl_debug_log, "CX %ld = %s\n", (long)(cx - cxstack), PL_block_type[CxTYPE(cx)]);
- if (CxTYPE(cx) != CXt_SUBST) {
- PerlIO_printf(Perl_debug_log, "BLK_OLDSP = %ld\n", (long)cx->blk_oldsp);
- PerlIO_printf(Perl_debug_log, "BLK_OLDCOP = 0x%"UVxf"\n",
- PTR2UV(cx->blk_oldcop));
- PerlIO_printf(Perl_debug_log, "BLK_OLDMARKSP = %ld\n", (long)cx->blk_oldmarksp);
- PerlIO_printf(Perl_debug_log, "BLK_OLDSCOPESP = %ld\n", (long)cx->blk_oldscopesp);
- PerlIO_printf(Perl_debug_log, "BLK_OLDRETSP = %ld\n", (long)cx->blk_oldretsp);
- PerlIO_printf(Perl_debug_log, "BLK_OLDPM = 0x%"UVxf"\n",
- PTR2UV(cx->blk_oldpm));
- PerlIO_printf(Perl_debug_log, "BLK_GIMME = %s\n", cx->blk_gimme ? "LIST" : "SCALAR");
- }
- switch (CxTYPE(cx)) {
- case CXt_NULL:
- case CXt_BLOCK:
- break;
- case CXt_FORMAT:
- PerlIO_printf(Perl_debug_log, "BLK_SUB.CV = 0x%"UVxf"\n",
- PTR2UV(cx->blk_sub.cv));
- PerlIO_printf(Perl_debug_log, "BLK_SUB.GV = 0x%"UVxf"\n",
- PTR2UV(cx->blk_sub.gv));
- PerlIO_printf(Perl_debug_log, "BLK_SUB.DFOUTGV = 0x%"UVxf"\n",
- PTR2UV(cx->blk_sub.dfoutgv));
- PerlIO_printf(Perl_debug_log, "BLK_SUB.HASARGS = %d\n",
- (int)cx->blk_sub.hasargs);
- break;
- case CXt_SUB:
- PerlIO_printf(Perl_debug_log, "BLK_SUB.CV = 0x%"UVxf"\n",
- PTR2UV(cx->blk_sub.cv));
- PerlIO_printf(Perl_debug_log, "BLK_SUB.OLDDEPTH = %ld\n",
- (long)cx->blk_sub.olddepth);
- PerlIO_printf(Perl_debug_log, "BLK_SUB.HASARGS = %d\n",
- (int)cx->blk_sub.hasargs);
- PerlIO_printf(Perl_debug_log, "BLK_SUB.LVAL = %d\n",
- (int)cx->blk_sub.lval);
- break;
- case CXt_EVAL:
- PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_IN_EVAL = %ld\n",
- (long)cx->blk_eval.old_in_eval);
- PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_OP_TYPE = %s (%s)\n",
- PL_op_name[cx->blk_eval.old_op_type],
- PL_op_desc[cx->blk_eval.old_op_type]);
- if (cx->blk_eval.old_namesv)
- PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_NAME = %s\n",
- SvPVX(cx->blk_eval.old_namesv));
- PerlIO_printf(Perl_debug_log, "BLK_EVAL.OLD_EVAL_ROOT = 0x%"UVxf"\n",
- PTR2UV(cx->blk_eval.old_eval_root));
- break;
-
- case CXt_LOOP:
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.LABEL = %s\n",
- cx->blk_loop.label);
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.RESETSP = %ld\n",
- (long)cx->blk_loop.resetsp);
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.REDO_OP = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.redo_op));
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.NEXT_OP = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.next_op));
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.LAST_OP = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.last_op));
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERIX = %ld\n",
- (long)cx->blk_loop.iterix);
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERARY = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.iterary));
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERVAR = 0x%"UVxf"\n",
- PTR2UV(CxITERVAR(cx)));
- if (CxITERVAR(cx))
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERSAVE = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.itersave));
- PerlIO_printf(Perl_debug_log, "BLK_LOOP.ITERLVAL = 0x%"UVxf"\n",
- PTR2UV(cx->blk_loop.iterlval));
- break;
-
- case CXt_SUBST:
- PerlIO_printf(Perl_debug_log, "SB_ITERS = %ld\n",
- (long)cx->sb_iters);
- PerlIO_printf(Perl_debug_log, "SB_MAXITERS = %ld\n",
- (long)cx->sb_maxiters);
- PerlIO_printf(Perl_debug_log, "SB_RFLAGS = %ld\n",
- (long)cx->sb_rflags);
- PerlIO_printf(Perl_debug_log, "SB_ONCE = %ld\n",
- (long)cx->sb_once);
- PerlIO_printf(Perl_debug_log, "SB_ORIG = %s\n",
- cx->sb_orig);
- PerlIO_printf(Perl_debug_log, "SB_DSTR = 0x%"UVxf"\n",
- PTR2UV(cx->sb_dstr));
- PerlIO_printf(Perl_debug_log, "SB_TARG = 0x%"UVxf"\n",
- PTR2UV(cx->sb_targ));
- PerlIO_printf(Perl_debug_log, "SB_S = 0x%"UVxf"\n",
- PTR2UV(cx->sb_s));
- PerlIO_printf(Perl_debug_log, "SB_M = 0x%"UVxf"\n",
- PTR2UV(cx->sb_m));
- PerlIO_printf(Perl_debug_log, "SB_STREND = 0x%"UVxf"\n",
- PTR2UV(cx->sb_strend));
- PerlIO_printf(Perl_debug_log, "SB_RXRES = 0x%"UVxf"\n",
- PTR2UV(cx->sb_rxres));
- break;
- }
-#endif /* DEBUGGING */
-}
diff --git a/contrib/perl5/scope.h b/contrib/perl5/scope.h
deleted file mode 100644
index 798304d..0000000
--- a/contrib/perl5/scope.h
+++ /dev/null
@@ -1,385 +0,0 @@
-#define SAVEt_ITEM 0
-#define SAVEt_SV 1
-#define SAVEt_AV 2
-#define SAVEt_HV 3
-#define SAVEt_INT 4
-#define SAVEt_LONG 5
-#define SAVEt_I32 6
-#define SAVEt_IV 7
-#define SAVEt_SPTR 8
-#define SAVEt_APTR 9
-#define SAVEt_HPTR 10
-#define SAVEt_PPTR 11
-#define SAVEt_NSTAB 12
-#define SAVEt_SVREF 13
-#define SAVEt_GP 14
-#define SAVEt_FREESV 15
-#define SAVEt_FREEOP 16
-#define SAVEt_FREEPV 17
-#define SAVEt_CLEARSV 18
-#define SAVEt_DELETE 19
-#define SAVEt_DESTRUCTOR 20
-#define SAVEt_REGCONTEXT 21
-#define SAVEt_STACK_POS 22
-#define SAVEt_I16 23
-#define SAVEt_AELEM 24
-#define SAVEt_HELEM 25
-#define SAVEt_OP 26
-#define SAVEt_HINTS 27
-#define SAVEt_ALLOC 28
-#define SAVEt_GENERIC_SVREF 29
-#define SAVEt_DESTRUCTOR_X 30
-#define SAVEt_VPTR 31
-#define SAVEt_I8 32
-#define SAVEt_COMPPAD 33
-#define SAVEt_GENERIC_PVREF 34
-#define SAVEt_PADSV 35
-#define SAVEt_MORTALIZESV 36
-
-#define SSCHECK(need) if (PL_savestack_ix + need > PL_savestack_max) savestack_grow()
-#define SSPUSHINT(i) (PL_savestack[PL_savestack_ix++].any_i32 = (I32)(i))
-#define SSPUSHLONG(i) (PL_savestack[PL_savestack_ix++].any_long = (long)(i))
-#define SSPUSHIV(i) (PL_savestack[PL_savestack_ix++].any_iv = (IV)(i))
-#define SSPUSHPTR(p) (PL_savestack[PL_savestack_ix++].any_ptr = (void*)(p))
-#define SSPUSHDPTR(p) (PL_savestack[PL_savestack_ix++].any_dptr = (p))
-#define SSPUSHDXPTR(p) (PL_savestack[PL_savestack_ix++].any_dxptr = (p))
-#define SSPOPINT (PL_savestack[--PL_savestack_ix].any_i32)
-#define SSPOPLONG (PL_savestack[--PL_savestack_ix].any_long)
-#define SSPOPIV (PL_savestack[--PL_savestack_ix].any_iv)
-#define SSPOPPTR (PL_savestack[--PL_savestack_ix].any_ptr)
-#define SSPOPDPTR (PL_savestack[--PL_savestack_ix].any_dptr)
-#define SSPOPDXPTR (PL_savestack[--PL_savestack_ix].any_dxptr)
-
-/*
-=for apidoc Ams||SAVETMPS
-Opening bracket for temporaries on a callback. See C<FREETMPS> and
-L<perlcall>.
-
-=for apidoc Ams||FREETMPS
-Closing bracket for temporaries on a callback. See C<SAVETMPS> and
-L<perlcall>.
-
-=for apidoc Ams||ENTER
-Opening bracket on a callback. See C<LEAVE> and L<perlcall>.
-
-=for apidoc Ams||LEAVE
-Closing bracket on a callback. See C<ENTER> and L<perlcall>.
-
-=cut
-*/
-
-#define SAVETMPS save_int((int*)&PL_tmps_floor), PL_tmps_floor = PL_tmps_ix
-#define FREETMPS if (PL_tmps_ix > PL_tmps_floor) free_tmps()
-
-#ifdef DEBUGGING
-#define ENTER \
- STMT_START { \
- push_scope(); \
- DEBUG_l(WITH_THR(Perl_deb(aTHX_ "ENTER scope %ld at %s:%d\n", \
- PL_scopestack_ix, __FILE__, __LINE__))); \
- } STMT_END
-#define LEAVE \
- STMT_START { \
- DEBUG_l(WITH_THR(Perl_deb(aTHX_ "LEAVE scope %ld at %s:%d\n", \
- PL_scopestack_ix, __FILE__, __LINE__))); \
- pop_scope(); \
- } STMT_END
-#else
-#define ENTER push_scope()
-#define LEAVE pop_scope()
-#endif
-#define LEAVE_SCOPE(old) if (PL_savestack_ix > old) leave_scope(old)
-
-/*
- * Not using SOFT_CAST on SAVESPTR, SAVEGENERICSV and SAVEFREESV
- * because these are used for several kinds of pointer values
- */
-#define SAVEI8(i) save_I8(SOFT_CAST(I8*)&(i))
-#define SAVEI16(i) save_I16(SOFT_CAST(I16*)&(i))
-#define SAVEI32(i) save_I32(SOFT_CAST(I32*)&(i))
-#define SAVEINT(i) save_int(SOFT_CAST(int*)&(i))
-#define SAVEIV(i) save_iv(SOFT_CAST(IV*)&(i))
-#define SAVELONG(l) save_long(SOFT_CAST(long*)&(l))
-#define SAVESPTR(s) save_sptr((SV**)&(s))
-#define SAVEPPTR(s) save_pptr(SOFT_CAST(char**)&(s))
-#define SAVEVPTR(s) save_vptr((void*)&(s))
-#define SAVEPADSV(s) save_padsv(s)
-#define SAVEFREESV(s) save_freesv((SV*)(s))
-#define SAVEMORTALIZESV(s) save_mortalizesv((SV*)(s))
-#define SAVEFREEOP(o) save_freeop(SOFT_CAST(OP*)(o))
-#define SAVEFREEPV(p) save_freepv(SOFT_CAST(char*)(p))
-#define SAVECLEARSV(sv) save_clearsv(SOFT_CAST(SV**)&(sv))
-#define SAVEGENERICSV(s) save_generic_svref((SV**)&(s))
-#define SAVEGENERICPV(s) save_generic_pvref((char**)&(s))
-#define SAVEDELETE(h,k,l) \
- save_delete(SOFT_CAST(HV*)(h), SOFT_CAST(char*)(k), (I32)(l))
-#define SAVEDESTRUCTOR(f,p) \
- save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), SOFT_CAST(void*)(p))
-
-#define SAVEDESTRUCTOR_X(f,p) \
- save_destructor_x((DESTRUCTORFUNC_t)(f), SOFT_CAST(void*)(p))
-
-#define SAVESTACK_POS() \
- STMT_START { \
- SSCHECK(2); \
- SSPUSHINT(PL_stack_sp - PL_stack_base); \
- SSPUSHINT(SAVEt_STACK_POS); \
- } STMT_END
-
-#define SAVEOP() save_op()
-
-#define SAVEHINTS() \
- STMT_START { \
- if (PL_hints & HINT_LOCALIZE_HH) \
- save_hints(); \
- else { \
- SSCHECK(2); \
- SSPUSHINT(PL_hints); \
- SSPUSHINT(SAVEt_HINTS); \
- } \
- } STMT_END
-
-#define SAVECOMPPAD() \
- STMT_START { \
- if (PL_comppad && PL_curpad == AvARRAY(PL_comppad)) { \
- SSCHECK(2); \
- SSPUSHPTR((SV*)PL_comppad); \
- SSPUSHINT(SAVEt_COMPPAD); \
- } \
- else { \
- SAVEVPTR(PL_curpad); \
- SAVESPTR(PL_comppad); \
- } \
- } STMT_END
-
-#ifdef USE_ITHREADS
-# define SAVECOPSTASH(c) SAVEPPTR(CopSTASHPV(c))
-# define SAVECOPSTASH_FREE(c) SAVEGENERICPV(CopSTASHPV(c))
-# define SAVECOPFILE(c) SAVEPPTR(CopFILE(c))
-# define SAVECOPFILE_FREE(c) SAVEGENERICPV(CopFILE(c))
-#else
-# define SAVECOPSTASH(c) SAVESPTR(CopSTASH(c))
-# define SAVECOPSTASH_FREE(c) SAVECOPSTASH(c) /* XXX not refcounted */
-# define SAVECOPFILE(c) SAVESPTR(CopFILEGV(c))
-# define SAVECOPFILE_FREE(c) SAVEGENERICSV(CopFILEGV(c))
-#endif
-
-#define SAVECOPLINE(c) SAVEI16(CopLINE(c))
-
-/* SSNEW() temporarily allocates a specified number of bytes of data on the
- * savestack. It returns an integer index into the savestack, because a
- * pointer would get broken if the savestack is moved on reallocation.
- * SSNEWa() works like SSNEW(), but also aligns the data to the specified
- * number of bytes. MEM_ALIGNBYTES is perhaps the most useful. The
- * alignment will be preserved therough savestack reallocation *only* if
- * realloc returns data aligned to a size divisible by `align'!
- *
- * SSPTR() converts the index returned by SSNEW/SSNEWa() into a pointer.
- */
-
-#define SSNEW(size) Perl_save_alloc(aTHX_ (size), 0)
-#define SSNEWt(n,t) SSNEW((n)*sizeof(t))
-#define SSNEWa(size,align) Perl_save_alloc(aTHX_ (size), \
- (align - ((int)((caddr_t)&PL_savestack[PL_savestack_ix]) % align)) % align)
-#define SSNEWat(n,t,align) SSNEWa((n)*sizeof(t), align)
-
-#define SSPTR(off,type) ((type) ((char*)PL_savestack + off))
-#define SSPTRt(off,type) ((type*) ((char*)PL_savestack + off))
-
-/* A jmpenv packages the state required to perform a proper non-local jump.
- * Note that there is a start_env initialized when perl starts, and top_env
- * points to this initially, so top_env should always be non-null.
- *
- * Existence of a non-null top_env->je_prev implies it is valid to call
- * longjmp() at that runlevel (we make sure start_env.je_prev is always
- * null to ensure this).
- *
- * je_mustcatch, when set at any runlevel to TRUE, means eval ops must
- * establish a local jmpenv to handle exception traps. Care must be taken
- * to restore the previous value of je_mustcatch before exiting the
- * stack frame iff JMPENV_PUSH was not called in that stack frame.
- * GSAR 97-03-27
- */
-
-struct jmpenv {
- struct jmpenv * je_prev;
- Sigjmp_buf je_buf; /* only for use if !je_throw */
- int je_ret; /* last exception thrown */
- bool je_mustcatch; /* need to call longjmp()? */
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- void (*je_throw)(int v); /* last for bincompat */
- bool je_noset; /* no need for setjmp() */
-#endif
-};
-
-typedef struct jmpenv JMPENV;
-
-#ifdef OP_IN_REGISTER
-#define OP_REG_TO_MEM PL_opsave = op
-#define OP_MEM_TO_REG op = PL_opsave
-#else
-#define OP_REG_TO_MEM NOOP
-#define OP_MEM_TO_REG NOOP
-#endif
-
-/*
- * How to build the first jmpenv.
- *
- * top_env needs to be non-zero. It points to an area
- * in which longjmp() stuff is stored, as C callstack
- * info there at least is thread specific this has to
- * be per-thread. Otherwise a 'die' in a thread gives
- * that thread the C stack of last thread to do an eval {}!
- */
-
-#define JMPENV_BOOTSTRAP \
- STMT_START { \
- Zero(&PL_start_env, 1, JMPENV); \
- PL_start_env.je_ret = -1; \
- PL_start_env.je_mustcatch = TRUE; \
- PL_top_env = &PL_start_env; \
- } STMT_END
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-
-/*
- * These exception-handling macros are split up to
- * ease integration with C++ exceptions.
- *
- * To use C++ try+catch to catch Perl exceptions, an extension author
- * needs to first write an extern "C" function to throw an appropriate
- * exception object; typically it will be or contain an integer,
- * because Perl's internals use integers to track exception types:
- * extern "C" { static void thrower(int i) { throw i; } }
- *
- * Then (as shown below) the author needs to use, not the simple
- * JMPENV_PUSH, but several of its constitutent macros, to arrange for
- * the Perl internals to call thrower() rather than longjmp() to
- * report exceptions:
- *
- * dJMPENV;
- * JMPENV_PUSH_INIT(thrower);
- * try {
- * ... stuff that may throw exceptions ...
- * }
- * catch (int why) { // or whatever matches thrower()
- * JMPENV_POST_CATCH;
- * EXCEPT_SET(why);
- * switch (why) {
- * ... // handle various Perl exception codes
- * }
- * }
- * JMPENV_POP; // don't forget this!
- */
-
-/*
- * Function that catches/throws, and its callback for the
- * body of protected processing.
- */
-typedef void *(CPERLscope(*protect_body_t)) (pTHX_ va_list);
-typedef void *(CPERLscope(*protect_proc_t)) (pTHX_ volatile JMPENV *pcur_env,
- int *, protect_body_t, ...);
-
-#define dJMPENV JMPENV cur_env; \
- volatile JMPENV *pcur_env = ((cur_env.je_noset = 0),&cur_env)
-
-#define JMPENV_PUSH_INIT_ENV(ce,THROWFUNC) \
- STMT_START { \
- (ce).je_throw = (THROWFUNC); \
- (ce).je_ret = -1; \
- (ce).je_mustcatch = FALSE; \
- (ce).je_prev = PL_top_env; \
- PL_top_env = &(ce); \
- OP_REG_TO_MEM; \
- } STMT_END
-
-#define JMPENV_PUSH_INIT(THROWFUNC) JMPENV_PUSH_INIT_ENV(*(JMPENV*)pcur_env,THROWFUNC)
-
-#define JMPENV_POST_CATCH_ENV(ce) \
- STMT_START { \
- OP_MEM_TO_REG; \
- PL_top_env = &(ce); \
- } STMT_END
-
-#define JMPENV_POST_CATCH JMPENV_POST_CATCH_ENV(*(JMPENV*)pcur_env)
-
-#define JMPENV_PUSH_ENV(ce,v) \
- STMT_START { \
- if (!(ce).je_noset) { \
- DEBUG_l(Perl_deb(aTHX_ "Setting up jumplevel %p, was %p\n", \
- ce, PL_top_env)); \
- JMPENV_PUSH_INIT_ENV(ce,NULL); \
- EXCEPT_SET_ENV(ce,PerlProc_setjmp((ce).je_buf, 1));\
- (ce).je_noset = 1; \
- } \
- else \
- EXCEPT_SET_ENV(ce,0); \
- JMPENV_POST_CATCH_ENV(ce); \
- (v) = EXCEPT_GET_ENV(ce); \
- } STMT_END
-
-#define JMPENV_PUSH(v) JMPENV_PUSH_ENV(*(JMPENV*)pcur_env,v)
-
-#define JMPENV_POP_ENV(ce) \
- STMT_START { \
- if (PL_top_env == &(ce)) \
- PL_top_env = (ce).je_prev; \
- } STMT_END
-
-#define JMPENV_POP JMPENV_POP_ENV(*(JMPENV*)pcur_env)
-
-#define JMPENV_JUMP(v) \
- STMT_START { \
- OP_REG_TO_MEM; \
- if (PL_top_env->je_prev) { \
- if (PL_top_env->je_throw) \
- PL_top_env->je_throw(v); \
- else \
- PerlProc_longjmp(PL_top_env->je_buf, (v)); \
- } \
- if ((v) == 2) \
- PerlProc_exit(STATUS_NATIVE_EXPORT); \
- PerlIO_printf(Perl_error_log, "panic: top_env\n"); \
- PerlProc_exit(1); \
- } STMT_END
-
-#define EXCEPT_GET_ENV(ce) ((ce).je_ret)
-#define EXCEPT_GET EXCEPT_GET_ENV(*(JMPENV*)pcur_env)
-#define EXCEPT_SET_ENV(ce,v) ((ce).je_ret = (v))
-#define EXCEPT_SET(v) EXCEPT_SET_ENV(*(JMPENV*)pcur_env,v)
-
-#else /* !PERL_FLEXIBLE_EXCEPTIONS */
-
-#define dJMPENV JMPENV cur_env
-
-#define JMPENV_PUSH(v) \
- STMT_START { \
- DEBUG_l(Perl_deb(aTHX_ "Setting up jumplevel %p, was %p\n", \
- &cur_env, PL_top_env)); \
- cur_env.je_prev = PL_top_env; \
- OP_REG_TO_MEM; \
- cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, 1); \
- OP_MEM_TO_REG; \
- PL_top_env = &cur_env; \
- cur_env.je_mustcatch = FALSE; \
- (v) = cur_env.je_ret; \
- } STMT_END
-
-#define JMPENV_POP \
- STMT_START { PL_top_env = cur_env.je_prev; } STMT_END
-
-#define JMPENV_JUMP(v) \
- STMT_START { \
- OP_REG_TO_MEM; \
- if (PL_top_env->je_prev) \
- PerlProc_longjmp(PL_top_env->je_buf, (v)); \
- if ((v) == 2) \
- PerlProc_exit(STATUS_NATIVE_EXPORT); \
- PerlIO_printf(PerlIO_stderr(), "panic: top_env\n"); \
- PerlProc_exit(1); \
- } STMT_END
-
-#endif /* PERL_FLEXIBLE_EXCEPTIONS */
-
-#define CATCH_GET (PL_top_env->je_mustcatch)
-#define CATCH_SET(v) (PL_top_env->je_mustcatch = (v))
diff --git a/contrib/perl5/sv.c b/contrib/perl5/sv.c
deleted file mode 100644
index 7b8263b..0000000
--- a/contrib/perl5/sv.c
+++ /dev/null
@@ -1,8413 +0,0 @@
-/* sv.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "I wonder what the Entish is for 'yes' and 'no'," he thought.
- */
-
-#include "EXTERN.h"
-#define PERL_IN_SV_C
-#include "perl.h"
-
-#define FCALL *f
-#define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal(sv)
-
-static void do_report_used(pTHXo_ SV *sv);
-static void do_clean_objs(pTHXo_ SV *sv);
-#ifndef DISABLE_DESTRUCTOR_KLUDGE
-static void do_clean_named_objs(pTHXo_ SV *sv);
-#endif
-static void do_clean_all(pTHXo_ SV *sv);
-
-/*
- * "A time to plant, and a time to uproot what was planted..."
- */
-
-#define plant_SV(p) \
- STMT_START { \
- SvANY(p) = (void *)PL_sv_root; \
- SvFLAGS(p) = SVTYPEMASK; \
- PL_sv_root = (p); \
- --PL_sv_count; \
- } STMT_END
-
-/* sv_mutex must be held while calling uproot_SV() */
-#define uproot_SV(p) \
- STMT_START { \
- (p) = PL_sv_root; \
- PL_sv_root = (SV*)SvANY(p); \
- ++PL_sv_count; \
- } STMT_END
-
-#define new_SV(p) \
- STMT_START { \
- LOCK_SV_MUTEX; \
- if (PL_sv_root) \
- uproot_SV(p); \
- else \
- (p) = more_sv(); \
- UNLOCK_SV_MUTEX; \
- SvANY(p) = 0; \
- SvREFCNT(p) = 1; \
- SvFLAGS(p) = 0; \
- } STMT_END
-
-#ifdef DEBUGGING
-
-#define del_SV(p) \
- STMT_START { \
- LOCK_SV_MUTEX; \
- if (PL_debug & 32768) \
- del_sv(p); \
- else \
- plant_SV(p); \
- UNLOCK_SV_MUTEX; \
- } STMT_END
-
-STATIC void
-S_del_sv(pTHX_ SV *p)
-{
- if (PL_debug & 32768) {
- SV* sva;
- SV* sv;
- SV* svend;
- int ok = 0;
- for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
- sv = sva + 1;
- svend = &sva[SvREFCNT(sva)];
- if (p >= sv && p < svend)
- ok = 1;
- }
- if (!ok) {
- if (ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL,
- "Attempt to free non-arena SV: 0x%"UVxf,
- PTR2UV(p));
- return;
- }
- }
- plant_SV(p);
-}
-
-#else /* ! DEBUGGING */
-
-#define del_SV(p) plant_SV(p)
-
-#endif /* DEBUGGING */
-
-void
-Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
-{
- SV* sva = (SV*)ptr;
- register SV* sv;
- register SV* svend;
- Zero(ptr, size, char);
-
- /* The first SV in an arena isn't an SV. */
- SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
- SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
- SvFLAGS(sva) = flags; /* FAKE if not to be freed */
-
- PL_sv_arenaroot = sva;
- PL_sv_root = sva + 1;
-
- svend = &sva[SvREFCNT(sva) - 1];
- sv = sva + 1;
- while (sv < svend) {
- SvANY(sv) = (void *)(SV*)(sv + 1);
- SvFLAGS(sv) = SVTYPEMASK;
- sv++;
- }
- SvANY(sv) = 0;
- SvFLAGS(sv) = SVTYPEMASK;
-}
-
-/* sv_mutex must be held while calling more_sv() */
-STATIC SV*
-S_more_sv(pTHX)
-{
- register SV* sv;
-
- if (PL_nice_chunk) {
- sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
- PL_nice_chunk = Nullch;
- }
- else {
- char *chunk; /* must use New here to match call to */
- New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
- sv_add_arena(chunk, 1008, 0);
- }
- uproot_SV(sv);
- return sv;
-}
-
-STATIC I32
-S_visit(pTHX_ SVFUNC_t f)
-{
- SV* sva;
- SV* sv;
- register SV* svend;
- I32 visited = 0;
-
- for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
- svend = &sva[SvREFCNT(sva)];
- for (sv = sva + 1; sv < svend; ++sv) {
- if (SvTYPE(sv) != SVTYPEMASK && SvREFCNT(sv)) {
- (FCALL)(aTHXo_ sv);
- ++visited;
- }
- }
- }
- return visited;
-}
-
-void
-Perl_sv_report_used(pTHX)
-{
- visit(do_report_used);
-}
-
-void
-Perl_sv_clean_objs(pTHX)
-{
- PL_in_clean_objs = TRUE;
- visit(do_clean_objs);
-#ifndef DISABLE_DESTRUCTOR_KLUDGE
- /* some barnacles may yet remain, clinging to typeglobs */
- visit(do_clean_named_objs);
-#endif
- PL_in_clean_objs = FALSE;
-}
-
-I32
-Perl_sv_clean_all(pTHX)
-{
- I32 cleaned;
- PL_in_clean_all = TRUE;
- cleaned = visit(do_clean_all);
- PL_in_clean_all = FALSE;
- return cleaned;
-}
-
-void
-Perl_sv_free_arenas(pTHX)
-{
- SV* sva;
- SV* svanext;
- XPV *arena, *arenanext;
-
- /* Free arenas here, but be careful about fake ones. (We assume
- contiguity of the fake ones with the corresponding real ones.) */
-
- for (sva = PL_sv_arenaroot; sva; sva = svanext) {
- svanext = (SV*) SvANY(sva);
- while (svanext && SvFAKE(svanext))
- svanext = (SV*) SvANY(svanext);
-
- if (!SvFAKE(sva))
- Safefree((void *)sva);
- }
-
- for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xiv_arenaroot = 0;
-
- for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xnv_arenaroot = 0;
-
- for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xrv_arenaroot = 0;
-
- for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpv_arenaroot = 0;
-
- for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpviv_arenaroot = 0;
-
- for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpvnv_arenaroot = 0;
-
- for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpvcv_arenaroot = 0;
-
- for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpvav_arenaroot = 0;
-
- for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpvhv_arenaroot = 0;
-
- for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpvmg_arenaroot = 0;
-
- for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpvlv_arenaroot = 0;
-
- for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_xpvbm_arenaroot = 0;
-
- for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
- arenanext = (XPV*)arena->xpv_pv;
- Safefree(arena);
- }
- PL_he_arenaroot = 0;
-
- if (PL_nice_chunk)
- Safefree(PL_nice_chunk);
- PL_nice_chunk = Nullch;
- PL_nice_chunk_size = 0;
- PL_sv_arenaroot = 0;
- PL_sv_root = 0;
-}
-
-void
-Perl_report_uninit(pTHX)
-{
- if (PL_op)
- Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
- " in ", PL_op_desc[PL_op->op_type]);
- else
- Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
-}
-
-STATIC XPVIV*
-S_new_xiv(pTHX)
-{
- IV* xiv;
- LOCK_SV_MUTEX;
- if (!PL_xiv_root)
- more_xiv();
- xiv = PL_xiv_root;
- /*
- * See comment in more_xiv() -- RAM.
- */
- PL_xiv_root = *(IV**)xiv;
- UNLOCK_SV_MUTEX;
- return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
-}
-
-STATIC void
-S_del_xiv(pTHX_ XPVIV *p)
-{
- IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
- LOCK_SV_MUTEX;
- *(IV**)xiv = PL_xiv_root;
- PL_xiv_root = xiv;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xiv(pTHX)
-{
- register IV* xiv;
- register IV* xivend;
- XPV* ptr;
- New(705, ptr, 1008/sizeof(XPV), XPV);
- ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
- PL_xiv_arenaroot = ptr; /* to keep Purify happy */
-
- xiv = (IV*) ptr;
- xivend = &xiv[1008 / sizeof(IV) - 1];
- xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
- PL_xiv_root = xiv;
- while (xiv < xivend) {
- *(IV**)xiv = (IV *)(xiv + 1);
- xiv++;
- }
- *(IV**)xiv = 0;
-}
-
-STATIC XPVNV*
-S_new_xnv(pTHX)
-{
- NV* xnv;
- LOCK_SV_MUTEX;
- if (!PL_xnv_root)
- more_xnv();
- xnv = PL_xnv_root;
- PL_xnv_root = *(NV**)xnv;
- UNLOCK_SV_MUTEX;
- return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
-}
-
-STATIC void
-S_del_xnv(pTHX_ XPVNV *p)
-{
- NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
- LOCK_SV_MUTEX;
- *(NV**)xnv = PL_xnv_root;
- PL_xnv_root = xnv;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xnv(pTHX)
-{
- register NV* xnv;
- register NV* xnvend;
- XPV *ptr;
- New(711, ptr, 1008/sizeof(XPV), XPV);
- ptr->xpv_pv = (char*)PL_xnv_arenaroot;
- PL_xnv_arenaroot = ptr;
-
- xnv = (NV*) ptr;
- xnvend = &xnv[1008 / sizeof(NV) - 1];
- xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
- PL_xnv_root = xnv;
- while (xnv < xnvend) {
- *(NV**)xnv = (NV*)(xnv + 1);
- xnv++;
- }
- *(NV**)xnv = 0;
-}
-
-STATIC XRV*
-S_new_xrv(pTHX)
-{
- XRV* xrv;
- LOCK_SV_MUTEX;
- if (!PL_xrv_root)
- more_xrv();
- xrv = PL_xrv_root;
- PL_xrv_root = (XRV*)xrv->xrv_rv;
- UNLOCK_SV_MUTEX;
- return xrv;
-}
-
-STATIC void
-S_del_xrv(pTHX_ XRV *p)
-{
- LOCK_SV_MUTEX;
- p->xrv_rv = (SV*)PL_xrv_root;
- PL_xrv_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xrv(pTHX)
-{
- register XRV* xrv;
- register XRV* xrvend;
- XPV *ptr;
- New(712, ptr, 1008/sizeof(XPV), XPV);
- ptr->xpv_pv = (char*)PL_xrv_arenaroot;
- PL_xrv_arenaroot = ptr;
-
- xrv = (XRV*) ptr;
- xrvend = &xrv[1008 / sizeof(XRV) - 1];
- xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
- PL_xrv_root = xrv;
- while (xrv < xrvend) {
- xrv->xrv_rv = (SV*)(xrv + 1);
- xrv++;
- }
- xrv->xrv_rv = 0;
-}
-
-STATIC XPV*
-S_new_xpv(pTHX)
-{
- XPV* xpv;
- LOCK_SV_MUTEX;
- if (!PL_xpv_root)
- more_xpv();
- xpv = PL_xpv_root;
- PL_xpv_root = (XPV*)xpv->xpv_pv;
- UNLOCK_SV_MUTEX;
- return xpv;
-}
-
-STATIC void
-S_del_xpv(pTHX_ XPV *p)
-{
- LOCK_SV_MUTEX;
- p->xpv_pv = (char*)PL_xpv_root;
- PL_xpv_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpv(pTHX)
-{
- register XPV* xpv;
- register XPV* xpvend;
- New(713, xpv, 1008/sizeof(XPV), XPV);
- xpv->xpv_pv = (char*)PL_xpv_arenaroot;
- PL_xpv_arenaroot = xpv;
-
- xpvend = &xpv[1008 / sizeof(XPV) - 1];
- PL_xpv_root = ++xpv;
- while (xpv < xpvend) {
- xpv->xpv_pv = (char*)(xpv + 1);
- xpv++;
- }
- xpv->xpv_pv = 0;
-}
-
-STATIC XPVIV*
-S_new_xpviv(pTHX)
-{
- XPVIV* xpviv;
- LOCK_SV_MUTEX;
- if (!PL_xpviv_root)
- more_xpviv();
- xpviv = PL_xpviv_root;
- PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
- UNLOCK_SV_MUTEX;
- return xpviv;
-}
-
-STATIC void
-S_del_xpviv(pTHX_ XPVIV *p)
-{
- LOCK_SV_MUTEX;
- p->xpv_pv = (char*)PL_xpviv_root;
- PL_xpviv_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpviv(pTHX)
-{
- register XPVIV* xpviv;
- register XPVIV* xpvivend;
- New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
- xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
- PL_xpviv_arenaroot = xpviv;
-
- xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
- PL_xpviv_root = ++xpviv;
- while (xpviv < xpvivend) {
- xpviv->xpv_pv = (char*)(xpviv + 1);
- xpviv++;
- }
- xpviv->xpv_pv = 0;
-}
-
-STATIC XPVNV*
-S_new_xpvnv(pTHX)
-{
- XPVNV* xpvnv;
- LOCK_SV_MUTEX;
- if (!PL_xpvnv_root)
- more_xpvnv();
- xpvnv = PL_xpvnv_root;
- PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
- UNLOCK_SV_MUTEX;
- return xpvnv;
-}
-
-STATIC void
-S_del_xpvnv(pTHX_ XPVNV *p)
-{
- LOCK_SV_MUTEX;
- p->xpv_pv = (char*)PL_xpvnv_root;
- PL_xpvnv_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpvnv(pTHX)
-{
- register XPVNV* xpvnv;
- register XPVNV* xpvnvend;
- New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
- xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
- PL_xpvnv_arenaroot = xpvnv;
-
- xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
- PL_xpvnv_root = ++xpvnv;
- while (xpvnv < xpvnvend) {
- xpvnv->xpv_pv = (char*)(xpvnv + 1);
- xpvnv++;
- }
- xpvnv->xpv_pv = 0;
-}
-
-STATIC XPVCV*
-S_new_xpvcv(pTHX)
-{
- XPVCV* xpvcv;
- LOCK_SV_MUTEX;
- if (!PL_xpvcv_root)
- more_xpvcv();
- xpvcv = PL_xpvcv_root;
- PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
- UNLOCK_SV_MUTEX;
- return xpvcv;
-}
-
-STATIC void
-S_del_xpvcv(pTHX_ XPVCV *p)
-{
- LOCK_SV_MUTEX;
- p->xpv_pv = (char*)PL_xpvcv_root;
- PL_xpvcv_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpvcv(pTHX)
-{
- register XPVCV* xpvcv;
- register XPVCV* xpvcvend;
- New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
- xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
- PL_xpvcv_arenaroot = xpvcv;
-
- xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
- PL_xpvcv_root = ++xpvcv;
- while (xpvcv < xpvcvend) {
- xpvcv->xpv_pv = (char*)(xpvcv + 1);
- xpvcv++;
- }
- xpvcv->xpv_pv = 0;
-}
-
-STATIC XPVAV*
-S_new_xpvav(pTHX)
-{
- XPVAV* xpvav;
- LOCK_SV_MUTEX;
- if (!PL_xpvav_root)
- more_xpvav();
- xpvav = PL_xpvav_root;
- PL_xpvav_root = (XPVAV*)xpvav->xav_array;
- UNLOCK_SV_MUTEX;
- return xpvav;
-}
-
-STATIC void
-S_del_xpvav(pTHX_ XPVAV *p)
-{
- LOCK_SV_MUTEX;
- p->xav_array = (char*)PL_xpvav_root;
- PL_xpvav_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpvav(pTHX)
-{
- register XPVAV* xpvav;
- register XPVAV* xpvavend;
- New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
- xpvav->xav_array = (char*)PL_xpvav_arenaroot;
- PL_xpvav_arenaroot = xpvav;
-
- xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
- PL_xpvav_root = ++xpvav;
- while (xpvav < xpvavend) {
- xpvav->xav_array = (char*)(xpvav + 1);
- xpvav++;
- }
- xpvav->xav_array = 0;
-}
-
-STATIC XPVHV*
-S_new_xpvhv(pTHX)
-{
- XPVHV* xpvhv;
- LOCK_SV_MUTEX;
- if (!PL_xpvhv_root)
- more_xpvhv();
- xpvhv = PL_xpvhv_root;
- PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
- UNLOCK_SV_MUTEX;
- return xpvhv;
-}
-
-STATIC void
-S_del_xpvhv(pTHX_ XPVHV *p)
-{
- LOCK_SV_MUTEX;
- p->xhv_array = (char*)PL_xpvhv_root;
- PL_xpvhv_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpvhv(pTHX)
-{
- register XPVHV* xpvhv;
- register XPVHV* xpvhvend;
- New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
- xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
- PL_xpvhv_arenaroot = xpvhv;
-
- xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
- PL_xpvhv_root = ++xpvhv;
- while (xpvhv < xpvhvend) {
- xpvhv->xhv_array = (char*)(xpvhv + 1);
- xpvhv++;
- }
- xpvhv->xhv_array = 0;
-}
-
-STATIC XPVMG*
-S_new_xpvmg(pTHX)
-{
- XPVMG* xpvmg;
- LOCK_SV_MUTEX;
- if (!PL_xpvmg_root)
- more_xpvmg();
- xpvmg = PL_xpvmg_root;
- PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
- UNLOCK_SV_MUTEX;
- return xpvmg;
-}
-
-STATIC void
-S_del_xpvmg(pTHX_ XPVMG *p)
-{
- LOCK_SV_MUTEX;
- p->xpv_pv = (char*)PL_xpvmg_root;
- PL_xpvmg_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpvmg(pTHX)
-{
- register XPVMG* xpvmg;
- register XPVMG* xpvmgend;
- New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
- xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
- PL_xpvmg_arenaroot = xpvmg;
-
- xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
- PL_xpvmg_root = ++xpvmg;
- while (xpvmg < xpvmgend) {
- xpvmg->xpv_pv = (char*)(xpvmg + 1);
- xpvmg++;
- }
- xpvmg->xpv_pv = 0;
-}
-
-STATIC XPVLV*
-S_new_xpvlv(pTHX)
-{
- XPVLV* xpvlv;
- LOCK_SV_MUTEX;
- if (!PL_xpvlv_root)
- more_xpvlv();
- xpvlv = PL_xpvlv_root;
- PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
- UNLOCK_SV_MUTEX;
- return xpvlv;
-}
-
-STATIC void
-S_del_xpvlv(pTHX_ XPVLV *p)
-{
- LOCK_SV_MUTEX;
- p->xpv_pv = (char*)PL_xpvlv_root;
- PL_xpvlv_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpvlv(pTHX)
-{
- register XPVLV* xpvlv;
- register XPVLV* xpvlvend;
- New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
- xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
- PL_xpvlv_arenaroot = xpvlv;
-
- xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
- PL_xpvlv_root = ++xpvlv;
- while (xpvlv < xpvlvend) {
- xpvlv->xpv_pv = (char*)(xpvlv + 1);
- xpvlv++;
- }
- xpvlv->xpv_pv = 0;
-}
-
-STATIC XPVBM*
-S_new_xpvbm(pTHX)
-{
- XPVBM* xpvbm;
- LOCK_SV_MUTEX;
- if (!PL_xpvbm_root)
- more_xpvbm();
- xpvbm = PL_xpvbm_root;
- PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
- UNLOCK_SV_MUTEX;
- return xpvbm;
-}
-
-STATIC void
-S_del_xpvbm(pTHX_ XPVBM *p)
-{
- LOCK_SV_MUTEX;
- p->xpv_pv = (char*)PL_xpvbm_root;
- PL_xpvbm_root = p;
- UNLOCK_SV_MUTEX;
-}
-
-STATIC void
-S_more_xpvbm(pTHX)
-{
- register XPVBM* xpvbm;
- register XPVBM* xpvbmend;
- New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
- xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
- PL_xpvbm_arenaroot = xpvbm;
-
- xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
- PL_xpvbm_root = ++xpvbm;
- while (xpvbm < xpvbmend) {
- xpvbm->xpv_pv = (char*)(xpvbm + 1);
- xpvbm++;
- }
- xpvbm->xpv_pv = 0;
-}
-
-#ifdef LEAKTEST
-# define my_safemalloc(s) (void*)safexmalloc(717,s)
-# define my_safefree(p) safexfree((char*)p)
-#else
-# define my_safemalloc(s) (void*)safemalloc(s)
-# define my_safefree(p) safefree((char*)p)
-#endif
-
-#ifdef PURIFY
-
-#define new_XIV() my_safemalloc(sizeof(XPVIV))
-#define del_XIV(p) my_safefree(p)
-
-#define new_XNV() my_safemalloc(sizeof(XPVNV))
-#define del_XNV(p) my_safefree(p)
-
-#define new_XRV() my_safemalloc(sizeof(XRV))
-#define del_XRV(p) my_safefree(p)
-
-#define new_XPV() my_safemalloc(sizeof(XPV))
-#define del_XPV(p) my_safefree(p)
-
-#define new_XPVIV() my_safemalloc(sizeof(XPVIV))
-#define del_XPVIV(p) my_safefree(p)
-
-#define new_XPVNV() my_safemalloc(sizeof(XPVNV))
-#define del_XPVNV(p) my_safefree(p)
-
-#define new_XPVCV() my_safemalloc(sizeof(XPVCV))
-#define del_XPVCV(p) my_safefree(p)
-
-#define new_XPVAV() my_safemalloc(sizeof(XPVAV))
-#define del_XPVAV(p) my_safefree(p)
-
-#define new_XPVHV() my_safemalloc(sizeof(XPVHV))
-#define del_XPVHV(p) my_safefree(p)
-
-#define new_XPVMG() my_safemalloc(sizeof(XPVMG))
-#define del_XPVMG(p) my_safefree(p)
-
-#define new_XPVLV() my_safemalloc(sizeof(XPVLV))
-#define del_XPVLV(p) my_safefree(p)
-
-#define new_XPVBM() my_safemalloc(sizeof(XPVBM))
-#define del_XPVBM(p) my_safefree(p)
-
-#else /* !PURIFY */
-
-#define new_XIV() (void*)new_xiv()
-#define del_XIV(p) del_xiv((XPVIV*) p)
-
-#define new_XNV() (void*)new_xnv()
-#define del_XNV(p) del_xnv((XPVNV*) p)
-
-#define new_XRV() (void*)new_xrv()
-#define del_XRV(p) del_xrv((XRV*) p)
-
-#define new_XPV() (void*)new_xpv()
-#define del_XPV(p) del_xpv((XPV *)p)
-
-#define new_XPVIV() (void*)new_xpviv()
-#define del_XPVIV(p) del_xpviv((XPVIV *)p)
-
-#define new_XPVNV() (void*)new_xpvnv()
-#define del_XPVNV(p) del_xpvnv((XPVNV *)p)
-
-#define new_XPVCV() (void*)new_xpvcv()
-#define del_XPVCV(p) del_xpvcv((XPVCV *)p)
-
-#define new_XPVAV() (void*)new_xpvav()
-#define del_XPVAV(p) del_xpvav((XPVAV *)p)
-
-#define new_XPVHV() (void*)new_xpvhv()
-#define del_XPVHV(p) del_xpvhv((XPVHV *)p)
-
-#define new_XPVMG() (void*)new_xpvmg()
-#define del_XPVMG(p) del_xpvmg((XPVMG *)p)
-
-#define new_XPVLV() (void*)new_xpvlv()
-#define del_XPVLV(p) del_xpvlv((XPVLV *)p)
-
-#define new_XPVBM() (void*)new_xpvbm()
-#define del_XPVBM(p) del_xpvbm((XPVBM *)p)
-
-#endif /* PURIFY */
-
-#define new_XPVGV() my_safemalloc(sizeof(XPVGV))
-#define del_XPVGV(p) my_safefree(p)
-
-#define new_XPVFM() my_safemalloc(sizeof(XPVFM))
-#define del_XPVFM(p) my_safefree(p)
-
-#define new_XPVIO() my_safemalloc(sizeof(XPVIO))
-#define del_XPVIO(p) my_safefree(p)
-
-/*
-=for apidoc sv_upgrade
-
-Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
-C<svtype>.
-
-=cut
-*/
-
-bool
-Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
-{
- char* pv;
- U32 cur;
- U32 len;
- IV iv;
- NV nv;
- MAGIC* magic;
- HV* stash;
-
- if (SvTYPE(sv) == mt)
- return TRUE;
-
- if (mt < SVt_PVIV)
- (void)SvOOK_off(sv);
-
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- pv = 0;
- cur = 0;
- len = 0;
- iv = 0;
- nv = 0.0;
- magic = 0;
- stash = 0;
- break;
- case SVt_IV:
- pv = 0;
- cur = 0;
- len = 0;
- iv = SvIVX(sv);
- nv = (NV)SvIVX(sv);
- del_XIV(SvANY(sv));
- magic = 0;
- stash = 0;
- if (mt == SVt_NV)
- mt = SVt_PVNV;
- else if (mt < SVt_PVIV)
- mt = SVt_PVIV;
- break;
- case SVt_NV:
- pv = 0;
- cur = 0;
- len = 0;
- nv = SvNVX(sv);
- iv = I_V(nv);
- magic = 0;
- stash = 0;
- del_XNV(SvANY(sv));
- SvANY(sv) = 0;
- if (mt < SVt_PVNV)
- mt = SVt_PVNV;
- break;
- case SVt_RV:
- pv = (char*)SvRV(sv);
- cur = 0;
- len = 0;
- iv = PTR2IV(pv);
- nv = PTR2NV(pv);
- del_XRV(SvANY(sv));
- magic = 0;
- stash = 0;
- break;
- case SVt_PV:
- pv = SvPVX(sv);
- cur = SvCUR(sv);
- len = SvLEN(sv);
- iv = 0;
- nv = 0.0;
- magic = 0;
- stash = 0;
- del_XPV(SvANY(sv));
- if (mt <= SVt_IV)
- mt = SVt_PVIV;
- else if (mt == SVt_NV)
- mt = SVt_PVNV;
- break;
- case SVt_PVIV:
- pv = SvPVX(sv);
- cur = SvCUR(sv);
- len = SvLEN(sv);
- iv = SvIVX(sv);
- nv = 0.0;
- magic = 0;
- stash = 0;
- del_XPVIV(SvANY(sv));
- break;
- case SVt_PVNV:
- pv = SvPVX(sv);
- cur = SvCUR(sv);
- len = SvLEN(sv);
- iv = SvIVX(sv);
- nv = SvNVX(sv);
- magic = 0;
- stash = 0;
- del_XPVNV(SvANY(sv));
- break;
- case SVt_PVMG:
- pv = SvPVX(sv);
- cur = SvCUR(sv);
- len = SvLEN(sv);
- iv = SvIVX(sv);
- nv = SvNVX(sv);
- magic = SvMAGIC(sv);
- stash = SvSTASH(sv);
- del_XPVMG(SvANY(sv));
- break;
- default:
- Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
- }
-
- switch (mt) {
- case SVt_NULL:
- Perl_croak(aTHX_ "Can't upgrade to undef");
- case SVt_IV:
- SvANY(sv) = new_XIV();
- SvIVX(sv) = iv;
- break;
- case SVt_NV:
- SvANY(sv) = new_XNV();
- SvNVX(sv) = nv;
- break;
- case SVt_RV:
- SvANY(sv) = new_XRV();
- SvRV(sv) = (SV*)pv;
- break;
- case SVt_PV:
- SvANY(sv) = new_XPV();
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- break;
- case SVt_PVIV:
- SvANY(sv) = new_XPVIV();
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- if (SvNIOK(sv))
- (void)SvIOK_on(sv);
- SvNOK_off(sv);
- break;
- case SVt_PVNV:
- SvANY(sv) = new_XPVNV();
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
- break;
- case SVt_PVMG:
- SvANY(sv) = new_XPVMG();
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- break;
- case SVt_PVLV:
- SvANY(sv) = new_XPVLV();
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- LvTARGOFF(sv) = 0;
- LvTARGLEN(sv) = 0;
- LvTARG(sv) = 0;
- LvTYPE(sv) = 0;
- break;
- case SVt_PVAV:
- SvANY(sv) = new_XPVAV();
- if (pv)
- Safefree(pv);
- SvPVX(sv) = 0;
- AvMAX(sv) = -1;
- AvFILLp(sv) = -1;
- SvIVX(sv) = 0;
- SvNVX(sv) = 0.0;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- AvALLOC(sv) = 0;
- AvARYLEN(sv) = 0;
- AvFLAGS(sv) = 0;
- break;
- case SVt_PVHV:
- SvANY(sv) = new_XPVHV();
- if (pv)
- Safefree(pv);
- SvPVX(sv) = 0;
- HvFILL(sv) = 0;
- HvMAX(sv) = 0;
- HvKEYS(sv) = 0;
- SvNVX(sv) = 0.0;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- HvRITER(sv) = 0;
- HvEITER(sv) = 0;
- HvPMROOT(sv) = 0;
- HvNAME(sv) = 0;
- break;
- case SVt_PVCV:
- SvANY(sv) = new_XPVCV();
- Zero(SvANY(sv), 1, XPVCV);
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- break;
- case SVt_PVGV:
- SvANY(sv) = new_XPVGV();
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- GvGP(sv) = 0;
- GvNAME(sv) = 0;
- GvNAMELEN(sv) = 0;
- GvSTASH(sv) = 0;
- GvFLAGS(sv) = 0;
- break;
- case SVt_PVBM:
- SvANY(sv) = new_XPVBM();
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- BmRARE(sv) = 0;
- BmUSEFUL(sv) = 0;
- BmPREVIOUS(sv) = 0;
- break;
- case SVt_PVFM:
- SvANY(sv) = new_XPVFM();
- Zero(SvANY(sv), 1, XPVFM);
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- break;
- case SVt_PVIO:
- SvANY(sv) = new_XPVIO();
- Zero(SvANY(sv), 1, XPVIO);
- SvPVX(sv) = pv;
- SvCUR(sv) = cur;
- SvLEN(sv) = len;
- SvIVX(sv) = iv;
- SvNVX(sv) = nv;
- SvMAGIC(sv) = magic;
- SvSTASH(sv) = stash;
- IoPAGE_LEN(sv) = 60;
- break;
- }
- SvFLAGS(sv) &= ~SVTYPEMASK;
- SvFLAGS(sv) |= mt;
- return TRUE;
-}
-
-int
-Perl_sv_backoff(pTHX_ register SV *sv)
-{
- assert(SvOOK(sv));
- if (SvIVX(sv)) {
- char *s = SvPVX(sv);
- SvLEN(sv) += SvIVX(sv);
- SvPVX(sv) -= SvIVX(sv);
- SvIV_set(sv, 0);
- Move(s, SvPVX(sv), SvCUR(sv)+1, char);
- }
- SvFLAGS(sv) &= ~SVf_OOK;
- return 0;
-}
-
-/*
-=for apidoc sv_grow
-
-Expands the character buffer in the SV. This will use C<sv_unref> and will
-upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
-Use C<SvGROW>.
-
-=cut
-*/
-
-char *
-Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
-{
- register char *s;
-
-#ifdef HAS_64K_LIMIT
- if (newlen >= 0x10000) {
- PerlIO_printf(Perl_debug_log,
- "Allocation too large: %"UVxf"\n", (UV)newlen);
- my_exit(1);
- }
-#endif /* HAS_64K_LIMIT */
- if (SvROK(sv))
- sv_unref(sv);
- if (SvTYPE(sv) < SVt_PV) {
- sv_upgrade(sv, SVt_PV);
- s = SvPVX(sv);
- }
- else if (SvOOK(sv)) { /* pv is offset? */
- sv_backoff(sv);
- s = SvPVX(sv);
- if (newlen > SvLEN(sv))
- newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
-#ifdef HAS_64K_LIMIT
- if (newlen >= 0x10000)
- newlen = 0xFFFF;
-#endif
- }
- else
- s = SvPVX(sv);
- if (newlen > SvLEN(sv)) { /* need more room? */
- if (SvLEN(sv) && s) {
-#if defined(MYMALLOC) && !defined(LEAKTEST)
- STRLEN l = malloced_size((void*)SvPVX(sv));
- if (newlen <= l) {
- SvLEN_set(sv, l);
- return s;
- } else
-#endif
- Renew(s,newlen,char);
- }
- else
- New(703,s,newlen,char);
- SvPV_set(sv, s);
- SvLEN_set(sv, newlen);
- }
- return s;
-}
-
-/*
-=for apidoc sv_setiv
-
-Copies an integer into the given SV. Does not handle 'set' magic. See
-C<sv_setiv_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_setiv(pTHX_ register SV *sv, IV i)
-{
- SV_CHECK_THINKFIRST(sv);
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- sv_upgrade(sv, SVt_IV);
- break;
- case SVt_NV:
- sv_upgrade(sv, SVt_PVNV);
- break;
- case SVt_RV:
- case SVt_PV:
- sv_upgrade(sv, SVt_PVIV);
- break;
-
- case SVt_PVGV:
- case SVt_PVAV:
- case SVt_PVHV:
- case SVt_PVCV:
- case SVt_PVFM:
- case SVt_PVIO:
- Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
- PL_op_desc[PL_op->op_type]);
- }
- (void)SvIOK_only(sv); /* validate number */
- SvIVX(sv) = i;
- SvTAINT(sv);
-}
-
-/*
-=for apidoc sv_setiv_mg
-
-Like C<sv_setiv>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
-{
- sv_setiv(sv,i);
- SvSETMAGIC(sv);
-}
-
-/*
-=for apidoc sv_setuv
-
-Copies an unsigned integer into the given SV. Does not handle 'set' magic.
-See C<sv_setuv_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_setuv(pTHX_ register SV *sv, UV u)
-{
- sv_setiv(sv, 0);
- SvIsUV_on(sv);
- SvUVX(sv) = u;
-}
-
-/*
-=for apidoc sv_setuv_mg
-
-Like C<sv_setuv>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
-{
- sv_setuv(sv,u);
- SvSETMAGIC(sv);
-}
-
-/*
-=for apidoc sv_setnv
-
-Copies a double into the given SV. Does not handle 'set' magic. See
-C<sv_setnv_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_setnv(pTHX_ register SV *sv, NV num)
-{
- SV_CHECK_THINKFIRST(sv);
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- case SVt_IV:
- sv_upgrade(sv, SVt_NV);
- break;
- case SVt_RV:
- case SVt_PV:
- case SVt_PVIV:
- sv_upgrade(sv, SVt_PVNV);
- break;
-
- case SVt_PVGV:
- case SVt_PVAV:
- case SVt_PVHV:
- case SVt_PVCV:
- case SVt_PVFM:
- case SVt_PVIO:
- Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
- PL_op_name[PL_op->op_type]);
- }
- SvNVX(sv) = num;
- (void)SvNOK_only(sv); /* validate number */
- SvTAINT(sv);
-}
-
-/*
-=for apidoc sv_setnv_mg
-
-Like C<sv_setnv>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
-{
- sv_setnv(sv,num);
- SvSETMAGIC(sv);
-}
-
-STATIC void
-S_not_a_number(pTHX_ SV *sv)
-{
- char tmpbuf[64];
- char *d = tmpbuf;
- char *s;
- char *limit = tmpbuf + sizeof(tmpbuf) - 8;
- /* each *s can expand to 4 chars + "...\0",
- i.e. need room for 8 chars */
-
- for (s = SvPVX(sv); *s && d < limit; s++) {
- int ch = *s & 0xFF;
- if (ch & 128 && !isPRINT_LC(ch)) {
- *d++ = 'M';
- *d++ = '-';
- ch &= 127;
- }
- if (ch == '\n') {
- *d++ = '\\';
- *d++ = 'n';
- }
- else if (ch == '\r') {
- *d++ = '\\';
- *d++ = 'r';
- }
- else if (ch == '\f') {
- *d++ = '\\';
- *d++ = 'f';
- }
- else if (ch == '\\') {
- *d++ = '\\';
- *d++ = '\\';
- }
- else if (isPRINT_LC(ch))
- *d++ = ch;
- else {
- *d++ = '^';
- *d++ = toCTRL(ch);
- }
- }
- if (*s) {
- *d++ = '.';
- *d++ = '.';
- *d++ = '.';
- }
- *d = '\0';
-
- if (PL_op)
- Perl_warner(aTHX_ WARN_NUMERIC,
- "Argument \"%s\" isn't numeric in %s", tmpbuf,
- PL_op_desc[PL_op->op_type]);
- else
- Perl_warner(aTHX_ WARN_NUMERIC,
- "Argument \"%s\" isn't numeric", tmpbuf);
-}
-
-/* the number can be converted to integer with atol() or atoll() */
-#define IS_NUMBER_TO_INT_BY_ATOL 0x01
-#define IS_NUMBER_TO_INT_BY_ATOF 0x02 /* atol() may be != atof() */
-#define IS_NUMBER_NOT_IV 0x04 /* (IV)atof() may be != atof() */
-#define IS_NUMBER_NEG 0x08 /* not good to cache UV */
-#define IS_NUMBER_INFINITY 0x10 /* this is big */
-
-/* Actually, ISO C leaves conversion of UV to IV undefined, but
- until proven guilty, assume that things are not that bad... */
-
-IV
-Perl_sv_2iv(pTHX_ register SV *sv)
-{
- if (!sv)
- return 0;
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- if (SvIOKp(sv))
- return SvIVX(sv);
- if (SvNOKp(sv)) {
- return I_V(SvNVX(sv));
- }
- if (SvPOKp(sv) && SvLEN(sv))
- return asIV(sv);
- if (!SvROK(sv)) {
- if (!(SvFLAGS(sv) & SVs_PADTMP)) {
- if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
- report_uninit();
- }
- return 0;
- }
- }
- if (SvTHINKFIRST(sv)) {
- if (SvROK(sv)) {
- SV* tmpstr;
- if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
- (SvRV(tmpstr) != SvRV(sv)))
- return SvIV(tmpstr);
- return PTR2IV(SvRV(sv));
- }
- if (SvREADONLY(sv) && !SvOK(sv)) {
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- return 0;
- }
- }
- if (SvIOKp(sv)) {
- if (SvIsUV(sv)) {
- return (IV)(SvUVX(sv));
- }
- else {
- return SvIVX(sv);
- }
- }
- if (SvNOKp(sv)) {
- /* We can cache the IV/UV value even if it not good enough
- * to reconstruct NV, since the conversion to PV will prefer
- * NV over IV/UV.
- */
-
- if (SvTYPE(sv) == SVt_NV)
- sv_upgrade(sv, SVt_PVNV);
-
- (void)SvIOK_on(sv);
- if (SvNVX(sv) < (NV)IV_MAX + 0.5)
- SvIVX(sv) = I_V(SvNVX(sv));
- else {
- SvUVX(sv) = U_V(SvNVX(sv));
- SvIsUV_on(sv);
- ret_iv_max:
- DEBUG_c(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
- PTR2UV(sv),
- SvUVX(sv),
- SvUVX(sv)));
- return (IV)SvUVX(sv);
- }
- }
- else if (SvPOKp(sv) && SvLEN(sv)) {
- I32 numtype = looks_like_number(sv);
-
- /* We want to avoid a possible problem when we cache an IV which
- may be later translated to an NV, and the resulting NV is not
- the translation of the initial data.
-
- This means that if we cache such an IV, we need to cache the
- NV as well. Moreover, we trade speed for space, and do not
- cache the NV if not needed.
- */
- if (numtype & IS_NUMBER_NOT_IV) {
- /* May be not an integer. Need to cache NV if we cache IV
- * - otherwise future conversion to NV will be wrong. */
- NV d;
-
- d = Atof(SvPVX(sv));
-
- if (SvTYPE(sv) < SVt_PVNV)
- sv_upgrade(sv, SVt_PVNV);
- SvNVX(sv) = d;
- (void)SvNOK_on(sv);
- (void)SvIOK_on(sv);
-#if defined(USE_LONG_DOUBLE)
- DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
- PTR2UV(sv), SvNVX(sv)));
-#else
- DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%g)\n",
- PTR2UV(sv), SvNVX(sv)));
-#endif
- if (SvNVX(sv) < (NV)IV_MAX + 0.5)
- SvIVX(sv) = I_V(SvNVX(sv));
- else {
- SvUVX(sv) = U_V(SvNVX(sv));
- SvIsUV_on(sv);
- goto ret_iv_max;
- }
- }
- else { /* The NV may be reconstructed from IV - safe to cache IV,
- which may be calculated by atol(). */
- if (SvTYPE(sv) < SVt_PVIV)
- sv_upgrade(sv, SVt_PVIV);
- (void)SvIOK_on(sv);
- SvIVX(sv) = Atol(SvPVX(sv));
- if (! numtype && ckWARN(WARN_NUMERIC))
- not_a_number(sv);
- }
- }
- else {
- if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
- report_uninit();
- if (SvTYPE(sv) < SVt_IV)
- /* Typically the caller expects that sv_any is not NULL now. */
- sv_upgrade(sv, SVt_IV);
- return 0;
- }
- DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
- PTR2UV(sv),SvIVX(sv)));
- return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
-}
-
-UV
-Perl_sv_2uv(pTHX_ register SV *sv)
-{
- if (!sv)
- return 0;
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- if (SvIOKp(sv))
- return SvUVX(sv);
- if (SvNOKp(sv))
- return U_V(SvNVX(sv));
- if (SvPOKp(sv) && SvLEN(sv))
- return asUV(sv);
- if (!SvROK(sv)) {
- if (!(SvFLAGS(sv) & SVs_PADTMP)) {
- if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
- report_uninit();
- }
- return 0;
- }
- }
- if (SvTHINKFIRST(sv)) {
- if (SvROK(sv)) {
- SV* tmpstr;
- if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
- (SvRV(tmpstr) != SvRV(sv)))
- return SvUV(tmpstr);
- return PTR2UV(SvRV(sv));
- }
- if (SvREADONLY(sv) && !SvOK(sv)) {
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- return 0;
- }
- }
- if (SvIOKp(sv)) {
- if (SvIsUV(sv)) {
- return SvUVX(sv);
- }
- else {
- return (UV)SvIVX(sv);
- }
- }
- if (SvNOKp(sv)) {
- /* We can cache the IV/UV value even if it not good enough
- * to reconstruct NV, since the conversion to PV will prefer
- * NV over IV/UV.
- */
- if (SvTYPE(sv) == SVt_NV)
- sv_upgrade(sv, SVt_PVNV);
- (void)SvIOK_on(sv);
- if (SvNVX(sv) >= -0.5) {
- SvIsUV_on(sv);
- SvUVX(sv) = U_V(SvNVX(sv));
- }
- else {
- SvIVX(sv) = I_V(SvNVX(sv));
- ret_zero:
- DEBUG_c(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" 2uv(%"IVdf" => %"IVdf") (as signed)\n",
- PTR2UV(sv),
- SvIVX(sv),
- (IV)(UV)SvIVX(sv)));
- return (UV)SvIVX(sv);
- }
- }
- else if (SvPOKp(sv) && SvLEN(sv)) {
- I32 numtype = looks_like_number(sv);
-
- /* We want to avoid a possible problem when we cache a UV which
- may be later translated to an NV, and the resulting NV is not
- the translation of the initial data.
-
- This means that if we cache such a UV, we need to cache the
- NV as well. Moreover, we trade speed for space, and do not
- cache the NV if not needed.
- */
- if (numtype & IS_NUMBER_NOT_IV) {
- /* May be not an integer. Need to cache NV if we cache IV
- * - otherwise future conversion to NV will be wrong. */
- NV d;
-
- d = Atof(SvPVX(sv));
-
- if (SvTYPE(sv) < SVt_PVNV)
- sv_upgrade(sv, SVt_PVNV);
- SvNVX(sv) = d;
- (void)SvNOK_on(sv);
- (void)SvIOK_on(sv);
-#if defined(USE_LONG_DOUBLE)
- DEBUG_c(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
- PTR2UV(sv), SvNVX(sv)));
-#else
- DEBUG_c(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" 2nv(%g)\n",
- PTR2UV(sv), SvNVX(sv)));
-#endif
- if (SvNVX(sv) < -0.5) {
- SvIVX(sv) = I_V(SvNVX(sv));
- goto ret_zero;
- } else {
- SvUVX(sv) = U_V(SvNVX(sv));
- SvIsUV_on(sv);
- }
- }
- else if (numtype & IS_NUMBER_NEG) {
- /* The NV may be reconstructed from IV - safe to cache IV,
- which may be calculated by atol(). */
- if (SvTYPE(sv) == SVt_PV)
- sv_upgrade(sv, SVt_PVIV);
- (void)SvIOK_on(sv);
- SvIVX(sv) = (IV)Atol(SvPVX(sv));
- }
- else if (numtype) { /* Non-negative */
- /* The NV may be reconstructed from UV - safe to cache UV,
- which may be calculated by strtoul()/atol. */
- if (SvTYPE(sv) == SVt_PV)
- sv_upgrade(sv, SVt_PVIV);
- (void)SvIOK_on(sv);
- (void)SvIsUV_on(sv);
-#ifdef HAS_STRTOUL
- SvUVX(sv) = Strtoul(SvPVX(sv), Null(char**), 10);
-#else /* no atou(), but we know the number fits into IV... */
- /* The only problem may be if it is negative... */
- SvUVX(sv) = (UV)Atol(SvPVX(sv));
-#endif
- }
- else { /* Not a number. Cache 0. */
- if (SvTYPE(sv) < SVt_PVIV)
- sv_upgrade(sv, SVt_PVIV);
- (void)SvIOK_on(sv);
- (void)SvIsUV_on(sv);
- SvUVX(sv) = 0; /* We assume that 0s have the
- same bitmap in IV and UV. */
- if (ckWARN(WARN_NUMERIC))
- not_a_number(sv);
- }
- }
- else {
- if (!(SvFLAGS(sv) & SVs_PADTMP)) {
- if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
- report_uninit();
- }
- if (SvTYPE(sv) < SVt_IV)
- /* Typically the caller expects that sv_any is not NULL now. */
- sv_upgrade(sv, SVt_IV);
- return 0;
- }
-
- DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
- PTR2UV(sv),SvUVX(sv)));
- return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
-}
-
-NV
-Perl_sv_2nv(pTHX_ register SV *sv)
-{
- if (!sv)
- return 0.0;
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- if (SvNOKp(sv))
- return SvNVX(sv);
- if (SvPOKp(sv) && SvLEN(sv)) {
- if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
- not_a_number(sv);
- return Atof(SvPVX(sv));
- }
- if (SvIOKp(sv)) {
- if (SvIsUV(sv))
- return (NV)SvUVX(sv);
- else
- return (NV)SvIVX(sv);
- }
- if (!SvROK(sv)) {
- if (!(SvFLAGS(sv) & SVs_PADTMP)) {
- if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
- report_uninit();
- }
- return 0;
- }
- }
- if (SvTHINKFIRST(sv)) {
- if (SvROK(sv)) {
- SV* tmpstr;
- if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
- (SvRV(tmpstr) != SvRV(sv)))
- return SvNV(tmpstr);
- return PTR2NV(SvRV(sv));
- }
- if (SvREADONLY(sv) && !SvOK(sv)) {
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- return 0.0;
- }
- }
- if (SvTYPE(sv) < SVt_NV) {
- if (SvTYPE(sv) == SVt_IV)
- sv_upgrade(sv, SVt_PVNV);
- else
- sv_upgrade(sv, SVt_NV);
-#if defined(USE_LONG_DOUBLE)
- DEBUG_c({
- STORE_NUMERIC_LOCAL_SET_STANDARD();
- PerlIO_printf(Perl_debug_log,
- "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
- PTR2UV(sv), SvNVX(sv));
- RESTORE_NUMERIC_LOCAL();
- });
-#else
- DEBUG_c({
- STORE_NUMERIC_LOCAL_SET_STANDARD();
- PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
- PTR2UV(sv), SvNVX(sv));
- RESTORE_NUMERIC_LOCAL();
- });
-#endif
- }
- else if (SvTYPE(sv) < SVt_PVNV)
- sv_upgrade(sv, SVt_PVNV);
- if (SvIOKp(sv) &&
- (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
- {
- SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
- }
- else if (SvPOKp(sv) && SvLEN(sv)) {
- if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
- not_a_number(sv);
- SvNVX(sv) = Atof(SvPVX(sv));
- }
- else {
- if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
- report_uninit();
- if (SvTYPE(sv) < SVt_NV)
- /* Typically the caller expects that sv_any is not NULL now. */
- sv_upgrade(sv, SVt_NV);
- return 0.0;
- }
- SvNOK_on(sv);
-#if defined(USE_LONG_DOUBLE)
- DEBUG_c({
- STORE_NUMERIC_LOCAL_SET_STANDARD();
- PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
- PTR2UV(sv), SvNVX(sv));
- RESTORE_NUMERIC_LOCAL();
- });
-#else
- DEBUG_c({
- STORE_NUMERIC_LOCAL_SET_STANDARD();
- PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
- PTR2UV(sv), SvNVX(sv));
- RESTORE_NUMERIC_LOCAL();
- });
-#endif
- return SvNVX(sv);
-}
-
-STATIC IV
-S_asIV(pTHX_ SV *sv)
-{
- I32 numtype = looks_like_number(sv);
- NV d;
-
- if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
- return Atol(SvPVX(sv));
- if (!numtype) {
- if (ckWARN(WARN_NUMERIC))
- not_a_number(sv);
- }
- d = Atof(SvPVX(sv));
- return I_V(d);
-}
-
-STATIC UV
-S_asUV(pTHX_ SV *sv)
-{
- I32 numtype = looks_like_number(sv);
-
-#ifdef HAS_STRTOUL
- if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
- return Strtoul(SvPVX(sv), Null(char**), 10);
-#endif
- if (!numtype) {
- if (ckWARN(WARN_NUMERIC))
- not_a_number(sv);
- }
- return U_V(Atof(SvPVX(sv)));
-}
-
-/*
- * Returns a combination of (advisory only - can get false negatives)
- * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF, IS_NUMBER_NOT_IV,
- * IS_NUMBER_NEG
- * 0 if does not look like number.
- *
- * In fact possible values are 0 and
- * IS_NUMBER_TO_INT_BY_ATOL 123
- * IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_IV 123.1
- * IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV 123e0
- * IS_NUMBER_INFINITY
- * with a possible addition of IS_NUMBER_NEG.
- */
-
-/*
-=for apidoc looks_like_number
-
-Test if an the content of an SV looks like a number (or is a
-number).
-
-=cut
-*/
-
-I32
-Perl_looks_like_number(pTHX_ SV *sv)
-{
- register char *s;
- register char *send;
- register char *sbegin;
- register char *nbegin;
- I32 numtype = 0;
- I32 sawinf = 0;
- STRLEN len;
-#ifdef USE_LOCALE_NUMERIC
- bool specialradix = FALSE;
-#endif
-
- if (SvPOK(sv)) {
- sbegin = SvPVX(sv);
- len = SvCUR(sv);
- }
- else if (SvPOKp(sv))
- sbegin = SvPV(sv, len);
- else
- return 1;
- send = sbegin + len;
-
- s = sbegin;
- while (isSPACE(*s))
- s++;
- if (*s == '-') {
- s++;
- numtype = IS_NUMBER_NEG;
- }
- else if (*s == '+')
- s++;
-
- nbegin = s;
- /*
- * we return IS_NUMBER_TO_INT_BY_ATOL if the number can be converted
- * to _integer_ with atol() and IS_NUMBER_TO_INT_BY_ATOF if you need
- * (int)atof().
- */
-
- /* next must be digit or the radix separator or beginning of infinity */
- if (isDIGIT(*s)) {
- do {
- s++;
- } while (isDIGIT(*s));
-
- if (s - nbegin >= TYPE_DIGITS(IV)) /* Cannot cache ato[ul]() */
- numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV;
- else
- numtype |= IS_NUMBER_TO_INT_BY_ATOL;
-
- if (*s == '.'
-#ifdef USE_LOCALE_NUMERIC
- || (specialradix = IS_NUMERIC_RADIX(s))
-#endif
- ) {
-#ifdef USE_LOCALE_NUMERIC
- if (specialradix)
- s += SvCUR(PL_numeric_radix_sv);
- else
-#endif
- s++;
- numtype |= IS_NUMBER_NOT_IV;
- while (isDIGIT(*s)) /* optional digits after the radix */
- s++;
- }
- }
- else if (*s == '.'
-#ifdef USE_LOCALE_NUMERIC
- || (specialradix = IS_NUMERIC_RADIX(s))
-#endif
- ) {
-#ifdef USE_LOCALE_NUMERIC
- if (specialradix)
- s += SvCUR(PL_numeric_radix_sv);
- else
-#endif
- s++;
- numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_IV;
- /* no digits before the radix means we need digits after it */
- if (isDIGIT(*s)) {
- do {
- s++;
- } while (isDIGIT(*s));
- }
- else
- return 0;
- }
- else if (*s == 'I' || *s == 'i') {
- s++; if (*s != 'N' && *s != 'n') return 0;
- s++; if (*s != 'F' && *s != 'f') return 0;
- s++; if (*s == 'I' || *s == 'i') {
- s++; if (*s != 'N' && *s != 'n') return 0;
- s++; if (*s != 'I' && *s != 'i') return 0;
- s++; if (*s != 'T' && *s != 't') return 0;
- s++; if (*s != 'Y' && *s != 'y') return 0;
- }
- sawinf = 1;
- }
- else
- return 0;
-
- if (sawinf)
- numtype = IS_NUMBER_INFINITY;
- else {
- /* we can have an optional exponent part */
- if (*s == 'e' || *s == 'E') {
- numtype &= ~IS_NUMBER_NEG;
- numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV;
- s++;
- if (*s == '+' || *s == '-')
- s++;
- if (isDIGIT(*s)) {
- do {
- s++;
- } while (isDIGIT(*s));
- }
- else
- return 0;
- }
- }
- while (isSPACE(*s))
- s++;
- if (s >= send)
- return numtype;
- if (len == 10 && memEQ(sbegin, "0 but true", 10))
- return IS_NUMBER_TO_INT_BY_ATOL;
- return 0;
-}
-
-char *
-Perl_sv_2pv_nolen(pTHX_ register SV *sv)
-{
- STRLEN n_a;
- return sv_2pv(sv, &n_a);
-}
-
-/* We assume that buf is at least TYPE_CHARS(UV) long. */
-static char *
-uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
-{
- char *ptr = buf + TYPE_CHARS(UV);
- char *ebuf = ptr;
- int sign;
-
- if (is_uv)
- sign = 0;
- else if (iv >= 0) {
- uv = iv;
- sign = 0;
- } else {
- uv = -iv;
- sign = 1;
- }
- do {
- *--ptr = '0' + (uv % 10);
- } while (uv /= 10);
- if (sign)
- *--ptr = '-';
- *peob = ebuf;
- return ptr;
-}
-
-char *
-Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
-{
- register char *s;
- int olderrno;
- SV *tsv;
- char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
- char *tmpbuf = tbuf;
-
- if (!sv) {
- *lp = 0;
- return "";
- }
- if (SvGMAGICAL(sv)) {
- mg_get(sv);
- if (SvPOKp(sv)) {
- *lp = SvCUR(sv);
- return SvPVX(sv);
- }
- if (SvIOKp(sv)) {
- if (SvIsUV(sv))
- (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
- else
- (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
- tsv = Nullsv;
- goto tokensave;
- }
- if (SvNOKp(sv)) {
- Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
- tsv = Nullsv;
- goto tokensave;
- }
- if (!SvROK(sv)) {
- if (!(SvFLAGS(sv) & SVs_PADTMP)) {
- if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
- report_uninit();
- }
- *lp = 0;
- return "";
- }
- }
- if (SvTHINKFIRST(sv)) {
- if (SvROK(sv)) {
- SV* tmpstr;
- if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
- (SvRV(tmpstr) != SvRV(sv)))
- return SvPV(tmpstr,*lp);
- sv = (SV*)SvRV(sv);
- if (!sv)
- s = "NULLREF";
- else {
- MAGIC *mg;
-
- switch (SvTYPE(sv)) {
- case SVt_PVMG:
- if ( ((SvFLAGS(sv) &
- (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
- == (SVs_OBJECT|SVs_RMG))
- && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
- && (mg = mg_find(sv, 'r'))) {
- regexp *re = (regexp *)mg->mg_obj;
-
- if (!mg->mg_ptr) {
- char *fptr = "msix";
- char reflags[6];
- char ch;
- int left = 0;
- int right = 4;
- U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
-
- while((ch = *fptr++)) {
- if(reganch & 1) {
- reflags[left++] = ch;
- }
- else {
- reflags[right--] = ch;
- }
- reganch >>= 1;
- }
- if(left != 4) {
- reflags[left] = '-';
- left = 5;
- }
-
- mg->mg_len = re->prelen + 4 + left;
- New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
- Copy("(?", mg->mg_ptr, 2, char);
- Copy(reflags, mg->mg_ptr+2, left, char);
- Copy(":", mg->mg_ptr+left+2, 1, char);
- Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
- mg->mg_ptr[mg->mg_len - 1] = ')';
- mg->mg_ptr[mg->mg_len] = 0;
- }
- PL_reginterp_cnt += re->program[0].next_off;
- *lp = mg->mg_len;
- return mg->mg_ptr;
- }
- /* Fall through */
- case SVt_NULL:
- case SVt_IV:
- case SVt_NV:
- case SVt_RV:
- case SVt_PV:
- case SVt_PVIV:
- case SVt_PVNV:
- case SVt_PVBM: s = "SCALAR"; break;
- case SVt_PVLV: s = "LVALUE"; break;
- case SVt_PVAV: s = "ARRAY"; break;
- case SVt_PVHV: s = "HASH"; break;
- case SVt_PVCV: s = "CODE"; break;
- case SVt_PVGV: s = "GLOB"; break;
- case SVt_PVFM: s = "FORMAT"; break;
- case SVt_PVIO: s = "IO"; break;
- default: s = "UNKNOWN"; break;
- }
- tsv = NEWSV(0,0);
- if (SvOBJECT(sv))
- Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
- else
- sv_setpv(tsv, s);
- Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
- goto tokensaveref;
- }
- *lp = strlen(s);
- return s;
- }
- if (SvREADONLY(sv) && !SvOK(sv)) {
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit();
- *lp = 0;
- return "";
- }
- }
- if (SvNOKp(sv)) { /* See note in sv_2uv() */
- /* XXXX 64-bit? IV may have better precision... */
- /* I tried changing this to be 64-bit-aware and
- * the t/op/numconvert.t became very, very, angry.
- * --jhi Sep 1999 */
- if (SvTYPE(sv) < SVt_PVNV)
- sv_upgrade(sv, SVt_PVNV);
- /* The +20 is pure guesswork. Configure test needed. --jhi */
- SvGROW(sv, NV_DIG + 20);
- s = SvPVX(sv);
- olderrno = errno; /* some Xenix systems wipe out errno here */
-#ifdef apollo
- if (SvNVX(sv) == 0.0)
- (void)strcpy(s,"0");
- else
-#endif /*apollo*/
- {
- Gconvert(SvNVX(sv), NV_DIG, 0, s);
- }
- errno = olderrno;
-#ifdef FIXNEGATIVEZERO
- if (*s == '-' && s[1] == '0' && !s[2])
- strcpy(s,"0");
-#endif
- while (*s) s++;
-#ifdef hcx
- if (s[-1] == '.')
- *--s = '\0';
-#endif
- }
- else if (SvIOKp(sv)) {
- U32 isIOK = SvIOK(sv);
- U32 isUIOK = SvIsUV(sv);
- char buf[TYPE_CHARS(UV)];
- char *ebuf, *ptr;
-
- if (SvTYPE(sv) < SVt_PVIV)
- sv_upgrade(sv, SVt_PVIV);
- if (isUIOK)
- ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
- else
- ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
- SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
- Move(ptr,SvPVX(sv),ebuf - ptr,char);
- SvCUR_set(sv, ebuf - ptr);
- s = SvEND(sv);
- *s = '\0';
- if (isIOK)
- SvIOK_on(sv);
- else
- SvIOKp_on(sv);
- if (isUIOK)
- SvIsUV_on(sv);
- SvPOK_on(sv);
- }
- else {
- if (ckWARN(WARN_UNINITIALIZED)
- && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
- report_uninit();
- *lp = 0;
- if (SvTYPE(sv) < SVt_PV)
- /* Typically the caller expects that sv_any is not NULL now. */
- sv_upgrade(sv, SVt_PV);
- return "";
- }
- *lp = s - SvPVX(sv);
- SvCUR_set(sv, *lp);
- SvPOK_on(sv);
- DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
- PTR2UV(sv),SvPVX(sv)));
- return SvPVX(sv);
-
- tokensave:
- if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
- /* Sneaky stuff here */
-
- tokensaveref:
- if (!tsv)
- tsv = newSVpv(tmpbuf, 0);
- sv_2mortal(tsv);
- *lp = SvCUR(tsv);
- return SvPVX(tsv);
- }
- else {
- STRLEN len;
- char *t;
-
- if (tsv) {
- sv_2mortal(tsv);
- t = SvPVX(tsv);
- len = SvCUR(tsv);
- }
- else {
- t = tmpbuf;
- len = strlen(tmpbuf);
- }
-#ifdef FIXNEGATIVEZERO
- if (len == 2 && t[0] == '-' && t[1] == '0') {
- t = "0";
- len = 1;
- }
-#endif
- (void)SvUPGRADE(sv, SVt_PV);
- *lp = len;
- s = SvGROW(sv, len + 1);
- SvCUR_set(sv, len);
- (void)strcpy(s, t);
- SvPOKp_on(sv);
- return s;
- }
-}
-
-char *
-Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
-{
- STRLEN n_a;
- return sv_2pvbyte(sv, &n_a);
-}
-
-char *
-Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
-{
- return sv_2pv(sv,lp);
-}
-
-char *
-Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
-{
- STRLEN n_a;
- return sv_2pvutf8(sv, &n_a);
-}
-
-char *
-Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
-{
- sv_utf8_upgrade(sv);
- return SvPV(sv,*lp);
-}
-
-/* This function is only called on magical items */
-bool
-Perl_sv_2bool(pTHX_ register SV *sv)
-{
- if (SvGMAGICAL(sv))
- mg_get(sv);
-
- if (!SvOK(sv))
- return 0;
- if (SvROK(sv)) {
- SV* tmpsv;
- if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
- (SvRV(tmpsv) != SvRV(sv)))
- return SvTRUE(tmpsv);
- return SvRV(sv) != 0;
- }
- if (SvPOKp(sv)) {
- register XPV* Xpvtmp;
- if ((Xpvtmp = (XPV*)SvANY(sv)) &&
- (*Xpvtmp->xpv_pv > '0' ||
- Xpvtmp->xpv_cur > 1 ||
- (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
- return 1;
- else
- return 0;
- }
- else {
- if (SvIOKp(sv))
- return SvIVX(sv) != 0;
- else {
- if (SvNOKp(sv))
- return SvNVX(sv) != 0.0;
- else
- return FALSE;
- }
- }
-}
-
-/*
-=for apidoc sv_utf8_upgrade
-
-Convert the PV of an SV to its UTF8-encoded form.
-
-=cut
-*/
-
-void
-Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
-{
- char *s, *t, *e;
- int hibit = 0;
-
- if (!sv || !SvPOK(sv) || SvUTF8(sv))
- return;
-
- /* This function could be much more efficient if we had a FLAG in SVs
- * to signal if there are any hibit chars in the PV.
- * Given that there isn't make loop fast as possible
- */
- s = SvPVX(sv);
- e = SvEND(sv);
- t = s;
- while (t < e) {
- if ((hibit = UTF8_IS_CONTINUED(*t++)))
- break;
- }
-
- if (hibit) {
- STRLEN len;
-
- if (SvREADONLY(sv) && SvFAKE(sv)) {
- sv_force_normal(sv);
- s = SvPVX(sv);
- }
- len = SvCUR(sv) + 1; /* Plus the \0 */
- SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
- SvCUR(sv) = len - 1;
- if (SvLEN(sv) != 0)
- Safefree(s); /* No longer using what was there before. */
- SvLEN(sv) = len; /* No longer know the real size. */
- SvUTF8_on(sv);
- }
-}
-
-/*
-=for apidoc sv_utf8_downgrade
-
-Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
-This may not be possible if the PV contains non-byte encoding characters;
-if this is the case, either returns false or, if C<fail_ok> is not
-true, croaks.
-
-=cut
-*/
-
-bool
-Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
-{
- if (SvPOK(sv) && SvUTF8(sv)) {
- if (SvCUR(sv)) {
- char *s;
- STRLEN len;
-
- if (SvREADONLY(sv) && SvFAKE(sv))
- sv_force_normal(sv);
- s = SvPV(sv, len);
- if (!utf8_to_bytes((U8*)s, &len)) {
- if (fail_ok)
- return FALSE;
- else {
- if (PL_op)
- Perl_croak(aTHX_ "Wide character in %s",
- PL_op_desc[PL_op->op_type]);
- else
- Perl_croak(aTHX_ "Wide character");
- }
- }
- SvCUR(sv) = len;
- }
- SvUTF8_off(sv);
- }
-
- return TRUE;
-}
-
-/*
-=for apidoc sv_utf8_encode
-
-Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
-flag so that it looks like bytes again. Nothing calls this.
-
-=cut
-*/
-
-void
-Perl_sv_utf8_encode(pTHX_ register SV *sv)
-{
- sv_utf8_upgrade(sv);
- SvUTF8_off(sv);
-}
-
-bool
-Perl_sv_utf8_decode(pTHX_ register SV *sv)
-{
- if (SvPOK(sv)) {
- char *c;
- char *e;
- bool has_utf = FALSE;
- if (!sv_utf8_downgrade(sv, TRUE))
- return FALSE;
-
- /* it is actually just a matter of turning the utf8 flag on, but
- * we want to make sure everything inside is valid utf8 first.
- */
- c = SvPVX(sv);
- if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
- return FALSE;
- e = SvEND(sv);
- while (c < e) {
- if (UTF8_IS_CONTINUED(*c++)) {
- SvUTF8_on(sv);
- break;
- }
- }
- }
- return TRUE;
-}
-
-
-/* Note: sv_setsv() should not be called with a source string that needs
- * to be reused, since it may destroy the source string if it is marked
- * as temporary.
- */
-
-/*
-=for apidoc sv_setsv
-
-Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
-The source SV may be destroyed if it is mortal. Does not handle 'set'
-magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
-C<sv_setsv_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
-{
- register U32 sflags;
- register int dtype;
- register int stype;
-
- if (sstr == dstr)
- return;
- SV_CHECK_THINKFIRST(dstr);
- if (!sstr)
- sstr = &PL_sv_undef;
- stype = SvTYPE(sstr);
- dtype = SvTYPE(dstr);
-
- SvAMAGIC_off(dstr);
-
- /* There's a lot of redundancy below but we're going for speed here */
-
- switch (stype) {
- case SVt_NULL:
- undef_sstr:
- if (dtype != SVt_PVGV) {
- (void)SvOK_off(dstr);
- return;
- }
- break;
- case SVt_IV:
- if (SvIOK(sstr)) {
- switch (dtype) {
- case SVt_NULL:
- sv_upgrade(dstr, SVt_IV);
- break;
- case SVt_NV:
- sv_upgrade(dstr, SVt_PVNV);
- break;
- case SVt_RV:
- case SVt_PV:
- sv_upgrade(dstr, SVt_PVIV);
- break;
- }
- (void)SvIOK_only(dstr);
- SvIVX(dstr) = SvIVX(sstr);
- if (SvIsUV(sstr))
- SvIsUV_on(dstr);
- if (SvTAINTED(sstr))
- SvTAINT(dstr);
- return;
- }
- goto undef_sstr;
-
- case SVt_NV:
- if (SvNOK(sstr)) {
- switch (dtype) {
- case SVt_NULL:
- case SVt_IV:
- sv_upgrade(dstr, SVt_NV);
- break;
- case SVt_RV:
- case SVt_PV:
- case SVt_PVIV:
- sv_upgrade(dstr, SVt_PVNV);
- break;
- }
- SvNVX(dstr) = SvNVX(sstr);
- (void)SvNOK_only(dstr);
- if (SvTAINTED(sstr))
- SvTAINT(dstr);
- return;
- }
- goto undef_sstr;
-
- case SVt_RV:
- if (dtype < SVt_RV)
- sv_upgrade(dstr, SVt_RV);
- else if (dtype == SVt_PVGV &&
- SvTYPE(SvRV(sstr)) == SVt_PVGV) {
- sstr = SvRV(sstr);
- if (sstr == dstr) {
- if (GvIMPORTED(dstr) != GVf_IMPORTED
- && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
- {
- GvIMPORTED_on(dstr);
- }
- GvMULTI_on(dstr);
- return;
- }
- goto glob_assign;
- }
- break;
- case SVt_PV:
- case SVt_PVFM:
- if (dtype < SVt_PV)
- sv_upgrade(dstr, SVt_PV);
- break;
- case SVt_PVIV:
- if (dtype < SVt_PVIV)
- sv_upgrade(dstr, SVt_PVIV);
- break;
- case SVt_PVNV:
- if (dtype < SVt_PVNV)
- sv_upgrade(dstr, SVt_PVNV);
- break;
- case SVt_PVAV:
- case SVt_PVHV:
- case SVt_PVCV:
- case SVt_PVIO:
- if (PL_op)
- Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
- PL_op_name[PL_op->op_type]);
- else
- Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
- break;
-
- case SVt_PVGV:
- if (dtype <= SVt_PVGV) {
- glob_assign:
- if (dtype != SVt_PVGV) {
- char *name = GvNAME(sstr);
- STRLEN len = GvNAMELEN(sstr);
- sv_upgrade(dstr, SVt_PVGV);
- sv_magic(dstr, dstr, '*', Nullch, 0);
- GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
- GvNAME(dstr) = savepvn(name, len);
- GvNAMELEN(dstr) = len;
- SvFAKE_on(dstr); /* can coerce to non-glob */
- }
- /* ahem, death to those who redefine active sort subs */
- else if (PL_curstackinfo->si_type == PERLSI_SORT
- && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
- Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
- GvNAME(dstr));
- (void)SvOK_off(dstr);
- GvINTRO_off(dstr); /* one-shot flag */
- gp_free((GV*)dstr);
- GvGP(dstr) = gp_ref(GvGP(sstr));
- if (SvTAINTED(sstr))
- SvTAINT(dstr);
- if (GvIMPORTED(dstr) != GVf_IMPORTED
- && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
- {
- GvIMPORTED_on(dstr);
- }
- GvMULTI_on(dstr);
- return;
- }
- /* FALL THROUGH */
-
- default:
- if (SvGMAGICAL(sstr)) {
- mg_get(sstr);
- if (SvTYPE(sstr) != stype) {
- stype = SvTYPE(sstr);
- if (stype == SVt_PVGV && dtype <= SVt_PVGV)
- goto glob_assign;
- }
- }
- if (stype == SVt_PVLV)
- (void)SvUPGRADE(dstr, SVt_PVNV);
- else
- (void)SvUPGRADE(dstr, stype);
- }
-
- sflags = SvFLAGS(sstr);
-
- if (sflags & SVf_ROK) {
- if (dtype >= SVt_PV) {
- if (dtype == SVt_PVGV) {
- SV *sref = SvREFCNT_inc(SvRV(sstr));
- SV *dref = 0;
- int intro = GvINTRO(dstr);
-
- if (intro) {
- GP *gp;
- gp_free((GV*)dstr);
- GvINTRO_off(dstr); /* one-shot flag */
- Newz(602,gp, 1, GP);
- GvGP(dstr) = gp_ref(gp);
- GvSV(dstr) = NEWSV(72,0);
- GvLINE(dstr) = CopLINE(PL_curcop);
- GvEGV(dstr) = (GV*)dstr;
- }
- GvMULTI_on(dstr);
- switch (SvTYPE(sref)) {
- case SVt_PVAV:
- if (intro)
- SAVESPTR(GvAV(dstr));
- else
- dref = (SV*)GvAV(dstr);
- GvAV(dstr) = (AV*)sref;
- if (!GvIMPORTED_AV(dstr)
- && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
- {
- GvIMPORTED_AV_on(dstr);
- }
- break;
- case SVt_PVHV:
- if (intro)
- SAVESPTR(GvHV(dstr));
- else
- dref = (SV*)GvHV(dstr);
- GvHV(dstr) = (HV*)sref;
- if (!GvIMPORTED_HV(dstr)
- && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
- {
- GvIMPORTED_HV_on(dstr);
- }
- break;
- case SVt_PVCV:
- if (intro) {
- if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
- SvREFCNT_dec(GvCV(dstr));
- GvCV(dstr) = Nullcv;
- GvCVGEN(dstr) = 0; /* Switch off cacheness. */
- PL_sub_generation++;
- }
- SAVESPTR(GvCV(dstr));
- }
- else
- dref = (SV*)GvCV(dstr);
- if (GvCV(dstr) != (CV*)sref) {
- CV* cv = GvCV(dstr);
- if (cv) {
- if (!GvCVGEN((GV*)dstr) &&
- (CvROOT(cv) || CvXSUB(cv)))
- {
- SV *const_sv = cv_const_sv(cv);
- bool const_changed = TRUE;
- if(const_sv)
- const_changed = sv_cmp(const_sv,
- op_const_sv(CvSTART((CV*)sref),
- Nullcv));
- /* ahem, death to those who redefine
- * active sort subs */
- if (PL_curstackinfo->si_type == PERLSI_SORT &&
- PL_sortcop == CvSTART(cv))
- Perl_croak(aTHX_
- "Can't redefine active sort subroutine %s",
- GvENAME((GV*)dstr));
- if ((const_changed || const_sv) && ckWARN(WARN_REDEFINE))
- Perl_warner(aTHX_ WARN_REDEFINE, const_sv ?
- "Constant subroutine %s redefined"
- : "Subroutine %s redefined",
- GvENAME((GV*)dstr));
- }
- cv_ckproto(cv, (GV*)dstr,
- SvPOK(sref) ? SvPVX(sref) : Nullch);
- }
- GvCV(dstr) = (CV*)sref;
- GvCVGEN(dstr) = 0; /* Switch off cacheness. */
- GvASSUMECV_on(dstr);
- PL_sub_generation++;
- }
- if (!GvIMPORTED_CV(dstr)
- && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
- {
- GvIMPORTED_CV_on(dstr);
- }
- break;
- case SVt_PVIO:
- if (intro)
- SAVESPTR(GvIOp(dstr));
- else
- dref = (SV*)GvIOp(dstr);
- GvIOp(dstr) = (IO*)sref;
- break;
- default:
- if (intro)
- SAVESPTR(GvSV(dstr));
- else
- dref = (SV*)GvSV(dstr);
- GvSV(dstr) = sref;
- if (!GvIMPORTED_SV(dstr)
- && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
- {
- GvIMPORTED_SV_on(dstr);
- }
- break;
- }
- if (dref)
- SvREFCNT_dec(dref);
- if (intro)
- SAVEFREESV(sref);
- if (SvTAINTED(sstr))
- SvTAINT(dstr);
- return;
- }
- if (SvPVX(dstr)) {
- (void)SvOOK_off(dstr); /* backoff */
- if (SvLEN(dstr))
- Safefree(SvPVX(dstr));
- SvLEN(dstr)=SvCUR(dstr)=0;
- }
- }
- (void)SvOK_off(dstr);
- SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
- SvROK_on(dstr);
- if (sflags & SVp_NOK) {
- SvNOK_on(dstr);
- SvNVX(dstr) = SvNVX(sstr);
- }
- if (sflags & SVp_IOK) {
- (void)SvIOK_on(dstr);
- SvIVX(dstr) = SvIVX(sstr);
- if (sflags & SVf_IVisUV)
- SvIsUV_on(dstr);
- }
- if (SvAMAGIC(sstr)) {
- SvAMAGIC_on(dstr);
- }
- }
- else if (sflags & SVp_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 SvPVX(dstr)
- * has to be allocated and SvPVX(sstr) has to be freed.
- */
-
- if (SvTEMP(sstr) && /* slated for free anyway? */
- SvREFCNT(sstr) == 1 && /* and no other references to it? */
- !(sflags & SVf_OOK)) /* and not involved in OOK hack? */
- {
- if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
- if (SvOOK(dstr)) {
- SvFLAGS(dstr) &= ~SVf_OOK;
- Safefree(SvPVX(dstr) - SvIVX(dstr));
- }
- else if (SvLEN(dstr))
- Safefree(SvPVX(dstr));
- }
- (void)SvPOK_only(dstr);
- SvPV_set(dstr, SvPVX(sstr));
- SvLEN_set(dstr, SvLEN(sstr));
- SvCUR_set(dstr, SvCUR(sstr));
-
- SvTEMP_off(dstr);
- (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
- SvPV_set(sstr, Nullch);
- SvLEN_set(sstr, 0);
- SvCUR_set(sstr, 0);
- SvTEMP_off(sstr);
- }
- else { /* have to copy actual string */
- STRLEN len = SvCUR(sstr);
-
- SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
- Move(SvPVX(sstr),SvPVX(dstr),len,char);
- SvCUR_set(dstr, len);
- *SvEND(dstr) = '\0';
- (void)SvPOK_only(dstr);
- }
- if (sflags & SVf_UTF8)
- SvUTF8_on(dstr);
- /*SUPPRESS 560*/
- if (sflags & SVp_NOK) {
- SvNOK_on(dstr);
- SvNVX(dstr) = SvNVX(sstr);
- }
- if (sflags & SVp_IOK) {
- (void)SvIOK_on(dstr);
- SvIVX(dstr) = SvIVX(sstr);
- if (sflags & SVf_IVisUV)
- SvIsUV_on(dstr);
- }
- }
- else if (sflags & SVp_NOK) {
- SvNVX(dstr) = SvNVX(sstr);
- (void)SvNOK_only(dstr);
- if (sflags & SVf_IOK) {
- (void)SvIOK_on(dstr);
- SvIVX(dstr) = SvIVX(sstr);
- /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
- if (sflags & SVf_IVisUV)
- SvIsUV_on(dstr);
- }
- }
- else if (sflags & SVp_IOK) {
- (void)SvIOK_only(dstr);
- SvIVX(dstr) = SvIVX(sstr);
- if (sflags & SVf_IVisUV)
- SvIsUV_on(dstr);
- }
- else {
- if (dtype == SVt_PVGV) {
- if (ckWARN(WARN_MISC))
- Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
- }
- else
- (void)SvOK_off(dstr);
- }
- if (SvTAINTED(sstr))
- SvTAINT(dstr);
-}
-
-/*
-=for apidoc sv_setsv_mg
-
-Like C<sv_setsv>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
-{
- sv_setsv(dstr,sstr);
- SvSETMAGIC(dstr);
-}
-
-/*
-=for apidoc sv_setpvn
-
-Copies a string into an SV. The C<len> parameter indicates the number of
-bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
-{
- register char *dptr;
-
- SV_CHECK_THINKFIRST(sv);
- if (!ptr) {
- (void)SvOK_off(sv);
- return;
- }
- else {
- /* len is STRLEN which is unsigned, need to copy to signed */
- IV iv = len;
- assert(iv >= 0);
- }
- (void)SvUPGRADE(sv, SVt_PV);
-
- SvGROW(sv, len + 1);
- dptr = SvPVX(sv);
- Move(ptr,dptr,len,char);
- dptr[len] = '\0';
- SvCUR_set(sv, len);
- (void)SvPOK_only(sv); /* validate pointer */
- SvTAINT(sv);
-}
-
-/*
-=for apidoc sv_setpvn_mg
-
-Like C<sv_setpvn>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
-{
- sv_setpvn(sv,ptr,len);
- SvSETMAGIC(sv);
-}
-
-/*
-=for apidoc sv_setpv
-
-Copies a string into an SV. The string must be null-terminated. Does not
-handle 'set' magic. See C<sv_setpv_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
-{
- register STRLEN len;
-
- SV_CHECK_THINKFIRST(sv);
- if (!ptr) {
- (void)SvOK_off(sv);
- return;
- }
- len = strlen(ptr);
- (void)SvUPGRADE(sv, SVt_PV);
-
- SvGROW(sv, len + 1);
- Move(ptr,SvPVX(sv),len+1,char);
- SvCUR_set(sv, len);
- (void)SvPOK_only(sv); /* validate pointer */
- SvTAINT(sv);
-}
-
-/*
-=for apidoc sv_setpv_mg
-
-Like C<sv_setpv>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
-{
- sv_setpv(sv,ptr);
- SvSETMAGIC(sv);
-}
-
-/*
-=for apidoc sv_usepvn
-
-Tells an SV to use C<ptr> to find its string value. Normally the string is
-stored inside the SV but sv_usepvn allows the SV to use an outside string.
-The C<ptr> should point to memory that was allocated by C<malloc>. The
-string length, C<len>, must be supplied. This function will realloc the
-memory pointed to by C<ptr>, so that pointer should not be freed or used by
-the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
-See C<sv_usepvn_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
-{
- SV_CHECK_THINKFIRST(sv);
- (void)SvUPGRADE(sv, SVt_PV);
- if (!ptr) {
- (void)SvOK_off(sv);
- return;
- }
- (void)SvOOK_off(sv);
- if (SvPVX(sv) && SvLEN(sv))
- Safefree(SvPVX(sv));
- Renew(ptr, len+1, char);
- SvPVX(sv) = ptr;
- SvCUR_set(sv, len);
- SvLEN_set(sv, len+1);
- *SvEND(sv) = '\0';
- (void)SvPOK_only(sv); /* validate pointer */
- SvTAINT(sv);
-}
-
-/*
-=for apidoc sv_usepvn_mg
-
-Like C<sv_usepvn>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
-{
- sv_usepvn(sv,ptr,len);
- SvSETMAGIC(sv);
-}
-
-void
-Perl_sv_force_normal(pTHX_ register SV *sv)
-{
- if (SvREADONLY(sv)) {
- if (PL_curcop != &PL_compiling)
- Perl_croak(aTHX_ PL_no_modify);
- }
- if (SvROK(sv))
- sv_unref(sv);
- else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
- sv_unglob(sv);
-}
-
-/*
-=for apidoc sv_chop
-
-Efficient removal of characters from the beginning of the string buffer.
-SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
-the string buffer. The C<ptr> becomes the first character of the adjusted
-string.
-
-=cut
-*/
-
-void
-Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
-
-
-{
- register STRLEN delta;
-
- if (!ptr || !SvPOKp(sv))
- return;
- SV_CHECK_THINKFIRST(sv);
- if (SvTYPE(sv) < SVt_PVIV)
- sv_upgrade(sv,SVt_PVIV);
-
- if (!SvOOK(sv)) {
- if (!SvLEN(sv)) { /* make copy of shared string */
- char *pvx = SvPVX(sv);
- STRLEN len = SvCUR(sv);
- SvGROW(sv, len + 1);
- Move(pvx,SvPVX(sv),len,char);
- *SvEND(sv) = '\0';
- }
- SvIVX(sv) = 0;
- SvFLAGS(sv) |= SVf_OOK;
- }
- SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
- delta = ptr - SvPVX(sv);
- SvLEN(sv) -= delta;
- SvCUR(sv) -= delta;
- SvPVX(sv) += delta;
- SvIVX(sv) += delta;
-}
-
-/*
-=for apidoc sv_catpvn
-
-Concatenates the string onto the end of the string which is in the SV. The
-C<len> indicates number of bytes to copy. Handles 'get' magic, but not
-'set' magic. See C<sv_catpvn_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
-{
- STRLEN tlen;
- char *junk;
-
- junk = SvPV_force(sv, tlen);
- SvGROW(sv, tlen + len + 1);
- if (ptr == junk)
- ptr = SvPVX(sv);
- Move(ptr,SvPVX(sv)+tlen,len,char);
- SvCUR(sv) += len;
- *SvEND(sv) = '\0';
- (void)SvPOK_only_UTF8(sv); /* validate pointer */
- SvTAINT(sv);
-}
-
-/*
-=for apidoc sv_catpvn_mg
-
-Like C<sv_catpvn>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
-{
- sv_catpvn(sv,ptr,len);
- SvSETMAGIC(sv);
-}
-
-/*
-=for apidoc sv_catsv
-
-Concatenates the string from SV C<ssv> onto the end of the string in
-SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
-not 'set' magic. See C<sv_catsv_mg>.
-
-=cut */
-
-void
-Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
-{
- char *spv;
- STRLEN slen;
- if (!sstr)
- return;
- if ((spv = SvPV(sstr, slen))) {
- bool dutf8 = DO_UTF8(dstr);
- bool sutf8 = DO_UTF8(sstr);
-
- if (dutf8 == sutf8)
- sv_catpvn(dstr,spv,slen);
- else {
- if (dutf8) {
- SV* cstr = newSVsv(sstr);
- char *cpv;
- STRLEN clen;
-
- sv_utf8_upgrade(cstr);
- cpv = SvPV(cstr,clen);
- sv_catpvn(dstr,cpv,clen);
- sv_2mortal(cstr);
- }
- else {
- sv_utf8_upgrade(dstr);
- sv_catpvn(dstr,spv,slen);
- SvUTF8_on(dstr);
- }
- }
- }
-}
-
-/*
-=for apidoc sv_catsv_mg
-
-Like C<sv_catsv>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_catsv_mg(pTHX_ SV *dstr, register SV *sstr)
-{
- sv_catsv(dstr,sstr);
- SvSETMAGIC(dstr);
-}
-
-/*
-=for apidoc sv_catpv
-
-Concatenates the string onto the end of the string which is in the SV.
-Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
-{
- register STRLEN len;
- STRLEN tlen;
- char *junk;
-
- if (!ptr)
- return;
- junk = SvPV_force(sv, tlen);
- len = strlen(ptr);
- SvGROW(sv, tlen + len + 1);
- if (ptr == junk)
- ptr = SvPVX(sv);
- Move(ptr,SvPVX(sv)+tlen,len+1,char);
- SvCUR(sv) += len;
- (void)SvPOK_only_UTF8(sv); /* validate pointer */
- SvTAINT(sv);
-}
-
-/*
-=for apidoc sv_catpv_mg
-
-Like C<sv_catpv>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
-{
- sv_catpv(sv,ptr);
- SvSETMAGIC(sv);
-}
-
-SV *
-Perl_newSV(pTHX_ STRLEN len)
-{
- register SV *sv;
-
- new_SV(sv);
- if (len) {
- sv_upgrade(sv, SVt_PV);
- SvGROW(sv, len + 1);
- }
- return sv;
-}
-
-/* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
-
-/*
-=for apidoc sv_magic
-
-Adds magic to an SV.
-
-=cut
-*/
-
-void
-Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
-{
- MAGIC* mg;
-
- if (SvREADONLY(sv)) {
- if (PL_curcop != &PL_compiling && !strchr("gBf", how))
- Perl_croak(aTHX_ PL_no_modify);
- }
- if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
- if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
- if (how == 't')
- mg->mg_len |= 1;
- return;
- }
- }
- else {
- (void)SvUPGRADE(sv, SVt_PVMG);
- }
- Newz(702,mg, 1, MAGIC);
- mg->mg_moremagic = SvMAGIC(sv);
- SvMAGIC(sv) = mg;
-
- /* Some magic sontains a reference loop, where the sv and object refer to
- each other. To prevent a avoid a reference loop that would prevent such
- objects being freed, we look for such loops and if we find one we avoid
- incrementing the object refcount. */
- if (!obj || obj == sv || how == '#' || how == 'r' ||
- (SvTYPE(obj) == SVt_PVGV &&
- (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
- GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
- GvFORM(obj) == (CV*)sv)))
- {
- mg->mg_obj = obj;
- }
- else {
- mg->mg_obj = SvREFCNT_inc(obj);
- mg->mg_flags |= MGf_REFCOUNTED;
- }
- mg->mg_type = how;
- mg->mg_len = namlen;
- if (name)
- if (namlen >= 0)
- mg->mg_ptr = savepvn(name, namlen);
- else if (namlen == HEf_SVKEY)
- mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
-
- switch (how) {
- case 0:
- mg->mg_virtual = &PL_vtbl_sv;
- break;
- case 'A':
- mg->mg_virtual = &PL_vtbl_amagic;
- break;
- case 'a':
- mg->mg_virtual = &PL_vtbl_amagicelem;
- break;
- case 'c':
- mg->mg_virtual = 0;
- break;
- case 'B':
- mg->mg_virtual = &PL_vtbl_bm;
- break;
- case 'D':
- mg->mg_virtual = &PL_vtbl_regdata;
- break;
- case 'd':
- mg->mg_virtual = &PL_vtbl_regdatum;
- break;
- case 'E':
- mg->mg_virtual = &PL_vtbl_env;
- break;
- case 'f':
- mg->mg_virtual = &PL_vtbl_fm;
- break;
- case 'e':
- mg->mg_virtual = &PL_vtbl_envelem;
- break;
- case 'g':
- mg->mg_virtual = &PL_vtbl_mglob;
- break;
- case 'I':
- mg->mg_virtual = &PL_vtbl_isa;
- break;
- case 'i':
- mg->mg_virtual = &PL_vtbl_isaelem;
- break;
- case 'k':
- mg->mg_virtual = &PL_vtbl_nkeys;
- break;
- case 'L':
- SvRMAGICAL_on(sv);
- mg->mg_virtual = 0;
- break;
- case 'l':
- mg->mg_virtual = &PL_vtbl_dbline;
- break;
-#ifdef USE_THREADS
- case 'm':
- mg->mg_virtual = &PL_vtbl_mutex;
- break;
-#endif /* USE_THREADS */
-#ifdef USE_LOCALE_COLLATE
- case 'o':
- mg->mg_virtual = &PL_vtbl_collxfrm;
- break;
-#endif /* USE_LOCALE_COLLATE */
- case 'P':
- mg->mg_virtual = &PL_vtbl_pack;
- break;
- case 'p':
- case 'q':
- mg->mg_virtual = &PL_vtbl_packelem;
- break;
- case 'r':
- mg->mg_virtual = &PL_vtbl_regexp;
- break;
- case 'S':
- mg->mg_virtual = &PL_vtbl_sig;
- break;
- case 's':
- mg->mg_virtual = &PL_vtbl_sigelem;
- break;
- case 't':
- mg->mg_virtual = &PL_vtbl_taint;
- mg->mg_len = 1;
- break;
- case 'U':
- mg->mg_virtual = &PL_vtbl_uvar;
- break;
- case 'v':
- mg->mg_virtual = &PL_vtbl_vec;
- break;
- case 'x':
- mg->mg_virtual = &PL_vtbl_substr;
- break;
- case 'y':
- mg->mg_virtual = &PL_vtbl_defelem;
- break;
- case '*':
- mg->mg_virtual = &PL_vtbl_glob;
- break;
- case '#':
- mg->mg_virtual = &PL_vtbl_arylen;
- break;
- case '.':
- mg->mg_virtual = &PL_vtbl_pos;
- break;
- case '<':
- mg->mg_virtual = &PL_vtbl_backref;
- break;
- case '~': /* Reserved for use by extensions not perl internals. */
- /* Useful for attaching extension internal data to perl vars. */
- /* Note that multiple extensions may clash if magical scalars */
- /* etc holding private data from one are passed to another. */
- SvRMAGICAL_on(sv);
- break;
- default:
- Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
- }
- mg_magical(sv);
- if (SvGMAGICAL(sv))
- SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
-}
-
-/*
-=for apidoc sv_unmagic
-
-Removes magic from an SV.
-
-=cut
-*/
-
-int
-Perl_sv_unmagic(pTHX_ SV *sv, int type)
-{
- MAGIC* mg;
- MAGIC** mgp;
- if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
- return 0;
- mgp = &SvMAGIC(sv);
- for (mg = *mgp; mg; mg = *mgp) {
- if (mg->mg_type == type) {
- MGVTBL* vtbl = mg->mg_virtual;
- *mgp = mg->mg_moremagic;
- if (vtbl && vtbl->svt_free)
- CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
- if (mg->mg_ptr && mg->mg_type != 'g')
- if (mg->mg_len >= 0)
- Safefree(mg->mg_ptr);
- else if (mg->mg_len == HEf_SVKEY)
- SvREFCNT_dec((SV*)mg->mg_ptr);
- if (mg->mg_flags & MGf_REFCOUNTED)
- SvREFCNT_dec(mg->mg_obj);
- Safefree(mg);
- }
- else
- mgp = &mg->mg_moremagic;
- }
- if (!SvMAGIC(sv)) {
- SvMAGICAL_off(sv);
- SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
- }
-
- return 0;
-}
-
-/*
-=for apidoc sv_rvweaken
-
-Weaken a reference.
-
-=cut
-*/
-
-SV *
-Perl_sv_rvweaken(pTHX_ SV *sv)
-{
- SV *tsv;
- if (!SvOK(sv)) /* let undefs pass */
- return sv;
- if (!SvROK(sv))
- Perl_croak(aTHX_ "Can't weaken a nonreference");
- else if (SvWEAKREF(sv)) {
- if (ckWARN(WARN_MISC))
- Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
- return sv;
- }
- tsv = SvRV(sv);
- sv_add_backref(tsv, sv);
- SvWEAKREF_on(sv);
- SvREFCNT_dec(tsv);
- return sv;
-}
-
-void
-Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
-{
- AV *av;
- MAGIC *mg;
- if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
- av = (AV*)mg->mg_obj;
- else {
- av = newAV();
- sv_magic(tsv, (SV*)av, '<', NULL, 0);
- SvREFCNT_dec(av); /* for sv_magic */
- }
- av_push(av,sv);
-}
-
-void
-Perl_sv_del_backref(pTHX_ SV *sv)
-{
- AV *av;
- SV **svp;
- I32 i;
- SV *tsv = SvRV(sv);
- MAGIC *mg;
- if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
- Perl_croak(aTHX_ "panic: del_backref");
- av = (AV *)mg->mg_obj;
- svp = AvARRAY(av);
- i = AvFILLp(av);
- while (i >= 0) {
- if (svp[i] == sv) {
- svp[i] = &PL_sv_undef; /* XXX */
- }
- i--;
- }
-}
-
-/*
-=for apidoc sv_insert
-
-Inserts a string at the specified offset/length within the SV. Similar to
-the Perl substr() function.
-
-=cut
-*/
-
-void
-Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
-{
- register char *big;
- register char *mid;
- register char *midend;
- register char *bigend;
- register I32 i;
- STRLEN curlen;
-
-
- if (!bigstr)
- Perl_croak(aTHX_ "Can't modify non-existent substring");
- SvPV_force(bigstr, curlen);
- (void)SvPOK_only_UTF8(bigstr);
- if (offset + len > curlen) {
- SvGROW(bigstr, offset+len+1);
- Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
- SvCUR_set(bigstr, offset+len);
- }
-
- SvTAINT(bigstr);
- i = littlelen - len;
- if (i > 0) { /* string might grow */
- big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
- mid = big + offset + len;
- midend = bigend = big + SvCUR(bigstr);
- bigend += i;
- *bigend = '\0';
- while (midend > mid) /* shove everything down */
- *--bigend = *--midend;
- Move(little,big+offset,littlelen,char);
- SvCUR(bigstr) += i;
- SvSETMAGIC(bigstr);
- return;
- }
- else if (i == 0) {
- Move(little,SvPVX(bigstr)+offset,len,char);
- SvSETMAGIC(bigstr);
- return;
- }
-
- big = SvPVX(bigstr);
- mid = big + offset;
- midend = mid + len;
- bigend = big + SvCUR(bigstr);
-
- if (midend > bigend)
- Perl_croak(aTHX_ "panic: sv_insert");
-
- if (mid - big > bigend - midend) { /* faster to shorten from end */
- if (littlelen) {
- Move(little, mid, littlelen,char);
- mid += littlelen;
- }
- i = bigend - midend;
- if (i > 0) {
- Move(midend, mid, i,char);
- mid += i;
- }
- *mid = '\0';
- SvCUR_set(bigstr, mid - big);
- }
- /*SUPPRESS 560*/
- else if ((i = mid - big)) { /* faster from front */
- midend -= littlelen;
- mid = midend;
- sv_chop(bigstr,midend-i);
- big += i;
- while (i--)
- *--midend = *--big;
- if (littlelen)
- Move(little, mid, littlelen,char);
- }
- else if (littlelen) {
- midend -= littlelen;
- sv_chop(bigstr,midend);
- Move(little,midend,littlelen,char);
- }
- else {
- sv_chop(bigstr,midend);
- }
- SvSETMAGIC(bigstr);
-}
-
-/*
-=for apidoc sv_replace
-
-Make the first argument a copy of the second, then delete the original.
-
-=cut
-*/
-
-void
-Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
-{
- U32 refcnt = SvREFCNT(sv);
- SV_CHECK_THINKFIRST(sv);
- if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
- if (SvMAGICAL(sv)) {
- if (SvMAGICAL(nsv))
- mg_free(nsv);
- else
- sv_upgrade(nsv, SVt_PVMG);
- SvMAGIC(nsv) = SvMAGIC(sv);
- SvFLAGS(nsv) |= SvMAGICAL(sv);
- SvMAGICAL_off(sv);
- SvMAGIC(sv) = 0;
- }
- SvREFCNT(sv) = 0;
- sv_clear(sv);
- assert(!SvREFCNT(sv));
- StructCopy(nsv,sv,SV);
- SvREFCNT(sv) = refcnt;
- SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
- del_SV(nsv);
-}
-
-/*
-=for apidoc sv_clear
-
-Clear an SV, making it empty. Does not free the memory used by the SV
-itself.
-
-=cut
-*/
-
-void
-Perl_sv_clear(pTHX_ register SV *sv)
-{
- HV* stash;
- assert(sv);
- assert(SvREFCNT(sv) == 0);
-
- if (SvOBJECT(sv)) {
- if (PL_defstash) { /* Still have a symbol table? */
- dSP;
- GV* destructor;
- SV tmpref;
-
- Zero(&tmpref, 1, SV);
- sv_upgrade(&tmpref, SVt_RV);
- SvROK_on(&tmpref);
- SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
- SvREFCNT(&tmpref) = 1;
-
- do {
- stash = SvSTASH(sv);
- destructor = gv_fetchmethod(SvSTASH(sv), "DESTROY");
- if (destructor) {
- ENTER;
- PUSHSTACKi(PERLSI_DESTROY);
- SvRV(&tmpref) = SvREFCNT_inc(sv);
- EXTEND(SP, 2);
- PUSHMARK(SP);
- PUSHs(&tmpref);
- PUTBACK;
- call_sv((SV*)GvCV(destructor),
- G_DISCARD|G_EVAL|G_KEEPERR);
- SvREFCNT(sv)--;
- POPSTACK;
- SPAGAIN;
- LEAVE;
- }
- } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
-
- del_XRV(SvANY(&tmpref));
-
- if (SvREFCNT(sv)) {
- if (PL_in_clean_objs)
- Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
- HvNAME(stash));
- /* DESTROY gave object new lease on life */
- return;
- }
- }
-
- if (SvOBJECT(sv)) {
- SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
- SvOBJECT_off(sv); /* Curse the object. */
- if (SvTYPE(sv) != SVt_PVIO)
- --PL_sv_objcount; /* XXX Might want something more general */
- }
- }
- if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
- mg_free(sv);
- stash = NULL;
- switch (SvTYPE(sv)) {
- case SVt_PVIO:
- if (IoIFP(sv) &&
- IoIFP(sv) != PerlIO_stdin() &&
- IoIFP(sv) != PerlIO_stdout() &&
- IoIFP(sv) != PerlIO_stderr())
- {
- io_close((IO*)sv, FALSE);
- }
- if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
- PerlDir_close(IoDIRP(sv));
- IoDIRP(sv) = (DIR*)NULL;
- Safefree(IoTOP_NAME(sv));
- Safefree(IoFMT_NAME(sv));
- Safefree(IoBOTTOM_NAME(sv));
- /* FALL THROUGH */
- case SVt_PVBM:
- goto freescalar;
- case SVt_PVCV:
- case SVt_PVFM:
- cv_undef((CV*)sv);
- goto freescalar;
- case SVt_PVHV:
- hv_undef((HV*)sv);
- break;
- case SVt_PVAV:
- av_undef((AV*)sv);
- break;
- case SVt_PVLV:
- SvREFCNT_dec(LvTARG(sv));
- goto freescalar;
- case SVt_PVGV:
- gp_free((GV*)sv);
- Safefree(GvNAME(sv));
- /* cannot decrease stash refcount yet, as we might recursively delete
- ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
- of stash until current sv is completely gone.
- -- JohnPC, 27 Mar 1998 */
- stash = GvSTASH(sv);
- /* FALL THROUGH */
- case SVt_PVMG:
- case SVt_PVNV:
- case SVt_PVIV:
- freescalar:
- (void)SvOOK_off(sv);
- /* FALL THROUGH */
- case SVt_PV:
- case SVt_RV:
- if (SvROK(sv)) {
- if (SvWEAKREF(sv))
- sv_del_backref(sv);
- else
- SvREFCNT_dec(SvRV(sv));
- }
- else if (SvPVX(sv) && SvLEN(sv))
- Safefree(SvPVX(sv));
- break;
-/*
- case SVt_NV:
- case SVt_IV:
- case SVt_NULL:
- break;
-*/
- }
-
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- break;
- case SVt_IV:
- del_XIV(SvANY(sv));
- break;
- case SVt_NV:
- del_XNV(SvANY(sv));
- break;
- case SVt_RV:
- del_XRV(SvANY(sv));
- break;
- case SVt_PV:
- del_XPV(SvANY(sv));
- break;
- case SVt_PVIV:
- del_XPVIV(SvANY(sv));
- break;
- case SVt_PVNV:
- del_XPVNV(SvANY(sv));
- break;
- case SVt_PVMG:
- del_XPVMG(SvANY(sv));
- break;
- case SVt_PVLV:
- del_XPVLV(SvANY(sv));
- break;
- case SVt_PVAV:
- del_XPVAV(SvANY(sv));
- break;
- case SVt_PVHV:
- del_XPVHV(SvANY(sv));
- break;
- case SVt_PVCV:
- del_XPVCV(SvANY(sv));
- break;
- case SVt_PVGV:
- del_XPVGV(SvANY(sv));
- /* code duplication for increased performance. */
- SvFLAGS(sv) &= SVf_BREAK;
- SvFLAGS(sv) |= SVTYPEMASK;
- /* decrease refcount of the stash that owns this GV, if any */
- if (stash)
- SvREFCNT_dec(stash);
- return; /* not break, SvFLAGS reset already happened */
- case SVt_PVBM:
- del_XPVBM(SvANY(sv));
- break;
- case SVt_PVFM:
- del_XPVFM(SvANY(sv));
- break;
- case SVt_PVIO:
- del_XPVIO(SvANY(sv));
- break;
- }
- SvFLAGS(sv) &= SVf_BREAK;
- SvFLAGS(sv) |= SVTYPEMASK;
-}
-
-SV *
-Perl_sv_newref(pTHX_ SV *sv)
-{
- if (sv)
- ATOMIC_INC(SvREFCNT(sv));
- return sv;
-}
-
-/*
-=for apidoc sv_free
-
-Free the memory used by an SV.
-
-=cut
-*/
-
-void
-Perl_sv_free(pTHX_ SV *sv)
-{
- int refcount_is_zero;
-
- if (!sv)
- return;
- if (SvREFCNT(sv) == 0) {
- if (SvFLAGS(sv) & SVf_BREAK)
- return;
- if (PL_in_clean_all) /* All is fair */
- return;
- if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
- /* make sure SvREFCNT(sv)==0 happens very seldom */
- SvREFCNT(sv) = (~(U32)0)/2;
- return;
- }
- if (ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
- return;
- }
- ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
- if (!refcount_is_zero)
- return;
-#ifdef DEBUGGING
- if (SvTEMP(sv)) {
- if (ckWARN_d(WARN_DEBUGGING))
- Perl_warner(aTHX_ WARN_DEBUGGING,
- "Attempt to free temp prematurely: SV 0x%"UVxf,
- PTR2UV(sv));
- return;
- }
-#endif
- if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
- /* make sure SvREFCNT(sv)==0 happens very seldom */
- SvREFCNT(sv) = (~(U32)0)/2;
- return;
- }
- sv_clear(sv);
- if (! SvREFCNT(sv))
- del_SV(sv);
-}
-
-/*
-=for apidoc sv_len
-
-Returns the length of the string in the SV. See also C<SvCUR>.
-
-=cut
-*/
-
-STRLEN
-Perl_sv_len(pTHX_ register SV *sv)
-{
- char *junk;
- STRLEN len;
-
- if (!sv)
- return 0;
-
- if (SvGMAGICAL(sv))
- len = mg_length(sv);
- else
- junk = SvPV(sv, len);
- return len;
-}
-
-/*
-=for apidoc sv_len_utf8
-
-Returns the number of characters in the string in an SV, counting wide
-UTF8 bytes as a single character.
-
-=cut
-*/
-
-STRLEN
-Perl_sv_len_utf8(pTHX_ register SV *sv)
-{
- if (!sv)
- return 0;
-
-#ifdef NOTYET
- if (SvGMAGICAL(sv))
- return mg_length(sv);
- else
-#endif
- {
- STRLEN len;
- U8 *s = (U8*)SvPV(sv, len);
-
- return Perl_utf8_length(aTHX_ s, s + len);
- }
-}
-
-void
-Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
-{
- U8 *start;
- U8 *s;
- U8 *send;
- I32 uoffset = *offsetp;
- STRLEN len;
-
- if (!sv)
- return;
-
- start = s = (U8*)SvPV(sv, len);
- send = s + len;
- while (s < send && uoffset--)
- s += UTF8SKIP(s);
- if (s >= send)
- s = send;
- *offsetp = s - start;
- if (lenp) {
- I32 ulen = *lenp;
- start = s;
- while (s < send && ulen--)
- s += UTF8SKIP(s);
- if (s >= send)
- s = send;
- *lenp = s - start;
- }
- return;
-}
-
-void
-Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
-{
- U8 *s;
- U8 *send;
- STRLEN len;
-
- if (!sv)
- return;
-
- s = (U8*)SvPV(sv, len);
- if (len < *offsetp)
- Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
- send = s + *offsetp;
- len = 0;
- while (s < send) {
- STRLEN n;
-
- if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
- s += n;
- len++;
- }
- else
- break;
- }
- *offsetp = len;
- return;
-}
-
-/*
-=for apidoc sv_eq
-
-Returns a boolean indicating whether the strings in the two SVs are
-identical.
-
-=cut
-*/
-
-I32
-Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
-{
- char *pv1;
- STRLEN cur1;
- char *pv2;
- STRLEN cur2;
- I32 eq = 0;
- bool pv1tmp = FALSE;
- bool pv2tmp = FALSE;
-
- if (!sv1) {
- pv1 = "";
- cur1 = 0;
- }
- else
- pv1 = SvPV(sv1, cur1);
-
- if (!sv2){
- pv2 = "";
- cur2 = 0;
- }
- else
- pv2 = SvPV(sv2, cur2);
-
- /* do not utf8ize the comparands as a side-effect */
- if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
- bool is_utf8 = TRUE;
-
- if (SvUTF8(sv1)) {
- char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
-
- if ((pv1tmp = (pv != pv1)))
- pv1 = pv;
- }
- else {
- char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
-
- if ((pv2tmp = (pv != pv2)))
- pv2 = pv;
- }
- }
-
- if (cur1 == cur2)
- eq = memEQ(pv1, pv2, cur1);
-
- if (pv1tmp)
- Safefree(pv1);
- if (pv2tmp)
- Safefree(pv2);
-
- return eq;
-}
-
-/*
-=for apidoc sv_cmp
-
-Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
-string in C<sv1> is less than, equal to, or greater than the string in
-C<sv2>.
-
-=cut
-*/
-
-I32
-Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
-{
- STRLEN cur1, cur2;
- char *pv1, *pv2;
- I32 cmp;
- bool pv1tmp = FALSE;
- bool pv2tmp = FALSE;
-
- if (!sv1) {
- pv1 = "";
- cur1 = 0;
- }
- else
- pv1 = SvPV(sv1, cur1);
-
- if (!sv2){
- pv2 = "";
- cur2 = 0;
- }
- else
- pv2 = SvPV(sv2, cur2);
-
- /* do not utf8ize the comparands as a side-effect */
- if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
- if (SvUTF8(sv1)) {
- pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
- pv2tmp = TRUE;
- }
- else {
- pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
- pv1tmp = TRUE;
- }
- }
-
- if (!cur1) {
- cmp = cur2 ? -1 : 0;
- } else if (!cur2) {
- cmp = 1;
- } else {
- I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
-
- if (retval) {
- cmp = retval < 0 ? -1 : 1;
- } else if (cur1 == cur2) {
- cmp = 0;
- } else {
- cmp = cur1 < cur2 ? -1 : 1;
- }
- }
-
- if (pv1tmp)
- Safefree(pv1);
- if (pv2tmp)
- Safefree(pv2);
-
- return cmp;
-}
-
-/*
-=for apidoc sv_cmp_locale
-
-Compares the strings in two SVs in a locale-aware manner. See
-L</sv_cmp_locale>
-
-=cut
-*/
-
-I32
-Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
-{
-#ifdef USE_LOCALE_COLLATE
-
- char *pv1, *pv2;
- STRLEN len1, len2;
- I32 retval;
-
- if (PL_collation_standard)
- goto raw_compare;
-
- len1 = 0;
- pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
- len2 = 0;
- pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
-
- if (!pv1 || !len1) {
- if (pv2 && len2)
- return -1;
- else
- goto raw_compare;
- }
- else {
- if (!pv2 || !len2)
- return 1;
- }
-
- retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
-
- if (retval)
- return retval < 0 ? -1 : 1;
-
- /*
- * When the result of collation is equality, that doesn't mean
- * that there are no differences -- some locales exclude some
- * characters from consideration. So to avoid false equalities,
- * we use the raw string as a tiebreaker.
- */
-
- raw_compare:
- /* FALL THROUGH */
-
-#endif /* USE_LOCALE_COLLATE */
-
- return sv_cmp(sv1, sv2);
-}
-
-#ifdef USE_LOCALE_COLLATE
-/*
- * Any scalar variable may carry an 'o' magic that contains the
- * scalar data of the variable transformed to such a format that
- * a normal memory comparison can be used to compare the data
- * according to the locale settings.
- */
-char *
-Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
-{
- MAGIC *mg;
-
- mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
- if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
- char *s, *xf;
- STRLEN len, xlen;
-
- if (mg)
- Safefree(mg->mg_ptr);
- s = SvPV(sv, len);
- if ((xf = mem_collxfrm(s, len, &xlen))) {
- if (SvREADONLY(sv)) {
- SAVEFREEPV(xf);
- *nxp = xlen;
- return xf + sizeof(PL_collation_ix);
- }
- if (! mg) {
- sv_magic(sv, 0, 'o', 0, 0);
- mg = mg_find(sv, 'o');
- assert(mg);
- }
- mg->mg_ptr = xf;
- mg->mg_len = xlen;
- }
- else {
- if (mg) {
- mg->mg_ptr = NULL;
- mg->mg_len = -1;
- }
- }
- }
- if (mg && mg->mg_ptr) {
- *nxp = mg->mg_len;
- return mg->mg_ptr + sizeof(PL_collation_ix);
- }
- else {
- *nxp = 0;
- return NULL;
- }
-}
-
-#endif /* USE_LOCALE_COLLATE */
-
-/*
-=for apidoc sv_gets
-
-Get a line from the filehandle and store it into the SV, optionally
-appending to the currently-stored string.
-
-=cut
-*/
-
-char *
-Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
-{
- char *rsptr;
- STRLEN rslen;
- register STDCHAR rslast;
- register STDCHAR *bp;
- register I32 cnt;
- I32 i;
-
- SV_CHECK_THINKFIRST(sv);
- (void)SvUPGRADE(sv, SVt_PV);
-
- SvSCREAM_off(sv);
-
- if (RsSNARF(PL_rs)) {
- rsptr = NULL;
- rslen = 0;
- }
- else if (RsRECORD(PL_rs)) {
- I32 recsize, bytesread;
- char *buffer;
-
- /* Grab the size of the record we're getting */
- recsize = SvIV(SvRV(PL_rs));
- (void)SvPOK_only(sv); /* Validate pointer */
- buffer = SvGROW(sv, recsize + 1);
- /* Go yank in */
-#ifdef VMS
- /* VMS wants read instead of fread, because fread doesn't respect */
- /* RMS record boundaries. This is not necessarily a good thing to be */
- /* doing, but we've got no other real choice */
- bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
-#else
- bytesread = PerlIO_read(fp, buffer, recsize);
-#endif
- SvCUR_set(sv, bytesread);
- buffer[bytesread] = '\0';
- SvUTF8_off(sv);
- return(SvCUR(sv) ? SvPVX(sv) : Nullch);
- }
- else if (RsPARA(PL_rs)) {
- rsptr = "\n\n";
- rslen = 2;
- }
- else {
- /* Get $/ i.e. PL_rs into same encoding as stream wants */
- if (SvUTF8(PL_rs)) {
- if (!sv_utf8_downgrade(PL_rs, TRUE)) {
- Perl_croak(aTHX_ "Wide character in $/");
- }
- }
- rsptr = SvPV(PL_rs, rslen);
- }
-
- rslast = rslen ? rsptr[rslen - 1] : '\0';
-
- if (RsPARA(PL_rs)) { /* have to do this both before and after */
- do { /* to make sure file boundaries work right */
- if (PerlIO_eof(fp))
- return 0;
- i = PerlIO_getc(fp);
- if (i != '\n') {
- if (i == -1)
- return 0;
- PerlIO_ungetc(fp,i);
- break;
- }
- } while (i != EOF);
- }
-
- /* See if we know enough about I/O mechanism to cheat it ! */
-
- /* This used to be #ifdef test - it is made run-time test for ease
- of abstracting out stdio interface. One call should be cheap
- enough here - and may even be a macro allowing compile
- time optimization.
- */
-
- if (PerlIO_fast_gets(fp)) {
-
- /*
- * We're going to steal some values from the stdio struct
- * and put EVERYTHING in the innermost loop into registers.
- */
- register STDCHAR *ptr;
- STRLEN bpx;
- I32 shortbuffered;
-
-#if defined(VMS) && defined(PERLIO_IS_STDIO)
- /* An ungetc()d char is handled separately from the regular
- * buffer, so we getc() it back out and stuff it in the buffer.
- */
- i = PerlIO_getc(fp);
- if (i == EOF) return 0;
- *(--((*fp)->_ptr)) = (unsigned char) i;
- (*fp)->_cnt++;
-#endif
-
- /* Here is some breathtakingly efficient cheating */
-
- cnt = PerlIO_get_cnt(fp); /* get count into register */
- (void)SvPOK_only(sv); /* validate pointer */
- if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
- if (cnt > 80 && SvLEN(sv) > append) {
- shortbuffered = cnt - SvLEN(sv) + append + 1;
- cnt -= shortbuffered;
- }
- else {
- shortbuffered = 0;
- /* remember that cnt can be negative */
- SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
- }
- }
- else
- shortbuffered = 0;
- bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
- ptr = (STDCHAR*)PerlIO_get_ptr(fp);
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
- PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
- PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
- for (;;) {
- screamer:
- if (cnt > 0) {
- if (rslen) {
- while (cnt > 0) { /* this | eat */
- cnt--;
- if ((*bp++ = *ptr++) == rslast) /* really | dust */
- goto thats_all_folks; /* screams | sed :-) */
- }
- }
- else {
- Copy(ptr, bp, cnt, char); /* this | eat */
- bp += cnt; /* screams | dust */
- ptr += cnt; /* louder | sed :-) */
- cnt = 0;
- }
- }
-
- if (shortbuffered) { /* oh well, must extend */
- cnt = shortbuffered;
- shortbuffered = 0;
- bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
- SvCUR_set(sv, bpx);
- SvGROW(sv, SvLEN(sv) + append + cnt + 2);
- bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
- continue;
- }
-
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
- PTR2UV(ptr),(long)cnt));
- PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
- PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
- PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
- /* This used to call 'filbuf' in stdio form, but as that behaves like
- getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
- another abstraction. */
- i = PerlIO_getc(fp); /* get more characters */
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
- PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
- PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
- cnt = PerlIO_get_cnt(fp);
- ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
-
- if (i == EOF) /* all done for ever? */
- goto thats_really_all_folks;
-
- bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
- SvCUR_set(sv, bpx);
- SvGROW(sv, bpx + cnt + 2);
- bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
-
- *bp++ = i; /* store character from PerlIO_getc */
-
- if (rslen && (STDCHAR)i == rslast) /* all done for now? */
- goto thats_all_folks;
- }
-
-thats_all_folks:
- if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
- memNE((char*)bp - rslen, rsptr, rslen))
- goto screamer; /* go back to the fray */
-thats_really_all_folks:
- if (shortbuffered)
- cnt += shortbuffered;
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
- PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
- PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
- PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
- *bp = '\0';
- SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "Screamer: done, len=%ld, string=|%.*s|\n",
- (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
- }
- else
- {
-#ifndef EPOC
- /*The big, slow, and stupid way */
- STDCHAR buf[8192];
-#else
- /* Need to work around EPOC SDK features */
- /* On WINS: MS VC5 generates calls to _chkstk, */
- /* if a `large' stack frame is allocated */
- /* gcc on MARM does not generate calls like these */
- STDCHAR buf[1024];
-#endif
-
-screamer2:
- if (rslen) {
- register STDCHAR *bpe = buf + sizeof(buf);
- bp = buf;
- while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
- ; /* keep reading */
- cnt = bp - buf;
- }
- else {
- cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
- /* Accomodate broken VAXC compiler, which applies U8 cast to
- * both args of ?: operator, causing EOF to change into 255
- */
- if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
- }
-
- if (append)
- sv_catpvn(sv, (char *) buf, cnt);
- else
- sv_setpvn(sv, (char *) buf, cnt);
-
- if (i != EOF && /* joy */
- (!rslen ||
- SvCUR(sv) < rslen ||
- memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
- {
- append = -1;
- /*
- * If we're reading from a TTY and we get a short read,
- * indicating that the user hit his EOF character, we need
- * to notice it now, because if we try to read from the TTY
- * again, the EOF condition will disappear.
- *
- * The comparison of cnt to sizeof(buf) is an optimization
- * that prevents unnecessary calls to feof().
- *
- * - jik 9/25/96
- */
- if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
- goto screamer2;
- }
- }
-
- if (RsPARA(PL_rs)) { /* have to do this both before and after */
- while (i != EOF) { /* to make sure file boundaries work right */
- i = PerlIO_getc(fp);
- if (i != '\n') {
- PerlIO_ungetc(fp,i);
- break;
- }
- }
- }
-
- SvUTF8_off(sv);
-
- return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
-}
-
-
-/*
-=for apidoc sv_inc
-
-Auto-increment of the value in the SV.
-
-=cut
-*/
-
-void
-Perl_sv_inc(pTHX_ register SV *sv)
-{
- register char *d;
- int flags;
-
- if (!sv)
- return;
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvTHINKFIRST(sv)) {
- if (SvREADONLY(sv)) {
- if (PL_curcop != &PL_compiling)
- Perl_croak(aTHX_ PL_no_modify);
- }
- if (SvROK(sv)) {
- IV i;
- if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
- return;
- i = PTR2IV(SvRV(sv));
- sv_unref(sv);
- sv_setiv(sv, i);
- }
- }
- flags = SvFLAGS(sv);
- if (flags & SVp_NOK) {
- (void)SvNOK_only(sv);
- SvNVX(sv) += 1.0;
- return;
- }
- if (flags & SVp_IOK) {
- if (SvIsUV(sv)) {
- if (SvUVX(sv) == UV_MAX)
- sv_setnv(sv, (NV)UV_MAX + 1.0);
- else
- (void)SvIOK_only_UV(sv);
- ++SvUVX(sv);
- } else {
- if (SvIVX(sv) == IV_MAX)
- sv_setnv(sv, (NV)IV_MAX + 1.0);
- else {
- (void)SvIOK_only(sv);
- ++SvIVX(sv);
- }
- }
- return;
- }
- if (!(flags & SVp_POK) || !*SvPVX(sv)) {
- if ((flags & SVTYPEMASK) < SVt_PVNV)
- sv_upgrade(sv, SVt_NV);
- SvNVX(sv) = 1.0;
- (void)SvNOK_only(sv);
- return;
- }
- d = SvPVX(sv);
- while (isALPHA(*d)) d++;
- while (isDIGIT(*d)) d++;
- if (*d) {
- sv_setnv(sv,Atof(SvPVX(sv)) + 1.0); /* punt */
- return;
- }
- d--;
- while (d >= SvPVX(sv)) {
- if (isDIGIT(*d)) {
- if (++*d <= '9')
- return;
- *(d--) = '0';
- }
- else {
-#ifdef EBCDIC
- /* MKS: The original code here died if letters weren't consecutive.
- * at least it didn't have to worry about non-C locales. The
- * new code assumes that ('z'-'a')==('Z'-'A'), letters are
- * arranged in order (although not consecutively) and that only
- * [A-Za-z] are accepted by isALPHA in the C locale.
- */
- if (*d != 'z' && *d != 'Z') {
- do { ++*d; } while (!isALPHA(*d));
- return;
- }
- *(d--) -= 'z' - 'a';
-#else
- ++*d;
- if (isALPHA(*d))
- return;
- *(d--) -= 'z' - 'a' + 1;
-#endif
- }
- }
- /* oh,oh, the number grew */
- SvGROW(sv, SvCUR(sv) + 2);
- SvCUR(sv)++;
- for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
- *d = d[-1];
- if (isDIGIT(d[1]))
- *d = '1';
- else
- *d = d[1];
-}
-
-/*
-=for apidoc sv_dec
-
-Auto-decrement of the value in the SV.
-
-=cut
-*/
-
-void
-Perl_sv_dec(pTHX_ register SV *sv)
-{
- int flags;
-
- if (!sv)
- return;
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvTHINKFIRST(sv)) {
- if (SvREADONLY(sv)) {
- if (PL_curcop != &PL_compiling)
- Perl_croak(aTHX_ PL_no_modify);
- }
- if (SvROK(sv)) {
- IV i;
- if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
- return;
- i = PTR2IV(SvRV(sv));
- sv_unref(sv);
- sv_setiv(sv, i);
- }
- }
- flags = SvFLAGS(sv);
- if (flags & SVp_NOK) {
- SvNVX(sv) -= 1.0;
- (void)SvNOK_only(sv);
- return;
- }
- if (flags & SVp_IOK) {
- if (SvIsUV(sv)) {
- if (SvUVX(sv) == 0) {
- (void)SvIOK_only(sv);
- SvIVX(sv) = -1;
- }
- else {
- (void)SvIOK_only_UV(sv);
- --SvUVX(sv);
- }
- } else {
- if (SvIVX(sv) == IV_MIN)
- sv_setnv(sv, (NV)IV_MIN - 1.0);
- else {
- (void)SvIOK_only(sv);
- --SvIVX(sv);
- }
- }
- return;
- }
- if (!(flags & SVp_POK)) {
- if ((flags & SVTYPEMASK) < SVt_PVNV)
- sv_upgrade(sv, SVt_NV);
- SvNVX(sv) = -1.0;
- (void)SvNOK_only(sv);
- return;
- }
- sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
-}
-
-/*
-=for apidoc sv_mortalcopy
-
-Creates a new SV which is a copy of the original SV. The new SV is marked
-as mortal.
-
-=cut
-*/
-
-/* Make a string that will exist for the duration of the expression
- * evaluation. Actually, it may have to last longer than that, but
- * hopefully we won't free it until it has been assigned to a
- * permanent location. */
-
-SV *
-Perl_sv_mortalcopy(pTHX_ SV *oldstr)
-{
- register SV *sv;
-
- new_SV(sv);
- sv_setsv(sv,oldstr);
- EXTEND_MORTAL(1);
- PL_tmps_stack[++PL_tmps_ix] = sv;
- SvTEMP_on(sv);
- return sv;
-}
-
-/*
-=for apidoc sv_newmortal
-
-Creates a new SV which is mortal. The reference count of the SV is set to 1.
-
-=cut
-*/
-
-SV *
-Perl_sv_newmortal(pTHX)
-{
- register SV *sv;
-
- new_SV(sv);
- SvFLAGS(sv) = SVs_TEMP;
- EXTEND_MORTAL(1);
- PL_tmps_stack[++PL_tmps_ix] = sv;
- return sv;
-}
-
-/*
-=for apidoc sv_2mortal
-
-Marks an SV as mortal. The SV will be destroyed when the current context
-ends.
-
-=cut
-*/
-
-/* same thing without the copying */
-
-SV *
-Perl_sv_2mortal(pTHX_ register SV *sv)
-{
- if (!sv)
- return sv;
- if (SvREADONLY(sv) && SvIMMORTAL(sv))
- return sv;
- EXTEND_MORTAL(1);
- PL_tmps_stack[++PL_tmps_ix] = sv;
- SvTEMP_on(sv);
- return sv;
-}
-
-/*
-=for apidoc newSVpv
-
-Creates a new SV and copies a string into it. The reference count for the
-SV is set to 1. If C<len> is zero, Perl will compute the length using
-strlen(). For efficiency, consider using C<newSVpvn> instead.
-
-=cut
-*/
-
-SV *
-Perl_newSVpv(pTHX_ const char *s, STRLEN len)
-{
- register SV *sv;
-
- new_SV(sv);
- if (!len)
- len = strlen(s);
- sv_setpvn(sv,s,len);
- return sv;
-}
-
-/*
-=for apidoc newSVpvn
-
-Creates a new SV and copies a string into it. The reference count for the
-SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
-string. You are responsible for ensuring that the source string is at least
-C<len> bytes long.
-
-=cut
-*/
-
-SV *
-Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
-{
- register SV *sv;
-
- new_SV(sv);
- sv_setpvn(sv,s,len);
- return sv;
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-SV *
-Perl_newSVpvf_nocontext(const char* pat, ...)
-{
- dTHX;
- register SV *sv;
- va_list args;
- va_start(args, pat);
- sv = vnewSVpvf(pat, &args);
- va_end(args);
- return sv;
-}
-#endif
-
-/*
-=for apidoc newSVpvf
-
-Creates a new SV an initialize it with the string formatted like
-C<sprintf>.
-
-=cut
-*/
-
-SV *
-Perl_newSVpvf(pTHX_ const char* pat, ...)
-{
- register SV *sv;
- va_list args;
- va_start(args, pat);
- sv = vnewSVpvf(pat, &args);
- va_end(args);
- return sv;
-}
-
-SV *
-Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
-{
- register SV *sv;
- new_SV(sv);
- sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
- return sv;
-}
-
-/*
-=for apidoc newSVnv
-
-Creates a new SV and copies a floating point value into it.
-The reference count for the SV is set to 1.
-
-=cut
-*/
-
-SV *
-Perl_newSVnv(pTHX_ NV n)
-{
- register SV *sv;
-
- new_SV(sv);
- sv_setnv(sv,n);
- return sv;
-}
-
-/*
-=for apidoc newSViv
-
-Creates a new SV and copies an integer into it. The reference count for the
-SV is set to 1.
-
-=cut
-*/
-
-SV *
-Perl_newSViv(pTHX_ IV i)
-{
- register SV *sv;
-
- new_SV(sv);
- sv_setiv(sv,i);
- return sv;
-}
-
-/*
-=for apidoc newSVuv
-
-Creates a new SV and copies an unsigned integer into it.
-The reference count for the SV is set to 1.
-
-=cut
-*/
-
-SV *
-Perl_newSVuv(pTHX_ UV u)
-{
- register SV *sv;
-
- new_SV(sv);
- sv_setuv(sv,u);
- return sv;
-}
-
-/*
-=for apidoc newRV_noinc
-
-Creates an RV wrapper for an SV. The reference count for the original
-SV is B<not> incremented.
-
-=cut
-*/
-
-SV *
-Perl_newRV_noinc(pTHX_ SV *tmpRef)
-{
- register SV *sv;
-
- new_SV(sv);
- sv_upgrade(sv, SVt_RV);
- SvTEMP_off(tmpRef);
- SvRV(sv) = tmpRef;
- SvROK_on(sv);
- return sv;
-}
-
-/* newRV_inc is #defined to newRV in sv.h */
-SV *
-Perl_newRV(pTHX_ SV *tmpRef)
-{
- return newRV_noinc(SvREFCNT_inc(tmpRef));
-}
-
-/*
-=for apidoc newSVsv
-
-Creates a new SV which is an exact duplicate of the original SV.
-
-=cut
-*/
-
-/* make an exact duplicate of old */
-
-SV *
-Perl_newSVsv(pTHX_ register SV *old)
-{
- register SV *sv;
-
- if (!old)
- return Nullsv;
- if (SvTYPE(old) == SVTYPEMASK) {
- if (ckWARN_d(WARN_INTERNAL))
- Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
- return Nullsv;
- }
- new_SV(sv);
- if (SvTEMP(old)) {
- SvTEMP_off(old);
- sv_setsv(sv,old);
- SvTEMP_on(old);
- }
- else
- sv_setsv(sv,old);
- return sv;
-}
-
-void
-Perl_sv_reset(pTHX_ register char *s, HV *stash)
-{
- register HE *entry;
- register GV *gv;
- register SV *sv;
- register I32 i;
- register PMOP *pm;
- register I32 max;
- char todo[PERL_UCHAR_MAX+1];
-
- if (!stash)
- return;
-
- if (!*s) { /* reset ?? searches */
- for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
- pm->op_pmdynflags &= ~PMdf_USED;
- }
- return;
- }
-
- /* reset variables */
-
- if (!HvARRAY(stash))
- return;
-
- Zero(todo, 256, char);
- while (*s) {
- i = (unsigned char)*s;
- if (s[1] == '-') {
- s += 2;
- }
- max = (unsigned char)*s++;
- for ( ; i <= max; i++) {
- todo[i] = 1;
- }
- for (i = 0; i <= (I32) HvMAX(stash); i++) {
- for (entry = HvARRAY(stash)[i];
- entry;
- entry = HeNEXT(entry))
- {
- if (!todo[(U8)*HeKEY(entry)])
- continue;
- gv = (GV*)HeVAL(entry);
- sv = GvSV(gv);
- if (SvTHINKFIRST(sv)) {
- if (!SvREADONLY(sv) && SvROK(sv))
- sv_unref(sv);
- continue;
- }
- (void)SvOK_off(sv);
- if (SvTYPE(sv) >= SVt_PV) {
- SvCUR_set(sv, 0);
- if (SvPVX(sv) != Nullch)
- *SvPVX(sv) = '\0';
- SvTAINT(sv);
- }
- if (GvAV(gv)) {
- av_clear(GvAV(gv));
- }
- if (GvHV(gv) && !HvNAME(GvHV(gv))) {
- hv_clear(GvHV(gv));
-#ifdef USE_ENVIRON_ARRAY
- if (gv == PL_envgv)
- environ[0] = Nullch;
-#endif
- }
- }
- }
- }
-}
-
-IO*
-Perl_sv_2io(pTHX_ SV *sv)
-{
- IO* io;
- GV* gv;
- STRLEN n_a;
-
- switch (SvTYPE(sv)) {
- case SVt_PVIO:
- io = (IO*)sv;
- break;
- case SVt_PVGV:
- gv = (GV*)sv;
- io = GvIO(gv);
- if (!io)
- Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
- break;
- default:
- if (!SvOK(sv))
- Perl_croak(aTHX_ PL_no_usym, "filehandle");
- if (SvROK(sv))
- return sv_2io(SvRV(sv));
- gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
- if (gv)
- io = GvIO(gv);
- else
- io = 0;
- if (!io)
- Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
- break;
- }
- return io;
-}
-
-CV *
-Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
-{
- GV *gv;
- CV *cv;
- STRLEN n_a;
-
- if (!sv)
- return *gvp = Nullgv, Nullcv;
- switch (SvTYPE(sv)) {
- case SVt_PVCV:
- *st = CvSTASH(sv);
- *gvp = Nullgv;
- return (CV*)sv;
- case SVt_PVHV:
- case SVt_PVAV:
- *gvp = Nullgv;
- return Nullcv;
- case SVt_PVGV:
- gv = (GV*)sv;
- *gvp = gv;
- *st = GvESTASH(gv);
- goto fix_gv;
-
- default:
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (SvROK(sv)) {
- SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
- tryAMAGICunDEREF(to_cv);
-
- sv = SvRV(sv);
- if (SvTYPE(sv) == SVt_PVCV) {
- cv = (CV*)sv;
- *gvp = Nullgv;
- *st = CvSTASH(cv);
- return cv;
- }
- else if(isGV(sv))
- gv = (GV*)sv;
- else
- Perl_croak(aTHX_ "Not a subroutine reference");
- }
- else if (isGV(sv))
- gv = (GV*)sv;
- else
- gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
- *gvp = gv;
- if (!gv)
- return Nullcv;
- *st = GvESTASH(gv);
- fix_gv:
- if (lref && !GvCVu(gv)) {
- SV *tmpsv;
- ENTER;
- tmpsv = NEWSV(704,0);
- gv_efullname3(tmpsv, gv, Nullch);
- /* XXX this is probably not what they think they're getting.
- * It has the same effect as "sub name;", i.e. just a forward
- * declaration! */
- newSUB(start_subparse(FALSE, 0),
- newSVOP(OP_CONST, 0, tmpsv),
- Nullop,
- Nullop);
- LEAVE;
- if (!GvCVu(gv))
- Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
- }
- return GvCVu(gv);
- }
-}
-
-/*
-=for apidoc sv_true
-
-Returns true if the SV has a true value by Perl's rules.
-
-=cut
-*/
-
-I32
-Perl_sv_true(pTHX_ register SV *sv)
-{
- if (!sv)
- return 0;
- if (SvPOK(sv)) {
- register XPV* tXpv;
- if ((tXpv = (XPV*)SvANY(sv)) &&
- (tXpv->xpv_cur > 1 ||
- (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
- return 1;
- else
- return 0;
- }
- else {
- if (SvIOK(sv))
- return SvIVX(sv) != 0;
- else {
- if (SvNOK(sv))
- return SvNVX(sv) != 0.0;
- else
- return sv_2bool(sv);
- }
- }
-}
-
-IV
-Perl_sv_iv(pTHX_ register SV *sv)
-{
- if (SvIOK(sv)) {
- if (SvIsUV(sv))
- return (IV)SvUVX(sv);
- return SvIVX(sv);
- }
- return sv_2iv(sv);
-}
-
-UV
-Perl_sv_uv(pTHX_ register SV *sv)
-{
- if (SvIOK(sv)) {
- if (SvIsUV(sv))
- return SvUVX(sv);
- return (UV)SvIVX(sv);
- }
- return sv_2uv(sv);
-}
-
-NV
-Perl_sv_nv(pTHX_ register SV *sv)
-{
- if (SvNOK(sv))
- return SvNVX(sv);
- return sv_2nv(sv);
-}
-
-char *
-Perl_sv_pv(pTHX_ SV *sv)
-{
- STRLEN n_a;
-
- if (SvPOK(sv))
- return SvPVX(sv);
-
- return sv_2pv(sv, &n_a);
-}
-
-char *
-Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
-{
- if (SvPOK(sv)) {
- *lp = SvCUR(sv);
- return SvPVX(sv);
- }
- return sv_2pv(sv, lp);
-}
-
-/*
-=for apidoc sv_pvn_force
-
-Get a sensible string out of the SV somehow.
-
-=cut
-*/
-
-char *
-Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
-{
- char *s;
-
- if (SvTHINKFIRST(sv) && !SvROK(sv))
- sv_force_normal(sv);
-
- if (SvPOK(sv)) {
- *lp = SvCUR(sv);
- }
- else {
- if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
- Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
- PL_op_name[PL_op->op_type]);
- }
- else
- s = sv_2pv(sv, lp);
- if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
- STRLEN len = *lp;
-
- if (SvROK(sv))
- sv_unref(sv);
- (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
- SvGROW(sv, len + 1);
- Move(s,SvPVX(sv),len,char);
- SvCUR_set(sv, len);
- *SvEND(sv) = '\0';
- }
- if (!SvPOK(sv)) {
- SvPOK_on(sv); /* validate pointer */
- SvTAINT(sv);
- DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
- PTR2UV(sv),SvPVX(sv)));
- }
- }
- return SvPVX(sv);
-}
-
-char *
-Perl_sv_pvbyte(pTHX_ SV *sv)
-{
- return sv_pv(sv);
-}
-
-char *
-Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
-{
- return sv_pvn(sv,lp);
-}
-
-char *
-Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
-{
- return sv_pvn_force(sv,lp);
-}
-
-char *
-Perl_sv_pvutf8(pTHX_ SV *sv)
-{
- sv_utf8_upgrade(sv);
- return sv_pv(sv);
-}
-
-char *
-Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
-{
- sv_utf8_upgrade(sv);
- return sv_pvn(sv,lp);
-}
-
-/*
-=for apidoc sv_pvutf8n_force
-
-Get a sensible UTF8-encoded string out of the SV somehow. See
-L</sv_pvn_force>.
-
-=cut
-*/
-
-char *
-Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
-{
- sv_utf8_upgrade(sv);
- return sv_pvn_force(sv,lp);
-}
-
-/*
-=for apidoc sv_reftype
-
-Returns a string describing what the SV is a reference to.
-
-=cut
-*/
-
-char *
-Perl_sv_reftype(pTHX_ SV *sv, int ob)
-{
- if (ob && SvOBJECT(sv))
- return HvNAME(SvSTASH(sv));
- else {
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- case SVt_IV:
- case SVt_NV:
- case SVt_RV:
- case SVt_PV:
- case SVt_PVIV:
- case SVt_PVNV:
- case SVt_PVMG:
- case SVt_PVBM:
- if (SvROK(sv))
- return "REF";
- else
- return "SCALAR";
- case SVt_PVLV: return "LVALUE";
- case SVt_PVAV: return "ARRAY";
- case SVt_PVHV: return "HASH";
- case SVt_PVCV: return "CODE";
- case SVt_PVGV: return "GLOB";
- case SVt_PVFM: return "FORMAT";
- case SVt_PVIO: return "IO";
- default: return "UNKNOWN";
- }
- }
-}
-
-/*
-=for apidoc sv_isobject
-
-Returns a boolean indicating whether the SV is an RV pointing to a blessed
-object. If the SV is not an RV, or if the object is not blessed, then this
-will return false.
-
-=cut
-*/
-
-int
-Perl_sv_isobject(pTHX_ SV *sv)
-{
- if (!sv)
- return 0;
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (!SvROK(sv))
- return 0;
- sv = (SV*)SvRV(sv);
- if (!SvOBJECT(sv))
- return 0;
- return 1;
-}
-
-/*
-=for apidoc sv_isa
-
-Returns a boolean indicating whether the SV is blessed into the specified
-class. This does not check for subtypes; use C<sv_derived_from> to verify
-an inheritance relationship.
-
-=cut
-*/
-
-int
-Perl_sv_isa(pTHX_ SV *sv, const char *name)
-{
- if (!sv)
- return 0;
- if (SvGMAGICAL(sv))
- mg_get(sv);
- if (!SvROK(sv))
- return 0;
- sv = (SV*)SvRV(sv);
- if (!SvOBJECT(sv))
- return 0;
-
- return strEQ(HvNAME(SvSTASH(sv)), name);
-}
-
-/*
-=for apidoc newSVrv
-
-Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
-it will be upgraded to one. If C<classname> is non-null then the new SV will
-be blessed in the specified package. The new SV is returned and its
-reference count is 1.
-
-=cut
-*/
-
-SV*
-Perl_newSVrv(pTHX_ SV *rv, const char *classname)
-{
- SV *sv;
-
- new_SV(sv);
-
- SV_CHECK_THINKFIRST(rv);
- SvAMAGIC_off(rv);
-
- if (SvTYPE(rv) >= SVt_PVMG) {
- U32 refcnt = SvREFCNT(rv);
- SvREFCNT(rv) = 0;
- sv_clear(rv);
- SvFLAGS(rv) = 0;
- SvREFCNT(rv) = refcnt;
- }
-
- if (SvTYPE(rv) < SVt_RV)
- sv_upgrade(rv, SVt_RV);
- else if (SvTYPE(rv) > SVt_RV) {
- (void)SvOOK_off(rv);
- if (SvPVX(rv) && SvLEN(rv))
- Safefree(SvPVX(rv));
- SvCUR_set(rv, 0);
- SvLEN_set(rv, 0);
- }
-
- (void)SvOK_off(rv);
- SvRV(rv) = sv;
- SvROK_on(rv);
-
- if (classname) {
- HV* stash = gv_stashpv(classname, TRUE);
- (void)sv_bless(rv, stash);
- }
- return sv;
-}
-
-/*
-=for apidoc sv_setref_pv
-
-Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
-into the SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
-will be returned and will have a reference count of 1.
-
-Do not use with other Perl types such as HV, AV, SV, CV, because those
-objects will become corrupted by the pointer copy process.
-
-Note that C<sv_setref_pvn> copies the string while this copies the pointer.
-
-=cut
-*/
-
-SV*
-Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
-{
- if (!pv) {
- sv_setsv(rv, &PL_sv_undef);
- SvSETMAGIC(rv);
- }
- else
- sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
- return rv;
-}
-
-/*
-=for apidoc sv_setref_iv
-
-Copies an integer into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
-will be returned and will have a reference count of 1.
-
-=cut
-*/
-
-SV*
-Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
-{
- sv_setiv(newSVrv(rv,classname), iv);
- return rv;
-}
-
-/*
-=for apidoc sv_setref_nv
-
-Copies a double into a new SV, optionally blessing the SV. The C<rv>
-argument will be upgraded to an RV. That RV will be modified to point to
-the new SV. The C<classname> argument indicates the package for the
-blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
-will be returned and will have a reference count of 1.
-
-=cut
-*/
-
-SV*
-Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
-{
- sv_setnv(newSVrv(rv,classname), nv);
- return rv;
-}
-
-/*
-=for apidoc sv_setref_pvn
-
-Copies a string into a new SV, optionally blessing the SV. The length of the
-string must be specified with C<n>. The C<rv> argument will be upgraded to
-an RV. That RV will be modified to point to the new SV. The C<classname>
-argument indicates the package for the blessing. Set C<classname> to
-C<Nullch> to avoid the blessing. The new SV will be returned and will have
-a reference count of 1.
-
-Note that C<sv_setref_pv> copies the pointer while this copies the string.
-
-=cut
-*/
-
-SV*
-Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
-{
- sv_setpvn(newSVrv(rv,classname), pv, n);
- return rv;
-}
-
-/*
-=for apidoc sv_bless
-
-Blesses an SV into a specified package. The SV must be an RV. The package
-must be designated by its stash (see C<gv_stashpv()>). The reference count
-of the SV is unaffected.
-
-=cut
-*/
-
-SV*
-Perl_sv_bless(pTHX_ SV *sv, HV *stash)
-{
- SV *tmpRef;
- if (!SvROK(sv))
- Perl_croak(aTHX_ "Can't bless non-reference value");
- tmpRef = SvRV(sv);
- if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
- if (SvREADONLY(tmpRef))
- Perl_croak(aTHX_ PL_no_modify);
- if (SvOBJECT(tmpRef)) {
- if (SvTYPE(tmpRef) != SVt_PVIO)
- --PL_sv_objcount;
- SvREFCNT_dec(SvSTASH(tmpRef));
- }
- }
- SvOBJECT_on(tmpRef);
- if (SvTYPE(tmpRef) != SVt_PVIO)
- ++PL_sv_objcount;
- (void)SvUPGRADE(tmpRef, SVt_PVMG);
- SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
-
- if (Gv_AMG(stash))
- SvAMAGIC_on(sv);
- else
- SvAMAGIC_off(sv);
-
- return sv;
-}
-
-STATIC void
-S_sv_unglob(pTHX_ SV *sv)
-{
- void *xpvmg;
-
- assert(SvTYPE(sv) == SVt_PVGV);
- SvFAKE_off(sv);
- if (GvGP(sv))
- gp_free((GV*)sv);
- if (GvSTASH(sv)) {
- SvREFCNT_dec(GvSTASH(sv));
- GvSTASH(sv) = Nullhv;
- }
- sv_unmagic(sv, '*');
- Safefree(GvNAME(sv));
- GvMULTI_off(sv);
-
- /* need to keep SvANY(sv) in the right arena */
- xpvmg = new_XPVMG();
- StructCopy(SvANY(sv), xpvmg, XPVMG);
- del_XPVGV(SvANY(sv));
- SvANY(sv) = xpvmg;
-
- SvFLAGS(sv) &= ~SVTYPEMASK;
- SvFLAGS(sv) |= SVt_PVMG;
-}
-
-/*
-=for apidoc sv_unref
-
-Unsets the RV status of the SV, and decrements the reference count of
-whatever was being referenced by the RV. This can almost be thought of
-as a reversal of C<newSVrv>. See C<SvROK_off>.
-
-=cut
-*/
-
-void
-Perl_sv_unref(pTHX_ SV *sv)
-{
- SV* rv = SvRV(sv);
-
- if (SvWEAKREF(sv)) {
- sv_del_backref(sv);
- SvWEAKREF_off(sv);
- SvRV(sv) = 0;
- return;
- }
- SvRV(sv) = 0;
- SvROK_off(sv);
- if (SvREFCNT(rv) != 1 || SvREADONLY(rv))
- SvREFCNT_dec(rv);
- else
- sv_2mortal(rv); /* Schedule for freeing later */
-}
-
-void
-Perl_sv_taint(pTHX_ SV *sv)
-{
- sv_magic((sv), Nullsv, 't', Nullch, 0);
-}
-
-void
-Perl_sv_untaint(pTHX_ SV *sv)
-{
- if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
- MAGIC *mg = mg_find(sv, 't');
- if (mg)
- mg->mg_len &= ~1;
- }
-}
-
-bool
-Perl_sv_tainted(pTHX_ SV *sv)
-{
- if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
- MAGIC *mg = mg_find(sv, 't');
- if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
- return TRUE;
- }
- return FALSE;
-}
-
-/*
-=for apidoc sv_setpviv
-
-Copies an integer into the given SV, also updating its string value.
-Does not handle 'set' magic. See C<sv_setpviv_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
-{
- char buf[TYPE_CHARS(UV)];
- char *ebuf;
- char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
-
- sv_setpvn(sv, ptr, ebuf - ptr);
-}
-
-
-/*
-=for apidoc sv_setpviv_mg
-
-Like C<sv_setpviv>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
-{
- char buf[TYPE_CHARS(UV)];
- char *ebuf;
- char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
-
- sv_setpvn(sv, ptr, ebuf - ptr);
- SvSETMAGIC(sv);
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-void
-Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
-{
- dTHX;
- va_list args;
- va_start(args, pat);
- sv_vsetpvf(sv, pat, &args);
- va_end(args);
-}
-
-
-void
-Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
-{
- dTHX;
- va_list args;
- va_start(args, pat);
- sv_vsetpvf_mg(sv, pat, &args);
- va_end(args);
-}
-#endif
-
-/*
-=for apidoc sv_setpvf
-
-Processes its arguments like C<sprintf> and sets an SV to the formatted
-output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
-
-=cut
-*/
-
-void
-Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- sv_vsetpvf(sv, pat, &args);
- va_end(args);
-}
-
-void
-Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
-{
- sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
-}
-
-/*
-=for apidoc sv_setpvf_mg
-
-Like C<sv_setpvf>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- sv_vsetpvf_mg(sv, pat, &args);
- va_end(args);
-}
-
-void
-Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
-{
- sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
- SvSETMAGIC(sv);
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-void
-Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
-{
- dTHX;
- va_list args;
- va_start(args, pat);
- sv_vcatpvf(sv, pat, &args);
- va_end(args);
-}
-
-void
-Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
-{
- dTHX;
- va_list args;
- va_start(args, pat);
- sv_vcatpvf_mg(sv, pat, &args);
- va_end(args);
-}
-#endif
-
-/*
-=for apidoc sv_catpvf
-
-Processes its arguments like C<sprintf> and appends the formatted output
-to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
-typically be called after calling this function to handle 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- sv_vcatpvf(sv, pat, &args);
- va_end(args);
-}
-
-void
-Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
-{
- sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
-}
-
-/*
-=for apidoc sv_catpvf_mg
-
-Like C<sv_catpvf>, but also handles 'set' magic.
-
-=cut
-*/
-
-void
-Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
-{
- va_list args;
- va_start(args, pat);
- sv_vcatpvf_mg(sv, pat, &args);
- va_end(args);
-}
-
-void
-Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
-{
- sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
- SvSETMAGIC(sv);
-}
-
-/*
-=for apidoc sv_vsetpvfn
-
-Works like C<vcatpvfn> but copies the text into the SV instead of
-appending it.
-
-=cut
-*/
-
-void
-Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
-{
- sv_setpvn(sv, "", 0);
- sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
-}
-
-/*
-=for apidoc sv_vcatpvfn
-
-Processes its arguments like C<vsprintf> and appends the formatted output
-to an SV. Uses an array of SVs if the C style variable argument list is
-missing (NULL). When running with taint checks enabled, indicates via
-C<maybe_tainted> if results are untrustworthy (often due to the use of
-locales).
-
-=cut
-*/
-
-void
-Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
-{
- char *p;
- char *q;
- char *patend;
- STRLEN origlen;
- I32 svix = 0;
- static char nullstr[] = "(null)";
- SV *argsv;
-
- /* no matter what, this is a string now */
- (void)SvPV_force(sv, origlen);
-
- /* special-case "", "%s", and "%_" */
- if (patlen == 0)
- return;
- if (patlen == 2 && pat[0] == '%') {
- switch (pat[1]) {
- case 's':
- if (args) {
- char *s = va_arg(*args, char*);
- sv_catpv(sv, s ? s : nullstr);
- }
- else if (svix < svmax) {
- sv_catsv(sv, *svargs);
- if (DO_UTF8(*svargs))
- SvUTF8_on(sv);
- }
- return;
- case '_':
- if (args) {
- argsv = va_arg(*args, SV*);
- sv_catsv(sv, argsv);
- if (DO_UTF8(argsv))
- SvUTF8_on(sv);
- return;
- }
- /* See comment on '_' below */
- break;
- }
- }
-
- patend = (char*)pat + patlen;
- for (p = (char*)pat; p < patend; p = q) {
- bool alt = FALSE;
- bool left = FALSE;
- bool vectorize = FALSE;
- bool utf = FALSE;
- char fill = ' ';
- char plus = 0;
- char intsize = 0;
- STRLEN width = 0;
- STRLEN zeros = 0;
- bool has_precis = FALSE;
- STRLEN precis = 0;
- bool is_utf = FALSE;
-
- char esignbuf[4];
- U8 utf8buf[UTF8_MAXLEN+1];
- STRLEN esignlen = 0;
-
- char *eptr = Nullch;
- STRLEN elen = 0;
- /* Times 4: a decimal digit takes more than 3 binary digits.
- * NV_DIG: mantissa takes than many decimal digits.
- * Plus 32: Playing safe. */
- char ebuf[IV_DIG * 4 + NV_DIG + 32];
- /* large enough for "%#.#f" --chip */
- /* what about long double NVs? --jhi */
-
- SV *vecsv;
- U8 *vecstr = Null(U8*);
- STRLEN veclen = 0;
- char c;
- int i;
- unsigned base;
- IV iv;
- UV uv;
- NV nv;
- STRLEN have;
- STRLEN need;
- STRLEN gap;
- char *dotstr = ".";
- STRLEN dotstrlen = 1;
-
- for (q = p; q < patend && *q != '%'; ++q) ;
- if (q > p) {
- sv_catpvn(sv, p, q - p);
- p = q;
- }
- if (q++ >= patend)
- break;
-
- /* FLAGS */
-
- while (*q) {
- switch (*q) {
- case ' ':
- case '+':
- plus = *q++;
- continue;
-
- case '-':
- left = TRUE;
- q++;
- continue;
-
- case '0':
- fill = *q++;
- continue;
-
- case '#':
- alt = TRUE;
- q++;
- continue;
-
- case '*': /* printf("%*vX",":",$ipv6addr) */
- if (q[1] != 'v')
- break;
- q++;
- if (args)
- vecsv = va_arg(*args, SV*);
- else if (svix < svmax)
- vecsv = svargs[svix++];
- else
- continue;
- dotstr = SvPVx(vecsv,dotstrlen);
- if (DO_UTF8(vecsv))
- is_utf = TRUE;
- /* FALL THROUGH */
-
- case 'v':
- vectorize = TRUE;
- q++;
- continue;
-
- default:
- break;
- }
- break;
- }
-
- /* WIDTH */
-
- switch (*q) {
- case '1': case '2': case '3':
- case '4': case '5': case '6':
- case '7': case '8': case '9':
- width = 0;
- while (isDIGIT(*q))
- width = width * 10 + (*q++ - '0');
- break;
-
- case '*':
- if (args)
- i = va_arg(*args, int);
- else
- i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
- left |= (i < 0);
- width = (i < 0) ? -i : i;
- q++;
- break;
- }
-
- /* PRECISION */
-
- if (*q == '.') {
- q++;
- if (*q == '*') {
- if (args)
- i = va_arg(*args, int);
- else
- i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
- precis = (i < 0) ? 0 : i;
- q++;
- }
- else {
- precis = 0;
- while (isDIGIT(*q))
- precis = precis * 10 + (*q++ - '0');
- }
- has_precis = TRUE;
- }
-
- if (vectorize) {
- if (args) {
- vecsv = va_arg(*args, SV*);
- vecstr = (U8*)SvPVx(vecsv,veclen);
- utf = DO_UTF8(vecsv);
- }
- else if (svix < svmax) {
- vecsv = svargs[svix++];
- vecstr = (U8*)SvPVx(vecsv,veclen);
- utf = DO_UTF8(vecsv);
- }
- else {
- vecstr = (U8*)"";
- veclen = 0;
- }
- }
-
- /* SIZE */
-
- switch (*q) {
-#if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
- case 'L': /* Ld */
- /* FALL THROUGH */
-#endif
-#ifdef HAS_QUAD
- case 'q': /* qd */
- intsize = 'q';
- q++;
- break;
-#endif
- case 'l':
-#if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
- if (*(q + 1) == 'l') { /* lld, llf */
- intsize = 'q';
- q += 2;
- break;
- }
-#endif
- /* FALL THROUGH */
- case 'h':
- /* FALL THROUGH */
- case 'V':
- intsize = *q++;
- break;
- }
-
- /* CONVERSION */
-
- switch (c = *q++) {
-
- /* STRINGS */
-
- case '%':
- eptr = q - 1;
- elen = 1;
- goto string;
-
- case 'c':
- if (args)
- uv = va_arg(*args, int);
- else
- uv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
- if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
- eptr = (char*)utf8buf;
- elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
- is_utf = TRUE;
- }
- else {
- c = (char)uv;
- eptr = &c;
- elen = 1;
- }
- goto string;
-
- case 's':
- if (args) {
- eptr = va_arg(*args, char*);
- if (eptr)
-#ifdef MACOS_TRADITIONAL
- /* On MacOS, %#s format is used for Pascal strings */
- if (alt)
- elen = *eptr++;
- else
-#endif
- elen = strlen(eptr);
- else {
- eptr = nullstr;
- elen = sizeof nullstr - 1;
- }
- }
- else if (svix < svmax) {
- argsv = svargs[svix++];
- eptr = SvPVx(argsv, elen);
- if (DO_UTF8(argsv)) {
- if (has_precis && precis < elen) {
- I32 p = precis;
- sv_pos_u2b(argsv, &p, 0); /* sticks at end */
- precis = p;
- }
- if (width) { /* fudge width (can't fudge elen) */
- width += elen - sv_len_utf8(argsv);
- }
- is_utf = TRUE;
- }
- }
- goto string;
-
- case '_':
- /*
- * The "%_" hack might have to be changed someday,
- * if ISO or ANSI decide to use '_' for something.
- * So we keep it hidden from users' code.
- */
- if (!args)
- goto unknown;
- argsv = va_arg(*args,SV*);
- eptr = SvPVx(argsv, elen);
- if (DO_UTF8(argsv))
- is_utf = TRUE;
-
- string:
- vectorize = FALSE;
- if (has_precis && elen > precis)
- elen = precis;
- break;
-
- /* INTEGERS */
-
- case 'p':
- if (alt)
- goto unknown;
- if (args)
- uv = PTR2UV(va_arg(*args, void*));
- else
- uv = (svix < svmax) ? PTR2UV(svargs[svix++]) : 0;
- base = 16;
- goto integer;
-
- case 'D':
-#ifdef IV_IS_QUAD
- intsize = 'q';
-#else
- intsize = 'l';
-#endif
- /* FALL THROUGH */
- case 'd':
- case 'i':
- if (vectorize) {
- STRLEN ulen;
- if (!veclen) {
- vectorize = FALSE;
- break;
- }
- if (utf)
- iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
- else {
- iv = *vecstr;
- ulen = 1;
- }
- vecstr += ulen;
- veclen -= ulen;
- }
- else if (args) {
- switch (intsize) {
- case 'h': iv = (short)va_arg(*args, int); break;
- default: iv = va_arg(*args, int); break;
- case 'l': iv = va_arg(*args, long); break;
- case 'V': iv = va_arg(*args, IV); break;
-#ifdef HAS_QUAD
- case 'q': iv = va_arg(*args, Quad_t); break;
-#endif
- }
- }
- else {
- iv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
- switch (intsize) {
- case 'h': iv = (short)iv; break;
- default: break;
- case 'l': iv = (long)iv; break;
- case 'V': break;
-#ifdef HAS_QUAD
- case 'q': iv = (Quad_t)iv; break;
-#endif
- }
- }
- if (iv >= 0) {
- uv = iv;
- if (plus)
- esignbuf[esignlen++] = plus;
- }
- else {
- uv = -iv;
- esignbuf[esignlen++] = '-';
- }
- base = 10;
- goto integer;
-
- case 'U':
-#ifdef IV_IS_QUAD
- intsize = 'q';
-#else
- intsize = 'l';
-#endif
- /* FALL THROUGH */
- case 'u':
- base = 10;
- goto uns_integer;
-
- case 'b':
- base = 2;
- goto uns_integer;
-
- case 'O':
-#ifdef IV_IS_QUAD
- intsize = 'q';
-#else
- intsize = 'l';
-#endif
- /* FALL THROUGH */
- case 'o':
- base = 8;
- goto uns_integer;
-
- case 'X':
- case 'x':
- base = 16;
-
- uns_integer:
- if (vectorize) {
- STRLEN ulen;
- vector:
- if (!veclen) {
- vectorize = FALSE;
- break;
- }
- if (utf)
- uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
- else {
- uv = *vecstr;
- ulen = 1;
- }
- vecstr += ulen;
- veclen -= ulen;
- }
- else if (args) {
- switch (intsize) {
- case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
- default: uv = va_arg(*args, unsigned); break;
- case 'l': uv = va_arg(*args, unsigned long); break;
- case 'V': uv = va_arg(*args, UV); break;
-#ifdef HAS_QUAD
- case 'q': uv = va_arg(*args, Quad_t); break;
-#endif
- }
- }
- else {
- uv = (svix < svmax) ? SvUVx(svargs[svix++]) : 0;
- switch (intsize) {
- case 'h': uv = (unsigned short)uv; break;
- default: break;
- case 'l': uv = (unsigned long)uv; break;
- case 'V': break;
-#ifdef HAS_QUAD
- case 'q': uv = (Quad_t)uv; break;
-#endif
- }
- }
-
- integer:
- eptr = ebuf + sizeof ebuf;
- switch (base) {
- unsigned dig;
- case 16:
- if (!uv)
- alt = FALSE;
- p = (char*)((c == 'X')
- ? "0123456789ABCDEF" : "0123456789abcdef");
- do {
- dig = uv & 15;
- *--eptr = p[dig];
- } while (uv >>= 4);
- if (alt) {
- esignbuf[esignlen++] = '0';
- esignbuf[esignlen++] = c; /* 'x' or 'X' */
- }
- break;
- case 8:
- do {
- dig = uv & 7;
- *--eptr = '0' + dig;
- } while (uv >>= 3);
- if (alt && *eptr != '0')
- *--eptr = '0';
- break;
- case 2:
- do {
- dig = uv & 1;
- *--eptr = '0' + dig;
- } while (uv >>= 1);
- if (alt) {
- esignbuf[esignlen++] = '0';
- esignbuf[esignlen++] = 'b';
- }
- break;
- default: /* it had better be ten or less */
-#if defined(PERL_Y2KWARN)
- if (ckWARN(WARN_Y2K)) {
- STRLEN n;
- char *s = SvPV(sv,n);
- if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
- && (n == 2 || !isDIGIT(s[n-3])))
- {
- Perl_warner(aTHX_ WARN_Y2K,
- "Possible Y2K bug: %%%c %s",
- c, "format string following '19'");
- }
- }
-#endif
- do {
- dig = uv % base;
- *--eptr = '0' + dig;
- } while (uv /= base);
- break;
- }
- elen = (ebuf + sizeof ebuf) - eptr;
- if (has_precis) {
- if (precis > elen)
- zeros = precis - elen;
- else if (precis == 0 && elen == 1 && *eptr == '0')
- elen = 0;
- }
- break;
-
- /* FLOATING POINT */
-
- case 'F':
- c = 'f'; /* maybe %F isn't supported here */
- /* FALL THROUGH */
- case 'e': case 'E':
- case 'f':
- case 'g': case 'G':
-
- /* This is evil, but floating point is even more evil */
-
- vectorize = FALSE;
- if (args)
- nv = va_arg(*args, NV);
- else
- nv = (svix < svmax) ? SvNVx(svargs[svix++]) : 0.0;
-
- need = 0;
- if (c != 'e' && c != 'E') {
- i = PERL_INT_MIN;
- (void)Perl_frexp(nv, &i);
- if (i == PERL_INT_MIN)
- Perl_die(aTHX_ "panic: frexp");
- if (i > 0)
- need = BIT_DIGITS(i);
- }
- need += has_precis ? precis : 6; /* known default */
- if (need < width)
- need = width;
-
- need += 20; /* fudge factor */
- if (PL_efloatsize < need) {
- Safefree(PL_efloatbuf);
- PL_efloatsize = need + 20; /* more fudge */
- New(906, PL_efloatbuf, PL_efloatsize, char);
- PL_efloatbuf[0] = '\0';
- }
-
- eptr = ebuf + sizeof ebuf;
- *--eptr = '\0';
- *--eptr = c;
-#if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
- {
- /* Copy the one or more characters in a long double
- * format before the 'base' ([efgEFG]) character to
- * the format string. */
- static char const prifldbl[] = PERL_PRIfldbl;
- char const *p = prifldbl + sizeof(prifldbl) - 3;
- while (p >= prifldbl) { *--eptr = *p--; }
- }
-#endif
- if (has_precis) {
- base = precis;
- do { *--eptr = '0' + (base % 10); } while (base /= 10);
- *--eptr = '.';
- }
- if (width) {
- base = width;
- do { *--eptr = '0' + (base % 10); } while (base /= 10);
- }
- if (fill == '0')
- *--eptr = fill;
- if (left)
- *--eptr = '-';
- if (plus)
- *--eptr = plus;
- if (alt)
- *--eptr = '#';
- *--eptr = '%';
-
- /* No taint. Otherwise we are in the strange situation
- * where printf() taints but print($float) doesn't.
- * --jhi */
- (void)sprintf(PL_efloatbuf, eptr, nv);
-
- eptr = PL_efloatbuf;
- elen = strlen(PL_efloatbuf);
- break;
-
- /* SPECIAL */
-
- case 'n':
- vectorize = FALSE;
- i = SvCUR(sv) - origlen;
- if (args) {
- switch (intsize) {
- case 'h': *(va_arg(*args, short*)) = i; break;
- default: *(va_arg(*args, int*)) = i; break;
- case 'l': *(va_arg(*args, long*)) = i; break;
- case 'V': *(va_arg(*args, IV*)) = i; break;
-#ifdef HAS_QUAD
- case 'q': *(va_arg(*args, Quad_t*)) = i; break;
-#endif
- }
- }
- else if (svix < svmax)
- sv_setuv_mg(svargs[svix++], (UV)i);
- continue; /* not "break" */
-
- /* UNKNOWN */
-
- default:
- unknown:
- vectorize = FALSE;
- if (!args && ckWARN(WARN_PRINTF) &&
- (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
- SV *msg = sv_newmortal();
- Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
- (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
- if (c) {
- if (isPRINT(c))
- Perl_sv_catpvf(aTHX_ msg,
- "\"%%%c\"", c & 0xFF);
- else
- Perl_sv_catpvf(aTHX_ msg,
- "\"%%\\%03"UVof"\"",
- (UV)c & 0xFF);
- } else
- sv_catpv(msg, "end of string");
- Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
- }
-
- /* output mangled stuff ... */
- if (c == '\0')
- --q;
- eptr = p;
- elen = q - p;
-
- /* ... right here, because formatting flags should not apply */
- SvGROW(sv, SvCUR(sv) + elen + 1);
- p = SvEND(sv);
- memcpy(p, eptr, elen);
- p += elen;
- *p = '\0';
- SvCUR(sv) = p - SvPVX(sv);
- continue; /* not "break" */
- }
-
- have = esignlen + zeros + elen;
- need = (have > width ? have : width);
- gap = need - have;
-
- SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
- p = SvEND(sv);
- if (esignlen && fill == '0') {
- for (i = 0; i < esignlen; i++)
- *p++ = esignbuf[i];
- }
- if (gap && !left) {
- memset(p, fill, gap);
- p += gap;
- }
- if (esignlen && fill != '0') {
- for (i = 0; i < esignlen; i++)
- *p++ = esignbuf[i];
- }
- if (zeros) {
- for (i = zeros; i; i--)
- *p++ = '0';
- }
- if (elen) {
- memcpy(p, eptr, elen);
- p += elen;
- }
- if (gap && left) {
- memset(p, ' ', gap);
- p += gap;
- }
- if (vectorize) {
- if (veclen) {
- memcpy(p, dotstr, dotstrlen);
- p += dotstrlen;
- }
- else
- vectorize = FALSE; /* done iterating over vecstr */
- }
- if (is_utf)
- SvUTF8_on(sv);
- *p = '\0';
- SvCUR(sv) = p - SvPVX(sv);
- if (vectorize) {
- esignlen = 0;
- goto vector;
- }
- }
-}
-
-#if defined(USE_ITHREADS)
-
-#if defined(USE_THREADS)
-# include "error: USE_THREADS and USE_ITHREADS are incompatible"
-#endif
-
-#ifndef GpREFCNT_inc
-# define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
-#endif
-
-
-#define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
-#define av_dup(s) (AV*)sv_dup((SV*)s)
-#define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
-#define hv_dup(s) (HV*)sv_dup((SV*)s)
-#define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
-#define cv_dup(s) (CV*)sv_dup((SV*)s)
-#define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
-#define io_dup(s) (IO*)sv_dup((SV*)s)
-#define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
-#define gv_dup(s) (GV*)sv_dup((SV*)s)
-#define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
-#define SAVEPV(p) (p ? savepv(p) : Nullch)
-#define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
-
-REGEXP *
-Perl_re_dup(pTHX_ REGEXP *r)
-{
- /* XXX fix when pmop->op_pmregexp becomes shared */
- return ReREFCNT_inc(r);
-}
-
-PerlIO *
-Perl_fp_dup(pTHX_ PerlIO *fp, char type)
-{
- PerlIO *ret;
- if (!fp)
- return (PerlIO*)NULL;
-
- /* look for it in the table first */
- ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
- if (ret)
- return ret;
-
- /* create anew and remember what it is */
- ret = PerlIO_fdupopen(fp);
- ptr_table_store(PL_ptr_table, fp, ret);
- return ret;
-}
-
-DIR *
-Perl_dirp_dup(pTHX_ DIR *dp)
-{
- if (!dp)
- return (DIR*)NULL;
- /* XXX TODO */
- return dp;
-}
-
-GP *
-Perl_gp_dup(pTHX_ GP *gp)
-{
- GP *ret;
- if (!gp)
- return (GP*)NULL;
- /* look for it in the table first */
- ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
- if (ret)
- return ret;
-
- /* create anew and remember what it is */
- Newz(0, ret, 1, GP);
- ptr_table_store(PL_ptr_table, gp, ret);
-
- /* clone */
- ret->gp_refcnt = 0; /* must be before any other dups! */
- ret->gp_sv = sv_dup_inc(gp->gp_sv);
- ret->gp_io = io_dup_inc(gp->gp_io);
- ret->gp_form = cv_dup_inc(gp->gp_form);
- ret->gp_av = av_dup_inc(gp->gp_av);
- ret->gp_hv = hv_dup_inc(gp->gp_hv);
- ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
- ret->gp_cv = cv_dup_inc(gp->gp_cv);
- ret->gp_cvgen = gp->gp_cvgen;
- ret->gp_flags = gp->gp_flags;
- ret->gp_line = gp->gp_line;
- ret->gp_file = gp->gp_file; /* points to COP.cop_file */
- return ret;
-}
-
-MAGIC *
-Perl_mg_dup(pTHX_ MAGIC *mg)
-{
- MAGIC *mgprev = (MAGIC*)NULL;
- MAGIC *mgret;
- if (!mg)
- return (MAGIC*)NULL;
- /* look for it in the table first */
- mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
- if (mgret)
- return mgret;
-
- for (; mg; mg = mg->mg_moremagic) {
- MAGIC *nmg;
- Newz(0, nmg, 1, MAGIC);
- if (mgprev)
- mgprev->mg_moremagic = nmg;
- else
- mgret = nmg;
- nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
- nmg->mg_private = mg->mg_private;
- nmg->mg_type = mg->mg_type;
- nmg->mg_flags = mg->mg_flags;
- if (mg->mg_type == 'r') {
- nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
- }
- else {
- nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
- ? sv_dup_inc(mg->mg_obj)
- : sv_dup(mg->mg_obj);
- }
- nmg->mg_len = mg->mg_len;
- nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
- if (mg->mg_ptr && mg->mg_type != 'g') {
- if (mg->mg_len >= 0) {
- nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
- if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
- AMT *amtp = (AMT*)mg->mg_ptr;
- AMT *namtp = (AMT*)nmg->mg_ptr;
- I32 i;
- for (i = 1; i < NofAMmeth; i++) {
- namtp->table[i] = cv_dup_inc(amtp->table[i]);
- }
- }
- }
- else if (mg->mg_len == HEf_SVKEY)
- nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
- }
- mgprev = nmg;
- }
- return mgret;
-}
-
-PTR_TBL_t *
-Perl_ptr_table_new(pTHX)
-{
- PTR_TBL_t *tbl;
- Newz(0, tbl, 1, PTR_TBL_t);
- tbl->tbl_max = 511;
- tbl->tbl_items = 0;
- Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
- return tbl;
-}
-
-void *
-Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
-{
- PTR_TBL_ENT_t *tblent;
- UV hash = PTR2UV(sv);
- assert(tbl);
- tblent = tbl->tbl_ary[hash & tbl->tbl_max];
- for (; tblent; tblent = tblent->next) {
- if (tblent->oldval == sv)
- return tblent->newval;
- }
- return (void*)NULL;
-}
-
-void
-Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
-{
- PTR_TBL_ENT_t *tblent, **otblent;
- /* XXX this may be pessimal on platforms where pointers aren't good
- * hash values e.g. if they grow faster in the most significant
- * bits */
- UV hash = PTR2UV(oldv);
- bool i = 1;
-
- assert(tbl);
- otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
- for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
- if (tblent->oldval == oldv) {
- tblent->newval = newv;
- tbl->tbl_items++;
- return;
- }
- }
- Newz(0, tblent, 1, PTR_TBL_ENT_t);
- tblent->oldval = oldv;
- tblent->newval = newv;
- tblent->next = *otblent;
- *otblent = tblent;
- tbl->tbl_items++;
- if (i && tbl->tbl_items > tbl->tbl_max)
- ptr_table_split(tbl);
-}
-
-void
-Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
-{
- PTR_TBL_ENT_t **ary = tbl->tbl_ary;
- UV oldsize = tbl->tbl_max + 1;
- UV newsize = oldsize * 2;
- UV i;
-
- Renew(ary, newsize, PTR_TBL_ENT_t*);
- Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
- tbl->tbl_max = --newsize;
- tbl->tbl_ary = ary;
- for (i=0; i < oldsize; i++, ary++) {
- PTR_TBL_ENT_t **curentp, **entp, *ent;
- if (!*ary)
- continue;
- curentp = ary + oldsize;
- for (entp = ary, ent = *ary; ent; ent = *entp) {
- if ((newsize & PTR2UV(ent->oldval)) != i) {
- *entp = ent->next;
- ent->next = *curentp;
- *curentp = ent;
- continue;
- }
- else
- entp = &ent->next;
- }
- }
-}
-
-void
-Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
-{
- register PTR_TBL_ENT_t **array;
- register PTR_TBL_ENT_t *entry;
- register PTR_TBL_ENT_t *oentry = Null(PTR_TBL_ENT_t*);
- UV riter = 0;
- UV max;
-
- if (!tbl || !tbl->tbl_items) {
- return;
- }
-
- array = tbl->tbl_ary;
- entry = array[0];
- max = tbl->tbl_max;
-
- for (;;) {
- if (entry) {
- oentry = entry;
- entry = entry->next;
- Safefree(oentry);
- }
- if (!entry) {
- if (++riter > max) {
- break;
- }
- entry = array[riter];
- }
- }
-
- tbl->tbl_items = 0;
-}
-
-void
-Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
-{
- if (!tbl) {
- return;
- }
- ptr_table_clear(tbl);
- Safefree(tbl->tbl_ary);
- Safefree(tbl);
-}
-
-#ifdef DEBUGGING
-char *PL_watch_pvx;
-#endif
-
-SV *
-Perl_sv_dup(pTHX_ SV *sstr)
-{
- SV *dstr;
-
- if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
- return Nullsv;
- /* look for it in the table first */
- dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
- if (dstr)
- return dstr;
-
- /* create anew and remember what it is */
- new_SV(dstr);
- ptr_table_store(PL_ptr_table, sstr, dstr);
-
- /* clone */
- SvFLAGS(dstr) = SvFLAGS(sstr);
- SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
- SvREFCNT(dstr) = 0; /* must be before any other dups! */
-
-#ifdef DEBUGGING
- if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
- PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
- PL_watch_pvx, SvPVX(sstr));
-#endif
-
- switch (SvTYPE(sstr)) {
- case SVt_NULL:
- SvANY(dstr) = NULL;
- break;
- case SVt_IV:
- SvANY(dstr) = new_XIV();
- SvIVX(dstr) = SvIVX(sstr);
- break;
- case SVt_NV:
- SvANY(dstr) = new_XNV();
- SvNVX(dstr) = SvNVX(sstr);
- break;
- case SVt_RV:
- SvANY(dstr) = new_XRV();
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- break;
- case SVt_PV:
- SvANY(dstr) = new_XPV();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- if (SvROK(sstr))
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- else if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- break;
- case SVt_PVIV:
- SvANY(dstr) = new_XPVIV();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- if (SvROK(sstr))
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- else if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- break;
- case SVt_PVNV:
- SvANY(dstr) = new_XPVNV();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- if (SvROK(sstr))
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- else if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- break;
- case SVt_PVMG:
- SvANY(dstr) = new_XPVMG();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
- SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
- if (SvROK(sstr))
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- else if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- break;
- case SVt_PVBM:
- SvANY(dstr) = new_XPVBM();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
- SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
- if (SvROK(sstr))
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- else if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- BmRARE(dstr) = BmRARE(sstr);
- BmUSEFUL(dstr) = BmUSEFUL(sstr);
- BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
- break;
- case SVt_PVLV:
- SvANY(dstr) = new_XPVLV();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
- SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
- if (SvROK(sstr))
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- else if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
- LvTARGLEN(dstr) = LvTARGLEN(sstr);
- LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
- LvTYPE(dstr) = LvTYPE(sstr);
- break;
- case SVt_PVGV:
- SvANY(dstr) = new_XPVGV();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
- SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
- if (SvROK(sstr))
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- else if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- GvNAMELEN(dstr) = GvNAMELEN(sstr);
- GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
- GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
- GvFLAGS(dstr) = GvFLAGS(sstr);
- GvGP(dstr) = gp_dup(GvGP(sstr));
- (void)GpREFCNT_inc(GvGP(dstr));
- break;
- case SVt_PVIO:
- SvANY(dstr) = new_XPVIO();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
- SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
- if (SvROK(sstr))
- SvRV(dstr) = sv_dup_inc(SvRV(sstr));
- else if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
- if (IoOFP(sstr) == IoIFP(sstr))
- IoOFP(dstr) = IoIFP(dstr);
- else
- IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
- /* PL_rsfp_filters entries have fake IoDIRP() */
- if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
- IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
- else
- IoDIRP(dstr) = IoDIRP(sstr);
- IoLINES(dstr) = IoLINES(sstr);
- IoPAGE(dstr) = IoPAGE(sstr);
- IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
- IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
- IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
- IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
- IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
- IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
- IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
- IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
- IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
- IoTYPE(dstr) = IoTYPE(sstr);
- IoFLAGS(dstr) = IoFLAGS(sstr);
- break;
- case SVt_PVAV:
- SvANY(dstr) = new_XPVAV();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
- SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
- AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
- AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
- if (AvARRAY((AV*)sstr)) {
- SV **dst_ary, **src_ary;
- SSize_t items = AvFILLp((AV*)sstr) + 1;
-
- src_ary = AvARRAY((AV*)sstr);
- Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
- ptr_table_store(PL_ptr_table, src_ary, dst_ary);
- SvPVX(dstr) = (char*)dst_ary;
- AvALLOC((AV*)dstr) = dst_ary;
- if (AvREAL((AV*)sstr)) {
- while (items-- > 0)
- *dst_ary++ = sv_dup_inc(*src_ary++);
- }
- else {
- while (items-- > 0)
- *dst_ary++ = sv_dup(*src_ary++);
- }
- items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
- while (items-- > 0) {
- *dst_ary++ = &PL_sv_undef;
- }
- }
- else {
- SvPVX(dstr) = Nullch;
- AvALLOC((AV*)dstr) = (SV**)NULL;
- }
- break;
- case SVt_PVHV:
- SvANY(dstr) = new_XPVHV();
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
- SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
- HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
- if (HvARRAY((HV*)sstr)) {
- STRLEN i = 0;
- XPVHV *dxhv = (XPVHV*)SvANY(dstr);
- XPVHV *sxhv = (XPVHV*)SvANY(sstr);
- Newz(0, dxhv->xhv_array,
- PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
- while (i <= sxhv->xhv_max) {
- ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
- !!HvSHAREKEYS(sstr));
- ++i;
- }
- dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
- }
- else {
- SvPVX(dstr) = Nullch;
- HvEITER((HV*)dstr) = (HE*)NULL;
- }
- HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
- HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
- break;
- case SVt_PVFM:
- SvANY(dstr) = new_XPVFM();
- FmLINES(dstr) = FmLINES(sstr);
- goto dup_pvcv;
- /* NOTREACHED */
- case SVt_PVCV:
- SvANY(dstr) = new_XPVCV();
-dup_pvcv:
- SvCUR(dstr) = SvCUR(sstr);
- SvLEN(dstr) = SvLEN(sstr);
- SvIVX(dstr) = SvIVX(sstr);
- SvNVX(dstr) = SvNVX(sstr);
- SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
- SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
- if (SvPVX(sstr) && SvLEN(sstr))
- SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
- else
- SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
- CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
- CvSTART(dstr) = CvSTART(sstr);
- CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
- CvXSUB(dstr) = CvXSUB(sstr);
- CvXSUBANY(dstr) = CvXSUBANY(sstr);
- CvGV(dstr) = gv_dup(CvGV(sstr));
- CvDEPTH(dstr) = CvDEPTH(sstr);
- if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
- /* XXX padlists are real, but pretend to be not */
- AvREAL_on(CvPADLIST(sstr));
- CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
- AvREAL_off(CvPADLIST(sstr));
- AvREAL_off(CvPADLIST(dstr));
- }
- else
- CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
- if (!CvANON(sstr) || CvCLONED(sstr))
- CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
- else
- CvOUTSIDE(dstr) = cv_dup(CvOUTSIDE(sstr));
- CvFLAGS(dstr) = CvFLAGS(sstr);
- break;
- default:
- Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
- break;
- }
-
- if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
- ++PL_sv_objcount;
-
- return dstr;
-}
-
-PERL_CONTEXT *
-Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
-{
- PERL_CONTEXT *ncxs;
-
- if (!cxs)
- return (PERL_CONTEXT*)NULL;
-
- /* look for it in the table first */
- ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
- if (ncxs)
- return ncxs;
-
- /* create anew and remember what it is */
- Newz(56, ncxs, max + 1, PERL_CONTEXT);
- ptr_table_store(PL_ptr_table, cxs, ncxs);
-
- while (ix >= 0) {
- PERL_CONTEXT *cx = &cxs[ix];
- PERL_CONTEXT *ncx = &ncxs[ix];
- ncx->cx_type = cx->cx_type;
- if (CxTYPE(cx) == CXt_SUBST) {
- Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
- }
- else {
- ncx->blk_oldsp = cx->blk_oldsp;
- ncx->blk_oldcop = cx->blk_oldcop;
- ncx->blk_oldretsp = cx->blk_oldretsp;
- ncx->blk_oldmarksp = cx->blk_oldmarksp;
- ncx->blk_oldscopesp = cx->blk_oldscopesp;
- ncx->blk_oldpm = cx->blk_oldpm;
- ncx->blk_gimme = cx->blk_gimme;
- switch (CxTYPE(cx)) {
- case CXt_SUB:
- ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
- ? cv_dup_inc(cx->blk_sub.cv)
- : cv_dup(cx->blk_sub.cv));
- ncx->blk_sub.argarray = (cx->blk_sub.hasargs
- ? av_dup_inc(cx->blk_sub.argarray)
- : Nullav);
- ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray);
- ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
- ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
- ncx->blk_sub.lval = cx->blk_sub.lval;
- break;
- case CXt_EVAL:
- ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
- ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
- ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
- ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
- ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
- break;
- case CXt_LOOP:
- ncx->blk_loop.label = cx->blk_loop.label;
- ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
- ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
- ncx->blk_loop.next_op = cx->blk_loop.next_op;
- ncx->blk_loop.last_op = cx->blk_loop.last_op;
- ncx->blk_loop.iterdata = (CxPADLOOP(cx)
- ? cx->blk_loop.iterdata
- : gv_dup((GV*)cx->blk_loop.iterdata));
- ncx->blk_loop.oldcurpad
- = (SV**)ptr_table_fetch(PL_ptr_table,
- cx->blk_loop.oldcurpad);
- ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
- ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
- ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
- ncx->blk_loop.iterix = cx->blk_loop.iterix;
- ncx->blk_loop.itermax = cx->blk_loop.itermax;
- break;
- case CXt_FORMAT:
- ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
- ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
- ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
- ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
- break;
- case CXt_BLOCK:
- case CXt_NULL:
- break;
- }
- }
- --ix;
- }
- return ncxs;
-}
-
-PERL_SI *
-Perl_si_dup(pTHX_ PERL_SI *si)
-{
- PERL_SI *nsi;
-
- if (!si)
- return (PERL_SI*)NULL;
-
- /* look for it in the table first */
- nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
- if (nsi)
- return nsi;
-
- /* create anew and remember what it is */
- Newz(56, nsi, 1, PERL_SI);
- ptr_table_store(PL_ptr_table, si, nsi);
-
- nsi->si_stack = av_dup_inc(si->si_stack);
- nsi->si_cxix = si->si_cxix;
- nsi->si_cxmax = si->si_cxmax;
- nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
- nsi->si_type = si->si_type;
- nsi->si_prev = si_dup(si->si_prev);
- nsi->si_next = si_dup(si->si_next);
- nsi->si_markoff = si->si_markoff;
-
- return nsi;
-}
-
-#define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
-#define TOPINT(ss,ix) ((ss)[ix].any_i32)
-#define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
-#define TOPLONG(ss,ix) ((ss)[ix].any_long)
-#define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
-#define TOPIV(ss,ix) ((ss)[ix].any_iv)
-#define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
-#define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
-#define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
-#define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
-#define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
-#define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
-
-/* XXXXX todo */
-#define pv_dup_inc(p) SAVEPV(p)
-#define pv_dup(p) SAVEPV(p)
-#define svp_dup_inc(p,pp) any_dup(p,pp)
-
-void *
-Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
-{
- void *ret;
-
- if (!v)
- return (void*)NULL;
-
- /* look for it in the table first */
- ret = ptr_table_fetch(PL_ptr_table, v);
- if (ret)
- return ret;
-
- /* see if it is part of the interpreter structure */
- if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
- ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
- else
- ret = v;
-
- return ret;
-}
-
-ANY *
-Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
-{
- ANY *ss = proto_perl->Tsavestack;
- I32 ix = proto_perl->Tsavestack_ix;
- I32 max = proto_perl->Tsavestack_max;
- ANY *nss;
- SV *sv;
- GV *gv;
- AV *av;
- HV *hv;
- void* ptr;
- int intval;
- long longval;
- GP *gp;
- IV iv;
- I32 i;
- char *c;
- void (*dptr) (void*);
- void (*dxptr) (pTHXo_ void*);
- OP *o;
-
- Newz(54, nss, max, ANY);
-
- while (ix > 0) {
- i = POPINT(ss,ix);
- TOPINT(nss,ix) = i;
- switch (i) {
- case SAVEt_ITEM: /* normal string */
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup_inc(sv);
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup_inc(sv);
- break;
- case SAVEt_SV: /* scalar reference */
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup_inc(sv);
- gv = (GV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = gv_dup_inc(gv);
- break;
- case SAVEt_GENERIC_PVREF: /* generic char* */
- c = (char*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = pv_dup(c);
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- break;
- case SAVEt_GENERIC_SVREF: /* generic sv */
- case SAVEt_SVREF: /* scalar reference */
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup_inc(sv);
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
- break;
- case SAVEt_AV: /* array reference */
- av = (AV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = av_dup_inc(av);
- gv = (GV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = gv_dup(gv);
- break;
- case SAVEt_HV: /* hash reference */
- hv = (HV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = hv_dup_inc(hv);
- gv = (GV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = gv_dup(gv);
- break;
- case SAVEt_INT: /* int reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- intval = (int)POPINT(ss,ix);
- TOPINT(nss,ix) = intval;
- break;
- case SAVEt_LONG: /* long reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- longval = (long)POPLONG(ss,ix);
- TOPLONG(nss,ix) = longval;
- break;
- case SAVEt_I32: /* I32 reference */
- case SAVEt_I16: /* I16 reference */
- case SAVEt_I8: /* I8 reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- i = POPINT(ss,ix);
- TOPINT(nss,ix) = i;
- break;
- case SAVEt_IV: /* IV reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- iv = POPIV(ss,ix);
- TOPIV(nss,ix) = iv;
- break;
- case SAVEt_SPTR: /* SV* reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup(sv);
- break;
- case SAVEt_VPTR: /* random* reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- break;
- case SAVEt_PPTR: /* char* reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- c = (char*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = pv_dup(c);
- break;
- case SAVEt_HPTR: /* HV* reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- hv = (HV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = hv_dup(hv);
- break;
- case SAVEt_APTR: /* AV* reference */
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- av = (AV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = av_dup(av);
- break;
- case SAVEt_NSTAB:
- gv = (GV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = gv_dup(gv);
- break;
- case SAVEt_GP: /* scalar reference */
- gp = (GP*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = gp = gp_dup(gp);
- (void)GpREFCNT_inc(gp);
- gv = (GV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = gv_dup_inc(c);
- c = (char*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = pv_dup(c);
- iv = POPIV(ss,ix);
- TOPIV(nss,ix) = iv;
- iv = POPIV(ss,ix);
- TOPIV(nss,ix) = iv;
- break;
- case SAVEt_FREESV:
- case SAVEt_MORTALIZESV:
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup_inc(sv);
- break;
- case SAVEt_FREEOP:
- ptr = POPPTR(ss,ix);
- if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
- /* these are assumed to be refcounted properly */
- switch (((OP*)ptr)->op_type) {
- case OP_LEAVESUB:
- case OP_LEAVESUBLV:
- case OP_LEAVEEVAL:
- case OP_LEAVE:
- case OP_SCOPE:
- case OP_LEAVEWRITE:
- TOPPTR(nss,ix) = ptr;
- o = (OP*)ptr;
- OpREFCNT_inc(o);
- break;
- default:
- TOPPTR(nss,ix) = Nullop;
- break;
- }
- }
- else
- TOPPTR(nss,ix) = Nullop;
- break;
- case SAVEt_FREEPV:
- c = (char*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = pv_dup_inc(c);
- break;
- case SAVEt_CLEARSV:
- longval = POPLONG(ss,ix);
- TOPLONG(nss,ix) = longval;
- break;
- case SAVEt_DELETE:
- hv = (HV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = hv_dup_inc(hv);
- c = (char*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = pv_dup_inc(c);
- i = POPINT(ss,ix);
- TOPINT(nss,ix) = i;
- break;
- case SAVEt_DESTRUCTOR:
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
- dptr = POPDPTR(ss,ix);
- TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
- break;
- case SAVEt_DESTRUCTOR_X:
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
- dxptr = POPDXPTR(ss,ix);
- TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
- break;
- case SAVEt_REGCONTEXT:
- case SAVEt_ALLOC:
- i = POPINT(ss,ix);
- TOPINT(nss,ix) = i;
- ix -= i;
- break;
- case SAVEt_STACK_POS: /* Position on Perl stack */
- i = POPINT(ss,ix);
- TOPINT(nss,ix) = i;
- break;
- case SAVEt_AELEM: /* array element */
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup_inc(sv);
- i = POPINT(ss,ix);
- TOPINT(nss,ix) = i;
- av = (AV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = av_dup_inc(av);
- break;
- case SAVEt_HELEM: /* hash element */
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup_inc(sv);
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup_inc(sv);
- hv = (HV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = hv_dup_inc(hv);
- break;
- case SAVEt_OP:
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = ptr;
- break;
- case SAVEt_HINTS:
- i = POPINT(ss,ix);
- TOPINT(nss,ix) = i;
- break;
- case SAVEt_COMPPAD:
- av = (AV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = av_dup(av);
- break;
- case SAVEt_PADSV:
- longval = (long)POPLONG(ss,ix);
- TOPLONG(nss,ix) = longval;
- ptr = POPPTR(ss,ix);
- TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
- sv = (SV*)POPPTR(ss,ix);
- TOPPTR(nss,ix) = sv_dup(sv);
- break;
- default:
- Perl_croak(aTHX_ "panic: ss_dup inconsistency");
- }
- }
-
- return nss;
-}
-
-#ifdef PERL_OBJECT
-#include "XSUB.h"
-#endif
-
-PerlInterpreter *
-perl_clone(PerlInterpreter *proto_perl, UV flags)
-{
-#ifdef PERL_OBJECT
- CPerlObj *pPerl = (CPerlObj*)proto_perl;
-#endif
-
-#ifdef PERL_IMPLICIT_SYS
- return perl_clone_using(proto_perl, flags,
- proto_perl->IMem,
- proto_perl->IMemShared,
- proto_perl->IMemParse,
- proto_perl->IEnv,
- proto_perl->IStdIO,
- proto_perl->ILIO,
- proto_perl->IDir,
- proto_perl->ISock,
- proto_perl->IProc);
-}
-
-PerlInterpreter *
-perl_clone_using(PerlInterpreter *proto_perl, UV flags,
- struct IPerlMem* ipM, struct IPerlMem* ipMS,
- struct IPerlMem* ipMP, struct IPerlEnv* ipE,
- struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
- struct IPerlDir* ipD, struct IPerlSock* ipS,
- struct IPerlProc* ipP)
-{
- /* XXX many of the string copies here can be optimized if they're
- * constants; they need to be allocated as common memory and just
- * their pointers copied. */
-
- IV i;
-# ifdef PERL_OBJECT
- CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
- ipD, ipS, ipP);
- PERL_SET_THX(pPerl);
-# else /* !PERL_OBJECT */
- PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
- PERL_SET_THX(my_perl);
-
-# ifdef DEBUGGING
- memset(my_perl, 0xab, sizeof(PerlInterpreter));
- PL_markstack = 0;
- PL_scopestack = 0;
- PL_savestack = 0;
- PL_retstack = 0;
-# else /* !DEBUGGING */
- Zero(my_perl, 1, PerlInterpreter);
-# endif /* DEBUGGING */
-
- /* host pointers */
- PL_Mem = ipM;
- PL_MemShared = ipMS;
- PL_MemParse = ipMP;
- PL_Env = ipE;
- PL_StdIO = ipStd;
- PL_LIO = ipLIO;
- PL_Dir = ipD;
- PL_Sock = ipS;
- PL_Proc = ipP;
-# endif /* PERL_OBJECT */
-#else /* !PERL_IMPLICIT_SYS */
- IV i;
- PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
- PERL_SET_THX(my_perl);
-
-# ifdef DEBUGGING
- memset(my_perl, 0xab, sizeof(PerlInterpreter));
- PL_markstack = 0;
- PL_scopestack = 0;
- PL_savestack = 0;
- PL_retstack = 0;
-# else /* !DEBUGGING */
- Zero(my_perl, 1, PerlInterpreter);
-# endif /* DEBUGGING */
-#endif /* PERL_IMPLICIT_SYS */
-
- /* arena roots */
- PL_xiv_arenaroot = NULL;
- PL_xiv_root = NULL;
- PL_xnv_arenaroot = NULL;
- PL_xnv_root = NULL;
- PL_xrv_arenaroot = NULL;
- PL_xrv_root = NULL;
- PL_xpv_arenaroot = NULL;
- PL_xpv_root = NULL;
- PL_xpviv_arenaroot = NULL;
- PL_xpviv_root = NULL;
- PL_xpvnv_arenaroot = NULL;
- PL_xpvnv_root = NULL;
- PL_xpvcv_arenaroot = NULL;
- PL_xpvcv_root = NULL;
- PL_xpvav_arenaroot = NULL;
- PL_xpvav_root = NULL;
- PL_xpvhv_arenaroot = NULL;
- PL_xpvhv_root = NULL;
- PL_xpvmg_arenaroot = NULL;
- PL_xpvmg_root = NULL;
- PL_xpvlv_arenaroot = NULL;
- PL_xpvlv_root = NULL;
- PL_xpvbm_arenaroot = NULL;
- PL_xpvbm_root = NULL;
- PL_he_arenaroot = NULL;
- PL_he_root = NULL;
- PL_nice_chunk = NULL;
- PL_nice_chunk_size = 0;
- PL_sv_count = 0;
- PL_sv_objcount = 0;
- PL_sv_root = Nullsv;
- PL_sv_arenaroot = Nullsv;
-
- PL_debug = proto_perl->Idebug;
-
- /* create SV map for pointer relocation */
- PL_ptr_table = ptr_table_new();
-
- /* initialize these special pointers as early as possible */
- SvANY(&PL_sv_undef) = NULL;
- SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
- SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
- ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
-
-#ifdef PERL_OBJECT
- SvUPGRADE(&PL_sv_no, SVt_PVNV);
-#else
- SvANY(&PL_sv_no) = new_XPVNV();
-#endif
- SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
- SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
- SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
- SvCUR(&PL_sv_no) = 0;
- SvLEN(&PL_sv_no) = 1;
- SvNVX(&PL_sv_no) = 0;
- ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
-
-#ifdef PERL_OBJECT
- SvUPGRADE(&PL_sv_yes, SVt_PVNV);
-#else
- SvANY(&PL_sv_yes) = new_XPVNV();
-#endif
- SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
- SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
- SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
- SvCUR(&PL_sv_yes) = 1;
- SvLEN(&PL_sv_yes) = 2;
- SvNVX(&PL_sv_yes) = 1;
- ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
-
- /* create shared string table */
- PL_strtab = newHV();
- HvSHAREKEYS_off(PL_strtab);
- hv_ksplit(PL_strtab, 512);
- ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
-
- PL_compiling = proto_perl->Icompiling;
- PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
- PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
- ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
- if (!specialWARN(PL_compiling.cop_warnings))
- PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
- PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
-
- /* pseudo environmental stuff */
- PL_origargc = proto_perl->Iorigargc;
- i = PL_origargc;
- New(0, PL_origargv, i+1, char*);
- PL_origargv[i] = '\0';
- while (i-- > 0) {
- PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
- }
- PL_envgv = gv_dup(proto_perl->Ienvgv);
- PL_incgv = gv_dup(proto_perl->Iincgv);
- PL_hintgv = gv_dup(proto_perl->Ihintgv);
- PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
- PL_diehook = sv_dup_inc(proto_perl->Idiehook);
- PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
-
- /* switches */
- PL_minus_c = proto_perl->Iminus_c;
- PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
- PL_localpatches = proto_perl->Ilocalpatches;
- PL_splitstr = proto_perl->Isplitstr;
- PL_preprocess = proto_perl->Ipreprocess;
- PL_minus_n = proto_perl->Iminus_n;
- PL_minus_p = proto_perl->Iminus_p;
- PL_minus_l = proto_perl->Iminus_l;
- PL_minus_a = proto_perl->Iminus_a;
- PL_minus_F = proto_perl->Iminus_F;
- PL_doswitches = proto_perl->Idoswitches;
- PL_dowarn = proto_perl->Idowarn;
- PL_doextract = proto_perl->Idoextract;
- PL_sawampersand = proto_perl->Isawampersand;
- PL_unsafe = proto_perl->Iunsafe;
- PL_inplace = SAVEPV(proto_perl->Iinplace);
- PL_e_script = sv_dup_inc(proto_perl->Ie_script);
- PL_perldb = proto_perl->Iperldb;
- PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
-
- /* magical thingies */
- /* XXX time(&PL_basetime) when asked for? */
- PL_basetime = proto_perl->Ibasetime;
- PL_formfeed = sv_dup(proto_perl->Iformfeed);
-
- PL_maxsysfd = proto_perl->Imaxsysfd;
- PL_multiline = proto_perl->Imultiline;
- PL_statusvalue = proto_perl->Istatusvalue;
-#ifdef VMS
- PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
-#endif
-
- /* shortcuts to various I/O objects */
- PL_stdingv = gv_dup(proto_perl->Istdingv);
- PL_stderrgv = gv_dup(proto_perl->Istderrgv);
- PL_defgv = gv_dup(proto_perl->Idefgv);
- PL_argvgv = gv_dup(proto_perl->Iargvgv);
- PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
- PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack);
-
- /* shortcuts to regexp stuff */
- PL_replgv = gv_dup(proto_perl->Ireplgv);
-
- /* shortcuts to misc objects */
- PL_errgv = gv_dup(proto_perl->Ierrgv);
-
- /* shortcuts to debugging objects */
- PL_DBgv = gv_dup(proto_perl->IDBgv);
- PL_DBline = gv_dup(proto_perl->IDBline);
- PL_DBsub = gv_dup(proto_perl->IDBsub);
- PL_DBsingle = sv_dup(proto_perl->IDBsingle);
- PL_DBtrace = sv_dup(proto_perl->IDBtrace);
- PL_DBsignal = sv_dup(proto_perl->IDBsignal);
- PL_lineary = av_dup(proto_perl->Ilineary);
- PL_dbargs = av_dup(proto_perl->Idbargs);
-
- /* symbol tables */
- PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
- PL_curstash = hv_dup(proto_perl->Tcurstash);
- PL_debstash = hv_dup(proto_perl->Idebstash);
- PL_globalstash = hv_dup(proto_perl->Iglobalstash);
- PL_curstname = sv_dup_inc(proto_perl->Icurstname);
-
- PL_beginav = av_dup_inc(proto_perl->Ibeginav);
- PL_endav = av_dup_inc(proto_perl->Iendav);
- PL_checkav = av_dup_inc(proto_perl->Icheckav);
- PL_initav = av_dup_inc(proto_perl->Iinitav);
-
- PL_sub_generation = proto_perl->Isub_generation;
-
- /* funky return mechanisms */
- PL_forkprocess = proto_perl->Iforkprocess;
-
- /* subprocess state */
- PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
-
- /* internal state */
- PL_tainting = proto_perl->Itainting;
- PL_maxo = proto_perl->Imaxo;
- if (proto_perl->Iop_mask)
- PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
- else
- PL_op_mask = Nullch;
-
- /* current interpreter roots */
- PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
- PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
- PL_main_start = proto_perl->Imain_start;
- PL_eval_root = proto_perl->Ieval_root;
- PL_eval_start = proto_perl->Ieval_start;
-
- /* runtime control stuff */
- PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
- PL_copline = proto_perl->Icopline;
-
- PL_filemode = proto_perl->Ifilemode;
- PL_lastfd = proto_perl->Ilastfd;
- PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
- PL_Argv = NULL;
- PL_Cmd = Nullch;
- PL_gensym = proto_perl->Igensym;
- PL_preambled = proto_perl->Ipreambled;
- PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
- PL_laststatval = proto_perl->Ilaststatval;
- PL_laststype = proto_perl->Ilaststype;
- PL_mess_sv = Nullsv;
-
- PL_orslen = proto_perl->Iorslen;
- PL_ors = SAVEPVN(proto_perl->Iors, PL_orslen);
- PL_ofmt = SAVEPV(proto_perl->Iofmt);
-
- /* interpreter atexit processing */
- PL_exitlistlen = proto_perl->Iexitlistlen;
- if (PL_exitlistlen) {
- New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
- Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
- }
- else
- PL_exitlist = (PerlExitListEntry*)NULL;
- PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
-
- PL_profiledata = NULL;
- PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
- /* PL_rsfp_filters entries have fake IoDIRP() */
- PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
-
- PL_compcv = cv_dup(proto_perl->Icompcv);
- PL_comppad = av_dup(proto_perl->Icomppad);
- PL_comppad_name = av_dup(proto_perl->Icomppad_name);
- PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
- PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
- PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
- proto_perl->Tcurpad);
-
-#ifdef HAVE_INTERP_INTERN
- sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
-#endif
-
- /* more statics moved here */
- PL_generation = proto_perl->Igeneration;
- PL_DBcv = cv_dup(proto_perl->IDBcv);
-
- PL_in_clean_objs = proto_perl->Iin_clean_objs;
- PL_in_clean_all = proto_perl->Iin_clean_all;
-
- PL_uid = proto_perl->Iuid;
- PL_euid = proto_perl->Ieuid;
- PL_gid = proto_perl->Igid;
- PL_egid = proto_perl->Iegid;
- PL_nomemok = proto_perl->Inomemok;
- PL_an = proto_perl->Ian;
- PL_cop_seqmax = proto_perl->Icop_seqmax;
- PL_op_seqmax = proto_perl->Iop_seqmax;
- PL_evalseq = proto_perl->Ievalseq;
- PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
- PL_origalen = proto_perl->Iorigalen;
- PL_pidstatus = newHV(); /* XXX flag for cloning? */
- PL_osname = SAVEPV(proto_perl->Iosname);
- PL_sh_path = SAVEPV(proto_perl->Ish_path);
- PL_sighandlerp = proto_perl->Isighandlerp;
-
-
- PL_runops = proto_perl->Irunops;
-
- Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
-
-#ifdef CSH
- PL_cshlen = proto_perl->Icshlen;
- PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
-#endif
-
- PL_lex_state = proto_perl->Ilex_state;
- PL_lex_defer = proto_perl->Ilex_defer;
- PL_lex_expect = proto_perl->Ilex_expect;
- PL_lex_formbrack = proto_perl->Ilex_formbrack;
- PL_lex_dojoin = proto_perl->Ilex_dojoin;
- PL_lex_starts = proto_perl->Ilex_starts;
- PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
- PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
- PL_lex_op = proto_perl->Ilex_op;
- PL_lex_inpat = proto_perl->Ilex_inpat;
- PL_lex_inwhat = proto_perl->Ilex_inwhat;
- PL_lex_brackets = proto_perl->Ilex_brackets;
- i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
- PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
- PL_lex_casemods = proto_perl->Ilex_casemods;
- i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
- PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
-
- Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
- Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
- PL_nexttoke = proto_perl->Inexttoke;
-
- PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
- i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
- PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
- i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
- PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
- i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
- PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
- PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
- PL_pending_ident = proto_perl->Ipending_ident;
- PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
-
- PL_expect = proto_perl->Iexpect;
-
- PL_multi_start = proto_perl->Imulti_start;
- PL_multi_end = proto_perl->Imulti_end;
- PL_multi_open = proto_perl->Imulti_open;
- PL_multi_close = proto_perl->Imulti_close;
-
- PL_error_count = proto_perl->Ierror_count;
- PL_subline = proto_perl->Isubline;
- PL_subname = sv_dup_inc(proto_perl->Isubname);
-
- PL_min_intro_pending = proto_perl->Imin_intro_pending;
- PL_max_intro_pending = proto_perl->Imax_intro_pending;
- PL_padix = proto_perl->Ipadix;
- PL_padix_floor = proto_perl->Ipadix_floor;
- PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
-
- i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
- PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
- i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
- PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
- PL_last_lop_op = proto_perl->Ilast_lop_op;
- PL_in_my = proto_perl->Iin_my;
- PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
-#ifdef FCRYPT
- PL_cryptseen = proto_perl->Icryptseen;
-#endif
-
- PL_hints = proto_perl->Ihints;
-
- PL_amagic_generation = proto_perl->Iamagic_generation;
-
-#ifdef USE_LOCALE_COLLATE
- PL_collation_ix = proto_perl->Icollation_ix;
- PL_collation_name = SAVEPV(proto_perl->Icollation_name);
- PL_collation_standard = proto_perl->Icollation_standard;
- PL_collxfrm_base = proto_perl->Icollxfrm_base;
- PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
-#endif /* USE_LOCALE_COLLATE */
-
-#ifdef USE_LOCALE_NUMERIC
- PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
- PL_numeric_standard = proto_perl->Inumeric_standard;
- PL_numeric_local = proto_perl->Inumeric_local;
- PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv);
-#endif /* !USE_LOCALE_NUMERIC */
-
- /* utf8 character classes */
- PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
- PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
- PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
- PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
- PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
- PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
- PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
- PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
- PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
- PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
- PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
- PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
- PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
- PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
- PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
- PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
- PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
-
- /* swatch cache */
- PL_last_swash_hv = Nullhv; /* reinits on demand */
- PL_last_swash_klen = 0;
- PL_last_swash_key[0]= '\0';
- PL_last_swash_tmps = (U8*)NULL;
- PL_last_swash_slen = 0;
-
- /* perly.c globals */
- PL_yydebug = proto_perl->Iyydebug;
- PL_yynerrs = proto_perl->Iyynerrs;
- PL_yyerrflag = proto_perl->Iyyerrflag;
- PL_yychar = proto_perl->Iyychar;
- PL_yyval = proto_perl->Iyyval;
- PL_yylval = proto_perl->Iyylval;
-
- PL_glob_index = proto_perl->Iglob_index;
- PL_srand_called = proto_perl->Isrand_called;
- PL_uudmap['M'] = 0; /* reinits on demand */
- PL_bitcount = Nullch; /* reinits on demand */
-
- if (proto_perl->Ipsig_ptr) {
- int sig_num[] = { SIG_NUM };
- Newz(0, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
- Newz(0, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
- for (i = 1; PL_sig_name[i]; i++) {
- PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
- PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
- }
- }
- else {
- PL_psig_ptr = (SV**)NULL;
- PL_psig_name = (SV**)NULL;
- }
-
- /* thrdvar.h stuff */
-
- if (flags & CLONEf_COPY_STACKS) {
- /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
- PL_tmps_ix = proto_perl->Ttmps_ix;
- PL_tmps_max = proto_perl->Ttmps_max;
- PL_tmps_floor = proto_perl->Ttmps_floor;
- Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
- i = 0;
- while (i <= PL_tmps_ix) {
- PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
- ++i;
- }
-
- /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
- i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
- Newz(54, PL_markstack, i, I32);
- PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
- - proto_perl->Tmarkstack);
- PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
- - proto_perl->Tmarkstack);
- Copy(proto_perl->Tmarkstack, PL_markstack,
- PL_markstack_ptr - PL_markstack + 1, I32);
-
- /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
- * NOTE: unlike the others! */
- PL_scopestack_ix = proto_perl->Tscopestack_ix;
- PL_scopestack_max = proto_perl->Tscopestack_max;
- Newz(54, PL_scopestack, PL_scopestack_max, I32);
- Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
-
- /* next push_return() sets PL_retstack[PL_retstack_ix]
- * NOTE: unlike the others! */
- PL_retstack_ix = proto_perl->Tretstack_ix;
- PL_retstack_max = proto_perl->Tretstack_max;
- Newz(54, PL_retstack, PL_retstack_max, OP*);
- Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
-
- /* NOTE: si_dup() looks at PL_markstack */
- PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
-
- /* PL_curstack = PL_curstackinfo->si_stack; */
- PL_curstack = av_dup(proto_perl->Tcurstack);
- PL_mainstack = av_dup(proto_perl->Tmainstack);
-
- /* next PUSHs() etc. set *(PL_stack_sp+1) */
- PL_stack_base = AvARRAY(PL_curstack);
- PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
- - proto_perl->Tstack_base);
- PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
-
- /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
- * NOTE: unlike the others! */
- PL_savestack_ix = proto_perl->Tsavestack_ix;
- PL_savestack_max = proto_perl->Tsavestack_max;
- /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
- PL_savestack = ss_dup(proto_perl);
- }
- else {
- init_stacks();
- ENTER; /* perl_destruct() wants to LEAVE; */
- }
-
- PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
- PL_top_env = &PL_start_env;
-
- PL_op = proto_perl->Top;
-
- PL_Sv = Nullsv;
- PL_Xpv = (XPV*)NULL;
- PL_na = proto_perl->Tna;
-
- PL_statbuf = proto_perl->Tstatbuf;
- PL_statcache = proto_perl->Tstatcache;
- PL_statgv = gv_dup(proto_perl->Tstatgv);
- PL_statname = sv_dup_inc(proto_perl->Tstatname);
-#ifdef HAS_TIMES
- PL_timesbuf = proto_perl->Ttimesbuf;
-#endif
-
- PL_tainted = proto_perl->Ttainted;
- PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
- PL_nrs = sv_dup_inc(proto_perl->Tnrs);
- PL_rs = sv_dup_inc(proto_perl->Trs);
- PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
- PL_ofslen = proto_perl->Tofslen;
- PL_ofs = SAVEPVN(proto_perl->Tofs, PL_ofslen);
- PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
- PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
- PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
- PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
- PL_formtarget = sv_dup(proto_perl->Tformtarget);
-
- PL_restartop = proto_perl->Trestartop;
- PL_in_eval = proto_perl->Tin_eval;
- PL_delaymagic = proto_perl->Tdelaymagic;
- PL_dirty = proto_perl->Tdirty;
- PL_localizing = proto_perl->Tlocalizing;
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- PL_protect = proto_perl->Tprotect;
-#endif
- PL_errors = sv_dup_inc(proto_perl->Terrors);
- PL_av_fetch_sv = Nullsv;
- PL_hv_fetch_sv = Nullsv;
- Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
- PL_modcount = proto_perl->Tmodcount;
- PL_lastgotoprobe = Nullop;
- PL_dumpindent = proto_perl->Tdumpindent;
-
- PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
- PL_sortstash = hv_dup(proto_perl->Tsortstash);
- PL_firstgv = gv_dup(proto_perl->Tfirstgv);
- PL_secondgv = gv_dup(proto_perl->Tsecondgv);
- PL_sortcxix = proto_perl->Tsortcxix;
- PL_efloatbuf = Nullch; /* reinits on demand */
- PL_efloatsize = 0; /* reinits on demand */
-
- /* regex stuff */
-
- PL_screamfirst = NULL;
- PL_screamnext = NULL;
- PL_maxscream = -1; /* reinits on demand */
- PL_lastscream = Nullsv;
-
- PL_watchaddr = NULL;
- PL_watchok = Nullch;
-
- PL_regdummy = proto_perl->Tregdummy;
- PL_regcomp_parse = Nullch;
- PL_regxend = Nullch;
- PL_regcode = (regnode*)NULL;
- PL_regnaughty = 0;
- PL_regsawback = 0;
- PL_regprecomp = Nullch;
- PL_regnpar = 0;
- PL_regsize = 0;
- PL_regflags = 0;
- PL_regseen = 0;
- PL_seen_zerolen = 0;
- PL_seen_evals = 0;
- PL_regcomp_rx = (regexp*)NULL;
- PL_extralen = 0;
- PL_colorset = 0; /* reinits PL_colors[] */
- /*PL_colors[6] = {0,0,0,0,0,0};*/
- PL_reg_whilem_seen = 0;
- PL_reginput = Nullch;
- PL_regbol = Nullch;
- PL_regeol = Nullch;
- PL_regstartp = (I32*)NULL;
- PL_regendp = (I32*)NULL;
- PL_reglastparen = (U32*)NULL;
- PL_regtill = Nullch;
- PL_regprev = '\n';
- PL_reg_start_tmp = (char**)NULL;
- PL_reg_start_tmpl = 0;
- PL_regdata = (struct reg_data*)NULL;
- PL_bostr = Nullch;
- PL_reg_flags = 0;
- PL_reg_eval_set = 0;
- PL_regnarrate = 0;
- PL_regprogram = (regnode*)NULL;
- PL_regindent = 0;
- PL_regcc = (CURCUR*)NULL;
- PL_reg_call_cc = (struct re_cc_state*)NULL;
- PL_reg_re = (regexp*)NULL;
- PL_reg_ganch = Nullch;
- PL_reg_sv = Nullsv;
- PL_reg_magic = (MAGIC*)NULL;
- PL_reg_oldpos = 0;
- PL_reg_oldcurpm = (PMOP*)NULL;
- PL_reg_curpm = (PMOP*)NULL;
- PL_reg_oldsaved = Nullch;
- PL_reg_oldsavedlen = 0;
- PL_reg_maxiter = 0;
- PL_reg_leftiter = 0;
- PL_reg_poscache = Nullch;
- PL_reg_poscache_size= 0;
-
- /* RE engine - function pointers */
- PL_regcompp = proto_perl->Tregcompp;
- PL_regexecp = proto_perl->Tregexecp;
- PL_regint_start = proto_perl->Tregint_start;
- PL_regint_string = proto_perl->Tregint_string;
- PL_regfree = proto_perl->Tregfree;
-
- PL_reginterp_cnt = 0;
- PL_reg_starttry = 0;
-
- if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
- ptr_table_free(PL_ptr_table);
- PL_ptr_table = NULL;
- }
-
-#ifdef PERL_OBJECT
- return (PerlInterpreter*)pPerl;
-#else
- return my_perl;
-#endif
-}
-
-#else /* !USE_ITHREADS */
-
-#ifdef PERL_OBJECT
-#include "XSUB.h"
-#endif
-
-#endif /* USE_ITHREADS */
-
-static void
-do_report_used(pTHXo_ SV *sv)
-{
- if (SvTYPE(sv) != SVTYPEMASK) {
- PerlIO_printf(Perl_debug_log, "****\n");
- sv_dump(sv);
- }
-}
-
-static void
-do_clean_objs(pTHXo_ SV *sv)
-{
- SV* rv;
-
- if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
- DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
- if (SvWEAKREF(sv)) {
- sv_del_backref(sv);
- SvWEAKREF_off(sv);
- SvRV(sv) = 0;
- } else {
- SvROK_off(sv);
- SvRV(sv) = 0;
- SvREFCNT_dec(rv);
- }
- }
-
- /* XXX Might want to check arrays, etc. */
-}
-
-#ifndef DISABLE_DESTRUCTOR_KLUDGE
-static void
-do_clean_named_objs(pTHXo_ SV *sv)
-{
- if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
- if ( SvOBJECT(GvSV(sv)) ||
- (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
- (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
- (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
- (GvCV(sv) && SvOBJECT(GvCV(sv))) )
- {
- DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
- SvREFCNT_dec(sv);
- }
- }
-}
-#endif
-
-static void
-do_clean_all(pTHXo_ SV *sv)
-{
- DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
- SvFLAGS(sv) |= SVf_BREAK;
- SvREFCNT_dec(sv);
-}
-
diff --git a/contrib/perl5/sv.h b/contrib/perl5/sv.h
deleted file mode 100644
index 32418f9..0000000
--- a/contrib/perl5/sv.h
+++ /dev/null
@@ -1,1101 +0,0 @@
-/* sv.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-#ifdef sv_flags
-#undef sv_flags /* Convex has this in <signal.h> for sigvec() */
-#endif
-
-/*
-=for apidoc AmU||svtype
-An enum of flags for Perl types. These are found in the file B<sv.h>
-in the C<svtype> enum. Test these flags with the C<SvTYPE> macro.
-
-=for apidoc AmU||SVt_PV
-Pointer type flag for scalars. See C<svtype>.
-
-=for apidoc AmU||SVt_IV
-Integer type flag for scalars. See C<svtype>.
-
-=for apidoc AmU||SVt_NV
-Double type flag for scalars. See C<svtype>.
-
-=for apidoc AmU||SVt_PVMG
-Type flag for blessed scalars. See C<svtype>.
-
-=for apidoc AmU||SVt_PVAV
-Type flag for arrays. See C<svtype>.
-
-=for apidoc AmU||SVt_PVHV
-Type flag for hashes. See C<svtype>.
-
-=for apidoc AmU||SVt_PVCV
-Type flag for code refs. See C<svtype>.
-
-=cut
-*/
-
-typedef enum {
- SVt_NULL, /* 0 */
- SVt_IV, /* 1 */
- SVt_NV, /* 2 */
- SVt_RV, /* 3 */
- SVt_PV, /* 4 */
- SVt_PVIV, /* 5 */
- SVt_PVNV, /* 6 */
- SVt_PVMG, /* 7 */
- SVt_PVBM, /* 8 */
- SVt_PVLV, /* 9 */
- SVt_PVAV, /* 10 */
- SVt_PVHV, /* 11 */
- SVt_PVCV, /* 12 */
- SVt_PVGV, /* 13 */
- SVt_PVFM, /* 14 */
- SVt_PVIO /* 15 */
-} svtype;
-
-/* Using C's structural equivalence to help emulate C++ inheritance here... */
-
-struct STRUCT_SV {
- void* sv_any; /* pointer to something */
- U32 sv_refcnt; /* how many references to us */
- U32 sv_flags; /* what we are */
-};
-
-struct gv {
- XPVGV* sv_any; /* pointer to something */
- U32 sv_refcnt; /* how many references to us */
- U32 sv_flags; /* what we are */
-};
-
-struct cv {
- XPVCV* sv_any; /* pointer to something */
- U32 sv_refcnt; /* how many references to us */
- U32 sv_flags; /* what we are */
-};
-
-struct av {
- XPVAV* sv_any; /* pointer to something */
- U32 sv_refcnt; /* how many references to us */
- U32 sv_flags; /* what we are */
-};
-
-struct hv {
- XPVHV* sv_any; /* pointer to something */
- U32 sv_refcnt; /* how many references to us */
- U32 sv_flags; /* what we are */
-};
-
-struct io {
- XPVIO* sv_any; /* pointer to something */
- U32 sv_refcnt; /* how many references to us */
- U32 sv_flags; /* what we are */
-};
-
-/*
-=for apidoc Am|U32|SvREFCNT|SV* sv
-Returns the value of the object's reference count.
-
-=for apidoc Am|SV*|SvREFCNT_inc|SV* sv
-Increments the reference count of the given SV.
-
-=for apidoc Am|void|SvREFCNT_dec|SV* sv
-Decrements the reference count of the given SV.
-
-=for apidoc Am|svtype|SvTYPE|SV* sv
-Returns the type of the SV. See C<svtype>.
-
-=for apidoc Am|void|SvUPGRADE|SV* sv|svtype type
-Used to upgrade an SV to a more complex form. Uses C<sv_upgrade> to
-perform the upgrade if necessary. See C<svtype>.
-
-=cut
-*/
-
-#define SvANY(sv) (sv)->sv_any
-#define SvFLAGS(sv) (sv)->sv_flags
-#define SvREFCNT(sv) (sv)->sv_refcnt
-
-#ifdef USE_THREADS
-
-# if defined(VMS)
-# define ATOMIC_INC(count) __ATOMIC_INCREMENT_LONG(&count)
-# define ATOMIC_DEC_AND_TEST(res,count) res=(1==__ATOMIC_DECREMENT_LONG(&count))
- # else
-# ifdef EMULATE_ATOMIC_REFCOUNTS
- # define ATOMIC_INC(count) STMT_START { \
- MUTEX_LOCK(&PL_svref_mutex); \
- ++count; \
- MUTEX_UNLOCK(&PL_svref_mutex); \
- } STMT_END
-# define ATOMIC_DEC_AND_TEST(res,count) STMT_START { \
- MUTEX_LOCK(&PL_svref_mutex); \
- res = (--count == 0); \
- MUTEX_UNLOCK(&PL_svref_mutex); \
- } STMT_END
-# else
-# define ATOMIC_INC(count) atomic_inc(&count)
-# define ATOMIC_DEC_AND_TEST(res,count) (res = atomic_dec_and_test(&count))
-# endif /* EMULATE_ATOMIC_REFCOUNTS */
-# endif /* VMS */
-#else
-# define ATOMIC_INC(count) (++count)
-# define ATOMIC_DEC_AND_TEST(res, count) (res = (--count == 0))
-#endif /* USE_THREADS */
-
-#ifdef __GNUC__
-# define SvREFCNT_inc(sv) \
- ({ \
- SV *nsv = (SV*)(sv); \
- if (nsv) \
- ATOMIC_INC(SvREFCNT(nsv)); \
- nsv; \
- })
-#else
-# if defined(CRIPPLED_CC) || defined(USE_THREADS)
-# if defined(VMS) && defined(__ALPHA)
-# define SvREFCNT_inc(sv) \
- (PL_Sv=(SV*)(sv), (PL_Sv && __ATOMIC_INCREMENT_LONG(&(SvREFCNT(PL_Sv)))), (SV *)PL_Sv)
-# else
-# define SvREFCNT_inc(sv) sv_newref((SV*)sv)
-# endif
-# else
-# define SvREFCNT_inc(sv) \
- ((PL_Sv=(SV*)(sv)), (PL_Sv && ATOMIC_INC(SvREFCNT(PL_Sv))), (SV*)PL_Sv)
-# endif
-#endif
-
-#define SvREFCNT_dec(sv) sv_free((SV*)sv)
-
-#define SVTYPEMASK 0xff
-#define SvTYPE(sv) ((sv)->sv_flags & SVTYPEMASK)
-
-#define SvUPGRADE(sv, mt) (SvTYPE(sv) >= mt || sv_upgrade(sv, mt))
-
-#define SVs_PADBUSY 0x00000100 /* reserved for tmp or my already */
-#define SVs_PADTMP 0x00000200 /* in use as tmp */
-#define SVs_PADMY 0x00000400 /* in use a "my" variable */
-#define SVs_TEMP 0x00000800 /* string is stealable? */
-#define SVs_OBJECT 0x00001000 /* is "blessed" */
-#define SVs_GMG 0x00002000 /* has magical get method */
-#define SVs_SMG 0x00004000 /* has magical set method */
-#define SVs_RMG 0x00008000 /* has random magical methods */
-
-#define SVf_IOK 0x00010000 /* has valid public integer value */
-#define SVf_NOK 0x00020000 /* has valid public numeric value */
-#define SVf_POK 0x00040000 /* has valid public pointer value */
-#define SVf_ROK 0x00080000 /* has a valid reference pointer */
-
-#define SVf_FAKE 0x00100000 /* glob or lexical is just a copy */
-#define SVf_OOK 0x00200000 /* has valid offset value */
-#define SVf_BREAK 0x00400000 /* refcnt is artificially low */
-#define SVf_READONLY 0x00800000 /* may not be modified */
-
-
-#define SVp_IOK 0x01000000 /* has valid non-public integer value */
-#define SVp_NOK 0x02000000 /* has valid non-public numeric value */
-#define SVp_POK 0x04000000 /* has valid non-public pointer value */
-#define SVp_SCREAM 0x08000000 /* has been studied? */
-
-#define SVf_UTF8 0x20000000 /* SvPVX is UTF-8 encoded */
-
-#define SVf_THINKFIRST (SVf_READONLY|SVf_ROK|SVf_FAKE|SVf_UTF8)
-
-#define SVf_OK (SVf_IOK|SVf_NOK|SVf_POK|SVf_ROK| \
- SVp_IOK|SVp_NOK|SVp_POK)
-
-#define SVf_AMAGIC 0x10000000 /* has magical overloaded methods */
-
-#define PRIVSHIFT 8
-
-/* Some private flags. */
-
-/* SVpad_OUR may be set on SVt_PV{NV,MG,GV} types */
-#define SVpad_OUR 0x80000000 /* pad name is "our" instead of "my" */
-
-#define SVf_IVisUV 0x80000000 /* use XPVUV instead of XPVIV */
-
-#define SVpfm_COMPILED 0x80000000 /* FORMLINE is compiled */
-
-#define SVpbm_VALID 0x80000000
-#define SVpbm_TAIL 0x40000000
-
-#define SVrepl_EVAL 0x40000000 /* Replacement part of s///e */
-
-#define SVphv_SHAREKEYS 0x20000000 /* keys live on shared string table */
-#define SVphv_LAZYDEL 0x40000000 /* entry in xhv_eiter must be deleted */
-
-#define SVprv_WEAKREF 0x80000000 /* Weak reference */
-
-struct xrv {
- SV * xrv_rv; /* pointer to another SV */
-};
-
-struct xpv {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
-};
-
-struct xpviv {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xiv_iv; /* integer value or pv offset */
-};
-
-struct xpvuv {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- UV xuv_uv; /* unsigned value or pv offset */
-};
-
-struct xpvnv {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xiv_iv; /* integer value or pv offset */
- NV xnv_nv; /* numeric value, if any */
-};
-
-/* These structure must match the beginning of struct xpvhv in hv.h. */
-struct xpvmg {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xiv_iv; /* integer value or pv offset */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* linked list of magicalness */
- HV* xmg_stash; /* class package */
-};
-
-struct xpvlv {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xiv_iv; /* integer value or pv offset */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* linked list of magicalness */
- HV* xmg_stash; /* class package */
-
- STRLEN xlv_targoff;
- STRLEN xlv_targlen;
- SV* xlv_targ;
- char xlv_type;
-};
-
-struct xpvgv {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xiv_iv; /* integer value or pv offset */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* linked list of magicalness */
- HV* xmg_stash; /* class package */
-
- GP* xgv_gp;
- char* xgv_name;
- STRLEN xgv_namelen;
- HV* xgv_stash;
- U8 xgv_flags;
-};
-
-struct xpvbm {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xiv_iv; /* integer value or pv offset */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* linked list of magicalness */
- HV* xmg_stash; /* class package */
-
- I32 xbm_useful; /* is this constant pattern being useful? */
- U16 xbm_previous; /* how many characters in string before rare? */
- U8 xbm_rare; /* rarest character in string */
-};
-
-/* This structure much match XPVCV in cv.h */
-
-typedef U16 cv_flags_t;
-
-struct xpvfm {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xiv_iv; /* integer value or pv offset */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* linked list of magicalness */
- HV* xmg_stash; /* class package */
-
- HV * xcv_stash;
- OP * xcv_start;
- OP * xcv_root;
- void (*xcv_xsub)(pTHXo_ CV*);
- ANY xcv_xsubany;
- GV * xcv_gv;
- char * xcv_file;
- long xcv_depth; /* >= 2 indicates recursive call */
- AV * xcv_padlist;
- CV * xcv_outside;
-#ifdef USE_THREADS
- perl_mutex *xcv_mutexp; /* protects xcv_owner */
- struct perl_thread *xcv_owner; /* current owner thread */
-#endif /* USE_THREADS */
- cv_flags_t xcv_flags;
-
- I32 xfm_lines;
-};
-
-struct xpvio {
- char * xpv_pv; /* pointer to malloced string */
- STRLEN xpv_cur; /* length of xpv_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- IV xiv_iv; /* integer value or pv offset */
- NV xnv_nv; /* numeric value, if any */
- MAGIC* xmg_magic; /* linked list of magicalness */
- HV* xmg_stash; /* class package */
-
- PerlIO * xio_ifp; /* ifp and ofp are normally the same */
- PerlIO * xio_ofp; /* but sockets need separate streams */
- /* Cray addresses everything by word boundaries (64 bits) and
- * code and data pointers cannot be mixed (which is exactly what
- * Perl_filter_add() tries to do with the dirp), hence the following
- * union trick (as suggested by Gurusamy Sarathy).
- * For further information see Geir Johansen's problem report titled
- [ID 20000612.002] Perl problem on Cray system
- * The any pointer (known as IoANY()) will also be a good place
- * to hang any IO disciplines to.
- */
- union {
- DIR * xiou_dirp; /* for opendir, readdir, etc */
- void * xiou_any; /* for alignment */
- } xio_dirpu;
- long xio_lines; /* $. */
- long xio_page; /* $% */
- long xio_page_len; /* $= */
- long xio_lines_left; /* $- */
- char * xio_top_name; /* $^ */
- GV * xio_top_gv; /* $^ */
- char * xio_fmt_name; /* $~ */
- GV * xio_fmt_gv; /* $~ */
- char * xio_bottom_name;/* $^B */
- GV * xio_bottom_gv; /* $^B */
- short xio_subprocess; /* -| or |- */
- char xio_type;
- char xio_flags;
-};
-#define xio_dirp xio_dirpu.xiou_dirp
-#define xio_any xio_dirpu.xiou_any
-
-#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 */
-#define IOf_DIDTOP 8 /* just did top of form */
-#define IOf_UNTAINT 16 /* consider this fp (and its data) "safe" */
-#define IOf_NOLINE 32 /* slurped a pseudo-line from empty file */
-#define IOf_FAKE_DIRP 64 /* xio_dirp is fake (source filters kludge) */
-
-/* The following macros define implementation-independent predicates on SVs. */
-
-/*
-=for apidoc Am|bool|SvNIOK|SV* sv
-Returns a boolean indicating whether the SV contains a number, integer or
-double.
-
-=for apidoc Am|bool|SvNIOKp|SV* sv
-Returns a boolean indicating whether the SV contains a number, integer or
-double. Checks the B<private> setting. Use C<SvNIOK>.
-
-=for apidoc Am|void|SvNIOK_off|SV* sv
-Unsets the NV/IV status of an SV.
-
-=for apidoc Am|bool|SvOK|SV* sv
-Returns a boolean indicating whether the value is an SV.
-
-=for apidoc Am|bool|SvIOKp|SV* sv
-Returns a boolean indicating whether the SV contains an integer. Checks
-the B<private> setting. Use C<SvIOK>.
-
-=for apidoc Am|bool|SvNOKp|SV* sv
-Returns a boolean indicating whether the SV contains a double. Checks the
-B<private> setting. Use C<SvNOK>.
-
-=for apidoc Am|bool|SvPOKp|SV* sv
-Returns a boolean indicating whether the SV contains a character string.
-Checks the B<private> setting. Use C<SvPOK>.
-
-=for apidoc Am|bool|SvIOK|SV* sv
-Returns a boolean indicating whether the SV contains an integer.
-
-=for apidoc Am|void|SvIOK_on|SV* sv
-Tells an SV that it is an integer.
-
-=for apidoc Am|void|SvIOK_off|SV* sv
-Unsets the IV status of an SV.
-
-=for apidoc Am|void|SvIOK_only|SV* sv
-Tells an SV that it is an integer and disables all other OK bits.
-
-=for apidoc Am|void|SvIOK_only_UV|SV* sv
-Tells and SV that it is an unsigned integer and disables all other OK bits.
-
-=for apidoc Am|void|SvIOK_UV|SV* sv
-Returns a boolean indicating whether the SV contains an unsigned integer.
-
-=for apidoc Am|void|SvIOK_notUV|SV* sv
-Returns a boolean indicating whether the SV contains an signed integer.
-
-=for apidoc Am|bool|SvNOK|SV* sv
-Returns a boolean indicating whether the SV contains a double.
-
-=for apidoc Am|void|SvNOK_on|SV* sv
-Tells an SV that it is a double.
-
-=for apidoc Am|void|SvNOK_off|SV* sv
-Unsets the NV status of an SV.
-
-=for apidoc Am|void|SvNOK_only|SV* sv
-Tells an SV that it is a double and disables all other OK bits.
-
-=for apidoc Am|bool|SvPOK|SV* sv
-Returns a boolean indicating whether the SV contains a character
-string.
-
-=for apidoc Am|void|SvPOK_on|SV* sv
-Tells an SV that it is a string.
-
-=for apidoc Am|void|SvPOK_off|SV* sv
-Unsets the PV status of an SV.
-
-=for apidoc Am|void|SvPOK_only|SV* sv
-Tells an SV that it is a string and disables all other OK bits.
-
-=for apidoc Am|bool|SvOOK|SV* sv
-Returns a boolean indicating whether the SvIVX is a valid offset value for
-the SvPVX. This hack is used internally to speed up removal of characters
-from the beginning of a SvPV. When SvOOK is true, then the start of the
-allocated string buffer is really (SvPVX - SvIVX).
-
-=for apidoc Am|bool|SvROK|SV* sv
-Tests if the SV is an RV.
-
-=for apidoc Am|void|SvROK_on|SV* sv
-Tells an SV that it is an RV.
-
-=for apidoc Am|void|SvROK_off|SV* sv
-Unsets the RV status of an SV.
-
-=for apidoc Am|SV*|SvRV|SV* sv
-Dereferences an RV to return the SV.
-
-=for apidoc Am|IV|SvIVX|SV* sv
-Returns the integer which is stored in the SV, assuming SvIOK is
-true.
-
-=for apidoc Am|UV|SvUVX|SV* sv
-Returns the unsigned integer which is stored in the SV, assuming SvIOK is
-true.
-
-=for apidoc Am|NV|SvNVX|SV* sv
-Returns the double which is stored in the SV, assuming SvNOK is
-true.
-
-=for apidoc Am|char*|SvPVX|SV* sv
-Returns a pointer to the string in the SV. The SV must contain a
-string.
-
-=for apidoc Am|STRLEN|SvCUR|SV* sv
-Returns the length of the string which is in the SV. See C<SvLEN>.
-
-=for apidoc Am|STRLEN|SvLEN|SV* sv
-Returns the size of the string buffer in the SV, not including any part
-attributable to C<SvOOK>. See C<SvCUR>.
-
-=for apidoc Am|char*|SvEND|SV* sv
-Returns a pointer to the last character in the string which is in the SV.
-See C<SvCUR>. Access the character as *(SvEND(sv)).
-
-=for apidoc Am|HV*|SvSTASH|SV* sv
-Returns the stash of the SV.
-
-=for apidoc Am|void|SvCUR_set|SV* sv|STRLEN len
-Set the length of the string which is in the SV. See C<SvCUR>.
-
-=cut
-*/
-
-#define SvNIOK(sv) (SvFLAGS(sv) & (SVf_IOK|SVf_NOK))
-#define SvNIOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK))
-#define SvNIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK| \
- SVp_IOK|SVp_NOK|SVf_IVisUV))
-
-#define SvOK(sv) (SvFLAGS(sv) & SVf_OK)
-#define SvOK_off(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \
- SVf_IVisUV|SVf_UTF8), \
- SvOOK_off(sv))
-#define SvOK_off_exc_UV(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \
- SVf_UTF8), \
- SvOOK_off(sv))
-
-#define SvOKp(sv) (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK))
-#define SvIOKp(sv) (SvFLAGS(sv) & SVp_IOK)
-#define SvIOKp_on(sv) ((void)SvOOK_off(sv), SvFLAGS(sv) |= SVp_IOK)
-#define SvNOKp(sv) (SvFLAGS(sv) & SVp_NOK)
-#define SvNOKp_on(sv) (SvFLAGS(sv) |= SVp_NOK)
-#define SvPOKp(sv) (SvFLAGS(sv) & SVp_POK)
-#define SvPOKp_on(sv) (SvFLAGS(sv) |= SVp_POK)
-
-#define SvIOK(sv) (SvFLAGS(sv) & SVf_IOK)
-#define SvIOK_on(sv) ((void)SvOOK_off(sv), \
- SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
-#define SvIOK_off(sv) (SvFLAGS(sv) &= ~(SVf_IOK|SVp_IOK|SVf_IVisUV))
-#define SvIOK_only(sv) ((void)SvOK_off(sv), \
- SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
-#define SvIOK_only_UV(sv) ((void)SvOK_off_exc_UV(sv), \
- SvFLAGS(sv) |= (SVf_IOK|SVp_IOK))
-
-#define SvIOK_UV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \
- == (SVf_IOK|SVf_IVisUV))
-#define SvIOK_notUV(sv) ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV)) \
- == SVf_IOK)
-
-#define SvIsUV(sv) (SvFLAGS(sv) & SVf_IVisUV)
-#define SvIsUV_on(sv) (SvFLAGS(sv) |= SVf_IVisUV)
-#define SvIsUV_off(sv) (SvFLAGS(sv) &= ~SVf_IVisUV)
-
-#define SvNOK(sv) (SvFLAGS(sv) & SVf_NOK)
-#define SvNOK_on(sv) (SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))
-#define SvNOK_off(sv) (SvFLAGS(sv) &= ~(SVf_NOK|SVp_NOK))
-#define SvNOK_only(sv) ((void)SvOK_off(sv), \
- SvFLAGS(sv) |= (SVf_NOK|SVp_NOK))
-
-/*
-=for apidoc Am|void|SvUTF8|SV* sv
-Returns a boolean indicating whether the SV contains UTF-8 encoded data.
-
-=for apidoc Am|void|SvUTF8_on|SV *sv
-Tells an SV that it is a string and encoded in UTF8. Do not use frivolously.
-
-=for apidoc Am|void|SvUTF8_off|SV *sv
-Unsets the UTF8 status of an SV.
-
-=for apidoc Am|void|SvPOK_only_UTF8|SV* sv
-Tells an SV that it is a UTF8 string (do not use frivolously)
-and disables all other OK bits.
-
-=cut
- */
-
-#define SvUTF8(sv) (SvFLAGS(sv) & SVf_UTF8)
-#define SvUTF8_on(sv) (SvFLAGS(sv) |= (SVf_UTF8))
-#define SvUTF8_off(sv) (SvFLAGS(sv) &= ~(SVf_UTF8))
-
-#define SvPOK(sv) (SvFLAGS(sv) & SVf_POK)
-#define SvPOK_on(sv) (SvFLAGS(sv) |= (SVf_POK|SVp_POK))
-#define SvPOK_off(sv) (SvFLAGS(sv) &= ~(SVf_POK|SVp_POK))
-#define SvPOK_only(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \
- SVf_IVisUV|SVf_UTF8), \
- SvFLAGS(sv) |= (SVf_POK|SVp_POK))
-#define SvPOK_only_UTF8(sv) (SvFLAGS(sv) &= ~(SVf_OK|SVf_AMAGIC| \
- SVf_IVisUV), \
- SvFLAGS(sv) |= (SVf_POK|SVp_POK))
-
-#define SvOOK(sv) (SvFLAGS(sv) & SVf_OOK)
-#define SvOOK_on(sv) ((void)SvIOK_off(sv), SvFLAGS(sv) |= SVf_OOK)
-#define SvOOK_off(sv) (SvOOK(sv) && sv_backoff(sv))
-
-#define SvFAKE(sv) (SvFLAGS(sv) & SVf_FAKE)
-#define SvFAKE_on(sv) (SvFLAGS(sv) |= SVf_FAKE)
-#define SvFAKE_off(sv) (SvFLAGS(sv) &= ~SVf_FAKE)
-
-#define SvROK(sv) (SvFLAGS(sv) & SVf_ROK)
-#define SvROK_on(sv) (SvFLAGS(sv) |= SVf_ROK)
-#define SvROK_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVf_AMAGIC))
-
-#define SvMAGICAL(sv) (SvFLAGS(sv) & (SVs_GMG|SVs_SMG|SVs_RMG))
-#define SvMAGICAL_on(sv) (SvFLAGS(sv) |= (SVs_GMG|SVs_SMG|SVs_RMG))
-#define SvMAGICAL_off(sv) (SvFLAGS(sv) &= ~(SVs_GMG|SVs_SMG|SVs_RMG))
-
-#define SvGMAGICAL(sv) (SvFLAGS(sv) & SVs_GMG)
-#define SvGMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_GMG)
-#define SvGMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_GMG)
-
-#define SvSMAGICAL(sv) (SvFLAGS(sv) & SVs_SMG)
-#define SvSMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_SMG)
-#define SvSMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_SMG)
-
-#define SvRMAGICAL(sv) (SvFLAGS(sv) & SVs_RMG)
-#define SvRMAGICAL_on(sv) (SvFLAGS(sv) |= SVs_RMG)
-#define SvRMAGICAL_off(sv) (SvFLAGS(sv) &= ~SVs_RMG)
-
-#define SvAMAGIC(sv) (SvFLAGS(sv) & SVf_AMAGIC)
-#define SvAMAGIC_on(sv) (SvFLAGS(sv) |= SVf_AMAGIC)
-#define SvAMAGIC_off(sv) (SvFLAGS(sv) &= ~SVf_AMAGIC)
-
-#define SvGAMAGIC(sv) (SvFLAGS(sv) & (SVs_GMG|SVf_AMAGIC))
-
-/*
-#define Gv_AMG(stash) \
- (HV_AMAGICmb(stash) && \
- ((!HV_AMAGICbad(stash) && HV_AMAGIC(stash)) || Gv_AMupdate(stash)))
-*/
-#define Gv_AMG(stash) (PL_amagic_generation && Gv_AMupdate(stash))
-
-#define SvWEAKREF(sv) ((SvFLAGS(sv) & (SVf_ROK|SVprv_WEAKREF)) \
- == (SVf_ROK|SVprv_WEAKREF))
-#define SvWEAKREF_on(sv) (SvFLAGS(sv) |= (SVf_ROK|SVprv_WEAKREF))
-#define SvWEAKREF_off(sv) (SvFLAGS(sv) &= ~(SVf_ROK|SVprv_WEAKREF))
-
-#define SvTHINKFIRST(sv) (SvFLAGS(sv) & SVf_THINKFIRST)
-
-#define SvPADBUSY(sv) (SvFLAGS(sv) & SVs_PADBUSY)
-
-#define SvPADTMP(sv) (SvFLAGS(sv) & SVs_PADTMP)
-#define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP|SVs_PADBUSY)
-#define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP)
-
-#define SvPADMY(sv) (SvFLAGS(sv) & SVs_PADMY)
-#define SvPADMY_on(sv) (SvFLAGS(sv) |= SVs_PADMY|SVs_PADBUSY)
-
-#define SvTEMP(sv) (SvFLAGS(sv) & SVs_TEMP)
-#define SvTEMP_on(sv) (SvFLAGS(sv) |= SVs_TEMP)
-#define SvTEMP_off(sv) (SvFLAGS(sv) &= ~SVs_TEMP)
-
-#define SvOBJECT(sv) (SvFLAGS(sv) & SVs_OBJECT)
-#define SvOBJECT_on(sv) (SvFLAGS(sv) |= SVs_OBJECT)
-#define SvOBJECT_off(sv) (SvFLAGS(sv) &= ~SVs_OBJECT)
-
-#define SvREADONLY(sv) (SvFLAGS(sv) & SVf_READONLY)
-#define SvREADONLY_on(sv) (SvFLAGS(sv) |= SVf_READONLY)
-#define SvREADONLY_off(sv) (SvFLAGS(sv) &= ~SVf_READONLY)
-
-#define SvSCREAM(sv) (SvFLAGS(sv) & SVp_SCREAM)
-#define SvSCREAM_on(sv) (SvFLAGS(sv) |= SVp_SCREAM)
-#define SvSCREAM_off(sv) (SvFLAGS(sv) &= ~SVp_SCREAM)
-
-#define SvCOMPILED(sv) (SvFLAGS(sv) & SVpfm_COMPILED)
-#define SvCOMPILED_on(sv) (SvFLAGS(sv) |= SVpfm_COMPILED)
-#define SvCOMPILED_off(sv) (SvFLAGS(sv) &= ~SVpfm_COMPILED)
-
-#define SvEVALED(sv) (SvFLAGS(sv) & SVrepl_EVAL)
-#define SvEVALED_on(sv) (SvFLAGS(sv) |= SVrepl_EVAL)
-#define SvEVALED_off(sv) (SvFLAGS(sv) &= ~SVrepl_EVAL)
-
-#define SvTAIL(sv) (SvFLAGS(sv) & SVpbm_TAIL)
-#define SvTAIL_on(sv) (SvFLAGS(sv) |= SVpbm_TAIL)
-#define SvTAIL_off(sv) (SvFLAGS(sv) &= ~SVpbm_TAIL)
-
-#define SvVALID(sv) (SvFLAGS(sv) & SVpbm_VALID)
-#define SvVALID_on(sv) (SvFLAGS(sv) |= SVpbm_VALID)
-#define SvVALID_off(sv) (SvFLAGS(sv) &= ~SVpbm_VALID)
-
-#define SvRV(sv) ((XRV*) SvANY(sv))->xrv_rv
-#define SvRVx(sv) SvRV(sv)
-
-#define SvIVX(sv) ((XPVIV*) SvANY(sv))->xiv_iv
-#define SvIVXx(sv) SvIVX(sv)
-#define SvUVX(sv) ((XPVUV*) SvANY(sv))->xuv_uv
-#define SvUVXx(sv) SvUVX(sv)
-#define SvNVX(sv) ((XPVNV*)SvANY(sv))->xnv_nv
-#define SvNVXx(sv) SvNVX(sv)
-#define SvPVX(sv) ((XPV*) SvANY(sv))->xpv_pv
-#define SvPVXx(sv) SvPVX(sv)
-#define SvCUR(sv) ((XPV*) SvANY(sv))->xpv_cur
-#define SvLEN(sv) ((XPV*) SvANY(sv))->xpv_len
-#define SvLENx(sv) SvLEN(sv)
-#define SvEND(sv)(((XPV*) SvANY(sv))->xpv_pv + ((XPV*)SvANY(sv))->xpv_cur)
-#define SvENDx(sv) ((PL_Sv = (sv)), SvEND(PL_Sv))
-#define SvMAGIC(sv) ((XPVMG*) SvANY(sv))->xmg_magic
-#define SvSTASH(sv) ((XPVMG*) SvANY(sv))->xmg_stash
-
-#define SvIV_set(sv, val) \
- STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
- (((XPVIV*) SvANY(sv))->xiv_iv = val); } STMT_END
-#define SvNV_set(sv, val) \
- STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \
- (((XPVNV*) SvANY(sv))->xnv_nv = val); } STMT_END
-#define SvPV_set(sv, val) \
- STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
- (((XPV*) SvANY(sv))->xpv_pv = val); } STMT_END
-#define SvCUR_set(sv, val) \
- STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
- (((XPV*) SvANY(sv))->xpv_cur = val); } STMT_END
-#define SvLEN_set(sv, val) \
- STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
- (((XPV*) SvANY(sv))->xpv_len = val); } STMT_END
-#define SvEND_set(sv, val) \
- STMT_START { assert(SvTYPE(sv) >= SVt_PV); \
- (((XPV*) SvANY(sv))->xpv_cur = val - SvPVX(sv)); } STMT_END
-
-#define BmRARE(sv) ((XPVBM*) SvANY(sv))->xbm_rare
-#define BmUSEFUL(sv) ((XPVBM*) SvANY(sv))->xbm_useful
-#define BmPREVIOUS(sv) ((XPVBM*) SvANY(sv))->xbm_previous
-
-#define FmLINES(sv) ((XPVFM*) SvANY(sv))->xfm_lines
-
-#define LvTYPE(sv) ((XPVLV*) SvANY(sv))->xlv_type
-#define LvTARG(sv) ((XPVLV*) SvANY(sv))->xlv_targ
-#define LvTARGOFF(sv) ((XPVLV*) SvANY(sv))->xlv_targoff
-#define LvTARGLEN(sv) ((XPVLV*) SvANY(sv))->xlv_targlen
-
-#define IoIFP(sv) ((XPVIO*) SvANY(sv))->xio_ifp
-#define IoOFP(sv) ((XPVIO*) SvANY(sv))->xio_ofp
-#define IoDIRP(sv) ((XPVIO*) SvANY(sv))->xio_dirp
-#define IoANY(sv) ((XPVIO*) SvANY(sv))->xio_any
-#define IoLINES(sv) ((XPVIO*) SvANY(sv))->xio_lines
-#define IoPAGE(sv) ((XPVIO*) SvANY(sv))->xio_page
-#define IoPAGE_LEN(sv) ((XPVIO*) SvANY(sv))->xio_page_len
-#define IoLINES_LEFT(sv)((XPVIO*) SvANY(sv))->xio_lines_left
-#define IoTOP_NAME(sv) ((XPVIO*) SvANY(sv))->xio_top_name
-#define IoTOP_GV(sv) ((XPVIO*) SvANY(sv))->xio_top_gv
-#define IoFMT_NAME(sv) ((XPVIO*) SvANY(sv))->xio_fmt_name
-#define IoFMT_GV(sv) ((XPVIO*) SvANY(sv))->xio_fmt_gv
-#define IoBOTTOM_NAME(sv)((XPVIO*) SvANY(sv))->xio_bottom_name
-#define IoBOTTOM_GV(sv) ((XPVIO*) SvANY(sv))->xio_bottom_gv
-#define IoSUBPROCESS(sv)((XPVIO*) SvANY(sv))->xio_subprocess
-#define IoTYPE(sv) ((XPVIO*) SvANY(sv))->xio_type
-#define IoFLAGS(sv) ((XPVIO*) SvANY(sv))->xio_flags
-
-/* IoTYPE(sv) is a single character telling the type of I/O connection. */
-#define IoTYPE_RDONLY '<'
-#define IoTYPE_WRONLY '>'
-#define IoTYPE_RDWR '+'
-#define IoTYPE_APPEND 'a'
-#define IoTYPE_PIPE '|'
-#define IoTYPE_STD '-' /* stdin or stdout */
-#define IoTYPE_SOCKET 's'
-#define IoTYPE_CLOSED ' '
-
-/*
-=for apidoc Am|bool|SvTAINTED|SV* sv
-Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
-not.
-
-=for apidoc Am|void|SvTAINTED_on|SV* sv
-Marks an SV as tainted.
-
-=for apidoc Am|void|SvTAINTED_off|SV* sv
-Untaints an SV. Be I<very> careful with this routine, as it short-circuits
-some of Perl's fundamental security features. XS module authors should not
-use this function unless they fully understand all the implications of
-unconditionally untainting the value. Untainting should be done in the
-standard perl fashion, via a carefully crafted regexp, rather than directly
-untainting variables.
-
-=for apidoc Am|void|SvTAINT|SV* sv
-Taints an SV if tainting is enabled
-
-=cut
-*/
-
-#define SvTAINTED(sv) (SvMAGICAL(sv) && sv_tainted(sv))
-#define SvTAINTED_on(sv) STMT_START{ if(PL_tainting){sv_taint(sv);} }STMT_END
-#define SvTAINTED_off(sv) STMT_START{ if(PL_tainting){sv_untaint(sv);} }STMT_END
-
-#define SvTAINT(sv) \
- STMT_START { \
- if (PL_tainting) { \
- if (PL_tainted) \
- SvTAINTED_on(sv); \
- } \
- } STMT_END
-
-/*
-=for apidoc Am|char*|SvPV_force|SV* sv|STRLEN len
-Like <SvPV> but will force the SV into becoming a string (SvPOK). You want
-force if you are going to update the SvPVX directly.
-
-=for apidoc Am|char*|SvPV|SV* sv|STRLEN len
-Returns a pointer to the string in the SV, or a stringified form of the SV
-if the SV does not contain a string. Handles 'get' magic.
-
-=for apidoc Am|char*|SvPV_nolen|SV* sv
-Returns a pointer to the string in the SV, or a stringified form of the SV
-if the SV does not contain a string. Handles 'get' magic.
-
-=for apidoc Am|IV|SvIV|SV* sv
-Coerces the given SV to an integer and returns it.
-
-=for apidoc Am|NV|SvNV|SV* sv
-Coerce the given SV to a double and return it.
-
-=for apidoc Am|UV|SvUV|SV* sv
-Coerces the given SV to an unsigned integer and returns it.
-
-=for apidoc Am|bool|SvTRUE|SV* sv
-Returns a boolean indicating whether Perl would evaluate the SV as true or
-false, defined or undefined. Does not handle 'get' magic.
-
-=cut
-*/
-
-#define SvPV_force(sv, lp) sv_pvn_force(sv, &lp)
-#define SvPV(sv, lp) sv_pvn(sv, &lp)
-#define SvPV_nolen(sv) sv_pv(sv)
-
-#define SvPVutf8_force(sv, lp) sv_pvutf8n_force(sv, &lp)
-#define SvPVutf8(sv, lp) sv_pvutf8n(sv, &lp)
-#define SvPVutf8_nolen(sv) sv_pvutf8(sv)
-
-#define SvPVbyte_force(sv, lp) sv_pvbyte_force(sv, &lp)
-#define SvPVbyte(sv, lp) sv_pvbyten(sv, &lp)
-#define SvPVbyte_nolen(sv) sv_pvbyte(sv)
-
-#define SvPVx(sv, lp) sv_pvn(sv, &lp)
-#define SvPVx_force(sv, lp) sv_pvn_force(sv, &lp)
-#define SvPVutf8x(sv, lp) sv_pvutf8n(sv, &lp)
-#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
-#define SvPVbytex(sv, lp) sv_pvbyten(sv, &lp)
-#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
-
-#define SvIVx(sv) sv_iv(sv)
-#define SvUVx(sv) sv_uv(sv)
-#define SvNVx(sv) sv_nv(sv)
-
-#define SvTRUEx(sv) sv_true(sv)
-
-#define SvIV(sv) SvIVx(sv)
-#define SvNV(sv) SvNVx(sv)
-#define SvUV(sv) SvUVx(sv)
-#define SvTRUE(sv) SvTRUEx(sv)
-
-#ifndef CRIPPLED_CC
-/* redefine some things to more efficient inlined versions */
-
-/* Let us hope that bitmaps for UV and IV are the same */
-#undef SvIV
-#define SvIV(sv) (SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv))
-
-#undef SvUV
-#define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
-
-#undef SvNV
-#define SvNV(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv))
-
-#undef SvPV
-#define SvPV(sv, lp) \
- ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv(sv, &lp))
-
-
-#undef SvPV_force
-#define SvPV_force(sv, lp) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force(sv, &lp))
-
-#undef SvPV_nolen
-#define SvPV_nolen(sv) \
- ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
- ? SvPVX(sv) : sv_2pv_nolen(sv))
-
-#undef SvPVutf8
-#define SvPVutf8(sv, lp) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK|SVf_UTF8) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
-
-#undef SvPVutf8_force
-#define SvPVutf8_force(sv, lp) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == (SVf_POK|SVf_UTF8) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
-
-#undef SvPVutf8_nolen
-#define SvPVutf8_nolen(sv) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK|SVf_UTF8)\
- ? SvPVX(sv) : sv_2pvutf8_nolen(sv))
-
-#undef SvPVutf8
-#define SvPVutf8(sv, lp) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK|SVf_UTF8) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
-
-#undef SvPVutf8_force
-#define SvPVutf8_force(sv, lp) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == (SVf_POK|SVf_UTF8) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
-
-#undef SvPVutf8_nolen
-#define SvPVutf8_nolen(sv) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK|SVf_UTF8)\
- ? SvPVX(sv) : sv_2pvutf8_nolen(sv))
-
-#undef SvPVbyte
-#define SvPVbyte(sv, lp) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
-
-#undef SvPVbyte_force
-#define SvPVbyte_force(sv, lp) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8|SVf_THINKFIRST)) == (SVf_POK) \
- ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvbyte_force(sv, &lp))
-
-#undef SvPVbyte_nolen
-#define SvPVbyte_nolen(sv) \
- ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK)\
- ? SvPVX(sv) : sv_2pvbyte_nolen(sv))
-
-
-#ifdef __GNUC__
-# undef SvIVx
-# undef SvUVx
-# undef SvNVx
-# undef SvPVx
-# undef SvPVutf8x
-# undef SvPVbytex
-# undef SvTRUE
-# undef SvTRUEx
-# define SvIVx(sv) ({SV *nsv = (SV*)(sv); SvIV(nsv); })
-# define SvUVx(sv) ({SV *nsv = (SV*)(sv); SvUV(nsv); })
-# define SvNVx(sv) ({SV *nsv = (SV*)(sv); SvNV(nsv); })
-# define SvPVx(sv, lp) ({SV *nsv = (sv); SvPV(nsv, lp); })
-# define SvPVutf8x(sv, lp) ({SV *nsv = (sv); SvPVutf8(nsv, lp); })
-# define SvPVbytex(sv, lp) ({SV *nsv = (sv); SvPVbyte(nsv, lp); })
-# define SvTRUE(sv) ( \
- !sv \
- ? 0 \
- : SvPOK(sv) \
- ? (({XPV *nxpv = (XPV*)SvANY(sv); \
- nxpv && \
- (nxpv->xpv_cur > 1 || \
- (nxpv->xpv_cur && *nxpv->xpv_pv != '0')); }) \
- ? 1 \
- : 0) \
- : \
- SvIOK(sv) \
- ? SvIVX(sv) != 0 \
- : SvNOK(sv) \
- ? SvNVX(sv) != 0.0 \
- : sv_2bool(sv) )
-# define SvTRUEx(sv) ({SV *nsv = (sv); SvTRUE(nsv); })
-#else /* __GNUC__ */
-#ifndef USE_THREADS
-/* These inlined macros use globals, which will require a thread
- * declaration in user code, so we avoid them under threads */
-
-# undef SvIVx
-# undef SvUVx
-# undef SvNVx
-# undef SvPVx
-# undef SvPVutf8x
-# undef SvPVbytex
-# undef SvTRUE
-# undef SvTRUEx
-# define SvIVx(sv) ((PL_Sv = (sv)), SvIV(PL_Sv))
-# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
-# define SvNVx(sv) ((PL_Sv = (sv)), SvNV(PL_Sv))
-# define SvPVx(sv, lp) ((PL_Sv = (sv)), SvPV(PL_Sv, lp))
-# define SvPVutf8x(sv, lp) ((PL_Sv = (sv)), SvPVutf8(PL_Sv, lp))
-# define SvPVbytex(sv, lp) ((PL_Sv = (sv)), SvPVbyte(PL_Sv, lp))
-# define SvTRUE(sv) ( \
- !sv \
- ? 0 \
- : SvPOK(sv) \
- ? ((PL_Xpv = (XPV*)SvANY(sv)) && \
- (PL_Xpv->xpv_cur > 1 || \
- (PL_Xpv->xpv_cur && *PL_Xpv->xpv_pv != '0')) \
- ? 1 \
- : 0) \
- : \
- SvIOK(sv) \
- ? SvIVX(sv) != 0 \
- : SvNOK(sv) \
- ? SvNVX(sv) != 0.0 \
- : sv_2bool(sv) )
-# define SvTRUEx(sv) ((PL_Sv = (sv)), SvTRUE(PL_Sv))
-#endif /* !USE_THREADS */
-#endif /* !__GNU__ */
-#endif /* !CRIPPLED_CC */
-
-/*
-=for apidoc Am|SV*|newRV_inc|SV* sv
-
-Creates an RV wrapper for an SV. The reference count for the original SV is
-incremented.
-
-=cut
-*/
-
-#define newRV_inc(sv) newRV(sv)
-
-/* the following macros update any magic values this sv is associated with */
-
-/*
-=for apidoc Am|void|SvGETMAGIC|SV* sv
-Invokes C<mg_get> on an SV if it has 'get' magic. This macro evaluates its
-argument more than once.
-
-=for apidoc Am|void|SvSETMAGIC|SV* sv
-Invokes C<mg_set> on an SV if it has 'set' magic. This macro evaluates its
-argument more than once.
-
-=for apidoc Am|void|SvSetSV|SV* dsb|SV* ssv
-Calls C<sv_setsv> if dsv is not the same as ssv. May evaluate arguments
-more than once.
-
-=for apidoc Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
-Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
-ssv. May evaluate arguments more than once.
-
-=for apidoc Am|void|SvGROW|SV* sv|STRLEN len
-Expands the character buffer in the SV so that it has room for the
-indicated number of bytes (remember to reserve space for an extra trailing
-NUL character). Calls C<sv_grow> to perform the expansion if necessary.
-Returns a pointer to the character buffer.
-
-=cut
-*/
-
-#define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
-#define SvSETMAGIC(x) STMT_START { if (SvSMAGICAL(x)) mg_set(x); } STMT_END
-
-#define SvSetSV_and(dst,src,finally) \
- STMT_START { \
- if ((dst) != (src)) { \
- sv_setsv(dst, src); \
- finally; \
- } \
- } STMT_END
-#define SvSetSV_nosteal_and(dst,src,finally) \
- STMT_START { \
- if ((dst) != (src)) { \
- U32 tMpF = SvFLAGS(src) & SVs_TEMP; \
- SvTEMP_off(src); \
- sv_setsv(dst, src); \
- SvFLAGS(src) |= tMpF; \
- finally; \
- } \
- } STMT_END
-
-#define SvSetSV(dst,src) \
- SvSetSV_and(dst,src,/*nothing*/;)
-#define SvSetSV_nosteal(dst,src) \
- SvSetSV_nosteal_and(dst,src,/*nothing*/;)
-
-#define SvSetMagicSV(dst,src) \
- SvSetSV_and(dst,src,SvSETMAGIC(dst))
-#define SvSetMagicSV_nosteal(dst,src) \
- SvSetSV_nosteal_and(dst,src,SvSETMAGIC(dst))
-
-#ifdef DEBUGGING
-#define SvPEEK(sv) sv_peek(sv)
-#else
-#define SvPEEK(sv) ""
-#endif
-
-#define SvIMMORTAL(sv) ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes || (sv)==&PL_sv_no)
-
-#define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
-
-#define isGV(sv) (SvTYPE(sv) == SVt_PVGV)
-
-#define SvGROW(sv,len) (SvLEN(sv) < (len) ? sv_grow(sv,len) : SvPVX(sv))
-#define Sv_Grow sv_grow
-
-#define CLONEf_COPY_STACKS 1
-#define CLONEf_KEEP_PTR_TABLE 2
-
diff --git a/contrib/perl5/t/README b/contrib/perl5/t/README
deleted file mode 100644
index 0953026..0000000
--- a/contrib/perl5/t/README
+++ /dev/null
@@ -1,16 +0,0 @@
-This is the perl test library. To run all the tests, just type 'TEST'.
-
-To add new tests, just look at the current tests and do likewise.
-
-If a test fails, run it by itself to see if it prints any informative
-diagnostics. If not, modify the test to print informative diagnostics.
-If you put out extra lines with a '#' character on the front, you don't
-have to worry about removing the extra print statements later since TEST
-ignores lines beginning with '#'.
-
-If you know that Perl is basically working but expect that some tests
-will fail, you may want to use Test::Harness thusly:
- ./perl -I../lib harness
-This method pinpoints failed tests automatically.
-
-If you come up with new tests, please send them to perlbug@perl.org.
diff --git a/contrib/perl5/t/TEST b/contrib/perl5/t/TEST
deleted file mode 100755
index bce9545..0000000
--- a/contrib/perl5/t/TEST
+++ /dev/null
@@ -1,185 +0,0 @@
-#!./perl
-
-# Last change: Fri May 28 03:16:57 BST 1999
-
-# This is written in a peculiar style, since we're trying to avoid
-# most of the constructs we'll be testing for.
-
-$| = 1;
-
-if ($#ARGV >= 0 && $ARGV[0] eq '-v') {
- $verbose = 1;
- shift;
-}
-
-chdir 't' if -f 't/TEST';
-
-die "You need to run \"make test\" first to set things up.\n"
- unless -e 'perl' or -e 'perl.exe';
-
-# check leakage for embedders
-$ENV{PERL_DESTRUCT_LEVEL} = 2 unless exists $ENV{PERL_DESTRUCT_LEVEL};
-
-$ENV{EMXSHELL} = 'sh'; # For OS/2
-
-if ($#ARGV == -1) {
- @ARGV = split(/[ \n]/,
- `echo base/*.t comp/*.t cmd/*.t run/*.t io/*.t; echo op/*.t pragma/*.t lib/*.t`);
-}
-
-# %infinite = ( 'comp/require.t', 1, 'op/bop.t', 1, 'lib/hostname.t', 1 );
-
-_testprogs('perl', @ARGV);
-_testprogs('compile', @ARGV) if (-e "../testcompile");
-
-sub _testprogs {
- $type = shift @_;
- @tests = @_;
-
-
- print <<'EOT' if ($type eq 'compile');
---------------------------------------------------------------------------------
-TESTING COMPILER
---------------------------------------------------------------------------------
-EOT
-
- $ENV{PERLCC_TIMEOUT} = 120
- if ($type eq 'compile' && !$ENV{PERLCC_TIMEOUT});
-
- $bad = 0;
- $good = 0;
- $total = @tests;
- $files = 0;
- $totmax = 0;
- $maxlen = 0;
- foreach (@tests) {
- $len = length;
- $maxlen = $len if $len > $maxlen;
- }
- # +3 : we want three dots between the test name and the "ok"
- # -2 : the .t suffix
- $dotdotdot = $maxlen + 3 - 2;
- while ($test = shift @tests) {
-
- if ( $infinite{$test} && $type eq 'compile' ) {
- print STDERR "$test creates infinite loop! Skipping.\n";
- next;
- }
- if ($test =~ /^$/) {
- next;
- }
- $te = $test;
- chop($te);
- print "$te" . '.' x ($dotdotdot - length($te));
-
- open(SCRIPT,"<$test") or die "Can't run $test.\n";
- $_ = <SCRIPT>;
- close(SCRIPT);
- if (/#!.*perl(.*)$/) {
- $switch = $1;
- if ($^O eq 'VMS') {
- # Must protect uppercase switches with "" on command line
- $switch =~ s/-([A-Z]\S*)/"-$1"/g;
- }
- }
- else {
- $switch = '';
- }
-
- if ($type eq 'perl') {
- open(RESULTS,"./perl$switch $test |") or print "can't run.\n";
- }
- else {
- open(RESULTS, "./perl -I../lib ../utils/perlcc -o ./$test.plc ./$test "
- ." && ./$test.plc |")
- or print "can't compile.\n";
- unlink "./$test.plc";
- }
-
- $ok = 0;
- $next = 0;
- while (<RESULTS>) {
- if ($verbose) {
- print $_;
- }
- unless (/^#/) {
- if (/^1\.\.([0-9]+)/) {
- $max = $1;
- $totmax += $max;
- $files += 1;
- $next = 1;
- $ok = 1;
- }
- else {
- $next = $1, $ok = 0, last if /^not ok ([0-9]*)/;
- if (/^ok (\d+)(\s*#.*)?$/ && $1 == $next) {
- $next = $next + 1;
- }
- else {
- $ok = 0;
- }
- }
- }
- }
- close RESULTS;
- $next = $next - 1;
- if ($ok && $next == $max) {
- if ($max) {
- print "ok\n";
- $good = $good + 1;
- }
- else {
- print "skipping test on this platform\n";
- $files -= 1;
- }
- }
- else {
- $next += 1;
- print "FAILED at test $next\n";
- $bad = $bad + 1;
- $_ = $test;
- if (/^base/) {
- die "Failed a basic test--cannot continue.\n";
- }
- }
- }
-
- if ($bad == 0) {
- if ($ok) {
- print "All tests successful.\n";
- # XXX add mention of 'perlbug -ok' ?
- }
- else {
- die "FAILED--no tests were run for some reason.\n";
- }
- }
- else {
- $pct = $files ? sprintf("%.2f", ($files - $bad) / $files * 100) : "0.00";
- if ($bad == 1) {
- warn "Failed 1 test script out of $files, $pct% okay.\n";
- }
- else {
- warn "Failed $bad test scripts out of $files, $pct% okay.\n";
- }
- warn <<'SHRDLU';
- ### Since not all tests were successful, you may want to run some
- ### of them individually and examine any diagnostic messages they
- ### produce. See the INSTALL document's section on "make test".
- ### If you are testing the compiler, then ignore this message
- ### and run
- ### ./perl harness
- ### in the directory ./t.
-SHRDLU
- warn <<'SHRDLU' if $good / $total > 0.8;
- ###
- ### Since most tests were successful, you have a good chance to
- ### get information with better granularity by running
- ### ./perl harness
- ### in directory ./t.
-SHRDLU
- }
- ($user,$sys,$cuser,$csys) = times;
- print sprintf("u=%g s=%g cu=%g cs=%g scripts=%d tests=%d\n",
- $user,$sys,$cuser,$csys,$files,$totmax);
-}
-exit ($bad != 0);
diff --git a/contrib/perl5/t/UTEST b/contrib/perl5/t/UTEST
deleted file mode 100755
index 9c1dfc0..0000000
--- a/contrib/perl5/t/UTEST
+++ /dev/null
@@ -1,198 +0,0 @@
-#!./perl
-
-# Last change: Fri Jan 10 09:57:03 WET 1997
-
-# This is written in a peculiar style, since we're trying to avoid
-# most of the constructs we'll be testing for.
-
-$| = 1;
-
-if ($#ARGV >= 0 && $ARGV[0] eq '-v') {
- $verbose = 1;
- shift;
-}
-
-chdir 't' if -f 't/TEST';
-
-die "You need to run \"make test\" first to set things up.\n"
- unless -e 'perl' or -e 'perl.exe';
-
-#$ENV{PERL_DESTRUCT_LEVEL} = '2';
-$ENV{EMXSHELL} = 'sh'; # For OS/2
-
-if ($#ARGV == -1) {
- @ARGV = split(/[ \n]/,
- `echo base/*.t comp/*.t cmd/*.t io/*.t; echo op/*.t pragma/*.t lib/*.t`);
-}
-
-if ($^O eq 'os2' || $^O eq 'qnx') {
- $sharpbang = 0;
-}
-else {
- open(CONFIG, "../config.sh");
- while (<CONFIG>) {
- if (/sharpbang='(.*)'/) {
- $sharpbang = ($1 eq '#!');
- last;
- }
- }
- close(CONFIG);
-}
-
-%infinite = ( 'comp/require.t', 1, 'op/bop.t', 1, 'lib/hostname.t', 1 );
-
-_testprogs('perl', @ARGV);
-_testprogs('compile', @ARGV) if (-e "../testcompile");
-
-sub _testprogs {
- $type = shift @_;
- @tests = @_;
-
-
- print <<'EOT' if ($type eq 'compile');
---------------------------------------------------------------------------------
-TESTING COMPILER
---------------------------------------------------------------------------------
-EOT
-
- $ENV{PERLCC_TIMEOUT} = 120
- if ($type eq 'compile' && !$ENV{PERLCC_TIMEOUT});
-
- $bad = 0;
- $good = 0;
- $total = @tests;
- $files = 0;
- $totmax = 0;
- while ($test = shift @tests) {
-
- if ( $infinite{$test} && $type eq 'compile' ) {
- print STDERR "$test creates infinite loop! Skipping.\n";
- next;
- }
- if ($test =~ /^$/) {
- next;
- }
- $te = $test;
- chop($te);
- print "$te" . '.' x (18 - length($te));
- if (0) {
- -x $test || (print "isn't executable.\n");
-
- if ($type eq 'perl') {
- open(RESULTS, "./$test |") || (print "can't run.\n"); }
- else {
- open(RESULTS, "./perl -I../lib ../utils/perlcc -o ./$test.plc ./$test "
- ." && ./$test.plc |")
- or print "can't compile.\n";
- unlink "./$test.plc";
- }
- }
- else {
- open(SCRIPT,"$test") or die "Can't run $test.\n";
- $_ = <SCRIPT>;
- close(SCRIPT);
- if (/#!..perl(.*)/) {
- $switch = $1;
- if ($^O eq 'VMS') {
- # Must protect uppercase switches with "" on command line
- $switch =~ s/-([A-Z]\S*)/"-$1"/g;
- }
- }
- else {
- $switch = '';
- }
-
- if ($type eq 'perl') {
- open(RESULTS,"./perl$switch -I../lib -Mutf8 $test |") || (print "can't run.\n");
- }
- else {
- open(RESULTS, "./perl -I../lib ../utils/perlcc -Mutf8 ./$test -run -verbose dcf -log ../compilelog |") or print "can't compile.\n";
- }
- }
- $ok = 0;
- $next = 0;
- while (<RESULTS>) {
- if ($verbose) {
- print $_;
- }
- unless (/^#/) {
- if (/^1\.\.([0-9]+)/) {
- $max = $1;
- $totmax += $max;
- $files += 1;
- $next = 1;
- $ok = 1;
- }
- else {
- $next = $1, $ok = 0, last if /^not ok ([0-9]*)/;
- if (/^ok (\d+)(\s*#.*)?$/ && $1 == $next) {
- $next = $next + 1;
- }
- else {
- $ok = 0;
- }
- }
- }
- }
- close RESULTS;
- $next = $next - 1;
- if ($ok && $next == $max) {
- if ($max) {
- print "ok\n";
- $good = $good + 1;
- }
- else {
- print "skipping test on this platform\n";
- $files -= 1;
- }
- }
- else {
- $next += 1;
- print "FAILED at test $next\n";
- $bad = $bad + 1;
- $_ = $test;
- if (/^base/) {
- die "Failed a basic test--cannot continue.\n";
- }
- }
- }
-
- if ($bad == 0) {
- if ($ok) {
- print "All tests successful.\n";
- # XXX add mention of 'perlbug -ok' ?
- }
- else {
- die "FAILED--no tests were run for some reason.\n";
- }
- }
- else {
- $pct = sprintf("%.2f", $good / $total * 100);
- if ($bad == 1) {
- warn "Failed 1 test script out of $total, $pct% okay.\n";
- }
- else {
- warn "Failed $bad test scripts out of $total, $pct% okay.\n";
- }
- warn <<'SHRDLU';
- ### Since not all tests were successful, you may want to run some
- ### of them individually and examine any diagnostic messages they
- ### produce. See the INSTALL document's section on "make test".
- ### If you are testing the compiler, then ignore this message
- ### and run
- ### ./perl harness
- ### in the directory ./t.
-SHRDLU
- warn <<'SHRDLU' if $good / $total > 0.8;
- ###
- ### Since most tests were successful, you have a good chance to
- ### get information with better granularity by running
- ### ./perl harness
- ### in directory ./t.
-SHRDLU
- }
- ($user,$sys,$cuser,$csys) = times;
- print sprintf("u=%g s=%g cu=%g cs=%g scripts=%d tests=%d\n",
- $user,$sys,$cuser,$csys,$files,$totmax);
-}
-exit ($bad != 0);
diff --git a/contrib/perl5/t/base/cond.t b/contrib/perl5/t/base/cond.t
deleted file mode 100755
index 9a57348..0000000
--- a/contrib/perl5/t/base/cond.t
+++ /dev/null
@@ -1,19 +0,0 @@
-#!./perl
-
-# $RCSfile: cond.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:02 $
-
-# make sure conditional operators work
-
-print "1..4\n";
-
-$x = '0';
-
-$x eq $x && (print "ok 1\n");
-$x ne $x && (print "not ok 1\n");
-$x eq $x || (print "not ok 2\n");
-$x ne $x || (print "ok 2\n");
-
-$x == $x && (print "ok 3\n");
-$x != $x && (print "not ok 3\n");
-$x == $x || (print "not ok 4\n");
-$x != $x || (print "ok 4\n");
diff --git a/contrib/perl5/t/base/if.t b/contrib/perl5/t/base/if.t
deleted file mode 100755
index 12db765..0000000
--- a/contrib/perl5/t/base/if.t
+++ /dev/null
@@ -1,11 +0,0 @@
-#!./perl
-
-# $RCSfile: if.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:03 $
-
-print "1..2\n";
-
-# first test to see if we can run the tests.
-
-$x = 'test';
-if ($x eq $x) { print "ok 1\n"; } else { print "not ok 1\n";}
-if ($x ne $x) { print "not ok 2\n"; } else { print "ok 2\n";}
diff --git a/contrib/perl5/t/base/lex.t b/contrib/perl5/t/base/lex.t
deleted file mode 100755
index c7fb0e4..0000000
--- a/contrib/perl5/t/base/lex.t
+++ /dev/null
@@ -1,247 +0,0 @@
-#!./perl
-
-print "1..51\n";
-
-$x = 'x';
-
-print "#1 :$x: eq :x:\n";
-if ($x eq 'x') {print "ok 1\n";} else {print "not ok 1\n";}
-
-$x = $#; # this is the register $#
-
-if ($x eq '') {print "ok 2\n";} else {print "not ok 2\n";}
-
-$x = $#x;
-
-if ($x eq '-1') {print "ok 3\n";} else {print "not ok 3\n";}
-
-$x = '\\'; # ';
-
-if (length($x) == 1) {print "ok 4\n";} else {print "not ok 4\n";}
-
-eval 'while (0) {
- print "foo\n";
-}
-/^/ && (print "ok 5\n");
-';
-
-eval '$foo{1} / 1;';
-if (!$@) {print "ok 6\n";} else {print "not ok 6 $@\n";}
-
-eval '$foo = 123+123.4+123e4+123.4E5+123.4e+5+.12;';
-
-$foo = int($foo * 100 + .5);
-if ($foo eq 2591024652) {print "ok 7\n";} else {print "not ok 7 :$foo:\n";}
-
-print <<'EOF';
-ok 8
-EOF
-
-$foo = 'ok 9';
-print <<EOF;
-$foo
-EOF
-
-eval <<\EOE, print $@;
-print <<'EOF';
-ok 10
-EOF
-
-$foo = 'ok 11';
-print <<EOF;
-$foo
-EOF
-EOE
-
-print <<`EOS` . <<\EOF;
-echo ok 12
-EOS
-ok 13
-EOF
-
-print qq/ok 14\n/;
-print qq(ok 15\n);
-
-print qq
-[ok 16\n]
-;
-
-print q<ok 17
->;
-
-print <<; # Yow!
-ok 18
-
-# previous line intentionally left blank.
-
-print <<E1 eq "foo\n\n" ? "ok 19\n" : "not ok 19\n";
-@{[ <<E2 ]}
-foo
-E2
-E1
-
-print <<E1 eq "foo\n\n" ? "ok 20\n" : "not ok 20\n";
-@{[
- <<E2
-foo
-E2
-]}
-E1
-
-$foo = FOO;
-$bar = BAR;
-$foo{$bar} = BAZ;
-$ary[0] = ABC;
-
-print "$foo{$bar}" eq "BAZ" ? "ok 21\n" : "not ok 21\n";
-
-print "${foo}{$bar}" eq "FOO{BAR}" ? "ok 22\n" : "not ok 22\n";
-print "${foo{$bar}}" eq "BAZ" ? "ok 23\n" : "not ok 23\n";
-
-print "FOO:" =~ /$foo[:]/ ? "ok 24\n" : "not ok 24\n";
-print "ABC" =~ /^$ary[$A]$/ ? "ok 25\n" : "not ok 25\n";
-print "FOOZ" =~ /^$foo[$A-Z]$/ ? "ok 26\n" : "not ok 26\n";
-
-# MJD 19980425
-($X, @X) = qw(a b c d);
-print "d" =~ /^$X[-1]$/ ? "ok 27\n" : "not ok 27\n";
-print "a1" !~ /^$X[-1]$/ ? "ok 28\n" : "not ok 28\n";
-
-print (((q{{\{\(}} . q{{\)\}}}) eq '{{\(}{\)}}') ? "ok 29\n" : "not ok 29\n");
-
-
-$foo = "not ok 30\n";
-$foo =~ s/^not /substr(<<EOF, 0, 0)/e;
- Ignored
-EOF
-print $foo;
-
-# Tests for new extended control-character variables
-# MJD 19990227
-
-{ my $CX = "\cX";
- my $CXY ="\cXY";
- $ {$CX} = 17;
- $ {$CXY} = 23;
- if ($ {^XY} != 23) { print "not " }
- print "ok 31\n";
-
-# Does the syntax where we use the literal control character still work?
- if (eval "\$ {\cX}" != 17 or $@) { print "not " }
- print "ok 32\n";
-
- eval "\$\cN = 24"; # Literal control character
- if ($@ or ${"\cN"} != 24) { print "not " }
- print "ok 33\n";
- if ($^N != 24) { print "not " } # Control character escape sequence
- print "ok 34\n";
-
-# Does the old UNBRACED syntax still do what it used to?
- if ("$^XY" ne "17Y") { print "not " }
- print "ok 35\n";
-
- sub XX () { 6 }
- $ {"\cN\cXX"} = 119;
- $^N = 5; # This should be an unused ^Var.
- $N = 5;
- # The second caret here should be interpreted as an xor
- if (($^N^XX) != 3) { print "not " }
- print "ok 36\n";
-# if (($N ^ XX()) != 3) { print "not " }
-# print "ok 32\n";
-
- # These next two tests are trying to make sure that
- # $^FOO is always global; it doesn't make sense to `my' it.
- #
-
- eval 'my $^X;';
- print "not " unless index ($@, 'Can\'t use global $^X in "my"') > -1;
- print "ok 37\n";
-# print "($@)\n" if $@;
-
- eval 'my $ {^XYZ};';
- print "not " unless index ($@, 'Can\'t use global $^XYZ in "my"') > -1;
- print "ok 38\n";
-# print "($@)\n" if $@;
-
-# Now let's make sure that caret variables are all forced into the main package.
- package Someother;
- $^N = 'Someother';
- $ {^Nostril} = 'Someother 2';
- $ {^M} = 'Someother 3';
- package main;
- print "not " unless $^N eq 'Someother';
- print "ok 39\n";
- print "not " unless $ {^Nostril} eq 'Someother 2';
- print "ok 40\n";
- print "not " unless $ {^M} eq 'Someother 3';
- print "ok 41\n";
-
-
-}
-
-# see if eval '', s///e, and heredocs mix
-
-sub T {
- my ($where, $num) = @_;
- my ($p,$f,$l) = caller;
- print "# $p:$f:$l vs /$where/\nnot " unless "$p:$f:$l" =~ /$where/;
- print "ok $num\n";
-}
-
-my $test = 42;
-
-{
-# line 42 "plink"
- local $_ = "not ok ";
- eval q{
- s/^not /<<EOT/e and T '^main:\(eval \d+\):2$', $test++;
-# fuggedaboudit
-EOT
- print $_, $test++, "\n";
- T('^main:\(eval \d+\):6$', $test++);
-# line 1 "plunk"
- T('^main:plunk:1$', $test++);
- };
- print "# $@\nnot ok $test\n" if $@;
- T '^main:plink:53$', $test++;
-}
-
-# tests 47--51 start here
-# tests for new array interpolation semantics:
-# arrays now *always* interpolate into "..." strings.
-# 20000522 MJD (mjd@plover.com)
-{
- my $test = 47;
- eval(q(">@nosuch<" eq "><")) || print "# $@", "not ";
- print "ok $test\n";
- ++$test;
-
- # Look at this! This is going to be a common error in the future:
- eval(q("fred@example.com" eq "fred.com")) || print "# $@", "not ";
- print "ok $test\n";
- ++$test;
-
- # Let's make sure that normal array interpolation still works right
- # For some reason, this appears not to be tested anywhere else.
- my @a = (1,2,3);
- print +((">@a<" eq ">1 2 3<") ? '' : 'not '), "ok $test\n";
- ++$test;
-
- # Ditto.
- eval(q{@nosuch = ('a', 'b', 'c'); ">@nosuch<" eq ">a b c<"})
- || print "# $@", "not ";
- print "ok $test\n";
- ++$test;
-
- # This isn't actually a lex test, but it's testing the same feature
- sub makearray {
- my @array = ('fish', 'dog', 'carrot');
- *R::crackers = \@array;
- }
-
- eval(q{makearray(); ">@R::crackers<" eq ">fish dog carrot<"})
- || print "# $@", "not ";
- print "ok $test\n";
- ++$test;
-}
diff --git a/contrib/perl5/t/base/pat.t b/contrib/perl5/t/base/pat.t
deleted file mode 100755
index c689f45..0000000
--- a/contrib/perl5/t/base/pat.t
+++ /dev/null
@@ -1,11 +0,0 @@
-#!./perl
-
-# $RCSfile: pat.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:05 $
-
-print "1..2\n";
-
-# first test to see if we can run the tests.
-
-$_ = 'test';
-if (/^test/) { print "ok 1\n"; } else { print "not ok 1\n";}
-if (/^foo/) { print "not ok 2\n"; } else { print "ok 2\n";}
diff --git a/contrib/perl5/t/base/rs.t b/contrib/perl5/t/base/rs.t
deleted file mode 100755
index e470f3a..0000000
--- a/contrib/perl5/t/base/rs.t
+++ /dev/null
@@ -1,132 +0,0 @@
-#!./perl
-# Test $!
-
-print "1..14\n";
-
-$teststring = "1\n12\n123\n1234\n1234\n12345\n\n123456\n1234567\n";
-
-# Create our test datafile
-1 while unlink 'foo'; # in case junk left around
-rmdir 'foo';
-open TESTFILE, ">./foo" or die "error $! $^E opening";
-binmode TESTFILE;
-print TESTFILE $teststring;
-close TESTFILE;
-
-open TESTFILE, "<./foo";
-binmode TESTFILE;
-
-# Check the default $/
-$bar = <TESTFILE>;
-if ($bar eq "1\n") {print "ok 1\n";} else {print "not ok 1\n";}
-
-# explicitly set to \n
-$/ = "\n";
-$bar = <TESTFILE>;
-if ($bar eq "12\n") {print "ok 2\n";} else {print "not ok 2\n";}
-
-# Try a non line terminator
-$/ = 3;
-$bar = <TESTFILE>;
-if ($bar eq "123") {print "ok 3\n";} else {print "not ok 3\n";}
-
-# Eat the line terminator
-$/ = "\n";
-$bar = <TESTFILE>;
-
-# How about a larger terminator
-$/ = "34";
-$bar = <TESTFILE>;
-if ($bar eq "1234") {print "ok 4\n";} else {print "not ok 4\n";}
-
-# Eat the line terminator
-$/ = "\n";
-$bar = <TESTFILE>;
-
-# Does paragraph mode work?
-$/ = '';
-$bar = <TESTFILE>;
-if ($bar eq "1234\n12345\n\n") {print "ok 5\n";} else {print "not ok 5\n";}
-
-# Try slurping the rest of the file
-$/ = undef;
-$bar = <TESTFILE>;
-if ($bar eq "123456\n1234567\n") {print "ok 6\n";} else {print "not ok 6\n";}
-
-# try the record reading tests. New file so we don't have to worry about
-# the size of \n.
-close TESTFILE;
-unlink "./foo";
-open TESTFILE, ">./foo";
-print TESTFILE "1234567890123456789012345678901234567890";
-binmode TESTFILE;
-close TESTFILE;
-open TESTFILE, "<./foo";
-binmode TESTFILE;
-
-# Test straight number
-$/ = \2;
-$bar = <TESTFILE>;
-if ($bar eq "12") {print "ok 7\n";} else {print "not ok 7\n";}
-
-# Test stringified number
-$/ = \"2";
-$bar = <TESTFILE>;
-if ($bar eq "34") {print "ok 8\n";} else {print "not ok 8\n";}
-
-# Integer variable
-$foo = 2;
-$/ = \$foo;
-$bar = <TESTFILE>;
-if ($bar eq "56") {print "ok 9\n";} else {print "not ok 9\n";}
-
-# String variable
-$foo = "2";
-$/ = \$foo;
-$bar = <TESTFILE>;
-if ($bar eq "78") {print "ok 10\n";} else {print "not ok 10\n";}
-
-# Get rid of the temp file
-close TESTFILE;
-unlink "./foo";
-
-# Now for the tricky bit--full record reading
-if ($^O eq 'VMS') {
- # Create a temp file. We jump through these hoops 'cause CREATE really
- # doesn't like our methods for some reason.
- open FDLFILE, "> ./foo.fdl";
- print FDLFILE "RECORD\n FORMAT VARIABLE\n";
- close FDLFILE;
- open CREATEFILE, "> ./foo.com";
- print CREATEFILE '$ DEFINE/USER SYS$INPUT NL:', "\n";
- print CREATEFILE '$ DEFINE/USER SYS$OUTPUT NL:', "\n";
- print CREATEFILE '$ OPEN YOW []FOO.BAR/WRITE', "\n";
- print CREATEFILE '$ CLOSE YOW', "\n";
- print CREATEFILE "\$EXIT\n";
- close CREATEFILE;
- $throwaway = `\@\[\]foo`, "\n";
- open(TEMPFILE, ">./foo.bar") or print "# open failed $! $^E\n";
- print TEMPFILE "foo\nfoobar\nbaz\n";
- close TEMPFILE;
-
- open TESTFILE, "<./foo.bar";
- $/ = \10;
- $bar = <TESTFILE>;
- if ($bar eq "foo\n") {print "ok 11\n";} else {print "not ok 11\n";}
- $bar = <TESTFILE>;
- if ($bar eq "foobar\n") {print "ok 12\n";} else {print "not ok 12\n";}
- # can we do a short read?
- $/ = \2;
- $bar = <TESTFILE>;
- if ($bar eq "ba") {print "ok 13\n";} else {print "not ok 13\n";}
- # do we get the rest of the record?
- $bar = <TESTFILE>;
- if ($bar eq "z\n") {print "ok 14\n";} else {print "not ok 14\n";}
-
- close TESTFILE;
- 1 while unlink qw(foo.bar foo.com foo.fdl);
-} else {
- # Nobody else does this at the moment (well, maybe OS/390, but they can
- # put their own tests in) so we just punt
- foreach $test (11..14) {print "ok $test # skipped on non-VMS system\n"};
-}
diff --git a/contrib/perl5/t/base/term.t b/contrib/perl5/t/base/term.t
deleted file mode 100755
index 818eb71..0000000
--- a/contrib/perl5/t/base/term.t
+++ /dev/null
@@ -1,55 +0,0 @@
-#!./perl
-
-# $RCSfile: term.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:07 $
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Config;
-
-print "1..7\n";
-
-# check "" interpretation
-
-$x = "\n";
-# 10 is ASCII/Iso Latin, 21 is EBCDIC.
-if ($x eq chr(10) ||
- ($Config{ebcdic} eq 'define' && $x eq chr(21))) {print "ok 1\n";}
-else {print "not ok 1\n";}
-
-# check `` processing
-
-$x = `echo hi there`;
-if ($x eq "hi there\n") {print "ok 2\n";} else {print "not ok 2\n";}
-
-# check $#array
-
-$x[0] = 'foo';
-$x[1] = 'foo';
-$tmp = $#x;
-print "#3\t:$tmp: == :1:\n";
-if ($#x == '1') {print "ok 3\n";} else {print "not ok 3\n";}
-
-# check numeric literal
-
-$x = 1;
-if ($x == '1') {print "ok 4\n";} else {print "not ok 4\n";}
-
-$x = '1E2';
-if (($x | 1) == 101) {print "ok 5\n";} else {print "not ok 5\n";}
-
-# check <> pseudoliteral
-
-open(try, "/dev/null") || open(try,"nla0:") || (die "Can't open /dev/null.");
-if (<try> eq '') {
- print "ok 6\n";
-}
-else {
- print "not ok 6\n";
- die "/dev/null IS NOT A CHARACTER SPECIAL FILE!!!!\n" unless -c '/dev/null';
-}
-
-open(try, "harness") || (die "Can't open harness.");
-if (<try> ne '') {print "ok 7\n";} else {print "not ok 7\n";}
diff --git a/contrib/perl5/t/cmd/elsif.t b/contrib/perl5/t/cmd/elsif.t
deleted file mode 100755
index 7eace16..0000000
--- a/contrib/perl5/t/cmd/elsif.t
+++ /dev/null
@@ -1,25 +0,0 @@
-#!./perl
-
-# $RCSfile: elsif.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:08 $
-
-sub foo {
- if ($_[0] == 1) {
- 1;
- }
- elsif ($_[0] == 2) {
- 2;
- }
- elsif ($_[0] == 3) {
- 3;
- }
- else {
- 4;
- }
-}
-
-print "1..4\n";
-
-if (($x = &foo(1)) == 1) {print "ok 1\n";} else {print "not ok 1 '$x'\n";}
-if (($x = &foo(2)) == 2) {print "ok 2\n";} else {print "not ok 2 '$x'\n";}
-if (($x = &foo(3)) == 3) {print "ok 3\n";} else {print "not ok 3 '$x'\n";}
-if (($x = &foo(4)) == 4) {print "ok 4\n";} else {print "not ok 4 '$x'\n";}
diff --git a/contrib/perl5/t/cmd/for.t b/contrib/perl5/t/cmd/for.t
deleted file mode 100755
index d70af57..0000000
--- a/contrib/perl5/t/cmd/for.t
+++ /dev/null
@@ -1,57 +0,0 @@
-#!./perl
-
-print "1..10\n";
-
-for ($i = 0; $i <= 10; $i++) {
- $x[$i] = $i;
-}
-$y = $x[10];
-print "#1 :$y: eq :10:\n";
-$y = join(' ', @x);
-print "#1 :$y: eq :0 1 2 3 4 5 6 7 8 9 10:\n";
-if (join(' ', @x) eq '0 1 2 3 4 5 6 7 8 9 10') {
- print "ok 1\n";
-} else {
- print "not ok 1\n";
-}
-
-$i = $c = 0;
-for (;;) {
- $c++;
- last if $i++ > 10;
-}
-if ($c == 12) {print "ok 2\n";} else {print "not ok 2\n";}
-
-$foo = 3210;
-@ary = (1,2,3,4,5);
-foreach $foo (@ary) {
- $foo *= 2;
-}
-if (join('',@ary) eq '246810') {print "ok 3\n";} else {print "not ok 3\n";}
-
-for (@ary) {
- s/(.*)/ok $1\n/;
-}
-
-print $ary[1];
-
-# test for internal scratch array generation
-# this also tests that $foo was restored to 3210 after test 3
-for (split(' ','a b c d e')) {
- $foo .= $_;
-}
-if ($foo eq '3210abcde') {print "ok 5\n";} else {print "not ok 5 $foo\n";}
-
-foreach $foo (("ok 6\n","ok 7\n")) {
- print $foo;
-}
-
-sub foo {
- for $i (1..5) {
- return $i if $_[0] == $i;
- }
-}
-
-print foo(1) == 1 ? "ok" : "not ok", " 8\n";
-print foo(2) == 2 ? "ok" : "not ok", " 9\n";
-print foo(5) == 5 ? "ok" : "not ok", " 10\n";
diff --git a/contrib/perl5/t/cmd/mod.t b/contrib/perl5/t/cmd/mod.t
deleted file mode 100755
index e2ab777..0000000
--- a/contrib/perl5/t/cmd/mod.t
+++ /dev/null
@@ -1,54 +0,0 @@
-#!./perl
-
-# $RCSfile: mod.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:11 $
-
-print "1..12\n";
-
-print "ok 1\n" if 1;
-print "not ok 1\n" unless 1;
-
-print "ok 2\n" unless 0;
-print "not ok 2\n" if 0;
-
-1 && (print "not ok 3\n") if 0;
-1 && (print "ok 3\n") if 1;
-0 || (print "not ok 4\n") if 0;
-0 || (print "ok 4\n") if 1;
-
-$x = 0;
-do {$x[$x] = $x;} while ($x++) < 10;
-if (join(' ',@x) eq '0 1 2 3 4 5 6 7 8 9 10') {
- print "ok 5\n";
-} else {
- print "not ok 5 @x\n";
-}
-
-$x = 15;
-$x = 10 while $x < 10;
-if ($x == 15) {print "ok 6\n";} else {print "not ok 6\n";}
-
-$y[$_] = $_ * 2 foreach @x;
-if (join(' ',@y) eq '0 2 4 6 8 10 12 14 16 18 20') {
- print "ok 7\n";
-} else {
- print "not ok 7 @y\n";
-}
-
-open(foo,'./TEST') || open(foo,'TEST') || open(foo,'t/TEST');
-$x = 0;
-$x++ while <foo>;
-print $x > 50 && $x < 1000 ? "ok 8\n" : "not ok 8\n";
-
-$x = -0.5;
-print "not " if scalar($x) < 0 and $x >= 0;
-print "ok 9\n";
-
-print "not " unless (-(-$x) < 0) == ($x < 0);
-print "ok 10\n";
-
-print "ok 11\n" if $x < 0;
-print "not ok 11\n" unless $x < 0;
-
-print "ok 12\n" unless $x > 0;
-print "not ok 12\n" if $x > 0;
-
diff --git a/contrib/perl5/t/cmd/subval.t b/contrib/perl5/t/cmd/subval.t
deleted file mode 100755
index 3c60690..0000000
--- a/contrib/perl5/t/cmd/subval.t
+++ /dev/null
@@ -1,186 +0,0 @@
-#!./perl
-
-# $RCSfile: subval.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:13 $
-
-sub foo1 {
- 'true1';
- if ($_[0]) { 'true2'; }
-}
-
-sub foo2 {
- 'true1';
- if ($_[0]) { return 'true2'; } else { return 'true3'; }
- 'true0';
-}
-
-sub foo3 {
- 'true1';
- unless ($_[0]) { 'true2'; }
-}
-
-sub foo4 {
- 'true1';
- unless ($_[0]) { 'true2'; } else { 'true3'; }
-}
-
-sub foo5 {
- 'true1';
- 'true2' if $_[0];
-}
-
-sub foo6 {
- 'true1';
- 'true2' unless $_[0];
-}
-
-print "1..36\n";
-
-if (&foo1(0) eq '0') {print "ok 1\n";} else {print "not ok 1 $foo\n";}
-if (&foo1(1) eq 'true2') {print "ok 2\n";} else {print "not ok 2\n";}
-if (&foo2(0) eq 'true3') {print "ok 3\n";} else {print "not ok 3\n";}
-if (&foo2(1) eq 'true2') {print "ok 4\n";} else {print "not ok 4\n";}
-
-if (&foo3(0) eq 'true2') {print "ok 5\n";} else {print "not ok 5\n";}
-if (&foo3(1) eq '1') {print "ok 6\n";} else {print "not ok 6\n";}
-if (&foo4(0) eq 'true2') {print "ok 7\n";} else {print "not ok 7\n";}
-if (&foo4(1) eq 'true3') {print "ok 8\n";} else {print "not ok 8\n";}
-
-if (&foo5(0) eq '0') {print "ok 9\n";} else {print "not ok 9\n";}
-if (&foo5(1) eq 'true2') {print "ok 10\n";} else {print "not ok 10\n";}
-if (&foo6(0) eq 'true2') {print "ok 11\n";} else {print "not ok 11\n";}
-if (&foo6(1) eq '1') {print "ok 12\n";} else {print "not ok 12 $x\n";}
-
-# Now test to see that recursion works using a Fibonacci number generator
-
-sub fib {
- my($arg) = @_;
- my($foo);
- $level++;
- if ($arg <= 2) {
- $foo = 1;
- }
- else {
- $foo = &fib($arg-1) + &fib($arg-2);
- }
- $level--;
- $foo;
-}
-
-@good = (0,1,1,2,3,5,8,13,21,34,55,89);
-
-for ($i = 1; $i <= 10; $i++) {
- $foo = $i + 12;
- if (&fib($i) == $good[$i]) {
- print "ok $foo\n";
- }
- else {
- print "not ok $foo\n";
- }
-}
-
-sub ary1 {
- (1,2,3);
-}
-
-print &ary1 eq 3 ? "ok 23\n" : "not ok 23\n";
-
-print join(':',&ary1) eq '1:2:3' ? "ok 24\n" : "not ok 24\n";
-
-sub ary2 {
- do {
- return (1,2,3);
- (3,2,1);
- };
- 0;
-}
-
-print &ary2 eq 3 ? "ok 25\n" : "not ok 25\n";
-
-$x = join(':',&ary2);
-print $x eq '1:2:3' ? "ok 26\n" : "not ok 26 $x\n";
-
-sub somesub {
- local($num,$P,$F,$L) = @_;
- ($p,$f,$l) = caller;
- print "$p:$f:$l" eq "$P:$F:$L" ? "ok $num\n" : "not ok $num $p:$f:$l ne $P:$F:$L\n";
-}
-
-&somesub(27, 'main', __FILE__, __LINE__);
-
-package foo;
-&main'somesub(28, 'foo', __FILE__, __LINE__);
-
-package main;
-$i = 28;
-open(FOO,">Cmd_subval.tmp");
-print FOO "blah blah\n";
-close FOO;
-
-&file_main(*F);
-close F;
-&info_main;
-
-&file_package(*F);
-close F;
-&info_package;
-
-unlink 'Cmd_subval.tmp';
-
-sub file_main {
- local(*F) = @_;
-
- open(F, 'Cmd_subval.tmp') || die "can't open\n";
- $i++;
- eof F ? print "not ok $i\n" : print "ok $i\n";
-}
-
-sub info_main {
- local(*F);
-
- open(F, 'Cmd_subval.tmp') || die "test: can't open\n";
- $i++;
- eof F ? print "not ok $i\n" : print "ok $i\n";
- &iseof(*F);
- close F;
-}
-
-sub iseof {
- local(*UNIQ) = @_;
-
- $i++;
- eof UNIQ ? print "(not ok $i)\n" : print "ok $i\n";
-}
-
-{package foo;
-
- sub main'file_package {
- local(*F) = @_;
-
- open(F, 'Cmd_subval.tmp') || die "can't open\n";
- $main'i++;
- eof F ? print "not ok $main'i\n" : print "ok $main'i\n";
- }
-
- sub main'info_package {
- local(*F);
-
- open(F, 'Cmd_subval.tmp') || die "can't open\n";
- $main'i++;
- eof F ? print "not ok $main'i\n" : print "ok $main'i\n";
- &iseof(*F);
- }
-
- sub iseof {
- local(*UNIQ) = @_;
-
- $main'i++;
- eof UNIQ ? print "not ok $main'i\n" : print "ok $main'i\n";
- }
-}
-
-sub autov { $_[0] = 23 };
-
-my $href = {};
-print keys %$href ? 'not ' : '', "ok 35\n";
-autov($href->{b});
-print join(':', %$href) eq 'b:23' ? '' : 'not ', "ok 36\n";
diff --git a/contrib/perl5/t/cmd/switch.t b/contrib/perl5/t/cmd/switch.t
deleted file mode 100755
index faa5de4..0000000
--- a/contrib/perl5/t/cmd/switch.t
+++ /dev/null
@@ -1,75 +0,0 @@
-#!./perl
-
-# $RCSfile: switch.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:14 $
-
-print "1..18\n";
-
-sub foo1 {
- $_ = shift(@_);
- $a = 0;
- until ($a++) {
- next if $_ eq 1;
- next if $_ eq 2;
- next if $_ eq 3;
- next if $_ eq 4;
- return 20;
- }
- continue {
- return $_;
- }
-}
-
-print do foo1(0) == 20 ? "ok 1\n" : "not ok 1\n";
-print do foo1(1) == 1 ? "ok 2\n" : "not ok 2\n";
-print do foo1(2) == 2 ? "ok 3\n" : "not ok 3\n";
-print do foo1(3) == 3 ? "ok 4\n" : "not ok 4\n";
-print do foo1(4) == 4 ? "ok 5\n" : "not ok 5\n";
-print do foo1(5) == 20 ? "ok 6\n" : "not ok 6\n";
-
-sub foo2 {
- $_ = shift(@_);
- {
- last if $_ == 1;
- last if $_ == 2;
- last if $_ == 3;
- last if $_ == 4;
- }
- continue {
- return 20;
- }
- return $_;
-}
-
-print do foo2(0) == 20 ? "ok 7\n" : "not ok 7\n";
-print do foo2(1) == 1 ? "ok 8\n" : "not ok 8\n";
-print do foo2(2) == 2 ? "ok 9\n" : "not ok 9\n";
-print do foo2(3) == 3 ? "ok 10\n" : "not ok 10\n";
-print do foo2(4) == 4 ? "ok 11\n" : "not ok 11\n";
-print do foo2(5) == 20 ? "ok 12\n" : "not ok 12\n";
-
-sub foo3 {
- $_ = shift(@_);
- if (/^1/) {
- return 1;
- }
- elsif (/^2/) {
- return 2;
- }
- elsif (/^3/) {
- return 3;
- }
- elsif (/^4/) {
- return 4;
- }
- else {
- return 20;
- }
- return 40;
-}
-
-print do foo3(0) == 20 ? "ok 13\n" : "not ok 13\n";
-print do foo3(1) == 1 ? "ok 14\n" : "not ok 14\n";
-print do foo3(2) == 2 ? "ok 15\n" : "not ok 15\n";
-print do foo3(3) == 3 ? "ok 16\n" : "not ok 16\n";
-print do foo3(4) == 4 ? "ok 17\n" : "not ok 17\n";
-print do foo3(5) == 20 ? "ok 18\n" : "not ok 18\n";
diff --git a/contrib/perl5/t/cmd/while.t b/contrib/perl5/t/cmd/while.t
deleted file mode 100755
index ecc15ed..0000000
--- a/contrib/perl5/t/cmd/while.t
+++ /dev/null
@@ -1,179 +0,0 @@
-#!./perl
-
-print "1..22\n";
-
-open (tmp,'>Cmd_while.tmp') || die "Can't create Cmd_while.tmp.";
-print tmp "tvi925\n";
-print tmp "tvi920\n";
-print tmp "vt100\n";
-print tmp "Amiga\n";
-print tmp "paper\n";
-close tmp;
-
-# test "last" command
-
-open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
-while (<fh>) {
- last if /vt100/;
-}
-if (!eof && /vt100/) {print "ok 1\n";} else {print "not ok 1 $_\n";}
-
-# test "next" command
-
-$bad = '';
-open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
-while (<fh>) {
- next if /vt100/;
- $bad = 1 if /vt100/;
-}
-if (!eof || /vt100/ || $bad) {print "not ok 2\n";} else {print "ok 2\n";}
-
-# test "redo" command
-
-$bad = '';
-open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
-while (<fh>) {
- if (s/vt100/VT100/g) {
- s/VT100/Vt100/g;
- redo;
- }
- $bad = 1 if /vt100/;
- $bad = 1 if /VT100/;
-}
-if (!eof || $bad) {print "not ok 3\n";} else {print "ok 3\n";}
-
-# now do the same with a label and a continue block
-
-# test "last" command
-
-$badcont = '';
-open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
-line: while (<fh>) {
- if (/vt100/) {last line;}
-} continue {
- $badcont = 1 if /vt100/;
-}
-if (!eof && /vt100/) {print "ok 4\n";} else {print "not ok 4\n";}
-if (!$badcont) {print "ok 5\n";} else {print "not ok 5\n";}
-
-# test "next" command
-
-$bad = '';
-$badcont = 1;
-open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
-entry: while (<fh>) {
- next entry if /vt100/;
- $bad = 1 if /vt100/;
-} continue {
- $badcont = '' if /vt100/;
-}
-if (!eof || /vt100/ || $bad) {print "not ok 6\n";} else {print "ok 6\n";}
-if (!$badcont) {print "ok 7\n";} else {print "not ok 7\n";}
-
-# test "redo" command
-
-$bad = '';
-$badcont = '';
-open(fh,'Cmd_while.tmp') || die "Can't open Cmd_while.tmp.";
-loop: while (<fh>) {
- if (s/vt100/VT100/g) {
- s/VT100/Vt100/g;
- redo loop;
- }
- $bad = 1 if /vt100/;
- $bad = 1 if /VT100/;
-} continue {
- $badcont = 1 if /vt100/;
-}
-if (!eof || $bad) {print "not ok 8\n";} else {print "ok 8\n";}
-if (!$badcont) {print "ok 9\n";} else {print "not ok 9\n";}
-
-close(fh) || die "Can't close Cmd_while.tmp.";
-unlink 'Cmd_while.tmp' || `/bin/rm Cmd_While.tmp`;
-
-#$x = 0;
-#while (1) {
-# if ($x > 1) {last;}
-# next;
-#} continue {
-# if ($x++ > 10) {last;}
-# next;
-#}
-#
-#if ($x < 10) {print "ok 10\n";} else {print "not ok 10\n";}
-
-$i = 9;
-{
- $i++;
-}
-print "ok $i\n";
-
-# Check curpm is reset when jumping out of a scope
-'abc' =~ /b/;
-WHILE:
-while (1) {
- $i++;
- print "#$`,$&,$',\nnot " unless $` . $& . $' eq "abc";
- print "ok $i\n";
- { # Localize changes to $` and friends
- 'end' =~ /end/;
- redo WHILE if $i == 11;
- next WHILE if $i == 12;
- # 13 do a normal loop
- last WHILE if $i == 14;
- }
-}
-$i++;
-print "not " unless $` . $& . $' eq "abc";
-print "ok $i\n";
-
-# check that scope cleanup happens right when there's a continue block
-{
- my $var = 16;
- while (my $i = ++$var) {
- next if $i == 17;
- last if $i > 17;
- my $i = 0;
- }
- continue {
- print "ok ", $var-1, "\nok $i\n";
- }
-}
-
-{
- local $l = 18;
- {
- local $l = 0
- }
- continue {
- print "ok $l\n"
- }
-}
-
-{
- local $l = 19;
- my $x = 0;
- while (!$x++) {
- local $l = 0
- }
- continue {
- print "ok $l\n"
- }
-}
-
-$i = 20;
-{
- while (1) {
- my $x;
- print $x if defined $x;
- $x = "not ";
- print "ok $i\n"; ++$i;
- if ($i == 21) {
- next;
- }
- last;
- }
- continue {
- print "ok $i\n"; ++$i;
- }
-}
diff --git a/contrib/perl5/t/comp/bproto.t b/contrib/perl5/t/comp/bproto.t
deleted file mode 100755
index 70748be..0000000
--- a/contrib/perl5/t/comp/bproto.t
+++ /dev/null
@@ -1,44 +0,0 @@
-#!./perl
-#
-# check if builtins behave as prototyped
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..10\n";
-
-my $i = 1;
-
-sub foo {}
-my $bar = "bar";
-
-sub test_too_many {
- eval $_[0];
- print "not " unless $@ =~ /^Too many arguments/;
- printf "ok %d\n",$i++;
-}
-
-sub test_no_error {
- eval $_[0];
- print "not " if $@;
- printf "ok %d\n",$i++;
-}
-
-test_too_many($_) for split /\n/,
-q[ defined(&foo, $bar);
- undef(&foo, $bar);
- uc($bar,$bar);
-];
-
-test_no_error($_) for split /\n/,
-q[ scalar(&foo,$bar);
- defined &foo, &foo, &foo;
- undef &foo, $bar;
- uc $bar,$bar;
- grep(not($bar), $bar);
- grep(not($bar, $bar), $bar);
- grep((not $bar, $bar, $bar), $bar);
-];
diff --git a/contrib/perl5/t/comp/cmdopt.t b/contrib/perl5/t/comp/cmdopt.t
deleted file mode 100755
index 3f701a4..0000000
--- a/contrib/perl5/t/comp/cmdopt.t
+++ /dev/null
@@ -1,90 +0,0 @@
-#!./perl
-
-# $RCSfile: cmdopt.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:17 $
-
-print "1..44\n";
-
-# test the optimization of constants
-
-if (1) { print "ok 1\n";} else { print "not ok 1\n";}
-unless (0) { print "ok 2\n";} else { print "not ok 2\n";}
-
-if (0) { print "not ok 3\n";} else { print "ok 3\n";}
-unless (1) { print "not ok 4\n";} else { print "ok 4\n";}
-
-unless (!1) { print "ok 5\n";} else { print "not ok 5\n";}
-if (!0) { print "ok 6\n";} else { print "not ok 6\n";}
-
-unless (!0) { print "not ok 7\n";} else { print "ok 7\n";}
-if (!1) { print "not ok 8\n";} else { print "ok 8\n";}
-
-$x = 1;
-if (1 && $x) { print "ok 9\n";} else { print "not ok 9\n";}
-if (0 && $x) { print "not ok 10\n";} else { print "ok 10\n";}
-$x = '';
-if (1 && $x) { print "not ok 11\n";} else { print "ok 11\n";}
-if (0 && $x) { print "not ok 12\n";} else { print "ok 12\n";}
-
-$x = 1;
-if (1 || $x) { print "ok 13\n";} else { print "not ok 13\n";}
-if (0 || $x) { print "ok 14\n";} else { print "not ok 14\n";}
-$x = '';
-if (1 || $x) { print "ok 15\n";} else { print "not ok 15\n";}
-if (0 || $x) { print "not ok 16\n";} else { print "ok 16\n";}
-
-
-# test the optimization of variables
-
-$x = 1;
-if ($x) { print "ok 17\n";} else { print "not ok 17\n";}
-unless ($x) { print "not ok 18\n";} else { print "ok 18\n";}
-
-$x = '';
-if ($x) { print "not ok 19\n";} else { print "ok 19\n";}
-unless ($x) { print "ok 20\n";} else { print "not ok 20\n";}
-
-# test optimization of string operations
-
-$a = 'a';
-if ($a eq 'a') { print "ok 21\n";} else { print "not ok 21\n";}
-if ($a ne 'a') { print "not ok 22\n";} else { print "ok 22\n";}
-
-if ($a =~ /a/) { print "ok 23\n";} else { print "not ok 23\n";}
-if ($a !~ /a/) { print "not ok 24\n";} else { print "ok 24\n";}
-# test interaction of logicals and other operations
-
-$a = 'a';
-$x = 1;
-if ($a eq 'a' and $x) { print "ok 25\n";} else { print "not ok 25\n";}
-if ($a ne 'a' and $x) { print "not ok 26\n";} else { print "ok 26\n";}
-$x = '';
-if ($a eq 'a' and $x) { print "not ok 27\n";} else { print "ok 27\n";}
-if ($a ne 'a' and $x) { print "not ok 28\n";} else { print "ok 28\n";}
-
-$x = 1;
-if ($a eq 'a' or $x) { print "ok 29\n";} else { print "not ok 29\n";}
-if ($a ne 'a' or $x) { print "ok 30\n";} else { print "not ok 30\n";}
-$x = '';
-if ($a eq 'a' or $x) { print "ok 31\n";} else { print "not ok 31\n";}
-if ($a ne 'a' or $x) { print "not ok 32\n";} else { print "ok 32\n";}
-
-$x = 1;
-if ($a =~ /a/ && $x) { print "ok 33\n";} else { print "not ok 33\n";}
-if ($a !~ /a/ && $x) { print "not ok 34\n";} else { print "ok 34\n";}
-$x = '';
-if ($a =~ /a/ && $x) { print "not ok 35\n";} else { print "ok 35\n";}
-if ($a !~ /a/ && $x) { print "not ok 36\n";} else { print "ok 36\n";}
-
-$x = 1;
-if ($a =~ /a/ || $x) { print "ok 37\n";} else { print "not ok 37\n";}
-if ($a !~ /a/ || $x) { print "ok 38\n";} else { print "not ok 38\n";}
-$x = '';
-if ($a =~ /a/ || $x) { print "ok 39\n";} else { print "not ok 39\n";}
-if ($a !~ /a/ || $x) { print "not ok 40\n";} else { print "ok 40\n";}
-
-$x = 1;
-if ($a eq 'a' xor $x) { print "not ok 41\n";} else { print "ok 41\n";}
-if ($a ne 'a' xor $x) { print "ok 42\n";} else { print "not ok 42\n";}
-$x = '';
-if ($a eq 'a' xor $x) { print "ok 43\n";} else { print "not ok 43\n";}
-if ($a ne 'a' xor $x) { print "not ok 44\n";} else { print "ok 44\n";}
diff --git a/contrib/perl5/t/comp/colon.t b/contrib/perl5/t/comp/colon.t
deleted file mode 100755
index d2c64fe..0000000
--- a/contrib/perl5/t/comp/colon.t
+++ /dev/null
@@ -1,138 +0,0 @@
-#!./perl
-
-#
-# Ensure that syntax using colons (:) is parsed correctly.
-# The tests are done on the following tokens (by default):
-# ABC LABEL XYZZY m q qq qw qx s tr y AUTOLOAD and alarm
-# -- Robin Barker <rmb@cise.npl.co.uk>
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-
-$_ = ''; # to avoid undef warning on m// etc.
-
-sub ok {
- my($test,$ok) = @_;
- print "not " unless $ok;
- print "ok $test\n";
-}
-
-$SIG{__WARN__} = sub { 1; }; # avoid some spurious warnings
-
-print "1..25\n";
-
-ok 1, (eval "package ABC; sub zyx {1}; 1;" and
- eval "ABC::zyx" and
- not eval "ABC:: eq ABC||" and
- not eval "ABC::: >= 0");
-
-ok 2, (eval "package LABEL; sub zyx {1}; 1;" and
- eval "LABEL::zyx" and
- not eval "LABEL:: eq LABEL||" and
- not eval "LABEL::: >= 0");
-
-ok 3, (eval "package XYZZY; sub zyx {1}; 1;" and
- eval "XYZZY::zyx" and
- not eval "XYZZY:: eq XYZZY||" and
- not eval "XYZZY::: >= 0");
-
-ok 4, (eval "package m; sub zyx {1}; 1;" and
- not eval "m::zyx" and
- eval "m:: eq m||" and
- not eval "m::: >= 0");
-
-ok 5, (eval "package q; sub zyx {1}; 1;" and
- not eval "q::zyx" and
- eval "q:: eq q||" and
- not eval "q::: >= 0");
-
-ok 6, (eval "package qq; sub zyx {1}; 1;" and
- not eval "qq::zyx" and
- eval "qq:: eq qq||" and
- not eval "qq::: >= 0");
-
-ok 7, (eval "package qw; sub zyx {1}; 1;" and
- not eval "qw::zyx" and
- eval "qw:: eq qw||" and
- not eval "qw::: >= 0");
-
-ok 8, (eval "package qx; sub zyx {1}; 1;" and
- not eval "qx::zyx" and
- eval "qx:: eq qx||" and
- not eval "qx::: >= 0");
-
-ok 9, (eval "package s; sub zyx {1}; 1;" and
- not eval "s::zyx" and
- not eval "s:: eq s||" and
- eval "s::: >= 0");
-
-ok 10, (eval "package tr; sub zyx {1}; 1;" and
- not eval "tr::zyx" and
- not eval "tr:: eq tr||" and
- eval "tr::: >= 0");
-
-ok 11, (eval "package y; sub zyx {1}; 1;" and
- not eval "y::zyx" and
- not eval "y:: eq y||" and
- eval "y::: >= 0");
-
-ok 12, (eval "ABC:1" and
- not eval "ABC:echo: eq ABC|echo|" and
- not eval "ABC:echo:ohce: >= 0");
-
-ok 13, (eval "LABEL:1" and
- not eval "LABEL:echo: eq LABEL|echo|" and
- not eval "LABEL:echo:ohce: >= 0");
-
-ok 14, (eval "XYZZY:1" and
- not eval "XYZZY:echo: eq XYZZY|echo|" and
- not eval "XYZZY:echo:ohce: >= 0");
-
-ok 15, (not eval "m:1" and
- eval "m:echo: eq m|echo|" and
- not eval "m:echo:ohce: >= 0");
-
-ok 16, (not eval "q:1" and
- eval "q:echo: eq q|echo|" and
- not eval "q:echo:ohce: >= 0");
-
-ok 17, (not eval "qq:1" and
- eval "qq:echo: eq qq|echo|" and
- not eval "qq:echo:ohce: >= 0");
-
-ok 18, (not eval "qw:1" and
- eval "qw:echo: eq qw|echo|" and
- not eval "qw:echo:ohce: >= 0");
-
-ok 19, (not eval "qx:1" and
- eval "qx:echo 1: eq qx|echo 1|" and # echo without args may warn
- not eval "qx:echo:ohce: >= 0");
-
-ok 20, (not eval "s:1" and
- not eval "s:echo: eq s|echo|" and
- eval "s:echo:ohce: >= 0");
-
-ok 21, (not eval "tr:1" and
- not eval "tr:echo: eq tr|echo|" and
- eval "tr:echo:ohce: >= 0");
-
-ok 22, (not eval "y:1" and
- not eval "y:echo: eq y|echo|" and
- eval "y:echo:ohce: >= 0");
-
-ok 23, (eval "AUTOLOAD:1" and
- not eval "AUTOLOAD:echo: eq AUTOLOAD|echo|" and
- not eval "AUTOLOAD:echo:ohce: >= 0");
-
-ok 24, (eval "and:1" and
- not eval "and:echo: eq and|echo|" and
- not eval "and:echo:ohce: >= 0");
-
-ok 25, (eval "alarm:1" and
- not eval "alarm:echo: eq alarm|echo|" and
- not eval "alarm:echo:ohce: >= 0");
diff --git a/contrib/perl5/t/comp/cpp.aux b/contrib/perl5/t/comp/cpp.aux
deleted file mode 100755
index 536268a..0000000
--- a/contrib/perl5/t/comp/cpp.aux
+++ /dev/null
@@ -1,35 +0,0 @@
-#!./perl -P
-
-print "1..3\n";
-
-#define MESS "ok 1\n"
-print MESS;
-
-#ifdef MESS
- print "ok 2\n";
-#else
- print "not ok 2\n";
-#endif
-
-open(TRY,">Comp.cpp.tmp") || die "Can't open temp perl file.";
-
-($prog = <<'END') =~ s/X//g;
-X$ok = "not ok 3\n";
-X#include "Comp.cpp.inc"
-X#ifdef OK
-X$ok = OK;
-X#endif
-Xprint $ok;
-END
-print TRY $prog;
-close TRY;
-
-open(TRY,">Comp.cpp.inc") || (die "Can't open temp include file.");
-print TRY '#define OK "ok 3\n"' . "\n";
-close TRY;
-
-$pwd=`pwd`;
-$pwd =~ s/\n//;
-$x = `./perl -P Comp.cpp.tmp`;
-print $x;
-unlink "Comp.cpp.tmp", "Comp.cpp.inc";
diff --git a/contrib/perl5/t/comp/cpp.t b/contrib/perl5/t/comp/cpp.t
deleted file mode 100755
index 5b061ee..0000000
--- a/contrib/perl5/t/comp/cpp.t
+++ /dev/null
@@ -1,18 +0,0 @@
-#!./perl
-
-# $RCSfile: cpp.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:18 $
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Config;
-if ( $^O eq 'MSWin32' or
- ($Config{'cppstdin'} =~ /\bcppstdin\b/) and
- ( ! -x $Config{'binexp'} . "/cppstdin") ) {
- print "1..0 # Skip: \$Config{cppstdin} unavailable\n";
- exit; # Cannot test till after install, alas.
-}
-
-system "./perl -P comp/cpp.aux"
diff --git a/contrib/perl5/t/comp/decl.t b/contrib/perl5/t/comp/decl.t
deleted file mode 100755
index 32b8509..0000000
--- a/contrib/perl5/t/comp/decl.t
+++ /dev/null
@@ -1,49 +0,0 @@
-#!./perl
-
-# $RCSfile: decl.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:19 $
-
-# check to see if subroutine declarations work everwhere
-
-sub one {
- print "ok 1\n";
-}
-format one =
-ok 5
-.
-
-print "1..7\n";
-
-do one();
-do two();
-
-sub two {
- print "ok 2\n";
-}
-format two =
-@<<<
-$foo
-.
-
-if ($x eq $x) {
- sub three {
- print "ok 3\n";
- }
- do three();
-}
-
-do four();
-$~ = 'one';
-write;
-$~ = 'two';
-$foo = "ok 6";
-write;
-$~ = 'three';
-write;
-
-format three =
-ok 7
-.
-
-sub four {
- print "ok 4\n";
-}
diff --git a/contrib/perl5/t/comp/multiline.t b/contrib/perl5/t/comp/multiline.t
deleted file mode 100755
index ed418b8..0000000
--- a/contrib/perl5/t/comp/multiline.t
+++ /dev/null
@@ -1,46 +0,0 @@
-#!./perl
-
-# $RCSfile: multiline.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:20 $
-
-print "1..5\n";
-
-open(try,'>Comp.try') || (die "Can't open temp file.");
-
-$x = 'now is the time
-for all good men
-to come to.
-
-
-!
-
-';
-
-$y = 'now is the time' . "\n" .
-'for all good men' . "\n" .
-'to come to.' . "\n\n\n!\n\n";
-
-if ($x eq $y) {print "ok 1\n";} else {print "not ok 1\n";}
-
-print try $x;
-close try;
-
-open(try,'Comp.try') || (die "Can't reopen temp file.");
-$count = 0;
-$z = '';
-while (<try>) {
- $z .= $_;
- $count = $count + 1;
-}
-
-if ($z eq $y) {print "ok 2\n";} else {print "not ok 2\n";}
-
-if ($count == 7) {print "ok 3\n";} else {print "not ok 3\n";}
-
-$_ = ($^O eq 'MSWin32') ? `type Comp.try` : `cat Comp.try`;
-
-if (/.*\n.*\n.*\n$/) {print "ok 4\n";} else {print "not ok 4\n";}
-
-close(try) || (die "Can't close temp file.");
-unlink 'Comp.try' || `/bin/rm -f Comp.try`;
-
-if ($_ eq $y) {print "ok 5\n";} else {print "not ok 5\n";}
diff --git a/contrib/perl5/t/comp/package.t b/contrib/perl5/t/comp/package.t
deleted file mode 100755
index 4982256..0000000
--- a/contrib/perl5/t/comp/package.t
+++ /dev/null
@@ -1,53 +0,0 @@
-#!./perl
-
-print "1..8\n";
-
-$blurfl = 123;
-$foo = 3;
-
-package xyz;
-
-$bar = 4;
-
-{
- package ABC;
- $blurfl = 5;
- $main'a = $'b;
-}
-
-$ABC'dyick = 6;
-
-$xyz = 2;
-
-$main = join(':', sort(keys %main::));
-$xyz = join(':', sort(keys %xyz::));
-$ABC = join(':', sort(keys %ABC::));
-
-if ('a' lt 'A') {
- print $xyz eq 'bar:main:xyz:ABC' ? "ok 1\n" : "not ok 1 '$xyz'\n";
-} else {
- print $xyz eq 'ABC:bar:main:xyz' ? "ok 1\n" : "not ok 1 '$xyz'\n";
-}
-print $ABC eq 'blurfl:dyick' ? "ok 2\n" : "not ok 2 '$ABC'\n";
-print $main'blurfl == 123 ? "ok 3\n" : "not ok 3\n";
-
-package ABC;
-
-print $blurfl == 5 ? "ok 4\n" : "not ok 4\n";
-eval 'print $blurfl == 5 ? "ok 5\n" : "not ok 5\n";';
-eval 'package main; print $blurfl == 123 ? "ok 6\n" : "not ok 6\n";';
-print $blurfl == 5 ? "ok 7\n" : "not ok 7\n";
-
-package main;
-
-sub c { caller(0) }
-
-sub foo {
- my $s = shift;
- if ($s) {
- package PQR;
- main::c();
- }
-}
-
-print((foo(1))[0] eq 'PQR' ? "ok 8\n" : "not ok 8\n");
diff --git a/contrib/perl5/t/comp/proto.t b/contrib/perl5/t/comp/proto.t
deleted file mode 100755
index 99dd3ea..0000000
--- a/contrib/perl5/t/comp/proto.t
+++ /dev/null
@@ -1,498 +0,0 @@
-#!./perl
-#
-# Contributed by Graham Barr <Graham.Barr@tiuk.ti.com>
-#
-# So far there are tests for the following prototypes.
-# none, () ($) ($@) ($%) ($;$) (&) (&\@) (&@) (%) (\%) (\@)
-#
-# It is impossible to test every prototype that can be specified, but
-# we should test as many as we can.
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-
-print "1..122\n";
-
-my $i = 1;
-
-sub testing (&$) {
- my $p = prototype(shift);
- my $c = shift;
- my $what = defined $c ? '(' . $p . ')' : 'no prototype';
- print '#' x 25,"\n";
- print '# Testing ',$what,"\n";
- print '#' x 25,"\n";
- print "not "
- if((defined($p) && defined($c) && $p ne $c)
- || (defined($p) != defined($c)));
- printf "ok %d\n",$i++;
-}
-
-@_ = qw(a b c d);
-my @array;
-my %hash;
-
-##
-##
-##
-
-testing \&no_proto, undef;
-
-sub no_proto {
- print "# \@_ = (",join(",",@_),")\n";
- scalar(@_)
-}
-
-print "not " unless 0 == no_proto();
-printf "ok %d\n",$i++;
-
-print "not " unless 1 == no_proto(5);
-printf "ok %d\n",$i++;
-
-print "not " unless 4 == &no_proto;
-printf "ok %d\n",$i++;
-
-print "not " unless 1 == no_proto +6;
-printf "ok %d\n",$i++;
-
-print "not " unless 4 == no_proto(@_);
-printf "ok %d\n",$i++;
-
-##
-##
-##
-
-
-testing \&no_args, '';
-
-sub no_args () {
- print "# \@_ = (",join(",",@_),")\n";
- scalar(@_)
-}
-
-print "not " unless 0 == no_args();
-printf "ok %d\n",$i++;
-
-print "not " unless 0 == no_args;
-printf "ok %d\n",$i++;
-
-print "not " unless 5 == no_args +5;
-printf "ok %d\n",$i++;
-
-print "not " unless 4 == &no_args;
-printf "ok %d\n",$i++;
-
-print "not " unless 2 == &no_args(1,2);
-printf "ok %d\n",$i++;
-
-eval "no_args(1)";
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-##
-##
-##
-
-testing \&one_args, '$';
-
-sub one_args ($) {
- print "# \@_ = (",join(",",@_),")\n";
- scalar(@_)
-}
-
-print "not " unless 1 == one_args(1);
-printf "ok %d\n",$i++;
-
-print "not " unless 1 == one_args +5;
-printf "ok %d\n",$i++;
-
-print "not " unless 4 == &one_args;
-printf "ok %d\n",$i++;
-
-print "not " unless 2 == &one_args(1,2);
-printf "ok %d\n",$i++;
-
-eval "one_args(1,2)";
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-eval "one_args()";
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-sub one_a_args ($) {
- print "# \@_ = (",join(",",@_),")\n";
- print "not " unless @_ == 1 && $_[0] == 4;
- printf "ok %d\n",$i++;
-}
-
-one_a_args(@_);
-
-##
-##
-##
-
-testing \&over_one_args, '$@';
-
-sub over_one_args ($@) {
- print "# \@_ = (",join(",",@_),")\n";
- scalar(@_)
-}
-
-print "not " unless 1 == over_one_args(1);
-printf "ok %d\n",$i++;
-
-print "not " unless 2 == over_one_args(1,2);
-printf "ok %d\n",$i++;
-
-print "not " unless 1 == over_one_args +5;
-printf "ok %d\n",$i++;
-
-print "not " unless 4 == &over_one_args;
-printf "ok %d\n",$i++;
-
-print "not " unless 2 == &over_one_args(1,2);
-printf "ok %d\n",$i++;
-
-print "not " unless 5 == &over_one_args(1,@_);
-printf "ok %d\n",$i++;
-
-eval "over_one_args()";
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-sub over_one_a_args ($@) {
- print "# \@_ = (",join(",",@_),")\n";
- print "not " unless @_ >= 1 && $_[0] == 4;
- printf "ok %d\n",$i++;
-}
-
-over_one_a_args(@_);
-over_one_a_args(@_,1);
-over_one_a_args(@_,1,2);
-over_one_a_args(@_,@_);
-
-##
-##
-##
-
-testing \&scalar_and_hash, '$%';
-
-sub scalar_and_hash ($%) {
- print "# \@_ = (",join(",",@_),")\n";
- scalar(@_)
-}
-
-print "not " unless 1 == scalar_and_hash(1);
-printf "ok %d\n",$i++;
-
-print "not " unless 3 == scalar_and_hash(1,2,3);
-printf "ok %d\n",$i++;
-
-print "not " unless 1 == scalar_and_hash +5;
-printf "ok %d\n",$i++;
-
-print "not " unless 4 == &scalar_and_hash;
-printf "ok %d\n",$i++;
-
-print "not " unless 2 == &scalar_and_hash(1,2);
-printf "ok %d\n",$i++;
-
-print "not " unless 5 == &scalar_and_hash(1,@_);
-printf "ok %d\n",$i++;
-
-eval "scalar_and_hash()";
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-sub scalar_and_hash_a ($@) {
- print "# \@_ = (",join(",",@_),")\n";
- print "not " unless @_ >= 1 && $_[0] == 4;
- printf "ok %d\n",$i++;
-}
-
-scalar_and_hash_a(@_);
-scalar_and_hash_a(@_,1);
-scalar_and_hash_a(@_,1,2);
-scalar_and_hash_a(@_,@_);
-
-##
-##
-##
-
-testing \&one_or_two, '$;$';
-
-sub one_or_two ($;$) {
- print "# \@_ = (",join(",",@_),")\n";
- scalar(@_)
-}
-
-print "not " unless 1 == one_or_two(1);
-printf "ok %d\n",$i++;
-
-print "not " unless 2 == one_or_two(1,3);
-printf "ok %d\n",$i++;
-
-print "not " unless 1 == one_or_two +5;
-printf "ok %d\n",$i++;
-
-print "not " unless 4 == &one_or_two;
-printf "ok %d\n",$i++;
-
-print "not " unless 3 == &one_or_two(1,2,3);
-printf "ok %d\n",$i++;
-
-print "not " unless 5 == &one_or_two(1,@_);
-printf "ok %d\n",$i++;
-
-eval "one_or_two()";
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-eval "one_or_two(1,2,3)";
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-sub one_or_two_a ($;$) {
- print "# \@_ = (",join(",",@_),")\n";
- print "not " unless @_ >= 1 && $_[0] == 4;
- printf "ok %d\n",$i++;
-}
-
-one_or_two_a(@_);
-one_or_two_a(@_,1);
-one_or_two_a(@_,@_);
-
-##
-##
-##
-
-testing \&a_sub, '&';
-
-sub a_sub (&) {
- print "# \@_ = (",join(",",@_),")\n";
- &{$_[0]};
-}
-
-sub tmp_sub_1 { printf "ok %d\n",$i++ }
-
-a_sub { printf "ok %d\n",$i++ };
-a_sub \&tmp_sub_1;
-
-@array = ( \&tmp_sub_1 );
-eval 'a_sub @array';
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-##
-##
-##
-
-testing \&a_subx, '\&';
-
-sub a_subx (\&) {
- print "# \@_ = (",join(",",@_),")\n";
- &{$_[0]};
-}
-
-sub tmp_sub_2 { printf "ok %d\n",$i++ }
-a_subx &tmp_sub_2;
-
-@array = ( \&tmp_sub_2 );
-eval 'a_subx @array';
-print "not " unless $@;
-printf "ok %d\n",$i++;
-
-##
-##
-##
-
-testing \&sub_aref, '&\@';
-
-sub sub_aref (&\@) {
- print "# \@_ = (",join(",",@_),")\n";
- my($sub,$array) = @_;
- print "not " unless @_ == 2 && @{$array} == 4;
- print map { &{$sub}($_) } @{$array}
-}
-
-@array = (qw(O K)," ", $i++);
-sub_aref { lc shift } @array;
-print "\n";
-
-##
-##
-##
-
-testing \&sub_array, '&@';
-
-sub sub_array (&@) {
- print "# \@_ = (",join(",",@_),")\n";
- print "not " unless @_ == 5;
- my $sub = shift;
- print map { &{$sub}($_) } @_
-}
-
-@array = (qw(O K)," ", $i++);
-sub_array { lc shift } @array;
-print "\n";
-
-##
-##
-##
-
-testing \&a_hash, '%';
-
-sub a_hash (%) {
- print "# \@_ = (",join(",",@_),")\n";
- scalar(@_);
-}
-
-print "not " unless 1 == a_hash 'a';
-printf "ok %d\n",$i++;
-
-print "not " unless 2 == a_hash 'a','b';
-printf "ok %d\n",$i++;
-
-##
-##
-##
-
-testing \&a_hash_ref, '\%';
-
-sub a_hash_ref (\%) {
- print "# \@_ = (",join(",",@_),")\n";
- print "not " unless ref($_[0]) && $_[0]->{'a'};
- printf "ok %d\n",$i++;
- $_[0]->{'b'} = 2;
-}
-
-%hash = ( a => 1);
-a_hash_ref %hash;
-print "not " unless $hash{'b'} == 2;
-printf "ok %d\n",$i++;
-
-##
-##
-##
-
-testing \&array_ref_plus, '\@@';
-
-sub array_ref_plus (\@@) {
- print "# \@_ = (",join(",",@_),")\n";
- print "not " unless @_ == 2 && ref($_[0]) && 1 == @{$_[0]} && $_[1] eq 'x';
- printf "ok %d\n",$i++;
- @{$_[0]} = (qw(ok)," ",$i++,"\n");
-}
-
-@array = ('a');
-{ my @more = ('x');
- array_ref_plus @array, @more; }
-print "not " unless @array == 4;
-print @array;
-
-my $p;
-print "not " if defined prototype('CORE::print');
-print "ok ", $i++, "\n";
-
-print "not " if defined prototype('CORE::system');
-print "ok ", $i++, "\n";
-
-print "# CORE::open => ($p)\nnot " if ($p = prototype('CORE::open')) ne '*;$@';
-print "ok ", $i++, "\n";
-
-print "# CORE:Foo => ($p), \$@ => `$@'\nnot "
- if defined ($p = eval { prototype('CORE::Foo') or 1 }) or $@ !~ /^Can't find an opnumber/;
-print "ok ", $i++, "\n";
-
-# correctly note too-short parameter lists that don't end with '$',
-# a possible regression.
-
-sub foo1 ($\@);
-eval q{ foo1 "s" };
-print "not " unless $@ =~ /^Not enough/;
-print "ok ", $i++, "\n";
-
-sub foo2 ($\%);
-eval q{ foo2 "s" };
-print "not " unless $@ =~ /^Not enough/;
-print "ok ", $i++, "\n";
-
-sub X::foo3;
-*X::foo3 = sub {'ok'};
-print "# $@not " unless eval {X->foo3} eq 'ok';
-print "ok ", $i++, "\n";
-
-sub X::foo4 ($);
-*X::foo4 = sub ($) {'ok'};
-print "not " unless X->foo4 eq 'ok';
-print "ok ", $i++, "\n";
-
-# test if the (*) prototype allows barewords, constants, scalar expressions,
-# globs and globrefs (just as CORE::open() does), all under stricture
-sub star (*&) { &{$_[1]} }
-sub star2 (**&) { &{$_[2]} }
-sub BAR { "quux" }
-sub Bar::BAZ { "quuz" }
-my $star = 'FOO';
-star FOO, sub { print "ok $i\n" if $_[0] eq 'FOO' }; $i++;
-star(FOO, sub { print "ok $i\n" if $_[0] eq 'FOO' }); $i++;
-star "FOO", sub { print "ok $i\n" if $_[0] eq 'FOO' }; $i++;
-star("FOO", sub { print "ok $i\n" if $_[0] eq 'FOO' }); $i++;
-star $star, sub { print "ok $i\n" if $_[0] eq 'FOO' }; $i++;
-star($star, sub { print "ok $i\n" if $_[0] eq 'FOO' }); $i++;
-star *FOO, sub { print "ok $i\n" if $_[0] eq \*FOO }; $i++;
-star(*FOO, sub { print "ok $i\n" if $_[0] eq \*FOO }); $i++;
-star \*FOO, sub { print "ok $i\n" if $_[0] eq \*FOO }; $i++;
-star(\*FOO, sub { print "ok $i\n" if $_[0] eq \*FOO }); $i++;
-star2 FOO, BAR, sub { print "ok $i\n"
- if $_[0] eq 'FOO' and $_[1] eq 'BAR' }; $i++;
-star2(Bar::BAZ, FOO, sub { print "ok $i\n"
- if $_[0] eq 'Bar::BAZ' and $_[1] eq 'FOO' }); $i++;
-star2 BAR(), FOO, sub { print "ok $i\n"
- if $_[0] eq 'quux' and $_[1] eq 'FOO' }; $i++;
-star2(FOO, BAR(), sub { print "ok $i\n"
- if $_[0] eq 'FOO' and $_[1] eq 'quux' }); $i++;
-star2 "FOO", "BAR", sub { print "ok $i\n"
- if $_[0] eq 'FOO' and $_[1] eq 'BAR' }; $i++;
-star2("FOO", "BAR", sub { print "ok $i\n"
- if $_[0] eq 'FOO' and $_[1] eq 'BAR' }); $i++;
-star2 $star, $star, sub { print "ok $i\n"
- if $_[0] eq 'FOO' and $_[1] eq 'FOO' }; $i++;
-star2($star, $star, sub { print "ok $i\n"
- if $_[0] eq 'FOO' and $_[1] eq 'FOO' }); $i++;
-star2 *FOO, *BAR, sub { print "ok $i\n"
- if $_[0] eq \*FOO and $_[1] eq \*BAR }; $i++;
-star2(*FOO, *BAR, sub { print "ok $i\n"
- if $_[0] eq \*FOO and $_[1] eq \*BAR }); $i++;
-star2 \*FOO, \*BAR, sub { no strict 'refs'; print "ok $i\n"
- if $_[0] eq \*{'FOO'} and $_[1] eq \*{'BAR'} }; $i++;
-star2(\*FOO, \*BAR, sub { no strict 'refs'; print "ok $i\n"
- if $_[0] eq \*{'FOO'} and $_[1] eq \*{'BAR'} }); $i++;
-
-# test scalarref prototype
-sub sreftest (\$$) {
- print "ok $_[1]\n" if ref $_[0];
-}
-{
- no strict 'vars';
- sreftest my $sref, $i++;
- sreftest($helem{$i}, $i++);
- sreftest $aelem[0], $i++;
-}
-
-# test prototypes when they are evaled and there is a syntax error
-#
-for my $p ( "", qw{ () ($) ($@) ($%) ($;$) (&) (&\@) (&@) (%) (\%) (\@) } ) {
- no warnings 'redefine';
- my $eval = "sub evaled_subroutine $p { &void *; }";
- eval $eval;
- # The /Syntax error/ is seen on OS/390. It's /syntax error/ elsewhere
- print "# eval[$eval]\nnot " unless $@ && $@ =~ /[Ss]yntax error/;
- print "ok ", $i++, "\n";
-}
diff --git a/contrib/perl5/t/comp/redef.t b/contrib/perl5/t/comp/redef.t
deleted file mode 100755
index 07e978b..0000000
--- a/contrib/perl5/t/comp/redef.t
+++ /dev/null
@@ -1,80 +0,0 @@
-#!./perl -w
-#
-# Contributed by Graham Barr <Graham.Barr@tiuk.ti.com>
-
-BEGIN {
- $warn = "";
- $SIG{__WARN__} = sub { $warn .= join("",@_) }
-}
-
-sub ok ($$) {
- print $_[1] ? "ok " : "not ok ", $_[0], "\n";
-}
-
-print "1..18\n";
-
-my $NEWPROTO = 'Prototype mismatch:';
-
-sub sub0 { 1 }
-sub sub0 { 2 }
-
-ok 1, $warn =~ s/Subroutine sub0 redefined[^\n]+\n//s;
-
-sub sub1 { 1 }
-sub sub1 () { 2 }
-
-ok 2, $warn =~ s/$NEWPROTO \Qsub main::sub1 vs ()\E[^\n]+\n//s;
-ok 3, $warn =~ s/Subroutine sub1 redefined[^\n]+\n//s;
-
-sub sub2 { 1 }
-sub sub2 ($) { 2 }
-
-ok 4, $warn =~ s/$NEWPROTO \Qsub main::sub2 vs ($)\E[^\n]+\n//s;
-ok 5, $warn =~ s/Subroutine sub2 redefined[^\n]+\n//s;
-
-sub sub3 () { 1 }
-sub sub3 { 2 }
-
-ok 6, $warn =~ s/$NEWPROTO \Qsub main::sub3 () vs none\E[^\n]+\n//s;
-ok 7, $warn =~ s/Constant subroutine sub3 redefined[^\n]+\n//s;
-
-sub sub4 () { 1 }
-sub sub4 () { 2 }
-
-ok 8, $warn =~ s/Constant subroutine sub4 redefined[^\n]+\n//s;
-
-sub sub5 () { 1 }
-sub sub5 ($) { 2 }
-
-ok 9, $warn =~ s/$NEWPROTO \Qsub main::sub5 () vs ($)\E[^\n]+\n//s;
-ok 10, $warn =~ s/Constant subroutine sub5 redefined[^\n]+\n//s;
-
-sub sub6 ($) { 1 }
-sub sub6 { 2 }
-
-ok 11, $warn =~ s/$NEWPROTO \Qsub main::sub6 ($) vs none\E[^\n]+\n//s;
-ok 12, $warn =~ s/Subroutine sub6 redefined[^\n]+\n//s;
-
-sub sub7 ($) { 1 }
-sub sub7 () { 2 }
-
-ok 13, $warn =~ s/$NEWPROTO \Qsub main::sub7 ($) vs ()\E[^\n]+\n//s;
-ok 14, $warn =~ s/Subroutine sub7 redefined[^\n]+\n//s;
-
-sub sub8 ($) { 1 }
-sub sub8 ($) { 2 }
-
-ok 15, $warn =~ s/Subroutine sub8 redefined[^\n]+\n//s;
-
-sub sub9 ($@) { 1 }
-sub sub9 ($) { 2 }
-
-ok 16, $warn =~ s/$NEWPROTO sub main::sub9 \(\$\Q@) vs ($)\E[^\n]+\n//s;
-ok 17, $warn =~ s/Subroutine sub9 redefined[^\n]+\n//s;
-
-ok 18, $_ eq '';
-
-# If we got any errors that we were not expecting, then print them
-print $_ if length $_;
-
-
diff --git a/contrib/perl5/t/comp/require.t b/contrib/perl5/t/comp/require.t
deleted file mode 100755
index 1b0af9f..0000000
--- a/contrib/perl5/t/comp/require.t
+++ /dev/null
@@ -1,156 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '.';
- push @INC, '../lib';
-}
-
-# don't make this lexical
-$i = 1;
-# Tests 21 .. 23 work only with non broken UTF16-as-code implementations,
-# i.e. not EBCDIC Perls.
-my $Is_EBCDIC = ord('A') == 193 ? 1 : 0;
-if ($Is_EBCDIC) {
- print "1..20\n";
-}
-else {
- print "1..23\n";
-}
-
-sub do_require {
- %INC = ();
- write_file('bleah.pm',@_);
- eval { require "bleah.pm" };
- my @a; # magic guard for scope violations (must be first lexical in file)
-}
-
-sub write_file {
- my $f = shift;
- open(REQ,">$f") or die "Can't write '$f': $!";
- binmode REQ;
- use bytes;
- print REQ @_;
- close REQ;
-}
-
-eval {require 5.005};
-print "# $@\nnot " if $@;
-print "ok ",$i++,"\n";
-
-eval { require 5.005 };
-print "# $@\nnot " if $@;
-print "ok ",$i++,"\n";
-
-eval { require 5.005; };
-print "# $@\nnot " if $@;
-print "ok ",$i++,"\n";
-
-eval {
- require 5.005
-};
-print "# $@\nnot " if $@;
-print "ok ",$i++,"\n";
-
-# new style version numbers
-
-eval { require v5.5.630; };
-print "# $@\nnot " if $@;
-print "ok ",$i++,"\n";
-
-eval { require 10.0.2; };
-print "# $@\nnot " unless $@ =~ /^Perl v10\.0\.2 required/;
-print "ok ",$i++,"\n";
-
-eval q{ use v5.5.630; };
-print "# $@\nnot " if $@;
-print "ok ",$i++,"\n";
-
-eval q{ use 10.0.2; };
-print "# $@\nnot " unless $@ =~ /^Perl v10\.0\.2 required/;
-print "ok ",$i++,"\n";
-
-my $ver = 5.005_63;
-eval { require $ver; };
-print "# $@\nnot " if $@;
-print "ok ",$i++,"\n";
-
-# check inaccurate fp
-$ver = 10.2;
-eval { require $ver; };
-print "# $@\nnot " unless $@ =~ /^Perl v10\.200\.0 required/;
-print "ok ",$i++,"\n";
-
-$ver = 10.000_02;
-eval { require $ver; };
-print "# $@\nnot " unless $@ =~ /^Perl v10\.0\.20 required/;
-print "ok ",$i++,"\n";
-
-print "not " unless 5.5.1 gt v5.5;
-print "ok ",$i++,"\n";
-
-{
- use utf8;
- print "not " unless v5.5.640 eq "\x{5}\x{5}\x{280}";
- print "ok ",$i++,"\n";
-
- print "not " unless v7.15 eq "\x{7}\x{f}";
- print "ok ",$i++,"\n";
-
- print "not "
- unless v1.20.300.4000.50000.600000 eq "\x{1}\x{14}\x{12c}\x{fa0}\x{c350}\x{927c0}";
- print "ok ",$i++,"\n";
-}
-
-# interaction with pod (see the eof)
-write_file('bleah.pm', "print 'ok $i\n'; 1;\n");
-require "bleah.pm";
-$i++;
-
-# run-time failure in require
-do_require "0;\n";
-print "# $@\nnot " unless $@ =~ /did not return a true/;
-print "ok ",$i++,"\n";
-
-# compile-time failure in require
-do_require "1)\n";
-# bison says 'parse error' instead of 'syntax error',
-# various yaccs may or may not capitalize 'syntax'.
-print "# $@\nnot " unless $@ =~ /(syntax|parse) error/mi;
-print "ok ",$i++,"\n";
-
-# successful require
-do_require "1";
-print "# $@\nnot " if $@;
-print "ok ",$i++,"\n";
-
-# do FILE shouldn't see any outside lexicals
-my $x = "ok $i\n";
-write_file("bleah.do", <<EOT);
-\$x = "not ok $i\\n";
-EOT
-do "bleah.do";
-dofile();
-sub dofile { do "bleah.do"; };
-print $x;
-
-exit if $Is_EBCDIC;
-
-# UTF-encoded things
-my $utf8 = chr(0xFEFF);
-
-$i++; do_require(qq(${utf8}print "ok $i\n"; 1;\n));
-
-sub bytes_to_utf16 {
- my $utf16 = pack("$_[0]*", unpack("C*", $_[1]));
- return @_ == 3 && $_[2] ? pack("$_[0]", 0xFEFF) . $utf16 : $utf16;
-}
-
-$i++; do_require(bytes_to_utf16('n', qq(print "ok $i\\n"; 1;\n), 1)); # BE
-$i++; do_require(bytes_to_utf16('v', qq(print "ok $i\\n"; 1;\n), 1)); # LE
-
-END { 1 while unlink 'bleah.pm'; 1 while unlink 'bleah.do'; }
-
-# ***interaction with pod (don't put any thing after here)***
-
-=pod
diff --git a/contrib/perl5/t/comp/script.t b/contrib/perl5/t/comp/script.t
deleted file mode 100755
index a9bc47d..0000000
--- a/contrib/perl5/t/comp/script.t
+++ /dev/null
@@ -1,24 +0,0 @@
-#!./perl
-
-# $RCSfile: script.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:23 $
-
-print "1..3\n";
-
-$PERL = ($^O eq 'MSWin32') ? '.\perl' : './perl';
-$x = `$PERL -le "print 'ok';"`;
-
-if ($x eq "ok\n") {print "ok 1\n";} else {print "not ok 1\n";}
-
-open(try,">Comp.script") || (die "Can't open temp file.");
-print try 'print "ok\n";'; print try "\n";
-close try;
-
-$x = `$PERL Comp.script`;
-
-if ($x eq "ok\n") {print "ok 2\n";} else {print "not ok 2\n";}
-
-$x = `$PERL <Comp.script`;
-
-if ($x eq "ok\n") {print "ok 3\n";} else {print "not ok 3\n";}
-
-unlink 'Comp.script' || `/bin/rm -f Comp.script`;
diff --git a/contrib/perl5/t/comp/term.t b/contrib/perl5/t/comp/term.t
deleted file mode 100755
index f079eef..0000000
--- a/contrib/perl5/t/comp/term.t
+++ /dev/null
@@ -1,72 +0,0 @@
-#!./perl
-
-# tests that aren't important enough for base.term
-
-print "1..23\n";
-
-$x = "\\n";
-print "#1\t:$x: eq " . ':\n:' . "\n";
-if ($x eq '\n') {print "ok 1\n";} else {print "not ok 1\n";}
-
-$x = "#2\t:$x: eq :\\n:\n";
-print $x;
-unless (index($x,'\\\\')>0) {print "ok 2\n";} else {print "not ok 2\n";}
-
-if (length('\\\\') == 2) {print "ok 3\n";} else {print "not ok 3\n";}
-
-$one = 'a';
-
-if (length("\\n") == 2) {print "ok 4\n";} else {print "not ok 4\n";}
-if (length("\\\n") == 2) {print "ok 5\n";} else {print "not ok 5\n";}
-if (length("$one\\n") == 3) {print "ok 6\n";} else {print "not ok 6\n";}
-if (length("$one\\\n") == 3) {print "ok 7\n";} else {print "not ok 7\n";}
-if (length("\\n$one") == 3) {print "ok 8\n";} else {print "not ok 8\n";}
-if (length("\\\n$one") == 3) {print "ok 9\n";} else {print "not ok 9\n";}
-if (length("\\${one}") == 2) {print "ok 10\n";} else {print "not ok 10\n";}
-
-if ("${one}b" eq "ab") { print "ok 11\n";} else {print "not ok 11\n";}
-
-@foo = (1,2,3);
-if ("$foo[1]b" eq "2b") { print "ok 12\n";} else {print "not ok 12\n";}
-if ("@foo[0..1]b" eq "1 2b") { print "ok 13\n";} else {print "not ok 13\n";}
-$" = '::';
-if ("@foo[0..1]b" eq "1::2b") { print "ok 14\n";} else {print "not ok 14\n";}
-
-# test if C<eval "{...}"> distinguishes between blocks and hashrefs
-
-$a = "{ '\\'' , 'foo' }";
-$a = eval $a;
-if (ref($a) eq 'HASH') {print "ok 15\n";} else {print "not ok 15\n";}
-
-$a = "{ '\\\\\\'abc' => 'foo' }";
-$a = eval $a;
-if (ref($a) eq 'HASH') {print "ok 16\n";} else {print "not ok 16\n";}
-
-$a = "{'a\\\n\\'b','foo'}";
-$a = eval $a;
-if (ref($a) eq 'HASH') {print "ok 17\n";} else {print "not ok 17\n";}
-
-$a = "{'\\\\\\'\\\\'=>'foo'}";
-$a = eval $a;
-if (ref($a) eq 'HASH') {print "ok 18\n";} else {print "not ok 18\n";}
-
-$a = "{q,a'b,,'foo'}";
-$a = eval $a;
-if (ref($a) eq 'HASH') {print "ok 19\n";} else {print "not ok 19\n";}
-
-$a = "{q[[']]=>'foo'}";
-$a = eval $a;
-if (ref($a) eq 'HASH') {print "ok 20\n";} else {print "not ok 20\n";}
-
-# needs disambiguation if first term is a variable
-$a = "+{ \$a , 'foo'}";
-$a = eval $a;
-if (ref($a) eq 'HASH') {print "ok 21\n";} else {print "not ok 21\n";}
-
-$a = "+{ \$a=>'foo'}";
-$a = eval $a;
-if (ref($a) eq 'HASH') {print "ok 22\n";} else {print "not ok 22\n";}
-
-$a = "{ 0x01 => 'foo'}->{0x01}";
-$a = eval $a;
-if ($a eq 'foo') {print "ok 23\n";} else {print "not ok 23\n";}
diff --git a/contrib/perl5/t/comp/use.t b/contrib/perl5/t/comp/use.t
deleted file mode 100755
index fb59777..0000000
--- a/contrib/perl5/t/comp/use.t
+++ /dev/null
@@ -1,170 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..27\n";
-
-my $i = 1;
-eval "use 5.000"; # implicit semicolon
-if ($@) {
- print STDERR $@,"\n";
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-eval "use 5.000;";
-if ($@) {
- print STDERR $@,"\n";
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-eval sprintf "use %.5f;", $];
-if ($@) {
- print STDERR $@,"\n";
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-
-eval sprintf "use %.5f;", $] - 0.000001;
-if ($@) {
- print STDERR $@,"\n";
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-eval sprintf("use %.5f;", $] + 1);
-unless ($@) {
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-eval sprintf "use %.5f;", $] + 0.00001;
-unless ($@) {
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-
-{ use lib } # check that subparse saves pending tokens
-
-local $lib::VERSION = 1.0;
-
-eval "use lib 0.9";
-if ($@) {
- print STDERR $@,"\n";
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-eval "use lib 1.0";
-if ($@) {
- print STDERR $@,"\n";
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-eval "use lib 1.01";
-unless ($@) {
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-
-eval "use lib 0.9 qw(fred)";
-if ($@) {
- print STDERR $@,"\n";
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-print "not " unless $INC[0] eq "fred";
-print "ok ",$i++,"\n";
-
-eval "use lib 1.0 qw(joe)";
-if ($@) {
- print STDERR $@,"\n";
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-print "not " unless $INC[0] eq "joe";
-print "ok ",$i++,"\n";
-
-eval "use lib 1.01 qw(freda)";
-unless ($@) {
- print "not ";
-}
-print "ok ",$i++,"\n";
-
-print "not " if $INC[0] eq "freda";
-print "ok ",$i++,"\n";
-
-{
- local $lib::VERSION = 35.36;
- eval "use lib v33.55";
- print "not " if $@;
- print "ok ",$i++,"\n";
-
- eval "use lib v100.105";
- unless ($@ =~ /lib version 100\.105 required--this is only version 35\.3/) {
- print "not ";
- }
- print "ok ",$i++,"\n";
-
- eval "use lib 33.55";
- print "not " if $@;
- print "ok ",$i++,"\n";
-
- eval "use lib 100.105";
- unless ($@ =~ /lib version 100\.105 required--this is only version 35\.3/) {
- print "not ";
- }
- print "ok ",$i++,"\n";
-
- local $lib::VERSION = '35.36';
- eval "use lib v33.55";
- print "not " if $@;
- print "ok ",$i++,"\n";
-
- eval "use lib v100.105";
- unless ($@ =~ /lib version 100\.105 required--this is only version 35\.36/) {
- print "not ";
- }
- print "ok ",$i++,"\n";
-
- eval "use lib 33.55";
- print "not " if $@;
- print "ok ",$i++,"\n";
-
- eval "use lib 100.105";
- unless ($@ =~ /lib version 100\.105 required--this is only version 35\.36/) {
- print "not ";
- }
- print "ok ",$i++,"\n";
-
- local $lib::VERSION = v35.36;
- eval "use lib v33.55";
- print "not " if $@;
- print "ok ",$i++,"\n";
-
- eval "use lib v100.105";
- unless ($@ =~ /lib v100\.105 required--this is only v35\.36/) {
- print "not ";
- }
- print "ok ",$i++,"\n";
-
- eval "use lib 33.55";
- print "not " if $@;
- print "ok ",$i++,"\n";
-
- eval "use lib 100.105";
- unless ($@ =~ /lib version 100\.105 required--this is only version 35\.036/) {
- print "not ";
- }
- print "ok ",$i++,"\n";
-}
diff --git a/contrib/perl5/t/harness b/contrib/perl5/t/harness
deleted file mode 100644
index c24d46f..0000000
--- a/contrib/perl5/t/harness
+++ /dev/null
@@ -1,81 +0,0 @@
-#!./perl
-
-# We suppose that perl _mostly_ works at this moment, so may use
-# sophisticated testing.
-
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- $ENV{PERL5LIB} = '../lib'; # so children will see it too
-}
-use lib '../lib';
-
-use Test::Harness;
-
-$Test::Harness::switches = ""; # Too much noise otherwise
-$Test::Harness::verbose = shift if @ARGV && $ARGV[0] eq '-v';
-
-#fudge DATA for now.
-%datahandle = qw(
- lib/bigint.t 1
- lib/bigintpm.t 1
- lib/bigfloat.t 1
- lib/bigfloatpm.t 1
- op/gv.t 1
- lib/complex.t 1
- lib/ph.t 1
- lib/soundex.t 1
- op/misc.t 1
- op/runlevel.t 1
- op/tie.t 1
- op/lex_assign.t 1
- pragma/subs.t 1
- );
-
-foreach (keys %datahandle) {
- unlink "$_.t";
-}
-
-@tests = @ARGV;
-@tests = <base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t lib/*.t> unless @tests;
-
-Test::Harness::runtests @tests;
-exit(0) unless -e "../testcompile";
-
-# %infinite = qw (
-# op/bop.t 1
-# lib/hostname.t 1
-# op/lex_assign.t 1
-# lib/ph.t 1
-# );
-
-my $dhwrapper = <<'EOT';
-open DATA,"<".__FILE__;
-until (($_=<DATA>) =~ /^__END__/) {};
-EOT
-
-@tests = grep (!$infinite{$_}, @tests);
-@tests = map {
- my $new = $_;
- if ($datahandle{$_} && !( -f "$new.t") ) {
- $new .= '.t';
- local(*F, *T);
- open(F,"<$_") or die "Can't open $_: $!";
- open(T,">$new") or die "Can't open $new: $!";
- print T $dhwrapper, <F>;
- close F;
- close T;
- }
- $new;
- } @tests;
-
-print "The tests ", join(' ', keys(%infinite)),
- " generate infinite loops! Skipping!\n";
-
-$ENV{'HARNESS_COMPILE_TEST'} = 1;
-$ENV{'PERLCC_TIMEOUT'} = 120 unless $ENV{'PERLCC_TIMEOUT'};
-
-Test::Harness::runtests @tests;
-foreach (keys %datahandle) {
- unlink "$_.t";
-}
diff --git a/contrib/perl5/t/io/argv.t b/contrib/perl5/t/io/argv.t
deleted file mode 100755
index 2b8f23b..0000000
--- a/contrib/perl5/t/io/argv.t
+++ /dev/null
@@ -1,127 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..21\n";
-
-use File::Spec;
-
-my $devnull = File::Spec->devnull;
-
-open(try, '>Io_argv1.tmp') || (die "Can't open temp file: $!");
-print try "a line\n";
-close try;
-
-if ($^O eq 'MSWin32') {
- $x = `.\\perl -e "while (<>) {print \$.,\$_;}" Io_argv1.tmp Io_argv1.tmp`;
-}
-else {
- $x = `./perl -e 'while (<>) {print \$.,\$_;}' Io_argv1.tmp Io_argv1.tmp`;
-}
-if ($x eq "1a line\n2a line\n") {print "ok 1\n";} else {print "not ok 1\n";}
-
-if ($^O eq 'MSWin32') {
- $x = `.\\perl -le "print 'foo'" | .\\perl -e "while (<>) {print \$_;}" Io_argv1.tmp -`;
-}
-else {
- $x = `echo foo|./perl -e 'while (<>) {print $_;}' Io_argv1.tmp -`;
-}
-if ($x eq "a line\nfoo\n") {print "ok 2\n";} else {print "not ok 2\n";}
-
-if ($^O eq 'MSWin32') {
- $x = `.\\perl -le "print 'foo'" |.\\perl -e "while (<>) {print \$_;}"`;
-}
-else {
- $x = `echo foo|./perl -e 'while (<>) {print $_;}'`;
-}
-if ($x eq "foo\n") {print "ok 3\n";} else {print "not ok 3 :$x:\n";}
-
-@ARGV = ('Io_argv1.tmp', 'Io_argv1.tmp', $devnull, 'Io_argv1.tmp');
-while (<>) {
- $y .= $. . $_;
- if (eof()) {
- if ($. == 3) {print "ok 4\n";} else {print "not ok 4\n";}
- }
-}
-
-if ($y eq "1a line\n2a line\n3a line\n")
- {print "ok 5\n";}
-else
- {print "not ok 5\n";}
-
-open(try, '>Io_argv1.tmp') or die "Can't open temp file: $!";
-close try;
-open(try, '>Io_argv2.tmp') or die "Can't open temp file: $!";
-close try;
-@ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp');
-$^I = '.bak';
-$/ = undef;
-my $i = 6;
-while (<>) {
- s/^/ok $i\n/;
- ++$i;
- print;
-}
-open(try, '<Io_argv1.tmp') or die "Can't open temp file: $!";
-print while <try>;
-open(try, '<Io_argv2.tmp') or die "Can't open temp file: $!";
-print while <try>;
-close try;
-undef $^I;
-
-eof try or print 'not ';
-print "ok 8\n";
-
-eof NEVEROPENED or print 'not ';
-print "ok 9\n";
-
-open STDIN, 'Io_argv1.tmp' or die $!;
-@ARGV = ();
-!eof() or print 'not ';
-print "ok 10\n";
-
-<> eq "ok 6\n" or print 'not ';
-print "ok 11\n";
-
-open STDIN, $devnull or die $!;
-@ARGV = ();
-eof() or print 'not ';
-print "ok 12\n";
-
-@ARGV = ('Io_argv1.tmp');
-!eof() or print 'not ';
-print "ok 13\n";
-
-@ARGV = ($devnull, $devnull);
-!eof() or print 'not ';
-print "ok 14\n";
-
-close ARGV or die $!;
-eof() or print 'not ';
-print "ok 15\n";
-
-{
- local $/;
- open F, 'Io_argv1.tmp' or die;
- <F>; # set $. = 1
- print "not " if defined(<F>); # should hit eof
- print "ok 16\n";
- open F, $devnull or die;
- print "not " unless defined(<F>);
- print "ok 17\n";
- print "not " if defined(<F>);
- print "ok 18\n";
- print "not " if defined(<F>);
- print "ok 19\n";
- open F, $devnull or die; # restart cycle again
- print "not " unless defined(<F>);
- print "ok 20\n";
- print "not " if defined(<F>);
- print "ok 21\n";
- close F;
-}
-
-END { unlink 'Io_argv1.tmp', 'Io_argv1.tmp.bak', 'Io_argv2.tmp', 'Io_argv2.tmp.bak' }
diff --git a/contrib/perl5/t/io/dup.t b/contrib/perl5/t/io/dup.t
deleted file mode 100755
index af13d4d..0000000
--- a/contrib/perl5/t/io/dup.t
+++ /dev/null
@@ -1,40 +0,0 @@
-#!./perl
-
-# $RCSfile: dup.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:27 $
-
-print "1..6\n";
-
-print "ok 1\n";
-
-open(dupout,">&STDOUT");
-open(duperr,">&STDERR");
-
-open(STDOUT,">Io.dup") || die "Can't open stdout";
-open(STDERR,">&STDOUT") || die "Can't open stderr";
-
-select(STDERR); $| = 1;
-select(STDOUT); $| = 1;
-
-print STDOUT "ok 2\n";
-print STDERR "ok 3\n";
-if ($^O eq 'MSWin32') {
- print `echo ok 4`;
- print `echo ok 5 1>&2`; # does this work?
-}
-else {
- system 'echo ok 4';
- system 'echo ok 5 1>&2';
-}
-
-close(STDOUT);
-close(STDERR);
-
-open(STDOUT,">&dupout");
-open(STDERR,">&duperr");
-
-if ($^O eq 'MSWin32') { print `type Io.dup` }
-else { system 'cat Io.dup' }
-unlink 'Io.dup';
-
-print STDOUT "ok 6\n";
-
diff --git a/contrib/perl5/t/io/fs.t b/contrib/perl5/t/io/fs.t
deleted file mode 100755
index 8170b33..0000000
--- a/contrib/perl5/t/io/fs.t
+++ /dev/null
@@ -1,210 +0,0 @@
-#!./perl
-
-# $RCSfile: fs.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:28 $
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Config;
-
-$Is_Dosish = ($^O eq 'MSWin32' or $^O eq 'dos' or
- $^O eq 'os2' or $^O eq 'mint');
-
-if (defined &Win32::IsWinNT && Win32::IsWinNT()) {
- $Is_Dosish = '' if Win32::FsType() eq 'NTFS';
-}
-
-print "1..29\n";
-
-$wd = (($^O eq 'MSWin32') ? `cd` : `pwd`);
-chop($wd);
-
-if ($^O eq 'MSWin32') { `rmdir /s /q tmp 2>nul`; `mkdir tmp`; }
-else { `rm -f tmp 2>/dev/null; mkdir tmp 2>/dev/null`; }
-chdir './tmp';
-`/bin/rm -rf a b c x` if -x '/bin/rm';
-
-umask(022);
-
-if ($^O eq 'MSWin32') { print "ok 1 # skipped: bogus umask()\n"; }
-elsif ((umask(0)&0777) == 022) {print "ok 1\n";} else {print "not ok 1\n";}
-open(fh,'>x') || die "Can't create x";
-close(fh);
-open(fh,'>a') || die "Can't create a";
-close(fh);
-
-if ($Is_Dosish) {print "ok 2 # skipped: no link\n";}
-elsif (eval {link('a','b')}) {print "ok 2\n";}
-else {print "not ok 2\n";}
-
-if ($Is_Dosish) {print "ok 3 # skipped: no link\n";}
-elsif (eval {link('b','c')}) {print "ok 3\n";}
-else {print "not ok 3\n";}
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('c');
-
-if ($Config{dont_use_nlink} || $Is_Dosish)
- {print "ok 4 # skipped: no link\n";}
-elsif ($nlink == 3)
- {print "ok 4\n";}
-else {print "not ok 4\n";}
-
-if ($^O eq 'amigaos' || $Is_Dosish)
- {print "ok 5 # skipped: no link\n";}
-elsif (($mode & 0777) == 0666)
- {print "ok 5\n";}
-else {print "not ok 5\n";}
-
-$newmode = $^O eq 'MSWin32' ? 0444 : 0777;
-if ((chmod $newmode,'a') == 1) {print "ok 6\n";} else {print "not ok 6\n";}
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('c');
-if ($Is_Dosish) {print "ok 7 # skipped: no link\n";}
-elsif (($mode & 0777) == $newmode) {print "ok 7\n";}
-else {print "not ok 7\n";}
-
-$newmode = 0700;
-if ($^O eq 'MSWin32') {
- chmod 0444, 'x';
- $newmode = 0666;
-}
-
-if ($Is_Dosish) {print "ok 8 # skipped: no link\n";}
-elsif ((chmod $newmode,'c','x') == 2) {print "ok 8\n";}
-else {print "not ok 8\n";}
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('c');
-if ($Is_Dosish) {print "ok 9 # skipped: no link\n";}
-elsif (($mode & 0777) == $newmode) {print "ok 9\n";}
-else {print "not ok 9\n";}
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('x');
-if ($Is_Dosish) {print "ok 10 # skipped: no link\n";}
-elsif (($mode & 0777) == $newmode) {print "ok 10\n";}
-else {print "not ok 10\n";}
-
-if ($Is_Dosish) {print "ok 11 # skipped: no link\n"; unlink 'b','x'; }
-elsif ((unlink 'b','x') == 2) {print "ok 11\n";}
-else {print "not ok 11\n";}
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('b');
-if ($ino == 0) {print "ok 12\n";} else {print "not ok 12\n";}
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('x');
-if ($ino == 0) {print "ok 13\n";} else {print "not ok 13\n";}
-
-if (rename('a','b')) {print "ok 14\n";} else {print "not ok 14\n";}
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('a');
-if ($ino == 0) {print "ok 15\n";} else {print "not ok 15\n";}
-$delta = $Is_Dosish ? 2 : 1; # Granularity of time on the filesystem
-chmod 0777, 'b';
-$foo = (utime 500000000,500000000 + $delta,'b');
-if ($foo == 1) {print "ok 16\n";} else {print "not ok 16 $foo\n";}
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('b');
-if ($^O eq 'MSWin32') { print "ok 17 # skipped: bogus (stat)[1]\n"; }
-elsif ($ino) {print "ok 17\n";} else {print "not ok 17\n";}
-if ($wd =~ m#/afs/# || $^O eq 'amigaos' || $^O eq 'dos' || $^O eq 'MSWin32')
- {print "ok 18 # skipped: granularity of the filetime\n";}
-elsif ($atime == 500000000 && $mtime == 500000000 + $delta)
- {print "ok 18\n";}
-elsif ($^O =~ /\blinux\b/i) {
- # Maybe stat() cannot get the correct atime, as happens via NFS on linux?
- $foo = (utime 400000000,500000000 + 2*$delta,'b');
- my ($new_atime, $new_mtime) = (stat('b'))[8,9];
- if ($new_atime == $atime && $new_mtime - $mtime == $delta)
- {print "ok 18 # accounted for possible NFS/glibc2.2 bug on linux\n";}
- else
- {print "not ok 18 $atime/$new_atime $mtime/$new_mtime\n";}
-} else
- {print "not ok 18 $atime $mtime\n";}
-
-if ((unlink 'b') == 1) {print "ok 19\n";} else {print "not ok 19\n";}
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('b');
-if ($ino == 0) {print "ok 20\n";} else {print "not ok 20\n";}
-unlink 'c';
-
-chdir $wd || die "Can't cd back to $wd";
-
-unlink 'c';
-if ($^O ne 'MSWin32' and `ls -l perl 2>/dev/null` =~ /^l.*->/) {
- # we have symbolic links
- system("cp TEST TEST$$");
- # we have to copy because e.g. GNU grep gets huffy if we have
- # a symlink forest to another disk (it complains about too many
- # levels of symbolic links, even if we have only two)
- if (symlink("TEST$$","c")) {print "ok 21\n";} else {print "not ok 21\n";}
- $foo = `grep perl c 2>&1`;
- if ($foo) {print "ok 22\n";} else {print "not ok 22\n";}
- unlink 'c';
- unlink("TEST$$");
-}
-else {
- print "ok 21\nok 22\n";
-}
-
-# truncate (may not be implemented everywhere)
-unlink "Iofs.tmp";
-`echo helloworld > Iofs.tmp`;
-eval { truncate "Iofs.tmp", 5; };
-if ($@ =~ /not implemented/) {
- print "# truncate not implemented -- skipping tests 23 through 26\n";
- for (23 .. 26) {
- print "ok $_\n";
- }
-}
-else {
- if (-s "Iofs.tmp" == 5) {print "ok 23\n"} else {print "not ok 23\n"}
- truncate "Iofs.tmp", 0;
- if (-z "Iofs.tmp") {print "ok 24\n"} else {print "not ok 24\n"}
- open(FH, ">Iofs.tmp") or die "Can't create Iofs.tmp";
- binmode FH;
- { select FH; $| = 1; select STDOUT }
- {
- use strict;
- print FH "x\n" x 200;
- truncate(FH, 200) or die "Can't truncate FH: $!";
- }
- if ($^O eq 'dos'
- # Not needed on HPFS, but needed on HPFS386 ?!
- or $^O eq 'os2')
- {
- close (FH); open (FH, ">>Iofs.tmp") or die "Can't reopen Iofs.tmp";
- }
- if (-s "Iofs.tmp" == 200) {print "ok 25\n"} else {print "not ok 25\n"}
- truncate FH, 0;
- if ($^O eq 'dos'
- # Not needed on HPFS, but needed on HPFS386 ?!
- or $^O eq 'os2')
- {
- close (FH); open (FH, ">>Iofs.tmp") or die "Can't reopen Iofs.tmp";
- }
- if (-z "Iofs.tmp") {print "ok 26\n"} else {print "not ok 26\n"}
- close FH;
-}
-
-# check if rename() can be used to just change case of filename
-chdir './tmp';
-open(fh,'>x') || die "Can't create x";
-close(fh);
-rename('x', 'X');
-print 'not ' unless -e 'X';
-print "ok 27\n";
-unlink 'X';
-chdir $wd || die "Can't cd back to $wd";
-
-# check if rename() works on directories
-rename 'tmp', 'tmp1' or print "not ";
-print "ok 28\n";
--d 'tmp1' or print "not ";
-print "ok 29\n";
-
-END { rmdir 'tmp1'; unlink "Iofs.tmp"; }
diff --git a/contrib/perl5/t/io/inplace.t b/contrib/perl5/t/io/inplace.t
deleted file mode 100755
index ff410a7..0000000
--- a/contrib/perl5/t/io/inplace.t
+++ /dev/null
@@ -1,36 +0,0 @@
-#!./perl
-
-$^I = $^O eq 'VMS' ? '_bak' : '.bak';
-
-# $RCSfile: inplace.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:29 $
-
-print "1..2\n";
-
-@ARGV = ('.a','.b','.c');
-if ($^O eq 'MSWin32') {
- $CAT = '.\perl -e "print<>"';
- `.\\perl -le "print 'foo'" > .a`;
- `.\\perl -le "print 'foo'" > .b`;
- `.\\perl -le "print 'foo'" > .c`;
-}
-elsif ($^O eq 'VMS') {
- $CAT = 'MCR []perl. -e "print<>"';
- `MCR []perl. -le "print 'foo'" > ./.a`;
- `MCR []perl. -le "print 'foo'" > ./.b`;
- `MCR []perl. -le "print 'foo'" > ./.c`;
-}
-else {
- $CAT = 'cat';
- `echo foo | tee .a .b .c`;
-}
-while (<>) {
- s/foo/bar/;
-}
-continue {
- print;
-}
-
-if (`$CAT .a .b .c` eq "bar\nbar\nbar\n") {print "ok 1\n";} else {print "not ok 1\n";}
-if (`$CAT .a$^I .b$^I .c$^I` eq "foo\nfoo\nfoo\n") {print "ok 2\n";} else {print "not ok 2\n";}
-
-unlink '.a', '.b', '.c', ".a$^I", ".b$^I", ".c$^I";
diff --git a/contrib/perl5/t/io/iprefix.t b/contrib/perl5/t/io/iprefix.t
deleted file mode 100755
index 10a5c5f..0000000
--- a/contrib/perl5/t/io/iprefix.t
+++ /dev/null
@@ -1,36 +0,0 @@
-#!./perl
-
-$^I = 'bak*';
-
-# Modified from the original inplace.t to test adding prefixes
-
-print "1..2\n";
-
-@ARGV = ('.a','.b','.c');
-if ($^O eq 'MSWin32') {
- $CAT = '.\perl -e "print<>"';
- `.\\perl -le "print 'foo'" > .a`;
- `.\\perl -le "print 'foo'" > .b`;
- `.\\perl -le "print 'foo'" > .c`;
-}
-elsif ($^O eq 'VMS') {
- $CAT = 'MCR []perl. -e "print<>"';
- `MCR []perl. -le "print 'foo'" > ./.a`;
- `MCR []perl. -le "print 'foo'" > ./.b`;
- `MCR []perl. -le "print 'foo'" > ./.c`;
-}
-else {
- $CAT = 'cat';
- `echo foo | tee .a .b .c`;
-}
-while (<>) {
- s/foo/bar/;
-}
-continue {
- print;
-}
-
-if (`$CAT .a .b .c` eq "bar\nbar\nbar\n") {print "ok 1\n";} else {print "not ok 1\n";}
-if (`$CAT bak.a bak.b bak.c` eq "foo\nfoo\nfoo\n") {print "ok 2\n";} else {print "not ok 2\n";}
-
-unlink '.a', '.b', '.c', 'bak.a', 'bak.b', 'bak.c';
diff --git a/contrib/perl5/t/io/nargv.t b/contrib/perl5/t/io/nargv.t
deleted file mode 100755
index fb13857..0000000
--- a/contrib/perl5/t/io/nargv.t
+++ /dev/null
@@ -1,63 +0,0 @@
-#!./perl
-
-print "1..5\n";
-
-my $j = 1;
-for $i ( 1,2,5,4,3 ) {
- $file = mkfiles($i);
- open(FH, "> $file") || die "can't create $file: $!";
- print FH "not ok " . $j++ . "\n";
- close(FH) || die "Can't close $file: $!";
-}
-
-
-{
- local *ARGV;
- local $^I = '.bak';
- local $_;
- @ARGV = mkfiles(1..3);
- $n = 0;
- while (<>) {
- print STDOUT "# initial \@ARGV: [@ARGV]\n";
- if ($n++ == 2) {
- other();
- }
- show();
- }
-}
-
-$^I = undef;
-@ARGV = mkfiles(1..3);
-$n = 0;
-while (<>) {
- print STDOUT "#final \@ARGV: [@ARGV]\n";
- if ($n++ == 2) {
- other();
- }
- show();
-}
-
-sub show {
- #warn "$ARGV: $_";
- s/^not //;
- print;
-}
-
-sub other {
- print STDOUT "# Calling other\n";
- local *ARGV;
- local *ARGVOUT;
- local $_;
- @ARGV = mkfiles(5, 4);
- while (<>) {
- print STDOUT "# inner \@ARGV: [@ARGV]\n";
- show();
- }
-}
-
-sub mkfiles {
- my @files = map { "scratch$_" } @_;
- return wantarray ? @files : $files[-1];
-}
-
-END { unlink map { ($_, "$_.bak") } mkfiles(1..5) }
diff --git a/contrib/perl5/t/io/open.t b/contrib/perl5/t/io/open.t
deleted file mode 100755
index 0e2d57c..0000000
--- a/contrib/perl5/t/io/open.t
+++ /dev/null
@@ -1,291 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-# $RCSfile$
-$| = 1;
-use warnings;
-$Is_VMS = $^O eq 'VMS';
-$Is_Dos = $^O eq 'dos';
-
-print "1..66\n";
-
-my $test = 1;
-
-sub ok { print "ok $test\n"; $test++ }
-
-# my $file tests
-
-# 1..9
-{
- unlink("afile") if -f "afile";
- print "$!\nnot " unless open(my $f,"+>afile");
- ok;
- binmode $f;
- print "not " unless -f "afile";
- ok;
- print "not " unless print $f "SomeData\n";
- ok;
- print "not " unless tell($f) == 9;
- ok;
- print "not " unless seek($f,0,0);
- ok;
- $b = <$f>;
- print "not " unless $b eq "SomeData\n";
- ok;
- print "not " unless -f $f;
- ok;
- eval { die "Message" };
- # warn $@;
- print "not " unless $@ =~ /<\$f> line 1/;
- ok;
- print "not " unless close($f);
- ok;
- unlink("afile");
-}
-
-# 10..12
-{
- print "# \$!='$!'\nnot " unless open(my $f,'>', 'afile');
- ok;
- print $f "a row\n";
- print "not " unless close($f);
- ok;
- print "not " unless -s 'afile' < 10;
- ok;
-}
-
-# 13..15
-{
- print "# \$!='$!'\nnot " unless open(my $f,'>>', 'afile');
- ok;
- print $f "a row\n";
- print "not " unless close($f);
- ok;
- print "not " unless -s 'afile' > 10;
- ok;
-}
-
-# 16..18
-{
- print "# \$!='$!'\nnot " unless open(my $f, '<', 'afile');
- ok;
- @rows = <$f>;
- print "not " unless @rows == 2;
- ok;
- print "not " unless close($f);
- ok;
-}
-
-# 19..23
-{
- print "not " unless -s 'afile' < 20;
- ok;
- print "# \$!='$!'\nnot " unless open(my $f, '+<', 'afile');
- ok;
- @rows = <$f>;
- print "not " unless @rows == 2;
- ok;
- seek $f, 0, 1;
- print $f "yet another row\n";
- print "not " unless close($f);
- ok;
- print "not " unless -s 'afile' > 20;
- ok;
-
- unlink("afile");
-}
-
-# 24..26
-if ($Is_VMS) {
- for (24..26) { print "ok $_ # skipped: not Unix fork\n"; $test++;}
-}
-else {
- print "# \$!='$!'\nnot " unless open(my $f, '-|', <<'EOC');
- ./perl -e "print qq(a row\n); print qq(another row\n)"
-EOC
- ok;
- @rows = <$f>;
- print "not " unless @rows == 2;
- ok;
- print "not " unless close($f);
- ok;
-}
-
-# 27..30
-if ($Is_VMS) {
- for (27..30) { print "ok $_ # skipped: not Unix fork\n"; $test++;}
-}
-else {
- print "# \$!='$!'\nnot " unless open(my $f, '|-', <<'EOC');
- ./perl -pe "s/^not //"
-EOC
- ok;
- @rows = <$f>;
- print $f "not ok $test\n"; $test++;
- print $f "not ok $test\n"; $test++;
- print "#\nnot " unless close($f);
- sleep 1;
- ok;
-}
-
-# 31..32
-eval <<'EOE' and print "not ";
-open my $f, '<&', 'afile';
-1;
-EOE
-ok;
-$@ =~ /Unknown open\(\) mode \'<&\'/ or print "not ";
-ok;
-
-# local $file tests
-
-# 33..41
-{
- unlink("afile") if -f "afile";
- print "$!\nnot " unless open(local $f,"+>afile");
- ok;
- binmode $f;
- print "not " unless -f "afile";
- ok;
- print "not " unless print $f "SomeData\n";
- ok;
- print "not " unless tell($f) == 9;
- ok;
- print "not " unless seek($f,0,0);
- ok;
- $b = <$f>;
- print "not " unless $b eq "SomeData\n";
- ok;
- print "not " unless -f $f;
- ok;
- eval { die "Message" };
- # warn $@;
- print "not " unless $@ =~ /<\$f> line 1/;
- ok;
- print "not " unless close($f);
- ok;
- unlink("afile");
-}
-
-# 42..44
-{
- print "# \$!='$!'\nnot " unless open(local $f,'>', 'afile');
- ok;
- print $f "a row\n";
- print "not " unless close($f);
- ok;
- print "not " unless -s 'afile' < 10;
- ok;
-}
-
-# 45..47
-{
- print "# \$!='$!'\nnot " unless open(local $f,'>>', 'afile');
- ok;
- print $f "a row\n";
- print "not " unless close($f);
- ok;
- print "not " unless -s 'afile' > 10;
- ok;
-}
-
-# 48..50
-{
- print "# \$!='$!'\nnot " unless open(local $f, '<', 'afile');
- ok;
- @rows = <$f>;
- print "not " unless @rows == 2;
- ok;
- print "not " unless close($f);
- ok;
-}
-
-# 51..55
-{
- print "not " unless -s 'afile' < 20;
- ok;
- print "# \$!='$!'\nnot " unless open(local $f, '+<', 'afile');
- ok;
- @rows = <$f>;
- print "not " unless @rows == 2;
- ok;
- seek $f, 0, 1;
- print $f "yet another row\n";
- print "not " unless close($f);
- ok;
- print "not " unless -s 'afile' > 20;
- ok;
-
- unlink("afile");
-}
-
-# 56..58
-if ($Is_VMS) {
- for (56..58) { print "ok $_ # skipped: not Unix fork\n"; $test++;}
-}
-else {
- print "# \$!='$!'\nnot " unless open(local $f, '-|', <<'EOC');
- ./perl -e "print qq(a row\n); print qq(another row\n)"
-EOC
- ok;
- @rows = <$f>;
- print "not " unless @rows == 2;
- ok;
- print "not " unless close($f);
- ok;
-}
-
-# 59..62
-if ($Is_VMS) {
- for (59..62) { print "ok $_ # skipped: not Unix fork\n"; $test++;}
-}
-else {
- print "# \$!='$!'\nnot " unless open(local $f, '|-', <<'EOC');
- ./perl -pe "s/^not //"
-EOC
- ok;
- @rows = <$f>;
- print $f "not ok $test\n"; $test++;
- print $f "not ok $test\n"; $test++;
- print "#\nnot " unless close($f);
- sleep 1;
- ok;
-}
-
-# 63..64
-eval <<'EOE' and print "not ";
-open local $f, '<&', 'afile';
-1;
-EOE
-ok;
-$@ =~ /Unknown open\(\) mode \'<&\'/ or print "not ";
-ok;
-
-# 65..66
-{
- local *F;
- for (1..2) {
- if ($Is_Dos) {
- open(F, "echo \\#foo|") or print "not ";
- } else {
- open(F, "echo #foo|") or print "not ";
- }
- print <F>;
- close F;
- }
- ok;
- for (1..2) {
- if ($Is_Dos) {
- open(F, "-|", "echo \\#foo") or print "not ";
- } else {
- open(F, "-|", "echo #foo") or print "not ";
- }
- print <F>;
- close F;
- }
- ok;
-}
diff --git a/contrib/perl5/t/io/openpid.t b/contrib/perl5/t/io/openpid.t
deleted file mode 100755
index 7c04a29..0000000
--- a/contrib/perl5/t/io/openpid.t
+++ /dev/null
@@ -1,82 +0,0 @@
-#!./perl
-
-#####################################################################
-#
-# Test for process id return value from open
-# Ronald Schmidt (The Software Path) RonaldWS@software-path.com
-#
-#####################################################################
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- if ($^O eq 'dos') {
- print "1..0 # Skip: no multitasking\n";
- exit 0;
- }
-}
-
-use Config;
-$| = 1;
-$SIG{PIPE} = 'IGNORE';
-
-print "1..10\n";
-
-$perl = qq[$^X "-I../lib"];
-
-#
-# commands run 4 perl programs. Two of these programs write a
-# short message to STDOUT and exit. Two of these programs
-# read from STDIN. One reader never exits and must be killed.
-# the other reader reads one line, waits a few seconds and then
-# exits to test the waitpid function.
-#
-$cmd1 = qq/$perl -e "\$|=1; print qq[first process\\n]; sleep 30;"/;
-$cmd2 = qq/$perl -e "\$|=1; print qq[second process\\n]; sleep 30;"/;
-$cmd3 = qq/$perl -e "print <>;"/; # hangs waiting for end of STDIN
-$cmd4 = qq/$perl -e "print scalar <>;"/;
-
-#warn "#$cmd1\n#$cmd2\n#$cmd3\n#$cmd4\n";
-
-# start the processes
-$pid1 = open(FH1, "$cmd1 |") or print "not ";
-print "ok 1\n";
-$pid2 = open(FH2, "$cmd2 |") or print "not ";
-print "ok 2\n";
-$pid3 = open(FH3, "| $cmd3") or print "not ";
-print "ok 3\n";
-$pid4 = open(FH4, "| $cmd4") or print "not ";
-print "ok 4\n";
-
-print "# pids were $pid1, $pid2, $pid3, $pid4\n";
-
-my $killsig = 'HUP';
-$killsig = 1 unless $Config{sig_name} =~ /\bHUP\b/;
-
-# get message from first process and kill it
-chomp($from_pid1 = scalar(<FH1>));
-print "# child1 returned [$from_pid1]\nnot "
- unless $from_pid1 eq 'first process';
-print "ok 5\n";
-$kill_cnt = kill $killsig, $pid1;
-print "not " unless $kill_cnt == 1;
-print "ok 6\n";
-
-# get message from second process and kill second process and reader process
-chomp($from_pid2 = scalar(<FH2>));
-print "# child2 returned [$from_pid2]\nnot "
- unless $from_pid2 eq 'second process';
-print "ok 7\n";
-$kill_cnt = kill $killsig, $pid2, $pid3;
-print "not " unless $kill_cnt == 2;
-print "ok 8\n";
-
-# send one expected line of text to child process and then wait for it
-select(FH4); $| = 1; select(STDOUT);
-
-print FH4 "ok 9\n";
-print "# waiting for process $pid4 to exit\n";
-$reap_pid = waitpid $pid4, 0;
-print "# reaped pid $reap_pid != $pid4\nnot "
- unless $reap_pid == $pid4;
-print "ok 10\n";
diff --git a/contrib/perl5/t/io/pipe.t b/contrib/perl5/t/io/pipe.t
deleted file mode 100755
index 96935e3..0000000
--- a/contrib/perl5/t/io/pipe.t
+++ /dev/null
@@ -1,176 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- unless ($Config{'d_fork'}) {
- print "1..0 # Skip: no fork\n";
- exit 0;
- }
-}
-
-$| = 1;
-print "1..15\n";
-
-# External program 'tr' assumed.
-open(PIPE, "|-") || (exec 'tr', 'YX', 'ko');
-print PIPE "Xk 1\n";
-print PIPE "oY 2\n";
-close PIPE;
-
-if ($^O eq 'vmesa') {
- # Doesn't work, yet.
- for (3..6) {
- print "ok $_ # skipped\n";
- }
-} else {
- if (open(PIPE, "-|")) {
- while(<PIPE>) {
- s/^not //;
- print;
- }
- close PIPE; # avoid zombies which disrupt test 12
- }
- else {
- # External program 'echo' assumed.
- print STDOUT "not ok 3\n";
- exec 'echo', 'not ok 4';
- }
-
- pipe(READER,WRITER) || die "Can't open pipe";
-
- if ($pid = fork) {
- close WRITER;
- while(<READER>) {
- s/^not //;
- y/A-Z/a-z/;
- print;
- }
- close READER; # avoid zombies which disrupt test 12
- }
- else {
- die "Couldn't fork" unless defined $pid;
- close READER;
- print WRITER "not ok 5\n";
- open(STDOUT,">&WRITER") || die "Can't dup WRITER to STDOUT";
- close WRITER;
- # External program 'echo' assumed.
- exec 'echo', 'not ok 6';
- }
-}
-wait; # Collect from $pid
-
-pipe(READER,WRITER) || die "Can't open pipe";
-close READER;
-
-$SIG{'PIPE'} = 'broken_pipe';
-
-sub broken_pipe {
- $SIG{'PIPE'} = 'IGNORE'; # loop preventer
- print "ok 7\n";
-}
-
-print WRITER "not ok 7\n";
-close WRITER;
-sleep 1;
-print "ok 8\n";
-
-# VMS doesn't like spawning subprocesses that are still connected to
-# STDOUT. Someone should modify tests #9 to #12 to work with VMS.
-
-if ($^O eq 'VMS') {
- print "ok 9 # skipped\n";
- print "ok 10 # skipped\n";
- print "ok 11 # skipped\n";
- print "ok 12 # skipped\n";
- exit;
-}
-
-if ($Config{d_sfio} || $^O eq 'machten' || $^O eq 'beos' || $^O eq 'posix-bc') {
- # Sfio doesn't report failure when closing a broken pipe
- # that has pending output. Go figure. MachTen doesn't either,
- # but won't write to broken pipes, so nothing's pending at close.
- # BeOS will not write to broken pipes, either.
- # Nor does POSIX-BC.
- print "ok 9 # skipped\n";
-}
-else {
- local $SIG{PIPE} = 'IGNORE';
- open NIL, '|true' or die "open failed: $!";
- sleep 5;
- print NIL 'foo' or die "print failed: $!";
- if (close NIL) {
- print "not ok 9\n";
- }
- else {
- print "ok 9\n";
- }
-}
-
-if ($^O eq 'vmesa') {
- # These don't work, yet.
- print "ok 10 # skipped\n";
- print "ok 11 # skipped\n";
- print "ok 12 # skipped\n";
- exit;
-}
-
-# check that errno gets forced to 0 if the piped program exited non-zero
-open NIL, '|exit 23;' or die "fork failed: $!";
-$! = 1;
-if (close NIL) {
- print "not ok 10\n# successful close\n";
-}
-elsif ($! != 0) {
- print "not ok 10\n# errno $!\n";
-}
-elsif ($? == 0) {
- print "not ok 10\n# status 0\n";
-}
-else {
- print "ok 10\n";
-}
-
-if ($^O eq 'mpeix') {
- print "ok 11 # skipped\n";
- print "ok 12 # skipped\n";
-} else {
- # check that status for the correct process is collected
- my $zombie = fork or exit 37;
- my $pipe = open *FH, "sleep 2;exit 13|" or die "Open: $!\n";
- $SIG{ALRM} = sub { return };
- alarm(1);
- my $close = close FH;
- if ($? == 13*256 && ! length $close && ! $!) {
- print "ok 11\n";
- } else {
- print "not ok 11\n# close $close\$?=$? \$!=", $!+0, ":$!\n";
- };
- my $wait = wait;
- if ($? == 37*256 && $wait == $zombie && ! $!) {
- print "ok 12\n";
- } else {
- print "not ok 12\n# pid=$wait first=$pid pipe=$pipe zombie=$zombie me=$$ \$?=$? \$!=", $!+0, ":$!\n";
- }
-}
-
-# Test new semantics for missing command in piped open
-# 19990114 M-J. Dominus mjd@plover.com
-{ local *P;
- print (((open P, "| " ) ? "not " : ""), "ok 13\n");
- print (((open P, " |" ) ? "not " : ""), "ok 14\n");
-}
-
-# check that status is unaffected by implicit close
-{
- local(*NIL);
- open NIL, '|exit 23;' or die "fork failed: $!";
- $? = 42;
- # NIL implicitly closed here
-}
-if ($? != 42) {
- print "# status $?, expected 42\nnot ";
-}
-print "ok 15\n";
-$? = 0;
diff --git a/contrib/perl5/t/io/print.t b/contrib/perl5/t/io/print.t
deleted file mode 100755
index 0578ee6..0000000
--- a/contrib/perl5/t/io/print.t
+++ /dev/null
@@ -1,34 +0,0 @@
-#!./perl
-
-print "1..18\n";
-
-$foo = 'STDOUT';
-print $foo "ok 1\n";
-
-print "ok 2\n","ok 3\n","ok 4\n";
-print STDOUT "ok 5\n";
-
-open(foo,">-");
-print foo "ok 6\n";
-
-printf "ok %d\n",7;
-printf("ok %d\n",8);
-
-@a = ("ok %d%c",9,ord("\n"));
-printf @a;
-
-$a[1] = 10;
-printf STDOUT @a;
-
-$, = ' ';
-$\ = "\n";
-
-print "ok","11";
-
-@x = ("ok","12\nok","13\nok");
-@y = ("15\nok","16");
-print @x,"14\nok",@y;
-{
- local $\ = "ok 17\n# null =>[\000]\nok 18\n";
- print "";
-}
diff --git a/contrib/perl5/t/io/read.t b/contrib/perl5/t/io/read.t
deleted file mode 100755
index b27fde1..0000000
--- a/contrib/perl5/t/io/read.t
+++ /dev/null
@@ -1,26 +0,0 @@
-#!./perl
-
-# $RCSfile$
-
-print "1..1\n";
-
-open(A,"+>a");
-print A "_";
-seek(A,0,0);
-
-$b = "abcd";
-$b = "";
-
-read(A,$b,1,4);
-
-close(A);
-
-unlink("a");
-
-if ($b eq "\000\000\000\000_") {
- print "ok 1\n";
-} else { # Probably "\000bcd_"
- print "not ok 1\n";
-}
-
-unlink 'a';
diff --git a/contrib/perl5/t/io/tell.t b/contrib/perl5/t/io/tell.t
deleted file mode 100755
index c840c92..0000000
--- a/contrib/perl5/t/io/tell.t
+++ /dev/null
@@ -1,94 +0,0 @@
-#!./perl
-
-# $RCSfile: tell.t,v $$Revision$$Date$
-
-print "1..23\n";
-
-$TST = 'tst';
-
-$Is_Dosish = ($^O eq 'MSWin32' or $^O eq 'dos' or
- $^O eq 'os2' or $^O eq 'mint' or $^O eq 'cygwin');
-
-open($TST, 'harness') || (die "Can't open harness");
-binmode $TST if $Is_Dosish;
-if (eof(tst)) { print "not ok 1\n"; } else { print "ok 1\n"; }
-
-$firstline = <$TST>;
-$secondpos = tell;
-
-$x = 0;
-while (<tst>) {
- if (eof) {$x++;}
-}
-if ($x == 1) { print "ok 2\n"; } else { print "not ok 2\n"; }
-
-$lastpos = tell;
-
-unless (eof) { print "not ok 3\n"; } else { print "ok 3\n"; }
-
-if (seek($TST,0,0)) { print "ok 4\n"; } else { print "not ok 4\n"; }
-
-if (eof) { print "not ok 5\n"; } else { print "ok 5\n"; }
-
-if ($firstline eq <tst>) { print "ok 6\n"; } else { print "not ok 6\n"; }
-
-if ($secondpos == tell) { print "ok 7\n"; } else { print "not ok 7\n"; }
-
-if (seek(tst,0,1)) { print "ok 8\n"; } else { print "not ok 8\n"; }
-
-if (eof($TST)) { print "not ok 9\n"; } else { print "ok 9\n"; }
-
-if ($secondpos == tell) { print "ok 10\n"; } else { print "not ok 10\n"; }
-
-if (seek(tst,0,2)) { print "ok 11\n"; } else { print "not ok 11\n"; }
-
-if ($lastpos == tell) { print "ok 12\n"; } else { print "not ok 12\n"; }
-
-unless (eof) { print "not ok 13\n"; } else { print "ok 13\n"; }
-
-if ($. == 0) { print "not ok 14\n"; } else { print "ok 14\n"; }
-
-$curline = $.;
-open(other, 'harness') || (die "Can't open harness: $!");
-binmode other if $^O eq 'MSWin32';
-
-{
- local($.);
-
- if ($. == 0) { print "not ok 15\n"; } else { print "ok 15\n"; }
-
- tell other;
- if ($. == 0) { print "ok 16\n"; } else { print "not ok 16\n"; }
-
- $. = 5;
- scalar <other>;
- if ($. == 6) { print "ok 17\n"; } else { print "not ok 17\n"; }
-}
-
-if ($. == $curline) { print "ok 18\n"; } else { print "not ok 18\n"; }
-
-{
- local($.);
-
- scalar <other>;
- if ($. == 7) { print "ok 19\n"; } else { print "not ok 19\n"; }
-}
-
-if ($. == $curline) { print "ok 20\n"; } else { print "not ok 20\n"; }
-
-{
- local($.);
-
- tell other;
- if ($. == 7) { print "ok 21\n"; } else { print "not ok 21\n"; }
-}
-
-close(other);
-if (tell(other) == -1) { print "ok 22\n"; } else { print "not ok 22\n"; }
-
-if (tell(ether) == -1) { print "ok 23\n"; } else { print "not ok 23\n"; }
-
-# ftell(STDIN) (or any std streams) is undefined, it can return -1 or
-# something else. ftell() on pipes, fifos, and sockets is defined to
-# return -1.
-
diff --git a/contrib/perl5/t/lib/abbrev.t b/contrib/perl5/t/lib/abbrev.t
deleted file mode 100755
index fb5a984..0000000
--- a/contrib/perl5/t/lib/abbrev.t
+++ /dev/null
@@ -1,51 +0,0 @@
-#!./perl
-
-print "1..7\n";
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Text::Abbrev;
-
-print "ok 1\n";
-
-# old style as reference
-local(%x);
-my @z = qw(list edit send abort gripe listen);
-abbrev(*x, @z);
-my $r = join ':', sort keys %x;
-print "not " if exists $x{'l'} ||
- exists $x{'li'} ||
- exists $x{'lis'};
-print "ok 2\n";
-
-print "not " unless $x{'list'} eq 'list' &&
- $x{'liste'} eq 'listen' &&
- $x{'listen'} eq 'listen';
-print "ok 3\n";
-
-print "not " unless $x{'a'} eq 'abort' &&
- $x{'ab'} eq 'abort' &&
- $x{'abo'} eq 'abort' &&
- $x{'abor'} eq 'abort' &&
- $x{'abort'} eq 'abort';
-print "ok 4\n";
-
-my $test = 5;
-
-# wantarray
-my %y = abbrev @z;
-my $s = join ':', sort keys %y;
-print (($r eq $s)?"ok $test\n":"not ok $test\n"); $test++;
-
-my $y = abbrev @z;
-$s = join ':', sort keys %$y;
-print (($r eq $s)?"ok $test\n":"not ok $test\n"); $test++;
-
-%y = ();
-abbrev \%y, @z;
-
-$s = join ':', sort keys %y;
-print (($r eq $s)?"ok $test\n":"not ok $test\n"); $test++;
diff --git a/contrib/perl5/t/lib/ansicolor.t b/contrib/perl5/t/lib/ansicolor.t
deleted file mode 100755
index f38e905..0000000
--- a/contrib/perl5/t/lib/ansicolor.t
+++ /dev/null
@@ -1,81 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-# Test suite for the Term::ANSIColor Perl module. Before `make install' is
-# performed this script should be runnable with `make test'. After `make
-# install' it should work as `perl test.pl'.
-
-############################################################################
-# Ensure module can be loaded
-############################################################################
-
-BEGIN { $| = 1; print "1..8\n" }
-END { print "not ok 1\n" unless $loaded }
-use Term::ANSIColor qw(:constants color colored);
-$loaded = 1;
-print "ok 1\n";
-
-
-############################################################################
-# Test suite
-############################################################################
-
-# Test simple color attributes.
-if (color ('blue on_green', 'bold') eq "\e[34;42;1m") {
- print "ok 2\n";
-} else {
- print "not ok 2\n";
-}
-
-# Test colored.
-if (colored ("testing", 'blue', 'bold') eq "\e[34;1mtesting\e[0m") {
- print "ok 3\n";
-} else {
- print "not ok 3\n";
-}
-
-# Test the constants.
-if (BLUE BOLD "testing" eq "\e[34m\e[1mtesting") {
- print "ok 4\n";
-} else {
- print "not ok 4\n";
-}
-
-# Test AUTORESET.
-$Term::ANSIColor::AUTORESET = 1;
-if (BLUE BOLD "testing" eq "\e[34m\e[1mtesting\e[0m\e[0m") {
- print "ok 5\n";
-} else {
- print "not ok 5\n";
-}
-
-# Test EACHLINE.
-$Term::ANSIColor::EACHLINE = "\n";
-if (colored ("test\n\ntest", 'bold')
- eq "\e[1mtest\e[0m\n\n\e[1mtest\e[0m") {
- print "ok 6\n";
-} else {
- print colored ("test\n\ntest", 'bold'), "\n";
- print "not ok 6\n";
-}
-
-# Test EACHLINE with multiple trailing delimiters.
-$Term::ANSIColor::EACHLINE = "\r\n";
-if (colored ("test\ntest\r\r\n\r\n", 'bold')
- eq "\e[1mtest\ntest\r\e[0m\r\n\r\n") {
- print "ok 7\n";
-} else {
- print "not ok 7\n";
-}
-
-# Test the array ref form.
-$Term::ANSIColor::EACHLINE = "\n";
-if (colored (['bold', 'on_green'], "test\n", "\n", "test")
- eq "\e[1;42mtest\e[0m\n\n\e[1;42mtest\e[0m") {
- print "ok 8\n";
-} else {
- print colored (['bold', 'on_green'], "test\n", "\n", "test");
- print "not ok 8\n";
-}
diff --git a/contrib/perl5/t/lib/anydbm.t b/contrib/perl5/t/lib/anydbm.t
deleted file mode 100755
index 40c4366..0000000
--- a/contrib/perl5/t/lib/anydbm.t
+++ /dev/null
@@ -1,155 +0,0 @@
-#!./perl
-
-# $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if (($Config{'extensions'} !~ /\b(DB|[A-Z]DBM)_File\b/) ){
- print "1..0 # Skipping (no DB_File or [A-Z]DBM_File)\n";
- exit 0;
- }
-}
-require AnyDBM_File;
-use Fcntl;
-
-print "1..12\n";
-
-$Is_Dosish = ($^O eq 'amigaos' || $^O eq 'MSWin32' or $^O eq 'dos' or
- $^O eq 'os2' or $^O eq 'mint');
-
-unlink <Op_dbmx*>;
-
-umask(0);
-print (tie(%h,AnyDBM_File,'Op_dbmx', O_RDWR|O_CREAT, 0640)
- ? "ok 1\n" : "not ok 1\n");
-
-$Dfile = "Op_dbmx.pag";
-if (! -e $Dfile) {
- ($Dfile) = <Op_dbmx*>;
-}
-if ($Is_Dosish) {
- print "ok 2 # Skipped: different file permission semantics\n";
-}
-else {
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
- print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n");
-}
-while (($key,$value) = each(%h)) {
- $i++;
-}
-print (!$i ? "ok 3\n" : "not ok 3 # i=$i\n\n");
-
-$h{'goner1'} = 'snork';
-
-$h{'abc'} = 'ABC';
-$h{'def'} = 'DEF';
-$h{'jkl','mno'} = "JKL\034MNO";
-$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
-$h{'a'} = 'A';
-$h{'b'} = 'B';
-$h{'c'} = 'C';
-$h{'d'} = 'D';
-$h{'e'} = 'E';
-$h{'f'} = 'F';
-$h{'g'} = 'G';
-$h{'h'} = 'H';
-$h{'i'} = 'I';
-
-$h{'goner2'} = 'snork';
-delete $h{'goner2'};
-
-untie(%h);
-print (tie(%h,AnyDBM_File,'Op_dbmx', O_RDWR, 0640) ? "ok 4\n" : "not ok 4\n");
-
-$h{'j'} = 'J';
-$h{'k'} = 'K';
-$h{'l'} = 'L';
-$h{'m'} = 'M';
-$h{'n'} = 'N';
-$h{'o'} = 'O';
-$h{'p'} = 'P';
-$h{'q'} = 'Q';
-$h{'r'} = 'R';
-$h{'s'} = 'S';
-$h{'t'} = 'T';
-$h{'u'} = 'U';
-$h{'v'} = 'V';
-$h{'w'} = 'W';
-$h{'x'} = 'X';
-$h{'y'} = 'Y';
-$h{'z'} = 'Z';
-
-$h{'goner3'} = 'snork';
-
-delete $h{'goner1'};
-delete $h{'goner3'};
-
-@keys = keys(%h);
-@values = values(%h);
-
-if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";}
-
-while (($key,$value) = each(%h)) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";}
-
-@keys = ('blurfl', keys(%h), 'dyick');
-if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";}
-
-$h{'foo'} = '';
-$h{''} = 'bar';
-
-# check cache overflow and numeric keys and contents
-$ok = 1;
-for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; }
-for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; }
-print ($ok ? "ok 8\n" : "not ok 8\n");
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-print ($size > 0 ? "ok 9\n" : "not ok 9\n");
-
-@h{0..200} = 200..400;
-@foo = @h{0..200};
-print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n";
-
-print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n");
-if ($h{''} eq 'bar') {
- print "ok 12\n" ;
-}
-else {
- if ($AnyDBM_File::ISA[0] eq 'DB_File' && $DB_File::db_ver >= 2.004010) {
- ($major, $minor, $patch) = ($DB_File::db_ver =~ /^(\d+)\.(\d\d\d)(\d\d\d)/) ;
- $major =~ s/^0+// ;
- $minor =~ s/^0+// ;
- $patch =~ s/^0+// ;
- $compact = "$major.$minor.$patch" ;
- #
- # anydbm.t test 12 will fail when AnyDBM_File uses the combination of
- # DB_File and Berkeley DB 2.4.10 (or greater).
- # You are using DB_File $DB_File::VERSION and Berkeley DB $compact
- #
- # Berkeley DB 2 from version 2.4.10 onwards does not allow null keys.
- # This feature will be reenabled in a future version of Berkeley DB.
- #
- print "ok 12 # skipped: db v$compact, no null key support\n" ;
- }
- else {
- print "not ok 12\n" ;
- }
-}
-
-untie %h;
-if ($^O eq 'VMS') {
- unlink 'Op_dbmx.sdbm_dir', $Dfile;
-} else {
- unlink 'Op_dbmx.dir', $Dfile;
-}
diff --git a/contrib/perl5/t/lib/attrs.t b/contrib/perl5/t/lib/attrs.t
deleted file mode 100755
index 440122c..0000000
--- a/contrib/perl5/t/lib/attrs.t
+++ /dev/null
@@ -1,138 +0,0 @@
-#!./perl
-
-# Regression tests for attrs.pm and the C<sub x : attrs> syntax.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- eval 'require attrs; 1' or do {
- print "1..0\n";
- exit 0;
- }
-}
-
-sub NTESTS () ;
-
-my $test, $ntests;
-BEGIN {$ntests=0}
-$test=0;
-my $failed = 0;
-
-print "1..".NTESTS."\n";
-
-eval 'sub t1 ($) { use attrs "locked"; $_[0]++ }';
-(print "not "), $failed=1 if $@;
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-eval 'sub t2 { use attrs "locked"; $_[0]++ }';
-(print "not "), $failed=1 if $@;
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-eval 'sub t3 ($) : locked ;';
-(print "not "), $failed=1 if $@;
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-eval 'sub t4 : locked ;';
-(print "not "), $failed=1 if $@;
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-my $anon1;
-eval '$anon1 = sub ($) { use attrs qw(locked method); $_[0]++ }';
-(print "not "), $failed=1 if $@;
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-my $anon2;
-eval '$anon2 = sub { use attrs qw(locked method); $_[0]++ }';
-(print "not "), $failed=1 if $@;
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-my $anon3;
-eval '$anon3 = sub { use attrs "method"; $_[0]->[1] }';
-(print "not "), $failed=1 if $@;
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-my @attrs = attrs::get($anon3 ? $anon3 : \&ns);
-(print "not "), $failed=1 unless "@attrs" eq "method";
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-@attrs = sort +attrs::get($anon2 ? $anon2 : \&ns);
-(print "not "), $failed=1 unless "@attrs" eq "locked method";
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-@attrs = sort +attrs::get($anon1 ? $anon1 : \&ns);
-(print "not "), $failed=1 unless "@attrs" eq "locked method";
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-eval 'sub e1 ($) : plugh ;';
-unless ($@ && $@ =~ m/^Invalid CODE attribute: ["']?plugh["']? at/) {
- my $x = $@;
- $x =~ s/\n.*\z//s;
- print "# $x\n";
- print "not ";
- $failed = 1;
-}
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-eval 'sub e2 ($) : plugh(0,0) xyzzy ;';
-unless ($@ && $@ =~ m/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /) {
- my $x = $@;
- $x =~ s/\n.*\z//s;
- print "# $x\n";
- print "not ";
- $failed = 1;
-}
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-eval 'sub e3 ($) : plugh(0,0 xyzzy ;';
-unless ($@ && $@ =~ m/Unterminated attribute parameter in attribute list at/) {
- my $x = $@;
- $x =~ s/\n.*\z//s;
- print "# $x\n";
- print "not ";
- $failed = 1;
-}
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-eval 'sub e4 ($) : plugh + xyzzy ;';
-unless ($@ && $@ =~ m/Invalid separator character '[+]' in attribute list at/) {
- my $x = $@;
- $x =~ s/\n.*\z//s;
- print "# $x\n";
- print "not ";
- $failed = 1;
-}
-print "ok ",++$test,"\n";
-BEGIN {++$ntests}
-
-{
- my $w = "" ;
- local $SIG{__WARN__} = sub {$w = @_[0]} ;
- eval 'sub w1 ($) { use warnings "deprecated"; use attrs "locked"; $_[0]++ }';
- (print "not "), $failed=1 if $@;
- print "ok ",++$test,"\n";
- BEGIN {++$ntests}
- (print "not "), $failed=1
- if $w !~ /^pragma "attrs" is deprecated, use "sub NAME : ATTRS" instead at/;
- print "ok ",++$test,"\n";
- BEGIN {++$ntests}
-}
-
-
-# Other tests should be added above this line
-
-sub NTESTS () { $ntests }
-
-exit $failed;
diff --git a/contrib/perl5/t/lib/autoloader.t b/contrib/perl5/t/lib/autoloader.t
deleted file mode 100755
index b53b9fe..0000000
--- a/contrib/perl5/t/lib/autoloader.t
+++ /dev/null
@@ -1,122 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- $dir = "auto-$$";
- @INC = $dir;
- push @INC, '../lib';
-}
-
-print "1..11\n";
-
-# First we must set up some autoloader files
-mkdir $dir, 0755 or die "Can't mkdir $dir: $!";
-mkdir "$dir/auto", 0755 or die "Can't mkdir: $!";
-mkdir "$dir/auto/Foo", 0755 or die "Can't mkdir: $!";
-
-open(FOO, ">$dir/auto/Foo/foo.al") or die;
-print FOO <<'EOT';
-package Foo;
-sub foo { shift; shift || "foo" }
-1;
-EOT
-close(FOO);
-
-open(BAR, ">$dir/auto/Foo/bar.al") or die;
-print BAR <<'EOT';
-package Foo;
-sub bar { shift; shift || "bar" }
-1;
-EOT
-close(BAR);
-
-open(BAZ, ">$dir/auto/Foo/bazmarkhian.al") or die;
-print BAZ <<'EOT';
-package Foo;
-sub bazmarkhianish { shift; shift || "baz" }
-1;
-EOT
-close(BAZ);
-
-# Let's define the package
-package Foo;
-require AutoLoader;
-@ISA=qw(AutoLoader);
-
-sub new { bless {}, shift };
-
-package main;
-
-$foo = new Foo;
-
-print "not " unless $foo->foo eq 'foo'; # autoloaded first time
-print "ok 1\n";
-
-print "not " unless $foo->foo eq 'foo'; # regular call
-print "ok 2\n";
-
-# Try an undefined method
-eval {
- $foo->will_fail;
-};
-print "not " unless $@ =~ /^Can't locate/;
-print "ok 3\n";
-
-# Used to be trouble with this
-eval {
- my $foo = new Foo;
- die "oops";
-};
-print "not " unless $@ =~ /oops/;
-print "ok 4\n";
-
-# Pass regular expression variable to autoloaded function. This used
-# to go wrong because AutoLoader used regular expressions to generate
-# autoloaded filename.
-"foo" =~ /(\w+)/;
-print "not " unless $1 eq 'foo';
-print "ok 5\n";
-
-print "not " unless $foo->bar($1) eq 'foo';
-print "ok 6\n";
-
-print "not " unless $foo->bar($1) eq 'foo';
-print "ok 7\n";
-
-print "not " unless $foo->bazmarkhianish($1) eq 'foo';
-print "ok 8\n";
-
-print "not " unless $foo->bazmarkhianish($1) eq 'foo';
-print "ok 9\n";
-
-# test recursive autoloads
-open(F, ">$dir/auto/Foo/a.al") or die;
-print F <<'EOT';
-package Foo;
-BEGIN { b() }
-sub a { print "ok 11\n"; }
-1;
-EOT
-close(F);
-
-open(F, ">$dir/auto/Foo/b.al") or die;
-print F <<'EOT';
-package Foo;
-sub b { print "ok 10\n"; }
-1;
-EOT
-close(F);
-Foo::a();
-
-# cleanup
-END {
-return unless $dir && -d $dir;
-unlink "$dir/auto/Foo/foo.al";
-unlink "$dir/auto/Foo/bar.al";
-unlink "$dir/auto/Foo/bazmarkhian.al";
-unlink "$dir/auto/Foo/a.al";
-unlink "$dir/auto/Foo/b.al";
-rmdir "$dir/auto/Foo";
-rmdir "$dir/auto";
-rmdir "$dir";
-}
diff --git a/contrib/perl5/t/lib/b.t b/contrib/perl5/t/lib/b.t
deleted file mode 100755
index 22156c2..0000000
--- a/contrib/perl5/t/lib/b.t
+++ /dev/null
@@ -1,163 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($^O eq 'MacOS') {
- @INC = qw(: ::lib ::macos:lib);
- } else {
- @INC = '.';
- push @INC, '../lib';
- }
-}
-
-$| = 1;
-use warnings;
-use strict;
-use Config;
-
-print "1..15\n";
-
-my $test = 1;
-
-sub ok { print "ok $test\n"; $test++ }
-
-use B::Deparse;
-my $deparse = B::Deparse->new() or print "not ";
-ok;
-
-print "not " if "{\n 1;\n}" ne $deparse->coderef2text(sub {1});
-ok;
-
-print "not " if "{\n '???';\n 2;\n}" ne
- $deparse->coderef2text(sub {1;2});
-ok;
-
-print "not " if "{\n \$test /= 2 if ++\$test;\n}" ne
- $deparse->coderef2text(sub {++$test and $test/=2;});
-ok;
-{
-my $a = <<'EOF';
-{
- $test = sub : lvalue {
- my $x;
- }
- ;
-}
-EOF
-chomp $a;
-print "not " if $deparse->coderef2text(sub{$test = sub : lvalue{my $x}}) ne $a;
-ok;
-
-$a =~ s/lvalue/method/;
-print "not " if $deparse->coderef2text(sub{$test = sub : method{my $x}}) ne $a;
-ok;
-
-$a =~ s/method/locked method/;
-print "not " if $deparse->coderef2text(sub{$test = sub : method locked {my $x}})
- ne $a;
-ok;
-}
-
-my $a;
-my $Is_VMS = $^O eq 'VMS';
-my $Is_MacOS = $^O eq 'MacOS';
-
-my $path = join " ", map { qq["-I$_"] } @INC;
-my $redir = $Is_MacOS ? "" : "2>&1";
-
-$a = `$^X $path "-MO=Deparse" -anle 1 $redir`;
-$a =~ s/-e syntax OK\n//g;
-$a =~ s{\\340\\242}{\\s} if (ord("\\") == 224); # EBCDIC, cp 1047 or 037
-$a =~ s{\\274\\242}{\\s} if (ord("\\") == 188); # $^O eq 'posix-bc'
-$b = <<'EOF';
-
-LINE: while (defined($_ = <ARGV>)) {
- chomp $_;
- @F = split(/\s+/, $_, 0);
- '???';
-}
-
-EOF
-print "# [$a]\n\# vs\n# [$b]\nnot " if $a ne $b;
-ok;
-
-#6
-$a = `$^X $path "-MO=Debug" -e 1 $redir`;
-print "not " unless $a =~
-/\bLISTOP\b.*\bOP\b.*\bCOP\b.*\bOP\b/s;
-ok;
-
-#7
-$a = `$^X $path "-MO=Terse" -e 1 $redir`;
-print "not " unless $a =~
-/\bLISTOP\b.*leave.*\n OP\b.*enter.*\n COP\b.*nextstate.*\n OP\b.*null/s;
-ok;
-
-$a = `$^X $path "-MO=Terse" -ane "s/foo/bar/" $redir`;
-$a =~ s/\(0x[^)]+\)//g;
-$a =~ s/\[[^\]]+\]//g;
-$a =~ s/-e syntax OK//;
-$a =~ s/[^a-z ]+//g;
-$a =~ s/\s+/ /g;
-$a =~ s/\b(s|foo|bar|ullsv)\b\s?//g;
-$a =~ s/^\s+//;
-$a =~ s/\s+$//;
-my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define';
-if ($is_thread) {
- $b=<<EOF;
-leave enter nextstate label leaveloop enterloop null and defined null
-threadsv readline gv lineseq nextstate aassign null pushmark split pushre
-threadsv const null pushmark rvav gv nextstate subst const unstack nextstate
-EOF
-} else {
- $b=<<EOF;
-leave enter nextstate label leaveloop enterloop null and defined null
-null gvsv readline gv lineseq nextstate aassign null pushmark split pushre
-null gvsv const null pushmark rvav gv nextstate subst const unstack nextstate
-EOF
-}
-$b=~s/\n/ /g;$b=~s/\s+/ /g;
-$b =~ s/\s+$//;
-print "# [$a]\n# vs\n# [$b]\nnot " if $a ne $b;
-ok;
-
-chomp($a = `$^X $path "-MB::Stash" "-Mwarnings" -e1`);
-$a = join ',', sort split /,/, $a;
-$a =~ s/-uWin32,// if $^O eq 'MSWin32';
-$a =~ s/-u(Cwd|File|File::Copy|OS2),//g if $^O eq 'os2';
-$a =~ s/-uCwd,// if $^O eq 'cygwin';
-if ($Config{static_ext} eq ' ') {
- $b = '-uCarp,-uCarp::Heavy,-uDB,-uExporter,-uExporter::Heavy,-uattributes,'
- . '-umain,-uwarnings';
- if (ord('A') == 193) { # EBCDIC sort order is qw(a A) not qw(A a)
- $b = join ',', sort split /,/, $b;
- }
- print "# [$a] vs [$b]\nnot " if $a ne $b;
- ok;
-} else {
- print "ok $test # skipped: one or more static extensions\n"; $test++;
-}
-
-if ($is_thread) {
- print "# use5005threads: test $test skipped\n";
-} else {
- $a = `$^X $path "-MO=Showlex" -e "my %one" $redir`;
- if (ord('A') != 193) { # ASCIIish
- print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%one.*sv_undef.*HV/s;
- }
- else { # EBCDICish C<1: PVNV (0x1a7ede34) "%\226\225\205">
- print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%\\[0-9].*sv_undef.*HV/s;
- }
-}
-ok;
-
-# Bug 20001204.07
-{
-my $foo = $deparse->coderef2text(sub { { 234; }});
-# Constants don't get optimised here.
-print "not " unless $foo =~ /{.*{.*234;.*}.*}/sm;
-ok;
-$foo = $deparse->coderef2text(sub { { 234; } continue { 123; } });
-print "not " unless $foo =~ /{.*{.*234;.*}.*continue.*{.*123.*}/sm;
-ok;
-}
diff --git a/contrib/perl5/t/lib/basename.t b/contrib/perl5/t/lib/basename.t
deleted file mode 100755
index 9bee1bf..0000000
--- a/contrib/perl5/t/lib/basename.t
+++ /dev/null
@@ -1,144 +0,0 @@
-#!./perl -T
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use File::Basename qw(fileparse basename dirname);
-
-print "1..41\n";
-
-# import correctly?
-print +(defined(&basename) && !defined(&fileparse_set_fstype) ?
- '' : 'not '),"ok 1\n";
-
-# set fstype -- should replace non-null default
-print +(length(File::Basename::fileparse_set_fstype('unix')) ?
- '' : 'not '),"ok 2\n";
-
-# Unix syntax tests
-($base,$path,$type) = fileparse('/virgil/aeneid/draft.book7','\.book\d+');
-if ($base eq 'draft' and $path eq '/virgil/aeneid/' and $type eq '.book7') {
- print "ok 3\n";
-}
-else {
- print "not ok 3 |$base|$path|$type|\n";
-}
-print +(basename('/arma/virumque.cano') eq 'virumque.cano' ?
- '' : 'not '),"ok 4\n";
-print +(dirname('/arma/virumque.cano') eq '/arma' ? '' : 'not '),"ok 5\n";
-print +(dirname('arma/') eq '.' ? '' : 'not '),"ok 6\n";
-print +(dirname('/') eq '/' ? '' : 'not '),"ok 7\n";
-
-
-# set fstype -- should replace non-null default
-print +(File::Basename::fileparse_set_fstype('VMS') eq 'unix' ?
- '' : 'not '),"ok 8\n";
-
-# VMS syntax tests
-($base,$path,$type) = fileparse('virgil:[aeneid]draft.book7','\.book\d+');
-if ($base eq 'draft' and $path eq 'virgil:[aeneid]' and $type eq '.book7') {
- print "ok 9\n";
-}
-else {
- print "not ok 9 |$base|$path|$type|\n";
-}
-print +(basename('arma:[virumque]cano.trojae') eq 'cano.trojae' ?
- '' : 'not '),"ok 10\n";
-print +(dirname('arma:[virumque]cano.trojae') eq 'arma:[virumque]' ?
- '' : 'not '),"ok 11\n";
-print +(dirname('arma:<virumque>cano.trojae') eq 'arma:<virumque>' ?
- '' : 'not '),"ok 12\n";
-print +(dirname('arma:virumque.cano') eq 'arma:' ? '' : 'not '),"ok 13\n";
-$ENV{DEFAULT} = '' unless exists $ENV{DEFAULT};
-print +(dirname('virumque.cano') eq $ENV{DEFAULT} ? '' : 'not '),"ok 14\n";
-print +(dirname('arma/') eq '.' ? '' : 'not '),"ok 15\n";
-
-# set fstype -- should replace non-null default
-print +(File::Basename::fileparse_set_fstype('MSDOS') eq 'VMS' ?
- '' : 'not '),"ok 16\n";
-
-# MSDOS syntax tests
-($base,$path,$type) = fileparse('C:\\virgil\\aeneid\\draft.book7','\.book\d+');
-if ($base eq 'draft' and $path eq 'C:\\virgil\\aeneid\\' and $type eq '.book7') {
- print "ok 17\n";
-}
-else {
- print "not ok 17 |$base|$path|$type|\n";
-}
-print +(basename('A:virumque\\cano.trojae') eq 'cano.trojae' ?
- '' : 'not '),"ok 18\n";
-print +(dirname('A:\\virumque\\cano.trojae') eq 'A:\\virumque' ?
- '' : 'not '),"ok 19\n";
-print +(dirname('A:\\') eq 'A:\\' ? '' : 'not '),"ok 20\n";
-print +(dirname('arma\\') eq '.' ? '' : 'not '),"ok 21\n";
-
-# Yes "/" is a legal path separator under MSDOS
-basename("lib/File/Basename.pm") eq "Basename.pm" or print "not ";
-print "ok 22\n";
-
-
-
-# set fstype -- should replace non-null default
-print +(File::Basename::fileparse_set_fstype('MacOS') eq 'MSDOS' ?
- '' : 'not '),"ok 23\n";
-
-# MacOS syntax tests
-($base,$path,$type) = fileparse('virgil:aeneid:draft.book7','\.book\d+');
-if ($base eq 'draft' and $path eq 'virgil:aeneid:' and $type eq '.book7') {
- print "ok 24\n";
-}
-else {
- print "not ok 24 |$base|$path|$type|\n";
-}
-print +(basename(':arma:virumque:cano.trojae') eq 'cano.trojae' ?
- '' : 'not '),"ok 25\n";
-print +(dirname(':arma:virumque:cano.trojae') eq ':arma:virumque:' ?
- '' : 'not '),"ok 26\n";
-print +(dirname(':arma:virumque:') eq ':arma:' ? '' : 'not '),"ok 27\n";
-print +(dirname(':arma:virumque') eq ':arma:' ? '' : 'not '),"ok 28\n";
-print +(dirname(':arma:') eq ':' ? '' : 'not '),"ok 29\n";
-print +(dirname(':arma') eq ':' ? '' : 'not '),"ok 30\n";
-print +(dirname('arma:') eq 'arma:' ? '' : 'not '),"ok 31\n";
-print +(dirname('arma') eq ':' ? '' : 'not '),"ok 32\n";
-print +(dirname(':') eq ':' ? '' : 'not '),"ok 33\n";
-
-
-# Check quoting of metacharacters in suffix arg by basename()
-print +(basename(':arma:virumque:cano.trojae','.trojae') eq 'cano' ?
- '' : 'not '),"ok 34\n";
-print +(basename(':arma:virumque:cano_trojae','.trojae') eq 'cano_trojae' ?
- '' : 'not '),"ok 35\n";
-
-# extra tests for a few specific bugs
-
-File::Basename::fileparse_set_fstype 'MSDOS';
-# perl5.003_18 gives C:/perl/.\
-print +((fileparse 'C:/perl/lib')[1] eq 'C:/perl/' ? '' : 'not '), "ok 36\n";
-# perl5.003_18 gives C:\perl\
-print +(dirname('C:\\perl\\lib\\') eq 'C:\\perl' ? '' : 'not '), "ok 37\n";
-
-File::Basename::fileparse_set_fstype 'UNIX';
-# perl5.003_18 gives '.'
-print +(dirname('/perl/') eq '/' ? '' : 'not '), "ok 38\n";
-# perl5.003_18 gives '/perl/lib'
-print +(dirname('/perl/lib//') eq '/perl' ? '' : 'not '), "ok 39\n";
-
-# The empty tainted value, for tainting strings
-my $TAINT = substr($^X, 0, 0);
-# How to identify taint when you see it
-sub any_tainted (@) {
- not eval { join("",@_), kill 0; 1 };
-}
-sub tainted ($) {
- any_tainted @_;
-}
-sub all_tainted (@) {
- for (@_) { return 0 unless tainted $_ }
- 1;
-}
-
-print +(tainted(dirname($TAINT.'/perl/lib//')) ? '' : 'not '), "ok 40\n";
-print +(all_tainted(fileparse($TAINT.'/dir/draft.book7','\.book\d+'))
- ? '' : 'not '), "ok 41\n";
diff --git a/contrib/perl5/t/lib/bigfloat.t b/contrib/perl5/t/lib/bigfloat.t
deleted file mode 100755
index 8e0a0ef..0000000
--- a/contrib/perl5/t/lib/bigfloat.t
+++ /dev/null
@@ -1,408 +0,0 @@
-#!./perl
-
-BEGIN { @INC = '../lib' }
-require "bigfloat.pl";
-
-$test = 0;
-$| = 1;
-print "1..355\n";
-while (<DATA>) {
- chop;
- if (/^&/) {
- $f = $_;
- } elsif (/^\$.*/) {
- eval "$_;";
- } else {
- ++$test;
- @args = split(/:/,$_,99);
- $ans = pop(@args);
- $try = "$f('" . join("','", @args) . "');";
- if (($ans1 = eval($try)) eq $ans) {
- print "ok $test\n";
- } else {
- print "not ok $test\n";
- print "# '$try' expected: '$ans' got: '$ans1'\n";
- }
- }
-}
-__END__
-&fnorm
-abc:NaN
- 1 a:NaN
-1bcd2:NaN
-11111b:NaN
-+1z:NaN
--1z:NaN
-0:+0E+0
-+0:+0E+0
-+00:+0E+0
-+0 0 0:+0E+0
-000000 0000000 00000:+0E+0
--0:+0E+0
--0000:+0E+0
-+1:+1E+0
-+01:+1E+0
-+001:+1E+0
-+00000100000:+1E+5
-123456789:+123456789E+0
--1:-1E+0
--01:-1E+0
--001:-1E+0
--123456789:-123456789E+0
--00000100000:-1E+5
-123.456a:NaN
-123.456:+123456E-3
-0.01:+1E-2
-.002:+2E-3
--0.0003:-3E-4
--.0000000004:-4E-10
-123456E2:+123456E+2
-123456E-2:+123456E-2
--123456E2:-123456E+2
--123456E-2:-123456E-2
-1e1:+1E+1
-2e-11:+2E-11
--3e111:-3E+111
--4e-1111:-4E-1111
-&fneg
-abd:NaN
-+0:+0E+0
-+1:-1E+0
--1:+1E+0
-+123456789:-123456789E+0
--123456789:+123456789E+0
-+123.456789:-123456789E-6
--123456.789:+123456789E-3
-&fabs
-abc:NaN
-+0:+0E+0
-+1:+1E+0
--1:+1E+0
-+123456789:+123456789E+0
--123456789:+123456789E+0
-+123.456789:+123456789E-6
--123456.789:+123456789E-3
-&fround
-$bigfloat::rnd_mode = 'trunc'
-+10123456789:5:+10123E+6
--10123456789:5:-10123E+6
-+10123456789:9:+101234567E+2
--10123456789:9:-101234567E+2
-+101234500:6:+101234E+3
--101234500:6:-101234E+3
-$bigfloat::rnd_mode = 'zero'
-+20123456789:5:+20123E+6
--20123456789:5:-20123E+6
-+20123456789:9:+201234568E+2
--20123456789:9:-201234568E+2
-+201234500:6:+201234E+3
--201234500:6:-201234E+3
-$bigfloat::rnd_mode = '+inf'
-+30123456789:5:+30123E+6
--30123456789:5:-30123E+6
-+30123456789:9:+301234568E+2
--30123456789:9:-301234568E+2
-+301234500:6:+301235E+3
--301234500:6:-301234E+3
-$bigfloat::rnd_mode = '-inf'
-+40123456789:5:+40123E+6
--40123456789:5:-40123E+6
-+40123456789:9:+401234568E+2
--40123456789:9:-401234568E+2
-+401234500:6:+401234E+3
--401234500:6:-401235E+3
-$bigfloat::rnd_mode = 'odd'
-+50123456789:5:+50123E+6
--50123456789:5:-50123E+6
-+50123456789:9:+501234568E+2
--50123456789:9:-501234568E+2
-+501234500:6:+501235E+3
--501234500:6:-501235E+3
-$bigfloat::rnd_mode = 'even'
-+60123456789:5:+60123E+6
--60123456789:5:-60123E+6
-+60123456789:9:+601234568E+2
--60123456789:9:-601234568E+2
-+601234500:6:+601234E+3
--601234500:6:-601234E+3
-&ffround
-$bigfloat::rnd_mode = 'trunc'
-+1.23:-1:+12E-1
--1.23:-1:-12E-1
-+1.27:-1:+12E-1
--1.27:-1:-12E-1
-+1.25:-1:+12E-1
--1.25:-1:-12E-1
-+1.35:-1:+13E-1
--1.35:-1:-13E-1
--0.006:-1:+0E+0
--0.006:-2:+0E+0
-$bigfloat::rnd_mode = 'zero'
-+2.23:-1:+22E-1
--2.23:-1:-22E-1
-+2.27:-1:+23E-1
--2.27:-1:-23E-1
-+2.25:-1:+22E-1
--2.25:-1:-22E-1
-+2.35:-1:+23E-1
--2.35:-1:-23E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-6E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-$bigfloat::rnd_mode = '+inf'
-+3.23:-1:+32E-1
--3.23:-1:-32E-1
-+3.27:-1:+33E-1
--3.27:-1:-33E-1
-+3.25:-1:+33E-1
--3.25:-1:-32E-1
-+3.35:-1:+34E-1
--3.35:-1:-33E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-6E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-$bigfloat::rnd_mode = '-inf'
-+4.23:-1:+42E-1
--4.23:-1:-42E-1
-+4.27:-1:+43E-1
--4.27:-1:-43E-1
-+4.25:-1:+42E-1
--4.25:-1:-43E-1
-+4.35:-1:+43E-1
--4.35:-1:-44E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-7E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-$bigfloat::rnd_mode = 'odd'
-+5.23:-1:+52E-1
--5.23:-1:-52E-1
-+5.27:-1:+53E-1
--5.27:-1:-53E-1
-+5.25:-1:+53E-1
--5.25:-1:-53E-1
-+5.35:-1:+53E-1
--5.35:-1:-53E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-7E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-$bigfloat::rnd_mode = 'even'
-+6.23:-1:+62E-1
--6.23:-1:-62E-1
-+6.27:-1:+63E-1
--6.27:-1:-63E-1
-+6.25:-1:+62E-1
--6.25:-1:-62E-1
-+6.35:-1:+64E-1
--6.35:-1:-64E-1
--0.0065:-1:+0E+0
--0.0065:-2:-1E-2
--0.0065:-3:-6E-3
--0.0065:-4:-65E-4
--0.0065:-5:-65E-4
-&fcmp
-abc:abc:
-abc:+0:
-+0:abc:
-+0:+0:0
--1:+0:-1
-+0:-1:1
-+1:+0:1
-+0:+1:-1
--1:+1:-1
-+1:-1:1
--1:-1:0
-+1:+1:0
-+123:+123:0
-+123:+12:1
-+12:+123:-1
--123:-123:0
--123:-12:-1
--12:-123:1
-+123:+124:-1
-+124:+123:1
--123:-124:1
--124:-123:-1
-&fadd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0E+0
-+1:+0:+1E+0
-+0:+1:+1E+0
-+1:+1:+2E+0
--1:+0:-1E+0
-+0:-1:-1E+0
--1:-1:-2E+0
--1:+1:+0E+0
-+1:-1:+0E+0
-+9:+1:+1E+1
-+99:+1:+1E+2
-+999:+1:+1E+3
-+9999:+1:+1E+4
-+99999:+1:+1E+5
-+999999:+1:+1E+6
-+9999999:+1:+1E+7
-+99999999:+1:+1E+8
-+999999999:+1:+1E+9
-+9999999999:+1:+1E+10
-+99999999999:+1:+1E+11
-+10:-1:+9E+0
-+100:-1:+99E+0
-+1000:-1:+999E+0
-+10000:-1:+9999E+0
-+100000:-1:+99999E+0
-+1000000:-1:+999999E+0
-+10000000:-1:+9999999E+0
-+100000000:-1:+99999999E+0
-+1000000000:-1:+999999999E+0
-+10000000000:-1:+9999999999E+0
-+123456789:+987654321:+111111111E+1
--123456789:+987654321:+864197532E+0
--123456789:-987654321:-111111111E+1
-+123456789:-987654321:-864197532E+0
-&fsub
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0E+0
-+1:+0:+1E+0
-+0:+1:-1E+0
-+1:+1:+0E+0
--1:+0:-1E+0
-+0:-1:+1E+0
--1:-1:+0E+0
--1:+1:-2E+0
-+1:-1:+2E+0
-+9:+1:+8E+0
-+99:+1:+98E+0
-+999:+1:+998E+0
-+9999:+1:+9998E+0
-+99999:+1:+99998E+0
-+999999:+1:+999998E+0
-+9999999:+1:+9999998E+0
-+99999999:+1:+99999998E+0
-+999999999:+1:+999999998E+0
-+9999999999:+1:+9999999998E+0
-+99999999999:+1:+99999999998E+0
-+10:-1:+11E+0
-+100:-1:+101E+0
-+1000:-1:+1001E+0
-+10000:-1:+10001E+0
-+100000:-1:+100001E+0
-+1000000:-1:+1000001E+0
-+10000000:-1:+10000001E+0
-+100000000:-1:+100000001E+0
-+1000000000:-1:+1000000001E+0
-+10000000000:-1:+10000000001E+0
-+123456789:+987654321:-864197532E+0
--123456789:+987654321:-111111111E+1
--123456789:-987654321:+864197532E+0
-+123456789:-987654321:+111111111E+1
-&fmul
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0E+0
-+0:+1:+0E+0
-+1:+0:+0E+0
-+0:-1:+0E+0
--1:+0:+0E+0
-+123456789123456789:+0:+0E+0
-+0:+123456789123456789:+0E+0
--1:-1:+1E+0
--1:+1:-1E+0
-+1:-1:-1E+0
-+1:+1:+1E+0
-+2:+3:+6E+0
--2:+3:-6E+0
-+2:-3:-6E+0
--2:-3:+6E+0
-+111:+111:+12321E+0
-+10101:+10101:+102030201E+0
-+1001001:+1001001:+1002003002001E+0
-+100010001:+100010001:+10002000300020001E+0
-+10000100001:+10000100001:+100002000030000200001E+0
-+11111111111:+9:+99999999999E+0
-+22222222222:+9:+199999999998E+0
-+33333333333:+9:+299999999997E+0
-+44444444444:+9:+399999999996E+0
-+55555555555:+9:+499999999995E+0
-+66666666666:+9:+599999999994E+0
-+77777777777:+9:+699999999993E+0
-+88888888888:+9:+799999999992E+0
-+99999999999:+9:+899999999991E+0
-&fdiv
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:+0E+0
-+1:+0:NaN
-+0:-1:+0E+0
--1:+0:NaN
-+1:+1:+1E+0
--1:-1:+1E+0
-+1:-1:-1E+0
--1:+1:-1E+0
-+1:+2:+5E-1
-+2:+1:+2E+0
-+10:+5:+2E+0
-+100:+4:+25E+0
-+1000:+8:+125E+0
-+10000:+16:+625E+0
-+10000:-16:-625E+0
-+999999999999:+9:+111111111111E+0
-+999999999999:+99:+10101010101E+0
-+999999999999:+999:+1001001001E+0
-+999999999999:+9999:+100010001E+0
-+999999999999999:+99999:+10000100001E+0
-+1000000000:+9:+1111111111111111111111111111111111111111E-31
-+2000000000:+9:+2222222222222222222222222222222222222222E-31
-+3000000000:+9:+3333333333333333333333333333333333333333E-31
-+4000000000:+9:+4444444444444444444444444444444444444444E-31
-+5000000000:+9:+5555555555555555555555555555555555555556E-31
-+6000000000:+9:+6666666666666666666666666666666666666667E-31
-+7000000000:+9:+7777777777777777777777777777777777777778E-31
-+8000000000:+9:+8888888888888888888888888888888888888889E-31
-+9000000000:+9:+1E+9
-+35500000:+113:+3141592920353982300884955752212389380531E-34
-+71000000:+226:+3141592920353982300884955752212389380531E-34
-+106500000:+339:+3141592920353982300884955752212389380531E-34
-+1000000000:+3:+3333333333333333333333333333333333333333E-31
-$bigfloat::div_scale = 20
-+1000000000:+9:+11111111111111111111E-11
-+2000000000:+9:+22222222222222222222E-11
-+3000000000:+9:+33333333333333333333E-11
-+4000000000:+9:+44444444444444444444E-11
-+5000000000:+9:+55555555555555555556E-11
-+6000000000:+9:+66666666666666666667E-11
-+7000000000:+9:+77777777777777777778E-11
-+8000000000:+9:+88888888888888888889E-11
-+9000000000:+9:+1E+9
-+35500000:+113:+314159292035398230088E-15
-+71000000:+226:+314159292035398230088E-15
-+106500000:+339:+31415929203539823009E-14
-+1000000000:+3:+33333333333333333333E-11
-$bigfloat::div_scale = 40
-&fsqrt
-+0:+0E+0
--1:NaN
--2:NaN
--16:NaN
--123.456:NaN
-+1:+1E+0
-+1.44:+12E-1
-+2:+141421356237309504880168872420969807857E-38
-+4:+2E+0
-+16:+4E+0
-+100:+1E+1
-+123.456:+1111107555549866648462149404118219234119E-38
-+15241.383936:+123456E-3
diff --git a/contrib/perl5/t/lib/bigfltpm.t b/contrib/perl5/t/lib/bigfltpm.t
deleted file mode 100755
index aa45651..0000000
--- a/contrib/perl5/t/lib/bigfltpm.t
+++ /dev/null
@@ -1,478 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Math::BigFloat;
-
-$test = 0;
-$| = 1;
-print "1..370\n";
-while (<DATA>) {
- chop;
- if (s/^&//) {
- $f = $_;
- } elsif (/^\$.*/) {
- eval "$_;";
- } else {
- ++$test;
- if (m|^(.*?):(/.+)$|) {
- $ans = $2;
- @args = split(/:/,$1,99);
- }
- else {
- @args = split(/:/,$_,99);
- $ans = pop(@args);
- }
- $try = "\$x = new Math::BigFloat \"$args[0]\";";
- if ($f eq "fnorm"){
- $try .= "\$x+0;";
- } elsif ($f eq "fneg") {
- $try .= "-\$x;";
- } elsif ($f eq "fabs") {
- $try .= "abs \$x;";
- } elsif ($f eq "fround") {
- $try .= "0+\$x->fround($args[1]);";
- } elsif ($f eq "ffround") {
- $try .= "0+\$x->ffround($args[1]);";
- } elsif ($f eq "fsqrt") {
- $try .= "0+\$x->fsqrt;";
- } else {
- $try .= "\$y = new Math::BigFloat \"$args[1]\";";
- if ($f eq "fcmp") {
- $try .= "\$x <=> \$y;";
- } elsif ($f eq "fadd") {
- $try .= "\$x + \$y;";
- } elsif ($f eq "fsub") {
- $try .= "\$x - \$y;";
- } elsif ($f eq "fmul") {
- $try .= "\$x * \$y;";
- } elsif ($f eq "fdiv") {
- $try .= "\$x / \$y;";
- } elsif ($f eq "fmod") {
- $try .= "\$x % \$y;";
- } else { warn "Unknown op"; }
- }
- #print ">>>",$try,"<<<\n";
- $ans1 = eval $try;
- if ($ans =~ m|^/(.*)$|) {
- my $pat = $1;
- if ($ans1 =~ /$pat/) {
- print "ok $test\n";
- }
- else {
- print "not ok $test\n";
- print "# '$try' expected: /$pat/ got: '$ans1'\n";
- }
- }
- else {
-
- $ans1_str = defined $ans1? "$ans1" : "";
- if ($ans1_str eq $ans) { #bug!
- print "ok $test\n";
- } else {
- print "not ok $test\n";
- print "# '$try' expected: '$ans' got: '$ans1'\n";
- }
- }
- }
-}
-__END__
-&fnorm
-abc:NaN
- 1 a:NaN
-1bcd2:NaN
-11111b:NaN
-+1z:NaN
--1z:NaN
-0:0.
-+0:0.
-+00:0.
-+0 0 0:0.
-000000 0000000 00000:0.
--0:0.
--0000:0.
-+1:1.
-+01:1.
-+001:1.
-+00000100000:100000.
-123456789:123456789.
--1:-1.
--01:-1.
--001:-1.
--123456789:-123456789.
--00000100000:-100000.
-123.456a:NaN
-123.456:123.456
-0.01:.01
-.002:.002
--0.0003:-.0003
--.0000000004:-.0000000004
-123456E2:12345600.
-123456E-2:1234.56
--123456E2:-12345600.
--123456E-2:-1234.56
-1e1:10.
-2e-11:.00000000002
--3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.
--4e-1111:-.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
-&fneg
-abc:NaN
-+0:0.
-+1:-1.
--1:1.
-+123456789:-123456789.
--123456789:123456789.
-+123.456789:-123.456789
--123456.789:123456.789
-&fabs
-abc:NaN
-+0:0.
-+1:1.
--1:1.
-+123456789:123456789.
--123456789:123456789.
-+123.456789:123.456789
--123456.789:123456.789
-&fround
-$Math::BigFloat::rnd_mode = 'trunc'
-+10123456789:5:10123000000
--10123456789:5:-10123000000
-+10123456789:9:10123456700
--10123456789:9:-10123456700
-+101234500:6:101234000
--101234500:6:-101234000
-$Math::BigFloat::rnd_mode = 'zero'
-+20123456789:5:20123000000
--20123456789:5:-20123000000
-+20123456789:9:20123456800
--20123456789:9:-20123456800
-+201234500:6:201234000
--201234500:6:-201234000
-$Math::BigFloat::rnd_mode = '+inf'
-+30123456789:5:30123000000
--30123456789:5:-30123000000
-+30123456789:9:30123456800
--30123456789:9:-30123456800
-+301234500:6:301235000
--301234500:6:-301234000
-$Math::BigFloat::rnd_mode = '-inf'
-+40123456789:5:40123000000
--40123456789:5:-40123000000
-+40123456789:9:40123456800
--40123456789:9:-40123456800
-+401234500:6:401234000
--401234500:6:-401235000
-$Math::BigFloat::rnd_mode = 'odd'
-+50123456789:5:50123000000
--50123456789:5:-50123000000
-+50123456789:9:50123456800
--50123456789:9:-50123456800
-+501234500:6:501235000
--501234500:6:-501235000
-$Math::BigFloat::rnd_mode = 'even'
-+60123456789:5:60123000000
--60123456789:5:-60123000000
-+60123456789:9:60123456800
--60123456789:9:-60123456800
-+601234500:6:601234000
--601234500:6:-601234000
-&ffround
-$Math::BigFloat::rnd_mode = 'trunc'
-+1.23:-1:1.2
--1.23:-1:-1.2
-+1.27:-1:1.2
--1.27:-1:-1.2
-+1.25:-1:1.2
--1.25:-1:-1.2
-+1.35:-1:1.3
--1.35:-1:-1.3
--0.006:-1:0
--0.006:-2:0
--0.0065:-3:/-0\.006|-6e-03
--0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
--0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
-$Math::BigFloat::rnd_mode = 'zero'
-+2.23:-1:/2.2(?:0{5}\d+)?
--2.23:-1:/-2.2(?:0{5}\d+)?
-+2.27:-1:/2.(?:3|29{5}\d+)
--2.27:-1:/-2.(?:3|29{5}\d+)
-+2.25:-1:/2.2(?:0{5}\d+)?
--2.25:-1:/-2.2(?:0{5}\d+)?
-+2.35:-1:/2.(?:3|29{5}\d+)
--2.35:-1:/-2.(?:3|29{5}\d+)
--0.0065:-1:0
--0.0065:-2:/-0\.01|-1e-02
--0.0065:-3:/-0\.006|-6e-03
--0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
--0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
-$Math::BigFloat::rnd_mode = '+inf'
-+3.23:-1:/3.2(?:0{5}\d+)?
--3.23:-1:/-3.2(?:0{5}\d+)?
-+3.27:-1:/3.(?:3|29{5}\d+)
--3.27:-1:/-3.(?:3|29{5}\d+)
-+3.25:-1:/3.(?:3|29{5}\d+)
--3.25:-1:/-3.2(?:0{5}\d+)?
-+3.35:-1:/3.(?:4|39{5}\d+)
--3.35:-1:/-3.(?:3|29{5}\d+)
--0.0065:-1:0
--0.0065:-2:/-0\.01|-1e-02
--0.0065:-3:/-0\.006|-6e-03
--0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
--0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
-$Math::BigFloat::rnd_mode = '-inf'
-+4.23:-1:/4.2(?:0{5}\d+)?
--4.23:-1:/-4.2(?:0{5}\d+)?
-+4.27:-1:/4.(?:3|29{5}\d+)
--4.27:-1:/-4.(?:3|29{5}\d+)
-+4.25:-1:/4.2(?:0{5}\d+)?
--4.25:-1:/-4.(?:3|29{5}\d+)
-+4.35:-1:/4.(?:3|29{5}\d+)
--4.35:-1:/-4.(?:4|39{5}\d+)
--0.0065:-1:0
--0.0065:-2:/-0\.01|-1e-02
--0.0065:-3:/-0\.007|-7e-03
--0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
--0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
-$Math::BigFloat::rnd_mode = 'odd'
-+5.23:-1:/5.2(?:0{5}\d+)?
--5.23:-1:/-5.2(?:0{5}\d+)?
-+5.27:-1:/5.(?:3|29{5}\d+)
--5.27:-1:/-5.(?:3|29{5}\d+)
-+5.25:-1:/5.(?:3|29{5}\d+)
--5.25:-1:/-5.(?:3|29{5}\d+)
-+5.35:-1:/5.(?:3|29{5}\d+)
--5.35:-1:/-5.(?:3|29{5}\d+)
--0.0065:-1:0
--0.0065:-2:/-0\.01|-1e-02
--0.0065:-3:/-0\.007|-7e-03
--0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
--0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
-$Math::BigFloat::rnd_mode = 'even'
-+6.23:-1:/6.2(?:0{5}\d+)?
--6.23:-1:/-6.2(?:0{5}\d+)?
-+6.27:-1:/6.(?:3|29{5}\d+)
--6.27:-1:/-6.(?:3|29{5}\d+)
-+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
--6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
-+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
--6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
--0.0065:-1:0
--0.0065:-2:/-0\.01|-1e-02
--0.0065:-3:/-0\.006|-7e-03
--0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
--0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
-&fcmp
-abc:abc:
-abc:+0:
-+0:abc:
-+0:+0:0
--1:+0:-1
-+0:-1:1
-+1:+0:1
-+0:+1:-1
--1:+1:-1
-+1:-1:1
--1:-1:0
-+1:+1:0
--1.1:0:-1
-+0:-1.1:1
-+1.1:+0:1
-+0:+1.1:-1
-+123:+123:0
-+123:+12:1
-+12:+123:-1
--123:-123:0
--123:-12:-1
--12:-123:1
-+123:+124:-1
-+124:+123:1
--123:-124:1
--124:-123:-1
-&fadd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:0.
-+1:+0:1.
-+0:+1:1.
-+1:+1:2.
--1:+0:-1.
-+0:-1:-1.
--1:-1:-2.
--1:+1:0.
-+1:-1:0.
-+9:+1:10.
-+99:+1:100.
-+999:+1:1000.
-+9999:+1:10000.
-+99999:+1:100000.
-+999999:+1:1000000.
-+9999999:+1:10000000.
-+99999999:+1:100000000.
-+999999999:+1:1000000000.
-+9999999999:+1:10000000000.
-+99999999999:+1:100000000000.
-+10:-1:9.
-+100:-1:99.
-+1000:-1:999.
-+10000:-1:9999.
-+100000:-1:99999.
-+1000000:-1:999999.
-+10000000:-1:9999999.
-+100000000:-1:99999999.
-+1000000000:-1:999999999.
-+10000000000:-1:9999999999.
-+123456789:+987654321:1111111110.
--123456789:+987654321:864197532.
--123456789:-987654321:-1111111110.
-+123456789:-987654321:-864197532.
-&fsub
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:0.
-+1:+0:1.
-+0:+1:-1.
-+1:+1:0.
--1:+0:-1.
-+0:-1:1.
--1:-1:0.
--1:+1:-2.
-+1:-1:2.
-+9:+1:8.
-+99:+1:98.
-+999:+1:998.
-+9999:+1:9998.
-+99999:+1:99998.
-+999999:+1:999998.
-+9999999:+1:9999998.
-+99999999:+1:99999998.
-+999999999:+1:999999998.
-+9999999999:+1:9999999998.
-+99999999999:+1:99999999998.
-+10:-1:11.
-+100:-1:101.
-+1000:-1:1001.
-+10000:-1:10001.
-+100000:-1:100001.
-+1000000:-1:1000001.
-+10000000:-1:10000001.
-+100000000:-1:100000001.
-+1000000000:-1:1000000001.
-+10000000000:-1:10000000001.
-+123456789:+987654321:-864197532.
--123456789:+987654321:-1111111110.
--123456789:-987654321:864197532.
-+123456789:-987654321:1111111110.
-&fmul
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:0.
-+0:+1:0.
-+1:+0:0.
-+0:-1:0.
--1:+0:0.
-+123456789123456789:+0:0.
-+0:+123456789123456789:0.
--1:-1:1.
--1:+1:-1.
-+1:-1:-1.
-+1:+1:1.
-+2:+3:6.
--2:+3:-6.
-+2:-3:-6.
--2:-3:6.
-+111:+111:12321.
-+10101:+10101:102030201.
-+1001001:+1001001:1002003002001.
-+100010001:+100010001:10002000300020001.
-+10000100001:+10000100001:100002000030000200001.
-+11111111111:+9:99999999999.
-+22222222222:+9:199999999998.
-+33333333333:+9:299999999997.
-+44444444444:+9:399999999996.
-+55555555555:+9:499999999995.
-+66666666666:+9:599999999994.
-+77777777777:+9:699999999993.
-+88888888888:+9:799999999992.
-+99999999999:+9:899999999991.
-&fdiv
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:0.
-+1:+0:NaN
-+0:-1:0.
--1:+0:NaN
-+1:+1:1.
--1:-1:1.
-+1:-1:-1.
--1:+1:-1.
-+1:+2:.5
-+2:+1:2.
-+10:+5:2.
-+100:+4:25.
-+1000:+8:125.
-+10000:+16:625.
-+10000:-16:-625.
-+999999999999:+9:111111111111.
-+999999999999:+99:10101010101.
-+999999999999:+999:1001001001.
-+999999999999:+9999:100010001.
-+999999999999999:+99999:10000100001.
-+1000000000:+9:111111111.1111111111111111111111111111111
-+2000000000:+9:222222222.2222222222222222222222222222222
-+3000000000:+9:333333333.3333333333333333333333333333333
-+4000000000:+9:444444444.4444444444444444444444444444444
-+5000000000:+9:555555555.5555555555555555555555555555556
-+6000000000:+9:666666666.6666666666666666666666666666667
-+7000000000:+9:777777777.7777777777777777777777777777778
-+8000000000:+9:888888888.8888888888888888888888888888889
-+9000000000:+9:1000000000.
-+35500000:+113:314159.2920353982300884955752212389380531
-+71000000:+226:314159.2920353982300884955752212389380531
-+106500000:+339:314159.2920353982300884955752212389380531
-+1000000000:+3:333333333.3333333333333333333333333333333
-$Math::BigFloat::div_scale = 20
-+1000000000:+9:111111111.11111111111
-+2000000000:+9:222222222.22222222222
-+3000000000:+9:333333333.33333333333
-+4000000000:+9:444444444.44444444444
-+5000000000:+9:555555555.55555555556
-+6000000000:+9:666666666.66666666667
-+7000000000:+9:777777777.77777777778
-+8000000000:+9:888888888.88888888889
-+9000000000:+9:1000000000.
-+35500000:+113:314159.292035398230088
-+71000000:+226:314159.292035398230088
-+106500000:+339:314159.29203539823009
-+1000000000:+3:333333333.33333333333
-$Math::BigFloat::div_scale = 40
-&fsqrt
-+0:0
--1:/^(?i:0|\?|NaNQ?)$
--2:/^(?i:0|\?|NaNQ?)$
--16:/^(?i:0|\?|NaNQ?)$
--123.456:/^(?i:0|\?|NaNQ?)$
-+1:1.
-+1.44:1.2
-+2:1.41421356237309504880168872420969807857
-+4:2.
-+16:4.
-+100:10.
-+123.456:11.11107555549866648462149404118219234119
-+15241.383936:123.456
-&fmod
-+0:0:NaN
-+0:1:0.
-+3:1:0.
-+5:2:1.
-+9:4:1.
-+9:5:4.
-+9000:56:40.
-+56:9000:56.
diff --git a/contrib/perl5/t/lib/bigint.t b/contrib/perl5/t/lib/bigint.t
deleted file mode 100755
index 034c5c6..0000000
--- a/contrib/perl5/t/lib/bigint.t
+++ /dev/null
@@ -1,282 +0,0 @@
-#!./perl
-
-BEGIN { @INC = '../lib' }
-require "bigint.pl";
-
-$test = 0;
-$| = 1;
-print "1..246\n";
-while (<DATA>) {
- chop;
- if (/^&/) {
- $f = $_;
- } else {
- ++$test;
- @args = split(/:/,$_,99);
- $ans = pop(@args);
- $try = "$f('" . join("','", @args) . "');";
- if (($ans1 = eval($try)) eq $ans) {
- print "ok $test\n";
- } else {
- print "not ok $test\n";
- print "# '$try' expected: '$ans' got: '$ans1'\n";
- }
- }
-}
-__END__
-&bnorm
-abc:NaN
- 1 a:NaN
-1bcd2:NaN
-11111b:NaN
-+1z:NaN
--1z:NaN
-0:+0
-+0:+0
-+00:+0
-+0 0 0:+0
-000000 0000000 00000:+0
--0:+0
--0000:+0
-+1:+1
-+01:+1
-+001:+1
-+00000100000:+100000
-123456789:+123456789
--1:-1
--01:-1
--001:-1
--123456789:-123456789
--00000100000:-100000
-&bneg
-abd:NaN
-+0:+0
-+1:-1
--1:+1
-+123456789:-123456789
--123456789:+123456789
-&babs
-abc:NaN
-+0:+0
-+1:+1
--1:+1
-+123456789:+123456789
--123456789:+123456789
-&bcmp
-abc:abc:
-abc:+0:
-+0:abc:
-+0:+0:0
--1:+0:-1
-+0:-1:1
-+1:+0:1
-+0:+1:-1
--1:+1:-1
-+1:-1:1
--1:-1:0
-+1:+1:0
-+123:+123:0
-+123:+12:1
-+12:+123:-1
--123:-123:0
--123:-12:-1
--12:-123:1
-+123:+124:-1
-+124:+123:1
--123:-124:1
--124:-123:-1
-&badd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+1:+0:+1
-+0:+1:+1
-+1:+1:+2
--1:+0:-1
-+0:-1:-1
--1:-1:-2
--1:+1:+0
-+1:-1:+0
-+9:+1:+10
-+99:+1:+100
-+999:+1:+1000
-+9999:+1:+10000
-+99999:+1:+100000
-+999999:+1:+1000000
-+9999999:+1:+10000000
-+99999999:+1:+100000000
-+999999999:+1:+1000000000
-+9999999999:+1:+10000000000
-+99999999999:+1:+100000000000
-+10:-1:+9
-+100:-1:+99
-+1000:-1:+999
-+10000:-1:+9999
-+100000:-1:+99999
-+1000000:-1:+999999
-+10000000:-1:+9999999
-+100000000:-1:+99999999
-+1000000000:-1:+999999999
-+10000000000:-1:+9999999999
-+123456789:+987654321:+1111111110
--123456789:+987654321:+864197532
--123456789:-987654321:-1111111110
-+123456789:-987654321:-864197532
-&bsub
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+1:+0:+1
-+0:+1:-1
-+1:+1:+0
--1:+0:-1
-+0:-1:+1
--1:-1:+0
--1:+1:-2
-+1:-1:+2
-+9:+1:+8
-+99:+1:+98
-+999:+1:+998
-+9999:+1:+9998
-+99999:+1:+99998
-+999999:+1:+999998
-+9999999:+1:+9999998
-+99999999:+1:+99999998
-+999999999:+1:+999999998
-+9999999999:+1:+9999999998
-+99999999999:+1:+99999999998
-+10:-1:+11
-+100:-1:+101
-+1000:-1:+1001
-+10000:-1:+10001
-+100000:-1:+100001
-+1000000:-1:+1000001
-+10000000:-1:+10000001
-+100000000:-1:+100000001
-+1000000000:-1:+1000000001
-+10000000000:-1:+10000000001
-+123456789:+987654321:-864197532
--123456789:+987654321:-1111111110
--123456789:-987654321:+864197532
-+123456789:-987654321:+1111111110
-&bmul
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+0:+1:+0
-+1:+0:+0
-+0:-1:+0
--1:+0:+0
-+123456789123456789:+0:+0
-+0:+123456789123456789:+0
--1:-1:+1
--1:+1:-1
-+1:-1:-1
-+1:+1:+1
-+2:+3:+6
--2:+3:-6
-+2:-3:-6
--2:-3:+6
-+111:+111:+12321
-+10101:+10101:+102030201
-+1001001:+1001001:+1002003002001
-+100010001:+100010001:+10002000300020001
-+10000100001:+10000100001:+100002000030000200001
-+11111111111:+9:+99999999999
-+22222222222:+9:+199999999998
-+33333333333:+9:+299999999997
-+44444444444:+9:+399999999996
-+55555555555:+9:+499999999995
-+66666666666:+9:+599999999994
-+77777777777:+9:+699999999993
-+88888888888:+9:+799999999992
-+99999999999:+9:+899999999991
-&bdiv
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:+0
-+1:+0:NaN
-+0:-1:+0
--1:+0:NaN
-+1:+1:+1
--1:-1:+1
-+1:-1:-1
--1:+1:-1
-+1:+2:+0
-+2:+1:+2
-+1000000000:+9:+111111111
-+2000000000:+9:+222222222
-+3000000000:+9:+333333333
-+4000000000:+9:+444444444
-+5000000000:+9:+555555555
-+6000000000:+9:+666666666
-+7000000000:+9:+777777777
-+8000000000:+9:+888888888
-+9000000000:+9:+1000000000
-+35500000:+113:+314159
-+71000000:+226:+314159
-+106500000:+339:+314159
-+1000000000:+3:+333333333
-+10:+5:+2
-+100:+4:+25
-+1000:+8:+125
-+10000:+16:+625
-+999999999999:+9:+111111111111
-+999999999999:+99:+10101010101
-+999999999999:+999:+1001001001
-+999999999999:+9999:+100010001
-+999999999999999:+99999:+10000100001
-&bmod
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:+0
-+1:+0:NaN
-+0:-1:+0
--1:+0:NaN
-+1:+1:+0
--1:-1:+0
-+1:-1:+0
--1:+1:+0
-+1:+2:+1
-+2:+1:+0
-+1000000000:+9:+1
-+2000000000:+9:+2
-+3000000000:+9:+3
-+4000000000:+9:+4
-+5000000000:+9:+5
-+6000000000:+9:+6
-+7000000000:+9:+7
-+8000000000:+9:+8
-+9000000000:+9:+0
-+35500000:+113:+33
-+71000000:+226:+66
-+106500000:+339:+99
-+1000000000:+3:+1
-+10:+5:+0
-+100:+4:+0
-+1000:+8:+0
-+10000:+16:+0
-+999999999999:+9:+0
-+999999999999:+99:+0
-+999999999999:+999:+0
-+999999999999:+9999:+0
-+999999999999999:+99999:+0
-&bgcd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+0:+1:+1
-+1:+0:+1
-+1:+1:+1
-+2:+3:+1
-+3:+2:+1
-+100:+625:+25
-+4096:+81:+1
diff --git a/contrib/perl5/t/lib/bigintpm.t b/contrib/perl5/t/lib/bigintpm.t
deleted file mode 100755
index e76f246..0000000
--- a/contrib/perl5/t/lib/bigintpm.t
+++ /dev/null
@@ -1,377 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Math::BigInt;
-
-$test = 0;
-$| = 1;
-print "1..278\n";
-while (<DATA>) {
- chop;
- if (s/^&//) {
- $f = $_;
- } else {
- ++$test;
- @args = split(/:/,$_,99);
- $ans = pop(@args);
- $try = "\$x = new Math::BigInt \"$args[0]\";";
- if ($f eq "bnorm"){
- $try .= "\$x+0;";
- } elsif ($f eq "bneg") {
- $try .= "-\$x;";
- } elsif ($f eq "babs") {
- $try .= "abs \$x;";
- } else {
- $try .= "\$y = new Math::BigInt \"$args[1]\";";
- if ($f eq "bcmp"){
- $try .= "\$x <=> \$y;";
- }elsif ($f eq "badd"){
- $try .= "\$x + \$y;";
- }elsif ($f eq "bsub"){
- $try .= "\$x - \$y;";
- }elsif ($f eq "bmul"){
- $try .= "\$x * \$y;";
- }elsif ($f eq "bdiv"){
- $try .= "\$x / \$y;";
- }elsif ($f eq "bmod"){
- $try .= "\$x % \$y;";
- }elsif ($f eq "bgcd"){
- $try .= "Math::BigInt::bgcd(\$x, \$y);";
- }elsif ($f eq "blsft"){
- $try .= "\$x << \$y;";
- }elsif ($f eq "brsft"){
- $try .= "\$x >> \$y;";
- }elsif ($f eq "band"){
- $try .= "\$x & \$y;";
- }elsif ($f eq "bior"){
- $try .= "\$x | \$y;";
- }elsif ($f eq "bxor"){
- $try .= "\$x ^ \$y;";
- }elsif ($f eq "bnot"){
- $try .= "~\$x;";
- } else { warn "Unknown op"; }
- }
- #print ">>>",$try,"<<<\n";
- $ans1 = eval $try;
- if ("$ans1" eq $ans) { #bug!
- print "ok $test\n";
- } else {
- print "not ok $test\n";
- print "# '$try' expected: '$ans' got: '$ans1'\n";
- }
- }
-}
-
-{
- use Math::BigInt ':constant';
-
- $test++;
- print "not "
- unless 2**150 eq "+1427247692705959881058285969449495136382746624";
- print "ok $test\n";
- $test++;
- @a = ();
- for ($i = 1; $i < 10; $i++) {
- push @a, $i;
- }
- print "not " unless "@a" eq "+1 +2 +3 +4 +5 +6 +7 +8 +9";
- print "ok $test\n";
-}
-
-__END__
-&bnorm
-abc:NaN
- 1 a:NaN
-1bcd2:NaN
-11111b:NaN
-+1z:NaN
--1z:NaN
-0:+0
-+0:+0
-+00:+0
-+0 0 0:+0
-000000 0000000 00000:+0
--0:+0
--0000:+0
-+1:+1
-+01:+1
-+001:+1
-+00000100000:+100000
-123456789:+123456789
--1:-1
--01:-1
--001:-1
--123456789:-123456789
--00000100000:-100000
-&bneg
-abd:NaN
-+0:+0
-+1:-1
--1:+1
-+123456789:-123456789
--123456789:+123456789
-&babs
-abc:NaN
-+0:+0
-+1:+1
--1:+1
-+123456789:+123456789
--123456789:+123456789
-&bcmp
-abc:abc:
-abc:+0:
-+0:abc:
-+0:+0:0
--1:+0:-1
-+0:-1:1
-+1:+0:1
-+0:+1:-1
--1:+1:-1
-+1:-1:1
--1:-1:0
-+1:+1:0
-+123:+123:0
-+123:+12:1
-+12:+123:-1
--123:-123:0
--123:-12:-1
--12:-123:1
-+123:+124:-1
-+124:+123:1
--123:-124:1
--124:-123:-1
-+100:+5:1
-&badd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+1:+0:+1
-+0:+1:+1
-+1:+1:+2
--1:+0:-1
-+0:-1:-1
--1:-1:-2
--1:+1:+0
-+1:-1:+0
-+9:+1:+10
-+99:+1:+100
-+999:+1:+1000
-+9999:+1:+10000
-+99999:+1:+100000
-+999999:+1:+1000000
-+9999999:+1:+10000000
-+99999999:+1:+100000000
-+999999999:+1:+1000000000
-+9999999999:+1:+10000000000
-+99999999999:+1:+100000000000
-+10:-1:+9
-+100:-1:+99
-+1000:-1:+999
-+10000:-1:+9999
-+100000:-1:+99999
-+1000000:-1:+999999
-+10000000:-1:+9999999
-+100000000:-1:+99999999
-+1000000000:-1:+999999999
-+10000000000:-1:+9999999999
-+123456789:+987654321:+1111111110
--123456789:+987654321:+864197532
--123456789:-987654321:-1111111110
-+123456789:-987654321:-864197532
-&bsub
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+1:+0:+1
-+0:+1:-1
-+1:+1:+0
--1:+0:-1
-+0:-1:+1
--1:-1:+0
--1:+1:-2
-+1:-1:+2
-+9:+1:+8
-+99:+1:+98
-+999:+1:+998
-+9999:+1:+9998
-+99999:+1:+99998
-+999999:+1:+999998
-+9999999:+1:+9999998
-+99999999:+1:+99999998
-+999999999:+1:+999999998
-+9999999999:+1:+9999999998
-+99999999999:+1:+99999999998
-+10:-1:+11
-+100:-1:+101
-+1000:-1:+1001
-+10000:-1:+10001
-+100000:-1:+100001
-+1000000:-1:+1000001
-+10000000:-1:+10000001
-+100000000:-1:+100000001
-+1000000000:-1:+1000000001
-+10000000000:-1:+10000000001
-+123456789:+987654321:-864197532
--123456789:+987654321:-1111111110
--123456789:-987654321:+864197532
-+123456789:-987654321:+1111111110
-&bmul
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+0:+1:+0
-+1:+0:+0
-+0:-1:+0
--1:+0:+0
-+123456789123456789:+0:+0
-+0:+123456789123456789:+0
--1:-1:+1
--1:+1:-1
-+1:-1:-1
-+1:+1:+1
-+2:+3:+6
--2:+3:-6
-+2:-3:-6
--2:-3:+6
-+111:+111:+12321
-+10101:+10101:+102030201
-+1001001:+1001001:+1002003002001
-+100010001:+100010001:+10002000300020001
-+10000100001:+10000100001:+100002000030000200001
-+11111111111:+9:+99999999999
-+22222222222:+9:+199999999998
-+33333333333:+9:+299999999997
-+44444444444:+9:+399999999996
-+55555555555:+9:+499999999995
-+66666666666:+9:+599999999994
-+77777777777:+9:+699999999993
-+88888888888:+9:+799999999992
-+99999999999:+9:+899999999991
-&bdiv
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:+0
-+1:+0:NaN
-+0:-1:+0
--1:+0:NaN
-+1:+1:+1
--1:-1:+1
-+1:-1:-1
--1:+1:-1
-+1:+2:+0
-+2:+1:+2
-+1000000000:+9:+111111111
-+2000000000:+9:+222222222
-+3000000000:+9:+333333333
-+4000000000:+9:+444444444
-+5000000000:+9:+555555555
-+6000000000:+9:+666666666
-+7000000000:+9:+777777777
-+8000000000:+9:+888888888
-+9000000000:+9:+1000000000
-+35500000:+113:+314159
-+71000000:+226:+314159
-+106500000:+339:+314159
-+1000000000:+3:+333333333
-+10:+5:+2
-+100:+4:+25
-+1000:+8:+125
-+10000:+16:+625
-+999999999999:+9:+111111111111
-+999999999999:+99:+10101010101
-+999999999999:+999:+1001001001
-+999999999999:+9999:+100010001
-+999999999999999:+99999:+10000100001
-&bmod
-abc:abc:NaN
-abc:+1:abc:NaN
-+1:abc:NaN
-+0:+0:NaN
-+0:+1:+0
-+1:+0:NaN
-+0:-1:+0
--1:+0:NaN
-+1:+1:+0
--1:-1:+0
-+1:-1:+0
--1:+1:+0
-+1:+2:+1
-+2:+1:+0
-+1000000000:+9:+1
-+2000000000:+9:+2
-+3000000000:+9:+3
-+4000000000:+9:+4
-+5000000000:+9:+5
-+6000000000:+9:+6
-+7000000000:+9:+7
-+8000000000:+9:+8
-+9000000000:+9:+0
-+35500000:+113:+33
-+71000000:+226:+66
-+106500000:+339:+99
-+1000000000:+3:+1
-+10:+5:+0
-+100:+4:+0
-+1000:+8:+0
-+10000:+16:+0
-+999999999999:+9:+0
-+999999999999:+99:+0
-+999999999999:+999:+0
-+999999999999:+9999:+0
-+999999999999999:+99999:+0
-&bgcd
-abc:abc:NaN
-abc:+0:NaN
-+0:abc:NaN
-+0:+0:+0
-+0:+1:+1
-+1:+0:+1
-+1:+1:+1
-+2:+3:+1
-+3:+2:+1
-+100:+625:+25
-+4096:+81:+1
-&blsft
-abc:abc:NaN
-+2:+2:+8
-+1:+32:+4294967296
-+1:+48:+281474976710656
-+8:-2:NaN
-&brsft
-abc:abc:NaN
-+8:+2:+2
-+4294967296:+32:+1
-+281474976710656:+48:+1
-+2:-2:NaN
-&band
-abc:abc:NaN
-+8:+2:+0
-+281474976710656:+0:+0
-+281474976710656:+1:+0
-+281474976710656:+281474976710656:+281474976710656
-&bior
-abc:abc:NaN
-+8:+2:+10
-+281474976710656:+0:+281474976710656
-+281474976710656:+1:+281474976710657
-+281474976710656:+281474976710656:+281474976710656
-&bxor
-abc:abc:NaN
-+8:+2:+10
-+281474976710656:+0:+281474976710656
-+281474976710656:+1:+281474976710657
-+281474976710656:+281474976710656:+0
-&bnot
-abc:NaN
-+0:-1
-+8:-9
-+281474976710656:-281474976710657
diff --git a/contrib/perl5/t/lib/cgi-esc.t b/contrib/perl5/t/lib/cgi-esc.t
deleted file mode 100755
index f0471cf..0000000
--- a/contrib/perl5/t/lib/cgi-esc.t
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/local/bin/perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-# Test ability to escape() and unescape() punctuation characters
-# except for qw(- . _).
-######################### We start with some black magic to print on failure.
-use lib '../blib/lib','../blib/arch';
-
-BEGIN {$| = 1; print "1..59\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use Config;
-use CGI::Util qw(escape unescape);
-$loaded = 1;
-print "ok 1\n";
-
-######################### End of black magic.
-
-# util
-sub test {
- local($^W) = 0;
- my($num, $true,$msg) = @_;
- print($true ? "ok $num\n" : "not ok $num $msg\n");
-}
-
-# ASCII order, ASCII codepoints, ASCII repertoire
-
-my %punct = (
- ' ' => '20', '!' => '21', '"' => '22', '#' => '23',
- '$' => '24', '%' => '25', '&' => '26', '\'' => '27',
- '(' => '28', ')' => '29', '*' => '2A', '+' => '2B',
- ',' => '2C', '/' => '2F', # '-' => '2D', '.' => '2E'
- ':' => '3A', ';' => '3B', '<' => '3C', '=' => '3D',
- '>' => '3E', '?' => '3F', '[' => '5B', '\\' => '5C',
- ']' => '5D', '^' => '5E', '`' => '60', # '_' => '5F',
- '{' => '7B', '|' => '7C', '}' => '7D', '~' => '7E',
- );
-
-# The sort order may not be ASCII on EBCDIC machines:
-
-my $i = 1;
-
-foreach(sort(keys(%punct))) {
- $i++;
- my $escape = "AbC\%$punct{$_}dEF";
- my $cgi_escape = escape("AbC$_" . "dEF");
- test($i, $escape eq $cgi_escape , "# $escape ne $cgi_escape");
- $i++;
- my $unescape = "AbC$_" . "dEF";
- my $cgi_unescape = unescape("AbC\%$punct{$_}dEF");
- test($i, $unescape eq $cgi_unescape , "# $unescape ne $cgi_unescape");
-}
-
diff --git a/contrib/perl5/t/lib/cgi-form.t b/contrib/perl5/t/lib/cgi-form.t
deleted file mode 100755
index 2922903..0000000
--- a/contrib/perl5/t/lib/cgi-form.t
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/local/bin/perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-# Test ability to retrieve HTTP request info
-######################### We start with some black magic to print on failure.
-use lib '../blib/lib','../blib/arch';
-
-BEGIN {$| = 1; print "1..17\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use CGI (':standard','-no_debug');
-$loaded = 1;
-print "ok 1\n";
-
-######################### End of black magic.
-
-# util
-sub test {
- local($^W) = 0;
- my($num, $true,$msg) = @_;
- print($true ? "ok $num\n" : "not ok $num $msg\n");
-}
-
-my $CRLF = "\015\012";
-if ($^O eq 'VMS') {
- $CRLF = "\n"; # via web server carriage is inserted automatically
-}
-if (ord("\t") != 9) { # EBCDIC?
- $CRLF = "\r\n";
-}
-
-
-# Set up a CGI environment
-$ENV{REQUEST_METHOD}='GET';
-$ENV{QUERY_STRING} ='game=chess&game=checkers&weather=dull';
-$ENV{PATH_INFO} ='/somewhere/else';
-$ENV{PATH_TRANSLATED} ='/usr/local/somewhere/else';
-$ENV{SCRIPT_NAME} ='/cgi-bin/foo.cgi';
-$ENV{SERVER_PROTOCOL} = 'HTTP/1.0';
-$ENV{SERVER_PORT} = 8080;
-$ENV{SERVER_NAME} = 'the.good.ship.lollypop.com';
-
-test(2,start_form(-action=>'foobar',-method=>'get') eq
- qq(<form method="get" action="foobar" enctype="application/x-www-form-urlencoded">\n),
- "start_form()");
-
-test(3,submit() eq qq(<input type="submit" name=".submit" />),"submit()");
-test(4,submit(-name=>'foo',-value=>'bar') eq qq(<input type="submit" name="foo" value="bar" />),"submit(-name,-value)");
-test(5,submit({-name=>'foo',-value=>'bar'}) eq qq(<input type="submit" name="foo" value="bar" />),"submit({-name,-value})");
-test(6,textfield(-name=>'weather') eq qq(<input type="text" name="weather" value="dull" />),"textfield({-name})");
-test(7,textfield(-name=>'weather',-value=>'nice') eq qq(<input type="text" name="weather" value="dull" />),"textfield({-name,-value})");
-test(8,textfield(-name=>'weather',-value=>'nice',-override=>1) eq qq(<input type="text" name="weather" value="nice" />),
- "textfield({-name,-value,-override})");
-test(9,checkbox(-name=>'weather',-value=>'nice') eq qq(<input type="checkbox" name="weather" value="nice" />weather),
- "checkbox()");
-test(10,checkbox(-name=>'weather',-value=>'nice',-label=>'forecast') eq
- qq(<input type="checkbox" name="weather" value="nice" />forecast),
- "checkbox()");
-test(11,checkbox(-name=>'weather',-value=>'nice',-label=>'forecast',-checked=>1,-override=>1) eq
- qq(<input type="checkbox" name="weather" value="nice" checked />forecast),
- "checkbox()");
-test(12,checkbox(-name=>'weather',-value=>'dull',-label=>'forecast') eq
- qq(<input type="checkbox" name="weather" value="dull" checked />forecast),
- "checkbox()");
-
-test(13,radio_group(-name=>'game') eq
- qq(<input type="radio" name="game" value="chess" checked />chess <input type="radio" name="game" value="checkers" />checkers),
- 'radio_group()');
-test(14,radio_group(-name=>'game',-labels=>{'chess'=>'ping pong'}) eq
- qq(<input type="radio" name="game" value="chess" checked />ping pong <input type="radio" name="game" value="checkers" />checkers),
- 'radio_group()');
-
-test(15, checkbox_group(-name=>'game',-Values=>[qw/checkers chess cribbage/]) eq
- qq(<input type="checkbox" name="game" value="checkers" checked />checkers <input type="checkbox" name="game" value="chess" checked />chess <input type="checkbox" name="game" value="cribbage" />cribbage),
- 'checkbox_group()');
-
-test(16, checkbox_group(-name=>'game',-values=>[qw/checkers chess cribbage/],-defaults=>['cribbage'],-override=>1) eq
- qq(<input type="checkbox" name="game" value="checkers" />checkers <input type="checkbox" name="game" value="chess" />chess <input type="checkbox" name="game" value="cribbage" checked />cribbage),
- 'checkbox_group()');
-test(17, popup_menu(-name=>'game',-values=>[qw/checkers chess cribbage/],-default=>'cribbage',-override=>1) eq <<END,'checkbox_group()');
-<select name="game">
-<option value="checkers">checkers</option>
-<option value="chess">chess</option>
-<option selected value="cribbage">cribbage</option>
-</select>
-END
-
diff --git a/contrib/perl5/t/lib/cgi-function.t b/contrib/perl5/t/lib/cgi-function.t
deleted file mode 100755
index 3b9722e..0000000
--- a/contrib/perl5/t/lib/cgi-function.t
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/local/bin/perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-# Test ability to retrieve HTTP request info
-######################### We start with some black magic to print on failure.
-use lib '../blib/lib','../blib/arch';
-
-BEGIN {$| = 1; print "1..27\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use Config;
-use CGI (':standard','keywords');
-$loaded = 1;
-print "ok 1\n";
-
-######################### End of black magic.
-
-# util
-sub test {
- local($^W) = 0;
- my($num, $true,$msg) = @_;
- print($true ? "ok $num\n" : "not ok $num $msg\n");
-}
-
-my $CRLF = "\015\012";
-
-# A peculiarity of sending "\n" through MBX|Socket|web-server on VMS
-# is that a CR character gets inserted automatically in the web server
-# case but not internal to perl's double quoted strings "\n". This
-# test would need to be modified to use the "\015\012" on VMS if it
-# were actually run through a web server.
-# Thanks to Peter Prymmer for this
-
-if ($^O eq 'VMS') { $CRLF = "\n"; }
-
-# Web servers on EBCDIC hosts are typically set up to do an EBCDIC -> ASCII
-# translation hence CRLF is used as \r\n within CGI.pm on such machines.
-
-if (ord("\t") != 9) { $CRLF = "\r\n"; }
-
-# Set up a CGI environment
-$ENV{REQUEST_METHOD}='GET';
-$ENV{QUERY_STRING} ='game=chess&game=checkers&weather=dull';
-$ENV{PATH_INFO} ='/somewhere/else';
-$ENV{PATH_TRANSLATED} ='/usr/local/somewhere/else';
-$ENV{SCRIPT_NAME} ='/cgi-bin/foo.cgi';
-$ENV{SERVER_PROTOCOL} = 'HTTP/1.0';
-$ENV{SERVER_PORT} = 8080;
-$ENV{SERVER_NAME} = 'the.good.ship.lollypop.com';
-$ENV{HTTP_LOVE} = 'true';
-
-test(2,request_method() eq 'GET',"CGI::request_method()");
-test(3,query_string() eq 'game=chess;game=checkers;weather=dull',"CGI::query_string()");
-test(4,param() == 2,"CGI::param()");
-test(5,join(' ',sort {$a cmp $b} param()) eq 'game weather',"CGI::param()");
-test(6,param('game') eq 'chess',"CGI::param()");
-test(7,param('weather') eq 'dull',"CGI::param()");
-test(8,join(' ',param('game')) eq 'chess checkers',"CGI::param()");
-test(9,param(-name=>'foo',-value=>'bar'),'CGI::param() put');
-test(10,param(-name=>'foo') eq 'bar','CGI::param() get');
-test(11,query_string() eq 'game=chess;game=checkers;weather=dull;foo=bar',"CGI::query_string() redux");
-test(12,http('love') eq 'true',"CGI::http()");
-test(13,script_name() eq '/cgi-bin/foo.cgi',"CGI::script_name()");
-test(14,url() eq 'http://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgi',"CGI::url()");
-test(15,self_url() eq
- 'http://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgi/somewhere/else?game=chess;game=checkers;weather=dull;foo=bar',
- "CGI::url()");
-test(16,url(-absolute=>1) eq '/cgi-bin/foo.cgi','CGI::url(-absolute=>1)');
-test(17,url(-relative=>1) eq 'foo.cgi','CGI::url(-relative=>1)');
-test(18,url(-relative=>1,-path=>1) eq 'foo.cgi/somewhere/else','CGI::url(-relative=>1,-path=>1)');
-test(19,url(-relative=>1,-path=>1,-query=>1) eq
- 'foo.cgi/somewhere/else?game=chess;game=checkers;weather=dull;foo=bar',
- 'CGI::url(-relative=>1,-path=>1,-query=>1)');
-Delete('foo');
-test(20,!param('foo'),'CGI::delete()');
-
-CGI::_reset_globals();
-$ENV{QUERY_STRING}='mary+had+a+little+lamb';
-test(21,join(' ',keywords()) eq 'mary had a little lamb','CGI::keywords');
-test(22,join(' ',param('keywords')) eq 'mary had a little lamb','CGI::keywords');
-
-CGI::_reset_globals;
-if ($Config{d_fork}) {
- $test_string = 'game=soccer&game=baseball&weather=nice';
- $ENV{REQUEST_METHOD}='POST';
- $ENV{CONTENT_LENGTH}=length($test_string);
- $ENV{QUERY_STRING}='big_balls=basketball&small_balls=golf';
- if (open(CHILD,"|-")) { # cparent
- print CHILD $test_string;
- close CHILD;
- exit 0;
- }
- # at this point, we're in a new (child) process
- test(23,param('weather') eq 'nice',"CGI::param() from POST");
- test(24,(url_param('big_balls') eq 'basketball'),"CGI::url_param()");
-} else {
- print "ok 23 # Skip\n";
- print "ok 24 # Skip\n";
-}
-test(25,redirect('http://somewhere.else') eq "Status: 302 Moved${CRLF}location: http://somewhere.else${CRLF}${CRLF}","CGI::redirect() 1");
-my $h = redirect(-Location=>'http://somewhere.else',-Type=>'text/html');
-test(26,$h eq "Status: 302 Moved${CRLF}location: http://somewhere.else${CRLF}Content-Type: text/html; charset=ISO-8859-1${CRLF}${CRLF}","CGI::redirect() 2");
-test(27,redirect(-Location=>'http://somewhere.else/bin/foo&bar',-Type=>'text/html') eq "Status: 302 Moved${CRLF}location: http://somewhere.else/bin/foo&bar${CRLF}Content-Type: text/html; charset=ISO-8859-1${CRLF}${CRLF}","CGI::redirect() 2");
diff --git a/contrib/perl5/t/lib/cgi-html.t b/contrib/perl5/t/lib/cgi-html.t
deleted file mode 100755
index 93e5dac..0000000
--- a/contrib/perl5/t/lib/cgi-html.t
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/local/bin/perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-# Test ability to retrieve HTTP request info
-######################### We start with some black magic to print on failure.
-use lib '../blib/lib','../blib/arch';
-
-BEGIN {$| = 1; print "1..24\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use CGI (':standard','-no_debug','*h3','start_table');
-$loaded = 1;
-print "ok 1\n";
-
-######################### End of black magic.
-
-my $CRLF = "\015\012";
-if ($^O eq 'VMS') {
- $CRLF = "\n"; # via web server carriage is inserted automatically
-}
-if (ord("\t") != 9) { # EBCDIC?
- $CRLF = "\r\n";
-}
-
-
-# util
-sub test {
- local($^W) = 0;
- my($num, $true,$msg) = @_;
- print($true ? "ok $num\n" : "not ok $num $msg\n");
-}
-
-# all the automatic tags
-test(2,h1() eq '<h1 />',"single tag");
-test(3,h1('fred') eq '<h1>fred</h1>',"open/close tag");
-test(4,h1('fred','agnes','maura') eq '<h1>fred agnes maura</h1>',"open/close tag multiple");
-test(5,h1({-align=>'CENTER'},'fred') eq '<h1 align="CENTER">fred</h1>',"open/close tag with attribute");
-test(6,h1({-align=>undef},'fred') eq '<h1 align>fred</h1>',"open/close tag with orphan attribute");
-test(7,h1({-align=>'CENTER'},['fred','agnes']) eq
- '<h1 align="CENTER">fred</h1> <h1 align="CENTER">agnes</h1>',
- "distributive tag with attribute");
-{
- local($") = '-';
- test(8,h1('fred','agnes','maura') eq '<h1>fred-agnes-maura</h1>',"open/close tag \$\" interpolation");
-}
-test(9,header() eq "Content-Type: text/html; charset=ISO-8859-1${CRLF}${CRLF}","header()");
-test(10,header(-type=>'image/gif') eq "Content-Type: image/gif${CRLF}${CRLF}","header()");
-test(11,header(-type=>'image/gif',-status=>'500 Sucks') eq "Status: 500 Sucks${CRLF}Content-Type: image/gif${CRLF}${CRLF}","header()");
-test(12,header(-nph=>1) =~ m!HTTP/1.0 200 OK${CRLF}Server: cmdline${CRLF}Date:.+${CRLF}Content-Type: text/html; charset=ISO-8859-1${CRLF}${CRLF}!,"header()");
-test(13,start_html() ."\n" eq <<END,"start_html()");
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
- "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"><head><title>Untitled Document</title>
-</head><body>
-END
- ;
-test(14,start_html(-dtd=>"-//IETF//DTD HTML 3.2//FR") ."\n" eq <<END,"start_html()");
-<!DOCTYPE html
- PUBLIC "-//IETF//DTD HTML 3.2//FR">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"><head><title>Untitled Document</title>
-</head><body>
-END
- ;
-test(15,start_html(-Title=>'The world of foo') ."\n" eq <<END,"start_html()");
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
- "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"><head><title>The world of foo</title>
-</head><body>
-END
- ;
-test(16,($cookie=cookie(-name=>'fred',-value=>['chocolate','chip'],-path=>'/')) eq 'fred=chocolate&chip; path=/',"cookie()");
-my $h = header(-Cookie=>$cookie);
-test(17,$h =~ m!^Set-Cookie: fred=chocolate&chip\; path=/${CRLF}Date:.*${CRLF}Content-Type: text/html; charset=ISO-8859-1${CRLF}${CRLF}!s,
- "header(-cookie)");
-test(18,start_h3 eq '<h3>');
-test(19,end_h3 eq '</h3>');
-test(20,start_table({-border=>undef}) eq '<table border>');
-test(21,h1(escapeHTML("this is <not> \x8bright\x9b")) eq '<h1>this is &lt;not&gt; &#139;right&#155;</h1>');
-charset('utf-8');
-if (ord("\t") == 9) {
-test(22,h1(escapeHTML("this is <not> \x8bright\x9b")) eq '<h1>this is &lt;not&gt; ‹right›</h1>');
-}
-else {
-test(22,h1(escapeHTML("this is <not> \x8bright\x9b")) eq '<h1>this is &lt;not&gt; »rightº</h1>');
-}
-test(23,i(p('hello there')) eq '<i><p>hello there</p></i>');
-my $q = new CGI;
-test(24,$q->h1('hi') eq '<h1>hi</h1>');
diff --git a/contrib/perl5/t/lib/cgi-pretty.t b/contrib/perl5/t/lib/cgi-pretty.t
deleted file mode 100755
index 14f6447..0000000
--- a/contrib/perl5/t/lib/cgi-pretty.t
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/local/bin/perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-# Test ability to retrieve HTTP request info
-######################### We start with some black magic to print on failure.
-use lib '../blib/lib','../blib/arch';
-
-BEGIN {$| = 1; print "1..5\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use CGI::Pretty (':standard','-no_debug','*h3','start_table');
-$loaded = 1;
-print "ok 1\n";
-
-######################### End of black magic.
-
-# util
-sub test {
- local($^W) = 0;
- my($num, $true,$msg) = @_;
- print($true ? "ok $num\n" : "not ok $num $msg\n");
-}
-
-# all the automatic tags
-test(2,h1() eq '<h1>',"single tag");
-test(3,ol(li('fred'),li('ethel')) eq "<ol>\n\t<li>\n\t\tfred\n\t</li>\n\t <li>\n\t\tethel\n\t</li>\n</ol>\n","basic indentation");
-test(4,p('hi',pre('there'),'frog') eq
-'<p>
- hi <pre>there</pre>
- frog
-</p>
-',"<pre> tags");
-test(5,p('hi',a({-href=>'frog'},'there'),'frog') eq
-'<p>
- hi <a href="frog">there</a>
- frog
-</p>
-',"as-is");
diff --git a/contrib/perl5/t/lib/cgi-request.t b/contrib/perl5/t/lib/cgi-request.t
deleted file mode 100755
index fde3fd0..0000000
--- a/contrib/perl5/t/lib/cgi-request.t
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/local/bin/perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-# Test ability to retrieve HTTP request info
-######################### We start with some black magic to print on failure.
-use lib '../blib/lib','../blib/arch';
-
-BEGIN {$| = 1; print "1..33\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use CGI ();
-use Config;
-$loaded = 1;
-print "ok 1\n";
-
-######################### End of black magic.
-
-# util
-sub test {
- local($^W) = 0;
- my($num, $true,$msg) = @_;
- print($true ? "ok $num\n" : "not ok $num $msg\n");
-}
-
-# Set up a CGI environment
-$ENV{REQUEST_METHOD} = 'GET';
-$ENV{QUERY_STRING} = 'game=chess&game=checkers&weather=dull';
-$ENV{PATH_INFO} = '/somewhere/else';
-$ENV{PATH_TRANSLATED} = '/usr/local/somewhere/else';
-$ENV{SCRIPT_NAME} = '/cgi-bin/foo.cgi';
-$ENV{SERVER_PROTOCOL} = 'HTTP/1.0';
-$ENV{SERVER_PORT} = 8080;
-$ENV{SERVER_NAME} = 'the.good.ship.lollypop.com';
-$ENV{REQUEST_URI} = "$ENV{SCRIPT_NAME}$ENV{PATH_INFO}?$ENV{QUERY_STRING}";
-$ENV{HTTP_LOVE} = 'true';
-
-$q = new CGI;
-test(2,$q,"CGI::new()");
-test(3,$q->request_method eq 'GET',"CGI::request_method()");
-test(4,$q->query_string eq 'game=chess;game=checkers;weather=dull',"CGI::query_string()");
-test(5,$q->param() == 2,"CGI::param()");
-test(6,join(' ',sort $q->param()) eq 'game weather',"CGI::param()");
-test(7,$q->param('game') eq 'chess',"CGI::param()");
-test(8,$q->param('weather') eq 'dull',"CGI::param()");
-test(9,join(' ',$q->param('game')) eq 'chess checkers',"CGI::param()");
-test(10,$q->param(-name=>'foo',-value=>'bar'),'CGI::param() put');
-test(11,$q->param(-name=>'foo') eq 'bar','CGI::param() get');
-test(12,$q->query_string eq 'game=chess;game=checkers;weather=dull;foo=bar',"CGI::query_string() redux");
-test(13,$q->http('love') eq 'true',"CGI::http()");
-test(14,$q->script_name eq '/cgi-bin/foo.cgi',"CGI::script_name()");
-test(15,$q->url eq 'http://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgi',"CGI::url()");
-test(16,$q->self_url eq
- 'http://the.good.ship.lollypop.com:8080/cgi-bin/foo.cgi/somewhere/else?game=chess;game=checkers;weather=dull;foo=bar',
- "CGI::url()");
-test(17,$q->url(-absolute=>1) eq '/cgi-bin/foo.cgi','CGI::url(-absolute=>1)');
-test(18,$q->url(-relative=>1) eq 'foo.cgi','CGI::url(-relative=>1)');
-test(19,$q->url(-relative=>1,-path=>1) eq 'foo.cgi/somewhere/else','CGI::url(-relative=>1,-path=>1)');
-test(20,$q->url(-relative=>1,-path=>1,-query=>1) eq
- 'foo.cgi/somewhere/else?game=chess;game=checkers;weather=dull;foo=bar',
- 'CGI::url(-relative=>1,-path=>1,-query=>1)');
-$q->delete('foo');
-test(21,!$q->param('foo'),'CGI::delete()');
-
-$q->_reset_globals;
-$ENV{QUERY_STRING}='mary+had+a+little+lamb';
-test(22,$q=new CGI,"CGI::new() redux");
-test(23,join(' ',$q->keywords) eq 'mary had a little lamb','CGI::keywords');
-test(24,join(' ',$q->param('keywords')) eq 'mary had a little lamb','CGI::keywords');
-test(25,$q=new CGI('foo=bar&foo=baz'),"CGI::new() redux");
-test(26,$q->param('foo') eq 'bar','CGI::param() redux');
-test(27,$q=new CGI({'foo'=>'bar','bar'=>'froz'}),"CGI::new() redux 2");
-test(28,$q->param('bar') eq 'froz',"CGI::param() redux 2");
-
-# test tied interface
-my $p = $q->Vars;
-test(29,$p->{bar} eq 'froz',"tied interface fetch");
-$p->{bar} = join("\0",qw(foo bar baz));
-test(30,join(' ',$q->param('bar')) eq 'foo bar baz','tied interface store');
-
-# test posting
-$q->_reset_globals;
-if ($Config{d_fork}) {
- $test_string = 'game=soccer&game=baseball&weather=nice';
- $ENV{REQUEST_METHOD}='POST';
- $ENV{CONTENT_LENGTH}=length($test_string);
- $ENV{QUERY_STRING}='big_balls=basketball&small_balls=golf';
- if (open(CHILD,"|-")) { # cparent
- print CHILD $test_string;
- close CHILD;
- exit 0;
- }
- # at this point, we're in a new (child) process
- test(31,$q=new CGI,"CGI::new() from POST");
- test(32,$q->param('weather') eq 'nice',"CGI::param() from POST");
- test(33,$q->url_param('big_balls') eq 'basketball',"CGI::url_param()");
-} else {
- print "ok 31 # Skip\n";
- print "ok 32 # Skip\n";
- print "ok 33 # Skip\n";
-}
diff --git a/contrib/perl5/t/lib/charnames.t b/contrib/perl5/t/lib/charnames.t
deleted file mode 100755
index 2731136..0000000
--- a/contrib/perl5/t/lib/charnames.t
+++ /dev/null
@@ -1,110 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-$| = 1;
-print "1..15\n";
-
-use charnames ':full';
-
-print "not " unless "Here\N{EXCLAMATION MARK}?" eq "Here\041?";
-print "ok 1\n";
-
-{
- use bytes; # UTEST can switch utf8 on
-
- print "# \$res=$res \$\@='$@'\nnot "
- if $res = eval <<'EOE'
-use charnames ":full";
-"Here: \N{CYRILLIC SMALL LETTER BE}!";
-1
-EOE
- or $@ !~ /above 0xFF/;
- print "ok 2\n";
- # print "# \$res=$res \$\@='$@'\n";
-
- print "# \$res=$res \$\@='$@'\nnot "
- if $res = eval <<'EOE'
-use charnames 'cyrillic';
-"Here: \N{Be}!";
-1
-EOE
- or $@ !~ /CYRILLIC CAPITAL LETTER BE.*above 0xFF/;
- print "ok 3\n";
-}
-
-# If octal representation of unicode char is \0xyzt, then the utf8 is \3xy\2zt
-$encoded_be = "\320\261";
-$encoded_alpha = "\316\261";
-$encoded_bet = "\327\221";
-$encoded_deseng = "\360\220\221\215";
-
-sub to_bytes {
- pack"a*", shift;
-}
-
-{
- use charnames ':full';
-
- print "not " unless to_bytes("\N{CYRILLIC SMALL LETTER BE}") eq $encoded_be;
- print "ok 4\n";
-
- use charnames qw(cyrillic greek :short);
-
- print "not " unless to_bytes("\N{be},\N{alpha},\N{hebrew:bet}")
- eq "$encoded_be,$encoded_alpha,$encoded_bet";
- print "ok 5\n";
-}
-
-{
- use charnames ':full';
- print "not " unless "\x{263a}" eq "\N{WHITE SMILING FACE}";
- print "ok 6\n";
- print "not " unless length("\x{263a}") == 1;
- print "ok 7\n";
- print "not " unless length("\N{WHITE SMILING FACE}") == 1;
- print "ok 8\n";
- print "not " unless sprintf("%vx", "\x{263a}") eq "263a";
- print "ok 9\n";
- print "not " unless sprintf("%vx", "\N{WHITE SMILING FACE}") eq "263a";
- print "ok 10\n";
- print "not " unless sprintf("%vx", "\xFF\N{WHITE SMILING FACE}") eq "ff.263a";
- print "ok 11\n";
- print "not " unless sprintf("%vx", "\x{ff}\N{WHITE SMILING FACE}") eq "ff.263a";
- print "ok 12\n";
-}
-
-{
- use charnames qw(:full);
- use utf8;
-
- my $x = "\x{221b}";
- my $named = "\N{CUBE ROOT}";
-
- print "not " unless ord($x) == ord($named);
- print "ok 13\n";
-}
-
-{
- use charnames qw(:full);
- use utf8;
- print "not " unless "\x{100}\N{CENT SIGN}" eq "\x{100}"."\N{CENT SIGN}";
- print "ok 14\n";
-}
-
-{
- use charnames ':full';
-
-# XXX this test breaks in 5.6.x because the Unicode database is missing
-# "DESERET SMALL LETTER ENG". Uncomment after updating to Unicode 3.1
-# print "not "
-# unless to_bytes("\N{DESERET SMALL LETTER ENG}") eq $encoded_deseng;
- print "ok 15\n";
-
-}
-
diff --git a/contrib/perl5/t/lib/checktree.t b/contrib/perl5/t/lib/checktree.t
deleted file mode 100755
index b5426ca..0000000
--- a/contrib/perl5/t/lib/checktree.t
+++ /dev/null
@@ -1,19 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..1\n";
-
-use File::CheckTree;
-
-# We assume that we run from the perl "t" directory.
-
-validate q{
- lib -d || die
- lib/checktree.t -f || die
-};
-
-print "ok 1\n";
diff --git a/contrib/perl5/t/lib/class-struct.t b/contrib/perl5/t/lib/class-struct.t
deleted file mode 100755
index 26505ba..0000000
--- a/contrib/perl5/t/lib/class-struct.t
+++ /dev/null
@@ -1,66 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..8\n";
-
-package aClass;
-
-sub new { bless {}, shift }
-
-sub meth { 42 }
-
-package MyObj;
-
-use Class::Struct;
-use Class::Struct 'struct'; # test out both forms
-
-use Class::Struct SomeClass => { SomeElem => '$' };
-
-struct( s => '$', a => '@', h => '%', c => 'aClass' );
-
-my $obj = MyObj->new;
-
-$obj->s('foo');
-
-print "not " unless $obj->s() eq 'foo';
-print "ok 1\n";
-
-my $arf = $obj->a;
-
-print "not " unless ref $arf eq 'ARRAY';
-print "ok 2\n";
-
-$obj->a(2, 'secundus');
-
-print "not " unless $obj->a(2) eq 'secundus';
-print "ok 3\n";
-
-my $hrf = $obj->h;
-
-print "not " unless ref $hrf eq 'HASH';
-print "ok 4\n";
-
-$obj->h('x', 10);
-
-print "not " unless $obj->h('x') == 10;
-print "ok 5\n";
-
-my $orf = $obj->c;
-
-print "not " unless ref $orf eq 'aClass';
-print "ok 6\n";
-
-print "not " unless $obj->c->meth() == 42;
-print "ok 7\n";
-
-my $obk = SomeClass->new();
-
-$obk->SomeElem(123);
-
-print "not " unless $obk->SomeElem() == 123;
-print "ok 8\n";
-
diff --git a/contrib/perl5/t/lib/complex.t b/contrib/perl5/t/lib/complex.t
deleted file mode 100755
index 334374d..0000000
--- a/contrib/perl5/t/lib/complex.t
+++ /dev/null
@@ -1,979 +0,0 @@
-#!./perl
-
-# $RCSfile: complex.t,v $
-#
-# Regression tests for the Math::Complex pacakge
-# -- Raphael Manfredi since Sep 1996
-# -- Jarkko Hietaniemi since Mar 1997
-# -- Daniel S. Lewart since Sep 1997
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Math::Complex;
-
-use vars qw($VERSION);
-
-$VERSION = 1.91;
-
-my ($args, $op, $target, $test, $test_set, $try, $val, $zvalue, @set, @val);
-
-$test = 0;
-$| = 1;
-my @script = (
- 'my ($res, $s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10, $z0,$z1,$z2);' .
- "\n\n"
-);
-my $eps = 1e-13;
-
-if ($^O eq 'unicos') { # For some reason root() produces very inaccurate
- $eps = 1e-10; # results in Cray UNICOS, and occasionally also
-} # cos(), sin(), cosh(), sinh(). The division
- # of doubles is the current suspect.
-
-while (<DATA>) {
- s/^\s+//;
- next if $_ eq '' || /^\#/;
- chomp;
- $test_set = 0; # Assume not a test over a set of values
- if (/^&(.+)/) {
- $op = $1;
- next;
- }
- elsif (/^\{(.+)\}/) {
- set($1, \@set, \@val);
- next;
- }
- elsif (s/^\|//) {
- $test_set = 1; # Requests we loop over the set...
- }
- my @args = split(/:/);
- if ($test_set == 1) {
- my $i;
- for ($i = 0; $i < @set; $i++) {
- # complex number
- $target = $set[$i];
- # textual value as found in set definition
- $zvalue = $val[$i];
- test($zvalue, $target, @args);
- }
- } else {
- test($op, undef, @args);
- }
-}
-
-#
-
-sub test_mutators {
- my $op;
-
- $test++;
-push(@script, <<'EOT');
-{
- my $z = cplx( 1, 1);
- $z->Re(2);
- $z->Im(3);
- print "# $test Re(z) = ",$z->Re(), " Im(z) = ", $z->Im(), " z = $z\n";
- print 'not ' unless Re($z) == 2 and Im($z) == 3;
-EOT
- push(@script, qq(print "ok $test\\n"}\n));
-
- $test++;
-push(@script, <<'EOT');
-{
- my $z = cplx( 1, 1);
- $z->abs(3 * sqrt(2));
- print "# $test Re(z) = ",$z->Re(), " Im(z) = ", $z->Im(), " z = $z\n";
- print 'not ' unless (abs($z) - 3 * sqrt(2)) < $eps and
- (arg($z) - pi / 4 ) < $eps and
- (Re($z) - 3 ) < $eps and
- (Im($z) - 3 ) < $eps;
-EOT
- push(@script, qq(print "ok $test\\n"}\n));
-
- $test++;
-push(@script, <<'EOT');
-{
- my $z = cplx( 1, 1);
- $z->arg(-3 / 4 * pi);
- print "# $test Re(z) = ",$z->Re(), " Im(z) = ", $z->Im(), " z = $z\n";
- print 'not ' unless (arg($z) + 3 / 4 * pi) < $eps and
- (abs($z) - sqrt(2) ) < $eps and
- (Re($z) + 1 ) < $eps and
- (Im($z) + 1 ) < $eps;
-EOT
- push(@script, qq(print "ok $test\\n"}\n));
-}
-
-test_mutators();
-
-my $constants = '
-my $i = cplx(0, 1);
-my $pi = cplx(pi, 0);
-my $pii = cplx(0, pi);
-my $pip2 = cplx(pi/2, 0);
-my $zero = cplx(0, 0);
-';
-
-push(@script, $constants);
-
-
-# test the divbyzeros
-
-sub test_dbz {
- for my $op (@_) {
- $test++;
- push(@script, <<EOT);
- eval '$op';
- (\$bad) = (\$@ =~ /(.+)/);
- print "# $test op = $op divbyzero? \$bad...\n";
- print 'not ' unless (\$@ =~ /Division by zero/);
-EOT
- push(@script, qq(print "ok $test\\n";\n));
- }
-}
-
-# test the logofzeros
-
-sub test_loz {
- for my $op (@_) {
- $test++;
- push(@script, <<EOT);
- eval '$op';
- (\$bad) = (\$@ =~ /(.+)/);
- print "# $test op = $op logofzero? \$bad...\n";
- print 'not ' unless (\$@ =~ /Logarithm of zero/);
-EOT
- push(@script, qq(print "ok $test\\n";\n));
- }
-}
-
-test_dbz(
- 'i/0',
- 'acot(0)',
- 'acot(+$i)',
-# 'acoth(-1)', # Log of zero.
- 'acoth(0)',
- 'acoth(+1)',
- 'acsc(0)',
- 'acsch(0)',
- 'asec(0)',
- 'asech(0)',
- 'atan($i)',
-# 'atanh(-1)', # Log of zero.
- 'atanh(+1)',
- 'cot(0)',
- 'coth(0)',
- 'csc(0)',
- 'csch(0)',
- );
-
-test_loz(
- 'log($zero)',
- 'atan(-$i)',
- 'acot(-$i)',
- 'atanh(-1)',
- 'acoth(-1)',
- );
-
-# test the bad roots
-
-sub test_broot {
- for my $op (@_) {
- $test++;
- push(@script, <<EOT);
- eval 'root(2, $op)';
- (\$bad) = (\$@ =~ /(.+)/);
- print "# $test op = $op badroot? \$bad...\n";
- print 'not ' unless (\$@ =~ /root rank must be/);
-EOT
- push(@script, qq(print "ok $test\\n";\n));
- }
-}
-
-test_broot(qw(-3 -2.1 0 0.99));
-
-sub test_display_format {
- $test++;
- push @script, <<EOS;
- print "# package display_format cartesian?\n";
- print "not " unless Math::Complex->display_format eq 'cartesian';
- print "ok $test\n";
-EOS
-
- push @script, <<EOS;
- my \$j = (root(1,3))[1];
-
- \$j->display_format('polar');
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# j display_format polar?\n";
- print "not " unless \$j->display_format eq 'polar';
- print "ok $test\n";
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# j = \$j\n";
- print "not " unless "\$j" eq "[1,2pi/3]";
- print "ok $test\n";
-
- my %display_format;
-
- %display_format = \$j->display_format;
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# display_format{style} polar?\n";
- print "not " unless \$display_format{style} eq 'polar';
- print "ok $test\n";
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# keys %display_format == 2?\n";
- print "not " unless keys %display_format == 2;
- print "ok $test\n";
-
- \$j->display_format('style' => 'cartesian', 'format' => '%.5f');
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# j = \$j\n";
- print "not " unless "\$j" eq "-0.50000+0.86603i";
- print "ok $test\n";
-
- %display_format = \$j->display_format;
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# display_format{format} %.5f?\n";
- print "not " unless \$display_format{format} eq '%.5f';
- print "ok $test\n";
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# keys %display_format == 3?\n";
- print "not " unless keys %display_format == 3;
- print "ok $test\n";
-
- \$j->display_format('format' => undef);
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# j = \$j\n";
- print "not " unless "\$j" =~ /^-0(?:\\.5(?:0000\\d+)?|\\.49999\\d+)\\+0.86602540\\d+i\$/;
- print "ok $test\n";
-
- \$j->display_format('style' => 'polar', 'polar_pretty_print' => 0);
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# j = \$j\n";
- print "not " unless "\$j" =~ /^\\[1,2\\.09439510\\d+\\]\$/;
- print "ok $test\n";
-
- \$j->display_format('style' => 'cartesian', 'format' => '(%.5g)');
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# j = \$j\n";
- print "not " unless "\$j" eq "(-0.5)+(0.86603)i";
- print "ok $test\n";
-EOS
-
- $test++;
- push @script, <<EOS;
- print "# j display_format cartesian?\n";
- print "not " unless \$j->display_format eq 'cartesian';
- print "ok $test\n";
-EOS
-}
-
-test_display_format();
-
-print "1..$test\n";
-eval join '', @script;
-die $@ if $@;
-
-sub abop {
- my ($op) = @_;
-
- push(@script, qq(print "# $op=\n";));
-}
-
-sub test {
- my ($op, $z, @args) = @_;
- my ($baop) = 0;
- $test++;
- my $i;
- $baop = 1 if ($op =~ s/;=$//);
- for ($i = 0; $i < @args; $i++) {
- $val = value($args[$i]);
- push @script, "\$z$i = $val;\n";
- }
- if (defined $z) {
- $args = "'$op'"; # Really the value
- $try = "abs(\$z0 - \$z1) <= $eps ? \$z1 : \$z0";
- push @script, "\$res = $try; ";
- push @script, "check($test, $args[0], \$res, \$z$#args, $args);\n";
- } else {
- my ($try, $args);
- if (@args == 2) {
- $try = "$op \$z0";
- $args = "'$args[0]'";
- } else {
- $try = ($op =~ /^\w/) ? "$op(\$z0, \$z1)" : "\$z0 $op \$z1";
- $args = "'$args[0]', '$args[1]'";
- }
- push @script, "\$res = $try; ";
- push @script, "check($test, '$try', \$res, \$z$#args, $args);\n";
- if (@args > 2 and $baop) { # binary assignment ops
- $test++;
- # check the op= works
- push @script, <<EOB;
-{
- my \$za = cplx(ref \$z0 ? \@{\$z0->cartesian} : (\$z0, 0));
-
- my (\$z1r, \$z1i) = ref \$z1 ? \@{\$z1->cartesian} : (\$z1, 0);
-
- my \$zb = cplx(\$z1r, \$z1i);
-
- \$za $op= \$zb;
- my (\$zbr, \$zbi) = \@{\$zb->cartesian};
-
- check($test, '\$z0 $op= \$z1', \$za, \$z$#args, $args);
-EOB
- $test++;
- # check that the rhs has not changed
- push @script, qq(print "not " unless (\$zbr == \$z1r and \$zbi == \$z1i););
- push @script, qq(print "ok $test\\n";\n);
- push @script, "}\n";
- }
- }
-}
-
-sub set {
- my ($set, $setref, $valref) = @_;
- @{$setref} = ();
- @{$valref} = ();
- my @set = split(/;\s*/, $set);
- my @res;
- my $i;
- for ($i = 0; $i < @set; $i++) {
- push(@{$valref}, $set[$i]);
- my $val = value($set[$i]);
- push @script, "\$s$i = $val;\n";
- push @{$setref}, "\$s$i";
- }
-}
-
-sub value {
- local ($_) = @_;
- if (/^\s*\((.*),(.*)\)/) {
- return "cplx($1,$2)";
- }
- elsif (/^\s*([\-\+]?(?:\d+(\.\d+)?|\.\d+)(?:[e[\-\+]\d+])?)/) {
- return "cplx($1,0)";
- }
- elsif (/^\s*\[(.*),(.*)\]/) {
- return "cplxe($1,$2)";
- }
- elsif (/^\s*'(.*)'/) {
- my $ex = $1;
- $ex =~ s/\bz\b/$target/g;
- $ex =~ s/\br\b/abs($target)/g;
- $ex =~ s/\bt\b/arg($target)/g;
- $ex =~ s/\ba\b/Re($target)/g;
- $ex =~ s/\bb\b/Im($target)/g;
- return $ex;
- }
- elsif (/^\s*"(.*)"/) {
- return "\"$1\"";
- }
- return $_;
-}
-
-sub check {
- my ($test, $try, $got, $expected, @z) = @_;
-
- print "# @_\n";
-
- if ("$got" eq "$expected"
- ||
- ($expected =~ /^-?\d/ && $got == $expected)
- ||
- (abs($got - $expected) < $eps)
- ) {
- print "ok $test\n";
- } else {
- print "not ok $test\n";
- my $args = (@z == 1) ? "z = $z[0]" : "z0 = $z[0], z1 = $z[1]";
- print "# '$try' expected: '$expected' got: '$got' for $args\n";
- }
-}
-
-sub addsq {
- my ($z1, $z2) = @_;
- return ($z1 + i*$z2) * ($z1 - i*$z2);
-}
-
-sub subsq {
- my ($z1, $z2) = @_;
- return ($z1 + $z2) * ($z1 - $z2);
-}
-
-__END__
-&+;=
-(3,4):(3,4):(6,8)
-(-3,4):(3,-4):(0,0)
-(3,4):-3:(0,4)
-1:(4,2):(5,2)
-[2,0]:[2,pi]:(0,0)
-
-&++
-(2,1):(3,1)
-
-&-;=
-(2,3):(-2,-3)
-[2,pi/2]:[2,-(pi)/2]
-2:[2,0]:(0,0)
-[3,0]:2:(1,0)
-3:(4,5):(-1,-5)
-(4,5):3:(1,5)
-(2,1):(3,5):(-1,-4)
-
-&--
-(1,2):(0,2)
-[2,pi]:[3,pi]
-
-&*;=
-(0,1):(0,1):(-1,0)
-(4,5):(1,0):(4,5)
-[2,2*pi/3]:(1,0):[2,2*pi/3]
-2:(0,1):(0,2)
-(0,1):3:(0,3)
-(0,1):(4,1):(-1,4)
-(2,1):(4,-1):(9,2)
-
-&/;=
-(3,4):(3,4):(1,0)
-(4,-5):1:(4,-5)
-1:(0,1):(0,-1)
-(0,6):(0,2):(3,0)
-(9,2):(4,-1):(2,1)
-[4,pi]:[2,pi/2]:[2,pi/2]
-[2,pi/2]:[4,pi]:[0.5,-(pi)/2]
-
-&**;=
-(2,0):(3,0):(8,0)
-(3,0):(2,0):(9,0)
-(2,3):(4,0):(-119,-120)
-(0,0):(1,0):(0,0)
-(0,0):(2,3):(0,0)
-(1,0):(0,0):(1,0)
-(1,0):(1,0):(1,0)
-(1,0):(2,3):(1,0)
-(2,3):(0,0):(1,0)
-(2,3):(1,0):(2,3)
-(0,0):(0,0):(1,0)
-
-&Re
-(3,4):3
-(-3,4):-3
-[1,pi/2]:0
-
-&Im
-(3,4):4
-(3,-4):-4
-[1,pi/2]:1
-
-&abs
-(3,4):5
-(-3,4):5
-
-&arg
-[2,0]:0
-[-2,0]:pi
-
-&~
-(4,5):(4,-5)
-(-3,4):(-3,-4)
-[2,pi/2]:[2,-(pi)/2]
-
-&<
-(3,4):(1,2):0
-(3,4):(3,2):0
-(3,4):(3,8):1
-(4,4):(5,129):1
-
-&==
-(3,4):(4,5):0
-(3,4):(3,5):0
-(3,4):(2,4):0
-(3,4):(3,4):1
-
-&sqrt
--9:(0,3)
-(-100,0):(0,10)
-(16,-30):(5,-3)
-
-&stringify_cartesian
-(-100,0):"-100"
-(0,1):"i"
-(4,-3):"4-3i"
-(4,0):"4"
-(-4,0):"-4"
-(-2,4):"-2+4i"
-(-2,-1):"-2-i"
-
-&stringify_polar
-[-1, 0]:"[1,pi]"
-[1, pi/3]:"[1,pi/3]"
-[6, -2*pi/3]:"[6,-2pi/3]"
-[0.5, -9*pi/11]:"[0.5,-9pi/11]"
-
-{ (4,3); [3,2]; (-3,4); (0,2); [2,1] }
-
-|'z + ~z':'2*Re(z)'
-|'z - ~z':'2*i*Im(z)'
-|'z * ~z':'abs(z) * abs(z)'
-
-{ (0.5, 0); (-0.5, 0); (2,3); [3,2]; (-3,2); (0,2); 3; 1.2; (-3, 0); (-2, -1); [2,1] }
-
-|'(root(z, 4))[1] ** 4':'z'
-|'(root(z, 5))[3] ** 5':'z'
-|'(root(z, 8))[7] ** 8':'z'
-|'abs(z)':'r'
-|'acot(z)':'acotan(z)'
-|'acsc(z)':'acosec(z)'
-|'acsc(z)':'asin(1 / z)'
-|'asec(z)':'acos(1 / z)'
-|'cbrt(z)':'cbrt(r) * exp(i * t/3)'
-|'cos(acos(z))':'z'
-|'addsq(cos(z), sin(z))':1
-|'cos(z)':'cosh(i*z)'
-|'subsq(cosh(z), sinh(z))':1
-|'cot(acot(z))':'z'
-|'cot(z)':'1 / tan(z)'
-|'cot(z)':'cotan(z)'
-|'csc(acsc(z))':'z'
-|'csc(z)':'1 / sin(z)'
-|'csc(z)':'cosec(z)'
-|'exp(log(z))':'z'
-|'exp(z)':'exp(a) * exp(i * b)'
-|'ln(z)':'log(z)'
-|'log(exp(z))':'z'
-|'log(z)':'log(r) + i*t'
-|'log10(z)':'log(z) / log(10)'
-|'logn(z, 2)':'log(z) / log(2)'
-|'logn(z, 3)':'log(z) / log(3)'
-|'sec(asec(z))':'z'
-|'sec(z)':'1 / cos(z)'
-|'sin(asin(z))':'z'
-|'sin(i * z)':'i * sinh(z)'
-|'sqrt(z) * sqrt(z)':'z'
-|'sqrt(z)':'sqrt(r) * exp(i * t/2)'
-|'tan(atan(z))':'z'
-|'z**z':'exp(z * log(z))'
-
-{ (1,1); [1,0.5]; (-2, -1); 2; -3; (-1,0.5); (0,0.5); 0.5; (2, 0); (-1, -2) }
-
-|'cosh(acosh(z))':'z'
-|'coth(acoth(z))':'z'
-|'coth(z)':'1 / tanh(z)'
-|'coth(z)':'cotanh(z)'
-|'csch(acsch(z))':'z'
-|'csch(z)':'1 / sinh(z)'
-|'csch(z)':'cosech(z)'
-|'sech(asech(z))':'z'
-|'sech(z)':'1 / cosh(z)'
-|'sinh(asinh(z))':'z'
-|'tanh(atanh(z))':'z'
-
-{ (0.2,-0.4); [1,0.5]; -1.2; (-1,0.5); 0.5; (1.1, 0) }
-
-|'acos(cos(z)) ** 2':'z * z'
-|'acosh(cosh(z)) ** 2':'z * z'
-|'acoth(z)':'acotanh(z)'
-|'acoth(z)':'atanh(1 / z)'
-|'acsch(z)':'acosech(z)'
-|'acsch(z)':'asinh(1 / z)'
-|'asech(z)':'acosh(1 / z)'
-|'asin(sin(z))':'z'
-|'asinh(sinh(z))':'z'
-|'atan(tan(z))':'z'
-|'atanh(tanh(z))':'z'
-
-&log
-(-2.0,0):( 0.69314718055995, 3.14159265358979)
-(-1.0,0):( 0 , 3.14159265358979)
-(-0.5,0):( -0.69314718055995, 3.14159265358979)
-( 0.5,0):( -0.69314718055995, 0 )
-( 1.0,0):( 0 , 0 )
-( 2.0,0):( 0.69314718055995, 0 )
-
-&log
-( 2, 3):( 1.28247467873077, 0.98279372324733)
-(-2, 3):( 1.28247467873077, 2.15879893034246)
-(-2,-3):( 1.28247467873077, -2.15879893034246)
-( 2,-3):( 1.28247467873077, -0.98279372324733)
-
-&sin
-(-2.0,0):( -0.90929742682568, 0 )
-(-1.0,0):( -0.84147098480790, 0 )
-(-0.5,0):( -0.47942553860420, 0 )
-( 0.0,0):( 0 , 0 )
-( 0.5,0):( 0.47942553860420, 0 )
-( 1.0,0):( 0.84147098480790, 0 )
-( 2.0,0):( 0.90929742682568, 0 )
-
-&sin
-( 2, 3):( 9.15449914691143, -4.16890695996656)
-(-2, 3):( -9.15449914691143, -4.16890695996656)
-(-2,-3):( -9.15449914691143, 4.16890695996656)
-( 2,-3):( 9.15449914691143, 4.16890695996656)
-
-&cos
-(-2.0,0):( -0.41614683654714, 0 )
-(-1.0,0):( 0.54030230586814, 0 )
-(-0.5,0):( 0.87758256189037, 0 )
-( 0.0,0):( 1 , 0 )
-( 0.5,0):( 0.87758256189037, 0 )
-( 1.0,0):( 0.54030230586814, 0 )
-( 2.0,0):( -0.41614683654714, 0 )
-
-&cos
-( 2, 3):( -4.18962569096881, -9.10922789375534)
-(-2, 3):( -4.18962569096881, 9.10922789375534)
-(-2,-3):( -4.18962569096881, -9.10922789375534)
-( 2,-3):( -4.18962569096881, 9.10922789375534)
-
-&tan
-(-2.0,0):( 2.18503986326152, 0 )
-(-1.0,0):( -1.55740772465490, 0 )
-(-0.5,0):( -0.54630248984379, 0 )
-( 0.0,0):( 0 , 0 )
-( 0.5,0):( 0.54630248984379, 0 )
-( 1.0,0):( 1.55740772465490, 0 )
-( 2.0,0):( -2.18503986326152, 0 )
-
-&tan
-( 2, 3):( -0.00376402564150, 1.00323862735361)
-(-2, 3):( 0.00376402564150, 1.00323862735361)
-(-2,-3):( 0.00376402564150, -1.00323862735361)
-( 2,-3):( -0.00376402564150, -1.00323862735361)
-
-&sec
-(-2.0,0):( -2.40299796172238, 0 )
-(-1.0,0):( 1.85081571768093, 0 )
-(-0.5,0):( 1.13949392732455, 0 )
-( 0.0,0):( 1 , 0 )
-( 0.5,0):( 1.13949392732455, 0 )
-( 1.0,0):( 1.85081571768093, 0 )
-( 2.0,0):( -2.40299796172238, 0 )
-
-&sec
-( 2, 3):( -0.04167496441114, 0.09061113719624)
-(-2, 3):( -0.04167496441114, -0.09061113719624)
-(-2,-3):( -0.04167496441114, 0.09061113719624)
-( 2,-3):( -0.04167496441114, -0.09061113719624)
-
-&csc
-(-2.0,0):( -1.09975017029462, 0 )
-(-1.0,0):( -1.18839510577812, 0 )
-(-0.5,0):( -2.08582964293349, 0 )
-( 0.5,0):( 2.08582964293349, 0 )
-( 1.0,0):( 1.18839510577812, 0 )
-( 2.0,0):( 1.09975017029462, 0 )
-
-&csc
-( 2, 3):( 0.09047320975321, 0.04120098628857)
-(-2, 3):( -0.09047320975321, 0.04120098628857)
-(-2,-3):( -0.09047320975321, -0.04120098628857)
-( 2,-3):( 0.09047320975321, -0.04120098628857)
-
-&cot
-(-2.0,0):( 0.45765755436029, 0 )
-(-1.0,0):( -0.64209261593433, 0 )
-(-0.5,0):( -1.83048772171245, 0 )
-( 0.5,0):( 1.83048772171245, 0 )
-( 1.0,0):( 0.64209261593433, 0 )
-( 2.0,0):( -0.45765755436029, 0 )
-
-&cot
-( 2, 3):( -0.00373971037634, -0.99675779656936)
-(-2, 3):( 0.00373971037634, -0.99675779656936)
-(-2,-3):( 0.00373971037634, 0.99675779656936)
-( 2,-3):( -0.00373971037634, 0.99675779656936)
-
-&asin
-(-2.0,0):( -1.57079632679490, 1.31695789692482)
-(-1.0,0):( -1.57079632679490, 0 )
-(-0.5,0):( -0.52359877559830, 0 )
-( 0.0,0):( 0 , 0 )
-( 0.5,0):( 0.52359877559830, 0 )
-( 1.0,0):( 1.57079632679490, 0 )
-( 2.0,0):( 1.57079632679490, -1.31695789692482)
-
-&asin
-( 2, 3):( 0.57065278432110, 1.98338702991654)
-(-2, 3):( -0.57065278432110, 1.98338702991654)
-(-2,-3):( -0.57065278432110, -1.98338702991654)
-( 2,-3):( 0.57065278432110, -1.98338702991654)
-
-&acos
-(-2.0,0):( 3.14159265358979, -1.31695789692482)
-(-1.0,0):( 3.14159265358979, 0 )
-(-0.5,0):( 2.09439510239320, 0 )
-( 0.0,0):( 1.57079632679490, 0 )
-( 0.5,0):( 1.04719755119660, 0 )
-( 1.0,0):( 0 , 0 )
-( 2.0,0):( 0 , 1.31695789692482)
-
-&acos
-( 2, 3):( 1.00014354247380, -1.98338702991654)
-(-2, 3):( 2.14144911111600, -1.98338702991654)
-(-2,-3):( 2.14144911111600, 1.98338702991654)
-( 2,-3):( 1.00014354247380, 1.98338702991654)
-
-&atan
-(-2.0,0):( -1.10714871779409, 0 )
-(-1.0,0):( -0.78539816339745, 0 )
-(-0.5,0):( -0.46364760900081, 0 )
-( 0.0,0):( 0 , 0 )
-( 0.5,0):( 0.46364760900081, 0 )
-( 1.0,0):( 0.78539816339745, 0 )
-( 2.0,0):( 1.10714871779409, 0 )
-
-&atan
-( 2, 3):( 1.40992104959658, 0.22907268296854)
-(-2, 3):( -1.40992104959658, 0.22907268296854)
-(-2,-3):( -1.40992104959658, -0.22907268296854)
-( 2,-3):( 1.40992104959658, -0.22907268296854)
-
-&asec
-(-2.0,0):( 2.09439510239320, 0 )
-(-1.0,0):( 3.14159265358979, 0 )
-(-0.5,0):( 3.14159265358979, -1.31695789692482)
-( 0.5,0):( 0 , 1.31695789692482)
-( 1.0,0):( 0 , 0 )
-( 2.0,0):( 1.04719755119660, 0 )
-
-&asec
-( 2, 3):( 1.42041072246703, 0.23133469857397)
-(-2, 3):( 1.72118193112276, 0.23133469857397)
-(-2,-3):( 1.72118193112276, -0.23133469857397)
-( 2,-3):( 1.42041072246703, -0.23133469857397)
-
-&acsc
-(-2.0,0):( -0.52359877559830, 0 )
-(-1.0,0):( -1.57079632679490, 0 )
-(-0.5,0):( -1.57079632679490, 1.31695789692482)
-( 0.5,0):( 1.57079632679490, -1.31695789692482)
-( 1.0,0):( 1.57079632679490, 0 )
-( 2.0,0):( 0.52359877559830, 0 )
-
-&acsc
-( 2, 3):( 0.15038560432786, -0.23133469857397)
-(-2, 3):( -0.15038560432786, -0.23133469857397)
-(-2,-3):( -0.15038560432786, 0.23133469857397)
-( 2,-3):( 0.15038560432786, 0.23133469857397)
-
-&acot
-(-2.0,0):( -0.46364760900081, 0 )
-(-1.0,0):( -0.78539816339745, 0 )
-(-0.5,0):( -1.10714871779409, 0 )
-( 0.5,0):( 1.10714871779409, 0 )
-( 1.0,0):( 0.78539816339745, 0 )
-( 2.0,0):( 0.46364760900081, 0 )
-
-&acot
-( 2, 3):( 0.16087527719832, -0.22907268296854)
-(-2, 3):( -0.16087527719832, -0.22907268296854)
-(-2,-3):( -0.16087527719832, 0.22907268296854)
-( 2,-3):( 0.16087527719832, 0.22907268296854)
-
-&sinh
-(-2.0,0):( -3.62686040784702, 0 )
-(-1.0,0):( -1.17520119364380, 0 )
-(-0.5,0):( -0.52109530549375, 0 )
-( 0.0,0):( 0 , 0 )
-( 0.5,0):( 0.52109530549375, 0 )
-( 1.0,0):( 1.17520119364380, 0 )
-( 2.0,0):( 3.62686040784702, 0 )
-
-&sinh
-( 2, 3):( -3.59056458998578, 0.53092108624852)
-(-2, 3):( 3.59056458998578, 0.53092108624852)
-(-2,-3):( 3.59056458998578, -0.53092108624852)
-( 2,-3):( -3.59056458998578, -0.53092108624852)
-
-&cosh
-(-2.0,0):( 3.76219569108363, 0 )
-(-1.0,0):( 1.54308063481524, 0 )
-(-0.5,0):( 1.12762596520638, 0 )
-( 0.0,0):( 1 , 0 )
-( 0.5,0):( 1.12762596520638, 0 )
-( 1.0,0):( 1.54308063481524, 0 )
-( 2.0,0):( 3.76219569108363, 0 )
-
-&cosh
-( 2, 3):( -3.72454550491532, 0.51182256998738)
-(-2, 3):( -3.72454550491532, -0.51182256998738)
-(-2,-3):( -3.72454550491532, 0.51182256998738)
-( 2,-3):( -3.72454550491532, -0.51182256998738)
-
-&tanh
-(-2.0,0):( -0.96402758007582, 0 )
-(-1.0,0):( -0.76159415595576, 0 )
-(-0.5,0):( -0.46211715726001, 0 )
-( 0.0,0):( 0 , 0 )
-( 0.5,0):( 0.46211715726001, 0 )
-( 1.0,0):( 0.76159415595576, 0 )
-( 2.0,0):( 0.96402758007582, 0 )
-
-&tanh
-( 2, 3):( 0.96538587902213, -0.00988437503832)
-(-2, 3):( -0.96538587902213, -0.00988437503832)
-(-2,-3):( -0.96538587902213, 0.00988437503832)
-( 2,-3):( 0.96538587902213, 0.00988437503832)
-
-&sech
-(-2.0,0):( 0.26580222883408, 0 )
-(-1.0,0):( 0.64805427366389, 0 )
-(-0.5,0):( 0.88681888397007, 0 )
-( 0.0,0):( 1 , 0 )
-( 0.5,0):( 0.88681888397007, 0 )
-( 1.0,0):( 0.64805427366389, 0 )
-( 2.0,0):( 0.26580222883408, 0 )
-
-&sech
-( 2, 3):( -0.26351297515839, -0.03621163655877)
-(-2, 3):( -0.26351297515839, 0.03621163655877)
-(-2,-3):( -0.26351297515839, -0.03621163655877)
-( 2,-3):( -0.26351297515839, 0.03621163655877)
-
-&csch
-(-2.0,0):( -0.27572056477178, 0 )
-(-1.0,0):( -0.85091812823932, 0 )
-(-0.5,0):( -1.91903475133494, 0 )
-( 0.5,0):( 1.91903475133494, 0 )
-( 1.0,0):( 0.85091812823932, 0 )
-( 2.0,0):( 0.27572056477178, 0 )
-
-&csch
-( 2, 3):( -0.27254866146294, -0.04030057885689)
-(-2, 3):( 0.27254866146294, -0.04030057885689)
-(-2,-3):( 0.27254866146294, 0.04030057885689)
-( 2,-3):( -0.27254866146294, 0.04030057885689)
-
-&coth
-(-2.0,0):( -1.03731472072755, 0 )
-(-1.0,0):( -1.31303528549933, 0 )
-(-0.5,0):( -2.16395341373865, 0 )
-( 0.5,0):( 2.16395341373865, 0 )
-( 1.0,0):( 1.31303528549933, 0 )
-( 2.0,0):( 1.03731472072755, 0 )
-
-&coth
-( 2, 3):( 1.03574663776500, 0.01060478347034)
-(-2, 3):( -1.03574663776500, 0.01060478347034)
-(-2,-3):( -1.03574663776500, -0.01060478347034)
-( 2,-3):( 1.03574663776500, -0.01060478347034)
-
-&asinh
-(-2.0,0):( -1.44363547517881, 0 )
-(-1.0,0):( -0.88137358701954, 0 )
-(-0.5,0):( -0.48121182505960, 0 )
-( 0.0,0):( 0 , 0 )
-( 0.5,0):( 0.48121182505960, 0 )
-( 1.0,0):( 0.88137358701954, 0 )
-( 2.0,0):( 1.44363547517881, 0 )
-
-&asinh
-( 2, 3):( 1.96863792579310, 0.96465850440760)
-(-2, 3):( -1.96863792579310, 0.96465850440761)
-(-2,-3):( -1.96863792579310, -0.96465850440761)
-( 2,-3):( 1.96863792579310, -0.96465850440760)
-
-&acosh
-(-2.0,0):( 1.31695789692482, 3.14159265358979)
-(-1.0,0):( 0, 3.14159265358979)
-(-0.5,0):( 0, 2.09439510239320)
-( 0.0,0):( 0, 1.57079632679490)
-( 0.5,0):( 0, 1.04719755119660)
-( 1.0,0):( 0 , 0 )
-( 2.0,0):( 1.31695789692482, 0 )
-
-&acosh
-( 2, 3):( 1.98338702991654, 1.00014354247380)
-(-2, 3):( 1.98338702991653, 2.14144911111600)
-(-2,-3):( 1.98338702991653, -2.14144911111600)
-( 2,-3):( 1.98338702991654, -1.00014354247380)
-
-&atanh
-(-2.0,0):( -0.54930614433405, 1.57079632679490)
-(-0.5,0):( -0.54930614433405, 0 )
-( 0.0,0):( 0 , 0 )
-( 0.5,0):( 0.54930614433405, 0 )
-( 2.0,0):( 0.54930614433405, 1.57079632679490)
-
-&atanh
-( 2, 3):( 0.14694666622553, 1.33897252229449)
-(-2, 3):( -0.14694666622553, 1.33897252229449)
-(-2,-3):( -0.14694666622553, -1.33897252229449)
-( 2,-3):( 0.14694666622553, -1.33897252229449)
-
-&asech
-(-2.0,0):( 0 , 2.09439510239320)
-(-1.0,0):( 0 , 3.14159265358979)
-(-0.5,0):( 1.31695789692482, 3.14159265358979)
-( 0.5,0):( 1.31695789692482, 0 )
-( 1.0,0):( 0 , 0 )
-( 2.0,0):( 0 , 1.04719755119660)
-
-&asech
-( 2, 3):( 0.23133469857397, -1.42041072246703)
-(-2, 3):( 0.23133469857397, -1.72118193112276)
-(-2,-3):( 0.23133469857397, 1.72118193112276)
-( 2,-3):( 0.23133469857397, 1.42041072246703)
-
-&acsch
-(-2.0,0):( -0.48121182505960, 0 )
-(-1.0,0):( -0.88137358701954, 0 )
-(-0.5,0):( -1.44363547517881, 0 )
-( 0.5,0):( 1.44363547517881, 0 )
-( 1.0,0):( 0.88137358701954, 0 )
-( 2.0,0):( 0.48121182505960, 0 )
-
-&acsch
-( 2, 3):( 0.15735549884499, -0.22996290237721)
-(-2, 3):( -0.15735549884499, -0.22996290237721)
-(-2,-3):( -0.15735549884499, 0.22996290237721)
-( 2,-3):( 0.15735549884499, 0.22996290237721)
-
-&acoth
-(-2.0,0):( -0.54930614433405, 0 )
-(-0.5,0):( -0.54930614433405, 1.57079632679490)
-( 0.5,0):( 0.54930614433405, 1.57079632679490)
-( 2.0,0):( 0.54930614433405, 0 )
-
-&acoth
-( 2, 3):( 0.14694666622553, -0.23182380450040)
-(-2, 3):( -0.14694666622553, -0.23182380450040)
-(-2,-3):( -0.14694666622553, 0.23182380450040)
-( 2,-3):( 0.14694666622553, 0.23182380450040)
-
-# eof
diff --git a/contrib/perl5/t/lib/db-btree.t b/contrib/perl5/t/lib/db-btree.t
deleted file mode 100755
index 1822823..0000000
--- a/contrib/perl5/t/lib/db-btree.t
+++ /dev/null
@@ -1,1296 +0,0 @@
-#!./perl -w
-
-BEGIN {
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bDB_File\b/) {
- print "1..0 # Skip: DB_File was not built\n";
- exit 0;
- }
-}
-
-use warnings;
-use strict;
-use DB_File;
-use Fcntl;
-
-print "1..157\n";
-
-sub ok
-{
- my $no = shift ;
- my $result = shift ;
-
- print "not " unless $result ;
- print "ok $no\n" ;
-}
-
-sub lexical
-{
- my(@a) = unpack ("C*", $a) ;
- my(@b) = unpack ("C*", $b) ;
-
- my $len = (@a > @b ? @b : @a) ;
- my $i = 0 ;
-
- foreach $i ( 0 .. $len -1) {
- return $a[$i] - $b[$i] if $a[$i] != $b[$i] ;
- }
-
- return @a - @b ;
-}
-
-{
- package Redirect ;
- use Symbol ;
-
- sub new
- {
- my $class = shift ;
- my $filename = shift ;
- my $fh = gensym ;
- open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
- my $real_stdout = select($fh) ;
- return bless [$fh, $real_stdout ] ;
-
- }
- sub DESTROY
- {
- my $self = shift ;
- close $self->[0] ;
- select($self->[1]) ;
- }
-}
-
-sub docat
-{
- my $file = shift;
- #local $/ = undef unless wantarray ;
- open(CAT,$file) || die "Cannot open $file: $!";
- my @result = <CAT>;
- close(CAT);
- wantarray ? @result : join("", @result) ;
-}
-
-sub docat_del
-{
- my $file = shift;
- #local $/ = undef unless wantarray ;
- open(CAT,$file) || die "Cannot open $file: $!";
- my @result = <CAT>;
- close(CAT);
- unlink $file ;
- wantarray ? @result : join("", @result) ;
-}
-
-
-my $db185mode = ($DB_File::db_version == 1 && ! $DB_File::db_185_compat) ;
-my $null_keys_allowed = ($DB_File::db_ver < 2.004010
- || $DB_File::db_ver >= 3.1 );
-
-my $Dfile = "dbbtree.tmp";
-unlink $Dfile;
-
-umask(0);
-
-# Check the interface to BTREEINFO
-
-my $dbh = new DB_File::BTREEINFO ;
-ok(1, ! defined $dbh->{flags}) ;
-ok(2, ! defined $dbh->{cachesize}) ;
-ok(3, ! defined $dbh->{psize}) ;
-ok(4, ! defined $dbh->{lorder}) ;
-ok(5, ! defined $dbh->{minkeypage}) ;
-ok(6, ! defined $dbh->{maxkeypage}) ;
-ok(7, ! defined $dbh->{compare}) ;
-ok(8, ! defined $dbh->{prefix}) ;
-
-$dbh->{flags} = 3000 ;
-ok(9, $dbh->{flags} == 3000) ;
-
-$dbh->{cachesize} = 9000 ;
-ok(10, $dbh->{cachesize} == 9000);
-
-$dbh->{psize} = 400 ;
-ok(11, $dbh->{psize} == 400) ;
-
-$dbh->{lorder} = 65 ;
-ok(12, $dbh->{lorder} == 65) ;
-
-$dbh->{minkeypage} = 123 ;
-ok(13, $dbh->{minkeypage} == 123) ;
-
-$dbh->{maxkeypage} = 1234 ;
-ok(14, $dbh->{maxkeypage} == 1234 );
-
-$dbh->{compare} = 1234 ;
-ok(15, $dbh->{compare} == 1234) ;
-
-$dbh->{prefix} = 1234 ;
-ok(16, $dbh->{prefix} == 1234 );
-
-# Check that an invalid entry is caught both for store & fetch
-eval '$dbh->{fred} = 1234' ;
-ok(17, $@ =~ /^DB_File::BTREEINFO::STORE - Unknown element 'fred' at/ ) ;
-eval 'my $q = $dbh->{fred}' ;
-ok(18, $@ =~ /^DB_File::BTREEINFO::FETCH - Unknown element 'fred' at/ ) ;
-
-# Now check the interface to BTREE
-
-my ($X, %h) ;
-ok(19, $X = tie(%h, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE )) ;
-
-my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-ok(20, ($mode & 0777) == ($^O eq 'os2' ? 0666 : 0640) || $^O eq 'amigaos' || $^O eq 'MSWin32');
-
-my ($key, $value, $i);
-while (($key,$value) = each(%h)) {
- $i++;
-}
-ok(21, !$i ) ;
-
-$h{'goner1'} = 'snork';
-
-$h{'abc'} = 'ABC';
-ok(22, $h{'abc'} eq 'ABC' );
-ok(23, ! defined $h{'jimmy'} ) ;
-ok(24, ! exists $h{'jimmy'} ) ;
-ok(25, defined $h{'abc'} ) ;
-
-$h{'def'} = 'DEF';
-$h{'jkl','mno'} = "JKL\034MNO";
-$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
-$h{'a'} = 'A';
-
-#$h{'b'} = 'B';
-$X->STORE('b', 'B') ;
-
-$h{'c'} = 'C';
-
-#$h{'d'} = 'D';
-$X->put('d', 'D') ;
-
-$h{'e'} = 'E';
-$h{'f'} = 'F';
-$h{'g'} = 'X';
-$h{'h'} = 'H';
-$h{'i'} = 'I';
-
-$h{'goner2'} = 'snork';
-delete $h{'goner2'};
-
-
-# IMPORTANT - $X must be undefined before the untie otherwise the
-# underlying DB close routine will not get called.
-undef $X ;
-untie(%h);
-
-# tie to the same file again
-ok(26, $X = tie(%h,'DB_File',$Dfile, O_RDWR, 0640, $DB_BTREE)) ;
-
-# Modify an entry from the previous tie
-$h{'g'} = 'G';
-
-$h{'j'} = 'J';
-$h{'k'} = 'K';
-$h{'l'} = 'L';
-$h{'m'} = 'M';
-$h{'n'} = 'N';
-$h{'o'} = 'O';
-$h{'p'} = 'P';
-$h{'q'} = 'Q';
-$h{'r'} = 'R';
-$h{'s'} = 'S';
-$h{'t'} = 'T';
-$h{'u'} = 'U';
-$h{'v'} = 'V';
-$h{'w'} = 'W';
-$h{'x'} = 'X';
-$h{'y'} = 'Y';
-$h{'z'} = 'Z';
-
-$h{'goner3'} = 'snork';
-
-delete $h{'goner1'};
-$X->DELETE('goner3');
-
-my @keys = keys(%h);
-my @values = values(%h);
-
-ok(27, $#keys == 29 && $#values == 29) ;
-
-$i = 0 ;
-while (($key,$value) = each(%h)) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-ok(28, $i == 30) ;
-
-@keys = ('blurfl', keys(%h), 'dyick');
-ok(29, $#keys == 31) ;
-
-#Check that the keys can be retrieved in order
-my @b = keys %h ;
-my @c = sort lexical @b ;
-ok(30, ArrayCompare(\@b, \@c)) ;
-
-$h{'foo'} = '';
-ok(31, $h{'foo'} eq '' ) ;
-
-# Berkeley DB from version 2.4.10 to 3.0 does not allow null keys.
-# This feature was reenabled in version 3.1 of Berkeley DB.
-my $result = 0 ;
-if ($null_keys_allowed) {
- $h{''} = 'bar';
- $result = ( $h{''} eq 'bar' );
-}
-else
- { $result = 1 }
-ok(32, $result) ;
-
-# check cache overflow and numeric keys and contents
-my $ok = 1;
-for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; }
-for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; }
-ok(33, $ok);
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-ok(34, $size > 0 );
-
-@h{0..200} = 200..400;
-my @foo = @h{0..200};
-ok(35, join(':',200..400) eq join(':',@foo) );
-
-# Now check all the non-tie specific stuff
-
-
-# Check R_NOOVERWRITE flag will make put fail when attempting to overwrite
-# an existing record.
-
-my $status = $X->put( 'x', 'newvalue', R_NOOVERWRITE) ;
-ok(36, $status == 1 );
-
-# check that the value of the key 'x' has not been changed by the
-# previous test
-ok(37, $h{'x'} eq 'X' );
-
-# standard put
-$status = $X->put('key', 'value') ;
-ok(38, $status == 0 );
-
-#check that previous put can be retrieved
-$value = 0 ;
-$status = $X->get('key', $value) ;
-ok(39, $status == 0 );
-ok(40, $value eq 'value' );
-
-# Attempting to delete an existing key should work
-
-$status = $X->del('q') ;
-ok(41, $status == 0 );
-if ($null_keys_allowed) {
- $status = $X->del('') ;
-} else {
- $status = 0 ;
-}
-ok(42, $status == 0 );
-
-# Make sure that the key deleted, cannot be retrieved
-ok(43, ! defined $h{'q'}) ;
-ok(44, ! defined $h{''}) ;
-
-undef $X ;
-untie %h ;
-
-ok(45, $X = tie(%h, 'DB_File',$Dfile, O_RDWR, 0640, $DB_BTREE ));
-
-# Attempting to delete a non-existant key should fail
-
-$status = $X->del('joe') ;
-ok(46, $status == 1 );
-
-# Check the get interface
-
-# First a non-existing key
-$status = $X->get('aaaa', $value) ;
-ok(47, $status == 1 );
-
-# Next an existing key
-$status = $X->get('a', $value) ;
-ok(48, $status == 0 );
-ok(49, $value eq 'A' );
-
-# seq
-# ###
-
-# use seq to find an approximate match
-$key = 'ke' ;
-$value = '' ;
-$status = $X->seq($key, $value, R_CURSOR) ;
-ok(50, $status == 0 );
-ok(51, $key eq 'key' );
-ok(52, $value eq 'value' );
-
-# seq when the key does not match
-$key = 'zzz' ;
-$value = '' ;
-$status = $X->seq($key, $value, R_CURSOR) ;
-ok(53, $status == 1 );
-
-
-# use seq to set the cursor, then delete the record @ the cursor.
-
-$key = 'x' ;
-$value = '' ;
-$status = $X->seq($key, $value, R_CURSOR) ;
-ok(54, $status == 0 );
-ok(55, $key eq 'x' );
-ok(56, $value eq 'X' );
-$status = $X->del(0, R_CURSOR) ;
-ok(57, $status == 0 );
-$status = $X->get('x', $value) ;
-ok(58, $status == 1 );
-
-# ditto, but use put to replace the key/value pair.
-$key = 'y' ;
-$value = '' ;
-$status = $X->seq($key, $value, R_CURSOR) ;
-ok(59, $status == 0 );
-ok(60, $key eq 'y' );
-ok(61, $value eq 'Y' );
-
-$key = "replace key" ;
-$value = "replace value" ;
-$status = $X->put($key, $value, R_CURSOR) ;
-ok(62, $status == 0 );
-ok(63, $key eq 'replace key' );
-ok(64, $value eq 'replace value' );
-$status = $X->get('y', $value) ;
-ok(65, 1) ; # hard-wire to always pass. the previous test ($status == 1)
- # only worked because of a bug in 1.85/6
-
-# use seq to walk forwards through a file
-
-$status = $X->seq($key, $value, R_FIRST) ;
-ok(66, $status == 0 );
-my $previous = $key ;
-
-$ok = 1 ;
-while (($status = $X->seq($key, $value, R_NEXT)) == 0)
-{
- ($ok = 0), last if ($previous cmp $key) == 1 ;
-}
-
-ok(67, $status == 1 );
-ok(68, $ok == 1 );
-
-# use seq to walk backwards through a file
-$status = $X->seq($key, $value, R_LAST) ;
-ok(69, $status == 0 );
-$previous = $key ;
-
-$ok = 1 ;
-while (($status = $X->seq($key, $value, R_PREV)) == 0)
-{
- ($ok = 0), last if ($previous cmp $key) == -1 ;
- #print "key = [$key] value = [$value]\n" ;
-}
-
-ok(70, $status == 1 );
-ok(71, $ok == 1 );
-
-
-# check seq FIRST/LAST
-
-# sync
-# ####
-
-$status = $X->sync ;
-ok(72, $status == 0 );
-
-
-# fd
-# ##
-
-$status = $X->fd ;
-ok(73, $status != 0 );
-
-
-undef $X ;
-untie %h ;
-
-unlink $Dfile;
-
-# Now try an in memory file
-my $Y;
-ok(74, $Y = tie(%h, 'DB_File',undef, O_RDWR|O_CREAT, 0640, $DB_BTREE ));
-
-# fd with an in memory file should return failure
-$status = $Y->fd ;
-ok(75, $status == -1 );
-
-
-undef $Y ;
-untie %h ;
-
-# Duplicate keys
-my $bt = new DB_File::BTREEINFO ;
-$bt->{flags} = R_DUP ;
-my ($YY, %hh);
-ok(76, $YY = tie(%hh, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $bt )) ;
-
-$hh{'Wall'} = 'Larry' ;
-$hh{'Wall'} = 'Stone' ; # Note the duplicate key
-$hh{'Wall'} = 'Brick' ; # Note the duplicate key
-$hh{'Wall'} = 'Brick' ; # Note the duplicate key and value
-$hh{'Smith'} = 'John' ;
-$hh{'mouse'} = 'mickey' ;
-
-# first work in scalar context
-ok(77, scalar $YY->get_dup('Unknown') == 0 );
-ok(78, scalar $YY->get_dup('Smith') == 1 );
-ok(79, scalar $YY->get_dup('Wall') == 4 );
-
-# now in list context
-my @unknown = $YY->get_dup('Unknown') ;
-ok(80, "@unknown" eq "" );
-
-my @smith = $YY->get_dup('Smith') ;
-ok(81, "@smith" eq "John" );
-
-{
-my @wall = $YY->get_dup('Wall') ;
-my %wall ;
-@wall{@wall} = @wall ;
-ok(82, (@wall == 4 && $wall{'Larry'} && $wall{'Stone'} && $wall{'Brick'}) );
-}
-
-# hash
-my %unknown = $YY->get_dup('Unknown', 1) ;
-ok(83, keys %unknown == 0 );
-
-my %smith = $YY->get_dup('Smith', 1) ;
-ok(84, keys %smith == 1 && $smith{'John'}) ;
-
-my %wall = $YY->get_dup('Wall', 1) ;
-ok(85, keys %wall == 3 && $wall{'Larry'} == 1 && $wall{'Stone'} == 1
- && $wall{'Brick'} == 2);
-
-undef $YY ;
-untie %hh ;
-unlink $Dfile;
-
-
-# test multiple callbacks
-my $Dfile1 = "btree1" ;
-my $Dfile2 = "btree2" ;
-my $Dfile3 = "btree3" ;
-
-my $dbh1 = new DB_File::BTREEINFO ;
-$dbh1->{compare} = sub {
- no warnings 'numeric' ;
- $_[0] <=> $_[1] } ;
-
-my $dbh2 = new DB_File::BTREEINFO ;
-$dbh2->{compare} = sub { $_[0] cmp $_[1] } ;
-
-my $dbh3 = new DB_File::BTREEINFO ;
-$dbh3->{compare} = sub { length $_[0] <=> length $_[1] } ;
-
-
-my (%g, %k);
-tie(%h, 'DB_File',$Dfile1, O_RDWR|O_CREAT, 0640, $dbh1 ) ;
-tie(%g, 'DB_File',$Dfile2, O_RDWR|O_CREAT, 0640, $dbh2 ) ;
-tie(%k, 'DB_File',$Dfile3, O_RDWR|O_CREAT, 0640, $dbh3 ) ;
-
-my @Keys = qw( 0123 12 -1234 9 987654321 def ) ;
-my (@srt_1, @srt_2, @srt_3);
-{
- no warnings 'numeric' ;
- @srt_1 = sort { $a <=> $b } @Keys ;
-}
-@srt_2 = sort { $a cmp $b } @Keys ;
-@srt_3 = sort { length $a <=> length $b } @Keys ;
-
-foreach (@Keys) {
- $h{$_} = 1 ;
- $g{$_} = 1 ;
- $k{$_} = 1 ;
-}
-
-sub ArrayCompare
-{
- my($a, $b) = @_ ;
-
- return 0 if @$a != @$b ;
-
- foreach (1 .. length @$a)
- {
- return 0 unless $$a[$_] eq $$b[$_] ;
- }
-
- 1 ;
-}
-
-ok(86, ArrayCompare (\@srt_1, [keys %h]) );
-ok(87, ArrayCompare (\@srt_2, [keys %g]) );
-ok(88, ArrayCompare (\@srt_3, [keys %k]) );
-
-untie %h ;
-untie %g ;
-untie %k ;
-unlink $Dfile1, $Dfile2, $Dfile3 ;
-
-# clear
-# #####
-
-ok(89, tie(%h, 'DB_File', $Dfile1, O_RDWR|O_CREAT, 0640, $DB_BTREE ) );
-foreach (1 .. 10)
- { $h{$_} = $_ * 100 }
-
-# check that there are 10 elements in the hash
-$i = 0 ;
-while (($key,$value) = each(%h)) {
- $i++;
-}
-ok(90, $i == 10);
-
-# now clear the hash
-%h = () ;
-
-# check it is empty
-$i = 0 ;
-while (($key,$value) = each(%h)) {
- $i++;
-}
-ok(91, $i == 0);
-
-untie %h ;
-unlink $Dfile1 ;
-
-{
- # check that attempting to tie an array to a DB_BTREE will fail
-
- my $filename = "xyz" ;
- my @x ;
- eval { tie @x, 'DB_File', $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE ; } ;
- ok(92, $@ =~ /^DB_File can only tie an associative array to a DB_BTREE database/) ;
- unlink $filename ;
-}
-
-{
- # sub-class test
-
- package Another ;
-
- use warnings ;
- use strict ;
-
- open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ;
- print FILE <<'EOM' ;
-
- package SubDB ;
-
- use warnings ;
- use strict ;
- use vars qw( @ISA @EXPORT) ;
-
- require Exporter ;
- use DB_File;
- @ISA=qw(DB_File);
- @EXPORT = @DB_File::EXPORT ;
-
- sub STORE {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::STORE($key, $value * 2) ;
- }
-
- sub FETCH {
- my $self = shift ;
- my $key = shift ;
- $self->SUPER::FETCH($key) - 1 ;
- }
-
- sub put {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::put($key, $value * 3) ;
- }
-
- sub get {
- my $self = shift ;
- $self->SUPER::get($_[0], $_[1]) ;
- $_[1] -= 2 ;
- }
-
- sub A_new_method
- {
- my $self = shift ;
- my $key = shift ;
- my $value = $self->FETCH($key) ;
- return "[[$value]]" ;
- }
-
- 1 ;
-EOM
-
- close FILE ;
-
- BEGIN { push @INC, '.'; }
- eval 'use SubDB ; ';
- main::ok(93, $@ eq "") ;
- my %h ;
- my $X ;
- eval '
- $X = tie(%h, "SubDB","dbbtree.tmp", O_RDWR|O_CREAT, 0640, $DB_BTREE );
- ' ;
-
- main::ok(94, $@ eq "") ;
-
- my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ;
- main::ok(95, $@ eq "") ;
- main::ok(96, $ret == 5) ;
-
- my $value = 0;
- $ret = eval '$X->put("joe", 4) ; $X->get("joe", $value) ; return $value' ;
- main::ok(97, $@ eq "") ;
- main::ok(98, $ret == 10) ;
-
- $ret = eval ' R_NEXT eq main::R_NEXT ' ;
- main::ok(99, $@ eq "" ) ;
- main::ok(100, $ret == 1) ;
-
- $ret = eval '$X->A_new_method("joe") ' ;
- main::ok(101, $@ eq "") ;
- main::ok(102, $ret eq "[[11]]") ;
-
- undef $X;
- untie(%h);
- unlink "SubDB.pm", "dbbtree.tmp" ;
-
-}
-
-{
- # DBM Filter tests
- use warnings ;
- use strict ;
- my (%h, $db) ;
- my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- unlink $Dfile;
-
- sub checkOutput
- {
- my($fk, $sk, $fv, $sv) = @_ ;
- return
- $fetch_key eq $fk && $store_key eq $sk &&
- $fetch_value eq $fv && $store_value eq $sv &&
- $_ eq 'original' ;
- }
-
- ok(103, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) );
-
- $db->filter_fetch_key (sub { $fetch_key = $_ }) ;
- $db->filter_store_key (sub { $store_key = $_ }) ;
- $db->filter_fetch_value (sub { $fetch_value = $_}) ;
- $db->filter_store_value (sub { $store_value = $_ }) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- # fk sk fv sv
- ok(104, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(105, $h{"fred"} eq "joe");
- # fk sk fv sv
- ok(106, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(107, $db->FIRSTKEY() eq "fred") ;
- # fk sk fv sv
- ok(108, checkOutput( "fred", "", "", "")) ;
-
- # replace the filters, but remember the previous set
- my ($old_fk) = $db->filter_fetch_key
- (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
- my ($old_sk) = $db->filter_store_key
- (sub { $_ = lc $_ ; $store_key = $_ }) ;
- my ($old_fv) = $db->filter_fetch_value
- (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
- my ($old_sv) = $db->filter_store_value
- (sub { s/o/x/g; $store_value = $_ }) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"Fred"} = "Joe" ;
- # fk sk fv sv
- ok(109, checkOutput( "", "fred", "", "Jxe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(110, $h{"Fred"} eq "[Jxe]");
- # fk sk fv sv
- ok(111, checkOutput( "", "fred", "[Jxe]", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(112, $db->FIRSTKEY() eq "FRED") ;
- # fk sk fv sv
- ok(113, checkOutput( "FRED", "", "", "")) ;
-
- # put the original filters back
- $db->filter_fetch_key ($old_fk);
- $db->filter_store_key ($old_sk);
- $db->filter_fetch_value ($old_fv);
- $db->filter_store_value ($old_sv);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(114, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(115, $h{"fred"} eq "joe");
- ok(116, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(117, $db->FIRSTKEY() eq "fred") ;
- ok(118, checkOutput( "fred", "", "", "")) ;
-
- # delete the filters
- $db->filter_fetch_key (undef);
- $db->filter_store_key (undef);
- $db->filter_fetch_value (undef);
- $db->filter_store_value (undef);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(119, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(120, $h{"fred"} eq "joe");
- ok(121, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(122, $db->FIRSTKEY() eq "fred") ;
- ok(123, checkOutput( "", "", "", "")) ;
-
- undef $db ;
- untie %h;
- unlink $Dfile;
-}
-
-{
- # DBM Filter with a closure
-
- use warnings ;
- use strict ;
- my (%h, $db) ;
-
- unlink $Dfile;
- ok(124, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) );
-
- my %result = () ;
-
- sub Closure
- {
- my ($name) = @_ ;
- my $count = 0 ;
- my @kept = () ;
-
- return sub { ++$count ;
- push @kept, $_ ;
- $result{$name} = "$name - $count: [@kept]" ;
- }
- }
-
- $db->filter_store_key(Closure("store key")) ;
- $db->filter_store_value(Closure("store value")) ;
- $db->filter_fetch_key(Closure("fetch key")) ;
- $db->filter_fetch_value(Closure("fetch value")) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- ok(125, $result{"store key"} eq "store key - 1: [fred]");
- ok(126, $result{"store value"} eq "store value - 1: [joe]");
- ok(127, ! defined $result{"fetch key"} );
- ok(128, ! defined $result{"fetch value"} );
- ok(129, $_ eq "original") ;
-
- ok(130, $db->FIRSTKEY() eq "fred") ;
- ok(131, $result{"store key"} eq "store key - 1: [fred]");
- ok(132, $result{"store value"} eq "store value - 1: [joe]");
- ok(133, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(134, ! defined $result{"fetch value"} );
- ok(135, $_ eq "original") ;
-
- $h{"jim"} = "john" ;
- ok(136, $result{"store key"} eq "store key - 2: [fred jim]");
- ok(137, $result{"store value"} eq "store value - 2: [joe john]");
- ok(138, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(139, ! defined $result{"fetch value"} );
- ok(140, $_ eq "original") ;
-
- ok(141, $h{"fred"} eq "joe");
- ok(142, $result{"store key"} eq "store key - 3: [fred jim fred]");
- ok(143, $result{"store value"} eq "store value - 2: [joe john]");
- ok(144, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(145, $result{"fetch value"} eq "fetch value - 1: [joe]");
- ok(146, $_ eq "original") ;
-
- undef $db ;
- untie %h;
- unlink $Dfile;
-}
-
-{
- # DBM Filter recursion detection
- use warnings ;
- use strict ;
- my (%h, $db) ;
- unlink $Dfile;
-
- ok(147, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) );
-
- $db->filter_store_key (sub { $_ = $h{$_} }) ;
-
- eval '$h{1} = 1234' ;
- ok(148, $@ =~ /^recursion detected in filter_store_key at/ );
-
- undef $db ;
- untie %h;
- unlink $Dfile;
-}
-
-
-{
- # Examples from the POD
-
-
- my $file = "xyzt" ;
- {
- my $redirect = new Redirect $file ;
-
- # BTREE example 1
- ###
-
- use warnings FATAL => qw(all) ;
- use strict ;
- use DB_File ;
-
- my %h ;
-
- sub Compare
- {
- my ($key1, $key2) = @_ ;
- "\L$key1" cmp "\L$key2" ;
- }
-
- # specify the Perl sub that will do the comparison
- $DB_BTREE->{'compare'} = \&Compare ;
-
- unlink "tree" ;
- tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open file 'tree': $!\n" ;
-
- # Add a key/value pair to the file
- $h{'Wall'} = 'Larry' ;
- $h{'Smith'} = 'John' ;
- $h{'mouse'} = 'mickey' ;
- $h{'duck'} = 'donald' ;
-
- # Delete
- delete $h{"duck"} ;
-
- # Cycle through the keys printing them in order.
- # Note it is not necessary to sort the keys as
- # the btree will have kept them in order automatically.
- foreach (keys %h)
- { print "$_\n" }
-
- untie %h ;
-
- unlink "tree" ;
- }
-
- delete $DB_BTREE->{'compare'} ;
-
- ok(149, docat_del($file) eq <<'EOM') ;
-mouse
-Smith
-Wall
-EOM
-
- {
- my $redirect = new Redirect $file ;
-
- # BTREE example 2
- ###
-
- use warnings FATAL => qw(all) ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename %h ) ;
-
- $filename = "tree" ;
- unlink $filename ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- # Add some key/value pairs to the file
- $h{'Wall'} = 'Larry' ;
- $h{'Wall'} = 'Brick' ; # Note the duplicate key
- $h{'Wall'} = 'Brick' ; # Note the duplicate key and value
- $h{'Smith'} = 'John' ;
- $h{'mouse'} = 'mickey' ;
-
- # iterate through the associative array
- # and print each key/value pair.
- foreach (keys %h)
- { print "$_ -> $h{$_}\n" }
-
- untie %h ;
-
- unlink $filename ;
- }
-
- ok(150, docat_del($file) eq ($db185mode ? <<'EOM' : <<'EOM') ) ;
-Smith -> John
-Wall -> Brick
-Wall -> Brick
-Wall -> Brick
-mouse -> mickey
-EOM
-Smith -> John
-Wall -> Larry
-Wall -> Larry
-Wall -> Larry
-mouse -> mickey
-EOM
-
- {
- my $redirect = new Redirect $file ;
-
- # BTREE example 3
- ###
-
- use warnings FATAL => qw(all) ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename $x %h $status $key $value) ;
-
- $filename = "tree" ;
- unlink $filename ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- # Add some key/value pairs to the file
- $h{'Wall'} = 'Larry' ;
- $h{'Wall'} = 'Brick' ; # Note the duplicate key
- $h{'Wall'} = 'Brick' ; # Note the duplicate key and value
- $h{'Smith'} = 'John' ;
- $h{'mouse'} = 'mickey' ;
-
- # iterate through the btree using seq
- # and print each key/value pair.
- $key = $value = 0 ;
- for ($status = $x->seq($key, $value, R_FIRST) ;
- $status == 0 ;
- $status = $x->seq($key, $value, R_NEXT) )
- { print "$key -> $value\n" }
-
-
- undef $x ;
- untie %h ;
- }
-
- ok(151, docat_del($file) eq ($db185mode == 1 ? <<'EOM' : <<'EOM') ) ;
-Smith -> John
-Wall -> Brick
-Wall -> Brick
-Wall -> Larry
-mouse -> mickey
-EOM
-Smith -> John
-Wall -> Larry
-Wall -> Brick
-Wall -> Brick
-mouse -> mickey
-EOM
-
-
- {
- my $redirect = new Redirect $file ;
-
- # BTREE example 4
- ###
-
- use warnings FATAL => qw(all) ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename $x %h ) ;
-
- $filename = "tree" ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- my $cnt = $x->get_dup("Wall") ;
- print "Wall occurred $cnt times\n" ;
-
- my %hash = $x->get_dup("Wall", 1) ;
- print "Larry is there\n" if $hash{'Larry'} ;
- print "There are $hash{'Brick'} Brick Walls\n" ;
-
- my @list = sort $x->get_dup("Wall") ;
- print "Wall => [@list]\n" ;
-
- @list = $x->get_dup("Smith") ;
- print "Smith => [@list]\n" ;
-
- @list = $x->get_dup("Dog") ;
- print "Dog => [@list]\n" ;
-
- undef $x ;
- untie %h ;
- }
-
- ok(152, docat_del($file) eq <<'EOM') ;
-Wall occurred 3 times
-Larry is there
-There are 2 Brick Walls
-Wall => [Brick Brick Larry]
-Smith => [John]
-Dog => []
-EOM
-
- {
- my $redirect = new Redirect $file ;
-
- # BTREE example 5
- ###
-
- use warnings FATAL => qw(all) ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename $x %h $found) ;
-
- my $filename = "tree" ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ;
- print "Larry Wall is $found there\n" ;
-
- $found = ( $x->find_dup("Wall", "Harry") == 0 ? "" : "not") ;
- print "Harry Wall is $found there\n" ;
-
- undef $x ;
- untie %h ;
- }
-
- ok(153, docat_del($file) eq <<'EOM') ;
-Larry Wall is there
-Harry Wall is not there
-EOM
-
- {
- my $redirect = new Redirect $file ;
-
- # BTREE example 6
- ###
-
- use warnings FATAL => qw(all) ;
- use strict ;
- use DB_File ;
-
- use vars qw($filename $x %h $found) ;
-
- my $filename = "tree" ;
-
- # Enable duplicate records
- $DB_BTREE->{'flags'} = R_DUP ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- $x->del_dup("Wall", "Larry") ;
-
- $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ;
- print "Larry Wall is $found there\n" ;
-
- undef $x ;
- untie %h ;
-
- unlink $filename ;
- }
-
- ok(154, docat_del($file) eq <<'EOM') ;
-Larry Wall is not there
-EOM
-
- {
- my $redirect = new Redirect $file ;
-
- # BTREE example 7
- ###
-
- use warnings FATAL => qw(all) ;
- use strict ;
- use DB_File ;
- use Fcntl ;
-
- use vars qw($filename $x %h $st $key $value) ;
-
- sub match
- {
- my $key = shift ;
- my $value = 0;
- my $orig_key = $key ;
- $x->seq($key, $value, R_CURSOR) ;
- print "$orig_key\t-> $key\t-> $value\n" ;
- }
-
- $filename = "tree" ;
- unlink $filename ;
-
- $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE
- or die "Cannot open $filename: $!\n";
-
- # Add some key/value pairs to the file
- $h{'mouse'} = 'mickey' ;
- $h{'Wall'} = 'Larry' ;
- $h{'Walls'} = 'Brick' ;
- $h{'Smith'} = 'John' ;
-
-
- $key = $value = 0 ;
- print "IN ORDER\n" ;
- for ($st = $x->seq($key, $value, R_FIRST) ;
- $st == 0 ;
- $st = $x->seq($key, $value, R_NEXT) )
-
- { print "$key -> $value\n" }
-
- print "\nPARTIAL MATCH\n" ;
-
- match "Wa" ;
- match "A" ;
- match "a" ;
-
- undef $x ;
- untie %h ;
-
- unlink $filename ;
-
- }
-
- ok(155, docat_del($file) eq <<'EOM') ;
-IN ORDER
-Smith -> John
-Wall -> Larry
-Walls -> Brick
-mouse -> mickey
-
-PARTIAL MATCH
-Wa -> Wall -> Larry
-A -> Smith -> John
-a -> mouse -> mickey
-EOM
-
-}
-
-#{
-# # R_SETCURSOR
-# use strict ;
-# my (%h, $db) ;
-# unlink $Dfile;
-#
-# ok(156, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) );
-#
-# $h{abc} = 33 ;
-# my $k = "newest" ;
-# my $v = 44 ;
-# my $status = $db->put($k, $v, R_SETCURSOR) ;
-# print "status = [$status]\n" ;
-# ok(157, $status == 0) ;
-# $status = $db->del($k, R_CURSOR) ;
-# print "status = [$status]\n" ;
-# ok(158, $status == 0) ;
-# $k = "newest" ;
-# ok(159, $db->get($k, $v, R_CURSOR)) ;
-#
-# ok(160, keys %h == 1) ;
-#
-# undef $db ;
-# untie %h;
-# unlink $Dfile;
-#}
-
-{
- # Bug ID 20001013.009
- #
- # test that $hash{KEY} = undef doesn't produce the warning
- # Use of uninitialized value in null operation
- use warnings ;
- use strict ;
- use DB_File ;
-
- unlink $Dfile;
- my %h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- tie %h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_BTREE
- or die "Can't open file: $!\n" ;
- $h{ABC} = undef;
- ok(156, $a eq "") ;
- untie %h ;
- unlink $Dfile;
-}
-
-{
- # test that %hash = () doesn't produce the warning
- # Argument "" isn't numeric in entersub
- use warnings ;
- use strict ;
- use DB_File ;
-
- unlink $Dfile;
- my %h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- tie %h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_BTREE
- or die "Can't open file: $!\n" ;
- %h = (); ;
- ok(157, $a eq "") ;
- untie %h ;
- unlink $Dfile;
-}
-
-exit ;
diff --git a/contrib/perl5/t/lib/db-hash.t b/contrib/perl5/t/lib/db-hash.t
deleted file mode 100755
index effc60b..0000000
--- a/contrib/perl5/t/lib/db-hash.t
+++ /dev/null
@@ -1,743 +0,0 @@
-#!./perl -w
-
-BEGIN {
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bDB_File\b/) {
- print "1..0 # Skip: DB_File was not built\n";
- exit 0;
- }
-}
-
-use strict;
-use warnings;
-use DB_File;
-use Fcntl;
-
-print "1..111\n";
-
-sub ok
-{
- my $no = shift ;
- my $result = shift ;
-
- print "not " unless $result ;
- print "ok $no\n" ;
-}
-
-{
- package Redirect ;
- use Symbol ;
-
- sub new
- {
- my $class = shift ;
- my $filename = shift ;
- my $fh = gensym ;
- open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
- my $real_stdout = select($fh) ;
- return bless [$fh, $real_stdout ] ;
-
- }
- sub DESTROY
- {
- my $self = shift ;
- close $self->[0] ;
- select($self->[1]) ;
- }
-}
-
-sub docat_del
-{
- my $file = shift;
- local $/ = undef;
- open(CAT,$file) || die "Cannot open $file: $!";
- my $result = <CAT>;
- close(CAT);
- unlink $file ;
- return $result;
-}
-
-my $Dfile = "dbhash.tmp";
-my $null_keys_allowed = ($DB_File::db_ver < 2.004010
- || $DB_File::db_ver >= 3.1 );
-
-unlink $Dfile;
-
-umask(0);
-
-# Check the interface to HASHINFO
-
-my $dbh = new DB_File::HASHINFO ;
-
-ok(1, ! defined $dbh->{bsize}) ;
-ok(2, ! defined $dbh->{ffactor}) ;
-ok(3, ! defined $dbh->{nelem}) ;
-ok(4, ! defined $dbh->{cachesize}) ;
-ok(5, ! defined $dbh->{hash}) ;
-ok(6, ! defined $dbh->{lorder}) ;
-
-$dbh->{bsize} = 3000 ;
-ok(7, $dbh->{bsize} == 3000 );
-
-$dbh->{ffactor} = 9000 ;
-ok(8, $dbh->{ffactor} == 9000 );
-
-$dbh->{nelem} = 400 ;
-ok(9, $dbh->{nelem} == 400 );
-
-$dbh->{cachesize} = 65 ;
-ok(10, $dbh->{cachesize} == 65 );
-
-$dbh->{hash} = "abc" ;
-ok(11, $dbh->{hash} eq "abc" );
-
-$dbh->{lorder} = 1234 ;
-ok(12, $dbh->{lorder} == 1234 );
-
-# Check that an invalid entry is caught both for store & fetch
-eval '$dbh->{fred} = 1234' ;
-ok(13, $@ =~ /^DB_File::HASHINFO::STORE - Unknown element 'fred' at/ );
-eval 'my $q = $dbh->{fred}' ;
-ok(14, $@ =~ /^DB_File::HASHINFO::FETCH - Unknown element 'fred' at/ );
-
-
-# Now check the interface to HASH
-my ($X, %h);
-ok(15, $X = tie(%h, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
-
-my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-ok(16, ($mode & 0777) == ($^O eq 'os2' ? 0666 : 0640) || $^O eq 'amigaos' || $^O eq 'MSWin32');
-
-my ($key, $value, $i);
-while (($key,$value) = each(%h)) {
- $i++;
-}
-ok(17, !$i );
-
-$h{'goner1'} = 'snork';
-
-$h{'abc'} = 'ABC';
-ok(18, $h{'abc'} eq 'ABC' );
-ok(19, !defined $h{'jimmy'} );
-ok(20, !exists $h{'jimmy'} );
-ok(21, exists $h{'abc'} );
-
-$h{'def'} = 'DEF';
-$h{'jkl','mno'} = "JKL\034MNO";
-$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
-$h{'a'} = 'A';
-
-#$h{'b'} = 'B';
-$X->STORE('b', 'B') ;
-
-$h{'c'} = 'C';
-
-#$h{'d'} = 'D';
-$X->put('d', 'D') ;
-
-$h{'e'} = 'E';
-$h{'f'} = 'F';
-$h{'g'} = 'X';
-$h{'h'} = 'H';
-$h{'i'} = 'I';
-
-$h{'goner2'} = 'snork';
-delete $h{'goner2'};
-
-
-# IMPORTANT - $X must be undefined before the untie otherwise the
-# underlying DB close routine will not get called.
-undef $X ;
-untie(%h);
-
-
-# tie to the same file again, do not supply a type - should default to HASH
-ok(22, $X = tie(%h,'DB_File',$Dfile, O_RDWR, 0640) );
-
-# Modify an entry from the previous tie
-$h{'g'} = 'G';
-
-$h{'j'} = 'J';
-$h{'k'} = 'K';
-$h{'l'} = 'L';
-$h{'m'} = 'M';
-$h{'n'} = 'N';
-$h{'o'} = 'O';
-$h{'p'} = 'P';
-$h{'q'} = 'Q';
-$h{'r'} = 'R';
-$h{'s'} = 'S';
-$h{'t'} = 'T';
-$h{'u'} = 'U';
-$h{'v'} = 'V';
-$h{'w'} = 'W';
-$h{'x'} = 'X';
-$h{'y'} = 'Y';
-$h{'z'} = 'Z';
-
-$h{'goner3'} = 'snork';
-
-delete $h{'goner1'};
-$X->DELETE('goner3');
-
-my @keys = keys(%h);
-my @values = values(%h);
-
-ok(23, $#keys == 29 && $#values == 29) ;
-
-$i = 0 ;
-while (($key,$value) = each(%h)) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-ok(24, $i == 30) ;
-
-@keys = ('blurfl', keys(%h), 'dyick');
-ok(25, $#keys == 31) ;
-
-$h{'foo'} = '';
-ok(26, $h{'foo'} eq '' );
-
-# Berkeley DB from version 2.4.10 to 3.0 does not allow null keys.
-# This feature was reenabled in version 3.1 of Berkeley DB.
-my $result = 0 ;
-if ($null_keys_allowed) {
- $h{''} = 'bar';
- $result = ( $h{''} eq 'bar' );
-}
-else
- { $result = 1 }
-ok(27, $result) ;
-
-# check cache overflow and numeric keys and contents
-my $ok = 1;
-for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; }
-for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; }
-ok(28, $ok );
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-ok(29, $size > 0 );
-
-@h{0..200} = 200..400;
-my @foo = @h{0..200};
-ok(30, join(':',200..400) eq join(':',@foo) );
-
-
-# Now check all the non-tie specific stuff
-
-# Check NOOVERWRITE will make put fail when attempting to overwrite
-# an existing record.
-
-my $status = $X->put( 'x', 'newvalue', R_NOOVERWRITE) ;
-ok(31, $status == 1 );
-
-# check that the value of the key 'x' has not been changed by the
-# previous test
-ok(32, $h{'x'} eq 'X' );
-
-# standard put
-$status = $X->put('key', 'value') ;
-ok(33, $status == 0 );
-
-#check that previous put can be retrieved
-$value = 0 ;
-$status = $X->get('key', $value) ;
-ok(34, $status == 0 );
-ok(35, $value eq 'value' );
-
-# Attempting to delete an existing key should work
-
-$status = $X->del('q') ;
-ok(36, $status == 0 );
-
-# Make sure that the key deleted, cannot be retrieved
-{
- no warnings 'uninitialized' ;
- ok(37, $h{'q'} eq undef );
-}
-
-# Attempting to delete a non-existant key should fail
-
-$status = $X->del('joe') ;
-ok(38, $status == 1 );
-
-# Check the get interface
-
-# First a non-existing key
-$status = $X->get('aaaa', $value) ;
-ok(39, $status == 1 );
-
-# Next an existing key
-$status = $X->get('a', $value) ;
-ok(40, $status == 0 );
-ok(41, $value eq 'A' );
-
-# seq
-# ###
-
-# ditto, but use put to replace the key/value pair.
-
-# use seq to walk backwards through a file - check that this reversed is
-
-# check seq FIRST/LAST
-
-# sync
-# ####
-
-$status = $X->sync ;
-ok(42, $status == 0 );
-
-
-# fd
-# ##
-
-$status = $X->fd ;
-ok(43, $status != 0 );
-
-undef $X ;
-untie %h ;
-
-unlink $Dfile;
-
-# clear
-# #####
-
-ok(44, tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
-foreach (1 .. 10)
- { $h{$_} = $_ * 100 }
-
-# check that there are 10 elements in the hash
-$i = 0 ;
-while (($key,$value) = each(%h)) {
- $i++;
-}
-ok(45, $i == 10);
-
-# now clear the hash
-%h = () ;
-
-# check it is empty
-$i = 0 ;
-while (($key,$value) = each(%h)) {
- $i++;
-}
-ok(46, $i == 0);
-
-untie %h ;
-unlink $Dfile ;
-
-
-# Now try an in memory file
-ok(47, $X = tie(%h, 'DB_File',undef, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
-
-# fd with an in memory file should return fail
-$status = $X->fd ;
-ok(48, $status == -1 );
-
-undef $X ;
-untie %h ;
-
-{
- # check ability to override the default hashing
- my %x ;
- my $filename = "xyz" ;
- my $hi = new DB_File::HASHINFO ;
- $::count = 0 ;
- $hi->{hash} = sub { ++$::count ; length $_[0] } ;
- ok(49, tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0640, $hi ) ;
- $h{"abc"} = 123 ;
- ok(50, $h{"abc"} == 123) ;
- untie %x ;
- unlink $filename ;
- ok(51, $::count >0) ;
-}
-
-{
- # check that attempting to tie an array to a DB_HASH will fail
-
- my $filename = "xyz" ;
- my @x ;
- eval { tie @x, 'DB_File', $filename, O_RDWR|O_CREAT, 0640, $DB_HASH ; } ;
- ok(52, $@ =~ /^DB_File can only tie an associative array to a DB_HASH database/) ;
- unlink $filename ;
-}
-
-{
- # sub-class test
-
- package Another ;
-
- use warnings ;
- use strict ;
-
- open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ;
- print FILE <<'EOM' ;
-
- package SubDB ;
-
- use warnings ;
- use strict ;
- use vars qw( @ISA @EXPORT) ;
-
- require Exporter ;
- use DB_File;
- @ISA=qw(DB_File);
- @EXPORT = @DB_File::EXPORT ;
-
- sub STORE {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::STORE($key, $value * 2) ;
- }
-
- sub FETCH {
- my $self = shift ;
- my $key = shift ;
- $self->SUPER::FETCH($key) - 1 ;
- }
-
- sub put {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::put($key, $value * 3) ;
- }
-
- sub get {
- my $self = shift ;
- $self->SUPER::get($_[0], $_[1]) ;
- $_[1] -= 2 ;
- }
-
- sub A_new_method
- {
- my $self = shift ;
- my $key = shift ;
- my $value = $self->FETCH($key) ;
- return "[[$value]]" ;
- }
-
- 1 ;
-EOM
-
- close FILE ;
-
- BEGIN { push @INC, '.'; }
- eval 'use SubDB ; ';
- main::ok(53, $@ eq "") ;
- my %h ;
- my $X ;
- eval '
- $X = tie(%h, "SubDB","dbhash.tmp", O_RDWR|O_CREAT, 0640, $DB_HASH );
- ' ;
-
- main::ok(54, $@ eq "") ;
-
- my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ;
- main::ok(55, $@ eq "") ;
- main::ok(56, $ret == 5) ;
-
- my $value = 0;
- $ret = eval '$X->put("joe", 4) ; $X->get("joe", $value) ; return $value' ;
- main::ok(57, $@ eq "") ;
- main::ok(58, $ret == 10) ;
-
- $ret = eval ' R_NEXT eq main::R_NEXT ' ;
- main::ok(59, $@ eq "" ) ;
- main::ok(60, $ret == 1) ;
-
- $ret = eval '$X->A_new_method("joe") ' ;
- main::ok(61, $@ eq "") ;
- main::ok(62, $ret eq "[[11]]") ;
-
- undef $X;
- untie(%h);
- unlink "SubDB.pm", "dbhash.tmp" ;
-
-}
-
-{
- # DBM Filter tests
- use warnings ;
- use strict ;
- my (%h, $db) ;
- my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- unlink $Dfile;
-
- sub checkOutput
- {
- my($fk, $sk, $fv, $sv) = @_ ;
- return
- $fetch_key eq $fk && $store_key eq $sk &&
- $fetch_value eq $fv && $store_value eq $sv &&
- $_ eq 'original' ;
- }
-
- ok(63, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
-
- $db->filter_fetch_key (sub { $fetch_key = $_ }) ;
- $db->filter_store_key (sub { $store_key = $_ }) ;
- $db->filter_fetch_value (sub { $fetch_value = $_}) ;
- $db->filter_store_value (sub { $store_value = $_ }) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- # fk sk fv sv
- ok(64, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(65, $h{"fred"} eq "joe");
- # fk sk fv sv
- ok(66, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(67, $db->FIRSTKEY() eq "fred") ;
- # fk sk fv sv
- ok(68, checkOutput( "fred", "", "", "")) ;
-
- # replace the filters, but remember the previous set
- my ($old_fk) = $db->filter_fetch_key
- (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
- my ($old_sk) = $db->filter_store_key
- (sub { $_ = lc $_ ; $store_key = $_ }) ;
- my ($old_fv) = $db->filter_fetch_value
- (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
- my ($old_sv) = $db->filter_store_value
- (sub { s/o/x/g; $store_value = $_ }) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"Fred"} = "Joe" ;
- # fk sk fv sv
- ok(69, checkOutput( "", "fred", "", "Jxe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(70, $h{"Fred"} eq "[Jxe]");
- # fk sk fv sv
- ok(71, checkOutput( "", "fred", "[Jxe]", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(72, $db->FIRSTKEY() eq "FRED") ;
- # fk sk fv sv
- ok(73, checkOutput( "FRED", "", "", "")) ;
-
- # put the original filters back
- $db->filter_fetch_key ($old_fk);
- $db->filter_store_key ($old_sk);
- $db->filter_fetch_value ($old_fv);
- $db->filter_store_value ($old_sv);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(74, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(75, $h{"fred"} eq "joe");
- ok(76, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(77, $db->FIRSTKEY() eq "fred") ;
- ok(78, checkOutput( "fred", "", "", "")) ;
-
- # delete the filters
- $db->filter_fetch_key (undef);
- $db->filter_store_key (undef);
- $db->filter_fetch_value (undef);
- $db->filter_store_value (undef);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(79, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(80, $h{"fred"} eq "joe");
- ok(81, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(82, $db->FIRSTKEY() eq "fred") ;
- ok(83, checkOutput( "", "", "", "")) ;
-
- undef $db ;
- untie %h;
- unlink $Dfile;
-}
-
-{
- # DBM Filter with a closure
-
- use warnings ;
- use strict ;
- my (%h, $db) ;
-
- unlink $Dfile;
- ok(84, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
-
- my %result = () ;
-
- sub Closure
- {
- my ($name) = @_ ;
- my $count = 0 ;
- my @kept = () ;
-
- return sub { ++$count ;
- push @kept, $_ ;
- $result{$name} = "$name - $count: [@kept]" ;
- }
- }
-
- $db->filter_store_key(Closure("store key")) ;
- $db->filter_store_value(Closure("store value")) ;
- $db->filter_fetch_key(Closure("fetch key")) ;
- $db->filter_fetch_value(Closure("fetch value")) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- ok(85, $result{"store key"} eq "store key - 1: [fred]");
- ok(86, $result{"store value"} eq "store value - 1: [joe]");
- ok(87, ! defined $result{"fetch key"} );
- ok(88, ! defined $result{"fetch value"} );
- ok(89, $_ eq "original") ;
-
- ok(90, $db->FIRSTKEY() eq "fred") ;
- ok(91, $result{"store key"} eq "store key - 1: [fred]");
- ok(92, $result{"store value"} eq "store value - 1: [joe]");
- ok(93, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(94, ! defined $result{"fetch value"} );
- ok(95, $_ eq "original") ;
-
- $h{"jim"} = "john" ;
- ok(96, $result{"store key"} eq "store key - 2: [fred jim]");
- ok(97, $result{"store value"} eq "store value - 2: [joe john]");
- ok(98, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(99, ! defined $result{"fetch value"} );
- ok(100, $_ eq "original") ;
-
- ok(101, $h{"fred"} eq "joe");
- ok(102, $result{"store key"} eq "store key - 3: [fred jim fred]");
- ok(103, $result{"store value"} eq "store value - 2: [joe john]");
- ok(104, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(105, $result{"fetch value"} eq "fetch value - 1: [joe]");
- ok(106, $_ eq "original") ;
-
- undef $db ;
- untie %h;
- unlink $Dfile;
-}
-
-{
- # DBM Filter recursion detection
- use warnings ;
- use strict ;
- my (%h, $db) ;
- unlink $Dfile;
-
- ok(107, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
-
- $db->filter_store_key (sub { $_ = $h{$_} }) ;
-
- eval '$h{1} = 1234' ;
- ok(108, $@ =~ /^recursion detected in filter_store_key at/ );
-
- undef $db ;
- untie %h;
- unlink $Dfile;
-}
-
-
-{
- # Examples from the POD
-
- my $file = "xyzt" ;
- {
- my $redirect = new Redirect $file ;
-
- use warnings FATAL => qw(all);
- use strict ;
- use DB_File ;
- use vars qw( %h $k $v ) ;
-
- unlink "fruit" ;
- tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0640, $DB_HASH
- or die "Cannot open file 'fruit': $!\n";
-
- # Add a few key/value pairs to the file
- $h{"apple"} = "red" ;
- $h{"orange"} = "orange" ;
- $h{"banana"} = "yellow" ;
- $h{"tomato"} = "red" ;
-
- # Check for existence of a key
- print "Banana Exists\n\n" if $h{"banana"} ;
-
- # Delete a key/value pair.
- delete $h{"apple"} ;
-
- # print the contents of the file
- while (($k, $v) = each %h)
- { print "$k -> $v\n" }
-
- untie %h ;
-
- unlink "fruit" ;
- }
-
- ok(109, docat_del($file) eq <<'EOM') ;
-Banana Exists
-
-orange -> orange
-tomato -> red
-banana -> yellow
-EOM
-
-}
-
-{
- # Bug ID 20001013.009
- #
- # test that $hash{KEY} = undef doesn't produce the warning
- # Use of uninitialized value in null operation
- use warnings ;
- use strict ;
- use DB_File ;
-
- unlink $Dfile;
- my %h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- tie %h, 'DB_File', $Dfile or die "Can't open file: $!\n" ;
- $h{ABC} = undef;
- ok(110, $a eq "") ;
- untie %h ;
- unlink $Dfile;
-}
-
-{
- # test that %hash = () doesn't produce the warning
- # Argument "" isn't numeric in entersub
- use warnings ;
- use strict ;
- use DB_File ;
-
- unlink $Dfile;
- my %h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- tie %h, 'DB_File', $Dfile or die "Can't open file: $!\n" ;
- %h = (); ;
- ok(111, $a eq "") ;
- untie %h ;
- unlink $Dfile;
-}
-
-exit ;
diff --git a/contrib/perl5/t/lib/db-recno.t b/contrib/perl5/t/lib/db-recno.t
deleted file mode 100755
index 8b5a88c..0000000
--- a/contrib/perl5/t/lib/db-recno.t
+++ /dev/null
@@ -1,889 +0,0 @@
-#!./perl -w
-
-BEGIN {
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bDB_File\b/) {
- print "1..0 # Skip: DB_File was not built\n";
- exit 0;
- }
-}
-
-use DB_File;
-use Fcntl;
-use strict ;
-use warnings;
-use vars qw($dbh $Dfile $bad_ones $FA) ;
-
-# full tied array support started in Perl 5.004_57
-# Double check to see if it is available.
-
-{
- sub try::TIEARRAY { bless [], "try" }
- sub try::FETCHSIZE { $FA = 1 }
- $FA = 0 ;
- my @a ;
- tie @a, 'try' ;
- my $a = @a ;
-}
-
-
-sub ok
-{
- my $no = shift ;
- my $result = shift ;
-
- print "not " unless $result ;
- print "ok $no\n" ;
-
- return $result ;
-}
-
-{
- package Redirect ;
- use Symbol ;
-
- sub new
- {
- my $class = shift ;
- my $filename = shift ;
- my $fh = gensym ;
- open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
- my $real_stdout = select($fh) ;
- return bless [$fh, $real_stdout ] ;
-
- }
- sub DESTROY
- {
- my $self = shift ;
- close $self->[0] ;
- select($self->[1]) ;
- }
-}
-
-sub docat
-{
- my $file = shift;
- local $/ = undef;
- open(CAT,$file) || die "Cannot open $file:$!";
- my $result = <CAT>;
- close(CAT);
- return $result;
-}
-
-sub docat_del
-{
- my $file = shift;
- local $/ = undef;
- open(CAT,$file) || die "Cannot open $file: $!";
- my $result = <CAT>;
- close(CAT);
- unlink $file ;
- return $result;
-}
-
-sub bad_one
-{
- print STDERR <<EOM unless $bad_ones++ ;
-#
-# Some older versions of Berkeley DB version 1 will fail tests 51,
-# 53 and 55.
-#
-# You can safely ignore the errors if you're never going to use the
-# broken functionality (recno databases with a modified bval).
-# Otherwise you'll have to upgrade your DB library.
-#
-# If you want to use Berkeley DB version 1, then 1.85 and 1.86 are the
-# last versions that were released. Berkeley DB version 2 is continually
-# being updated -- Check out http://www.sleepycat.com/ for more details.
-#
-EOM
-}
-
-print "1..128\n";
-
-my $Dfile = "recno.tmp";
-unlink $Dfile ;
-
-umask(0);
-
-# Check the interface to RECNOINFO
-
-my $dbh = new DB_File::RECNOINFO ;
-ok(1, ! defined $dbh->{bval}) ;
-ok(2, ! defined $dbh->{cachesize}) ;
-ok(3, ! defined $dbh->{psize}) ;
-ok(4, ! defined $dbh->{flags}) ;
-ok(5, ! defined $dbh->{lorder}) ;
-ok(6, ! defined $dbh->{reclen}) ;
-ok(7, ! defined $dbh->{bfname}) ;
-
-$dbh->{bval} = 3000 ;
-ok(8, $dbh->{bval} == 3000 );
-
-$dbh->{cachesize} = 9000 ;
-ok(9, $dbh->{cachesize} == 9000 );
-
-$dbh->{psize} = 400 ;
-ok(10, $dbh->{psize} == 400 );
-
-$dbh->{flags} = 65 ;
-ok(11, $dbh->{flags} == 65 );
-
-$dbh->{lorder} = 123 ;
-ok(12, $dbh->{lorder} == 123 );
-
-$dbh->{reclen} = 1234 ;
-ok(13, $dbh->{reclen} == 1234 );
-
-$dbh->{bfname} = 1234 ;
-ok(14, $dbh->{bfname} == 1234 );
-
-
-# Check that an invalid entry is caught both for store & fetch
-eval '$dbh->{fred} = 1234' ;
-ok(15, $@ =~ /^DB_File::RECNOINFO::STORE - Unknown element 'fred' at/ );
-eval 'my $q = $dbh->{fred}' ;
-ok(16, $@ =~ /^DB_File::RECNOINFO::FETCH - Unknown element 'fred' at/ );
-
-# Now check the interface to RECNOINFO
-
-my $X ;
-my @h ;
-ok(17, $X = tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ;
-
-ok(18, ((stat($Dfile))[2] & 0777) == ($^O eq 'os2' ? 0666 : 0640)
- || $^O eq 'MSWin32' || $^O eq 'amigaos') ;
-
-#my $l = @h ;
-my $l = $X->length ;
-ok(19, ($FA ? @h == 0 : !$l) );
-
-my @data = qw( a b c d ever f g h i j k longername m n o p) ;
-
-$h[0] = shift @data ;
-ok(20, $h[0] eq 'a' );
-
-my $ i;
-foreach (@data)
- { $h[++$i] = $_ }
-
-unshift (@data, 'a') ;
-
-ok(21, defined $h[1] );
-ok(22, ! defined $h[16] );
-ok(23, $FA ? @h == @data : $X->length == @data );
-
-
-# Overwrite an entry & check fetch it
-$h[3] = 'replaced' ;
-$data[3] = 'replaced' ;
-ok(24, $h[3] eq 'replaced' );
-
-#PUSH
-my @push_data = qw(added to the end) ;
-($FA ? push(@h, @push_data) : $X->push(@push_data)) ;
-push (@data, @push_data) ;
-ok(25, $h[++$i] eq 'added' );
-ok(26, $h[++$i] eq 'to' );
-ok(27, $h[++$i] eq 'the' );
-ok(28, $h[++$i] eq 'end' );
-
-# POP
-my $popped = pop (@data) ;
-my $value = ($FA ? pop @h : $X->pop) ;
-ok(29, $value eq $popped) ;
-
-# SHIFT
-$value = ($FA ? shift @h : $X->shift) ;
-my $shifted = shift @data ;
-ok(30, $value eq $shifted );
-
-# UNSHIFT
-
-# empty list
-($FA ? unshift @h : $X->unshift) ;
-ok(31, ($FA ? @h == @data : $X->length == @data ));
-
-my @new_data = qw(add this to the start of the array) ;
-$FA ? unshift (@h, @new_data) : $X->unshift (@new_data) ;
-unshift (@data, @new_data) ;
-ok(32, $FA ? @h == @data : $X->length == @data );
-ok(33, $h[0] eq "add") ;
-ok(34, $h[1] eq "this") ;
-ok(35, $h[2] eq "to") ;
-ok(36, $h[3] eq "the") ;
-ok(37, $h[4] eq "start") ;
-ok(38, $h[5] eq "of") ;
-ok(39, $h[6] eq "the") ;
-ok(40, $h[7] eq "array") ;
-ok(41, $h[8] eq $data[8]) ;
-
-# SPLICE
-
-# Now both arrays should be identical
-
-my $ok = 1 ;
-my $j = 0 ;
-foreach (@data)
-{
- $ok = 0, last if $_ ne $h[$j ++] ;
-}
-ok(42, $ok );
-
-# Neagtive subscripts
-
-# get the last element of the array
-ok(43, $h[-1] eq $data[-1] );
-ok(44, $h[-1] eq $h[ ($FA ? @h : $X->length) -1] );
-
-# get the first element using a negative subscript
-eval '$h[ - ( $FA ? @h : $X->length)] = "abcd"' ;
-ok(45, $@ eq "" );
-ok(46, $h[0] eq "abcd" );
-
-# now try to read before the start of the array
-eval '$h[ - (1 + ($FA ? @h : $X->length))] = 1234' ;
-ok(47, $@ =~ '^Modification of non-creatable array value attempted' );
-
-# IMPORTANT - $X must be undefined before the untie otherwise the
-# underlying DB close routine will not get called.
-undef $X ;
-untie(@h);
-
-unlink $Dfile;
-
-
-{
- # Check bval defaults to \n
-
- my @h = () ;
- my $dbh = new DB_File::RECNOINFO ;
- ok(48, tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $dbh ) ;
- $h[0] = "abc" ;
- $h[1] = "def" ;
- $h[3] = "ghi" ;
- untie @h ;
- my $x = docat($Dfile) ;
- unlink $Dfile;
- ok(49, $x eq "abc\ndef\n\nghi\n") ;
-}
-
-{
- # Change bval
-
- my @h = () ;
- my $dbh = new DB_File::RECNOINFO ;
- $dbh->{bval} = "-" ;
- ok(50, tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $dbh ) ;
- $h[0] = "abc" ;
- $h[1] = "def" ;
- $h[3] = "ghi" ;
- untie @h ;
- my $x = docat($Dfile) ;
- unlink $Dfile;
- my $ok = ($x eq "abc-def--ghi-") ;
- bad_one() unless $ok ;
- ok(51, $ok) ;
-}
-
-{
- # Check R_FIXEDLEN with default bval (space)
-
- my @h = () ;
- my $dbh = new DB_File::RECNOINFO ;
- $dbh->{flags} = R_FIXEDLEN ;
- $dbh->{reclen} = 5 ;
- ok(52, tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $dbh ) ;
- $h[0] = "abc" ;
- $h[1] = "def" ;
- $h[3] = "ghi" ;
- untie @h ;
- my $x = docat($Dfile) ;
- unlink $Dfile;
- my $ok = ($x eq "abc def ghi ") ;
- bad_one() unless $ok ;
- ok(53, $ok) ;
-}
-
-{
- # Check R_FIXEDLEN with user-defined bval
-
- my @h = () ;
- my $dbh = new DB_File::RECNOINFO ;
- $dbh->{flags} = R_FIXEDLEN ;
- $dbh->{bval} = "-" ;
- $dbh->{reclen} = 5 ;
- ok(54, tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $dbh ) ;
- $h[0] = "abc" ;
- $h[1] = "def" ;
- $h[3] = "ghi" ;
- untie @h ;
- my $x = docat($Dfile) ;
- unlink $Dfile;
- my $ok = ($x eq "abc--def-------ghi--") ;
- bad_one() unless $ok ;
- ok(55, $ok) ;
-}
-
-{
- # check that attempting to tie an associative array to a DB_RECNO will fail
-
- my $filename = "xyz" ;
- my %x ;
- eval { tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0640, $DB_RECNO ; } ;
- ok(56, $@ =~ /^DB_File can only tie an array to a DB_RECNO database/) ;
- unlink $filename ;
-}
-
-{
- # sub-class test
-
- package Another ;
-
- use warnings ;
- use strict ;
-
- open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ;
- print FILE <<'EOM' ;
-
- package SubDB ;
-
- use warnings ;
- use strict ;
- use vars qw( @ISA @EXPORT) ;
-
- require Exporter ;
- use DB_File;
- @ISA=qw(DB_File);
- @EXPORT = @DB_File::EXPORT ;
-
- sub STORE {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::STORE($key, $value * 2) ;
- }
-
- sub FETCH {
- my $self = shift ;
- my $key = shift ;
- $self->SUPER::FETCH($key) - 1 ;
- }
-
- sub put {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::put($key, $value * 3) ;
- }
-
- sub get {
- my $self = shift ;
- $self->SUPER::get($_[0], $_[1]) ;
- $_[1] -= 2 ;
- }
-
- sub A_new_method
- {
- my $self = shift ;
- my $key = shift ;
- my $value = $self->FETCH($key) ;
- return "[[$value]]" ;
- }
-
- 1 ;
-EOM
-
- close FILE ;
-
- BEGIN { push @INC, '.'; }
- eval 'use SubDB ; ';
- main::ok(57, $@ eq "") ;
- my @h ;
- my $X ;
- eval '
- $X = tie(@h, "SubDB","recno.tmp", O_RDWR|O_CREAT, 0640, $DB_RECNO );
- ' ;
-
- main::ok(58, $@ eq "") ;
-
- my $ret = eval '$h[3] = 3 ; return $h[3] ' ;
- main::ok(59, $@ eq "") ;
- main::ok(60, $ret == 5) ;
-
- my $value = 0;
- $ret = eval '$X->put(1, 4) ; $X->get(1, $value) ; return $value' ;
- main::ok(61, $@ eq "") ;
- main::ok(62, $ret == 10) ;
-
- $ret = eval ' R_NEXT eq main::R_NEXT ' ;
- main::ok(63, $@ eq "" ) ;
- main::ok(64, $ret == 1) ;
-
- $ret = eval '$X->A_new_method(1) ' ;
- main::ok(65, $@ eq "") ;
- main::ok(66, $ret eq "[[11]]") ;
-
- undef $X;
- untie(@h);
- unlink "SubDB.pm", "recno.tmp" ;
-
-}
-
-{
-
- # test $#
- my $self ;
- unlink $Dfile;
- ok(67, $self = tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ;
- $h[0] = "abc" ;
- $h[1] = "def" ;
- $h[2] = "ghi" ;
- $h[3] = "jkl" ;
- ok(68, $FA ? $#h == 3 : $self->length() == 4) ;
- undef $self ;
- untie @h ;
- my $x = docat($Dfile) ;
- ok(69, $x eq "abc\ndef\nghi\njkl\n") ;
-
- # $# sets array to same length
- ok(70, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ;
- if ($FA)
- { $#h = 3 }
- else
- { $self->STORESIZE(4) }
- ok(71, $FA ? $#h == 3 : $self->length() == 4) ;
- undef $self ;
- untie @h ;
- $x = docat($Dfile) ;
- ok(72, $x eq "abc\ndef\nghi\njkl\n") ;
-
- # $# sets array to bigger
- ok(73, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ;
- if ($FA)
- { $#h = 6 }
- else
- { $self->STORESIZE(7) }
- ok(74, $FA ? $#h == 6 : $self->length() == 7) ;
- undef $self ;
- untie @h ;
- $x = docat($Dfile) ;
- ok(75, $x eq "abc\ndef\nghi\njkl\n\n\n\n") ;
-
- # $# sets array smaller
- ok(76, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ;
- if ($FA)
- { $#h = 2 }
- else
- { $self->STORESIZE(3) }
- ok(77, $FA ? $#h == 2 : $self->length() == 3) ;
- undef $self ;
- untie @h ;
- $x = docat($Dfile) ;
- ok(78, $x eq "abc\ndef\nghi\n") ;
-
- unlink $Dfile;
-
-
-}
-
-{
- # DBM Filter tests
- use warnings ;
- use strict ;
- my (@h, $db) ;
- my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- unlink $Dfile;
-
- sub checkOutput
- {
- my($fk, $sk, $fv, $sv) = @_ ;
- return
- $fetch_key eq $fk && $store_key eq $sk &&
- $fetch_value eq $fv && $store_value eq $sv &&
- $_ eq 'original' ;
- }
-
- ok(79, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );
-
- $db->filter_fetch_key (sub { $fetch_key = $_ }) ;
- $db->filter_store_key (sub { $store_key = $_ }) ;
- $db->filter_fetch_value (sub { $fetch_value = $_}) ;
- $db->filter_store_value (sub { $store_value = $_ }) ;
-
- $_ = "original" ;
-
- $h[0] = "joe" ;
- # fk sk fv sv
- ok(80, checkOutput( "", 0, "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(81, $h[0] eq "joe");
- # fk sk fv sv
- ok(82, checkOutput( "", 0, "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(83, $db->FIRSTKEY() == 0) ;
- # fk sk fv sv
- ok(84, checkOutput( 0, "", "", "")) ;
-
- # replace the filters, but remember the previous set
- my ($old_fk) = $db->filter_fetch_key
- (sub { ++ $_ ; $fetch_key = $_ }) ;
- my ($old_sk) = $db->filter_store_key
- (sub { $_ *= 2 ; $store_key = $_ }) ;
- my ($old_fv) = $db->filter_fetch_value
- (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
- my ($old_sv) = $db->filter_store_value
- (sub { s/o/x/g; $store_value = $_ }) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h[1] = "Joe" ;
- # fk sk fv sv
- ok(85, checkOutput( "", 2, "", "Jxe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(86, $h[1] eq "[Jxe]");
- # fk sk fv sv
- ok(87, checkOutput( "", 2, "[Jxe]", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(88, $db->FIRSTKEY() == 1) ;
- # fk sk fv sv
- ok(89, checkOutput( 1, "", "", "")) ;
-
- # put the original filters back
- $db->filter_fetch_key ($old_fk);
- $db->filter_store_key ($old_sk);
- $db->filter_fetch_value ($old_fv);
- $db->filter_store_value ($old_sv);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h[0] = "joe" ;
- ok(90, checkOutput( "", 0, "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(91, $h[0] eq "joe");
- ok(92, checkOutput( "", 0, "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(93, $db->FIRSTKEY() == 0) ;
- ok(94, checkOutput( 0, "", "", "")) ;
-
- # delete the filters
- $db->filter_fetch_key (undef);
- $db->filter_store_key (undef);
- $db->filter_fetch_value (undef);
- $db->filter_store_value (undef);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h[0] = "joe" ;
- ok(95, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(96, $h[0] eq "joe");
- ok(97, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(98, $db->FIRSTKEY() == 0) ;
- ok(99, checkOutput( "", "", "", "")) ;
-
- undef $db ;
- untie @h;
- unlink $Dfile;
-}
-
-{
- # DBM Filter with a closure
-
- use warnings ;
- use strict ;
- my (@h, $db) ;
-
- unlink $Dfile;
- ok(100, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );
-
- my %result = () ;
-
- sub Closure
- {
- my ($name) = @_ ;
- my $count = 0 ;
- my @kept = () ;
-
- return sub { ++$count ;
- push @kept, $_ ;
- $result{$name} = "$name - $count: [@kept]" ;
- }
- }
-
- $db->filter_store_key(Closure("store key")) ;
- $db->filter_store_value(Closure("store value")) ;
- $db->filter_fetch_key(Closure("fetch key")) ;
- $db->filter_fetch_value(Closure("fetch value")) ;
-
- $_ = "original" ;
-
- $h[0] = "joe" ;
- ok(101, $result{"store key"} eq "store key - 1: [0]");
- ok(102, $result{"store value"} eq "store value - 1: [joe]");
- ok(103, ! defined $result{"fetch key"} );
- ok(104, ! defined $result{"fetch value"} );
- ok(105, $_ eq "original") ;
-
- ok(106, $db->FIRSTKEY() == 0 ) ;
- ok(107, $result{"store key"} eq "store key - 1: [0]");
- ok(108, $result{"store value"} eq "store value - 1: [joe]");
- ok(109, $result{"fetch key"} eq "fetch key - 1: [0]");
- ok(110, ! defined $result{"fetch value"} );
- ok(111, $_ eq "original") ;
-
- $h[7] = "john" ;
- ok(112, $result{"store key"} eq "store key - 2: [0 7]");
- ok(113, $result{"store value"} eq "store value - 2: [joe john]");
- ok(114, $result{"fetch key"} eq "fetch key - 1: [0]");
- ok(115, ! defined $result{"fetch value"} );
- ok(116, $_ eq "original") ;
-
- ok(117, $h[0] eq "joe");
- ok(118, $result{"store key"} eq "store key - 3: [0 7 0]");
- ok(119, $result{"store value"} eq "store value - 2: [joe john]");
- ok(120, $result{"fetch key"} eq "fetch key - 1: [0]");
- ok(121, $result{"fetch value"} eq "fetch value - 1: [joe]");
- ok(122, $_ eq "original") ;
-
- undef $db ;
- untie @h;
- unlink $Dfile;
-}
-
-{
- # DBM Filter recursion detection
- use warnings ;
- use strict ;
- my (@h, $db) ;
- unlink $Dfile;
-
- ok(123, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );
-
- $db->filter_store_key (sub { $_ = $h[0] }) ;
-
- eval '$h[1] = 1234' ;
- ok(124, $@ =~ /^recursion detected in filter_store_key at/ );
-
- undef $db ;
- untie @h;
- unlink $Dfile;
-}
-
-
-{
- # Examples from the POD
-
- my $file = "xyzt" ;
- {
- my $redirect = new Redirect $file ;
-
- use warnings FATAL => qw(all);
- use strict ;
- use DB_File ;
-
- my $filename = "text" ;
- unlink $filename ;
-
- my @h ;
- my $x = tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_RECNO
- or die "Cannot open file 'text': $!\n" ;
-
- # Add a few key/value pairs to the file
- $h[0] = "orange" ;
- $h[1] = "blue" ;
- $h[2] = "yellow" ;
-
- $FA ? push @h, "green", "black"
- : $x->push("green", "black") ;
-
- my $elements = $FA ? scalar @h : $x->length ;
- print "The array contains $elements entries\n" ;
-
- my $last = $FA ? pop @h : $x->pop ;
- print "popped $last\n" ;
-
- $FA ? unshift @h, "white"
- : $x->unshift("white") ;
- my $first = $FA ? shift @h : $x->shift ;
- print "shifted $first\n" ;
-
- # Check for existence of a key
- print "Element 1 Exists with value $h[1]\n" if $h[1] ;
-
- # use a negative index
- print "The last element is $h[-1]\n" ;
- print "The 2nd last element is $h[-2]\n" ;
-
- undef $x ;
- untie @h ;
-
- unlink $filename ;
- }
-
- ok(125, docat_del($file) eq <<'EOM') ;
-The array contains 5 entries
-popped black
-shifted white
-Element 1 Exists with value blue
-The last element is green
-The 2nd last element is yellow
-EOM
-
- my $save_output = "xyzt" ;
- {
- my $redirect = new Redirect $save_output ;
-
- use warnings FATAL => qw(all);
- use strict ;
- use vars qw(@h $H $file $i) ;
- use DB_File ;
- use Fcntl ;
-
- $file = "text" ;
-
- unlink $file ;
-
- $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0640, $DB_RECNO
- or die "Cannot open file $file: $!\n" ;
-
- # first create a text file to play with
- $h[0] = "zero" ;
- $h[1] = "one" ;
- $h[2] = "two" ;
- $h[3] = "three" ;
- $h[4] = "four" ;
-
-
- # Print the records in order.
- #
- # The length method is needed here because evaluating a tied
- # array in a scalar context does not return the number of
- # elements in the array.
-
- print "\nORIGINAL\n" ;
- foreach $i (0 .. $H->length - 1) {
- print "$i: $h[$i]\n" ;
- }
-
- # use the push & pop methods
- $a = $H->pop ;
- $H->push("last") ;
- print "\nThe last record was [$a]\n" ;
-
- # and the shift & unshift methods
- $a = $H->shift ;
- $H->unshift("first") ;
- print "The first record was [$a]\n" ;
-
- # Use the API to add a new record after record 2.
- $i = 2 ;
- $H->put($i, "Newbie", R_IAFTER) ;
-
- # and a new record before record 1.
- $i = 1 ;
- $H->put($i, "New One", R_IBEFORE) ;
-
- # delete record 3
- $H->del(3) ;
-
- # now print the records in reverse order
- print "\nREVERSE\n" ;
- for ($i = $H->length - 1 ; $i >= 0 ; -- $i)
- { print "$i: $h[$i]\n" }
-
- # same again, but use the API functions instead
- print "\nREVERSE again\n" ;
- my ($s, $k, $v) = (0, 0, 0) ;
- for ($s = $H->seq($k, $v, R_LAST) ;
- $s == 0 ;
- $s = $H->seq($k, $v, R_PREV))
- { print "$k: $v\n" }
-
- undef $H ;
- untie @h ;
-
- unlink $file ;
- }
-
- ok(126, docat_del($save_output) eq <<'EOM') ;
-
-ORIGINAL
-0: zero
-1: one
-2: two
-3: three
-4: four
-
-The last record was [four]
-The first record was [zero]
-
-REVERSE
-5: last
-4: three
-3: Newbie
-2: one
-1: New One
-0: first
-
-REVERSE again
-5: last
-4: three
-3: Newbie
-2: one
-1: New One
-0: first
-EOM
-
-}
-
-{
- # Bug ID 20001013.009
- #
- # test that $hash{KEY} = undef doesn't produce the warning
- # Use of uninitialized value in null operation
- use warnings ;
- use strict ;
- use DB_File ;
-
- unlink $Dfile;
- my @h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO
- or die "Can't open file: $!\n" ;
- $h[0] = undef;
- ok(127, $a eq "") ;
- untie @h ;
- unlink $Dfile;
-}
-
-{
- # test that %hash = () doesn't produce the warning
- # Argument "" isn't numeric in entersub
- use warnings ;
- use strict ;
- use DB_File ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- unlink $Dfile;
- my @h ;
-
- tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO
- or die "Can't open file: $!\n" ;
- @h = (); ;
- ok(128, $a eq "") ;
- untie @h ;
- unlink $Dfile;
-}
-
-exit ;
diff --git a/contrib/perl5/t/lib/dirhand.t b/contrib/perl5/t/lib/dirhand.t
deleted file mode 100755
index aa7be35..0000000
--- a/contrib/perl5/t/lib/dirhand.t
+++ /dev/null
@@ -1,33 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if (not $Config{'d_readdir'}) {
- print "1..0\n";
- exit 0;
- }
-}
-
-use DirHandle;
-
-print "1..5\n";
-
-$dot = new DirHandle ".";
-print defined($dot) ? "ok" : "not ok", " 1\n";
-
-@a = sort <*>;
-do { $first = $dot->read } while defined($first) && $first =~ /^\./;
-print +(grep { $_ eq $first } @a) ? "ok" : "not ok", " 2\n";
-
-@b = sort($first, (grep {/^[^.]/} $dot->read));
-print +(join("\0", @a) eq join("\0", @b)) ? "ok" : "not ok", " 3\n";
-
-$dot->rewind;
-@c = sort grep {/^[^.]/} $dot->read;
-print +(join("\0", @b) eq join("\0", @c)) ? "ok" : "not ok", " 4\n";
-
-$dot->close;
-$dot->rewind;
-print defined($dot->read) ? "not ok" : "ok", " 5\n";
diff --git a/contrib/perl5/t/lib/dosglob.t b/contrib/perl5/t/lib/dosglob.t
deleted file mode 100755
index fd9bb1d..0000000
--- a/contrib/perl5/t/lib/dosglob.t
+++ /dev/null
@@ -1,112 +0,0 @@
-#!./perl
-
-#
-# test glob() in File::DosGlob
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..10\n";
-
-# override it in main::
-use File::DosGlob 'glob';
-
-# test if $_ takes as the default
-$_ = "lib/a*.t";
-my @r = glob;
-print "not " if $_ ne 'lib/a*.t';
-print "ok 1\n";
-# we should have at least abbrev.t, anydbm.t, autoloader.t
-print "# |@r|\nnot " if @r < 3;
-print "ok 2\n";
-
-# check if <*/*> works
-@r = <*/a*.t>;
-# atleast {argv,abbrev,anydbm,autoloader,append,arith,array,assignwarn,auto}.t
-print "not " if @r < 9;
-print "ok 3\n";
-my $r = scalar @r;
-
-# check if scalar context works
-@r = ();
-while (defined($_ = <*/a*.t>)) {
- print "# $_\n";
- push @r, $_;
-}
-print "not " if @r != $r;
-print "ok 4\n";
-
-# check if list context works
-@r = ();
-for (<*/a*.t>) {
- print "# $_\n";
- push @r, $_;
-}
-print "not " if @r != $r;
-print "ok 5\n";
-
-# test if implicit assign to $_ in while() works
-@r = ();
-while (<*/a*.t>) {
- print "# $_\n";
- push @r, $_;
-}
-print "not " if @r != $r;
-print "ok 6\n";
-
-# test if explicit glob() gets assign magic too
-my @s = ();
-while (glob '*/a*.t') {
- print "# $_\n";
- push @s, $_;
-}
-print "not " if "@r" ne "@s";
-print "ok 7\n";
-
-# how about in a different package, like?
-package Foo;
-use File::DosGlob 'glob';
-@s = ();
-while (glob '*/a*.t') {
- print "# $_\n";
- push @s, $_;
-}
-print "not " if "@r" ne "@s";
-print "ok 8\n";
-
-# test if different glob ops maintain independent contexts
-@s = ();
-while (<*/a*.t>) {
- my $i = 0;
- print "# $_ <";
- push @s, $_;
- while (<*/b*.t>) {
- print " $_";
- $i++;
- }
- print " >\n";
-}
-print "not " if "@r" ne "@s";
-print "ok 9\n";
-
-# how about a global override, hm?
-eval <<'EOT';
-use File::DosGlob 'GLOBAL_glob';
-package Bar;
-@s = ();
-while (<*/a*.t>) {
- my $i = 0;
- print "# $_ <";
- push @s, $_;
- while (glob '*/b*.t') {
- print " $_";
- $i++;
- }
- print " >\n";
-}
-print "not " if "@r" ne "@s";
-print "ok 10\n";
-EOT
diff --git a/contrib/perl5/t/lib/dprof.t b/contrib/perl5/t/lib/dprof.t
deleted file mode 100755
index be711f1..0000000
--- a/contrib/perl5/t/lib/dprof.t
+++ /dev/null
@@ -1,88 +0,0 @@
-#!perl
-
-BEGIN {
- chdir( 't' ) if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bDevel\/DProf\b/){
- print "1..0 # Skip: Devel::DProf was not built\n";
- exit 0;
- }
-}
-
-END {
- while(-e 'tmon.out' && unlink 'tmon.out') {}
- while(-e 'err' && unlink 'err') {}
-}
-
-use Benchmark qw( timediff timestr );
-use Getopt::Std 'getopts';
-getopts('vI:p:');
-
-# -v Verbose
-# -I Add to @INC
-# -p Name of perl binary
-
-@tests = @ARGV ? @ARGV : sort (<lib/dprof/*_t>, <lib/dprof/*_v>); # glob-sort, for OS/2
-
-$path_sep = $Config{path_sep} || ':';
-$perl5lib = $opt_I || join( $path_sep, @INC );
-$perl = $opt_p || $^X;
-
-if( $opt_v ){
- print "tests: @tests\n";
- print "perl: $perl\n";
- print "perl5lib: $perl5lib\n";
-}
-if( $perl =~ m|^\./| ){
- # turn ./perl into ../perl, because of chdir(t) above.
- $perl = ".$perl";
-}
-if( ! -f $perl ){ die "Where's Perl?" }
-
-sub profile {
- my $test = shift;
- my @results;
- local $ENV{PERL5LIB} = $perl5lib;
- my $opt_d = '-d:DProf';
-
- my $t_start = new Benchmark;
- open( R, "$perl \"$opt_d\" $test |" ) || warn "$0: Can't run. $!\n";
- @results = <R>;
- close R;
- my $t_total = timediff( new Benchmark, $t_start );
-
- if( $opt_v ){
- print "\n";
- print @results
- }
-
- print '# ',timestr( $t_total, 'nop' ), "\n";
-}
-
-
-sub verify {
- my $test = shift;
-
- my $command = $perl.' "-I../lib" "-I./lib/dprof" '.$test;
- $command .= ' -v' if $opt_v;
- $command .= ' -p '. $perl;
- system $command;
-}
-
-
-$| = 1;
-print "1..18\n";
-while( @tests ){
- $test = shift @tests;
- $test =~ s/\.$// if $^O eq 'VMS';
- if( $test =~ /_t$/i ){
- print "# $test" . '.' x (20 - length $test);
- profile $test;
- }
- else{
- verify $test;
- }
-}
-
-unlink("tmon.out");
diff --git a/contrib/perl5/t/lib/dprof/V.pm b/contrib/perl5/t/lib/dprof/V.pm
deleted file mode 100644
index 152cddc..0000000
--- a/contrib/perl5/t/lib/dprof/V.pm
+++ /dev/null
@@ -1,63 +0,0 @@
-package V;
-
-use Getopt::Std 'getopts';
-getopts('vp:d:');
-
-require Exporter;
-@ISA = 'Exporter';
-
-@EXPORT = qw( dprofpp $opt_v $results $expected report @results );
-@EXPORT_OK = qw( notok ok $num );
-
-$num = 0;
-$results = $expected = '';
-$perl = $opt_p || $^X;
-$dpp = $opt_d || '../utils/dprofpp';
-$dpp .= '.com' if $^O eq 'VMS';
-
-print "\nperl: $perl\n" if $opt_v;
-if( ! -f $perl ){ die "Where's Perl?" }
-if( ! -f $dpp ) {
- ($dpp = $^X) =~ s@(^.*)[/|\\].*@$1/dprofpp@;
- die "Where's dprofpp?" if( ! -f $dpp );
-}
-
-sub dprofpp {
- my $switches = shift;
-
- open( D, "$perl \"-I../lib\" $dpp \"$switches\" 2> err |" ) || warn "$0: Can't run. $!\n";
- @results = <D>;
- close D;
-
- open( D, "<err" ) || warn "$0: Can't open: $!\n";
- @err = <D>;
- close D;
- push( @results, @err ) if @err;
-
- $results = qq{@results};
- # ignore Loader (Dyna/Auto etc), leave newline
- $results =~ s/^\w+Loader::import//;
- $results =~ s/\n /\n/gm;
- $results;
-}
-
-sub report {
- $num = shift;
- my $sub = shift;
- my $x;
-
- $x = &$sub;
- $x ? &ok : &notok;
-}
-
-sub ok {
- print "ok $num\n";
-}
-
-sub notok {
- print "not ok $num\n";
- print "\nResult\n{$results}\n";
- print "Expected\n{$expected}\n";
-}
-
-1;
diff --git a/contrib/perl5/t/lib/dprof/test1_t b/contrib/perl5/t/lib/dprof/test1_t
deleted file mode 100644
index d504cd5..0000000
--- a/contrib/perl5/t/lib/dprof/test1_t
+++ /dev/null
@@ -1,18 +0,0 @@
-sub foo {
- print "in sub foo\n";
- bar();
-}
-
-sub bar {
- print "in sub bar\n";
-}
-
-sub baz {
- print "in sub baz\n";
- bar();
- foo();
-}
-
-bar();
-baz();
-foo();
diff --git a/contrib/perl5/t/lib/dprof/test1_v b/contrib/perl5/t/lib/dprof/test1_v
deleted file mode 100644
index 542a503..0000000
--- a/contrib/perl5/t/lib/dprof/test1_v
+++ /dev/null
@@ -1,24 +0,0 @@
-# perl
-
-use V;
-
-dprofpp( '-T' );
-$expected =
-qq{main::bar
-main::baz
- main::bar
- main::foo
- main::bar
-main::foo
- main::bar
-};
-report 1, sub { $expected eq $results };
-
-dprofpp('-TF');
-report 2, sub { $expected eq $results };
-
-dprofpp( '-t' );
-report 3, sub { $expected eq $results };
-
-dprofpp('-tF');
-report 4, sub { $expected eq $results };
diff --git a/contrib/perl5/t/lib/dprof/test2_t b/contrib/perl5/t/lib/dprof/test2_t
deleted file mode 100644
index edc46c5..0000000
--- a/contrib/perl5/t/lib/dprof/test2_t
+++ /dev/null
@@ -1,21 +0,0 @@
-sub foo {
- print "in sub foo\n";
- bar();
-}
-
-sub bar {
- print "in sub bar\n";
-}
-
-sub baz {
- print "in sub baz\n";
- bar();
- bar();
- bar();
- foo();
-}
-
-bar();
-bar();
-baz();
-foo();
diff --git a/contrib/perl5/t/lib/dprof/test2_v b/contrib/perl5/t/lib/dprof/test2_v
deleted file mode 100644
index 8b775b3..0000000
--- a/contrib/perl5/t/lib/dprof/test2_v
+++ /dev/null
@@ -1,36 +0,0 @@
-# perl
-
-use V;
-
-dprofpp( '-T' );
-$expected =
-qq{main::bar
-main::bar
-main::baz
- main::bar
- main::bar
- main::bar
- main::foo
- main::bar
-main::foo
- main::bar
-};
-report 5, sub { $expected eq $results };
-
-dprofpp('-TF');
-report 6, sub { $expected eq $results };
-
-dprofpp( '-t' );
-$expected =
-qq{main::bar (2x)
-main::baz
- main::bar (3x)
- main::foo
- main::bar
-main::foo
- main::bar
-};
-report 7, sub { $expected eq $results };
-
-dprofpp('-tF');
-report 8, sub { $expected eq $results };
diff --git a/contrib/perl5/t/lib/dprof/test3_t b/contrib/perl5/t/lib/dprof/test3_t
deleted file mode 100644
index a5327f4..0000000
--- a/contrib/perl5/t/lib/dprof/test3_t
+++ /dev/null
@@ -1,19 +0,0 @@
-sub foo {
- print "in sub foo\n";
- exit(0);
- bar();
-}
-
-sub bar {
- print "in sub bar\n";
-}
-
-sub baz {
- print "in sub baz\n";
- bar();
- foo();
-}
-
-bar();
-baz();
-foo();
diff --git a/contrib/perl5/t/lib/dprof/test3_v b/contrib/perl5/t/lib/dprof/test3_v
deleted file mode 100644
index df7543e..0000000
--- a/contrib/perl5/t/lib/dprof/test3_v
+++ /dev/null
@@ -1,29 +0,0 @@
-# perl
-
-use V;
-
-dprofpp( '-T' );
-$e1 = $expected =
-qq{main::bar
-main::baz
- main::bar
- main::foo
-};
-report 9, sub { $expected eq $results };
-
-dprofpp('-TF');
-$e2 = $expected =
-qq{main::bar
-main::baz
- main::bar
- main::foo
-};
-report 10, sub { $expected eq $results };
-
-dprofpp( '-t' );
-$expected = $e1;
-report 11, sub { 1 };
-
-dprofpp('-tF');
-$expected = $e2;
-report 12, sub { $expected eq $results };
diff --git a/contrib/perl5/t/lib/dprof/test4_t b/contrib/perl5/t/lib/dprof/test4_t
deleted file mode 100644
index 7299682..0000000
--- a/contrib/perl5/t/lib/dprof/test4_t
+++ /dev/null
@@ -1,24 +0,0 @@
-sub foo {
- print "in sub foo\n";
- bar();
-}
-
-sub bar {
- print "in sub bar\n";
-}
-
-sub baz {
- print "in sub baz\n";
- bar();
- bar();
- bar();
- foo();
-}
-
-bar();
-
-eval { fork };
-
-bar();
-baz();
-foo();
diff --git a/contrib/perl5/t/lib/dprof/test4_v b/contrib/perl5/t/lib/dprof/test4_v
deleted file mode 100644
index d9677ff..0000000
--- a/contrib/perl5/t/lib/dprof/test4_v
+++ /dev/null
@@ -1,36 +0,0 @@
-# perl
-
-use V;
-
-dprofpp( '-T' );
-$expected =
-qq{main::bar
-main::bar
-main::baz
- main::bar
- main::bar
- main::bar
- main::foo
- main::bar
-main::foo
- main::bar
-};
-report 13, sub { $expected eq $results };
-
-dprofpp('-TF');
-report 14, sub { $expected eq $results };
-
-dprofpp( '-t' );
-$expected =
-qq{main::bar (2x)
-main::baz
- main::bar (3x)
- main::foo
- main::bar
-main::foo
- main::bar
-};
-report 15, sub { $expected eq $results };
-
-dprofpp('-tF');
-report 16, sub { $expected eq $results };
diff --git a/contrib/perl5/t/lib/dprof/test5_t b/contrib/perl5/t/lib/dprof/test5_t
deleted file mode 100644
index 0b11137..0000000
--- a/contrib/perl5/t/lib/dprof/test5_t
+++ /dev/null
@@ -1,25 +0,0 @@
-# Test that dprof doesn't break
-# &bar; used as &bar(@_);
-
-sub foo1 {
- print "in foo1(@_)\n";
- bar(@_);
-}
-sub foo2 {
- print "in foo2(@_)\n";
- &bar;
-}
-sub bar {
- print "in bar(@_)\n";
- if( @_ > 0 ){
- &yeppers;
- }
-}
-sub yeppers {
- print "rest easy\n";
-}
-
-
-&foo1( A );
-&foo2( B );
-
diff --git a/contrib/perl5/t/lib/dprof/test5_v b/contrib/perl5/t/lib/dprof/test5_v
deleted file mode 100644
index 9e9298c..0000000
--- a/contrib/perl5/t/lib/dprof/test5_v
+++ /dev/null
@@ -1,15 +0,0 @@
-# perl
-
-use V;
-
-dprofpp( '-T' );
-$expected =
-qq{main::foo1
- main::bar
- main::yeppers
-main::foo2
- main::bar
- main::yeppers
-};
-report 17, sub { $expected eq $results };
-
diff --git a/contrib/perl5/t/lib/dprof/test6_t b/contrib/perl5/t/lib/dprof/test6_t
deleted file mode 100644
index 7b8bf4a..0000000
--- a/contrib/perl5/t/lib/dprof/test6_t
+++ /dev/null
@@ -1,29 +0,0 @@
-sub foo {
- my $x;
- my $y;
- print "in sub foo\n";
- for( $x = 1; $x < 100; ++$x ){
- bar();
- for( $y = 1; $y < 100; ++$y ){
- }
- }
-}
-
-sub bar {
- my $x;
- print "in sub bar\n";
- for( $x = 1; $x < 100; ++$x ){
- }
- die "bar exiting";
-}
-
-sub baz {
- print "in sub baz\n";
- eval { bar(); };
- eval { foo(); };
-}
-
-eval { bar(); };
-baz();
-eval { foo(); };
-
diff --git a/contrib/perl5/t/lib/dprof/test6_v b/contrib/perl5/t/lib/dprof/test6_v
deleted file mode 100644
index 2f651ea..0000000
--- a/contrib/perl5/t/lib/dprof/test6_v
+++ /dev/null
@@ -1,16 +0,0 @@
-# perl
-
-use V;
-
-dprofpp( '-T' );
-$expected =
-qq{main::bar
-main::baz
- main::bar
- main::foo
- main::bar
-main::foo
- main::bar
-};
-report 18, sub { $expected eq $results };
-
diff --git a/contrib/perl5/t/lib/dumper-ovl.t b/contrib/perl5/t/lib/dumper-ovl.t
deleted file mode 100755
index d4b3a92..0000000
--- a/contrib/perl5/t/lib/dumper-ovl.t
+++ /dev/null
@@ -1,35 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
- print "1..0 # Skip: Data::Dumper was not built\n";
- exit 0;
- }
-}
-
-use Data::Dumper;
-
-print "1..1\n";
-
-package Foo;
-use overload '""' => 'as_string';
-
-sub new { bless { foo => "bar" }, shift }
-sub as_string { "%%%%" }
-
-package main;
-
-my $f = Foo->new;
-
-print "#\$f=$f\n";
-
-$_ = Dumper($f);
-s/^/#/mg;
-print $_;
-
-print "not " unless /bar/ && /Foo/;
-print "ok 1\n";
-
diff --git a/contrib/perl5/t/lib/dumper.t b/contrib/perl5/t/lib/dumper.t
deleted file mode 100755
index be9732f..0000000
--- a/contrib/perl5/t/lib/dumper.t
+++ /dev/null
@@ -1,810 +0,0 @@
-#!./perl -w
-#
-# testsuite for Data::Dumper
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bData\/Dumper\b/) {
- print "1..0 # Skip: Data::Dumper was not built\n";
- exit 0;
- }
-}
-
-use Data::Dumper;
-use Config;
-my $Is_ebcdic = defined($Config{'ebcdic'}) && $Config{'ebcdic'} eq 'define';
-
-$Data::Dumper::Pad = "#";
-my $TMAX;
-my $XS;
-my $TNUM = 0;
-my $WANT = '';
-
-sub TEST {
- my $string = shift;
- my $t = eval $string;
- ++$TNUM;
- $t =~ s/([A-Z]+)\(0x[0-9a-f]+\)/$1(0xdeadbeef)/g
- if ($WANT =~ /deadbeef/);
- if ($Is_ebcdic) {
- # these data need massaging with non ascii character sets
- # because of hashing order differences
- $WANT = join("\n",sort(split(/\n/,$WANT)));
- $WANT =~ s/\,$//mg;
- $t = join("\n",sort(split(/\n/,$t)));
- $t =~ s/\,$//mg;
- }
- print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
- : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
-
- ++$TNUM;
- eval "$t";
- print $@ ? "not ok $TNUM\n# \$@ says: $@\n" : "ok $TNUM\n";
-
- $t = eval $string;
- ++$TNUM;
- $t =~ s/([A-Z]+)\(0x[0-9a-f]+\)/$1(0xdeadbeef)/g
- if ($WANT =~ /deadbeef/);
- if ($Is_ebcdic) {
- # here too there are hashing order differences
- $WANT = join("\n",sort(split(/\n/,$WANT)));
- $WANT =~ s/\,$//mg;
- $t = join("\n",sort(split(/\n/,$t)));
- $t =~ s/\,$//mg;
- }
- print( ($t eq $WANT and not $@) ? "ok $TNUM\n"
- : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n");
-}
-
-if (defined &Data::Dumper::Dumpxs) {
- print "### XS extension loaded, will run XS tests\n";
- $TMAX = 186; $XS = 1;
-}
-else {
- print "### XS extensions not loaded, will NOT run XS tests\n";
- $TMAX = 93; $XS = 0;
-}
-
-print "1..$TMAX\n";
-
-#############
-#############
-
-@c = ('c');
-$c = \@c;
-$b = {};
-$a = [1, $b, $c];
-$b->{a} = $a;
-$b->{b} = $a->[1];
-$b->{c} = $a->[2];
-
-############# 1
-##
-$WANT = <<'EOT';
-#$a = [
-# 1,
-# {
-# 'a' => $a,
-# 'b' => $a->[1],
-# 'c' => [
-# 'c'
-# ]
-# },
-# $a->[1]{'c'}
-# ];
-#$b = $a->[1];
-#$c = $a->[1]{'c'};
-EOT
-
-TEST q(Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]));
-TEST q(Data::Dumper->Dumpxs([$a,$b,$c], [qw(a b c)])) if $XS;
-
-
-############# 7
-##
-$WANT = <<'EOT';
-#@a = (
-# 1,
-# {
-# 'a' => [],
-# 'b' => {},
-# 'c' => [
-# 'c'
-# ]
-# },
-# []
-# );
-#$a[1]{'a'} = \@a;
-#$a[1]{'b'} = $a[1];
-#$a[2] = $a[1]{'c'};
-#$b = $a[1];
-EOT
-
-$Data::Dumper::Purity = 1; # fill in the holes for eval
-TEST q(Data::Dumper->Dump([$a, $b], [qw(*a b)])); # print as @a
-TEST q(Data::Dumper->Dumpxs([$a, $b], [qw(*a b)])) if $XS;
-
-############# 13
-##
-$WANT = <<'EOT';
-#%b = (
-# 'a' => [
-# 1,
-# {},
-# [
-# 'c'
-# ]
-# ],
-# 'b' => {},
-# 'c' => []
-# );
-#$b{'a'}[1] = \%b;
-#$b{'b'} = \%b;
-#$b{'c'} = $b{'a'}[2];
-#$a = $b{'a'};
-EOT
-
-TEST q(Data::Dumper->Dump([$b, $a], [qw(*b a)])); # print as %b
-TEST q(Data::Dumper->Dumpxs([$b, $a], [qw(*b a)])) if $XS;
-
-############# 19
-##
-$WANT = <<'EOT';
-#$a = [
-# 1,
-# {
-# 'a' => [],
-# 'b' => {},
-# 'c' => []
-# },
-# []
-#];
-#$a->[1]{'a'} = $a;
-#$a->[1]{'b'} = $a->[1];
-#$a->[1]{'c'} = \@c;
-#$a->[2] = \@c;
-#$b = $a->[1];
-EOT
-
-$Data::Dumper::Indent = 1;
-TEST q(
- $d = Data::Dumper->new([$a,$b], [qw(a b)]);
- $d->Seen({'*c' => $c});
- $d->Dump;
- );
-if ($XS) {
- TEST q(
- $d = Data::Dumper->new([$a,$b], [qw(a b)]);
- $d->Seen({'*c' => $c});
- $d->Dumpxs;
- );
-}
-
-
-############# 25
-##
-$WANT = <<'EOT';
-#$a = [
-# #0
-# 1,
-# #1
-# {
-# a => $a,
-# b => $a->[1],
-# c => [
-# #0
-# 'c'
-# ]
-# },
-# #2
-# $a->[1]{c}
-# ];
-#$b = $a->[1];
-EOT
-
-$d->Indent(3);
-$d->Purity(0)->Quotekeys(0);
-TEST q( $d->Reset; $d->Dump );
-
-TEST q( $d->Reset; $d->Dumpxs ) if $XS;
-
-############# 31
-##
-$WANT = <<'EOT';
-#$VAR1 = [
-# 1,
-# {
-# 'a' => [],
-# 'b' => {},
-# 'c' => [
-# 'c'
-# ]
-# },
-# []
-#];
-#$VAR1->[1]{'a'} = $VAR1;
-#$VAR1->[1]{'b'} = $VAR1->[1];
-#$VAR1->[2] = $VAR1->[1]{'c'};
-EOT
-
-TEST q(Dumper($a));
-TEST q(Data::Dumper::DumperX($a)) if $XS;
-
-############# 37
-##
-$WANT = <<'EOT';
-#[
-# 1,
-# {
-# a => $VAR1,
-# b => $VAR1->[1],
-# c => [
-# 'c'
-# ]
-# },
-# $VAR1->[1]{c}
-#]
-EOT
-
-{
- local $Data::Dumper::Purity = 0;
- local $Data::Dumper::Quotekeys = 0;
- local $Data::Dumper::Terse = 1;
- TEST q(Dumper($a));
- TEST q(Data::Dumper::DumperX($a)) if $XS;
-}
-
-
-############# 43
-##
-$WANT = <<'EOT';
-#$VAR1 = {
-# "abc\0'\efg" => "mno\0",
-# "reftest" => \\1
-#};
-EOT
-
-$foo = { "abc\000\'\efg" => "mno\000",
- "reftest" => \\1,
- };
-{
- local $Data::Dumper::Useqq = 1;
- TEST q(Dumper($foo));
-}
-
- $WANT = <<"EOT";
-#\$VAR1 = {
-# 'abc\0\\'\efg' => 'mno\0',
-# 'reftest' => \\\\1
-#};
-EOT
-
- {
- local $Data::Dumper::Useqq = 1;
- TEST q(Data::Dumper::DumperX($foo)) if $XS; # cheat
- }
-
-
-
-#############
-#############
-
-{
- package main;
- use Data::Dumper;
- $foo = 5;
- @foo = (-10,\*foo);
- %foo = (a=>1,b=>\$foo,c=>\@foo);
- $foo{d} = \%foo;
- $foo[2] = \%foo;
-
-############# 49
-##
- $WANT = <<'EOT';
-#$foo = \*::foo;
-#*::foo = \5;
-#*::foo = [
-# #0
-# -10,
-# #1
-# do{my $o},
-# #2
-# {
-# 'a' => 1,
-# 'b' => do{my $o},
-# 'c' => [],
-# 'd' => {}
-# }
-# ];
-#*::foo{ARRAY}->[1] = $foo;
-#*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
-#*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
-#*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
-#*::foo = *::foo{ARRAY}->[2];
-#@bar = @{*::foo{ARRAY}};
-#%baz = %{*::foo{ARRAY}->[2]};
-EOT
-
- $Data::Dumper::Purity = 1;
- $Data::Dumper::Indent = 3;
- TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
- TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
-
-############# 55
-##
- $WANT = <<'EOT';
-#$foo = \*::foo;
-#*::foo = \5;
-#*::foo = [
-# -10,
-# do{my $o},
-# {
-# 'a' => 1,
-# 'b' => do{my $o},
-# 'c' => [],
-# 'd' => {}
-# }
-#];
-#*::foo{ARRAY}->[1] = $foo;
-#*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR};
-#*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY};
-#*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2];
-#*::foo = *::foo{ARRAY}->[2];
-#$bar = *::foo{ARRAY};
-#$baz = *::foo{ARRAY}->[2];
-EOT
-
- $Data::Dumper::Indent = 1;
- TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
- TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
-
-############# 61
-##
- $WANT = <<'EOT';
-#@bar = (
-# -10,
-# \*::foo,
-# {}
-#);
-#*::foo = \5;
-#*::foo = \@bar;
-#*::foo = {
-# 'a' => 1,
-# 'b' => do{my $o},
-# 'c' => [],
-# 'd' => {}
-#};
-#*::foo{HASH}->{'b'} = *::foo{SCALAR};
-#*::foo{HASH}->{'c'} = \@bar;
-#*::foo{HASH}->{'d'} = *::foo{HASH};
-#$bar[2] = *::foo{HASH};
-#%baz = %{*::foo{HASH}};
-#$foo = $bar[1];
-EOT
-
- TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo']));
- TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo'])) if $XS;
-
-############# 67
-##
- $WANT = <<'EOT';
-#$bar = [
-# -10,
-# \*::foo,
-# {}
-#];
-#*::foo = \5;
-#*::foo = $bar;
-#*::foo = {
-# 'a' => 1,
-# 'b' => do{my $o},
-# 'c' => [],
-# 'd' => {}
-#};
-#*::foo{HASH}->{'b'} = *::foo{SCALAR};
-#*::foo{HASH}->{'c'} = $bar;
-#*::foo{HASH}->{'d'} = *::foo{HASH};
-#$bar->[2] = *::foo{HASH};
-#$baz = *::foo{HASH};
-#$foo = $bar->[1];
-EOT
-
- TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo']));
- TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo'])) if $XS;
-
-############# 73
-##
- $WANT = <<'EOT';
-#$foo = \*::foo;
-#@bar = (
-# -10,
-# $foo,
-# {
-# a => 1,
-# b => \5,
-# c => \@bar,
-# d => $bar[2]
-# }
-#);
-#%baz = %{$bar[2]};
-EOT
-
- $Data::Dumper::Purity = 0;
- $Data::Dumper::Quotekeys = 0;
- TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz']));
- TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS;
-
-############# 79
-##
- $WANT = <<'EOT';
-#$foo = \*::foo;
-#$bar = [
-# -10,
-# $foo,
-# {
-# a => 1,
-# b => \5,
-# c => $bar,
-# d => $bar->[2]
-# }
-#];
-#$baz = $bar->[2];
-EOT
-
- TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz']));
- TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS;
-
-}
-
-#############
-#############
-{
- package main;
- @dogs = ( 'Fido', 'Wags' );
- %kennel = (
- First => \$dogs[0],
- Second => \$dogs[1],
- );
- $dogs[2] = \%kennel;
- $mutts = \%kennel;
- $mutts = $mutts; # avoid warning
-
-############# 85
-##
- $WANT = <<'EOT';
-#%kennels = (
-# First => \'Fido',
-# Second => \'Wags'
-#);
-#@dogs = (
-# ${$kennels{First}},
-# ${$kennels{Second}},
-# \%kennels
-#);
-#%mutts = %kennels;
-EOT
-
- TEST q(
- $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
- [qw(*kennels *dogs *mutts)] );
- $d->Dump;
- );
- if ($XS) {
- TEST q(
- $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts],
- [qw(*kennels *dogs *mutts)] );
- $d->Dumpxs;
- );
- }
-
-############# 91
-##
- $WANT = <<'EOT';
-#%kennels = %kennels;
-#@dogs = @dogs;
-#%mutts = %kennels;
-EOT
-
- TEST q($d->Dump);
- TEST q($d->Dumpxs) if $XS;
-
-############# 97
-##
- $WANT = <<'EOT';
-#%kennels = (
-# First => \'Fido',
-# Second => \'Wags'
-#);
-#@dogs = (
-# ${$kennels{First}},
-# ${$kennels{Second}},
-# \%kennels
-#);
-#%mutts = %kennels;
-EOT
-
-
- TEST q($d->Reset; $d->Dump);
- if ($XS) {
- TEST q($d->Reset; $d->Dumpxs);
- }
-
-############# 103
-##
- $WANT = <<'EOT';
-#@dogs = (
-# 'Fido',
-# 'Wags',
-# {
-# First => \$dogs[0],
-# Second => \$dogs[1]
-# }
-#);
-#%kennels = %{$dogs[2]};
-#%mutts = %{$dogs[2]};
-EOT
-
- TEST q(
- $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
- [qw(*dogs *kennels *mutts)] );
- $d->Dump;
- );
- if ($XS) {
- TEST q(
- $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts],
- [qw(*dogs *kennels *mutts)] );
- $d->Dumpxs;
- );
- }
-
-############# 109
-##
- TEST q($d->Reset->Dump);
- if ($XS) {
- TEST q($d->Reset->Dumpxs);
- }
-
-############# 115
-##
- $WANT = <<'EOT';
-#@dogs = (
-# 'Fido',
-# 'Wags',
-# {
-# First => \'Fido',
-# Second => \'Wags'
-# }
-#);
-#%kennels = (
-# First => \'Fido',
-# Second => \'Wags'
-#);
-EOT
-
- TEST q(
- $d = Data::Dumper->new( [\@dogs, \%kennel], [qw(*dogs *kennels)] );
- $d->Deepcopy(1)->Dump;
- );
- if ($XS) {
- TEST q($d->Reset->Dumpxs);
- }
-
-}
-
-{
-
-sub z { print "foo\n" }
-$c = [ \&z ];
-
-############# 121
-##
- $WANT = <<'EOT';
-#$a = $b;
-#$c = [
-# $b
-#];
-EOT
-
-TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dump;);
-TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dumpxs;)
- if $XS;
-
-############# 127
-##
- $WANT = <<'EOT';
-#$a = \&b;
-#$c = [
-# \&b
-#];
-EOT
-
-TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dump;);
-TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dumpxs;)
- if $XS;
-
-############# 133
-##
- $WANT = <<'EOT';
-#*a = \&b;
-#@c = (
-# \&b
-#);
-EOT
-
-TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dump;);
-TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dumpxs;)
- if $XS;
-
-}
-
-{
- $a = [];
- $a->[1] = \$a->[0];
-
-############# 139
-##
- $WANT = <<'EOT';
-#@a = (
-# undef,
-# do{my $o}
-#);
-#$a[1] = \$a[0];
-EOT
-
-TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dump;);
-TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dumpxs;)
- if $XS;
-}
-
-{
- $a = \\\\\'foo';
- $b = $$$a;
-
-############# 145
-##
- $WANT = <<'EOT';
-#$a = \\\\\'foo';
-#$b = ${${$a}};
-EOT
-
-TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
-TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
- if $XS;
-}
-
-{
- $a = [{ a => \$b }, { b => undef }];
- $b = [{ c => \$b }, { d => \$a }];
-
-############# 151
-##
- $WANT = <<'EOT';
-#$a = [
-# {
-# a => \[
-# {
-# c => do{my $o}
-# },
-# {
-# d => \[]
-# }
-# ]
-# },
-# {
-# b => undef
-# }
-#];
-#${$a->[0]{a}}->[0]->{c} = $a->[0]{a};
-#${${$a->[0]{a}}->[1]->{d}} = $a;
-#$b = ${$a->[0]{a}};
-EOT
-
-TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;);
-TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;)
- if $XS;
-}
-
-{
- $a = [[[[\\\\\'foo']]]];
- $b = $a->[0][0];
- $c = $${$b->[0][0]};
-
-############# 157
-##
- $WANT = <<'EOT';
-#$a = [
-# [
-# [
-# [
-# \\\\\'foo'
-# ]
-# ]
-# ]
-#];
-#$b = $a->[0][0];
-#$c = ${${$a->[0][0][0][0]}};
-EOT
-
-TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dump;);
-TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dumpxs;)
- if $XS;
-}
-
-{
- $f = "pearl";
- $e = [ $f ];
- $d = { 'e' => $e };
- $c = [ $d ];
- $b = { 'c' => $c };
- $a = { 'b' => $b };
-
-############# 163
-##
- $WANT = <<'EOT';
-#$a = {
-# b => {
-# c => [
-# {
-# e => 'ARRAY(0xdeadbeef)'
-# }
-# ]
-# }
-#};
-#$b = $a->{b};
-#$c = $a->{b}{c};
-EOT
-
-TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(4)->Dump;);
-TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(4)->Dumpxs;)
- if $XS;
-
-############# 169
-##
- $WANT = <<'EOT';
-#$a = {
-# b => 'HASH(0xdeadbeef)'
-#};
-#$b = $a->{b};
-#$c = [
-# 'HASH(0xdeadbeef)'
-#];
-EOT
-
-TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(1)->Dump;);
-TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(1)->Dumpxs;)
- if $XS;
-}
-
-{
- $a = \$a;
- $b = [$a];
-
-############# 175
-##
- $WANT = <<'EOT';
-#$b = [
-# \$b->[0]
-#];
-EOT
-
-TEST q(Data::Dumper->new([$b],['b'])->Purity(0)->Dump;);
-TEST q(Data::Dumper->new([$b],['b'])->Purity(0)->Dumpxs;)
- if $XS;
-
-############# 181
-##
- $WANT = <<'EOT';
-#$b = [
-# \do{my $o}
-#];
-#${$b->[0]} = $b->[0];
-EOT
-
-
-TEST q(Data::Dumper->new([$b],['b'])->Purity(1)->Dump;);
-TEST q(Data::Dumper->new([$b],['b'])->Purity(1)->Dumpxs;)
- if $XS;
-}
diff --git a/contrib/perl5/t/lib/english.t b/contrib/perl5/t/lib/english.t
deleted file mode 100755
index 0cbbdbf..0000000
--- a/contrib/perl5/t/lib/english.t
+++ /dev/null
@@ -1,47 +0,0 @@
-#!./perl
-
-print "1..16\n";
-
-BEGIN { @INC = '../lib' }
-use English;
-use Config;
-my $threads = $Config{'use5005threads'} || 0;
-
-print $PID == $$ ? "ok 1\n" : "not ok 1\n";
-
-$_ = 1;
-print $ARG == $_ || $threads ? "ok 2\n" : "not ok 2\n";
-
-sub foo {
- print $ARG[0] == $_[0] || $threads ? "ok 3\n" : "not ok 3\n";
-}
-&foo(1);
-
-if ($threads) {
- $_ = "ok 4\nok 5\nok 6\n";
-} else {
- $ARG = "ok 4\nok 5\nok 6\n";
-}
-/ok 5\n/;
-print $PREMATCH, $MATCH, $POSTMATCH;
-
-$OFS = " ";
-$ORS = "\n";
-print 'ok',7;
-undef $OUTPUT_FIELD_SEPARATOR;
-
-if ($threads) { $" = "\n" } else { $LIST_SEPARATOR = "\n" };
-@foo = ("ok 8", "ok 9");
-print "@foo";
-undef $OUTPUT_RECORD_SEPARATOR;
-
-eval 'NO SUCH FUNCTION';
-print "ok 10\n" if $EVAL_ERROR =~ /method/ || $threads;
-
-print $UID == $< ? "ok 11\n" : "not ok 11\n";
-print $GID == $( ? "ok 12\n" : "not ok 12\n";
-print $EUID == $> ? "ok 13\n" : "not ok 13\n";
-print $EGID == $) ? "ok 14\n" : "not ok 14\n";
-
-print $PROGRAM_NAME eq $0 ? "ok 15\n" : "not ok 15\n";
-print $BASETIME == $^T ? "ok 16\n" : "not ok 16\n";
diff --git a/contrib/perl5/t/lib/env-array.t b/contrib/perl5/t/lib/env-array.t
deleted file mode 100755
index c5068fd..0000000
--- a/contrib/perl5/t/lib/env-array.t
+++ /dev/null
@@ -1,100 +0,0 @@
-#!./perl
-
-$| = 1;
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-if ($^O eq 'VMS') {
- print "1..11\n";
- foreach (1..11) { print "ok $_ # skipped for VMS\n"; }
- exit 0;
-}
-
-use Env qw(@FOO);
-use vars qw(@BAR);
-
-sub array_equal
-{
- my ($a, $b) = @_;
- return 0 unless scalar(@$a) == scalar(@$b);
- for my $i (0..scalar(@$a) - 1) {
- return 0 unless $a->[$i] eq $b->[$i];
- }
- return 1;
-}
-
-sub test
-{
- my ($desc, $code) = @_;
-
- &$code;
-
- print "# $desc...\n";
- print "# FOO = (", join(", ", @FOO), ")\n";
- print "# BAR = (", join(", ", @BAR), ")\n";
-
- if (defined $check) { print "not " unless &$check; }
- else { print "not " unless array_equal(\@FOO, \@BAR); }
-
- print "ok ", ++$i, "\n";
-}
-
-print "1..11\n";
-
-test "Assignment", sub {
- @FOO = qw(a B c);
- @BAR = qw(a B c);
-};
-
-test "Storing", sub {
- $FOO[1] = 'b';
- $BAR[1] = 'b';
-};
-
-test "Truncation", sub {
- $#FOO = 0;
- $#BAR = 0;
-};
-
-test "Push", sub {
- push @FOO, 'b', 'c';
- push @BAR, 'b', 'c';
-};
-
-test "Pop", sub {
- pop @FOO;
- pop @BAR;
-};
-
-test "Shift", sub {
- shift @FOO;
- shift @BAR;
-};
-
-test "Push", sub {
- push @FOO, 'c';
- push @BAR, 'c';
-};
-
-test "Unshift", sub {
- unshift @FOO, 'a';
- unshift @BAR, 'a';
-};
-
-test "Reverse", sub {
- @FOO = reverse @FOO;
- @BAR = reverse @BAR;
-};
-
-test "Sort", sub {
- @FOO = sort @FOO;
- @BAR = sort @BAR;
-};
-
-test "Splice", sub {
- splice @FOO, 1, 1, 'B';
- splice @BAR, 1, 1, 'B';
-};
diff --git a/contrib/perl5/t/lib/env.t b/contrib/perl5/t/lib/env.t
deleted file mode 100755
index ff6af2e..0000000
--- a/contrib/perl5/t/lib/env.t
+++ /dev/null
@@ -1,25 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-BEGIN {
- $ENV{FOO} = "foo";
- $ENV{BAR} = "bar";
-}
-
-use Env qw(FOO $BAR);
-
-$FOO .= "/bar";
-$BAR .= "/baz";
-
-print "1..2\n";
-
-print "not " if $FOO ne 'foo/bar';
-print "ok 1\n";
-
-print "not " if $BAR ne 'bar/baz';
-print "ok 2\n";
-
diff --git a/contrib/perl5/t/lib/errno.t b/contrib/perl5/t/lib/errno.t
deleted file mode 100755
index 02f5ce2..0000000
--- a/contrib/perl5/t/lib/errno.t
+++ /dev/null
@@ -1,54 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- if ($^O eq 'MacOS') {
- @INC = qw(: ::lib ::macos:lib);
- } else {
- @INC = '../lib';
- }
- }
-}
-
-use Errno;
-
-print "1..5\n";
-
-print "not " unless @Errno::EXPORT_OK;
-print "ok 1\n";
-die unless @Errno::EXPORT_OK;
-
-$err = $Errno::EXPORT_OK[0];
-$num = &{"Errno::$err"};
-
-print "not " unless &{"Errno::$err"} == $num;
-print "ok 2\n";
-
-$! = $num;
-print "not " unless $!{$err};
-print "ok 3\n";
-
-$! = 0;
-print "not " if $!{$err};
-print "ok 4\n";
-
-$s1 = join(",",sort keys(%!));
-$s2 = join(",",sort @Errno::EXPORT_OK);
-
-if($s1 ne $s2) {
- my @s1 = keys(%!);
- my @s2 = @Errno::EXPORT_OK;
- my(%s1,%s2);
- @s1{@s1} = ();
- @s2{@s2} = ();
- delete @s2{@s1};
- delete @s1{@s2};
- print "# These are only in \%!\n";
- print "# ",join(" ",map { "'$_'" } keys %s1),"\n";
- print "# These are only in \@EXPORT_OK\n";
- print "# ",join(" ",map { "'$_'" } keys %s2),"\n";
- print "not ";
-}
-
-print "ok 5\n";
diff --git a/contrib/perl5/t/lib/fatal.t b/contrib/perl5/t/lib/fatal.t
deleted file mode 100755
index f00b876..0000000
--- a/contrib/perl5/t/lib/fatal.t
+++ /dev/null
@@ -1,36 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- print "1..15\n";
-}
-
-use strict;
-use Fatal qw(open close :void opendir);
-
-my $i = 1;
-eval { open FOO, '<lkjqweriuapofukndajsdlfjnvcvn' };
-print "not " unless $@ =~ /^Can't open/;
-print "ok $i\n"; ++$i;
-
-my $foo = 'FOO';
-for ('$foo', "'$foo'", "*$foo", "\\*$foo") {
- eval qq{ open $_, '<$0' };
- print "not " if $@;
- print "ok $i\n"; ++$i;
-
- print "not " if $@ or scalar(<$foo>) !~ m|^#!./perl|;
- print "ok $i\n"; ++$i;
- eval qq{ close FOO };
- print "not " if $@;
- print "ok $i\n"; ++$i;
-}
-
-eval { opendir FOO, 'lkjqweriuapofukndajsdlfjnvcvn' };
-print "not " unless $@ =~ /^Can't open/;
-print "ok $i\n"; ++$i;
-
-eval { my $a = opendir FOO, 'lkjqweriuapofukndajsdlfjnvcvn' };
-print "not " if $@ =~ /^Can't open/;
-print "ok $i\n"; ++$i;
diff --git a/contrib/perl5/t/lib/fields.t b/contrib/perl5/t/lib/fields.t
deleted file mode 100755
index a3f591a..0000000
--- a/contrib/perl5/t/lib/fields.t
+++ /dev/null
@@ -1,172 +0,0 @@
-#!./perl -w
-
-my $w;
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $SIG{__WARN__} = sub {
- if ($_[0] =~ /^Hides field 'b1' in base class/) {
- $w++;
- return;
- }
- print $_[0];
- };
-}
-
-use strict;
-use warnings;
-use vars qw($DEBUG);
-
-package B1;
-use fields qw(b1 b2 b3);
-
-package B2;
-use fields '_b1';
-use fields qw(b1 _b2 b2);
-
-sub new { bless [], shift }
-
-package D1;
-use base 'B1';
-use fields qw(d1 d2 d3);
-
-package D2;
-use base 'B1';
-use fields qw(_d1 _d2);
-use fields qw(d1 d2);
-
-package D3;
-use base 'B2';
-use fields qw(b1 d1 _b1 _d1); # hide b1
-
-package D4;
-use base 'D3';
-use fields qw(_d3 d3);
-
-package M;
-sub m {}
-
-package D5;
-use base qw(M B2);
-
-package Foo::Bar;
-use base 'B1';
-
-package Foo::Bar::Baz;
-use base 'Foo::Bar';
-use fields qw(foo bar baz);
-
-# Test repeatability for when modules get reloaded.
-package B1;
-use fields qw(b1 b2 b3);
-
-package D3;
-use base 'B2';
-use fields qw(b1 d1 _b1 _d1); # hide b1
-
-package main;
-
-sub fstr {
- my $h = shift;
- my @tmp;
- for my $k (sort {$h->{$a} <=> $h->{$b}} keys %$h) {
- my $v = $h->{$k};
- push(@tmp, "$k:$v");
- }
- my $str = join(",", @tmp);
- print "$h => $str\n" if $DEBUG;
- $str;
-}
-
-my %expect = (
- B1 => "b1:1,b2:2,b3:3",
- B2 => "_b1:1,b1:2,_b2:3,b2:4",
- D1 => "b1:1,b2:2,b3:3,d1:4,d2:5,d3:6",
- D2 => "b1:1,b2:2,b3:3,_d1:4,_d2:5,d1:6,d2:7",
- D3 => "b2:4,b1:5,d1:6,_b1:7,_d1:8",
- D4 => "b2:4,b1:5,d1:6,_d3:9,d3:10",
- D5 => "b1:2,b2:4",
- 'Foo::Bar::Baz' => 'b1:1,b2:2,b3:3,foo:4,bar:5,baz:6',
-);
-
-print "1..", int(keys %expect)+13, "\n";
-my $testno = 0;
-while (my($class, $exp) = each %expect) {
- no strict 'refs';
- my $fstr = fstr(\%{$class."::FIELDS"});
- print "EXP: $exp\nGOT: $fstr\nnot " unless $fstr eq $exp;
- print "ok ", ++$testno, "\n";
-}
-
-# Did we get the appropriate amount of warnings?
-print "not " unless $w == 1;
-print "ok ", ++$testno, "\n";
-
-# A simple object creation and AVHV attribute access test
-my B2 $obj1 = D3->new;
-$obj1->{b1} = "B2";
-my D3 $obj2 = $obj1;
-$obj2->{b1} = "D3";
-
-print "not " unless $obj1->[2] eq "B2" && $obj1->[5] eq "D3";
-print "ok ", ++$testno, "\n";
-
-# We should get compile time failures field name typos
-eval q(my D3 $obj3 = $obj2; $obj3->{notthere} = "");
-print "not " unless $@ && $@ =~ /^No such pseudo-hash field "notthere"/;
-print "ok ", ++$testno, "\n";
-
-# Slices
-@$obj1{"_b1", "b1"} = (17, 29);
-print "not " unless "@$obj1[1,2]" eq "17 29";
-print "ok ", ++$testno, "\n";
-@$obj1[1,2] = (44,28);
-print "not " unless "@$obj1{'b1','_b1','b1'}" eq "28 44 28";
-print "ok ", ++$testno, "\n";
-
-my $ph = fields::phash(a => 1, b => 2, c => 3);
-print "not " unless fstr($ph) eq 'a:1,b:2,c:3';
-print "ok ", ++$testno, "\n";
-
-$ph = fields::phash([qw/a b c/], [1, 2, 3]);
-print "not " unless fstr($ph) eq 'a:1,b:2,c:3';
-print "ok ", ++$testno, "\n";
-
-$ph = fields::phash([qw/a b c/], [1]);
-print "not " if exists $ph->{b} or exists $ph->{c} or !exists $ph->{a};
-print "ok ", ++$testno, "\n";
-
-eval '$ph = fields::phash("odd")';
-print "not " unless $@ && $@ =~ /^Odd number of/;
-print "ok ", ++$testno, "\n";
-
-#fields::_dump();
-
-# check if fields autovivify
-{
- package Foo;
- use fields qw(foo bar);
- sub new { bless [], $_[0]; }
-
- package main;
- my Foo $a = Foo->new();
- $a->{foo} = ['a', 'ok ' . ++$testno, 'c'];
- $a->{bar} = { A => 'ok ' . ++$testno };
- print $a->{foo}[1], "\n";
- print $a->{bar}->{A}, "\n";
-}
-
-# check if fields autovivify
-{
- package Bar;
- use fields qw(foo bar);
- sub new { return fields::new($_[0]) }
-
- package main;
- my Bar $a = Bar::->new();
- $a->{foo} = ['a', 'ok ' . ++$testno, 'c'];
- $a->{bar} = { A => 'ok ' . ++$testno };
- print $a->{foo}[1], "\n";
- print $a->{bar}->{A}, "\n";
-}
diff --git a/contrib/perl5/t/lib/filecache.t b/contrib/perl5/t/lib/filecache.t
deleted file mode 100755
index a97fdd5..0000000
--- a/contrib/perl5/t/lib/filecache.t
+++ /dev/null
@@ -1,25 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..1\n";
-
-use FileCache;
-
-# This is really not a complete test as I don't bother to open enough
-# files to make real swapping of open filedescriptor happen.
-
-$path = "foo";
-cacheout $path;
-
-print $path "\n";
-
-close $path;
-
-print "not " unless -f $path;
-print "ok 1\n";
-
-unlink $path;
diff --git a/contrib/perl5/t/lib/filecopy.t b/contrib/perl5/t/lib/filecopy.t
deleted file mode 100755
index 3072c54..0000000
--- a/contrib/perl5/t/lib/filecopy.t
+++ /dev/null
@@ -1,109 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-$| = 1;
-
-my @pass = (0,1);
-my $tests = 11;
-printf "1..%d\n", $tests * scalar(@pass);
-
-use File::Copy;
-
-for my $pass (@pass) {
-
- require File::Copy;
-
- my $loopconst = $pass*$tests;
-
- # First we create a file
- open(F, ">file-$$") or die;
- binmode F; # for DOSISH platforms, because test 3 copies to stdout
- printf F "ok %d\n", 3 + $loopconst;
- close F;
-
- copy "file-$$", "copy-$$";
-
- open(F, "copy-$$") or die;
- $foo = <F>;
- close(F);
-
- print "not " if -s "file-$$" != -s "copy-$$";
- printf "ok %d\n", 1 + $loopconst;
-
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 2+$loopconst;
-
- binmode STDOUT unless $^O eq 'VMS'; # Copy::copy works in binary mode
- copy "copy-$$", \*STDOUT;
- unlink "copy-$$" or die "unlink: $!";
-
- open(F,"file-$$");
- copy(*F, "copy-$$");
- open(R, "copy-$$") or die "open copy-$$: $!"; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 4+$loopconst;
- unlink "copy-$$" or die "unlink: $!";
- open(F,"file-$$");
- copy(\*F, "copy-$$");
- close(F) or die "close: $!";
- open(R, "copy-$$") or die; $foo = <R>; close(R) or die "close: $!";
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 5+$loopconst;
- unlink "copy-$$" or die "unlink: $!";
-
- require IO::File;
- $fh = IO::File->new(">copy-$$") or die "Cannot open copy-$$:$!";
- binmode $fh or die;
- copy("file-$$",$fh);
- $fh->close or die "close: $!";
- open(R, "copy-$$") or die; $foo = <R>; close(R);
- print "# foo=`$foo'\nnot " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 6+$loopconst;
- unlink "copy-$$" or die "unlink: $!";
- require FileHandle;
- my $fh = FileHandle->new(">copy-$$") or die "Cannot open copy-$$:$!";
- binmode $fh or die;
- copy("file-$$",$fh);
- $fh->close;
- open(R, "copy-$$") or die; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 7+$loopconst;
- unlink "file-$$" or die "unlink: $!";
-
- print "# moved missing file.\nnot " if move("file-$$", "copy-$$");
- print "# target disappeared.\nnot " if not -e "copy-$$";
- printf "ok %d\n", 8+$loopconst;
-
- move "copy-$$", "file-$$" or print "# move did not succeed.\n";
- print "# not moved: $!\nnot " unless -e "file-$$" and not -e "copy-$$";
- open(R, "file-$$") or die; $foo = <R>; close(R);
- print "# foo=`$foo'\nnot " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 9+$loopconst;
-
- copy "file-$$", "lib";
- open(R, "lib/file-$$") or die; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf "ok %d\n", 3+$loopconst;
- printf "ok %d\n", 10+$loopconst;
- unlink "lib/file-$$" or die "unlink: $!";
-
- move "file-$$", "lib";
- open(R, "lib/file-$$") or die "open lib/file-$$: $!"; $foo = <R>; close(R);
- print "not " unless $foo eq sprintf("ok %d\n", 3+$loopconst)
- and not -e "file-$$";;
- printf "ok %d\n", 11+$loopconst;
- unlink "lib/file-$$" or die "unlink: $!";
-
- # warn sprintf "INC->".$INC{"File/Copy.pm"};
- delete $INC{"File/Copy.pm"};
-
-}
-
-
-END {
- 1 while unlink "file-$$";
- 1 while unlink "lib/file-$$";
-}
diff --git a/contrib/perl5/t/lib/filefind.t b/contrib/perl5/t/lib/filefind.t
deleted file mode 100755
index 362c1eb..0000000
--- a/contrib/perl5/t/lib/filefind.t
+++ /dev/null
@@ -1,197 +0,0 @@
-####!./perl
-
-
-my %Expect;
-my $symlink_exists = eval { symlink("",""); 1 };
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-if ( $symlink_exists ) { print "1..117\n"; }
-else { print "1..61\n"; }
-
-use File::Find;
-
-find(sub { print "ok 1\n" if $_ eq 'filefind.t'; }, ".");
-finddepth(sub { print "ok 2\n" if $_ eq 'filefind.t'; }, ".");
-
-
-my $case = 2;
-my $FastFileTests_OK = 0;
-
-END {
- unlink 'fa/fa_ord','fa/fsl','fa/faa/faa_ord',
- 'fa/fab/fab_ord','fa/fab/faba/faba_ord','fb/fb_ord','fb/fba/fba_ord';
- rmdir 'fa/faa';
- rmdir 'fa/fab/faba';
- rmdir 'fa/fab';
- rmdir 'fa';
- rmdir 'fb/fba';
- rmdir 'fb';
- chdir '..';
- rmdir 'for_find';
-}
-
-sub Check($) {
- $case++;
- if ($_[0]) { print "ok $case\n"; }
- else { print "not ok $case\n"; }
-}
-
-sub CheckDie($) {
- $case++;
- if ($_[0]) { print "ok $case\n"; }
- else { print "not ok $case\n $!\n"; exit 0; }
-}
-
-sub touch {
- CheckDie( open(my $T,'>',$_[0]) );
-}
-
-sub MkDir($$) {
- CheckDie( mkdir($_[0],$_[1]) );
-}
-
-sub wanted {
- print "# '$_' => 1\n";
- s#\.$## if ($^O eq 'VMS' && $_ ne '.');
- Check( $Expect{$_} );
- if ( $FastFileTests_OK ) {
- delete $Expect{$_}
- unless ( $Expect_Dir{$_} && ! -d _ );
- } else {
- delete $Expect{$_}
- unless ( $Expect_Dir{$_} && ! -d $_ );
- }
- $File::Find::prune=1 if $_ eq 'faba';
-
-}
-
-sub dn_wanted {
- my $n = $File::Find::name;
- $n =~ s#\.$## if ($^O eq 'VMS' && $n ne '.');
- print "# '$n' => 1\n";
- my $i = rindex($n,'/');
- my $OK = exists($Expect{$n});
- if ( $OK ) {
- $OK= exists($Expect{substr($n,0,$i)}) if $i >= 0;
- }
- Check($OK);
- delete $Expect{$n};
-}
-
-sub d_wanted {
- print "# '$_' => 1\n";
- s#\.$## if ($^O eq 'VMS' && $_ ne '.');
- my $i = rindex($_,'/');
- my $OK = exists($Expect{$_});
- if ( $OK ) {
- $OK= exists($Expect{substr($_,0,$i)}) if $i >= 0;
- }
- Check($OK);
- delete $Expect{$_};
-}
-
-MkDir( 'for_find',0770 );
-CheckDie(chdir(for_find));
-MkDir( 'fa',0770 );
-MkDir( 'fb',0770 );
-touch('fb/fb_ord');
-MkDir( 'fb/fba',0770 );
-touch('fb/fba/fba_ord');
-CheckDie( symlink('../fb','fa/fsl') ) if $symlink_exists;
-touch('fa/fa_ord');
-
-MkDir( 'fa/faa',0770 );
-touch('fa/faa/faa_ord');
-MkDir( 'fa/fab',0770 );
-touch('fa/fab/fab_ord');
-MkDir( 'fa/fab/faba',0770 );
-touch('fa/fab/faba/faba_ord');
-
-%Expect = ('.' => 1, 'fsl' => 1, 'fa_ord' => 1, 'fab' => 1, 'fab_ord' => 1,
- 'faba' => 1, 'faa' => 1, 'faa_ord' => 1);
-delete $Expect{'fsl'} unless $symlink_exists;
-%Expect_Dir = ('fa' => 1, 'faa' => 1, 'fab' => 1, 'faba' => 1,
- 'fb' => 1, 'fba' => 1);
-delete @Expect_Dir{'fb','fba'} unless $symlink_exists;
-File::Find::find( {wanted => \&wanted, },'fa' );
-Check( scalar(keys %Expect) == 0 );
-
-%Expect=('fa' => 1, 'fa/fsl' => 1, 'fa/fa_ord' => 1, 'fa/fab' => 1,
- 'fa/fab/fab_ord' => 1, 'fa/fab/faba' => 1,
- 'fa/fab/faba/faba_ord' => 1, 'fa/faa' => 1, 'fa/faa/faa_ord' => 1);
-delete $Expect{'fa/fsl'} unless $symlink_exists;
-%Expect_Dir = ('fa' => 1, 'fa/faa' => 1, '/fa/fab' => 1, 'fa/fab/faba' => 1,
- 'fb' => 1, 'fb/fba' => 1);
-delete @Expect_Dir{'fb','fb/fba'} unless $symlink_exists;
-File::Find::find( {wanted => \&wanted, no_chdir => 1},'fa' );
-
-Check( scalar(keys %Expect) == 0 );
-
-%Expect=('.' => 1, './fa' => 1, './fa/fsl' => 1, './fa/fa_ord' => 1, './fa/fab' => 1,
- './fa/fab/fab_ord' => 1, './fa/fab/faba' => 1,
- './fa/fab/faba/faba_ord' => 1, './fa/faa' => 1, './fa/faa/faa_ord' => 1,
- './fb' => 1, './fb/fba' => 1, './fb/fba/fba_ord' => 1, './fb/fb_ord' => 1);
-delete $Expect{'./fa/fsl'} unless $symlink_exists;
-%Expect_Dir = ('./fa' => 1, './fa/faa' => 1, '/fa/fab' => 1, './fa/fab/faba' => 1,
- './fb' => 1, './fb/fba' => 1);
-delete @Expect_Dir{'./fb','./fb/fba'} unless $symlink_exists;
-File::Find::finddepth( {wanted => \&dn_wanted },'.' );
-Check( scalar(keys %Expect) == 0 );
-
-%Expect=('.' => 1, './fa' => 1, './fa/fsl' => 1, './fa/fa_ord' => 1, './fa/fab' => 1,
- './fa/fab/fab_ord' => 1, './fa/fab/faba' => 1,
- './fa/fab/faba/faba_ord' => 1, './fa/faa' => 1, './fa/faa/faa_ord' => 1,
- './fb' => 1, './fb/fba' => 1, './fb/fba/fba_ord' => 1, './fb/fb_ord' => 1);
-delete $Expect{'./fa/fsl'} unless $symlink_exists;
-%Expect_Dir = ('./fa' => 1, './fa/faa' => 1, '/fa/fab' => 1, './fa/fab/faba' => 1,
- './fb' => 1, './fb/fba' => 1);
-delete @Expect_Dir{'./fb','./fb/fba'} unless $symlink_exists;
-File::Find::finddepth( {wanted => \&d_wanted, no_chdir => 1 },'.' );
-Check( scalar(keys %Expect) == 0 );
-
-if ( $symlink_exists ) {
- $FastFileTests_OK= 1;
- %Expect=('.' => 1, 'fa_ord' => 1, 'fsl' => 1, 'fb_ord' => 1, 'fba' => 1,
- 'fba_ord' => 1, 'fab' => 1, 'fab_ord' => 1, 'faba' => 1, 'faa' => 1,
- 'faa_ord' => 1);
- %Expect_Dir = ('fa' => 1, 'fa/faa' => 1, '/fa/fab' => 1, 'fa/fab/faba' => 1,
- 'fb' => 1, 'fb/fba' => 1);
-
- File::Find::find( {wanted => \&wanted, follow_fast => 1},'fa' );
- Check( scalar(keys %Expect) == 0 );
-
- %Expect=('fa' => 1, 'fa/fa_ord' => 1, 'fa/fsl' => 1, 'fa/fsl/fb_ord' => 1,
- 'fa/fsl/fba' => 1, 'fa/fsl/fba/fba_ord' => 1, 'fa/fab' => 1,
- 'fa/fab/fab_ord' => 1, 'fa/fab/faba' => 1, 'fa/fab/faba/faba_ord' => 1,
- 'fa/faa' => 1, 'fa/faa/faa_ord' => 1);
- %Expect_Dir = ('fa' => 1, 'fa/faa' => 1, '/fa/fab' => 1, 'fa/fab/faba' => 1,
- 'fb' => 1, 'fb/fba' => 1);
- File::Find::find( {wanted => \&wanted, follow_fast => 1, no_chdir => 1},'fa' );
- Check( scalar(keys %Expect) == 0 );
-
- %Expect=('fa' => 1, 'fa/fa_ord' => 1, 'fa/fsl' => 1, 'fa/fsl/fb_ord' => 1,
- 'fa/fsl/fba' => 1, 'fa/fsl/fba/fba_ord' => 1, 'fa/fab' => 1,
- 'fa/fab/fab_ord' => 1, 'fa/fab/faba' => 1, 'fa/fab/faba/faba_ord' => 1,
- 'fa/faa' => 1, 'fa/faa/faa_ord' => 1);
- %Expect_Dir = ('fa' => 1, 'fa/faa' => 1, '/fa/fab' => 1, 'fa/fab/faba' => 1,
- 'fb' => 1, 'fb/fba' => 1);
-
- File::Find::finddepth( {wanted => \&dn_wanted, follow_fast => 1},'fa' );
- Check( scalar(keys %Expect) == 0 );
-
- %Expect=('fa' => 1, 'fa/fa_ord' => 1, 'fa/fsl' => 1, 'fa/fsl/fb_ord' => 1,
- 'fa/fsl/fba' => 1, 'fa/fsl/fba/fba_ord' => 1, 'fa/fab' => 1,
- 'fa/fab/fab_ord' => 1, 'fa/fab/faba' => 1, 'fa/fab/faba/faba_ord' => 1,
- 'fa/faa' => 1, 'fa/faa/faa_ord' => 1);
- %Expect_Dir = ('fa' => 1, 'fa/faa' => 1, '/fa/fab' => 1, 'fa/fab/faba' => 1,
- 'fb' => 1, 'fb/fba' => 1);
-
- File::Find::finddepth( {wanted => \&d_wanted, follow_fast => 1, no_chdir => 1},'fa' );
- Check( scalar(keys %Expect) == 0 );
-}
-
-print "# of cases: $case\n";
diff --git a/contrib/perl5/t/lib/filefunc.t b/contrib/perl5/t/lib/filefunc.t
deleted file mode 100755
index 9268122..0000000
--- a/contrib/perl5/t/lib/filefunc.t
+++ /dev/null
@@ -1,17 +0,0 @@
-#!./perl
-
-BEGIN {
- $^O = '';
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..1\n";
-
-use File::Spec::Functions;
-
-if (catfile('a','b','c') eq 'a/b/c') {
- print "ok 1\n";
-} else {
- print "not ok 1\n";
-}
diff --git a/contrib/perl5/t/lib/filehand.t b/contrib/perl5/t/lib/filehand.t
deleted file mode 100755
index 0f3e177..0000000
--- a/contrib/perl5/t/lib/filehand.t
+++ /dev/null
@@ -1,91 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
-}
-
-use FileHandle;
-use strict subs;
-
-autoflush STDOUT 1;
-
-$mystdout = new_from_fd FileHandle 1,"w";
-$| = 1;
-autoflush $mystdout;
-print "1..11\n";
-
-print $mystdout "ok ".fileno($mystdout)."\n";
-
-$fh = (new FileHandle "./TEST", O_RDONLY
- or new FileHandle "TEST", O_RDONLY)
- and print "ok 2\n";
-
-
-$buffer = <$fh>;
-print $buffer eq "#!./perl\n" ? "ok 3\n" : "not ok 3\n";
-
-
-ungetc $fh ord 'A';
-CORE::read($fh, $buf,1);
-print $buf eq 'A' ? "ok 4\n" : "not ok 4\n";
-
-close $fh;
-
-$fh = new FileHandle;
-
-print "not " unless ($fh->open("< TEST") && <$fh> eq $buffer);
-print "ok 5\n";
-
-$fh->seek(0,0);
-print "#possible mixed CRLF/LF in t/TEST\nnot " unless (<$fh> eq $buffer);
-print "ok 6\n";
-
-$fh->seek(0,2);
-$line = <$fh>;
-print "not " if (defined($line) || !$fh->eof);
-print "ok 7\n";
-
-print "not " unless ($fh->open("TEST","r") && !$fh->tell && $fh->close);
-print "ok 8\n";
-
-autoflush STDOUT 0;
-
-print "not " if ($|);
-print "ok 9\n";
-
-autoflush STDOUT 1;
-
-print "not " unless ($|);
-print "ok 10\n";
-
-if ($^O eq 'dos')
-{
- printf("ok %d\n",11);
- exit(0);
-}
-
-($rd,$wr) = FileHandle::pipe;
-
-if ($^O eq 'VMS' || $^O eq 'os2' || $^O eq 'amigaos' || $^O eq 'MSWin32' ||
- $Config{d_fork} ne 'define') {
- $wr->autoflush;
- $wr->printf("ok %d\n",11);
- print $rd->getline;
-}
-else {
- if (fork) {
- $wr->close;
- print $rd->getline;
- }
- else {
- $rd->close;
- $wr->printf("ok %d\n",11);
- exit(0);
- }
-}
diff --git a/contrib/perl5/t/lib/filepath.t b/contrib/perl5/t/lib/filepath.t
deleted file mode 100755
index 42e0ae9..0000000
--- a/contrib/perl5/t/lib/filepath.t
+++ /dev/null
@@ -1,28 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use File::Path;
-use strict;
-
-my $count = 0;
-use warnings;
-
-print "1..4\n";
-
-# first check for stupid permissions second for full, so we clean up
-# behind ourselves
-for my $perm (0111,0777) {
- mkpath("foo/bar");
- chmod $perm, "foo", "foo/bar";
-
- print "not " unless -d "foo" && -d "foo/bar";
- print "ok ", ++$count, "\n";
-
- rmtree("foo");
- print "not " if -e "foo";
- print "ok ", ++$count, "\n";
-}
diff --git a/contrib/perl5/t/lib/filespec.t b/contrib/perl5/t/lib/filespec.t
deleted file mode 100755
index c6d155f..0000000
--- a/contrib/perl5/t/lib/filespec.t
+++ /dev/null
@@ -1,379 +0,0 @@
-#!./perl
-
-BEGIN {
- $^O = '';
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-# Each element in this array is a single test. Storing them this way makes
-# maintenance easy, and should be OK since perl should be pretty functional
-# before these tests are run.
-
-@tests = (
-# Function Expected
-[ "Unix->catfile('a','b','c')", 'a/b/c' ],
-
-[ "Unix->splitpath('file')", ',,file' ],
-[ "Unix->splitpath('/d1/d2/d3/')", ',/d1/d2/d3/,' ],
-[ "Unix->splitpath('d1/d2/d3/')", ',d1/d2/d3/,' ],
-[ "Unix->splitpath('/d1/d2/d3/.')", ',/d1/d2/d3/.,' ],
-[ "Unix->splitpath('/d1/d2/d3/..')", ',/d1/d2/d3/..,' ],
-[ "Unix->splitpath('/d1/d2/d3/.file')", ',/d1/d2/d3/,.file' ],
-[ "Unix->splitpath('d1/d2/d3/file')", ',d1/d2/d3/,file' ],
-[ "Unix->splitpath('/../../d1/')", ',/../../d1/,' ],
-[ "Unix->splitpath('/././d1/')", ',/././d1/,' ],
-
-[ "Unix->catpath('','','file')", 'file' ],
-[ "Unix->catpath('','/d1/d2/d3/','')", '/d1/d2/d3/' ],
-[ "Unix->catpath('','d1/d2/d3/','')", 'd1/d2/d3/' ],
-[ "Unix->catpath('','/d1/d2/d3/.','')", '/d1/d2/d3/.' ],
-[ "Unix->catpath('','/d1/d2/d3/..','')", '/d1/d2/d3/..' ],
-[ "Unix->catpath('','/d1/d2/d3/','.file')", '/d1/d2/d3/.file' ],
-[ "Unix->catpath('','d1/d2/d3/','file')", 'd1/d2/d3/file' ],
-[ "Unix->catpath('','/../../d1/','')", '/../../d1/' ],
-[ "Unix->catpath('','/././d1/','')", '/././d1/' ],
-[ "Unix->catpath('d1','d2/d3/','')", 'd2/d3/' ],
-[ "Unix->catpath('d1','d2','d3/')", 'd2/d3/' ],
-
-[ "Unix->splitdir('')", '' ],
-[ "Unix->splitdir('/d1/d2/d3/')", ',d1,d2,d3,' ],
-[ "Unix->splitdir('d1/d2/d3/')", 'd1,d2,d3,' ],
-[ "Unix->splitdir('/d1/d2/d3')", ',d1,d2,d3' ],
-[ "Unix->splitdir('d1/d2/d3')", 'd1,d2,d3' ],
-
-[ "Unix->catdir()", '' ],
-[ "Unix->catdir('/')", '/' ],
-[ "Unix->catdir('','d1','d2','d3','')", '/d1/d2/d3' ],
-[ "Unix->catdir('d1','d2','d3','')", 'd1/d2/d3' ],
-[ "Unix->catdir('','d1','d2','d3')", '/d1/d2/d3' ],
-[ "Unix->catdir('d1','d2','d3')", 'd1/d2/d3' ],
-
-[ "Unix->catfile('a','b','c')", 'a/b/c' ],
-
-[ "Unix->canonpath('')", '' ],
-[ "Unix->canonpath('///../../..//./././a//b/.././c/././')", '/a/b/../c' ],
-[ "Unix->canonpath('/.')", '/.' ],
-
-[ "Unix->abs2rel('/t1/t2/t3','/t1/t2/t3')", '' ],
-[ "Unix->abs2rel('/t1/t2/t4','/t1/t2/t3')", '../t4' ],
-[ "Unix->abs2rel('/t1/t2','/t1/t2/t3')", '..' ],
-[ "Unix->abs2rel('/t1/t2/t3/t4','/t1/t2/t3')", 't4' ],
-[ "Unix->abs2rel('/t4/t5/t6','/t1/t2/t3')", '../../../t4/t5/t6' ],
-#[ "Unix->abs2rel('../t4','/t1/t2/t3')", '../t4' ],
-[ "Unix->abs2rel('/','/t1/t2/t3')", '../../..' ],
-[ "Unix->abs2rel('///','/t1/t2/t3')", '../../..' ],
-[ "Unix->abs2rel('/.','/t1/t2/t3')", '../../../.' ],
-[ "Unix->abs2rel('/./','/t1/t2/t3')", '../../..' ],
-#[ "Unix->abs2rel('../t4','/t1/t2/t3')", '../t4' ],
-
-[ "Unix->rel2abs('t4','/t1/t2/t3')", '/t1/t2/t3/t4' ],
-[ "Unix->rel2abs('t4/t5','/t1/t2/t3')", '/t1/t2/t3/t4/t5' ],
-[ "Unix->rel2abs('.','/t1/t2/t3')", '/t1/t2/t3' ],
-[ "Unix->rel2abs('..','/t1/t2/t3')", '/t1/t2/t3/..' ],
-[ "Unix->rel2abs('../t4','/t1/t2/t3')", '/t1/t2/t3/../t4' ],
-[ "Unix->rel2abs('/t1','/t1/t2/t3')", '/t1' ],
-
-[ "Win32->splitpath('file')", ',,file' ],
-[ "Win32->splitpath('\\d1/d2\\d3/')", ',\\d1/d2\\d3/,' ],
-[ "Win32->splitpath('d1/d2\\d3/')", ',d1/d2\\d3/,' ],
-[ "Win32->splitpath('\\d1/d2\\d3/.')", ',\\d1/d2\\d3/.,' ],
-[ "Win32->splitpath('\\d1/d2\\d3/..')", ',\\d1/d2\\d3/..,' ],
-[ "Win32->splitpath('\\d1/d2\\d3/.file')", ',\\d1/d2\\d3/,.file' ],
-[ "Win32->splitpath('\\d1/d2\\d3/file')", ',\\d1/d2\\d3/,file' ],
-[ "Win32->splitpath('d1/d2\\d3/file')", ',d1/d2\\d3/,file' ],
-[ "Win32->splitpath('C:\\d1/d2\\d3/')", 'C:,\\d1/d2\\d3/,' ],
-[ "Win32->splitpath('C:d1/d2\\d3/')", 'C:,d1/d2\\d3/,' ],
-[ "Win32->splitpath('C:\\d1/d2\\d3/file')", 'C:,\\d1/d2\\d3/,file' ],
-[ "Win32->splitpath('C:d1/d2\\d3/file')", 'C:,d1/d2\\d3/,file' ],
-[ "Win32->splitpath('C:\\../d2\\d3/file')", 'C:,\\../d2\\d3/,file' ],
-[ "Win32->splitpath('C:../d2\\d3/file')", 'C:,../d2\\d3/,file' ],
-[ "Win32->splitpath('\\../..\\d1/')", ',\\../..\\d1/,' ],
-[ "Win32->splitpath('\\./.\\d1/')", ',\\./.\\d1/,' ],
-[ "Win32->splitpath('\\\\node\\share\\d1/d2\\d3/')", '\\\\node\\share,\\d1/d2\\d3/,' ],
-[ "Win32->splitpath('\\\\node\\share\\d1/d2\\d3/file')", '\\\\node\\share,\\d1/d2\\d3/,file' ],
-[ "Win32->splitpath('\\\\node\\share\\d1/d2\\file')", '\\\\node\\share,\\d1/d2\\,file' ],
-[ "Win32->splitpath('file',1)", ',file,' ],
-[ "Win32->splitpath('\\d1/d2\\d3/',1)", ',\\d1/d2\\d3/,' ],
-[ "Win32->splitpath('d1/d2\\d3/',1)", ',d1/d2\\d3/,' ],
-[ "Win32->splitpath('\\\\node\\share\\d1/d2\\d3/',1)", '\\\\node\\share,\\d1/d2\\d3/,' ],
-
-[ "Win32->catpath('','','file')", 'file' ],
-[ "Win32->catpath('','\\d1/d2\\d3/','')", '\\d1/d2\\d3/' ],
-[ "Win32->catpath('','d1/d2\\d3/','')", 'd1/d2\\d3/' ],
-[ "Win32->catpath('','\\d1/d2\\d3/.','')", '\\d1/d2\\d3/.' ],
-[ "Win32->catpath('','\\d1/d2\\d3/..','')", '\\d1/d2\\d3/..' ],
-[ "Win32->catpath('','\\d1/d2\\d3/','.file')", '\\d1/d2\\d3/.file' ],
-[ "Win32->catpath('','\\d1/d2\\d3/','file')", '\\d1/d2\\d3/file' ],
-[ "Win32->catpath('','d1/d2\\d3/','file')", 'd1/d2\\d3/file' ],
-[ "Win32->catpath('C:','\\d1/d2\\d3/','')", 'C:\\d1/d2\\d3/' ],
-[ "Win32->catpath('C:','d1/d2\\d3/','')", 'C:d1/d2\\d3/' ],
-[ "Win32->catpath('C:','\\d1/d2\\d3/','file')", 'C:\\d1/d2\\d3/file' ],
-[ "Win32->catpath('C:','d1/d2\\d3/','file')", 'C:d1/d2\\d3/file' ],
-[ "Win32->catpath('C:','\\../d2\\d3/','file')", 'C:\\../d2\\d3/file' ],
-[ "Win32->catpath('C:','../d2\\d3/','file')", 'C:../d2\\d3/file' ],
-[ "Win32->catpath('','\\../..\\d1/','')", '\\../..\\d1/' ],
-[ "Win32->catpath('','\\./.\\d1/','')", '\\./.\\d1/' ],
-[ "Win32->catpath('\\\\node\\share','\\d1/d2\\d3/','')", '\\\\node\\share\\d1/d2\\d3/' ],
-[ "Win32->catpath('\\\\node\\share','\\d1/d2\\d3/','file')", '\\\\node\\share\\d1/d2\\d3/file' ],
-[ "Win32->catpath('\\\\node\\share','\\d1/d2\\','file')", '\\\\node\\share\\d1/d2\\file' ],
-
-[ "Win32->splitdir('')", '' ],
-[ "Win32->splitdir('\\d1/d2\\d3/')", ',d1,d2,d3,' ],
-[ "Win32->splitdir('d1/d2\\d3/')", 'd1,d2,d3,' ],
-[ "Win32->splitdir('\\d1/d2\\d3')", ',d1,d2,d3' ],
-[ "Win32->splitdir('d1/d2\\d3')", 'd1,d2,d3' ],
-
-[ "Win32->catdir()", '' ],
-[ "Win32->catdir('')", '\\' ],
-[ "Win32->catdir('/')", '\\' ],
-[ "Win32->catdir('//d1','d2')", '\\\\d1\\d2' ],
-[ "Win32->catdir('','/d1','d2')", '\\\\d1\\d2' ],
-[ "Win32->catdir('','','/d1','d2')", '\\\\\\d1\\d2' ],
-[ "Win32->catdir('','//d1','d2')", '\\\\\\d1\\d2' ],
-[ "Win32->catdir('','','//d1','d2')", '\\\\\\\\d1\\d2' ],
-[ "Win32->catdir('','d1','','d2','')", '\\d1\\d2' ],
-[ "Win32->catdir('','d1','d2','d3','')", '\\d1\\d2\\d3' ],
-[ "Win32->catdir('d1','d2','d3','')", 'd1\\d2\\d3' ],
-[ "Win32->catdir('','d1','d2','d3')", '\\d1\\d2\\d3' ],
-[ "Win32->catdir('d1','d2','d3')", 'd1\\d2\\d3' ],
-[ "Win32->catdir('A:/d1','d2','d3')", 'A:\\d1\\d2\\d3' ],
-[ "Win32->catdir('A:/d1','d2','d3','')", 'A:\\d1\\d2\\d3' ],
-#[ "Win32->catdir('A:/d1','B:/d2','d3','')", 'A:\\d1\\d2\\d3' ],
-[ "Win32->catdir('A:/d1','B:/d2','d3','')", 'A:\\d1\\B:\\d2\\d3' ],
-[ "Win32->catdir('A:/')", 'A:\\' ],
-
-[ "Win32->catfile('a','b','c')", 'a\\b\\c' ],
-
-[ "Win32->canonpath('')", '' ],
-[ "Win32->canonpath('a:')", 'A:' ],
-[ "Win32->canonpath('A:f')", 'A:f' ],
-[ "Win32->canonpath('//a\\b//c')", '\\\\a\\b\\c' ],
-[ "Win32->canonpath('/a/..../c')", '\\a\\....\\c' ],
-[ "Win32->canonpath('//a/b\\c')", '\\\\a\\b\\c' ],
-[ "Win32->canonpath('////')", '\\\\\\' ],
-[ "Win32->canonpath('//')", '\\' ],
-[ "Win32->canonpath('/.')", '\\.' ],
-[ "Win32->canonpath('//a/b/../../c')", '\\\\a\\b\\..\\..\\c' ],
-[ "Win32->canonpath('//a/../../c')", '\\\\a\\..\\..\\c' ],
-
-[ "Win32->abs2rel('/t1/t2/t3','/t1/t2/t3')", '' ],
-[ "Win32->abs2rel('/t1/t2/t4','/t1/t2/t3')", '..\\t4' ],
-[ "Win32->abs2rel('/t1/t2','/t1/t2/t3')", '..' ],
-[ "Win32->abs2rel('/t1/t2/t3/t4','/t1/t2/t3')", 't4' ],
-[ "Win32->abs2rel('/t4/t5/t6','/t1/t2/t3')", '..\\..\\..\\t4\\t5\\t6' ],
-#[ "Win32->abs2rel('../t4','/t1/t2/t3')", '\\t1\\t2\\t3\\..\\t4' ],
-[ "Win32->abs2rel('/','/t1/t2/t3')", '..\\..\\..' ],
-[ "Win32->abs2rel('///','/t1/t2/t3')", '..\\..\\..' ],
-[ "Win32->abs2rel('/.','/t1/t2/t3')", '..\\..\\..\\.' ],
-[ "Win32->abs2rel('/./','/t1/t2/t3')", '..\\..\\..' ],
-[ "Win32->abs2rel('\\\\a/t1/t2/t4','/t2/t3')", '..\\t4' ],
-[ "Win32->abs2rel('//a/t1/t2/t4','/t2/t3')", '..\\t4' ],
-
-[ "Win32->rel2abs('temp','C:/')", 'C:\\temp' ],
-[ "Win32->rel2abs('temp','C:/a')", 'C:\\a\\temp' ],
-[ "Win32->rel2abs('temp','C:/a/')", 'C:\\a\\temp' ],
-[ "Win32->rel2abs('../','C:/')", 'C:\\..' ],
-[ "Win32->rel2abs('../','C:/a')", 'C:\\a\\..' ],
-[ "Win32->rel2abs('temp','//prague_main/work/')", '\\\\prague_main\\work\\temp' ],
-[ "Win32->rel2abs('../temp','//prague_main/work/')", '\\\\prague_main\\work\\..\\temp' ],
-[ "Win32->rel2abs('temp','//prague_main/work')", '\\\\prague_main\\work\\temp' ],
-[ "Win32->rel2abs('../','//prague_main/work')", '\\\\prague_main\\work\\..' ],
-
-[ "VMS->splitpath('file')", ',,file' ],
-[ "VMS->splitpath('[d1.d2.d3]')", ',[d1.d2.d3],' ],
-[ "VMS->splitpath('[.d1.d2.d3]')", ',[.d1.d2.d3],' ],
-[ "VMS->splitpath('[d1.d2.d3]file')", ',[d1.d2.d3],file' ],
-[ "VMS->splitpath('d1/d2/d3/file')", ',[.d1.d2.d3],file' ],
-[ "VMS->splitpath('/d1/d2/d3/file')", 'd1:,[d2.d3],file' ],
-[ "VMS->splitpath('[.d1.d2.d3]file')", ',[.d1.d2.d3],file' ],
-[ "VMS->splitpath('node::volume:[d1.d2.d3]')", 'node::volume:,[d1.d2.d3],' ],
-[ "VMS->splitpath('node::volume:[d1.d2.d3]file')", 'node::volume:,[d1.d2.d3],file' ],
-[ "VMS->splitpath('node\"access_spec\"::volume:[d1.d2.d3]')", 'node"access_spec"::volume:,[d1.d2.d3],' ],
-[ "VMS->splitpath('node\"access_spec\"::volume:[d1.d2.d3]file')", 'node"access_spec"::volume:,[d1.d2.d3],file' ],
-
-[ "VMS->catpath('','','file')", 'file' ],
-[ "VMS->catpath('','[d1.d2.d3]','')", '[d1.d2.d3]' ],
-[ "VMS->catpath('','[.d1.d2.d3]','')", '[.d1.d2.d3]' ],
-[ "VMS->catpath('','[d1.d2.d3]','file')", '[d1.d2.d3]file' ],
-[ "VMS->catpath('','[.d1.d2.d3]','file')", '[.d1.d2.d3]file' ],
-[ "VMS->catpath('','d1/d2/d3','file')", '[.d1.d2.d3]file' ],
-[ "VMS->catpath('v','d1/d2/d3','file')", 'v:[.d1.d2.d3]file' ],
-[ "VMS->catpath('node::volume:','[d1.d2.d3]','')", 'node::volume:[d1.d2.d3]' ],
-[ "VMS->catpath('node::volume:','[d1.d2.d3]','file')", 'node::volume:[d1.d2.d3]file' ],
-[ "VMS->catpath('node\"access_spec\"::volume:','[d1.d2.d3]','')", 'node"access_spec"::volume:[d1.d2.d3]' ],
-[ "VMS->catpath('node\"access_spec\"::volume:','[d1.d2.d3]','file')", 'node"access_spec"::volume:[d1.d2.d3]file' ],
-
-[ "VMS->canonpath('')", '' ],
-[ "VMS->canonpath('volume:[d1]file')", 'volume:[d1]file' ],
-[ "VMS->canonpath('volume:[d1.-.d2.][d3.d4.-]')", 'volume:[d2.d3]' ],
-[ "VMS->canonpath('volume:[000000.d1]d2.dir;1')", 'volume:[d1]d2.dir;1' ],
-
-[ "VMS->splitdir('')", '' ],
-[ "VMS->splitdir('[]')", '' ],
-[ "VMS->splitdir('d1.d2.d3')", 'd1,d2,d3' ],
-[ "VMS->splitdir('[d1.d2.d3]')", 'd1,d2,d3' ],
-[ "VMS->splitdir('.d1.d2.d3')", ',d1,d2,d3' ],
-[ "VMS->splitdir('[.d1.d2.d3]')", ',d1,d2,d3' ],
-[ "VMS->splitdir('.-.d2.d3')", ',-,d2,d3' ],
-[ "VMS->splitdir('[.-.d2.d3]')", ',-,d2,d3' ],
-
-[ "VMS->catdir('')", '' ],
-[ "VMS->catdir('d1','d2','d3')", '[.d1.d2.d3]' ],
-[ "VMS->catdir('d1','d2/','d3')", '[.d1.d2.d3]' ],
-[ "VMS->catdir('','d1','d2','d3')", '[.d1.d2.d3]' ],
-[ "VMS->catdir('','-','d2','d3')", '[-.d2.d3]' ],
-[ "VMS->catdir('','-','','d3')", '[-.d3]' ],
-[ "VMS->catdir('dir.dir','d2.dir','d3.dir')", '[.dir.d2.d3]' ],
-[ "VMS->catdir('[.name]')", '[.name]' ],
-[ "VMS->catdir('[.name]','[.name]')", '[.name.name]'],
-
-[ "VMS->abs2rel('node::volume:[t1.t2.t3]','[t1.t2.t3]')", '' ],
-[ "VMS->abs2rel('node::volume:[t1.t2.t4]','[t1.t2.t3]')", '[-.t4]' ],
-[ "VMS->abs2rel('[t1.t2.t3]','[t1.t2.t3]')", '' ],
-[ "VMS->abs2rel('[t1.t2.t3]file','[t1.t2.t3]')", 'file' ],
-[ "VMS->abs2rel('[t1.t2.t4]','[t1.t2.t3]')", '[-.t4]' ],
-[ "VMS->abs2rel('[t1.t2]file','[t1.t2.t3]')", '[-]file' ],
-[ "VMS->abs2rel('[t1.t2.t3.t4]','[t1.t2.t3]')", '[t4]' ],
-[ "VMS->abs2rel('[t4.t5.t6]','[t1.t2.t3]')", '[---.t4.t5.t6]' ],
-[ "VMS->abs2rel('[000000]','[t1.t2.t3]')", '[---.000000]' ],
-[ "VMS->abs2rel('a:[t1.t2.t4]','[t1.t2.t3]')", '[-.t4]' ],
-[ "VMS->abs2rel('[a.-.b.c.-]','[t1.t2.t3]')", '[---.b]' ],
-
-[ "VMS->rel2abs('[.t4]','[t1.t2.t3]')", '[t1.t2.t3.t4]' ],
-[ "VMS->rel2abs('[.t4.t5]','[t1.t2.t3]')", '[t1.t2.t3.t4.t5]' ],
-[ "VMS->rel2abs('[]','[t1.t2.t3]')", '[t1.t2.t3]' ],
-[ "VMS->rel2abs('[-]','[t1.t2.t3]')", '[t1.t2]' ],
-[ "VMS->rel2abs('[-.t4]','[t1.t2.t3]')", '[t1.t2.t4]' ],
-[ "VMS->rel2abs('[t1]','[t1.t2.t3]')", '[t1]' ],
-
-[ "OS2->catdir('A:/d1','B:/d2','d3','')", 'A:/d1/B:/d2/d3' ],
-[ "OS2->catfile('a','b','c')", 'a/b/c' ],
-
-[ "Mac->splitpath('file')", ',,file' ],
-[ "Mac->splitpath(':file')", ',:,file' ],
-[ "Mac->splitpath(':d1',1)", ',:d1:,' ],
-[ "Mac->splitpath('d1',1)", 'd1:,,' ],
-[ "Mac->splitpath('d1:d2:d3:')", 'd1:,d2:d3:,' ],
-[ "Mac->splitpath('d1:d2:d3',1)", 'd1:,d2:d3:,' ],
-[ "Mac->splitpath(':d1:d2:d3:')", ',:d1:d2:d3:,' ],
-[ "Mac->splitpath(':d1:d2:d3:',1)", ',:d1:d2:d3:,' ],
-[ "Mac->splitpath('d1:d2:d3:file')", 'd1:,d2:d3:,file' ],
-[ "Mac->splitpath('d1:d2:d3',1)", 'd1:,d2:d3:,' ],
-
-[ "Mac->catdir('')", ':' ],
-[ "Mac->catdir('d1','d2','d3')", 'd1:d2:d3:' ],
-[ "Mac->catdir('d1','d2/','d3')", 'd1:d2/:d3:' ],
-[ "Mac->catdir('','d1','d2','d3')", ':d1:d2:d3:' ],
-[ "Mac->catdir('','','d2','d3')", '::d2:d3:' ],
-[ "Mac->catdir('','','','d3')", ':::d3:' ],
-[ "Mac->catdir(':name')", ':name:' ],
-[ "Mac->catdir(':name',':name')", ':name:name:' ],
-
-[ "Mac->catfile('a','b','c')", 'a:b:c' ],
-
-[ "Mac->canonpath('')", '' ],
-[ "Mac->canonpath(':')", ':' ],
-[ "Mac->canonpath('::')", '::' ],
-[ "Mac->canonpath('a::')", 'a::' ],
-[ "Mac->canonpath(':a::')", ':a::' ],
-
-[ "Mac->abs2rel('t1:t2:t3','t1:t2:t3')", ':' ],
-[ "Mac->abs2rel('t1:t2','t1:t2:t3')", '::' ],
-[ "Mac->abs2rel('t1:t4','t1:t2:t3')", ':::t4' ],
-[ "Mac->abs2rel('t1:t2:t4','t1:t2:t3')", '::t4' ],
-[ "Mac->abs2rel('t1:t2:t3:t4','t1:t2:t3')", ':t4' ],
-[ "Mac->abs2rel('t4:t5:t6','t1:t2:t3')", '::::t4:t5:t6' ],
-[ "Mac->abs2rel('t1','t1:t2:t3')", ':::' ],
-
-[ "Mac->rel2abs(':t4','t1:t2:t3')", 't1:t2:t3:t4' ],
-[ "Mac->rel2abs(':t4:t5','t1:t2:t3')", 't1:t2:t3:t4:t5' ],
-[ "Mac->rel2abs('','t1:t2:t3')", '' ],
-[ "Mac->rel2abs('::','t1:t2:t3')", 't1:t2:t3::' ],
-[ "Mac->rel2abs('::t4','t1:t2:t3')", 't1:t2:t3::t4' ],
-[ "Mac->rel2abs('t1','t1:t2:t3')", 't1' ],
-) ;
-
-# Grab all of the plain routines from File::Spec
-use File::Spec @File::Spec::EXPORT_OK ;
-
-require File::Spec::Unix ;
-require File::Spec::Win32 ;
-
-eval {
- require VMS::Filespec ;
-} ;
-
-my $skip_exception = "Install VMS::Filespec (from vms/ext)" ;
-
-if ( $@ ) {
- # Not pretty, but it allows testing of things not implemented soley
- # on VMS. It might be better to change File::Spec::VMS to do this,
- # making it more usable when running on (say) Unix but working with
- # VMS paths.
- eval qq-
- sub File::Spec::VMS::vmsify { die "$skip_exception" }
- sub File::Spec::VMS::unixify { die "$skip_exception" }
- sub File::Spec::VMS::vmspath { die "$skip_exception" }
- - ;
- $INC{"VMS/Filespec.pm"} = 1 ;
-}
-require File::Spec::VMS ;
-
-require File::Spec::OS2 ;
-require File::Spec::Mac ;
-
-print "1..", scalar( @tests ), "\n" ;
-
-my $current_test= 1 ;
-
-# Test out the class methods
-for ( @tests ) {
- tryfunc( @$_ ) ;
-}
-
-
-
-#
-# Tries a named function with the given args and compares the result against
-# an expected result. Works with functions that return scalars or arrays.
-#
-sub tryfunc {
- my $function = shift ;
- my $expected = shift ;
- my $platform = shift ;
-
- if ($platform && $^O ne $platform) {
- print "ok $current_test # skipped: $function\n" ;
- ++$current_test ;
- return;
- }
-
- $function =~ s#\\#\\\\#g ;
-
- my $got ;
- if ( $function =~ /^[^\$].*->/ ) {
- $got = eval( "join( ',', File::Spec::$function )" ) ;
- }
- else {
- $got = eval( "join( ',', $function )" ) ;
- }
-
- if ( $@ ) {
- if ( substr( $@, 0, length $skip_exception ) eq $skip_exception ) {
- chomp $@ ;
- print "ok $current_test # skip $function: $@\n" ;
- }
- else {
- chomp $@ ;
- print "not ok $current_test # $function: $@\n" ;
- }
- }
- elsif ( !defined( $got ) || $got ne $expected ) {
- print "not ok $current_test # $function: got '$got', expected '$expected'\n" ;
- }
- else {
- print "ok $current_test # $function\n" ;
- }
- ++$current_test ;
-}
diff --git a/contrib/perl5/t/lib/findbin.t b/contrib/perl5/t/lib/findbin.t
deleted file mode 100755
index 3e742f9..0000000
--- a/contrib/perl5/t/lib/findbin.t
+++ /dev/null
@@ -1,13 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..1\n";
-
-use FindBin qw($Bin);
-
-print "not " unless $Bin =~ m,t[/.]lib\]?$,;
-print "ok 1\n";
diff --git a/contrib/perl5/t/lib/ftmp-mktemp.t b/contrib/perl5/t/lib/ftmp-mktemp.t
deleted file mode 100755
index b0a7872..0000000
--- a/contrib/perl5/t/lib/ftmp-mktemp.t
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/perl -w
-
-# Test for mktemp family of commands in File::Temp
-# Use STANDARD safe level for these tests
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Test; import Test;
- plan(tests => 9);
-}
-
-use strict;
-
-use File::Spec;
-use File::Path;
-use File::Temp qw/ :mktemp unlink0 /;
-
-ok(1);
-
-# MKSTEMP - test
-
-# Create file in temp directory
-my $template = File::Spec->catfile(File::Spec->tmpdir, 'wowserXXXX');
-
-(my $fh, $template) = mkstemp($template);
-
-print "# MKSTEMP: FH is $fh File is $template fileno=".fileno($fh)."\n";
-# Check if the file exists
-ok( (-e $template) );
-
-# Autoflush
-$fh->autoflush(1) if $] >= 5.006;
-
-# Try printing something to the file
-my $string = "woohoo\n";
-print $fh $string;
-
-# rewind the file
-ok(seek( $fh, 0, 0));
-
-# Read from the file
-my $line = <$fh>;
-
-# compare with previous string
-ok($string, $line);
-
-# Tidy up
-# This test fails on Windows NT since it seems that the size returned by
-# stat(filehandle) does not always equal the size of the stat(filename)
-# This must be due to caching. In particular this test writes 7 bytes
-# to the file which are not recognised by stat(filename)
-# Simply waiting 3 seconds seems to be enough for the system to update
-
-if ($^O eq 'MSWin32') {
- sleep 3;
-}
-my $status = unlink0($fh, $template);
-if ($status) {
- ok( $status );
-} else {
- skip("Skip test failed probably due to \$TMPDIR being on NFS",1);
-}
-
-# MKSTEMPS
-# File with suffix. This is created in the current directory so
-# may be problematic on NFS
-
-$template = "suffixXXXXXX";
-my $suffix = ".dat";
-
-($fh, my $fname) = mkstemps($template, $suffix);
-
-print "# MKSTEMPS: File is $template -> $fname fileno=".fileno($fh)."\n";
-# Check if the file exists
-ok( (-e $fname) );
-
-# This fails if you are running on NFS
-# If this test fails simply skip it rather than doing a hard failure
-$status = unlink0($fh, $fname);
-
-if ($status) {
- ok($status);
-} else {
- skip("Skip test failed probably due to cwd being on NFS",1)
-}
-
-# MKDTEMP
-# Temp directory
-
-$template = File::Spec->catdir(File::Spec->tmpdir, 'tmpdirXXXXXX');
-
-my $tmpdir = mkdtemp($template);
-
-print "# MKDTEMP: Name is $tmpdir from template $template\n";
-
-ok( (-d $tmpdir ) );
-
-# Need to tidy up after myself
-rmtree($tmpdir);
-
-# MKTEMP
-# Just a filename, not opened
-
-$template = File::Spec->catfile(File::Spec->tmpdir, 'mytestXXXXXX');
-
-my $tmpfile = mktemp($template);
-
-print "# MKTEMP: Tempfile is $template -> $tmpfile\n";
-
-# Okay if template no longer has XXXXX in
-
-
-ok( ($tmpfile !~ /XXXXX$/) );
diff --git a/contrib/perl5/t/lib/ftmp-posix.t b/contrib/perl5/t/lib/ftmp-posix.t
deleted file mode 100755
index 79496d8..0000000
--- a/contrib/perl5/t/lib/ftmp-posix.t
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/perl -w
-# Test for File::Temp - POSIX functions
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Test; import Test;
- plan(tests => 7);
-}
-
-use strict;
-
-use File::Temp qw/ :POSIX unlink0 /;
-ok(1);
-
-# TMPNAM - scalar
-
-print "# TMPNAM: in a scalar context: \n";
-my $tmpnam = tmpnam();
-
-# simply check that the file does not exist
-# Not a 100% water tight test though if another program
-# has managed to create one in the meantime.
-ok( !(-e $tmpnam ));
-
-print "# TMPNAM file name: $tmpnam\n";
-
-# TMPNAM list context
-# Not strict posix behaviour
-(my $fh, $tmpnam) = tmpnam();
-
-print "# TMPNAM: in list context: $fh $tmpnam\n";
-
-# File is opened - make sure it exists
-ok( (-e $tmpnam ));
-
-# Unlink it - a possible NFS issue again if TMPDIR is not a local disk
-my $status = unlink0($fh, $tmpnam);
-if ($status) {
- ok( $status );
-} else {
- skip("Skip test failed probably due to \$TMPDIR being on NFS",1);
-}
-
-# TMPFILE
-
-$fh = tmpfile();
-
-if (defined $fh) {
- ok( $fh );
- print "# TMPFILE: tmpfile got FH $fh\n";
-
- $fh->autoflush(1) if $] >= 5.006;
-
- # print something to it
- my $original = "Hello a test\n";
- print "# TMPFILE: Wrote line: $original";
- print $fh $original
- or die "Error printing to tempfile\n";
-
- # rewind it
- ok( seek($fh,0,0) );
-
- # Read from it
- my $line = <$fh>;
-
- print "# TMPFILE: Read line: $line";
- ok( $original, $line);
-
- close($fh);
-
-} else {
- # Skip all the remaining tests
- foreach (1..3) {
- skip("Skip test failed probably due to \$TMPDIR being on NFS",1);
- }
-}
-
-
-
-
diff --git a/contrib/perl5/t/lib/ftmp-security.t b/contrib/perl5/t/lib/ftmp-security.t
deleted file mode 100755
index 96b2c42..0000000
--- a/contrib/perl5/t/lib/ftmp-security.t
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/perl -w
-# Test for File::Temp - Security levels
-
-# Some of the security checking will not work on all platforms
-# Test a simple open in the cwd and tmpdir foreach of the
-# security levels
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Test; import Test;
- plan(tests => 13);
-}
-
-use strict;
-use File::Spec;
-
-# Set up END block - this needs to happen before we load
-# File::Temp since this END block must be evaluated after the
-# END block configured by File::Temp
-my @files; # list of files to remove
-END { foreach (@files) { ok( !(-e $_) )} }
-
-use File::Temp qw/ tempfile unlink0 /;
-ok(1);
-
-# The high security tests must currently be skipped on some platforms
-my $skipplat = ( (
- # No sticky bits.
- $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'dos'
- ) ? 1 : 0 );
-
-# Can not run high security tests in perls before 5.6.0
-my $skipperl = ($] < 5.006 ? 1 : 0 );
-
-# Determine whether we need to skip things and why
-my $skip = 0;
-if ($skipplat) {
- $skip = "Skip Not supported on this platform";
-} elsif ($skipperl) {
- $skip = "Skip Perl version must be v5.6.0 for these tests";
-
-}
-
-print "# We will be skipping some tests : $skip\n" if $skip;
-
-# start off with basic checking
-
-File::Temp->safe_level( File::Temp::STANDARD );
-
-print "# Testing with STANDARD security...\n";
-
-&test_security(0);
-
-# Try medium
-
-File::Temp->safe_level( File::Temp::MEDIUM )
- unless $skip;
-
-print "# Testing with MEDIUM security...\n";
-
-# Now we need to start skipping tests
-&test_security($skip);
-
-# Try HIGH
-
-File::Temp->safe_level( File::Temp::HIGH )
- unless $skip;
-
-print "# Testing with HIGH security...\n";
-
-&test_security($skip);
-
-exit;
-
-# Subroutine to open two temporary files.
-# one is opened in the current dir and the other in the temp dir
-
-sub test_security {
-
- # Read in the skip flag
- my $skip = shift;
-
- # If we are skipping we need to simply fake the correct number
- # of tests -- we dont use skip since the tempfile() commands will
- # fail with MEDIUM/HIGH security before the skip() command would be run
- if ($skip) {
-
- skip($skip,1);
- skip($skip,1);
-
- # plus we need an end block so the tests come out in the right order
- eval q{ END { skip($skip,1); skip($skip,1) } 1; } || die;
-
- return;
- }
-
- # Create the tempfile
- my $template = "tmpXXXXX";
- my ($fh1, $fname1) = eval { tempfile ( $template,
- DIR => File::Spec->tmpdir,
- UNLINK => 1,
- );
- };
-
- if (defined $fname1) {
- print "# fname1 = $fname1\n";
- ok( (-e $fname1) );
- push(@files, $fname1); # store for end block
- } elsif (File::Temp->safe_level() != File::Temp::STANDARD) {
- my $skip2 = "Skip system possibly insecure, see INSTALL, section 'make test'";
- skip($skip2, 1);
- # plus we need an end block so the tests come out in the right order
- eval q{ END { skip($skip2,1); } 1; } || die;
- } else {
- ok(0);
- }
-
- # Explicitly
- if ( $< < File::Temp->top_system_uid() ){
- skip("Skip Test inappropriate for root", 1);
- eval q{ END { skip($skip,1); } 1; } || die;
- return;
- }
- my ($fh2, $fname2) = eval { tempfile ($template, UNLINK => 1 ); };
- if (defined $fname2) {
- print "# fname2 = $fname2\n";
- ok( (-e $fname2) );
- push(@files, $fname2); # store for end block
- close($fh2);
- } elsif (File::Temp->safe_level() != File::Temp::STANDARD) {
- my $skip2 = "Skip system possibly insecure, see INSTALL, section 'make test'";
- skip($skip2, 1);
- # plus we need an end block so the tests come out in the right order
- eval q{ END { skip($skip2,1); } 1; } || die;
- } else {
- ok(0);
- }
-
-}
diff --git a/contrib/perl5/t/lib/ftmp-tempfile.t b/contrib/perl5/t/lib/ftmp-tempfile.t
deleted file mode 100755
index ed59765..0000000
--- a/contrib/perl5/t/lib/ftmp-tempfile.t
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/local/bin/perl -w
-# Test for File::Temp - tempfile function
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Test; import Test;
- plan(tests => 20);
-}
-
-use strict;
-use File::Spec;
-
-# Will need to check that all files were unlinked correctly
-# Set up an END block here to do it
-
-# Arrays containing list of dirs/files to test
-my (@files, @dirs, @still_there);
-
-# And a test for files that should still be around
-# These are tidied up
-END {
- foreach (@still_there) {
- ok( -f $_ );
- ok( unlink( $_ ) );
- ok( !(-f $_) );
- }
-}
-
-# Loop over an array hoping that the files dont exist
-END { foreach (@files) { ok( !(-e $_) )} }
-
-# And a test for directories
-END { foreach (@dirs) { ok( !(-d $_) )} }
-
-# Need to make sure that the END blocks are setup before
-# the ones that File::Temp configures since END blocks are evaluated
-# in revers order and we need to check the files *after* File::Temp
-# removes them
-use File::Temp qw/ tempfile tempdir/;
-
-# Now we start the tests properly
-ok(1);
-
-
-# Tempfile
-# Open tempfile in some directory, unlink at end
-my ($fh, $tempfile) = tempfile(
- UNLINK => 1,
- SUFFIX => '.txt',
- );
-
-ok( (-f $tempfile) );
-# Should still be around after closing
-ok( close( $fh ) );
-ok( (-f $tempfile) );
-# Check again at exit
-push(@files, $tempfile);
-
-# TEMPDIR test
-# Create temp directory in current dir
-my $template = 'tmpdirXXXXXX';
-print "# Template: $template\n";
-my $tempdir = tempdir( $template ,
- DIR => File::Spec->curdir,
- CLEANUP => 1,
- );
-
-print "# TEMPDIR: $tempdir\n";
-
-ok( (-d $tempdir) );
-push(@dirs, $tempdir);
-
-# Create file in the temp dir
-($fh, $tempfile) = tempfile(
- DIR => $tempdir,
- UNLINK => 1,
- SUFFIX => '.dat',
- );
-
-print "# TEMPFILE: Created $tempfile\n";
-
-ok( (-f $tempfile));
-push(@files, $tempfile);
-
-# Test tempfile
-# ..and again
-($fh, $tempfile) = tempfile(
- DIR => $tempdir,
- );
-
-
-ok( (-f $tempfile ));
-push(@files, $tempfile);
-
-print "# TEMPFILE: Created $tempfile\n";
-
-# and another (with template)
-
-($fh, $tempfile) = tempfile( 'helloXXXXXXX',
- DIR => $tempdir,
- UNLINK => 1,
- SUFFIX => '.dat',
- );
-
-print "# TEMPFILE: Created $tempfile\n";
-
-ok( (-f $tempfile) );
-push(@files, $tempfile);
-
-
-# Create a temporary file that should stay around after
-# it has been closed
-($fh, $tempfile) = tempfile( 'permXXXXXXX', UNLINK => 0 );
-print "# TEMPFILE: Created $tempfile\n";
-ok( -f $tempfile );
-ok( close( $fh ) );
-push( @still_there, $tempfile); # check at END
-
-# Would like to create a temp file and just retrieve the handle
-# but the test is problematic since:
-# - We dont know the filename so we cant check that it is tidied
-# correctly
-# - The unlink0 required on unix for tempfile creation will fail
-# on NFS
-# Try to do what we can.
-# Tempfile croaks on error so we need an eval
-$fh = eval { tempfile( 'ftmpXXXXX', DIR => File::Spec->tmpdir ) };
-
-if ($fh) {
-
- # print something to it to make sure something is there
- ok( print $fh "Test\n" );
-
- # Close it - can not check it is gone since we dont know the name
- ok( close($fh) );
-
-} else {
- skip "Skip Failed probably due to NFS", 1;
- skip "Skip Failed probably due to NFS", 1;
-}
-
-# Now END block will execute to test the removal of directories
-print "# End of tests. Execute END blocks\n";
-
diff --git a/contrib/perl5/t/lib/gdbm.t b/contrib/perl5/t/lib/gdbm.t
deleted file mode 100755
index ecbd662..0000000
--- a/contrib/perl5/t/lib/gdbm.t
+++ /dev/null
@@ -1,426 +0,0 @@
-#!./perl
-
-# $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $
-
-BEGIN {
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bGDBM_File\b/) {
- print "1..0 # Skip: GDBM_File was not built\n";
- exit 0;
- }
-}
-
-use strict;
-use warnings;
-
-
-use GDBM_File;
-
-print "1..68\n";
-
-unlink <Op.dbmx*>;
-
-umask(0);
-my %h ;
-print (tie(%h,'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640) ? "ok 1\n" : "not ok 1\n");
-
-my $Dfile = "Op.dbmx.pag";
-if (! -e $Dfile) {
- ($Dfile) = <Op.dbmx*>;
-}
-if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'dos') {
- print "ok 2 # Skipped: different file permission semantics\n";
-}
-else {
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
- print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n");
-}
-my $i = 0;
-while (my ($key,$value) = each(%h)) {
- $i++;
-}
-print (!$i ? "ok 3\n" : "not ok 3\n");
-
-$h{'goner1'} = 'snork';
-
-$h{'abc'} = 'ABC';
-$h{'def'} = 'DEF';
-$h{'jkl','mno'} = "JKL\034MNO";
-$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
-$h{'a'} = 'A';
-$h{'b'} = 'B';
-$h{'c'} = 'C';
-$h{'d'} = 'D';
-$h{'e'} = 'E';
-$h{'f'} = 'F';
-$h{'g'} = 'G';
-$h{'h'} = 'H';
-$h{'i'} = 'I';
-
-$h{'goner2'} = 'snork';
-delete $h{'goner2'};
-
-untie(%h);
-print (tie(%h,'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640) ? "ok 4\n" : "not ok 4\n");
-
-$h{'j'} = 'J';
-$h{'k'} = 'K';
-$h{'l'} = 'L';
-$h{'m'} = 'M';
-$h{'n'} = 'N';
-$h{'o'} = 'O';
-$h{'p'} = 'P';
-$h{'q'} = 'Q';
-$h{'r'} = 'R';
-$h{'s'} = 'S';
-$h{'t'} = 'T';
-$h{'u'} = 'U';
-$h{'v'} = 'V';
-$h{'w'} = 'W';
-$h{'x'} = 'X';
-$h{'y'} = 'Y';
-$h{'z'} = 'Z';
-
-$h{'goner3'} = 'snork';
-
-delete $h{'goner1'};
-delete $h{'goner3'};
-
-my @keys = keys(%h);
-my @values = values(%h);
-
-if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";}
-
-while (my ($key,$value) = each(%h)) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";}
-
-@keys = ('blurfl', keys(%h), 'dyick');
-if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";}
-
-$h{'foo'} = '';
-$h{''} = 'bar';
-
-# check cache overflow and numeric keys and contents
-my $ok = 1;
-for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; }
-for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; }
-print ($ok ? "ok 8\n" : "not ok 8\n");
-
-my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-print ($size > 0 ? "ok 9\n" : "not ok 9\n");
-
-@h{0..200} = 200..400;
-my @foo = @h{0..200};
-print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n";
-
-print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n");
-print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n");
-
-untie %h;
-unlink 'Op.dbmx.dir', $Dfile;
-
-sub ok
-{
- my $no = shift ;
- my $result = shift ;
-
- print "not " unless $result ;
- print "ok $no\n" ;
-}
-
-{
- # sub-class test
-
- package Another ;
-
- use strict ;
- use warnings ;
-
- open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ;
- print FILE <<'EOM' ;
-
- package SubDB ;
-
- use strict ;
- use vars qw(@ISA @EXPORT) ;
-
- require Exporter ;
- use GDBM_File;
- @ISA=qw(GDBM_File);
- @EXPORT = @GDBM_File::EXPORT ;
-
- sub STORE {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::STORE($key, $value * 2) ;
- }
-
- sub FETCH {
- my $self = shift ;
- my $key = shift ;
- $self->SUPER::FETCH($key) - 1 ;
- }
-
- sub A_new_method
- {
- my $self = shift ;
- my $key = shift ;
- my $value = $self->FETCH($key) ;
- return "[[$value]]" ;
- }
-
- 1 ;
-EOM
-
- close FILE ;
-
- BEGIN { push @INC, '.'; }
- unlink <dbhash.tmp*> ;
-
- eval 'use SubDB ; ';
- main::ok(13, $@ eq "") ;
- my %h ;
- my $X ;
- eval '
- $X = tie(%h, "SubDB","dbhash.tmp", &GDBM_WRCREAT, 0640 );
- ' ;
-
- main::ok(14, $@ eq "") ;
-
- my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ;
- main::ok(15, $@ eq "") ;
- main::ok(16, $ret == 5) ;
-
- $ret = eval ' &GDBM_WRCREAT eq &main::GDBM_WRCREAT ' ;
- main::ok(17, $@ eq "" ) ;
- main::ok(18, $ret == 1) ;
-
- $ret = eval '$X->A_new_method("fred") ' ;
- main::ok(19, $@ eq "") ;
- main::ok(20, $ret eq "[[5]]") ;
-
- undef $X;
- untie(%h);
- unlink "SubDB.pm", <dbhash.tmp*> ;
-
-}
-
-{
- # DBM Filter tests
- use strict ;
- use warnings ;
- my (%h, $db) ;
- my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
-
- sub checkOutput
- {
- my($fk, $sk, $fv, $sv) = @_ ;
- return
- $fetch_key eq $fk && $store_key eq $sk &&
- $fetch_value eq $fv && $store_value eq $sv &&
- $_ eq 'original' ;
- }
-
- unlink <Op.dbmx*>;
- ok(21, $db = tie(%h, 'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640)) ;
-
- $db->filter_fetch_key (sub { $fetch_key = $_ }) ;
- $db->filter_store_key (sub { $store_key = $_ }) ;
- $db->filter_fetch_value (sub { $fetch_value = $_}) ;
- $db->filter_store_value (sub { $store_value = $_ }) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- # fk sk fv sv
- ok(22, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(23, $h{"fred"} eq "joe");
- # fk sk fv sv
- ok(24, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(25, $db->FIRSTKEY() eq "fred") ;
- # fk sk fv sv
- ok(26, checkOutput( "fred", "", "", "")) ;
-
- # replace the filters, but remember the previous set
- my ($old_fk) = $db->filter_fetch_key
- (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
- my ($old_sk) = $db->filter_store_key
- (sub { $_ = lc $_ ; $store_key = $_ }) ;
- my ($old_fv) = $db->filter_fetch_value
- (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
- my ($old_sv) = $db->filter_store_value
- (sub { s/o/x/g; $store_value = $_ }) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"Fred"} = "Joe" ;
- # fk sk fv sv
- ok(27, checkOutput( "", "fred", "", "Jxe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(28, $h{"Fred"} eq "[Jxe]");
- # fk sk fv sv
- ok(29, checkOutput( "", "fred", "[Jxe]", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(30, $db->FIRSTKEY() eq "FRED") ;
- # fk sk fv sv
- ok(31, checkOutput( "FRED", "", "", "")) ;
-
- # put the original filters back
- $db->filter_fetch_key ($old_fk);
- $db->filter_store_key ($old_sk);
- $db->filter_fetch_value ($old_fv);
- $db->filter_store_value ($old_sv);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(32, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(33, $h{"fred"} eq "joe");
- ok(34, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(35, $db->FIRSTKEY() eq "fred") ;
- ok(36, checkOutput( "fred", "", "", "")) ;
-
- # delete the filters
- $db->filter_fetch_key (undef);
- $db->filter_store_key (undef);
- $db->filter_fetch_value (undef);
- $db->filter_store_value (undef);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(37, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(38, $h{"fred"} eq "joe");
- ok(39, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(40, $db->FIRSTKEY() eq "fred") ;
- ok(41, checkOutput( "", "", "", "")) ;
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # DBM Filter with a closure
-
- use strict ;
- use warnings ;
- my (%h, $db) ;
-
- unlink <Op.dbmx*>;
- ok(42, $db = tie(%h, 'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640)) ;
-
- my %result = () ;
-
- sub Closure
- {
- my ($name) = @_ ;
- my $count = 0 ;
- my @kept = () ;
-
- return sub { ++$count ;
- push @kept, $_ ;
- $result{$name} = "$name - $count: [@kept]" ;
- }
- }
-
- $db->filter_store_key(Closure("store key")) ;
- $db->filter_store_value(Closure("store value")) ;
- $db->filter_fetch_key(Closure("fetch key")) ;
- $db->filter_fetch_value(Closure("fetch value")) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- ok(43, $result{"store key"} eq "store key - 1: [fred]");
- ok(44, $result{"store value"} eq "store value - 1: [joe]");
- ok(45, !defined $result{"fetch key"} );
- ok(46, !defined $result{"fetch value"} );
- ok(47, $_ eq "original") ;
-
- ok(48, $db->FIRSTKEY() eq "fred") ;
- ok(49, $result{"store key"} eq "store key - 1: [fred]");
- ok(50, $result{"store value"} eq "store value - 1: [joe]");
- ok(51, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(52, ! defined $result{"fetch value"} );
- ok(53, $_ eq "original") ;
-
- $h{"jim"} = "john" ;
- ok(54, $result{"store key"} eq "store key - 2: [fred jim]");
- ok(55, $result{"store value"} eq "store value - 2: [joe john]");
- ok(56, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(57, ! defined $result{"fetch value"} );
- ok(58, $_ eq "original") ;
-
- ok(59, $h{"fred"} eq "joe");
- ok(60, $result{"store key"} eq "store key - 3: [fred jim fred]");
- ok(61, $result{"store value"} eq "store value - 2: [joe john]");
- ok(62, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(63, $result{"fetch value"} eq "fetch value - 1: [joe]");
- ok(64, $_ eq "original") ;
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # DBM Filter recursion detection
- use strict ;
- use warnings ;
- my (%h, $db) ;
- unlink <Op.dbmx*>;
-
- ok(65, $db = tie(%h, 'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640)) ;
-
- $db->filter_store_key (sub { $_ = $h{$_} }) ;
-
- eval '$h{1} = 1234' ;
- ok(66, $@ =~ /^recursion detected in filter_store_key at/ );
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # Bug ID 20001013.009
- #
- # test that $hash{KEY} = undef doesn't produce the warning
- # Use of uninitialized value in null operation
- use warnings ;
- use strict ;
- use GDBM_File ;
-
- unlink <Op.dbmx*>;
- my %h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- ok(67, tie(%h, 'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640));
- $h{ABC} = undef;
- ok(68, $a eq "") ;
- untie %h;
- unlink <Op.dbmx*>;
-}
diff --git a/contrib/perl5/t/lib/getopt.t b/contrib/perl5/t/lib/getopt.t
deleted file mode 100755
index fb70f10..0000000
--- a/contrib/perl5/t/lib/getopt.t
+++ /dev/null
@@ -1,73 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..11\n";
-
-use Getopt::Std;
-
-# First we test the getopt function
-@ARGV = qw(-xo -f foo -y file);
-getopt('f');
-
-print "not " if "@ARGV" ne 'file';
-print "ok 1\n";
-
-print "not " unless $opt_x && $opt_o && opt_y;
-print "ok 2\n";
-
-print "not " unless $opt_f eq 'foo';
-print "ok 3\n";
-
-
-# Then we try the getopts
-$opt_o = $opt_i = $opt_f = undef;
-@ARGV = qw(-foi -i file);
-getopts('oif:') or print "not ";
-print "ok 4\n";
-
-print "not " unless "@ARGV" eq 'file';
-print "ok 5\n";
-
-print "not " unless $opt_i and $opt_f eq 'oi';
-print "ok 6\n";
-
-print "not " if $opt_o;
-print "ok 7\n";
-
-# Try illegal options, but avoid printing of the error message
-
-open(STDERR, ">stderr") || die;
-
-@ARGV = qw(-h help);
-
-!getopts("xf:y") or print "not ";
-print "ok 8\n";
-
-
-# Then try the Getopt::Long module
-
-use Getopt::Long;
-
-@ARGV = qw(--help --file foo --foo --nobar --num=5 -- file);
-
-GetOptions(
- 'help' => \$HELP,
- 'file:s' => \$FILE,
- 'foo!' => \$FOO,
- 'bar!' => \$BAR,
- 'num:i' => \$NO,
-) || print "not ";
-print "ok 9\n";
-
-print "not " unless $HELP && $FOO && !$BAR && $FILE eq 'foo' && $NO == 5;
-print "ok 10\n";
-
-print "not " unless "@ARGV" eq "file";
-print "ok 11\n";
-
-close STDERR;
-unlink "stderr";
diff --git a/contrib/perl5/t/lib/glob-basic.t b/contrib/perl5/t/lib/glob-basic.t
deleted file mode 100755
index a014bfd..0000000
--- a/contrib/perl5/t/lib/glob-basic.t
+++ /dev/null
@@ -1,129 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($^O eq 'MacOS') {
- @INC = qw(: ::lib ::macos:lib);
- } else {
- @INC = '.';
- push @INC, '../lib';
- }
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bFile\/Glob\b/i) {
- print "1..0\n";
- exit 0;
- }
- print "1..9\n";
-}
-END {
- print "not ok 1\n" unless $loaded;
-}
-use File::Glob ':glob';
-use Cwd ();
-$loaded = 1;
-print "ok 1\n";
-
-sub array {
- return '(', join(", ", map {defined $_ ? "\"$_\"" : "undef"} @a), ")\n";
-}
-
-# look for the contents of the current directory
-$ENV{PATH} = "/bin";
-delete @ENV{BASH_ENV, CDPATH, ENV, IFS};
-@correct = ();
-if (opendir(D, $^O eq "MacOS" ? ":" : ".")) {
- @correct = grep { !/^\./ } sort readdir(D);
- closedir D;
-}
-@a = File::Glob::glob("*", 0);
-@a = sort @a;
-if ("@a" ne "@correct" || GLOB_ERROR) {
- print "# |@a| ne |@correct|\nnot ";
-}
-print "ok 2\n";
-
-# look up the user's home directory
-# should return a list with one item, and not set ERROR
-if ($^O ne 'MSWin32' && $^O ne 'VMS') {
- eval {
- ($name, $home) = (getpwuid($>))[0,7];
- 1;
- } and do {
- @a = bsd_glob("~$name", GLOB_TILDE);
- if (scalar(@a) != 1 || $a[0] ne $home || GLOB_ERROR) {
- print "not ";
- }
- };
-}
-print "ok 3\n";
-
-# check backslashing
-# should return a list with one item, and not set ERROR
-@a = bsd_glob('TEST', GLOB_QUOTE);
-if (scalar @a != 1 || $a[0] ne 'TEST' || GLOB_ERROR) {
- local $/ = "][";
- print "# [@a]\n";
- print "not ";
-}
-print "ok 4\n";
-
-# check nonexistent checks
-# should return an empty list
-# XXX since errfunc is NULL on win32, this test is not valid there
-@a = bsd_glob("asdfasdf", 0);
-if ($^O ne 'MSWin32' and scalar @a != 0) {
- print "# |@a|\nnot ";
-}
-print "ok 5\n";
-
-# check bad protections
-# should return an empty list, and set ERROR
-if ($^O eq 'mpeix' or $^O eq 'MSWin32' or $^O eq 'os2' or $^O eq 'VMS'
- or $^O eq 'cygwin' or Cwd::cwd() =~ m#^/afs#s or not $>)
-{
- print "ok 6 # skipped\n";
-}
-else {
- $dir = "PtEeRsLt.dir";
- mkdir $dir, 0;
- @a = bsd_glob("$dir/*", GLOB_ERR);
- #print "\@a = ", array(@a);
- rmdir $dir;
- if (scalar(@a) != 0 || GLOB_ERROR == 0) {
- print "not ";
- }
- print "ok 6\n";
-}
-
-# check for csh style globbing
-@a = bsd_glob('{a,b}', GLOB_BRACE | GLOB_NOMAGIC);
-unless (@a == 2 and $a[0] eq 'a' and $a[1] eq 'b') {
- print "not ";
-}
-print "ok 7\n";
-
-@a = bsd_glob(
- '{TES*,doesntexist*,a,b}',
- GLOB_BRACE | GLOB_NOMAGIC | ($^O eq 'VMS' ? GLOB_NOCASE : 0)
-);
-
-# Working on t/TEST often causes this test to fail because it sees temp
-# and RCS files. Filter them out, and .pm files too.
-@a = grep !/(,v$|~$|\.pm$)/, @a;
-
-unless (@a == 3
- and $a[0] eq ($^O eq 'VMS'? 'test.' : 'TEST')
- and $a[1] eq 'a'
- and $a[2] eq 'b')
-{
- print "not ";
-}
-print "ok 8\n";
-
-# "~" should expand to $ENV{HOME}
-$ENV{HOME} = "sweet home";
-@a = bsd_glob('~', GLOB_TILDE | GLOB_NOMAGIC);
-unless ($^O eq "MacOS" || (@a == 1 and $a[0] eq $ENV{HOME})) {
- print "not ";
-}
-print "ok 9\n";
diff --git a/contrib/perl5/t/lib/glob-case.t b/contrib/perl5/t/lib/glob-case.t
deleted file mode 100755
index 881470c..0000000
--- a/contrib/perl5/t/lib/glob-case.t
+++ /dev/null
@@ -1,60 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($^O eq 'MacOS') {
- @INC = qw(: ::lib ::macos:lib);
- } else {
- @INC = '.';
- push @INC, '../lib';
- }
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bFile\/Glob\b/i) {
- print "1..0\n";
- exit 0;
- }
- print "1..7\n";
-}
-END {
- print "not ok 1\n" unless $loaded;
-}
-use File::Glob qw(:glob csh_glob);
-$loaded = 1;
-print "ok 1\n";
-
-my $pat = $^O eq "MacOS" ? ":lib:G*.t" : "lib/G*.t";
-
-# Test the actual use of the case sensitivity tags, via csh_glob()
-import File::Glob ':nocase';
-@a = csh_glob($pat); # At least glob-basic.t glob-case.t glob-global.t
-print "not " unless @a >= 3;
-print "ok 2\n";
-
-# This may fail on systems which are not case-PRESERVING
-import File::Glob ':case';
-@a = csh_glob($pat); # None should be uppercase
-print "not " unless @a == 0;
-print "ok 3\n";
-
-# Test the explicit use of the GLOB_NOCASE flag
-@a = bsd_glob($pat, GLOB_NOCASE);
-print "not " unless @a >= 3;
-print "ok 4\n";
-
-# Test Win32 backslash nastiness...
-if ($^O ne 'MSWin32') {
- print "ok 5\nok 6\nok 7\n";
-}
-else {
- @a = File::Glob::glob("lib\\g*.t");
- print "not " unless @a >= 3;
- print "ok 5\n";
- mkdir "[]", 0;
- @a = File::Glob::glob("\\[\\]", GLOB_QUOTE);
- rmdir "[]";
- print "# returned @a\nnot " unless @a == 1;
- print "ok 6\n";
- @a = bsd_glob("lib\\*", GLOB_QUOTE);
- print "not " if @a == 0;
- print "ok 7\n";
-}
diff --git a/contrib/perl5/t/lib/glob-global.t b/contrib/perl5/t/lib/glob-global.t
deleted file mode 100755
index 1d79032..0000000
--- a/contrib/perl5/t/lib/glob-global.t
+++ /dev/null
@@ -1,152 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($^O eq 'MacOS') {
- @INC = qw(: ::lib ::macos:lib);
- } else {
- @INC = '.';
- push @INC, '../lib';
- }
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bFile\/Glob\b/i) {
- print "1..0\n";
- exit 0;
- }
- print "1..10\n";
-}
-END {
- print "not ok 1\n" unless $loaded;
-}
-
-BEGIN {
- *CORE::GLOBAL::glob = sub { "Just another Perl hacker," };
-}
-
-BEGIN {
- if ("Just another Perl hacker," ne (<*>)[0]) {
- die <<EOMessage;
-Your version of perl ($]) doesn't seem to allow extensions to override
-the core glob operator.
-EOMessage
- }
-}
-
-use File::Glob ':globally';
-$loaded = 1;
-print "ok 1\n";
-
-$_ = $^O eq "MacOS" ? ":lib:*.t" : "lib/*.t";
-my @r = glob;
-print "not " if $_ ne ($^O eq "MacOS" ? ":lib:*.t" : "lib/*.t");
-print "ok 2\n";
-
-# we should have at least basic.t, global.t, taint.t
-print "# |@r|\nnot " if @r < 3;
-print "ok 3\n";
-
-# check if <*/*> works
-if ($^O eq "MacOS") {
- @r = <:*:*.t>;
-} else {
- @r = <*/*.t>;
-}
-# at least t/global.t t/basic.t, t/taint.t
-print "not " if @r < 3;
-print "ok 4\n";
-my $r = scalar @r;
-
-# check if scalar context works
-@r = ();
-if ($^O eq "MacOS") {
- while (defined($_ = <:*:*.t>)) {
- #print "# $_\n";
- push @r, $_;
- }
-} else {
- while (defined($_ = <*/*.t>)) {
- #print "# $_\n";
- push @r, $_;
- }
-}
-print "not " if @r != $r;
-print "ok 5\n";
-
-# check if list context works
-@r = ();
-if ($^O eq "MacOS") {
- for (<:*:*.t>) {
- #print "# $_\n";
- push @r, $_;
- }
-} else {
- for (<*/*.t>) {
- #print "# $_\n";
- push @r, $_;
- }
-}
-print "not " if @r != $r;
-print "ok 6\n";
-
-# test if implicit assign to $_ in while() works
-@r = ();
-if ($^O eq "MacOS") {
- while (<:*:*.t>) {
- #print "# $_\n";
- push @r, $_;
- }
-} else {
- while (<*/*.t>) {
- #print "# $_\n";
- push @r, $_;
- }
-}
-print "not " if @r != $r;
-print "ok 7\n";
-
-# test if explicit glob() gets assign magic too
-my @s = ();
-while (glob($^O eq 'MacOS' ? ':*:*.t' : '*/*.t')) {
- #print "# $_\n";
- push @s, $_;
-}
-print "not " if "@r" ne "@s";
-print "ok 8\n";
-
-# how about in a different package, like?
-package Foo;
-use File::Glob ':globally';
-@s = ();
-while (glob($^O eq 'MacOS' ? ':*:*.t' : '*/*.t')) {
- #print "# $_\n";
- push @s, $_;
-}
-print "not " if "@r" ne "@s";
-print "ok 9\n";
-
-# test if different glob ops maintain independent contexts
-@s = ();
-my $i = 0;
-if ($^O eq "MacOS") {
- while (<:*:*.t>) {
- #print "# $_ <";
- push @s, $_;
- while (<:bas*:*.t>) {
- #print " $_";
- $i++;
- }
- #print " >\n";
- }
-} else {
- while (<*/*.t>) {
- #print "# $_ <";
- push @s, $_;
- while (<bas*/*.t>) {
- #print " $_";
- $i++;
- }
- #print " >\n";
- }
-}
-print "not " if "@r" ne "@s" or not $i;
-print "ok 10\n";
diff --git a/contrib/perl5/t/lib/glob-taint.t b/contrib/perl5/t/lib/glob-taint.t
deleted file mode 100755
index 4c09903..0000000
--- a/contrib/perl5/t/lib/glob-taint.t
+++ /dev/null
@@ -1,31 +0,0 @@
-#!./perl -T
-
-BEGIN {
- chdir 't' if -d 't';
- if ($^O eq 'MacOS') {
- @INC = qw(: ::lib ::macos:lib);
- } else {
- @INC = '.';
- push @INC, '../lib';
- }
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bFile\/Glob\b/i) {
- print "1..0\n";
- exit 0;
- }
- print "1..2\n";
-}
-END {
- print "not ok 1\n" unless $loaded;
-}
-use File::Glob;
-$loaded = 1;
-print "ok 1\n";
-
-# all filenames should be tainted
-@a = File::Glob::bsd_glob("*");
-eval { $a = join("",@a), kill 0; 1 };
-unless ($@ =~ /Insecure dependency/) {
- print "not ";
-}
-print "ok 2\n";
diff --git a/contrib/perl5/t/lib/gol-basic.t b/contrib/perl5/t/lib/gol-basic.t
deleted file mode 100755
index c5d857d..0000000
--- a/contrib/perl5/t/lib/gol-basic.t
+++ /dev/null
@@ -1,26 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-use Getopt::Long qw(:config no_ignore_case);
-die("Getopt::Long version 2.24 required--this is only version ".
- $Getopt::Long::VERSION)
- unless $Getopt::Long::VERSION >= 2.24;
-
-print "1..9\n";
-
-@ARGV = qw(-Foo -baR --foo bar);
-undef $opt_baR;
-undef $opt_bar;
-print "ok 1\n" if GetOptions ("foo", "Foo=s");
-print ((defined $opt_foo) ? "" : "not ", "ok 2\n");
-print (($opt_foo == 1) ? "" : "not ", "ok 3\n");
-print ((defined $opt_Foo) ? "" : "not ", "ok 4\n");
-print (($opt_Foo eq "-baR") ? "" : "not ", "ok 5\n");
-print ((@ARGV == 1) ? "" : "not ", "ok 6\n");
-print (($ARGV[0] eq "bar") ? "" : "not ", "ok 7\n");
-print (!(defined $opt_baR) ? "" : "not ", "ok 8\n");
-print (!(defined $opt_bar) ? "" : "not ", "ok 9\n");
diff --git a/contrib/perl5/t/lib/gol-compat.t b/contrib/perl5/t/lib/gol-compat.t
deleted file mode 100755
index 0bbe386..0000000
--- a/contrib/perl5/t/lib/gol-compat.t
+++ /dev/null
@@ -1,25 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-require "newgetopt.pl";
-
-print "1..9\n";
-
-@ARGV = qw(-Foo -baR --foo bar);
-$newgetopt::ignorecase = 0;
-$newgetopt::ignorecase = 0;
-undef $opt_baR;
-undef $opt_bar;
-print "ok 1\n" if NGetOpt ("foo", "Foo=s");
-print ((defined $opt_foo) ? "" : "not ", "ok 2\n");
-print (($opt_foo == 1) ? "" : "not ", "ok 3\n");
-print ((defined $opt_Foo) ? "" : "not ", "ok 4\n");
-print (($opt_Foo eq "-baR") ? "" : "not ", "ok 5\n");
-print ((@ARGV == 1) ? "" : "not ", "ok 6\n");
-print (($ARGV[0] eq "bar") ? "" : "not ", "ok 7\n");
-print (!(defined $opt_baR) ? "" : "not ", "ok 8\n");
-print (!(defined $opt_bar) ? "" : "not ", "ok 9\n");
diff --git a/contrib/perl5/t/lib/gol-linkage.t b/contrib/perl5/t/lib/gol-linkage.t
deleted file mode 100755
index 3bd81a3..0000000
--- a/contrib/perl5/t/lib/gol-linkage.t
+++ /dev/null
@@ -1,37 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-use Getopt::Long;
-
-print "1..18\n";
-
-@ARGV = qw(-Foo -baR --foo bar);
-Getopt::Long::Configure ("no_ignore_case");
-%lnk = ();
-print "ok 1\n" if GetOptions (\%lnk, "foo", "Foo=s");
-print ((defined $lnk{foo}) ? "" : "not ", "ok 2\n");
-print (($lnk{foo} == 1) ? "" : "not ", "ok 3\n");
-print ((defined $lnk{Foo}) ? "" : "not ", "ok 4\n");
-print (($lnk{Foo} eq "-baR") ? "" : "not ", "ok 5\n");
-print ((@ARGV == 1) ? "" : "not ", "ok 6\n");
-print (($ARGV[0] eq "bar") ? "" : "not ", "ok 7\n");
-print (!(exists $lnk{baR}) ? "" : "not ", "ok 8\n");
-
-@ARGV = qw(-Foo -baR --foo bar);
-Getopt::Long::Configure ("default","no_ignore_case");
-%lnk = ();
-my $foo;
-print "ok 9\n" if GetOptions (\%lnk, "foo" => \$foo, "Foo=s");
-print ((defined $foo) ? "" : "not ", "ok 10\n");
-print (($foo == 1) ? "" : "not ", "ok 11\n");
-print ((defined $lnk{Foo}) ? "" : "not ", "ok 12\n");
-print (($lnk{Foo} eq "-baR") ? "" : "not ", "ok 13\n");
-print ((@ARGV == 1) ? "" : "not ", "ok 14\n");
-print (($ARGV[0] eq "bar") ? "" : "not ", "ok 15\n");
-print (!(exists $lnk{foo}) ? "" : "not ", "ok 16\n");
-print (!(exists $lnk{baR}) ? "" : "not ", "ok 17\n");
-print (!(exists $lnk{bar}) ? "" : "not ", "ok 18\n");
diff --git a/contrib/perl5/t/lib/gol-oo.t b/contrib/perl5/t/lib/gol-oo.t
deleted file mode 100755
index 98f3eaa..0000000
--- a/contrib/perl5/t/lib/gol-oo.t
+++ /dev/null
@@ -1,26 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir('t') if -d 't';
- @INC = '../lib';
-}
-
-use Getopt::Long;
-die("Getopt::Long version 2.24 required--this is only version ".
- $Getopt::Long::VERSION)
- unless $Getopt::Long::VERSION >= 2.24;
-print "1..9\n";
-
-@ARGV = qw(-Foo -baR --foo bar);
-my $p = new Getopt::Long::Parser (config => ["no_ignore_case"]);
-undef $opt_baR;
-undef $opt_bar;
-print "ok 1\n" if $p->getoptions ("foo", "Foo=s");
-print ((defined $opt_foo) ? "" : "not ", "ok 2\n");
-print (($opt_foo == 1) ? "" : "not ", "ok 3\n");
-print ((defined $opt_Foo) ? "" : "not ", "ok 4\n");
-print (($opt_Foo eq "-baR") ? "" : "not ", "ok 5\n");
-print ((@ARGV == 1) ? "" : "not ", "ok 6\n");
-print (($ARGV[0] eq "bar") ? "" : "not ", "ok 7\n");
-print (!(defined $opt_baR) ? "" : "not ", "ok 8\n");
-print (!(defined $opt_bar) ? "" : "not ", "ok 9\n");
diff --git a/contrib/perl5/t/lib/h2ph.h b/contrib/perl5/t/lib/h2ph.h
deleted file mode 100644
index cddf0a7..0000000
--- a/contrib/perl5/t/lib/h2ph.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Test header file for h2ph
- *
- * Try to test as many constructs as possible
- * For example, the multi-line comment :)
- */
-
-/* And here's a single line comment :) */
-
-/* Test #define with no indenting, over multiple lines */
-#define SQUARE(x) \
-((x)*(x))
-
-/* Test #ifndef and parameter interpretation*/
-#ifndef ERROR
-#define ERROR(x) fprintf(stderr, "%s\n", x[2][3][0])
-#endif /* ERROR */
-
-#ifndef _H2PH_H_
-#define _H2PH_H_
-
-/* #ident - doesn't really do anything, but I think it always gets included anyway */
-#ident "$Revision h2ph.h,v 1.0 98/05/04 20:42:14 billy $"
-
-/* Test #undef */
-#undef MAX
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-
-/* Test #ifdef */
-#ifdef __SOME_UNIMPORTANT_PROPERTY
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-#endif /* __SOME_UNIMPORTANT_PROPERTY */
-
-/*
- * Test #if, #elif, #else, #endif, #warn and #error, and `!'
- * Also test whitespace between the `#' and the command
- */
-#if !(defined __SOMETHING_MORE_IMPORTANT)
-# warn Be careful...
-#elif !(defined __SOMETHING_REALLY_REALLY_IMPORTANT)
-# error Nup, can't go on /* ' /* stupid font-lock-mode */
-#else /* defined __SOMETHING_MORE_IMPORTANT && defined __SOMETHING_REALLY_REALLY_IMPORTANT */
-# define EVERYTHING_IS_OK
-#endif
-
-/* Test && and || */
-#undef WHATEVER
-#if (!((defined __SOMETHING_TRIVIAL && defined __SOMETHING_LESS_SO)) \
- || defined __SOMETHING_OVERPOWERING)
-# define WHATEVER 6
-#elif !(defined __SOMETHING_TRIVIAL) /* defined __SOMETHING_LESS_SO */
-# define WHATEVER 7
-#elif !(defined __SOMETHING_LESS_SO) /* defined __SOMETHING_TRIVIAL */
-# define WHATEVER 8
-#else /* defined __SOMETHING_TRIVIAL && defined __SOMETHING_LESS_SO */
-# define WHATEVER 1000
-#endif
-
-/*
- * Test #include, #import and #include_next
- * #include_next is difficult to test, it really depends on the actual
- * circumstances - for example, `#include_next <limits.h>' on a Linux system
- * with `use lib qw(/opt/perl5/lib/site_perl/i586-linux/linux);' or whatever
- * your equivalent is...
- */
-#include <sys/socket.h>
-#import "sys/ioctl.h"
-#include_next <sys/fcntl.h>
-
-/* typedefs should be ignored */
-typedef struct a_struct {
- int typedefs_should;
- char be_ignored;
- long as_well;
-} a_typedef;
-
-/*
- * however, typedefs of enums and just plain enums should end up being treated
- * like a bunch of #defines...
- */
-
-typedef enum _days_of_week { sun, mon, tue, wed, thu, fri, sat, Sun=0, Mon,
- Tue, Wed, Thu, Fri, Sat } days_of_week;
-
-#endif /* _H2PH_H_ */
diff --git a/contrib/perl5/t/lib/h2ph.pht b/contrib/perl5/t/lib/h2ph.pht
deleted file mode 100644
index e5b2932..0000000
--- a/contrib/perl5/t/lib/h2ph.pht
+++ /dev/null
@@ -1,71 +0,0 @@
-require '_h2ph_pre.ph';
-
-unless(defined(&SQUARE)) {
- sub SQUARE {
- local($x) = @_;
- eval q((($x)*($x)));
- }
-}
-unless(defined(&ERROR)) {
- eval 'sub ERROR {
- local($x) = @_;
- eval q( &fprintf( &stderr, \\"%s\\\\n\\", $x->[2][3][0]));
- }' unless defined(&ERROR);
-}
-unless(defined(&_H2PH_H_)) {
- eval 'sub _H2PH_H_ () {1;}' unless defined(&_H2PH_H_);
- # "$Revision h2ph.h,v 1.0 98/05/04 20:42:14 billy $"
- undef(&MAX) if defined(&MAX);
- eval 'sub MAX {
- local($a,$b) = @_;
- eval q((($a) > ($b) ? ($a) : ($b)));
- }' unless defined(&MAX);
- if(defined(&__SOME_UNIMPORTANT_PROPERTY)) {
- eval 'sub MIN {
- local($a,$b) = @_;
- eval q((($a) < ($b) ? ($a) : ($b)));
- }' unless defined(&MIN);
- }
- if(!(defined (defined(&__SOMETHING_MORE_IMPORTANT) ? &__SOMETHING_MORE_IMPORTANT : 0))) {
- }
- elsif(!(defined (defined(&__SOMETHING_REALLY_REALLY_IMPORTANT) ? &__SOMETHING_REALLY_REALLY_IMPORTANT : 0))) {
- die("Nup\,\ can\'t\ go\ on\ ");
- } else {
- eval 'sub EVERYTHING_IS_OK () {1;}' unless defined(&EVERYTHING_IS_OK);
- }
- undef(&WHATEVER) if defined(&WHATEVER);
- if((!((defined (defined(&__SOMETHING_TRIVIAL) ? &__SOMETHING_TRIVIAL : 0) && defined (defined(&__SOMETHING_LESS_SO) ? &__SOMETHING_LESS_SO : 0))) || defined (defined(&__SOMETHING_OVERPOWERING) ? &__SOMETHING_OVERPOWERING : 0))) {
- eval 'sub WHATEVER () {6;}' unless defined(&WHATEVER);
- }
- elsif(!(defined (defined(&__SOMETHING_TRIVIAL) ? &__SOMETHING_TRIVIAL : 0)) ) {
- eval 'sub WHATEVER () {7;}' unless defined(&WHATEVER);
- }
- elsif(!(defined (defined(&__SOMETHING_LESS_SO) ? &__SOMETHING_LESS_SO : 0)) ) {
- eval 'sub WHATEVER () {8;}' unless defined(&WHATEVER);
- } else {
- eval 'sub WHATEVER () {1000;}' unless defined(&WHATEVER);
- }
- require 'sys/socket.ph';
- require 'sys/ioctl.ph';
- eval {
- my(%INCD) = map { $INC{$_} => 1 } (grep { $_ eq "sys/fcntl.ph" } keys(%INC));
- my(@REM) = map { "$_/sys/fcntl.ph" } (grep { not exists($INCD{"$_/sys/fcntl.ph"})and -f "$_/sys/fcntl.ph" } @INC);
- require "$REM[0]" if @REM;
- };
- warn($@) if $@;
- eval("sub sun () { 0; }") unless defined(&sun);
- eval("sub mon () { 1; }") unless defined(&mon);
- eval("sub tue () { 2; }") unless defined(&tue);
- eval("sub wed () { 3; }") unless defined(&wed);
- eval("sub thu () { 4; }") unless defined(&thu);
- eval("sub fri () { 5; }") unless defined(&fri);
- eval("sub sat () { 6; }") unless defined(&sat);
- eval("sub Sun () { 0; }") unless defined(&Sun);
- eval("sub Mon () { 1; }") unless defined(&Mon);
- eval("sub Tue () { 2; }") unless defined(&Tue);
- eval("sub Wed () { 3; }") unless defined(&Wed);
- eval("sub Thu () { 4; }") unless defined(&Thu);
- eval("sub Fri () { 5; }") unless defined(&Fri);
- eval("sub Sat () { 6; }") unless defined(&Sat);
-}
-1;
diff --git a/contrib/perl5/t/lib/h2ph.t b/contrib/perl5/t/lib/h2ph.t
deleted file mode 100755
index 15dc2b5..0000000
--- a/contrib/perl5/t/lib/h2ph.t
+++ /dev/null
@@ -1,35 +0,0 @@
-#!./perl
-
-# quickie tests to see if h2ph actually runs and does more or less what is
-# expected
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..2\n";
-
-# quickly compare two text files
-sub txt_compare {
- local ($/, $A, $B);
- for (($A,$B) = @_) { open(_,"<$_") ? $_ = <_> : die "$_ : $!"; close _ }
- $A cmp $B;
-}
-
-unless(-e '../utils/h2ph') {
- print("ok 1\nok 2\n");
- # i'll probably get in trouble for this :)
-} else {
- # does it run?
- $ok = system("./perl -I../lib ../utils/h2ph -d. -Q lib/h2ph.h");
- print(($ok == 0 ? "" : "not "), "ok 1\n");
-
- # does it work? well, does it do what we expect? :-)
- $ok = txt_compare("lib/h2ph.ph", "lib/h2ph.pht");
- print(($ok == 0 ? "" : "not "), "ok 2\n");
-
- # cleanup - should this be in an END block?
- unlink("lib/h2ph.ph");
- unlink("_h2ph_pre.ph");
-}
diff --git a/contrib/perl5/t/lib/hostname.t b/contrib/perl5/t/lib/hostname.t
deleted file mode 100755
index 85a04cd..0000000
--- a/contrib/perl5/t/lib/hostname.t
+++ /dev/null
@@ -1,25 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bSys\/Hostname\b/) {
- print "1..0 # Skip: Sys::Hostname was not built\n";
- exit 0;
- }
-}
-
-use Sys::Hostname;
-
-eval {
- $host = hostname;
-};
-
-if ($@) {
- print "1..0\n" if $@ =~ /Cannot get host name/;
-} else {
- print "1..1\n";
- print "# \$host = `$host'\n";
- print "ok 1\n";
-}
diff --git a/contrib/perl5/t/lib/io_const.t b/contrib/perl5/t/lib/io_const.t
deleted file mode 100755
index db1a322..0000000
--- a/contrib/perl5/t/lib/io_const.t
+++ /dev/null
@@ -1,33 +0,0 @@
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
- }
-}
-
-use IO::Handle;
-
-print "1..6\n";
-my $i = 1;
-foreach (qw(SEEK_SET SEEK_CUR SEEK_END _IOFBF _IOLBF _IONBF)) {
- my $d1 = defined(&{"IO::Handle::" . $_}) ? 1 : 0;
- my $v1 = $d1 ? &{"IO::Handle::" . $_}() : undef;
- my $v2 = IO::Handle::constant($_);
- my $d2 = defined($v2);
-
- print "not "
- if($d1 != $d2 || ($d1 && ($v1 != $v2)));
- print "ok ",$i++,"\n";
-}
diff --git a/contrib/perl5/t/lib/io_dir.t b/contrib/perl5/t/lib/io_dir.t
deleted file mode 100755
index 3689871..0000000
--- a/contrib/perl5/t/lib/io_dir.t
+++ /dev/null
@@ -1,66 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
- require Config; import Config;
- if ($] < 5.00326 || not $Config{'d_readdir'}) {
- print "1..0\n";
- exit 0;
- }
-}
-
-select(STDERR); $| = 1;
-select(STDOUT); $| = 1;
-
-use IO::Dir qw(DIR_UNLINK);
-
-print "1..10\n";
-
-$dot = new IO::Dir ".";
-print defined($dot) ? "ok" : "not ok", " 1\n";
-
-@a = sort <*>;
-do { $first = $dot->read } while defined($first) && $first =~ /^\./;
-print +(grep { $_ eq $first } @a) ? "ok" : "not ok", " 2\n";
-
-@b = sort($first, (grep {/^[^.]/} $dot->read));
-print +(join("\0", @a) eq join("\0", @b)) ? "ok" : "not ok", " 3\n";
-
-$dot->rewind;
-@c = sort grep {/^[^.]/} $dot->read;
-print +(join("\0", @b) eq join("\0", @c)) ? "ok" : "not ok", " 4\n";
-
-$dot->close;
-$dot->rewind;
-print defined($dot->read) ? "not ok" : "ok", " 5\n";
-
-open(FH,'>X') || die "Can't create x";
-print FH "X";
-close(FH);
-
-tie %dir, IO::Dir, ".";
-my @files = keys %dir;
-
-# I hope we do not have an empty dir :-)
-print @files ? "ok" : "not ok", " 6\n";
-
-my $stat = $dir{'X'};
-print defined($stat) && UNIVERSAL::isa($stat,'File::stat') && $stat->size == 1
- ? "ok" : "not ok", " 7\n";
-
-delete $dir{'X'};
-
-print -f 'X' ? "ok" : "not ok", " 8\n";
-
-tie %dirx, IO::Dir, ".", DIR_UNLINK;
-
-my $statx = $dirx{'X'};
-print defined($statx) && UNIVERSAL::isa($statx,'File::stat') && $statx->size == 1
- ? "ok" : "not ok", " 9\n";
-
-delete $dirx{'X'};
-
-print -f 'X' ? "not ok" : "ok", " 10\n";
diff --git a/contrib/perl5/t/lib/io_dup.t b/contrib/perl5/t/lib/io_dup.t
deleted file mode 100755
index 0f17264..0000000
--- a/contrib/perl5/t/lib/io_dup.t
+++ /dev/null
@@ -1,61 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
- }
-}
-
-use IO::Handle;
-use IO::File;
-
-select(STDERR); $| = 1;
-select(STDOUT); $| = 1;
-
-print "1..6\n";
-
-print "ok 1\n";
-
-$dupout = IO::Handle->new->fdopen( \*STDOUT ,"w");
-$duperr = IO::Handle->new->fdopen( \*STDERR ,"w");
-
-$stdout = \*STDOUT; bless $stdout, "IO::File"; # "IO::Handle";
-$stderr = \*STDERR; bless $stderr, "IO::Handle";
-
-$stdout->open( "Io.dup","w") || die "Can't open stdout";
-$stderr->fdopen($stdout,"w");
-
-print $stdout "ok 2\n";
-print $stderr "ok 3\n";
-if ($^O eq 'MSWin32') {
- print `echo ok 4`;
- print `echo ok 5 1>&2`; # does this *really* work?
-}
-else {
- system 'echo ok 4';
- system 'echo ok 5 1>&2';
-}
-
-$stderr->close;
-$stdout->close;
-
-$stdout->fdopen($dupout,"w");
-$stderr->fdopen($duperr,"w");
-
-if ($^O eq 'MSWin32') { print `type Io.dup` }
-else { system 'cat Io.dup' }
-unlink 'Io.dup';
-
-print STDOUT "ok 6\n";
diff --git a/contrib/perl5/t/lib/io_linenum.t b/contrib/perl5/t/lib/io_linenum.t
deleted file mode 100755
index cf55c98..0000000
--- a/contrib/perl5/t/lib/io_linenum.t
+++ /dev/null
@@ -1,80 +0,0 @@
-#!./perl
-
-# test added 29th April 1999 by Paul Johnson (pjcj@transeda.com)
-# updated 28th May 1999 by Paul Johnson
-
-my $File;
-
-BEGIN
-{
- $File = __FILE__;
- if (-d 't')
- {
- chdir 't';
- $File =~ s/^t\W+//; # Remove first directory
- }
- @INC = '../lib';
- require strict; import strict;
-}
-
-use Test;
-
-BEGIN { plan tests => 12 }
-
-use IO::File;
-
-sub lineno
-{
- my ($f) = @_;
- my $l;
- $l .= "$. ";
- $l .= $f->input_line_number;
- $l .= " $."; # check $. before and after input_line_number
- $l;
-}
-
-my $t;
-
-open (F, $File) or die $!;
-my $io = IO::File->new($File) or die $!;
-
-<F> for (1 .. 10);
-ok(lineno($io), "10 0 10");
-
-$io->getline for (1 .. 5);
-ok(lineno($io), "5 5 5");
-
-<F>;
-ok(lineno($io), "11 5 11");
-
-$io->getline;
-ok(lineno($io), "6 6 6");
-
-$t = tell F; # tell F; provokes a warning
-ok(lineno($io), "11 6 11");
-
-<F>;
-ok(lineno($io), "12 6 12");
-
-select F;
-ok(lineno($io), "12 6 12");
-
-<F> for (1 .. 10);
-ok(lineno($io), "22 6 22");
-
-$io->getline for (1 .. 5);
-ok(lineno($io), "11 11 11");
-
-$t = tell F;
-# We used to have problems here before local $. worked.
-# input_line_number() used to use select and tell. When we did the
-# same, that mechanism broke. It should work now.
-ok(lineno($io), "22 11 22");
-
-{
- local $.;
- $io->getline for (1 .. 5);
- ok(lineno($io), "16 16 16");
-}
-
-ok(lineno($io), "22 16 22");
diff --git a/contrib/perl5/t/lib/io_multihomed.t b/contrib/perl5/t/lib/io_multihomed.t
deleted file mode 100755
index 55030b5..0000000
--- a/contrib/perl5/t/lib/io_multihomed.t
+++ /dev/null
@@ -1,124 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- my $reason;
- if (! $Config{'d_fork'}) {
- $reason = 'no fork';
- }
- elsif ($Config{'extensions'} !~ /\bSocket\b/) {
- $reason = 'Socket extension unavailable';
- }
- elsif ($Config{'extensions'} !~ /\bIO\b/) {
- $reason = 'IO extension unavailable';
- }
- if ($reason) {
- print "1..0 # Skip: $reason\n";
- exit 0;
- }
- }
-}
-
-$| = 1;
-
-print "1..8\n";
-
-
-package Multi;
-require IO::Socket::INET;
-@ISA=qw(IO::Socket::INET);
-
-use Socket qw(inet_aton inet_ntoa unpack_sockaddr_in);
-
-sub _get_addr
-{
- my($sock,$addr_str, $multi) = @_;
- #print "_get_addr($sock, $addr_str, $multi)\n";
-
- print "not " unless $multi;
- print "ok 2\n";
-
- (
- # private IP-addresses which I hope does not work anywhere :-)
- inet_aton("10.250.230.10"),
- inet_aton("10.250.230.12"),
- inet_aton("127.0.0.1") # loopback
- )
-}
-
-sub connect
-{
- my $self = shift;
- if (@_ == 1) {
- my($port, $addr) = unpack_sockaddr_in($_[0]);
- $addr = inet_ntoa($addr);
- #print "connect($self, $port, $addr)\n";
- if($addr eq "10.250.230.10") {
- print "ok 3\n";
- return 0;
- }
- if($addr eq "10.250.230.12") {
- print "ok 4\n";
- return 0;
- }
- }
- $self->SUPER::connect(@_);
-}
-
-
-
-package main;
-
-use IO::Socket;
-
-$listen = IO::Socket::INET->new(Listen => 2,
- Proto => 'tcp',
- Timeout => 5,
- ) or die "$!";
-
-print "ok 1\n";
-
-$port = $listen->sockport;
-
-if($pid = fork()) {
-
- $sock = $listen->accept() or die "$!";
- print "ok 5\n";
-
- print $sock->getline();
- print $sock "ok 7\n";
-
- waitpid($pid,0);
-
- $sock->close;
-
- print "ok 8\n";
-
-} elsif(defined $pid) {
-
- $sock = Multi->new(PeerPort => $port,
- Proto => 'tcp',
- PeerAddr => 'localhost',
- MultiHomed => 1,
- Timeout => 1,
- ) or die "$!";
-
- print $sock "ok 6\n";
- sleep(1); # race condition
- print $sock->getline();
-
- $sock->close;
-
- exit;
-} else {
- die;
-}
diff --git a/contrib/perl5/t/lib/io_pipe.t b/contrib/perl5/t/lib/io_pipe.t
deleted file mode 100755
index ae18224..0000000
--- a/contrib/perl5/t/lib/io_pipe.t
+++ /dev/null
@@ -1,123 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- my $reason;
- if (! $Config{'d_fork'}) {
- $reason = 'no fork';
- }
- elsif ($Config{'extensions'} !~ /\bIO\b/) {
- $reason = 'IO extension unavailable';
- }
- undef $reason if $^O eq 'VMS';
- if ($reason) {
- print "1..0 # Skip: $reason\n";
- exit 0;
- }
- }
-}
-
-use IO::Pipe;
-
-my $perl = './perl';
-
-$| = 1;
-print "1..10\n";
-
-$pipe = new IO::Pipe->reader($perl, '-e', 'print "not ok 1\n"');
-while (<$pipe>) {
- s/^not //;
- print;
-}
-$pipe->close or print "# \$!=$!\nnot ";
-print "ok 2\n";
-
-$cmd = 'BEGIN{$SIG{ALRM} = sub {print "not ok 4\n"; exit}; alarm 10} s/not //';
-$pipe = new IO::Pipe->writer($perl, '-pe', $cmd);
-print $pipe "not ok 3\n" ;
-$pipe->close or print "# \$!=$!\nnot ";
-print "ok 4\n";
-
-# Check if can fork with dynamic extensions (bug in CRT):
-if ($^O eq 'os2' and
- system "$^X -I../lib -MOpcode -e 'defined fork or die' > /dev/null 2>&1") {
- print "ok $_ # skipped: broken fork\n" for 5..10;
- exit 0;
-}
-
-$pipe = new IO::Pipe;
-
-$pid = fork();
-
-if($pid)
- {
- $pipe->writer;
- print $pipe "Xk 5\n";
- print $pipe "oY 6\n";
- $pipe->close;
- wait;
- }
-elsif(defined $pid)
- {
- $pipe->reader;
- $stdin = bless \*STDIN, "IO::Handle";
- $stdin->fdopen($pipe,"r");
- exec 'tr', 'YX', 'ko';
- }
-else
- {
- die "# error = $!";
- }
-
-$pipe = new IO::Pipe;
-$pid = fork();
-
-if($pid)
- {
- $pipe->reader;
- while(<$pipe>) {
- s/^not //;
- print;
- }
- $pipe->close;
- wait;
- }
-elsif(defined $pid)
- {
- $pipe->writer;
-
- $stdout = bless \*STDOUT, "IO::Handle";
- $stdout->fdopen($pipe,"w");
- print STDOUT "not ok 7\n";
- exec 'echo', 'not ok 8';
- }
-else
- {
- die;
- }
-
-$pipe = new IO::Pipe;
-$pipe->writer;
-
-$SIG{'PIPE'} = 'broken_pipe';
-
-sub broken_pipe {
- print "ok 9\n";
-}
-
-print $pipe "not ok 9\n";
-$pipe->close;
-
-sleep 1;
-
-print "ok 10\n";
-
diff --git a/contrib/perl5/t/lib/io_poll.t b/contrib/perl5/t/lib/io_poll.t
deleted file mode 100755
index d391566..0000000
--- a/contrib/perl5/t/lib/io_poll.t
+++ /dev/null
@@ -1,82 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-if ($^O eq 'mpeix') {
- print "1..0 # Skip: broken on MPE/iX\n";
- exit 0;
-}
-
-select(STDERR); $| = 1;
-select(STDOUT); $| = 1;
-
-print "1..9\n";
-
-use IO::Handle;
-use IO::Poll qw(/POLL/);
-
-my $poll = new IO::Poll;
-
-my $stdout = \*STDOUT;
-my $dupout = IO::Handle->new_from_fd(fileno($stdout),"w");
-
-$poll->mask($stdout => POLLOUT);
-
-print "not "
- unless $poll->mask($stdout) == POLLOUT;
-print "ok 1\n";
-
-$poll->mask($dupout => POLLPRI);
-
-print "not "
- unless $poll->mask($dupout) == POLLPRI;
-print "ok 2\n";
-
-$poll->poll(0.1);
-
-if ($^O eq 'MSWin32') {
-print "ok 3 # skipped, doesn't work on non-socket fds\n";
-print "ok 4 # skipped, doesn't work on non-socket fds\n";
-}
-else {
-print "not "
- unless $poll->events($stdout) == POLLOUT;
-print "ok 3\n";
-
-print "not "
- if $poll->events($dupout);
-print "ok 4\n";
-}
-
-my @h = $poll->handles;
-print "not "
- unless @h == 2;
-print "ok 5\n";
-
-$poll->remove($stdout);
-
-@h = $poll->handles;
-
-print "not "
- unless @h == 1;
-print "ok 6\n";
-
-print "not "
- if $poll->mask($stdout);
-print "ok 7\n";
-
-$poll->poll(0.1);
-
-print "not "
- if $poll->events($stdout);
-print "ok 8\n";
-
-$poll->remove($dupout);
-print "not "
- if $poll->handles;
-print "ok 9\n";
diff --git a/contrib/perl5/t/lib/io_sel.t b/contrib/perl5/t/lib/io_sel.t
deleted file mode 100755
index 5d1dce3..0000000
--- a/contrib/perl5/t/lib/io_sel.t
+++ /dev/null
@@ -1,132 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-select(STDERR); $| = 1;
-select(STDOUT); $| = 1;
-
-print "1..23\n";
-
-use IO::Select 1.09;
-
-my $sel = new IO::Select(\*STDIN);
-$sel->add(4, 5) == 2 or print "not ";
-print "ok 1\n";
-
-$sel->add([\*STDOUT, 'foo']) == 1 or print "not ";
-print "ok 2\n";
-
-@handles = $sel->handles;
-print "not " unless $sel->count == 4 && @handles == 4;
-print "ok 3\n";
-#print $sel->as_string, "\n";
-
-$sel->remove(\*STDIN) == 1 or print "not ";
-print "ok 4\n",
-;
-$sel->remove(\*STDIN, 5, 6) == 1 # two of there are not present
- or print "not ";
-print "ok 5\n";
-
-print "not " unless $sel->count == 2;
-print "ok 6\n";
-#print $sel->as_string, "\n";
-
-$sel->remove(1, 4);
-print "not " unless $sel->count == 0 && !defined($sel->bits);
-print "ok 7\n";
-
-$sel = new IO::Select;
-print "not " unless $sel->count == 0 && !defined($sel->bits);
-print "ok 8\n";
-
-$sel->remove([\*STDOUT, 5]);
-print "not " unless $sel->count == 0 && !defined($sel->bits);
-print "ok 9\n";
-
-if ($^O eq 'MSWin32' || $^O eq 'dos') { # 4-arg select is only valid on sockets
- print "# skipping tests 10..15\n";
- for (10 .. 15) { print "ok $_\n" }
- $sel->add(\*STDOUT); # update
- goto POST_SOCKET;
-}
-
-@a = $sel->can_read(); # should return imediately
-print "not " unless @a == 0;
-print "ok 10\n";
-
-# we assume that we can write to STDOUT :-)
-$sel->add([\*STDOUT, "ok 12\n"]);
-
-@a = $sel->can_write;
-print "not " unless @a == 1;
-print "ok 11\n";
-
-my($fd, $msg) = @{shift @a};
-print $fd $msg;
-
-$sel->add(\*STDOUT); # update
-
-@a = IO::Select::select(undef, $sel, undef, 1);
-print "not " unless @a == 3;
-print "ok 13\n";
-
-($r, $w, $e) = @a;
-
-print "not " unless @$r == 0 && @$w == 1 && @$e == 0;
-print "ok 14\n";
-
-$fd = $w->[0];
-print $fd "ok 15\n";
-
-POST_SOCKET:
-# Test new exists() method
-$sel->exists(\*STDIN) and print "not ";
-print "ok 16\n";
-
-($sel->exists(0) || $sel->exists([\*STDERR])) and print "not ";
-print "ok 17\n";
-
-$fd = $sel->exists(\*STDOUT);
-if ($fd) {
- print $fd "ok 18\n";
-} else {
- print "not ok 18\n";
-}
-
-$fd = $sel->exists([1, 'foo']);
-if ($fd) {
- print $fd "ok 19\n";
-} else {
- print "not ok 19\n";
-}
-
-# Try self clearing
-$sel->add(5,6,7,8,9,10);
-print "not " unless $sel->count == 7;
-print "ok 20\n";
-
-$sel->remove($sel->handles);
-print "not " unless $sel->count == 0 && !defined($sel->bits);
-print "ok 21\n";
-
-# check warnings
-$SIG{__WARN__} = sub {
- ++ $w
- if $_[0] =~ /^Call to depreciated method 'has_error', use 'has_exception'/
- } ;
-$w = 0 ;
-IO::Select::has_error();
-print "not " unless $w == 0 ;
-$w = 0 ;
-print "ok 22\n" ;
-use warnings 'IO::Select' ;
-IO::Select::has_error();
-print "not " unless $w == 1 ;
-$w = 0 ;
-print "ok 23\n" ;
diff --git a/contrib/perl5/t/lib/io_sock.t b/contrib/perl5/t/lib/io_sock.t
deleted file mode 100755
index 45c16c2..0000000
--- a/contrib/perl5/t/lib/io_sock.t
+++ /dev/null
@@ -1,203 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if (-d "lib" && -f "TEST") {
- my $reason;
- if (! $Config{'d_fork'}) {
- $reason = 'no fork';
- }
- elsif ($Config{'extensions'} !~ /\bSocket\b/) {
- $reason = 'Socket extension unavailable';
- }
- elsif ($Config{'extensions'} !~ /\bIO\b/) {
- $reason = 'IO extension unavailable';
- }
- undef $reason if $^O eq 'VMS' and $Config{d_socket};
- if ($reason) {
- print "1..0 # Skip: $reason\n";
- exit 0;
- }
- }
-}
-
-$| = 1;
-print "1..14\n";
-
-use IO::Socket;
-
-$listen = IO::Socket::INET->new(Listen => 2,
- Proto => 'tcp',
- # some systems seem to need as much as 10,
- # so be generous with the timeout
- Timeout => 15,
- ) or die "$!";
-
-print "ok 1\n";
-
-# Check if can fork with dynamic extensions (bug in CRT):
-if ($^O eq 'os2' and
- system "$^X -I../lib -MOpcode -e 'defined fork or die' > /dev/null 2>&1") {
- print "ok $_ # skipped: broken fork\n" for 2..5;
- exit 0;
-}
-
-$port = $listen->sockport;
-
-if($pid = fork()) {
-
- $sock = $listen->accept() or die "accept failed: $!";
- print "ok 2\n";
-
- $sock->autoflush(1);
- print $sock->getline();
-
- print $sock "ok 4\n";
-
- $sock->close;
-
- waitpid($pid,0);
-
- print "ok 5\n";
-
-} elsif(defined $pid) {
-
- $sock = IO::Socket::INET->new(PeerPort => $port,
- Proto => 'tcp',
- PeerAddr => 'localhost'
- )
- || IO::Socket::INET->new(PeerPort => $port,
- Proto => 'tcp',
- PeerAddr => '127.0.0.1'
- )
- or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)";
-
- $sock->autoflush(1);
-
- print $sock "ok 3\n";
-
- print $sock->getline();
-
- $sock->close;
-
- exit;
-} else {
- die;
-}
-
-# Test various other ways to create INET sockets that should
-# also work.
-$listen = IO::Socket::INET->new(Listen => '', Timeout => 15) or die "$!";
-$port = $listen->sockport;
-
-if($pid = fork()) {
- SERVER_LOOP:
- while (1) {
- last SERVER_LOOP unless $sock = $listen->accept;
- while (<$sock>) {
- last SERVER_LOOP if /^quit/;
- last if /^done/;
- print;
- }
- $sock = undef;
- }
- $listen->close;
-} elsif (defined $pid) {
- # child, try various ways to connect
- $sock = IO::Socket::INET->new("localhost:$port")
- || IO::Socket::INET->new("127.0.0.1:$port");
- if ($sock) {
- print "not " unless $sock->connected;
- print "ok 6\n";
- $sock->print("ok 7\n");
- sleep(1);
- print "ok 8\n";
- $sock->print("ok 9\n");
- $sock->print("done\n");
- $sock->close;
- }
- else {
- print "# $@\n";
- print "not ok 6\n";
- print "not ok 7\n";
- print "not ok 8\n";
- print "not ok 9\n";
- }
-
- # some machines seem to suffer from a race condition here
- sleep(2);
-
- $sock = IO::Socket::INET->new("127.0.0.1:$port");
- if ($sock) {
- $sock->print("ok 10\n");
- $sock->print("done\n");
- $sock->close;
- }
- else {
- print "# $@\n";
- print "not ok 10\n";
- }
-
- # some machines seem to suffer from a race condition here
- sleep(1);
-
- $sock = IO::Socket->new(Domain => AF_INET,
- PeerAddr => "localhost:$port")
- || IO::Socket->new(Domain => AF_INET,
- PeerAddr => "127.0.0.1:$port");
- if ($sock) {
- $sock->print("ok 11\n");
- $sock->print("quit\n");
- }
- $sock = undef;
- sleep(1);
- exit;
-} else {
- die;
-}
-
-# Then test UDP sockets
-$server = IO::Socket->new(Domain => AF_INET,
- Proto => 'udp',
- LocalAddr => 'localhost')
- || IO::Socket->new(Domain => AF_INET,
- Proto => 'udp',
- LocalAddr => '127.0.0.1');
-$port = $server->sockport;
-
-if ($^O eq 'mpeix') {
- print("ok 12 # skipped\n")
-} else {
- if ($pid = fork()) {
- my $buf;
- $server->recv($buf, 100);
- print $buf;
- } elsif (defined($pid)) {
- #child
- $sock = IO::Socket::INET->new(Proto => 'udp',
- PeerAddr => "localhost:$port")
- || IO::Socket::INET->new(Proto => 'udp',
- PeerAddr => "127.0.0.1:$port");
- $sock->send("ok 12\n");
- sleep(1);
- $sock->send("ok 12\n"); # send another one to be sure
- exit;
- } else {
- die;
- }
-}
-
-print "not " unless $server->blocking;
-print "ok 13\n";
-
-$server->blocking(0);
-print "not " if $server->blocking;
-print "ok 14\n";
diff --git a/contrib/perl5/t/lib/io_taint.t b/contrib/perl5/t/lib/io_taint.t
deleted file mode 100755
index 19afa2f..0000000
--- a/contrib/perl5/t/lib/io_taint.t
+++ /dev/null
@@ -1,48 +0,0 @@
-#!./perl -T
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
- }
-}
-
-END { unlink "./__taint__$$" }
-
-print "1..3\n";
-use IO::File;
-$x = new IO::File "> ./__taint__$$" || die("Cannot open ./__taint__$$\n");
-print $x "$$\n";
-$x->close;
-
-$x = new IO::File "< ./__taint__$$" || die("Cannot open ./__taint__$$\n");
-chop($unsafe = <$x>);
-eval { kill 0 * $unsafe };
-print "not " if $^O ne 'MSWin32' and ($@ !~ /^Insecure/o);
-print "ok 1\n";
-$x->close;
-
-# We could have just done a seek on $x, but technically we haven't tested
-# seek yet...
-$x = new IO::File "< ./__taint__$$" || die("Cannot open ./__taint__$$\n");
-$x->untaint;
-print "not " if ($?);
-print "ok 2\n"; # Calling the method worked
-chop($unsafe = <$x>);
-eval { kill 0 * $unsafe };
-print "not " if ($@ =~ /^Insecure/o);
-print "ok 3\n"; # No Insecure message from using the data
-$x->close;
-
-exit 0;
diff --git a/contrib/perl5/t/lib/io_tell.t b/contrib/perl5/t/lib/io_tell.t
deleted file mode 100755
index 3aa4b03..0000000
--- a/contrib/perl5/t/lib/io_tell.t
+++ /dev/null
@@ -1,64 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- $tell_file = "TEST";
- }
- else {
- $tell_file = "Makefile";
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
- }
-}
-
-print "1..13\n";
-
-use IO::File;
-
-$tst = IO::File->new("$tell_file","r") || die("Can't open $tell_file");
-binmode $tst if ($^O eq 'MSWin32' or $^O eq 'dos');
-if ($tst->eof) { print "not ok 1\n"; } else { print "ok 1\n"; }
-
-$firstline = <$tst>;
-$secondpos = tell;
-
-$x = 0;
-while (<$tst>) {
- if (eof) {$x++;}
-}
-if ($x == 1) { print "ok 2\n"; } else { print "not ok 2\n"; }
-
-$lastpos = tell;
-
-unless (eof) { print "not ok 3\n"; } else { print "ok 3\n"; }
-
-if ($tst->seek(0,0)) { print "ok 4\n"; } else { print "not ok 4\n"; }
-
-if (eof) { print "not ok 5\n"; } else { print "ok 5\n"; }
-
-if ($firstline eq <$tst>) { print "ok 6\n"; } else { print "not ok 6\n"; }
-
-if ($secondpos == tell) { print "ok 7\n"; } else { print "not ok 7\n"; }
-
-if ($tst->seek(0,1)) { print "ok 8\n"; } else { print "not ok 8\n"; }
-
-if ($tst->eof) { print "not ok 9\n"; } else { print "ok 9\n"; }
-
-if ($secondpos == tell) { print "ok 10\n"; } else { print "not ok 10\n"; }
-
-if ($tst->seek(0,2)) { print "ok 11\n"; } else { print "not ok 11\n"; }
-
-if ($lastpos == $tst->tell) { print "ok 12\n"; } else { print "not ok 12\n"; }
-
-unless (eof) { print "not ok 13\n"; } else { print "ok 13\n"; }
diff --git a/contrib/perl5/t/lib/io_udp.t b/contrib/perl5/t/lib/io_udp.t
deleted file mode 100755
index d63a5dc..0000000
--- a/contrib/perl5/t/lib/io_udp.t
+++ /dev/null
@@ -1,94 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- my $reason;
-
- if ($Config{'extensions'} !~ /\bSocket\b/) {
- $reason = 'Socket was not built';
- }
- elsif ($Config{'extensions'} !~ /\bIO\b/) {
- $reason = 'IO was not built';
- }
- elsif ($^O eq 'apollo') {
- $reason = "unknown *FIXME*";
- }
- undef $reason if $^O eq 'VMS' and $Config{d_socket};
- if ($reason) {
- print "1..0 # Skip: $reason\n";
- exit 0;
- }
- }
-}
-
-sub compare_addr {
- no utf8;
- my $a = shift;
- my $b = shift;
- if (length($a) != length $b) {
- my $min = (length($a) < length $b) ? length($a) : length $b;
- if ($min and substr($a, 0, $min) eq substr($b, 0, $min)) {
- printf "# Apparently: %d bytes junk at the end of %s\n# %s\n",
- abs(length($a) - length ($b)),
- $_[length($a) < length ($b) ? 1 : 0],
- "consider decreasing bufsize of recfrom.";
- substr($a, $min) = "";
- substr($b, $min) = "";
- }
- return 0;
- }
- my @a = unpack_sockaddr_in($a);
- my @b = unpack_sockaddr_in($b);
- "$a[0]$a[1]" eq "$b[0]$b[1]";
-}
-
-$| = 1;
-print "1..7\n";
-
-use Socket;
-use IO::Socket qw(AF_INET SOCK_DGRAM INADDR_ANY);
-
-$udpa = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost')
- || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1')
- or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)";
-
-print "ok 1\n";
-
-$udpb = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost')
- || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1')
- or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)";
-
-print "ok 2\n";
-
-$udpa->send("ok 4\n",0,$udpb->sockname);
-
-print "not "
- unless compare_addr($udpa->peername,$udpb->sockname, 'peername', 'sockname');
-print "ok 3\n";
-
-my $where = $udpb->recv($buf="",5);
-print $buf;
-
-my @xtra = ();
-
-unless(compare_addr($where,$udpa->sockname, 'recv name', 'sockname')) {
- print "not ";
- @xtra = (0,$udpa->sockname);
-}
-print "ok 5\n";
-
-$udpb->send("ok 6\n",@xtra);
-$udpa->recv($buf="",5);
-print $buf;
-
-print "not " if $udpa->connected;
-print "ok 7\n";
diff --git a/contrib/perl5/t/lib/io_unix.t b/contrib/perl5/t/lib/io_unix.t
deleted file mode 100755
index 2f6def0..0000000
--- a/contrib/perl5/t/lib/io_unix.t
+++ /dev/null
@@ -1,89 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- my $reason;
- if (! $Config{'d_fork'}) {
- $reason = 'no fork';
- }
- elsif ($Config{'extensions'} !~ /\bSocket\b/) {
- $reason = 'Socket extension unavailable';
- }
- elsif ($Config{'extensions'} !~ /\bIO\b/) {
- $reason = 'IO extension unavailable';
- }
- elsif ($^O eq 'os2') {
- require IO::Socket;
-
- eval {IO::Socket::pack_sockaddr_un('/tmp/foo') || 1}
- or $@ !~ /not implemented/ or
- $reason = 'compiled without TCP/IP stack v4';
- } elsif ($^O eq 'qnx') {
- $reason = 'Not implemented';
- }
- undef $reason if $^O eq 'VMS' and $Config{d_socket};
- if ($reason) {
- print "1..0 # Skip: $reason\n";
- exit 0;
- }
- }
-}
-
-$PATH = "/tmp/sock-$$";
-
-# Test if we can create the file within the tmp directory
-if (-e $PATH or not open(TEST, ">$PATH") and $^O ne 'os2') {
- print "1..0 # Skip: cannot open '$PATH' for write\n";
- exit 0;
-}
-close(TEST);
-unlink($PATH) or $^O eq 'os2' or die "Can't unlink $PATH: $!";
-
-# Start testing
-$| = 1;
-print "1..5\n";
-
-use IO::Socket;
-
-$listen = IO::Socket::UNIX->new(Local=>$PATH, Listen=>0) || die "$!";
-print "ok 1\n";
-
-if($pid = fork()) {
-
- $sock = $listen->accept();
- print "ok 2\n";
-
- print $sock->getline();
-
- print $sock "ok 4\n";
-
- $sock->close;
-
- waitpid($pid,0);
- unlink($PATH) || $^O eq 'os2' || warn "Can't unlink $PATH: $!";
-
- print "ok 5\n";
-
-} elsif(defined $pid) {
-
- $sock = IO::Socket::UNIX->new(Peer => $PATH) or die "$!";
-
- print $sock "ok 3\n";
-
- print $sock->getline();
-
- $sock->close;
-
- exit;
-} else {
- die;
-}
diff --git a/contrib/perl5/t/lib/io_xs.t b/contrib/perl5/t/lib/io_xs.t
deleted file mode 100755
index 2449fc4..0000000
--- a/contrib/perl5/t/lib/io_xs.t
+++ /dev/null
@@ -1,43 +0,0 @@
-#!./perl
-
-BEGIN {
- unless(grep /blib/, @INC) {
- chdir 't' if -d 't';
- @INC = '../lib';
- }
-}
-
-use Config;
-
-BEGIN {
- if(-d "lib" && -f "TEST") {
- if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
- }
-}
-
-use IO::File;
-use IO::Seekable;
-
-print "1..4\n";
-
-$x = new_tmpfile IO::File or print "not ";
-print "ok 1\n";
-print $x "ok 2\n";
-$x->seek(0,SEEK_SET);
-print <$x>;
-
-$x->seek(0,SEEK_SET);
-print $x "not ok 3\n";
-$p = $x->getpos;
-print $x "ok 3\n";
-$x->flush;
-$x->setpos($p);
-print scalar <$x>;
-
-$! = 0;
-$x->setpos(undef);
-print $! ? "ok 4 # $!\n" : "not ok 4\n";
-
diff --git a/contrib/perl5/t/lib/ipc_sysv.t b/contrib/perl5/t/lib/ipc_sysv.t
deleted file mode 100755
index 795ad5d..0000000
--- a/contrib/perl5/t/lib/ipc_sysv.t
+++ /dev/null
@@ -1,218 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
-
- @INC = '../lib';
-
- require Config; import Config;
-
- my $reason;
-
- if ($Config{'extensions'} !~ /\bIPC\/SysV\b/) {
- $reason = 'IPC::SysV was not built';
- } elsif ($Config{'d_sem'} ne 'define') {
- $reason = '$Config{d_sem} undefined';
- } elsif ($Config{'d_msg'} ne 'define') {
- $reason = '$Config{d_msg} undefined';
- }
- if ($reason) {
- print "1..0 # Skip: $reason\n";
- exit 0;
- }
-}
-
-# These constants are common to all tests.
-# Later the sem* tests will import more for themselves.
-
-use IPC::SysV qw(IPC_PRIVATE IPC_NOWAIT IPC_STAT IPC_RMID S_IRWXU);
-use strict;
-
-print "1..16\n";
-
-my $msg;
-my $sem;
-
-$SIG{__DIE__} = 'cleanup'; # will cleanup $msg and $sem if needed
-
-# FreeBSD is known to throw this if there's no SysV IPC in the kernel.
-$SIG{SYS} = sub {
- print STDERR <<EOM;
-SIGSYS caught.
-It may be that your kernel does not have SysV IPC configured.
-
-EOM
- if ($^O eq 'freebsd') {
- print STDERR <<EOM;
-You must have following options in your kernel:
-
-options SYSVSHM
-options SYSVSEM
-options SYSVMSG
-
-See config(8).
-EOM
- }
- exit(1);
-};
-
-my $perm = S_IRWXU;
-
-if ($Config{'d_msgget'} eq 'define' &&
- $Config{'d_msgctl'} eq 'define' &&
- $Config{'d_msgsnd'} eq 'define' &&
- $Config{'d_msgrcv'} eq 'define') {
-
- $msg = msgget(IPC_PRIVATE, $perm);
- # Very first time called after machine is booted value may be 0
- die "msgget failed: $!\n" unless defined($msg) && $msg >= 0;
-
- print "ok 1\n";
-
- #Putting a message on the queue
- my $msgtype = 1;
- my $msgtext = "hello";
-
- my $test2bad;
- my $test5bad;
- my $test6bad;
-
- unless (msgsnd($msg,pack("L! a*",$msgtype,$msgtext),IPC_NOWAIT)) {
- print "not ";
- $test2bad = 1;
- }
- print "ok 2\n";
- if ($test2bad) {
- print <<EOM;
-#
-# The failure of the subtest #2 may indicate that the message queue
-# resource limits either of the system or of the testing account
-# have been reached. Error message "Operating would block" is
-# usually indicative of this situation. The error message was now:
-# "$!"
-#
-# You can check the message queues with the 'ipcs' command and
-# you can remove unneeded queues with the 'ipcrm -q id' command.
-# You may also consider configuring your system or account
-# to have more message queue resources.
-#
-# Because of the subtest #2 failing also the substests #5 and #6 will
-# very probably also fail.
-#
-EOM
- }
-
- my $data;
- msgctl($msg,IPC_STAT,$data) or print "not ";
- print "ok 3\n";
-
- print "not " unless length($data);
- print "ok 4\n";
-
- my $msgbuf;
- unless (msgrcv($msg,$msgbuf,256,0,IPC_NOWAIT)) {
- print "not ";
- $test5bad = 1;
- }
- print "ok 5\n";
- if ($test5bad && $test2bad) {
- print <<EOM;
-#
-# This failure was to be expected because the subtest #2 failed.
-#
-EOM
- }
-
- my($rmsgtype,$rmsgtext);
- ($rmsgtype,$rmsgtext) = unpack("L! a*",$msgbuf);
- unless ($rmsgtype == $msgtype && $rmsgtext eq $msgtext) {
- print "not ";
- $test6bad = 1;
- }
- print "ok 6\n";
- if ($test6bad && $test2bad) {
- print <<EOM;
-#
-# This failure was to be expected because the subtest #2 failed.
-#
-EOM
- }
-} else {
- for (1..6) {
- print "ok $_\n"; # fake it
- }
-}
-
-if($Config{'d_semget'} eq 'define' &&
- $Config{'d_semctl'} eq 'define') {
-
- if ($Config{'d_semctl_semid_ds'} eq 'define' ||
- $Config{'d_semctl_semun'} eq 'define') {
-
- use IPC::SysV qw(IPC_CREAT GETALL SETALL);
-
- $sem = semget(IPC_PRIVATE, 10, $perm | IPC_CREAT);
- # Very first time called after machine is booted value may be 0
- die "semget: $!\n" unless defined($sem) && $sem >= 0;
-
- print "ok 7\n";
-
- my $data;
- semctl($sem,0,IPC_STAT,$data) or print "not ";
- print "ok 8\n";
-
- print "not " unless length($data);
- print "ok 9\n";
-
- my $nsem = 10;
-
- semctl($sem,0,SETALL,pack("s!*",(0) x $nsem)) or print "not ";
- print "ok 10\n";
-
- $data = "";
- semctl($sem,0,GETALL,$data) or print "not ";
- print "ok 11\n";
-
- print "not " unless length($data) == length(pack("s!*",(0) x $nsem));
- print "ok 12\n";
-
- my @data = unpack("s!*",$data);
-
- my $adata = "0" x $nsem;
-
- print "not " unless @data == $nsem and join("",@data) eq $adata;
- print "ok 13\n";
-
- my $poke = 2;
-
- $data[$poke] = 1;
- semctl($sem,0,SETALL,pack("s!*",@data)) or print "not ";
- print "ok 14\n";
-
- $data = "";
- semctl($sem,0,GETALL,$data) or print "not ";
- print "ok 15\n";
-
- @data = unpack("s!*",$data);
-
- my $bdata = "0" x $poke . "1" . "0" x ($nsem-$poke-1);
-
- print "not " unless join("",@data) eq $bdata;
- print "ok 16\n";
- } else {
- for (7..16) {
- print "ok $_ # skipped, no semctl possible\n";
- }
- }
-} else {
- for (7..16) {
- print "ok $_\n"; # fake it
- }
-}
-
-sub cleanup {
- msgctl($msg,IPC_RMID,0) if defined $msg;
- semctl($sem,0,IPC_RMID,undef) if defined $sem;
-}
-
-cleanup;
diff --git a/contrib/perl5/t/lib/ndbm.t b/contrib/perl5/t/lib/ndbm.t
deleted file mode 100755
index e56fcd9..0000000
--- a/contrib/perl5/t/lib/ndbm.t
+++ /dev/null
@@ -1,420 +0,0 @@
-#!./perl
-
-# $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bNDBM_File\b/) {
- print "1..0 # Skip: NDBM_File was not built\n";
- exit 0;
- }
-}
-
-use strict;
-use warnings;
-
-sub ok
-{
- my $no = shift ;
- my $result = shift ;
-
- print "not " unless $result ;
- print "ok $no\n" ;
-}
-
-require NDBM_File;
-#If Fcntl is not available, try 0x202 or 0x102 for O_RDWR|O_CREAT
-use Fcntl;
-
-print "1..65\n";
-
-unlink <Op.dbmx*>;
-
-umask(0);
-my %h;
-ok(1, tie(%h,'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640));
-
-my $Dfile = "Op.dbmx.pag";
-if (! -e $Dfile) {
- ($Dfile) = <Op.dbmx*>;
-}
-if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32') {
- print "ok 2 # Skipped: different file permission semantics\n";
-}
-else {
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
- print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n");
-}
-my $i = 0;
-while (my ($key,$value) = each(%h)) {
- $i++;
-}
-print (!$i ? "ok 3\n" : "not ok 3\n");
-
-$h{'goner1'} = 'snork';
-
-$h{'abc'} = 'ABC';
-$h{'def'} = 'DEF';
-$h{'jkl','mno'} = "JKL\034MNO";
-$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
-$h{'a'} = 'A';
-$h{'b'} = 'B';
-$h{'c'} = 'C';
-$h{'d'} = 'D';
-$h{'e'} = 'E';
-$h{'f'} = 'F';
-$h{'g'} = 'G';
-$h{'h'} = 'H';
-$h{'i'} = 'I';
-
-$h{'goner2'} = 'snork';
-delete $h{'goner2'};
-
-untie(%h);
-print (tie(%h,'NDBM_File','Op.dbmx', &O_RDWR, 0640) ? "ok 4\n" : "not ok 4\n");
-
-$h{'j'} = 'J';
-$h{'k'} = 'K';
-$h{'l'} = 'L';
-$h{'m'} = 'M';
-$h{'n'} = 'N';
-$h{'o'} = 'O';
-$h{'p'} = 'P';
-$h{'q'} = 'Q';
-$h{'r'} = 'R';
-$h{'s'} = 'S';
-$h{'t'} = 'T';
-$h{'u'} = 'U';
-$h{'v'} = 'V';
-$h{'w'} = 'W';
-$h{'x'} = 'X';
-$h{'y'} = 'Y';
-$h{'z'} = 'Z';
-
-$h{'goner3'} = 'snork';
-
-delete $h{'goner1'};
-delete $h{'goner3'};
-
-my @keys = keys(%h);
-my @values = values(%h);
-
-if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";}
-
-while (my ($key,$value) = each(%h)) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";}
-
-@keys = ('blurfl', keys(%h), 'dyick');
-if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";}
-
-$h{'foo'} = '';
-$h{''} = 'bar';
-
-# check cache overflow and numeric keys and contents
-my $ok = 1;
-for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; }
-for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; }
-print ($ok ? "ok 8\n" : "not ok 8\n");
-
-my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-print ($size > 0 ? "ok 9\n" : "not ok 9\n");
-
-@h{0..200} = 200..400;
-my @foo = @h{0..200};
-print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n";
-
-print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n");
-print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n");
-
-untie %h;
-unlink 'Op.dbmx.dir', $Dfile;
-
-{
- # sub-class test
-
- package Another ;
-
- use strict ;
- use warnings ;
-
- open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ;
- print FILE <<'EOM' ;
-
- package SubDB ;
-
- use strict ;
- use warnings ;
- use vars qw(@ISA @EXPORT) ;
-
- require Exporter ;
- use NDBM_File;
- @ISA=qw(NDBM_File);
- @EXPORT = @NDBM_File::EXPORT if defined @NDBM_File::EXPORT ;
-
- sub STORE {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::STORE($key, $value * 2) ;
- }
-
- sub FETCH {
- my $self = shift ;
- my $key = shift ;
- $self->SUPER::FETCH($key) - 1 ;
- }
-
- sub A_new_method
- {
- my $self = shift ;
- my $key = shift ;
- my $value = $self->FETCH($key) ;
- return "[[$value]]" ;
- }
-
- 1 ;
-EOM
-
- close FILE ;
-
- BEGIN { push @INC, '.'; }
-
- eval 'use SubDB ; use Fcntl ; ';
- main::ok(13, $@ eq "") ;
- my %h ;
- my $X ;
- eval '
- $X = tie(%h, "SubDB","dbhash.tmp", O_RDWR|O_CREAT, 0640 );
- ' ;
-
- main::ok(14, $@ eq "") ;
-
- my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ;
- main::ok(15, $@ eq "") ;
- main::ok(16, $ret == 5) ;
-
- $ret = eval '$X->A_new_method("fred") ' ;
- main::ok(17, $@ eq "") ;
- main::ok(18, $ret eq "[[5]]") ;
-
- undef $X;
- untie(%h);
- unlink "SubDB.pm", <dbhash.tmp*> ;
-
-}
-
-{
- # DBM Filter tests
- use strict ;
- use warnings ;
- my (%h, $db) ;
- my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
-
- sub checkOutput
- {
- my($fk, $sk, $fv, $sv) = @_ ;
- return
- $fetch_key eq $fk && $store_key eq $sk &&
- $fetch_value eq $fv && $store_value eq $sv &&
- $_ eq 'original' ;
- }
-
- unlink <Op.dbmx*>;
- ok(19, $db = tie(%h, 'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- $db->filter_fetch_key (sub { $fetch_key = $_ }) ;
- $db->filter_store_key (sub { $store_key = $_ }) ;
- $db->filter_fetch_value (sub { $fetch_value = $_}) ;
- $db->filter_store_value (sub { $store_value = $_ }) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- # fk sk fv sv
- ok(20, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(21, $h{"fred"} eq "joe");
- # fk sk fv sv
- ok(22, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(23, $db->FIRSTKEY() eq "fred") ;
- # fk sk fv sv
- ok(24, checkOutput( "fred", "", "", "")) ;
-
- # replace the filters, but remember the previous set
- my ($old_fk) = $db->filter_fetch_key
- (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
- my ($old_sk) = $db->filter_store_key
- (sub { $_ = lc $_ ; $store_key = $_ }) ;
- my ($old_fv) = $db->filter_fetch_value
- (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
- my ($old_sv) = $db->filter_store_value
- (sub { s/o/x/g; $store_value = $_ }) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"Fred"} = "Joe" ;
- # fk sk fv sv
- ok(25, checkOutput( "", "fred", "", "Jxe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(26, $h{"Fred"} eq "[Jxe]");
- # fk sk fv sv
- ok(27, checkOutput( "", "fred", "[Jxe]", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(28, $db->FIRSTKEY() eq "FRED") ;
- # fk sk fv sv
- ok(29, checkOutput( "FRED", "", "", "")) ;
-
- # put the original filters back
- $db->filter_fetch_key ($old_fk);
- $db->filter_store_key ($old_sk);
- $db->filter_fetch_value ($old_fv);
- $db->filter_store_value ($old_sv);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(30, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(31, $h{"fred"} eq "joe");
- ok(32, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(33, $db->FIRSTKEY() eq "fred") ;
- ok(34, checkOutput( "fred", "", "", "")) ;
-
- # delete the filters
- $db->filter_fetch_key (undef);
- $db->filter_store_key (undef);
- $db->filter_fetch_value (undef);
- $db->filter_store_value (undef);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(35, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(36, $h{"fred"} eq "joe");
- ok(37, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(38, $db->FIRSTKEY() eq "fred") ;
- ok(39, checkOutput( "", "", "", "")) ;
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # DBM Filter with a closure
-
- use strict ;
- use warnings ;
- my (%h, $db) ;
-
- unlink <Op.dbmx*>;
- ok(40, $db = tie(%h, 'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- my %result = () ;
-
- sub Closure
- {
- my ($name) = @_ ;
- my $count = 0 ;
- my @kept = () ;
-
- return sub { ++$count ;
- push @kept, $_ ;
- $result{$name} = "$name - $count: [@kept]" ;
- }
- }
-
- $db->filter_store_key(Closure("store key")) ;
- $db->filter_store_value(Closure("store value")) ;
- $db->filter_fetch_key(Closure("fetch key")) ;
- $db->filter_fetch_value(Closure("fetch value")) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- ok(41, $result{"store key"} eq "store key - 1: [fred]");
- ok(42, $result{"store value"} eq "store value - 1: [joe]");
- ok(43, !defined $result{"fetch key"} );
- ok(44, !defined $result{"fetch value"} );
- ok(45, $_ eq "original") ;
-
- ok(46, $db->FIRSTKEY() eq "fred") ;
- ok(47, $result{"store key"} eq "store key - 1: [fred]");
- ok(48, $result{"store value"} eq "store value - 1: [joe]");
- ok(49, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(50, ! defined $result{"fetch value"} );
- ok(51, $_ eq "original") ;
-
- $h{"jim"} = "john" ;
- ok(52, $result{"store key"} eq "store key - 2: [fred jim]");
- ok(53, $result{"store value"} eq "store value - 2: [joe john]");
- ok(54, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(55, ! defined $result{"fetch value"} );
- ok(56, $_ eq "original") ;
-
- ok(57, $h{"fred"} eq "joe");
- ok(58, $result{"store key"} eq "store key - 3: [fred jim fred]");
- ok(59, $result{"store value"} eq "store value - 2: [joe john]");
- ok(60, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(61, $result{"fetch value"} eq "fetch value - 1: [joe]");
- ok(62, $_ eq "original") ;
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # DBM Filter recursion detection
- use strict ;
- use warnings ;
- my (%h, $db) ;
- unlink <Op.dbmx*>;
-
- ok(63, $db = tie(%h, 'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- $db->filter_store_key (sub { $_ = $h{$_} }) ;
-
- eval '$h{1} = 1234' ;
- ok(64, $@ =~ /^recursion detected in filter_store_key at/ );
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # Bug ID 20001013.009
- #
- # test that $hash{KEY} = undef doesn't produce the warning
- # Use of uninitialized value in null operation
- use warnings ;
- use strict ;
- use NDBM_File ;
-
- unlink <Op.dbmx*>;
- my %h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- ok(65, tie(%h, 'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ;
-}
diff --git a/contrib/perl5/t/lib/odbm.t b/contrib/perl5/t/lib/odbm.t
deleted file mode 100755
index b935d04..0000000
--- a/contrib/perl5/t/lib/odbm.t
+++ /dev/null
@@ -1,437 +0,0 @@
-#!./perl
-
-# $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bODBM_File\b/) {
- print "1..0 # Skip: ODBM_File was not built\n";
- exit 0;
- }
-}
-
-use strict;
-use warnings;
-
-sub ok
-{
- my $no = shift ;
- my $result = shift ;
-
- print "not " unless $result ;
- print "ok $no\n" ;
-}
-
-require ODBM_File;
-#If Fcntl is not available, try 0x202 or 0x102 for O_RDWR|O_CREAT
-use Fcntl;
-
-print "1..66\n";
-
-unlink <Op.dbmx*>;
-
-umask(0);
-my %h;
-ok(1, tie(%h,'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640));
-
-my $Dfile = "Op.dbmx.pag";
-if (! -e $Dfile) {
- ($Dfile) = <Op.dbmx*>;
-}
-if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32') {
- print "ok 2 # Skipped: different file permission semantics\n";
-}
-else {
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
- print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n");
-}
-my $i = 0;
-while (my ($key,$value) = each(%h)) {
- $i++;
-}
-print (!$i ? "ok 3\n" : "not ok 3\n");
-
-$h{'goner1'} = 'snork';
-
-$h{'abc'} = 'ABC';
-$h{'def'} = 'DEF';
-$h{'jkl','mno'} = "JKL\034MNO";
-$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
-$h{'a'} = 'A';
-$h{'b'} = 'B';
-$h{'c'} = 'C';
-$h{'d'} = 'D';
-$h{'e'} = 'E';
-$h{'f'} = 'F';
-$h{'g'} = 'G';
-$h{'h'} = 'H';
-$h{'i'} = 'I';
-
-$h{'goner2'} = 'snork';
-delete $h{'goner2'};
-
-untie(%h);
-print (tie(%h,'ODBM_File','Op.dbmx', O_RDWR, 0640) ? "ok 4\n" : "not ok 4\n");
-
-$h{'j'} = 'J';
-$h{'k'} = 'K';
-$h{'l'} = 'L';
-$h{'m'} = 'M';
-$h{'n'} = 'N';
-$h{'o'} = 'O';
-$h{'p'} = 'P';
-$h{'q'} = 'Q';
-$h{'r'} = 'R';
-$h{'s'} = 'S';
-$h{'t'} = 'T';
-$h{'u'} = 'U';
-$h{'v'} = 'V';
-$h{'w'} = 'W';
-$h{'x'} = 'X';
-$h{'y'} = 'Y';
-$h{'z'} = 'Z';
-
-$h{'goner3'} = 'snork';
-
-delete $h{'goner1'};
-delete $h{'goner3'};
-
-my @keys = keys(%h);
-my @values = values(%h);
-
-if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";}
-
-while (my ($key,$value) = each(%h)) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";}
-
-@keys = ('blurfl', keys(%h), 'dyick');
-if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";}
-
-$h{'foo'} = '';
-$h{''} = 'bar';
-
-# check cache overflow and numeric keys and contents
-my $ok = 1;
-for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; }
-for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; }
-print ($ok ? "ok 8\n" : "not ok 8\n");
-
-my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-print ($size > 0 ? "ok 9\n" : "not ok 9\n");
-
-@h{0..200} = 200..400;
-my @foo = @h{0..200};
-print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n";
-
-print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n");
-print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n");
-
-untie %h;
-unlink 'Op.dbmx.dir', $Dfile;
-
-{
- # sub-class test
-
- package Another ;
-
- use strict ;
- use warnings ;
-
- open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ;
- print FILE <<'EOM' ;
-
- package SubDB ;
-
- use strict ;
- use warnings ;
- use vars qw(@ISA @EXPORT) ;
-
- require Exporter ;
- use ODBM_File;
- @ISA=qw(ODBM_File);
- @EXPORT = @ODBM_File::EXPORT ;
-
- sub STORE {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::STORE($key, $value * 2) ;
- }
-
- sub FETCH {
- my $self = shift ;
- my $key = shift ;
- $self->SUPER::FETCH($key) - 1 ;
- }
-
- sub A_new_method
- {
- my $self = shift ;
- my $key = shift ;
- my $value = $self->FETCH($key) ;
- return "[[$value]]" ;
- }
-
- 1 ;
-EOM
-
- close FILE ;
-
- BEGIN { push @INC, '.'; }
-
- eval 'use SubDB ; use Fcntl ;';
- main::ok(13, $@ eq "") ;
- my %h ;
- my $X ;
- eval '
- $X = tie(%h, "SubDB","dbhash.tmp", O_RDWR|O_CREAT, 0640 );
- ' ;
-
- main::ok(14, $@ eq "") ;
-
- my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ;
- main::ok(15, $@ eq "") ;
- main::ok(16, $ret == 5) ;
-
- $ret = eval '$X->A_new_method("fred") ' ;
- main::ok(17, $@ eq "") ;
- main::ok(18, $ret eq "[[5]]") ;
-
- undef $X;
- untie(%h);
- unlink "SubDB.pm", <dbhash.tmp*> ;
-
-}
-
-{
- # DBM Filter tests
- use strict ;
- use warnings ;
- my (%h, $db) ;
- my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
-
- sub checkOutput
- {
- my($fk, $sk, $fv, $sv) = @_ ;
- print "# ", join('|', $fetch_key, $fk, $store_key, $sk,
- $fetch_value, $fv, $store_value, $sv, $_), "\n";
- return
- $fetch_key eq $fk && $store_key eq $sk &&
- $fetch_value eq $fv && $store_value eq $sv &&
- $_ eq 'original' ;
- }
-
- unlink <Op.dbmx*>;
- ok(19, $db = tie(%h, 'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- $db->filter_fetch_key (sub { $fetch_key = $_ }) ;
- $db->filter_store_key (sub { $store_key = $_ }) ;
- $db->filter_fetch_value (sub { $fetch_value = $_}) ;
- $db->filter_store_value (sub { $store_value = $_ }) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- # fk sk fv sv
- ok(20, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(21, $h{"fred"} eq "joe");
- # fk sk fv sv
- ok(22, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(23, $db->FIRSTKEY() eq "fred") ;
- # fk sk fv sv
- ok(24, checkOutput( "fred", "", "", "")) ;
-
- # replace the filters, but remember the previous set
- my ($old_fk) = $db->filter_fetch_key
- (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
- my ($old_sk) = $db->filter_store_key
- (sub { $_ = lc $_ ; $store_key = $_ }) ;
- my ($old_fv) = $db->filter_fetch_value
- (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
- my ($old_sv) = $db->filter_store_value
- (sub { s/o/x/g; $store_value = $_ }) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"Fred"} = "Joe" ;
- # fk sk fv sv
- ok(25, checkOutput( "", "fred", "", "Jxe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(26, $h{"Fred"} eq "[Jxe]");
- # fk sk fv sv
- ok(27, checkOutput( "", "fred", "[Jxe]", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(28, $db->FIRSTKEY() eq "FRED") ;
- # fk sk fv sv
- ok(29, checkOutput( "FRED", "", "", "")) ;
-
- # put the original filters back
- $db->filter_fetch_key ($old_fk);
- $db->filter_store_key ($old_sk);
- $db->filter_fetch_value ($old_fv);
- $db->filter_store_value ($old_sv);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(30, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(31, $h{"fred"} eq "joe");
- ok(32, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(33, $db->FIRSTKEY() eq "fred") ;
- ok(34, checkOutput( "fred", "", "", "")) ;
-
- # delete the filters
- $db->filter_fetch_key (undef);
- $db->filter_store_key (undef);
- $db->filter_fetch_value (undef);
- $db->filter_store_value (undef);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(35, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(36, $h{"fred"} eq "joe");
- ok(37, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(38, $db->FIRSTKEY() eq "fred") ;
- ok(39, checkOutput( "", "", "", "")) ;
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # DBM Filter with a closure
-
- use strict ;
- use warnings ;
- my (%h, $db) ;
-
- unlink <Op.dbmx*>;
- ok(40, $db = tie(%h, 'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- my %result = () ;
-
- sub Closure
- {
- my ($name) = @_ ;
- my $count = 0 ;
- my @kept = () ;
-
- return sub { ++$count ;
- push @kept, $_ ;
- $result{$name} = "$name - $count: [@kept]" ;
- }
- }
-
- $db->filter_store_key(Closure("store key")) ;
- $db->filter_store_value(Closure("store value")) ;
- $db->filter_fetch_key(Closure("fetch key")) ;
- $db->filter_fetch_value(Closure("fetch value")) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- ok(41, $result{"store key"} eq "store key - 1: [fred]");
- ok(42, $result{"store value"} eq "store value - 1: [joe]");
- ok(43, !defined $result{"fetch key"} );
- ok(44, !defined $result{"fetch value"} );
- ok(45, $_ eq "original") ;
-
- ok(46, $db->FIRSTKEY() eq "fred") ;
- ok(47, $result{"store key"} eq "store key - 1: [fred]");
- ok(48, $result{"store value"} eq "store value - 1: [joe]");
- ok(49, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(50, ! defined $result{"fetch value"} );
- ok(51, $_ eq "original") ;
-
- $h{"jim"} = "john" ;
- ok(52, $result{"store key"} eq "store key - 2: [fred jim]");
- ok(53, $result{"store value"} eq "store value - 2: [joe john]");
- ok(54, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(55, ! defined $result{"fetch value"} );
- ok(56, $_ eq "original") ;
-
- ok(57, $h{"fred"} eq "joe");
- ok(58, $result{"store key"} eq "store key - 3: [fred jim fred]");
- ok(59, $result{"store value"} eq "store value - 2: [joe john]");
- ok(60, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(61, $result{"fetch value"} eq "fetch value - 1: [joe]");
- ok(62, $_ eq "original") ;
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # DBM Filter recursion detection
- use strict ;
- use warnings ;
- my (%h, $db) ;
- unlink <Op.dbmx*>;
-
- ok(63, $db = tie(%h, 'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- $db->filter_store_key (sub { $_ = $h{$_} }) ;
-
- eval '$h{1} = 1234' ;
- ok(64, $@ =~ /^recursion detected in filter_store_key at/ );
-
- undef $db ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-{
- # Bug ID 20001013.009
- #
- # test that $hash{KEY} = undef doesn't produce the warning
- # Use of uninitialized value in null operation
- use warnings ;
- use strict ;
- use ODBM_File ;
-
- unlink <Op.dbmx*>;
- my %h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- ok(65, tie(%h, 'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ;
- $h{ABC} = undef;
- ok(66, $a eq "") ;
- untie %h;
- unlink <Op.dbmx*>;
-}
-
-if ($^O eq 'hpux') {
- print <<EOM;
-#
-# If you experience failures with the odbm test in HP-UX,
-# this is a well-known bug that's unfortunately very hard to fix.
-# The suggested course of action is to avoid using the ODBM_File,
-# but to use instead the NDBM_File extension.
-#
-EOM
-}
diff --git a/contrib/perl5/t/lib/opcode.t b/contrib/perl5/t/lib/opcode.t
deleted file mode 100755
index a785fce..0000000
--- a/contrib/perl5/t/lib/opcode.t
+++ /dev/null
@@ -1,115 +0,0 @@
-#!./perl -w
-
-$|=1;
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
-}
-
-use Opcode qw(
- opcodes opdesc opmask verify_opset
- opset opset_to_ops opset_to_hex invert_opset
- opmask_add full_opset empty_opset define_optag
-);
-
-use strict;
-
-my $t = 1;
-my $last_test; # initalised at end
-print "1..$last_test\n";
-
-my($s1, $s2, $s3);
-my(@o1, @o2, @o3);
-
-# --- opset_to_ops and opset
-
-my @empty_l = opset_to_ops(empty_opset);
-print @empty_l == 0 ? "ok $t\n" : "not ok $t\n"; $t++;
-
-my @full_l1 = opset_to_ops(full_opset);
-print @full_l1 == opcodes() ? "ok $t\n" : "not ok $t\n"; $t++;
-my @full_l2 = @full_l1; # = opcodes(); # XXX to be fixed
-print "@full_l1" eq "@full_l2" ? "ok $t\n" : "not ok $t\n"; $t++;
-
-@empty_l = opset_to_ops(opset(':none'));
-print @empty_l == 0 ? "ok $t\n" : "not ok $t\n"; $t++;
-
-my @full_l3 = opset_to_ops(opset(':all'));
-print @full_l1 == @full_l3 ? "ok $t\n" : "not ok $t\n"; $t++;
-print "@full_l1" eq "@full_l3" ? "ok $t\n" : "not ok $t\n"; $t++;
-
-die $t unless $t == 7;
-$s1 = opset( 'padsv');
-$s2 = opset($s1, 'padav');
-$s3 = opset($s2, '!padav');
-print $s1 eq $s2 ? "not ok $t\n" : "ok $t\n"; ++$t;
-print $s1 eq $s3 ? "ok $t\n" : "not ok $t\n"; ++$t;
-
-# --- define_optag
-
-print eval { opset(':_tst_') } ? "not ok $t\n" : "ok $t\n"; ++$t;
-define_optag(":_tst_", opset(qw(padsv padav padhv)));
-print eval { opset(':_tst_') } ? "ok $t\n" : "not ok $t\n"; ++$t;
-
-# --- opdesc and opcodes
-
-die $t unless $t == 11;
-print opdesc("gv") eq "glob value" ? "ok $t\n" : "not ok $t\n"; $t++;
-my @desc = opdesc(':_tst_','stub');
-print "@desc" eq "private variable private array private hash stub"
- ? "ok $t\n" : "not ok $t\n#@desc\n"; $t++;
-print opcodes() ? "ok $t\n" : "not ok $t\n"; $t++;
-print "ok $t\n"; ++$t;
-
-# --- invert_opset
-
-$s1 = opset(qw(fileno padsv padav));
-@o2 = opset_to_ops(invert_opset($s1));
-print @o2 == opcodes-3 ? "ok $t\n" : "not ok $t\n"; $t++;
-
-# --- opmask
-
-die $t unless $t == 16;
-print opmask() eq empty_opset() ? "ok $t\n" : "not ok $t\n"; $t++; # work
-print length opmask() == int((opcodes()+7)/8) ? "ok $t\n" : "not ok $t\n"; $t++;
-
-# --- verify_opset
-
-print verify_opset($s1) && !verify_opset(42) ? "ok $t\n":"not ok $t\n"; $t++;
-
-# --- opmask_add
-
-opmask_add(opset(qw(fileno))); # add to global op_mask
-print eval 'fileno STDOUT' ? "not ok $t\n" : "ok $t\n"; $t++; # fail
-print $@ =~ /fileno trapped/ ? "ok $t\n" : "not ok $t\n# $@\n"; $t++;
-
-# --- check use of bit vector ops on opsets
-
-$s1 = opset('padsv');
-$s2 = opset('padav');
-$s3 = opset('padsv', 'padav', 'padhv');
-
-# Non-negated
-print (($s1 | $s2) eq opset($s1,$s2) ? "ok $t\n":"not ok $t\n"); $t++;
-print (($s2 & $s3) eq opset($s2) ? "ok $t\n":"not ok $t\n"); $t++;
-print (($s2 ^ $s3) eq opset('padsv','padhv') ? "ok $t\n":"not ok $t\n"); $t++;
-
-# Negated, e.g., with possible extra bits in last byte beyond last op bit.
-# The extra bits mean we can't just say ~mask eq invert_opset(mask).
-
-@o1 = opset_to_ops( ~ $s3);
-@o2 = opset_to_ops(invert_opset $s3);
-print "@o1" eq "@o2" ? "ok $t\n":"not ok $t\n"; $t++;
-
-# --- finally, check some opname assertions
-
-foreach(@full_l1) { die "bad opname: $_" if /\W/ or /^\d/ }
-
-print "ok $last_test\n";
-BEGIN { $last_test = 25 }
diff --git a/contrib/perl5/t/lib/open2.t b/contrib/perl5/t/lib/open2.t
deleted file mode 100755
index 85b807c..0000000
--- a/contrib/perl5/t/lib/open2.t
+++ /dev/null
@@ -1,59 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if (!$Config{'d_fork'}
- # open2/3 supported on win32 (but not Borland due to CRT bugs)
- && ($^O ne 'MSWin32' || $Config{'cc'} =~ /^bcc/i))
- {
- print "1..0\n";
- exit 0;
- }
- # make warnings fatal
- $SIG{__WARN__} = sub { die @_ };
-}
-
-use strict;
-use IO::Handle;
-use IPC::Open2;
-#require 'open2.pl'; use subs 'open2';
-
-my $perl = './perl';
-
-sub ok {
- my ($n, $result, $info) = @_;
- if ($result) {
- print "ok $n\n";
- }
- else {
- print "not ok $n\n";
- print "# $info\n" if $info;
- }
-}
-
-sub cmd_line {
- if ($^O eq 'MSWin32') {
- return qq/"$_[0]"/;
- }
- else {
- return $_[0];
- }
-}
-
-my ($pid, $reaped_pid);
-STDOUT->autoflush;
-STDERR->autoflush;
-
-print "1..7\n";
-
-ok 1, $pid = open2 'READ', 'WRITE', $perl, '-e',
- cmd_line('print scalar <STDIN>');
-ok 2, print WRITE "hi kid\n";
-ok 3, <READ> =~ /^hi kid\r?\n$/;
-ok 4, close(WRITE), $!;
-ok 5, close(READ), $!;
-$reaped_pid = waitpid $pid, 0;
-ok 6, $reaped_pid == $pid, $reaped_pid;
-ok 7, $? == 0, $?;
diff --git a/contrib/perl5/t/lib/open3.t b/contrib/perl5/t/lib/open3.t
deleted file mode 100755
index a0da34f..0000000
--- a/contrib/perl5/t/lib/open3.t
+++ /dev/null
@@ -1,150 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if (!$Config{'d_fork'}
- # open2/3 supported on win32 (but not Borland due to CRT bugs)
- && ($^O ne 'MSWin32' || $Config{'cc'} =~ /^bcc/i))
- {
- print "1..0\n";
- exit 0;
- }
- # make warnings fatal
- $SIG{__WARN__} = sub { die @_ };
-}
-
-use strict;
-use IO::Handle;
-use IPC::Open3;
-#require 'open3.pl'; use subs 'open3';
-
-my $perl = $^X;
-
-sub ok {
- my ($n, $result, $info) = @_;
- if ($result) {
- print "ok $n\n";
- }
- else {
- print "not ok $n\n";
- print "# $info\n" if $info;
- }
-}
-
-sub cmd_line {
- if ($^O eq 'MSWin32') {
- my $cmd = shift;
- $cmd =~ tr/\r\n//d;
- $cmd =~ s/"/\\"/g;
- return qq/"$cmd"/;
- }
- else {
- return $_[0];
- }
-}
-
-my ($pid, $reaped_pid);
-STDOUT->autoflush;
-STDERR->autoflush;
-
-print "1..22\n";
-
-# basic
-ok 1, $pid = open3 'WRITE', 'READ', 'ERROR', $perl, '-e', cmd_line(<<'EOF');
- $| = 1;
- print scalar <STDIN>;
- print STDERR "hi error\n";
-EOF
-ok 2, print WRITE "hi kid\n";
-ok 3, <READ> =~ /^hi kid\r?\n$/;
-ok 4, <ERROR> =~ /^hi error\r?\n$/;
-ok 5, close(WRITE), $!;
-ok 6, close(READ), $!;
-ok 7, close(ERROR), $!;
-$reaped_pid = waitpid $pid, 0;
-ok 8, $reaped_pid == $pid, $reaped_pid;
-ok 9, $? == 0, $?;
-
-# read and error together, both named
-$pid = open3 'WRITE', 'READ', 'READ', $perl, '-e', cmd_line(<<'EOF');
- $| = 1;
- print scalar <STDIN>;
- print STDERR scalar <STDIN>;
-EOF
-print WRITE "ok 10\n";
-print scalar <READ>;
-print WRITE "ok 11\n";
-print scalar <READ>;
-waitpid $pid, 0;
-
-# read and error together, error empty
-$pid = open3 'WRITE', 'READ', '', $perl, '-e', cmd_line(<<'EOF');
- $| = 1;
- print scalar <STDIN>;
- print STDERR scalar <STDIN>;
-EOF
-print WRITE "ok 12\n";
-print scalar <READ>;
-print WRITE "ok 13\n";
-print scalar <READ>;
-waitpid $pid, 0;
-
-# dup writer
-ok 14, pipe PIPE_READ, PIPE_WRITE;
-$pid = open3 '<&PIPE_READ', 'READ', '',
- $perl, '-e', cmd_line('print scalar <STDIN>');
-close PIPE_READ;
-print PIPE_WRITE "ok 15\n";
-close PIPE_WRITE;
-print scalar <READ>;
-waitpid $pid, 0;
-
-# dup reader
-$pid = open3 'WRITE', '>&STDOUT', 'ERROR',
- $perl, '-e', cmd_line('print scalar <STDIN>');
-print WRITE "ok 16\n";
-waitpid $pid, 0;
-
-# dup error: This particular case, duping stderr onto the existing
-# stdout but putting stdout somewhere else, is a good case because it
-# used not to work.
-$pid = open3 'WRITE', 'READ', '>&STDOUT',
- $perl, '-e', cmd_line('print STDERR scalar <STDIN>');
-print WRITE "ok 17\n";
-waitpid $pid, 0;
-
-# dup reader and error together, both named
-$pid = open3 'WRITE', '>&STDOUT', '>&STDOUT', $perl, '-e', cmd_line(<<'EOF');
- $| = 1;
- print STDOUT scalar <STDIN>;
- print STDERR scalar <STDIN>;
-EOF
-print WRITE "ok 18\n";
-print WRITE "ok 19\n";
-waitpid $pid, 0;
-
-# dup reader and error together, error empty
-$pid = open3 'WRITE', '>&STDOUT', '', $perl, '-e', cmd_line(<<'EOF');
- $| = 1;
- print STDOUT scalar <STDIN>;
- print STDERR scalar <STDIN>;
-EOF
-print WRITE "ok 20\n";
-print WRITE "ok 21\n";
-waitpid $pid, 0;
-
-# command line in single parameter variant of open3
-# for understanding of Config{'sh'} test see exec description in camel book
-my $cmd = 'print(scalar(<STDIN>))';
-$cmd = $Config{'sh'} =~ /sh/ ? "'$cmd'" : cmd_line($cmd);
-eval{$pid = open3 'WRITE', '>&STDOUT', 'ERROR', "$perl -e " . $cmd; };
-if ($@) {
- print "error $@\n";
- print "not ok 22\n";
-}
-else {
- print WRITE "ok 22\n";
- waitpid $pid, 0;
-}
diff --git a/contrib/perl5/t/lib/ops.t b/contrib/perl5/t/lib/ops.t
deleted file mode 100755
index 56b1bac..0000000
--- a/contrib/perl5/t/lib/ops.t
+++ /dev/null
@@ -1,29 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
-}
-
-print "1..2\n";
-
-eval <<'EOP';
- no ops 'fileno'; # equiv to "perl -M-ops=fileno"
- $a = fileno STDIN;
-EOP
-
-print $@ =~ /trapped/ ? "ok 1\n" : "not ok 1\n# $@\n";
-
-eval <<'EOP';
- use ops ':default'; # equiv to "perl -M(as above) -Mops=:default"
- eval 1;
-EOP
-
-print $@ =~ /trapped/ ? "ok 2\n" : "not ok 2\n# $@\n";
-
-1;
diff --git a/contrib/perl5/t/lib/parsewords.t b/contrib/perl5/t/lib/parsewords.t
deleted file mode 100755
index 261d81f..0000000
--- a/contrib/perl5/t/lib/parsewords.t
+++ /dev/null
@@ -1,110 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use warnings;
-use Text::ParseWords;
-
-print "1..18\n";
-
-@words = shellwords(qq(foo "bar quiz" zoo));
-print "not " if $words[0] ne 'foo';
-print "ok 1\n";
-print "not " if $words[1] ne 'bar quiz';
-print "ok 2\n";
-print "not " if $words[2] ne 'zoo';
-print "ok 3\n";
-
-{
- # Gonna get some undefined things back
- no warnings 'uninitialized' ;
-
- # Test quotewords() with other parameters and null last field
- @words = quotewords(':+', 1, 'foo:::"bar:foo":zoo zoo:');
- print "not " unless join(";", @words) eq qq(foo;"bar:foo";zoo zoo;);
- print "ok 4\n";
-}
-
-# Test $keep eq 'delimiters' and last field zero
-@words = quotewords('\s+', 'delimiters', '4 3 2 1 0');
-print "not " unless join(";", @words) eq qq(4; ;3; ;2; ;1; ;0);
-print "ok 5\n";
-
-# Big ol' nasty test (thanks, Joerk!)
-$string = 'aaaa"bbbbb" cc\\ cc \\\\\\"dddd" eee\\\\\\"ffff" "gg"';
-
-# First with $keep == 1
-$result = join('|', parse_line('\s+', 1, $string));
-print "not " unless $result eq 'aaaa"bbbbb"|cc\\ cc|\\\\\\"dddd" eee\\\\\\"ffff"|"gg"';
-print "ok 6\n";
-
-# Now, $keep == 0
-$result = join('|', parse_line('\s+', 0, $string));
-print "not " unless $result eq 'aaaabbbbb|cc cc|\\"dddd eee\\"ffff|gg';
-print "ok 7\n";
-
-# Now test single quote behavior
-$string = 'aaaa"bbbbb" cc\\ cc \\\\\\"dddd\' eee\\\\\\"ffff\' gg';
-$result = join('|', parse_line('\s+', 0, $string));
-print "not " unless $result eq 'aaaabbbbb|cc cc|\\"dddd eee\\\\\\"ffff|gg';
-print "ok 8\n";
-
-# Make sure @nested_quotewords does the right thing
-@lists = nested_quotewords('\s+', 0, 'a b c', '1 2 3', 'x y z');
-print "not " unless (@lists == 3 && @{$lists[0]} == 3 && @{$lists[1]} == 3 && @{$lists[2]} == 3);
-print "ok 9\n";
-
-# Now test error return
-$string = 'foo bar baz"bach blech boop';
-
-@words = shellwords($string);
-print "not " if (@words);
-print "ok 10\n";
-
-@words = parse_line('s+', 0, $string);
-print "not " if (@words);
-print "ok 11\n";
-
-@words = quotewords('s+', 0, $string);
-print "not " if (@words);
-print "ok 12\n";
-
-{
- # Gonna get some more undefined things back
- no warnings 'uninitialized' ;
-
- @words = nested_quotewords('s+', 0, $string);
- print "not " if (@words);
- print "ok 13\n";
-
- # Now test empty fields
- $result = join('|', parse_line(':', 0, 'foo::0:"":::'));
- print "not " unless ($result eq 'foo||0||||');
- print "ok 14\n";
-
- # Test for 0 in quotes without $keep
- $result = join('|', parse_line(':', 0, ':"0":'));
- print "not " unless ($result eq '|0|');
- print "ok 15\n";
-
- # Test for \001 in quoted string
- $result = join('|', parse_line(':', 0, ':"' . "\001" . '":'));
- print "not " unless ($result eq "|\1|");
- print "ok 16\n";
-
-}
-
-# Now test perlish single quote behavior
-$Text::ParseWords::PERL_SINGLE_QUOTE = 1;
-$string = 'aaaa"bbbbb" cc\ cc \\\\\"dddd\' eee\\\\\"\\\'ffff\' gg';
-$result = join('|', parse_line('\s+', 0, $string));
-print "not " unless $result eq 'aaaabbbbb|cc cc|\"dddd eee\\\\"\'ffff|gg';
-print "ok 17\n";
-
-# test whitespace in the delimiters
-@words = quotewords(' ', 1, '4 3 2 1 0');
-print "not " unless join(";", @words) eq qq(4;3;2;1;0);
-print "ok 18\n";
diff --git a/contrib/perl5/t/lib/peek.t b/contrib/perl5/t/lib/peek.t
deleted file mode 100755
index fe9cb2c..0000000
--- a/contrib/perl5/t/lib/peek.t
+++ /dev/null
@@ -1,312 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bPeek\b/) {
- print "1..0 # Skip: Devel::Peek was not built\n";
- exit 0;
- }
-}
-
-use Devel::Peek;
-
-print "1..17\n";
-
-our $DEBUG = 0;
-open(SAVERR, ">&STDERR") or die "Can't dup STDERR: $!";
-
-sub do_test {
- my $pattern = pop;
- if (open(OUT,">peek$$")) {
- open(STDERR, ">&OUT") or die "Can't dup OUT: $!";
- Dump($_[1]);
- open(STDERR, ">&SAVERR") or die "Can't restore STDERR: $!";
- close(OUT);
- if (open(IN, "peek$$")) {
- local $/;
- $pattern =~ s/\$ADDR/0x[[:xdigit:]]+/g;
- print $pattern, "\n" if $DEBUG;
- my $dump = <IN>;
- print $dump, "\n" if $DEBUG;
- print "[$dump] vs [$pattern]\nnot " unless $dump =~ /$pattern/ms;
- print "ok $_[0]\n";
- close(IN);
- } else {
- die "$0: failed to open peek$$: !\n";
- }
- } else {
- die "$0: failed to create peek$$: $!\n";
- }
-}
-
-our $a;
-our $b;
-my $c;
-local $d = 0;
-
-do_test( 1,
- $a = "foo",
-'SV = PV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(POK,pPOK\\)
- PV = $ADDR "foo"\\\0
- CUR = 3
- LEN = 4'
- );
-
-do_test( 2,
- "bar",
-'SV = PV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(.*POK,READONLY,pPOK\\)
- PV = $ADDR "bar"\\\0
- CUR = 3
- LEN = 4');
-
-do_test( 3,
- $b = 123,
-'SV = IV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(IOK,pIOK\\)
- IV = 123');
-
-do_test( 4,
- 456,
-'SV = IV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(.*IOK,READONLY,pIOK\\)
- IV = 456');
-
-do_test( 5,
- $c = 456,
-'SV = IV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(PADBUSY,PADMY,IOK,pIOK\\)
- IV = 456');
-
-do_test( 6,
- $c + $d,
-'SV = NV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(PADTMP,NOK,pNOK\\)
- NV = 456');
-
-($d = "789") += 0.1;
-
-do_test( 7,
- $d,
-'SV = PVNV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(NOK,pNOK\\)
- IV = 0
- NV = 789\\.(?:1(?:000+\d+)?|0999+\d+)
- PV = $ADDR "789"\\\0
- CUR = 3
- LEN = 4');
-
-do_test( 8,
- 0xabcd,
-'SV = IV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(.*IOK,READONLY,pIOK,IsUV\\)
- UV = 43981');
-
-do_test( 9,
- undef,
-'SV = NULL\\(0x0\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(\\)');
-
-do_test(10,
- \$a,
-'SV = RV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(ROK\\)
- RV = $ADDR
- SV = PV\\($ADDR\\) at $ADDR
- REFCNT = 2
- FLAGS = \\(POK,pPOK\\)
- PV = $ADDR "foo"\\\0
- CUR = 3
- LEN = 4');
-
-do_test(11,
- [$b,$c],
-'SV = RV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(ROK\\)
- RV = $ADDR
- SV = PVAV\\($ADDR\\) at $ADDR
- REFCNT = 2
- FLAGS = \\(\\)
- IV = 0
- NV = 0
- ARRAY = $ADDR
- FILL = 1
- MAX = 1
- ARYLEN = 0x0
- FLAGS = \\(REAL\\)
- Elt No. 0
- SV = IV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(IOK,pIOK\\)
- IV = 123
- Elt No. 1
- SV = PVNV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(IOK,NOK,pIOK,pNOK\\)
- IV = 456
- NV = 456
- PV = 0');
-
-do_test(12,
- {$b=>$c},
-'SV = RV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(ROK\\)
- RV = $ADDR
- SV = PVHV\\($ADDR\\) at $ADDR
- REFCNT = 2
- FLAGS = \\(SHAREKEYS\\)
- IV = 1
- NV = 0
- ARRAY = $ADDR \\(0:7, 1:1\\)
- hash quality = 150.0%
- KEYS = 1
- FILL = 1
- MAX = 7
- RITER = -1
- EITER = 0x0
- Elt "123" HASH = $ADDR
- SV = PVNV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(IOK,NOK,pIOK,pNOK\\)
- IV = 456
- NV = 456
- PV = 0');
-
-do_test(13,
- sub(){@_},
-'SV = RV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(ROK\\)
- RV = $ADDR
- SV = PVCV\\($ADDR\\) at $ADDR
- REFCNT = 2
- FLAGS = \\(PADBUSY,PADMY,POK,pPOK,ANON\\)
- IV = 0
- NV = 0
- PROTOTYPE = ""
- COMP_STASH = $ADDR\\t"main"
- START = $ADDR ===> \\d+
- ROOT = $ADDR
- XSUB = 0x0
- XSUBANY = 0
- GVGV::GV = $ADDR\\t"main" :: "__ANON__[^"]*"
- FILE = ".*\\b(?i:peek\\.t)"
- DEPTH = 0
-(?: MUTEXP = $ADDR
- OWNER = $ADDR
-)? FLAGS = 0x4
- PADLIST = $ADDR
- OUTSIDE = $ADDR \\(MAIN\\)');
-
-do_test(14,
- \&do_test,
-'SV = RV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(ROK\\)
- RV = $ADDR
- SV = PVCV\\($ADDR\\) at $ADDR
- REFCNT = (3|4)
- FLAGS = \\(\\)
- IV = 0
- NV = 0
- COMP_STASH = $ADDR\\t"main"
- START = $ADDR ===> \\d+
- ROOT = $ADDR
- XSUB = 0x0
- XSUBANY = 0
- GVGV::GV = $ADDR\\t"main" :: "do_test"
- FILE = ".*\\b(?i:peek\\.t)"
- DEPTH = 1
-(?: MUTEXP = $ADDR
- OWNER = $ADDR
-)? FLAGS = 0x0
- PADLIST = $ADDR
- \\d+\\. $ADDR \\("\\$pattern" \\d+-\\d+\\)
- \\d+\\. $ADDR \\(FAKE "\\$DEBUG" 0-\\d+\\)
- \\d+\\. $ADDR \\("\\$dump" \\d+-\\d+\\)
- OUTSIDE = $ADDR \\(MAIN\\)');
-
-do_test(15,
- qr(tic),
-'SV = RV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(ROK\\)
- RV = $ADDR
- SV = PVMG\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(OBJECT,RMG\\)
- IV = 0
- NV = 0
- PV = 0
- MAGIC = $ADDR
- MG_VIRTUAL = $ADDR
- MG_TYPE = \'r\'
- MG_OBJ = $ADDR
- STASH = $ADDR\\t"Regexp"');
-
-do_test(16,
- (bless {}, "Tac"),
-'SV = RV\\($ADDR\\) at $ADDR
- REFCNT = 1
- FLAGS = \\(ROK\\)
- RV = $ADDR
- SV = PVHV\\($ADDR\\) at $ADDR
- REFCNT = 2
- FLAGS = \\(OBJECT,SHAREKEYS\\)
- IV = 0
- NV = 0
- STASH = $ADDR\\t"Tac"
- ARRAY = 0x0
- KEYS = 0
- FILL = 0
- MAX = 7
- RITER = -1
- EITER = 0x0');
-
-do_test(17,
- *a,
-'SV = PVGV\\($ADDR\\) at $ADDR
- REFCNT = 5
- FLAGS = \\(GMG,SMG,MULTI(?:,IN_PAD)?\\)
- IV = 0
- NV = 0
- MAGIC = $ADDR
- MG_VIRTUAL = &PL_vtbl_glob
- MG_TYPE = \'\\*\'
- MG_OBJ = $ADDR
- NAME = "a"
- NAMELEN = 1
- GvSTASH = $ADDR\\t"main"
- GP = $ADDR
- SV = $ADDR
- REFCNT = 1
- IO = 0x0
- FORM = 0x0
- AV = 0x0
- HV = 0x0
- CV = 0x0
- CVGEN = 0x0
- GPFLAGS = 0x0
- LINE = \\d+
- FILE = ".*\\b(?i:peek\\.t)"
- FLAGS = $ADDR
- EGV = $ADDR\\t"a"');
-
-END {
- 1 while unlink("peek$$");
-}
diff --git a/contrib/perl5/t/lib/ph.t b/contrib/perl5/t/lib/ph.t
deleted file mode 100755
index de27dee..0000000
--- a/contrib/perl5/t/lib/ph.t
+++ /dev/null
@@ -1,96 +0,0 @@
-#!./perl
-
-# Check for presence and correctness of .ph files; for now,
-# just socket.ph and pals.
-# -- Kurt Starsinic <kstar@isinet.com>
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-# All the constants which Socket.pm tries to make available:
-my @possibly_defined = qw(
- INADDR_ANY INADDR_LOOPBACK INADDR_NONE AF_802 AF_APPLETALK AF_CCITT
- AF_CHAOS AF_DATAKIT AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK
- AF_INET AF_LAT AF_MAX AF_NBS AF_NIT AF_NS AF_OSI AF_OSINET AF_PUP
- AF_SNA AF_UNIX AF_UNSPEC AF_X25 MSG_DONTROUTE MSG_MAXIOVLEN MSG_OOB
- MSG_PEEK PF_802 PF_APPLETALK PF_CCITT PF_CHAOS PF_DATAKIT PF_DECnet PF_DLI
- PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_LAT PF_MAX PF_NBS PF_NIT
- PF_NS PF_OSI PF_OSINET PF_PUP PF_SNA PF_UNIX PF_UNSPEC PF_X25 SOCK_DGRAM
- SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM SOL_SOCKET SOMAXCONN
- SO_ACCEPTCONN SO_BROADCAST SO_DEBUG SO_DONTLINGER SO_DONTROUTE SO_ERROR
- SO_KEEPALIVE SO_LINGER SO_OOBINLINE SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO
- SO_REUSEADDR SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO SO_TYPE SO_USELOOPBACK
-);
-
-
-# The libraries which I'm going to require:
-my @libs = qw(Socket "sys/types.ph" "sys/socket.ph" "netinet/in.ph");
-
-
-# These are defined by Socket.pm even if the C header files don't define them:
-my %ok_to_miss = (
- INADDR_NONE => 1,
- INADDR_LOOPBACK => 1,
-);
-
-
-my $total_tests = scalar @libs + scalar @possibly_defined;
-my $i = 0;
-
-print "1..$total_tests\n";
-
-
-foreach (@libs) {
- $i++;
-
- if (eval "require $_" ) {
- print "ok $i\n";
- } else {
- print "# Skipping tests; $_ may be missing\n";
- foreach ($i .. $total_tests) { print "ok $_\n" }
- exit;
- }
-}
-
-
-foreach (@possibly_defined) {
- $i++;
-
- $pm_val = eval "Socket::$_()";
- $ph_val = eval "main::$_()";
-
- if (defined $pm_val and !defined $ph_val) {
- if ($ok_to_miss{$_}) { print "ok $i\n" }
- else { print "not ok $i\n" }
- next;
- } elsif (defined $ph_val and !defined $pm_val) {
- print "not ok $i\n";
- next;
- }
-
- # Socket.pm converts these to network byte order, so we convert the
- # socket.ph version to match; note that these cases skip the following
- # `elsif', which is only applied to _numeric_ values, not literal
- # bitmasks.
- if ($_ eq 'INADDR_ANY'
- or $_ eq 'INADDR_LOOPBACK'
- or $_ eq 'INADDR_NONE') {
- $ph_val = pack("N*", $ph_val); # htonl(3) equivalent
- }
-
- # Since Socket.pm and socket.ph wave their hands over macros differently,
- # they could return functionally equivalent bitmaps with different numeric
- # interpretations (due to sign extension). The only apparent case of this
- # is SO_DONTLINGER (only on Solaris, and deprecated, at that):
- elsif ($pm_val != $ph_val) {
- $pm_val = oct(sprintf "0x%lx", $pm_val);
- $ph_val = oct(sprintf "0x%lx", $ph_val);
- }
-
- if ($pm_val == $ph_val) { print "ok $i\n" }
- else { print "not ok $i\n" }
-}
-
-
diff --git a/contrib/perl5/t/lib/posix.t b/contrib/perl5/t/lib/posix.t
deleted file mode 100755
index 994704a..0000000
--- a/contrib/perl5/t/lib/posix.t
+++ /dev/null
@@ -1,137 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($^O ne 'VMS' and $Config{'extensions'} !~ /\bPOSIX\b/) {
- print "1..0\n";
- exit 0;
- }
-}
-
-use POSIX qw(fcntl_h signal_h limits_h _exit getcwd open read strftime write);
-use strict subs;
-
-$| = 1;
-print "1..27\n";
-
-$Is_W32 = $^O eq 'MSWin32';
-$Is_Dos = $^O eq 'dos';
-
-$testfd = open("TEST", O_RDONLY, 0) and print "ok 1\n";
-read($testfd, $buffer, 9) if $testfd > 2;
-print $buffer eq "#!./perl\n" ? "ok 2\n" : "not ok 2\n";
-
-write(1,"ok 3\nnot ok 3\n", 5);
-
-if ($Is_Dos) {
- for (4..5) {
- print "ok $_ # skipped, no pipe() support on dos\n";
- }
-} else {
-@fds = POSIX::pipe();
-print $fds[0] > $testfd ? "ok 4\n" : "not ok 4\n";
-CORE::open($reader = \*READER, "<&=".$fds[0]);
-CORE::open($writer = \*WRITER, ">&=".$fds[1]);
-print $writer "ok 5\n";
-close $writer;
-print <$reader>;
-close $reader;
-}
-
-if ($Is_W32 || $Is_Dos) {
- for (6..11) {
- print "ok $_ # skipped, no sigaction support on win32/dos\n";
- }
-}
-else {
-$sigset = new POSIX::SigSet 1,3;
-delset $sigset 1;
-if (!ismember $sigset 1) { print "ok 6\n" }
-if (ismember $sigset 3) { print "ok 7\n" }
-$mask = new POSIX::SigSet &SIGINT;
-$action = new POSIX::SigAction 'main::SigHUP', $mask, 0;
-sigaction(&SIGHUP, $action);
-$SIG{'INT'} = 'SigINT';
-kill 'HUP', $$;
-sleep 1;
-print "ok 11\n";
-
-sub SigHUP {
- print "ok 8\n";
- kill 'INT', $$;
- sleep 2;
- print "ok 9\n";
-}
-
-sub SigINT {
- print "ok 10\n";
-}
-}
-
-print &_POSIX_OPEN_MAX > $fds[1] ? "ok 12\n" : "not ok 12\n";
-
-print getcwd() =~ m#/t$# ? "ok 13\n" : "not ok 13\n";
-
-# Check string conversion functions.
-
-if ($Config{d_strtod}) {
- $lc = &POSIX::setlocale(&POSIX::LC_NUMERIC, 'C') if $Config{d_setlocale};
- ($n, $x) = &POSIX::strtod('3.14159_OR_SO');
-# Using long double NVs may introduce greater accuracy than wanted.
- $n =~ s/^3.14158999\d*$/3.14159/
- if $Config{uselongdouble} eq 'define';
- print (($n == 3.14159) && ($x == 6) ? "ok 14\n" : "not ok 14\n");
- &POSIX::setlocale(&POSIX::LC_NUMERIC, $lc) if $Config{d_setlocale};
-} else { print "# strtod not present\n", "ok 14\n"; }
-
-if ($Config{d_strtol}) {
- ($n, $x) = &POSIX::strtol('21_PENGUINS');
- print (($n == 21) && ($x == 9) ? "ok 15\n" : "not ok 15\n");
-} else { print "# strtol not present\n", "ok 15\n"; }
-
-if ($Config{d_strtoul}) {
- ($n, $x) = &POSIX::strtoul('88_TEARS');
- print (($n == 88) && ($x == 6) ? "ok 16\n" : "not ok 16\n");
-} else { print "# strtoul not present\n", "ok 16\n"; }
-
-# Pick up whether we're really able to dynamically load everything.
-print &POSIX::acos(1.0) == 0.0 ? "ok 17\n" : "not ok 17\n";
-
-# This can coredump if struct tm has a timezone field and we
-# didn't detect it. If this fails, try adding
-# -DSTRUCT_TM_HASZONE to your cflags when compiling ext/POSIX/POSIX.c.
-# See ext/POSIX/hints/sunos_4.pl and ext/POSIX/hints/linux.pl
-print POSIX::strftime("ok 18 # %H:%M, on %D\n", localtime());
-
-# If that worked, validate the mini_mktime() routine's normalisation of
-# input fields to strftime().
-sub try_strftime {
- my $num = shift;
- my $expect = shift;
- my $got = POSIX::strftime("%a %b %d %H:%M:%S %Y %j", @_);
- if ($got eq $expect) {
- print "ok $num\n";
- }
- else {
- print "# expected: $expect\n# got: $got\nnot ok $num\n";
- }
-}
-
-$lc = &POSIX::setlocale(&POSIX::LC_TIME, 'C') if $Config{d_setlocale};
-try_strftime(19, "Wed Feb 28 00:00:00 1996 059", 0,0,0, 28,1,96);
-try_strftime(20, "Thu Feb 29 00:00:60 1996 060", 60,0,-24, 30,1,96);
-try_strftime(21, "Fri Mar 01 00:00:00 1996 061", 0,0,-24, 31,1,96);
-try_strftime(22, "Sun Feb 28 00:00:00 1999 059", 0,0,0, 28,1,99);
-try_strftime(23, "Mon Mar 01 00:00:00 1999 060", 0,0,24, 28,1,99);
-try_strftime(24, "Mon Feb 28 00:00:00 2000 059", 0,0,0, 28,1,100);
-try_strftime(25, "Tue Feb 29 00:00:00 2000 060", 0,0,0, 0,2,100);
-try_strftime(26, "Wed Mar 01 00:00:00 2000 061", 0,0,0, 1,2,100);
-try_strftime(27, "Fri Mar 31 00:00:00 2000 091", 0,0,0, 31,2,100);
-&POSIX::setlocale(&POSIX::LC_TIME, $lc) if $Config{d_setlocale};
-
-$| = 0;
-# The following line assumes buffered output, which may be not true with EMX:
-print '@#!*$@(!@#$' unless ($^O eq 'os2' || $^O eq 'uwin' || $^O eq 'os390');
-_exit(0);
diff --git a/contrib/perl5/t/lib/safe1.t b/contrib/perl5/t/lib/safe1.t
deleted file mode 100755
index 27993d9..0000000
--- a/contrib/perl5/t/lib/safe1.t
+++ /dev/null
@@ -1,68 +0,0 @@
-#!./perl -w
-$|=1;
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
-}
-
-# Tests Todo:
-# 'main' as root
-
-package test; # test from somewhere other than main
-
-use vars qw($bar);
-
-use Opcode 1.00, qw(opdesc opset opset_to_ops opset_to_hex
- opmask_add full_opset empty_opset opcodes opmask define_optag);
-
-use Safe 1.00;
-
-my $last_test; # initalised at end
-print "1..$last_test\n";
-
-my $t = 1;
-my $cpt;
-# create and destroy some automatic Safe compartments first
-$cpt = new Safe or die;
-$cpt = new Safe or die;
-$cpt = new Safe or die;
-
-$cpt = new Safe "Root" or die;
-
-foreach(1..3) {
- $foo = 42;
-
- $cpt->share(qw($foo));
-
- print ${$cpt->varglob('foo')} == 42 ? "ok $t\n" : "not ok $t\n"; $t++;
-
- ${$cpt->varglob('foo')} = 9;
-
- print $foo == 9 ? "ok $t\n" : "not ok $t\n"; $t++;
-
- print $cpt->reval('$foo') == 9 ? "ok $t\n" : "not ok $t\n"; $t++;
- # check 'main' has been changed:
- print $cpt->reval('$::foo') == 9 ? "ok $t\n" : "not ok $t\n"; $t++;
- print $cpt->reval('$main::foo') == 9 ? "ok $t\n" : "not ok $t\n"; $t++;
- # check we can't see our test package:
- print $cpt->reval('$test::foo') ? "not ok $t\n" : "ok $t\n"; $t++;
- print $cpt->reval('${"test::foo"}') ? "not ok $t\n" : "ok $t\n"; $t++;
-
- $cpt->erase; # erase the compartment, e.g., delete all variables
-
- print $cpt->reval('$foo') ? "not ok $t\n" : "ok $t\n"; $t++;
-
- # Note that we *must* use $cpt->varglob here because if we used
- # $Root::foo etc we would still see the original values!
- # This seems to be because the compiler has created an extra ref.
-
- print ${$cpt->varglob('foo')} ? "not ok $t\n" : "ok $t\n"; $t++;
-}
-
-print "ok $last_test\n";
-BEGIN { $last_test = 28 }
diff --git a/contrib/perl5/t/lib/safe2.t b/contrib/perl5/t/lib/safe2.t
deleted file mode 100755
index 4d6c84a..0000000
--- a/contrib/perl5/t/lib/safe2.t
+++ /dev/null
@@ -1,145 +0,0 @@
-#!./perl -w
-$|=1;
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') {
- print "1..0\n";
- exit 0;
- }
- # test 30 rather naughtily expects English error messages
- $ENV{'LC_ALL'} = 'C';
- $ENV{LANGUAGE} = 'C'; # GNU locale extension
-}
-
-# Tests Todo:
-# 'main' as root
-
-use vars qw($bar);
-
-use Opcode 1.00, qw(opdesc opset opset_to_ops opset_to_hex
- opmask_add full_opset empty_opset opcodes opmask define_optag);
-
-use Safe 1.00;
-
-my $last_test; # initalised at end
-print "1..$last_test\n";
-
-# Set up a package namespace of things to be visible to the unsafe code
-$Root::foo = "visible";
-$bar = "invisible";
-
-# Stop perl from moaning about identifies which are apparently only used once
-$Root::foo .= "";
-
-my $cpt;
-# create and destroy a couple of automatic Safe compartments first
-$cpt = new Safe or die;
-$cpt = new Safe or die;
-
-$cpt = new Safe "Root";
-
-$cpt->reval(q{ system("echo not ok 1"); });
-if ($@ =~ /^system trapped by operation mask/) {
- print "ok 1\n";
-} else {
- print "#$@" if $@;
- print "not ok 1\n";
-}
-
-$cpt->reval(q{
- print $foo eq 'visible' ? "ok 2\n" : "not ok 2\n";
- print $main::foo eq 'visible' ? "ok 3\n" : "not ok 3\n";
- print defined($bar) ? "not ok 4\n" : "ok 4\n";
- print defined($::bar) ? "not ok 5\n" : "ok 5\n";
- print defined($main::bar) ? "not ok 6\n" : "ok 6\n";
-});
-print $@ ? "not ok 7\n#$@" : "ok 7\n";
-
-$foo = "ok 8\n";
-%bar = (key => "ok 9\n");
-@baz = (); push(@baz, "o", "10"); $" = 'k ';
-$glob = "ok 11\n";
-@glob = qw(not ok 16);
-
-sub sayok { print "ok @_\n" }
-
-$cpt->share(qw($foo %bar @baz *glob sayok));
-$cpt->share('$"') unless $Config{use5005threads};
-
-$cpt->reval(q{
- package other;
- sub other_sayok { print "ok @_\n" }
- package main;
- print $foo ? $foo : "not ok 8\n";
- print $bar{key} ? $bar{key} : "not ok 9\n";
- (@baz) ? print "@baz\n" : print "not ok 10\n";
- print $glob;
- other::other_sayok(12);
- $foo =~ s/8/14/;
- $bar{new} = "ok 15\n";
- @glob = qw(ok 16);
-});
-print $@ ? "not ok 13\n#$@" : "ok 13\n";
-$" = ' ';
-print $foo, $bar{new}, "@glob\n";
-
-$Root::foo = "not ok 17";
-@{$cpt->varglob('bar')} = qw(not ok 18);
-${$cpt->varglob('foo')} = "ok 17";
-@Root::bar = "ok";
-push(@Root::bar, "18"); # Two steps to prevent "Identifier used only once..."
-
-print "$Root::foo\n";
-print "@{$cpt->varglob('bar')}\n";
-
-use strict;
-
-print 1 ? "ok 19\n" : "not ok 19\n";
-print 1 ? "ok 20\n" : "not ok 20\n";
-
-my $m1 = $cpt->mask;
-$cpt->trap("negate");
-my $m2 = $cpt->mask;
-my @masked = opset_to_ops($m1);
-print $m2 eq opset("negate", @masked) ? "ok 21\n" : "not ok 21\n";
-
-print eval { $cpt->mask("a bad mask") } ? "not ok 22\n" : "ok 22\n";
-
-print $cpt->reval("2 + 2") == 4 ? "ok 23\n" : "not ok 23\n";
-
-$cpt->mask(empty_opset);
-my $t_scalar = $cpt->reval('print wantarray ? "not ok 24\n" : "ok 24\n"');
-print $cpt->reval('@ary=(6,7,8);@ary') == 3 ? "ok 25\n" : "not ok 25\n";
-my @t_array = $cpt->reval('print wantarray ? "ok 26\n" : "not ok 26\n"; (2,3,4)');
-print $t_array[2] == 4 ? "ok 27\n" : "not ok 27\n";
-
-my $t_scalar2 = $cpt->reval('die "foo bar"; 1');
-print defined $t_scalar2 ? "not ok 28\n" : "ok 28\n";
-print $@ =~ /foo bar/ ? "ok 29\n" : "not ok 29\n";
-
-# --- rdo
-
-my $t = 30;
-$cpt->rdo('/non/existant/file.name');
-# The regexp is getting rather baroque.
-print $! =~ /cannot find|No such file|file specification syntax error|A file or directory in the path name does not exist|Invalid argument|Device not configured|file not found|File or directory doesn't exist/i ? "ok $t\n" : "not ok $t # $!\n"; $t++;
-# test #31 is gone.
-print 1 ? "ok $t\n" : "not ok $t\n#$@/$!\n"; $t++;
-
-#my $rdo_file = "tmp_rdo.tpl";
-#if (open X,">$rdo_file") {
-# print X "999\n";
-# close X;
-# $cpt->permit_only('const', 'leaveeval');
-# print $cpt->rdo($rdo_file) == 999 ? "ok $t\n" : "not ok $t\n"; $t++;
-# unlink $rdo_file;
-#}
-#else {
-# print "# test $t skipped, can't open file: $!\nok $t\n"; $t++;
-#}
-
-
-print "ok $last_test\n";
-BEGIN { $last_test = 32 }
diff --git a/contrib/perl5/t/lib/sdbm.t b/contrib/perl5/t/lib/sdbm.t
deleted file mode 100755
index 3221ca4..0000000
--- a/contrib/perl5/t/lib/sdbm.t
+++ /dev/null
@@ -1,429 +0,0 @@
-#!./perl
-
-# $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if (($Config{'extensions'} !~ /\bSDBM_File\b/) && ($^O ne 'VMS')){
- print "1..0\n";
- exit 0;
- }
-}
-
-use strict;
-use warnings;
-
-sub ok
-{
- my $no = shift ;
- my $result = shift ;
-
- print "not " unless $result ;
- print "ok $no\n" ;
-}
-
-require SDBM_File;
-#If Fcntl is not available, try 0x202 or 0x102 for O_RDWR|O_CREAT
-use Fcntl;
-
-print "1..68\n";
-
-unlink <Op_dbmx.*>;
-
-umask(0);
-my %h ;
-ok(1, tie %h,'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640);
-
-my $Dfile = "Op_dbmx.pag";
-if (! -e $Dfile) {
- ($Dfile) = <Op_dbmx.*>;
-}
-if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'dos') {
- print "ok 2 # Skipped: different file permission semantics\n";
-}
-else {
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
- print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n");
-}
-my $i = 0;
-while (my ($key,$value) = each(%h)) {
- $i++;
-}
-print (!$i ? "ok 3\n" : "not ok 3\n");
-
-$h{'goner1'} = 'snork';
-
-$h{'abc'} = 'ABC';
-$h{'def'} = 'DEF';
-$h{'jkl','mno'} = "JKL\034MNO";
-$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
-$h{'a'} = 'A';
-$h{'b'} = 'B';
-$h{'c'} = 'C';
-$h{'d'} = 'D';
-$h{'e'} = 'E';
-$h{'f'} = 'F';
-$h{'g'} = 'G';
-$h{'h'} = 'H';
-$h{'i'} = 'I';
-
-$h{'goner2'} = 'snork';
-delete $h{'goner2'};
-
-untie(%h);
-print (tie(%h,'SDBM_File','Op_dbmx', O_RDWR, 0640) ? "ok 4\n" : "not ok 4\n");
-
-$h{'j'} = 'J';
-$h{'k'} = 'K';
-$h{'l'} = 'L';
-$h{'m'} = 'M';
-$h{'n'} = 'N';
-$h{'o'} = 'O';
-$h{'p'} = 'P';
-$h{'q'} = 'Q';
-$h{'r'} = 'R';
-$h{'s'} = 'S';
-$h{'t'} = 'T';
-$h{'u'} = 'U';
-$h{'v'} = 'V';
-$h{'w'} = 'W';
-$h{'x'} = 'X';
-$h{'y'} = 'Y';
-$h{'z'} = 'Z';
-
-$h{'goner3'} = 'snork';
-
-delete $h{'goner1'};
-delete $h{'goner3'};
-
-my @keys = keys(%h);
-my @values = values(%h);
-
-if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";}
-
-while (my ($key,$value) = each(%h)) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";}
-
-@keys = ('blurfl', keys(%h), 'dyick');
-if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";}
-
-$h{'foo'} = '';
-$h{''} = 'bar';
-
-# check cache overflow and numeric keys and contents
-my $ok = 1;
-for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; }
-for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; }
-print ($ok ? "ok 8\n" : "not ok 8\n");
-
-my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat($Dfile);
-print ($size > 0 ? "ok 9\n" : "not ok 9\n");
-
-@h{0..200} = 200..400;
-my @foo = @h{0..200};
-print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n";
-
-print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n");
-print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n");
-
-
-{
- # sub-class test
-
- package Another ;
-
- use strict ;
- use warnings ;
-
- open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ;
- print FILE <<'EOM' ;
-
- package SubDB ;
-
- use strict ;
- use warnings ;
- use vars qw( @ISA @EXPORT) ;
-
- require Exporter ;
- use SDBM_File;
- @ISA=qw(SDBM_File);
- @EXPORT = @SDBM_File::EXPORT if defined @SDBM_File::EXPORT ;
-
- sub STORE {
- my $self = shift ;
- my $key = shift ;
- my $value = shift ;
- $self->SUPER::STORE($key, $value * 2) ;
- }
-
- sub FETCH {
- my $self = shift ;
- my $key = shift ;
- $self->SUPER::FETCH($key) - 1 ;
- }
-
- sub A_new_method
- {
- my $self = shift ;
- my $key = shift ;
- my $value = $self->FETCH($key) ;
- return "[[$value]]" ;
- }
-
- 1 ;
-EOM
-
- close FILE ;
-
- BEGIN { push @INC, '.'; }
-
- eval 'use SubDB ; use Fcntl ;';
- main::ok(13, $@ eq "") ;
- my %h ;
- my $X ;
- eval '
- $X = tie(%h, "SubDB","dbhash_tmp", O_RDWR|O_CREAT, 0640 );
- ' ;
-
- main::ok(14, $@ eq "") ;
-
- my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ;
- main::ok(15, $@ eq "") ;
- main::ok(16, $ret == 5) ;
-
- $ret = eval '$X->A_new_method("fred") ' ;
- main::ok(17, $@ eq "") ;
- main::ok(18, $ret eq "[[5]]") ;
-
- undef $X;
- untie(%h);
- unlink "SubDB.pm", <dbhash_tmp.*> ;
-
-}
-
-ok(19, !exists $h{'goner1'});
-ok(20, exists $h{'foo'});
-
-untie %h;
-unlink <Op_dbmx*>, $Dfile;
-
-{
- # DBM Filter tests
- use strict ;
- use warnings ;
- my (%h, $db) ;
- my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
-
- sub checkOutput
- {
- my($fk, $sk, $fv, $sv) = @_ ;
- return
- $fetch_key eq $fk && $store_key eq $sk &&
- $fetch_value eq $fv && $store_value eq $sv &&
- $_ eq 'original' ;
- }
-
- unlink <Op_dbmx*>;
- ok(21, $db = tie(%h, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- $db->filter_fetch_key (sub { $fetch_key = $_ }) ;
- $db->filter_store_key (sub { $store_key = $_ }) ;
- $db->filter_fetch_value (sub { $fetch_value = $_}) ;
- $db->filter_store_value (sub { $store_value = $_ }) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- # fk sk fv sv
- ok(22, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(23, $h{"fred"} eq "joe");
- # fk sk fv sv
- ok(24, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(25, $db->FIRSTKEY() eq "fred") ;
- # fk sk fv sv
- ok(26, checkOutput( "fred", "", "", "")) ;
-
- # replace the filters, but remember the previous set
- my ($old_fk) = $db->filter_fetch_key
- (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
- my ($old_sk) = $db->filter_store_key
- (sub { $_ = lc $_ ; $store_key = $_ }) ;
- my ($old_fv) = $db->filter_fetch_value
- (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
- my ($old_sv) = $db->filter_store_value
- (sub { s/o/x/g; $store_value = $_ }) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"Fred"} = "Joe" ;
- # fk sk fv sv
- ok(27, checkOutput( "", "fred", "", "Jxe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(28, $h{"Fred"} eq "[Jxe]");
- # fk sk fv sv
- ok(29, checkOutput( "", "fred", "[Jxe]", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(30, $db->FIRSTKEY() eq "FRED") ;
- # fk sk fv sv
- ok(31, checkOutput( "FRED", "", "", "")) ;
-
- # put the original filters back
- $db->filter_fetch_key ($old_fk);
- $db->filter_store_key ($old_sk);
- $db->filter_fetch_value ($old_fv);
- $db->filter_store_value ($old_sv);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(32, checkOutput( "", "fred", "", "joe")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(33, $h{"fred"} eq "joe");
- ok(34, checkOutput( "", "fred", "joe", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(35, $db->FIRSTKEY() eq "fred") ;
- ok(36, checkOutput( "fred", "", "", "")) ;
-
- # delete the filters
- $db->filter_fetch_key (undef);
- $db->filter_store_key (undef);
- $db->filter_fetch_value (undef);
- $db->filter_store_value (undef);
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- $h{"fred"} = "joe" ;
- ok(37, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(38, $h{"fred"} eq "joe");
- ok(39, checkOutput( "", "", "", "")) ;
-
- ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
- ok(40, $db->FIRSTKEY() eq "fred") ;
- ok(41, checkOutput( "", "", "", "")) ;
-
- undef $db ;
- untie %h;
- unlink <Op_dbmx*>;
-}
-
-{
- # DBM Filter with a closure
-
- use strict ;
- use warnings ;
- my (%h, $db) ;
-
- unlink <Op_dbmx*>;
- ok(42, $db = tie(%h, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- my %result = () ;
-
- sub Closure
- {
- my ($name) = @_ ;
- my $count = 0 ;
- my @kept = () ;
-
- return sub { ++$count ;
- push @kept, $_ ;
- $result{$name} = "$name - $count: [@kept]" ;
- }
- }
-
- $db->filter_store_key(Closure("store key")) ;
- $db->filter_store_value(Closure("store value")) ;
- $db->filter_fetch_key(Closure("fetch key")) ;
- $db->filter_fetch_value(Closure("fetch value")) ;
-
- $_ = "original" ;
-
- $h{"fred"} = "joe" ;
- ok(43, $result{"store key"} eq "store key - 1: [fred]");
- ok(44, $result{"store value"} eq "store value - 1: [joe]");
- ok(45, !defined $result{"fetch key"} );
- ok(46, !defined $result{"fetch value"} );
- ok(47, $_ eq "original") ;
-
- ok(48, $db->FIRSTKEY() eq "fred") ;
- ok(49, $result{"store key"} eq "store key - 1: [fred]");
- ok(50, $result{"store value"} eq "store value - 1: [joe]");
- ok(51, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(52, ! defined $result{"fetch value"} );
- ok(53, $_ eq "original") ;
-
- $h{"jim"} = "john" ;
- ok(54, $result{"store key"} eq "store key - 2: [fred jim]");
- ok(55, $result{"store value"} eq "store value - 2: [joe john]");
- ok(56, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(57, ! defined $result{"fetch value"} );
- ok(58, $_ eq "original") ;
-
- ok(59, $h{"fred"} eq "joe");
- ok(60, $result{"store key"} eq "store key - 3: [fred jim fred]");
- ok(61, $result{"store value"} eq "store value - 2: [joe john]");
- ok(62, $result{"fetch key"} eq "fetch key - 1: [fred]");
- ok(63, $result{"fetch value"} eq "fetch value - 1: [joe]");
- ok(64, $_ eq "original") ;
-
- undef $db ;
- untie %h;
- unlink <Op_dbmx*>;
-}
-
-{
- # DBM Filter recursion detection
- use strict ;
- use warnings ;
- my (%h, $db) ;
- unlink <Op_dbmx*>;
-
- ok(65, $db = tie(%h, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640)) ;
-
- $db->filter_store_key (sub { $_ = $h{$_} }) ;
-
- eval '$h{1} = 1234' ;
- ok(66, $@ =~ /^recursion detected in filter_store_key at/ );
-
- undef $db ;
- untie %h;
- unlink <Op_dbmx*>;
-}
-
-{
- # Bug ID 20001013.009
- #
- # test that $hash{KEY} = undef doesn't produce the warning
- # Use of uninitialized value in null operation
- use warnings ;
- use strict ;
- use SDBM_File ;
-
- unlink <Op_dbmx*>;
- my %h ;
- my $a = "";
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
-
- ok(67, tie(%h, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640)) ;
- $h{ABC} = undef;
- ok(68, $a eq "") ;
-
- untie %h;
- unlink <Op_dbmx*>;
-}
diff --git a/contrib/perl5/t/lib/searchdict.t b/contrib/perl5/t/lib/searchdict.t
deleted file mode 100755
index c36fdb8..0000000
--- a/contrib/perl5/t/lib/searchdict.t
+++ /dev/null
@@ -1,87 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..4\n";
-
-$DICT = <<EOT;
-Aarhus
-Aaron
-Ababa
-aback
-abaft
-abandon
-abandoned
-abandoning
-abandonment
-abandons
-abase
-abased
-abasement
-abasements
-abases
-abash
-abashed
-abashes
-abashing
-abasing
-abate
-abated
-abatement
-abatements
-abater
-abates
-abating
-Abba
-EOT
-
-use Search::Dict;
-
-open(DICT, "+>dict-$$") or die "Can't create dict-$$: $!";
-binmode DICT; # To make length expected one.
-print DICT $DICT;
-
-my $pos = look *DICT, "Ababa";
-chomp($word = <DICT>);
-print "not " if $pos < 0 || $word ne "Ababa";
-print "ok 1\n";
-
-if (ord('a') > ord('A') ) { # ASCII
-
- $pos = look *DICT, "foo";
- chomp($word = <DICT>);
-
- print "not " if $pos != length($DICT); # will search to end of file
- print "ok 2\n";
-
- my $pos = look *DICT, "abash";
- chomp($word = <DICT>);
- print "not " if $pos < 0 || $word ne "abash";
- print "ok 3\n";
-
-}
-else { # EBCDIC systems e.g. os390
-
- $pos = look *DICT, "FOO";
- chomp($word = <DICT>);
-
- print "not " if $pos != length($DICT); # will search to end of file
- print "ok 2\n";
-
- my $pos = look *DICT, "Abba";
- chomp($word = <DICT>);
- print "not " if $pos < 0 || $word ne "Abba";
- print "ok 3\n";
-}
-
-$pos = look *DICT, "aarhus", 1, 1;
-chomp($word = <DICT>);
-
-print "not " if $pos < 0 || $word ne "Aarhus";
-print "ok 4\n";
-
-close DICT or die "cannot close";
-unlink "dict-$$";
diff --git a/contrib/perl5/t/lib/selectsaver.t b/contrib/perl5/t/lib/selectsaver.t
deleted file mode 100755
index 3b58d70..0000000
--- a/contrib/perl5/t/lib/selectsaver.t
+++ /dev/null
@@ -1,28 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..3\n";
-
-use SelectSaver;
-
-open(FOO, ">foo-$$") || die;
-
-print "ok 1\n";
-{
- my $saver = new SelectSaver(FOO);
- print "foo\n";
-}
-
-# Get data written to file
-open(FOO, "foo-$$") || die;
-chomp($foo = <FOO>);
-close FOO;
-unlink "foo-$$";
-
-print "ok 2\n" if $foo eq "foo";
-
-print "ok 3\n";
diff --git a/contrib/perl5/t/lib/selfloader.t b/contrib/perl5/t/lib/selfloader.t
deleted file mode 100755
index 6b9c244..0000000
--- a/contrib/perl5/t/lib/selfloader.t
+++ /dev/null
@@ -1,201 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- $dir = "self-$$";
- @INC = $dir;
- push @INC, '../lib';
-
- print "1..19\n";
-
- # First we must set up some selfloader files
- mkdir $dir, 0755 or die "Can't mkdir $dir: $!";
-
- open(FOO, ">$dir/Foo.pm") or die;
- print FOO <<'EOT';
-package Foo;
-use SelfLoader;
-
-sub new { bless {}, shift }
-sub foo;
-sub bar;
-sub bazmarkhianish;
-sub a;
-sub never; # declared but definition should never be read
-1;
-__DATA__
-
-sub foo { shift; shift || "foo" };
-
-sub bar { shift; shift || "bar" }
-
-sub bazmarkhianish { shift; shift || "baz" }
-
-package sheep;
-sub bleat { shift; shift || "baa" }
-
-__END__
-sub never { die "D'oh" }
-EOT
-
- close(FOO);
-
- open(BAR, ">$dir/Bar.pm") or die;
- print BAR <<'EOT';
-package Bar;
-use SelfLoader;
-
-@ISA = 'Baz';
-
-sub new { bless {}, shift }
-sub a;
-
-1;
-__DATA__
-
-sub a { 'a Bar'; }
-sub b { 'b Bar' }
-
-__END__ DATA
-sub never { die "D'oh" }
-EOT
-
- close(BAR);
-};
-
-
-package Baz;
-
-sub a { 'a Baz' }
-sub b { 'b Baz' }
-sub c { 'c Baz' }
-
-
-package main;
-use Foo;
-use Bar;
-
-$foo = new Foo;
-
-print "not " unless $foo->foo eq 'foo'; # selfloaded first time
-print "ok 1\n";
-
-print "not " unless $foo->foo eq 'foo'; # regular call
-print "ok 2\n";
-
-# Try an undefined method
-eval {
- $foo->will_fail;
-};
-if ($@ =~ /^Undefined subroutine/) {
- print "ok 3\n";
-} else {
- print "not ok 3 $@\n";
-}
-
-# Used to be trouble with this
-eval {
- my $foo = new Foo;
- die "oops";
-};
-if ($@ =~ /oops/) {
- print "ok 4\n";
-} else {
- print "not ok 4 $@\n";
-}
-
-# Pass regular expression variable to autoloaded function. This used
-# to go wrong in AutoLoader because it used regular expressions to generate
-# autoloaded filename.
-"foo" =~ /(\w+)/;
-print "not " unless $1 eq 'foo';
-print "ok 5\n";
-
-print "not " unless $foo->bar($1) eq 'foo';
-print "ok 6\n";
-
-print "not " unless $foo->bar($1) eq 'foo';
-print "ok 7\n";
-
-print "not " unless $foo->bazmarkhianish($1) eq 'foo';
-print "ok 8\n";
-
-print "not " unless $foo->bazmarkhianish($1) eq 'foo';
-print "ok 9\n";
-
-# Check nested packages inside __DATA__
-print "not " unless sheep::bleat() eq 'baa';
-print "ok 10\n";
-
-# Now check inheritance:
-
-$bar = new Bar;
-
-# Before anything is SelfLoaded there is no declaration of Foo::b so we should
-# get Baz::b
-print "not " unless $bar->b() eq 'b Baz';
-print "ok 11\n";
-
-# There is no Bar::c so we should get Baz::c
-print "not " unless $bar->c() eq 'c Baz';
-print "ok 12\n";
-
-# This selfloads Bar::a because it is stubbed. It also stubs Bar::b as a side
-# effect
-print "not " unless $bar->a() eq 'a Bar';
-print "ok 13\n";
-
-print "not " unless $bar->b() eq 'b Bar';
-print "ok 14\n";
-
-print "not " unless $bar->c() eq 'c Baz';
-print "ok 15\n";
-
-
-
-# Check that __END__ is honoured
-# Try an subroutine that should never be noticed by selfloader
-eval {
- $foo->never;
-};
-if ($@ =~ /^Undefined subroutine/) {
- print "ok 16\n";
-} else {
- print "not ok 16 $@\n";
-}
-
-# Try to read from the data file handle
-my $foodata = <Foo::DATA>;
-close Foo::DATA;
-if (defined $foodata) {
- print "not ok 17 # $foodata\n";
-} else {
- print "ok 17\n";
-}
-
-# Check that __END__ DATA is honoured
-# Try an subroutine that should never be noticed by selfloader
-eval {
- $bar->never;
-};
-if ($@ =~ /^Undefined subroutine/) {
- print "ok 18\n";
-} else {
- print "not ok 18 $@\n";
-}
-
-# Try to read from the data file handle
-my $bardata = <Bar::DATA>;
-close Bar::DATA;
-if ($bardata ne "sub never { die \"D'oh\" }\n") {
- print "not ok 19 # $bardata\n";
-} else {
- print "ok 19\n";
-}
-
-# cleanup
-END {
-return unless $dir && -d $dir;
-unlink "$dir/Foo.pm", "$dir/Bar.pm";
-rmdir "$dir";
-}
diff --git a/contrib/perl5/t/lib/socket.t b/contrib/perl5/t/lib/socket.t
deleted file mode 100755
index 481fd8f..0000000
--- a/contrib/perl5/t/lib/socket.t
+++ /dev/null
@@ -1,87 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bSocket\b/ &&
- !(($^O eq 'VMS') && $Config{d_socket})) {
- print "1..0\n";
- exit 0;
- }
-}
-
-use Socket;
-
-print "1..8\n";
-
-if (socket(T,PF_INET,SOCK_STREAM,6)) {
- print "ok 1\n";
-
- if (connect(T,pack_sockaddr_in(7,inet_aton("localhost")))){
- print "ok 2\n";
-
- print "# Connected to " .
- inet_ntoa((unpack_sockaddr_in(getpeername(T)))[1])."\n";
-
- syswrite(T,"hello",5);
- $read = sysread(T,$buff,10); # Connection may be granted, then closed!
- while ($read > 0 && length($buff) < 5) {
- # adjust for fact that TCP doesn't guarantee size of reads/writes
- $read = sysread(T,$buff,10,length($buff));
- }
- print(($read == 0 || $buff eq "hello") ? "ok 3\n" : "not ok 3\n");
- }
- else {
- print "# You're allowed to fail tests 2 and 3 if.\n";
- print "# The echo service has been disabled.\n";
- print "# $!\n";
- print "ok 2\n";
- print "ok 3\n";
- }
-}
-else {
- print "# $!\n";
- print "not ok 1\n";
-}
-
-if( socket(S,PF_INET,SOCK_STREAM,6) ){
- print "ok 4\n";
-
- if (connect(S,pack_sockaddr_in(7,INADDR_LOOPBACK))){
- print "ok 5\n";
-
- print "# Connected to " .
- inet_ntoa((unpack_sockaddr_in(getpeername(S)))[1])."\n";
-
- syswrite(S,"olleh",5);
- $read = sysread(S,$buff,10); # Connection may be granted, then closed!
- while ($read > 0 && length($buff) < 5) {
- # adjust for fact that TCP doesn't guarantee size of reads/writes
- $read = sysread(S,$buff,10,length($buff));
- }
- print(($read == 0 || $buff eq "olleh") ? "ok 6\n" : "not ok 6\n");
- }
- else {
- print "# You're allowed to fail tests 5 and 6 if.\n";
- print "# The echo service has been disabled.\n";
- print "# $!\n";
- print "ok 5\n";
- print "ok 6\n";
- }
-}
-else {
- print "# $!\n";
- print "not ok 4\n";
-}
-
-# warnings
-$SIG{__WARN__} = sub {
- ++ $w if $_[0] =~ /^6-ARG sockaddr_in call is deprecated/ ;
-} ;
-$w = 0 ;
-sockaddr_in(1,2,3,4,5,6) ;
-print ($w == 1 ? "not ok 7\n" : "ok 7\n") ;
-use warnings 'Socket' ;
-sockaddr_in(1,2,3,4,5,6) ;
-print ($w == 1 ? "ok 8\n" : "not ok 8\n") ;
diff --git a/contrib/perl5/t/lib/soundex.t b/contrib/perl5/t/lib/soundex.t
deleted file mode 100755
index d35f264..0000000
--- a/contrib/perl5/t/lib/soundex.t
+++ /dev/null
@@ -1,143 +0,0 @@
-#!./perl
-#
-# $Id: soundex.t,v 1.2 1994/03/24 00:30:27 mike Exp $
-#
-# test module for soundex.pl
-#
-# $Log: soundex.t,v $
-# Revision 1.2 1994/03/24 00:30:27 mike
-# Subtle bug (any excuse :-) spotted by Rich Pinder <rpinder@hsc.usc.edu>
-# in the way I handles leasing characters which were different but had
-# the same soundex code. This showed up comparing it with Oracle's
-# soundex output.
-#
-# Revision 1.1 1994/03/02 13:03:02 mike
-# Initial revision
-#
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Text::Soundex;
-
-$test = 0;
-print "1..13\n";
-
-while (<DATA>)
-{
- chop;
- next if /^\s*;?#/;
- next if /^\s*$/;
-
- ++$test;
- $bad = 0;
-
- if (/^eval\s+/)
- {
- ($try = $_) =~ s/^eval\s+//;
-
- eval ($try);
- if ($@)
- {
- $bad++;
- print "not ok $test\n";
- print "# eval '$try' returned $@";
- }
- }
- elsif (/^\(/)
- {
- ($in, $out) = split (':');
-
- $try = "\@expect = $out; \@got = &soundex $in;";
- eval ($try);
-
- if (@expect != @got)
- {
- $bad++;
- print "not ok $test\n";
- print "# expected ", scalar @expect, " results, got ", scalar @got, "\n";
- print "# expected (", join (', ', @expect),
- ") got (", join (', ', @got), ")\n";
- }
- else
- {
- while (@got)
- {
- $expect = shift @expect;
- $got = shift @got;
-
- if ($expect ne $got)
- {
- $bad++;
- print "not ok $test\n";
- print "# expected $expect, got $got\n";
- }
- }
- }
- }
- else
- {
- ($in, $out) = split (':');
-
- $try = "\$expect = $out; \$got = &soundex ($in);";
- eval ($try);
-
- if ($expect ne $got)
- {
- $bad++;
- print "not ok $test\n";
- print "# expected $expect, got $got\n";
- }
- }
-
- print "ok $test\n" unless $bad;
-}
-
-__END__
-#
-# 1..6
-#
-# Knuth's test cases, scalar in, scalar out
-#
-'Euler':'E460'
-'Gauss':'G200'
-'Hilbert':'H416'
-'Knuth':'K530'
-'Lloyd':'L300'
-'Lukasiewicz':'L222'
-#
-# 7..8
-#
-# check default bad code
-#
-'2 + 2 = 4':undef
-undef:undef
-#
-# 9
-#
-# check array in, array out
-#
-('Ellery', 'Ghosh', 'Heilbronn', 'Kant', 'Ladd', 'Lissajous'):('E460', 'G200', 'H416', 'K530', 'L300', 'L222')
-#
-# 10
-#
-# check array with explicit undef
-#
-('Mike', undef, 'Stok'):('M200', undef, 'S320')
-#
-# 11..12
-#
-# check setting $Text::Soundex::noCode
-#
-eval $soundex_nocode = 'Z000';
-('Mike', undef, 'Stok'):('M200', 'Z000', 'S320')
-#
-# 13
-#
-# a subtle difference between me & oracle, spotted by Rich Pinder
-# <rpinder@hsc.usc.edu>
-#
-CZARKOWSKA:C622
diff --git a/contrib/perl5/t/lib/symbol.t b/contrib/perl5/t/lib/symbol.t
deleted file mode 100755
index 03449a3..0000000
--- a/contrib/perl5/t/lib/symbol.t
+++ /dev/null
@@ -1,52 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..8\n";
-
-BEGIN { $_ = 'foo'; } # because Symbol used to clobber $_
-
-use Symbol;
-
-# First check $_ clobbering
-print "not " if $_ ne 'foo';
-print "ok 1\n";
-
-
-# First test gensym()
-$sym1 = gensym;
-print "not " if ref($sym1) ne 'GLOB';
-print "ok 2\n";
-
-$sym2 = gensym;
-
-print "not " if $sym1 eq $sym2;
-print "ok 3\n";
-
-ungensym $sym1;
-
-$sym1 = $sym2 = undef;
-
-
-# Test qualify()
-package foo;
-
-use Symbol qw(qualify); # must import into this package too
-
-qualify("x") eq "foo::x" or print "not ";
-print "ok 4\n";
-
-qualify("x", "FOO") eq "FOO::x" or print "not ";
-print "ok 5\n";
-
-qualify("BAR::x") eq "BAR::x" or print "not ";
-print "ok 6\n";
-
-qualify("STDOUT") eq "main::STDOUT" or print "not ";
-print "ok 7\n";
-
-qualify("ARGV", "FOO") eq "main::ARGV" or print "not ";
-print "ok 8\n";
diff --git a/contrib/perl5/t/lib/syslfs.t b/contrib/perl5/t/lib/syslfs.t
deleted file mode 100755
index 2bdb69d..0000000
--- a/contrib/perl5/t/lib/syslfs.t
+++ /dev/null
@@ -1,265 +0,0 @@
-# NOTE: this file tests how large files (>2GB) work with raw system IO.
-# stdio: open(), tell(), seek(), print(), read() is tested in t/op/lfs.t.
-# If you modify/add tests here, remember to update also t/op/lfs.t.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- # Don't bother if there are no quad offsets.
- if ($Config{lseeksize} < 8) {
- print "1..0 # Skip: no 64-bit file offsets\n";
- exit(0);
- }
- require Fcntl; import Fcntl qw(/^O_/ /^SEEK_/);
-}
-
-use strict;
-
-our @s;
-our $fail;
-
-sub zap {
- close(BIG);
- unlink("big");
- unlink("big1");
- unlink("big2");
-}
-
-sub bye {
- zap();
- exit(0);
-}
-
-my $explained;
-
-sub explain {
- unless ($explained++) {
- print <<EOM;
-#
-# If the lfs (large file support: large meaning larger than two
-# gigabytes) tests are skipped or fail, it may mean either that your
-# process (or process group) is not allowed to write large files
-# (resource limits) or that the file system (the network filesystem?)
-# you are running the tests on doesn't let your user/group have large
-# files (quota) or the filesystem simply doesn't support large files.
-# You may even need to reconfigure your kernel. (This is all very
-# operating system and site-dependent.)
-#
-# Perl may still be able to support large files, once you have
-# such a process, enough quota, and such a (file) system.
-# It is just that the test failed now.
-#
-EOM
- }
- print "1..0 # Skip: @_\n" if @_;
-}
-
-print "# checking whether we have sparse files...\n";
-
-# Known have-nots.
-if ($^O eq 'MSWin32' || $^O eq 'VMS') {
- print "1..0 # Skip: no sparse files in $^O\n";
- bye();
-}
-
-# Known haves that have problems running this test
-# (for example because they do not support sparse files, like UNICOS)
-if ($^O eq 'unicos') {
- print "1..0 # Skip: no sparse files in $^0, unable to test large files\n";
- bye();
-}
-
-# Then try heuristically to deduce whether we have sparse files.
-
-# We'll start off by creating a one megabyte file which has
-# only three "true" bytes. If we have sparseness, we should
-# consume less blocks than one megabyte (assuming nobody has
-# one megabyte blocks...)
-
-sysopen(BIG, "big1", O_WRONLY|O_CREAT|O_TRUNC) or
- do { warn "sysopen big1 failed: $!\n"; bye };
-sysseek(BIG, 1_000_000, SEEK_SET) or
- do { warn "sysseek big1 failed: $!\n"; bye };
-syswrite(BIG, "big") or
- do { warn "syswrite big1 failed; $!\n"; bye };
-close(BIG) or
- do { warn "close big1 failed: $!\n"; bye };
-
-my @s1 = stat("big1");
-
-print "# s1 = @s1\n";
-
-sysopen(BIG, "big2", O_WRONLY|O_CREAT|O_TRUNC) or
- do { warn "sysopen big2 failed: $!\n"; bye };
-sysseek(BIG, 2_000_000, SEEK_SET) or
- do { warn "sysseek big2 failed: $!\n"; bye };
-syswrite(BIG, "big") or
- do { warn "syswrite big2 failed; $!\n"; bye };
-close(BIG) or
- do { warn "close big2 failed: $!\n"; bye };
-
-my @s2 = stat("big2");
-
-print "# s2 = @s2\n";
-
-zap();
-
-unless ($s1[7] == 1_000_003 && $s2[7] == 2_000_003 &&
- $s1[11] == $s2[11] && $s1[12] == $s2[12]) {
- print "1..0 # Skip: no sparse files?\n";
- bye;
-}
-
-print "# we seem to have sparse files...\n";
-
-# By now we better be sure that we do have sparse files:
-# if we are not, the following will hog 5 gigabytes of disk. Ooops.
-# This may fail by producing some signal; run in a subprocess first for safety
-
-$ENV{LC_ALL} = "C";
-
-my $r = system '../perl', '-I../lib', '-e', <<'EOF';
-use Fcntl qw(/^O_/ /^SEEK_/);
-sysopen(BIG, "big", O_WRONLY|O_CREAT|O_TRUNC) or die $!;
-my $sysseek = sysseek(BIG, 5_000_000_000, SEEK_SET);
-my $syswrite = syswrite(BIG, "big");
-exit 0;
-EOF
-
-sysopen(BIG, "big", O_WRONLY|O_CREAT|O_TRUNC) or
- do { warn "sysopen 'big' failed: $!\n"; bye };
-my $sysseek = sysseek(BIG, 5_000_000_000, SEEK_SET);
-unless (! $r && defined $sysseek && $sysseek == 5_000_000_000) {
- $sysseek = 'undef' unless defined $sysseek;
- explain("seeking past 2GB failed: ",
- $r ? 'signal '.($r & 0x7f) : "$! (sysseek returned $sysseek)");
- bye();
-}
-
-# The syswrite will fail if there are are filesize limitations (process or fs).
-my $syswrite = syswrite(BIG, "big");
-print "# syswrite failed: $! (syswrite returned ",
- defined $syswrite ? $syswrite : 'undef', ")\n"
- unless defined $syswrite && $syswrite == 3;
-my $close = close BIG;
-print "# close failed: $!\n" unless $close;
-unless($syswrite && $close) {
- if ($! =~/too large/i) {
- explain("writing past 2GB failed: process limits?");
- } elsif ($! =~ /quota/i) {
- explain("filesystem quota limits?");
- } else {
- explain("error: $!");
- }
- bye();
-}
-
-@s = stat("big");
-
-print "# @s\n";
-
-unless ($s[7] == 5_000_000_003) {
- explain("kernel/fs not configured to use large files?");
- bye();
-}
-
-sub fail () {
- print "not ";
- $fail++;
-}
-
-sub offset ($$) {
- my ($offset_will_be, $offset_want) = @_;
- my $offset_is = eval $offset_will_be;
- unless ($offset_is == $offset_want) {
- print "# bad offset $offset_is, want $offset_want\n";
- my ($offset_func) = ($offset_will_be =~ /^(\w+)/);
- if (unpack("L", pack("L", $offset_want)) == $offset_is) {
- print "# 32-bit wraparound suspected in $offset_func() since\n";
- print "# $offset_want cast into 32 bits equals $offset_is.\n";
- } elsif ($offset_want - unpack("L", pack("L", $offset_want)) - 1
- == $offset_is) {
- print "# 32-bit wraparound suspected in $offset_func() since\n";
- printf "# %s - unpack('L', pack('L', %s)) - 1 equals %s.\n",
- $offset_want,
- $offset_want,
- $offset_is;
- }
- fail;
- }
-}
-
-print "1..17\n";
-
-$fail = 0;
-
-fail unless $s[7] == 5_000_000_003; # exercizes pp_stat
-print "ok 1\n";
-
-fail unless -s "big" == 5_000_000_003; # exercizes pp_ftsize
-print "ok 2\n";
-
-fail unless -e "big";
-print "ok 3\n";
-
-fail unless -f "big";
-print "ok 4\n";
-
-sysopen(BIG, "big", O_RDONLY) or do { warn "sysopen failed: $!\n"; bye };
-
-offset('sysseek(BIG, 4_500_000_000, SEEK_SET)', 4_500_000_000);
-print "ok 5\n";
-
-offset('sysseek(BIG, 0, SEEK_CUR)', 4_500_000_000);
-print "ok 6\n";
-
-offset('sysseek(BIG, 1, SEEK_CUR)', 4_500_000_001);
-print "ok 7\n";
-
-offset('sysseek(BIG, 0, SEEK_CUR)', 4_500_000_001);
-print "ok 8\n";
-
-offset('sysseek(BIG, -1, SEEK_CUR)', 4_500_000_000);
-print "ok 9\n";
-
-offset('sysseek(BIG, 0, SEEK_CUR)', 4_500_000_000);
-print "ok 10\n";
-
-offset('sysseek(BIG, -3, SEEK_END)', 5_000_000_000);
-print "ok 11\n";
-
-offset('sysseek(BIG, 0, SEEK_CUR)', 5_000_000_000);
-print "ok 12\n";
-
-my $big;
-
-fail unless sysread(BIG, $big, 3) == 3;
-print "ok 13\n";
-
-fail unless $big eq "big";
-print "ok 14\n";
-
-# 705_032_704 = (I32)5_000_000_000
-# See that we don't have "big" in the 705_... spot:
-# that would mean that we have a wraparound.
-fail unless sysseek(BIG, 705_032_704, SEEK_SET);
-print "ok 15\n";
-
-my $zero;
-
-fail unless read(BIG, $zero, 3) == 3;
-print "ok 16\n";
-
-fail unless $zero eq "\0\0\0";
-print "ok 17\n";
-
-explain() if $fail;
-
-bye(); # does the necessary cleanup
-
-END {
- unlink "big"; # be paranoid about leaving 5 gig files lying around
-}
-
-# eof
diff --git a/contrib/perl5/t/lib/syslog.t b/contrib/perl5/t/lib/syslog.t
deleted file mode 100755
index cd2fad7..0000000
--- a/contrib/perl5/t/lib/syslog.t
+++ /dev/null
@@ -1,59 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if ($Config{'extensions'} !~ /\bSyslog\b/) {
- print "1..0 # Skip: Sys::Syslog was not built\n";
- exit 0;
- }
-
- require Socket;
-
- # This code inspired by Sys::Syslog::connect():
- require Sys::Hostname;
- my ($host_uniq) = Sys::Hostname::hostname();
- my ($host) = $host_uniq =~ /([A-Za-z0-9_.-]+)/;
-
- if (! defined Socket::inet_aton($host)) {
- print "1..0 # Skip: Can't lookup $host\n";
- exit 0;
- }
-}
-
-BEGIN {
- eval {require Sys::Syslog} or do {
- if ($@ =~ /Your vendor has not/) {
- print "1..0 # Skipped: missing macros\n";
- exit 0;
- }
- }
-}
-
-use Sys::Syslog qw(:DEFAULT setlogsock);
-
-print "1..6\n";
-
-if (Sys::Syslog::_PATH_LOG()) {
- if (-e Sys::Syslog::_PATH_LOG()) {
- print defined(eval { setlogsock('unix') }) ? "ok 1\n" : "not ok 1\n";
- print defined(eval { openlog('perl', 'ndelay', 'local0') }) ? "ok 2\n" : "not ok 2\n";
- print defined(eval { syslog('info', 'test') }) ? "ok 3\n" : "not ok 3\n";
- }
- else {
- for (1..3) {
- print
- "ok $_ # skipping, file ",
- Sys::Syslog::_PATH_LOG(),
- " does not exist\n";
- }
- }
-}
-else {
- for (1..3) { print "ok $_ # skipping, _PATH_LOG unavailable\n" }
-}
-
-print defined(eval { setlogsock('inet') }) ? "ok 4\n" : "not ok 4\n";
-print defined(eval { openlog('perl', 'ndelay', 'local0') }) ? "ok 5\n" : "not ok 5\n";
-print defined(eval { syslog('info', 'test') }) ? "ok 6\n" : "not ok 6\n";
diff --git a/contrib/perl5/t/lib/textfill.t b/contrib/perl5/t/lib/textfill.t
deleted file mode 100755
index 5ff3850..0000000
--- a/contrib/perl5/t/lib/textfill.t
+++ /dev/null
@@ -1,98 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Text::Wrap qw(&fill);
-
-@tests = (split(/\nEND\n/s, <<DONE));
-TEST1
-Cyberdog Information
-
-Cyberdog & Netscape in the news
-Important Press Release regarding Cyberdog and Netscape. Check it out!
-
-Cyberdog Plug-in Support!
-Cyberdog support for Netscape Plug-ins is now available to download! Go
-to the Cyberdog Beta Download page and download it now!
-
-Cyberdog Book
-Check out Jesse Feiler's way-cool book about Cyberdog. You can find
-details out about the book as well as ordering information at Philmont
-Software Mill site.
-
-Java!
-Looking to view Java applets in Cyberdog 1.1 Beta 3? Download and install
-the Mac OS Runtime for Java and try it out!
-
-Cyberdog 1.1 Beta 3
-We hope that Cyberdog and OpenDoc 1.1 will be available within the next
-two weeks. In the meantime, we have released another version of
-Cyberdog, Cyberdog 1.1 Beta 3. This version fixes several bugs that were
-reported to us during out public beta period. You can check out our release
-notes to see what we fixed!
-END
- Cyberdog Information
- Cyberdog & Netscape in the news Important Press Release regarding
- Cyberdog and Netscape. Check it out!
- Cyberdog Plug-in Support! Cyberdog support for Netscape Plug-ins is now
- available to download! Go to the Cyberdog Beta Download page and download
- it now!
- Cyberdog Book Check out Jesse Feiler's way-cool book about Cyberdog.
- You can find details out about the book as well as ordering information at
- Philmont Software Mill site.
- Java! Looking to view Java applets in Cyberdog 1.1 Beta 3? Download and
- install the Mac OS Runtime for Java and try it out!
- Cyberdog 1.1 Beta 3 We hope that Cyberdog and OpenDoc 1.1 will be
- available within the next two weeks. In the meantime, we have released
- another version of Cyberdog, Cyberdog 1.1 Beta 3. This version fixes
- several bugs that were reported to us during out public beta period. You
- can check out our release notes to see what we fixed!
-END
-DONE
-
-
-$| = 1;
-
-print "1..", @tests/2, "\n";
-
-use Text::Wrap;
-
-$rerun = $ENV{'PERL_DL_NONLAZY'} ? 0 : 1;
-
-$tn = 1;
-while (@tests) {
- my $in = shift(@tests);
- my $out = shift(@tests);
-
- $in =~ s/^TEST(\d+)?\n//;
-
- my $back = fill(' ', ' ', $in);
-
- if ($back eq $out) {
- print "ok $tn\n";
- } elsif ($rerun) {
- my $oi = $in;
- open(F,">#o") and do { print F $back; close(F) };
- open(F,">#e") and do { print F $out; close(F) };
- foreach ($in, $back, $out) {
- s/\t/^I\t/gs;
- s/\n/\$\n/gs;
- }
- print "------------ input ------------\n";
- print $in;
- print "\n------------ output -----------\n";
- print $back;
- print "\n------------ expected ---------\n";
- print $out;
- print "\n-------------------------------\n";
- $Text::Wrap::debug = 1;
- fill(' ', ' ', $oi);
- exit(1);
- } else {
- print "not ok $tn\n";
- }
- $tn++;
-}
diff --git a/contrib/perl5/t/lib/texttabs.t b/contrib/perl5/t/lib/texttabs.t
deleted file mode 100755
index c6ca123..0000000
--- a/contrib/perl5/t/lib/texttabs.t
+++ /dev/null
@@ -1,139 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-@tests = (split(/\nEND\n/s, <<DONE));
-TEST 1 u
- x
-END
- x
-END
-TEST 2 e
- x
-END
- x
-END
-TEST 3 e
- x
- y
- z
-END
- x
- y
- z
-END
-TEST 4 u
- x
- y
- z
-END
- x
- y
- z
-END
-TEST 5 u
-This Is a test of a line with many embedded tabs
-END
-This Is a test of a line with many embedded tabs
-END
-TEST 6 e
-This Is a test of a line with many embedded tabs
-END
-This Is a test of a line with many embedded tabs
-END
-TEST 7 u
- x
-END
- x
-END
-TEST 8 e
-
-
-
-
-
-END
-
-
-
-
-
-END
-TEST 9 u
-
-END
-
-END
-TEST 10 u
-
-
-
-
-
-END
-
-
-
-
-
-END
-TEST 11 u
-foobar IN A 140.174.82.12
-
-END
-foobar IN A 140.174.82.12
-
-END
-DONE
-
-$| = 1;
-
-print "1..".scalar(@tests/2)."\n";
-
-use Text::Tabs;
-
-$rerun = $ENV{'PERL_DL_NONLAZY'} ? 0 : 1;
-
-$tn = 1;
-while (@tests) {
- my $in = shift(@tests);
- my $out = shift(@tests);
-
- $in =~ s/^TEST\s*(\d+)?\s*(\S+)?\n//;
-
- if ($2 eq 'e') {
- $f = \&expand;
- $fn = 'expand';
- } else {
- $f = \&unexpand;
- $fn = 'unexpand';
- }
-
- my $back = &$f($in);
-
- if ($back eq $out) {
- print "ok $tn\n";
- } elsif ($rerun) {
- my $oi = $in;
- foreach ($in, $back, $out) {
- s/\t/^I\t/gs;
- s/\n/\$\n/gs;
- }
- print "------------ input ------------\n";
- print $in;
- print "\$\n------------ $fn -----------\n";
- print $back;
- print "\$\n------------ expected ---------\n";
- print $out;
- print "\$\n-------------------------------\n";
- $Text::Tabs::debug = 1;
- my $back = &$f($in);
- exit(1);
- } else {
- print "not ok $tn\n";
- }
- $tn++;
-}
diff --git a/contrib/perl5/t/lib/textwrap.t b/contrib/perl5/t/lib/textwrap.t
deleted file mode 100755
index fee6ce0..0000000
--- a/contrib/perl5/t/lib/textwrap.t
+++ /dev/null
@@ -1,209 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-@tests = (split(/\nEND\n/s, <<DONE));
-TEST1
-This
-is
-a
-test
-END
- This
- is
- a
- test
-END
-TEST2
-This is a test of a very long line. It should be broken up and put onto multiple lines.
-This is a test of a very long line. It should be broken up and put onto multiple lines.
-
-This is a test of a very long line. It should be broken up and put onto multiple lines.
-END
- This is a test of a very long line. It should be broken up and put onto
- multiple lines.
- This is a test of a very long line. It should be broken up and put onto
- multiple lines.
-
- This is a test of a very long line. It should be broken up and put onto
- multiple lines.
-END
-TEST3
-This is a test of a very long line. It should be broken up and put onto multiple lines.
-END
- This is a test of a very long line. It should be broken up and put onto
- multiple lines.
-END
-TEST4
-This is a test of a very long line. It should be broken up and put onto multiple lines.
-
-END
- This is a test of a very long line. It should be broken up and put onto
- multiple lines.
-
-END
-TEST5
-This is a test of a very long line. It should be broken up and put onto multiple This is a test of a very long line. It should be broken up and put
-END
- This is a test of a very long line. It should be broken up and put onto
- multiple This is a test of a very long line. It should be broken up and
- put
-END
-TEST6
-11111111 22222222 33333333 44444444 55555555 66666666 77777777 888888888 999999999 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee ffffffff gggggggg hhhhhhhh iiiiiiii jjjjjjjj kkkkkkkk llllllll mmmmmmmmm nnnnnnnnn ooooooooo ppppppppp qqqqqqqqq rrrrrrrrr sssssssss
-END
- 11111111 22222222 33333333 44444444 55555555 66666666 77777777 888888888
- 999999999 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee ffffffff
- gggggggg hhhhhhhh iiiiiiii jjjjjjjj kkkkkkkk llllllll mmmmmmmmm nnnnnnnnn
- ooooooooo ppppppppp qqqqqqqqq rrrrrrrrr sssssssss
-END
-TEST7
-c3t1d0s6 c4t1d0s6 c5t1d0s6 c6t1d0s6 c7t1d0s6 c8t1d0s6 c9t1d0s6 c10t1d0s6 c11t1d0s6 c12t1d0s6 c13t1d0s6 c14t1d0s6 c15t1d0s6 c16t1d0s6 c3t1d0s0 c4t1d0s0 c5t1d0s0 c6t1d0s0 c7t1d0s0 c8t1d0s0 c9t1d0s0 c10t1d0s0 c11t1d0s0 c12t1d0s0 c13t1d0s0 c14t1d0s0 c15t1d0s0 c16t1d0s0
-END
- c3t1d0s6 c4t1d0s6 c5t1d0s6 c6t1d0s6 c7t1d0s6 c8t1d0s6 c9t1d0s6 c10t1d0s6
- c11t1d0s6 c12t1d0s6 c13t1d0s6 c14t1d0s6 c15t1d0s6 c16t1d0s6 c3t1d0s0
- c4t1d0s0 c5t1d0s0 c6t1d0s0 c7t1d0s0 c8t1d0s0 c9t1d0s0 c10t1d0s0 c11t1d0s0
- c12t1d0s0 c13t1d0s0 c14t1d0s0 c15t1d0s0 c16t1d0s0
-END
-TEST8
-A test of a very very long word.
-a123456789b123456789c123456789d123456789e123456789f123456789g123456789g1234567
-END
- A test of a very very long word.
- a123456789b123456789c123456789d123456789e123456789f123456789g123456789g123
- 4567
-END
-TEST9
-A test of a very very long word. a123456789b123456789c123456789d123456789e123456789f123456789g123456789g1234567
-END
- A test of a very very long word.
- a123456789b123456789c123456789d123456789e123456789f123456789g123456789g123
- 4567
-END
-TEST10
-my mother once said
-"never eat paste my darling"
-would that I heeded
-END
- my mother once said
- "never eat paste my darling"
- would that I heeded
-END
-TEST11
-This_is_a_word_that_is_too_long_to_wrap_we_want_to_make_sure_that_the_program_does_not_crash_and_burn
-END
- This_is_a_word_that_is_too_long_to_wrap_we_want_to_make_sure_that_the_pr
- ogram_does_not_crash_and_burn
-END
-TEST12
-This
-
-Has
-
-Blank
-
-Lines
-
-END
- This
-
- Has
-
- Blank
-
- Lines
-
-END
-DONE
-
-
-$| = 1;
-
-print "1..", 1 +@tests, "\n";
-
-use Text::Wrap;
-
-$rerun = $ENV{'PERL_DL_NONLAZY'} ? 0 : 1;
-
-$tn = 1;
-
-@st = @tests;
-while (@st) {
- my $in = shift(@st);
- my $out = shift(@st);
-
- $in =~ s/^TEST(\d+)?\n//;
-
- my $back = wrap(' ', ' ', $in);
-
- if ($back eq $out) {
- print "ok $tn\n";
- } elsif ($rerun) {
- my $oi = $in;
- foreach ($in, $back, $out) {
- s/\t/^I\t/gs;
- s/\n/\$\n/gs;
- }
- print "------------ input ------------\n";
- print $in;
- print "\n------------ output -----------\n";
- print $back;
- print "\n------------ expected ---------\n";
- print $out;
- print "\n-------------------------------\n";
- $Text::Wrap::debug = 1;
- wrap(' ', ' ', $oi);
- exit(1);
- } else {
- print "not ok $tn\n";
- }
- $tn++;
-
-}
-
-@st = @tests;
-while(@st) {
- my $in = shift(@st);
- my $out = shift(@st);
-
- $in =~ s/^TEST(\d+)?\n//;
-
- my @in = split("\n", $in, -1);
- @in = ((map { "$_\n" } @in[0..$#in-1]), $in[-1]);
-
- my $back = wrap(' ', ' ', @in);
-
- if ($back eq $out) {
- print "ok $tn\n";
- } elsif ($rerun) {
- my $oi = $in;
- foreach ($in, $back, $out) {
- s/\t/^I\t/gs;
- s/\n/\$\n/gs;
- }
- print "------------ input2 ------------\n";
- print $in;
- print "\n------------ output2 -----------\n";
- print $back;
- print "\n------------ expected2 ---------\n";
- print $out;
- print "\n-------------------------------\n";
- $Text::Wrap::debug = 1;
- wrap(' ', ' ', $oi);
- exit(1);
- } else {
- print "not ok $tn\n";
- }
- $tn++;
-}
-
-$Text::Wrap::huge = 'overflow';
-
-my $tw = 'This_is_a_word_that_is_too_long_to_wrap_we_want_to_make_sure_that_the_program_does_not_crash_and_burn';
-my $w = wrap('zzz','yyy',$tw);
-print (($w eq "zzz$tw") ? "ok $tn\n" : "not ok $tn");
-$tn++;
-
diff --git a/contrib/perl5/t/lib/thr5005.t b/contrib/perl5/t/lib/thr5005.t
deleted file mode 100755
index 680e1af..0000000
--- a/contrib/perl5/t/lib/thr5005.t
+++ /dev/null
@@ -1,131 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- if (! $Config{'use5005threads'}) {
- print "1..0 # Skip: not use5005threads\n";
- exit 0;
- }
-
- # XXX known trouble with global destruction
- $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
-}
-$| = 1;
-print "1..22\n";
-use Thread 'yield';
-print "ok 1\n";
-
-sub content
-{
- print shift;
- return shift;
-}
-
-# create a thread passing args and immedaietly wait for it.
-my $t = new Thread \&content,("ok 2\n","ok 3\n", 1..1000);
-print $t->join;
-
-# check that lock works ...
-{lock $foo;
- $t = new Thread sub { lock $foo; print "ok 5\n" };
- print "ok 4\n";
-}
-$t->join;
-
-sub dorecurse
-{
- my $val = shift;
- my $ret;
- print $val;
- if (@_)
- {
- $ret = Thread->new(\&dorecurse, @_);
- $ret->join;
- }
-}
-
-$t = new Thread \&dorecurse, map { "ok $_\n" } 6..10;
-$t->join;
-
-# test that sleep lets other thread run
-$t = new Thread \&dorecurse,"ok 11\n";
-sleep 6;
-print "ok 12\n";
-$t->join;
-
-sub islocked : locked {
- my $val = shift;
- my $ret;
- print $val;
- if (@_)
- {
- $ret = Thread->new(\&islocked, shift);
- }
- $ret;
-}
-
-$t = Thread->new(\&islocked, "ok 13\n", "ok 14\n");
-$t->join->join;
-
-{
- package Loch::Ness;
- sub new { bless [], shift }
- sub monster : locked : method {
- my($s, $m) = @_;
- print "ok $m\n";
- }
- sub gollum { &monster }
-}
-Loch::Ness->monster(15);
-Loch::Ness->new->monster(16);
-Loch::Ness->gollum(17);
-Loch::Ness->new->gollum(18);
-
-my $short = "This is a long string that goes on and on.";
-my $shorte = " a long string that goes on and on.";
-my $long = "This is short.";
-my $longe = " short.";
-my $thr1 = new Thread \&threaded, $short, $shorte, "19";
-my $thr2 = new Thread \&threaded, $long, $longe, "20";
-my $thr3 = new Thread \&testsprintf, "21";
-
-sub testsprintf {
- my $testno = shift;
- # this may coredump if thread vars are not properly initialised
- my $same = sprintf "%.0f", $testno;
- if ($testno eq $same) {
- print "ok $testno\n";
- } else {
- print "not ok $testno\t# '$testno' ne '$same'\n";
- }
-}
-
-sub threaded {
- my ($string, $string_end, $testno) = @_;
-
- # Do the match, saving the output in appropriate variables
- $string =~ /(.*)(is)(.*)/;
- # Yield control, allowing the other thread to fill in the match variables
- yield();
- # Examine the match variable contents; on broken perls this fails
- if ($3 eq $string_end) {
- print "ok $testno\n";
- }
- else {
- warn <<EOT;
-
-#
-# This is a KNOWN FAILURE, and one of the reasons why threading
-# is still an experimental feature. It is here to stop people
-# from deploying threads in production. ;-)
-#
-EOT
- print "not ok $testno # other thread filled in match variables\n";
- }
-}
-$thr1->join;
-$thr2->join;
-$thr3->join;
-print "ok 22\n";
diff --git a/contrib/perl5/t/lib/tie-push.t b/contrib/perl5/t/lib/tie-push.t
deleted file mode 100755
index b19aa0d..0000000
--- a/contrib/perl5/t/lib/tie-push.t
+++ /dev/null
@@ -1,25 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '.';
- push @INC, '../lib';
-}
-
-{
- package Basic;
- use Tie::Array;
- @ISA = qw(Tie::Array);
-
- sub TIEARRAY { return bless [], shift }
- sub FETCH { $_[0]->[$_[1]] }
- sub STORE { $_[0]->[$_[1]] = $_[2] }
- sub FETCHSIZE { scalar(@{$_[0]}) }
- sub STORESIZE { $#{$_[0]} = $_[1]-1 }
-}
-
-tie @x,Basic;
-tie @get,Basic;
-tie @got,Basic;
-tie @tests,Basic;
-require "op/push.t"
diff --git a/contrib/perl5/t/lib/tie-refhash.t b/contrib/perl5/t/lib/tie-refhash.t
deleted file mode 100755
index d80b2e1..0000000
--- a/contrib/perl5/t/lib/tie-refhash.t
+++ /dev/null
@@ -1,305 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Basic test suite for Tie::RefHash and Tie::RefHash::Nestable.
-#
-# The testing is in two parts: first, run lots of tests on both a tied
-# hash and an ordinary un-tied hash, and check they give the same
-# answer. Then there are tests for those cases where the tied hashes
-# should behave differently to normal hashes, that is, when using
-# references as keys.
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '.';
- push @INC, '../lib';
-}
-
-use strict;
-use Tie::RefHash;
-use Data::Dumper;
-my $numtests = 34;
-my $currtest = 1;
-print "1..$numtests\n";
-
-my $ref = []; my $ref1 = [];
-
-# Test standard hash functionality, by performing the same operations
-# on a tied hash and on a normal hash, and checking that the results
-# are the same. This does of course assume that Perl hashes are not
-# buggy :-)
-#
-my @tests = standard_hash_tests();
-
-my @ordinary_results = runtests(\@tests, undef);
-foreach my $class ('Tie::RefHash', 'Tie::RefHash::Nestable') {
- my @tied_results = runtests(\@tests, $class);
- my $all_ok = 1;
-
- die if @ordinary_results != @tied_results;
- foreach my $i (0 .. $#ordinary_results) {
- my ($or, $ow, $oe) = @{$ordinary_results[$i]};
- my ($tr, $tw, $te) = @{$tied_results[$i]};
-
- my $ok = 1;
- local $^W = 0;
- $ok = 0 if (defined($or) != defined($tr)) or ($or ne $tr);
- $ok = 0 if (defined($ow) != defined($tw)) or ($ow ne $tw);
- $ok = 0 if (defined($oe) != defined($te)) or ($oe ne $te);
-
- if (not $ok) {
- print STDERR
- "failed for $class: $tests[$i]\n",
- "ordinary hash gave:\n",
- defined $or ? "\tresult: $or\n" : "\tundef result\n",
- defined $ow ? "\twarning: $ow\n" : "\tno warning\n",
- defined $oe ? "\texception: $oe\n" : "\tno exception\n",
- "tied $class hash gave:\n",
- defined $tr ? "\tresult: $tr\n" : "\tundef result\n",
- defined $tw ? "\twarning: $tw\n" : "\tno warning\n",
- defined $te ? "\texception: $te\n" : "\tno exception\n",
- "\n";
- $all_ok = 0;
- }
- }
- test($all_ok);
-}
-
-# Now test Tie::RefHash's special powers
-my (%h, $h);
-$h = eval { tie %h, 'Tie::RefHash' };
-warn $@ if $@;
-test(not $@);
-test(ref($h) eq 'Tie::RefHash');
-test(defined(tied(%h)) and tied(%h) =~ /^Tie::RefHash/);
-$h{$ref} = 'cholet';
-test($h{$ref} eq 'cholet');
-test(exists $h{$ref});
-test((keys %h) == 1);
-test(ref((keys %h)[0]) eq 'ARRAY');
-test((keys %h)[0] eq $ref);
-test((values %h) == 1);
-test((values %h)[0] eq 'cholet');
-my $count = 0;
-while (my ($k, $v) = each %h) {
- if ($count++ == 0) {
- test(ref($k) eq 'ARRAY');
- test($k eq $ref);
- }
-}
-test($count == 1);
-delete $h{$ref};
-test(not defined $h{$ref});
-test(not exists($h{$ref}));
-test((keys %h) == 0);
-test((values %h) == 0);
-undef $h;
-untie %h;
-
-# And now Tie::RefHash::Nestable's differences from Tie::RefHash.
-$h = eval { tie %h, 'Tie::RefHash::Nestable' };
-warn $@ if $@;
-test(not $@);
-test(ref($h) eq 'Tie::RefHash::Nestable');
-test(defined(tied(%h)) and tied(%h) =~ /^Tie::RefHash::Nestable/);
-$h{$ref}->{$ref1} = 'bungo';
-test($h{$ref}->{$ref1} eq 'bungo');
-
-# Test that the nested hash is also tied (for current implementation)
-test(defined(tied(%{$h{$ref}}))
- and tied(%{$h{$ref}}) =~ /^Tie::RefHash::Nestable=/ );
-
-test((keys %h) == 1);
-test((keys %h)[0] eq $ref);
-test((keys %{$h{$ref}}) == 1);
-test((keys %{$h{$ref}})[0] eq $ref1);
-
-
-die "expected to run $numtests tests, but ran ", $currtest - 1
- if $currtest - 1 != $numtests;
-
-@tests = ();
-undef $ref;
-undef $ref1;
-
-exit();
-
-
-# Print 'ok X' if true, 'not ok X' if false
-# Uses global $currtest.
-#
-sub test {
- my $t = shift;
- print 'not ' if not $t;
- print 'ok ', $currtest++, "\n";
-}
-
-
-# Wrapper for Data::Dumper to 'dump' a scalar as an EXPR string.
-sub dumped {
- my $s = shift;
- my $d = Dumper($s);
- $d =~ s/^\$VAR1 =\s*//;
- $d =~ s/;$//;
- chomp $d;
- return $d;
-}
-
-# Crudely dump a hash into a canonical string representation (because
-# hash keys can appear in any order, Data::Dumper may give different
-# strings for the same hash).
-#
-sub dumph {
- my $h = shift;
- my $r = '';
- foreach (sort keys %$h) {
- $r = dumped($_) . ' => ' . dumped($h->{$_}) . "\n";
- }
- return $r;
-}
-
-# Run the tests and give results.
-#
-# Parameters: reference to list of tests to run
-# name of class to use for tied hash, or undef if not tied
-#
-# Returns: list of [R, W, E] tuples, one for each test.
-# R is the return value from running the test, W any warnings it gave,
-# and E any exception raised with 'die'. E and W will be tidied up a
-# little to remove irrelevant details like line numbers :-)
-#
-# Will also run a few of its own 'ok N' tests.
-#
-sub runtests {
- my ($tests, $class) = @_;
- my @r;
-
- my (%h, $h);
- if (defined $class) {
- $h = eval { tie %h, $class };
- warn $@ if $@;
- test(not $@);
- test(ref($h) eq $class);
- test(defined(tied(%h)) and tied(%h) =~ /^\Q$class\E/);
- }
-
- foreach (@$tests) {
- my ($result, $warning, $exception);
- local $SIG{__WARN__} = sub { $warning .= $_[0] };
- $result = scalar(eval $_);
- if ($@)
- {
- die "$@:$_" unless defined $class;
- $exception = $@;
- }
-
- foreach ($warning, $exception) {
- next if not defined;
- s/ at .+ line \d+\.$//mg;
- s/ at .+ line \d+, at .*//mg;
- s/ at .+ line \d+, near .*//mg;
- }
-
- my (@warnings, %seen);
- foreach (split /\n/, $warning) {
- push @warnings, $_ unless $seen{$_}++;
- }
- $warning = join("\n", @warnings);
-
- push @r, [ $result, $warning, $exception ];
- }
-
- return @r;
-}
-
-
-# Things that should work just the same for an ordinary hash and a
-# Tie::RefHash.
-#
-# Each test is a code string to be eval'd, it should do something with
-# %h and give a scalar return value. The global $ref and $ref1 may
-# also be used.
-#
-# One thing we don't test is that the ordering from 'keys', 'values'
-# and 'each' is the same. You can't reasonably expect that.
-#
-sub standard_hash_tests {
- my @r;
-
- # Library of standard tests on keys, values and each
- my $STD_TESTS = <<'END'
- join $;, sort keys %h;
- join $;, sort values %h;
- { my ($v, %tmp); $tmp{$v}++ while (defined($v = each %h)); dumph(\%tmp) }
- { my ($k, $v, %tmp); $tmp{"$k$;$v"}++ while (($k, $v) = each %h); dumph(\%tmp) }
-END
- ;
-
- # Tests on the existence of the element 'foo'
- my $FOO_TESTS = <<'END'
- defined $h{foo};
- exists $h{foo};
- $h{foo};
-END
- ;
-
- # Test storing and deleting 'foo'
- push @r, split /\n/, <<"END"
- $STD_TESTS;
- $FOO_TESTS;
- \$h{foo} = undef;
- $STD_TESTS;
- $FOO_TESTS;
- \$h{foo} = 'hello';
- $STD_TESTS;
- $FOO_TESTS;
- delete \$h{foo};
- $STD_TESTS;
- $FOO_TESTS;
-END
- ;
-
- # Test storing and removing under ordinary keys
- my @things = ('boink', 0, 1, '', undef);
- foreach my $key (map { dumped($_) } @things) {
- foreach my $value ((map { dumped($_) } @things), '$ref') {
- push @r, split /\n/, <<"END"
- \$h{$key} = $value;
- $STD_TESTS;
- defined \$h{$key};
- exists \$h{$key};
- \$h{$key};
- delete \$h{$key};
- $STD_TESTS;
- defined \$h{$key};
- exists \$h{$key};
- \$h{$key};
-END
- ;
- }
- }
-
- # Test hash slices
- my @slicetests;
- @slicetests = split /\n/, <<'END'
- @h{'b'} = ();
- @h{'c'} = ('d');
- @h{'e'} = ('f', 'g');
- @h{'h', 'i'} = ();
- @h{'j', 'k'} = ('l');
- @h{'m', 'n'} = ('o', 'p');
- @h{'q', 'r'} = ('s', 't', 'u');
-END
- ;
- my @aaa = @slicetests;
- foreach (@slicetests) {
- push @r, $_;
- push @r, split(/\n/, $STD_TESTS);
- }
-
- # Test CLEAR
- push @r, '%h = ();', split(/\n/, $STD_TESTS);
-
- return @r;
-}
-
diff --git a/contrib/perl5/t/lib/tie-splice.t b/contrib/perl5/t/lib/tie-splice.t
deleted file mode 100755
index d7ea6cc..0000000
--- a/contrib/perl5/t/lib/tie-splice.t
+++ /dev/null
@@ -1,17 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '.';
- push @INC, '../lib';
-}
-
-# bug id 20001020.002
-# -dlc 20001021
-
-use Tie::Array;
-tie @a,Tie::StdArray;
-undef *Tie::StdArray::SPLICE;
-require "op/splice.t"
-
-# Pre-fix, this failed tests 6-9
diff --git a/contrib/perl5/t/lib/tie-stdarray.t b/contrib/perl5/t/lib/tie-stdarray.t
deleted file mode 100755
index c4ae071..0000000
--- a/contrib/perl5/t/lib/tie-stdarray.t
+++ /dev/null
@@ -1,13 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '.';
- push @INC, '../lib';
-}
-
-use Tie::Array;
-tie @foo,Tie::StdArray;
-tie @ary,Tie::StdArray;
-tie @bar,Tie::StdArray;
-require "op/array.t"
diff --git a/contrib/perl5/t/lib/tie-stdhandle.t b/contrib/perl5/t/lib/tie-stdhandle.t
deleted file mode 100755
index f03f5d9..0000000
--- a/contrib/perl5/t/lib/tie-stdhandle.t
+++ /dev/null
@@ -1,47 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Tie::Handle;
-tie *tst,Tie::StdHandle;
-
-$f = 'tst';
-
-print "1..13\n";
-
-# my $file tests
-
-unlink("afile.new") if -f "afile";
-print "$!\nnot " unless open($f,"+>afile") && open($f, "+<", "afile");
-print "ok 1\n";
-print "$!\nnot " unless binmode($f);
-print "ok 2\n";
-print "not " unless -f "afile";
-print "ok 3\n";
-print "not " unless print $f "SomeData\n";
-print "ok 4\n";
-print "not " unless tell($f) == 9;
-print "ok 5\n";
-print "not " unless printf $f "Some %d value\n",1234;
-print "ok 6\n";
-print "not " unless seek($f,0,0);
-print "ok 7\n";
-$b = <$f>;
-print "not " unless $b eq "SomeData\n";
-print "ok 8\n";
-print "not " if eof($f);
-print "ok 9\n";
-read($f,($b=''),4);
-print "'$b' not " unless $b eq 'Some';
-print "ok 10\n";
-print "not " unless getc($f) eq ' ';
-print "ok 11\n";
-$b = <$f>;
-print "not " unless eof($f);
-print "ok 12\n";
-print "not " unless close($f);
-print "ok 13\n";
-unlink("afile");
diff --git a/contrib/perl5/t/lib/tie-stdpush.t b/contrib/perl5/t/lib/tie-stdpush.t
deleted file mode 100755
index 31af30c..0000000
--- a/contrib/perl5/t/lib/tie-stdpush.t
+++ /dev/null
@@ -1,11 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '.';
- push @INC, '../lib';
-}
-
-use Tie::Array;
-tie @x,Tie::StdArray;
-require "op/push.t"
diff --git a/contrib/perl5/t/lib/tie-substrhash.t b/contrib/perl5/t/lib/tie-substrhash.t
deleted file mode 100755
index 8256db7..0000000
--- a/contrib/perl5/t/lib/tie-substrhash.t
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/perl -w
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '.';
- push @INC, '../lib';
-}
-
-print "1..20\n";
-
-use strict;
-
-require Tie::SubstrHash;
-
-my %a;
-
-tie %a, 'Tie::SubstrHash', 3, 3, 3;
-
-$a{abc} = 123;
-$a{bcd} = 234;
-
-print "not " unless $a{abc} == 123;
-print "ok 1\n";
-
-print "not " unless keys %a == 2;
-print "ok 2\n";
-
-delete $a{abc};
-
-print "not " unless $a{bcd} == 234;
-print "ok 3\n";
-
-print "not " unless (values %a)[0] == 234;
-print "ok 4\n";
-
-eval { $a{abcd} = 123 };
-print "not " unless $@ =~ /Key "abcd" is not 3 characters long/;
-print "ok 5\n";
-
-eval { $a{abc} = 1234 };
-print "not " unless $@ =~ /Value "1234" is not 3 characters long/;
-print "ok 6\n";
-
-eval { $a = $a{abcd}; $a++ };
-print "not " unless $@ =~ /Key "abcd" is not 3 characters long/;
-print "ok 7\n";
-
-@a{qw(abc cde)} = qw(123 345);
-
-print "not " unless $a{cde} == 345;
-print "ok 8\n";
-
-eval { $a{def} = 456 };
-print "not " unless $@ =~ /Table is full \(3 elements\)/;
-print "ok 9\n";
-
-%a = ();
-
-print "not " unless keys %a == 0;
-print "ok 10\n";
-
-# Tests 11..16 by Linc Madison.
-
-my $hashsize = 119; # arbitrary values from my data
-my %test;
-tie %test, "Tie::SubstrHash", 13, 86, $hashsize;
-
-for (my $i = 1; $i <= $hashsize; $i++) {
- my $key1 = $i + 100_000; # fix to uniform 6-digit numbers
- my $key2 = "abcdefg$key1";
- $test{$key2} = ("abcdefgh" x 10) . "$key1";
-}
-
-for (my $i = 1; $i <= $hashsize; $i++) {
- my $key1 = $i + 100_000;
- my $key2 = "abcdefg$key1";
- unless ($test{$key2}) {
- print "not ";
- last;
- }
-}
-print "ok 11\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(1) == 2;
-print "ok 12\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(2) == 2;
-print "ok 13\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(5.5) == 7;
-print "ok 14\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(13) == 13;
-print "ok 15\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(13.000001) == 17;
-print "ok 16\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(114) == 127;
-print "ok 17\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(1000) == 1009;
-print "ok 18\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(1024) == 1031;
-print "ok 19\n";
-
-print "not " unless Tie::SubstrHash::findgteprime(10000) == 10007;
-print "ok 20\n";
-
diff --git a/contrib/perl5/t/lib/timelocal.t b/contrib/perl5/t/lib/timelocal.t
deleted file mode 100755
index 100e076..0000000
--- a/contrib/perl5/t/lib/timelocal.t
+++ /dev/null
@@ -1,90 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Time::Local;
-
-# Set up time values to test
-@time =
- (
- #year,mon,day,hour,min,sec
- [1970, 1, 2, 00, 00, 00],
- [1980, 2, 28, 12, 00, 00],
- [1980, 2, 29, 12, 00, 00],
- [1999, 12, 31, 23, 59, 59],
- [2000, 1, 1, 00, 00, 00],
- [2010, 10, 12, 14, 13, 12],
- );
-
-# use vmsish 'time' makes for oddness around the Unix epoch
-if ($^O eq 'VMS') { $time[0][2]++ }
-
-print "1..", @time * 2 + 5, "\n";
-
-$count = 1;
-for (@time) {
- my($year, $mon, $mday, $hour, $min, $sec) = @$_;
- $year -= 1900;
- $mon --;
- my $time = timelocal($sec,$min,$hour,$mday,$mon,$year);
- # print scalar(localtime($time)), "\n";
- my($s,$m,$h,$D,$M,$Y) = localtime($time);
-
- if ($s == $sec &&
- $m == $min &&
- $h == $hour &&
- $D == $mday &&
- $M == $mon &&
- $Y == $year
- ) {
- print "ok $count\n";
- } else {
- print "not ok $count\n";
- }
- $count++;
-
- # Test gmtime function
- $time = timegm($sec,$min,$hour,$mday,$mon,$year);
- ($s,$m,$h,$D,$M,$Y) = gmtime($time);
-
- if ($s == $sec &&
- $m == $min &&
- $h == $hour &&
- $D == $mday &&
- $M == $mon &&
- $Y == $year
- ) {
- print "ok $count\n";
- } else {
- print "not ok $count\n";
- }
- $count++;
-}
-
-#print "Testing that the differences between a few dates makes sence...\n";
-
-timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90) == 3600
- or print "not ";
-print "ok ", $count++, "\n";
-
-timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99) == 24 * 3600
- or print "not ";
-print "ok ", $count++, "\n";
-
-# Diff beween Jan 1, 1970 and Mar 1, 1970 = (31 + 28 = 59 days)
-timegm(0,0,0, 1, 2, 70) - timegm(0,0,0, 1, 0, 70) == 59 * 24 * 3600
- or print "not ";
-print "ok ", $count++, "\n";
-
-
-#print "Testing timelocal.pl module too...\n";
-package test;
-require 'timelocal.pl';
-timegm(0,0,0,1,0,70) == main::timegm(0,0,0,1,0,70) or print "not ";
-print "ok ", $main::count++, "\n";
-
-timelocal(1,2,3,4,5,78) == main::timelocal(1,2,3,4,5,78) or print "not ";
-print "ok ", $main::count++, "\n";
diff --git a/contrib/perl5/t/lib/trig.t b/contrib/perl5/t/lib/trig.t
deleted file mode 100755
index 6949622..0000000
--- a/contrib/perl5/t/lib/trig.t
+++ /dev/null
@@ -1,179 +0,0 @@
-#!./perl
-
-#
-# Regression tests for the Math::Trig package
-#
-# The tests are quite modest as the Math::Complex tests exercise
-# these quite vigorously.
-#
-# -- Jarkko Hietaniemi, April 1997
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Math::Trig;
-
-use strict;
-
-use vars qw($x $y $z);
-
-my $eps = 1e-11;
-
-if ($^O eq 'unicos') { # See lib/Math/Complex.pm and t/lib/complex.t.
- $eps = 1e-10;
-}
-
-sub near ($$;$) {
- my $e = defined $_[2] ? $_[2] : $eps;
- $_[1] ? (abs($_[0]/$_[1] - 1) < $e) : abs($_[0]) < $e;
-}
-
-print "1..23\n";
-
-$x = 0.9;
-print 'not ' unless (near(tan($x), sin($x) / cos($x)));
-print "ok 1\n";
-
-print 'not ' unless (near(sinh(2), 3.62686040784702));
-print "ok 2\n";
-
-print 'not ' unless (near(acsch(0.1), 2.99822295029797));
-print "ok 3\n";
-
-$x = asin(2);
-print 'not ' unless (ref $x eq 'Math::Complex');
-print "ok 4\n";
-
-# avoid using Math::Complex here
-$x =~ /^([^-]+)(-[^i]+)i$/;
-($y, $z) = ($1, $2);
-print 'not ' unless (near($y, 1.5707963267949) and
- near($z, -1.31695789692482));
-print "ok 5\n";
-
-print 'not ' unless (near(deg2rad(90), pi/2));
-print "ok 6\n";
-
-print 'not ' unless (near(rad2deg(pi), 180));
-print "ok 7\n";
-
-use Math::Trig ':radial';
-
-{
- my ($r,$t,$z) = cartesian_to_cylindrical(1,1,1);
-
- print 'not ' unless (near($r, sqrt(2))) and
- (near($t, deg2rad(45))) and
- (near($z, 1));
- print "ok 8\n";
-
- ($x,$y,$z) = cylindrical_to_cartesian($r, $t, $z);
-
- print 'not ' unless (near($x, 1)) and
- (near($y, 1)) and
- (near($z, 1));
- print "ok 9\n";
-
- ($r,$t,$z) = cartesian_to_cylindrical(1,1,0);
-
- print 'not ' unless (near($r, sqrt(2))) and
- (near($t, deg2rad(45))) and
- (near($z, 0));
- print "ok 10\n";
-
- ($x,$y,$z) = cylindrical_to_cartesian($r, $t, $z);
-
- print 'not ' unless (near($x, 1)) and
- (near($y, 1)) and
- (near($z, 0));
- print "ok 11\n";
-}
-
-{
- my ($r,$t,$f) = cartesian_to_spherical(1,1,1);
-
- print 'not ' unless (near($r, sqrt(3))) and
- (near($t, deg2rad(45))) and
- (near($f, atan2(sqrt(2), 1)));
- print "ok 12\n";
-
- ($x,$y,$z) = spherical_to_cartesian($r, $t, $f);
-
- print 'not ' unless (near($x, 1)) and
- (near($y, 1)) and
- (near($z, 1));
- print "ok 13\n";
-
- ($r,$t,$f) = cartesian_to_spherical(1,1,0);
-
- print 'not ' unless (near($r, sqrt(2))) and
- (near($t, deg2rad(45))) and
- (near($f, deg2rad(90)));
- print "ok 14\n";
-
- ($x,$y,$z) = spherical_to_cartesian($r, $t, $f);
-
- print 'not ' unless (near($x, 1)) and
- (near($y, 1)) and
- (near($z, 0));
- print "ok 15\n";
-}
-
-{
- my ($r,$t,$z) = cylindrical_to_spherical(spherical_to_cylindrical(1,1,1));
-
- print 'not ' unless (near($r, 1)) and
- (near($t, 1)) and
- (near($z, 1));
- print "ok 16\n";
-
- ($r,$t,$z) = spherical_to_cylindrical(cylindrical_to_spherical(1,1,1));
-
- print 'not ' unless (near($r, 1)) and
- (near($t, 1)) and
- (near($z, 1));
- print "ok 17\n";
-}
-
-{
- use Math::Trig 'great_circle_distance';
-
- print 'not '
- unless (near(great_circle_distance(0, 0, 0, pi/2), pi/2));
- print "ok 18\n";
-
- print 'not '
- unless (near(great_circle_distance(0, 0, pi, pi), pi));
- print "ok 19\n";
-
- # London to Tokyo.
- my @L = (deg2rad(-0.5), deg2rad(90 - 51.3));
- my @T = (deg2rad(139.8),deg2rad(90 - 35.7));
-
- my $km = great_circle_distance(@L, @T, 6378);
-
- print 'not ' unless (near($km, 9605.26637021388));
- print "ok 20\n";
-}
-
-{
- my $R2D = 57.295779513082320876798154814169;
-
- sub frac { $_[0] - int($_[0]) }
-
- my $lotta_radians = deg2rad(1E+20, 1);
- print "not " unless near($lotta_radians, 1E+20/$R2D);
- print "ok 21\n";
-
- my $negat_degrees = rad2deg(-1E20, 1);
- print "not " unless near($negat_degrees, -1E+20*$R2D);
- print "ok 22\n";
-
- my $posit_degrees = rad2deg(-10000, 1);
- print "not " unless near($posit_degrees, -10000*$R2D);
- print "ok 23\n";
-}
-
-# eof
diff --git a/contrib/perl5/t/op/64bitint.t b/contrib/perl5/t/op/64bitint.t
deleted file mode 100755
index 88fbc55..0000000
--- a/contrib/perl5/t/op/64bitint.t
+++ /dev/null
@@ -1,297 +0,0 @@
-#./perl
-
-BEGIN {
- eval { my $q = pack "q", 0 };
- if ($@) {
- print "1..0\n# Skip: no 64-bit types\n";
- exit(0);
- }
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-# This could use many more tests.
-
-# so that using > 0xfffffff constants and
-# 32+ bit integers don't cause noise
-no warnings qw(overflow portable);
-
-print "1..55\n";
-
-my $q = 12345678901;
-my $r = 23456789012;
-my $f = 0xffffffff;
-my $x;
-my $y;
-
-$x = unpack "q", pack "q", $q;
-print "not " unless $x == $q && $x > $f;
-print "ok 1\n";
-
-
-$x = sprintf("%lld", 12345678901);
-print "not " unless $x eq $q && $x > $f;
-print "ok 2\n";
-
-
-$x = sprintf("%lld", $q);
-print "not " unless $x == $q && $x eq $q && $x > $f;
-print "ok 3\n";
-
-$x = sprintf("%Ld", $q);
-print "not " unless $x == $q && $x eq $q && $x > $f;
-print "ok 4\n";
-
-$x = sprintf("%qd", $q);
-print "not " unless $x == $q && $x eq $q && $x > $f;
-print "ok 5\n";
-
-
-$x = sprintf("%llx", $q);
-print "not " unless hex($x) == 0x2dfdc1c35 && hex($x) > $f;
-print "ok 6\n";
-
-$x = sprintf("%Lx", $q);
-print "not " unless hex($x) == 0x2dfdc1c35 && hex($x) > $f;
-print "ok 7\n";
-
-$x = sprintf("%qx", $q);
-print "not " unless hex($x) == 0x2dfdc1c35 && hex($x) > $f;
-print "ok 8\n";
-
-
-$x = sprintf("%llo", $q);
-print "not " unless oct("0$x") == 0133767016065 && oct($x) > $f;
-print "ok 9\n";
-
-$x = sprintf("%Lo", $q);
-print "not " unless oct("0$x") == 0133767016065 && oct($x) > $f;
-print "ok 10\n";
-
-$x = sprintf("%qo", $q);
-print "not " unless oct("0$x") == 0133767016065 && oct($x) > $f;
-print "ok 11\n";
-
-
-$x = sprintf("%llb", $q);
-print "not " unless oct("0b$x") == 0b1011011111110111000001110000110101 &&
- oct("0b$x") > $f;
-print "ok 12\n";
-
-$x = sprintf("%Lb", $q);
-print "not " unless oct("0b$x") == 0b1011011111110111000001110000110101 &&
- oct("0b$x") > $f;
-print "ok 13\n";
-
-$x = sprintf("%qb", $q);
-print "not " unless oct("0b$x") == 0b1011011111110111000001110000110101 &&
- oct("0b$x") > $f;
-print "ok 14\n";
-
-
-$x = sprintf("%llu", $q);
-print "not " unless $x eq $q && $x > $f;
-print "ok 15\n";
-
-$x = sprintf("%Lu", $q);
-print "not " unless $x == $q && $x eq $q && $x > $f;
-print "ok 16\n";
-
-$x = sprintf("%qu", $q);
-print "not " unless $x == $q && $x eq $q && $x > $f;
-print "ok 17\n";
-
-
-$x = sprintf("%D", $q);
-print "not " unless $x == $q && $x eq $q && $x > $f;
-print "ok 18\n";
-
-$x = sprintf("%U", $q);
-print "not " unless $x == $q && $x eq $q && $x > $f;
-print "ok 19\n";
-
-$x = sprintf("%O", $q);
-print "not " unless oct($x) == $q && oct($x) > $f;
-print "ok 20\n";
-
-
-$x = $q + $r;
-print "not " unless $x == 35802467913 && $x > $f;
-print "ok 21\n";
-
-$x = $q - $r;
-print "not " unless $x == -11111110111 && -$x > $f;
-print "ok 22\n";
-
-if ($^O ne 'unicos') {
- $x = $q * 1234567;
- print "not " unless $x == 15241567763770867 && $x > $f;
- print "ok 23\n";
-
- $x /= 1234567;
- print "not " unless $x == $q && $x > $f;
- print "ok 24\n";
-
- $x = 98765432109 % 12345678901;
- print "not " unless $x == 901;
- print "ok 25\n";
-
- # The following 12 tests adapted from op/inc.
-
- $a = 9223372036854775807;
- $c = $a++;
- print "not " unless $a == 9223372036854775808;
- print "ok 26\n";
-
- $a = 9223372036854775807;
- $c = ++$a;
- print "not "
- unless $a == 9223372036854775808 && $c == $a;
- print "ok 27\n";
-
- $a = 9223372036854775807;
- $c = $a + 1;
- print "not "
- unless $a == 9223372036854775807 && $c == 9223372036854775808;
- print "ok 28\n";
-
- $a = -9223372036854775808;
- $c = $a--;
- print "not "
- unless $a == -9223372036854775809 && $c == -9223372036854775808;
- print "ok 29\n";
-
- $a = -9223372036854775808;
- $c = --$a;
- print "not "
- unless $a == -9223372036854775809 && $c == $a;
- print "ok 30\n";
-
- $a = -9223372036854775808;
- $c = $a - 1;
- print "not "
- unless $a == -9223372036854775808 && $c == -9223372036854775809;
- print "ok 31\n";
-
- $a = 9223372036854775808;
- $a = -$a;
- $c = $a--;
- print "not "
- unless $a == -9223372036854775809 && $c == -9223372036854775808;
- print "ok 32\n";
-
- $a = 9223372036854775808;
- $a = -$a;
- $c = --$a;
- print "not "
- unless $a == -9223372036854775809 && $c == $a;
- print "ok 33\n";
-
- $a = 9223372036854775808;
- $a = -$a;
- $c = $a - 1;
- print "not "
- unless $a == -9223372036854775808 && $c == -9223372036854775809;
- print "ok 34\n";
-
- $a = 9223372036854775808;
- $b = -$a;
- $c = $b--;
- print "not "
- unless $b == -$a-1 && $c == -$a;
- print "ok 35\n";
-
- $a = 9223372036854775808;
- $b = -$a;
- $c = --$b;
- print "not "
- unless $b == -$a-1 && $c == $b;
- print "ok 36\n";
-
- $a = 9223372036854775808;
- $b = -$a;
- $b = $b - 1;
- print "not "
- unless $b == -(++$a);
- print "ok 37\n";
-
-} else {
- # Unicos has imprecise doubles (14 decimal digits or so),
- # especially if operating near the UV/IV limits the low-order bits
- # become mangled even by simple arithmetic operations.
- for (23..37) {
- print "ok $_ # skipped: too imprecise numbers\n";
- }
-}
-
-
-$x = '';
-print "not " unless (vec($x, 1, 64) = $q) == $q;
-print "ok 38\n";
-
-print "not " unless vec($x, 1, 64) == $q && vec($x, 1, 64) > $f;
-print "ok 39\n";
-
-print "not " unless vec($x, 0, 64) == 0 && vec($x, 2, 64) == 0;
-print "ok 40\n";
-
-
-print "not " unless ~0 == 0xffffffffffffffff;
-print "ok 41\n";
-
-print "not " unless (0xffffffff<<32) == 0xffffffff00000000;
-print "ok 42\n";
-
-print "not " unless ((0xffffffff)<<32)>>32 == 0xffffffff;
-print "ok 43\n";
-
-print "not " unless 1<<63 == 0x8000000000000000;
-print "ok 44\n";
-
-print "not " unless (sprintf "%#Vx", 1<<63) eq '0x8000000000000000';
-print "ok 45\n";
-
-print "not " unless (0x8000000000000000 | 1) == 0x8000000000000001;
-print "ok 46\n";
-
-print "not "
- unless (0xf000000000000000 & 0x8000000000000000) == 0x8000000000000000;
-print "ok 47\n";
-
-print "not "
- unless (0xf000000000000000 ^ 0xfffffffffffffff0) == 0x0ffffffffffffff0;
-print "ok 48\n";
-
-
-print "not "
- unless (sprintf "%b", ~0) eq
- '1111111111111111111111111111111111111111111111111111111111111111';
-print "ok 49\n";
-
-print "not "
- unless (sprintf "%64b", ~0) eq
- '1111111111111111111111111111111111111111111111111111111111111111';
-print "ok 50\n";
-
-print "not " unless (sprintf "%d", ~0>>1) eq '9223372036854775807';
-print "ok 51\n";
-
-print "not " unless (sprintf "%u", ~0) eq '18446744073709551615';
-print "ok 52\n";
-
-# If the 53..55 fail you have problems in the parser's string->int conversion,
-# see toke.c:scan_num().
-
-$q = -9223372036854775808;
-print "# $q ne\n# -9223372036854775808\nnot " unless "$q" eq "-9223372036854775808";
-print "ok 53\n";
-
-$q = 9223372036854775807;
-print "# $q ne\n# 9223372036854775807\nnot " unless "$q" eq "9223372036854775807";
-print "ok 54\n";
-
-$q = 18446744073709551615;
-print "# $q ne\n# 18446744073709551615\nnot " unless "$q" eq "18446744073709551615";
-print "ok 55\n";
-
-# eof
diff --git a/contrib/perl5/t/op/anonsub.t b/contrib/perl5/t/op/anonsub.t
deleted file mode 100755
index 17889d9..0000000
--- a/contrib/perl5/t/op/anonsub.t
+++ /dev/null
@@ -1,93 +0,0 @@
-#!./perl
-
-chdir 't' if -d 't';
-@INC = '../lib';
-$Is_VMS = $^O eq 'VMS';
-$Is_MSWin32 = $^O eq 'MSWin32';
-$ENV{PERL5LIB} = "../lib" unless $Is_VMS;
-
-$|=1;
-
-undef $/;
-@prgs = split "\n########\n", <DATA>;
-print "1..", scalar @prgs, "\n";
-
-$tmpfile = "asubtmp000";
-1 while -f ++$tmpfile;
-END { if ($tmpfile) { 1 while unlink $tmpfile; } }
-
-for (@prgs){
- my $switch = "";
- if (s/^\s*(-\w+)//){
- $switch = $1;
- }
- my($prog,$expected) = split(/\nEXPECT\n/, $_);
- open TEST, ">$tmpfile";
- print TEST "$prog\n";
- close TEST;
- my $results = $Is_VMS ?
- `MCR $^X "-I[-.lib]" $switch $tmpfile 2>&1` :
- $Is_MSWin32 ?
- `.\\perl -I../lib $switch $tmpfile 2>&1` :
- `./perl $switch $tmpfile 2>&1`;
- my $status = $?;
- $results =~ s/\n+$//;
- # allow expected output to be written as if $prog is on STDIN
- $results =~ s/runltmp\d+/-/g;
- $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS; # clip off DCL status msg
- $expected =~ s/\n+$//;
- if ($results ne $expected) {
- print STDERR "PROG: $switch\n$prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
- }
- print "ok ", ++$i, "\n";
-}
-
-__END__
-sub X {
- my $n = "ok 1\n";
- sub { print $n };
-}
-my $x = X();
-undef &X;
-$x->();
-EXPECT
-ok 1
-########
-sub X {
- my $n = "ok 1\n";
- sub {
- my $dummy = $n; # eval can't close on $n without internal reference
- eval 'print $n';
- die $@ if $@;
- };
-}
-my $x = X();
-undef &X;
-$x->();
-EXPECT
-ok 1
-########
-sub X {
- my $n = "ok 1\n";
- eval 'sub { print $n }';
-}
-my $x = X();
-die $@ if $@;
-undef &X;
-$x->();
-EXPECT
-ok 1
-########
-sub X;
-sub X {
- my $n = "ok 1\n";
- eval 'sub Y { my $p = shift; $p->() }';
- die $@ if $@;
- Y(sub { print $n });
-}
-X();
-EXPECT
-ok 1
diff --git a/contrib/perl5/t/op/append.t b/contrib/perl5/t/op/append.t
deleted file mode 100755
index 5aa4bf9..0000000
--- a/contrib/perl5/t/op/append.t
+++ /dev/null
@@ -1,59 +0,0 @@
-#!./perl
-
-# $RCSfile: append.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:36 $
-
-print "1..13\n";
-
-$a = 'ab' . 'c'; # compile time
-$b = 'def';
-
-$c = $a . $b;
-print "#1\t:$c: eq :abcdef:\n";
-if ($c eq 'abcdef') {print "ok 1\n";} else {print "not ok 1\n";}
-
-$c .= 'xyz';
-print "#2\t:$c: eq :abcdefxyz:\n";
-if ($c eq 'abcdefxyz') {print "ok 2\n";} else {print "not ok 2\n";}
-
-$_ = $a;
-$_ .= $b;
-print "#3\t:$_: eq :abcdef:\n";
-if ($_ eq 'abcdef') {print "ok 3\n";} else {print "not ok 3\n";}
-
-# test that when right argument of concat is UTF8, and is the same
-# variable as the target, and the left argument is not UTF8, it no
-# longer frees the wrong string.
-{
- sub r2 {
- my $string = '';
- $string .= pack("U0a*", 'mnopqrstuvwx');
- $string = "abcdefghijkl$string";
- }
-
- r2() and print "ok $_\n" for qw/ 4 5 /;
-}
-
-# test that nul bytes get copied
-{
-# Character 'b' occurs at codepoint 130 decimal or \202 octal
-# under an EBCDIC coded character set.
-# my($a, $ab) = ("a", "a\000b");
- my($a, $ab) = ("\141", "\141\000\142");
- my($u, $ub) = map pack("U0a*", $_), $a, $ab;
- my $t1 = $a; $t1 .= $ab;
- print $t1 =~ /\142/ ? "ok 6\n" : "not ok 6\t# $t1\n";
- my $t2 = $a; $t2 .= $ub;
- print $t2 =~ /\142/ ? "ok 7\n" : "not ok 7\t# $t2\n";
- my $t3 = $u; $t3 .= $ab;
- print $t3 =~ /\142/ ? "ok 8\n" : "not ok 8\t# $t3\n";
- my $t4 = $u; $t4 .= $ub;
- print $t4 =~ /\142/ ? "ok 9\n" : "not ok 9\t# $t4\n";
- my $t5 = $a; $t5 = $ab . $t5;
- print $t5 =~ /\142/ ? "ok 10\n" : "not ok 10\t# $t5\n";
- my $t6 = $a; $t6 = $ub . $t6;
- print $t6 =~ /\142/ ? "ok 11\n" : "not ok 11\t# $t6\n";
- my $t7 = $u; $t7 = $ab . $t7;
- print $t7 =~ /\142/ ? "ok 12\n" : "not ok 12\t# $t7\n";
- my $t8 = $u; $t8 = $ub . $t8;
- print $t8 =~ /\142/ ? "ok 13\n" : "not ok 13\t# $t8\n";
-}
diff --git a/contrib/perl5/t/op/args.t b/contrib/perl5/t/op/args.t
deleted file mode 100755
index ce2c398..0000000
--- a/contrib/perl5/t/op/args.t
+++ /dev/null
@@ -1,75 +0,0 @@
-#!./perl
-
-print "1..9\n";
-
-# test various operations on @_
-
-my $ord = 0;
-sub new1 { bless \@_ }
-{
- my $x = new1("x");
- my $y = new1("y");
- ++$ord;
- print "# got [@$y], expected [y]\nnot " unless "@$y" eq "y";
- print "ok $ord\n";
- ++$ord;
- print "# got [@$x], expected [x]\nnot " unless "@$x" eq "x";
- print "ok $ord\n";
-}
-
-sub new2 { splice @_, 0, 0, "a", "b", "c"; return \@_ }
-{
- my $x = new2("x");
- my $y = new2("y");
- ++$ord;
- print "# got [@$x], expected [a b c x]\nnot " unless "@$x" eq "a b c x";
- print "ok $ord\n";
- ++$ord;
- print "# got [@$y], expected [a b c y]\nnot " unless "@$y" eq "a b c y";
- print "ok $ord\n";
-}
-
-sub new3 { goto &new1 }
-{
- my $x = new3("x");
- my $y = new3("y");
- ++$ord;
- print "# got [@$y], expected [y]\nnot " unless "@$y" eq "y";
- print "ok $ord\n";
- ++$ord;
- print "# got [@$x], expected [x]\nnot " unless "@$x" eq "x";
- print "ok $ord\n";
-}
-
-sub new4 { goto &new2 }
-{
- my $x = new4("x");
- my $y = new4("y");
- ++$ord;
- print "# got [@$x], expected [a b c x]\nnot " unless "@$x" eq "a b c x";
- print "ok $ord\n";
- ++$ord;
- print "# got [@$y], expected [a b c y]\nnot " unless "@$y" eq "a b c y";
- print "ok $ord\n";
-}
-
-# see if POPSUB gets to see the right pad across a dounwind() with
-# a reified @_
-
-sub methimpl {
- my $refarg = \@_;
- die( "got: @_\n" );
-}
-
-sub method {
- &methimpl;
-}
-
-sub try {
- eval { method('foo', 'bar'); };
- print "# $@" if $@;
-}
-
-for (1..5) { try() }
-++$ord;
-print "ok $ord\n";
diff --git a/contrib/perl5/t/op/arith.t b/contrib/perl5/t/op/arith.t
deleted file mode 100755
index 5b04f93..0000000
--- a/contrib/perl5/t/op/arith.t
+++ /dev/null
@@ -1,30 +0,0 @@
-#!./perl
-
-print "1..12\n";
-
-sub try ($$) {
- print +($_[1] ? "ok" : "not ok"), " $_[0]\n";
-}
-
-try 1, 13 % 4 == 1;
-try 2, -13 % 4 == 3;
-try 3, 13 % -4 == -3;
-try 4, -13 % -4 == -1;
-
-my $limit = 1e6;
-
-# Division (and modulo) of floating point numbers
-# seem to be rather sloppy in Cray.
-$limit = 1e8 if $^O eq 'unicos';
-
-try 5, abs( 13e21 % 4e21 - 1e21) < $limit;
-try 6, abs(-13e21 % 4e21 - 3e21) < $limit;
-try 7, abs( 13e21 % -4e21 - -3e21) < $limit;
-try 8, abs(-13e21 % -4e21 - -1e21) < $limit;
-
-# UVs should behave properly
-
-try 9, 4063328477 % 65535 == 27407;
-try 10, 4063328477 % 4063328476 == 1;
-try 11, 4063328477 % 2031664238 == 1;
-try 12, 2031664238 % 4063328477 == 2031664238;
diff --git a/contrib/perl5/t/op/array.t b/contrib/perl5/t/op/array.t
deleted file mode 100755
index 7cc84e3..0000000
--- a/contrib/perl5/t/op/array.t
+++ /dev/null
@@ -1,231 +0,0 @@
-#!./perl
-
-print "1..70\n";
-
-#
-# @foo, @bar, and @ary are also used from tie-stdarray after tie-ing them
-#
-
-@ary = (1,2,3,4,5);
-if (join('',@ary) eq '12345') {print "ok 1\n";} else {print "not ok 1\n";}
-
-$tmp = $ary[$#ary]; --$#ary;
-if ($tmp == 5) {print "ok 2\n";} else {print "not ok 2\n";}
-if ($#ary == 3) {print "ok 3\n";} else {print "not ok 3\n";}
-if (join('',@ary) eq '1234') {print "ok 4\n";} else {print "not ok 4\n";}
-
-$[ = 1;
-@ary = (1,2,3,4,5);
-if (join('',@ary) eq '12345') {print "ok 5\n";} else {print "not ok 5\n";}
-
-$tmp = $ary[$#ary]; --$#ary;
-if ($tmp == 5) {print "ok 6\n";} else {print "not ok 6\n";}
-if ($#ary == 4) {print "ok 7\n";} else {print "not ok 7\n";}
-if (join('',@ary) eq '1234') {print "ok 8\n";} else {print "not ok 8\n";}
-
-if ($ary[5] eq '') {print "ok 9\n";} else {print "not ok 9\n";}
-
-$#ary += 1; # see if element 5 gone for good
-if ($#ary == 5) {print "ok 10\n";} else {print "not ok 10\n";}
-if (defined $ary[5]) {print "not ok 11\n";} else {print "ok 11\n";}
-
-$[ = 0;
-@foo = ();
-$r = join(',', $#foo, @foo);
-if ($r eq "-1") {print "ok 12\n";} else {print "not ok 12 $r\n";}
-$foo[0] = '0';
-$r = join(',', $#foo, @foo);
-if ($r eq "0,0") {print "ok 13\n";} else {print "not ok 13 $r\n";}
-$foo[2] = '2';
-$r = join(',', $#foo, @foo);
-if ($r eq "2,0,,2") {print "ok 14\n";} else {print "not ok 14 $r\n";}
-@bar = ();
-$bar[0] = '0';
-$bar[1] = '1';
-$r = join(',', $#bar, @bar);
-if ($r eq "1,0,1") {print "ok 15\n";} else {print "not ok 15 $r\n";}
-@bar = ();
-$r = join(',', $#bar, @bar);
-if ($r eq "-1") {print "ok 16\n";} else {print "not ok 16 $r\n";}
-$bar[0] = '0';
-$r = join(',', $#bar, @bar);
-if ($r eq "0,0") {print "ok 17\n";} else {print "not ok 17 $r\n";}
-$bar[2] = '2';
-$r = join(',', $#bar, @bar);
-if ($r eq "2,0,,2") {print "ok 18\n";} else {print "not ok 18 $r\n";}
-reset 'b';
-@bar = ();
-$bar[0] = '0';
-$r = join(',', $#bar, @bar);
-if ($r eq "0,0") {print "ok 19\n";} else {print "not ok 19 $r\n";}
-$bar[2] = '2';
-$r = join(',', $#bar, @bar);
-if ($r eq "2,0,,2") {print "ok 20\n";} else {print "not ok 20 $r\n";}
-
-$foo = 'now is the time';
-if (($F1,$F2,$Etc) = ($foo =~ /^(\S+)\s+(\S+)\s*(.*)/)) {
- if ($F1 eq 'now' && $F2 eq 'is' && $Etc eq 'the time') {
- print "ok 21\n";
- }
- else {
- print "not ok 21\n";
- }
-}
-else {
- print "not ok 21\n";
-}
-
-$foo = 'lskjdf';
-if ($cnt = (($F1,$F2,$Etc) = ($foo =~ /^(\S+)\s+(\S+)\s*(.*)/))) {
- print "not ok 22 $cnt $F1:$F2:$Etc\n";
-}
-else {
- print "ok 22\n";
-}
-
-%foo = ('blurfl','dyick','foo','bar','etc.','etc.');
-%bar = %foo;
-print $bar{'foo'} eq 'bar' ? "ok 23\n" : "not ok 23\n";
-%bar = ();
-print $bar{'foo'} eq '' ? "ok 24\n" : "not ok 24\n";
-(%bar,$a,$b) = (%foo,'how','now');
-print $bar{'foo'} eq 'bar' ? "ok 25\n" : "not ok 25\n";
-print $bar{'how'} eq 'now' ? "ok 26\n" : "not ok 26\n";
-@bar{keys %foo} = values %foo;
-print $bar{'foo'} eq 'bar' ? "ok 27\n" : "not ok 27\n";
-print $bar{'how'} eq 'now' ? "ok 28\n" : "not ok 28\n";
-
-@foo = grep(/e/,split(' ','now is the time for all good men to come to'));
-print join(' ',@foo) eq 'the time men come' ? "ok 29\n" : "not ok 29\n";
-
-@foo = grep(!/e/,split(' ','now is the time for all good men to come to'));
-print join(' ',@foo) eq 'now is for all good to to' ? "ok 30\n" : "not ok 30\n";
-
-$foo = join('',('a','b','c','d','e','f')[0..5]);
-print $foo eq 'abcdef' ? "ok 31\n" : "not ok 31\n";
-
-$foo = join('',('a','b','c','d','e','f')[0..1]);
-print $foo eq 'ab' ? "ok 32\n" : "not ok 32\n";
-
-$foo = join('',('a','b','c','d','e','f')[6]);
-print $foo eq '' ? "ok 33\n" : "not ok 33\n";
-
-@foo = ('a','b','c','d','e','f')[0,2,4];
-@bar = ('a','b','c','d','e','f')[1,3,5];
-$foo = join('',(@foo,@bar)[0..5]);
-print $foo eq 'acebdf' ? "ok 34\n" : "not ok 34\n";
-
-$foo = ('a','b','c','d','e','f')[0,2,4];
-print $foo eq 'e' ? "ok 35\n" : "not ok 35\n";
-
-$foo = ('a','b','c','d','e','f')[1];
-print $foo eq 'b' ? "ok 36\n" : "not ok 36\n";
-
-@foo = ( 'foo', 'bar', 'burbl');
-push(foo, 'blah');
-print $#foo == 3 ? "ok 37\n" : "not ok 37\n";
-
-# various AASSIGN_COMMON checks (see newASSIGNOP() in op.c)
-
-$test = 37;
-sub t { ++$test; print "not " unless $_[0]; print "ok $test\n"; }
-
-@foo = @foo;
-t("@foo" eq "foo bar burbl blah"); # 38
-
-(undef,@foo) = @foo;
-t("@foo" eq "bar burbl blah"); # 39
-
-@foo = ('XXX',@foo, 'YYY');
-t("@foo" eq "XXX bar burbl blah YYY"); # 40
-
-@foo = @foo = qw(foo b\a\r bu\\rbl blah);
-t("@foo" eq 'foo b\a\r bu\\rbl blah'); # 41
-
-@bar = @foo = qw(foo bar); # 42
-t("@foo" eq "foo bar");
-t("@bar" eq "foo bar"); # 43
-
-# try the same with local
-# XXX tie-stdarray fails the tests involving local, so we use
-# different variable names to escape the 'tie'
-
-@bee = ( 'foo', 'bar', 'burbl', 'blah');
-{
-
- local @bee = @bee;
- t("@bee" eq "foo bar burbl blah"); # 44
- {
- local (undef,@bee) = @bee;
- t("@bee" eq "bar burbl blah"); # 45
- {
- local @bee = ('XXX',@bee,'YYY');
- t("@bee" eq "XXX bar burbl blah YYY"); # 46
- {
- local @bee = local(@bee) = qw(foo bar burbl blah);
- t("@bee" eq "foo bar burbl blah"); # 47
- {
- local (@bim) = local(@bee) = qw(foo bar);
- t("@bee" eq "foo bar"); # 48
- t("@bim" eq "foo bar"); # 49
- }
- t("@bee" eq "foo bar burbl blah"); # 50
- }
- t("@bee" eq "XXX bar burbl blah YYY"); # 51
- }
- t("@bee" eq "bar burbl blah"); # 52
- }
- t("@bee" eq "foo bar burbl blah"); # 53
-}
-
-# try the same with my
-{
-
- my @bee = @bee;
- t("@bee" eq "foo bar burbl blah"); # 54
- {
- my (undef,@bee) = @bee;
- t("@bee" eq "bar burbl blah"); # 55
- {
- my @bee = ('XXX',@bee,'YYY');
- t("@bee" eq "XXX bar burbl blah YYY"); # 56
- {
- my @bee = my @bee = qw(foo bar burbl blah);
- t("@bee" eq "foo bar burbl blah"); # 57
- {
- my (@bim) = my(@bee) = qw(foo bar);
- t("@bee" eq "foo bar"); # 58
- t("@bim" eq "foo bar"); # 59
- }
- t("@bee" eq "foo bar burbl blah"); # 60
- }
- t("@bee" eq "XXX bar burbl blah YYY"); # 61
- }
- t("@bee" eq "bar burbl blah"); # 62
- }
- t("@bee" eq "foo bar burbl blah"); # 63
-}
-
-# make sure reification behaves
-my $t = 63;
-sub reify { $_[1] = ++$t; print "@_\n"; }
-reify('ok');
-reify('ok');
-
-# qw() is no more a runtime split, it's compiletime.
-print "not " unless qw(foo bar snorfle)[2] eq 'snorfle';
-print "ok 66\n";
-
-@ary = (12,23,34,45,56);
-
-print "not " unless shift(@ary) == 12;
-print "ok 67\n";
-
-print "not " unless pop(@ary) == 56;
-print "ok 68\n";
-
-print "not " unless push(@ary,56) == 4;
-print "ok 69\n";
-
-print "not " unless unshift(@ary,12) == 5;
-print "ok 70\n";
diff --git a/contrib/perl5/t/op/assignwarn.t b/contrib/perl5/t/op/assignwarn.t
deleted file mode 100755
index aff433c..0000000
--- a/contrib/perl5/t/op/assignwarn.t
+++ /dev/null
@@ -1,73 +0,0 @@
-#!./perl
-
-#
-# Verify which OP= operators warn if their targets are undefined.
-# Based on redef.t, contributed by Graham Barr <Graham.Barr@tiuk.ti.com>
-# -- Robin Barker <rmb@cise.npl.co.uk>
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-use warnings;
-
-my $warn = "";
-$SIG{q(__WARN__)} = sub { print $warn; $warn .= join("",@_) };
-
-sub ok { print $_[1] ? "ok " : "not ok ", $_[0], "\n"; }
-
-sub uninitialized { $warn =~ s/Use of uninitialized value[^\n]+\n//s; }
-
-print "1..32\n";
-
-{ my $x; $x ++; ok 1, ! uninitialized; }
-{ my $x; $x --; ok 2, ! uninitialized; }
-{ my $x; ++ $x; ok 3, ! uninitialized; }
-{ my $x; -- $x; ok 4, ! uninitialized; }
-
-{ my $x; $x **= 1; ok 5, uninitialized; }
-
-{ my $x; $x += 1; ok 6, ! uninitialized; }
-{ my $x; $x -= 1; ok 7, ! uninitialized; }
-
-{ my $x; $x .= 1; ok 8, ! uninitialized; }
-
-{ my $x; $x *= 1; ok 9, uninitialized; }
-{ my $x; $x /= 1; ok 10, uninitialized; }
-{ my $x; $x %= 1; ok 11, uninitialized; }
-
-{ my $x; $x x= 1; ok 12, uninitialized; }
-
-{ my $x; $x &= 1; ok 13, uninitialized; }
-{ my $x; $x |= 1; ok 14, ! uninitialized; }
-{ my $x; $x ^= 1; ok 15, ! uninitialized; }
-
-{ my $x; $x &&= 1; ok 16, ! uninitialized; }
-{ my $x; $x ||= 1; ok 17, ! uninitialized; }
-
-{ my $x; $x <<= 1; ok 18, uninitialized; }
-{ my $x; $x >>= 1; ok 19, uninitialized; }
-
-{ my $x; $x &= "x"; ok 20, uninitialized; }
-{ my $x; $x |= "x"; ok 21, ! uninitialized; }
-{ my $x; $x ^= "x"; ok 22, ! uninitialized; }
-
-{ use integer; my $x; $x += 1; ok 23, ! uninitialized; }
-{ use integer; my $x; $x -= 1; ok 24, ! uninitialized; }
-
-{ use integer; my $x; $x *= 1; ok 25, uninitialized; }
-{ use integer; my $x; $x /= 1; ok 26, uninitialized; }
-{ use integer; my $x; $x %= 1; ok 27, uninitialized; }
-
-{ use integer; my $x; $x ++; ok 28, ! uninitialized; }
-{ use integer; my $x; $x --; ok 29, ! uninitialized; }
-{ use integer; my $x; ++ $x; ok 30, ! uninitialized; }
-{ use integer; my $x; -- $x; ok 31, ! uninitialized; }
-
-ok 32, $warn eq '';
-
-# If we got any errors that we were not expecting, then print them
-print map "#$_\n", split /\n/, $warn if length $warn;
diff --git a/contrib/perl5/t/op/attrs.t b/contrib/perl5/t/op/attrs.t
deleted file mode 100755
index 2702004..0000000
--- a/contrib/perl5/t/op/attrs.t
+++ /dev/null
@@ -1,176 +0,0 @@
-#!./perl -w
-
-# Regression tests for attributes.pm and the C< : attrs> syntax.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-sub NTESTS () ;
-
-my ($test, $ntests);
-BEGIN {$ntests=0}
-$test=0;
-my $failed = 0;
-
-print "1..".NTESTS."\n";
-
-$SIG{__WARN__} = sub { die @_ };
-
-sub mytest {
- if (!$@ ne !$_[0] || $_[0] && $@ !~ $_[0]) {
- if ($@) {
- my $x = $@;
- $x =~ s/\n.*\z//s;
- print "# Got: $x\n"
- }
- else {
- print "# Got unexpected success\n";
- }
- if ($_[0]) {
- print "# Expected: $_[0]\n";
- }
- else {
- print "# Expected success\n";
- }
- $failed = 1;
- print "not ";
- }
- elsif (@_ == 3 && $_[1] ne $_[2]) {
- print "# Got: $_[1]\n";
- print "# Expected: $_[2]\n";
- $failed = 1;
- print "not ";
- }
- print "ok ",++$test,"\n";
-}
-
-eval 'sub t1 ($) : locked { $_[0]++ }';
-mytest;
-BEGIN {++$ntests}
-
-eval 'sub t2 : locked { $_[0]++ }';
-mytest;
-BEGIN {++$ntests}
-
-eval 'sub t3 ($) : locked ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'sub t4 : locked ;';
-mytest;
-BEGIN {++$ntests}
-
-my $anon1;
-eval '$anon1 = sub ($) : locked:method { $_[0]++ }';
-mytest;
-BEGIN {++$ntests}
-
-my $anon2;
-eval '$anon2 = sub : locked : method { $_[0]++ }';
-mytest;
-BEGIN {++$ntests}
-
-my $anon3;
-eval '$anon3 = sub : method { $_[0]->[1] }';
-mytest;
-BEGIN {++$ntests}
-
-eval 'sub e1 ($) : plugh ;';
-mytest qr/^Invalid CODE attributes?: ["']?plugh["']? at/;
-BEGIN {++$ntests}
-
-eval 'sub e2 ($) : plugh(0,0) xyzzy ;';
-mytest qr/^Invalid CODE attributes: ["']?plugh\(0,0\)["']? /;
-BEGIN {++$ntests}
-
-eval 'sub e3 ($) : plugh(0,0 xyzzy ;';
-mytest qr/Unterminated attribute parameter in attribute list at/;
-BEGIN {++$ntests}
-
-eval 'sub e4 ($) : plugh + xyzzy ;';
-mytest qr/Invalid separator character '[+]' in attribute list at/;
-BEGIN {++$ntests}
-
-eval 'my main $x : = 0;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my $x : = 0;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my $x ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x) : = 0;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x) ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x) : ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x,$y) : = 0;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x,$y) ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x,$y) : ;';
-mytest;
-BEGIN {++$ntests}
-
-eval 'my ($x,$y) : plugh;';
-mytest qr/^Invalid SCALAR attribute: ["']?plugh["']? at/;
-BEGIN {++$ntests}
-
-sub A::MODIFY_SCALAR_ATTRIBUTES { return }
-eval 'my A $x : plugh;';
-mytest qr/^SCALAR package attribute may clash with future reserved word: ["']?plugh["']? at/;
-BEGIN {++$ntests}
-
-eval 'my A $x : plugh plover;';
-mytest qr/^SCALAR package attributes may clash with future reserved words: ["']?plugh["']? /;
-BEGIN {++$ntests}
-
-sub X::MODIFY_CODE_ATTRIBUTES { die "$_[0]" }
-sub X::foo { 1 }
-*Y::bar = \&X::foo;
-*Y::bar = \&X::foo; # second time for -w
-eval 'package Z; sub Y::bar : locked';
-mytest qr/^X at /;
-BEGIN {++$ntests}
-
-my @attrs = eval 'attributes::get \&Y::bar';
-mytest '', "@attrs", "locked";
-BEGIN {++$ntests}
-
-@attrs = eval 'attributes::get $anon1';
-mytest '', "@attrs", "locked method";
-BEGIN {++$ntests}
-
-sub Z::DESTROY { }
-sub Z::FETCH_CODE_ATTRIBUTES { return 'Z' }
-my $thunk = eval 'bless +sub : method locked { 1 }, "Z"';
-mytest '', ref($thunk), "Z";
-BEGIN {++$ntests}
-
-@attrs = eval 'attributes::get $thunk';
-mytest '', "@attrs", "locked method Z";
-BEGIN {++$ntests}
-
-
-# Other tests should be added above this line
-
-sub NTESTS () { $ntests }
-
-exit $failed;
diff --git a/contrib/perl5/t/op/auto.t b/contrib/perl5/t/op/auto.t
deleted file mode 100755
index 2eb0097..0000000
--- a/contrib/perl5/t/op/auto.t
+++ /dev/null
@@ -1,52 +0,0 @@
-#!./perl
-
-# $RCSfile: auto.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:39 $
-
-print "1..37\n";
-
-$x = 10000;
-if (0 + ++$x - 1 == 10000) { print "ok 1\n";} else {print "not ok 1\n";}
-if (0 + $x-- - 1 == 10000) { print "ok 2\n";} else {print "not ok 2\n";}
-if (1 * $x == 10000) { print "ok 3\n";} else {print "not ok 3\n";}
-if (0 + $x-- - 0 == 10000) { print "ok 4\n";} else {print "not ok 4\n";}
-if (1 + $x == 10000) { print "ok 5\n";} else {print "not ok 5\n";}
-if (1 + $x++ == 10000) { print "ok 6\n";} else {print "not ok 6\n";}
-if (0 + $x == 10000) { print "ok 7\n";} else {print "not ok 7\n";}
-if (0 + --$x + 1 == 10000) { print "ok 8\n";} else {print "not ok 8\n";}
-if (0 + ++$x + 0 == 10000) { print "ok 9\n";} else {print "not ok 9\n";}
-if ($x == 10000) { print "ok 10\n";} else {print "not ok 10\n";}
-
-$x[0] = 10000;
-if (0 + ++$x[0] - 1 == 10000) { print "ok 11\n";} else {print "not ok 11\n";}
-if (0 + $x[0]-- - 1 == 10000) { print "ok 12\n";} else {print "not ok 12\n";}
-if (1 * $x[0] == 10000) { print "ok 13\n";} else {print "not ok 13\n";}
-if (0 + $x[0]-- - 0 == 10000) { print "ok 14\n";} else {print "not ok 14\n";}
-if (1 + $x[0] == 10000) { print "ok 15\n";} else {print "not ok 15\n";}
-if (1 + $x[0]++ == 10000) { print "ok 16\n";} else {print "not ok 16\n";}
-if (0 + $x[0] == 10000) { print "ok 17\n";} else {print "not ok 17\n";}
-if (0 + --$x[0] + 1 == 10000) { print "ok 18\n";} else {print "not ok 18\n";}
-if (0 + ++$x[0] + 0 == 10000) { print "ok 19\n";} else {print "not ok 19\n";}
-if ($x[0] == 10000) { print "ok 20\n";} else {print "not ok 20\n";}
-
-$x{0} = 10000;
-if (0 + ++$x{0} - 1 == 10000) { print "ok 21\n";} else {print "not ok 21\n";}
-if (0 + $x{0}-- - 1 == 10000) { print "ok 22\n";} else {print "not ok 22\n";}
-if (1 * $x{0} == 10000) { print "ok 23\n";} else {print "not ok 23\n";}
-if (0 + $x{0}-- - 0 == 10000) { print "ok 24\n";} else {print "not ok 24\n";}
-if (1 + $x{0} == 10000) { print "ok 25\n";} else {print "not ok 25\n";}
-if (1 + $x{0}++ == 10000) { print "ok 26\n";} else {print "not ok 26\n";}
-if (0 + $x{0} == 10000) { print "ok 27\n";} else {print "not ok 27\n";}
-if (0 + --$x{0} + 1 == 10000) { print "ok 28\n";} else {print "not ok 28\n";}
-if (0 + ++$x{0} + 0 == 10000) { print "ok 29\n";} else {print "not ok 29\n";}
-if ($x{0} == 10000) { print "ok 30\n";} else {print "not ok 30\n";}
-
-# test magical autoincrement
-
-if (++($foo = '99') eq '100') {print "ok 31\n";} else {print "not ok 31\n";}
-if (++($foo = 'a0') eq 'a1') {print "ok 32\n";} else {print "not ok 32\n";}
-if (++($foo = 'Az') eq 'Ba') {print "ok 33\n";} else {print "not ok 33\n";}
-if (++($foo = 'zz') eq 'aaa') {print "ok 34\n";} else {print "not ok 34\n";}
-if (++($foo = 'A99') eq 'B00') {print "ok 35\n";} else {print "not ok 35\n";}
-# EBCDIC guards: i and j, r and s, are not contiguous.
-if (++($foo = 'zi') eq 'zj') {print "ok 36\n";} else {print "not ok 36\n";}
-if (++($foo = 'zr') eq 'zs') {print "ok 37\n";} else {print "not ok 37\n";}
diff --git a/contrib/perl5/t/op/avhv.t b/contrib/perl5/t/op/avhv.t
deleted file mode 100755
index 5b91fd2..0000000
--- a/contrib/perl5/t/op/avhv.t
+++ /dev/null
@@ -1,178 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-require Tie::Array;
-
-package Tie::BasicArray;
-@ISA = 'Tie::Array';
-sub TIEARRAY { bless [], $_[0] }
-sub STORE { $_[0]->[$_[1]] = $_[2] }
-sub FETCH { $_[0]->[$_[1]] }
-sub FETCHSIZE { scalar(@{$_[0]})}
-sub STORESIZE { $#{$_[0]} = $_[1]+1 }
-
-package main;
-
-print "1..28\n";
-
-$sch = {
- 'abc' => 1,
- 'def' => 2,
- 'jkl' => 3,
-};
-
-# basic normal array
-$a = [];
-$a->[0] = $sch;
-
-$a->{'abc'} = 'ABC';
-$a->{'def'} = 'DEF';
-$a->{'jkl'} = 'JKL';
-
-@keys = keys %$a;
-@values = values %$a;
-
-if ($#keys == 2 && $#values == 2) {print "ok 1\n";} else {print "not ok 1\n";}
-
-$i = 0; # stop -w complaints
-
-while (($key,$value) = each %$a) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-if ($i == 3) {print "ok 2\n";} else {print "not ok 2\n";}
-
-# quick check with tied array
-tie @fake, 'Tie::StdArray';
-$a = \@fake;
-$a->[0] = $sch;
-
-$a->{'abc'} = 'ABC';
-if ($a->{'abc'} eq 'ABC') {print "ok 3\n";} else {print "not ok 3\n";}
-
-# quick check with tied array
-tie @fake, 'Tie::BasicArray';
-$a = \@fake;
-$a->[0] = $sch;
-
-$a->{'abc'} = 'ABC';
-if ($a->{'abc'} eq 'ABC') {print "ok 4\n";} else {print "not ok 4\n";}
-
-# quick check with tied array & tied hash
-require Tie::Hash;
-tie %fake, Tie::StdHash;
-%fake = %$sch;
-$a->[0] = \%fake;
-
-$a->{'abc'} = 'ABC';
-if ($a->{'abc'} eq 'ABC') {print "ok 5\n";} else {print "not ok 5\n";}
-
-# hash slice
-my $slice = join('', 'x',@$a{'abc','def'},'x');
-print "not " if $slice ne 'xABCx';
-print "ok 6\n";
-
-# evaluation in scalar context
-my $avhv = [{}];
-print "not " if %$avhv;
-print "ok 7\n";
-
-push @$avhv, "a";
-print "not " if %$avhv;
-print "ok 8\n";
-
-$avhv = [];
-eval { $a = %$avhv };
-print "not " unless $@ and $@ =~ /^Can't coerce array into hash/;
-print "ok 9\n";
-
-$avhv = [{foo=>1, bar=>2}];
-print "not " unless %$avhv =~ m,^\d+/\d+,;
-print "ok 10\n";
-
-# check if defelem magic works
-sub f {
- print "not " unless $_[0] eq 'a';
- $_[0] = 'b';
- print "ok 11\n";
-}
-$a = [{key => 1}, 'a'];
-f($a->{key});
-print "not " unless $a->[1] eq 'b';
-print "ok 12\n";
-
-# check if exists() is behaving properly
-$avhv = [{foo=>1,bar=>2,pants=>3}];
-print "not " if exists $avhv->{bar};
-print "ok 13\n";
-
-$avhv->{pants} = undef;
-print "not " unless exists $avhv->{pants};
-print "ok 14\n";
-print "not " if exists $avhv->{bar};
-print "ok 15\n";
-
-$avhv->{bar} = 10;
-print "not " unless exists $avhv->{bar} and $avhv->{bar} == 10;
-print "ok 16\n";
-
-$v = delete $avhv->{bar};
-print "not " unless $v == 10;
-print "ok 17\n";
-
-print "not " if exists $avhv->{bar};
-print "ok 18\n";
-
-$avhv->{foo} = 'xxx';
-$avhv->{bar} = 'yyy';
-$avhv->{pants} = 'zzz';
-@x = delete @{$avhv}{'foo','pants'};
-print "# @x\nnot " unless "@x" eq "xxx zzz";
-print "ok 19\n";
-
-print "not " unless "$avhv->{bar}" eq "yyy";
-print "ok 20\n";
-
-# hash assignment
-%$avhv = ();
-print "not " unless ref($avhv->[0]) eq 'HASH';
-print "ok 21\n";
-
-%hv = %$avhv;
-print "not " if grep defined, values %hv;
-print "ok 22\n";
-print "not " if grep ref, keys %hv;
-print "ok 23\n";
-
-%$avhv = (foo => 29, pants => 2, bar => 0);
-print "not " unless "@$avhv[1..3]" eq '29 0 2';
-print "ok 24\n";
-
-my $extra;
-my @extra;
-($extra, %$avhv) = ("moo", foo => 42, pants => 53, bar => "HIKE!");
-print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and $extra eq 'moo';
-print "ok 25\n";
-
-%$avhv = ();
-(%$avhv, $extra) = (foo => 42, pants => 53, bar => "HIKE!");
-print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and !defined $extra;
-print "ok 26\n";
-
-@extra = qw(whatever and stuff);
-%$avhv = ();
-(%$avhv, @extra) = (foo => 42, pants => 53, bar => "HIKE!");
-print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and @extra == 0;
-print "ok 27\n";
-
-%$avhv = ();
-(@extra, %$avhv) = (foo => 42, pants => 53, bar => "HIKE!");
-print "not " unless ref $avhv->[0] eq 'HASH' and @extra == 6;
-print "ok 28\n";
diff --git a/contrib/perl5/t/op/bop.t b/contrib/perl5/t/op/bop.t
deleted file mode 100755
index 0354f00..0000000
--- a/contrib/perl5/t/op/bop.t
+++ /dev/null
@@ -1,171 +0,0 @@
-#!./perl
-
-#
-# test the bit operators '&', '|', '^', '~', '<<', and '>>'
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..44\n";
-
-# numerics
-print ((0xdead & 0xbeef) == 0x9ead ? "ok 1\n" : "not ok 1\n");
-print ((0xdead | 0xbeef) == 0xfeef ? "ok 2\n" : "not ok 2\n");
-print ((0xdead ^ 0xbeef) == 0x6042 ? "ok 3\n" : "not ok 3\n");
-print ((~0xdead & 0xbeef) == 0x2042 ? "ok 4\n" : "not ok 4\n");
-
-# shifts
-print ((257 << 7) == 32896 ? "ok 5\n" : "not ok 5\n");
-print ((33023 >> 7) == 257 ? "ok 6\n" : "not ok 6\n");
-
-# signed vs. unsigned
-print ((~0 > 0 && do { use integer; ~0 } == -1)
- ? "ok 7\n" : "not ok 7\n");
-
-my $bits = 0;
-for (my $i = ~0; $i; $i >>= 1) { ++$bits; }
-my $cusp = 1 << ($bits - 1);
-
-print ((($cusp & -1) > 0 && do { use integer; $cusp & -1 } < 0)
- ? "ok 8\n" : "not ok 8\n");
-print ((($cusp | 1) > 0 && do { use integer; $cusp | 1 } < 0)
- ? "ok 9\n" : "not ok 9\n");
-print ((($cusp ^ 1) > 0 && do { use integer; $cusp ^ 1 } < 0)
- ? "ok 10\n" : "not ok 10\n");
-print (((1 << ($bits - 1)) == $cusp &&
- do { use integer; 1 << ($bits - 1) } == -$cusp)
- ? "ok 11\n" : "not ok 11\n");
-print ((($cusp >> 1) == ($cusp / 2) &&
- do { use integer; abs($cusp >> 1) } == ($cusp / 2))
- ? "ok 12\n" : "not ok 12\n");
-
-$Aaz = chr(ord("A") & ord("z"));
-$Aoz = chr(ord("A") | ord("z"));
-$Axz = chr(ord("A") ^ ord("z"));
-
-# short strings
-print (("AAAAA" & "zzzzz") eq ($Aaz x 5) ? "ok 13\n" : "not ok 13\n");
-print (("AAAAA" | "zzzzz") eq ($Aoz x 5) ? "ok 14\n" : "not ok 14\n");
-print (("AAAAA" ^ "zzzzz") eq ($Axz x 5) ? "ok 15\n" : "not ok 15\n");
-
-# long strings
-$foo = "A" x 150;
-$bar = "z" x 75;
-$zap = "A" x 75;
-# & truncates
-print (($foo & $bar) eq ($Aaz x 75 ) ? "ok 16\n" : "not ok 16\n");
-# | does not truncate
-print (($foo | $bar) eq ($Aoz x 75 . $zap) ? "ok 17\n" : "not ok 17\n");
-# ^ does not truncate
-print (($foo ^ $bar) eq ($Axz x 75 . $zap) ? "ok 18\n" : "not ok 18\n");
-
-#
-print "ok \xFF\xFF\n" & "ok 19\n";
-print "ok 20\n" | "ok \0\0\n";
-print "o\000 \0001\000" ^ "\000k\0002\000\n";
-
-#
-print "ok \x{FF}\x{FF}\n" & "ok 22\n";
-print "ok 23\n" | "ok \x{0}\x{0}\n";
-print "o\x{0} \x{0}4\x{0}" ^ "\x{0}k\x{0}2\x{0}\n";
-
-#
-print "ok 25\n" if sprintf("%vd", v4095 & v801) eq 801;
-print "ok 26\n" if sprintf("%vd", v4095 | v801) eq 4095;
-print "ok 27\n" if sprintf("%vd", v4095 ^ v801) eq 3294;
-
-#
-print "ok 28\n" if sprintf("%vd", v4095.801.4095 & v801.4095) eq '801.801';
-print "ok 29\n" if sprintf("%vd", v4095.801.4095 | v801.4095) eq '4095.4095.4095';
-print "ok 30\n" if sprintf("%vd", v801.4095 ^ v4095.801.4095) eq '3294.3294.4095';
-#
-print "ok 31\n" if sprintf("%vd", v120.300 & v200.400) eq '72.256';
-print "ok 32\n" if sprintf("%vd", v120.300 | v200.400) eq '248.444';
-print "ok 33\n" if sprintf("%vd", v120.300 ^ v200.400) eq '176.188';
-#
-my $a = v120.300;
-my $b = v200.400;
-$a ^= $b;
-print "ok 34\n" if sprintf("%vd", $a) eq '176.188';
-my $a = v120.300;
-my $b = v200.400;
-$a |= $b;
-print "ok 35\n" if sprintf("%vd", $a) eq '248.444';
-
-#
-# UTF8 ~ behaviour
-#
-
-my @not36;
-
-for (0x100...0xFFF) {
- $a = ~(chr $_);
- push @not36, sprintf("%#03X", $_)
- if $a ne chr(~$_) or length($a) != 1 or ~$a ne chr($_);
-}
-if (@not36) {
- print "# test 36 failed\n";
- print "not ";
-}
-print "ok 36\n";
-
-my @not37;
-
-for my $i (0xEEE...0xF00) {
- for my $j (0x0..0x120) {
- $a = ~(chr ($i) . chr $j);
- push @not37, sprintf("%#03X %#03X", $i, $j)
- if $a ne chr(~$i).chr(~$j) or
- length($a) != 2 or
- ~$a ne chr($i).chr($j);
- }
-}
-if (@not37) {
- print "# test 37 failed\n";
- print "not ";
-}
-print "ok 37\n";
-
-print "not " unless ~chr(~0) eq "\0";
-print "ok 38\n";
-
-my @not39;
-
-for my $i (0x100..0x120) {
- for my $j (0x100...0x120) {
- push @not39, sprintf("%#03X %#03X", $i, $j)
- if ~(chr($i)|chr($j)) ne (~chr($i)&~chr($j));
- }
-}
-if (@not39) {
- print "# test 39 failed\n";
- print "not ";
-}
-print "ok 39\n";
-
-my @not40;
-
-for my $i (0x100..0x120) {
- for my $j (0x100...0x120) {
- push @not40, sprintf("%#03X %#03X", $i, $j)
- if ~(chr($i)&chr($j)) ne (~chr($i)|~chr($j));
- }
-}
-if (@not40) {
- print "# test 40 failed\n";
- print "not ";
-}
-print "ok 40\n";
-
-# More variations on 19 and 22.
-print "ok \xFF\x{FF}\n" & "ok 41\n";
-print "ok \x{FF}\xFF\n" & "ok 42\n";
-
-# Tests to see if you really can do casts negative floats to unsigned properly
-$neg1 = -1.0;
-print ((~ $neg1 == 0) ? "ok 43\n" : "not ok 43\n");
-$neg7 = -7.0;
-print ((~ $neg7 == 6) ? "ok 44\n" : "not ok 44\n");
diff --git a/contrib/perl5/t/op/chars.t b/contrib/perl5/t/op/chars.t
deleted file mode 100755
index efdea02..0000000
--- a/contrib/perl5/t/op/chars.t
+++ /dev/null
@@ -1,74 +0,0 @@
-#!./perl
-
-print "1..33\n";
-
-# because of ebcdic.c these should be the same on asciiish
-# and ebcdic machines.
-# Peter Prymmer <pvhp@best.com>.
-
-my $c = "\c@";
-print +((ord($c) == 0) ? "" : "not "),"ok 1\n";
-$c = "\cA";
-print +((ord($c) == 1) ? "" : "not "),"ok 2\n";
-$c = "\cB";
-print +((ord($c) == 2) ? "" : "not "),"ok 3\n";
-$c = "\cC";
-print +((ord($c) == 3) ? "" : "not "),"ok 4\n";
-$c = "\cD";
-print +((ord($c) == 4) ? "" : "not "),"ok 5\n";
-$c = "\cE";
-print +((ord($c) == 5) ? "" : "not "),"ok 6\n";
-$c = "\cF";
-print +((ord($c) == 6) ? "" : "not "),"ok 7\n";
-$c = "\cG";
-print +((ord($c) == 7) ? "" : "not "),"ok 8\n";
-$c = "\cH";
-print +((ord($c) == 8) ? "" : "not "),"ok 9\n";
-$c = "\cI";
-print +((ord($c) == 9) ? "" : "not "),"ok 10\n";
-$c = "\cJ";
-print +((ord($c) == 10) ? "" : "not "),"ok 11\n";
-$c = "\cK";
-print +((ord($c) == 11) ? "" : "not "),"ok 12\n";
-$c = "\cL";
-print +((ord($c) == 12) ? "" : "not "),"ok 13\n";
-$c = "\cM";
-print +((ord($c) == 13) ? "" : "not "),"ok 14\n";
-$c = "\cN";
-print +((ord($c) == 14) ? "" : "not "),"ok 15\n";
-$c = "\cO";
-print +((ord($c) == 15) ? "" : "not "),"ok 16\n";
-$c = "\cP";
-print +((ord($c) == 16) ? "" : "not "),"ok 17\n";
-$c = "\cQ";
-print +((ord($c) == 17) ? "" : "not "),"ok 18\n";
-$c = "\cR";
-print +((ord($c) == 18) ? "" : "not "),"ok 19\n";
-$c = "\cS";
-print +((ord($c) == 19) ? "" : "not "),"ok 20\n";
-$c = "\cT";
-print +((ord($c) == 20) ? "" : "not "),"ok 21\n";
-$c = "\cU";
-print +((ord($c) == 21) ? "" : "not "),"ok 22\n";
-$c = "\cV";
-print +((ord($c) == 22) ? "" : "not "),"ok 23\n";
-$c = "\cW";
-print +((ord($c) == 23) ? "" : "not "),"ok 24\n";
-$c = "\cX";
-print +((ord($c) == 24) ? "" : "not "),"ok 25\n";
-$c = "\cY";
-print +((ord($c) == 25) ? "" : "not "),"ok 26\n";
-$c = "\cZ";
-print +((ord($c) == 26) ? "" : "not "),"ok 27\n";
-$c = "\c[";
-print +((ord($c) == 27) ? "" : "not "),"ok 28\n";
-$c = "\c\\";
-print +((ord($c) == 28) ? "" : "not "),"ok 29\n";
-$c = "\c]";
-print +((ord($c) == 29) ? "" : "not "),"ok 30\n";
-$c = "\c^";
-print +((ord($c) == 30) ? "" : "not "),"ok 31\n";
-$c = "\c_";
-print +((ord($c) == 31) ? "" : "not "),"ok 32\n";
-$c = "\c?";
-print +((ord($c) == 127) ? "" : "not "),"ok 33\n";
diff --git a/contrib/perl5/t/op/chop.t b/contrib/perl5/t/op/chop.t
deleted file mode 100755
index 1b55f11..0000000
--- a/contrib/perl5/t/op/chop.t
+++ /dev/null
@@ -1,118 +0,0 @@
-#!./perl
-
-print "1..37\n";
-
-# optimized
-
-$_ = 'abc';
-$c = do foo();
-if ($c . $_ eq 'cab') {print "ok 1\n";} else {print "not ok 1 $c$_\n";}
-
-# unoptimized
-
-$_ = 'abc';
-$c = chop($_);
-if ($c . $_ eq 'cab') {print "ok 2\n";} else {print "not ok 2\n";}
-
-sub foo {
- chop;
-}
-
-@foo = ("hi \n","there\n","!\n");
-@bar = @foo;
-chop(@bar);
-print join('',@bar) eq 'hi there!' ? "ok 3\n" : "not ok 3\n";
-
-$foo = "\n";
-chop($foo,@foo);
-print join('',$foo,@foo) eq 'hi there!' ? "ok 4\n" : "not ok 4\n";
-
-$_ = "foo\n\n";
-print chomp() == 1 ? "ok 5\n" : "not ok 5\n";
-print $_ eq "foo\n" ? "ok 6\n" : "not ok 6\n";
-
-$_ = "foo\n";
-print chomp() == 1 ? "ok 7\n" : "not ok 7\n";
-print $_ eq "foo" ? "ok 8\n" : "not ok 8\n";
-
-$_ = "foo";
-print chomp() == 0 ? "ok 9\n" : "not ok 9\n";
-print $_ eq "foo" ? "ok 10\n" : "not ok 10\n";
-
-$_ = "foo";
-$/ = "oo";
-print chomp() == 2 ? "ok 11\n" : "not ok 11\n";
-print $_ eq "f" ? "ok 12\n" : "not ok 12\n";
-
-$_ = "bar";
-$/ = "oo";
-print chomp() == 0 ? "ok 13\n" : "not ok 13\n";
-print $_ eq "bar" ? "ok 14\n" : "not ok 14\n";
-
-$_ = "f\n\n\n\n\n";
-$/ = "";
-print chomp() == 5 ? "ok 15\n" : "not ok 15\n";
-print $_ eq "f" ? "ok 16\n" : "not ok 16\n";
-
-$_ = "f\n\n";
-$/ = "";
-print chomp() == 2 ? "ok 17\n" : "not ok 17\n";
-print $_ eq "f" ? "ok 18\n" : "not ok 18\n";
-
-$_ = "f\n";
-$/ = "";
-print chomp() == 1 ? "ok 19\n" : "not ok 19\n";
-print $_ eq "f" ? "ok 20\n" : "not ok 20\n";
-
-$_ = "f";
-$/ = "";
-print chomp() == 0 ? "ok 21\n" : "not ok 21\n";
-print $_ eq "f" ? "ok 22\n" : "not ok 22\n";
-
-$_ = "xx";
-$/ = "xx";
-print chomp() == 2 ? "ok 23\n" : "not ok 23\n";
-print $_ eq "" ? "ok 24\n" : "not ok 24\n";
-
-$_ = "axx";
-$/ = "xx";
-print chomp() == 2 ? "ok 25\n" : "not ok 25\n";
-print $_ eq "a" ? "ok 26\n" : "not ok 26\n";
-
-$_ = "axx";
-$/ = "yy";
-print chomp() == 0 ? "ok 27\n" : "not ok 27\n";
-print $_ eq "axx" ? "ok 28\n" : "not ok 28\n";
-
-# This case once mistakenly behaved like paragraph mode.
-$_ = "ab\n";
-$/ = \3;
-print chomp() == 0 ? "ok 29\n" : "not ok 29\n";
-print $_ eq "ab\n" ? "ok 30\n" : "not ok 30\n";
-
-# Go Unicode.
-
-$_ = "abc\x{1234}";
-chop;
-print $_ eq "abc" ? "ok 31\n" : "not ok 31\n";
-
-$_ = "abc\x{1234}d";
-chop;
-print $_ eq "abc\x{1234}" ? "ok 32\n" : "not ok 32\n";
-
-$_ = "\x{1234}\x{2345}";
-chop;
-print $_ eq "\x{1234}" ? "ok 33\n" : "not ok 33\n";
-
-my @stuff = qw(this that);
-print chop(@stuff[0,1]) eq 't' ? "ok 34\n" : "not ok 34\n";
-
-# bug id 20010305.012
-@stuff = qw(ab cd ef);
-print chop(@stuff = @stuff) eq 'f' ? "ok 35\n" : "not ok 35\n";
-
-@stuff = qw(ab cd ef);
-print chop(@stuff[0, 2]) eq 'f' ? "ok 36\n" : "not ok 36\n";
-
-my %stuff = (1..4);
-print chop(@stuff{1, 3}) eq '4' ? "ok 37\n" : "not ok 37\n";
diff --git a/contrib/perl5/t/op/closure.t b/contrib/perl5/t/op/closure.t
deleted file mode 100755
index 5f3245f..0000000
--- a/contrib/perl5/t/op/closure.t
+++ /dev/null
@@ -1,507 +0,0 @@
-#!./perl
-# -*- Mode: Perl -*-
-# closure.t:
-# Original written by Ulrich Pfeifer on 2 Jan 1997.
-# Greatly extended by Tom Phoenix <rootbeer@teleport.com> on 28 Jan 1997.
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Config;
-
-print "1..171\n";
-
-my $test = 1;
-sub test (&) {
- print ((&{$_[0]})?"ok $test\n":"not ok $test\n");
- $test++;
-}
-
-my $i = 1;
-sub foo { $i = shift if @_; $i }
-
-# no closure
-test { foo == 1 };
-foo(2);
-test { foo == 2 };
-
-# closure: lexical outside sub
-my $foo = sub {$i = shift if @_; $i };
-my $bar = sub {$i = shift if @_; $i };
-test {&$foo() == 2 };
-&$foo(3);
-test {&$foo() == 3 };
-# did the lexical change?
-test { foo == 3 and $i == 3};
-# did the second closure notice?
-test {&$bar() == 3 };
-
-# closure: lexical inside sub
-sub bar {
- my $i = shift;
- sub { $i = shift if @_; $i }
-}
-
-$foo = bar(4);
-$bar = bar(5);
-test {&$foo() == 4 };
-&$foo(6);
-test {&$foo() == 6 };
-test {&$bar() == 5 };
-
-# nested closures
-sub bizz {
- my $i = 7;
- if (@_) {
- my $i = shift;
- sub {$i = shift if @_; $i };
- } else {
- my $i = $i;
- sub {$i = shift if @_; $i };
- }
-}
-$foo = bizz();
-$bar = bizz();
-test {&$foo() == 7 };
-&$foo(8);
-test {&$foo() == 8 };
-test {&$bar() == 7 };
-
-$foo = bizz(9);
-$bar = bizz(10);
-test {&$foo(11)-1 == &$bar()};
-
-my @foo;
-for (qw(0 1 2 3 4)) {
- my $i = $_;
- $foo[$_] = sub {$i = shift if @_; $i };
-}
-
-test {
- &{$foo[0]}() == 0 and
- &{$foo[1]}() == 1 and
- &{$foo[2]}() == 2 and
- &{$foo[3]}() == 3 and
- &{$foo[4]}() == 4
- };
-
-for (0 .. 4) {
- &{$foo[$_]}(4-$_);
-}
-
-test {
- &{$foo[0]}() == 4 and
- &{$foo[1]}() == 3 and
- &{$foo[2]}() == 2 and
- &{$foo[3]}() == 1 and
- &{$foo[4]}() == 0
- };
-
-sub barf {
- my @foo;
- for (qw(0 1 2 3 4)) {
- my $i = $_;
- $foo[$_] = sub {$i = shift if @_; $i };
- }
- @foo;
-}
-
-@foo = barf();
-test {
- &{$foo[0]}() == 0 and
- &{$foo[1]}() == 1 and
- &{$foo[2]}() == 2 and
- &{$foo[3]}() == 3 and
- &{$foo[4]}() == 4
- };
-
-for (0 .. 4) {
- &{$foo[$_]}(4-$_);
-}
-
-test {
- &{$foo[0]}() == 4 and
- &{$foo[1]}() == 3 and
- &{$foo[2]}() == 2 and
- &{$foo[3]}() == 1 and
- &{$foo[4]}() == 0
- };
-
-# test if closures get created in optimized for loops
-
-my %foo;
-for my $n ('A'..'E') {
- $foo{$n} = sub { $n eq $_[0] };
-}
-
-test {
- &{$foo{A}}('A') and
- &{$foo{B}}('B') and
- &{$foo{C}}('C') and
- &{$foo{D}}('D') and
- &{$foo{E}}('E')
-};
-
-for my $n (0..4) {
- $foo[$n] = sub { $n == $_[0] };
-}
-
-test {
- &{$foo[0]}(0) and
- &{$foo[1]}(1) and
- &{$foo[2]}(2) and
- &{$foo[3]}(3) and
- &{$foo[4]}(4)
-};
-
-for my $n (0..4) {
- $foo[$n] = sub {
- # no intervening reference to $n here
- sub { $n == $_[0] }
- };
-}
-
-test {
- $foo[0]->()->(0) and
- $foo[1]->()->(1) and
- $foo[2]->()->(2) and
- $foo[3]->()->(3) and
- $foo[4]->()->(4)
-};
-
-{
- my $w;
- $w = sub {
- my ($i) = @_;
- test { $i == 10 };
- sub { $w };
- };
- $w->(10);
-}
-
-# Additional tests by Tom Phoenix <rootbeer@teleport.com>.
-
-{
- use strict;
-
- use vars qw!$test!;
- my($debugging, %expected, $inner_type, $where_declared, $within);
- my($nc_attempt, $call_outer, $call_inner, $undef_outer);
- my($code, $inner_sub_test, $expected, $line, $errors, $output);
- my(@inners, $sub_test, $pid);
- $debugging = 1 if defined($ARGV[0]) and $ARGV[0] eq '-debug';
-
- # The expected values for these tests
- %expected = (
- 'global_scalar' => 1001,
- 'global_array' => 2101,
- 'global_hash' => 3004,
- 'fs_scalar' => 4001,
- 'fs_array' => 5101,
- 'fs_hash' => 6004,
- 'sub_scalar' => 7001,
- 'sub_array' => 8101,
- 'sub_hash' => 9004,
- 'foreach' => 10011,
- );
-
- # Our innermost sub is either named or anonymous
- for $inner_type (qw!named anon!) {
- # And it may be declared at filescope, within a named
- # sub, or within an anon sub
- for $where_declared (qw!filescope in_named in_anon!) {
- # And that, in turn, may be within a foreach loop,
- # a naked block, or another named sub
- for $within (qw!foreach naked other_sub!) {
-
- # Here are a number of variables which show what's
- # going on, in a way.
- $nc_attempt = 0+ # Named closure attempted
- ( ($inner_type eq 'named') ||
- ($within eq 'other_sub') ) ;
- $call_inner = 0+ # Need to call &inner
- ( ($inner_type eq 'anon') &&
- ($within eq 'other_sub') ) ;
- $call_outer = 0+ # Need to call &outer or &$outer
- ( ($inner_type eq 'anon') &&
- ($within ne 'other_sub') ) ;
- $undef_outer = 0+ # $outer is created but unused
- ( ($where_declared eq 'in_anon') &&
- (not $call_outer) ) ;
-
- $code = "# This is a test script built by t/op/closure.t\n\n";
-
- $code .= <<"DEBUG_INFO" if $debugging;
-# inner_type: $inner_type
-# where_declared: $where_declared
-# within: $within
-# nc_attempt: $nc_attempt
-# call_inner: $call_inner
-# call_outer: $call_outer
-# undef_outer: $undef_outer
-DEBUG_INFO
-
- $code .= <<"END_MARK_ONE";
-
-BEGIN { \$SIG{__WARN__} = sub {
- my \$msg = \$_[0];
-END_MARK_ONE
-
- $code .= <<"END_MARK_TWO" if $nc_attempt;
- return if index(\$msg, 'will not stay shared') != -1;
- return if index(\$msg, 'may be unavailable') != -1;
-END_MARK_TWO
-
- $code .= <<"END_MARK_THREE"; # Backwhack a lot!
- print "not ok: got unexpected warning \$msg\\n";
-} }
-
-{
- my \$test = $test;
- sub test (&) {
- my \$result = &{\$_[0]};
- print "not " unless \$result;
- print "ok \$test\\n";
- \$test++;
- }
-}
-
-# some of the variables which the closure will access
-\$global_scalar = 1000;
-\@global_array = (2000, 2100, 2200, 2300);
-%global_hash = 3000..3009;
-
-my \$fs_scalar = 4000;
-my \@fs_array = (5000, 5100, 5200, 5300);
-my %fs_hash = 6000..6009;
-
-END_MARK_THREE
-
- if ($where_declared eq 'filescope') {
- # Nothing here
- } elsif ($where_declared eq 'in_named') {
- $code .= <<'END';
-sub outer {
- my $sub_scalar = 7000;
- my @sub_array = (8000, 8100, 8200, 8300);
- my %sub_hash = 9000..9009;
-END
- # }
- } elsif ($where_declared eq 'in_anon') {
- $code .= <<'END';
-$outer = sub {
- my $sub_scalar = 7000;
- my @sub_array = (8000, 8100, 8200, 8300);
- my %sub_hash = 9000..9009;
-END
- # }
- } else {
- die "What was $where_declared?"
- }
-
- if ($within eq 'foreach') {
- $code .= "
- my \$foreach = 12000;
- my \@list = (10000, 10010);
- foreach \$foreach (\@list) {
- " # }
- } elsif ($within eq 'naked') {
- $code .= " { # naked block\n" # }
- } elsif ($within eq 'other_sub') {
- $code .= " sub inner_sub {\n" # }
- } else {
- die "What was $within?"
- }
-
- $sub_test = $test;
- @inners = ( qw!global_scalar global_array global_hash! ,
- qw!fs_scalar fs_array fs_hash! );
- push @inners, 'foreach' if $within eq 'foreach';
- if ($where_declared ne 'filescope') {
- push @inners, qw!sub_scalar sub_array sub_hash!;
- }
- for $inner_sub_test (@inners) {
-
- if ($inner_type eq 'named') {
- $code .= " sub named_$sub_test "
- } elsif ($inner_type eq 'anon') {
- $code .= " \$anon_$sub_test = sub "
- } else {
- die "What was $inner_type?"
- }
-
- # Now to write the body of the test sub
- if ($inner_sub_test eq 'global_scalar') {
- $code .= '{ ++$global_scalar }'
- } elsif ($inner_sub_test eq 'fs_scalar') {
- $code .= '{ ++$fs_scalar }'
- } elsif ($inner_sub_test eq 'sub_scalar') {
- $code .= '{ ++$sub_scalar }'
- } elsif ($inner_sub_test eq 'global_array') {
- $code .= '{ ++$global_array[1] }'
- } elsif ($inner_sub_test eq 'fs_array') {
- $code .= '{ ++$fs_array[1] }'
- } elsif ($inner_sub_test eq 'sub_array') {
- $code .= '{ ++$sub_array[1] }'
- } elsif ($inner_sub_test eq 'global_hash') {
- $code .= '{ ++$global_hash{3002} }'
- } elsif ($inner_sub_test eq 'fs_hash') {
- $code .= '{ ++$fs_hash{6002} }'
- } elsif ($inner_sub_test eq 'sub_hash') {
- $code .= '{ ++$sub_hash{9002} }'
- } elsif ($inner_sub_test eq 'foreach') {
- $code .= '{ ++$foreach }'
- } else {
- die "What was $inner_sub_test?"
- }
-
- # Close up
- if ($inner_type eq 'anon') {
- $code .= ';'
- }
- $code .= "\n";
- $sub_test++; # sub name sequence number
-
- } # End of foreach $inner_sub_test
-
- # Close up $within block # {
- $code .= " }\n\n";
-
- # Close up $where_declared block
- if ($where_declared eq 'in_named') { # {
- $code .= "}\n\n";
- } elsif ($where_declared eq 'in_anon') { # {
- $code .= "};\n\n";
- }
-
- # We may need to do something with the sub we just made...
- $code .= "undef \$outer;\n" if $undef_outer;
- $code .= "&inner_sub;\n" if $call_inner;
- if ($call_outer) {
- if ($where_declared eq 'in_named') {
- $code .= "&outer;\n\n";
- } elsif ($where_declared eq 'in_anon') {
- $code .= "&\$outer;\n\n"
- }
- }
-
- # Now, we can actually prep to run the tests.
- for $inner_sub_test (@inners) {
- $expected = $expected{$inner_sub_test} or
- die "expected $inner_sub_test missing";
-
- # Named closures won't access the expected vars
- if ( $nc_attempt and
- substr($inner_sub_test, 0, 4) eq "sub_" ) {
- $expected = 1;
- }
-
- # If you make a sub within a foreach loop,
- # what happens if it tries to access the
- # foreach index variable? If it's a named
- # sub, it gets the var from "outside" the loop,
- # but if it's anon, it gets the value to which
- # the index variable is aliased.
- #
- # Of course, if the value was set only
- # within another sub which was never called,
- # the value has not been set yet.
- #
- if ($inner_sub_test eq 'foreach') {
- if ($inner_type eq 'named') {
- if ($call_outer || ($where_declared eq 'filescope')) {
- $expected = 12001
- } else {
- $expected = 1
- }
- }
- }
-
- # Here's the test:
- if ($inner_type eq 'anon') {
- $code .= "test { &\$anon_$test == $expected };\n"
- } else {
- $code .= "test { &named_$test == $expected };\n"
- }
- $test++;
- }
-
- if ($Config{d_fork} and $^O ne 'VMS' and $^O ne 'MSWin32') {
- # Fork off a new perl to run the tests.
- # (This is so we can catch spurious warnings.)
- $| = 1; print ""; $| = 0; # flush output before forking
- pipe READ, WRITE or die "Can't make pipe: $!";
- pipe READ2, WRITE2 or die "Can't make second pipe: $!";
- die "Can't fork: $!" unless defined($pid = open PERL, "|-");
- unless ($pid) {
- # Child process here. We're going to send errors back
- # through the extra pipe.
- close READ;
- close READ2;
- open STDOUT, ">&WRITE" or die "Can't redirect STDOUT: $!";
- open STDERR, ">&WRITE2" or die "Can't redirect STDERR: $!";
- exec './perl', '-w', '-'
- or die "Can't exec ./perl: $!";
- } else {
- # Parent process here.
- close WRITE;
- close WRITE2;
- print PERL $code;
- close PERL;
- { local $/;
- $output = join '', <READ>;
- $errors = join '', <READ2>; }
- close READ;
- close READ2;
- }
- } else {
- # No fork(). Do it the hard way.
- my $cmdfile = "tcmd$$"; $cmdfile++ while -e $cmdfile;
- my $errfile = "terr$$"; $errfile++ while -e $errfile;
- my @tmpfiles = ($cmdfile, $errfile);
- open CMD, ">$cmdfile"; print CMD $code; close CMD;
- my $cmd = (($^O eq 'VMS') ? "MCR $^X"
- : ($^O eq 'MSWin32') ? '.\perl'
- : './perl');
- $cmd .= " -w $cmdfile 2>$errfile";
- if ($^O eq 'VMS' or $^O eq 'MSWin32') {
- # Use pipe instead of system so we don't inherit STD* from
- # this process, and then foul our pipe back to parent by
- # redirecting output in the child.
- open PERL,"$cmd |" or die "Can't open pipe: $!\n";
- { local $/; $output = join '', <PERL> }
- close PERL;
- } else {
- my $outfile = "tout$$"; $outfile++ while -e $outfile;
- push @tmpfiles, $outfile;
- system "$cmd >$outfile";
- { local $/; open IN, $outfile; $output = <IN>; close IN }
- }
- if ($?) {
- printf "not ok: exited with error code %04X\n", $?;
- $debugging or do { 1 while unlink @tmpfiles };
- exit;
- }
- { local $/; open IN, $errfile; $errors = <IN>; close IN }
- 1 while unlink @tmpfiles;
- }
- print $output;
- print STDERR $errors;
- if ($debugging && ($errors || $? || ($output =~ /not ok/))) {
- my $lnum = 0;
- for $line (split '\n', $code) {
- printf "%3d: %s\n", ++$lnum, $line;
- }
- }
- printf "not ok: exited with error code %04X\n", $? if $?;
- print "-" x 30, "\n" if $debugging;
-
- } # End of foreach $within
- } # End of foreach $where_declared
- } # End of foreach $inner_type
-
-}
-
diff --git a/contrib/perl5/t/op/cmp.t b/contrib/perl5/t/op/cmp.t
deleted file mode 100755
index 4a7e68d..0000000
--- a/contrib/perl5/t/op/cmp.t
+++ /dev/null
@@ -1,35 +0,0 @@
-#!./perl
-
-@FOO = ('s', 'N/A', 'a', 'NaN', -1, undef, 0, 1);
-
-$expect = ($#FOO+2) * ($#FOO+1);
-print "1..$expect\n";
-
-my $ok = 0;
-for my $i (0..$#FOO) {
- for my $j ($i..$#FOO) {
- $ok++;
- my $cmp = $FOO[$i] <=> $FOO[$j];
- if (!defined($cmp) ||
- $cmp == -1 && $FOO[$i] < $FOO[$j] ||
- $cmp == 0 && $FOO[$i] == $FOO[$j] ||
- $cmp == 1 && $FOO[$i] > $FOO[$j])
- {
- print "ok $ok\n";
- }
- else {
- print "not ok $ok ($FOO[$i] <=> $FOO[$j]) gives: '$cmp'\n";
- }
- $ok++;
- $cmp = $FOO[$i] cmp $FOO[$j];
- if ($cmp == -1 && $FOO[$i] lt $FOO[$j] ||
- $cmp == 0 && $FOO[$i] eq $FOO[$j] ||
- $cmp == 1 && $FOO[$i] gt $FOO[$j])
- {
- print "ok $ok\n";
- }
- else {
- print "not ok $ok ($FOO[$i] cmp $FOO[$j]) gives '$cmp'\n";
- }
- }
-}
diff --git a/contrib/perl5/t/op/concat.t b/contrib/perl5/t/op/concat.t
deleted file mode 100755
index 76074e0..0000000
--- a/contrib/perl5/t/op/concat.t
+++ /dev/null
@@ -1,100 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..11\n";
-
-($a, $b, $c) = qw(foo bar);
-
-print "not " unless "$a" eq "foo";
-print "ok 1\n";
-
-print "not " unless "$a$b" eq "foobar";
-print "ok 2\n";
-
-print "not " unless "$c$a$c" eq "foo";
-print "ok 3\n";
-
-# Okay, so that wasn't very challenging. Let's go Unicode.
-
-my $test = 4;
-
-{
- # bug id 20000819.004
-
- $_ = $dx = "\x{10f2}";
- s/($dx)/$dx$1/;
- {
- use bytes;
- print "not " unless $_ eq "$dx$dx";
- print "ok $test\n";
- $test++;
- }
-
- $_ = $dx = "\x{10f2}";
- s/($dx)/$1$dx/;
- {
- use bytes;
- print "not " unless $_ eq "$dx$dx";
- print "ok $test\n";
- $test++;
- }
-
- $dx = "\x{10f2}";
- $_ = "\x{10f2}\x{10f2}";
- s/($dx)($dx)/$1$2/;
- {
- use bytes;
- print "not " unless $_ eq "$dx$dx";
- print "ok $test\n";
- $test++;
- }
-}
-
-{
- # bug id 20000901.092
- # test that undef left and right of utf8 results in a valid string
-
- my $a;
- $a .= "\x{1ff}";
- print "not " unless $a eq "\x{1ff}";
- print "ok $test\n";
- $test++;
-}
-
-{
- # ID 20001020.006
-
- "x" =~ /(.)/; # unset $2
-
- # Without the fix this 5.7.0 would croak:
- # Modification of a read-only value attempted at ...
- "$2\x{1234}";
-
- print "ok $test\n";
- $test++;
-
- # For symmetry with the above.
- "\x{1234}$2";
-
- print "ok $test\n";
- $test++;
-
- *pi = \undef;
- # This bug existed earlier than the $2 bug, but is fixed with the same
- # patch. Without the fix this 5.7.0 would also croak:
- # Modification of a read-only value attempted at ...
- "$pi\x{1234}";
-
- print "ok $test\n";
- $test++;
-
- # For symmetry with the above.
- "\x{1234}$pi";
-
- print "ok $test\n";
- $test++;
-}
diff --git a/contrib/perl5/t/op/cond.t b/contrib/perl5/t/op/cond.t
deleted file mode 100755
index 427efb4..0000000
--- a/contrib/perl5/t/op/cond.t
+++ /dev/null
@@ -1,12 +0,0 @@
-#!./perl
-
-# $RCSfile: cond.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:41 $
-
-print "1..4\n";
-
-print 1 ? "ok 1\n" : "not ok 1\n"; # compile time
-print 0 ? "not ok 2\n" : "ok 2\n";
-
-$x = 1;
-print $x ? "ok 3\n" : "not ok 3\n"; # run time
-print !$x ? "not ok 4\n" : "ok 4\n";
diff --git a/contrib/perl5/t/op/context.t b/contrib/perl5/t/op/context.t
deleted file mode 100755
index 4625441..0000000
--- a/contrib/perl5/t/op/context.t
+++ /dev/null
@@ -1,18 +0,0 @@
-#!./perl
-
-$n=0;
-
-print "1..3\n";
-
-sub foo {
- $a='abcd';
-
- $a=~/(.)/g;
-
- $1 eq 'a' or print 'not ';
- print "ok ",++$n,"\n";
-}
-
-$a=foo;
-@a=foo;
-foo;
diff --git a/contrib/perl5/t/op/defins.t b/contrib/perl5/t/op/defins.t
deleted file mode 100755
index 33c74ea..0000000
--- a/contrib/perl5/t/op/defins.t
+++ /dev/null
@@ -1,147 +0,0 @@
-#!./perl -w
-
-#
-# test auto defined() test insertion
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $SIG{__WARN__} = sub { $warns++; warn $_[0] };
- print "1..14\n";
-}
-
-$wanted_filename = $^O eq 'VMS' ? '0.' : '0';
-
-print "not " if $warns;
-print "ok 1\n";
-
-open(FILE,">./0");
-print FILE "1\n";
-print FILE "0";
-close(FILE);
-
-open(FILE,"<./0");
-my $seen = 0;
-my $dummy;
-while (my $name = <FILE>)
- {
- $seen++ if $name eq '0';
- }
-print "not " unless $seen;
-print "ok 2\n";
-
-seek(FILE,0,0);
-$seen = 0;
-my $line = '';
-do
- {
- $seen++ if $line eq '0';
- } while ($line = <FILE>);
-
-print "not " unless $seen;
-print "ok 3\n";
-
-
-seek(FILE,0,0);
-$seen = 0;
-while (($seen ? $dummy : $name) = <FILE>)
- {
- $seen++ if $name eq '0';
- }
-print "not " unless $seen;
-print "ok 4\n";
-
-seek(FILE,0,0);
-$seen = 0;
-my %where;
-while ($where{$seen} = <FILE>)
- {
- $seen++ if $where{$seen} eq '0';
- }
-print "not " unless $seen;
-print "ok 5\n";
-close FILE;
-
-opendir(DIR,'.');
-$seen = 0;
-while (my $name = readdir(DIR))
- {
- $seen++ if $name eq $wanted_filename;
- }
-print "not " unless $seen;
-print "ok 6\n";
-
-rewinddir(DIR);
-$seen = 0;
-$dummy = '';
-while (($seen ? $dummy : $name) = readdir(DIR))
- {
- $seen++ if $name eq $wanted_filename;
- }
-print "not " unless $seen;
-print "ok 7\n";
-
-rewinddir(DIR);
-$seen = 0;
-while ($where{$seen} = readdir(DIR))
- {
- $seen++ if $where{$seen} eq $wanted_filename;
- }
-print "not " unless $seen;
-print "ok 8\n";
-
-$seen = 0;
-while (my $name = glob('*'))
- {
- $seen++ if $name eq $wanted_filename;
- }
-print "not " unless $seen;
-print "ok 9\n";
-
-$seen = 0;
-$dummy = '';
-while (($seen ? $dummy : $name) = glob('*'))
- {
- $seen++ if $name eq $wanted_filename;
- }
-print "not " unless $seen;
-print "ok 10\n";
-
-$seen = 0;
-while ($where{$seen} = glob('*'))
- {
- $seen++ if $where{$seen} eq $wanted_filename;
- }
-print "not " unless $seen;
-print "ok 11\n";
-
-unlink("./0");
-
-my %hash = (0 => 1, 1 => 2);
-
-$seen = 0;
-while (my $name = each %hash)
- {
- $seen++ if $name eq '0';
- }
-print "not " unless $seen;
-print "ok 12\n";
-
-$seen = 0;
-$dummy = '';
-while (($seen ? $dummy : $name) = each %hash)
- {
- $seen++ if $name eq '0';
- }
-print "not " unless $seen;
-print "ok 13\n";
-
-$seen = 0;
-while ($where{$seen} = each %hash)
- {
- $seen++ if $where{$seen} eq '0';
- }
-print "not " unless $seen;
-print "ok 14\n";
-
diff --git a/contrib/perl5/t/op/delete.t b/contrib/perl5/t/op/delete.t
deleted file mode 100755
index 10a218b..0000000
--- a/contrib/perl5/t/op/delete.t
+++ /dev/null
@@ -1,123 +0,0 @@
-#!./perl
-
-print "1..36\n";
-
-# delete() on hash elements
-
-$foo{1} = 'a';
-$foo{2} = 'b';
-$foo{3} = 'c';
-$foo{4} = 'd';
-$foo{5} = 'e';
-
-$foo = delete $foo{2};
-
-if ($foo eq 'b') {print "ok 1\n";} else {print "not ok 1 $foo\n";}
-unless (exists $foo{2}) {print "ok 2\n";} else {print "not ok 2 $foo{2}\n";}
-if ($foo{1} eq 'a') {print "ok 3\n";} else {print "not ok 3\n";}
-if ($foo{3} eq 'c') {print "ok 4\n";} else {print "not ok 4\n";}
-if ($foo{4} eq 'd') {print "ok 5\n";} else {print "not ok 5\n";}
-if ($foo{5} eq 'e') {print "ok 6\n";} else {print "not ok 6\n";}
-
-@foo = delete @foo{4, 5};
-
-if (@foo == 2) {print "ok 7\n";} else {print "not ok 7 ", @foo+0, "\n";}
-if ($foo[0] eq 'd') {print "ok 8\n";} else {print "not ok 8 ", $foo[0], "\n";}
-if ($foo[1] eq 'e') {print "ok 9\n";} else {print "not ok 9 ", $foo[1], "\n";}
-unless (exists $foo{4}) {print "ok 10\n";} else {print "not ok 10 $foo{4}\n";}
-unless (exists $foo{5}) {print "ok 11\n";} else {print "not ok 11 $foo{5}\n";}
-if ($foo{1} eq 'a') {print "ok 12\n";} else {print "not ok 12\n";}
-if ($foo{3} eq 'c') {print "ok 13\n";} else {print "not ok 13\n";}
-
-$foo = join('',values(%foo));
-if ($foo eq 'ac' || $foo eq 'ca') {print "ok 14\n";} else {print "not ok 14\n";}
-
-foreach $key (keys %foo) {
- delete $foo{$key};
-}
-
-$foo{'foo'} = 'x';
-$foo{'bar'} = 'y';
-
-$foo = join('',values(%foo));
-print +($foo eq 'xy' || $foo eq 'yx') ? "ok 15\n" : "not ok 15\n";
-
-$refhash{"top"}->{"foo"} = "FOO";
-$refhash{"top"}->{"bar"} = "BAR";
-
-delete $refhash{"top"}->{"bar"};
-@list = keys %{$refhash{"top"}};
-
-print "@list" eq "foo" ? "ok 16\n" : "not ok 16 @list\n";
-
-{
- my %a = ('bar', 33);
- my($a) = \(values %a);
- my $b = \$a{bar};
- my $c = \delete $a{bar};
-
- print "not " unless $a == $b && $b == $c;
- print "ok 17\n";
-}
-
-# delete() on array elements
-
-@foo = ();
-$foo[1] = 'a';
-$foo[2] = 'b';
-$foo[3] = 'c';
-$foo[4] = 'd';
-$foo[5] = 'e';
-
-$foo = delete $foo[2];
-
-if ($foo eq 'b') {print "ok 18\n";} else {print "not ok 18 $foo\n";}
-unless (exists $foo[2]) {print "ok 19\n";} else {print "not ok 19 $foo[2]\n";}
-if ($foo[1] eq 'a') {print "ok 20\n";} else {print "not ok 20\n";}
-if ($foo[3] eq 'c') {print "ok 21\n";} else {print "not ok 21\n";}
-if ($foo[4] eq 'd') {print "ok 22\n";} else {print "not ok 22\n";}
-if ($foo[5] eq 'e') {print "ok 23\n";} else {print "not ok 23\n";}
-
-@bar = delete @foo[4,5];
-
-if (@bar == 2) {print "ok 24\n";} else {print "not ok 24 ", @bar+0, "\n";}
-if ($bar[0] eq 'd') {print "ok 25\n";} else {print "not ok 25 ", $bar[0], "\n";}
-if ($bar[1] eq 'e') {print "ok 26\n";} else {print "not ok 26 ", $bar[1], "\n";}
-unless (exists $foo[4]) {print "ok 27\n";} else {print "not ok 27 $foo[4]\n";}
-unless (exists $foo[5]) {print "ok 28\n";} else {print "not ok 28 $foo[5]\n";}
-if ($foo[1] eq 'a') {print "ok 29\n";} else {print "not ok 29\n";}
-if ($foo[3] eq 'c') {print "ok 30\n";} else {print "not ok 30\n";}
-
-$foo = join('',@foo);
-if ($foo eq 'ac') {print "ok 31\n";} else {print "not ok 31\n";}
-
-if (@foo == 4) {print "ok 32\n";} else {print "not ok 32\n";}
-
-foreach $key (0 .. $#foo) {
- delete $foo[$key];
-}
-
-if (@foo == 0) {print "ok 33\n";} else {print "not ok 33\n";}
-
-$foo[0] = 'x';
-$foo[1] = 'y';
-
-$foo = "@foo";
-print +($foo eq 'x y') ? "ok 34\n" : "not ok 34\n";
-
-$refary[0]->[0] = "FOO";
-$refary[0]->[3] = "BAR";
-
-delete $refary[0]->[3];
-
-print @{$refary[0]} == 1 ? "ok 35\n" : "not ok 35 @list\n";
-
-{
- my @a = 33;
- my($a) = \(@a);
- my $b = \$a[0];
- my $c = \delete $a[bar];
-
- print "not " unless $a == $b && $b == $c;
- print "ok 36\n";
-}
diff --git a/contrib/perl5/t/op/die.t b/contrib/perl5/t/op/die.t
deleted file mode 100755
index cf4f8b0..0000000
--- a/contrib/perl5/t/op/die.t
+++ /dev/null
@@ -1,43 +0,0 @@
-#!./perl
-
-print "1..10\n";
-
-$SIG{__DIE__} = sub { print ref($_[0]) ? ("ok ",$_[0]->[0]++,"\n") : @_ } ;
-
-$err = "#[\000]\nok 1\n";
-eval {
- die $err;
-};
-
-print "not " unless $@ eq $err;
-print "ok 2\n";
-
-$x = [3];
-eval { die $x; };
-
-print "not " unless $x->[0] == 4;
-print "ok 4\n";
-
-eval {
- eval {
- die [ 5 ];
- };
- die if $@;
-};
-
-eval {
- eval {
- die bless [ 7 ], "Error";
- };
- die if $@;
-};
-
-print "not " unless ref($@) eq "Out";
-print "ok 10\n";
-
-package Error;
-
-sub PROPAGATE {
- print "ok ",$_[0]->[0]++,"\n";
- bless [$_[0]->[0]], "Out";
-}
diff --git a/contrib/perl5/t/op/die_exit.t b/contrib/perl5/t/op/die_exit.t
deleted file mode 100755
index a389946..0000000
--- a/contrib/perl5/t/op/die_exit.t
+++ /dev/null
@@ -1,59 +0,0 @@
-#!./perl
-
-#
-# Verify that C<die> return the return code
-# -- Robin Barker <rmb@cise.npl.co.uk>
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-if ($^O eq 'mpeix') {
- print "1..0 # Skip: broken on MPE/iX\n";
- exit 0;
-}
-
-my $perl = -e '../perl' ? '../perl' : -e './perl' ? './perl' : 'perl';
-
-use strict;
-
-my %tests = (
- 1 => [ 0, 0],
- 2 => [ 0, 1],
- 3 => [ 0, 127],
- 4 => [ 0, 128],
- 5 => [ 0, 255],
- 6 => [ 0, 256],
- 7 => [ 0, 512],
- 8 => [ 1, 0],
- 9 => [ 1, 1],
- 10 => [ 1, 256],
- 11 => [ 128, 0],
- 12 => [ 128, 1],
- 13 => [ 128, 256],
- 14 => [ 255, 0],
- 15 => [ 255, 1],
- 16 => [ 255, 256],
- # see if implicit close preserves $?
- 17 => [ 0, 512, '{ local *F; open F, q[TEST]; close F; $!=0 } die;'],
-);
-
-my $max = keys %tests;
-
-print "1..$max\n";
-
-foreach my $test (1 .. $max) {
- my($bang, $query, $code) = @{$tests{$test}};
- $code ||= 'die;';
- my $exit =
- ($^O eq 'MSWin32'
- ? system qq($perl -e "\$! = $bang; \$? = $query; $code" 2> nul)
- : system qq($perl -e '\$! = $bang; \$? = $query; $code' 2> /dev/null));
-
- printf "# 0x%04x 0x%04x 0x%04x\n", $exit, $bang, $query;
- print "not " unless $exit == (($bang || ($query >> 8) || 255) << 8);
- print "ok $test\n";
-}
-
diff --git a/contrib/perl5/t/op/do.t b/contrib/perl5/t/op/do.t
deleted file mode 100755
index 87ec08d..0000000
--- a/contrib/perl5/t/op/do.t
+++ /dev/null
@@ -1,44 +0,0 @@
-#!./perl
-
-# $RCSfile: do.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:45 $
-
-sub foo1
-{
- print $_[0];
- 'value';
-}
-
-sub foo2
-{
- shift;
- print $_[0];
- $x = 'value';
- $x;
-}
-
-print "1..15\n";
-
-$_[0] = "not ok 1\n";
-$result = do foo1("ok 1\n");
-print "#2\t:$result: eq :value:\n";
-if ($result EQ 'value') { print "ok 2\n"; } else { print "not ok 2\n"; }
-if ($_[0] EQ "not ok 1\n") { print "ok 3\n"; } else { print "not ok 3\n"; }
-
-$_[0] = "not ok 4\n";
-$result = do foo2("not ok 4\n","ok 4\n","not ok 4\n");
-print "#5\t:$result: eq :value:\n";
-if ($result EQ 'value') { print "ok 5\n"; } else { print "not ok 5\n"; }
-if ($_[0] EQ "not ok 4\n") { print "ok 6\n"; } else { print "not ok 6\n"; }
-
-$result = do{print "ok 7\n"; 'value';};
-print "#8\t:$result: eq :value:\n";
-if ($result EQ 'value') { print "ok 8\n"; } else { print "not ok 8\n"; }
-
-sub blather {
- print @_;
-}
-
-do blather("ok 9\n","ok 10\n");
-@x = ("ok 11\n", "ok 12\n");
-@y = ("ok 14\n", "ok 15\n");
-do blather(@x,"ok 13\n",@y);
diff --git a/contrib/perl5/t/op/each.t b/contrib/perl5/t/op/each.t
deleted file mode 100755
index 879c0d0..0000000
--- a/contrib/perl5/t/op/each.t
+++ /dev/null
@@ -1,133 +0,0 @@
-#!./perl
-
-print "1..19\n";
-
-$h{'abc'} = 'ABC';
-$h{'def'} = 'DEF';
-$h{'jkl','mno'} = "JKL\034MNO";
-$h{'a',2,3,4,5} = join("\034",'A',2,3,4,5);
-$h{'a'} = 'A';
-$h{'b'} = 'B';
-$h{'c'} = 'C';
-$h{'d'} = 'D';
-$h{'e'} = 'E';
-$h{'f'} = 'F';
-$h{'g'} = 'G';
-$h{'h'} = 'H';
-$h{'i'} = 'I';
-$h{'j'} = 'J';
-$h{'k'} = 'K';
-$h{'l'} = 'L';
-$h{'m'} = 'M';
-$h{'n'} = 'N';
-$h{'o'} = 'O';
-$h{'p'} = 'P';
-$h{'q'} = 'Q';
-$h{'r'} = 'R';
-$h{'s'} = 'S';
-$h{'t'} = 'T';
-$h{'u'} = 'U';
-$h{'v'} = 'V';
-$h{'w'} = 'W';
-$h{'x'} = 'X';
-$h{'y'} = 'Y';
-$h{'z'} = 'Z';
-
-@keys = keys %h;
-@values = values %h;
-
-if ($#keys == 29 && $#values == 29) {print "ok 1\n";} else {print "not ok 1\n";}
-
-$i = 0; # stop -w complaints
-
-while (($key,$value) = each(%h)) {
- if ($key eq $keys[$i] && $value eq $values[$i]
- && (('a' lt 'A' && $key lt $value) || $key gt $value)) {
- $key =~ y/a-z/A-Z/;
- $i++ if $key eq $value;
- }
-}
-
-if ($i == 30) {print "ok 2\n";} else {print "not ok 2\n";}
-
-@keys = ('blurfl', keys(%h), 'dyick');
-if ($#keys == 31) {print "ok 3\n";} else {print "not ok 3\n";}
-
-$size = ((split('/',scalar %h))[1]);
-keys %h = $size * 5;
-$newsize = ((split('/',scalar %h))[1]);
-if ($newsize == $size * 8) {print "ok 4\n";} else {print "not ok 4\n";}
-keys %h = 1;
-$size = ((split('/',scalar %h))[1]);
-if ($size == $newsize) {print "ok 5\n";} else {print "not ok 5\n";}
-%h = (1,1);
-$size = ((split('/',scalar %h))[1]);
-if ($size == $newsize) {print "ok 6\n";} else {print "not ok 6\n";}
-undef %h;
-%h = (1,1);
-$size = ((split('/',scalar %h))[1]);
-if ($size == 8) {print "ok 7\n";} else {print "not ok 7\n";}
-
-# test scalar each
-%hash = 1..20;
-$total = 0;
-$total += $key while $key = each %hash;
-print "# Scalar each is bad.\nnot " unless $total == 100;
-print "ok 8\n";
-
-for (1..3) { @foo = each %hash }
-keys %hash;
-$total = 0;
-$total += $key while $key = each %hash;
-print "# Scalar keys isn't resetting the iterator.\nnot " if $total != 100;
-print "ok 9\n";
-
-for (1..3) { @foo = each %hash }
-$total = 0;
-$total += $key while $key = each %hash;
-print "# Iterator of each isn't being maintained.\nnot " if $total == 100;
-print "ok 10\n";
-
-for (1..3) { @foo = each %hash }
-values %hash;
-$total = 0;
-$total += $key while $key = each %hash;
-print "# Scalar values isn't resetting the iterator.\nnot " if $total != 100;
-print "ok 11\n";
-
-$size = (split('/', scalar %hash))[1];
-keys(%hash) = $size / 2;
-print "not " if $size != (split('/', scalar %hash))[1];
-print "ok 12\n";
-keys(%hash) = $size + 100;
-print "not " if $size == (split('/', scalar %hash))[1];
-print "ok 13\n";
-
-print "not " if keys(%hash) != 10;
-print "ok 14\n";
-
-print keys(hash) != 10 ? "not ok 15\n" : "ok 15\n";
-
-$i = 0;
-%h = (a => A, b => B, c=> C, d => D, abc => ABC);
-@keys = keys(h);
-@values = values(h);
-while (($key, $value) = each(h)) {
- if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
- $i++;
- }
-}
-if ($i == 5) { print "ok 16\n" } else { print "not ok\n" }
-
-{
- package Obj;
- sub DESTROY { print "ok 18\n"; }
- {
- my $h = { A => bless [], __PACKAGE__ };
- while (my($k,$v) = each %$h) {
- print "ok 17\n" if $k eq 'A' and ref($v) eq 'Obj';
- }
- }
- print "ok 19\n";
-}
-
diff --git a/contrib/perl5/t/op/eval.t b/contrib/perl5/t/op/eval.t
deleted file mode 100755
index 1838923..0000000
--- a/contrib/perl5/t/op/eval.t
+++ /dev/null
@@ -1,208 +0,0 @@
-#!./perl
-
-print "1..40\n";
-
-eval 'print "ok 1\n";';
-
-if ($@ eq '') {print "ok 2\n";} else {print "not ok 2\n";}
-
-eval "\$foo\n = # this is a comment\n'ok 3';";
-print $foo,"\n";
-
-eval "\$foo\n = # this is a comment\n'ok 4\n';";
-print $foo;
-
-print eval '
-$foo =;'; # this tests for a call through yyerror()
-if ($@ =~ /line 2/) {print "ok 5\n";} else {print "not ok 5\n";}
-
-print eval '$foo = /'; # this tests for a call through fatal()
-if ($@ =~ /Search/) {print "ok 6\n";} else {print "not ok 6\n";}
-
-print eval '"ok 7\n";';
-
-# calculate a factorial with recursive evals
-
-$foo = 5;
-$fact = 'if ($foo <= 1) {1;} else {push(@x,$foo--); (eval $fact) * pop(@x);}';
-$ans = eval $fact;
-if ($ans == 120) {print "ok 8\n";} else {print "not ok 8\n";}
-
-$foo = 5;
-$fact = 'local($foo)=$foo; $foo <= 1 ? 1 : $foo-- * (eval $fact);';
-$ans = eval $fact;
-if ($ans == 120) {print "ok 9\n";} else {print "not ok 9 $ans\n";}
-
-open(try,'>Op.eval');
-print try 'print "ok 10\n"; unlink "Op.eval";',"\n";
-close try;
-
-do 'Op.eval'; print $@;
-
-# Test the singlequoted eval optimizer
-
-$i = 11;
-for (1..3) {
- eval 'print "ok ", $i++, "\n"';
-}
-
-eval {
- print "ok 14\n";
- die "ok 16\n";
- 1;
-} || print "ok 15\n$@";
-
-# check whether eval EXPR determines value of EXPR correctly
-
-{
- my @a = qw(a b c d);
- my @b = eval @a;
- print "@b" eq '4' ? "ok 17\n" : "not ok 17\n";
- print $@ ? "not ok 18\n" : "ok 18\n";
-
- my $a = q[defined(wantarray) ? (wantarray ? ($b='A') : ($b='S')) : ($b='V')];
- my $b;
- @a = eval $a;
- print "@a" eq 'A' ? "ok 19\n" : "# $b\nnot ok 19\n";
- print $b eq 'A' ? "ok 20\n" : "# $b\nnot ok 20\n";
- $_ = eval $a;
- print $b eq 'S' ? "ok 21\n" : "# $b\nnot ok 21\n";
- eval $a;
- print $b eq 'V' ? "ok 22\n" : "# $b\nnot ok 22\n";
-
- $b = 'wrong';
- $x = sub {
- my $b = "right";
- print eval('"$b"') eq $b ? "ok 23\n" : "not ok 23\n";
- };
- &$x();
-}
-
-my $b = 'wrong';
-my $X = sub {
- my $b = "right";
- print eval('"$b"') eq $b ? "ok 24\n" : "not ok 24\n";
-};
-&$X();
-
-
-# check navigation of multiple eval boundaries to find lexicals
-
-my $x = 25;
-eval <<'EOT'; die if $@;
- print "# $x\n"; # clone into eval's pad
- sub do_eval1 {
- eval $_[0]; die if $@;
- }
-EOT
-do_eval1('print "ok $x\n"');
-$x++;
-do_eval1('eval q[print "ok $x\n"]');
-$x++;
-do_eval1('sub { eval q[print "ok $x\n"] }->()');
-$x++;
-
-# calls from within eval'' should clone outer lexicals
-
-eval <<'EOT'; die if $@;
- sub do_eval2 {
- eval $_[0]; die if $@;
- }
-do_eval2('print "ok $x\n"');
-$x++;
-do_eval2('eval q[print "ok $x\n"]');
-$x++;
-do_eval2('sub { eval q[print "ok $x\n"] }->()');
-$x++;
-EOT
-
-# calls outside eval'' should NOT clone lexicals from called context
-
-$main::x = 'ok';
-eval <<'EOT'; die if $@;
- # $x unbound here
- sub do_eval3 {
- eval $_[0]; die if $@;
- }
-EOT
-do_eval3('print "$x ' . $x . '\n"');
-$x++;
-do_eval3('eval q[print "$x ' . $x . '\n"]');
-$x++;
-do_eval3('sub { eval q[print "$x ' . $x . '\n"] }->()');
-$x++;
-
-# can recursive subroutine-call inside eval'' see its own lexicals?
-sub recurse {
- my $l = shift;
- if ($l < $x) {
- ++$l;
- eval 'print "# level $l\n"; recurse($l);';
- die if $@;
- }
- else {
- print "ok $l\n";
- }
-}
-{
- local $SIG{__WARN__} = sub { die "not ok $x\n" if $_[0] =~ /^Deep recurs/ };
- recurse($x-5);
-}
-$x++;
-
-# do closures created within eval bind correctly?
-eval <<'EOT';
- sub create_closure {
- my $self = shift;
- return sub {
- print $self;
- };
- }
-EOT
-create_closure("ok $x\n")->();
-$x++;
-
-# does lexical search terminate correctly at subroutine boundary?
-$main::r = "ok $x\n";
-sub terminal { eval 'print $r' }
-{
- my $r = "not ok $x\n";
- eval 'terminal($r)';
-}
-$x++;
-
-# Have we cured panic which occurred with require/eval in die handler ?
-$SIG{__DIE__} = sub { eval {1}; die shift };
-eval { die "ok ".$x++,"\n" };
-print $@;
-
-# does scalar eval"" pop stack correctly?
-{
- my $c = eval "(1,2)x10";
- print $c eq '2222222222' ? "ok $x\n" : "# $c\nnot ok $x\n";
- $x++;
-}
-
-# return from eval {} should clear $@ correctly
-{
- my $status = eval {
- eval { die };
- print "# eval { return } test\n";
- return; # removing this changes behavior
- };
- print "not " if $@;
- print "ok $x\n";
- $x++;
-}
-
-# ditto for eval ""
-{
- my $status = eval q{
- eval q{ die };
- print "# eval q{ return } test\n";
- return; # removing this changes behavior
- };
- print "not " if $@;
- print "ok $x\n";
- $x++;
-}
diff --git a/contrib/perl5/t/op/exec.t b/contrib/perl5/t/op/exec.t
deleted file mode 100755
index 23e9ec1..0000000
--- a/contrib/perl5/t/op/exec.t
+++ /dev/null
@@ -1,48 +0,0 @@
-#!./perl
-
-$| = 1; # flush stdout
-
-$ENV{LC_ALL} = 'C'; # Forge English error messages.
-$ENV{LANGUAGE} = 'C'; # Ditto in GNU.
-
-if ($^O eq 'MSWin32') {
- # XXX the system tests could be written to use ./perl and so work on Win32
- print "1..0 # Skip: shh, win32\n";
- exit(0);
-}
-
-print "1..8\n";
-
-if ($^O ne 'os2') {
- print "not ok 1\n" if system "echo ok \\1"; # shell interpreted
-}
-else {
- print "ok 1 # skipped: bug/feature of pdksh\n"; # shell interpreted
-}
-print "not ok 2\n" if system "echo ok 2"; # split and directly called
-print "not ok 3\n" if system "echo", "ok", "3"; # directly called
-
-# these should probably be rewritten to match the examples in perlfunc.pod
-if (system "true") {print "not ok 4\n";} else {print "ok 4\n";}
-
-if ($^O eq 'mpeix') {
- print "ok 5 # skipped: status broken on MPE/iX\n";
-} else {
- if ((system "/bin/sh -c 'exit 1'") != 256) { print "not "; }
- print "ok 5\n";
-}
-
-$rc = system "lskdfj";
-if ($rc == 255 << 8 or $rc == -1 and
- (
- $! == 2 or
- $! =~ /\bno\b.*\bfile/i or
- $! == 13 or
- $! =~ /permission denied/i
- )
- )
- {print "ok 6\n";} else {print "not ok 6\n";}
-
-unless (exec "lskdjfalksdjfdjfkls") {print "ok 7\n";} else {print "not ok 7\n";}
-
-exec "echo","ok","8";
diff --git a/contrib/perl5/t/op/exists_sub.t b/contrib/perl5/t/op/exists_sub.t
deleted file mode 100755
index d4aa292..0000000
--- a/contrib/perl5/t/op/exists_sub.t
+++ /dev/null
@@ -1,46 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..9\n";
-
-sub t1;
-sub t2 : locked;
-sub t3 ();
-sub t4 ($);
-sub t5 {1;}
-{
- package P1;
- sub tmc {1;}
- package P2;
- @ISA = 'P1';
-}
-
-print "not " unless exists &t1 && not defined &t1;
-print "ok 1\n";
-print "not " unless exists &t2 && not defined &t2;
-print "ok 2\n";
-print "not " unless exists &t3 && not defined &t3;
-print "ok 3\n";
-print "not " unless exists &t4 && not defined &t4;
-print "ok 4\n";
-print "not " unless exists &t5 && defined &t5;
-print "ok 5\n";
-P2::->tmc;
-print "not " unless not exists &P2::tmc && not defined &P2::tmc;
-print "ok 6\n";
-my $ref;
-$ref->{A}[0] = \&t4;
-print "not " unless exists &{$ref->{A}[0]} && not defined &{$ref->{A}[0]};
-print "ok 7\n";
-undef &P1::tmc;
-print "not " unless exists &P1::tmc && not defined &P1::tmc;
-print "ok 8\n";
-eval 'exists &t5()';
-print "not " unless $@;
-print "ok 9\n";
-
-exit 0;
diff --git a/contrib/perl5/t/op/exp.t b/contrib/perl5/t/op/exp.t
deleted file mode 100755
index 5efc9ba..0000000
--- a/contrib/perl5/t/op/exp.t
+++ /dev/null
@@ -1,27 +0,0 @@
-#!./perl
-
-# $RCSfile: exp.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:50 $
-
-print "1..6\n";
-
-# compile time evaluation
-
-$s = sqrt(2);
-if (substr($s,0,5) eq '1.414') {print "ok 1\n";} else {print "not ok 1\n";}
-
-$s = exp(1);
-if (substr($s,0,7) eq '2.71828') {print "ok 2\n";} else {print "not ok 2\n";}
-
-if (exp(log(1)) == 1) {print "ok 3\n";} else {print "not ok 3\n";}
-
-# run time evaluation
-
-$x1 = 1;
-$x2 = 2;
-$s = sqrt($x2);
-if (substr($s,0,5) eq '1.414') {print "ok 4\n";} else {print "not ok 4\n";}
-
-$s = exp($x1);
-if (substr($s,0,7) eq '2.71828') {print "ok 5\n";} else {print "not ok 5\n";}
-
-if (exp(log($x1)) == 1) {print "ok 6\n";} else {print "not ok 6\n";}
diff --git a/contrib/perl5/t/op/fh.t b/contrib/perl5/t/op/fh.t
deleted file mode 100755
index 86e405a..0000000
--- a/contrib/perl5/t/op/fh.t
+++ /dev/null
@@ -1,26 +0,0 @@
-#!./perl
-
-print "1..5\n";
-
-my $test = 0;
-
-# symbolic filehandles should only result in glob entries with FH constructors
-
-$|=1;
-my $a = "SYM000";
-print "not " if defined(fileno($a)) or defined *{$a};
-++$test; print "ok $test\n";
-
-select select $a;
-print "not " unless defined *{$a};
-++$test; print "ok $test\n";
-
-$a++;
-print "not " if close $a or defined *{$a};
-++$test; print "ok $test\n";
-
-print "not " unless open($a, ">&STDOUT") and defined *{$a};
-++$test; print $a "ok $test\n";
-
-print "not " unless close $a;
-++$test; print $a "not "; print "ok $test\n";
diff --git a/contrib/perl5/t/op/filetest.t b/contrib/perl5/t/op/filetest.t
deleted file mode 100755
index f757c79..0000000
--- a/contrib/perl5/t/op/filetest.t
+++ /dev/null
@@ -1,71 +0,0 @@
-#!./perl
-
-# There are few filetest operators that are portable enough to test.
-# See pod/perlport.pod for details.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Config;
-print "1..10\n";
-
-print "not " unless -d 'op';
-print "ok 1\n";
-
-print "not " unless -f 'TEST';
-print "ok 2\n";
-
-print "not " if -f 'op';
-print "ok 3\n";
-
-print "not " if -d 'TEST';
-print "ok 4\n";
-
-print "not " unless -r 'TEST';
-print "ok 5\n";
-
-# make sure TEST is r-x
-eval { chmod 0555, 'TEST' };
-$bad_chmod = $@;
-
-$oldeuid = $>; # root can read and write anything
-eval '$> = 1'; # so switch uid (may not be implemented)
-
-print "# oldeuid = $oldeuid, euid = $>\n";
-
-if (!$Config{d_seteuid}) {
- print "ok 6 #skipped, no seteuid\n";
-}
-elsif ($bad_chmod) {
- print "#[$@]\nok 6 #skipped\n";
-}
-else {
- print "not " if -w 'TEST';
- print "ok 6\n";
-}
-
-# Scripts are not -x everywhere so cannot test that.
-
-eval '$> = $oldeuid'; # switch uid back (may not be implemented)
-
-# this would fail for the euid 1
-# (unless we have unpacked the source code as uid 1...)
-print "not " unless -r 'op';
-print "ok 7\n";
-
-# this would fail for the euid 1
-# (unless we have unpacked the source code as uid 1...)
-if ($Config{d_seteuid}) {
- print "not " unless -w 'op';
- print "ok 8\n";
-} else {
- print "ok 8 #skipped, no seteuid\n";
-}
-
-print "not " unless -x 'op'; # Hohum. Are directories -x everywhere?
-print "ok 9\n";
-
-print "not " unless "@{[grep -r, qw(foo io noo op zoo)]}" eq "io op";
-print "ok 10\n";
diff --git a/contrib/perl5/t/op/flip.t b/contrib/perl5/t/op/flip.t
deleted file mode 100755
index 99b22ef..0000000
--- a/contrib/perl5/t/op/flip.t
+++ /dev/null
@@ -1,36 +0,0 @@
-#!./perl
-
-# $RCSfile: flip.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:52 $
-
-print "1..10\n";
-
-@a = (1,2,3,4,5,6,7,8,9,10,11,12);
-
-while ($_ = shift(@a)) {
- if ($x = /4/../8/) { $z = $x; print "ok ", $x + 0, "\n"; }
- $y .= /1/../2/;
-}
-
-if ($z eq '5E0') {print "ok 6\n";} else {print "not ok 6\n";}
-
-if ($y eq '12E0123E0') {print "ok 7\n";} else {print "not ok 7\n";}
-
-@a = ('a','b','c','d','e','f','g');
-
-open(of,'harness') or die "Can't open harness: $!";
-while (<of>) {
- (3 .. 5) && ($foo .= $_);
-}
-$x = ($foo =~ y/\n/\n/);
-
-if ($x eq 3) {print "ok 8\n";} else {print "not ok 8 $x:$foo:\n";}
-
-$x = 3.14;
-if (($x...$x) eq "1") {print "ok 9\n";} else {print "not ok 9\n";}
-
-{
- # coredump reported in bug 20001018.008
- readline(UNKNOWN);
- $. = 1;
- print "ok 10\n" unless 1 .. 10;
-}
diff --git a/contrib/perl5/t/op/fork.t b/contrib/perl5/t/op/fork.t
deleted file mode 100755
index 88b6b4b..0000000
--- a/contrib/perl5/t/op/fork.t
+++ /dev/null
@@ -1,423 +0,0 @@
-#!./perl
-
-# tests for both real and emulated fork()
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- unless ($Config{'d_fork'}
- or ($^O eq 'MSWin32' and $Config{useithreads}
- and $Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/))
- {
- print "1..0 # Skip: no fork\n";
- exit 0;
- }
- $ENV{PERL5LIB} = "../lib";
-}
-
-if ($^O eq 'mpeix') {
- print "1..0 # Skip: fork/status problems on MPE/iX\n";
- exit 0;
-}
-
-$|=1;
-
-undef $/;
-@prgs = split "\n########\n", <DATA>;
-print "1..", scalar @prgs, "\n";
-
-$tmpfile = "forktmp000";
-1 while -f ++$tmpfile;
-END { close TEST; unlink $tmpfile if $tmpfile; }
-
-$CAT = (($^O eq 'MSWin32') ? '.\perl -e "print <>"' : 'cat');
-
-for (@prgs){
- my $switch;
- if (s/^\s*(-\w.*)//){
- $switch = $1;
- }
- my($prog,$expected) = split(/\nEXPECT\n/, $_);
- $expected =~ s/\n+$//;
- # results can be in any order, so sort 'em
- my @expected = sort split /\n/, $expected;
- open TEST, ">$tmpfile" or die "Cannot open $tmpfile: $!";
- print TEST $prog, "\n";
- close TEST or die "Cannot close $tmpfile: $!";
- my $results;
- if ($^O eq 'MSWin32') {
- $results = `.\\perl -I../lib $switch $tmpfile 2>&1`;
- }
- else {
- $results = `./perl $switch $tmpfile 2>&1`;
- }
- $status = $?;
- $results =~ s/\n+$//;
- $results =~ s/at\s+forktmp\d+\s+line/at - line/g;
- $results =~ s/of\s+forktmp\d+\s+aborted/of - aborted/g;
-# bison says 'parse error' instead of 'syntax error',
-# various yaccs may or may not capitalize 'syntax'.
- $results =~ s/^(syntax|parse) error/syntax error/mig;
- $results =~ s/^\n*Process terminated by SIG\w+\n?//mg
- if $^O eq 'os2';
- my @results = sort split /\n/, $results;
- if ( "@results" ne "@expected" ) {
- print STDERR "PROG: $switch\n$prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
- }
- print "ok ", ++$i, "\n";
-}
-
-__END__
-$| = 1;
-if ($cid = fork) {
- sleep 1;
- if ($result = (kill 9, $cid)) {
- print "ok 2\n";
- }
- else {
- print "not ok 2 $result\n";
- }
- sleep 1 if $^O eq 'MSWin32'; # avoid WinNT race bug
-}
-else {
- print "ok 1\n";
- sleep 10;
-}
-EXPECT
-ok 1
-ok 2
-########
-$| = 1;
-sub forkit {
- print "iteration $i start\n";
- my $x = fork;
- if (defined $x) {
- if ($x) {
- print "iteration $i parent\n";
- }
- else {
- print "iteration $i child\n";
- }
- }
- else {
- print "pid $$ failed to fork\n";
- }
-}
-while ($i++ < 3) { do { forkit(); }; }
-EXPECT
-iteration 1 start
-iteration 1 parent
-iteration 1 child
-iteration 2 start
-iteration 2 parent
-iteration 2 child
-iteration 2 start
-iteration 2 parent
-iteration 2 child
-iteration 3 start
-iteration 3 parent
-iteration 3 child
-iteration 3 start
-iteration 3 parent
-iteration 3 child
-iteration 3 start
-iteration 3 parent
-iteration 3 child
-iteration 3 start
-iteration 3 parent
-iteration 3 child
-########
-$| = 1;
-fork()
- ? (print("parent\n"),sleep(1))
- : (print("child\n"),exit) ;
-EXPECT
-parent
-child
-########
-$| = 1;
-fork()
- ? (print("parent\n"),exit)
- : (print("child\n"),sleep(1)) ;
-EXPECT
-parent
-child
-########
-$| = 1;
-@a = (1..3);
-for (@a) {
- if (fork) {
- print "parent $_\n";
- $_ = "[$_]";
- }
- else {
- print "child $_\n";
- $_ = "-$_-";
- }
-}
-print "@a\n";
-EXPECT
-parent 1
-child 1
-parent 2
-child 2
-parent 2
-child 2
-parent 3
-child 3
-parent 3
-child 3
-parent 3
-child 3
-parent 3
-child 3
-[1] [2] [3]
--1- [2] [3]
-[1] -2- [3]
-[1] [2] -3-
--1- -2- [3]
--1- [2] -3-
-[1] -2- -3-
--1- -2- -3-
-########
-$| = 1;
-foreach my $c (1,2,3) {
- if (fork) {
- print "parent $c\n";
- }
- else {
- print "child $c\n";
- exit;
- }
-}
-while (wait() != -1) { print "waited\n" }
-EXPECT
-child 1
-child 2
-child 3
-parent 1
-parent 2
-parent 3
-waited
-waited
-waited
-########
-use Config;
-$| = 1;
-$\ = "\n";
-fork()
- ? print($Config{osname} eq $^O)
- : print($Config{osname} eq $^O) ;
-EXPECT
-1
-1
-########
-$| = 1;
-$\ = "\n";
-fork()
- ? do { require Config; print($Config::Config{osname} eq $^O); }
- : do { require Config; print($Config::Config{osname} eq $^O); }
-EXPECT
-1
-1
-########
-$| = 1;
-use Cwd;
-$\ = "\n";
-my $dir;
-if (fork) {
- $dir = "f$$.tst";
- mkdir $dir, 0755;
- chdir $dir;
- print cwd() =~ /\Q$dir/i ? "ok 1 parent" : "not ok 1 parent";
- chdir "..";
- rmdir $dir;
-}
-else {
- sleep 2;
- $dir = "f$$.tst";
- mkdir $dir, 0755;
- chdir $dir;
- print cwd() =~ /\Q$dir/i ? "ok 1 child" : "not ok 1 child";
- chdir "..";
- rmdir $dir;
-}
-EXPECT
-ok 1 parent
-ok 1 child
-########
-$| = 1;
-$\ = "\n";
-my $getenv;
-if ($^O eq 'MSWin32') {
- $getenv = qq[$^X -e "print \$ENV{TST}"];
-}
-else {
- $getenv = qq[$^X -e 'print \$ENV{TST}'];
-}
-$ENV{TST} = 'foo';
-if (fork) {
- sleep 1;
- print "parent before: " . `$getenv`;
- $ENV{TST} = 'bar';
- print "parent after: " . `$getenv`;
-}
-else {
- print "child before: " . `$getenv`;
- $ENV{TST} = 'baz';
- print "child after: " . `$getenv`;
-}
-EXPECT
-child before: foo
-child after: baz
-parent before: foo
-parent after: bar
-########
-$| = 1;
-$\ = "\n";
-if ($pid = fork) {
- waitpid($pid,0);
- print "parent got $?"
-}
-else {
- exit(42);
-}
-EXPECT
-parent got 10752
-########
-$| = 1;
-$\ = "\n";
-my $echo = 'echo';
-if ($pid = fork) {
- waitpid($pid,0);
- print "parent got $?"
-}
-else {
- exec("$echo foo");
-}
-EXPECT
-foo
-parent got 0
-########
-if (fork) {
- die "parent died";
-}
-else {
- die "child died";
-}
-EXPECT
-parent died at - line 2.
-child died at - line 5.
-########
-if ($pid = fork) {
- eval { die "parent died" };
- print $@;
-}
-else {
- eval { die "child died" };
- print $@;
-}
-EXPECT
-parent died at - line 2.
-child died at - line 6.
-########
-if (eval q{$pid = fork}) {
- eval q{ die "parent died" };
- print $@;
-}
-else {
- eval q{ die "child died" };
- print $@;
-}
-EXPECT
-parent died at (eval 2) line 1.
-child died at (eval 2) line 1.
-########
-BEGIN {
- $| = 1;
- fork and exit;
- print "inner\n";
-}
-# XXX In emulated fork(), the child will not execute anything after
-# the BEGIN block, due to difficulties in recreating the parse stacks
-# and restarting yyparse() midstream in the child. This can potentially
-# be overcome by treating what's after the BEGIN{} as a brand new parse.
-#print "outer\n"
-EXPECT
-inner
-########
-sub pipe_to_fork ($$) {
- my $parent = shift;
- my $child = shift;
- pipe($child, $parent) or die;
- my $pid = fork();
- die "fork() failed: $!" unless defined $pid;
- close($pid ? $child : $parent);
- $pid;
-}
-
-if (pipe_to_fork('PARENT','CHILD')) {
- # parent
- print PARENT "pipe_to_fork\n";
- close PARENT;
-}
-else {
- # child
- while (<CHILD>) { print; }
- close CHILD;
- exit;
-}
-
-sub pipe_from_fork ($$) {
- my $parent = shift;
- my $child = shift;
- pipe($parent, $child) or die;
- my $pid = fork();
- die "fork() failed: $!" unless defined $pid;
- close($pid ? $child : $parent);
- $pid;
-}
-
-if (pipe_from_fork('PARENT','CHILD')) {
- # parent
- while (<PARENT>) { print; }
- close PARENT;
-}
-else {
- # child
- print CHILD "pipe_from_fork\n";
- close CHILD;
- exit;
-}
-EXPECT
-pipe_from_fork
-pipe_to_fork
-########
-$|=1;
-if ($pid = fork()) {
- print "forked first kid\n";
- print "waitpid() returned ok\n" if waitpid($pid,0) == $pid;
-}
-else {
- print "first child\n";
- exit(0);
-}
-if ($pid = fork()) {
- print "forked second kid\n";
- print "wait() returned ok\n" if wait() == $pid;
-}
-else {
- print "second child\n";
- exit(0);
-}
-EXPECT
-forked first kid
-first child
-waitpid() returned ok
-forked second kid
-second child
-wait() returned ok
diff --git a/contrib/perl5/t/op/glob.t b/contrib/perl5/t/op/glob.t
deleted file mode 100755
index fc0ba77..0000000
--- a/contrib/perl5/t/op/glob.t
+++ /dev/null
@@ -1,40 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..6\n";
-
-@oops = @ops = <op/*>;
-
-if ($^O eq 'MSWin32') {
- map { $files{lc($_)}++ } <op/*>;
- map { delete $files{"op/$_"} } split /[\s\n]/, `cmd /c "dir /b /l op & dir /b /l /ah op 2>nul"`,
-}
-else {
- map { $files{$_}++ } <op/*>;
- map { delete $files{$_} } split /[\s\n]/, `echo op/*`;
-}
-if (keys %files) {
- print "not ok 1\t(",join(' ', sort keys %files),"\n";
-} else { print "ok 1\n"; }
-
-print $/ eq "\n" ? "ok 2\n" : "not ok 2\n";
-
-while (<jskdfjskdfj* op/* jskdjfjkosvk*>) {
- $not = "not " unless $_ eq shift @ops;
- $not = "not at all " if $/ eq "\0";
-}
-print "${not}ok 3\n";
-
-print $/ eq "\n" ? "ok 4\n" : "not ok 4\n";
-
-# test the "glob" operator
-$_ = "op/*";
-@glops = glob $_;
-print "@glops" eq "@oops" ? "ok 5\n" : "not ok 5\n";
-
-@glops = glob;
-print "@glops" eq "@oops" ? "ok 6\n" : "not ok 6\n";
diff --git a/contrib/perl5/t/op/goto.t b/contrib/perl5/t/op/goto.t
deleted file mode 100755
index 96bb8dd..0000000
--- a/contrib/perl5/t/op/goto.t
+++ /dev/null
@@ -1,126 +0,0 @@
-#!./perl
-
-# "This IS structured code. It's just randomly structured."
-
-print "1..16\n";
-
-while ($?) {
- $foo = 1;
- label1:
- $foo = 2;
- goto label2;
-} continue {
- $foo = 0;
- goto label4;
- label3:
- $foo = 4;
- goto label4;
-}
-goto label1;
-
-$foo = 3;
-
-label2:
-print "#1\t:$foo: == 2\n";
-if ($foo == 2) {print "ok 1\n";} else {print "not ok 1\n";}
-goto label3;
-
-label4:
-print "#2\t:$foo: == 4\n";
-if ($foo == 4) {print "ok 2\n";} else {print "not ok 2\n";}
-
-$PERL = ($^O eq 'MSWin32') ? '.\perl' : './perl';
-$CMD = qq[$PERL -e "goto foo;" 2>&1 ];
-$x = `$CMD`;
-
-if ($x =~ /label/) {print "ok 3\n";} else {print "not ok 3\n";}
-
-sub foo {
- goto bar;
- print "not ok 4\n";
- return;
-bar:
- print "ok 4\n";
-}
-
-&foo;
-
-sub bar {
- $x = 'bypass';
- eval "goto $x";
-}
-
-&bar;
-exit;
-
-FINALE:
-print "ok 13\n";
-
-# does goto LABEL handle block contexts correctly?
-
-my $cond = 1;
-for (1) {
- if ($cond == 1) {
- $cond = 0;
- goto OTHER;
- }
- elsif ($cond == 0) {
- OTHER:
- $cond = 2;
- print "ok 14\n";
- goto THIRD;
- }
- else {
- THIRD:
- print "ok 15\n";
- }
-}
-print "ok 16\n";
-exit;
-
-bypass:
-print "ok 5\n";
-
-# Test autoloading mechanism.
-
-sub two {
- ($pack, $file, $line) = caller; # Should indicate original call stats.
- print "@_ $pack $file $line" eq "1 2 3 main $FILE $LINE"
- ? "ok 7\n"
- : "not ok 7\n";
-}
-
-sub one {
- eval <<'END';
- sub one { print "ok 6\n"; goto &two; print "not ok 6\n"; }
-END
- goto &one;
-}
-
-$FILE = __FILE__;
-$LINE = __LINE__ + 1;
-&one(1,2,3);
-
-$wherever = NOWHERE;
-eval { goto $wherever };
-print $@ =~ /Can't find label NOWHERE/ ? "ok 8\n" : "not ok 8\n";
-
-# see if a modified @_ propagates
-{
- package Foo;
- sub DESTROY { my $s = shift; print "ok $s->[0]\n"; }
- sub show { print "# @_\nnot ok $_[0][0]\n" if @_ != 5; }
- sub start { push @_, 1, "foo", {}; goto &show; }
- for (9..11) { start(bless([$_]), 'bar'); }
-}
-
-sub auto {
- goto &loadit;
-}
-
-sub AUTOLOAD { print @_ }
-
-auto("ok 12\n");
-
-$wherever = FINALE;
-goto $wherever;
diff --git a/contrib/perl5/t/op/goto_xs.t b/contrib/perl5/t/op/goto_xs.t
deleted file mode 100755
index cf2cafd..0000000
--- a/contrib/perl5/t/op/goto_xs.t
+++ /dev/null
@@ -1,98 +0,0 @@
-#!./perl
-# tests for "goto &sub"-ing into XSUBs
-
-# $RCSfile$$Revision$$Date$
-
-# Note: This only tests things that should *work*. At some point, it may
-# be worth while to write some failure tests for things that should
-# *break* (such as calls with wrong number of args). For now, I'm
-# guessing that if all of these work correctly, the bad ones will
-# break correctly as well.
-
-chdir 't' if -d 't';
-@INC = '../lib';
-$ENV{PERL5LIB} = "../lib";
-
-# turn warnings into fatal errors
-$SIG{__WARN__} = sub { die "WARNING: @_" } ;
-
-BEGIN { $| = 1; }
-eval 'require Fcntl'
- or do { print "1..0\n# Fcntl unavailable, can't test XS goto.\n"; exit 0 };
-
-print "1..10\n";
-
-# We don't know what symbols are defined in platform X's system headers.
-# We don't even want to guess, because some platform out there will
-# likely do the unthinkable. However, Fcntl::constant("LOCK_SH",0)
-# should always return a value, even on platforms which don't define the
-# cpp symbol; Fcntl.xs says:
-# /* We support flock() on systems which don't have it, so
-# always supply the constants. */
-# If this ceases to be the case, we're in trouble. =)
-$VALID = 'LOCK_SH';
-
-### First, we check whether Fcntl::constant returns sane answers.
-# Fcntl::constant("LOCK_SH",0) should always succeed.
-
-$value = Fcntl::constant($VALID,0);
-print((!defined $value)
- ? "not ok 1\n# Sanity check broke, remaining tests will fail.\n"
- : "ok 1\n");
-
-### OK, we're ready to do real tests.
-
-# test "goto &function_constant"
-sub goto_const { goto &Fcntl::constant; }
-
-$ret = goto_const($VALID,0);
-print(($ret == $value) ? "ok 2\n" : "not ok 2\n# ($ret != $value)\n");
-
-# test "goto &$function_package_and_name"
-$FNAME1 = 'Fcntl::constant';
-sub goto_name1 { goto &$FNAME1; }
-
-$ret = goto_name1($VALID,0);
-print(($ret == $value) ? "ok 3\n" : "not ok 3\n# ($ret != $value)\n");
-
-# test "goto &$function_package_and_name" again, with dirtier stack
-$ret = goto_name1($VALID,0);
-print(($ret == $value) ? "ok 4\n" : "not ok 4\n# ($ret != $value)\n");
-$ret = goto_name1($VALID,0);
-print(($ret == $value) ? "ok 5\n" : "not ok 5\n# ($ret != $value)\n");
-
-# test "goto &$function_name" from local package
-package Fcntl;
-$FNAME2 = 'constant';
-sub goto_name2 { goto &$FNAME2; }
-package main;
-
-$ret = Fcntl::goto_name2($VALID,0);
-print(($ret == $value) ? "ok 6\n" : "not ok 6\n# ($ret != $value)\n");
-
-# test "goto &$function_ref"
-$FREF = \&Fcntl::constant;
-sub goto_ref { goto &$FREF; }
-
-$ret = goto_ref($VALID,0);
-print(($ret == $value) ? "ok 7\n" : "not ok 7\n# ($ret != $value)\n");
-
-### tests where the args are not on stack but in GvAV(defgv) (ie, @_)
-
-# test "goto &function_constant" from a sub called without arglist
-sub call_goto_const { &goto_const; }
-
-$ret = call_goto_const($VALID,0);
-print(($ret == $value) ? "ok 8\n" : "not ok 8\n# ($ret != $value)\n");
-
-# test "goto &$function_package_and_name" from a sub called without arglist
-sub call_goto_name1 { &goto_name1; }
-
-$ret = call_goto_name1($VALID,0);
-print(($ret == $value) ? "ok 9\n" : "not ok 9\n# ($ret != $value)\n");
-
-# test "goto &$function_ref" from a sub called without arglist
-sub call_goto_ref { &goto_ref; }
-
-$ret = call_goto_ref($VALID,0);
-print(($ret == $value) ? "ok 10\n" : "not ok 10\n# ($ret != $value)\n");
diff --git a/contrib/perl5/t/op/grent.t b/contrib/perl5/t/op/grent.t
deleted file mode 100755
index 211dc91..0000000
--- a/contrib/perl5/t/op/grent.t
+++ /dev/null
@@ -1,168 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- eval {my @n = getgrgid 0};
- if ($@ && $@ =~ /(The \w+ function is unimplemented)/) {
- print "1..0 # Skip: $1\n";
- exit 0;
- }
- eval { require Config; import Config; };
- my $reason;
- if ($Config{'i_grp'} ne 'define') {
- $reason = '$Config{i_grp} not defined';
- }
- elsif (not -f "/etc/group" ) { # Play safe.
- $reason = 'no /etc/group file';
- }
-
- if (not defined $where) { # Try NIS.
- foreach my $ypcat (qw(/usr/bin/ypcat /bin/ypcat /etc/ypcat)) {
- if (-x $ypcat &&
- open(GR, "$ypcat group 2>/dev/null |") &&
- defined(<GR>)) {
- $where = "NIS group";
- undef $reason;
- last;
- }
- }
- }
-
- if (not defined $where) { # Try NetInfo.
- foreach my $nidump (qw(/usr/bin/nidump)) {
- if (-x $nidump &&
- open(GR, "$nidump group . 2>/dev/null |") &&
- defined(<GR>)) {
- $where = "NetInfo group";
- undef $reason;
- last;
- }
- }
- }
-
- if (not defined $where) { # Try local.
- my $GR = "/etc/group";
- if (-f $GR && open(GR, $GR) && defined(<GR>)) {
- undef $reason;
- $where = $GR;
- }
- }
- if ($reason) {
- print "1..0 # Skip: $reason\n";
- exit 0;
- }
-}
-
-# By now the GR filehandle should be open and full of juicy group entries.
-
-print "1..2\n";
-
-# Go through at most this many groups.
-# (note that the first entry has been read away by now)
-my $max = 25;
-
-my $n = 0;
-my $tst = 1;
-my %perfect;
-my %seen;
-
-setgrent();
-while (<GR>) {
- chomp;
- # LIMIT -1 so that groups with no users don't fall off
- my @s = split /:/, $_, -1;
- my ($name_s,$passwd_s,$gid_s,$members_s) = @s;
- if (@s) {
- push @{ $seen{$name_s} }, $.;
- } else {
- warn "# Your $where line $. is empty.\n";
- next;
- }
- if ($n == $max) {
- local $/;
- my $junk = <GR>;
- last;
- }
- # In principle we could whine if @s != 4 but do we know enough
- # of group file formats everywhere?
- if (@s == 4) {
- $members_s =~ s/\s*,\s*/,/g;
- $members_s =~ s/\s+$//;
- $members_s =~ s/^\s+//;
- @n = getgrgid($gid_s);
- # 'nogroup' et al.
- next unless @n;
- my ($name,$passwd,$gid,$members) = @n;
- # Protect against one-to-many and many-to-one mappings.
- if ($name_s ne $name) {
- @n = getgrnam($name_s);
- ($name,$passwd,$gid,$members) = @n;
- next if $name_s ne $name;
- }
- # NOTE: group names *CAN* contain whitespace.
- $members =~ s/\s+/,/g;
- # what about different orders of members?
- $perfect{$name_s}++
- if $name eq $name_s and
-# Do not compare passwords: think shadow passwords.
-# Not that group passwords are used much but better not assume anything.
- $gid eq $gid_s and
- $members eq $members_s;
- }
- $n++;
-}
-
-endgrent();
-
-if (keys %perfect == 0) {
- $max++;
- print <<EOEX;
-#
-# The failure of op/grent test is not necessarily serious.
-# It may fail due to local group administration conventions.
-# If you are for example using both NIS and local groups,
-# test failure is possible. Any distributed group scheme
-# can cause such failures.
-#
-# What the grent test is doing is that it compares the $max first
-# entries of $where
-# with the results of getgrgid() and getgrnam() call. If it finds no
-# matches at all, it suspects something is wrong.
-#
-EOEX
- print "not ";
- $not = 1;
-} else {
- $not = 0;
-}
-print "ok ", $tst++;
-print "\t# (not necessarily serious: run t/op/grent.t by itself)" if $not;
-print "\n";
-
-# Test both the scalar and list contexts.
-
-my @gr1;
-
-setgrent();
-for (1..$max) {
- my $gr = scalar getgrent();
- last unless defined $gr;
- push @gr1, $gr;
-}
-endgrent();
-
-my @gr2;
-
-setgrent();
-for (1..$max) {
- my ($gr) = (getgrent());
- last unless defined $gr;
- push @gr2, $gr;
-}
-endgrent();
-
-print "not " unless "@gr1" eq "@gr2";
-print "ok ", $tst++, "\n";
-
-close(GR);
diff --git a/contrib/perl5/t/op/grep.t b/contrib/perl5/t/op/grep.t
deleted file mode 100755
index 3a7f8ad..0000000
--- a/contrib/perl5/t/op/grep.t
+++ /dev/null
@@ -1,99 +0,0 @@
-#!./perl
-
-#
-# grep() and map() tests
-#
-
-print "1..27\n";
-
-$test = 1;
-
-sub ok {
- my ($got,$expect) = @_;
- print "# expected [$expect], got [$got]\nnot " if $got ne $expect;
- print "ok $test\n";
-}
-
-{
- my @lol = ([qw(a b c)], [], [qw(1 2 3)]);
- my @mapped = map {scalar @$_} @lol;
- ok "@mapped", "3 0 3";
- $test++;
-
- my @grepped = grep {scalar @$_} @lol;
- ok "@grepped", "$lol[0] $lol[2]";
- $test++;
-
- @grepped = grep { $_ } @mapped;
- ok "@grepped", "3 3";
- $test++;
-}
-
-{
- print map({$_} ("ok $test\n"));
- $test++;
- print map
- ({$_} ("ok $test\n"));
- $test++;
- print((map({a => $_}, ("ok $test\n")))[0]->{a});
- $test++;
- print((map
- ({a=>$_},
- ("ok $test\n")))[0]->{a});
- $test++;
- print map { $_ } ("ok $test\n");
- $test++;
- print map
- { $_ } ("ok $test\n");
- $test++;
- print((map {a => $_}, ("ok $test\n"))[0]->{a});
- $test++;
- print((map
- {a=>$_},
- ("ok $test\n"))[0]->{a});
- $test++;
- my $x = "ok \xFF\xFF\n";
- print map($_&$x,("ok $test\n"));
- $test++;
- print map
- ($_ & $x, ("ok $test\n"));
- $test++;
- print map { $_ & $x } ("ok $test\n");
- $test++;
- print map
- { $_&$x } ("ok $test\n");
- $test++;
-
- print grep({$_} ("ok $test\n"));
- $test++;
- print grep
- ({$_} ("ok $test\n"));
- $test++;
- print grep({a => $_}->{a}, ("ok $test\n"));
- $test++;
- print grep
- ({a => $_}->{a},
- ("ok $test\n"));
- $test++;
- print grep { $_ } ("ok $test\n");
- $test++;
- print grep
- { $_ } ("ok $test\n");
- $test++;
- print grep {a => $_}->{a}, ("ok $test\n");
- $test++;
- print grep
- {a => $_}->{a},
- ("ok $test\n");
- $test++;
- print grep($_&"X",("ok $test\n"));
- $test++;
- print grep
- ($_&"X", ("ok $test\n"));
- $test++;
- print grep { $_ & "X" } ("ok $test\n");
- $test++;
- print grep
- { $_ & "X" } ("ok $test\n");
- $test++;
-}
diff --git a/contrib/perl5/t/op/groups.t b/contrib/perl5/t/op/groups.t
deleted file mode 100755
index 082d2d1..0000000
--- a/contrib/perl5/t/op/groups.t
+++ /dev/null
@@ -1,143 +0,0 @@
-#!./perl
-
-$ENV{PATH} ="/bin:/usr/bin:/usr/xpg4/bin:/usr/ucb" .
- exists $ENV{PATH} ? ":$ENV{PATH}" : "";
-$ENV{LC_ALL} = "C"; # so that external utilities speak English
-$ENV{LANGUAGE} = 'C'; # GNU locale extension
-
-sub quit {
- print "1..0 # Skip: no `id` or `groups`\n";
- exit 0;
-}
-
-quit() if $^O eq 'MSWin32' or $^O =~ /lynxos/i;
-
-# We have to find a command that prints all (effective
-# and real) group names (not ids). The known commands are:
-# groups
-# id -Gn
-# id -a
-# Beware 1: some systems do just 'id -G' even when 'id -Gn' is used.
-# Beware 2: id -Gn or id -a format might be id(name) or name(id).
-# Beware 3: the groups= might be anywhere in the id output.
-# Beware 4: groups can have spaces ('id -a' being the only defense against this)
-# Beware 5: id -a might not contain the groups= part.
-#
-# That is, we might meet the following:
-#
-# foo bar zot # accept
-# foo 22 42 bar zot # accept
-# 1 22 42 2 3 # reject
-# groups=(42),foo(1),bar(2),zot me(3) # parse
-# groups=22,42,1(foo),2(bar),3(zot me) # parse
-#
-# and the groups= might be after, before, or between uid=... and gid=...
-
-GROUPS: {
- # prefer 'id' over 'groups' (is this ever wrong anywhere?)
- # and 'id -a' over 'id -Gn' (the former is good about spaces in group names)
- if (($groups = `id -a 2>/dev/null`) ne '') {
- # $groups is of the form:
- # uid=39957(gsar) gid=22(users) groups=33536,39181,22(users),0(root),1067(dev)
- last GROUPS if $groups =~ /groups=/;
- }
- if (($groups = `id -Gn 2>/dev/null`) ne '') {
- # $groups could be of the form:
- # users 33536 39181 root dev
- last GROUPS if $groups !~ /^(\d|\s)+$/;
- }
- if (($groups = `groups 2>/dev/null`) ne '') {
- # may not reflect all groups in some places, so do a sanity check
- if (-d '/afs') {
- print <<EOM;
-# These test results *may* be bogus, as you appear to have AFS,
-# and I can't find a working 'id' in your PATH (which I have set
-# to '$ENV{PATH}').
-#
-# If these tests fail, report the particular incantation you use
-# on this platform to find *all* the groups that an arbitrary
-# luser may belong to, using the 'perlbug' program.
-EOM
- }
- last GROUPS;
- }
- # Okay, not today.
- quit();
-}
-
-unless (eval { getgrgid(0); 1 }) {
- print "1..0 # Skip: getgrgid() not implemented\n";
- exit 0;
-}
-
-# Remember that group names can contain whitespace, '-', et cetera.
-# That is: do not \w, do not \S.
-if ($groups =~ /groups=(.+)( [ug]id=|$)/) {
- my $gr = $1;
- my @g0 = split /,/, $gr;
- my @g1;
- # prefer names over numbers
- for (@g0) {
- # 42(zot me)
- if (/^(\d+)(?:\(([^)]+)\))?/) {
- push @g1, ($2 || $1);
- }
- # zot me(42)
- elsif (/^([^(]*)\((\d+)\)/) {
- push @g1, ($1 || $2);
- }
- else {
- print "# ignoring group entry [$_]\n";
- }
- }
- print "# groups=$gr\n";
- print "# g0 = @g0\n";
- print "# g1 = @g1\n";
- $groups = "@g1";
-}
-
-print "1..2\n";
-
-$pwgid = $( + 0;
-($pwgnam) = getgrgid($pwgid);
-@basegroup{$pwgid,$pwgnam} = (1,1);
-
-$seen{$pwgid}++;
-
-for (split(' ', $()) {
- next if $seen{$_}++;
- ($group) = getgrgid($_);
- if (defined $group) {
- push(@gr, $group);
- }
- else {
- push(@gr, $_);
- }
-}
-
-if ($^O =~ /^(?:uwin|solaris)$/) {
- # Or anybody else who can have spaces in group names.
- $gr1 = join(' ', grep(!$did{$_}++, sort split(' ', join(' ', @gr))));
-} else {
- $gr1 = join(' ', sort @gr);
-}
-
-$gr2 = join(' ', grep(!$basegroup{$_}++, sort split(' ',$groups)));
-
-if ($gr1 eq $gr2) {
- print "ok 1\n";
-}
-else {
- print "#gr1 is <$gr1>\n";
- print "#gr2 is <$gr2>\n";
- print "not ok 1\n";
-}
-
-# multiple 0's indicate GROUPSTYPE is currently long but should be short
-
-if ($pwgid == 0 || $seen{0} < 2) {
- print "ok 2\n";
-}
-else {
- print "not ok 2 (groupstype should be type short, not long)\n";
-}
diff --git a/contrib/perl5/t/op/gv.t b/contrib/perl5/t/op/gv.t
deleted file mode 100755
index 8311244..0000000
--- a/contrib/perl5/t/op/gv.t
+++ /dev/null
@@ -1,176 +0,0 @@
-#!./perl
-
-#
-# various typeglob tests
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use warnings;
-
-print "1..40\n";
-
-# type coersion on assignment
-$foo = 'foo';
-$bar = *main::foo;
-$bar = $foo;
-print ref(\$bar) eq 'SCALAR' ? "ok 1\n" : "not ok 1\n";
-$foo = *main::bar;
-
-# type coersion (not) on misc ops
-
-if ($foo) {
- print ref(\$foo) eq 'GLOB' ? "ok 2\n" : "not ok 2\n";
-}
-
-unless ($foo =~ /abcd/) {
- print ref(\$foo) eq 'GLOB' ? "ok 3\n" : "not ok 3\n";
-}
-
-if ($foo eq '*main::bar') {
- print ref(\$foo) eq 'GLOB' ? "ok 4\n" : "not ok 4\n";
-}
-
-# type coersion on substitutions that match
-$a = *main::foo;
-$b = $a;
-$a =~ s/^X//;
-print ref(\$a) eq 'GLOB' ? "ok 5\n" : "not ok 5\n";
-$a =~ s/^\*//;
-print $a eq 'main::foo' ? "ok 6\n" : "not ok 6\n";
-print ref(\$b) eq 'GLOB' ? "ok 7\n" : "not ok 7\n";
-
-# typeglobs as lvalues
-substr($foo, 0, 1) = "XXX";
-print ref(\$foo) eq 'SCALAR' ? "ok 8\n" : "not ok 8\n";
-print $foo eq 'XXXmain::bar' ? "ok 9\n" : "not ok 9\n";
-
-# returning glob values
-sub foo {
- local($bar) = *main::foo;
- $foo = *main::bar;
- return ($foo, $bar);
-}
-
-($fuu, $baa) = foo();
-if (defined $fuu) {
- print ref(\$fuu) eq 'GLOB' ? "ok 10\n" : "not ok 10\n";
-}
-
-if (defined $baa) {
- print ref(\$baa) eq 'GLOB' ? "ok 11\n" : "not ok 11\n";
-}
-
-# nested package globs
-# NOTE: It's probably OK if these semantics change, because the
-# fact that %X::Y:: is stored in %X:: isn't documented.
-# (I hope.)
-
-{ package Foo::Bar; no warnings 'once'; $test=1; }
-print exists $Foo::{'Bar::'} ? "ok 12\n" : "not ok 12\n";
-print $Foo::{'Bar::'} eq '*Foo::Bar::' ? "ok 13\n" : "not ok 13\n";
-
-# test undef operator clearing out entire glob
-$foo = 'stuff';
-@foo = qw(more stuff);
-%foo = qw(even more random stuff);
-undef *foo;
-print +($foo || @foo || %foo) ? "not ok" : "ok", " 14\n";
-
-# test warnings from assignment of undef to glob
-{
- my $msg;
- local $SIG{__WARN__} = sub { $msg = $_[0] };
- use warnings;
- *foo = 'bar';
- print $msg ? "not ok" : "ok", " 15\n";
- *foo = undef;
- print $msg ? "ok" : "not ok", " 16\n";
-}
-
-# test *glob{THING} syntax
-$x = "ok 17\n";
-@x = ("ok 18\n");
-%x = ("ok 19" => "\n");
-sub x { "ok 20\n" }
-print ${*x{SCALAR}}, @{*x{ARRAY}}, %{*x{HASH}}, &{*x{CODE}};
-*x = *STDOUT;
-print *{*x{GLOB}} eq "*main::STDOUT" ? "ok 21\n" : "not ok 21\n";
-print {*x{IO}} "ok 22\n";
-print {*x{FILEHANDLE}} "ok 23\n";
-
-# test if defined() doesn't create any new symbols
-
-{
- my $test = 23;
-
- my $a = "SYM000";
- print "not " if defined *{$a};
- ++$test; print "ok $test\n";
-
- print "not " if defined @{$a} or defined *{$a};
- ++$test; print "ok $test\n";
-
- print "not " if defined %{$a} or defined *{$a};
- ++$test; print "ok $test\n";
-
- print "not " if defined ${$a} or defined *{$a};
- ++$test; print "ok $test\n";
-
- print "not " if defined &{$a} or defined *{$a};
- ++$test; print "ok $test\n";
-
- *{$a} = sub { print "ok $test\n" };
- print "not " unless defined &{$a} and defined *{$a};
- ++$test; &{$a};
-}
-
-# although it *should* if you're talking about magicals
-
-{
- my $test = 29;
-
- my $a = "]";
- print "not " unless defined ${$a};
- ++$test; print "ok $test\n";
- print "not " unless defined *{$a};
- ++$test; print "ok $test\n";
-
- $a = "1";
- "o" =~ /(o)/;
- print "not " unless ${$a};
- ++$test; print "ok $test\n";
- print "not " unless defined *{$a};
- ++$test; print "ok $test\n";
- $a = "2";
- print "not " if ${$a};
- ++$test; print "ok $test\n";
- print "not " unless defined *{$a};
- ++$test; print "ok $test\n";
- $a = "1x";
- print "not " if defined ${$a};
- ++$test; print "ok $test\n";
- print "not " if defined *{$a};
- ++$test; print "ok $test\n";
- $a = "11";
- "o" =~ /(((((((((((o)))))))))))/;
- print "not " unless ${$a};
- ++$test; print "ok $test\n";
- print "not " unless defined *{$a};
- ++$test; print "ok $test\n";
-}
-
-
-# does pp_readline() handle glob-ness correctly?
-
-{
- my $g = *foo;
- $g = <DATA>;
- print $g;
-}
-
-__END__
-ok 40
diff --git a/contrib/perl5/t/op/hashwarn.t b/contrib/perl5/t/op/hashwarn.t
deleted file mode 100755
index 8466a71..0000000
--- a/contrib/perl5/t/op/hashwarn.t
+++ /dev/null
@@ -1,77 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-use warnings;
-
-use vars qw{ @warnings };
-
-BEGIN {
- $SIG{'__WARN__'} = sub { push @warnings, @_ };
- $| = 1;
- print "1..9\n";
-}
-
-END { print "not ok\n# Uncaught warnings:\n@warnings\n" if @warnings }
-
-sub test ($$;$) {
- my($num, $bool, $diag) = @_;
- if ($bool) {
- print "ok $num\n";
- return;
- }
- print "not ok $num\n";
- return unless defined $diag;
- $diag =~ s/\Z\n?/\n/; # unchomp
- print map "# $num : $_", split m/^/m, $diag;
-}
-
-sub test_warning ($$$) {
- my($num, $got, $expected) = @_;
- my($pattern, $ok);
- if (($pattern) = ($expected =~ m#^/(.+)/$#s) or
- (undef, $pattern) = ($expected =~ m#^m([^\w\s])(.+)\1$#s)) {
- # it's a regexp
- $ok = ($got =~ /$pattern/);
- test $num, $ok, "Expected pattern /$pattern/, got '$got'\n";
- } else {
- $ok = ($got eq $expected);
- test $num, $ok, "Expected string '$expected', got '$got'\n";
- }
-# print "# $num: $got\n";
-}
-
-my $odd_msg = '/^Odd number of elements in hash/';
-my $ref_msg = '/^Reference found where even-sized list expected/';
-
-{
- my %hash = (1..3);
- test_warning 1, shift @warnings, $odd_msg;
-
- %hash = 1;
- test_warning 2, shift @warnings, $odd_msg;
-
- %hash = { 1..3 };
- test_warning 3, shift @warnings, $odd_msg;
- test_warning 4, shift @warnings, $ref_msg;
-
- %hash = [ 1..3 ];
- test_warning 5, shift @warnings, $ref_msg;
-
- %hash = sub { print "ok" };
- test_warning 6, shift @warnings, $odd_msg;
-
- my $avhv = [{x=>1,y=>2}];
- %$avhv = (x=>13,'y');
- test_warning 7, shift @warnings, $odd_msg;
-
- %$avhv = 'x';
- test_warning 8, shift @warnings, $odd_msg;
-
- $_ = { 1..10 };
- test 9, ! @warnings, "Unexpected warning";
-}
diff --git a/contrib/perl5/t/op/inc.t b/contrib/perl5/t/op/inc.t
deleted file mode 100755
index f59115e..0000000
--- a/contrib/perl5/t/op/inc.t
+++ /dev/null
@@ -1,97 +0,0 @@
-#!./perl
-
-print "1..12\n";
-
-# Verify that addition/subtraction properly upgrade to doubles.
-# These tests are only significant on machines with 32 bit longs,
-# and two's complement negation, but shouldn't fail anywhere.
-
-$a = 2147483647;
-$c=$a++;
-if ($a == 2147483648)
- {print "ok 1\n"}
-else
- {print "not ok 1\n";}
-
-$a = 2147483647;
-$c=++$a;
-if ($a == 2147483648)
- {print "ok 2\n"}
-else
- {print "not ok 2\n";}
-
-$a = 2147483647;
-$a=$a+1;
-if ($a == 2147483648)
- {print "ok 3\n"}
-else
- {print "not ok 3\n";}
-
-$a = -2147483648;
-$c=$a--;
-if ($a == -2147483649)
- {print "ok 4\n"}
-else
- {print "not ok 4\n";}
-
-$a = -2147483648;
-$c=--$a;
-if ($a == -2147483649)
- {print "ok 5\n"}
-else
- {print "not ok 5\n";}
-
-$a = -2147483648;
-$a=$a-1;
-if ($a == -2147483649)
- {print "ok 6\n"}
-else
- {print "not ok 6\n";}
-
-$a = 2147483648;
-$a = -$a;
-$c=$a--;
-if ($a == -2147483649)
- {print "ok 7\n"}
-else
- {print "not ok 7\n";}
-
-$a = 2147483648;
-$a = -$a;
-$c=--$a;
-if ($a == -2147483649)
- {print "ok 8\n"}
-else
- {print "not ok 8\n";}
-
-$a = 2147483648;
-$a = -$a;
-$a=$a-1;
-if ($a == -2147483649)
- {print "ok 9\n"}
-else
- {print "not ok 9\n";}
-
-$a = 2147483648;
-$b = -$a;
-$c=$b--;
-if ($b == -$a-1)
- {print "ok 10\n"}
-else
- {print "not ok 10\n";}
-
-$a = 2147483648;
-$b = -$a;
-$c=--$b;
-if ($b == -$a-1)
- {print "ok 11\n"}
-else
- {print "not ok 11\n";}
-
-$a = 2147483648;
-$b = -$a;
-$b=$b-1;
-if ($b == -(++$a))
- {print "ok 12\n"}
-else
- {print "not ok 12\n";}
diff --git a/contrib/perl5/t/op/index.t b/contrib/perl5/t/op/index.t
deleted file mode 100755
index 0b08f08..0000000
--- a/contrib/perl5/t/op/index.t
+++ /dev/null
@@ -1,42 +0,0 @@
-#!./perl
-
-# $RCSfile: index.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:59 $
-
-print "1..20\n";
-
-
-$foo = 'Now is the time for all good men to come to the aid of their country.';
-
-$first = substr($foo,0,index($foo,'the'));
-print ($first eq "Now is " ? "ok 1\n" : "not ok 1\n");
-
-$last = substr($foo,rindex($foo,'the'),100);
-print ($last eq "their country." ? "ok 2\n" : "not ok 2\n");
-
-$last = substr($foo,index($foo,'Now'),2);
-print ($last eq "No" ? "ok 3\n" : "not ok 3\n");
-
-$last = substr($foo,rindex($foo,'Now'),2);
-print ($last eq "No" ? "ok 4\n" : "not ok 4\n");
-
-$last = substr($foo,index($foo,'.'),100);
-print ($last eq "." ? "ok 5\n" : "not ok 5\n");
-
-$last = substr($foo,rindex($foo,'.'),100);
-print ($last eq "." ? "ok 6\n" : "not ok 6\n");
-
-print index("ababa","a",-1) == 0 ? "ok 7\n" : "not ok 7\n";
-print index("ababa","a",0) == 0 ? "ok 8\n" : "not ok 8\n";
-print index("ababa","a",1) == 2 ? "ok 9\n" : "not ok 9\n";
-print index("ababa","a",2) == 2 ? "ok 10\n" : "not ok 10\n";
-print index("ababa","a",3) == 4 ? "ok 11\n" : "not ok 11\n";
-print index("ababa","a",4) == 4 ? "ok 12\n" : "not ok 12\n";
-print index("ababa","a",5) == -1 ? "ok 13\n" : "not ok 13\n";
-
-print rindex("ababa","a",-1) == -1 ? "ok 14\n" : "not ok 14\n";
-print rindex("ababa","a",0) == 0 ? "ok 15\n" : "not ok 15\n";
-print rindex("ababa","a",1) == 0 ? "ok 16\n" : "not ok 16\n";
-print rindex("ababa","a",2) == 2 ? "ok 17\n" : "not ok 17\n";
-print rindex("ababa","a",3) == 2 ? "ok 18\n" : "not ok 18\n";
-print rindex("ababa","a",4) == 4 ? "ok 19\n" : "not ok 19\n";
-print rindex("ababa","a",5) == 4 ? "ok 20\n" : "not ok 20\n";
diff --git a/contrib/perl5/t/op/int.t b/contrib/perl5/t/op/int.t
deleted file mode 100755
index 7d675a4..0000000
--- a/contrib/perl5/t/op/int.t
+++ /dev/null
@@ -1,36 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..7\n";
-
-# compile time evaluation
-
-if (int(1.234) == 1) {print "ok 1\n";} else {print "not ok 1\n";}
-
-if (int(-1.234) == -1) {print "ok 2\n";} else {print "not ok 2\n";}
-
-# run time evaluation
-
-$x = 1.234;
-if (int($x) == 1) {print "ok 3\n";} else {print "not ok 3\n";}
-if (int(-$x) == -1) {print "ok 4\n";} else {print "not ok 4\n";}
-
-$x = length("abc") % -10;
-print $x == -7 ? "ok 5\n" : "# expected -7, got $x\nnot ok 5\n";
-
-{
- use integer;
- $x = length("abc") % -10;
- $y = (3/-10)*-10;
- print $x+$y == 3 && abs($x) < 10 ? "ok 6\n" : "not ok 6\n";
-}
-
-# check bad strings still get converted
-
-@x = ( 6, 8, 10);
-print "not " if $x["1foo"] != 8;
-print "ok 7\n";
diff --git a/contrib/perl5/t/op/join.t b/contrib/perl5/t/op/join.t
deleted file mode 100755
index 0f849fd..0000000
--- a/contrib/perl5/t/op/join.t
+++ /dev/null
@@ -1,67 +0,0 @@
-#!./perl
-
-print "1..14\n";
-
-@x = (1, 2, 3);
-if (join(':',@x) eq '1:2:3') {print "ok 1\n";} else {print "not ok 1\n";}
-
-if (join('',1,2,3) eq '123') {print "ok 2\n";} else {print "not ok 2\n";}
-
-if (join(':',split(/ /,"1 2 3")) eq '1:2:3') {print "ok 3\n";} else {print "not ok 3\n";}
-
-my $f = 'a';
-$f = join ',', 'b', $f, 'e';
-if ($f eq 'b,a,e') {print "ok 4\n";} else {print "# '$f'\nnot ok 4\n";}
-
-$f = 'a';
-$f = join ',', $f, 'b', 'e';
-if ($f eq 'a,b,e') {print "ok 5\n";} else {print "not ok 5\n";}
-
-$f = 'a';
-$f = join $f, 'b', 'e', 'k';
-if ($f eq 'baeak') {print "ok 6\n";} else {print "# '$f'\nnot ok 6\n";}
-
-# 7,8 check for multiple read of tied objects
-{ package X;
- sub TIESCALAR { my $x = 7; bless \$x };
- sub FETCH { my $y = shift; $$y += 5 };
- tie my $t, 'X';
- my $r = join ':', $t, 99, $t, 99;
- print "# expected '12:99:17:99' got '$r'\nnot " if $r ne '12:99:17:99';
- print "ok 7\n";
- $r = join '', $t, 99, $t, 99;
- print "# expected '22992799' got '$r'\nnot " if $r ne '22992799';
- print "ok 8\n";
-};
-
-# 9,10 and for multiple read of undef
-{ my $s = 5;
- local ($^W, $SIG{__WARN__}) = ( 1, sub { $s+=4 } );
- my $r = join ':', 'a', undef, $s, 'b', undef, $s, 'c';
- print "# expected 'a::9:b::13:c' got '$r'\nnot " if $r ne 'a::9:b::13:c';
- print "ok 9\n";
- my $r = join '', 'a', undef, $s, 'b', undef, $s, 'c';
- print "# expected 'a17b21c' got '$r'\nnot " if $r ne 'a17b21c';
- print "ok 10\n";
-};
-
-{ my $s = join("", chr(0x1234), chr(0xff));
- print "not " unless length($s) == 2 && $s eq "\x{1234}\x{ff}";
- print "ok 11\n";
-}
-
-{ my $s = join(chr(0xff), chr(0x1234), "");
- print "not " unless length($s) == 2 && $s eq "\x{1234}\x{ff}";
- print "ok 12\n";
-}
-
-{ my $s = join(chr(0x1234), chr(0xff), chr(0x2345));
- print "not " unless length($s) == 3 && $s eq "\x{ff}\x{1234}\x{2345}";
- print "ok 13\n";
-}
-
-{ my $s = join(chr(0xff), chr(0x1234), chr(0xfe));
- print "not " unless length($s) == 3 && $s eq "\x{1234}\x{ff}\x{fe}";
- print "ok 14\n";
-}
-
diff --git a/contrib/perl5/t/op/length.t b/contrib/perl5/t/op/length.t
deleted file mode 100755
index ceb005e..0000000
--- a/contrib/perl5/t/op/length.t
+++ /dev/null
@@ -1,85 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..13\n";
-
-print "not " unless length("") == 0;
-print "ok 1\n";
-
-print "not " unless length("abc") == 3;
-print "ok 2\n";
-
-$_ = "foobar";
-print "not " unless length() == 6;
-print "ok 3\n";
-
-# Okay, so that wasn't very challenging. Let's go Unicode.
-
-{
- my $a = "\x{41}";
-
- print "not " unless length($a) == 1;
- print "ok 4\n";
- $test++;
-
- use bytes;
- print "not " unless $a eq "\x41" && length($a) == 1;
- print "ok 5\n";
- $test++;
-}
-
-{
- my $a = "\x{80}";
-
- print "not " unless length($a) == 1;
- print "ok 6\n";
- $test++;
-
- use bytes;
- print "not " unless $a eq "\xc2\x80" && length($a) == 2;
- print "ok 7\n";
- $test++;
-}
-
-{
- my $a = "\x{100}";
-
- print "not " unless length($a) == 1;
- print "ok 8\n";
- $test++;
-
- use bytes;
- print "not " unless $a eq "\xc4\x80" && length($a) == 2;
- print "ok 9\n";
- $test++;
-}
-
-{
- my $a = "\x{100}\x{80}";
-
- print "not " unless length($a) == 2;
- print "ok 10\n";
- $test++;
-
- use bytes;
- print "not " unless $a eq "\xc4\x80\xc2\x80" && length($a) == 4;
- print "ok 11\n";
- $test++;
-}
-
-{
- my $a = "\x{80}\x{100}";
-
- print "not " unless length($a) == 2;
- print "ok 12\n";
- $test++;
-
- use bytes;
- print "not " unless $a eq "\xc2\x80\xc4\x80" && length($a) == 4;
- print "ok 13\n";
- $test++;
-}
diff --git a/contrib/perl5/t/op/lex_assign.t b/contrib/perl5/t/op/lex_assign.t
deleted file mode 100755
index d761f73..0000000
--- a/contrib/perl5/t/op/lex_assign.t
+++ /dev/null
@@ -1,325 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-umask 0;
-$xref = \ "";
-$runme = ($^O eq 'VMS' ? 'MCR ' : '') . $^X;
-@a = (1..5);
-%h = (1..6);
-$aref = \@a;
-$href = \%h;
-open OP, qq{$runme -le "print 'aaa Ok ok' for 1..100"|};
-$chopit = 'aaaaaa';
-@chopar = (113 .. 119);
-$posstr = '123456';
-$cstr = 'aBcD.eF';
-pos $posstr = 3;
-$nn = $n = 2;
-sub subb {"in s"}
-
-@INPUT = <DATA>;
-@simple_input = grep /^\s*\w+\s*\$\w+\s*[#\n]/, @INPUT;
-print "1..", (10 + @INPUT + @simple_input), "\n";
-$ord = 0;
-
-sub wrn {"@_"}
-
-# Check correct optimization of ucfirst etc
-$ord++;
-my $a = "AB";
-my $b = "\u\L$a";
-print "not " unless $b eq 'Ab';
-print "ok $ord\n";
-
-# Check correct destruction of objects:
-my $dc = 0;
-sub A::DESTROY {$dc += 1}
-$a=8;
-my $b;
-{ my $c = 6; $b = bless \$c, "A"}
-
-$ord++;
-print "not " unless $dc == 0;
-print "ok $ord\n";
-
-$b = $a+5;
-
-$ord++;
-print "not " unless $dc == 1;
-print "ok $ord\n";
-
-$ord++;
-my $xxx = 'b';
-$xxx = 'c' . ($xxx || 'e');
-print "not " unless $xxx eq 'cb';
-print "ok $ord\n";
-
-{ # Check calling STORE
- my $sc = 0;
- sub B::TIESCALAR {bless [11], 'B'}
- sub B::FETCH { -(shift->[0]) }
- sub B::STORE { $sc++; my $o = shift; $o->[0] = 17 + shift }
-
- my $m;
- tie $m, 'B';
- $m = 100;
-
- $ord++;
- print "not " unless $sc == 1;
- print "ok $ord\n";
-
- my $t = 11;
- $m = $t + 89;
-
- $ord++;
- print "not " unless $sc == 2;
- print "ok $ord\n";
-
- $ord++;
- print "# $m\nnot " unless $m == -117;
- print "ok $ord\n";
-
- $m += $t;
-
- $ord++;
- print "not " unless $sc == 3;
- print "ok $ord\n";
-
- $ord++;
- print "# $m\nnot " unless $m == 89;
- print "ok $ord\n";
-
-}
-
-# Chains of assignments
-
-my ($l1, $l2, $l3, $l4);
-my $zzzz = 12;
-$zzz1 = $l1 = $l2 = $zzz2 = $l3 = $l4 = 1 + $zzzz;
-
-$ord++;
-print "# $zzz1 = $l1 = $l2 = $zzz2 = $l3 = $l4 = 13\nnot "
- unless $zzz1 == 13 and $zzz2 == 13 and $l1 == 13
- and $l2 == 13 and $l3 == 13 and $l4 == 13;
-print "ok $ord\n";
-
-for (@INPUT) {
- $ord++;
- ($op, undef, $comment) = /^([^\#]+)(\#\s+(.*))?/;
- $comment = $op unless defined $comment;
- chomp;
- $op = "$op==$op" unless $op =~ /==/;
- ($op, $expectop) = $op =~ /(.*)==(.*)/;
-
- $skip = ($op =~ /^'\?\?\?'/ or $comment =~ /skip\(.*\Q$^O\E.*\)/i)
- ? "skip" : "# '$_'\nnot";
- $integer = ($comment =~ /^i_/) ? "use integer" : '' ;
- (print "#skipping $comment:\nok $ord\n"), next if $skip eq 'skip';
-
- eval <<EOE;
- local \$SIG{__WARN__} = \\&wrn;
- my \$a = 'fake';
- $integer;
- \$a = $op;
- \$b = $expectop;
- if (\$a ne \$b) {
- print "# \$comment: got `\$a', expected `\$b'\n";
- print "\$skip " if \$a ne \$b or \$skip eq 'skip';
- }
- print "ok \$ord\\n";
-EOE
- if ($@) {
- if ($@ =~ /is unimplemented/) {
- print "# skipping $comment: unimplemented:\nok $ord\n";
- } else {
- warn $@;
- print "# '$_'\nnot ok $ord\n";
- }
- }
-}
-
-for (@simple_input) {
- $ord++;
- ($op, undef, $comment) = /^([^\#]+)(\#\s+(.*))?/;
- $comment = $op unless defined $comment;
- chomp;
- ($operator, $variable) = /^\s*(\w+)\s*\$(\w+)/ or warn "misprocessed '$_'\n";
- eval <<EOE;
- local \$SIG{__WARN__} = \\&wrn;
- my \$$variable = "Ac# Ca\\nxxx";
- \$$variable = $operator \$$variable;
- \$toself = \$$variable;
- \$direct = $operator "Ac# Ca\\nxxx";
- print "# \\\$$variable = $operator \\\$$variable\\nnot "
- unless \$toself eq \$direct;
- print "ok \$ord\\n";
-EOE
- if ($@) {
- if ($@ =~ /is unimplemented/) {
- print "# skipping $comment: unimplemented:\nok $ord\n";
- } elsif ($@ =~ /Can't (modify|take log of 0)/) {
- print "# skipping $comment: syntax not good for selfassign:\nok $ord\n";
- } else {
- warn $@;
- print "# '$_'\nnot ok $ord\n";
- }
- }
-}
-__END__
-ref $xref # ref
-ref $cstr # ref nonref
-`$runme -e "print qq[1\\n]"` # backtick skip(MSWin32)
-`$undefed` # backtick undef skip(MSWin32)
-<*> # glob
-<OP> # readline
-'faked' # rcatline
-(@z = (1 .. 3)) # aassign
-chop $chopit # chop
-(chop (@x=@chopar)) # schop
-chomp $chopit # chomp
-(chop (@x=@chopar)) # schomp
-pos $posstr # pos
-pos $chopit # pos returns undef
-$nn++==2 # postinc
-$nn++==3 # i_postinc
-$nn--==4 # postdec
-$nn--==3 # i_postdec
-$n ** $n # pow
-$n * $n # multiply
-$n * $n # i_multiply
-$n / $n # divide
-$n / $n # i_divide
-$n % $n # modulo
-$n % $n # i_modulo
-$n x $n # repeat
-$n + $n # add
-$n + $n # i_add
-$n - $n # subtract
-$n - $n # i_subtract
-$n . $n # concat
-$n . $a=='2fake' # concat with self
-"3$a"=='3fake' # concat with self in stringify
-"$n" # stringify
-$n << $n # left_shift
-$n >> $n # right_shift
-$n <=> $n # ncmp
-$n <=> $n # i_ncmp
-$n cmp $n # scmp
-$n & $n # bit_and
-$n ^ $n # bit_xor
-$n | $n # bit_or
--$n # negate
--$n # i_negate
-~$n # complement
-atan2 $n,$n # atan2
-sin $n # sin
-cos $n # cos
-'???' # rand
-exp $n # exp
-log $n # log
-sqrt $n # sqrt
-int $n # int
-hex $n # hex
-oct $n # oct
-abs $n # abs
-length $posstr # length
-substr $posstr, 2, 2 # substr
-vec("abc",2,8) # vec
-index $posstr, 2 # index
-rindex $posstr, 2 # rindex
-sprintf "%i%i", $n, $n # sprintf
-ord $n # ord
-chr $n # chr
-crypt $n, $n # crypt
-ucfirst ($cstr . "a") # ucfirst padtmp
-ucfirst $cstr # ucfirst
-lcfirst $cstr # lcfirst
-uc $cstr # uc
-lc $cstr # lc
-quotemeta $cstr # quotemeta
-@$aref # rv2av
-@$undefed # rv2av undef
-(each %h) % 2 == 1 # each
-values %h # values
-keys %h # keys
-%$href # rv2hv
-pack "C2", $n,$n # pack
-split /a/, "abad" # split
-join "a"; @a # join
-push @a,3==6 # push
-unshift @aaa # unshift
-reverse @a # reverse
-reverse $cstr # reverse - scal
-grep $_, 1,0,2,0,3 # grepwhile
-map "x$_", 1,0,2,0,3 # mapwhile
-subb() # entersub
-caller # caller
-warn "ignore this\n" # warn
-'faked' # die
-open BLAH, "<non-existent" # open
-fileno STDERR # fileno
-umask 0 # umask
-select STDOUT # sselect
-select "","","",0 # select
-getc OP # getc
-'???' # read
-'???' # sysread
-'???' # syswrite
-'???' # send
-'???' # recv
-'???' # tell
-'???' # fcntl
-'???' # ioctl
-'???' # flock
-'???' # accept
-'???' # shutdown
-'???' # ftsize
-'???' # ftmtime
-'???' # ftatime
-'???' # ftctime
-chdir 'non-existent' # chdir
-'???' # chown
-'???' # chroot
-unlink 'non-existent' # unlink
-chmod 'non-existent' # chmod
-utime 'non-existent' # utime
-rename 'non-existent', 'non-existent1' # rename
-link 'non-existent', 'non-existent1' # link
-'???' # symlink
-readlink 'non-existent', 'non-existent1' # readlink
-'???' # mkdir
-'???' # rmdir
-'???' # telldir
-'???' # fork
-'???' # wait
-'???' # waitpid
-system "$runme -e 0" # system skip(VMS)
-'???' # exec
-'???' # kill
-getppid # getppid
-getpgrp # getpgrp
-'???' # setpgrp
-getpriority $$, $$ # getpriority
-'???' # setpriority
-time # time
-localtime $^T # localtime
-gmtime $^T # gmtime
-'???' # sleep: can randomly fail
-'???' # alarm
-'???' # shmget
-'???' # shmctl
-'???' # shmread
-'???' # shmwrite
-'???' # msgget
-'???' # msgctl
-'???' # msgsnd
-'???' # msgrcv
-'???' # semget
-'???' # semctl
-'???' # semop
-'???' # getlogin
-'???' # syscall
diff --git a/contrib/perl5/t/op/lfs.t b/contrib/perl5/t/op/lfs.t
deleted file mode 100755
index 0a1c399..0000000
--- a/contrib/perl5/t/op/lfs.t
+++ /dev/null
@@ -1,272 +0,0 @@
-# NOTE: this file tests how large files (>2GB) work with perlio (stdio/sfio).
-# sysopen(), sysseek(), syswrite(), sysread() are tested in t/lib/syslfs.t.
-# If you modify/add tests here, remember to update also t/lib/syslfs.t.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- # Don't bother if there are no quad offsets.
- require Config; import Config;
- if ($Config{lseeksize} < 8) {
- print "1..0 # Skip: no 64-bit file offsets\n";
- exit(0);
- }
-}
-
-use strict;
-
-our @s;
-our $fail;
-
-sub zap {
- close(BIG);
- unlink("big");
- unlink("big1");
- unlink("big2");
-}
-
-sub bye {
- zap();
- exit(0);
-}
-
-my $explained;
-
-sub explain {
- unless ($explained++) {
- print <<EOM;
-#
-# If the lfs (large file support: large meaning larger than two
-# gigabytes) tests are skipped or fail, it may mean either that your
-# process (or process group) is not allowed to write large files
-# (resource limits) or that the file system (the network filesystem?)
-# you are running the tests on doesn't let your user/group have large
-# files (quota) or the filesystem simply doesn't support large files.
-# You may even need to reconfigure your kernel. (This is all very
-# operating system and site-dependent.)
-#
-# Perl may still be able to support large files, once you have
-# such a process, enough quota, and such a (file) system.
-# It is just that the test failed now.
-#
-EOM
- }
- print "1..0 # Skip: @_\n" if @_;
-}
-
-print "# checking whether we have sparse files...\n";
-
-# Known have-nots.
-if ($^O eq 'MSWin32' || $^O eq 'VMS') {
- print "1..0 # Skip: no sparse files in $^O\n";
- bye();
-}
-
-# Known haves that have problems running this test
-# (for example because they do not support sparse files, like UNICOS)
-if ($^O eq 'unicos') {
- print "1..0 # Skip: no sparse files in $^0, unable to test large files\n";
- bye();
-}
-
-# Then try to heuristically deduce whether we have sparse files.
-
-# Let's not depend on Fcntl or any other extension.
-
-my ($SEEK_SET, $SEEK_CUR, $SEEK_END) = (0, 1, 2);
-
-# We'll start off by creating a one megabyte file which has
-# only three "true" bytes. If we have sparseness, we should
-# consume less blocks than one megabyte (assuming nobody has
-# one megabyte blocks...)
-
-open(BIG, ">big1") or
- do { warn "open big1 failed: $!\n"; bye };
-binmode(BIG) or
- do { warn "binmode big1 failed: $!\n"; bye };
-seek(BIG, 1_000_000, $SEEK_SET) or
- do { warn "seek big1 failed: $!\n"; bye };
-print BIG "big" or
- do { warn "print big1 failed: $!\n"; bye };
-close(BIG) or
- do { warn "close big1 failed: $!\n"; bye };
-
-my @s1 = stat("big1");
-
-print "# s1 = @s1\n";
-
-open(BIG, ">big2") or
- do { warn "open big2 failed: $!\n"; bye };
-binmode(BIG) or
- do { warn "binmode big2 failed: $!\n"; bye };
-seek(BIG, 2_000_000, $SEEK_SET) or
- do { warn "seek big2 failed; $!\n"; bye };
-print BIG "big" or
- do { warn "print big2 failed; $!\n"; bye };
-close(BIG) or
- do { warn "close big2 failed; $!\n"; bye };
-
-my @s2 = stat("big2");
-
-print "# s2 = @s2\n";
-
-zap();
-
-unless ($s1[7] == 1_000_003 && $s2[7] == 2_000_003 &&
- $s1[11] == $s2[11] && $s1[12] == $s2[12]) {
- print "1..0 # Skip: no sparse files?\n";
- bye;
-}
-
-print "# we seem to have sparse files...\n";
-
-# By now we better be sure that we do have sparse files:
-# if we are not, the following will hog 5 gigabytes of disk. Ooops.
-# This may fail by producing some signal; run in a subprocess first for safety
-
-$ENV{LC_ALL} = "C";
-
-my $r = system '../perl', '-e', <<'EOF';
-open(BIG, ">big");
-seek(BIG, 5_000_000_000, 0);
-print BIG "big";
-exit 0;
-EOF
-
-open(BIG, ">big") or do { warn "open failed: $!\n"; bye };
-binmode BIG;
-if ($r or not seek(BIG, 5_000_000_000, $SEEK_SET)) {
- my $err = $r ? 'signal '.($r & 0x7f) : $!;
- explain("seeking past 2GB failed: $err");
- bye();
-}
-
-# Either the print or (more likely, thanks to buffering) the close will
-# fail if there are are filesize limitations (process or fs).
-my $print = print BIG "big";
-print "# print failed: $!\n" unless $print;
-my $close = close BIG;
-print "# close failed: $!\n" unless $close;
-unless ($print && $close) {
- if ($! =~/too large/i) {
- explain("writing past 2GB failed: process limits?");
- } elsif ($! =~ /quota/i) {
- explain("filesystem quota limits?");
- } else {
- explain("error: $!");
- }
- bye();
-}
-
-@s = stat("big");
-
-print "# @s\n";
-
-unless ($s[7] == 5_000_000_003) {
- explain("kernel/fs not configured to use large files?");
- bye();
-}
-
-sub fail () {
- print "not ";
- $fail++;
-}
-
-sub offset ($$) {
- my ($offset_will_be, $offset_want) = @_;
- my $offset_is = eval $offset_will_be;
- unless ($offset_is == $offset_want) {
- print "# bad offset $offset_is, want $offset_want\n";
- my ($offset_func) = ($offset_will_be =~ /^(\w+)/);
- if (unpack("L", pack("L", $offset_want)) == $offset_is) {
- print "# 32-bit wraparound suspected in $offset_func() since\n";
- print "# $offset_want cast into 32 bits equals $offset_is.\n";
- } elsif ($offset_want - unpack("L", pack("L", $offset_want)) - 1
- == $offset_is) {
- print "# 32-bit wraparound suspected in $offset_func() since\n";
- printf "# %s - unpack('L', pack('L', %s)) - 1 equals %s.\n",
- $offset_want,
- $offset_want,
- $offset_is;
- }
- fail;
- }
-}
-
-print "1..17\n";
-
-$fail = 0;
-
-fail unless $s[7] == 5_000_000_003; # exercizes pp_stat
-print "ok 1\n";
-
-fail unless -s "big" == 5_000_000_003; # exercizes pp_ftsize
-print "ok 2\n";
-
-fail unless -e "big";
-print "ok 3\n";
-
-fail unless -f "big";
-print "ok 4\n";
-
-open(BIG, "big") or do { warn "open failed: $!\n"; bye };
-binmode BIG;
-
-fail unless seek(BIG, 4_500_000_000, $SEEK_SET);
-print "ok 5\n";
-
-offset('tell(BIG)', 4_500_000_000);
-print "ok 6\n";
-
-fail unless seek(BIG, 1, $SEEK_CUR);
-print "ok 7\n";
-
-# If you get 205_032_705 from here it means that
-# your tell() is returning 32-bit values since (I32)4_500_000_001
-# is exactly 205_032_705.
-offset('tell(BIG)', 4_500_000_001);
-print "ok 8\n";
-
-fail unless seek(BIG, -1, $SEEK_CUR);
-print "ok 9\n";
-
-offset('tell(BIG)', 4_500_000_000);
-print "ok 10\n";
-
-fail unless seek(BIG, -3, $SEEK_END);
-print "ok 11\n";
-
-offset('tell(BIG)', 5_000_000_000);
-print "ok 12\n";
-
-my $big;
-
-fail unless read(BIG, $big, 3) == 3;
-print "ok 13\n";
-
-fail unless $big eq "big";
-print "ok 14\n";
-
-# 705_032_704 = (I32)5_000_000_000
-# See that we don't have "big" in the 705_... spot:
-# that would mean that we have a wraparound.
-fail unless seek(BIG, 705_032_704, $SEEK_SET);
-print "ok 15\n";
-
-my $zero;
-
-fail unless read(BIG, $zero, 3) == 3;
-print "ok 16\n";
-
-fail unless $zero eq "\0\0\0";
-print "ok 17\n";
-
-explain() if $fail;
-
-bye(); # does the necessary cleanup
-
-END {
- unlink "big"; # be paranoid about leaving 5 gig files lying around
-}
-
-# eof
diff --git a/contrib/perl5/t/op/list.t b/contrib/perl5/t/op/list.t
deleted file mode 100755
index 4d7a2d5..0000000
--- a/contrib/perl5/t/op/list.t
+++ /dev/null
@@ -1,89 +0,0 @@
-#!./perl
-
-print "1..28\n";
-
-@foo = (1, 2, 3, 4);
-if ($foo[0] == 1 && $foo[3] == 4) {print "ok 1\n";} else {print "not ok 1\n";}
-
-$_ = join(':',@foo);
-if ($_ eq '1:2:3:4') {print "ok 2\n";} else {print "not ok 2\n";}
-
-($a,$b,$c,$d) = (1,2,3,4);
-if ("$a;$b;$c;$d" eq '1;2;3;4') {print "ok 3\n";} else {print "not ok 3\n";}
-
-($c,$b,$a) = split(/ /,"111 222 333");
-if ("$a;$b;$c" eq '333;222;111') {print "ok 4\n";} else {print "not ok 4\n";}
-
-($a,$b,$c) = ($c,$b,$a);
-if ("$a;$b;$c" eq '111;222;333') {print "ok 5\n";} else {print "not ok 5 $a;$b;$c\n";}
-
-($a, $b) = ($b, $a);
-if ("$a;$b;$c" eq '222;111;333') {print "ok 6\n";} else {print "not ok 6\n";}
-
-($a, $b[1], $c{2}, $d) = (1, 2, 3, 4);
-if ($a eq 1) {print "ok 7\n";} else {print "not ok 7\n";}
-if ($b[1] eq 2) {print "ok 8\n";} else {print "not ok 8\n";}
-if ($c{2} eq 3) {print "ok 9\n";} else {print "not ok 9\n";}
-if ($d eq 4) {print "ok 10\n";} else {print "not ok 10\n";}
-
-@foo = (1,2,3,4,5,6,7,8);
-($a, $b, $c, $d) = @foo;
-print "#11 $a;$b;$c;$d eq 1;2;3;4\n";
-if ("$a;$b;$c;$d" eq '1;2;3;4') {print "ok 11\n";} else {print "not ok 11\n";}
-
-@foo = @bar = (1);
-if (join(':',@foo,@bar) eq '1:1') {print "ok 12\n";} else {print "not ok 12\n";}
-
-@foo = ();
-@foo = 1+2+3;
-if (join(':',@foo) eq '6') {print "ok 13\n";} else {print "not ok 13\n";}
-
-for ($x = 0; $x < 3; $x++) {
- ($a, $b, $c) =
- $x == 0?
- ('ok ', 14, "\n"):
- $x == 1?
- ('ok ', 15, "\n"):
- # default
- ('ok ', 16, "\n");
-
- print $a,$b,$c;
-}
-
-@a = ($x == 12345 || (1,2,3));
-if (join('',@a) eq '123') {print "ok 17\n";} else {print "not ok 17\n";}
-
-@a = ($x == $x || (4,5,6));
-if (join('',@a) eq '1') {print "ok 18\n";} else {print "not ok 18\n";}
-
-if (join('',1,2,(3,4,5)) eq '12345'){print "ok 19\n";}else{print "not ok 19\n";}
-if (join('',(1,2,3,4,5)) eq '12345'){print "ok 20\n";}else{print "not ok 20\n";}
-if (join('',(1,2,3,4),5) eq '12345'){print "ok 21\n";}else{print "not ok 21\n";}
-if (join('',1,(2,3,4),5) eq '12345'){print "ok 22\n";}else{print "not ok 22\n";}
-if (join('',1,2,(3,4),5) eq '12345'){print "ok 23\n";}else{print "not ok 23\n";}
-if (join('',1,2,3,(4),5) eq '12345'){print "ok 24\n";}else{print "not ok 24\n";}
-
-for ($x = 0; $x < 3; $x++) {
- ($a, $b, $c) = do {
- if ($x == 0) {
- ('ok ', 25, "\n");
- }
- elsif ($x == 1) {
- ('ok ', 26, "\n");
- }
- else {
- ('ok ', 27, "\n");
- }
- };
-
- print $a,$b,$c;
-}
-
-# slices
-{
- my @a = (0, undef, undef, 3);
- my @b = @a[1,2];
- my @c = (0, undef, undef, 3)[1, 2];
- print "not " unless @b == @c and @c == 2;
- print "ok 28\n";
-}
diff --git a/contrib/perl5/t/op/local.t b/contrib/perl5/t/op/local.t
deleted file mode 100755
index cf606b7..0000000
--- a/contrib/perl5/t/op/local.t
+++ /dev/null
@@ -1,234 +0,0 @@
-#!./perl
-
-print "1..69\n";
-
-sub foo {
- local($a, $b) = @_;
- local($c, $d);
- $c = "ok 3\n";
- $d = "ok 4\n";
- { local($a,$c) = ("ok 9\n", "ok 10\n"); ($x, $y) = ($a, $c); }
- print $a, $b;
- $c . $d;
-}
-
-$a = "ok 5\n";
-$b = "ok 6\n";
-$c = "ok 7\n";
-$d = "ok 8\n";
-
-print &foo("ok 1\n","ok 2\n");
-
-print $a,$b,$c,$d,$x,$y;
-
-# same thing, only with arrays and associative arrays
-
-sub foo2 {
- local($a, @b) = @_;
- local(@c, %d);
- @c = "ok 13\n";
- $d{''} = "ok 14\n";
- { local($a,@c) = ("ok 19\n", "ok 20\n"); ($x, $y) = ($a, @c); }
- print $a, @b;
- $c[0] . $d{''};
-}
-
-$a = "ok 15\n";
-@b = "ok 16\n";
-@c = "ok 17\n";
-$d{''} = "ok 18\n";
-
-print &foo2("ok 11\n","ok 12\n");
-
-print $a,@b,@c,%d,$x,$y;
-
-eval 'local($$e)';
-print +($@ =~ /Can't localize through a reference/) ? "" : "not ", "ok 21\n";
-
-eval 'local(@$e)';
-print +($@ =~ /Can't localize through a reference/) ? "" : "not ", "ok 22\n";
-
-eval 'local(%$e)';
-print +($@ =~ /Can't localize through a reference/) ? "" : "not ", "ok 23\n";
-
-# Array and hash elements
-
-@a = ('a', 'b', 'c');
-{
- local($a[1]) = 'foo';
- local($a[2]) = $a[2];
- print +($a[1] eq 'foo') ? "" : "not ", "ok 24\n";
- print +($a[2] eq 'c') ? "" : "not ", "ok 25\n";
- undef @a;
-}
-print +($a[1] eq 'b') ? "" : "not ", "ok 26\n";
-print +($a[2] eq 'c') ? "" : "not ", "ok 27\n";
-print +(!defined $a[0]) ? "" : "not ", "ok 28\n";
-
-@a = ('a', 'b', 'c');
-{
- local($a[1]) = "X";
- shift @a;
-}
-print +($a[0].$a[1] eq "Xb") ? "" : "not ", "ok 29\n";
-
-%h = ('a' => 1, 'b' => 2, 'c' => 3);
-{
- local($h{'a'}) = 'foo';
- local($h{'b'}) = $h{'b'};
- print +($h{'a'} eq 'foo') ? "" : "not ", "ok 30\n";
- print +($h{'b'} == 2) ? "" : "not ", "ok 31\n";
- local($h{'c'});
- delete $h{'c'};
-}
-print +($h{'a'} == 1) ? "" : "not ", "ok 32\n";
-print +($h{'b'} == 2) ? "" : "not ", "ok 33\n";
-print +($h{'c'} == 3) ? "" : "not ", "ok 34\n";
-
-# check for scope leakage
-$a = 'outer';
-if (1) { local $a = 'inner' }
-print +($a eq 'outer') ? "" : "not ", "ok 35\n";
-
-# see if localization works when scope unwinds
-local $m = 5;
-eval {
- for $m (6) {
- local $m = 7;
- die "bye";
- }
-};
-print $m == 5 ? "" : "not ", "ok 36\n";
-
-# see if localization works on tied arrays
-{
- package TA;
- sub TIEARRAY { bless [], $_[0] }
- sub STORE { print "# STORE [@_]\n"; $_[0]->[$_[1]] = $_[2] }
- sub FETCH { my $v = $_[0]->[$_[1]]; print "# FETCH [@_=$v]\n"; $v }
- sub CLEAR { print "# CLEAR [@_]\n"; @{$_[0]} = (); }
- sub FETCHSIZE { scalar(@{$_[0]}) }
- sub SHIFT { shift (@{$_[0]}) }
- sub EXTEND {}
-}
-
-tie @a, 'TA';
-@a = ('a', 'b', 'c');
-{
- local($a[1]) = 'foo';
- local($a[2]) = $a[2];
- print +($a[1] eq 'foo') ? "" : "not ", "ok 37\n";
- print +($a[2] eq 'c') ? "" : "not ", "ok 38\n";
- @a = ();
-}
-print +($a[1] eq 'b') ? "" : "not ", "ok 39\n";
-print +($a[2] eq 'c') ? "" : "not ", "ok 40\n";
-print +(!defined $a[0]) ? "" : "not ", "ok 41\n";
-
-{
- package TH;
- sub TIEHASH { bless {}, $_[0] }
- sub STORE { print "# STORE [@_]\n"; $_[0]->{$_[1]} = $_[2] }
- sub FETCH { my $v = $_[0]->{$_[1]}; print "# FETCH [@_=$v]\n"; $v }
- sub DELETE { print "# DELETE [@_]\n"; delete $_[0]->{$_[1]}; }
- sub CLEAR { print "# CLEAR [@_]\n"; %{$_[0]} = (); }
-}
-
-# see if localization works on tied hashes
-tie %h, 'TH';
-%h = ('a' => 1, 'b' => 2, 'c' => 3);
-
-{
- local($h{'a'}) = 'foo';
- local($h{'b'}) = $h{'b'};
- print +($h{'a'} eq 'foo') ? "" : "not ", "ok 42\n";
- print +($h{'b'} == 2) ? "" : "not ", "ok 43\n";
- local($h{'c'});
- delete $h{'c'};
-}
-print +($h{'a'} == 1) ? "" : "not ", "ok 44\n";
-print +($h{'b'} == 2) ? "" : "not ", "ok 45\n";
-print +($h{'c'} == 3) ? "" : "not ", "ok 46\n";
-
-@a = ('a', 'b', 'c');
-{
- local($a[1]) = "X";
- shift @a;
-}
-print +($a[0].$a[1] eq "Xb") ? "" : "not ", "ok 47\n";
-
-# now try the same for %SIG
-
-$SIG{TERM} = 'foo';
-$SIG{INT} = \&foo;
-$SIG{__WARN__} = $SIG{INT};
-{
- local($SIG{TERM}) = $SIG{TERM};
- local($SIG{INT}) = $SIG{INT};
- local($SIG{__WARN__}) = $SIG{__WARN__};
- print +($SIG{TERM} eq 'main::foo') ? "" : "not ", "ok 48\n";
- print +($SIG{INT} eq \&foo) ? "" : "not ", "ok 49\n";
- print +($SIG{__WARN__} eq \&foo) ? "" : "not ", "ok 50\n";
- local($SIG{INT});
- delete $SIG{__WARN__};
-}
-print +($SIG{TERM} eq 'main::foo') ? "" : "not ", "ok 51\n";
-print +($SIG{INT} eq \&foo) ? "" : "not ", "ok 52\n";
-print +($SIG{__WARN__} eq \&foo) ? "" : "not ", "ok 53\n";
-
-# and for %ENV
-
-$ENV{_X_} = 'a';
-$ENV{_Y_} = 'b';
-$ENV{_Z_} = 'c';
-{
- local($ENV{_X_}) = 'foo';
- local($ENV{_Y_}) = $ENV{_Y_};
- print +($ENV{_X_} eq 'foo') ? "" : "not ", "ok 54\n";
- print +($ENV{_Y_} eq 'b') ? "" : "not ", "ok 55\n";
- local($ENV{_Z_});
- delete $ENV{_Z_};
-}
-print +($ENV{_X_} eq 'a') ? "" : "not ", "ok 56\n";
-print +($ENV{_Y_} eq 'b') ? "" : "not ", "ok 57\n";
-print +($ENV{_Z_} eq 'c') ? "" : "not ", "ok 58\n";
-
-# does implicit localization in foreach skip magic?
-
-$_ = "ok 59,ok 60,";
-my $iter = 0;
-while (/(o.+?),/gc) {
- print "$1\n";
- foreach (1..1) { $iter++ }
- if ($iter > 2) { print "not ok 60\n"; last; }
-}
-
-{
- package UnderScore;
- sub TIESCALAR { bless \my $self, shift }
- sub FETCH { die "read \$_ forbidden" }
- sub STORE { die "write \$_ forbidden" }
- tie $_, __PACKAGE__;
- my $t = 61;
- my @tests = (
- "Nesting" => sub { print '#'; for (1..3) { print }
- print "\n" }, 1,
- "Reading" => sub { print }, 0,
- "Matching" => sub { $x = /badness/ }, 0,
- "Concat" => sub { $_ .= "a" }, 0,
- "Chop" => sub { chop }, 0,
- "Filetest" => sub { -x }, 0,
- "Assignment" => sub { $_ = "Bad" }, 0,
- # XXX whether next one should fail is debatable
- "Local \$_" => sub { local $_ = 'ok?'; print }, 0,
- "for local" => sub { for("#ok?\n"){ print } }, 1,
- );
- while ( ($name, $code, $ok) = splice(@tests, 0, 3) ) {
- print "# Testing $name\n";
- eval { &$code };
- print(($ok xor $@) ? "ok $t\n" : "not ok $t\n");
- ++$t;
- }
- untie $_;
-}
-
diff --git a/contrib/perl5/t/op/lop.t b/contrib/perl5/t/op/lop.t
deleted file mode 100755
index d57271a..0000000
--- a/contrib/perl5/t/op/lop.t
+++ /dev/null
@@ -1,44 +0,0 @@
-#!./perl
-
-#
-# test the logical operators '&&', '||', '!', 'and', 'or', 'not'
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..7\n";
-
-my $test = 0;
-for my $i (undef, 0 .. 2, "", "0 but true") {
- my $true = 1;
- my $false = 0;
- for my $j (undef, 0 .. 2, "", "0 but true") {
- $true &&= !(
- ((!$i || !$j) != !($i && $j))
- or (!($i || $j) != (!$i && !$j))
- or (!!($i || $j) != !(!$i && !$j))
- or (!(!$i || !$j) != !!($i && $j))
- );
- $false ||= (
- ((!$i || !$j) == !!($i && $j))
- and (!!($i || $j) == (!$i && !$j))
- and ((!$i || $j) == ($i && !$j))
- and (($i || !$j) != (!$i && $j))
- );
- }
- if (not $true) {
- print "not ";
- } elsif ($false) {
- print "not ";
- }
- print "ok ", ++$test, "\n";
-}
-
-# $test == 6
-my $i = 0;
-(($i ||= 1) &&= 3) += 4;
-print "not " unless $i == 7;
-print "ok ", ++$test, "\n";
diff --git a/contrib/perl5/t/op/magic.t b/contrib/perl5/t/op/magic.t
deleted file mode 100755
index c2a8211..0000000
--- a/contrib/perl5/t/op/magic.t
+++ /dev/null
@@ -1,228 +0,0 @@
-#!./perl
-
-BEGIN {
- $| = 1;
- chdir 't' if -d 't';
- @INC = '../lib';
- $SIG{__WARN__} = sub { die "Dying on warning: ", @_ };
-}
-
-use warnings;
-
-sub ok {
- my ($n, $result, $info) = @_;
- if ($result) {
- print "ok $n\n";
- }
- else {
- print "not ok $n\n";
- print "# $info\n" if $info;
- }
-}
-
-$Is_MSWin32 = $^O eq 'MSWin32';
-$Is_VMS = $^O eq 'VMS';
-$Is_Dos = $^O eq 'dos';
-$Is_os2 = $^O eq 'os2';
-$Is_Cygwin = $^O eq 'cygwin';
-$PERL = ($Is_MSWin32 ? '.\perl' : './perl');
-
-print "1..35\n";
-
-eval '$ENV{"FOO"} = "hi there";'; # check that ENV is inited inside eval
-if ($Is_MSWin32) { ok 1, `cmd /x /c set FOO` eq "FOO=hi there\n"; }
-else { ok 1, `echo \$FOO` eq "hi there\n"; }
-
-unlink 'ajslkdfpqjsjfk';
-$! = 0;
-open(FOO,'ajslkdfpqjsjfk');
-ok 2, $!, $!;
-close FOO; # just mention it, squelch used-only-once
-
-if ($Is_MSWin32 || $Is_Dos) {
- ok "3 # skipped",1;
- ok "4 # skipped",1;
-}
-else {
- # the next tests are embedded inside system simply because sh spits out
- # a newline onto stderr when a child process kills itself with SIGINT.
- system './perl', '-e', <<'END';
-
- $| = 1; # command buffering
-
- $SIG{"INT"} = "ok3"; kill "INT",$$; sleep 1;
- $SIG{"INT"} = "IGNORE"; kill "INT",$$; sleep 1; print "ok 4\n";
- $SIG{"INT"} = "DEFAULT"; kill "INT",$$; sleep 1; print "not ok\n";
-
- sub ok3 {
- if (($x = pop(@_)) eq "INT") {
- print "ok 3\n";
- }
- else {
- print "not ok 3 ($x @_)\n";
- }
- }
-
-END
-}
-
-# can we slice ENV?
-@val1 = @ENV{keys(%ENV)};
-@val2 = values(%ENV);
-ok 5, join(':',@val1) eq join(':',@val2);
-ok 6, @val1 > 1;
-
-# regex vars
-'foobarbaz' =~ /b(a)r/;
-ok 7, $` eq 'foo', $`;
-ok 8, $& eq 'bar', $&;
-ok 9, $' eq 'baz', $';
-ok 10, $+ eq 'a', $+;
-
-# $"
-@a = qw(foo bar baz);
-ok 11, "@a" eq "foo bar baz", "@a";
-{
- local $" = ',';
- ok 12, "@a" eq "foo,bar,baz", "@a";
-}
-
-# $;
-%h = ();
-$h{'foo', 'bar'} = 1;
-ok 13, (keys %h)[0] eq "foo\034bar", (keys %h)[0];
-{
- local $; = 'x';
- %h = ();
- $h{'foo', 'bar'} = 1;
- ok 14, (keys %h)[0] eq 'fooxbar', (keys %h)[0];
-}
-
-# $?, $@, $$
-system qq[$PERL -e "exit(0)"];
-ok 15, $? == 0, $?;
-system qq[$PERL -e "exit(1)"];
-ok 16, $? != 0, $?;
-
-eval { die "foo\n" };
-ok 17, $@ eq "foo\n", $@;
-
-ok 18, $$ > 0, $$;
-
-# $^X and $0
-{
- if ($^O eq 'qnx') {
- chomp($wd = `/usr/bin/fullpath -t`);
- }
- elsif($Is_Cygwin) {
- # Cygwin turns the symlink into the real file
- chomp($wd = `pwd`);
- $wd =~ s#/t$##;
- }
- elsif($Is_os2) {
- $wd = Cwd::sys_cwd();
- }
- else {
- $wd = '.';
- }
- my $perl = "$wd/perl";
- my $headmaybe = '';
- my $tailmaybe = '';
- $script = "$wd/show-shebang";
- if ($Is_MSWin32) {
- chomp($wd = `cd`);
- $wd =~ s|\\|/|g;
- $perl = "$wd/perl.exe";
- $script = "$wd/show-shebang.bat";
- $headmaybe = <<EOH ;
-\@rem ='
-\@echo off
-$perl -x \%0
-goto endofperl
-\@rem ';
-EOH
- $tailmaybe = <<EOT ;
-
-__END__
-:endofperl
-EOT
- }
- elsif ($Is_os2) {
- $script = "./show-shebang";
- }
- if ($^O eq 'os390' or $^O eq 'posix-bc' or $^O eq 'vmesa') { # no shebang
- $headmaybe = <<EOH ;
- eval 'exec ./perl -S \$0 \${1+"\$\@"}'
- if 0;
-EOH
- }
- $s1 = "\$^X is $perl, \$0 is $script\n";
- ok 19, open(SCRIPT, ">$script"), $!;
- ok 20, print(SCRIPT $headmaybe . <<EOB . <<'EOF' . $tailmaybe), $!;
-#!$wd/perl
-EOB
-print "\$^X is $^X, \$0 is $0\n";
-EOF
- ok 21, close(SCRIPT), $!;
- ok 22, chmod(0755, $script), $!;
- $_ = `$script`;
- s/\.exe//i if $Is_Dos or $Is_Cygwin or $Is_os2;
- s{\bminiperl\b}{perl}; # so that test doesn't fail with miniperl
- s{is perl}{is $perl}; # for systems where $^X is only a basename
- s{\\}{/}g;
- ok 23, (($Is_MSWin32 || $Is_os2) ? uc($_) eq uc($s1) : $_ eq $s1), " :$_:!=:$s1:";
- $_ = `$perl $script`;
- s/\.exe//i if $Is_Dos or $Is_os2;
- s{\\}{/}g;
- ok 24, (($Is_MSWin32 || $Is_os2) ? uc($_) eq uc($s1) : $_ eq $s1), " :$_:!=:$s1: after `$perl $script`";
- ok 25, unlink($script), $!;
-}
-
-# $], $^O, $^T
-ok 26, $] >= 5.00319, $];
-ok 27, $^O;
-ok 28, $^T > 850000000, $^T;
-
-if ($Is_VMS || $Is_Dos) {
- ok "29 # skipped", 1;
- ok "30 # skipped", 1;
-}
-else {
- $PATH = $ENV{PATH};
- $PDL = $ENV{PERL_DESTRUCT_LEVEL} || 0;
- $ENV{foo} = "bar";
- %ENV = ();
- $ENV{PATH} = $PATH;
- $ENV{PERL_DESTRUCT_LEVEL} = $PDL || 0;
- ok 29, ($Is_MSWin32 ? (`cmd /x /c set foo 2>NUL` eq "")
- : (`echo \$foo` eq "\n") );
-
- $ENV{__NoNeSuCh} = "foo";
- $0 = "bar";
- ok 30, ($Is_MSWin32 ? (`cmd /x /c set __NoNeSuCh` eq "__NoNeSuCh=foo\n")
- : (`echo \$__NoNeSuCh` eq "foo\n") );
-}
-
-{
- local $SIG{'__WARN__'} = sub { print "# @_\nnot " };
- $! = undef;
- print "ok 31\n";
-}
-
-# test case-insignificance of %ENV (these tests must be enabled only
-# when perl is compiled with -DENV_IS_CASELESS)
-if ($Is_MSWin32) {
- %ENV = ();
- $ENV{'Foo'} = 'bar';
- $ENV{'fOo'} = 'baz';
- ok 32, (scalar(keys(%ENV)) == 1);
- ok 33, exists($ENV{'FOo'});
- ok 34, (delete($ENV{'foO'}) eq 'baz');
- ok 35, (scalar(keys(%ENV)) == 0);
-}
-else {
- ok "32 # skipped: no caseless %ENV support",1;
- ok "33 # skipped: no caseless %ENV support",1;
- ok "34 # skipped: no caseless %ENV support",1;
- ok "35 # skipped: no caseless %ENV support",1;
-}
diff --git a/contrib/perl5/t/op/method.t b/contrib/perl5/t/op/method.t
deleted file mode 100755
index be4df75..0000000
--- a/contrib/perl5/t/op/method.t
+++ /dev/null
@@ -1,187 +0,0 @@
-#!./perl
-
-#
-# test method calls and autoloading.
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..53\n";
-
-@A::ISA = 'B';
-@B::ISA = 'C';
-
-sub C::d {"C::d"}
-sub D::d {"D::d"}
-
-my $cnt = 0;
-sub test {
- print "# got `$_[0]', expected `$_[1]'\nnot " unless $_[0] eq $_[1];
- # print "not " unless shift eq shift;
- print "ok ", ++$cnt, "\n"
-}
-
-# First, some basic checks of method-calling syntax:
-$obj = bless [], "Pack";
-sub Pack::method { shift; join(",", "method", @_) }
-$mname = "method";
-
-test(Pack->method("a","b","c"), "method,a,b,c");
-test(Pack->$mname("a","b","c"), "method,a,b,c");
-test(method Pack ("a","b","c"), "method,a,b,c");
-test((method Pack "a","b","c"), "method,a,b,c");
-
-test(Pack->method(), "method");
-test(Pack->$mname(), "method");
-test(method Pack (), "method");
-test(Pack->method, "method");
-test(Pack->$mname, "method");
-test(method Pack, "method");
-
-test($obj->method("a","b","c"), "method,a,b,c");
-test($obj->$mname("a","b","c"), "method,a,b,c");
-test((method $obj ("a","b","c")), "method,a,b,c");
-test((method $obj "a","b","c"), "method,a,b,c");
-
-test($obj->method(), "method");
-test($obj->$mname(), "method");
-test((method $obj ()), "method");
-test($obj->method, "method");
-test($obj->$mname, "method");
-test(method $obj, "method");
-
-test( A->d, "C::d"); # Update hash table;
-
-*B::d = \&D::d; # Import now.
-test (A->d, "D::d"); # Update hash table;
-
-{
- local @A::ISA = qw(C); # Update hash table with split() assignment
- test (A->d, "C::d");
- $#A::ISA = -1;
- test (eval { A->d } || "fail", "fail");
-}
-test (A->d, "D::d");
-
-{
- local *B::d;
- eval 'sub B::d {"B::d1"}'; # Import now.
- test (A->d, "B::d1"); # Update hash table;
- undef &B::d;
- test ((eval { A->d }, ($@ =~ /Undefined subroutine/)), 1);
-}
-
-test (A->d, "D::d"); # Back to previous state
-
-eval 'sub B::d {"B::d2"}'; # Import now.
-test (A->d, "B::d2"); # Update hash table;
-
-# What follows is hardly guarantied to work, since the names in scripts
-# are already linked to "pruned" globs. Say, `undef &B::d' if it were
-# after `delete $B::{d}; sub B::d {}' would reach an old subroutine.
-
-undef &B::d;
-delete $B::{d};
-test (A->d, "C::d"); # Update hash table;
-
-eval 'sub B::d {"B::d3"}'; # Import now.
-test (A->d, "B::d3"); # Update hash table;
-
-delete $B::{d};
-*dummy::dummy = sub {}; # Mark as updated
-test (A->d, "C::d");
-
-eval 'sub B::d {"B::d4"}'; # Import now.
-test (A->d, "B::d4"); # Update hash table;
-
-delete $B::{d}; # Should work without any help too
-test (A->d, "C::d");
-
-{
- local *C::d;
- test (eval { A->d } || "nope", "nope");
-}
-test (A->d, "C::d");
-
-*A::x = *A::d; # See if cache incorrectly follows synonyms
-A->d;
-test (eval { A->x } || "nope", "nope");
-
-eval <<'EOF';
-sub C::e;
-BEGIN { *B::e = \&C::e } # Shouldn't prevent AUTOLOAD in original pkg
-sub Y::f;
-$counter = 0;
-
-@X::ISA = 'Y';
-@Y::ISA = 'B';
-
-sub B::AUTOLOAD {
- my $c = ++$counter;
- my $method = $B::AUTOLOAD;
- my $msg = "B: In $method, $c";
- eval "sub $method { \$msg }";
- goto &$method;
-}
-sub C::AUTOLOAD {
- my $c = ++$counter;
- my $method = $C::AUTOLOAD;
- my $msg = "C: In $method, $c";
- eval "sub $method { \$msg }";
- goto &$method;
-}
-EOF
-
-test(A->e(), "C: In C::e, 1"); # We get a correct autoload
-test(A->e(), "C: In C::e, 1"); # Which sticks
-
-test(A->ee(), "B: In A::ee, 2"); # We get a generic autoload, method in top
-test(A->ee(), "B: In A::ee, 2"); # Which sticks
-
-test(Y->f(), "B: In Y::f, 3"); # We vivify a correct method
-test(Y->f(), "B: In Y::f, 3"); # Which sticks
-
-# This test is not intended to be reasonable. It is here just to let you
-# know that you broke some old construction. Feel free to rewrite the test
-# if your patch breaks it.
-
-*B::AUTOLOAD = sub {
- my $c = ++$counter;
- my $method = $AUTOLOAD;
- *$AUTOLOAD = sub { "new B: In $method, $c" };
- goto &$AUTOLOAD;
-};
-
-test(A->eee(), "new B: In A::eee, 4"); # We get a correct $autoload
-test(A->eee(), "new B: In A::eee, 4"); # Which sticks
-
-# this test added due to bug discovery
-test(defined(@{"unknown_package::ISA"}) ? "defined" : "undefined", "undefined");
-
-# test that failed subroutine calls don't affect method calls
-{
- package A1;
- sub foo { "foo" }
- package A2;
- @ISA = 'A1';
- package main;
- test(A2->foo(), "foo");
- test(do { eval 'A2::foo()'; $@ ? 1 : 0}, 1);
- test(A2->foo(), "foo");
-}
-
-{
- test(do { use Config; eval 'Config->foo()';
- $@ =~ /^\QCan't locate object method "foo" via package "Config" at/ ? 1 : $@}, 1);
- test(do { use Config; eval '$d = bless {}, "Config"; $d->foo()';
- $@ =~ /^\QCan't locate object method "foo" via package "Config" at/ ? 1 : $@}, 1);
-}
-
-test(do { eval 'E->foo()';
- $@ =~ /^\QCan't locate object method "foo" via package "E" (perhaps / ? 1 : $@}, 1);
-test(do { eval '$e = bless {}, "E"; $e->foo()';
- $@ =~ /^\QCan't locate object method "foo" via package "E" (perhaps / ? 1 : $@}, 1);
-
diff --git a/contrib/perl5/t/op/misc.t b/contrib/perl5/t/op/misc.t
deleted file mode 100755
index 35437a4..0000000
--- a/contrib/perl5/t/op/misc.t
+++ /dev/null
@@ -1,603 +0,0 @@
-#!./perl
-
-# NOTE: Please don't add tests to this file unless they *need* to be run in
-# separate executable and can't simply use eval.
-
-chdir 't' if -d 't';
-@INC = '../lib';
-$ENV{PERL5LIB} = "../lib";
-
-$|=1;
-
-undef $/;
-@prgs = split "\n########\n", <DATA>;
-print "1..", scalar @prgs, "\n";
-
-$tmpfile = "misctmp000";
-1 while -f ++$tmpfile;
-END { while($tmpfile && unlink $tmpfile){} }
-
-$CAT = (($^O eq 'MSWin32') ? '.\perl -e "print <>"' : 'cat');
-
-for (@prgs){
- my $switch;
- if (s/^\s*(-\w.*)//){
- $switch = $1;
- }
- my($prog,$expected) = split(/\nEXPECT\n/, $_);
- open TEST, ">$tmpfile" or die "Cannot open $tmpfile: $!";
- $prog =~ s#/dev/null#NL:# if $^O eq 'VMS';
- $prog =~ s#if \(-e _ and -f _ and -r _\)#if (-e _ and -f _)# if $^O eq 'VMS'; # VMS file locking
-
- print TEST $prog, "\n";
- close TEST or die "Cannot close $tmpfile: $!";
-
- if ($^O eq 'MSWin32') {
- $results = `.\\perl -I../lib $switch $tmpfile 2>&1`;
- }
- else {
- $results = `./perl $switch $tmpfile 2>&1`;
- }
- $status = $?;
- $results =~ s/\n+$//;
- $results =~ s/at\s+misctmp\d+\s+line/at - line/g;
- $results =~ s/of\s+misctmp\d+\s+aborted/of - aborted/g;
-# bison says 'parse error' instead of 'syntax error',
-# various yaccs may or may not capitalize 'syntax'.
- $results =~ s/^(syntax|parse) error/syntax error/mig;
- $expected =~ s/\n+$//;
- if ( $results ne $expected ) {
- print STDERR "PROG: $switch\n$prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
- }
- print "ok ", ++$i, "\n";
-}
-
-__END__
-()=()
-########
-$a = ":="; split /($a)/o, "a:=b:=c"; print "@_"
-EXPECT
-a := b := c
-########
-$cusp = ~0 ^ (~0 >> 1);
-use integer;
-$, = " ";
-print +($cusp - 1) % 8, $cusp % 8, -$cusp % 8, 8 | (($cusp + 1) % 8 + 7), "!\n";
-EXPECT
-7 0 0 8 !
-########
-$foo=undef; $foo->go;
-EXPECT
-Can't call method "go" on an undefined value at - line 1.
-########
-BEGIN
- {
- "foo";
- }
-########
-$array[128]=1
-########
-$x=0x0eabcd; print $x->ref;
-EXPECT
-Can't call method "ref" without a package or object reference at - line 1.
-########
-chop ($str .= <DATA>);
-########
-close ($banana);
-########
-$x=2;$y=3;$x<$y ? $x : $y += 23;print $x;
-EXPECT
-25
-########
-eval {sub bar {print "In bar";}}
-########
-system './perl -ne "print if eof" /dev/null'
-########
-chop($file = <DATA>);
-########
-package N;
-sub new {my ($obj,$n)=@_; bless \$n}
-$aa=new N 1;
-$aa=12345;
-print $aa;
-EXPECT
-12345
-########
-%@x=0;
-EXPECT
-Can't modify hash dereference in repeat (x) at - line 1, near "0;"
-Execution of - aborted due to compilation errors.
-########
-$_="foo";
-printf(STDOUT "%s\n", $_);
-EXPECT
-foo
-########
-push(@a, 1, 2, 3,)
-########
-quotemeta ""
-########
-for ("ABCDE") {
- &sub;
-s/./&sub($&)/eg;
-print;}
-sub sub {local($_) = @_;
-$_ x 4;}
-EXPECT
-Modification of a read-only value attempted at - line 3.
-########
-package FOO;sub new {bless {FOO => BAR}};
-package main;
-use strict vars;
-my $self = new FOO;
-print $$self{FOO};
-EXPECT
-BAR
-########
-$_="foo";
-s/.{1}//s;
-print;
-EXPECT
-oo
-########
-print scalar ("foo","bar")
-EXPECT
-bar
-########
-sub by_number { $a <=> $b; };# inline function for sort below
-$as_ary{0}="a0";
-@ordered_array=sort by_number keys(%as_ary);
-########
-sub NewShell
-{
- local($Host) = @_;
- my($m2) = $#Shells++;
- $Shells[$m2]{HOST} = $Host;
- return $m2;
-}
-
-sub ShowShell
-{
- local($i) = @_;
-}
-
-&ShowShell(&NewShell(beach,Work,"+0+0"));
-&ShowShell(&NewShell(beach,Work,"+0+0"));
-&ShowShell(&NewShell(beach,Work,"+0+0"));
-########
- {
- package FAKEARRAY;
-
- sub TIEARRAY
- { print "TIEARRAY @_\n";
- die "bomb out\n" unless $count ++ ;
- bless ['foo']
- }
- sub FETCH { print "fetch @_\n"; $_[0]->[$_[1]] }
- sub STORE { print "store @_\n"; $_[0]->[$_[1]] = $_[2] }
- sub DESTROY { print "DESTROY \n"; undef @{$_[0]}; }
- }
-
-eval 'tie @h, FAKEARRAY, fred' ;
-tie @h, FAKEARRAY, fred ;
-EXPECT
-TIEARRAY FAKEARRAY fred
-TIEARRAY FAKEARRAY fred
-DESTROY
-########
-BEGIN { die "phooey\n" }
-EXPECT
-phooey
-BEGIN failed--compilation aborted at - line 1.
-########
-BEGIN { 1/$zero }
-EXPECT
-Illegal division by zero at - line 1.
-BEGIN failed--compilation aborted at - line 1.
-########
-BEGIN { undef = 0 }
-EXPECT
-Modification of a read-only value attempted at - line 1.
-BEGIN failed--compilation aborted at - line 1.
-########
-{
- package foo;
- sub PRINT {
- shift;
- print join(' ', reverse @_)."\n";
- }
- sub PRINTF {
- shift;
- my $fmt = shift;
- print sprintf($fmt, @_)."\n";
- }
- sub TIEHANDLE {
- bless {}, shift;
- }
- sub READLINE {
- "Out of inspiration";
- }
- sub DESTROY {
- print "and destroyed as well\n";
- }
- sub READ {
- shift;
- print STDOUT "foo->can(READ)(@_)\n";
- return 100;
- }
- sub GETC {
- shift;
- print STDOUT "Don't GETC, Get Perl\n";
- return "a";
- }
-}
-{
- local(*FOO);
- tie(*FOO,'foo');
- print FOO "sentence.", "reversed", "a", "is", "This";
- print "-- ", <FOO>, " --\n";
- my($buf,$len,$offset);
- $buf = "string";
- $len = 10; $offset = 1;
- read(FOO, $buf, $len, $offset) == 100 or die "foo->READ failed";
- getc(FOO) eq "a" or die "foo->GETC failed";
- printf "%s is number %d\n", "Perl", 1;
-}
-EXPECT
-This is a reversed sentence.
--- Out of inspiration --
-foo->can(READ)(string 10 1)
-Don't GETC, Get Perl
-Perl is number 1
-and destroyed as well
-########
-my @a; $a[2] = 1; for (@a) { $_ = 2 } print "@a\n"
-EXPECT
-2 2 2
-########
-@a = ($a, $b, $c, $d) = (5, 6);
-print "ok\n"
- if ($a[0] == 5 and $a[1] == 6 and !defined $a[2] and !defined $a[3]);
-EXPECT
-ok
-########
-print "ok\n" if (1E2<<1 == 200 and 3E4<<3 == 240000);
-EXPECT
-ok
-########
-print "ok\n" if ("\0" lt "\xFF");
-EXPECT
-ok
-########
-open(H,'op/misc.t'); # must be in the 't' directory
-stat(H);
-print "ok\n" if (-e _ and -f _ and -r _);
-EXPECT
-ok
-########
-sub thing { 0 || return qw(now is the time) }
-print thing(), "\n";
-EXPECT
-nowisthetime
-########
-$ren = 'joy';
-$stimpy = 'happy';
-{ local $main::{ren} = *stimpy; print $ren, ' ' }
-print $ren, "\n";
-EXPECT
-happy joy
-########
-$stimpy = 'happy';
-{ local $main::{ren} = *stimpy; print ${'ren'}, ' ' }
-print +(defined(${'ren'}) ? 'oops' : 'joy'), "\n";
-EXPECT
-happy joy
-########
-package p;
-sub func { print 'really ' unless wantarray; 'p' }
-sub groovy { 'groovy' }
-package main;
-print p::func()->groovy(), "\n"
-EXPECT
-really groovy
-########
-@list = ([ 'one', 1 ], [ 'two', 2 ]);
-sub func { $num = shift; (grep $_->[1] == $num, @list)[0] }
-print scalar(map &func($_), 1 .. 3), " ",
- scalar(map scalar &func($_), 1 .. 3), "\n";
-EXPECT
-2 3
-########
-($k, $s) = qw(x 0);
-@{$h{$k}} = qw(1 2 4);
-for (@{$h{$k}}) { $s += $_; delete $h{$k} if ($_ == 2) }
-print "bogus\n" unless $s == 7;
-########
-my $a = 'outer';
-eval q[ my $a = 'inner'; eval q[ print "$a " ] ];
-eval { my $x = 'peace'; eval q[ print "$x\n" ] }
-EXPECT
-inner peace
-########
--w
-$| = 1;
-sub foo {
- print "In foo1\n";
- eval 'sub foo { print "In foo2\n" }';
- print "Exiting foo1\n";
-}
-foo;
-foo;
-EXPECT
-In foo1
-Subroutine foo redefined at (eval 1) line 1.
-Exiting foo1
-In foo2
-########
-$s = 0;
-map {#this newline here tickles the bug
-$s += $_} (1,2,4);
-print "eat flaming death\n" unless ($s == 7);
-########
-sub foo { local $_ = shift; split; @_ }
-@x = foo(' x y z ');
-print "you die joe!\n" unless "@x" eq 'x y z';
-########
-/(?{"{"})/ # Check it outside of eval too
-EXPECT
-Sequence (?{...}) not terminated or not {}-balanced at - line 1, within pattern
-Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/(?{ << HERE "{"})/ at - line 1.
-########
-/(?{"{"}})/ # Check it outside of eval too
-EXPECT
-Unmatched right curly bracket at (re_eval 1) line 1, at end of line
-syntax error at (re_eval 1) line 1, near ""{"}"
-Compilation failed in regexp at - line 1.
-########
-BEGIN { @ARGV = qw(a b c d e) }
-BEGIN { print "argv <@ARGV>\nbegin <",shift,">\n" }
-END { print "end <",shift,">\nargv <@ARGV>\n" }
-INIT { print "init <",shift,">\n" }
-CHECK { print "check <",shift,">\n" }
-EXPECT
-argv <a b c d e>
-begin <a>
-check <b>
-init <c>
-end <d>
-argv <e>
-########
--l
-# fdopen from a system descriptor to a system descriptor used to close
-# the former.
-open STDERR, '>&=STDOUT' or die $!;
-select STDOUT; $| = 1; print fileno STDOUT or die $!;
-select STDERR; $| = 1; print fileno STDERR or die $!;
-EXPECT
-1
-2
-########
--w
-sub testme { my $a = "test"; { local $a = "new test"; print $a }}
-EXPECT
-Can't localize lexical variable $a at - line 2.
-########
-package X;
-sub ascalar { my $r; bless \$r }
-sub DESTROY { print "destroyed\n" };
-package main;
-*s = ascalar X;
-EXPECT
-destroyed
-########
-package X;
-sub anarray { bless [] }
-sub DESTROY { print "destroyed\n" };
-package main;
-*a = anarray X;
-EXPECT
-destroyed
-########
-package X;
-sub ahash { bless {} }
-sub DESTROY { print "destroyed\n" };
-package main;
-*h = ahash X;
-EXPECT
-destroyed
-########
-package X;
-sub aclosure { my $x; bless sub { ++$x } }
-sub DESTROY { print "destroyed\n" };
-package main;
-*c = aclosure X;
-EXPECT
-destroyed
-########
-package X;
-sub any { bless {} }
-my $f = "FH000"; # just to thwart any future optimisations
-sub afh { select select ++$f; my $r = *{$f}{IO}; delete $X::{$f}; bless $r }
-sub DESTROY { print "destroyed\n" }
-package main;
-$x = any X; # to bump sv_objcount. IO objs aren't counted??
-*f = afh X;
-EXPECT
-destroyed
-destroyed
-########
-BEGIN {
- $| = 1;
- $SIG{__WARN__} = sub {
- eval { print $_[0] };
- die "bar\n";
- };
- warn "foo\n";
-}
-EXPECT
-foo
-bar
-BEGIN failed--compilation aborted at - line 8.
-########
-package X;
-@ISA='Y';
-sub new {
- my $class = shift;
- my $self = { };
- bless $self, $class;
- my $init = shift;
- $self->foo($init);
- print "new", $init;
- return $self;
-}
-sub DESTROY {
- my $self = shift;
- print "DESTROY", $self->foo;
-}
-package Y;
-sub attribute {
- my $self = shift;
- my $var = shift;
- if (@_ == 0) {
- return $self->{$var};
- } elsif (@_ == 1) {
- $self->{$var} = shift;
- }
-}
-sub AUTOLOAD {
- $AUTOLOAD =~ /::([^:]+)$/;
- my $method = $1;
- splice @_, 1, 0, $method;
- goto &attribute;
-}
-package main;
-my $x = X->new(1);
-for (2..3) {
- my $y = X->new($_);
- print $y->foo;
-}
-print $x->foo;
-EXPECT
-new1new22DESTROY2new33DESTROY31DESTROY1
-########
-re();
-sub re {
- my $re = join '', eval 'qr/(??{ $obj->method })/';
- $re;
-}
-EXPECT
-########
-use strict;
-my $foo = "ZZZ\n";
-END { print $foo }
-EXPECT
-ZZZ
-########
-eval '
-use strict;
-my $foo = "ZZZ\n";
-END { print $foo }
-';
-EXPECT
-ZZZ
-########
--w
-if (@ARGV) { print "" }
-else {
- if ($x == 0) { print "" } else { print $x }
-}
-EXPECT
-Use of uninitialized value in numeric eq (==) at - line 4.
-########
-$x = sub {};
-foo();
-sub foo { eval { return }; }
-print "ok\n";
-EXPECT
-ok
-########
-my @l = qw(hello.* world);
-my $x;
-
-foreach $x (@l) {
- print "before - $x\n";
- $x = "\Q$x\E";
- print "quotemeta - $x\n";
- $x = "\u$x";
- print "ucfirst - $x\n";
- $x = "\l$x";
- print "lcfirst - $x\n";
- $x = "\U$x\E";
- print "uc - $x\n";
- $x = "\L$x\E";
- print "lc - $x\n";
-}
-EXPECT
-before - hello.*
-quotemeta - hello\.\*
-ucfirst - Hello\.\*
-lcfirst - hello\.\*
-uc - HELLO\.\*
-lc - hello\.\*
-before - world
-quotemeta - world
-ucfirst - World
-lcfirst - world
-uc - WORLD
-lc - world
-########
-sub f { my $a = 1; my $b = 2; my $c = 3; my $d = 4; next }
-my $x = "foo";
-{ f } continue { print $x, "\n" }
-EXPECT
-foo
-########
-sub C () { 1 }
-sub M { $_[0] = 2; }
-eval "C";
-M(C);
-EXPECT
-Modification of a read-only value attempted at - line 2.
-########
-print qw(ab a\b a\\b);
-EXPECT
-aba\ba\b
-########
-# This test is here instead of pragma/locale.t because
-# the bug depends on in the internal state of the locale
-# settings and pragma/locale messes up that state pretty badly.
-# We need a "fresh run".
-BEGIN {
- eval { require POSIX };
- if ($@) {
- exit(0); # running minitest?
- }
-}
-use Config;
-my $have_setlocale = $Config{d_setlocale} eq 'define';
-$have_setlocale = 0 if $@;
-# Visual C's CRT goes silly on strings of the form "en_US.ISO8859-1"
-# and mingw32 uses said silly CRT
-$have_setlocale = 0 if $^O eq 'MSWin32' && $Config{cc} =~ /^(cl|gcc)/i;
-exit(0) unless $have_setlocale;
-my @locales;
-if (-x "/usr/bin/locale" && open(LOCALES, "/usr/bin/locale -a|")) {
- while(<LOCALES>) {
- chomp;
- push(@locales, $_);
- }
- close(LOCALES);
-}
-exit(0) unless @locales;
-for (@locales) {
- use POSIX qw(locale_h);
- use locale;
- setlocale(LC_NUMERIC, $_) or next;
- my $s = sprintf "%g %g", 3.1, 3.1;
- next if $s eq '3.1 3.1' || $s =~ /^(3.+1) \1$/;
- print "$_ $s\n";
-}
-EXPECT
diff --git a/contrib/perl5/t/op/mkdir.t b/contrib/perl5/t/op/mkdir.t
deleted file mode 100755
index c5a090c..0000000
--- a/contrib/perl5/t/op/mkdir.t
+++ /dev/null
@@ -1,25 +0,0 @@
-#!./perl
-
-print "1..9\n";
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use File::Path;
-rmtree('blurfl');
-
-# tests 3 and 7 rather naughtily expect English error messages
-$ENV{'LC_ALL'} = 'C';
-$ENV{LANGUAGE} = 'C'; # GNU locale extension
-
-print (mkdir('blurfl',0777) ? "ok 1\n" : "not ok 1\n");
-print (mkdir('blurfl',0777) ? "not ok 2\n" : "ok 2\n");
-print ($! =~ /cannot move|exist|denied/ ? "ok 3\n" : "# $!\nnot ok 3\n");
-print (-d 'blurfl' ? "ok 4\n" : "not ok 4\n");
-print (rmdir('blurfl') ? "ok 5\n" : "not ok 5\n");
-print (rmdir('blurfl') ? "not ok 6\n" : "ok 6\n");
-print ($! =~ /cannot find|such|exist|not found/i ? "ok 7\n" : "# $!\nnot ok 7\n");
-print (mkdir('blurfl') ? "ok 8\n" : "not ok 8\n");
-print (rmdir('blurfl') ? "ok 9\n" : "not ok 9\n");
diff --git a/contrib/perl5/t/op/my.t b/contrib/perl5/t/op/my.t
deleted file mode 100755
index 601e1d6..0000000
--- a/contrib/perl5/t/op/my.t
+++ /dev/null
@@ -1,101 +0,0 @@
-#!./perl
-
-# $RCSfile: my.t,v $
-
-print "1..31\n";
-
-sub foo {
- my($a, $b) = @_;
- my $c;
- my $d;
- $c = "ok 3\n";
- $d = "ok 4\n";
- { my($a, undef, $c) = ("ok 9\n", "not ok 10\n", "ok 10\n");
- ($x, $y) = ($a, $c); }
- print $a, $b;
- $c . $d;
-}
-
-$a = "ok 5\n";
-$b = "ok 6\n";
-$c = "ok 7\n";
-$d = "ok 8\n";
-
-print &foo("ok 1\n","ok 2\n");
-
-print $a,$b,$c,$d,$x,$y;
-
-# same thing, only with arrays and associative arrays
-
-sub foo2 {
- my($a, @b) = @_;
- my(@c, %d);
- @c = "ok 13\n";
- $d{''} = "ok 14\n";
- { my($a,@c) = ("ok 19\n", "ok 20\n"); ($x, $y) = ($a, @c); }
- print $a, @b;
- $c[0] . $d{''};
-}
-
-$a = "ok 15\n";
-@b = "ok 16\n";
-@c = "ok 17\n";
-$d{''} = "ok 18\n";
-
-print &foo2("ok 11\n","ok 12\n");
-
-print $a,@b,@c,%d,$x,$y;
-
-my $i = "outer";
-
-if (my $i = "inner") {
- print "not " if $i ne "inner";
-}
-print "ok 21\n";
-
-if ((my $i = 1) == 0) {
- print "not ";
-}
-else {
- print "not" if $i != 1;
-}
-print "ok 22\n";
-
-my $j = 5;
-while (my $i = --$j) {
- print("not "), last unless $i > 0;
-}
-continue {
- print("not "), last unless $i > 0;
-}
-print "ok 23\n";
-
-$j = 5;
-for (my $i = 0; (my $k = $i) < $j; ++$i) {
- print("not "), last unless $i >= 0 && $i < $j && $i == $k;
-}
-print "ok 24\n";
-print "not " if defined $k;
-print "ok 25\n";
-
-foreach my $i (26, 27) {
- print "ok $i\n";
-}
-
-print "not " if $i ne "outer";
-print "ok 28\n";
-
-# Ensure that C<my @y> (without parens) doesn't force scalar context.
-my @x;
-{ @x = my @y }
-print +(@x ? "not " : ""), "ok 29\n";
-{ @x = my %y }
-print +(@x ? "not " : ""), "ok 30\n";
-
-# Found in HTML::FormatPS
-my %fonts = qw(nok 31);
-for my $full (keys %fonts) {
- $full =~ s/^n//;
- # Supposed to be copy-on-write via force_normal after a THINKFIRST check.
- print "$full $fonts{nok}\n";
-}
diff --git a/contrib/perl5/t/op/my_stash.t b/contrib/perl5/t/op/my_stash.t
deleted file mode 100755
index 4a1d502..0000000
--- a/contrib/perl5/t/op/my_stash.t
+++ /dev/null
@@ -1,31 +0,0 @@
-#!./perl
-
-package Foo;
-
-BEGIN {
- @INC = '../lib';
-}
-
-use Test;
-
-plan tests => 7;
-
-use constant MyClass => 'Foo::Bar::Biz::Baz';
-
-{
- package Foo::Bar::Biz::Baz;
-}
-
-for (qw(Foo Foo:: MyClass __PACKAGE__)) {
- eval "sub { my $_ \$obj = shift; }";
- ok ! $@;
-# print $@ if $@;
-}
-
-use constant NoClass => 'Nope::Foo::Bar::Biz::Baz';
-
-for (qw(Nope Nope:: NoClass)) {
- eval "sub { my $_ \$obj = shift; }";
- ok $@;
-# print $@ if $@;
-}
diff --git a/contrib/perl5/t/op/nothr5005.t b/contrib/perl5/t/op/nothr5005.t
deleted file mode 100755
index 411a0b4..0000000
--- a/contrib/perl5/t/op/nothr5005.t
+++ /dev/null
@@ -1,35 +0,0 @@
-#!./perl
-
-# NOTE: Please don't add tests to this file unless they *need* to be run in
-# separate executable and can't simply use eval.
-
-BEGIN
- {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config;
- import Config;
- if ($Config{'use5005threads'})
- {
- print "1..0 # Skip: this perl is threaded\n";
- exit 0;
- }
- }
-
-
-$|=1;
-
-print "1..9\n";
-$t = 1;
-sub foo { local(@_) = ('p', 'q', 'r'); }
-sub bar { unshift @_, 'D'; @_ }
-sub baz { push @_, 'E'; return @_ }
-for (1..3)
- {
- print "not " unless join('',foo('a', 'b', 'c')) eq 'pqr';
- print "ok ",$t++,"\n";
- print "not" unless join('',bar('d')) eq 'Dd';
- print "ok ",$t++,"\n";
- print "not" unless join('',baz('e')) eq 'eE';
- print "ok ",$t++,"\n";
- }
diff --git a/contrib/perl5/t/op/numconvert.t b/contrib/perl5/t/op/numconvert.t
deleted file mode 100755
index f3c9867..0000000
--- a/contrib/perl5/t/op/numconvert.t
+++ /dev/null
@@ -1,192 +0,0 @@
-#!./perl
-
-#
-# test the conversion operators
-#
-# Notations:
-#
-# "N p i N vs N N": Apply op-N, then op-p, then op-i, then reporter-N
-# Compare with application of op-N, then reporter-N
-# Right below are descriptions of different ops and reporters.
-
-# We do not use these subroutines any more, sub overhead makes a "switch"
-# solution better:
-
-# obviously, 0, 1 and 2, 3 are destructive. (XXXX 64-bit? 4 destructive too)
-
-# *0 = sub {--$_[0]}; # -
-# *1 = sub {++$_[0]}; # +
-
-# # Converters
-# *2 = sub { $_[0] = $max_uv & $_[0]}; # U
-# *3 = sub { use integer; $_[0] += $zero}; # I
-# *4 = sub { $_[0] += $zero}; # N
-# *5 = sub { $_[0] = "$_[0]" }; # P
-
-# # Side effects
-# *6 = sub { $max_uv & $_[0]}; # u
-# *7 = sub { use integer; $_[0] + $zero}; # i
-# *8 = sub { $_[0] + $zero}; # n
-# *9 = sub { $_[0] . "" }; # p
-
-# # Reporters
-# sub a2 { sprintf "%u", $_[0] } # U
-# sub a3 { sprintf "%d", $_[0] } # I
-# sub a4 { sprintf "%g", $_[0] } # N
-# sub a5 { "$_[0]" } # P
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict 'vars';
-
-my $max_chain = $ENV{PERL_TEST_NUMCONVERTS} || 2;
-
-# Bulk out if unsigned type is hopelessly wrong:
-my $max_uv1 = ~0;
-my $max_uv2 = sprintf "%u", $max_uv1 ** 6; # 6 is an arbitrary number here
-my $big_iv = do {use integer; $max_uv1 * 16}; # 16 is an arbitrary number here
-
-print "# max_uv1 = $max_uv1, max_uv2 = $max_uv2, big_iv = $big_iv\n";
-if ($max_uv1 ne $max_uv2 or $big_iv > $max_uv1) {
- print "1..0 # skipped: unsigned perl arithmetic is not sane";
- eval { require Config; import Config };
- use vars qw(%Config);
- if ($Config{d_quad} eq 'define') {
- print " (common in 64-bit platforms)";
- }
- print "\n";
- exit 0;
-}
-
-my $st_t = 4*4; # We try 4 initializers and 4 reporters
-
-my $num = 0;
-$num += 10**$_ - 4**$_ for 1.. $max_chain;
-$num *= $st_t;
-print "1..$num\n"; # In fact 15 times more subsubtests...
-
-my $max_uv = ~0;
-my $max_iv = int($max_uv/2);
-my $zero = 0;
-
-my $l_uv = length $max_uv;
-my $l_iv = length $max_iv;
-
-# Hope: the first digits are good
-my $larger_than_uv = substr 97 x 100, 0, $l_uv;
-my $smaller_than_iv = substr 12 x 100, 0, $l_iv;
-my $yet_smaller_than_iv = substr 97 x 100, 0, ($l_iv - 1);
-
-my @list = (1, $yet_smaller_than_iv, $smaller_than_iv, $max_iv, $max_iv + 1,
- $max_uv, $max_uv + 1);
-unshift @list, (reverse map -$_, @list), 0; # 15 elts
-@list = map "$_", @list; # Normalize
-
-# print "@list\n";
-
-
-my @opnames = split //, "-+UINPuinp";
-
-# @list = map { 2->($_), 3->($_), 4->($_), 5->($_), } @list; # Prepare input
-
-#print "@list\n";
-#print "'@ops'\n";
-
-my $test = 1;
-my $nok;
-for my $num_chain (1..$max_chain) {
- my @ops = map [split //], grep /[4-9]/,
- map { sprintf "%0${num_chain}d", $_ } 0 .. 10**$num_chain - 1;
-
- #@ops = ([]) unless $num_chain;
- #@ops = ([6, 4]);
-
- # print "'@ops'\n";
- for my $op (@ops) {
- for my $first (2..5) {
- for my $last (2..5) {
- $nok = 0;
- my @otherops = grep $_ <= 3, @$op;
- my @curops = ($op,\@otherops);
-
- for my $num (@list) {
- my $inpt;
- my @ans;
-
- for my $short (0, 1) {
- # undef $inpt; # Forget all we had - some bugs were masked
-
- $inpt = $num; # Try to not contaminate $num...
- $inpt = "$inpt";
- if ($first == 2) {
- $inpt = $max_uv & $inpt; # U 2
- } elsif ($first == 3) {
- use integer; $inpt += $zero; # I 3
- } elsif ($first == 4) {
- $inpt += $zero; # N 4
- } else {
- $inpt = "$inpt"; # P 5
- }
-
- # Saves 20% of time - not with this logic:
- #my $tmp = $inpt;
- #my $tmp1 = $num;
- #next if $num_chain > 1
- # and "$tmp" ne "$tmp1"; # Already the coercion gives problems...
-
- for my $curop (@{$curops[$short]}) {
- if ($curop < 5) {
- if ($curop < 3) {
- if ($curop == 0) {
- --$inpt; # - 0
- } elsif ($curop == 1) {
- ++$inpt; # + 1
- } else {
- $inpt = $max_uv & $inpt; # U 2
- }
- } elsif ($curop == 3) {
- use integer; $inpt += $zero;
- } else {
- $inpt += $zero; # N 4
- }
- } elsif ($curop < 8) {
- if ($curop == 5) {
- $inpt = "$inpt"; # P 5
- } elsif ($curop == 6) {
- $max_uv & $inpt; # u 6
- } else {
- use integer; $inpt + $zero;
- }
- } elsif ($curop == 8) {
- $inpt + $zero; # n 8
- } else {
- $inpt . ""; # p 9
- }
- }
-
- if ($last == 2) {
- $inpt = sprintf "%u", $inpt; # U 2
- } elsif ($last == 3) {
- $inpt = sprintf "%d", $inpt; # I 3
- } elsif ($last == 4) {
- $inpt = sprintf "%g", $inpt; # N 4
- } else {
- $inpt = "$inpt"; # P 5
- }
- push @ans, $inpt;
- }
- $nok++,
- print "# '$ans[0]' ne '$ans[1]',\t$num\t=> @opnames[$first,@{$curops[0]},$last] vs @opnames[$first,@{$curops[1]},$last]\n"
- if $ans[0] ne $ans[1];
- }
- print "not " if $nok;
- print "ok $test\n";
- #print $txt if $nok;
- $test++;
- }
- }
- }
-}
diff --git a/contrib/perl5/t/op/oct.t b/contrib/perl5/t/op/oct.t
deleted file mode 100755
index fe155d3..0000000
--- a/contrib/perl5/t/op/oct.t
+++ /dev/null
@@ -1,88 +0,0 @@
-#!./perl
-
-print "1..50\n";
-
-print +(oct('0b1_0101') == 0b101_01) ? "ok" : "not ok", " 1\n";
-print +(oct('0b10_101') == 0_2_5) ? "ok" : "not ok", " 2\n";
-print +(oct('0b101_01') == 2_1) ? "ok" : "not ok", " 3\n";
-print +(oct('0b1010_1') == 0x1_5) ? "ok" : "not ok", " 4\n";
-
-print +(oct('b1_0101') == 0b10101) ? "ok" : "not ok", " 5\n";
-print +(oct('b10_101') == 025) ? "ok" : "not ok", " 6\n";
-print +(oct('b101_01') == 21) ? "ok" : "not ok", " 7\n";
-print +(oct('b1010_1') == 0x15) ? "ok" : "not ok", " 8\n";
-
-print +(oct('01_234') == 0b10_1001_1100) ? "ok" : "not ok", " 9\n";
-print +(oct('012_34') == 01234) ? "ok" : "not ok", " 10\n";
-print +(oct('0123_4') == 668) ? "ok" : "not ok", " 11\n";
-print +(oct('01234') == 0x29c) ? "ok" : "not ok", " 12\n";
-
-print +(oct('0x1_234') == 0b10010_00110100) ? "ok" : "not ok", " 13\n";
-print +(oct('0x12_34') == 01_1064) ? "ok" : "not ok", " 14\n";
-print +(oct('0x123_4') == 4660) ? "ok" : "not ok", " 15\n";
-print +(oct('0x1234') == 0x12_34) ? "ok" : "not ok", " 16\n";
-
-print +(oct('x1_234') == 0b100100011010_0) ? "ok" : "not ok", " 17\n";
-print +(oct('x12_34') == 0_11064) ? "ok" : "not ok", " 18\n";
-print +(oct('x123_4') == 4660) ? "ok" : "not ok", " 19\n";
-print +(oct('x1234') == 0x_1234) ? "ok" : "not ok", " 20\n";
-
-print +(hex('01_234') == 0b_1001000110100) ? "ok" : "not ok", " 21\n";
-print +(hex('012_34') == 011064) ? "ok" : "not ok", " 22\n";
-print +(hex('0123_4') == 4660) ? "ok" : "not ok", " 23\n";
-print +(hex('01234_') == 0x1234) ? "ok" : "not ok", " 24\n";
-
-print +(hex('0x_1234') == 0b1001000110100) ? "ok" : "not ok", " 25\n";
-print +(hex('0x1_234') == 011064) ? "ok" : "not ok", " 26\n";
-print +(hex('0x12_34') == 4660) ? "ok" : "not ok", " 27\n";
-print +(hex('0x1234_') == 0x1234) ? "ok" : "not ok", " 28\n";
-
-print +(hex('x_1234') == 0b1001000110100) ? "ok" : "not ok", " 29\n";
-print +(hex('x12_34') == 011064) ? "ok" : "not ok", " 30\n";
-print +(hex('x123_4') == 4660) ? "ok" : "not ok", " 31\n";
-print +(hex('x1234_') == 0x1234) ? "ok" : "not ok", " 32\n";
-
-print +(oct('0b1111_1111_1111_1111_1111_1111_1111_1111') == 4294967295) ?
- "ok" : "not ok", " 33\n";
-print +(oct('037_777_777_777') == 4294967295) ?
- "ok" : "not ok", " 34\n";
-print +(oct('0xffff_ffff') == 4294967295) ?
- "ok" : "not ok", " 35\n";
-
-print +(hex('0xff_ff_ff_ff') == 4294967295) ?
- "ok" : "not ok", " 36\n";
-
-$_ = "\0_7_7";
-print length eq 5 ? "ok" : "not ok", " 37\n";
-print $_ eq "\0"."_"."7"."_"."7" ? "ok" : "not ok", " 38\n";
-chop, chop, chop, chop;
-print $_ eq "\0" ? "ok" : "not ok", " 39\n";
-if (ord("\t") != 9) {
- # question mark is 111 in 1047, 037, && POSIX-BC
- print "\157_" eq "?_" ? "ok" : "not ok", " 40\n";
-}
-else {
- print "\077_" eq "?_" ? "ok" : "not ok", " 40\n";
-}
-
-$_ = "\x_7_7";
-print length eq 5 ? "ok" : "not ok", " 41\n";
-print $_ eq "\0"."_"."7"."_"."7" ? "ok" : "not ok", " 42\n";
-chop, chop, chop, chop;
-print $_ eq "\0" ? "ok" : "not ok", " 43\n";
-if (ord("\t") != 9) {
- # / is 97 in 1047, 037, && POSIX-BC
- print "\x61_" eq "/_" ? "ok" : "not ok", " 44\n";
-}
-else {
- print "\x2F_" eq "/_" ? "ok" : "not ok", " 44\n";
-}
-
-print +(oct('0b'.( '0'x10).'1_0101') == 0b101_01) ? "ok" : "not ok", " 45\n";
-print +(oct('0b'.( '0'x100).'1_0101') == 0b101_01) ? "ok" : "not ok", " 46\n";
-print +(oct('0b'.('0'x1000).'1_0101') == 0b101_01) ? "ok" : "not ok", " 47\n";
-
-print +(hex(( '0'x10).'01234') == 0x1234) ? "ok" : "not ok", " 48\n";
-print +(hex(( '0'x100).'01234') == 0x1234) ? "ok" : "not ok", " 49\n";
-print +(hex(('0'x1000).'01234') == 0x1234) ? "ok" : "not ok", " 50\n";
-
diff --git a/contrib/perl5/t/op/ord.t b/contrib/perl5/t/op/ord.t
deleted file mode 100755
index 22ff3af..0000000
--- a/contrib/perl5/t/op/ord.t
+++ /dev/null
@@ -1,23 +0,0 @@
-#!./perl
-
-print "1..5\n";
-
-# compile time evaluation
-
-# 65 ASCII
-# 193 EBCDIC
-if (ord('A') == 65 || ord('A') == 193) {print "ok 1\n";} else {print "not ok 1\n";}
-
-print "not " unless ord(chr(500)) == 500;
-print "ok 2\n";
-
-# run time evaluation
-
-$x = 'ABC';
-if (ord($x) == 65 || ord($x) == 193) {print "ok 3\n";} else {print "not ok 3\n";}
-
-if (chr 65 eq 'A' || chr 193 eq 'A') {print "ok 4\n";} else {print "not ok 4\n";}
-
-$x = 500;
-print "not " unless ord(chr($x)) == $x;
-print "ok 5\n";
diff --git a/contrib/perl5/t/op/pack.t b/contrib/perl5/t/op/pack.t
deleted file mode 100755
index 67bd547..0000000
--- a/contrib/perl5/t/op/pack.t
+++ /dev/null
@@ -1,418 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
-}
-
-print "1..159\n";
-
-$format = "c2 x5 C C x s d i l a6";
-# Need the expression in here to force ary[5] to be numeric. This avoids
-# test2 failing because ary2 goes str->numeric->str and ary doesn't.
-@ary = (1,-100,127,128,32767,987.654321098 / 100.0,12345,123456,"abcdef");
-$foo = pack($format,@ary);
-@ary2 = unpack($format,$foo);
-
-print ($#ary == $#ary2 ? "ok 1\n" : "not ok 1\n");
-
-$out1=join(':',@ary);
-$out2=join(':',@ary2);
-# Using long double NVs may introduce greater accuracy than wanted.
-$out1 =~ s/:9\.87654321097999\d*:/:9.87654321098:/;
-$out2 =~ s/:9\.87654321097999\d*:/:9.87654321098:/;
-print ($out1 eq $out2? "ok 2\n" : "not ok 2\n");
-
-print ($foo =~ /def/ ? "ok 3\n" : "not ok 3\n");
-
-# How about counting bits?
-
-print +($x = unpack("%32B*", "\001\002\004\010\020\040\100\200\377")) == 16
- ? "ok 4\n" : "not ok 4 $x\n";
-
-print +($x = unpack("%32b69", "\001\002\004\010\020\040\100\200\017")) == 12
- ? "ok 5\n" : "not ok 5 $x\n";
-
-print +($x = unpack("%32B69", "\001\002\004\010\020\040\100\200\017")) == 9
- ? "ok 6\n" : "not ok 6 $x\n";
-
-my $sum = 129; # ASCII
-$sum = 103 if ($Config{ebcdic} eq 'define');
-
-print +($x = unpack("%32B*", "Now is the time for all good blurfl")) == $sum
- ? "ok 7\n" : "not ok 7 $x\n";
-
-open(BIN, "./perl") || open(BIN, "./perl.exe")
- || die "Can't open ../perl or ../perl.exe: $!\n";
-sysread BIN, $foo, 8192;
-close BIN;
-
-$sum = unpack("%32b*", $foo);
-$longway = unpack("b*", $foo);
-print $sum == $longway =~ tr/1/1/ ? "ok 8\n" : "not ok 8\n";
-
-print +($x = unpack("I",pack("I", 0xFFFFFFFF))) == 0xFFFFFFFF
- ? "ok 9\n" : "not ok 9 $x\n";
-
-# check 'w'
-my $test=10;
-my @x = (5,130,256,560,32000,3097152,268435455,1073741844,
- '4503599627365785','23728385234614992549757750638446');
-my $x = pack('w*', @x);
-my $y = pack 'H*', '0581028200843081fa0081bd8440ffffff7f848080801487ffffffffffdb19caefe8e1eeeea0c2e1e3e8ede1ee6e';
-
-print $x eq $y ? "ok $test\n" : "not ok $test\n"; $test++;
-
-@y = unpack('w*', $y);
-my $a;
-while ($a = pop @x) {
- my $b = pop @y;
- print $a eq $b ? "ok $test\n" : "not ok $test\n$a\n$b\n"; $test++;
-}
-
-@y = unpack('w2', $x);
-
-print scalar(@y) == 2 ? "ok $test\n" : "not ok $test\n"; $test++;
-print $y[1] == 130 ? "ok $test\n" : "not ok $test\n"; $test++;
-
-# test exeptions
-eval { $x = unpack 'w', pack 'C*', 0xff, 0xff};
-print $@ ne '' ? "ok $test\n" : "not ok $test\n"; $test++;
-
-eval { $x = unpack 'w', pack 'C*', 0xff, 0xff, 0xff, 0xff};
-print $@ ne '' ? "ok $test\n" : "not ok $test\n"; $test++;
-
-eval { $x = unpack 'w', pack 'C*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-print $@ ne '' ? "ok $test\n" : "not ok $test\n"; $test++;
-
-#
-# test the "p" template
-
-# literals
-print((unpack("p",pack("p","foo")) eq "foo" ? "ok " : "not ok "),$test++,"\n");
-
-# scalars
-print((unpack("p",pack("p",$test)) == $test ? "ok " : "not ok "),$test++,"\n");
-
-# temps
-sub foo { my $a = "a"; return $a . $a++ . $a++ }
-{
- use warnings;
- my $last = $test;
- local $SIG{__WARN__} = sub {
- print "ok ",$test++,"\n" if $_[0] =~ /temporary val/
- };
- my $junk = pack("p", &foo);
- print "not ok ", $test++, "\n" if $last == $test;
-}
-
-# undef should give null pointer
-print((pack("p", undef) =~ /^\0+/ ? "ok " : "not ok "),$test++,"\n");
-
-# Check for optimizer bug (e.g. Digital Unix GEM cc with -O4 on DU V4.0B gives
-# 4294967295 instead of -1)
-# see #ifdef __osf__ in pp.c pp_unpack
-# Test 30:
-print( ((unpack("i",pack("i",-1))) == -1 ? "ok " : "not ok "),$test++,"\n");
-
-# 31..36: test the pack lengths of s S i I l L
-print "not " unless length(pack("s", 0)) == 2;
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("S", 0)) == 2;
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("i", 0)) >= 4;
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("I", 0)) >= 4;
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("l", 0)) == 4;
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("L", 0)) == 4;
-print "ok ", $test++, "\n";
-
-# 37..40: test the pack lengths of n N v V
-
-print "not " unless length(pack("n", 0)) == 2;
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("N", 0)) == 4;
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("v", 0)) == 2;
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("V", 0)) == 4;
-print "ok ", $test++, "\n";
-
-# 41..56: test unpack-pack lengths
-
-my @templates = qw(c C i I s S l L n N v V f d);
-
-# quads not supported everywhere: if not, retest floats/doubles
-# to preserve the test count...
-eval { my $q = pack("q",0) };
-push @templates, $@ !~ /Invalid type in pack/ ? qw(q Q) : qw(f d);
-
-foreach my $t (@templates) {
- my @t = unpack("$t*", pack("$t*", 12, 34));
- print "not "
- unless @t == 2 and (($t[0] == 12 and $t[1] == 34) or ($t =~ /[nv]/i));
- print "ok ", $test++, "\n";
-}
-
-# 57..60: uuencode/decode
-
-# Note that first uuencoding known 'text' data and then checking the
-# binary values of the uuencoded version would not be portable between
-# character sets. Uuencoding is meant for encoding binary data, not
-# text data.
-
-$in = pack 'C*', 0 .. 255;
-
-# just to be anal, we do some random tr/`/ /
-$uu = <<'EOUU';
-M` $"`P0%!@<("0H+# T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL
-M+2XO,#$R,S0U-C<X.3H[/#T^/T!!0D-$149'2$E*2TQ-3D]045)35%565UA9
-M6EM<75Y?8&%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ>WQ]?G^`@8*#A(6&
-MAXB)BHN,C8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*S
-MM+6VM[BYNKN\O;Z_P,'"P\3%QL?(R<K+S,W.S]#1TM/4U=;7V-G:V]S=WM_@
-?X>+CY.7FY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_P `
-EOUU
-
-$_ = $uu;
-tr/ /`/;
-print "not " unless pack('u', $in) eq $_;
-print "ok ", $test++, "\n";
-
-print "not " unless unpack('u', $uu) eq $in;
-print "ok ", $test++, "\n";
-
-$in = "\x1f\x8b\x08\x08\x58\xdc\xc4\x35\x02\x03\x4a\x41\x50\x55\x00\xf3\x2a\x2d\x2e\x51\x48\xcc\xcb\x2f\xc9\x48\x2d\x52\x08\x48\x2d\xca\x51\x28\x2d\x4d\xce\x4f\x49\x2d\xe2\x02\x00\x64\x66\x60\x5c\x1a\x00\x00\x00";
-$uu = <<'EOUU';
-M'XL("%C<Q#4"`TI!4%4`\RHM+E%(S,LOR4@M4@A(+<I1*"U-SD])+>("`&1F
-&8%P:````
-EOUU
-
-print "not " unless unpack('u', $uu) eq $in;
-print "ok ", $test++, "\n";
-
-# 60 identical to 59 except that backquotes have been changed to spaces
-
-$uu = <<'EOUU';
-M'XL("%C<Q#4" TI!4%4 \RHM+E%(S,LOR4@M4@A(+<I1*"U-SD])+>(" &1F
-&8%P:
-EOUU
-
-print "not " unless unpack('u', $uu) eq $in;
-print "ok ", $test++, "\n";
-
-# 61..73: test the ascii template types (A, a, Z)
-
-print "not " unless pack('A*', "foo\0bar\0 ") eq "foo\0bar\0 ";
-print "ok ", $test++, "\n";
-
-print "not " unless pack('A11', "foo\0bar\0 ") eq "foo\0bar\0 ";
-print "ok ", $test++, "\n";
-
-print "not " unless unpack('A*', "foo\0bar \0") eq "foo\0bar";
-print "ok ", $test++, "\n";
-
-print "not " unless unpack('A8', "foo\0bar \0") eq "foo\0bar";
-print "ok ", $test++, "\n";
-
-print "not " unless pack('a*', "foo\0bar\0 ") eq "foo\0bar\0 ";
-print "ok ", $test++, "\n";
-
-print "not " unless pack('a11', "foo\0bar\0 ") eq "foo\0bar\0 \0\0";
-print "ok ", $test++, "\n";
-
-print "not " unless unpack('a*', "foo\0bar \0") eq "foo\0bar \0";
-print "ok ", $test++, "\n";
-
-print "not " unless unpack('a8', "foo\0bar \0") eq "foo\0bar ";
-print "ok ", $test++, "\n";
-
-print "not " unless pack('Z*', "foo\0bar\0 ") eq "foo\0bar\0 \0";
-print "ok ", $test++, "\n";
-
-print "not " unless pack('Z11', "foo\0bar\0 ") eq "foo\0bar\0 \0\0";
-print "ok ", $test++, "\n";
-
-print "not " unless pack('Z3', "foo") eq "fo\0";
-print "ok ", $test++, "\n";
-
-print "not " unless unpack('Z*', "foo\0bar \0") eq "foo";
-print "ok ", $test++, "\n";
-
-print "not " unless unpack('Z8', "foo\0bar \0") eq "foo";
-print "ok ", $test++, "\n";
-
-# 74..79: packing native shorts/ints/longs
-
-print "not " unless length(pack("s!", 0)) == $Config{shortsize};
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("i!", 0)) == $Config{intsize};
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("l!", 0)) == $Config{longsize};
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("s!", 0)) <= length(pack("i!", 0));
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("i!", 0)) <= length(pack("l!", 0));
-print "ok ", $test++, "\n";
-
-print "not " unless length(pack("i!", 0)) == length(pack("i", 0));
-print "ok ", $test++, "\n";
-
-# 80..139: pack <-> unpack bijectionism
-
-# 80.. 84 c
-foreach my $c (-128, -1, 0, 1, 127) {
- print "not " unless unpack("c", pack("c", $c)) == $c;
- print "ok ", $test++, "\n";
-}
-
-# 85.. 89: C
-foreach my $C (0, 1, 127, 128, 255) {
- print "not " unless unpack("C", pack("C", $C)) == $C;
- print "ok ", $test++, "\n";
-}
-
-# 90.. 94: s
-foreach my $s (-32768, -1, 0, 1, 32767) {
- print "not " unless unpack("s", pack("s", $s)) == $s;
- print "ok ", $test++, "\n";
-}
-
-# 95.. 99: S
-foreach my $S (0, 1, 32767, 32768, 65535) {
- print "not " unless unpack("S", pack("S", $S)) == $S;
- print "ok ", $test++, "\n";
-}
-
-# 100..104: i
-foreach my $i (-2147483648, -1, 0, 1, 2147483647) {
- print "not " unless unpack("i", pack("i", $i)) == $i;
- print "ok ", $test++, "\n";
-}
-
-# 105..109: I
-foreach my $I (0, 1, 2147483647, 2147483648, 4294967295) {
- print "not " unless unpack("I", pack("I", $I)) == $I;
- print "ok ", $test++, "\n";
-}
-
-# 110..114: l
-foreach my $l (-2147483648, -1, 0, 1, 2147483647) {
- print "not " unless unpack("l", pack("l", $l)) == $l;
- print "ok ", $test++, "\n";
-}
-
-# 115..119: L
-foreach my $L (0, 1, 2147483647, 2147483648, 4294967295) {
- print "not " unless unpack("L", pack("L", $L)) == $L;
- print "ok ", $test++, "\n";
-}
-
-# 120..124: n
-foreach my $n (0, 1, 32767, 32768, 65535) {
- print "not " unless unpack("n", pack("n", $n)) == $n;
- print "ok ", $test++, "\n";
-}
-
-# 125..129: v
-foreach my $v (0, 1, 32767, 32768, 65535) {
- print "not " unless unpack("v", pack("v", $v)) == $v;
- print "ok ", $test++, "\n";
-}
-
-# 130..134: N
-foreach my $N (0, 1, 2147483647, 2147483648, 4294967295) {
- print "not " unless unpack("N", pack("N", $N)) == $N;
- print "ok ", $test++, "\n";
-}
-
-# 135..139: V
-foreach my $V (0, 1, 2147483647, 2147483648, 4294967295) {
- print "not " unless unpack("V", pack("V", $V)) == $V;
- print "ok ", $test++, "\n";
-}
-
-# 140..143: pack nvNV byteorders
-
-print "not " unless pack("n", 0xdead) eq "\xde\xad";
-print "ok ", $test++, "\n";
-
-print "not " unless pack("v", 0xdead) eq "\xad\xde";
-print "ok ", $test++, "\n";
-
-print "not " unless pack("N", 0xdeadbeef) eq "\xde\xad\xbe\xef";
-print "ok ", $test++, "\n";
-
-print "not " unless pack("V", 0xdeadbeef) eq "\xef\xbe\xad\xde";
-print "ok ", $test++, "\n";
-
-# 144..152: /
-
-my $z;
-eval { ($x) = unpack '/a*','hello' };
-print 'not ' unless $@; print "ok $test\n"; $test++;
-eval { ($z,$x,$y) = unpack 'a3/A C/a* C/Z', "003ok \003yes\004z\000abc" };
-print $@ eq '' && $z eq 'ok' ? "ok $test\n" : "not ok $test\n"; $test++;
-print $@ eq '' && $x eq 'yes' ? "ok $test\n" : "not ok $test\n"; $test++;
-print $@ eq '' && $y eq 'z' ? "ok $test\n" : "not ok $test\n"; $test++;
-
-eval { ($x) = pack '/a*','hello' };
-print 'not ' unless $@; print "ok $test\n"; $test++;
-$z = pack 'n/a* N/Z* w/A*','string','hi there ','etc';
-print 'not ' unless $z eq "\000\006string\0\0\0\012hi there \000\003etc";
-print "ok $test\n"; $test++;
-
-eval { ($x) = unpack 'a/a*/a*', '212ab345678901234567' };
-print $@ eq '' && $x eq 'ab3456789012' ? "ok $test\n" : "#$x,$@\nnot ok $test\n";
-$test++;
-
-eval { ($x) = unpack 'a/a*/a*', '3012ab345678901234567' };
-print $@ eq '' && $x eq 'ab3456789012' ? "ok $test\n" : "not ok $test\n";
-$test++;
-
-eval { ($x) = unpack 'a/a*/b*', '212ab' };
-my $expected_x = '100001100100';
-if ($Config{ebcdic} eq 'define') { $expected_x = '100000010100'; }
-print $@ eq '' && $x eq $expected_x ? "ok $test\n" : "#$x,$@\nnot ok $test\n";
-$test++;
-
-# 153..156: / with #
-
-eval { ($z,$x,$y) = unpack <<EOU, "003ok \003yes\004z\000abc" };
- a3/A # Count in ASCII
- C/a* # Count in a C char
- C/Z # Count in a C char but skip after \0
-EOU
-print $@ eq '' && $z eq 'ok' ? "ok $test\n" : "not ok $test\n"; $test++;
-print $@ eq '' && $x eq 'yes' ? "ok $test\n" : "not ok $test\n"; $test++;
-print $@ eq '' && $y eq 'z' ? "ok $test\n" : "not ok $test\n"; $test++;
-
-$z = pack <<EOP,'string','etc';
- n/a* # Count as network short
- w/A* # Count a BER integer
-EOP
-print 'not ' unless $z eq "\000\006string\003etc"; print "ok $test\n"; $test++;
-
-print 'not ' unless "1.20.300.4000" eq sprintf "%vd", pack("U*",1,20,300,4000);
-print "ok $test\n"; $test++;
-print 'not ' unless "1.20.300.4000" eq
- sprintf "%vd", pack(" U*",1,20,300,4000);
-print "ok $test\n"; $test++;
-print 'not ' unless v1.20.300.4000 ne
- sprintf "%vd", pack("C0U*",1,20,300,4000);
-print "ok $test\n"; $test++;
-
diff --git a/contrib/perl5/t/op/pat.t b/contrib/perl5/t/op/pat.t
deleted file mode 100755
index ffbc945..0000000
--- a/contrib/perl5/t/op/pat.t
+++ /dev/null
@@ -1,1130 +0,0 @@
-#!./perl
-#
-# This is a home for regular expression tests that don't fit into
-# the format supported by op/regexp.t. If you want to add a test
-# that does fit that format, add it to op/re_tests, not here.
-
-print "1..231\n";
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-eval 'use Config'; # Defaults assumed if this fails
-
-$x = "abc\ndef\n";
-
-if ($x =~ /^abc/) {print "ok 1\n";} else {print "not ok 1\n";}
-if ($x !~ /^def/) {print "ok 2\n";} else {print "not ok 2\n";}
-
-$* = 1;
-if ($x =~ /^def/) {print "ok 3\n";} else {print "not ok 3\n";}
-$* = 0;
-
-$_ = '123';
-if (/^([0-9][0-9]*)/) {print "ok 4\n";} else {print "not ok 4\n";}
-
-if ($x =~ /^xxx/) {print "not ok 5\n";} else {print "ok 5\n";}
-if ($x !~ /^abc/) {print "not ok 6\n";} else {print "ok 6\n";}
-
-if ($x =~ /def/) {print "ok 7\n";} else {print "not ok 7\n";}
-if ($x !~ /def/) {print "not ok 8\n";} else {print "ok 8\n";}
-
-if ($x !~ /.def/) {print "ok 9\n";} else {print "not ok 9\n";}
-if ($x =~ /.def/) {print "not ok 10\n";} else {print "ok 10\n";}
-
-if ($x =~ /\ndef/) {print "ok 11\n";} else {print "not ok 11\n";}
-if ($x !~ /\ndef/) {print "not ok 12\n";} else {print "ok 12\n";}
-
-$_ = 'aaabbbccc';
-if (/(a*b*)(c*)/ && $1 eq 'aaabbb' && $2 eq 'ccc') {
- print "ok 13\n";
-} else {
- print "not ok 13\n";
-}
-if (/(a+b+c+)/ && $1 eq 'aaabbbccc') {
- print "ok 14\n";
-} else {
- print "not ok 14\n";
-}
-
-if (/a+b?c+/) {print "not ok 15\n";} else {print "ok 15\n";}
-
-$_ = 'aaabccc';
-if (/a+b?c+/) {print "ok 16\n";} else {print "not ok 16\n";}
-if (/a*b+c*/) {print "ok 17\n";} else {print "not ok 17\n";}
-
-$_ = 'aaaccc';
-if (/a*b?c*/) {print "ok 18\n";} else {print "not ok 18\n";}
-if (/a*b+c*/) {print "not ok 19\n";} else {print "ok 19\n";}
-
-$_ = 'abcdef';
-if (/bcd|xyz/) {print "ok 20\n";} else {print "not ok 20\n";}
-if (/xyz|bcd/) {print "ok 21\n";} else {print "not ok 21\n";}
-
-if (m|bc/*d|) {print "ok 22\n";} else {print "not ok 22\n";}
-
-if (/^$_$/) {print "ok 23\n";} else {print "not ok 23\n";}
-
-$* = 1; # test 3 only tested the optimized version--this one is for real
-if ("ab\ncd\n" =~ /^cd/) {print "ok 24\n";} else {print "not ok 24\n";}
-$* = 0;
-
-$XXX{123} = 123;
-$XXX{234} = 234;
-$XXX{345} = 345;
-
-@XXX = ('ok 25','not ok 25', 'ok 26','not ok 26','not ok 27');
-while ($_ = shift(@XXX)) {
- ?(.*)? && (print $1,"\n");
- /not/ && reset;
- /not ok 26/ && reset 'X';
-}
-
-while (($key,$val) = each(%XXX)) {
- print "not ok 27\n";
- exit;
-}
-
-print "ok 27\n";
-
-'cde' =~ /[^ab]*/;
-'xyz' =~ //;
-if ($& eq 'xyz') {print "ok 28\n";} else {print "not ok 28\n";}
-
-$foo = '[^ab]*';
-'cde' =~ /$foo/;
-'xyz' =~ //;
-if ($& eq 'xyz') {print "ok 29\n";} else {print "not ok 29\n";}
-
-$foo = '[^ab]*';
-'cde' =~ /$foo/;
-'xyz' =~ /$null/;
-if ($& eq 'xyz') {print "ok 30\n";} else {print "not ok 30\n";}
-
-$_ = 'abcdefghi';
-/def/; # optimized up to cmd
-if ("$`:$&:$'" eq 'abc:def:ghi') {print "ok 31\n";} else {print "not ok 31\n";}
-
-/cde/ + 0; # optimized only to spat
-if ("$`:$&:$'" eq 'ab:cde:fghi') {print "ok 32\n";} else {print "not ok 32\n";}
-
-/[d][e][f]/; # not optimized
-if ("$`:$&:$'" eq 'abc:def:ghi') {print "ok 33\n";} else {print "not ok 33\n";}
-
-$_ = 'now is the {time for all} good men to come to.';
-/ {([^}]*)}/;
-if ($1 eq 'time for all') {print "ok 34\n";} else {print "not ok 34 $1\n";}
-
-$_ = 'xxx {3,4} yyy zzz';
-print /( {3,4})/ ? "ok 35\n" : "not ok 35\n";
-print $1 eq ' ' ? "ok 36\n" : "not ok 36\n";
-print /( {4,})/ ? "not ok 37\n" : "ok 37\n";
-print /( {2,3}.)/ ? "ok 38\n" : "not ok 38\n";
-print $1 eq ' y' ? "ok 39\n" : "not ok 39\n";
-print /(y{2,3}.)/ ? "ok 40\n" : "not ok 40\n";
-print $1 eq 'yyy ' ? "ok 41\n" : "not ok 41\n";
-print /x {3,4}/ ? "not ok 42\n" : "ok 42\n";
-print /^xxx {3,4}/ ? "not ok 43\n" : "ok 43\n";
-
-$_ = "now is the time for all good men to come to.";
-@words = /(\w+)/g;
-print join(':',@words) eq "now:is:the:time:for:all:good:men:to:come:to"
- ? "ok 44\n"
- : "not ok 44\n";
-
-@words = ();
-while (/\w+/g) {
- push(@words, $&);
-}
-print join(':',@words) eq "now:is:the:time:for:all:good:men:to:come:to"
- ? "ok 45\n"
- : "not ok 45\n";
-
-@words = ();
-pos = 0;
-while (/to/g) {
- push(@words, $&);
-}
-print join(':',@words) eq "to:to"
- ? "ok 46\n"
- : "not ok 46 `@words'\n";
-
-pos $_ = 0;
-@words = /to/g;
-print join(':',@words) eq "to:to"
- ? "ok 47\n"
- : "not ok 47 `@words'\n";
-
-$_ = "abcdefghi";
-
-$pat1 = 'def';
-$pat2 = '^def';
-$pat3 = '.def.';
-$pat4 = 'abc';
-$pat5 = '^abc';
-$pat6 = 'abc$';
-$pat7 = 'ghi';
-$pat8 = '\w*ghi';
-$pat9 = 'ghi$';
-
-$t1=$t2=$t3=$t4=$t5=$t6=$t7=$t8=$t9=0;
-
-for $iter (1..5) {
- $t1++ if /$pat1/o;
- $t2++ if /$pat2/o;
- $t3++ if /$pat3/o;
- $t4++ if /$pat4/o;
- $t5++ if /$pat5/o;
- $t6++ if /$pat6/o;
- $t7++ if /$pat7/o;
- $t8++ if /$pat8/o;
- $t9++ if /$pat9/o;
-}
-
-$x = "$t1$t2$t3$t4$t5$t6$t7$t8$t9";
-print $x eq '505550555' ? "ok 48\n" : "not ok 48 $x\n";
-
-$xyz = 'xyz';
-print "abc" =~ /^abc$|$xyz/ ? "ok 49\n" : "not ok 49\n";
-
-# perl 4.009 says "unmatched ()"
-eval '"abc" =~ /a(bc$)|$xyz/; $result = "$&:$1"';
-print $@ eq "" ? "ok 50\n" : "not ok 50\n";
-print $result eq "abc:bc" ? "ok 51\n" : "not ok 51\n";
-
-
-$_="abcfooabcbar";
-$x=/abc/g;
-print $` eq "" ? "ok 52\n" : "not ok 52\n" if $x;
-$x=/abc/g;
-print $` eq "abcfoo" ? "ok 53\n" : "not ok 53\n" if $x;
-$x=/abc/g;
-print $x == 0 ? "ok 54\n" : "not ok 54\n";
-pos = 0;
-$x=/ABC/gi;
-print $` eq "" ? "ok 55\n" : "not ok 55\n" if $x;
-$x=/ABC/gi;
-print $` eq "abcfoo" ? "ok 56\n" : "not ok 56\n" if $x;
-$x=/ABC/gi;
-print $x == 0 ? "ok 57\n" : "not ok 57\n";
-pos = 0;
-$x=/abc/g;
-print $' eq "fooabcbar" ? "ok 58\n" : "not ok 58\n" if $x;
-$x=/abc/g;
-print $' eq "bar" ? "ok 59\n" : "not ok 59\n" if $x;
-$_ .= '';
-@x=/abc/g;
-print scalar @x == 2 ? "ok 60\n" : "not ok 60\n";
-
-$_ = "abdc";
-pos $_ = 2;
-/\Gc/gc;
-print "not " if (pos $_) != 2;
-print "ok 61\n";
-/\Gc/g;
-print "not " if defined pos $_;
-print "ok 62\n";
-
-$out = 1;
-'abc' =~ m'a(?{ $out = 2 })b';
-print "not " if $out != 2;
-print "ok 63\n";
-
-$out = 1;
-'abc' =~ m'a(?{ $out = 3 })c';
-print "not " if $out != 1;
-print "ok 64\n";
-
-$_ = 'foobar1 bar2 foobar3 barfoobar5 foobar6';
-@out = /(?<!foo)bar./g;
-print "not " if "@out" ne 'bar2 barf';
-print "ok 65\n";
-
-# Tests which depend on REG_INFTY
-$reg_infty = defined $Config{reg_infty} ? $Config{reg_infty} : 32767;
-$reg_infty_m = $reg_infty - 1; $reg_infty_p = $reg_infty + 1;
-
-# As well as failing if the pattern matches do unexpected things, the
-# next three tests will fail if you should have picked up a lower-than-
-# default value for $reg_infty from Config.pm, but have not.
-
-undef $@;
-print "not " if eval q(('aaa' =~ /(a{1,$reg_infty_m})/)[0] ne 'aaa') || $@;
-print "ok 66\n";
-
-undef $@;
-print "not " if eval q(('a' x $reg_infty_m) !~ /a{$reg_infty_m}/) || $@;
-print "ok 67\n";
-
-undef $@;
-print "not " if eval q(('a' x ($reg_infty_m - 1)) =~ /a{$reg_infty_m}/) || $@;
-print "ok 68\n";
-
-undef $@;
-eval "'aaa' =~ /a{1,$reg_infty}/";
-print "not " if $@ !~ m%^\QQuantifier in {,} bigger than%;
-print "ok 69\n";
-
-eval "'aaa' =~ /a{1,$reg_infty_p}/";
-print "not "
- if $@ !~ m%^\QQuantifier in {,} bigger than%;
-print "ok 70\n";
-undef $@;
-
-# Poke a couple more parse failures
-
-$context = 'x' x 256;
-eval qq("${context}y" =~ /(?<=$context)y/);
-print "not " if $@ !~ m%^\QLookbehind longer than 255 not%;
-print "ok 71\n";
-
-# removed test
-print "ok 72\n";
-
-# Long Monsters
-$test = 73;
-for $l (125, 140, 250, 270, 300000, 30) { # Ordered to free memory
- $a = 'a' x $l;
- print "# length=$l\nnot " unless "ba$a=" =~ /a$a=/;
- print "ok $test\n";
- $test++;
-
- print "not " if "b$a=" =~ /a$a=/;
- print "ok $test\n";
- $test++;
-}
-
-# 20000 nodes, each taking 3 words per string, and 1 per branch
-$long_constant_len = join '|', 12120 .. 32645;
-$long_var_len = join '|', 8120 .. 28645;
-%ans = ( 'ax13876y25677lbc' => 1,
- 'ax13876y25677mcb' => 0, # not b.
- 'ax13876y35677nbc' => 0, # Num too big
- 'ax13876y25677y21378obc' => 1,
- 'ax13876y25677y21378zbc' => 0, # Not followed by [k-o]
- 'ax13876y25677y21378y21378kbc' => 1,
- 'ax13876y25677y21378y21378kcb' => 0, # Not b.
- 'ax13876y25677y21378y21378y21378kbc' => 0, # 5 runs
- );
-
-for ( keys %ans ) {
- print "# const-len `$_' not => $ans{$_}\nnot "
- if $ans{$_} xor /a(?=([yx]($long_constant_len)){2,4}[k-o]).*b./o;
- print "ok $test\n";
- $test++;
- print "# var-len `$_' not => $ans{$_}\nnot "
- if $ans{$_} xor /a(?=([yx]($long_var_len)){2,4}[k-o]).*b./o;
- print "ok $test\n";
- $test++;
-}
-
-$_ = " a (bla()) and x(y b((l)u((e))) and b(l(e)e)e";
-$expect = "(bla()) ((l)u((e))) (l(e)e)";
-
-sub matchit {
- m/
- (
- \(
- (?{ $c = 1 }) # Initialize
- (?:
- (?(?{ $c == 0 }) # PREVIOUS iteration was OK, stop the loop
- (?!
- ) # Fail: will unwind one iteration back
- )
- (?:
- [^()]+ # Match a big chunk
- (?=
- [()]
- ) # Do not try to match subchunks
- |
- \(
- (?{ ++$c })
- |
- \)
- (?{ --$c })
- )
- )+ # This may not match with different subblocks
- )
- (?(?{ $c != 0 })
- (?!
- ) # Fail
- ) # Otherwise the chunk 1 may succeed with $c>0
- /xg;
-}
-
-@ans = ();
-push @ans, $res while $res = matchit;
-
-print "# ans='@ans'\n# expect='$expect'\nnot " if "@ans" ne "1 1 1";
-print "ok $test\n";
-$test++;
-
-@ans = matchit;
-
-print "# ans='@ans'\n# expect='$expect'\nnot " if "@ans" ne $expect;
-print "ok $test\n";
-$test++;
-
-print "not " unless "abc" =~ /^(??{"a"})b/;
-print "ok $test\n";
-$test++;
-
-my $matched;
-$matched = qr/\((?:(?>[^()]+)|(??{$matched}))*\)/;
-
-@ans = @ans1 = ();
-push(@ans, $res), push(@ans1, $&) while $res = m/$matched/g;
-
-print "# ans='@ans'\n# expect='$expect'\nnot " if "@ans" ne "1 1 1";
-print "ok $test\n";
-$test++;
-
-print "# ans1='@ans1'\n# expect='$expect'\nnot " if "@ans1" ne $expect;
-print "ok $test\n";
-$test++;
-
-@ans = m/$matched/g;
-
-print "# ans='@ans'\n# expect='$expect'\nnot " if "@ans" ne $expect;
-print "ok $test\n";
-$test++;
-
-@ans = ('a/b' =~ m%(.*/)?(.*)%); # Stack may be bad
-print "not " if "@ans" ne 'a/ b';
-print "ok $test\n";
-$test++;
-
-$code = '{$blah = 45}';
-$blah = 12;
-eval { /(?$code)/ };
-print "not " unless $@ and $@ =~ /not allowed at runtime/ and $blah == 12;
-print "ok $test\n";
-$test++;
-
-for $code ('{$blah = 45}','=xx') {
- $blah = 12;
- $res = eval { "xx" =~ /(?$code)/o };
- if ($code eq '=xx') {
- print "#'$@','$res','$blah'\nnot " unless not $@ and $res;
- } else {
- print "#'$@','$res','$blah'\nnot " unless $@ and $@ =~ /not allowed at runtime/ and $blah == 12;
- }
- print "ok $test\n";
- $test++;
-}
-
-$code = '{$blah = 45}';
-$blah = 12;
-eval "/(?$code)/";
-print "not " if $blah != 45;
-print "ok $test\n";
-$test++;
-
-$blah = 12;
-/(?{$blah = 45})/;
-print "not " if $blah != 45;
-print "ok $test\n";
-$test++;
-
-$x = 'banana';
-$x =~ /.a/g;
-print "not " unless pos($x) == 2;
-print "ok $test\n";
-$test++;
-
-$x =~ /.z/gc;
-print "not " unless pos($x) == 2;
-print "ok $test\n";
-$test++;
-
-sub f {
- my $p = $_[0];
- return $p;
-}
-
-$x =~ /.a/g;
-print "not " unless f(pos($x)) == 4;
-print "ok $test\n";
-$test++;
-
-$x = $^R = 67;
-'foot' =~ /foo(?{$x = 12; 75})[t]/;
-print "not " unless $^R eq '75';
-print "ok $test\n";
-$test++;
-
-$x = $^R = 67;
-'foot' =~ /foo(?{$x = 12; 75})[xy]/;
-print "not " unless $^R eq '67' and $x eq '12';
-print "ok $test\n";
-$test++;
-
-$x = $^R = 67;
-'foot' =~ /foo(?{ $^R + 12 })((?{ $x = 12; $^R + 17 })[xy])?/;
-print "not " unless $^R eq '79' and $x eq '12';
-print "ok $test\n";
-$test++;
-
-print "not " unless qr/\b\v$/i eq '(?i-xsm:\bv$)';
-print "ok $test\n";
-$test++;
-
-print "not " unless qr/\b\v$/s eq '(?s-xim:\bv$)';
-print "ok $test\n";
-$test++;
-
-print "not " unless qr/\b\v$/m eq '(?m-xis:\bv$)';
-print "ok $test\n";
-$test++;
-
-print "not " unless qr/\b\v$/x eq '(?x-ism:\bv$)';
-print "ok $test\n";
-$test++;
-
-print "not " unless qr/\b\v$/xism eq '(?msix:\bv$)';
-print "ok $test\n";
-$test++;
-
-print "not " unless qr/\b\v$/ eq '(?-xism:\bv$)';
-print "ok $test\n";
-$test++;
-
-$_ = 'xabcx';
-foreach $ans ('', 'c') {
- /(?<=(?=a)..)((?=c)|.)/g;
- print "# \$1 ='$1'\n# \$ans='$ans'\nnot " unless $1 eq $ans;
- print "ok $test\n";
- $test++;
-}
-
-$_ = 'a';
-foreach $ans ('', 'a', '') {
- /^|a|$/g;
- print "# \$& ='$&'\n# \$ans='$ans'\nnot " unless $& eq $ans;
- print "ok $test\n";
- $test++;
-}
-
-sub prefixify {
- my($v,$a,$b,$res) = @_;
- $v =~ s/\Q$a\E/$b/;
- print "not " unless $res eq $v;
- print "ok $test\n";
- $test++;
-}
-prefixify('/a/b/lib/arch', "/a/b/lib", 'X/lib', 'X/lib/arch');
-prefixify('/a/b/man/arch', "/a/b/man", 'X/man', 'X/man/arch');
-
-$_ = 'var="foo"';
-/(\")/;
-print "not " unless $1 and /$1/;
-print "ok $test\n";
-$test++;
-
-$a=qr/(?{++$b})/;
-$b = 7;
-/$a$a/;
-print "not " unless $b eq '9';
-print "ok $test\n";
-$test++;
-
-$c="$a";
-/$a$a/;
-print "not " unless $b eq '11';
-print "ok $test\n";
-$test++;
-
-{
- use re "eval";
- /$a$c$a/;
- print "not " unless $b eq '14';
- print "ok $test\n";
- $test++;
-
- local $lex_a = 2;
- my $lex_a = 43;
- my $lex_b = 17;
- my $lex_c = 27;
- my $lex_res = ($lex_b =~ qr/$lex_b(?{ $lex_c = $lex_a++ })/);
- print "not " unless $lex_res eq '1';
- print "ok $test\n";
- $test++;
- print "not " unless $lex_a eq '44';
- print "ok $test\n";
- $test++;
- print "not " unless $lex_c eq '43';
- print "ok $test\n";
- $test++;
-
-
- no re "eval";
- $match = eval { /$a$c$a/ };
- print "not "
- unless $b eq '14' and $@ =~ /Eval-group not allowed/ and not $match;
- print "ok $test\n";
- $test++;
-}
-
-{
- local $lex_a = 2;
- my $lex_a = 43;
- my $lex_b = 17;
- my $lex_c = 27;
- my $lex_res = ($lex_b =~ qr/17(?{ $lex_c = $lex_a++ })/);
- print "not " unless $lex_res eq '1';
- print "ok $test\n";
- $test++;
- print "not " unless $lex_a eq '44';
- print "ok $test\n";
- $test++;
- print "not " unless $lex_c eq '43';
- print "ok $test\n";
- $test++;
-}
-
-{
- package aa;
- $c = 2;
- $::c = 3;
- '' =~ /(?{ $c = 4 })/;
- print "not " unless $c == 4;
-}
-print "ok $test\n";
-$test++;
-print "not " unless $c == 3;
-print "ok $test\n";
-$test++;
-
-sub must_warn_pat {
- my $warn_pat = shift;
- return sub { print "not " unless $_[0] =~ /$warn_pat/ }
-}
-
-sub must_warn {
- my ($warn_pat, $code) = @_;
- local %SIG;
- eval 'BEGIN { use warnings; $SIG{__WARN__} = $warn_pat };' . $code;
- print "ok $test\n";
- $test++;
-}
-
-
-sub make_must_warn {
- my $warn_pat = shift;
- return sub { must_warn(must_warn_pat($warn_pat)) }
-}
-
-my $for_future = make_must_warn('reserved for future extensions');
-
-&$for_future('q(a:[b]:) =~ /[x[:foo:]]/');
-
-#&$for_future('q(a=[b]=) =~ /[x[=foo=]]/');
-print "ok $test\n"; $test++; # now a fatal croak
-
-#&$for_future('q(a.[b].) =~ /[x[.foo.]]/');
-print "ok $test\n"; $test++; # now a fatal croak
-
-# test if failure of patterns returns empty list
-$_ = 'aaa';
-@_ = /bbb/;
-print "not " if @_;
-print "ok $test\n";
-$test++;
-
-@_ = /bbb/g;
-print "not " if @_;
-print "ok $test\n";
-$test++;
-
-@_ = /(bbb)/;
-print "not " if @_;
-print "ok $test\n";
-$test++;
-
-@_ = /(bbb)/g;
-print "not " if @_;
-print "ok $test\n";
-$test++;
-
-/a(?=.$)/;
-print "not " if $#+ != 0 or $#- != 0;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[0] != 2 or $-[0] != 1;
-print "ok $test\n";
-$test++;
-
-print "not "
- if defined $+[1] or defined $-[1] or defined $+[2] or defined $-[2];
-print "ok $test\n";
-$test++;
-
-/a(a)(a)/;
-print "not " if $#+ != 2 or $#- != 2;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[0] != 3 or $-[0] != 0;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[1] != 2 or $-[1] != 1;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[2] != 3 or $-[2] != 2;
-print "ok $test\n";
-$test++;
-
-print "not "
- if defined $+[3] or defined $-[3] or defined $+[4] or defined $-[4];
-print "ok $test\n";
-$test++;
-
-/.(a)(b)?(a)/;
-print "not " if $#+ != 3 or $#- != 3;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[0] != 3 or $-[0] != 0;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[1] != 2 or $-[1] != 1;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[3] != 3 or $-[3] != 2;
-print "ok $test\n";
-$test++;
-
-print "not "
- if defined $+[2] or defined $-[2] or defined $+[4] or defined $-[4];
-print "ok $test\n";
-$test++;
-
-/.(a)/;
-print "not " if $#+ != 1 or $#- != 1;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[0] != 2 or $-[0] != 0;
-print "ok $test\n";
-$test++;
-
-print "not " if $+[1] != 2 or $-[1] != 1;
-print "ok $test\n";
-$test++;
-
-print "not "
- if defined $+[2] or defined $-[2] or defined $+[3] or defined $-[3];
-print "ok $test\n";
-$test++;
-
-eval { $+[0] = 13; };
-print "not "
- if $@ !~ /^Modification of a read-only value attempted/;
-print "ok $test\n";
-$test++;
-
-eval { $-[0] = 13; };
-print "not "
- if $@ !~ /^Modification of a read-only value attempted/;
-print "ok $test\n";
-$test++;
-
-eval { @+ = (7, 6, 5); };
-print "not "
- if $@ !~ /^Modification of a read-only value attempted/;
-print "ok $test\n";
-$test++;
-
-eval { @- = qw(foo bar); };
-print "not "
- if $@ !~ /^Modification of a read-only value attempted/;
-print "ok $test\n";
-$test++;
-
-/.(a)(ba*)?/;
-print "#$#-..$#+\nnot " if $#+ != 2 or $#- != 1;
-print "ok $test\n";
-$test++;
-
-$_ = 'aaa';
-pos = 1;
-@a = /\Ga/g;
-print "not " unless "@a" eq "a a";
-print "ok $test\n";
-$test++;
-
-$str = 'abcde';
-pos $str = 2;
-
-print "not " if $str =~ /^\G/;
-print "ok $test\n";
-$test++;
-
-print "not " if $str =~ /^.\G/;
-print "ok $test\n";
-$test++;
-
-print "not " unless $str =~ /^..\G/;
-print "ok $test\n";
-$test++;
-
-print "not " if $str =~ /^...\G/;
-print "ok $test\n";
-$test++;
-
-print "not " unless $str =~ /.\G./ and $& eq 'bc';
-print "ok $test\n";
-$test++;
-
-print "not " unless $str =~ /\G../ and $& eq 'cd';
-print "ok $test\n";
-$test++;
-
-undef $foo; undef $bar;
-print "#'$str','$foo','$bar'\nnot "
- unless $str =~ /b(?{$foo = $_; $bar = pos})c/
- and $foo eq 'abcde' and $bar eq 2;
-print "ok $test\n";
-$test++;
-
-undef $foo; undef $bar;
-pos $str = undef;
-print "#'$str','$foo','$bar'\nnot "
- unless $str =~ /b(?{$foo = $_; $bar = pos})c/g
- and $foo eq 'abcde' and $bar eq 2 and pos $str eq 3;
-print "ok $test\n";
-$test++;
-
-$_ = $str;
-
-undef $foo; undef $bar;
-print "#'$str','$foo','$bar'\nnot "
- unless /b(?{$foo = $_; $bar = pos})c/
- and $foo eq 'abcde' and $bar eq 2;
-print "ok $test\n";
-$test++;
-
-undef $foo; undef $bar;
-print "#'$str','$foo','$bar'\nnot "
- unless /b(?{$foo = $_; $bar = pos})c/g
- and $foo eq 'abcde' and $bar eq 2 and pos eq 3;
-print "ok $test\n";
-$test++;
-
-undef $foo; undef $bar;
-pos = undef;
-1 while /b(?{$foo = $_; $bar = pos})c/g;
-print "#'$str','$foo','$bar'\nnot "
- unless $foo eq 'abcde' and $bar eq 2 and not defined pos;
-print "ok $test\n";
-$test++;
-
-undef $foo; undef $bar;
-$_ = 'abcde|abcde';
-print "#'$str','$foo','$bar','$_'\nnot "
- unless s/b(?{$foo = $_; $bar = pos})c/x/g and $foo eq 'abcde|abcde'
- and $bar eq 8 and $_ eq 'axde|axde';
-print "ok $test\n";
-$test++;
-
-@res = ();
-# List context:
-$_ = 'abcde|abcde';
-@dummy = /([ace]).(?{push @res, $1,$2})([ce])(?{push @res, $1,$2})/g;
-@res = map {defined $_ ? "'$_'" : 'undef'} @res;
-$res = "@res";
-print "#'@res' '$_'\nnot "
- unless "@res" eq "'a' undef 'a' 'c' 'e' undef 'a' undef 'a' 'c'";
-print "ok $test\n";
-$test++;
-
-@res = ();
-@dummy = /([ace]).(?{push @res, $`,$&,$'})([ce])(?{push @res, $`,$&,$'})/g;
-@res = map {defined $_ ? "'$_'" : 'undef'} @res;
-$res = "@res";
-print "#'@res' '$_'\nnot "
- unless "@res" eq
- "'' 'ab' 'cde|abcde' " .
- "'' 'abc' 'de|abcde' " .
- "'abcd' 'e|' 'abcde' " .
- "'abcde|' 'ab' 'cde' " .
- "'abcde|' 'abc' 'de'" ;
-print "ok $test\n";
-$test++;
-
-#Some more \G anchor checks
-$foo='aabbccddeeffgg';
-
-pos($foo)=1;
-
-$foo=~/.\G(..)/g;
-print "not " unless($1 eq 'ab');
-print "ok $test\n";
-$test++;
-
-pos($foo) += 1;
-$foo=~/.\G(..)/g;
-print "not " unless($1 eq 'cc');
-print "ok $test\n";
-$test++;
-
-pos($foo) += 1;
-$foo=~/.\G(..)/g;
-print "not " unless($1 eq 'de');
-print "ok $test\n";
-$test++;
-
-print "not " unless $foo =~ /\Gef/g;
-print "ok $test\n";
-$test++;
-
-undef pos $foo;
-
-$foo=~/\G(..)/g;
-print "not " unless($1 eq 'aa');
-print "ok $test\n";
-$test++;
-
-$foo=~/\G(..)/g;
-print "not " unless($1 eq 'bb');
-print "ok $test\n";
-$test++;
-
-pos($foo)=5;
-$foo=~/\G(..)/g;
-print "not " unless($1 eq 'cd');
-print "ok $test\n";
-$test++;
-
-$_='123x123';
-@res = /(\d*|x)/g;
-print "not " unless('123||x|123|' eq join '|', @res);
-print "ok $test\n";
-$test++;
-
-# see if matching against temporaries (created via pp_helem()) is safe
-{ foo => "ok $test\n".$^X }->{foo} =~ /^(.*)\n/g;
-print "$1\n";
-$test++;
-
-# See if $i work inside (?{}) in the presense of saved substrings and
-# changing $_
-@a = qw(foo bar);
-@b = ();
-s/(\w)(?{push @b, $1})/,$1,/g for @a;
-
-print "# \@b='@b', expect 'f o o b a r'\nnot " unless("@b" eq "f o o b a r");
-print "ok $test\n";
-$test++;
-
-print "not " unless("@a" eq ",f,,o,,o, ,b,,a,,r,");
-print "ok $test\n";
-$test++;
-
-$brackets = qr{
- { (?> [^{}]+ | (??{ $brackets }) )* }
- }x;
-
-"{{}" =~ $brackets;
-print "ok $test\n"; # Did we survive?
-$test++;
-
-"something { long { and } hairy" =~ $brackets;
-print "ok $test\n"; # Did we survive?
-$test++;
-
-"something { long { and } hairy" =~ m/((??{ $brackets }))/;
-print "not " unless $1 eq "{ and }";
-print "ok $test\n";
-$test++;
-
-$_ = "a-a\nxbb";
-pos=1;
-m/^-.*bb/mg and print "not ";
-print "ok $test\n";
-$test++;
-
-$text = "aaXbXcc";
-pos($text)=0;
-$text =~ /\GXb*X/g and print 'not ';
-print "ok $test\n";
-$test++;
-
-$text = "xA\n" x 500;
-$text =~ /^\s*A/m and print 'not ';
-print "ok $test\n";
-$test++;
-
-$text = "abc dbf";
-@res = ($text =~ /.*?(b).*?\b/g);
-"@res" eq 'b b' or print 'not ';
-print "ok $test\n";
-$test++;
-
-@a = map chr,0..255;
-
-@b = grep(/\S/,@a);
-@c = grep(/[^\s]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\S/,@a);
-@c = grep(/[\S]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\s/,@a);
-@c = grep(/[^\S]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\s/,@a);
-@c = grep(/[\s]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\D/,@a);
-@c = grep(/[^\d]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\D/,@a);
-@c = grep(/[\D]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\d/,@a);
-@c = grep(/[^\D]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\d/,@a);
-@c = grep(/[\d]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\W/,@a);
-@c = grep(/[^\w]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\W/,@a);
-@c = grep(/[\W]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\w/,@a);
-@c = grep(/[^\W]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-@b = grep(/\w/,@a);
-@c = grep(/[\w]/,@a);
-print "not " if "@b" ne "@c";
-print "ok $test\n";
-$test++;
-
-# see if backtracking optimization works correctly
-"\n\n" =~ /\n $ \n/x or print "not ";
-print "ok $test\n";
-$test++;
-
-"\n\n" =~ /\n* $ \n/x or print "not ";
-print "ok $test\n";
-$test++;
-
-"\n\n" =~ /\n+ $ \n/x or print "not ";
-print "ok $test\n";
-$test++;
-
-[] =~ /^ARRAY/ or print "# [] \nnot ";
-print "ok $test\n";
-$test++;
-
-eval << 'EOE';
-{
- package S;
- use overload '""' => sub { 'Object S' };
- sub new { bless [] }
-}
-$a = 'S'->new;
-EOE
-
-$a and $a =~ /^Object\sS/ or print "# '$a' \nnot ";
-print "ok $test\n";
-$test++;
-
-# test result of match used as match (!)
-'a1b' =~ ('xyz' =~ /y/) and $` eq 'a' or print "not ";
-print "ok $test\n";
-$test++;
-
-'a1b' =~ ('xyz' =~ /t/) and $` eq 'a' or print "not ";
-print "ok $test\n";
-$test++;
-
-$w = 0;
-{
- local $SIG{__WARN__} = sub { $w = 1 };
- local $^W = 1;
- $w = 1 if ("1\n" x 102) =~ /^\s*\n/m;
-}
-print $w ? "not " : "", "ok $test\n";
-$test++;
-
-my %space = ( spc => " ",
- tab => "\t",
- cr => "\r",
- lf => "\n",
- ff => "\f",
-# There's no \v but the vertical tabulator seems miraculously
-# be 11 both in ASCII and EBCDIC.
- vt => chr(11),
- false => "space" );
-
-my @space0 = sort grep { $space{$_} =~ /\s/ } keys %space;
-my @space1 = sort grep { $space{$_} =~ /[[:space:]]/ } keys %space;
-my @space2 = sort grep { $space{$_} =~ /[[:blank:]]/ } keys %space;
-
-print "not " unless "@space0" eq "cr ff lf spc tab";
-print "ok $test # @space0\n";
-$test++;
-
-print "not " unless "@space1" eq "cr ff lf spc tab vt";
-print "ok $test # @space1\n";
-$test++;
-
-print "not " unless "@space2" eq "spc tab";
-print "ok $test # @space2\n";
-$test++;
-
-# bugid 20001021.005 - this caused a SEGV
-print "not " unless undef =~ /^([^\/]*)(.*)$/;
-print "ok $test\n";
-$test++;
-
-{
- # japhy -- added 03/03/2001
- () = (my $str = "abc") =~ /(...)/;
- $str = "def";
- print "not " if $1 ne "abc";
- print "ok $test\n";
- $test++;
-}
diff --git a/contrib/perl5/t/op/pos.t b/contrib/perl5/t/op/pos.t
deleted file mode 100755
index f3bc23c..0000000
--- a/contrib/perl5/t/op/pos.t
+++ /dev/null
@@ -1,23 +0,0 @@
-#!./perl
-
-print "1..4\n";
-
-$x='banana';
-$x=~/.a/g;
-if (pos($x)==2) {print "ok 1\n"} else {print "not ok 1\n";}
-
-$x=~/.z/gc;
-if (pos($x)==2) {print "ok 2\n"} else {print "not ok 2\n";}
-
-sub f { my $p=$_[0]; return $p }
-
-$x=~/.a/g;
-if (f(pos($x))==4) {print "ok 3\n"} else {print "not ok 3\n";}
-
-# Is pos() set inside //g? (bug id 19990615.008)
-$x = "test string?"; $x =~ s/\w/pos($x)/eg;
-print "not " unless $x eq "0123 5678910?";
-print "ok 4\n";
-
-
-
diff --git a/contrib/perl5/t/op/push.t b/contrib/perl5/t/op/push.t
deleted file mode 100755
index a67caed..0000000
--- a/contrib/perl5/t/op/push.t
+++ /dev/null
@@ -1,56 +0,0 @@
-#!./perl
-
-# $RCSfile: push.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:13 $
-
-@tests = split(/\n/, <<EOF);
-0 3, 0 1 2, 3 4 5 6 7
-0 0 a b c, , a b c 0 1 2 3 4 5 6 7
-8 0 a b c, , 0 1 2 3 4 5 6 7 a b c
-7 0 6.5, , 0 1 2 3 4 5 6 6.5 7
-1 0 a b c d e f g h i j,, 0 a b c d e f g h i j 1 2 3 4 5 6 7
-0 1 a, 0, a 1 2 3 4 5 6 7
-1 6 x y z, 1 2 3 4 5 6, 0 x y z 7
-0 7 x y z, 0 1 2 3 4 5 6, x y z 7
-1 7 x y z, 1 2 3 4 5 6 7, 0 x y z
-4, 4 5 6 7, 0 1 2 3
--4, 4 5 6 7, 0 1 2 3
-EOF
-
-print "1..", 4 + @tests, "\n";
-die "blech" unless @tests;
-
-@x = (1,2,3);
-push(@x,@x);
-if (join(':',@x) eq '1:2:3:1:2:3') {print "ok 1\n";} else {print "not ok 1\n";}
-push(@x,4);
-if (join(':',@x) eq '1:2:3:1:2:3:4') {print "ok 2\n";} else {print "not ok 2\n";}
-
-# test for push/pop intuiting @ on array
-push(x,3);
-if (join(':',@x) eq '1:2:3:1:2:3:4:3') {print "ok 3\n";} else {print "not ok 3\n";}
-pop(x);
-if (join(':',@x) eq '1:2:3:1:2:3:4') {print "ok 4\n";} else {print "not ok 4\n";}
-
-$test = 5;
-foreach $line (@tests) {
- ($list,$get,$leave) = split(/,\t*/,$line);
- ($pos, $len, @list) = split(' ',$list);
- @get = split(' ',$get);
- @leave = split(' ',$leave);
- @x = (0,1,2,3,4,5,6,7);
- if (defined $len) {
- @got = splice(@x, $pos, $len, @list);
- }
- else {
- @got = splice(@x, $pos);
- }
- if (join(':',@got) eq join(':',@get) &&
- join(':',@x) eq join(':',@leave)) {
- print "ok ",$test++,"\n";
- }
- else {
- print "not ok ",$test++," got: @got == @get left: @x == @leave\n";
- }
-}
-
-1; # this file is require'd by lib/tie-stdpush.t
diff --git a/contrib/perl5/t/op/pwent.t b/contrib/perl5/t/op/pwent.t
deleted file mode 100755
index d811f06..0000000
--- a/contrib/perl5/t/op/pwent.t
+++ /dev/null
@@ -1,170 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- eval {my @n = getpwuid 0};
- if ($@ && $@ =~ /(The \w+ function is unimplemented)/) {
- print "1..0 # Skip: $1\n";
- exit 0;
- }
- eval { require Config; import Config; };
- my $reason;
- if ($Config{'i_pwd'} ne 'define') {
- $reason = '$Config{i_pwd} undefined';
- }
- elsif (not -f "/etc/passwd" ) { # Play safe.
- $reason = 'no /etc/passwd file';
- }
-
- if (not defined $where) { # Try NIS.
- foreach my $ypcat (qw(/usr/bin/ypcat /bin/ypcat /etc/ypcat)) {
- if (-x $ypcat &&
- open(PW, "$ypcat passwd 2>/dev/null |") &&
- defined(<PW>)) {
- $where = "NIS passwd";
- undef $reason;
- last;
- }
- }
- }
-
- if (not defined $where) { # Try NetInfo.
- foreach my $nidump (qw(/usr/bin/nidump)) {
- if (-x $nidump &&
- open(PW, "$nidump passwd . 2>/dev/null |") &&
- defined(<PW>)) {
- $where = "NetInfo passwd";
- undef $reason;
- last;
- }
- }
- }
-
- if (not defined $where) { # Try local.
- my $PW = "/etc/passwd";
- if (-f $PW && open(PW, $PW) && defined(<PW>)) {
- $where = $PW;
- undef $reason;
- }
- }
-
- if ($reason) { # Give up.
- print "1..0 # Skip: $reason\n";
- exit 0;
- }
-}
-
-# By now the PW filehandle should be open and full of juicy password entries.
-
-print "1..2\n";
-
-# Go through at most this many users.
-# (note that the first entry has been read away by now)
-my $max = 25;
-
-my $n = 0;
-my $tst = 1;
-my %perfect;
-my %seen;
-
-setpwent();
-while (<PW>) {
- chomp;
- # LIMIT -1 so that users with empty shells don't fall off
- my @s = split /:/, $_, -1;
- my ($name_s, $passwd_s, $uid_s, $gid_s, $gcos_s, $home_s, $shell_s);
- if ($^O eq 'darwin') {
- ($name_s, $passwd_s, $uid_s, $gid_s, $gcos_s, $home_s, $shell_s) = @s[0,1,2,3,7,8,9];
- } else {
- ($name_s, $passwd_s, $uid_s, $gid_s, $gcos_s, $home_s, $shell_s) = @s;
- }
- next if /^\+/; # ignore NIS includes
- if (@s) {
- push @{ $seen{$name_s} }, $.;
- } else {
- warn "# Your $where line $. is empty.\n";
- next;
- }
- if ($n == $max) {
- local $/;
- my $junk = <PW>;
- last;
- }
- # In principle we could whine if @s != 7 but do we know enough
- # of passwd file formats everywhere?
- if (@s == 7 || ($^O eq 'darwin' && @s == 10)) {
- @n = getpwuid($uid_s);
- # 'nobody' et al.
- next unless @n;
- my ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$home,$shell) = @n;
- # Protect against one-to-many and many-to-one mappings.
- if ($name_s ne $name) {
- @n = getpwnam($name_s);
- ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$home,$shell) = @n;
- next if $name_s ne $name;
- }
- $perfect{$name_s}++
- if $name eq $name_s and
- $uid eq $uid_s and
-# Do not compare passwords: think shadow passwords.
- $gid eq $gid_s and
- $gcos eq $gcos_s and
- $home eq $home_s and
- $shell eq $shell_s;
- }
- $n++;
-}
-endpwent();
-
-if (keys %perfect == 0) {
- $max++;
- print <<EOEX;
-#
-# The failure of op/pwent test is not necessarily serious.
-# It may fail due to local password administration conventions.
-# If you are for example using both NIS and local passwords,
-# test failure is possible. Any distributed password scheme
-# can cause such failures.
-#
-# What the pwent test is doing is that it compares the $max first
-# entries of $where
-# with the results of getpwuid() and getpwnam() call. If it finds no
-# matches at all, it suspects something is wrong.
-#
-EOEX
- print "not ";
- $not = 1;
-} else {
- $not = 0;
-}
-print "ok ", $tst++;
-print "\t# (not necessarily serious: run t/op/pwent.t by itself)" if $not;
-print "\n";
-
-# Test both the scalar and list contexts.
-
-my @pw1;
-
-setpwent();
-for (1..$max) {
- my $pw = scalar getpwent();
- last unless defined $pw;
- push @pw1, $pw;
-}
-endpwent();
-
-my @pw2;
-
-setpwent();
-for (1..$max) {
- my ($pw) = (getpwent());
- last unless defined $pw;
- push @pw2, $pw;
-}
-endpwent();
-
-print "not " unless "@pw1" eq "@pw2";
-print "ok ", $tst++, "\n";
-
-close(PW);
diff --git a/contrib/perl5/t/op/quotemeta.t b/contrib/perl5/t/op/quotemeta.t
deleted file mode 100755
index ea62ed8..0000000
--- a/contrib/perl5/t/op/quotemeta.t
+++ /dev/null
@@ -1,47 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
-}
-
-print "1..17\n";
-
-if ($Config{ebcdic} eq 'define') {
- $_=join "", map chr($_), 129..233;
-
- # 105 characters - 52 letters = 53 backslashes
- # 105 characters + 53 backslashes = 158 characters
- $_= quotemeta $_;
- if ( length == 158 ){print "ok 1\n"} else {print "not ok 1\n"}
- # 104 non-backslash characters
- if (tr/\\//cd == 104){print "ok 2\n"} else {print "not ok 2\n"}
-} else { # some ASCII descendant, then.
- $_=join "", map chr($_), 32..127;
-
- # 96 characters - 52 letters - 10 digits - 1 underscore = 33 backslashes
- # 96 characters + 33 backslashes = 129 characters
- $_= quotemeta $_;
- if ( length == 129 ){print "ok 1\n"} else {print "not ok 1\n"}
- # 95 non-backslash characters
- if (tr/\\//cd == 95){print "ok 2\n"} else {print "not ok 2\n"}
-}
-
-if (length quotemeta "" == 0){print "ok 3\n"} else {print "not ok 3\n"}
-
-print "aA\UbB\LcC\EdD" eq "aABBccdD" ? "ok 4\n" : "not ok 4 \n";
-print "aA\LbB\UcC\EdD" eq "aAbbCCdD" ? "ok 5\n" : "not ok 5 \n";
-print "\L\upERL" eq "Perl" ? "ok 6\n" : "not ok 6 \n";
-print "\u\LpERL" eq "Perl" ? "ok 7\n" : "not ok 7 \n";
-print "\U\lPerl" eq "pERL" ? "ok 8\n" : "not ok 8 \n";
-print "\l\UPerl" eq "pERL" ? "ok 9\n" : "not ok 9 \n";
-print "\u\LpE\Q#X#\ER\EL" eq "Pe\\#x\\#rL" ? "ok 10\n" : "not ok 10 \n";
-print "\l\UPe\Q!x!\Er\El" eq "pE\\!X\\!Rl" ? "ok 11\n" : "not ok 11 \n";
-print "\Q\u\LpE.X.R\EL\E." eq "Pe\\.x\\.rL." ? "ok 12\n" : "not ok 12 \n";
-print "\Q\l\UPe*x*r\El\E*" eq "pE\\*X\\*Rl*" ? "ok 13\n" : "not ok 13 \n";
-print "\U\lPerl\E\E\E\E" eq "pERL" ? "ok 14\n" : "not ok 14 \n";
-print "\l\UPerl\E\E\E\E" eq "pERL" ? "ok 15\n" : "not ok 15 \n";
-
-print length(quotemeta("\x{263a}")) == 1 ? "ok 16\n" : "not ok 16\n";
-print quotemeta("\x{263a}") eq "\x{263a}" ? "ok 17\n" : "not ok 17\n";
diff --git a/contrib/perl5/t/op/rand.t b/contrib/perl5/t/op/rand.t
deleted file mode 100755
index 83186ae..0000000
--- a/contrib/perl5/t/op/rand.t
+++ /dev/null
@@ -1,359 +0,0 @@
-#!./perl
-
-# From Tom Phoenix <rootbeer@teleport.com> 22 Feb 1997
-# Based upon a test script by kgb@ast.cam.ac.uk (Karl Glazebrook)
-
-# Looking for the hints? You're in the right place.
-# The hints are near each test, so search for "TEST #", where
-# the pound sign is replaced by the number of the test.
-
-# I'd like to include some more robust tests, but anything
-# too subtle to be detected here would require a time-consuming
-# test. Also, of course, we're here to detect only flaws in Perl;
-# if there are flaws in the underlying system rand, that's not
-# our responsibility. But if you want better tests, see
-# The Art of Computer Programming, Donald E. Knuth, volume 2,
-# chapter 3. ISBN 0-201-03822-6 (v. 2)
-
-BEGIN {
- chdir "t" if -d "t";
- @INC = '../lib';
-}
-
-use strict;
-use Config;
-
-print "1..11\n";
-
-srand; # Shouldn't need this with 5.004...
- # But I'll include it now and test for
- # whether we needed it later.
-
-my $reps = 1000; # How many times to try rand each time.
- # May be changed, but should be over 500.
- # The more the better! (But slower.)
-
-sub bits ($) {
- # Takes a small integer and returns the number of one-bits in it.
- my $total;
- my $bits = sprintf "%o", $_[0];
- while (length $bits) {
- $total += (0,1,1,2,1,2,2,3)[chop $bits]; # Oct to bits
- }
- $total;
-}
-
-# First, let's see whether randbits is set right
-{
- my($max, $min, $sum); # Characteristics of rand
- my($off, $shouldbe); # Problems with randbits
- my($dev, $bits); # Number of one bits
- my $randbits = $Config{randbits};
- $max = $min = rand(1);
- for (1..$reps) {
- my $n = rand(1);
- if ($n < 0.0 or $n >= 1.0) {
- print <<EOM;
-# WHOA THERE! \$Config{drand01} is set to '$Config{drand01}',
-# but that apparently produces values < 0.0 or >= 1.0.
-# Make sure \$Config{drand01} is a valid expression in the
-# C-language, and produces values in the range [0.0,1.0).
-#
-# I give up.
-EOM
- exit;
- }
- $sum += $n;
- $bits += bits($n * 256); # Don't be greedy; 8 is enough
- # It's too many if randbits is less than 8!
- # But that should never be the case... I hope.
- # Note: If you change this, you must adapt the
- # formula for absolute standard deviation, below.
- $max = $n if $n > $max;
- $min = $n if $n < $min;
- }
-
-
- # Hints for TEST 1
- #
- # This test checks for one of Perl's most frequent
- # mis-configurations. Your system's documentation
- # for rand(2) should tell you what value you need
- # for randbits. Usually the diagnostic message
- # has the right value as well. Just fix it and
- # recompile, and you'll usually be fine. (The main
- # reason that the diagnostic message might get the
- # wrong value is that Config.pm is incorrect.)
- #
- if ($max <= 0 or $max >= (2 ** $randbits)) {# Just in case...
- print "# max=[$max] min=[$min]\nnot ok 1\n";
- print "# This perl was compiled with randbits=$randbits\n";
- print "# which is _way_ off. Or maybe your system rand is broken,\n";
- print "# or your C compiler can't multiply, or maybe Martians\n";
- print "# have taken over your computer. For starters, see about\n";
- print "# trying a better value for randbits, probably smaller.\n";
- # If that isn't the problem, we'll have
- # to put d_martians into Config.pm
- print "# Skipping remaining tests until randbits is fixed.\n";
- exit;
- }
-
- $off = log($max) / log(2); # log2
- $off = int($off) + ($off > 0); # Next more positive int
- if ($off) {
- $shouldbe = $Config{randbits} + $off;
- print "# max=[$max] min=[$min]\nnot ok 1\n";
- print "# This perl was compiled with randbits=$randbits on $^O.\n";
- print "# Consider using randbits=$shouldbe instead.\n";
- # And skip the remaining tests; they would be pointless now.
- print "# Skipping remaining tests until randbits is fixed.\n";
- exit;
- } else {
- print "ok 1\n";
- }
-
- # Hints for TEST 2
- #
- # This should always be true: 0 <= rand(1) < 1
- # If this test is failing, something is seriously wrong,
- # either in perl or your system's rand function.
- #
- if ($min < 0 or $max >= 1) { # Slightly redundant...
- print "not ok 2\n";
- print "# min too low\n" if $min < 0;
- print "# max too high\n" if $max >= 1;
- } else {
- print "ok 2\n";
- }
-
- # Hints for TEST 3
- #
- # This is just a crude test. The average number produced
- # by rand should be about one-half. But once in a while
- # it will be relatively far away. Note: This test will
- # occasionally fail on a perfectly good system!
- # See the hints for test 4 to see why.
- #
- $sum /= $reps;
- if ($sum < 0.4 or $sum > 0.6) {
- print "not ok 3\n# Average random number is far from 0.5\n";
- } else {
- print "ok 3\n";
- }
-
- # Hints for TEST 4
- #
- # NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
- # This test will fail .1% of the time on a normal system.
- # also
- # This test asks you to see these hints 100% of the time!
- # NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
- #
- # There is probably no reason to be alarmed that
- # something is wrong with your rand function. But,
- # if you're curious or if you can't help being
- # alarmed, keep reading.
- #
- # This is a less-crude test than test 3. But it has
- # the same basic flaw: Unusually distributed random
- # values should occasionally appear in every good
- # random number sequence. (If you flip a fair coin
- # twenty times every day, you'll see it land all
- # heads about one time in a million days, on the
- # average. That might alarm you if you saw it happen
- # on the first day!)
- #
- # So, if this test failed on you once, run it a dozen
- # times. If it keeps failing, it's likely that your
- # rand is bogus. If it keeps passing, it's likely
- # that the one failure was bogus. If it's a mix,
- # read on to see about how to interpret the tests.
- #
- # The number printed in square brackets is the
- # standard deviation, a statistical measure
- # of how unusual rand's behavior seemed. It should
- # fall in these ranges with these *approximate*
- # probabilities:
- #
- # under 1 68.26% of the time
- # 1-2 27.18% of the time
- # 2-3 4.30% of the time
- # over 3 0.26% of the time
- #
- # If the numbers you see are not scattered approximately
- # (not exactly!) like that table, check with your vendor
- # to find out what's wrong with your rand. Or with this
- # algorithm. :-)
- #
- # Calculating absoulute standard deviation for number of bits set
- # (eight bits per rep)
- $dev = abs ($bits - $reps * 4) / sqrt($reps * 2);
-
- if ($dev < 1.96) {
- print "ok 4\n"; # 95% of the time.
- print "# Your rand seems fine. If this test failed\n";
- print "# previously, you may want to run it again.\n";
- } elsif ($dev < 2.575) {
- print "ok 4\n# In here about 4% of the time. Hmmm...\n";
- print "# This is ok, but suspicious. But it will happen\n";
- print "# one time out of 25, more or less.\n";
- print "# You should run this test again to be sure.\n";
- } elsif ($dev < 3.3) {
- print "ok 4\n# In this range about 1% of the time.\n";
- print "# This is very suspicious. It will happen only\n";
- print "# about one time out of 100, more or less.\n";
- print "# You should run this test again to be sure.\n";
- } elsif ($dev < 3.9) {
- print "not ok 4\n# In this range very rarely.\n";
- print "# This is VERY suspicious. It will happen only\n";
- print "# about one time out of 1000, more or less.\n";
- print "# You should run this test again to be sure.\n";
- } else {
- print "not ok 4\n# Seriously whacked.\n";
- print "# This is VERY VERY suspicious.\n";
- print "# Your rand seems to be bogus.\n";
- }
- print "#\n# If you are having random number troubles,\n";
- print "# see the hints within the test script for more\n";
- printf "# information on why this might fail. [ %.3f ]\n", $dev;
-}
-
-{
- srand; # These three lines are for test 7
- my $time = time; # It's just faster to do them here.
- my $rand = join ", ", rand, rand, rand;
-
- # Hints for TEST 5
- #
- # This test checks that the argument to srand actually
- # sets the seed for generating random numbers.
- #
- srand(3.14159);
- my $r = rand;
- srand(3.14159);
- if (rand != $r) {
- print "not ok 5\n";
- print "# srand is not consistent.\n";
- } else {
- print "ok 5\n";
- }
-
- # Hints for TEST 6
- #
- # This test just checks that the previous one didn't
- # give us false confidence!
- #
- if (rand == $r) {
- print "not ok 6\n";
- print "# rand is now unchanging!\n";
- } else {
- print "ok 6\n";
- }
-
- # Hints for TEST 7
- #
- # This checks that srand without arguments gives
- # different sequences each time. Note: You shouldn't
- # be calling srand more than once unless you know
- # what you're doing! But if this fails on your
- # system, run perlbug and let the developers know
- # what other sources of randomness srand should
- # tap into.
- #
- while ($time == time) { } # Wait for new second, just in case.
- srand;
- if ((join ", ", rand, rand, rand) eq $rand) {
- print "not ok 7\n";
- print "# srand without args isn't varying.\n";
- } else {
- print "ok 7\n";
- }
-}
-
-# Now, let's see whether rand accepts its argument
-{
- my($max, $min);
- $max = $min = rand(100);
- for (1..$reps) {
- my $n = rand(100);
- $max = $n if $n > $max;
- $min = $n if $n < $min;
- }
-
- # Hints for TEST 8
- #
- # This test checks to see that rand(100) really falls
- # within the range 0 - 100, and that the numbers produced
- # have a reasonably-large range among them.
- #
- if ($min < 0 or $max >= 100 or ($max - $min) < 65) {
- print "not ok 8\n";
- print "# min too low\n" if $min < 0;
- print "# max too high\n" if $max >= 100;
- print "# range too narrow\n" if ($max - $min) < 65;
- } else {
- print "ok 8\n";
- }
-
- # Hints for TEST 9
- #
- # This test checks that rand without an argument
- # is equivalent to rand(1).
- #
- $_ = 12345; # Just for fun.
- srand 12345;
- my $r = rand;
- srand 12345;
- if (rand(1) == $r) {
- print "ok 9\n";
- } else {
- print "not ok 9\n";
- print "# rand without arguments isn't rand(1)!\n";
- }
-
- # Hints for TEST 10
- #
- # This checks that rand without an argument is not
- # rand($_). (In case somebody got overzealous.)
- #
- if ($r >= 1) {
- print "not ok 10\n";
- print "# rand without arguments isn't under 1!\n";
- } else {
- print "ok 10\n";
- }
-}
-
-# Hints for TEST 11
-#
-# This test checks whether Perl called srand for you. This should
-# be the case in version 5.004 and later. Note: You must still
-# call srand if your code might ever be run on a pre-5.004 system!
-#
-AUTOSRAND:
-{
- unless ($Config{d_fork}) {
- # Skip this test. It's not likely to be system-specific, anyway.
- print "ok 11\n# Skipping this test on this platform.\n";
- last;
- }
-
- my($pid, $first);
- for (1..5) {
- my $PERL = (($^O eq 'VMS') ? "MCR $^X"
- : ($^O eq 'MSWin32') ? '.\perl'
- : './perl');
- $pid = open PERL, qq[$PERL -e "print rand"|];
- die "Couldn't pipe from perl: $!" unless defined $pid;
- if (defined $first) {
- if ($first ne <PERL>) {
- print "ok 11\n";
- last AUTOSRAND;
- }
- } else {
- $first = <PERL>;
- }
- close PERL or die "perl returned error code $?";
- }
- print "not ok 11\n# srand isn't being autocalled.\n";
-}
diff --git a/contrib/perl5/t/op/range.t b/contrib/perl5/t/op/range.t
deleted file mode 100755
index e8aecf5..0000000
--- a/contrib/perl5/t/op/range.t
+++ /dev/null
@@ -1,75 +0,0 @@
-#!./perl
-
-print "1..15\n";
-
-print join(':',1..5) eq '1:2:3:4:5' ? "ok 1\n" : "not ok 1\n";
-
-@foo = (1,2,3,4,5,6,7,8,9);
-@foo[2..4] = ('c','d','e');
-
-print join(':',@foo[$foo[0]..5]) eq '2:c:d:e:6' ? "ok 2\n" : "not ok 2\n";
-
-@bar[2..4] = ('c','d','e');
-print join(':',@bar[1..5]) eq ':c:d:e:' ? "ok 3\n" : "not ok 3\n";
-
-($a,@bcd[0..2],$e) = ('a','b','c','d','e');
-print join(':',$a,@bcd[0..2],$e) eq 'a:b:c:d:e' ? "ok 4\n" : "not ok 4\n";
-
-$x = 0;
-for (1..100) {
- $x += $_;
-}
-print $x == 5050 ? "ok 5\n" : "not ok 5 $x\n";
-
-$x = 0;
-for ((100,2..99,1)) {
- $x += $_;
-}
-print $x == 5050 ? "ok 6\n" : "not ok 6 $x\n";
-
-$x = join('','a'..'z');
-print $x eq 'abcdefghijklmnopqrstuvwxyz' ? "ok 7\n" : "not ok 7 $x\n";
-
-@x = 'A'..'ZZ';
-print @x == 27 * 26 ? "ok 8\n" : "not ok 8\n";
-
-@x = '09' .. '08'; # should produce '09', '10',... '99' (strange but true)
-print "not " unless join(",", @x) eq
- join(",", map {sprintf "%02d",$_} 9..99);
-print "ok 9\n";
-
-# same test with foreach (which is a separate implementation)
-@y = ();
-foreach ('09'..'08') {
- push(@y, $_);
-}
-print "not " unless join(",", @y) eq join(",", @x);
-print "ok 10\n";
-
-# check bounds
-@a = 0x7ffffffe..0x7fffffff;
-print "not " unless "@a" eq "2147483646 2147483647";
-print "ok 11\n";
-
-@a = -0x7fffffff..-0x7ffffffe;
-print "not " unless "@a" eq "-2147483647 -2147483646";
-print "ok 12\n";
-
-# check magic
-{
- my $bad = 0;
- local $SIG{'__WARN__'} = sub { $bad = 1 };
- my $x = 'a-e';
- $x =~ s/(\w)-(\w)/join ':', $1 .. $2/e;
- $bad = 1 unless $x eq 'a:b:c:d:e';
- print $bad ? "not ok 13\n" : "ok 13\n";
-}
-
-# Should use magical autoinc only when both are strings
-print "not " unless 0 == (() = "0"..-1);
-print "ok 14\n";
-
-for my $x ("0"..-1) {
- print "not ";
-}
-print "ok 15\n";
diff --git a/contrib/perl5/t/op/re_tests b/contrib/perl5/t/op/re_tests
deleted file mode 100644
index 6477d67..0000000
--- a/contrib/perl5/t/op/re_tests
+++ /dev/null
@@ -1,786 +0,0 @@
-abc abc y $& abc
-abc xbc n - -
-abc axc n - -
-abc abx n - -
-abc xabcy y $& abc
-abc ababc y $& abc
-ab*c abc y $& abc
-ab*bc abc y $& abc
-ab*bc abbc y $& abbc
-ab*bc abbbbc y $& abbbbc
-.{1} abbbbc y $& a
-.{3,4} abbbbc y $& abbb
-ab{0,}bc abbbbc y $& abbbbc
-ab+bc abbc y $& abbc
-ab+bc abc n - -
-ab+bc abq n - -
-ab{1,}bc abq n - -
-ab+bc abbbbc y $& abbbbc
-ab{1,}bc abbbbc y $& abbbbc
-ab{1,3}bc abbbbc y $& abbbbc
-ab{3,4}bc abbbbc y $& abbbbc
-ab{4,5}bc abbbbc n - -
-ab?bc abbc y $& abbc
-ab?bc abc y $& abc
-ab{0,1}bc abc y $& abc
-ab?bc abbbbc n - -
-ab?c abc y $& abc
-ab{0,1}c abc y $& abc
-^abc$ abc y $& abc
-^abc$ abcc n - -
-^abc abcc y $& abc
-^abc$ aabc n - -
-abc$ aabc y $& abc
-abc$ aabcd n - -
-^ abc y $&
-$ abc y $&
-a.c abc y $& abc
-a.c axc y $& axc
-a.*c axyzc y $& axyzc
-a.*c axyzd n - -
-a[bc]d abc n - -
-a[bc]d abd y $& abd
-a[b-d]e abd n - -
-a[b-d]e ace y $& ace
-a[b-d] aac y $& ac
-a[-b] a- y $& a-
-a[b-] a- y $& a-
-a[b-a] - c - Invalid [] range "b-a" before HERE mark in regex m/a[b-a << HERE ]/
-a[]b - c - Unmatched [ before HERE mark in regex m/a[ << HERE ]b/
-a[ - c - Unmatched [ before HERE mark in regex m/a[ << HERE /
-a] a] y $& a]
-a[]]b a]b y $& a]b
-a[^bc]d aed y $& aed
-a[^bc]d abd n - -
-a[^-b]c adc y $& adc
-a[^-b]c a-c n - -
-a[^]b]c a]c n - -
-a[^]b]c adc y $& adc
-\ba\b a- y - -
-\ba\b -a y - -
-\ba\b -a- y - -
-\by\b xy n - -
-\by\b yz n - -
-\by\b xyz n - -
-\Ba\B a- n - -
-\Ba\B -a n - -
-\Ba\B -a- n - -
-\By\b xy y - -
-\by\B yz y - -
-\By\B xyz y - -
-\w a y - -
-\w - n - -
-\W a n - -
-\W - y - -
-a\sb a b y - -
-a\sb a-b n - -
-a\Sb a b n - -
-a\Sb a-b y - -
-\d 1 y - -
-\d - n - -
-\D 1 n - -
-\D - y - -
-[\w] a y - -
-[\w] - n - -
-[\W] a n - -
-[\W] - y - -
-a[\s]b a b y - -
-a[\s]b a-b n - -
-a[\S]b a b n - -
-a[\S]b a-b y - -
-[\d] 1 y - -
-[\d] - n - -
-[\D] 1 n - -
-[\D] - y - -
-ab|cd abc y $& ab
-ab|cd abcd y $& ab
-()ef def y $&-$1 ef-
-*a - c - Quantifier follows nothing before HERE mark in regex m/* << HERE a/
-(*)b - c - Quantifier follows nothing before HERE mark in regex m/(* << HERE )b/
-$b b n - -
-a\ - c - Search pattern not terminated
-a\(b a(b y $&-$1 a(b-
-a\(*b ab y $& ab
-a\(*b a((b y $& a((b
-a\\b a\b y $& a\b
-abc) - c - Unmatched ) before HERE mark in regex m/abc) << HERE /
-(abc - c - Unmatched ( before HERE mark in regex m/( << HERE abc/
-((a)) abc y $&-$1-$2 a-a-a
-(a)b(c) abc y $&-$1-$2 abc-a-c
-a+b+c aabbabc y $& abc
-a{1,}b{1,}c aabbabc y $& abc
-a** - c - Nested quantifiers before HERE mark in regex m/a** << HERE /
-a.+?c abcabc y $& abc
-(a+|b)* ab y $&-$1 ab-b
-(a+|b){0,} ab y $&-$1 ab-b
-(a+|b)+ ab y $&-$1 ab-b
-(a+|b){1,} ab y $&-$1 ab-b
-(a+|b)? ab y $&-$1 a-a
-(a+|b){0,1} ab y $&-$1 a-a
-)( - c - Unmatched ) before HERE mark in regex m/) << HERE (/
-[^ab]* cde y $& cde
-abc n - -
-a* y $&
-([abc])*d abbbcd y $&-$1 abbbcd-c
-([abc])*bcd abcd y $&-$1 abcd-a
-a|b|c|d|e e y $& e
-(a|b|c|d|e)f ef y $&-$1 ef-e
-abcd*efg abcdefg y $& abcdefg
-ab* xabyabbbz y $& ab
-ab* xayabbbz y $& a
-(ab|cd)e abcde y $&-$1 cde-cd
-[abhgefdc]ij hij y $& hij
-^(ab|cd)e abcde n x$1y xy
-(abc|)ef abcdef y $&-$1 ef-
-(a|b)c*d abcd y $&-$1 bcd-b
-(ab|ab*)bc abc y $&-$1 abc-a
-a([bc]*)c* abc y $&-$1 abc-bc
-a([bc]*)(c*d) abcd y $&-$1-$2 abcd-bc-d
-a([bc]+)(c*d) abcd y $&-$1-$2 abcd-bc-d
-a([bc]*)(c+d) abcd y $&-$1-$2 abcd-b-cd
-a[bcd]*dcdcde adcdcde y $& adcdcde
-a[bcd]+dcdcde adcdcde n - -
-(ab|a)b*c abc y $&-$1 abc-ab
-((a)(b)c)(d) abcd y $1-$2-$3-$4 abc-a-b-d
-[a-zA-Z_][a-zA-Z0-9_]* alpha y $& alpha
-^a(bc+|b[eh])g|.h$ abh y $&-$1 bh-
-(bc+d$|ef*g.|h?i(j|k)) effgz y $&-$1-$2 effgz-effgz-
-(bc+d$|ef*g.|h?i(j|k)) ij y $&-$1-$2 ij-ij-j
-(bc+d$|ef*g.|h?i(j|k)) effg n - -
-(bc+d$|ef*g.|h?i(j|k)) bcdd n - -
-(bc+d$|ef*g.|h?i(j|k)) reffgz y $&-$1-$2 effgz-effgz-
-((((((((((a)))))))))) a y $10 a
-((((((((((a))))))))))\10 aa y $& aa
-((((((((((a))))))))))${bang} aa n - -
-((((((((((a))))))))))${bang} a! y $& a!
-(((((((((a))))))))) a y $& a
-multiple words of text uh-uh n - -
-multiple words multiple words, yeah y $& multiple words
-(.*)c(.*) abcde y $&-$1-$2 abcde-ab-de
-\((.*), (.*)\) (a, b) y ($2, $1) (b, a)
-[k] ab n - -
-abcd abcd y $&-\$&-\\$& abcd-$&-\abcd
-a(bc)d abcd y $1-\$1-\\$1 bc-$1-\bc
-a[-]?c ac y $& ac
-(abc)\1 abcabc y $1 abc
-([a-c]*)\1 abcabc y $1 abc
-\1 - c - Reference to nonexistent group
-\2 - c - Reference to nonexistent group
-(a)|\1 a y - -
-(a)|\1 x n - -
-(a)|\2 - c - Reference to nonexistent group
-(([a-c])b*?\2)* ababbbcbc y $&-$1-$2 ababb-bb-b
-(([a-c])b*?\2){3} ababbbcbc y $&-$1-$2 ababbbcbc-cbc-c
-((\3|b)\2(a)x)+ aaxabxbaxbbx n - -
-((\3|b)\2(a)x)+ aaaxabaxbaaxbbax y $&-$1-$2-$3 bbax-bbax-b-a
-((\3|b)\2(a)){2,} bbaababbabaaaaabbaaaabba y $&-$1-$2-$3 bbaaaabba-bba-b-a
-'abc'i ABC y $& ABC
-'abc'i XBC n - -
-'abc'i AXC n - -
-'abc'i ABX n - -
-'abc'i XABCY y $& ABC
-'abc'i ABABC y $& ABC
-'ab*c'i ABC y $& ABC
-'ab*bc'i ABC y $& ABC
-'ab*bc'i ABBC y $& ABBC
-'ab*?bc'i ABBBBC y $& ABBBBC
-'ab{0,}?bc'i ABBBBC y $& ABBBBC
-'ab+?bc'i ABBC y $& ABBC
-'ab+bc'i ABC n - -
-'ab+bc'i ABQ n - -
-'ab{1,}bc'i ABQ n - -
-'ab+bc'i ABBBBC y $& ABBBBC
-'ab{1,}?bc'i ABBBBC y $& ABBBBC
-'ab{1,3}?bc'i ABBBBC y $& ABBBBC
-'ab{3,4}?bc'i ABBBBC y $& ABBBBC
-'ab{4,5}?bc'i ABBBBC n - -
-'ab??bc'i ABBC y $& ABBC
-'ab??bc'i ABC y $& ABC
-'ab{0,1}?bc'i ABC y $& ABC
-'ab??bc'i ABBBBC n - -
-'ab??c'i ABC y $& ABC
-'ab{0,1}?c'i ABC y $& ABC
-'^abc$'i ABC y $& ABC
-'^abc$'i ABCC n - -
-'^abc'i ABCC y $& ABC
-'^abc$'i AABC n - -
-'abc$'i AABC y $& ABC
-'^'i ABC y $&
-'$'i ABC y $&
-'a.c'i ABC y $& ABC
-'a.c'i AXC y $& AXC
-'a.*?c'i AXYZC y $& AXYZC
-'a.*c'i AXYZD n - -
-'a[bc]d'i ABC n - -
-'a[bc]d'i ABD y $& ABD
-'a[b-d]e'i ABD n - -
-'a[b-d]e'i ACE y $& ACE
-'a[b-d]'i AAC y $& AC
-'a[-b]'i A- y $& A-
-'a[b-]'i A- y $& A-
-'a[b-a]'i - c - Invalid [] range "b-a" before HERE mark in regex m/a[b-a << HERE ]/
-'a[]b'i - c - Unmatched [ before HERE mark in regex m/a[ << HERE ]b/
-'a['i - c - Unmatched [ before HERE mark in regex m/a[ << HERE /
-'a]'i A] y $& A]
-'a[]]b'i A]B y $& A]B
-'a[^bc]d'i AED y $& AED
-'a[^bc]d'i ABD n - -
-'a[^-b]c'i ADC y $& ADC
-'a[^-b]c'i A-C n - -
-'a[^]b]c'i A]C n - -
-'a[^]b]c'i ADC y $& ADC
-'ab|cd'i ABC y $& AB
-'ab|cd'i ABCD y $& AB
-'()ef'i DEF y $&-$1 EF-
-'*a'i - c - Quantifier follows nothing before HERE mark in regex m/* << HERE a/
-'(*)b'i - c - Quantifier follows nothing before HERE mark in regex m/(* << HERE )b/
-'$b'i B n - -
-'a\'i - c - Search pattern not terminated
-'a\(b'i A(B y $&-$1 A(B-
-'a\(*b'i AB y $& AB
-'a\(*b'i A((B y $& A((B
-'a\\b'i A\B y $& A\B
-'abc)'i - c - Unmatched ) before HERE mark in regex m/abc) << HERE /
-'(abc'i - c - Unmatched ( before HERE mark in regex m/( << HERE abc/
-'((a))'i ABC y $&-$1-$2 A-A-A
-'(a)b(c)'i ABC y $&-$1-$2 ABC-A-C
-'a+b+c'i AABBABC y $& ABC
-'a{1,}b{1,}c'i AABBABC y $& ABC
-'a**'i - c - Nested quantifiers before HERE mark in regex m/a** << HERE /
-'a.+?c'i ABCABC y $& ABC
-'a.*?c'i ABCABC y $& ABC
-'a.{0,5}?c'i ABCABC y $& ABC
-'(a+|b)*'i AB y $&-$1 AB-B
-'(a+|b){0,}'i AB y $&-$1 AB-B
-'(a+|b)+'i AB y $&-$1 AB-B
-'(a+|b){1,}'i AB y $&-$1 AB-B
-'(a+|b)?'i AB y $&-$1 A-A
-'(a+|b){0,1}'i AB y $&-$1 A-A
-'(a+|b){0,1}?'i AB y $&-$1 -
-')('i - c - Unmatched ) before HERE mark in regex m/) << HERE (/
-'[^ab]*'i CDE y $& CDE
-'abc'i n - -
-'a*'i y $&
-'([abc])*d'i ABBBCD y $&-$1 ABBBCD-C
-'([abc])*bcd'i ABCD y $&-$1 ABCD-A
-'a|b|c|d|e'i E y $& E
-'(a|b|c|d|e)f'i EF y $&-$1 EF-E
-'abcd*efg'i ABCDEFG y $& ABCDEFG
-'ab*'i XABYABBBZ y $& AB
-'ab*'i XAYABBBZ y $& A
-'(ab|cd)e'i ABCDE y $&-$1 CDE-CD
-'[abhgefdc]ij'i HIJ y $& HIJ
-'^(ab|cd)e'i ABCDE n x$1y XY
-'(abc|)ef'i ABCDEF y $&-$1 EF-
-'(a|b)c*d'i ABCD y $&-$1 BCD-B
-'(ab|ab*)bc'i ABC y $&-$1 ABC-A
-'a([bc]*)c*'i ABC y $&-$1 ABC-BC
-'a([bc]*)(c*d)'i ABCD y $&-$1-$2 ABCD-BC-D
-'a([bc]+)(c*d)'i ABCD y $&-$1-$2 ABCD-BC-D
-'a([bc]*)(c+d)'i ABCD y $&-$1-$2 ABCD-B-CD
-'a[bcd]*dcdcde'i ADCDCDE y $& ADCDCDE
-'a[bcd]+dcdcde'i ADCDCDE n - -
-'(ab|a)b*c'i ABC y $&-$1 ABC-AB
-'((a)(b)c)(d)'i ABCD y $1-$2-$3-$4 ABC-A-B-D
-'[a-zA-Z_][a-zA-Z0-9_]*'i ALPHA y $& ALPHA
-'^a(bc+|b[eh])g|.h$'i ABH y $&-$1 BH-
-'(bc+d$|ef*g.|h?i(j|k))'i EFFGZ y $&-$1-$2 EFFGZ-EFFGZ-
-'(bc+d$|ef*g.|h?i(j|k))'i IJ y $&-$1-$2 IJ-IJ-J
-'(bc+d$|ef*g.|h?i(j|k))'i EFFG n - -
-'(bc+d$|ef*g.|h?i(j|k))'i BCDD n - -
-'(bc+d$|ef*g.|h?i(j|k))'i REFFGZ y $&-$1-$2 EFFGZ-EFFGZ-
-'((((((((((a))))))))))'i A y $10 A
-'((((((((((a))))))))))\10'i AA y $& AA
-'((((((((((a))))))))))${bang}'i AA n - -
-'((((((((((a))))))))))${bang}'i A! y $& A!
-'(((((((((a)))))))))'i A y $& A
-'(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))'i A y $1 A
-'(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))'i C y $1 C
-'multiple words of text'i UH-UH n - -
-'multiple words'i MULTIPLE WORDS, YEAH y $& MULTIPLE WORDS
-'(.*)c(.*)'i ABCDE y $&-$1-$2 ABCDE-AB-DE
-'\((.*), (.*)\)'i (A, B) y ($2, $1) (B, A)
-'[k]'i AB n - -
-'abcd'i ABCD y $&-\$&-\\$& ABCD-$&-\ABCD
-'a(bc)d'i ABCD y $1-\$1-\\$1 BC-$1-\BC
-'a[-]?c'i AC y $& AC
-'(abc)\1'i ABCABC y $1 ABC
-'([a-c]*)\1'i ABCABC y $1 ABC
-a(?!b). abad y $& ad
-a(?=d). abad y $& ad
-a(?=c|d). abad y $& ad
-a(?:b|c|d)(.) ace y $1 e
-a(?:b|c|d)*(.) ace y $1 e
-a(?:b|c|d)+?(.) ace y $1 e
-a(?:b|c|d)+?(.) acdbcdbe y $1 d
-a(?:b|c|d)+(.) acdbcdbe y $1 e
-a(?:b|c|d){2}(.) acdbcdbe y $1 b
-a(?:b|c|d){4,5}(.) acdbcdbe y $1 b
-a(?:b|c|d){4,5}?(.) acdbcdbe y $1 d
-((foo)|(bar))* foobar y $1-$2-$3 bar-foo-bar
-:(?: - c - Sequence (? incomplete
-a(?:b|c|d){6,7}(.) acdbcdbe y $1 e
-a(?:b|c|d){6,7}?(.) acdbcdbe y $1 e
-a(?:b|c|d){5,6}(.) acdbcdbe y $1 e
-a(?:b|c|d){5,6}?(.) acdbcdbe y $1 b
-a(?:b|c|d){5,7}(.) acdbcdbe y $1 e
-a(?:b|c|d){5,7}?(.) acdbcdbe y $1 b
-a(?:b|(c|e){1,2}?|d)+?(.) ace y $1$2 ce
-^(.+)?B AB y $1 A
-^([^a-z])|(\^)$ . y $1 .
-^[<>]& <&OUT y $& <&
-^(a\1?){4}$ aaaaaaaaaa y $1 aaaa
-^(a\1?){4}$ aaaaaaaaa n - -
-^(a\1?){4}$ aaaaaaaaaaa n - -
-^(a(?(1)\1)){4}$ aaaaaaaaaa y $1 aaaa
-^(a(?(1)\1)){4}$ aaaaaaaaa n - -
-^(a(?(1)\1)){4}$ aaaaaaaaaaa n - -
-((a{4})+) aaaaaaaaa y $1 aaaaaaaa
-(((aa){2})+) aaaaaaaaaa y $1 aaaaaaaa
-(((a{2}){2})+) aaaaaaaaaa y $1 aaaaaaaa
-(?:(f)(o)(o)|(b)(a)(r))* foobar y $1:$2:$3:$4:$5:$6 f:o:o:b:a:r
-(?<=a)b ab y $& b
-(?<=a)b cb n - -
-(?<=a)b b n - -
-(?<!c)b ab y $& b
-(?<!c)b cb n - -
-(?<!c)b b y - -
-(?<!c)b b y $& b
-(?<%)b - c - Sequence (?<%...) not recognized before HERE mark in regex m/(?<% << HERE )b/
-(?:..)*a aba y $& aba
-(?:..)*?a aba y $& a
-^(?:b|a(?=(.)))*\1 abc y $& ab
-^(){3,5} abc y a$1 a
-^(a+)*ax aax y $1 a
-^((a|b)+)*ax aax y $1 a
-^((a|bc)+)*ax aax y $1 a
-(a|x)*ab cab y y$1 y
-(a)*ab cab y y$1 y
-(?:(?i)a)b ab y $& ab
-((?i)a)b ab y $&:$1 ab:a
-(?:(?i)a)b Ab y $& Ab
-((?i)a)b Ab y $&:$1 Ab:A
-(?:(?i)a)b aB n - -
-((?i)a)b aB n - -
-(?i:a)b ab y $& ab
-((?i:a))b ab y $&:$1 ab:a
-(?i:a)b Ab y $& Ab
-((?i:a))b Ab y $&:$1 Ab:A
-(?i:a)b aB n - -
-((?i:a))b aB n - -
-'(?:(?-i)a)b'i ab y $& ab
-'((?-i)a)b'i ab y $&:$1 ab:a
-'(?:(?-i)a)b'i aB y $& aB
-'((?-i)a)b'i aB y $&:$1 aB:a
-'(?:(?-i)a)b'i Ab n - -
-'((?-i)a)b'i Ab n - -
-'(?:(?-i)a)b'i aB y $& aB
-'((?-i)a)b'i aB y $1 a
-'(?:(?-i)a)b'i AB n - -
-'((?-i)a)b'i AB n - -
-'(?-i:a)b'i ab y $& ab
-'((?-i:a))b'i ab y $&:$1 ab:a
-'(?-i:a)b'i aB y $& aB
-'((?-i:a))b'i aB y $&:$1 aB:a
-'(?-i:a)b'i Ab n - -
-'((?-i:a))b'i Ab n - -
-'(?-i:a)b'i aB y $& aB
-'((?-i:a))b'i aB y $1 a
-'(?-i:a)b'i AB n - -
-'((?-i:a))b'i AB n - -
-'((?-i:a.))b'i a\nB n - -
-'((?s-i:a.))b'i a\nB y $1 a\n
-'((?s-i:a.))b'i B\nB n - -
-(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b))) cabbbb y $& cabbbb
-(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb))) caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb y $& caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-'(ab)\d\1'i Ab4ab y $1 Ab
-'(ab)\d\1'i ab4Ab y $1 ab
-foo\w*\d{4}baz foobar1234baz y $& foobar1234baz
-a(?{})b cabd y $& ab
-a(?{)b - c - Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE )b/
-a(?{{})b - c - Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE {})b/
-a(?{}})b - c -
-a(?{"{"})b - c - Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE "{"})b/
-a(?{"\{"})b cabd y $& ab
-a(?{"{"}})b - c - Unmatched right curly bracket
-a(?{$bl="\{"}).b caxbd y $bl {
-x(~~)*(?:(?:F)?)? x~~ y - -
-^a(?#xxx){3}c aaac y $& aaac
-'^a (?#xxx) (?#yyy) {3}c'x aaac y $& aaac
-(?<![cd])b dbcb n - -
-(?<![cd])[ab] dbaacb y $& a
-(?<!(c|d))b dbcb n - -
-(?<!(c|d))[ab] dbaacb y $& a
-(?<!cd)[ab] cdaccb y $& b
-^(?:a?b?)*$ a-- n - -
-((?s)^a(.))((?m)^b$) a\nb\nc\n y $1;$2;$3 a\n;\n;b
-((?m)^b$) a\nb\nc\n y $1 b
-(?m)^b a\nb\n y $& b
-(?m)^(b) a\nb\n y $1 b
-((?m)^b) a\nb\n y $1 b
-\n((?m)^b) a\nb\n y $1 b
-((?s).)c(?!.) a\nb\nc\n y $1 \n
-((?s).)c(?!.) a\nb\nc\n y $1:$& \n:\nc
-((?s)b.)c(?!.) a\nb\nc\n y $1 b\n
-((?s)b.)c(?!.) a\nb\nc\n y $1:$& b\n:b\nc
-^b a\nb\nc\n n - -
-()^b a\nb\nc\n n - -
-((?m)^b) a\nb\nc\n y $1 b
-(?(1)a|b) a n - -
-(?(1)b|a) a y $& a
-(x)?(?(1)a|b) a n - -
-(x)?(?(1)b|a) a y $& a
-()?(?(1)b|a) a y $& a
-()(?(1)b|a) a n - -
-()?(?(1)a|b) a y $& a
-^(\()?blah(?(1)(\)))$ (blah) y $2 )
-^(\()?blah(?(1)(\)))$ blah y ($2) ()
-^(\()?blah(?(1)(\)))$ blah) n - -
-^(\()?blah(?(1)(\)))$ (blah n - -
-^(\(+)?blah(?(1)(\)))$ (blah) y $2 )
-^(\(+)?blah(?(1)(\)))$ blah y ($2) ()
-^(\(+)?blah(?(1)(\)))$ blah) n - -
-^(\(+)?blah(?(1)(\)))$ (blah n - -
-(?(1?)a|b) a c - Switch condition not recognized before HERE mark in regex m/(?(1? << HERE )a|b)/
-(?(1)a|b|c) a c - Switch (?(condition)... contains too many branches
-(?(?{0})a|b) a n - -
-(?(?{0})b|a) a y $& a
-(?(?{1})b|a) a n - -
-(?(?{1})a|b) a y $& a
-(?(?!a)a|b) a n - -
-(?(?!a)b|a) a y $& a
-(?(?=a)b|a) a n - -
-(?(?=a)a|b) a y $& a
-(?=(a+?))(\1ab) aaab y $2 aab
-^(?=(a+?))\1ab aaab n - -
-(\w+:)+ one: y $1 one:
-$(?<=^(a)) a y $1 a
-(?=(a+?))(\1ab) aaab y $2 aab
-^(?=(a+?))\1ab aaab n - -
-([\w:]+::)?(\w+)$ abcd: n - -
-([\w:]+::)?(\w+)$ abcd y $1-$2 -abcd
-([\w:]+::)?(\w+)$ xy:z:::abcd y $1-$2 xy:z:::-abcd
-^[^bcd]*(c+) aexycd y $1 c
-(a*)b+ caab y $1 aa
-([\w:]+::)?(\w+)$ abcd: n - -
-([\w:]+::)?(\w+)$ abcd y $1-$2 -abcd
-([\w:]+::)?(\w+)$ xy:z:::abcd y $1-$2 xy:z:::-abcd
-^[^bcd]*(c+) aexycd y $1 c
-(?{$a=2})a*aa(?{local$a=$a+1})k*c(?{$b=$a}) yaaxxaaaacd y $b 3
-(?{$a=2})(a(?{local$a=$a+1}))*aak*c(?{$b=$a}) yaaxxaaaacd y $b 4
-(>a+)ab aaab n - -
-(?>a+)b aaab y - -
-([[:]+) a:[b]: y $1 :[
-([[=]+) a=[b]= y $1 =[
-([[.]+) a.[b]. y $1 .[
-[a[:xyz: - c - Unmatched [ before HERE mark in regex m/[ << HERE a[:xyz:/
-[a[:xyz:] - c - POSIX class [:xyz:] unknown before HERE mark in regex m/[a[:xyz:] << HERE /
-[a[:]b[:c] abc y $& abc
-([a[:xyz:]b]+) pbaq c - POSIX class [:xyz:] unknown before HERE mark in regex m/([a[:xyz:] << HERE b]+)/
-[a[:]b[:c] abc y $& abc
-([[:alpha:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd
-([[:alnum:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy
-([[:ascii:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__-- ${nulnul}
-([[:cntrl:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ${nulnul}
-([[:digit:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 01
-([[:graph:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__--
-([[:lower:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 cd
-([[:print:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__--
-([[:punct:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 __--
-([[:space:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1
-([[:word:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__
-([[:upper:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 AB
-([[:xdigit:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01
-([[:^alpha:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 01
-([[:^alnum:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 __-- ${nulnul}${ffff}
-([[:^ascii:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ${ffff}
-([[:^cntrl:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__--
-([[:^digit:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd
-([[:^lower:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 AB
-([[:^print:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ${nulnul}${ffff}
-([[:^punct:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy
-([[:^space:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 ABcd01Xy__--
-([[:^word:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 -- ${nulnul}${ffff}
-([[:^upper:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 cd01
-([[:^xdigit:]]+) ABcd01Xy__-- ${nulnul}${ffff} y $1 Xy__-- ${nulnul}${ffff}
-[[:foo:]] - c - POSIX class [:foo:] unknown before HERE mark in regex m/[[:foo:] << HERE ]/
-[[:^foo:]] - c - POSIX class [:^foo:] unknown before HERE mark in regex m/[[:^foo:] << HERE ]/
-((?>a+)b) aaab y $1 aaab
-(?>(a+))b aaab y $1 aaa
-((?>[^()]+)|\([^()]*\))+ ((abc(ade)ufh()()x y $& abc(ade)ufh()()x
-(?<=x+)y - c - Variable length lookbehind not implemented
-a{37,17} - c - Can't do {n,m} with n > m
-\Z a\nb\n y $-[0] 3
-\z a\nb\n y $-[0] 4
-$ a\nb\n y $-[0] 3
-\Z b\na\n y $-[0] 3
-\z b\na\n y $-[0] 4
-$ b\na\n y $-[0] 3
-\Z b\na y $-[0] 3
-\z b\na y $-[0] 3
-$ b\na y $-[0] 3
-'\Z'm a\nb\n y $-[0] 3
-'\z'm a\nb\n y $-[0] 4
-'$'m a\nb\n y $-[0] 1
-'\Z'm b\na\n y $-[0] 3
-'\z'm b\na\n y $-[0] 4
-'$'m b\na\n y $-[0] 1
-'\Z'm b\na y $-[0] 3
-'\z'm b\na y $-[0] 3
-'$'m b\na y $-[0] 1
-a\Z a\nb\n n - -
-a\z a\nb\n n - -
-a$ a\nb\n n - -
-a\Z b\na\n y $-[0] 2
-a\z b\na\n n - -
-a$ b\na\n y $-[0] 2
-a\Z b\na y $-[0] 2
-a\z b\na y $-[0] 2
-a$ b\na y $-[0] 2
-'a\Z'm a\nb\n bn - -
-'a\z'm a\nb\n n - -
-'a$'m a\nb\n y $-[0] 0
-'a\Z'm b\na\n y $-[0] 2
-'a\z'm b\na\n n - -
-'a$'m b\na\n y $-[0] 2
-'a\Z'm b\na y $-[0] 2
-'a\z'm b\na y $-[0] 2
-'a$'m b\na y $-[0] 2
-aa\Z aa\nb\n n - -
-aa\z aa\nb\n n - -
-aa$ aa\nb\n n - -
-aa\Z b\naa\n y $-[0] 2
-aa\z b\naa\n n - -
-aa$ b\naa\n y $-[0] 2
-aa\Z b\naa y $-[0] 2
-aa\z b\naa y $-[0] 2
-aa$ b\naa y $-[0] 2
-'aa\Z'm aa\nb\n bn - -
-'aa\z'm aa\nb\n n - -
-'aa$'m aa\nb\n y $-[0] 0
-'aa\Z'm b\naa\n y $-[0] 2
-'aa\z'm b\naa\n n - -
-'aa$'m b\naa\n y $-[0] 2
-'aa\Z'm b\naa y $-[0] 2
-'aa\z'm b\naa y $-[0] 2
-'aa$'m b\naa y $-[0] 2
-aa\Z ac\nb\n n - -
-aa\z ac\nb\n n - -
-aa$ ac\nb\n n - -
-aa\Z b\nac\n n - -
-aa\z b\nac\n n - -
-aa$ b\nac\n n - -
-aa\Z b\nac n - -
-aa\z b\nac n - -
-aa$ b\nac n - -
-'aa\Z'm ac\nb\n n - -
-'aa\z'm ac\nb\n n - -
-'aa$'m ac\nb\n n - -
-'aa\Z'm b\nac\n n - -
-'aa\z'm b\nac\n n - -
-'aa$'m b\nac\n n - -
-'aa\Z'm b\nac n - -
-'aa\z'm b\nac n - -
-'aa$'m b\nac n - -
-aa\Z ca\nb\n n - -
-aa\z ca\nb\n n - -
-aa$ ca\nb\n n - -
-aa\Z b\nca\n n - -
-aa\z b\nca\n n - -
-aa$ b\nca\n n - -
-aa\Z b\nca n - -
-aa\z b\nca n - -
-aa$ b\nca n - -
-'aa\Z'm ca\nb\n n - -
-'aa\z'm ca\nb\n n - -
-'aa$'m ca\nb\n n - -
-'aa\Z'm b\nca\n n - -
-'aa\z'm b\nca\n n - -
-'aa$'m b\nca\n n - -
-'aa\Z'm b\nca n - -
-'aa\z'm b\nca n - -
-'aa$'m b\nca n - -
-ab\Z ab\nb\n n - -
-ab\z ab\nb\n n - -
-ab$ ab\nb\n n - -
-ab\Z b\nab\n y $-[0] 2
-ab\z b\nab\n n - -
-ab$ b\nab\n y $-[0] 2
-ab\Z b\nab y $-[0] 2
-ab\z b\nab y $-[0] 2
-ab$ b\nab y $-[0] 2
-'ab\Z'm ab\nb\n bn - -
-'ab\z'm ab\nb\n n - -
-'ab$'m ab\nb\n y $-[0] 0
-'ab\Z'm b\nab\n y $-[0] 2
-'ab\z'm b\nab\n n - -
-'ab$'m b\nab\n y $-[0] 2
-'ab\Z'm b\nab y $-[0] 2
-'ab\z'm b\nab y $-[0] 2
-'ab$'m b\nab y $-[0] 2
-ab\Z ac\nb\n n - -
-ab\z ac\nb\n n - -
-ab$ ac\nb\n n - -
-ab\Z b\nac\n n - -
-ab\z b\nac\n n - -
-ab$ b\nac\n n - -
-ab\Z b\nac n - -
-ab\z b\nac n - -
-ab$ b\nac n - -
-'ab\Z'm ac\nb\n n - -
-'ab\z'm ac\nb\n n - -
-'ab$'m ac\nb\n n - -
-'ab\Z'm b\nac\n n - -
-'ab\z'm b\nac\n n - -
-'ab$'m b\nac\n n - -
-'ab\Z'm b\nac n - -
-'ab\z'm b\nac n - -
-'ab$'m b\nac n - -
-ab\Z ca\nb\n n - -
-ab\z ca\nb\n n - -
-ab$ ca\nb\n n - -
-ab\Z b\nca\n n - -
-ab\z b\nca\n n - -
-ab$ b\nca\n n - -
-ab\Z b\nca n - -
-ab\z b\nca n - -
-ab$ b\nca n - -
-'ab\Z'm ca\nb\n n - -
-'ab\z'm ca\nb\n n - -
-'ab$'m ca\nb\n n - -
-'ab\Z'm b\nca\n n - -
-'ab\z'm b\nca\n n - -
-'ab$'m b\nca\n n - -
-'ab\Z'm b\nca n - -
-'ab\z'm b\nca n - -
-'ab$'m b\nca n - -
-abb\Z abb\nb\n n - -
-abb\z abb\nb\n n - -
-abb$ abb\nb\n n - -
-abb\Z b\nabb\n y $-[0] 2
-abb\z b\nabb\n n - -
-abb$ b\nabb\n y $-[0] 2
-abb\Z b\nabb y $-[0] 2
-abb\z b\nabb y $-[0] 2
-abb$ b\nabb y $-[0] 2
-'abb\Z'm abb\nb\n bn - -
-'abb\z'm abb\nb\n n - -
-'abb$'m abb\nb\n y $-[0] 0
-'abb\Z'm b\nabb\n y $-[0] 2
-'abb\z'm b\nabb\n n - -
-'abb$'m b\nabb\n y $-[0] 2
-'abb\Z'm b\nabb y $-[0] 2
-'abb\z'm b\nabb y $-[0] 2
-'abb$'m b\nabb y $-[0] 2
-abb\Z ac\nb\n n - -
-abb\z ac\nb\n n - -
-abb$ ac\nb\n n - -
-abb\Z b\nac\n n - -
-abb\z b\nac\n n - -
-abb$ b\nac\n n - -
-abb\Z b\nac n - -
-abb\z b\nac n - -
-abb$ b\nac n - -
-'abb\Z'm ac\nb\n n - -
-'abb\z'm ac\nb\n n - -
-'abb$'m ac\nb\n n - -
-'abb\Z'm b\nac\n n - -
-'abb\z'm b\nac\n n - -
-'abb$'m b\nac\n n - -
-'abb\Z'm b\nac n - -
-'abb\z'm b\nac n - -
-'abb$'m b\nac n - -
-abb\Z ca\nb\n n - -
-abb\z ca\nb\n n - -
-abb$ ca\nb\n n - -
-abb\Z b\nca\n n - -
-abb\z b\nca\n n - -
-abb$ b\nca\n n - -
-abb\Z b\nca n - -
-abb\z b\nca n - -
-abb$ b\nca n - -
-'abb\Z'm ca\nb\n n - -
-'abb\z'm ca\nb\n n - -
-'abb$'m ca\nb\n n - -
-'abb\Z'm b\nca\n n - -
-'abb\z'm b\nca\n n - -
-'abb$'m b\nca\n n - -
-'abb\Z'm b\nca n - -
-'abb\z'm b\nca n - -
-'abb$'m b\nca n - -
-(^|x)(c) ca y $2 c
-a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz x n - -
-a(?{$a=2;$b=3;($b)=$a})b yabz y $b 2
-round\(((?>[^()]+))\) _I(round(xs * sz),1) y $1 xs * sz
-'((?x:.) )' x y $1- x -
-'((?-x:.) )'x x y $1- x-
-foo.bart foo.bart y - -
-'^d[x][x][x]'m abcd\ndxxx y - -
-.X(.+)+X bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.X(.+)+XX bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.XX(.+)+X bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.X(.+)+X bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.X(.+)+XX bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.XX(.+)+X bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.X(.+)+[X] bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.X(.+)+[X][X] bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.XX(.+)+[X] bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.X(.+)+[X] bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.X(.+)+[X][X] bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.XX(.+)+[X] bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.[X](.+)+[X] bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.[X](.+)+[X][X] bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.[X][X](.+)+[X] bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y - -
-.[X](.+)+[X] bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.[X](.+)+[X][X] bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-.[X][X](.+)+[X] bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n - -
-tt+$ xxxtt y - -
-([a-\d]+) za-9z y $1 a-9
-([\d-z]+) a0-za y $1 0-z
-([\d-\s]+) a0- z y $1 0-
-([a-[:digit:]]+) za-9z y $1 a-9
-([[:digit:]-z]+) =0-z= y $1 0-z
-([[:digit:]-[:alpha:]]+) =0-z= y $1 0-z
-\GX.*X aaaXbX n - -
-(\d+\.\d+) 3.1415926 y $1 3.1415926
-(\ba.{0,10}br) have a web browser y $1 a web br
-'\.c(pp|xx|c)?$'i Changes n - -
-'\.c(pp|xx|c)?$'i IO.c y - -
-'(\.c(pp|xx|c)?$)'i IO.c y $1 .c
-^([a-z]:) C:/ n - -
-'^\S\s+aa$'m \nx aa y - -
-(^|a)b ab y - -
-^([ab]*?)(b)?(c)$ abac y -$2- --
-(\w)?(abc)\1b abcab n - -
-^(?:.,){2}c a,b,c y - -
-^(.,){2}c a,b,c y $1 b,
-^(?:[^,]*,){2}c a,b,c y - -
-^([^,]*,){2}c a,b,c y $1 b,
-^([^,]*,){3}d aaa,b,c,d y $1 c,
-^([^,]*,){3,}d aaa,b,c,d y $1 c,
-^([^,]*,){0,3}d aaa,b,c,d y $1 c,
-^([^,]{1,3},){3}d aaa,b,c,d y $1 c,
-^([^,]{1,3},){3,}d aaa,b,c,d y $1 c,
-^([^,]{1,3},){0,3}d aaa,b,c,d y $1 c,
-^([^,]{1,},){3}d aaa,b,c,d y $1 c,
-^([^,]{1,},){3,}d aaa,b,c,d y $1 c,
-^([^,]{1,},){0,3}d aaa,b,c,d y $1 c,
-^([^,]{0,3},){3}d aaa,b,c,d y $1 c,
-^([^,]{0,3},){3,}d aaa,b,c,d y $1 c,
-^([^,]{0,3},){0,3}d aaa,b,c,d y $1 c,
-(?i) y - -
-'(?!\A)x'm a\nxb\n y - -
-^(a(b)?)+$ aba y -$1-$2- -a--
-^(aa(bb)?)+$ aabbaa y -$1-$2- -aa--
-'^.{9}abc.*\n'm 123\nabcabcabcabc\n y - -
-^(a)?a$ a y -$1- --
-^(a)?(?(1)a|b)+$ a n - -
-^(a\1?)(a\1?)(a\2?)(a\3?)$ aaaaaa y $1,$2,$3,$4 a,aa,a,aa
-^(a\1?){4}$ aaaaaa y $1 aa
-^(0+)?(?:x(1))? x1 y - -
-^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))? 012cxx0190 y - -
-^(b+?|a){1,2}c bbbac y $1 a
-^(b+?|a){1,2}c bbbbac y $1 a
-\((\w\. \w+)\) cd. (A. Tw) y -$1- -A. Tw-
-((?:aaaa|bbbb)cccc)? aaaacccc y - -
-((?:aaaa|bbbb)cccc)? bbbbcccc y - -
diff --git a/contrib/perl5/t/op/read.t b/contrib/perl5/t/op/read.t
deleted file mode 100755
index 2746970..0000000
--- a/contrib/perl5/t/op/read.t
+++ /dev/null
@@ -1,19 +0,0 @@
-#!./perl
-
-# $RCSfile: read.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:17 $
-
-print "1..4\n";
-
-
-open(FOO,'op/read.t') || open(FOO,'t/op/read.t') || die "Can't open op.read";
-seek(FOO,4,0);
-$got = read(FOO,$buf,4);
-
-print ($got == 4 ? "ok 1\n" : "not ok 1\n");
-print ($buf eq "perl" ? "ok 2\n" : "not ok 2 :$buf:\n");
-
-seek (FOO,0,2) || seek(FOO,20000,0);
-$got = read(FOO,$buf,4);
-
-print ($got == 0 ? "ok 3\n" : "not ok 3\n");
-print ($buf eq "" ? "ok 4\n" : "not ok 4\n");
diff --git a/contrib/perl5/t/op/readdir.t b/contrib/perl5/t/op/readdir.t
deleted file mode 100755
index 00199b0..0000000
--- a/contrib/perl5/t/op/readdir.t
+++ /dev/null
@@ -1,40 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-eval 'opendir(NOSUCH, "no/such/directory");';
-if ($@) { print "1..0\n"; exit; }
-
-print "1..3\n";
-
-for $i (1..2000) {
- local *OP;
- opendir(OP, "op") or die "can't opendir: $!";
- # should auto-closedir() here
-}
-
-if (opendir(OP, "op")) { print "ok 1\n"; } else { print "not ok 1\n"; }
-@D = grep(/^[^\.].*\.t$/i, readdir(OP));
-closedir(OP);
-
-##
-## This range will have to adjust as the number of tests expands,
-## as it's counting the number of .t files in src/t
-##
-if (@D > 90 && @D < 110) { print "ok 2\n"; } else { print "not ok 2\n"; }
-
-@R = sort @D;
-@G = sort <op/*.t>;
-if ($G[0] =~ m#.*\](\w+\.t)#i) {
- # grep is to convert filespecs returned from glob under VMS to format
- # identical to that returned by readdir
- @G = grep(s#.*\](\w+\.t).*#op/$1#i,<op/*.t>);
-}
-while (@R && @G && "op/".$R[0] eq $G[0]) {
- shift(@R);
- shift(@G);
-}
-if (@R == 0 && @G == 0) { print "ok 3\n"; } else { print "not ok 3\n"; }
diff --git a/contrib/perl5/t/op/recurse.t b/contrib/perl5/t/op/recurse.t
deleted file mode 100755
index dc823ed..0000000
--- a/contrib/perl5/t/op/recurse.t
+++ /dev/null
@@ -1,116 +0,0 @@
-#!./perl
-
-#
-# test recursive functions.
-#
-
-print "1..25\n";
-
-sub gcd ($$) {
- return gcd($_[0] - $_[1], $_[1]) if ($_[0] > $_[1]);
- return gcd($_[0], $_[1] - $_[0]) if ($_[0] < $_[1]);
- $_[0];
-}
-
-sub factorial ($) {
- $_[0] < 2 ? 1 : $_[0] * factorial($_[0] - 1);
-}
-
-sub fibonacci ($) {
- $_[0] < 2 ? 1 : fibonacci($_[0] - 2) + fibonacci($_[0] - 1);
-}
-
-# Highly recursive, highly aggressive.
-# Kids, don't try this at home.
-#
-# For example ackermann(4,1) will take quite a long time.
-# It will simply eat away your memory. Trust me.
-
-sub ackermann ($$) {
- return $_[1] + 1 if ($_[0] == 0);
- return ackermann($_[0] - 1, 1) if ($_[1] == 0);
- ackermann($_[0] - 1, ackermann($_[0], $_[1] - 1));
-}
-
-# Highly recursive, highly boring.
-
-sub takeuchi ($$$) {
- $_[1] < $_[0] ?
- takeuchi(takeuchi($_[0] - 1, $_[1], $_[2]),
- takeuchi($_[1] - 1, $_[2], $_[0]),
- takeuchi($_[2] - 1, $_[0], $_[1]))
- : $_[2];
-}
-
-print 'not ' unless (($d = gcd(1147, 1271)) == 31);
-print "ok 1\n";
-print "# gcd(1147, 1271) = $d\n";
-
-print 'not ' unless (($d = gcd(1908, 2016)) == 36);
-print "ok 2\n";
-print "# gcd(1908, 2016) = $d\n";
-
-print 'not ' unless (($f = factorial(10)) == 3628800);
-print "ok 3\n";
-print "# factorial(10) = $f\n";
-
-print 'not ' unless (($f = factorial(factorial(3))) == 720);
-print "ok 4\n";
-print "# factorial(factorial(3)) = $f\n";
-
-print 'not ' unless (($f = fibonacci(10)) == 89);
-print "ok 5\n";
-print "# fibonacci(10) = $f\n";
-
-print 'not ' unless (($f = fibonacci(fibonacci(7))) == 17711);
-print "ok 6\n";
-print "# fibonacci(fibonacci(7)) = $f\n";
-
-$i = 7;
-
-@ack = qw(1 2 3 4 2 3 4 5 3 5 7 9 5 13 29 61);
-
-for $x (0..3) {
- for $y (0..3) {
- $a = ackermann($x, $y);
- print 'not ' unless ($a == shift(@ack));
- print "ok ", $i++, "\n";
- print "# ackermann($x, $y) = $a\n";
- }
-}
-
-($x, $y, $z) = (18, 12, 6);
-
-print 'not ' unless (($t = takeuchi($x, $y, $z)) == $z + 1);
-print "ok ", $i++, "\n";
-print "# takeuchi($x, $y, $z) = $t\n";
-
-{
- sub get_first1 {
- get_list1(@_)->[0];
- }
-
- sub get_list1 {
- return [24] unless $_[0];
- my $u = get_first1(0);
- [$u];
- }
- my $x = get_first1(1);
- print "ok $x\n";
-}
-
-{
- sub get_first2 {
- return get_list2(@_)->[0];
- }
-
- sub get_list2 {
- return [25] unless $_[0];
- my $u = get_first2(0);
- return [$u];
- }
- my $x = get_first2(1);
- print "ok $x\n";
-}
-
-$i = 26;
diff --git a/contrib/perl5/t/op/ref.t b/contrib/perl5/t/op/ref.t
deleted file mode 100755
index a2baab8..0000000
--- a/contrib/perl5/t/op/ref.t
+++ /dev/null
@@ -1,295 +0,0 @@
-#!./perl
-
-print "1..56\n";
-
-# Test glob operations.
-
-$bar = "ok 1\n";
-$foo = "ok 2\n";
-{
- local(*foo) = *bar;
- print $foo;
-}
-print $foo;
-
-$baz = "ok 3\n";
-$foo = "ok 4\n";
-{
- local(*foo) = 'baz';
- print $foo;
-}
-print $foo;
-
-$foo = "ok 6\n";
-{
- local(*foo);
- print $foo;
- $foo = "ok 5\n";
- print $foo;
-}
-print $foo;
-
-# Test fake references.
-
-$baz = "ok 7\n";
-$bar = 'baz';
-$foo = 'bar';
-print $$$foo;
-
-# Test real references.
-
-$FOO = \$BAR;
-$BAR = \$BAZ;
-$BAZ = "ok 8\n";
-print $$$FOO;
-
-# Test references to real arrays.
-
-@ary = (9,10,11,12);
-$ref[0] = \@a;
-$ref[1] = \@b;
-$ref[2] = \@c;
-$ref[3] = \@d;
-for $i (3,1,2,0) {
- push(@{$ref[$i]}, "ok $ary[$i]\n");
-}
-print @a;
-print ${$ref[1]}[0];
-print @{$ref[2]}[0];
-print @{'d'};
-
-# Test references to references.
-
-$refref = \\$x;
-$x = "ok 13\n";
-print $$$refref;
-
-# Test nested anonymous lists.
-
-$ref = [[],2,[3,4,5,]];
-print scalar @$ref == 3 ? "ok 14\n" : "not ok 14\n";
-print $$ref[1] == 2 ? "ok 15\n" : "not ok 15\n";
-print ${$$ref[2]}[2] == 5 ? "ok 16\n" : "not ok 16\n";
-print scalar @{$$ref[0]} == 0 ? "ok 17\n" : "not ok 17\n";
-
-print $ref->[1] == 2 ? "ok 18\n" : "not ok 18\n";
-print $ref->[2]->[0] == 3 ? "ok 19\n" : "not ok 19\n";
-
-# Test references to hashes of references.
-
-$refref = \%whatever;
-$refref->{"key"} = $ref;
-print $refref->{"key"}->[2]->[0] == 3 ? "ok 20\n" : "not ok 20\n";
-
-# Test to see if anonymous subarrays spring into existence.
-
-$spring[5]->[0] = 123;
-$spring[5]->[1] = 456;
-push(@{$spring[5]}, 789);
-print join(':',@{$spring[5]}) eq "123:456:789" ? "ok 21\n" : "not ok 21\n";
-
-# Test to see if anonymous subhashes spring into existence.
-
-@{$spring2{"foo"}} = (1,2,3);
-$spring2{"foo"}->[3] = 4;
-print join(':',@{$spring2{"foo"}}) eq "1:2:3:4" ? "ok 22\n" : "not ok 22\n";
-
-# Test references to subroutines.
-
-sub mysub { print "ok 23\n" }
-$subref = \&mysub;
-&$subref;
-
-$subrefref = \\&mysub2;
-$$subrefref->("ok 24\n");
-sub mysub2 { print shift }
-
-# Test the ref operator.
-
-print ref $subref eq CODE ? "ok 25\n" : "not ok 25\n";
-print ref $ref eq ARRAY ? "ok 26\n" : "not ok 26\n";
-print ref $refref eq HASH ? "ok 27\n" : "not ok 27\n";
-
-# Test anonymous hash syntax.
-
-$anonhash = {};
-print ref $anonhash eq HASH ? "ok 28\n" : "not ok 28\n";
-$anonhash2 = {FOO => BAR, ABC => XYZ,};
-print join('', sort values %$anonhash2) eq BARXYZ ? "ok 29\n" : "not ok 29\n";
-
-# Test bless operator.
-
-package MYHASH;
-
-$object = bless $main'anonhash2;
-print ref $object eq MYHASH ? "ok 30\n" : "not ok 30\n";
-print $object->{ABC} eq XYZ ? "ok 31\n" : "not ok 31\n";
-
-$object2 = bless {};
-print ref $object2 eq MYHASH ? "ok 32\n" : "not ok 32\n";
-
-# Test ordinary call on object method.
-
-&mymethod($object,33);
-
-sub mymethod {
- local($THIS, @ARGS) = @_;
- die 'Got a "' . ref($THIS). '" instead of a MYHASH'
- unless ref $THIS eq MYHASH;
- print $THIS->{FOO} eq BAR ? "ok $ARGS[0]\n" : "not ok $ARGS[0]\n";
-}
-
-# Test automatic destructor call.
-
-$string = "not ok 34\n";
-$object = "foo";
-$string = "ok 34\n";
-$main'anonhash2 = "foo";
-$string = "";
-
-DESTROY {
- return unless $string;
- print $string;
-
- # Test that the object has not already been "cursed".
- print ref shift ne HASH ? "ok 35\n" : "not ok 35\n";
-}
-
-# Now test inheritance of methods.
-
-package OBJ;
-
-@ISA = (BASEOBJ);
-
-$main'object = bless {FOO => foo, BAR => bar};
-
-package main;
-
-# Test arrow-style method invocation.
-
-print $object->doit("BAR") eq bar ? "ok 36\n" : "not ok 36\n";
-
-# Test indirect-object-style method invocation.
-
-$foo = doit $object "FOO";
-print $foo eq foo ? "ok 37\n" : "not ok 37\n";
-
-sub BASEOBJ'doit {
- local $ref = shift;
- die "Not an OBJ" unless ref $ref eq OBJ;
- $ref->{shift()};
-}
-
-package UNIVERSAL;
-@ISA = 'LASTCHANCE';
-
-package LASTCHANCE;
-sub foo { print $_[1] }
-
-package WHATEVER;
-foo WHATEVER "ok 38\n";
-
-#
-# test the \(@foo) construct
-#
-package main;
-@foo = (1,2,3);
-@bar = \(@foo);
-@baz = \(1,@foo,@bar);
-print @bar == 3 ? "ok 39\n" : "not ok 39\n";
-print grep(ref($_), @bar) == 3 ? "ok 40\n" : "not ok 40\n";
-print @baz == 3 ? "ok 41\n" : "not ok 41\n";
-
-my(@fuu) = (1,2,3);
-my(@baa) = \(@fuu);
-my(@bzz) = \(1,@fuu,@baa);
-print @baa == 3 ? "ok 42\n" : "not ok 42\n";
-print grep(ref($_), @baa) == 3 ? "ok 43\n" : "not ok 43\n";
-print @bzz == 3 ? "ok 44\n" : "not ok 44\n";
-
-# test for proper destruction of lexical objects
-
-sub larry::DESTROY { print "# larry\nok 45\n"; }
-sub curly::DESTROY { print "# curly\nok 46\n"; }
-sub moe::DESTROY { print "# moe\nok 47\n"; }
-
-{
- my ($joe, @curly, %larry);
- my $moe = bless \$joe, 'moe';
- my $curly = bless \@curly, 'curly';
- my $larry = bless \%larry, 'larry';
- print "# leaving block\n";
-}
-
-print "# left block\n";
-
-# another glob test
-
-$foo = "not ok 48";
-{ local(*bar) = "foo" }
-$bar = "ok 48";
-local(*bar) = *bar;
-print "$bar\n";
-
-$var = "ok 49";
-$_ = \$var;
-print $$_,"\n";
-
-# test if reblessing during destruction results in more destruction
-
-{
- package A;
- sub new { bless {}, shift }
- DESTROY { print "# destroying 'A'\nok 51\n" }
- package _B;
- sub new { bless {}, shift }
- DESTROY { print "# destroying '_B'\nok 50\n"; bless shift, 'A' }
- package main;
- my $b = _B->new;
-}
-
-# test if $_[0] is properly protected in DESTROY()
-
-{
- my $i = 0;
- local $SIG{'__DIE__'} = sub {
- my $m = shift;
- if ($i++ > 4) {
- print "# infinite recursion, bailing\nnot ok 52\n";
- exit 1;
- }
- print "# $m";
- if ($m =~ /^Modification of a read-only/) { print "ok 52\n" }
- };
- package C;
- sub new { bless {}, shift }
- DESTROY { $_[0] = 'foo' }
- {
- print "# should generate an error...\n";
- my $c = C->new;
- }
- print "# good, didn't recurse\n";
-}
-
-# test if refgen behaves with autoviv magic
-
-{
- my @a;
- $a[1] = "ok 53\n";
- print ${\$_} for @a;
-}
-
-# test global destruction
-
-package FINALE;
-
-{
- $ref3 = bless ["ok 56\n"]; # package destruction
- my $ref2 = bless ["ok 55\n"]; # lexical destruction
- local $ref1 = bless ["ok 54\n"]; # dynamic destruction
- 1; # flush any temp values on stack
-}
-
-DESTROY {
- print $_[0][0];
-}
diff --git a/contrib/perl5/t/op/regexp.t b/contrib/perl5/t/op/regexp.t
deleted file mode 100755
index 4a4d42f..0000000
--- a/contrib/perl5/t/op/regexp.t
+++ /dev/null
@@ -1,112 +0,0 @@
-#!./perl
-
-# The tests are in a separate file 't/op/re_tests'.
-# Each line in that file is a separate test.
-# There are five columns, separated by tabs.
-#
-# Column 1 contains the pattern, optionally enclosed in C<''>.
-# Modifiers can be put after the closing C<'>.
-#
-# Column 2 contains the string to be matched.
-#
-# Column 3 contains the expected result:
-# y expect a match
-# n expect no match
-# c expect an error
-# B test exposes a known bug in Perl, should be skipped
-# b test exposes a known bug in Perl, should be skipped if noamp
-#
-# Columns 4 and 5 are used only if column 3 contains C<y> or C<c>.
-#
-# Column 4 contains a string, usually C<$&>.
-#
-# Column 5 contains the expected result of double-quote
-# interpolating that string after the match, or start of error message.
-#
-# Column 6, if present, contains a reason why the test is skipped.
-# This is printed with "skipped", for harness to pick up.
-#
-# \n in the tests are interpolated, as are variables of the form ${\w+}.
-#
-# If you want to add a regular expression test that can't be expressed
-# in this format, don't add it here: put it in op/pat.t instead.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-$iters = shift || 1; # Poor man performance suite, 10000 is OK.
-
-open(TESTS,'op/re_tests') || open(TESTS,'t/op/re_tests') ||
- die "Can't open re_tests";
-
-while (<TESTS>) { }
-$numtests = $.;
-seek(TESTS,0,0);
-$. = 0;
-
-$bang = sprintf "\\%03o", ord "!"; # \41 would not be portable.
-$ffff = chr(0xff) x 2;
-$nulnul = "\0" x 2;
-
-$| = 1;
-print "1..$numtests\n# $iters iterations\n";
-TEST:
-while (<TESTS>) {
- chomp;
- s/\\n/\n/g;
- ($pat, $subject, $result, $repl, $expect, $reason) = split(/\t/,$_,6);
- $input = join(':',$pat,$subject,$result,$repl,$expect);
- infty_subst(\$pat);
- infty_subst(\$expect);
- $pat = "'$pat'" unless $pat =~ /^[:']/;
- $pat =~ s/(\$\{\w+\})/$1/eeg;
- $pat =~ s/\\n/\n/g;
- $subject =~ s/(\$\{\w+\})/$1/eeg;
- $subject =~ s/\\n/\n/g;
- $expect =~ s/(\$\{\w+\})/$1/eeg;
- $expect =~ s/\\n/\n/g;
- $expect = $repl = '-' if $skip_amp and $input =~ /\$[&\`\']/;
- $skip = ($skip_amp ? ($result =~ s/B//i) : ($result =~ s/B//));
- # Certain tests don't work with utf8 (the re_test should be in UTF8)
- $skip = 1, $reason = 'utf8'
- if ($^H &= ~0x00000008) && $pat =~ /\[:\^(alnum|print|word|ascii|xdigit):\]/;
- $result =~ s/B//i unless $skip;
- for $study ('', 'study \$subject') {
- $c = $iters;
- eval "$study; \$match = (\$subject =~ m$pat) while \$c--; \$got = \"$repl\";";
- chomp( $err = $@ );
- if ($result eq 'c') {
- if ($err !~ m!^\Q$expect!) { print "not ok $. (compile) $input => `$err'\n"; next TEST }
- last; # no need to study a syntax error
- }
- elsif ( $skip ) {
- print "ok $. # skipped", length($reason) ? " $reason" : '', "\n";
- next TEST;
- }
- elsif ($@) {
- print "not ok $. $input => error `$err'\n"; next TEST;
- }
- elsif ($result eq 'n') {
- if ($match) { print "not ok $. ($study) $input => false positive\n"; next TEST }
- }
- else {
- if (!$match || $got ne $expect) {
- print "not ok $. ($study) $input => `$got', match=$match\n";
- next TEST;
- }
- }
- }
- print "ok $.\n";
-}
-
-close(TESTS);
-
-sub infty_subst # Special-case substitution
-{ # of $reg_infty and friends
- my $tp = shift;
- $$tp =~ s/,\$reg_infty_m}/,$reg_infty_m}/o;
- $$tp =~ s/,\$reg_infty_p}/,$reg_infty_p}/o;
- $$tp =~ s/,\$reg_infty}/,$reg_infty}/o;
-}
diff --git a/contrib/perl5/t/op/regexp_noamp.t b/contrib/perl5/t/op/regexp_noamp.t
deleted file mode 100755
index 03c19e9..0000000
--- a/contrib/perl5/t/op/regexp_noamp.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!./perl
-
-$skip_amp = 1;
-for $file ('op/regexp.t', 't/op/regexp.t') {
- if (-r $file) {
- do $file;
- exit;
- }
-}
-die "Cannot find op/regexp.t or t/op/regexp.t\n";
diff --git a/contrib/perl5/t/op/regmesg.t b/contrib/perl5/t/op/regmesg.t
deleted file mode 100755
index 01fa675..0000000
--- a/contrib/perl5/t/op/regmesg.t
+++ /dev/null
@@ -1,179 +0,0 @@
-#!./perl -w
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-my $debug = 1;
-
-##
-## If the markers used are changed (search for "MARKER1" in regcomp.c),
-## update only these two variables, and leave the {#} in the @death/@warning
-## arrays below. The {#} is a meta-marker -- it marks where the marker should
-## go.
-
-my $marker1 = "HERE";
-my $marker2 = " << HERE ";
-
-##
-## Key-value pairs of code/error of code that should have fatal errors.
-##
-
-eval 'use Config'; # assume defaults if fail
-our %Config;
-my $inf_m1 = ($Config{reg_infty} || 32767) - 1;
-my $inf_p1 = $inf_m1 + 2;
-my @death =
-(
- '/[[=foo=]]/' => 'POSIX syntax [= =] is reserved for future extensions before {#} mark in regex m/[[=foo=]{#}]/',
-
- '/(?<= .*)/' => 'Variable length lookbehind not implemented before {#} mark in regex m/(?<= .*){#}/',
-
- '/(?<= x{1000})/' => 'Lookbehind longer than 255 not implemented before {#} mark in regex m/(?<= x{1000}){#}/',
-
- '/(?@)/' => 'Sequence (?@...) not implemented before {#} mark in regex m/(?@{#})/',
-
- '/(?{ 1/' => 'Sequence (?{...}) not terminated or not {}-balanced before {#} mark in regex m/(?{{#} 1/',
-
- '/(?(1x))/' => 'Switch condition not recognized before {#} mark in regex m/(?(1x{#}))/',
-
- '/(?(1)x|y|z)/' => 'Switch (?(condition)... contains too many branches before {#} mark in regex m/(?(1)x|y|{#}z)/',
-
- '/(?(x)y|x)/' => 'Unknown switch condition (?(x) before {#} mark in regex m/(?({#}x)y|x)/',
-
- '/(?/' => 'Sequence (? incomplete before {#} mark in regex m/(?{#}/',
-
- '/(?;x/' => 'Sequence (?;...) not recognized before {#} mark in regex m/(?;{#}x/',
- '/(?<;x/' => 'Sequence (?<;...) not recognized before {#} mark in regex m/(?<;{#}x/',
-
- '/((x)/' => 'Unmatched ( before {#} mark in regex m/({#}(x)/',
-
- "/x{$inf_p1}/" => "Quantifier in {,} bigger than $inf_m1 before {#} mark in regex m/x{{#}$inf_p1}/",
-
- '/x{3,1}/' => 'Can\'t do {n,m} with n > m before {#} mark in regex m/x{3,1}{#}/',
-
- '/x**/' => 'Nested quantifiers before {#} mark in regex m/x**{#}/',
-
- '/x[/' => 'Unmatched [ before {#} mark in regex m/x[{#}/',
-
- '/*/', => 'Quantifier follows nothing before {#} mark in regex m/*{#}/',
-
- '/\p{x/' => 'Missing right brace on \p{} before {#} mark in regex m/\p{{#}x/',
-
- 'use utf8; /[\p{x]/' => 'Missing right brace on \p{} before {#} mark in regex m/[\p{{#}x]/',
-
- '/(x)\2/' => 'Reference to nonexistent group before {#} mark in regex m/(x)\2{#}/',
-
- 'my $m = "\\\"; $m =~ $m', => 'Trailing \ in regex m/\/',
-
- '/\x{1/' => 'Missing right brace on \x{} before {#} mark in regex m/\x{{#}1/',
-
- 'use utf8; /[\x{X]/' => 'Missing right brace on \x{} before {#} mark in regex m/[\x{{#}X]/',
-
- '/[[:barf:]]/' => 'POSIX class [:barf:] unknown before {#} mark in regex m/[[:barf:]{#}]/',
-
- '/[[=barf=]]/' => 'POSIX syntax [= =] is reserved for future extensions before {#} mark in regex m/[[=barf=]{#}]/',
-
- '/[[.barf.]]/' => 'POSIX syntax [. .] is reserved for future extensions before {#} mark in regex m/[[.barf.]{#}]/',
-
- '/[z-a]/' => 'Invalid [] range "z-a" before {#} mark in regex m/[z-a{#}]/',
-);
-
-##
-## Key-value pairs of code/error of code that should have non-fatal warnings.
-##
-@warning = (
- "m/(?p{ 'a' })/" => "(?p{}) is deprecated - use (??{}) before {#} mark in regex m/(?p{#}{ 'a' })/",
-
- 'm/\b*/' => '\b* matches null string many times before {#} mark in regex m/\b*{#}/',
-
- 'm/[:blank:]/' => 'POSIX syntax [: :] belongs inside character classes before {#} mark in regex m/[:blank:]{#}/',
-
- "m'[\\y]'" => 'Unrecognized escape \y in character class passed through before {#} mark in regex m/[\y{#}]/',
-
- 'm/[a-\d]/' => 'False [] range "a-\d" before {#} mark in regex m/[a-\d{#}]/',
- 'm/[\w-x]/' => 'False [] range "\w-" before {#} mark in regex m/[\w-{#}x]/',
- "m'\\y'" => 'Unrecognized escape \y passed through before {#} mark in regex m/\y{#}/',
-);
-
-my $total = (@death + @warning)/2;
-
-# utf8 is a noop on EBCDIC platforms, it is not fatal
-my $Is_EBCDIC = (ord('A') == 193);
-if ($Is_EBCDIC) {
- my @utf8_death = grep(/utf8/, @death);
- $total = $total - scalar(@utf8_death);
-}
-
-print "1..$total\n";
-
-my $count = 0;
-
-while (@death)
-{
- my $regex = shift @death;
- my $result = shift @death;
- # skip the utf8 test on EBCDIC since they do not die
- next if ($Is_EBCDIC && $regex =~ /utf8/);
- $count++;
-
- $_ = "x";
- eval $regex;
- if (not $@) {
- print "# oops, $regex didn't die\nnot ok $count\n";
- next;
- }
- chomp $@;
- $result =~ s/{\#}/$marker1/;
- $result =~ s/{\#}/$marker2/;
- if ($@ !~ /^\Q$result/) {
- print "# For $regex, expected:\n# $result\n# Got:\n# $@\n#\nnot ";
- }
- print "ok $count\n";
-}
-
-
-our $warning;
-$SIG{__WARN__} = sub { $warning = shift };
-
-while (@warning)
-{
- $count++;
- my $regex = shift @warning;
- my $result = shift @warning;
-
- undef $warning;
- $_ = "x";
- eval $regex;
-
- if ($@)
- {
- print "# oops, $regex died with:\n#\t$@#\nnot ok $count\n";
- next;
- }
-
- if (not $warning)
- {
- print "# oops, $regex didn't generate a warning\nnot ok $count\n";
- next;
- }
- $result =~ s/{\#}/$marker1/;
- $result =~ s/{\#}/$marker2/;
- if ($warning !~ /^\Q$result/)
- {
- print <<"EOM";
-# For $regex, expected:
-# $result
-# Got:
-# $warning
-#
-not ok $count
-EOM
- next;
- }
- print "ok $count\n";
-}
-
-
-
diff --git a/contrib/perl5/t/op/repeat.t b/contrib/perl5/t/op/repeat.t
deleted file mode 100755
index c030ba9..0000000
--- a/contrib/perl5/t/op/repeat.t
+++ /dev/null
@@ -1,98 +0,0 @@
-#!./perl
-
-# $RCSfile: repeat.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:21 $
-
-print "1..20\n";
-
-# compile time
-
-if ('-' x 5 eq '-----') {print "ok 1\n";} else {print "not ok 1\n";}
-if ('-' x 1 eq '-') {print "ok 2\n";} else {print "not ok 2\n";}
-if ('-' x 0 eq '') {print "ok 3\n";} else {print "not ok 3\n";}
-
-if ('ab' x 3 eq 'ababab') {print "ok 4\n";} else {print "not ok 4\n";}
-
-# run time
-
-$a = '-';
-if ($a x 5 eq '-----') {print "ok 5\n";} else {print "not ok 5\n";}
-if ($a x 1 eq '-') {print "ok 6\n";} else {print "not ok 6\n";}
-if ($a x 0 eq '') {print "ok 7\n";} else {print "not ok 7\n";}
-
-$a = 'ab';
-if ($a x 3 eq 'ababab') {print "ok 8\n";} else {print "not ok 8\n";}
-
-$a = 'xyz';
-$a x= 2;
-if ($a eq 'xyzxyz') {print "ok 9\n";} else {print "not ok 9\n";}
-$a x= 1;
-if ($a eq 'xyzxyz') {print "ok 10\n";} else {print "not ok 10\n";}
-$a x= 0;
-if ($a eq '') {print "ok 11\n";} else {print "not ok 11\n";}
-
-@x = (1,2,3);
-
-print join('', @x x 4) eq '3333' ? "ok 12\n" : "not ok 12\n";
-print join('', (@x) x 4) eq '123123123123' ? "ok 13\n" : "not ok 13\n";
-print join('', (@x,()) x 4) eq '123123123123' ? "ok 14\n" : "not ok 14\n";
-print join('', (@x,1) x 4) eq '1231123112311231' ? "ok 15\n" : "not ok 15\n";
-print join(':', () x 4) eq '' ? "ok 16\n" : "not ok 16\n";
-print join(':', (9) x 4) eq '9:9:9:9' ? "ok 17\n" : "not ok 17\n";
-print join(':', (9,9) x 4) eq '9:9:9:9:9:9:9:9' ? "ok 18\n" : "not ok 18\n";
-print join('', (split(//,"123")) x 2) eq '123123' ? "ok 19\n" : "not ok 19\n";
-
-#
-# The test #20 is actually testing for Digital C compiler optimizer bug,
-# present in Dec C versions 5.* and 6.0 (used in Digital UNIX and VMS),
-# found in December 1998. The bug was reported to Digital^WCompaq as
-# DECC 2745 (21-Dec-1998)
-# GEM_BUGS 7619 (23-Dec-1998)
-# As of April 1999 the bug has been fixed in Tru64 UNIX 5.0 and is planned
-# to be fixed also in 4.0G.
-#
-# The bug was as follows: broken code was produced for util.c:repeatcpy()
-# (a utility function for the 'x' operator) in the case *all* these
-# four conditions held:
-#
-# (1) len == 1
-# (2) "from" had the 8th bit on in its single character
-# (3) count > 7 (the 'x' count > 16)
-# (4) the highest optimization level was used in compilation
-# (which is the default when compiling Perl)
-#
-# The bug looked like this (. being the eight-bit character and ? being \xff):
-#
-# 16 ................
-# 17 .........???????.
-# 18 .........???????..
-# 19 .........???????...
-# 20 .........???????....
-# 21 .........???????.....
-# 22 .........???????......
-# 23 .........???????.......
-# 24 .........???????.???????
-# 25 .........???????.???????.
-#
-# The bug was triggered in the "if (len == 1)" branch. The fix
-# was to introduce a new temporary variable. In diff -u format:
-#
-# register char *frombase = from;
-#
-# if (len == 1) {
-#- todo = *from;
-#+ register char c = *from;
-# while (count-- > 0)
-#- *to++ = todo;
-#+ *to++ = c;
-# return;
-# }
-#
-# The bug could also be (obscurely) avoided by changing "from" to
-# be an unsigned char pointer.
-#
-# This obscure bug was not found by the then test suite but instead
-# by Mark.Martinec@nsc.ijs.si while trying to install Digest-MD5-2.00.
-#
-# jhi@iki.fi
-#
-print "\xdd" x 24 eq "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd" ? "ok 20\n" : "not ok 20\n";
diff --git a/contrib/perl5/t/op/reverse.t b/contrib/perl5/t/op/reverse.t
deleted file mode 100755
index bb7b9b7..0000000
--- a/contrib/perl5/t/op/reverse.t
+++ /dev/null
@@ -1,33 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..4\n";
-
-print "not " unless reverse("abc") eq "cba";
-print "ok 1\n";
-
-$_ = "foobar";
-print "not " unless reverse() eq "raboof";
-print "ok 2\n";
-
-{
- my @a = ("foo", "bar");
- my @b = reverse @a;
-
- print "not " unless $b[0] eq $a[1] && $b[1] eq $a[0];
- print "ok 3\n";
-}
-
-{
- # Unicode.
-
- my $a = "\x{263A}\x{263A}x\x{263A}y\x{263A}";
- my $b = scalar reverse($a);
- my $c = scalar reverse($b);
- print "not " unless $a eq $c;
- print "ok 4\n";
-}
diff --git a/contrib/perl5/t/op/runlevel.t b/contrib/perl5/t/op/runlevel.t
deleted file mode 100755
index b6c128b..0000000
--- a/contrib/perl5/t/op/runlevel.t
+++ /dev/null
@@ -1,366 +0,0 @@
-#!./perl
-
-##
-## Many of these tests are originally from Michael Schroeder
-## <Michael.Schroeder@informatik.uni-erlangen.de>
-## Adapted and expanded by Gurusamy Sarathy <gsar@activestate.com>
-##
-
-chdir 't' if -d 't';
-@INC = '../lib';
-$Is_VMS = $^O eq 'VMS';
-$Is_MSWin32 = $^O eq 'MSWin32';
-$ENV{PERL5LIB} = "../lib" unless $Is_VMS;
-
-$|=1;
-
-undef $/;
-@prgs = split "\n########\n", <DATA>;
-print "1..", scalar @prgs, "\n";
-
-$tmpfile = "runltmp000";
-1 while -f ++$tmpfile;
-END { if ($tmpfile) { 1 while unlink $tmpfile; } }
-
-for (@prgs){
- my $switch = "";
- if (s/^\s*(-\w+)//){
- $switch = $1;
- }
- my($prog,$expected) = split(/\nEXPECT\n/, $_);
- open TEST, ">$tmpfile";
- print TEST "$prog\n";
- close TEST;
- my $results = $Is_VMS ?
- `MCR $^X "-I[-.lib]" $switch $tmpfile 2>&1` :
- $Is_MSWin32 ?
- `.\\perl -I../lib $switch $tmpfile 2>&1` :
- `./perl $switch $tmpfile 2>&1`;
- my $status = $?;
- $results =~ s/\n+$//;
- # allow expected output to be written as if $prog is on STDIN
- $results =~ s/runltmp\d+/-/g;
- $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS; # clip off DCL status msg
- $expected =~ s/\n+$//;
- if ($results ne $expected) {
- print STDERR "PROG: $switch\n$prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
- }
- print "ok ", ++$i, "\n";
-}
-
-__END__
-@a = (1, 2, 3);
-{
- @a = sort { last ; } @a;
-}
-EXPECT
-Can't "last" outside a loop block at - line 3.
-########
-package TEST;
-
-sub TIESCALAR {
- my $foo;
- return bless \$foo;
-}
-sub FETCH {
- eval 'die("test")';
- print "still in fetch\n";
- return ">$@<";
-}
-package main;
-
-tie $bar, TEST;
-print "- $bar\n";
-EXPECT
-still in fetch
-- >test at (eval 1) line 1.
-<
-########
-package TEST;
-
-sub TIESCALAR {
- my $foo;
- eval('die("foo\n")');
- print "after eval\n";
- return bless \$foo;
-}
-sub FETCH {
- return "ZZZ";
-}
-
-package main;
-
-tie $bar, TEST;
-print "- $bar\n";
-print "OK\n";
-EXPECT
-after eval
-- ZZZ
-OK
-########
-package TEST;
-
-sub TIEHANDLE {
- my $foo;
- return bless \$foo;
-}
-sub PRINT {
-print STDERR "PRINT CALLED\n";
-(split(/./, 'x'x10000))[0];
-eval('die("test\n")');
-}
-
-package main;
-
-open FH, ">&STDOUT";
-tie *FH, TEST;
-print FH "OK\n";
-print STDERR "DONE\n";
-EXPECT
-PRINT CALLED
-DONE
-########
-sub warnhook {
- print "WARNHOOK\n";
- eval('die("foooo\n")');
-}
-$SIG{'__WARN__'} = 'warnhook';
-warn("dfsds\n");
-print "END\n";
-EXPECT
-WARNHOOK
-END
-########
-package TEST;
-
-use overload
- "\"\"" => \&str
-;
-
-sub str {
- eval('die("test\n")');
- return "STR";
-}
-
-package main;
-
-$bar = bless {}, TEST;
-print "$bar\n";
-print "OK\n";
-EXPECT
-STR
-OK
-########
-sub foo {
- $a <=> $b unless eval('$a == 0 ? bless undef : ($a <=> $b)');
-}
-@a = (3, 2, 0, 1);
-@a = sort foo @a;
-print join(', ', @a)."\n";
-EXPECT
-0, 1, 2, 3
-########
-sub foo {
- goto bar if $a == 0 || $b == 0;
- $a <=> $b;
-}
-@a = (3, 2, 0, 1);
-@a = sort foo @a;
-print join(', ', @a)."\n";
-exit;
-bar:
-print "bar reached\n";
-EXPECT
-Can't "goto" out of a pseudo block at - line 2.
-########
-sub sortfn {
- (split(/./, 'x'x10000))[0];
- my (@y) = ( 4, 6, 5);
- @y = sort { $a <=> $b } @y;
- print "sortfn ".join(', ', @y)."\n";
- return $_[0] <=> $_[1];
-}
-@x = ( 3, 2, 1 );
-@x = sort { &sortfn($a, $b) } @x;
-print "---- ".join(', ', @x)."\n";
-EXPECT
-sortfn 4, 5, 6
-sortfn 4, 5, 6
-sortfn 4, 5, 6
----- 1, 2, 3
-########
-@a = (3, 2, 1);
-@a = sort { eval('die("no way")') , $a <=> $b} @a;
-print join(", ", @a)."\n";
-EXPECT
-1, 2, 3
-########
-@a = (1, 2, 3);
-foo:
-{
- @a = sort { last foo; } @a;
-}
-EXPECT
-Label not found for "last foo" at - line 2.
-########
-package TEST;
-
-sub TIESCALAR {
- my $foo;
- return bless \$foo;
-}
-sub FETCH {
- next;
- return "ZZZ";
-}
-sub STORE {
-}
-
-package main;
-
-tie $bar, TEST;
-{
- print "- $bar\n";
-}
-print "OK\n";
-EXPECT
-Can't "next" outside a loop block at - line 8.
-########
-package TEST;
-
-sub TIESCALAR {
- my $foo;
- return bless \$foo;
-}
-sub FETCH {
- goto bbb;
- return "ZZZ";
-}
-
-package main;
-
-tie $bar, TEST;
-print "- $bar\n";
-exit;
-bbb:
-print "bbb\n";
-EXPECT
-Can't find label bbb at - line 8.
-########
-sub foo {
- $a <=> $b unless eval('$a == 0 ? die("foo\n") : ($a <=> $b)');
-}
-@a = (3, 2, 0, 1);
-@a = sort foo @a;
-print join(', ', @a)."\n";
-EXPECT
-0, 1, 2, 3
-########
-package TEST;
-sub TIESCALAR {
- my $foo;
- return bless \$foo;
-}
-sub FETCH {
- return "fetch";
-}
-sub STORE {
-(split(/./, 'x'x10000))[0];
-}
-package main;
-tie $bar, TEST;
-$bar = "x";
-########
-package TEST;
-sub TIESCALAR {
- my $foo;
- next;
- return bless \$foo;
-}
-package main;
-{
-tie $bar, TEST;
-}
-EXPECT
-Can't "next" outside a loop block at - line 4.
-########
-@a = (1, 2, 3);
-foo:
-{
- @a = sort { exit(0) } @a;
-}
-END { print "foobar\n" }
-EXPECT
-foobar
-########
-$SIG{__DIE__} = sub {
- print "In DIE\n";
- $i = 0;
- while (($p,$f,$l,$s) = caller(++$i)) {
- print "$p|$f|$l|$s\n";
- }
-};
-eval { die };
-&{sub { eval 'die' }}();
-sub foo { eval { die } } foo();
-EXPECT
-In DIE
-main|-|8|(eval)
-In DIE
-main|-|9|(eval)
-main|-|9|main::__ANON__
-In DIE
-main|-|10|(eval)
-main|-|10|main::foo
-########
-package TEST;
-
-sub TIEARRAY {
- return bless [qw(foo fee fie foe)], $_[0];
-}
-sub FETCH {
- my ($s,$i) = @_;
- if ($i) {
- goto bbb;
- }
-bbb:
- return $s->[$i];
-}
-
-package main;
-tie my @bar, 'TEST';
-print join('|', @bar[0..3]), "\n";
-EXPECT
-foo|fee|fie|foe
-########
-package TH;
-sub TIEHASH { bless {}, TH }
-sub STORE { eval { print "@_[1,2]\n" }; die "bar\n" }
-tie %h, TH;
-eval { $h{A} = 1; print "never\n"; };
-print $@;
-eval { $h{B} = 2; };
-print $@;
-EXPECT
-A 1
-bar
-B 2
-bar
-########
-sub n { 0 }
-sub f { my $x = shift; d(); }
-f(n());
-f();
-
-sub d {
- my $i = 0; my @a;
- while (do { { package DB; @a = caller($i++) } } ) {
- @a = @DB::args;
- for (@a) { print "$_\n"; $_ = '' }
- }
-}
-EXPECT
-0
diff --git a/contrib/perl5/t/op/sleep.t b/contrib/perl5/t/op/sleep.t
deleted file mode 100755
index 5f6c4c0..0000000
--- a/contrib/perl5/t/op/sleep.t
+++ /dev/null
@@ -1,8 +0,0 @@
-#!./perl
-
-# $RCSfile: sleep.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:23 $
-
-print "1..1\n";
-
-$x = sleep 3;
-if ($x >= 2 && $x <= 10) {print "ok 1\n";} else {print "not ok 1 $x\n";}
diff --git a/contrib/perl5/t/op/sort.t b/contrib/perl5/t/op/sort.t
deleted file mode 100755
index 29aff1d..0000000
--- a/contrib/perl5/t/op/sort.t
+++ /dev/null
@@ -1,317 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-use warnings;
-print "1..57\n";
-
-# these shouldn't hang
-{
- no warnings;
- sort { for ($_ = 0;; $_++) {} } @a;
- sort { while(1) {} } @a;
- sort { while(1) { last; } } @a;
- sort { while(0) { last; } } @a;
-}
-
-sub Backwards { $a lt $b ? 1 : $a gt $b ? -1 : 0 }
-sub Backwards_stacked($$) { my($a,$b) = @_; $a lt $b ? 1 : $a gt $b ? -1 : 0 }
-
-my $upperfirst = 'A' lt 'a';
-
-# Beware: in future this may become hairier because of possible
-# collation complications: qw(A a B c) can be sorted at least as
-# any of the following
-#
-# A a B b
-# A B a b
-# a b A B
-# a A b B
-#
-# All the above orders make sense.
-#
-# That said, EBCDIC sorts all small letters first, as opposed
-# to ASCII which sorts all big letters first.
-
-@harry = ('dog','cat','x','Cain','Abel');
-@george = ('gone','chased','yz','punished','Axed');
-
-$x = join('', sort @harry);
-$expected = $upperfirst ? 'AbelCaincatdogx' : 'catdogxAbelCain';
-print "# 1: x = '$x', expected = '$expected'\n";
-print ($x eq $expected ? "ok 1\n" : "not ok 1\n");
-
-$x = join('', sort( Backwards @harry));
-$expected = $upperfirst ? 'xdogcatCainAbel' : 'CainAbelxdogcat';
-print "# 2: x = '$x', expected = '$expected'\n";
-print ($x eq $expected ? "ok 2\n" : "not ok 2\n");
-
-$x = join('', sort( Backwards_stacked @harry));
-$expected = $upperfirst ? 'xdogcatCainAbel' : 'CainAbelxdogcat';
-print "# 3: x = '$x', expected = '$expected'\n";
-print ($x eq $expected ? "ok 3\n" : "not ok 3\n");
-
-$x = join('', sort @george, 'to', @harry);
-$expected = $upperfirst ?
- 'AbelAxedCaincatchaseddoggonepunishedtoxyz' :
- 'catchaseddoggonepunishedtoxyzAbelAxedCain' ;
-print "# 4: x = '$x', expected = '$expected'\n";
-print ($x eq $expected ?"ok 4\n":"not ok 4\n");
-
-@a = ();
-@b = reverse @a;
-print ("@b" eq "" ? "ok 5\n" : "not ok 5 (@b)\n");
-
-@a = (1);
-@b = reverse @a;
-print ("@b" eq "1" ? "ok 6\n" : "not ok 6 (@b)\n");
-
-@a = (1,2);
-@b = reverse @a;
-print ("@b" eq "2 1" ? "ok 7\n" : "not ok 7 (@b)\n");
-
-@a = (1,2,3);
-@b = reverse @a;
-print ("@b" eq "3 2 1" ? "ok 8\n" : "not ok 8 (@b)\n");
-
-@a = (1,2,3,4);
-@b = reverse @a;
-print ("@b" eq "4 3 2 1" ? "ok 9\n" : "not ok 9 (@b)\n");
-
-@a = (10,2,3,4);
-@b = sort {$a <=> $b;} @a;
-print ("@b" eq "2 3 4 10" ? "ok 10\n" : "not ok 10 (@b)\n");
-
-$sub = 'Backwards';
-$x = join('', sort $sub @harry);
-$expected = $upperfirst ? 'xdogcatCainAbel' : 'CainAbelxdogcat';
-print "# 11: x = $x, expected = '$expected'\n";
-print ($x eq $expected ? "ok 11\n" : "not ok 11\n");
-
-$sub = 'Backwards_stacked';
-$x = join('', sort $sub @harry);
-$expected = $upperfirst ? 'xdogcatCainAbel' : 'CainAbelxdogcat';
-print "# 12: x = $x, expected = '$expected'\n";
-print ($x eq $expected ? "ok 12\n" : "not ok 12\n");
-
-# literals, combinations
-
-@b = sort (4,1,3,2);
-print ("@b" eq '1 2 3 4' ? "ok 13\n" : "not ok 13\n");
-print "# x = '@b'\n";
-
-@b = sort grep { $_ } (4,1,3,2);
-print ("@b" eq '1 2 3 4' ? "ok 14\n" : "not ok 14\n");
-print "# x = '@b'\n";
-
-@b = sort map { $_ } (4,1,3,2);
-print ("@b" eq '1 2 3 4' ? "ok 15\n" : "not ok 15\n");
-print "# x = '@b'\n";
-
-@b = sort reverse (4,1,3,2);
-print ("@b" eq '1 2 3 4' ? "ok 16\n" : "not ok 16\n");
-print "# x = '@b'\n";
-
-# redefining sort sub inside the sort sub should fail
-sub twoface { *twoface = sub { $a <=> $b }; &twoface }
-eval { @b = sort twoface 4,1,3,2 };
-print ($@ =~ /redefine active sort/ ? "ok 17\n" : "not ok 17\n");
-
-# redefining sort subs outside the sort should not fail
-eval { no warnings 'redefine'; *twoface = sub { &Backwards } };
-print $@ ? "not ok 18\n" : "ok 18\n";
-
-eval { @b = sort twoface 4,1,3,2 };
-print ("@b" eq '4 3 2 1' ? "ok 19\n" : "not ok 19 |@b|\n");
-
-{
- no warnings 'redefine';
- *twoface = sub { *twoface = *Backwards; $a <=> $b };
-}
-eval { @b = sort twoface 4,1 };
-print ($@ =~ /redefine active sort/ ? "ok 20\n" : "not ok 20\n");
-
-{
- no warnings 'redefine';
- *twoface = sub {
- eval 'sub twoface { $a <=> $b }';
- die($@ =~ /redefine active sort/ ? "ok 21\n" : "not ok 21\n");
- $a <=> $b;
- };
-}
-eval { @b = sort twoface 4,1 };
-print $@ ? "$@" : "not ok 21\n";
-
-eval <<'CODE';
- my @result = sort main'Backwards 'one', 'two';
-CODE
-print $@ ? "not ok 22\n# $@" : "ok 22\n";
-
-eval <<'CODE';
- # "sort 'one', 'two'" should not try to parse "'one" as a sort sub
- my @result = sort 'one', 'two';
-CODE
-print $@ ? "not ok 23\n# $@" : "ok 23\n";
-
-{
- my $sortsub = \&Backwards;
- my $sortglob = *Backwards;
- my $sortglobr = \*Backwards;
- my $sortname = 'Backwards';
- @b = sort $sortsub 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 24\n" : "not ok 24 |@b|\n");
- @b = sort $sortglob 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 25\n" : "not ok 25 |@b|\n");
- @b = sort $sortname 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 26\n" : "not ok 26 |@b|\n");
- @b = sort $sortglobr 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 27\n" : "not ok 27 |@b|\n");
-}
-
-{
- my $sortsub = \&Backwards_stacked;
- my $sortglob = *Backwards_stacked;
- my $sortglobr = \*Backwards_stacked;
- my $sortname = 'Backwards_stacked';
- @b = sort $sortsub 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 28\n" : "not ok 28 |@b|\n");
- @b = sort $sortglob 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 29\n" : "not ok 29 |@b|\n");
- @b = sort $sortname 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 30\n" : "not ok 30 |@b|\n");
- @b = sort $sortglobr 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 31\n" : "not ok 31 |@b|\n");
-}
-
-{
- local $sortsub = \&Backwards;
- local $sortglob = *Backwards;
- local $sortglobr = \*Backwards;
- local $sortname = 'Backwards';
- @b = sort $sortsub 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 32\n" : "not ok 32 |@b|\n");
- @b = sort $sortglob 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 33\n" : "not ok 33 |@b|\n");
- @b = sort $sortname 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 34\n" : "not ok 34 |@b|\n");
- @b = sort $sortglobr 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 35\n" : "not ok 35 |@b|\n");
-}
-
-{
- local $sortsub = \&Backwards_stacked;
- local $sortglob = *Backwards_stacked;
- local $sortglobr = \*Backwards_stacked;
- local $sortname = 'Backwards_stacked';
- @b = sort $sortsub 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 36\n" : "not ok 36 |@b|\n");
- @b = sort $sortglob 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 37\n" : "not ok 37 |@b|\n");
- @b = sort $sortname 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 38\n" : "not ok 38 |@b|\n");
- @b = sort $sortglobr 4,1,3,2;
- print ("@b" eq '4 3 2 1' ? "ok 39\n" : "not ok 39 |@b|\n");
-}
-
-## exercise sort builtins... ($a <=> $b already tested)
-@a = ( 5, 19, 1996, 255, 90 );
-@b = sort {
- my $dummy; # force blockness
- return $b <=> $a
-} @a;
-print ("@b" eq '1996 255 90 19 5' ? "ok 40\n" : "not ok 40\n");
-print "# x = '@b'\n";
-$x = join('', sort { $a cmp $b } @harry);
-$expected = $upperfirst ? 'AbelCaincatdogx' : 'catdogxAbelCain';
-print ($x eq $expected ? "ok 41\n" : "not ok 41\n");
-print "# x = '$x'; expected = '$expected'\n";
-$x = join('', sort { $b cmp $a } @harry);
-$expected = $upperfirst ? 'xdogcatCainAbel' : 'CainAbelxdogcat';
-print ($x eq $expected ? "ok 42\n" : "not ok 42\n");
-print "# x = '$x'; expected = '$expected'\n";
-{
- use integer;
- @b = sort { $a <=> $b } @a;
- print ("@b" eq '5 19 90 255 1996' ? "ok 43\n" : "not ok 43\n");
- print "# x = '@b'\n";
- @b = sort { $b <=> $a } @a;
- print ("@b" eq '1996 255 90 19 5' ? "ok 44\n" : "not ok 44\n");
- print "# x = '@b'\n";
- $x = join('', sort { $a cmp $b } @harry);
- $expected = $upperfirst ? 'AbelCaincatdogx' : 'catdogxAbelCain';
- print ($x eq $expected ? "ok 45\n" : "not ok 45\n");
- print "# x = '$x'; expected = '$expected'\n";
- $x = join('', sort { $b cmp $a } @harry);
- $expected = $upperfirst ? 'xdogcatCainAbel' : 'CainAbelxdogcat';
- print ($x eq $expected ? "ok 46\n" : "not ok 46\n");
- print "# x = '$x'; expected = '$expected'\n";
-}
-
-# test that an optimized-away comparison block doesn't take any other
-# arguments away with it
-$x = join('', sort { $a <=> $b } 3, 1, 2);
-print $x eq "123" ? "ok 47\n" : "not ok 47\n";
-
-# test sorting in non-main package
-package Foo;
-@a = ( 5, 19, 1996, 255, 90 );
-@b = sort { $b <=> $a } @a;
-print ("@b" eq '1996 255 90 19 5' ? "ok 48\n" : "not ok 48\n");
-print "# x = '@b'\n";
-
-@b = sort main::Backwards_stacked @a;
-print ("@b" eq '90 5 255 1996 19' ? "ok 49\n" : "not ok 49\n");
-print "# x = '@b'\n";
-
-# check if context for sort arguments is handled right
-
-$test = 49;
-sub test_if_list {
- my $gimme = wantarray;
- print "not " unless $gimme;
- ++$test;
- print "ok $test\n";
-}
-my $m = sub { $a <=> $b };
-
-sub cxt_one { sort $m test_if_list() }
-cxt_one();
-sub cxt_two { sort { $a <=> $b } test_if_list() }
-cxt_two();
-sub cxt_three { sort &test_if_list() }
-cxt_three();
-
-sub test_if_scalar {
- my $gimme = wantarray;
- print "not " if $gimme or !defined($gimme);
- ++$test;
- print "ok $test\n";
-}
-
-$m = \&test_if_scalar;
-sub cxt_four { sort $m 1,2 }
-@x = cxt_four();
-sub cxt_five { sort { test_if_scalar($a,$b); } 1,2 }
-@x = cxt_five();
-sub cxt_six { sort test_if_scalar 1,2 }
-@x = cxt_six();
-
-# test against a reentrancy bug
-{
- package Bar;
- sub compare { $a cmp $b }
- sub reenter { my @force = sort compare qw/a b/ }
-}
-{
- my($def, $init) = (0, 0);
- @b = sort {
- $def = 1 if defined $Bar::a;
- Bar::reenter() unless $init++;
- $a <=> $b
- } qw/4 3 1 2/;
- print ("@b" eq '1 2 3 4' ? "ok 56\n" : "not ok 56\n");
- print "# x = '@b'\n";
- print !$def ? "ok 57\n" : "not ok 57\n";
-}
diff --git a/contrib/perl5/t/op/splice.t b/contrib/perl5/t/op/splice.t
deleted file mode 100755
index 06e3509..0000000
--- a/contrib/perl5/t/op/splice.t
+++ /dev/null
@@ -1,34 +0,0 @@
-#!./perl
-
-print "1..9\n";
-
-@a = (1..10);
-
-sub j { join(":",@_) }
-
-print "not " unless j(splice(@a,@a,0,11,12)) eq "" && j(@a) eq j(1..12);
-print "ok 1\n";
-
-print "not " unless j(splice(@a,-1)) eq "12" && j(@a) eq j(1..11);
-print "ok 2\n";
-
-print "not " unless j(splice(@a,0,1)) eq "1" && j(@a) eq j(2..11);
-print "ok 3\n";
-
-print "not " unless j(splice(@a,0,0,0,1)) eq "" && j(@a) eq j(0..11);
-print "ok 4\n";
-
-print "not " unless j(splice(@a,5,1,5)) eq "5" && j(@a) eq j(0..11);
-print "ok 5\n";
-
-print "not " unless j(splice(@a, 20, 0, 12, 13)) eq "" && j(@a) eq j(0..13);
-print "ok 6\n";
-
-print "not " unless j(splice(@a, -@a, @a, 1, 2, 3)) eq j(0..13) && j(@a) eq j(1..3);
-print "ok 7\n";
-
-print "not " unless j(splice(@a, 1, -1, 7, 7)) eq "2" && j(@a) eq j(1,7,7,3);
-print "ok 8\n";
-
-print "not " unless j(splice(@a,-3,-2,2)) eq j(7) && j(@a) eq j(1,2,7,3);
-print "ok 9\n";
diff --git a/contrib/perl5/t/op/split.t b/contrib/perl5/t/op/split.t
deleted file mode 100755
index 9a6586d..0000000
--- a/contrib/perl5/t/op/split.t
+++ /dev/null
@@ -1,129 +0,0 @@
-#!./perl
-
-print "1..29\n";
-
-$FS = ':';
-
-$_ = 'a:b:c';
-
-($a,$b,$c) = split($FS,$_);
-
-if (join(';',$a,$b,$c) eq 'a;b;c') {print "ok 1\n";} else {print "not ok 1\n";}
-
-@ary = split(/:b:/);
-if (join("$_",@ary) eq 'aa:b:cc') {print "ok 2\n";} else {print "not ok 2\n";}
-
-$_ = "abc\n";
-@xyz = (@ary = split(//));
-if (join(".",@ary) eq "a.b.c.\n") {print "ok 3\n";} else {print "not ok 3\n";}
-
-$_ = "a:b:c::::";
-@ary = split(/:/);
-if (join(".",@ary) eq "a.b.c") {print "ok 4\n";} else {print "not ok 4\n";}
-
-$_ = join(':',split(' '," a b\tc \t d "));
-if ($_ eq 'a:b:c:d') {print "ok 5\n";} else {print "not ok 5 #$_#\n";}
-
-$_ = join(':',split(/ */,"foo bar bie\tdoll"));
-if ($_ eq "f:o:o:b:a:r:b:i:e:\t:d:o:l:l")
- {print "ok 6\n";} else {print "not ok 6\n";}
-
-$_ = join(':', 'foo', split(/ /,'a b c'), 'bar');
-if ($_ eq "foo:a:b::c:bar") {print "ok 7\n";} else {print "not ok 7 $_\n";}
-
-# Can we say how many fields to split to?
-$_ = join(':', split(' ','1 2 3 4 5 6', 3));
-print $_ eq '1:2:3 4 5 6' ? "ok 8\n" : "not ok 8 $_\n";
-
-# Can we do it as a variable?
-$x = 4;
-$_ = join(':', split(' ','1 2 3 4 5 6', $x));
-print $_ eq '1:2:3:4 5 6' ? "ok 9\n" : "not ok 9 $_\n";
-
-# Does the 999 suppress null field chopping?
-$_ = join(':', split(/:/,'1:2:3:4:5:6:::', 999));
-print $_ eq '1:2:3:4:5:6:::' ? "ok 10\n" : "not ok 10 $_\n";
-
-# Does assignment to a list imply split to one more field than that?
-if ($^O eq 'MSWin32') { $foo = `.\\perl -D1024 -e "(\$a,\$b) = split;" 2>&1` }
-elsif ($^O eq 'VMS') { $foo = `./perl "-D1024" -e "(\$a,\$b) = split;" 2>&1` }
-else { $foo = `./perl -D1024 -e '(\$a,\$b) = split;' 2>&1` }
-print $foo =~ /DEBUGGING/ || $foo =~ /SV = (VOID|IV\(3\))/ ? "ok 11\n" : "not ok 11\n";
-
-# Can we say how many fields to split to when assigning to a list?
-($a,$b) = split(' ','1 2 3 4 5 6', 2);
-$_ = join(':',$a,$b);
-print $_ eq '1:2 3 4 5 6' ? "ok 12\n" : "not ok 12 $_\n";
-
-# do subpatterns generate additional fields (without trailing nulls)?
-$_ = join '|', split(/,|(-)/, "1-10,20,,,");
-print $_ eq "1|-|10||20" ? "ok 13\n" : "not ok 13\n";
-
-# do subpatterns generate additional fields (with a limit)?
-$_ = join '|', split(/,|(-)/, "1-10,20,,,", 10);
-print $_ eq "1|-|10||20||||||" ? "ok 14\n" : "not ok 14\n";
-
-# is the 'two undefs' bug fixed?
-(undef, $a, undef, $b) = qw(1 2 3 4);
-print "$a|$b" eq "2|4" ? "ok 15\n" : "not ok 15\n";
-
-# .. even for locals?
-{
- local(undef, $a, undef, $b) = qw(1 2 3 4);
- print "$a|$b" eq "2|4" ? "ok 16\n" : "not ok 16\n";
-}
-
-# check splitting of null string
-$_ = join('|', split(/x/, '',-1), 'Z');
-print $_ eq "Z" ? "ok 17\n" : "#$_\nnot ok 17\n";
-
-$_ = join('|', split(/x/, '', 1), 'Z');
-print $_ eq "Z" ? "ok 18\n" : "#$_\nnot ok 18\n";
-
-$_ = join('|', split(/(p+)/,'',-1), 'Z');
-print $_ eq "Z" ? "ok 19\n" : "#$_\nnot ok 19\n";
-
-$_ = join('|', split(/.?/, '',-1), 'Z');
-print $_ eq "Z" ? "ok 20\n" : "#$_\nnot ok 20\n";
-
-
-# Are /^/m patterns scanned?
-$_ = join '|', split(/^a/m, "a b a\na d a", 20);
-print $_ eq "| b a\n| d a" ? "ok 21\n" : "not ok 21\n# `$_'\n";
-
-# Are /$/m patterns scanned?
-$_ = join '|', split(/a$/m, "a b a\na d a", 20);
-print $_ eq "a b |\na d |" ? "ok 22\n" : "not ok 22\n# `$_'\n";
-
-# Are /^/m patterns scanned?
-$_ = join '|', split(/^aa/m, "aa b aa\naa d aa", 20);
-print $_ eq "| b aa\n| d aa" ? "ok 23\n" : "not ok 23\n# `$_'\n";
-
-# Are /$/m patterns scanned?
-$_ = join '|', split(/aa$/m, "aa b aa\naa d aa", 20);
-print $_ eq "aa b |\naa d |" ? "ok 24\n" : "not ok 24\n# `$_'\n";
-
-# Greedyness:
-$_ = "a : b :c: d";
-@ary = split(/\s*:\s*/);
-if (($res = join(".",@ary)) eq "a.b.c.d") {print "ok 25\n";} else {print "not ok 25\n# res=`$res' != `a.b.c.d'\n";}
-
-# use of match result as pattern (!)
-'p:q:r:s' eq join ':', split('abc' =~ /b/, 'p1q1r1s') or print "not ";
-print "ok 26\n";
-
-# /^/ treated as /^/m
-$_ = join ':', split /^/, "ab\ncd\nef\n";
-print "not " if $_ ne "ab\n:cd\n:ef\n";
-print "ok 27\n";
-
-# see if @a = @b = split(...) optimization works
-@list1 = @list2 = split ('p',"a p b c p");
-print "not " if @list1 != @list2 or "@list1" ne "@list2"
- or @list1 != 2 or "@list1" ne "a b c ";
-print "ok 28\n";
-
-# zero-width assertion
-$_ = join ':', split /(?=\w)/, "rm b";
-print "not" if $_ ne "r:m :b";
-print "ok 29\n";
diff --git a/contrib/perl5/t/op/sprintf.t b/contrib/perl5/t/op/sprintf.t
deleted file mode 100755
index f4af3cd..0000000
--- a/contrib/perl5/t/op/sprintf.t
+++ /dev/null
@@ -1,310 +0,0 @@
-#!./perl
-
-# Tests sprintf, excluding handling of 64-bit integers or long
-# doubles (if supported), of machine-specific short and long
-# integers, machine-specific floating point exceptions (infinity,
-# not-a-number ...), of the effects of locale, and of features
-# specific to multi-byte characters (under use utf8 and such).
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-use warnings;
-
-while (<DATA>) {
- s/^\s*>//; s/<\s*$//;
- push @tests, [split(/<\s*>/, $_, 4)];
-}
-
-print '1..', scalar @tests, "\n";
-
-$SIG{__WARN__} = sub {
- if ($_[0] =~ /^Invalid conversion/) {
- $w = ' INVALID'
- } else {
- warn @_;
- }
-};
-
-for ($i = 1; @tests; $i++) {
- ($template, $data, $result, $comment) = @{shift @tests};
- $evalData = eval $data;
- $w = undef;
- $x = sprintf(">$template<",
- defined @$evalData ? @$evalData : $evalData);
- substr($x, -1, 0) = $w if $w;
- # $x may have 3 exponent digits, not 2
- my $y = $x;
- if ($y =~ s/([Ee][-+])0(\d)/$1$2/) {
- # if result is left-adjusted, append extra space
- if ($template =~ /%\+?\-/ and $result =~ / $/) {
- $y =~ s/<$/ </;
- }
- # if result is zero-filled, add extra zero
- elsif ($template =~ /%\+?0/ and $result =~ /^0/) {
- $y =~ s/^>0/>00/;
- }
- # if result is right-adjusted, prepend extra space
- elsif ($result =~ /^ /) {
- $y =~ s/^>/> /;
- }
- }
-
- if ($x eq ">$result<") {
- print "ok $i\n";
- }
- elsif ($y eq ">$result<") # Some C libraries always give
- { # three-digit exponent
- print("ok $i # >$result< $x three-digit exponent accepted\n");
- }
- elsif ($result =~ /[-+]\d{3}$/ &&
- # Suppress tests with modulo of exponent >= 100 on platforms
- # which can't handle such magnitudes (or where we can't tell).
- ((!eval {require POSIX}) || # Costly: only do this if we must!
- (length(&POSIX::DBL_MAX) - rindex(&POSIX::DBL_MAX, '+')) == 3))
- {
- print("ok $i # >$template< >$data< >$result<",
- " Suppressed: exponent out of range?\n")
- }
- else {
- $y = ($x eq $y ? "" : " => $y");
- print("not ok $i >$template< >$data< >$result< $x$y",
- $comment ? " # $comment\n" : "\n");
- }
-}
-
-# In each of the the following lines, there are three required fields:
-# printf template, data to be formatted (as a Perl expression), and
-# expected result of formatting. An optional fourth field can contain
-# a comment. Each field is delimited by a starting '>' and a
-# finishing '<'; any whitespace outside these start and end marks is
-# not part of the field. If formatting requires more than one data
-# item (for example, if variable field widths are used), the Perl data
-# expression should return a reference to an array having the requisite
-# number of elements. Even so, subterfuge is sometimes required: see
-# tests for %n and %p.
-#
-# The following tests are not currently run, for the reasons stated:
-
-=pod
-
-=begin problematic
-
->%.0f< >-0.1< >-0< >C library bug: no minus on VMS, HP-UX<
->%.0f< >1.5< >2< >Standard vague: no rounding rules<
->%.0f< >2.5< >2< >Standard vague: no rounding rules<
-
-=end problematic
-
-=cut
-
-# template data result
-__END__
->%6. 6s< >''< >%6. 6s INVALID< >(See use of $w in code above)<
->%6 .6s< >''< >%6 .6s INVALID<
->%6.6 s< >''< >%6.6 s INVALID<
->%A< >''< >%A INVALID<
->%B< >''< >%B INVALID<
->%C< >''< >%C INVALID<
->%D< >0x7fffffff< >2147483647< >Synonym for %ld<
->%E< >123456.789< >1.234568E+05< >Like %e, but using upper-case "E"<
->%F< >123456.789< >123456.789000< >Synonym for %f<
->%G< >1234567.89< >1.23457E+06< >Like %g, but using upper-case "E"<
->%G< >1234567e96< >1.23457E+102<
->%G< >.1234567e-101< >1.23457E-102<
->%G< >12345.6789< >12345.7<
->%H< >''< >%H INVALID<
->%I< >''< >%I INVALID<
->%J< >''< >%J INVALID<
->%K< >''< >%K INVALID<
->%L< >''< >%L INVALID<
->%M< >''< >%M INVALID<
->%N< >''< >%N INVALID<
->%O< >2**32-1< >37777777777< >Synonum for %lo<
->%P< >''< >%P INVALID<
->%Q< >''< >%Q INVALID<
->%R< >''< >%R INVALID<
->%S< >''< >%S INVALID<
->%T< >''< >%T INVALID<
->%U< >2**32-1< >4294967295< >Synonum for %lu<
->%V< >''< >%V INVALID<
->%W< >''< >%W INVALID<
->%X< >2**32-1< >FFFFFFFF< >Like %x, but with u/c letters<
->%#X< >2**32-1< >0XFFFFFFFF<
->%Y< >''< >%Y INVALID<
->%Z< >''< >%Z INVALID<
->%a< >''< >%a INVALID<
->%b< >2**32-1< >11111111111111111111111111111111<
->%+b< >2**32-1< >11111111111111111111111111111111<
->%#b< >2**32-1< >0b11111111111111111111111111111111<
->%34b< >2**32-1< > 11111111111111111111111111111111<
->%034b< >2**32-1< >0011111111111111111111111111111111<
->%-34b< >2**32-1< >11111111111111111111111111111111 <
->%-034b< >2**32-1< >11111111111111111111111111111111 <
->%c< >ord('A')< >A<
->%10c< >ord('A')< > A<
->%#10c< >ord('A')< > A< ># modifier: no effect<
->%010c< >ord('A')< >000000000A<
->%10lc< >ord('A')< > A< >l modifier: no effect<
->%10hc< >ord('A')< > A< >h modifier: no effect<
->%10.5c< >ord('A')< > A< >precision: no effect<
->%-10c< >ord('A')< >A <
->%d< >123456.789< >123456<
->%d< >-123456.789< >-123456<
->%d< >0< >0<
->%+d< >0< >+0<
->%0d< >0< >0<
->%.0d< >0< ><
->%+.0d< >0< >+<
->%.0d< >1< >1<
->%d< >1< >1<
->%+d< >1< >+1<
->%#3.2d< >1< > 01< ># modifier: no effect<
->%3.2d< >1< > 01<
->%03.2d< >1< >001<
->%-3.2d< >1< >01 <
->%-03.2d< >1< >01 < >zero pad + left just.: no effect<
->%d< >-1< >-1<
->%+d< >-1< >-1<
->%hd< >1< >1< >More extensive testing of<
->%ld< >1< >1< >length modifiers would be<
->%Vd< >1< >1< >platform-specific<
->%vd< >chr(1)< >1<
->%+vd< >chr(1)< >+1<
->%#vd< >chr(1)< >1<
->%vd< >"\01\02\03"< >1.2.3<
->%v.3d< >"\01\02\03"< >001.002.003<
->%v03d< >"\01\02\03"< >001.002.003<
->%v-3d< >"\01\02\03"< >1 .2 .3 <
->%v+-3d< >"\01\02\03"< >+1 .2 .3 <
->%v4.3d< >"\01\02\03"< > 001. 002. 003<
->%v04.3d< >"\01\02\03"< >0001.0002.0003<
->%*v02d< >['-', "\0\7\14"]< >00-07-12<
->%v.*d< >[3, "\01\02\03"]< >001.002.003<
->%v0*d< >[3, "\01\02\03"]< >001.002.003<
->%v-*d< >[3, "\01\02\03"]< >1 .2 .3 <
->%v+-*d< >[3, "\01\02\03"]< >+1 .2 .3 <
->%v*.*d< >[4, 3, "\01\02\03"]< > 001. 002. 003<
->%v0*.*d< >[4, 3, "\01\02\03"]< >0001.0002.0003<
->%*v0*d< >['-', 2, "\0\7\13"]< >00-07-11<
->%e< >1234.875< >1.234875e+03<
->%e< >0.000012345< >1.234500e-05<
->%e< >1234567E96< >1.234567e+102<
->%e< >0< >0.000000e+00<
->%e< >.1234567E-101< >1.234567e-102<
->%+e< >1234.875< >+1.234875e+03<
->%#e< >1234.875< >1.234875e+03<
->%e< >-1234.875< >-1.234875e+03<
->%+e< >-1234.875< >-1.234875e+03<
->%#e< >-1234.875< >-1.234875e+03<
->%.0e< >1234.875< >1e+03<
->%#.0e< >1234.875< >1.e+03<
->%.*e< >[0, 1234.875]< >1e+03<
->%.1e< >1234.875< >1.2e+03<
->%-12.4e< >1234.875< >1.2349e+03 <
->%12.4e< >1234.875< > 1.2349e+03<
->%+-12.4e< >1234.875< >+1.2349e+03 <
->%+12.4e< >1234.875< > +1.2349e+03<
->%+-12.4e< >-1234.875< >-1.2349e+03 <
->%+12.4e< >-1234.875< > -1.2349e+03<
->%f< >1234.875< >1234.875000<
->%+f< >1234.875< >+1234.875000<
->%#f< >1234.875< >1234.875000<
->%f< >-1234.875< >-1234.875000<
->%+f< >-1234.875< >-1234.875000<
->%#f< >-1234.875< >-1234.875000<
->%6f< >1234.875< >1234.875000<
->%*f< >[6, 1234.875]< >1234.875000<
->%.0f< >1234.875< >1235<
->%.1f< >1234.875< >1234.9<
->%-8.1f< >1234.875< >1234.9 <
->%8.1f< >1234.875< > 1234.9<
->%+-8.1f< >1234.875< >+1234.9 <
->%+8.1f< >1234.875< > +1234.9<
->%+-8.1f< >-1234.875< >-1234.9 <
->%+8.1f< >-1234.875< > -1234.9<
->%*.*f< >[5, 2, 12.3456]< >12.35<
->%f< >0< >0.000000<
->%.0f< >0< >0<
->%.0f< >2**38< >274877906944< >Should have exact int'l rep'n<
->%.0f< >0.1< >0<
->%.0f< >0.6< >1< >Known to fail with sfio and (irix|nonstop-ux|powerux)<
->%.0f< >-0.6< >-1< >Known to fail with sfio and (irix|nonstop-ux|powerux)<
->%.0f< >1< >1<
->%#.0f< >1< >1.<
->%g< >12345.6789< >12345.7<
->%+g< >12345.6789< >+12345.7<
->%#g< >12345.6789< >12345.7<
->%.0g< >12345.6789< >1e+04<
->%#.0g< >12345.6789< >1.e+04<
->%.2g< >12345.6789< >1.2e+04<
->%.*g< >[2, 12345.6789]< >1.2e+04<
->%.9g< >12345.6789< >12345.6789<
->%12.9g< >12345.6789< > 12345.6789<
->%012.9g< >12345.6789< >0012345.6789<
->%-12.9g< >12345.6789< >12345.6789 <
->%*.*g< >[-12, 9, 12345.6789]< >12345.6789 <
->%-012.9g< >12345.6789< >12345.6789 <
->%g< >-12345.6789< >-12345.7<
->%+g< >-12345.6789< >-12345.7<
->%g< >1234567.89< >1.23457e+06<
->%+g< >1234567.89< >+1.23457e+06<
->%#g< >1234567.89< >1.23457e+06<
->%g< >-1234567.89< >-1.23457e+06<
->%+g< >-1234567.89< >-1.23457e+06<
->%#g< >-1234567.89< >-1.23457e+06<
->%g< >0.00012345< >0.00012345<
->%g< >0.000012345< >1.2345e-05<
->%g< >1234567E96< >1.23457e+102<
->%g< >.1234567E-101< >1.23457e-102<
->%g< >0< >0<
->%13g< >1234567.89< > 1.23457e+06<
->%+13g< >1234567.89< > +1.23457e+06<
->%013g< >1234567.89< >001.23457e+06<
->%-13g< >1234567.89< >1.23457e+06 <
->%h< >''< >%h INVALID<
->%i< >123456.789< >123456< >Synonym for %d<
->%j< >''< >%j INVALID<
->%k< >''< >%k INVALID<
->%l< >''< >%l INVALID<
->%m< >''< >%m INVALID<
->%s< >sprintf('%%n%n %d', $n, $n)< >%n 2< >Slight sneakiness to test %n<
->%o< >2**32-1< >37777777777<
->%+o< >2**32-1< >37777777777<
->%#o< >2**32-1< >037777777777<
->%d< >$p=sprintf('%p',$p);$p=~/^[0-9a-f]+$/< >1< >Coarse hack: hex from %p?<
->%#p< >''< >%#p INVALID<
->%q< >''< >%q INVALID<
->%r< >''< >%r INVALID<
->%s< >'string'< >string<
->%10s< >'string'< > string<
->%+10s< >'string'< > string<
->%#10s< >'string'< > string<
->%010s< >'string'< >0000string<
->%0*s< >[10, 'string']< >0000string<
->%-10s< >'string'< >string <
->%3s< >'string'< >string<
->%.3s< >'string'< >str<
->%.*s< >[3, 'string']< >str<
->%t< >''< >%t INVALID<
->%u< >2**32-1< >4294967295<
->%+u< >2**32-1< >4294967295<
->%#u< >2**32-1< >4294967295<
->%12u< >2**32-1< > 4294967295<
->%012u< >2**32-1< >004294967295<
->%-12u< >2**32-1< >4294967295 <
->%-012u< >2**32-1< >4294967295 <
->%v< >''< >%v INVALID<
->%w< >''< >%w INVALID<
->%x< >2**32-1< >ffffffff<
->%+x< >2**32-1< >ffffffff<
->%#x< >2**32-1< >0xffffffff<
->%10x< >2**32-1< > ffffffff<
->%010x< >2**32-1< >00ffffffff<
->%-10x< >2**32-1< >ffffffff <
->%-010x< >2**32-1< >ffffffff <
->%0-10x< >2**32-1< >ffffffff <
->%0*x< >[-10, ,2**32-1]< >ffffffff <
->%y< >''< >%y INVALID<
->%z< >''< >%z INVALID<
diff --git a/contrib/perl5/t/op/stat.t b/contrib/perl5/t/op/stat.t
deleted file mode 100755
index 1d8c7a3..0000000
--- a/contrib/perl5/t/op/stat.t
+++ /dev/null
@@ -1,287 +0,0 @@
-#!./perl
-
-# $RCSfile: stat.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:28 $
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Config;
-
-print "1..58\n";
-
-$Is_MSWin32 = $^O eq 'MSWin32';
-$Is_Dos = $^O eq 'dos';
-$Is_Dosish = $Is_Dos || $^O eq 'os2' || $Is_MSWin32;
-$Is_Cygwin = $^O eq 'cygwin';
-chop($cwd = ($Is_MSWin32 ? `cd` : `pwd`));
-
-$DEV = `ls -l /dev` unless $Is_Dosish or $Is_Cygwin;
-
-unlink "Op.stat.tmp";
-if (open(FOO, ">Op.stat.tmp")) {
- # hack to make Apollo update link count:
- $junk = `ls Op.stat.tmp` unless ($Is_MSWin32 || $Is_Dos);
-
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat(FOO);
- if ($nlink == 1) {
- print "ok 1\n";
- }
- else {
- print "# res=$res, nlink=$nlink.\nnot ok 1\n";
- }
- if ($Is_MSWin32 or $Is_Cygwin or $Is_Dos || ($mtime && $mtime == $ctime)) {
- print "ok 2\n";
- }
- else {
- print "# |$mtime| vs |$ctime|\nnot ok 2\n";
- }
-
- my $funky_FAT_timestamps = $Is_Cygwin;
-
- sleep 3 if $funky_FAT_timestamps;
-
- print FOO "Now is the time for all good men to come to.\n";
- close(FOO);
-
- sleep 2 unless $funky_FAT_timestamps;
-
-} else {
- print "# open failed: $!\nnot ok 1\nnot ok 2\n";
-}
-
-if ($Is_Dosish) { unlink "Op.stat.tmp2"}
-else {
- `rm -f Op.stat.tmp2;ln Op.stat.tmp Op.stat.tmp2; chmod 644 Op.stat.tmp`;
-}
-
-($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
- $blksize,$blocks) = stat('Op.stat.tmp');
-
-if ($Is_Dosish || $Config{dont_use_nlink})
- {print "ok 3 # skipped: no link count\n";}
-elsif ($nlink == 2)
- {print "ok 3\n";}
-else {print "# \$nlink is |$nlink|\nnot ok 3\n";}
-
-if ( $Is_Dosish
- # Solaris tmpfs bug
- || ($cwd =~ m#^/tmp# and $mtime && $mtime==$ctime && $^O eq 'solaris')
- || $cwd =~ m#/afs/#
- || $^O eq 'amigaos') {
- print "ok 4 # skipped: different semantic of mtime/ctime\n";
-}
-elsif ( ($mtime && $mtime != $ctime) ) {
- print "ok 4\n";
-}
-else {
- print "not ok 4\n";
- print "#4 If test op/stat.t fails test 4, check if you are on a tmpfs\n";
- print "#4 of some sort. Building in /tmp sometimes has this problem.\n";
- print "#4 Also building on the ClearCase VOBS filesystem may cause this failure.\n";
-}
-print "#4 :$mtime: should != :$ctime:\n";
-
-unlink "Op.stat.tmp" or print "# unlink failed: $!\n";
-if ($Is_MSWin32) { open F, '>Op.stat.tmp' and close F }
-else { `touch Op.stat.tmp` }
-
-if (-z 'Op.stat.tmp') {print "ok 5\n";} else {print "not ok 5\n";}
-if (! -s 'Op.stat.tmp') {print "ok 6\n";} else {print "not ok 6\n";}
-
-$Is_MSWin32 ? `cmd /c echo hi > Op.stat.tmp` : `echo hi >Op.stat.tmp`;
-if (! -z 'Op.stat.tmp') {print "ok 7\n";} else {print "not ok 7\n";}
-if (-s 'Op.stat.tmp') {print "ok 8\n";} else {print "not ok 8\n";}
-
-unlink 'Op.stat.tmp' or print "# unlink failed: $!\n";
-$olduid = $>; # can't test -r if uid == 0
-$Is_MSWin32 ? `cmd /c echo hi > Op.stat.tmp` : `echo hi >Op.stat.tmp`;
-chmod 0,'Op.stat.tmp';
-eval '$> = 1;'; # so switch uid (may not be implemented)
-if (!$> || $Is_Dos || ! -r 'Op.stat.tmp') {print "ok 9\n";} else {print "not ok 9\n";}
-if (!$> || ! -w 'Op.stat.tmp') {print "ok 10\n";} else {print "not ok 10\n";}
-eval '$> = $olduid;'; # switch uid back (may not be implemented)
-print "# olduid=$olduid, newuid=$>\n" unless ($> == $olduid);
-
-if (! -x 'Op.stat.tmp') {print "ok 11\n";}
-else {print "not ok 11\n";}
-
-foreach ((12,13,14,15,16,17)) {
- print "ok $_\n"; #deleted tests
-}
-
-# in ms windows, Op.stat.tmp inherits owner uid from directory
-# not sure about os/2, but chown is harmless anyway
-eval { chown $>,'Op.stat.tmp'; 1 } or print "# $@" ;
-chmod 0700,'Op.stat.tmp';
-if (-r 'Op.stat.tmp') {print "ok 18\n";} else {print "not ok 18\n";}
-if (-w 'Op.stat.tmp') {print "ok 19\n";} else {print "not ok 19\n";}
-if ($Is_Dosish) {print "ok 20 # skipped: -x by extension\n";}
-elsif (-x 'Op.stat.tmp') {print "ok 20\n";}
-else {print "not ok 20\n";}
-
-if (-f 'Op.stat.tmp') {print "ok 21\n";} else {print "not ok 21\n";}
-if (! -d 'Op.stat.tmp') {print "ok 22\n";} else {print "not ok 22\n";}
-
-if (-d '.') {print "ok 23\n";} else {print "not ok 23\n";}
-if (! -f '.') {print "ok 24\n";} else {print "not ok 24\n";}
-
-if (!$Is_Dosish and `ls -l perl` =~ /^l.*->/) {
- if (-l 'perl') {print "ok 25\n";} else {print "not ok 25\n";}
-}
-else {
- print "ok 25\n";
-}
-
-if (-o 'Op.stat.tmp') {print "ok 26\n";} else {print "not ok 26\n";}
-
-if (-e 'Op.stat.tmp') {print "ok 27\n";} else {print "not ok 27\n";}
-unlink 'Op.stat.tmp2';
-if (! -e 'Op.stat.tmp2') {print "ok 28\n";} else {print "not ok 28\n";}
-
-if ($Is_MSWin32 || $Is_Dos)
- {print "ok 29\n";}
-elsif ($DEV !~ /\nc.* (\S+)\n/)
- {print "ok 29\n";}
-elsif (-c "/dev/$1")
- {print "ok 29\n";}
-else
- {print "not ok 29\n";}
-if (! -c '.') {print "ok 30\n";} else {print "not ok 30\n";}
-
-if ($Is_MSWin32 || $Is_Dos)
- {print "ok 31\n";}
-elsif ($DEV !~ /\ns.* (\S+)\n/)
- {print "ok 31\n";}
-elsif (-S "/dev/$1")
- {print "ok 31\n";}
-else
- {print "not ok 31\n";}
-if (! -S '.') {print "ok 32\n";} else {print "not ok 32\n";}
-
-if ($Is_MSWin32 || $Is_Dos)
- {print "ok 33\n";}
-elsif ($DEV !~ /\nb.* (\S+)\n/)
- {print "ok 33\n";}
-elsif (-b "/dev/$1")
- {print "ok 33\n";}
-else
- {print "not ok 33\n";}
-if (! -b '.') {print "ok 34\n";} else {print "not ok 34\n";}
-
-if ($^O eq 'mpeix' or $^O eq 'amigaos' or $Is_Dosish or $Is_Cygwin) {
- print "ok 35 # skipped: no -u\n"; goto tty_test;
-}
-
-$cnt = $uid = 0;
-
-die "Can't run op/stat.t test 35 without pwd working" unless $cwd;
-my @bin = grep {-d} ($^O eq 'machten' ?
- qw(/usr/bin /bin) :
- qw(/sbin /usr/sbin /bin /usr/bin));
-unless (@bin) { print ("not ok 35\n"), goto tty_test; }
-for my $bin (@bin) {
- opendir BIN, $bin or die "Can't opendir $bin: $!";
- while (defined($_ = readdir BIN)) {
- $_ = "$bin/$_";
- $cnt++;
- $uid++ if -u;
- last if $uid && $uid < $cnt;
- }
-}
-closedir BIN;
-
-# I suppose this is going to fail somewhere...
-if ($uid > 0 && $uid < $cnt)
- {print "ok 35\n";}
-else
- {print "not ok 35 \n# ($uid $cnt)\n";}
-
-tty_test:
-
-# To assist in automated testing when a controlling terminal (/dev/tty)
-# may not be available (at, cron rsh etc), the PERL_SKIP_TTY_TEST env var
-# can be set to skip the tests that need a tty.
-unless($ENV{PERL_SKIP_TTY_TEST}) {
- if ($Is_MSWin32) {
- print "ok 36\n";
- print "ok 37\n";
- }
- else {
- my $TTY = "/dev/tty";
-
- $TTY = "/dev/ttyp0" if $^O eq 'rhapsody';
-
- if (defined $TTY) {
- unless (open(TTY, $TTY)) {
- print STDERR "Can't open $TTY--run t/TEST outside of make.\n";
- }
- if (-t TTY) {print "ok 36\n";} else {print "not ok 36\n";}
- if (-c TTY) {print "ok 37\n";} else {print "not ok 37\n";}
- close(TTY);
- } else { # if some platform completely undefines $TTY
- print "ok 36 # skipped\n";
- print "ok 37 # skipped\n";
- }
- }
- if (! -t TTY) {print "ok 38\n";} else {print "not ok 38\n";}
- if (-t) {print "ok 39\n";} else {print "not ok 39\n";}
-}
-else {
- print "ok 36\n";
- print "ok 37\n";
- print "ok 38\n";
- print "ok 39\n";
-}
-open(null,"/dev/null");
-if (! -t null || -e '/xenix' || $^O eq 'machten' || $Is_MSWin32)
- {print "ok 40\n";} else {print "not ok 40\n";}
-close(null);
-
-# These aren't strictly "stat" calls, but so what?
-
-if (-T 'op/stat.t') {print "ok 41\n";} else {print "not ok 41\n";}
-if (! -B 'op/stat.t') {print "ok 42\n";} else {print "not ok 42\n";}
-
-if (-B './perl' || -B './perl.exe') {print "ok 43\n";} else {print "not ok 43\n";}
-if (! -T './perl' && ! -T './perl.exe') {print "ok 44\n";} else {print "not ok 44\n";}
-
-open(FOO,'op/stat.t');
-eval { -T FOO; };
-if ($@ =~ /not implemented/) {
- print "# $@";
- for (45 .. 54) {
- print "ok $_\n";
- }
-}
-else {
- if (-T FOO) {print "ok 45\n";} else {print "not ok 45\n";}
- if (! -B FOO) {print "ok 46\n";} else {print "not ok 46\n";}
- $_ = <FOO>;
- if (/perl/) {print "ok 47\n";} else {print "not ok 47\n";}
- if (-T FOO) {print "ok 48\n";} else {print "not ok 48\n";}
- if (! -B FOO) {print "ok 49\n";} else {print "not ok 49\n";}
- close(FOO);
-
- open(FOO,'op/stat.t');
- $_ = <FOO>;
- if (/perl/) {print "ok 50\n";} else {print "not ok 50\n";}
- if (-T FOO) {print "ok 51\n";} else {print "not ok 51\n";}
- if (! -B FOO) {print "ok 52\n";} else {print "not ok 52\n";}
- seek(FOO,0,0);
- if (-T FOO) {print "ok 53\n";} else {print "not ok 53\n";}
- if (! -B FOO) {print "ok 54\n";} else {print "not ok 54\n";}
-}
-close(FOO);
-
-if (-T '/dev/null') {print "ok 55\n";} else {print "not ok 55\n";}
-if (-B '/dev/null') {print "ok 56\n";} else {print "not ok 56\n";}
-
-# and now, a few parsing tests:
-$_ = 'Op.stat.tmp';
-if (-f) {print "ok 57\n";} else {print "not ok 57\n";}
-if (-f()) {print "ok 58\n";} else {print "not ok 58\n";}
-
-unlink 'Op.stat.tmp' or print "# unlink failed: $!\n";
diff --git a/contrib/perl5/t/op/study.t b/contrib/perl5/t/op/study.t
deleted file mode 100755
index ea3b366..0000000
--- a/contrib/perl5/t/op/study.t
+++ /dev/null
@@ -1,69 +0,0 @@
-#!./perl
-
-# $RCSfile: study.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:30 $
-
-print "1..24\n";
-
-$x = "abc\ndef\n";
-study($x);
-
-if ($x =~ /^abc/) {print "ok 1\n";} else {print "not ok 1\n";}
-if ($x !~ /^def/) {print "ok 2\n";} else {print "not ok 2\n";}
-
-$* = 1;
-if ($x =~ /^def/) {print "ok 3\n";} else {print "not ok 3\n";}
-$* = 0;
-
-$_ = '123';
-study;
-if (/^([0-9][0-9]*)/) {print "ok 4\n";} else {print "not ok 4\n";}
-
-if ($x =~ /^xxx/) {print "not ok 5\n";} else {print "ok 5\n";}
-if ($x !~ /^abc/) {print "not ok 6\n";} else {print "ok 6\n";}
-
-if ($x =~ /def/) {print "ok 7\n";} else {print "not ok 7\n";}
-if ($x !~ /def/) {print "not ok 8\n";} else {print "ok 8\n";}
-
-study($x);
-if ($x !~ /.def/) {print "ok 9\n";} else {print "not ok 9\n";}
-if ($x =~ /.def/) {print "not ok 10\n";} else {print "ok 10\n";}
-
-if ($x =~ /\ndef/) {print "ok 11\n";} else {print "not ok 11\n";}
-if ($x !~ /\ndef/) {print "not ok 12\n";} else {print "ok 12\n";}
-
-$_ = 'aaabbbccc';
-study;
-if (/(a*b*)(c*)/ && $1 eq 'aaabbb' && $2 eq 'ccc') {
- print "ok 13\n";
-} else {
- print "not ok 13\n";
-}
-if (/(a+b+c+)/ && $1 eq 'aaabbbccc') {
- print "ok 14\n";
-} else {
- print "not ok 14\n";
-}
-
-if (/a+b?c+/) {print "not ok 15\n";} else {print "ok 15\n";}
-
-$_ = 'aaabccc';
-study;
-if (/a+b?c+/) {print "ok 16\n";} else {print "not ok 16\n";}
-if (/a*b+c*/) {print "ok 17\n";} else {print "not ok 17\n";}
-
-$_ = 'aaaccc';
-study;
-if (/a*b?c*/) {print "ok 18\n";} else {print "not ok 18\n";}
-if (/a*b+c*/) {print "not ok 19\n";} else {print "ok 19\n";}
-
-$_ = 'abcdef';
-study;
-if (/bcd|xyz/) {print "ok 20\n";} else {print "not ok 20\n";}
-if (/xyz|bcd/) {print "ok 21\n";} else {print "not ok 21\n";}
-
-if (m|bc/*d|) {print "ok 22\n";} else {print "not ok 22\n";}
-
-if (/^$_$/) {print "ok 23\n";} else {print "not ok 23\n";}
-
-$* = 1; # test 3 only tested the optimized version--this one is for real
-if ("ab\ncd\n" =~ /^cd/) {print "ok 24\n";} else {print "not ok 24\n";}
diff --git a/contrib/perl5/t/op/subst.t b/contrib/perl5/t/op/subst.t
deleted file mode 100755
index 7dd7a1c..0000000
--- a/contrib/perl5/t/op/subst.t
+++ /dev/null
@@ -1,381 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
-}
-
-print "1..84\n";
-
-$x = 'foo';
-$_ = "x";
-s/x/\$x/;
-print "#1\t:$_: eq :\$x:\n";
-if ($_ eq '$x') {print "ok 1\n";} else {print "not ok 1\n";}
-
-$_ = "x";
-s/x/$x/;
-print "#2\t:$_: eq :foo:\n";
-if ($_ eq 'foo') {print "ok 2\n";} else {print "not ok 2\n";}
-
-$_ = "x";
-s/x/\$x $x/;
-print "#3\t:$_: eq :\$x foo:\n";
-if ($_ eq '$x foo') {print "ok 3\n";} else {print "not ok 3\n";}
-
-$b = 'cd';
-($a = 'abcdef') =~ s<(b${b}e)>'\n$1';
-print "#4\t:$1: eq :bcde:\n";
-print "#4\t:$a: eq :a\\n\$1f:\n";
-if ($1 eq 'bcde' && $a eq 'a\n$1f') {print "ok 4\n";} else {print "not ok 4\n";}
-
-$a = 'abacada';
-if (($a =~ s/a/x/g) == 4 && $a eq 'xbxcxdx')
- {print "ok 5\n";} else {print "not ok 5\n";}
-
-if (($a =~ s/a/y/g) == 0 && $a eq 'xbxcxdx')
- {print "ok 6\n";} else {print "not ok 6 $a\n";}
-
-if (($a =~ s/b/y/g) == 1 && $a eq 'xyxcxdx')
- {print "ok 7\n";} else {print "not ok 7 $a\n";}
-
-$_ = 'ABACADA';
-if (/a/i && s///gi && $_ eq 'BCD') {print "ok 8\n";} else {print "not ok 8 $_\n";}
-
-$_ = '\\' x 4;
-if (length($_) == 4) {print "ok 9\n";} else {print "not ok 9\n";}
-s/\\/\\\\/g;
-if ($_ eq '\\' x 8) {print "ok 10\n";} else {print "not ok 10 $_\n";}
-
-$_ = '\/' x 4;
-if (length($_) == 8) {print "ok 11\n";} else {print "not ok 11\n";}
-s/\//\/\//g;
-if ($_ eq '\\//' x 4) {print "ok 12\n";} else {print "not ok 12\n";}
-if (length($_) == 12) {print "ok 13\n";} else {print "not ok 13\n";}
-
-$_ = 'aaaXXXXbbb';
-s/^a//;
-print $_ eq 'aaXXXXbbb' ? "ok 14\n" : "not ok 14\n";
-
-$_ = 'aaaXXXXbbb';
-s/a//;
-print $_ eq 'aaXXXXbbb' ? "ok 15\n" : "not ok 15\n";
-
-$_ = 'aaaXXXXbbb';
-s/^a/b/;
-print $_ eq 'baaXXXXbbb' ? "ok 16\n" : "not ok 16\n";
-
-$_ = 'aaaXXXXbbb';
-s/a/b/;
-print $_ eq 'baaXXXXbbb' ? "ok 17\n" : "not ok 17\n";
-
-$_ = 'aaaXXXXbbb';
-s/aa//;
-print $_ eq 'aXXXXbbb' ? "ok 18\n" : "not ok 18\n";
-
-$_ = 'aaaXXXXbbb';
-s/aa/b/;
-print $_ eq 'baXXXXbbb' ? "ok 19\n" : "not ok 19\n";
-
-$_ = 'aaaXXXXbbb';
-s/b$//;
-print $_ eq 'aaaXXXXbb' ? "ok 20\n" : "not ok 20\n";
-
-$_ = 'aaaXXXXbbb';
-s/b//;
-print $_ eq 'aaaXXXXbb' ? "ok 21\n" : "not ok 21\n";
-
-$_ = 'aaaXXXXbbb';
-s/bb//;
-print $_ eq 'aaaXXXXb' ? "ok 22\n" : "not ok 22\n";
-
-$_ = 'aaaXXXXbbb';
-s/aX/y/;
-print $_ eq 'aayXXXbbb' ? "ok 23\n" : "not ok 23\n";
-
-$_ = 'aaaXXXXbbb';
-s/Xb/z/;
-print $_ eq 'aaaXXXzbb' ? "ok 24\n" : "not ok 24\n";
-
-$_ = 'aaaXXXXbbb';
-s/aaX.*Xbb//;
-print $_ eq 'ab' ? "ok 25\n" : "not ok 25\n";
-
-$_ = 'aaaXXXXbbb';
-s/bb/x/;
-print $_ eq 'aaaXXXXxb' ? "ok 26\n" : "not ok 26\n";
-
-# now for some unoptimized versions of the same.
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/^a//;
-print $_ eq 'aaXXXXbbb' ? "ok 27\n" : "not ok 27\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/a//;
-print $_ eq 'aaXXXXbbb' ? "ok 28\n" : "not ok 28\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/^a/b/;
-print $_ eq 'baaXXXXbbb' ? "ok 29\n" : "not ok 29\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/a/b/;
-print $_ eq 'baaXXXXbbb' ? "ok 30\n" : "not ok 30\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/aa//;
-print $_ eq 'aXXXXbbb' ? "ok 31\n" : "not ok 31\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/aa/b/;
-print $_ eq 'baXXXXbbb' ? "ok 32\n" : "not ok 32\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/b$//;
-print $_ eq 'aaaXXXXbb' ? "ok 33\n" : "not ok 33\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/b//;
-print $_ eq 'aaaXXXXbb' ? "ok 34\n" : "not ok 34\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/bb//;
-print $_ eq 'aaaXXXXb' ? "ok 35\n" : "not ok 35\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/aX/y/;
-print $_ eq 'aayXXXbbb' ? "ok 36\n" : "not ok 36\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/Xb/z/;
-print $_ eq 'aaaXXXzbb' ? "ok 37\n" : "not ok 37\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/aaX.*Xbb//;
-print $_ eq 'ab' ? "ok 38\n" : "not ok 38\n";
-
-$_ = 'aaaXXXXbbb';
-$x ne $x || s/bb/x/;
-print $_ eq 'aaaXXXXxb' ? "ok 39\n" : "not ok 39\n";
-
-$_ = 'abc123xyz';
-s/(\d+)/$1*2/e; # yields 'abc246xyz'
-print $_ eq 'abc246xyz' ? "ok 40\n" : "not ok 40\n";
-s/(\d+)/sprintf("%5d",$1)/e; # yields 'abc 246xyz'
-print $_ eq 'abc 246xyz' ? "ok 41\n" : "not ok 41\n";
-s/(\w)/$1 x 2/eg; # yields 'aabbcc 224466xxyyzz'
-print $_ eq 'aabbcc 224466xxyyzz' ? "ok 42\n" : "not ok 42\n";
-
-$_ = "aaaaa";
-print y/a/b/ == 5 ? "ok 43\n" : "not ok 43\n";
-print y/a/b/ == 0 ? "ok 44\n" : "not ok 44\n";
-print y/b// == 5 ? "ok 45\n" : "not ok 45\n";
-print y/b/c/s == 5 ? "ok 46\n" : "not ok 46\n";
-print y/c// == 1 ? "ok 47\n" : "not ok 47\n";
-print y/c//d == 1 ? "ok 48\n" : "not ok 48\n";
-print $_ eq "" ? "ok 49\n" : "not ok 49\n";
-
-$_ = "Now is the %#*! time for all good men...";
-print (($x=(y/a-zA-Z //cd)) == 7 ? "ok 50\n" : "not ok 50\n");
-print y/ / /s == 8 ? "ok 51\n" : "not ok 51\n";
-
-$_ = 'abcdefghijklmnopqrstuvwxyz0123456789';
-tr/a-z/A-Z/;
-
-print $_ eq 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ? "ok 52\n" : "not ok 52\n";
-
-# same as tr/A-Z/a-z/;
-if ($Config{ebcdic} eq 'define') { # EBCDIC.
- no utf8;
- y[\301-\351][\201-\251];
-} else { # Ye Olde ASCII. Or something like it.
- y[\101-\132][\141-\172];
-}
-
-print $_ eq 'abcdefghijklmnopqrstuvwxyz0123456789' ? "ok 53\n" : "not ok 53\n";
-
-if (ord("+") == ord(",") - 1 && ord(",") == ord("-") - 1 &&
- ord("a") == ord("b") - 1 && ord("b") == ord("c") - 1) {
- $_ = '+,-';
- tr/+--/a-c/;
- print "not " unless $_ eq 'abc';
-}
-print "ok 54\n";
-
-$_ = '+,-';
-tr/+\--/a\/c/;
-print $_ eq 'a,/' ? "ok 55\n" : "not ok 55\n";
-
-$_ = '+,-';
-tr/-+,/ab\-/;
-print $_ eq 'b-a' ? "ok 56\n" : "not ok 56\n";
-
-
-# test recursive substitutions
-# code based on the recursive expansion of makefile variables
-
-my %MK = (
- AAAAA => '$(B)', B=>'$(C)', C => 'D', # long->short
- E => '$(F)', F=>'p $(G) q', G => 'HHHHH', # short->long
- DIR => '$(UNDEFINEDNAME)/xxx',
-);
-sub var {
- my($var,$level) = @_;
- return "\$($var)" unless exists $MK{$var};
- return exp_vars($MK{$var}, $level+1); # can recurse
-}
-sub exp_vars {
- my($str,$level) = @_;
- $str =~ s/\$\((\w+)\)/var($1, $level+1)/ge; # can recurse
- #warn "exp_vars $level = '$str'\n";
- $str;
-}
-
-print exp_vars('$(AAAAA)',0) eq 'D'
- ? "ok 57\n" : "not ok 57\n";
-print exp_vars('$(E)',0) eq 'p HHHHH q'
- ? "ok 58\n" : "not ok 58\n";
-print exp_vars('$(DIR)',0) eq '$(UNDEFINEDNAME)/xxx'
- ? "ok 59\n" : "not ok 59\n";
-print exp_vars('foo $(DIR)/yyy bar',0) eq 'foo $(UNDEFINEDNAME)/xxx/yyy bar'
- ? "ok 60\n" : "not ok 60\n";
-
-# a match nested in the RHS of a substitution:
-
-$_ = "abcd";
-s/(..)/$x = $1, m#.#/eg;
-print $x eq "cd" ? "ok 61\n" : "not ok 61\n";
-
-# Subst and lookbehind
-
-$_="ccccc";
-s/(?<!x)c/x/g;
-print $_ eq "xxxxx" ? "ok 62\n" : "not ok 62 # `$_' ne `xxxxx'\n";
-
-$_="ccccc";
-s/(?<!x)(c)/x/g;
-print $_ eq "xxxxx" ? "ok 63\n" : "not ok 63 # `$_' ne `xxxxx'\n";
-
-$_="foobbarfoobbar";
-s/(?<!r)foobbar/foobar/g;
-print $_ eq "foobarfoobbar" ? "ok 64\n" : "not ok 64 # `$_' ne `foobarfoobbar'\n";
-
-$_="foobbarfoobbar";
-s/(?<!ar)(foobbar)/foobar/g;
-print $_ eq "foobarfoobbar" ? "ok 65\n" : "not ok 65 # `$_' ne `foobarfoobbar'\n";
-
-$_="foobbarfoobbar";
-s/(?<!ar)foobbar/foobar/g;
-print $_ eq "foobarfoobbar" ? "ok 66\n" : "not ok 66 # `$_' ne `foobarfoobbar'\n";
-
-# check parsing of split subst with comment
-eval 's{foo} # this is a comment, not a delimiter
- {bar};';
-print @? ? "not ok 67\n" : "ok 67\n";
-
-# check if squashing works at the end of string
-$_="baacbaa";
-tr/a/b/s;
-print $_ eq "bbcbb" ? "ok 68\n" : "not ok 68 # `$_' ne `bbcbb'\n";
-
-# XXX TODO: Most tests above don't test return values of the ops. They should.
-$_ = "ab";
-print (s/a/b/ == 1 ? "ok 69\n" : "not ok 69\n");
-
-$_ = <<'EOL';
- $url = new URI::URL "http://www/"; die if $url eq "xXx";
-EOL
-$^R = 'junk';
-
-$foo = ' $@%#lowercase $@%# lowercase UPPERCASE$@%#UPPERCASE' .
- ' $@%#lowercase$@%#lowercase$@%# lowercase lowercase $@%#lowercase' .
- ' lowercase $@%#MiXeD$@%# ';
-
-s{ \d+ \b [,.;]? (?{ 'digits' })
- |
- [a-z]+ \b [,.;]? (?{ 'lowercase' })
- |
- [A-Z]+ \b [,.;]? (?{ 'UPPERCASE' })
- |
- [A-Z] [a-z]+ \b [,.;]? (?{ 'Capitalized' })
- |
- [A-Za-z]+ \b [,.;]? (?{ 'MiXeD' })
- |
- [A-Za-z0-9]+ \b [,.;]? (?{ 'alphanumeric' })
- |
- \s+ (?{ ' ' })
- |
- [^A-Za-z0-9\s]+ (?{ '$@%#' })
-}{$^R}xg;
-print ($_ eq $foo ? "ok 70\n" : "not ok 70\n#'$_'\n#'$foo'\n");
-
-$_ = 'x' x 20;
-s/(\d*|x)/<$1>/g;
-$foo = '<>' . ('<x><>' x 20) ;
-print ($_ eq $foo ? "ok 71\n" : "not ok 71\n#'$_'\n#'$foo'\n");
-
-$t = 'aaaaaaaaa';
-
-$_ = $t;
-pos = 6;
-s/\Ga/xx/g;
-print "not " unless $_ eq 'aaaaaaxxxxxx';
-print "ok 72\n";
-
-$_ = $t;
-pos = 6;
-s/\Ga/x/g;
-print "not " unless $_ eq 'aaaaaaxxx';
-print "ok 73\n";
-
-$_ = $t;
-pos = 6;
-s/\Ga/xx/;
-print "not " unless $_ eq 'aaaaaaxxaa';
-print "ok 74\n";
-
-$_ = $t;
-pos = 6;
-s/\Ga/x/;
-print "not " unless $_ eq 'aaaaaaxaa';
-print "ok 75\n";
-
-$_ = $t;
-s/\Ga/xx/g;
-print "not " unless $_ eq 'xxxxxxxxxxxxxxxxxx';
-print "ok 76\n";
-
-$_ = $t;
-s/\Ga/x/g;
-print "not " unless $_ eq 'xxxxxxxxx';
-print "ok 77\n";
-
-$_ = $t;
-s/\Ga/xx/;
-print "not " unless $_ eq 'xxaaaaaaaa';
-print "ok 78\n";
-
-$_ = $t;
-s/\Ga/x/;
-print "not " unless $_ eq 'xaaaaaaaa';
-print "ok 79\n";
-
-$_ = 'aaaa';
-s/\ba/./g;
-print "#'$_'\nnot " unless $_ eq '.aaa';
-print "ok 80\n";
-
-eval q% s/a/"b"}/e %;
-print ($@ =~ /Bad evalled substitution/ ? "ok 81\n" : "not ok 81\n");
-eval q% ($_ = "x") =~ s/(.)/"$1 "/e %;
-print +($_ eq "x " and !length $@) ? "ok 82\n" : "not ok 82\n# \$_ eq $_, $@\n";
-$x = $x = 'interp';
-eval q% ($_ = "x") =~ s/x(($x)*)/"$1"/e %;
-print +($_ eq '' and !length $@) ? "ok 83\n" : "not ok 83\n# \$_ eq $_, $@\n";
-
-$_ = "C:/";
-s/^([a-z]:)/\u$1/ and print "not ";
-print "ok 84\n";
-
diff --git a/contrib/perl5/t/op/subst_amp.t b/contrib/perl5/t/op/subst_amp.t
deleted file mode 100755
index 7189572..0000000
--- a/contrib/perl5/t/op/subst_amp.t
+++ /dev/null
@@ -1,104 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
-}
-
-print "1..13\n";
-
-$_ = 'x' x 20;
-s/\d*|x/<$&>/g;
-$foo = '<>' . ('<x><>' x 20) ;
-print ($_ eq $foo ? "ok 1\n" : "not ok 1\n#'$_'\n#'$foo'\n");
-
-$t = 'aaa';
-
-$_ = $t;
-@res = ();
-pos = 1;
-s/\Ga(?{push @res, $_, $`})/xx/g;
-print "not " unless "$_ @res" eq 'axxxx aaa a aaa aa';
-print "ok 2\n";
-
-$_ = $t;
-@res = ();
-pos = 1;
-s/\Ga(?{push @res, $_, $`})/x/g;
-print "not " unless "$_ @res" eq 'axx aaa a aaa aa';
-print "ok 3\n";
-
-$_ = $t;
-@res = ();
-pos = 1;
-s/\Ga(?{push @res, $_, $`})/xx/;
-print "not " unless "$_ @res" eq 'axxa aaa a';
-print "ok 4\n";
-
-$_ = $t;
-@res = ();
-pos = 1;
-s/\Ga(?{push @res, $_, $`})/x/;
-print "not " unless "$_ @res" eq 'axa aaa a';
-print "ok 5\n";
-
-$a = $t;
-@res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/xx/g;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axxxx aaa a aaa aa';
-print "ok 6\n";
-
-$a = $t;
-@res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x/g;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axx aaa a aaa aa';
-print "ok 7\n";
-
-$a = $t;
-@res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/xx/;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axxa aaa a';
-print "ok 8\n";
-
-$a = $t;
-@res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x/;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axa aaa a';
-print "ok 9\n";
-
-sub x2 {'xx'}
-sub x1 {'x'}
-
-$a = $t;
-@res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x2/ge;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axxxx aaa a aaa aa';
-print "ok 10\n";
-
-$a = $t;
-@res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x1/ge;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axx aaa a aaa aa';
-print "ok 11\n";
-
-$a = $t;
-@res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x2/e;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axxa aaa a';
-print "ok 12\n";
-
-$a = $t;
-@res = ();
-pos ($a) = 1;
-$a =~ s/\Ga(?{push @res, $_, $`})/x1/e;
-print "#'$a' '@res'\nnot " unless "$a @res" eq 'axa aaa a';
-print "ok 13\n";
-
diff --git a/contrib/perl5/t/op/subst_wamp.t b/contrib/perl5/t/op/subst_wamp.t
deleted file mode 100755
index b716b30..0000000
--- a/contrib/perl5/t/op/subst_wamp.t
+++ /dev/null
@@ -1,11 +0,0 @@
-#!./perl
-
-$dummy = defined $&; # Now we have it...
-for $file ('op/subst.t', 't/op/subst.t') {
- if (-r $file) {
- do $file;
- exit;
- }
-}
-die "Cannot find op/subst.t or t/op/subst.t\n";
-
diff --git a/contrib/perl5/t/op/substr.t b/contrib/perl5/t/op/substr.t
deleted file mode 100755
index 85574d5..0000000
--- a/contrib/perl5/t/op/substr.t
+++ /dev/null
@@ -1,587 +0,0 @@
-#!./perl
-
-print "1..174\n";
-
-#P = start of string Q = start of substr R = end of substr S = end of string
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-use warnings ;
-
-$a = 'abcdefxyz';
-$SIG{__WARN__} = sub {
- if ($_[0] =~ /^substr outside of string/) {
- $w++;
- } elsif ($_[0] =~ /^Attempt to use reference as lvalue in substr/) {
- $w += 2;
- } elsif ($_[0] =~ /^Use of uninitialized value/) {
- $w += 3;
- } else {
- warn $_[0];
- }
-};
-
-sub ok { print (($_[1] ? "" : "not ") . "ok $_[0]\n") }
-
-$FATAL_MSG = '^substr outside of string' ;
-
-ok 1, substr($a,0,3) eq 'abc'; # P=Q R S
-ok 2, substr($a,3,3) eq 'def'; # P Q R S
-ok 3, substr($a,6,999) eq 'xyz'; # P Q S R
-$b = substr($a,999,999) ; # warn # P R Q S
-ok 4, $w-- == 1 ;
-eval{substr($a,999,999) = "" ; };# P R Q S
-ok 5, $@ =~ /$FATAL_MSG/;
-ok 6, substr($a,0,-6) eq 'abc'; # P=Q R S
-ok 7, substr($a,-3,1) eq 'x'; # P Q R S
-
-$[ = 1;
-
-ok 8, substr($a,1,3) eq 'abc' ; # P=Q R S
-ok 9, substr($a,4,3) eq 'def' ; # P Q R S
-ok 10, substr($a,7,999) eq 'xyz';# P Q S R
-$b = substr($a,999,999) ; # warn # P R Q S
-ok 11, $w-- == 1 ;
-eval{substr($a,999,999) = "" ; } ; # P R Q S
-ok 12, $@ =~ /$FATAL_MSG/;
-ok 13, substr($a,1,-6) eq 'abc' ;# P=Q R S
-ok 14, substr($a,-3,1) eq 'x' ; # P Q R S
-
-$[ = 0;
-
-substr($a,3,3) = 'XYZ';
-ok 15, $a eq 'abcXYZxyz' ;
-substr($a,0,2) = '';
-ok 16, $a eq 'cXYZxyz' ;
-substr($a,0,0) = 'ab';
-ok 17, $a eq 'abcXYZxyz' ;
-substr($a,0,0) = '12345678';
-ok 18, $a eq '12345678abcXYZxyz' ;
-substr($a,-3,3) = 'def';
-ok 19, $a eq '12345678abcXYZdef';
-substr($a,-3,3) = '<';
-ok 20, $a eq '12345678abcXYZ<' ;
-substr($a,-1,1) = '12345678';
-ok 21, $a eq '12345678abcXYZ12345678' ;
-
-$a = 'abcdefxyz';
-
-ok 22, substr($a,6) eq 'xyz' ; # P Q R=S
-ok 23, substr($a,-3) eq 'xyz' ; # P Q R=S
-$b = substr($a,999,999) ; # warning # P R=S Q
-ok 24, $w-- == 1 ;
-eval{substr($a,999,999) = "" ; } ; # P R=S Q
-ok 25, $@ =~ /$FATAL_MSG/;
-ok 26, substr($a,0) eq 'abcdefxyz' ; # P=Q R=S
-ok 27, substr($a,9) eq '' ; # P Q=R=S
-ok 28, substr($a,-11) eq 'abcdefxyz'; # Q P R=S
-ok 29, substr($a,-9) eq 'abcdefxyz'; # P=Q R=S
-
-$a = '54321';
-
-$b = substr($a,-7, 1) ; # warn # Q R P S
-ok 30, $w-- == 1 ;
-eval{substr($a,-7, 1) = "" ; }; # Q R P S
-ok 31, $@ =~ /$FATAL_MSG/;
-$b = substr($a,-7,-6) ; # warn # Q R P S
-ok 32, $w-- == 1 ;
-eval{substr($a,-7,-6) = "" ; }; # Q R P S
-ok 33, $@ =~ /$FATAL_MSG/;
-ok 34, substr($a,-5,-7) eq ''; # R P=Q S
-ok 35, substr($a, 2,-7) eq ''; # R P Q S
-ok 36, substr($a,-3,-7) eq ''; # R P Q S
-ok 37, substr($a, 2,-5) eq ''; # P=R Q S
-ok 38, substr($a,-3,-5) eq ''; # P=R Q S
-ok 39, substr($a, 2,-4) eq ''; # P R Q S
-ok 40, substr($a,-3,-4) eq ''; # P R Q S
-ok 41, substr($a, 5,-6) eq ''; # R P Q=S
-ok 42, substr($a, 5,-5) eq ''; # P=R Q S
-ok 43, substr($a, 5,-3) eq ''; # P R Q=S
-$b = substr($a, 7,-7) ; # warn # R P S Q
-ok 44, $w-- == 1 ;
-eval{substr($a, 7,-7) = "" ; }; # R P S Q
-ok 45, $@ =~ /$FATAL_MSG/;
-$b = substr($a, 7,-5) ; # warn # P=R S Q
-ok 46, $w-- == 1 ;
-eval{substr($a, 7,-5) = "" ; }; # P=R S Q
-ok 47, $@ =~ /$FATAL_MSG/;
-$b = substr($a, 7,-3) ; # warn # P Q S Q
-ok 48, $w-- == 1 ;
-eval{substr($a, 7,-3) = "" ; }; # P Q S Q
-ok 49, $@ =~ /$FATAL_MSG/;
-$b = substr($a, 7, 0) ; # warn # P S Q=R
-ok 50, $w-- == 1 ;
-eval{substr($a, 7, 0) = "" ; }; # P S Q=R
-ok 51, $@ =~ /$FATAL_MSG/;
-
-ok 52, substr($a,-7,2) eq ''; # Q P=R S
-ok 53, substr($a,-7,4) eq '54'; # Q P R S
-ok 54, substr($a,-7,7) eq '54321';# Q P R=S
-ok 55, substr($a,-7,9) eq '54321';# Q P S R
-ok 56, substr($a,-5,0) eq ''; # P=Q=R S
-ok 57, substr($a,-5,3) eq '543';# P=Q R S
-ok 58, substr($a,-5,5) eq '54321';# P=Q R=S
-ok 59, substr($a,-5,7) eq '54321';# P=Q S R
-ok 60, substr($a,-3,0) eq ''; # P Q=R S
-ok 61, substr($a,-3,3) eq '321';# P Q R=S
-ok 62, substr($a,-2,3) eq '21'; # P Q S R
-ok 63, substr($a,0,-5) eq ''; # P=Q=R S
-ok 64, substr($a,2,-3) eq ''; # P Q=R S
-ok 65, substr($a,0,0) eq ''; # P=Q=R S
-ok 66, substr($a,0,5) eq '54321';# P=Q R=S
-ok 67, substr($a,0,7) eq '54321';# P=Q S R
-ok 68, substr($a,2,0) eq ''; # P Q=R S
-ok 69, substr($a,2,3) eq '321'; # P Q R=S
-ok 70, substr($a,5,0) eq ''; # P Q=R=S
-ok 71, substr($a,5,2) eq ''; # P Q=S R
-ok 72, substr($a,-7,-5) eq ''; # Q P=R S
-ok 73, substr($a,-7,-2) eq '543';# Q P R S
-ok 74, substr($a,-5,-5) eq ''; # P=Q=R S
-ok 75, substr($a,-5,-2) eq '543';# P=Q R S
-ok 76, substr($a,-3,-3) eq ''; # P Q=R S
-ok 77, substr($a,-3,-1) eq '32';# P Q R S
-
-$a = '';
-
-ok 78, substr($a,-2,2) eq ''; # Q P=R=S
-ok 79, substr($a,0,0) eq ''; # P=Q=R=S
-ok 80, substr($a,0,1) eq ''; # P=Q=S R
-ok 81, substr($a,-2,3) eq ''; # Q P=S R
-ok 82, substr($a,-2) eq ''; # Q P=R=S
-ok 83, substr($a,0) eq ''; # P=Q=R=S
-
-
-ok 84, substr($a,0,-1) eq ''; # R P=Q=S
-$b = substr($a,-2, 0) ; # warn # Q=R P=S
-ok 85, $w-- == 1 ;
-eval{substr($a,-2, 0) = "" ; }; # Q=R P=S
-ok 86, $@ =~ /$FATAL_MSG/;
-
-$b = substr($a,-2, 1) ; # warn # Q R P=S
-ok 87, $w-- == 1 ;
-eval{substr($a,-2, 1) = "" ; }; # Q R P=S
-ok 88, $@ =~ /$FATAL_MSG/;
-
-$b = substr($a,-2,-1) ; # warn # Q R P=S
-ok 89, $w-- == 1 ;
-eval{substr($a,-2,-1) = "" ; }; # Q R P=S
-ok 90, $@ =~ /$FATAL_MSG/;
-
-$b = substr($a,-2,-2) ; # warn # Q=R P=S
-ok 91, $w-- == 1 ;
-eval{substr($a,-2,-2) = "" ; }; # Q=R P=S
-ok 92, $@ =~ /$FATAL_MSG/;
-
-$b = substr($a, 1,-2) ; # warn # R P=S Q
-ok 93, $w-- == 1 ;
-eval{substr($a, 1,-2) = "" ; }; # R P=S Q
-ok 94, $@ =~ /$FATAL_MSG/;
-
-$b = substr($a, 1, 1) ; # warn # P=S Q R
-ok 95, $w-- == 1 ;
-eval{substr($a, 1, 1) = "" ; }; # P=S Q R
-ok 96, $@ =~ /$FATAL_MSG/;
-
-$b = substr($a, 1, 0) ;# warn # P=S Q=R
-ok 97, $w-- == 1 ;
-eval{substr($a, 1, 0) = "" ; }; # P=S Q=R
-ok 98, $@ =~ /$FATAL_MSG/;
-
-$b = substr($a,1) ; # warning # P=R=S Q
-ok 99, $w-- == 1 ;
-eval{substr($a,1) = "" ; }; # P=R=S Q
-ok 100, $@ =~ /$FATAL_MSG/;
-
-my $a = 'zxcvbnm';
-substr($a,2,0) = '';
-ok 101, $a eq 'zxcvbnm';
-substr($a,7,0) = '';
-ok 102, $a eq 'zxcvbnm';
-substr($a,5,0) = '';
-ok 103, $a eq 'zxcvbnm';
-substr($a,0,2) = 'pq';
-ok 104, $a eq 'pqcvbnm';
-substr($a,2,0) = 'r';
-ok 105, $a eq 'pqrcvbnm';
-substr($a,8,0) = 'asd';
-ok 106, $a eq 'pqrcvbnmasd';
-substr($a,0,2) = 'iop';
-ok 107, $a eq 'ioprcvbnmasd';
-substr($a,0,5) = 'fgh';
-ok 108, $a eq 'fghvbnmasd';
-substr($a,3,5) = 'jkl';
-ok 109, $a eq 'fghjklsd';
-substr($a,3,2) = '1234';
-ok 110, $a eq 'fgh1234lsd';
-
-
-# with lexicals (and in re-entered scopes)
-for (0,1) {
- my $txt;
- unless ($_) {
- $txt = "Foo";
- substr($txt, -1) = "X";
- ok 111, $txt eq "FoX";
- }
- else {
- substr($txt, 0, 1) = "X";
- ok 112, $txt eq "X";
- }
-}
-
-$w = 0 ;
-# coercion of references
-{
- my $s = [];
- substr($s, 0, 1) = 'Foo';
- ok 113, substr($s,0,7) eq "FooRRAY" && !($w-=2);
-}
-
-# check no spurious warnings
-ok 114, $w == 0;
-
-# check new 4 arg replacement syntax
-$a = "abcxyz";
-$w = 0;
-ok 115, substr($a, 0, 3, "") eq "abc" && $a eq "xyz";
-ok 116, substr($a, 0, 0, "abc") eq "" && $a eq "abcxyz";
-ok 117, substr($a, 3, -1, "") eq "xy" && $a eq "abcz";
-
-ok 118, substr($a, 3, undef, "xy") eq "" && $a eq "abcxyz"
- && $w == 3;
-
-$w = 0;
-
-ok 119, substr($a, 3, 9999999, "") eq "xyz" && $a eq "abc";
-eval{substr($a, -99, 0, "") };
-ok 120, $@ =~ /$FATAL_MSG/;
-eval{substr($a, 99, 3, "") };
-ok 121, $@ =~ /$FATAL_MSG/;
-
-substr($a, 0, length($a), "foo");
-ok 122, $a eq "foo" && !$w;
-
-# using 4 arg substr as lvalue is a compile time error
-eval 'substr($a,0,0,"") = "abc"';
-ok 123, $@ && $@ =~ /Can't modify substr/ && $a eq "foo";
-
-$a = "abcdefgh";
-ok 124, sub { shift }->(substr($a, 0, 4, "xxxx")) eq 'abcd';
-ok 125, $a eq 'xxxxefgh';
-
-{
- my $y = 10;
- $y = "2" . $y;
- ok 126, $y+0 == 210;
-}
-
-# utf8 sanity
-{
- my $x = substr("a\x{263a}b",0);
- ok 127, length($x) == 3;
- $x = substr($x,1,1);
- ok 128, $x eq "\x{263a}";
- $x = $x x 2;
- ok 129, length($x) == 2;
- substr($x,0,1) = "abcd";
- ok 130, $x eq "abcd\x{263a}";
- ok 131, length($x) == 5;
- $x = reverse $x;
- ok 132, length($x) == 5;
- ok 133, $x eq "\x{263a}dcba";
-
- my $z = 10;
- $z = "21\x{263a}" . $z;
- ok 134, length($z) == 5;
- ok 135, $z eq "21\x{263a}10";
-}
-
-# replacement should work on magical values
-require Tie::Scalar;
-my %data;
-tie $data{'a'}, 'Tie::StdScalar'; # makes $data{'a'} magical
-$data{a} = "firstlast";
-ok 136, substr($data{'a'}, 0, 5, "") eq "first" && $data{'a'} eq "last";
-
-# more utf8
-
-# The following two originally from Ignasi Roca.
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 1) = "\x{100}"; # Ignasi had \x{FF}
-ok 137, length($x) == 3 &&
- $x eq "\x{100}\xF2\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{F3}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 1) = "\x{100}\x{FF}"; # Ignasi had \x{FF}
-ok 138, length($x) == 4 &&
- $x eq "\x{100}\x{FF}\xF2\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F2}" &&
- substr($x, 3, 1) eq "\x{F3}";
-
-# more utf8 lval exercise
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, 2) = "\x{100}\xFF";
-ok 139, length($x) == 3 &&
- $x eq "\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F3}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, 1, 1) = "\x{100}\xFF";
-ok 140, length($x) == 4 &&
- $x eq "\xF1\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{F1}" &&
- substr($x, 1, 1) eq "\x{100}" &&
- substr($x, 2, 1) eq "\x{FF}" &&
- substr($x, 3, 1) eq "\x{F3}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, 2, 1) = "\x{100}\xFF";
-ok 141, length($x) == 4 &&
- $x eq "\xF1\xF2\x{100}\xFF" &&
- substr($x, 0, 1) eq "\x{F1}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{100}" &&
- substr($x, 3, 1) eq "\x{FF}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, 3, 1) = "\x{100}\xFF";
-ok 142, length($x) == 5 &&
- $x eq "\xF1\xF2\xF3\x{100}\xFF" &&
- substr($x, 0, 1) eq "\x{F1}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{F3}" &&
- substr($x, 3, 1) eq "\x{100}" &&
- substr($x, 4, 1) eq "\x{FF}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, 1) = "\x{100}\xFF";
-ok 143, length($x) == 4 &&
- $x eq "\xF1\xF2\x{100}\xFF" &&
- substr($x, 0, 1) eq "\x{F1}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{100}" &&
- substr($x, 3, 1) eq "\x{FF}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, 0) = "\x{100}\xFF";
-ok 144, length($x) == 5 &&
- $x eq "\xF1\xF2\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{F1}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{100}" &&
- substr($x, 3, 1) eq "\x{FF}" &&
- substr($x, 4, 1) eq "\x{F3}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -1) = "\x{100}\xFF";
-ok 145, length($x) == 3 &&
- $x eq "\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F3}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -2) = "\x{100}\xFF";
-ok 146, length($x) == 4 &&
- $x eq "\x{100}\xFF\xF2\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F2}" &&
- substr($x, 3, 1) eq "\x{F3}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, 0, -3) = "\x{100}\xFF";
-ok 147, length($x) == 5 &&
- $x eq "\x{100}\xFF\xF1\xF2\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F1}" &&
- substr($x, 3, 1) eq "\x{F2}" &&
- substr($x, 4, 1) eq "\x{F3}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, 1, -1) = "\x{100}\xFF";
-ok 148, length($x) == 4 &&
- $x eq "\xF1\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{F1}" &&
- substr($x, 1, 1) eq "\x{100}" &&
- substr($x, 2, 1) eq "\x{FF}" &&
- substr($x, 3, 1) eq "\x{F3}";
-
-$x = "\xF1\xF2\xF3";
-substr($x, -1, -1) = "\x{100}\xFF";
-ok 149, length($x) == 5 &&
- $x eq "\xF1\xF2\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{F1}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{100}" &&
- substr($x, 3, 1) eq "\x{FF}" &&
- substr($x, 4, 1) eq "\x{F3}";
-
-# And tests for already-UTF8 one
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 1) = "\x{100}";
-ok 150, length($x) == 3 &&
- $x eq "\x{100}\xF2\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 1) = "\x{100}\x{FF}";
-ok 151, length($x) == 4 &&
- $x eq "\x{100}\x{FF}\xF2\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F2}" &&
- substr($x, 3, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, 2) = "\x{100}\xFF";
-ok 152, length($x) == 3 &&
- $x eq "\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 1, 1) = "\x{100}\xFF";
-ok 153, length($x) == 4 &&
- $x eq "\x{101}\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{101}" &&
- substr($x, 1, 1) eq "\x{100}" &&
- substr($x, 2, 1) eq "\x{FF}" &&
- substr($x, 3, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 2, 1) = "\x{100}\xFF";
-ok 154, length($x) == 4 &&
- $x eq "\x{101}\xF2\x{100}\xFF" &&
- substr($x, 0, 1) eq "\x{101}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{100}" &&
- substr($x, 3, 1) eq "\x{FF}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 3, 1) = "\x{100}\xFF";
-ok 155, length($x) == 5 &&
- $x eq "\x{101}\x{F2}\x{F3}\x{100}\xFF" &&
- substr($x, 0, 1) eq "\x{101}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{F3}" &&
- substr($x, 3, 1) eq "\x{100}" &&
- substr($x, 4, 1) eq "\x{FF}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, 1) = "\x{100}\xFF";
-ok 156, length($x) == 4 &&
- $x eq "\x{101}\xF2\x{100}\xFF" &&
- substr($x, 0, 1) eq "\x{101}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{100}" &&
- substr($x, 3, 1) eq "\x{FF}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, 0) = "\x{100}\xFF";
-ok 157, length($x) == 5 &&
- $x eq "\x{101}\xF2\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{101}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{100}" &&
- substr($x, 3, 1) eq "\x{FF}" &&
- substr($x, 4, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -1) = "\x{100}\xFF";
-ok 158, length($x) == 3 &&
- $x eq "\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -2) = "\x{100}\xFF";
-ok 159, length($x) == 4 &&
- $x eq "\x{100}\xFF\xF2\xF3" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{F2}" &&
- substr($x, 3, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 0, -3) = "\x{100}\xFF";
-ok 160, length($x) == 5 &&
- $x eq "\x{100}\xFF\x{101}\x{F2}\x{F3}" &&
- substr($x, 0, 1) eq "\x{100}" &&
- substr($x, 1, 1) eq "\x{FF}" &&
- substr($x, 2, 1) eq "\x{101}" &&
- substr($x, 3, 1) eq "\x{F2}" &&
- substr($x, 4, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, 1, -1) = "\x{100}\xFF";
-ok 161, length($x) == 4 &&
- $x eq "\x{101}\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{101}" &&
- substr($x, 1, 1) eq "\x{100}" &&
- substr($x, 2, 1) eq "\x{FF}" &&
- substr($x, 3, 1) eq "\x{F3}";
-
-$x = "\x{101}\x{F2}\x{F3}";
-substr($x, -1, -1) = "\x{100}\xFF";
-ok 162, length($x) == 5 &&
- $x eq "\x{101}\xF2\x{100}\xFF\xF3" &&
- substr($x, 0, 1) eq "\x{101}" &&
- substr($x, 1, 1) eq "\x{F2}" &&
- substr($x, 2, 1) eq "\x{100}" &&
- substr($x, 3, 1) eq "\x{FF}" &&
- substr($x, 4, 1) eq "\x{F3}";
-
-substr($x = "ab", 0, 0, "\x{100}\x{200}");
-ok 163, $x eq "\x{100}\x{200}ab";
-
-substr($x = "\x{100}\x{200}", 0, 0, "ab");
-ok 164, $x eq "ab\x{100}\x{200}";
-
-substr($x = "ab", 1, 0, "\x{100}\x{200}");
-ok 165, $x eq "a\x{100}\x{200}b";
-
-substr($x = "\x{100}\x{200}", 1, 0, "ab");
-ok 166, $x eq "\x{100}ab\x{200}";
-
-substr($x = "ab", 2, 0, "\x{100}\x{200}");
-ok 167, $x eq "ab\x{100}\x{200}";
-
-substr($x = "\x{100}\x{200}", 2, 0, "ab");
-ok 168, $x eq "\x{100}\x{200}ab";
-
-substr($x = "\xFFb", 0, 0, "\x{100}\x{200}");
-ok 169, $x eq "\x{100}\x{200}\xFFb";
-
-substr($x = "\x{100}\x{200}", 0, 0, "\xFFb");
-ok 170, $x eq "\xFFb\x{100}\x{200}";
-
-substr($x = "\xFFb", 1, 0, "\x{100}\x{200}");
-ok 171, $x eq "\xFF\x{100}\x{200}b";
-
-substr($x = "\x{100}\x{200}", 1, 0, "\xFFb");
-ok 172, $x eq "\x{100}\xFFb\x{200}";
-
-substr($x = "\xFFb", 2, 0, "\x{100}\x{200}");
-ok 173, $x eq "\xFFb\x{100}\x{200}";
-
-substr($x = "\x{100}\x{200}", 2, 0, "\xFFb");
-ok 174, $x eq "\x{100}\x{200}\xFFb";
-
diff --git a/contrib/perl5/t/op/sysio.t b/contrib/perl5/t/op/sysio.t
deleted file mode 100755
index e43f850..0000000
--- a/contrib/perl5/t/op/sysio.t
+++ /dev/null
@@ -1,210 +0,0 @@
-#!./perl
-
-print "1..39\n";
-
-chdir('op') || chdir('t/op') || die "sysio.t: cannot look for myself: $!";
-
-open(I, 'sysio.t') || die "sysio.t: cannot find myself: $!";
-
-$reopen = ($^O eq 'VMS' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'dos' ||
- $^O eq 'mpeix');
-
-$x = 'abc';
-
-# should not be able to do negative lengths
-eval { sysread(I, $x, -1) };
-print 'not ' unless ($@ =~ /^Negative length /);
-print "ok 1\n";
-
-# $x should be intact
-print 'not ' unless ($x eq 'abc');
-print "ok 2\n";
-
-# should not be able to read before the buffer
-eval { sysread(I, $x, 1, -4) };
-print 'not ' unless ($x eq 'abc');
-print "ok 3\n";
-
-# $x should be intact
-print 'not ' unless ($x eq 'abc');
-print "ok 4\n";
-
-$a ='0123456789';
-
-# default offset 0
-print 'not ' unless(sysread(I, $a, 3) == 3);
-print "ok 5\n";
-
-# $a should be as follows
-print 'not ' unless ($a eq '#!.');
-print "ok 6\n";
-
-# reading past the buffer should zero pad
-print 'not ' unless(sysread(I, $a, 2, 5) == 2);
-print "ok 7\n";
-
-# the zero pad should be seen now
-print 'not ' unless ($a eq "#!.\0\0/p");
-print "ok 8\n";
-
-# try changing the last two characters of $a
-print 'not ' unless(sysread(I, $a, 3, -2) == 3);
-print "ok 9\n";
-
-# the last two characters of $a should have changed (into three)
-print 'not ' unless ($a eq "#!.\0\0erl");
-print "ok 10\n";
-
-$outfile = 'sysio.out';
-
-open(O, ">$outfile") || die "sysio.t: cannot write $outfile: $!";
-
-select(O); $|=1; select(STDOUT);
-
-# cannot write negative lengths
-eval { syswrite(O, $x, -1) };
-print 'not ' unless ($@ =~ /^Negative length /);
-print "ok 11\n";
-
-# $x still intact
-print 'not ' unless ($x eq 'abc');
-print "ok 12\n";
-
-# $outfile still intact
-print 'not ' if (-s $outfile);
-print "ok 13\n";
-
-# should not be able to write from after the buffer
-eval { syswrite(O, $x, 1, 3) };
-print 'not ' unless ($@ =~ /^Offset outside string /);
-print "ok 14\n";
-
-# $x still intact
-print 'not ' unless ($x eq 'abc');
-print "ok 15\n";
-
-# $outfile still intact
-if ($reopen) { # must close file to update EOF marker for stat
- close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";
-}
-print 'not ' if (-s $outfile);
-print "ok 16\n";
-
-# should not be able to write from before the buffer
-
-eval { syswrite(O, $x, 1, -4) };
-print 'not ' unless ($@ =~ /^Offset outside string /);
-print "ok 17\n";
-
-# $x still intact
-print 'not ' unless ($x eq 'abc');
-print "ok 18\n";
-
-# $outfile still intact
-if ($reopen) { # must close file to update EOF marker for stat
- close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";
-}
-print 'not ' if (-s $outfile);
-print "ok 19\n";
-
-# default offset 0
-print 'not ' unless (syswrite(O, $a, 2) == 2);
-print "ok 20\n";
-
-# $a still intact
-print 'not ' unless ($a eq "#!.\0\0erl");
-print "ok 21\n";
-
-# $outfile should have grown now
-if ($reopen) { # must close file to update EOF marker for stat
- close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";
-}
-print 'not ' unless (-s $outfile == 2);
-print "ok 22\n";
-
-# with offset
-print 'not ' unless (syswrite(O, $a, 2, 5) == 2);
-print "ok 23\n";
-
-# $a still intact
-print 'not ' unless ($a eq "#!.\0\0erl");
-print "ok 24\n";
-
-# $outfile should have grown now
-if ($reopen) { # must close file to update EOF marker for stat
- close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";
-}
-print 'not ' unless (-s $outfile == 4);
-print "ok 25\n";
-
-# with negative offset and a bit too much length
-print 'not ' unless (syswrite(O, $a, 5, -3) == 3);
-print "ok 26\n";
-
-# $a still intact
-print 'not ' unless ($a eq "#!.\0\0erl");
-print "ok 27\n";
-
-# $outfile should have grown now
-if ($reopen) { # must close file to update EOF marker for stat
- close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";
-}
-print 'not ' unless (-s $outfile == 7);
-print "ok 28\n";
-
-# with implicit length argument
-print 'not ' unless (syswrite(O, $x) == 3);
-print "ok 29\n";
-
-# $a still intact
-print 'not ' unless ($x eq "abc");
-print "ok 30\n";
-
-# $outfile should have grown now
-if ($reopen) { # must close file to update EOF marker for stat
- close O; open(O, ">>$outfile") || die "sysio.t: cannot write $outfile: $!";
-}
-print 'not ' unless (-s $outfile == 10);
-print "ok 31\n";
-
-close(O);
-
-open(I, $outfile) || die "sysio.t: cannot read $outfile: $!";
-
-$b = 'xyz';
-
-# reading too much only return as much as available
-print 'not ' unless (sysread(I, $b, 100) == 10);
-print "ok 32\n";
-# this we should have
-print 'not ' unless ($b eq '#!ererlabc');
-print "ok 33\n";
-
-# test sysseek
-
-print 'not ' unless sysseek(I, 2, 0) == 2;
-print "ok 34\n";
-sysread(I, $b, 3);
-print 'not ' unless $b eq 'ere';
-print "ok 35\n";
-
-print 'not ' unless sysseek(I, -2, 1) == 3;
-print "ok 36\n";
-sysread(I, $b, 4);
-print 'not ' unless $b eq 'rerl';
-print "ok 37\n";
-
-print 'not ' unless sysseek(I, 0, 0) eq '0 but true';
-print "ok 38\n";
-print 'not ' if defined sysseek(I, -1, 1);
-print "ok 39\n";
-
-close(I);
-
-unlink $outfile;
-
-chdir('..');
-
-1;
-
-# eof
diff --git a/contrib/perl5/t/op/taint.t b/contrib/perl5/t/op/taint.t
deleted file mode 100755
index 2958a37..0000000
--- a/contrib/perl5/t/op/taint.t
+++ /dev/null
@@ -1,735 +0,0 @@
-#!./perl -T
-#
-# Taint tests by Tom Phoenix <rootbeer@teleport.com>.
-#
-# I don't claim to know all about tainting. If anyone sees
-# tests that I've missed here, please add them. But this is
-# better than having no tests at all, right?
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use strict;
-use Config;
-
-# We do not want the whole taint.t to fail
-# just because Errno possibly failing.
-eval { require Errno; import Errno };
-
-use vars qw($ipcsysv); # did we manage to load IPC::SysV?
-
-BEGIN {
- if ($^O eq 'VMS' && !defined($Config{d_setenv})) {
- $ENV{PATH} = $ENV{PATH};
- $ENV{TERM} = $ENV{TERM} ne ''? $ENV{TERM} : 'dummy';
- }
- if ($Config{'extensions'} =~ /\bIPC\/SysV\b/
- && ($Config{d_shm} || $Config{d_msg})) {
- eval { require IPC::SysV };
- unless ($@) {
- $ipcsysv++;
- IPC::SysV->import(qw(IPC_PRIVATE IPC_RMID IPC_CREAT S_IRWXU));
- }
- }
-}
-
-my $Is_VMS = $^O eq 'VMS';
-my $Is_MSWin32 = $^O eq 'MSWin32';
-my $Is_Dos = $^O eq 'dos';
-my $Invoke_Perl = $Is_VMS ? 'MCR Sys$Disk:[]Perl.' :
- $Is_MSWin32 ? '.\perl' : './perl';
-my @MoreEnv = qw/IFS CDPATH ENV BASH_ENV/;
-
-if ($Is_VMS) {
- my (%old, $x);
- for $x ('DCL$PATH', @MoreEnv) {
- ($old{$x}) = $ENV{$x} =~ /^(.*)$/ if exists $ENV{$x};
- }
- eval <<EndOfCleanup;
- END {
- \$ENV{PATH} = '' if $Config{d_setenv};
- warn "# Note: logical name 'PATH' may have been deleted\n";
- \@ENV{keys %old} = values %old;
- }
-EndOfCleanup
-}
-
-# Sources of taint:
-# The empty tainted value, for tainting strings
-my $TAINT = substr($^X, 0, 0);
-# A tainted zero, useful for tainting numbers
-my $TAINT0 = 0 + $TAINT;
-
-# This taints each argument passed. All must be lvalues.
-# Side effect: It also stringifies them. :-(
-sub taint_these (@) {
- for (@_) { $_ .= $TAINT }
-}
-
-# How to identify taint when you see it
-sub any_tainted (@) {
- not eval { join("",@_), kill 0; 1 };
-}
-sub tainted ($) {
- any_tainted @_;
-}
-sub all_tainted (@) {
- for (@_) { return 0 unless tainted $_ }
- 1;
-}
-
-sub test ($$;$) {
- my($serial, $boolean, $diag) = @_;
- if ($boolean) {
- print "ok $serial\n";
- } else {
- print "not ok $serial\n";
- for (split m/^/m, $diag) {
- print "# $_";
- }
- print "\n" unless
- $diag eq ''
- or substr($diag, -1) eq "\n";
- }
-}
-
-# We need an external program to call.
-my $ECHO = ($Is_MSWin32 ? ".\\echo$$" : "./echo$$");
-END { unlink $ECHO }
-open PROG, "> $ECHO" or die "Can't create $ECHO: $!";
-print PROG 'print "@ARGV\n"', "\n";
-close PROG;
-my $echo = "$Invoke_Perl $ECHO";
-
-print "1..155\n";
-
-# First, let's make sure that Perl is checking the dangerous
-# environment variables. Maybe they aren't set yet, so we'll
-# taint them ourselves.
-{
- $ENV{'DCL$PATH'} = '' if $Is_VMS;
-
- $ENV{PATH} = '';
- delete @ENV{@MoreEnv};
- $ENV{TERM} = 'dumb';
-
- test 1, eval { `$echo 1` } eq "1\n";
-
- if ($Is_MSWin32 || $Is_VMS || $Is_Dos) {
- print "# Environment tainting tests skipped\n";
- for (2..5) { print "ok $_\n" }
- }
- else {
- my @vars = ('PATH', @MoreEnv);
- while (my $v = $vars[0]) {
- local $ENV{$v} = $TAINT;
- last if eval { `$echo 1` };
- last unless $@ =~ /^Insecure \$ENV{$v}/;
- shift @vars;
- }
- test 2, !@vars, "\$$vars[0]";
-
- # tainted $TERM is unsafe only if it contains metachars
- local $ENV{TERM};
- $ENV{TERM} = 'e=mc2';
- test 3, eval { `$echo 1` } eq "1\n";
- $ENV{TERM} = 'e=mc2' . $TAINT;
- test 4, eval { `$echo 1` } eq '';
- test 5, $@ =~ /^Insecure \$ENV{TERM}/, $@;
- }
-
- my $tmp;
- if ($^O eq 'os2' || $^O eq 'amigaos' || $Is_MSWin32 || $Is_Dos) {
- print "# all directories are writeable\n";
- }
- else {
- $tmp = (grep { defined and -d and (stat _)[2] & 2 }
- qw(sys$scratch /tmp /var/tmp /usr/tmp),
- @ENV{qw(TMP TEMP)})[0]
- or print "# can't find world-writeable directory to test PATH\n";
- }
-
- if ($tmp) {
- local $ENV{PATH} = $tmp;
- test 6, eval { `$echo 1` } eq '';
- test 7, $@ =~ /^Insecure directory in \$ENV{PATH}/, $@;
- }
- else {
- for (6..7) { print "ok $_ # Skipped: all directories are writeable\n" }
- }
-
- if ($Is_VMS) {
- $ENV{'DCL$PATH'} = $TAINT;
- test 8, eval { `$echo 1` } eq '';
- test 9, $@ =~ /^Insecure \$ENV{DCL\$PATH}/, $@;
- if ($tmp) {
- $ENV{'DCL$PATH'} = $tmp;
- test 10, eval { `$echo 1` } eq '';
- test 11, $@ =~ /^Insecure directory in \$ENV{DCL\$PATH}/, $@;
- }
- else {
- for (10..11) { print "ok $_ # Skipped: can't find world-writeable directory to test DCL\$PATH\n" }
- }
- $ENV{'DCL$PATH'} = '';
- }
- else {
- for (8..11) { print "ok $_ # Skipped: This is not VMS\n"; }
- }
-}
-
-# Let's see that we can taint and untaint as needed.
-{
- my $foo = $TAINT;
- test 12, tainted $foo;
-
- # That was a sanity check. If it failed, stop the insanity!
- die "Taint checks don't seem to be enabled" unless tainted $foo;
-
- $foo = "foo";
- test 13, not tainted $foo;
-
- taint_these($foo);
- test 14, tainted $foo;
-
- my @list = 1..10;
- test 15, not any_tainted @list;
- taint_these @list[1,3,5,7,9];
- test 16, any_tainted @list;
- test 17, all_tainted @list[1,3,5,7,9];
- test 18, not any_tainted @list[0,2,4,6,8];
-
- ($foo) = $foo =~ /(.+)/;
- test 19, not tainted $foo;
-
- $foo = $1 if ('bar' . $TAINT) =~ /(.+)/;
- test 20, not tainted $foo;
- test 21, $foo eq 'bar';
-
- {
- use re 'taint';
-
- ($foo) = ('bar' . $TAINT) =~ /(.+)/;
- test 22, tainted $foo;
- test 23, $foo eq 'bar';
-
- $foo = $1 if ('bar' . $TAINT) =~ /(.+)/;
- test 24, tainted $foo;
- test 25, $foo eq 'bar';
- }
-
- $foo = $1 if 'bar' =~ /(.+)$TAINT/;
- test 26, tainted $foo;
- test 27, $foo eq 'bar';
-
- my $pi = 4 * atan2(1,1) + $TAINT0;
- test 28, tainted $pi;
-
- ($pi) = $pi =~ /(\d+\.\d+)/;
- test 29, not tainted $pi;
- test 30, sprintf("%.5f", $pi) eq '3.14159';
-}
-
-# How about command-line arguments? The problem is that we don't
-# always get some, so we'll run another process with some.
-{
- my $arg = "./arg$$";
- open PROG, "> $arg" or die "Can't create $arg: $!";
- print PROG q{
- eval { join('', @ARGV), kill 0 };
- exit 0 if $@ =~ /^Insecure dependency/;
- print "# Oops: \$@ was [$@]\n";
- exit 1;
- };
- close PROG;
- print `$Invoke_Perl "-T" $arg and some suspect arguments`;
- test 31, !$?, "Exited with status $?";
- unlink $arg;
-}
-
-# Reading from a file should be tainted
-{
- my $file = './TEST';
- test 32, open(FILE, $file), "Couldn't open '$file': $!";
-
- my $block;
- sysread(FILE, $block, 100);
- my $line = <FILE>;
- close FILE;
- test 33, tainted $block;
- test 34, tainted $line;
-}
-
-# Globs should be forbidden, except under VMS,
-# which doesn't spawn an external program.
-if (1 # built-in glob
- or $Is_VMS) {
- for (35..36) { print "ok $_\n"; }
-}
-else {
- my @globs = eval { <*> };
- test 35, @globs == 0 && $@ =~ /^Insecure dependency/;
-
- @globs = eval { glob '*' };
- test 36, @globs == 0 && $@ =~ /^Insecure dependency/;
-}
-
-# Output of commands should be tainted
-{
- my $foo = `$echo abc`;
- test 37, tainted $foo;
-}
-
-# Certain system variables should be tainted
-{
- test 38, all_tainted $^X, $0;
-}
-
-# Results of matching should all be untainted
-{
- my $foo = "abcdefghi" . $TAINT;
- test 39, tainted $foo;
-
- $foo =~ /def/;
- test 40, not any_tainted $`, $&, $';
-
- $foo =~ /(...)(...)(...)/;
- test 41, not any_tainted $1, $2, $3, $+;
-
- my @bar = $foo =~ /(...)(...)(...)/;
- test 42, not any_tainted @bar;
-
- test 43, tainted $foo; # $foo should still be tainted!
- test 44, $foo eq "abcdefghi";
-}
-
-# Operations which affect files can't use tainted data.
-{
- test 45, eval { chmod 0, $TAINT } eq '', 'chmod';
- test 46, $@ =~ /^Insecure dependency/, $@;
-
- # There is no feature test in $Config{} for truncate,
- # so we allow for the possibility that it's missing.
- test 47, eval { truncate 'NoSuChFiLe', $TAINT0 } eq '', 'truncate';
- test 48, $@ =~ /^(?:Insecure dependency|truncate not implemented)/, $@;
-
- test 49, eval { rename '', $TAINT } eq '', 'rename';
- test 50, $@ =~ /^Insecure dependency/, $@;
-
- test 51, eval { unlink $TAINT } eq '', 'unlink';
- test 52, $@ =~ /^Insecure dependency/, $@;
-
- test 53, eval { utime $TAINT } eq '', 'utime';
- test 54, $@ =~ /^Insecure dependency/, $@;
-
- if ($Config{d_chown}) {
- test 55, eval { chown -1, -1, $TAINT } eq '', 'chown';
- test 56, $@ =~ /^Insecure dependency/, $@;
- }
- else {
- for (55..56) { print "ok $_ # Skipped: chown() is not available\n" }
- }
-
- if ($Config{d_link}) {
- test 57, eval { link $TAINT, '' } eq '', 'link';
- test 58, $@ =~ /^Insecure dependency/, $@;
- }
- else {
- for (57..58) { print "ok $_ # Skipped: link() is not available\n" }
- }
-
- if ($Config{d_symlink}) {
- test 59, eval { symlink $TAINT, '' } eq '', 'symlink';
- test 60, $@ =~ /^Insecure dependency/, $@;
- }
- else {
- for (59..60) { print "ok $_ # Skipped: symlink() is not available\n" }
- }
-}
-
-# Operations which affect directories can't use tainted data.
-{
- test 61, eval { mkdir $TAINT0, $TAINT } eq '', 'mkdir';
- test 62, $@ =~ /^Insecure dependency/, $@;
-
- test 63, eval { rmdir $TAINT } eq '', 'rmdir';
- test 64, $@ =~ /^Insecure dependency/, $@;
-
- test 65, eval { chdir $TAINT } eq '', 'chdir';
- test 66, $@ =~ /^Insecure dependency/, $@;
-
- if ($Config{d_chroot}) {
- test 67, eval { chroot $TAINT } eq '', 'chroot';
- test 68, $@ =~ /^Insecure dependency/, $@;
- }
- else {
- for (67..68) { print "ok $_ # Skipped: chroot() is not available\n" }
- }
-}
-
-# Some operations using files can't use tainted data.
-{
- my $foo = "imaginary library" . $TAINT;
- test 69, eval { require $foo } eq '', 'require';
- test 70, $@ =~ /^Insecure dependency/, $@;
-
- my $filename = "./taintB$$"; # NB: $filename isn't tainted!
- END { unlink $filename if defined $filename }
- $foo = $filename . $TAINT;
- unlink $filename; # in any case
-
- test 71, eval { open FOO, $foo } eq '', 'open for read';
- test 72, $@ eq '', $@; # NB: This should be allowed
-
- # Try first new style but allow also old style.
- test 73, $!{ENOENT} ||
- $! == 2 || # File not found
- ($Is_Dos && $! == 22) ||
- ($^O eq 'mint' && $! == 33);
-
- test 74, eval { open FOO, "> $foo" } eq '', 'open for write';
- test 75, $@ =~ /^Insecure dependency/, $@;
-}
-
-# Commands to the system can't use tainted data
-{
- my $foo = $TAINT;
-
- if ($^O eq 'amigaos') {
- for (76..79) { print "ok $_ # Skipped: open('|') is not available\n" }
- }
- else {
- test 76, eval { open FOO, "| x$foo" } eq '', 'popen to';
- test 77, $@ =~ /^Insecure dependency/, $@;
-
- test 78, eval { open FOO, "x$foo |" } eq '', 'popen from';
- test 79, $@ =~ /^Insecure dependency/, $@;
- }
-
- test 80, eval { exec $TAINT } eq '', 'exec';
- test 81, $@ =~ /^Insecure dependency/, $@;
-
- test 82, eval { system $TAINT } eq '', 'system';
- test 83, $@ =~ /^Insecure dependency/, $@;
-
- $foo = "*";
- taint_these $foo;
-
- test 84, eval { `$echo 1$foo` } eq '', 'backticks';
- test 85, $@ =~ /^Insecure dependency/, $@;
-
- if ($Is_VMS) { # wildcard expansion doesn't invoke shell, so is safe
- test 86, join('', eval { glob $foo } ) ne '', 'globbing';
- test 87, $@ eq '', $@;
- }
- else {
- for (86..87) { print "ok $_ # Skipped: this is not VMS\n"; }
- }
-}
-
-# Operations which affect processes can't use tainted data.
-{
- test 88, eval { kill 0, $TAINT } eq '', 'kill';
- test 89, $@ =~ /^Insecure dependency/, $@;
-
- if ($Config{d_setpgrp}) {
- test 90, eval { setpgrp 0, $TAINT } eq '', 'setpgrp';
- test 91, $@ =~ /^Insecure dependency/, $@;
- }
- else {
- for (90..91) { print "ok $_ # Skipped: setpgrp() is not available\n" }
- }
-
- if ($Config{d_setprior}) {
- test 92, eval { setpriority 0, $TAINT, $TAINT } eq '', 'setpriority';
- test 93, $@ =~ /^Insecure dependency/, $@;
- }
- else {
- for (92..93) { print "ok $_ # Skipped: setpriority() is not available\n" }
- }
-}
-
-# Some miscellaneous operations can't use tainted data.
-{
- if ($Config{d_syscall}) {
- test 94, eval { syscall $TAINT } eq '', 'syscall';
- test 95, $@ =~ /^Insecure dependency/, $@;
- }
- else {
- for (94..95) { print "ok $_ # Skipped: syscall() is not available\n" }
- }
-
- {
- my $foo = "x" x 979;
- taint_these $foo;
- local *FOO;
- my $temp = "./taintC$$";
- END { unlink $temp }
- test 96, open(FOO, "> $temp"), "Couldn't open $temp for write: $!";
-
- test 97, eval { ioctl FOO, $TAINT, $foo } eq '', 'ioctl';
- test 98, $@ =~ /^Insecure dependency/, $@;
-
- if ($Config{d_fcntl}) {
- test 99, eval { fcntl FOO, $TAINT, $foo } eq '', 'fcntl';
- test 100, $@ =~ /^Insecure dependency/, $@;
- }
- else {
- for (99..100) { print "ok $_ # Skipped: fcntl() is not available\n" }
- }
-
- close FOO;
- }
-}
-
-# Some tests involving references
-{
- my $foo = 'abc' . $TAINT;
- my $fooref = \$foo;
- test 101, not tainted $fooref;
- test 102, tainted $$fooref;
- test 103, tainted $foo;
-}
-
-# Some tests involving assignment
-{
- my $foo = $TAINT0;
- my $bar = $foo;
- test 104, all_tainted $foo, $bar;
- test 105, tainted($foo = $bar);
- test 106, tainted($bar = $bar);
- test 107, tainted($bar += $bar);
- test 108, tainted($bar -= $bar);
- test 109, tainted($bar *= $bar);
- test 110, tainted($bar++);
- test 111, tainted($bar /= $bar);
- test 112, tainted($bar += 0);
- test 113, tainted($bar -= 2);
- test 114, tainted($bar *= -1);
- test 115, tainted($bar /= 1);
- test 116, tainted($bar--);
- test 117, $bar == 0;
-}
-
-# Test assignment and return of lists
-{
- my @foo = ("A", "tainted" . $TAINT, "B");
- test 118, not tainted $foo[0];
- test 119, tainted $foo[1];
- test 120, not tainted $foo[2];
- my @bar = @foo;
- test 121, not tainted $bar[0];
- test 122, tainted $bar[1];
- test 123, not tainted $bar[2];
- my @baz = eval { "A", "tainted" . $TAINT, "B" };
- test 124, not tainted $baz[0];
- test 125, tainted $baz[1];
- test 126, not tainted $baz[2];
- my @plugh = eval q[ "A", "tainted" . $TAINT, "B" ];
- test 127, not tainted $plugh[0];
- test 128, tainted $plugh[1];
- test 129, not tainted $plugh[2];
- my $nautilus = sub { "A", "tainted" . $TAINT, "B" };
- test 130, not tainted ((&$nautilus)[0]);
- test 131, tainted ((&$nautilus)[1]);
- test 132, not tainted ((&$nautilus)[2]);
- my @xyzzy = &$nautilus;
- test 133, not tainted $xyzzy[0];
- test 134, tainted $xyzzy[1];
- test 135, not tainted $xyzzy[2];
- my $red_october = sub { return "A", "tainted" . $TAINT, "B" };
- test 136, not tainted ((&$red_october)[0]);
- test 137, tainted ((&$red_october)[1]);
- test 138, not tainted ((&$red_october)[2]);
- my @corge = &$red_october;
- test 139, not tainted $corge[0];
- test 140, tainted $corge[1];
- test 141, not tainted $corge[2];
-}
-
-# Test for system/library calls returning string data of dubious origin.
-{
- # No reliable %Config check for getpw*
- if (eval { setpwent(); getpwent(); 1 }) {
- setpwent();
- my @getpwent = getpwent();
- die "getpwent: $!\n" unless (@getpwent);
- test 142,( not tainted $getpwent[0]
- and tainted $getpwent[1]
- and not tainted $getpwent[2]
- and not tainted $getpwent[3]
- and not tainted $getpwent[4]
- and not tainted $getpwent[5]
- and tainted $getpwent[6] # ge?cos
- and not tainted $getpwent[7]
- and tainted $getpwent[8]); # shell
- endpwent();
- } else {
- for (142) { print "ok $_ # Skipped: getpwent() is not available\n" }
- }
-
- if ($Config{d_readdir}) { # pretty hard to imagine not
- local(*D);
- opendir(D, "op") or die "opendir: $!\n";
- my $readdir = readdir(D);
- test 143, tainted $readdir;
- closedir(OP);
- } else {
- for (143) { print "ok $_ # Skipped: readdir() is not available\n" }
- }
-
- if ($Config{d_readlink} && $Config{d_symlink}) {
- my $symlink = "sl$$";
- unlink($symlink);
- symlink("/something/naughty", $symlink) or die "symlink: $!\n";
- my $readlink = readlink($symlink);
- test 144, tainted $readlink;
- unlink($symlink);
- } else {
- for (144) { print "ok $_ # Skipped: readlink() or symlink() is not available\n"; }
- }
-}
-
-# test bitwise ops (regression bug)
-{
- my $why = "y";
- my $j = "x" | $why;
- test 145, not tainted $j;
- $why = $TAINT."y";
- $j = "x" | $why;
- test 146, tainted $j;
-}
-
-# test target of substitution (regression bug)
-{
- my $why = $TAINT."y";
- $why =~ s/y/z/;
- test 147, tainted $why;
-
- my $z = "[z]";
- $why =~ s/$z/zee/;
- test 148, tainted $why;
-
- $why =~ s/e/'-'.$$/ge;
- test 149, tainted $why;
-}
-
-# test shmread
-{
- unless ($ipcsysv) {
- print "ok 150 # skipped: no IPC::SysV\n";
- last;
- }
- if ($Config{'extensions'} =~ /\bIPC\/SysV\b/ && $Config{d_shm}) {
- no strict 'subs';
- my $sent = "foobar";
- my $rcvd;
- my $size = 2000;
- my $id = shmget(IPC_PRIVATE, $size, S_IRWXU);
-
- if (defined $id) {
- if (shmwrite($id, $sent, 0, 60)) {
- if (shmread($id, $rcvd, 0, 60)) {
- substr($rcvd, index($rcvd, "\0")) = '';
- } else {
- warn "# shmread failed: $!\n";
- }
- } else {
- warn "# shmwrite failed: $!\n";
- }
- shmctl($id, IPC_RMID, 0) or warn "# shmctl failed: $!\n";
- } else {
- warn "# shmget failed: $!\n";
- }
-
- if ($rcvd eq $sent) {
- test 150, tainted $rcvd;
- } else {
- print "ok 150 # Skipped: SysV shared memory operation failed\n";
- }
- } else {
- print "ok 150 # Skipped: SysV shared memory is not available\n";
- }
-}
-
-# test msgrcv
-{
- unless ($ipcsysv) {
- print "ok 151 # skipped: no IPC::SysV\n";
- last;
- }
- if ($Config{'extensions'} =~ /\bIPC\/SysV\b/ && $Config{d_msg}) {
- no strict 'subs';
- my $id = msgget(IPC_PRIVATE, IPC_CREAT | S_IRWXU);
-
- my $sent = "message";
- my $type_sent = 1234;
- my $rcvd;
- my $type_rcvd;
-
- if (defined $id) {
- if (msgsnd($id, pack("l! a*", $type_sent, $sent), 0)) {
- if (msgrcv($id, $rcvd, 60, 0, 0)) {
- ($type_rcvd, $rcvd) = unpack("l! a*", $rcvd);
- } else {
- warn "# msgrcv failed\n";
- }
- } else {
- warn "# msgsnd failed\n";
- }
- msgctl($id, IPC_RMID, 0) or warn "# msgctl failed: $!\n";
- } else {
- warn "# msgget failed\n";
- }
-
- if ($rcvd eq $sent && $type_sent == $type_rcvd) {
- test 151, tainted $rcvd;
- } else {
- print "ok 151 # Skipped: SysV message queue operation failed\n";
- }
- } else {
- print "ok 151 # Skipped: SysV message queues are not available\n";
- }
-}
-
-{
- # bug id 20001004.006
-
- open IN, "./TEST" or warn "$0: cannot read ./TEST: $!" ;
- local $/;
- my $a = <IN>;
- my $b = <IN>;
- print "not " unless tainted($a) && tainted($b) && !defined($b);
- print "ok 152\n";
- close IN;
-}
-
-{
- # bug id 20001004.007
-
- open IN, "./TEST" or warn "$0: cannot read ./TEST: $!" ;
- my $a = <IN>;
-
- my $c = { a => 42,
- b => $a };
- print "not " unless !tainted($c->{a}) && tainted($c->{b});
- print "ok 153\n";
-
- my $d = { a => $a,
- b => 42 };
- print "not " unless tainted($d->{a}) && !tainted($d->{b});
- print "ok 154\n";
-
- my $e = { a => 42,
- b => { c => $a, d => 42 } };
- print "not " unless !tainted($e->{a}) &&
- !tainted($e->{b}) &&
- tainted($e->{b}->{c}) &&
- !tainted($e->{b}->{d});
- print "ok 155\n";
-
- close IN;
-}
-
diff --git a/contrib/perl5/t/op/tie.t b/contrib/perl5/t/op/tie.t
deleted file mode 100755
index cbf92c6..0000000
--- a/contrib/perl5/t/op/tie.t
+++ /dev/null
@@ -1,187 +0,0 @@
-#!./perl
-
-# This test harness will (eventually) test the "tie" functionality
-# without the need for a *DBM* implementation.
-
-# Currently it only tests the untie warning
-
-chdir 't' if -d 't';
-@INC = '../lib';
-$ENV{PERL5LIB} = "../lib";
-
-$|=1;
-
-# catch warnings into fatal errors
-$SIG{__WARN__} = sub { die "WARNING: @_" } ;
-
-undef $/;
-@prgs = split "\n########\n", <DATA>;
-print "1..", scalar @prgs, "\n";
-
-for (@prgs){
- my($prog,$expected) = split(/\nEXPECT\n/, $_);
- eval "$prog" ;
- $status = $?;
- $results = $@ ;
- $results =~ s/\n+$//;
- $expected =~ s/\n+$//;
- if ( $status or $results and $results !~ /^WARNING: $expected/){
- print STDERR "STATUS: $status\n";
- print STDERR "PROG: $prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
- }
- print "ok ", ++$i, "\n";
-}
-
-__END__
-
-# standard behaviour, without any extra references
-use Tie::Hash ;
-tie %h, Tie::StdHash;
-untie %h;
-EXPECT
-########
-
-# standard behaviour, without any extra references
-use Tie::Hash ;
-{package Tie::HashUntie;
- use base 'Tie::StdHash';
- sub UNTIE
- {
- warn "Untied\n";
- }
-}
-tie %h, Tie::HashUntie;
-untie %h;
-EXPECT
-Untied
-########
-
-# standard behaviour, with 1 extra reference
-use Tie::Hash ;
-$a = tie %h, Tie::StdHash;
-untie %h;
-EXPECT
-########
-
-# standard behaviour, with 1 extra reference via tied
-use Tie::Hash ;
-tie %h, Tie::StdHash;
-$a = tied %h;
-untie %h;
-EXPECT
-########
-
-# standard behaviour, with 1 extra reference which is destroyed
-use Tie::Hash ;
-$a = tie %h, Tie::StdHash;
-$a = 0 ;
-untie %h;
-EXPECT
-########
-
-# standard behaviour, with 1 extra reference via tied which is destroyed
-use Tie::Hash ;
-tie %h, Tie::StdHash;
-$a = tied %h;
-$a = 0 ;
-untie %h;
-EXPECT
-########
-
-# strict behaviour, without any extra references
-use warnings 'untie';
-use Tie::Hash ;
-tie %h, Tie::StdHash;
-untie %h;
-EXPECT
-########
-
-# strict behaviour, with 1 extra references generating an error
-use warnings 'untie';
-use Tie::Hash ;
-$a = tie %h, Tie::StdHash;
-untie %h;
-EXPECT
-untie attempted while 1 inner references still exist
-########
-
-# strict behaviour, with 1 extra references via tied generating an error
-use warnings 'untie';
-use Tie::Hash ;
-tie %h, Tie::StdHash;
-$a = tied %h;
-untie %h;
-EXPECT
-untie attempted while 1 inner references still exist
-########
-
-# strict behaviour, with 1 extra references which are destroyed
-use warnings 'untie';
-use Tie::Hash ;
-$a = tie %h, Tie::StdHash;
-$a = 0 ;
-untie %h;
-EXPECT
-########
-
-# strict behaviour, with extra 1 references via tied which are destroyed
-use warnings 'untie';
-use Tie::Hash ;
-tie %h, Tie::StdHash;
-$a = tied %h;
-$a = 0 ;
-untie %h;
-EXPECT
-########
-
-# strict error behaviour, with 2 extra references
-use warnings 'untie';
-use Tie::Hash ;
-$a = tie %h, Tie::StdHash;
-$b = tied %h ;
-untie %h;
-EXPECT
-untie attempted while 2 inner references still exist
-########
-
-# strict behaviour, check scope of strictness.
-no warnings 'untie';
-use Tie::Hash ;
-$A = tie %H, Tie::StdHash;
-$C = $B = tied %H ;
-{
- use warnings 'untie';
- use Tie::Hash ;
- tie %h, Tie::StdHash;
- untie %h;
-}
-untie %H;
-EXPECT
-########
-
-# verify no leak when underlying object is selfsame tied variable
-my ($a, $b);
-sub Self::TIEHASH { bless $_[1], $_[0] }
-sub Self::DESTROY { $b = $_[0] + 0; }
-{
- my %b5;
- $a = \%b5 + 0;
- tie %b5, 'Self', \%b5;
-}
-die unless $a == $b;
-EXPECT
-########
-# Interaction of tie and vec
-
-my ($a, $b);
-use Tie::Scalar;
-tie $a,Tie::StdScalar or die;
-vec($b,1,1)=1;
-$a = $b;
-vec($a,1,1)=0;
-vec($b,1,1)=0;
-die unless $a eq $b;
-EXPECT
diff --git a/contrib/perl5/t/op/tiearray.t b/contrib/perl5/t/op/tiearray.t
deleted file mode 100755
index 8e78b2f..0000000
--- a/contrib/perl5/t/op/tiearray.t
+++ /dev/null
@@ -1,210 +0,0 @@
-#!./perl
-
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-my %seen;
-
-package Implement;
-
-sub TIEARRAY
-{
- $seen{'TIEARRAY'}++;
- my ($class,@val) = @_;
- return bless \@val,$class;
-}
-
-sub STORESIZE
-{
- $seen{'STORESIZE'}++;
- my ($ob,$sz) = @_;
- return $#{$ob} = $sz-1;
-}
-
-sub EXTEND
-{
- $seen{'EXTEND'}++;
- my ($ob,$sz) = @_;
- return @$ob = $sz;
-}
-
-sub FETCHSIZE
-{
- $seen{'FETCHSIZE'}++;
- return scalar(@{$_[0]});
-}
-
-sub FETCH
-{
- $seen{'FETCH'}++;
- my ($ob,$id) = @_;
- return $ob->[$id];
-}
-
-sub STORE
-{
- $seen{'STORE'}++;
- my ($ob,$id,$val) = @_;
- $ob->[$id] = $val;
-}
-
-sub UNSHIFT
-{
- $seen{'UNSHIFT'}++;
- my $ob = shift;
- unshift(@$ob,@_);
-}
-
-sub PUSH
-{
- $seen{'PUSH'}++;
- my $ob = shift;;
- push(@$ob,@_);
-}
-
-sub CLEAR
-{
- $seen{'CLEAR'}++;
- @{$_[0]} = ();
-}
-
-sub DESTROY
-{
- $seen{'DESTROY'}++;
-}
-
-sub POP
-{
- $seen{'POP'}++;
- my ($ob) = @_;
- return pop(@$ob);
-}
-
-sub SHIFT
-{
- $seen{'SHIFT'}++;
- my ($ob) = @_;
- return shift(@$ob);
-}
-
-sub SPLICE
-{
- $seen{'SPLICE'}++;
- my $ob = shift;
- my $off = @_ ? shift : 0;
- my $len = @_ ? shift : @$ob-1;
- return splice(@$ob,$off,$len,@_);
-}
-
-package main;
-
-print "1..31\n";
-my $test = 1;
-
-{my @ary;
-
-{ my $ob = tie @ary,'Implement',3,2,1;
- print "not " unless $ob;
- print "ok ", $test++,"\n";
- print "not " unless tied(@ary) == $ob;
- print "ok ", $test++,"\n";
-}
-
-
-print "not " unless @ary == 3;
-print "ok ", $test++,"\n";
-
-print "not " unless $#ary == 2;
-print "ok ", $test++,"\n";
-
-print "not " unless join(':',@ary) eq '3:2:1';
-print "ok ", $test++,"\n";
-
-print "not " unless $seen{'FETCH'} >= 3;
-print "ok ", $test++,"\n";
-
-@ary = (1,2,3);
-
-print "not " unless $seen{'STORE'} >= 3;
-print "ok ", $test++,"\n";
-print "not " unless join(':',@ary) eq '1:2:3';
-print "ok ", $test++,"\n";
-
-{my @thing = @ary;
-print "not " unless join(':',@thing) eq '1:2:3';
-print "ok ", $test++,"\n";
-
-tie @thing,'Implement';
-@thing = @ary;
-print "not " unless join(':',@thing) eq '1:2:3';
-print "ok ", $test++,"\n";
-}
-
-print "not " unless pop(@ary) == 3;
-print "ok ", $test++,"\n";
-print "not " unless $seen{'POP'} == 1;
-print "ok ", $test++,"\n";
-print "not " unless join(':',@ary) eq '1:2';
-print "ok ", $test++,"\n";
-
-push(@ary,4);
-print "not " unless $seen{'PUSH'} == 1;
-print "ok ", $test++,"\n";
-print "not " unless join(':',@ary) eq '1:2:4';
-print "ok ", $test++,"\n";
-
-my @x = splice(@ary,1,1,7);
-
-
-print "not " unless $seen{'SPLICE'} == 1;
-print "ok ", $test++,"\n";
-
-print "not " unless @x == 1;
-print "ok ", $test++,"\n";
-print "not " unless $x[0] == 2;
-print "ok ", $test++,"\n";
-print "not " unless join(':',@ary) eq '1:7:4';
-print "ok ", $test++,"\n";
-
-print "not " unless shift(@ary) == 1;
-print "ok ", $test++,"\n";
-print "not " unless $seen{'SHIFT'} == 1;
-print "ok ", $test++,"\n";
-print "not " unless join(':',@ary) eq '7:4';
-print "ok ", $test++,"\n";
-
-my $n = unshift(@ary,5,6);
-print "not " unless $seen{'UNSHIFT'} == 1;
-print "ok ", $test++,"\n";
-print "not " unless $n == 4;
-print "ok ", $test++,"\n";
-print "not " unless join(':',@ary) eq '5:6:7:4';
-print "ok ", $test++,"\n";
-
-@ary = split(/:/,'1:2:3');
-print "not " unless join(':',@ary) eq '1:2:3';
-print "ok ", $test++,"\n";
-
-my $t = 0;
-foreach $n (@ary)
- {
- print "not " unless $n == ++$t;
- print "ok ", $test++,"\n";
- }
-
-@ary = qw(3 2 1);
-print "not " unless join(':',@ary) eq '3:2:1';
-print "ok ", $test++,"\n";
-
-untie @ary;
-
-}
-
-print "not " unless $seen{'DESTROY'} == 2;
-print "ok ", $test++,"\n";
-
-
-
diff --git a/contrib/perl5/t/op/tiehandle.t b/contrib/perl5/t/op/tiehandle.t
deleted file mode 100755
index b04bdb7..0000000
--- a/contrib/perl5/t/op/tiehandle.t
+++ /dev/null
@@ -1,167 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-my @expect;
-my $data = "";
-my @data = ();
-my $test = 1;
-
-sub ok { print "not " unless shift; print "ok ",$test++,"\n"; }
-
-package Implement;
-
-BEGIN { *ok = \*main::ok }
-
-sub compare {
- return unless @expect;
- return ok(0) unless(@_ == @expect);
-
- my $i;
- for($i = 0 ; $i < @_ ; $i++) {
- next if $_[$i] eq $expect[$i];
- return ok(0);
- }
-
- ok(1);
-}
-
-sub TIEHANDLE {
- compare(TIEHANDLE => @_);
- my ($class,@val) = @_;
- return bless \@val,$class;
-}
-
-sub PRINT {
- compare(PRINT => @_);
- 1;
-}
-
-sub PRINTF {
- compare(PRINTF => @_);
- 2;
-}
-
-sub READLINE {
- compare(READLINE => @_);
- wantarray ? @data : shift @data;
-}
-
-sub GETC {
- compare(GETC => @_);
- substr($data,0,1);
-}
-
-sub READ {
- compare(READ => @_);
- substr($_[1],$_[3] || 0) = substr($data,0,$_[2]);
- 3;
-}
-
-sub WRITE {
- compare(WRITE => @_);
- $data = substr($_[1],$_[3] || 0, $_[2]);
- length($data);
-}
-
-sub CLOSE {
- compare(CLOSE => @_);
-
- 5;
-}
-
-package main;
-
-use Symbol;
-
-print "1..33\n";
-
-my $fh = gensym;
-
-@expect = (TIEHANDLE => 'Implement');
-my $ob = tie *$fh,'Implement';
-ok(ref($ob) eq 'Implement');
-ok(tied(*$fh) == $ob);
-
-@expect = (PRINT => $ob,"some","text");
-$r = print $fh @expect[2,3];
-ok($r == 1);
-
-@expect = (PRINTF => $ob,"%s","text");
-$r = printf $fh @expect[2,3];
-ok($r == 2);
-
-$text = (@data = ("the line\n"))[0];
-@expect = (READLINE => $ob);
-$ln = <$fh>;
-ok($ln eq $text);
-
-@expect = ();
-@in = @data = qw(a line at a time);
-@line = <$fh>;
-@expect = @in;
-Implement::compare(@line);
-
-@expect = (GETC => $ob);
-$data = "abc";
-$ch = getc $fh;
-ok($ch eq "a");
-
-$buf = "xyz";
-@expect = (READ => $ob, $buf, 3);
-$data = "abc";
-$r = read $fh,$buf,3;
-ok($r == 3);
-ok($buf eq "abc");
-
-
-$buf = "xyzasd";
-@expect = (READ => $ob, $buf, 3,3);
-$data = "abc";
-$r = sysread $fh,$buf,3,3;
-ok($r == 3);
-ok($buf eq "xyzabc");
-
-$buf = "qwerty";
-@expect = (WRITE => $ob, $buf, 4,1);
-$data = "";
-$r = syswrite $fh,$buf,4,1;
-ok($r == 4);
-ok($data eq "wert");
-
-$buf = "qwerty";
-@expect = (WRITE => $ob, $buf, 4);
-$data = "";
-$r = syswrite $fh,$buf,4;
-ok($r == 4);
-ok($data eq "qwer");
-
-$buf = "qwerty";
-@expect = (WRITE => $ob, $buf, 6);
-$data = "";
-$r = syswrite $fh,$buf;
-ok($r == 6);
-ok($data eq "qwerty");
-
-@expect = (CLOSE => $ob);
-$r = close $fh;
-ok($r == 5);
-
-# Does aliasing work with tied FHs?
-*ALIAS = *$fh;
-@expect = (PRINT => $ob,"some","text");
-$r = print ALIAS @expect[2,3];
-ok($r == 1);
-
-{
- use warnings;
- # Special case of aliasing STDERR, which used
- # to dump core when warnings were enabled
- *STDERR = *$fh;
- @expect = (PRINT => $ob,"some","text");
- $r = print STDERR @expect[2,3];
- ok($r == 1);
-}
diff --git a/contrib/perl5/t/op/time.t b/contrib/perl5/t/op/time.t
deleted file mode 100755
index caf2c14..0000000
--- a/contrib/perl5/t/op/time.t
+++ /dev/null
@@ -1,53 +0,0 @@
-#!./perl
-
-# $RCSfile: time.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:32 $
-
-if ($does_gmtime = gmtime(time)) { print "1..6\n" }
-else { print "1..3\n" }
-
-($beguser,$begsys) = times;
-
-$beg = time;
-
-while (($now = time) == $beg) { sleep 1 }
-
-if ($now > $beg && $now - $beg < 10){print "ok 1\n";} else {print "not ok 1\n";}
-
-for ($i = 0; $i < 100000; $i++) {
- ($nowuser, $nowsys) = times;
- $i = 200000 if $nowuser > $beguser && ( $nowsys > $begsys ||
- (!$nowsys && !$begsys));
- last if time - $beg > 20;
-}
-
-if ($i >= 200000) {print "ok 2\n";} else {print "not ok 2\n";}
-
-($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($beg);
-($xsec,$foo) = localtime($now);
-$localyday = $yday;
-
-if ($sec != $xsec && $mday && $year)
- {print "ok 3\n";}
-else
- {print "not ok 3\n";}
-
-exit 0 unless $does_gmtime;
-
-($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($beg);
-($xsec,$foo) = localtime($now);
-
-if ($sec != $xsec && $mday && $year)
- {print "ok 4\n";}
-else
- {print "not ok 4\n";}
-
-if (index(" :0:1:-1:364:365:-364:-365:",':' . ($localyday - $yday) . ':') > 0)
- {print "ok 5\n";}
-else
- {print "not ok 5\n";}
-
-# This could be stricter.
-if (gmtime() =~ /^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([ \d]\d) (\d\d):(\d\d):(\d\d) (\d\d\d\d)$/)
- {print "ok 6\n";}
-else
- {print "not ok 6\n";}
diff --git a/contrib/perl5/t/op/tr.t b/contrib/perl5/t/op/tr.t
deleted file mode 100755
index c7ba0d8..0000000
--- a/contrib/perl5/t/op/tr.t
+++ /dev/null
@@ -1,311 +0,0 @@
-# tr.t
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..54\n";
-
-$_ = "abcdefghijklmnopqrstuvwxyz";
-
-tr/a-z/A-Z/;
-
-print "not " unless $_ eq "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-print "ok 1\n";
-
-tr/A-Z/a-z/;
-
-print "not " unless $_ eq "abcdefghijklmnopqrstuvwxyz";
-print "ok 2\n";
-
-tr/b-y/B-Y/;
-
-print "not " unless $_ eq "aBCDEFGHIJKLMNOPQRSTUVWXYz";
-print "ok 3\n";
-
-# In EBCDIC 'I' is \xc9 and 'J' is \0xd1, 'i' is \x89 and 'j' is \x91.
-# Yes, discontinuities. Regardless, the \xca in the below should stay
-# untouched (and not became \x8a).
-{
- no utf8;
- $_ = "I\xcaJ";
-
- tr/I-J/i-j/;
-
- print "not " unless $_ eq "i\xcaj";
- print "ok 4\n";
-}
-#
-
-# make sure that tr cancels IOK and NOK
-($x = 12) =~ tr/1/3/;
-(my $y = 12) =~ tr/1/3/;
-($f = 1.5) =~ tr/1/3/;
-(my $g = 1.5) =~ tr/1/3/;
-print "not " unless $x + $y + $f + $g == 71;
-print "ok 5\n";
-
-# make sure tr is harmless if not updating - see [ID 20000511.005]
-$_ = 'fred';
-/([a-z]{2})/;
-$1 =~ tr/A-Z//;
-s/^(\s*)f/$1F/;
-print "not " if $_ ne 'Fred';
-print "ok 6\n";
-
-# check tr handles UTF8 correctly
-($x = 256.65.258) =~ tr/a/b/;
-print "not " if $x ne 256.65.258 or length $x != 3;
-print "ok 7\n";
-$x =~ tr/A/B/;
-if (ord("\t") == 9) { # ASCII
- print "not " if $x ne 256.66.258 or length $x != 3;
-}
-else {
- print "not " if $x ne 256.65.258 or length $x != 3;
-}
-print "ok 8\n";
-# EBCDIC variants of the above tests
-($x = 256.193.258) =~ tr/a/b/;
-print "not " if $x ne 256.193.258 or length $x != 3;
-print "ok 9\n";
-$x =~ tr/A/B/;
-if (ord("\t") == 9) { # ASCII
- print "not " if $x ne 256.193.258 or length $x != 3;
-}
-else {
- print "not " if $x ne 256.194.258 or length $x != 3;
-}
-print "ok 10\n";
-
-{
-if (ord("\t") == 9) { # ASCII
- use utf8;
-}
-# 11 - changing UTF8 characters in a UTF8 string, same length.
-$l = chr(300); $r = chr(400);
-$x = 200.300.400;
-$x =~ tr/\x{12c}/\x{190}/;
-printf "not (%vd) ", $x if $x ne 200.400.400 or length $x != 3;
-print "ok 11\n";
-
-# 12 - changing UTF8 characters in UTF8 string, more bytes.
-$x = 200.300.400;
-$x =~ tr/\x{12c}/\x{be8}/;
-printf "not (%vd) ", $x if $x ne 200.3048.400 or length $x != 3;
-print "ok 12\n";
-
-# 13 - introducing UTF8 characters to non-UTF8 string.
-$x = 100.125.60;
-$x =~ tr/\x{64}/\x{190}/;
-printf "not (%vd) ", $x if $x ne 400.125.60 or length $x != 3;
-print "ok 13\n";
-
-# 14 - removing UTF8 characters from UTF8 string
-$x = 400.125.60;
-$x =~ tr/\x{190}/\x{64}/;
-printf "not (%vd) ", $x if $x ne 100.125.60 or length $x != 3;
-print "ok 14\n";
-
-# 15 - counting UTF8 chars in UTF8 string
-$x = 400.125.60.400;
-$y = $x =~ tr/\x{190}/\x{190}/;
-print "not " if $y != 2;
-print "ok 15\n";
-
-# 16 - counting non-UTF8 chars in UTF8 string
-$x = 60.400.125.60.400;
-$y = $x =~ tr/\x{3c}/\x{3c}/;
-print "not " if $y != 2;
-print "ok 16\n";
-
-# 17 - counting UTF8 chars in non-UTF8 string
-$x = 200.125.60;
-$y = $x =~ tr/\x{190}/\x{190}/;
-print "not " if $y != 0;
-print "ok 17\n";
-}
-
-# 18: test brokenness with tr/a-z-9//;
-$_ = "abcdefghijklmnopqrstuvwxyz";
-eval "tr/a-z-9/ /";
-print (($@ =~ /^Ambiguous range in transliteration operator/ || $^V lt v5.7.0)
- ? '' : 'not ', "ok 18\n");
-
-# 19-21: Make sure leading and trailing hyphens still work
-$_ = "car-rot9";
-tr/-a-m/./;
-print (($_ eq '..r.rot9') ? '' : 'not ', "ok 19\n");
-
-$_ = "car-rot9";
-tr/a-m-/./;
-print (($_ eq '..r.rot9') ? '' : 'not ', "ok 20\n");
-
-$_ = "car-rot9";
-tr/-a-m-/./;
-print (($_ eq '..r.rot9') ? '' : 'not ', "ok 21\n");
-
-$_ = "abcdefghijklmnop";
-tr/ae-hn/./;
-print (($_ eq '.bcd....ijklm.op') ? '' : 'not ', "ok 22\n");
-
-$_ = "abcdefghijklmnop";
-tr/a-cf-kn-p/./;
-print (($_ eq '...de......lm...') ? '' : 'not ', "ok 23\n");
-
-$_ = "abcdefghijklmnop";
-tr/a-ceg-ikm-o/./;
-print (($_ eq '...d.f...j.l...p') ? '' : 'not ', "ok 24\n");
-
-# 25: Test reversed range check
-# 20000705 MJD
-eval "tr/m-d/ /";
-print (($@ =~ /^Invalid \[\] range "m-d" in transliteration operator/ || $^V lt v5.7.0)
- ? '' : 'not ', "ok 25\n");
-
-# 26: test cannot update if read-only
-eval '$1 =~ tr/x/y/';
-print (($@ =~ /^Modification of a read-only value attempted/) ? '' : 'not ',
- "ok 26\n");
-
-# 27: test can count read-only
-'abcdef' =~ /(bcd)/;
-print (( eval '$1 =~ tr/abcd//' == 3) ? '' : 'not ', "ok 27\n");
-
-# 28: test lhs OK if not updating
-print ((eval '"123" =~ tr/12//' == 2) ? '' : 'not ', "ok 28\n");
-
-# 29: test lhs bad if updating
-eval '"123" =~ tr/1/1/';
-print (($@ =~ m|^Can't modify constant item in transliteration \(tr///\)|)
- ? '' : 'not ', "ok 29\n");
-
-# v300 (0x12c) is UTF-8-encoded as 196 172 (0xc4 0xac)
-# v400 (0x190) is UTF-8-encoded as 198 144 (0xc6 0x90)
-
-# Transliterate a byte to a byte, all four ways.
-
-($a = v300.196.172.300.196.172) =~ tr/\xc4/\xc5/;
-print "not " unless $a eq v300.197.172.300.197.172;
-print "ok 30\n";
-
-($a = v300.196.172.300.196.172) =~ tr/\xc4/\x{c5}/;
-print "not " unless $a eq v300.197.172.300.197.172;
-print "ok 31\n";
-
-($a = v300.196.172.300.196.172) =~ tr/\x{c4}/\xc5/;
-print "not " unless $a eq v300.197.172.300.197.172;
-print "ok 32\n";
-
-($a = v300.196.172.300.196.172) =~ tr/\x{c4}/\x{c5}/;
-print "not " unless $a eq v300.197.172.300.197.172;
-print "ok 33\n";
-
-# Transliterate a byte to a wide character.
-
-($a = v300.196.172.300.196.172) =~ tr/\xc4/\x{12d}/;
-print "not " unless $a eq v300.301.172.300.301.172;
-print "ok 34\n";
-
-# Transliterate a wide character to a byte.
-
-($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\xc3/;
-print "not " unless $a eq v195.196.172.195.196.172;
-print "ok 35\n";
-
-# Transliterate a wide character to a wide character.
-
-($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\x{12d}/;
-print "not " unless $a eq v301.196.172.301.196.172;
-print "ok 36\n";
-
-# Transliterate both ways.
-
-($a = v300.196.172.300.196.172) =~ tr/\xc4\x{12c}/\x{12d}\xc3/;
-print "not " unless $a eq v195.301.172.195.301.172;
-print "ok 37\n";
-
-# Transliterate all (four) ways.
-
-($a = v300.196.172.300.196.172.400.198.144) =~
- tr/\xac\xc4\x{12c}\x{190}/\xad\x{12d}\xc5\x{191}/;
-print "not " unless $a eq v197.301.173.197.301.173.401.198.144;
-print "ok 38\n";
-
-# Transliterate and count.
-
-print "not "
- unless (($a = v300.196.172.300.196.172) =~ tr/\xc4/\xc5/) == 2;
-print "ok 39\n";
-
-print "not "
- unless (($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\x{12d}/) == 2;
-print "ok 40\n";
-
-# Transliterate with complement.
-
-($a = v300.196.172.300.196.172) =~ tr/\xc4/\x{12d}/c;
-print "not " unless $a eq v301.196.301.301.196.301;
-print "ok 41\n";
-
-($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\xc5/c;
-print "not " unless $a eq v300.197.197.300.197.197;
-print "ok 42\n";
-
-# Transliterate with deletion.
-
-($a = v300.196.172.300.196.172) =~ tr/\xc4//d;
-print "not " unless $a eq v300.172.300.172;
-print "ok 43\n";
-
-($a = v300.196.172.300.196.172) =~ tr/\x{12c}//d;
-print "not " unless $a eq v196.172.196.172;
-print "ok 44\n";
-
-# Transliterate with squeeze.
-
-($a = v196.196.172.300.300.196.172) =~ tr/\xc4/\xc5/s;
-print "not " unless $a eq v197.172.300.300.197.172;
-print "ok 45\n";
-
-($a = v196.172.300.300.196.172.172) =~ tr/\x{12c}/\x{12d}/s;
-print "not " unless $a eq v196.172.301.196.172.172;
-print "ok 46\n";
-
-# Tricky cases by Simon Cozens.
-
-($a = v196.172.200) =~ tr/\x{12c}/a/;
-print "not " unless sprintf("%vd", $a) eq '196.172.200';
-print "ok 47\n";
-
-($a = v196.172.200) =~ tr/\x{12c}/\x{12c}/;
-print "not " unless sprintf("%vd", $a) eq '196.172.200';
-print "ok 48\n";
-
-($a = v196.172.200) =~ tr/\x{12c}//d;
-print "not " unless sprintf("%vd", $a) eq '196.172.200';
-print "ok 49\n";
-
-# UTF8 range
-
-($a = v300.196.172.302.197.172) =~ tr/\x{12c}-\x{130}/\xc0-\xc4/;
-print "not " unless $a eq v192.196.172.194.197.172;
-print "ok 50\n";
-
-($a = v300.196.172.302.197.172) =~ tr/\xc4-\xc8/\x{12c}-\x{130}/;
-print "not " unless $a eq v300.300.172.302.301.172;
-print "ok 51\n";
-
-# misc
-($a = "R0_001") =~ tr/R_//d;
-print "not " if hex($a) != 1;
-print "ok 52\n";
-
-@a = (1,2); map { y/1/./ for $_ } @a;
-print "not " if "@a" ne ". 2";
-print "ok 53\n";
-
-@a = (1,2); map { y/1/./ for $_.'' } @a;
-print "not " if "@a" ne "1 2";
-print "ok 54\n";
diff --git a/contrib/perl5/t/op/undef.t b/contrib/perl5/t/op/undef.t
deleted file mode 100755
index f6e36a5..0000000
--- a/contrib/perl5/t/op/undef.t
+++ /dev/null
@@ -1,81 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..27\n";
-
-print defined($a) ? "not ok 1\n" : "ok 1\n";
-
-$a = 1+1;
-print defined($a) ? "ok 2\n" : "not ok 2\n";
-
-undef $a;
-print defined($a) ? "not ok 3\n" : "ok 3\n";
-
-$a = "hi";
-print defined($a) ? "ok 4\n" : "not ok 4\n";
-
-$a = $b;
-print defined($a) ? "not ok 5\n" : "ok 5\n";
-
-@ary = ("1arg");
-$a = pop(@ary);
-print defined($a) ? "ok 6\n" : "not ok 6\n";
-$a = pop(@ary);
-print defined($a) ? "not ok 7\n" : "ok 7\n";
-
-@ary = ("1arg");
-$a = shift(@ary);
-print defined($a) ? "ok 8\n" : "not ok 8\n";
-$a = shift(@ary);
-print defined($a) ? "not ok 9\n" : "ok 9\n";
-
-$ary{'foo'} = 'hi';
-print defined($ary{'foo'}) ? "ok 10\n" : "not ok 10\n";
-print defined($ary{'bar'}) ? "not ok 11\n" : "ok 11\n";
-undef $ary{'foo'};
-print defined($ary{'foo'}) ? "not ok 12\n" : "ok 12\n";
-
-print defined(@ary) ? "ok 13\n" : "not ok 13\n";
-print defined(%ary) ? "ok 14\n" : "not ok 14\n";
-undef @ary;
-print defined(@ary) ? "not ok 15\n" : "ok 15\n";
-undef %ary;
-print defined(%ary) ? "not ok 16\n" : "ok 16\n";
-@ary = (1);
-print defined @ary ? "ok 17\n" : "not ok 17\n";
-%ary = (1,1);
-print defined %ary ? "ok 18\n" : "not ok 18\n";
-
-sub foo { print "ok 19\n"; }
-
-&foo || print "not ok 19\n";
-
-print defined &foo ? "ok 20\n" : "not ok 20\n";
-undef &foo;
-print defined(&foo) ? "not ok 21\n" : "ok 21\n";
-
-eval { undef $1 };
-print $@ =~ /^Modification of a read/ ? "ok 22\n" : "not ok 22\n";
-
-eval { $1 = undef };
-print $@ =~ /^Modification of a read/ ? "ok 23\n" : "not ok 23\n";
-
-{
- require Tie::Hash;
- tie my %foo, 'Tie::StdHash';
- print defined %foo ? "ok 24\n" : "not ok 24\n";
- %foo = ( a => 1 );
- print defined %foo ? "ok 25\n" : "not ok 25\n";
-}
-
-{
- require Tie::Array;
- tie my @foo, 'Tie::StdArray';
- print defined @foo ? "ok 26\n" : "not ok 26\n";
- @foo = ( a => 1 );
- print defined @foo ? "ok 27\n" : "not ok 27\n";
-}
diff --git a/contrib/perl5/t/op/universal.t b/contrib/perl5/t/op/universal.t
deleted file mode 100755
index e6db8e6..0000000
--- a/contrib/perl5/t/op/universal.t
+++ /dev/null
@@ -1,142 +0,0 @@
-#!./perl
-#
-# check UNIVERSAL
-#
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $| = 1;
-}
-
-print "1..80\n";
-
-$a = {};
-bless $a, "Bob";
-print "not " unless $a->isa("Bob");
-print "ok 1\n";
-
-package Human;
-sub eat {}
-
-package Female;
-@ISA=qw(Human);
-
-package Alice;
-@ISA=qw(Bob Female);
-sub drink {}
-sub new { bless {} }
-
-$Alice::VERSION = 2.718;
-
-{
- package Cedric;
- our @ISA;
- use base qw(Human);
-}
-
-{
- package Programmer;
- our $VERSION = 1.667;
-
- sub write_perl { 1 }
-}
-
-package main;
-
-my $i = 2;
-sub test { print "not " unless shift; print "ok $i\n"; $i++; }
-
-$a = new Alice;
-
-test $a->isa("Alice");
-
-test $a->isa("Bob");
-
-test $a->isa("Female");
-
-test $a->isa("Human");
-
-test ! $a->isa("Male");
-
-test ! $a->isa('Programmer');
-
-test $a->can("drink");
-
-test $a->can("eat");
-
-test ! $a->can("sleep");
-
-test (!Cedric->isa('Programmer'));
-
-test (Cedric->isa('Human'));
-
-push(@Cedric::ISA,'Programmer');
-
-test (Cedric->isa('Programmer'));
-
-{
- package Alice;
- base::->import('Programmer');
-}
-
-test $a->isa('Programmer');
-test $a->isa("Female");
-
-@Cedric::ISA = qw(Bob);
-
-test (!Cedric->isa('Programmer'));
-
-my $b = 'abc';
-my @refs = qw(SCALAR SCALAR LVALUE GLOB ARRAY HASH CODE);
-my @vals = ( \$b, \3.14, \substr($b,1,1), \*b, [], {}, sub {} );
-for ($p=0; $p < @refs; $p++) {
- for ($q=0; $q < @vals; $q++) {
- test UNIVERSAL::isa($vals[$p], $refs[$q]) eq ($p==$q or $p+$q==1);
- };
-};
-
-test ! UNIVERSAL::can(23, "can");
-
-test $a->can("VERSION");
-
-test $a->can("can");
-test ! $a->can("export_tags"); # a method in Exporter
-
-test (eval { $a->VERSION }) == 2.718;
-
-test ! (eval { $a->VERSION(2.719) }) &&
- $@ =~ /^Alice version 2.71(?:9|8999\d+) required--this is only version 2.718 at /;
-
-test (eval { $a->VERSION(2.718) }) && ! $@;
-
-my $subs = join ' ', sort grep { defined &{"UNIVERSAL::$_"} } keys %UNIVERSAL::;
-if ('a' lt 'A') {
- test $subs eq "can isa VERSION";
-} else {
- test $subs eq "VERSION can isa";
-}
-
-test $a->isa("UNIVERSAL");
-
-# now use UNIVERSAL.pm and see what changes
-eval "use UNIVERSAL";
-
-test $a->isa("UNIVERSAL");
-
-my $sub2 = join ' ', sort grep { defined &{"UNIVERSAL::$_"} } keys %UNIVERSAL::;
-# XXX import being here is really a bug
-if ('a' lt 'A') {
- test $sub2 eq "can import isa VERSION";
-} else {
- test $sub2 eq "VERSION can import isa";
-}
-
-eval 'sub UNIVERSAL::sleep {}';
-test $a->can("sleep");
-
-test ! UNIVERSAL::can($b, "can");
-
-test ! $a->can("export_tags"); # a method in Exporter
-
-test ! UNIVERSAL::isa("\xff\xff\xff\0", 'HASH');
diff --git a/contrib/perl5/t/op/unshift.t b/contrib/perl5/t/op/unshift.t
deleted file mode 100755
index 68d3775..0000000
--- a/contrib/perl5/t/op/unshift.t
+++ /dev/null
@@ -1,14 +0,0 @@
-#!./perl
-
-# $RCSfile: unshift.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:35 $
-
-print "1..2\n";
-
-@a = (1,2,3);
-$cnt1 = unshift(a,0);
-
-if (join(' ',@a) eq '0 1 2 3') {print "ok 1\n";} else {print "not ok 1\n";}
-$cnt2 = unshift(a,3,2,1);
-if (join(' ',@a) eq '3 2 1 0 1 2 3') {print "ok 2\n";} else {print "not ok 2\n";}
-
-
diff --git a/contrib/perl5/t/op/utf8decode.t b/contrib/perl5/t/op/utf8decode.t
deleted file mode 100755
index 4d05a6b8..0000000
--- a/contrib/perl5/t/op/utf8decode.t
+++ /dev/null
@@ -1,183 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-no utf8;
-
-print "1..78\n";
-
-my $test = 1;
-
-# This table is based on Markus Kuhn's UTF-8 Decode Stress Tester,
-# http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt,
-# version dated 2000-09-02.
-
-# We use the \x notation instead of raw binary bytes for \x00-\x1f\x7f-\xff
-# because e.g. many patch programs have issues with binary data.
-
-my @MK = split(/\n/, <<__EOMK__);
-1 Correct UTF-8
-1.1.1 y "\xce\xba\xe1\xbd\xb9\xcf\x83\xce\xbc\xce\xb5" - 11 ce:ba:e1:bd:b9:cf:83:ce:bc:ce:b5 5
-2 Boundary conditions
-2.1 First possible sequence of certain length
-2.1.1 y "\x00" 0 1 00 1
-2.1.2 y "\xc2\x80" 80 2 c2:80 1
-2.1.3 y "\xe0\xa0\x80" 800 3 e0:a0:80 1
-2.1.4 y "\xf0\x90\x80\x80" 10000 4 f0:90:80:80 1
-2.1.5 y "\xf8\x88\x80\x80\x80" 200000 5 f8:88:80:80:80 1
-2.1.6 y "\xfc\x84\x80\x80\x80\x80" 4000000 6 fc:84:80:80:80:80 1
-2.2 Last possible sequence of certain length
-2.2.1 y "\x7f" 7f 1 7f 1
-2.2.2 y "\xdf\xbf" 7ff 2 df:bf 1
-# The ffff is illegal unless UTF8_ALLOW_FFFF
-2.2.3 n "\xef\xbf\xbf" ffff 3 ef:bf:bf 1 character 0xffff
-2.2.4 y "\xf7\xbf\xbf\xbf" 1fffff 4 f7:bf:bf:bf 1
-2.2.5 y "\xfb\xbf\xbf\xbf\xbf" 3ffffff 5 fb:bf:bf:bf:bf 1
-2.2.6 y "\xfd\xbf\xbf\xbf\xbf\xbf" 7fffffff 6 fd:bf:bf:bf:bf:bf 1
-2.3 Other boundary conditions
-2.3.1 y "\xed\x9f\xbf" d7ff 3 ed:9f:bf 1
-2.3.2 y "\xee\x80\x80" e000 3 ee:80:80 1
-2.3.3 y "\xef\xbf\xbd" fffd 3 ef:bf:bd 1
-2.3.4 y "\xf4\x8f\xbf\xbf" 10ffff 4 f4:8f:bf:bf 1
-2.3.5 y "\xf4\x90\x80\x80" 110000 4 f4:90:80:80 1
-3 Malformed sequences
-3.1 Unexpected continuation bytes
-3.1.1 n "\x80" - 1 80 - unexpected continuation byte 0x80
-3.1.2 n "\xbf" - 1 bf - unexpected continuation byte 0xbf
-3.1.3 n "\x80\xbf" - 2 80:bf - unexpected continuation byte 0x80
-3.1.4 n "\x80\xbf\x80" - 3 80:bf:80 - unexpected continuation byte 0x80
-3.1.5 n "\x80\xbf\x80\xbf" - 4 80:bf:80:bf - unexpected continuation byte 0x80
-3.1.6 n "\x80\xbf\x80\xbf\x80" - 5 80:bf:80:bf:80 - unexpected continuation byte 0x80
-3.1.7 n "\x80\xbf\x80\xbf\x80\xbf" - 6 80:bf:80:bf:80:bf - unexpected continuation byte 0x80
-3.1.8 n "\x80\xbf\x80\xbf\x80\xbf\x80" - 7 80:bf:80:bf:80:bf:80 - unexpected continuation byte 0x80
-3.1.9 n "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" - 64 80:81:82:83:84:85:86:87:88:89:8a:8b:8c:8d:8e:8f:90:91:92:93:94:95:96:97:98:99:9a:9b:9c:9d:9e:9f:a0:a1:a2:a3:a4:a5:a6:a7:a8:a9:aa:ab:ac:ad:ae:af:b0:b1:b2:b3:b4:b5:b6:b7:b8:b9:ba:bb:bc:bd:be:bf - unexpected continuation byte 0x80
-3.2 Lonely start characters
-3.2.1 n "\xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf " - 64 c0:20:c1:20:c2:20:c3:20:c4:20:c5:20:c6:20:c7:20:c8:20:c9:20:ca:20:cb:20:cc:20:cd:20:ce:20:cf:20:d0:20:d1:20:d2:20:d3:20:d4:20:d5:20:d6:20:d7:20:d8:20:d9:20:da:20:db:20:dc:20:dd:20:de:20:df:20 - unexpected non-continuation byte 0x20 after start byte 0xc0
-3.2.2 n "\xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef " - 32 e0:20:e1:20:e2:20:e3:20:e4:20:e5:20:e6:20:e7:20:e8:20:e9:20:ea:20:eb:20:ec:20:ed:20:ee:20:ef:20 - unexpected non-continuation byte 0x20 after start byte 0xe0
-3.2.3 n "\xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 " - 16 f0:20:f1:20:f2:20:f3:20:f4:20:f5:20:f6:20:f7:20 - unexpected non-continuation byte 0x20 after start byte 0xf0
-3.2.4 n "\xf8 \xf9 \xfa \xfb " - 8 f8:20:f9:20:fa:20:fb:20 - unexpected non-continuation byte 0x20 after start byte 0xf8
-3.2.5 n "\xfc \xfd " - 4 fc:20:fd:20 - unexpected non-continuation byte 0x20 after start byte 0xfc
-3.3 Sequences with last continuation byte missing
-3.3.1 n "\xc0" - 1 c0 - 1 byte, need 2
-3.3.2 n "\xe0\x80" - 2 e0:80 - 2 bytes, need 3
-3.3.3 n "\xf0\x80\x80" - 3 f0:80:80 - 3 bytes, need 4
-3.3.4 n "\xf8\x80\x80\x80" - 4 f8:80:80:80 - 4 bytes, need 5
-3.3.5 n "\xfc\x80\x80\x80\x80" - 5 fc:80:80:80:80 - 5 bytes, need 6
-3.3.6 n "\xdf" - 1 df - 1 byte, need 2
-3.3.7 n "\xef\xbf" - 2 ef:bf - 2 bytes, need 3
-3.3.8 n "\xf7\xbf\xbf" - 3 f7:bf:bf - 3 bytes, need 4
-3.3.9 n "\xfb\xbf\xbf\xbf" - 4 fb:bf:bf:bf - 4 bytes, need 5
-3.3.10 n "\xfd\xbf\xbf\xbf\xbf" - 5 fd:bf:bf:bf:bf - 5 bytes, need 6
-3.4 Concatenation of incomplete sequences
-3.4.1 n "\xc0\xe0\x80\xf0\x80\x80\xf8\x80\x80\x80\xfc\x80\x80\x80\x80\xdf\xef\xbf\xf7\xbf\xbf\xfb\xbf\xbf\xbf\xfd\xbf\xbf\xbf\xbf" - 30 c0:e0:80:f0:80:80:f8:80:80:80:fc:80:80:80:80:df:ef:bf:f7:bf:bf:fb:bf:bf:bf:fd:bf:bf:bf:bf - unexpected non-continuation byte 0xe0 after start byte 0xc0
-3.5 Impossible bytes
-3.5.1 n "\xfe" - 1 fe - byte 0xfe
-3.5.2 n "\xff" - 1 ff - byte 0xff
-3.5.3 n "\xfe\xfe\xff\xff" - 4 fe:fe:ff:ff - byte 0xfe
-4 Overlong sequences
-4.1 Examples of an overlong ASCII character
-4.1.1 n "\xc0\xaf" - 2 c0:af - 2 bytes, need 1
-4.1.2 n "\xe0\x80\xaf" - 3 e0:80:af - 3 bytes, need 1
-4.1.3 n "\xf0\x80\x80\xaf" - 4 f0:80:80:af - 4 bytes, need 1
-4.1.4 n "\xf8\x80\x80\x80\xaf" - 5 f8:80:80:80:af - 5 bytes, need 1
-4.1.5 n "\xfc\x80\x80\x80\x80\xaf" - 6 fc:80:80:80:80:af - 6 bytes, need 1
-4.2 Maximum overlong sequences
-4.2.1 n "\xc1\xbf" - 2 c1:bf - 2 bytes, need 1
-4.2.2 n "\xe0\x9f\xbf" - 3 e0:9f:bf - 3 bytes, need 2
-4.2.3 n "\xf0\x8f\xbf\xbf" - 4 f0:8f:bf:bf - 4 bytes, need 3
-4.2.4 n "\xf8\x87\xbf\xbf\xbf" - 5 f8:87:bf:bf:bf - 5 bytes, need 4
-4.2.5 n "\xfc\x83\xbf\xbf\xbf\xbf" - 6 fc:83:bf:bf:bf:bf - 6 bytes, need 5
-4.3 Overlong representation of the NUL character
-4.3.1 n "\xc0\x80" - 2 c0:80 - 2 bytes, need 1
-4.3.2 n "\xe0\x80\x80" - 3 e0:80:80 - 3 bytes, need 1
-4.3.3 n "\xf0\x80\x80\x80" - 4 f0:80:80:80 - 4 bytes, need 1
-4.3.4 n "\xf8\x80\x80\x80\x80" - 5 f8:80:80:80:80 - 5 bytes, need 1
-4.3.5 n "\xfc\x80\x80\x80\x80\x80" - 6 fc:80:80:80:80:80 - 6 bytes, need 1
-5 Illegal code positions
-5.1 Single UTF-16 surrogates
-5.1.1 n "\xed\xa0\x80" - 3 ed:a0:80 - UTF-16 surrogate 0xd800
-5.1.2 n "\xed\xad\xbf" - 3 ed:ad:bf - UTF-16 surrogate 0xdb7f
-5.1.3 n "\xed\xae\x80" - 3 ed:ae:80 - UTF-16 surrogate 0xdb80
-5.1.4 n "\xed\xaf\xbf" - 3 ed:af:bf - UTF-16 surrogate 0xdbff
-5.1.5 n "\xed\xb0\x80" - 3 ed:b0:80 - UTF-16 surrogate 0xdc00
-5.1.6 n "\xed\xbe\x80" - 3 ed:be:80 - UTF-16 surrogate 0xdf80
-5.1.7 n "\xed\xbf\xbf" - 3 ed:bf:bf - UTF-16 surrogate 0xdfff
-5.2 Paired UTF-16 surrogates
-5.2.1 n "\xed\xa0\x80\xed\xb0\x80" - 6 ed:a0:80:ed:b0:80 - UTF-16 surrogate 0xd800
-5.2.2 n "\xed\xa0\x80\xed\xbf\xbf" - 6 ed:a0:80:ed:bf:bf - UTF-16 surrogate 0xd800
-5.2.3 n "\xed\xad\xbf\xed\xb0\x80" - 6 ed:ad:bf:ed:b0:80 - UTF-16 surrogate 0xdb7f
-5.2.4 n "\xed\xad\xbf\xed\xbf\xbf" - 6 ed:ad:bf:ed:bf:bf - UTF-16 surrogate 0xdb7f
-5.2.5 n "\xed\xae\x80\xed\xb0\x80" - 6 ed:ae:80:ed:b0:80 - UTF-16 surrogate 0xdb80
-5.2.6 n "\xed\xae\x80\xed\xbf\xbf" - 6 ed:ae:80:ed:bf:bf - UTF-16 surrogate 0xdb80
-5.2.7 n "\xed\xaf\xbf\xed\xb0\x80" - 6 ed:af:bf:ed:b0:80 - UTF-16 surrogate 0xdbff
-5.2.8 n "\xed\xaf\xbf\xed\xbf\xbf" - 6 ed:af:bf:ed:bf:bf - UTF-16 surrogate 0xdbff
-5.3 Other illegal code positions
-5.3.1 n "\xef\xbf\xbe" - 3 ef:bf:be - byte order mark 0xfffe
-# The ffff is illegal unless UTF8_ALLOW_FFFF
-5.3.2 n "\xef\xbf\xbf" - 3 ef:bf:bf - character 0xffff
-__EOMK__
-
-# 104..181
-{
- my $WARNCNT;
- my $id;
-
- local $SIG{__WARN__} =
- sub {
- print "# $id: @_";
- $WARNCNT++;
- $WARNMSG = "@_";
- };
-
- sub moan {
- print "$id: @_";
- }
-
- sub test_unpack_U {
- $WARNCNT = 0;
- $WARNMSG = "";
- unpack('U*', $_[0]);
- }
-
- for (@MK) {
- if (/^(?:\d+(?:\.\d+)?)\s/ || /^#/) {
- # print "# $_\n";
- } elsif (/^(\d+\.\d+\.\d+[bu]?)\s+([yn])\s+"(.+)"\s+([0-9a-f]{1,8}|-)\s+(\d+)\s+([0-9a-f]{2}(?::[0-9a-f]{2})*)(?:\s+((?:\d+|-)(?:\s+(.+))?))?$/) {
- $id = $1;
- my ($okay, $bytes, $Unicode, $byteslen, $hex, $charslen, $error) =
- ($2, $3, $4, $5, $6, $7, $8);
- my @hex = split(/:/, $hex);
- unless (@hex == $byteslen) {
- my $nhex = @hex;
- moan "amount of hex ($nhex) not equal to byteslen ($byteslen)\n";
- }
- {
- use bytes;
- my $bytesbyteslen = length($bytes);
- unless ($bytesbyteslen == $byteslen) {
- moan "bytes length() ($bytesbyteslen) not equal to $byteslen\n";
- }
- }
- if ($okay eq 'y') {
- test_unpack_U($bytes);
- if ($WARNCNT) {
- moan "unpack('U*') false negative\n";
- print "not ";
- }
- } elsif ($okay eq 'n') {
- test_unpack_U($bytes);
- if ($WARNCNT == 0 || ($error ne '' && $WARNMSG !~ /$error/)) {
- moan "unpack('U*') false positive\n";
- print "not ";
- }
- }
- print "ok $test\n";
- $test++;
- } else {
- moan "unknown format\n";
- }
- }
-}
diff --git a/contrib/perl5/t/op/vec.t b/contrib/perl5/t/op/vec.t
deleted file mode 100755
index 7fe0974..0000000
--- a/contrib/perl5/t/op/vec.t
+++ /dev/null
@@ -1,80 +0,0 @@
-#!./perl
-
-print "1..30\n";
-
-print vec($foo,0,1) == 0 ? "ok 1\n" : "not ok 1\n";
-print length($foo) == 0 ? "ok 2\n" : "not ok 2\n";
-vec($foo,0,1) = 1;
-print length($foo) == 1 ? "ok 3\n" : "not ok 3\n";
-print unpack('C',$foo) == 1 ? "ok 4\n" : "not ok 4\n";
-print vec($foo,0,1) == 1 ? "ok 5\n" : "not ok 5\n";
-
-print vec($foo,20,1) == 0 ? "ok 6\n" : "not ok 6\n";
-vec($foo,20,1) = 1;
-print vec($foo,20,1) == 1 ? "ok 7\n" : "not ok 7\n";
-print length($foo) == 3 ? "ok 8\n" : "not ok 8\n";
-print vec($foo,1,8) == 0 ? "ok 9\n" : "not ok 9\n";
-vec($foo,1,8) = 0xf1;
-print vec($foo,1,8) == 0xf1 ? "ok 10\n" : "not ok 10\n";
-print ((unpack('C',substr($foo,1,1)) & 255) == 0xf1 ? "ok 11\n" : "not ok 11\n");
-print vec($foo,2,4) == 1 ? "ok 12\n" : "not ok 12\n";
-print vec($foo,3,4) == 15 ? "ok 13\n" : "not ok 13\n";
-vec($Vec, 0, 32) = 0xbaddacab;
-print $Vec eq "\xba\xdd\xac\xab" ? "ok 14\n" : "not ok 14\n";
-print vec($Vec, 0, 32) == 3135089835 ? "ok 15\n" : "not ok 15\n";
-
-# ensure vec() handles numericalness correctly
-$foo = $bar = $baz = 0;
-vec($foo = 0,0,1) = 1;
-vec($bar = 0,1,1) = 1;
-$baz = $foo | $bar;
-print $foo eq "1" && $foo == 1 ? "ok 16\n" : "not ok 16\n";
-print $bar eq "2" && $bar == 2 ? "ok 17\n" : "not ok 17\n";
-print "$foo $bar $baz" eq "1 2 3" ? "ok 18\n" : "not ok 18\n";
-
-# error cases
-
-$x = eval { vec $foo, 0, 3 };
-print "not " if defined $x or $@ !~ /^Illegal number of bits in vec/;
-print "ok 19\n";
-$x = eval { vec $foo, 0, 0 };
-print "not " if defined $x or $@ !~ /^Illegal number of bits in vec/;
-print "ok 20\n";
-$x = eval { vec $foo, 0, -13 };
-print "not " if defined $x or $@ !~ /^Illegal number of bits in vec/;
-print "ok 21\n";
-$x = eval { vec($foo, -1, 4) = 2 };
-print "not " if defined $x or $@ !~ /^Assigning to negative offset in vec/;
-print "ok 22\n";
-print "not " if vec('abcd', 7, 8);
-print "ok 23\n";
-
-# UTF8
-# N.B. currently curiously coded to circumvent bugs elswhere in UTF8 handling
-
-$foo = "\x{100}" . "\xff\xfe";
-$x = substr $foo, 1;
-print "not " if vec($x, 0, 8) != 255;
-print "ok 24\n";
-eval { vec($foo, 1, 8) };
-print "not " if $@;
-print "ok 25\n";
-eval { vec($foo, 1, 8) = 13 };
-print "not " if $@;
-print "ok 26\n";
-print "not " if $foo ne "\xc4\x0d\xc3\xbf\xc3\xbe";
-print "ok 27\n";
-$foo = "\x{100}" . "\xff\xfe";
-$x = substr $foo, 1;
-vec($x, 2, 4) = 7;
-print "not " if $x ne "\xff\xf7";
-print "ok 28\n";
-
-# mixed magic
-
-$foo = "\x61\x62\x63\x64\x65\x66";
-print "not " if vec(substr($foo, 2, 2), 0, 16) != 25444;
-print "ok 29\n";
-vec(substr($foo, 1,3), 5, 4) = 3;
-print "not " if $foo ne "\x61\x62\x63\x34\x65\x66";
-print "ok 30\n";
diff --git a/contrib/perl5/t/op/ver.t b/contrib/perl5/t/op/ver.t
deleted file mode 100755
index edfebd2..0000000
--- a/contrib/perl5/t/op/ver.t
+++ /dev/null
@@ -1,181 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-print "1..28\n";
-
-my $test = 1;
-
-use v5.5.640;
-require v5.5.640;
-print "ok $test\n"; ++$test;
-
-# printing characters should work
-if (ord("\t") == 9) { # ASCII
- print v111;
- print v107.32;
- print "$test\n"; ++$test;
-
- # hash keys too
- $h{v111.107} = "ok";
- print "$h{ok} $test\n"; ++$test;
-}
-else { # EBCDIC
- print v150;
- print v146.64;
- print "$test\n"; ++$test;
-
- # hash keys too
- $h{v150.146} = "ok";
- print "$h{ok} $test\n"; ++$test;
-}
-
-# poetry optimization should also
-sub v77 { "ok" }
-$x = v77;
-print "$x $test\n"; ++$test;
-
-# but not when dots are involved
-if (ord("\t") == 9) { # ASCII
- $x = v77.78.79;
-}
-else {
- $x = v212.213.214;
-}
-print "not " unless $x eq "MNO";
-print "ok $test\n"; ++$test;
-
-print "not " unless v1.20.300.4000 eq "\x{1}\x{14}\x{12c}\x{fa0}";
-print "ok $test\n"; ++$test;
-
-#
-# now do the same without the "v"
-use 5.5.640;
-require 5.5.640;
-print "ok $test\n"; ++$test;
-
-# hash keys too
-if (ord("\t") == 9) { # ASCII
- $h{111.107.32} = "ok";
-}
-else {
- $h{150.146.64} = "ok";
-}
-print "$h{ok } $test\n"; ++$test;
-
-if (ord("\t") == 9) { # ASCII
- $x = 77.78.79;
-}
-else {
- $x = 212.213.214;
-}
-print "not " unless $x eq "MNO";
-print "ok $test\n"; ++$test;
-
-print "not " unless 1.20.300.4000 eq "\x{1}\x{14}\x{12c}\x{fa0}";
-print "ok $test\n"; ++$test;
-
-# test sprintf("%vd"...) etc
-if (ord("\t") == 9) { # ASCII
- print "not " unless sprintf("%vd", "Perl") eq '80.101.114.108';
-}
-else {
- print "not " unless sprintf("%vd", "Perl") eq '215.133.153.147';
-}
-print "ok $test\n"; ++$test;
-
-print "not " unless sprintf("%vd", v1.22.333.4444) eq '1.22.333.4444';
-print "ok $test\n"; ++$test;
-
-if (ord("\t") == 9) { # ASCII
- print "not " unless sprintf("%vx", "Perl") eq '50.65.72.6c';
-}
-else {
- print "not " unless sprintf("%vx", "Perl") eq 'd7.85.99.93';
-}
-print "ok $test\n"; ++$test;
-
-print "not " unless sprintf("%vX", 1.22.333.4444) eq '1.16.14D.115C';
-print "ok $test\n"; ++$test;
-
-if (ord("\t") == 9) { # ASCII
- print "not " unless sprintf("%*v#o", ":", "Perl") eq '0120:0145:0162:0154';
-}
-else {
- print "not " unless sprintf("%*v#o", ":", "Perl") eq '0327:0205:0231:0223';
-}
-print "ok $test\n"; ++$test;
-
-print "not " unless sprintf("%*vb", "##", v1.22.333.4444)
- eq '1##10110##101001101##1000101011100';
-print "ok $test\n"; ++$test;
-
-print "not " unless sprintf("%vd", join("", map { chr }
- unpack "U*", v2001.2002.2003))
- eq '2001.2002.2003';
-print "ok $test\n"; ++$test;
-
-{
- use bytes;
- if (ord("\t") == 9) { # ASCII
- print "not " unless sprintf("%vd", "Perl") eq '80.101.114.108';
- }
- else {
- print "not " unless sprintf("%vd", "Perl") eq '215.133.153.147';
- }
- print "ok $test\n"; ++$test;
-
- print "not " unless
- sprintf("%vd", 1.22.333.4444) eq '1.22.197.141.225.133.156';
- print "ok $test\n"; ++$test;
-
- if (ord("\t") == 9) { # ASCII
- print "not " unless sprintf("%vx", "Perl") eq '50.65.72.6c';
- }
- else {
- print "not " unless sprintf("%vx", "Perl") eq 'd7.85.99.93';
- }
- print "ok $test\n"; ++$test;
-
- print "not " unless sprintf("%vX", v1.22.333.4444) eq '1.16.C5.8D.E1.85.9C';
- print "ok $test\n"; ++$test;
-
- if (ord("\t") == 9) { # ASCII
- print "not " unless sprintf("%*v#o", ":", "Perl") eq '0120:0145:0162:0154';
- }
- else {
- print "not " unless sprintf("%*v#o", ":", "Perl") eq '0327:0205:0231:0223';
- }
- print "ok $test\n"; ++$test;
-
- print "not " unless sprintf("%*vb", "##", v1.22.333.4444)
- eq '1##10110##11000101##10001101##11100001##10000101##10011100';
- print "ok $test\n"; ++$test;
-}
-
-{
- # bug id 20000323.056
-
- print "not " unless "\x{41}" eq +v65;
- print "ok $test\n";
- $test++;
-
- print "not " unless "\x41" eq +v65;
- print "ok $test\n";
- $test++;
-
- print "not " unless "\x{c8}" eq +v200;
- print "ok $test\n";
- $test++;
-
- print "not " unless "\xc8" eq +v200;
- print "ok $test\n";
- $test++;
-
- print "not " unless "\x{221b}" eq v8731;
- print "ok $test\n";
- $test++;
-}
diff --git a/contrib/perl5/t/op/wantarray.t b/contrib/perl5/t/op/wantarray.t
deleted file mode 100755
index 4b6f37c..0000000
--- a/contrib/perl5/t/op/wantarray.t
+++ /dev/null
@@ -1,20 +0,0 @@
-#!./perl
-
-print "1..7\n";
-sub context {
- my ( $cona, $testnum ) = @_;
- my $conb = (defined wantarray) ? ( wantarray ? 'A' : 'S' ) : 'V';
- unless ( $cona eq $conb ) {
- print "# Context $conb should be $cona\nnot ";
- }
- print "ok $testnum\n";
-}
-
-context('V',1);
-$a = context('S',2);
-@a = context('A',3);
-scalar context('S',4);
-$a = scalar context('S',5);
-($a) = context('A',6);
-($a) = scalar context('S',7);
-1;
diff --git a/contrib/perl5/t/op/write.t b/contrib/perl5/t/op/write.t
deleted file mode 100755
index 5b01eb7..0000000
--- a/contrib/perl5/t/op/write.t
+++ /dev/null
@@ -1,220 +0,0 @@
-#!./perl
-
-print "1..9\n";
-
-my $CAT = ($^O eq 'MSWin32') ? 'type' : 'cat';
-
-format OUT =
-the quick brown @<<
-$fox
-jumped
-@*
-$multiline
-^<<<<<<<<<
-$foo
-^<<<<<<<<<
-$foo
-^<<<<<<...
-$foo
-now @<<the@>>>> for all@|||||men to come @<<<<
-{
- 'i' . 's', "time\n", $good, 'to'
-}
-.
-
-open(OUT, '>Op_write.tmp') || die "Can't create Op_write.tmp";
-
-$fox = 'foxiness';
-$good = 'good';
-$multiline = "forescore\nand\nseven years\n";
-$foo = 'when in the course of human events it becomes necessary';
-write(OUT);
-close OUT;
-
-$right =
-"the quick brown fox
-jumped
-forescore
-and
-seven years
-when in
-the course
-of huma...
-now is the time for all good men to come to\n";
-
-if (`$CAT Op_write.tmp` eq $right)
- { print "ok 1\n"; unlink 'Op_write.tmp'; }
-else
- { print "not ok 1\n"; }
-
-$fox = 'wolfishness';
-my $fox = 'foxiness'; # Test a lexical variable.
-
-format OUT2 =
-the quick brown @<<
-$fox
-jumped
-@*
-$multiline
-^<<<<<<<<< ~~
-$foo
-now @<<the@>>>> for all@|||||men to come @<<<<
-'i' . 's', "time\n", $good, 'to'
-.
-
-open OUT2, '>Op_write.tmp' or die "Can't create Op_write.tmp";
-
-$good = 'good';
-$multiline = "forescore\nand\nseven years\n";
-$foo = 'when in the course of human events it becomes necessary';
-write(OUT2);
-close OUT2;
-
-$right =
-"the quick brown fox
-jumped
-forescore
-and
-seven years
-when in
-the course
-of human
-events it
-becomes
-necessary
-now is the time for all good men to come to\n";
-
-if (`$CAT Op_write.tmp` eq $right)
- { print "ok 2\n"; unlink 'Op_write.tmp'; }
-else
- { print "not ok 2\n"; }
-
-eval <<'EOFORMAT';
-format OUT2 =
-the brown quick @<<
-$fox
-jumped
-@*
-$multiline
-and
-^<<<<<<<<< ~~
-$foo
-now @<<the@>>>> for all@|||||men to come @<<<<
-'i' . 's', "time\n", $good, 'to'
-.
-EOFORMAT
-
-open(OUT2, '>Op_write.tmp') || die "Can't create Op_write.tmp";
-
-$fox = 'foxiness';
-$good = 'good';
-$multiline = "forescore\nand\nseven years\n";
-$foo = 'when in the course of human events it becomes necessary';
-write(OUT2);
-close OUT2;
-
-$right =
-"the brown quick fox
-jumped
-forescore
-and
-seven years
-and
-when in
-the course
-of human
-events it
-becomes
-necessary
-now is the time for all good men to come to\n";
-
-if (`$CAT Op_write.tmp` eq $right)
- { print "ok 3\n"; unlink 'Op_write.tmp'; }
-else
- { print "not ok 3\n"; }
-
-# formline tests
-
-$mustbe = <<EOT;
-@ a
-@> ab
-@>> abc
-@>>> abc
-@>>>> abc
-@>>>>> abc
-@>>>>>> abc
-@>>>>>>> abc
-@>>>>>>>> abc
-@>>>>>>>>> abc
-@>>>>>>>>>> abc
-EOT
-
-$was1 = $was2 = '';
-for (0..10) {
- # lexical picture
- $^A = '';
- my $format1 = '@' . '>' x $_;
- formline $format1, 'abc';
- $was1 .= "$format1 $^A\n";
- # global
- $^A = '';
- local $format2 = '@' . '>' x $_;
- formline $format2, 'abc';
- $was2 .= "$format2 $^A\n";
-}
-print $was1 eq $mustbe ? "ok 4\n" : "not ok 4\n";
-print $was2 eq $mustbe ? "ok 5\n" : "not ok 5\n";
-
-$^A = '';
-
-# more test
-
-format OUT3 =
-^<<<<<<...
-$foo
-.
-
-open(OUT3, '>Op_write.tmp') || die "Can't create Op_write.tmp";
-
-$foo = 'fit ';
-write(OUT3);
-close OUT3;
-
-$right =
-"fit\n";
-
-if (`$CAT Op_write.tmp` eq $right)
- { print "ok 6\n"; unlink 'Op_write.tmp'; }
-else
- { print "not ok 6\n"; }
-
-# test lexicals and globals
-{
- my $this = "ok";
- our $that = 7;
- format LEX =
-@<<@|
-$this,$that
-.
- open(LEX, ">&STDOUT") or die;
- write LEX;
- $that = 8;
- write LEX;
- close LEX;
-}
-# LEX_INTERPNORMAL test
-my %e = ( a => 1 );
-format OUT4 =
-@<<<<<<
-"$e{a}"
-.
-open OUT4, ">Op_write.tmp" or die "Can't create Op_write.tmp";
-write (OUT4);
-close OUT4;
-if (`$CAT Op_write.tmp` eq "1\n") {
- print "ok 9\n";
- unlink "Op_write.tmp";
- }
-else {
- print "not ok 9\n";
- }
diff --git a/contrib/perl5/t/pod/emptycmd.t b/contrib/perl5/t/pod/emptycmd.t
deleted file mode 100755
index 815eba2..0000000
--- a/contrib/perl5/t/pod/emptycmd.t
+++ /dev/null
@@ -1,21 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-__END__
-
-=pod
-
-= this is a test
-of the emergency
-broadcast system
-
-=cut
diff --git a/contrib/perl5/t/pod/emptycmd.xr b/contrib/perl5/t/pod/emptycmd.xr
deleted file mode 100644
index f06d2db..0000000
--- a/contrib/perl5/t/pod/emptycmd.xr
+++ /dev/null
@@ -1,2 +0,0 @@
- = this is a test of the emergency broadcast system
-
diff --git a/contrib/perl5/t/pod/find.t b/contrib/perl5/t/pod/find.t
deleted file mode 100755
index db39508..0000000
--- a/contrib/perl5/t/pod/find.t
+++ /dev/null
@@ -1,119 +0,0 @@
-# Testing of Pod::Find
-# Author: Marek Rouchal <marek@saftsack.fs.uni-bayreuth.de>
-
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
-}
-
-$| = 1;
-
-use Test;
-
-BEGIN { plan tests => 4 }
-
-use Pod::Find qw(pod_find pod_where);
-use File::Spec;
-
-# load successful
-ok(1);
-
-require Cwd;
-my $THISDIR = Cwd::cwd();
-my $VERBOSE = 0;
-my $lib_dir = File::Spec->catdir($THISDIR,'..','lib','Pod');
-if ($^O eq 'VMS') {
- $lib_dir = VMS::Filespec::unixify(File::Spec->catdir($THISDIR,'-','lib','pod'));
- $Qlib_dir = $lib_dir;
- $Qlib_dir =~ s#\/#::#g;
-}
-print "### searching $lib_dir\n";
-my %pods = pod_find("$lib_dir");
-my $result = join(",", sort values %pods);
-print "### found $result\n";
-my $compare = join(',', qw(
- Checker
- Find
- Html
- InputObjects
- LaTeX
- Man
- ParseUtils
- Parser
- Plainer
- Select
- Text
- Text::Color
- Text::Overstrike
- Text::Termcap
- Usage
-));
-if ($^O eq 'VMS') {
- $compare = lc($compare);
- $result = join(',', sort grep(/pod::/, values %pods));
- my $undollared = $Qlib_dir;
- $undollared =~ s/\$/\\\$/g;
- $undollared =~ s/\-/\\\-/g;
- $result =~ s/$undollared/pod::/g;
- my $count = 0;
- my @result = split(/,/,$result);
- my @compare = split(/,/,$compare);
- foreach(@compare) {
- $count += grep {/$_/} @result;
- }
- ok($count/($#result+1)-1,$#compare);
-}
-else {
- ok($result,$compare);
-}
-
-# File::Find is located in this place since eons
-# and on all platforms, hopefully
-
-print "### searching for File::Find\n";
-$result = pod_where({ -inc => 1, -verbose => $VERBOSE }, 'File::Find')
- || 'undef - pod not found!';
-print "### found $result\n";
-
-if ($^O eq 'VMS') { # privlib is perl_root:[lib] OK but not under mms
- $compare = "lib.File]Find.pm";
- $result =~ s/perl_root:\[\-?\.?//i;
- $result =~ s/\[\-?\.?//i; # needed under `mms test`
- ok($result,$compare);
-}
-else {
- $compare = File::Spec->catfile("..","lib","File","Find.pm");
- ok(_canon($result),_canon($compare));
-}
-
-# Search for a documentation pod rather than a module
-print "### searching for perlfunc.pod\n";
-$result = pod_where({ -dirs => ['../pod'], -verbose => $VERBOSE }, 'perlfunc')
- || 'undef - perlfunc.pod not found!';
-print "### found $result\n";
-
-if ($^O eq 'VMS') { # privlib is perl_root:[lib] unfortunately
- $compare = "/lib/pod/perlfunc.pod";
- $result = VMS::Filespec::unixify($result);
- $result =~ s/perl_root\///i;
- $result =~ s/^\.\.//; # needed under `mms test`
- ok($result,$compare);
-}
-else {
- $compare = File::Spec->catfile("..","pod","perlfunc.pod");
- ok(_canon($result),_canon($compare));
-}
-
-# make the path as generic as possible
-sub _canon
-{
- my ($path) = @_;
- $path = File::Spec->canonpath($path);
- my @comp = File::Spec->splitpath($path);
- my @dir = File::Spec->splitdir($comp[1]);
- $comp[1] = File::Spec->catdir(@dir);
- $path = File::Spec->catpath(@dir);
- $path = uc($path) if File::Spec->case_tolerant;
- $path;
-}
-
diff --git a/contrib/perl5/t/pod/for.t b/contrib/perl5/t/pod/for.t
deleted file mode 100755
index 4af528a..0000000
--- a/contrib/perl5/t/pod/for.t
+++ /dev/null
@@ -1,59 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-This is a test
-
-=for theloveofpete
-You shouldn't see this
-or this
-or this
-
-=for text
-pod2text should see this
-and this
-and this
-
-and everything should see this!
-
-=begin text
-
-Similarly, this line ...
-
-and this one ...
-
-as well this one,
-
-should all be in pod2text output
-
-=end text
-
-Tweedley-deedley-dee, Im as happy as can be!
-Tweedley-deedley-dum, cuz youre my honey sugar plum!
-
-=begin atthebeginning
-
-But I expect to see neither hide ...
-
-nor tail ...
-
-of this text
-
-=end atthebeginning
-
-The rest of this should show up in everything.
-
diff --git a/contrib/perl5/t/pod/for.xr b/contrib/perl5/t/pod/for.xr
deleted file mode 100644
index 5f6b8b2..0000000
--- a/contrib/perl5/t/pod/for.xr
+++ /dev/null
@@ -1,21 +0,0 @@
- This is a test
-
- pod2text should see this
- and this
- and this
-
- and everything should see this!
-
-Similarly, this line ...
-
-and this one ...
-
-as well this one,
-
-should all be in pod2text output
-
- Tweedley-deedley-dee, Im as happy as can be! Tweedley-deedley-dum, cuz
- youre my honey sugar plum!
-
- The rest of this should show up in everything.
-
diff --git a/contrib/perl5/t/pod/headings.t b/contrib/perl5/t/pod/headings.t
deleted file mode 100755
index 365aa7d..0000000
--- a/contrib/perl5/t/pod/headings.t
+++ /dev/null
@@ -1,140 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-#################################################################
- use Pod::Usage;
- pod2usage( VERBOSE => 2, EXIT => 1 );
-
-=pod
-
-=head1 NAME
-
-B<rdb2pg> - insert an rdb table into a PostgreSQL database
-
-=head1 SYNOPSIS
-
-B<rdb2pg> [I<param>=I<value> ...]
-
-=head1 PARAMETERS
-
-B<rdb2pg> uses an IRAF-compatible parameter interface.
-A template parameter file is in F</proj/axaf/simul/lib/uparm/rdb2pg.par>.
-
-=over 4
-
-=item B<input> I<file>
-
-The B<RDB> file to insert into the database. If the given name
-is the string C<stdin>, it reads from the UNIX standard input stream.
-
-
-=back
-
-=head1 DESCRIPTION
-
-B<rdb2pg> will enter the data from an B<RDB> database into a
-PostgreSQL database table, optionally creating the database and the
-table if they do not exist. It automatically determines the
-PostgreSQL data type from the column definition in the B<RDB> file,
-but may be overriden via a series of definition files or directly
-via one of its parameters.
-
-The target database and table are specified by the C<db> and C<table>
-parameters. If they do not exist, and the C<createdb> parameter is
-set, they will be created. Table field definitions are determined
-in the following order:
-
-=cut
-
-#################################################################
-
-results in:
-
-
-#################################################################
-
- rdb2pg - insert an rdb table into a PostgreSQL database
-
- rdb2pg [*param*=*value* ...]
-
- rdb2pg uses an IRAF-compatible parameter interface. A template
- parameter file is in /proj/axaf/simul/lib/uparm/rdb2pg.par.
-
- The RDB file to insert into the database. If the given name is
- the string `stdin', it reads from the UNIX standard input
- stream.
-
- rdb2pg will enter the data from an RDB database into a
- PostgreSQL database table, optionally creating the database and
- the table if they do not exist. It automatically determines the
- PostgreSQL data type from the column definition in the RDB file,
- but may be overriden via a series of definition files or
- directly via one of its parameters.
-
- The target database and table are specified by the `db' and
- `table' parameters. If they do not exist, and the `createdb'
- parameter is set, they will be created. Table field definitions
- are determined in the following order:
-
-
-#################################################################
-
-while the original version of Text (using pod2text) gives
-
-#################################################################
-
-NAME
- rdb2pg - insert an rdb table into a PostgreSQL database
-
-SYNOPSIS
- rdb2pg [*param*=*value* ...]
-
-PARAMETERS
- rdb2pg uses an IRAF-compatible parameter interface. A template
- parameter file is in /proj/axaf/simul/lib/uparm/rdb2pg.par.
-
- input *file*
- The RDB file to insert into the database. If the given name
- is the string `stdin', it reads from the UNIX standard input
- stream.
-
-DESCRIPTION
- rdb2pg will enter the data from an RDB database into a
- PostgreSQL database table, optionally creating the database and
- the table if they do not exist. It automatically determines the
- PostgreSQL data type from the column definition in the RDB file,
- but may be overriden via a series of definition files or
- directly via one of its parameters.
-
- The target database and table are specified by the `db' and
- `table' parameters. If they do not exist, and the `createdb'
- parameter is set, they will be created. Table field definitions
- are determined in the following order:
-
-
-#################################################################
-
-
-Thanks for any help. If, as your email indicates, you've not much
-time to look at this, I can work around things by calling pod2text()
-directly using the official Text.pm.
-
-Diab
-
--------------
-Diab Jerius
-djerius@cfa.harvard.edu
-
diff --git a/contrib/perl5/t/pod/headings.xr b/contrib/perl5/t/pod/headings.xr
deleted file mode 100644
index fb37a2b..0000000
--- a/contrib/perl5/t/pod/headings.xr
+++ /dev/null
@@ -1,26 +0,0 @@
-NAME
- rdb2pg - insert an rdb table into a PostgreSQL database
-
-SYNOPSIS
- rdb2pg [*param*=*value* ...]
-
-PARAMETERS
- rdb2pg uses an IRAF-compatible parameter interface. A template parameter
- file is in /proj/axaf/simul/lib/uparm/rdb2pg.par.
-
- input *file*
- The RDB file to insert into the database. If the given name is the
- string `stdin', it reads from the UNIX standard input stream.
-
-DESCRIPTION
- rdb2pg will enter the data from an RDB database into a PostgreSQL
- database table, optionally creating the database and the table if they
- do not exist. It automatically determines the PostgreSQL data type from
- the column definition in the RDB file, but may be overriden via a series
- of definition files or directly via one of its parameters.
-
- The target database and table are specified by the `db' and `table'
- parameters. If they do not exist, and the `createdb' parameter is set,
- they will be created. Table field definitions are determined in the
- following order:
-
diff --git a/contrib/perl5/t/pod/include.t b/contrib/perl5/t/pod/include.t
deleted file mode 100755
index b6f1e31..0000000
--- a/contrib/perl5/t/pod/include.t
+++ /dev/null
@@ -1,36 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-This file tries to demonstrate a simple =include directive
-for pods. It is used as follows:
-
- =include filename
-
-where "filename" is expected to be an absolute pathname, or else
-reside be relative to the directory in which the current processed
-podfile resides, or be relative to the current directory.
-
-Lets try it out with the file "included.t" shall we.
-
-***THIS TEXT IS IMMEDIATELY BEFORE THE INCLUDE***
-
-=include included.t
-
-***THIS TEXT IS IMMEDIATELY AFTER THE INCLUDE***
-
-So how did we do???
diff --git a/contrib/perl5/t/pod/include.xr b/contrib/perl5/t/pod/include.xr
deleted file mode 100644
index 624ee44..0000000
--- a/contrib/perl5/t/pod/include.xr
+++ /dev/null
@@ -1,22 +0,0 @@
- This file tries to demonstrate a simple =include directive for pods. It
- is used as follows:
-
- =include filename
-
- where "filename" is expected to be an absolute pathname, or else reside
- be relative to the directory in which the current processed podfile
- resides, or be relative to the current directory.
-
- Lets try it out with the file "included.t" shall we.
-
- ***THIS TEXT IS IMMEDIATELY BEFORE THE INCLUDE***
-
-###### begin =include included.t #####
- This is the text of the included file named "included.t". It should
- appear in the final pod document from pod2xxx
-
-###### end =include included.t #####
- ***THIS TEXT IS IMMEDIATELY AFTER THE INCLUDE***
-
- So how did we do???
-
diff --git a/contrib/perl5/t/pod/included.t b/contrib/perl5/t/pod/included.t
deleted file mode 100755
index a25b37b..0000000
--- a/contrib/perl5/t/pod/included.t
+++ /dev/null
@@ -1,35 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-##------------------------------------------------------------
-# This file is =included by "include.t"
-#
-# This text should NOT be in the resultant pod document
-# because we havent seen an =xxx pod directive in this file!
-##------------------------------------------------------------
-
-=pod
-
-This is the text of the included file named "included.t".
-It should appear in the final pod document from pod2xxx
-
-=cut
-
-##------------------------------------------------------------
-# This text should NOT be in the resultant pod document
-# because it is *after* an =cut an no other pod directives
-# proceed it!
-##------------------------------------------------------------
diff --git a/contrib/perl5/t/pod/included.xr b/contrib/perl5/t/pod/included.xr
deleted file mode 100644
index 54142fa..0000000
--- a/contrib/perl5/t/pod/included.xr
+++ /dev/null
@@ -1,3 +0,0 @@
- This is the text of the included file named "included.t". It should
- appear in the final pod document from pod2xxx
-
diff --git a/contrib/perl5/t/pod/lref.t b/contrib/perl5/t/pod/lref.t
deleted file mode 100755
index 1dd8c68..0000000
--- a/contrib/perl5/t/pod/lref.t
+++ /dev/null
@@ -1,66 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-Try out I<LOTS> of different ways of specifying references:
-
-Reference the L<manpage/section>
-
-Reference the L<manpage / section>
-
-Reference the L<manpage/ section>
-
-Reference the L<manpage /section>
-
-Reference the L<"manpage/section">
-
-Reference the L<"manpage"/section>
-
-Reference the L<manpage/"section">
-
-Reference the L<manpage/
-section>
-
-Reference the L<manpage
-/section>
-
-Now try it using the new "|" stuff ...
-
-Reference the L<thistext|manpage/section>
-
-Reference the L<thistext | manpage / section>
-
-Reference the L<thistext| manpage/ section>
-
-Reference the L<thistext |manpage /section>
-
-Reference the L<thistext|
-"manpage/section">
-
-Reference the L<thistext
-|"manpage"/section>
-
-Reference the L<thistext|manpage/"section">
-
-Reference the L<thistext|
-manpage/
-section>
-
-Reference the L<thistext
-|manpage
-/section>
-
diff --git a/contrib/perl5/t/pod/lref.xr b/contrib/perl5/t/pod/lref.xr
deleted file mode 100644
index 297053b..0000000
--- a/contrib/perl5/t/pod/lref.xr
+++ /dev/null
@@ -1,40 +0,0 @@
- Try out *LOTS* of different ways of specifying references:
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section on "manpage/section"
-
- Reference the the section entry in the "manpage" manpage
-
- Reference the the section on "section" in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Now try it using the new "|" stuff ...
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
diff --git a/contrib/perl5/t/pod/multiline_items.t b/contrib/perl5/t/pod/multiline_items.t
deleted file mode 100755
index 334832d..0000000
--- a/contrib/perl5/t/pod/multiline_items.t
+++ /dev/null
@@ -1,31 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=head1 Test multiline item lists
-
-This is a test to ensure that multiline =item paragraphs
-get indented appropriately.
-
-=over 4
-
-=item This
-is
-a
-test.
-
-=back
-
-=cut
diff --git a/contrib/perl5/t/pod/multiline_items.xr b/contrib/perl5/t/pod/multiline_items.xr
deleted file mode 100644
index dddf05f..0000000
--- a/contrib/perl5/t/pod/multiline_items.xr
+++ /dev/null
@@ -1,5 +0,0 @@
-Test multiline item lists
- This is a test to ensure that multiline =item paragraphs get indented
- appropriately.
-
- This is a test.
diff --git a/contrib/perl5/t/pod/nested_items.t b/contrib/perl5/t/pod/nested_items.t
deleted file mode 100755
index 0b86702..0000000
--- a/contrib/perl5/t/pod/nested_items.t
+++ /dev/null
@@ -1,64 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=head1 Test nested item lists
-
-This is a test to ensure the nested =item paragraphs
-get indented appropriately.
-
-=over 2
-
-=item 1
-
-First section.
-
-=over 2
-
-=item a
-
-this is item a
-
-=item b
-
-this is item b
-
-=back
-
-=item 2
-
-Second section.
-
-=over 2
-
-=item a
-
-this is item a
-
-=item b
-
-this is item b
-
-=item c
-
-=item d
-
-This is item c & d.
-
-=back
-
-=back
-
-=cut
diff --git a/contrib/perl5/t/pod/nested_items.xr b/contrib/perl5/t/pod/nested_items.xr
deleted file mode 100644
index dd1adac..0000000
--- a/contrib/perl5/t/pod/nested_items.xr
+++ /dev/null
@@ -1,19 +0,0 @@
-Test nested item lists
- This is a test to ensure the nested =item paragraphs get indented
- appropriately.
-
- 1 First section.
-
- a this is item a
-
- b this is item b
-
- 2 Second section.
-
- a this is item a
-
- b this is item b
-
- c
- d This is item c & d.
-
diff --git a/contrib/perl5/t/pod/nested_seqs.t b/contrib/perl5/t/pod/nested_seqs.t
deleted file mode 100755
index 9f30533..0000000
--- a/contrib/perl5/t/pod/nested_seqs.t
+++ /dev/null
@@ -1,23 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-The statement: C<This is dog kind's I<finest> hour!> is a parody of a
-quotation from Winston Churchill.
-
-=cut
-
diff --git a/contrib/perl5/t/pod/nested_seqs.xr b/contrib/perl5/t/pod/nested_seqs.xr
deleted file mode 100644
index f981061..0000000
--- a/contrib/perl5/t/pod/nested_seqs.xr
+++ /dev/null
@@ -1,3 +0,0 @@
- The statement: `This is dog kind's *finest* hour!' is a parody of a
- quotation from Winston Churchill.
-
diff --git a/contrib/perl5/t/pod/oneline_cmds.t b/contrib/perl5/t/pod/oneline_cmds.t
deleted file mode 100755
index bba0e4a..0000000
--- a/contrib/perl5/t/pod/oneline_cmds.t
+++ /dev/null
@@ -1,46 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-==head1 NAME
-B<rdb2pg> - insert an rdb table into a PostgreSQL database
-
-==head1 SYNOPSIS
-B<rdb2pg> [I<param>=I<value> ...]
-
-==head1 PARAMETERS
-B<rdb2pg> uses an IRAF-compatible parameter interface.
-A template parameter file is in F</proj/axaf/simul/lib/uparm/rdb2pg.par>.
-
-==over 4
-==item B<input> I<file>
-The B<RDB> file to insert into the database. If the given name
-is the string C<stdin>, it reads from the UNIX standard input stream.
-
-==back
-
-==head1 DESCRIPTION
-B<rdb2pg> will enter the data from an B<RDB> database into a
-PostgreSQL database table, optionally creating the database and the
-table if they do not exist. It automatically determines the
-PostgreSQL data type from the column definition in the B<RDB> file,
-but may be overriden via a series of definition files or directly
-via one of its parameters.
-
-The target database and table are specified by the C<db> and C<table>
-parameters. If they do not exist, and the C<createdb> parameter is
-set, they will be created. Table field definitions are determined
-in the following order:
-
diff --git a/contrib/perl5/t/pod/oneline_cmds.xr b/contrib/perl5/t/pod/oneline_cmds.xr
deleted file mode 100644
index fb37a2b..0000000
--- a/contrib/perl5/t/pod/oneline_cmds.xr
+++ /dev/null
@@ -1,26 +0,0 @@
-NAME
- rdb2pg - insert an rdb table into a PostgreSQL database
-
-SYNOPSIS
- rdb2pg [*param*=*value* ...]
-
-PARAMETERS
- rdb2pg uses an IRAF-compatible parameter interface. A template parameter
- file is in /proj/axaf/simul/lib/uparm/rdb2pg.par.
-
- input *file*
- The RDB file to insert into the database. If the given name is the
- string `stdin', it reads from the UNIX standard input stream.
-
-DESCRIPTION
- rdb2pg will enter the data from an RDB database into a PostgreSQL
- database table, optionally creating the database and the table if they
- do not exist. It automatically determines the PostgreSQL data type from
- the column definition in the RDB file, but may be overriden via a series
- of definition files or directly via one of its parameters.
-
- The target database and table are specified by the `db' and `table'
- parameters. If they do not exist, and the `createdb' parameter is set,
- they will be created. Table field definitions are determined in the
- following order:
-
diff --git a/contrib/perl5/t/pod/pod2usage.t b/contrib/perl5/t/pod/pod2usage.t
deleted file mode 100755
index 70cbacd..0000000
--- a/contrib/perl5/t/pod/pod2usage.t
+++ /dev/null
@@ -1,18 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-=include pod2usage.PL
-
-
diff --git a/contrib/perl5/t/pod/pod2usage.xr b/contrib/perl5/t/pod/pod2usage.xr
deleted file mode 100644
index 7315d40..0000000
--- a/contrib/perl5/t/pod/pod2usage.xr
+++ /dev/null
@@ -1,55 +0,0 @@
-###### begin =include pod2usage.PL #####
-NAME
- pod2usage - print usage messages from embedded pod docs in files
-
-SYNOPSIS
- pod2usage [-help] [-man] [-exit *exitval*] [-output *outfile*]
- [-verbose *level*] [-pathlist *dirlist*] *file*
-
-OPTIONS AND ARGUMENTS
- -help Print a brief help message and exit.
-
- -man Print this command's manual page and exit.
-
- -exit *exitval*
- The exit status value to return.
-
- -output *outfile*
- The output file to print to. If the special names "-" or ">&1"
- or ">&STDOUT" are used then standard output is used. If ">&2" or
- ">&STDERR" is used then standard error is used.
-
- -verbose *level*
- The desired level of verbosity to use:
-
- 1 : print SYNOPSIS only
- 2 : print SYNOPSIS sections and any OPTIONS/ARGUMENTS sections
- 3 : print the entire manpage (similar to running pod2text)
-
- -pathlist *dirlist*
- Specifies one or more directories to search for the input file
- if it was not supplied with an absolute path. Each directory
- path in the given list should be separated by a ':' on Unix (';'
- on MSWin32 and DOS).
-
- *file* The pathname of a file containing pod documentation to be output
- in usage mesage format (defaults to standard input).
-
-DESCRIPTION
- pod2usage will read the given input file looking for pod documentation
- and will print the corresponding usage message. If no input file is
- specifed than standard input is read.
-
- pod2usage invokes the pod2usage() function in the Pod::Usage module.
- Please see the pod2usage() entry in the Pod::Usage manpage.
-
-SEE ALSO
- the Pod::Usage manpage, the pod2text(1) manpage
-
-AUTHOR
- Brad Appleton <bradapp@enteract.com>
-
- Based on code for pod2text(1) written by Tom Christiansen
- <tchrist@mox.perl.com>
-
-###### end =include pod2usage.PL #####
diff --git a/contrib/perl5/t/pod/poderrs.t b/contrib/perl5/t/pod/poderrs.t
deleted file mode 100755
index 1b92ede..0000000
--- a/contrib/perl5/t/pod/poderrs.t
+++ /dev/null
@@ -1,198 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testpchk.pl";
- import TestPodChecker;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodchecker \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-### Deliberately throw in some blank but non-empty lines
-
-### The above line should contain spaces
-
-
-__END__
-
-
-=head1 NAME
-
-poderrors.t - test Pod::Checker on some pod syntax errors
-
-=unknown1 this is an unknown command with two N<unknownA>
-and D<unknownB> interior sequences.
-
-This is some paragraph text with some unknown interior sequences,
-such as Q<unknown2>,
-A<unknown3>,
-and Y<unknown4 V<unknown5>>.
-
-Now try some unterminated sequences like
-I<hello mudda!
-B<hello fadda!
-
-Here I am at C<camp granada!
-
-Camps is very,
-entertaining.
-And they say we'll have some fun if it stops raining!
-
-Okay, now use a non-empty blank line to terminate a paragraph and make
-sure we get a warning.
-
-The above blank line contains tabs and spaces only
-
-=head1 Additional tests
-
-=head2 item without over
-
-=item oops
-
-=head2 back without over
-
-=back
-
-=head2 over without back
-
-=over 4
-
-=item aaps
-
-=head2 end without begin
-
-=end
-
-=head2 begin and begin
-
-=begin html
-
-=begin text
-
-=end
-
-=end
-
-second one results in end w/o begin
-
-=head2 begin w/o formatter
-
-=begin
-
-=end
-
-=head2 for w/o formatter
-
-=for
-
-something...
-
-=head2 Nested sequences of the same type
-
-C<code I<italic C<code again!>>>
-
-=head2 Garbled entities
-
-E<alea iacta est>
-E<C<auml>>
-E<abcI<bla>>
-E<0x100>
-E<07777>
-E<300>
-
-=head2 Unresolved internal links
-
-L</"begin or begin">
-L<"end with begin">
-L</OoPs>
-
-=head2 Some links with problems
-
-L<abc
-def>
-L<>
-L< aha>
-L<oho >
-L<"Warnings"> this one is ok
-L</unescaped> ok too, this POD has an X of the same name
-
-=head2 Warnings
-
-L<passwd(5)>
-L<some text with / in it|perlvar/$|> should give warnings as hell
-
-=over 4
-
-=item bla
-
-=back 200
-
-the 200 is evil
-
-=begin html
-
-What?
-
-=end xml
-
-X<unescaped>see these unescaped < and > in the text?
-
-=head2 Misc
-
-Z<ddd> should be empty
-
-X<> should not be empty
-
-=over four
-
-This paragrapgh is misplaced - it ought to be an item.
-
-=item four should be numeric!
-
-=item
-
-=item blah
-
-=item previous is all empty!!!
-
-=back
-
-All empty over/back:
-
-=over 4
-
-=back
-
-item w/o name
-
-=cut
-
-=pod bla
-
-bla is evil
-
-=cut blub
-
-blub is evil
-
-=head2 reoccurence
-
-=over 4
-
-=item Misc
-
-we already have a head Misc
-
-=back
-
-=head2 some heading
-
-=head2 another one
-
-previous section is empty!
-
-=cut
-
-
diff --git a/contrib/perl5/t/pod/poderrs.xr b/contrib/perl5/t/pod/poderrs.xr
deleted file mode 100644
index a21efdb..0000000
--- a/contrib/perl5/t/pod/poderrs.xr
+++ /dev/null
@@ -1,46 +0,0 @@
-*** ERROR: Unknown command 'unknown1' at line 25 in file t/pod/poderrs.t
-*** ERROR: Unknown interior-sequence 'Q' at line 29 in file t/pod/poderrs.t
-*** ERROR: Unknown interior-sequence 'A' at line 30 in file t/pod/poderrs.t
-*** ERROR: Unknown interior-sequence 'Y' at line 31 in file t/pod/poderrs.t
-*** ERROR: Unknown interior-sequence 'V' at line 31 in file t/pod/poderrs.t
-*** ERROR: unterminated B<...> at line 35 in file t/pod/poderrs.t
-*** ERROR: unterminated I<...> at line 34 in file t/pod/poderrs.t
-*** ERROR: unterminated C<...> at line 37 in file t/pod/poderrs.t
-*** WARNING: line containing nothing but whitespace in paragraph at line 45 in file t/pod/poderrs.t
-*** ERROR: =item without previous =over at line 52 in file t/pod/poderrs.t
-*** ERROR: =back without previous =over at line 56 in file t/pod/poderrs.t
-*** ERROR: =over on line 60 without closing =back (at head2) at line 64 in file t/pod/poderrs.t
-*** ERROR: =end without =begin at line 66 in file t/pod/poderrs.t
-*** ERROR: Nested =begin's (first at line 70:html) at line 72 in file t/pod/poderrs.t
-*** ERROR: =end without =begin at line 76 in file t/pod/poderrs.t
-*** ERROR: No argument for =begin at line 82 in file t/pod/poderrs.t
-*** ERROR: =for without formatter specification at line 88 in file t/pod/poderrs.t
-*** ERROR: nested commands C<...C<...>...> at line 94 in file t/pod/poderrs.t
-*** ERROR: garbled entity E<alea iacta est> at line 98 in file t/pod/poderrs.t
-*** ERROR: garbled entity E<C<auml>> at line 99 in file t/pod/poderrs.t
-*** ERROR: garbled entity E<abcI<bla>> at line 100 in file t/pod/poderrs.t
-*** ERROR: Entity number out of range E<0x100> at line 101 in file t/pod/poderrs.t
-*** ERROR: Entity number out of range E<07777> at line 102 in file t/pod/poderrs.t
-*** ERROR: Entity number out of range E<300> at line 103 in file t/pod/poderrs.t
-*** ERROR: malformed link L<> : empty link at line 115 in file t/pod/poderrs.t
-*** WARNING: ignoring leading whitespace in link at line 116 in file t/pod/poderrs.t
-*** WARNING: ignoring trailing whitespace in link at line 117 in file t/pod/poderrs.t
-*** WARNING: (section) in 'passwd(5)' deprecated at line 123 in file t/pod/poderrs.t
-*** WARNING: node '$|' contains non-escaped | or / at line 124 in file t/pod/poderrs.t
-*** WARNING: alternative text '$|' contains non-escaped | or / at line 124 in file t/pod/poderrs.t
-*** ERROR: Spurious character(s) after =back at line 130 in file t/pod/poderrs.t
-*** ERROR: Nonempty Z<> at line 144 in file t/pod/poderrs.t
-*** ERROR: Empty X<> at line 146 in file t/pod/poderrs.t
-*** WARNING: preceding non-item paragraph(s) at line 152 in file t/pod/poderrs.t
-*** WARNING: No argument for =item at line 154 in file t/pod/poderrs.t
-*** WARNING: previous =item has no contents at line 156 in file t/pod/poderrs.t
-*** WARNING: No items in =over (at line 164) / =back list at line 166 in file t/pod/poderrs.t
-*** ERROR: Spurious text after =pod at line 172 in file t/pod/poderrs.t
-*** ERROR: Spurious text after =cut at line 176 in file t/pod/poderrs.t
-*** WARNING: empty section in previous paragraph at line 192 in file t/pod/poderrs.t
-*** ERROR: unresolved internal link 'begin or begin' at line 107 in file t/pod/poderrs.t
-*** ERROR: unresolved internal link 'end with begin' at line 108 in file t/pod/poderrs.t
-*** ERROR: unresolved internal link 'OoPs' at line 109 in file t/pod/poderrs.t
-*** ERROR: unresolved internal link 'abc def' at line 113 in file t/pod/poderrs.t
-*** WARNING: multiple occurence of link target 'Misc' at line - in file t/pod/poderrs.t
-t/pod/poderrs.t has 33 pod syntax errors.
diff --git a/contrib/perl5/t/pod/podselect.t b/contrib/perl5/t/pod/podselect.t
deleted file mode 100755
index 5d45cdb..0000000
--- a/contrib/perl5/t/pod/podselect.t
+++ /dev/null
@@ -1,18 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-=include podselect.PL
-
-
diff --git a/contrib/perl5/t/pod/podselect.xr b/contrib/perl5/t/pod/podselect.xr
deleted file mode 100644
index 7d1188d..0000000
--- a/contrib/perl5/t/pod/podselect.xr
+++ /dev/null
@@ -1,42 +0,0 @@
-###### begin =include podselect.PL #####
-NAME
- podselect - print selected sections of pod documentation on standard
- output
-
-SYNOPSIS
- podselect [-help] [-man] [-section *section-spec*] [*file* ...]
-
-OPTIONS AND ARGUMENTS
- -help Print a brief help message and exit.
-
- -man Print the manual page and exit.
-
- -section *section-spec*
- Specify a section to include in the output. See the section on
- "SECTION SPECIFICATIONS" in the Pod::Parser manpage for the
- format to use for *section-spec*. This option may be given
- multiple times on the command line.
-
- *file* The pathname of a file from which to select sections of pod
- documentation (defaults to standard input).
-
-DESCRIPTION
- podselect will read the given input files looking for pod documentation
- and will print out (in raw pod format) all sections that match one ore
- more of the given section specifications. If no section specifications
- are given than all pod sections encountered are output.
-
- podselect invokes the podselect() function exported by Pod::Select
- Please see the podselect() entry in the Pod::Select manpage for more
- details.
-
-SEE ALSO
- the Pod::Parser manpage and the Pod::Select manpage
-
-AUTHOR
- Brad Appleton <bradapp@enteract.com>
-
- Based on code for Pod::Text::pod2text(1) written by Tom Christiansen
- <tchrist@mox.perl.com>
-
-###### end =include podselect.PL #####
diff --git a/contrib/perl5/t/pod/special_seqs.t b/contrib/perl5/t/pod/special_seqs.t
deleted file mode 100755
index c6b2ce1..0000000
--- a/contrib/perl5/t/pod/special_seqs.t
+++ /dev/null
@@ -1,46 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- unshift @INC, '../lib';
- unshift @INC, './pod';
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-This is a test to see if I can do not only C<$self> and C<method()>, but
-also C<< $self->method() >> and C<< $self->{FIELDNAME} >> and
-C<< $Foo <=> $Bar >> without resorting to escape sequences. If
-I want to refer to the right-shift operator I can do something
-like C<<< $x >> 3 >>> or even C<<<< $y >> 5 >>>>.
-
-Now for the grand finale of C<< $self->method()->{FIELDNAME} = {FOO=>BAR} >>.
-And I also want to make sure that newlines work like this
-C<<<
-$self->{FOOBAR} >> 3 and [$b => $a]->[$a <=> $b]
->>>
-
-Of course I should still be able to do all this I<with> escape sequences
-too: C<$self-E<gt>method()> and C<$self-E<gt>{FIELDNAME}> and C<{FOO=E<gt>BAR}>.
-
-Dont forget C<$self-E<gt>method()-E<gt>{FIELDNAME} = {FOO=E<gt>BAR}>.
-
-And make sure that C<0> works too!
-
-Now, if I use << or >> as my delimiters, then I have to use whitespace.
-So things like C<<$self->method()>> and C<<$self->{FIELDNAME}>> wont end
-up doing what you might expect since the first > will still terminate
-the first < seen.
-
-Lets make sure these work for empty ones too, like C<< >> and C<< >> >>
-(just to be obnoxious)
-
-=cut
diff --git a/contrib/perl5/t/pod/special_seqs.xr b/contrib/perl5/t/pod/special_seqs.xr
deleted file mode 100644
index a8c715a..0000000
--- a/contrib/perl5/t/pod/special_seqs.xr
+++ /dev/null
@@ -1,25 +0,0 @@
- This is a test to see if I can do not only `$self' and `method()', but
- also `$self->method()' and `$self->{FIELDNAME}' and `$Foo <=> $Bar'
- without resorting to escape sequences. If I want to refer to the
- right-shift operator I can do something like `$x >> 3' or even `$y >>
- 5'.
-
- Now for the grand finale of `$self->method()->{FIELDNAME} = {FOO=>BAR}'.
- And I also want to make sure that newlines work like this
- `$self->{FOOBAR} >> 3 and [$b => $a]->[$a <=> $b]'
-
- Of course I should still be able to do all this *with* escape sequences
- too: `$self->method()' and `$self->{FIELDNAME}' and `{FOO=>BAR}'.
-
- Dont forget `$self->method()->{FIELDNAME} = {FOO=>BAR}'.
-
- And make sure that `0' works too!
-
- Now, if I use << or >> as my delimiters, then I have to use whitespace.
- So things like `<$self-'method()>> and `<$self-'{FIELDNAME}>> wont end
- up doing what you might expect since the first > will still terminate
- the first < seen.
-
- Lets make sure these work for empty ones too, like and `>>' (just to be
- obnoxious)
-
diff --git a/contrib/perl5/t/pod/testcmp.pl b/contrib/perl5/t/pod/testcmp.pl
deleted file mode 100644
index 5f62171..0000000
--- a/contrib/perl5/t/pod/testcmp.pl
+++ /dev/null
@@ -1,91 +0,0 @@
-package TestCompare;
-
-use vars qw(@ISA @EXPORT $MYPKG);
-#use strict;
-#use diagnostics;
-use Carp;
-use Exporter;
-use File::Basename;
-use File::Spec;
-use FileHandle;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(&testcmp);
-$MYPKG = eval { (caller)[0] };
-
-##--------------------------------------------------------------------------
-
-=head1 NAME
-
-testcmp -- compare two files line-by-line
-
-=head1 SYNOPSIS
-
- $is_diff = testcmp($file1, $file2);
-
-or
-
- $is_diff = testcmp({-cmplines => \&mycmp}, $file1, $file2);
-
-=head2 DESCRIPTION
-
-Compare two text files line-by-line and return 0 if they are the
-same, 1 if they differ. Each of $file1 and $file2 may be a filenames,
-or a filehandles (in which case it must already be open for reading).
-
-If the first argument is a hashref, then the B<-cmplines> key in the
-hash may have a subroutine reference as its corresponding value.
-The referenced user-defined subroutine should be a line-comparator
-function that takes two pre-chomped text-lines as its arguments
-(the first is from $file1 and the second is from $file2). It should
-return 0 if it considers the two lines equivalent, and non-zero
-otherwise.
-
-=cut
-
-##--------------------------------------------------------------------------
-
-sub testcmp( $ $ ; $) {
- my %opts = ref($_[0]) eq 'HASH' ? %{shift()} : ();
- my ($file1, $file2) = @_;
- my ($fh1, $fh2) = ($file1, $file2);
- unless (ref $fh1) {
- $fh1 = FileHandle->new($file1, "r") or die "Can't open $file1: $!";
- }
- unless (ref $fh2) {
- $fh2 = FileHandle->new($file2, "r") or die "Can't open $file2: $!";
- }
-
- my $cmplines = $opts{'-cmplines'} || undef;
- my ($f1text, $f2text) = ("", "");
- my ($line, $diffs) = (0, 0);
-
- while ( defined($f1text) and defined($f2text) ) {
- defined($f1text = <$fh1>) and chomp($f1text);
- defined($f2text = <$fh2>) and chomp($f2text);
- ++$line;
- last unless ( defined($f1text) and defined($f2text) );
- $diffs = (ref $cmplines) ? &$cmplines($f1text, $f2text)
- : ($f1text ne $f2text);
- last if $diffs;
- }
- close($fh1) unless (ref $file1);
- close($fh2) unless (ref $file2);
-
- $diffs = 1 if (defined($f1text) or defined($f2text));
- if ( defined($f1text) and defined($f2text) ) {
- ## these two lines must be different
- warn "$file1 and $file2 differ at line $line\n";
- }
- elsif (defined($f1text) and (! defined($f1text))) {
- ## file1 must be shorter
- warn "$file1 is shorter than $file2\n";
- }
- elsif (defined $f2text) {
- ## file2 must be longer
- warn "$file1 is shorter than $file2\n";
- }
- return $diffs;
-}
-
-1;
diff --git a/contrib/perl5/t/pod/testp2pt.pl b/contrib/perl5/t/pod/testp2pt.pl
deleted file mode 100644
index 8cfdbb9..0000000
--- a/contrib/perl5/t/pod/testp2pt.pl
+++ /dev/null
@@ -1,196 +0,0 @@
-package TestPodIncPlainText;
-
-BEGIN {
- use File::Basename;
- use File::Spec;
- use Cwd qw(abs_path);
- push @INC, '..';
- my $THISDIR = abs_path(dirname $0);
- unshift @INC, $THISDIR;
- require "testcmp.pl";
- import TestCompare;
- my $PARENTDIR = dirname $THISDIR;
- push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
-}
-
-#use strict;
-#use diagnostics;
-use Carp;
-use Exporter;
-#use File::Compare;
-#use Cwd qw(abs_path);
-
-use vars qw($MYPKG @EXPORT @ISA);
-$MYPKG = eval { (caller)[0] };
-@EXPORT = qw(&testpodplaintext);
-BEGIN {
- if ( $] >= 5.005_58 ) {
- require Pod::Text;
- @ISA = qw( Pod::Text );
- }
- else {
- require Pod::PlainText;
- @ISA = qw( Pod::PlainText );
- }
- require VMS::Filespec if $^O eq 'VMS';
-}
-
-## Hardcode settings for TERMCAP and COLUMNS so we can try to get
-## reproducible results between environments
-@ENV{qw(TERMCAP COLUMNS)} = ('co=76:do=^J', 76);
-
-sub catfile(@) { File::Spec->catfile(@_); }
-
-my $INSTDIR = abs_path(dirname $0);
-if ($^O eq 'VMS') { # clean up directory spec
- $INSTDIR = VMS::Filespec::unixpath($INSTDIR);
- $INSTDIR =~ s#/$##;
- $INSTDIR =~ s#/000000/#/#;
-}
-$INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 'pod');
-$INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 't');
-my @PODINCDIRS = ( catfile($INSTDIR, 'lib', 'Pod'),
- catfile($INSTDIR, 'scripts'),
- catfile($INSTDIR, 'pod'),
- catfile($INSTDIR, 't', 'pod')
- );
-print "PODINCDIRS = ",join(', ',@PODINCDIRS),"\n";
-
-## Find the path to the file to =include
-sub findinclude {
- my $self = shift;
- my $incname = shift;
-
- ## See if its already found w/out any "searching;
- return $incname if (-r $incname);
-
- ## Need to search for it. Look in the following directories ...
- ## 1. the directory containing this pod file
- my $thispoddir = dirname $self->input_file;
- ## 2. the parent directory of the above
- my $parentdir = dirname $thispoddir;
- my @podincdirs = ($thispoddir, $parentdir, @PODINCDIRS);
-
- for (@podincdirs) {
- my $incfile = catfile($_, $incname);
- return $incfile if (-r $incfile);
- }
- warn("*** Can't find =include file $incname in @podincdirs\n");
- return "";
-}
-
-sub command {
- my $self = shift;
- my ($cmd, $text, $line_num, $pod_para) = @_;
- $cmd = '' unless (defined $cmd);
- local $_ = $text || '';
- my $out_fh = $self->output_handle;
-
- ## Defer to the superclass for everything except '=include'
- return $self->SUPER::command(@_) unless ($cmd eq "include");
-
- ## We have an '=include' command
- my $incdebug = 1; ## debugging
- my @incargs = split;
- if (@incargs == 0) {
- warn("*** No filename given for '=include'\n");
- return;
- }
- my $incfile = $self->findinclude(shift @incargs) or return;
- my $incbase = basename $incfile;
- print $out_fh "###### begin =include $incbase #####\n" if ($incdebug);
- $self->parse_from_file( {-cutting => 1}, $incfile );
- print $out_fh "###### end =include $incbase #####\n" if ($incdebug);
-}
-
-sub begin_input {
- $_[0]->{_INFILE} = VMS::Filespec::unixify($_[0]->{_INFILE}) if $^O eq 'VMS';
-}
-
-sub podinc2plaintext( $ $ ) {
- my ($infile, $outfile) = @_;
- local $_;
- my $text_parser = $MYPKG->new(quotes => "`'");
- $text_parser->parse_from_file($infile, $outfile);
-}
-
-sub testpodinc2plaintext( @ ) {
- my %args = @_;
- my $infile = $args{'-In'} || croak "No input file given!";
- my $outfile = $args{'-Out'} || croak "No output file given!";
- my $cmpfile = $args{'-Cmp'} || croak "No compare-result file given!";
-
- my $different = '';
- my $testname = basename $cmpfile, '.t', '.xr';
-
- unless (-e $cmpfile) {
- my $msg = "*** Can't find comparison file $cmpfile for testing $infile";
- warn "$msg\n";
- return $msg;
- }
-
- print "# Running testpodinc2plaintext for '$testname'...\n";
- ## Compare the output against the expected result
- podinc2plaintext($infile, $outfile);
- if ( testcmp($outfile, $cmpfile) ) {
- $different = "$outfile is different from $cmpfile";
- }
- else {
- unlink($outfile);
- }
- return $different;
-}
-
-sub testpodplaintext( @ ) {
- my %opts = (ref $_[0] eq 'HASH') ? %{shift()} : ();
- my @testpods = @_;
- my ($testname, $testdir) = ("", "");
- my ($podfile, $cmpfile) = ("", "");
- my ($outfile, $errfile) = ("", "");
- my $passes = 0;
- my $failed = 0;
- local $_;
-
- print "1..", scalar @testpods, "\n" unless ($opts{'-xrgen'});
-
- for $podfile (@testpods) {
- ($testname, $_) = fileparse($podfile);
- $testdir ||= $_;
- $testname =~ s/\.t$//;
- $cmpfile = $testdir . $testname . '.xr';
- $outfile = $testdir . $testname . '.OUT';
-
- if ($opts{'-xrgen'}) {
- if ($opts{'-force'} or ! -e $cmpfile) {
- ## Create the comparison file
- print "# Creating expected result for \"$testname\"" .
- " pod2plaintext test ...\n";
- podinc2plaintext($podfile, $cmpfile);
- }
- else {
- print "# File $cmpfile already exists" .
- " (use '-force' to regenerate it).\n";
- }
- next;
- }
-
- my $failmsg = testpodinc2plaintext
- -In => $podfile,
- -Out => $outfile,
- -Cmp => $cmpfile;
- if ($failmsg) {
- ++$failed;
- print "#\tFAILED. ($failmsg)\n";
- print "not ok ", $failed+$passes, "\n";
- }
- else {
- ++$passes;
- unlink($outfile);
- print "#\tPASSED.\n";
- print "ok ", $failed+$passes, "\n";
- }
- }
- return $passes;
-}
-
-1;
diff --git a/contrib/perl5/t/pod/testpchk.pl b/contrib/perl5/t/pod/testpchk.pl
deleted file mode 100644
index 8aa10b9..0000000
--- a/contrib/perl5/t/pod/testpchk.pl
+++ /dev/null
@@ -1,129 +0,0 @@
-package TestPodChecker;
-
-BEGIN {
- use File::Basename;
- use File::Spec;
- push @INC, '..';
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testcmp.pl";
- import TestCompare;
- my $PARENTDIR = dirname $THISDIR;
- push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
- require VMS::Filespec if $^O eq 'VMS';
-}
-
-use Pod::Checker;
-use vars qw(@ISA @EXPORT $MYPKG);
-#use strict;
-#use diagnostics;
-use Carp;
-use Exporter;
-#use File::Compare;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(&testpodchecker);
-$MYPKG = eval { (caller)[0] };
-
-sub stripname( $ ) {
- local $_ = shift;
- return /(\w[.\w]*)\s*$/ ? $1 : $_;
-}
-
-sub msgcmp( $ $ ) {
- ## filter out platform-dependent aspects of error messages
- my ($line1, $line2) = @_;
- for ($line1, $line2) {
- ## remove filenames from error messages to avoid any
- ## filepath naming differences between OS platforms
- s/(at line \S+ in file) .*\W(\w+\.[tT])\s*$/$1 \L$2\E/;
- s/.*\W(\w+\.[tT]) (has \d+ pod syntax error)/\L$1\E $2/;
- }
- return ($line1 ne $line2);
-}
-
-sub testpodcheck( @ ) {
- my %args = @_;
- my $infile = $args{'-In'} || croak "No input file given!";
- my $outfile = $args{'-Out'} || croak "No output file given!";
- my $cmpfile = $args{'-Cmp'} || croak "No compare-result file given!";
-
- my $different = '';
- my $testname = basename $cmpfile, '.t', '.xr';
-
- unless (-e $cmpfile) {
- my $msg = "*** Can't find comparison file $cmpfile for testing $infile";
- warn "$msg\n";
- return $msg;
- }
-
- print "# Running podchecker for '$testname'...\n";
- ## Compare the output against the expected result
- if ($^O eq 'VMS') {
- for ($infile, $outfile, $cmpfile) {
- $_ = VMS::Filespec::unixify($_) unless ref;
- }
- }
- podchecker($infile, $outfile);
- if ( testcmp({'-cmplines' => \&msgcmp}, $outfile, $cmpfile) ) {
- $different = "$outfile is different from $cmpfile";
- }
- else {
- unlink($outfile);
- }
- return $different;
-}
-
-sub testpodchecker( @ ) {
- my %opts = (ref $_[0] eq 'HASH') ? %{shift()} : ();
- my @testpods = @_;
- my ($testname, $testdir) = ("", "");
- my ($podfile, $cmpfile) = ("", "");
- my ($outfile, $errfile) = ("", "");
- my $passes = 0;
- my $failed = 0;
- local $_;
-
- print "1..", scalar @testpods, "\n" unless ($opts{'-xrgen'});
-
- for $podfile (@testpods) {
- ($testname, $_) = fileparse($podfile);
- $testdir ||= $_;
- $testname =~ s/\.t$//;
- $cmpfile = $testdir . $testname . '.xr';
- $outfile = $testdir . $testname . '.OUT';
-
- if ($opts{'-xrgen'}) {
- if ($opts{'-force'} or ! -e $cmpfile) {
- ## Create the comparison file
- print "# Creating expected result for \"$testname\"" .
- " podchecker test ...\n";
- podchecker($podfile, $cmpfile);
- }
- else {
- print "# File $cmpfile already exists" .
- " (use '-force' to regenerate it).\n";
- }
- next;
- }
-
- my $failmsg = testpodcheck
- -In => $podfile,
- -Out => $outfile,
- -Cmp => $cmpfile;
- if ($failmsg) {
- ++$failed;
- print "#\tFAILED. ($failmsg)\n";
- print "not ok ", $failed+$passes, "\n";
- }
- else {
- ++$passes;
- unlink($outfile);
- print "#\tPASSED.\n";
- print "ok ", $failed+$passes, "\n";
- }
- }
- return $passes;
-}
-
-1;
diff --git a/contrib/perl5/t/pragma/constant.t b/contrib/perl5/t/pragma/constant.t
deleted file mode 100755
index 6e6617b..0000000
--- a/contrib/perl5/t/pragma/constant.t
+++ /dev/null
@@ -1,230 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use warnings;
-use vars qw{ @warnings };
-BEGIN { # ...and save 'em for later
- $SIG{'__WARN__'} = sub { push @warnings, @_ }
-}
-END { print @warnings }
-
-######################### We start with some black magic to print on failure.
-
-BEGIN { $| = 1; print "1..73\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use constant 1.01;
-$loaded = 1;
-#print "# Version: $constant::VERSION\n";
-print "ok 1\n";
-
-######################### End of black magic.
-
-use strict;
-
-sub test ($$;$) {
- my($num, $bool, $diag) = @_;
- if ($bool) {
- print "ok $num\n";
- return;
- }
- print "not ok $num\n";
- return unless defined $diag;
- $diag =~ s/\Z\n?/\n/; # unchomp
- print map "# $num : $_", split m/^/m, $diag;
-}
-
-use constant PI => 4 * atan2 1, 1;
-
-test 2, substr(PI, 0, 7) eq '3.14159';
-test 3, defined PI;
-
-sub deg2rad { PI * $_[0] / 180 }
-
-my $ninety = deg2rad 90;
-
-test 4, $ninety > 1.5707;
-test 5, $ninety < 1.5708;
-
-use constant UNDEF1 => undef; # the right way
-use constant UNDEF2 => ; # the weird way
-use constant 'UNDEF3' ; # the 'short' way
-use constant EMPTY => ( ) ; # the right way for lists
-
-test 6, not defined UNDEF1;
-test 7, not defined UNDEF2;
-test 8, not defined UNDEF3;
-my @undef = UNDEF1;
-test 9, @undef == 1;
-test 10, not defined $undef[0];
-@undef = UNDEF2;
-test 11, @undef == 0;
-@undef = UNDEF3;
-test 12, @undef == 0;
-@undef = EMPTY;
-test 13, @undef == 0;
-
-use constant COUNTDOWN => scalar reverse 1, 2, 3, 4, 5;
-use constant COUNTLIST => reverse 1, 2, 3, 4, 5;
-use constant COUNTLAST => (COUNTLIST)[-1];
-
-test 14, COUNTDOWN eq '54321';
-my @cl = COUNTLIST;
-test 15, @cl == 5;
-test 16, COUNTDOWN eq join '', @cl;
-test 17, COUNTLAST == 1;
-test 18, (COUNTLIST)[1] == 4;
-
-use constant ABC => 'ABC';
-test 19, "abc${\( ABC )}abc" eq "abcABCabc";
-
-use constant DEF => 'D', 'E', chr ord 'F';
-test 20, "d e f @{[ DEF ]} d e f" eq "d e f D E F d e f";
-
-use constant SINGLE => "'";
-use constant DOUBLE => '"';
-use constant BACK => '\\';
-my $tt = BACK . SINGLE . DOUBLE ;
-test 21, $tt eq q(\\'");
-
-use constant MESS => q('"'\\"'"\\);
-test 22, MESS eq q('"'\\"'"\\);
-test 23, length(MESS) == 8;
-
-use constant TRAILING => '12 cats';
-{
- no warnings 'numeric';
- test 24, TRAILING == 12;
-}
-test 25, TRAILING eq '12 cats';
-
-use constant LEADING => " \t1234";
-test 26, LEADING == 1234;
-test 27, LEADING eq " \t1234";
-
-use constant ZERO1 => 0;
-use constant ZERO2 => 0.0;
-use constant ZERO3 => '0.0';
-test 28, ZERO1 eq '0';
-test 29, ZERO2 eq '0';
-test 30, ZERO3 eq '0.0';
-
-{
- package Other;
- use constant PI => 3.141;
-}
-
-test 31, (PI > 3.1415 and PI < 3.1416);
-test 32, Other::PI == 3.141;
-
-use constant E2BIG => $! = 7;
-test 33, E2BIG == 7;
-# This is something like "Arg list too long", but the actual message
-# text may vary, so we can't test much better than this.
-test 34, length(E2BIG) > 6;
-test 35, index(E2BIG, " ") > 0;
-
-test 36, @warnings == 0, join "\n", "unexpected warning", @warnings;
-@warnings = (); # just in case
-undef &PI;
-test 37, @warnings &&
- ($warnings[0] =~ /Constant sub.* undefined/),
- shift @warnings;
-
-test 38, @warnings == 0, "unexpected warning";
-test 39, 1;
-
-use constant CSCALAR => \"ok 40\n";
-use constant CHASH => { foo => "ok 41\n" };
-use constant CARRAY => [ undef, "ok 42\n" ];
-use constant CPHASH => [ { foo => 1 }, "ok 43\n" ];
-use constant CCODE => sub { "ok $_[0]\n" };
-
-print ${+CSCALAR};
-print CHASH->{foo};
-print CARRAY->[1];
-print CPHASH->{foo};
-eval q{ CPHASH->{bar} };
-test 44, scalar($@ =~ /^No such pseudo-hash field/);
-print CCODE->(45);
-eval q{ CCODE->{foo} };
-test 46, scalar($@ =~ /^Constant is not a HASH/);
-
-# Allow leading underscore
-use constant _PRIVATE => 47;
-test 47, _PRIVATE == 47;
-
-# Disallow doubled leading underscore
-eval q{
- use constant __DISALLOWED => "Oops";
-};
-test 48, $@ =~ /begins with '__'/;
-
-# Check on declared() and %declared. This sub should be EXACTLY the
-# same as the one quoted in the docs!
-sub declared ($) {
- use constant 1.01; # don't omit this!
- my $name = shift;
- $name =~ s/^::/main::/;
- my $pkg = caller;
- my $full_name = $name =~ /::/ ? $name : "${pkg}::$name";
- $constant::declared{$full_name};
-}
-
-test 49, declared 'PI';
-test 50, $constant::declared{'main::PI'};
-
-test 51, !declared 'PIE';
-test 52, !$constant::declared{'main::PIE'};
-
-{
- package Other;
- use constant IN_OTHER_PACK => 42;
- ::test 53, ::declared 'IN_OTHER_PACK';
- ::test 54, $constant::declared{'Other::IN_OTHER_PACK'};
- ::test 55, ::declared 'main::PI';
- ::test 56, $constant::declared{'main::PI'};
-}
-
-test 57, declared 'Other::IN_OTHER_PACK';
-test 58, $constant::declared{'Other::IN_OTHER_PACK'};
-
-@warnings = ();
-eval q{
- no warnings;
- use warnings 'constant';
- use constant 'BEGIN' => 1 ;
- use constant 'INIT' => 1 ;
- use constant 'CHECK' => 1 ;
- use constant 'END' => 1 ;
- use constant 'DESTROY' => 1 ;
- use constant 'AUTOLOAD' => 1 ;
- use constant 'STDIN' => 1 ;
- use constant 'STDOUT' => 1 ;
- use constant 'STDERR' => 1 ;
- use constant 'ARGV' => 1 ;
- use constant 'ARGVOUT' => 1 ;
- use constant 'ENV' => 1 ;
- use constant 'INC' => 1 ;
- use constant 'SIG' => 1 ;
-};
-
-test 59, @warnings == 14 ;
-test 60, (shift @warnings) =~ /^Constant name 'BEGIN' is a Perl keyword at/;
-test 61, (shift @warnings) =~ /^Constant name 'INIT' is a Perl keyword at/;
-test 62, (shift @warnings) =~ /^Constant name 'CHECK' is a Perl keyword at/;
-test 63, (shift @warnings) =~ /^Constant name 'END' is a Perl keyword at/;
-test 64, (shift @warnings) =~ /^Constant name 'DESTROY' is a Perl keyword at/;
-test 65, (shift @warnings) =~ /^Constant name 'AUTOLOAD' is a Perl keyword at/;
-test 66, (shift @warnings) =~ /^Constant name 'STDIN' is forced into package main:: a/;
-test 67, (shift @warnings) =~ /^Constant name 'STDOUT' is forced into package main:: at/;
-test 68, (shift @warnings) =~ /^Constant name 'STDERR' is forced into package main:: at/;
-test 69, (shift @warnings) =~ /^Constant name 'ARGV' is forced into package main:: at/;
-test 70, (shift @warnings) =~ /^Constant name 'ARGVOUT' is forced into package main:: at/;
-test 71, (shift @warnings) =~ /^Constant name 'ENV' is forced into package main:: at/;
-test 72, (shift @warnings) =~ /^Constant name 'INC' is forced into package main:: at/;
-test 73, (shift @warnings) =~ /^Constant name 'SIG' is forced into package main:: at/;
-@warnings = ();
diff --git a/contrib/perl5/t/pragma/diagnostics.t b/contrib/perl5/t/pragma/diagnostics.t
deleted file mode 100755
index 14014f6..0000000
--- a/contrib/perl5/t/pragma/diagnostics.t
+++ /dev/null
@@ -1,38 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir '..' if -d '../pod' && -d '../t';
- @INC = 'lib';
-}
-
-
-######################### We start with some black magic to print on failure.
-
-# Change 1..1 below to 1..last_test_to_print .
-# (It may become useful if the test is moved to ./t subdirectory.)
-use strict;
-use warnings;
-
-use vars qw($Test_Num $Total_tests);
-
-my $loaded;
-BEGIN { $| = 1; $Test_Num = 1 }
-END {print "not ok $Test_Num\n" unless $loaded;}
-print "1..$Total_tests\n";
-BEGIN { require diagnostics; } # Don't want diagnostics' noise yet.
-$loaded = 1;
-ok($loaded, 'compile');
-######################### End of black magic.
-
-sub ok {
- my($test, $name) = shift;
- print "not " unless $test;
- print "ok $Test_Num";
- print " - $name" if defined $name;
- print "\n";
- $Test_Num++;
-}
-
-
-# Change this to your # of ok() calls + 1
-BEGIN { $Total_tests = 1 }
diff --git a/contrib/perl5/t/pragma/locale.t b/contrib/perl5/t/pragma/locale.t
deleted file mode 100755
index 068fede..0000000
--- a/contrib/perl5/t/pragma/locale.t
+++ /dev/null
@@ -1,807 +0,0 @@
-#!./perl -wT
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- unshift @INC, '.';
- require Config; import Config;
- if (!$Config{d_setlocale} || $Config{ccflags} =~ /\bD?NO_LOCALE\b/) {
- print "1..0\n";
- exit;
- }
-}
-
-use strict;
-
-my $debug = 1;
-
-use Dumpvalue;
-
-my $dumper = Dumpvalue->new(
- tick => qq{"},
- quoteHighBit => 0,
- unctrl => "quote"
- );
-sub debug {
- return unless $debug;
- my($mess) = join "", @_;
- chop $mess;
- print $dumper->stringify($mess,1), "\n";
-}
-
-sub debugf {
- printf @_ if $debug;
-}
-
-my $have_setlocale = 0;
-eval {
- require POSIX;
- import POSIX ':locale_h';
- $have_setlocale++;
-};
-
-# Visual C's CRT goes silly on strings of the form "en_US.ISO8859-1"
-# and mingw32 uses said silly CRT
-$have_setlocale = 0 if $^O eq 'MSWin32' && $Config{cc} =~ /^(cl|gcc)/i;
-
-my $last = $have_setlocale ? 116 : 98;
-
-print "1..$last\n";
-
-use vars qw(&LC_ALL);
-
-my $a = 'abc %';
-
-sub ok {
- my ($n, $result) = @_;
-
- print 'not ' unless ($result);
- print "ok $n\n";
-}
-
-# First we'll do a lot of taint checking for locales.
-# This is the easiest to test, actually, as any locale,
-# even the default locale will taint under 'use locale'.
-
-sub is_tainted { # hello, camel two.
- no warnings 'uninitialized' ;
- my $dummy;
- not eval { $dummy = join("", @_), kill 0; 1 }
-}
-
-sub check_taint ($$) {
- ok $_[0], is_tainted($_[1]);
-}
-
-sub check_taint_not ($$) {
- ok $_[0], not is_tainted($_[1]);
-}
-
-use locale; # engage locale and therefore locale taint.
-
-check_taint_not 1, $a;
-
-check_taint 2, uc($a);
-check_taint 3, "\U$a";
-check_taint 4, ucfirst($a);
-check_taint 5, "\u$a";
-check_taint 6, lc($a);
-check_taint 7, "\L$a";
-check_taint 8, lcfirst($a);
-check_taint 9, "\l$a";
-
-check_taint_not 10, sprintf('%e', 123.456);
-check_taint_not 11, sprintf('%f', 123.456);
-check_taint_not 12, sprintf('%g', 123.456);
-check_taint_not 13, sprintf('%d', 123.456);
-check_taint_not 14, sprintf('%x', 123.456);
-
-$_ = $a; # untaint $_
-
-$_ = uc($a); # taint $_
-
-check_taint 15, $_;
-
-/(\w)/; # taint $&, $`, $', $+, $1.
-check_taint 16, $&;
-check_taint 17, $`;
-check_taint 18, $';
-check_taint 19, $+;
-check_taint 20, $1;
-check_taint_not 21, $2;
-
-/(.)/; # untaint $&, $`, $', $+, $1.
-check_taint_not 22, $&;
-check_taint_not 23, $`;
-check_taint_not 24, $';
-check_taint_not 25, $+;
-check_taint_not 26, $1;
-check_taint_not 27, $2;
-
-/(\W)/; # taint $&, $`, $', $+, $1.
-check_taint 28, $&;
-check_taint 29, $`;
-check_taint 30, $';
-check_taint 31, $+;
-check_taint 32, $1;
-check_taint_not 33, $2;
-
-/(\s)/; # taint $&, $`, $', $+, $1.
-check_taint 34, $&;
-check_taint 35, $`;
-check_taint 36, $';
-check_taint 37, $+;
-check_taint 38, $1;
-check_taint_not 39, $2;
-
-/(\S)/; # taint $&, $`, $', $+, $1.
-check_taint 40, $&;
-check_taint 41, $`;
-check_taint 42, $';
-check_taint 43, $+;
-check_taint 44, $1;
-check_taint_not 45, $2;
-
-$_ = $a; # untaint $_
-
-check_taint_not 46, $_;
-
-/(b)/; # this must not taint
-check_taint_not 47, $&;
-check_taint_not 48, $`;
-check_taint_not 49, $';
-check_taint_not 50, $+;
-check_taint_not 51, $1;
-check_taint_not 52, $2;
-
-$_ = $a; # untaint $_
-
-check_taint_not 53, $_;
-
-$b = uc($a); # taint $b
-s/(.+)/$b/; # this must taint only the $_
-
-check_taint 54, $_;
-check_taint_not 55, $&;
-check_taint_not 56, $`;
-check_taint_not 57, $';
-check_taint_not 58, $+;
-check_taint_not 59, $1;
-check_taint_not 60, $2;
-
-$_ = $a; # untaint $_
-
-s/(.+)/b/; # this must not taint
-check_taint_not 61, $_;
-check_taint_not 62, $&;
-check_taint_not 63, $`;
-check_taint_not 64, $';
-check_taint_not 65, $+;
-check_taint_not 66, $1;
-check_taint_not 67, $2;
-
-$b = $a; # untaint $b
-
-($b = $a) =~ s/\w/$&/;
-check_taint 68, $b; # $b should be tainted.
-check_taint_not 69, $a; # $a should be not.
-
-$_ = $a; # untaint $_
-
-s/(\w)/\l$1/; # this must taint
-check_taint 70, $_;
-check_taint 71, $&;
-check_taint 72, $`;
-check_taint 73, $';
-check_taint 74, $+;
-check_taint 75, $1;
-check_taint_not 76, $2;
-
-$_ = $a; # untaint $_
-
-s/(\w)/\L$1/; # this must taint
-check_taint 77, $_;
-check_taint 78, $&;
-check_taint 79, $`;
-check_taint 80, $';
-check_taint 81, $+;
-check_taint 82, $1;
-check_taint_not 83, $2;
-
-$_ = $a; # untaint $_
-
-s/(\w)/\u$1/; # this must taint
-check_taint 84, $_;
-check_taint 85, $&;
-check_taint 86, $`;
-check_taint 87, $';
-check_taint 88, $+;
-check_taint 89, $1;
-check_taint_not 90, $2;
-
-$_ = $a; # untaint $_
-
-s/(\w)/\U$1/; # this must taint
-check_taint 91, $_;
-check_taint 92, $&;
-check_taint 93, $`;
-check_taint 94, $';
-check_taint 95, $+;
-check_taint 96, $1;
-check_taint_not 97, $2;
-
-# After all this tainting $a should be cool.
-
-check_taint_not 98, $a;
-
-# I think we've seen quite enough of taint.
-# Let us do some *real* locale work now,
-# unless setlocale() is missing (i.e. minitest).
-
-exit unless $have_setlocale;
-
-# Find locales.
-
-debug "# Scanning for locales...\n";
-
-# Note that it's okay that some languages have their native names
-# capitalized here even though that's not "right". They are lowercased
-# anyway later during the scanning process (and besides, some clueless
-# vendor might have them capitalized errorneously anyway).
-
-my $locales = <<EOF;
-Afrikaans:af:za:1 15
-Arabic:ar:dz eg sa:6 arabic8
-Brezhoneg Breton:br:fr:1 15
-Bulgarski Bulgarian:bg:bg:5
-Chinese:zh:cn tw:cn.EUC eucCN eucTW euc.CN euc.TW Big5 GB2312 tw.EUC
-Hrvatski Croatian:hr:hr:2
-Cymraeg Welsh:cy:cy:1 14 15
-Czech:cs:cz:2
-Dansk Danish:dk:da:1 15
-Nederlands Dutch:nl:be nl:1 15
-English American British:en:au ca gb ie nz us uk zw:1 15 cp850
-Esperanto:eo:eo:3
-Eesti Estonian:et:ee:4 6 13
-Suomi Finnish:fi:fi:1 15
-Flamish::fl:1 15
-Deutsch German:de:at be ch de lu:1 15
-Euskaraz Basque:eu:es fr:1 15
-Galego Galician:gl:es:1 15
-Ellada Greek:el:gr:7 g8
-Frysk:fy:nl:1 15
-Greenlandic:kl:gl:4 6
-Hebrew:iw:il:8 hebrew8
-Hungarian:hu:hu:2
-Indonesian:in:id:1 15
-Gaeilge Irish:ga:IE:1 14 15
-Italiano Italian:it:ch it:1 15
-Nihongo Japanese:ja:jp:euc eucJP jp.EUC sjis
-Korean:ko:kr:
-Latine Latin:la:va:1 15
-Latvian:lv:lv:4 6 13
-Lithuanian:lt:lt:4 6 13
-Macedonian:mk:mk:1 15
-Maltese:mt:mt:3
-Moldovan:mo:mo:2
-Norsk Norwegian:no no\@nynorsk:no:1 15
-Occitan:oc:es:1 15
-Polski Polish:pl:pl:2
-Rumanian:ro:ro:2
-Russki Russian:ru:ru su ua:5 koi8 koi8r KOI8-R koi8u cp1251 cp866
-Serbski Serbian:sr:yu:5
-Slovak:sk:sk:2
-Slovene Slovenian:sl:si:2
-Sqhip Albanian:sq:sq:1 15
-Svenska Swedish:sv:fi se:1 15
-Thai:th:th:11 tis620
-Turkish:tr:tr:9 turkish8
-Yiddish:yi::1 15
-EOF
-
-if ($^O eq 'os390') {
- # These cause heartburn. Broken locales?
- $locales =~ s/Svenska Swedish:sv:fi se:1 15\n//;
- $locales =~ s/Thai:th:th:11 tis620\n//;
-}
-
-sub in_utf8 () { $^H & 0x08 }
-
-if (in_utf8) {
- require "pragma/locale/utf8";
-} else {
- require "pragma/locale/latin1";
-}
-
-my @Locale;
-my $Locale;
-my @Alnum_;
-
-sub getalnum_ {
- sort grep /\w/, map { chr } 0..255
-}
-
-sub trylocale {
- my $locale = shift;
- if (setlocale(LC_ALL, $locale)) {
- push @Locale, $locale;
- }
-}
-
-sub decode_encodings {
- my @enc;
-
- foreach (split(/ /, shift)) {
- if (/^(\d+)$/) {
- push @enc, "ISO8859-$1";
- push @enc, "iso8859$1"; # HP
- if ($1 eq '1') {
- push @enc, "roman8"; # HP
- }
- } else {
- push @enc, $_;
- push @enc, "$_.UTF-8";
- }
- }
- if ($^O eq 'os390') {
- push @enc, qw(IBM-037 IBM-819 IBM-1047);
- }
-
- return @enc;
-}
-
-trylocale("C");
-trylocale("POSIX");
-foreach (0..15) {
- trylocale("ISO8859-$_");
- trylocale("iso8859$_");
- trylocale("iso8859-$_");
- trylocale("iso_8859_$_");
- trylocale("isolatin$_");
- trylocale("isolatin-$_");
- trylocale("iso_latin_$_");
-}
-
-# Sanitize the environment so that we can run the external 'locale'
-# program without the taint mode getting grumpy.
-
-# $ENV{PATH} is special in VMS.
-delete $ENV{PATH} if $^O ne 'VMS' or $Config{d_setenv};
-
-# Other subversive stuff.
-delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
-
-if (-x "/usr/bin/locale" && open(LOCALES, "/usr/bin/locale -a 2>/dev/null|")) {
- while (<LOCALES>) {
- chomp;
- trylocale($_);
- }
- close(LOCALES);
-} elsif ($^O eq 'VMS' && defined($ENV{'SYS$I18N_LOCALE'}) && -d 'SYS$I18N_LOCALE') {
-# The SYS$I18N_LOCALE logical name search list was not present on
-# VAX VMS V5.5-12, but was on AXP && VAX VMS V6.2 as well as later versions.
- opendir(LOCALES, "SYS\$I18N_LOCALE:");
- while ($_ = readdir(LOCALES)) {
- chomp;
- trylocale($_);
- }
- close(LOCALES);
-} else {
-
- # This is going to be slow.
-
- foreach my $locale (split(/\n/, $locales)) {
- my ($locale_name, $language_codes, $country_codes, $encodings) =
- split(/:/, $locale);
- my @enc = decode_encodings($encodings);
- foreach my $loc (split(/ /, $locale_name)) {
- trylocale($loc);
- foreach my $enc (@enc) {
- trylocale("$loc.$enc");
- }
- $loc = lc $loc;
- foreach my $enc (@enc) {
- trylocale("$loc.$enc");
- }
- }
- foreach my $lang (split(/ /, $language_codes)) {
- trylocale($lang);
- foreach my $country (split(/ /, $country_codes)) {
- my $lc = "${lang}_${country}";
- trylocale($lc);
- foreach my $enc (@enc) {
- trylocale("$lc.$enc");
- }
- my $lC = "${lang}_\U${country}";
- trylocale($lC);
- foreach my $enc (@enc) {
- trylocale("$lC.$enc");
- }
- }
- }
- }
-}
-
-setlocale(LC_ALL, "C");
-
-sub utf8locale { $_[0] =~ /utf-?8/i }
-
-@Locale = sort @Locale;
-
-debug "# Locales = @Locale\n";
-
-my %Problem;
-my %Okay;
-my %Testing;
-my @Neoalpha;
-my %Neoalpha;
-
-sub tryneoalpha {
- my ($Locale, $i, $test) = @_;
- unless ($test) {
- $Problem{$i}{$Locale} = 1;
- debug "# failed $i with locale '$Locale'\n";
- } else {
- push @{$Okay{$i}}, $Locale;
- }
-}
-
-foreach $Locale (@Locale) {
- debug "# Locale = $Locale\n";
- @Alnum_ = getalnum_();
- debug "# w = ", join("",@Alnum_), "\n";
-
- unless (setlocale(LC_ALL, $Locale)) {
- foreach (99..103) {
- $Problem{$_}{$Locale} = -1;
- }
- next;
- }
-
- # Sieve the uppercase and the lowercase.
-
- my %UPPER = ();
- my %lower = ();
- my %BoThCaSe = ();
- for (@Alnum_) {
- if (/[^\d_]/) { # skip digits and the _
- if (uc($_) eq $_) {
- $UPPER{$_} = $_;
- }
- if (lc($_) eq $_) {
- $lower{$_} = $_;
- }
- }
- }
- foreach (keys %UPPER) {
- $BoThCaSe{$_}++ if exists $lower{$_};
- }
- foreach (keys %lower) {
- $BoThCaSe{$_}++ if exists $UPPER{$_};
- }
- foreach (keys %BoThCaSe) {
- delete $UPPER{$_};
- delete $lower{$_};
- }
-
- debug "# UPPER = ", join("", sort keys %UPPER ), "\n";
- debug "# lower = ", join("", sort keys %lower ), "\n";
- debug "# BoThCaSe = ", join("", sort keys %BoThCaSe), "\n";
-
- # Find the alphabets that are not alphabets in the default locale.
-
- {
- no locale;
-
- @Neoalpha = ();
- for (keys %UPPER, keys %lower) {
- push(@Neoalpha, $_) if (/\W/);
- $Neoalpha{$_} = $_;
- }
- }
-
- @Neoalpha = sort @Neoalpha;
-
- debug "# Neoalpha = ", join("",@Neoalpha), "\n";
-
- if (@Neoalpha == 0) {
- # If we have no Neoalphas the remaining tests are no-ops.
- debug "# no Neoalpha, skipping tests 99..102 for locale '$Locale'\n";
- foreach (99..102) {
- push @{$Okay{$_}}, $Locale;
- }
- } else {
-
- # Test \w.
-
- if (utf8locale($Locale)) {
- # Until the polymorphic regexen arrive.
- debug "# skipping UTF-8 locale '$Locale'\n";
- } else {
- my $word = join('', @Neoalpha);
-
- $word =~ /^(\w+)$/;
-
- tryneoalpha($Locale, 99, $1 eq $word);
- }
-
- # Cross-check the whole 8-bit character set.
-
- for (map { chr } 0..255) {
- tryneoalpha($Locale, 100,
- (/\w/ xor /\W/) ||
- (/\d/ xor /\D/) ||
- (/\s/ xor /\S/));
- }
-
- # Test for read-only scalars' locale vs non-locale comparisons.
-
- {
- no locale;
- $a = "qwerty";
- {
- use locale;
- tryneoalpha($Locale, 101, ($a cmp "qwerty") == 0);
- }
- }
-
- {
- my ($from, $to, $lesser, $greater,
- @test, %test, $test, $yes, $no, $sign);
-
- for (0..9) {
- # Select a slice.
- $from = int(($_*@Alnum_)/10);
- $to = $from + int(@Alnum_/10);
- $to = $#Alnum_ if ($to > $#Alnum_);
- $lesser = join('', @Alnum_[$from..$to]);
- # Select a slice one character on.
- $from++; $to++;
- $to = $#Alnum_ if ($to > $#Alnum_);
- $greater = join('', @Alnum_[$from..$to]);
- ($yes, $no, $sign) = ($lesser lt $greater
- ? (" ", "not ", 1)
- : ("not ", " ", -1));
- # all these tests should FAIL (return 0).
- # Exact lt or gt cannot be tested because
- # in some locales, say, eacute and E may test equal.
- @test =
- (
- $no.' ($lesser le $greater)', # 1
- 'not ($lesser ne $greater)', # 2
- ' ($lesser eq $greater)', # 3
- $yes.' ($lesser ge $greater)', # 4
- $yes.' ($lesser ge $greater)', # 5
- $yes.' ($greater le $lesser )', # 7
- 'not ($greater ne $lesser )', # 8
- ' ($greater eq $lesser )', # 9
- $no.' ($greater ge $lesser )', # 10
- 'not (($lesser cmp $greater) == -$sign)' # 12
- );
- @test{@test} = 0 x @test;
- $test = 0;
- for my $ti (@test) {
- $test{$ti} = eval $ti;
- $test ||= $test{$ti}
- }
- tryneoalpha($Locale, 102, $test == 0);
- if ($test) {
- debug "# lesser = '$lesser'\n";
- debug "# greater = '$greater'\n";
- debug "# lesser cmp greater = ",
- $lesser cmp $greater, "\n";
- debug "# greater cmp lesser = ",
- $greater cmp $lesser, "\n";
- debug "# (greater) from = $from, to = $to\n";
- for my $ti (@test) {
- debugf("# %-40s %-4s", $ti,
- $test{$ti} ? 'FAIL' : 'ok');
- if ($ti =~ /\(\.*(\$.+ +cmp +\$[^\)]+)\.*\)/) {
- debugf("(%s == %4d)", $1, eval $1);
- }
- debug "\n#";
- }
-
- last;
- }
- }
- }
- }
-
- use locale;
-
- my ($x, $y) = (1.23, 1.23);
-
- my $a = "$x";
- printf ''; # printf used to reset locale to "C"
- my $b = "$y";
-
- debug "# 103..107: a = $a, b = $b, Locale = $Locale\n";
-
- tryneoalpha($Locale, 103, $a eq $b);
-
- my $c = "$x";
- my $z = sprintf ''; # sprintf used to reset locale to "C"
- my $d = "$y";
-
- debug "# 104..107: c = $c, d = $d, Locale = $Locale\n";
-
- tryneoalpha($Locale, 104, $c eq $d);
-
- {
- use warnings;
- my $w = 0;
- local $SIG{__WARN__} = sub { $w++ };
-
- # the == (among other ops) used to warn for locales
- # that had something else than "." as the radix character
-
- tryneoalpha($Locale, 105, $c == 1.23);
-
- tryneoalpha($Locale, 106, $c == $x);
-
- tryneoalpha($Locale, 107, $c == $d);
-
- {
- no locale;
-
- my $e = "$x";
-
- debug "# 108..110: e = $e, Locale = $Locale\n";
-
- tryneoalpha($Locale, 108, $e == 1.23);
-
- tryneoalpha($Locale, 109, $e == $x);
-
- tryneoalpha($Locale, 110, $e == $c);
- }
-
- tryneoalpha($Locale, 111, $w == 0);
-
- my $f = "1.23";
-
- debug "# 112..114: f = $f, locale = $Locale\n";
-
- tryneoalpha($Locale, 112, $f == 1.23);
-
- tryneoalpha($Locale, 113, $f == $x);
-
- tryneoalpha($Locale, 114, $f == $c);
- }
-
- # Does taking lc separately differ from taking
- # the lc "in-line"? (This was the bug 19990704.002, change #3568.)
- # The bug was in the caching of the 'o'-magic.
- {
- use locale;
-
- sub lcA {
- my $lc0 = lc $_[0];
- my $lc1 = lc $_[1];
- return $lc0 cmp $lc1;
- }
-
- sub lcB {
- return lc($_[0]) cmp lc($_[1]);
- }
-
- my $x = "ab";
- my $y = "aa";
- my $z = "AB";
-
- tryneoalpha($Locale, 115,
- lcA($x, $y) == 1 && lcB($x, $y) == 1 ||
- lcA($x, $z) == 0 && lcB($x, $z) == 0);
- }
-
- # Does lc of an UPPER (if different from the UPPER) match
- # case-insensitively the UPPER, and does the UPPER match
- # case-insensitively the lc of the UPPER. And vice versa.
- if (utf8locale($Locale)) {
- # Until the polymorphic regexen arrive.
- debug "# skipping UTF-8 locale '$Locale'\n";
- } else {
- use locale;
-
- my @f = ();
- foreach my $x (keys %UPPER) {
- my $y = lc $x;
- next unless uc $y eq $x;
- push @f, $x unless $x =~ /$y/i && $y =~ /$x/i;
- }
- foreach my $x (keys %lower) {
- my $y = uc $x;
- next unless lc $y eq $x;
- push @f, $x unless $x =~ /$y/i && $y =~ /$x/i;
- }
- tryneoalpha($Locale, 116, @f == 0);
- if (@f) {
- print "# failed 116 locale '$Locale' characters @f\n"
- }
- }
-
-}
-
-# Recount the errors.
-
-foreach (99..$last) {
- if ($Problem{$_} || !defined $Okay{$_} || !@{$Okay{$_}}) {
- if ($_ == 102) {
- print "# The failure of test 102 is not necessarily fatal.\n";
- print "# It usually indicates a problem in the enviroment,\n";
- print "# not in Perl itself.\n";
- }
- print "not ";
- }
- print "ok $_\n";
-}
-
-# Give final advice.
-
-my $didwarn = 0;
-
-foreach (99..$last) {
- if ($Problem{$_}) {
- my @f = sort keys %{ $Problem{$_} };
- my $f = join(" ", @f);
- $f =~ s/(.{50,60}) /$1\n#\t/g;
- print
- "#\n",
- "# The locale ", (@f == 1 ? "definition" : "definitions"), "\n#\n",
- "#\t", $f, "\n#\n",
- "# on your system may have errors because the locale test $_\n",
- "# failed in ", (@f == 1 ? "that locale" : "those locales"),
- ".\n";
- print <<EOW;
-#
-# If your users are not using these locales you are safe for the moment,
-# but please report this failure first to perlbug\@perl.com using the
-# perlbug script (as described in the INSTALL file) so that the exact
-# details of the failures can be sorted out first and then your operating
-# system supplier can be alerted about these anomalies.
-#
-EOW
- $didwarn = 1;
- }
-}
-
-# Tell which locales were okay and which were not.
-
-if ($didwarn) {
- my (@s, @F);
-
- foreach my $l (@Locale) {
- my $p = 0;
- foreach my $t (102..$last) {
- $p++ if $Problem{$t}{$l};
- }
- push @s, $l if $p == 0;
- push @F, $l unless $p == 0;
- }
-
- if (@s) {
- my $s = join(" ", @s);
- $s =~ s/(.{50,60}) /$1\n#\t/g;
-
- warn
- "# The following locales\n#\n",
- "#\t", $s, "\n#\n",
- "# tested okay.\n#\n",
- } else {
- warn "# None of your locales were fully okay.\n";
- }
-
- if (@F) {
- my $F = join(" ", @F);
- $F =~ s/(.{50,60}) /$1\n#\t/g;
-
- warn
- "# The following locales\n#\n",
- "#\t", $F, "\n#\n",
- "# had problems.\n#\n",
- } else {
- warn "# None of your locales were broken.\n";
- }
-}
-
-# eof
diff --git a/contrib/perl5/t/pragma/locale/latin1 b/contrib/perl5/t/pragma/locale/latin1
deleted file mode 100644
index f40f732..0000000
--- a/contrib/perl5/t/pragma/locale/latin1
+++ /dev/null
@@ -1,10 +0,0 @@
-$locales .= <<EOF;
-Català Catalan:ca:es:1 15
-Français French:fr:be ca ch fr lu:1 15
-Gáidhlig Gaelic:gd:gb uk:1 14 15
-Føroyskt Faroese:fo:fo:1 15
-Íslensku Icelandic:is:is:1 15
-Sámi Lappish:::4 6 13
-Português Portuguese:po:po br:1 15
-Espanõl Spanish:es:ar bo cl co cr do ec es gt hn mx ni pa pe py sv uy ve:1 15
-EOF
diff --git a/contrib/perl5/t/pragma/locale/utf8 b/contrib/perl5/t/pragma/locale/utf8
deleted file mode 100644
index fbbe94f..0000000
--- a/contrib/perl5/t/pragma/locale/utf8
+++ /dev/null
@@ -1,10 +0,0 @@
-$locales .= <<EOF;
-Català Catalan:ca:es:1 15
-Français French:fr:be ca ch fr lu:1 15
-Gáidhlig Gaelic:gd:gb uk:1 14 15
-Føroyskt Faroese:fo:fo:1 15
-Ãslensku Icelandic:is:is:1 15
-Sámi Lappish:::4 6 13
-Português Portuguese:po:po br:1 15
-Espanõl Spanish:es:ar bo cl co cr do ec es gt hn mx ni pa pe py sv uy ve:1 15
-EOF
diff --git a/contrib/perl5/t/pragma/overload.t b/contrib/perl5/t/pragma/overload.t
deleted file mode 100755
index a3007ef..0000000
--- a/contrib/perl5/t/pragma/overload.t
+++ /dev/null
@@ -1,987 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-package Oscalar;
-use overload (
- # Anonymous subroutines:
-'+' => sub {new Oscalar $ {$_[0]}+$_[1]},
-'-' => sub {new Oscalar
- $_[2]? $_[1]-${$_[0]} : ${$_[0]}-$_[1]},
-'<=>' => sub {new Oscalar
- $_[2]? $_[1]-${$_[0]} : ${$_[0]}-$_[1]},
-'cmp' => sub {new Oscalar
- $_[2]? ($_[1] cmp ${$_[0]}) : (${$_[0]} cmp $_[1])},
-'*' => sub {new Oscalar ${$_[0]}*$_[1]},
-'/' => sub {new Oscalar
- $_[2]? $_[1]/${$_[0]} :
- ${$_[0]}/$_[1]},
-'%' => sub {new Oscalar
- $_[2]? $_[1]%${$_[0]} : ${$_[0]}%$_[1]},
-'**' => sub {new Oscalar
- $_[2]? $_[1]**${$_[0]} : ${$_[0]}-$_[1]},
-
-qw(
-"" stringify
-0+ numify) # Order of arguments unsignificant
-);
-
-sub new {
- my $foo = $_[1];
- bless \$foo, $_[0];
-}
-
-sub stringify { "${$_[0]}" }
-sub numify { 0 + "${$_[0]}" } # Not needed, additional overhead
- # comparing to direct compilation based on
- # stringify
-
-package main;
-
-$test = 0;
-$| = 1;
-print "1..",&last,"\n";
-
-sub test {
- $test++;
- if (@_ > 1) {
- if ($_[0] eq $_[1]) {
- print "ok $test\n";
- } else {
- print "not ok $test: '$_[0]' ne '$_[1]'\n";
- }
- } else {
- if (shift) {
- print "ok $test\n";
- } else {
- print "not ok $test\n";
- }
- }
-}
-
-$a = new Oscalar "087";
-$b= "$a";
-
-# All test numbers in comments are off by 1.
-# So much for hard-wiring them in :-) To fix this:
-test(1); # 1
-
-test ($b eq $a); # 2
-test ($b eq "087"); # 3
-test (ref $a eq "Oscalar"); # 4
-test ($a eq $a); # 5
-test ($a eq "087"); # 6
-
-$c = $a + 7;
-
-test (ref $c eq "Oscalar"); # 7
-test (!($c eq $a)); # 8
-test ($c eq "94"); # 9
-
-$b=$a;
-
-test (ref $a eq "Oscalar"); # 10
-
-$b++;
-
-test (ref $b eq "Oscalar"); # 11
-test ( $a eq "087"); # 12
-test ( $b eq "88"); # 13
-test (ref $a eq "Oscalar"); # 14
-
-$c=$b;
-$c-=$a;
-
-test (ref $c eq "Oscalar"); # 15
-test ( $a eq "087"); # 16
-test ( $c eq "1"); # 17
-test (ref $a eq "Oscalar"); # 18
-
-$b=1;
-$b+=$a;
-
-test (ref $b eq "Oscalar"); # 19
-test ( $a eq "087"); # 20
-test ( $b eq "88"); # 21
-test (ref $a eq "Oscalar"); # 22
-
-eval q[ package Oscalar; use overload ('++' => sub { $ {$_[0]}++;$_[0] } ) ];
-
-$b=$a;
-
-test (ref $a eq "Oscalar"); # 23
-
-$b++;
-
-test (ref $b eq "Oscalar"); # 24
-test ( $a eq "087"); # 25
-test ( $b eq "88"); # 26
-test (ref $a eq "Oscalar"); # 27
-
-package Oscalar;
-$dummy=bless \$dummy; # Now cache of method should be reloaded
-package main;
-
-$b=$a;
-$b++;
-
-test (ref $b eq "Oscalar"); # 28
-test ( $a eq "087"); # 29
-test ( $b eq "88"); # 30
-test (ref $a eq "Oscalar"); # 31
-
-
-eval q[package Oscalar; use overload ('++' => sub { $ {$_[0]} += 2; $_[0] } ) ];
-
-$b=$a;
-
-test (ref $a eq "Oscalar"); # 32
-
-$b++;
-
-test (ref $b eq "Oscalar"); # 33
-test ( $a eq "087"); # 34
-test ( $b eq "88"); # 35
-test (ref $a eq "Oscalar"); # 36
-
-package Oscalar;
-$dummy=bless \$dummy; # Now cache of method should be reloaded
-package main;
-
-$b++;
-
-test (ref $b eq "Oscalar"); # 37
-test ( $a eq "087"); # 38
-test ( $b eq "90"); # 39
-test (ref $a eq "Oscalar"); # 40
-
-$b=$a;
-$b++;
-
-test (ref $b eq "Oscalar"); # 41
-test ( $a eq "087"); # 42
-test ( $b eq "89"); # 43
-test (ref $a eq "Oscalar"); # 44
-
-
-test ($b? 1:0); # 45
-
-eval q[ package Oscalar; use overload ('=' => sub {$main::copies++;
- package Oscalar;
- local $new=$ {$_[0]};
- bless \$new } ) ];
-
-$b=new Oscalar "$a";
-
-test (ref $b eq "Oscalar"); # 46
-test ( $a eq "087"); # 47
-test ( $b eq "087"); # 48
-test (ref $a eq "Oscalar"); # 49
-
-$b++;
-
-test (ref $b eq "Oscalar"); # 50
-test ( $a eq "087"); # 51
-test ( $b eq "89"); # 52
-test (ref $a eq "Oscalar"); # 53
-test ($copies == 0); # 54
-
-$b+=1;
-
-test (ref $b eq "Oscalar"); # 55
-test ( $a eq "087"); # 56
-test ( $b eq "90"); # 57
-test (ref $a eq "Oscalar"); # 58
-test ($copies == 0); # 59
-
-$b=$a;
-$b+=1;
-
-test (ref $b eq "Oscalar"); # 60
-test ( $a eq "087"); # 61
-test ( $b eq "88"); # 62
-test (ref $a eq "Oscalar"); # 63
-test ($copies == 0); # 64
-
-$b=$a;
-$b++;
-
-test (ref $b eq "Oscalar") || print ref $b,"=ref(b)\n"; # 65
-test ( $a eq "087"); # 66
-test ( $b eq "89"); # 67
-test (ref $a eq "Oscalar"); # 68
-test ($copies == 1); # 69
-
-eval q[package Oscalar; use overload ('+=' => sub {$ {$_[0]} += 3*$_[1];
- $_[0] } ) ];
-$c=new Oscalar; # Cause rehash
-
-$b=$a;
-$b+=1;
-
-test (ref $b eq "Oscalar"); # 70
-test ( $a eq "087"); # 71
-test ( $b eq "90"); # 72
-test (ref $a eq "Oscalar"); # 73
-test ($copies == 2); # 74
-
-$b+=$b;
-
-test (ref $b eq "Oscalar"); # 75
-test ( $b eq "360"); # 76
-test ($copies == 2); # 77
-$b=-$b;
-
-test (ref $b eq "Oscalar"); # 78
-test ( $b eq "-360"); # 79
-test ($copies == 2); # 80
-
-$b=abs($b);
-
-test (ref $b eq "Oscalar"); # 81
-test ( $b eq "360"); # 82
-test ($copies == 2); # 83
-
-$b=abs($b);
-
-test (ref $b eq "Oscalar"); # 84
-test ( $b eq "360"); # 85
-test ($copies == 2); # 86
-
-eval q[package Oscalar;
- use overload ('x' => sub {new Oscalar ( $_[2] ? "_.$_[1]._" x $ {$_[0]}
- : "_.${$_[0]}._" x $_[1])}) ];
-
-$a=new Oscalar "yy";
-$a x= 3;
-test ($a eq "_.yy.__.yy.__.yy._"); # 87
-
-eval q[package Oscalar;
- use overload ('.' => sub {new Oscalar ( $_[2] ?
- "_.$_[1].__.$ {$_[0]}._"
- : "_.$ {$_[0]}.__.$_[1]._")}) ];
-
-$a=new Oscalar "xx";
-
-test ("b${a}c" eq "_._.b.__.xx._.__.c._"); # 88
-
-# Check inheritance of overloading;
-{
- package OscalarI;
- @ISA = 'Oscalar';
-}
-
-$aI = new OscalarI "$a";
-test (ref $aI eq "OscalarI"); # 89
-test ("$aI" eq "xx"); # 90
-test ($aI eq "xx"); # 91
-test ("b${aI}c" eq "_._.b.__.xx._.__.c._"); # 92
-
-# Here we test blessing to a package updates hash
-
-eval "package Oscalar; no overload '.'";
-
-test ("b${a}" eq "_.b.__.xx._"); # 93
-$x="1";
-bless \$x, Oscalar;
-test ("b${a}c" eq "bxxc"); # 94
-new Oscalar 1;
-test ("b${a}c" eq "bxxc"); # 95
-
-# Negative overloading:
-
-$na = eval { ~$a };
-test($@ =~ /no method found/); # 96
-
-# Check AUTOLOADING:
-
-*Oscalar::AUTOLOAD =
- sub { *{"Oscalar::$AUTOLOAD"} = sub {"_!_" . shift() . "_!_"} ;
- goto &{"Oscalar::$AUTOLOAD"}};
-
-eval "package Oscalar; sub comple; use overload '~' => 'comple'";
-
-$na = eval { ~$a }; # Hash was not updated
-test($@ =~ /no method found/); # 97
-
-bless \$x, Oscalar;
-
-$na = eval { ~$a }; # Hash updated
-warn "`$na', $@" if $@;
-test !$@; # 98
-test($na eq '_!_xx_!_'); # 99
-
-$na = 0;
-
-$na = eval { ~$aI }; # Hash was not updated
-test($@ =~ /no method found/); # 100
-
-bless \$x, OscalarI;
-
-$na = eval { ~$aI };
-print $@;
-
-test !$@; # 101
-test($na eq '_!_xx_!_'); # 102
-
-eval "package Oscalar; sub rshft; use overload '>>' => 'rshft'";
-
-$na = eval { $aI >> 1 }; # Hash was not updated
-test($@ =~ /no method found/); # 103
-
-bless \$x, OscalarI;
-
-$na = 0;
-
-$na = eval { $aI >> 1 };
-print $@;
-
-test !$@; # 104
-test($na eq '_!_xx_!_'); # 105
-
-# warn overload::Method($a, '0+'), "\n";
-test (overload::Method($a, '0+') eq \&Oscalar::numify); # 106
-test (overload::Method($aI,'0+') eq \&Oscalar::numify); # 107
-test (overload::Overloaded($aI)); # 108
-test (!overload::Overloaded('overload')); # 109
-
-test (! defined overload::Method($aI, '<<')); # 110
-test (! defined overload::Method($a, '<')); # 111
-
-test (overload::StrVal($aI) =~ /^OscalarI=SCALAR\(0x[\da-fA-F]+\)$/); # 112
-test (overload::StrVal(\$aI) eq "@{[\$aI]}"); # 113
-
-# Check overloading by methods (specified deep in the ISA tree).
-{
- package OscalarII;
- @ISA = 'OscalarI';
- sub Oscalar::lshft {"_<<_" . shift() . "_<<_"}
- eval "package OscalarI; use overload '<<' => 'lshft', '|' => 'lshft'";
-}
-
-$aaII = "087";
-$aII = \$aaII;
-bless $aII, 'OscalarII';
-bless \$fake, 'OscalarI'; # update the hash
-test(($aI | 3) eq '_<<_xx_<<_'); # 114
-# warn $aII << 3;
-test(($aII << 3) eq '_<<_087_<<_'); # 115
-
-{
- BEGIN { $int = 7; overload::constant 'integer' => sub {$int++; shift}; }
- $out = 2**10;
-}
-test($int, 9); # 116
-test($out, 1024); # 117
-
-$foo = 'foo';
-$foo1 = 'f\'o\\o';
-{
- BEGIN { $q = $qr = 7;
- overload::constant 'q' => sub {$q++; push @q, shift, ($_[1] || 'none'); shift},
- 'qr' => sub {$qr++; push @qr, shift, ($_[1] || 'none'); shift}; }
- $out = 'foo';
- $out1 = 'f\'o\\o';
- $out2 = "a\a$foo,\,";
- /b\b$foo.\./;
-}
-
-test($out, 'foo'); # 118
-test($out, $foo); # 119
-test($out1, 'f\'o\\o'); # 120
-test($out1, $foo1); # 121
-test($out2, "a\afoo,\,"); # 122
-test("@q", "foo q f'o\\\\o q a\\a qq ,\\, qq"); # 123
-test($q, 11); # 124
-test("@qr", "b\\b qq .\\. qq"); # 125
-test($qr, 9); # 126
-
-{
- $_ = '!<b>!foo!<-.>!';
- BEGIN { overload::constant 'q' => sub {push @q1, shift, ($_[1] || 'none'); "_<" . (shift) . ">_"},
- 'qr' => sub {push @qr1, shift, ($_[1] || 'none'); "!<" . (shift) . ">!"}; }
- $out = 'foo';
- $out1 = 'f\'o\\o';
- $out2 = "a\a$foo,\,";
- $res = /b\b$foo.\./;
- $a = <<EOF;
-oups
-EOF
- $b = <<'EOF';
-oups1
-EOF
- $c = bareword;
- m'try it';
- s'first part'second part';
- s/yet another/tail here/;
- tr/z-Z/z-Z/;
-}
-
-test($out, '_<foo>_'); # 117
-test($out1, '_<f\'o\\o>_'); # 128
-test($out2, "_<a\a>_foo_<,\,>_"); # 129
-test("@q1", "foo q f'o\\\\o q a\\a qq ,\\, qq oups
- qq oups1
- q second part q tail here s z-Z tr z-Z tr"); # 130
-test("@qr1", "b\\b qq .\\. qq try it q first part q yet another qq"); # 131
-test($res, 1); # 132
-test($a, "_<oups
->_"); # 133
-test($b, "_<oups1
->_"); # 134
-test($c, "bareword"); # 135
-
-{
- package symbolic; # Primitive symbolic calculator
- use overload nomethod => \&wrap, '""' => \&str, '0+' => \&num,
- '=' => \&cpy, '++' => \&inc, '--' => \&dec;
-
- sub new { shift; bless ['n', @_] }
- sub cpy {
- my $self = shift;
- bless [@$self], ref $self;
- }
- sub inc { $_[0] = bless ['++', $_[0], 1]; }
- sub dec { $_[0] = bless ['--', $_[0], 1]; }
- sub wrap {
- my ($obj, $other, $inv, $meth) = @_;
- if ($meth eq '++' or $meth eq '--') {
- @$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference
- return $obj;
- }
- ($obj, $other) = ($other, $obj) if $inv;
- bless [$meth, $obj, $other];
- }
- sub str {
- my ($meth, $a, $b) = @{+shift};
- $a = 'u' unless defined $a;
- if (defined $b) {
- "[$meth $a $b]";
- } else {
- "[$meth $a]";
- }
- }
- my %subr = ( 'n' => sub {$_[0]} );
- foreach my $op (split " ", $overload::ops{with_assign}) {
- $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}";
- }
- my @bins = qw(binary 3way_comparison num_comparison str_comparison);
- foreach my $op (split " ", "@overload::ops{ @bins }") {
- $subr{$op} = eval "sub {shift() $op shift()}";
- }
- foreach my $op (split " ", "@overload::ops{qw(unary func)}") {
- $subr{$op} = eval "sub {$op shift()}";
- }
- $subr{'++'} = $subr{'+'};
- $subr{'--'} = $subr{'-'};
-
- sub num {
- my ($meth, $a, $b) = @{+shift};
- my $subr = $subr{$meth}
- or die "Do not know how to ($meth) in symbolic";
- $a = $a->num if ref $a eq __PACKAGE__;
- $b = $b->num if ref $b eq __PACKAGE__;
- $subr->($a,$b);
- }
- sub TIESCALAR { my $pack = shift; $pack->new(@_) }
- sub FETCH { shift }
- sub nop { } # Around a bug
- sub vars { my $p = shift; tie($_, $p), $_->nop foreach @_; }
- sub STORE {
- my $obj = shift;
- $#$obj = 1;
- @$obj->[0,1] = ('=', shift);
- }
-}
-
-{
- my $foo = new symbolic 11;
- my $baz = $foo++;
- test( (sprintf "%d", $foo), '12');
- test( (sprintf "%d", $baz), '11');
- my $bar = $foo;
- $baz = ++$foo;
- test( (sprintf "%d", $foo), '13');
- test( (sprintf "%d", $bar), '12');
- test( (sprintf "%d", $baz), '13');
- my $ban = $foo;
- $baz = ($foo += 1);
- test( (sprintf "%d", $foo), '14');
- test( (sprintf "%d", $bar), '12');
- test( (sprintf "%d", $baz), '14');
- test( (sprintf "%d", $ban), '13');
- $baz = 0;
- $baz = $foo++;
- test( (sprintf "%d", $foo), '15');
- test( (sprintf "%d", $baz), '14');
- test( "$foo", '[++ [+= [++ [++ [n 11] 1] 1] 1] 1]');
-}
-
-{
- my $iter = new symbolic 2;
- my $side = new symbolic 1;
- my $cnt = $iter;
-
- while ($cnt) {
- $cnt = $cnt - 1; # The "simple" way
- $side = (sqrt(1 + $side**2) - 1)/$side;
- }
- my $pi = $side*(2**($iter+2));
- test "$side", '[/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]] 2]]] 1] [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]';
- test( (sprintf "%f", $pi), '3.182598');
-}
-
-{
- my $iter = new symbolic 2;
- my $side = new symbolic 1;
- my $cnt = $iter;
-
- while ($cnt--) {
- $side = (sqrt(1 + $side**2) - 1)/$side;
- }
- my $pi = $side*(2**($iter+2));
- test "$side", '[/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]] 2]]] 1] [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]';
- test( (sprintf "%f", $pi), '3.182598');
-}
-
-{
- my ($a, $b);
- symbolic->vars($a, $b);
- my $c = sqrt($a**2 + $b**2);
- $a = 3; $b = 4;
- test( (sprintf "%d", $c), '5');
- $a = 12; $b = 5;
- test( (sprintf "%d", $c), '13');
-}
-
-{
- package symbolic1; # Primitive symbolic calculator
- # Mutator inc/dec
- use overload nomethod => \&wrap, '""' => \&str, '0+' => \&num, '=' => \&cpy;
-
- sub new { shift; bless ['n', @_] }
- sub cpy {
- my $self = shift;
- bless [@$self], ref $self;
- }
- sub wrap {
- my ($obj, $other, $inv, $meth) = @_;
- if ($meth eq '++' or $meth eq '--') {
- @$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference
- return $obj;
- }
- ($obj, $other) = ($other, $obj) if $inv;
- bless [$meth, $obj, $other];
- }
- sub str {
- my ($meth, $a, $b) = @{+shift};
- $a = 'u' unless defined $a;
- if (defined $b) {
- "[$meth $a $b]";
- } else {
- "[$meth $a]";
- }
- }
- my %subr = ( 'n' => sub {$_[0]} );
- foreach my $op (split " ", $overload::ops{with_assign}) {
- $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}";
- }
- my @bins = qw(binary 3way_comparison num_comparison str_comparison);
- foreach my $op (split " ", "@overload::ops{ @bins }") {
- $subr{$op} = eval "sub {shift() $op shift()}";
- }
- foreach my $op (split " ", "@overload::ops{qw(unary func)}") {
- $subr{$op} = eval "sub {$op shift()}";
- }
- $subr{'++'} = $subr{'+'};
- $subr{'--'} = $subr{'-'};
-
- sub num {
- my ($meth, $a, $b) = @{+shift};
- my $subr = $subr{$meth}
- or die "Do not know how to ($meth) in symbolic";
- $a = $a->num if ref $a eq __PACKAGE__;
- $b = $b->num if ref $b eq __PACKAGE__;
- $subr->($a,$b);
- }
- sub TIESCALAR { my $pack = shift; $pack->new(@_) }
- sub FETCH { shift }
- sub nop { } # Around a bug
- sub vars { my $p = shift; tie($_, $p), $_->nop foreach @_; }
- sub STORE {
- my $obj = shift;
- $#$obj = 1;
- @$obj->[0,1] = ('=', shift);
- }
-}
-
-{
- my $foo = new symbolic1 11;
- my $baz = $foo++;
- test( (sprintf "%d", $foo), '12');
- test( (sprintf "%d", $baz), '11');
- my $bar = $foo;
- $baz = ++$foo;
- test( (sprintf "%d", $foo), '13');
- test( (sprintf "%d", $bar), '12');
- test( (sprintf "%d", $baz), '13');
- my $ban = $foo;
- $baz = ($foo += 1);
- test( (sprintf "%d", $foo), '14');
- test( (sprintf "%d", $bar), '12');
- test( (sprintf "%d", $baz), '14');
- test( (sprintf "%d", $ban), '13');
- $baz = 0;
- $baz = $foo++;
- test( (sprintf "%d", $foo), '15');
- test( (sprintf "%d", $baz), '14');
- test( "$foo", '[++ [+= [++ [++ [n 11] 1] 1] 1] 1]');
-}
-
-{
- my $iter = new symbolic1 2;
- my $side = new symbolic1 1;
- my $cnt = $iter;
-
- while ($cnt) {
- $cnt = $cnt - 1; # The "simple" way
- $side = (sqrt(1 + $side**2) - 1)/$side;
- }
- my $pi = $side*(2**($iter+2));
- test "$side", '[/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]] 2]]] 1] [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]';
- test( (sprintf "%f", $pi), '3.182598');
-}
-
-{
- my $iter = new symbolic1 2;
- my $side = new symbolic1 1;
- my $cnt = $iter;
-
- while ($cnt--) {
- $side = (sqrt(1 + $side**2) - 1)/$side;
- }
- my $pi = $side*(2**($iter+2));
- test "$side", '[/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]] 2]]] 1] [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]';
- test( (sprintf "%f", $pi), '3.182598');
-}
-
-{
- my ($a, $b);
- symbolic1->vars($a, $b);
- my $c = sqrt($a**2 + $b**2);
- $a = 3; $b = 4;
- test( (sprintf "%d", $c), '5');
- $a = 12; $b = 5;
- test( (sprintf "%d", $c), '13');
-}
-
-{
- package two_face; # Scalars with separate string and
- # numeric values.
- sub new { my $p = shift; bless [@_], $p }
- use overload '""' => \&str, '0+' => \&num, fallback => 1;
- sub num {shift->[1]}
- sub str {shift->[0]}
-}
-
-{
- my $seven = new two_face ("vii", 7);
- test( (sprintf "seven=$seven, seven=%d, eight=%d", $seven, $seven+1),
- 'seven=vii, seven=7, eight=8');
- test( scalar ($seven =~ /i/), '1')
-}
-
-{
- package sorting;
- use overload 'cmp' => \&comp;
- sub new { my ($p, $v) = @_; bless \$v, $p }
- sub comp { my ($x,$y) = @_; ($$x * 3 % 10) <=> ($$y * 3 % 10) or $$x cmp $$y }
-}
-{
- my @arr = map sorting->new($_), 0..12;
- my @sorted1 = sort @arr;
- my @sorted2 = map $$_, @sorted1;
- test "@sorted2", '0 10 7 4 1 11 8 5 12 2 9 6 3';
-}
-{
- package iterator;
- use overload '<>' => \&iter;
- sub new { my ($p, $v) = @_; bless \$v, $p }
- sub iter { my ($x) = @_; return undef if $$x < 0; return $$x--; }
-}
-
-# XXX iterator overload not intended to work with CORE::GLOBAL?
-if (defined &CORE::GLOBAL::glob) {
- test '1', '1'; # 175
- test '1', '1'; # 176
- test '1', '1'; # 177
-}
-else {
- my $iter = iterator->new(5);
- my $acc = '';
- my $out;
- $acc .= " $out" while $out = <${iter}>;
- test $acc, ' 5 4 3 2 1 0'; # 175
- $iter = iterator->new(5);
- test scalar <${iter}>, '5'; # 176
- $acc = '';
- $acc .= " $out" while $out = <$iter>;
- test $acc, ' 4 3 2 1 0'; # 177
-}
-{
- package deref;
- use overload '%{}' => \&hderef, '&{}' => \&cderef,
- '*{}' => \&gderef, '${}' => \&sderef, '@{}' => \&aderef;
- sub new { my ($p, $v) = @_; bless \$v, $p }
- sub deref {
- my ($self, $key) = (shift, shift);
- my $class = ref $self;
- bless $self, 'deref::dummy'; # Disable overloading of %{}
- my $out = $self->{$key};
- bless $self, $class; # Restore overloading
- $out;
- }
- sub hderef {shift->deref('h')}
- sub aderef {shift->deref('a')}
- sub cderef {shift->deref('c')}
- sub gderef {shift->deref('g')}
- sub sderef {shift->deref('s')}
-}
-{
- my $deref = bless { h => { foo => 5 , fake => 23 },
- c => sub {return shift() + 34},
- 's' => \123,
- a => [11..13],
- g => \*srt,
- }, 'deref';
- # Hash:
- my @cont = sort %$deref;
- if ("\t" eq "\011") { # ascii
- test "@cont", '23 5 fake foo'; # 178
- }
- else { # ebcdic alpha-numeric sort order
- test "@cont", 'fake foo 23 5'; # 178
- }
- my @keys = sort keys %$deref;
- test "@keys", 'fake foo'; # 179
- my @val = sort values %$deref;
- test "@val", '23 5'; # 180
- test $deref->{foo}, 5; # 181
- test defined $deref->{bar}, ''; # 182
- my $key;
- @keys = ();
- push @keys, $key while $key = each %$deref;
- @keys = sort @keys;
- test "@keys", 'fake foo'; # 183
- test exists $deref->{bar}, ''; # 184
- test exists $deref->{foo}, 1; # 185
- # Code:
- test $deref->(5), 39; # 186
- test &$deref(6), 40; # 187
- sub xxx_goto { goto &$deref }
- test xxx_goto(7), 41; # 188
- my $srt = bless { c => sub {$b <=> $a}
- }, 'deref';
- *srt = \&$srt;
- my @sorted = sort srt 11, 2, 5, 1, 22;
- test "@sorted", '22 11 5 2 1'; # 189
- # Scalar
- test $$deref, 123; # 190
- # Code
- @sorted = sort $srt 11, 2, 5, 1, 22;
- test "@sorted", '22 11 5 2 1'; # 191
- # Array
- test "@$deref", '11 12 13'; # 192
- test $#$deref, '2'; # 193
- my $l = @$deref;
- test $l, 3; # 194
- test $deref->[2], '13'; # 195
- $l = pop @$deref;
- test $l, 13; # 196
- $l = 1;
- test $deref->[$l], '12'; # 197
- # Repeated dereference
- my $double = bless { h => $deref,
- }, 'deref';
- test $double->{foo}, 5; # 198
-}
-
-{
- package two_refs;
- use overload '%{}' => \&gethash, '@{}' => sub { ${shift()} };
- sub new {
- my $p = shift;
- bless \ [@_], $p;
- }
- sub gethash {
- my %h;
- my $self = shift;
- tie %h, ref $self, $self;
- \%h;
- }
-
- sub TIEHASH { my $p = shift; bless \ shift, $p }
- my %fields;
- my $i = 0;
- $fields{$_} = $i++ foreach qw{zero one two three};
- sub STORE {
- my $self = ${shift()};
- my $key = $fields{shift()};
- defined $key or die "Out of band access";
- $$self->[$key] = shift;
- }
- sub FETCH {
- my $self = ${shift()};
- my $key = $fields{shift()};
- defined $key or die "Out of band access";
- $$self->[$key];
- }
-}
-
-my $bar = new two_refs 3,4,5,6;
-$bar->[2] = 11;
-test $bar->{two}, 11; # 199
-$bar->{three} = 13;
-test $bar->[3], 13; # 200
-
-{
- package two_refs_o;
- @ISA = ('two_refs');
-}
-
-$bar = new two_refs_o 3,4,5,6;
-$bar->[2] = 11;
-test $bar->{two}, 11; # 201
-$bar->{three} = 13;
-test $bar->[3], 13; # 202
-
-{
- package two_refs1;
- use overload '%{}' => sub { ${shift()}->[1] },
- '@{}' => sub { ${shift()}->[0] };
- sub new {
- my $p = shift;
- my $a = [@_];
- my %h;
- tie %h, $p, $a;
- bless \ [$a, \%h], $p;
- }
- sub gethash {
- my %h;
- my $self = shift;
- tie %h, ref $self, $self;
- \%h;
- }
-
- sub TIEHASH { my $p = shift; bless \ shift, $p }
- my %fields;
- my $i = 0;
- $fields{$_} = $i++ foreach qw{zero one two three};
- sub STORE {
- my $a = ${shift()};
- my $key = $fields{shift()};
- defined $key or die "Out of band access";
- $a->[$key] = shift;
- }
- sub FETCH {
- my $a = ${shift()};
- my $key = $fields{shift()};
- defined $key or die "Out of band access";
- $a->[$key];
- }
-}
-
-$bar = new two_refs_o 3,4,5,6;
-$bar->[2] = 11;
-test $bar->{two}, 11; # 203
-$bar->{three} = 13;
-test $bar->[3], 13; # 204
-
-{
- package two_refs1_o;
- @ISA = ('two_refs1');
-}
-
-$bar = new two_refs1_o 3,4,5,6;
-$bar->[2] = 11;
-test $bar->{two}, 11; # 205
-$bar->{three} = 13;
-test $bar->[3], 13; # 206
-
-{
- package B;
- use overload bool => sub { ${+shift} };
-}
-
-my $aaa;
-{ my $bbbb = 0; $aaa = bless \$bbbb, B }
-
-test !$aaa, 1; # 207
-
-unless ($aaa) {
- test 'ok', 'ok'; # 208
-} else {
- test 'is not', 'ok'; # 208
-}
-
-# check that overload isn't done twice by join
-{ my $c = 0;
- package Join;
- use overload '""' => sub { $c++ };
- my $x = join '', bless([]), 'pq', bless([]);
- main::test $x, '0pq1'; # 209
-};
-
-# Test module-specific warning
-{
- # check the Odd number of arguments for overload::constant warning
- my $a = "" ;
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
- $x = eval ' overload::constant "integer" ; ' ;
- test($a eq "") ; # 210
- use warnings 'overload' ;
- $x = eval ' overload::constant "integer" ; ' ;
- test($a =~ /^Odd number of arguments for overload::constant at/) ; # 211
-}
-
-{
- # check the `$_[0]' is not an overloadable type warning
- my $a = "" ;
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
- $x = eval ' overload::constant "fred" => sub {} ; ' ;
- test($a eq "") ; # 212
- use warnings 'overload' ;
- $x = eval ' overload::constant "fred" => sub {} ; ' ;
- test($a =~ /^`fred' is not an overloadable type at/); # 213
-}
-
-{
- # check the `$_[1]' is not a code reference warning
- my $a = "" ;
- local $SIG{__WARN__} = sub {$a = $_[0]} ;
- $x = eval ' overload::constant "integer" => 1; ' ;
- test($a eq "") ; # 214
- use warnings 'overload' ;
- $x = eval ' overload::constant "integer" => 1; ' ;
- test($a =~ /^`1' is not a code reference at/); # 215
-}
-
-# make sure that we don't inifinitely recurse
-{
- my $c = 0;
- package Recurse;
- use overload '""' => sub { shift },
- '0+' => sub { shift },
- 'bool' => sub { shift },
- fallback => 1;
- my $x = bless([]);
- main::test("$x" =~ /Recurse=ARRAY/); # 216
- main::test($x); # 217
- main::test($x+0 =~ /Recurse=ARRAY/); # 218
-};
-
-# Last test is:
-sub last {218}
diff --git a/contrib/perl5/t/pragma/strict-refs b/contrib/perl5/t/pragma/strict-refs
deleted file mode 100644
index 10599b0..0000000
--- a/contrib/perl5/t/pragma/strict-refs
+++ /dev/null
@@ -1,297 +0,0 @@
-Check strict refs functionality
-
-__END__
-
-# no strict, should build & run ok.
-my $fred ;
-$b = "fred" ;
-$a = $$b ;
-$c = ${"def"} ;
-$c = @{"def"} ;
-$c = %{"def"} ;
-$c = *{"def"} ;
-$c = \&{"def"} ;
-$c = def->[0];
-$c = def->{xyz};
-EXPECT
-
-########
-
-# strict refs - error
-use strict ;
-my $fred ;
-my $a = ${"fred"} ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 5.
-########
-
-# strict refs - error
-use strict 'refs' ;
-my $fred ;
-my $a = ${"fred"} ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 5.
-########
-
-# strict refs - error
-use strict 'refs' ;
-my $fred ;
-my $b = "fred" ;
-my $a = $$b ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 6.
-########
-
-# strict refs - error
-use strict 'refs' ;
-my $b ;
-my $a = $$b ;
-EXPECT
-Can't use an undefined value as a SCALAR reference at - line 5.
-########
-
-# strict refs - error
-use strict 'refs' ;
-my $b ;
-my $a = @$b ;
-EXPECT
-Can't use an undefined value as an ARRAY reference at - line 5.
-########
-
-# strict refs - error
-use strict 'refs' ;
-my $b ;
-my $a = %$b ;
-EXPECT
-Can't use an undefined value as a HASH reference at - line 5.
-########
-
-# strict refs - error
-use strict 'refs' ;
-my $b ;
-my $a = *$b ;
-EXPECT
-Can't use an undefined value as a symbol reference at - line 5.
-########
-
-# strict refs - error
-use strict 'refs' ;
-my $a = fred->[0] ;
-EXPECT
-Can't use bareword ("fred") as an ARRAY ref while "strict refs" in use at - line 4.
-########
-
-# strict refs - error
-use strict 'refs' ;
-my $a = fred->{barney} ;
-EXPECT
-Can't use bareword ("fred") as a HASH ref while "strict refs" in use at - line 4.
-########
-
-# strict refs - no error
-use strict ;
-no strict 'refs' ;
-my $fred ;
-my $b = "fred" ;
-my $a = $$b ;
-use strict 'refs' ;
-EXPECT
-
-########
-
-# strict refs - no error
-use strict qw(subs vars) ;
-my $fred ;
-my $b = "fred" ;
-my $a = $$b ;
-use strict 'refs' ;
-EXPECT
-
-########
-
-# strict refs - no error
-my $fred ;
-my $b = "fred" ;
-my $a = $$b ;
-use strict 'refs' ;
-EXPECT
-
-########
-
-# strict refs - no error
-use strict 'refs' ;
-my $fred ;
-my $b = \$fred ;
-my $a = $$b ;
-EXPECT
-
-########
-
-# Check runtime scope of strict refs pragma
-use strict 'refs';
-my $fred ;
-my $b = "fred" ;
-{
- no strict ;
- my $a = $$b ;
-}
-my $a = $$b ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 10.
-########
-
-# Check runtime scope of strict refs pragma
-no strict ;
-my $fred ;
-my $b = "fred" ;
-{
- use strict 'refs' ;
- my $a = $$b ;
-}
-my $a = $$b ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 8.
-########
-
-# Check runtime scope of strict refs pragma
-no strict ;
-my $fred ;
-my $b = "fred" ;
-{
- use strict 'refs' ;
- $a = sub { my $c = $$b ; }
-}
-&$a ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 8.
-########
-
-
---FILE-- abc
-my $a = ${"Fred"} ;
-1;
---FILE--
-use strict 'refs' ;
-require "./abc";
-EXPECT
-
-########
-
---FILE-- abc
-use strict 'refs' ;
-1;
---FILE--
-require "./abc";
-my $a = ${"Fred"} ;
-EXPECT
-
-########
-
---FILE-- abc
-use strict 'refs' ;
-my $a = ${"Fred"} ;
-1;
---FILE--
-${"Fred"} ;
-require "./abc";
-EXPECT
-Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at ./abc line 2.
-Compilation failed in require at - line 2.
-########
-
---FILE-- abc.pm
-use strict 'refs' ;
-my $a = ${"Fred"} ;
-1;
---FILE--
-my $a = ${"Fred"} ;
-use abc;
-EXPECT
-Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at abc.pm line 2.
-Compilation failed in require at - line 2.
-BEGIN failed--compilation aborted at - line 2.
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval {
- my $a = ${"Fred"} ;
-};
-print STDERR $@ ;
-my $a = ${"Fred"} ;
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval {
- use strict 'refs' ;
- my $a = ${"Fred"} ;
-};
-print STDERR $@ ;
-my $a = ${"Fred"} ;
-EXPECT
-Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 6.
-########
-
-# Check scope of pragma with eval
-use strict 'refs' ;
-eval {
- my $a = ${"Fred"} ;
-};
-print STDERR $@ ;
-EXPECT
-Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 5.
-########
-
-# Check scope of pragma with eval
-use strict 'refs' ;
-eval {
- no strict ;
- my $a = ${"Fred"} ;
-};
-print STDERR $@ ;
-my $a = ${"Fred"} ;
-EXPECT
-Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 9.
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval '
- my $a = ${"Fred"} ;
-'; print STDERR $@ ;
-my $a = ${"Fred"} ;
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval q[
- use strict 'refs' ;
- my $a = ${"Fred"} ;
-]; print STDERR $@;
-EXPECT
-Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at (eval 1) line 3.
-########
-
-# Check scope of pragma with eval
-use strict 'refs' ;
-eval '
- my $a = ${"Fred"} ;
-'; print STDERR $@ ;
-EXPECT
-Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at (eval 1) line 2.
-########
-
-# Check scope of pragma with eval
-use strict 'refs' ;
-eval '
- no strict ;
- my $a = ${"Fred"} ;
-'; print STDERR $@;
-my $a = ${"Fred"} ;
-EXPECT
-Can't use string ("Fred") as a SCALAR ref while "strict refs" in use at - line 8.
diff --git a/contrib/perl5/t/pragma/strict-subs b/contrib/perl5/t/pragma/strict-subs
deleted file mode 100644
index ed4fe7a..0000000
--- a/contrib/perl5/t/pragma/strict-subs
+++ /dev/null
@@ -1,319 +0,0 @@
-Check strict subs functionality
-
-__END__
-
-# no strict, should build & run ok.
-Fred ;
-my $fred ;
-$b = "fred" ;
-$a = $$b ;
-EXPECT
-
-########
-
-use strict qw(refs vars);
-Fred ;
-EXPECT
-
-########
-
-use strict ;
-no strict 'subs' ;
-Fred ;
-EXPECT
-
-########
-
-# strict subs - error
-use strict 'subs' ;
-Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 4.
-Execution of - aborted due to compilation errors.
-########
-
-# strict subs - error
-use strict 'subs' ;
-my @a = (A..Z);
-EXPECT
-Bareword "Z" not allowed while "strict subs" in use at - line 4.
-Bareword "A" not allowed while "strict subs" in use at - line 4.
-Execution of - aborted due to compilation errors.
-########
-
-# strict subs - error
-use strict 'subs' ;
-my $a = (B..Y);
-EXPECT
-Bareword "Y" not allowed while "strict subs" in use at - line 4.
-Bareword "B" not allowed while "strict subs" in use at - line 4.
-Execution of - aborted due to compilation errors.
-########
-
-# strict subs - error
-use strict ;
-Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 4.
-Execution of - aborted due to compilation errors.
-########
-
-# strict subs - no error
-use strict 'subs' ;
-sub Fred {}
-Fred ;
-EXPECT
-
-########
-
-# Check compile time scope of strict subs pragma
-use strict 'subs' ;
-{
- no strict ;
- my $a = Fred ;
-}
-my $a = Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 8.
-Execution of - aborted due to compilation errors.
-########
-
-# Check compile time scope of strict subs pragma
-no strict;
-{
- use strict 'subs' ;
- my $a = Fred ;
-}
-my $a = Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 6.
-Execution of - aborted due to compilation errors.
-########
-
-# Check compile time scope of strict vars pragma
-use strict 'vars' ;
-{
- no strict ;
- $joe = 1 ;
-}
-$joe = 1 ;
-EXPECT
-Variable "$joe" is not imported at - line 8.
-Global symbol "$joe" requires explicit package name at - line 8.
-Execution of - aborted due to compilation errors.
-########
-
-# Check compile time scope of strict vars pragma
-no strict;
-{
- use strict 'vars' ;
- $joe = 1 ;
-}
-$joe = 1 ;
-EXPECT
-Global symbol "$joe" requires explicit package name at - line 6.
-Execution of - aborted due to compilation errors.
-########
-
-# Check runtime scope of strict refs pragma
-use strict 'refs';
-my $fred ;
-my $b = "fred" ;
-{
- no strict ;
- my $a = $$b ;
-}
-my $a = $$b ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 10.
-########
-
-# Check runtime scope of strict refs pragma
-no strict ;
-my $fred ;
-my $b = "fred" ;
-{
- use strict 'refs' ;
- my $a = $$b ;
-}
-my $a = $$b ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 8.
-########
-
-# Check runtime scope of strict refs pragma
-no strict ;
-my $fred ;
-my $b = "fred" ;
-{
- use strict 'refs' ;
- $a = sub { my $c = $$b ; }
-}
-&$a ;
-EXPECT
-Can't use string ("fred") as a SCALAR ref while "strict refs" in use at - line 8.
-########
-
-use strict 'subs' ;
-my $a = Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 3.
-Execution of - aborted due to compilation errors.
-########
-
---FILE-- abc
-my $a = Fred ;
-1;
---FILE--
-use strict 'subs' ;
-require "./abc";
-EXPECT
-
-########
-
---FILE-- abc
-use strict 'subs' ;
-1;
---FILE--
-require "./abc";
-my $a = Fred ;
-EXPECT
-
-########
-
---FILE-- abc
-use strict 'subs' ;
-my $a = Fred ;
-1;
---FILE--
-Fred ;
-require "./abc";
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at ./abc line 2.
-Compilation failed in require at - line 2.
-########
-
---FILE-- abc.pm
-use strict 'subs' ;
-my $a = Fred ;
-1;
---FILE--
-Fred ;
-use abc;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at abc.pm line 2.
-Compilation failed in require at - line 2.
-BEGIN failed--compilation aborted at - line 2.
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval {
- my $a = Fred ;
-};
-print STDERR $@;
-my $a = Fred ;
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval {
- use strict 'subs' ;
- my $a = Fred ;
-};
-print STDERR $@;
-my $a = Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 6.
-Execution of - aborted due to compilation errors.
-########
-
-# Check scope of pragma with eval
-use strict 'subs' ;
-eval {
- my $a = Fred ;
-};
-print STDERR $@;
-my $a = Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 5.
-Bareword "Fred" not allowed while "strict subs" in use at - line 8.
-Execution of - aborted due to compilation errors.
-########
-
-# Check scope of pragma with eval
-use strict 'subs' ;
-eval {
- no strict ;
- my $a = Fred ;
-};
-print STDERR $@;
-my $a = Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 9.
-Execution of - aborted due to compilation errors.
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval '
- Fred ;
-'; print STDERR $@ ;
-Fred ;
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval q[
- use strict 'subs' ;
- Fred ;
-]; print STDERR $@;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at (eval 1) line 3.
-########
-
-# Check scope of pragma with eval
-use strict 'subs' ;
-eval '
- Fred ;
-'; print STDERR $@ ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at (eval 1) line 2.
-########
-
-# Check scope of pragma with eval
-use strict 'subs' ;
-eval '
- no strict ;
- my $a = Fred ;
-'; print STDERR $@;
-my $a = Fred ;
-EXPECT
-Bareword "Fred" not allowed while "strict subs" in use at - line 8.
-Execution of - aborted due to compilation errors.
-########
-
-# see if Foo->Bar(...) etc work under strictures
-use strict;
-package Foo; sub Bar { print "@_\n" }
-Foo->Bar('a',1);
-Bar Foo ('b',2);
-Foo->Bar(qw/c 3/);
-Bar Foo (qw/d 4/);
-Foo::->Bar('A',1);
-Bar Foo:: ('B',2);
-Foo::->Bar(qw/C 3/);
-Bar Foo:: (qw/D 4/);
-EXPECT
-Foo a 1
-Foo b 2
-Foo c 3
-Foo d 4
-Foo A 1
-Foo B 2
-Foo C 3
-Foo D 4
diff --git a/contrib/perl5/t/pragma/strict-vars b/contrib/perl5/t/pragma/strict-vars
deleted file mode 100644
index 40b5557..0000000
--- a/contrib/perl5/t/pragma/strict-vars
+++ /dev/null
@@ -1,410 +0,0 @@
-Check strict vars functionality
-
-__END__
-
-# no strict, should build & run ok.
-Fred ;
-my $fred ;
-$b = "fred" ;
-$a = $$b ;
-EXPECT
-
-########
-
-use strict qw(subs refs) ;
-$fred ;
-EXPECT
-
-########
-
-use strict ;
-no strict 'vars' ;
-$fred ;
-EXPECT
-
-########
-
-# strict vars - no error
-use strict 'vars' ;
-use vars qw( $freddy) ;
-BEGIN { *freddy = \$joe::shmoe; }
-$freddy = 2 ;
-EXPECT
-
-########
-
-# strict vars - no error
-use strict 'vars' ;
-use vars qw( $freddy) ;
-local $abc::joe ;
-my $fred ;
-my $b = \$fred ;
-$Fred::ABC = 1 ;
-$freddy = 2 ;
-EXPECT
-
-########
-
-# strict vars - error
-use strict ;
-$fred ;
-EXPECT
-Global symbol "$fred" requires explicit package name at - line 4.
-Execution of - aborted due to compilation errors.
-########
-
-# strict vars - error
-use strict 'vars' ;
-<$fred> ;
-EXPECT
-Global symbol "$fred" requires explicit package name at - line 4.
-Execution of - aborted due to compilation errors.
-########
-
-# strict vars - error
-use strict 'vars' ;
-local $fred ;
-EXPECT
-Global symbol "$fred" requires explicit package name at - line 4.
-Execution of - aborted due to compilation errors.
-########
-
-# Check compile time scope of strict vars pragma
-use strict 'vars' ;
-{
- no strict ;
- $joe = 1 ;
-}
-$joe = 1 ;
-EXPECT
-Variable "$joe" is not imported at - line 8.
-Global symbol "$joe" requires explicit package name at - line 8.
-Execution of - aborted due to compilation errors.
-########
-
-# Check compile time scope of strict vars pragma
-no strict;
-{
- use strict 'vars' ;
- $joe = 1 ;
-}
-$joe = 1 ;
-EXPECT
-Global symbol "$joe" requires explicit package name at - line 6.
-Execution of - aborted due to compilation errors.
-########
-
---FILE-- abc
-$joe = 1 ;
-1;
---FILE--
-use strict 'vars' ;
-require "./abc";
-EXPECT
-
-########
-
---FILE-- abc
-use strict 'vars' ;
-1;
---FILE--
-require "./abc";
-$joe = 1 ;
-EXPECT
-
-########
-
---FILE-- abc
-use strict 'vars' ;
-$joe = 1 ;
-1;
---FILE--
-$joe = 1 ;
-require "./abc";
-EXPECT
-Variable "$joe" is not imported at ./abc line 2.
-Global symbol "$joe" requires explicit package name at ./abc line 2.
-Compilation failed in require at - line 2.
-########
-
---FILE-- abc.pm
-use strict 'vars' ;
-$joe = 1 ;
-1;
---FILE--
-$joe = 1 ;
-use abc;
-EXPECT
-Variable "$joe" is not imported at abc.pm line 2.
-Global symbol "$joe" requires explicit package name at abc.pm line 2.
-Compilation failed in require at - line 2.
-BEGIN failed--compilation aborted at - line 2.
-########
-
---FILE-- abc.pm
-package Burp;
-use strict;
-$a = 1;$f = 1;$k = 1; # just to get beyond the limit...
-$b = 1;$g = 1;$l = 1;
-$c = 1;$h = 1;$m = 1;
-$d = 1;$i = 1;$n = 1;
-$e = 1;$j = 1;$o = 1;
-$p = 0b12;
---FILE--
-use abc;
-EXPECT
-Global symbol "$f" requires explicit package name at abc.pm line 3.
-Global symbol "$k" requires explicit package name at abc.pm line 3.
-Global symbol "$g" requires explicit package name at abc.pm line 4.
-Global symbol "$l" requires explicit package name at abc.pm line 4.
-Global symbol "$c" requires explicit package name at abc.pm line 5.
-Global symbol "$h" requires explicit package name at abc.pm line 5.
-Global symbol "$m" requires explicit package name at abc.pm line 5.
-Global symbol "$d" requires explicit package name at abc.pm line 6.
-Global symbol "$i" requires explicit package name at abc.pm line 6.
-Global symbol "$n" requires explicit package name at abc.pm line 6.
-Global symbol "$e" requires explicit package name at abc.pm line 7.
-Global symbol "$j" requires explicit package name at abc.pm line 7.
-Global symbol "$o" requires explicit package name at abc.pm line 7.
-Global symbol "$p" requires explicit package name at abc.pm line 8.
-Illegal binary digit '2' at abc.pm line 8, at end of line
-abc.pm has too many errors.
-Compilation failed in require at - line 1.
-BEGIN failed--compilation aborted at - line 1.
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval {
- $joe = 1 ;
-};
-print STDERR $@;
-$joe = 1 ;
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval {
- use strict 'vars' ;
- $joe = 1 ;
-};
-print STDERR $@;
-$joe = 1 ;
-EXPECT
-Global symbol "$joe" requires explicit package name at - line 6.
-Execution of - aborted due to compilation errors.
-########
-
-# Check scope of pragma with eval
-use strict 'vars' ;
-eval {
- $joe = 1 ;
-};
-print STDERR $@;
-$joe = 1 ;
-EXPECT
-Global symbol "$joe" requires explicit package name at - line 5.
-Global symbol "$joe" requires explicit package name at - line 8.
-Execution of - aborted due to compilation errors.
-########
-
-# Check scope of pragma with eval
-use strict 'vars' ;
-eval {
- no strict ;
- $joe = 1 ;
-};
-print STDERR $@;
-$joe = 1 ;
-EXPECT
-Variable "$joe" is not imported at - line 9.
-Global symbol "$joe" requires explicit package name at - line 9.
-Execution of - aborted due to compilation errors.
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval '
- $joe = 1 ;
-'; print STDERR $@ ;
-$joe = 1 ;
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-no strict ;
-eval q[
- use strict 'vars' ;
- $joe = 1 ;
-]; print STDERR $@;
-EXPECT
-Global symbol "$joe" requires explicit package name at (eval 1) line 3.
-########
-
-# Check scope of pragma with eval
-use strict 'vars' ;
-eval '
- $joe = 1 ;
-'; print STDERR $@ ;
-EXPECT
-Global symbol "$joe" requires explicit package name at (eval 1) line 2.
-########
-
-# Check scope of pragma with eval
-use strict 'vars' ;
-eval '
- no strict ;
- $joe = 1 ;
-'; print STDERR $@;
-$joe = 1 ;
-EXPECT
-Global symbol "$joe" requires explicit package name at - line 8.
-Execution of - aborted due to compilation errors.
-########
-
-# Check if multiple evals produce same errors
-use strict 'vars';
-my $ret = eval q{ print $x; };
-print $@;
-print "ok 1\n" unless defined $ret;
-$ret = eval q{ print $x; };
-print $@;
-print "ok 2\n" unless defined $ret;
-EXPECT
-Global symbol "$x" requires explicit package name at (eval 1) line 1.
-ok 1
-Global symbol "$x" requires explicit package name at (eval 2) line 1.
-ok 2
-########
-
-# strict vars with outer our - no error
-use strict 'vars' ;
-our $freddy;
-local $abc::joe ;
-my $fred ;
-my $b = \$fred ;
-$Fred::ABC = 1 ;
-$freddy = 2 ;
-EXPECT
-
-########
-
-# strict vars with inner our - no error
-use strict 'vars' ;
-sub foo {
- our $fred;
- $fred;
-}
-EXPECT
-
-########
-
-# strict vars with outer our, inner use - no error
-use strict 'vars' ;
-our $fred;
-sub foo {
- $fred;
-}
-EXPECT
-
-########
-
-# strict vars with nested our - no error
-use strict 'vars' ;
-our $fred;
-sub foo {
- our $fred;
- $fred;
-}
-$fred ;
-EXPECT
-
-########
-
-# strict vars with elapsed our - error
-use strict 'vars' ;
-sub foo {
- our $fred;
- $fred;
-}
-$fred ;
-EXPECT
-Variable "$fred" is not imported at - line 8.
-Global symbol "$fred" requires explicit package name at - line 8.
-Execution of - aborted due to compilation errors.
-########
-
-# nested our with local - no error
-$fred = 1;
-use strict 'vars';
-{
- local our $fred = 2;
- print $fred,"\n";
-}
-print our $fred,"\n";
-EXPECT
-2
-1
-########
-
-# "nailed" our declaration visibility across package boundaries
-use strict 'vars';
-our $foo;
-$foo = 20;
-package Foo;
-print $foo, "\n";
-EXPECT
-20
-########
-
-# multiple our declarations in same scope, different packages, no warning
-use strict 'vars';
-use warnings;
-our $foo;
-${foo} = 10;
-package Foo;
-our $foo = 20;
-print $foo, "\n";
-EXPECT
-20
-########
-
-# multiple our declarations in same scope, same package, warning
-use strict 'vars';
-use warnings;
-our $foo;
-${foo} = 10;
-our $foo;
-EXPECT
-"our" variable $foo masks earlier declaration in same scope at - line 7.
-########
-
-# multiple our declarations in same scope, same package, warning
-use strict 'vars';
-use warnings;
-{ our $x = 1 }
-{ our $x = 0 }
-our $foo;
-{
- our $foo;
- package Foo;
- our $foo;
-}
-EXPECT
-"our" variable $foo redeclared at - line 9.
- (Did you mean "local" instead of "our"?)
-Name "Foo::foo" used only once: possible typo at - line 11.
-########
-
-# Make sure the strict vars failure still occurs
-# now that the `@i should be written as \@i' failure does not occur
-# 20000522 mjd@plover.com (MJD)
-use strict 'vars';
-no warnings;
-"@i_like_crackers";
-EXPECT
-Global symbol "@i_like_crackers" requires explicit package name at - line 7.
-Execution of - aborted due to compilation errors.
diff --git a/contrib/perl5/t/pragma/strict.t b/contrib/perl5/t/pragma/strict.t
deleted file mode 100755
index 5b245d0..0000000
--- a/contrib/perl5/t/pragma/strict.t
+++ /dev/null
@@ -1,91 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $ENV{PERL5LIB} = '../lib';
-}
-
-$| = 1;
-
-my $Is_VMS = $^O eq 'VMS';
-my $Is_MSWin32 = $^O eq 'MSWin32';
-my $tmpfile = "tmp0000";
-my $i = 0 ;
-1 while -f ++$tmpfile;
-END { if ($tmpfile) { 1 while unlink $tmpfile; } }
-
-my @prgs = () ;
-
-foreach (sort glob("pragma/strict-*")) {
-
- next if /(~|\.orig|,v)$/;
-
- open F, "<$_" or die "Cannot open $_: $!\n" ;
- while (<F>) {
- last if /^__END__/ ;
- }
-
- {
- local $/ = undef;
- @prgs = (@prgs, split "\n########\n", <F>) ;
- }
- close F ;
-}
-
-undef $/;
-
-print "1..", scalar @prgs, "\n";
-
-
-for (@prgs){
- my $switch = "";
- my @temps = () ;
- if (s/^\s*-\w+//){
- $switch = $&;
- }
- my($prog,$expected) = split(/\nEXPECT\n/, $_);
- if ( $prog =~ /--FILE--/) {
- my(@files) = split(/\n--FILE--\s*([^\s\n]*)\s*\n/, $prog) ;
- shift @files ;
- die "Internal error test $i didn't split into pairs, got " .
- scalar(@files) . "[" . join("%%%%", @files) ."]\n"
- if @files % 2 ;
- while (@files > 2) {
- my $filename = shift @files ;
- my $code = shift @files ;
- push @temps, $filename ;
- open F, ">$filename" or die "Cannot open $filename: $!\n" ;
- print F $code ;
- close F ;
- }
- shift @files ;
- $prog = shift @files ;
- }
- open TEST, ">$tmpfile";
- print TEST $prog,"\n";
- close TEST;
- my $results = $Is_MSWin32 ?
- `.\\perl -I../lib $switch $tmpfile 2>&1` :
- `./perl $switch $tmpfile 2>&1`;
- my $status = $?;
- $results =~ s/\n+$//;
- # allow expected output to be written as if $prog is on STDIN
- $results =~ s/tmp\d+/-/g;
- $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS; # clip off DCL status msg
- $expected =~ s/\n+$//;
- my $prefix = ($results =~ s/^PREFIX\n//) ;
- if ( $results =~ s/^SKIPPED\n//) {
- print "$results\n" ;
- }
- elsif (($prefix and $results !~ /^\Q$expected/) or
- (!$prefix and $results ne $expected)){
- print STDERR "PROG: $switch\n$prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
- }
- print "ok ", ++$i, "\n";
- foreach (@temps)
- { unlink $_ if $_ }
-}
diff --git a/contrib/perl5/t/pragma/sub_lval.t b/contrib/perl5/t/pragma/sub_lval.t
deleted file mode 100755
index f19268b..0000000
--- a/contrib/perl5/t/pragma/sub_lval.t
+++ /dev/null
@@ -1,542 +0,0 @@
-print "1..64\n";
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-sub a : lvalue { my $a = 34; ${\(bless \$a)} } # Return a temporary
-sub b : lvalue { ${\shift} }
-
-my $out = a(b()); # Check that temporaries are allowed.
-print "# `$out'\nnot " unless ref $out eq 'main'; # Not reached if error.
-print "ok 1\n";
-
-my @out = grep /main/, a(b()); # Check that temporaries are allowed.
-print "# `@out'\nnot " unless @out==1; # Not reached if error.
-print "ok 2\n";
-
-my $in;
-
-# Check that we can return localized values from subroutines:
-
-sub in : lvalue { $in = shift; }
-sub neg : lvalue { #(num_str) return num_str
- local $_ = shift;
- s/^\+/-/;
- $_;
-}
-in(neg("+2"));
-
-
-print "# `$in'\nnot " unless $in eq '-2';
-print "ok 3\n";
-
-sub get_lex : lvalue { $in }
-sub get_st : lvalue { $blah }
-sub id : lvalue { ${\shift} }
-sub id1 : lvalue { $_[0] }
-sub inc : lvalue { ${\++$_[0]} }
-
-$in = 5;
-$blah = 3;
-
-get_st = 7;
-
-print "# `$blah' ne 7\nnot " unless $blah eq 7;
-print "ok 4\n";
-
-get_lex = 7;
-
-print "# `$in' ne 7\nnot " unless $in eq 7;
-print "ok 5\n";
-
-++get_st;
-
-print "# `$blah' ne 8\nnot " unless $blah eq 8;
-print "ok 6\n";
-
-++get_lex;
-
-print "# `$in' ne 8\nnot " unless $in eq 8;
-print "ok 7\n";
-
-id(get_st) = 10;
-
-print "# `$blah' ne 10\nnot " unless $blah eq 10;
-print "ok 8\n";
-
-id(get_lex) = 10;
-
-print "# `$in' ne 10\nnot " unless $in eq 10;
-print "ok 9\n";
-
-++id(get_st);
-
-print "# `$blah' ne 11\nnot " unless $blah eq 11;
-print "ok 10\n";
-
-++id(get_lex);
-
-print "# `$in' ne 11\nnot " unless $in eq 11;
-print "ok 11\n";
-
-id1(get_st) = 20;
-
-print "# `$blah' ne 20\nnot " unless $blah eq 20;
-print "ok 12\n";
-
-id1(get_lex) = 20;
-
-print "# `$in' ne 20\nnot " unless $in eq 20;
-print "ok 13\n";
-
-++id1(get_st);
-
-print "# `$blah' ne 21\nnot " unless $blah eq 21;
-print "ok 14\n";
-
-++id1(get_lex);
-
-print "# `$in' ne 21\nnot " unless $in eq 21;
-print "ok 15\n";
-
-inc(get_st);
-
-print "# `$blah' ne 22\nnot " unless $blah eq 22;
-print "ok 16\n";
-
-inc(get_lex);
-
-print "# `$in' ne 22\nnot " unless $in eq 22;
-print "ok 17\n";
-
-inc(id(get_st));
-
-print "# `$blah' ne 23\nnot " unless $blah eq 23;
-print "ok 18\n";
-
-inc(id(get_lex));
-
-print "# `$in' ne 23\nnot " unless $in eq 23;
-print "ok 19\n";
-
-++inc(id1(id(get_st)));
-
-print "# `$blah' ne 25\nnot " unless $blah eq 25;
-print "ok 20\n";
-
-++inc(id1(id(get_lex)));
-
-print "# `$in' ne 25\nnot " unless $in eq 25;
-print "ok 21\n";
-
-@a = (1) x 3;
-@b = (undef) x 2;
-$#c = 3; # These slots are not fillable.
-
-# Explanation: empty slots contain &sv_undef.
-
-=for disabled constructs
-
-sub a3 :lvalue {@a}
-sub b2 : lvalue {@b}
-sub c4: lvalue {@c}
-
-$_ = '';
-
-eval <<'EOE' or $_ = $@;
- ($x, a3, $y, b2, $z, c4, $t) = (34 .. 78);
- 1;
-EOE
-
-#@out = ($x, a3, $y, b2, $z, c4, $t);
-#@in = (34 .. 41, (undef) x 4, 46);
-#print "# `@out' ne `@in'\nnot " unless "@out" eq "@in";
-
-print "# '$_'.\nnot "
- unless /Can\'t return an uninitialized value from lvalue subroutine/;
-=cut
-
-print "ok 22\n";
-
-my $var;
-
-sub a::var : lvalue { $var }
-
-"a"->var = 45;
-
-print "# `$var' ne 45\nnot " unless $var eq 45;
-print "ok 23\n";
-
-my $oo;
-$o = bless \$oo, "a";
-
-$o->var = 47;
-
-print "# `$var' ne 47\nnot " unless $var eq 47;
-print "ok 24\n";
-
-sub o : lvalue { $o }
-
-o->var = 49;
-
-print "# `$var' ne 49\nnot " unless $var eq 49;
-print "ok 25\n";
-
-sub nolv () { $x0, $x1 } # Not lvalue
-
-$_ = '';
-
-eval <<'EOE' or $_ = $@;
- nolv = (2,3);
- 1;
-EOE
-
-print "not "
- unless /Can\'t modify non-lvalue subroutine call in scalar assignment/;
-print "ok 26\n";
-
-$_ = '';
-
-eval <<'EOE' or $_ = $@;
- nolv = (2,3) if $_;
- 1;
-EOE
-
-print "not "
- unless /Can\'t modify non-lvalue subroutine call in scalar assignment/;
-print "ok 27\n";
-
-$_ = '';
-
-eval <<'EOE' or $_ = $@;
- &nolv = (2,3) if $_;
- 1;
-EOE
-
-print "not "
- unless /Can\'t modify non-lvalue subroutine call in scalar assignment/;
-print "ok 28\n";
-
-$x0 = $x1 = $_ = undef;
-$nolv = \&nolv;
-
-eval <<'EOE' or $_ = $@;
- $nolv->() = (2,3) if $_;
- 1;
-EOE
-
-print "# '$_', '$x0', '$x1'.\nnot " if defined $_;
-print "ok 29\n";
-
-$x0 = $x1 = $_ = undef;
-$nolv = \&nolv;
-
-eval <<'EOE' or $_ = $@;
- $nolv->() = (2,3);
- 1;
-EOE
-
-print "# '$_', '$x0', '$x1'.\nnot "
- unless /Can\'t modify non-lvalue subroutine call/;
-print "ok 30\n";
-
-sub lv0 : lvalue { } # Converted to lv10 in scalar context
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- lv0 = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t return a readonly value from lvalue subroutine/;
-print "ok 31\n";
-
-sub lv10 : lvalue {}
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- (lv0) = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot " if defined $_;
-print "ok 32\n";
-
-sub lv1u :lvalue { undef }
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- lv1u = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t return a readonly value from lvalue subroutine/;
-print "ok 33\n";
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- (lv1u) = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t return an uninitialized value from lvalue subroutine/;
-print "ok 34\n";
-
-$x = '1234567';
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- sub lv1t : lvalue { index $x, 2 }
- lv1t = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t modify index in lvalue subroutine return/;
-print "ok 35\n";
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- sub lv2t : lvalue { shift }
- (lv2t) = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t modify shift in lvalue subroutine return/;
-print "ok 36\n";
-
-$xxx = 'xxx';
-sub xxx () { $xxx } # Not lvalue
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- sub lv1tmp : lvalue { xxx } # is it a TEMP?
- lv1tmp = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t modify non-lvalue subroutine call in lvalue subroutine return/;
-print "ok 37\n";
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- (lv1tmp) = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t return a temporary from lvalue subroutine/;
-print "ok 38\n";
-
-sub yyy () { 'yyy' } # Const, not lvalue
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- sub lv1tmpr : lvalue { yyy } # is it read-only?
- lv1tmpr = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t modify constant item in lvalue subroutine return/;
-print "ok 39\n";
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- (lv1tmpr) = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot "
- unless /Can\'t return a readonly value from lvalue subroutine/;
-print "ok 40\n";
-
-sub lva : lvalue {@a}
-
-$_ = undef;
-@a = ();
-$a[1] = 12;
-eval <<'EOE' or $_ = $@;
- (lva) = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot " unless "'@a' $_" eq "'2 3' ";
-print "ok 41\n";
-
-$_ = undef;
-@a = ();
-$a[0] = undef;
-$a[1] = 12;
-eval <<'EOE' or $_ = $@;
- (lva) = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot " unless "'@a' $_" eq "'2 3' ";
-print "ok 42\n";
-
-$_ = undef;
-@a = ();
-$a[0] = undef;
-$a[1] = 12;
-eval <<'EOE' or $_ = $@;
- (lva) = (2,3);
- 1;
-EOE
-
-print "# '$_'.\nnot " unless "'@a' $_" eq "'2 3' ";
-print "ok 43\n";
-
-sub lv1n : lvalue { $newvar }
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- lv1n = (3,4);
- 1;
-EOE
-
-print "# '$_', '$newvar'.\nnot " unless "'$newvar' $_" eq "'4' ";
-print "ok 44\n";
-
-sub lv1nn : lvalue { $nnewvar }
-
-$_ = undef;
-eval <<'EOE' or $_ = $@;
- (lv1nn) = (3,4);
- 1;
-EOE
-
-print "# '$_'.\nnot " unless "'$nnewvar' $_" eq "'3' ";
-print "ok 45\n";
-
-$a = \&lv1nn;
-$a->() = 8;
-print "# '$nnewvar'.\nnot " unless $nnewvar eq '8';
-print "ok 46\n";
-
-# This must happen at run time
-eval {
- sub AUTOLOAD : lvalue { $newvar };
-};
-foobar() = 12;
-print "# '$newvar'.\nnot " unless $newvar eq "12";
-print "ok 47\n";
-
-# Testing DWIM of foo = bar;
-sub foo : lvalue {
- $a;
-}
-$a = "not ok 48\n";
-foo = "ok 48\n";
-print $a;
-
-open bar, ">nothing" or die $!;
-bar = *STDOUT;
-print bar "ok 49\n";
-unlink "nothing";
-
-{
-my %hash; my @array;
-sub alv : lvalue { $array[1] }
-sub alv2 : lvalue { $array[$_[0]] }
-sub hlv : lvalue { $hash{"foo"} }
-sub hlv2 : lvalue { $hash{$_[0]} }
-$array[1] = "not ok 51\n";
-alv() = "ok 50\n";
-print alv();
-
-alv2(20) = "ok 51\n";
-print $array[20];
-
-$hash{"foo"} = "not ok 52\n";
-hlv() = "ok 52\n";
-print $hash{foo};
-
-$hash{bar} = "not ok 53\n";
-hlv("bar") = "ok 53\n";
-print hlv("bar");
-
-sub array : lvalue { @array }
-sub array2 : lvalue { @array2 } # This is a global.
-sub hash : lvalue { %hash }
-sub hash2 : lvalue { %hash2 } # So's this.
-@array2 = qw(foo bar);
-%hash2 = qw(foo bar);
-
-(array()) = qw(ok 54);
-print "not " unless "@array" eq "ok 54";
-print "ok 54\n";
-
-(array2()) = qw(ok 55);
-print "not " unless "@array2" eq "ok 55";
-print "ok 55\n";
-
-(hash()) = qw(ok 56);
-print "not " unless $hash{ok} == 56;
-print "ok 56\n";
-
-(hash2()) = qw(ok 57);
-print "not " unless $hash2{ok} == 57;
-print "ok 57\n";
-
-@array = qw(a b c d);
-sub aslice1 : lvalue { @array[0,2] };
-(aslice1()) = ("ok", "already");
-print "# @array\nnot " unless "@array" eq "ok b already d";
-print "ok 58\n";
-
-@array2 = qw(a B c d);
-sub aslice2 : lvalue { @array2[0,2] };
-(aslice2()) = ("ok", "already");
-print "not " unless "@array2" eq "ok B already d";
-print "ok 59\n";
-
-%hash = qw(a Alpha b Beta c Gamma);
-sub hslice : lvalue { @hash{"c", "b"} }
-(hslice()) = ("CISC", "BogoMIPS");
-print "not " unless join("/",@hash{"c","a","b"}) eq "CISC/Alpha/BogoMIPS";
-print "ok 60\n";
-}
-
-$str = "Hello, world!";
-sub sstr : lvalue { substr($str, 1, 4) }
-sstr() = "i";
-print "not " unless $str eq "Hi, world!";
-print "ok 61\n";
-
-$str = "Made w/ JavaScript";
-sub veclv : lvalue { vec($str, 2, 32) }
-if (ord('A') != 193) {
- veclv() = 0x5065726C;
-}
-else { # EBCDIC?
- veclv() = 0xD7859993;
-}
-print "# $str\nnot " unless $str eq "Made w/ PerlScript";
-print "ok 62\n";
-
-sub position : lvalue { pos }
-@p = ();
-$_ = "fee fi fo fum";
-while (/f/g) {
- push @p, position;
- position() += 6;
-}
-print "# @p\nnot " unless "@p" eq "1 8";
-print "ok 63\n";
-
-# Bug 20001223.002: split thought that the list had only one element
-@ary = qw(4 5 6);
-sub lval1 : lvalue { $ary[0]; }
-sub lval2 : lvalue { $ary[1]; }
-(lval1(), lval2()) = split ' ', "1 2 3 4";
-print "not " unless join(':', @ary) eq "1:2:6";
-print "ok 64\n";
diff --git a/contrib/perl5/t/pragma/subs.t b/contrib/perl5/t/pragma/subs.t
deleted file mode 100755
index 7e48e20..0000000
--- a/contrib/perl5/t/pragma/subs.t
+++ /dev/null
@@ -1,159 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $ENV{PERL5LIB} = '../lib';
-}
-
-$| = 1;
-undef $/;
-my @prgs = split "\n########\n", <DATA>;
-print "1..", scalar @prgs, "\n";
-
-my $Is_VMS = $^O eq 'VMS';
-my $Is_MSWin32 = $^O eq 'MSWin32';
-my $tmpfile = "tmp0000";
-my $i = 0 ;
-1 while -f ++$tmpfile;
-END { if ($tmpfile) { 1 while unlink $tmpfile} }
-
-for (@prgs){
- my $switch = "";
- my @temps = () ;
- if (s/^\s*-\w+//){
- $switch = $&;
- }
- my($prog,$expected) = split(/\nEXPECT\n/, $_);
- if ( $prog =~ /--FILE--/) {
- my(@files) = split(/\n--FILE--\s*([^\s\n]*)\s*\n/, $prog) ;
- shift @files ;
- die "Internal error test $i didn't split into pairs, got " .
- scalar(@files) . "[" . join("%%%%", @files) ."]\n"
- if @files % 2 ;
- while (@files > 2) {
- my $filename = shift @files ;
- my $code = shift @files ;
- push @temps, $filename ;
- open F, ">$filename" or die "Cannot open $filename: $!\n" ;
- print F $code ;
- close F ;
- }
- shift @files ;
- $prog = shift @files ;
- }
- open TEST, ">$tmpfile";
- print TEST $prog,"\n";
- close TEST;
- my $results = $Is_VMS ?
- `./perl $switch $tmpfile 2>&1` :
- $Is_MSWin32 ?
- `.\\perl -I../lib $switch $tmpfile 2>&1` :
- `./perl $switch $tmpfile 2>&1`;
- my $status = $?;
- $results =~ s/\n+$//;
- # allow expected output to be written as if $prog is on STDIN
- $results =~ s/tmp\d+/-/g;
- $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS; # clip off DCL status msg
-# bison says 'parse error' instead of 'syntax error',
-# various yaccs may or may not capitalize 'syntax'.
- $results =~ s/^(syntax|parse) error/syntax error/mig;
- $expected =~ s/\n+$//;
- my $prefix = ($results =~ s/^PREFIX\n//) ;
- if ( $results =~ s/^SKIPPED\n//) {
- print "$results\n" ;
- }
- elsif (($prefix and $results !~ /^\Q$expected/) or
- (!$prefix and $results ne $expected)){
- print STDERR "PROG: $switch\n$prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
- }
- print "ok ", ++$i, "\n";
- foreach (@temps)
- { unlink $_ if $_ }
-}
-
-__END__
-
-# Error - not predeclaring a sub
-Fred 1,2 ;
-sub Fred {}
-EXPECT
-Number found where operator expected at - line 3, near "Fred 1"
- (Do you need to predeclare Fred?)
-syntax error at - line 3, near "Fred 1"
-Execution of - aborted due to compilation errors.
-########
-
-# Error - not predeclaring a sub in time
-Fred 1,2 ;
-use subs qw( Fred ) ;
-sub Fred {}
-EXPECT
-Number found where operator expected at - line 3, near "Fred 1"
- (Do you need to predeclare Fred?)
-syntax error at - line 3, near "Fred 1"
-BEGIN not safe after errors--compilation aborted at - line 4.
-########
-
-# AOK
-use subs qw( Fred) ;
-Fred 1,2 ;
-sub Fred { print $_[0] + $_[1], "\n" }
-EXPECT
-3
-########
-
-# override a built-in function
-use subs qw( open ) ;
-open 1,2 ;
-sub open { print $_[0] + $_[1], "\n" }
-EXPECT
-3
-########
-
-# override a built-in function, call after definition
-use subs qw( open ) ;
-sub open { print $_[0] + $_[1], "\n" }
-open 1,2 ;
-EXPECT
-3
-########
-
-# override a built-in function, call with ()
-use subs qw( open ) ;
-open (1,2) ;
-sub open { print $_[0] + $_[1], "\n" }
-EXPECT
-3
-########
-
-# override a built-in function, call with () after definition
-use subs qw( open ) ;
-sub open { print $_[0] + $_[1], "\n" }
-open (1,2) ;
-EXPECT
-3
-########
-
---FILE-- abc
-Fred 1,2 ;
-1;
---FILE--
-use subs qw( Fred ) ;
-require "./abc" ;
-sub Fred { print $_[0] + $_[1], "\n" }
-EXPECT
-3
-########
-
-# check that it isn't affected by block scope
-{
- use subs qw( Fred ) ;
-}
-Fred 1, 2;
-sub Fred { print $_[0] + $_[1], "\n" }
-EXPECT
-3
diff --git a/contrib/perl5/t/pragma/utf8.t b/contrib/perl5/t/pragma/utf8.t
deleted file mode 100755
index e0a321a..0000000
--- a/contrib/perl5/t/pragma/utf8.t
+++ /dev/null
@@ -1,462 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $ENV{PERL5LIB} = '../lib';
- if ( ord("\t") != 9 ) { # skip on ebcdic platforms
- print "1..0 # Skip utf8 tests on ebcdic platform.\n";
- exit;
- }
-}
-
-print "1..90\n";
-
-my $test = 1;
-
-sub ok {
- my ($got,$expect) = @_;
- print "# expected [$expect], got [$got]\nnot " if $got ne $expect;
- print "ok $test\n";
-}
-
-sub nok {
- my ($got,$expect) = @_;
- print "# expected not [$expect], got [$got]\nnot " if $got eq $expect;
- print "ok $test\n";
-}
-
-sub ok_bytes {
- use bytes;
- my ($got,$expect) = @_;
- print "# expected [$expect], got [$got]\nnot " if $got ne $expect;
- print "ok $test\n";
-}
-
-sub nok_bytes {
- use bytes;
- my ($got,$expect) = @_;
- print "# expected not [$expect], got [$got]\nnot " if $got eq $expect;
- print "ok $test\n";
-}
-
-{
- use utf8;
- $_ = ">\x{263A}<";
- s/([\x{80}-\x{10ffff}])/"&#".ord($1).";"/eg;
- ok $_, '>&#9786;<';
- $test++; # 1
-
- $_ = ">\x{263A}<";
- my $rx = "\x{80}-\x{10ffff}";
- s/([$rx])/"&#".ord($1).";"/eg;
- ok $_, '>&#9786;<';
- $test++; # 2
-
- $_ = ">\x{263A}<";
- my $rx = "\\x{80}-\\x{10ffff}";
- s/([$rx])/"&#".ord($1).";"/eg;
- ok $_, '>&#9786;<';
- $test++; # 3
-
- $_ = "alpha,numeric";
- m/([[:alpha:]]+)/;
- ok $1, 'alpha';
- $test++; # 4
-
- $_ = "alphaNUMERICstring";
- m/([[:^lower:]]+)/;
- ok $1, 'NUMERIC';
- $test++; # 5
-
- $_ = "alphaNUMERICstring";
- m/(\p{Ll}+)/;
- ok $1, 'alpha';
- $test++; # 6
-
- $_ = "alphaNUMERICstring";
- m/(\p{Lu}+)/;
- ok $1, 'NUMERIC';
- $test++; # 7
-
- $_ = "alpha,numeric";
- m/([\p{IsAlpha}]+)/;
- ok $1, 'alpha';
- $test++; # 8
-
- $_ = "alphaNUMERICstring";
- m/([^\p{IsLower}]+)/;
- ok $1, 'NUMERIC';
- $test++; # 9
-
- $_ = "alpha123numeric456";
- m/([\p{IsDigit}]+)/;
- ok $1, '123';
- $test++; # 10
-
- $_ = "alpha123numeric456";
- m/([^\p{IsDigit}]+)/;
- ok $1, 'alpha';
- $test++; # 11
-
- $_ = ",123alpha,456numeric";
- m/([\p{IsAlnum}]+)/;
- ok $1, '123alpha';
- $test++; # 12
-}
-
-{
- use utf8;
-
- $_ = "\x{263A}>\x{263A}\x{263A}";
-
- ok length, 4;
- $test++; # 13
-
- ok length((m/>(.)/)[0]), 1;
- $test++; # 14
-
- ok length($&), 2;
- $test++; # 15
-
- ok length($'), 1;
- $test++; # 16
-
- ok length($`), 1;
- $test++; # 17
-
- ok length($1), 1;
- $test++; # 18
-
- ok length($tmp=$&), 2;
- $test++; # 19
-
- ok length($tmp=$'), 1;
- $test++; # 20
-
- ok length($tmp=$`), 1;
- $test++; # 21
-
- ok length($tmp=$1), 1;
- $test++; # 22
-
- {
- use bytes;
-
- my $tmp = $&;
- ok $tmp, pack("C*", ord(">"), 0342, 0230, 0272);
- $test++; # 23
-
- $tmp = $';
- ok $tmp, pack("C*", 0342, 0230, 0272);
- $test++; # 24
-
- $tmp = $`;
- ok $tmp, pack("C*", 0342, 0230, 0272);
- $test++; # 25
-
- $tmp = $1;
- ok $tmp, pack("C*", 0342, 0230, 0272);
- $test++; # 26
- }
-
- ok_bytes $&, pack("C*", ord(">"), 0342, 0230, 0272);
- $test++; # 27
-
- ok_bytes $', pack("C*", 0342, 0230, 0272);
- $test++; # 28
-
- ok_bytes $`, pack("C*", 0342, 0230, 0272);
- $test++; # 29
-
- ok_bytes $1, pack("C*", 0342, 0230, 0272);
- $test++; # 30
-
- {
- use bytes;
- no utf8;
-
- ok length, 10;
- $test++; # 31
-
- ok length((m/>(.)/)[0]), 1;
- $test++; # 32
-
- ok length($&), 2;
- $test++; # 33
-
- ok length($'), 5;
- $test++; # 34
-
- ok length($`), 3;
- $test++; # 35
-
- ok length($1), 1;
- $test++; # 36
-
- ok $&, pack("C*", ord(">"), 0342);
- $test++; # 37
-
- ok $', pack("C*", 0230, 0272, 0342, 0230, 0272);
- $test++; # 38
-
- ok $`, pack("C*", 0342, 0230, 0272);
- $test++; # 39
-
- ok $1, pack("C*", 0342);
- $test++; # 40
- }
-
- {
- no utf8;
- $_="\342\230\272>\342\230\272\342\230\272";
- }
-
- ok length, 10;
- $test++; # 41
-
- ok length((m/>(.)/)[0]), 1;
- $test++; # 42
-
- ok length($&), 2;
- $test++; # 43
-
- ok length($'), 1;
- $test++; # 44
-
- ok length($`), 1;
- $test++; # 45
-
- ok length($1), 1;
- $test++; # 46
-
- ok length($tmp=$&), 2;
- $test++; # 47
-
- ok length($tmp=$'), 1;
- $test++; # 48
-
- ok length($tmp=$`), 1;
- $test++; # 49
-
- ok length($tmp=$1), 1;
- $test++; # 50
-
- {
- use bytes;
-
- my $tmp = $&;
- ok $tmp, pack("C*", ord(">"), 0342, 0230, 0272);
- $test++; # 51
-
- $tmp = $';
- ok $tmp, pack("C*", 0342, 0230, 0272);
- $test++; # 52
-
- $tmp = $`;
- ok $tmp, pack("C*", 0342, 0230, 0272);
- $test++; # 53
-
- $tmp = $1;
- ok $tmp, pack("C*", 0342, 0230, 0272);
- $test++; # 54
- }
-
- {
- use bytes;
- no utf8;
-
- ok length, 10;
- $test++; # 55
-
- ok length((m/>(.)/)[0]), 1;
- $test++; # 56
-
- ok length($&), 2;
- $test++; # 57
-
- ok length($'), 5;
- $test++; # 58
-
- ok length($`), 3;
- $test++; # 59
-
- ok length($1), 1;
- $test++; # 60
-
- ok $&, pack("C*", ord(">"), 0342);
- $test++; # 61
-
- ok $', pack("C*", 0230, 0272, 0342, 0230, 0272);
- $test++; # 62
-
- ok $`, pack("C*", 0342, 0230, 0272);
- $test++; # 63
-
- ok $1, pack("C*", 0342);
- $test++; # 64
- }
-
- ok "\x{ab}" =~ /^\x{ab}$/, 1;
- $test++; # 65
-}
-
-{
- use utf8;
- ok join(" ",unpack("C*",chr(128).chr(255))), "128 255";
- $test++;
-}
-
-{
- use utf8;
- my @a = map ord, split(//, join("", map chr, (1234, 123, 2345)));
- ok "@a", "1234 123 2345";
- $test++; # 67
-}
-
-{
- use utf8;
- my $x = chr(123);
- my @a = map ord, split(/$x/, join("", map chr, (1234, 123, 2345)));
- ok "@a", "1234 2345";
- $test++; # 68
-}
-
-{
- # bug id 20001009.001
-
- my ($a, $b);
-
- { use bytes; $a = "\xc3\xa4" }
- { use utf8; $b = "\xe4" } # \xXX must not produce UTF-8
-
- print "not " if $a eq $b;
- print "ok $test\n"; $test++;
-
- { use utf8; print "not " if $a eq $b; }
- print "ok $test\n"; $test++;
-}
-
-{
- # bug id 20001008.001
-
- my @x = ("stra\337e 138","stra\337e 138");
- for (@x) {
- s/(\d+)\s*([\w\-]+)/$1 . uc $2/e;
- my($latin) = /^(.+)(?:\s+\d)/;
- print $latin eq "stra\337e" ? "ok $test\n" :
- "#latin[$latin]\nnot ok $test\n";
- $test++;
- $latin =~ s/stra\337e/straße/; # \303\237 after the 2nd a
- use utf8;
- $latin =~ s!(s)tr(?:aß|s+e)!$1tr.!; # \303\237 after the a
- }
-}
-
-{
- # bug id 20000427.003
-
- use utf8;
- use warnings;
- use strict;
-
- my $sushi = "\x{b36c}\x{5a8c}\x{ff5b}\x{5079}\x{505b}";
-
- my @charlist = split //, $sushi;
- my $r = '';
- foreach my $ch (@charlist) {
- $r = $r . " " . sprintf "U+%04X", ord($ch);
- }
-
- print "not " unless $r eq " U+B36C U+5A8C U+FF5B U+5079 U+505B";
- print "ok $test\n";
- $test++;
-}
-
-{
- # bug id 20000426.003
-
- use utf8;
-
- my $s = "\x20\x40\x{80}\x{100}\x{80}\x40\x20";
-
- my ($a, $b, $c) = split(/\x40/, $s);
- print "not "
- unless $a eq "\x20" && $b eq "\x{80}\x{100}\x{80}" && $c eq $a;
- print "ok $test\n";
- $test++;
-
- my ($a, $b) = split(/\x{100}/, $s);
- print "not " unless $a eq "\x20\x40\x{80}" && $b eq "\x{80}\x40\x20";
- print "ok $test\n";
- $test++;
-
- my ($a, $b) = split(/\x{80}\x{100}\x{80}/, $s);
- print "not " unless $a eq "\x20\x40" && $b eq "\x40\x20";
- print "ok $test\n";
- $test++;
-
- my ($a, $b) = split(/\x40\x{80}/, $s);
- print "not " unless $a eq "\x20" && $b eq "\x{100}\x{80}\x40\x20";
- print "ok $test\n";
- $test++;
-
- my ($a, $b, $c) = split(/[\x40\x{80}]+/, $s);
- print "not " unless $a eq "\x20" && $b eq "\x{100}" && $c eq "\x20";
- print "ok $test\n";
- $test++;
-}
-
-{
- # bug id 20000730.004
-
- use utf8;
-
- my $smiley = "\x{263a}";
-
- for my $s ("\x{263a}", # 1
- $smiley, # 2
-
- "" . $smiley, # 3
- "" . "\x{263a}", # 4
-
- $smiley . "", # 5
- "\x{263a}" . "", # 6
- ) {
- my $length_chars = length($s);
- my $length_bytes;
- { use bytes; $length_bytes = length($s) }
- my @regex_chars = $s =~ m/(.)/g;
- my $regex_chars = @regex_chars;
- my @split_chars = split //, $s;
- my $split_chars = @split_chars;
- print "not "
- unless "$length_chars/$regex_chars/$split_chars/$length_bytes" eq
- "1/1/1/3";
- print "ok $test\n";
- $test++;
- }
-
- for my $s ("\x{263a}" . "\x{263a}", # 7
- $smiley . $smiley, # 8
-
- "\x{263a}\x{263a}", # 9
- "$smiley$smiley", # 10
-
- "\x{263a}" x 2, # 11
- $smiley x 2, # 12
- ) {
- my $length_chars = length($s);
- my $length_bytes;
- { use bytes; $length_bytes = length($s) }
- my @regex_chars = $s =~ m/(.)/g;
- my $regex_chars = @regex_chars;
- my @split_chars = split //, $s;
- my $split_chars = @split_chars;
- print "not "
- unless "$length_chars/$regex_chars/$split_chars/$length_bytes" eq
- "2/2/2/6";
- print "ok $test\n";
- $test++;
- }
-}
diff --git a/contrib/perl5/t/pragma/warn/1global b/contrib/perl5/t/pragma/warn/1global
deleted file mode 100644
index 0af8022..0000000
--- a/contrib/perl5/t/pragma/warn/1global
+++ /dev/null
@@ -1,189 +0,0 @@
-Check existing $^W functionality
-
-
-__END__
-
-# warnable code, warnings disabled
-$a =+ 3 ;
-EXPECT
-
-########
--w
-# warnable code, warnings enabled via command line switch
-$a =+ 3 ;
-EXPECT
-Reversed += operator at - line 3.
-Name "main::a" used only once: possible typo at - line 3.
-########
-#! perl -w
-# warnable code, warnings enabled via #! line
-$a =+ 3 ;
-EXPECT
-Reversed += operator at - line 3.
-Name "main::a" used only once: possible typo at - line 3.
-########
-
-# warnable code, warnings enabled via compile time $^W
-BEGIN { $^W = 1 }
-$a =+ 3 ;
-EXPECT
-Reversed += operator at - line 4.
-Name "main::a" used only once: possible typo at - line 4.
-########
-
-# compile-time warnable code, warnings enabled via runtime $^W
-# so no warning printed.
-$^W = 1 ;
-$a =+ 3 ;
-EXPECT
-
-########
-
-# warnable code, warnings enabled via runtime $^W
-$^W = 1 ;
-my $b ; chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 4.
-########
-
-# warnings enabled at compile time, disabled at run time
-BEGIN { $^W = 1 }
-$^W = 0 ;
-my $b ; chop $b ;
-EXPECT
-
-########
-
-# warnings disabled at compile time, enabled at run time
-BEGIN { $^W = 0 }
-$^W = 1 ;
-my $b ; chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 5.
-########
--w
---FILE-- abcd
-my $b ; chop $b ;
-1 ;
---FILE--
-require "./abcd";
-EXPECT
-Use of uninitialized value in scalar chop at ./abcd line 1.
-########
-
---FILE-- abcd
-my $b ; chop $b ;
-1 ;
---FILE--
-#! perl -w
-require "./abcd";
-EXPECT
-Use of uninitialized value in scalar chop at ./abcd line 1.
-########
-
---FILE-- abcd
-my $b ; chop $b ;
-1 ;
---FILE--
-$^W =1 ;
-require "./abcd";
-EXPECT
-Use of uninitialized value in scalar chop at ./abcd line 1.
-########
-
---FILE-- abcd
-$^W = 0;
-my $b ; chop $b ;
-1 ;
---FILE--
-$^W =1 ;
-require "./abcd";
-EXPECT
-
-########
-
---FILE-- abcd
-$^W = 1;
-1 ;
---FILE--
-$^W =0 ;
-require "./abcd";
-my $b ; chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 3.
-########
-
-$^W = 1;
-eval 'my $b ; chop $b ;' ;
-print $@ ;
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 1.
-########
-
-eval '$^W = 1;' ;
-print $@ ;
-my $b ; chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 4.
-########
-
-eval {$^W = 1;} ;
-print $@ ;
-my $b ; chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 4.
-########
-
-{
- local ($^W) = 1;
-}
-my $b ; chop $b ;
-EXPECT
-
-########
-
-my $a ; chop $a ;
-{
- local ($^W) = 1;
- my $b ; chop $b ;
-}
-my $c ; chop $c ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 5.
-########
--w
--e undef
-EXPECT
-Use of uninitialized value in -e at - line 2.
-########
-
-$^W = 1 + 2 ;
-EXPECT
-
-########
-
-$^W = $a ;
-EXPECT
-
-########
-
-sub fred {}
-$^W = fred() ;
-EXPECT
-
-########
-
-sub fred { my $b ; chop $b ;}
-{ local $^W = 0 ;
- fred() ;
-}
-EXPECT
-
-########
-
-sub fred { my $b ; chop $b ;}
-{ local $^W = 1 ;
- fred() ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at - line 2.
diff --git a/contrib/perl5/t/pragma/warn/2use b/contrib/perl5/t/pragma/warn/2use
deleted file mode 100644
index b489d62..0000000
--- a/contrib/perl5/t/pragma/warn/2use
+++ /dev/null
@@ -1,356 +0,0 @@
-Check lexical warnings functionality
-
-TODO
- check that the warning hierarchy works.
-
-__END__
-
-# check illegal category is caught
-use warnings 'this-should-never-be-a-warning-category' ;
-EXPECT
-unknown warnings category 'this-should-never-be-a-warning-category' at - line 3
-BEGIN failed--compilation aborted at - line 3.
-########
-
-# Check compile time scope of pragma
-use warnings 'deprecated' ;
-{
- no warnings ;
- 1 if $a EQ $b ;
-}
-1 if $a EQ $b ;
-EXPECT
-Use of EQ is deprecated at - line 8.
-########
-
-# Check compile time scope of pragma
-no warnings;
-{
- use warnings 'deprecated' ;
- 1 if $a EQ $b ;
-}
-1 if $a EQ $b ;
-EXPECT
-Use of EQ is deprecated at - line 6.
-########
-
-# Check runtime scope of pragma
-use warnings 'uninitialized' ;
-{
- no warnings ;
- my $b ; chop $b ;
-}
-my $b ; chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 8.
-########
-
-# Check runtime scope of pragma
-no warnings ;
-{
- use warnings 'uninitialized' ;
- my $b ; chop $b ;
-}
-my $b ; chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check runtime scope of pragma
-no warnings ;
-{
- use warnings 'uninitialized' ;
- $a = sub { my $b ; chop $b ; }
-}
-&$a ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-use warnings 'deprecated' ;
-1 if $a EQ $b ;
-EXPECT
-Use of EQ is deprecated at - line 3.
-########
-
---FILE-- abc
-1 if $a EQ $b ;
-1;
---FILE--
-use warnings 'deprecated' ;
-require "./abc";
-EXPECT
-
-########
-
---FILE-- abc
-use warnings 'deprecated' ;
-1;
---FILE--
-require "./abc";
-1 if $a EQ $b ;
-EXPECT
-
-########
-
---FILE-- abc
-use warnings 'deprecated' ;
-1 if $a EQ $b ;
-1;
---FILE--
-use warnings 'uninitialized' ;
-require "./abc";
-my $a ; chop $a ;
-EXPECT
-Use of EQ is deprecated at ./abc line 2.
-Use of uninitialized value in scalar chop at - line 3.
-########
-
---FILE-- abc.pm
-use warnings 'deprecated' ;
-1 if $a EQ $b ;
-1;
---FILE--
-use warnings 'uninitialized' ;
-use abc;
-my $a ; chop $a ;
-EXPECT
-Use of EQ is deprecated at abc.pm line 2.
-Use of uninitialized value in scalar chop at - line 3.
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval {
- my $b ; chop $b ;
- }; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval {
- use warnings 'uninitialized' ;
- my $b ; chop $b ;
- }; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at - line 8.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'uninitialized' ;
- eval {
- my $b ; chop $b ;
- }; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at - line 7.
-Use of uninitialized value in scalar chop at - line 9.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'uninitialized' ;
- eval {
- no warnings ;
- my $b ; chop $b ;
- }; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at - line 10.
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval {
- 1 if $a EQ $b ;
- }; print STDERR $@ ;
- 1 if $a EQ $b ;
-}
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval {
- use warnings 'deprecated' ;
- 1 if $a EQ $b ;
- }; print STDERR $@ ;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at - line 8.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'deprecated' ;
- eval {
- 1 if $a EQ $b ;
- }; print STDERR $@ ;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at - line 7.
-Use of EQ is deprecated at - line 9.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'deprecated' ;
- eval {
- no warnings ;
- 1 if $a EQ $b ;
- }; print STDERR $@ ;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at - line 10.
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval '
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval q[
- use warnings 'uninitialized' ;
- my $b ; chop $b ;
- ]; print STDERR $@;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 3.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'uninitialized' ;
- eval '
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 2.
-Use of uninitialized value in scalar chop at - line 9.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'uninitialized' ;
- eval '
- no warnings ;
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at - line 10.
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval '
- 1 if $a EQ $b ;
- '; print STDERR $@ ;
- 1 if $a EQ $b ;
-}
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval q[
- use warnings 'deprecated' ;
- 1 if $a EQ $b ;
- ]; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at (eval 1) line 3.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'deprecated' ;
- eval '
- 1 if $a EQ $b ;
- '; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at - line 9.
-Use of EQ is deprecated at (eval 1) line 2.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'deprecated' ;
- eval '
- no warnings ;
- 1 if $a EQ $b ;
- '; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at - line 10.
-########
-
-# Check the additive nature of the pragma
-1 if $a EQ $b ;
-my $a ; chop $a ;
-use warnings 'deprecated' ;
-1 if $a EQ $b ;
-my $b ; chop $b ;
-use warnings 'uninitialized' ;
-my $c ; chop $c ;
-no warnings 'deprecated' ;
-1 if $a EQ $b ;
-EXPECT
-Use of EQ is deprecated at - line 6.
-Use of uninitialized value in scalar chop at - line 9.
-Use of uninitialized value in string eq at - line 11.
-Use of uninitialized value in string eq at - line 11.
diff --git a/contrib/perl5/t/pragma/warn/3both b/contrib/perl5/t/pragma/warn/3both
deleted file mode 100644
index 335e1b2..0000000
--- a/contrib/perl5/t/pragma/warn/3both
+++ /dev/null
@@ -1,266 +0,0 @@
-Check interaction of $^W and lexical
-
-__END__
-
-# Check interaction of $^W and use warnings
-sub fred {
- use warnings ;
- my $b ;
- chop $b ;
-}
-{ local $^W = 0 ;
- fred() ;
-}
-
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check interaction of $^W and use warnings
-sub fred {
- use warnings ;
- my $b ;
- chop $b ;
-}
-{ $^W = 0 ;
- fred() ;
-}
-
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check interaction of $^W and use warnings
-sub fred {
- no warnings ;
- my $b ;
- chop $b ;
-}
-{ local $^W = 1 ;
- fred() ;
-}
-
-EXPECT
-
-########
-
-# Check interaction of $^W and use warnings
-sub fred {
- no warnings ;
- my $b ;
- chop $b ;
-}
-{ $^W = 1 ;
- fred() ;
-}
-
-EXPECT
-
-########
-
-# Check interaction of $^W and use warnings
-use warnings ;
-$^W = 1 ;
-my $b ;
-chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check interaction of $^W and use warnings
-$^W = 1 ;
-use warnings ;
-my $b ;
-chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check interaction of $^W and use warnings
-$^W = 1 ;
-no warnings ;
-my $b ;
-chop $b ;
-EXPECT
-
-########
-
-# Check interaction of $^W and use warnings
-no warnings ;
-$^W = 1 ;
-my $b ;
-chop $b ;
-EXPECT
-
-########
--w
-# Check interaction of $^W and use warnings
-no warnings ;
-my $b ;
-chop $b ;
-EXPECT
-
-########
--w
-# Check interaction of $^W and use warnings
-use warnings ;
-my $b ;
-chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 5.
-########
-
-# Check interaction of $^W and use warnings
-sub fred {
- use warnings ;
- my $b ;
- chop $b ;
-}
-BEGIN { $^W = 0 }
-fred() ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check interaction of $^W and use warnings
-sub fred {
- no warnings ;
- my $b ;
- chop $b ;
-}
-BEGIN { $^W = 1 }
-fred() ;
-
-EXPECT
-
-########
-
-# Check interaction of $^W and use warnings
-use warnings ;
-BEGIN { $^W = 1 }
-my $b ;
-chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check interaction of $^W and use warnings
-BEGIN { $^W = 1 }
-use warnings ;
-my $b ;
-chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check interaction of $^W and use warnings
-BEGIN { $^W = 1 }
-no warnings ;
-my $b ;
-chop $b ;
-EXPECT
-
-########
-
-# Check interaction of $^W and use warnings
-no warnings ;
-BEGIN { $^W = 1 }
-my $b ;
-chop $b ;
-EXPECT
-
-########
-
-# Check interaction of $^W and use warnings
-BEGIN { $^W = 1 }
-{
- no warnings ;
- my $b ;
- chop $b ;
-}
-my $b ;
-chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 10.
-########
-
-# Check interaction of $^W and use warnings
-BEGIN { $^W = 0 }
-{
- use warnings ;
- my $b ;
- chop $b ;
-}
-my $b ;
-chop $b ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 7.
-########
-
-# Check scope of pragma with eval
-BEGIN { $^W = 1 }
-{
- no warnings ;
- eval '
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-BEGIN { $^W = 1 }
-use warnings;
-{
- no warnings ;
- eval q[
- use warnings 'uninitialized' ;
- my $b ; chop $b ;
- ]; print STDERR $@;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 3.
-########
-
-# Check scope of pragma with eval
-BEGIN { $^W = 0 }
-{
- use warnings 'uninitialized' ;
- eval '
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 2.
-Use of uninitialized value in scalar chop at - line 9.
-########
-
-# Check scope of pragma with eval
-BEGIN { $^W = 0 }
-{
- use warnings 'uninitialized' ;
- eval '
- no warnings ;
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at - line 10.
-########
-
-# Check scope of pragma with eval
-BEGIN { $^W = 1 }
-{
- no warnings ;
- eval '
- 1 if $a EQ $b ;
- '; print STDERR $@ ;
- 1 if $a EQ $b ;
-}
-EXPECT
-
diff --git a/contrib/perl5/t/pragma/warn/4lint b/contrib/perl5/t/pragma/warn/4lint
deleted file mode 100644
index b2fa75f..0000000
--- a/contrib/perl5/t/pragma/warn/4lint
+++ /dev/null
@@ -1,216 +0,0 @@
-Check lint
-
-__END__
--W
-# lint: check compile time $^W is zapped
-BEGIN { $^W = 0 ;}
-$a = $b = 1 ;
-$a = 1 if $a EQ $b ;
-close STDIN ; print STDIN "abc" ;
-EXPECT
-Use of EQ is deprecated at - line 5.
-print() on closed filehandle STDIN at - line 6.
-########
--W
-# lint: check runtime $^W is zapped
-$^W = 0 ;
-close STDIN ; print STDIN "abc" ;
-EXPECT
-print() on closed filehandle STDIN at - line 4.
-########
--W
-# lint: check runtime $^W is zapped
-{
- $^W = 0 ;
- close STDIN ; print STDIN "abc" ;
-}
-EXPECT
-print() on closed filehandle STDIN at - line 5.
-########
--W
-# lint: check "no warnings" is zapped
-no warnings ;
-$a = $b = 1 ;
-$a = 1 if $a EQ $b ;
-close STDIN ; print STDIN "abc" ;
-EXPECT
-Use of EQ is deprecated at - line 5.
-print() on closed filehandle STDIN at - line 6.
-########
--W
-# lint: check "no warnings" is zapped
-{
- no warnings ;
- close STDIN ; print STDIN "abc" ;
-}
-EXPECT
-print() on closed filehandle STDIN at - line 5.
-########
--Ww
-# lint: check combination of -w and -W
-{
- $^W = 0 ;
- close STDIN ; print STDIN "abc" ;
-}
-EXPECT
-print() on closed filehandle STDIN at - line 5.
-########
--W
---FILE-- abc.pm
-no warnings 'deprecated' ;
-my ($a, $b) = (0,0);
-1 if $a EQ $b ;
-1;
---FILE--
-no warnings 'uninitialized' ;
-use abc;
-my $a ; chop $a ;
-EXPECT
-Use of EQ is deprecated at abc.pm line 3.
-Use of uninitialized value in scalar chop at - line 3.
-########
--W
---FILE-- abc
-no warnings 'deprecated' ;
-my ($a, $b) = (0,0);
-1 if $a EQ $b ;
-1;
---FILE--
-no warnings 'uninitialized' ;
-require "./abc";
-my $a ; chop $a ;
-EXPECT
-Use of EQ is deprecated at ./abc line 3.
-Use of uninitialized value in scalar chop at - line 3.
-########
--W
---FILE-- abc.pm
-BEGIN {$^W = 0}
-my ($a, $b) = (0,0);
-1 if $a EQ $b ;
-1;
---FILE--
-$^W = 0 ;
-use abc;
-my $a ; chop $a ;
-EXPECT
-Use of EQ is deprecated at abc.pm line 3.
-Use of uninitialized value in scalar chop at - line 3.
-########
--W
---FILE-- abc
-BEGIN {$^W = 0}
-my ($a, $b) = (0,0);
-1 if $a EQ $b ;
-1;
---FILE--
-$^W = 0 ;
-require "./abc";
-my $a ; chop $a ;
-EXPECT
-Use of EQ is deprecated at ./abc line 3.
-Use of uninitialized value in scalar chop at - line 3.
-########
--W
-# Check scope of pragma with eval
-{
- no warnings ;
- eval '
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 2.
-Use of uninitialized value in scalar chop at - line 8.
-########
--W
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval q[
- use warnings 'uninitialized' ;
- my $b ; chop $b ;
- ]; print STDERR $@;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 3.
-Use of uninitialized value in scalar chop at - line 10.
-########
--W
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'uninitialized' ;
- eval '
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 2.
-Use of uninitialized value in scalar chop at - line 9.
-########
--W
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'uninitialized' ;
- eval '
- no warnings ;
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-Use of uninitialized value in scalar chop at (eval 1) line 3.
-Use of uninitialized value in scalar chop at - line 10.
-########
--W
-# Check scope of pragma with eval
-use warnings;
-{
- my $a = "1"; my $b = "2";
- no warnings ;
- eval q[
- use warnings 'deprecated' ;
- 1 if $a EQ $b ;
- ]; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at - line 11.
-Use of EQ is deprecated at (eval 1) line 3.
-########
--W
-# Check scope of pragma with eval
-no warnings;
-{
- my $a = "1"; my $b = "2";
- use warnings 'deprecated' ;
- eval '
- 1 if $a EQ $b ;
- '; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at - line 10.
-Use of EQ is deprecated at (eval 1) line 2.
-########
--W
-# Check scope of pragma with eval
-no warnings;
-{
- my $a = "1"; my $b = "2";
- use warnings 'deprecated' ;
- eval '
- no warnings ;
- 1 if $a EQ $b ;
- '; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-Use of EQ is deprecated at - line 11.
-Use of EQ is deprecated at (eval 1) line 3.
diff --git a/contrib/perl5/t/pragma/warn/5nolint b/contrib/perl5/t/pragma/warn/5nolint
deleted file mode 100644
index 2459968..0000000
--- a/contrib/perl5/t/pragma/warn/5nolint
+++ /dev/null
@@ -1,204 +0,0 @@
-Check anti-lint
-
-__END__
--X
-# nolint: check compile time $^W is zapped
-BEGIN { $^W = 1 ;}
-$a = $b = 1 ;
-$a = 1 if $a EQ $b ;
-close STDIN ; print STDIN "abc" ;
-EXPECT
-########
--X
-# nolint: check runtime $^W is zapped
-$^W = 1 ;
-close STDIN ; print STDIN "abc" ;
-EXPECT
-########
--X
-# nolint: check runtime $^W is zapped
-{
- $^W = 1 ;
- close STDIN ; print STDIN "abc" ;
-}
-EXPECT
-########
--X
-# nolint: check "no warnings" is zapped
-use warnings ;
-$a = $b = 1 ;
-$a = 1 if $a EQ $b ;
-close STDIN ; print STDIN "abc" ;
-EXPECT
-########
--X
-# nolint: check "no warnings" is zapped
-{
- use warnings ;
- close STDIN ; print STDIN "abc" ;
-}
-EXPECT
-########
--Xw
-# nolint: check combination of -w and -X
-{
- $^W = 1 ;
- close STDIN ; print STDIN "abc" ;
-}
-EXPECT
-########
--X
---FILE-- abc.pm
-use warnings 'deprecated' ;
-my ($a, $b) = (0,0);
-1 if $a EQ $b ;
-1;
---FILE--
-use warnings 'uninitialized' ;
-use abc;
-my $a ; chop $a ;
-EXPECT
-########
--X
---FILE-- abc
-use warnings 'deprecated' ;
-my ($a, $b) = (0,0);
-1 if $a EQ $b ;
-1;
---FILE--
-use warnings 'uninitialized' ;
-require "./abc";
-my $a ; chop $a ;
-EXPECT
-########
--X
---FILE-- abc.pm
-BEGIN {$^W = 1}
-my ($a, $b) = (0,0);
-1 if $a EQ $b ;
-1;
---FILE--
-$^W = 1 ;
-use abc;
-my $a ; chop $a ;
-EXPECT
-########
--X
---FILE-- abc
-BEGIN {$^W = 1}
-my ($a, $b) = (0,0);
-1 if $a EQ $b ;
-1;
---FILE--
-$^W = 1 ;
-require "./abc";
-my $a ; chop $a ;
-EXPECT
-########
--X
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval '
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-
-########
--X
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval q[
- use warnings 'uninitialized' ;
- my $b ; chop $b ;
- ]; print STDERR $@;
- my $b ; chop $b ;
-}
-EXPECT
-
-########
--X
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'uninitialized' ;
- eval '
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-
-########
--X
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'uninitialized' ;
- eval '
- no warnings ;
- my $b ; chop $b ;
- '; print STDERR $@ ;
- my $b ; chop $b ;
-}
-EXPECT
-
-########
--X
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval '
- 1 if $a EQ $b ;
- '; print STDERR $@ ;
- 1 if $a EQ $b ;
-}
-EXPECT
-
-########
--X
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval q[
- use warnings 'deprecated' ;
- 1 if $a EQ $b ;
- ]; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-
-########
--X
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'deprecated' ;
- eval '
- 1 if $a EQ $b ;
- '; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-
-########
--X
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'deprecated' ;
- eval '
- no warnings ;
- 1 if $a EQ $b ;
- '; print STDERR $@;
- 1 if $a EQ $b ;
-}
-EXPECT
-
diff --git a/contrib/perl5/t/pragma/warn/6default b/contrib/perl5/t/pragma/warn/6default
deleted file mode 100644
index a8aafee..0000000
--- a/contrib/perl5/t/pragma/warn/6default
+++ /dev/null
@@ -1,121 +0,0 @@
-Check default warnings
-
-__END__
-# default warnings should be displayed if you don't add anything
-# optional shouldn't
-my $a = oct "7777777777777777777777777777777777779" ;
-EXPECT
-Integer overflow in octal number at - line 3.
-########
-# no warnings should be displayed
-no warnings ;
-my $a = oct "7777777777777777777777777777777777778" ;
-EXPECT
-########
-# all warnings should be displayed
-use warnings ;
-my $a = oct "7777777777777777777777777777777777778" ;
-EXPECT
-Integer overflow in octal number at - line 3.
-Illegal octal digit '8' ignored at - line 3.
-Octal number > 037777777777 non-portable at - line 3.
-########
-# check scope
-use warnings ;
-my $a = oct "7777777777777777777777777777777777778" ;
-{
- no warnings ;
- my $a = oct "7777777777777777777777777777777777778" ;
-}
-my $c = oct "7777777777777777777777777777777777778" ;
-EXPECT
-Integer overflow in octal number at - line 3.
-Illegal octal digit '8' ignored at - line 3.
-Octal number > 037777777777 non-portable at - line 3.
-Integer overflow in octal number at - line 8.
-Illegal octal digit '8' ignored at - line 8.
-Octal number > 037777777777 non-portable at - line 8.
-########
-# all warnings should be displayed
-use warnings ;
-my $a = oct "0xfffffffffffffffffg" ;
-EXPECT
-Integer overflow in hexadecimal number at - line 3.
-Illegal hexadecimal digit 'g' ignored at - line 3.
-Hexadecimal number > 0xffffffff non-portable at - line 3.
-########
-# all warnings should be displayed
-use warnings ;
-my $a = oct "0b111111111111111111111111111111111111111111111111111111111111111112";
-EXPECT
-Integer overflow in binary number at - line 3.
-Illegal binary digit '2' ignored at - line 3.
-Binary number > 0b11111111111111111111111111111111 non-portable at - line 3.
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval '
- my $a = oct "0xfffffffffffffffffg" ;
- '; print STDERR $@ ;
- my $a = oct "0xfffffffffffffffffg" ;
-}
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-use warnings;
-{
- no warnings ;
- eval q[
- use warnings ;
- my $a = oct "0xfffffffffffffffffg" ;
- ]; print STDERR $@;
- my $a = oct "0xfffffffffffffffffg" ;
-}
-EXPECT
-Integer overflow in hexadecimal number at (eval 1) line 3.
-Illegal hexadecimal digit 'g' ignored at (eval 1) line 3.
-Hexadecimal number > 0xffffffff non-portable at (eval 1) line 3.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings ;
- eval '
- my $a = oct "0xfffffffffffffffffg" ;
- '; print STDERR $@ ;
-}
-EXPECT
-Integer overflow in hexadecimal number at (eval 1) line 2.
-Illegal hexadecimal digit 'g' ignored at (eval 1) line 2.
-Hexadecimal number > 0xffffffff non-portable at (eval 1) line 2.
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings;
- eval '
- no warnings ;
- my $a = oct "0xfffffffffffffffffg" ;
- '; print STDERR $@ ;
-}
-EXPECT
-
-########
-
-# Check scope of pragma with eval
-no warnings;
-{
- use warnings 'deprecated' ;
- eval '
- my $a = oct "0xfffffffffffffffffg" ;
- '; print STDERR $@;
-}
-EXPECT
-
diff --git a/contrib/perl5/t/pragma/warn/7fatal b/contrib/perl5/t/pragma/warn/7fatal
deleted file mode 100644
index ed585c2..0000000
--- a/contrib/perl5/t/pragma/warn/7fatal
+++ /dev/null
@@ -1,312 +0,0 @@
-Check FATAL functionality
-
-__END__
-
-# Check compile time warning
-use warnings FATAL => 'deprecated' ;
-{
- no warnings ;
- 1 if $a EQ $b ;
-}
-1 if $a EQ $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of EQ is deprecated at - line 8.
-########
-
-# Check compile time warning
-use warnings FATAL => 'all' ;
-{
- no warnings ;
- 1 if $a EQ $b ;
-}
-1 if $a EQ $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of EQ is deprecated at - line 8.
-########
-
-# Check runtime scope of pragma
-use warnings FATAL => 'uninitialized' ;
-{
- no warnings ;
- my $b ; chop $b ;
-}
-my $b ; chop $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 8.
-########
-
-# Check runtime scope of pragma
-use warnings FATAL => 'all' ;
-{
- no warnings ;
- my $b ; chop $b ;
-}
-my $b ; chop $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 8.
-########
-
-# Check runtime scope of pragma
-no warnings ;
-{
- use warnings FATAL => 'uninitialized' ;
- $a = sub { my $b ; chop $b ; }
-}
-&$a ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
-# Check runtime scope of pragma
-no warnings ;
-{
- use warnings FATAL => 'all' ;
- $a = sub { my $b ; chop $b ; }
-}
-&$a ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 6.
-########
-
---FILE-- abc
-1 if $a EQ $b ;
-1;
---FILE--
-use warnings FATAL => 'deprecated' ;
-require "./abc";
-EXPECT
-
-########
-
---FILE-- abc
-use warnings FATAL => 'deprecated' ;
-1;
---FILE--
-require "./abc";
-1 if $a EQ $b ;
-EXPECT
-
-########
-
---FILE-- abc
-use warnings 'deprecated' ;
-1 if $a EQ $b ;
-1;
---FILE--
-use warnings FATAL => 'uninitialized' ;
-require "./abc";
-my $a ; chop $a ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of EQ is deprecated at ./abc line 2.
-Use of uninitialized value in scalar chop at - line 3.
-########
-
---FILE-- abc.pm
-use warnings 'deprecated' ;
-1 if $a EQ $b ;
-1;
---FILE--
-use warnings FATAL => 'uninitialized' ;
-use abc;
-my $a ; chop $a ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of EQ is deprecated at abc.pm line 2.
-Use of uninitialized value in scalar chop at - line 3.
-########
-
-# Check scope of pragma with eval
-no warnings ;
-eval {
- use warnings FATAL => 'uninitialized' ;
- my $b ; chop $b ;
-}; print STDERR "-- $@" ;
-my $b ; chop $b ;
-print STDERR "The End.\n" ;
-EXPECT
--- Use of uninitialized value in scalar chop at - line 6.
-The End.
-########
-
-# Check scope of pragma with eval
-use warnings FATAL => 'uninitialized' ;
-eval {
- my $b ; chop $b ;
-}; print STDERR "-- $@" ;
-my $b ; chop $b ;
-print STDERR "The End.\n" ;
-EXPECT
--- Use of uninitialized value in scalar chop at - line 5.
-Use of uninitialized value in scalar chop at - line 7.
-########
-
-# Check scope of pragma with eval
-use warnings FATAL => 'uninitialized' ;
-eval {
- no warnings ;
- my $b ; chop $b ;
-}; print STDERR $@ ;
-my $b ; chop $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 8.
-########
-
-# Check scope of pragma with eval
-no warnings ;
-eval {
- use warnings FATAL => 'deprecated' ;
- 1 if $a EQ $b ;
-}; print STDERR "-- $@" ;
-1 if $a EQ $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of EQ is deprecated at - line 6.
-########
-
-# Check scope of pragma with eval
-use warnings FATAL => 'deprecated' ;
-eval {
- 1 if $a EQ $b ;
-}; print STDERR "-- $@" ;
-1 if $a EQ $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of EQ is deprecated at - line 5.
-########
-
-# Check scope of pragma with eval
-use warnings FATAL => 'deprecated' ;
-eval {
- no warnings ;
- 1 if $a EQ $b ;
-}; print STDERR $@ ;
-1 if $a EQ $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of EQ is deprecated at - line 8.
-########
-
-# Check scope of pragma with eval
-no warnings ;
-eval {
- use warnings FATAL => 'deprecated' ;
-}; print STDERR $@ ;
-1 if $a EQ $b ;
-print STDERR "The End.\n" ;
-EXPECT
-The End.
-########
-
-# Check scope of pragma with eval
-no warnings ;
-eval q[
- use warnings FATAL => 'uninitialized' ;
- my $b ; chop $b ;
-]; print STDERR "-- $@";
-my $b ; chop $b ;
-print STDERR "The End.\n" ;
-EXPECT
--- Use of uninitialized value in scalar chop at (eval 1) line 3.
-The End.
-########
-
-# Check scope of pragma with eval
-use warnings FATAL => 'uninitialized' ;
-eval '
- my $b ; chop $b ;
-'; print STDERR "-- $@" ;
-my $b ; chop $b ;
-print STDERR "The End.\n" ;
-EXPECT
--- Use of uninitialized value in scalar chop at (eval 1) line 2.
-Use of uninitialized value in scalar chop at - line 7.
-########
-
-# Check scope of pragma with eval
-use warnings FATAL => 'uninitialized' ;
-eval '
- no warnings ;
- my $b ; chop $b ;
-'; print STDERR $@ ;
-my $b ; chop $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of uninitialized value in scalar chop at - line 8.
-########
-
-# Check scope of pragma with eval
-no warnings ;
-eval q[
- use warnings FATAL => 'deprecated' ;
- 1 if $a EQ $b ;
-]; print STDERR "-- $@";
-1 if $a EQ $b ;
-print STDERR "The End.\n" ;
-EXPECT
--- Use of EQ is deprecated at (eval 1) line 3.
-The End.
-########
-
-# Check scope of pragma with eval
-use warnings FATAL => 'deprecated' ;
-eval '
- 1 if $a EQ $b ;
-'; print STDERR "-- $@";
-print STDERR "The End.\n" ;
-EXPECT
--- Use of EQ is deprecated at (eval 1) line 2.
-The End.
-########
-
-# Check scope of pragma with eval
-use warnings FATAL => 'deprecated' ;
-eval '
- no warnings ;
- 1 if $a EQ $b ;
-'; print STDERR "-- $@";
-1 if $a EQ $b ;
-print STDERR "The End.\n" ;
-EXPECT
-Use of EQ is deprecated at - line 8.
-########
-
-use warnings 'void' ;
-
-time ;
-
-{
- use warnings FATAL => qw(void) ;
- length "abc" ;
-}
-
-join "", 1,2,3 ;
-
-print "done\n" ;
-EXPECT
-Useless use of time in void context at - line 4.
-Useless use of length in void context at - line 8.
-########
-
-use warnings ;
-
-time ;
-
-{
- use warnings FATAL => qw(void) ;
- length "abc" ;
-}
-
-join "", 1,2,3 ;
-
-print "done\n" ;
-EXPECT
-Useless use of time in void context at - line 4.
-Useless use of length in void context at - line 8.
diff --git a/contrib/perl5/t/pragma/warn/8signal b/contrib/perl5/t/pragma/warn/8signal
deleted file mode 100644
index d480f19..0000000
--- a/contrib/perl5/t/pragma/warn/8signal
+++ /dev/null
@@ -1,18 +0,0 @@
-Check interaction of __WARN__, __DIE__ & lexical Warnings
-
-TODO
-
-__END__
-# 8signal
-BEGIN { $| = 1; $SIG{__WARN__} = sub { print "WARN -- @_" } }
-BEGIN { $SIG{__DIE__} = sub { print "DIE -- @_" } }
-1 if 1 EQ 2 ;
-use warnings qw(deprecated) ;
-1 if 1 EQ 2 ;
-use warnings FATAL => qw(deprecated) ;
-1 if 1 EQ 2 ;
-print "The End.\n" ;
-EXPECT
-WARN -- Use of EQ is deprecated at - line 6.
-DIE -- Use of EQ is deprecated at - line 8.
-Use of EQ is deprecated at - line 8.
diff --git a/contrib/perl5/t/pragma/warn/9enabled b/contrib/perl5/t/pragma/warn/9enabled
deleted file mode 100755
index f5579b2..0000000
--- a/contrib/perl5/t/pragma/warn/9enabled
+++ /dev/null
@@ -1,1162 +0,0 @@
-Check warnings::enabled & warnings::warn
-
-__END__
-
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-print "ok1\n" if ! warnings::enabled('all') ;
-print "ok2\n" if ! warnings::enabled("io") ;
-1;
---FILE--
-no warnings;
-use abc ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-print "ok1\n" if !warnings::enabled('all') ;
-print "ok2\n" if warnings::enabled("syntax") ;
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'syntax' ;
-print "ok1\n" if warnings::enabled('io') ;
-print "ok2\n" if ! warnings::enabled("syntax") ;
-1;
---FILE--
-use warnings 'io' ;
-use abc ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc
-no warnings ;
-print "ok1\n" if !warnings::enabled('all') ;
-print "ok2\n" if warnings::enabled("syntax") ;
-1;
---FILE--
-use warnings 'syntax' ;
-require "abc" ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc
-use warnings 'syntax' ;
-print "ok1\n" if ! warnings::enabled('all') ;
-print "ok2\n" if ! warnings::enabled("syntax") ;
-print "ok3\n" if warnings::enabled("io") ;
-1;
---FILE--
-use warnings 'io' ;
-require "abc" ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-sub check {
- print "ok1\n" if !warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-sub check {
- print "ok1\n" if ! warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if ! warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc
-package abc ;
-no warnings ;
-sub check {
- print "ok1\n" if !warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-require "abc" ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc
-package abc ;
-use warnings 'io' ;
-sub check {
- print "ok1\n" if ! warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if ! warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-require "abc" ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-print "ok1\n" if ! warnings::enabled('all') ;
-print "ok2\n" if ! warnings::enabled("io") ;
-1;
---FILE-- def.pm
-no warnings;
-use abc ;
-1;
---FILE--
-use warnings;
-use def ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-print "ok1\n" if ! warnings::enabled('all') ;
-print "ok2\n" if warnings::enabled("syntax") ;
-print "ok3\n" if !warnings::enabled("io") ;
-1;
---FILE-- def.pm
-use warnings 'syntax' ;
-print "ok4\n" if !warnings::enabled('all') ;
-print "ok5\n" if warnings::enabled("io") ;
-use abc ;
-1;
---FILE--
-use warnings 'io' ;
-use def ;
-EXPECT
-ok1
-ok2
-ok3
-ok4
-ok5
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-sub check {
- print "ok1\n" if !warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-eval { abc::check() ; };
-print $@ ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-sub check {
- print "ok1\n" if ! warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if ! warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-eval { abc::check() ; } ;
-print $@ ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc
-package abc ;
-no warnings ;
-sub check {
- print "ok1\n" if !warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-require "abc" ;
-eval { abc::check() ; } ;
-print $@ ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc
-package abc ;
-use warnings 'io' ;
-sub check {
- print "ok1\n" if !warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-require "abc" ;
-eval { use warnings 'io' ; abc::check() ; };
-abc::check() ;
-print $@ ;
-EXPECT
-ok1
-ok2
-ok3
-ok1
-ok2
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-sub check {
- print "ok1\n" if ! warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if ! warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-sub fred { abc::check() }
-fred() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-sub check {
- print "ok1\n" if ! warnings::enabled('all') ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-sub fred { no warnings ; abc::check() }
-fred() ;
-EXPECT
-ok1
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'misc' ;
-sub check {
- print "ok1\n" if ! warnings::enabled('all') ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if warnings::enabled("io") ;
- print "ok4\n" if ! warnings::enabled("misc") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-sub fred { use warnings 'io' ; abc::check() }
-fred() ;
-EXPECT
-ok1
-ok2
-ok3
-ok4
-########
-
-# check warnings::warn
-use warnings ;
-eval { warnings::warn() } ;
-print $@ ;
-eval { warnings::warn("fred", "joe") } ;
-print $@ ;
-EXPECT
-Usage: warnings::warn([category,] 'message') at - line 4
-unknown warnings category 'fred' at - line 6
-########
-
-# check warnings::warnif
-use warnings ;
-eval { warnings::warnif() } ;
-print $@ ;
-eval { warnings::warnif("fred", "joe") } ;
-print $@ ;
-EXPECT
-Usage: warnings::warnif([category,] 'message') at - line 4
-unknown warnings category 'fred' at - line 6
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'misc' ;
-sub check { warnings::warn("io", "hello") }
-1;
---FILE--
-use warnings "io" ;
-use abc;
-abc::check() ;
-EXPECT
-hello at - line 3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'misc' ;
-sub check { warnings::warn("misc", "hello") }
-1;
---FILE--
-use warnings "io" ;
-use abc;
-abc::check() ;
-EXPECT
-hello at - line 3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'misc' ;
-sub check { warnings::warn("io", "hello") }
-1;
---FILE--
-use warnings qw( FATAL deprecated ) ;
-use abc;
-eval { abc::check() ; } ;
-print "[[$@]]\n";
-EXPECT
-hello at - line 3
- eval {...} called at - line 3
-[[]]
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'misc' ;
-sub check { warnings::warn("io", "hello") }
-1;
---FILE--
-use warnings qw( FATAL io ) ;
-use abc;
-eval { abc::check() ; } ;
-print "[[$@]]\n";
-EXPECT
-[[hello at - line 3
- eval {...} called at - line 3
-]]
-########
--W
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-print "ok1\n" if warnings::enabled("io") ;
-print "ok2\n" if warnings::enabled("all") ;
-1;
---FILE--
-no warnings;
-use abc ;
-EXPECT
-ok1
-ok2
-########
--X
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-print "ok1\n" if !warnings::enabled("io") ;
-print "ok2\n" if !warnings::enabled("all") ;
-1;
---FILE--
-use warnings;
-use abc ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-sub check {
- print "ok\n" if ! warnings::enabled() ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-abc::check() ;
-EXPECT
-package 'abc' not registered for warnings at abc.pm line 4
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-sub check {
- warnings::warn("fred") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-abc::check() ;
-EXPECT
-package 'abc' not registered for warnings at abc.pm line 4
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-sub check {
- warnings::warnif("fred") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-abc::check() ;
-EXPECT
-package 'abc' not registered for warnings at abc.pm line 4
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-use warnings::register ;
-sub check {
- print "ok1\n" if warnings::enabled ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if !warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-use warnings 'abc' ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-use warnings::register ;
-sub check {
- print "ok1\n" if !warnings::enabled ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if !warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-use warnings::register ;
-sub check {
- print "ok1\n" if warnings::enabled ;
- print "ok2\n" if warnings::enabled("syntax") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-use warnings 'abc' ;
-eval { abc::check() ; };
-print $@ ;
-EXPECT
-ok1
-ok2
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-use warnings::register ;
-sub check {
- print "ok1\n" if !warnings::enabled ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if !warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-eval { abc::check() ; } ;
-print $@ ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-use warnings::register ;
-sub check {
- print "ok1\n" if warnings::enabled ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if !warnings::enabled("io") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-use warnings 'abc' ;
-sub fred { abc::check() }
-fred() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'io' ;
-use warnings::register ;
-sub check {
- print "ok1\n" if ! warnings::enabled ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-sub fred { no warnings ; abc::check() }
-fred() ;
-EXPECT
-ok1
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'misc' ;
-use warnings::register;
-sub check {
- print "ok1\n" if warnings::enabled ;
- print "ok2\n" if warnings::enabled("syntax") ;
- print "ok3\n" if warnings::enabled("io") ;
- print "ok4\n" if ! warnings::enabled("misc") ;
-}
-1;
---FILE--
-use warnings 'syntax' ;
-use abc ;
-use warnings 'abc' ;
-sub fred { use warnings 'io' ; abc::check() }
-fred() ;
-EXPECT
-ok1
-ok2
-ok3
-ok4
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings 'misc' ;
-use warnings::register;
-sub check { warnings::warn("hello") }
-1;
---FILE--
-use abc;
-use warnings "abc" ;
-abc::check() ;
-EXPECT
-hello at - line 3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings::register;
-sub check { warnings::warn("hello") }
-1;
---FILE--
-use abc;
-abc::check() ;
-EXPECT
-hello at - line 2
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings::register ;
-sub check { warnings::warn("hello") }
-1;
---FILE--
-use abc;
-use warnings qw( FATAL deprecated ) ;
-eval { abc::check() ; } ;
-print "[[$@]]\n";
-EXPECT
-hello at - line 3
- eval {...} called at - line 3
-[[]]
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings::register ;
-sub check { warnings::warn("hello") }
-1;
---FILE--
-use abc;
-use warnings qw( FATAL abc ) ;
-eval { abc::check() ; } ;
-print "[[$@]]\n";
-EXPECT
-[[hello at - line 3
- eval {...} called at - line 3
-]]
-########
--W
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-use warnings::register ;
-sub check {
- print "ok1\n" if warnings::enabled() ;
- print "ok2\n" if warnings::enabled("io") ;
- print "ok3\n" if warnings::enabled("all") ;
-}
-1;
---FILE--
-no warnings;
-use abc ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
--X
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-use warnings::register ;
-sub check {
- print "ok1\n" if !warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
-}
-1;
---FILE--
-no warnings;
-use abc ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-use warnings::register ;
-sub check {
- print "ok1\n" if warnings::enabled() ;
- print "ok2\n" if warnings::enabled("io") ;
- print "ok3\n" if warnings::enabled("all") ;
-}
-1;
---FILE--
-use warnings 'all';
-use abc ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-use warnings::register ;
-sub check {
- print "ok1\n" if !warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
-}
-1;
---FILE--
-use abc ;
-no warnings ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-use warnings::register ;
-sub check {
- print "ok1\n" if !warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
- warnings::warnif("my message 1") ;
- warnings::warnif('abc', "my message 2") ;
- warnings::warnif('io', "my message 3") ;
- warnings::warnif('all', "my message 4") ;
-}
-1;
---FILE--
-use abc ;
-use warnings 'abc';
-no warnings ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-use warnings "io" ;
-use warnings::register ;
-sub check {
- print "abc self" . (warnings::enabled() ? "" : " not") . " enabled\n" ;
- print "abc def" . (warnings::enabled('def') ? "" : " not") . " enabled\n" ;
- print "abc all" . (warnings::enabled('all') ? "" : " not") . " enabled\n" ;
-}
-1;
---FILE-- def.pm
-package def ;
-use warnings "io" ;
-use warnings::register ;
-sub check {
- print "def self" . (warnings::enabled() ? "" : " not") . " enabled\n" ;
- print "def abc" . (warnings::enabled('abc') ? "" : " not") . " enabled\n" ;
- print "def all" . (warnings::enabled('all') ? "" : " not") . " enabled\n" ;
-}
-1;
---FILE--
-use abc ;
-use def ;
-use warnings 'abc';
-abc::check() ;
-def::check() ;
-no warnings 'abc' ;
-use warnings 'def' ;
-abc::check() ;
-def::check() ;
-use warnings 'abc' ;
-use warnings 'def' ;
-abc::check() ;
-def::check() ;
-no warnings 'abc' ;
-no warnings 'def' ;
-abc::check() ;
-def::check() ;
-use warnings;
-abc::check() ;
-def::check() ;
-no warnings 'abc' ;
-abc::check() ;
-def::check() ;
-EXPECT
-abc self enabled
-abc def not enabled
-abc all not enabled
-def self not enabled
-def abc enabled
-def all not enabled
-abc self not enabled
-abc def enabled
-abc all not enabled
-def self enabled
-def abc not enabled
-def all not enabled
-abc self enabled
-abc def enabled
-abc all not enabled
-def self enabled
-def abc enabled
-def all not enabled
-abc self not enabled
-abc def not enabled
-abc all not enabled
-def self not enabled
-def abc not enabled
-def all not enabled
-abc self enabled
-abc def enabled
-abc all enabled
-def self enabled
-def abc enabled
-def all enabled
-abc self not enabled
-abc def enabled
-abc all not enabled
-def self enabled
-def abc not enabled
-def all not enabled
-########
--w
---FILE-- abc.pm
-package abc ;
-no warnings ;
-use warnings::register ;
-sub check {
- print "ok1\n" if warnings::enabled() ;
- print "ok2\n" if warnings::enabled("io") ;
- print "ok3\n" if warnings::enabled("all") ;
-}
-1;
---FILE--
-use abc ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
--w
---FILE-- abc.pm
-package abc ;
-no warnings ;
-use warnings::register ;
-sub check {
- print "ok1\n" if !warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
-}
-1;
---FILE--
-use abc ;
-use warnings 'abc';
-no warnings ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-use warnings::register ;
-sub check {
- print "ok1\n" if !warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
- warnings::warnif("my message 1") ;
- warnings::warnif('abc', "my message 2") ;
- warnings::warnif('io', "my message 3") ;
- warnings::warnif('all', "my message 4") ;
-}
-1;
---FILE--
-use abc ;
-use warnings 'abc';
-no warnings ;
-BEGIN { $^W = 1 ; }
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-package abc ;
-no warnings ;
-use warnings::register ;
-sub check {
- print "ok1\n" if !warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
-}
-1;
---FILE--
-use abc ;
-use warnings 'abc';
-no warnings ;
-$^W = 1 ;
-abc::check() ;
-EXPECT
-ok1
-ok2
-ok3
-########
-
---FILE-- abc.pm
-$| = 1;
-package abc ;
-no warnings ;
-use warnings::register ;
-sub check {
- print "ok1\n" if warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
- print "ok4\n" if warnings::enabled("abc") ;
- warnings::warn("my message 1") ;
- warnings::warnif("my message 2") ;
- warnings::warnif('abc', "my message 3") ;
- warnings::warnif('io', "my message 4") ;
- warnings::warnif('all', "my message 5") ;
-}
-sub in2 { no warnings ; check() }
-sub in1 { no warnings ; in2() }
-1;
---FILE--
-use abc ;
-use warnings 'abc';
-abc::in1() ;
-EXPECT
-ok1
-ok2
-ok3
-ok4
-my message 1 at - line 3
-my message 2 at - line 3
-my message 3 at - line 3
-########
-
---FILE-- def.pm
-package def ;
-no warnings ;
-use warnings::register ;
-sub check {
- print "ok1\n" if warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
- print "ok4\n" if warnings::enabled("def") ;
- warnings::warn("my message 1") ;
- warnings::warnif("my message 2") ;
- warnings::warnif('def', "my message 3") ;
- warnings::warnif('io', "my message 4") ;
- warnings::warnif('all', "my message 5") ;
-}
-sub in2 { no warnings ; check() }
-sub in1 { no warnings ; in2() }
-1;
---FILE-- abc.pm
-$| = 1;
-package abc ;
-use def ;
-use warnings 'def';
-sub in1 { def::in1() ; }
-1;
---FILE--
-use abc ;
-no warnings;
-abc::in1() ;
-EXPECT
-ok1
-ok2
-ok3
-ok4
-my message 1 at abc.pm line 5
- abc::in1() called at - line 3
-my message 2 at abc.pm line 5
- abc::in1() called at - line 3
-my message 3 at abc.pm line 5
- abc::in1() called at - line 3
-########
-
---FILE-- def.pm
-$| = 1;
-package def ;
-no warnings ;
-use warnings::register ;
-require Exporter;
-@ISA = qw( Exporter ) ;
-@EXPORT = qw( in1 ) ;
-sub check {
- print "ok1\n" if warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
- print "ok4\n" if warnings::enabled("abc") ;
- print "ok5\n" if !warnings::enabled("def") ;
- warnings::warn("my message 1") ;
- warnings::warnif("my message 2") ;
- warnings::warnif('abc', "my message 3") ;
- warnings::warnif('def', "my message 4") ;
- warnings::warnif('io', "my message 5") ;
- warnings::warnif('all', "my message 6") ;
-}
-sub in2 { no warnings ; check() }
-sub in1 { no warnings ; in2() }
-1;
---FILE-- abc.pm
-package abc ;
-use warnings::register ;
-use def ;
-#@ISA = qw(def) ;
-1;
---FILE--
-use abc ;
-no warnings;
-use warnings 'abc';
-abc::in1() ;
-EXPECT
-ok2
-ok3
-ok4
-ok5
-my message 1 at - line 4
-my message 3 at - line 4
-########
-
---FILE-- def.pm
-package def ;
-no warnings ;
-use warnings::register ;
-
-sub new
-{
- my $class = shift ;
- bless [], $class ;
-}
-
-sub check
-{
- my $self = shift ;
- print "ok1\n" if !warnings::enabled() ;
- print "ok2\n" if !warnings::enabled("io") ;
- print "ok3\n" if !warnings::enabled("all") ;
- print "ok4\n" if warnings::enabled("abc") ;
- print "ok5\n" if !warnings::enabled("def") ;
- print "ok6\n" if warnings::enabled($self) ;
-
- warnings::warn("my message 1") ;
- warnings::warn($self, "my message 2") ;
-
- warnings::warnif("my message 3") ;
- warnings::warnif('abc', "my message 4") ;
- warnings::warnif('def', "my message 5") ;
- warnings::warnif('io', "my message 6") ;
- warnings::warnif('all', "my message 7") ;
- warnings::warnif($self, "my message 8") ;
-}
-sub in2
-{
- no warnings ;
- my $self = shift ;
- $self->check() ;
-}
-sub in1
-{
- no warnings ;
- my $self = shift ;
- $self->in2();
-}
-1;
---FILE-- abc.pm
-$| = 1;
-package abc ;
-use warnings::register ;
-use def ;
-@ISA = qw(def) ;
-sub new
-{
- my $class = shift ;
- bless [], $class ;
-}
-
-1;
---FILE--
-use abc ;
-no warnings;
-use warnings 'abc';
-$a = new abc ;
-$a->in1() ;
-print "**\n";
-$b = new def ;
-$b->in1() ;
-EXPECT
-ok1
-ok2
-ok3
-ok4
-ok5
-ok6
-my message 1 at - line 5
-my message 2 at - line 5
-my message 4 at - line 5
-my message 8 at - line 5
-**
-ok1
-ok2
-ok3
-ok4
-ok5
-my message 1 at - line 8
-my message 2 at - line 8
-my message 4 at - line 8
diff --git a/contrib/perl5/t/pragma/warn/av b/contrib/perl5/t/pragma/warn/av
deleted file mode 100644
index 79bd3b76..0000000
--- a/contrib/perl5/t/pragma/warn/av
+++ /dev/null
@@ -1,9 +0,0 @@
- av.c
-
- Mandatory Warnings ALL TODO
- ------------------
- av_reify called on tied array [av_reify]
-
- Attempt to clear deleted array [av_clear]
-
-__END__
diff --git a/contrib/perl5/t/pragma/warn/doio b/contrib/perl5/t/pragma/warn/doio
deleted file mode 100644
index 2a357e2..0000000
--- a/contrib/perl5/t/pragma/warn/doio
+++ /dev/null
@@ -1,209 +0,0 @@
- doio.c
-
- Can't open bidirectional pipe [Perl_do_open9]
- open(F, "| true |");
-
- Missing command in piped open [Perl_do_open9]
- open(F, "| ");
-
- Missing command in piped open [Perl_do_open9]
- open(F, " |");
-
- warn(warn_nl, "open"); [Perl_do_open9]
- open(F, "true\ncd")
-
- close() on unopened filehandle %s [Perl_do_close]
- $a = "fred";close("$a")
-
- tell() on closed filehandle [Perl_do_tell]
- $a = "fred";$a = tell($a)
-
- seek() on closed filehandle [Perl_do_seek]
- $a = "fred";$a = seek($a,1,1)
-
- sysseek() on closed filehandle [Perl_do_sysseek]
- $a = "fred";$a = seek($a,1,1)
-
- warn(warn_uninit); [Perl_do_print]
- print $a ;
-
- -x on closed filehandle %s [Perl_my_stat]
- close STDIN ; -x STDIN ;
-
- warn(warn_nl, "stat"); [Perl_my_stat]
- stat "ab\ncd"
-
- warn(warn_nl, "lstat"); [Perl_my_lstat]
- lstat "ab\ncd"
-
- Can't exec \"%s\": %s [Perl_do_aexec5]
-
- Can't exec \"%s\": %s [Perl_do_exec3]
-
- Filehandle %s opened only for output [Perl_do_eof]
- my $a = eof STDOUT
-
- Mandatory Warnings ALL TODO
- ------------------
- Can't do inplace edit: %s is not a regular file [Perl_nextargv]
- edit a directory
-
- Can't do inplace edit: %s would not be unique [Perl_nextargv]
- Can't rename %s to %s: %s, skipping file [Perl_nextargv]
- Can't rename %s to %s: %s, skipping file [Perl_nextargv]
- Can't remove %s: %s, skipping file [Perl_nextargv]
- Can't do inplace edit on %s: %s [Perl_nextargv]
-
-
-__END__
-# doio.c [Perl_do_open9]
-use warnings 'io' ;
-open(F, '|'.($^O eq 'VMS' ? 'mcr ':'')."$^X -e 1|");
-close(F);
-no warnings 'io' ;
-open(G, '|'.($^O eq 'VMS' ? 'mcr ':'')."$^X -e 1|");
-close(G);
-EXPECT
-Can't open bidirectional pipe at - line 3.
-########
-# doio.c [Perl_do_open9]
-use warnings 'io' ;
-open(F, "| ");
-no warnings 'io' ;
-open(G, "| ");
-EXPECT
-Missing command in piped open at - line 3.
-########
-# doio.c [Perl_do_open9]
-use warnings 'io' ;
-open(F, " |");
-no warnings 'io' ;
-open(G, " |");
-EXPECT
-Missing command in piped open at - line 3.
-########
-# doio.c [Perl_do_open9]
-use warnings 'io' ;
-open(F, "<true\ncd");
-no warnings 'io' ;
-open(G, "<true\ncd");
-EXPECT
-Unsuccessful open on filename containing newline at - line 3.
-########
-# doio.c [Perl_do_close] <<TODO
-use warnings 'unopened' ;
-close "fred" ;
-no warnings 'unopened' ;
-close "joe" ;
-EXPECT
-close() on unopened filehandle fred at - line 3.
-########
-# doio.c [Perl_do_tell Perl_do_seek Perl_do_sysseek Perl_my_stat]
-use warnings 'io' ;
-close STDIN ;
-tell(STDIN);
-$a = seek(STDIN,1,1);
-$a = sysseek(STDIN,1,1);
--x STDIN ;
-stat(STDIN) ;
-$a = "fred";
-tell($a);
-seek($a,1,1);
-sysseek($a,1,1);
--x $a; # ok
-stat($a); # ok
-no warnings 'io' ;
-close STDIN ;
-tell(STDIN);
-$a = seek(STDIN,1,1);
-$a = sysseek(STDIN,1,1);
--x STDIN ;
-stat(STDIN) ;
-$a = "fred";
-tell($a);
-seek($a,1,1);
-sysseek($a,1,1);
--x $a;
-stat($a);
-EXPECT
-tell() on closed filehandle STDIN at - line 4.
-seek() on closed filehandle STDIN at - line 5.
-sysseek() on closed filehandle STDIN at - line 6.
--x on closed filehandle STDIN at - line 7.
-stat() on closed filehandle STDIN at - line 8.
-tell() on unopened filehandle at - line 10.
-seek() on unopened filehandle at - line 11.
-sysseek() on unopened filehandle at - line 12.
-########
-# doio.c [Perl_do_print]
-use warnings 'uninitialized' ;
-print $a ;
-no warnings 'uninitialized' ;
-print $b ;
-EXPECT
-Use of uninitialized value in print at - line 3.
-########
-# doio.c [Perl_my_stat Perl_my_lstat]
-use warnings 'io' ;
-stat "ab\ncd";
-lstat "ab\ncd";
-no warnings 'io' ;
-stat "ab\ncd";
-lstat "ab\ncd";
-EXPECT
-Unsuccessful stat on filename containing newline at - line 3.
-Unsuccessful stat on filename containing newline at - line 4.
-########
-# doio.c [Perl_do_aexec5]
-use warnings 'io' ;
-exec "lskdjfalksdjfdjfkls","" ;
-no warnings 'io' ;
-exec "lskdjfalksdjfdjfkls","" ;
-EXPECT
-OPTION regex
-Can't exec "lskdjfalksdjfdjfkls": .+
-########
-# doio.c [Perl_do_exec3]
-use warnings 'io' ;
-exec "lskdjfalksdjfdjfkls", "abc" ;
-no warnings 'io' ;
-exec "lskdjfalksdjfdjfkls", "abc" ;
-EXPECT
-OPTION regex
-Can't exec "lskdjfalksdjfdjfkls(:? abc)?": .+
-########
-# doio.c [Perl_nextargv]
-$^W = 0 ;
-my $filename = "./temp.dir" ;
-mkdir $filename, 0777
- or die "Cannot create directory $filename: $!\n" ;
-{
- local (@ARGV) = ($filename) ;
- local ($^I) = "" ;
- my $x = <> ;
-}
-{
- no warnings 'inplace' ;
- local (@ARGV) = ($filename) ;
- local ($^I) = "" ;
- my $x = <> ;
-}
-{
- use warnings 'inplace' ;
- local (@ARGV) = ($filename) ;
- local ($^I) = "" ;
- my $x = <> ;
-}
-rmdir $filename ;
-EXPECT
-Can't do inplace edit: ./temp.dir is not a regular file at - line 9.
-Can't do inplace edit: ./temp.dir is not a regular file at - line 21.
-
-########
-# doio.c [Perl_do_eof]
-use warnings 'io' ;
-my $a = eof STDOUT ;
-no warnings 'io' ;
-$a = eof STDOUT ;
-EXPECT
-Filehandle STDOUT opened only for output at - line 3.
diff --git a/contrib/perl5/t/pragma/warn/doop b/contrib/perl5/t/pragma/warn/doop
deleted file mode 100644
index 5803b44..0000000
--- a/contrib/perl5/t/pragma/warn/doop
+++ /dev/null
@@ -1,6 +0,0 @@
-# doop.c
-use utf8 ;
-$_ = "\x80 \xff" ;
-chop ;
-EXPECT
-########
diff --git a/contrib/perl5/t/pragma/warn/gv b/contrib/perl5/t/pragma/warn/gv
deleted file mode 100644
index 5ed4eca..0000000
--- a/contrib/perl5/t/pragma/warn/gv
+++ /dev/null
@@ -1,54 +0,0 @@
- gv.c AOK
-
- Can't locate package %s for @%s::ISA
- @ISA = qw(Fred); joe()
-
- Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated
- sub Other::AUTOLOAD { 1 } sub Other::fred {}
- @ISA = qw(Other) ;
- fred() ;
-
- Use of $# is deprecated
- Use of $* is deprecated
-
- $a = ${"#"} ;
- $a = ${"*"} ;
-
- Mandatory Warnings ALL TODO
- ------------------
-
- Had to create %s unexpectedly [gv_fetchpv]
- Attempt to free unreferenced glob pointers [gp_free]
-
-__END__
-# gv.c
-use warnings 'misc' ;
-@ISA = qw(Fred); joe()
-EXPECT
-Can't locate package Fred for @main::ISA at - line 3.
-Undefined subroutine &main::joe called at - line 3.
-########
-# gv.c
-no warnings 'misc' ;
-@ISA = qw(Fred); joe()
-EXPECT
-Undefined subroutine &main::joe called at - line 3.
-########
-# gv.c
-sub Other::AUTOLOAD { 1 } sub Other::fred {}
-@ISA = qw(Other) ;
-use warnings 'deprecated' ;
-fred() ;
-EXPECT
-Use of inherited AUTOLOAD for non-method main::fred() is deprecated at - line 5.
-########
-# gv.c
-use warnings 'deprecated' ;
-$a = ${"#"};
-$a = ${"*"};
-no warnings 'deprecated' ;
-$a = ${"#"};
-$a = ${"*"};
-EXPECT
-Use of $# is deprecated at - line 3.
-Use of $* is deprecated at - line 4.
diff --git a/contrib/perl5/t/pragma/warn/hv b/contrib/perl5/t/pragma/warn/hv
deleted file mode 100644
index c9eec02..0000000
--- a/contrib/perl5/t/pragma/warn/hv
+++ /dev/null
@@ -1,8 +0,0 @@
- hv.c
-
-
- Mandatory Warnings ALL TODO
- ------------------
- Attempt to free non-existent shared string [unsharepvn]
-
-__END__
diff --git a/contrib/perl5/t/pragma/warn/malloc b/contrib/perl5/t/pragma/warn/malloc
deleted file mode 100644
index 2f8b096..0000000
--- a/contrib/perl5/t/pragma/warn/malloc
+++ /dev/null
@@ -1,9 +0,0 @@
- malloc.c
-
-
- Mandatory Warnings ALL TODO
- ------------------
- %s free() ignored [Perl_mfree]
- %s", "Bad free() ignored [Perl_mfree]
-
-__END__
diff --git a/contrib/perl5/t/pragma/warn/mg b/contrib/perl5/t/pragma/warn/mg
deleted file mode 100644
index a8f9dbc..0000000
--- a/contrib/perl5/t/pragma/warn/mg
+++ /dev/null
@@ -1,44 +0,0 @@
- mg.c AOK
-
- No such signal: SIG%s
- $SIG{FRED} = sub {}
-
- SIG%s handler \"%s\" not defined.
- $SIG{"INT"} = "ok3"; kill "INT",$$;
-
- Mandatory Warnings TODO
- ------------------
- Can't break at that line [magic_setdbline]
-
-__END__
-# mg.c
-use warnings 'signal' ;
-$SIG{FRED} = sub {};
-EXPECT
-No such signal: SIGFRED at - line 3.
-########
-# mg.c
-no warnings 'signal' ;
-$SIG{FRED} = sub {};
-EXPECT
-
-########
-# mg.c
-use warnings 'signal' ;
-if ($^O eq 'MSWin32' || $^O eq 'VMS') {
- print "SKIPPED\n# $^O, can't kill() to raise()\n"; exit;
-}
-$|=1;
-$SIG{"INT"} = "fred"; kill "INT",$$;
-EXPECT
-SIGINT handler "fred" not defined.
-########
-# mg.c
-no warnings 'signal' ;
-if ($^O eq 'MSWin32' || $^O eq 'VMS') {
- print "SKIPPED\n# win32, can't kill() to raise()\n"; exit;
-}
-$|=1;
-$SIG{"INT"} = "fred"; kill "INT",$$;
-EXPECT
-
diff --git a/contrib/perl5/t/pragma/warn/op b/contrib/perl5/t/pragma/warn/op
deleted file mode 100644
index 1f41a98..0000000
--- a/contrib/perl5/t/pragma/warn/op
+++ /dev/null
@@ -1,872 +0,0 @@
- op.c AOK
-
- "my" variable %s masks earlier declaration in same scope
- my $x;
- my $x ;
-
- Variable "%s" may be unavailable
- sub x {
- my $x;
- sub y {
- $x
- }
- }
-
- Variable "%s" will not stay shared
- sub x {
- my $x;
- sub y {
- sub { $x }
- }
- }
-
- Found = in conditional, should be ==
- 1 if $a = 1 ;
-
- Use of implicit split to @_ is deprecated
- split ;
-
- Use of implicit split to @_ is deprecated
- $a = split ;
-
- Useless use of time in void context
- Useless use of a variable in void context
- Useless use of a constant in void context
- time ;
- $a ;
- "abc"
-
- Applying %s to %s will act on scalar(%s)
- my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
- @a =~ /abc/ ;
- @a =~ s/a/b/ ;
- @a =~ tr/a/b/ ;
- @$b =~ /abc/ ;
- @$b =~ s/a/b/ ;
- @$b =~ tr/a/b/ ;
- %a =~ /abc/ ;
- %a =~ s/a/b/ ;
- %a =~ tr/a/b/ ;
- %$c =~ /abc/ ;
- %$c =~ s/a/b/ ;
- %$c =~ tr/a/b/ ;
-
-
- Parentheses missing around "my" list at -e line 1.
- my $a, $b = (1,2);
-
- Parentheses missing around "local" list at -e line 1.
- local $a, $b = (1,2);
-
- Bareword found in conditional at -e line 1.
- use warnings 'bareword'; my $x = print(ABC || 1);
-
- Value of %s may be \"0\"; use \"defined\"
- $x = 1 if $x = <FH> ;
- $x = 1 while $x = <FH> ;
-
- Subroutine fred redefined at -e line 1.
- sub fred{1;} sub fred{1;}
-
- Constant subroutine %s redefined
- sub fred() {1;} sub fred() {1;}
-
- Format FRED redefined at /tmp/x line 5.
- format FRED =
- .
- format FRED =
- .
-
- Array @%s missing the @ in argument %d of %s()
- push fred ;
-
- Hash %%%s missing the %% in argument %d of %s()
- keys joe ;
-
- Statement unlikely to be reached
- (Maybe you meant system() when you said exec()?
- exec "true" ; my $a
-
- defined(@array) is deprecated
- (Maybe you should just omit the defined()?)
- my @a ; defined @a ;
- defined (@a = (1,2,3)) ;
-
- defined(%hash) is deprecated
- (Maybe you should just omit the defined()?)
- my %h ; defined %h ;
-
- /---/ should probably be written as "---"
- join(/---/, @foo);
-
- %s() called too early to check prototype [Perl_peep]
- fred() ; sub fred ($$) {}
-
-
- Mandatory Warnings
- ------------------
- Prototype mismatch: [cv_ckproto]
- sub fred() ;
- sub fred($) {}
-
- %s never introduced [pad_leavemy] TODO
- Runaway prototype [newSUB] TODO
- oops: oopsAV [oopsAV] TODO
- oops: oopsHV [oopsHV] TODO
-
-
-__END__
-# op.c
-use warnings 'misc' ;
-my $x ;
-my $x ;
-no warnings 'misc' ;
-my $x ;
-EXPECT
-"my" variable $x masks earlier declaration in same scope at - line 4.
-########
-# op.c
-use warnings 'closure' ;
-sub x {
- my $x;
- sub y {
- $x
- }
- }
-EXPECT
-Variable "$x" will not stay shared at - line 7.
-########
-# op.c
-no warnings 'closure' ;
-sub x {
- my $x;
- sub y {
- $x
- }
- }
-EXPECT
-
-########
-# op.c
-use warnings 'closure' ;
-sub x {
- our $x;
- sub y {
- $x
- }
- }
-EXPECT
-
-########
-# op.c
-use warnings 'closure' ;
-sub x {
- my $x;
- sub y {
- sub { $x }
- }
- }
-EXPECT
-Variable "$x" may be unavailable at - line 6.
-########
-# op.c
-no warnings 'closure' ;
-sub x {
- my $x;
- sub y {
- sub { $x }
- }
- }
-EXPECT
-
-########
-# op.c
-use warnings 'syntax' ;
-1 if $a = 1 ;
-no warnings 'syntax' ;
-1 if $a = 1 ;
-EXPECT
-Found = in conditional, should be == at - line 3.
-########
-# op.c
-use warnings 'deprecated' ;
-split ;
-no warnings 'deprecated' ;
-split ;
-EXPECT
-Use of implicit split to @_ is deprecated at - line 3.
-########
-# op.c
-use warnings 'deprecated' ;
-$a = split ;
-no warnings 'deprecated' ;
-$a = split ;
-EXPECT
-Use of implicit split to @_ is deprecated at - line 3.
-########
-# op.c
-use warnings 'void' ; close STDIN ;
-1 x 3 ; # OP_REPEAT
- # OP_GVSV
-wantarray ; # OP_WANTARRAY
- # OP_GV
- # OP_PADSV
- # OP_PADAV
- # OP_PADHV
- # OP_PADANY
- # OP_AV2ARYLEN
-ref ; # OP_REF
-\@a ; # OP_REFGEN
-\$a ; # OP_SREFGEN
-defined $a ; # OP_DEFINED
-hex $a ; # OP_HEX
-oct $a ; # OP_OCT
-length $a ; # OP_LENGTH
-substr $a,1 ; # OP_SUBSTR
-vec $a,1,2 ; # OP_VEC
-index $a,1,2 ; # OP_INDEX
-rindex $a,1,2 ; # OP_RINDEX
-sprintf $a ; # OP_SPRINTF
-$a[0] ; # OP_AELEM
- # OP_AELEMFAST
-@a[0] ; # OP_ASLICE
-#values %a ; # OP_VALUES
-#keys %a ; # OP_KEYS
-$a{0} ; # OP_HELEM
-@a{0} ; # OP_HSLICE
-unpack "a", "a" ; # OP_UNPACK
-pack $a,"" ; # OP_PACK
-join "" ; # OP_JOIN
-(@a)[0,1] ; # OP_LSLICE
- # OP_ANONLIST
- # OP_ANONHASH
-sort(1,2) ; # OP_SORT
-reverse(1,2) ; # OP_REVERSE
- # OP_RANGE
- # OP_FLIP
-(1 ..2) ; # OP_FLOP
-caller ; # OP_CALLER
-fileno STDIN ; # OP_FILENO
-eof STDIN ; # OP_EOF
-tell STDIN ; # OP_TELL
-readlink 1; # OP_READLINK
-time ; # OP_TIME
-localtime ; # OP_LOCALTIME
-gmtime ; # OP_GMTIME
-eval { getgrnam 1 }; # OP_GGRNAM
-eval { getgrgid 1 }; # OP_GGRGID
-eval { getpwnam 1 }; # OP_GPWNAM
-eval { getpwuid 1 }; # OP_GPWUID
-EXPECT
-Useless use of repeat (x) in void context at - line 3.
-Useless use of wantarray in void context at - line 5.
-Useless use of reference-type operator in void context at - line 12.
-Useless use of reference constructor in void context at - line 13.
-Useless use of single ref constructor in void context at - line 14.
-Useless use of defined operator in void context at - line 15.
-Useless use of hex in void context at - line 16.
-Useless use of oct in void context at - line 17.
-Useless use of length in void context at - line 18.
-Useless use of substr in void context at - line 19.
-Useless use of vec in void context at - line 20.
-Useless use of index in void context at - line 21.
-Useless use of rindex in void context at - line 22.
-Useless use of sprintf in void context at - line 23.
-Useless use of array element in void context at - line 24.
-Useless use of array slice in void context at - line 26.
-Useless use of hash element in void context at - line 29.
-Useless use of hash slice in void context at - line 30.
-Useless use of unpack in void context at - line 31.
-Useless use of pack in void context at - line 32.
-Useless use of join or string in void context at - line 33.
-Useless use of list slice in void context at - line 34.
-Useless use of sort in void context at - line 37.
-Useless use of reverse in void context at - line 38.
-Useless use of range (or flop) in void context at - line 41.
-Useless use of caller in void context at - line 42.
-Useless use of fileno in void context at - line 43.
-Useless use of eof in void context at - line 44.
-Useless use of tell in void context at - line 45.
-Useless use of readlink in void context at - line 46.
-Useless use of time in void context at - line 47.
-Useless use of localtime in void context at - line 48.
-Useless use of gmtime in void context at - line 49.
-Useless use of getgrnam in void context at - line 50.
-Useless use of getgrgid in void context at - line 51.
-Useless use of getpwnam in void context at - line 52.
-Useless use of getpwuid in void context at - line 53.
-########
-# op.c
-no warnings 'void' ; close STDIN ;
-1 x 3 ; # OP_REPEAT
- # OP_GVSV
-wantarray ; # OP_WANTARRAY
- # OP_GV
- # OP_PADSV
- # OP_PADAV
- # OP_PADHV
- # OP_PADANY
- # OP_AV2ARYLEN
-ref ; # OP_REF
-\@a ; # OP_REFGEN
-\$a ; # OP_SREFGEN
-defined $a ; # OP_DEFINED
-hex $a ; # OP_HEX
-oct $a ; # OP_OCT
-length $a ; # OP_LENGTH
-substr $a,1 ; # OP_SUBSTR
-vec $a,1,2 ; # OP_VEC
-index $a,1,2 ; # OP_INDEX
-rindex $a,1,2 ; # OP_RINDEX
-sprintf $a ; # OP_SPRINTF
-$a[0] ; # OP_AELEM
- # OP_AELEMFAST
-@a[0] ; # OP_ASLICE
-#values %a ; # OP_VALUES
-#keys %a ; # OP_KEYS
-$a{0} ; # OP_HELEM
-@a{0} ; # OP_HSLICE
-unpack "a", "a" ; # OP_UNPACK
-pack $a,"" ; # OP_PACK
-join "" ; # OP_JOIN
-(@a)[0,1] ; # OP_LSLICE
- # OP_ANONLIST
- # OP_ANONHASH
-sort(1,2) ; # OP_SORT
-reverse(1,2) ; # OP_REVERSE
- # OP_RANGE
- # OP_FLIP
-(1 ..2) ; # OP_FLOP
-caller ; # OP_CALLER
-fileno STDIN ; # OP_FILENO
-eof STDIN ; # OP_EOF
-tell STDIN ; # OP_TELL
-readlink 1; # OP_READLINK
-time ; # OP_TIME
-localtime ; # OP_LOCALTIME
-gmtime ; # OP_GMTIME
-eval { getgrnam 1 }; # OP_GGRNAM
-eval { getgrgid 1 }; # OP_GGRGID
-eval { getpwnam 1 }; # OP_GPWNAM
-eval { getpwuid 1 }; # OP_GPWUID
-EXPECT
-########
-# op.c
-use warnings 'void' ;
-for (@{[0]}) { "$_" } # check warning isn't duplicated
-no warnings 'void' ;
-for (@{[0]}) { "$_" } # check warning isn't duplicated
-EXPECT
-Useless use of string in void context at - line 3.
-########
-# op.c
-use warnings 'void' ;
-use Config ;
-BEGIN {
- if ( ! $Config{d_telldir}) {
- print <<EOM ;
-SKIPPED
-# telldir not present
-EOM
- exit
- }
-}
-telldir 1 ; # OP_TELLDIR
-no warnings 'void' ;
-telldir 1 ; # OP_TELLDIR
-EXPECT
-Useless use of telldir in void context at - line 13.
-########
-# op.c
-use warnings 'void' ;
-use Config ;
-BEGIN {
- if ( ! $Config{d_getppid}) {
- print <<EOM ;
-SKIPPED
-# getppid not present
-EOM
- exit
- }
-}
-getppid ; # OP_GETPPID
-no warnings 'void' ;
-getppid ; # OP_GETPPID
-EXPECT
-Useless use of getppid in void context at - line 13.
-########
-# op.c
-use warnings 'void' ;
-use Config ;
-BEGIN {
- if ( ! $Config{d_getpgrp}) {
- print <<EOM ;
-SKIPPED
-# getpgrp not present
-EOM
- exit
- }
-}
-getpgrp ; # OP_GETPGRP
-no warnings 'void' ;
-getpgrp ; # OP_GETPGRP
-EXPECT
-Useless use of getpgrp in void context at - line 13.
-########
-# op.c
-use warnings 'void' ;
-use Config ;
-BEGIN {
- if ( ! $Config{d_times}) {
- print <<EOM ;
-SKIPPED
-# times not present
-EOM
- exit
- }
-}
-times ; # OP_TMS
-no warnings 'void' ;
-times ; # OP_TMS
-EXPECT
-Useless use of times in void context at - line 13.
-########
-# op.c
-use warnings 'void' ;
-use Config ;
-BEGIN {
- if ( ! $Config{d_getprior} or $^O eq 'os2') { # Locks before fixpak22
- print <<EOM ;
-SKIPPED
-# getpriority not present
-EOM
- exit
- }
-}
-getpriority 1,2; # OP_GETPRIORITY
-no warnings 'void' ;
-getpriority 1,2; # OP_GETPRIORITY
-EXPECT
-Useless use of getpriority in void context at - line 13.
-########
-# op.c
-use warnings 'void' ;
-use Config ;
-BEGIN {
- if ( ! $Config{d_getlogin}) {
- print <<EOM ;
-SKIPPED
-# getlogin not present
-EOM
- exit
- }
-}
-getlogin ; # OP_GETLOGIN
-no warnings 'void' ;
-getlogin ; # OP_GETLOGIN
-EXPECT
-Useless use of getlogin in void context at - line 13.
-########
-# op.c
-use warnings 'void' ;
-use Config ; BEGIN {
-if ( ! $Config{d_socket}) {
- print <<EOM ;
-SKIPPED
-# getsockname not present
-# getpeername not present
-# gethostbyname not present
-# gethostbyaddr not present
-# gethostent not present
-# getnetbyname not present
-# getnetbyaddr not present
-# getnetent not present
-# getprotobyname not present
-# getprotobynumber not present
-# getprotoent not present
-# getservbyname not present
-# getservbyport not present
-# getservent not present
-EOM
- exit
-} }
-getsockname STDIN ; # OP_GETSOCKNAME
-getpeername STDIN ; # OP_GETPEERNAME
-gethostbyname 1 ; # OP_GHBYNAME
-gethostbyaddr 1,2; # OP_GHBYADDR
-gethostent ; # OP_GHOSTENT
-getnetbyname 1 ; # OP_GNBYNAME
-getnetbyaddr 1,2 ; # OP_GNBYADDR
-getnetent ; # OP_GNETENT
-getprotobyname 1; # OP_GPBYNAME
-getprotobynumber 1; # OP_GPBYNUMBER
-getprotoent ; # OP_GPROTOENT
-getservbyname 1,2; # OP_GSBYNAME
-getservbyport 1,2; # OP_GSBYPORT
-getservent ; # OP_GSERVENT
-
-no warnings 'void' ;
-getsockname STDIN ; # OP_GETSOCKNAME
-getpeername STDIN ; # OP_GETPEERNAME
-gethostbyname 1 ; # OP_GHBYNAME
-gethostbyaddr 1,2; # OP_GHBYADDR
-gethostent ; # OP_GHOSTENT
-getnetbyname 1 ; # OP_GNBYNAME
-getnetbyaddr 1,2 ; # OP_GNBYADDR
-getnetent ; # OP_GNETENT
-getprotobyname 1; # OP_GPBYNAME
-getprotobynumber 1; # OP_GPBYNUMBER
-getprotoent ; # OP_GPROTOENT
-getservbyname 1,2; # OP_GSBYNAME
-getservbyport 1,2; # OP_GSBYPORT
-getservent ; # OP_GSERVENT
-INIT {
- # some functions may not be there, so we exit without running
- exit;
-}
-EXPECT
-Useless use of getsockname in void context at - line 24.
-Useless use of getpeername in void context at - line 25.
-Useless use of gethostbyname in void context at - line 26.
-Useless use of gethostbyaddr in void context at - line 27.
-Useless use of gethostent in void context at - line 28.
-Useless use of getnetbyname in void context at - line 29.
-Useless use of getnetbyaddr in void context at - line 30.
-Useless use of getnetent in void context at - line 31.
-Useless use of getprotobyname in void context at - line 32.
-Useless use of getprotobynumber in void context at - line 33.
-Useless use of getprotoent in void context at - line 34.
-Useless use of getservbyname in void context at - line 35.
-Useless use of getservbyport in void context at - line 36.
-Useless use of getservent in void context at - line 37.
-########
-# op.c
-use warnings 'void' ;
-*a ; # OP_RV2GV
-$a ; # OP_RV2SV
-@a ; # OP_RV2AV
-%a ; # OP_RV2HV
-no warnings 'void' ;
-*a ; # OP_RV2GV
-$a ; # OP_RV2SV
-@a ; # OP_RV2AV
-%a ; # OP_RV2HV
-EXPECT
-Useless use of a variable in void context at - line 3.
-Useless use of a variable in void context at - line 4.
-Useless use of a variable in void context at - line 5.
-Useless use of a variable in void context at - line 6.
-########
-# op.c
-use warnings 'void' ;
-"abc"; # OP_CONST
-7 ; # OP_CONST
-no warnings 'void' ;
-"abc"; # OP_CONST
-7 ; # OP_CONST
-EXPECT
-Useless use of a constant in void context at - line 3.
-Useless use of a constant in void context at - line 4.
-########
-# op.c
-#
-use warnings 'misc' ;
-my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
-@a =~ /abc/ ;
-@a =~ s/a/b/ ;
-@a =~ tr/a/b/ ;
-@$b =~ /abc/ ;
-@$b =~ s/a/b/ ;
-@$b =~ tr/a/b/ ;
-%a =~ /abc/ ;
-%a =~ s/a/b/ ;
-%a =~ tr/a/b/ ;
-%$c =~ /abc/ ;
-%$c =~ s/a/b/ ;
-%$c =~ tr/a/b/ ;
-{
-no warnings 'misc' ;
-my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
-@a =~ /abc/ ;
-@a =~ s/a/b/ ;
-@a =~ tr/a/b/ ;
-@$b =~ /abc/ ;
-@$b =~ s/a/b/ ;
-@$b =~ tr/a/b/ ;
-%a =~ /abc/ ;
-%a =~ s/a/b/ ;
-%a =~ tr/a/b/ ;
-%$c =~ /abc/ ;
-%$c =~ s/a/b/ ;
-%$c =~ tr/a/b/ ;
-}
-EXPECT
-Applying pattern match (m//) to @array will act on scalar(@array) at - line 5.
-Applying substitution (s///) to @array will act on scalar(@array) at - line 6.
-Applying transliteration (tr///) to @array will act on scalar(@array) at - line 7.
-Applying pattern match (m//) to @array will act on scalar(@array) at - line 8.
-Applying substitution (s///) to @array will act on scalar(@array) at - line 9.
-Applying transliteration (tr///) to @array will act on scalar(@array) at - line 10.
-Applying pattern match (m//) to %hash will act on scalar(%hash) at - line 11.
-Applying substitution (s///) to %hash will act on scalar(%hash) at - line 12.
-Applying transliteration (tr///) to %hash will act on scalar(%hash) at - line 13.
-Applying pattern match (m//) to %hash will act on scalar(%hash) at - line 14.
-Applying substitution (s///) to %hash will act on scalar(%hash) at - line 15.
-Applying transliteration (tr///) to %hash will act on scalar(%hash) at - line 16.
-Can't modify private array in substitution (s///) at - line 6, near "s/a/b/ ;"
-BEGIN not safe after errors--compilation aborted at - line 18.
-########
-# op.c
-use warnings 'syntax' ;
-my $a, $b = (1,2);
-no warnings 'syntax' ;
-my $c, $d = (1,2);
-EXPECT
-Parentheses missing around "my" list at - line 3.
-########
-# op.c
-use warnings 'syntax' ;
-local $a, $b = (1,2);
-no warnings 'syntax' ;
-local $c, $d = (1,2);
-EXPECT
-Parentheses missing around "local" list at - line 3.
-########
-# op.c
-use warnings 'bareword' ;
-print (ABC || 1) ;
-no warnings 'bareword' ;
-print (ABC || 1) ;
-EXPECT
-Bareword found in conditional at - line 3.
-########
---FILE-- abc
-
---FILE--
-# op.c
-use warnings 'misc' ;
-open FH, "<abc" ;
-$x = 1 if $x = <FH> ;
-no warnings 'misc' ;
-$x = 1 if $x = <FH> ;
-EXPECT
-Value of <HANDLE> construct can be "0"; test with defined() at - line 4.
-########
-# op.c
-use warnings 'misc' ;
-opendir FH, "." ;
-$x = 1 if $x = readdir FH ;
-no warnings 'misc' ;
-$x = 1 if $x = readdir FH ;
-closedir FH ;
-EXPECT
-Value of readdir() operator can be "0"; test with defined() at - line 4.
-########
-# op.c
-use warnings 'misc' ;
-$x = 1 if $x = <*> ;
-no warnings 'misc' ;
-$x = 1 if $x = <*> ;
-EXPECT
-Value of glob construct can be "0"; test with defined() at - line 3.
-########
-# op.c
-use warnings 'misc' ;
-%a = (1,2,3,4) ;
-$x = 1 if $x = each %a ;
-no warnings 'misc' ;
-$x = 1 if $x = each %a ;
-EXPECT
-Value of each() operator can be "0"; test with defined() at - line 4.
-########
-# op.c
-use warnings 'misc' ;
-$x = 1 while $x = <*> and 0 ;
-no warnings 'misc' ;
-$x = 1 while $x = <*> and 0 ;
-EXPECT
-Value of glob construct can be "0"; test with defined() at - line 3.
-########
-# op.c
-use warnings 'misc' ;
-opendir FH, "." ;
-$x = 1 while $x = readdir FH and 0 ;
-no warnings 'misc' ;
-$x = 1 while $x = readdir FH and 0 ;
-closedir FH ;
-EXPECT
-Value of readdir() operator can be "0"; test with defined() at - line 4.
-########
-# op.c
-use warnings 'redefine' ;
-sub fred {}
-sub fred {}
-no warnings 'redefine' ;
-sub fred {}
-EXPECT
-Subroutine fred redefined at - line 4.
-########
-# op.c
-use warnings 'redefine' ;
-sub fred () { 1 }
-sub fred () { 1 }
-no warnings 'redefine' ;
-sub fred () { 1 }
-EXPECT
-Constant subroutine fred redefined at - line 4.
-########
-# op.c
-use warnings 'redefine' ;
-format FRED =
-.
-format FRED =
-.
-no warnings 'redefine' ;
-format FRED =
-.
-EXPECT
-Format FRED redefined at - line 5.
-########
-# op.c
-use warnings 'deprecated' ;
-push FRED;
-no warnings 'deprecated' ;
-push FRED;
-EXPECT
-Array @FRED missing the @ in argument 1 of push() at - line 3.
-########
-# op.c
-use warnings 'deprecated' ;
-@a = keys FRED ;
-no warnings 'deprecated' ;
-@a = keys FRED ;
-EXPECT
-Hash %FRED missing the % in argument 1 of keys() at - line 3.
-########
-# op.c
-use warnings 'syntax' ;
-exec "$^X -e 1" ;
-my $a
-EXPECT
-Statement unlikely to be reached at - line 4.
- (Maybe you meant system() when you said exec()?)
-########
-# op.c
-use warnings 'deprecated' ;
-my @a; defined(@a);
-EXPECT
-defined(@array) is deprecated at - line 3.
- (Maybe you should just omit the defined()?)
-########
-# op.c
-use warnings 'deprecated' ;
-defined(@a = (1,2,3));
-EXPECT
-defined(@array) is deprecated at - line 3.
- (Maybe you should just omit the defined()?)
-########
-# op.c
-use warnings 'deprecated' ;
-my %h; defined(%h);
-EXPECT
-defined(%hash) is deprecated at - line 3.
- (Maybe you should just omit the defined()?)
-########
-# op.c
-no warnings 'syntax' ;
-exec "$^X -e 1" ;
-my $a
-EXPECT
-
-########
-# op.c
-sub fred();
-sub fred($) {}
-EXPECT
-Prototype mismatch: sub main::fred () vs ($) at - line 3.
-########
-# op.c
-$^W = 0 ;
-sub fred() ;
-sub fred($) {}
-{
- no warnings 'prototype' ;
- sub Fred() ;
- sub Fred($) {}
- use warnings 'prototype' ;
- sub freD() ;
- sub freD($) {}
-}
-sub FRED() ;
-sub FRED($) {}
-EXPECT
-Prototype mismatch: sub main::fred () vs ($) at - line 4.
-Prototype mismatch: sub main::freD () vs ($) at - line 11.
-Prototype mismatch: sub main::FRED () vs ($) at - line 14.
-########
-# op.c
-use warnings 'syntax' ;
-join /---/, 'x', 'y', 'z';
-EXPECT
-/---/ should probably be written as "---" at - line 3.
-########
-# op.c [Perl_peep]
-use warnings 'prototype' ;
-fred() ;
-sub fred ($$) {}
-no warnings 'prototype' ;
-joe() ;
-sub joe ($$) {}
-EXPECT
-main::fred() called too early to check prototype at - line 3.
-########
-# op.c [Perl_newATTRSUB]
---FILE-- abc.pm
-use warnings 'void' ;
-BEGIN { $| = 1; print "in begin\n"; }
-CHECK { print "in check\n"; }
-INIT { print "in init\n"; }
-END { print "in end\n"; }
-print "in mainline\n";
-1;
---FILE--
-use abc;
-delete $INC{"abc.pm"};
-require abc;
-do "abc.pm";
-EXPECT
-in begin
-in mainline
-in check
-in init
-in begin
-Too late to run CHECK block at abc.pm line 3.
-Too late to run INIT block at abc.pm line 4.
-in mainline
-in begin
-Too late to run CHECK block at abc.pm line 3.
-Too late to run INIT block at abc.pm line 4.
-in mainline
-in end
-in end
-in end
-########
-# op.c [Perl_newATTRSUB]
---FILE-- abc.pm
-no warnings 'void' ;
-BEGIN { $| = 1; print "in begin\n"; }
-CHECK { print "in check\n"; }
-INIT { print "in init\n"; }
-END { print "in end\n"; }
-print "in mainline\n";
-1;
---FILE--
-require abc;
-do "abc.pm";
-EXPECT
-in begin
-in mainline
-in begin
-in mainline
-in end
-in end
diff --git a/contrib/perl5/t/pragma/warn/perl b/contrib/perl5/t/pragma/warn/perl
deleted file mode 100644
index b4a00ba..0000000
--- a/contrib/perl5/t/pragma/warn/perl
+++ /dev/null
@@ -1,72 +0,0 @@
- perl.c AOK
-
- gv_check(defstash)
- Name \"%s::%s\" used only once: possible typo
-
- Mandatory Warnings All TODO
- ------------------
- Recompile perl with -DDEBUGGING to use -D switch [moreswitches]
- Unbalanced scopes: %ld more ENTERs than LEAVEs [perl_destruct]
- Unbalanced saves: %ld more saves than restores [perl_destruct]
- Unbalanced tmps: %ld more allocs than frees [perl_destruct]
- Unbalanced context: %ld more PUSHes than POPs [perl_destruct]
- Unbalanced string table refcount: (%d) for \"%s\" [perl_destruct]
- Scalars leaked: %ld [perl_destruct]
-
-
-__END__
-# perl.c
-no warnings 'once' ;
-$x = 3 ;
-use warnings 'once' ;
-$z = 3 ;
-EXPECT
-Name "main::z" used only once: possible typo at - line 5.
-########
--w
-# perl.c
-$x = 3 ;
-no warnings 'once' ;
-$z = 3
-EXPECT
-Name "main::x" used only once: possible typo at - line 3.
-########
-# perl.c
-BEGIN { $^W =1 ; }
-$x = 3 ;
-no warnings 'once' ;
-$z = 3
-EXPECT
-Name "main::x" used only once: possible typo at - line 3.
-########
--W
-# perl.c
-no warnings 'once' ;
-$x = 3 ;
-use warnings 'once' ;
-$z = 3 ;
-EXPECT
-Name "main::x" used only once: possible typo at - line 4.
-Name "main::z" used only once: possible typo at - line 6.
-########
--X
-# perl.c
-use warnings 'once' ;
-$x = 3 ;
-EXPECT
-########
-
-# perl.c
-{ use warnings 'once' ; $x = 3 ; }
-$y = 3 ;
-EXPECT
-Name "main::x" used only once: possible typo at - line 3.
-########
-
-# perl.c
-$z = 3 ;
-BEGIN { $^W = 1 }
-{ no warnings 'once' ; $x = 3 ; }
-$y = 3 ;
-EXPECT
-Name "main::y" used only once: possible typo at - line 6.
diff --git a/contrib/perl5/t/pragma/warn/perlio b/contrib/perl5/t/pragma/warn/perlio
deleted file mode 100644
index 18c0dfa..0000000
--- a/contrib/perl5/t/pragma/warn/perlio
+++ /dev/null
@@ -1,10 +0,0 @@
- perlio.c
-
-
- Mandatory Warnings ALL TODO
- ------------------
- Setting cnt to %d
- Setting ptr %p > end+1 %p
- Setting cnt to %d, ptr implies %d
-
-__END__
diff --git a/contrib/perl5/t/pragma/warn/perly b/contrib/perl5/t/pragma/warn/perly
deleted file mode 100644
index afc5dcc..0000000
--- a/contrib/perl5/t/pragma/warn/perly
+++ /dev/null
@@ -1,31 +0,0 @@
- perly.y AOK
-
- dep() => deprecate("\"do\" to call subroutines")
- Use of "do" to call subroutines is deprecated
-
- sub fred {} do fred()
- sub fred {} do fred(1)
- sub fred {} $a = "fred" ; do $a()
- sub fred {} $a = "fred" ; do $a(1)
-
-
-__END__
-# perly.y
-use warnings 'deprecated' ;
-sub fred {}
-do fred() ;
-do fred(1) ;
-$a = "fred" ;
-do $a() ;
-do $a(1) ;
-no warnings 'deprecated' ;
-do fred() ;
-do fred(1) ;
-$a = "fred" ;
-do $a() ;
-do $a(1) ;
-EXPECT
-Use of "do" to call subroutines is deprecated at - line 4.
-Use of "do" to call subroutines is deprecated at - line 5.
-Use of "do" to call subroutines is deprecated at - line 7.
-Use of "do" to call subroutines is deprecated at - line 8.
diff --git a/contrib/perl5/t/pragma/warn/pp b/contrib/perl5/t/pragma/warn/pp
deleted file mode 100644
index 8f42ba6..0000000
--- a/contrib/perl5/t/pragma/warn/pp
+++ /dev/null
@@ -1,110 +0,0 @@
- pp.c TODO
-
- substr outside of string
- $a = "ab" ; $b = substr($a, 4,5) ;
-
- Attempt to use reference as lvalue in substr
- $a = "ab" ; $b = \$a ; substr($b, 1,1) = $b
-
- uninitialized in pp_rv2gv()
- my *b = *{ undef()}
-
- uninitialized in pp_rv2sv()
- my $a = undef ; my $b = $$a
-
- Odd number of elements in hash list
- my $a = { 1,2,3 } ;
-
- Invalid type in unpack: '%c
- my $A = pack ("A,A", 1,2) ;
- my @A = unpack ("A,A", "22") ;
-
- Attempt to pack pointer to temporary value
- pack("p", "abc") ;
-
- Explicit blessing to '' (assuming package main)
- bless \[], "";
-
- Constant subroutine %s undefined <<<TODO
- Constant subroutine (anonymous) undefined <<<TODO
-
-__END__
-# pp.c
-use warnings 'substr' ;
-$a = "ab" ;
-$b = substr($a, 4,5) ;
-no warnings 'substr' ;
-$a = "ab" ;
-$b = substr($a, 4,5) ;
-EXPECT
-substr outside of string at - line 4.
-########
-# pp.c
-use warnings 'substr' ;
-$a = "ab" ;
-$b = \$a ;
-substr($b, 1,1) = "ab" ;
-no warnings 'substr' ;
-substr($b, 1,1) = "ab" ;
-EXPECT
-Attempt to use reference as lvalue in substr at - line 5.
-########
-# pp.c
-use warnings 'uninitialized' ;
-# TODO
-EXPECT
-
-########
-# pp.c
-use warnings 'misc' ;
-my $a = { 1,2,3};
-no warnings 'misc' ;
-my $b = { 1,2,3};
-EXPECT
-Odd number of elements in hash assignment at - line 3.
-########
-# pp.c
-use warnings 'pack' ;
-use warnings 'unpack' ;
-my @a = unpack ("A,A", "22") ;
-my $a = pack ("A,A", 1,2) ;
-no warnings 'pack' ;
-no warnings 'unpack' ;
-my @b = unpack ("A,A", "22") ;
-my $b = pack ("A,A", 1,2) ;
-EXPECT
-Invalid type in unpack: ',' at - line 4.
-Invalid type in pack: ',' at - line 5.
-########
-# pp.c
-use warnings 'uninitialized' ;
-my $a = undef ;
-my $b = $$a;
-no warnings 'uninitialized' ;
-my $c = $$a;
-EXPECT
-Use of uninitialized value in scalar dereference at - line 4.
-########
-# pp.c
-use warnings 'pack' ;
-sub foo { my $a = "a"; return $a . $a++ . $a++ }
-my $a = pack("p", &foo) ;
-no warnings 'pack' ;
-my $b = pack("p", &foo) ;
-EXPECT
-Attempt to pack pointer to temporary value at - line 4.
-########
-# pp.c
-use warnings 'misc' ;
-bless \[], "" ;
-no warnings 'misc' ;
-bless \[], "" ;
-EXPECT
-Explicit blessing to '' (assuming package main) at - line 3.
-########
-# pp.c
-use utf8 ;
-$_ = "\x80 \xff" ;
-reverse ;
-EXPECT
-########
diff --git a/contrib/perl5/t/pragma/warn/pp_ctl b/contrib/perl5/t/pragma/warn/pp_ctl
deleted file mode 100644
index ac01f27..0000000
--- a/contrib/perl5/t/pragma/warn/pp_ctl
+++ /dev/null
@@ -1,230 +0,0 @@
- pp_ctl.c AOK
-
- Not enough format arguments
- format STDOUT =
- @<<< @<<<
- $a
- .
- write;
-
-
- Exiting substitution via %s
- $_ = "abc" ;
- while ($i ++ == 0)
- {
- s/ab/last/e ;
- }
-
- Exiting subroutine via %s
- sub fred { last }
- { fred() }
-
- Exiting eval via %s
- { eval "last" }
-
- Exiting pseudo-block via %s
- @a = (1,2) ; @b = sort { last } @a ;
-
- Exiting substitution via %s
- $_ = "abc" ;
- last fred:
- while ($i ++ == 0)
- {
- s/ab/last fred/e ;
- }
-
-
- Exiting subroutine via %s
- sub fred { last joe }
- joe: { fred() }
-
- Exiting eval via %s
- fred: { eval "last fred" }
-
- Exiting pseudo-block via %s
- @a = (1,2) ; fred: @b = sort { last fred } @a ;
-
-
- Deep recursion on subroutine \"%s\"
- sub fred
- {
- fred() if $a++ < 200
- }
-
- fred()
-
- (in cleanup) foo bar
- package Foo;
- DESTROY { die "foo bar" }
- { bless [], 'Foo' for 1..10 }
-
-__END__
-# pp_ctl.c
-use warnings 'syntax' ;
-format STDOUT =
-@<<< @<<<
-1
-.
-write;
-EXPECT
-Not enough format arguments at - line 5.
-1
-########
-# pp_ctl.c
-no warnings 'syntax' ;
-format =
-@<<< @<<<
-1
-.
-write ;
-EXPECT
-1
-########
-# pp_ctl.c
-use warnings 'exiting' ;
-$_ = "abc" ;
-
-while ($i ++ == 0)
-{
- s/ab/last/e ;
-}
-no warnings 'exiting' ;
-while ($i ++ == 0)
-{
- s/ab/last/e ;
-}
-EXPECT
-Exiting substitution via last at - line 7.
-########
-# pp_ctl.c
-use warnings 'exiting' ;
-sub fred { last }
-{ fred() }
-no warnings 'exiting' ;
-sub joe { last }
-{ joe() }
-EXPECT
-Exiting subroutine via last at - line 3.
-########
-# pp_ctl.c
-{
- eval "use warnings 'exiting' ; last;"
-}
-print STDERR $@ ;
-{
- eval "no warnings 'exiting' ;last;"
-}
-print STDERR $@ ;
-EXPECT
-Exiting eval via last at (eval 1) line 1.
-########
-# pp_ctl.c
-use warnings 'exiting' ;
-@a = (1,2) ;
-@b = sort { last } @a ;
-no warnings 'exiting' ;
-@b = sort { last } @a ;
-EXPECT
-Exiting pseudo-block via last at - line 4.
-Can't "last" outside a loop block at - line 4.
-########
-# pp_ctl.c
-use warnings 'exiting' ;
-$_ = "abc" ;
-fred:
-while ($i ++ == 0)
-{
- s/ab/last fred/e ;
-}
-no warnings 'exiting' ;
-while ($i ++ == 0)
-{
- s/ab/last fred/e ;
-}
-EXPECT
-Exiting substitution via last at - line 7.
-########
-# pp_ctl.c
-use warnings 'exiting' ;
-sub fred { last joe }
-joe: { fred() }
-no warnings 'exiting' ;
-sub Fred { last Joe }
-Joe: { Fred() }
-EXPECT
-Exiting subroutine via last at - line 3.
-########
-# pp_ctl.c
-joe:
-{ eval "use warnings 'exiting' ; last joe;" }
-print STDERR $@ ;
-Joe:
-{ eval "no warnings 'exiting' ; last Joe;" }
-print STDERR $@ ;
-EXPECT
-Exiting eval via last at (eval 1) line 1.
-########
-# pp_ctl.c
-use warnings 'exiting' ;
-@a = (1,2) ;
-fred: @b = sort { last fred } @a ;
-no warnings 'exiting' ;
-Fred: @b = sort { last Fred } @a ;
-EXPECT
-Exiting pseudo-block via last at - line 4.
-Label not found for "last fred" at - line 4.
-########
-# pp_ctl.c
-use warnings 'recursion' ;
-BEGIN { warn "PREFIX\n" ;}
-sub fred
-{
- fred() if $a++ < 200
-}
-
-fred()
-EXPECT
-Deep recursion on subroutine "main::fred" at - line 6.
-########
-# pp_ctl.c
-no warnings 'recursion' ;
-BEGIN { warn "PREFIX\n" ;}
-sub fred
-{
- fred() if $a++ < 200
-}
-
-fred()
-EXPECT
-########
-# pp_ctl.c
-use warnings 'misc' ;
-package Foo;
-DESTROY { die "@{$_[0]} foo bar" }
-{ bless ['A'], 'Foo' for 1..10 }
-{ bless ['B'], 'Foo' for 1..10 }
-EXPECT
- (in cleanup) A foo bar at - line 4.
- (in cleanup) B foo bar at - line 4.
-########
-# pp_ctl.c
-no warnings 'misc' ;
-package Foo;
-DESTROY { die "@{$_[0]} foo bar" }
-{ bless ['A'], 'Foo' for 1..10 }
-{ bless ['B'], 'Foo' for 1..10 }
-EXPECT
-########
-# pp_ctl.c
-use warnings;
-eval 'print $foo';
-EXPECT
-Use of uninitialized value in print at (eval 1) line 1.
-########
-# pp_ctl.c
-use warnings;
-{
- no warnings;
- eval 'print $foo';
-}
-EXPECT
diff --git a/contrib/perl5/t/pragma/warn/pp_hot b/contrib/perl5/t/pragma/warn/pp_hot
deleted file mode 100644
index 698255c..0000000
--- a/contrib/perl5/t/pragma/warn/pp_hot
+++ /dev/null
@@ -1,230 +0,0 @@
- pp_hot.c
-
- print() on unopened filehandle abc [pp_print]
- $f = $a = "abc" ; print $f $a
-
- Filehandle %s opened only for input [pp_print]
- print STDIN "abc" ;
-
- Filehandle %s opened only for output [pp_print]
- print <STDOUT> ;
-
- print() on closed filehandle %s [pp_print]
- close STDIN ; print STDIN "abc" ;
-
- uninitialized [pp_rv2av]
- my $a = undef ; my @b = @$a
-
- uninitialized [pp_rv2hv]
- my $a = undef ; my %b = %$a
-
- Odd number of elements in hash list [pp_aassign]
- %X = (1,2,3) ;
-
- Reference found where even-sized list expected [pp_aassign]
- $X = [ 1 ..3 ];
-
- Filehandle %s opened only for output [Perl_do_readline]
- open (FH, ">./xcv") ;
- my $a = <FH> ;
-
- glob failed (can't start child: %s) [Perl_do_readline] <<TODO
-
- readline() on closed filehandle %s [Perl_do_readline]
- close STDIN ; $a = <STDIN>;
-
- readline() on closed filehandle %s [Perl_do_readline]
- readline(NONESUCH);
-
- glob failed (child exited with status %d%s) [Perl_do_readline] <<TODO
-
- Deep recursion on subroutine \"%s\" [Perl_sub_crush_depth]
- sub fred { fred() if $a++ < 200} fred()
-
- Deep recursion on anonymous subroutine [Perl_sub_crush_depth]
- $a = sub { &$a if $a++ < 200} &$a
-
- Possible Y2K bug: about to append an integer to '19' [pp_concat]
- $x = "19$yy\n";
-
-__END__
-# pp_hot.c [pp_print]
-use warnings 'unopened' ;
-$f = $a = "abc" ;
-print $f $a;
-no warnings 'unopened' ;
-print $f $a;
-EXPECT
-print() on unopened filehandle abc at - line 4.
-########
-# pp_hot.c [pp_print]
-use warnings 'io' ;
-print STDIN "anc";
-print <STDOUT>;
-print <STDERR>;
-open(FOO, ">&STDOUT") and print <FOO>;
-print getc(STDERR);
-print getc(FOO);
-####################################################################
-# The next test is known to fail on some systems (Linux+old glibc, #
-# old *BSDs, and NeXT, among others. #
-# We skip it for now (on the grounds that it is "just" a warning). #
-####################################################################
-#read(FOO,$_,1);
-no warnings 'io' ;
-print STDIN "anc";
-EXPECT
-Filehandle STDIN opened only for input at - line 3.
-Filehandle STDOUT opened only for output at - line 4.
-Filehandle STDERR opened only for output at - line 5.
-Filehandle FOO opened only for output at - line 6.
-Filehandle STDERR opened only for output at - line 7.
-Filehandle FOO opened only for output at - line 8.
-########
-# pp_hot.c [pp_print]
-use warnings 'closed' ;
-close STDIN ;
-print STDIN "anc";
-opendir STDIN, ".";
-print STDIN "anc";
-closedir STDIN;
-no warnings 'closed' ;
-print STDIN "anc";
-opendir STDIN, ".";
-print STDIN "anc";
-EXPECT
-print() on closed filehandle STDIN at - line 4.
-print() on closed filehandle STDIN at - line 6.
- (Are you trying to call print() on dirhandle STDIN?)
-########
-# pp_hot.c [pp_rv2av]
-use warnings 'uninitialized' ;
-my $a = undef ;
-my @b = @$a;
-no warnings 'uninitialized' ;
-my @c = @$a;
-EXPECT
-Use of uninitialized value in array dereference at - line 4.
-########
-# pp_hot.c [pp_rv2hv]
-use warnings 'uninitialized' ;
-my $a = undef ;
-my %b = %$a;
-no warnings 'uninitialized' ;
-my %c = %$a;
-EXPECT
-Use of uninitialized value in hash dereference at - line 4.
-########
-# pp_hot.c [pp_aassign]
-use warnings 'misc' ;
-my %X ; %X = (1,2,3) ;
-no warnings 'misc' ;
-my %Y ; %Y = (1,2,3) ;
-EXPECT
-Odd number of elements in hash assignment at - line 3.
-########
-# pp_hot.c [pp_aassign]
-use warnings 'misc' ;
-my %X ; %X = [1 .. 3] ;
-no warnings 'misc' ;
-my %Y ; %Y = [1 .. 3] ;
-EXPECT
-Reference found where even-sized list expected at - line 3.
-########
-# pp_hot.c [Perl_do_readline]
-use warnings 'closed' ;
-close STDIN ; $a = <STDIN> ;
-opendir STDIN, "." ; $a = <STDIN> ;
-closedir STDIN;
-no warnings 'closed' ;
-opendir STDIN, "." ; $a = <STDIN> ;
-$a = <STDIN> ;
-EXPECT
-readline() on closed filehandle STDIN at - line 3.
-readline() on closed filehandle STDIN at - line 4.
- (Are you trying to call readline() on dirhandle STDIN?)
-########
-# pp_hot.c [Perl_do_readline]
-use warnings 'io' ;
-my $file = "./xcv" ; unlink $file ;
-open (FH, ">./xcv") ;
-my $a = <FH> ;
-no warnings 'io' ;
-$a = <FH> ;
-close (FH) ;
-unlink $file ;
-EXPECT
-Filehandle FH opened only for output at - line 5.
-########
-# pp_hot.c [Perl_sub_crush_depth]
-use warnings 'recursion' ;
-sub fred
-{
- fred() if $a++ < 200
-}
-{
- local $SIG{__WARN__} = sub {
- die "ok\n" if $_[0] =~ /^Deep recursion on subroutine "main::fred"/
- };
- fred();
-}
-EXPECT
-ok
-########
-# pp_hot.c [Perl_sub_crush_depth]
-no warnings 'recursion' ;
-sub fred
-{
- fred() if $a++ < 200
-}
-{
- local $SIG{__WARN__} = sub {
- die "ok\n" if $_[0] =~ /^Deep recursion on subroutine "main::fred"/
- };
- fred();
-}
-EXPECT
-
-########
-# pp_hot.c [Perl_sub_crush_depth]
-use warnings 'recursion' ;
-$b = sub
-{
- &$b if $a++ < 200
-} ;
-
-&$b ;
-EXPECT
-Deep recursion on anonymous subroutine at - line 5.
-########
-# pp_hot.c [Perl_sub_crush_depth]
-no warnings 'recursion' ;
-$b = sub
-{
- &$b if $a++ < 200
-} ;
-
-&$b ;
-EXPECT
-########
-# pp_hot.c [pp_concat]
-use warnings 'y2k';
-use Config;
-BEGIN {
- unless ($Config{ccflags} =~ /Y2KWARN/) {
- print "SKIPPED\n# perl not built with -DPERL_Y2KWARN";
- exit 0;
- }
-}
-my $x;
-my $yy = 78;
-$x = "19$yy\n";
-$x = "19" . $yy . "\n";
-$x = "319$yy\n";
-$x = "319" . $yy . "\n";
-no warnings 'y2k';
-$x = "19$yy\n";
-$x = "19" . $yy . "\n";
-EXPECT
-Possible Y2K bug: about to append an integer to '19' at - line 12.
-Possible Y2K bug: about to append an integer to '19' at - line 13.
diff --git a/contrib/perl5/t/pragma/warn/pp_sys b/contrib/perl5/t/pragma/warn/pp_sys
deleted file mode 100644
index 68518e2..0000000
--- a/contrib/perl5/t/pragma/warn/pp_sys
+++ /dev/null
@@ -1,381 +0,0 @@
- pp_sys.c AOK
-
- untie attempted while %d inner references still exist [pp_untie]
- sub TIESCALAR { bless [] } ; tie $a, 'main'; untie $a ;
-
- Filehandle %s opened only for input [pp_leavewrite]
- format STDIN =
- .
- write STDIN;
-
- write() on closed filehandle %s [pp_leavewrite]
- format STDIN =
- .
- close STDIN;
- write STDIN ;
-
- page overflow [pp_leavewrite]
-
- printf() on unopened filehandle abc [pp_prtf]
- $a = "abc"; printf $a "fred"
-
- Filehandle %s opened only for input [pp_prtf]
- $a = "abc";
- printf $a "fred"
-
- printf() on closed filehandle %s [pp_prtf]
- close STDIN ;
- printf STDIN "fred"
-
- syswrite() on closed filehandle %s [pp_send]
- close STDIN;
- syswrite STDIN, "fred", 1;
-
- send() on closed socket %s [pp_send]
- close STDIN;
- send STDIN, "fred", 1
-
- bind() on closed socket %s [pp_bind]
- close STDIN;
- bind STDIN, "fred" ;
-
-
- connect() on closed socket %s [pp_connect]
- close STDIN;
- connect STDIN, "fred" ;
-
- listen() on closed socket %s [pp_listen]
- close STDIN;
- listen STDIN, 2;
-
- accept() on closed socket %s [pp_accept]
- close STDIN;
- accept "fred", STDIN ;
-
- shutdown() on closed socket %s [pp_shutdown]
- close STDIN;
- shutdown STDIN, 0;
-
- setsockopt() on closed socket %s [pp_ssockopt]
- getsockopt() on closed socket %s [pp_ssockopt]
- close STDIN;
- setsockopt STDIN, 1,2,3;
- getsockopt STDIN, 1,2;
-
- getsockname() on closed socket %s [pp_getpeername]
- getpeername() on closed socket %s [pp_getpeername]
- close STDIN;
- getsockname STDIN;
- getpeername STDIN;
-
- flock() on closed socket %s [pp_flock]
- flock() on closed socket [pp_flock]
- close STDIN;
- flock STDIN, 8;
- flock $a, 8;
-
- warn(warn_nl, "stat"); [pp_stat]
-
- -T on closed filehandle %s
- stat() on closed filehandle %s
- close STDIN ; -T STDIN ; stat(STDIN) ;
-
- warn(warn_nl, "open"); [pp_fttext]
- -T "abc\ndef" ;
-
- Filehandle %s opened only for output [pp_sysread]
- my $file = "./xcv" ;
- open(F, ">$file") ;
- my $a = sysread(F, $a,10) ;
-
-
-
-__END__
-# pp_sys.c [pp_untie]
-use warnings 'untie' ;
-sub TIESCALAR { bless [] } ;
-$b = tie $a, 'main';
-untie $a ;
-no warnings 'untie' ;
-$c = tie $d, 'main';
-untie $d ;
-EXPECT
-untie attempted while 1 inner references still exist at - line 5.
-########
-# pp_sys.c [pp_leavewrite]
-use warnings 'io' ;
-format STDIN =
-.
-write STDIN;
-no warnings 'io' ;
-write STDIN;
-EXPECT
-Filehandle STDIN opened only for input at - line 5.
-########
-# pp_sys.c [pp_leavewrite]
-use warnings 'closed' ;
-format STDIN =
-.
-close STDIN;
-write STDIN;
-opendir STDIN, ".";
-write STDIN;
-closedir STDIN;
-no warnings 'closed' ;
-write STDIN;
-opendir STDIN, ".";
-write STDIN;
-EXPECT
-write() on closed filehandle STDIN at - line 6.
-write() on closed filehandle STDIN at - line 8.
- (Are you trying to call write() on dirhandle STDIN?)
-########
-# pp_sys.c [pp_leavewrite]
-use warnings 'io' ;
-format STDOUT_TOP =
-abc
-.
-format STDOUT =
-def
-ghi
-.
-$= = 1 ;
-$- =1 ;
-open STDOUT, ">".($^O eq 'VMS'? 'NL:' : '/dev/null') ;
-write ;
-no warnings 'io' ;
-write ;
-EXPECT
-page overflow at - line 13.
-########
-# pp_sys.c [pp_prtf]
-use warnings 'unopened' ;
-$a = "abc";
-printf $a "fred";
-no warnings 'unopened' ;
-printf $a "fred";
-EXPECT
-printf() on unopened filehandle abc at - line 4.
-########
-# pp_sys.c [pp_prtf]
-use warnings 'closed' ;
-close STDIN ;
-printf STDIN "fred";
-opendir STDIN, ".";
-printf STDIN "fred";
-closedir STDIN;
-no warnings 'closed' ;
-printf STDIN "fred";
-opendir STDIN, ".";
-printf STDIN "fred";
-EXPECT
-printf() on closed filehandle STDIN at - line 4.
-printf() on closed filehandle STDIN at - line 6.
- (Are you trying to call printf() on dirhandle STDIN?)
-########
-# pp_sys.c [pp_prtf]
-use warnings 'io' ;
-printf STDIN "fred";
-no warnings 'io' ;
-printf STDIN "fred";
-EXPECT
-Filehandle STDIN opened only for input at - line 3.
-########
-# pp_sys.c [pp_send]
-use warnings 'closed' ;
-close STDIN;
-syswrite STDIN, "fred", 1;
-opendir STDIN, ".";
-syswrite STDIN, "fred", 1;
-closedir STDIN;
-no warnings 'closed' ;
-syswrite STDIN, "fred", 1;
-opendir STDIN, ".";
-syswrite STDIN, "fred", 1;
-EXPECT
-syswrite() on closed filehandle STDIN at - line 4.
-syswrite() on closed filehandle STDIN at - line 6.
- (Are you trying to call syswrite() on dirhandle STDIN?)
-########
-# pp_sys.c [pp_flock]
-use Config;
-BEGIN {
- if ( !$Config{d_flock} &&
- !$Config{d_fcntl_can_lock} &&
- !$Config{d_lockf} ) {
- print <<EOM ;
-SKIPPED
-# flock not present
-EOM
- exit ;
- }
-}
-use warnings qw(unopened closed);
-close STDIN;
-flock STDIN, 8;
-opendir STDIN, ".";
-flock STDIN, 8;
-flock FOO, 8;
-flock $a, 8;
-no warnings qw(unopened closed);
-flock STDIN, 8;
-opendir STDIN, ".";
-flock STDIN, 8;
-flock FOO, 8;
-flock $a, 8;
-EXPECT
-flock() on closed filehandle STDIN at - line 16.
-flock() on closed filehandle STDIN at - line 18.
- (Are you trying to call flock() on dirhandle STDIN?)
-flock() on unopened filehandle FOO at - line 19.
-flock() on unopened filehandle at - line 20.
-########
-# pp_sys.c [pp_prtf pp_send pp_bind pp_connect pp_listen pp_accept pp_shutdown pp_ssockopt ppp_getpeername]
-use warnings 'io' ;
-use Config;
-BEGIN {
- if ( $^O ne 'VMS' and ! $Config{d_socket}) {
- print <<EOM ;
-SKIPPED
-# send not present
-# bind not present
-# connect not present
-# accept not present
-# shutdown not present
-# setsockopt not present
-# getsockopt not present
-# getsockname not present
-# getpeername not present
-EOM
- exit ;
- }
-}
-close STDIN;
-send STDIN, "fred", 1;
-bind STDIN, "fred" ;
-connect STDIN, "fred" ;
-listen STDIN, 2;
-accept "fred", STDIN;
-shutdown STDIN, 0;
-setsockopt STDIN, 1,2,3;
-getsockopt STDIN, 1,2;
-getsockname STDIN;
-getpeername STDIN;
-opendir STDIN, ".";
-send STDIN, "fred", 1;
-bind STDIN, "fred" ;
-connect STDIN, "fred" ;
-listen STDIN, 2;
-accept "fred", STDIN;
-shutdown STDIN, 0;
-setsockopt STDIN, 1,2,3;
-getsockopt STDIN, 1,2;
-getsockname STDIN;
-getpeername STDIN;
-closedir STDIN;
-no warnings 'io' ;
-send STDIN, "fred", 1;
-bind STDIN, "fred" ;
-connect STDIN, "fred" ;
-listen STDIN, 2;
-accept STDIN, "fred" ;
-shutdown STDIN, 0;
-setsockopt STDIN, 1,2,3;
-getsockopt STDIN, 1,2;
-getsockname STDIN;
-getpeername STDIN;
-opendir STDIN, ".";
-send STDIN, "fred", 1;
-bind STDIN, "fred" ;
-connect STDIN, "fred" ;
-listen STDIN, 2;
-accept "fred", STDIN;
-shutdown STDIN, 0;
-setsockopt STDIN, 1,2,3;
-getsockopt STDIN, 1,2;
-getsockname STDIN;
-getpeername STDIN;
-EXPECT
-send() on closed socket STDIN at - line 22.
-bind() on closed socket STDIN at - line 23.
-connect() on closed socket STDIN at - line 24.
-listen() on closed socket STDIN at - line 25.
-accept() on closed socket STDIN at - line 26.
-shutdown() on closed socket STDIN at - line 27.
-setsockopt() on closed socket STDIN at - line 28.
-getsockopt() on closed socket STDIN at - line 29.
-getsockname() on closed socket STDIN at - line 30.
-getpeername() on closed socket STDIN at - line 31.
-send() on closed socket STDIN at - line 33.
- (Are you trying to call send() on dirhandle STDIN?)
-bind() on closed socket STDIN at - line 34.
- (Are you trying to call bind() on dirhandle STDIN?)
-connect() on closed socket STDIN at - line 35.
- (Are you trying to call connect() on dirhandle STDIN?)
-listen() on closed socket STDIN at - line 36.
- (Are you trying to call listen() on dirhandle STDIN?)
-accept() on closed socket STDIN at - line 37.
- (Are you trying to call accept() on dirhandle STDIN?)
-shutdown() on closed socket STDIN at - line 38.
- (Are you trying to call shutdown() on dirhandle STDIN?)
-setsockopt() on closed socket STDIN at - line 39.
- (Are you trying to call setsockopt() on dirhandle STDIN?)
-getsockopt() on closed socket STDIN at - line 40.
- (Are you trying to call getsockopt() on dirhandle STDIN?)
-getsockname() on closed socket STDIN at - line 41.
- (Are you trying to call getsockname() on dirhandle STDIN?)
-getpeername() on closed socket STDIN at - line 42.
- (Are you trying to call getpeername() on dirhandle STDIN?)
-########
-# pp_sys.c [pp_stat]
-use warnings 'newline' ;
-stat "abc\ndef";
-no warnings 'newline' ;
-stat "abc\ndef";
-EXPECT
-Unsuccessful stat on filename containing newline at - line 3.
-########
-# pp_sys.c [pp_fttext]
-use warnings qw(unopened closed) ;
-close STDIN ;
--T STDIN ;
-stat(STDIN) ;
--T HOCUS;
-stat(POCUS);
-no warnings qw(unopened closed) ;
--T STDIN ;
-stat(STDIN);
--T HOCUS;
-stat(POCUS);
-EXPECT
--T on closed filehandle STDIN at - line 4.
-stat() on closed filehandle STDIN at - line 5.
--T on unopened filehandle HOCUS at - line 6.
-stat() on unopened filehandle POCUS at - line 7.
-########
-# pp_sys.c [pp_fttext]
-use warnings 'newline' ;
--T "abc\ndef" ;
-no warnings 'newline' ;
--T "abc\ndef" ;
-EXPECT
-Unsuccessful open on filename containing newline at - line 3.
-########
-# pp_sys.c [pp_sysread]
-use warnings 'io' ;
-if ($^O eq 'dos') {
- print <<EOM ;
-SKIPPED
-# skipped on dos
-EOM
- exit ;
-}
-my $file = "./xcv" ;
-open(F, ">$file") ;
-my $a = sysread(F, $a,10) ;
-no warnings 'io' ;
-my $a = sysread(F, $a,10) ;
-close F ;
-unlink $file ;
-EXPECT
-Filehandle F opened only for output at - line 12.
diff --git a/contrib/perl5/t/pragma/warn/regcomp b/contrib/perl5/t/pragma/warn/regcomp
deleted file mode 100644
index 8b86b50..0000000
--- a/contrib/perl5/t/pragma/warn/regcomp
+++ /dev/null
@@ -1,167 +0,0 @@
- regcomp.c AOK
-
- Strange *+?{} on zero-length expression [S_study_chunk]
- /(?=a)?/
-
- %.*s matches null string many times [S_regpiece]
- $a = "ABC123" ; $a =~ /(?=a)*/'
-
- /%.127s/: Unrecognized escape \\%c passed through [S_regatom]
- $x = '\m' ; /$x/
-
- Character class [:%.*s:] unknown [S_regpposixcc]
-
- Character class syntax [%c %c] belongs inside character classes [S_checkposixcc]
-
- /%.127s/: false [] range \"%*.*s\" in regexp [S_regclass]
-
- /%.127s/: false [] range \"%*.*s\" in regexp [S_regclassutf8]
-
- /%.127s/: Unrecognized escape \\%c in character class passed through" [S_regclass]
-
- /%.127s/: Unrecognized escape \\%c in character class passed through" [S_regclassutf8]
-
-__END__
-# regcomp.c [S_regpiece]
-use warnings 'regexp' ;
-my $a = "ABC123" ;
-$a =~ /(?=a)*/ ;
-no warnings 'regexp' ;
-$a =~ /(?=a)*/ ;
-EXPECT
-(?=a)* matches null string many times before HERE mark in regex m/(?=a)* << HERE / at - line 4.
-########
-# regcomp.c [S_study_chunk]
-use warnings 'regexp' ;
-$_ = "" ;
-/(?=a)?/;
-no warnings 'regexp' ;
-/(?=a)?/;
-EXPECT
-Quantifier unexpected on zero-length expression before HERE mark in regex m/(?=a)? << HERE / at - line 4.
-########
-# regcomp.c [S_regatom]
-$x = '\m' ;
-use warnings 'regexp' ;
-$a =~ /a$x/ ;
-no warnings 'regexp' ;
-$a =~ /a$x/ ;
-EXPECT
-Unrecognized escape \m passed through before HERE mark in regex m/a\m << HERE / at - line 4.
-########
-# regcomp.c [S_regpposixcc S_checkposixcc]
-#
-use warnings 'regexp' ;
-$_ = "" ;
-/[:alpha:]/;
-/[:zog:]/;
-/[[:zog:]]/;
-no warnings 'regexp' ;
-/[:alpha:]/;
-/[:zog:]/;
-/[[:zog:]]/;
-EXPECT
-POSIX syntax [: :] belongs inside character classes before HERE mark in regex m/[:alpha:] << HERE / at - line 5.
-POSIX syntax [: :] belongs inside character classes before HERE mark in regex m/[:zog:] << HERE / at - line 6.
-POSIX class [:zog:] unknown before HERE mark in regex m/[[:zog:] << HERE ]/
-########
-# regcomp.c [S_checkposixcc]
-#
-use warnings 'regexp' ;
-$_ = "" ;
-/[.zog.]/;
-no warnings 'regexp' ;
-/[.zog.]/;
-EXPECT
-POSIX syntax [. .] belongs inside character classes before HERE mark in regex m/[.zog.] << HERE / at - line 5.
-POSIX syntax [. .] is reserved for future extensions before HERE mark in regex m/[.zog.] << HERE /
-########
-# regcomp.c [S_checkposixcc]
-#
-use warnings 'regexp' ;
-$_ = "" ;
-/[[.zog.]]/;
-no warnings 'regexp' ;
-/[[.zog.]]/;
-EXPECT
-POSIX syntax [. .] is reserved for future extensions before HERE mark in regex m/[[.zog.] << HERE ]/
-########
-# regcomp.c [S_regclass]
-$_ = "";
-use warnings 'regexp' ;
-/[a-b]/;
-/[a-\d]/;
-/[\d-b]/;
-/[\s-\d]/;
-/[\d-\s]/;
-/[a-[:digit:]]/;
-/[[:digit:]-b]/;
-/[[:alpha:]-[:digit:]]/;
-/[[:digit:]-[:alpha:]]/;
-no warnings 'regexp' ;
-/[a-b]/;
-/[a-\d]/;
-/[\d-b]/;
-/[\s-\d]/;
-/[\d-\s]/;
-/[a-[:digit:]]/;
-/[[:digit:]-b]/;
-/[[:alpha:]-[:digit:]]/;
-/[[:digit:]-[:alpha:]]/;
-EXPECT
-False [] range "a-\d" before HERE mark in regex m/[a-\d << HERE ]/ at - line 5.
-False [] range "\d-" before HERE mark in regex m/[\d- << HERE b]/ at - line 6.
-False [] range "\s-" before HERE mark in regex m/[\s- << HERE \d]/ at - line 7.
-False [] range "\d-" before HERE mark in regex m/[\d- << HERE \s]/ at - line 8.
-False [] range "a-[:digit:]" before HERE mark in regex m/[a-[:digit:] << HERE ]/ at - line 9.
-False [] range "[:digit:]-" before HERE mark in regex m/[[:digit:]- << HERE b]/ at - line 10.
-False [] range "[:alpha:]-" before HERE mark in regex m/[[:alpha:]- << HERE [:digit:]]/ at - line 11.
-False [] range "[:digit:]-" before HERE mark in regex m/[[:digit:]- << HERE [:alpha:]]/ at - line 12.
-########
-# regcomp.c [S_regclassutf8]
-BEGIN {
- if (ord("\t") == 5) {
- print "SKIPPED\n# ebcdic regular expression ranges differ.";
- exit 0;
- }
-}
-use utf8;
-$_ = "";
-use warnings 'regexp' ;
-/[a-b]/;
-/[a-\d]/;
-/[\d-b]/;
-/[\s-\d]/;
-/[\d-\s]/;
-/[a-[:digit:]]/;
-/[[:digit:]-b]/;
-/[[:alpha:]-[:digit:]]/;
-/[[:digit:]-[:alpha:]]/;
-no warnings 'regexp' ;
-/[a-b]/;
-/[a-\d]/;
-/[\d-b]/;
-/[\s-\d]/;
-/[\d-\s]/;
-/[a-[:digit:]]/;
-/[[:digit:]-b]/;
-/[[:alpha:]-[:digit:]]/;
-/[[:digit:]-[:alpha:]]/;
-EXPECT
-False [] range "a-\d" before HERE mark in regex m/[a-\d << HERE ]/ at - line 12.
-False [] range "\d-" before HERE mark in regex m/[\d- << HERE b]/ at - line 13.
-False [] range "\s-" before HERE mark in regex m/[\s- << HERE \d]/ at - line 14.
-False [] range "\d-" before HERE mark in regex m/[\d- << HERE \s]/ at - line 15.
-False [] range "a-[:digit:]" before HERE mark in regex m/[a-[:digit:] << HERE ]/ at - line 16.
-False [] range "[:digit:]-" before HERE mark in regex m/[[:digit:]- << HERE b]/ at - line 17.
-False [] range "[:alpha:]-" before HERE mark in regex m/[[:alpha:]- << HERE [:digit:]]/ at - line 18.
-False [] range "[:digit:]-" before HERE mark in regex m/[[:digit:]- << HERE [:alpha:]]/ at - line 19.
-########
-# regcomp.c [S_regclass S_regclassutf8]
-use warnings 'regexp' ;
-$a =~ /[a\zb]/ ;
-no warnings 'regexp' ;
-$a =~ /[a\zb]/ ;
-EXPECT
-Unrecognized escape \z in character class passed through before HERE mark in regex m/[a\z << HERE b]/ at - line 3.
-
diff --git a/contrib/perl5/t/pragma/warn/regexec b/contrib/perl5/t/pragma/warn/regexec
deleted file mode 100644
index 73696df..0000000
--- a/contrib/perl5/t/pragma/warn/regexec
+++ /dev/null
@@ -1,119 +0,0 @@
- regexec.c
-
- This test generates "bad free" warnings when run under
- PERL_DESTRUCT_LEVEL. This file merely serves as a placeholder
- for investigation.
-
- Complex regular subexpression recursion limit (%d) exceeded
-
- $_ = 'a' x (2**15+1); /^()(a\1)*$/ ;
- Complex regular subexpression recursion limit (%d) exceeded
-
- $_ = 'a' x (2**15+1); /^()(a\1)*?$/ ;
-
- (The actual value substituted for %d is masked in the tests so that
- REG_INFTY configuration variable value does not affect outcome.)
-__END__
-# regexec.c
-print("SKIPPED\n# most systems run into stacksize limits\n"),exit;
-use warnings 'regexp' ;
-$SIG{__WARN__} = sub{local ($m) = shift;
- $m =~ s/\(\d+\)/(*MASKED*)/;
- print STDERR $m};
-$_ = 'a' x (2**15+1);
-/^()(a\1)*$/ ;
-#
-# If this test fails with a segmentation violation or similar,
-# you may have to increase the default stacksize limit in your
-# shell. You may need superuser privileges.
-#
-# Under the sh, ksh, zsh:
-# $ ulimit -s
-# 8192
-# $ ulimit -s 16000
-#
-# Under the csh:
-# % limit stacksize
-# stacksize 8192 kbytes
-# % limit stacksize 16000
-#
-EXPECT
-Complex regular subexpression recursion limit (*MASKED*) exceeded at - line 9.
-########
-# regexec.c
-print("SKIPPED\n# most systems run into stacksize limits\n"),exit;
-no warnings 'regexp' ;
-$SIG{__WARN__} = sub{local ($m) = shift;
- $m =~ s/\(\d+\)/(*MASKED*)/;
- print STDERR $m};
-$_ = 'a' x (2**15+1);
-/^()(a\1)*$/ ;
-#
-# If this test fails with a segmentation violation or similar,
-# you may have to increase the default stacksize limit in your
-# shell. You may need superuser privileges.
-#
-# Under the sh, ksh, zsh:
-# $ ulimit -s
-# 8192
-# $ ulimit -s 16000
-#
-# Under the csh:
-# % limit stacksize
-# stacksize 8192 kbytes
-# % limit stacksize 16000
-#
-EXPECT
-
-########
-# regexec.c
-print("SKIPPED\n# most systems run into stacksize limits\n"),exit;
-use warnings 'regexp' ;
-$SIG{__WARN__} = sub{local ($m) = shift;
- $m =~ s/\(\d+\)/(*MASKED*)/;
- print STDERR $m};
-$_ = 'a' x (2**15+1);
-/^()(a\1)*?$/ ;
-#
-# If this test fails with a segmentation violation or similar,
-# you may have to increase the default stacksize limit in your
-# shell. You may need superuser privileges.
-#
-# Under the sh, ksh, zsh:
-# $ ulimit -s
-# 8192
-# $ ulimit -s 16000
-#
-# Under the csh:
-# % limit stacksize
-# stacksize 8192 kbytes
-# % limit stacksize 16000
-#
-EXPECT
-Complex regular subexpression recursion limit (*MASKED*) exceeded at - line 9.
-########
-# regexec.c
-print("SKIPPED\n# most systems run into stacksize limits\n"),exit;
-no warnings 'regexp' ;
-$SIG{__WARN__} = sub{local ($m) = shift;
- $m =~ s/\(\d+\)/(*MASKED*)/;
- print STDERR $m};
-$_ = 'a' x (2**15+1);
-/^()(a\1)*?$/ ;
-#
-# If this test fails with a segmentation violation or similar,
-# you may have to increase the default stacksize limit in your
-# shell. You may need superuser privileges.
-#
-# Under the sh, ksh, zsh:
-# $ ulimit -s
-# 8192
-# $ ulimit -s 16000
-#
-# Under the csh:
-# % limit stacksize
-# stacksize 8192 kbytes
-# % limit stacksize 16000
-#
-EXPECT
-
diff --git a/contrib/perl5/t/pragma/warn/run b/contrib/perl5/t/pragma/warn/run
deleted file mode 100644
index 7a4be20..0000000
--- a/contrib/perl5/t/pragma/warn/run
+++ /dev/null
@@ -1,8 +0,0 @@
- run.c
-
-
- Mandatory Warnings ALL TODO
- ------------------
- NULL OP IN RUN
-
-__END__
diff --git a/contrib/perl5/t/pragma/warn/sv b/contrib/perl5/t/pragma/warn/sv
deleted file mode 100644
index 2409589..0000000
--- a/contrib/perl5/t/pragma/warn/sv
+++ /dev/null
@@ -1,303 +0,0 @@
- sv.c
-
- warn(warn_uninit);
-
- warn(warn_uninit);
-
- warn(warn_uninit);
-
- warn(warn_uninit);
-
- not_a_number(sv);
-
- not_a_number(sv);
-
- warn(warn_uninit);
-
- not_a_number(sv);
-
- warn(warn_uninit);
-
- not_a_number(sv);
-
- not_a_number(sv);
-
- warn(warn_uninit);
-
- warn(warn_uninit);
-
- Subroutine %s redefined
-
- Invalid conversion in %s:
-
- Undefined value assigned to typeglob
-
- Possible Y2K bug: %d format string following '19'
-
- Reference is already weak [Perl_sv_rvweaken] <<TODO
-
- Mandatory Warnings
- ------------------
- Malformed UTF-8 character [sv_pos_b2u] (not tested: difficult to produce
- with perl now)
-
- Mandatory Warnings TODO
- ------------------
- Attempt to free non-arena SV: 0x%lx [del_sv]
- Reference miscount in sv_replace() [sv_replace]
- Attempt to free unreferenced scalar [sv_free]
- Attempt to free temp prematurely: SV 0x%lx [sv_free]
- semi-panic: attempt to dup freed string [newSVsv]
-
-
-__END__
-# sv.c
-use integer ;
-use warnings 'uninitialized' ;
-$x = 1 + $a[0] ; # a
-no warnings 'uninitialized' ;
-$x = 1 + $b[0] ; # a
-EXPECT
-Use of uninitialized value in integer addition (+) at - line 4.
-########
-# sv.c (sv_2iv)
-package fred ;
-sub TIESCALAR { my $x ; bless \$x}
-sub FETCH { return undef }
-sub STORE { return 1 }
-package main ;
-tie $A, 'fred' ;
-use integer ;
-use warnings 'uninitialized' ;
-$A *= 2 ;
-no warnings 'uninitialized' ;
-$A *= 2 ;
-EXPECT
-Use of uninitialized value in integer multiplication (*) at - line 10.
-########
-# sv.c
-use integer ;
-use warnings 'uninitialized' ;
-my $x *= 2 ; #b
-no warnings 'uninitialized' ;
-my $y *= 2 ; #b
-EXPECT
-Use of uninitialized value in integer multiplication (*) at - line 4.
-########
-# sv.c (sv_2uv)
-package fred ;
-sub TIESCALAR { my $x ; bless \$x}
-sub FETCH { return undef }
-sub STORE { return 1 }
-package main ;
-tie $A, 'fred' ;
-use warnings 'uninitialized' ;
-$B = 0 ;
-$B |= $A ;
-no warnings 'uninitialized' ;
-$B = 0 ;
-$B |= $A ;
-EXPECT
-Use of uninitialized value in bitwise or (|) at - line 10.
-########
-# sv.c
-use warnings 'uninitialized' ;
-my $Y = 1 ;
-my $x = 1 | $a[$Y] ;
-no warnings 'uninitialized' ;
-my $Y = 1 ;
-$x = 1 | $b[$Y] ;
-EXPECT
-Use of uninitialized value in bitwise or (|) at - line 4.
-########
-# sv.c
-use warnings 'uninitialized' ;
-my $x *= 1 ; # d
-no warnings 'uninitialized' ;
-my $y *= 1 ; # d
-EXPECT
-Use of uninitialized value in multiplication (*) at - line 3.
-########
-# sv.c
-use warnings 'uninitialized' ;
-$x = 1 + $a[0] ; # e
-no warnings 'uninitialized' ;
-$x = 1 + $b[0] ; # e
-EXPECT
-Use of uninitialized value in addition (+) at - line 3.
-########
-# sv.c (sv_2nv)
-package fred ;
-sub TIESCALAR { my $x ; bless \$x}
-sub FETCH { return undef }
-sub STORE { return 1 }
-package main ;
-tie $A, 'fred' ;
-use warnings 'uninitialized' ;
-$A *= 2 ;
-no warnings 'uninitialized' ;
-$A *= 2 ;
-EXPECT
-Use of uninitialized value in multiplication (*) at - line 9.
-########
-# sv.c
-use warnings 'uninitialized' ;
-$x = $y + 1 ; # f
-no warnings 'uninitialized' ;
-$x = $z + 1 ; # f
-EXPECT
-Use of uninitialized value in addition (+) at - line 3.
-########
-# sv.c
-use warnings 'uninitialized' ;
-$x = chop undef ; # g
-no warnings 'uninitialized' ;
-$x = chop undef ; # g
-EXPECT
-Modification of a read-only value attempted at - line 3.
-########
-# sv.c
-use warnings 'uninitialized' ;
-$x = chop $y ; # h
-no warnings 'uninitialized' ;
-$x = chop $z ; # h
-EXPECT
-Use of uninitialized value in scalar chop at - line 3.
-########
-# sv.c (sv_2pv)
-package fred ;
-sub TIESCALAR { my $x ; bless \$x}
-sub FETCH { return undef }
-sub STORE { return 1 }
-package main ;
-tie $A, 'fred' ;
-use warnings 'uninitialized' ;
-$B = "" ;
-$B .= $A ;
-no warnings 'uninitialized' ;
-$C = "" ;
-$C .= $A ;
-EXPECT
-Use of uninitialized value in concatenation (.) or string at - line 10.
-########
-# sv.c
-use warnings 'numeric' ;
-sub TIESCALAR{bless[]} ;
-sub FETCH {"def"} ;
-tie $a,"main" ;
-my $b = 1 + $a;
-no warnings 'numeric' ;
-my $c = 1 + $a;
-EXPECT
-Argument "def" isn't numeric in addition (+) at - line 6.
-########
-# sv.c
-use warnings 'numeric' ;
-my $x = 1 + "def" ;
-no warnings 'numeric' ;
-my $z = 1 + "def" ;
-EXPECT
-Argument "def" isn't numeric in addition (+) at - line 3.
-########
-# sv.c
-use warnings 'numeric' ;
-my $a = "def" ;
-my $x = 1 + $a ;
-no warnings 'numeric' ;
-my $y = 1 + $a ;
-EXPECT
-Argument "def" isn't numeric in addition (+) at - line 4.
-########
-# sv.c
-use warnings 'numeric' ; use integer ;
-my $a = "def" ;
-my $x = 1 + $a ;
-no warnings 'numeric' ;
-my $z = 1 + $a ;
-EXPECT
-Argument "def" isn't numeric in integer addition (+) at - line 4.
-########
-# sv.c
-use warnings 'numeric' ;
-my $x = 1 & "def" ;
-no warnings 'numeric' ;
-my $z = 1 & "def" ;
-EXPECT
-Argument "def" isn't numeric in bitwise and (&) at - line 3.
-########
-# sv.c
-use warnings 'redefine' ;
-sub fred {}
-sub joe {}
-*fred = \&joe ;
-no warnings 'redefine' ;
-sub jim {}
-*jim = \&joe ;
-EXPECT
-Subroutine fred redefined at - line 5.
-########
-# sv.c
-use warnings 'printf' ;
-open F, ">".($^O eq 'VMS'? 'NL:' : '/dev/null') ;
-printf F "%z\n" ;
-my $a = sprintf "%z" ;
-printf F "%" ;
-$a = sprintf "%" ;
-printf F "%\x02" ;
-$a = sprintf "%\x02" ;
-no warnings 'printf' ;
-printf F "%z\n" ;
-$a = sprintf "%z" ;
-printf F "%" ;
-$a = sprintf "%" ;
-printf F "%\x02" ;
-$a = sprintf "%\x02" ;
-EXPECT
-Invalid conversion in sprintf: "%z" at - line 5.
-Invalid conversion in sprintf: end of string at - line 7.
-Invalid conversion in sprintf: "%\002" at - line 9.
-Invalid conversion in printf: "%z" at - line 4.
-Invalid conversion in printf: end of string at - line 6.
-Invalid conversion in printf: "%\002" at - line 8.
-########
-# sv.c
-use warnings 'misc' ;
-*a = undef ;
-no warnings 'misc' ;
-*b = undef ;
-EXPECT
-Undefined value assigned to typeglob at - line 3.
-########
-# sv.c
-use warnings 'y2k';
-use Config;
-BEGIN {
- unless ($Config{ccflags} =~ /Y2KWARN/) {
- print "SKIPPED\n# perl not built with -DPERL_Y2KWARN";
- exit 0;
- }
- $|=1;
-}
-my $x;
-my $yy = 78;
-$x = printf "19%02d\n", $yy;
-$x = sprintf "#19%02d\n", $yy;
-$x = printf " 19%02d\n", 78;
-$x = sprintf "19%02d\n", 78;
-$x = printf "319%02d\n", $yy;
-$x = sprintf "319%02d\n", $yy;
-no warnings 'y2k';
-$x = printf "19%02d\n", $yy;
-$x = sprintf "19%02d\n", $yy;
-$x = printf "19%02d\n", 78;
-$x = sprintf "19%02d\n", 78;
-EXPECT
-Possible Y2K bug: %d format string following '19' at - line 16.
-Possible Y2K bug: %d format string following '19' at - line 13.
-1978
-Possible Y2K bug: %d format string following '19' at - line 14.
-Possible Y2K bug: %d format string following '19' at - line 15.
- 1978
-31978
-1978
-1978
diff --git a/contrib/perl5/t/pragma/warn/taint b/contrib/perl5/t/pragma/warn/taint
deleted file mode 100644
index fd6deed..0000000
--- a/contrib/perl5/t/pragma/warn/taint
+++ /dev/null
@@ -1,49 +0,0 @@
- taint.c AOK
-
- Insecure %s%s while running with -T switch
-
-__END__
--T
---FILE-- abc
-def
---FILE--
-# taint.c
-open(FH, "<abc") ;
-$a = <FH> ;
-close FH ;
-chdir $a ;
-print "xxx\n" ;
-EXPECT
-Insecure dependency in chdir while running with -T switch at - line 5.
-########
--TU
---FILE-- abc
-def
---FILE--
-# taint.c
-open(FH, "<abc") ;
-$a = <FH> ;
-close FH ;
-chdir $a ;
-print "xxx\n" ;
-EXPECT
-xxx
-########
--TU
---FILE-- abc
-def
---FILE--
-# taint.c
-open(FH, "<abc") ;
-$a = <FH> ;
-close FH ;
-use warnings 'taint' ;
-chdir $a ;
-print "xxx\n" ;
-no warnings 'taint' ;
-chdir $a ;
-print "yyy\n" ;
-EXPECT
-Insecure dependency in chdir while running with -T switch at - line 6.
-xxx
-yyy
diff --git a/contrib/perl5/t/pragma/warn/toke b/contrib/perl5/t/pragma/warn/toke
deleted file mode 100644
index fa71329..0000000
--- a/contrib/perl5/t/pragma/warn/toke
+++ /dev/null
@@ -1,587 +0,0 @@
-toke.c AOK
-
- we seem to have lost a few ambiguous warnings!!
-
-
- 1 if $a EQ $b ;
- 1 if $a NE $b ;
- 1 if $a LT $b ;
- 1 if $a GT $b ;
- 1 if $a GE $b ;
- 1 if $a LE $b ;
- $a = <<;
- Use of comma-less variable list is deprecated
- (called 3 times via depcom)
-
- \1 better written as $1
- use warnings 'syntax' ;
- s/(abc)/\1/;
-
- warn(warn_nosemi)
- Semicolon seems to be missing
- $a = 1
- &time ;
-
-
- Reversed %c= operator
- my $a =+ 2 ;
- $a =- 2 ;
- $a =* 2 ;
- $a =% 2 ;
- $a =& 2 ;
- $a =. 2 ;
- $a =^ 2 ;
- $a =| 2 ;
- $a =< 2 ;
- $a =/ 2 ;
-
- Multidimensional syntax %.*s not supported
- my $a = $a[1,2] ;
-
- You need to quote \"%s\""
- sub fred {} ; $SIG{TERM} = fred;
-
- Scalar value %.*s better written as $%.*s"
- @a[3] = 2;
- @a{3} = 2;
-
- Can't use \\%c to mean $%c in expression
- $_ = "ab" ; s/(ab)/\1/e;
-
- Unquoted string "abc" may clash with future reserved word at - line 3.
- warn(warn_reserved
- $a = abc;
-
- chmod() mode argument is missing initial 0
- chmod 3;
-
- Possible attempt to separate words with commas
- @a = qw(a, b, c) ;
-
- Possible attempt to put comments in qw() list
- @a = qw(a b # c) ;
-
- umask: argument is missing initial 0
- umask 3;
-
- %s (...) interpreted as function
- print ("")
- printf ("")
- sort ("")
-
- Ambiguous use of %c{%s%s} resolved to %c%s%s
- $a = ${time[2]}
- $a = ${time{2}}
-
-
- Ambiguous use of %c{%s} resolved to %c%s
- $a = ${time}
- sub fred {} $a = ${fred}
-
- Misplaced _ in number
- $a = 1_2;
- $a = 1_2345_6;
-
- Bareword \"%s\" refers to nonexistent package
- $a = FRED:: ;
-
- Ambiguous call resolved as CORE::%s(), qualify as such or use &
- sub time {}
- my $a = time()
-
- Unrecognized escape \\%c passed through
- $a = "\m" ;
-
- %s number > %s non-portable
- my $a = 0b011111111111111111111111111111110 ;
- $a = 0b011111111111111111111111111111111 ;
- $a = 0b111111111111111111111111111111111 ;
- $a = 0x0fffffffe ;
- $a = 0x0ffffffff ;
- $a = 0x1ffffffff ;
- $a = 0037777777776 ;
- $a = 0037777777777 ;
- $a = 0047777777777 ;
-
- Integer overflow in binary number
- my $a = 0b011111111111111111111111111111110 ;
- $a = 0b011111111111111111111111111111111 ;
- $a = 0b111111111111111111111111111111111 ;
- $a = 0x0fffffffe ;
- $a = 0x0ffffffff ;
- $a = 0x1ffffffff ;
- $a = 0037777777776 ;
- $a = 0037777777777 ;
- $a = 0047777777777 ;
-
- Mandatory Warnings
- ------------------
- Use of "%s" without parentheses is ambiguous [check_uni]
- rand + 4
-
- Ambiguous use of -%s resolved as -&%s() [yylex]
- sub fred {} ; - fred ;
-
- Precedence problem: open %.*s should be open(%.*s) [yylex]
- open FOO || die;
-
- Operator or semicolon missing before %c%s [yylex]
- Ambiguous use of %c resolved as operator %c
- *foo *foo
-
-__END__
-# toke.c
-use warnings 'deprecated' ;
-1 if $a EQ $b ;
-1 if $a NE $b ;
-1 if $a GT $b ;
-1 if $a LT $b ;
-1 if $a GE $b ;
-1 if $a LE $b ;
-no warnings 'deprecated' ;
-1 if $a EQ $b ;
-1 if $a NE $b ;
-1 if $a GT $b ;
-1 if $a LT $b ;
-1 if $a GE $b ;
-1 if $a LE $b ;
-EXPECT
-Use of EQ is deprecated at - line 3.
-Use of NE is deprecated at - line 4.
-Use of GT is deprecated at - line 5.
-Use of LT is deprecated at - line 6.
-Use of GE is deprecated at - line 7.
-Use of LE is deprecated at - line 8.
-########
-# toke.c
-use warnings 'deprecated' ;
-format STDOUT =
-@<<< @||| @>>> @>>>
-$a $b "abc" 'def'
-.
-no warnings 'deprecated' ;
-format STDOUT =
-@<<< @||| @>>> @>>>
-$a $b "abc" 'def'
-.
-EXPECT
-Use of comma-less variable list is deprecated at - line 5.
-Use of comma-less variable list is deprecated at - line 5.
-Use of comma-less variable list is deprecated at - line 5.
-########
-# toke.c
-use warnings 'deprecated' ;
-$a = <<;
-
-no warnings 'deprecated' ;
-$a = <<;
-
-EXPECT
-Use of bare << to mean <<"" is deprecated at - line 3.
-########
-# toke.c
-use warnings 'syntax' ;
-s/(abc)/\1/;
-no warnings 'syntax' ;
-s/(abc)/\1/;
-EXPECT
-\1 better written as $1 at - line 3.
-########
-# toke.c
-use warnings 'semicolon' ;
-$a = 1
-&time ;
-no warnings 'semicolon' ;
-$a = 1
-&time ;
-EXPECT
-Semicolon seems to be missing at - line 3.
-########
-# toke.c
-use warnings 'syntax' ;
-my $a =+ 2 ;
-$a =- 2 ;
-$a =* 2 ;
-$a =% 2 ;
-$a =& 2 ;
-$a =. 2 ;
-$a =^ 2 ;
-$a =| 2 ;
-$a =< 2 ;
-$a =/ 2 ;
-EXPECT
-Reversed += operator at - line 3.
-Reversed -= operator at - line 4.
-Reversed *= operator at - line 5.
-Reversed %= operator at - line 6.
-Reversed &= operator at - line 7.
-Reversed .= operator at - line 8.
-Reversed ^= operator at - line 9.
-Reversed |= operator at - line 10.
-Reversed <= operator at - line 11.
-syntax error at - line 8, near "=."
-syntax error at - line 9, near "=^"
-syntax error at - line 10, near "=|"
-Unterminated <> operator at - line 11.
-########
-# toke.c
-no warnings 'syntax' ;
-my $a =+ 2 ;
-$a =- 2 ;
-$a =* 2 ;
-$a =% 2 ;
-$a =& 2 ;
-$a =. 2 ;
-$a =^ 2 ;
-$a =| 2 ;
-$a =< 2 ;
-$a =/ 2 ;
-EXPECT
-syntax error at - line 8, near "=."
-syntax error at - line 9, near "=^"
-syntax error at - line 10, near "=|"
-Unterminated <> operator at - line 11.
-########
-# toke.c
-use warnings 'syntax' ;
-my $a = $a[1,2] ;
-no warnings 'syntax' ;
-my $a = $a[1,2] ;
-EXPECT
-Multidimensional syntax $a[1,2] not supported at - line 3.
-########
-# toke.c
-use warnings 'syntax' ;
-sub fred {} ; $SIG{TERM} = fred;
-no warnings 'syntax' ;
-$SIG{TERM} = fred;
-EXPECT
-You need to quote "fred" at - line 3.
-########
-# toke.c
-use warnings 'syntax' ;
-@a[3] = 2;
-@a{3} = 2;
-no warnings 'syntax' ;
-@a[3] = 2;
-@a{3} = 2;
-EXPECT
-Scalar value @a[3] better written as $a[3] at - line 3.
-Scalar value @a{3} better written as $a{3} at - line 4.
-########
-# toke.c
-use warnings 'syntax' ;
-$_ = "ab" ;
-s/(ab)/\1/e;
-no warnings 'syntax' ;
-$_ = "ab" ;
-s/(ab)/\1/e;
-EXPECT
-Can't use \1 to mean $1 in expression at - line 4.
-########
-# toke.c
-use warnings 'reserved' ;
-$a = abc;
-$a = { def
-
-=> 1 };
-no warnings 'reserved' ;
-$a = abc;
-EXPECT
-Unquoted string "abc" may clash with future reserved word at - line 3.
-########
-# toke.c
-use warnings 'chmod' ;
-chmod 3;
-no warnings 'chmod' ;
-chmod 3;
-EXPECT
-chmod() mode argument is missing initial 0 at - line 3.
-########
-# toke.c
-use warnings 'qw' ;
-@a = qw(a, b, c) ;
-no warnings 'qw' ;
-@a = qw(a, b, c) ;
-EXPECT
-Possible attempt to separate words with commas at - line 3.
-########
-# toke.c
-use warnings 'qw' ;
-@a = qw(a b #) ;
-no warnings 'qw' ;
-@a = qw(a b #) ;
-EXPECT
-Possible attempt to put comments in qw() list at - line 3.
-########
-# toke.c
-use warnings 'umask' ;
-umask 3;
-no warnings 'umask' ;
-umask 3;
-EXPECT
-umask: argument is missing initial 0 at - line 3.
-########
-# toke.c
-use warnings 'syntax' ;
-print ("")
-EXPECT
-print (...) interpreted as function at - line 3.
-########
-# toke.c
-no warnings 'syntax' ;
-print ("")
-EXPECT
-
-########
-# toke.c
-use warnings 'syntax' ;
-printf ("")
-EXPECT
-printf (...) interpreted as function at - line 3.
-########
-# toke.c
-no warnings 'syntax' ;
-printf ("")
-EXPECT
-
-########
-# toke.c
-use warnings 'syntax' ;
-sort ("")
-EXPECT
-sort (...) interpreted as function at - line 3.
-########
-# toke.c
-no warnings 'syntax' ;
-sort ("")
-EXPECT
-
-########
-# toke.c
-use warnings 'ambiguous' ;
-$a = ${time[2]};
-no warnings 'ambiguous' ;
-$a = ${time[2]};
-EXPECT
-Ambiguous use of ${time[...]} resolved to $time[...] at - line 3.
-########
-# toke.c
-use warnings 'ambiguous' ;
-$a = ${time{2}};
-EXPECT
-Ambiguous use of ${time{...}} resolved to $time{...} at - line 3.
-########
-# toke.c
-no warnings 'ambiguous' ;
-$a = ${time{2}};
-EXPECT
-
-########
-# toke.c
-use warnings 'ambiguous' ;
-$a = ${time} ;
-no warnings 'ambiguous' ;
-$a = ${time} ;
-EXPECT
-Ambiguous use of ${time} resolved to $time at - line 3.
-########
-# toke.c
-use warnings 'ambiguous' ;
-sub fred {}
-$a = ${fred} ;
-no warnings 'ambiguous' ;
-$a = ${fred} ;
-EXPECT
-Ambiguous use of ${fred} resolved to $fred at - line 4.
-########
-# toke.c
-use warnings 'syntax' ;
-$a = 1_2;
-$a = 1_2345_6;
-no warnings 'syntax' ;
-$a = 1_2;
-$a = 1_2345_6;
-EXPECT
-Misplaced _ in number at - line 3.
-Misplaced _ in number at - line 4.
-Misplaced _ in number at - line 4.
-########
-# toke.c
-use warnings 'bareword' ;
-#line 25 "bar"
-$a = FRED:: ;
-no warnings 'bareword' ;
-#line 25 "bar"
-$a = FRED:: ;
-EXPECT
-Bareword "FRED::" refers to nonexistent package at bar line 25.
-########
-# toke.c
-use warnings 'ambiguous' ;
-sub time {}
-my $a = time() ;
-no warnings 'ambiguous' ;
-my $b = time() ;
-EXPECT
-Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4.
-########
-# toke.c
-use warnings ;
-eval <<'EOE';
-# line 30 "foo"
-warn "yelp";
-{
- $_ = " \x{123} " ;
-}
-EOE
-EXPECT
-yelp at foo line 30.
-########
-# toke.c
-my $a = rand + 4 ;
-EXPECT
-Warning: Use of "rand" without parens is ambiguous at - line 2.
-########
-# toke.c
-$^W = 0 ;
-my $a = rand + 4 ;
-{
- no warnings 'ambiguous' ;
- $a = rand + 4 ;
- use warnings 'ambiguous' ;
- $a = rand + 4 ;
-}
-$a = rand + 4 ;
-EXPECT
-Warning: Use of "rand" without parens is ambiguous at - line 3.
-Warning: Use of "rand" without parens is ambiguous at - line 8.
-Warning: Use of "rand" without parens is ambiguous at - line 10.
-########
-# toke.c
-sub fred {};
--fred ;
-EXPECT
-Ambiguous use of -fred resolved as -&fred() at - line 3.
-########
-# toke.c
-$^W = 0 ;
-sub fred {} ;
--fred ;
-{
- no warnings 'ambiguous' ;
- -fred ;
- use warnings 'ambiguous' ;
- -fred ;
-}
--fred ;
-EXPECT
-Ambiguous use of -fred resolved as -&fred() at - line 4.
-Ambiguous use of -fred resolved as -&fred() at - line 9.
-Ambiguous use of -fred resolved as -&fred() at - line 11.
-########
-# toke.c
-open FOO || time;
-EXPECT
-Precedence problem: open FOO should be open(FOO) at - line 2.
-########
-# toke.c
-$^W = 0 ;
-open FOO || time;
-{
- no warnings 'precedence' ;
- open FOO || time;
- use warnings 'precedence' ;
- open FOO || time;
-}
-open FOO || time;
-EXPECT
-Precedence problem: open FOO should be open(FOO) at - line 3.
-Precedence problem: open FOO should be open(FOO) at - line 8.
-Precedence problem: open FOO should be open(FOO) at - line 10.
-########
-# toke.c
-$^W = 0 ;
-*foo *foo ;
-{
- no warnings 'ambiguous' ;
- *foo *foo ;
- use warnings 'ambiguous' ;
- *foo *foo ;
-}
-*foo *foo ;
-EXPECT
-Operator or semicolon missing before *foo at - line 3.
-Ambiguous use of * resolved as operator * at - line 3.
-Operator or semicolon missing before *foo at - line 8.
-Ambiguous use of * resolved as operator * at - line 8.
-Operator or semicolon missing before *foo at - line 10.
-Ambiguous use of * resolved as operator * at - line 10.
-########
-# toke.c
-use warnings 'misc' ;
-my $a = "\m" ;
-no warnings 'misc' ;
-$a = "\m" ;
-EXPECT
-Unrecognized escape \m passed through at - line 3.
-########
-# toke.c
-use warnings 'portable' ;
-my $a = 0b011111111111111111111111111111110 ;
- $a = 0b011111111111111111111111111111111 ;
- $a = 0b111111111111111111111111111111111 ;
- $a = 0x0fffffffe ;
- $a = 0x0ffffffff ;
- $a = 0x1ffffffff ;
- $a = 0037777777776 ;
- $a = 0037777777777 ;
- $a = 0047777777777 ;
-no warnings 'portable' ;
- $a = 0b011111111111111111111111111111110 ;
- $a = 0b011111111111111111111111111111111 ;
- $a = 0b111111111111111111111111111111111 ;
- $a = 0x0fffffffe ;
- $a = 0x0ffffffff ;
- $a = 0x1ffffffff ;
- $a = 0037777777776 ;
- $a = 0037777777777 ;
- $a = 0047777777777 ;
-EXPECT
-Binary number > 0b11111111111111111111111111111111 non-portable at - line 5.
-Hexadecimal number > 0xffffffff non-portable at - line 8.
-Octal number > 037777777777 non-portable at - line 11.
-########
-# toke.c
-use warnings 'overflow' ;
-my $a = 0b011111111111111111111111111111110 ;
- $a = 0b011111111111111111111111111111111 ;
- $a = 0b10000000000000000000000000000000000000000000000000000000000000000 ;
- $a = 0x0fffffffe ;
- $a = 0x0ffffffff ;
- $a = 0x10000000000000000 ;
- $a = 0037777777776 ;
- $a = 0037777777777 ;
- $a = 002000000000000000000000;
-no warnings 'overflow' ;
- $a = 0b011111111111111111111111111111110 ;
- $a = 0b011111111111111111111111111111111 ;
- $a = 0b10000000000000000000000000000000000000000000000000000000000000000 ;
- $a = 0x0fffffffe ;
- $a = 0x0ffffffff ;
- $a = 0x10000000000000000 ;
- $a = 0037777777776 ;
- $a = 0037777777777 ;
- $a = 002000000000000000000000;
-EXPECT
-Integer overflow in binary number at - line 5.
-Integer overflow in hexadecimal number at - line 8.
-Integer overflow in octal number at - line 11.
-########
-# toke.c
-use warnings 'ambiguous';
-"@mjd_previously_unused_array";
-no warnings 'ambiguous';
-"@mjd_previously_unused_array";
-EXPECT
-Possible unintended interpolation of @mjd_previously_unused_array in string at - line 3.
diff --git a/contrib/perl5/t/pragma/warn/universal b/contrib/perl5/t/pragma/warn/universal
deleted file mode 100644
index 6dbb1be..0000000
--- a/contrib/perl5/t/pragma/warn/universal
+++ /dev/null
@@ -1,16 +0,0 @@
- universal.c AOK
-
- Can't locate package %s for @%s::ISA [S_isa_lookup]
-
-
-
-__END__
-# universal.c [S_isa_lookup]
-use warnings 'misc' ;
-@ISA = qw(Joe) ;
-my $a = bless [] ;
-UNIVERSAL::isa $a, Jim ;
-EXPECT
-Can't locate package Joe for @main::ISA at - line 5.
-Can't locate package Joe for @main::ISA.
-Can't locate package Joe for @main::ISA.
diff --git a/contrib/perl5/t/pragma/warn/utf8 b/contrib/perl5/t/pragma/warn/utf8
deleted file mode 100644
index 9a7dbaf..0000000
--- a/contrib/perl5/t/pragma/warn/utf8
+++ /dev/null
@@ -1,35 +0,0 @@
-
- utf8.c AOK
-
- [utf8_to_uv]
- Malformed UTF-8 character
- my $a = ord "\x80" ;
-
- Malformed UTF-8 character
- my $a = ord "\xf080" ;
- <<<<<< this warning can't be easily triggered from perl anymore
-
- [utf16_to_utf8]
- Malformed UTF-16 surrogate
- <<<<<< Add a test when somethig actually calls utf16_to_utf8
-
-__END__
-# utf8.c [utf8_to_uv] -W
-BEGIN {
- if (ord('A') == 193) {
- print "SKIPPED\n# ebcdic platforms do not generate Malformed UTF-8 warnings.";
- exit 0;
- }
-}
-use utf8 ;
-my $a = "snøstorm" ;
-{
- no warnings 'utf8' ;
- my $a = "snøstorm";
- use warnings 'utf8' ;
- my $a = "snøstorm";
-}
-EXPECT
-Malformed UTF-8 character (unexpected non-continuation byte 0x73 after start byte 0xf8) at - line 9.
-Malformed UTF-8 character (unexpected non-continuation byte 0x73 after start byte 0xf8) at - line 14.
-########
diff --git a/contrib/perl5/t/pragma/warn/util b/contrib/perl5/t/pragma/warn/util
deleted file mode 100644
index e82d6a6..0000000
--- a/contrib/perl5/t/pragma/warn/util
+++ /dev/null
@@ -1,108 +0,0 @@
- util.c AOK
-
- Illegal octal digit ignored
- my $a = oct "029" ;
-
- Illegal hex digit ignored
- my $a = hex "0xv9" ;
-
- Illegal binary digit ignored
- my $a = oct "0b9" ;
-
- Integer overflow in binary number
- my $a = oct "0b111111111111111111111111111111111111111111" ;
- Binary number > 0b11111111111111111111111111111111 non-portable
- $a = oct "0b111111111111111111111111111111111" ;
- Integer overflow in octal number
- my $a = oct "077777777777777777777777777777" ;
- Octal number > 037777777777 non-portable
- $a = oct "0047777777777" ;
- Integer overflow in hexadecimal number
- my $a = hex "0xffffffffffffffffffff" ;
- Hexadecimal number > 0xffffffff non-portable
- $a = hex "0x1ffffffff" ;
-
-__END__
-# util.c
-use warnings 'digit' ;
-my $a = oct "029" ;
-no warnings 'digit' ;
-$a = oct "029" ;
-EXPECT
-Illegal octal digit '9' ignored at - line 3.
-########
-# util.c
-use warnings 'digit' ;
-my $a = hex "0xv9" ;
-no warnings 'digit' ;
-$a = hex "0xv9" ;
-EXPECT
-Illegal hexadecimal digit 'v' ignored at - line 3.
-########
-# util.c
-use warnings 'digit' ;
-my $a = oct "0b9" ;
-no warnings 'digit' ;
-$a = oct "0b9" ;
-EXPECT
-Illegal binary digit '9' ignored at - line 3.
-########
-# util.c
-use warnings 'overflow' ;
-my $a = oct "0b11111111111111111111111111111111111111111111111111111111111111111";
-no warnings 'overflow' ;
-$a = oct "0b11111111111111111111111111111111111111111111111111111111111111111";
-EXPECT
-Integer overflow in binary number at - line 3.
-########
-# util.c
-use warnings 'overflow' ;
-my $a = hex "0xffffffffffffffffffff" ;
-no warnings 'overflow' ;
-$a = hex "0xffffffffffffffffffff" ;
-EXPECT
-Integer overflow in hexadecimal number at - line 3.
-########
-# util.c
-use warnings 'overflow' ;
-my $a = oct "077777777777777777777777777777" ;
-no warnings 'overflow' ;
-$a = oct "077777777777777777777777777777" ;
-EXPECT
-Integer overflow in octal number at - line 3.
-########
-# util.c
-use warnings 'portable' ;
-my $a = oct "0b011111111111111111111111111111110" ;
- $a = oct "0b011111111111111111111111111111111" ;
- $a = oct "0b111111111111111111111111111111111" ;
-no warnings 'portable' ;
- $a = oct "0b011111111111111111111111111111110" ;
- $a = oct "0b011111111111111111111111111111111" ;
- $a = oct "0b111111111111111111111111111111111" ;
-EXPECT
-Binary number > 0b11111111111111111111111111111111 non-portable at - line 5.
-########
-# util.c
-use warnings 'portable' ;
-my $a = hex "0x0fffffffe" ;
- $a = hex "0x0ffffffff" ;
- $a = hex "0x1ffffffff" ;
-no warnings 'portable' ;
- $a = hex "0x0fffffffe" ;
- $a = hex "0x0ffffffff" ;
- $a = hex "0x1ffffffff" ;
-EXPECT
-Hexadecimal number > 0xffffffff non-portable at - line 5.
-########
-# util.c
-use warnings 'portable' ;
-my $a = oct "0037777777776" ;
- $a = oct "0037777777777" ;
- $a = oct "0047777777777" ;
-no warnings 'portable' ;
- $a = oct "0037777777776" ;
- $a = oct "0037777777777" ;
- $a = oct "0047777777777" ;
-EXPECT
-Octal number > 037777777777 non-portable at - line 5.
diff --git a/contrib/perl5/t/pragma/warnings.t b/contrib/perl5/t/pragma/warnings.t
deleted file mode 100755
index 66b4ff9..0000000
--- a/contrib/perl5/t/pragma/warnings.t
+++ /dev/null
@@ -1,119 +0,0 @@
-#!./perl
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- $ENV{PERL5LIB} = '../lib';
- require Config; import Config;
-}
-
-$| = 1;
-
-my $Is_VMS = $^O eq 'VMS';
-my $Is_MSWin32 = $^O eq 'MSWin32';
-my $tmpfile = "tmp0000";
-my $i = 0 ;
-1 while -f ++$tmpfile;
-END { if ($tmpfile) { 1 while unlink $tmpfile} }
-
-my @prgs = () ;
-my @w_files = () ;
-
-if (@ARGV)
- { print "ARGV = [@ARGV]\n" ; @w_files = map { s#^#./pragma/warn/#; $_ } @ARGV }
-else
- { @w_files = sort glob("pragma/warn/*") }
-
-foreach (@w_files) {
-
- next if /(~|\.orig|,v)$/;
-
- open F, "<$_" or die "Cannot open $_: $!\n" ;
- while (<F>) {
- last if /^__END__/ ;
- }
-
- {
- local $/ = undef;
- @prgs = (@prgs, split "\n########\n", <F>) ;
- }
- close F ;
-}
-
-undef $/;
-
-print "1..", scalar @prgs, "\n";
-
-
-for (@prgs){
- my $switch = "";
- my @temps = () ;
- if (s/^\s*-\w+//){
- $switch = $&;
- $switch =~ s/(-\S*[A-Z]\S*)/"$1"/ if $Is_VMS; # protect uc switches
- }
- my($prog,$expected) = split(/\nEXPECT\n/, $_);
- if ( $prog =~ /--FILE--/) {
- my(@files) = split(/\n--FILE--\s*([^\s\n]*)\s*\n/, $prog) ;
- shift @files ;
- die "Internal error test $i didn't split into pairs, got " .
- scalar(@files) . "[" . join("%%%%", @files) ."]\n"
- if @files % 2 ;
- while (@files > 2) {
- my $filename = shift @files ;
- my $code = shift @files ;
- push @temps, $filename ;
- open F, ">$filename" or die "Cannot open $filename: $!\n" ;
- print F $code ;
- close F ;
- }
- shift @files ;
- $prog = shift @files ;
- }
- open TEST, ">$tmpfile";
- print TEST $prog,"\n";
- close TEST;
- my $results = $Is_VMS ?
- `./perl "-I../lib" $switch $tmpfile 2>&1` :
- $Is_MSWin32 ?
- `.\\perl -I../lib $switch $tmpfile 2>&1` :
- `./perl -I../lib $switch $tmpfile 2>&1`;
- my $status = $?;
- $results =~ s/\n+$//;
- # allow expected output to be written as if $prog is on STDIN
- $results =~ s/tmp\d+/-/g;
- $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS; # clip off DCL status msg
-# bison says 'parse error' instead of 'syntax error',
-# various yaccs may or may not capitalize 'syntax'.
- $results =~ s/^(syntax|parse) error/syntax error/mig;
- # allow all tests to run when there are leaks
- $results =~ s/Scalars leaked: \d+\n//g;
- $expected =~ s/\n+$//;
- my $prefix = ($results =~ s#^PREFIX(\n|$)##) ;
- # any special options? (OPTIONS foo bar zap)
- my $option_regex = 0;
- if ($expected =~ s/^OPTIONS? (.+)\n//) {
- foreach my $option (split(' ', $1)) {
- if ($option eq 'regex') { # allow regular expressions
- $option_regex = 1;
- } else {
- die "$0: Unknown OPTION '$option'\n";
- }
- }
- }
- if ( $results =~ s/^SKIPPED\n//) {
- print "$results\n" ;
- }
- elsif (($prefix && (( $option_regex && $results !~ /^$expected/) ||
- (!$option_regex && $results !~ /^\Q$expected/))) or
- (!$prefix && (( $option_regex && $results !~ /^$expected/) ||
- (!$option_regex && $results ne $expected)))) {
- print STDERR "PROG: $switch\n$prog\n";
- print STDERR "EXPECTED:\n$expected\n";
- print STDERR "GOT:\n$results\n";
- print "not ";
- }
- print "ok ", ++$i, "\n";
- foreach (@temps)
- { unlink $_ if $_ }
-}
diff --git a/contrib/perl5/t/run/runenv.t b/contrib/perl5/t/run/runenv.t
deleted file mode 100755
index a59ad26..0000000
--- a/contrib/perl5/t/run/runenv.t
+++ /dev/null
@@ -1,147 +0,0 @@
-#!./perl
-#
-# Tests for Perl run-time environment variable settings
-#
-# $PERL5OPT, $PERL5LIB, etc.
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
- require Config; import Config;
- unless ($Config{'d_fork'}) {
- print "1..0 # Skip: no fork\n";
- exit 0;
- }
-}
-
-my $STDOUT = './results-0';
-my $STDERR = './results-1';
-my $PERL = './perl';
-my $FAILURE_CODE = 119;
-
-print "1..9\n";
-
-# Run perl with specified environment and arguments returns a list.
-# First element is true iff Perl's stdout and stderr match the
-# supplied $stdout and $stderr argument strings exactly.
-# second element is an explanation of the failure
-sub runperl {
- local *F;
- my ($env, $args, $stdout, $stderr) = @_;
-
- unshift @$args, '-I../lib';
-
- $stdout = '' unless defined $stdout;
- $stderr = '' unless defined $stderr;
- my $pid = fork;
- return (0, "Couldn't fork: $!") unless defined $pid; # failure
- if ($pid) { # parent
- my ($actual_stdout, $actual_stderr);
- wait;
- return (0, "Failure in child.\n") if ($?>>8) == $FAILURE_CODE;
-
- open F, "< $STDOUT" or return (0, "Couldn't read $STDOUT file");
- { local $/; $actual_stdout = <F> }
- open F, "< $STDERR" or return (0, "Couldn't read $STDERR file");
- { local $/; $actual_stderr = <F> }
-
- if ($actual_stdout ne $stdout) {
- return (0, "Stdout mismatch: expected [$stdout], saw [$actual_stdout]");
- } elsif ($actual_stderr ne $stderr) {
- return (0, "Stderr mismatch: expected [$stderr], saw [$actual_stderr]");
- } else {
- return 1; # success
- }
- } else { # child
- for my $k (keys %$env) {
- $ENV{$k} = $env->{$k};
- }
- open STDOUT, "> $STDOUT" or exit $FAILURE_CODE;
- open STDERR, "> $STDERR" or it_didnt_work();
- { exec $PERL, @$args }
- it_didnt_work();
- }
-}
-
-
-sub it_didnt_work {
- print STDOUT "IWHCWJIHCI\cNHJWCJQWKJQJWCQW\n";
- exit $FAILURE_CODE;
-}
-
-sub try {
- my $testno = shift;
- my ($success, $reason) = runperl(@_);
- if ($success) {
- print "ok $testno\n";
- } else {
- $reason =~ s/\n/\\n/g;
- print "not ok $testno # $reason\n";
- }
-}
-
-# PERL5OPT Command-line options (switches). Switches in
-# this variable are taken as if they were on
-# every Perl command line. Only the -[DIMUdmw]
-# switches are allowed. When running taint
-# checks (because the program was running setuid
-# or setgid, or the -T switch was used), this
-# variable is ignored. If PERL5OPT begins with
-# -T, tainting will be enabled, and any
-# subsequent options ignored.
-
-my $T = 1;
-try($T++, {PERL5OPT => '-w'}, ['-e', 'print $::x'],
- "",
- qq{Name "main::x" used only once: possible typo at -e line 1.\nUse of uninitialized value in print at -e line 1.\n});
-
-try($T++, {PERL5OPT => '-Mstrict'}, ['-e', 'print $::x'],
- "", "");
-
-try($T++, {PERL5OPT => '-Mstrict'}, ['-e', 'print $x'],
- "",
- qq{Global symbol "\$x" requires explicit package name at -e line 1.\nExecution of -e aborted due to compilation errors.\n});
-
-# Fails in 5.6.0
-try($T++, {PERL5OPT => '-Mstrict -w'}, ['-e', 'print $x'],
- "",
- qq{Global symbol "\$x" requires explicit package name at -e line 1.\nExecution of -e aborted due to compilation errors.\n});
-
-# Fails in 5.6.0
-try($T++, {PERL5OPT => '-w -Mstrict'}, ['-e', 'print $::x'],
- "",
- <<ERROR
-Name "main::x" used only once: possible typo at -e line 1.
-Use of uninitialized value in print at -e line 1.
-ERROR
- );
-
-# Fails in 5.6.0
-try($T++, {PERL5OPT => '-w -Mstrict'}, ['-e', 'print $::x'],
- "",
- <<ERROR
-Name "main::x" used only once: possible typo at -e line 1.
-Use of uninitialized value in print at -e line 1.
-ERROR
- );
-
-try($T++, {PERL5OPT => '-MExporter'}, ['-e0'],
- "",
- "");
-
-# Fails in 5.6.0
-try($T++, {PERL5OPT => '-MExporter -MExporter'}, ['-e0'],
- "",
- "");
-
-try($T++, {PERL5OPT => '-Mstrict -Mwarnings'},
- ['-e', 'print "ok" if $INC{"strict.pm"} and $INC{"warnings.pm"}'],
- "ok",
- "");
-
-print "# ", $T-1, " tests total.\n";
-
-END {
- 1 while unlink $STDOUT;
- 1 while unlink $STDERR;
-}
diff --git a/contrib/perl5/taint.c b/contrib/perl5/taint.c
deleted file mode 100644
index 7a8baac..0000000
--- a/contrib/perl5/taint.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * "...we will have peace, when you and all your works have perished--and
- * the works of your dark master to whom you would deliver us. You are a
- * liar, Saruman, and a corrupter of men's hearts." --Theoden
- */
-
-#include "EXTERN.h"
-#define PERL_IN_TAINT_C
-#include "perl.h"
-
-void
-Perl_taint_proper(pTHX_ const char *f, const char *s)
-{
- char *ug;
-
-#ifdef HAS_SETEUID
- DEBUG_u(PerlIO_printf(Perl_debug_log,
- "%s %d %"Uid_t_f" %"Uid_t_f"\n", s, PL_tainted, PL_uid, PL_euid));
-#endif
-
- if (PL_tainted) {
- if (!f)
- f = PL_no_security;
- if (PL_euid != PL_uid)
- ug = " while running setuid";
- else if (PL_egid != PL_gid)
- ug = " while running setgid";
- else
- ug = " while running with -T switch";
- if (!PL_unsafe)
- Perl_croak(aTHX_ f, s, ug);
- else if (ckWARN(WARN_TAINT))
- Perl_warner(aTHX_ WARN_TAINT, f, s, ug);
- }
-}
-
-void
-Perl_taint_env(pTHX)
-{
- SV** svp;
- MAGIC* mg;
- char** e;
- static char* misc_env[] = {
- "IFS", /* most shells' inter-field separators */
- "CDPATH", /* ksh dain bramage #1 */
- "ENV", /* ksh dain bramage #2 */
- "BASH_ENV", /* bash dain bramage -- I guess it's contagious */
- NULL
- };
-
- if (!PL_envgv)
- return;
-
-#ifdef VMS
- {
- int i = 0;
- char name[10 + TYPE_DIGITS(int)] = "DCL$PATH";
-
- while (1) {
- if (i)
- (void)sprintf(name,"DCL$PATH;%d", i);
- svp = hv_fetch(GvHVn(PL_envgv), name, strlen(name), FALSE);
- if (!svp || *svp == &PL_sv_undef)
- break;
- if (SvTAINTED(*svp)) {
- TAINT;
- taint_proper("Insecure %s%s", "$ENV{DCL$PATH}");
- }
- if ((mg = mg_find(*svp, 'e')) && MgTAINTEDDIR(mg)) {
- TAINT;
- taint_proper("Insecure directory in %s%s", "$ENV{DCL$PATH}");
- }
- i++;
- }
- }
-#endif /* VMS */
-
- svp = hv_fetch(GvHVn(PL_envgv),"PATH",4,FALSE);
- if (svp && *svp) {
- if (SvTAINTED(*svp)) {
- TAINT;
- taint_proper("Insecure %s%s", "$ENV{PATH}");
- }
- if ((mg = mg_find(*svp, 'e')) && MgTAINTEDDIR(mg)) {
- TAINT;
- taint_proper("Insecure directory in %s%s", "$ENV{PATH}");
- }
- }
-
-#ifndef VMS
- /* tainted $TERM is okay if it contains no metachars */
- svp = hv_fetch(GvHVn(PL_envgv),"TERM",4,FALSE);
- if (svp && *svp && SvTAINTED(*svp)) {
- STRLEN n_a;
- bool was_tainted = PL_tainted;
- char *t = SvPV(*svp, n_a);
- char *e = t + n_a;
- PL_tainted = was_tainted;
- if (t < e && isALNUM(*t))
- t++;
- while (t < e && (isALNUM(*t) || *t == '-' || *t == ':'))
- t++;
- if (t < e) {
- TAINT;
- taint_proper("Insecure $ENV{%s}%s", "TERM");
- }
- }
-#endif /* !VMS */
-
- for (e = misc_env; *e; e++) {
- svp = hv_fetch(GvHVn(PL_envgv), *e, strlen(*e), FALSE);
- if (svp && *svp != &PL_sv_undef && SvTAINTED(*svp)) {
- TAINT;
- taint_proper("Insecure $ENV{%s}%s", *e);
- }
- }
-}
diff --git a/contrib/perl5/thrdvar.h b/contrib/perl5/thrdvar.h
deleted file mode 100644
index 042912d..0000000
--- a/contrib/perl5/thrdvar.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/***********************************************/
-/* Global only to current thread */
-/***********************************************/
-
-/* Don't forget to re-run embed.pl to propagate changes! */
-
-/* The 'T' prefix is only needed for vars that need appropriate #defines
- * generated when built with or without USE_THREADS. It is also used
- * to generate the appropriate export list for win32.
- *
- * When building without USE_THREADS, these variables will be truly global.
- * When building without USE_THREADS but with MULTIPLICITY, these variables
- * will be global per-interpreter. */
-
-/* Important ones in the first cache line (if alignment is done right) */
-
-#ifdef USE_THREADS
-PERLVAR(interp, PerlInterpreter*) /* thread owner */
-#endif
-
-PERLVAR(Tstack_sp, SV **) /* top of the stack */
-#ifdef OP_IN_REGISTER
-PERLVAR(Topsave, OP *)
-#else
-PERLVAR(Top, OP *) /* currently executing op */
-#endif
-PERLVAR(Tcurpad, SV **) /* active pad (lexicals+tmps) */
-
-PERLVAR(Tstack_base, SV **)
-PERLVAR(Tstack_max, SV **)
-
-PERLVAR(Tscopestack, I32 *) /* scopes we've ENTERed */
-PERLVAR(Tscopestack_ix, I32)
-PERLVAR(Tscopestack_max,I32)
-
-PERLVAR(Tsavestack, ANY *) /* items that need to be restored
- when LEAVEing scopes we've ENTERed */
-PERLVAR(Tsavestack_ix, I32)
-PERLVAR(Tsavestack_max, I32)
-
-PERLVAR(Ttmps_stack, SV **) /* mortals we've made */
-PERLVARI(Ttmps_ix, I32, -1)
-PERLVARI(Ttmps_floor, I32, -1)
-PERLVAR(Ttmps_max, I32)
-
-PERLVAR(Tmarkstack, I32 *) /* stack_sp locations we're remembering */
-PERLVAR(Tmarkstack_ptr, I32 *)
-PERLVAR(Tmarkstack_max, I32 *)
-
-PERLVAR(Tretstack, OP **) /* OPs we have postponed executing */
-PERLVAR(Tretstack_ix, I32)
-PERLVAR(Tretstack_max, I32)
-
-PERLVAR(TSv, SV *) /* used to hold temporary values */
-PERLVAR(TXpv, XPV *) /* used to hold temporary values */
-
-/*
-=for apidoc Amn|STRLEN|PL_na
-
-A convenience variable which is typically used with C<SvPV> when one
-doesn't care about the length of the string. It is usually more efficient
-to either declare a local variable and use that instead or to use the
-C<SvPV_nolen> macro.
-
-=cut
-*/
-
-PERLVAR(Tna, STRLEN) /* for use in SvPV when length is
- Not Applicable */
-
-/* stat stuff */
-PERLVAR(Tstatbuf, Stat_t)
-PERLVAR(Tstatcache, Stat_t) /* _ */
-PERLVAR(Tstatgv, GV *)
-PERLVARI(Tstatname, SV *, Nullsv)
-
-#ifdef HAS_TIMES
-PERLVAR(Ttimesbuf, struct tms)
-#endif
-
-/* Fields used by magic variables such as $@, $/ and so on */
-PERLVAR(Ttainted, bool) /* using variables controlled by $< */
-PERLVAR(Tcurpm, PMOP *) /* what to do \ interps in REs from */
-PERLVAR(Tnrs, SV *)
-
-/*
-=for apidoc mn|SV*|PL_rs
-
-The input record separator - C<$/> in Perl space.
-
-=for apidoc mn|GV*|PL_last_in_gv
-
-The GV which was last used for a filehandle input operation. (C<< <FH> >>)
-
-=for apidoc mn|SV*|PL_ofs_sv
-
-The output field separator - C<$,> in Perl space.
-
-=cut
-*/
-
-PERLVAR(Trs, SV *) /* input record separator $/ */
-PERLVAR(Tlast_in_gv, GV *) /* GV used in last <FH> */
-PERLVAR(Tofs, char *) /* output field separator $, */
-PERLVAR(Tofslen, STRLEN)
-PERLVAR(Tdefoutgv, GV *) /* default FH for output */
-PERLVARI(Tchopset, char *, " \n-") /* $: */
-PERLVAR(Tformtarget, SV *)
-PERLVAR(Tbodytarget, SV *)
-PERLVAR(Ttoptarget, SV *)
-
-/* Stashes */
-PERLVAR(Tdefstash, HV *) /* main symbol table */
-PERLVAR(Tcurstash, HV *) /* symbol table for current package */
-
-PERLVAR(Trestartop, OP *) /* propagating an error from croak? */
-PERLVARI(Tcurcop, COP * VOL, &PL_compiling)
-PERLVAR(Tin_eval, VOL int) /* trap "fatal" errors? */
-PERLVAR(Tdelaymagic, int) /* ($<,$>) = ... */
-PERLVARI(Tdirty, bool, FALSE) /* in the middle of tearing things down? */
-PERLVAR(Tlocalizing, int) /* are we processing a local() list? */
-
-PERLVAR(Tcurstack, AV *) /* THE STACK */
-PERLVAR(Tcurstackinfo, PERL_SI *) /* current stack + context */
-PERLVAR(Tmainstack, AV *) /* the stack when nothing funny is happening */
-
-PERLVAR(Ttop_env, JMPENV *) /* ptr. to current sigjmp() environment */
-PERLVAR(Tstart_env, JMPENV) /* empty startup sigjmp() environment */
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
-PERLVARI(Tprotect, protect_proc_t, MEMBER_TO_FPTR(Perl_default_protect))
-#endif
-PERLVARI(Terrors, SV *, Nullsv) /* outstanding queued errors */
-
-/* statics "owned" by various functions */
-PERLVAR(Tav_fetch_sv, SV *) /* owned by av_fetch() */
-PERLVAR(Thv_fetch_sv, SV *) /* owned by hv_fetch() */
-PERLVAR(Thv_fetch_ent_mh, HE) /* owned by hv_fetch_ent() */
-
-PERLVAR(Tmodcount, I32) /* how much mod()ification in assignment? */
-
-PERLVAR(Tlastgotoprobe, OP*) /* from pp_ctl.c */
-PERLVARI(Tdumpindent, I32, 4) /* # of blanks per dump indentation level */
-
-/* sort stuff */
-PERLVAR(Tsortcop, OP *) /* user defined sort routine */
-PERLVAR(Tsortstash, HV *) /* which is in some package or other */
-PERLVAR(Tfirstgv, GV *) /* $a */
-PERLVAR(Tsecondgv, GV *) /* $b */
-PERLVAR(Tsortcxix, I32) /* from pp_ctl.c */
-
-/* float buffer */
-PERLVAR(Tefloatbuf, char*)
-PERLVAR(Tefloatsize, STRLEN)
-
-/* regex stuff */
-
-PERLVAR(Tscreamfirst, I32 *)
-PERLVAR(Tscreamnext, I32 *)
-PERLVARI(Tmaxscream, I32, -1)
-PERLVAR(Tlastscream, SV *)
-
-PERLVAR(Tregdummy, regnode) /* from regcomp.c */
-PERLVAR(Tregcomp_parse, char*) /* Input-scan pointer. */
-PERLVAR(Tregxend, char*) /* End of input for compile */
-PERLVAR(Tregcode, regnode*) /* Code-emit pointer; &regdummy = don't */
-PERLVAR(Tregnaughty, I32) /* How bad is this pattern? */
-PERLVAR(Tregsawback, I32) /* Did we see \1, ...? */
-PERLVAR(Tregprecomp, char *) /* uncompiled string. */
-PERLVAR(Tregnpar, I32) /* () count. */
-PERLVAR(Tregsize, I32) /* Code size. */
-PERLVAR(Tregflags, U16) /* are we folding, multilining? */
-PERLVAR(Tregseen, U32) /* from regcomp.c */
-PERLVAR(Tseen_zerolen, I32) /* from regcomp.c */
-PERLVAR(Tseen_evals, I32) /* from regcomp.c */
-PERLVAR(Tregcomp_rx, regexp *) /* from regcomp.c */
-PERLVAR(Textralen, I32) /* from regcomp.c */
-PERLVAR(Tcolorset, int) /* from regcomp.c */
-PERLVARA(Tcolors,6, char *) /* from regcomp.c */
-PERLVAR(Treg_whilem_seen, I32) /* number of WHILEM in this expr */
-PERLVAR(Treginput, char *) /* String-input pointer. */
-PERLVAR(Tregbol, char *) /* Beginning of input, for ^ check. */
-PERLVAR(Tregeol, char *) /* End of input, for $ check. */
-PERLVAR(Tregstartp, I32 *) /* Pointer to startp array. */
-PERLVAR(Tregendp, I32 *) /* Ditto for endp. */
-PERLVAR(Treglastparen, U32 *) /* Similarly for lastparen. */
-PERLVAR(Tregtill, char *) /* How far we are required to go. */
-PERLVAR(Tregprev, char) /* char before regbol, \n if none */
-PERLVAR(Treg_start_tmp, char **) /* from regexec.c */
-PERLVAR(Treg_start_tmpl,U32) /* from regexec.c */
-PERLVAR(Tregdata, struct reg_data *)
- /* from regexec.c renamed was data */
-PERLVAR(Tbostr, char *) /* from regexec.c */
-PERLVAR(Treg_flags, U32) /* from regexec.c */
-PERLVAR(Treg_eval_set, I32) /* from regexec.c */
-PERLVAR(Tregnarrate, I32) /* from regexec.c */
-PERLVAR(Tregprogram, regnode *) /* from regexec.c */
-PERLVARI(Tregindent, int, 0) /* from regexec.c */
-PERLVAR(Tregcc, CURCUR *) /* from regexec.c */
-PERLVAR(Treg_call_cc, struct re_cc_state *) /* from regexec.c */
-PERLVAR(Treg_re, regexp *) /* from regexec.c */
-PERLVAR(Treg_ganch, char *) /* position of \G */
-PERLVAR(Treg_sv, SV *) /* what we match against */
-PERLVAR(Treg_magic, MAGIC *) /* pos-magic of what we match */
-PERLVAR(Treg_oldpos, I32) /* old pos of what we match */
-PERLVARI(Treg_oldcurpm, PMOP*, NULL) /* curpm before match */
-PERLVARI(Treg_curpm, PMOP*, NULL) /* curpm during match */
-PERLVAR(Treg_oldsaved, char*) /* old saved substr during match */
-PERLVAR(Treg_oldsavedlen, STRLEN) /* old length of saved substr during match */
-PERLVAR(Treg_maxiter, I32) /* max wait until caching pos */
-PERLVAR(Treg_leftiter, I32) /* wait until caching pos */
-PERLVARI(Treg_poscache, char *, Nullch) /* cache of pos of WHILEM */
-PERLVAR(Treg_poscache_size, STRLEN) /* size of pos cache of WHILEM */
-
-PERLVARI(Tregcompp, regcomp_t, MEMBER_TO_FPTR(Perl_pregcomp))
- /* Pointer to REx compiler */
-PERLVARI(Tregexecp, regexec_t, MEMBER_TO_FPTR(Perl_regexec_flags))
- /* Pointer to REx executer */
-PERLVARI(Tregint_start, re_intuit_start_t, MEMBER_TO_FPTR(Perl_re_intuit_start))
- /* Pointer to optimized REx executer */
-PERLVARI(Tregint_string,re_intuit_string_t, MEMBER_TO_FPTR(Perl_re_intuit_string))
- /* Pointer to optimized REx string */
-PERLVARI(Tregfree, regfree_t, MEMBER_TO_FPTR(Perl_pregfree))
- /* Pointer to REx free()er */
-
-PERLVARI(Treginterp_cnt,int, 0) /* Whether `Regexp'
- was interpolated. */
-PERLVARI(Treg_starttry, char *, 0) /* -Dr: where regtry was called. */
-PERLVARI(Twatchaddr, char **, 0)
-PERLVAR(Twatchok, char *)
-
-/* Note that the variables below are all explicitly referenced in the code
- * as thr->whatever and therefore don't need the 'T' prefix. */
-
-#ifdef USE_THREADS
-
-PERLVAR(oursv, SV *)
-PERLVAR(cvcache, HV *)
-PERLVAR(self, perl_os_thread) /* Underlying thread object */
-PERLVAR(flags, U32)
-PERLVAR(threadsv, AV *) /* Per-thread SVs ($_, $@ etc.) */
-PERLVAR(threadsvp, SV **) /* AvARRAY(threadsv) */
-PERLVAR(specific, AV *) /* Thread-specific user data */
-PERLVAR(errsv, SV *) /* Backing SV for $@ */
-PERLVAR(mutex, perl_mutex) /* For the fields others can change */
-PERLVAR(tid, U32)
-PERLVAR(prev, struct perl_thread *)
-PERLVAR(next, struct perl_thread *)
- /* Circular linked list of threads */
-
-#ifdef HAVE_THREAD_INTERN
-PERLVAR(i, struct thread_intern)
- /* Platform-dependent internals */
-#endif
-
-PERLVAR(trailing_nul, char) /* For the sake of thrsv and oursv */
-
-#endif /* USE_THREADS */
diff --git a/contrib/perl5/thread.h b/contrib/perl5/thread.h
deleted file mode 100644
index 1b12978..0000000
--- a/contrib/perl5/thread.h
+++ /dev/null
@@ -1,432 +0,0 @@
-#if defined(USE_THREADS) || defined(USE_ITHREADS)
-
-#ifdef WIN32
-# include <win32thread.h>
-#else
-# ifdef OLD_PTHREADS_API /* Here be dragons. */
-# define DETACH(t) \
- STMT_START { \
- if (pthread_detach(&(t)->self)) { \
- MUTEX_UNLOCK(&(t)->mutex); \
- Perl_croak_nocontext("panic: DETACH"); \
- } \
- } STMT_END
-
-# define PERL_GET_CONTEXT Perl_get_context()
-# define PERL_SET_CONTEXT(t) Perl_set_context((void*)t)
-
-# define PTHREAD_GETSPECIFIC_INT
-# ifdef DJGPP
-# define pthread_addr_t any_t
-# define NEED_PTHREAD_INIT
-# define PTHREAD_CREATE_JOINABLE (1)
-# endif
-# ifdef __OPEN_VM
-# define pthread_addr_t void *
-# endif
-# ifdef VMS
-# define pthread_attr_init(a) pthread_attr_create(a)
-# define PTHREAD_ATTR_SETDETACHSTATE(a,s) pthread_setdetach_np(a,s)
-# define PTHREAD_CREATE(t,a,s,d) pthread_create(t,a,s,d)
-# define pthread_key_create(k,d) pthread_keycreate(k,(pthread_destructor_t)(d))
-# define pthread_mutexattr_init(a) pthread_mutexattr_create(a)
-# define pthread_mutexattr_settype(a,t) pthread_mutexattr_setkind_np(a,t)
-# endif
-# if defined(__hpux) && defined(__ux_version) && __ux_version <= 1020
-# define pthread_attr_init(a) pthread_attr_create(a)
- /* XXX pthread_setdetach_np() missing in DCE threads on HP-UX 10.20 */
-# define PTHREAD_ATTR_SETDETACHSTATE(a,s) (0)
-# define PTHREAD_CREATE(t,a,s,d) pthread_create(t,a,s,d)
-# define pthread_key_create(k,d) pthread_keycreate(k,(pthread_destructor_t)(d))
-# define pthread_mutexattr_init(a) pthread_mutexattr_create(a)
-# define pthread_mutexattr_settype(a,t) pthread_mutexattr_setkind_np(a,t)
-# endif
-# if defined(DJGPP) || defined(__OPEN_VM)
-# define PTHREAD_ATTR_SETDETACHSTATE(a,s) pthread_attr_setdetachstate(a,&(s))
-# define YIELD pthread_yield(NULL)
-# endif
-# endif
-# if !defined(__hpux) || !defined(__ux_version) || __ux_version > 1020
-# define pthread_mutexattr_default NULL
-# define pthread_condattr_default NULL
-# endif
-#endif
-
-#ifndef PTHREAD_CREATE
-/* You are not supposed to pass NULL as the 2nd arg of PTHREAD_CREATE(). */
-# define PTHREAD_CREATE(t,a,s,d) pthread_create(t,&(a),s,d)
-#endif
-
-#ifndef PTHREAD_ATTR_SETDETACHSTATE
-# define PTHREAD_ATTR_SETDETACHSTATE(a,s) pthread_attr_setdetachstate(a,s)
-#endif
-
-#ifndef PTHREAD_CREATE_JOINABLE
-# ifdef OLD_PTHREAD_CREATE_JOINABLE
-# define PTHREAD_CREATE_JOINABLE OLD_PTHREAD_CREATE_JOINABLE
-# else
-# define PTHREAD_CREATE_JOINABLE 0 /* Panic? No, guess. */
-# endif
-#endif
-
-#ifdef I_MACH_CTHREADS
-
-/* cthreads interface */
-
-/* #include <mach/cthreads.h> is in perl.h #ifdef I_MACH_CTHREADS */
-
-#define MUTEX_INIT(m) \
- STMT_START { \
- *m = mutex_alloc(); \
- if (*m) { \
- mutex_init(*m); \
- } else { \
- Perl_croak_nocontext("panic: MUTEX_INIT"); \
- } \
- } STMT_END
-
-#define MUTEX_LOCK(m) mutex_lock(*m)
-#define MUTEX_UNLOCK(m) mutex_unlock(*m)
-#define MUTEX_DESTROY(m) \
- STMT_START { \
- mutex_free(*m); \
- *m = 0; \
- } STMT_END
-
-#define COND_INIT(c) \
- STMT_START { \
- *c = condition_alloc(); \
- if (*c) { \
- condition_init(*c); \
- } \
- else { \
- Perl_croak_nocontext("panic: COND_INIT"); \
- } \
- } STMT_END
-
-#define COND_SIGNAL(c) condition_signal(*c)
-#define COND_BROADCAST(c) condition_broadcast(*c)
-#define COND_WAIT(c, m) condition_wait(*c, *m)
-#define COND_DESTROY(c) \
- STMT_START { \
- condition_free(*c); \
- *c = 0; \
- } STMT_END
-
-#define THREAD_CREATE(thr, f) (thr->self = cthread_fork(f, thr), 0)
-#define THREAD_POST_CREATE(thr)
-
-#define THREAD_RET_TYPE any_t
-#define THREAD_RET_CAST(x) ((any_t) x)
-
-#define DETACH(t) cthread_detach(t->self)
-#define JOIN(t, avp) (*(avp) = (AV *)cthread_join(t->self))
-
-#define PERL_SET_CONTEXT(t) cthread_set_data(cthread_self(), t)
-#define PERL_GET_CONTEXT cthread_data(cthread_self())
-
-#define INIT_THREADS cthread_init()
-#define YIELD cthread_yield()
-#define ALLOC_THREAD_KEY NOOP
-#define FREE_THREAD_KEY NOOP
-#define SET_THREAD_SELF(thr) (thr->self = cthread_self())
-
-#endif /* I_MACH_CTHREADS */
-
-#ifndef YIELD
-# ifdef SCHED_YIELD
-# define YIELD SCHED_YIELD
-# else
-# ifdef HAS_SCHED_YIELD
-# define YIELD sched_yield()
-# else
-# ifdef HAS_PTHREAD_YIELD
- /* pthread_yield(NULL) platforms are expected
- * to have #defined YIELD for themselves. */
-# define YIELD pthread_yield()
-# endif
-# endif
-# endif
-#endif
-
-#ifdef __hpux
-# define MUTEX_INIT_NEEDS_MUTEX_ZEROED
-#endif
-
-#ifndef MUTEX_INIT
-
-# ifdef MUTEX_INIT_NEEDS_MUTEX_ZEROED
- /* Temporary workaround, true bug is deeper. --jhi 1999-02-25 */
-# define MUTEX_INIT(m) \
- STMT_START { \
- Zero((m), 1, perl_mutex); \
- if (pthread_mutex_init((m), pthread_mutexattr_default)) \
- Perl_croak_nocontext("panic: MUTEX_INIT"); \
- } STMT_END
-# else
-# define MUTEX_INIT(m) \
- STMT_START { \
- if (pthread_mutex_init((m), pthread_mutexattr_default)) \
- Perl_croak_nocontext("panic: MUTEX_INIT"); \
- } STMT_END
-# endif
-
-# define MUTEX_LOCK(m) \
- STMT_START { \
- if (pthread_mutex_lock((m))) \
- Perl_croak_nocontext("panic: MUTEX_LOCK"); \
- } STMT_END
-
-# define MUTEX_UNLOCK(m) \
- STMT_START { \
- if (pthread_mutex_unlock((m))) \
- Perl_croak_nocontext("panic: MUTEX_UNLOCK"); \
- } STMT_END
-
-# define MUTEX_DESTROY(m) \
- STMT_START { \
- if (pthread_mutex_destroy((m))) \
- Perl_croak_nocontext("panic: MUTEX_DESTROY"); \
- } STMT_END
-#endif /* MUTEX_INIT */
-
-#ifndef COND_INIT
-# define COND_INIT(c) \
- STMT_START { \
- if (pthread_cond_init((c), pthread_condattr_default)) \
- Perl_croak_nocontext("panic: COND_INIT"); \
- } STMT_END
-
-# define COND_SIGNAL(c) \
- STMT_START { \
- if (pthread_cond_signal((c))) \
- Perl_croak_nocontext("panic: COND_SIGNAL"); \
- } STMT_END
-
-# define COND_BROADCAST(c) \
- STMT_START { \
- if (pthread_cond_broadcast((c))) \
- Perl_croak_nocontext("panic: COND_BROADCAST"); \
- } STMT_END
-
-# define COND_WAIT(c, m) \
- STMT_START { \
- if (pthread_cond_wait((c), (m))) \
- Perl_croak_nocontext("panic: COND_WAIT"); \
- } STMT_END
-
-# define COND_DESTROY(c) \
- STMT_START { \
- if (pthread_cond_destroy((c))) \
- Perl_croak_nocontext("panic: COND_DESTROY"); \
- } STMT_END
-#endif /* COND_INIT */
-
-/* DETACH(t) must only be called while holding t->mutex */
-#ifndef DETACH
-# define DETACH(t) \
- STMT_START { \
- if (pthread_detach((t)->self)) { \
- MUTEX_UNLOCK(&(t)->mutex); \
- Perl_croak_nocontext("panic: DETACH"); \
- } \
- } STMT_END
-#endif /* DETACH */
-
-#ifndef JOIN
-# define JOIN(t, avp) \
- STMT_START { \
- if (pthread_join((t)->self, (void**)(avp))) \
- Perl_croak_nocontext("panic: pthread_join"); \
- } STMT_END
-#endif /* JOIN */
-
-#ifndef PERL_GET_CONTEXT
-# define PERL_GET_CONTEXT pthread_getspecific(PL_thr_key)
-#endif
-
-#ifndef PERL_SET_CONTEXT
-# define PERL_SET_CONTEXT(t) \
- STMT_START { \
- if (pthread_setspecific(PL_thr_key, (void *)(t))) \
- Perl_croak_nocontext("panic: pthread_setspecific"); \
- } STMT_END
-#endif /* PERL_SET_CONTEXT */
-
-#ifndef INIT_THREADS
-# ifdef NEED_PTHREAD_INIT
-# define INIT_THREADS pthread_init()
-# endif
-#endif
-
-#ifndef ALLOC_THREAD_KEY
-# define ALLOC_THREAD_KEY \
- STMT_START { \
- if (pthread_key_create(&PL_thr_key, 0)) { \
- PerlIO_printf(PerlIO_stderr(), "panic: pthread_key_create"); \
- exit(1); \
- } \
- } STMT_END
-#endif
-
-#ifndef FREE_THREAD_KEY
-# define FREE_THREAD_KEY \
- STMT_START { \
- pthread_key_delete(PL_thr_key); \
- } STMT_END
-#endif
-
-#ifndef THREAD_RET_TYPE
-# define THREAD_RET_TYPE void *
-# define THREAD_RET_CAST(p) ((void *)(p))
-#endif /* THREAD_RET */
-
-#if defined(USE_THREADS)
-
-/* Accessor for per-thread SVs */
-# define THREADSV(i) (thr->threadsvp[i])
-
-/*
- * LOCK_SV_MUTEX and UNLOCK_SV_MUTEX are performance-critical. Here, we
- * try only locking them if there may be more than one thread in existence.
- * Systems with very fast mutexes (and/or slow conditionals) may wish to
- * remove the "if (threadnum) ..." test.
- * XXX do NOT use C<if (PL_threadnum) ...> -- it sets up race conditions!
- */
-# define LOCK_SV_MUTEX MUTEX_LOCK(&PL_sv_mutex)
-# define UNLOCK_SV_MUTEX MUTEX_UNLOCK(&PL_sv_mutex)
-# define LOCK_STRTAB_MUTEX MUTEX_LOCK(&PL_strtab_mutex)
-# define UNLOCK_STRTAB_MUTEX MUTEX_UNLOCK(&PL_strtab_mutex)
-# define LOCK_CRED_MUTEX MUTEX_LOCK(&PL_cred_mutex)
-# define UNLOCK_CRED_MUTEX MUTEX_UNLOCK(&PL_cred_mutex)
-# define LOCK_FDPID_MUTEX MUTEX_LOCK(&PL_fdpid_mutex)
-# define UNLOCK_FDPID_MUTEX MUTEX_UNLOCK(&PL_fdpid_mutex)
-# define LOCK_SV_LOCK_MUTEX MUTEX_LOCK(&PL_sv_lock_mutex)
-# define UNLOCK_SV_LOCK_MUTEX MUTEX_UNLOCK(&PL_sv_lock_mutex)
-
-/* Values and macros for thr->flags */
-#define THRf_STATE_MASK 7
-#define THRf_R_JOINABLE 0
-#define THRf_R_JOINED 1
-#define THRf_R_DETACHED 2
-#define THRf_ZOMBIE 3
-#define THRf_DEAD 4
-
-#define THRf_DID_DIE 8
-
-/* ThrSTATE(t) and ThrSETSTATE(t) must only be called while holding t->mutex */
-#define ThrSTATE(t) ((t)->flags & THRf_STATE_MASK)
-#define ThrSETSTATE(t, s) STMT_START { \
- (t)->flags &= ~THRf_STATE_MASK; \
- (t)->flags |= (s); \
- DEBUG_S(PerlIO_printf(Perl_debug_log, \
- "thread %p set to state %d\n", (t), (s))); \
- } STMT_END
-
-typedef struct condpair {
- perl_mutex mutex; /* Protects all other fields */
- perl_cond owner_cond; /* For when owner changes at all */
- perl_cond cond; /* For cond_signal and cond_broadcast */
- Thread owner; /* Currently owning thread */
-} condpair_t;
-
-#define MgMUTEXP(mg) (&((condpair_t *)(mg->mg_ptr))->mutex)
-#define MgOWNERCONDP(mg) (&((condpair_t *)(mg->mg_ptr))->owner_cond)
-#define MgCONDP(mg) (&((condpair_t *)(mg->mg_ptr))->cond)
-#define MgOWNER(mg) ((condpair_t *)(mg->mg_ptr))->owner
-
-#endif /* USE_THREADS */
-#endif /* USE_THREADS || USE_ITHREADS */
-
-#ifndef MUTEX_LOCK
-# define MUTEX_LOCK(m)
-#endif
-
-#ifndef MUTEX_UNLOCK
-# define MUTEX_UNLOCK(m)
-#endif
-
-#ifndef MUTEX_INIT
-# define MUTEX_INIT(m)
-#endif
-
-#ifndef MUTEX_DESTROY
-# define MUTEX_DESTROY(m)
-#endif
-
-#ifndef COND_INIT
-# define COND_INIT(c)
-#endif
-
-#ifndef COND_SIGNAL
-# define COND_SIGNAL(c)
-#endif
-
-#ifndef COND_BROADCAST
-# define COND_BROADCAST(c)
-#endif
-
-#ifndef COND_WAIT
-# define COND_WAIT(c, m)
-#endif
-
-#ifndef COND_DESTROY
-# define COND_DESTROY(c)
-#endif
-
-#ifndef LOCK_SV_MUTEX
-# define LOCK_SV_MUTEX
-#endif
-
-#ifndef UNLOCK_SV_MUTEX
-# define UNLOCK_SV_MUTEX
-#endif
-
-#ifndef LOCK_STRTAB_MUTEX
-# define LOCK_STRTAB_MUTEX
-#endif
-
-#ifndef UNLOCK_STRTAB_MUTEX
-# define UNLOCK_STRTAB_MUTEX
-#endif
-
-#ifndef LOCK_CRED_MUTEX
-# define LOCK_CRED_MUTEX
-#endif
-
-#ifndef UNLOCK_CRED_MUTEX
-# define UNLOCK_CRED_MUTEX
-#endif
-
-#ifndef LOCK_FDPID_MUTEX
-# define LOCK_FDPID_MUTEX
-#endif
-
-#ifndef UNLOCK_FDPID_MUTEX
-# define UNLOCK_FDPID_MUTEX
-#endif
-
-#ifndef LOCK_SV_LOCK_MUTEX
-# define LOCK_SV_LOCK_MUTEX
-#endif
-
-#ifndef UNLOCK_SV_LOCK_MUTEX
-# define UNLOCK_SV_LOCK_MUTEX
-#endif
-
-/* THR, SET_THR, and dTHR are there for compatibility with old versions */
-#ifndef THR
-# define THR PERL_GET_THX
-#endif
-
-#ifndef SET_THR
-# define SET_THR(t) PERL_SET_THX(t)
-#endif
-
-#ifndef dTHR
-# define dTHR dNOOP
-#endif
-
-#ifndef INIT_THREADS
-# define INIT_THREADS NOOP
-#endif
diff --git a/contrib/perl5/toke.c b/contrib/perl5/toke.c
deleted file mode 100644
index d33b95d..0000000
--- a/contrib/perl5/toke.c
+++ /dev/null
@@ -1,7639 +0,0 @@
-/* toke.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "It all comes from here, the stench and the peril." --Frodo
- */
-
-/*
- * This file is the lexer for Perl. It's closely linked to the
- * parser, perly.y.
- *
- * The main routine is yylex(), which returns the next token.
- */
-
-#include "EXTERN.h"
-#define PERL_IN_TOKE_C
-#include "perl.h"
-
-#define yychar PL_yychar
-#define yylval PL_yylval
-
-static char ident_too_long[] = "Identifier too long";
-
-static void restore_rsfp(pTHXo_ void *f);
-#ifndef PERL_NO_UTF16_FILTER
-static I32 utf16_textfilter(pTHXo_ int idx, SV *sv, int maxlen);
-static I32 utf16rev_textfilter(pTHXo_ int idx, SV *sv, int maxlen);
-#endif
-
-#define XFAKEBRACK 128
-#define XENUMMASK 127
-
-/*#define UTF (SvUTF8(PL_linestr) && !(PL_hints & HINT_BYTE))*/
-#define UTF (PL_hints & HINT_UTF8)
-
-/* In variables name $^X, these are the legal values for X.
- * 1999-02-27 mjd-perl-patch@plover.com */
-#define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
-
-/* On MacOS, respect nonbreaking spaces */
-#ifdef MACOS_TRADITIONAL
-#define SPACE_OR_TAB(c) ((c)==' '||(c)=='\312'||(c)=='\t')
-#else
-#define SPACE_OR_TAB(c) ((c)==' '||(c)=='\t')
-#endif
-
-/* LEX_* are values for PL_lex_state, the state of the lexer.
- * They are arranged oddly so that the guard on the switch statement
- * can get by with a single comparison (if the compiler is smart enough).
- */
-
-/* #define LEX_NOTPARSING 11 is done in perl.h. */
-
-#define LEX_NORMAL 10
-#define LEX_INTERPNORMAL 9
-#define LEX_INTERPCASEMOD 8
-#define LEX_INTERPPUSH 7
-#define LEX_INTERPSTART 6
-#define LEX_INTERPEND 5
-#define LEX_INTERPENDMAYBE 4
-#define LEX_INTERPCONCAT 3
-#define LEX_INTERPCONST 2
-#define LEX_FORMLINE 1
-#define LEX_KNOWNEXT 0
-
-#ifdef ff_next
-#undef ff_next
-#endif
-
-#ifdef USE_PURE_BISON
-# ifndef YYMAXLEVEL
-# define YYMAXLEVEL 100
-# endif
-YYSTYPE* yylval_pointer[YYMAXLEVEL];
-int* yychar_pointer[YYMAXLEVEL];
-int yyactlevel = -1;
-# undef yylval
-# undef yychar
-# define yylval (*yylval_pointer[yyactlevel])
-# define yychar (*yychar_pointer[yyactlevel])
-# define PERL_YYLEX_PARAM yylval_pointer[yyactlevel],yychar_pointer[yyactlevel]
-# undef yylex
-# define yylex() Perl_yylex_r(aTHX_ yylval_pointer[yyactlevel],yychar_pointer[yyactlevel])
-#endif
-
-#include "keywords.h"
-
-/* CLINE is a macro that ensures PL_copline has a sane value */
-
-#ifdef CLINE
-#undef CLINE
-#endif
-#define CLINE (PL_copline = (CopLINE(PL_curcop) < PL_copline ? CopLINE(PL_curcop) : PL_copline))
-
-/*
- * Convenience functions to return different tokens and prime the
- * lexer for the next token. They all take an argument.
- *
- * TOKEN : generic token (used for '(', DOLSHARP, etc)
- * OPERATOR : generic operator
- * AOPERATOR : assignment operator
- * PREBLOCK : beginning the block after an if, while, foreach, ...
- * PRETERMBLOCK : beginning a non-code-defining {} block (eg, hash ref)
- * PREREF : *EXPR where EXPR is not a simple identifier
- * TERM : expression term
- * LOOPX : loop exiting command (goto, last, dump, etc)
- * FTST : file test operator
- * FUN0 : zero-argument function
- * FUN1 : not used, except for not, which isn't a UNIOP
- * BOop : bitwise or or xor
- * BAop : bitwise and
- * SHop : shift operator
- * PWop : power operator
- * PMop : pattern-matching operator
- * Aop : addition-level operator
- * Mop : multiplication-level operator
- * Eop : equality-testing operator
- * Rop : relational operator <= != gt
- *
- * Also see LOP and lop() below.
- */
-
-#define TOKEN(retval) return (PL_bufptr = s,(int)retval)
-#define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
-#define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
-#define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
-#define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
-#define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
-#define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
-#define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
-#define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
-#define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
-#define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
-#define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
-#define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
-#define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
-#define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
-#define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
-#define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
-#define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
-#define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
-#define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
-
-/* 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, \
- PL_expect = XTERM, \
- PL_bufptr = s, \
- PL_last_uni = PL_oldbufptr, \
- PL_last_lop_op = f, \
- (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
-
-#define UNIBRACK(f) return(yylval.ival = f, \
- PL_bufptr = s, \
- PL_last_uni = PL_oldbufptr, \
- (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
-
-/* grandfather return to old style */
-#define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
-
-/*
- * S_ao
- *
- * This subroutine detects &&= and ||= and turns an ANDAND or OROR
- * into an OP_ANDASSIGN or OP_ORASSIGN
- */
-
-STATIC int
-S_ao(pTHX_ int toketype)
-{
- if (*PL_bufptr == '=') {
- PL_bufptr++;
- if (toketype == ANDAND)
- yylval.ival = OP_ANDASSIGN;
- else if (toketype == OROR)
- yylval.ival = OP_ORASSIGN;
- toketype = ASSIGNOP;
- }
- return toketype;
-}
-
-/*
- * S_no_op
- * When Perl expects an operator and finds something else, no_op
- * prints the warning. It always prints "<something> found where
- * operator expected. It prints "Missing semicolon on previous line?"
- * if the surprise occurs at the start of the line. "do you need to
- * predeclare ..." is printed out for code like "sub bar; foo bar $x"
- * where the compiler doesn't know if foo is a method call or a function.
- * It prints "Missing operator before end of line" if there's nothing
- * after the missing operator, or "... before <...>" if there is something
- * after the missing operator.
- */
-
-STATIC void
-S_no_op(pTHX_ char *what, char *s)
-{
- char *oldbp = PL_bufptr;
- bool is_first = (PL_oldbufptr == PL_linestart);
-
- if (!s)
- s = oldbp;
- else
- PL_bufptr = s;
- yywarn(Perl_form(aTHX_ "%s found where operator expected", what));
- if (is_first)
- Perl_warn(aTHX_ "\t(Missing semicolon on previous line?)\n");
- else if (PL_oldoldbufptr && isIDFIRST_lazy_if(PL_oldoldbufptr,UTF)) {
- char *t;
- for (t = PL_oldoldbufptr; *t && (isALNUM_lazy_if(t,UTF) || *t == ':'); t++) ;
- if (t < PL_bufptr && isSPACE(*t))
- Perl_warn(aTHX_ "\t(Do you need to predeclare %.*s?)\n",
- t - PL_oldoldbufptr, PL_oldoldbufptr);
- }
- else {
- assert(s >= oldbp);
- Perl_warn(aTHX_ "\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
- }
- PL_bufptr = oldbp;
-}
-
-/*
- * S_missingterm
- * Complain about missing quote/regexp/heredoc terminator.
- * If it's called with (char *)NULL then it cauterizes the line buffer.
- * If we're in a delimited string and the delimiter is a control
- * character, it's reformatted into a two-char sequence like ^C.
- * This is fatal.
- */
-
-STATIC void
-S_missingterm(pTHX_ char *s)
-{
- char tmpbuf[3];
- char q;
- if (s) {
- char *nl = strrchr(s,'\n');
- if (nl)
- *nl = '\0';
- }
- else if (
-#ifdef EBCDIC
- iscntrl(PL_multi_close)
-#else
- PL_multi_close < 32 || PL_multi_close == 127
-#endif
- ) {
- *tmpbuf = '^';
- tmpbuf[1] = toCTRL(PL_multi_close);
- s = "\\n";
- tmpbuf[2] = '\0';
- s = tmpbuf;
- }
- else {
- *tmpbuf = PL_multi_close;
- tmpbuf[1] = '\0';
- s = tmpbuf;
- }
- q = strchr(s,'"') ? '\'' : '"';
- Perl_croak(aTHX_ "Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
-}
-
-/*
- * Perl_deprecate
- */
-
-void
-Perl_deprecate(pTHX_ char *s)
-{
- if (ckWARN(WARN_DEPRECATED))
- Perl_warner(aTHX_ WARN_DEPRECATED, "Use of %s is deprecated", s);
-}
-
-/*
- * depcom
- * Deprecate a comma-less variable list.
- */
-
-STATIC void
-S_depcom(pTHX)
-{
- deprecate("comma-less variable list");
-}
-
-/*
- * experimental text filters for win32 carriage-returns, utf16-to-utf8 and
- * utf16-to-utf8-reversed.
- */
-
-#ifdef PERL_CR_FILTER
-static void
-strip_return(SV *sv)
-{
- register char *s = SvPVX(sv);
- register char *e = s + SvCUR(sv);
- /* outer loop optimized to do nothing if there are no CR-LFs */
- while (s < e) {
- if (*s++ == '\r' && *s == '\n') {
- /* hit a CR-LF, need to copy the rest */
- register char *d = s - 1;
- *d++ = *s++;
- while (s < e) {
- if (*s == '\r' && s[1] == '\n')
- s++;
- *d++ = *s++;
- }
- SvCUR(sv) -= s - d;
- return;
- }
- }
-}
-
-STATIC I32
-S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen)
-{
- I32 count = FILTER_READ(idx+1, sv, maxlen);
- if (count > 0 && !maxlen)
- strip_return(sv);
- return count;
-}
-#endif
-
-/*
- * Perl_lex_start
- * Initialize variables. Uses the Perl save_stack to save its state (for
- * recursive calls to the parser).
- */
-
-void
-Perl_lex_start(pTHX_ SV *line)
-{
- char *s;
- STRLEN len;
-
- SAVEI32(PL_lex_dojoin);
- SAVEI32(PL_lex_brackets);
- SAVEI32(PL_lex_casemods);
- SAVEI32(PL_lex_starts);
- SAVEI32(PL_lex_state);
- SAVEVPTR(PL_lex_inpat);
- SAVEI32(PL_lex_inwhat);
- if (PL_lex_state == LEX_KNOWNEXT) {
- I32 toke = PL_nexttoke;
- while (--toke >= 0) {
- SAVEI32(PL_nexttype[toke]);
- SAVEVPTR(PL_nextval[toke]);
- }
- SAVEI32(PL_nexttoke);
- }
- SAVECOPLINE(PL_curcop);
- SAVEPPTR(PL_bufptr);
- SAVEPPTR(PL_bufend);
- SAVEPPTR(PL_oldbufptr);
- SAVEPPTR(PL_oldoldbufptr);
- SAVEPPTR(PL_last_lop);
- SAVEPPTR(PL_last_uni);
- SAVEPPTR(PL_linestart);
- SAVESPTR(PL_linestr);
- SAVEPPTR(PL_lex_brackstack);
- SAVEPPTR(PL_lex_casestack);
- SAVEDESTRUCTOR_X(restore_rsfp, PL_rsfp);
- SAVESPTR(PL_lex_stuff);
- SAVEI32(PL_lex_defer);
- SAVEI32(PL_sublex_info.sub_inwhat);
- SAVESPTR(PL_lex_repl);
- SAVEINT(PL_expect);
- SAVEINT(PL_lex_expect);
-
- PL_lex_state = LEX_NORMAL;
- PL_lex_defer = 0;
- PL_expect = XSTATE;
- PL_lex_brackets = 0;
- New(899, PL_lex_brackstack, 120, char);
- New(899, PL_lex_casestack, 12, char);
- SAVEFREEPV(PL_lex_brackstack);
- SAVEFREEPV(PL_lex_casestack);
- PL_lex_casemods = 0;
- *PL_lex_casestack = '\0';
- PL_lex_dojoin = 0;
- PL_lex_starts = 0;
- PL_lex_stuff = Nullsv;
- PL_lex_repl = Nullsv;
- PL_lex_inpat = 0;
- PL_nexttoke = 0;
- PL_lex_inwhat = 0;
- PL_sublex_info.sub_inwhat = 0;
- PL_linestr = line;
- if (SvREADONLY(PL_linestr))
- PL_linestr = sv_2mortal(newSVsv(PL_linestr));
- s = SvPV(PL_linestr, len);
- if (len && s[len-1] != ';') {
- if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
- PL_linestr = sv_2mortal(newSVsv(PL_linestr));
- sv_catpvn(PL_linestr, "\n;", 2);
- }
- SvTEMP_off(PL_linestr);
- PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = PL_bufptr + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- SvREFCNT_dec(PL_rs);
- PL_rs = newSVpvn("\n", 1);
- PL_rsfp = 0;
-}
-
-/*
- * Perl_lex_end
- * Finalizer for lexing operations. Must be called when the parser is
- * done with the lexer.
- */
-
-void
-Perl_lex_end(pTHX)
-{
- PL_doextract = FALSE;
-}
-
-/*
- * S_incline
- * This subroutine has nothing to do with tilting, whether at windmills
- * or pinball tables. Its name is short for "increment line". It
- * increments the current line number in CopLINE(PL_curcop) and checks
- * to see whether the line starts with a comment of the form
- * # line 500 "foo.pm"
- * If so, it sets the current line number and file to the values in the comment.
- */
-
-STATIC void
-S_incline(pTHX_ char *s)
-{
- char *t;
- char *n;
- char *e;
- char ch;
-
- CopLINE_inc(PL_curcop);
- if (*s++ != '#')
- return;
- while (SPACE_OR_TAB(*s)) s++;
- if (strnEQ(s, "line", 4))
- s += 4;
- else
- return;
- if (SPACE_OR_TAB(*s))
- s++;
- else
- return;
- while (SPACE_OR_TAB(*s)) s++;
- if (!isDIGIT(*s))
- return;
- n = s;
- while (isDIGIT(*s))
- s++;
- while (SPACE_OR_TAB(*s))
- s++;
- if (*s == '"' && (t = strchr(s+1, '"'))) {
- s++;
- e = t + 1;
- }
- else {
- for (t = s; !isSPACE(*t); t++) ;
- e = t;
- }
- while (SPACE_OR_TAB(*e) || *e == '\r' || *e == '\f')
- e++;
- if (*e != '\n' && *e != '\0')
- return; /* false alarm */
-
- ch = *t;
- *t = '\0';
- if (t - s > 0) {
-#ifdef USE_ITHREADS
- Safefree(CopFILE(PL_curcop));
-#else
- SvREFCNT_dec(CopFILEGV(PL_curcop));
-#endif
- CopFILE_set(PL_curcop, s);
- }
- *t = ch;
- CopLINE_set(PL_curcop, atoi(n)-1);
-}
-
-/*
- * S_skipspace
- * Called to gobble the appropriate amount and type of whitespace.
- * Skips comments as well.
- */
-
-STATIC char *
-S_skipspace(pTHX_ register char *s)
-{
- if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
- while (s < PL_bufend && SPACE_OR_TAB(*s))
- s++;
- return s;
- }
- for (;;) {
- STRLEN prevlen;
- SSize_t oldprevlen, oldoldprevlen;
- SSize_t oldloplen, oldunilen;
- while (s < PL_bufend && isSPACE(*s)) {
- if (*s++ == '\n' && PL_in_eval && !PL_rsfp)
- incline(s);
- }
-
- /* comment */
- if (s < PL_bufend && *s == '#') {
- while (s < PL_bufend && *s != '\n')
- s++;
- if (s < PL_bufend) {
- s++;
- if (PL_in_eval && !PL_rsfp) {
- incline(s);
- continue;
- }
- }
- }
-
- /* only continue to recharge the buffer if we're at the end
- * of the buffer, we're not reading from a source filter, and
- * we're in normal lexing mode
- */
- if (s < PL_bufend || !PL_rsfp || PL_sublex_info.sub_inwhat ||
- PL_lex_state == LEX_FORMLINE)
- return s;
-
- /* try to recharge the buffer */
- if ((s = filter_gets(PL_linestr, PL_rsfp,
- (prevlen = SvCUR(PL_linestr)))) == Nullch)
- {
- /* end of file. Add on the -p or -n magic */
- if (PL_minus_n || PL_minus_p) {
- sv_setpv(PL_linestr,PL_minus_p ?
- ";}continue{print or die qq(-p destination: $!\\n)" :
- "");
- sv_catpv(PL_linestr,";}");
- PL_minus_n = PL_minus_p = 0;
- }
- else
- sv_setpv(PL_linestr,";");
-
- /* reset variables for next time we lex */
- PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart
- = SvPVX(PL_linestr);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
-
- /* Close the filehandle. Could be from -P preprocessor,
- * STDIN, or a regular file. If we were reading code from
- * STDIN (because the commandline held no -e or filename)
- * then we don't close it, we reset it so the code can
- * read from STDIN too.
- */
-
- if (PL_preprocess && !PL_in_eval)
- (void)PerlProc_pclose(PL_rsfp);
- else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
- PerlIO_clearerr(PL_rsfp);
- else
- (void)PerlIO_close(PL_rsfp);
- PL_rsfp = Nullfp;
- return s;
- }
-
- /* not at end of file, so we only read another line */
- /* make corresponding updates to old pointers, for yyerror() */
- oldprevlen = PL_oldbufptr - PL_bufend;
- oldoldprevlen = PL_oldoldbufptr - PL_bufend;
- if (PL_last_uni)
- oldunilen = PL_last_uni - PL_bufend;
- if (PL_last_lop)
- oldloplen = PL_last_lop - PL_bufend;
- PL_linestart = PL_bufptr = s + prevlen;
- PL_bufend = s + SvCUR(PL_linestr);
- s = PL_bufptr;
- PL_oldbufptr = s + oldprevlen;
- PL_oldoldbufptr = s + oldoldprevlen;
- if (PL_last_uni)
- PL_last_uni = s + oldunilen;
- if (PL_last_lop)
- PL_last_lop = s + oldloplen;
- incline(s);
-
- /* debugger active and we're not compiling the debugger code,
- * so store the line into the debugger's array of lines
- */
- if (PERLDB_LINE && PL_curstash != PL_debstash) {
- SV *sv = NEWSV(85,0);
-
- sv_upgrade(sv, SVt_PVMG);
- sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
- av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
- }
- }
-}
-
-/*
- * S_check_uni
- * Check the unary operators to ensure there's no ambiguity in how they're
- * used. An ambiguous piece of code would be:
- * rand + 5
- * This doesn't mean rand() + 5. Because rand() is a unary operator,
- * the +5 is its argument.
- */
-
-STATIC void
-S_check_uni(pTHX)
-{
- char *s;
- char *t;
-
- if (PL_oldoldbufptr != PL_last_uni)
- return;
- while (isSPACE(*PL_last_uni))
- PL_last_uni++;
- for (s = PL_last_uni; isALNUM_lazy_if(s,UTF) || *s == '-'; s++) ;
- if ((t = strchr(s, '(')) && t < PL_bufptr)
- return;
- if (ckWARN_d(WARN_AMBIGUOUS)){
- char ch = *s;
- *s = '\0';
- Perl_warner(aTHX_ WARN_AMBIGUOUS,
- "Warning: Use of \"%s\" without parens is ambiguous",
- PL_last_uni);
- *s = ch;
- }
-}
-
-/* workaround to replace the UNI() macro with a function. Only the
- * hints/uts.sh file mentions this. Other comments elsewhere in the
- * source indicate Microport Unix might need it too.
- */
-
-#ifdef CRIPPLED_CC
-
-#undef UNI
-#define UNI(f) return uni(f,s)
-
-STATIC int
-S_uni(pTHX_ I32 f, char *s)
-{
- yylval.ival = f;
- PL_expect = XTERM;
- PL_bufptr = s;
- PL_last_uni = PL_oldbufptr;
- PL_last_lop_op = f;
- if (*s == '(')
- return FUNC1;
- s = skipspace(s);
- if (*s == '(')
- return FUNC1;
- else
- return UNIOP;
-}
-
-#endif /* CRIPPLED_CC */
-
-/*
- * LOP : macro to build a list operator. Its behaviour has been replaced
- * with a subroutine, S_lop() for which LOP is just another name.
- */
-
-#define LOP(f,x) return lop(f,x,s)
-
-/*
- * S_lop
- * Build a list operator (or something that might be one). The rules:
- * - if we have a next token, then it's a list operator [why?]
- * - if the next thing is an opening paren, then it's a function
- * - else it's a list operator
- */
-
-STATIC I32
-S_lop(pTHX_ I32 f, int x, char *s)
-{
- yylval.ival = f;
- CLINE;
- PL_expect = x;
- PL_bufptr = s;
- PL_last_lop = PL_oldbufptr;
- PL_last_lop_op = f;
- if (PL_nexttoke)
- return LSTOP;
- if (*s == '(')
- return FUNC;
- s = skipspace(s);
- if (*s == '(')
- return FUNC;
- else
- return LSTOP;
-}
-
-/*
- * S_force_next
- * When the lexer realizes it knows the next token (for instance,
- * it is reordering tokens for the parser) then it can call S_force_next
- * to know what token to return the next time the lexer is called. Caller
- * will need to set PL_nextval[], and possibly PL_expect to ensure the lexer
- * handles the token correctly.
- */
-
-STATIC void
-S_force_next(pTHX_ I32 type)
-{
- PL_nexttype[PL_nexttoke] = type;
- PL_nexttoke++;
- if (PL_lex_state != LEX_KNOWNEXT) {
- PL_lex_defer = PL_lex_state;
- PL_lex_expect = PL_expect;
- PL_lex_state = LEX_KNOWNEXT;
- }
-}
-
-/*
- * S_force_word
- * When the lexer knows the next thing is a word (for instance, it has
- * just seen -> and it knows that the next char is a word char, then
- * it calls S_force_word to stick the next word into the PL_next lookahead.
- *
- * Arguments:
- * char *start : buffer position (must be within PL_linestr)
- * int token : PL_next will be this type of bare word (e.g., METHOD,WORD)
- * int check_keyword : if true, Perl checks to make sure the word isn't
- * a keyword (do this if the word is a label, e.g. goto FOO)
- * int allow_pack : if true, : characters will also be allowed (require,
- * use, etc. do this)
- * int allow_initial_tick : used by the "sub" lexer only.
- */
-
-STATIC char *
-S_force_word(pTHX_ register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
-{
- register char *s;
- STRLEN len;
-
- start = skipspace(start);
- s = start;
- if (isIDFIRST_lazy_if(s,UTF) ||
- (allow_pack && *s == ':') ||
- (allow_initial_tick && *s == '\'') )
- {
- s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
- if (check_keyword && keyword(PL_tokenbuf, len))
- return start;
- if (token == METHOD) {
- s = skipspace(s);
- if (*s == '(')
- PL_expect = XTERM;
- else {
- PL_expect = XOPERATOR;
- }
- }
- PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
- PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
- force_next(token);
- }
- return s;
-}
-
-/*
- * S_force_ident
- * Called when the lexer wants $foo *foo &foo etc, but the program
- * text only contains the "foo" portion. The first argument is a pointer
- * to the "foo", and the second argument is the type symbol to prefix.
- * Forces the next token to be a "WORD".
- * Creates the symbol if it didn't already exist (via gv_fetchpv()).
- */
-
-STATIC void
-S_force_ident(pTHX_ register char *s, int kind)
-{
- if (s && *s) {
- OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
- PL_nextval[PL_nexttoke].opval = o;
- force_next(WORD);
- if (kind) {
- o->op_private = OPpCONST_ENTERED;
- /* XXX see note in pp_entereval() for why we forgo typo
- warnings if the symbol must be introduced in an eval.
- GSAR 96-10-12 */
- gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
- kind == '$' ? SVt_PV :
- kind == '@' ? SVt_PVAV :
- kind == '%' ? SVt_PVHV :
- SVt_PVGV
- );
- }
- }
-}
-
-NV
-Perl_str_to_version(pTHX_ SV *sv)
-{
- NV retval = 0.0;
- NV nshift = 1.0;
- STRLEN len;
- char *start = SvPVx(sv,len);
- bool utf = SvUTF8(sv) ? TRUE : FALSE;
- char *end = start + len;
- while (start < end) {
- STRLEN skip;
- UV n;
- if (utf)
- n = utf8_to_uv((U8*)start, len, &skip, 0);
- else {
- n = *(U8*)start;
- skip = 1;
- }
- retval += ((NV)n)/nshift;
- start += skip;
- nshift *= 1000;
- }
- return retval;
-}
-
-/*
- * S_force_version
- * Forces the next token to be a version number.
- */
-
-STATIC char *
-S_force_version(pTHX_ char *s)
-{
- OP *version = Nullop;
- char *d;
-
- s = skipspace(s);
-
- d = s;
- if (*d == 'v')
- d++;
- if (isDIGIT(*d)) {
- for (; isDIGIT(*d) || *d == '_' || *d == '.'; d++);
- if (*d == ';' || isSPACE(*d) || *d == '}' || !*d) {
- SV *ver;
- s = scan_num(s, &yylval);
- version = yylval.opval;
- ver = cSVOPx(version)->op_sv;
- if (SvPOK(ver) && !SvNIOK(ver)) {
- (void)SvUPGRADE(ver, SVt_PVNV);
- SvNVX(ver) = str_to_version(ver);
- SvNOK_on(ver); /* hint that it is a version */
- }
- }
- }
-
- /* NOTE: The parser sees the package name and the VERSION swapped */
- PL_nextval[PL_nexttoke].opval = version;
- force_next(WORD);
-
- return (s);
-}
-
-/*
- * S_tokeq
- * Tokenize a quoted string passed in as an SV. It finds the next
- * chunk, up to end of string or a backslash. It may make a new
- * SV containing that chunk (if HINT_NEW_STRING is on). It also
- * turns \\ into \.
- */
-
-STATIC SV *
-S_tokeq(pTHX_ SV *sv)
-{
- register char *s;
- register char *send;
- register char *d;
- STRLEN len = 0;
- SV *pv = sv;
-
- if (!SvLEN(sv))
- goto finish;
-
- s = SvPV_force(sv, len);
- if (SvTYPE(sv) >= SVt_PVIV && SvIVX(sv) == -1)
- goto finish;
- send = s + len;
- while (s < send && *s != '\\')
- s++;
- if (s == send)
- goto finish;
- d = s;
- if ( PL_hints & HINT_NEW_STRING )
- pv = sv_2mortal(newSVpvn(SvPVX(pv), len));
- while (s < send) {
- if (*s == '\\') {
- if (s + 1 < send && (s[1] == '\\'))
- s++; /* all that, just for this */
- }
- *d++ = *s++;
- }
- *d = '\0';
- SvCUR_set(sv, d - SvPVX(sv));
- finish:
- if ( PL_hints & HINT_NEW_STRING )
- return new_constant(NULL, 0, "q", sv, pv, "q");
- return sv;
-}
-
-/*
- * Now come three functions related to double-quote context,
- * S_sublex_start, S_sublex_push, and S_sublex_done. They're used when
- * converting things like "\u\Lgnat" into ucfirst(lc("gnat")). They
- * interact with PL_lex_state, and create fake ( ... ) argument lists
- * to handle functions and concatenation.
- * They assume that whoever calls them will be setting up a fake
- * join call, because each subthing puts a ',' after it. This lets
- * "lower \luPpEr"
- * become
- * join($, , 'lower ', lcfirst( 'uPpEr', ) ,)
- *
- * (I'm not sure whether the spurious commas at the end of lcfirst's
- * arguments and join's arguments are created or not).
- */
-
-/*
- * S_sublex_start
- * Assumes that yylval.ival is the op we're creating (e.g. OP_LCFIRST).
- *
- * Pattern matching will set PL_lex_op to the pattern-matching op to
- * make (we return THING if yylval.ival is OP_NULL, PMFUNC otherwise).
- *
- * OP_CONST and OP_READLINE are easy--just make the new op and return.
- *
- * Everything else becomes a FUNC.
- *
- * Sets PL_lex_state to LEX_INTERPPUSH unless (ival was OP_NULL or we
- * had an OP_CONST or OP_READLINE). This just sets us up for a
- * call to S_sublex_push().
- */
-
-STATIC I32
-S_sublex_start(pTHX)
-{
- register I32 op_type = yylval.ival;
-
- if (op_type == OP_NULL) {
- yylval.opval = PL_lex_op;
- PL_lex_op = Nullop;
- return THING;
- }
- if (op_type == OP_CONST || op_type == OP_READLINE) {
- SV *sv = tokeq(PL_lex_stuff);
-
- if (SvTYPE(sv) == SVt_PVIV) {
- /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
- STRLEN len;
- char *p;
- SV *nsv;
-
- p = SvPV(sv, len);
- nsv = newSVpvn(p, len);
- if (SvUTF8(sv))
- SvUTF8_on(nsv);
- SvREFCNT_dec(sv);
- sv = nsv;
- }
- yylval.opval = (OP*)newSVOP(op_type, 0, sv);
- PL_lex_stuff = Nullsv;
- return THING;
- }
-
- PL_sublex_info.super_state = PL_lex_state;
- PL_sublex_info.sub_inwhat = op_type;
- PL_sublex_info.sub_op = PL_lex_op;
- PL_lex_state = LEX_INTERPPUSH;
-
- PL_expect = XTERM;
- if (PL_lex_op) {
- yylval.opval = PL_lex_op;
- PL_lex_op = Nullop;
- return PMFUNC;
- }
- else
- return FUNC;
-}
-
-/*
- * S_sublex_push
- * Create a new scope to save the lexing state. The scope will be
- * ended in S_sublex_done. Returns a '(', starting the function arguments
- * to the uc, lc, etc. found before.
- * Sets PL_lex_state to LEX_INTERPCONCAT.
- */
-
-STATIC I32
-S_sublex_push(pTHX)
-{
- ENTER;
-
- PL_lex_state = PL_sublex_info.super_state;
- SAVEI32(PL_lex_dojoin);
- SAVEI32(PL_lex_brackets);
- SAVEI32(PL_lex_casemods);
- SAVEI32(PL_lex_starts);
- SAVEI32(PL_lex_state);
- SAVEVPTR(PL_lex_inpat);
- SAVEI32(PL_lex_inwhat);
- SAVECOPLINE(PL_curcop);
- SAVEPPTR(PL_bufptr);
- SAVEPPTR(PL_oldbufptr);
- SAVEPPTR(PL_oldoldbufptr);
- SAVEPPTR(PL_last_lop);
- SAVEPPTR(PL_last_uni);
- SAVEPPTR(PL_linestart);
- SAVESPTR(PL_linestr);
- SAVEPPTR(PL_lex_brackstack);
- SAVEPPTR(PL_lex_casestack);
-
- PL_linestr = PL_lex_stuff;
- PL_lex_stuff = Nullsv;
-
- PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart
- = SvPVX(PL_linestr);
- PL_bufend += SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- SAVEFREESV(PL_linestr);
-
- PL_lex_dojoin = FALSE;
- PL_lex_brackets = 0;
- New(899, PL_lex_brackstack, 120, char);
- New(899, PL_lex_casestack, 12, char);
- SAVEFREEPV(PL_lex_brackstack);
- SAVEFREEPV(PL_lex_casestack);
- PL_lex_casemods = 0;
- *PL_lex_casestack = '\0';
- PL_lex_starts = 0;
- PL_lex_state = LEX_INTERPCONCAT;
- CopLINE_set(PL_curcop, PL_multi_start);
-
- PL_lex_inwhat = PL_sublex_info.sub_inwhat;
- if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
- PL_lex_inpat = PL_sublex_info.sub_op;
- else
- PL_lex_inpat = Nullop;
-
- return '(';
-}
-
-/*
- * S_sublex_done
- * Restores lexer state after a S_sublex_push.
- */
-
-STATIC I32
-S_sublex_done(pTHX)
-{
- if (!PL_lex_starts++) {
- SV *sv = newSVpvn("",0);
- if (SvUTF8(PL_linestr))
- SvUTF8_on(sv);
- PL_expect = XOPERATOR;
- yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
- return THING;
- }
-
- if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
- PL_lex_state = LEX_INTERPCASEMOD;
- return yylex();
- }
-
- /* Is there a right-hand side to take care of? (s//RHS/ or tr//RHS/) */
- if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
- PL_linestr = PL_lex_repl;
- PL_lex_inpat = 0;
- PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
- PL_bufend += SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- SAVEFREESV(PL_linestr);
- PL_lex_dojoin = FALSE;
- PL_lex_brackets = 0;
- PL_lex_casemods = 0;
- *PL_lex_casestack = '\0';
- PL_lex_starts = 0;
- if (SvEVALED(PL_lex_repl)) {
- PL_lex_state = LEX_INTERPNORMAL;
- PL_lex_starts++;
- /* we don't clear PL_lex_repl here, so that we can check later
- whether this is an evalled subst; that means we rely on the
- logic to ensure sublex_done() is called again only via the
- branch (in yylex()) that clears PL_lex_repl, else we'll loop */
- }
- else {
- PL_lex_state = LEX_INTERPCONCAT;
- PL_lex_repl = Nullsv;
- }
- return ',';
- }
- else {
- LEAVE;
- PL_bufend = SvPVX(PL_linestr);
- PL_bufend += SvCUR(PL_linestr);
- PL_expect = XOPERATOR;
- PL_sublex_info.sub_inwhat = 0;
- return ')';
- }
-}
-
-/*
- scan_const
-
- Extracts a pattern, double-quoted string, or transliteration. This
- is terrifying code.
-
- It looks at lex_inwhat and PL_lex_inpat to find out whether it's
- processing a pattern (PL_lex_inpat is true), a transliteration
- (lex_inwhat & OP_TRANS is true), or a double-quoted string.
-
- Returns a pointer to the character scanned up to. Iff this is
- advanced from the start pointer supplied (ie if anything was
- successfully parsed), will leave an OP for the substring scanned
- in yylval. Caller must intuit reason for not parsing further
- by looking at the next characters herself.
-
- In patterns:
- backslashes:
- double-quoted style: \r and \n
- regexp special ones: \D \s
- constants: \x3
- backrefs: \1 (deprecated in substitution replacements)
- case and quoting: \U \Q \E
- stops on @ and $, but not for $ as tail anchor
-
- In transliterations:
- characters are VERY literal, except for - not at the start or end
- of the string, which indicates a range. scan_const expands the
- range to the full set of intermediate characters.
-
- In double-quoted strings:
- backslashes:
- double-quoted style: \r and \n
- constants: \x3
- backrefs: \1 (deprecated)
- case and quoting: \U \Q \E
- stops on @ and $
-
- scan_const does *not* construct ops to handle interpolated strings.
- It stops processing as soon as it finds an embedded $ or @ variable
- and leaves it to the caller to work out what's going on.
-
- @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
-
- $ in pattern could be $foo or could be tail anchor. Assumption:
- it's a tail anchor if $ is the last thing in the string, or if it's
- followed by one of ")| \n\t"
-
- \1 (backreferences) are turned into $1
-
- The structure of the code is
- while (there's a character to process) {
- handle transliteration ranges
- skip regexp comments
- skip # initiated comments in //x patterns
- check for embedded @foo
- check for embedded scalars
- if (backslash) {
- leave intact backslashes from leave (below)
- deprecate \1 in strings and sub replacements
- handle string-changing backslashes \l \U \Q \E, etc.
- switch (what was escaped) {
- handle - in a transliteration (becomes a literal -)
- handle \132 octal characters
- handle 0x15 hex characters
- handle \cV (control V)
- handle printf backslashes (\f, \r, \n, etc)
- } (end switch)
- } (end if backslash)
- } (end while character to read)
-
-*/
-
-STATIC char *
-S_scan_const(pTHX_ char *start)
-{
- register char *send = PL_bufend; /* end of the constant */
- SV *sv = NEWSV(93, send - start); /* sv for the constant */
- register char *s = start; /* start of the constant */
- register char *d = SvPVX(sv); /* destination for copies */
- bool dorange = FALSE; /* are we in a translit range? */
- bool has_utf8 = FALSE; /* embedded \x{} */
- UV uv;
-
- I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
- ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
- : UTF;
- I32 this_utf8 = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
- ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ?
- OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
- : UTF;
- const char *leaveit = /* set of acceptably-backslashed characters */
- PL_lex_inpat
- ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
- : "";
-
- while (s < send || dorange) {
- /* get transliterations out of the way (they're most literal) */
- if (PL_lex_inwhat == OP_TRANS) {
- /* expand a range A-Z to the full set of characters. AIE! */
- if (dorange) {
- I32 i; /* current expanded character */
- I32 min; /* first character in range */
- I32 max; /* last character in range */
-
- i = d - SvPVX(sv); /* remember current offset */
- SvGROW(sv, SvLEN(sv) + 256); /* never more than 256 chars in a range */
- d = SvPVX(sv) + i; /* refresh d after realloc */
- d -= 2; /* eat the first char and the - */
-
- min = (U8)*d; /* first char in range */
- max = (U8)d[1]; /* last char in range */
-
-#ifndef ASCIIish
- if ((isLOWER(min) && isLOWER(max)) ||
- (isUPPER(min) && isUPPER(max))) {
- if (isLOWER(min)) {
- for (i = min; i <= max; i++)
- if (isLOWER(i))
- *d++ = i;
- } else {
- for (i = min; i <= max; i++)
- if (isUPPER(i))
- *d++ = i;
- }
- }
- else
-#endif
- for (i = min; i <= max; i++)
- *d++ = i;
-
- /* mark the range as done, and continue */
- dorange = FALSE;
- continue;
- }
-
- /* range begins (ignore - as first or last char) */
- else if (*s == '-' && s+1 < send && s != start) {
- if (utf) {
- *d++ = (char)0xff; /* use illegal utf8 byte--see pmtrans */
- s++;
- continue;
- }
- dorange = TRUE;
- s++;
- }
- }
-
- /* if we get here, we're not doing a transliteration */
-
- /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
- except for the last char, which will be done separately. */
- else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
- if (s[2] == '#') {
- while (s < send && *s != ')')
- *d++ = *s++;
- }
- else if (s[2] == '{' /* This should match regcomp.c */
- || ((s[2] == 'p' || s[2] == '?') && s[3] == '{'))
- {
- I32 count = 1;
- char *regparse = s + (s[2] == '{' ? 3 : 4);
- char c;
-
- while (count && (c = *regparse)) {
- if (c == '\\' && regparse[1])
- regparse++;
- else if (c == '{')
- count++;
- else if (c == '}')
- count--;
- regparse++;
- }
- if (*regparse != ')') {
- regparse--; /* Leave one char for continuation. */
- yyerror("Sequence (?{...}) not terminated or not {}-balanced");
- }
- while (s < regparse)
- *d++ = *s++;
- }
- }
-
- /* likewise skip #-initiated comments in //x patterns */
- else if (*s == '#' && PL_lex_inpat &&
- ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
- while (s+1 < send && *s != '\n')
- *d++ = *s++;
- }
-
- /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
- else if (*s == '@' && s[1]
- && (isALNUM_lazy_if(s+1,UTF) || strchr(":'{$", s[1])))
- break;
-
- /* check for embedded scalars. only stop if we're sure it's a
- variable.
- */
- else if (*s == '$') {
- if (!PL_lex_inpat) /* not a regexp, so $ must be var */
- break;
- if (s + 1 < send && !strchr("()| \n\t", s[1]))
- break; /* in regexp, $ might be tail anchor */
- }
-
- /* backslashes */
- if (*s == '\\' && s+1 < send) {
- bool to_be_utf8 = FALSE;
-
- s++;
-
- /* some backslashes we leave behind */
- if (*leaveit && *s && strchr(leaveit, *s)) {
- *d++ = '\\';
- *d++ = *s++;
- continue;
- }
-
- /* deprecate \1 in strings and substitution replacements */
- if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
- isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
- {
- if (ckWARN(WARN_SYNTAX))
- Perl_warner(aTHX_ WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
- *--s = '$';
- break;
- }
-
- /* string-change backslash escapes */
- if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
- --s;
- break;
- }
-
- /* if we get here, it's either a quoted -, or a digit */
- switch (*s) {
-
- /* quoted - in transliterations */
- case '-':
- if (PL_lex_inwhat == OP_TRANS) {
- *d++ = *s++;
- continue;
- }
- /* FALL THROUGH */
- default:
- {
- if (ckWARN(WARN_MISC) && isALPHA(*s))
- Perl_warner(aTHX_ WARN_MISC,
- "Unrecognized escape \\%c passed through",
- *s);
- /* default action is to copy the quoted character */
- goto default_action;
- }
-
- /* \132 indicates an octal constant */
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- {
- STRLEN len = 0; /* disallow underscores */
- uv = (UV)scan_oct(s, 3, &len);
- s += len;
- }
- goto NUM_ESCAPE_INSERT;
-
- /* \x24 indicates a hex constant */
- case 'x':
- ++s;
- if (*s == '{') {
- char* e = strchr(s, '}');
- if (!e) {
- yyerror("Missing right brace on \\x{}");
- e = s;
- }
- else {
- STRLEN len = 1; /* allow underscores */
- uv = (UV)scan_hex(s + 1, e - s - 1, &len);
- to_be_utf8 = TRUE;
- }
- s = e + 1;
- }
- else {
- {
- STRLEN len = 0; /* disallow underscores */
- uv = (UV)scan_hex(s, 2, &len);
- s += len;
- }
- }
-
- NUM_ESCAPE_INSERT:
- /* Insert oct or hex escaped character.
- * There will always enough room in sv since such
- * escapes will be longer than any UT-F8 sequence
- * they can end up as. */
-
- /* This spot is wrong for EBCDIC. Characters like
- * the lowercase letters and digits are >127 in EBCDIC,
- * so here they would need to be mapped to the Unicode
- * repertoire. --jhi */
-
- if (uv > 127) {
- if (!has_utf8 && (to_be_utf8 || uv > 255)) {
- /* Might need to recode whatever we have
- * accumulated so far if it contains any
- * hibit chars.
- *
- * (Can't we keep track of that and avoid
- * this rescan? --jhi)
- */
- int hicount = 0;
- char *c;
-
- for (c = SvPVX(sv); c < d; c++) {
- if (UTF8_IS_CONTINUED(*c))
- hicount++;
- }
- if (hicount) {
- char *old_pvx = SvPVX(sv);
- char *src, *dst;
-
- d = SvGROW(sv,
- SvCUR(sv) + hicount + 1) +
- (d - old_pvx);
-
- src = d - 1;
- d += hicount;
- dst = d - 1;
-
- while (src < dst) {
- if (UTF8_IS_CONTINUED(*src)) {
- *dst-- = UTF8_EIGHT_BIT_LO(*src);
- *dst-- = UTF8_EIGHT_BIT_HI(*src--);
- }
- else {
- *dst-- = *src--;
- }
- }
- }
- }
-
- if (to_be_utf8 || has_utf8 || uv > 255) {
- d = (char*)uv_to_utf8((U8*)d, uv);
- has_utf8 = TRUE;
- if (PL_lex_inwhat == OP_TRANS &&
- PL_sublex_info.sub_op) {
- PL_sublex_info.sub_op->op_private |=
- (PL_lex_repl ? OPpTRANS_FROM_UTF
- : OPpTRANS_TO_UTF);
- utf = TRUE;
- }
- }
- else {
- *d++ = (char)uv;
- }
- }
- else {
- *d++ = (char)uv;
- }
- continue;
-
- /* \N{latin small letter a} is a named character */
- case 'N':
- ++s;
- if (*s == '{') {
- char* e = strchr(s, '}');
- SV *res;
- STRLEN len;
- char *str;
-
- if (!e) {
- yyerror("Missing right brace on \\N{}");
- e = s - 1;
- goto cont_scan;
- }
- res = newSVpvn(s + 1, e - s - 1);
- res = new_constant( Nullch, 0, "charnames",
- res, Nullsv, "\\N{...}" );
- if (has_utf8)
- sv_utf8_upgrade(res);
- str = SvPV(res,len);
- if (!has_utf8 && SvUTF8(res)) {
- char *ostart = SvPVX(sv);
- SvCUR_set(sv, d - ostart);
- SvPOK_on(sv);
- *d = '\0';
- sv_utf8_upgrade(sv);
- /* this just broke our allocation above... */
- SvGROW(sv, send - start);
- d = SvPVX(sv) + SvCUR(sv);
- has_utf8 = TRUE;
- }
- if (len > e - s + 4) {
- char *odest = SvPVX(sv);
-
- SvGROW(sv, (SvCUR(sv) + len - (e - s + 4)));
- d = SvPVX(sv) + (d - odest);
- }
- Copy(str, d, len, char);
- d += len;
- SvREFCNT_dec(res);
- cont_scan:
- s = e + 1;
- }
- else
- yyerror("Missing braces on \\N{}");
- continue;
-
- /* \c is a control character */
- case 'c':
- s++;
-#ifdef EBCDIC
- *d = *s++;
- if (isLOWER(*d))
- *d = toUPPER(*d);
- *d = toCTRL(*d);
- d++;
-#else
- {
- U8 c = *s++;
- *d++ = toCTRL(c);
- }
-#endif
- continue;
-
- /* printf-style backslashes, formfeeds, newlines, etc */
- 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;
-#ifdef EBCDIC
- case 'e':
- *d++ = '\047'; /* CP 1047 */
- break;
- case 'a':
- *d++ = '\057'; /* CP 1047 */
- break;
-#else
- case 'e':
- *d++ = '\033';
- break;
- case 'a':
- *d++ = '\007';
- break;
-#endif
- } /* end switch */
-
- s++;
- continue;
- } /* end if (backslash) */
-
- default_action:
- if (UTF8_IS_CONTINUED(*s) && (this_utf8 || has_utf8)) {
- STRLEN len = (STRLEN) -1;
- UV uv;
- if (this_utf8) {
- uv = utf8_to_uv((U8*)s, send - s, &len, 0);
- }
- if (len == (STRLEN)-1) {
- /* Illegal UTF8 (a high-bit byte), make it valid. */
- char *old_pvx = SvPVX(sv);
- /* need space for one extra char (NOTE: SvCUR() not set here) */
- d = SvGROW(sv, SvLEN(sv) + 1) + (d - old_pvx);
- d = (char*)uv_to_utf8((U8*)d, (U8)*s++);
- }
- else {
- while (len--)
- *d++ = *s++;
- }
- has_utf8 = TRUE;
- if (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op) {
- PL_sublex_info.sub_op->op_private |=
- (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF);
- utf = TRUE;
- }
- continue;
- }
-
- *d++ = *s++;
- } /* while loop to process each character */
-
- /* terminate the string and set up the sv */
- *d = '\0';
- SvCUR_set(sv, d - SvPVX(sv));
- SvPOK_on(sv);
- if (has_utf8)
- SvUTF8_on(sv);
-
- /* shrink the sv if we allocated more than we used */
- if (SvCUR(sv) + 5 < SvLEN(sv)) {
- SvLEN_set(sv, SvCUR(sv) + 1);
- Renew(SvPVX(sv), SvLEN(sv), char);
- }
-
- /* return the substring (via yylval) only if we parsed anything */
- if (s > PL_bufptr) {
- if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
- sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
- sv, Nullsv,
- ( PL_lex_inwhat == OP_TRANS
- ? "tr"
- : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
- ? "s"
- : "qq")));
- yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
- } else
- SvREFCNT_dec(sv);
- return s;
-}
-
-/* S_intuit_more
- * Returns TRUE if there's more to the expression (e.g., a subscript),
- * FALSE otherwise.
- *
- * It deals with "$foo[3]" and /$foo[3]/ and /$foo[0123456789$]+/
- *
- * ->[ and ->{ return TRUE
- * { and [ outside a pattern are always subscripts, so return TRUE
- * if we're outside a pattern and it's not { or [, then return FALSE
- * if we're in a pattern and the first char is a {
- * {4,5} (any digits around the comma) returns FALSE
- * if we're in a pattern and the first char is a [
- * [] returns FALSE
- * [SOMETHING] has a funky algorithm to decide whether it's a
- * character class or not. It has to deal with things like
- * /$foo[-3]/ and /$foo[$bar]/ as well as /$foo[$\d]+/
- * anything else returns TRUE
- */
-
-/* This is the one truly awful dwimmer necessary to conflate C and sed. */
-
-STATIC int
-S_intuit_more(pTHX_ register char *s)
-{
- if (PL_lex_brackets)
- return TRUE;
- if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
- return TRUE;
- if (*s != '{' && *s != '[')
- return FALSE;
- if (!PL_lex_inpat)
- return TRUE;
-
- /* In a pattern, so maybe we have {n,m}. */
- if (*s == '{') {
- s++;
- if (!isDIGIT(*s))
- return TRUE;
- while (isDIGIT(*s))
- s++;
- if (*s == ',')
- s++;
- while (isDIGIT(*s))
- s++;
- if (*s == '}')
- return FALSE;
- return TRUE;
-
- }
-
- /* On the other hand, maybe we have a character class */
-
- s++;
- if (*s == ']' || *s == '^')
- return FALSE;
- else {
- /* this is terrifying, and it works */
- int weight = 2; /* let's weigh the evidence */
- char seen[256];
- unsigned char un_char = 255, last_un_char;
- char *send = strchr(s,']');
- char tmpbuf[sizeof PL_tokenbuf * 4];
-
- if (!send) /* has to be an expression */
- return TRUE;
-
- Zero(seen,256,char);
- if (*s == '$')
- weight -= 3;
- else if (isDIGIT(*s)) {
- if (s[1] != ']') {
- if (isDIGIT(s[1]) && s[2] == ']')
- weight -= 10;
- }
- else
- weight -= 100;
- }
- for (; s < send; s++) {
- last_un_char = un_char;
- un_char = (unsigned char)*s;
- switch (*s) {
- case '@':
- case '&':
- case '$':
- weight -= seen[un_char] * 10;
- if (isALNUM_lazy_if(s+1,UTF)) {
- scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
- if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
- weight -= 100;
- else
- weight -= 10;
- }
- else if (*s == '$' && s[1] &&
- strchr("[#!%*<>()-=",s[1])) {
- if (/*{*/ strchr("])} =",s[2]))
- weight -= 10;
- else
- weight -= 1;
- }
- break;
- case '\\':
- un_char = 254;
- if (s[1]) {
- if (strchr("wds]",s[1]))
- weight += 100;
- else if (seen['\''] || seen['"'])
- weight += 1;
- else if (strchr("rnftbxcav",s[1]))
- weight += 40;
- else if (isDIGIT(s[1])) {
- weight += 40;
- while (s[1] && isDIGIT(s[1]))
- s++;
- }
- }
- else
- weight += 100;
- break;
- case '-':
- if (s[1] == '\\')
- weight += 50;
- if (strchr("aA01! ",last_un_char))
- weight += 30;
- if (strchr("zZ79~",s[1]))
- weight += 30;
- if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
- weight -= 5; /* cope with negative subscript */
- break;
- default:
- if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
- isALPHA(*s) && s[1] && isALPHA(s[1])) {
- char *d = tmpbuf;
- while (isALPHA(*s))
- *d++ = *s++;
- *d = '\0';
- if (keyword(tmpbuf, d - tmpbuf))
- weight -= 150;
- }
- if (un_char == last_un_char + 1)
- weight += 5;
- weight -= seen[un_char];
- break;
- }
- seen[un_char]++;
- }
- if (weight >= 0) /* probably a character class */
- return FALSE;
- }
-
- return TRUE;
-}
-
-/*
- * S_intuit_method
- *
- * Does all the checking to disambiguate
- * foo bar
- * between foo(bar) and bar->foo. Returns 0 if not a method, otherwise
- * FUNCMETH (bar->foo(args)) or METHOD (bar->foo args).
- *
- * First argument is the stuff after the first token, e.g. "bar".
- *
- * Not a method if bar is a filehandle.
- * Not a method if foo is a subroutine prototyped to take a filehandle.
- * Not a method if it's really "Foo $bar"
- * Method if it's "foo $bar"
- * Not a method if it's really "print foo $bar"
- * Method if it's really "foo package::" (interpreted as package->foo)
- * Not a method if bar is known to be a subroutne ("sub bar; foo bar")
- * Not a method if bar is a filehandle or package, but is quoted with
- * =>
- */
-
-STATIC int
-S_intuit_method(pTHX_ char *start, GV *gv)
-{
- char *s = start + (*start == '$');
- char tmpbuf[sizeof PL_tokenbuf];
- STRLEN len;
- GV* indirgv;
-
- if (gv) {
- CV *cv;
- if (GvIO(gv))
- return 0;
- if ((cv = GvCVu(gv))) {
- char *proto = SvPVX(cv);
- if (proto) {
- if (*proto == ';')
- proto++;
- if (*proto == '*')
- return 0;
- }
- } else
- gv = 0;
- }
- s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
- /* start is the beginning of the possible filehandle/object,
- * and s is the end of it
- * tmpbuf is a copy of it
- */
-
- if (*start == '$') {
- if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
- return 0;
- s = skipspace(s);
- PL_bufptr = start;
- PL_expect = XREF;
- return *s == '(' ? FUNCMETH : METHOD;
- }
- if (!keyword(tmpbuf, len)) {
- if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
- len -= 2;
- tmpbuf[len] = '\0';
- goto bare_package;
- }
- indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
- if (indirgv && GvCVu(indirgv))
- return 0;
- /* filehandle or package name makes it a method */
- if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
- s = skipspace(s);
- if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
- return 0; /* no assumptions -- "=>" quotes bearword */
- bare_package:
- PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
- newSVpvn(tmpbuf,len));
- PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
- PL_expect = XTERM;
- force_next(WORD);
- PL_bufptr = s;
- return *s == '(' ? FUNCMETH : METHOD;
- }
- }
- return 0;
-}
-
-/*
- * S_incl_perldb
- * Return a string of Perl code to load the debugger. If PERL5DB
- * is set, it will return the contents of that, otherwise a
- * compile-time require of perl5db.pl.
- */
-
-STATIC char*
-S_incl_perldb(pTHX)
-{
- if (PL_perldb) {
- char *pdb = PerlEnv_getenv("PERL5DB");
-
- if (pdb)
- return pdb;
- SETERRNO(0,SS$_NORMAL);
- return "BEGIN { require 'perl5db.pl' }";
- }
- return "";
-}
-
-
-/* Encoded script support. filter_add() effectively inserts a
- * 'pre-processing' function into the current source input stream.
- * Note that the filter function only applies to the current source file
- * (e.g., it will not affect files 'require'd or 'use'd by this one).
- *
- * The datasv parameter (which may be NULL) can be used to pass
- * private data to this instance of the filter. The filter function
- * can recover the SV using the FILTER_DATA macro and use it to
- * store private buffers and state information.
- *
- * The supplied datasv parameter is upgraded to a PVIO type
- * and the IoDIRP/IoANY field is used to store the function pointer,
- * and IOf_FAKE_DIRP is enabled on datasv to mark this as such.
- * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
- * private use must be set using malloc'd pointers.
- */
-
-SV *
-Perl_filter_add(pTHX_ filter_t funcp, SV *datasv)
-{
- if (!funcp)
- return Nullsv;
-
- if (!PL_rsfp_filters)
- PL_rsfp_filters = newAV();
- if (!datasv)
- datasv = NEWSV(255,0);
- if (!SvUPGRADE(datasv, SVt_PVIO))
- Perl_die(aTHX_ "Can't upgrade filter_add data to SVt_PVIO");
- IoANY(datasv) = (void *)funcp; /* stash funcp into spare field */
- IoFLAGS(datasv) |= IOf_FAKE_DIRP;
- DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_add func %p (%s)\n",
- funcp, SvPV_nolen(datasv)));
- av_unshift(PL_rsfp_filters, 1);
- av_store(PL_rsfp_filters, 0, datasv) ;
- return(datasv);
-}
-
-
-/* Delete most recently added instance of this filter function. */
-void
-Perl_filter_del(pTHX_ filter_t funcp)
-{
- SV *datasv;
- DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_del func %p", funcp));
- if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
- return;
- /* if filter is on top of stack (usual case) just pop it off */
- datasv = FILTER_DATA(AvFILLp(PL_rsfp_filters));
- if (IoANY(datasv) == (void *)funcp) {
- IoFLAGS(datasv) &= ~IOf_FAKE_DIRP;
- IoANY(datasv) = (void *)NULL;
- sv_free(av_pop(PL_rsfp_filters));
-
- return;
- }
- /* we need to search for the correct entry and clear it */
- Perl_die(aTHX_ "filter_del can only delete in reverse order (currently)");
-}
-
-
-/* Invoke the n'th filter function for the current rsfp. */
-I32
-Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
-
-
- /* 0 = read one text line */
-{
- filter_t funcp;
- SV *datasv = NULL;
-
- if (!PL_rsfp_filters)
- return -1;
- if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
- /* Provide a default input filter to make life easy. */
- /* Note that we append to the line. This is handy. */
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "filter_read %d: from rsfp\n", idx));
- if (maxlen) {
- /* Want a block */
- int len ;
- int old_len = SvCUR(buf_sv) ;
-
- /* ensure buf_sv is large enough */
- SvGROW(buf_sv, old_len + maxlen) ;
- if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
- if (PerlIO_error(PL_rsfp))
- return -1; /* error */
- else
- return 0 ; /* end of file */
- }
- SvCUR_set(buf_sv, old_len + len) ;
- } else {
- /* Want a line */
- if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
- if (PerlIO_error(PL_rsfp))
- return -1; /* error */
- else
- return 0 ; /* end of file */
- }
- }
- return SvCUR(buf_sv);
- }
- /* Skip this filter slot if filter has been deleted */
- if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "filter_read %d: skipped (filter deleted)\n",
- idx));
- return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
- }
- /* Get function pointer hidden within datasv */
- funcp = (filter_t)IoANY(datasv);
- DEBUG_P(PerlIO_printf(Perl_debug_log,
- "filter_read %d: via function %p (%s)\n",
- idx, funcp, SvPV_nolen(datasv)));
- /* Call function. The function is expected to */
- /* call "FILTER_READ(idx+1, buf_sv)" first. */
- /* Return: <0:error, =0:eof, >0:not eof */
- return (*funcp)(aTHXo_ idx, buf_sv, maxlen);
-}
-
-STATIC char *
-S_filter_gets(pTHX_ register SV *sv, register PerlIO *fp, STRLEN append)
-{
-#ifdef PERL_CR_FILTER
- if (!PL_rsfp_filters) {
- filter_add(S_cr_textfilter,NULL);
- }
-#endif
- if (PL_rsfp_filters) {
-
- if (!append)
- SvCUR_set(sv, 0); /* start with empty line */
- if (FILTER_READ(0, sv, 0) > 0)
- return ( SvPVX(sv) ) ;
- else
- return Nullch ;
- }
- else
- return (sv_gets(sv, fp, append));
-}
-
-STATIC HV *
-S_find_in_my_stash(pTHX_ char *pkgname, I32 len)
-{
- GV *gv;
-
- if (len == 11 && *pkgname == '_' && strEQ(pkgname, "__PACKAGE__"))
- return PL_curstash;
-
- if (len > 2 &&
- (pkgname[len - 2] == ':' && pkgname[len - 1] == ':') &&
- (gv = gv_fetchpv(pkgname, FALSE, SVt_PVHV)))
- {
- return GvHV(gv); /* Foo:: */
- }
-
- /* use constant CLASS => 'MyClass' */
- if ((gv = gv_fetchpv(pkgname, FALSE, SVt_PVCV))) {
- SV *sv;
- if (GvCV(gv) && (sv = cv_const_sv(GvCV(gv)))) {
- pkgname = SvPV_nolen(sv);
- }
- }
-
- return gv_stashpv(pkgname, FALSE);
-}
-
-#ifdef DEBUGGING
- static char* exp_name[] =
- { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK",
- "ATTRTERM", "TERMBLOCK"
- };
-#endif
-
-/*
- yylex
-
- Works out what to call the token just pulled out of the input
- stream. The yacc parser takes care of taking the ops we return and
- stitching them into a tree.
-
- Returns:
- PRIVATEREF
-
- Structure:
- if read an identifier
- if we're in a my declaration
- croak if they tried to say my($foo::bar)
- build the ops for a my() declaration
- if it's an access to a my() variable
- are we in a sort block?
- croak if my($a); $a <=> $b
- build ops for access to a my() variable
- if in a dq string, and they've said @foo and we can't find @foo
- croak
- build ops for a bareword
- if we already built the token before, use it.
-*/
-
-#ifdef USE_PURE_BISON
-int
-Perl_yylex_r(pTHX_ YYSTYPE *lvalp, int *lcharp)
-{
- int r;
-
- yyactlevel++;
- yylval_pointer[yyactlevel] = lvalp;
- yychar_pointer[yyactlevel] = lcharp;
- if (yyactlevel >= YYMAXLEVEL)
- Perl_croak(aTHX_ "panic: YYMAXLEVEL");
-
- r = Perl_yylex(aTHX);
-
- yyactlevel--;
-
- return r;
-}
-#endif
-
-#ifdef __SC__
-#pragma segment Perl_yylex
-#endif
-int
-Perl_yylex(pTHX)
-{
- register char *s;
- register char *d;
- register I32 tmp;
- STRLEN len;
- GV *gv = Nullgv;
- GV **gvp = 0;
- bool bof = FALSE;
-
- /* check if there's an identifier for us to look at */
- if (PL_pending_ident) {
- /* pit holds the identifier we read and pending_ident is reset */
- char pit = PL_pending_ident;
- PL_pending_ident = 0;
-
- DEBUG_T({ PerlIO_printf(Perl_debug_log,
- "### Tokener saw identifier '%s'\n", PL_tokenbuf); })
-
- /* if we're in a my(), we can't allow dynamics here.
- $foo'bar has already been turned into $foo::bar, so
- just check for colons.
-
- if it's a legal name, the OP is a PADANY.
- */
- if (PL_in_my) {
- if (PL_in_my == KEY_our) { /* "our" is merely analogous to "my" */
- if (strchr(PL_tokenbuf,':'))
- yyerror(Perl_form(aTHX_ "No package name allowed for "
- "variable %s in \"our\"",
- PL_tokenbuf));
- tmp = pad_allocmy(PL_tokenbuf);
- }
- else {
- if (strchr(PL_tokenbuf,':'))
- yyerror(Perl_form(aTHX_ PL_no_myglob,PL_tokenbuf));
-
- yylval.opval = newOP(OP_PADANY, 0);
- yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
- return PRIVATEREF;
- }
- }
-
- /*
- build the ops for accesses to a my() variable.
-
- Deny my($a) or my($b) in a sort block, *if* $a or $b is
- then used in a comparison. This catches most, but not
- all cases. For instance, it catches
- sort { my($a); $a <=> $b }
- but not
- sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
- (although why you'd do that is anyone's guess).
- */
-
- if (!strchr(PL_tokenbuf,':')) {
-#ifdef USE_THREADS
- /* Check for single character per-thread SVs */
- if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
- && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
- && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
- {
- yylval.opval = newOP(OP_THREADSV, 0);
- yylval.opval->op_targ = tmp;
- return PRIVATEREF;
- }
-#endif /* USE_THREADS */
- if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
- SV *namesv = AvARRAY(PL_comppad_name)[tmp];
- /* might be an "our" variable" */
- if (SvFLAGS(namesv) & SVpad_OUR) {
- /* build ops for a bareword */
- SV *sym = newSVpv(HvNAME(GvSTASH(namesv)),0);
- sv_catpvn(sym, "::", 2);
- sv_catpv(sym, PL_tokenbuf+1);
- yylval.opval = (OP*)newSVOP(OP_CONST, 0, sym);
- yylval.opval->op_private = OPpCONST_ENTERED;
- gv_fetchpv(SvPVX(sym),
- (PL_in_eval
- ? (GV_ADDMULTI | GV_ADDINEVAL)
- : TRUE
- ),
- ((PL_tokenbuf[0] == '$') ? SVt_PV
- : (PL_tokenbuf[0] == '@') ? SVt_PVAV
- : SVt_PVHV));
- return WORD;
- }
-
- /* if it's a sort block and they're naming $a or $b */
- if (PL_last_lop_op == OP_SORT &&
- PL_tokenbuf[0] == '$' &&
- (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
- && !PL_tokenbuf[2])
- {
- for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
- d < PL_bufend && *d != '\n';
- d++)
- {
- if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
- Perl_croak(aTHX_ "Can't use \"my %s\" in sort comparison",
- PL_tokenbuf);
- }
- }
- }
-
- yylval.opval = newOP(OP_PADANY, 0);
- yylval.opval->op_targ = tmp;
- return PRIVATEREF;
- }
- }
-
- /*
- Whine if they've said @foo in a doublequoted string,
- and @foo isn't a variable we can find in the symbol
- table.
- */
- if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
- GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
- if ((!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
- && ckWARN(WARN_AMBIGUOUS))
- {
- /* Downgraded from fatal to warning 20000522 mjd */
- Perl_warner(aTHX_ WARN_AMBIGUOUS,
- "Possible unintended interpolation of %s in string",
- PL_tokenbuf);
- }
- }
-
- /* build ops for a bareword */
- yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
- yylval.opval->op_private = OPpCONST_ENTERED;
- gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
- ((PL_tokenbuf[0] == '$') ? SVt_PV
- : (PL_tokenbuf[0] == '@') ? SVt_PVAV
- : SVt_PVHV));
- return WORD;
- }
-
- /* no identifier pending identification */
-
- switch (PL_lex_state) {
-#ifdef COMMENTARY
- case LEX_NORMAL: /* Some compilers will produce faster */
- case LEX_INTERPNORMAL: /* code if we comment these out. */
- break;
-#endif
-
- /* when we've already built the next token, just pull it out of the queue */
- case LEX_KNOWNEXT:
- PL_nexttoke--;
- yylval = PL_nextval[PL_nexttoke];
- if (!PL_nexttoke) {
- PL_lex_state = PL_lex_defer;
- PL_expect = PL_lex_expect;
- PL_lex_defer = LEX_NORMAL;
- }
- DEBUG_T({ PerlIO_printf(Perl_debug_log,
- "### Next token after '%s' was known, type %"IVdf"\n", PL_bufptr,
- (IV)PL_nexttype[PL_nexttoke]); })
-
- return(PL_nexttype[PL_nexttoke]);
-
- /* interpolated case modifiers like \L \U, including \Q and \E.
- when we get here, PL_bufptr is at the \
- */
- case LEX_INTERPCASEMOD:
-#ifdef DEBUGGING
- if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
- Perl_croak(aTHX_ "panic: INTERPCASEMOD");
-#endif
- /* handle \E or end of string */
- if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
- char oldmod;
-
- /* if at a \E */
- if (PL_lex_casemods) {
- oldmod = PL_lex_casestack[--PL_lex_casemods];
- PL_lex_casestack[PL_lex_casemods] = '\0';
-
- if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
- PL_bufptr += 2;
- PL_lex_state = LEX_INTERPCONCAT;
- }
- return ')';
- }
- if (PL_bufptr != PL_bufend)
- PL_bufptr += 2;
- PL_lex_state = LEX_INTERPCONCAT;
- return yylex();
- }
- else {
- DEBUG_T({ PerlIO_printf(Perl_debug_log,
- "### Saw case modifier at '%s'\n", PL_bufptr); })
- s = PL_bufptr + 1;
- if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
- tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
- if (strchr("LU", *s) &&
- (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
- {
- PL_lex_casestack[--PL_lex_casemods] = '\0';
- return ')';
- }
- if (PL_lex_casemods > 10) {
- char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
- if (newlb != PL_lex_casestack) {
- SAVEFREEPV(newlb);
- PL_lex_casestack = newlb;
- }
- }
- PL_lex_casestack[PL_lex_casemods++] = *s;
- PL_lex_casestack[PL_lex_casemods] = '\0';
- PL_lex_state = LEX_INTERPCONCAT;
- PL_nextval[PL_nexttoke].ival = 0;
- force_next('(');
- if (*s == 'l')
- PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
- else if (*s == 'u')
- PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
- else if (*s == 'L')
- PL_nextval[PL_nexttoke].ival = OP_LC;
- else if (*s == 'U')
- PL_nextval[PL_nexttoke].ival = OP_UC;
- else if (*s == 'Q')
- PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
- else
- Perl_croak(aTHX_ "panic: yylex");
- PL_bufptr = s + 1;
- force_next(FUNC);
- if (PL_lex_starts) {
- s = PL_bufptr;
- PL_lex_starts = 0;
- Aop(OP_CONCAT);
- }
- else
- return yylex();
- }
-
- case LEX_INTERPPUSH:
- return sublex_push();
-
- case LEX_INTERPSTART:
- if (PL_bufptr == PL_bufend)
- return sublex_done();
- DEBUG_T({ PerlIO_printf(Perl_debug_log,
- "### Interpolated variable at '%s'\n", PL_bufptr); })
- PL_expect = XTERM;
- PL_lex_dojoin = (*PL_bufptr == '@');
- PL_lex_state = LEX_INTERPNORMAL;
- if (PL_lex_dojoin) {
- PL_nextval[PL_nexttoke].ival = 0;
- force_next(',');
-#ifdef USE_THREADS
- PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
- PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
- force_next(PRIVATEREF);
-#else
- force_ident("\"", '$');
-#endif /* USE_THREADS */
- PL_nextval[PL_nexttoke].ival = 0;
- force_next('$');
- PL_nextval[PL_nexttoke].ival = 0;
- force_next('(');
- PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
- force_next(FUNC);
- }
- if (PL_lex_starts++) {
- s = PL_bufptr;
- Aop(OP_CONCAT);
- }
- return yylex();
-
- case LEX_INTERPENDMAYBE:
- if (intuit_more(PL_bufptr)) {
- PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
- break;
- }
- /* FALL THROUGH */
-
- case LEX_INTERPEND:
- if (PL_lex_dojoin) {
- PL_lex_dojoin = FALSE;
- PL_lex_state = LEX_INTERPCONCAT;
- return ')';
- }
- if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
- && SvEVALED(PL_lex_repl))
- {
- if (PL_bufptr != PL_bufend)
- Perl_croak(aTHX_ "Bad evalled substitution pattern");
- PL_lex_repl = Nullsv;
- }
- /* FALLTHROUGH */
- case LEX_INTERPCONCAT:
-#ifdef DEBUGGING
- if (PL_lex_brackets)
- Perl_croak(aTHX_ "panic: INTERPCONCAT");
-#endif
- if (PL_bufptr == PL_bufend)
- return sublex_done();
-
- if (SvIVX(PL_linestr) == '\'') {
- SV *sv = newSVsv(PL_linestr);
- if (!PL_lex_inpat)
- sv = tokeq(sv);
- else if ( PL_hints & HINT_NEW_RE )
- sv = new_constant(NULL, 0, "qr", sv, sv, "q");
- yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
- s = PL_bufend;
- }
- else {
- s = scan_const(PL_bufptr);
- if (*s == '\\')
- PL_lex_state = LEX_INTERPCASEMOD;
- else
- PL_lex_state = LEX_INTERPSTART;
- }
-
- if (s != PL_bufptr) {
- PL_nextval[PL_nexttoke] = yylval;
- PL_expect = XTERM;
- force_next(THING);
- if (PL_lex_starts++)
- Aop(OP_CONCAT);
- else {
- PL_bufptr = s;
- return yylex();
- }
- }
-
- return yylex();
- case LEX_FORMLINE:
- PL_lex_state = LEX_NORMAL;
- s = scan_formline(PL_bufptr);
- if (!PL_lex_formbrack)
- goto rightbracket;
- OPERATOR(';');
- }
-
- s = PL_bufptr;
- PL_oldoldbufptr = PL_oldbufptr;
- PL_oldbufptr = s;
- DEBUG_T( {
- PerlIO_printf(Perl_debug_log, "### Tokener expecting %s at %s\n",
- exp_name[PL_expect], s);
- } )
-
- retry:
- switch (*s) {
- default:
- if (isIDFIRST_lazy_if(s,UTF))
- goto keylookup;
- Perl_croak(aTHX_ "Unrecognized character \\x%02X", *s & 255);
- case 4:
- case 26:
- goto fake_eof; /* emulate EOF on ^D or ^Z */
- case 0:
- if (!PL_rsfp) {
- PL_last_uni = 0;
- PL_last_lop = 0;
- if (PL_lex_brackets)
- yyerror("Missing right curly or square bracket");
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Tokener got EOF\n");
- } )
- TOKEN(0);
- }
- if (s++ < PL_bufend)
- goto retry; /* ignore stray nulls */
- PL_last_uni = 0;
- PL_last_lop = 0;
- if (!PL_in_eval && !PL_preambled) {
- PL_preambled = TRUE;
- sv_setpv(PL_linestr,incl_perldb());
- if (SvCUR(PL_linestr))
- sv_catpv(PL_linestr,";");
- if (PL_preambleav){
- while(AvFILLp(PL_preambleav) >= 0) {
- SV *tmpsv = av_shift(PL_preambleav);
- sv_catsv(PL_linestr, tmpsv);
- sv_catpv(PL_linestr, ";");
- sv_free(tmpsv);
- }
- sv_free((SV*)PL_preambleav);
- PL_preambleav = NULL;
- }
- if (PL_minus_n || PL_minus_p) {
- sv_catpv(PL_linestr, "LINE: while (<>) {");
- if (PL_minus_l)
- sv_catpv(PL_linestr,"chomp;");
- if (PL_minus_a) {
- GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
- if (gv)
- GvIMPORTED_AV_on(gv);
- if (PL_minus_F) {
- if (strchr("/'\"", *PL_splitstr)
- && strchr(PL_splitstr + 1, *PL_splitstr))
- Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s);", PL_splitstr);
- else {
- char delim;
- s = "'~#\200\1'"; /* surely one char is unused...*/
- while (s[1] && strchr(PL_splitstr, *s)) s++;
- delim = *s;
- Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s%c",
- "q" + (delim == '\''), delim);
- for (s = PL_splitstr; *s; s++) {
- if (*s == '\\')
- sv_catpvn(PL_linestr, "\\", 1);
- sv_catpvn(PL_linestr, s, 1);
- }
- Perl_sv_catpvf(aTHX_ PL_linestr, "%c);", delim);
- }
- }
- else
- sv_catpv(PL_linestr,"@F=split(' ');");
- }
- }
- sv_catpv(PL_linestr, "\n");
- PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- if (PERLDB_LINE && PL_curstash != PL_debstash) {
- SV *sv = NEWSV(85,0);
-
- sv_upgrade(sv, SVt_PVMG);
- sv_setsv(sv,PL_linestr);
- av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
- }
- goto retry;
- }
- do {
- bof = PL_rsfp ? TRUE : FALSE;
- if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
- fake_eof:
- if (PL_rsfp) {
- if (PL_preprocess && !PL_in_eval)
- (void)PerlProc_pclose(PL_rsfp);
- else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
- PerlIO_clearerr(PL_rsfp);
- else
- (void)PerlIO_close(PL_rsfp);
- PL_rsfp = Nullfp;
- PL_doextract = FALSE;
- }
- if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
- sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
- sv_catpv(PL_linestr,";}");
- PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- PL_minus_n = PL_minus_p = 0;
- goto retry;
- }
- PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- sv_setpv(PL_linestr,"");
- TOKEN(';'); /* not infinite loop because rsfp is NULL now */
- }
- /* if it looks like the start of a BOM, check if it in fact is */
- else if (bof && (!*s || *(U8*)s == 0xEF || *(U8*)s >= 0xFE)) {
-#ifdef PERLIO_IS_STDIO
-# ifdef __GNU_LIBRARY__
-# if __GNU_LIBRARY__ == 1 /* Linux glibc5 */
-# define FTELL_FOR_PIPE_IS_BROKEN
-# endif
-# else
-# ifdef __GLIBC__
-# if __GLIBC__ == 1 /* maybe some glibc5 release had it like this? */
-# define FTELL_FOR_PIPE_IS_BROKEN
-# endif
-# endif
-# endif
-#endif
-#ifdef FTELL_FOR_PIPE_IS_BROKEN
- /* This loses the possibility to detect the bof
- * situation on perl -P when the libc5 is being used.
- * Workaround? Maybe attach some extra state to PL_rsfp?
- */
- if (!PL_preprocess)
- bof = PerlIO_tell(PL_rsfp) == SvCUR(PL_linestr);
-#else
- bof = PerlIO_tell(PL_rsfp) == SvCUR(PL_linestr);
-#endif
- if (bof) {
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- s = swallow_bom((U8*)s);
- }
- }
- if (PL_doextract) {
- if (*s == '#' && s[1] == '!' && instr(s,"perl"))
- PL_doextract = FALSE;
-
- /* Incest with pod. */
- if (*s == '=' && strnEQ(s, "=cut", 4)) {
- sv_setpv(PL_linestr, "");
- PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- PL_doextract = FALSE;
- }
- }
- incline(s);
- } while (PL_doextract);
- PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
- if (PERLDB_LINE && PL_curstash != PL_debstash) {
- SV *sv = NEWSV(85,0);
-
- sv_upgrade(sv, SVt_PVMG);
- sv_setsv(sv,PL_linestr);
- av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
- }
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- if (CopLINE(PL_curcop) == 1) {
- while (s < PL_bufend && isSPACE(*s))
- s++;
- if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
- s++;
- d = Nullch;
- if (!PL_in_eval) {
- if (*s == '#' && *(s+1) == '!')
- d = s + 2;
-#ifdef ALTERNATE_SHEBANG
- else {
- static char as[] = ALTERNATE_SHEBANG;
- if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
- d = s + (sizeof(as) - 1);
- }
-#endif /* ALTERNATE_SHEBANG */
- }
- if (d) {
- char *ipath;
- char *ipathend;
-
- while (isSPACE(*d))
- d++;
- ipath = d;
- while (*d && !isSPACE(*d))
- d++;
- ipathend = d;
-
-#ifdef ARG_ZERO_IS_SCRIPT
- if (ipathend > ipath) {
- /*
- * HP-UX (at least) sets argv[0] to the script name,
- * which makes $^X incorrect. And Digital UNIX and Linux,
- * at least, set argv[0] to the basename of the Perl
- * interpreter. So, having found "#!", we'll set it right.
- */
- SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
- assert(SvPOK(x) || SvGMAGICAL(x));
- if (sv_eq(x, CopFILESV(PL_curcop))) {
- sv_setpvn(x, ipath, ipathend - ipath);
- SvSETMAGIC(x);
- }
- TAINT_NOT; /* $^X is always tainted, but that's OK */
- }
-#endif /* ARG_ZERO_IS_SCRIPT */
-
- /*
- * Look for options.
- */
- d = instr(s,"perl -");
- if (!d) {
- d = instr(s,"perl");
-#if defined(DOSISH)
- /* avoid getting into infinite loops when shebang
- * line contains "Perl" rather than "perl" */
- if (!d) {
- for (d = ipathend-4; d >= ipath; --d) {
- if ((*d == 'p' || *d == 'P')
- && !ibcmp(d, "perl", 4))
- {
- break;
- }
- }
- if (d < ipath)
- d = Nullch;
- }
-#endif
- }
-#ifdef ALTERNATE_SHEBANG
- /*
- * If the ALTERNATE_SHEBANG on this system starts with a
- * character that can be part of a Perl expression, then if
- * we see it but not "perl", we're probably looking at the
- * start of Perl code, not a request to hand off to some
- * other interpreter. Similarly, if "perl" is there, but
- * not in the first 'word' of the line, we assume the line
- * contains the start of the Perl program.
- */
- if (d && *s != '#') {
- char *c = ipath;
- while (*c && !strchr("; \t\r\n\f\v#", *c))
- c++;
- if (c < d)
- d = Nullch; /* "perl" not in first word; ignore */
- else
- *s = '#'; /* Don't try to parse shebang line */
- }
-#endif /* ALTERNATE_SHEBANG */
-#ifndef MACOS_TRADITIONAL
- if (!d &&
- *s == '#' &&
- ipathend > ipath &&
- !PL_minus_c &&
- !instr(s,"indir") &&
- instr(PL_origargv[0],"perl"))
- {
- char **newargv;
-
- *ipathend = '\0';
- s = ipathend + 1;
- while (s < PL_bufend && isSPACE(*s))
- s++;
- if (s < PL_bufend) {
- Newz(899,newargv,PL_origargc+3,char*);
- newargv[1] = s;
- while (s < PL_bufend && !isSPACE(*s))
- s++;
- *s = '\0';
- Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
- }
- else
- newargv = PL_origargv;
- newargv[0] = ipath;
- PerlProc_execv(ipath, EXEC_ARGV_CAST(newargv));
- Perl_croak(aTHX_ "Can't exec %s", ipath);
- }
-#endif
- if (d) {
- U32 oldpdb = PL_perldb;
- bool oldn = PL_minus_n;
- bool oldp = PL_minus_p;
-
- while (*d && !isSPACE(*d)) d++;
- while (SPACE_OR_TAB(*d)) d++;
-
- if (*d++ == '-') {
- do {
- if (*d == 'M' || *d == 'm') {
- char *m = d;
- while (*d && !isSPACE(*d)) d++;
- Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
- (int)(d - m), m);
- }
- d = moreswitches(d);
- } while (d);
- if ((PERLDB_LINE && !oldpdb) ||
- ((PL_minus_n || PL_minus_p) && !(oldn || oldp)))
- /* if we have already added "LINE: while (<>) {",
- we must not do it again */
- {
- sv_setpv(PL_linestr, "");
- PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- PL_preambled = FALSE;
- if (PERLDB_LINE)
- (void)gv_fetchfile(PL_origfilename);
- goto retry;
- }
- }
- }
- }
- }
- if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
- PL_bufptr = s;
- PL_lex_state = LEX_FORMLINE;
- return yylex();
- }
- goto retry;
- case '\r':
-#ifdef PERL_STRICT_CR
- Perl_warn(aTHX_ "Illegal character \\%03o (carriage return)", '\r');
- Perl_croak(aTHX_
- "\t(Maybe you didn't strip carriage returns after a network transfer?)\n");
-#endif
- case ' ': case '\t': case '\f': case 013:
-#ifdef MACOS_TRADITIONAL
- case '\312':
-#endif
- s++;
- goto retry;
- case '#':
- case '\n':
- if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
- if (*s == '#' && s == PL_linestart && PL_in_eval && !PL_rsfp) {
- /* handle eval qq[#line 1 "foo"\n ...] */
- CopLINE_dec(PL_curcop);
- incline(s);
- }
- d = PL_bufend;
- while (s < d && *s != '\n')
- s++;
- if (s < d)
- s++;
- incline(s);
- if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
- PL_bufptr = s;
- PL_lex_state = LEX_FORMLINE;
- return yylex();
- }
- }
- else {
- *s = '\0';
- PL_bufend = s;
- }
- goto retry;
- case '-':
- if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
- I32 ftst = 0;
-
- s++;
- PL_bufptr = s;
- tmp = *s++;
-
- while (s < PL_bufend && SPACE_OR_TAB(*s))
- s++;
-
- if (strnEQ(s,"=>",2)) {
- s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Saw unary minus before =>, forcing word '%s'\n", s);
- } )
- OPERATOR('-'); /* unary minus */
- }
- PL_last_uni = PL_oldbufptr;
- switch (tmp) {
- case 'r': ftst = OP_FTEREAD; break;
- case 'w': ftst = OP_FTEWRITE; break;
- case 'x': ftst = OP_FTEEXEC; break;
- case 'o': ftst = OP_FTEOWNED; break;
- case 'R': ftst = OP_FTRREAD; break;
- case 'W': ftst = OP_FTRWRITE; break;
- case 'X': ftst = OP_FTREXEC; break;
- case 'O': ftst = OP_FTROWNED; break;
- case 'e': ftst = OP_FTIS; break;
- case 'z': ftst = OP_FTZERO; break;
- case 's': ftst = OP_FTSIZE; break;
- case 'f': ftst = OP_FTFILE; break;
- case 'd': ftst = OP_FTDIR; break;
- case 'l': ftst = OP_FTLINK; break;
- case 'p': ftst = OP_FTPIPE; break;
- case 'S': ftst = OP_FTSOCK; break;
- case 'u': ftst = OP_FTSUID; break;
- case 'g': ftst = OP_FTSGID; break;
- case 'k': ftst = OP_FTSVTX; break;
- case 'b': ftst = OP_FTBLK; break;
- case 'c': ftst = OP_FTCHR; break;
- case 't': ftst = OP_FTTTY; break;
- case 'T': ftst = OP_FTTEXT; break;
- case 'B': ftst = OP_FTBINARY; break;
- case 'M': case 'A': case 'C':
- gv_fetchpv("\024",TRUE, SVt_PV);
- switch (tmp) {
- case 'M': ftst = OP_FTMTIME; break;
- case 'A': ftst = OP_FTATIME; break;
- case 'C': ftst = OP_FTCTIME; break;
- default: break;
- }
- break;
- default:
- Perl_croak(aTHX_ "Unrecognized file test: -%c", (int)tmp);
- break;
- }
- PL_last_lop_op = ftst;
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Saw file test %c\n", (int)ftst);
- } )
- FTST(ftst);
- }
- tmp = *s++;
- if (*s == tmp) {
- s++;
- if (PL_expect == XOPERATOR)
- TERM(POSTDEC);
- else
- OPERATOR(PREDEC);
- }
- else if (*s == '>') {
- s++;
- s = skipspace(s);
- if (isIDFIRST_lazy_if(s,UTF)) {
- s = force_word(s,METHOD,FALSE,TRUE,FALSE);
- TOKEN(ARROW);
- }
- else if (*s == '$')
- OPERATOR(ARROW);
- else
- TERM(ARROW);
- }
- if (PL_expect == XOPERATOR)
- Aop(OP_SUBTRACT);
- else {
- if (isSPACE(*s) || !isSPACE(*PL_bufptr))
- check_uni();
- OPERATOR('-'); /* unary minus */
- }
-
- case '+':
- tmp = *s++;
- if (*s == tmp) {
- s++;
- if (PL_expect == XOPERATOR)
- TERM(POSTINC);
- else
- OPERATOR(PREINC);
- }
- if (PL_expect == XOPERATOR)
- Aop(OP_ADD);
- else {
- if (isSPACE(*s) || !isSPACE(*PL_bufptr))
- check_uni();
- OPERATOR('+');
- }
-
- case '*':
- if (PL_expect != XOPERATOR) {
- s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
- PL_expect = XOPERATOR;
- force_ident(PL_tokenbuf, '*');
- if (!*PL_tokenbuf)
- PREREF('*');
- TERM('*');
- }
- s++;
- if (*s == '*') {
- s++;
- PWop(OP_POW);
- }
- Mop(OP_MULTIPLY);
-
- case '%':
- if (PL_expect == XOPERATOR) {
- ++s;
- Mop(OP_MODULO);
- }
- PL_tokenbuf[0] = '%';
- s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
- if (!PL_tokenbuf[1]) {
- if (s == PL_bufend)
- yyerror("Final % should be \\% or %name");
- PREREF('%');
- }
- PL_pending_ident = '%';
- TERM('%');
-
- case '^':
- s++;
- BOop(OP_BIT_XOR);
- case '[':
- PL_lex_brackets++;
- /* FALL THROUGH */
- case '~':
- case ',':
- tmp = *s++;
- OPERATOR(tmp);
- case ':':
- if (s[1] == ':') {
- len = 0;
- goto just_a_word;
- }
- s++;
- switch (PL_expect) {
- OP *attrs;
- case XOPERATOR:
- if (!PL_in_my || PL_lex_state != LEX_NORMAL)
- break;
- PL_bufptr = s; /* update in case we back off */
- goto grabattrs;
- case XATTRBLOCK:
- PL_expect = XBLOCK;
- goto grabattrs;
- case XATTRTERM:
- PL_expect = XTERMBLOCK;
- grabattrs:
- s = skipspace(s);
- attrs = Nullop;
- while (isIDFIRST_lazy_if(s,UTF)) {
- d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
- if (isLOWER(*s) && (tmp = keyword(PL_tokenbuf, len))) {
- if (tmp < 0) tmp = -tmp;
- switch (tmp) {
- case KEY_or:
- case KEY_and:
- case KEY_for:
- case KEY_unless:
- case KEY_if:
- case KEY_while:
- case KEY_until:
- goto got_attrs;
- default:
- break;
- }
- }
- if (*d == '(') {
- d = scan_str(d,TRUE,TRUE);
- if (!d) {
- /* MUST advance bufptr here to avoid bogus
- "at end of line" context messages from yyerror().
- */
- PL_bufptr = s + len;
- yyerror("Unterminated attribute parameter in attribute list");
- if (attrs)
- op_free(attrs);
- return 0; /* EOF indicator */
- }
- }
- if (PL_lex_stuff) {
- SV *sv = newSVpvn(s, len);
- sv_catsv(sv, PL_lex_stuff);
- attrs = append_elem(OP_LIST, attrs,
- newSVOP(OP_CONST, 0, sv));
- SvREFCNT_dec(PL_lex_stuff);
- PL_lex_stuff = Nullsv;
- }
- else {
- if (!PL_in_my && len == 6 && strnEQ(s, "lvalue", len))
- CvLVALUE_on(PL_compcv);
- else if (!PL_in_my && len == 6 && strnEQ(s, "locked", len))
- CvLOCKED_on(PL_compcv);
- else if (!PL_in_my && len == 6 && strnEQ(s, "method", len))
- CvMETHOD_on(PL_compcv);
- /* After we've set the flags, it could be argued that
- we don't need to do the attributes.pm-based setting
- process, and shouldn't bother appending recognized
- flags. To experiment with that, uncomment the
- following "else": */
- /* else */
- attrs = append_elem(OP_LIST, attrs,
- newSVOP(OP_CONST, 0,
- newSVpvn(s, len)));
- }
- s = skipspace(d);
- if (*s == ':' && s[1] != ':')
- s = skipspace(s+1);
- else if (s == d)
- break; /* require real whitespace or :'s */
- }
- tmp = (PL_expect == XOPERATOR ? '=' : '{'); /*'}(' for vi */
- if (*s != ';' && *s != tmp && (tmp != '=' || *s != ')')) {
- char q = ((*s == '\'') ? '"' : '\'');
- /* If here for an expression, and parsed no attrs, back off. */
- if (tmp == '=' && !attrs) {
- s = PL_bufptr;
- break;
- }
- /* MUST advance bufptr here to avoid bogus "at end of line"
- context messages from yyerror().
- */
- PL_bufptr = s;
- if (!*s)
- yyerror("Unterminated attribute list");
- else
- yyerror(Perl_form(aTHX_ "Invalid separator character %c%c%c in attribute list",
- q, *s, q));
- if (attrs)
- op_free(attrs);
- OPERATOR(':');
- }
- got_attrs:
- if (attrs) {
- PL_nextval[PL_nexttoke].opval = attrs;
- force_next(THING);
- }
- TOKEN(COLONATTR);
- }
- OPERATOR(':');
- case '(':
- s++;
- if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
- PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
- else
- PL_expect = XTERM;
- TOKEN('(');
- case ';':
- CLINE;
- tmp = *s++;
- OPERATOR(tmp);
- case ')':
- tmp = *s++;
- s = skipspace(s);
- if (*s == '{')
- PREBLOCK(tmp);
- TERM(tmp);
- case ']':
- s++;
- if (PL_lex_brackets <= 0)
- yyerror("Unmatched right square bracket");
- else
- --PL_lex_brackets;
- if (PL_lex_state == LEX_INTERPNORMAL) {
- if (PL_lex_brackets == 0) {
- if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
- PL_lex_state = LEX_INTERPEND;
- }
- }
- TERM(']');
- case '{':
- leftbracket:
- s++;
- if (PL_lex_brackets > 100) {
- char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
- if (newlb != PL_lex_brackstack) {
- SAVEFREEPV(newlb);
- PL_lex_brackstack = newlb;
- }
- }
- switch (PL_expect) {
- case XTERM:
- if (PL_lex_formbrack) {
- s--;
- PRETERMBLOCK(DO);
- }
- if (PL_oldoldbufptr == PL_last_lop)
- PL_lex_brackstack[PL_lex_brackets++] = XTERM;
- else
- PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
- OPERATOR(HASHBRACK);
- case XOPERATOR:
- while (s < PL_bufend && SPACE_OR_TAB(*s))
- s++;
- d = s;
- PL_tokenbuf[0] = '\0';
- if (d < PL_bufend && *d == '-') {
- PL_tokenbuf[0] = '-';
- d++;
- while (d < PL_bufend && SPACE_OR_TAB(*d))
- d++;
- }
- if (d < PL_bufend && isIDFIRST_lazy_if(d,UTF)) {
- d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
- FALSE, &len);
- while (d < PL_bufend && SPACE_OR_TAB(*d))
- d++;
- if (*d == '}') {
- char minus = (PL_tokenbuf[0] == '-');
- s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
- if (UTF && !IN_BYTE && is_utf8_string((U8*)PL_tokenbuf, 0) &&
- PL_nextval[PL_nexttoke-1].opval)
- SvUTF8_on(((SVOP*)PL_nextval[PL_nexttoke-1].opval)->op_sv);
- if (minus)
- force_next('-');
- }
- }
- /* FALL THROUGH */
- case XATTRBLOCK:
- case XBLOCK:
- PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
- PL_expect = XSTATE;
- break;
- case XATTRTERM:
- case XTERMBLOCK:
- PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
- PL_expect = XSTATE;
- break;
- default: {
- char *t;
- if (PL_oldoldbufptr == PL_last_lop)
- PL_lex_brackstack[PL_lex_brackets++] = XTERM;
- else
- PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
- s = skipspace(s);
- if (*s == '}')
- OPERATOR(HASHBRACK);
- /* This hack serves to disambiguate a pair of curlies
- * as being a block or an anon hash. Normally, expectation
- * determines that, but in cases where we're not in a
- * position to expect anything in particular (like inside
- * eval"") we have to resolve the ambiguity. This code
- * covers the case where the first term in the curlies is a
- * quoted string. Most other cases need to be explicitly
- * disambiguated by prepending a `+' before the opening
- * curly in order to force resolution as an anon hash.
- *
- * XXX should probably propagate the outer expectation
- * into eval"" to rely less on this hack, but that could
- * potentially break current behavior of eval"".
- * GSAR 97-07-21
- */
- t = s;
- if (*s == '\'' || *s == '"' || *s == '`') {
- /* common case: get past first string, handling escapes */
- for (t++; t < PL_bufend && *t != *s;)
- if (*t++ == '\\' && (*t == '\\' || *t == *s))
- t++;
- t++;
- }
- else if (*s == 'q') {
- if (++t < PL_bufend
- && (!isALNUM(*t)
- || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
- && !isALNUM(*t))))
- {
- char *tmps;
- char open, close, term;
- I32 brackets = 1;
-
- while (t < PL_bufend && isSPACE(*t))
- t++;
- term = *t;
- open = term;
- if (term && (tmps = strchr("([{< )]}> )]}>",term)))
- term = tmps[5];
- close = term;
- if (open == close)
- for (t++; t < PL_bufend; t++) {
- if (*t == '\\' && t+1 < PL_bufend && open != '\\')
- t++;
- else if (*t == open)
- break;
- }
- else
- for (t++; t < PL_bufend; t++) {
- if (*t == '\\' && t+1 < PL_bufend)
- t++;
- else if (*t == close && --brackets <= 0)
- break;
- else if (*t == open)
- brackets++;
- }
- }
- t++;
- }
- else if (isALNUM_lazy_if(t,UTF)) {
- t += UTF8SKIP(t);
- while (t < PL_bufend && isALNUM_lazy_if(t,UTF))
- t += UTF8SKIP(t);
- }
- while (t < PL_bufend && isSPACE(*t))
- t++;
- /* if comma follows first term, call it an anon hash */
- /* XXX it could be a comma expression with loop modifiers */
- if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
- || (*t == '=' && t[1] == '>')))
- OPERATOR(HASHBRACK);
- if (PL_expect == XREF)
- PL_expect = XTERM;
- else {
- PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
- PL_expect = XSTATE;
- }
- }
- break;
- }
- yylval.ival = CopLINE(PL_curcop);
- if (isSPACE(*s) || *s == '#')
- PL_copline = NOLINE; /* invalidate current command line number */
- TOKEN('{');
- case '}':
- rightbracket:
- s++;
- if (PL_lex_brackets <= 0)
- yyerror("Unmatched right curly bracket");
- else
- PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
- if (PL_lex_brackets < PL_lex_formbrack && PL_lex_state != LEX_INTERPNORMAL)
- PL_lex_formbrack = 0;
- if (PL_lex_state == LEX_INTERPNORMAL) {
- if (PL_lex_brackets == 0) {
- if (PL_expect & XFAKEBRACK) {
- PL_expect &= XENUMMASK;
- PL_lex_state = LEX_INTERPEND;
- PL_bufptr = s;
- return yylex(); /* ignore fake brackets */
- }
- if (*s == '-' && s[1] == '>')
- PL_lex_state = LEX_INTERPENDMAYBE;
- else if (*s != '[' && *s != '{')
- PL_lex_state = LEX_INTERPEND;
- }
- }
- if (PL_expect & XFAKEBRACK) {
- PL_expect &= XENUMMASK;
- PL_bufptr = s;
- return yylex(); /* ignore fake brackets */
- }
- force_next('}');
- TOKEN(';');
- case '&':
- s++;
- tmp = *s++;
- if (tmp == '&')
- AOPERATOR(ANDAND);
- s--;
- if (PL_expect == XOPERATOR) {
- if (ckWARN(WARN_SEMICOLON)
- && isIDFIRST_lazy_if(s,UTF) && PL_bufptr == PL_linestart)
- {
- CopLINE_dec(PL_curcop);
- Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
- CopLINE_inc(PL_curcop);
- }
- BAop(OP_BIT_AND);
- }
-
- s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
- if (*PL_tokenbuf) {
- PL_expect = XOPERATOR;
- force_ident(PL_tokenbuf, '&');
- }
- else
- PREREF('&');
- yylval.ival = (OPpENTERSUB_AMPER<<8);
- TERM('&');
-
- case '|':
- s++;
- tmp = *s++;
- if (tmp == '|')
- AOPERATOR(OROR);
- s--;
- BOop(OP_BIT_OR);
- case '=':
- s++;
- tmp = *s++;
- if (tmp == '=')
- Eop(OP_EQ);
- if (tmp == '>')
- OPERATOR(',');
- if (tmp == '~')
- PMop(OP_MATCH);
- if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
- Perl_warner(aTHX_ WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
- s--;
- if (PL_expect == XSTATE && isALPHA(tmp) &&
- (s == PL_linestart+1 || s[-2] == '\n') )
- {
- if (PL_in_eval && !PL_rsfp) {
- d = PL_bufend;
- while (s < d) {
- if (*s++ == '\n') {
- incline(s);
- if (strnEQ(s,"=cut",4)) {
- s = strchr(s,'\n');
- if (s)
- s++;
- else
- s = d;
- incline(s);
- goto retry;
- }
- }
- }
- goto retry;
- }
- s = PL_bufend;
- PL_doextract = TRUE;
- goto retry;
- }
- if (PL_lex_brackets < PL_lex_formbrack) {
- char *t;
-#ifdef PERL_STRICT_CR
- for (t = s; SPACE_OR_TAB(*t); t++) ;
-#else
- for (t = s; SPACE_OR_TAB(*t) || *t == '\r'; t++) ;
-#endif
- if (*t == '\n' || *t == '#') {
- s--;
- PL_expect = XBLOCK;
- goto leftbracket;
- }
- }
- yylval.ival = 0;
- OPERATOR(ASSIGNOP);
- case '!':
- s++;
- tmp = *s++;
- if (tmp == '=')
- Eop(OP_NE);
- if (tmp == '~')
- PMop(OP_NOT);
- s--;
- OPERATOR('!');
- case '<':
- if (PL_expect != XOPERATOR) {
- if (s[1] != '<' && !strchr(s,'>'))
- check_uni();
- if (s[1] == '<')
- s = scan_heredoc(s);
- else
- s = scan_inputsymbol(s);
- TERM(sublex_start());
- }
- s++;
- tmp = *s++;
- if (tmp == '<')
- SHop(OP_LEFT_SHIFT);
- if (tmp == '=') {
- tmp = *s++;
- if (tmp == '>')
- Eop(OP_NCMP);
- s--;
- Rop(OP_LE);
- }
- s--;
- Rop(OP_LT);
- case '>':
- s++;
- tmp = *s++;
- if (tmp == '>')
- SHop(OP_RIGHT_SHIFT);
- if (tmp == '=')
- Rop(OP_GE);
- s--;
- Rop(OP_GT);
-
- case '$':
- CLINE;
-
- if (PL_expect == XOPERATOR) {
- if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
- PL_expect = XTERM;
- depcom();
- return ','; /* grandfather non-comma-format format */
- }
- }
-
- if (s[1] == '#' && (isIDFIRST_lazy_if(s+2,UTF) || strchr("{$:+-", s[2]))) {
- PL_tokenbuf[0] = '@';
- s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1,
- sizeof PL_tokenbuf - 1, FALSE);
- if (PL_expect == XOPERATOR)
- no_op("Array length", s);
- if (!PL_tokenbuf[1])
- PREREF(DOLSHARP);
- PL_expect = XOPERATOR;
- PL_pending_ident = '#';
- TOKEN(DOLSHARP);
- }
-
- PL_tokenbuf[0] = '$';
- s = scan_ident(s, PL_bufend, PL_tokenbuf + 1,
- sizeof PL_tokenbuf - 1, FALSE);
- if (PL_expect == XOPERATOR)
- no_op("Scalar", s);
- if (!PL_tokenbuf[1]) {
- if (s == PL_bufend)
- yyerror("Final $ should be \\$ or $name");
- PREREF('$');
- }
-
- /* This kludge not intended to be bulletproof. */
- if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
- yylval.opval = newSVOP(OP_CONST, 0,
- newSViv(PL_compiling.cop_arybase));
- yylval.opval->op_private = OPpCONST_ARYBASE;
- TERM(THING);
- }
-
- d = s;
- tmp = (I32)*s;
- if (PL_lex_state == LEX_NORMAL)
- s = skipspace(s);
-
- if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
- char *t;
- if (*s == '[') {
- PL_tokenbuf[0] = '@';
- if (ckWARN(WARN_SYNTAX)) {
- for(t = s + 1;
- isSPACE(*t) || isALNUM_lazy_if(t,UTF) || *t == '$';
- t++) ;
- if (*t++ == ',') {
- PL_bufptr = skipspace(PL_bufptr);
- while (t < PL_bufend && *t != ']')
- t++;
- Perl_warner(aTHX_ WARN_SYNTAX,
- "Multidimensional syntax %.*s not supported",
- (t - PL_bufptr) + 1, PL_bufptr);
- }
- }
- }
- else if (*s == '{') {
- PL_tokenbuf[0] = '%';
- if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
- (t = strchr(s, '}')) && (t = strchr(t, '=')))
- {
- char tmpbuf[sizeof PL_tokenbuf];
- STRLEN len;
- for (t++; isSPACE(*t); t++) ;
- if (isIDFIRST_lazy_if(t,UTF)) {
- t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
- for (; isSPACE(*t); t++) ;
- if (*t == ';' && get_cv(tmpbuf, FALSE))
- Perl_warner(aTHX_ WARN_SYNTAX,
- "You need to quote \"%s\"", tmpbuf);
- }
- }
- }
- }
-
- PL_expect = XOPERATOR;
- if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
- bool islop = (PL_last_lop == PL_oldoldbufptr);
- if (!islop || PL_last_lop_op == OP_GREPSTART)
- PL_expect = XOPERATOR;
- else if (strchr("$@\"'`q", *s))
- PL_expect = XTERM; /* e.g. print $fh "foo" */
- else if (strchr("&*<%", *s) && isIDFIRST_lazy_if(s+1,UTF))
- PL_expect = XTERM; /* e.g. print $fh &sub */
- else if (isIDFIRST_lazy_if(s,UTF)) {
- char tmpbuf[sizeof PL_tokenbuf];
- scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
- if ((tmp = keyword(tmpbuf, len))) {
- /* binary operators exclude handle interpretations */
- switch (tmp) {
- case -KEY_x:
- case -KEY_eq:
- case -KEY_ne:
- case -KEY_gt:
- case -KEY_lt:
- case -KEY_ge:
- case -KEY_le:
- case -KEY_cmp:
- break;
- default:
- PL_expect = XTERM; /* e.g. print $fh length() */
- break;
- }
- }
- else {
- GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
- if (gv && GvCVu(gv))
- PL_expect = XTERM; /* e.g. print $fh subr() */
- }
- }
- else if (isDIGIT(*s))
- PL_expect = XTERM; /* e.g. print $fh 3 */
- else if (*s == '.' && isDIGIT(s[1]))
- PL_expect = XTERM; /* e.g. print $fh .3 */
- else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
- PL_expect = XTERM; /* e.g. print $fh -1 */
- else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
- PL_expect = XTERM; /* print $fh <<"EOF" */
- }
- PL_pending_ident = '$';
- TOKEN('$');
-
- case '@':
- if (PL_expect == XOPERATOR)
- no_op("Array", s);
- PL_tokenbuf[0] = '@';
- s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
- if (!PL_tokenbuf[1]) {
- if (s == PL_bufend)
- yyerror("Final @ should be \\@ or @name");
- PREREF('@');
- }
- if (PL_lex_state == LEX_NORMAL)
- s = skipspace(s);
- if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
- if (*s == '{')
- PL_tokenbuf[0] = '%';
-
- /* Warn about @ where they meant $. */
- if (ckWARN(WARN_SYNTAX)) {
- if (*s == '[' || *s == '{') {
- char *t = s + 1;
- while (*t && (isALNUM_lazy_if(t,UTF) || strchr(" \t$#+-'\"", *t)))
- t++;
- if (*t == '}' || *t == ']') {
- t++;
- PL_bufptr = skipspace(PL_bufptr);
- Perl_warner(aTHX_ WARN_SYNTAX,
- "Scalar value %.*s better written as $%.*s",
- t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
- }
- }
- }
- }
- PL_pending_ident = '@';
- TERM('@');
-
- case '/': /* may either be division or pattern */
- case '?': /* may either be conditional or pattern */
- if (PL_expect != XOPERATOR) {
- /* Disable warning on "study /blah/" */
- if (PL_oldoldbufptr == PL_last_uni
- && (*PL_last_uni != 's' || s - PL_last_uni < 5
- || memNE(PL_last_uni, "study", 5)
- || isALNUM_lazy_if(PL_last_uni+5,UTF)))
- check_uni();
- s = scan_pat(s,OP_MATCH);
- TERM(sublex_start());
- }
- tmp = *s++;
- if (tmp == '/')
- Mop(OP_DIVIDE);
- OPERATOR(tmp);
-
- case '.':
- if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
-#ifdef PERL_STRICT_CR
- && s[1] == '\n'
-#else
- && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
-#endif
- && (s == PL_linestart || s[-1] == '\n') )
- {
- PL_lex_formbrack = 0;
- PL_expect = XSTATE;
- goto rightbracket;
- }
- if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
- tmp = *s++;
- if (*s == tmp) {
- s++;
- if (*s == tmp) {
- s++;
- yylval.ival = OPf_SPECIAL;
- }
- else
- yylval.ival = 0;
- OPERATOR(DOTDOT);
- }
- if (PL_expect != XOPERATOR)
- check_uni();
- Aop(OP_CONCAT);
- }
- /* FALL THROUGH */
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- s = scan_num(s, &yylval);
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Saw number in '%s'\n", s);
- } )
- if (PL_expect == XOPERATOR)
- no_op("Number",s);
- TERM(THING);
-
- case '\'':
- s = scan_str(s,FALSE,FALSE);
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Saw string before '%s'\n", s);
- } )
- if (PL_expect == XOPERATOR) {
- if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
- PL_expect = XTERM;
- depcom();
- return ','; /* grandfather non-comma-format format */
- }
- else
- no_op("String",s);
- }
- if (!s)
- missingterm((char*)0);
- yylval.ival = OP_CONST;
- TERM(sublex_start());
-
- case '"':
- s = scan_str(s,FALSE,FALSE);
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Saw string before '%s'\n", s);
- } )
- if (PL_expect == XOPERATOR) {
- if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
- PL_expect = XTERM;
- depcom();
- return ','; /* grandfather non-comma-format format */
- }
- else
- no_op("String",s);
- }
- if (!s)
- missingterm((char*)0);
- yylval.ival = OP_CONST;
- for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
- if (*d == '$' || *d == '@' || *d == '\\' || UTF8_IS_CONTINUED(*d)) {
- yylval.ival = OP_STRINGIFY;
- break;
- }
- }
- TERM(sublex_start());
-
- case '`':
- s = scan_str(s,FALSE,FALSE);
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Saw backtick string before '%s'\n", s);
- } )
- if (PL_expect == XOPERATOR)
- no_op("Backticks",s);
- if (!s)
- missingterm((char*)0);
- yylval.ival = OP_BACKTICK;
- set_csh();
- TERM(sublex_start());
-
- case '\\':
- s++;
- if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
- Perl_warner(aTHX_ WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
- *s, *s);
- if (PL_expect == XOPERATOR)
- no_op("Backslash",s);
- OPERATOR(REFGEN);
-
- case 'v':
- if (isDIGIT(s[1]) && PL_expect != XOPERATOR) {
- char *start = s;
- start++;
- start++;
- while (isDIGIT(*start) || *start == '_')
- start++;
- if (*start == '.' && isDIGIT(start[1])) {
- s = scan_num(s, &yylval);
- TERM(THING);
- }
- /* avoid v123abc() or $h{v1}, allow C<print v10;> */
- else if (!isALPHA(*start) && (PL_expect == XTERM || PL_expect == XREF)) {
- char c = *start;
- GV *gv;
- *start = '\0';
- gv = gv_fetchpv(s, FALSE, SVt_PVCV);
- *start = c;
- if (!gv) {
- s = scan_num(s, &yylval);
- TERM(THING);
- }
- }
- }
- goto keylookup;
- case 'x':
- if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
- s++;
- Mop(OP_REPEAT);
- }
- goto keylookup;
-
- case '_':
- case 'a': case 'A':
- case 'b': case 'B':
- case 'c': case 'C':
- case 'd': case 'D':
- case 'e': case 'E':
- case 'f': case 'F':
- case 'g': case 'G':
- case 'h': case 'H':
- case 'i': case 'I':
- case 'j': case 'J':
- case 'k': case 'K':
- case 'l': case 'L':
- case 'm': case 'M':
- case 'n': case 'N':
- case 'o': case 'O':
- case 'p': case 'P':
- case 'q': case 'Q':
- case 'r': case 'R':
- case 's': case 'S':
- case 't': case 'T':
- case 'u': case 'U':
- case 'V':
- case 'w': case 'W':
- case 'X':
- case 'y': case 'Y':
- case 'z': case 'Z':
-
- keylookup: {
- gv = Nullgv;
- gvp = 0;
-
- PL_bufptr = s;
- s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
-
- /* Some keywords can be followed by any delimiter, including ':' */
- tmp = ((len == 1 && strchr("msyq", PL_tokenbuf[0])) ||
- (len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
- (PL_tokenbuf[0] == 'q' &&
- strchr("qwxr", PL_tokenbuf[1])))));
-
- /* x::* is just a word, unless x is "CORE" */
- if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
- goto just_a_word;
-
- d = s;
- while (d < PL_bufend && isSPACE(*d))
- d++; /* no comments skipped here, or s### is misparsed */
-
- /* Is this a label? */
- if (!tmp && PL_expect == XSTATE
- && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
- s = d + 1;
- yylval.pval = savepv(PL_tokenbuf);
- CLINE;
- TOKEN(LABEL);
- }
-
- /* Check for keywords */
- tmp = keyword(PL_tokenbuf, len);
-
- /* Is this a word before a => operator? */
- if (*d == '=' && d[1] == '>') {
- CLINE;
- yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
- yylval.opval->op_private = OPpCONST_BARE;
- if (UTF && !IN_BYTE && is_utf8_string((U8*)PL_tokenbuf, len))
- SvUTF8_on(((SVOP*)yylval.opval)->op_sv);
- TERM(WORD);
- }
-
- if (tmp < 0) { /* second-class keyword? */
- GV *ogv = Nullgv; /* override (winner) */
- GV *hgv = Nullgv; /* hidden (loser) */
- if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
- CV *cv;
- if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
- (cv = GvCVu(gv)))
- {
- if (GvIMPORTED_CV(gv))
- ogv = gv;
- else if (! CvMETHOD(cv))
- hgv = gv;
- }
- if (!ogv &&
- (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
- (gv = *gvp) != (GV*)&PL_sv_undef &&
- GvCVu(gv) && GvIMPORTED_CV(gv))
- {
- ogv = gv;
- }
- }
- if (ogv) {
- tmp = 0; /* overridden by import or by GLOBAL */
- }
- else if (gv && !gvp
- && -tmp==KEY_lock /* XXX generalizable kludge */
- && GvCVu(gv)
- && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
- {
- tmp = 0; /* any sub overrides "weak" keyword */
- }
- else { /* no override */
- tmp = -tmp;
- gv = Nullgv;
- gvp = 0;
- if (ckWARN(WARN_AMBIGUOUS) && hgv
- && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
- Perl_warner(aTHX_ WARN_AMBIGUOUS,
- "Ambiguous call resolved as CORE::%s(), %s",
- GvENAME(hgv), "qualify as such or use &");
- }
- }
-
- reserved_word:
- switch (tmp) {
-
- default: /* not a keyword */
- just_a_word: {
- SV *sv;
- char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
-
- /* Get the rest if it looks like a package qualifier */
-
- if (*s == '\'' || (*s == ':' && s[1] == ':')) {
- STRLEN morelen;
- s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
- TRUE, &morelen);
- if (!morelen)
- Perl_croak(aTHX_ "Bad name after %s%s", PL_tokenbuf,
- *s == '\'' ? "'" : "::");
- len += morelen;
- }
-
- if (PL_expect == XOPERATOR) {
- if (PL_bufptr == PL_linestart) {
- CopLINE_dec(PL_curcop);
- Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
- CopLINE_inc(PL_curcop);
- }
- else
- no_op("Bareword",s);
- }
-
- /* Look for a subroutine with this name in current package,
- unless name is "Foo::", in which case Foo is a bearword
- (and a package name). */
-
- if (len > 2 &&
- PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
- {
- if (ckWARN(WARN_BAREWORD) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
- Perl_warner(aTHX_ WARN_BAREWORD,
- "Bareword \"%s\" refers to nonexistent package",
- PL_tokenbuf);
- len -= 2;
- PL_tokenbuf[len] = '\0';
- gv = Nullgv;
- gvp = 0;
- }
- else {
- len = 0;
- if (!gv)
- gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
- }
-
- /* if we saw a global override before, get the right name */
-
- if (gvp) {
- sv = newSVpvn("CORE::GLOBAL::",14);
- sv_catpv(sv,PL_tokenbuf);
- }
- else
- sv = newSVpv(PL_tokenbuf,0);
-
- /* Presume this is going to be a bareword of some sort. */
-
- CLINE;
- yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
- yylval.opval->op_private = OPpCONST_BARE;
-
- /* And if "Foo::", then that's what it certainly is. */
-
- if (len)
- goto safe_bareword;
-
- /* See if it's the indirect object for a list operator. */
-
- if (PL_oldoldbufptr &&
- PL_oldoldbufptr < PL_bufptr &&
- (PL_oldoldbufptr == PL_last_lop
- || PL_oldoldbufptr == PL_last_uni) &&
- /* NO SKIPSPACE BEFORE HERE! */
- (PL_expect == XREF ||
- ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
- {
- bool immediate_paren = *s == '(';
-
- /* (Now we can afford to cross potential line boundary.) */
- s = skipspace(s);
-
- /* Two barewords in a row may indicate method call. */
-
- if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') && (tmp=intuit_method(s,gv)))
- return tmp;
-
- /* If not a declared subroutine, it's an indirect object. */
- /* (But it's an indir obj regardless for sort.) */
-
- if ((PL_last_lop_op == OP_SORT ||
- (!immediate_paren && (!gv || !GvCVu(gv)))) &&
- (PL_last_lop_op != OP_MAPSTART &&
- PL_last_lop_op != OP_GREPSTART))
- {
- PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
- goto bareword;
- }
- }
-
-
- PL_expect = XOPERATOR;
- s = skipspace(s);
-
- /* Is this a word before a => operator? */
- if (*s == '=' && s[1] == '>') {
- CLINE;
- sv_setpv(((SVOP*)yylval.opval)->op_sv, PL_tokenbuf);
- if (UTF && !IN_BYTE && is_utf8_string((U8*)PL_tokenbuf, len))
- SvUTF8_on(((SVOP*)yylval.opval)->op_sv);
- TERM(WORD);
- }
-
- /* If followed by a paren, it's certainly a subroutine. */
- if (*s == '(') {
- CLINE;
- if (gv && GvCVu(gv)) {
- for (d = s + 1; SPACE_OR_TAB(*d); d++) ;
- if (*d == ')' && (sv = cv_const_sv(GvCV(gv)))) {
- s = d + 1;
- goto its_constant;
- }
- }
- PL_nextval[PL_nexttoke].opval = yylval.opval;
- PL_expect = XOPERATOR;
- force_next(WORD);
- yylval.ival = 0;
- TOKEN('&');
- }
-
- /* If followed by var or block, call it a method (unless sub) */
-
- if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
- PL_last_lop = PL_oldbufptr;
- PL_last_lop_op = OP_METHOD;
- PREBLOCK(METHOD);
- }
-
- /* If followed by a bareword, see if it looks like indir obj. */
-
- if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') && (tmp = intuit_method(s,gv)))
- return tmp;
-
- /* Not a method, so call it a subroutine (if defined) */
-
- if (gv && GvCVu(gv)) {
- CV* cv;
- if (lastchar == '-' && ckWARN_d(WARN_AMBIGUOUS))
- Perl_warner(aTHX_ WARN_AMBIGUOUS,
- "Ambiguous use of -%s resolved as -&%s()",
- PL_tokenbuf, PL_tokenbuf);
- /* Check for a constant sub */
- cv = GvCV(gv);
- if ((sv = cv_const_sv(cv))) {
- its_constant:
- SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
- ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
- yylval.opval->op_private = 0;
- TOKEN(WORD);
- }
-
- /* Resolve to GV now. */
- op_free(yylval.opval);
- yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
- yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
- PL_last_lop = PL_oldbufptr;
- PL_last_lop_op = OP_ENTERSUB;
- /* Is there a prototype? */
- if (SvPOK(cv)) {
- STRLEN len;
- char *proto = SvPV((SV*)cv, len);
- if (!len)
- TERM(FUNC0SUB);
- if (strEQ(proto, "$"))
- OPERATOR(UNIOPSUB);
- if (*proto == '&' && *s == '{') {
- sv_setpv(PL_subname,"__ANON__");
- PREBLOCK(LSTOPSUB);
- }
- }
- PL_nextval[PL_nexttoke].opval = yylval.opval;
- PL_expect = XTERM;
- force_next(WORD);
- TOKEN(NOAMP);
- }
-
- /* Call it a bare word */
-
- if (PL_hints & HINT_STRICT_SUBS)
- yylval.opval->op_private |= OPpCONST_STRICT;
- else {
- bareword:
- if (ckWARN(WARN_RESERVED)) {
- if (lastchar != '-') {
- for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
- if (!*d)
- Perl_warner(aTHX_ WARN_RESERVED, PL_warn_reserved,
- PL_tokenbuf);
- }
- }
- }
-
- safe_bareword:
- if (lastchar && strchr("*%&", lastchar) && ckWARN_d(WARN_AMBIGUOUS)) {
- Perl_warner(aTHX_ WARN_AMBIGUOUS,
- "Operator or semicolon missing before %c%s",
- lastchar, PL_tokenbuf);
- Perl_warner(aTHX_ WARN_AMBIGUOUS,
- "Ambiguous use of %c resolved as operator %c",
- lastchar, lastchar);
- }
- TOKEN(WORD);
- }
-
- case KEY___FILE__:
- yylval.opval = (OP*)newSVOP(OP_CONST, 0,
- newSVpv(CopFILE(PL_curcop),0));
- TERM(THING);
-
- case KEY___LINE__:
- yylval.opval = (OP*)newSVOP(OP_CONST, 0,
- Perl_newSVpvf(aTHX_ "%"IVdf, (IV)CopLINE(PL_curcop)));
- TERM(THING);
-
- case KEY___PACKAGE__:
- yylval.opval = (OP*)newSVOP(OP_CONST, 0,
- (PL_curstash
- ? newSVsv(PL_curstname)
- : &PL_sv_undef));
- TERM(THING);
-
- case KEY___DATA__:
- case KEY___END__: {
- GV *gv;
-
- /*SUPPRESS 560*/
- if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
- char *pname = "main";
- if (PL_tokenbuf[2] == 'D')
- pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
- gv = gv_fetchpv(Perl_form(aTHX_ "%s::DATA", pname), TRUE, SVt_PVIO);
- GvMULTI_on(gv);
- if (!GvIO(gv))
- GvIOp(gv) = newIO();
- IoIFP(GvIOp(gv)) = PL_rsfp;
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- {
- int fd = PerlIO_fileno(PL_rsfp);
- fcntl(fd,F_SETFD,fd >= 3);
- }
-#endif
- /* Mark this internal pseudo-handle as clean */
- IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
- if (PL_preprocess)
- IoTYPE(GvIOp(gv)) = IoTYPE_PIPE;
- else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
- IoTYPE(GvIOp(gv)) = IoTYPE_STD;
- else
- IoTYPE(GvIOp(gv)) = IoTYPE_RDONLY;
-#if defined(WIN32) && !defined(PERL_TEXTMODE_SCRIPTS)
- /* if the script was opened in binmode, we need to revert
- * it to text mode for compatibility; but only iff it has CRs
- * XXX this is a questionable hack at best. */
- if (PL_bufend-PL_bufptr > 2
- && PL_bufend[-1] == '\n' && PL_bufend[-2] == '\r')
- {
- Off_t loc = 0;
- if (IoTYPE(GvIOp(gv)) == IoTYPE_RDONLY) {
- loc = PerlIO_tell(PL_rsfp);
- (void)PerlIO_seek(PL_rsfp, 0L, 0);
- }
- if (PerlLIO_setmode(PerlIO_fileno(PL_rsfp), O_TEXT) != -1) {
-#if defined(__BORLANDC__)
- /* XXX see note in do_binmode() */
- ((FILE*)PL_rsfp)->flags &= ~_F_BIN;
-#endif
- if (loc > 0)
- PerlIO_seek(PL_rsfp, loc, 0);
- }
- }
-#endif
- PL_rsfp = Nullfp;
- }
- goto fake_eof;
- }
-
- case KEY_AUTOLOAD:
- case KEY_DESTROY:
- case KEY_BEGIN:
- case KEY_CHECK:
- case KEY_INIT:
- case KEY_END:
- if (PL_expect == XSTATE) {
- s = PL_bufptr;
- goto really_sub;
- }
- goto just_a_word;
-
- case KEY_CORE:
- if (*s == ':' && s[1] == ':') {
- s += 2;
- d = s;
- s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
- if (!(tmp = keyword(PL_tokenbuf, len)))
- Perl_croak(aTHX_ "CORE::%s is not a keyword", PL_tokenbuf);
- if (tmp < 0)
- tmp = -tmp;
- goto reserved_word;
- }
- goto just_a_word;
-
- case KEY_abs:
- UNI(OP_ABS);
-
- case KEY_alarm:
- UNI(OP_ALARM);
-
- case KEY_accept:
- LOP(OP_ACCEPT,XTERM);
-
- case KEY_and:
- OPERATOR(ANDOP);
-
- case KEY_atan2:
- LOP(OP_ATAN2,XTERM);
-
- case KEY_bind:
- LOP(OP_BIND,XTERM);
-
- case KEY_binmode:
- LOP(OP_BINMODE,XTERM);
-
- case KEY_bless:
- LOP(OP_BLESS,XTERM);
-
- case KEY_chop:
- UNI(OP_CHOP);
-
- case KEY_continue:
- PREBLOCK(CONTINUE);
-
- case KEY_chdir:
- (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
- UNI(OP_CHDIR);
-
- case KEY_close:
- UNI(OP_CLOSE);
-
- case KEY_closedir:
- UNI(OP_CLOSEDIR);
-
- case KEY_cmp:
- Eop(OP_SCMP);
-
- case KEY_caller:
- UNI(OP_CALLER);
-
- case KEY_crypt:
-#ifdef FCRYPT
- if (!PL_cryptseen) {
- PL_cryptseen = TRUE;
- init_des();
- }
-#endif
- LOP(OP_CRYPT,XTERM);
-
- case KEY_chmod:
- if (ckWARN(WARN_CHMOD)) {
- for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
- if (*d != '0' && isDIGIT(*d))
- Perl_warner(aTHX_ WARN_CHMOD,
- "chmod() mode argument is missing initial 0");
- }
- LOP(OP_CHMOD,XTERM);
-
- case KEY_chown:
- LOP(OP_CHOWN,XTERM);
-
- case KEY_connect:
- LOP(OP_CONNECT,XTERM);
-
- case KEY_chr:
- UNI(OP_CHR);
-
- case KEY_cos:
- UNI(OP_COS);
-
- case KEY_chroot:
- UNI(OP_CHROOT);
-
- case KEY_do:
- s = skipspace(s);
- if (*s == '{')
- PRETERMBLOCK(DO);
- if (*s != '\'')
- s = force_word(s,WORD,FALSE,TRUE,FALSE);
- OPERATOR(DO);
-
- case KEY_die:
- PL_hints |= HINT_BLOCK_SCOPE;
- LOP(OP_DIE,XTERM);
-
- case KEY_defined:
- UNI(OP_DEFINED);
-
- case KEY_delete:
- UNI(OP_DELETE);
-
- case KEY_dbmopen:
- gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
- LOP(OP_DBMOPEN,XTERM);
-
- case KEY_dbmclose:
- UNI(OP_DBMCLOSE);
-
- case KEY_dump:
- s = force_word(s,WORD,TRUE,FALSE,FALSE);
- LOOPX(OP_DUMP);
-
- case KEY_else:
- PREBLOCK(ELSE);
-
- case KEY_elsif:
- yylval.ival = CopLINE(PL_curcop);
- OPERATOR(ELSIF);
-
- case KEY_eq:
- Eop(OP_SEQ);
-
- case KEY_exists:
- UNI(OP_EXISTS);
-
- case KEY_exit:
- UNI(OP_EXIT);
-
- case KEY_eval:
- s = skipspace(s);
- PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
- UNIBRACK(OP_ENTEREVAL);
-
- case KEY_eof:
- UNI(OP_EOF);
-
- case KEY_exp:
- UNI(OP_EXP);
-
- case KEY_each:
- UNI(OP_EACH);
-
- case KEY_exec:
- set_csh();
- LOP(OP_EXEC,XREF);
-
- case KEY_endhostent:
- FUN0(OP_EHOSTENT);
-
- case KEY_endnetent:
- FUN0(OP_ENETENT);
-
- case KEY_endservent:
- FUN0(OP_ESERVENT);
-
- case KEY_endprotoent:
- FUN0(OP_EPROTOENT);
-
- case KEY_endpwent:
- FUN0(OP_EPWENT);
-
- case KEY_endgrent:
- FUN0(OP_EGRENT);
-
- case KEY_for:
- case KEY_foreach:
- yylval.ival = CopLINE(PL_curcop);
- s = skipspace(s);
- if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
- char *p = s;
- if ((PL_bufend - p) >= 3 &&
- strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
- p += 2;
- else if ((PL_bufend - p) >= 4 &&
- strnEQ(p, "our", 3) && isSPACE(*(p + 3)))
- p += 3;
- p = skipspace(p);
- if (isIDFIRST_lazy_if(p,UTF)) {
- p = scan_ident(p, PL_bufend,
- PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
- p = skipspace(p);
- }
- if (*p != '$')
- Perl_croak(aTHX_ "Missing $ on loop variable");
- }
- OPERATOR(FOR);
-
- case KEY_formline:
- LOP(OP_FORMLINE,XTERM);
-
- case KEY_fork:
- FUN0(OP_FORK);
-
- case KEY_fcntl:
- LOP(OP_FCNTL,XTERM);
-
- case KEY_fileno:
- UNI(OP_FILENO);
-
- case KEY_flock:
- LOP(OP_FLOCK,XTERM);
-
- case KEY_gt:
- Rop(OP_SGT);
-
- case KEY_ge:
- Rop(OP_SGE);
-
- case KEY_grep:
- LOP(OP_GREPSTART, XREF);
-
- case KEY_goto:
- s = force_word(s,WORD,TRUE,FALSE,FALSE);
- LOOPX(OP_GOTO);
-
- case KEY_gmtime:
- UNI(OP_GMTIME);
-
- case KEY_getc:
- UNI(OP_GETC);
-
- case KEY_getppid:
- FUN0(OP_GETPPID);
-
- case KEY_getpgrp:
- UNI(OP_GETPGRP);
-
- case KEY_getpriority:
- LOP(OP_GETPRIORITY,XTERM);
-
- case KEY_getprotobyname:
- UNI(OP_GPBYNAME);
-
- case KEY_getprotobynumber:
- LOP(OP_GPBYNUMBER,XTERM);
-
- case KEY_getprotoent:
- FUN0(OP_GPROTOENT);
-
- case KEY_getpwent:
- FUN0(OP_GPWENT);
-
- case KEY_getpwnam:
- UNI(OP_GPWNAM);
-
- case KEY_getpwuid:
- UNI(OP_GPWUID);
-
- case KEY_getpeername:
- UNI(OP_GETPEERNAME);
-
- case KEY_gethostbyname:
- UNI(OP_GHBYNAME);
-
- case KEY_gethostbyaddr:
- LOP(OP_GHBYADDR,XTERM);
-
- case KEY_gethostent:
- FUN0(OP_GHOSTENT);
-
- case KEY_getnetbyname:
- UNI(OP_GNBYNAME);
-
- case KEY_getnetbyaddr:
- LOP(OP_GNBYADDR,XTERM);
-
- case KEY_getnetent:
- FUN0(OP_GNETENT);
-
- case KEY_getservbyname:
- LOP(OP_GSBYNAME,XTERM);
-
- case KEY_getservbyport:
- LOP(OP_GSBYPORT,XTERM);
-
- case KEY_getservent:
- FUN0(OP_GSERVENT);
-
- case KEY_getsockname:
- UNI(OP_GETSOCKNAME);
-
- case KEY_getsockopt:
- LOP(OP_GSOCKOPT,XTERM);
-
- case KEY_getgrent:
- FUN0(OP_GGRENT);
-
- case KEY_getgrnam:
- UNI(OP_GGRNAM);
-
- case KEY_getgrgid:
- UNI(OP_GGRGID);
-
- case KEY_getlogin:
- FUN0(OP_GETLOGIN);
-
- case KEY_glob:
- set_csh();
- LOP(OP_GLOB,XTERM);
-
- case KEY_hex:
- UNI(OP_HEX);
-
- case KEY_if:
- yylval.ival = CopLINE(PL_curcop);
- OPERATOR(IF);
-
- case KEY_index:
- LOP(OP_INDEX,XTERM);
-
- case KEY_int:
- UNI(OP_INT);
-
- case KEY_ioctl:
- LOP(OP_IOCTL,XTERM);
-
- case KEY_join:
- LOP(OP_JOIN,XTERM);
-
- case KEY_keys:
- UNI(OP_KEYS);
-
- case KEY_kill:
- LOP(OP_KILL,XTERM);
-
- case KEY_last:
- s = force_word(s,WORD,TRUE,FALSE,FALSE);
- LOOPX(OP_LAST);
-
- case KEY_lc:
- UNI(OP_LC);
-
- case KEY_lcfirst:
- UNI(OP_LCFIRST);
-
- case KEY_local:
- yylval.ival = 0;
- OPERATOR(LOCAL);
-
- case KEY_length:
- UNI(OP_LENGTH);
-
- case KEY_lt:
- Rop(OP_SLT);
-
- case KEY_le:
- Rop(OP_SLE);
-
- case KEY_localtime:
- UNI(OP_LOCALTIME);
-
- case KEY_log:
- UNI(OP_LOG);
-
- case KEY_link:
- LOP(OP_LINK,XTERM);
-
- case KEY_listen:
- LOP(OP_LISTEN,XTERM);
-
- case KEY_lock:
- UNI(OP_LOCK);
-
- case KEY_lstat:
- UNI(OP_LSTAT);
-
- case KEY_m:
- s = scan_pat(s,OP_MATCH);
- TERM(sublex_start());
-
- case KEY_map:
- LOP(OP_MAPSTART, XREF);
-
- case KEY_mkdir:
- LOP(OP_MKDIR,XTERM);
-
- case KEY_msgctl:
- LOP(OP_MSGCTL,XTERM);
-
- case KEY_msgget:
- LOP(OP_MSGGET,XTERM);
-
- case KEY_msgrcv:
- LOP(OP_MSGRCV,XTERM);
-
- case KEY_msgsnd:
- LOP(OP_MSGSND,XTERM);
-
- case KEY_our:
- case KEY_my:
- PL_in_my = tmp;
- s = skipspace(s);
- if (isIDFIRST_lazy_if(s,UTF)) {
- s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
- if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3))
- goto really_sub;
- PL_in_my_stash = find_in_my_stash(PL_tokenbuf, len);
- if (!PL_in_my_stash) {
- char tmpbuf[1024];
- PL_bufptr = s;
- sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
- yyerror(tmpbuf);
- }
- }
- yylval.ival = 1;
- OPERATOR(MY);
-
- case KEY_next:
- s = force_word(s,WORD,TRUE,FALSE,FALSE);
- LOOPX(OP_NEXT);
-
- case KEY_ne:
- Eop(OP_SNE);
-
- case KEY_no:
- if (PL_expect != XSTATE)
- yyerror("\"no\" not allowed in expression");
- s = force_word(s,WORD,FALSE,TRUE,FALSE);
- s = force_version(s);
- yylval.ival = 0;
- OPERATOR(USE);
-
- case KEY_not:
- if (*s == '(' || (s = skipspace(s), *s == '('))
- FUN1(OP_NOT);
- else
- OPERATOR(NOTOP);
-
- case KEY_open:
- s = skipspace(s);
- if (isIDFIRST_lazy_if(s,UTF)) {
- char *t;
- for (d = s; isALNUM_lazy_if(d,UTF); d++) ;
- t = skipspace(d);
- if (strchr("|&*+-=!?:.", *t) && ckWARN_d(WARN_PRECEDENCE))
- Perl_warner(aTHX_ WARN_PRECEDENCE,
- "Precedence problem: open %.*s should be open(%.*s)",
- d-s,s, d-s,s);
- }
- LOP(OP_OPEN,XTERM);
-
- case KEY_or:
- yylval.ival = OP_OR;
- OPERATOR(OROP);
-
- case KEY_ord:
- UNI(OP_ORD);
-
- case KEY_oct:
- UNI(OP_OCT);
-
- case KEY_opendir:
- LOP(OP_OPEN_DIR,XTERM);
-
- case KEY_print:
- checkcomma(s,PL_tokenbuf,"filehandle");
- LOP(OP_PRINT,XREF);
-
- case KEY_printf:
- checkcomma(s,PL_tokenbuf,"filehandle");
- LOP(OP_PRTF,XREF);
-
- case KEY_prototype:
- UNI(OP_PROTOTYPE);
-
- case KEY_push:
- LOP(OP_PUSH,XTERM);
-
- case KEY_pop:
- UNI(OP_POP);
-
- case KEY_pos:
- UNI(OP_POS);
-
- case KEY_pack:
- LOP(OP_PACK,XTERM);
-
- case KEY_package:
- s = force_word(s,WORD,FALSE,TRUE,FALSE);
- OPERATOR(PACKAGE);
-
- case KEY_pipe:
- LOP(OP_PIPE_OP,XTERM);
-
- case KEY_q:
- s = scan_str(s,FALSE,FALSE);
- if (!s)
- missingterm((char*)0);
- yylval.ival = OP_CONST;
- TERM(sublex_start());
-
- case KEY_quotemeta:
- UNI(OP_QUOTEMETA);
-
- case KEY_qw:
- s = scan_str(s,FALSE,FALSE);
- if (!s)
- missingterm((char*)0);
- force_next(')');
- if (SvCUR(PL_lex_stuff)) {
- OP *words = Nullop;
- int warned = 0;
- d = SvPV_force(PL_lex_stuff, len);
- while (len) {
- SV *sv;
- for (; isSPACE(*d) && len; --len, ++d) ;
- if (len) {
- char *b = d;
- if (!warned && ckWARN(WARN_QW)) {
- for (; !isSPACE(*d) && len; --len, ++d) {
- if (*d == ',') {
- Perl_warner(aTHX_ WARN_QW,
- "Possible attempt to separate words with commas");
- ++warned;
- }
- else if (*d == '#') {
- Perl_warner(aTHX_ WARN_QW,
- "Possible attempt to put comments in qw() list");
- ++warned;
- }
- }
- }
- else {
- for (; !isSPACE(*d) && len; --len, ++d) ;
- }
- sv = newSVpvn(b, d-b);
- if (DO_UTF8(PL_lex_stuff))
- SvUTF8_on(sv);
- words = append_elem(OP_LIST, words,
- newSVOP(OP_CONST, 0, tokeq(sv)));
- }
- }
- if (words) {
- PL_nextval[PL_nexttoke].opval = words;
- force_next(THING);
- }
- }
- if (PL_lex_stuff) {
- SvREFCNT_dec(PL_lex_stuff);
- PL_lex_stuff = Nullsv;
- }
- PL_expect = XTERM;
- TOKEN('(');
-
- case KEY_qq:
- s = scan_str(s,FALSE,FALSE);
- if (!s)
- missingterm((char*)0);
- yylval.ival = OP_STRINGIFY;
- if (SvIVX(PL_lex_stuff) == '\'')
- SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
- TERM(sublex_start());
-
- case KEY_qr:
- s = scan_pat(s,OP_QR);
- TERM(sublex_start());
-
- case KEY_qx:
- s = scan_str(s,FALSE,FALSE);
- if (!s)
- missingterm((char*)0);
- yylval.ival = OP_BACKTICK;
- set_csh();
- TERM(sublex_start());
-
- case KEY_return:
- OLDLOP(OP_RETURN);
-
- case KEY_require:
- s = skipspace(s);
- if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
- s = force_version(s);
- }
- else {
- *PL_tokenbuf = '\0';
- s = force_word(s,WORD,TRUE,TRUE,FALSE);
- if (isIDFIRST_lazy_if(PL_tokenbuf,UTF))
- gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
- else if (*s == '<')
- yyerror("<> should be quotes");
- }
- UNI(OP_REQUIRE);
-
- case KEY_reset:
- UNI(OP_RESET);
-
- case KEY_redo:
- s = force_word(s,WORD,TRUE,FALSE,FALSE);
- LOOPX(OP_REDO);
-
- case KEY_rename:
- LOP(OP_RENAME,XTERM);
-
- case KEY_rand:
- UNI(OP_RAND);
-
- case KEY_rmdir:
- UNI(OP_RMDIR);
-
- case KEY_rindex:
- LOP(OP_RINDEX,XTERM);
-
- case KEY_read:
- LOP(OP_READ,XTERM);
-
- case KEY_readdir:
- UNI(OP_READDIR);
-
- case KEY_readline:
- set_csh();
- UNI(OP_READLINE);
-
- case KEY_readpipe:
- set_csh();
- UNI(OP_BACKTICK);
-
- case KEY_rewinddir:
- UNI(OP_REWINDDIR);
-
- case KEY_recv:
- LOP(OP_RECV,XTERM);
-
- case KEY_reverse:
- LOP(OP_REVERSE,XTERM);
-
- case KEY_readlink:
- UNI(OP_READLINK);
-
- case KEY_ref:
- UNI(OP_REF);
-
- case KEY_s:
- s = scan_subst(s);
- if (yylval.opval)
- TERM(sublex_start());
- else
- TOKEN(1); /* force error */
-
- case KEY_chomp:
- UNI(OP_CHOMP);
-
- case KEY_scalar:
- UNI(OP_SCALAR);
-
- case KEY_select:
- LOP(OP_SELECT,XTERM);
-
- case KEY_seek:
- LOP(OP_SEEK,XTERM);
-
- case KEY_semctl:
- LOP(OP_SEMCTL,XTERM);
-
- case KEY_semget:
- LOP(OP_SEMGET,XTERM);
-
- case KEY_semop:
- LOP(OP_SEMOP,XTERM);
-
- case KEY_send:
- LOP(OP_SEND,XTERM);
-
- case KEY_setpgrp:
- LOP(OP_SETPGRP,XTERM);
-
- case KEY_setpriority:
- LOP(OP_SETPRIORITY,XTERM);
-
- case KEY_sethostent:
- UNI(OP_SHOSTENT);
-
- case KEY_setnetent:
- UNI(OP_SNETENT);
-
- case KEY_setservent:
- UNI(OP_SSERVENT);
-
- case KEY_setprotoent:
- UNI(OP_SPROTOENT);
-
- case KEY_setpwent:
- FUN0(OP_SPWENT);
-
- case KEY_setgrent:
- FUN0(OP_SGRENT);
-
- case KEY_seekdir:
- LOP(OP_SEEKDIR,XTERM);
-
- case KEY_setsockopt:
- LOP(OP_SSOCKOPT,XTERM);
-
- case KEY_shift:
- UNI(OP_SHIFT);
-
- case KEY_shmctl:
- LOP(OP_SHMCTL,XTERM);
-
- case KEY_shmget:
- LOP(OP_SHMGET,XTERM);
-
- case KEY_shmread:
- LOP(OP_SHMREAD,XTERM);
-
- case KEY_shmwrite:
- LOP(OP_SHMWRITE,XTERM);
-
- case KEY_shutdown:
- LOP(OP_SHUTDOWN,XTERM);
-
- case KEY_sin:
- UNI(OP_SIN);
-
- case KEY_sleep:
- UNI(OP_SLEEP);
-
- case KEY_socket:
- LOP(OP_SOCKET,XTERM);
-
- case KEY_socketpair:
- LOP(OP_SOCKPAIR,XTERM);
-
- case KEY_sort:
- checkcomma(s,PL_tokenbuf,"subroutine name");
- s = skipspace(s);
- if (*s == ';' || *s == ')') /* probably a close */
- Perl_croak(aTHX_ "sort is now a reserved word");
- PL_expect = XTERM;
- s = force_word(s,WORD,TRUE,TRUE,FALSE);
- LOP(OP_SORT,XREF);
-
- case KEY_split:
- LOP(OP_SPLIT,XTERM);
-
- case KEY_sprintf:
- LOP(OP_SPRINTF,XTERM);
-
- case KEY_splice:
- LOP(OP_SPLICE,XTERM);
-
- case KEY_sqrt:
- UNI(OP_SQRT);
-
- case KEY_srand:
- UNI(OP_SRAND);
-
- case KEY_stat:
- UNI(OP_STAT);
-
- case KEY_study:
- UNI(OP_STUDY);
-
- case KEY_substr:
- LOP(OP_SUBSTR,XTERM);
-
- case KEY_format:
- case KEY_sub:
- really_sub:
- {
- char tmpbuf[sizeof PL_tokenbuf];
- SSize_t tboffset;
- expectation attrful;
- bool have_name, have_proto;
- int key = tmp;
-
- s = skipspace(s);
-
- if (isIDFIRST_lazy_if(s,UTF) || *s == '\'' ||
- (*s == ':' && s[1] == ':'))
- {
- PL_expect = XBLOCK;
- attrful = XATTRBLOCK;
- /* remember buffer pos'n for later force_word */
- tboffset = s - PL_oldbufptr;
- d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
- if (strchr(tmpbuf, ':'))
- sv_setpv(PL_subname, tmpbuf);
- else {
- sv_setsv(PL_subname,PL_curstname);
- sv_catpvn(PL_subname,"::",2);
- sv_catpvn(PL_subname,tmpbuf,len);
- }
- s = skipspace(d);
- have_name = TRUE;
- }
- else {
- if (key == KEY_my)
- Perl_croak(aTHX_ "Missing name in \"my sub\"");
- PL_expect = XTERMBLOCK;
- attrful = XATTRTERM;
- sv_setpv(PL_subname,"?");
- have_name = FALSE;
- }
-
- if (key == KEY_format) {
- if (*s == '=')
- PL_lex_formbrack = PL_lex_brackets + 1;
- if (have_name)
- (void) force_word(PL_oldbufptr + tboffset, WORD,
- FALSE, TRUE, TRUE);
- OPERATOR(FORMAT);
- }
-
- /* Look for a prototype */
- if (*s == '(') {
- char *p;
-
- s = scan_str(s,FALSE,FALSE);
- if (!s)
- Perl_croak(aTHX_ "Prototype not terminated");
- /* strip spaces */
- d = SvPVX(PL_lex_stuff);
- tmp = 0;
- for (p = d; *p; ++p) {
- if (!isSPACE(*p))
- d[tmp++] = *p;
- }
- d[tmp] = '\0';
- SvCUR(PL_lex_stuff) = tmp;
- have_proto = TRUE;
-
- s = skipspace(s);
- }
- else
- have_proto = FALSE;
-
- if (*s == ':' && s[1] != ':')
- PL_expect = attrful;
-
- if (have_proto) {
- PL_nextval[PL_nexttoke].opval =
- (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
- PL_lex_stuff = Nullsv;
- force_next(THING);
- }
- if (!have_name) {
- sv_setpv(PL_subname,"__ANON__");
- TOKEN(ANONSUB);
- }
- (void) force_word(PL_oldbufptr + tboffset, WORD,
- FALSE, TRUE, TRUE);
- if (key == KEY_my)
- TOKEN(MYSUB);
- TOKEN(SUB);
- }
-
- case KEY_system:
- set_csh();
- LOP(OP_SYSTEM,XREF);
-
- case KEY_symlink:
- LOP(OP_SYMLINK,XTERM);
-
- case KEY_syscall:
- LOP(OP_SYSCALL,XTERM);
-
- case KEY_sysopen:
- LOP(OP_SYSOPEN,XTERM);
-
- case KEY_sysseek:
- LOP(OP_SYSSEEK,XTERM);
-
- case KEY_sysread:
- LOP(OP_SYSREAD,XTERM);
-
- case KEY_syswrite:
- LOP(OP_SYSWRITE,XTERM);
-
- case KEY_tr:
- s = scan_trans(s);
- TERM(sublex_start());
-
- case KEY_tell:
- UNI(OP_TELL);
-
- case KEY_telldir:
- UNI(OP_TELLDIR);
-
- case KEY_tie:
- LOP(OP_TIE,XTERM);
-
- case KEY_tied:
- UNI(OP_TIED);
-
- case KEY_time:
- FUN0(OP_TIME);
-
- case KEY_times:
- FUN0(OP_TMS);
-
- case KEY_truncate:
- LOP(OP_TRUNCATE,XTERM);
-
- case KEY_uc:
- UNI(OP_UC);
-
- case KEY_ucfirst:
- UNI(OP_UCFIRST);
-
- case KEY_untie:
- UNI(OP_UNTIE);
-
- case KEY_until:
- yylval.ival = CopLINE(PL_curcop);
- OPERATOR(UNTIL);
-
- case KEY_unless:
- yylval.ival = CopLINE(PL_curcop);
- OPERATOR(UNLESS);
-
- case KEY_unlink:
- LOP(OP_UNLINK,XTERM);
-
- case KEY_undef:
- UNI(OP_UNDEF);
-
- case KEY_unpack:
- LOP(OP_UNPACK,XTERM);
-
- case KEY_utime:
- LOP(OP_UTIME,XTERM);
-
- case KEY_umask:
- if (ckWARN(WARN_UMASK)) {
- for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
- if (*d != '0' && isDIGIT(*d))
- Perl_warner(aTHX_ WARN_UMASK,
- "umask: argument is missing initial 0");
- }
- UNI(OP_UMASK);
-
- case KEY_unshift:
- LOP(OP_UNSHIFT,XTERM);
-
- case KEY_use:
- if (PL_expect != XSTATE)
- yyerror("\"use\" not allowed in expression");
- s = skipspace(s);
- if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
- s = force_version(s);
- if (*s == ';' || (s = skipspace(s), *s == ';')) {
- PL_nextval[PL_nexttoke].opval = Nullop;
- force_next(WORD);
- }
- }
- else {
- s = force_word(s,WORD,FALSE,TRUE,FALSE);
- s = force_version(s);
- }
- yylval.ival = 1;
- OPERATOR(USE);
-
- case KEY_values:
- UNI(OP_VALUES);
-
- case KEY_vec:
- LOP(OP_VEC,XTERM);
-
- case KEY_while:
- yylval.ival = CopLINE(PL_curcop);
- OPERATOR(WHILE);
-
- case KEY_warn:
- PL_hints |= HINT_BLOCK_SCOPE;
- LOP(OP_WARN,XTERM);
-
- case KEY_wait:
- FUN0(OP_WAIT);
-
- case KEY_waitpid:
- LOP(OP_WAITPID,XTERM);
-
- case KEY_wantarray:
- FUN0(OP_WANTARRAY);
-
- case KEY_write:
-#ifdef EBCDIC
- {
- static char ctl_l[2];
-
- if (ctl_l[0] == '\0')
- ctl_l[0] = toCTRL('L');
- gv_fetchpv(ctl_l,TRUE, SVt_PV);
- }
-#else
- gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
-#endif
- UNI(OP_ENTERWRITE);
-
- case KEY_x:
- if (PL_expect == XOPERATOR)
- Mop(OP_REPEAT);
- check_uni();
- goto just_a_word;
-
- case KEY_xor:
- yylval.ival = OP_XOR;
- OPERATOR(OROP);
-
- case KEY_y:
- s = scan_trans(s);
- TERM(sublex_start());
- }
- }}
-}
-#ifdef __SC__
-#pragma segment Main
-#endif
-
-I32
-Perl_keyword(pTHX_ register char *d, I32 len)
-{
- switch (*d) {
- case '_':
- if (d[1] == '_') {
- if (strEQ(d,"__FILE__")) return -KEY___FILE__;
- if (strEQ(d,"__LINE__")) return -KEY___LINE__;
- if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
- if (strEQ(d,"__DATA__")) return KEY___DATA__;
- if (strEQ(d,"__END__")) return KEY___END__;
- }
- break;
- case 'A':
- if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
- break;
- case 'a':
- switch (len) {
- case 3:
- if (strEQ(d,"and")) return -KEY_and;
- if (strEQ(d,"abs")) return -KEY_abs;
- break;
- case 5:
- if (strEQ(d,"alarm")) return -KEY_alarm;
- if (strEQ(d,"atan2")) return -KEY_atan2;
- break;
- case 6:
- if (strEQ(d,"accept")) return -KEY_accept;
- break;
- }
- break;
- case 'B':
- if (strEQ(d,"BEGIN")) return KEY_BEGIN;
- break;
- case 'b':
- if (strEQ(d,"bless")) return -KEY_bless;
- if (strEQ(d,"bind")) return -KEY_bind;
- if (strEQ(d,"binmode")) return -KEY_binmode;
- break;
- case 'C':
- if (strEQ(d,"CORE")) return -KEY_CORE;
- if (strEQ(d,"CHECK")) return KEY_CHECK;
- break;
- case 'c':
- switch (len) {
- case 3:
- if (strEQ(d,"cmp")) return -KEY_cmp;
- if (strEQ(d,"chr")) return -KEY_chr;
- if (strEQ(d,"cos")) return -KEY_cos;
- break;
- case 4:
- if (strEQ(d,"chop")) return -KEY_chop;
- break;
- case 5:
- if (strEQ(d,"close")) return -KEY_close;
- if (strEQ(d,"chdir")) return -KEY_chdir;
- if (strEQ(d,"chomp")) return -KEY_chomp;
- if (strEQ(d,"chmod")) return -KEY_chmod;
- if (strEQ(d,"chown")) return -KEY_chown;
- if (strEQ(d,"crypt")) return -KEY_crypt;
- break;
- case 6:
- if (strEQ(d,"chroot")) return -KEY_chroot;
- if (strEQ(d,"caller")) return -KEY_caller;
- break;
- case 7:
- if (strEQ(d,"connect")) return -KEY_connect;
- break;
- case 8:
- if (strEQ(d,"closedir")) return -KEY_closedir;
- if (strEQ(d,"continue")) return -KEY_continue;
- break;
- }
- break;
- case 'D':
- if (strEQ(d,"DESTROY")) return KEY_DESTROY;
- break;
- case 'd':
- switch (len) {
- case 2:
- if (strEQ(d,"do")) return KEY_do;
- break;
- case 3:
- if (strEQ(d,"die")) return -KEY_die;
- break;
- case 4:
- if (strEQ(d,"dump")) return -KEY_dump;
- break;
- case 6:
- if (strEQ(d,"delete")) return KEY_delete;
- break;
- case 7:
- if (strEQ(d,"defined")) return KEY_defined;
- if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
- break;
- case 8:
- if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
- break;
- }
- break;
- case 'E':
- if (strEQ(d,"EQ")) { deprecate(d); return -KEY_eq;}
- if (strEQ(d,"END")) return KEY_END;
- break;
- case 'e':
- switch (len) {
- case 2:
- if (strEQ(d,"eq")) return -KEY_eq;
- break;
- case 3:
- if (strEQ(d,"eof")) return -KEY_eof;
- if (strEQ(d,"exp")) return -KEY_exp;
- break;
- case 4:
- if (strEQ(d,"else")) return KEY_else;
- if (strEQ(d,"exit")) return -KEY_exit;
- if (strEQ(d,"eval")) return KEY_eval;
- if (strEQ(d,"exec")) return -KEY_exec;
- if (strEQ(d,"each")) return -KEY_each;
- break;
- case 5:
- if (strEQ(d,"elsif")) return KEY_elsif;
- break;
- case 6:
- if (strEQ(d,"exists")) return KEY_exists;
- if (strEQ(d,"elseif")) Perl_warn(aTHX_ "elseif should be elsif");
- break;
- case 8:
- if (strEQ(d,"endgrent")) return -KEY_endgrent;
- if (strEQ(d,"endpwent")) return -KEY_endpwent;
- break;
- case 9:
- if (strEQ(d,"endnetent")) return -KEY_endnetent;
- break;
- case 10:
- if (strEQ(d,"endhostent")) return -KEY_endhostent;
- if (strEQ(d,"endservent")) return -KEY_endservent;
- break;
- case 11:
- if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
- break;
- }
- break;
- case 'f':
- switch (len) {
- case 3:
- if (strEQ(d,"for")) return KEY_for;
- break;
- case 4:
- if (strEQ(d,"fork")) return -KEY_fork;
- break;
- case 5:
- if (strEQ(d,"fcntl")) return -KEY_fcntl;
- if (strEQ(d,"flock")) return -KEY_flock;
- break;
- case 6:
- if (strEQ(d,"format")) return KEY_format;
- if (strEQ(d,"fileno")) return -KEY_fileno;
- break;
- case 7:
- if (strEQ(d,"foreach")) return KEY_foreach;
- break;
- case 8:
- if (strEQ(d,"formline")) return -KEY_formline;
- break;
- }
- break;
- case 'G':
- if (len == 2) {
- if (strEQ(d,"GT")) { deprecate(d); return -KEY_gt;}
- if (strEQ(d,"GE")) { deprecate(d); return -KEY_ge;}
- }
- break;
- case 'g':
- if (strnEQ(d,"get",3)) {
- d += 3;
- if (*d == 'p') {
- switch (len) {
- case 7:
- if (strEQ(d,"ppid")) return -KEY_getppid;
- if (strEQ(d,"pgrp")) return -KEY_getpgrp;
- break;
- case 8:
- if (strEQ(d,"pwent")) return -KEY_getpwent;
- if (strEQ(d,"pwnam")) return -KEY_getpwnam;
- if (strEQ(d,"pwuid")) return -KEY_getpwuid;
- break;
- case 11:
- if (strEQ(d,"peername")) return -KEY_getpeername;
- if (strEQ(d,"protoent")) return -KEY_getprotoent;
- if (strEQ(d,"priority")) return -KEY_getpriority;
- break;
- case 14:
- if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
- break;
- case 16:
- if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
- break;
- }
- }
- else if (*d == 'h') {
- if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
- if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
- if (strEQ(d,"hostent")) return -KEY_gethostent;
- }
- else if (*d == 'n') {
- if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
- if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
- if (strEQ(d,"netent")) return -KEY_getnetent;
- }
- else if (*d == 's') {
- if (strEQ(d,"servbyname")) return -KEY_getservbyname;
- if (strEQ(d,"servbyport")) return -KEY_getservbyport;
- if (strEQ(d,"servent")) return -KEY_getservent;
- if (strEQ(d,"sockname")) return -KEY_getsockname;
- if (strEQ(d,"sockopt")) return -KEY_getsockopt;
- }
- else if (*d == 'g') {
- if (strEQ(d,"grent")) return -KEY_getgrent;
- if (strEQ(d,"grnam")) return -KEY_getgrnam;
- if (strEQ(d,"grgid")) return -KEY_getgrgid;
- }
- else if (*d == 'l') {
- if (strEQ(d,"login")) return -KEY_getlogin;
- }
- else if (strEQ(d,"c")) return -KEY_getc;
- break;
- }
- switch (len) {
- case 2:
- if (strEQ(d,"gt")) return -KEY_gt;
- if (strEQ(d,"ge")) return -KEY_ge;
- break;
- case 4:
- if (strEQ(d,"grep")) return KEY_grep;
- if (strEQ(d,"goto")) return KEY_goto;
- if (strEQ(d,"glob")) return KEY_glob;
- break;
- case 6:
- if (strEQ(d,"gmtime")) return -KEY_gmtime;
- break;
- }
- break;
- case 'h':
- if (strEQ(d,"hex")) return -KEY_hex;
- break;
- case 'I':
- if (strEQ(d,"INIT")) return KEY_INIT;
- break;
- case 'i':
- switch (len) {
- case 2:
- if (strEQ(d,"if")) return KEY_if;
- break;
- case 3:
- if (strEQ(d,"int")) return -KEY_int;
- break;
- case 5:
- if (strEQ(d,"index")) return -KEY_index;
- if (strEQ(d,"ioctl")) return -KEY_ioctl;
- break;
- }
- break;
- case 'j':
- if (strEQ(d,"join")) return -KEY_join;
- break;
- case 'k':
- if (len == 4) {
- if (strEQ(d,"keys")) return -KEY_keys;
- if (strEQ(d,"kill")) return -KEY_kill;
- }
- break;
- case 'L':
- if (len == 2) {
- if (strEQ(d,"LT")) { deprecate(d); return -KEY_lt;}
- if (strEQ(d,"LE")) { deprecate(d); return -KEY_le;}
- }
- break;
- case 'l':
- switch (len) {
- case 2:
- if (strEQ(d,"lt")) return -KEY_lt;
- if (strEQ(d,"le")) return -KEY_le;
- if (strEQ(d,"lc")) return -KEY_lc;
- break;
- case 3:
- if (strEQ(d,"log")) return -KEY_log;
- break;
- case 4:
- if (strEQ(d,"last")) return KEY_last;
- if (strEQ(d,"link")) return -KEY_link;
- if (strEQ(d,"lock")) return -KEY_lock;
- break;
- case 5:
- if (strEQ(d,"local")) return KEY_local;
- if (strEQ(d,"lstat")) return -KEY_lstat;
- break;
- case 6:
- if (strEQ(d,"length")) return -KEY_length;
- if (strEQ(d,"listen")) return -KEY_listen;
- break;
- case 7:
- if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
- break;
- case 9:
- if (strEQ(d,"localtime")) return -KEY_localtime;
- break;
- }
- break;
- case 'm':
- switch (len) {
- case 1: return KEY_m;
- case 2:
- if (strEQ(d,"my")) return KEY_my;
- break;
- case 3:
- if (strEQ(d,"map")) return KEY_map;
- break;
- case 5:
- if (strEQ(d,"mkdir")) return -KEY_mkdir;
- break;
- case 6:
- if (strEQ(d,"msgctl")) return -KEY_msgctl;
- if (strEQ(d,"msgget")) return -KEY_msgget;
- if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
- if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
- break;
- }
- break;
- case 'N':
- if (strEQ(d,"NE")) { deprecate(d); return -KEY_ne;}
- break;
- case 'n':
- if (strEQ(d,"next")) return KEY_next;
- if (strEQ(d,"ne")) return -KEY_ne;
- if (strEQ(d,"not")) return -KEY_not;
- if (strEQ(d,"no")) return KEY_no;
- break;
- case 'o':
- switch (len) {
- case 2:
- if (strEQ(d,"or")) return -KEY_or;
- break;
- case 3:
- if (strEQ(d,"ord")) return -KEY_ord;
- if (strEQ(d,"oct")) return -KEY_oct;
- if (strEQ(d,"our")) return KEY_our;
- break;
- case 4:
- if (strEQ(d,"open")) return -KEY_open;
- break;
- case 7:
- if (strEQ(d,"opendir")) return -KEY_opendir;
- break;
- }
- break;
- case 'p':
- switch (len) {
- case 3:
- if (strEQ(d,"pop")) return -KEY_pop;
- if (strEQ(d,"pos")) return KEY_pos;
- break;
- case 4:
- if (strEQ(d,"push")) return -KEY_push;
- if (strEQ(d,"pack")) return -KEY_pack;
- if (strEQ(d,"pipe")) return -KEY_pipe;
- break;
- case 5:
- if (strEQ(d,"print")) return KEY_print;
- break;
- case 6:
- if (strEQ(d,"printf")) return KEY_printf;
- break;
- case 7:
- if (strEQ(d,"package")) return KEY_package;
- break;
- case 9:
- if (strEQ(d,"prototype")) return KEY_prototype;
- }
- break;
- case 'q':
- if (len <= 2) {
- if (strEQ(d,"q")) return KEY_q;
- if (strEQ(d,"qr")) return KEY_qr;
- if (strEQ(d,"qq")) return KEY_qq;
- if (strEQ(d,"qw")) return KEY_qw;
- if (strEQ(d,"qx")) return KEY_qx;
- }
- else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
- break;
- case 'r':
- switch (len) {
- case 3:
- if (strEQ(d,"ref")) return -KEY_ref;
- break;
- case 4:
- if (strEQ(d,"read")) return -KEY_read;
- if (strEQ(d,"rand")) return -KEY_rand;
- if (strEQ(d,"recv")) return -KEY_recv;
- if (strEQ(d,"redo")) return KEY_redo;
- break;
- case 5:
- if (strEQ(d,"rmdir")) return -KEY_rmdir;
- if (strEQ(d,"reset")) return -KEY_reset;
- break;
- case 6:
- if (strEQ(d,"return")) return KEY_return;
- if (strEQ(d,"rename")) return -KEY_rename;
- if (strEQ(d,"rindex")) return -KEY_rindex;
- break;
- case 7:
- if (strEQ(d,"require")) return -KEY_require;
- if (strEQ(d,"reverse")) return -KEY_reverse;
- if (strEQ(d,"readdir")) return -KEY_readdir;
- break;
- case 8:
- if (strEQ(d,"readlink")) return -KEY_readlink;
- if (strEQ(d,"readline")) return -KEY_readline;
- if (strEQ(d,"readpipe")) return -KEY_readpipe;
- break;
- case 9:
- if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
- break;
- }
- break;
- case 's':
- switch (d[1]) {
- case 0: return KEY_s;
- case 'c':
- if (strEQ(d,"scalar")) return KEY_scalar;
- break;
- case 'e':
- switch (len) {
- case 4:
- if (strEQ(d,"seek")) return -KEY_seek;
- if (strEQ(d,"send")) return -KEY_send;
- break;
- case 5:
- if (strEQ(d,"semop")) return -KEY_semop;
- break;
- case 6:
- if (strEQ(d,"select")) return -KEY_select;
- if (strEQ(d,"semctl")) return -KEY_semctl;
- if (strEQ(d,"semget")) return -KEY_semget;
- break;
- case 7:
- if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
- if (strEQ(d,"seekdir")) return -KEY_seekdir;
- break;
- case 8:
- if (strEQ(d,"setpwent")) return -KEY_setpwent;
- if (strEQ(d,"setgrent")) return -KEY_setgrent;
- break;
- case 9:
- if (strEQ(d,"setnetent")) return -KEY_setnetent;
- break;
- case 10:
- if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
- if (strEQ(d,"sethostent")) return -KEY_sethostent;
- if (strEQ(d,"setservent")) return -KEY_setservent;
- break;
- case 11:
- if (strEQ(d,"setpriority")) return -KEY_setpriority;
- if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
- break;
- }
- break;
- case 'h':
- switch (len) {
- case 5:
- if (strEQ(d,"shift")) return -KEY_shift;
- break;
- case 6:
- if (strEQ(d,"shmctl")) return -KEY_shmctl;
- if (strEQ(d,"shmget")) return -KEY_shmget;
- break;
- case 7:
- if (strEQ(d,"shmread")) return -KEY_shmread;
- break;
- case 8:
- if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
- if (strEQ(d,"shutdown")) return -KEY_shutdown;
- break;
- }
- break;
- case 'i':
- if (strEQ(d,"sin")) return -KEY_sin;
- break;
- case 'l':
- if (strEQ(d,"sleep")) return -KEY_sleep;
- break;
- case 'o':
- if (strEQ(d,"sort")) return KEY_sort;
- if (strEQ(d,"socket")) return -KEY_socket;
- if (strEQ(d,"socketpair")) return -KEY_socketpair;
- break;
- case 'p':
- if (strEQ(d,"split")) return KEY_split;
- if (strEQ(d,"sprintf")) return -KEY_sprintf;
- if (strEQ(d,"splice")) return -KEY_splice;
- break;
- case 'q':
- if (strEQ(d,"sqrt")) return -KEY_sqrt;
- break;
- case 'r':
- if (strEQ(d,"srand")) return -KEY_srand;
- break;
- case 't':
- if (strEQ(d,"stat")) return -KEY_stat;
- if (strEQ(d,"study")) return KEY_study;
- break;
- case 'u':
- if (strEQ(d,"substr")) return -KEY_substr;
- if (strEQ(d,"sub")) return KEY_sub;
- break;
- case 'y':
- switch (len) {
- case 6:
- if (strEQ(d,"system")) return -KEY_system;
- break;
- case 7:
- if (strEQ(d,"symlink")) return -KEY_symlink;
- if (strEQ(d,"syscall")) return -KEY_syscall;
- if (strEQ(d,"sysopen")) return -KEY_sysopen;
- if (strEQ(d,"sysread")) return -KEY_sysread;
- if (strEQ(d,"sysseek")) return -KEY_sysseek;
- break;
- case 8:
- if (strEQ(d,"syswrite")) return -KEY_syswrite;
- break;
- }
- break;
- }
- break;
- case 't':
- switch (len) {
- case 2:
- if (strEQ(d,"tr")) return KEY_tr;
- break;
- case 3:
- if (strEQ(d,"tie")) return KEY_tie;
- break;
- case 4:
- if (strEQ(d,"tell")) return -KEY_tell;
- if (strEQ(d,"tied")) return KEY_tied;
- if (strEQ(d,"time")) return -KEY_time;
- break;
- case 5:
- if (strEQ(d,"times")) return -KEY_times;
- break;
- case 7:
- if (strEQ(d,"telldir")) return -KEY_telldir;
- break;
- case 8:
- if (strEQ(d,"truncate")) return -KEY_truncate;
- break;
- }
- break;
- case 'u':
- switch (len) {
- case 2:
- if (strEQ(d,"uc")) return -KEY_uc;
- break;
- case 3:
- if (strEQ(d,"use")) return KEY_use;
- break;
- case 5:
- if (strEQ(d,"undef")) return KEY_undef;
- if (strEQ(d,"until")) return KEY_until;
- if (strEQ(d,"untie")) return KEY_untie;
- if (strEQ(d,"utime")) return -KEY_utime;
- if (strEQ(d,"umask")) return -KEY_umask;
- break;
- case 6:
- if (strEQ(d,"unless")) return KEY_unless;
- if (strEQ(d,"unpack")) return -KEY_unpack;
- if (strEQ(d,"unlink")) return -KEY_unlink;
- break;
- case 7:
- if (strEQ(d,"unshift")) return -KEY_unshift;
- if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
- break;
- }
- break;
- case 'v':
- if (strEQ(d,"values")) return -KEY_values;
- if (strEQ(d,"vec")) return -KEY_vec;
- break;
- case 'w':
- switch (len) {
- case 4:
- if (strEQ(d,"warn")) return -KEY_warn;
- if (strEQ(d,"wait")) return -KEY_wait;
- break;
- case 5:
- if (strEQ(d,"while")) return KEY_while;
- if (strEQ(d,"write")) return -KEY_write;
- break;
- case 7:
- if (strEQ(d,"waitpid")) return -KEY_waitpid;
- break;
- case 9:
- if (strEQ(d,"wantarray")) return -KEY_wantarray;
- break;
- }
- break;
- case 'x':
- if (len == 1) return -KEY_x;
- if (strEQ(d,"xor")) return -KEY_xor;
- break;
- case 'y':
- if (len == 1) return KEY_y;
- break;
- case 'z':
- break;
- }
- return 0;
-}
-
-STATIC void
-S_checkcomma(pTHX_ register char *s, char *name, char *what)
-{
- char *w;
-
- if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
- if (ckWARN(WARN_SYNTAX)) {
- int level = 1;
- for (w = s+2; *w && level; w++) {
- if (*w == '(')
- ++level;
- else if (*w == ')')
- --level;
- }
- if (*w)
- for (; *w && isSPACE(*w); w++) ;
- if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
- Perl_warner(aTHX_ WARN_SYNTAX,
- "%s (...) interpreted as function",name);
- }
- }
- while (s < PL_bufend && isSPACE(*s))
- s++;
- if (*s == '(')
- s++;
- while (s < PL_bufend && isSPACE(*s))
- s++;
- if (isIDFIRST_lazy_if(s,UTF)) {
- w = s++;
- while (isALNUM_lazy_if(s,UTF))
- s++;
- while (s < PL_bufend && isSPACE(*s))
- s++;
- if (*s == ',') {
- int kw;
- *s = '\0';
- kw = keyword(w, s - w) || get_cv(w, FALSE) != 0;
- *s = ',';
- if (kw)
- return;
- Perl_croak(aTHX_ "No comma allowed after %s", what);
- }
- }
-}
-
-/* Either returns sv, or mortalizes sv and returns a new SV*.
- Best used as sv=new_constant(..., sv, ...).
- If s, pv are NULL, calls subroutine with one argument,
- and type is used with error messages only. */
-
-STATIC SV *
-S_new_constant(pTHX_ char *s, STRLEN len, const char *key, SV *sv, SV *pv,
- const char *type)
-{
- dSP;
- HV *table = GvHV(PL_hintgv); /* ^H */
- SV *res;
- SV **cvp;
- SV *cv, *typesv;
- const char *why1, *why2, *why3;
-
- if (!table || !(PL_hints & HINT_LOCALIZE_HH)) {
- SV *msg;
-
- why2 = strEQ(key,"charnames")
- ? "(possibly a missing \"use charnames ...\")"
- : "";
- msg = Perl_newSVpvf(aTHX_ "Constant(%s) unknown: %s",
- (type ? type: "undef"), why2);
-
- /* This is convoluted and evil ("goto considered harmful")
- * but I do not understand the intricacies of all the different
- * failure modes of %^H in here. The goal here is to make
- * the most probable error message user-friendly. --jhi */
-
- goto msgdone;
-
- report:
- msg = Perl_newSVpvf(aTHX_ "Constant(%s): %s%s%s",
- (type ? type: "undef"), why1, why2, why3);
- msgdone:
- yyerror(SvPVX(msg));
- SvREFCNT_dec(msg);
- return sv;
- }
- cvp = hv_fetch(table, key, strlen(key), FALSE);
- if (!cvp || !SvOK(*cvp)) {
- why1 = "$^H{";
- why2 = key;
- why3 = "} is not defined";
- goto report;
- }
- sv_2mortal(sv); /* Parent created it permanently */
- cv = *cvp;
- if (!pv && s)
- pv = sv_2mortal(newSVpvn(s, len));
- if (type && pv)
- typesv = sv_2mortal(newSVpv(type, 0));
- else
- typesv = &PL_sv_undef;
-
- PUSHSTACKi(PERLSI_OVERLOAD);
- ENTER ;
- SAVETMPS;
-
- PUSHMARK(SP) ;
- EXTEND(sp, 3);
- if (pv)
- PUSHs(pv);
- PUSHs(sv);
- if (pv)
- PUSHs(typesv);
- PUTBACK;
- call_sv(cv, G_SCALAR | ( PL_in_eval ? 0 : G_EVAL));
-
- SPAGAIN ;
-
- /* Check the eval first */
- if (!PL_in_eval && SvTRUE(ERRSV)) {
- STRLEN n_a;
- sv_catpv(ERRSV, "Propagated");
- yyerror(SvPV(ERRSV, n_a)); /* Duplicates the message inside eval */
- (void)POPs;
- res = SvREFCNT_inc(sv);
- }
- else {
- res = POPs;
- (void)SvREFCNT_inc(res);
- }
-
- PUTBACK ;
- FREETMPS ;
- LEAVE ;
- POPSTACK;
-
- if (!SvOK(res)) {
- why1 = "Call to &{$^H{";
- why2 = key;
- why3 = "}} did not return a defined value";
- sv = res;
- goto report;
- }
-
- return res;
-}
-
-STATIC char *
-S_scan_word(pTHX_ register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
-{
- register char *d = dest;
- register char *e = d + destlen - 3; /* two-character token, ending NUL */
- for (;;) {
- if (d >= e)
- Perl_croak(aTHX_ ident_too_long);
- if (isALNUM(*s)) /* UTF handled below */
- *d++ = *s++;
- else if (*s == '\'' && allow_package && isIDFIRST_lazy_if(s+1,UTF)) {
- *d++ = ':';
- *d++ = ':';
- s++;
- }
- else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
- *d++ = *s++;
- *d++ = *s++;
- }
- else if (UTF && UTF8_IS_START(*s) && isALNUM_utf8((U8*)s)) {
- char *t = s + UTF8SKIP(s);
- while (UTF8_IS_CONTINUED(*t) && is_utf8_mark((U8*)t))
- t += UTF8SKIP(t);
- if (d + (t - s) > e)
- Perl_croak(aTHX_ ident_too_long);
- Copy(s, d, t - s, char);
- d += t - s;
- s = t;
- }
- else {
- *d = '\0';
- *slp = d - dest;
- return s;
- }
- }
-}
-
-STATIC char *
-S_scan_ident(pTHX_ register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
-{
- register char *d;
- register char *e;
- char *bracket = 0;
- char funny = *s++;
-
- if (isSPACE(*s))
- s = skipspace(s);
- d = dest;
- e = d + destlen - 3; /* two-character token, ending NUL */
- if (isDIGIT(*s)) {
- while (isDIGIT(*s)) {
- if (d >= e)
- Perl_croak(aTHX_ ident_too_long);
- *d++ = *s++;
- }
- }
- else {
- for (;;) {
- if (d >= e)
- Perl_croak(aTHX_ ident_too_long);
- if (isALNUM(*s)) /* UTF handled below */
- *d++ = *s++;
- else if (*s == '\'' && isIDFIRST_lazy_if(s+1,UTF)) {
- *d++ = ':';
- *d++ = ':';
- s++;
- }
- else if (*s == ':' && s[1] == ':') {
- *d++ = *s++;
- *d++ = *s++;
- }
- else if (UTF && UTF8_IS_START(*s) && isALNUM_utf8((U8*)s)) {
- char *t = s + UTF8SKIP(s);
- while (UTF8_IS_CONTINUED(*t) && is_utf8_mark((U8*)t))
- t += UTF8SKIP(t);
- if (d + (t - s) > e)
- Perl_croak(aTHX_ ident_too_long);
- Copy(s, d, t - s, char);
- d += t - s;
- s = t;
- }
- else
- break;
- }
- }
- *d = '\0';
- d = dest;
- if (*d) {
- if (PL_lex_state != LEX_NORMAL)
- PL_lex_state = LEX_INTERPENDMAYBE;
- return s;
- }
- if (*s == '$' && s[1] &&
- (isALNUM_lazy_if(s+1,UTF) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
- {
- return s;
- }
- if (*s == '{') {
- bracket = s;
- s++;
- }
- else if (ck_uni)
- check_uni();
- if (s < send)
- *d = *s++;
- d[1] = '\0';
- if (*d == '^' && *s && isCONTROLVAR(*s)) {
- *d = toCTRL(*s);
- s++;
- }
- if (bracket) {
- if (isSPACE(s[-1])) {
- while (s < send) {
- char ch = *s++;
- if (!SPACE_OR_TAB(ch)) {
- *d = ch;
- break;
- }
- }
- }
- if (isIDFIRST_lazy_if(d,UTF)) {
- d++;
- if (UTF) {
- e = s;
- while ((e < send && isALNUM_lazy_if(e,UTF)) || *e == ':') {
- e += UTF8SKIP(e);
- while (e < send && UTF8_IS_CONTINUED(*e) && is_utf8_mark((U8*)e))
- e += UTF8SKIP(e);
- }
- Copy(s, d, e - s, char);
- d += e - s;
- s = e;
- }
- else {
- while ((isALNUM(*s) || *s == ':') && d < e)
- *d++ = *s++;
- if (d >= e)
- Perl_croak(aTHX_ ident_too_long);
- }
- *d = '\0';
- while (s < send && SPACE_OR_TAB(*s)) s++;
- if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
- if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
- const char *brack = *s == '[' ? "[...]" : "{...}";
- Perl_warner(aTHX_ WARN_AMBIGUOUS,
- "Ambiguous use of %c{%s%s} resolved to %c%s%s",
- funny, dest, brack, funny, dest, brack);
- }
- bracket++;
- PL_lex_brackstack[PL_lex_brackets++] = (char)(XOPERATOR | XFAKEBRACK);
- return s;
- }
- }
- /* Handle extended ${^Foo} variables
- * 1999-02-27 mjd-perl-patch@plover.com */
- else if (!isALNUM(*d) && !isPRINT(*d) /* isCTRL(d) */
- && isALNUM(*s))
- {
- d++;
- while (isALNUM(*s) && d < e) {
- *d++ = *s++;
- }
- if (d >= e)
- Perl_croak(aTHX_ ident_too_long);
- *d = '\0';
- }
- if (*s == '}') {
- s++;
- if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
- PL_lex_state = LEX_INTERPEND;
- if (funny == '#')
- funny = '@';
- if (PL_lex_state == LEX_NORMAL) {
- if (ckWARN(WARN_AMBIGUOUS) &&
- (keyword(dest, d - dest) || get_cv(dest, FALSE)))
- {
- Perl_warner(aTHX_ WARN_AMBIGUOUS,
- "Ambiguous use of %c{%s} resolved to %c%s",
- funny, dest, funny, dest);
- }
- }
- }
- else {
- s = bracket; /* let the parser handle it */
- *dest = '\0';
- }
- }
- else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
- PL_lex_state = LEX_INTERPEND;
- return s;
-}
-
-void
-Perl_pmflag(pTHX_ U16 *pmfl, int ch)
-{
- if (ch == 'i')
- *pmfl |= PMf_FOLD;
- else if (ch == 'g')
- *pmfl |= PMf_GLOBAL;
- else if (ch == 'c')
- *pmfl |= PMf_CONTINUE;
- else if (ch == 'o')
- *pmfl |= PMf_KEEP;
- else if (ch == 'm')
- *pmfl |= PMf_MULTILINE;
- else if (ch == 's')
- *pmfl |= PMf_SINGLELINE;
- else if (ch == 'x')
- *pmfl |= PMf_EXTENDED;
-}
-
-STATIC char *
-S_scan_pat(pTHX_ char *start, I32 type)
-{
- PMOP *pm;
- char *s;
-
- s = scan_str(start,FALSE,FALSE);
- if (!s)
- Perl_croak(aTHX_ "Search pattern not terminated");
-
- pm = (PMOP*)newPMOP(type, 0);
- if (PL_multi_open == '?')
- pm->op_pmflags |= PMf_ONCE;
- if(type == OP_QR) {
- while (*s && strchr("iomsx", *s))
- pmflag(&pm->op_pmflags,*s++);
- }
- else {
- while (*s && strchr("iogcmsx", *s))
- pmflag(&pm->op_pmflags,*s++);
- }
- pm->op_pmpermflags = pm->op_pmflags;
-
- PL_lex_op = (OP*)pm;
- yylval.ival = OP_MATCH;
- return s;
-}
-
-STATIC char *
-S_scan_subst(pTHX_ char *start)
-{
- register char *s;
- register PMOP *pm;
- I32 first_start;
- I32 es = 0;
-
- yylval.ival = OP_NULL;
-
- s = scan_str(start,FALSE,FALSE);
-
- if (!s)
- Perl_croak(aTHX_ "Substitution pattern not terminated");
-
- if (s[-1] == PL_multi_open)
- s--;
-
- first_start = PL_multi_start;
- s = scan_str(s,FALSE,FALSE);
- if (!s) {
- if (PL_lex_stuff) {
- SvREFCNT_dec(PL_lex_stuff);
- PL_lex_stuff = Nullsv;
- }
- Perl_croak(aTHX_ "Substitution replacement not terminated");
- }
- PL_multi_start = first_start; /* so whole substitution is taken together */
-
- pm = (PMOP*)newPMOP(OP_SUBST, 0);
- while (*s) {
- if (*s == 'e') {
- s++;
- es++;
- }
- else if (strchr("iogcmsx", *s))
- pmflag(&pm->op_pmflags,*s++);
- else
- break;
- }
-
- if (es) {
- SV *repl;
- PL_sublex_info.super_bufptr = s;
- PL_sublex_info.super_bufend = PL_bufend;
- PL_multi_end = 0;
- pm->op_pmflags |= PMf_EVAL;
- repl = newSVpvn("",0);
- while (es-- > 0)
- sv_catpv(repl, es ? "eval " : "do ");
- sv_catpvn(repl, "{ ", 2);
- sv_catsv(repl, PL_lex_repl);
- sv_catpvn(repl, " };", 2);
- SvEVALED_on(repl);
- SvREFCNT_dec(PL_lex_repl);
- PL_lex_repl = repl;
- }
-
- pm->op_pmpermflags = pm->op_pmflags;
- PL_lex_op = (OP*)pm;
- yylval.ival = OP_SUBST;
- return s;
-}
-
-STATIC char *
-S_scan_trans(pTHX_ char *start)
-{
- register char* s;
- OP *o;
- short *tbl;
- I32 squash;
- I32 del;
- I32 complement;
- I32 utf8;
- I32 count = 0;
-
- yylval.ival = OP_NULL;
-
- s = scan_str(start,FALSE,FALSE);
- if (!s)
- Perl_croak(aTHX_ "Transliteration pattern not terminated");
- if (s[-1] == PL_multi_open)
- s--;
-
- s = scan_str(s,FALSE,FALSE);
- if (!s) {
- if (PL_lex_stuff) {
- SvREFCNT_dec(PL_lex_stuff);
- PL_lex_stuff = Nullsv;
- }
- Perl_croak(aTHX_ "Transliteration replacement not terminated");
- }
-
- New(803,tbl,256,short);
- o = newPVOP(OP_TRANS, 0, (char*)tbl);
-
- complement = del = squash = 0;
- while (strchr("cds", *s)) {
- if (*s == 'c')
- complement = OPpTRANS_COMPLEMENT;
- else if (*s == 'd')
- del = OPpTRANS_DELETE;
- else if (*s == 's')
- squash = OPpTRANS_SQUASH;
- s++;
- }
- o->op_private = del|squash|complement|
- (DO_UTF8(PL_lex_stuff)? OPpTRANS_FROM_UTF : 0)|
- (DO_UTF8(PL_lex_repl) ? OPpTRANS_TO_UTF : 0);
-
- PL_lex_op = o;
- yylval.ival = OP_TRANS;
- return s;
-}
-
-STATIC char *
-S_scan_heredoc(pTHX_ register char *s)
-{
- SV *herewas;
- I32 op_type = OP_SCALAR;
- I32 len;
- SV *tmpstr;
- char term;
- register char *d;
- register char *e;
- char *peek;
- int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
-
- s += 2;
- d = PL_tokenbuf;
- e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
- if (!outer)
- *d++ = '\n';
- for (peek = s; SPACE_OR_TAB(*peek); peek++) ;
- if (*peek && strchr("`'\"",*peek)) {
- s = peek;
- term = *s++;
- s = delimcpy(d, e, s, PL_bufend, term, &len);
- d += len;
- if (s < PL_bufend)
- s++;
- }
- else {
- if (*s == '\\')
- s++, term = '\'';
- else
- term = '"';
- if (!isALNUM_lazy_if(s,UTF))
- deprecate("bare << to mean <<\"\"");
- for (; isALNUM_lazy_if(s,UTF); s++) {
- if (d < e)
- *d++ = *s;
- }
- }
- if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
- Perl_croak(aTHX_ "Delimiter for here document is too long");
- *d++ = '\n';
- *d = '\0';
- len = d - PL_tokenbuf;
-#ifndef PERL_STRICT_CR
- d = strchr(s, '\r');
- if (d) {
- char *olds = s;
- s = d;
- while (s < PL_bufend) {
- if (*s == '\r') {
- *d++ = '\n';
- if (*++s == '\n')
- s++;
- }
- else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
- *d++ = *s++;
- s++;
- }
- else
- *d++ = *s++;
- }
- *d = '\0';
- PL_bufend = d;
- SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
- s = olds;
- }
-#endif
- d = "\n";
- if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
- herewas = newSVpvn(s,PL_bufend-s);
- else
- s--, herewas = newSVpvn(s,d-s);
- s += SvCUR(herewas);
-
- tmpstr = NEWSV(87,79);
- sv_upgrade(tmpstr, SVt_PVIV);
- if (term == '\'') {
- op_type = OP_CONST;
- SvIVX(tmpstr) = -1;
- }
- else if (term == '`') {
- op_type = OP_BACKTICK;
- SvIVX(tmpstr) = '\\';
- }
-
- CLINE;
- PL_multi_start = CopLINE(PL_curcop);
- PL_multi_open = PL_multi_close = '<';
- term = *PL_tokenbuf;
- if (PL_lex_inwhat == OP_SUBST && PL_in_eval && !PL_rsfp) {
- char *bufptr = PL_sublex_info.super_bufptr;
- char *bufend = PL_sublex_info.super_bufend;
- char *olds = s - SvCUR(herewas);
- s = strchr(bufptr, '\n');
- if (!s)
- s = bufend;
- d = s;
- while (s < bufend &&
- (*s != term || memNE(s,PL_tokenbuf,len)) ) {
- if (*s++ == '\n')
- CopLINE_inc(PL_curcop);
- }
- if (s >= bufend) {
- CopLINE_set(PL_curcop, PL_multi_start);
- missingterm(PL_tokenbuf);
- }
- sv_setpvn(herewas,bufptr,d-bufptr+1);
- sv_setpvn(tmpstr,d+1,s-d);
- s += len - 1;
- sv_catpvn(herewas,s,bufend-s);
- (void)strcpy(bufptr,SvPVX(herewas));
-
- s = olds;
- goto retval;
- }
- else if (!outer) {
- d = s;
- while (s < PL_bufend &&
- (*s != term || memNE(s,PL_tokenbuf,len)) ) {
- if (*s++ == '\n')
- CopLINE_inc(PL_curcop);
- }
- if (s >= PL_bufend) {
- CopLINE_set(PL_curcop, PL_multi_start);
- missingterm(PL_tokenbuf);
- }
- sv_setpvn(tmpstr,d+1,s-d);
- s += len - 1;
- CopLINE_inc(PL_curcop); /* the preceding stmt passes a newline */
-
- sv_catpvn(herewas,s,PL_bufend-s);
- sv_setsv(PL_linestr,herewas);
- PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- }
- else
- sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
- while (s >= PL_bufend) { /* multiple line string? */
- if (!outer ||
- !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
- CopLINE_set(PL_curcop, PL_multi_start);
- missingterm(PL_tokenbuf);
- }
- CopLINE_inc(PL_curcop);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
-#ifndef PERL_STRICT_CR
- if (PL_bufend - PL_linestart >= 2) {
- if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
- (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
- {
- PL_bufend[-2] = '\n';
- PL_bufend--;
- SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
- }
- else if (PL_bufend[-1] == '\r')
- PL_bufend[-1] = '\n';
- }
- else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
- PL_bufend[-1] = '\n';
-#endif
- if (PERLDB_LINE && PL_curstash != PL_debstash) {
- SV *sv = NEWSV(88,0);
-
- sv_upgrade(sv, SVt_PVMG);
- sv_setsv(sv,PL_linestr);
- av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop),sv);
- }
- if (*s == term && memEQ(s,PL_tokenbuf,len)) {
- s = PL_bufend - 1;
- *s = ' ';
- sv_catsv(PL_linestr,herewas);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- }
- else {
- s = PL_bufend;
- sv_catsv(tmpstr,PL_linestr);
- }
- }
- s++;
-retval:
- PL_multi_end = CopLINE(PL_curcop);
- if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
- SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
- Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
- }
- SvREFCNT_dec(herewas);
- if (UTF && !IN_BYTE && is_utf8_string((U8*)SvPVX(tmpstr), SvCUR(tmpstr)))
- SvUTF8_on(tmpstr);
- PL_lex_stuff = tmpstr;
- yylval.ival = op_type;
- return s;
-}
-
-/* scan_inputsymbol
- takes: current position in input buffer
- returns: new position in input buffer
- side-effects: yylval and lex_op are set.
-
- This code handles:
-
- <> read from ARGV
- <FH> read from filehandle
- <pkg::FH> read from package qualified filehandle
- <pkg'FH> read from package qualified filehandle
- <$fh> read from filehandle in $fh
- <*.h> filename glob
-
-*/
-
-STATIC char *
-S_scan_inputsymbol(pTHX_ char *start)
-{
- register char *s = start; /* current position in buffer */
- register char *d;
- register char *e;
- char *end;
- I32 len;
-
- d = PL_tokenbuf; /* start of temp holding space */
- e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
- end = strchr(s, '\n');
- if (!end)
- end = PL_bufend;
- s = delimcpy(d, e, s + 1, end, '>', &len); /* extract until > */
-
- /* die if we didn't have space for the contents of the <>,
- or if it didn't end, or if we see a newline
- */
-
- if (len >= sizeof PL_tokenbuf)
- Perl_croak(aTHX_ "Excessively long <> operator");
- if (s >= end)
- Perl_croak(aTHX_ "Unterminated <> operator");
-
- s++;
-
- /* check for <$fh>
- Remember, only scalar variables are interpreted as filehandles by
- this code. Anything more complex (e.g., <$fh{$num}>) will be
- treated as a glob() call.
- This code makes use of the fact that except for the $ at the front,
- a scalar variable and a filehandle look the same.
- */
- if (*d == '$' && d[1]) d++;
-
- /* allow <Pkg'VALUE> or <Pkg::VALUE> */
- while (*d && (isALNUM_lazy_if(d,UTF) || *d == '\'' || *d == ':'))
- d++;
-
- /* If we've tried to read what we allow filehandles to look like, and
- there's still text left, then it must be a glob() and not a getline.
- Use scan_str to pull out the stuff between the <> and treat it
- as nothing more than a string.
- */
-
- if (d - PL_tokenbuf != len) {
- yylval.ival = OP_GLOB;
- set_csh();
- s = scan_str(start,FALSE,FALSE);
- if (!s)
- Perl_croak(aTHX_ "Glob not terminated");
- return s;
- }
- else {
- /* we're in a filehandle read situation */
- d = PL_tokenbuf;
-
- /* turn <> into <ARGV> */
- if (!len)
- (void)strcpy(d,"ARGV");
-
- /* if <$fh>, create the ops to turn the variable into a
- filehandle
- */
- if (*d == '$') {
- I32 tmp;
-
- /* try to find it in the pad for this block, otherwise find
- add symbol table ops
- */
- if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
- OP *o = newOP(OP_PADSV, 0);
- o->op_targ = tmp;
- PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
- }
- else {
- GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
- PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
- newUNOP(OP_RV2SV, 0,
- newGVOP(OP_GV, 0, gv)));
- }
- PL_lex_op->op_flags |= OPf_SPECIAL;
- /* we created the ops in PL_lex_op, so make yylval.ival a null op */
- yylval.ival = OP_NULL;
- }
-
- /* If it's none of the above, it must be a literal filehandle
- (<Foo::BAR> or <FOO>) so build a simple readline OP */
- else {
- GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
- PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
- yylval.ival = OP_NULL;
- }
- }
-
- return s;
-}
-
-
-/* scan_str
- takes: start position in buffer
- keep_quoted preserve \ on the embedded delimiter(s)
- keep_delims preserve the delimiters around the string
- returns: position to continue reading from buffer
- side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
- updates the read buffer.
-
- This subroutine pulls a string out of the input. It is called for:
- q single quotes q(literal text)
- ' single quotes 'literal text'
- qq double quotes qq(interpolate $here please)
- " double quotes "interpolate $here please"
- qx backticks qx(/bin/ls -l)
- ` backticks `/bin/ls -l`
- qw quote words @EXPORT_OK = qw( func() $spam )
- m// regexp match m/this/
- s/// regexp substitute s/this/that/
- tr/// string transliterate tr/this/that/
- y/// string transliterate y/this/that/
- ($*@) sub prototypes sub foo ($)
- (stuff) sub attr parameters sub foo : attr(stuff)
- <> readline or globs <FOO>, <>, <$fh>, or <*.c>
-
- In most of these cases (all but <>, patterns and transliterate)
- yylex() calls scan_str(). m// makes yylex() call scan_pat() which
- calls scan_str(). s/// makes yylex() call scan_subst() which calls
- scan_str(). tr/// and y/// make yylex() call scan_trans() which
- calls scan_str().
-
- It skips whitespace before the string starts, and treats the first
- character as the delimiter. If the delimiter is one of ([{< then
- the corresponding "close" character )]}> is used as the closing
- delimiter. It allows quoting of delimiters, and if the string has
- balanced delimiters ([{<>}]) it allows nesting.
-
- On success, the SV with the resulting string is put into lex_stuff or,
- if that is already non-NULL, into lex_repl. The second case occurs only
- when parsing the RHS of the special constructs s/// and tr/// (y///).
- For convenience, the terminating delimiter character is stuffed into
- SvIVX of the SV.
-*/
-
-STATIC char *
-S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims)
-{
- SV *sv; /* scalar value: string */
- char *tmps; /* temp string, used for delimiter matching */
- register char *s = start; /* current position in the buffer */
- register char term; /* terminating character */
- register char *to; /* current position in the sv's data */
- I32 brackets = 1; /* bracket nesting level */
- bool has_utf8 = FALSE; /* is there any utf8 content? */
-
- /* skip space before the delimiter */
- if (isSPACE(*s))
- s = skipspace(s);
-
- /* mark where we are, in case we need to report errors */
- CLINE;
-
- /* after skipping whitespace, the next character is the terminator */
- term = *s;
- if (UTF8_IS_CONTINUED(term) && UTF)
- has_utf8 = TRUE;
-
- /* mark where we are */
- PL_multi_start = CopLINE(PL_curcop);
- PL_multi_open = term;
-
- /* find corresponding closing delimiter */
- if (term && (tmps = strchr("([{< )]}> )]}>",term)))
- term = tmps[5];
- PL_multi_close = term;
-
- /* create a new SV to hold the contents. 87 is leak category, I'm
- assuming. 79 is the SV's initial length. What a random number. */
- sv = NEWSV(87,79);
- sv_upgrade(sv, SVt_PVIV);
- SvIVX(sv) = term;
- (void)SvPOK_only(sv); /* validate pointer */
-
- /* move past delimiter and try to read a complete string */
- if (keep_delims)
- sv_catpvn(sv, s, 1);
- s++;
- for (;;) {
- /* extend sv if need be */
- SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
- /* set 'to' to the next character in the sv's string */
- to = SvPVX(sv)+SvCUR(sv);
-
- /* if open delimiter is the close delimiter read unbridle */
- if (PL_multi_open == PL_multi_close) {
- for (; s < PL_bufend; s++,to++) {
- /* embedded newlines increment the current line number */
- if (*s == '\n' && !PL_rsfp)
- CopLINE_inc(PL_curcop);
- /* handle quoted delimiters */
- if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
- if (!keep_quoted && s[1] == term)
- s++;
- /* any other quotes are simply copied straight through */
- else
- *to++ = *s++;
- }
- /* terminate when run out of buffer (the for() condition), or
- have found the terminator */
- else if (*s == term)
- break;
- else if (!has_utf8 && UTF8_IS_CONTINUED(*s) && UTF)
- has_utf8 = TRUE;
- *to = *s;
- }
- }
-
- /* if the terminator isn't the same as the start character (e.g.,
- matched brackets), we have to allow more in the quoting, and
- be prepared for nested brackets.
- */
- else {
- /* read until we run out of string, or we find the terminator */
- for (; s < PL_bufend; s++,to++) {
- /* embedded newlines increment the line count */
- if (*s == '\n' && !PL_rsfp)
- CopLINE_inc(PL_curcop);
- /* backslashes can escape the open or closing characters */
- if (*s == '\\' && s+1 < PL_bufend) {
- if (!keep_quoted &&
- ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)))
- s++;
- else
- *to++ = *s++;
- }
- /* allow nested opens and closes */
- else if (*s == PL_multi_close && --brackets <= 0)
- break;
- else if (*s == PL_multi_open)
- brackets++;
- else if (!has_utf8 && UTF8_IS_CONTINUED(*s) && UTF)
- has_utf8 = TRUE;
- *to = *s;
- }
- }
- /* terminate the copied string and update the sv's end-of-string */
- *to = '\0';
- SvCUR_set(sv, to - SvPVX(sv));
-
- /*
- * this next chunk reads more into the buffer if we're not done yet
- */
-
- if (s < PL_bufend)
- break; /* handle case where we are done yet :-) */
-
-#ifndef PERL_STRICT_CR
- if (to - SvPVX(sv) >= 2) {
- if ((to[-2] == '\r' && to[-1] == '\n') ||
- (to[-2] == '\n' && to[-1] == '\r'))
- {
- to[-2] = '\n';
- to--;
- SvCUR_set(sv, to - SvPVX(sv));
- }
- else if (to[-1] == '\r')
- to[-1] = '\n';
- }
- else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
- to[-1] = '\n';
-#endif
-
- /* if we're out of file, or a read fails, bail and reset the current
- line marker so we can report where the unterminated string began
- */
- if (!PL_rsfp ||
- !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
- sv_free(sv);
- CopLINE_set(PL_curcop, PL_multi_start);
- return Nullch;
- }
- /* we read a line, so increment our line counter */
- CopLINE_inc(PL_curcop);
-
- /* update debugger info */
- if (PERLDB_LINE && PL_curstash != PL_debstash) {
- SV *sv = NEWSV(88,0);
-
- sv_upgrade(sv, SVt_PVMG);
- sv_setsv(sv,PL_linestr);
- av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop), sv);
- }
-
- /* having changed the buffer, we must update PL_bufend */
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- }
-
- /* at this point, we have successfully read the delimited string */
-
- if (keep_delims)
- sv_catpvn(sv, s, 1);
- if (has_utf8)
- SvUTF8_on(sv);
- PL_multi_end = CopLINE(PL_curcop);
- s++;
-
- /* if we allocated too much space, give some back */
- if (SvCUR(sv) + 5 < SvLEN(sv)) {
- SvLEN_set(sv, SvCUR(sv) + 1);
- Renew(SvPVX(sv), SvLEN(sv), char);
- }
-
- /* decide whether this is the first or second quoted string we've read
- for this op
- */
-
- if (PL_lex_stuff)
- PL_lex_repl = sv;
- else
- PL_lex_stuff = sv;
- return s;
-}
-
-/*
- scan_num
- takes: pointer to position in buffer
- returns: pointer to new position in buffer
- side-effects: builds ops for the constant in yylval.op
-
- Read a number in any of the formats that Perl accepts:
-
- 0(x[0-7A-F]+)|([0-7]+)|(b[01])
- [\d_]+(\.[\d_]*)?[Ee](\d+)
-
- Underbars (_) are allowed in decimal numbers. If -w is on,
- underbars before a decimal point must be at three digit intervals.
-
- Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
- thing it reads.
-
- If it reads a number without a decimal point or an exponent, it will
- try converting the number to an integer and see if it can do so
- without loss of precision.
-*/
-
-char *
-Perl_scan_num(pTHX_ char *start, YYSTYPE* lvalp)
-{
- register char *s = start; /* current position in buffer */
- register char *d; /* destination in temp buffer */
- register char *e; /* end of temp buffer */
- NV nv; /* number read, as a double */
- SV *sv = Nullsv; /* place to put the converted number */
- bool floatit; /* boolean: int or float? */
- char *lastub = 0; /* position of last underbar */
- static char number_too_long[] = "Number too long";
-
- /* We use the first character to decide what type of number this is */
-
- switch (*s) {
- default:
- Perl_croak(aTHX_ "panic: scan_num");
-
- /* if it starts with a 0, it could be an octal number, a decimal in
- 0.13 disguise, or a hexadecimal number, or a binary number. */
- case '0':
- {
- /* variables:
- u holds the "number so far"
- shift the power of 2 of the base
- (hex == 4, octal == 3, binary == 1)
- overflowed was the number more than we can hold?
-
- Shift is used when we add a digit. It also serves as an "are
- we in octal/hex/binary?" indicator to disallow hex characters
- when in octal mode.
- */
- NV n = 0.0;
- UV u = 0;
- I32 shift;
- bool overflowed = FALSE;
- static NV nvshift[5] = { 1.0, 2.0, 4.0, 8.0, 16.0 };
- static char* bases[5] = { "", "binary", "", "octal",
- "hexadecimal" };
- static char* Bases[5] = { "", "Binary", "", "Octal",
- "Hexadecimal" };
- static char *maxima[5] = { "",
- "0b11111111111111111111111111111111",
- "",
- "037777777777",
- "0xffffffff" };
- char *base, *Base, *max;
-
- /* check for hex */
- if (s[1] == 'x') {
- shift = 4;
- s += 2;
- } else if (s[1] == 'b') {
- shift = 1;
- s += 2;
- }
- /* check for a decimal in disguise */
- else if (s[1] == '.' || s[1] == 'e' || s[1] == 'E')
- goto decimal;
- /* so it must be octal */
- else
- shift = 3;
-
- base = bases[shift];
- Base = Bases[shift];
- max = maxima[shift];
-
- /* read the rest of the number */
- for (;;) {
- /* x is used in the overflow test,
- b is the digit we're adding on. */
- UV x, b;
-
- switch (*s) {
-
- /* if we don't mention it, we're done */
- default:
- goto out;
-
- /* _ are ignored */
- case '_':
- s++;
- break;
-
- /* 8 and 9 are not octal */
- case '8': case '9':
- if (shift == 3)
- yyerror(Perl_form(aTHX_ "Illegal octal digit '%c'", *s));
- /* FALL THROUGH */
-
- /* octal digits */
- case '2': case '3': case '4':
- case '5': case '6': case '7':
- if (shift == 1)
- yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s));
- /* FALL THROUGH */
-
- case '0': case '1':
- b = *s++ & 15; /* ASCII digit -> value of digit */
- goto digit;
-
- /* hex digits */
- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
- /* make sure they said 0x */
- if (shift != 4)
- goto out;
- b = (*s++ & 7) + 9;
-
- /* Prepare to put the digit we have onto the end
- of the number so far. We check for overflows.
- */
-
- digit:
- if (!overflowed) {
- x = u << shift; /* make room for the digit */
-
- if ((x >> shift) != u
- && !(PL_hints & HINT_NEW_BINARY)) {
- overflowed = TRUE;
- n = (NV) u;
- if (ckWARN_d(WARN_OVERFLOW))
- Perl_warner(aTHX_ WARN_OVERFLOW,
- "Integer overflow in %s number",
- base);
- } else
- u = x | b; /* add the digit to the end */
- }
- if (overflowed) {
- n *= nvshift[shift];
- /* If an NV has not enough bits in its
- * mantissa to represent an UV this summing of
- * small low-order numbers is a waste of time
- * (because the NV cannot preserve the
- * low-order bits anyway): we could just
- * remember when did we overflow and in the
- * end just multiply n by the right
- * amount. */
- n += (NV) b;
- }
- break;
- }
- }
-
- /* if we get here, we had success: make a scalar value from
- the number.
- */
- out:
- sv = NEWSV(92,0);
- if (overflowed) {
- if (ckWARN(WARN_PORTABLE) && n > 4294967295.0)
- Perl_warner(aTHX_ WARN_PORTABLE,
- "%s number > %s non-portable",
- Base, max);
- sv_setnv(sv, n);
- }
- else {
-#if UVSIZE > 4
- if (ckWARN(WARN_PORTABLE) && u > 0xffffffff)
- Perl_warner(aTHX_ WARN_PORTABLE,
- "%s number > %s non-portable",
- Base, max);
-#endif
- sv_setuv(sv, u);
- }
- if (PL_hints & HINT_NEW_BINARY)
- sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
- }
- break;
-
- /*
- handle decimal numbers.
- we're also sent here when we read a 0 as the first digit
- */
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9': case '.':
- decimal:
- d = PL_tokenbuf;
- e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
- floatit = FALSE;
-
- /* read next group of digits and _ and copy into d */
- while (isDIGIT(*s) || *s == '_') {
- /* skip underscores, checking for misplaced ones
- if -w is on
- */
- if (*s == '_') {
- if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
- Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
- lastub = ++s;
- }
- else {
- /* check for end of fixed-length buffer */
- if (d >= e)
- Perl_croak(aTHX_ number_too_long);
- /* if we're ok, copy the character */
- *d++ = *s++;
- }
- }
-
- /* final misplaced underbar check */
- if (lastub && s - lastub != 3) {
- if (ckWARN(WARN_SYNTAX))
- Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
- }
-
- /* read a decimal portion if there is one. avoid
- 3..5 being interpreted as the number 3. followed
- by .5
- */
- if (*s == '.' && s[1] != '.') {
- floatit = TRUE;
- *d++ = *s++;
-
- /* copy, ignoring underbars, until we run out of
- digits. Note: no misplaced underbar checks!
- */
- for (; isDIGIT(*s) || *s == '_'; s++) {
- /* fixed length buffer check */
- if (d >= e)
- Perl_croak(aTHX_ number_too_long);
- if (*s != '_')
- *d++ = *s;
- }
- if (*s == '.' && isDIGIT(s[1])) {
- /* oops, it's really a v-string, but without the "v" */
- s = start - 1;
- goto vstring;
- }
- }
-
- /* read exponent part, if present */
- if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
- floatit = TRUE;
- s++;
-
- /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
- *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
-
- /* allow positive or negative exponent */
- if (*s == '+' || *s == '-')
- *d++ = *s++;
-
- /* read digits of exponent (no underbars :-) */
- while (isDIGIT(*s)) {
- if (d >= e)
- Perl_croak(aTHX_ number_too_long);
- *d++ = *s++;
- }
- }
-
- /* terminate the string */
- *d = '\0';
-
- /* make an sv from the string */
- sv = NEWSV(92,0);
-
-#if defined(Strtol) && defined(Strtoul)
-
- /*
- strtol/strtoll sets errno to ERANGE if the number is too big
- for an integer. We try to do an integer conversion first
- if no characters indicating "float" have been found.
- */
-
- if (!floatit) {
- IV iv;
- UV uv;
- errno = 0;
- if (*PL_tokenbuf == '-')
- iv = Strtol(PL_tokenbuf, (char**)NULL, 10);
- else
- uv = Strtoul(PL_tokenbuf, (char**)NULL, 10);
- if (errno)
- floatit = TRUE; /* Probably just too large. */
- else if (*PL_tokenbuf == '-')
- sv_setiv(sv, iv);
- else if (uv <= IV_MAX)
- sv_setiv(sv, uv); /* Prefer IVs over UVs. */
- else
- sv_setuv(sv, uv);
- }
- if (floatit) {
- nv = Atof(PL_tokenbuf);
- sv_setnv(sv, nv);
- }
-#else
- /*
- No working strtou?ll?.
-
- Unfortunately atol() doesn't do range checks (returning
- LONG_MIN/LONG_MAX, and setting errno to ERANGE on overflows)
- everywhere [1], so we cannot use use atol() (or atoll()).
- If we could, they would be used, as Atol(), very much like
- Strtol() and Strtoul() are used above.
-
- [1] XXX Configure test needed to check for atol()
- (and atoll()) overflow behaviour XXX
-
- --jhi
-
- We need to do this the hard way. */
-
- nv = Atof(PL_tokenbuf);
-
- /* See if we can make do with an integer value without loss of
- precision. We use U_V to cast to a UV, because some
- compilers have issues. Then we try casting it back and see
- if it was the same [1]. We only do this if we know we
- specifically read an integer. If floatit is true, then we
- don't need to do the conversion at all.
-
- [1] Note that this is lossy if our NVs cannot preserve our
- UVs. There are metaconfig defines NV_PRESERVES_UV (a boolean)
- and NV_PRESERVES_UV_BITS (a number), but in general we really
- do hope all such potentially lossy platforms have strtou?ll?
- to do a lossless IV/UV conversion.
-
- Maybe could do some tricks with DBL_DIG, LDBL_DIG and
- DBL_MANT_DIG and LDBL_MANT_DIG (these are already available
- as NV_DIG and NV_MANT_DIG)?
-
- --jhi
- */
- {
- UV uv = U_V(nv);
- if (!floatit && (NV)uv == nv) {
- if (uv <= IV_MAX)
- sv_setiv(sv, uv); /* Prefer IVs over UVs. */
- else
- sv_setuv(sv, uv);
- }
- else
- sv_setnv(sv, nv);
- }
-#endif
- if ( floatit ? (PL_hints & HINT_NEW_FLOAT) :
- (PL_hints & HINT_NEW_INTEGER) )
- sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
- (floatit ? "float" : "integer"),
- sv, Nullsv, NULL);
- break;
-
- /* if it starts with a v, it could be a v-string */
- case 'v':
-vstring:
- {
- char *pos = s;
- pos++;
- while (isDIGIT(*pos) || *pos == '_')
- pos++;
- if (!isALPHA(*pos)) {
- UV rev;
- U8 tmpbuf[UTF8_MAXLEN+1];
- U8 *tmpend;
- bool utf8 = FALSE;
- s++; /* get past 'v' */
-
- sv = NEWSV(92,5);
- sv_setpvn(sv, "", 0);
-
- for (;;) {
- if (*s == '0' && isDIGIT(s[1]))
- yyerror("Octal number in vector unsupported");
- rev = 0;
- {
- /* this is atoi() that tolerates underscores */
- char *end = pos;
- UV mult = 1;
- while (--end >= s) {
- UV orev;
- if (*end == '_')
- continue;
- orev = rev;
- rev += (*end - '0') * mult;
- mult *= 10;
- if (orev > rev && ckWARN_d(WARN_OVERFLOW))
- Perl_warner(aTHX_ WARN_OVERFLOW,
- "Integer overflow in decimal number");
- }
- }
- tmpend = uv_to_utf8(tmpbuf, rev);
- utf8 = utf8 || rev > 127;
- sv_catpvn(sv, (const char*)tmpbuf, tmpend - tmpbuf);
- if (*pos == '.' && isDIGIT(pos[1]))
- s = ++pos;
- else {
- s = pos;
- break;
- }
- while (isDIGIT(*pos) || *pos == '_')
- pos++;
- }
-
- SvPOK_on(sv);
- SvREADONLY_on(sv);
- if (utf8) {
- SvUTF8_on(sv);
- if (!UTF||IN_BYTE)
- sv_utf8_downgrade(sv, TRUE);
- }
- }
- }
- break;
- }
-
- /* make the op for the constant and return */
-
- if (sv)
- lvalp->opval = newSVOP(OP_CONST, 0, sv);
- else
- lvalp->opval = Nullop;
-
- return s;
-}
-
-STATIC char *
-S_scan_formline(pTHX_ register char *s)
-{
- register char *eol;
- register char *t;
- SV *stuff = newSVpvn("",0);
- bool needargs = FALSE;
-
- while (!needargs) {
- if (*s == '.' || *s == /*{*/'}') {
- /*SUPPRESS 530*/
-#ifdef PERL_STRICT_CR
- for (t = s+1;SPACE_OR_TAB(*t); t++) ;
-#else
- for (t = s+1;SPACE_OR_TAB(*t) || *t == '\r'; t++) ;
-#endif
- if (*t == '\n' || t == PL_bufend)
- break;
- }
- if (PL_in_eval && !PL_rsfp) {
- eol = strchr(s,'\n');
- if (!eol++)
- eol = PL_bufend;
- }
- else
- eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- if (*s != '#') {
- for (t = s; t < eol; t++) {
- if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
- needargs = FALSE;
- goto enough; /* ~~ must be first line in formline */
- }
- if (*t == '@' || *t == '^')
- needargs = TRUE;
- }
- sv_catpvn(stuff, s, eol-s);
-#ifndef PERL_STRICT_CR
- if (eol-s > 1 && eol[-2] == '\r' && eol[-1] == '\n') {
- char *end = SvPVX(stuff) + SvCUR(stuff);
- end[-2] = '\n';
- end[-1] = '\0';
- SvCUR(stuff)--;
- }
-#endif
- }
- s = eol;
- if (PL_rsfp) {
- s = filter_gets(PL_linestr, PL_rsfp, 0);
- PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = PL_bufptr + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = Nullch;
- if (!s) {
- s = PL_bufptr;
- yyerror("Format not terminated");
- break;
- }
- }
- incline(s);
- }
- enough:
- if (SvCUR(stuff)) {
- PL_expect = XTERM;
- if (needargs) {
- PL_lex_state = LEX_NORMAL;
- PL_nextval[PL_nexttoke].ival = 0;
- force_next(',');
- }
- else
- PL_lex_state = LEX_FORMLINE;
- PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
- force_next(THING);
- PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
- force_next(LSTOP);
- }
- else {
- SvREFCNT_dec(stuff);
- PL_lex_formbrack = 0;
- PL_bufptr = s;
- }
- return s;
-}
-
-STATIC void
-S_set_csh(pTHX)
-{
-#ifdef CSH
- if (!PL_cshlen)
- PL_cshlen = strlen(PL_cshname);
-#endif
-}
-
-I32
-Perl_start_subparse(pTHX_ I32 is_format, U32 flags)
-{
- I32 oldsavestack_ix = PL_savestack_ix;
- CV* outsidecv = PL_compcv;
- AV* comppadlist;
-
- if (PL_compcv) {
- assert(SvTYPE(PL_compcv) == SVt_PVCV);
- }
- SAVEI32(PL_subline);
- save_item(PL_subname);
- SAVEI32(PL_padix);
- SAVECOMPPAD();
- SAVESPTR(PL_comppad_name);
- SAVESPTR(PL_compcv);
- SAVEI32(PL_comppad_name_fill);
- SAVEI32(PL_min_intro_pending);
- SAVEI32(PL_max_intro_pending);
- SAVEI32(PL_pad_reset_pending);
-
- PL_compcv = (CV*)NEWSV(1104,0);
- sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
- CvFLAGS(PL_compcv) |= flags;
-
- PL_comppad = newAV();
- av_push(PL_comppad, Nullsv);
- PL_curpad = AvARRAY(PL_comppad);
- PL_comppad_name = newAV();
- PL_comppad_name_fill = 0;
- PL_min_intro_pending = 0;
- PL_padix = 0;
- PL_subline = CopLINE(PL_curcop);
-#ifdef USE_THREADS
- av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
- PL_curpad[0] = (SV*)newAV();
- SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
-#endif /* USE_THREADS */
-
- comppadlist = newAV();
- AvREAL_off(comppadlist);
- av_store(comppadlist, 0, (SV*)PL_comppad_name);
- av_store(comppadlist, 1, (SV*)PL_comppad);
-
- CvPADLIST(PL_compcv) = comppadlist;
- CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
-#ifdef USE_THREADS
- CvOWNER(PL_compcv) = 0;
- New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
- MUTEX_INIT(CvMUTEXP(PL_compcv));
-#endif /* USE_THREADS */
-
- return oldsavestack_ix;
-}
-
-#ifdef __SC__
-#pragma segment Perl_yylex
-#endif
-int
-Perl_yywarn(pTHX_ char *s)
-{
- PL_in_eval |= EVAL_WARNONLY;
- yyerror(s);
- PL_in_eval &= ~EVAL_WARNONLY;
- return 0;
-}
-
-int
-Perl_yyerror(pTHX_ char *s)
-{
- char *where = NULL;
- char *context = NULL;
- int contlen = -1;
- SV *msg;
-
- if (!yychar || (yychar == ';' && !PL_rsfp))
- where = "at EOF";
- else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
- PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
- while (isSPACE(*PL_oldoldbufptr))
- PL_oldoldbufptr++;
- context = PL_oldoldbufptr;
- contlen = PL_bufptr - PL_oldoldbufptr;
- }
- else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
- PL_oldbufptr != PL_bufptr) {
- while (isSPACE(*PL_oldbufptr))
- PL_oldbufptr++;
- context = PL_oldbufptr;
- contlen = PL_bufptr - PL_oldbufptr;
- }
- else if (yychar > 255)
- where = "next token ???";
-#ifdef USE_PURE_BISON
-/* GNU Bison sets the value -2 */
- else if (yychar == -2) {
-#else
- else if ((yychar & 127) == 127) {
-#endif
- if (PL_lex_state == LEX_NORMAL ||
- (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
- where = "at end of line";
- else if (PL_lex_inpat)
- where = "within pattern";
- else
- where = "within string";
- }
- else {
- SV *where_sv = sv_2mortal(newSVpvn("next char ", 10));
- if (yychar < 32)
- Perl_sv_catpvf(aTHX_ where_sv, "^%c", toCTRL(yychar));
- else if (isPRINT_LC(yychar))
- Perl_sv_catpvf(aTHX_ where_sv, "%c", yychar);
- else
- Perl_sv_catpvf(aTHX_ where_sv, "\\%03o", yychar & 255);
- where = SvPVX(where_sv);
- }
- msg = sv_2mortal(newSVpv(s, 0));
- Perl_sv_catpvf(aTHX_ msg, " at %s line %"IVdf", ",
- CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
- if (context)
- Perl_sv_catpvf(aTHX_ msg, "near \"%.*s\"\n", contlen, context);
- else
- Perl_sv_catpvf(aTHX_ msg, "%s\n", where);
- if (PL_multi_start < PL_multi_end && (U32)(CopLINE(PL_curcop) - PL_multi_end) <= 1) {
- Perl_sv_catpvf(aTHX_ msg,
- " (Might be a runaway multi-line %c%c string starting on line %"IVdf")\n",
- (int)PL_multi_open,(int)PL_multi_close,(IV)PL_multi_start);
- PL_multi_end = 0;
- }
- if (PL_in_eval & EVAL_WARNONLY)
- Perl_warn(aTHX_ "%"SVf, msg);
- else
- qerror(msg);
- if (PL_error_count >= 10) {
- if (PL_in_eval && SvCUR(ERRSV))
- Perl_croak(aTHX_ "%"SVf"%s has too many errors.\n",
- ERRSV, CopFILE(PL_curcop));
- else
- Perl_croak(aTHX_ "%s has too many errors.\n",
- CopFILE(PL_curcop));
- }
- PL_in_my = 0;
- PL_in_my_stash = Nullhv;
- return 0;
-}
-#ifdef __SC__
-#pragma segment Main
-#endif
-
-STATIC char*
-S_swallow_bom(pTHX_ U8 *s)
-{
- STRLEN slen;
- slen = SvCUR(PL_linestr);
- switch (*s) {
- case 0xFF:
- if (s[1] == 0xFE) {
- /* UTF-16 little-endian */
- if (s[2] == 0 && s[3] == 0) /* UTF-32 little-endian */
- Perl_croak(aTHX_ "Unsupported script encoding");
-#ifndef PERL_NO_UTF16_FILTER
- DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-LE script encoding\n"));
- s += 2;
- if (PL_bufend > (char*)s) {
- U8 *news;
- I32 newlen;
-
- filter_add(utf16rev_textfilter, NULL);
- New(898, news, (PL_bufend - (char*)s) * 3 / 2 + 1, U8);
- PL_bufend = (char*)utf16_to_utf8_reversed(s, news,
- PL_bufend - (char*)s - 1,
- &newlen);
- Copy(news, s, newlen, U8);
- SvCUR_set(PL_linestr, newlen);
- PL_bufend = SvPVX(PL_linestr) + newlen;
- news[newlen++] = '\0';
- Safefree(news);
- }
-#else
- Perl_croak(aTHX_ "Unsupported script encoding");
-#endif
- }
- break;
-
- case 0xFE:
- if (s[1] == 0xFF) { /* UTF-16 big-endian */
-#ifndef PERL_NO_UTF16_FILTER
- DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-16BE script encoding\n"));
- s += 2;
- if (PL_bufend > (char *)s) {
- U8 *news;
- I32 newlen;
-
- filter_add(utf16_textfilter, NULL);
- New(898, news, (PL_bufend - (char*)s) * 3 / 2 + 1, U8);
- PL_bufend = (char*)utf16_to_utf8(s, news,
- PL_bufend - (char*)s,
- &newlen);
- Copy(news, s, newlen, U8);
- SvCUR_set(PL_linestr, newlen);
- PL_bufend = SvPVX(PL_linestr) + newlen;
- news[newlen++] = '\0';
- Safefree(news);
- }
-#else
- Perl_croak(aTHX_ "Unsupported script encoding");
-#endif
- }
- break;
-
- case 0xEF:
- if (slen > 2 && s[1] == 0xBB && s[2] == 0xBF) {
- DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-8 script encoding\n"));
- s += 3; /* UTF-8 */
- }
- break;
- case 0:
- if (slen > 3 && s[1] == 0 && /* UTF-32 big-endian */
- s[2] == 0xFE && s[3] == 0xFF)
- {
- Perl_croak(aTHX_ "Unsupported script encoding");
- }
- }
- return (char*)s;
-}
-
-#ifdef PERL_OBJECT
-#include "XSUB.h"
-#endif
-
-/*
- * restore_rsfp
- * Restore a source filter.
- */
-
-static void
-restore_rsfp(pTHXo_ void *f)
-{
- PerlIO *fp = (PerlIO*)f;
-
- if (PL_rsfp == PerlIO_stdin())
- PerlIO_clearerr(PL_rsfp);
- else if (PL_rsfp && (PL_rsfp != fp))
- PerlIO_close(PL_rsfp);
- PL_rsfp = fp;
-}
-
-#ifndef PERL_NO_UTF16_FILTER
-static I32
-utf16_textfilter(pTHXo_ int idx, SV *sv, int maxlen)
-{
- I32 count = FILTER_READ(idx+1, sv, maxlen);
- if (count) {
- U8* tmps;
- U8* tend;
- I32 newlen;
- New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
- if (!*SvPV_nolen(sv))
- /* Game over, but don't feed an odd-length string to utf16_to_utf8 */
- return count;
-
- tend = utf16_to_utf8((U8*)SvPVX(sv), tmps, SvCUR(sv), &newlen);
- sv_usepvn(sv, (char*)tmps, tend - tmps);
- }
- return count;
-}
-
-static I32
-utf16rev_textfilter(pTHXo_ int idx, SV *sv, int maxlen)
-{
- I32 count = FILTER_READ(idx+1, sv, maxlen);
- if (count) {
- U8* tmps;
- U8* tend;
- I32 newlen;
- if (!*SvPV_nolen(sv))
- /* Game over, but don't feed an odd-length string to utf16_to_utf8 */
- return count;
-
- New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
- tend = utf16_to_utf8_reversed((U8*)SvPVX(sv), tmps, SvCUR(sv), &newlen);
- sv_usepvn(sv, (char*)tmps, tend - tmps);
- }
- return count;
-}
-#endif
diff --git a/contrib/perl5/universal.c b/contrib/perl5/universal.c
deleted file mode 100644
index 12d31e5..0000000
--- a/contrib/perl5/universal.c
+++ /dev/null
@@ -1,301 +0,0 @@
-#include "EXTERN.h"
-#define PERL_IN_UNIVERSAL_C
-#include "perl.h"
-
-/*
- * Contributed by Graham Barr <Graham.Barr@tiuk.ti.com>
- * The main guts of traverse_isa was actually copied from gv_fetchmeth
- */
-
-STATIC SV *
-S_isa_lookup(pTHX_ HV *stash, const char *name, int len, int level)
-{
- AV* av;
- GV* gv;
- GV** gvp;
- HV* hv = Nullhv;
- SV* subgen = Nullsv;
-
- if (!stash)
- return &PL_sv_undef;
-
- if (strEQ(HvNAME(stash), name))
- return &PL_sv_yes;
-
- if (level > 100)
- Perl_croak(aTHX_ "Recursive inheritance detected in package '%s'",
- HvNAME(stash));
-
- gvp = (GV**)hv_fetch(stash, "::ISA::CACHE::", 14, FALSE);
-
- if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (subgen = GvSV(gv))
- && (hv = GvHV(gv)))
- {
- if (SvIV(subgen) == PL_sub_generation) {
- SV* sv;
- SV** svp = (SV**)hv_fetch(hv, name, len, FALSE);
- if (svp && (sv = *svp) != (SV*)&PL_sv_undef) {
- DEBUG_o( Perl_deb(aTHX_ "Using cached ISA %s for package %s\n",
- name, HvNAME(stash)) );
- return sv;
- }
- }
- else {
- DEBUG_o( Perl_deb(aTHX_ "ISA Cache in package %s is stale\n",
- HvNAME(stash)) );
- hv_clear(hv);
- sv_setiv(subgen, PL_sub_generation);
- }
- }
-
- gvp = (GV**)hv_fetch(stash,"ISA",3,FALSE);
-
- if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
- if (!hv || !subgen) {
- gvp = (GV**)hv_fetch(stash, "::ISA::CACHE::", 14, TRUE);
-
- gv = *gvp;
-
- if (SvTYPE(gv) != SVt_PVGV)
- gv_init(gv, stash, "::ISA::CACHE::", 14, TRUE);
-
- if (!hv)
- hv = GvHVn(gv);
- if (!subgen) {
- subgen = newSViv(PL_sub_generation);
- GvSV(gv) = subgen;
- }
- }
- if (hv) {
- SV** svp = AvARRAY(av);
- /* NOTE: No support for tied ISA */
- I32 items = AvFILLp(av) + 1;
- while (items--) {
- SV* sv = *svp++;
- HV* basestash = gv_stashsv(sv, FALSE);
- if (!basestash) {
- if (ckWARN(WARN_MISC))
- Perl_warner(aTHX_ WARN_SYNTAX,
- "Can't locate package %s for @%s::ISA",
- SvPVX(sv), HvNAME(stash));
- continue;
- }
- if (&PL_sv_yes == isa_lookup(basestash, name, len, level + 1)) {
- (void)hv_store(hv,name,len,&PL_sv_yes,0);
- return &PL_sv_yes;
- }
- }
- (void)hv_store(hv,name,len,&PL_sv_no,0);
- }
- }
-
- return boolSV(strEQ(name, "UNIVERSAL"));
-}
-
-/*
-=for apidoc sv_derived_from
-
-Returns a boolean indicating whether the SV is derived from the specified
-class. This is the function that implements C<UNIVERSAL::isa>. It works
-for class names as well as for objects.
-
-=cut
-*/
-
-bool
-Perl_sv_derived_from(pTHX_ SV *sv, const char *name)
-{
- char *type;
- HV *stash;
-
- stash = Nullhv;
- type = Nullch;
-
- if (SvGMAGICAL(sv))
- mg_get(sv) ;
-
- if (SvROK(sv)) {
- sv = SvRV(sv);
- type = sv_reftype(sv,0);
- if (SvOBJECT(sv))
- stash = SvSTASH(sv);
- }
- else {
- stash = gv_stashsv(sv, FALSE);
- }
-
- return (type && strEQ(type,name)) ||
- (stash && isa_lookup(stash, name, strlen(name), 0) == &PL_sv_yes)
- ? TRUE
- : FALSE ;
-}
-
-void XS_UNIVERSAL_isa(pTHXo_ CV *cv);
-void XS_UNIVERSAL_can(pTHXo_ CV *cv);
-void XS_UNIVERSAL_VERSION(pTHXo_ CV *cv);
-
-void
-Perl_boot_core_UNIVERSAL(pTHX)
-{
- char *file = __FILE__;
-
- newXS("UNIVERSAL::isa", XS_UNIVERSAL_isa, file);
- newXS("UNIVERSAL::can", XS_UNIVERSAL_can, file);
- newXS("UNIVERSAL::VERSION", XS_UNIVERSAL_VERSION, file);
-}
-
-#include "XSUB.h"
-
-XS(XS_UNIVERSAL_isa)
-{
- dXSARGS;
- SV *sv;
- char *name;
- STRLEN n_a;
-
- if (items != 2)
- Perl_croak(aTHX_ "Usage: UNIVERSAL::isa(reference, kind)");
-
- sv = ST(0);
-
- if (SvGMAGICAL(sv))
- mg_get(sv);
-
- if (!SvOK(sv) || !(SvROK(sv) || (SvPOK(sv) && SvCUR(sv))))
- XSRETURN_UNDEF;
-
- name = (char *)SvPV(ST(1),n_a);
-
- ST(0) = boolSV(sv_derived_from(sv, name));
- XSRETURN(1);
-}
-
-XS(XS_UNIVERSAL_can)
-{
- dXSARGS;
- SV *sv;
- char *name;
- SV *rv;
- HV *pkg = NULL;
- STRLEN n_a;
-
- if (items != 2)
- Perl_croak(aTHX_ "Usage: UNIVERSAL::can(object-ref, method)");
-
- sv = ST(0);
-
- if (SvGMAGICAL(sv))
- mg_get(sv);
-
- if (!SvOK(sv) || !(SvROK(sv) || (SvPOK(sv) && SvCUR(sv))))
- XSRETURN_UNDEF;
-
- name = (char *)SvPV(ST(1),n_a);
- rv = &PL_sv_undef;
-
- if (SvROK(sv)) {
- sv = (SV*)SvRV(sv);
- if (SvOBJECT(sv))
- pkg = SvSTASH(sv);
- }
- else {
- pkg = gv_stashsv(sv, FALSE);
- }
-
- if (pkg) {
- GV *gv = gv_fetchmethod_autoload(pkg, name, FALSE);
- if (gv && isGV(gv))
- rv = sv_2mortal(newRV((SV*)GvCV(gv)));
- }
-
- ST(0) = rv;
- XSRETURN(1);
-}
-
-XS(XS_UNIVERSAL_VERSION)
-{
- dXSARGS;
- HV *pkg;
- GV **gvp;
- GV *gv;
- SV *sv;
- char *undef;
-
- if (SvROK(ST(0))) {
- sv = (SV*)SvRV(ST(0));
- if (!SvOBJECT(sv))
- Perl_croak(aTHX_ "Cannot find version of an unblessed reference");
- pkg = SvSTASH(sv);
- }
- else {
- pkg = gv_stashsv(ST(0), FALSE);
- }
-
- gvp = pkg ? (GV**)hv_fetch(pkg,"VERSION",7,FALSE) : Null(GV**);
-
- if (gvp && isGV(gv = *gvp) && SvOK(sv = GvSV(gv))) {
- SV *nsv = sv_newmortal();
- sv_setsv(nsv, sv);
- sv = nsv;
- undef = Nullch;
- }
- else {
- sv = (SV*)&PL_sv_undef;
- undef = "(undef)";
- }
-
- if (items > 1) {
- STRLEN len;
- SV *req = ST(1);
-
- if (undef)
- Perl_croak(aTHX_ "%s does not define $%s::VERSION--version check failed",
- HvNAME(pkg), HvNAME(pkg));
-
- if (!SvNIOK(sv) && SvPOK(sv)) {
- char *str = SvPVx(sv,len);
- while (len) {
- --len;
- /* XXX could DWIM "1.2.3" here */
- if (!isDIGIT(str[len]) && str[len] != '.' && str[len] != '_')
- break;
- }
- if (len) {
- if (SvNOK(req) && SvPOK(req)) {
- /* they said C<use Foo v1.2.3> and $Foo::VERSION
- * doesn't look like a float: do string compare */
- if (sv_cmp(req,sv) == 1) {
- Perl_croak(aTHX_ "%s v%"VDf" required--"
- "this is only v%"VDf,
- HvNAME(pkg), req, sv);
- }
- goto finish;
- }
- /* they said C<use Foo 1.002_003> and $Foo::VERSION
- * doesn't look like a float: force numeric compare */
- (void)SvUPGRADE(sv, SVt_PVNV);
- SvNVX(sv) = str_to_version(sv);
- SvPOK_off(sv);
- SvNOK_on(sv);
- }
- }
- /* if we get here, we're looking for a numeric comparison,
- * so force the required version into a float, even if they
- * said C<use Foo v1.2.3> */
- if (SvNOK(req) && SvPOK(req)) {
- NV n = SvNV(req);
- req = sv_newmortal();
- sv_setnv(req, n);
- }
-
- if (SvNV(req) > SvNV(sv))
- Perl_croak(aTHX_ "%s version %s required--this is only version %s",
- HvNAME(pkg), SvPV(req,len), SvPV(sv,len));
- }
-
-finish:
- ST(0) = sv;
-
- XSRETURN(1);
-}
-
diff --git a/contrib/perl5/unixish.h b/contrib/perl5/unixish.h
deleted file mode 100644
index ca0ab93..0000000
--- a/contrib/perl5/unixish.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * 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.
- */
-
-/* HAS_IOCTL:
- * This symbol, if defined, indicates that the ioctl() routine is
- * available to set I/O characteristics
- */
-#define HAS_IOCTL / **/
-
-/* HAS_UTIME:
- * This symbol, if defined, indicates that the routine utime() is
- * available to update the access and modification times of files.
- */
-#define HAS_UTIME / **/
-
-/* HAS_GROUP
- * This symbol, if defined, indicates that the getgrnam() and
- * getgrgid() routines are available to get group entries.
- * The getgrent() has a separate definition, HAS_GETGRENT.
- */
-#define HAS_GROUP / **/
-
-/* HAS_PASSWD
- * This symbol, if defined, indicates that the getpwnam() and
- * getpwuid() routines are available to get password entries.
- * The getpwent() has a separate definition, HAS_GETPWENT.
- */
-#define HAS_PASSWD / **/
-
-#define HAS_KILL
-#define HAS_WAIT
-
-/* USEMYBINMODE
- * This symbol, if defined, indicates that the program should
- * use the routine my_binmode(FILE *fp, char iotype) to insure
- * that a file is in "binary" mode -- that is, that no translation
- * of bytes occurs on read or write operations.
- */
-#undef USEMYBINMODE
-
-/* Stat_t:
- * This symbol holds the type used to declare buffers for information
- * returned by stat(). It's usually just struct stat. It may be necessary
- * to include <sys/stat.h> and <sys/types.h> to get any typedef'ed
- * information.
- */
-#define Stat_t struct stat
-
-/* USE_STAT_RDEV:
- * This symbol is defined if this system has a stat structure declaring
- * st_rdev
- */
-#define USE_STAT_RDEV / **/
-
-/* ACME_MESS:
- * This symbol, if defined, indicates that error messages should be
- * should be generated in a format that allows the use of the Acme
- * GUI/editor's autofind feature.
- */
-#undef ACME_MESS /**/
-
-/* UNLINK_ALL_VERSIONS:
- * This symbol, if defined, indicates that the program should arrange
- * to remove all versions of a file if unlink() is called. This is
- * probably only relevant for VMS.
- */
-/* #define UNLINK_ALL_VERSIONS / **/
-
-/* VMS:
- * This symbol, if defined, indicates that the program is running under
- * VMS. It is currently automatically set by cpps running under VMS,
- * and is included here for completeness only.
- */
-/* #define VMS / **/
-
-/* ALTERNATE_SHEBANG:
- * This symbol, if defined, contains a "magic" string which may be used
- * as the first line of a Perl program designed to be executed directly
- * by name, instead of the standard Unix #!. If ALTERNATE_SHEBANG
- * begins with a character other then #, then Perl will only treat
- * it as a command line if if finds the string "perl" in the first
- * word; otherwise it's treated as the first line of code in the script.
- * (IOW, Perl won't hand off to another interpreter via an alternate
- * shebang sequence that might be legal Perl code.)
- */
-/* #define ALTERNATE_SHEBANG "#!" / **/
-
-#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX) || defined(__NetBSD__)
-# include <signal.h>
-#endif
-
-#ifndef SIGABRT
-# define SIGABRT SIGILL
-#endif
-#ifndef SIGILL
-# define SIGILL 6 /* blech */
-#endif
-#define ABORT() kill(PerlProc_getpid(),SIGABRT);
-
-/*
- * fwrite1() should be a routine with the same calling sequence as fwrite(),
- * but which outputs all of the bytes requested as a single stream (unlike
- * fwrite() itself, which on some systems outputs several distinct records
- * if the number_of_items parameter is >1).
- */
-#define fwrite1 fwrite
-
-#define Stat(fname,bufptr) stat((fname),(bufptr))
-#define Fstat(fd,bufptr) fstat((fd),(bufptr))
-#define Fflush(fp) fflush(fp)
-#define Mkdir(path,mode) mkdir((path),(mode))
-
-/* these should be set in a hint file, not here */
-#ifndef PERL_SYS_INIT
-#if defined(PERL_SCO5) || defined(__FreeBSD__)
-# ifdef __FreeBSD__
-# include <floatingpoint.h>
-# endif
-# define PERL_SYS_INIT(c,v) fpsetmask(0); MALLOC_INIT
-#else
-# ifdef POSIX_BC
-# define PERL_SYS_INIT(c,v) sigignore(SIGFPE); MALLOC_INIT
-# else
-# define PERL_SYS_INIT(c,v) MALLOC_INIT
-# endif
-#endif
-#endif
-
-#ifndef PERL_SYS_TERM
-#define PERL_SYS_TERM() OP_REFCNT_TERM; MALLOC_TERM
-#endif
-
-#define BIT_BUCKET "/dev/null"
-
-#define dXSUB_SYS
-
-#define USE_ENVIRON_ARRAY
-
diff --git a/contrib/perl5/utf8.c b/contrib/perl5/utf8.c
deleted file mode 100644
index 077d36d..0000000
--- a/contrib/perl5/utf8.c
+++ /dev/null
@@ -1,1321 +0,0 @@
-/* utf8.c
- *
- * Copyright (c) 1998-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * 'What a fix!' said Sam. 'That's the one place in all the lands we've ever
- * heard of that we don't want to see any closer; and that's the one place
- * we're trying to get to! And that's just where we can't get, nohow.'
- *
- * 'Well do I understand your speech,' he answered in the same language;
- * 'yet few strangers do so. Why then do you not speak in the Common Tongue,
- * as is the custom in the West, if you wish to be answered?'
- *
- * ...the travellers perceived that the floor was paved with stones of many
- * hues; branching runes and strange devices intertwined beneath their feet.
- */
-
-#include "EXTERN.h"
-#define PERL_IN_UTF8_C
-#include "perl.h"
-
-/* Unicode support */
-
-/*
-=for apidoc A|U8*|uv_to_utf8|U8 *d|UV uv
-
-Adds the UTF8 representation of the Unicode codepoint C<uv> to the end
-of the string C<d>; C<d> should be have at least C<UTF8_MAXLEN+1> free
-bytes available. The return value is the pointer to the byte after the
-end of the new character. In other words,
-
- d = uv_to_utf8(d, uv);
-
-is the recommended Unicode-aware way of saying
-
- *(d++) = uv;
-
-=cut
-*/
-
-U8 *
-Perl_uv_to_utf8(pTHX_ U8 *d, UV uv)
-{
- if (uv < 0x80) {
- *d++ = uv;
- return d;
- }
- if (uv < 0x800) {
- *d++ = (( uv >> 6) | 0xc0);
- *d++ = (( uv & 0x3f) | 0x80);
- return d;
- }
- if (uv < 0x10000) {
- *d++ = (( uv >> 12) | 0xe0);
- *d++ = (((uv >> 6) & 0x3f) | 0x80);
- *d++ = (( uv & 0x3f) | 0x80);
- return d;
- }
- if (uv < 0x200000) {
- *d++ = (( uv >> 18) | 0xf0);
- *d++ = (((uv >> 12) & 0x3f) | 0x80);
- *d++ = (((uv >> 6) & 0x3f) | 0x80);
- *d++ = (( uv & 0x3f) | 0x80);
- return d;
- }
- if (uv < 0x4000000) {
- *d++ = (( uv >> 24) | 0xf8);
- *d++ = (((uv >> 18) & 0x3f) | 0x80);
- *d++ = (((uv >> 12) & 0x3f) | 0x80);
- *d++ = (((uv >> 6) & 0x3f) | 0x80);
- *d++ = (( uv & 0x3f) | 0x80);
- return d;
- }
- if (uv < 0x80000000) {
- *d++ = (( uv >> 30) | 0xfc);
- *d++ = (((uv >> 24) & 0x3f) | 0x80);
- *d++ = (((uv >> 18) & 0x3f) | 0x80);
- *d++ = (((uv >> 12) & 0x3f) | 0x80);
- *d++ = (((uv >> 6) & 0x3f) | 0x80);
- *d++ = (( uv & 0x3f) | 0x80);
- return d;
- }
-#ifdef HAS_QUAD
- if (uv < UTF8_QUAD_MAX)
-#endif
- {
- *d++ = 0xfe; /* Can't match U+FEFF! */
- *d++ = (((uv >> 30) & 0x3f) | 0x80);
- *d++ = (((uv >> 24) & 0x3f) | 0x80);
- *d++ = (((uv >> 18) & 0x3f) | 0x80);
- *d++ = (((uv >> 12) & 0x3f) | 0x80);
- *d++ = (((uv >> 6) & 0x3f) | 0x80);
- *d++ = (( uv & 0x3f) | 0x80);
- return d;
- }
-#ifdef HAS_QUAD
- {
- *d++ = 0xff; /* Can't match U+FFFE! */
- *d++ = 0x80; /* 6 Reserved bits */
- *d++ = (((uv >> 60) & 0x0f) | 0x80); /* 2 Reserved bits */
- *d++ = (((uv >> 54) & 0x3f) | 0x80);
- *d++ = (((uv >> 48) & 0x3f) | 0x80);
- *d++ = (((uv >> 42) & 0x3f) | 0x80);
- *d++ = (((uv >> 36) & 0x3f) | 0x80);
- *d++ = (((uv >> 30) & 0x3f) | 0x80);
- *d++ = (((uv >> 24) & 0x3f) | 0x80);
- *d++ = (((uv >> 18) & 0x3f) | 0x80);
- *d++ = (((uv >> 12) & 0x3f) | 0x80);
- *d++ = (((uv >> 6) & 0x3f) | 0x80);
- *d++ = (( uv & 0x3f) | 0x80);
- return d;
- }
-#endif
-}
-
-/*
-=for apidoc A|STRLEN|is_utf8_char|U8 *s
-
-Tests if some arbitrary number of bytes begins in a valid UTF-8 character.
-The actual number of bytes in the UTF-8 character will be returned if it
-is valid, otherwise 0.
-
-=cut
-*/
-STRLEN
-Perl_is_utf8_char(pTHX_ U8 *s)
-{
- U8 u = *s;
- STRLEN slen, len;
- UV uv, ouv;
-
- if (UTF8_IS_ASCII(u))
- return 1;
-
- if (!UTF8_IS_START(u))
- return 0;
-
- len = UTF8SKIP(s);
-
- if (len < 2 || !UTF8_IS_CONTINUATION(s[1]))
- return 0;
-
- slen = len - 1;
- s++;
- uv = u;
- ouv = uv;
- while (slen--) {
- if (!UTF8_IS_CONTINUATION(*s))
- return 0;
- uv = UTF8_ACCUMULATE(uv, *s);
- if (uv < ouv)
- return 0;
- ouv = uv;
- s++;
- }
-
- if (UNISKIP(uv) < len)
- return 0;
-
- return len;
-}
-
-/*
-=for apidoc A|bool|is_utf8_string|U8 *s|STRLEN len
-
-Returns true if first C<len> bytes of the given string form valid a UTF8
-string, false otherwise.
-
-=cut
-*/
-
-bool
-Perl_is_utf8_string(pTHX_ U8 *s, STRLEN len)
-{
- U8* x = s;
- U8* send;
- STRLEN c;
-
- if (!len)
- len = strlen((char *)s);
- send = s + len;
-
- while (x < send) {
- c = is_utf8_char(x);
- if (!c)
- return FALSE;
- x += c;
- }
- if (x != send)
- return FALSE;
-
- return TRUE;
-}
-
-/*
-=for apidoc A|U8* s|utf8_to_uv|STRLEN curlen|STRLEN *retlen|U32 flags
-
-Returns the character value of the first character in the string C<s>
-which is assumed to be in UTF8 encoding and no longer than C<curlen>;
-C<retlen> will be set to the length, in bytes, of that character.
-
-If C<s> does not point to a well-formed UTF8 character, the behaviour
-is dependent on the value of C<flags>: if it contains UTF8_CHECK_ONLY,
-it is assumed that the caller will raise a warning, and this function
-will silently just set C<retlen> to C<-1> and return zero. If the
-C<flags> does not contain UTF8_CHECK_ONLY, warnings about
-malformations will be given, C<retlen> will be set to the expected
-length of the UTF-8 character in bytes, and zero will be returned.
-
-The C<flags> can also contain various flags to allow deviations from
-the strict UTF-8 encoding (see F<utf8.h>).
-
-=cut */
-
-UV
-Perl_utf8_to_uv(pTHX_ U8* s, STRLEN curlen, STRLEN* retlen, U32 flags)
-{
- UV uv = *s, ouv;
- STRLEN len = 1;
-#ifdef EBCDIC
- bool dowarn = 0;
-#else
- bool dowarn = ckWARN_d(WARN_UTF8);
-#endif
- STRLEN expectlen = 0;
- U32 warning = 0;
-
-/* This list is a superset of the UTF8_ALLOW_XXX. */
-
-#define UTF8_WARN_EMPTY 1
-#define UTF8_WARN_CONTINUATION 2
-#define UTF8_WARN_NON_CONTINUATION 3
-#define UTF8_WARN_FE_FF 4
-#define UTF8_WARN_SHORT 5
-#define UTF8_WARN_OVERFLOW 6
-#define UTF8_WARN_SURROGATE 7
-#define UTF8_WARN_BOM 8
-#define UTF8_WARN_LONG 9
-#define UTF8_WARN_FFFF 10
-
- if (curlen == 0 &&
- !(flags & UTF8_ALLOW_EMPTY)) {
- warning = UTF8_WARN_EMPTY;
- goto malformed;
- }
-
- if (UTF8_IS_ASCII(uv)) {
- if (retlen)
- *retlen = 1;
- return *s;
- }
-
- if (UTF8_IS_CONTINUATION(uv) &&
- !(flags & UTF8_ALLOW_CONTINUATION)) {
- warning = UTF8_WARN_CONTINUATION;
- goto malformed;
- }
-
- if (UTF8_IS_START(uv) && curlen > 1 && !UTF8_IS_CONTINUATION(s[1]) &&
- !(flags & UTF8_ALLOW_NON_CONTINUATION)) {
- warning = UTF8_WARN_NON_CONTINUATION;
- goto malformed;
- }
-
- if ((uv == 0xfe || uv == 0xff) &&
- !(flags & UTF8_ALLOW_FE_FF)) {
- warning = UTF8_WARN_FE_FF;
- goto malformed;
- }
-
- if (!(uv & 0x20)) { len = 2; uv &= 0x1f; }
- else if (!(uv & 0x10)) { len = 3; uv &= 0x0f; }
- else if (!(uv & 0x08)) { len = 4; uv &= 0x07; }
- else if (!(uv & 0x04)) { len = 5; uv &= 0x03; }
- else if (!(uv & 0x02)) { len = 6; uv &= 0x01; }
- else if (!(uv & 0x01)) { len = 7; uv = 0; }
- else { len = 13; uv = 0; } /* whoa! */
-
- if (retlen)
- *retlen = len;
-
- expectlen = len;
-
- if ((curlen < expectlen) &&
- !(flags & UTF8_ALLOW_SHORT)) {
- warning = UTF8_WARN_SHORT;
- goto malformed;
- }
-
- len--;
- s++;
- ouv = uv;
-
- while (len--) {
- if (!UTF8_IS_CONTINUATION(*s) &&
- !(flags & UTF8_ALLOW_NON_CONTINUATION)) {
- s--;
- warning = UTF8_WARN_NON_CONTINUATION;
- goto malformed;
- }
- else
- uv = UTF8_ACCUMULATE(uv, *s);
- if (!(uv > ouv)) {
- /* These cannot be allowed. */
- if (uv == ouv) {
- if (!(flags & UTF8_ALLOW_LONG)) {
- warning = UTF8_WARN_LONG;
- goto malformed;
- }
- }
- else { /* uv < ouv */
- /* This cannot be allowed. */
- warning = UTF8_WARN_OVERFLOW;
- goto malformed;
- }
- }
- s++;
- ouv = uv;
- }
-
- if (UNICODE_IS_SURROGATE(uv) &&
- !(flags & UTF8_ALLOW_SURROGATE)) {
- warning = UTF8_WARN_SURROGATE;
- goto malformed;
- } else if (UNICODE_IS_BYTE_ORDER_MARK(uv) &&
- !(flags & UTF8_ALLOW_BOM)) {
- warning = UTF8_WARN_BOM;
- goto malformed;
- } else if ((expectlen > UNISKIP(uv)) &&
- !(flags & UTF8_ALLOW_LONG)) {
- warning = UTF8_WARN_LONG;
- goto malformed;
- } else if (UNICODE_IS_ILLEGAL(uv) &&
- !(flags & UTF8_ALLOW_FFFF)) {
- warning = UTF8_WARN_FFFF;
- goto malformed;
- }
-
- return uv;
-
-malformed:
-
- if (flags & UTF8_CHECK_ONLY) {
- if (retlen)
- *retlen = -1;
- return 0;
- }
-
- if (dowarn) {
- SV* sv = sv_2mortal(newSVpv("Malformed UTF-8 character ", 0));
-
- switch (warning) {
- case 0: /* Intentionally empty. */ break;
- case UTF8_WARN_EMPTY:
- Perl_sv_catpvf(aTHX_ sv, "(empty string)");
- break;
- case UTF8_WARN_CONTINUATION:
- Perl_sv_catpvf(aTHX_ sv, "(unexpected continuation byte 0x%02"UVxf")", uv);
- break;
- case UTF8_WARN_NON_CONTINUATION:
- Perl_sv_catpvf(aTHX_ sv, "(unexpected non-continuation byte 0x%02"UVxf" after start byte 0x%02"UVxf")",
- (UV)s[1], uv);
- break;
- case UTF8_WARN_FE_FF:
- Perl_sv_catpvf(aTHX_ sv, "(byte 0x%02"UVxf")", uv);
- break;
- case UTF8_WARN_SHORT:
- Perl_sv_catpvf(aTHX_ sv, "(%d byte%s, need %d)",
- curlen, curlen == 1 ? "" : "s", expectlen);
- break;
- case UTF8_WARN_OVERFLOW:
- Perl_sv_catpvf(aTHX_ sv, "(overflow at 0x%"UVxf", byte 0x%02x)",
- ouv, *s);
- break;
- case UTF8_WARN_SURROGATE:
- Perl_sv_catpvf(aTHX_ sv, "(UTF-16 surrogate 0x%04"UVxf")", uv);
- break;
- case UTF8_WARN_BOM:
- Perl_sv_catpvf(aTHX_ sv, "(byte order mark 0x%04"UVxf")", uv);
- break;
- case UTF8_WARN_LONG:
- Perl_sv_catpvf(aTHX_ sv, "(%d byte%s, need %d)",
- expectlen, expectlen == 1 ? "": "s", UNISKIP(uv));
- break;
- case UTF8_WARN_FFFF:
- Perl_sv_catpvf(aTHX_ sv, "(character 0x%04"UVxf")", uv);
- break;
- default:
- Perl_sv_catpvf(aTHX_ sv, "(unknown reason)");
- break;
- }
-
- if (warning) {
- char *s = SvPVX(sv);
-
- if (PL_op)
- Perl_warner(aTHX_ WARN_UTF8,
- "%s in %s", s, PL_op_desc[PL_op->op_type]);
- else
- Perl_warner(aTHX_ WARN_UTF8, "%s", s);
- }
- }
-
- if (retlen)
- *retlen = expectlen ? expectlen : len;
-
- return 0;
-}
-
-/*
-=for apidoc A|U8* s|utf8_to_uv_simple|STRLEN *retlen
-
-Returns the character value of the first character in the string C<s>
-which is assumed to be in UTF8 encoding; C<retlen> will be set to the
-length, in bytes, of that character.
-
-If C<s> does not point to a well-formed UTF8 character, zero is
-returned and retlen is set, if possible, to -1.
-
-=cut
-*/
-
-UV
-Perl_utf8_to_uv_simple(pTHX_ U8* s, STRLEN* retlen)
-{
- return Perl_utf8_to_uv(aTHX_ s, UTF8_MAXLEN, retlen, 0);
-}
-
-/*
-=for apidoc A|STRLEN|utf8_length|U8* s|U8 *e
-
-Return the length of the UTF-8 char encoded string C<s> in characters.
-Stops at C<e> (inclusive). If C<e E<lt> s> or if the scan would end
-up past C<e>, croaks.
-
-=cut
-*/
-
-STRLEN
-Perl_utf8_length(pTHX_ U8* s, U8* e)
-{
- STRLEN len = 0;
-
- /* Note: cannot use UTF8_IS_...() too eagerly here since e.g.
- * the bitops (especially ~) can create illegal UTF-8.
- * In other words: in Perl UTF-8 is not just for Unicode. */
-
- if (e < s)
- Perl_croak(aTHX_ "panic: utf8_length: unexpected end");
- while (s < e) {
- U8 t = UTF8SKIP(s);
-
- if (e - s < t)
- Perl_croak(aTHX_ "panic: utf8_length: unaligned end");
- s += t;
- len++;
- }
-
- return len;
-}
-
-/*
-=for apidoc A|IV|utf8_distance|U8 *a|U8 *b
-
-Returns the number of UTF8 characters between the UTF-8 pointers C<a>
-and C<b>.
-
-WARNING: use only if you *know* that the pointers point inside the
-same UTF-8 buffer.
-
-=cut */
-
-IV
-Perl_utf8_distance(pTHX_ U8 *a, U8 *b)
-{
- IV off = 0;
-
- /* Note: cannot use UTF8_IS_...() too eagerly here since e.g.
- * the bitops (especially ~) can create illegal UTF-8.
- * In other words: in Perl UTF-8 is not just for Unicode. */
-
- if (a < b) {
- while (a < b) {
- U8 c = UTF8SKIP(a);
-
- if (b - a < c)
- Perl_croak(aTHX_ "panic: utf8_distance: unaligned end");
- a += c;
- off--;
- }
- }
- else {
- while (b < a) {
- U8 c = UTF8SKIP(b);
-
- if (a - b < c)
- Perl_croak(aTHX_ "panic: utf8_distance: unaligned end");
- b += c;
- off++;
- }
- }
-
- return off;
-}
-
-/*
-=for apidoc A|U8*|utf8_hop|U8 *s|I32 off
-
-Return the UTF-8 pointer C<s> displaced by C<off> characters, either
-forward or backward.
-
-WARNING: do not use the following unless you *know* C<off> is within
-the UTF-8 data pointed to by C<s> *and* that on entry C<s> is aligned
-on the first byte of character or just after the last byte of a character.
-
-=cut */
-
-U8 *
-Perl_utf8_hop(pTHX_ U8 *s, I32 off)
-{
- /* Note: cannot use UTF8_IS_...() too eagerly here since e.g
- * the bitops (especially ~) can create illegal UTF-8.
- * In other words: in Perl UTF-8 is not just for Unicode. */
-
- if (off >= 0) {
- while (off--)
- s += UTF8SKIP(s);
- }
- else {
- while (off++) {
- s--;
- while (UTF8_IS_CONTINUATION(*s))
- s--;
- }
- }
- return s;
-}
-
-/*
-=for apidoc A|U8 *|utf8_to_bytes|U8 *s|STRLEN *len
-
-Converts a string C<s> of length C<len> from UTF8 into byte encoding.
-Unlike C<bytes_to_utf8>, this over-writes the original string, and
-updates len to contain the new length.
-Returns zero on failure, setting C<len> to -1.
-
-=cut
-*/
-
-U8 *
-Perl_utf8_to_bytes(pTHX_ U8* s, STRLEN *len)
-{
- U8 *send;
- U8 *d;
- U8 *save = s;
-
- /* ensure valid UTF8 and chars < 256 before updating string */
- for (send = s + *len; s < send; ) {
- U8 c = *s++;
-
- if (c >= 0x80 &&
- ((s >= send) ||
- ((*s++ & 0xc0) != 0x80) || ((c & 0xfe) != 0xc2))) {
- *len = -1;
- return 0;
- }
- }
-
- d = s = save;
- while (s < send) {
- if (UTF8_IS_ASCII(*s)) {
- *d++ = *s++;
- }
- else {
- STRLEN ulen;
- *d++ = (U8)utf8_to_uv_simple(s, &ulen);
- s += ulen;
- }
- }
- *d = '\0';
- *len = d - save;
- return save;
-}
-
-/*
-=for apidoc A|U8 *|bytes_from_utf8|U8 *s|STRLEN *len|bool *is_utf8
-
-Converts a string C<s> of length C<len> from UTF8 into byte encoding.
-Unlike <utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
-the newly-created string, and updates C<len> to contain the new
-length. Returns the original string if no conversion occurs, C<len>
-is unchanged. Do nothing if C<is_utf8> points to 0. Sets C<is_utf8> to
-0 if C<s> is converted or contains all 7bit characters.
-
-=cut */
-
-U8 *
-Perl_bytes_from_utf8(pTHX_ U8* s, STRLEN *len, bool *is_utf8)
-{
- U8 *send;
- U8 *d;
- U8 *start = s;
- I32 count = 0;
-
- if (!*is_utf8)
- return start;
-
- /* ensure valid UTF8 and chars < 256 before converting string */
- for (send = s + *len; s < send;) {
- U8 c = *s++;
- if (!UTF8_IS_ASCII(c)) {
- if (UTF8_IS_CONTINUATION(c) || s >= send ||
- !UTF8_IS_CONTINUATION(*s) || UTF8_IS_DOWNGRADEABLE_START(c))
- return start;
- s++, count++;
- }
- }
-
- *is_utf8 = 0;
-
- if (!count)
- return start;
-
- Newz(801, d, (*len) - count + 1, U8);
- s = start; start = d;
- while (s < send) {
- U8 c = *s++;
-
- if (UTF8_IS_ASCII(c))
- *d++ = c;
- else
- *d++ = UTF8_ACCUMULATE(c, *s++);
- }
- *d = '\0';
- *len = d - start;
- return start;
-}
-
-/*
-=for apidoc A|U8 *|bytes_to_utf8|U8 *s|STRLEN *len
-
-Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
-Returns a pointer to the newly-created string, and sets C<len> to
-reflect the new length.
-
-=cut
-*/
-
-U8*
-Perl_bytes_to_utf8(pTHX_ U8* s, STRLEN *len)
-{
- U8 *send;
- U8 *d;
- U8 *dst;
- send = s + (*len);
-
- Newz(801, d, (*len) * 2 + 1, U8);
- dst = d;
-
- while (s < send) {
- if (UTF8_IS_ASCII(*s))
- *d++ = *s++;
- else {
- UV uv = *s++;
-
- *d++ = UTF8_EIGHT_BIT_HI(uv);
- *d++ = UTF8_EIGHT_BIT_LO(uv);
- }
- }
- *d = '\0';
- *len = d-dst;
- return dst;
-}
-
-/*
- * Convert native (big-endian) or reversed (little-endian) UTF-16 to UTF-8.
- *
- * Destination must be pre-extended to 3/2 source. Do not use in-place.
- * We optimize for native, for obvious reasons. */
-
-U8*
-Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
-{
- U8* pend;
- U8* dstart = d;
-
- if (bytelen & 1)
- Perl_croak(aTHX_ "panic: utf16_to_utf8: odd bytelen");
-
- pend = p + bytelen;
-
- while (p < pend) {
- UV uv = (p[0] << 8) + p[1]; /* UTF-16BE */
- p += 2;
- if (uv < 0x80) {
- *d++ = uv;
- continue;
- }
- if (uv < 0x800) {
- *d++ = (( uv >> 6) | 0xc0);
- *d++ = (( uv & 0x3f) | 0x80);
- continue;
- }
- if (uv >= 0xd800 && uv < 0xdbff) { /* surrogates */
- UV low = *p++;
- if (low < 0xdc00 || low >= 0xdfff)
- Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
- uv = ((uv - 0xd800) << 10) + (low - 0xdc00) + 0x10000;
- }
- if (uv < 0x10000) {
- *d++ = (( uv >> 12) | 0xe0);
- *d++ = (((uv >> 6) & 0x3f) | 0x80);
- *d++ = (( uv & 0x3f) | 0x80);
- continue;
- }
- else {
- *d++ = (( uv >> 18) | 0xf0);
- *d++ = (((uv >> 12) & 0x3f) | 0x80);
- *d++ = (((uv >> 6) & 0x3f) | 0x80);
- *d++ = (( uv & 0x3f) | 0x80);
- continue;
- }
- }
- *newlen = d - dstart;
- return d;
-}
-
-/* Note: this one is slightly destructive of the source. */
-
-U8*
-Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
-{
- U8* s = (U8*)p;
- U8* send = s + bytelen;
- while (s < send) {
- U8 tmp = s[0];
- s[0] = s[1];
- s[1] = tmp;
- s += 2;
- }
- return utf16_to_utf8(p, d, bytelen, newlen);
-}
-
-/* for now these are all defined (inefficiently) in terms of the utf8 versions */
-
-bool
-Perl_is_uni_alnum(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_alnum(tmpbuf);
-}
-
-bool
-Perl_is_uni_alnumc(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_alnumc(tmpbuf);
-}
-
-bool
-Perl_is_uni_idfirst(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_idfirst(tmpbuf);
-}
-
-bool
-Perl_is_uni_alpha(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_alpha(tmpbuf);
-}
-
-bool
-Perl_is_uni_ascii(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_ascii(tmpbuf);
-}
-
-bool
-Perl_is_uni_space(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_space(tmpbuf);
-}
-
-bool
-Perl_is_uni_digit(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_digit(tmpbuf);
-}
-
-bool
-Perl_is_uni_upper(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_upper(tmpbuf);
-}
-
-bool
-Perl_is_uni_lower(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_lower(tmpbuf);
-}
-
-bool
-Perl_is_uni_cntrl(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_cntrl(tmpbuf);
-}
-
-bool
-Perl_is_uni_graph(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_graph(tmpbuf);
-}
-
-bool
-Perl_is_uni_print(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_print(tmpbuf);
-}
-
-bool
-Perl_is_uni_punct(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_punct(tmpbuf);
-}
-
-bool
-Perl_is_uni_xdigit(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return is_utf8_xdigit(tmpbuf);
-}
-
-U32
-Perl_to_uni_upper(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return to_utf8_upper(tmpbuf);
-}
-
-U32
-Perl_to_uni_title(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return to_utf8_title(tmpbuf);
-}
-
-U32
-Perl_to_uni_lower(pTHX_ U32 c)
-{
- U8 tmpbuf[UTF8_MAXLEN+1];
- uv_to_utf8(tmpbuf, (UV)c);
- return to_utf8_lower(tmpbuf);
-}
-
-/* for now these all assume no locale info available for Unicode > 255 */
-
-bool
-Perl_is_uni_alnum_lc(pTHX_ U32 c)
-{
- return is_uni_alnum(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_alnumc_lc(pTHX_ U32 c)
-{
- return is_uni_alnumc(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_idfirst_lc(pTHX_ U32 c)
-{
- return is_uni_idfirst(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_alpha_lc(pTHX_ U32 c)
-{
- return is_uni_alpha(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_ascii_lc(pTHX_ U32 c)
-{
- return is_uni_ascii(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_space_lc(pTHX_ U32 c)
-{
- return is_uni_space(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_digit_lc(pTHX_ U32 c)
-{
- return is_uni_digit(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_upper_lc(pTHX_ U32 c)
-{
- return is_uni_upper(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_lower_lc(pTHX_ U32 c)
-{
- return is_uni_lower(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_cntrl_lc(pTHX_ U32 c)
-{
- return is_uni_cntrl(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_graph_lc(pTHX_ U32 c)
-{
- return is_uni_graph(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_print_lc(pTHX_ U32 c)
-{
- return is_uni_print(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_punct_lc(pTHX_ U32 c)
-{
- return is_uni_punct(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_uni_xdigit_lc(pTHX_ U32 c)
-{
- return is_uni_xdigit(c); /* XXX no locale support yet */
-}
-
-U32
-Perl_to_uni_upper_lc(pTHX_ U32 c)
-{
- return to_uni_upper(c); /* XXX no locale support yet */
-}
-
-U32
-Perl_to_uni_title_lc(pTHX_ U32 c)
-{
- return to_uni_title(c); /* XXX no locale support yet */
-}
-
-U32
-Perl_to_uni_lower_lc(pTHX_ U32 c)
-{
- return to_uni_lower(c); /* XXX no locale support yet */
-}
-
-bool
-Perl_is_utf8_alnum(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_alnum)
- /* NOTE: "IsWord", not "IsAlnum", since Alnum is a true
- * descendant of isalnum(3), in other words, it doesn't
- * contain the '_'. --jhi */
- PL_utf8_alnum = swash_init("utf8", "IsWord", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_alnum, p);
-/* return *p == '_' || is_utf8_alpha(p) || is_utf8_digit(p); */
-#ifdef SURPRISINGLY_SLOWER /* probably because alpha is usually true */
- if (!PL_utf8_alnum)
- PL_utf8_alnum = swash_init("utf8", "",
- sv_2mortal(newSVpv("+utf8::IsAlpha\n+utf8::IsDigit\n005F\n",0)), 0, 0);
- return swash_fetch(PL_utf8_alnum, p);
-#endif
-}
-
-bool
-Perl_is_utf8_alnumc(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_alnum)
- PL_utf8_alnum = swash_init("utf8", "IsAlnumC", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_alnum, p);
-/* return is_utf8_alpha(p) || is_utf8_digit(p); */
-#ifdef SURPRISINGLY_SLOWER /* probably because alpha is usually true */
- if (!PL_utf8_alnum)
- PL_utf8_alnum = swash_init("utf8", "",
- sv_2mortal(newSVpv("+utf8::IsAlpha\n+utf8::IsDigit\n005F\n",0)), 0, 0);
- return swash_fetch(PL_utf8_alnum, p);
-#endif
-}
-
-bool
-Perl_is_utf8_idfirst(pTHX_ U8 *p)
-{
- return *p == '_' || is_utf8_alpha(p);
-}
-
-bool
-Perl_is_utf8_alpha(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_alpha)
- PL_utf8_alpha = swash_init("utf8", "IsAlpha", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_alpha, p);
-}
-
-bool
-Perl_is_utf8_ascii(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_ascii)
- PL_utf8_ascii = swash_init("utf8", "IsAscii", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_ascii, p);
-}
-
-bool
-Perl_is_utf8_space(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_space)
- PL_utf8_space = swash_init("utf8", "IsSpacePerl", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_space, p);
-}
-
-bool
-Perl_is_utf8_digit(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_digit)
- PL_utf8_digit = swash_init("utf8", "IsDigit", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_digit, p);
-}
-
-bool
-Perl_is_utf8_upper(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_upper)
- PL_utf8_upper = swash_init("utf8", "IsUpper", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_upper, p);
-}
-
-bool
-Perl_is_utf8_lower(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_lower)
- PL_utf8_lower = swash_init("utf8", "IsLower", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_lower, p);
-}
-
-bool
-Perl_is_utf8_cntrl(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_cntrl)
- PL_utf8_cntrl = swash_init("utf8", "IsCntrl", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_cntrl, p);
-}
-
-bool
-Perl_is_utf8_graph(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_graph)
- PL_utf8_graph = swash_init("utf8", "IsGraph", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_graph, p);
-}
-
-bool
-Perl_is_utf8_print(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_print)
- PL_utf8_print = swash_init("utf8", "IsPrint", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_print, p);
-}
-
-bool
-Perl_is_utf8_punct(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_punct)
- PL_utf8_punct = swash_init("utf8", "IsPunct", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_punct, p);
-}
-
-bool
-Perl_is_utf8_xdigit(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_xdigit)
- PL_utf8_xdigit = swash_init("utf8", "IsXDigit", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_xdigit, p);
-}
-
-bool
-Perl_is_utf8_mark(pTHX_ U8 *p)
-{
- if (!is_utf8_char(p))
- return FALSE;
- if (!PL_utf8_mark)
- PL_utf8_mark = swash_init("utf8", "IsM", &PL_sv_undef, 0, 0);
- return swash_fetch(PL_utf8_mark, p);
-}
-
-UV
-Perl_to_utf8_upper(pTHX_ U8 *p)
-{
- UV uv;
-
- if (!PL_utf8_toupper)
- PL_utf8_toupper = swash_init("utf8", "ToUpper", &PL_sv_undef, 4, 0);
- uv = swash_fetch(PL_utf8_toupper, p);
- return uv ? uv : utf8_to_uv(p,UTF8_MAXLEN,0,0);
-}
-
-UV
-Perl_to_utf8_title(pTHX_ U8 *p)
-{
- UV uv;
-
- if (!PL_utf8_totitle)
- PL_utf8_totitle = swash_init("utf8", "ToTitle", &PL_sv_undef, 4, 0);
- uv = swash_fetch(PL_utf8_totitle, p);
- return uv ? uv : utf8_to_uv(p,UTF8_MAXLEN,0,0);
-}
-
-UV
-Perl_to_utf8_lower(pTHX_ U8 *p)
-{
- UV uv;
-
- if (!PL_utf8_tolower)
- PL_utf8_tolower = swash_init("utf8", "ToLower", &PL_sv_undef, 4, 0);
- uv = swash_fetch(PL_utf8_tolower, p);
- return uv ? uv : utf8_to_uv(p,UTF8_MAXLEN,0,0);
-}
-
-/* a "swash" is a swatch hash */
-
-SV*
-Perl_swash_init(pTHX_ char* pkg, char* name, SV *listsv, I32 minbits, I32 none)
-{
- SV* retval;
- SV* tokenbufsv = sv_2mortal(NEWSV(0,0));
- dSP;
-
- if (!gv_stashpv(pkg, 0)) { /* demand load utf8 */
- ENTER;
- Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpv(pkg,0), Nullsv);
- LEAVE;
- }
- SPAGAIN;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,5);
- PUSHs(sv_2mortal(newSVpvn(pkg, strlen(pkg))));
- PUSHs(sv_2mortal(newSVpvn(name, strlen(name))));
- PUSHs(listsv);
- PUSHs(sv_2mortal(newSViv(minbits)));
- PUSHs(sv_2mortal(newSViv(none)));
- PUTBACK;
- ENTER;
- SAVEI32(PL_hints);
- PL_hints = 0;
- save_re_context();
- if (PL_curcop == &PL_compiling)
- /* XXX ought to be handled by lex_start */
- sv_setpv(tokenbufsv, PL_tokenbuf);
- if (call_method("SWASHNEW", G_SCALAR))
- retval = newSVsv(*PL_stack_sp--);
- else
- retval = &PL_sv_undef;
- LEAVE;
- POPSTACK;
- if (PL_curcop == &PL_compiling) {
- STRLEN len;
- char* pv = SvPV(tokenbufsv, len);
-
- Copy(pv, PL_tokenbuf, len+1, char);
- PL_curcop->op_private = PL_hints;
- }
- if (!SvROK(retval) || SvTYPE(SvRV(retval)) != SVt_PVHV)
- Perl_croak(aTHX_ "SWASHNEW didn't return an HV ref");
- return retval;
-}
-
-UV
-Perl_swash_fetch(pTHX_ SV *sv, U8 *ptr)
-{
- HV* hv = (HV*)SvRV(sv);
- U32 klen = UTF8SKIP(ptr) - 1;
- U32 off = ptr[klen] & 127; /* NB: 64 bit always 0 when len > 1 */
- STRLEN slen;
- STRLEN needents = (klen ? 64 : 128);
- U8 *tmps;
- U32 bit;
- SV *retval;
-
- /*
- * This single-entry cache saves about 1/3 of the utf8 overhead in test
- * suite. (That is, only 7-8% overall over just a hash cache. Still,
- * it's nothing to sniff at.) Pity we usually come through at least
- * two function calls to get here...
- *
- * NB: this code assumes that swatches are never modified, once generated!
- */
-
- if (hv == PL_last_swash_hv &&
- klen == PL_last_swash_klen &&
- (!klen || memEQ(ptr,PL_last_swash_key,klen)) )
- {
- tmps = PL_last_swash_tmps;
- slen = PL_last_swash_slen;
- }
- else {
- /* Try our second-level swatch cache, kept in a hash. */
- SV** svp = hv_fetch(hv, (char*)ptr, klen, FALSE);
-
- /* If not cached, generate it via utf8::SWASHGET */
- if (!svp || !SvPOK(*svp) || !(tmps = (U8*)SvPV(*svp, slen))) {
- dSP;
- ENTER;
- SAVETMPS;
- save_re_context();
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,3);
- PUSHs((SV*)sv);
- PUSHs(sv_2mortal(newSViv(utf8_to_uv(ptr, UTF8_MAXLEN, 0, 0) & ~(needents - 1))));
- PUSHs(sv_2mortal(newSViv(needents)));
- PUTBACK;
- if (call_method("SWASHGET", G_SCALAR))
- retval = newSVsv(*PL_stack_sp--);
- else
- retval = &PL_sv_undef;
- POPSTACK;
- FREETMPS;
- LEAVE;
- if (PL_curcop == &PL_compiling)
- PL_curcop->op_private = PL_hints;
-
- svp = hv_store(hv, (char*)ptr, klen, retval, 0);
-
- if (!svp || !(tmps = (U8*)SvPV(*svp, slen)) || slen < 8)
- Perl_croak(aTHX_ "SWASHGET didn't return result of proper length");
- }
-
- PL_last_swash_hv = hv;
- PL_last_swash_klen = klen;
- PL_last_swash_tmps = tmps;
- PL_last_swash_slen = slen;
- if (klen)
- Copy(ptr, PL_last_swash_key, klen, U8);
- }
-
- switch ((int)((slen << 3) / needents)) {
- case 1:
- bit = 1 << (off & 7);
- off >>= 3;
- return (tmps[off] & bit) != 0;
- case 8:
- return tmps[off];
- case 16:
- off <<= 1;
- return (tmps[off] << 8) + tmps[off + 1] ;
- case 32:
- off <<= 2;
- return (tmps[off] << 24) + (tmps[off+1] << 16) + (tmps[off+2] << 8) + tmps[off + 3] ;
- }
- Perl_croak(aTHX_ "panic: swash_fetch");
- return 0;
-}
diff --git a/contrib/perl5/utf8.h b/contrib/perl5/utf8.h
deleted file mode 100644
index d022e86..0000000
--- a/contrib/perl5/utf8.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* utf8.h
- *
- * Copyright (c) 1998-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-START_EXTERN_C
-
-#ifdef DOINIT
-EXTCONST unsigned char PL_utf8skip[] = {
-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, /* ascii */
-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, /* ascii */
-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, /* ascii */
-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, /* ascii */
-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, /* bogus */
-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, /* bogus */
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* scripts */
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6, /* cjk etc. */
-7,13, /* Perl extended (not UTF-8). Up to 72bit allowed (64-bit + reserved). */
-};
-#else
-EXTCONST unsigned char PL_utf8skip[];
-#endif
-
-END_EXTERN_C
-
-#define UTF8_MAXLEN 13 /* how wide can a single UTF8 encoded character become */
-
-/* #define IN_UTF8 (PL_curcop->op_private & HINT_UTF8) */
-#define IN_BYTE (PL_curcop->op_private & HINT_BYTE)
-#define DO_UTF8(sv) (SvUTF8(sv) && !IN_BYTE)
-
-#define UTF8_ALLOW_EMPTY 0x0001
-#define UTF8_ALLOW_CONTINUATION 0x0002
-#define UTF8_ALLOW_NON_CONTINUATION 0x0004
-#define UTF8_ALLOW_FE_FF 0x0008
-#define UTF8_ALLOW_SHORT 0x0010
-#define UTF8_ALLOW_SURROGATE 0x0020
-#define UTF8_ALLOW_BOM 0x0040
-#define UTF8_ALLOW_FFFF 0x0080
-#define UTF8_ALLOW_LONG 0x0100
-#define UTF8_ALLOW_ANYUV (UTF8_ALLOW_EMPTY|UTF8_ALLOW_FE_FF|\
- UTF8_ALLOW_SURROGATE|UTF8_ALLOW_BOM|\
- UTF8_ALLOW_FFFF|UTF8_ALLOW_LONG)
-#define UTF8_ALLOW_ANY 0x00ff
-#define UTF8_CHECK_ONLY 0x0100
-
-#define UNICODE_SURROGATE_FIRST 0xd800
-#define UNICODE_SURROGATE_LAST 0xdfff
-#define UNICODE_REPLACEMENT 0xfffd
-#define UNICODE_BYTER_ORDER_MARK 0xfffe
-#define UNICODE_ILLEGAL 0xffff
-
-#define UNICODE_IS_SURROGATE(c) ((c) >= UNICODE_SURROGATE_FIRST && \
- (c) <= UNICODE_SURROGATE_LAST)
-#define UNICODE_IS_REPLACEMENT(c) ((c) == UNICODE_REPLACMENT)
-#define UNICODE_IS_BYTE_ORDER_MARK(c) ((c) == UNICODE_BYTER_ORDER_MARK)
-#define UNICODE_IS_ILLEGAL(c) ((c) == UNICODE_ILLEGAL)
-
-#define UTF8SKIP(s) PL_utf8skip[*(U8*)s]
-
-#define UTF8_QUAD_MAX UINT64_C(0x1000000000)
-
-/*
-
- The following table is from Unicode 3.1.
-
- Code Points 1st Byte 2nd Byte 3rd Byte 4th Byte
-
- U+0000..U+007F 00..7F   
- U+0080..U+07FF C2..DF 80..BF   
- U+0800..U+0FFF E0 A0..BF 80..BF  
- U+1000..U+FFFF E1..EF 80..BF 80..BF  
- U+10000..U+3FFFF F0 90..BF 80..BF 80..BF
- U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
- U+100000..U+10FFFF F4 80..8F 80..BF 80..BF
-
- */
-
-#define UTF8_IS_ASCII(c) (((U8)c) < 0x80)
-#define UTF8_IS_START(c) (((U8)c) >= 0xc0 && (((U8)c) <= 0xfd))
-#define UTF8_IS_CONTINUATION(c) (((U8)c) >= 0x80 && (((U8)c) <= 0xbf))
-#define UTF8_IS_CONTINUED(c) (((U8)c) & 0x80)
-#define UTF8_IS_DOWNGRADEABLE_START(c) (((U8)c & 0xfc) != 0xc0)
-
-#define UTF8_CONTINUATION_MASK ((U8)0x3f)
-#define UTF8_ACCUMULATION_SHIFT 6
-#define UTF8_ACCUMULATE(old, new) (((old) << UTF8_ACCUMULATION_SHIFT) | (((U8)new) & UTF8_CONTINUATION_MASK))
-
-#define UTF8_EIGHT_BIT_HI(c) ( (((U8)(c))>>6) |0xc0)
-#define UTF8_EIGHT_BIT_LO(c) (((((U8)(c)) )&0x3f)|0x80)
-
-#ifdef HAS_QUAD
-#define UNISKIP(uv) ( (uv) < 0x80 ? 1 : \
- (uv) < 0x800 ? 2 : \
- (uv) < 0x10000 ? 3 : \
- (uv) < 0x200000 ? 4 : \
- (uv) < 0x4000000 ? 5 : \
- (uv) < 0x80000000 ? 6 : \
- (uv) < UTF8_QUAD_MAX ? 7 : 13 )
-#else
-/* No, I'm not even going to *TRY* putting #ifdef inside a #define */
-#define UNISKIP(uv) ( (uv) < 0x80 ? 1 : \
- (uv) < 0x800 ? 2 : \
- (uv) < 0x10000 ? 3 : \
- (uv) < 0x200000 ? 4 : \
- (uv) < 0x4000000 ? 5 : \
- (uv) < 0x80000000 ? 6 : 7 )
-#endif
-
-
-/*
- * Note: we try to be careful never to call the isXXX_utf8() functions
- * unless we're pretty sure we've seen the beginning of a UTF-8 character
- * (that is, the two high bits are set). Otherwise we risk loading in the
- * heavy-duty SWASHINIT and SWASHGET routines unnecessarily.
- */
-#ifdef EBCDIC
-#define isIDFIRST_lazy_if(p,c) isIDFIRST(*(p))
-#define isALNUM_lazy_if(p,c) isALNUM(*(p))
-#else
-#define isIDFIRST_lazy_if(p,c) ((IN_BYTE || (!c || (*((U8*)p) < 0xc0))) \
- ? isIDFIRST(*(p)) \
- : isIDFIRST_utf8((U8*)p))
-#define isALNUM_lazy_if(p,c) ((IN_BYTE || (!c || (*((U8*)p) < 0xc0))) \
- ? isALNUM(*(p)) \
- : isALNUM_utf8((U8*)p))
-#endif
-#define isIDFIRST_lazy(p) isIDFIRST_lazy_if(p,1)
-#define isALNUM_lazy(p) isALNUM_lazy_if(p,1)
diff --git a/contrib/perl5/util.c b/contrib/perl5/util.c
deleted file mode 100644
index 31aff21..0000000
--- a/contrib/perl5/util.c
+++ /dev/null
@@ -1,3978 +0,0 @@
-/* util.c
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * "Very useful, no doubt, that was to Saruman; yet it seems that he was
- * not content." --Gandalf
- */
-
-#include "EXTERN.h"
-#define PERL_IN_UTIL_C
-#include "perl.h"
-
-#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
-#include <signal.h>
-#endif
-
-#ifndef SIG_ERR
-# define SIG_ERR ((Sighandler_t) -1)
-#endif
-
-#ifdef I_VFORK
-# include <vfork.h>
-#endif
-
-/* Put this after #includes because fork and vfork prototypes may
- conflict.
-*/
-#ifndef HAS_VFORK
-# define vfork fork
-#endif
-
-#ifdef I_SYS_WAIT
-# include <sys/wait.h>
-#endif
-
-#ifdef I_LOCALE
-# include <locale.h>
-#endif
-
-#define FLUSH
-
-#ifdef LEAKTEST
-
-long xcount[MAXXCOUNT];
-long lastxcount[MAXXCOUNT];
-long xycount[MAXXCOUNT][MAXYCOUNT];
-long lastxycount[MAXXCOUNT][MAXYCOUNT];
-
-#endif
-
-#if defined(HAS_FCNTL) && defined(F_SETFD) && !defined(FD_CLOEXEC)
-# define FD_CLOEXEC 1 /* NeXT needs this */
-#endif
-
-/* paranoid version of system's malloc() */
-
-/* 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.
- * XXX This advice seems to be widely ignored :-( --AD August 1996.
- */
-
-Malloc_t
-Perl_safesysmalloc(MEM_SIZE size)
-{
- dTHX;
- Malloc_t ptr;
-#ifdef HAS_64K_LIMIT
- if (size > 0xffff) {
- PerlIO_printf(Perl_error_log,
- "Allocation too large: %lx\n", size) FLUSH;
- my_exit(1);
- }
-#endif /* HAS_64K_LIMIT */
-#ifdef DEBUGGING
- if ((long)size < 0)
- Perl_croak_nocontext("panic: malloc");
-#endif
- ptr = PerlMem_malloc(size?size:1); /* malloc(0) is NASTY on our system */
- PERL_ALLOC_CHECK(ptr);
- DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) malloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
- if (ptr != Nullch)
- return ptr;
- else if (PL_nomemok)
- return Nullch;
- else {
- PerlIO_puts(Perl_error_log,PL_no_mem) FLUSH;
- my_exit(1);
- return Nullch;
- }
- /*NOTREACHED*/
-}
-
-/* paranoid version of system's realloc() */
-
-Malloc_t
-Perl_safesysrealloc(Malloc_t where,MEM_SIZE size)
-{
- dTHX;
- Malloc_t ptr;
-#if !defined(STANDARD_C) && !defined(HAS_REALLOC_PROTOTYPE) && !defined(PERL_MICRO)
- Malloc_t PerlMem_realloc();
-#endif /* !defined(STANDARD_C) && !defined(HAS_REALLOC_PROTOTYPE) */
-
-#ifdef HAS_64K_LIMIT
- if (size > 0xffff) {
- PerlIO_printf(Perl_error_log,
- "Reallocation too large: %lx\n", size) FLUSH;
- my_exit(1);
- }
-#endif /* HAS_64K_LIMIT */
- if (!size) {
- safesysfree(where);
- return NULL;
- }
-
- if (!where)
- return safesysmalloc(size);
-#ifdef DEBUGGING
- if ((long)size < 0)
- Perl_croak_nocontext("panic: realloc");
-#endif
- ptr = PerlMem_realloc(where,size);
- PERL_ALLOC_CHECK(ptr);
-
- DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) rfree\n",PTR2UV(where),(long)PL_an++));
- DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) realloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
-
- if (ptr != Nullch)
- return ptr;
- else if (PL_nomemok)
- return Nullch;
- else {
- PerlIO_puts(Perl_error_log,PL_no_mem) FLUSH;
- my_exit(1);
- return Nullch;
- }
- /*NOTREACHED*/
-}
-
-/* safe version of system's free() */
-
-Free_t
-Perl_safesysfree(Malloc_t where)
-{
-#ifdef PERL_IMPLICIT_SYS
- dTHX;
-#endif
- DEBUG_m( PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) free\n",PTR2UV(where),(long)PL_an++));
- if (where) {
- /*SUPPRESS 701*/
- PerlMem_free(where);
- }
-}
-
-/* safe version of system's calloc() */
-
-Malloc_t
-Perl_safesyscalloc(MEM_SIZE count, MEM_SIZE size)
-{
- dTHX;
- Malloc_t ptr;
-
-#ifdef HAS_64K_LIMIT
- if (size * count > 0xffff) {
- PerlIO_printf(Perl_error_log,
- "Allocation too large: %lx\n", size * count) FLUSH;
- my_exit(1);
- }
-#endif /* HAS_64K_LIMIT */
-#ifdef DEBUGGING
- if ((long)size < 0 || (long)count < 0)
- Perl_croak_nocontext("panic: calloc");
-#endif
- size *= count;
- ptr = PerlMem_malloc(size?size:1); /* malloc(0) is NASTY on our system */
- PERL_ALLOC_CHECK(ptr);
- DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) calloc %ld x %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)count,(long)size));
- if (ptr != Nullch) {
- memset((void*)ptr, 0, size);
- return ptr;
- }
- else if (PL_nomemok)
- return Nullch;
- else {
- PerlIO_puts(Perl_error_log,PL_no_mem) FLUSH;
- my_exit(1);
- return Nullch;
- }
- /*NOTREACHED*/
-}
-
-#ifdef LEAKTEST
-
-struct mem_test_strut {
- union {
- long type;
- char c[2];
- } u;
- long size;
-};
-
-# define ALIGN sizeof(struct mem_test_strut)
-
-# define sizeof_chunk(ch) (((struct mem_test_strut*) (ch))->size)
-# define typeof_chunk(ch) \
- (((struct mem_test_strut*) (ch))->u.c[0] + ((struct mem_test_strut*) (ch))->u.c[1]*100)
-# define set_typeof_chunk(ch,t) \
- (((struct mem_test_strut*) (ch))->u.c[0] = t % 100, ((struct mem_test_strut*) (ch))->u.c[1] = t / 100)
-#define SIZE_TO_Y(size) ( (size) > MAXY_SIZE \
- ? MAXYCOUNT - 1 \
- : ( (size) > 40 \
- ? ((size) - 1)/8 + 5 \
- : ((size) - 1)/4))
-
-Malloc_t
-Perl_safexmalloc(I32 x, MEM_SIZE size)
-{
- register char* where = (char*)safemalloc(size + ALIGN);
-
- xcount[x] += size;
- xycount[x][SIZE_TO_Y(size)]++;
- set_typeof_chunk(where, x);
- sizeof_chunk(where) = size;
- return (Malloc_t)(where + ALIGN);
-}
-
-Malloc_t
-Perl_safexrealloc(Malloc_t wh, MEM_SIZE size)
-{
- char *where = (char*)wh;
-
- if (!wh)
- return safexmalloc(0,size);
-
- {
- MEM_SIZE old = sizeof_chunk(where - ALIGN);
- int t = typeof_chunk(where - ALIGN);
- register char* new = (char*)saferealloc(where - ALIGN, size + ALIGN);
-
- xycount[t][SIZE_TO_Y(old)]--;
- xycount[t][SIZE_TO_Y(size)]++;
- xcount[t] += size - old;
- sizeof_chunk(new) = size;
- return (Malloc_t)(new + ALIGN);
- }
-}
-
-void
-Perl_safexfree(Malloc_t wh)
-{
- I32 x;
- char *where = (char*)wh;
- MEM_SIZE size;
-
- if (!where)
- return;
- where -= ALIGN;
- size = sizeof_chunk(where);
- x = where[0] + 100 * where[1];
- xcount[x] -= size;
- xycount[x][SIZE_TO_Y(size)]--;
- safefree(where);
-}
-
-Malloc_t
-Perl_safexcalloc(I32 x,MEM_SIZE count, MEM_SIZE size)
-{
- register char * where = (char*)safexmalloc(x, size * count + ALIGN);
- xcount[x] += size;
- xycount[x][SIZE_TO_Y(size)]++;
- memset((void*)(where + ALIGN), 0, size * count);
- set_typeof_chunk(where, x);
- sizeof_chunk(where) = size;
- return (Malloc_t)(where + ALIGN);
-}
-
-STATIC void
-S_xstat(pTHX_ int flag)
-{
- register I32 i, j, total = 0;
- I32 subtot[MAXYCOUNT];
-
- for (j = 0; j < MAXYCOUNT; j++) {
- subtot[j] = 0;
- }
-
- PerlIO_printf(Perl_debug_log, " Id subtot 4 8 12 16 20 24 28 32 36 40 48 56 64 72 80 80+\n", total);
- for (i = 0; i < MAXXCOUNT; i++) {
- total += xcount[i];
- for (j = 0; j < MAXYCOUNT; j++) {
- subtot[j] += xycount[i][j];
- }
- if (flag == 0
- ? xcount[i] /* Have something */
- : (flag == 2
- ? xcount[i] != lastxcount[i] /* Changed */
- : xcount[i] > lastxcount[i])) { /* Growed */
- PerlIO_printf(Perl_debug_log,"%2d %02d %7ld ", i / 100, i % 100,
- flag == 2 ? xcount[i] - lastxcount[i] : xcount[i]);
- lastxcount[i] = xcount[i];
- for (j = 0; j < MAXYCOUNT; j++) {
- if ( flag == 0
- ? xycount[i][j] /* Have something */
- : (flag == 2
- ? xycount[i][j] != lastxycount[i][j] /* Changed */
- : xycount[i][j] > lastxycount[i][j])) { /* Growed */
- PerlIO_printf(Perl_debug_log,"%3ld ",
- flag == 2
- ? xycount[i][j] - lastxycount[i][j]
- : xycount[i][j]);
- lastxycount[i][j] = xycount[i][j];
- } else {
- PerlIO_printf(Perl_debug_log, " . ", xycount[i][j]);
- }
- }
- PerlIO_printf(Perl_debug_log, "\n");
- }
- }
- if (flag != 2) {
- PerlIO_printf(Perl_debug_log, "Total %7ld ", total);
- for (j = 0; j < MAXYCOUNT; j++) {
- if (subtot[j]) {
- PerlIO_printf(Perl_debug_log, "%3ld ", subtot[j]);
- } else {
- PerlIO_printf(Perl_debug_log, " . ");
- }
- }
- PerlIO_printf(Perl_debug_log, "\n");
- }
-}
-
-#endif /* LEAKTEST */
-
-/* copy a string up to some (non-backslashed) delimiter, if any */
-
-char *
-Perl_delimcpy(pTHX_ register char *to, register char *toend, register char *from, register char *fromend, register int delim, I32 *retlen)
-{
- register I32 tolen;
- for (tolen = 0; from < fromend; from++, tolen++) {
- if (*from == '\\') {
- if (from[1] == delim)
- from++;
- else {
- if (to < toend)
- *to++ = *from;
- tolen++;
- from++;
- }
- }
- else if (*from == delim)
- break;
- if (to < toend)
- *to++ = *from;
- }
- if (to < toend)
- *to = '\0';
- *retlen = tolen;
- return from;
-}
-
-/* return ptr to little string in big string, NULL if not found */
-/* This routine was donated by Corey Satten. */
-
-char *
-Perl_instr(pTHX_ register const char *big, register const char *little)
-{
- register const char *s, *x;
- register I32 first;
-
- if (!little)
- return (char*)big;
- first = *little++;
- if (!first)
- return (char*)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 (char*)(big-1);
- }
- return Nullch;
-}
-
-/* same as instr but allow embedded nulls */
-
-char *
-Perl_ninstr(pTHX_ register const char *big, register const char *bigend, const char *little, const char *lend)
-{
- register const char *s, *x;
- register I32 first = *little;
- register const char *littleend = lend;
-
- if (!first && little >= littleend)
- return (char*)big;
- if (bigend - big < littleend - little)
- return Nullch;
- 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 (char*)(big-1);
- }
- return Nullch;
-}
-
-/* reverse of the above--find last substring */
-
-char *
-Perl_rninstr(pTHX_ register const char *big, const char *bigend, const char *little, const char *lend)
-{
- register const char *bigbeg;
- register const char *s, *x;
- register I32 first = *little;
- register const char *littleend = lend;
-
- if (!first && little >= littleend)
- return (char*)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 (char*)(big+1);
- }
- return Nullch;
-}
-
-/*
- * Set up for a new ctype locale.
- */
-void
-Perl_new_ctype(pTHX_ char *newctype)
-{
-#ifdef USE_LOCALE_CTYPE
-
- int i;
-
- for (i = 0; i < 256; i++) {
- if (isUPPER_LC(i))
- PL_fold_locale[i] = toLOWER_LC(i);
- else if (isLOWER_LC(i))
- PL_fold_locale[i] = toUPPER_LC(i);
- else
- PL_fold_locale[i] = i;
- }
-
-#endif /* USE_LOCALE_CTYPE */
-}
-
-/*
- * Standardize the locale name from a string returned by 'setlocale'.
- *
- * The standard return value of setlocale() is either
- * (1) "xx_YY" if the first argument of setlocale() is not LC_ALL
- * (2) "xa_YY xb_YY ..." if the first argument of setlocale() is LC_ALL
- * (the space-separated values represent the various sublocales,
- * in some unspecificed order)
- *
- * In some platforms it has a form like "LC_SOMETHING=Lang_Country.866\n",
- * which is harmful for further use of the string in setlocale().
- *
- */
-STATIC char *
-S_stdize_locale(pTHX_ char *locs)
-{
- char *s;
- bool okay = TRUE;
-
- if ((s = strchr(locs, '='))) {
- char *t;
-
- okay = FALSE;
- if ((t = strchr(s, '.'))) {
- char *u;
-
- if ((u = strchr(t, '\n'))) {
-
- if (u[1] == 0) {
- STRLEN len = u - s;
- Move(s + 1, locs, len, char);
- locs[len] = 0;
- okay = TRUE;
- }
- }
- }
- }
-
- if (!okay)
- Perl_croak(aTHX_ "Can't fix broken locale name \"%s\"", locs);
-
- return locs;
-}
-
-/*
- * Set up for a new collation locale.
- */
-void
-Perl_new_collate(pTHX_ char *newcoll)
-{
-#ifdef USE_LOCALE_COLLATE
-
- if (! newcoll) {
- if (PL_collation_name) {
- ++PL_collation_ix;
- Safefree(PL_collation_name);
- PL_collation_name = NULL;
- }
- PL_collation_standard = TRUE;
- PL_collxfrm_base = 0;
- PL_collxfrm_mult = 2;
- return;
- }
-
- if (! PL_collation_name || strNE(PL_collation_name, newcoll)) {
- ++PL_collation_ix;
- Safefree(PL_collation_name);
- PL_collation_name = stdize_locale(savepv(newcoll));
- PL_collation_standard = (strEQ(newcoll, "C") || strEQ(newcoll, "POSIX"));
-
- {
- /* 2: at most so many chars ('a', 'b'). */
- /* 50: surely no system expands a char more. */
-#define XFRMBUFSIZE (2 * 50)
- char xbuf[XFRMBUFSIZE];
- Size_t fa = strxfrm(xbuf, "a", XFRMBUFSIZE);
- Size_t fb = strxfrm(xbuf, "ab", XFRMBUFSIZE);
- SSize_t mult = fb - fa;
- if (mult < 1)
- Perl_croak(aTHX_ "strxfrm() gets absurd");
- PL_collxfrm_base = (fa > mult) ? (fa - mult) : 0;
- PL_collxfrm_mult = mult;
- }
- }
-
-#endif /* USE_LOCALE_COLLATE */
-}
-
-void
-Perl_set_numeric_radix(pTHX)
-{
-#ifdef USE_LOCALE_NUMERIC
-# ifdef HAS_LOCALECONV
- struct lconv* lc;
-
- lc = localeconv();
- if (lc && lc->decimal_point) {
- if (lc->decimal_point[0] == '.' && lc->decimal_point[1] == 0) {
- SvREFCNT_dec(PL_numeric_radix_sv);
- PL_numeric_radix_sv = 0;
- }
- else {
- if (PL_numeric_radix_sv)
- sv_setpv(PL_numeric_radix_sv, lc->decimal_point);
- else
- PL_numeric_radix_sv = newSVpv(lc->decimal_point, 0);
- }
- }
- else
- PL_numeric_radix_sv = 0;
-# endif /* HAS_LOCALECONV */
-#endif /* USE_LOCALE_NUMERIC */
-}
-
-/*
- * Set up for a new numeric locale.
- */
-void
-Perl_new_numeric(pTHX_ char *newnum)
-{
-#ifdef USE_LOCALE_NUMERIC
-
- if (! newnum) {
- if (PL_numeric_name) {
- Safefree(PL_numeric_name);
- PL_numeric_name = NULL;
- }
- PL_numeric_standard = TRUE;
- PL_numeric_local = TRUE;
- return;
- }
-
- if (! PL_numeric_name || strNE(PL_numeric_name, newnum)) {
- Safefree(PL_numeric_name);
- PL_numeric_name = stdize_locale(savepv(newnum));
- PL_numeric_standard = (strEQ(newnum, "C") || strEQ(newnum, "POSIX"));
- PL_numeric_local = TRUE;
- set_numeric_radix();
- }
-
-#endif /* USE_LOCALE_NUMERIC */
-}
-
-void
-Perl_set_numeric_standard(pTHX)
-{
-#ifdef USE_LOCALE_NUMERIC
-
- if (! PL_numeric_standard) {
- setlocale(LC_NUMERIC, "C");
- PL_numeric_standard = TRUE;
- PL_numeric_local = FALSE;
- set_numeric_radix();
- }
-
-#endif /* USE_LOCALE_NUMERIC */
-}
-
-void
-Perl_set_numeric_local(pTHX)
-{
-#ifdef USE_LOCALE_NUMERIC
-
- if (! PL_numeric_local) {
- setlocale(LC_NUMERIC, PL_numeric_name);
- PL_numeric_standard = FALSE;
- PL_numeric_local = TRUE;
- set_numeric_radix();
- }
-
-#endif /* USE_LOCALE_NUMERIC */
-}
-
-/*
- * Initialize locale awareness.
- */
-int
-Perl_init_i18nl10n(pTHX_ int printwarn)
-{
- int ok = 1;
- /* returns
- * 1 = set ok or not applicable,
- * 0 = fallback to C locale,
- * -1 = fallback to C locale failed
- */
-
-#if defined(USE_LOCALE)
-
-#ifdef USE_LOCALE_CTYPE
- char *curctype = NULL;
-#endif /* USE_LOCALE_CTYPE */
-#ifdef USE_LOCALE_COLLATE
- char *curcoll = NULL;
-#endif /* USE_LOCALE_COLLATE */
-#ifdef USE_LOCALE_NUMERIC
- char *curnum = NULL;
-#endif /* USE_LOCALE_NUMERIC */
-#ifdef __GLIBC__
- char *language = PerlEnv_getenv("LANGUAGE");
-#endif
- char *lc_all = PerlEnv_getenv("LC_ALL");
- char *lang = PerlEnv_getenv("LANG");
- bool setlocale_failure = FALSE;
-
-#ifdef LOCALE_ENVIRON_REQUIRED
-
- /*
- * Ultrix setlocale(..., "") fails if there are no environment
- * variables from which to get a locale name.
- */
-
- bool done = FALSE;
-
-#ifdef LC_ALL
- if (lang) {
- if (setlocale(LC_ALL, ""))
- done = TRUE;
- else
- setlocale_failure = TRUE;
- }
- if (!setlocale_failure) {
-#ifdef USE_LOCALE_CTYPE
- if (! (curctype =
- setlocale(LC_CTYPE,
- (!done && (lang || PerlEnv_getenv("LC_CTYPE")))
- ? "" : Nullch)))
- setlocale_failure = TRUE;
- else
- curctype = savepv(curctype);
-#endif /* USE_LOCALE_CTYPE */
-#ifdef USE_LOCALE_COLLATE
- if (! (curcoll =
- setlocale(LC_COLLATE,
- (!done && (lang || PerlEnv_getenv("LC_COLLATE")))
- ? "" : Nullch)))
- setlocale_failure = TRUE;
- else
- curcoll = savepv(curcoll);
-#endif /* USE_LOCALE_COLLATE */
-#ifdef USE_LOCALE_NUMERIC
- if (! (curnum =
- setlocale(LC_NUMERIC,
- (!done && (lang || PerlEnv_getenv("LC_NUMERIC")))
- ? "" : Nullch)))
- setlocale_failure = TRUE;
- else
- curnum = savepv(curnum);
-#endif /* USE_LOCALE_NUMERIC */
- }
-
-#endif /* LC_ALL */
-
-#endif /* !LOCALE_ENVIRON_REQUIRED */
-
-#ifdef LC_ALL
- if (! setlocale(LC_ALL, ""))
- setlocale_failure = TRUE;
-#endif /* LC_ALL */
-
- if (!setlocale_failure) {
-#ifdef USE_LOCALE_CTYPE
- if (! (curctype = setlocale(LC_CTYPE, "")))
- setlocale_failure = TRUE;
- else
- curctype = savepv(curctype);
-#endif /* USE_LOCALE_CTYPE */
-#ifdef USE_LOCALE_COLLATE
- if (! (curcoll = setlocale(LC_COLLATE, "")))
- setlocale_failure = TRUE;
- else
- curcoll = savepv(curcoll);
-#endif /* USE_LOCALE_COLLATE */
-#ifdef USE_LOCALE_NUMERIC
- if (! (curnum = setlocale(LC_NUMERIC, "")))
- setlocale_failure = TRUE;
- else
- curnum = savepv(curnum);
-#endif /* USE_LOCALE_NUMERIC */
- }
-
- if (setlocale_failure) {
- char *p;
- bool locwarn = (printwarn > 1 ||
- (printwarn &&
- (!(p = PerlEnv_getenv("PERL_BADLANG")) || atoi(p))));
-
- if (locwarn) {
-#ifdef LC_ALL
-
- PerlIO_printf(Perl_error_log,
- "perl: warning: Setting locale failed.\n");
-
-#else /* !LC_ALL */
-
- PerlIO_printf(Perl_error_log,
- "perl: warning: Setting locale failed for the categories:\n\t");
-#ifdef USE_LOCALE_CTYPE
- if (! curctype)
- PerlIO_printf(Perl_error_log, "LC_CTYPE ");
-#endif /* USE_LOCALE_CTYPE */
-#ifdef USE_LOCALE_COLLATE
- if (! curcoll)
- PerlIO_printf(Perl_error_log, "LC_COLLATE ");
-#endif /* USE_LOCALE_COLLATE */
-#ifdef USE_LOCALE_NUMERIC
- if (! curnum)
- PerlIO_printf(Perl_error_log, "LC_NUMERIC ");
-#endif /* USE_LOCALE_NUMERIC */
- PerlIO_printf(Perl_error_log, "\n");
-
-#endif /* LC_ALL */
-
- PerlIO_printf(Perl_error_log,
- "perl: warning: Please check that your locale settings:\n");
-
-#ifdef __GLIBC__
- PerlIO_printf(Perl_error_log,
- "\tLANGUAGE = %c%s%c,\n",
- language ? '"' : '(',
- language ? language : "unset",
- language ? '"' : ')');
-#endif
-
- PerlIO_printf(Perl_error_log,
- "\tLC_ALL = %c%s%c,\n",
- lc_all ? '"' : '(',
- lc_all ? lc_all : "unset",
- lc_all ? '"' : ')');
-
-#if defined(USE_ENVIRON_ARRAY)
- {
- char **e;
- for (e = environ; *e; e++) {
- if (strnEQ(*e, "LC_", 3)
- && strnNE(*e, "LC_ALL=", 7)
- && (p = strchr(*e, '=')))
- PerlIO_printf(Perl_error_log, "\t%.*s = \"%s\",\n",
- (int)(p - *e), *e, p + 1);
- }
- }
-#else
- PerlIO_printf(Perl_error_log,
- "\t(possibly more locale environment variables)\n");
-#endif
-
- PerlIO_printf(Perl_error_log,
- "\tLANG = %c%s%c\n",
- lang ? '"' : '(',
- lang ? lang : "unset",
- lang ? '"' : ')');
-
- PerlIO_printf(Perl_error_log,
- " are supported and installed on your system.\n");
- }
-
-#ifdef LC_ALL
-
- if (setlocale(LC_ALL, "C")) {
- if (locwarn)
- PerlIO_printf(Perl_error_log,
- "perl: warning: Falling back to the standard locale (\"C\").\n");
- ok = 0;
- }
- else {
- if (locwarn)
- PerlIO_printf(Perl_error_log,
- "perl: warning: Failed to fall back to the standard locale (\"C\").\n");
- ok = -1;
- }
-
-#else /* ! LC_ALL */
-
- if (0
-#ifdef USE_LOCALE_CTYPE
- || !(curctype || setlocale(LC_CTYPE, "C"))
-#endif /* USE_LOCALE_CTYPE */
-#ifdef USE_LOCALE_COLLATE
- || !(curcoll || setlocale(LC_COLLATE, "C"))
-#endif /* USE_LOCALE_COLLATE */
-#ifdef USE_LOCALE_NUMERIC
- || !(curnum || setlocale(LC_NUMERIC, "C"))
-#endif /* USE_LOCALE_NUMERIC */
- )
- {
- if (locwarn)
- PerlIO_printf(Perl_error_log,
- "perl: warning: Cannot fall back to the standard locale (\"C\").\n");
- ok = -1;
- }
-
-#endif /* ! LC_ALL */
-
-#ifdef USE_LOCALE_CTYPE
- curctype = savepv(setlocale(LC_CTYPE, Nullch));
-#endif /* USE_LOCALE_CTYPE */
-#ifdef USE_LOCALE_COLLATE
- curcoll = savepv(setlocale(LC_COLLATE, Nullch));
-#endif /* USE_LOCALE_COLLATE */
-#ifdef USE_LOCALE_NUMERIC
- curnum = savepv(setlocale(LC_NUMERIC, Nullch));
-#endif /* USE_LOCALE_NUMERIC */
- }
- else {
-
-#ifdef USE_LOCALE_CTYPE
- new_ctype(curctype);
-#endif /* USE_LOCALE_CTYPE */
-
-#ifdef USE_LOCALE_COLLATE
- new_collate(curcoll);
-#endif /* USE_LOCALE_COLLATE */
-
-#ifdef USE_LOCALE_NUMERIC
- new_numeric(curnum);
-#endif /* USE_LOCALE_NUMERIC */
- }
-
-#endif /* USE_LOCALE */
-
-#ifdef USE_LOCALE_CTYPE
- if (curctype != NULL)
- Safefree(curctype);
-#endif /* USE_LOCALE_CTYPE */
-#ifdef USE_LOCALE_COLLATE
- if (curcoll != NULL)
- Safefree(curcoll);
-#endif /* USE_LOCALE_COLLATE */
-#ifdef USE_LOCALE_NUMERIC
- if (curnum != NULL)
- Safefree(curnum);
-#endif /* USE_LOCALE_NUMERIC */
- return ok;
-}
-
-/* Backwards compatibility. */
-int
-Perl_init_i18nl14n(pTHX_ int printwarn)
-{
- return init_i18nl10n(printwarn);
-}
-
-#ifdef USE_LOCALE_COLLATE
-
-/*
- * mem_collxfrm() is a bit like strxfrm() but with two important
- * differences. First, it handles embedded NULs. Second, it allocates
- * a bit more memory than needed for the transformed data itself.
- * The real transformed data begins at offset sizeof(collationix).
- * Please see sv_collxfrm() to see how this is used.
- */
-char *
-Perl_mem_collxfrm(pTHX_ const char *s, STRLEN len, STRLEN *xlen)
-{
- char *xbuf;
- STRLEN xAlloc, xin, xout; /* xalloc is a reserved word in VC */
-
- /* the first sizeof(collationix) bytes are used by sv_collxfrm(). */
- /* the +1 is for the terminating NUL. */
-
- xAlloc = sizeof(PL_collation_ix) + PL_collxfrm_base + (PL_collxfrm_mult * len) + 1;
- New(171, xbuf, xAlloc, char);
- if (! xbuf)
- goto bad;
-
- *(U32*)xbuf = PL_collation_ix;
- xout = sizeof(PL_collation_ix);
- for (xin = 0; xin < len; ) {
- SSize_t xused;
-
- for (;;) {
- xused = strxfrm(xbuf + xout, s + xin, xAlloc - xout);
- if (xused == -1)
- goto bad;
- if (xused < xAlloc - xout)
- break;
- xAlloc = (2 * xAlloc) + 1;
- Renew(xbuf, xAlloc, char);
- if (! xbuf)
- goto bad;
- }
-
- xin += strlen(s + xin) + 1;
- xout += xused;
-
- /* Embedded NULs are understood but silently skipped
- * because they make no sense in locale collation. */
- }
-
- xbuf[xout] = '\0';
- *xlen = xout - sizeof(PL_collation_ix);
- return xbuf;
-
- bad:
- Safefree(xbuf);
- *xlen = 0;
- return NULL;
-}
-
-#endif /* USE_LOCALE_COLLATE */
-
-#define FBM_TABLE_OFFSET 2 /* Number of bytes between EOS and table*/
-
-/* As a space optimization, we do not compile tables for strings of length
- 0 and 1, and for strings of length 2 unless FBMcf_TAIL. These are
- special-cased in fbm_instr().
-
- If FBMcf_TAIL, the table is created as if the string has a trailing \n. */
-
-/*
-=for apidoc fbm_compile
-
-Analyses the string in order to make fast searches on it using fbm_instr()
--- the Boyer-Moore algorithm.
-
-=cut
-*/
-
-void
-Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
-{
- register U8 *s;
- register U8 *table;
- register U32 i;
- STRLEN len;
- I32 rarest = 0;
- U32 frequency = 256;
-
- if (flags & FBMcf_TAIL)
- sv_catpvn(sv, "\n", 1); /* Taken into account in fbm_instr() */
- s = (U8*)SvPV_force(sv, len);
- (void)SvUPGRADE(sv, SVt_PVBM);
- if (len == 0) /* TAIL might be on on a zero-length string. */
- return;
- if (len > 2) {
- U8 mlen;
- unsigned char *sb;
-
- if (len > 255)
- mlen = 255;
- else
- mlen = (U8)len;
- Sv_Grow(sv, len + 256 + FBM_TABLE_OFFSET);
- table = (unsigned char*)(SvPVX(sv) + len + FBM_TABLE_OFFSET);
- s = table - 1 - FBM_TABLE_OFFSET; /* last char */
- memset((void*)table, mlen, 256);
- table[-1] = (U8)flags;
- i = 0;
- sb = s - mlen + 1; /* first char (maybe) */
- while (s >= sb) {
- if (table[*s] == mlen)
- table[*s] = (U8)i;
- s--, i++;
- }
- }
- sv_magic(sv, Nullsv, 'B', Nullch, 0); /* deep magic */
- SvVALID_on(sv);
-
- s = (unsigned char*)(SvPVX(sv)); /* deeper magic */
- for (i = 0; i < len; i++) {
- if (PL_freq[s[i]] < frequency) {
- rarest = i;
- frequency = PL_freq[s[i]];
- }
- }
- BmRARE(sv) = s[rarest];
- BmPREVIOUS(sv) = rarest;
- BmUSEFUL(sv) = 100; /* Initial value */
- if (flags & FBMcf_TAIL)
- SvTAIL_on(sv);
- DEBUG_r(PerlIO_printf(Perl_debug_log, "rarest char %c at %d\n",
- BmRARE(sv),BmPREVIOUS(sv)));
-}
-
-/* If SvTAIL(littlestr), it has a fake '\n' at end. */
-/* If SvTAIL is actually due to \Z or \z, this gives false positives
- if multiline */
-
-/*
-=for apidoc fbm_instr
-
-Returns the location of the SV in the string delimited by C<str> and
-C<strend>. It returns C<Nullch> if the string can't be found. The C<sv>
-does not have to be fbm_compiled, but the search will not be as fast
-then.
-
-=cut
-*/
-
-char *
-Perl_fbm_instr(pTHX_ unsigned char *big, register unsigned char *bigend, SV *littlestr, U32 flags)
-{
- register unsigned char *s;
- STRLEN l;
- register unsigned char *little = (unsigned char *)SvPV(littlestr,l);
- register STRLEN littlelen = l;
- register I32 multiline = flags & FBMrf_MULTILINE;
-
- if (bigend - big < littlelen) {
- if ( SvTAIL(littlestr)
- && (bigend - big == littlelen - 1)
- && (littlelen == 1
- || (*big == *little && memEQ(big, little, littlelen - 1))))
- return (char*)big;
- return Nullch;
- }
-
- if (littlelen <= 2) { /* Special-cased */
-
- if (littlelen == 1) {
- if (SvTAIL(littlestr) && !multiline) { /* Anchor only! */
- /* Know that bigend != big. */
- if (bigend[-1] == '\n')
- return (char *)(bigend - 1);
- return (char *) bigend;
- }
- s = big;
- while (s < bigend) {
- if (*s == *little)
- return (char *)s;
- s++;
- }
- if (SvTAIL(littlestr))
- return (char *) bigend;
- return Nullch;
- }
- if (!littlelen)
- return (char*)big; /* Cannot be SvTAIL! */
-
- /* littlelen is 2 */
- if (SvTAIL(littlestr) && !multiline) {
- if (bigend[-1] == '\n' && bigend[-2] == *little)
- return (char*)bigend - 2;
- if (bigend[-1] == *little)
- return (char*)bigend - 1;
- return Nullch;
- }
- {
- /* This should be better than FBM if c1 == c2, and almost
- as good otherwise: maybe better since we do less indirection.
- And we save a lot of memory by caching no table. */
- register unsigned char c1 = little[0];
- register unsigned char c2 = little[1];
-
- s = big + 1;
- bigend--;
- if (c1 != c2) {
- while (s <= bigend) {
- if (s[0] == c2) {
- if (s[-1] == c1)
- return (char*)s - 1;
- s += 2;
- continue;
- }
- next_chars:
- if (s[0] == c1) {
- if (s == bigend)
- goto check_1char_anchor;
- if (s[1] == c2)
- return (char*)s;
- else {
- s++;
- goto next_chars;
- }
- }
- else
- s += 2;
- }
- goto check_1char_anchor;
- }
- /* Now c1 == c2 */
- while (s <= bigend) {
- if (s[0] == c1) {
- if (s[-1] == c1)
- return (char*)s - 1;
- if (s == bigend)
- goto check_1char_anchor;
- if (s[1] == c1)
- return (char*)s;
- s += 3;
- }
- else
- s += 2;
- }
- }
- check_1char_anchor: /* One char and anchor! */
- if (SvTAIL(littlestr) && (*bigend == *little))
- return (char *)bigend; /* bigend is already decremented. */
- return Nullch;
- }
- if (SvTAIL(littlestr) && !multiline) { /* tail anchored? */
- s = bigend - littlelen;
- if (s >= big && bigend[-1] == '\n' && *s == *little
- /* Automatically of length > 2 */
- && memEQ((char*)s + 1, (char*)little + 1, littlelen - 2))
- {
- return (char*)s; /* how sweet it is */
- }
- if (s[1] == *little
- && memEQ((char*)s + 2, (char*)little + 1, littlelen - 2))
- {
- return (char*)s + 1; /* how sweet it is */
- }
- return Nullch;
- }
- if (SvTYPE(littlestr) != SVt_PVBM || !SvVALID(littlestr)) {
- char *b = ninstr((char*)big,(char*)bigend,
- (char*)little, (char*)little + littlelen);
-
- if (!b && SvTAIL(littlestr)) { /* Automatically multiline! */
- /* Chop \n from littlestr: */
- s = bigend - littlelen + 1;
- if (*s == *little
- && memEQ((char*)s + 1, (char*)little + 1, littlelen - 2))
- {
- return (char*)s;
- }
- return Nullch;
- }
- return b;
- }
-
- { /* Do actual FBM. */
- register unsigned char *table = little + littlelen + FBM_TABLE_OFFSET;
- register unsigned char *oldlittle;
-
- if (littlelen > bigend - big)
- return Nullch;
- --littlelen; /* Last char found by table lookup */
-
- s = big + littlelen;
- little += littlelen; /* last char */
- oldlittle = little;
- if (s < bigend) {
- register I32 tmp;
-
- top2:
- /*SUPPRESS 560*/
- if ((tmp = table[*s])) {
-#ifdef POINTERRIGOR
- if (bigend - s > tmp) {
- s += tmp;
- goto top2;
- }
- s += tmp;
-#else
- if ((s += tmp) < bigend)
- goto top2;
-#endif
- goto check_end;
- }
- else { /* less expensive than calling strncmp() */
- register unsigned char *olds = s;
-
- tmp = littlelen;
-
- 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;
- goto check_end;
- }
- return (char *)s;
- }
- }
- check_end:
- if ( s == bigend && (table[-1] & FBMcf_TAIL)
- && memEQ(bigend - littlelen, oldlittle - littlelen, littlelen) )
- return (char*)bigend - littlelen;
- return Nullch;
- }
-}
-
-/* start_shift, end_shift are positive quantities which give offsets
- of ends of some substring of bigstr.
- If `last' we want the last occurence.
- old_posp is the way of communication between consequent calls if
- the next call needs to find the .
- The initial *old_posp should be -1.
-
- Note that we take into account SvTAIL, so one can get extra
- optimizations if _ALL flag is set.
- */
-
-/* If SvTAIL is actually due to \Z or \z, this gives false positives
- if PL_multiline. In fact if !PL_multiline the autoritative answer
- is not supported yet. */
-
-char *
-Perl_screaminstr(pTHX_ SV *bigstr, SV *littlestr, I32 start_shift, I32 end_shift, I32 *old_posp, I32 last)
-{
- register unsigned char *s, *x;
- register unsigned char *big;
- register I32 pos;
- register I32 previous;
- register I32 first;
- register unsigned char *little;
- register I32 stop_pos;
- register unsigned char *littleend;
- I32 found = 0;
-
- if (*old_posp == -1
- ? (pos = PL_screamfirst[BmRARE(littlestr)]) < 0
- : (((pos = *old_posp), pos += PL_screamnext[pos]) == 0)) {
- cant_find:
- if ( BmRARE(littlestr) == '\n'
- && BmPREVIOUS(littlestr) == SvCUR(littlestr) - 1) {
- little = (unsigned char *)(SvPVX(littlestr));
- littleend = little + SvCUR(littlestr);
- first = *little++;
- goto check_tail;
- }
- return Nullch;
- }
-
- little = (unsigned char *)(SvPVX(littlestr));
- littleend = little + SvCUR(littlestr);
- first = *little++;
- /* The value of pos we can start at: */
- previous = BmPREVIOUS(littlestr);
- big = (unsigned char *)(SvPVX(bigstr));
- /* The value of pos we can stop at: */
- stop_pos = SvCUR(bigstr) - end_shift - (SvCUR(littlestr) - 1 - previous);
- if (previous + start_shift > stop_pos) {
- if (previous + start_shift == stop_pos + 1) /* A fake '\n'? */
- goto check_tail;
- return Nullch;
- }
- while (pos < previous + start_shift) {
- if (!(pos += PL_screamnext[pos]))
- goto cant_find;
- }
-#ifdef POINTERRIGOR
- do {
- if (pos >= stop_pos) break;
- if (big[pos-previous] != first)
- continue;
- for (x=big+pos+1-previous,s=little; s < littleend; /**/ ) {
- if (*s++ != *x++) {
- s--;
- break;
- }
- }
- if (s == littleend) {
- *old_posp = pos;
- if (!last) return (char *)(big+pos-previous);
- found = 1;
- }
- } while ( pos += PL_screamnext[pos] );
- return (last && found) ? (char *)(big+(*old_posp)-previous) : Nullch;
-#else /* !POINTERRIGOR */
- big -= previous;
- do {
- if (pos >= stop_pos) break;
- if (big[pos] != first)
- continue;
- for (x=big+pos+1,s=little; s < littleend; /**/ ) {
- if (*s++ != *x++) {
- s--;
- break;
- }
- }
- if (s == littleend) {
- *old_posp = pos;
- if (!last) return (char *)(big+pos);
- found = 1;
- }
- } while ( pos += PL_screamnext[pos] );
- if (last && found)
- return (char *)(big+(*old_posp));
-#endif /* POINTERRIGOR */
- check_tail:
- if (!SvTAIL(littlestr) || (end_shift > 0))
- return Nullch;
- /* Ignore the trailing "\n". This code is not microoptimized */
- big = (unsigned char *)(SvPVX(bigstr) + SvCUR(bigstr));
- stop_pos = littleend - little; /* Actual littlestr len */
- if (stop_pos == 0)
- return (char*)big;
- big -= stop_pos;
- if (*big == first
- && ((stop_pos == 1) || memEQ(big + 1, little, stop_pos - 1)))
- return (char*)big;
- return Nullch;
-}
-
-I32
-Perl_ibcmp(pTHX_ const char *s1, const char *s2, register I32 len)
-{
- register U8 *a = (U8 *)s1;
- register U8 *b = (U8 *)s2;
- while (len--) {
- if (*a != *b && *a != PL_fold[*b])
- return 1;
- a++,b++;
- }
- return 0;
-}
-
-I32
-Perl_ibcmp_locale(pTHX_ const char *s1, const char *s2, register I32 len)
-{
- register U8 *a = (U8 *)s1;
- register U8 *b = (U8 *)s2;
- while (len--) {
- if (*a != *b && *a != PL_fold_locale[*b])
- return 1;
- a++,b++;
- }
- return 0;
-}
-
-/* copy a string to a safe spot */
-
-/*
-=for apidoc savepv
-
-Copy a string to a safe spot. This does not use an SV.
-
-=cut
-*/
-
-char *
-Perl_savepv(pTHX_ const char *sv)
-{
- register char *newaddr;
-
- New(902,newaddr,strlen(sv)+1,char);
- (void)strcpy(newaddr,sv);
- return newaddr;
-}
-
-/* same thing but with a known length */
-
-/*
-=for apidoc savepvn
-
-Copy a string to a safe spot. The C<len> indicates number of bytes to
-copy. This does not use an SV.
-
-=cut
-*/
-
-char *
-Perl_savepvn(pTHX_ const char *sv, register I32 len)
-{
- register char *newaddr;
-
- New(903,newaddr,len+1,char);
- Copy(sv,newaddr,len,char); /* might not be null terminated */
- newaddr[len] = '\0'; /* is now */
- return newaddr;
-}
-
-/* the SV for Perl_form() and mess() is not kept in an arena */
-
-STATIC SV *
-S_mess_alloc(pTHX)
-{
- SV *sv;
- XPVMG *any;
-
- if (!PL_dirty)
- return sv_2mortal(newSVpvn("",0));
-
- if (PL_mess_sv)
- return PL_mess_sv;
-
- /* Create as PVMG now, to avoid any upgrading later */
- New(905, sv, 1, SV);
- Newz(905, any, 1, XPVMG);
- SvFLAGS(sv) = SVt_PVMG;
- SvANY(sv) = (void*)any;
- SvREFCNT(sv) = 1 << 30; /* practically infinite */
- PL_mess_sv = sv;
- return sv;
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-char *
-Perl_form_nocontext(const char* pat, ...)
-{
- dTHX;
- char *retval;
- va_list args;
- va_start(args, pat);
- retval = vform(pat, &args);
- va_end(args);
- return retval;
-}
-#endif /* PERL_IMPLICIT_CONTEXT */
-
-char *
-Perl_form(pTHX_ const char* pat, ...)
-{
- char *retval;
- va_list args;
- va_start(args, pat);
- retval = vform(pat, &args);
- va_end(args);
- return retval;
-}
-
-char *
-Perl_vform(pTHX_ const char *pat, va_list *args)
-{
- SV *sv = mess_alloc();
- sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
- return SvPVX(sv);
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-SV *
-Perl_mess_nocontext(const char *pat, ...)
-{
- dTHX;
- SV *retval;
- va_list args;
- va_start(args, pat);
- retval = vmess(pat, &args);
- va_end(args);
- return retval;
-}
-#endif /* PERL_IMPLICIT_CONTEXT */
-
-SV *
-Perl_mess(pTHX_ const char *pat, ...)
-{
- SV *retval;
- va_list args;
- va_start(args, pat);
- retval = vmess(pat, &args);
- va_end(args);
- return retval;
-}
-
-SV *
-Perl_vmess(pTHX_ const char *pat, va_list *args)
-{
- SV *sv = mess_alloc();
- static char dgd[] = " during global destruction.\n";
-
- sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
- if (!SvCUR(sv) || *(SvEND(sv) - 1) != '\n') {
- if (CopLINE(PL_curcop))
- Perl_sv_catpvf(aTHX_ sv, " at %s line %"IVdf,
- CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
- if (GvIO(PL_last_in_gv) && IoLINES(GvIOp(PL_last_in_gv))) {
- bool line_mode = (RsSIMPLE(PL_rs) &&
- SvCUR(PL_rs) == 1 && *SvPVX(PL_rs) == '\n');
- Perl_sv_catpvf(aTHX_ sv, ", <%s> %s %"IVdf,
- PL_last_in_gv == PL_argvgv ? "" : GvNAME(PL_last_in_gv),
- line_mode ? "line" : "chunk",
- (IV)IoLINES(GvIOp(PL_last_in_gv)));
- }
-#ifdef USE_THREADS
- if (thr->tid)
- Perl_sv_catpvf(aTHX_ sv, " thread %ld", thr->tid);
-#endif
- sv_catpv(sv, PL_dirty ? dgd : ".\n");
- }
- return sv;
-}
-
-OP *
-Perl_vdie(pTHX_ const char* pat, va_list *args)
-{
- char *message;
- int was_in_eval = PL_in_eval;
- HV *stash;
- GV *gv;
- CV *cv;
- SV *msv;
- STRLEN msglen;
-
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: die: curstack = %p, mainstack = %p\n",
- thr, PL_curstack, PL_mainstack));
-
- if (pat) {
- msv = vmess(pat, args);
- if (PL_errors && SvCUR(PL_errors)) {
- sv_catsv(PL_errors, msv);
- message = SvPV(PL_errors, msglen);
- SvCUR_set(PL_errors, 0);
- }
- else
- message = SvPV(msv,msglen);
- }
- else {
- message = Nullch;
- msglen = 0;
- }
-
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: die: message = %s\ndiehook = %p\n",
- thr, message, PL_diehook));
- if (PL_diehook) {
- /* sv_2cv might call Perl_croak() */
- SV *olddiehook = PL_diehook;
- ENTER;
- SAVESPTR(PL_diehook);
- PL_diehook = Nullsv;
- cv = sv_2cv(olddiehook, &stash, &gv, 0);
- LEAVE;
- if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
- dSP;
- SV *msg;
-
- ENTER;
- save_re_context();
- if (message) {
- msg = newSVpvn(message, msglen);
- SvREADONLY_on(msg);
- SAVEFREESV(msg);
- }
- else {
- msg = ERRSV;
- }
-
- PUSHSTACKi(PERLSI_DIEHOOK);
- PUSHMARK(SP);
- XPUSHs(msg);
- PUTBACK;
- call_sv((SV*)cv, G_DISCARD);
- POPSTACK;
- LEAVE;
- }
- }
-
- PL_restartop = die_where(message, msglen);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "%p: die: restartop = %p, was_in_eval = %d, top_env = %p\n",
- thr, PL_restartop, was_in_eval, PL_top_env));
- if ((!PL_restartop && was_in_eval) || PL_top_env->je_prev)
- JMPENV_JUMP(3);
- return PL_restartop;
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-OP *
-Perl_die_nocontext(const char* pat, ...)
-{
- dTHX;
- OP *o;
- va_list args;
- va_start(args, pat);
- o = vdie(pat, &args);
- va_end(args);
- return o;
-}
-#endif /* PERL_IMPLICIT_CONTEXT */
-
-OP *
-Perl_die(pTHX_ const char* pat, ...)
-{
- OP *o;
- va_list args;
- va_start(args, pat);
- o = vdie(pat, &args);
- va_end(args);
- return o;
-}
-
-void
-Perl_vcroak(pTHX_ const char* pat, va_list *args)
-{
- char *message;
- HV *stash;
- GV *gv;
- CV *cv;
- SV *msv;
- STRLEN msglen;
-
- if (pat) {
- msv = vmess(pat, args);
- if (PL_errors && SvCUR(PL_errors)) {
- sv_catsv(PL_errors, msv);
- message = SvPV(PL_errors, msglen);
- SvCUR_set(PL_errors, 0);
- }
- else
- message = SvPV(msv,msglen);
- }
- else {
- message = Nullch;
- msglen = 0;
- }
-
- DEBUG_S(PerlIO_printf(Perl_debug_log, "croak: 0x%"UVxf" %s",
- PTR2UV(thr), message));
-
- if (PL_diehook) {
- /* sv_2cv might call Perl_croak() */
- SV *olddiehook = PL_diehook;
- ENTER;
- SAVESPTR(PL_diehook);
- PL_diehook = Nullsv;
- cv = sv_2cv(olddiehook, &stash, &gv, 0);
- LEAVE;
- if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
- dSP;
- SV *msg;
-
- ENTER;
- save_re_context();
- if (message) {
- msg = newSVpvn(message, msglen);
- SvREADONLY_on(msg);
- SAVEFREESV(msg);
- }
- else {
- msg = ERRSV;
- }
-
- PUSHSTACKi(PERLSI_DIEHOOK);
- PUSHMARK(SP);
- XPUSHs(msg);
- PUTBACK;
- call_sv((SV*)cv, G_DISCARD);
- POPSTACK;
- LEAVE;
- }
- }
- if (PL_in_eval) {
- PL_restartop = die_where(message, msglen);
- JMPENV_JUMP(3);
- }
- {
-#ifdef USE_SFIO
- /* SFIO can really mess with your errno */
- int e = errno;
-#endif
- PerlIO *serr = Perl_error_log;
-
- PerlIO_write(serr, message, msglen);
- (void)PerlIO_flush(serr);
-#ifdef USE_SFIO
- errno = e;
-#endif
- }
- my_failure_exit();
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-void
-Perl_croak_nocontext(const char *pat, ...)
-{
- dTHX;
- va_list args;
- va_start(args, pat);
- vcroak(pat, &args);
- /* NOTREACHED */
- va_end(args);
-}
-#endif /* PERL_IMPLICIT_CONTEXT */
-
-/*
-=for apidoc croak
-
-This is the XSUB-writer's interface to Perl's C<die> function.
-Normally use this function the same way you use the C C<printf>
-function. See C<warn>.
-
-If you want to throw an exception object, assign the object to
-C<$@> and then pass C<Nullch> to croak():
-
- errsv = get_sv("@", TRUE);
- sv_setsv(errsv, exception_object);
- croak(Nullch);
-
-=cut
-*/
-
-void
-Perl_croak(pTHX_ const char *pat, ...)
-{
- va_list args;
- va_start(args, pat);
- vcroak(pat, &args);
- /* NOTREACHED */
- va_end(args);
-}
-
-void
-Perl_vwarn(pTHX_ const char* pat, va_list *args)
-{
- char *message;
- HV *stash;
- GV *gv;
- CV *cv;
- SV *msv;
- STRLEN msglen;
-
- msv = vmess(pat, args);
- message = SvPV(msv, msglen);
-
- if (PL_warnhook) {
- /* sv_2cv might call Perl_warn() */
- SV *oldwarnhook = PL_warnhook;
- ENTER;
- SAVESPTR(PL_warnhook);
- PL_warnhook = Nullsv;
- cv = sv_2cv(oldwarnhook, &stash, &gv, 0);
- LEAVE;
- if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
- dSP;
- SV *msg;
-
- ENTER;
- save_re_context();
- msg = newSVpvn(message, msglen);
- SvREADONLY_on(msg);
- SAVEFREESV(msg);
-
- PUSHSTACKi(PERLSI_WARNHOOK);
- PUSHMARK(SP);
- XPUSHs(msg);
- PUTBACK;
- call_sv((SV*)cv, G_DISCARD);
- POPSTACK;
- LEAVE;
- return;
- }
- }
- {
- PerlIO *serr = Perl_error_log;
-
- PerlIO_write(serr, message, msglen);
-#ifdef LEAKTEST
- DEBUG_L(*message == '!'
- ? (xstat(message[1]=='!'
- ? (message[2]=='!' ? 2 : 1)
- : 0)
- , 0)
- : 0);
-#endif
- (void)PerlIO_flush(serr);
- }
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-void
-Perl_warn_nocontext(const char *pat, ...)
-{
- dTHX;
- va_list args;
- va_start(args, pat);
- vwarn(pat, &args);
- va_end(args);
-}
-#endif /* PERL_IMPLICIT_CONTEXT */
-
-/*
-=for apidoc warn
-
-This is the XSUB-writer's interface to Perl's C<warn> function. Use this
-function the same way you use the C C<printf> function. See
-C<croak>.
-
-=cut
-*/
-
-void
-Perl_warn(pTHX_ const char *pat, ...)
-{
- va_list args;
- va_start(args, pat);
- vwarn(pat, &args);
- va_end(args);
-}
-
-#if defined(PERL_IMPLICIT_CONTEXT)
-void
-Perl_warner_nocontext(U32 err, const char *pat, ...)
-{
- dTHX;
- va_list args;
- va_start(args, pat);
- vwarner(err, pat, &args);
- va_end(args);
-}
-#endif /* PERL_IMPLICIT_CONTEXT */
-
-void
-Perl_warner(pTHX_ U32 err, const char* pat,...)
-{
- va_list args;
- va_start(args, pat);
- vwarner(err, pat, &args);
- va_end(args);
-}
-
-void
-Perl_vwarner(pTHX_ U32 err, const char* pat, va_list* args)
-{
- char *message;
- HV *stash;
- GV *gv;
- CV *cv;
- SV *msv;
- STRLEN msglen;
-
- msv = vmess(pat, args);
- message = SvPV(msv, msglen);
-
- if (ckDEAD(err)) {
-#ifdef USE_THREADS
- DEBUG_S(PerlIO_printf(Perl_debug_log, "croak: 0x%"UVxf" %s", PTR2UV(thr), message));
-#endif /* USE_THREADS */
- if (PL_diehook) {
- /* sv_2cv might call Perl_croak() */
- SV *olddiehook = PL_diehook;
- ENTER;
- SAVESPTR(PL_diehook);
- PL_diehook = Nullsv;
- cv = sv_2cv(olddiehook, &stash, &gv, 0);
- LEAVE;
- if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
- dSP;
- SV *msg;
-
- ENTER;
- save_re_context();
- msg = newSVpvn(message, msglen);
- SvREADONLY_on(msg);
- SAVEFREESV(msg);
-
- PUSHSTACKi(PERLSI_DIEHOOK);
- PUSHMARK(sp);
- XPUSHs(msg);
- PUTBACK;
- call_sv((SV*)cv, G_DISCARD);
- POPSTACK;
- LEAVE;
- }
- }
- if (PL_in_eval) {
- PL_restartop = die_where(message, msglen);
- JMPENV_JUMP(3);
- }
- {
- PerlIO *serr = Perl_error_log;
- PerlIO_write(serr, message, msglen);
- (void)PerlIO_flush(serr);
- }
- my_failure_exit();
-
- }
- else {
- if (PL_warnhook) {
- /* sv_2cv might call Perl_warn() */
- SV *oldwarnhook = PL_warnhook;
- ENTER;
- SAVESPTR(PL_warnhook);
- PL_warnhook = Nullsv;
- cv = sv_2cv(oldwarnhook, &stash, &gv, 0);
- LEAVE;
- if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
- dSP;
- SV *msg;
-
- ENTER;
- save_re_context();
- msg = newSVpvn(message, msglen);
- SvREADONLY_on(msg);
- SAVEFREESV(msg);
-
- PUSHSTACKi(PERLSI_WARNHOOK);
- PUSHMARK(sp);
- XPUSHs(msg);
- PUTBACK;
- call_sv((SV*)cv, G_DISCARD);
- POPSTACK;
- LEAVE;
- return;
- }
- }
- {
- PerlIO *serr = Perl_error_log;
- PerlIO_write(serr, message, msglen);
-#ifdef LEAKTEST
- DEBUG_L(*message == '!'
- ? (xstat(message[1]=='!'
- ? (message[2]=='!' ? 2 : 1)
- : 0)
- , 0)
- : 0);
-#endif
- (void)PerlIO_flush(serr);
- }
- }
-}
-
-#ifdef USE_ENVIRON_ARRAY
- /* VMS' and EPOC's my_setenv() is in vms.c and epoc.c */
-#if !defined(WIN32)
-void
-Perl_my_setenv(pTHX_ char *nam, char *val)
-{
-#ifndef PERL_USE_SAFE_PUTENV
- /* most putenv()s leak, so we manipulate environ directly */
- register I32 i=setenv_getix(nam); /* where does it go? */
-
- if (environ == PL_origenviron) { /* need we copy environment? */
- I32 j;
- I32 max;
- char **tmpenv;
-
- /*SUPPRESS 530*/
- for (max = i; environ[max]; max++) ;
- tmpenv = (char**)safesysmalloc((max+2) * sizeof(char*));
- for (j=0; j<max; j++) { /* copy environment */
- tmpenv[j] = (char*)safesysmalloc((strlen(environ[j])+1)*sizeof(char));
- strcpy(tmpenv[j], environ[j]);
- }
- tmpenv[max] = Nullch;
- environ = tmpenv; /* tell exec where it is now */
- }
- if (!val) {
- safesysfree(environ[i]);
- while (environ[i]) {
- environ[i] = environ[i+1];
- i++;
- }
- return;
- }
- if (!environ[i]) { /* does not exist yet */
- environ = (char**)safesysrealloc(environ, (i+2) * sizeof(char*));
- environ[i+1] = Nullch; /* make sure it's null terminated */
- }
- else
- safesysfree(environ[i]);
- environ[i] = (char*)safesysmalloc((strlen(nam)+strlen(val)+2) * sizeof(char));
-
- (void)sprintf(environ[i],"%s=%s",nam,val);/* all that work just for this */
-
-#else /* PERL_USE_SAFE_PUTENV */
-# if defined(__CYGWIN__)
- setenv(nam, val, 1);
-# else
- char *new_env;
-
- new_env = (char*)safesysmalloc((strlen(nam) + strlen(val) + 2) * sizeof(char));
- (void)sprintf(new_env,"%s=%s",nam,val);/* all that work just for this */
- (void)putenv(new_env);
-# endif /* __CYGWIN__ */
-#endif /* PERL_USE_SAFE_PUTENV */
-}
-
-#else /* WIN32 */
-
-void
-Perl_my_setenv(pTHX_ char *nam,char *val)
-{
- register char *envstr;
- STRLEN len = strlen(nam) + 3;
- if (!val) {
- val = "";
- }
- len += strlen(val);
- New(904, envstr, len, char);
- (void)sprintf(envstr,"%s=%s",nam,val);
- (void)PerlEnv_putenv(envstr);
- Safefree(envstr);
-}
-
-#endif /* WIN32 */
-
-I32
-Perl_setenv_getix(pTHX_ char *nam)
-{
- register I32 i, len = strlen(nam);
-
- for (i = 0; environ[i]; i++) {
- if (
-#ifdef WIN32
- strnicmp(environ[i],nam,len) == 0
-#else
- strnEQ(environ[i],nam,len)
-#endif
- && environ[i][len] == '=')
- break; /* strnEQ must come first to avoid */
- } /* potential SEGV's */
- return i;
-}
-
-#endif /* !VMS && !EPOC*/
-
-#ifdef UNLINK_ALL_VERSIONS
-I32
-Perl_unlnk(pTHX_ char *f) /* unlink all versions of a file */
-{
- I32 i;
-
- for (i = 0; PerlLIO_unlink(f) >= 0; i++) ;
- return i ? 0 : -1;
-}
-#endif
-
-/* this is a drop-in replacement for bcopy() */
-#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
-char *
-Perl_my_bcopy(register const char *from,register char *to,register I32 len)
-{
- char *retval = to;
-
- if (from - to >= 0) {
- while (len--)
- *to++ = *from++;
- }
- else {
- to += len;
- from += len;
- while (len--)
- *(--to) = *(--from);
- }
- return retval;
-}
-#endif
-
-/* this is a drop-in replacement for memset() */
-#ifndef HAS_MEMSET
-void *
-Perl_my_memset(register char *loc, register I32 ch, register I32 len)
-{
- char *retval = loc;
-
- while (len--)
- *loc++ = ch;
- return retval;
-}
-#endif
-
-/* this is a drop-in replacement for bzero() */
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-char *
-Perl_my_bzero(register char *loc, register I32 len)
-{
- char *retval = loc;
-
- while (len--)
- *loc++ = 0;
- return retval;
-}
-#endif
-
-/* this is a drop-in replacement for memcmp() */
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-I32
-Perl_my_memcmp(const char *s1, const char *s2, register I32 len)
-{
- register U8 *a = (U8 *)s1;
- register U8 *b = (U8 *)s2;
- register I32 tmp;
-
- while (len--) {
- if (tmp = *a++ - *b++)
- return tmp;
- }
- return 0;
-}
-#endif /* !HAS_MEMCMP || !HAS_SANE_MEMCMP */
-
-#ifndef HAS_VPRINTF
-
-#ifdef USE_CHAR_VSPRINTF
-char *
-#else
-int
-#endif
-vsprintf(char *dest, const char *pat, char *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 USE_CHAR_VSPRINTF
- return(dest);
-#else
- return 0; /* perl doesn't use return value */
-#endif
-}
-
-#endif /* HAS_VPRINTF */
-
-#ifdef MYSWAP
-#if BYTEORDER != 0x4321
-short
-Perl_my_swap(pTHX_ short s)
-{
-#if (BYTEORDER & 1) == 0
- short result;
-
- result = ((s & 255) << 8) + ((s >> 8) & 255);
- return result;
-#else
- return s;
-#endif
-}
-
-long
-Perl_my_htonl(pTHX_ 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)
- Perl_croak(aTHX_ "Unknown BYTEORDER\n");
-#else
- register I32 o;
- register I32 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
-Perl_my_ntohl(pTHX_ 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)
- Perl_croak(aTHX_ "Unknown BYTEORDER\n");
-#else
- register I32 o;
- register I32 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 /* MYSWAP */
-
-/*
- * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
- * If these functions are defined,
- * the BYTEORDER is neither 0x1234 nor 0x4321.
- * However, this is not assumed.
- * -DWS
- */
-
-#define HTOV(name,type) \
- type \
- name (register type n) \
- { \
- union { \
- type value; \
- char c[sizeof(type)]; \
- } u; \
- register I32 i; \
- register I32 s; \
- for (i = 0, s = 0; i < sizeof(u.c); i++, s += 8) { \
- u.c[i] = (n >> s) & 0xFF; \
- } \
- return u.value; \
- }
-
-#define VTOH(name,type) \
- type \
- name (register type n) \
- { \
- union { \
- type value; \
- char c[sizeof(type)]; \
- } u; \
- register I32 i; \
- register I32 s; \
- u.value = n; \
- n = 0; \
- for (i = 0, s = 0; i < sizeof(u.c); i++, s += 8) { \
- n += (u.c[i] & 0xFF) << s; \
- } \
- return n; \
- }
-
-#if defined(HAS_HTOVS) && !defined(htovs)
-HTOV(htovs,short)
-#endif
-#if defined(HAS_HTOVL) && !defined(htovl)
-HTOV(htovl,long)
-#endif
-#if defined(HAS_VTOHS) && !defined(vtohs)
-VTOH(vtohs,short)
-#endif
-#if defined(HAS_VTOHL) && !defined(vtohl)
-VTOH(vtohl,long)
-#endif
-
- /* VMS' my_popen() is in VMS.c, same with OS/2. */
-#if (!defined(DOSISH) || defined(HAS_FORK) || defined(AMIGAOS)) && !defined(VMS) && !defined(__OPEN_VM) && !defined(EPOC) && !defined(MACOS_TRADITIONAL)
-PerlIO *
-Perl_my_popen(pTHX_ char *cmd, char *mode)
-{
- int p[2];
- register I32 This, that;
- register Pid_t pid;
- SV *sv;
- I32 doexec = strNE(cmd,"-");
- I32 did_pipes = 0;
- int pp[2];
-
- PERL_FLUSHALL_FOR_CHILD;
-#ifdef OS2
- if (doexec) {
- return my_syspopen(aTHX_ cmd,mode);
- }
-#endif
- This = (*mode == 'w');
- that = !This;
- if (doexec && PL_tainting) {
- taint_env();
- taint_proper("Insecure %s%s", "EXEC");
- }
- if (PerlProc_pipe(p) < 0)
- return Nullfp;
- if (doexec && PerlProc_pipe(pp) >= 0)
- did_pipes = 1;
- while ((pid = (doexec?vfork():fork())) < 0) {
- if (errno != EAGAIN) {
- PerlLIO_close(p[This]);
- if (did_pipes) {
- PerlLIO_close(pp[0]);
- PerlLIO_close(pp[1]);
- }
- if (!doexec)
- Perl_croak(aTHX_ "Can't fork");
- return Nullfp;
- }
- sleep(5);
- }
- if (pid == 0) {
- GV* tmpgv;
-
-#undef THIS
-#undef THAT
-#define THIS that
-#define THAT This
- PerlLIO_close(p[THAT]);
- if (did_pipes) {
- PerlLIO_close(pp[0]);
-#if defined(HAS_FCNTL) && defined(F_SETFD)
- fcntl(pp[1], F_SETFD, FD_CLOEXEC);
-#endif
- }
- if (p[THIS] != (*mode == 'r')) {
- PerlLIO_dup2(p[THIS], *mode == 'r');
- PerlLIO_close(p[THIS]);
- }
-#ifndef OS2
- if (doexec) {
-#if !defined(HAS_FCNTL) || !defined(F_SETFD)
- int fd;
-
-#ifndef NOFILE
-#define NOFILE 20
-#endif
- for (fd = PL_maxsysfd + 1; fd < NOFILE; fd++)
- if (fd != pp[1])
- PerlLIO_close(fd);
-#endif
- do_exec3(cmd,pp[1],did_pipes); /* may or may not use the shell */
- PerlProc__exit(1);
- }
-#endif /* defined OS2 */
- /*SUPPRESS 560*/
- if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV)))
- sv_setiv(GvSV(tmpgv), PerlProc_getpid());
- PL_forkprocess = 0;
- hv_clear(PL_pidstatus); /* we have no children */
- return Nullfp;
-#undef THIS
-#undef THAT
- }
- do_execfree(); /* free any memory malloced by child on vfork */
- PerlLIO_close(p[that]);
- if (did_pipes)
- PerlLIO_close(pp[1]);
- if (p[that] < p[This]) {
- PerlLIO_dup2(p[This], p[that]);
- PerlLIO_close(p[This]);
- p[This] = p[that];
- }
- LOCK_FDPID_MUTEX;
- sv = *av_fetch(PL_fdpid,p[This],TRUE);
- UNLOCK_FDPID_MUTEX;
- (void)SvUPGRADE(sv,SVt_IV);
- SvIVX(sv) = pid;
- PL_forkprocess = pid;
- if (did_pipes && pid > 0) {
- int errkid;
- int n = 0, n1;
-
- while (n < sizeof(int)) {
- n1 = PerlLIO_read(pp[0],
- (void*)(((char*)&errkid)+n),
- (sizeof(int)) - n);
- if (n1 <= 0)
- break;
- n += n1;
- }
- PerlLIO_close(pp[0]);
- did_pipes = 0;
- if (n) { /* Error */
- if (n != sizeof(int))
- Perl_croak(aTHX_ "panic: kid popen errno read");
- errno = errkid; /* Propagate errno from kid */
- return Nullfp;
- }
- }
- if (did_pipes)
- PerlLIO_close(pp[0]);
- return PerlIO_fdopen(p[This], mode);
-}
-#else
-#if defined(atarist) || defined(DJGPP)
-FILE *popen();
-PerlIO *
-Perl_my_popen(pTHX_ char *cmd, char *mode)
-{
- /* Needs work for PerlIO ! */
- /* used 0 for 2nd parameter to PerlIO-exportFILE; apparently not used */
- PERL_FLUSHALL_FOR_CHILD;
- return popen(PerlIO_exportFILE(cmd, 0), mode);
-}
-#endif
-
-#endif /* !DOSISH */
-
-#ifdef DUMP_FDS
-void
-Perl_dump_fds(pTHX_ char *s)
-{
- int fd;
- struct stat tmpstatbuf;
-
- PerlIO_printf(Perl_debug_log,"%s", s);
- for (fd = 0; fd < 32; fd++) {
- if (PerlLIO_fstat(fd,&tmpstatbuf) >= 0)
- PerlIO_printf(Perl_debug_log," %d",fd);
- }
- PerlIO_printf(Perl_debug_log,"\n");
-}
-#endif /* DUMP_FDS */
-
-#ifndef HAS_DUP2
-int
-dup2(int oldfd, int newfd)
-{
-#if defined(HAS_FCNTL) && defined(F_DUPFD)
- if (oldfd == newfd)
- return oldfd;
- PerlLIO_close(newfd);
- return fcntl(oldfd, F_DUPFD, newfd);
-#else
-#define DUP2_MAX_FDS 256
- int fdtmp[DUP2_MAX_FDS];
- I32 fdx = 0;
- int fd;
-
- if (oldfd == newfd)
- return oldfd;
- PerlLIO_close(newfd);
- /* good enough for low fd's... */
- while ((fd = PerlLIO_dup(oldfd)) != newfd && fd >= 0) {
- if (fdx >= DUP2_MAX_FDS) {
- PerlLIO_close(fd);
- fd = -1;
- break;
- }
- fdtmp[fdx++] = fd;
- }
- while (fdx > 0)
- PerlLIO_close(fdtmp[--fdx]);
- return fd;
-#endif
-}
-#endif
-
-
-#ifdef HAS_SIGACTION
-
-Sighandler_t
-Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
-{
- struct sigaction act, oact;
-
- act.sa_handler = handler;
- sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
-#ifdef SA_RESTART
- act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
-#endif
-#ifdef SA_NOCLDWAIT
- if (signo == SIGCHLD && handler == (Sighandler_t)SIG_IGN)
- act.sa_flags |= SA_NOCLDWAIT;
-#endif
- if (sigaction(signo, &act, &oact) == -1)
- return SIG_ERR;
- else
- return oact.sa_handler;
-}
-
-Sighandler_t
-Perl_rsignal_state(pTHX_ int signo)
-{
- struct sigaction oact;
-
- if (sigaction(signo, (struct sigaction *)NULL, &oact) == -1)
- return SIG_ERR;
- else
- return oact.sa_handler;
-}
-
-int
-Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
-{
- struct sigaction act;
-
- act.sa_handler = handler;
- sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
-#ifdef SA_RESTART
- act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
-#endif
-#ifdef SA_NOCLDWAIT
- if (signo == SIGCHLD && handler == (Sighandler_t)SIG_IGN)
- act.sa_flags |= SA_NOCLDWAIT;
-#endif
- return sigaction(signo, &act, save);
-}
-
-int
-Perl_rsignal_restore(pTHX_ int signo, Sigsave_t *save)
-{
- return sigaction(signo, save, (struct sigaction *)NULL);
-}
-
-#else /* !HAS_SIGACTION */
-
-Sighandler_t
-Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
-{
- return PerlProc_signal(signo, handler);
-}
-
-static int sig_trapped;
-
-static
-Signal_t
-sig_trap(int signo)
-{
- sig_trapped++;
-}
-
-Sighandler_t
-Perl_rsignal_state(pTHX_ int signo)
-{
- Sighandler_t oldsig;
-
- sig_trapped = 0;
- oldsig = PerlProc_signal(signo, sig_trap);
- PerlProc_signal(signo, oldsig);
- if (sig_trapped)
- PerlProc_kill(PerlProc_getpid(), signo);
- return oldsig;
-}
-
-int
-Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
-{
- *save = PerlProc_signal(signo, handler);
- return (*save == SIG_ERR) ? -1 : 0;
-}
-
-int
-Perl_rsignal_restore(pTHX_ int signo, Sigsave_t *save)
-{
- return (PerlProc_signal(signo, *save) == SIG_ERR) ? -1 : 0;
-}
-
-#endif /* !HAS_SIGACTION */
-
- /* VMS' my_pclose() is in VMS.c; same with OS/2 */
-#if (!defined(DOSISH) || defined(HAS_FORK) || defined(AMIGAOS)) && !defined(VMS) && !defined(__OPEN_VM) && !defined(EPOC) && !defined(MACOS_TRADITIONAL)
-I32
-Perl_my_pclose(pTHX_ PerlIO *ptr)
-{
- Sigsave_t hstat, istat, qstat;
- int status;
- SV **svp;
- Pid_t pid;
- Pid_t pid2;
- bool close_failed;
- int saved_errno;
-#ifdef VMS
- int saved_vaxc_errno;
-#endif
-#ifdef WIN32
- int saved_win32_errno;
-#endif
-
- LOCK_FDPID_MUTEX;
- svp = av_fetch(PL_fdpid,PerlIO_fileno(ptr),TRUE);
- UNLOCK_FDPID_MUTEX;
- pid = SvIVX(*svp);
- SvREFCNT_dec(*svp);
- *svp = &PL_sv_undef;
-#ifdef OS2
- if (pid == -1) { /* Opened by popen. */
- return my_syspclose(ptr);
- }
-#endif
- if ((close_failed = (PerlIO_close(ptr) == EOF))) {
- saved_errno = errno;
-#ifdef VMS
- saved_vaxc_errno = vaxc$errno;
-#endif
-#ifdef WIN32
- saved_win32_errno = GetLastError();
-#endif
- }
-#ifdef UTS
- if(PerlProc_kill(pid, 0) < 0) { return(pid); } /* HOM 12/23/91 */
-#endif
- rsignal_save(SIGHUP, SIG_IGN, &hstat);
- rsignal_save(SIGINT, SIG_IGN, &istat);
- rsignal_save(SIGQUIT, SIG_IGN, &qstat);
- do {
- pid2 = wait4pid(pid, &status, 0);
- } while (pid2 == -1 && errno == EINTR);
- rsignal_restore(SIGHUP, &hstat);
- rsignal_restore(SIGINT, &istat);
- rsignal_restore(SIGQUIT, &qstat);
- if (close_failed) {
- SETERRNO(saved_errno, saved_vaxc_errno);
- return -1;
- }
- return(pid2 < 0 ? pid2 : status == 0 ? 0 : (errno = 0, status));
-}
-#endif /* !DOSISH */
-
-#if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(MACOS_TRADITIONAL)
-I32
-Perl_wait4pid(pTHX_ Pid_t pid, int *statusp, int flags)
-{
- SV *sv;
- SV** svp;
- char spid[TYPE_CHARS(int)];
-
- if (!pid)
- return -1;
-#if !defined(HAS_WAITPID) && !defined(HAS_WAIT4) || defined(HAS_WAITPID_RUNTIME)
- if (pid > 0) {
- sprintf(spid, "%"IVdf, (IV)pid);
- svp = hv_fetch(PL_pidstatus,spid,strlen(spid),FALSE);
- if (svp && *svp != &PL_sv_undef) {
- *statusp = SvIVX(*svp);
- (void)hv_delete(PL_pidstatus,spid,strlen(spid),G_DISCARD);
- return pid;
- }
- }
- else {
- HE *entry;
-
- hv_iterinit(PL_pidstatus);
- if ((entry = hv_iternext(PL_pidstatus))) {
- pid = atoi(hv_iterkey(entry,(I32*)statusp));
- sv = hv_iterval(PL_pidstatus,entry);
- *statusp = SvIVX(sv);
- sprintf(spid, "%"IVdf, (IV)pid);
- (void)hv_delete(PL_pidstatus,spid,strlen(spid),G_DISCARD);
- return pid;
- }
- }
-#endif
-#ifdef HAS_WAITPID
-# ifdef HAS_WAITPID_RUNTIME
- if (!HAS_WAITPID_RUNTIME)
- goto hard_way;
-# endif
- return PerlProc_waitpid(pid,statusp,flags);
-#endif
-#if !defined(HAS_WAITPID) && defined(HAS_WAIT4)
- return wait4((pid==-1)?0:pid,statusp,flags,Null(struct rusage *));
-#endif
-#if !defined(HAS_WAITPID) && !defined(HAS_WAIT4) || defined(HAS_WAITPID_RUNTIME)
- hard_way:
- {
- I32 result;
- if (flags)
- Perl_croak(aTHX_ "Can't do waitpid with flags");
- else {
- while ((result = PerlProc_wait(statusp)) != pid && pid > 0 && result >= 0)
- pidgone(result,*statusp);
- if (result < 0)
- *statusp = -1;
- }
- return result;
- }
-#endif
-}
-#endif /* !DOSISH || OS2 || WIN32 */
-
-void
-/*SUPPRESS 590*/
-Perl_pidgone(pTHX_ Pid_t pid, int status)
-{
- register SV *sv;
- char spid[TYPE_CHARS(int)];
-
- sprintf(spid, "%"IVdf, (IV)pid);
- sv = *hv_fetch(PL_pidstatus,spid,strlen(spid),TRUE);
- (void)SvUPGRADE(sv,SVt_IV);
- SvIVX(sv) = status;
- return;
-}
-
-#if defined(atarist) || defined(OS2) || defined(DJGPP)
-int pclose();
-#ifdef HAS_FORK
-int /* Cannot prototype with I32
- in os2ish.h. */
-my_syspclose(PerlIO *ptr)
-#else
-I32
-Perl_my_pclose(pTHX_ PerlIO *ptr)
-#endif
-{
- /* Needs work for PerlIO ! */
- FILE *f = PerlIO_findFILE(ptr);
- I32 result = pclose(f);
-#if defined(DJGPP)
- result = (result << 8) & 0xff00;
-#endif
- PerlIO_releaseFILE(ptr,f);
- return result;
-}
-#endif
-
-void
-Perl_repeatcpy(pTHX_ register char *to, register const char *from, I32 len, register I32 count)
-{
- register I32 todo;
- register const char *frombase = from;
-
- if (len == 1) {
- register const char c = *from;
- while (count-- > 0)
- *to++ = c;
- return;
- }
- while (count-- > 0) {
- for (todo = len; todo > 0; todo--) {
- *to++ = *from++;
- }
- from = frombase;
- }
-}
-
-U32
-Perl_cast_ulong(pTHX_ NV 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;
-}
-# undef BIGDOUBLE
-
-/* Unfortunately, on some systems the cast_uv() function doesn't
- work with the system-supplied definition of ULONG_MAX. The
- comparison (f >= ULONG_MAX) always comes out true. It must be a
- problem with the compiler constant folding.
-
- In any case, this workaround should be fine on any two's complement
- system. If it's not, supply a '-DMY_ULONG_MAX=whatever' in your
- ccflags.
- --Andy Dougherty <doughera@lafcol.lafayette.edu>
-*/
-
-/* Code modified to prefer proper named type ranges, I32, IV, or UV, instead
- of LONG_(MIN/MAX).
- -- Kenneth Albanowski <kjahds@kjahds.com>
-*/
-
-#ifndef MY_UV_MAX
-# define MY_UV_MAX ((UV)IV_MAX * (UV)2 + (UV)1)
-#endif
-
-I32
-Perl_cast_i32(pTHX_ NV f)
-{
- if (f >= I32_MAX)
- return (I32) I32_MAX;
- if (f <= I32_MIN)
- return (I32) I32_MIN;
- return (I32) f;
-}
-
-IV
-Perl_cast_iv(pTHX_ NV f)
-{
- if (f >= IV_MAX) {
- UV uv;
-
- if (f >= (NV)UV_MAX)
- return (IV) UV_MAX;
- uv = (UV) f;
- return (IV)uv;
- }
- if (f <= IV_MIN)
- return (IV) IV_MIN;
- return (IV) f;
-}
-
-UV
-Perl_cast_uv(pTHX_ NV f)
-{
- if (f >= MY_UV_MAX)
- return (UV) MY_UV_MAX;
- if (f < 0) {
- IV iv;
-
- if (f < IV_MIN)
- return (UV)IV_MIN;
- iv = (IV) f;
- return (UV) iv;
- }
- return (UV) f;
-}
-
-#ifndef HAS_RENAME
-I32
-Perl_same_dirent(pTHX_ char *a, char *b)
-{
- char *fa = strrchr(a,'/');
- char *fb = strrchr(b,'/');
- struct stat tmpstatbuf1;
- struct stat tmpstatbuf2;
- SV *tmpsv = sv_newmortal();
-
- if (fa)
- fa++;
- else
- fa = a;
- if (fb)
- fb++;
- else
- fb = b;
- if (strNE(a,b))
- return FALSE;
- if (fa == a)
- sv_setpv(tmpsv, ".");
- else
- sv_setpvn(tmpsv, a, fa - a);
- if (PerlLIO_stat(SvPVX(tmpsv), &tmpstatbuf1) < 0)
- return FALSE;
- if (fb == b)
- sv_setpv(tmpsv, ".");
- else
- sv_setpvn(tmpsv, b, fb - b);
- if (PerlLIO_stat(SvPVX(tmpsv), &tmpstatbuf2) < 0)
- return FALSE;
- return tmpstatbuf1.st_dev == tmpstatbuf2.st_dev &&
- tmpstatbuf1.st_ino == tmpstatbuf2.st_ino;
-}
-#endif /* !HAS_RENAME */
-
-NV
-Perl_scan_bin(pTHX_ char *start, STRLEN len, STRLEN *retlen)
-{
- register char *s = start;
- register NV rnv = 0.0;
- register UV ruv = 0;
- register bool seenb = FALSE;
- register bool overflowed = FALSE;
-
- for (; len-- && *s; s++) {
- if (!(*s == '0' || *s == '1')) {
- if (*s == '_' && len && *retlen
- && (s[1] == '0' || s[1] == '1'))
- {
- --len;
- ++s;
- }
- else if (seenb == FALSE && *s == 'b' && ruv == 0) {
- /* Disallow 0bbb0b0bbb... */
- seenb = TRUE;
- continue;
- }
- else {
- if (ckWARN(WARN_DIGIT))
- Perl_warner(aTHX_ WARN_DIGIT,
- "Illegal binary digit '%c' ignored", *s);
- break;
- }
- }
- if (!overflowed) {
- register UV xuv = ruv << 1;
-
- if ((xuv >> 1) != ruv) {
- overflowed = TRUE;
- rnv = (NV) ruv;
- if (ckWARN_d(WARN_OVERFLOW))
- Perl_warner(aTHX_ WARN_OVERFLOW,
- "Integer overflow in binary number");
- }
- else
- ruv = xuv | (*s - '0');
- }
- if (overflowed) {
- rnv *= 2;
- /* If an NV has not enough bits in its mantissa to
- * represent an UV this summing of small low-order numbers
- * is a waste of time (because the NV cannot preserve
- * the low-order bits anyway): we could just remember when
- * did we overflow and in the end just multiply rnv by the
- * right amount. */
- rnv += (*s - '0');
- }
- }
- if (!overflowed)
- rnv = (NV) ruv;
- if ( ( overflowed && rnv > 4294967295.0)
-#if UVSIZE > 4
- || (!overflowed && ruv > 0xffffffff )
-#endif
- ) {
- if (ckWARN(WARN_PORTABLE))
- Perl_warner(aTHX_ WARN_PORTABLE,
- "Binary number > 0b11111111111111111111111111111111 non-portable");
- }
- *retlen = s - start;
- return rnv;
-}
-
-NV
-Perl_scan_oct(pTHX_ char *start, STRLEN len, STRLEN *retlen)
-{
- register char *s = start;
- register NV rnv = 0.0;
- register UV ruv = 0;
- register bool overflowed = FALSE;
-
- for (; len-- && *s; s++) {
- if (!(*s >= '0' && *s <= '7')) {
- if (*s == '_' && len && *retlen
- && (s[1] >= '0' && s[1] <= '7'))
- {
- --len;
- ++s;
- }
- else {
- /* Allow \octal to work the DWIM way (that is, stop scanning
- * as soon as non-octal characters are seen, complain only iff
- * someone seems to want to use the digits eight and nine). */
- if (*s == '8' || *s == '9') {
- if (ckWARN(WARN_DIGIT))
- Perl_warner(aTHX_ WARN_DIGIT,
- "Illegal octal digit '%c' ignored", *s);
- }
- break;
- }
- }
- if (!overflowed) {
- register UV xuv = ruv << 3;
-
- if ((xuv >> 3) != ruv) {
- overflowed = TRUE;
- rnv = (NV) ruv;
- if (ckWARN_d(WARN_OVERFLOW))
- Perl_warner(aTHX_ WARN_OVERFLOW,
- "Integer overflow in octal number");
- }
- else
- ruv = xuv | (*s - '0');
- }
- if (overflowed) {
- rnv *= 8.0;
- /* If an NV has not enough bits in its mantissa to
- * represent an UV this summing of small low-order numbers
- * is a waste of time (because the NV cannot preserve
- * the low-order bits anyway): we could just remember when
- * did we overflow and in the end just multiply rnv by the
- * right amount of 8-tuples. */
- rnv += (NV)(*s - '0');
- }
- }
- if (!overflowed)
- rnv = (NV) ruv;
- if ( ( overflowed && rnv > 4294967295.0)
-#if UVSIZE > 4
- || (!overflowed && ruv > 0xffffffff )
-#endif
- ) {
- if (ckWARN(WARN_PORTABLE))
- Perl_warner(aTHX_ WARN_PORTABLE,
- "Octal number > 037777777777 non-portable");
- }
- *retlen = s - start;
- return rnv;
-}
-
-NV
-Perl_scan_hex(pTHX_ char *start, STRLEN len, STRLEN *retlen)
-{
- register char *s = start;
- register NV rnv = 0.0;
- register UV ruv = 0;
- register bool seenx = FALSE;
- register bool overflowed = FALSE;
- char *hexdigit;
-
- for (; len-- && *s; s++) {
- hexdigit = strchr((char *) PL_hexdigit, *s);
- if (!hexdigit) {
- if (*s == '_' && len && *retlen && s[1]
- && (hexdigit = strchr((char *) PL_hexdigit, s[1])))
- {
- --len;
- ++s;
- }
- else if (seenx == FALSE && *s == 'x' && ruv == 0) {
- /* Disallow 0xxx0x0xxx... */
- seenx = TRUE;
- continue;
- }
- else {
- if (ckWARN(WARN_DIGIT))
- Perl_warner(aTHX_ WARN_DIGIT,
- "Illegal hexadecimal digit '%c' ignored", *s);
- break;
- }
- }
- if (!overflowed) {
- register UV xuv = ruv << 4;
-
- if ((xuv >> 4) != ruv) {
- overflowed = TRUE;
- rnv = (NV) ruv;
- if (ckWARN_d(WARN_OVERFLOW))
- Perl_warner(aTHX_ WARN_OVERFLOW,
- "Integer overflow in hexadecimal number");
- }
- else
- ruv = xuv | ((hexdigit - PL_hexdigit) & 15);
- }
- if (overflowed) {
- rnv *= 16.0;
- /* If an NV has not enough bits in its mantissa to
- * represent an UV this summing of small low-order numbers
- * is a waste of time (because the NV cannot preserve
- * the low-order bits anyway): we could just remember when
- * did we overflow and in the end just multiply rnv by the
- * right amount of 16-tuples. */
- rnv += (NV)((hexdigit - PL_hexdigit) & 15);
- }
- }
- if (!overflowed)
- rnv = (NV) ruv;
- if ( ( overflowed && rnv > 4294967295.0)
-#if UVSIZE > 4
- || (!overflowed && ruv > 0xffffffff )
-#endif
- ) {
- if (ckWARN(WARN_PORTABLE))
- Perl_warner(aTHX_ WARN_PORTABLE,
- "Hexadecimal number > 0xffffffff non-portable");
- }
- *retlen = s - start;
- return rnv;
-}
-
-char*
-Perl_find_script(pTHX_ char *scriptname, bool dosearch, char **search_ext, I32 flags)
-{
- char *xfound = Nullch;
- char *xfailed = Nullch;
- char tmpbuf[MAXPATHLEN];
- register char *s;
- I32 len;
- int retval;
-#if defined(DOSISH) && !defined(OS2) && !defined(atarist)
-# define SEARCH_EXTS ".bat", ".cmd", NULL
-# define MAX_EXT_LEN 4
-#endif
-#ifdef OS2
-# define SEARCH_EXTS ".cmd", ".btm", ".bat", ".pl", NULL
-# define MAX_EXT_LEN 4
-#endif
-#ifdef VMS
-# define SEARCH_EXTS ".pl", ".com", NULL
-# define MAX_EXT_LEN 4
-#endif
- /* additional extensions to try in each dir if scriptname not found */
-#ifdef SEARCH_EXTS
- char *exts[] = { SEARCH_EXTS };
- char **ext = search_ext ? search_ext : exts;
- int extidx = 0, i = 0;
- char *curext = Nullch;
-#else
-# define MAX_EXT_LEN 0
-#endif
-
- /*
- * If dosearch is true and if scriptname does not contain path
- * delimiters, search the PATH for scriptname.
- *
- * If SEARCH_EXTS is also defined, will look for each
- * scriptname{SEARCH_EXTS} whenever scriptname is not found
- * while searching the PATH.
- *
- * Assuming SEARCH_EXTS is C<".foo",".bar",NULL>, PATH search
- * proceeds as follows:
- * If DOSISH or VMSISH:
- * + look for ./scriptname{,.foo,.bar}
- * + search the PATH for scriptname{,.foo,.bar}
- *
- * If !DOSISH:
- * + look *only* in the PATH for scriptname{,.foo,.bar} (note
- * this will not look in '.' if it's not in the PATH)
- */
- tmpbuf[0] = '\0';
-
-#ifdef VMS
-# ifdef ALWAYS_DEFTYPES
- len = strlen(scriptname);
- if (!(len == 1 && *scriptname == '-') && scriptname[len-1] != ':') {
- int hasdir, idx = 0, deftypes = 1;
- bool seen_dot = 1;
-
- hasdir = !dosearch || (strpbrk(scriptname,":[</") != Nullch) ;
-# else
- if (dosearch) {
- int hasdir, idx = 0, deftypes = 1;
- bool seen_dot = 1;
-
- hasdir = (strpbrk(scriptname,":[</") != Nullch) ;
-# endif
- /* The first time through, just add SEARCH_EXTS to whatever we
- * already have, so we can check for default file types. */
- while (deftypes ||
- (!hasdir && my_trnlnm("DCL$PATH",tmpbuf,idx++)) )
- {
- if (deftypes) {
- deftypes = 0;
- *tmpbuf = '\0';
- }
- if ((strlen(tmpbuf) + strlen(scriptname)
- + MAX_EXT_LEN) >= sizeof tmpbuf)
- continue; /* don't search dir with too-long name */
- strcat(tmpbuf, scriptname);
-#else /* !VMS */
-
-#ifdef DOSISH
- if (strEQ(scriptname, "-"))
- dosearch = 0;
- if (dosearch) { /* Look in '.' first. */
- char *cur = scriptname;
-#ifdef SEARCH_EXTS
- if ((curext = strrchr(scriptname,'.'))) /* possible current ext */
- while (ext[i])
- if (strEQ(ext[i++],curext)) {
- extidx = -1; /* already has an ext */
- break;
- }
- do {
-#endif
- DEBUG_p(PerlIO_printf(Perl_debug_log,
- "Looking for %s\n",cur));
- if (PerlLIO_stat(cur,&PL_statbuf) >= 0
- && !S_ISDIR(PL_statbuf.st_mode)) {
- dosearch = 0;
- scriptname = cur;
-#ifdef SEARCH_EXTS
- break;
-#endif
- }
-#ifdef SEARCH_EXTS
- if (cur == scriptname) {
- len = strlen(scriptname);
- if (len+MAX_EXT_LEN+1 >= sizeof(tmpbuf))
- break;
- cur = strcpy(tmpbuf, scriptname);
- }
- } while (extidx >= 0 && ext[extidx] /* try an extension? */
- && strcpy(tmpbuf+len, ext[extidx++]));
-#endif
- }
-#endif
-
-#ifdef MACOS_TRADITIONAL
- if (dosearch && !strchr(scriptname, ':') &&
- (s = PerlEnv_getenv("Commands")))
-#else
- if (dosearch && !strchr(scriptname, '/')
-#ifdef DOSISH
- && !strchr(scriptname, '\\')
-#endif
- && (s = PerlEnv_getenv("PATH")))
-#endif
- {
- bool seen_dot = 0;
-
- PL_bufend = s + strlen(s);
- while (s < PL_bufend) {
-#ifdef MACOS_TRADITIONAL
- s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, PL_bufend,
- ',',
- &len);
-#else
-#if defined(atarist) || defined(DOSISH)
- for (len = 0; *s
-# ifdef atarist
- && *s != ','
-# endif
- && *s != ';'; len++, s++) {
- if (len < sizeof tmpbuf)
- tmpbuf[len] = *s;
- }
- if (len < sizeof tmpbuf)
- tmpbuf[len] = '\0';
-#else /* ! (atarist || DOSISH) */
- s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, PL_bufend,
- ':',
- &len);
-#endif /* ! (atarist || DOSISH) */
-#endif /* MACOS_TRADITIONAL */
- if (s < PL_bufend)
- s++;
- if (len + 1 + strlen(scriptname) + MAX_EXT_LEN >= sizeof tmpbuf)
- continue; /* don't search dir with too-long name */
-#ifdef MACOS_TRADITIONAL
- if (len && tmpbuf[len - 1] != ':')
- tmpbuf[len++] = ':';
-#else
- if (len
-#if defined(atarist) || defined(__MINT__) || defined(DOSISH)
- && tmpbuf[len - 1] != '/'
- && tmpbuf[len - 1] != '\\'
-#endif
- )
- tmpbuf[len++] = '/';
- if (len == 2 && tmpbuf[0] == '.')
- seen_dot = 1;
-#endif
- (void)strcpy(tmpbuf + len, scriptname);
-#endif /* !VMS */
-
-#ifdef SEARCH_EXTS
- len = strlen(tmpbuf);
- if (extidx > 0) /* reset after previous loop */
- extidx = 0;
- do {
-#endif
- DEBUG_p(PerlIO_printf(Perl_debug_log, "Looking for %s\n",tmpbuf));
- retval = PerlLIO_stat(tmpbuf,&PL_statbuf);
- if (S_ISDIR(PL_statbuf.st_mode)) {
- retval = -1;
- }
-#ifdef SEARCH_EXTS
- } while ( retval < 0 /* not there */
- && extidx>=0 && ext[extidx] /* try an extension? */
- && strcpy(tmpbuf+len, ext[extidx++])
- );
-#endif
- if (retval < 0)
- continue;
- if (S_ISREG(PL_statbuf.st_mode)
- && cando(S_IRUSR,TRUE,&PL_statbuf)
-#if !defined(DOSISH) && !defined(MACOS_TRADITIONAL)
- && cando(S_IXUSR,TRUE,&PL_statbuf)
-#endif
- )
- {
- xfound = tmpbuf; /* bingo! */
- break;
- }
- if (!xfailed)
- xfailed = savepv(tmpbuf);
- }
-#ifndef DOSISH
- if (!xfound && !seen_dot && !xfailed &&
- (PerlLIO_stat(scriptname,&PL_statbuf) < 0
- || S_ISDIR(PL_statbuf.st_mode)))
-#endif
- seen_dot = 1; /* Disable message. */
- if (!xfound) {
- if (flags & 1) { /* do or die? */
- Perl_croak(aTHX_ "Can't %s %s%s%s",
- (xfailed ? "execute" : "find"),
- (xfailed ? xfailed : scriptname),
- (xfailed ? "" : " on PATH"),
- (xfailed || seen_dot) ? "" : ", '.' not in PATH");
- }
- scriptname = Nullch;
- }
- if (xfailed)
- Safefree(xfailed);
- scriptname = xfound;
- }
- return (scriptname ? savepv(scriptname) : Nullch);
-}
-
-#ifndef PERL_GET_CONTEXT_DEFINED
-
-void *
-Perl_get_context(void)
-{
-#if defined(USE_THREADS) || defined(USE_ITHREADS)
-# ifdef OLD_PTHREADS_API
- pthread_addr_t t;
- if (pthread_getspecific(PL_thr_key, &t))
- Perl_croak_nocontext("panic: pthread_getspecific");
- return (void*)t;
-# else
-# ifdef I_MACH_CTHREADS
- return (void*)cthread_data(cthread_self());
-# else
- return (void*)pthread_getspecific(PL_thr_key);
-# endif
-# endif
-#else
- return (void*)NULL;
-#endif
-}
-
-void
-Perl_set_context(void *t)
-{
-#if defined(USE_THREADS) || defined(USE_ITHREADS)
-# ifdef I_MACH_CTHREADS
- cthread_set_data(cthread_self(), t);
-# else
- if (pthread_setspecific(PL_thr_key, t))
- Perl_croak_nocontext("panic: pthread_setspecific");
-# endif
-#endif
-}
-
-#endif /* !PERL_GET_CONTEXT_DEFINED */
-
-#ifdef USE_THREADS
-
-#ifdef FAKE_THREADS
-/* Very simplistic scheduler for now */
-void
-schedule(void)
-{
- thr = thr->i.next_run;
-}
-
-void
-Perl_cond_init(pTHX_ perl_cond *cp)
-{
- *cp = 0;
-}
-
-void
-Perl_cond_signal(pTHX_ perl_cond *cp)
-{
- perl_os_thread t;
- perl_cond cond = *cp;
-
- if (!cond)
- return;
- t = cond->thread;
- /* Insert t in the runnable queue just ahead of us */
- t->i.next_run = thr->i.next_run;
- thr->i.next_run->i.prev_run = t;
- t->i.prev_run = thr;
- thr->i.next_run = t;
- thr->i.wait_queue = 0;
- /* Remove from the wait queue */
- *cp = cond->next;
- Safefree(cond);
-}
-
-void
-Perl_cond_broadcast(pTHX_ perl_cond *cp)
-{
- perl_os_thread t;
- perl_cond cond, cond_next;
-
- for (cond = *cp; cond; cond = cond_next) {
- t = cond->thread;
- /* Insert t in the runnable queue just ahead of us */
- t->i.next_run = thr->i.next_run;
- thr->i.next_run->i.prev_run = t;
- t->i.prev_run = thr;
- thr->i.next_run = t;
- thr->i.wait_queue = 0;
- /* Remove from the wait queue */
- cond_next = cond->next;
- Safefree(cond);
- }
- *cp = 0;
-}
-
-void
-Perl_cond_wait(pTHX_ perl_cond *cp)
-{
- perl_cond cond;
-
- if (thr->i.next_run == thr)
- Perl_croak(aTHX_ "panic: perl_cond_wait called by last runnable thread");
-
- New(666, cond, 1, struct perl_wait_queue);
- cond->thread = thr;
- cond->next = *cp;
- *cp = cond;
- thr->i.wait_queue = cond;
- /* Remove ourselves from runnable queue */
- thr->i.next_run->i.prev_run = thr->i.prev_run;
- thr->i.prev_run->i.next_run = thr->i.next_run;
-}
-#endif /* FAKE_THREADS */
-
-MAGIC *
-Perl_condpair_magic(pTHX_ SV *sv)
-{
- MAGIC *mg;
-
- SvUPGRADE(sv, SVt_PVMG);
- mg = mg_find(sv, 'm');
- if (!mg) {
- condpair_t *cp;
-
- New(53, cp, 1, condpair_t);
- MUTEX_INIT(&cp->mutex);
- COND_INIT(&cp->owner_cond);
- COND_INIT(&cp->cond);
- cp->owner = 0;
- LOCK_CRED_MUTEX; /* XXX need separate mutex? */
- mg = mg_find(sv, 'm');
- if (mg) {
- /* someone else beat us to initialising it */
- UNLOCK_CRED_MUTEX; /* XXX need separate mutex? */
- MUTEX_DESTROY(&cp->mutex);
- COND_DESTROY(&cp->owner_cond);
- COND_DESTROY(&cp->cond);
- Safefree(cp);
- }
- else {
- sv_magic(sv, Nullsv, 'm', 0, 0);
- mg = SvMAGIC(sv);
- mg->mg_ptr = (char *)cp;
- mg->mg_len = sizeof(cp);
- UNLOCK_CRED_MUTEX; /* XXX need separate mutex? */
- DEBUG_S(WITH_THR(PerlIO_printf(Perl_debug_log,
- "%p: condpair_magic %p\n", thr, sv));)
- }
- }
- return mg;
-}
-
-SV *
-Perl_sv_lock(pTHX_ SV *osv)
-{
- MAGIC *mg;
- SV *sv = osv;
-
- LOCK_SV_LOCK_MUTEX;
- if (SvROK(sv)) {
- sv = SvRV(sv);
- }
-
- mg = condpair_magic(sv);
- MUTEX_LOCK(MgMUTEXP(mg));
- if (MgOWNER(mg) == thr)
- MUTEX_UNLOCK(MgMUTEXP(mg));
- else {
- while (MgOWNER(mg))
- COND_WAIT(MgOWNERCONDP(mg), MgMUTEXP(mg));
- MgOWNER(mg) = thr;
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "0x%"UVxf": Perl_lock lock 0x%"UVxf"\n",
- PTR2UV(thr), PTR2UV(sv));)
- MUTEX_UNLOCK(MgMUTEXP(mg));
- SAVEDESTRUCTOR_X(Perl_unlock_condpair, sv);
- }
- UNLOCK_SV_LOCK_MUTEX;
- return sv;
-}
-
-/*
- * Make a new perl thread structure using t as a prototype. Some of the
- * fields for the new thread are copied from the prototype thread, t,
- * so t should not be running in perl at the time this function is
- * called. The use by ext/Thread/Thread.xs in core perl (where t is the
- * thread calling new_struct_thread) clearly satisfies this constraint.
- */
-struct perl_thread *
-Perl_new_struct_thread(pTHX_ struct perl_thread *t)
-{
-#if !defined(PERL_IMPLICIT_CONTEXT)
- struct perl_thread *thr;
-#endif
- SV *sv;
- SV **svp;
- I32 i;
-
- sv = newSVpvn("", 0);
- SvGROW(sv, sizeof(struct perl_thread) + 1);
- SvCUR_set(sv, sizeof(struct perl_thread));
- thr = (Thread) SvPVX(sv);
-#ifdef DEBUGGING
- memset(thr, 0xab, sizeof(struct perl_thread));
- PL_markstack = 0;
- PL_scopestack = 0;
- PL_savestack = 0;
- PL_retstack = 0;
- PL_dirty = 0;
- PL_localizing = 0;
- Zero(&PL_hv_fetch_ent_mh, 1, HE);
- PL_efloatbuf = (char*)NULL;
- PL_efloatsize = 0;
-#else
- Zero(thr, 1, struct perl_thread);
-#endif
-
- thr->oursv = sv;
- init_stacks();
-
- PL_curcop = &PL_compiling;
- thr->interp = t->interp;
- thr->cvcache = newHV();
- thr->threadsv = newAV();
- thr->specific = newAV();
- thr->errsv = newSVpvn("", 0);
- thr->flags = THRf_R_JOINABLE;
- MUTEX_INIT(&thr->mutex);
-
- JMPENV_BOOTSTRAP;
-
- PL_in_eval = EVAL_NULL; /* ~(EVAL_INEVAL|EVAL_WARNONLY|EVAL_KEEPERR|EVAL_INREQUIRE) */
- PL_restartop = 0;
-
- PL_statname = NEWSV(66,0);
- PL_errors = newSVpvn("", 0);
- PL_maxscream = -1;
- PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
- PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);
- PL_regint_start = MEMBER_TO_FPTR(Perl_re_intuit_start);
- PL_regint_string = MEMBER_TO_FPTR(Perl_re_intuit_string);
- PL_regfree = MEMBER_TO_FPTR(Perl_pregfree);
- PL_regindent = 0;
- PL_reginterp_cnt = 0;
- PL_lastscream = Nullsv;
- PL_screamfirst = 0;
- PL_screamnext = 0;
- PL_reg_start_tmp = 0;
- PL_reg_start_tmpl = 0;
- PL_reg_poscache = Nullch;
-
- /* parent thread's data needs to be locked while we make copy */
- MUTEX_LOCK(&t->mutex);
-
-#ifdef PERL_FLEXIBLE_EXCEPTIONS
- PL_protect = t->Tprotect;
-#endif
-
- PL_curcop = t->Tcurcop; /* XXX As good a guess as any? */
- PL_defstash = t->Tdefstash; /* XXX maybe these should */
- PL_curstash = t->Tcurstash; /* always be set to main? */
-
- PL_tainted = t->Ttainted;
- PL_curpm = t->Tcurpm; /* XXX No PMOP ref count */
- PL_nrs = newSVsv(t->Tnrs);
- PL_rs = t->Tnrs ? SvREFCNT_inc(PL_nrs) : Nullsv;
- PL_last_in_gv = Nullgv;
- PL_ofslen = t->Tofslen;
- PL_ofs = savepvn(t->Tofs, PL_ofslen);
- PL_defoutgv = (GV*)SvREFCNT_inc(t->Tdefoutgv);
- PL_chopset = t->Tchopset;
- PL_bodytarget = newSVsv(t->Tbodytarget);
- PL_toptarget = newSVsv(t->Ttoptarget);
- if (t->Tformtarget == t->Ttoptarget)
- PL_formtarget = PL_toptarget;
- else
- PL_formtarget = PL_bodytarget;
-
- /* Initialise all per-thread SVs that the template thread used */
- svp = AvARRAY(t->threadsv);
- for (i = 0; i <= AvFILLp(t->threadsv); i++, svp++) {
- if (*svp && *svp != &PL_sv_undef) {
- SV *sv = newSVsv(*svp);
- av_store(thr->threadsv, i, sv);
- sv_magic(sv, 0, 0, &PL_threadsv_names[i], 1);
- DEBUG_S(PerlIO_printf(Perl_debug_log,
- "new_struct_thread: copied threadsv %"IVdf" %p->%p\n",
- (IV)i, t, thr));
- }
- }
- thr->threadsvp = AvARRAY(thr->threadsv);
-
- MUTEX_LOCK(&PL_threads_mutex);
- PL_nthreads++;
- thr->tid = ++PL_threadnum;
- thr->next = t->next;
- thr->prev = t;
- t->next = thr;
- thr->next->prev = thr;
- MUTEX_UNLOCK(&PL_threads_mutex);
-
- /* done copying parent's state */
- MUTEX_UNLOCK(&t->mutex);
-
-#ifdef HAVE_THREAD_INTERN
- Perl_init_thread_intern(thr);
-#endif /* HAVE_THREAD_INTERN */
- return thr;
-}
-#endif /* USE_THREADS */
-
-#if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL))
-/*
- * This hack is to force load of "huge" support from libm.a
- * So it is in perl for (say) POSIX to use.
- * Needed for SunOS with Sun's 'acc' for example.
- */
-NV
-Perl_huge(void)
-{
-# if defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)
- return HUGE_VALL;
-# endif
- return HUGE_VAL;
-}
-#endif
-
-#ifdef PERL_GLOBAL_STRUCT
-struct perl_vars *
-Perl_GetVars(pTHX)
-{
- return &PL_Vars;
-}
-#endif
-
-char **
-Perl_get_op_names(pTHX)
-{
- return PL_op_name;
-}
-
-char **
-Perl_get_op_descs(pTHX)
-{
- return PL_op_desc;
-}
-
-char *
-Perl_get_no_modify(pTHX)
-{
- return (char*)PL_no_modify;
-}
-
-U32 *
-Perl_get_opargs(pTHX)
-{
- return PL_opargs;
-}
-
-PPADDR_t*
-Perl_get_ppaddr(pTHX)
-{
- return &PL_ppaddr;
-}
-
-#ifndef HAS_GETENV_LEN
-char *
-Perl_getenv_len(pTHX_ const char *env_elem, unsigned long *len)
-{
- char *env_trans = PerlEnv_getenv(env_elem);
- if (env_trans)
- *len = strlen(env_trans);
- return env_trans;
-}
-#endif
-
-
-MGVTBL*
-Perl_get_vtbl(pTHX_ int vtbl_id)
-{
- MGVTBL* result = Null(MGVTBL*);
-
- switch(vtbl_id) {
- case want_vtbl_sv:
- result = &PL_vtbl_sv;
- break;
- case want_vtbl_env:
- result = &PL_vtbl_env;
- break;
- case want_vtbl_envelem:
- result = &PL_vtbl_envelem;
- break;
- case want_vtbl_sig:
- result = &PL_vtbl_sig;
- break;
- case want_vtbl_sigelem:
- result = &PL_vtbl_sigelem;
- break;
- case want_vtbl_pack:
- result = &PL_vtbl_pack;
- break;
- case want_vtbl_packelem:
- result = &PL_vtbl_packelem;
- break;
- case want_vtbl_dbline:
- result = &PL_vtbl_dbline;
- break;
- case want_vtbl_isa:
- result = &PL_vtbl_isa;
- break;
- case want_vtbl_isaelem:
- result = &PL_vtbl_isaelem;
- break;
- case want_vtbl_arylen:
- result = &PL_vtbl_arylen;
- break;
- case want_vtbl_glob:
- result = &PL_vtbl_glob;
- break;
- case want_vtbl_mglob:
- result = &PL_vtbl_mglob;
- break;
- case want_vtbl_nkeys:
- result = &PL_vtbl_nkeys;
- break;
- case want_vtbl_taint:
- result = &PL_vtbl_taint;
- break;
- case want_vtbl_substr:
- result = &PL_vtbl_substr;
- break;
- case want_vtbl_vec:
- result = &PL_vtbl_vec;
- break;
- case want_vtbl_pos:
- result = &PL_vtbl_pos;
- break;
- case want_vtbl_bm:
- result = &PL_vtbl_bm;
- break;
- case want_vtbl_fm:
- result = &PL_vtbl_fm;
- break;
- case want_vtbl_uvar:
- result = &PL_vtbl_uvar;
- break;
-#ifdef USE_THREADS
- case want_vtbl_mutex:
- result = &PL_vtbl_mutex;
- break;
-#endif
- case want_vtbl_defelem:
- result = &PL_vtbl_defelem;
- break;
- case want_vtbl_regexp:
- result = &PL_vtbl_regexp;
- break;
- case want_vtbl_regdata:
- result = &PL_vtbl_regdata;
- break;
- case want_vtbl_regdatum:
- result = &PL_vtbl_regdatum;
- break;
-#ifdef USE_LOCALE_COLLATE
- case want_vtbl_collxfrm:
- result = &PL_vtbl_collxfrm;
- break;
-#endif
- case want_vtbl_amagic:
- result = &PL_vtbl_amagic;
- break;
- case want_vtbl_amagicelem:
- result = &PL_vtbl_amagicelem;
- break;
- case want_vtbl_backref:
- result = &PL_vtbl_backref;
- break;
- }
- return result;
-}
-
-#if !defined(FFLUSH_NULL) && defined(HAS__FWALK)
-static int S_fflush(FILE *fp);
-
-static int
-S_fflush(FILE *fp)
-{
- return fflush(fp);
-}
-#endif
-
-I32
-Perl_my_fflush_all(pTHX)
-{
-#if defined(FFLUSH_NULL)
- return PerlIO_flush(NULL);
-#else
-# if defined(HAS__FWALK)
- /* undocumented, unprototyped, but very useful BSDism */
- extern void _fwalk(int (*)(FILE *));
- _fwalk(&S_fflush);
- return 0;
-# else
- long open_max = -1;
-# if defined(FFLUSH_ALL) && defined(HAS_STDIO_STREAM_ARRAY)
-# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
- open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
-# else
-# if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
- open_max = sysconf(_SC_OPEN_MAX);
-# else
-# ifdef FOPEN_MAX
- open_max = FOPEN_MAX;
-# else
-# ifdef OPEN_MAX
- open_max = OPEN_MAX;
-# else
-# ifdef _NFILE
- open_max = _NFILE;
-# endif
-# endif
-# endif
-# endif
-# endif
- if (open_max > 0) {
- long i;
- for (i = 0; i < open_max; i++)
- if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
- STDIO_STREAM_ARRAY[i]._file < open_max &&
- STDIO_STREAM_ARRAY[i]._flag)
- PerlIO_flush(&STDIO_STREAM_ARRAY[i]);
- return 0;
- }
-# endif
- SETERRNO(EBADF,RMS$_IFI);
- return EOF;
-# endif
-#endif
-}
-
-NV
-Perl_my_atof(pTHX_ const char* s)
-{
- NV x = 0.0;
-#ifdef USE_LOCALE_NUMERIC
- if ((PL_hints & HINT_LOCALE) && PL_numeric_local) {
- NV y;
-
- Perl_atof2(s, x);
- SET_NUMERIC_STANDARD();
- Perl_atof2(s, y);
- SET_NUMERIC_LOCAL();
- if ((y < 0.0 && y < x) || (y > 0.0 && y > x))
- return y;
- }
- else
- Perl_atof2(s, x);
-#else
- Perl_atof2(s, x);
-#endif
- return x;
-}
-
-void
-Perl_report_evil_fh(pTHX_ GV *gv, IO *io, I32 op)
-{
- char *vile;
- I32 warn_type;
- char *func =
- op == OP_READLINE ? "readline" : /* "<HANDLE>" not nice */
- op == OP_LEAVEWRITE ? "write" : /* "write exit" not nice */
- PL_op_desc[op];
- char *pars = OP_IS_FILETEST(op) ? "" : "()";
- char *type = OP_IS_SOCKET(op) || (io && IoTYPE(io) == IoTYPE_SOCKET) ?
- "socket" : "filehandle";
- char *name = NULL;
-
- if (io && IoTYPE(io) == IoTYPE_CLOSED) {
- vile = "closed";
- warn_type = WARN_CLOSED;
- }
- else {
- vile = "unopened";
- warn_type = WARN_UNOPENED;
- }
-
- if (gv && isGV(gv)) {
- SV *sv = sv_newmortal();
- gv_efullname4(sv, gv, Nullch, FALSE);
- name = SvPVX(sv);
- }
-
- if (name && *name) {
- Perl_warner(aTHX_ warn_type,
- "%s%s on %s %s %s", func, pars, vile, type, name);
- if (io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP))
- Perl_warner(aTHX_ warn_type,
- "\t(Are you trying to call %s%s on dirhandle %s?)\n",
- func, pars, name);
- }
- else {
- Perl_warner(aTHX_ warn_type,
- "%s%s on %s %s", func, pars, vile, type);
- if (io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP))
- Perl_warner(aTHX_ warn_type,
- "\t(Are you trying to call %s%s on dirhandle?)\n",
- func, pars);
- }
-}
-
-#ifdef EBCDIC
-/* in ASCII order, not that it matters */
-static const char controllablechars[] = "?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";
-
-int
-Perl_ebcdic_control(pTHX_ int ch)
-{
- if (ch > 'a') {
- char *ctlp;
-
- if (islower(ch))
- ch = toupper(ch);
-
- if ((ctlp = strchr(controllablechars, ch)) == 0) {
- Perl_die(aTHX_ "unrecognised control character '%c'\n", ch);
- }
-
- if (ctlp == controllablechars)
- return('\177'); /* DEL */
- else
- return((unsigned char)(ctlp - controllablechars - 1));
- } else { /* Want uncontrol */
- if (ch == '\177' || ch == -1)
- return('?');
- else if (ch == '\157')
- return('\177');
- else if (ch == '\174')
- return('\000');
- else if (ch == '^') /* '\137' in 1047, '\260' in 819 */
- return('\036');
- else if (ch == '\155')
- return('\037');
- else if (0 < ch && ch < (sizeof(controllablechars) - 1))
- return(controllablechars[ch+1]);
- else
- Perl_die(aTHX_ "invalid control request: '\\%03o'\n", ch & 0xFF);
- }
-}
-#endif
diff --git a/contrib/perl5/util.h b/contrib/perl5/util.h
deleted file mode 100644
index d188e34..0000000
--- a/contrib/perl5/util.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* util.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-#ifdef VMS
-# define PERL_FILE_IS_ABSOLUTE(f) \
- (*(f) == '/' \
- || (strchr(f,':') \
- || ((*(f) == '[' || *(f) == '<') \
- && (isALNUM((f)[1]) || strchr("$-_]>",(f)[1])))))
-
-#else /* !VMS */
-# ifdef WIN32
-# define PERL_FILE_IS_ABSOLUTE(f) \
- (*(f) == '/' \
- || ((f)[0] && (f)[1] == ':') /* drive name */ \
- || ((f)[0] == '\\' && (f)[1] == '\\')) /* UNC path */
-# else /* !WIN32 */
-# if defined( DOSISH) || defined(EPOC)
-# define PERL_FILE_IS_ABSOLUTE(f) \
- (*(f) == '/' \
- || ((f)[0] && (f)[1] == ':')) /* drive name */
-# else /* NEITHER DOSISH NOR EPOCISH */
-# ifdef MACOS_TRADITIONAL
-# define PERL_FILE_IS_ABSOLUTE(f) (strchr(f, ':') && *(f) != ':')
-# else /* !MACOS_TRADITIONAL */
-# define PERL_FILE_IS_ABSOLUTE(f) (*(f) == '/')
-# endif /* MACOS_TRADITIONAL */
-# endif /* DOSISH */
-# endif /* WIN32 */
-#endif /* VMS */
diff --git a/contrib/perl5/utils/Makefile b/contrib/perl5/utils/Makefile
deleted file mode 100644
index ec26cd8..0000000
--- a/contrib/perl5/utils/Makefile
+++ /dev/null
@@ -1,57 +0,0 @@
-
-PERL = ../miniperl
-REALPERL = ../perl
-
-# Files to be built with variable substitution after miniperl is
-# available. Dependencies handled manually below (for now).
-
-pl = c2ph.PL h2ph.PL h2xs.PL perlbug.PL perldoc.PL pl2pm.PL splain.PL perlcc.PL dprofpp.PL
-plextract = c2ph h2ph h2xs perlbug perldoc pl2pm splain perlcc dprofpp
-plextractexe = ./c2ph ./h2ph ./h2xs ./perlbug ./perldoc ./pl2pm ./splain ./perlcc ./dprofpp
-
-all: $(plextract)
-
-compile: all $(plextract)
- $(REALPERL) -I../lib perlcc c2ph -o c2ph.exe -v 10 -log ../compilelog;
- $(REALPERL) -I../lib perlcc h2ph -o h2ph.exe -v 10 -log ../compilelog;
- $(REALPERL) -I../lib perlcc h2xs -o h2xs.exe -v 10 -log ../compilelog;
- $(REALPERL) -I../lib perlcc perlbug -o perlbug.exe -v 10 -log ../compilelog;
- $(REALPERL) -I../lib perlcc perldoc -o perldoc.exe -v 10 -log ../compilelog;
- $(REALPERL) -I../lib perlcc pl2pm -o pl2pm.exe -v 10 -log ../compilelog;
- $(REALPERL) -I../lib perlcc splain -o splain.exe -v 10 -log ../compilelog;
- $(REALPERL) -I../lib perlcc perlcc -o perlcc.exe -v 10 -log ../compilelog;
- $(REALPERL) -I../lib perlcc dprofpp -o dprofpp.exe -v 10 -log ../compilelog;
-
-$(plextract):
- $(PERL) -I../lib $@.PL
-
-c2ph: c2ph.PL ../config.sh
-
-h2ph: h2ph.PL ../config.sh
-
-h2xs: h2xs.PL ../config.sh
-
-perlbug: perlbug.PL ../config.sh ../patchlevel.h
-
-perldoc: perldoc.PL ../config.sh
-
-pl2pm: pl2pm.PL ../config.sh
-
-splain: splain.PL ../config.sh ../lib/diagnostics.pm
-
-perlcc: perlcc.PL ../config.sh
-
-dprofpp: dprofpp.PL ../config.sh
-
-clean:
-
-realclean:
- rm -rf $(plextract) pstruct $(plextractexe)
- rm -f ../t/_h2ph_pre.ph
-
-clobber: realclean
-
-distclean: clobber
-
-veryclean: distclean
- -rm -f *~ *.org
diff --git a/contrib/perl5/utils/c2ph.PL b/contrib/perl5/utils/c2ph.PL
deleted file mode 100644
index 38b259f..0000000
--- a/contrib/perl5/utils/c2ph.PL
+++ /dev/null
@@ -1,1403 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-#
-#
-# c2ph (aka pstruct)
-# Tom Christiansen, <tchrist@convex.com>
-#
-# As pstruct, dump C structures as generated from 'cc -g -S' stabs.
-# As c2ph, do this PLUS generate perl code for getting at the structures.
-#
-# See the usage message for more. If this isn't enough, read the code.
-#
-
-=head1 NAME
-
-c2ph, pstruct - Dump C structures as generated from C<cc -g -S> stabs
-
-=head1 SYNOPSIS
-
- c2ph [-dpnP] [var=val] [files ...]
-
-=head2 OPTIONS
-
- Options:
-
- -w wide; short for: type_width=45 member_width=35 offset_width=8
- -x hex; short for: offset_fmt=x offset_width=08 size_fmt=x size_width=04
-
- -n do not generate perl code (default when invoked as pstruct)
- -p generate perl code (default when invoked as c2ph)
- -v generate perl code, with C decls as comments
-
- -i do NOT recompute sizes for intrinsic datatypes
- -a dump information on intrinsics also
-
- -t trace execution
- -d spew reams of debugging output
-
- -slist give comma-separated list a structures to dump
-
-=head1 DESCRIPTION
-
-The following is the old c2ph.doc documentation by Tom Christiansen
-<tchrist@perl.com>
-Date: 25 Jul 91 08:10:21 GMT
-
-Once upon a time, I wrote a program called pstruct. It was a perl
-program that tried to parse out C structures and display their member
-offsets for you. This was especially useful for people looking at
-binary dumps or poking around the kernel.
-
-Pstruct was not a pretty program. Neither was it particularly robust.
-The problem, you see, was that the C compiler was much better at parsing
-C than I could ever hope to be.
-
-So I got smart: I decided to be lazy and let the C compiler parse the C,
-which would spit out debugger stabs for me to read. These were much
-easier to parse. It's still not a pretty program, but at least it's more
-robust.
-
-Pstruct takes any .c or .h files, or preferably .s ones, since that's
-the format it is going to massage them into anyway, and spits out
-listings like this:
-
- struct tty {
- int tty.t_locker 000 4
- int tty.t_mutex_index 004 4
- struct tty * tty.t_tp_virt 008 4
- struct clist tty.t_rawq 00c 20
- int tty.t_rawq.c_cc 00c 4
- int tty.t_rawq.c_cmax 010 4
- int tty.t_rawq.c_cfx 014 4
- int tty.t_rawq.c_clx 018 4
- struct tty * tty.t_rawq.c_tp_cpu 01c 4
- struct tty * tty.t_rawq.c_tp_iop 020 4
- unsigned char * tty.t_rawq.c_buf_cpu 024 4
- unsigned char * tty.t_rawq.c_buf_iop 028 4
- struct clist tty.t_canq 02c 20
- int tty.t_canq.c_cc 02c 4
- int tty.t_canq.c_cmax 030 4
- int tty.t_canq.c_cfx 034 4
- int tty.t_canq.c_clx 038 4
- struct tty * tty.t_canq.c_tp_cpu 03c 4
- struct tty * tty.t_canq.c_tp_iop 040 4
- unsigned char * tty.t_canq.c_buf_cpu 044 4
- unsigned char * tty.t_canq.c_buf_iop 048 4
- struct clist tty.t_outq 04c 20
- int tty.t_outq.c_cc 04c 4
- int tty.t_outq.c_cmax 050 4
- int tty.t_outq.c_cfx 054 4
- int tty.t_outq.c_clx 058 4
- struct tty * tty.t_outq.c_tp_cpu 05c 4
- struct tty * tty.t_outq.c_tp_iop 060 4
- unsigned char * tty.t_outq.c_buf_cpu 064 4
- unsigned char * tty.t_outq.c_buf_iop 068 4
- (*int)() tty.t_oproc_cpu 06c 4
- (*int)() tty.t_oproc_iop 070 4
- (*int)() tty.t_stopproc_cpu 074 4
- (*int)() tty.t_stopproc_iop 078 4
- struct thread * tty.t_rsel 07c 4
-
-etc.
-
-
-Actually, this was generated by a particular set of options. You can control
-the formatting of each column, whether you prefer wide or fat, hex or decimal,
-leading zeroes or whatever.
-
-All you need to be able to use this is a C compiler than generates
-BSD/GCC-style stabs. The B<-g> option on native BSD compilers and GCC
-should get this for you.
-
-To learn more, just type a bogus option, like B<-\?>, and a long usage message
-will be provided. There are a fair number of possibilities.
-
-If you're only a C programmer, than this is the end of the message for you.
-You can quit right now, and if you care to, save off the source and run it
-when you feel like it. Or not.
-
-
-
-But if you're a perl programmer, then for you I have something much more
-wondrous than just a structure offset printer.
-
-You see, if you call pstruct by its other incybernation, c2ph, you have a code
-generator that translates C code into perl code! Well, structure and union
-declarations at least, but that's quite a bit.
-
-Prior to this point, anyone programming in perl who wanted to interact
-with C programs, like the kernel, was forced to guess the layouts of
-the C strutures, and then hardwire these into his program. Of course,
-when you took your wonderfully crafted program to a system where the
-sgtty structure was laid out differently, you program broke. Which is
-a shame.
-
-We've had Larry's h2ph translator, which helped, but that only works on
-cpp symbols, not real C, which was also very much needed. What I offer
-you is a symbolic way of getting at all the C structures. I've couched
-them in terms of packages and functions. Consider the following program:
-
- #!/usr/local/bin/perl
-
- require 'syscall.ph';
- require 'sys/time.ph';
- require 'sys/resource.ph';
-
- $ru = "\0" x &rusage'sizeof();
-
- syscall(&SYS_getrusage, &RUSAGE_SELF, $ru) && die "getrusage: $!";
-
- @ru = unpack($t = &rusage'typedef(), $ru);
-
- $utime = $ru[ &rusage'ru_utime + &timeval'tv_sec ]
- + ($ru[ &rusage'ru_utime + &timeval'tv_usec ]) / 1e6;
-
- $stime = $ru[ &rusage'ru_stime + &timeval'tv_sec ]
- + ($ru[ &rusage'ru_stime + &timeval'tv_usec ]) / 1e6;
-
- printf "you have used %8.3fs+%8.3fu seconds.\n", $utime, $stime;
-
-
-As you see, the name of the package is the name of the structure. Regular
-fields are just their own names. Plus the following accessor functions are
-provided for your convenience:
-
- struct This takes no arguments, and is merely the number of first-level
- elements in the structure. You would use this for indexing
- into arrays of structures, perhaps like this
-
-
- $usec = $u[ &user'u_utimer
- + (&ITIMER_VIRTUAL * &itimerval'struct)
- + &itimerval'it_value
- + &timeval'tv_usec
- ];
-
- sizeof Returns the bytes in the structure, or the member if
- you pass it an argument, such as
-
- &rusage'sizeof(&rusage'ru_utime)
-
- typedef This is the perl format definition for passing to pack and
- unpack. If you ask for the typedef of a nothing, you get
- the whole structure, otherwise you get that of the member
- you ask for. Padding is taken care of, as is the magic to
- guarantee that a union is unpacked into all its aliases.
- Bitfields are not quite yet supported however.
-
- offsetof This function is the byte offset into the array of that
- member. You may wish to use this for indexing directly
- into the packed structure with vec() if you're too lazy
- to unpack it.
-
- typeof Not to be confused with the typedef accessor function, this
- one returns the C type of that field. This would allow
- you to print out a nice structured pretty print of some
- structure without knoning anything about it beforehand.
- No args to this one is a noop. Someday I'll post such
- a thing to dump out your u structure for you.
-
-
-The way I see this being used is like basically this:
-
- % h2ph <some_include_file.h > /usr/lib/perl/tmp.ph
- % c2ph some_include_file.h >> /usr/lib/perl/tmp.ph
- % install
-
-It's a little tricker with c2ph because you have to get the includes right.
-I can't know this for your system, but it's not usually too terribly difficult.
-
-The code isn't pretty as I mentioned -- I never thought it would be a 1000-
-line program when I started, or I might not have begun. :-) But I would have
-been less cavalier in how the parts of the program communicated with each
-other, etc. It might also have helped if I didn't have to divine the makeup
-of the stabs on the fly, and then account for micro differences between my
-compiler and gcc.
-
-Anyway, here it is. Should run on perl v4 or greater. Maybe less.
-
-
- --tom
-
-=cut
-
-$RCSID = '$Id: c2ph,v 1.7 95/10/28 10:41:47 tchrist Exp Locker: tchrist $';
-
-
-######################################################################
-
-# some handy data definitions. many of these can be reset later.
-
-$bitorder = 'b'; # ascending; set to B for descending bit fields
-
-%intrinsics =
-%template = (
- 'char', 'c',
- 'unsigned char', 'C',
- 'short', 's',
- 'short int', 's',
- 'unsigned short', 'S',
- 'unsigned short int', 'S',
- 'short unsigned int', 'S',
- 'int', 'i',
- 'unsigned int', 'I',
- 'long', 'l',
- 'long int', 'l',
- 'unsigned long', 'L',
- 'unsigned long', 'L',
- 'long unsigned int', 'L',
- 'unsigned long int', 'L',
- 'long long', 'q',
- 'long long int', 'q',
- 'unsigned long long', 'Q',
- 'unsigned long long int', 'Q',
- 'float', 'f',
- 'double', 'd',
- 'pointer', 'p',
- 'null', 'x',
- 'neganull', 'X',
- 'bit', $bitorder,
-);
-
-&buildscrunchlist;
-delete $intrinsics{'neganull'};
-delete $intrinsics{'bit'};
-delete $intrinsics{'null'};
-
-# use -s to recompute sizes
-%sizeof = (
- 'char', '1',
- 'unsigned char', '1',
- 'short', '2',
- 'short int', '2',
- 'unsigned short', '2',
- 'unsigned short int', '2',
- 'short unsigned int', '2',
- 'int', '4',
- 'unsigned int', '4',
- 'long', '4',
- 'long int', '4',
- 'unsigned long', '4',
- 'unsigned long int', '4',
- 'long unsigned int', '4',
- 'long long', '8',
- 'long long int', '8',
- 'unsigned long long', '8',
- 'unsigned long long int', '8',
- 'float', '4',
- 'double', '8',
- 'pointer', '4',
-);
-
-($type_width, $member_width, $offset_width, $size_width) = (20, 20, 6, 5);
-
-($offset_fmt, $size_fmt) = ('d', 'd');
-
-$indent = 2;
-
-$CC = 'cc';
-$CFLAGS = '-g -S';
-$DEFINES = '';
-
-$perl++ if $0 =~ m#/?c2ph$#;
-
-require 'getopts.pl';
-
-eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift;
-
-&Getopts('aixdpvtnws:') || &usage(0);
-
-$opt_d && $debug++;
-$opt_t && $trace++;
-$opt_p && $perl++;
-$opt_v && $verbose++;
-$opt_n && ($perl = 0);
-
-if ($opt_w) {
- ($type_width, $member_width, $offset_width) = (45, 35, 8);
-}
-if ($opt_x) {
- ($offset_fmt, $offset_width, $size_fmt, $size_width) = ( 'x', '08', 'x', 04 );
-}
-
-eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift;
-
-sub PLUMBER {
- select(STDERR);
- print "oops, apperent pager foulup\n";
- $isatty++;
- &usage(1);
-}
-
-sub usage {
- local($oops) = @_;
- unless (-t STDOUT) {
- select(STDERR);
- } elsif (!$oops) {
- $isatty++;
- $| = 1;
- print "hit <RETURN> for further explanation: ";
- <STDIN>;
- open (PIPE, "|". ($ENV{PAGER} || 'more'));
- $SIG{PIPE} = PLUMBER;
- select(PIPE);
- }
-
- print "usage: $0 [-dpnP] [var=val] [files ...]\n";
-
- exit unless $isatty;
-
- print <<EOF;
-
-Options:
-
--w wide; short for: type_width=45 member_width=35 offset_width=8
--x hex; short for: offset_fmt=x offset_width=08 size_fmt=x size_width=04
-
--n do not generate perl code (default when invoked as pstruct)
--p generate perl code (default when invoked as c2ph)
--v generate perl code, with C decls as comments
-
--i do NOT recompute sizes for intrinsic datatypes
--a dump information on intrinsics also
-
--t trace execution
--d spew reams of debugging output
-
--slist give comma-separated list a structures to dump
-
-
-Var Name Default Value Meaning
-
-EOF
-
- &defvar('CC', 'which_compiler to call');
- &defvar('CFLAGS', 'how to generate *.s files with stabs');
- &defvar('DEFINES','any extra cflags or cpp defines, like -I, -D, -U');
-
- print "\n";
-
- &defvar('type_width', 'width of type field (column 1)');
- &defvar('member_width', 'width of member field (column 2)');
- &defvar('offset_width', 'width of offset field (column 3)');
- &defvar('size_width', 'width of size field (column 4)');
-
- print "\n";
-
- &defvar('offset_fmt', 'sprintf format type for offset');
- &defvar('size_fmt', 'sprintf format type for size');
-
- print "\n";
-
- &defvar('indent', 'how far to indent each nesting level');
-
- print <<'EOF';
-
- If any *.[ch] files are given, these will be catted together into
- a temporary *.c file and sent through:
- $CC $CFLAGS $DEFINES
- and the resulting *.s groped for stab information. If no files are
- supplied, then stdin is read directly with the assumption that it
- contains stab information. All other liens will be ignored. At
- most one *.s file should be supplied.
-
-EOF
- close PIPE;
- exit 1;
-}
-
-sub defvar {
- local($var, $msg) = @_;
- printf "%-16s%-15s %s\n", $var, eval "\$$var", $msg;
-}
-
-$recurse = 1;
-
-if (@ARGV) {
- if (grep(!/\.[csh]$/,@ARGV)) {
- warn "Only *.[csh] files expected!\n";
- &usage;
- }
- elsif (grep(/\.s$/,@ARGV)) {
- if (@ARGV > 1) {
- warn "Only one *.s file allowed!\n";
- &usage;
- }
- }
- elsif (@ARGV == 1 && $ARGV[0] =~ /\.c$/) {
- local($dir, $file) = $ARGV[0] =~ m#(.*/)?(.*)$#;
- $chdir = "cd $dir; " if $dir;
- &system("$chdir$CC $CFLAGS $DEFINES $file") && exit 1;
- $ARGV[0] =~ s/\.c$/.s/;
- }
- else {
- $TMP = "/tmp/c2ph.$$.c";
- &system("cat @ARGV > $TMP") && exit 1;
- &system("cd /tmp; $CC $CFLAGS $DEFINES $TMP") && exit 1;
- unlink $TMP;
- $TMP =~ s/\.c$/.s/;
- @ARGV = ($TMP);
- }
-}
-
-if ($opt_s) {
- for (split(/[\s,]+/, $opt_s)) {
- $interested{$_}++;
- }
-}
-
-
-$| = 1 if $debug;
-
-main: {
-
- if ($trace) {
- if (-t && !@ARGV) {
- print STDERR "reading from your keyboard: ";
- } else {
- print STDERR "reading from " . (@ARGV ? "@ARGV" : "<STDIN>").": ";
- }
- }
-
-STAB: while (<>) {
- if ($trace && !($. % 10)) {
- $lineno = $..'';
- print STDERR $lineno, "\b" x length($lineno);
- }
- next unless /^\s*\.stabs\s+/;
- $line = $_;
- s/^\s*\.stabs\s+//;
- if (s/\\\\"[d,]+$//) {
- $saveline .= $line;
- $savebar = $_;
- next STAB;
- }
- if ($saveline) {
- s/^"//;
- $_ = $savebar . $_;
- $line = $saveline;
- }
- &stab;
- $savebar = $saveline = undef;
- }
- print STDERR "$.\n" if $trace;
- unlink $TMP if $TMP;
-
- &compute_intrinsics if $perl && !$opt_i;
-
- print STDERR "resolving types\n" if $trace;
-
- &resolve_types;
- &adjust_start_addrs;
-
- $sum = 2 + $type_width + $member_width;
- $pmask1 = "%-${type_width}s %-${member_width}s";
- $pmask2 = "%-${sum}s %${offset_width}${offset_fmt}%s %${size_width}${size_fmt}%s";
-
-
-
- if ($perl) {
- # resolve template -- should be in stab define order, but even this isn't enough.
- print STDERR "\nbuilding type templates: " if $trace;
- for $i (reverse 0..$#type) {
- next unless defined($name = $type[$i]);
- next unless defined $struct{$name};
- ($iname = $name) =~ s/\..*//;
- $build_recursed = 0;
- &build_template($name) unless defined $template{&psou($name)} ||
- $opt_s && !$interested{$iname};
- }
- print STDERR "\n\n" if $trace;
- }
-
- print STDERR "dumping structs: " if $trace;
-
- local($iam);
-
-
-
- foreach $name (sort keys %struct) {
- ($iname = $name) =~ s/\..*//;
- next if $opt_s && !$interested{$iname};
- print STDERR "$name " if $trace;
-
- undef @sizeof;
- undef @typedef;
- undef @offsetof;
- undef @indices;
- undef @typeof;
- undef @fieldnames;
-
- $mname = &munge($name);
-
- $fname = &psou($name);
-
- print "# " if $perl && $verbose;
- $pcode = '';
- print "$fname {\n" if !$perl || $verbose;
- $template{$fname} = &scrunch($template{$fname}) if $perl;
- &pstruct($name,$name,0);
- print "# " if $perl && $verbose;
- print "}\n" if !$perl || $verbose;
- print "\n" if $perl && $verbose;
-
- if ($perl) {
- print "$pcode";
-
- printf("\nsub %-32s { %4d; }\n\n", "${mname}'struct", $countof{$name});
-
- print <<EOF;
-sub ${mname}'typedef {
- local(\$${mname}'index) = shift;
- defined \$${mname}'index
- ? \$${mname}'typedef[\$${mname}'index]
- : \$${mname}'typedef;
-}
-EOF
-
- print <<EOF;
-sub ${mname}'sizeof {
- local(\$${mname}'index) = shift;
- defined \$${mname}'index
- ? \$${mname}'sizeof[\$${mname}'index]
- : \$${mname}'sizeof;
-}
-EOF
-
- print <<EOF;
-sub ${mname}'offsetof {
- local(\$${mname}'index) = shift;
- defined \$${mname}index
- ? \$${mname}'offsetof[\$${mname}'index]
- : \$${mname}'sizeof;
-}
-EOF
-
- print <<EOF;
-sub ${mname}'typeof {
- local(\$${mname}'index) = shift;
- defined \$${mname}index
- ? \$${mname}'typeof[\$${mname}'index]
- : '$name';
-}
-EOF
-
- print <<EOF;
-sub ${mname}'fieldnames {
- \@${mname}'fieldnames;
-}
-EOF
-
- $iam = ($isastruct{$name} && 's') || ($isaunion{$name} && 'u');
-
- print <<EOF;
-sub ${mname}'isastruct {
- '$iam';
-}
-EOF
-
- print "\$${mname}'typedef = '" . &scrunch($template{$fname})
- . "';\n";
-
- print "\$${mname}'sizeof = $sizeof{$name};\n\n";
-
-
- print "\@${mname}'indices = (", &squishseq(@indices), ");\n";
-
- print "\n";
-
- print "\@${mname}'typedef[\@${mname}'indices] = (",
- join("\n\t", '', @typedef), "\n );\n\n";
- print "\@${mname}'sizeof[\@${mname}'indices] = (",
- join("\n\t", '', @sizeof), "\n );\n\n";
- print "\@${mname}'offsetof[\@${mname}'indices] = (",
- join("\n\t", '', @offsetof), "\n );\n\n";
- print "\@${mname}'typeof[\@${mname}'indices] = (",
- join("\n\t", '', @typeof), "\n );\n\n";
- print "\@${mname}'fieldnames[\@${mname}'indices] = (",
- join("\n\t", '', @fieldnames), "\n );\n\n";
-
- $template_printed{$fname}++;
- $size_printed{$fname}++;
- }
- print "\n";
- }
-
- print STDERR "\n" if $trace;
-
- unless ($perl && $opt_a) {
- print "\n1;\n" if $perl;
- exit;
- }
-
-
-
- foreach $name (sort bysizevalue keys %intrinsics) {
- next if $size_printed{$name};
- print '$',&munge($name),"'sizeof = ", $sizeof{$name}, ";\n";
- }
-
- print "\n";
-
- sub bysizevalue { $sizeof{$a} <=> $sizeof{$b}; }
-
-
- foreach $name (sort keys %intrinsics) {
- print '$',&munge($name),"'typedef = '", $template{$name}, "';\n";
- }
-
- print "\n1;\n" if $perl;
-
- exit;
-}
-
-########################################################################################
-
-
-sub stab {
- next unless $continued || /:[\$\w]+(\(\d+,\d+\))?=[\*\$\w]+/; # (\d+,\d+) is for sun
- s/"// || next;
- s/",([x\d]+),([x\d]+),([x\d]+),.*// || next;
-
- next if /^\s*$/;
-
- $size = $3 if $3;
- $_ = $continued . $_ if length($continued);
- if (s/\\\\$//) {
- # if last 2 chars of string are '\\' then stab is continued
- # in next stab entry
- chop;
- $continued = $_;
- next;
- }
- $continued = '';
-
-
- $line = $_;
-
- if (($name, $pdecl) = /^([\$ \w]+):[tT]((\d+)(=[rufs*](\d+))+)$/) {
- print "$name is a typedef for some funky pointers: $pdecl\n" if $debug;
- &pdecl($pdecl);
- next;
- }
-
-
-
- if (/(([ \w]+):t(\d+|\(\d+,\d+\)))=r?(\d+|\(\d+,\d+\))(;\d+;\d+;)?/) {
- local($ident) = $2;
- push(@intrinsics, $ident);
- $typeno = &typeno($3);
- $type[$typeno] = $ident;
- print STDERR "intrinsic $ident in new type $typeno\n" if $debug;
- next;
- }
-
- if (($name, $typeordef, $typeno, $extra, $struct, $_)
- = /^([\$ \w]+):([ustT])(\d+|\(\d+,\d+\))(=[rufs*](\d+))?(.*)$/)
- {
- $typeno = &typeno($typeno); # sun foolery
- }
- elsif (/^[\$\w]+:/) {
- next; # variable
- }
- else {
- warn "can't grok stab: <$_> in: $line " if $_;
- next;
- }
-
- #warn "got size $size for $name\n";
- $sizeof{$name} = $size if $size;
-
- s/;[-\d]*;[-\d]*;$//; # we don't care about ranges
-
- $typenos{$name} = $typeno;
-
- unless (defined $type[$typeno]) {
- &panic("type 0??") unless $typeno;
- $type[$typeno] = $name unless defined $type[$typeno];
- printf "new type $typeno is $name" if $debug;
- if ($extra =~ /\*/ && defined $type[$struct]) {
- print ", a typedef for a pointer to " , $type[$struct] if $debug;
- }
- } else {
- printf "%s is type %d", $name, $typeno if $debug;
- print ", a typedef for " , $type[$typeno] if $debug;
- }
- print "\n" if $debug;
- #next unless $extra =~ /[su*]/;
-
- #$type[$struct] = $name;
-
- if ($extra =~ /[us*]/) {
- &sou($name, $extra);
- $_ = &sdecl($name, $_, 0);
- }
- elsif (/^=ar/) {
- print "it's a bare array typedef -- that's pretty sick\n" if $debug;
- $_ = "$typeno$_";
- $scripts = '';
- $_ = &adecl($_,1);
-
- }
- elsif (s/((\w+):t(\d+|\(\d+,\d+\)))?=r?(;\d+;\d+;)?//) { # the ?'s are for gcc
- push(@intrinsics, $2);
- $typeno = &typeno($3);
- $type[$typeno] = $2;
- print STDERR "intrinsic $2 in new type $typeno\n" if $debug;
- }
- elsif (s/^=e//) { # blessed be thy compiler; mine won't do this
- &edecl;
- }
- else {
- warn "Funny remainder for $name on line $_ left in $line " if $_;
- }
-}
-
-sub typeno { # sun thinks types are (0,27) instead of just 27
- local($_) = @_;
- s/\(\d+,(\d+)\)/$1/;
- $_;
-}
-
-sub pstruct {
- local($what,$prefix,$base) = @_;
- local($field, $fieldname, $typeno, $count, $offset, $entry);
- local($fieldtype);
- local($type, $tname);
- local($mytype, $mycount, $entry2);
- local($struct_count) = 0;
- local($pad, $revpad, $length, $prepad, $lastoffset, $lastlength, $fmt);
- local($bits,$bytes);
- local($template);
-
-
- local($mname) = &munge($name);
-
- sub munge {
- local($_) = @_;
- s/[\s\$\.]/_/g;
- $_;
- }
-
- local($sname) = &psou($what);
-
- $nesting++;
-
- for $field (split(/;/, $struct{$what})) {
- $pad = $prepad = 0;
- $entry = '';
- ($fieldname, $typeno, $count, $offset, $length) = split(/,/, $field);
-
- $type = $type[$typeno];
-
- $type =~ /([^[]*)(\[.*\])?/;
- $mytype = $1;
- $count .= $2;
- $fieldtype = &psou($mytype);
-
- local($fname) = &psou($name);
-
- if ($build_templates) {
-
- $pad = ($offset - ($lastoffset + $lastlength))/8
- if defined $lastoffset;
-
- if (! $finished_template{$sname}) {
- if ($isaunion{$what}) {
- $template{$sname} .= 'X' x $revpad . ' ' if $revpad;
- } else {
- $template{$sname} .= 'x' x $pad . ' ' if $pad;
- }
- }
-
- $template = &fetch_template($type);
- &repeat_template($template,$count);
-
- if (! $finished_template{$sname}) {
- $template{$sname} .= $template;
- }
-
- $revpad = $length/8 if $isaunion{$what};
-
- ($lastoffset, $lastlength) = ($offset, $length);
-
- } else {
- print '# ' if $perl && $verbose;
- $entry = sprintf($pmask1,
- ' ' x ($nesting * $indent) . $fieldtype,
- "$prefix.$fieldname" . $count);
-
- $entry =~ s/(\*+)( )/$2$1/;
-
- printf $pmask2,
- $entry,
- ($base+$offset)/8,
- ($bits = ($base+$offset)%8) ? ".$bits" : " ",
- $length/8,
- ($bits = $length % 8) ? ".$bits": ""
- if !$perl || $verbose;
-
- if ($perl) {
- $template = &fetch_template($type);
- &repeat_template($template,$count);
- }
-
- if ($perl && $nesting == 1) {
-
- push(@sizeof, int($length/8) .",\t# $fieldname");
- push(@offsetof, int($offset/8) .",\t# $fieldname");
- local($little) = &scrunch($template);
- push(@typedef, "'$little', \t# $fieldname");
- $type =~ s/(struct|union) //;
- push(@typeof, "'$mytype" . ($count ? $count : '') .
- "',\t# $fieldname");
- push(@fieldnames, "'$fieldname',");
- }
-
- print ' ', ' ' x $indent x $nesting, $template
- if $perl && $verbose;
-
- print "\n" if !$perl || $verbose;
-
- }
- if ($perl) {
- local($mycount) = defined $struct{$mytype} ? $countof{$mytype} : 1;
- $mycount *= &scripts2count($count) if $count;
- if ($nesting==1 && !$build_templates) {
- $pcode .= sprintf("sub %-32s { %4d; }\n",
- "${mname}'${fieldname}", $struct_count);
- push(@indices, $struct_count);
- }
- $struct_count += $mycount;
- }
-
-
- &pstruct($type, "$prefix.$fieldname", $base+$offset)
- if $recurse && defined $struct{$type};
- }
-
- $countof{$what} = $struct_count unless defined $countof{$whati};
-
- $template{$sname} .= '$' if $build_templates;
- $finished_template{$sname}++;
-
- if ($build_templates && !defined $sizeof{$name}) {
- local($fmt) = &scrunch($template{$sname});
- print STDERR "no size for $name, punting with $fmt..." if $debug;
- eval '$sizeof{$name} = length(pack($fmt, ()))';
- if ($@) {
- chop $@;
- warn "couldn't get size for \$name: $@";
- } else {
- print STDERR $sizeof{$name}, "\n" if $debUg;
- }
- }
-
- --$nesting;
-}
-
-
-sub psize {
- local($me) = @_;
- local($amstruct) = $struct{$me} ? 'struct ' : '';
-
- print '$sizeof{\'', $amstruct, $me, '\'} = ';
- printf "%d;\n", $sizeof{$me};
-}
-
-sub pdecl {
- local($pdecl) = @_;
- local(@pdecls);
- local($tname);
-
- warn "pdecl: $pdecl\n" if $debug;
-
- $pdecl =~ s/\(\d+,(\d+)\)/$1/g;
- $pdecl =~ s/\*//g;
- @pdecls = split(/=/, $pdecl);
- $typeno = $pdecls[0];
- $tname = pop @pdecls;
-
- if ($tname =~ s/^f//) { $tname = "$tname&"; }
- #else { $tname = "$tname*"; }
-
- for (reverse @pdecls) {
- $tname .= s/^f// ? "&" : "*";
- #$tname =~ s/^f(.*)/$1&/;
- print "type[$_] is $tname\n" if $debug;
- $type[$_] = $tname unless defined $type[$_];
- }
-}
-
-
-
-sub adecl {
- ($arraytype, $unknown, $lower, $upper) = ();
- #local($typeno);
- # global $typeno, @type
- local($_, $typedef) = @_;
-
- while (s/^((\d+|\(\d+,\d+\))=)?ar(\d+|\(\d+,\d+\));//) {
- ($arraytype, $unknown) = ($2, $3);
- $arraytype = &typeno($arraytype);
- $unknown = &typeno($unknown);
- if (s/^(\d+);(\d+);//) {
- ($lower, $upper) = ($1, $2);
- $scripts .= '[' . ($upper+1) . ']';
- } else {
- warn "can't find array bounds: $_";
- }
- }
- if (s/^([(,)\d*f=]*),(\d+),(\d+);//) {
- ($start, $length) = ($2, $3);
- $whatis = $1;
- if ($whatis =~ /^(\d+|\(\d+,\d+\))=/) {
- $typeno = &typeno($1);
- &pdecl($whatis);
- } else {
- $typeno = &typeno($whatis);
- }
- } elsif (s/^(\d+)(=[*suf]\d*)//) {
- local($whatis) = $2;
-
- if ($whatis =~ /[f*]/) {
- &pdecl($whatis);
- } elsif ($whatis =~ /[su]/) { #
- print "$prefix.$fieldname is an array$scripts anon structs; disgusting\n"
- if $debug;
- #$type[$typeno] = $name unless defined $type[$typeno];
- ##printf "new type $typeno is $name" if $debug;
- $typeno = $1;
- $type[$typeno] = "$prefix.$fieldname";
- local($name) = $type[$typeno];
- &sou($name, $whatis);
- $_ = &sdecl($name, $_, $start+$offset);
- 1;
- $start = $start{$name};
- $offset = $sizeof{$name};
- $length = $offset;
- } else {
- warn "what's this? $whatis in $line ";
- }
- } elsif (/^\d+$/) {
- $typeno = $_;
- } else {
- warn "bad array stab: $_ in $line ";
- next STAB;
- }
- #local($wasdef) = defined($type[$typeno]) && $debug;
- #if ($typedef) {
- #print "redefining $type[$typeno] to " if $wasdef;
- #$type[$typeno] = "$whatis$scripts"; # unless defined $type[$typeno];
- #print "$type[$typeno]\n" if $wasdef;
- #} else {
- #$type[$arraytype] = $type[$typeno] unless defined $type[$arraytype];
- #}
- $type[$arraytype] = "$type[$typeno]$scripts" if defined $type[$typeno];
- print "type[$arraytype] is $type[$arraytype]\n" if $debug;
- print "$prefix.$fieldname is an array of $type[$arraytype]\n" if $debug;
- $_;
-}
-
-
-
-sub sdecl {
- local($prefix, $_, $offset) = @_;
-
- local($fieldname, $scripts, $type, $arraytype, $unknown,
- $whatis, $pdecl, $upper,$lower, $start,$length) = ();
- local($typeno,$sou);
-
-
-SFIELD:
- while (/^([^;]+);/) {
- $scripts = '';
- warn "sdecl $_\n" if $debug;
- if (s/^([\$\w]+)://) {
- $fieldname = $1;
- } elsif (s/(\d+)=([us])(\d+|\(\d+,\d+\))//) { #
- $typeno = &typeno($1);
- $type[$typeno] = "$prefix.$fieldname";
- local($name) = "$prefix.$fieldname";
- &sou($name,$2);
- $_ = &sdecl("$prefix.$fieldname", $_, $start+$offset);
- $start = $start{$name};
- $offset += $sizeof{$name};
- #print "done with anon, start is $start, offset is $offset\n";
- #next SFIELD;
- } else {
- warn "weird field $_ of $line" if $debug;
- next STAB;
- #$fieldname = &gensym;
- #$_ = &sdecl("$prefix.$fieldname", $_, $start+$offset);
- }
-
- if (/^(\d+|\(\d+,\d+\))=ar/) {
- $_ = &adecl($_);
- }
- elsif (s/^(\d+|\(\d+,\d+\))?,(\d+),(\d+);//) {
- ($start, $length) = ($2, $3);
- &panic("no length?") unless $length;
- $typeno = &typeno($1) if $1;
- }
- elsif (s/^(\d+)=xs\w+:,(\d+),(\d+);//) {
- ($start, $length) = ($2, $3);
- &panic("no length?") unless $length;
- $typeno = &typeno($1) if $1;
- }
- elsif (s/^((\d+|\(\d+,\d+\))(=[*f](\d+|\(\d+,\d+\)))+),(\d+),(\d+);//) {
- ($pdecl, $start, $length) = ($1,$5,$6);
- &pdecl($pdecl);
- }
- elsif (s/(\d+)=([us])(\d+|\(\d+,\d+\))//) { # the dratted anon struct
- ($typeno, $sou) = ($1, $2);
- $typeno = &typeno($typeno);
- if (defined($type[$typeno])) {
- warn "now how did we get type $1 in $fieldname of $line?";
- } else {
- print "anon type $typeno is $prefix.$fieldname\n" if $debug;
- $type[$typeno] = "$prefix.$fieldname" unless defined $type[$typeno];
- };
- local($name) = "$prefix.$fieldname";
- &sou($name,$sou);
- print "anon ".($isastruct{$name}) ? "struct":"union"." for $prefix.$fieldname\n" if $debug;
- $type[$typeno] = "$prefix.$fieldname";
- $_ = &sdecl("$prefix.$fieldname", $_, $start+$offset);
- $start = $start{$name};
- $length = $sizeof{$name};
- }
- else {
- warn "can't grok stab for $name ($_) in line $line ";
- next STAB;
- }
-
- &panic("no length for $prefix.$fieldname") unless $length;
- $struct{$name} .= join(',', $fieldname, $typeno, $scripts, $start, $length) . ';';
- }
- if (s/;\d*,(\d+),(\d+);//) {
- local($start, $size) = ($1, $2);
- $sizeof{$prefix} = $size;
- print "start of $prefix is $start, size of $sizeof{$prefix}\n" if $debug;
- $start{$prefix} = $start;
- }
- $_;
-}
-
-sub edecl {
- s/;$//;
- $enum{$name} = $_;
- $_ = '';
-}
-
-sub resolve_types {
- local($sou);
- for $i (0 .. $#type) {
- next unless defined $type[$i];
- $_ = $type[$i];
- unless (/\d/) {
- print "type[$i] $type[$i]\n" if $debug;
- next;
- }
- print "type[$i] $_ ==> " if $debug;
- s/^(\d+)(\**)\&\*(\**)/"$2($3".&type($1) . ')()'/e;
- s/^(\d+)\&/&type($1)/e;
- s/^(\d+)/&type($1)/e;
- s/(\*+)([^*]+)(\*+)/$1$3$2/;
- s/\((\*+)(\w+)(\*+)\)/$3($1$2)/;
- s/^(\d+)([\*\[].*)/&type($1).$2/e;
- #s/(\d+)(\*|(\[[\[\]\d\*]+]\])+)/&type($1).$2/ge;
- $type[$i] = $_;
- print "$_\n" if $debug;
- }
-}
-sub type { &psou($type[$_[0]] || "<UNDEFINED>"); }
-
-sub adjust_start_addrs {
- for (sort keys %start) {
- ($basename = $_) =~ s/\.[^.]+$//;
- $start{$_} += $start{$basename};
- print "start: $_ @ $start{$_}\n" if $debug;
- }
-}
-
-sub sou {
- local($what, $_) = @_;
- /u/ && $isaunion{$what}++;
- /s/ && $isastruct{$what}++;
-}
-
-sub psou {
- local($what) = @_;
- local($prefix) = '';
- if ($isaunion{$what}) {
- $prefix = 'union ';
- } elsif ($isastruct{$what}) {
- $prefix = 'struct ';
- }
- $prefix . $what;
-}
-
-sub scrunch {
- local($_) = @_;
-
- return '' if $_ eq '';
-
- study;
-
- s/\$//g;
- s/ / /g;
- 1 while s/(\w) \1/$1$1/g;
-
- # i wanna say this, but perl resists my efforts:
- # s/(\w)(\1+)/$2 . length($1)/ge;
-
- &quick_scrunch;
-
- s/ $//;
-
- $_;
-}
-
-sub buildscrunchlist {
- $scrunch_code = "sub quick_scrunch {\n";
- for (values %intrinsics) {
- $scrunch_code .= "\ts/(${_}{2,})/'$_' . length(\$1)/ge;\n";
- }
- $scrunch_code .= "}\n";
- print "$scrunch_code" if $debug;
- eval $scrunch_code;
- &panic("can't eval scrunch_code $@ \nscrunch_code") if $@;
-}
-
-sub fetch_template {
- local($mytype) = @_;
- local($fmt);
- local($count) = 1;
-
- &panic("why do you care?") unless $perl;
-
- if ($mytype =~ s/(\[\d+\])+$//) {
- $count .= $1;
- }
-
- if ($mytype =~ /\*/) {
- $fmt = $template{'pointer'};
- }
- elsif (defined $template{$mytype}) {
- $fmt = $template{$mytype};
- }
- elsif (defined $struct{$mytype}) {
- if (!defined $template{&psou($mytype)}) {
- &build_template($mytype) unless $mytype eq $name;
- }
- elsif ($template{&psou($mytype)} !~ /\$$/) {
- #warn "incomplete template for $mytype\n";
- }
- $fmt = $template{&psou($mytype)} || '?';
- }
- else {
- warn "unknown fmt for $mytype\n";
- $fmt = '?';
- }
-
- $fmt x $count . ' ';
-}
-
-sub compute_intrinsics {
- local($TMP) = "/tmp/c2ph-i.$$.c";
- open (TMP, ">$TMP") || die "can't open $TMP: $!";
- select(TMP);
-
- print STDERR "computing intrinsic sizes: " if $trace;
-
- undef %intrinsics;
-
- print <<'EOF';
-main() {
- char *mask = "%d %s\n";
-EOF
-
- for $type (@intrinsics) {
- next if !$type || $type eq 'void' || $type =~ /complex/; # sun stuff
- print <<"EOF";
- printf(mask,sizeof($type), "$type");
-EOF
- }
-
- print <<'EOF';
- printf(mask,sizeof(char *), "pointer");
- exit(0);
-}
-EOF
- close TMP;
-
- select(STDOUT);
- open(PIPE, "cd /tmp && $CC $TMP && /tmp/a.out|");
- while (<PIPE>) {
- chop;
- split(' ',$_,2);;
- print "intrinsic $_[1] is size $_[0]\n" if $debug;
- $sizeof{$_[1]} = $_[0];
- $intrinsics{$_[1]} = $template{$_[0]};
- }
- close(PIPE) || die "couldn't read intrinsics!";
- unlink($TMP, '/tmp/a.out');
- print STDERR "done\n" if $trace;
-}
-
-sub scripts2count {
- local($_) = @_;
-
- s/^\[//;
- s/\]$//;
- s/\]\[/*/g;
- $_ = eval;
- &panic("$_: $@") if $@;
- $_;
-}
-
-sub system {
- print STDERR "@_\n" if $trace;
- system @_;
-}
-
-sub build_template {
- local($name) = @_;
-
- &panic("already got a template for $name") if defined $template{$name};
-
- local($build_templates) = 1;
-
- local($lparen) = '(' x $build_recursed;
- local($rparen) = ')' x $build_recursed;
-
- print STDERR "$lparen$name$rparen " if $trace;
- $build_recursed++;
- &pstruct($name,$name,0);
- print STDERR "TEMPLATE for $name is ", $template{&psou($name)}, "\n" if $debug;
- --$build_recursed;
-}
-
-
-sub panic {
-
- select(STDERR);
-
- print "\npanic: @_\n";
-
- exit 1 if $] <= 4.003; # caller broken
-
- local($i,$_);
- local($p,$f,$l,$s,$h,$a,@a,@sub);
- for ($i = 0; ($p,$f,$l,$s,$h,$w) = caller($i); $i++) {
- @a = @DB'args;
- for (@a) {
- if (/^StB\000/ && length($_) == length($_main{'_main'})) {
- $_ = sprintf("%s",$_);
- }
- else {
- s/'/\\'/g;
- s/([^\0]*)/'$1'/ unless /^-?[\d.]+$/;
- s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
- s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
- }
- }
- $w = $w ? '@ = ' : '$ = ';
- $a = $h ? '(' . join(', ', @a) . ')' : '';
- push(@sub, "$w&$s$a from file $f line $l\n");
- last if $signal;
- }
- for ($i=0; $i <= $#sub; $i++) {
- last if $signal;
- print $sub[$i];
- }
- exit 1;
-}
-
-sub squishseq {
- local($num);
- local($last) = -1e8;
- local($string);
- local($seq) = '..';
-
- while (defined($num = shift)) {
- if ($num == ($last + 1)) {
- $string .= $seq unless $inseq++;
- $last = $num;
- next;
- } elsif ($inseq) {
- $string .= $last unless $last == -1e8;
- }
-
- $string .= ',' if defined $string;
- $string .= $num;
- $last = $num;
- $inseq = 0;
- }
- $string .= $last if $inseq && $last != -e18;
- $string;
-}
-
-sub repeat_template {
- # local($template, $scripts) = @_; have to change caller's values
-
- if ( $_[1] ) {
- local($ncount) = &scripts2count($_[1]);
- if ($_[0] =~ /^\s*c\s*$/i) {
- $_[0] = "A$ncount ";
- $_[1] = '';
- } else {
- $_[0] = $template x $ncount;
- }
- }
-}
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-unlink 'pstruct';
-print "Linking c2ph to pstruct.\n";
-if (defined $Config{d_link}) {
- link 'c2ph', 'pstruct';
-} else {
- unshift @INC, '../lib';
- require File::Copy;
- File::Copy::syscopy('c2ph', 'pstruct');
-}
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/utils/dprofpp.PL b/contrib/perl5/utils/dprofpp.PL
deleted file mode 100644
index 51e8d78..0000000
--- a/contrib/perl5/utils/dprofpp.PL
+++ /dev/null
@@ -1,838 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-chdir(dirname($0));
-($file = basename($0)) =~ s/\.PL$//;
-$file =~ s/\.pl$// if ($Config{'osname'} eq 'OS2'); # "case-forgiving"
-$file =~ s/\.pl$/.com/ if ($Config{'osname'} eq 'VMS'); # "case-forgiving"
-
-my $dprof_pm = '../ext/Devel/DProf/DProf.pm';
-my $VERSION = 0;
-open( PM, "<$dprof_pm" ) || die "Can't open $dprof_pm: $!";
-while(<PM>){
- if( /^\$Devel::DProf::VERSION\s*=\s*'([\d._]+)'/ ){
- $VERSION = $1;
- last;
- }
-}
-close PM;
-if( $VERSION == 0 ){
- die "Did not find VERSION in $dprof_pm";
-}
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-
-require 5.003;
-
-my \$VERSION = '$VERSION';
-
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-=head1 NAME
-
-dprofpp - display perl profile data
-
-=head1 SYNOPSIS
-
-dprofpp [B<-a>|B<-z>|B<-l>|B<-v>|B<-U>] [B<-s>|B<-r>|B<-u>] [B<-q>] [B<-F>] [B<-I|-E>] [B<-O cnt>] [B<-A>] [B<-R>] [B<-S>] [B<-g subroutine>] [profile]
-
-dprofpp B<-T> [B<-F>] [B<-g subroutine>] [profile]
-
-dprofpp B<-t> [B<-F>] [B<-g subroutine>] [profile]
-
-dprofpp B<-p script> [B<-Q>] [other opts]
-
-dprofpp B<-V> [profile]
-
-=head1 DESCRIPTION
-
-The I<dprofpp> command interprets profile data produced by a profiler, such
-as the Devel::DProf profiler. Dprofpp will read the file F<tmon.out> and
-will display the 15 subroutines which are using the most time. By default
-the times for each subroutine are given exclusive of the times of their
-child subroutines.
-
-To profile a Perl script run the perl interpreter with the B<-d> switch. So
-to profile script F<test.pl> with Devel::DProf the following command should
-be used.
-
- $ perl5 -d:DProf test.pl
-
-Then run dprofpp to analyze the profile. The output of dprofpp depends
-on the flags to the program and the version of Perl you're using.
-
- $ dprofpp -u
- Total Elapsed Time = 1.67 Seconds
- User Time = 0.61 Seconds
- Exclusive Times
- %Time Seconds #Calls sec/call Name
- 52.4 0.320 2 0.1600 main::foo
- 45.9 0.280 200 0.0014 main::bar
- 0.00 0.000 1 0.0000 DynaLoader::import
- 0.00 0.000 1 0.0000 main::baz
-
-The dprofpp tool can also run the profiler before analyzing the profile
-data. The above two commands can be executed with one dprofpp command.
-
- $ dprofpp -u -p test.pl
-
-Consult L<Devel::DProf/"PROFILE FORMAT"> for a description of the raw profile.
-
-=head1 OUTPUT
-
-Columns are:
-
-=over 4
-
-=item %Time
-
-Percentage of time spent in this routine.
-
-=item #Calls
-
-Number of calls to this routine.
-
-=item sec/call
-
-Average number of seconds per call to this routine.
-
-=item Name
-
-Name of routine.
-
-=item CumulS
-
-Time (in seconds) spent in this routine and routines called from it.
-
-=item ExclSec
-
-Time (in seconds) spent in this routine (not including those called
-from it).
-
-=item Csec/c
-
-Average time (in seconds) spent in each call of this routine
-(including those called from it).
-
-=back
-
-=head1 OPTIONS
-
-=over 5
-
-=item B<-a>
-
-Sort alphabetically by subroutine names.
-
-=item B<-A>
-
-Count timing for autoloaded subroutine as timing for C<*::AUTOLOAD>.
-Otherwise the time to autoload it is counted as time of the subroutine
-itself (there is no way to separate autoload time from run time).
-
-This is going to be irrelevant with newer Perls. They will inform
-C<Devel::DProf> I<when> the C<AUTOLOAD> switches to actual subroutine,
-so a separate statistics for C<AUTOLOAD> will be collected no matter
-whether this option is set.
-
-=item B<-R>
-
-Count anonymous subroutines defined in the same package separately.
-
-=item B<-E>
-
-(default) Display all subroutine times exclusive of child subroutine times.
-
-=item B<-F>
-
-Force the generation of fake exit timestamps if dprofpp reports that the
-profile is garbled. This is only useful if dprofpp determines that the
-profile is garbled due to missing exit timestamps. You're on your own if
-you do this. Consult the BUGS section.
-
-=item B<-I>
-
-Display all subroutine times inclusive of child subroutine times.
-
-=item B<-l>
-
-Sort by number of calls to the subroutines. This may help identify
-candidates for inlining.
-
-=item B<-O cnt>
-
-Show only I<cnt> subroutines. The default is 15.
-
-=item B<-p script>
-
-Tells dprofpp that it should profile the given script and then interpret its
-profile data. See B<-Q>.
-
-=item B<-Q>
-
-Used with B<-p> to tell dprofpp to quit after profiling the script, without
-interpreting the data.
-
-=item B<-q>
-
-Do not display column headers.
-
-=item B<-r>
-
-Display elapsed real times rather than user+system times.
-
-=item B<-s>
-
-Display system times rather than user+system times.
-
-=item B<-T>
-
-Display subroutine call tree to stdout. Subroutine statistics are
-not displayed.
-
-=item B<-t>
-
-Display subroutine call tree to stdout. Subroutine statistics are not
-displayed. When a function is called multiple consecutive times at the same
-calling level then it is displayed once with a repeat count.
-
-=item B<-S>
-
-Display I<merged> subroutine call tree to stdout. Statistics is
-displayed for each branch of the tree.
-
-When a function is called multiple (I<not necessarily consecutive>)
-times in the same branch then all these calls go into one branch of
-the next level. A repeat count is output together with combined
-inclusive, exclusive and kids time.
-
-Branches are sorted w.r.t. inclusive time.
-
-=item B<-U>
-
-Do not sort. Display in the order found in the raw profile.
-
-=item B<-u>
-
-Display user times rather than user+system times.
-
-=item B<-V>
-
-Print dprofpp's version number and exit. If a raw profile is found then its
-XS_VERSION variable will be displayed, too.
-
-=item B<-v>
-
-Sort by average time spent in subroutines during each call. This may help
-identify candidates for inlining.
-
-=item B<-z>
-
-(default) Sort by amount of user+system time used. The first few lines
-should show you which subroutines are using the most time.
-
-=item B<-g> C<subroutine>
-
-Ignore subroutines except C<subroutine> and whatever is called from it.
-
-=back
-
-=head1 ENVIRONMENT
-
-The environment variable B<DPROFPP_OPTS> can be set to a string containing
-options for dprofpp. You might use this if you prefer B<-I> over B<-E> or
-if you want B<-F> on all the time.
-
-This was added fairly lazily, so there are some undesirable side effects.
-Options on the commandline should override options in DPROFPP_OPTS--but
-don't count on that in this version.
-
-=head1 BUGS
-
-Applications which call _exit() or exec() from within a subroutine
-will leave an incomplete profile. See the B<-F> option.
-
-Any bugs in Devel::DProf, or any profiler generating the profile data, could
-be visible here. See L<Devel::DProf/BUGS>.
-
-Mail bug reports and feature requests to the perl5-porters mailing list at
-F<E<lt>perl5-porters@perl.orgE<gt>>. Bug reports should include the
-output of the B<-V> option.
-
-=head1 FILES
-
- dprofpp - profile processor
- tmon.out - raw profile
-
-=head1 SEE ALSO
-
-L<perl>, L<Devel::DProf>, times(2)
-
-=cut
-
-use Getopt::Std 'getopts';
-use Config '%Config';
-
-Setup: {
- my $options = 'O:g:lzaAvuTtqrRsUFEIp:QVS';
-
- $Monfile = 'tmon.out';
- if( exists $ENV{DPROFPP_OPTS} ){
- my @tmpargv = @ARGV;
- @ARGV = split( ' ', $ENV{DPROFPP_OPTS} );
- getopts( $options );
- if( @ARGV ){
- # there was a filename.
- $Monfile = shift;
- }
- @ARGV = @tmpargv;
- }
-
- getopts( $options );
- if( @ARGV ){
- # there was a filename, it overrides any earlier name.
- $Monfile = shift;
- }
-
-# -O cnt Specifies maximum number of subroutines to display.
-# -a Sort by alphabetic name of subroutines.
-# -z Sort by user+system time spent in subroutines. (default)
-# -l Sort by number of calls to subroutines.
-# -v Sort by average amount of time spent in subroutines.
-# -T Show call tree.
-# -t Show call tree, compressed.
-# -q Do not print column headers.
-# -u Use user time rather than user+system time.
-# -s Use system time rather than user+system time.
-# -r Use real elapsed time rather than user+system time.
-# -U Do not sort subroutines.
-# -E Sub times are reported exclusive of child times. (default)
-# -I Sub times are reported inclusive of child times.
-# -V Print dprofpp's version.
-# -p script Specifies name of script to be profiled.
-# -Q Used with -p to indicate the dprofpp should quit after
-# profiling the script, without interpreting the data.
-# -A count autoloaded to *AUTOLOAD
-# -R count anonyms separately even if from the same package
-# -g subr count only those who are SUBR or called from SUBR
-# -S Create statistics for all the depths
-
- if( defined $opt_V ){
- my $fh = 'main::fh';
- print "$0 version: $VERSION\n";
- open( $fh, "<$Monfile" ) && do {
- local $XS_VERSION = 'early';
- header($fh);
- close( $fh );
- print "XS_VERSION: $XS_VERSION\n";
- };
- exit(0);
- }
- $cnt = $opt_O || 15;
- $sort = 'by_time';
- $sort = 'by_ctime' if defined $opt_I;
- $sort = 'by_calls' if defined $opt_l;
- $sort = 'by_alpha' if defined $opt_a;
- $sort = 'by_avgcpu' if defined $opt_v;
- $incl_excl = 'Exclusive';
- $incl_excl = 'Inclusive' if defined $opt_I;
- $whichtime = 'User+System';
- $whichtime = 'System' if defined $opt_s;
- $whichtime = 'Real' if defined $opt_r;
- $whichtime = 'User' if defined $opt_u;
-
- if( defined $opt_p ){
- my $prof = 'DProf';
- my $startperl = $Config{'startperl'};
-
- $startperl =~ s/^#!//; # remove shebang
- run_profiler( $opt_p, $prof, $startperl );
- $Monfile = 'tmon.out'; # because that's where it is
- exit(0) if defined $opt_Q;
- }
- elsif( defined $opt_Q ){
- die "-Q is meaningful only when used with -p\n";
- }
-}
-
-Main: {
- my $monout = $Monfile;
- my $fh = 'main::fh';
- local $names = {};
- local $times = {}; # times in hz
- local $ctimes = {}; # Cumulative times in hz
- local $calls = {};
- local $persecs = {}; # times in seconds
- local $idkeys = [];
- local $runtime; # runtime in seconds
- my @a = ();
- my $a;
- local $rrun_utime = 0; # user time in hz
- local $rrun_stime = 0; # system time in hz
- local $rrun_rtime = 0; # elapsed run time in hz
- local $rrun_ustime = 0; # user+system time in hz
- local $hz = 0;
- local $deep_times = {count => 0 , kids => {}, incl_time => 0};
- local $time_precision = 2;
- local $overhead = 0;
-
- open( $fh, "<$monout" ) || die "Unable to open $monout\n";
-
- header($fh);
-
- $rrun_ustime = $rrun_utime + $rrun_stime;
-
- $~ = 'STAT';
- if( ! $opt_q ){
- $^ = 'CSTAT_top';
- }
-
- parsestack( $fh, $names, $calls, $times, $ctimes, $idkeys );
-
- settime( \$runtime, $hz ) unless $opt_g;
-
- exit(0) if $opt_T || $opt_t;
-
- if( $opt_v ){
- percalc( $calls, ($opt_I ? $ctimes : $times), $persecs, $idkeys );
- }
- if( ! $opt_U ){
- @a = sort $sort @$idkeys;
- $a = \@a;
- }
- else {
- $a = $idkeys;
- }
- display( $runtime, $hz, $names, $calls, $times, $ctimes, $cnt, $a,
- $deep_times);
-}
-
-
-# Sets $runtime to user, system, real, or user+system time. The
-# result is given in seconds.
-#
-sub settime {
- my( $runtime, $hz ) = @_;
-
- $hz ||= 1;
-
- if( $opt_r ){
- $$runtime = ($rrun_rtime - $overhead - $over_rtime * $total_marks/$over_tests/2)/$hz;
- }
- elsif( $opt_s ){
- $$runtime = ($rrun_stime - $overhead - $over_stime * $total_marks/$over_tests/2)/$hz;
- }
- elsif( $opt_u ){
- $$runtime = ($rrun_utime - $overhead - $over_utime * $total_marks/$over_tests/2)/$hz;
- }
- else{
- $$runtime = ($rrun_ustime - $overhead - ($over_utime + $over_stime) * $total_marks/$over_tests/2)/$hz;
- }
- $$runtime = 0 unless $$runtime > 0;
-}
-
-sub exclusives_in_tree {
- my( $deep_times ) = @_;
- my $kids_time = 0;
- my $kid;
- # When summing, take into account non-rounded-up kids time.
- for $kid (keys %{$deep_times->{kids}}) {
- $kids_time += $deep_times->{kids}{$kid}{incl_time};
- }
- $kids_time = 0 unless $kids_time >= 0;
- $deep_times->{excl_time} = $deep_times->{incl_time} - $kids_time;
- $deep_times->{excl_time} = 0 unless $deep_times->{excl_time} >= 0;
- for $kid (keys %{$deep_times->{kids}}) {
- exclusives_in_tree($deep_times->{kids}{$kid});
- }
- $deep_times->{incl_time} = 0 unless $deep_times->{incl_time} >= 0;
- $deep_times->{kids_time} = $kids_time;
-}
-
-sub kids_by_incl { $kids{$b}{incl_time} <=> $kids{$a}{excl_time}
- or $a cmp $b }
-
-sub display_tree {
- my( $deep_times, $name, $level ) = @_;
- exclusives_in_tree($deep_times);
-
- my $kid;
- local *kids = $deep_times->{kids}; # %kids
-
- my $time;
- if (%kids) {
- $time = sprintf '%.*fs = (%.*f + %.*f)',
- $time_precision, $deep_times->{incl_time}/$hz,
- $time_precision, $deep_times->{excl_time}/$hz,
- $time_precision, $deep_times->{kids_time}/$hz;
- } else {
- $time = sprintf '%.*f', $time_precision, $deep_times->{incl_time}/$hz;
- }
- print ' ' x (2*$level), "$name x $deep_times->{count} \t${time}s\n"
- if $deep_times->{count};
-
- for $kid (sort kids_by_incl keys %kids) {
- display_tree( $deep_times->{kids}{$kid}, $kid, $level + 1 );
- }
-}
-
-# Report the times in seconds.
-sub display {
- my( $runtime, $hz, $names, $calls, $times, $ctimes, $cnt,
- $idkeys, $deep_times ) = @_;
- my( $x, $key, $s, $cs );
- #format: $ncalls, $name, $secs, $percall, $pcnt
-
- if ($opt_S) {
- display_tree( $deep_times, 'toplevel', -1 )
- } else {
- for( $x = 0; $x < @$idkeys; ++$x ){
- $key = $idkeys->[$x];
- $ncalls = $calls->{$key};
- $name = $names->{$key};
- $s = $times->{$key}/$hz;
- $secs = sprintf("%.3f", $s );
- $cs = $ctimes->{$key}/$hz;
- $csecs = sprintf("%.3f", $cs );
- $percall = sprintf("%.4f", $s/$ncalls );
- $cpercall = sprintf("%.4f", $cs/$ncalls );
- $pcnt = sprintf("%.2f",
- $runtime? ((($opt_I ? $csecs : $secs) / $runtime) * 100.0): 0 );
- write;
- $pcnt = $secs = $ncalls = $percall = "";
- write while( length $name );
- last unless --$cnt;
- }
- }
-}
-
-sub move_keys {
- my ($source, $dest) = @_;
- my $kid;
-
- for $kid (keys %$source) {
- if (exists $dest->{$kid}) {
- $dest->{count} += $source->{count};
- $dest->{incl_time} += $source->{incl_time};
- move_keys($source->{kids},$dest->{kids});
- } else {
- $dest->{$kid} = delete $source->{$kid};
- }
- }
-}
-
-sub add_to_tree {
- my ($curdeep_times, $name, $t) = @_;
- if ($name ne $curdeep_times->[-1]{name} and $opt_A) {
- $name = $curdeep_times->[-1]{name};
- }
- die "Shorted?!" unless @$curdeep_times >= 2;
- $curdeep_times->[-2]{kids}{$name} = { count => 0 , kids => {},
- incl_time => 0,
- }
- unless exists $curdeep_times->[-2]{kids}{$name};
- my $entry = $curdeep_times->[-2]{kids}{$name};
- # Now transfer to the new node (could not do earlier, since name can change)
- $entry->{count}++;
- $entry->{incl_time} += $t - $curdeep_times->[-1]{enter_stamp};
- # Merge the kids?
- move_keys($curdeep_times->[-1]->{kids},$entry->{kids});
- pop @$curdeep_times;
-}
-
-sub parsestack {
- my( $fh, $names, $calls, $times, $ctimes, $idkeys ) = @_;
- my( $dir, $name );
- my( $t, $syst, $realt, $usert );
- my( $x, $z, $c, $id, $pack );
- my @stack = ();
- my @tstack = ();
- my $tab = 3;
- my $in = 0;
-
- # remember last call depth and function name
- my $l_in = $in;
- my $l_name = '';
- my $repcnt = 0;
- my $repstr = '';
- my $dprof_t = 0;
- my $dprof_stamp;
- my %cv_hash;
- my $in_level = not defined $opt_g; # Level deep in report grouping
- my $curdeep_times = [$deep_times];
-
- my $over_per_call;
- if ( $opt_u ) { $over_per_call = $over_utime }
- elsif( $opt_s ) { $over_per_call = $over_stime }
- elsif( $opt_r ) { $over_per_call = $over_rtime }
- else { $over_per_call = $over_utime + $over_stime }
- $over_per_call /= 2*$over_tests; # distribute over entry and exit
-
- while(<$fh>){
- next if /^#/;
- last if /^PART/;
-
- chop;
- if (/^&/) {
- ($dir, $id, $pack, $name) = split;
- if ($opt_R and ($name =~ /::(__ANON_|END)$/)) {
- $name .= "($id)";
- }
- $cv_hash{$id} = "$pack\::$name";
- next;
- }
- ($dir, $usert, $syst, $realt, $name) = split;
-
- my $ot = $t;
- if ( $dir eq '/' ) {
- $syst = $stack[-1][0];
- $usert = '&';
- $dir = '-';
- #warn("Inserted exit for $stack[-1][0].\n")
- }
- if (defined $realt) { # '+ times nam' '- times nam' or '@ incr'
- if ( $opt_u ) { $t = $usert }
- elsif( $opt_s ) { $t = $syst }
- elsif( $opt_r ) { $t = $realt }
- else { $t = $usert + $syst }
- $t += $ot, next if $dir eq '@'; # Increments there
- } else {
- # "- id" or "- & name"
- $name = defined $syst ? $syst : $cv_hash{$usert};
- }
-
- next unless $in_level or $name eq $opt_g or $dir eq '*';
- if ( $dir eq '-' or $dir eq '*' ) {
- my $ename = $dir eq '*' ? $stack[-1][0] : $name;
- $overhead += $over_per_call;
- if ($name eq "Devel::DProf::write") {
- $dprof_t += $t - $dprof_stamp;
- next;
- } elsif (defined $opt_g and $ename eq $opt_g) {
- $in_level--;
- }
- add_to_tree($curdeep_times, $ename,
- $t - $dprof_t - $overhead) if $opt_S;
- exitstamp( \@stack, \@tstack,
- $t - $dprof_t - $overhead,
- $times, $ctimes, $ename, \$in, $tab,
- $curdeep_times );
- }
- next unless $in_level or $name eq $opt_g;
- if( $dir eq '+' or $dir eq '*' ){
- if ($name eq "Devel::DProf::write") {
- $dprof_stamp = $t;
- next;
- } elsif (defined $opt_g and $name eq $opt_g) {
- $in_level++;
- }
- $overhead += $over_per_call;
- if( $opt_T ){
- print ' ' x $in, "$name\n";
- $in += $tab;
- }
- elsif( $opt_t ){
- # suppress output on same function if the
- # same calling level is called.
- if ($l_in == $in and $l_name eq $name) {
- $repcnt++;
- } else {
- $repstr = ' ('.++$repcnt.'x)'
- if $repcnt;
- print ' ' x $l_in, "$l_name$repstr\n"
- if $l_name ne '';
- $repstr = '';
- $repcnt = 0;
- $l_in = $in;
- $l_name = $name;
- }
- $in += $tab;
- }
- if( ! defined $names->{$name} ){
- $names->{$name} = $name;
- $times->{$name} = 0;
- $ctimes->{$name} = 0;
- push( @$idkeys, $name );
- }
- $calls->{$name}++;
- push @$curdeep_times, { kids => {},
- name => $name,
- enter_stamp => $t - $dprof_t - $overhead,
- } if $opt_S;
- $x = [ $name, $t - $dprof_t - $overhead ];
- push( @stack, $x );
-
- # my children will put their time here
- push( @tstack, 0 );
- } elsif ($dir ne '-'){
- die "Bad profile: $_";
- }
- }
- if( $opt_t ){
- $repstr = ' ('.++$repcnt.'x)' if $repcnt;
- print ' ' x $l_in, "$l_name$repstr\n";
- }
-
- if( @stack ){
- if( ! $opt_F ){
- warn "Garbled profile is missing some exit time stamps:\n";
- foreach $x (@stack) {
- print $x->[0],"\n";
- }
- die "Try rerunning dprofpp with -F.\n";
- # I don't want -F to be default behavior--yet
- # 9/18/95 dmr
- }
- else{
- warn( "Faking " . scalar( @stack ) . " exit timestamp(s).\n");
- foreach $x ( reverse @stack ){
- $name = $x->[0];
- exitstamp( \@stack, \@tstack,
- $t - $dprof_t - $overhead, $times,
- $ctimes, $name, \$in, $tab,
- $curdeep_times );
- add_to_tree($curdeep_times, $name,
- $t - $dprof_t - $overhead)
- if $opt_S;
- }
- }
- }
- if (defined $opt_g) {
- $runtime = $ctimes->{$opt_g}/$hz;
- $runtime = 0 unless $runtime > 0;
- }
-}
-
-sub exitstamp {
- my($stack, $tstack, $t, $times, $ctimes, $name, $in, $tab, $deep) = @_;
- my( $x, $c, $z );
-
- $x = pop( @$stack );
- if( ! defined $x ){
- die "Garbled profile, missing an enter time stamp";
- }
- if( $x->[0] ne $name ){
- if ($x->[0] =~ /::AUTOLOAD$/) {
- if ($opt_A) {
- $name = $x->[0];
- }
- } elsif ( $opt_F ) {
- warn( "Garbled profile, faking exit timestamp:\n\t$name => $x->[0].\n");
- $name = $x->[0];
- } else {
- foreach $z (@stack, $x) {
- print $z->[0],"\n";
- }
- die "Garbled profile, unexpected exit time stamp";
- }
- }
- if( $opt_T || $opt_t ){
- $$in -= $tab;
- }
- # collect childtime
- $c = pop( @$tstack );
- # total time this func has been active
- $z = $t - $x->[1];
- $ctimes->{$name} += $z;
- $times->{$name} += ($z > $c)? $z - $c: 0;
- # pass my time to my parent
- if( @$tstack ){
- $c = pop( @$tstack );
- push( @$tstack, $c + $z );
- }
-}
-
-
-sub header {
- my $fh = shift;
- chop($_ = <$fh>);
- if( ! /^#fOrTyTwO$/ ){
- die "Not a perl profile";
- }
- while(<$fh>){
- next if /^#/;
- last if /^PART/;
- eval;
- }
- $over_tests = 1 unless $over_tests;
- $time_precision = length int ($hz - 1); # log ;-)
-}
-
-
-# Report avg time-per-function in seconds
-sub percalc {
- my( $calls, $times, $persecs, $idkeys ) = @_;
- my( $x, $t, $n, $key );
-
- for( $x = 0; $x < @$idkeys; ++$x ){
- $key = $idkeys->[$x];
- $n = $calls->{$key};
- $t = $times->{$key} / $hz;
- $persecs->{$key} = $t ? $t / $n : 0;
- }
-}
-
-
-# Runs the given script with the given profiler and the given perl.
-sub run_profiler {
- my $script = shift;
- my $profiler = shift;
- my $startperl = shift;
-
- system $startperl, "-d:$profiler", $script;
- if( $? / 256 > 0 ){
- die "Failed: $startperl -d:$profiler $script: $!";
- }
-}
-
-
-sub by_time { $times->{$b} <=> $times->{$a} }
-sub by_ctime { $ctimes->{$b} <=> $ctimes->{$a} }
-sub by_calls { $calls->{$b} <=> $calls->{$a} }
-sub by_alpha { $names->{$a} cmp $names->{$b} }
-sub by_avgcpu { $persecs->{$b} <=> $persecs->{$a} }
-
-
-format CSTAT_top =
-Total Elapsed Time = @>>>>>>> Seconds
-(($rrun_rtime - $overhead - $over_rtime * $total_marks/$over_tests/2) / $hz)
- @>>>>>>>>>> Time = @>>>>>>> Seconds
-$whichtime, $runtime
-@<<<<<<<< Times
-$incl_excl
-%Time ExclSec CumulS #Calls sec/call Csec/c Name
-.
-
-format STAT =
- ^>>> ^>>>> ^>>>>> ^>>>>> ^>>>>> ^>>>>> ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-$pcnt, $secs, $csecs, $ncalls, $percall, $cpercall, $name
-.
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
diff --git a/contrib/perl5/utils/h2ph.PL b/contrib/perl5/utils/h2ph.PL
deleted file mode 100644
index 6f012dc..0000000
--- a/contrib/perl5/utils/h2ph.PL
+++ /dev/null
@@ -1,746 +0,0 @@
-#!/usr/local/bin/perl
-# $FreeBSD$
-
-use Config;
-use File::Basename qw(basename dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-# Wanted: $archlibexp
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-use strict;
-
-use Config;
-use File::Path qw(mkpath);
-use Getopt::Std;
-
-getopts('Dd:rlhaQ');
-use vars qw($opt_D $opt_d $opt_r $opt_l $opt_h $opt_a $opt_Q);
-die "-r and -a options are mutually exclusive\n" if ($opt_r and $opt_a);
-my @inc_dirs = inc_dirs() if $opt_a;
-
-my $Exit = 0;
-
-my $Dest_dir = $opt_d || $Config{installarchlib};
-die "Destination directory $Dest_dir doesn't exist or isn't a directory\n"
- unless -d $Dest_dir;
-
-my @isatype = split(' ',<<END);
- char uchar u_char
- short ushort u_short
- int uint u_int
- long ulong u_long
- FILE key_t caddr_t
-END
-
-my %isatype;
-@isatype{@isatype} = (1) x @isatype;
-my $inif = 0;
-my %Is_converted;
-
-@ARGV = ('-') unless @ARGV;
-
-build_preamble_if_necessary();
-
-my ($t, $tab, %curargs, $new, $eval_index, $dir, $name, $args, $outfile);
-my ($incl, $next);
-while (defined (my $file = next_file())) {
- if (-l $file and -d $file) {
- link_if_possible($file) if ($opt_l);
- next;
- }
-
- # Recover from header files with unbalanced cpp directives
- $t = '';
- $tab = 0;
-
- # $eval_index goes into ``#line'' directives, to help locate syntax errors:
- $eval_index = 1;
-
- if ($file eq '-') {
- open(IN, "-");
- open(OUT, ">-");
- } else {
- ($outfile = $file) =~ s/\.h$/.ph/ || next;
- print "$file -> $outfile\n" unless $opt_Q;
- if ($file =~ m|^(.*)/|) {
- $dir = $1;
- mkpath "$Dest_dir/$dir";
- }
-
- if ($opt_a) { # automagic mode: locate header file in @inc_dirs
- foreach (@inc_dirs) {
- chdir $_;
- last if -f $file;
- }
- }
-
- open(IN,"$file") || (($Exit = 1),(warn "Can't open $file: $!\n"),next);
- open(OUT,">$Dest_dir/$outfile") || die "Can't create $outfile: $!\n";
- }
-
- print OUT "require '_h2ph_pre.ph';\n\n";
- while (<IN>) {
- chop;
- while (/\\$/) {
- chop;
- $_ .= <IN>;
- chop;
- }
- print OUT "# $_\n" if $opt_D;
-
- if (s:/\*:\200:g) {
- s:\*/:\201:g;
- s/\200[^\201]*\201//g; # delete single line comments
- if (s/\200.*//) { # begin multi-line comment?
- $_ .= '/*';
- $_ .= <IN>;
- redo;
- }
- }
- if (s/^\s*\#\s*//) {
- if (s/^define\s+(\w+)//) {
- $name = $1;
- $new = '';
- s/\s+$//;
- if (s/^\(([\w,\s]*)\)//) {
- $args = $1;
- my $proto = '() ';
- if ($args ne '') {
- $proto = '';
- foreach my $arg (split(/,\s*/,$args)) {
- $arg =~ s/^\s*([^\s].*[^\s])\s*$/$1/;
- $curargs{$arg} = 1;
- }
- $args =~ s/\b(\w)/\$$1/g;
- $args = "local($args) = \@_;\n$t ";
- }
- s/^\s+//;
- expr();
- $new =~ s/(["\\])/\\$1/g; #"]);
- $new = reindent($new);
- $args = reindent($args);
- if ($t ne '') {
- $new =~ s/(['\\])/\\$1/g; #']);
- if ($opt_h) {
- print OUT $t,
- "eval \"\\n#line $eval_index $outfile\\n\" . 'sub $name $proto\{\n$t ${args}eval q($new);\n$t}' unless defined(\&$name);\n";
- $eval_index++;
- } else {
- print OUT $t,
- "eval 'sub $name $proto\{\n$t ${args}eval q($new);\n$t}' unless defined(\&$name);\n";
- }
- } else {
- print OUT "unless(defined(\&$name)) {\n sub $name $proto\{\n\t${args}eval q($new);\n }\n}\n";
- }
- %curargs = ();
- } else {
- s/^\s+//;
- expr();
- $new = 1 if $new eq '';
- $new = reindent($new);
- $args = reindent($args);
- if ($t ne '') {
- $new =~ s/(['\\])/\\$1/g; #']);
-
- if ($opt_h) {
- print OUT $t,"eval \"\\n#line $eval_index $outfile\\n\" . 'sub $name () {",$new,";}' unless defined(\&$name);\n";
- $eval_index++;
- } else {
- print OUT $t,"eval 'sub $name () {",$new,";}' unless defined(\&$name);\n";
- }
- } else {
- # Shunt around such directives as `#define FOO FOO':
- next if " \&$name" eq $new;
-
- print OUT $t,"unless(defined(\&$name)) {\n sub $name () {\t",$new,";}\n}\n";
- }
- }
- } elsif (/^(include|import)\s*[<"](.*)[>"]/) {
- ($incl = $2) =~ s/\.h$/.ph/;
- print OUT $t,"require '$incl';\n";
- } elsif(/^include_next\s*[<"](.*)[>"]/) {
- ($incl = $1) =~ s/\.h$/.ph/;
- print OUT ($t,
- "eval {\n");
- $tab += 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- print OUT ($t,
- "my(\%INCD) = map { \$INC{\$_} => 1 } ",
- "(grep { \$_ eq \"$incl\" } keys(\%INC));\n");
- print OUT ($t,
- "my(\@REM) = map { \"\$_/$incl\" } ",
- "(grep { not exists(\$INCD{\"\$_/$incl\"})",
- "and -f \"\$_/$incl\" } \@INC);\n");
- print OUT ($t,
- "require \"\$REM[0]\" if \@REM;\n");
- $tab -= 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- print OUT ($t,
- "};\n");
- print OUT ($t,
- "warn(\$\@) if \$\@;\n");
- } elsif (/^ifdef\s+(\w+)/) {
- print OUT $t,"if(defined(&$1)) {\n";
- $tab += 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- } elsif (/^ifndef\s+(\w+)/) {
- print OUT $t,"unless(defined(&$1)) {\n";
- $tab += 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- } elsif (s/^if\s+//) {
- $new = '';
- $inif = 1;
- expr();
- $inif = 0;
- print OUT $t,"if($new) {\n";
- $tab += 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- } elsif (s/^elif\s+//) {
- $new = '';
- $inif = 1;
- expr();
- $inif = 0;
- $tab -= 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- print OUT $t,"}\n elsif($new) {\n";
- $tab += 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- } elsif (/^else/) {
- $tab -= 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- print OUT $t,"} else {\n";
- $tab += 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- } elsif (/^endif/) {
- $tab -= 4;
- $t = "\t" x ($tab / 8) . ' ' x ($tab % 8);
- print OUT $t,"}\n";
- } elsif(/^undef\s+(\w+)/) {
- print OUT $t, "undef(&$1) if defined(&$1);\n";
- } elsif(/^error\s+(".*")/) {
- print OUT $t, "die($1);\n";
- } elsif(/^error\s+(.*)/) {
- print OUT $t, "die(\"", quotemeta($1), "\");\n";
- } elsif(/^warning\s+(.*)/) {
- print OUT $t, "warn(\"", quotemeta($1), "\");\n";
- } elsif(/^ident\s+(.*)/) {
- print OUT $t, "# $1\n";
- }
- } elsif(/^\s*(typedef\s*)?enum\s*(\s+[a-zA-Z_]\w*\s*)?\{/) {
- until(/\}.*?;/) {
- chomp($next = <IN>);
- $_ .= $next;
- print OUT "# $next\n" if $opt_D;
- }
- s@/\*.*?\*/@@g;
- s/\s+/ /g;
- /^\s?(typedef\s?)?enum\s?([a-zA-Z_]\w*)?\s?\{(.*)\}\s?([a-zA-Z_]\w*)?\s?;/;
- (my $enum_subs = $3) =~ s/\s//g;
- my @enum_subs = split(/,/, $enum_subs);
- my $enum_val = -1;
- foreach my $enum (@enum_subs) {
- my ($enum_name, $enum_value) = $enum =~ /^([a-zA-Z_]\w*)(=.+)?$/;
- $enum_value =~ s/^=//;
- $enum_val = (length($enum_value) ? $enum_value : $enum_val + 1);
- if ($opt_h) {
- print OUT ($t,
- "eval(\"\\n#line $eval_index $outfile\\n",
- "sub $enum_name () \{ $enum_val; \}\") ",
- "unless defined(\&$enum_name);\n");
- ++ $eval_index;
- } else {
- print OUT ($t,
- "eval(\"sub $enum_name () \{ $enum_val; \}\") ",
- "unless defined(\&$enum_name);\n");
- }
- }
- }
- }
- print OUT "1;\n";
-
- $Is_converted{$file} = 1;
- queue_includes_from($file) if ($opt_a);
-}
-
-exit $Exit;
-
-
-sub reindent($) {
- my($text) = shift;
- $text =~ s/\n/\n /g;
- $text =~ s/ /\t/g;
- $text;
-}
-
-
-sub expr {
- my $joined_args;
- if(keys(%curargs)) {
- $joined_args = join('|', keys(%curargs));
- }
- while ($_ ne '') {
- s/^\&\&// && do { $new .= " &&"; next;}; # handle && operator
- s/^\&([\(a-z\)]+)/$1/i; # hack for things that take the address of
- s/^(\s+)// && do {$new .= ' '; next;};
- s/^(0X[0-9A-F]+)[UL]*//i && do {$new .= lc($1); next;};
- s/^(-?\d+\.\d+E[-+]\d+)F?//i && do {$new .= $1; next;};
- s/^(\d+)\s*[LU]*//i && do {$new .= $1; next;};
- s/^("(\\"|[^"])*")// && do {$new .= $1; next;};
- s/^'((\\"|[^"])*)'// && do {
- if ($curargs{$1}) {
- $new .= "ord('\$$1')";
- } else {
- $new .= "ord('$1')";
- }
- next;
- };
- # replace "sizeof(foo)" with "{foo}"
- # also, remove * (C dereference operator) to avoid perl syntax
- # problems. Where the %sizeof array comes from is anyone's
- # guess (c2ph?), but this at least avoids fatal syntax errors.
- # Behavior is undefined if sizeof() delimiters are unbalanced.
- # This code was modified to able to handle constructs like this:
- # sizeof(*(p)), which appear in the HP-UX 10.01 header files.
- s/^sizeof\s*\(// && do {
- $new .= '$sizeof';
- my $lvl = 1; # already saw one open paren
- # tack { on the front, and skip it in the loop
- $_ = "{" . "$_";
- my $index = 1;
- # find balanced closing paren
- while ($index <= length($_) && $lvl > 0) {
- $lvl++ if substr($_, $index, 1) eq "(";
- $lvl-- if substr($_, $index, 1) eq ")";
- $index++;
- }
- # tack } on the end, replacing )
- substr($_, $index - 1, 1) = "}";
- # remove pesky * operators within the sizeof argument
- substr($_, 0, $index - 1) =~ s/\*//g;
- next;
- };
- # Eliminate typedefs
- /\(([\w\s]+)[\*\s]*\)\s*[\w\(]/ && do {
- foreach (split /\s+/, $1) { # Make sure all the words are types,
- last unless ($isatype{$_} or $_ eq 'struct');
- }
- s/\([\w\s]+[\*\s]*\)// && next; # then eliminate them.
- };
- # struct/union member, including arrays:
- s/^([_A-Z]\w*(\[[^\]]+\])?((\.|->)[_A-Z]\w*(\[[^\]]+\])?)+)//i && do {
- my $id = $1;
- $id =~ s/(\.|(->))([^\.\-]*)/->\{$3\}/g;
- $id =~ s/\b([^\$])($joined_args)/$1\$$2/g if length($joined_args);
- while($id =~ /\[\s*([^\$\&\d\]]+)\]/) {
- my($index) = $1;
- $index =~ s/\s//g;
- if(exists($curargs{$index})) {
- $index = "\$$index";
- } else {
- $index = "&$index";
- }
- $id =~ s/\[\s*([^\$\&\d\]]+)\]/[$index]/;
- }
- $new .= " (\$$id)";
- };
- s/^([_a-zA-Z]\w*)// && do {
- my $id = $1;
- if ($id eq 'struct') {
- s/^\s+(\w+)//;
- $id .= ' ' . $1;
- $isatype{$id} = 1;
- } elsif ($id =~ /^((un)?signed)|(long)|(short)$/) {
- while (s/^\s+(\w+)//) { $id .= ' ' . $1; }
- $isatype{$id} = 1;
- }
- if ($curargs{$id}) {
- $new .= "\$$id";
- $new .= '->' if /^[\[\{]/;
- } elsif ($id eq 'defined') {
- $new .= 'defined';
- } elsif (/^\(/) {
- s/^\((\w),/("$1",/ if $id =~ /^_IO[WR]*$/i; # cheat
- $new .= " &$id";
- } elsif ($isatype{$id}) {
- if ($new =~ /{\s*$/) {
- $new .= "'$id'";
- } elsif ($new =~ /\(\s*$/ && /^[\s*]*\)/) {
- $new =~ s/\(\s*$//;
- s/^[\s*]*\)//;
- } else {
- $new .= q(').$id.q(');
- }
- } else {
- if ($inif && $new !~ /defined\s*\($/) {
- $new .= '(defined(&' . $id . ') ? &' . $id . ' : 0)';
- } elsif (/^\[/) {
- $new .= " \$$id";
- } else {
- $new .= ' &' . $id;
- }
- }
- next;
- };
- s/^(.)// && do { if ($1 ne '#') { $new .= $1; } next;};
- }
-}
-
-
-# Handle recursive subdirectories without getting a grotesquely big stack.
-# Could this be implemented using File::Find?
-sub next_file
-{
- my $file;
-
- while (@ARGV) {
- $file = shift @ARGV;
-
- if ($file eq '-' or -f $file or -l $file) {
- return $file;
- } elsif (-d $file) {
- if ($opt_r) {
- expand_glob($file);
- } else {
- print STDERR "Skipping directory `$file'\n";
- }
- } elsif ($opt_a) {
- return $file;
- } else {
- print STDERR "Skipping `$file': not a file or directory\n";
- }
- }
-
- return undef;
-}
-
-
-# Put all the files in $directory into @ARGV for processing.
-sub expand_glob
-{
- my ($directory) = @_;
-
- $directory =~ s:/$::;
-
- opendir DIR, $directory;
- foreach (readdir DIR) {
- next if ($_ eq '.' or $_ eq '..');
-
- # expand_glob() is going to be called until $ARGV[0] isn't a
- # directory; so push directories, and unshift everything else.
- if (-d "$directory/$_") { push @ARGV, "$directory/$_" }
- else { unshift @ARGV, "$directory/$_" }
- }
- closedir DIR;
-}
-
-
-# Given $file, a symbolic link to a directory in the C include directory,
-# make an equivalent symbolic link in $Dest_dir, if we can figure out how.
-# Otherwise, just duplicate the file or directory.
-sub link_if_possible
-{
- my ($dirlink) = @_;
- my $target = eval 'readlink($dirlink)';
-
- if ($target =~ m:^\.\./: or $target =~ m:^/:) {
- # The target of a parent or absolute link could leave the $Dest_dir
- # hierarchy, so let's put all of the contents of $dirlink (actually,
- # the contents of $target) into @ARGV; as a side effect down the
- # line, $dirlink will get created as an _actual_ directory.
- expand_glob($dirlink);
- } else {
- if (-l "$Dest_dir/$dirlink") {
- unlink "$Dest_dir/$dirlink" or
- print STDERR "Could not remove link $Dest_dir/$dirlink: $!\n";
- }
-
- if (eval 'symlink($target, "$Dest_dir/$dirlink")') {
- print "Linking $target -> $Dest_dir/$dirlink\n";
-
- # Make sure that the link _links_ to something:
- if (! -e "$Dest_dir/$target") {
- mkpath("$Dest_dir/$target", 0755) or
- print STDERR "Could not create $Dest_dir/$target/\n";
- }
- } else {
- print STDERR "Could not symlink $target -> $Dest_dir/$dirlink: $!\n";
- }
- }
-}
-
-
-# Push all #included files in $file onto our stack, except for STDIN
-# and files we've already processed.
-sub queue_includes_from
-{
- my ($file) = @_;
- my $line;
-
- return if ($file eq "-");
-
- open HEADER, $file or return;
- while (defined($line = <HEADER>)) {
- while (/\\$/) { # Handle continuation lines
- chop $line;
- $line .= <HEADER>;
- }
-
- if ($line =~ /^#\s*include\s+<(.*?)>/) {
- push(@ARGV, $1) unless $Is_converted{$1};
- }
- }
- close HEADER;
-}
-
-
-# Determine include directories; $Config{usrinc} should be enough for (all
-# non-GCC?) C compilers, but gcc uses an additional include directory.
-sub inc_dirs
-{
- my $from_gcc = `$Config{cc} -v 2>&1`;
- $from_gcc =~ s:^Reading specs from (.*?)/specs\b.*:$1/include:s;
-
- length($from_gcc) ? ($from_gcc, $Config{usrinc}) : ($Config{usrinc});
-}
-
-
-# Create "_h2ph_pre.ph", if it doesn't exist or was built by a different
-# version of h2ph.
-sub build_preamble_if_necessary
-{
- # Increment $VERSION every time this function is modified:
- my $VERSION = 2;
- my $preamble = "$Dest_dir/_h2ph_pre.ph";
-
- # Can we skip building the preamble file?
- if (-r $preamble) {
- # Extract version number from first line of preamble:
- open PREAMBLE, $preamble or die "Cannot open $preamble: $!";
- my $line = <PREAMBLE>;
- $line =~ /(\b\d+\b)/;
- close PREAMBLE or die "Cannot close $preamble: $!";
-
- # Don't build preamble if a compatible preamble exists:
- return if $1 == $VERSION;
- }
-
- my (%define) = _extract_cc_defines();
-
- open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!";
- print PREAMBLE "# This file was created by h2ph version $VERSION\n";
-
- foreach (sort keys %define) {
- if ($opt_D) {
- print PREAMBLE "# $_=$define{$_}\n";
- }
-
- if ($define{$_} =~ /^\d+$/) {
- print PREAMBLE
- "unless (defined &$_) { sub $_() { $define{$_} } }\n\n";
- } elsif ($define{$_} =~ /^\w+$/) {
- print PREAMBLE
- "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n";
- } else {
- print PREAMBLE
- "unless (defined &$_) { sub $_() { \"",
- quotemeta($define{$_}), "\" } }\n\n";
- }
- }
- close PREAMBLE or die "Cannot close $preamble: $!";
-}
-
-
-# %Config contains information on macros that are pre-defined by the
-# system's compiler. We need this information to make the .ph files
-# function with perl as the .h files do with cc.
-sub _extract_cc_defines
-{
- my %define;
- my $allsymbols = join " ",
- @Config{'ccsymbols', 'cppsymbols', 'cppccsymbols'};
-
- # Split compiler pre-definitions into `key=value' pairs:
- foreach (split /\s+/, $allsymbols) {
- /(.+?)=(.+)/ and $define{$1} = $2;
-
- if ($opt_D) {
- print STDERR "$_: $1 -> $2\n";
- }
- }
-
- return %define;
-}
-
-
-1;
-
-##############################################################################
-__END__
-
-=head1 NAME
-
-h2ph - convert .h C header files to .ph Perl header files
-
-=head1 SYNOPSIS
-
-B<h2ph [-d destination directory] [-r | -a] [-l] [headerfiles]>
-
-=head1 DESCRIPTION
-
-I<h2ph>
-converts any C header files specified to the corresponding Perl header file
-format.
-It is most easily run while in /usr/include:
-
- cd /usr/include; h2ph * sys/*
-
-or
-
- cd /usr/include; h2ph -r -l .
-
-The output files are placed in the hierarchy rooted at Perl's
-architecture dependent library directory. You can specify a different
-hierarchy with a B<-d> switch.
-
-If run with no arguments, filters standard input to standard output.
-
-=head1 OPTIONS
-
-=over 4
-
-=item -d destination_dir
-
-Put the resulting B<.ph> files beneath B<destination_dir>, instead of
-beneath the default Perl library location (C<$Config{'installarchlib'}>).
-
-=item -r
-
-Run recursively; if any of B<headerfiles> are directories, then run I<h2ph>
-on all files in those directories (and their subdirectories, etc.). B<-r>
-and B<-a> are mutually exclusive.
-
-=item -a
-
-Run automagically; convert B<headerfiles>, as well as any B<.h> files
-which they include. This option will search for B<.h> files in all
-directories which your C compiler ordinarily uses. B<-a> and B<-r> are
-mutually exclusive.
-
-=item -l
-
-Symbolic links will be replicated in the destination directory. If B<-l>
-is not specified, then links are skipped over.
-
-=item -h
-
-Put ``hints'' in the .ph files which will help in locating problems with
-I<h2ph>. In those cases when you B<require> a B<.ph> file containing syntax
-errors, instead of the cryptic
-
- [ some error condition ] at (eval mmm) line nnn
-
-you will see the slightly more helpful
-
- [ some error condition ] at filename.ph line nnn
-
-However, the B<.ph> files almost double in size when built using B<-h>.
-
-=item -D
-
-Include the code from the B<.h> file as a comment in the B<.ph> file.
-This is primarily used for debugging I<h2ph>.
-
-=item -Q
-
-``Quiet'' mode; don't print out the names of the files being converted.
-
-=back
-
-=head1 ENVIRONMENT
-
-No environment variables are used.
-
-=head1 FILES
-
- /usr/include/*.h
- /usr/include/sys/*.h
-
-etc.
-
-=head1 AUTHOR
-
-Larry Wall
-
-=head1 SEE ALSO
-
-perl(1)
-
-=head1 DIAGNOSTICS
-
-The usual warnings if it can't read or write the files involved.
-
-=head1 BUGS
-
-Doesn't construct the %sizeof array for you.
-
-It doesn't handle all C constructs, but it does attempt to isolate
-definitions inside evals so that you can get at the definitions
-that it can translate.
-
-It's only intended as a rough tool.
-You may need to dicker with the files produced.
-
-You have to run this program by hand; it's not run as part of the Perl
-installation.
-
-Doesn't handle complicated expressions built piecemeal, a la:
-
- enum {
- FIRST_VALUE,
- SECOND_VALUE,
- #ifdef ABC
- THIRD_VALUE
- #endif
- };
-
-Doesn't necessarily locate all of your C compiler's internally-defined
-symbols.
-
-=cut
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/utils/h2xs.PL b/contrib/perl5/utils/h2xs.PL
deleted file mode 100644
index edc2bb5..0000000
--- a/contrib/perl5/utils/h2xs.PL
+++ /dev/null
@@ -1,1865 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-my $origdir = cwd;
-chdir dirname($0);
-my $file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-=head1 NAME
-
-h2xs - convert .h C header files to Perl extensions
-
-=head1 SYNOPSIS
-
-B<h2xs> [B<-ACOPXacdfkmx>] [B<-F> addflags] [B<-M> fmask] [B<-n> module_name] [B<-o> tmask] [B<-p> prefix] [B<-s> subs] [B<-v> version] [headerfile ... [extra_libraries]]
-
-B<h2xs> B<-h>
-
-=head1 DESCRIPTION
-
-I<h2xs> builds a Perl extension from C header files. The extension
-will include functions which can be used to retrieve the value of any
-#define statement which was in the C header files.
-
-The I<module_name> will be used for the name of the extension. If
-module_name is not supplied then the name of the first header file
-will be used, with the first character capitalized.
-
-If the extension might need extra libraries, they should be included
-here. The extension Makefile.PL will take care of checking whether
-the libraries actually exist and how they should be loaded.
-The extra libraries should be specified in the form -lm -lposix, etc,
-just as on the cc command line. By default, the Makefile.PL will
-search through the library path determined by Configure. That path
-can be augmented by including arguments of the form B<-L/another/library/path>
-in the extra-libraries argument.
-
-=head1 OPTIONS
-
-=over 5
-
-=item B<-A>
-
-Omit all autoload facilities. This is the same as B<-c> but also removes the
-S<C<use AutoLoader>> statement from the .pm file.
-
-=item B<-C>
-
-Omits creation of the F<Changes> file, and adds a HISTORY section to
-the POD template.
-
-=item B<-F> I<addflags>
-
-Additional flags to specify to C preprocessor when scanning header for
-function declarations. Should not be used without B<-x>.
-
-=item B<-M> I<regular expression>
-
-selects functions/macros to process.
-
-=item B<-O>
-
-Allows a pre-existing extension directory to be overwritten.
-
-=item B<-P>
-
-Omit the autogenerated stub POD section.
-
-=item B<-X>
-
-Omit the XS portion. Used to generate templates for a module which is not
-XS-based. C<-c> and C<-f> are implicitly enabled.
-
-=item B<-a>
-
-Generate an accessor method for each element of structs and unions. The
-generated methods are named after the element name; will return the current
-value of the element if called without additional arguments; and will set
-the element to the supplied value (and return the new value) if called with
-an additional argument. Embedded structures and unions are returned as a
-pointer rather than the complete structure, to facilitate chained calls.
-
-These methods all apply to the Ptr type for the structure; additionally
-two methods are constructed for the structure type itself, C<_to_ptr>
-which returns a Ptr type pointing to the same structure, and a C<new>
-method to construct and return a new structure, initialised to zeroes.
-
-=item B<-c>
-
-Omit C<constant()> from the .xs file and corresponding specialised
-C<AUTOLOAD> from the .pm file.
-
-=item B<-d>
-
-Turn on debugging messages.
-
-=item B<-f>
-
-Allows an extension to be created for a header even if that header is
-not found in standard include directories.
-
-=item B<-h>
-
-Print the usage, help and version for this h2xs and exit.
-
-=item B<-k>
-
-For function arguments declared as C<const>, omit the const attribute in the
-generated XS code.
-
-=item B<-m>
-
-B<Experimental>: for each variable declared in the header file(s), declare
-a perl variable of the same name magically tied to the C variable.
-
-=item B<-n> I<module_name>
-
-Specifies a name to be used for the extension, e.g., S<-n RPC::DCE>
-
-=item B<-o> I<regular expression>
-
-Use "opaque" data type for the C types matched by the regular
-expression, even if these types are C<typedef>-equivalent to types
-from typemaps. Should not be used without B<-x>.
-
-This may be useful since, say, types which are C<typedef>-equivalent
-to integers may represent OS-related handles, and one may want to work
-with these handles in OO-way, as in C<$handle-E<gt>do_something()>.
-Use C<-o .> if you want to handle all the C<typedef>ed types as opaque types.
-
-The type-to-match is whitewashed (except for commas, which have no
-whitespace before them, and multiple C<*> which have no whitespace
-between them).
-
-=item B<-p> I<prefix>
-
-Specify a prefix which should be removed from the Perl function names, e.g., S<-p sec_rgy_>
-This sets up the XS B<PREFIX> keyword and removes the prefix from functions that are
-autoloaded via the C<constant()> mechanism.
-
-=item B<-s> I<sub1,sub2>
-
-Create a perl subroutine for the specified macros rather than autoload with the constant() subroutine.
-These macros are assumed to have a return type of B<char *>, e.g., S<-s sec_rgy_wildcard_name,sec_rgy_wildcard_sid>.
-
-=item B<-v> I<version>
-
-Specify a version number for this extension. This version number is added
-to the templates. The default is 0.01.
-
-=item B<-x>
-
-Automatically generate XSUBs basing on function declarations in the
-header file. The package C<C::Scan> should be installed. If this
-option is specified, the name of the header file may look like
-C<NAME1,NAME2>. In this case NAME1 is used instead of the specified string,
-but XSUBs are emitted only for the declarations included from file NAME2.
-
-Note that some types of arguments/return-values for functions may
-result in XSUB-declarations/typemap-entries which need
-hand-editing. Such may be objects which cannot be converted from/to a
-pointer (like C<long long>), pointers to functions, or arrays. See
-also the section on L<LIMITATIONS of B<-x>>.
-
-=item B<-b> I<version>
-
-Generates a .pm file which is backwards compatible with the specified
-perl version.
-
-For versions < 5.6.0, the changes are.
- - no use of 'our' (uses 'use vars' instead)
- - no 'use warnings'
-
-Specifying a compatibility version higher than the version of perl you
-are using to run h2xs will have no effect.
-
-=back
-
-=head1 EXAMPLES
-
-
- # Default behavior, extension is Rusers
- h2xs rpcsvc/rusers
-
- # Same, but extension is RUSERS
- h2xs -n RUSERS rpcsvc/rusers
-
- # Extension is rpcsvc::rusers. Still finds <rpcsvc/rusers.h>
- h2xs rpcsvc::rusers
-
- # Extension is ONC::RPC. Still finds <rpcsvc/rusers.h>
- h2xs -n ONC::RPC rpcsvc/rusers
-
- # Without constant() or AUTOLOAD
- h2xs -c rpcsvc/rusers
-
- # Creates templates for an extension named RPC
- h2xs -cfn RPC
-
- # Extension is ONC::RPC.
- h2xs -cfn ONC::RPC
-
- # Makefile.PL will look for library -lrpc in
- # additional directory /opt/net/lib
- h2xs rpcsvc/rusers -L/opt/net/lib -lrpc
-
- # Extension is DCE::rgynbase
- # prefix "sec_rgy_" is dropped from perl function names
- h2xs -n DCE::rgynbase -p sec_rgy_ dce/rgynbase
-
- # Extension is DCE::rgynbase
- # prefix "sec_rgy_" is dropped from perl function names
- # subroutines are created for sec_rgy_wildcard_name and sec_rgy_wildcard_sid
- h2xs -n DCE::rgynbase -p sec_rgy_ \
- -s sec_rgy_wildcard_name,sec_rgy_wildcard_sid dce/rgynbase
-
- # Make XS without defines in perl.h, but with function declarations
- # visible from perl.h. Name of the extension is perl1.
- # When scanning perl.h, define -DEXT=extern -DdEXT= -DINIT(x)=
- # Extra backslashes below because the string is passed to shell.
- # Note that a directory with perl header files would
- # be added automatically to include path.
- h2xs -xAn perl1 -F "-DEXT=extern -DdEXT= -DINIT\(x\)=" perl.h
-
- # Same with function declaration in proto.h as visible from perl.h.
- h2xs -xAn perl2 perl.h,proto.h
-
- # Same but select only functions which match /^av_/
- h2xs -M '^av_' -xAn perl2 perl.h,proto.h
-
- # Same but treat SV* etc as "opaque" types
- h2xs -o '^[S]V \*$' -M '^av_' -xAn perl2 perl.h,proto.h
-
-=head2 Extension based on F<.h> and F<.c> files
-
-Suppose that you have some C files implementing some functionality,
-and the corresponding header files. How to create an extension which
-makes this functionality accessable in Perl? The example below
-assumes that the header files are F<interface_simple.h> and
-I<interface_hairy.h>, and you want the perl module be named as
-C<Ext::Ension>. If you need some preprocessor directives and/or
-linking with external libraries, see the flags C<-F>, C<-L> and C<-l>
-in L<"OPTIONS">.
-
-=over
-
-=item Find the directory name
-
-Start with a dummy run of h2xs:
-
- h2xs -Afn Ext::Ension
-
-The only purpose of this step is to create the needed directories, and
-let you know the names of these directories. From the output you can
-see that the directory for the extension is F<Ext/Ension>.
-
-=item Copy C files
-
-Copy your header files and C files to this directory F<Ext/Ension>.
-
-=item Create the extension
-
-Run h2xs, overwriting older autogenerated files:
-
- h2xs -Oxan Ext::Ension interface_simple.h interface_hairy.h
-
-h2xs looks for header files I<after> changing to the extension
-directory, so it will find your header files OK.
-
-=item Archive and test
-
-As usual, run
-
- cd Ext/Ension
- perl Makefile.PL
- make dist
- make
- make test
-
-=item Hints
-
-It is important to do C<make dist> as early as possible. This way you
-can easily merge(1) your changes to autogenerated files if you decide
-to edit your C<.h> files and rerun h2xs.
-
-Do not forget to edit the documentation in the generated F<.pm> file.
-
-Consider the autogenerated files as skeletons only, you may invent
-better interfaces than what h2xs could guess.
-
-Consider this section as a guideline only, some other options of h2xs
-may better suit your needs.
-
-=back
-
-=head1 ENVIRONMENT
-
-No environment variables are used.
-
-=head1 AUTHOR
-
-Larry Wall and others
-
-=head1 SEE ALSO
-
-L<perl>, L<perlxstut>, L<ExtUtils::MakeMaker>, and L<AutoLoader>.
-
-=head1 DIAGNOSTICS
-
-The usual warnings if it cannot read or write the files involved.
-
-=head1 LIMITATIONS of B<-x>
-
-F<h2xs> would not distinguish whether an argument to a C function
-which is of the form, say, C<int *>, is an input, output, or
-input/output parameter. In particular, argument declarations of the
-form
-
- int
- foo(n)
- int *n
-
-should be better rewritten as
-
- int
- foo(n)
- int &n
-
-if C<n> is an input parameter.
-
-Additionally, F<h2xs> has no facilities to intuit that a function
-
- int
- foo(addr,l)
- char *addr
- int l
-
-takes a pair of address and length of data at this address, so it is better
-to rewrite this function as
-
- int
- foo(sv)
- SV *addr
- PREINIT:
- STRLEN len;
- char *s;
- CODE:
- s = SvPV(sv,len);
- RETVAL = foo(s, len);
- OUTPUT:
- RETVAL
-
-or alternately
-
- static int
- my_foo(SV *sv)
- {
- STRLEN len;
- char *s = SvPV(sv,len);
-
- return foo(s, len);
- }
-
- MODULE = foo PACKAGE = foo PREFIX = my_
-
- int
- foo(sv)
- SV *sv
-
-See L<perlxs> and L<perlxstut> for additional details.
-
-=cut
-
-use strict;
-
-
-my( $H2XS_VERSION ) = ' $Revision: 1.21 $ ' =~ /\$Revision:\s+([^\s]+)/;
-my $TEMPLATE_VERSION = '0.01';
-my @ARGS = @ARGV;
-my $compat_version = $];
-
-use Getopt::Std;
-
-sub usage{
- warn "@_\n" if @_;
- die "h2xs [-ACOPXacdfhkmx] [-F addflags] [-M fmask] [-n module_name] [-o tmask] [-p prefix] [-s subs] [-v version] [headerfile [extra_libraries]]
-version: $H2XS_VERSION
- -A Omit all autoloading facilities (implies -c).
- -C Omit creating the Changes file, add HISTORY heading to stub POD.
- -F Additional flags for C preprocessor (used with -x).
- -M Mask to select C functions/macros (default is select all).
- -O Allow overwriting of a pre-existing extension directory.
- -P Omit the stub POD section.
- -X Omit the XS portion (implies both -c and -f).
- -a Generate get/set accessors for struct and union members (used with -x).
- -c Omit the constant() function and specialised AUTOLOAD from the XS file.
- -d Turn on debugging messages.
- -f Force creation of the extension even if the C header does not exist.
- -h Display this help message
- -k Omit 'const' attribute on function arguments (used with -x).
- -m Generate tied variables for access to declared variables.
- -n Specify a name to use for the extension (recommended).
- -o Regular expression for \"opaque\" types.
- -p Specify a prefix which should be removed from the Perl function names.
- -s Create subroutines for specified macros.
- -v Specify a version number for this extension.
- -x Autogenerate XSUBs using C::Scan.
- -b Specify a perl version to be backwards compatibile with
-extra_libraries
- are any libraries that might be needed for loading the
- extension, e.g. -lm would try to link in the math library.
-";
-}
-
-
-getopts("ACF:M:OPXacdfhkmn:o:p:s:v:xb:") || usage;
-use vars qw($opt_A $opt_C $opt_F $opt_M $opt_O $opt_P $opt_X $opt_a $opt_c $opt_d
- $opt_f $opt_h $opt_k $opt_m $opt_n $opt_o $opt_p $opt_s $opt_v $opt_x
- $opt_b);
-
-usage if $opt_h;
-
-if( $opt_b ){
- usage "You cannot use -b and -m at the same time.\n" if ($opt_b && $opt_m);
- $opt_b =~ /^\d+\.\d+\.\d+/ ||
- usage "You must provide the backwards compatibility version in X.Y.Z form. " .
- "(i.e. 5.5.0)\n";
- my ($maj,$min,$sub) = split(/\./,$opt_b,3);
- $compat_version = sprintf("%d.%03d%02d",$maj,$min,$sub);
-}
-
-if( $opt_v ){
- $TEMPLATE_VERSION = $opt_v;
-}
-
-# -A implies -c.
-$opt_c = 1 if $opt_A;
-
-# -X implies -c and -f
-$opt_c = $opt_f = 1 if $opt_X;
-
-my %const_xsub = map { $_,1 } split(/,+/, $opt_s) if $opt_s;
-my $extralibs;
-my @path_h;
-
-while (my $arg = shift) {
- if ($arg =~ /^-l/i) {
- $extralibs = "$arg @ARGV";
- last;
- }
- push(@path_h, $arg);
-}
-
-usage "Must supply header file or module name\n"
- unless (@path_h or $opt_n);
-
-my $fmask;
-my $tmask;
-
-$fmask = qr{$opt_M} if defined $opt_M;
-$tmask = qr{$opt_o} if defined $opt_o;
-my $tmask_all = $tmask && $opt_o eq '.';
-
-if ($opt_x) {
- eval {require C::Scan; 1}
- or die <<EOD;
-C::Scan required if you use -x option.
-To install C::Scan, execute
- perl -MCPAN -e "install C::Scan"
-EOD
- unless ($tmask_all) {
- $C::Scan::VERSION >= 0.70
- or die <<EOD;
-C::Scan v. 0.70 or later required unless you use -o . option.
-You have version $C::Scan::VERSION installed as $INC{'C/Scan.pm'}.
-To install C::Scan, execute
- perl -MCPAN -e "install C::Scan"
-EOD
- }
- if (($opt_m || $opt_a) && $C::Scan::VERSION < 0.73) {
- die <<EOD;
-C::Scan v. 0.73 or later required to use -m or -a options.
-You have version $C::Scan::VERSION installed as $INC{'C/Scan.pm'}.
-To install C::Scan, execute
- perl -MCPAN -e "install C::Scan"
-EOD
- }
-}
-elsif ($opt_o or $opt_F) {
- warn <<EOD;
-Options -o and -F do not make sense without -x.
-EOD
-}
-
-my @path_h_ini = @path_h;
-my ($name, %fullpath, %prefix, %seen_define, %prefixless, %const_names);
-
-my $module = $opt_n;
-
-if( @path_h ){
- use Config;
- use File::Spec;
- my @paths;
- if ($^O eq 'VMS') { # Consider overrides of default location
- # XXXX This is not equivalent to what the older version did:
- # it was looking at $hadsys header-file per header-file...
- my($hadsys) = grep s!^sys/!!i , @path_h;
- @paths = qw( Sys$Library VAXC$Include );
- push @paths, ($hadsys ? 'GNU_CC_Include[vms]' : 'GNU_CC_Include[000000]');
- push @paths, qw( DECC$Library_Include DECC$System_Include );
- }
- else {
- @paths = (File::Spec->curdir(), $Config{usrinc},
- (split ' ', $Config{locincpth}), '/usr/include');
- }
- foreach my $path_h (@path_h) {
- $name ||= $path_h;
- $module ||= do {
- $name =~ s/\.h$//;
- if ( $name !~ /::/ ) {
- $name =~ s#^.*/##;
- $name = "\u$name";
- }
- $name;
- };
-
- if( $path_h =~ s#::#/#g && $opt_n ){
- warn "Nesting of headerfile ignored with -n\n";
- }
- $path_h .= ".h" unless $path_h =~ /\.h$/;
- my $fullpath = $path_h;
- $path_h =~ s/,.*$// if $opt_x;
- $fullpath{$path_h} = $fullpath;
-
- # Minor trickery: we can't chdir() before we processed the headers
- # (so know the name of the extension), but the header may be in the
- # extension directory...
- my $tmp_path_h = $path_h;
- my $rel_path_h = $path_h;
- my @dirs = @paths;
- if (not -f $path_h) {
- my $found;
- for my $dir (@paths) {
- $found++, last
- if -f ($path_h = File::Spec->catfile($dir, $tmp_path_h));
- }
- if ($found) {
- $rel_path_h = $path_h;
- } else {
- (my $epath = $module) =~ s,::,/,g;
- $epath = File::Spec->catdir('ext', $epath) if -d 'ext';
- $rel_path_h = File::Spec->catfile($epath, $tmp_path_h);
- $path_h = $tmp_path_h; # Used during -x
- push @dirs, $epath;
- }
- }
-
- if (!$opt_c) {
- die "Can't find $tmp_path_h in @dirs\n"
- if ( ! $opt_f && ! -f "$rel_path_h" );
- # Scan the header file (we should deal with nested header files)
- # Record the names of simple #define constants into const_names
- # Function prototypes are processed below.
- open(CH, "<$rel_path_h") || die "Can't open $rel_path_h: $!\n";
- defines:
- while (<CH>) {
- if (/^[ \t]*#[ \t]*define\s+([\$\w]+)\b(?!\()\s*(?=[^" \t])(.*)/) {
- my $def = $1;
- my $rest = $2;
- $rest =~ s!/\*.*?(\*/|\n)|//.*!!g; # Remove comments
- $rest =~ s/^\s+//;
- $rest =~ s/\s+$//;
- # Cannot do: (-1) and ((LHANDLE)3) are OK:
- #print("Skip non-wordy $def => $rest\n"),
- # next defines if $rest =~ /[^\w\$]/;
- if ($rest =~ /"/) {
- print("Skip stringy $def => $rest\n") if $opt_d;
- next defines;
- }
- print "Matched $_ ($def)\n" if $opt_d;
- $seen_define{$def} = $rest;
- $_ = $def;
- next if /^_.*_h_*$/i; # special case, but for what?
- if (defined $opt_p) {
- if (!/^$opt_p(\d)/) {
- ++$prefix{$_} if s/^$opt_p//;
- }
- else {
- warn "can't remove $opt_p prefix from '$_'!\n";
- }
- }
- $prefixless{$def} = $_;
- if (!$fmask or /$fmask/) {
- print "... Passes mask of -M.\n" if $opt_d and $fmask;
- $const_names{$_}++;
- }
- }
- }
- close(CH);
- }
- }
-}
-
-
-
-my ($ext, $nested, @modparts, $modfname, $modpname);
-(chdir 'ext', $ext = 'ext/') if -d 'ext';
-
-if( $module =~ /::/ ){
- $nested = 1;
- @modparts = split(/::/,$module);
- $modfname = $modparts[-1];
- $modpname = join('/',@modparts);
-}
-else {
- $nested = 0;
- @modparts = ();
- $modfname = $modpname = $module;
-}
-
-
-if ($opt_O) {
- warn "Overwriting existing $ext$modpname!!!\n" if -e $modpname;
-}
-else {
- die "Won't overwrite existing $ext$modpname\n" if -e $modpname;
-}
-if( $nested ){
- my $modpath = "";
- foreach (@modparts){
- mkdir("$modpath$_", 0777);
- $modpath .= "$_/";
- }
-}
-mkdir($modpname, 0777);
-chdir($modpname) || die "Can't chdir $ext$modpname: $!\n";
-
-my %types_seen;
-my %std_types;
-my $fdecls = [];
-my $fdecls_parsed = [];
-my $typedef_rex;
-my %typedefs_pre;
-my %known_fnames;
-my %structs;
-
-my @fnames;
-my @fnames_no_prefix;
-my %vdecl_hash;
-my @vdecls;
-
-if( ! $opt_X ){ # use XS, unless it was disabled
- open(XS, ">$modfname.xs") || die "Can't create $ext$modpname/$modfname.xs: $!\n";
- if ($opt_x) {
- require Config; # Run-time directive
- warn "Scanning typemaps...\n";
- get_typemap();
- my @td;
- my @good_td;
- my $addflags = $opt_F || '';
-
- foreach my $filename (@path_h) {
- my $c;
- my $filter;
-
- if ($fullpath{$filename} =~ /,/) {
- $filename = $`;
- $filter = $';
- }
- warn "Scanning $filename for functions...\n";
- $c = new C::Scan 'filename' => $filename, 'filename_filter' => $filter,
- 'add_cppflags' => $addflags, 'c_styles' => [qw(C++ C9X)];
- $c->set('includeDirs' => ["$Config::Config{archlib}/CORE"]);
-
- push @$fdecls_parsed, @{ $c->get('parsed_fdecls') };
- push(@$fdecls, @{$c->get('fdecls')});
-
- push @td, @{$c->get('typedefs_maybe')};
- if ($opt_a) {
- my $structs = $c->get('typedef_structs');
- @structs{keys %$structs} = values %$structs;
- }
-
- if ($opt_m) {
- %vdecl_hash = %{ $c->get('vdecl_hash') };
- @vdecls = sort keys %vdecl_hash;
- for (local $_ = 0; $_ < @vdecls; ++$_) {
- my $var = $vdecls[$_];
- my($type, $post) = @{ $vdecl_hash{$var} };
- if (defined $post) {
- warn "Can't handle variable '$type $var $post', skipping.\n";
- splice @vdecls, $_, 1;
- redo;
- }
- $type = normalize_type($type);
- $vdecl_hash{$var} = $type;
- }
- }
-
- unless ($tmask_all) {
- warn "Scanning $filename for typedefs...\n";
- my $td = $c->get('typedef_hash');
- # eval {require 'dumpvar.pl'; ::dumpValue($td)} or warn $@ if $opt_d;
- my @f_good_td = grep $td->{$_}[1] eq '', keys %$td;
- push @good_td, @f_good_td;
- @typedefs_pre{@f_good_td} = map $_->[0], @$td{@f_good_td};
- }
- }
- { local $" = '|';
- $typedef_rex = qr(\b(?<!struct )(?:@good_td)\b) if @good_td;
- }
- %known_fnames = map @$_[1,3], @$fdecls_parsed; # [1,3] is NAME, FULLTEXT
- if ($fmask) {
- my @good;
- for my $i (0..$#$fdecls_parsed) {
- next unless $fdecls_parsed->[$i][1] =~ /$fmask/; # [1] is NAME
- push @good, $i;
- print "... Function $fdecls_parsed->[$i][1] passes -M mask.\n"
- if $opt_d;
- }
- $fdecls = [@$fdecls[@good]];
- $fdecls_parsed = [@$fdecls_parsed[@good]];
- }
- @fnames = sort map $_->[1], @$fdecls_parsed; # 1 is NAME
- # Sort declarations:
- {
- my %h = map( ($_->[1], $_), @$fdecls_parsed);
- $fdecls_parsed = [ @h{@fnames} ];
- }
- @fnames_no_prefix = @fnames;
- @fnames_no_prefix
- = sort map { ++$prefix{$_} if s/^$opt_p(?!\d)//; $_ } @fnames_no_prefix;
- # Remove macros which expand to typedefs
- print "Typedefs are @td.\n" if $opt_d;
- my %td = map {($_, $_)} @td;
- # Add some other possible but meaningless values for macros
- for my $k (qw(char double float int long short unsigned signed void)) {
- $td{"$_$k"} = "$_$k" for ('', 'signed ', 'unsigned ');
- }
- # eval {require 'dumpvar.pl'; ::dumpValue( [\@td, \%td] ); 1} or warn $@;
- my $n = 0;
- my %bad_macs;
- while (keys %td > $n) {
- $n = keys %td;
- my ($k, $v);
- while (($k, $v) = each %seen_define) {
- # print("found '$k'=>'$v'\n"),
- $bad_macs{$k} = $td{$k} = $td{$v} if exists $td{$v};
- }
- }
- # Now %bad_macs contains names of bad macros
- for my $k (keys %bad_macs) {
- delete $const_names{$prefixless{$k}};
- print "Ignoring macro $k which expands to a typedef name '$bad_macs{$k}'\n" if $opt_d;
- }
- }
-}
-my @const_names = sort keys %const_names;
-
-open(PM, ">$modfname.pm") || die "Can't create $ext$modpname/$modfname.pm: $!\n";
-
-$" = "\n\t";
-warn "Writing $ext$modpname/$modfname.pm\n";
-
-if ( $compat_version < 5.006 ) {
-print PM <<"END";
-package $module;
-
-use $compat_version;
-use strict;
-END
-}
-else {
-print PM <<"END";
-package $module;
-
-use 5.006;
-use strict;
-use warnings;
-END
-}
-
-unless( $opt_X || $opt_c || $opt_A ){
- # we'll have an AUTOLOAD(), and it will have $AUTOLOAD and
- # will want Carp.
- print PM <<'END';
-use Carp;
-END
-}
-
-print PM <<'END';
-
-require Exporter;
-END
-
-print PM <<"END" if ! $opt_X; # use DynaLoader, unless XS was disabled
-require DynaLoader;
-END
-
-
-# Are we using AutoLoader or not?
-unless ($opt_A) { # no autoloader whatsoever.
- unless ($opt_c) { # we're doing the AUTOLOAD
- print PM "use AutoLoader;\n";
- }
- else {
- print PM "use AutoLoader qw(AUTOLOAD);\n"
- }
-}
-
-if ( $compat_version < 5.006 ) {
- if ( $opt_X || $opt_c || $opt_A ) {
- print PM 'use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);';
- } else {
- print PM 'use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);';
- }
-}
-
-# Determine @ISA.
-my $myISA = 'our @ISA = qw(Exporter'; # We seem to always want this.
-$myISA .= ' DynaLoader' unless $opt_X; # no XS
-$myISA .= ');';
-$myISA =~ s/^our // if $compat_version < 5.006;
-
-print PM "\n$myISA\n\n";
-
-my @exported_names = (@const_names, @fnames_no_prefix, map '$'.$_, @vdecls);
-
-my $tmp=<<"END";
-# Items to export into callers namespace by default. Note: do not export
-# names by default without a very good reason. Use EXPORT_OK instead.
-# Do not simply export all your public functions/methods/constants.
-
-# This allows declaration use $module ':all';
-# If you do not need this, moving things directly into \@EXPORT or \@EXPORT_OK
-# will save memory.
-our %EXPORT_TAGS = ( 'all' => [ qw(
- @exported_names
-) ] );
-
-our \@EXPORT_OK = ( \@{ \$EXPORT_TAGS{'all'} } );
-
-our \@EXPORT = qw(
- @const_names
-);
-our \$VERSION = '$TEMPLATE_VERSION';
-
-END
-
-$tmp =~ s/^our //mg if $compat_version < 5.006;
-print PM $tmp;
-
-if (@vdecls) {
- printf PM "our(@{[ join ', ', map '$'.$_, @vdecls ]});\n\n";
-}
-
-
-$tmp = ( $compat_version < 5.006 ? "" : "our \$AUTOLOAD;" );
-print PM <<"END" unless $opt_c or $opt_X;
-sub AUTOLOAD {
- # This AUTOLOAD is used to 'autoload' constants from the constant()
- # XS function. If a constant is not found then control is passed
- # to the AUTOLOAD in AutoLoader.
-
- my \$constname;
- $tmp
- (\$constname = \$AUTOLOAD) =~ s/.*:://;
- croak "&$module::constant not defined" if \$constname eq 'constant';
- my \$val = constant(\$constname, \@_ ? \$_[0] : 0);
- if (\$! != 0) {
- if (\$! =~ /Invalid/ || \$!{EINVAL}) {
- \$AutoLoader::AUTOLOAD = \$AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- croak "Your vendor has not defined $module macro \$constname";
- }
- }
- {
- no strict 'refs';
- # Fixed between 5.005_53 and 5.005_61
- if (\$] >= 5.00561) {
- *\$AUTOLOAD = sub () { \$val };
- }
- else {
- *\$AUTOLOAD = sub { \$val };
- }
- }
- goto &\$AUTOLOAD;
-}
-
-END
-
-if( ! $opt_X ){ # print bootstrap, unless XS is disabled
- print PM <<"END";
-bootstrap $module \$VERSION;
-END
-}
-
-# tying the variables can happen only after bootstrap
-if (@vdecls) {
- printf PM <<END;
-{
-@{[ join "\n", map " _tievar_$_(\$$_);", @vdecls ]}
-}
-
-END
-}
-
-my $after;
-if( $opt_P ){ # if POD is disabled
- $after = '__END__';
-}
-else {
- $after = '=cut';
-}
-
-print PM <<"END";
-
-# Preloaded methods go here.
-END
-
-print PM <<"END" unless $opt_A;
-
-# Autoload methods go after $after, and are processed by the autosplit program.
-END
-
-print PM <<"END";
-
-1;
-__END__
-END
-
-my $author = "A. U. Thor";
-my $email = 'a.u.thor@a.galaxy.far.far.away';
-
-my $revhist = '';
-$revhist = <<EOT if $opt_C;
-#
-#=head1 HISTORY
-#
-#=over 8
-#
-#=item $TEMPLATE_VERSION
-#
-#Original version; created by h2xs $H2XS_VERSION with options
-#
-# @ARGS
-#
-#=back
-#
-EOT
-
-my $exp_doc = <<EOD;
-#
-#=head2 EXPORT
-#
-#None by default.
-#
-EOD
-
-if (@const_names and not $opt_P) {
- $exp_doc .= <<EOD;
-#=head2 Exportable constants
-#
-# @{[join "\n ", @const_names]}
-#
-EOD
-}
-
-if (defined $fdecls and @$fdecls and not $opt_P) {
- $exp_doc .= <<EOD;
-#=head2 Exportable functions
-#
-EOD
-
-# $exp_doc .= <<EOD if $opt_p;
-#When accessing these functions from Perl, prefix C<$opt_p> should be removed.
-#
-#EOD
- $exp_doc .= <<EOD;
-# @{[join "\n ", @known_fnames{@fnames}]}
-#
-EOD
-}
-
-my $meth_doc = '';
-
-if ($opt_x && $opt_a) {
- my($name, $struct);
- $meth_doc .= accessor_docs($name, $struct)
- while ($name, $struct) = each %structs;
-}
-
-my $pod = <<"END" unless $opt_P;
-## Below is stub documentation for your module. You better edit it!
-#
-#=head1 NAME
-#
-#$module - Perl extension for blah blah blah
-#
-#=head1 SYNOPSIS
-#
-# use $module;
-# blah blah blah
-#
-#=head1 DESCRIPTION
-#
-#Stub documentation for $module, created by h2xs. It looks like the
-#author of the extension was negligent enough to leave the stub
-#unedited.
-#
-#Blah blah blah.
-$exp_doc$meth_doc$revhist
-#=head1 AUTHOR
-#
-#$author, E<lt>${email}E<gt>
-#
-#=head1 SEE ALSO
-#
-#L<perl>.
-#
-#=cut
-END
-
-$pod =~ s/^\#//gm unless $opt_P;
-print PM $pod unless $opt_P;
-
-close PM;
-
-
-if( ! $opt_X ){ # print XS, unless it is disabled
-warn "Writing $ext$modpname/$modfname.xs\n";
-
-print XS <<"END";
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-END
-if( @path_h ){
- foreach my $path_h (@path_h_ini) {
- my($h) = $path_h;
- $h =~ s#^/usr/include/##;
- if ($^O eq 'VMS') { $h =~ s#.*vms\]#sys/# or $h =~ s#.*[:>\]]##; }
- print XS qq{#include <$h>\n};
- }
- print XS "\n";
-}
-
-my %pointer_typedefs;
-my %struct_typedefs;
-
-sub td_is_pointer {
- my $type = shift;
- my $out = $pointer_typedefs{$type};
- return $out if defined $out;
- my $otype = $type;
- $out = ($type =~ /\*$/);
- # This converts only the guys which do not have trailing part in the typedef
- if (not $out
- and $typedef_rex and $type =~ s/($typedef_rex)/$typedefs_pre{$1}/go) {
- $type = normalize_type($type);
- print "Is-Pointer: Type mutation via typedefs: $otype ==> $type\n"
- if $opt_d;
- $out = td_is_pointer($type);
- }
- return ($pointer_typedefs{$otype} = $out);
-}
-
-sub td_is_struct {
- my $type = shift;
- my $out = $struct_typedefs{$type};
- return $out if defined $out;
- my $otype = $type;
- $out = ($type =~ /^(struct|union)\b/) && !td_is_pointer($type);
- # This converts only the guys which do not have trailing part in the typedef
- if (not $out
- and $typedef_rex and $type =~ s/($typedef_rex)/$typedefs_pre{$1}/go) {
- $type = normalize_type($type);
- print "Is-Struct: Type mutation via typedefs: $otype ==> $type\n"
- if $opt_d;
- $out = td_is_struct($type);
- }
- return ($struct_typedefs{$otype} = $out);
-}
-
-# Some macros will bomb if you try to return them from a double-returning func.
-# Say, ((char *)0), or strlen (if somebody #define STRLEN strlen).
-# Fortunately, we can detect both these cases...
-sub protect_convert_to_double {
- my $in = shift;
- my $val;
- return '' unless defined ($val = $seen_define{$in});
- return '(IV)' if $known_fnames{$val};
- # OUT_t of ((OUT_t)-1):
- return '' unless $val =~ /^\s*(\(\s*)?\(\s*([^()]*?)\s*\)/;
- td_is_pointer($2) ? '(IV)' : '';
-}
-
-# For each of the generated functions, length($pref) leading
-# letters are already checked. Moreover, it is recommended that
-# the generated functions uses switch on letter at offset at least
-# $off + length($pref).
-#
-# The given list has length($pref) chars removed at front, it is
-# guarantied that $off leading chars in the rest are the same for all
-# elts of the list.
-#
-# Returns: how at which offset it was decided to make a switch, or -1 if none.
-
-sub write_const;
-
-sub write_const {
- my ($fh, $pref, $off, $list) = (shift,shift,shift,shift);
- my %leading;
- my $offarg = length $pref;
-
- if (@$list == 0) { # Can happen on the initial iteration only
- print $fh <<"END";
-static double
-constant(char *name, int len, int arg)
-{
- errno = EINVAL;
- return 0;
-}
-END
- return -1;
- }
-
- if (@$list == 1) { # Can happen on the initial iteration only
- my $protect = protect_convert_to_double("$pref$list->[0]");
-
- print $fh <<"END";
-static double
-constant(char *name, int len, int arg)
-{
- errno = 0;
- if (strEQ(name + $offarg, "$list->[0]")) { /* $pref removed */
-#ifdef $pref$list->[0]
- return $protect$pref$list->[0];
-#else
- errno = ENOENT;
- return 0;
-#endif
- }
- errno = EINVAL;
- return 0;
-}
-END
- return -1;
- }
-
- for my $n (@$list) {
- my $c = substr $n, $off, 1;
- $leading{$c} = [] unless exists $leading{$c};
- push @{$leading{$c}}, substr $n, $off + 1;
- }
-
- if (keys(%leading) == 1) {
- return 1 + write_const $fh, $pref, $off + 1, $list;
- }
-
- my $leader = substr $list->[0], 0, $off;
- foreach my $letter (keys %leading) {
- write_const $fh, "$pref$leader$letter", 0, $leading{$letter}
- if @{$leading{$letter}} > 1;
- }
-
- my $npref = "_$pref";
- $npref = '' if $pref eq '';
-
- print $fh <<"END";
-static double
-constant$npref(char *name, int len, int arg)
-{
-END
-
- print $fh <<"END" if $npref eq '';
- errno = 0;
-END
-
- print $fh <<"END" if $off;
- if ($offarg + $off >= len ) {
- errno = EINVAL;
- return 0;
- }
-END
-
- print $fh <<"END";
- switch (name[$offarg + $off]) {
-END
-
- foreach my $letter (sort keys %leading) {
- my $let = $letter;
- $let = '\0' if $letter eq '';
-
- print $fh <<EOP;
- case '$let':
-EOP
- if (@{$leading{$letter}} > 1) {
- # It makes sense to call a function
- if ($off) {
- print $fh <<EOP;
- if (!strnEQ(name + $offarg,"$leader", $off))
- break;
-EOP
- }
- print $fh <<EOP;
- return constant_$pref$leader$letter(name, len, arg);
-EOP
- }
- else {
- # Do it ourselves
- my $protect
- = protect_convert_to_double("$pref$leader$letter$leading{$letter}[0]");
-
- print $fh <<EOP;
- if (strEQ(name + $offarg, "$leader$letter$leading{$letter}[0]")) { /* $pref removed */
-#ifdef $pref$leader$letter$leading{$letter}[0]
- return $protect$pref$leader$letter$leading{$letter}[0];
-#else
- goto not_there;
-#endif
- }
-EOP
- }
- }
- print $fh <<"END";
- }
- errno = EINVAL;
- return 0;
-
-not_there:
- errno = ENOENT;
- return 0;
-}
-
-END
-
-}
-
-if( ! $opt_c ) {
- print XS <<"END";
-static int
-not_here(char *s)
-{
- croak("$module::%s not implemented on this architecture", s);
- return -1;
-}
-
-END
-
- write_const(\*XS, '', 0, \@const_names);
-}
-
-print_tievar_subs(\*XS, $_, $vdecl_hash{$_}) for @vdecls;
-
-my $prefix;
-$prefix = "PREFIX = $opt_p" if defined $opt_p;
-
-# Now switch from C to XS by issuing the first MODULE declaration:
-print XS <<"END";
-
-MODULE = $module PACKAGE = $module $prefix
-
-END
-
-foreach (sort keys %const_xsub) {
- print XS <<"END";
-char *
-$_()
-
- CODE:
-#ifdef $_
- RETVAL = $_;
-#else
- croak("Your vendor has not defined the $module macro $_");
-#endif
-
- OUTPUT:
- RETVAL
-
-END
-}
-
-# If a constant() function was written then output a corresponding
-# XS declaration:
-print XS <<"END" unless $opt_c;
-
-double
-constant(sv,arg)
- PREINIT:
- STRLEN len;
- INPUT:
- SV * sv
- char * s = SvPV(sv, len);
- int arg
- CODE:
- RETVAL = constant(s,len,arg);
- OUTPUT:
- RETVAL
-
-END
-
-my %seen_decl;
-my %typemap;
-
-sub print_decl {
- my $fh = shift;
- my $decl = shift;
- my ($type, $name, $args) = @$decl;
- return if $seen_decl{$name}++; # Need to do the same for docs as well?
-
- my @argnames = map {$_->[1]} @$args;
- my @argtypes = map { normalize_type( $_->[0], 1 ) } @$args;
- if ($opt_k) {
- s/^\s*const\b\s*// for @argtypes;
- }
- my @argarrays = map { $_->[4] || '' } @$args;
- my $numargs = @$args;
- if ($numargs and $argtypes[-1] eq '...') {
- $numargs--;
- $argnames[-1] = '...';
- }
- local $" = ', ';
- $type = normalize_type($type, 1);
-
- print $fh <<"EOP";
-
-$type
-$name(@argnames)
-EOP
-
- for my $arg (0 .. $numargs - 1) {
- print $fh <<"EOP";
- $argtypes[$arg] $argnames[$arg]$argarrays[$arg]
-EOP
- }
-}
-
-sub print_tievar_subs {
- my($fh, $name, $type) = @_;
- print $fh <<END;
-I32
-_get_$name(IV index, SV *sv) {
- dSP;
- PUSHMARK(SP);
- XPUSHs(sv);
- PUTBACK;
- (void)call_pv("$module\::_get_$name", G_DISCARD);
- return (I32)0;
-}
-
-I32
-_set_$name(IV index, SV *sv) {
- dSP;
- PUSHMARK(SP);
- XPUSHs(sv);
- PUTBACK;
- (void)call_pv("$module\::_set_$name", G_DISCARD);
- return (I32)0;
-}
-
-END
-}
-
-sub print_tievar_xsubs {
- my($fh, $name, $type) = @_;
- print $fh <<END;
-void
-_tievar_$name(sv)
- SV* sv
- PREINIT:
- struct ufuncs uf;
- CODE:
- uf.uf_val = &_get_$name;
- uf.uf_set = &_set_$name;
- uf.uf_index = (IV)&_get_$name;
- sv_magic(sv, 0, 'U', (char*)&uf, sizeof(uf));
-
-void
-_get_$name(THIS)
- $type THIS = NO_INIT
- CODE:
- THIS = $name;
- OUTPUT:
- SETMAGIC: DISABLE
- THIS
-
-void
-_set_$name(THIS)
- $type THIS
- CODE:
- $name = THIS;
-
-END
-}
-
-sub print_accessors {
- my($fh, $name, $struct) = @_;
- return unless defined $struct && $name !~ /\s|_ANON/;
- $name = normalize_type($name);
- my $ptrname = normalize_type("$name *");
- print $fh <<"EOF";
-
-MODULE = $module PACKAGE = ${name} $prefix
-
-$name *
-_to_ptr(THIS)
- $name THIS = NO_INIT
- PROTOTYPE: \$
- CODE:
- if (sv_derived_from(ST(0), "$name")) {
- STRLEN len;
- char *s = SvPV((SV*)SvRV(ST(0)), len);
- if (len != sizeof(THIS))
- croak("Size \%d of packed data != expected \%d",
- len, sizeof(THIS));
- RETVAL = ($name *)s;
- }
- else
- croak("THIS is not of type $name");
- OUTPUT:
- RETVAL
-
-$name
-new(CLASS)
- char *CLASS = NO_INIT
- PROTOTYPE: \$
- CODE:
- Zero((void*)&RETVAL, sizeof(RETVAL), char);
- OUTPUT:
- RETVAL
-
-MODULE = $module PACKAGE = ${name}Ptr $prefix
-
-EOF
- my @items = @$struct;
- while (@items) {
- my $item = shift @items;
- if ($item->[0] =~ /_ANON/) {
- if (defined $item->[2]) {
- push @items, map [
- @$_[0, 1], "$item->[2]_$_->[2]", "$item->[2].$_->[2]",
- ], @{ $structs{$item->[0]} };
- } else {
- push @items, @{ $structs{$item->[0]} };
- }
- } else {
- my $type = normalize_type($item->[0]);
- my $ttype = $structs{$type} ? normalize_type("$type *") : $type;
- print $fh <<"EOF";
-$ttype
-$item->[2](THIS, __value = NO_INIT)
- $ptrname THIS
- $type __value
- PROTOTYPE: \$;\$
- CODE:
- if (items > 1)
- THIS->$item->[-1] = __value;
- RETVAL = @{[
- $type eq $ttype ? "THIS->$item->[-1]" : "&(THIS->$item->[-1])"
- ]};
- OUTPUT:
- RETVAL
-
-EOF
- }
- }
-}
-
-sub accessor_docs {
- my($name, $struct) = @_;
- return unless defined $struct && $name !~ /\s|_ANON/;
- $name = normalize_type($name);
- my $ptrname = $name . 'Ptr';
- my @items = @$struct;
- my @list;
- while (@items) {
- my $item = shift @items;
- if ($item->[0] =~ /_ANON/) {
- if (defined $item->[2]) {
- push @items, map [
- @$_[0, 1], "$item->[2]_$_->[2]", "$item->[2].$_->[2]",
- ], @{ $structs{$item->[0]} };
- } else {
- push @items, @{ $structs{$item->[0]} };
- }
- } else {
- push @list, $item->[2];
- }
- }
- my $methods = (join '(...)>, C<', @list) . '(...)';
-
- my $pod = <<"EOF";
-#
-#=head2 Object and class methods for C<$name>/C<$ptrname>
-#
-#The principal Perl representation of a C object of type C<$name> is an
-#object of class C<$ptrname> which is a reference to an integer
-#representation of a C pointer. To create such an object, one may use
-#a combination
-#
-# my \$buffer = $name->new();
-# my \$obj = \$buffer->_to_ptr();
-#
-#This exersizes the following two methods, and an additional class
-#C<$name>, the internal representation of which is a reference to a
-#packed string with the C structure. Keep in mind that \$buffer should
-#better survive longer than \$obj.
-#
-#=over
-#
-#=item C<\$object_of_type_$name-E<gt>_to_ptr()>
-#
-#Converts an object of type C<$name> to an object of type C<$ptrname>.
-#
-#=item C<$name-E<gt>new()>
-#
-#Creates an empty object of type C<$name>. The corresponding packed
-#string is zeroed out.
-#
-#=item C<$methods>
-#
-#return the current value of the corresponding element if called
-#without additional arguments. Set the element to the supplied value
-#(and return the new value) if called with an additional argument.
-#
-#Applicable to objects of type C<$ptrname>.
-#
-#=back
-#
-EOF
- $pod =~ s/^\#//gm;
- return $pod;
-}
-
-# Should be called before any actual call to normalize_type().
-sub get_typemap {
- # We do not want to read ./typemap by obvios reasons.
- my @tm = qw(../../../typemap ../../typemap ../typemap);
- my $stdtypemap = "$Config::Config{privlib}/ExtUtils/typemap";
- unshift @tm, $stdtypemap;
- my $proto_re = "[" . quotemeta('\$%&*@;') . "]" ;
-
- # Start with useful default values
- $typemap{float} = 'T_DOUBLE';
-
- foreach my $typemap (@tm) {
- next unless -e $typemap ;
- # skip directories, binary files etc.
- warn " Scanning $typemap\n";
- warn("Warning: ignoring non-text typemap file '$typemap'\n"), next
- unless -T $typemap ;
- open(TYPEMAP, $typemap)
- or warn ("Warning: could not open typemap file '$typemap': $!\n"), next;
- my $mode = 'Typemap';
- while (<TYPEMAP>) {
- next if /^\s*\#/;
- if (/^INPUT\s*$/) { $mode = 'Input'; next; }
- elsif (/^OUTPUT\s*$/) { $mode = 'Output'; next; }
- elsif (/^TYPEMAP\s*$/) { $mode = 'Typemap'; next; }
- elsif ($mode eq 'Typemap') {
- next if /^\s*($|\#)/ ;
- my ($type, $image);
- if ( ($type, $image) =
- /^\s*(.*?\S)\s+(\S+)\s*($proto_re*)\s*$/o
- # This may reference undefined functions:
- and not ($image eq 'T_PACKED' and $typemap eq $stdtypemap)) {
- $typemap{normalize_type($type)} = $image;
- }
- }
- }
- close(TYPEMAP) or die "Cannot close $typemap: $!";
- }
- %std_types = %types_seen;
- %types_seen = ();
-}
-
-
-sub normalize_type { # Second arg: do not strip const's before \*
- my $type = shift;
- my $do_keep_deep_const = shift;
- # If $do_keep_deep_const this is heuristical only
- my $keep_deep_const = ($do_keep_deep_const ? '\b(?![^(,)]*\*)' : '');
- my $ignore_mods
- = "(?:\\b(?:(?:__const__|const)$keep_deep_const|static|inline|__inline__)\\b\\s*)*";
- if ($do_keep_deep_const) { # Keep different compiled /RExen/o separately!
- $type =~ s/$ignore_mods//go;
- }
- else {
- $type =~ s/$ignore_mods//go;
- }
- $type =~ s/([^\s\w])/ \1 /g;
- $type =~ s/\s+$//;
- $type =~ s/^\s+//;
- $type =~ s/\s+/ /g;
- $type =~ s/\* (?=\*)/*/g;
- $type =~ s/\. \. \./.../g;
- $type =~ s/ ,/,/g;
- $types_seen{$type}++
- unless $type eq '...' or $type eq 'void' or $std_types{$type};
- $type;
-}
-
-my $need_opaque;
-
-sub assign_typemap_entry {
- my $type = shift;
- my $otype = $type;
- my $entry;
- if ($tmask and $type =~ /$tmask/) {
- print "Type $type matches -o mask\n" if $opt_d;
- $entry = (td_is_struct($type) ? "T_OPAQUE_STRUCT" : "T_PTROBJ");
- }
- elsif ($typedef_rex and $type =~ s/($typedef_rex)/$typedefs_pre{$1}/go) {
- $type = normalize_type $type;
- print "Type mutation via typedefs: $otype ==> $type\n" if $opt_d;
- $entry = assign_typemap_entry($type);
- }
- $entry ||= $typemap{$otype}
- || (td_is_struct($type) ? "T_OPAQUE_STRUCT" : "T_PTROBJ");
- $typemap{$otype} = $entry;
- $need_opaque = 1 if $entry eq "T_OPAQUE_STRUCT";
- return $entry;
-}
-
-for (@vdecls) {
- print_tievar_xsubs(\*XS, $_, $vdecl_hash{$_});
-}
-
-if ($opt_x) {
- for my $decl (@$fdecls_parsed) { print_decl(\*XS, $decl) }
- if ($opt_a) {
- while (my($name, $struct) = each %structs) {
- print_accessors(\*XS, $name, $struct);
- }
- }
-}
-
-close XS;
-
-if (%types_seen) {
- my $type;
- warn "Writing $ext$modpname/typemap\n";
- open TM, ">typemap" or die "Cannot open typemap file for write: $!";
-
- for $type (sort keys %types_seen) {
- my $entry = assign_typemap_entry $type;
- print TM $type, "\t" x (5 - int((length $type)/8)), "\t$entry\n"
- }
-
- print TM <<'EOP' if $need_opaque; # Older Perls do not have correct entry
-#############################################################################
-INPUT
-T_OPAQUE_STRUCT
- if (sv_derived_from($arg, \"${ntype}\")) {
- STRLEN len;
- char *s = SvPV((SV*)SvRV($arg), len);
-
- if (len != sizeof($var))
- croak(\"Size %d of packed data != expected %d\",
- len, sizeof($var));
- $var = *($type *)s;
- }
- else
- croak(\"$var is not of type ${ntype}\")
-#############################################################################
-OUTPUT
-T_OPAQUE_STRUCT
- sv_setref_pvn($arg, \"${ntype}\", (char *)&$var, sizeof($var));
-EOP
-
- close TM or die "Cannot close typemap file for write: $!";
-}
-
-} # if( ! $opt_X )
-
-warn "Writing $ext$modpname/Makefile.PL\n";
-open(PL, ">Makefile.PL") || die "Can't create $ext$modpname/Makefile.PL: $!\n";
-
-print PL <<END;
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-WriteMakefile(
- 'NAME' => '$module',
- 'VERSION_FROM' => '$modfname.pm', # finds \$VERSION
- 'PREREQ_PM' => {}, # e.g., Module::Name => 1.1
- (\$] >= 5.005 ? ## Add these new keywords supported since 5.005
- (ABSTRACT_FROM => '$modfname.pm', # retrieve abstract from module
- AUTHOR => '$author <$email>') : ()),
-END
-if (!$opt_X) { # print C stuff, unless XS is disabled
- $opt_F = '' unless defined $opt_F;
- my $I = (((glob '*.h') || (glob '*.hh')) ? '-I.' : '');
- my $Ihelp = ($I ? '-I. ' : '');
- my $Icomment = ($I ? '' : <<EOC);
- # Insert -I. if you add *.h files later:
-EOC
-
- print PL <<END;
- 'LIBS' => ['$extralibs'], # e.g., '-lm'
- 'DEFINE' => '$opt_F', # e.g., '-DHAVE_SOMETHING'
-$Icomment 'INC' => '$I', # e.g., '$Ihelp-I/usr/include/other'
-END
-
- my $C = grep $_ ne "$modfname.c", (glob '*.c'), (glob '*.cc'), (glob '*.C');
- my $Cpre = ($C ? '' : '# ');
- my $Ccomment = ($C ? '' : <<EOC);
- # Un-comment this if you add C files to link with later:
-EOC
-
- print PL <<END;
-$Ccomment $Cpre\'OBJECT' => '\$(O_FILES)', # link all the C files too
-END
-}
-print PL ");\n";
-close(PL) || die "Can't close $ext$modpname/Makefile.PL: $!\n";
-
-# Create a simple README since this is a CPAN requirement
-# and it doesnt hurt to have one
-warn "Writing $ext$modpname/README\n";
-open(RM, ">README") || die "Can't create $ext$modpname/README:$!\n";
-my $thisyear = (gmtime)[5] + 1900;
-my $rmhead = "$modpname version $TEMPLATE_VERSION";
-my $rmheadeq = "=" x length($rmhead);
-print RM <<_RMEND_;
-$rmhead
-$rmheadeq
-
-The README is used to introduce the module and provide instructions on
-how to install the module, any machine dependencies it may have (for
-example C compilers and installed libraries) and any other information
-that should be provided before the module is installed.
-
-A README file is required for CPAN modules since CPAN extracts the
-README file from a module distribution so that people browsing the
-archive can use it get an idea of the modules uses. It is usually a
-good idea to provide version information here so that people can
-decide whether fixes for the module are worth downloading.
-
-INSTALLATION
-
-To install this module type the following:
-
- perl Makefile.PL
- make
- make test
- make install
-
-DEPENDENCIES
-
-This module requires these other modules and libraries:
-
- blah blah blah
-
-COPYRIGHT AND LICENCE
-
-Put the correct copyright and licence information here.
-
-Copyright (C) $thisyear $author blah blah blah
-
-_RMEND_
-close(RM) || die "Can't close $ext$modpname/README: $!\n";
-
-warn "Writing $ext$modpname/test.pl\n";
-open(EX, ">test.pl") || die "Can't create $ext$modpname/test.pl: $!\n";
-print EX <<'_END_';
-# Before `make install' is performed this script should be runnable with
-# `make test'. After `make install' it should work as `perl test.pl'
-
-#########################
-
-# change 'tests => 1' to 'tests => last_test_to_print';
-
-use Test;
-BEGIN { plan tests => 1 };
-_END_
-print EX <<_END_;
-use $module;
-_END_
-print EX <<'_END_';
-ok(1); # If we made it this far, we're ok.
-
-#########################
-
-# Insert your test code below, the Test module is use()ed here so read
-# its man page ( perldoc Test ) for help writing this test script.
-
-_END_
-close(EX) || die "Can't close $ext$modpname/test.pl: $!\n";
-
-unless ($opt_C) {
- warn "Writing $ext$modpname/Changes\n";
- $" = ' ';
- open(EX, ">Changes") || die "Can't create $ext$modpname/Changes: $!\n";
- @ARGS = map {/[\s\"\'\`\$*?^|&<>\[\]\{\}\(\)]/ ? "'$_'" : $_} @ARGS;
- print EX <<EOP;
-Revision history for Perl extension $module.
-
-$TEMPLATE_VERSION @{[scalar localtime]}
-\t- original version; created by h2xs $H2XS_VERSION with options
-\t\t@ARGS
-
-EOP
- close(EX) || die "Can't close $ext$modpname/Changes: $!\n";
-}
-
-warn "Writing $ext$modpname/MANIFEST\n";
-open(MANI,'>MANIFEST') or die "Can't create MANIFEST: $!";
-my @files = <*>;
-if (!@files) {
- eval {opendir(D,'.');};
- unless ($@) { @files = readdir(D); closedir(D); }
-}
-if (!@files) { @files = map {chomp && $_} `ls`; }
-if ($^O eq 'VMS') {
- foreach (@files) {
- # Clip trailing '.' for portability -- non-VMS OSs don't expect it
- s%\.$%%;
- # Fix up for case-sensitive file systems
- s/$modfname/$modfname/i && next;
- $_ = "\U$_" if $_ eq 'manifest' or $_ eq 'changes';
- $_ = 'Makefile.PL' if $_ eq 'makefile.pl';
- }
-}
-print MANI join("\n",@files), "\n";
-close MANI;
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/utils/perlbug.PL b/contrib/perl5/utils/perlbug.PL
deleted file mode 100644
index 8a4a8dc..0000000
--- a/contrib/perl5/utils/perlbug.PL
+++ /dev/null
@@ -1,1224 +0,0 @@
-#!/usr/local/bin/perl
-# $FreeBSD$
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-use File::Spec::Functions;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-# $perlpath
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT, ">$file" or die "Can't create $file: $!";
-
-# extract patchlevel.h information
-
-open PATCH_LEVEL, "<" . catfile(updir, "patchlevel.h") or open PATCH_LEVEL, "<patchlevel.h"
- or die "Can't open patchlevel.h: $!";
-
-my $patchlevel_date = (stat PATCH_LEVEL)[9];
-
-while (<PATCH_LEVEL>) {
- last if $_ =~ /^\s*static\s+char.*?local_patches\[\]\s*=\s*{\s*$/;
-}
-
-my @patches;
-while (<PATCH_LEVEL>) {
- last if /^\s*}/;
- chomp;
- s/^\s+,?\s*"?//;
- s/"?\s*,?$//;
- s/(['\\])/\\$1/g;
- push @patches, $_ unless $_ eq 'NULL';
-}
-my $patch_desc = "'" . join("',\n '", @patches) . "'";
-my $patch_tags = join "", map /(\S+)/ ? "+$1 " : (), @patches;
-
-close(PATCH_LEVEL) or die "Error closing patchlevel.h: $!";
-
-# TO DO (prehaps): store/embed $Config::config_sh into perlbug. When perlbug is
-# used, compare $Config::config_sh with the stored version. If they differ then
-# append a list of individual differences to the bug report.
-
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-my $extract_version = sprintf("v%vd", $^V);
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-
-my \$config_tag1 = '$extract_version - $Config{cf_time}';
-
-my \$patchlevel_date = $patchlevel_date;
-my \$patch_tags = '$patch_tags';
-my \@patches = (
- $patch_desc
-);
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-use Config;
-use File::Spec; # keep perlbug Perl 5.005 compatible
-use Getopt::Std;
-use strict;
-
-sub paraprint;
-
-BEGIN {
- eval "use Mail::Send;";
- $::HaveSend = ($@ eq "");
- eval "use Mail::Util;";
- $::HaveUtil = ($@ eq "");
-};
-
-my $Version = "1.33";
-
-# Changed in 1.06 to skip Mail::Send and Mail::Util if not available.
-# Changed in 1.07 to see more sendmail execs, and added pipe output.
-# Changed in 1.08 to use correct address for sendmail.
-# Changed in 1.09 to close the REP file before calling it up in the editor.
-# Also removed some old comments duplicated elsewhere.
-# Changed in 1.10 to run under VMS without Mail::Send; also fixed
-# temp filename generation.
-# Changed in 1.11 to clean up some text and removed Mail::Send deactivator.
-# Changed in 1.12 to check for editor errors, make save/send distinction
-# clearer and add $ENV{REPLYTO}.
-# Changed in 1.13 to hopefully make it more difficult to accidentally
-# send mail
-# Changed in 1.14 to make the prompts a little more clear on providing
-# helpful information. Also let file read fail gracefully.
-# Changed in 1.15 to add warnings to stop people using perlbug for non-bugs.
-# Also report selected environment variables.
-# Changed in 1.16 to include @INC, and allow user to re-edit if no changes.
-# Changed in 1.17 Win32 support added. GSAR 97-04-12
-# Changed in 1.18 add '-ok' option for reporting build success. CFR 97-06-18
-# Changed in 1.19 '-ok' default not '-v'
-# add local patch information
-# warn on '-ok' if this is an old system; add '-okay'
-# Changed in 1.20 Added patchlevel.h reading and version/config checks
-# Changed in 1.21 Added '-nok' for reporting build failure DFD 98-05-05
-# Changed in 1.22 Heavy reformatting & minor bugfixes HVDS 98-05-10
-# Changed in 1.23 Restore -ok(ay): say 'success'; don't prompt
-# Changed in 1.24 Added '-F<file>' to save report HVDS 98-07-01
-# Changed in 1.25 Warn on failure to open save file. HVDS 98-07-12
-# Changed in 1.26 Don't require -t STDIN for -ok. HVDS 98-07-15
-# Changed in 1.27 Added Mac OS and File::Spec support CNANDOR 99-07-27
-# Changed in 1.28 Additional questions for Perlbugtron RFOLEY 20.03.2000
-# Changed in 1.29 Perlbug(tron): auto(-ok), short prompts RFOLEY 05-05-2000
-# Changed in 1.30 Added warnings on failure to open files MSTEVENS 13-07-2000
-# Changed in 1.31 Add checks on close().Fix my $var unless. TJENNESS 26-07-2000
-# Changed in 1.32 Use File::Spec->tmpdir TJENNESS 20-08-2000
-# Changed in 1.33 Don't require -t STDOUT for -ok.
-
-# TODO: - Allow the user to re-name the file on mail failure, and
-# make sure failure (transmission-wise) of Mail::Send is
-# accounted for.
-# - Test -b option
-
-my( $file, $usefile, $cc, $address, $perlbug, $testaddress, $filename,
- $subject, $from, $verbose, $ed, $outfile, $Is_MacOS, $category, $severity,
- $fh, $me, $Is_MSWin32, $Is_VMS, $msg, $body, $andcc, %REP, $ok);
-
-my $perl_version = $^V ? sprintf("v%vd", $^V) : $];
-
-my $config_tag2 = "$perl_version - $Config{cf_time}";
-
-Init();
-
-if ($::opt_h) { Help(); exit; }
-if ($::opt_d) { Dump(*STDOUT); exit; }
-if (!-t STDIN && !($ok and not $::opt_n)) {
- paraprint <<EOF;
-Please use perlbug interactively. If you want to
-include a file, you can use the -f switch.
-EOF
- die "\n";
-}
-
-Query();
-Edit() unless $usefile || ($ok and not $::opt_n);
-NowWhat();
-Send();
-
-exit;
-
-sub ask_for_alternatives { # (category|severity)
- my $name = shift;
- my %alts = (
- 'category' => {
- 'default' => 'core',
- 'ok' => 'install',
- 'opts' => [qw(core docs install library utilities)], # patch, notabug
- },
- 'severity' => {
- 'default' => 'low',
- 'ok' => 'none',
- 'opts' => [qw(critical high medium low wishlist none)], # zero
- },
- );
- die "Invalid alternative($name) requested\n" unless grep(/^$name$/, keys %alts);
- my $alt = "";
- if ($ok) {
- $alt = $alts{$name}{'ok'};
- } else {
- my @alts = @{$alts{$name}{'opts'}};
- paraprint <<EOF;
-Please pick a \u$name from the following:
-
- @alts
-
-EOF
- my $err = 0;
- do {
- if ($err++ > 5) {
- die "Invalid $name: aborting.\n";
- }
- print "Please enter a \u$name [$alts{$name}{'default'}]: ";
- $alt = <>;
- chomp $alt;
- if ($alt =~ /^\s*$/) {
- $alt = $alts{$name}{'default'};
- }
- } while !((($alt) = grep(/^$alt/i, @alts)));
- }
- lc $alt;
-}
-
-sub Init {
- # -------- Setup --------
-
- $Is_MSWin32 = $^O eq 'MSWin32';
- $Is_VMS = $^O eq 'VMS';
- $Is_MacOS = $^O eq 'MacOS';
-
- @ARGV = split m/\s+/,
- MacPerl::Ask('Provide command-line args here (-h for help):')
- if $Is_MacOS && $MacPerl::Version =~ /App/;
-
- if (!getopts("Adhva:s:b:f:F:r:e:SCc:to:n:")) { Help(); exit; };
-
- # This comment is needed to notify metaconfig that we are
- # using the $perladmin, $cf_by, and $cf_time definitions.
-
- # -------- Configuration ---------
-
- # perlbug address
- $perlbug = 'perlbug@perl.org';
-
- # Test address
- $testaddress = 'perlbug-test@perl.com';
-
- # Target address
- $address = $::opt_a || ($::opt_t ? $testaddress : $perlbug);
-
- # Users address, used in message and in Reply-To header
- $from = $::opt_r || "";
-
- # Include verbose configuration information
- $verbose = $::opt_v || 0;
-
- # Subject of bug-report message
- $subject = $::opt_s || "";
-
- # Send a file
- $usefile = ($::opt_f || 0);
-
- # File to send as report
- $file = $::opt_f || "";
-
- # File to output to
- $outfile = $::opt_F || "";
-
- # Body of report
- $body = $::opt_b || "";
-
- # Editor
- $ed = $::opt_e || $ENV{VISUAL} || $ENV{EDITOR} || $ENV{EDIT}
- || ($Is_VMS && "edit/tpu")
- || ($Is_MSWin32 && "notepad")
- || ($Is_MacOS && '')
- || "vi";
-
- # Not OK - provide build failure template by finessing OK report
- if ($::opt_n) {
- if (substr($::opt_n, 0, 2) eq 'ok' ) {
- $::opt_o = substr($::opt_n, 1);
- } else {
- Help();
- exit();
- }
- }
-
- # OK - send "OK" report for build on this system
- $ok = 0;
- if ($::opt_o) {
- if ($::opt_o eq 'k' or $::opt_o eq 'kay') {
- my $age = time - $patchlevel_date;
- if ($::opt_o eq 'k' and $age > 60 * 24 * 60 * 60 ) {
- my $date = localtime $patchlevel_date;
- print <<"EOF";
-"perlbug -ok" and "perlbug -nok" do not report on Perl versions which
-are more than 60 days old. This Perl version was constructed on
-$date. If you really want to report this, use
-"perlbug -okay" or "perlbug -nokay".
-EOF
- exit();
- }
- # force these options
- unless ($::opt_n) {
- $::opt_S = 1; # don't prompt for send
- $::opt_b = 1; # we have a body
- $body = "Perl reported to build OK on this system.\n";
- }
- $::opt_C = 1; # don't send a copy to the local admin
- $::opt_s = 1; # we have a subject line
- $subject = ($::opt_n ? 'Not ' : '')
- . "OK: perl $perl_version ${patch_tags}on"
- ." $::Config{'archname'} $::Config{'osvers'} $subject";
- $ok = 1;
- } else {
- Help();
- exit();
- }
- }
-
- # Possible administrator addresses, in order of confidence
- # (Note that cf_email is not mentioned to metaconfig, since
- # we don't really want it. We'll just take it if we have to.)
- #
- # This has to be after the $ok stuff above because of the way
- # that $::opt_C is forced.
- $cc = $::opt_C ? "" : (
- $::opt_c || $::Config{'perladmin'}
- || $::Config{'cf_email'} || $::Config{'cf_by'}
- );
-
- # My username
- $me = $Is_MSWin32 ? $ENV{'USERNAME'}
- : $^O eq 'os2' ? $ENV{'USER'} || $ENV{'LOGNAME'}
- : $Is_MacOS ? $ENV{'USER'}
- : eval { getpwuid($<) }; # May be missing
-
- $from = $::Config{'cf_email'}
- if !$from && $::Config{'cf_email'} && $::Config{'cf_by'} && $me &&
- ($me eq $::Config{'cf_by'});
-} # sub Init
-
-sub Query {
- # Explain what perlbug is
- unless ($ok) {
- paraprint <<EOF;
-This program provides an easy way to create a message reporting a bug
-in perl, and e-mail it to $address. It is *NOT* intended for
-sending test messages or simply verifying that perl works, *NOR* is it
-intended for reporting bugs in third-party perl modules. It is *ONLY*
-a means of reporting verifiable problems with the core perl distribution,
-and any solutions to such problems, to the people who maintain perl.
-
-If you're just looking for help with perl, try posting to the Usenet
-newsgroup comp.lang.perl.misc. If you're looking for help with using
-perl with CGI, try posting to comp.infosystems.www.programming.cgi.
-EOF
- }
-
- # Prompt for subject of message, if needed
- unless ($subject) {
- paraprint <<EOF;
-First of all, please provide a subject for the
-message. It should be a concise description of
-the bug or problem. "perl bug" or "perl problem"
-is not a concise description.
-EOF
- print "Subject: ";
- $subject = <>;
-
- my $err = 0;
- while ($subject !~ /\S/) {
- print "\nPlease enter a subject: ";
- $subject = <>;
- if ($err++ > 5) {
- die "Aborting.\n";
- }
- }
- chop $subject;
- }
-
- # Prompt for return address, if needed
- unless ($from) {
- # Try and guess return address
- my $guess;
-
- $guess = $ENV{'REPLY-TO'} || $ENV{'REPLYTO'} || '';
- if ($Is_MacOS) {
- require Mac::InternetConfig;
- $guess = $Mac::InternetConfig::InternetConfig{
- Mac::InternetConfig::kICEmail()
- };
- }
-
- unless ($guess) {
- my $domain;
- if ($::HaveUtil) {
- $domain = Mail::Util::maildomain();
- } elsif ($Is_MSWin32) {
- $domain = $ENV{'USERDOMAIN'};
- } else {
- require Sys::Hostname;
- $domain = Sys::Hostname::hostname();
- }
- if ($domain) {
- if ($Is_VMS && !$::Config{'d_socket'}) {
- $guess = "$domain\:\:$me";
- } else {
- $guess = "$me\@$domain" if $domain;
- }
- }
- }
-
- if ($guess) {
- unless ($ok) {
- paraprint <<EOF;
-Your e-mail address will be useful if you need to be contacted. If the
-default shown is not your full internet e-mail address, please correct it.
-EOF
- }
- } else {
- paraprint <<EOF;
-So that you may be contacted if necessary, please enter
-your full internet e-mail address here.
-EOF
- }
-
- if ($ok && $guess) {
- # use it
- $from = $guess;
- } else {
- # verify it
- print "Your address [$guess]: ";
- $from = <>;
- chop $from;
- $from = $guess if $from eq '';
- }
- }
-
- if ($from eq $cc or $me eq $cc) {
- # Try not to copy ourselves
- $cc = "yourself";
- }
-
- # Prompt for administrator address, unless an override was given
- if( !$::opt_C and !$::opt_c ) {
- paraprint <<EOF;
-A copy of this report can be sent to your local
-perl administrator. If the address is wrong, please
-correct it, or enter 'none' or 'yourself' to not send
-a copy.
-EOF
- print "Local perl administrator [$cc]: ";
- my $entry = scalar <>;
- chop $entry;
-
- if ($entry ne "") {
- $cc = $entry;
- $cc = '' if $me eq $cc;
- }
- }
-
- $cc = '' if $cc =~ /^(none|yourself|me|myself|ourselves)$/i;
- $andcc = " and $cc" if $cc;
-
- # Prompt for editor, if no override is given
-editor:
- unless ($::opt_e || $::opt_f || $::opt_b) {
- paraprint <<EOF;
-Now you need to supply the bug report. Try to make
-the report concise but descriptive. Include any
-relevant detail. If you are reporting something
-that does not work as you think it should, please
-try to include example of both the actual
-result, and what you expected.
-
-Some information about your local
-perl configuration will automatically be included
-at the end of the report. If you are using any
-unusual version of perl, please try and confirm
-exactly which versions are relevant.
-
-You will probably want to use an editor to enter
-the report. If "$ed" is the editor you want
-to use, then just press Enter, otherwise type in
-the name of the editor you would like to use.
-
-If you would like to use a prepared file, type
-"file", and you will be asked for the filename.
-EOF
- print "Editor [$ed]: ";
- my $entry =scalar <>;
- chop $entry;
-
- $usefile = 0;
- if ($entry eq "file") {
- $usefile = 1;
- } elsif ($entry ne "") {
- $ed = $entry;
- }
- }
-
- # Prompt for category of bug
- $category ||= ask_for_alternatives('category');
-
- # Prompt for severity of bug
- $severity ||= ask_for_alternatives('severity');
-
- # Generate scratch file to edit report in
- $filename = filename();
-
- # Prompt for file to read report from, if needed
- if ($usefile and !$file) {
-filename:
- paraprint <<EOF;
-What is the name of the file that contains your report?
-EOF
- print "Filename: ";
- my $entry = scalar <>;
- chop $entry;
-
- if ($entry eq "") {
- paraprint <<EOF;
-No filename? I'll let you go back and choose an editor again.
-EOF
- goto editor;
- }
-
- unless (-f $entry and -r $entry) {
- paraprint <<EOF;
-I'm sorry, but I can't read from `$entry'. Maybe you mistyped the name of
-the file? If you don't want to send a file, just enter a blank line and you
-can get back to the editor selection.
-EOF
- goto filename;
- }
- $file = $entry;
- }
-
- # Generate report
- open(REP,">$filename") or die "Unable to create report file `$filename': $!\n";
- my $reptype = !$ok ? "bug" : $::opt_n ? "build failure" : "success";
-
- print REP <<EOF;
-This is a $reptype report for perl from $from,
-generated with the help of perlbug $Version running under perl $perl_version.
-
-EOF
-
- if ($body) {
- print REP $body;
- } elsif ($usefile) {
- open(F, "<$file")
- or die "Unable to read report file from `$file': $!\n";
- while (<F>) {
- print REP $_
- }
- close(F) or die "Error closing `$file': $!";
- } else {
- print REP <<EOF;
-
------------------------------------------------------------------
-[Please enter your report here]
-
-
-
-[Please do not change anything below this line]
------------------------------------------------------------------
-EOF
- }
- Dump(*REP);
- close(REP) or die "Error closing report file: $!";
-
- # read in the report template once so that
- # we can track whether the user does any editing.
- # yes, *all* whitespace is ignored.
- open(REP, "<$filename") or die "Unable to open report file `$filename': $!\n";
- while (<REP>) {
- s/\s+//g;
- $REP{$_}++;
- }
- close(REP) or die "Error closing report file `$filename': $!";
-} # sub Query
-
-sub Dump {
- local(*OUT) = @_;
-
- print OUT <<EFF;
----
-Flags:
- category=$category
- severity=$severity
-EFF
- if ($::opt_A) {
- print OUT <<EFF;
- ack=no
-EFF
- }
- print OUT <<EFF;
----
-EFF
- print OUT "This perlbug was built using Perl $config_tag1\n",
- "It is being executed now by Perl $config_tag2.\n\n"
- if $config_tag2 ne $config_tag1;
-
- print OUT <<EOF;
-Site configuration information for perl $perl_version:
-
-EOF
- if ($::Config{cf_by} and $::Config{cf_time}) {
- print OUT "Configured by $::Config{cf_by} at $::Config{cf_time}.\n\n";
- }
- print OUT Config::myconfig;
-
- if (@patches) {
- print OUT join "\n ", "Locally applied patches:", @patches;
- print OUT "\n";
- };
-
- print OUT <<EOF;
-
----
-\@INC for perl $perl_version:
-EOF
- for my $i (@INC) {
- print OUT " $i\n";
- }
-
- print OUT <<EOF;
-
----
-Environment for perl $perl_version:
-EOF
- my @env =
- qw(PATH LD_LIBRARY_PATH LANG PERL_BADLANG SHELL HOME LOGDIR LANGUAGE);
- push @env, $Config{ldlibpthname} if $Config{ldlibpthname} ne '';
- push @env, grep /^(?:PERL|LC_|LANG)/, keys %ENV;
- my %env;
- @env{@env} = @env;
- for my $env (sort keys %env) {
- print OUT " $env",
- exists $ENV{$env} ? "=$ENV{$env}" : ' (unset)',
- "\n";
- }
- if ($verbose) {
- print OUT "\nComplete configuration data for perl $perl_version:\n\n";
- my $value;
- foreach (sort keys %::Config) {
- $value = $::Config{$_};
- $value =~ s/'/\\'/g;
- print OUT "$_='$value'\n";
- }
- }
-} # sub Dump
-
-sub Edit {
- # Edit the report
- if ($usefile || $body) {
- paraprint <<EOF;
-Please make sure that the name of the editor you want to use is correct.
-EOF
- print "Editor [$ed]: ";
- my $entry =scalar <>;
- chop $entry;
- $ed = $entry unless $entry eq '';
- }
-
-tryagain:
- my $sts;
- $sts = system("$ed $filename") unless $Is_MacOS;
- if ($Is_MacOS) {
- require ExtUtils::MakeMaker;
- ExtUtils::MM_MacOS::launch_file($filename);
- paraprint <<EOF;
-Press Enter when done.
-EOF
- scalar <>;
- }
- if ($sts) {
- paraprint <<EOF;
-The editor you chose (`$ed') could apparently not be run!
-Did you mistype the name of your editor? If so, please
-correct it here, otherwise just press Enter.
-EOF
- print "Editor [$ed]: ";
- my $entry =scalar <>;
- chop $entry;
-
- if ($entry ne "") {
- $ed = $entry;
- goto tryagain;
- } else {
- paraprint <<EOF;
-You may want to save your report to a file, so you can edit and mail it
-yourself.
-EOF
- }
- }
-
- return if ($ok and not $::opt_n) || $body;
- # Check that we have a report that has some, eh, report in it.
- my $unseen = 0;
-
- open(REP, "<$filename") or die "Couldn't open `$filename': $!\n";
- # a strange way to check whether any significant editing
- # have been done: check whether any new non-empty lines
- # have been added. Yes, the below code ignores *any* space
- # in *any* line.
- while (<REP>) {
- s/\s+//g;
- $unseen++ if $_ ne '' and not exists $REP{$_};
- }
-
- while ($unseen == 0) {
- paraprint <<EOF;
-I am sorry but it looks like you did not report anything.
-EOF
- print "Action (Retry Edit/Cancel) ";
- my ($action) = scalar(<>);
- if ($action =~ /^[re]/i) { # <R>etry <E>dit
- goto tryagain;
- } elsif ($action =~ /^[cq]/i) { # <C>ancel, <Q>uit
- Cancel();
- }
- }
-} # sub Edit
-
-sub Cancel {
- 1 while unlink($filename); # remove all versions under VMS
- print "\nCancelling.\n";
- exit(0);
-}
-
-sub NowWhat {
- # Report is done, prompt for further action
- if( !$::opt_S ) {
- while(1) {
- paraprint <<EOF;
-Now that you have completed your report, would you like to send
-the message to $address$andcc, display the message on
-the screen, re-edit it, or cancel without sending anything?
-You may also save the message as a file to mail at another time.
-EOF
- retry:
- print "Action (Send/Display/Edit/Cancel/Save to File): ";
- my $action = scalar <>;
- chop $action;
-
- if ($action =~ /^(f|sa)/i) { # <F>ile/<Sa>ve
- print "\n\nName of file to save message in [perlbug.rep]: ";
- my $file = scalar <>;
- chop $file;
- $file = "perlbug.rep" if $file eq "";
-
- unless (open(FILE, ">$file")) {
- print "\nError opening $file: $!\n\n";
- goto retry;
- }
- open(REP, "<$filename") or die "Couldn't open file `$filename': $!\n";
- print FILE "To: $address\nSubject: $subject\n";
- print FILE "Cc: $cc\n" if $cc;
- print FILE "Reply-To: $from\n" if $from;
- print FILE "\n";
- while (<REP>) { print FILE }
- close(REP) or die "Error closing report file `$filename': $!";
- close(FILE) or die "Error closing $file: $!";
-
- print "\nMessage saved in `$file'.\n";
- exit;
- } elsif ($action =~ /^(d|l|sh)/i ) { # <D>isplay, <L>ist, <Sh>ow
- # Display the message
- open(REP, "<$filename") or die "Couldn't open file `$filename': $!\n";
- while (<REP>) { print $_ }
- close(REP) or die "Error closing report file `$filename': $!";
- } elsif ($action =~ /^se/i) { # <S>end
- # Send the message
- print "Are you certain you want to send this message?\n"
- . 'Please type "yes" if you are: ';
- my $reply = scalar <STDIN>;
- chop $reply;
- if ($reply eq "yes") {
- last;
- } else {
- paraprint <<EOF;
-That wasn't a clear "yes", so I won't send your message. If you are sure
-your message should be sent, type in "yes" (without the quotes) at the
-confirmation prompt.
-EOF
- }
- } elsif ($action =~ /^[er]/i) { # <E>dit, <R>e-edit
- # edit the message
- Edit();
- } elsif ($action =~ /^[qc]/i) { # <C>ancel, <Q>uit
- Cancel();
- } elsif ($action =~ /^s/i) {
- paraprint <<EOF;
-I'm sorry, but I didn't understand that. Please type "send" or "save".
-EOF
- }
- }
- }
-} # sub NowWhat
-
-sub Send {
- # Message has been accepted for transmission -- Send the message
- if ($outfile) {
- open SENDMAIL, ">$outfile" or die "Couldn't open '$outfile': $!\n";
- goto sendout;
- }
- if ($::HaveSend) {
- $msg = new Mail::Send Subject => $subject, To => $address;
- $msg->cc($cc) if $cc;
- $msg->add("Reply-To",$from) if $from;
-
- $fh = $msg->open;
- open(REP, "<$filename") or die "Couldn't open `$filename': $!\n";
- while (<REP>) { print $fh $_ }
- close(REP) or die "Error closing $filename: $!";
- $fh->close;
-
- print "\nMessage sent.\n";
- } elsif ($Is_VMS) {
- if ( ($address =~ /@/ and $address !~ /^\w+%"/) or
- ($cc =~ /@/ and $cc !~ /^\w+%"/) ) {
- my $prefix;
- foreach (qw[ IN MX SMTP UCX PONY WINS ], '') {
- $prefix = "$_%", last if $ENV{"MAIL\$PROTOCOL_$_"};
- }
- $address = qq[${prefix}"$address"] unless $address =~ /^\w+%"/;
- $cc = qq[${prefix}"$cc"] unless !$cc || $cc =~ /^\w+%"/;
- }
- $subject =~ s/"/""/g; $address =~ s/"/""/g; $cc =~ s/"/""/g;
- my $sts = system(qq[mail/Subject="$subject" $filename. "$address","$cc"]);
- if ($sts) {
- die <<EOF;
-Can't spawn off mail
- (leaving bug report in $filename): $sts
-EOF
- }
- } else {
- my $sendmail = "";
- for (qw(/usr/lib/sendmail /usr/sbin/sendmail /usr/ucblib/sendmail)) {
- $sendmail = $_, last if -e $_;
- }
- if ($^O eq 'os2' and $sendmail eq "") {
- my $path = $ENV{PATH};
- $path =~ s:\\:/: ;
- my @path = split /$Config{'path_sep'}/, $path;
- for (@path) {
- $sendmail = "$_/sendmail", last if -e "$_/sendmail";
- $sendmail = "$_/sendmail.exe", last if -e "$_/sendmail.exe";
- }
- }
-
- paraprint(<<"EOF"), die "\n" if $sendmail eq "";
-I am terribly sorry, but I cannot find sendmail, or a close equivalent, and
-the perl package Mail::Send has not been installed, so I can't send your bug
-report. We apologize for the inconvenience.
-
-So you may attempt to find some way of sending your message, it has
-been left in the file `$filename'.
-EOF
- open(SENDMAIL, "|$sendmail -t -oi") || die "'|$sendmail -t -oi' failed: $!";
-sendout:
- print SENDMAIL "To: $address\n";
- print SENDMAIL "Subject: $subject\n";
- print SENDMAIL "Cc: $cc\n" if $cc;
- print SENDMAIL "Reply-To: $from\n" if $from;
- print SENDMAIL "\n\n";
- open(REP, "<$filename") or die "Couldn't open `$filename': $!\n";
- while (<REP>) { print SENDMAIL $_ }
- close(REP) or die "Error closing $filename: $!";
-
- if (close(SENDMAIL)) {
- printf "\nMessage %s.\n", $outfile ? "saved" : "sent";
- } else {
- warn "\nSendmail returned status '", $? >> 8, "'\n";
- }
- }
- 1 while unlink($filename); # remove all versions under VMS
-} # sub Send
-
-sub Help {
- print <<EOF;
-
-A program to help generate bug reports about perl5, and mail them.
-It is designed to be used interactively. Normally no arguments will
-be needed.
-
-Usage:
-$0 [-v] [-a address] [-s subject] [-b body | -f inpufile ] [ -F outputfile ]
- [-r returnaddress] [-e editor] [-c adminaddress | -C] [-S] [-t] [-h]
-$0 [-v] [-r returnaddress] [-A] [-ok | -okay | -nok | -nokay]
-
-Simplest usage: run "$0", and follow the prompts.
-
-Options:
-
- -v Include Verbose configuration data in the report
- -f File containing the body of the report. Use this to
- quickly send a prepared message.
- -F File to output the resulting mail message to, instead of mailing.
- -S Send without asking for confirmation.
- -a Address to send the report to. Defaults to `$address'.
- -c Address to send copy of report to. Defaults to `$cc'.
- -C Don't send copy to administrator.
- -s Subject to include with the message. You will be prompted
- if you don't supply one on the command line.
- -b Body of the report. If not included on the command line, or
- in a file with -f, you will get a chance to edit the message.
- -r Your return address. The program will ask you to confirm
- this if you don't give it here.
- -e Editor to use.
- -t Test mode. The target address defaults to `$testaddress'.
- -d Data mode. This prints out your configuration data, without mailing
- anything. You can use this with -v to get more complete data.
- -A Don't send a bug received acknowledgement to the return address.
- -ok Report successful build on this system to perl porters
- (use alone or with -v). Only use -ok if *everything* was ok:
- if there were *any* problems at all, use -nok.
- -okay As -ok but allow report from old builds.
- -nok Report unsuccessful build on this system to perl porters
- (use alone or with -v). You must describe what went wrong
- in the body of the report which you will be asked to edit.
- -nokay As -nok but allow report from old builds.
- -h Print this help message.
-
-EOF
-}
-
-sub filename {
- my $dir = File::Spec->tmpdir();
- $filename = "bugrep0$$";
- $filename++ while -e File::Spec->catfile($dir, $filename);
- $filename = File::Spec->catfile($dir, $filename);
-}
-
-sub paraprint {
- my @paragraphs = split /\n{2,}/, "@_";
- print "\n\n";
- for (@paragraphs) { # implicit local $_
- s/(\S)\s*\n/$1 /g;
- write;
- print "\n";
- }
-}
-
-format STDOUT =
-^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
-$_
-.
-
-__END__
-
-=head1 NAME
-
-perlbug - how to submit bug reports on Perl
-
-=head1 SYNOPSIS
-
-B<perlbug> S<[ B<-v> ]> S<[ B<-a> I<address> ]> S<[ B<-s> I<subject> ]>
-S<[ B<-b> I<body> | B<-f> I<inputfile> ]> S<[ B<-F> I<outputfile> ]>
-S<[ B<-r> I<returnaddress> ]>
-S<[ B<-e> I<editor> ]> S<[ B<-c> I<adminaddress> | B<-C> ]>
-S<[ B<-S> ]> S<[ B<-t> ]> S<[ B<-d> ]> S<[ B<-A> ]> S<[ B<-h> ]>
-
-B<perlbug> S<[ B<-v> ]> S<[ B<-r> I<returnaddress> ]>
- S<[ B<-A> ]> S<[ B<-ok> | B<-okay> | B<-nok> | B<-nokay> ]>
-
-=head1 DESCRIPTION
-
-A program to help generate bug reports about perl or the modules that
-come with it, and mail them.
-
-If you have found a bug with a non-standard port (one that was not part
-of the I<standard distribution>), a binary distribution, or a
-non-standard module (such as Tk, CGI, etc), then please see the
-documentation that came with that distribution to determine the correct
-place to report bugs.
-
-C<perlbug> is designed to be used interactively. Normally no arguments
-will be needed. Simply run it, and follow the prompts.
-
-If you are unable to run B<perlbug> (most likely because you don't have
-a working setup to send mail that perlbug recognizes), you may have to
-compose your own report, and email it to B<perlbug@perl.org>. You might
-find the B<-d> option useful to get summary information in that case.
-
-In any case, when reporting a bug, please make sure you have run through
-this checklist:
-
-=over 4
-
-=item What version of Perl you are running?
-
-Type C<perl -v> at the command line to find out.
-
-=item Are you running the latest released version of perl?
-
-Look at http://www.perl.com/ to find out. If it is not the latest
-released version, get that one and see whether your bug has been
-fixed. Note that bug reports about old versions of Perl, especially
-those prior to the 5.0 release, are likely to fall upon deaf ears.
-You are on your own if you continue to use perl1 .. perl4.
-
-=item Are you sure what you have is a bug?
-
-A significant number of the bug reports we get turn out to be documented
-features in Perl. Make sure the behavior you are witnessing doesn't fall
-under that category, by glancing through the documentation that comes
-with Perl (we'll admit this is no mean task, given the sheer volume of
-it all, but at least have a look at the sections that I<seem> relevant).
-
-Be aware of the familiar traps that perl programmers of various hues
-fall into. See L<perltrap>.
-
-Check in L<perldiag> to see what any Perl error message(s) mean.
-If message isn't in perldiag, it probably isn't generated by Perl.
-Consult your operating system documentation instead.
-
-If you are on a non-UNIX platform check also L<perlport>, as some
-features may be unimplemented or work differently.
-
-Try to study the problem under the Perl debugger, if necessary.
-See L<perldebug>.
-
-=item Do you have a proper test case?
-
-The easier it is to reproduce your bug, the more likely it will be
-fixed, because if no one can duplicate the problem, no one can fix it.
-A good test case has most of these attributes: fewest possible number
-of lines; few dependencies on external commands, modules, or
-libraries; runs on most platforms unimpeded; and is self-documenting.
-
-A good test case is almost always a good candidate to be on the perl
-test suite. If you have the time, consider making your test case so
-that it will readily fit into the standard test suite.
-
-Remember also to include the B<exact> error messages, if any.
-"Perl complained something" is not an exact error message.
-
-If you get a core dump (or equivalent), you may use a debugger
-(B<dbx>, B<gdb>, etc) to produce a stack trace to include in the bug
-report. NOTE: unless your Perl has been compiled with debug info
-(often B<-g>), the stack trace is likely to be somewhat hard to use
-because it will most probably contain only the function names and not
-their arguments. If possible, recompile your Perl with debug info and
-reproduce the dump and the stack trace.
-
-=item Can you describe the bug in plain English?
-
-The easier it is to understand a reproducible bug, the more likely it
-will be fixed. Anything you can provide by way of insight into the
-problem helps a great deal. In other words, try to analyze the
-problem (to the extent you can) and report your discoveries.
-
-=item Can you fix the bug yourself?
-
-A bug report which I<includes a patch to fix it> will almost
-definitely be fixed. Use the C<diff> program to generate your patches
-(C<diff> is being maintained by the GNU folks as part of the B<diffutils>
-package, so you should be able to get it from any of the GNU software
-repositories). If you do submit a patch, the cool-dude counter at
-perlbug@perl.org will register you as a savior of the world. Your
-patch may be returned with requests for changes, or requests for more
-detailed explanations about your fix.
-
-Here are some clues for creating quality patches: Use the B<-c> or
-B<-u> switches to the diff program (to create a so-called context or
-unified diff). Make sure the patch is not reversed (the first
-argument to diff is typically the original file, the second argument
-your changed file). Make sure you test your patch by applying it with
-the C<patch> program before you send it on its way. Try to follow the
-same style as the code you are trying to patch. Make sure your patch
-really does work (C<make test>, if the thing you're patching supports
-it).
-
-=item Can you use C<perlbug> to submit the report?
-
-B<perlbug> will, amongst other things, ensure your report includes
-crucial information about your version of perl. If C<perlbug> is unable
-to mail your report after you have typed it in, you may have to compose
-the message yourself, add the output produced by C<perlbug -d> and email
-it to B<perlbug@perl.org>. If, for some reason, you cannot run
-C<perlbug> at all on your system, be sure to include the entire output
-produced by running C<perl -V> (note the uppercase V).
-
-Whether you use C<perlbug> or send the email manually, please make
-your Subject line informative. "a bug" not informative. Neither is
-"perl crashes" nor "HELP!!!". These don't help.
-A compact description of what's wrong is fine.
-
-=back
-
-Having done your bit, please be prepared to wait, to be told the bug
-is in your code, or even to get no reply at all. The Perl maintainers
-are busy folks, so if your problem is a small one or if it is difficult
-to understand or already known, they may not respond with a personal reply.
-If it is important to you that your bug be fixed, do monitor the
-C<Changes> file in any development releases since the time you submitted
-the bug, and encourage the maintainers with kind words (but never any
-flames!). Feel free to resend your bug report if the next released
-version of perl comes out and your bug is still present.
-
-=head1 OPTIONS
-
-=over 8
-
-=item B<-a>
-
-Address to send the report to. Defaults to `perlbug@perl.org'.
-
-=item B<-A>
-
-Don't send a bug received acknowledgement to the reply address.
-Generally it is only a sensible to use this option if you are a
-perl maintainer actively watching perl porters for your message to
-arrive.
-
-=item B<-b>
-
-Body of the report. If not included on the command line, or
-in a file with B<-f>, you will get a chance to edit the message.
-
-=item B<-C>
-
-Don't send copy to administrator.
-
-=item B<-c>
-
-Address to send copy of report to. Defaults to the address of the
-local perl administrator (recorded when perl was built).
-
-=item B<-d>
-
-Data mode (the default if you redirect or pipe output). This prints out
-your configuration data, without mailing anything. You can use this
-with B<-v> to get more complete data.
-
-=item B<-e>
-
-Editor to use.
-
-=item B<-f>
-
-File containing the body of the report. Use this to quickly send a
-prepared message.
-
-=item B<-F>
-
-File to output the results to instead of sending as an email. Useful
-particularly when running perlbug on a machine with no direct internet
-connection.
-
-=item B<-h>
-
-Prints a brief summary of the options.
-
-=item B<-ok>
-
-Report successful build on this system to perl porters. Forces B<-S>
-and B<-C>. Forces and supplies values for B<-s> and B<-b>. Only
-prompts for a return address if it cannot guess it (for use with
-B<make>). Honors return address specified with B<-r>. You can use this
-with B<-v> to get more complete data. Only makes a report if this
-system is less than 60 days old.
-
-=item B<-okay>
-
-As B<-ok> except it will report on older systems.
-
-=item B<-nok>
-
-Report unsuccessful build on this system. Forces B<-C>. Forces and
-supplies a value for B<-s>, then requires you to edit the report
-and say what went wrong. Alternatively, a prepared report may be
-supplied using B<-f>. Only prompts for a return address if it
-cannot guess it (for use with B<make>). Honors return address
-specified with B<-r>. You can use this with B<-v> to get more
-complete data. Only makes a report if this system is less than 60
-days old.
-
-=item B<-nokay>
-
-As B<-nok> except it will report on older systems.
-
-=item B<-r>
-
-Your return address. The program will ask you to confirm its default
-if you don't use this option.
-
-=item B<-S>
-
-Send without asking for confirmation.
-
-=item B<-s>
-
-Subject to include with the message. You will be prompted if you don't
-supply one on the command line.
-
-=item B<-t>
-
-Test mode. The target address defaults to `perlbug-test@perl.com'.
-
-=item B<-v>
-
-Include verbose configuration data in the report.
-
-=back
-
-=head1 AUTHORS
-
-Kenneth Albanowski (E<lt>kjahds@kjahds.comE<gt>), subsequently I<doc>tored
-by Gurusamy Sarathy (E<lt>gsar@activestate.comE<gt>), Tom Christiansen
-(E<lt>tchrist@perl.comE<gt>), Nathan Torkington (E<lt>gnat@frii.comE<gt>),
-Charles F. Randall (E<lt>cfr@pobox.comE<gt>), Mike Guy
-(E<lt>mjtg@cam.a.ukE<gt>), Dominic Dunlop (E<lt>domo@computer.orgE<gt>),
-Hugo van der Sanden (E<lt>hv@crypt0.demon.co.ukE<gt>),
-Jarkko Hietaniemi (E<lt>jhi@iki.fiE<gt>), Chris Nandor
-(E<lt>pudge@pobox.comE<gt>), Jon Orwant (E<lt>orwant@media.mit.eduE<gt>,
-and Richard Foley (E<lt>richard@rfi.netE<gt>).
-
-=head1 SEE ALSO
-
-perl(1), perldebug(1), perldiag(1), perlport(1), perltrap(1),
-diff(1), patch(1), dbx(1), gdb(1)
-
-=head1 BUGS
-
-None known (guess what must have been used to report them?)
-
-=cut
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/utils/perlcc.PL b/contrib/perl5/utils/perlcc.PL
deleted file mode 100644
index 6304555..0000000
--- a/contrib/perl5/utils/perlcc.PL
+++ /dev/null
@@ -1,667 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use File::Spec;
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-# Wanted: $archlibexp
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
---\$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-# Version 2.0, Simon Cozens, Thu Mar 30 17:52:45 JST 2000
-# Version 2.01, Tom Christiansen, Thu Mar 30 08:25:14 MST 2000
-# Version 2.02, Simon Cozens, Sun Apr 16 01:53:36 JST 2000
-# Version 2.03, Edward Peschko, Mon Feb 26 12:04:17 PST 2001
-
-use strict;
-use warnings;
-use v5.6.0;
-
-use FileHandle;
-use Config;
-use Fcntl qw(:DEFAULT :flock);
-use File::Temp qw(tempfile);
-use Cwd;
-our $VERSION = 2.03;
-$| = 1;
-
-$SIG{INT} = sub { exit(); }; # exit gracefully and clean up after ourselves.
-
-use subs qw{
- cc_harness check_read check_write checkopts_byte choose_backend
- compile_byte compile_cstyle compile_module generate_code
- grab_stash parse_argv sanity_check vprint yclept spawnit
-};
-sub opt(*); # imal quoting
-
-our ($Options, $BinPerl, $Backend);
-our ($Input => $Output);
-our ($logfh);
-our ($cfile);
-
-# eval { main(); 1 } or die;
-
-main();
-
-sub main {
- parse_argv();
- check_write($Output);
- choose_backend();
- generate_code();
- run_code();
- _die("XXX: Not reached?");
-}
-
-#######################################################################
-
-sub choose_backend {
- # Choose the backend.
- $Backend = 'C';
- if (opt(B)) {
- checkopts_byte();
- $Backend = 'Bytecode';
- }
- if (opt(S) && opt(c)) {
- # die "$0: Do you want me to compile this or not?\n";
- delete $Options->{S};
- }
- $Backend = 'CC' if opt(O);
-}
-
-
-sub generate_code {
-
- vprint 0, "Compiling $Input";
-
- $BinPerl = yclept(); # Calling convention for perl.
-
- if (opt(shared)) {
- compile_module();
- } else {
- if ($Backend eq 'Bytecode') {
- compile_byte();
- } else {
- compile_cstyle();
- }
- }
- exit(0) if (!opt('r'));
-}
-
-sub run_code {
- vprint 0, "Running code";
- run("$Output @ARGV");
- exit(0);
-}
-
-# usage: vprint [level] msg args
-sub vprint {
- my $level;
- if (@_ == 1) {
- $level = 1;
- } elsif ($_[0] =~ /^\d$/) {
- $level = shift;
- } else {
- # well, they forgot to use a number; means >0
- $level = 0;
- }
- my $msg = "@_";
- $msg .= "\n" unless substr($msg, -1) eq "\n";
- if (opt(v) > $level)
- {
- print "$0: $msg" if !opt('log');
- print $logfh "$0: $msg" if opt('log');
- }
-}
-
-sub parse_argv {
-
- use Getopt::Long;
-# Getopt::Long::Configure("bundling"); turned off. this is silly because
-# it doesn't allow for long switches.
- Getopt::Long::Configure("no_ignore_case");
-
- # no difference in exists and defined for %ENV; also, a "0"
- # argument or a "" would not help cc, so skip
- unshift @ARGV, split ' ', $ENV{PERLCC_OPTS} if $ENV{PERLCC_OPTS};
-
- $Options = {};
- Getopt::Long::GetOptions( $Options,
- 'L:s', # lib directory
- 'I:s', # include directories (FOR C, NOT FOR PERL)
- 'o:s', # Output executable
- 'v:i', # Verbosity level
- 'e:s', # One-liner
- 'r', # run resulting executable
- 'B', # Byte compiler backend
- 'O', # Optimised C backend
- 'c', # Compile only
- 'h', # Help me
- 'S', # Dump C files
- 'r', # run the resulting executable
- 'static', # Dirty hack to enable -shared/-static
- 'shared', # Create a shared library (--shared for compat.)
- 'log:s' # where to log compilation process information
- );
-
- # This is an attempt to make perlcc's arg. handling look like cc.
- # if ( opt('s') ) { # must quote: looks like s)foo)bar)!
- # if (opt('s') eq 'hared') {
- # $Options->{shared}++;
- # } elsif (opt('s') eq 'tatic') {
- # $Options->{static}++;
- # } else {
- # warn "$0: Unknown option -s", opt('s');
- # }
- # }
-
- $Options->{v} += 0;
-
- helpme() if opt(h); # And exit
-
- $Output = opt(o) || 'a.out';
- $Output = relativize($Output);
- $logfh = new FileHandle(">> " . opt('log')) if (opt('log'));
-
- if (opt(e)) {
- warn "$0: using -e 'code' as input file, ignoring @ARGV\n" if @ARGV;
- # We don't use a temporary file here; why bother?
- # XXX: this is not bullet proof -- spaces or quotes in name!
- $Input = "-e '".opt(e)."'"; # Quotes eaten by shell
- } else {
- $Input = shift @ARGV; # XXX: more files?
- _usage_and_die("$0: No input file specified\n") unless $Input;
- # DWIM modules. This is bad but necessary.
- $Options->{shared}++ if $Input =~ /\.pm\z/;
- warn "$0: using $Input as input file, ignoring @ARGV\n" if @ARGV;
- check_read($Input);
- check_perl($Input);
- sanity_check();
- }
-
-}
-
-sub opt(*) {
- my $opt = shift;
- return exists($Options->{$opt}) && ($Options->{$opt} || 0);
-}
-
-sub compile_module {
- die "$0: Compiling to shared libraries is currently disabled\n";
-}
-
-sub compile_byte {
- require ByteLoader;
- my $stash = grab_stash();
- my $command = "$BinPerl -MO=Bytecode,$stash $Input";
- # The -a option means we'd have to close the file and lose the
- # lock, which would create the tiniest of races. Instead, append
- # the output ourselves.
- vprint 1, "Writing on $Output";
-
- my $openflags = O_WRONLY | O_CREAT;
- $openflags |= O_BINARY if eval { O_BINARY; 1 };
- $openflags |= O_EXLOCK if eval { O_EXLOCK; 1 };
-
- # these dies are not "$0: .... \n" because they "can't happen"
-
- sysopen(OUT, $Output, $openflags)
- or die "can't write to $Output: $!";
-
- # this is blocking; hold on; why are we doing this??
- # flock OUT, LOCK_EX or die "can't lock $Output: $!"
- # unless eval { O_EXLOCK; 1 };
-
- truncate(OUT, 0)
- or die "couldn't trunc $Output: $!";
-
- print OUT <<EOF;
-#!$^X
-use ByteLoader $ByteLoader::VERSION;
-EOF
-
- # Now the compile:
- vprint 1, "Compiling...";
- vprint 3, "Calling $command";
-
- my ($output_r, $error_r) = spawnit($command);
-
- if (@$error_r && $? != 0) {
- _die("$0: $Input did not compile, which can't happen:\n@$error_r\n");
- } else {
- my @error = grep { !/^$Input syntax OK$/o } @$error_r;
- warn "$0: Unexpected compiler output:\n@error" if @error;
- }
-
- # Write it and leave.
- print OUT @$output_r or _die("can't write $Output: $!");
- close OUT or _die("can't close $Output: $!");
-
- # wait, how could it be anything but what you see next?
- chmod 0777 & ~umask, $Output or _die("can't chmod $Output: $!");
- exit 0;
-}
-
-sub compile_cstyle {
- my $stash = grab_stash();
-
- # What are we going to call our output C file?
- my $lose = 0;
- my ($cfh);
-
- if (opt(S) || opt(c)) {
- # We need to keep it.
- if (opt(e)) {
- $cfile = "a.out.c";
- } else {
- $cfile = $Input;
- # File off extension if present
- # hold on: plx is executable; also, careful of ordering!
- $cfile =~ s/\.(?:p(?:lx|l|h)|m)\z//i;
- $cfile .= ".c";
- $cfile = $Output if opt(c) && $Output =~ /\.c\z/i;
- }
- check_write($cfile);
- } else {
- # Don't need to keep it, be safe with a tempfile.
- $lose = 1;
- ($cfh, $cfile) = tempfile("pccXXXXX", SUFFIX => ".c");
- close $cfh; # See comment just below
- }
- vprint 1, "Writing C on $cfile";
-
- my $max_line_len = '';
- if ($^O eq 'MSWin32' && $Config{cc} =~ /^cl/i) {
- $max_line_len = '-l2000,';
- }
-
- # This has to do the write itself, so we can't keep a lock. Life
- # sucks.
- my $command = "$BinPerl -MO=$Backend,$max_line_len$stash,-o$cfile $Input";
- vprint 1, "Compiling...";
- vprint 1, "Calling $command";
-
- my ($output_r, $error_r) = spawnit($command);
- my @output = @$output_r;
- my @error = @$error_r;
-
- if (@error && $? != 0) {
- _die("$0: $Input did not compile, which can't happen:\n@error\n");
- }
-
- cc_harness($cfile,$stash) unless opt(c);
-
- if ($lose) {
- vprint 2, "unlinking $cfile";
- unlink $cfile or _die("can't unlink $cfile: $!");
- }
-}
-
-sub cc_harness {
- my ($cfile,$stash)=@_;
- use ExtUtils::Embed ();
- my $command = ExtUtils::Embed::ccopts." -o $Output $cfile ";
- $command .= " -I".$_ for split /\s+/, opt(I);
- $command .= " -L".$_ for split /\s+/, opt(L);
- my @mods = split /-?u /, $stash;
- $command .= " ".ExtUtils::Embed::ldopts("-std", \@mods);
- vprint 3, "running $Config{cc} $command";
- system("$Config{cc} $command");
-}
-
-# Where Perl is, and which include path to give it.
-sub yclept {
- my $command = "$^X ";
-
- # DWIM the -I to be Perl, not C, include directories.
- if (opt(I) && $Backend eq "Bytecode") {
- for (split /\s+/, opt(I)) {
- if (-d $_) {
- push @INC, $_;
- } else {
- warn "$0: Include directory $_ not found, skipping\n";
- }
- }
- }
-
- $command .= "-I$_ " for @INC;
- return $command;
-}
-
-# Use B::Stash to find additional modules and stuff.
-{
- my $_stash;
- sub grab_stash {
-
- warn "already called get_stash once" if $_stash;
-
- my $command = "$BinPerl -MB::Stash -c $Input";
- # Filename here is perfectly sanitised.
- vprint 3, "Calling $command\n";
-
- my ($stash_r, $error_r) = spawnit($command);
- my @stash = @$stash_r;
- my @error = @$error_r;
-
- if (@error && $? != 0) {
- _die("$0: $Input did not compile:\n@error\n");
- }
-
- $stash[0] =~ s/,-u\<none\>//;
- vprint 2, "Stash: ", join " ", split /,?-u/, $stash[0];
- chomp $stash[0];
- return $_stash = $stash[0];
- }
-
-}
-
-# Check the consistency of options if -B is selected.
-# To wit, (-B|-O) ==> no -shared, no -S, no -c
-sub checkopts_byte {
-
- _die("$0: Please choose one of either -B and -O.\n") if opt(O);
-
- if (opt(shared)) {
- warn "$0: Will not create a shared library for bytecode\n";
- delete $Options->{shared};
- }
-
- for my $o ( qw[c S] ) {
- if (opt($o)) {
- warn "$0: Compiling to bytecode is a one-pass process--",
- "-$o ignored\n";
- delete $Options->{$o};
- }
- }
-
-}
-
-# Check the input and output files make sense, are read/writeable.
-sub sanity_check {
- if ($Input eq $Output) {
- if ($Input eq 'a.out') {
- _die("$0: Compiling a.out is probably not what you want to do.\n");
- # You fully deserve what you get now. No you *don't*. typos happen.
- } else {
- warn "$0: Will not write output on top of input file, ",
- "compiling to a.out instead\n";
- $Output = "a.out";
- }
- }
-}
-
-sub check_read {
- my $file = shift;
- unless (-r $file) {
- _die("$0: Input file $file is a directory, not a file\n") if -d _;
- unless (-e _) {
- _die("$0: Input file $file was not found\n");
- } else {
- _die("$0: Cannot read input file $file: $!\n");
- }
- }
- unless (-f _) {
- # XXX: die? don't try this on /dev/tty
- warn "$0: WARNING: input $file is not a plain file\n";
- }
-}
-
-sub check_write {
- my $file = shift;
- if (-d $file) {
- _die("$0: Cannot write on $file, is a directory\n");
- }
- if (-e _) {
- _die("$0: Cannot write on $file: $!\n") unless -w _;
- }
- unless (-w cwd()) {
- _die("$0: Cannot write in this directory: $!\n");
- }
-}
-
-sub check_perl {
- my $file = shift;
- unless (-T $file) {
- warn "$0: Binary `$file' sure doesn't smell like perl source!\n";
- print "Checking file type... ";
- system("file", $file);
- _die("Please try a perlier file!\n");
- }
-
- open(my $handle, "<", $file) or _die("XXX: can't open $file: $!");
- local $_ = <$handle>;
- if (/^#!/ && !/perl/) {
- _die("$0: $file is a ", /^#!\s*(\S+)/, " script, not perl\n");
- }
-
-}
-
-# File spawning and error collecting
-sub spawnit {
- my ($command) = shift;
- my (@error,@output);
- my $errname;
- (undef, $errname) = tempfile("pccXXXXX");
- {
- open (S_OUT, "$command 2>$errname |")
- or _die("$0: Couldn't spawn the compiler.\n");
- @output = <S_OUT>;
- }
- open (S_ERROR, $errname) or _die("$0: Couldn't read the error file.\n");
- @error = <S_ERROR>;
- close S_ERROR;
- close S_OUT;
- unlink $errname or _die("$0: Can't unlink error file $errname");
- return (\@output, \@error);
-}
-
-sub helpme {
- print "perlcc compiler frontend, version $VERSION\n\n";
- { no warnings;
- exec "pod2usage $0";
- exec "perldoc $0";
- exec "pod2text $0";
- }
-}
-
-sub relativize {
- my ($args) = @_;
-
- return() if ($args =~ m"^[/\\]");
- return("./$args");
-}
-
-sub _die {
- $logfh->print(@_) if opt('log');
- print STDERR @_;
- exit(); # should die eventually. However, needed so that a 'make compile'
- # can compile all the way through to the end for standard dist.
-}
-
-sub _usage_and_die {
- _die(<<EOU);
-$0: Usage:
-$0 [-o executable] [-r] [-O|-B|-c|-S] [-log log] [source[.pl] | -e oneliner]
-EOU
-}
-
-sub run {
- my (@commands) = @_;
-
- print interruptrun(@commands) if (!opt('log'));
- $logfh->print(interruptrun(@commands)) if (opt('log'));
-}
-
-sub interruptrun
-{
- my (@commands) = @_;
-
- my $command = join('', @commands);
- local(*FD);
- my $pid = open(FD, "$command |");
- my $text;
-
- local($SIG{HUP}) = sub { kill 9, $pid; exit };
- local($SIG{INT}) = sub { kill 9, $pid; exit };
-
- my $needalarm =
- ($ENV{PERLCC_TIMEOUT} &&
- $Config{'osname'} ne 'MSWin32' &&
- $command =~ m"(^|\s)perlcc\s");
-
- eval
- {
- local($SIG{ALRM}) = sub { die "INFINITE LOOP"; };
- alarm($ENV{PERLCC_TIMEOUT}) if ($needalarm);
- $text = join('', <FD>);
- alarm(0) if ($needalarm);
- };
-
- if ($@)
- {
- eval { kill 'HUP', $pid };
- vprint 0, "SYSTEM TIMEOUT (infinite loop?)\n";
- }
-
- close(FD);
- return($text);
-}
-
-END {
- unlink $cfile if ($cfile && !opt(S) && !opt(c));
-}
-
-__END__
-
-=head1 NAME
-
-perlcc - generate executables from Perl programs
-
-=head1 SYNOPSIS
-
- $ perlcc hello # Compiles into executable 'a.out'
- $ perlcc -o hello hello.pl # Compiles into executable 'hello'
-
- $ perlcc -O file # Compiles using the optimised C backend
- $ perlcc -B file # Compiles using the bytecode backend
-
- $ perlcc -c file # Creates a C file, 'file.c'
- $ perlcc -S -o hello file # Creates a C file, 'file.c',
- # then compiles it to executable 'hello'
- $ perlcc -c out.c file # Creates a C file, 'out.c' from 'file'
-
- $ perlcc -e 'print q//' # Compiles a one-liner into 'a.out'
- $ perlcc -c -e 'print q//' # Creates a C file 'a.out.c'
-
- $ perlcc -r hello # compiles 'hello' into 'a.out', runs 'a.out'.
-
- $ perlcc -r hello a b c # compiles 'hello' into 'a.out', runs 'a.out'.
- # with arguments 'a b c'
-
- $ perlcc hello -log c # compiles 'hello' into 'a.out' logs compile
- # log into 'c'.
-
-=head1 DESCRIPTION
-
-F<perlcc> creates standalone executables from Perl programs, using the
-code generators provided by the L<B> module. At present, you may
-either create executable Perl bytecode, using the C<-B> option, or
-generate and compile C files using the standard and 'optimised' C
-backends.
-
-The code generated in this way is not guaranteed to work. The whole
-codegen suite (C<perlcc> included) should be considered B<very>
-experimental. Use for production purposes is strongly discouraged.
-
-=head1 OPTIONS
-
-=over 4
-
-=item -LI<library directories>
-
-Adds the given directories to the library search path when C code is
-passed to your C compiler.
-
-=item -II<include directories>
-
-Adds the given directories to the include file search path when C code is
-passed to your C compiler; when using the Perl bytecode option, adds the
-given directories to Perl's include path.
-
-=item -o I<output file name>
-
-Specifies the file name for the final compiled executable.
-
-=item -c I<C file name>
-
-Create C code only; do not compile to a standalone binary.
-
-=item -e I<perl code>
-
-Compile a one-liner, much the same as C<perl -e '...'>
-
-=item -S
-
-Do not delete generated C code after compilation.
-
-=item -B
-
-Use the Perl bytecode code generator.
-
-=item -O
-
-Use the 'optimised' C code generator. This is more experimental than
-everything else put together, and the code created is not guaranteed to
-compile in finite time and memory, or indeed, at all.
-
-=item -v
-
-Increase verbosity of output; can be repeated for more verbose output.
-
-=item -r
-
-Run the resulting compiled script after compiling it.
-
-=item -log
-
-Log the output of compiling to a file rather than to stdout.
-
-=back
-
-=cut
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/utils/perldoc.PL b/contrib/perl5/utils/perldoc.PL
deleted file mode 100644
index cfb773e..0000000
--- a/contrib/perl5/utils/perldoc.PL
+++ /dev/null
@@ -1,875 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if 0;
-
-use warnings;
-use strict;
-
-# make sure creat()s are neither too much nor too little
-INIT { eval { umask(0077) } } # doubtless someone has no mask
-
-(my \$pager = <<'/../') =~ s/\\s*\\z//;
-$Config{pager}
-/../
-my \@pagers = ();
-push \@pagers, \$pager if -x \$pager;
-
-(my \$bindir = <<'/../') =~ s/\\s*\\z//;
-$Config{scriptdir}
-/../
-
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-use Fcntl; # for sysopen
-use Getopt::Std;
-use Config '%Config';
-use File::Spec::Functions qw(catfile splitdir);
-
-#
-# Perldoc revision #1 -- look up a piece of documentation in .pod format that
-# is embedded in the perl installation tree.
-#
-# This is not to be confused with Tom Christiansen's perlman, which is a
-# man replacement, written in perl. This perldoc is strictly for reading
-# the perl manuals, though it too is written in perl.
-#
-# Massive security and correctness patches applied to this
-# noisome program by Tom Christiansen Sat Mar 11 15:22:33 MST 2000
-
-if (@ARGV<1) {
- my $me = $0; # Editing $0 is unportable
- $me =~ s,.*/,,;
- die <<EOF;
-Usage: $me [-h] [-r] [-i] [-v] [-t] [-u] [-m] [-n program] [-l] [-F] [-X] PageName|ModuleName|ProgramName
- $me -f PerlFunc
- $me -q FAQKeywords
-
-The -h option prints more help. Also try "perldoc perldoc" to get
-acquainted with the system.
-EOF
-}
-
-my @global_found = ();
-my $global_target = "";
-
-my $Is_VMS = $^O eq 'VMS';
-my $Is_MSWin32 = $^O eq 'MSWin32';
-my $Is_Dos = $^O eq 'dos';
-my $Is_OS2 = $^O eq 'os2';
-
-sub usage{
- warn "@_\n" if @_;
- # Erase evidence of previous errors (if any), so exit status is simple.
- $! = 0;
- die <<EOF;
-perldoc [options] PageName|ModuleName|ProgramName...
-perldoc [options] -f BuiltinFunction
-perldoc [options] -q FAQRegex
-
-Options:
- -h Display this help message
- -r Recursive search (slow)
- -i Ignore case
- -t Display pod using pod2text instead of pod2man and nroff
- (-t is the default on win32)
- -u Display unformatted pod text
- -m Display module's file in its entirety
- -n Specify replacement for nroff
- -l Display the module's file name
- -F Arguments are file names, not modules
- -v Verbosely describe what's going on
- -X use index if present (looks for pod.idx at $Config{archlib})
- -q Search the text of questions (not answers) in perlfaq[1-9]
- -U Run in insecure mode (superuser only)
-
-PageName|ModuleName...
- is the name of a piece of documentation that you want to look at. You
- may either give a descriptive name of the page (as in the case of
- `perlfunc') the name of a module, either like `Term::Info',
- `Term/Info', the partial name of a module, like `info', or
- `makemaker', or the name of a program, like `perldoc'.
-
-BuiltinFunction
- is the name of a perl function. Will extract documentation from
- `perlfunc'.
-
-FAQRegex
- is a regex. Will search perlfaq[1-9] for and extract any
- questions that match.
-
-Any switches in the PERLDOC environment variable will be used before the
-command line arguments. The optional pod index file contains a list of
-filenames, one per line.
-
-EOF
-}
-
-if (defined $ENV{"PERLDOC"}) {
- require Text::ParseWords;
- unshift(@ARGV, Text::ParseWords::shellwords($ENV{"PERLDOC"}));
-}
-!NO!SUBS!
-
-my $getopts = "mhtluvriFf:Xq:n:U";
-print OUT <<"!GET!OPTS!";
-
-use vars qw( @{[map "\$opt_$_", ($getopts =~ /\w/g)]} );
-
-getopts("$getopts") || usage;
-!GET!OPTS!
-
-print OUT <<'!NO!SUBS!';
-
-usage if $opt_h;
-
-# refuse to run if we should be tainting and aren't
-# (but regular users deserve protection too, though!)
-if (!($Is_VMS || $Is_MSWin32 || $Is_Dos || $Is_OS2) && ($> == 0 || $< == 0)
- && !am_taint_checking())
-{{
- if ($opt_U) {
- my $id = eval { getpwnam("nobody") };
- $id = eval { getpwnam("nouser") } unless defined $id;
- $id = -2 unless defined $id;
- eval {
- $> = $id; # must do this one first!
- $< = $id;
- };
- last if !$@ && $< && $>;
- }
- die "Superuser must not run $0 without security audit and taint checks.\n";
-}}
-
-$opt_n = "nroff" if !$opt_n;
-
-my $podidx;
-if ($opt_X) {
- $podidx = "$Config{'archlib'}/pod.idx";
- $podidx = "" unless -f $podidx && -r _ && -M _ <= 7;
-}
-
-if ((my $opts = do{ no warnings; $opt_t + $opt_u + $opt_m + $opt_l }) > 1) {
- usage("only one of -t, -u, -m or -l")
-}
-elsif ($Is_MSWin32
- || $Is_Dos
- || !($ENV{TERM} && $ENV{TERM} !~ /dumb|emacs|none|unknown/i))
-{
- $opt_t = 1 unless $opts;
-}
-
-if ($opt_t) { require Pod::Text; import Pod::Text; }
-
-my @pages;
-if ($opt_f) {
- @pages = ("perlfunc");
-}
-elsif ($opt_q) {
- @pages = ("perlfaq1" .. "perlfaq9");
-}
-else {
- @pages = @ARGV;
-}
-
-# Does this look like a module or extension directory?
-if (-f "Makefile.PL") {
-
- # Add ., lib to @INC (if they exist)
- eval q{ use lib qw(. lib); 1; } or die;
-
- # don't add if superuser
- if ($< && $> && -f "blib") { # don't be looking too hard now!
- eval q{ use blib; 1 };
- warn $@ if $@ && $opt_v;
- }
-}
-
-sub containspod {
- my($file, $readit) = @_;
- return 1 if !$readit && $file =~ /\.pod\z/i;
- local($_);
- open(TEST,"<", $file) or die "Can't open $file: $!";
- while (<TEST>) {
- if (/^=head/) {
- close(TEST) or die "Can't close $file: $!";
- return 1;
- }
- }
- close(TEST) or die "Can't close $file: $!";
- return 0;
-}
-
-sub minus_f_nocase {
- my($dir,$file) = @_;
- my $path = catfile($dir,$file);
- return $path if -f $path and -r _;
- if (!$opt_i or $Is_VMS or $Is_MSWin32 or $Is_Dos or $^O eq 'os2') {
- # on a case-forgiving file system or if case is important
- # that is it all we can do
- warn "Ignored $path: unreadable\n" if -f _;
- return '';
- }
- local *DIR;
- # this is completely wicked. don't mess with $", and if
- # you do, don't assume / is the dirsep!
- local($")="/";
- my @p = ($dir);
- my($p,$cip);
- foreach $p (splitdir $file){
- my $try = catfile @p, $p;
- stat $try;
- if (-d _) {
- push @p, $p;
- if ( $p eq $global_target) {
- my $tmp_path = catfile @p;
- my $path_f = 0;
- for (@global_found) {
- $path_f = 1 if $_ eq $tmp_path;
- }
- push (@global_found, $tmp_path) unless $path_f;
- print STDERR "Found as @p but directory\n" if $opt_v;
- }
- }
- elsif (-f _ && -r _) {
- return $try;
- }
- elsif (-f _) {
- warn "Ignored $try: unreadable\n";
- }
- elsif (-d "@p") {
- my $found=0;
- my $lcp = lc $p;
- opendir DIR, "@p" or die "opendir @p: $!";
- while ($cip=readdir(DIR)) {
- if (lc $cip eq $lcp){
- $found++;
- last;
- }
- }
- closedir DIR or die "closedir @p: $!";
- return "" unless $found;
- push @p, $cip;
- return "@p" if -f "@p" and -r _;
- warn "Ignored @p: unreadable\n" if -f _;
- }
- }
- return "";
-}
-
-
-sub check_file {
- my($dir,$file) = @_;
- return "" if length $dir and not -d $dir;
- if ($opt_m) {
- return minus_f_nocase($dir,$file);
- }
- else {
- my $path = minus_f_nocase($dir,$file);
- return $path if length $path and containspod($path);
- }
- return "";
-}
-
-
-sub searchfor {
- my($recurse,$s,@dirs) = @_;
- $s =~ s!::!/!g;
- $s = VMS::Filespec::unixify($s) if $Is_VMS;
- return $s if -f $s && containspod($s);
- printf STDERR "Looking for $s in @dirs\n" if $opt_v;
- my $ret;
- my $i;
- my $dir;
- $global_target = (splitdir $s)[-1]; # XXX: why not use File::Basename?
- for ($i=0; $i<@dirs; $i++) {
- $dir = $dirs[$i];
- ($dir = VMS::Filespec::unixpath($dir)) =~ s!/\z!! if $Is_VMS;
- if ( ( $ret = check_file $dir,"$s.pod")
- or ( $ret = check_file $dir,"$s.pm")
- or ( $ret = check_file $dir,$s)
- or ( $Is_VMS and
- $ret = check_file $dir,"$s.com")
- or ( $^O eq 'os2' and
- $ret = check_file $dir,"$s.cmd")
- or ( ($Is_MSWin32 or $Is_Dos or $^O eq 'os2') and
- $ret = check_file $dir,"$s.bat")
- or ( $ret = check_file "$dir/pod","$s.pod")
- or ( $ret = check_file "$dir/pod",$s)
- or ( $ret = check_file "$dir/pods","$s.pod")
- or ( $ret = check_file "$dir/pods",$s)
- ) {
- return $ret;
- }
-
- if ($recurse) {
- opendir(D,$dir) or die "Can't opendir $dir: $!";
- my @newdirs = map catfile($dir, $_), grep {
- not /^\.\.?\z/s and
- not /^auto\z/s and # save time! don't search auto dirs
- -d catfile($dir, $_)
- } readdir D;
- closedir(D) or die "Can't closedir $dir: $!";
- next unless @newdirs;
- # what a wicked map!
- @newdirs = map((s/\.dir\z//,$_)[1],@newdirs) if $Is_VMS;
- print STDERR "Also looking in @newdirs\n" if $opt_v;
- push(@dirs,@newdirs);
- }
- }
- return ();
-}
-
-sub filter_nroff {
- my @data = split /\n{2,}/, shift;
- shift @data while @data and $data[0] !~ /\S/; # Go to header
- shift @data if @data and $data[0] =~ /Contributed\s+Perl/; # Skip header
- pop @data if @data and $data[-1] =~ /^\w/; # Skip footer, like
- # 28/Jan/99 perl 5.005, patch 53 1
- join "\n\n", @data;
-}
-
-sub printout {
- my ($file, $tmp, $filter) = @_;
- my $err;
-
- if ($opt_t) {
- # why was this append?
- sysopen(OUT, $tmp, O_WRONLY | O_EXCL | O_CREAT, 0600)
- or die ("Can't open $tmp: $!");
- Pod::Text->new()->parse_from_file($file,\*OUT);
- close OUT or die "can't close $tmp: $!";
- }
- elsif (not $opt_u) {
- my $cmd = catfile($bindir, 'pod2man') . " --lax $file | $opt_n -man";
- $cmd .= " | col -x" if $^O =~ /hpux/;
- my $rslt = `$cmd`;
- $rslt = filter_nroff($rslt) if $filter;
- unless (($err = $?)) {
- # why was this append?
- sysopen(TMP, $tmp, O_WRONLY | O_EXCL | O_CREAT, 0600)
- or die "Can't open $tmp: $!";
- print TMP $rslt
- or die "Can't print $tmp: $!";
- close TMP
- or die "Can't close $tmp: $!";
- }
- }
- if ($opt_u or $err or -z $tmp) { # XXX: race with -z
- # why was this append?
- sysopen(OUT, $tmp, O_WRONLY | O_EXCL | O_CREAT, 0600)
- or die "Can't open $tmp: $!";
- open(IN,"<", $file) or die("Can't open $file: $!");
- my $cut = 1;
- local $_;
- while (<IN>) {
- $cut = $1 eq 'cut' if /^=(\w+)/;
- next if $cut;
- print OUT
- or die "Can't print $tmp: $!";
- }
- close IN or die "Can't close $file: $!";
- close OUT or die "Can't close $tmp: $!";
- }
-}
-
-sub page {
- my ($tmp, $no_tty, @pagers) = @_;
- if ($no_tty) {
- open(TMP,"<", $tmp) or die "Can't open $tmp: $!";
- local $_;
- while (<TMP>) {
- print or die "Can't print to stdout: $!";
- }
- close TMP or die "Can't close while $tmp: $!";
- }
- else {
- foreach my $pager (@pagers) {
- if ($Is_VMS) {
- last if system("$pager $tmp") == 0; # quoting prevents logical expansion
- } else {
- last if system("$pager \"$tmp\"") == 0;
- }
- }
- }
-}
-
-sub cleanup {
- my @files = @_;
- for (@files) {
- if ($Is_VMS) {
- 1 while unlink($_); # XXX: expect failure
- } else {
- unlink($_); # or die "Can't unlink $_: $!";
- }
- }
-}
-
-my @found;
-foreach (@pages) {
- if ($podidx && open(PODIDX, $podidx)) {
- my $searchfor = catfile split '::';
- print STDERR "Searching for '$searchfor' in $podidx\n" if $opt_v;
- local $_;
- while (<PODIDX>) {
- chomp;
- push(@found, $_) if m,/$searchfor(?:\.(?:pod|pm))?\z,i;
- }
- close(PODIDX) or die "Can't close $podidx: $!";
- next;
- }
- print STDERR "Searching for $_\n" if $opt_v;
- # We must look both in @INC for library modules and in $bindir
- # for executables, like h2xs or perldoc itself.
- my @searchdirs = ($bindir, @INC);
- if ($opt_F) {
- next unless -r;
- push @found, $_ if $opt_m or containspod($_);
- next;
- }
- unless ($opt_m) {
- if ($Is_VMS) {
- my($i,$trn);
- for ($i = 0; $trn = $ENV{'DCL$PATH;'.$i}; $i++) {
- push(@searchdirs,$trn);
- }
- push(@searchdirs,'perl_root:[lib.pod]') # installed pods
- }
- else {
- push(@searchdirs, grep(-d, split($Config{path_sep},
- $ENV{'PATH'})));
- }
- }
- my @files = searchfor(0,$_,@searchdirs);
- if (@files) {
- print STDERR "Found as @files\n" if $opt_v;
- }
- else {
- # no match, try recursive search
- @searchdirs = grep(!/^\.\z/s,@INC);
- @files= searchfor(1,$_,@searchdirs) if $opt_r;
- if (@files) {
- print STDERR "Loosely found as @files\n" if $opt_v;
- }
- else {
- print STDERR "No documentation found for \"$_\".\n";
- if (@global_found) {
- print STDERR "However, try\n";
- for my $dir (@global_found) {
- opendir(DIR, $dir) or die "opendir $dir: $!";
- while (my $file = readdir(DIR)) {
- next if ($file =~ /^\./s);
- $file =~ s/\.(pm|pod)\z//; # XXX: badfs
- print STDERR "\tperldoc $_\::$file\n";
- }
- closedir DIR or die "closedir $dir: $!";
- }
- }
- }
- }
- push(@found,@files);
-}
-
-if (!@found) {
- exit ($Is_VMS ? 98962 : 1);
-}
-
-if ($opt_l) {
- print join("\n", @found), "\n";
- exit;
-}
-
-my $lines = $ENV{LINES} || 24;
-
-my $no_tty;
-if (! -t STDOUT) { $no_tty = 1 }
-END { close(STDOUT) || die "Can't close STDOUT: $!" }
-
-# until here we could simply exit or die
-# now we create temporary files that we have to clean up
-# namely $tmp, $buffer
-# that's because you did it wrong, should be descriptor based --tchrist
-
-my $tmp;
-my $buffer;
-if ($Is_MSWin32) {
- $tmp = "$ENV{TEMP}\\perldoc1.$$";
- $buffer = "$ENV{TEMP}\\perldoc1.b$$";
- push @pagers, qw( more< less notepad );
- unshift @pagers, $ENV{PAGER} if $ENV{PAGER};
- for (@found) { s,/,\\,g }
-}
-elsif ($Is_VMS) {
- $tmp = 'Sys$Scratch:perldoc.tmp1_'.$$;
- $buffer = 'Sys$Scratch:perldoc.tmp1_b'.$$;
- push @pagers, qw( most more less type/page );
-}
-elsif ($Is_Dos) {
- $tmp = "$ENV{TEMP}/perldoc1.$$";
- $buffer = "$ENV{TEMP}/perldoc1.b$$";
- $tmp =~ tr!\\/!//!s;
- $buffer =~ tr!\\/!//!s;
- push @pagers, qw( less.exe more.com< );
- unshift @pagers, $ENV{PAGER} if $ENV{PAGER};
-}
-else {
- if ($^O eq 'os2') {
- require POSIX;
- $tmp = POSIX::tmpnam();
- $buffer = POSIX::tmpnam();
- unshift @pagers, 'less', 'cmd /c more <';
- }
- else {
- # XXX: this is not secure, because it doesn't open it
- ($tmp, $buffer) = eval { require POSIX }
- ? (POSIX::tmpnam(), POSIX::tmpnam() )
- : ("/tmp/perldoc1.$$", "/tmp/perldoc1.b$$" );
- }
- push @pagers, qw( more less pg view cat );
- unshift @pagers, $ENV{PAGER} if $ENV{PAGER};
-}
-unshift @pagers, $ENV{PERLDOC_PAGER} if $ENV{PERLDOC_PAGER};
-
-# make sure cleanup called
-eval q{
- sub END { cleanup($tmp, $buffer) }
- 1;
-} || die;
-
-# exit/die in a windows sighandler is dangerous, so let it do the
-# default thing, which is to exit
-eval q{ use sigtrap qw(die INT TERM HUP QUIT) } unless $^O eq 'MSWin32';
-
-if ($opt_m) {
- foreach my $pager (@pagers) {
- if (system($pager, @found) == 0) {
- exit;
- }
- }
- if ($Is_VMS) {
- eval q{
- use vmsish qw(status exit);
- exit $?;
- 1;
- } or die;
- }
- exit(1);
-}
-
-my @pod;
-if ($opt_f) {
- my $perlfunc = shift @found;
- open(PFUNC, "<", $perlfunc)
- or die("Can't open $perlfunc: $!");
-
- # Functions like -r, -e, etc. are listed under `-X'.
- my $search_string = ($opt_f =~ /^-[rwxoRWXOeszfdlpSbctugkTBMAC]$/)
- ? 'I<-X' : $opt_f ;
-
- # Skip introduction
- local $_;
- while (<PFUNC>) {
- last if /^=head2 Alphabetical Listing of Perl Functions/;
- }
-
- # Look for our function
- my $found = 0;
- my $inlist = 0;
- while (<PFUNC>) {
- if (/^=item\s+\Q$search_string\E\b/o) {
- $found = 1;
- }
- elsif (/^=item/) {
- last if $found > 1 and not $inlist;
- }
- next unless $found;
- if (/^=over/) {
- ++$inlist;
- }
- elsif (/^=back/) {
- --$inlist;
- }
- push @pod, $_;
- ++$found if /^\w/; # found descriptive text
- }
- if (!@pod) {
- die "No documentation for perl function `$opt_f' found\n";
- }
- close PFUNC or die "Can't open $perlfunc: $!";
-}
-
-if ($opt_q) {
- local @ARGV = @found; # I'm lazy, sue me.
- my $found = 0;
- my %found_in;
- my $rx = eval { qr/$opt_q/ } or die <<EOD;
-Invalid regular expression '$opt_q' given as -q pattern:
- $@
-Did you mean \\Q$opt_q ?
-
-EOD
-
- for (@found) { die "invalid file spec: $!" if /[<>|]/ }
- local $_;
- while (<>) {
- if (/^=head2\s+.*(?:$opt_q)/oi) {
- $found = 1;
- push @pod, "=head1 Found in $ARGV\n\n" unless $found_in{$ARGV}++;
- }
- elsif (/^=head2/) {
- $found = 0;
- }
- next unless $found;
- push @pod, $_;
- }
- if (!@pod) {
- die("No documentation for perl FAQ keyword `$opt_q' found\n");
- }
-}
-
-my $filter;
-
-if (@pod) {
- sysopen(TMP, $buffer, O_WRONLY | O_EXCL | O_CREAT)
- or die("Can't open $buffer: $!");
- print TMP "=over 8\n\n";
- print TMP @pod or die "Can't print $buffer: $!";
- print TMP "=back\n";
- close TMP or die "Can't close $buffer: $!";
- @found = $buffer;
- $filter = 1;
-}
-
-foreach (@found) {
- printout($_, $tmp, $filter);
-}
-page($tmp, $no_tty, @pagers);
-
-exit;
-
-sub is_tainted {
- my $arg = shift;
- my $nada = substr($arg, 0, 0); # zero-length
- local $@; # preserve caller's version
- eval { eval "# $nada" };
- return length($@) != 0;
-}
-
-sub am_taint_checking {
- my($k,$v) = each %ENV;
- return is_tainted($v);
-}
-
-
-__END__
-
-=head1 NAME
-
-perldoc - Look up Perl documentation in pod format.
-
-=head1 SYNOPSIS
-
-B<perldoc> [B<-h>] [B<-v>] [B<-t>] [B<-u>] [B<-m>] [B<-l>] [B<-F>] [B<-X>] PageName|ModuleName|ProgramName
-
-B<perldoc> B<-f> BuiltinFunction
-
-B<perldoc> B<-q> FAQ Keyword
-
-=head1 DESCRIPTION
-
-I<perldoc> looks up a piece of documentation in .pod format that is embedded
-in the perl installation tree or in a perl script, and displays it via
-C<pod2man | nroff -man | $PAGER>. (In addition, if running under HP-UX,
-C<col -x> will be used.) This is primarily used for the documentation for
-the perl library modules.
-
-Your system may also have man pages installed for those modules, in
-which case you can probably just use the man(1) command.
-
-=head1 OPTIONS
-
-=over 5
-
-=item B<-h> help
-
-Prints out a brief help message.
-
-=item B<-v> verbose
-
-Describes search for the item in detail.
-
-=item B<-t> text output
-
-Display docs using plain text converter, instead of nroff. This may be faster,
-but it won't look as nice.
-
-=item B<-u> unformatted
-
-Find docs only; skip reformatting by pod2*
-
-=item B<-m> module
-
-Display the entire module: both code and unformatted pod documentation.
-This may be useful if the docs don't explain a function in the detail
-you need, and you'd like to inspect the code directly; perldoc will find
-the file for you and simply hand it off for display.
-
-=item B<-l> file name only
-
-Display the file name of the module found.
-
-=item B<-F> file names
-
-Consider arguments as file names, no search in directories will be performed.
-
-=item B<-f> perlfunc
-
-The B<-f> option followed by the name of a perl built in function will
-extract the documentation of this function from L<perlfunc>.
-
-=item B<-q> perlfaq
-
-The B<-q> option takes a regular expression as an argument. It will search
-the question headings in perlfaq[1-9] and print the entries matching
-the regular expression.
-
-=item B<-X> use an index if present
-
-The B<-X> option looks for a entry whose basename matches the name given on the
-command line in the file C<$Config{archlib}/pod.idx>. The pod.idx file should
-contain fully qualified filenames, one per line.
-
-=item B<-U> run insecurely
-
-Because B<perldoc> does not run properly tainted, and is known to
-have security issues, it will not normally execute as the superuser.
-If you use the B<-U> flag, it will do so, but only after setting
-the effective and real IDs to nobody's or nouser's account, or -2
-if unavailable. If it cannot relinguish its privileges, it will not
-run.
-
-=item B<PageName|ModuleName|ProgramName>
-
-The item you want to look up. Nested modules (such as C<File::Basename>)
-are specified either as C<File::Basename> or C<File/Basename>. You may also
-give a descriptive name of a page, such as C<perlfunc>. You may also give a
-partial or wrong-case name, such as "basename" for "File::Basename", but
-this will be slower, if there is more then one page with the same partial
-name, you will only get the first one.
-
-=back
-
-=head1 ENVIRONMENT
-
-Any switches in the C<PERLDOC> environment variable will be used before the
-command line arguments. C<perldoc> also searches directories
-specified by the C<PERL5LIB> (or C<PERLLIB> if C<PERL5LIB> is not
-defined) and C<PATH> environment variables.
-(The latter is so that embedded pods for executables, such as
-C<perldoc> itself, are available.) C<perldoc> will use, in order of
-preference, the pager defined in C<PERLDOC_PAGER>, C<MANPAGER>, or
-C<PAGER> before trying to find a pager on its own. (C<MANPAGER> is not
-used if C<perldoc> was told to display plain text or unformatted pod.)
-
-One useful value for C<PERLDOC_PAGER> is C<less -+C -E>.
-
-=head1 VERSION
-
-This is perldoc v2.03.
-
-=head1 AUTHOR
-
-Kenneth Albanowski <kjahds@kjahds.com>
-
-Minor updates by Andy Dougherty <doughera@lafcol.lafayette.edu>,
-and others.
-
-=cut
-
-#
-# Version 2.03: Sun Apr 23 16:56:34 BST 2000
-# Hugo van der Sanden <hv@crypt0.demon.co.uk>
-# don't die when 'use blib' fails
-# Version 2.02: Mon Mar 13 18:03:04 MST 2000
-# Tom Christiansen <tchrist@perl.com>
-# Added -U insecurity option
-# Version 2.01: Sat Mar 11 15:22:33 MST 2000
-# Tom Christiansen <tchrist@perl.com>, querulously.
-# Security and correctness patches.
-# What a twisted bit of distasteful spaghetti code.
-# Version 2.0: ????
-# Version 1.15: Tue Aug 24 01:50:20 EST 1999
-# Charles Wilson <cwilson@ece.gatech.edu>
-# changed /pod/ directory to /pods/ for cygwin
-# to support cygwin/win32
-# Version 1.14: Wed Jul 15 01:50:20 EST 1998
-# Robin Barker <rmb1@cise.npl.co.uk>
-# -strict, -w cleanups
-# Version 1.13: Fri Feb 27 16:20:50 EST 1997
-# Gurusamy Sarathy <gsar@activestate.com>
-# -doc tweaks for -F and -X options
-# Version 1.12: Sat Apr 12 22:41:09 EST 1997
-# Gurusamy Sarathy <gsar@activestate.com>
-# -various fixes for win32
-# Version 1.11: Tue Dec 26 09:54:33 EST 1995
-# Kenneth Albanowski <kjahds@kjahds.com>
-# -added Charles Bailey's further VMS patches, and -u switch
-# -added -t switch, with pod2text support
-#
-# Version 1.10: Thu Nov 9 07:23:47 EST 1995
-# Kenneth Albanowski <kjahds@kjahds.com>
-# -added VMS support
-# -added better error recognition (on no found pages, just exit. On
-# missing nroff/pod2man, just display raw pod.)
-# -added recursive/case-insensitive matching (thanks, Andreas). This
-# slows things down a bit, unfortunately. Give a precise name, and
-# it'll run faster.
-#
-# Version 1.01: Tue May 30 14:47:34 EDT 1995
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
-# -added pod documentation.
-# -added PATH searching.
-# -added searching pod/ subdirectory (mainly to pick up perlfunc.pod
-# and friends.
-#
-#
-# TODO:
-#
-# Cache directories read during sloppy match
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/utils/pl2pm.PL b/contrib/perl5/utils/pl2pm.PL
deleted file mode 100644
index 48e281d..0000000
--- a/contrib/perl5/utils/pl2pm.PL
+++ /dev/null
@@ -1,389 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-=head1 NAME
-
-pl2pm - Rough tool to translate Perl4 .pl files to Perl5 .pm modules.
-
-=head1 SYNOPSIS
-
-B<pl2pm> F<files>
-
-=head1 DESCRIPTION
-
-B<pl2pm> is a tool to aid in the conversion of Perl4-style .pl
-library files to Perl5-style library modules. Usually, your old .pl
-file will still work fine and you should only use this tool if you
-plan to update your library to use some of the newer Perl 5 features,
-such as AutoLoading.
-
-=head1 LIMITATIONS
-
-It's just a first step, but it's usually a good first step.
-
-=head1 AUTHOR
-
-Larry Wall <larry@wall.org>
-
-=cut
-
-while (<DATA>) {
- chop;
- $keyword{$_} = 1;
-}
-
-undef $/;
-$* = 1;
-while (<>) {
- $newname = $ARGV;
- $newname =~ s/\.pl$/.pm/ || next;
- $newname =~ s#(.*/)?(\w+)#$1\u$2#;
- if (-f $newname) {
- warn "Won't overwrite existing $newname\n";
- next;
- }
- $oldpack = $2;
- $newpack = "\u$2";
- @export = ();
- print "$oldpack => $newpack\n" if $verbose;
-
- s/\bstd(in|out|err)\b/\U$&/g;
- s/(sub\s+)(\w+)(\s*\{[ \t]*\n)\s*package\s+$oldpack\s*;[ \t]*\n+/${1}main'$2$3/ig;
- if (/sub\s+main'/) {
- @export = m/sub\s+main'(\w+)/g;
- s/(sub\s+)main'(\w+)/$1$2/g;
- }
- else {
- @export = m/sub\s+([A-Za-z]\w*)/g;
- }
- @export_ok = grep($keyword{$_}, @export);
- @export = grep(!$keyword{$_}, @export);
- @export{@export} = (1) x @export;
- s/(^\s*);#/$1#/g;
- s/(#.*)require ['"]$oldpack\.pl['"]/$1use $newpack/;
- s/(package\s*)($oldpack)\s*;[ \t]*\n+//ig;
- s/([\$\@%&*])'(\w+)/&xlate($1,"",$2)/eg;
- s/([\$\@%&*]?)(\w+)'(\w+)/&xlate($1,$2,$3)/eg;
- if (!/\$\[\s*\)?\s*=\s*[^0\s]/) {
- s/^\s*(local\s*\()?\s*\$\[\s*\)?\s*=\s*0\s*;[ \t]*\n//g;
- s/\$\[\s*\+\s*//g;
- s/\s*\+\s*\$\[//g;
- s/\$\[/0/g;
- }
- s/open\s+(\w+)/open($1)/g;
-
- if (s/\bdie\b/croak/g) {
- $carp = "use Carp;\n";
- s/croak "([^"]*)\\n"/croak "$1"/g;
- }
- else {
- $carp = "";
- }
- if (@export_ok) {
- $export_ok = "\@EXPORT_OK = qw(@export_ok);\n";
- }
- else {
- $export_ok = "";
- }
-
- open(PM, ">$newname") || warn "Can't create $newname: $!\n";
- print PM <<"END";
-package $newpack;
-require 5.000;
-require Exporter;
-$carp
-\@ISA = qw(Exporter);
-\@EXPORT = qw(@export);
-$export_ok
-$_
-END
-}
-
-sub xlate {
- local($prefix, $pack, $ident) = @_;
- if ($prefix eq '' && $ident =~ /^(t|s|m|d|ing|ll|ed|ve|re)$/) {
- "${pack}'$ident";
- }
- elsif ($pack eq "" || $pack eq "main") {
- if ($export{$ident}) {
- "$prefix$ident";
- }
- else {
- "$prefix${pack}::$ident";
- }
- }
- elsif ($pack eq $oldpack) {
- "$prefix${newpack}::$ident";
- }
- else {
- "$prefix${pack}::$ident";
- }
-}
-__END__
-AUTOLOAD
-BEGIN
-CORE
-DESTROY
-END
-abs
-accept
-alarm
-and
-atan2
-bind
-binmode
-bless
-caller
-chdir
-chmod
-chop
-chown
-chr
-chroot
-close
-closedir
-cmp
-connect
-continue
-cos
-crypt
-dbmclose
-dbmopen
-defined
-delete
-die
-do
-dump
-each
-else
-elsif
-endgrent
-endhostent
-endnetent
-endprotoent
-endpwent
-endservent
-eof
-eq
-eval
-exec
-exit
-exp
-fcntl
-fileno
-flock
-for
-foreach
-fork
-format
-formline
-ge
-getc
-getgrent
-getgrgid
-getgrnam
-gethostbyaddr
-gethostbyname
-gethostent
-getlogin
-getnetbyaddr
-getnetbyname
-getnetent
-getpeername
-getpgrp
-getppid
-getpriority
-getprotobyname
-getprotobynumber
-getprotoent
-getpwent
-getpwnam
-getpwuid
-getservbyname
-getservbyport
-getservent
-getsockname
-getsockopt
-glob
-gmtime
-goto
-grep
-gt
-hex
-if
-index
-int
-ioctl
-join
-keys
-kill
-last
-lc
-lcfirst
-le
-length
-link
-listen
-local
-localtime
-log
-lstat
-lt
-m
-mkdir
-msgctl
-msgget
-msgrcv
-msgsnd
-my
-ne
-next
-no
-not
-oct
-open
-opendir
-or
-ord
-pack
-package
-pipe
-pop
-print
-printf
-push
-q
-qq
-quotemeta
-qw
-qx
-rand
-read
-readdir
-readline
-readlink
-readpipe
-recv
-redo
-ref
-rename
-require
-reset
-return
-reverse
-rewinddir
-rindex
-rmdir
-s
-scalar
-seek
-seekdir
-select
-semctl
-semget
-semop
-send
-setgrent
-sethostent
-setnetent
-setpgrp
-setpriority
-setprotoent
-setpwent
-setservent
-setsockopt
-shift
-shmctl
-shmget
-shmread
-shmwrite
-shutdown
-sin
-sleep
-socket
-socketpair
-sort
-splice
-split
-sprintf
-sqrt
-srand
-stat
-study
-sub
-substr
-symlink
-syscall
-sysread
-system
-syswrite
-tell
-telldir
-tie
-time
-times
-tr
-truncate
-uc
-ucfirst
-umask
-undef
-unless
-unlink
-unpack
-unshift
-untie
-until
-use
-utime
-values
-vec
-wait
-waitpid
-wantarray
-warn
-while
-write
-x
-xor
-y
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/utils/splain.PL b/contrib/perl5/utils/splain.PL
deleted file mode 100644
index 0a71544..0000000
--- a/contrib/perl5/utils/splain.PL
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries:
-# $startperl
-# $perlpath
-# $eunicefix
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-# Open input file before creating output file.
-$IN = '../lib/diagnostics.pm';
-$in = open IN;
-if (!$in) {
- $inmsg = "Can't open $IN: $!\n";
- $IN = 'diagnostics.pm';
- $in = open IN or die $inmsg, "Can't open $IN: $!\n";
-}
-
-# Create output file.
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-!GROK!THIS!
-
-while (<IN>) {
- print OUT unless /^package diagnostics/;
-}
-
-close IN;
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/warnings.h b/contrib/perl5/warnings.h
deleted file mode 100644
index f6814e7..0000000
--- a/contrib/perl5/warnings.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by warnings.pl
- Any changes made here will be lost!
-*/
-
-
-#define Off(x) ((x) / 8)
-#define Bit(x) (1 << ((x) % 8))
-#define IsSet(a, x) ((a)[Off(x)] & Bit(x))
-
-
-#define G_WARN_OFF 0 /* $^W == 0 */
-#define G_WARN_ON 1 /* -w flag and $^W != 0 */
-#define G_WARN_ALL_ON 2 /* -W flag */
-#define G_WARN_ALL_OFF 4 /* -X flag */
-#define G_WARN_ONCE 8 /* set if 'once' ever enabled */
-#define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF)
-
-#define pWARN_STD Nullsv
-#define pWARN_ALL (Nullsv+1) /* use warnings 'all' */
-#define pWARN_NONE (Nullsv+2) /* no warnings 'all' */
-
-#define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \
- (x) == pWARN_NONE)
-#define WARN_ALL 0
-#define WARN_CHMOD 1
-#define WARN_CLOSURE 2
-#define WARN_EXITING 3
-#define WARN_GLOB 4
-#define WARN_IO 5
-#define WARN_CLOSED 6
-#define WARN_EXEC 7
-#define WARN_NEWLINE 8
-#define WARN_PIPE 9
-#define WARN_UNOPENED 10
-#define WARN_MISC 11
-#define WARN_NUMERIC 12
-#define WARN_ONCE 13
-#define WARN_OVERFLOW 14
-#define WARN_PACK 15
-#define WARN_PORTABLE 16
-#define WARN_RECURSION 17
-#define WARN_REDEFINE 18
-#define WARN_REGEXP 19
-#define WARN_SEVERE 20
-#define WARN_DEBUGGING 21
-#define WARN_INPLACE 22
-#define WARN_INTERNAL 23
-#define WARN_MALLOC 24
-#define WARN_SIGNAL 25
-#define WARN_SUBSTR 26
-#define WARN_SYNTAX 27
-#define WARN_AMBIGUOUS 28
-#define WARN_BAREWORD 29
-#define WARN_DEPRECATED 30
-#define WARN_DIGIT 31
-#define WARN_PARENTHESIS 32
-#define WARN_PRECEDENCE 33
-#define WARN_PRINTF 34
-#define WARN_PROTOTYPE 35
-#define WARN_QW 36
-#define WARN_RESERVED 37
-#define WARN_SEMICOLON 38
-#define WARN_TAINT 39
-#define WARN_UMASK 40
-#define WARN_UNINITIALIZED 41
-#define WARN_UNPACK 42
-#define WARN_UNTIE 43
-#define WARN_UTF8 44
-#define WARN_VOID 45
-#define WARN_Y2K 46
-
-#define WARNsize 12
-#define WARN_ALLstring "\125\125\125\125\125\125\125\125\125\125\125\125"
-#define WARN_NONEstring "\0\0\0\0\0\0\0\0\0\0\0\0"
-
-#define isLEXWARN_on (PL_curcop->cop_warnings != pWARN_STD)
-#define isLEXWARN_off (PL_curcop->cop_warnings == pWARN_STD)
-#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
-#define isWARN_on(c,x) (IsSet(SvPVX(c), 2*(x)))
-#define isWARNf_on(c,x) (IsSet(SvPVX(c), 2*(x)+1))
-
-#define ckDEAD(x) \
- ( ! specialWARN(PL_curcop->cop_warnings) && \
- ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) || \
- isWARNf_on(PL_curcop->cop_warnings, x)))
-
-#define ckWARN(x) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN2(x,y) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN_d(x) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- isWARN_on(PL_curcop->cop_warnings, x) ) )
-
-#define ckWARN2_d(x,y) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) )
-
-/* end of file warnings.h */
-
diff --git a/contrib/perl5/warnings.pl b/contrib/perl5/warnings.pl
deleted file mode 100644
index 2205d1f..0000000
--- a/contrib/perl5/warnings.pl
+++ /dev/null
@@ -1,589 +0,0 @@
-#!/usr/bin/perl
-
-BEGIN {
- push @INC, './lib';
-}
-use strict ;
-
-sub DEFAULT_ON () { 1 }
-sub DEFAULT_OFF () { 2 }
-
-my $tree = {
-
-'all' => {
- 'io' => { 'pipe' => DEFAULT_OFF,
- 'unopened' => DEFAULT_OFF,
- 'closed' => DEFAULT_OFF,
- 'newline' => DEFAULT_OFF,
- 'exec' => DEFAULT_OFF,
- },
- 'syntax' => { 'ambiguous' => DEFAULT_OFF,
- 'semicolon' => DEFAULT_OFF,
- 'precedence' => DEFAULT_OFF,
- 'bareword' => DEFAULT_OFF,
- 'reserved' => DEFAULT_OFF,
- 'digit' => DEFAULT_OFF,
- 'parenthesis' => DEFAULT_OFF,
- 'deprecated' => DEFAULT_OFF,
- 'printf' => DEFAULT_OFF,
- 'prototype' => DEFAULT_OFF,
- 'qw' => DEFAULT_OFF,
- },
- 'severe' => { 'inplace' => DEFAULT_ON,
- 'internal' => DEFAULT_ON,
- 'debugging' => DEFAULT_ON,
- 'malloc' => DEFAULT_ON,
- },
- 'void' => DEFAULT_OFF,
- 'recursion' => DEFAULT_OFF,
- 'redefine' => DEFAULT_OFF,
- 'numeric' => DEFAULT_OFF,
- 'uninitialized' => DEFAULT_OFF,
- 'once' => DEFAULT_OFF,
- 'misc' => DEFAULT_OFF,
- 'regexp' => DEFAULT_OFF,
- 'glob' => DEFAULT_OFF,
- 'y2k' => DEFAULT_OFF,
- 'chmod' => DEFAULT_OFF,
- 'umask' => DEFAULT_OFF,
- 'untie' => DEFAULT_OFF,
- 'substr' => DEFAULT_OFF,
- 'taint' => DEFAULT_OFF,
- 'signal' => DEFAULT_OFF,
- 'closure' => DEFAULT_OFF,
- 'overflow' => DEFAULT_OFF,
- 'portable' => DEFAULT_OFF,
- 'utf8' => DEFAULT_OFF,
- 'exiting' => DEFAULT_OFF,
- 'pack' => DEFAULT_OFF,
- 'unpack' => DEFAULT_OFF,
- #'default' => DEFAULT_ON,
- }
-} ;
-
-
-###########################################################################
-sub tab {
- my($l, $t) = @_;
- $t .= "\t" x ($l - (length($t) + 1) / 8);
- $t;
-}
-
-###########################################################################
-
-my %list ;
-my %Value ;
-my $index ;
-
-sub walk
-{
- my $tre = shift ;
- my @list = () ;
- my ($k, $v) ;
-
- foreach $k (sort keys %$tre) {
- $v = $tre->{$k};
- die "duplicate key $k\n" if defined $list{$k} ;
- $Value{$index} = uc $k ;
- push @{ $list{$k} }, $index ++ ;
- if (ref $v)
- { push (@{ $list{$k} }, walk ($v)) }
- push @list, @{ $list{$k} } ;
- }
-
- return @list ;
-}
-
-###########################################################################
-
-sub mkRange
-{
- my @a = @_ ;
- my @out = @a ;
- my $i ;
-
-
- for ($i = 1 ; $i < @a; ++ $i) {
- $out[$i] = ".."
- if $a[$i] == $a[$i - 1] + 1 && $a[$i] + 1 == $a[$i + 1] ;
- }
-
- my $out = join(",",@out);
-
- $out =~ s/,(\.\.,)+/../g ;
- return $out;
-}
-
-###########################################################################
-sub printTree
-{
- my $tre = shift ;
- my $prefix = shift ;
- my $indent = shift ;
- my ($k, $v) ;
-
- my $max = (sort {$a <=> $b} map { length $_ } keys %$tre)[-1] ;
-
- $prefix .= " " x $indent ;
- foreach $k (sort keys %$tre) {
- $v = $tre->{$k};
- print $prefix . "|\n" ;
- print $prefix . "+- $k" ;
- if (ref $v)
- {
- print " " . "-" x ($max - length $k ) . "+\n" ;
- printTree ($v, $prefix . "|" , $max + $indent - 1)
- }
- else
- { print "\n" }
- }
-
-}
-
-###########################################################################
-
-sub mkHex
-{
- my ($max, @a) = @_ ;
- my $mask = "\x00" x $max ;
- my $string = "" ;
-
- foreach (@a) {
- vec($mask, $_, 1) = 1 ;
- }
-
- #$string = unpack("H$max", $mask) ;
- #$string =~ s/(..)/\x$1/g;
- foreach (unpack("C*", $mask)) {
- $string .= '\x' . sprintf("%2.2x", $_) ;
- }
- return $string ;
-}
-
-###########################################################################
-
-if (@ARGV && $ARGV[0] eq "tree")
-{
- #print " all -+\n" ;
- printTree($tree, " ", 4) ;
- exit ;
-}
-
-unlink "warnings.h";
-unlink "lib/warnings.pm";
-open(WARN, ">warnings.h") || die "Can't create warnings.h: $!\n";
-open(PM, ">lib/warnings.pm") || die "Can't create lib/warnings.pm: $!\n";
-
-print WARN <<'EOM' ;
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- This file is built by warnings.pl
- Any changes made here will be lost!
-*/
-
-
-#define Off(x) ((x) / 8)
-#define Bit(x) (1 << ((x) % 8))
-#define IsSet(a, x) ((a)[Off(x)] & Bit(x))
-
-
-#define G_WARN_OFF 0 /* $^W == 0 */
-#define G_WARN_ON 1 /* -w flag and $^W != 0 */
-#define G_WARN_ALL_ON 2 /* -W flag */
-#define G_WARN_ALL_OFF 4 /* -X flag */
-#define G_WARN_ONCE 8 /* set if 'once' ever enabled */
-#define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF)
-
-#define pWARN_STD Nullsv
-#define pWARN_ALL (Nullsv+1) /* use warnings 'all' */
-#define pWARN_NONE (Nullsv+2) /* no warnings 'all' */
-
-#define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \
- (x) == pWARN_NONE)
-EOM
-
-my $offset = 0 ;
-
-$index = $offset ;
-#@{ $list{"all"} } = walk ($tree) ;
-walk ($tree) ;
-
-
-$index *= 2 ;
-my $warn_size = int($index / 8) + ($index % 8 != 0) ;
-
-my $k ;
-foreach $k (sort { $a <=> $b } keys %Value) {
- print WARN tab(5, "#define WARN_$Value{$k}"), "$k\n" ;
-}
-print WARN "\n" ;
-
-print WARN tab(5, '#define WARNsize'), "$warn_size\n" ;
-#print WARN tab(5, '#define WARN_ALLstring'), '"', ('\377' x $warn_size) , "\"\n" ;
-print WARN tab(5, '#define WARN_ALLstring'), '"', ('\125' x $warn_size) , "\"\n" ;
-print WARN tab(5, '#define WARN_NONEstring'), '"', ('\0' x $warn_size) , "\"\n" ;
-
-print WARN <<'EOM';
-
-#define isLEXWARN_on (PL_curcop->cop_warnings != pWARN_STD)
-#define isLEXWARN_off (PL_curcop->cop_warnings == pWARN_STD)
-#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
-#define isWARN_on(c,x) (IsSet(SvPVX(c), 2*(x)))
-#define isWARNf_on(c,x) (IsSet(SvPVX(c), 2*(x)+1))
-
-#define ckDEAD(x) \
- ( ! specialWARN(PL_curcop->cop_warnings) && \
- ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) || \
- isWARNf_on(PL_curcop->cop_warnings, x)))
-
-#define ckWARN(x) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN2(x,y) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN_d(x) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- isWARN_on(PL_curcop->cop_warnings, x) ) )
-
-#define ckWARN2_d(x,y) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) )
-
-/* end of file warnings.h */
-
-EOM
-
-close WARN ;
-
-while (<DATA>) {
- last if /^KEYWORDS$/ ;
- print PM $_ ;
-}
-
-#$list{'all'} = [ $offset .. 8 * ($warn_size/2) - 1 ] ;
-
-#my %Keys = map {lc $Value{$_}, $_} keys %Value ;
-
-print PM "%Offsets = (\n" ;
-foreach my $k (sort { $a <=> $b } keys %Value) {
- my $v = lc $Value{$k} ;
- $k *= 2 ;
- print PM tab(4, " '$v'"), "=> $k,\n" ;
-}
-
-print PM " );\n\n" ;
-
-print PM "%Bits = (\n" ;
-foreach $k (sort keys %list) {
-
- my $v = $list{$k} ;
- my @list = sort { $a <=> $b } @$v ;
-
- print PM tab(4, " '$k'"), '=> "',
- # mkHex($warn_size, @list),
- mkHex($warn_size, map $_ * 2 , @list),
- '", # [', mkRange(@list), "]\n" ;
-}
-
-print PM " );\n\n" ;
-
-print PM "%DeadBits = (\n" ;
-foreach $k (sort keys %list) {
-
- my $v = $list{$k} ;
- my @list = sort { $a <=> $b } @$v ;
-
- print PM tab(4, " '$k'"), '=> "',
- # mkHex($warn_size, @list),
- mkHex($warn_size, map $_ * 2 + 1 , @list),
- '", # [', mkRange(@list), "]\n" ;
-}
-
-print PM " );\n\n" ;
-print PM '$NONE = "', ('\0' x $warn_size) , "\";\n" ;
-print PM '$LAST_BIT = ' . "$index ;\n" ;
-print PM '$BYTES = ' . "$warn_size ;\n" ;
-while (<DATA>) {
- print PM $_ ;
-}
-
-close PM ;
-
-__END__
-
-# This file was created by warnings.pl
-# Any changes made here will be lost.
-#
-
-package warnings;
-
-=head1 NAME
-
-warnings - Perl pragma to control optional warnings
-
-=head1 SYNOPSIS
-
- use warnings;
- no warnings;
-
- use warnings "all";
- no warnings "all";
-
- use warnings::register;
- if (warnings::enabled()) {
- warnings::warn("some warning");
- }
-
- if (warnings::enabled("void")) {
- warnings::warn("void", "some warning");
- }
-
- if (warnings::enabled($object)) {
- warnings::warn($object, "some warning");
- }
-
- warnif("some warning");
- warnif("void", "some warning");
- warnif($object, "some warning");
-
-=head1 DESCRIPTION
-
-If no import list is supplied, all possible warnings are either enabled
-or disabled.
-
-A number of functions are provided to assist module authors.
-
-=over 4
-
-=item use warnings::register
-
-Creates a new warnings category with the same name as the package where
-the call to the pragma is used.
-
-=item warnings::enabled()
-
-Use the warnings category with the same name as the current package.
-
-Return TRUE if that warnings category is enabled in the calling module.
-Otherwise returns FALSE.
-
-=item warnings::enabled($category)
-
-Return TRUE if the warnings category, C<$category>, is enabled in the
-calling module.
-Otherwise returns FALSE.
-
-=item warnings::enabled($object)
-
-Use the name of the class for the object reference, C<$object>, as the
-warnings category.
-
-Return TRUE if that warnings category is enabled in the first scope
-where the object is used.
-Otherwise returns FALSE.
-
-=item warnings::warn($message)
-
-Print C<$message> to STDERR.
-
-Use the warnings category with the same name as the current package.
-
-If that warnings category has been set to "FATAL" in the calling module
-then die. Otherwise return.
-
-=item warnings::warn($category, $message)
-
-Print C<$message> to STDERR.
-
-If the warnings category, C<$category>, has been set to "FATAL" in the
-calling module then die. Otherwise return.
-
-=item warnings::warn($object, $message)
-
-Print C<$message> to STDERR.
-
-Use the name of the class for the object reference, C<$object>, as the
-warnings category.
-
-If that warnings category has been set to "FATAL" in the scope where C<$object>
-is first used then die. Otherwise return.
-
-
-=item warnings::warnif($message)
-
-Equivalent to:
-
- if (warnings::enabled())
- { warnings::warn($message) }
-
-=item warnings::warnif($category, $message)
-
-Equivalent to:
-
- if (warnings::enabled($category))
- { warnings::warn($category, $message) }
-
-=item warnings::warnif($object, $message)
-
-Equivalent to:
-
- if (warnings::enabled($object))
- { warnings::warn($object, $message) }
-
-=back
-
-See L<perlmodlib/Pragmatic Modules> and L<perllexwarn>.
-
-=cut
-
-use Carp ;
-
-KEYWORDS
-
-$All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
-
-sub bits {
- my $mask ;
- my $catmask ;
- my $fatal = 0 ;
- foreach my $word (@_) {
- if ($word eq 'FATAL') {
- $fatal = 1;
- }
- elsif ($catmask = $Bits{$word}) {
- $mask |= $catmask ;
- $mask |= $DeadBits{$word} if $fatal ;
- }
- else
- { croak("unknown warnings category '$word'")}
- }
-
- return $mask ;
-}
-
-sub import {
- shift;
- my $mask = ${^WARNING_BITS} ;
- if (vec($mask, $Offsets{'all'}, 1)) {
- $mask |= $Bits{'all'} ;
- $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
- }
- ${^WARNING_BITS} = $mask | bits(@_ ? @_ : 'all') ;
-}
-
-sub unimport {
- shift;
- my $mask = ${^WARNING_BITS} ;
- if (vec($mask, $Offsets{'all'}, 1)) {
- $mask |= $Bits{'all'} ;
- $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
- }
- ${^WARNING_BITS} = $mask & ~ (bits(@_ ? @_ : 'all') | $All) ;
-}
-
-sub __chk
-{
- my $category ;
- my $offset ;
- my $isobj = 0 ;
-
- if (@_) {
- # check the category supplied.
- $category = shift ;
- if (ref $category) {
- croak ("not an object")
- if $category !~ /^([^=]+)=/ ;+
- $category = $1 ;
- $isobj = 1 ;
- }
- $offset = $Offsets{$category};
- croak("unknown warnings category '$category'")
- unless defined $offset;
- }
- else {
- $category = (caller(1))[0] ;
- $offset = $Offsets{$category};
- croak("package '$category' not registered for warnings")
- unless defined $offset ;
- }
-
- my $this_pkg = (caller(1))[0] ;
- my $i = 2 ;
- my $pkg ;
-
- if ($isobj) {
- while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
- last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
- }
- $i -= 2 ;
- }
- else {
- for ($i = 2 ; $pkg = (caller($i))[0] ; ++ $i) {
- last if $pkg ne $this_pkg ;
- }
- $i = 2
- if !$pkg || $pkg eq $this_pkg ;
- }
-
- my $callers_bitmask = (caller($i))[9] ;
- return ($callers_bitmask, $offset, $i) ;
-}
-
-sub enabled
-{
- croak("Usage: warnings::enabled([category])")
- unless @_ == 1 || @_ == 0 ;
-
- my ($callers_bitmask, $offset, $i) = __chk(@_) ;
-
- return 0 unless defined $callers_bitmask ;
- return vec($callers_bitmask, $offset, 1) ||
- vec($callers_bitmask, $Offsets{'all'}, 1) ;
-}
-
-
-sub warn
-{
- croak("Usage: warnings::warn([category,] 'message')")
- unless @_ == 2 || @_ == 1 ;
-
- my $message = pop ;
- my ($callers_bitmask, $offset, $i) = __chk(@_) ;
- local $Carp::CarpLevel = $i ;
- croak($message)
- if vec($callers_bitmask, $offset+1, 1) ||
- vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
- carp($message) ;
-}
-
-sub warnif
-{
- croak("Usage: warnings::warnif([category,] 'message')")
- unless @_ == 2 || @_ == 1 ;
-
- my $message = pop ;
- my ($callers_bitmask, $offset, $i) = __chk(@_) ;
- local $Carp::CarpLevel = $i ;
-
- return
- unless defined $callers_bitmask &&
- (vec($callers_bitmask, $offset, 1) ||
- vec($callers_bitmask, $Offsets{'all'}, 1)) ;
-
- croak($message)
- if vec($callers_bitmask, $offset+1, 1) ||
- vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
-
- carp($message) ;
-}
-1;
diff --git a/contrib/perl5/writemain.SH b/contrib/perl5/writemain.SH
deleted file mode 100755
index 18544c1..0000000
--- a/contrib/perl5/writemain.SH
+++ /dev/null
@@ -1,108 +0,0 @@
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-echo "Extracting writemain (with variable substitutions)"
-: This section of the file will have variable substitutions done on it.
-: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
-: Protect any dollar signs and backticks that you do not want interpreted
-: by putting a backslash in front. You may delete these comments.
-rm -f writemain
-$spitshell >writemain <<!GROK!THIS!
-$startsh
-!GROK!THIS!
-
-: In the following dollars and backticks do not need the extra backslash.
-$spitshell >>writemain <<'!NO!SUBS!'
-# This script takes the plain miniperlmain.c and writes out perlmain.c
-# which includes all the extensions.
-# The command line arguments name extensions to be used.
-# E.g.: sh writemain SDBM_File POSIX > perlmain.c
-#
-
-orig="$*"
-args=''
-: Remove any .a suffixes and any leading path components
-for file in $orig ; do
- case "$file" in
- *.a) file=`echo $file | sed 's/\.a//g'`
- ;;
- esac
- case "$file" in
- ext/*) file=`echo $file | sed 's:ext/\(.*\)/[^/]*:\1:'`
- ;;
- lib/auto/*) file=`echo $file | sed 's:lib/auto/\(.*\)/[^/]*:\1:'`
- ;;
- */*)
- file=`expr X$file : 'X.*/\(.*\)'`
- ;;
- esac
- args="$args $file"
-done
-
-
-sed '/Do not delete this line--writemain depends on it/q' miniperlmain.c
-
-
-if test X"$args" != "X" ; then
- for ext in $args ; do
-: $ext will either be 'Name' or 'Name1/Name2' etc
-: convert ext into cname and mname
-mname=`echo $ext | sed 's!/!::!g'`
-cname=`echo $mname | sed 's!:!_!g'`
-
-echo "EXTERN_C void boot_${cname} (pTHX_ CV* cv);"
- done
-fi
-
-cat << 'EOP'
-
-static void
-xs_init(pTHX)
-{
-EOP
-
-if test X"$args" != "X" ; then
- echo " char *file = __FILE__;"
- echo " dXSUB_SYS;"
-
- ai=''
-
- for ext in $args ; do
-
- : $ext will either be 'Name' or 'Name1/Name2' etc
- : convert ext into cname and mname
- mname=`echo $ext | sed 's!/!::!g'`
- cname=`echo $mname | sed 's!:!_!g'`
-
- if test "$ext" = "DynaLoader"; then
- : Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
- : boot_DynaLoader is called directly in DynaLoader.pm
- echo " newXS(\"${mname}::boot_${ext}\", boot_${cname}, file);"
- else
- echo " newXS(\"${mname}::bootstrap\", boot_${cname}, file);"
- fi
- done
-fi
-
-cat << 'EOP'
-}
-EOP
-
-!NO!SUBS!
-chmod 755 writemain
-$eunicefix writemain
diff --git a/contrib/perl5/x2p/EXTERN.h b/contrib/perl5/x2p/EXTERN.h
deleted file mode 100644
index 80fffb4..0000000
--- a/contrib/perl5/x2p/EXTERN.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* $RCSfile: EXTERN.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:05 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: EXTERN.h,v $
- */
-
-#undef EXT
-#define EXT extern
-
-#undef INIT
-#define INIT(x)
-
-#undef DOINIT
diff --git a/contrib/perl5/x2p/INTERN.h b/contrib/perl5/x2p/INTERN.h
deleted file mode 100644
index 2303ea3..0000000
--- a/contrib/perl5/x2p/INTERN.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* $RCSfile: INTERN.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:06 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: INTERN.h,v $
- */
-
-#undef EXT
-#define EXT
-
-#undef INIT
-#define INIT(x) = x
-
-#define DOINIT
diff --git a/contrib/perl5/x2p/Makefile.SH b/contrib/perl5/x2p/Makefile.SH
deleted file mode 100755
index a0ba96a..0000000
--- a/contrib/perl5/x2p/Makefile.SH
+++ /dev/null
@@ -1,186 +0,0 @@
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/Makefile.SH) cd `expr X$0 : 'X\(.*\)/'` ;;
-Makefile.SH) ;;
-*) case `pwd` in
- */x2p) ;;
- *) if test -d x2p; then cd x2p
- else echo "Can't figure out where to write output."; exit 1
- fi;;
- esac;;
-esac
-
-echo "Extracting x2p/Makefile (with variable substitutions)"
-rm -f Makefile
-cat >Makefile <<!GROK!THIS!
-# $RCSfile: Makefile.SH,v $$Revision: 4.1 $$Date: 92/08/07 18:29:07 $
-#
-# $Log: Makefile.SH,v $
-
-CC = $cc
-BYACC = $byacc
-LDFLAGS = $ldflags
-# XXX Perl malloc temporarily unusable (declaration collisions with stdlib.h)
-#mallocsrc = $mallocsrc
-#mallocobj = $mallocobj
-shellflags = $shellflags
-
-libs = $libs
-
-$make_set_make
-# grrr
-SHELL = $sh
-
-# These variables may need to be manually set for non-Unix systems.
-AR = $ar
-EXE_EXT = $_ext
-LIB_EXT = $_a
-OBJ_EXT = $_o
-PATH_SEP = $p_
-
-FIRSTMAKEFILE = $firstmakefile
-
-# how to tr(anslate) newlines
-
-TRNL = '$trnl'
-
-.SUFFIXES: .c \$(OBJ_EXT)
-
-!GROK!THIS!
-
-cat >>Makefile <<'!NO!SUBS!'
-
-REALPERL = ../perl
-CCCMD = `sh $(shellflags) cflags $@`
-
-public = a2p s2p find2perl
-
-private =
-
-manpages = a2p.man s2p.man
-
-util =
-
-sh = Makefile.SH cflags.SH
-shextract = Makefile cflags
-
-pl = find2perl.PL s2p.PL
-plextract = find2perl s2p
-plexe = find2perl.exe s2p.exe
-plc = find2perl.c s2p.c
-plm = a2p.loadmap
-
-addedbyconf = $(shextract) $(plextract)
-
-h = EXTERN.h INTERN.h ../config.h ../handy.h hash.h a2p.h str.h util.h
-
-c = hash.c $(mallocsrc) str.c util.c walk.c
-
-obj = hash$(OBJ_EXT) $(mallocobj) str$(OBJ_EXT) util$(OBJ_EXT) walk$(OBJ_EXT)
-
-lintflags = -phbvxac
-
-
-.c$(OBJ_EXT):
- $(CCCMD) -DPERL_FOR_X2P $*.c
-
-all: $(public) $(private) $(util)
- @echo " "
-
-compile: all
- $(REALPERL) -I../lib ../utils/perlcc -regex 's/$$/.exe/' $(plextract) -prog -verbose dcf -log ../compilelog;
-
-a2p: $(obj) a2p$(OBJ_EXT)
- $(CC) -o a2p $(LDFLAGS) $(obj) a2p$(OBJ_EXT) $(libs)
-
-# I now supply a2p.c with the kits, so the following section is
-# used only if you force byacc to run by saying
-# make run_byacc
-
-run_byacc: FORCE
- @ echo Expect many shift/reduce and reduce/reduce conflicts
- $(BYACC) a2p.y
- rm -f a2p.c
- mv y.tab.c a2p.c
-
-FORCE:
-
-# We don't want to regenerate a2p.c, but it might appear out-of-date
-# after a patch is applied or a new distribution is made.
-a2p.c: a2p.y
- -@sh -c true
-
-a2p$(OBJ_EXT): a2p.c a2py.c a2p.h EXTERN.h util.h INTERN.h \
- ../handy.h ../config.h str.h hash.h
- $(CCCMD) a2p.c
-
-clean:
- rm -f a2p *$(OBJ_EXT) $(plexe) $(plc) $(plm)
-
-realclean: clean
- rm -f core $(addedbyconf) all malloc.c
- rm -f $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old
-
-veryclean: realclean
- rm -f *~ *.orig
-
-# The following lint has practically everything turned on. Unfortunately,
-# you have to wade through a lot of mumbo jumbo that can't be suppressed.
-# If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message
-# for that spot.
-
-lint:
- lint $(lintflags) $(defs) $(c) > a2p.fuzz
-
-depend: $(mallocsrc) ../makedepend
- sh ../makedepend MAKE=$(MAKE)
-
-clist:
- echo $(c) | tr ' ' $(TRNL) >.clist
-
-hlist:
- echo $(h) | tr ' ' $(TRNL) >.hlist
-
-shlist:
- echo $(sh) | tr ' ' $(TRNL) >.shlist
-
-# These should be automatically generated
-
-$(plextract):
- ../miniperl -I../lib $@.PL
-
-malloc.c: ../malloc.c
- rm -f malloc.c
- sed <../malloc.c >malloc.c \
- -e 's/"EXTERN.h"/"..\/EXTERN.h"/' \
- -e 's/"perl.h"/"..\/perl.h"/' \
- -e 's/my_exit/exit/' \
- -e 's/MUTEX_[A-Z_]*(&PL_malloc_mutex);//'
-
-# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
-$(obj):
- @ echo "You haven't done a "'"make depend" yet!'; exit 1
-makedepend: depend
-!NO!SUBS!
-$eunicefix Makefile
-case `pwd` in
-*SH)
- $rm -f ../Makefile
- $ln Makefile ../Makefile
- ;;
-esac
-rm -f $firstmakefile
diff --git a/contrib/perl5/x2p/a2p.c b/contrib/perl5/x2p/a2p.c
deleted file mode 100644
index cd667a3..0000000
--- a/contrib/perl5/x2p/a2p.c
+++ /dev/null
@@ -1,2807 +0,0 @@
-#ifndef lint
-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91";
-#endif
-#define YYBYACC 1
-#line 2 "a2p.y"
-/* $RCSfile: a2p.y,v $$Revision: 4.1 $$Date: 92/08/07 18:29:12 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: a2p.y,v $
- */
-
-#include "INTERN.h"
-#include "a2p.h"
-
-int root;
-int begins = Nullop;
-int ends = Nullop;
-
-#line 24 "y.tab.c"
-#define BEGIN 257
-#define END 258
-#define REGEX 259
-#define SEMINEW 260
-#define NEWLINE 261
-#define COMMENT 262
-#define FUN1 263
-#define FUNN 264
-#define GRGR 265
-#define PRINT 266
-#define PRINTF 267
-#define SPRINTF_OLD 268
-#define SPRINTF_NEW 269
-#define SPLIT 270
-#define IF 271
-#define ELSE 272
-#define WHILE 273
-#define FOR 274
-#define IN 275
-#define EXIT 276
-#define NEXT 277
-#define BREAK 278
-#define CONTINUE 279
-#define RET 280
-#define GETLINE 281
-#define DO 282
-#define SUB 283
-#define GSUB 284
-#define MATCH 285
-#define FUNCTION 286
-#define USERFUN 287
-#define DELETE 288
-#define ASGNOP 289
-#define OROR 290
-#define ANDAND 291
-#define NUMBER 292
-#define VAR 293
-#define SUBSTR 294
-#define INDEX 295
-#define MATCHOP 296
-#define RELOP 297
-#define OR 298
-#define STRING 299
-#define UMINUS 300
-#define NOT 301
-#define INCR 302
-#define DECR 303
-#define FIELD 304
-#define VFIELD 305
-#define YYERRCODE 256
-short yylhs[] = { -1,
- 0, 3, 6, 6, 2, 2, 7, 7, 7, 7,
- 7, 7, 9, 8, 8, 11, 11, 11, 11, 11,
- 15, 15, 15, 15, 14, 14, 14, 14, 13, 13,
- 13, 13, 12, 12, 12, 12, 18, 18, 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, 17, 17, 17, 17, 10, 10,
- 10, 19, 19, 19, 1, 1, 20, 20, 20, 20,
- 4, 4, 21, 21, 22, 22, 22, 22, 5, 5,
- 23, 23, 23, 23, 26, 26, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 27,
- 27, 27, 25, 25, 25, 25, 25, 25, 25, 25,
-};
-short yylen[] = { 2,
- 2, 6, 5, 2, 3, 0, 1, 5, 10, 4,
- 1, 1, 1, 1, 3, 1, 1, 1, 1, 5,
- 3, 4, 4, 2, 3, 3, 3, 3, 3, 3,
- 1, 3, 1, 2, 5, 3, 1, 1, 1, 1,
- 1, 3, 3, 3, 3, 3, 3, 3, 2, 2,
- 2, 2, 2, 2, 3, 1, 2, 3, 4, 3,
- 4, 1, 3, 4, 4, 4, 4, 2, 8, 6,
- 8, 8, 6, 6, 6, 6, 6, 6, 6, 6,
- 8, 8, 8, 8, 1, 4, 1, 2, 1, 1,
- 0, 4, 4, 3, 2, 0, 1, 1, 1, 1,
- 2, 0, 1, 1, 2, 2, 2, 2, 2, 0,
- 3, 2, 2, 1, 1, 0, 1, 4, 2, 4,
- 2, 1, 1, 1, 2, 1, 1, 2, 5, 1,
- 1, 1, 6, 9, 6, 7, 10, 9, 6, 5,
-};
-short yydefred[] = { 96,
- 0, 0, 98, 99, 100, 97, 0, 95, 0, 0,
- 31, 0, 0, 38, 0, 0, 0, 0, 0, 0,
- 0, 0, 40, 0, 0, 0, 41, 0, 0, 0,
- 0, 0, 87, 0, 102, 0, 11, 0, 96, 0,
- 0, 0, 17, 18, 19, 0, 0, 0, 102, 102,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 24, 51,
- 52, 0, 0, 0, 0, 0, 0, 4, 0, 102,
- 0, 102, 102, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,
- 50, 0, 68, 0, 0, 0, 0, 63, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 103, 104, 0, 101, 55, 32,
- 28, 21, 0, 0, 0, 0, 0, 0, 30, 0,
- 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 102, 102, 0, 0, 64,
- 65, 67, 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 66, 86, 0, 0, 102, 0, 0, 0, 0,
- 0, 0, 123, 122, 126, 0, 102, 0, 102, 10,
- 102, 0, 109, 0, 114, 0, 0, 0, 22, 0,
- 61, 94, 0, 0, 96, 3, 0, 0, 0, 0,
- 0, 0, 0, 102, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 102, 102,
- 102, 102, 102, 8, 0, 0, 0, 0, 0, 73,
- 0, 78, 0, 77, 0, 80, 0, 79, 0, 75,
- 76, 0, 70, 0, 74, 131, 130, 132, 0, 0,
- 0, 0, 0, 115, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 102,
- 0, 0, 0, 102, 102, 102, 0, 0, 0, 102,
- 72, 71, 82, 81, 84, 83, 0, 69, 0, 0,
- 0, 0, 0, 0, 129, 0, 0, 0, 135, 139,
- 0, 0, 0, 9, 102, 102, 0, 136, 0, 0,
- 102, 134, 138, 0, 137,
-};
-short yydgoto[] = { 1,
- 2, 7, 37, 73, 127, 38, 39, 40, 170, 103,
- 74, 192, 43, 44, 45, 46, 47, 48, 105, 8,
- 128, 233, 193, 194, 195, 265, 259,
-};
-short yysindex[] = { 0,
- 0, -52, 0, 0, 0, 0, 2796, 0, -90, -86,
- 0, 17, 25, 0, 38, 44, -57, 45, 47, 48,
- -219, 49, 0, -1, 51, 52, 0, 7708, 7708, 6350,
- -238, -238, 0, 7708, 0, 6350, 0, -165, 0, -21,
- -12, 5968, 0, 0, 0, -32, -253, 7759, 0, 0,
- 7372, 7759, 7759, 7708, 7708, 46, 7419, 7473, 7708, 65,
- 7759, 7759, 7708, 7708, 6350, -54, -228, -54, 0, 0,
- 0, -5, -185, -41, 71, 76, 80, 0, -52, 0,
- 7708, 0, 0, 6350, 7708, 7528, 7708, 7708, 7708, -32,
- -171, 7708, 7708, 7708, 7708, 7708, 7708, -152, 6350, 0,
- 0, 6397, 0, 6481, 86, -185, -185, 0, 6528, 90,
- 91, 6583, 184, 7708, 89, 6630, 93, 6673, 6716, 7759,
- 94, 41, 6761, 6816, 0, 0, 5228, 0, 0, 0,
- 0, 0, -185, 6863, 6015, 6015, -49, 6906, 0, 184,
- 184, 184, 184, 0, -8, -8, -54, -54, -54, -54,
- -238, -49, 6397, 5924, 28, 0, 0, 5320, 5411, 0,
- 0, 0, -154, 184, 7708, 7708, 7708, 7708, 7575, 100,
- 0, 0, 0, 7708, 7708, 0, 7759, 7759, 104, 105,
- 117, 7708, 0, 0, 0, 7708, 0, -151, 0, 0,
- 0, 7618, 0, -43, 0, 5495, 7708, -129, 0, 7708,
- 0, 0, 3816, 3816, 0, 0, 29, 6062, 6119, 6203,
- 6248, 122, 6949, 0, 6295, 6994, -185, -45, -45, 6350,
- 6350, 4306, 7618, 7618, 4429, 81, -185, -185, 0, 0,
- 0, 0, 0, 0, 7618, 7618, 7618, 7618, -52, 0,
- 7665, 0, 7708, 0, 7708, 0, 7708, 0, 7708, 0,
- 0, -96, 0, 7708, 0, 0, 0, 0, 7708, 7708,
- -39, -37, 7049, 0, 108, -97, 7759, 5586, -185, -185,
- -185, -185, -185, 136, 7096, 7139, 7182, 7227, 7282, 0,
- 7329, 7618, 7618, 0, 0, 0, 3890, 138, 88, 0,
- 0, 0, 0, 0, 0, 0, -185, 0, 4429, 4429,
- 4429, 4306, -51, 6350, 0, -185, 5678, -89, 0, 0,
- 141, 4306, -35, 0, 0, 0, 143, 0, 4429, 4429,
- 0, 0, 0, 4429, 0,
-};
-short yyrindex[] = { 0,
- 0, 2452, 0, 0, 0, 0, 185, 0, 0, 0,
- 0, 56, 0, 0, 111, 0, 2886, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2279, 0, 2328,
- 2048, 4023, 0, 0, 0, 2120, 1671, 3590, 0, 0,
- 0, 145, 145, 0, 0, 382, 0, 0, 0, 0,
- 145, 95, 0, 0, 0, 818, 872, 946, 0, 0,
- 0, 437, 5769, 0, -16, -10, 18, 0, 2511, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3951, 492, 5769, 5769, 0, 0, 0,
- 0, 0, 2934, 0, 0, 0, 0, 0, 0, 145,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5769, 0, 0, 0, 2221, 0, 0, 2982,
- 3222, 3267, 3312, 0, 1781, 1854, 1217, 1271, 1325, 1400,
- 2619, 1726, 0, -23, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3381, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 102, 102, 0, 0,
- 0, 171, 0, 0, 0, 174, 0, 0, 0, 0,
- 0, 242, 0, 0, 0, 0, 0, 763, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4508, 248, 297, 0,
- 0, 128, 350, 358, 0, 0, 5769, 4604, 0, 0,
- 0, 0, 0, 0, 3657, 3705, 3760, 3866, 2561, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 130, 0, 0, 0, 95, 0, 4695, 4779,
- 4870, 4962, 5053, 0, 0, 0, 0, 0, 0, 0,
- 0, 398, 431, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5769, 0, 0, 0,
- 0, 149, 0, 0, 0, 5137, 0, 5853, 0, 0,
- 0, 149, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-};
-short yygindex[] = { 0,
- -30, 0, 0, 4250, -24, 0, 0, 0, 0, 397,
- 24, 4208, -17, -15, -13, 7990, 4404, 0, -82, 0,
- 0, 0, -173, -192, 0, -277, -28,
-};
-#define YYTABLESIZE 8273
-short yytable[] = { 129,
- 85, 284, 55, 285, 96, 318, 6, 312, 79, 94,
- 92, 81, 93, 81, 95, 232, 257, 16, 75, 155,
- 76, 81, 77, 81, 311, 81, 280, 81, 96, 264,
- 41, 84, 49, 94, 317, 99, 50, 85, 95, 97,
- 85, 85, 85, 85, 85, 85, 17, 85, 100, 101,
- 81, 266, 18, 69, 24, 62, 51, 98, 85, 85,
- 85, 97, 85, 85, 52, 33, 34, 60, 202, 240,
- 155, 157, 241, 100, 101, 125, 126, 53, 258, 98,
- 19, 158, 159, 54, 57, 97, 58, 59, 61, 62,
- 63, 64, 62, 85, 85, 78, 62, 62, 62, 62,
- 62, 80, 62, 98, 120, 114, 98, 137, 196, 264,
- 37, 130, 85, 62, 62, 62, 131, 62, 62, 264,
- 132, 144, 152, 85, 85, 308, 309, 310, 151, 157,
- 161, 162, 165, 173, 172, 75, 167, 76, 207, 77,
- 214, 226, 91, 220, 221, 322, 323, 37, 62, 62,
- 325, 37, 37, 37, 37, 37, 222, 37, 198, 199,
- 91, 83, 250, 91, 125, 126, 287, 62, 37, 37,
- 37, 267, 37, 37, 239, 288, 291, 304, 62, 62,
- 305, 316, 315, 321, 1, 91, 116, 91, 117, 116,
- 260, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 268, 37, 37, 0, 0, 3, 4, 5,
- 0, 124, 0, 0, 127, 0, 229, 230, 231, 256,
- 0, 0, 37, 65, 0, 91, 28, 0, 29, 124,
- 0, 0, 127, 37, 37, 24, 0, 0, 82, 83,
- 82, 83, 91, 261, 262, 0, 33, 34, 82, 83,
- 82, 83, 82, 83, 82, 83, 0, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 16, 16, 85, 85,
- 85, 0, 307, 17, 17, 85, 0, 82, 83, 18,
- 18, 85, 117, 85, 85, 85, 85, 85, 119, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 0, 85,
- 117, 85, 85, 85, 85, 85, 119, 19, 19, 0,
- 303, 0, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 0, 0, 62, 62, 62, 0, 313, 0, 0,
- 62, 0, 0, 0, 0, 0, 62, 121, 62, 62,
- 62, 62, 62, 0, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 0, 62, 121, 62, 62, 62, 62,
- 62, 91, 91, 91, 0, 0, 91, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 0, 0, 37, 37,
- 37, 57, 0, 0, 0, 37, 0, 0, 0, 0,
- 125, 37, 0, 37, 37, 37, 37, 37, 128, 37,
- 37, 37, 37, 37, 37, 37, 37, 37, 125, 37,
- 0, 37, 37, 37, 37, 37, 128, 0, 57, 0,
- 0, 57, 57, 57, 57, 57, 57, 0, 57, 0,
- 124, 124, 124, 127, 127, 127, 88, 0, 118, 57,
- 57, 0, 0, 57, 57, 0, 12, 13, 110, 111,
- 0, 14, 15, 16, 0, 0, 118, 121, 122, 0,
- 0, 0, 0, 0, 17, 0, 18, 19, 20, 0,
- 22, 120, 0, 88, 57, 57, 88, 88, 88, 88,
- 88, 88, 27, 88, 0, 31, 32, 33, 34, 120,
- 0, 90, 0, 57, 88, 88, 88, 0, 88, 88,
- 0, 117, 117, 117, 57, 57, 0, 119, 119, 119,
- 0, 0, 0, 0, 0, 0, 171, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 90, 88,
- 88, 90, 90, 90, 90, 0, 90, 0, 90, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 90,
- 90, 90, 0, 90, 90, 0, 121, 121, 121, 88,
- 88, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 218, 219, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 90, 90, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 90, 0, 0, 0, 0, 0, 125,
- 125, 125, 0, 0, 90, 90, 0, 128, 128, 128,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 57, 57,
- 57, 57, 57, 57, 57, 57, 57, 0, 0, 57,
- 57, 57, 0, 0, 0, 0, 57, 118, 118, 118,
- 0, 0, 57, 289, 57, 57, 57, 57, 57, 0,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 0,
- 57, 0, 57, 57, 57, 57, 57, 0, 0, 0,
- 120, 120, 120, 88, 88, 88, 88, 88, 88, 88,
- 88, 88, 0, 0, 88, 88, 88, 0, 0, 0,
- 0, 88, 0, 0, 0, 0, 0, 88, 0, 88,
- 88, 88, 88, 88, 0, 88, 88, 88, 88, 88,
- 88, 88, 88, 88, 0, 88, 0, 88, 88, 88,
- 88, 88, 0, 0, 0, 0, 0, 0, 90, 90,
- 90, 90, 90, 90, 90, 90, 90, 0, 0, 90,
- 90, 90, 23, 0, 0, 0, 90, 0, 0, 0,
- 0, 0, 90, 0, 90, 90, 90, 90, 90, 0,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 0,
- 90, 0, 90, 90, 90, 90, 90, 0, 0, 23,
- 0, 0, 23, 23, 23, 23, 23, 23, 0, 23,
- 0, 0, 0, 0, 0, 0, 0, 54, 0, 0,
- 23, 23, 23, 0, 23, 23, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 54, 23, 23, 54, 54, 54,
- 54, 54, 54, 0, 54, 0, 0, 0, 0, 0,
- 0, 39, 0, 0, 23, 54, 54, 54, 0, 54,
- 54, 0, 0, 0, 0, 23, 23, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 39, 0,
- 54, 39, 39, 39, 39, 39, 39, 0, 39, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 39,
- 39, 39, 0, 39, 39, 0, 0, 0, 0, 0,
- 54, 54, 0, 0, 0, 53, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 39, 39, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 53, 39, 0, 53, 53, 53, 53, 53,
- 53, 0, 53, 0, 39, 39, 0, 0, 0, 0,
- 0, 0, 0, 53, 53, 53, 0, 53, 53, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,
- 23, 23, 23, 23, 23, 23, 23, 23, 0, 0,
- 23, 23, 23, 0, 0, 0, 0, 23, 53, 0,
- 0, 0, 0, 23, 0, 23, 23, 23, 23, 23,
- 0, 23, 23, 0, 23, 23, 23, 23, 23, 23,
- 0, 23, 0, 23, 23, 23, 23, 23, 53, 53,
- 0, 0, 0, 0, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 0, 0, 54, 54, 54, 0, 0,
- 0, 0, 54, 0, 0, 0, 0, 0, 54, 0,
- 54, 54, 54, 54, 54, 0, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 0, 54, 0, 54, 54,
- 54, 54, 54, 0, 0, 0, 0, 0, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 0, 0, 39,
- 39, 39, 0, 0, 0, 0, 39, 0, 0, 0,
- 0, 0, 39, 0, 39, 39, 39, 39, 39, 0,
- 39, 39, 39, 39, 39, 39, 39, 39, 39, 0,
- 39, 0, 39, 0, 0, 39, 39, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 53, 53, 53, 53, 53, 53, 53, 53,
- 53, 0, 0, 53, 53, 53, 44, 0, 0, 0,
- 53, 0, 0, 0, 0, 0, 53, 0, 53, 53,
- 53, 53, 53, 0, 53, 53, 53, 53, 53, 53,
- 53, 53, 53, 0, 53, 0, 53, 53, 53, 53,
- 53, 0, 0, 44, 0, 0, 44, 44, 44, 44,
- 44, 44, 0, 44, 0, 0, 0, 0, 0, 0,
- 45, 0, 0, 0, 44, 44, 44, 0, 44, 44,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 45, 0, 44,
- 45, 45, 45, 45, 45, 45, 0, 45, 0, 0,
- 0, 0, 0, 0, 46, 0, 0, 0, 45, 45,
- 45, 0, 45, 45, 0, 0, 0, 0, 0, 44,
- 44, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 46, 0, 45, 46, 46, 46, 46, 46, 46,
- 0, 46, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 46, 46, 46, 0, 46, 46, 0, 0,
- 0, 0, 0, 45, 45, 0, 0, 0, 0, 47,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 46, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 47, 0, 0, 47,
- 47, 47, 47, 47, 47, 0, 47, 46, 46, 0,
- 0, 0, 0, 0, 0, 0, 0, 47, 47, 47,
- 0, 47, 47, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 0, 0, 44, 44, 44, 0, 0, 0,
- 0, 44, 47, 0, 0, 0, 0, 44, 0, 44,
- 44, 44, 44, 44, 0, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 0, 44, 0, 44, 44, 44,
- 44, 44, 47, 47, 0, 0, 0, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 0, 0, 45, 45,
- 45, 0, 0, 0, 0, 45, 0, 0, 0, 0,
- 0, 45, 0, 45, 45, 45, 45, 45, 0, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 0, 45,
- 0, 45, 45, 45, 45, 45, 0, 0, 0, 0,
- 0, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 0, 0, 46, 46, 46, 0, 0, 0, 0, 46,
- 0, 0, 0, 0, 0, 46, 0, 46, 46, 46,
- 46, 46, 0, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 0, 46, 0, 46, 46, 46, 46, 46,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 0, 0, 47, 47, 47,
- 39, 0, 0, 0, 47, 0, 0, 0, 0, 0,
- 47, 0, 47, 47, 47, 47, 47, 0, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 0, 47, 0,
- 47, 47, 47, 47, 47, 0, 0, 39, 0, 0,
- 39, 39, 39, 39, 39, 39, 0, 39, 0, 0,
- 0, 0, 0, 0, 0, 36, 0, 0, 39, 39,
- 39, 0, 39, 39, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 36, 39, 39, 36, 36, 36, 36, 36,
- 36, 0, 36, 0, 0, 0, 0, 0, 0, 0,
- 42, 0, 39, 36, 36, 36, 0, 36, 0, 0,
- 0, 0, 0, 39, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 36,
- 42, 42, 0, 42, 42, 42, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 36, 42, 42,
- 42, 0, 42, 42, 0, 0, 0, 0, 36, 36,
- 0, 0, 0, 43, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 42, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 43, 43, 0, 43, 43, 43, 0,
- 0, 0, 0, 42, 42, 0, 0, 0, 0, 0,
- 0, 43, 43, 43, 0, 43, 43, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 0, 0, 39, 39,
- 39, 0, 0, 0, 0, 39, 43, 0, 0, 0,
- 0, 39, 0, 39, 39, 39, 39, 39, 0, 0,
- 39, 39, 39, 39, 39, 39, 39, 39, 0, 39,
- 0, 39, 0, 0, 39, 39, 43, 43, 0, 0,
- 0, 0, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 0, 0, 36, 36, 36, 0, 0, 0, 0,
- 36, 0, 0, 0, 0, 0, 36, 0, 36, 36,
- 36, 36, 36, 0, 36, 0, 0, 36, 36, 36,
- 36, 36, 36, 0, 36, 0, 36, 36, 36, 36,
- 36, 0, 0, 0, 0, 0, 0, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 0, 14, 42, 42,
- 42, 0, 0, 0, 0, 42, 0, 0, 0, 0,
- 0, 42, 0, 42, 42, 42, 42, 42, 0, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 0, 42,
- 0, 42, 42, 42, 42, 42, 0, 14, 0, 0,
- 14, 0, 14, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 14, 0, 0, 0,
- 43, 43, 43, 43, 43, 43, 43, 43, 43, 33,
- 0, 43, 43, 43, 0, 0, 0, 0, 43, 0,
- 0, 0, 0, 0, 43, 0, 43, 43, 43, 43,
- 43, 0, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 0, 43, 0, 43, 43, 43, 43, 43, 33,
- 33, 0, 0, 33, 0, 0, 0, 0, 0, 34,
- 14, 0, 0, 0, 0, 0, 0, 33, 33, 33,
- 0, 33, 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, 34,
- 34, 0, 33, 34, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 0, 0, 0, 34, 34, 34,
- 0, 34, 34, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 33, 33, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 34, 15, 0, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 15,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 34, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 14, 14, 14, 14, 14, 14,
- 14, 14, 0, 0, 0, 14, 14, 14, 12, 0,
- 0, 12, 0, 12, 0, 0, 0, 7, 14, 0,
- 14, 14, 14, 14, 14, 0, 0, 12, 0, 14,
- 14, 14, 14, 15, 0, 0, 14, 0, 14, 14,
- 14, 14, 14, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
- 7, 0, 7, 0, 0, 0, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 0, 7, 33, 33, 33,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 33, 12, 33, 33, 33, 33, 33, 0, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 0, 33, 0,
- 33, 33, 33, 33, 33, 0, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 0, 0, 34, 34, 34,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 34, 6, 34, 34, 34, 34, 34, 0, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 0, 34, 0,
- 34, 34, 34, 34, 34, 0, 0, 15, 15, 15,
- 15, 15, 15, 15, 15, 0, 0, 0, 15, 15,
- 15, 6, 0, 0, 6, 0, 6, 0, 0, 0,
- 0, 15, 0, 15, 15, 15, 15, 15, 0, 0,
- 5, 0, 15, 15, 15, 15, 0, 0, 0, 15,
- 0, 15, 15, 15, 15, 15, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 12, 12, 12, 0,
- 12, 12, 12, 0, 0, 0, 12, 12, 12, 0,
- 5, 0, 0, 5, 0, 5, 0, 0, 0, 12,
- 2, 12, 12, 12, 12, 12, 0, 0, 0, 0,
- 12, 12, 12, 12, 6, 0, 0, 12, 0, 12,
- 12, 12, 12, 12, 7, 7, 7, 7, 7, 7,
- 7, 7, 0, 0, 0, 7, 7, 7, 0, 0,
- 2, 0, 0, 2, 0, 2, 0, 0, 7, 0,
- 7, 7, 7, 7, 7, 0, 0, 0, 60, 7,
- 7, 7, 7, 0, 0, 0, 7, 0, 7, 7,
- 7, 7, 7, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 60, 0, 0, 60, 60,
- 60, 60, 60, 60, 0, 60, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 60, 60, 60, 0,
- 60, 60, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,
- 6, 60, 60, 0, 6, 6, 0, 0, 0, 6,
- 6, 6, 0, 0, 0, 0, 0, 0, 0, 0,
- 60, 0, 6, 0, 6, 6, 6, 6, 6, 0,
- 0, 60, 60, 6, 6, 6, 6, 0, 0, 0,
- 6, 0, 6, 6, 6, 6, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,
- 0, 0, 0, 5, 5, 0, 0, 0, 5, 5,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 5, 0, 5, 5, 5, 5, 5, 0, 0,
- 0, 0, 5, 5, 5, 5, 0, 0, 0, 5,
- 0, 5, 5, 5, 5, 5, 0, 2, 2, 2,
- 0, 0, 0, 2, 2, 0, 0, 0, 2, 2,
- 2, 0, 0, 0, 0, 36, 0, 0, 28, 0,
- 29, 2, 0, 2, 2, 2, 2, 2, 0, 0,
- 0, 0, 2, 2, 2, 2, 0, 0, 0, 2,
- 0, 2, 2, 2, 2, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 0, 56, 60, 60, 60, 0,
- 0, 0, 0, 60, 0, 0, 0, 0, 0, 60,
- 0, 60, 60, 60, 60, 60, 0, 60, 60, 60,
- 60, 0, 60, 60, 60, 60, 0, 60, 35, 60,
- 60, 60, 56, 0, 0, 56, 56, 56, 56, 56,
- 56, 0, 56, 58, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 56, 56, 0, 0, 56, 56, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 58, 0, 0, 0, 58, 58, 0, 58, 56, 56,
- 58, 29, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 58, 58, 58, 0, 58, 58, 56, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 56, 56,
- 0, 0, 0, 0, 0, 0, 0, 0, 29, 0,
- 0, 0, 29, 29, 0, 29, 58, 58, 29, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 29,
- 29, 29, 0, 29, 29, 58, 0, 0, 0, 0,
- 0, 0, 9, 10, 11, 0, 58, 58, 12, 13,
- 0, 0, 0, 14, 15, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 29, 29, 17, 0, 18, 19,
- 20, 21, 22, 0, 0, 0, 0, 23, 24, 25,
- 26, 0, 0, 29, 27, 0, 30, 31, 32, 33,
- 34, 0, 0, 0, 29, 29, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 0, 0, 56, 56, 56, 0, 0, 0, 0,
- 56, 0, 0, 0, 0, 0, 56, 0, 56, 56,
- 56, 56, 56, 0, 56, 56, 56, 56, 0, 56,
- 56, 56, 56, 0, 56, 0, 56, 56, 56, 0,
- 58, 58, 58, 58, 58, 58, 0, 0, 58, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 58, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,
- 0, 25, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 0, 0, 0, 58, 0, 0, 0, 29, 29,
- 29, 29, 29, 29, 0, 0, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 29, 0, 25, 0,
- 0, 0, 25, 25, 0, 25, 27, 29, 25, 0,
- 29, 29, 29, 29, 29, 29, 29, 29, 29, 25,
- 25, 25, 29, 25, 25, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 27, 0, 0, 0, 27, 27, 0,
- 27, 26, 0, 27, 25, 25, 0, 0, 0, 0,
- 0, 0, 0, 0, 27, 27, 27, 0, 27, 27,
- 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 25, 25, 0, 0, 26, 0,
- 0, 0, 26, 26, 0, 26, 0, 0, 26, 27,
- 27, 0, 0, 0, 0, 0, 0, 0, 0, 26,
- 26, 26, 0, 26, 26, 0, 0, 0, 27, 0,
- 59, 0, 0, 0, 0, 0, 0, 0, 0, 27,
- 27, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 26, 26, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 59, 0, 0,
- 0, 59, 59, 26, 59, 0, 0, 59, 0, 0,
- 0, 0, 0, 0, 26, 26, 0, 0, 59, 59,
- 59, 0, 59, 59, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 59, 59, 0, 0, 0, 25, 25,
- 25, 25, 25, 25, 0, 0, 25, 0, 0, 0,
- 0, 0, 59, 0, 0, 0, 25, 0, 0, 0,
- 0, 0, 0, 59, 59, 0, 0, 25, 0, 0,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 0,
- 0, 0, 25, 27, 27, 27, 27, 27, 27, 0,
- 0, 27, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 27, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 27, 0, 0, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 0, 0, 0, 27, 26, 26,
- 26, 26, 26, 26, 0, 0, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 26, 0, 0, 91,
- 0, 0, 0, 0, 0, 0, 0, 26, 0, 0,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 0,
- 0, 0, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 91, 0, 0, 0,
- 91, 91, 0, 91, 0, 0, 91, 59, 59, 59,
- 59, 59, 59, 0, 0, 59, 0, 91, 91, 91,
- 0, 91, 91, 0, 0, 59, 20, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 59, 0, 0, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 0, 0,
- 0, 59, 91, 91, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 20, 0, 0, 0, 20, 20, 0,
- 20, 91, 0, 20, 35, 0, 0, 0, 0, 0,
- 0, 0, 91, 91, 20, 20, 20, 0, 20, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 35, 0, 0, 0, 35, 35, 0, 35, 20,
- 20, 35, 0, 0, 0, 0, 0, 0, 0, 92,
- 0, 0, 35, 35, 35, 0, 35, 0, 20, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 92, 35, 35, 0,
- 92, 92, 0, 92, 0, 0, 92, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 35, 92, 92, 92,
- 0, 92, 0, 0, 0, 0, 0, 35, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 91, 91, 91, 91,
- 91, 91, 92, 92, 91, 65, 0, 0, 28, 0,
- 29, 0, 0, 0, 91, 93, 0, 0, 0, 0,
- 0, 92, 0, 0, 0, 91, 0, 0, 91, 91,
- 91, 0, 92, 92, 0, 91, 91, 0, 0, 0,
- 91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 93, 0, 0, 0, 93, 93, 0, 93,
- 0, 0, 93, 20, 20, 20, 20, 20, 20, 0,
- 0, 20, 0, 93, 93, 93, 0, 93, 0, 36,
- 0, 20, 28, 0, 29, 0, 0, 0, 0, 0,
- 0, 0, 20, 0, 0, 20, 20, 20, 302, 0,
- 89, 0, 20, 20, 0, 0, 0, 20, 93, 93,
- 0, 35, 35, 35, 35, 35, 35, 0, 0, 35,
- 0, 0, 0, 0, 0, 0, 0, 93, 0, 35,
- 0, 0, 0, 0, 0, 0, 0, 89, 93, 93,
- 35, 89, 89, 35, 35, 35, 0, 89, 0, 0,
- 35, 35, 0, 0, 0, 35, 0, 0, 89, 89,
- 89, 0, 89, 0, 0, 0, 92, 92, 92, 92,
- 92, 92, 16, 0, 92, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 92, 0, 0, 0, 0, 0,
- 0, 0, 0, 89, 89, 92, 0, 0, 92, 92,
- 92, 0, 0, 0, 0, 92, 92, 0, 0, 16,
- 92, 0, 89, 16, 16, 0, 16, 0, 0, 16,
- 0, 0, 0, 89, 89, 0, 125, 126, 12, 13,
- 16, 16, 0, 14, 15, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 17, 0, 18, 19,
- 20, 0, 22, 0, 0, 0, 0, 23, 24, 25,
- 26, 0, 0, 0, 27, 16, 16, 31, 32, 33,
- 34, 0, 93, 93, 93, 93, 93, 93, 0, 0,
- 93, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 93, 0, 0, 0, 0, 16, 16, 0, 11, 0,
- 0, 93, 12, 13, 93, 93, 93, 14, 15, 16,
- 0, 93, 93, 0, 0, 0, 93, 0, 0, 0,
- 17, 0, 18, 19, 20, 0, 22, 0, 0, 0,
- 0, 23, 24, 25, 26, 0, 0, 0, 27, 0,
- 30, 31, 32, 33, 34, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 89, 89, 89,
- 89, 89, 89, 0, 42, 89, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 89, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 89, 42, 0, 89,
- 89, 89, 0, 42, 0, 0, 89, 89, 0, 0,
- 0, 89, 0, 0, 0, 104, 0, 0, 109, 104,
- 104, 112, 113, 0, 116, 118, 119, 0, 104, 104,
- 123, 124, 42, 0, 0, 0, 0, 0, 0, 16,
- 16, 16, 16, 16, 16, 0, 0, 16, 134, 0,
- 0, 42, 138, 140, 141, 142, 143, 16, 106, 107,
- 0, 0, 0, 0, 0, 0, 42, 0, 16, 154,
- 0, 16, 16, 16, 0, 0, 0, 0, 0, 0,
- 0, 164, 0, 16, 0, 0, 0, 104, 0, 133,
- 0, 135, 136, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 42, 42, 0, 65, 0, 0, 28, 0,
- 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 154, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 208, 209, 210, 211, 213, 0, 0, 0,
- 0, 215, 216, 0, 104, 104, 0, 0, 0, 223,
- 0, 0, 0, 224, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 235, 203, 204, 236, 0, 0,
- 237, 238, 0, 0, 0, 0, 0, 0, 0, 0,
- 56, 0, 0, 0, 0, 217, 0, 42, 42, 263,
- 0, 67, 67, 0, 70, 71, 225, 67, 227, 0,
- 228, 0, 0, 0, 0, 67, 0, 0, 275, 0,
- 276, 0, 277, 0, 278, 0, 279, 0, 0, 0,
- 0, 281, 0, 252, 0, 0, 282, 283, 65, 0,
- 0, 28, 0, 29, 104, 0, 0, 0, 269, 270,
- 271, 272, 273, 0, 0, 0, 0, 191, 0, 0,
- 0, 0, 0, 0, 42, 67, 67, 67, 67, 67,
- 67, 0, 0, 0, 0, 0, 0, 67, 0, 0,
- 0, 42, 67, 0, 0, 67, 67, 0, 0, 67,
- 0, 67, 67, 0, 0, 0, 67, 67, 0, 297,
- 0, 0, 0, 299, 300, 301, 0, 67, 0, 306,
- 0, 67, 0, 67, 67, 67, 67, 113, 0, 0,
- 113, 189, 113, 0, 201, 0, 0, 67, 0, 0,
- 0, 0, 0, 0, 319, 320, 113, 67, 12, 13,
- 324, 177, 178, 14, 15, 16, 0, 0, 0, 0,
- 0, 182, 183, 184, 185, 186, 17, 0, 18, 19,
- 20, 0, 22, 188, 0, 67, 0, 23, 24, 25,
- 26, 0, 0, 0, 27, 0, 0, 31, 32, 33,
- 34, 67, 67, 67, 67, 0, 67, 0, 67, 67,
- 0, 0, 0, 0, 0, 0, 67, 67, 0, 0,
- 113, 0, 113, 0, 0, 0, 0, 0, 67, 67,
- 67, 67, 0, 112, 0, 0, 112, 0, 112, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 112, 0, 0, 0, 67, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67, 67,
- 67, 67, 67, 0, 67, 67, 67, 0, 176, 125,
- 126, 12, 13, 0, 177, 178, 14, 15, 16, 179,
- 0, 180, 181, 0, 182, 183, 184, 185, 186, 17,
- 187, 18, 19, 20, 0, 22, 188, 0, 0, 0,
- 23, 24, 25, 26, 0, 0, 112, 27, 112, 0,
- 31, 32, 33, 34, 106, 0, 0, 106, 0, 106,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 106, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 113, 0, 0,
- 113, 113, 0, 113, 113, 113, 113, 113, 113, 113,
- 113, 113, 0, 113, 113, 113, 113, 113, 113, 113,
- 113, 113, 113, 0, 113, 113, 0, 0, 0, 113,
- 113, 113, 113, 0, 0, 0, 113, 0, 0, 113,
- 113, 113, 113, 0, 0, 0, 0, 106, 107, 106,
- 0, 107, 0, 107, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 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, 112, 0, 0, 112, 112, 0, 112,
- 112, 112, 112, 112, 112, 112, 112, 112, 0, 112,
- 112, 112, 112, 112, 112, 112, 112, 112, 112, 0,
- 112, 112, 0, 0, 0, 112, 112, 112, 112, 0,
- 0, 107, 112, 107, 0, 112, 112, 112, 112, 108,
- 0, 0, 108, 0, 108, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 108, 0,
- 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, 0, 106, 106, 0,
- 106, 106, 106, 106, 106, 106, 106, 106, 106, 0,
- 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
- 0, 106, 106, 0, 0, 0, 106, 106, 106, 106,
- 0, 0, 108, 106, 108, 0, 106, 106, 106, 106,
- 0, 105, 0, 0, 105, 0, 105, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 105, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 107, 0,
- 0, 107, 107, 0, 107, 107, 107, 107, 107, 107,
- 107, 107, 107, 0, 107, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 0, 107, 107, 0, 0, 0,
- 107, 107, 107, 107, 0, 0, 0, 107, 0, 0,
- 107, 107, 107, 107, 105, 0, 105, 0, 0, 0,
- 0, 0, 111, 0, 0, 111, 0, 111, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 111, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
- 0, 0, 108, 108, 0, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 0, 108, 108, 108, 108, 108,
- 108, 108, 108, 108, 108, 0, 108, 108, 0, 0,
- 0, 108, 108, 108, 108, 0, 0, 0, 108, 0,
- 0, 108, 108, 108, 108, 111, 140, 111, 0, 140,
- 0, 140, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 140, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 105, 0, 0, 105, 105, 0, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 0, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 0, 105, 105,
- 0, 0, 0, 105, 105, 105, 105, 0, 0, 140,
- 105, 140, 0, 105, 105, 105, 105, 65, 0, 0,
- 28, 0, 29, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 191, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 111, 0, 0, 111, 111, 0, 111, 111,
- 111, 111, 111, 111, 111, 111, 111, 0, 111, 111,
- 111, 111, 111, 111, 111, 111, 111, 111, 0, 111,
- 111, 0, 0, 0, 111, 111, 111, 111, 0, 0,
- 189, 111, 190, 0, 111, 111, 111, 111, 0, 65,
- 0, 0, 28, 0, 29, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 191, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 140, 0, 0, 140,
- 140, 0, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 0, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 0, 140, 140, 0, 0, 0, 140, 140,
- 140, 140, 0, 0, 0, 140, 0, 0, 140, 140,
- 140, 140, 189, 0, 205, 0, 0, 0, 0, 0,
- 65, 0, 0, 28, 0, 29, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 176, 0, 0,
- 12, 13, 0, 177, 178, 14, 15, 16, 179, 0,
- 180, 181, 0, 182, 183, 184, 185, 186, 17, 187,
- 18, 19, 20, 0, 22, 188, 0, 0, 0, 23,
- 24, 25, 26, 0, 0, 0, 27, 0, 0, 31,
- 32, 33, 34, 189, 65, 206, 0, 28, 0, 29,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 191, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 176,
- 0, 0, 12, 13, 0, 177, 178, 14, 15, 16,
- 179, 0, 180, 181, 0, 182, 183, 184, 185, 186,
- 17, 187, 18, 19, 20, 0, 22, 188, 0, 0,
- 0, 23, 24, 25, 26, 0, 0, 189, 27, 234,
- 0, 31, 32, 33, 34, 65, 0, 0, 28, 0,
- 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 191, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 176, 0, 0, 12, 13, 0, 177, 178, 14, 15,
- 16, 179, 0, 180, 181, 0, 182, 183, 184, 185,
- 186, 17, 187, 18, 19, 20, 0, 22, 188, 0,
- 0, 0, 23, 24, 25, 26, 0, 0, 189, 27,
- 290, 0, 31, 32, 33, 34, 0, 65, 0, 0,
- 28, 0, 29, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 191, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 176, 0, 0, 12, 13, 0,
- 177, 178, 14, 15, 16, 179, 0, 180, 181, 0,
- 182, 183, 184, 185, 186, 17, 187, 18, 19, 20,
- 0, 22, 188, 0, 0, 0, 23, 24, 25, 26,
- 0, 0, 0, 27, 0, 0, 31, 32, 33, 34,
- 189, 0, 314, 0, 0, 0, 0, 0, 110, 0,
- 0, 110, 0, 110, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 110, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 176, 0, 0, 12, 13,
- 0, 177, 178, 14, 15, 16, 179, 0, 180, 181,
- 0, 182, 183, 184, 185, 186, 17, 187, 18, 19,
- 20, 0, 22, 188, 0, 0, 0, 23, 24, 25,
- 26, 0, 0, 0, 27, 0, 0, 31, 32, 33,
- 34, 110, 133, 110, 0, 133, 0, 133, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 133, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 176, 0, 0,
- 12, 13, 0, 177, 178, 14, 15, 16, 179, 0,
- 180, 181, 0, 182, 183, 184, 185, 186, 17, 187,
- 18, 19, 20, 65, 22, 188, 28, 156, 29, 23,
- 24, 25, 26, 0, 0, 133, 27, 133, 0, 31,
- 32, 33, 34, 88, 0, 89, 85, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 65, 0, 0,
- 28, 0, 29, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 88, 110, 89,
- 85, 110, 110, 0, 110, 110, 110, 110, 110, 110,
- 0, 110, 110, 0, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 36, 110, 110, 28, 0, 29,
- 110, 110, 110, 110, 0, 0, 0, 110, 0, 0,
- 110, 110, 110, 110, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 65, 242, 0, 28, 243, 29, 0, 0, 0,
- 0, 0, 133, 0, 0, 133, 133, 0, 133, 133,
- 133, 133, 133, 133, 85, 133, 133, 0, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 0, 133,
- 133, 0, 0, 0, 133, 133, 133, 133, 0, 0,
- 0, 133, 0, 0, 133, 133, 133, 133, 65, 244,
- 0, 28, 245, 29, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 85, 0, 0, 0, 0, 12, 13, 0, 0,
- 0, 14, 15, 16, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 0, 18, 19, 20, 0,
- 22, 0, 0, 0, 0, 23, 24, 25, 26, 86,
- 87, 0, 27, 0, 0, 31, 32, 33, 34, 0,
- 12, 13, 0, 0, 0, 14, 15, 16, 0, 0,
- 0, 0, 65, 246, 0, 28, 247, 29, 17, 0,
- 18, 19, 20, 0, 22, 0, 0, 0, 0, 23,
- 24, 25, 26, 86, 87, 85, 27, 0, 0, 31,
- 32, 33, 34, 11, 0, 125, 126, 12, 13, 0,
- 0, 0, 14, 15, 16, 0, 0, 65, 248, 0,
- 28, 249, 29, 0, 0, 17, 0, 18, 19, 20,
- 0, 22, 0, 0, 0, 0, 23, 24, 25, 26,
- 85, 0, 0, 27, 0, 30, 31, 32, 33, 34,
- 0, 0, 0, 0, 12, 13, 0, 0, 0, 14,
- 15, 16, 0, 0, 65, 253, 0, 28, 254, 29,
- 0, 0, 17, 0, 18, 19, 20, 0, 22, 0,
- 0, 0, 0, 23, 24, 25, 26, 85, 0, 0,
- 27, 0, 0, 31, 32, 33, 34, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 13, 0, 0, 0, 14, 15, 16, 36,
- 0, 0, 28, 0, 29, 0, 0, 0, 0, 17,
- 0, 18, 19, 20, 0, 22, 0, 0, 0, 0,
- 23, 24, 25, 26, 0, 0, 0, 27, 0, 0,
- 31, 32, 33, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 153, 0, 0, 28,
- 0, 29, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 13, 0, 0, 0,
- 14, 15, 16, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 17, 0, 18, 19, 20, 0, 22,
- 0, 0, 0, 0, 23, 24, 25, 26, 0, 0,
- 0, 27, 0, 0, 31, 32, 33, 34, 0, 0,
- 12, 13, 0, 0, 0, 14, 15, 16, 0, 0,
- 65, 0, 0, 28, 156, 29, 0, 0, 17, 0,
- 18, 19, 20, 0, 22, 0, 0, 0, 0, 23,
- 24, 25, 26, 85, 0, 0, 27, 0, 0, 31,
- 32, 33, 34, 0, 0, 0, 0, 12, 13, 0,
- 0, 0, 14, 15, 16, 0, 0, 65, 160, 0,
- 28, 0, 29, 0, 0, 17, 0, 18, 19, 20,
- 0, 22, 0, 0, 0, 0, 23, 24, 25, 26,
- 85, 0, 0, 27, 0, 0, 31, 32, 33, 34,
- 0, 0, 0, 0, 0, 0, 0, 0, 11, 0,
- 0, 0, 12, 13, 0, 0, 0, 14, 15, 16,
- 0, 0, 65, 0, 0, 28, 163, 29, 0, 0,
- 17, 0, 18, 19, 20, 0, 22, 0, 0, 0,
- 0, 23, 24, 25, 26, 85, 0, 0, 27, 0,
- 30, 31, 32, 33, 34, 11, 0, 0, 0, 12,
- 13, 0, 0, 0, 14, 15, 16, 0, 0, 65,
- 0, 0, 28, 166, 29, 0, 0, 17, 0, 18,
- 19, 20, 0, 22, 0, 0, 0, 0, 23, 24,
- 25, 26, 85, 0, 0, 27, 0, 30, 31, 32,
- 33, 34, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 65, 0, 0, 28, 168, 29, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 85, 0, 0, 0, 0,
- 0, 0, 0, 12, 13, 0, 0, 0, 14, 15,
- 16, 0, 0, 0, 0, 65, 0, 0, 28, 169,
- 29, 17, 0, 18, 19, 20, 0, 22, 0, 0,
- 0, 0, 23, 24, 25, 26, 0, 0, 85, 27,
- 0, 0, 31, 32, 33, 34, 0, 0, 0, 0,
- 12, 13, 0, 0, 0, 14, 15, 16, 0, 0,
- 65, 0, 0, 28, 174, 29, 0, 0, 17, 0,
- 18, 19, 20, 0, 22, 0, 0, 0, 0, 23,
- 24, 25, 26, 85, 0, 0, 27, 0, 0, 31,
- 32, 33, 34, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 12, 13, 0, 0, 0,
- 14, 15, 16, 0, 0, 65, 0, 0, 28, 175,
- 29, 0, 0, 17, 0, 18, 19, 20, 0, 22,
- 0, 0, 0, 0, 23, 24, 25, 26, 85, 0,
- 0, 27, 0, 0, 31, 32, 33, 34, 0, 0,
- 0, 0, 12, 13, 0, 0, 0, 14, 15, 16,
- 0, 0, 65, 0, 0, 28, 0, 29, 0, 0,
- 17, 0, 18, 19, 20, 0, 22, 0, 0, 0,
- 197, 23, 24, 25, 26, 85, 0, 0, 27, 0,
- 0, 31, 32, 33, 34, 12, 13, 0, 0, 0,
- 14, 15, 16, 0, 0, 65, 0, 0, 28, 0,
- 29, 0, 0, 17, 0, 18, 19, 20, 0, 22,
- 0, 0, 0, 200, 23, 24, 25, 26, 85, 0,
- 0, 27, 0, 0, 31, 32, 33, 34, 12, 13,
- 0, 0, 0, 14, 15, 16, 0, 0, 65, 251,
- 0, 28, 0, 29, 0, 0, 17, 0, 18, 19,
- 20, 0, 22, 0, 0, 0, 0, 23, 24, 25,
- 26, 85, 0, 0, 27, 0, 0, 31, 32, 33,
- 34, 0, 0, 12, 13, 0, 0, 0, 14, 15,
- 16, 0, 0, 65, 255, 0, 28, 0, 29, 0,
- 0, 17, 0, 18, 19, 20, 0, 22, 0, 0,
- 0, 0, 23, 24, 25, 26, 85, 0, 0, 27,
- 0, 0, 31, 32, 33, 34, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
- 0, 0, 0, 14, 15, 16, 0, 0, 65, 286,
- 0, 28, 0, 29, 0, 0, 17, 0, 18, 19,
- 20, 0, 22, 0, 0, 0, 0, 23, 24, 25,
- 26, 85, 0, 0, 27, 0, 0, 31, 32, 33,
- 34, 0, 0, 0, 0, 12, 13, 0, 0, 0,
- 14, 15, 16, 0, 0, 65, 292, 0, 28, 0,
- 29, 0, 0, 17, 0, 18, 19, 20, 0, 22,
- 0, 0, 0, 0, 23, 24, 25, 26, 85, 0,
- 0, 27, 0, 0, 31, 32, 33, 34, 12, 13,
- 0, 0, 0, 14, 15, 16, 0, 0, 65, 293,
- 0, 28, 0, 29, 0, 0, 17, 0, 18, 19,
- 20, 0, 22, 0, 0, 0, 0, 23, 24, 25,
- 26, 85, 0, 0, 27, 0, 0, 31, 32, 33,
- 34, 12, 13, 0, 0, 0, 14, 15, 16, 0,
- 0, 65, 294, 0, 28, 0, 29, 0, 0, 17,
- 0, 18, 19, 20, 0, 22, 0, 0, 0, 0,
- 23, 24, 25, 26, 85, 0, 0, 27, 0, 0,
- 31, 32, 33, 34, 0, 0, 12, 13, 0, 0,
- 0, 14, 15, 16, 0, 0, 65, 295, 0, 28,
- 0, 29, 0, 0, 17, 0, 18, 19, 20, 0,
- 22, 0, 0, 0, 0, 23, 24, 25, 26, 85,
- 0, 0, 27, 0, 0, 31, 32, 33, 34, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 13, 0, 0, 0, 14, 15, 16, 0,
- 0, 65, 296, 0, 28, 0, 29, 0, 0, 17,
- 0, 18, 19, 20, 0, 22, 0, 0, 0, 0,
- 23, 24, 25, 26, 85, 0, 0, 27, 0, 0,
- 31, 32, 33, 34, 0, 0, 0, 0, 12, 13,
- 0, 0, 0, 14, 15, 16, 0, 0, 65, 298,
- 0, 28, 0, 29, 0, 0, 17, 0, 18, 19,
- 20, 0, 22, 0, 0, 0, 0, 23, 24, 25,
- 26, 85, 0, 0, 27, 0, 0, 31, 32, 33,
- 34, 12, 13, 0, 0, 0, 14, 15, 16, 0,
- 0, 65, 108, 0, 28, 0, 29, 0, 0, 17,
- 0, 18, 19, 20, 0, 22, 0, 0, 0, 0,
- 23, 24, 25, 26, 0, 0, 0, 27, 0, 0,
- 31, 32, 33, 34, 12, 13, 0, 0, 0, 14,
- 15, 16, 0, 0, 0, 0, 0, 0, 65, 0,
- 0, 28, 17, 29, 18, 19, 20, 0, 22, 0,
- 0, 0, 0, 23, 24, 25, 26, 0, 0, 0,
- 27, 0, 0, 31, 32, 33, 34, 0, 0, 12,
- 13, 0, 0, 0, 14, 15, 16, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 17, 0, 18,
- 19, 20, 65, 22, 0, 28, 0, 29, 23, 24,
- 25, 26, 0, 0, 0, 27, 0, 0, 31, 32,
- 33, 34, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 13, 0, 0, 0, 14,
- 15, 16, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 17, 0, 18, 19, 20, 65, 22, 0,
- 28, 0, 29, 23, 24, 25, 26, 0, 0, 0,
- 27, 0, 0, 31, 32, 33, 34, 0, 0, 0,
- 0, 12, 13, 0, 0, 0, 14, 15, 16, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,
- 0, 18, 19, 20, 65, 22, 0, 28, 0, 29,
- 23, 24, 25, 26, 0, 0, 0, 27, 0, 0,
- 31, 32, 33, 34, 12, 13, 0, 0, 0, 14,
- 15, 16, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 17, 0, 18, 19, 20, 65, 22, 0,
- 28, 0, 29, 23, 24, 25, 26, 0, 0, 0,
- 27, 0, 0, 31, 32, 33, 34, 115, 0, 0,
- 85, 12, 13, 0, 0, 0, 14, 15, 16, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,
- 0, 18, 19, 20, 65, 22, 0, 28, 0, 29,
- 23, 24, 25, 26, 0, 0, 0, 27, 0, 0,
- 31, 32, 33, 34, 0, 0, 0, 0, 0, 0,
- 0, 117, 0, 0, 0, 12, 13, 0, 0, 0,
- 14, 15, 16, 0, 0, 0, 0, 65, 0, 0,
- 28, 0, 29, 17, 0, 18, 19, 20, 0, 22,
- 0, 0, 0, 0, 23, 24, 25, 26, 0, 0,
- 0, 27, 0, 0, 31, 32, 33, 34, 0, 0,
- 0, 0, 0, 0, 0, 0, 139, 0, 0, 0,
- 12, 13, 0, 0, 0, 14, 15, 16, 102, 0,
- 0, 28, 0, 29, 0, 0, 0, 0, 17, 0,
- 18, 19, 20, 0, 22, 0, 0, 0, 0, 23,
- 24, 25, 26, 0, 0, 0, 27, 0, 0, 31,
- 32, 33, 34, 212, 0, 0, 0, 12, 13, 0,
- 0, 0, 14, 15, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 18, 19, 20,
- 0, 22, 0, 0, 0, 0, 23, 24, 25, 26,
- 0, 0, 0, 27, 0, 0, 31, 32, 33, 34,
- 12, 13, 0, 0, 0, 14, 15, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 17, 0,
- 18, 19, 20, 0, 22, 0, 0, 0, 0, 23,
- 24, 25, 26, 0, 0, 0, 27, 0, 0, 31,
- 32, 33, 34, 274, 0, 0, 0, 12, 13, 0,
- 0, 0, 14, 15, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 17, 0, 18, 19, 20,
- 0, 22, 0, 0, 0, 0, 23, 24, 25, 26,
- 0, 0, 0, 27, 0, 0, 31, 32, 33, 34,
- 12, 13, 0, 0, 0, 14, 15, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 17, 0,
- 18, 19, 20, 0, 22, 0, 0, 0, 0, 23,
- 24, 25, 26, 0, 0, 0, 27, 0, 0, 31,
- 32, 33, 34, 0, 0, 0, 0, 66, 68, 0,
- 0, 12, 13, 72, 0, 0, 14, 15, 16, 0,
- 0, 90, 0, 0, 0, 0, 0, 0, 0, 17,
- 0, 18, 19, 20, 0, 22, 0, 0, 0, 0,
- 23, 24, 25, 26, 0, 0, 0, 27, 0, 0,
- 31, 32, 33, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 145, 146, 147, 148, 149, 150, 0, 0, 0,
- 0, 0, 0, 90, 0, 0, 0, 0, 90, 0,
- 0, 90, 90, 0, 0, 90, 0, 90, 90, 0,
- 0, 0, 90, 90, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 90, 0, 0, 0, 90, 0, 90,
- 90, 90, 90, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 90, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 90, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 90, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 90, 90, 90,
- 90, 0, 90, 0, 90, 90, 0, 0, 0, 0,
- 0, 0, 90, 90, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 90, 90, 90, 90, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 90, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 90, 90, 90, 90, 90, 0,
- 90, 90, 90,
-};
-short yycheck[] = { 41,
- 0, 41, 60, 41, 37, 41, 59, 59, 39, 42,
- 43, 63, 45, 63, 47, 59, 62, 41, 36, 102,
- 36, 63, 36, 63, 302, 63, 123, 63, 37, 222,
- 7, 44, 123, 42, 312, 289, 123, 37, 47, 94,
- 40, 41, 42, 43, 44, 45, 63, 47, 302, 303,
- 63, 225, 63, 30, 293, 0, 40, 112, 58, 59,
- 60, 94, 62, 63, 40, 304, 305, 287, 41, 41,
- 153, 44, 44, 302, 303, 261, 262, 40, 124, 112,
- 63, 106, 107, 40, 40, 94, 40, 40, 40, 91,
- 40, 40, 37, 93, 94, 261, 41, 42, 43, 44,
- 45, 123, 47, 112, 40, 60, 112, 84, 133, 302,
- 0, 41, 112, 58, 59, 60, 41, 62, 63, 312,
- 41, 293, 99, 123, 124, 299, 300, 301, 281, 44,
- 41, 41, 44, 93, 41, 153, 44, 153, 293, 153,
- 41, 293, 41, 40, 40, 319, 320, 37, 93, 94,
- 324, 41, 42, 43, 44, 45, 40, 47, 135, 136,
- 59, 291, 41, 62, 261, 262, 59, 112, 58, 59,
- 60, 91, 62, 63, 205, 273, 41, 40, 123, 124,
- 93, 41, 272, 41, 0, 41, 59, 93, 59, 41,
- 219, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 227, 93, 94, -1, -1, 260, 261, 262,
- -1, 41, -1, -1, 41, -1, 260, 261, 262, 265,
- -1, -1, 112, 40, -1, 124, 43, -1, 45, 59,
- -1, -1, 59, 123, 124, 293, -1, -1, 290, 291,
- 290, 291, 275, 220, 221, -1, 304, 305, 290, 291,
- 290, 291, 290, 291, 290, 291, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, 290, 291, 268, 269,
- 270, -1, 297, 290, 291, 275, -1, 290, 291, 290,
- 291, 281, 41, 283, 284, 285, 286, 287, 41, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, -1, 299,
- 59, 301, 302, 303, 304, 305, 59, 290, 291, -1,
- 287, -1, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, -1, -1, 268, 269, 270, -1, 304, -1, -1,
- 275, -1, -1, -1, -1, -1, 281, 41, 283, 284,
- 285, 286, 287, -1, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, -1, 299, 59, 301, 302, 303, 304,
- 305, 260, 261, 262, -1, -1, 265, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, -1, -1, 268, 269,
- 270, 0, -1, -1, -1, 275, -1, -1, -1, -1,
- 41, 281, -1, 283, 284, 285, 286, 287, 41, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 59, 299,
- -1, 301, 302, 303, 304, 305, 59, -1, 37, -1,
- -1, 40, 41, 42, 43, 44, 45, -1, 47, -1,
- 260, 261, 262, 260, 261, 262, 0, -1, 41, 58,
- 59, -1, -1, 62, 63, -1, 263, 264, 52, 53,
- -1, 268, 269, 270, -1, -1, 59, 61, 62, -1,
- -1, -1, -1, -1, 281, -1, 283, 284, 285, -1,
- 287, 41, -1, 37, 93, 94, 40, 41, 42, 43,
- 44, 45, 299, 47, -1, 302, 303, 304, 305, 59,
- -1, 0, -1, 112, 58, 59, 60, -1, 62, 63,
- -1, 260, 261, 262, 123, 124, -1, 260, 261, 262,
- -1, -1, -1, -1, -1, -1, 120, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 37, 93,
- 94, 40, 41, 42, 43, -1, 45, -1, 47, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 58,
- 59, 60, -1, 62, 63, -1, 260, 261, 262, 123,
- 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 177, 178, -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, 112, -1, -1, -1, -1, -1, 260,
- 261, 262, -1, -1, 123, 124, -1, 260, 261, 262,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, -1, -1, 268,
- 269, 270, -1, -1, -1, -1, 275, 260, 261, 262,
- -1, -1, 281, 267, 283, 284, 285, 286, 287, -1,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, -1,
- 299, -1, 301, 302, 303, 304, 305, -1, -1, -1,
- 260, 261, 262, 257, 258, 259, 260, 261, 262, 263,
- 264, 265, -1, -1, 268, 269, 270, -1, -1, -1,
- -1, 275, -1, -1, -1, -1, -1, 281, -1, 283,
- 284, 285, 286, 287, -1, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, -1, 299, -1, 301, 302, 303,
- 304, 305, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, -1, -1, 268,
- 269, 270, 0, -1, -1, -1, 275, -1, -1, -1,
- -1, -1, 281, -1, 283, 284, 285, 286, 287, -1,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, -1,
- 299, -1, 301, 302, 303, 304, 305, -1, -1, 37,
- -1, -1, 40, 41, 42, 43, 44, 45, -1, 47,
- -1, -1, -1, -1, -1, -1, -1, 0, -1, -1,
- 58, 59, 60, -1, 62, 63, -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, 37, 93, 94, 40, 41, 42,
- 43, 44, 45, -1, 47, -1, -1, -1, -1, -1,
- -1, 0, -1, -1, 112, 58, 59, 60, -1, 62,
- 63, -1, -1, -1, -1, 123, 124, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 37, -1,
- 93, 40, 41, 42, 43, 44, 45, -1, 47, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 58,
- 59, 60, -1, 62, 63, -1, -1, -1, -1, -1,
- 123, 124, -1, -1, -1, 0, -1, -1, -1, -1,
- -1, -1, -1, -1, -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, 37, 112, -1, 40, 41, 42, 43, 44,
- 45, -1, 47, -1, 123, 124, -1, -1, -1, -1,
- -1, -1, -1, 58, 59, 60, -1, 62, 63, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
- 258, 259, 260, 261, 262, 263, 264, 265, -1, -1,
- 268, 269, 270, -1, -1, -1, -1, 275, 93, -1,
- -1, -1, -1, 281, -1, 283, 284, 285, 286, 287,
- -1, 289, 290, -1, 292, 293, 294, 295, 296, 297,
- -1, 299, -1, 301, 302, 303, 304, 305, 123, 124,
- -1, -1, -1, -1, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, -1, -1, 268, 269, 270, -1, -1,
- -1, -1, 275, -1, -1, -1, -1, -1, 281, -1,
- 283, 284, 285, 286, 287, -1, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, -1, 299, -1, 301, 302,
- 303, 304, 305, -1, -1, -1, -1, -1, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, -1, -1, 268,
- 269, 270, -1, -1, -1, -1, 275, -1, -1, -1,
- -1, -1, 281, -1, 283, 284, 285, 286, 287, -1,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, -1,
- 299, -1, 301, -1, -1, 304, 305, -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, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, -1, -1, 268, 269, 270, 0, -1, -1, -1,
- 275, -1, -1, -1, -1, -1, 281, -1, 283, 284,
- 285, 286, 287, -1, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, -1, 299, -1, 301, 302, 303, 304,
- 305, -1, -1, 37, -1, -1, 40, 41, 42, 43,
- 44, 45, -1, 47, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, 58, 59, 60, -1, 62, 63,
- -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, 37, -1, 93,
- 40, 41, 42, 43, 44, 45, -1, 47, -1, -1,
- -1, -1, -1, -1, 0, -1, -1, -1, 58, 59,
- 60, -1, 62, 63, -1, -1, -1, -1, -1, 123,
- 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 37, -1, 93, 40, 41, 42, 43, 44, 45,
- -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 58, 59, 60, -1, 62, 63, -1, -1,
- -1, -1, -1, 123, 124, -1, -1, -1, -1, 0,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -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, 37, -1, -1, 40,
- 41, 42, 43, 44, 45, -1, 47, 123, 124, -1,
- -1, -1, -1, -1, -1, -1, -1, 58, 59, 60,
- -1, 62, 63, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 257, 258, 259, 260, 261, 262, 263,
- 264, 265, -1, -1, 268, 269, 270, -1, -1, -1,
- -1, 275, 93, -1, -1, -1, -1, 281, -1, 283,
- 284, 285, 286, 287, -1, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, -1, 299, -1, 301, 302, 303,
- 304, 305, 123, 124, -1, -1, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, -1, -1, 268, 269,
- 270, -1, -1, -1, -1, 275, -1, -1, -1, -1,
- -1, 281, -1, 283, 284, 285, 286, 287, -1, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, -1, 299,
- -1, 301, 302, 303, 304, 305, -1, -1, -1, -1,
- -1, 257, 258, 259, 260, 261, 262, 263, 264, 265,
- -1, -1, 268, 269, 270, -1, -1, -1, -1, 275,
- -1, -1, -1, -1, -1, 281, -1, 283, 284, 285,
- 286, 287, -1, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, -1, 299, -1, 301, 302, 303, 304, 305,
- -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, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, -1, -1, 268, 269, 270,
- 0, -1, -1, -1, 275, -1, -1, -1, -1, -1,
- 281, -1, 283, 284, 285, 286, 287, -1, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, -1, 299, -1,
- 301, 302, 303, 304, 305, -1, -1, 37, -1, -1,
- 40, 41, 42, 43, 44, 45, -1, 47, -1, -1,
- -1, -1, -1, -1, -1, 0, -1, -1, 58, 59,
- 60, -1, 62, 63, -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, 37, 93, 94, 40, 41, 42, 43, 44,
- 45, -1, 47, -1, -1, -1, -1, -1, -1, -1,
- 0, -1, 112, 58, 59, 60, -1, 62, -1, -1,
- -1, -1, -1, 123, 124, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 93, 94,
- 40, 41, -1, 43, 44, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 112, 58, 59,
- 60, -1, 62, 63, -1, -1, -1, -1, 123, 124,
- -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -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, -1, 40, 41, -1, 43, 44, 45, -1,
- -1, -1, -1, 123, 124, -1, -1, -1, -1, -1,
- -1, 58, 59, 60, -1, 62, 63, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, -1, -1, 268, 269,
- 270, -1, -1, -1, -1, 275, 93, -1, -1, -1,
- -1, 281, -1, 283, 284, 285, 286, 287, -1, -1,
- 290, 291, 292, 293, 294, 295, 296, 297, -1, 299,
- -1, 301, -1, -1, 304, 305, 123, 124, -1, -1,
- -1, -1, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, -1, -1, 268, 269, 270, -1, -1, -1, -1,
- 275, -1, -1, -1, -1, -1, 281, -1, 283, 284,
- 285, 286, 287, -1, 289, -1, -1, 292, 293, 294,
- 295, 296, 297, -1, 299, -1, 301, 302, 303, 304,
- 305, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, -1, 0, 268, 269,
- 270, -1, -1, -1, -1, 275, -1, -1, -1, -1,
- -1, 281, -1, 283, 284, 285, 286, 287, -1, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, -1, 299,
- -1, 301, 302, 303, 304, 305, -1, 40, -1, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 0,
- -1, 268, 269, 270, -1, -1, -1, -1, 275, -1,
- -1, -1, -1, -1, 281, -1, 283, 284, 285, 286,
- 287, -1, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, -1, 299, -1, 301, 302, 303, 304, 305, 40,
- 41, -1, -1, 44, -1, -1, -1, -1, -1, 0,
- 123, -1, -1, -1, -1, -1, -1, 58, 59, 60,
- -1, 62, 63, -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, 40,
- 41, -1, 93, 44, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, 58, 59, 60,
- -1, 62, 63, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 123, 124, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 40, -1, 93, 43, -1, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 0, 59,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 123, 124, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 257, 258, 259, 260, 261, 262,
- 263, 264, -1, -1, -1, 268, 269, 270, 40, -1,
- -1, 43, -1, 45, -1, -1, -1, 0, 281, -1,
- 283, 284, 285, 286, 287, -1, -1, 59, -1, 292,
- 293, 294, 295, 123, -1, -1, 299, -1, 301, 302,
- 303, 304, 305, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 40, -1, -1,
- 43, -1, 45, -1, -1, -1, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, -1, 59, 268, 269, 270,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 281, 123, 283, 284, 285, 286, 287, -1, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, -1, 299, -1,
- 301, 302, 303, 304, 305, -1, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, -1, -1, 268, 269, 270,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 281, 0, 283, 284, 285, 286, 287, -1, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, -1, 299, -1,
- 301, 302, 303, 304, 305, -1, -1, 257, 258, 259,
- 260, 261, 262, 263, 264, -1, -1, -1, 268, 269,
- 270, 40, -1, -1, 43, -1, 45, -1, -1, -1,
- -1, 281, -1, 283, 284, 285, 286, 287, -1, -1,
- 0, -1, 292, 293, 294, 295, -1, -1, -1, 299,
- -1, 301, 302, 303, 304, 305, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, -1,
- 262, 263, 264, -1, -1, -1, 268, 269, 270, -1,
- 40, -1, -1, 43, -1, 45, -1, -1, -1, 281,
- 0, 283, 284, 285, 286, 287, -1, -1, -1, -1,
- 292, 293, 294, 295, 123, -1, -1, 299, -1, 301,
- 302, 303, 304, 305, 257, 258, 259, 260, 261, 262,
- 263, 264, -1, -1, -1, 268, 269, 270, -1, -1,
- 40, -1, -1, 43, -1, 45, -1, -1, 281, -1,
- 283, 284, 285, 286, 287, -1, -1, -1, 0, 292,
- 293, 294, 295, -1, -1, -1, 299, -1, 301, 302,
- 303, 304, 305, 123, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 37, -1, -1, 40, 41,
- 42, 43, 44, 45, -1, 47, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 58, 59, 60, -1,
- 62, 63, -1, 123, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 257, 258,
- 259, 93, 94, -1, 263, 264, -1, -1, -1, 268,
- 269, 270, -1, -1, -1, -1, -1, -1, -1, -1,
- 112, -1, 281, -1, 283, 284, 285, 286, 287, -1,
- -1, 123, 124, 292, 293, 294, 295, -1, -1, -1,
- 299, -1, 301, 302, 303, 304, 305, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- -1, -1, -1, 263, 264, -1, -1, -1, 268, 269,
- 270, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 281, -1, 283, 284, 285, 286, 287, -1, -1,
- -1, -1, 292, 293, 294, 295, -1, -1, -1, 299,
- -1, 301, 302, 303, 304, 305, -1, 257, 258, 259,
- -1, -1, -1, 263, 264, -1, -1, -1, 268, 269,
- 270, -1, -1, -1, -1, 40, -1, -1, 43, -1,
- 45, 281, -1, 283, 284, 285, 286, 287, -1, -1,
- -1, -1, 292, 293, 294, 295, -1, -1, -1, 299,
- -1, 301, 302, 303, 304, 305, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, -1, 0, 268, 269, 270, -1,
- -1, -1, -1, 275, -1, -1, -1, -1, -1, 281,
- -1, 283, 284, 285, 286, 287, -1, 289, 290, 291,
- 292, -1, 294, 295, 296, 297, -1, 299, 123, 301,
- 302, 303, 37, -1, -1, 40, 41, 42, 43, 44,
- 45, -1, 47, 0, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 58, 59, -1, -1, 62, 63, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 37, -1, -1, -1, 41, 42, -1, 44, 93, 94,
- 47, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 58, 59, 60, -1, 62, 63, 112, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 123, 124,
- -1, -1, -1, -1, -1, -1, -1, -1, 37, -1,
- -1, -1, 41, 42, -1, 44, 93, 94, 47, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 58,
- 59, 60, -1, 62, 63, 112, -1, -1, -1, -1,
- -1, -1, 257, 258, 259, -1, 123, 124, 263, 264,
- -1, -1, -1, 268, 269, 270, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, 94, 281, -1, 283, 284,
- 285, 286, 287, -1, -1, -1, -1, 292, 293, 294,
- 295, -1, -1, 112, 299, -1, 301, 302, 303, 304,
- 305, -1, -1, -1, 123, 124, -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, -1, -1,
- -1, -1, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, -1, -1, 268, 269, 270, -1, -1, -1, -1,
- 275, -1, -1, -1, -1, -1, 281, -1, 283, 284,
- 285, 286, 287, -1, 289, 290, 291, 292, -1, 294,
- 295, 296, 297, -1, 299, -1, 301, 302, 303, -1,
- 257, 258, 259, 260, 261, 262, -1, -1, 265, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 275, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 286,
- -1, 0, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, -1, -1, -1, 301, -1, -1, -1, 257, 258,
- 259, 260, 261, 262, -1, -1, 265, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 275, -1, 37, -1,
- -1, -1, 41, 42, -1, 44, 0, 286, 47, -1,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 58,
- 59, 60, 301, 62, 63, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 37, -1, -1, -1, 41, 42, -1,
- 44, 0, -1, 47, 93, 94, -1, -1, -1, -1,
- -1, -1, -1, -1, 58, 59, 60, -1, 62, 63,
- -1, -1, -1, 112, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 123, 124, -1, -1, 37, -1,
- -1, -1, 41, 42, -1, 44, -1, -1, 47, 93,
- 94, -1, -1, -1, -1, -1, -1, -1, -1, 58,
- 59, 60, -1, 62, 63, -1, -1, -1, 112, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, -1, 123,
- 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, 94, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 37, -1, -1,
- -1, 41, 42, 112, 44, -1, -1, 47, -1, -1,
- -1, -1, -1, -1, 123, 124, -1, -1, 58, 59,
- 60, -1, 62, 63, -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, 93, 94, -1, -1, -1, 257, 258,
- 259, 260, 261, 262, -1, -1, 265, -1, -1, -1,
- -1, -1, 112, -1, -1, -1, 275, -1, -1, -1,
- -1, -1, -1, 123, 124, -1, -1, 286, -1, -1,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, -1,
- -1, -1, 301, 257, 258, 259, 260, 261, 262, -1,
- -1, 265, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 275, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 286, -1, -1, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, -1, -1, -1, 301, 257, 258,
- 259, 260, 261, 262, -1, -1, 265, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 275, -1, -1, 0,
- -1, -1, -1, -1, -1, -1, -1, 286, -1, -1,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, -1,
- -1, -1, 301, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 37, -1, -1, -1,
- 41, 42, -1, 44, -1, -1, 47, 257, 258, 259,
- 260, 261, 262, -1, -1, 265, -1, 58, 59, 60,
- -1, 62, 63, -1, -1, 275, 0, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 286, -1, -1, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, -1, -1,
- -1, 301, 93, 94, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 37, -1, -1, -1, 41, 42, -1,
- 44, 112, -1, 47, 0, -1, -1, -1, -1, -1,
- -1, -1, 123, 124, 58, 59, 60, -1, 62, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 37, -1, -1, -1, 41, 42, -1, 44, 93,
- 94, 47, -1, -1, -1, -1, -1, -1, -1, 0,
- -1, -1, 58, 59, 60, -1, 62, -1, 112, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 123,
- 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 37, 93, 94, -1,
- 41, 42, -1, 44, -1, -1, 47, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 112, 58, 59, 60,
- -1, 62, -1, -1, -1, -1, -1, 123, 124, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
- 261, 262, 93, 94, 265, 40, -1, -1, 43, -1,
- 45, -1, -1, -1, 275, 0, -1, -1, -1, -1,
- -1, 112, -1, -1, -1, 286, -1, -1, 289, 290,
- 291, -1, 123, 124, -1, 296, 297, -1, -1, -1,
- 301, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 37, -1, -1, -1, 41, 42, -1, 44,
- -1, -1, 47, 257, 258, 259, 260, 261, 262, -1,
- -1, 265, -1, 58, 59, 60, -1, 62, -1, 40,
- -1, 275, 43, -1, 45, -1, -1, -1, -1, -1,
- -1, -1, 286, -1, -1, 289, 290, 291, 59, -1,
- 0, -1, 296, 297, -1, -1, -1, 301, 93, 94,
- -1, 257, 258, 259, 260, 261, 262, -1, -1, 265,
- -1, -1, -1, -1, -1, -1, -1, 112, -1, 275,
- -1, -1, -1, -1, -1, -1, -1, 37, 123, 124,
- 286, 41, 42, 289, 290, 291, -1, 47, -1, -1,
- 296, 297, -1, -1, -1, 301, -1, -1, 58, 59,
- 60, -1, 62, -1, -1, -1, 257, 258, 259, 260,
- 261, 262, 0, -1, 265, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 275, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, 94, 286, -1, -1, 289, 290,
- 291, -1, -1, -1, -1, 296, 297, -1, -1, 37,
- 301, -1, 112, 41, 42, -1, 44, -1, -1, 47,
- -1, -1, -1, 123, 124, -1, 261, 262, 263, 264,
- 58, 59, -1, 268, 269, 270, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 281, -1, 283, 284,
- 285, -1, 287, -1, -1, -1, -1, 292, 293, 294,
- 295, -1, -1, -1, 299, 93, 94, 302, 303, 304,
- 305, -1, 257, 258, 259, 260, 261, 262, -1, -1,
- 265, -1, -1, -1, 112, -1, -1, -1, -1, -1,
- 275, -1, -1, -1, -1, 123, 124, -1, 259, -1,
- -1, 286, 263, 264, 289, 290, 291, 268, 269, 270,
- -1, 296, 297, -1, -1, -1, 301, -1, -1, -1,
- 281, -1, 283, 284, 285, -1, 287, -1, -1, -1,
- -1, 292, 293, 294, 295, -1, -1, -1, 299, -1,
- 301, 302, 303, 304, 305, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 257, 258, 259,
- 260, 261, 262, -1, 7, 265, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 275, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 286, 30, -1, 289,
- 290, 291, -1, 36, -1, -1, 296, 297, -1, -1,
- -1, 301, -1, -1, -1, 48, -1, -1, 51, 52,
- 53, 54, 55, -1, 57, 58, 59, -1, 61, 62,
- 63, 64, 65, -1, -1, -1, -1, -1, -1, 257,
- 258, 259, 260, 261, 262, -1, -1, 265, 81, -1,
- -1, 84, 85, 86, 87, 88, 89, 275, 49, 50,
- -1, -1, -1, -1, -1, -1, 99, -1, 286, 102,
- -1, 289, 290, 291, -1, -1, -1, -1, -1, -1,
- -1, 114, -1, 301, -1, -1, -1, 120, -1, 80,
- -1, 82, 83, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 135, 136, -1, 40, -1, -1, 43, -1,
- 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 153, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 165, 166, 167, 168, 169, -1, -1, -1,
- -1, 174, 175, -1, 177, 178, -1, -1, -1, 182,
- -1, -1, -1, 186, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 197, 156, 157, 200, -1, -1,
- 203, 204, -1, -1, -1, -1, -1, -1, -1, -1,
- 17, -1, -1, -1, -1, 176, -1, 220, 221, 222,
- -1, 28, 29, -1, 31, 32, 187, 34, 189, -1,
- 191, -1, -1, -1, -1, 42, -1, -1, 241, -1,
- 243, -1, 245, -1, 247, -1, 249, -1, -1, -1,
- -1, 254, -1, 214, -1, -1, 259, 260, 40, -1,
- -1, 43, -1, 45, 267, -1, -1, -1, 229, 230,
- 231, 232, 233, -1, -1, -1, -1, 59, -1, -1,
- -1, -1, -1, -1, 287, 92, 93, 94, 95, 96,
- 97, -1, -1, -1, -1, -1, -1, 104, -1, -1,
- -1, 304, 109, -1, -1, 112, 113, -1, -1, 116,
- -1, 118, 119, -1, -1, -1, 123, 124, -1, 280,
- -1, -1, -1, 284, 285, 286, -1, 134, -1, 290,
- -1, 138, -1, 140, 141, 142, 143, 40, -1, -1,
- 43, 123, 45, -1, 151, -1, -1, 154, -1, -1,
- -1, -1, -1, -1, 315, 316, 59, 164, 263, 264,
- 321, 266, 267, 268, 269, 270, -1, -1, -1, -1,
- -1, 276, 277, 278, 279, 280, 281, -1, 283, 284,
- 285, -1, 287, 288, -1, 192, -1, 292, 293, 294,
- 295, -1, -1, -1, 299, -1, -1, 302, 303, 304,
- 305, 208, 209, 210, 211, -1, 213, -1, 215, 216,
- -1, -1, -1, -1, -1, -1, 223, 224, -1, -1,
- 123, -1, 125, -1, -1, -1, -1, -1, 235, 236,
- 237, 238, -1, 40, -1, -1, 43, -1, 45, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, -1, 263, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 275, 276,
- 277, 278, 279, -1, 281, 282, 283, -1, 260, 261,
- 262, 263, 264, -1, 266, 267, 268, 269, 270, 271,
- -1, 273, 274, -1, 276, 277, 278, 279, 280, 281,
- 282, 283, 284, 285, -1, 287, 288, -1, -1, -1,
- 292, 293, 294, 295, -1, -1, 123, 299, 125, -1,
- 302, 303, 304, 305, 40, -1, -1, 43, -1, 45,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 260, -1, -1,
- 263, 264, -1, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, -1, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, -1, 287, 288, -1, -1, -1, 292,
- 293, 294, 295, -1, -1, -1, 299, -1, -1, 302,
- 303, 304, 305, -1, -1, -1, -1, 123, 40, 125,
- -1, 43, -1, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -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, 260, -1, -1, 263, 264, -1, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, -1, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, -1,
- 287, 288, -1, -1, -1, 292, 293, 294, 295, -1,
- -1, 123, 299, 125, -1, 302, 303, 304, 305, 40,
- -1, -1, 43, -1, 45, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 59, -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, 260, -1, -1, 263, 264, -1,
- 266, 267, 268, 269, 270, 271, 272, 273, 274, -1,
- 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
- -1, 287, 288, -1, -1, -1, 292, 293, 294, 295,
- -1, -1, 123, 299, 125, -1, 302, 303, 304, 305,
- -1, 40, -1, -1, 43, -1, 45, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 59, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 260, -1,
- -1, 263, 264, -1, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, -1, 276, 277, 278, 279, 280, 281,
- 282, 283, 284, 285, -1, 287, 288, -1, -1, -1,
- 292, 293, 294, 295, -1, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, 123, -1, 125, -1, -1, -1,
- -1, -1, 40, -1, -1, 43, -1, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 260,
- -1, -1, 263, 264, -1, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, -1, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, -1, 287, 288, -1, -1,
- -1, 292, 293, 294, 295, -1, -1, -1, 299, -1,
- -1, 302, 303, 304, 305, 123, 40, 125, -1, 43,
- -1, 45, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 59, -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, 260, -1, -1, 263, 264, -1, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, -1, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, -1, 287, 288,
- -1, -1, -1, 292, 293, 294, 295, -1, -1, 123,
- 299, 125, -1, 302, 303, 304, 305, 40, -1, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, -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, 260, -1, -1, 263, 264, -1, 266, 267,
- 268, 269, 270, 271, 272, 273, 274, -1, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, 285, -1, 287,
- 288, -1, -1, -1, 292, 293, 294, 295, -1, -1,
- 123, 299, 125, -1, 302, 303, 304, 305, -1, 40,
- -1, -1, 43, -1, 45, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 260, -1, -1, 263,
- 264, -1, 266, 267, 268, 269, 270, 271, 272, 273,
- 274, -1, 276, 277, 278, 279, 280, 281, 282, 283,
- 284, 285, -1, 287, 288, -1, -1, -1, 292, 293,
- 294, 295, -1, -1, -1, 299, -1, -1, 302, 303,
- 304, 305, 123, -1, 125, -1, -1, -1, -1, -1,
- 40, -1, -1, 43, -1, 45, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 260, -1, -1,
- 263, 264, -1, 266, 267, 268, 269, 270, 271, -1,
- 273, 274, -1, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, -1, 287, 288, -1, -1, -1, 292,
- 293, 294, 295, -1, -1, -1, 299, -1, -1, 302,
- 303, 304, 305, 123, 40, 125, -1, 43, -1, 45,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, -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, 260,
- -1, -1, 263, 264, -1, 266, 267, 268, 269, 270,
- 271, -1, 273, 274, -1, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, -1, 287, 288, -1, -1,
- -1, 292, 293, 294, 295, -1, -1, 123, 299, 125,
- -1, 302, 303, 304, 305, 40, -1, -1, 43, -1,
- 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -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,
- 260, -1, -1, 263, 264, -1, 266, 267, 268, 269,
- 270, 271, -1, 273, 274, -1, 276, 277, 278, 279,
- 280, 281, 282, 283, 284, 285, -1, 287, 288, -1,
- -1, -1, 292, 293, 294, 295, -1, -1, 123, 299,
- 125, -1, 302, 303, 304, 305, -1, 40, -1, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 260, -1, -1, 263, 264, -1,
- 266, 267, 268, 269, 270, 271, -1, 273, 274, -1,
- 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
- -1, 287, 288, -1, -1, -1, 292, 293, 294, 295,
- -1, -1, -1, 299, -1, -1, 302, 303, 304, 305,
- 123, -1, 125, -1, -1, -1, -1, -1, 40, -1,
- -1, 43, -1, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 260, -1, -1, 263, 264,
- -1, 266, 267, 268, 269, 270, 271, -1, 273, 274,
- -1, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, -1, 287, 288, -1, -1, -1, 292, 293, 294,
- 295, -1, -1, -1, 299, -1, -1, 302, 303, 304,
- 305, 123, 40, 125, -1, 43, -1, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 59, -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, 260, -1, -1,
- 263, 264, -1, 266, 267, 268, 269, 270, 271, -1,
- 273, 274, -1, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 40, 287, 288, 43, 44, 45, 292,
- 293, 294, 295, -1, -1, 123, 299, 125, -1, 302,
- 303, 304, 305, 60, -1, 62, 63, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 40, -1, -1,
- 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 60, 260, 62,
- 63, 263, 264, -1, 266, 267, 268, 269, 270, 271,
- -1, 273, 274, -1, 276, 277, 278, 279, 280, 281,
- 282, 283, 284, 285, 40, 287, 288, 43, -1, 45,
- 292, 293, 294, 295, -1, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, -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, 40, 41, -1, 43, 44, 45, -1, -1, -1,
- -1, -1, 260, -1, -1, 263, 264, -1, 266, 267,
- 268, 269, 270, 271, 63, 273, 274, -1, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, 285, -1, 287,
- 288, -1, -1, -1, 292, 293, 294, 295, -1, -1,
- -1, 299, -1, -1, 302, 303, 304, 305, 40, 41,
- -1, 43, 44, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 63, -1, -1, -1, -1, 263, 264, -1, -1,
- -1, 268, 269, 270, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 281, -1, 283, 284, 285, -1,
- 287, -1, -1, -1, -1, 292, 293, 294, 295, 296,
- 297, -1, 299, -1, -1, 302, 303, 304, 305, -1,
- 263, 264, -1, -1, -1, 268, 269, 270, -1, -1,
- -1, -1, 40, 41, -1, 43, 44, 45, 281, -1,
- 283, 284, 285, -1, 287, -1, -1, -1, -1, 292,
- 293, 294, 295, 296, 297, 63, 299, -1, -1, 302,
- 303, 304, 305, 259, -1, 261, 262, 263, 264, -1,
- -1, -1, 268, 269, 270, -1, -1, 40, 41, -1,
- 43, 44, 45, -1, -1, 281, -1, 283, 284, 285,
- -1, 287, -1, -1, -1, -1, 292, 293, 294, 295,
- 63, -1, -1, 299, -1, 301, 302, 303, 304, 305,
- -1, -1, -1, -1, 263, 264, -1, -1, -1, 268,
- 269, 270, -1, -1, 40, 41, -1, 43, 44, 45,
- -1, -1, 281, -1, 283, 284, 285, -1, 287, -1,
- -1, -1, -1, 292, 293, 294, 295, 63, -1, -1,
- 299, -1, -1, 302, 303, 304, 305, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 263, 264, -1, -1, -1, 268, 269, 270, 40,
- -1, -1, 43, -1, 45, -1, -1, -1, -1, 281,
- -1, 283, 284, 285, -1, 287, -1, -1, -1, -1,
- 292, 293, 294, 295, -1, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 40, -1, -1, 43,
- -1, 45, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 263, 264, -1, -1, -1,
- 268, 269, 270, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 281, -1, 283, 284, 285, -1, 287,
- -1, -1, -1, -1, 292, 293, 294, 295, -1, -1,
- -1, 299, -1, -1, 302, 303, 304, 305, -1, -1,
- 263, 264, -1, -1, -1, 268, 269, 270, -1, -1,
- 40, -1, -1, 43, 44, 45, -1, -1, 281, -1,
- 283, 284, 285, -1, 287, -1, -1, -1, -1, 292,
- 293, 294, 295, 63, -1, -1, 299, -1, -1, 302,
- 303, 304, 305, -1, -1, -1, -1, 263, 264, -1,
- -1, -1, 268, 269, 270, -1, -1, 40, 41, -1,
- 43, -1, 45, -1, -1, 281, -1, 283, 284, 285,
- -1, 287, -1, -1, -1, -1, 292, 293, 294, 295,
- 63, -1, -1, 299, -1, -1, 302, 303, 304, 305,
- -1, -1, -1, -1, -1, -1, -1, -1, 259, -1,
- -1, -1, 263, 264, -1, -1, -1, 268, 269, 270,
- -1, -1, 40, -1, -1, 43, 44, 45, -1, -1,
- 281, -1, 283, 284, 285, -1, 287, -1, -1, -1,
- -1, 292, 293, 294, 295, 63, -1, -1, 299, -1,
- 301, 302, 303, 304, 305, 259, -1, -1, -1, 263,
- 264, -1, -1, -1, 268, 269, 270, -1, -1, 40,
- -1, -1, 43, 44, 45, -1, -1, 281, -1, 283,
- 284, 285, -1, 287, -1, -1, -1, -1, 292, 293,
- 294, 295, 63, -1, -1, 299, -1, 301, 302, 303,
- 304, 305, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 40, -1, -1, 43, 44, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 63, -1, -1, -1, -1,
- -1, -1, -1, 263, 264, -1, -1, -1, 268, 269,
- 270, -1, -1, -1, -1, 40, -1, -1, 43, 44,
- 45, 281, -1, 283, 284, 285, -1, 287, -1, -1,
- -1, -1, 292, 293, 294, 295, -1, -1, 63, 299,
- -1, -1, 302, 303, 304, 305, -1, -1, -1, -1,
- 263, 264, -1, -1, -1, 268, 269, 270, -1, -1,
- 40, -1, -1, 43, 44, 45, -1, -1, 281, -1,
- 283, 284, 285, -1, 287, -1, -1, -1, -1, 292,
- 293, 294, 295, 63, -1, -1, 299, -1, -1, 302,
- 303, 304, 305, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 263, 264, -1, -1, -1,
- 268, 269, 270, -1, -1, 40, -1, -1, 43, 44,
- 45, -1, -1, 281, -1, 283, 284, 285, -1, 287,
- -1, -1, -1, -1, 292, 293, 294, 295, 63, -1,
- -1, 299, -1, -1, 302, 303, 304, 305, -1, -1,
- -1, -1, 263, 264, -1, -1, -1, 268, 269, 270,
- -1, -1, 40, -1, -1, 43, -1, 45, -1, -1,
- 281, -1, 283, 284, 285, -1, 287, -1, -1, -1,
- 58, 292, 293, 294, 295, 63, -1, -1, 299, -1,
- -1, 302, 303, 304, 305, 263, 264, -1, -1, -1,
- 268, 269, 270, -1, -1, 40, -1, -1, 43, -1,
- 45, -1, -1, 281, -1, 283, 284, 285, -1, 287,
- -1, -1, -1, 58, 292, 293, 294, 295, 63, -1,
- -1, 299, -1, -1, 302, 303, 304, 305, 263, 264,
- -1, -1, -1, 268, 269, 270, -1, -1, 40, 41,
- -1, 43, -1, 45, -1, -1, 281, -1, 283, 284,
- 285, -1, 287, -1, -1, -1, -1, 292, 293, 294,
- 295, 63, -1, -1, 299, -1, -1, 302, 303, 304,
- 305, -1, -1, 263, 264, -1, -1, -1, 268, 269,
- 270, -1, -1, 40, 41, -1, 43, -1, 45, -1,
- -1, 281, -1, 283, 284, 285, -1, 287, -1, -1,
- -1, -1, 292, 293, 294, 295, 63, -1, -1, 299,
- -1, -1, 302, 303, 304, 305, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 263, 264,
- -1, -1, -1, 268, 269, 270, -1, -1, 40, 41,
- -1, 43, -1, 45, -1, -1, 281, -1, 283, 284,
- 285, -1, 287, -1, -1, -1, -1, 292, 293, 294,
- 295, 63, -1, -1, 299, -1, -1, 302, 303, 304,
- 305, -1, -1, -1, -1, 263, 264, -1, -1, -1,
- 268, 269, 270, -1, -1, 40, 41, -1, 43, -1,
- 45, -1, -1, 281, -1, 283, 284, 285, -1, 287,
- -1, -1, -1, -1, 292, 293, 294, 295, 63, -1,
- -1, 299, -1, -1, 302, 303, 304, 305, 263, 264,
- -1, -1, -1, 268, 269, 270, -1, -1, 40, 41,
- -1, 43, -1, 45, -1, -1, 281, -1, 283, 284,
- 285, -1, 287, -1, -1, -1, -1, 292, 293, 294,
- 295, 63, -1, -1, 299, -1, -1, 302, 303, 304,
- 305, 263, 264, -1, -1, -1, 268, 269, 270, -1,
- -1, 40, 41, -1, 43, -1, 45, -1, -1, 281,
- -1, 283, 284, 285, -1, 287, -1, -1, -1, -1,
- 292, 293, 294, 295, 63, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, -1, -1, 263, 264, -1, -1,
- -1, 268, 269, 270, -1, -1, 40, 41, -1, 43,
- -1, 45, -1, -1, 281, -1, 283, 284, 285, -1,
- 287, -1, -1, -1, -1, 292, 293, 294, 295, 63,
- -1, -1, 299, -1, -1, 302, 303, 304, 305, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 263, 264, -1, -1, -1, 268, 269, 270, -1,
- -1, 40, 41, -1, 43, -1, 45, -1, -1, 281,
- -1, 283, 284, 285, -1, 287, -1, -1, -1, -1,
- 292, 293, 294, 295, 63, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, -1, -1, -1, -1, 263, 264,
- -1, -1, -1, 268, 269, 270, -1, -1, 40, 41,
- -1, 43, -1, 45, -1, -1, 281, -1, 283, 284,
- 285, -1, 287, -1, -1, -1, -1, 292, 293, 294,
- 295, 63, -1, -1, 299, -1, -1, 302, 303, 304,
- 305, 263, 264, -1, -1, -1, 268, 269, 270, -1,
- -1, 40, 41, -1, 43, -1, 45, -1, -1, 281,
- -1, 283, 284, 285, -1, 287, -1, -1, -1, -1,
- 292, 293, 294, 295, -1, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, 263, 264, -1, -1, -1, 268,
- 269, 270, -1, -1, -1, -1, -1, -1, 40, -1,
- -1, 43, 281, 45, 283, 284, 285, -1, 287, -1,
- -1, -1, -1, 292, 293, 294, 295, -1, -1, -1,
- 299, -1, -1, 302, 303, 304, 305, -1, -1, 263,
- 264, -1, -1, -1, 268, 269, 270, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 281, -1, 283,
- 284, 285, 40, 287, -1, 43, -1, 45, 292, 293,
- 294, 295, -1, -1, -1, 299, -1, -1, 302, 303,
- 304, 305, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 263, 264, -1, -1, -1, 268,
- 269, 270, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, -1, 283, 284, 285, 40, 287, -1,
- 43, -1, 45, 292, 293, 294, 295, -1, -1, -1,
- 299, -1, -1, 302, 303, 304, 305, -1, -1, -1,
- -1, 263, 264, -1, -1, -1, 268, 269, 270, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 281,
- -1, 283, 284, 285, 40, 287, -1, 43, -1, 45,
- 292, 293, 294, 295, -1, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, 263, 264, -1, -1, -1, 268,
- 269, 270, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 281, -1, 283, 284, 285, 40, 287, -1,
- 43, -1, 45, 292, 293, 294, 295, -1, -1, -1,
- 299, -1, -1, 302, 303, 304, 305, 259, -1, -1,
- 63, 263, 264, -1, -1, -1, 268, 269, 270, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 281,
- -1, 283, 284, 285, 40, 287, -1, 43, -1, 45,
- 292, 293, 294, 295, -1, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, -1, -1, -1, -1, -1, -1,
- -1, 259, -1, -1, -1, 263, 264, -1, -1, -1,
- 268, 269, 270, -1, -1, -1, -1, 40, -1, -1,
- 43, -1, 45, 281, -1, 283, 284, 285, -1, 287,
- -1, -1, -1, -1, 292, 293, 294, 295, -1, -1,
- -1, 299, -1, -1, 302, 303, 304, 305, -1, -1,
- -1, -1, -1, -1, -1, -1, 259, -1, -1, -1,
- 263, 264, -1, -1, -1, 268, 269, 270, 40, -1,
- -1, 43, -1, 45, -1, -1, -1, -1, 281, -1,
- 283, 284, 285, -1, 287, -1, -1, -1, -1, 292,
- 293, 294, 295, -1, -1, -1, 299, -1, -1, 302,
- 303, 304, 305, 259, -1, -1, -1, 263, 264, -1,
- -1, -1, 268, 269, 270, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, -1, 283, 284, 285,
- -1, 287, -1, -1, -1, -1, 292, 293, 294, 295,
- -1, -1, -1, 299, -1, -1, 302, 303, 304, 305,
- 263, 264, -1, -1, -1, 268, 269, 270, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 281, -1,
- 283, 284, 285, -1, 287, -1, -1, -1, -1, 292,
- 293, 294, 295, -1, -1, -1, 299, -1, -1, 302,
- 303, 304, 305, 259, -1, -1, -1, 263, 264, -1,
- -1, -1, 268, 269, 270, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 281, -1, 283, 284, 285,
- -1, 287, -1, -1, -1, -1, 292, 293, 294, 295,
- -1, -1, -1, 299, -1, -1, 302, 303, 304, 305,
- 263, 264, -1, -1, -1, 268, 269, 270, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 281, -1,
- 283, 284, 285, -1, 287, -1, -1, -1, -1, 292,
- 293, 294, 295, -1, -1, -1, 299, -1, -1, 302,
- 303, 304, 305, -1, -1, -1, -1, 28, 29, -1,
- -1, 263, 264, 34, -1, -1, 268, 269, 270, -1,
- -1, 42, -1, -1, -1, -1, -1, -1, -1, 281,
- -1, 283, 284, 285, -1, 287, -1, -1, -1, -1,
- 292, 293, 294, 295, -1, -1, -1, 299, -1, -1,
- 302, 303, 304, 305, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 92, 93, 94, 95, 96, 97, -1, -1, -1,
- -1, -1, -1, 104, -1, -1, -1, -1, 109, -1,
- -1, 112, 113, -1, -1, 116, -1, 118, 119, -1,
- -1, -1, 123, 124, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 134, -1, -1, -1, 138, -1, 140,
- 141, 142, 143, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 154, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 164, -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, 192, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 208, 209, 210,
- 211, -1, 213, -1, 215, 216, -1, -1, -1, -1,
- -1, -1, 223, 224, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 235, 236, 237, 238, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 263, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 275, 276, 277, 278, 279, -1,
- 281, 282, 283,
-};
-#define YYFINAL 1
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 305
-#if YYDEBUG
-char *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,"'p'",0,0,0,0,0,0,0,
-0,0,0,"'{'","'|'","'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"BEGIN","END","REGEX","SEMINEW",
-"NEWLINE","COMMENT","FUN1","FUNN","GRGR","PRINT","PRINTF","SPRINTF_OLD",
-"SPRINTF_NEW","SPLIT","IF","ELSE","WHILE","FOR","IN","EXIT","NEXT","BREAK",
-"CONTINUE","RET","GETLINE","DO","SUB","GSUB","MATCH","FUNCTION","USERFUN",
-"DELETE","ASGNOP","OROR","ANDAND","NUMBER","VAR","SUBSTR","INDEX","MATCHOP",
-"RELOP","OR","STRING","UMINUS","NOT","INCR","DECR","FIELD","VFIELD",
-};
-char *yyrule[] = {
-"$accept : program",
-"program : junk hunks",
-"begin : BEGIN '{' maybe states '}' junk",
-"end : END '{' maybe states '}'",
-"end : end NEWLINE",
-"hunks : hunks hunk junk",
-"hunks :",
-"hunk : patpat",
-"hunk : patpat '{' maybe states '}'",
-"hunk : FUNCTION USERFUN '(' arg_list ')' maybe '{' maybe states '}'",
-"hunk : '{' maybe states '}'",
-"hunk : begin",
-"hunk : end",
-"arg_list : expr_list",
-"patpat : cond",
-"patpat : cond ',' cond",
-"cond : expr",
-"cond : match",
-"cond : rel",
-"cond : compound_cond",
-"cond : cond '?' expr ':' expr",
-"compound_cond : '(' compound_cond ')'",
-"compound_cond : cond ANDAND maybe cond",
-"compound_cond : cond OROR maybe cond",
-"compound_cond : NOT cond",
-"rel : expr RELOP expr",
-"rel : expr '>' expr",
-"rel : expr '<' expr",
-"rel : '(' rel ')'",
-"match : expr MATCHOP expr",
-"match : expr MATCHOP REGEX",
-"match : REGEX",
-"match : '(' match ')'",
-"expr : term",
-"expr : expr term",
-"expr : expr '?' expr ':' expr",
-"expr : variable ASGNOP cond",
-"sprintf : SPRINTF_NEW",
-"sprintf : SPRINTF_OLD",
-"term : variable",
-"term : NUMBER",
-"term : STRING",
-"term : term '+' term",
-"term : term '-' term",
-"term : term '*' term",
-"term : term '/' term",
-"term : term '%' term",
-"term : term '^' term",
-"term : term IN VAR",
-"term : variable INCR",
-"term : variable DECR",
-"term : INCR variable",
-"term : DECR variable",
-"term : '-' term",
-"term : '+' term",
-"term : '(' cond ')'",
-"term : GETLINE",
-"term : GETLINE variable",
-"term : GETLINE '<' expr",
-"term : GETLINE variable '<' expr",
-"term : term 'p' GETLINE",
-"term : term 'p' GETLINE variable",
-"term : FUN1",
-"term : FUN1 '(' ')'",
-"term : FUN1 '(' expr ')'",
-"term : FUNN '(' expr_list ')'",
-"term : USERFUN '(' expr_list ')'",
-"term : SPRINTF_NEW '(' expr_list ')'",
-"term : sprintf expr_list",
-"term : SUBSTR '(' expr ',' expr ',' expr ')'",
-"term : SUBSTR '(' expr ',' expr ')'",
-"term : SPLIT '(' expr ',' VAR ',' expr ')'",
-"term : SPLIT '(' expr ',' VAR ',' REGEX ')'",
-"term : SPLIT '(' expr ',' VAR ')'",
-"term : INDEX '(' expr ',' expr ')'",
-"term : MATCH '(' expr ',' REGEX ')'",
-"term : MATCH '(' expr ',' expr ')'",
-"term : SUB '(' expr ',' expr ')'",
-"term : SUB '(' REGEX ',' expr ')'",
-"term : GSUB '(' expr ',' expr ')'",
-"term : GSUB '(' REGEX ',' expr ')'",
-"term : SUB '(' expr ',' expr ',' expr ')'",
-"term : SUB '(' REGEX ',' expr ',' expr ')'",
-"term : GSUB '(' expr ',' expr ',' expr ')'",
-"term : GSUB '(' REGEX ',' expr ',' expr ')'",
-"variable : VAR",
-"variable : VAR '[' expr_list ']'",
-"variable : FIELD",
-"variable : VFIELD term",
-"expr_list : expr",
-"expr_list : clist",
-"expr_list :",
-"clist : expr ',' maybe expr",
-"clist : clist ',' maybe expr",
-"clist : '(' clist ')'",
-"junk : junk hunksep",
-"junk :",
-"hunksep : ';'",
-"hunksep : SEMINEW",
-"hunksep : NEWLINE",
-"hunksep : COMMENT",
-"maybe : maybe nlstuff",
-"maybe :",
-"nlstuff : NEWLINE",
-"nlstuff : COMMENT",
-"separator : ';' maybe",
-"separator : SEMINEW maybe",
-"separator : NEWLINE maybe",
-"separator : COMMENT maybe",
-"states : states statement",
-"states :",
-"statement : simple separator maybe",
-"statement : ';' maybe",
-"statement : SEMINEW maybe",
-"statement : compound",
-"simpnull : simple",
-"simpnull :",
-"simple : expr",
-"simple : PRINT expr_list redir expr",
-"simple : PRINT expr_list",
-"simple : PRINTF expr_list redir expr",
-"simple : PRINTF expr_list",
-"simple : BREAK",
-"simple : NEXT",
-"simple : EXIT",
-"simple : EXIT expr",
-"simple : CONTINUE",
-"simple : RET",
-"simple : RET expr",
-"simple : DELETE VAR '[' expr_list ']'",
-"redir : '>'",
-"redir : GRGR",
-"redir : '|'",
-"compound : IF '(' cond ')' maybe statement",
-"compound : IF '(' cond ')' maybe statement ELSE maybe statement",
-"compound : WHILE '(' cond ')' maybe statement",
-"compound : DO maybe statement WHILE '(' cond ')'",
-"compound : FOR '(' simpnull ';' cond ';' simpnull ')' maybe statement",
-"compound : FOR '(' simpnull ';' ';' simpnull ')' maybe statement",
-"compound : FOR '(' expr ')' maybe statement",
-"compound : '{' maybe states '}' maybe",
-};
-#endif
-#ifndef YYSTYPE
-typedef int YYSTYPE;
-#endif
-#define yyclearin (yychar=(-1))
-#define yyerrok (yyerrflag=0)
-#ifdef YYSTACKSIZE
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#endif
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH 500
-#endif
-#endif
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short yyss[YYSTACKSIZE];
-YYSTYPE yyvs[YYSTACKSIZE];
-#define yystacksize YYSTACKSIZE
-#line 401 "a2p.y"
-
-int yyparse (void);
-
-#include "a2py.c"
-#line 2081 "y.tab.c"
-#define YYABORT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-int
-yyparse()
-{
- register int yym, yyn, yystate;
-#if YYDEBUG
- register char *yys;
-#ifndef __cplusplus
- extern char *getenv();
-#endif
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- 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("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- 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;
-#ifdef lint
- goto yynewerror;
-#endif
-yynewerror:
- yyerror("syntax error");
-#ifdef lint
- 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("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *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("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
- }
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
-case 1:
-#line 51 "a2p.y"
-{ root = oper4(OPROG,yyvsp[-1],begins,yyvsp[0],ends); }
-break;
-case 2:
-#line 55 "a2p.y"
-{ begins = oper4(OJUNK,begins,yyvsp[-3],yyvsp[-2],yyvsp[0]); in_begin = FALSE;
- yyval = Nullop; }
-break;
-case 3:
-#line 60 "a2p.y"
-{ ends = oper3(OJUNK,ends,yyvsp[-2],yyvsp[-1]); yyval = Nullop; }
-break;
-case 4:
-#line 62 "a2p.y"
-{ yyval = yyvsp[-1]; }
-break;
-case 5:
-#line 66 "a2p.y"
-{ yyval = oper3(OHUNKS,yyvsp[-2],yyvsp[-1],yyvsp[0]); }
-break;
-case 6:
-#line 68 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 7:
-#line 72 "a2p.y"
-{ yyval = oper1(OHUNK,yyvsp[0]); need_entire = TRUE; }
-break;
-case 8:
-#line 74 "a2p.y"
-{ yyval = oper2(OHUNK,yyvsp[-4],oper2(OJUNK,yyvsp[-2],yyvsp[-1])); }
-break;
-case 9:
-#line 76 "a2p.y"
-{ fixfargs(yyvsp[-8],yyvsp[-6],0); yyval = oper5(OUSERDEF,yyvsp[-8],yyvsp[-6],yyvsp[-4],yyvsp[-2],yyvsp[-1]); }
-break;
-case 10:
-#line 78 "a2p.y"
-{ yyval = oper2(OHUNK,Nullop,oper2(OJUNK,yyvsp[-2],yyvsp[-1])); }
-break;
-case 13:
-#line 84 "a2p.y"
-{ yyval = rememberargs(yyval); }
-break;
-case 14:
-#line 88 "a2p.y"
-{ yyval = oper1(OPAT,yyvsp[0]); }
-break;
-case 15:
-#line 90 "a2p.y"
-{ yyval = oper2(ORANGE,yyvsp[-2],yyvsp[0]); }
-break;
-case 20:
-#line 98 "a2p.y"
-{ yyval = oper3(OCOND,yyvsp[-4],yyvsp[-2],yyvsp[0]); }
-break;
-case 21:
-#line 103 "a2p.y"
-{ yyval = oper1(OCPAREN,yyvsp[-1]); }
-break;
-case 22:
-#line 105 "a2p.y"
-{ yyval = oper3(OCANDAND,yyvsp[-3],yyvsp[-1],yyvsp[0]); }
-break;
-case 23:
-#line 107 "a2p.y"
-{ yyval = oper3(OCOROR,yyvsp[-3],yyvsp[-1],yyvsp[0]); }
-break;
-case 24:
-#line 109 "a2p.y"
-{ yyval = oper1(OCNOT,yyvsp[0]); }
-break;
-case 25:
-#line 113 "a2p.y"
-{ yyval = oper3(ORELOP,yyvsp[-1],yyvsp[-2],yyvsp[0]); }
-break;
-case 26:
-#line 115 "a2p.y"
-{ yyval = oper3(ORELOP,string(">",1),yyvsp[-2],yyvsp[0]); }
-break;
-case 27:
-#line 117 "a2p.y"
-{ yyval = oper3(ORELOP,string("<",1),yyvsp[-2],yyvsp[0]); }
-break;
-case 28:
-#line 119 "a2p.y"
-{ yyval = oper1(ORPAREN,yyvsp[-1]); }
-break;
-case 29:
-#line 123 "a2p.y"
-{ yyval = oper3(OMATCHOP,yyvsp[-1],yyvsp[-2],yyvsp[0]); }
-break;
-case 30:
-#line 125 "a2p.y"
-{ yyval = oper3(OMATCHOP,yyvsp[-1],yyvsp[-2],oper1(OREGEX,yyvsp[0])); }
-break;
-case 31:
-#line 127 "a2p.y"
-{ yyval = oper1(OREGEX,yyvsp[0]); }
-break;
-case 32:
-#line 129 "a2p.y"
-{ yyval = oper1(OMPAREN,yyvsp[-1]); }
-break;
-case 33:
-#line 133 "a2p.y"
-{ yyval = yyvsp[0]; }
-break;
-case 34:
-#line 135 "a2p.y"
-{ yyval = oper2(OCONCAT,yyvsp[-1],yyvsp[0]); }
-break;
-case 35:
-#line 137 "a2p.y"
-{ yyval = oper3(OCOND,yyvsp[-4],yyvsp[-2],yyvsp[0]); }
-break;
-case 36:
-#line 139 "a2p.y"
-{ yyval = oper3(OASSIGN,yyvsp[-1],yyvsp[-2],yyvsp[0]);
- if ((ops[yyvsp[-2]].ival & 255) == OFLD)
- lval_field = TRUE;
- if ((ops[yyvsp[-2]].ival & 255) == OVFLD)
- lval_field = TRUE;
- }
-break;
-case 39:
-#line 151 "a2p.y"
-{ yyval = yyvsp[0]; }
-break;
-case 40:
-#line 153 "a2p.y"
-{ yyval = oper1(ONUM,yyvsp[0]); }
-break;
-case 41:
-#line 155 "a2p.y"
-{ yyval = oper1(OSTR,yyvsp[0]); }
-break;
-case 42:
-#line 157 "a2p.y"
-{ yyval = oper2(OADD,yyvsp[-2],yyvsp[0]); }
-break;
-case 43:
-#line 159 "a2p.y"
-{ yyval = oper2(OSUBTRACT,yyvsp[-2],yyvsp[0]); }
-break;
-case 44:
-#line 161 "a2p.y"
-{ yyval = oper2(OMULT,yyvsp[-2],yyvsp[0]); }
-break;
-case 45:
-#line 163 "a2p.y"
-{ yyval = oper2(ODIV,yyvsp[-2],yyvsp[0]); }
-break;
-case 46:
-#line 165 "a2p.y"
-{ yyval = oper2(OMOD,yyvsp[-2],yyvsp[0]); }
-break;
-case 47:
-#line 167 "a2p.y"
-{ yyval = oper2(OPOW,yyvsp[-2],yyvsp[0]); }
-break;
-case 48:
-#line 169 "a2p.y"
-{ yyval = oper2(ODEFINED,aryrefarg(yyvsp[0]),yyvsp[-2]); }
-break;
-case 49:
-#line 171 "a2p.y"
-{ yyval = oper1(OPOSTINCR,yyvsp[-1]); }
-break;
-case 50:
-#line 173 "a2p.y"
-{ yyval = oper1(OPOSTDECR,yyvsp[-1]); }
-break;
-case 51:
-#line 175 "a2p.y"
-{ yyval = oper1(OPREINCR,yyvsp[0]); }
-break;
-case 52:
-#line 177 "a2p.y"
-{ yyval = oper1(OPREDECR,yyvsp[0]); }
-break;
-case 53:
-#line 179 "a2p.y"
-{ yyval = oper1(OUMINUS,yyvsp[0]); }
-break;
-case 54:
-#line 181 "a2p.y"
-{ yyval = oper1(OUPLUS,yyvsp[0]); }
-break;
-case 55:
-#line 183 "a2p.y"
-{ yyval = oper1(OPAREN,yyvsp[-1]); }
-break;
-case 56:
-#line 185 "a2p.y"
-{ yyval = oper0(OGETLINE); }
-break;
-case 57:
-#line 187 "a2p.y"
-{ yyval = oper1(OGETLINE,yyvsp[0]); }
-break;
-case 58:
-#line 189 "a2p.y"
-{ yyval = oper3(OGETLINE,Nullop,string("<",1),yyvsp[0]);
- if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 59:
-#line 192 "a2p.y"
-{ yyval = oper3(OGETLINE,yyvsp[-2],string("<",1),yyvsp[0]);
- if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 60:
-#line 195 "a2p.y"
-{ yyval = oper3(OGETLINE,Nullop,string("|",1),yyvsp[-2]);
- if (ops[yyvsp[-2]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 61:
-#line 198 "a2p.y"
-{ yyval = oper3(OGETLINE,yyvsp[0],string("|",1),yyvsp[-3]);
- if (ops[yyvsp[-3]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 62:
-#line 201 "a2p.y"
-{ yyval = oper0(yyvsp[0]); need_entire = do_chop = TRUE; }
-break;
-case 63:
-#line 203 "a2p.y"
-{ yyval = oper1(yyvsp[-2],Nullop); need_entire = do_chop = TRUE; }
-break;
-case 64:
-#line 205 "a2p.y"
-{ yyval = oper1(yyvsp[-3],yyvsp[-1]); }
-break;
-case 65:
-#line 207 "a2p.y"
-{ yyval = oper1(yyvsp[-3],yyvsp[-1]); }
-break;
-case 66:
-#line 209 "a2p.y"
-{ yyval = oper2(OUSERFUN,yyvsp[-3],yyvsp[-1]); }
-break;
-case 67:
-#line 211 "a2p.y"
-{ yyval = oper1(OSPRINTF,yyvsp[-1]); }
-break;
-case 68:
-#line 213 "a2p.y"
-{ yyval = oper1(OSPRINTF,yyvsp[0]); }
-break;
-case 69:
-#line 215 "a2p.y"
-{ yyval = oper3(OSUBSTR,yyvsp[-5],yyvsp[-3],yyvsp[-1]); }
-break;
-case 70:
-#line 217 "a2p.y"
-{ yyval = oper2(OSUBSTR,yyvsp[-3],yyvsp[-1]); }
-break;
-case 71:
-#line 219 "a2p.y"
-{ yyval = oper3(OSPLIT,yyvsp[-5],aryrefarg(numary(yyvsp[-3])),yyvsp[-1]); }
-break;
-case 72:
-#line 221 "a2p.y"
-{ yyval = oper3(OSPLIT,yyvsp[-5],aryrefarg(numary(yyvsp[-3])),oper1(OREGEX,yyvsp[-1]));}
-break;
-case 73:
-#line 223 "a2p.y"
-{ yyval = oper2(OSPLIT,yyvsp[-3],aryrefarg(numary(yyvsp[-1]))); }
-break;
-case 74:
-#line 225 "a2p.y"
-{ yyval = oper2(OINDEX,yyvsp[-3],yyvsp[-1]); }
-break;
-case 75:
-#line 227 "a2p.y"
-{ yyval = oper2(OMATCH,yyvsp[-3],oper1(OREGEX,yyvsp[-1])); }
-break;
-case 76:
-#line 229 "a2p.y"
-{ yyval = oper2(OMATCH,yyvsp[-3],yyvsp[-1]); }
-break;
-case 77:
-#line 231 "a2p.y"
-{ yyval = oper2(OSUB,yyvsp[-3],yyvsp[-1]); }
-break;
-case 78:
-#line 233 "a2p.y"
-{ yyval = oper2(OSUB,oper1(OREGEX,yyvsp[-3]),yyvsp[-1]); }
-break;
-case 79:
-#line 235 "a2p.y"
-{ yyval = oper2(OGSUB,yyvsp[-3],yyvsp[-1]); }
-break;
-case 80:
-#line 237 "a2p.y"
-{ yyval = oper2(OGSUB,oper1(OREGEX,yyvsp[-3]),yyvsp[-1]); }
-break;
-case 81:
-#line 239 "a2p.y"
-{ yyval = oper3(OSUB,yyvsp[-5],yyvsp[-3],yyvsp[-1]); }
-break;
-case 82:
-#line 241 "a2p.y"
-{ yyval = oper3(OSUB,oper1(OREGEX,yyvsp[-5]),yyvsp[-3],yyvsp[-1]); }
-break;
-case 83:
-#line 243 "a2p.y"
-{ yyval = oper3(OGSUB,yyvsp[-5],yyvsp[-3],yyvsp[-1]); }
-break;
-case 84:
-#line 245 "a2p.y"
-{ yyval = oper3(OGSUB,oper1(OREGEX,yyvsp[-5]),yyvsp[-3],yyvsp[-1]); }
-break;
-case 85:
-#line 249 "a2p.y"
-{ yyval = oper1(OVAR,yyvsp[0]); }
-break;
-case 86:
-#line 251 "a2p.y"
-{ yyval = oper2(OVAR,aryrefarg(yyvsp[-3]),yyvsp[-1]); }
-break;
-case 87:
-#line 253 "a2p.y"
-{ yyval = oper1(OFLD,yyvsp[0]); }
-break;
-case 88:
-#line 255 "a2p.y"
-{ yyval = oper1(OVFLD,yyvsp[0]); }
-break;
-case 91:
-#line 262 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 92:
-#line 266 "a2p.y"
-{ yyval = oper3(OCOMMA,yyvsp[-3],yyvsp[-1],yyvsp[0]); }
-break;
-case 93:
-#line 268 "a2p.y"
-{ yyval = oper3(OCOMMA,yyvsp[-3],yyvsp[-1],yyvsp[0]); }
-break;
-case 94:
-#line 270 "a2p.y"
-{ yyval = yyvsp[-1]; }
-break;
-case 95:
-#line 274 "a2p.y"
-{ yyval = oper2(OJUNK,yyvsp[-1],yyvsp[0]); }
-break;
-case 96:
-#line 276 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 97:
-#line 280 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); }
-break;
-case 98:
-#line 282 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); }
-break;
-case 99:
-#line 284 "a2p.y"
-{ yyval = oper0(ONEWLINE); }
-break;
-case 100:
-#line 286 "a2p.y"
-{ yyval = oper1(OCOMMENT,yyvsp[0]); }
-break;
-case 101:
-#line 290 "a2p.y"
-{ yyval = oper2(OJUNK,yyvsp[-1],yyvsp[0]); }
-break;
-case 102:
-#line 292 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 103:
-#line 296 "a2p.y"
-{ yyval = oper0(ONEWLINE); }
-break;
-case 104:
-#line 298 "a2p.y"
-{ yyval = oper1(OCOMMENT,yyvsp[0]); }
-break;
-case 105:
-#line 303 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSEMICOLON),yyvsp[0]); }
-break;
-case 106:
-#line 305 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0]); }
-break;
-case 107:
-#line 307 "a2p.y"
-{ yyval = oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0]); }
-break;
-case 108:
-#line 309 "a2p.y"
-{ yyval = oper2(OJUNK,oper1(OSCOMMENT,yyvsp[-1]),yyvsp[0]); }
-break;
-case 109:
-#line 313 "a2p.y"
-{ yyval = oper2(OSTATES,yyvsp[-1],yyvsp[0]); }
-break;
-case 110:
-#line 315 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 111:
-#line 320 "a2p.y"
-{ yyval = oper2(OJUNK,oper2(OSTATE,yyvsp[-2],yyvsp[-1]),yyvsp[0]); }
-break;
-case 112:
-#line 322 "a2p.y"
-{ yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSEMICOLON),yyvsp[0])); }
-break;
-case 113:
-#line 324 "a2p.y"
-{ yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0])); }
-break;
-case 116:
-#line 330 "a2p.y"
-{ yyval = Nullop; }
-break;
-case 118:
-#line 336 "a2p.y"
-{ yyval = oper3(OPRINT,yyvsp[-2],yyvsp[-1],yyvsp[0]);
- do_opens = TRUE;
- saw_ORS = saw_OFS = TRUE;
- if (!yyvsp[-2]) need_entire = TRUE;
- if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 119:
-#line 342 "a2p.y"
-{ yyval = oper1(OPRINT,yyvsp[0]);
- if (!yyvsp[0]) need_entire = TRUE;
- saw_ORS = saw_OFS = TRUE;
- }
-break;
-case 120:
-#line 347 "a2p.y"
-{ yyval = oper3(OPRINTF,yyvsp[-2],yyvsp[-1],yyvsp[0]);
- do_opens = TRUE;
- if (!yyvsp[-2]) need_entire = TRUE;
- if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
-break;
-case 121:
-#line 352 "a2p.y"
-{ yyval = oper1(OPRINTF,yyvsp[0]);
- if (!yyvsp[0]) need_entire = TRUE;
- }
-break;
-case 122:
-#line 356 "a2p.y"
-{ yyval = oper0(OBREAK); }
-break;
-case 123:
-#line 358 "a2p.y"
-{ yyval = oper0(ONEXT); }
-break;
-case 124:
-#line 360 "a2p.y"
-{ yyval = oper0(OEXIT); }
-break;
-case 125:
-#line 362 "a2p.y"
-{ yyval = oper1(OEXIT,yyvsp[0]); }
-break;
-case 126:
-#line 364 "a2p.y"
-{ yyval = oper0(OCONTINUE); }
-break;
-case 127:
-#line 366 "a2p.y"
-{ yyval = oper0(ORETURN); }
-break;
-case 128:
-#line 368 "a2p.y"
-{ yyval = oper1(ORETURN,yyvsp[0]); }
-break;
-case 129:
-#line 370 "a2p.y"
-{ yyval = oper2(ODELETE,aryrefarg(yyvsp[-3]),yyvsp[-1]); }
-break;
-case 130:
-#line 374 "a2p.y"
-{ yyval = oper1(OREDIR,string(">",1)); }
-break;
-case 131:
-#line 376 "a2p.y"
-{ yyval = oper1(OREDIR,string(">>",2)); }
-break;
-case 132:
-#line 378 "a2p.y"
-{ yyval = oper1(OREDIR,string("|",1)); }
-break;
-case 133:
-#line 383 "a2p.y"
-{ yyval = oper2(OIF,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 134:
-#line 385 "a2p.y"
-{ yyval = oper3(OIF,yyvsp[-6],bl(yyvsp[-3],yyvsp[-4]),bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 135:
-#line 387 "a2p.y"
-{ yyval = oper2(OWHILE,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 136:
-#line 389 "a2p.y"
-{ yyval = oper2(ODO,bl(yyvsp[-4],yyvsp[-5]),yyvsp[-1]); }
-break;
-case 137:
-#line 391 "a2p.y"
-{ yyval = oper4(OFOR,yyvsp[-7],yyvsp[-5],yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 138:
-#line 393 "a2p.y"
-{ yyval = oper4(OFOR,yyvsp[-6],string("",0),yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 139:
-#line 395 "a2p.y"
-{ yyval = oper2(OFORIN,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); }
-break;
-case 140:
-#line 397 "a2p.y"
-{ yyval = oper3(OBLOCK,oper2(OJUNK,yyvsp[-3],yyvsp[-2]),Nullop,yyvsp[0]); }
-break;
-#line 2751 "y.tab.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", 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("yydebug: state %d, reading %d (%s)\n",
- 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("yydebug: after reduction, shifting from state %d \
-to state %d\n", *yyssp, yystate);
-#endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- return (1);
-yyaccept:
- return (0);
-}
diff --git a/contrib/perl5/x2p/a2p.h b/contrib/perl5/x2p/a2p.h
deleted file mode 100644
index cbcb80c..0000000
--- a/contrib/perl5/x2p/a2p.h
+++ /dev/null
@@ -1,486 +0,0 @@
-/* $RCSfile: a2p.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:09 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: a2p.h,v $
- */
-
-#define VOIDUSED 1
-
-#ifdef WIN32
-#define _INC_WIN32_PERL5 /* kludge around win32 stdio layer */
-#endif
-
-#ifdef VMS
-# include "config.h"
-#else
-# include "../config.h"
-#endif
-
-#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
-# define STANDARD_C 1
-#endif
-
-#ifdef WIN32
-#undef USE_STDIO_PTR /* XXX fast gets won't work, must investigate */
-# ifndef STANDARD_C
-# define STANDARD_C
-# endif
-# if defined(__BORLANDC__)
-# pragma warn -ccc
-# pragma warn -rch
-# pragma warn -sig
-# pragma warn -pia
-# pragma warn -par
-# pragma warn -aus
-# pragma warn -use
-# pragma warn -csu
-# pragma warn -pro
-# elif defined(_MSC_VER)
-# elif defined(__MINGW32__)
-# endif
-#endif
-
-/* Use all the "standard" definitions? */
-#if defined(STANDARD_C) && defined(I_STDLIB)
-# include <stdlib.h>
-#endif /* STANDARD_C */
-
-#include <stdio.h>
-
-#ifdef I_MATH
-#include <math.h>
-#endif
-
-#ifdef I_SYS_TYPES
-# include <sys/types.h>
-#endif
-
-#ifdef USE_NEXT_CTYPE
-
-#if NX_CURRENT_COMPILER_RELEASE >= 400
-#include <objc/NXCType.h>
-#else /* NX_CURRENT_COMPILER_RELEASE < 400 */
-#include <appkit/NXCType.h>
-#endif /* NX_CURRENT_COMPILER_RELEASE >= 400 */
-
-#else /* !USE_NEXT_CTYPE */
-#include <ctype.h>
-#endif /* USE_NEXT_CTYPE */
-
-#define MEM_SIZE Size_t
-
-#ifndef STANDARD_C
- Malloc_t malloc (MEM_SIZE nbytes);
- Malloc_t calloc (MEM_SIZE elements, MEM_SIZE size);
- Malloc_t realloc (Malloc_t where, MEM_SIZE nbytes);
- Free_t free (Malloc_t where);
-#endif
-
-#if defined(I_STRING) || defined(__cplusplus)
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-#if !defined(HAS_BCOPY) || defined(__cplusplus)
-# define bcopy(s1,s2,l) memcpy(s2,s1,l)
-#endif
-#if !defined(HAS_BZERO) || defined(__cplusplus)
-# define bzero(s,l) memset(s,0,l)
-#endif
-
-#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
-#define strchr index
-#define strrchr rindex
-#endif
-
-
-#ifdef I_TIME
-# include <time.h>
-#endif
-
-#ifdef I_SYS_TIME
-# ifdef I_SYS_TIME_KERNEL
-# define KERNEL
-# endif
-# include <sys/time.h>
-# ifdef I_SYS_TIME_KERNEL
-# undef KERNEL
-# endif
-#endif
-
-#ifndef MSDOS
-# if defined(HAS_TIMES) && defined(I_SYS_TIMES)
-# include <sys/times.h>
-# endif
-#endif
-
-#ifdef DOSISH
-# if defined(OS2)
-# define PTHX_UNUSED
-# include "../os2ish.h"
-# else
-# include "../dosish.h"
-# endif
-#else
-# if defined(VMS)
-# define NO_PERL_TYPEDEFS
-# include "vmsish.h"
-# endif
-#endif
-
-#ifndef STANDARD_C
-/* All of these are in stdlib.h or time.h for ANSI C */
-Time_t time();
-struct tm *gmtime(), *localtime();
-#if defined(OEMVS) || defined(__OPEN_VM)
-char *(strchr)(), *(strrchr)();
-char *(strcpy)(), *(strcat)();
-#else
-char *strchr(), *strrchr();
-char *strcpy(), *strcat();
-#endif
-#endif /* ! STANDARD_C */
-
-#ifdef VMS
-# include "handy.h"
-#else
-# include "../handy.h"
-#endif
-
-#undef Nullfp
-#define Nullfp Null(FILE*)
-
-#define Nullop 0
-
-#define OPROG 1
-#define OJUNK 2
-#define OHUNKS 3
-#define ORANGE 4
-#define OPAT 5
-#define OHUNK 6
-#define OPPAREN 7
-#define OPANDAND 8
-#define OPOROR 9
-#define OPNOT 10
-#define OCPAREN 11
-#define OCANDAND 12
-#define OCOROR 13
-#define OCNOT 14
-#define ORELOP 15
-#define ORPAREN 16
-#define OMATCHOP 17
-#define OMPAREN 18
-#define OCONCAT 19
-#define OASSIGN 20
-#define OADD 21
-#define OSUBTRACT 22
-#define OMULT 23
-#define ODIV 24
-#define OMOD 25
-#define OPOSTINCR 26
-#define OPOSTDECR 27
-#define OPREINCR 28
-#define OPREDECR 29
-#define OUMINUS 30
-#define OUPLUS 31
-#define OPAREN 32
-#define OGETLINE 33
-#define OSPRINTF 34
-#define OSUBSTR 35
-#define OSTRING 36
-#define OSPLIT 37
-#define OSNEWLINE 38
-#define OINDEX 39
-#define ONUM 40
-#define OSTR 41
-#define OVAR 42
-#define OFLD 43
-#define ONEWLINE 44
-#define OCOMMENT 45
-#define OCOMMA 46
-#define OSEMICOLON 47
-#define OSCOMMENT 48
-#define OSTATES 49
-#define OSTATE 50
-#define OPRINT 51
-#define OPRINTF 52
-#define OBREAK 53
-#define ONEXT 54
-#define OEXIT 55
-#define OCONTINUE 56
-#define OREDIR 57
-#define OIF 58
-#define OWHILE 59
-#define OFOR 60
-#define OFORIN 61
-#define OVFLD 62
-#define OBLOCK 63
-#define OREGEX 64
-#define OLENGTH 65
-#define OLOG 66
-#define OEXP 67
-#define OSQRT 68
-#define OINT 69
-#define ODO 70
-#define OPOW 71
-#define OSUB 72
-#define OGSUB 73
-#define OMATCH 74
-#define OUSERFUN 75
-#define OUSERDEF 76
-#define OCLOSE 77
-#define OATAN2 78
-#define OSIN 79
-#define OCOS 80
-#define ORAND 81
-#define OSRAND 82
-#define ODELETE 83
-#define OSYSTEM 84
-#define OCOND 85
-#define ORETURN 86
-#define ODEFINED 87
-#define OSTAR 88
-
-#ifdef DOINIT
-char *opname[] = {
- "0",
- "PROG",
- "JUNK",
- "HUNKS",
- "RANGE",
- "PAT",
- "HUNK",
- "PPAREN",
- "PANDAND",
- "POROR",
- "PNOT",
- "CPAREN",
- "CANDAND",
- "COROR",
- "CNOT",
- "RELOP",
- "RPAREN",
- "MATCHOP",
- "MPAREN",
- "CONCAT",
- "ASSIGN",
- "ADD",
- "SUBTRACT",
- "MULT",
- "DIV",
- "MOD",
- "POSTINCR",
- "POSTDECR",
- "PREINCR",
- "PREDECR",
- "UMINUS",
- "UPLUS",
- "PAREN",
- "GETLINE",
- "SPRINTF",
- "SUBSTR",
- "STRING",
- "SPLIT",
- "SNEWLINE",
- "INDEX",
- "NUM",
- "STR",
- "VAR",
- "FLD",
- "NEWLINE",
- "COMMENT",
- "COMMA",
- "SEMICOLON",
- "SCOMMENT",
- "STATES",
- "STATE",
- "PRINT",
- "PRINTF",
- "BREAK",
- "NEXT",
- "EXIT",
- "CONTINUE",
- "REDIR",
- "IF",
- "WHILE",
- "FOR",
- "FORIN",
- "VFLD",
- "BLOCK",
- "REGEX",
- "LENGTH",
- "LOG",
- "EXP",
- "SQRT",
- "INT",
- "DO",
- "POW",
- "SUB",
- "GSUB",
- "MATCH",
- "USERFUN",
- "USERDEF",
- "CLOSE",
- "ATAN2",
- "SIN",
- "COS",
- "RAND",
- "SRAND",
- "DELETE",
- "SYSTEM",
- "COND",
- "RETURN",
- "DEFINED",
- "STAR",
- "89"
-};
-#else
-extern char *opname[];
-#endif
-
-EXT int mop INIT(1);
-
-union u_ops {
- int ival;
- char *cval;
-};
-#if defined(iAPX286) || defined(M_I286) || defined(I80286) /* 80286 hack */
-#define OPSMAX (64000/sizeof(union u_ops)) /* approx. max segment size */
-#else
-#define OPSMAX 50000
-#endif /* 80286 hack */
-EXT union u_ops ops[OPSMAX];
-
-typedef struct string STR;
-typedef struct htbl HASH;
-
-#include "str.h"
-#include "hash.h"
-
-
-/* A string is TRUE if not "" or "0". */
-#define True(val) (tmps = (val), (*tmps && !(*tmps == '0' && !tmps[1])))
-EXT char *Yes INIT("1");
-EXT char *No INIT("");
-
-#define str_true(str) (Str = (str), (Str->str_pok ? True(Str->str_ptr) : (Str->str_nok ? (Str->str_nval != 0.0) : 0 )))
-
-#define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),buf) : "" )))
-#define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
-#define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_nval : str_2num(Str)))
-EXT STR *Str;
-
-#define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
-
-/* Prototypes for things in a2p.c */
-int aryrefarg ( int arg );
-int bl ( int arg, int maybe );
-void dump ( int branch );
-int fixfargs ( int name, int arg, int prevargs );
-int fixrargs ( char *name, int arg, int prevargs );
-void fixup ( STR *str );
-int numary ( int arg );
-int oper0 ( int type );
-int oper1 ( int type, int arg1 );
-int oper2 ( int type, int arg1, int arg2 );
-int oper3 ( int type, int arg1, int arg2, int arg3 );
-int oper4 ( int type, int arg1, int arg2, int arg3, int arg4 );
-int oper5 ( int type, int arg1, int arg2, int arg3, int arg4, int arg5 );
-void putlines ( STR *str );
-void putone ( void );
-int rememberargs ( int arg );
-char * scannum ( char *s );
-char * scanpat ( char *s );
-int string ( char *ptr, int len );
-void yyerror ( char *s );
-int yylex ( void );
-
-EXT int line INIT(0);
-
-EXT FILE *rsfp;
-EXT char buf[2048];
-EXT char *bufptr INIT(buf);
-
-EXT STR *linestr INIT(Nullstr);
-
-EXT char tokenbuf[2048];
-EXT int expectterm INIT(TRUE);
-
-#ifdef DEBUGGING
-EXT int debug INIT(0);
-EXT int dlevel INIT(0);
-#define YYDEBUG 1
-extern int yydebug;
-#else
-# ifndef YYDEBUG
-# define YYDEBUG 0
-# endif
-#endif
-
-EXT STR *freestrroot INIT(Nullstr);
-
-EXT STR str_no;
-EXT STR str_yes;
-
-EXT bool do_split INIT(FALSE);
-EXT bool split_to_array INIT(FALSE);
-EXT bool set_array_base INIT(FALSE);
-EXT bool saw_RS INIT(FALSE);
-EXT bool saw_OFS INIT(FALSE);
-EXT bool saw_ORS INIT(FALSE);
-EXT bool saw_line_op INIT(FALSE);
-EXT bool in_begin INIT(TRUE);
-EXT bool do_opens INIT(FALSE);
-EXT bool do_fancy_opens INIT(FALSE);
-EXT bool lval_field INIT(FALSE);
-EXT bool do_chop INIT(FALSE);
-EXT bool need_entire INIT(FALSE);
-EXT bool absmaxfld INIT(FALSE);
-EXT bool saw_altinput INIT(FALSE);
-
-EXT bool nomemok INIT(FALSE);
-
-EXT char const_FS INIT(0);
-EXT char *namelist INIT(Nullch);
-EXT char fswitch INIT(0);
-EXT bool old_awk INIT(0);
-
-EXT int saw_FS INIT(0);
-EXT int maxfld INIT(0);
-EXT int arymax INIT(0);
-EXT char *nameary[100];
-
-EXT STR *opens;
-
-EXT HASH *symtab;
-EXT HASH *curarghash;
-
-#define P_MIN 0
-#define P_LISTOP 5
-#define P_COMMA 10
-#define P_ASSIGN 15
-#define P_COND 20
-#define P_DOTDOT 25
-#define P_OROR 30
-#define P_ANDAND 35
-#define P_OR 40
-#define P_AND 45
-#define P_EQ 50
-#define P_REL 55
-#define P_UNI 60
-#define P_FILETEST 65
-#define P_SHIFT 70
-#define P_ADD 75
-#define P_MUL 80
-#define P_MATCH 85
-#define P_UNARY 90
-#define P_POW 95
-#define P_AUTO 100
-#define P_MAX 999
-
-EXT int an;
diff --git a/contrib/perl5/x2p/a2p.pod b/contrib/perl5/x2p/a2p.pod
deleted file mode 100644
index f6395a4..0000000
--- a/contrib/perl5/x2p/a2p.pod
+++ /dev/null
@@ -1,177 +0,0 @@
-=head1 NAME
-
-a2p - Awk to Perl translator
-
-=head1 SYNOPSIS
-
-B<a2p [options] filename>
-
-=head1 DESCRIPTION
-
-I<A2p> takes an awk script specified on the command line (or from
-standard input) and produces a comparable I<perl> script on the
-standard output.
-
-=head2 Options
-
-Options include:
-
-=over 5
-
-=item B<-DE<lt>numberE<gt>>
-
-sets debugging flags.
-
-=item B<-FE<lt>characterE<gt>>
-
-tells a2p that this awk script is always invoked with this B<-F>
-switch.
-
-=item B<-nE<lt>fieldlistE<gt>>
-
-specifies the names of the input fields if input does not have to be
-split into an array. If you were translating an awk script that
-processes the password file, you might say:
-
- a2p -7 -nlogin.password.uid.gid.gcos.shell.home
-
-Any delimiter can be used to separate the field names.
-
-=item B<-E<lt>numberE<gt>>
-
-causes a2p to assume that input will always have that many fields.
-
-=item B<-o>
-
-tells a2p to use old awk behavior. The only current differences are:
-
-=over 5
-
-=item
-
-Old awk always has a line loop, even if there are no line
-actions, whereas new awk does not.
-
-=item
-
-In old awk, sprintf is extremely greedy about its arguments.
-For example, given the statement
-
- print sprintf(some_args), extra_args;
-
-old awk considers I<extra_args> to be arguments to C<sprintf>; new awk
-considers them arguments to C<print>.
-
-=back
-
-=head2 "Considerations"
-
-A2p cannot do as good a job translating as a human would, but it
-usually does pretty well. There are some areas where you may want to
-examine the perl script produced and tweak it some. Here are some of
-them, in no particular order.
-
-There is an awk idiom of putting int() around a string expression to
-force numeric interpretation, even though the argument is always
-integer anyway. This is generally unneeded in perl, but a2p can't
-tell if the argument is always going to be integer, so it leaves it
-in. You may wish to remove it.
-
-Perl differentiates numeric comparison from string comparison. Awk
-has one operator for both that decides at run time which comparison to
-do. A2p does not try to do a complete job of awk emulation at this
-point. Instead it guesses which one you want. It's almost always
-right, but it can be spoofed. All such guesses are marked with the
-comment "C<#???>". You should go through and check them. You might
-want to run at least once with the B<-w> switch to perl, which will
-warn you if you use == where you should have used eq.
-
-Perl does not attempt to emulate the behavior of awk in which
-nonexistent array elements spring into existence simply by being
-referenced. If somehow you are relying on this mechanism to create
-null entries for a subsequent for...in, they won't be there in perl.
-
-If a2p makes a split line that assigns to a list of variables that
-looks like (Fld1, Fld2, Fld3...) you may want to rerun a2p using the
-B<-n> option mentioned above. This will let you name the fields
-throughout the script. If it splits to an array instead, the script
-is probably referring to the number of fields somewhere.
-
-The exit statement in awk doesn't necessarily exit; it goes to the END
-block if there is one. Awk scripts that do contortions within the END
-block to bypass the block under such circumstances can be simplified
-by removing the conditional in the END block and just exiting directly
-from the perl script.
-
-Perl has two kinds of array, numerically-indexed and associative.
-Perl associative arrays are called "hashes". Awk arrays are usually
-translated to hashes, but if you happen to know that the index is
-always going to be numeric you could change the {...} to [...].
-Iteration over a hash is done using the keys() function, but iteration
-over an array is NOT. You might need to modify any loop that iterates
-over such an array.
-
-Awk starts by assuming OFMT has the value %.6g. Perl starts by
-assuming its equivalent, $#, to have the value %.20g. You'll want to
-set $# explicitly if you use the default value of OFMT.
-
-Near the top of the line loop will be the split operation that is
-implicit in the awk script. There are times when you can move this
-down past some conditionals that test the entire record so that the
-split is not done as often.
-
-For aesthetic reasons you may wish to change the array base $[ from 1
-back to perl's default of 0, but remember to change all array
-subscripts AND all substr() and index() operations to match.
-
-Cute comments that say "# Here is a workaround because awk is dumb"
-are passed through unmodified.
-
-Awk scripts are often embedded in a shell script that pipes stuff into
-and out of awk. Often the shell script wrapper can be incorporated
-into the perl script, since perl can start up pipes into and out of
-itself, and can do other things that awk can't do by itself.
-
-Scripts that refer to the special variables RSTART and RLENGTH can
-often be simplified by referring to the variables $`, $& and $', as
-long as they are within the scope of the pattern match that sets them.
-
-The produced perl script may have subroutines defined to deal with
-awk's semantics regarding getline and print. Since a2p usually picks
-correctness over efficiency. it is almost always possible to rewrite
-such code to be more efficient by discarding the semantic sugar.
-
-For efficiency, you may wish to remove the keyword from any return
-statement that is the last statement executed in a subroutine. A2p
-catches the most common case, but doesn't analyze embedded blocks for
-subtler cases.
-
-ARGV[0] translates to $ARGV0, but ARGV[n] translates to $ARGV[$n]. A
-loop that tries to iterate over ARGV[0] won't find it.
-
-=head1 ENVIRONMENT
-
-A2p uses no environment variables.
-
-=head1 AUTHOR
-
-Larry Wall E<lt>F<larry@wall.org>E<gt>
-
-=head1 FILES
-
-=head1 SEE ALSO
-
- perl The perl compiler/interpreter
-
- s2p sed to perl translator
-
-=head1 DIAGNOSTICS
-
-=head1 BUGS
-
-It would be possible to emulate awk's behavior in selecting string
-versus numeric operations at run time by inspection of the operands,
-but it would be gross and inefficient. Besides, a2p almost always
-guesses right.
-
-Storage for the awk syntax tree is currently static, and can run out.
diff --git a/contrib/perl5/x2p/a2p.y b/contrib/perl5/x2p/a2p.y
deleted file mode 100644
index beec3a6..0000000
--- a/contrib/perl5/x2p/a2p.y
+++ /dev/null
@@ -1,404 +0,0 @@
-%{
-/* $RCSfile: a2p.y,v $$Revision: 4.1 $$Date: 92/08/07 18:29:12 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: a2p.y,v $
- */
-
-#include "INTERN.h"
-#include "a2p.h"
-
-int root;
-int begins = Nullop;
-int ends = Nullop;
-
-%}
-%token BEGIN END
-%token REGEX
-%token SEMINEW NEWLINE COMMENT
-%token FUN1 FUNN GRGR
-%token PRINT PRINTF SPRINTF_OLD SPRINTF_NEW SPLIT
-%token IF ELSE WHILE FOR IN
-%token EXIT NEXT BREAK CONTINUE RET
-%token GETLINE DO SUB GSUB MATCH
-%token FUNCTION USERFUN DELETE
-
-%right ASGNOP
-%right '?' ':'
-%left OROR
-%left ANDAND
-%left IN
-%left NUMBER VAR SUBSTR INDEX
-%left MATCHOP
-%left RELOP '<' '>'
-%left OR
-%left STRING
-%left '+' '-'
-%left '*' '/' '%'
-%right UMINUS
-%left NOT
-%right '^'
-%left INCR DECR
-%left FIELD VFIELD
-
-%%
-
-program : junk hunks
- { root = oper4(OPROG,$1,begins,$2,ends); }
- ;
-
-begin : BEGIN '{' maybe states '}' junk
- { begins = oper4(OJUNK,begins,$3,$4,$6); in_begin = FALSE;
- $$ = Nullop; }
- ;
-
-end : END '{' maybe states '}'
- { ends = oper3(OJUNK,ends,$3,$4); $$ = Nullop; }
- | end NEWLINE
- { $$ = $1; }
- ;
-
-hunks : hunks hunk junk
- { $$ = oper3(OHUNKS,$1,$2,$3); }
- | /* NULL */
- { $$ = Nullop; }
- ;
-
-hunk : patpat
- { $$ = oper1(OHUNK,$1); need_entire = TRUE; }
- | patpat '{' maybe states '}'
- { $$ = oper2(OHUNK,$1,oper2(OJUNK,$3,$4)); }
- | FUNCTION USERFUN '(' arg_list ')' maybe '{' maybe states '}'
- { fixfargs($2,$4,0); $$ = oper5(OUSERDEF,$2,$4,$6,$8,$9); }
- | '{' maybe states '}'
- { $$ = oper2(OHUNK,Nullop,oper2(OJUNK,$2,$3)); }
- | begin
- | end
- ;
-
-arg_list: expr_list
- { $$ = rememberargs($$); }
- ;
-
-patpat : cond
- { $$ = oper1(OPAT,$1); }
- | cond ',' cond
- { $$ = oper2(ORANGE,$1,$3); }
- ;
-
-cond : expr
- | match
- | rel
- | compound_cond
- | cond '?' expr ':' expr
- { $$ = oper3(OCOND,$1,$3,$5); }
- ;
-
-compound_cond
- : '(' compound_cond ')'
- { $$ = oper1(OCPAREN,$2); }
- | cond ANDAND maybe cond
- { $$ = oper3(OCANDAND,$1,$3,$4); }
- | cond OROR maybe cond
- { $$ = oper3(OCOROR,$1,$3,$4); }
- | NOT cond
- { $$ = oper1(OCNOT,$2); }
- ;
-
-rel : expr RELOP expr
- { $$ = oper3(ORELOP,$2,$1,$3); }
- | expr '>' expr
- { $$ = oper3(ORELOP,string(">",1),$1,$3); }
- | expr '<' expr
- { $$ = oper3(ORELOP,string("<",1),$1,$3); }
- | '(' rel ')'
- { $$ = oper1(ORPAREN,$2); }
- ;
-
-match : expr MATCHOP expr
- { $$ = oper3(OMATCHOP,$2,$1,$3); }
- | expr MATCHOP REGEX
- { $$ = oper3(OMATCHOP,$2,$1,oper1(OREGEX,$3)); }
- | REGEX %prec MATCHOP
- { $$ = oper1(OREGEX,$1); }
- | '(' match ')'
- { $$ = oper1(OMPAREN,$2); }
- ;
-
-expr : term
- { $$ = $1; }
- | expr term
- { $$ = oper2(OCONCAT,$1,$2); }
- | expr '?' expr ':' expr
- { $$ = oper3(OCOND,$1,$3,$5); }
- | variable ASGNOP cond
- { $$ = oper3(OASSIGN,$2,$1,$3);
- if ((ops[$1].ival & 255) == OFLD)
- lval_field = TRUE;
- if ((ops[$1].ival & 255) == OVFLD)
- lval_field = TRUE;
- }
- ;
-
-sprintf : SPRINTF_NEW
- | SPRINTF_OLD ;
-
-term : variable
- { $$ = $1; }
- | NUMBER
- { $$ = oper1(ONUM,$1); }
- | STRING
- { $$ = oper1(OSTR,$1); }
- | term '+' term
- { $$ = oper2(OADD,$1,$3); }
- | term '-' term
- { $$ = oper2(OSUBTRACT,$1,$3); }
- | term '*' term
- { $$ = oper2(OMULT,$1,$3); }
- | term '/' term
- { $$ = oper2(ODIV,$1,$3); }
- | term '%' term
- { $$ = oper2(OMOD,$1,$3); }
- | term '^' term
- { $$ = oper2(OPOW,$1,$3); }
- | term IN VAR
- { $$ = oper2(ODEFINED,aryrefarg($3),$1); }
- | variable INCR
- { $$ = oper1(OPOSTINCR,$1); }
- | variable DECR
- { $$ = oper1(OPOSTDECR,$1); }
- | INCR variable
- { $$ = oper1(OPREINCR,$2); }
- | DECR variable
- { $$ = oper1(OPREDECR,$2); }
- | '-' term %prec UMINUS
- { $$ = oper1(OUMINUS,$2); }
- | '+' term %prec UMINUS
- { $$ = oper1(OUPLUS,$2); }
- | '(' cond ')'
- { $$ = oper1(OPAREN,$2); }
- | GETLINE
- { $$ = oper0(OGETLINE); }
- | GETLINE variable
- { $$ = oper1(OGETLINE,$2); }
- | GETLINE '<' expr
- { $$ = oper3(OGETLINE,Nullop,string("<",1),$3);
- if (ops[$3].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
- | GETLINE variable '<' expr
- { $$ = oper3(OGETLINE,$2,string("<",1),$4);
- if (ops[$4].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
- | term 'p' GETLINE
- { $$ = oper3(OGETLINE,Nullop,string("|",1),$1);
- if (ops[$1].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
- | term 'p' GETLINE variable
- { $$ = oper3(OGETLINE,$4,string("|",1),$1);
- if (ops[$1].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
- | FUN1
- { $$ = oper0($1); need_entire = do_chop = TRUE; }
- | FUN1 '(' ')'
- { $$ = oper1($1,Nullop); need_entire = do_chop = TRUE; }
- | FUN1 '(' expr ')'
- { $$ = oper1($1,$3); }
- | FUNN '(' expr_list ')'
- { $$ = oper1($1,$3); }
- | USERFUN '(' expr_list ')'
- { $$ = oper2(OUSERFUN,$1,$3); }
- | SPRINTF_NEW '(' expr_list ')'
- { $$ = oper1(OSPRINTF,$3); }
- | sprintf expr_list
- { $$ = oper1(OSPRINTF,$2); }
- | SUBSTR '(' expr ',' expr ',' expr ')'
- { $$ = oper3(OSUBSTR,$3,$5,$7); }
- | SUBSTR '(' expr ',' expr ')'
- { $$ = oper2(OSUBSTR,$3,$5); }
- | SPLIT '(' expr ',' VAR ',' expr ')'
- { $$ = oper3(OSPLIT,$3,aryrefarg(numary($5)),$7); }
- | SPLIT '(' expr ',' VAR ',' REGEX ')'
- { $$ = oper3(OSPLIT,$3,aryrefarg(numary($5)),oper1(OREGEX,$7));}
- | SPLIT '(' expr ',' VAR ')'
- { $$ = oper2(OSPLIT,$3,aryrefarg(numary($5))); }
- | INDEX '(' expr ',' expr ')'
- { $$ = oper2(OINDEX,$3,$5); }
- | MATCH '(' expr ',' REGEX ')'
- { $$ = oper2(OMATCH,$3,oper1(OREGEX,$5)); }
- | MATCH '(' expr ',' expr ')'
- { $$ = oper2(OMATCH,$3,$5); }
- | SUB '(' expr ',' expr ')'
- { $$ = oper2(OSUB,$3,$5); }
- | SUB '(' REGEX ',' expr ')'
- { $$ = oper2(OSUB,oper1(OREGEX,$3),$5); }
- | GSUB '(' expr ',' expr ')'
- { $$ = oper2(OGSUB,$3,$5); }
- | GSUB '(' REGEX ',' expr ')'
- { $$ = oper2(OGSUB,oper1(OREGEX,$3),$5); }
- | SUB '(' expr ',' expr ',' expr ')'
- { $$ = oper3(OSUB,$3,$5,$7); }
- | SUB '(' REGEX ',' expr ',' expr ')'
- { $$ = oper3(OSUB,oper1(OREGEX,$3),$5,$7); }
- | GSUB '(' expr ',' expr ',' expr ')'
- { $$ = oper3(OGSUB,$3,$5,$7); }
- | GSUB '(' REGEX ',' expr ',' expr ')'
- { $$ = oper3(OGSUB,oper1(OREGEX,$3),$5,$7); }
- ;
-
-variable: VAR
- { $$ = oper1(OVAR,$1); }
- | VAR '[' expr_list ']'
- { $$ = oper2(OVAR,aryrefarg($1),$3); }
- | FIELD
- { $$ = oper1(OFLD,$1); }
- | VFIELD term
- { $$ = oper1(OVFLD,$2); }
- ;
-
-expr_list
- : expr
- | clist
- | /* NULL */
- { $$ = Nullop; }
- ;
-
-clist : expr ',' maybe expr
- { $$ = oper3(OCOMMA,$1,$3,$4); }
- | clist ',' maybe expr
- { $$ = oper3(OCOMMA,$1,$3,$4); }
- | '(' clist ')' /* these parens are invisible */
- { $$ = $2; }
- ;
-
-junk : junk hunksep
- { $$ = oper2(OJUNK,$1,$2); }
- | /* NULL */
- { $$ = Nullop; }
- ;
-
-hunksep : ';'
- { $$ = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); }
- | SEMINEW
- { $$ = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); }
- | NEWLINE
- { $$ = oper0(ONEWLINE); }
- | COMMENT
- { $$ = oper1(OCOMMENT,$1); }
- ;
-
-maybe : maybe nlstuff
- { $$ = oper2(OJUNK,$1,$2); }
- | /* NULL */
- { $$ = Nullop; }
- ;
-
-nlstuff : NEWLINE
- { $$ = oper0(ONEWLINE); }
- | COMMENT
- { $$ = oper1(OCOMMENT,$1); }
- ;
-
-separator
- : ';' maybe
- { $$ = oper2(OJUNK,oper0(OSEMICOLON),$2); }
- | SEMINEW maybe
- { $$ = oper2(OJUNK,oper0(OSNEWLINE),$2); }
- | NEWLINE maybe
- { $$ = oper2(OJUNK,oper0(OSNEWLINE),$2); }
- | COMMENT maybe
- { $$ = oper2(OJUNK,oper1(OSCOMMENT,$1),$2); }
- ;
-
-states : states statement
- { $$ = oper2(OSTATES,$1,$2); }
- | /* NULL */
- { $$ = Nullop; }
- ;
-
-statement
- : simple separator maybe
- { $$ = oper2(OJUNK,oper2(OSTATE,$1,$2),$3); }
- | ';' maybe
- { $$ = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSEMICOLON),$2)); }
- | SEMINEW maybe
- { $$ = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSNEWLINE),$2)); }
- | compound
- ;
-
-simpnull: simple
- | /* NULL */
- { $$ = Nullop; }
- ;
-
-simple
- : expr
- | PRINT expr_list redir expr
- { $$ = oper3(OPRINT,$2,$3,$4);
- do_opens = TRUE;
- saw_ORS = saw_OFS = TRUE;
- if (!$2) need_entire = TRUE;
- if (ops[$4].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
- | PRINT expr_list
- { $$ = oper1(OPRINT,$2);
- if (!$2) need_entire = TRUE;
- saw_ORS = saw_OFS = TRUE;
- }
- | PRINTF expr_list redir expr
- { $$ = oper3(OPRINTF,$2,$3,$4);
- do_opens = TRUE;
- if (!$2) need_entire = TRUE;
- if (ops[$4].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; }
- | PRINTF expr_list
- { $$ = oper1(OPRINTF,$2);
- if (!$2) need_entire = TRUE;
- }
- | BREAK
- { $$ = oper0(OBREAK); }
- | NEXT
- { $$ = oper0(ONEXT); }
- | EXIT
- { $$ = oper0(OEXIT); }
- | EXIT expr
- { $$ = oper1(OEXIT,$2); }
- | CONTINUE
- { $$ = oper0(OCONTINUE); }
- | RET
- { $$ = oper0(ORETURN); }
- | RET expr
- { $$ = oper1(ORETURN,$2); }
- | DELETE VAR '[' expr_list ']'
- { $$ = oper2(ODELETE,aryrefarg($2),$4); }
- ;
-
-redir : '>' %prec FIELD
- { $$ = oper1(OREDIR,string(">",1)); }
- | GRGR
- { $$ = oper1(OREDIR,string(">>",2)); }
- | '|'
- { $$ = oper1(OREDIR,string("|",1)); }
- ;
-
-compound
- : IF '(' cond ')' maybe statement
- { $$ = oper2(OIF,$3,bl($6,$5)); }
- | IF '(' cond ')' maybe statement ELSE maybe statement
- { $$ = oper3(OIF,$3,bl($6,$5),bl($9,$8)); }
- | WHILE '(' cond ')' maybe statement
- { $$ = oper2(OWHILE,$3,bl($6,$5)); }
- | DO maybe statement WHILE '(' cond ')'
- { $$ = oper2(ODO,bl($3,$2),$6); }
- | FOR '(' simpnull ';' cond ';' simpnull ')' maybe statement
- { $$ = oper4(OFOR,$3,$5,$7,bl($10,$9)); }
- | FOR '(' simpnull ';' ';' simpnull ')' maybe statement
- { $$ = oper4(OFOR,$3,string("",0),$6,bl($9,$8)); }
- | FOR '(' expr ')' maybe statement
- { $$ = oper2(OFORIN,$3,bl($6,$5)); }
- | '{' maybe states '}' maybe
- { $$ = oper3(OBLOCK,oper2(OJUNK,$2,$3),Nullop,$5); }
- ;
-
-%%
-
-int yyparse (void);
-
-#include "a2py.c"
diff --git a/contrib/perl5/x2p/a2py.c b/contrib/perl5/x2p/a2py.c
deleted file mode 100644
index 6884f95..0000000
--- a/contrib/perl5/x2p/a2py.c
+++ /dev/null
@@ -1,1291 +0,0 @@
-/* $RCSfile: a2py.c,v $$Revision: 4.1 $$Date: 92/08/07 18:29:14 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: a2py.c,v $
- */
-
-#if defined(OS2) || defined(WIN32)
-#if defined(WIN32)
-#include <io.h>
-#endif
-#include "../patchlevel.h"
-#endif
-#include "util.h"
-
-char *filename;
-char *myname;
-
-int checkers = 0;
-
-int oper0(int type);
-int oper1(int type, int arg1);
-int oper2(int type, int arg1, int arg2);
-int oper3(int type, int arg1, int arg2, int arg3);
-int oper4(int type, int arg1, int arg2, int arg3, int arg4);
-int oper5(int type, int arg1, int arg2, int arg3, int arg4, int arg5);
-STR *walk(int useval, int level, register int node, int *numericptr, int minprec);
-
-#if defined(OS2) || defined(WIN32)
-static void usage(void);
-
-static void
-usage()
-{
- printf("\nThis is the AWK to PERL translator, revision %d.0, version %d\n", PERL_REVISION, PERL_VERSION);
- printf("\nUsage: %s [-D<number>] [-F<char>] [-n<fieldlist>] [-<number>] filename\n", myname);
- printf("\n -D<number> sets debugging flags."
- "\n -F<character> the awk script to translate is always invoked with"
- "\n this -F switch."
- "\n -n<fieldlist> specifies the names of the input fields if input does"
- "\n not have to be split into an array."
- "\n -<number> causes a2p to assume that input will always have that"
- "\n many fields.\n");
- exit(1);
-}
-#endif
-
-int
-main(register int argc, register char **argv, register char **env)
-{
- register STR *str;
- int i;
- STR *tmpstr;
-
- myname = argv[0];
- linestr = str_new(80);
- str = str_new(0); /* first used for -I flags */
- for (argc--,argv++; argc; argc--,argv++) {
- if (argv[0][0] != '-' || !argv[0][1])
- break;
- reswitch:
- switch (argv[0][1]) {
-#ifdef DEBUGGING
- case 'D':
- debug = atoi(argv[0]+2);
-#if YYDEBUG
- yydebug = (debug & 1);
-#endif
- break;
-#endif
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- maxfld = atoi(argv[0]+1);
- absmaxfld = TRUE;
- break;
- case 'F':
- fswitch = argv[0][2];
- break;
- case 'n':
- namelist = savestr(argv[0]+2);
- break;
- case 'o':
- old_awk = TRUE;
- break;
- case '-':
- argc--,argv++;
- goto switch_end;
- case 0:
- break;
- default:
-#if defined(OS2) || defined(WIN32)
- fprintf(stderr, "Unrecognized switch: %s\n",argv[0]);
- usage();
-#else
- fatal("Unrecognized switch: %s\n",argv[0]);
-#endif
- }
- }
- switch_end:
-
- /* open script */
-
- if (argv[0] == Nullch) {
-#if defined(OS2) || defined(WIN32)
- if ( isatty(fileno(stdin)) )
- usage();
-#endif
- argv[0] = "-";
- }
- filename = savestr(argv[0]);
-
- filename = savestr(argv[0]);
- if (strEQ(filename,"-"))
- argv[0] = "";
- if (!*argv[0])
- rsfp = stdin;
- else
- rsfp = fopen(argv[0],"r");
- if (rsfp == Nullfp)
- fatal("Awk script \"%s\" doesn't seem to exist.\n",filename);
-
- /* init tokener */
-
- bufptr = str_get(linestr);
- symtab = hnew();
- curarghash = hnew();
-
- /* now parse the report spec */
-
- if (yyparse())
- fatal("Translation aborted due to syntax errors.\n");
-
-#ifdef DEBUGGING
- if (debug & 2) {
- int type, len;
-
- for (i=1; i<mop;) {
- type = ops[i].ival;
- len = type >> 8;
- type &= 255;
- printf("%d\t%d\t%d\t%-10s",i++,type,len,opname[type]);
- if (type == OSTRING)
- printf("\t\"%s\"\n",ops[i].cval),i++;
- else {
- while (len--) {
- printf("\t%d",ops[i].ival),i++;
- }
- putchar('\n');
- }
- }
- }
- if (debug & 8)
- dump(root);
-#endif
-
- /* first pass to look for numeric variables */
-
- prewalk(0,0,root,&i);
-
- /* second pass to produce new program */
-
- tmpstr = walk(0,0,root,&i,P_MIN);
- str = str_make(STARTPERL);
- str_cat(str, "\neval 'exec ");
- str_cat(str, BIN);
- str_cat(str, "/perl -S $0 ${1+\"$@\"}'\n\
- if $running_under_some_shell;\n\
- # this emulates #! processing on NIH machines.\n\
- # (remove #! line above if indigestible)\n\n");
- str_cat(str,
- "eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;\n");
- str_cat(str,
- " # process any FOO=bar switches\n\n");
- if (do_opens && opens) {
- str_scat(str,opens);
- str_free(opens);
- str_cat(str,"\n");
- }
- str_scat(str,tmpstr);
- str_free(tmpstr);
-#ifdef DEBUGGING
- if (!(debug & 16))
-#endif
- fixup(str);
- putlines(str);
- if (checkers) {
- fprintf(stderr,
- "Please check my work on the %d line%s I've marked with \"#???\".\n",
- checkers, checkers == 1 ? "" : "s" );
- fprintf(stderr,
- "The operation I've selected may be wrong for the operand types.\n");
- }
- exit(0);
-}
-
-#define RETURN(retval) return (bufptr = s,retval)
-#define XTERM(retval) return (expectterm = TRUE,bufptr = s,retval)
-#define XOP(retval) return (expectterm = FALSE,bufptr = s,retval)
-#define ID(x) return (yylval=string(x,0),expectterm = FALSE,bufptr = s,idtype)
-
-int idtype;
-
-int
-yylex(void)
-{
- register char *s = bufptr;
- register char *d;
- register int tmp;
-
- retry:
-#if YYDEBUG
- if (yydebug)
- if (strchr(s,'\n'))
- fprintf(stderr,"Tokener at %s",s);
- else
- fprintf(stderr,"Tokener at %s\n",s);
-#endif
- switch (*s) {
- default:
- fprintf(stderr,
- "Unrecognized character %c in file %s line %d--ignoring.\n",
- *s++,filename,line);
- goto retry;
- case '\\':
- s++;
- if (*s && *s != '\n') {
- yyerror("Ignoring spurious backslash");
- goto retry;
- }
- /*FALLSTHROUGH*/
- case 0:
- s = str_get(linestr);
- *s = '\0';
- if (!rsfp)
- RETURN(0);
- line++;
- if ((s = str_gets(linestr, rsfp)) == Nullch) {
- if (rsfp != stdin)
- fclose(rsfp);
- rsfp = Nullfp;
- s = str_get(linestr);
- RETURN(0);
- }
- goto retry;
- case ' ': case '\t':
- s++;
- goto retry;
- case '\n':
- *s = '\0';
- XTERM(NEWLINE);
- case '#':
- yylval = string(s,0);
- *s = '\0';
- XTERM(COMMENT);
- case ';':
- tmp = *s++;
- if (*s == '\n') {
- s++;
- XTERM(SEMINEW);
- }
- XTERM(tmp);
- case '(':
- tmp = *s++;
- XTERM(tmp);
- case '{':
- case '[':
- case ')':
- case ']':
- case '?':
- case ':':
- tmp = *s++;
- XOP(tmp);
-#ifdef EBCDIC
- case 7:
-#else
- case 127:
-#endif
- s++;
- XTERM('}');
- case '}':
- for (d = s + 1; isspace(*d); d++) ;
- if (!*d)
- s = d - 1;
- *s = 127;
- XTERM(';');
- case ',':
- tmp = *s++;
- XTERM(tmp);
- case '~':
- s++;
- yylval = string("~",1);
- XTERM(MATCHOP);
- case '+':
- case '-':
- if (s[1] == *s) {
- s++;
- if (*s++ == '+')
- XTERM(INCR);
- else
- XTERM(DECR);
- }
- /* FALL THROUGH */
- case '*':
- case '%':
- case '^':
- tmp = *s++;
- if (*s == '=') {
- if (tmp == '^')
- yylval = string("**=",3);
- else
- yylval = string(s-1,2);
- s++;
- XTERM(ASGNOP);
- }
- XTERM(tmp);
- case '&':
- s++;
- tmp = *s++;
- if (tmp == '&')
- XTERM(ANDAND);
- s--;
- XTERM('&');
- case '|':
- s++;
- tmp = *s++;
- if (tmp == '|')
- XTERM(OROR);
- s--;
- while (*s == ' ' || *s == '\t')
- s++;
- if (strnEQ(s,"getline",7))
- XTERM('p');
- else
- XTERM('|');
- case '=':
- s++;
- tmp = *s++;
- if (tmp == '=') {
- yylval = string("==",2);
- XTERM(RELOP);
- }
- s--;
- yylval = string("=",1);
- XTERM(ASGNOP);
- case '!':
- s++;
- tmp = *s++;
- if (tmp == '=') {
- yylval = string("!=",2);
- XTERM(RELOP);
- }
- if (tmp == '~') {
- yylval = string("!~",2);
- XTERM(MATCHOP);
- }
- s--;
- XTERM(NOT);
- case '<':
- s++;
- tmp = *s++;
- if (tmp == '=') {
- yylval = string("<=",2);
- XTERM(RELOP);
- }
- s--;
- XTERM('<');
- case '>':
- s++;
- tmp = *s++;
- if (tmp == '>') {
- yylval = string(">>",2);
- XTERM(GRGR);
- }
- if (tmp == '=') {
- yylval = string(">=",2);
- XTERM(RELOP);
- }
- s--;
- XTERM('>');
-
-#define SNARFWORD \
- d = tokenbuf; \
- while (isalpha(*s) || isdigit(*s) || *s == '_') \
- *d++ = *s++; \
- *d = '\0'; \
- d = tokenbuf; \
- if (*s == '(') \
- idtype = USERFUN; \
- else \
- idtype = VAR;
-
- case '$':
- s++;
- if (*s == '0') {
- s++;
- do_chop = TRUE;
- need_entire = TRUE;
- idtype = VAR;
- ID("0");
- }
- do_split = TRUE;
- if (isdigit(*s)) {
- for (d = s; isdigit(*s); s++) ;
- yylval = string(d,s-d);
- tmp = atoi(d);
- if (tmp > maxfld)
- maxfld = tmp;
- XOP(FIELD);
- }
- split_to_array = set_array_base = TRUE;
- XOP(VFIELD);
-
- case '/': /* may either be division or pattern */
- if (expectterm) {
- s = scanpat(s);
- XTERM(REGEX);
- }
- tmp = *s++;
- if (*s == '=') {
- yylval = string("/=",2);
- s++;
- XTERM(ASGNOP);
- }
- XTERM(tmp);
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9': case '.':
- s = scannum(s);
- XOP(NUMBER);
- case '"':
- s++;
- s = cpy2(tokenbuf,s,s[-1]);
- if (!*s)
- fatal("String not terminated:\n%s",str_get(linestr));
- s++;
- yylval = string(tokenbuf,0);
- XOP(STRING);
-
- case 'a': case 'A':
- SNARFWORD;
- if (strEQ(d,"ARGC"))
- set_array_base = TRUE;
- if (strEQ(d,"ARGV")) {
- yylval=numary(string("ARGV",0));
- XOP(VAR);
- }
- if (strEQ(d,"atan2")) {
- yylval = OATAN2;
- XTERM(FUNN);
- }
- ID(d);
- case 'b': case 'B':
- SNARFWORD;
- if (strEQ(d,"break"))
- XTERM(BREAK);
- if (strEQ(d,"BEGIN"))
- XTERM(BEGIN);
- ID(d);
- case 'c': case 'C':
- SNARFWORD;
- if (strEQ(d,"continue"))
- XTERM(CONTINUE);
- if (strEQ(d,"cos")) {
- yylval = OCOS;
- XTERM(FUN1);
- }
- if (strEQ(d,"close")) {
- do_fancy_opens = 1;
- yylval = OCLOSE;
- XTERM(FUN1);
- }
- if (strEQ(d,"chdir"))
- *d = toupper(*d);
- else if (strEQ(d,"crypt"))
- *d = toupper(*d);
- else if (strEQ(d,"chop"))
- *d = toupper(*d);
- else if (strEQ(d,"chmod"))
- *d = toupper(*d);
- else if (strEQ(d,"chown"))
- *d = toupper(*d);
- ID(d);
- case 'd': case 'D':
- SNARFWORD;
- if (strEQ(d,"do"))
- XTERM(DO);
- if (strEQ(d,"delete"))
- XTERM(DELETE);
- if (strEQ(d,"die"))
- *d = toupper(*d);
- ID(d);
- case 'e': case 'E':
- SNARFWORD;
- if (strEQ(d,"END"))
- XTERM(END);
- if (strEQ(d,"else"))
- XTERM(ELSE);
- if (strEQ(d,"exit")) {
- saw_line_op = TRUE;
- XTERM(EXIT);
- }
- if (strEQ(d,"exp")) {
- yylval = OEXP;
- XTERM(FUN1);
- }
- if (strEQ(d,"elsif"))
- *d = toupper(*d);
- else if (strEQ(d,"eq"))
- *d = toupper(*d);
- else if (strEQ(d,"eval"))
- *d = toupper(*d);
- else if (strEQ(d,"eof"))
- *d = toupper(*d);
- else if (strEQ(d,"each"))
- *d = toupper(*d);
- else if (strEQ(d,"exec"))
- *d = toupper(*d);
- ID(d);
- case 'f': case 'F':
- SNARFWORD;
- if (strEQ(d,"FS")) {
- saw_FS++;
- if (saw_FS == 1 && in_begin) {
- for (d = s; *d && isspace(*d); d++) ;
- if (*d == '=') {
- for (d++; *d && isspace(*d); d++) ;
- if (*d == '"' && d[2] == '"')
- const_FS = d[1];
- }
- }
- ID(tokenbuf);
- }
- if (strEQ(d,"for"))
- XTERM(FOR);
- else if (strEQ(d,"function"))
- XTERM(FUNCTION);
- if (strEQ(d,"FILENAME"))
- d = "ARGV";
- if (strEQ(d,"foreach"))
- *d = toupper(*d);
- else if (strEQ(d,"format"))
- *d = toupper(*d);
- else if (strEQ(d,"fork"))
- *d = toupper(*d);
- else if (strEQ(d,"fh"))
- *d = toupper(*d);
- ID(d);
- case 'g': case 'G':
- SNARFWORD;
- if (strEQ(d,"getline"))
- XTERM(GETLINE);
- if (strEQ(d,"gsub"))
- XTERM(GSUB);
- if (strEQ(d,"ge"))
- *d = toupper(*d);
- else if (strEQ(d,"gt"))
- *d = toupper(*d);
- else if (strEQ(d,"goto"))
- *d = toupper(*d);
- else if (strEQ(d,"gmtime"))
- *d = toupper(*d);
- ID(d);
- case 'h': case 'H':
- SNARFWORD;
- if (strEQ(d,"hex"))
- *d = toupper(*d);
- ID(d);
- case 'i': case 'I':
- SNARFWORD;
- if (strEQ(d,"if"))
- XTERM(IF);
- if (strEQ(d,"in"))
- XTERM(IN);
- if (strEQ(d,"index")) {
- set_array_base = TRUE;
- XTERM(INDEX);
- }
- if (strEQ(d,"int")) {
- yylval = OINT;
- XTERM(FUN1);
- }
- ID(d);
- case 'j': case 'J':
- SNARFWORD;
- if (strEQ(d,"join"))
- *d = toupper(*d);
- ID(d);
- case 'k': case 'K':
- SNARFWORD;
- if (strEQ(d,"keys"))
- *d = toupper(*d);
- else if (strEQ(d,"kill"))
- *d = toupper(*d);
- ID(d);
- case 'l': case 'L':
- SNARFWORD;
- if (strEQ(d,"length")) {
- yylval = OLENGTH;
- XTERM(FUN1);
- }
- if (strEQ(d,"log")) {
- yylval = OLOG;
- XTERM(FUN1);
- }
- if (strEQ(d,"last"))
- *d = toupper(*d);
- else if (strEQ(d,"local"))
- *d = toupper(*d);
- else if (strEQ(d,"lt"))
- *d = toupper(*d);
- else if (strEQ(d,"le"))
- *d = toupper(*d);
- else if (strEQ(d,"locatime"))
- *d = toupper(*d);
- else if (strEQ(d,"link"))
- *d = toupper(*d);
- ID(d);
- case 'm': case 'M':
- SNARFWORD;
- if (strEQ(d,"match")) {
- set_array_base = TRUE;
- XTERM(MATCH);
- }
- if (strEQ(d,"m"))
- *d = toupper(*d);
- ID(d);
- case 'n': case 'N':
- SNARFWORD;
- if (strEQ(d,"NF"))
- do_chop = do_split = split_to_array = set_array_base = TRUE;
- if (strEQ(d,"next")) {
- saw_line_op = TRUE;
- XTERM(NEXT);
- }
- if (strEQ(d,"ne"))
- *d = toupper(*d);
- ID(d);
- case 'o': case 'O':
- SNARFWORD;
- if (strEQ(d,"ORS")) {
- saw_ORS = TRUE;
- d = "\\";
- }
- if (strEQ(d,"OFS")) {
- saw_OFS = TRUE;
- d = ",";
- }
- if (strEQ(d,"OFMT")) {
- d = "#";
- }
- if (strEQ(d,"open"))
- *d = toupper(*d);
- else if (strEQ(d,"ord"))
- *d = toupper(*d);
- else if (strEQ(d,"oct"))
- *d = toupper(*d);
- ID(d);
- case 'p': case 'P':
- SNARFWORD;
- if (strEQ(d,"print")) {
- XTERM(PRINT);
- }
- if (strEQ(d,"printf")) {
- XTERM(PRINTF);
- }
- if (strEQ(d,"push"))
- *d = toupper(*d);
- else if (strEQ(d,"pop"))
- *d = toupper(*d);
- ID(d);
- case 'q': case 'Q':
- SNARFWORD;
- ID(d);
- case 'r': case 'R':
- SNARFWORD;
- if (strEQ(d,"RS")) {
- d = "/";
- saw_RS = TRUE;
- }
- if (strEQ(d,"rand")) {
- yylval = ORAND;
- XTERM(FUN1);
- }
- if (strEQ(d,"return"))
- XTERM(RET);
- if (strEQ(d,"reset"))
- *d = toupper(*d);
- else if (strEQ(d,"redo"))
- *d = toupper(*d);
- else if (strEQ(d,"rename"))
- *d = toupper(*d);
- ID(d);
- case 's': case 'S':
- SNARFWORD;
- if (strEQ(d,"split")) {
- set_array_base = TRUE;
- XOP(SPLIT);
- }
- if (strEQ(d,"substr")) {
- set_array_base = TRUE;
- XTERM(SUBSTR);
- }
- if (strEQ(d,"sub"))
- XTERM(SUB);
- if (strEQ(d,"sprintf")) {
- /* In old awk, { print sprintf("str%sg"),"in" } prints
- * "string"; in new awk, "in" is not considered an argument to
- * sprintf, so the statement breaks. To support both, the
- * grammar treats arguments to SPRINTF_OLD like old awk,
- * SPRINTF_NEW like new. Here we return the appropriate one.
- */
- XTERM(old_awk ? SPRINTF_OLD : SPRINTF_NEW);
- }
- if (strEQ(d,"sqrt")) {
- yylval = OSQRT;
- XTERM(FUN1);
- }
- if (strEQ(d,"SUBSEP")) {
- d = ";";
- }
- if (strEQ(d,"sin")) {
- yylval = OSIN;
- XTERM(FUN1);
- }
- if (strEQ(d,"srand")) {
- yylval = OSRAND;
- XTERM(FUN1);
- }
- if (strEQ(d,"system")) {
- yylval = OSYSTEM;
- XTERM(FUN1);
- }
- if (strEQ(d,"s"))
- *d = toupper(*d);
- else if (strEQ(d,"shift"))
- *d = toupper(*d);
- else if (strEQ(d,"select"))
- *d = toupper(*d);
- else if (strEQ(d,"seek"))
- *d = toupper(*d);
- else if (strEQ(d,"stat"))
- *d = toupper(*d);
- else if (strEQ(d,"study"))
- *d = toupper(*d);
- else if (strEQ(d,"sleep"))
- *d = toupper(*d);
- else if (strEQ(d,"symlink"))
- *d = toupper(*d);
- else if (strEQ(d,"sort"))
- *d = toupper(*d);
- ID(d);
- case 't': case 'T':
- SNARFWORD;
- if (strEQ(d,"tr"))
- *d = toupper(*d);
- else if (strEQ(d,"tell"))
- *d = toupper(*d);
- else if (strEQ(d,"time"))
- *d = toupper(*d);
- else if (strEQ(d,"times"))
- *d = toupper(*d);
- ID(d);
- case 'u': case 'U':
- SNARFWORD;
- if (strEQ(d,"until"))
- *d = toupper(*d);
- else if (strEQ(d,"unless"))
- *d = toupper(*d);
- else if (strEQ(d,"umask"))
- *d = toupper(*d);
- else if (strEQ(d,"unshift"))
- *d = toupper(*d);
- else if (strEQ(d,"unlink"))
- *d = toupper(*d);
- else if (strEQ(d,"utime"))
- *d = toupper(*d);
- ID(d);
- case 'v': case 'V':
- SNARFWORD;
- if (strEQ(d,"values"))
- *d = toupper(*d);
- ID(d);
- case 'w': case 'W':
- SNARFWORD;
- if (strEQ(d,"while"))
- XTERM(WHILE);
- if (strEQ(d,"write"))
- *d = toupper(*d);
- else if (strEQ(d,"wait"))
- *d = toupper(*d);
- ID(d);
- case 'x': case 'X':
- SNARFWORD;
- if (strEQ(d,"x"))
- *d = toupper(*d);
- ID(d);
- case 'y': case 'Y':
- SNARFWORD;
- if (strEQ(d,"y"))
- *d = toupper(*d);
- ID(d);
- case 'z': case 'Z':
- SNARFWORD;
- ID(d);
- }
-}
-
-char *
-scanpat(register char *s)
-{
- register char *d;
-
- switch (*s++) {
- case '/':
- break;
- default:
- fatal("Search pattern not found:\n%s",str_get(linestr));
- }
-
- d = tokenbuf;
- for (; *s; s++,d++) {
- if (*s == '\\') {
- if (s[1] == '/')
- *d++ = *s++;
- else if (s[1] == '\\')
- *d++ = *s++;
- else if (s[1] == '[')
- *d++ = *s++;
- }
- else if (*s == '[') {
- *d++ = *s++;
- do {
- if (*s == '\\' && s[1])
- *d++ = *s++;
- if (*s == '/' || (*s == '-' && s[1] == ']'))
- *d++ = '\\';
- *d++ = *s++;
- } while (*s && *s != ']');
- }
- else if (*s == '/')
- break;
- *d = *s;
- }
- *d = '\0';
-
- if (!*s)
- fatal("Search pattern not terminated:\n%s",str_get(linestr));
- s++;
- yylval = string(tokenbuf,0);
- return s;
-}
-
-void
-yyerror(char *s)
-{
- fprintf(stderr,"%s in file %s at line %d\n",
- s,filename,line);
-}
-
-char *
-scannum(register char *s)
-{
- register char *d;
-
- switch (*s) {
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9': case '0' : case '.':
- d = tokenbuf;
- while (isdigit(*s)) {
- *d++ = *s++;
- }
- if (*s == '.') {
- if (isdigit(s[1])) {
- *d++ = *s++;
- while (isdigit(*s)) {
- *d++ = *s++;
- }
- }
- else
- s++;
- }
- if (strchr("eE",*s) && strchr("+-0123456789",s[1])) {
- *d++ = *s++;
- if (*s == '+' || *s == '-')
- *d++ = *s++;
- while (isdigit(*s))
- *d++ = *s++;
- }
- *d = '\0';
- yylval = string(tokenbuf,0);
- break;
- }
- return s;
-}
-
-int
-string(char *ptr, int len)
-{
- int retval = mop;
-
- ops[mop++].ival = OSTRING + (1<<8);
- if (!len)
- len = strlen(ptr);
- ops[mop].cval = (char *) safemalloc(len+1);
- strncpy(ops[mop].cval,ptr,len);
- ops[mop++].cval[len] = '\0';
- if (mop >= OPSMAX)
- fatal("Recompile a2p with larger OPSMAX\n");
- return retval;
-}
-
-int
-oper0(int type)
-{
- int retval = mop;
-
- if (type > 255)
- fatal("type > 255 (%d)\n",type);
- ops[mop++].ival = type;
- if (mop >= OPSMAX)
- fatal("Recompile a2p with larger OPSMAX\n");
- return retval;
-}
-
-int
-oper1(int type, int arg1)
-{
- int retval = mop;
-
- if (type > 255)
- fatal("type > 255 (%d)\n",type);
- ops[mop++].ival = type + (1<<8);
- ops[mop++].ival = arg1;
- if (mop >= OPSMAX)
- fatal("Recompile a2p with larger OPSMAX\n");
- return retval;
-}
-
-int
-oper2(int type, int arg1, int arg2)
-{
- int retval = mop;
-
- if (type > 255)
- fatal("type > 255 (%d)\n",type);
- ops[mop++].ival = type + (2<<8);
- ops[mop++].ival = arg1;
- ops[mop++].ival = arg2;
- if (mop >= OPSMAX)
- fatal("Recompile a2p with larger OPSMAX\n");
- return retval;
-}
-
-int
-oper3(int type, int arg1, int arg2, int arg3)
-{
- int retval = mop;
-
- if (type > 255)
- fatal("type > 255 (%d)\n",type);
- ops[mop++].ival = type + (3<<8);
- ops[mop++].ival = arg1;
- ops[mop++].ival = arg2;
- ops[mop++].ival = arg3;
- if (mop >= OPSMAX)
- fatal("Recompile a2p with larger OPSMAX\n");
- return retval;
-}
-
-int
-oper4(int type, int arg1, int arg2, int arg3, int arg4)
-{
- int retval = mop;
-
- if (type > 255)
- fatal("type > 255 (%d)\n",type);
- ops[mop++].ival = type + (4<<8);
- ops[mop++].ival = arg1;
- ops[mop++].ival = arg2;
- ops[mop++].ival = arg3;
- ops[mop++].ival = arg4;
- if (mop >= OPSMAX)
- fatal("Recompile a2p with larger OPSMAX\n");
- return retval;
-}
-
-int
-oper5(int type, int arg1, int arg2, int arg3, int arg4, int arg5)
-{
- int retval = mop;
-
- if (type > 255)
- fatal("type > 255 (%d)\n",type);
- ops[mop++].ival = type + (5<<8);
- ops[mop++].ival = arg1;
- ops[mop++].ival = arg2;
- ops[mop++].ival = arg3;
- ops[mop++].ival = arg4;
- ops[mop++].ival = arg5;
- if (mop >= OPSMAX)
- fatal("Recompile a2p with larger OPSMAX\n");
- return retval;
-}
-
-int depth = 0;
-
-void
-dump(int branch)
-{
- register int type;
- register int len;
- register int i;
-
- type = ops[branch].ival;
- len = type >> 8;
- type &= 255;
- for (i=depth; i; i--)
- printf(" ");
- if (type == OSTRING) {
- printf("%-5d\"%s\"\n",branch,ops[branch+1].cval);
- }
- else {
- printf("(%-5d%s %d\n",branch,opname[type],len);
- depth++;
- for (i=1; i<=len; i++)
- dump(ops[branch+i].ival);
- depth--;
- for (i=depth; i; i--)
- printf(" ");
- printf(")\n");
- }
-}
-
-int
-bl(int arg, int maybe)
-{
- if (!arg)
- return 0;
- else if ((ops[arg].ival & 255) != OBLOCK)
- return oper2(OBLOCK,arg,maybe);
- else if ((ops[arg].ival >> 8) < 2)
- return oper2(OBLOCK,ops[arg+1].ival,maybe);
- else
- return arg;
-}
-
-void
-fixup(STR *str)
-{
- register char *s;
- register char *t;
-
- for (s = str->str_ptr; *s; s++) {
- if (*s == ';' && s[1] == ' ' && s[2] == '\n') {
- strcpy(s+1,s+2);
- s++;
- }
- else if (*s == '\n') {
- for (t = s+1; isspace(*t & 127); t++) ;
- t--;
- while (isspace(*t & 127) && *t != '\n') t--;
- if (*t == '\n' && t-s > 1) {
- if (s[-1] == '{')
- s--;
- strcpy(s+1,t);
- }
- s++;
- }
- }
-}
-
-void
-putlines(STR *str)
-{
- register char *d, *s, *t, *e;
- register int pos, newpos;
-
- d = tokenbuf;
- pos = 0;
- for (s = str->str_ptr; *s; s++) {
- *d++ = *s;
- pos++;
- if (*s == '\n') {
- *d = '\0';
- d = tokenbuf;
- pos = 0;
- putone();
- }
- else if (*s == '\t')
- pos += 7;
- if (pos > 78) { /* split a long line? */
- *d-- = '\0';
- newpos = 0;
- for (t = tokenbuf; isspace(*t & 127); t++) {
- if (*t == '\t')
- newpos += 8;
- else
- newpos += 1;
- }
- e = d;
- while (d > tokenbuf && (*d != ' ' || d[-1] != ';'))
- d--;
- if (d < t+10) {
- d = e;
- while (d > tokenbuf &&
- (*d != ' ' || d[-1] != '|' || d[-2] != '|') )
- d--;
- }
- if (d < t+10) {
- d = e;
- while (d > tokenbuf &&
- (*d != ' ' || d[-1] != '&' || d[-2] != '&') )
- d--;
- }
- if (d < t+10) {
- d = e;
- while (d > tokenbuf && (*d != ' ' || d[-1] != ','))
- d--;
- }
- if (d < t+10) {
- d = e;
- while (d > tokenbuf && *d != ' ')
- d--;
- }
- if (d > t+3) {
- char save[2048];
- strcpy(save, d);
- *d = '\n';
- d[1] = '\0';
- putone();
- putchar('\n');
- if (d[-1] != ';' && !(newpos % 4)) {
- *t++ = ' ';
- *t++ = ' ';
- newpos += 2;
- }
- strcpy(t,save+1);
- newpos += strlen(t);
- d = t + strlen(t);
- pos = newpos;
- }
- else
- d = e + 1;
- }
- }
-}
-
-void
-putone(void)
-{
- register char *t;
-
- for (t = tokenbuf; *t; t++) {
- *t &= 127;
- if (*t == 127) {
- *t = ' ';
- strcpy(t+strlen(t)-1, "\t#???\n");
- checkers++;
- }
- }
- t = tokenbuf;
- if (*t == '#') {
- if (strnEQ(t,"#!/bin/awk",10) || strnEQ(t,"#! /bin/awk",11))
- return;
- if (strnEQ(t,"#!/usr/bin/awk",14) || strnEQ(t,"#! /usr/bin/awk",15))
- return;
- }
- fputs(tokenbuf,stdout);
-}
-
-int
-numary(int arg)
-{
- STR *key;
- int dummy;
-
- key = walk(0,0,arg,&dummy,P_MIN);
- str_cat(key,"[]");
- hstore(symtab,key->str_ptr,str_make("1"));
- str_free(key);
- set_array_base = TRUE;
- return arg;
-}
-
-int
-rememberargs(int arg)
-{
- int type;
- STR *str;
-
- if (!arg)
- return arg;
- type = ops[arg].ival & 255;
- if (type == OCOMMA) {
- rememberargs(ops[arg+1].ival);
- rememberargs(ops[arg+3].ival);
- }
- else if (type == OVAR) {
- str = str_new(0);
- hstore(curarghash,ops[ops[arg+1].ival+1].cval,str);
- }
- else
- fatal("panic: unknown argument type %d, line %d\n",type,line);
- return arg;
-}
-
-int
-aryrefarg(int arg)
-{
- int type = ops[arg].ival & 255;
- STR *str;
-
- if (type != OSTRING)
- fatal("panic: aryrefarg %d, line %d\n",type,line);
- str = hfetch(curarghash,ops[arg+1].cval);
- if (str)
- str_set(str,"*");
- return arg;
-}
-
-int
-fixfargs(int name, int arg, int prevargs)
-{
- int type;
- STR *str;
- int numargs;
-
- if (!arg)
- return prevargs;
- type = ops[arg].ival & 255;
- if (type == OCOMMA) {
- numargs = fixfargs(name,ops[arg+1].ival,prevargs);
- numargs = fixfargs(name,ops[arg+3].ival,numargs);
- }
- else if (type == OVAR) {
- str = hfetch(curarghash,ops[ops[arg+1].ival+1].cval);
- if (strEQ(str_get(str),"*")) {
- char tmpbuf[128];
-
- str_set(str,""); /* in case another routine has this */
- ops[arg].ival &= ~255;
- ops[arg].ival |= OSTAR;
- sprintf(tmpbuf,"%s:%d",ops[name+1].cval,prevargs);
- fprintf(stderr,"Adding %s\n",tmpbuf);
- str = str_new(0);
- str_set(str,"*");
- hstore(curarghash,tmpbuf,str);
- }
- numargs = prevargs + 1;
- }
- else
- fatal("panic: unknown argument type %d, arg %d, line %d\n",
- type,prevargs+1,line);
- return numargs;
-}
-
-int
-fixrargs(char *name, int arg, int prevargs)
-{
- int type;
- STR *str;
- int numargs;
-
- if (!arg)
- return prevargs;
- type = ops[arg].ival & 255;
- if (type == OCOMMA) {
- numargs = fixrargs(name,ops[arg+1].ival,prevargs);
- numargs = fixrargs(name,ops[arg+3].ival,numargs);
- }
- else {
- char *tmpbuf = (char *) safemalloc(strlen(name) + (sizeof(prevargs) * 3) + 5);
- sprintf(tmpbuf,"%s:%d",name,prevargs);
- str = hfetch(curarghash,tmpbuf);
- safefree(tmpbuf);
- if (str && strEQ(str->str_ptr,"*")) {
- if (type == OVAR || type == OSTAR) {
- ops[arg].ival &= ~255;
- ops[arg].ival |= OSTAR;
- }
- else
- fatal("Can't pass expression by reference as arg %d of %s\n",
- prevargs+1, name);
- }
- numargs = prevargs + 1;
- }
- return numargs;
-}
diff --git a/contrib/perl5/x2p/cflags.SH b/contrib/perl5/x2p/cflags.SH
deleted file mode 100755
index dcd97a1..0000000
--- a/contrib/perl5/x2p/cflags.SH
+++ /dev/null
@@ -1,95 +0,0 @@
-case $CONFIGDOTSH in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/cflags.SH) cd `expr X$0 : 'X\(.*\)/'` ;;
-cflags.SH) ;;
-*) case `pwd` in
- */x2p) ;;
- *) if test -d x2p; then cd x2p
- else echo "Can't figure out where to write output."; exit 1
- fi;;
- esac;;
-esac
-echo "Extracting x2p/cflags (with variable substitutions)"
-: This section of the file will have variable substitutions done on it.
-: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
-: Protect any dollar signs and backticks that you do not want interpreted
-: by putting a backslash in front. You may delete these comments.
-rm -f cflags
-$spitshell >cflags <<!GROK!THIS!
-!GROK!THIS!
-
-: In the following dollars and backticks do not need the extra backslash.
-$spitshell >>cflags <<'!NO!SUBS!'
-case $CONFIG in
-'')
- if test -f config.sh; then TOP=.;
- elif test -f ../config.sh; then TOP=..;
- elif test -f ../../config.sh; then TOP=../..;
- elif test -f ../../../config.sh; then TOP=../../..;
- elif test -f ../../../../config.sh; then TOP=../../../..;
- else
- echo "Can't find config.sh."; exit 1
- fi
- . $TOP/config.sh
- ;;
-esac
-
-also=': '
-case $# in
-1) also='echo 1>&2 " CCCMD = "'
-esac
-
-case $# in
-0) set *.c; echo "The current C flags are:" ;;
-esac
-
-set `echo "$* " | sed -e 's/\.[oc] / /g' -e 's/\.obj / /g' -e "s/\\$obj_ext / /g"`
-
-for file do
-
- case "$#" in
- 1) ;;
- *) echo $n " $file.c $c" ;;
- esac
-
- : allow variables like str_cflags to be evaluated
-
- eval 'eval ${'"${file}_cflags"'-""}'
-
- : or customize here
-
- case "$file" in
- a2p) ;;
- a2py) ;;
- hash) ;;
- str) ;;
- util) ;;
- walk) ;;
- *) ;;
- esac
-
- ccflags="`echo $ccflags | sed -e 's/-DMULTIPLICITY//'`"
-
- echo "$cc -c $ccflags $optimize"
- eval "$also "'"$cc -c $ccflags $optimize"'
-
- . $TOP/config.sh
-
-done
-!NO!SUBS!
-chmod 755 cflags
-$eunicefix cflags
diff --git a/contrib/perl5/x2p/find2perl.PL b/contrib/perl5/x2p/find2perl.PL
deleted file mode 100644
index adcf42a..0000000
--- a/contrib/perl5/x2p/find2perl.PL
+++ /dev/null
@@ -1,885 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-(my \$perlpath = <<'/../') =~ s/\\s*\\z//;
-$Config{perlpath}
-/../
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-use strict;
-use vars qw/$statdone/;
-use File::Spec::Functions 'curdir';
-my $startperl = "#! $perlpath -w";
-
-#
-# Modified September 26, 1993 to provide proper handling of years after 1999
-# Tom Link <tml+@pitt.edu>
-# University of Pittsburgh
-#
-# Modified April 7, 1998 with nasty hacks to implement the troublesome -follow
-# Billy Constantine <wdconsta@cs.adelaide.edu.au> <billy@smug.adelaide.edu.au>
-# University of Adelaide, Adelaide, South Australia
-#
-# Modified 1999-06-10, 1999-07-07 to migrate to cleaner perl5 usage
-# Ken Pizzini <ken@halcyon.com>
-#
-# Modified 2000-01-28 to use the 'follow' option of File::Find
-
-my @roots = ();
-while ($ARGV[0] =~ /^[^-!(]/) {
- push(@roots, shift);
-}
-@roots = (curdir()) unless @roots;
-for (@roots) { $_ = &quote($_) }
-my $roots = join(', ', @roots);
-
-my $find = "find";
-my $indent_depth = 1;
-my $stat = 'lstat';
-my $decl = '';
-my $flushall = '';
-my $initfile = '';
-my $initnewer = '';
-my $out = '';
-my %init = ();
-my ($follow_in_effect,$Skip_And) = (0,0);
-
-while (@ARGV) {
- $_ = shift;
- s/^-// || /^[()!]/ || die "Unrecognized switch: $_\n";
- if ($_ eq '(') {
- $out .= &tab . "(\n";
- $indent_depth++;
- next;
- } elsif ($_ eq ')') {
- --$indent_depth;
- $out .= &tab . ")";
- } elsif ($_ eq 'follow') {
- $follow_in_effect= 1;
- $stat = 'stat';
- $Skip_And= 1;
- } elsif ($_ eq '!') {
- $out .= &tab . "!";
- next;
- } elsif ($_ eq 'name') {
- $out .= &tab . '/' . &fileglob_to_re(shift) . "/s";
- } elsif ($_ eq 'perm') {
- my $onum = shift;
- $onum =~ /^-?[0-7]+$/
- || die "Malformed -perm argument: $onum\n";
- $out .= &tab;
- if ($onum =~ s/^-//) {
- $onum = sprintf("0%o", oct($onum) & 07777);
- $out .= "((\$mode & $onum) == $onum)";
- } else {
- $onum =~ s/^0*/0/;
- $out .= "((\$mode & 0777) == $onum)";
- }
- } elsif ($_ eq 'type') {
- (my $filetest = shift) =~ tr/s/S/;
- $out .= &tab . "-$filetest _";
- } elsif ($_ eq 'print') {
- $out .= &tab . 'print("$name\n")';
- } elsif ($_ eq 'print0') {
- $out .= &tab . 'print("$name\0")';
- } elsif ($_ eq 'fstype') {
- my $type = shift;
- $out .= &tab;
- if ($type eq 'nfs') {
- $out .= '($dev < 0)';
- } else {
- $out .= '($dev >= 0)'; #XXX
- }
- } elsif ($_ eq 'user') {
- my $uname = shift;
- $out .= &tab . "(\$uid == \$uid{'$uname'})";
- $init{user} = 1;
- } elsif ($_ eq 'group') {
- my $gname = shift;
- $out .= &tab . "(\$gid == \$gid{'$gname'})";
- $init{group} = 1;
- } elsif ($_ eq 'nouser') {
- $out .= &tab . '!exists $uid{$uid}';
- $init{user} = 1;
- } elsif ($_ eq 'nogroup') {
- $out .= &tab . '!exists $gid{$gid}';
- $init{group} = 1;
- } elsif ($_ eq 'links') {
- $out .= &tab . &n('$nlink', shift);
- } elsif ($_ eq 'inum') {
- $out .= &tab . &n('$ino', shift);
- } elsif ($_ eq 'size') {
- $_ = shift;
- my $n = 'int(((-s _) + 511) / 512)';
- if (s/c\z//) {
- $n = 'int(-s _)';
- } elsif (s/k\z//) {
- $n = 'int(((-s _) + 1023) / 1024)';
- }
- $out .= &tab . &n($n, $_);
- } elsif ($_ eq 'atime') {
- $out .= &tab . &n('int(-A _)', shift);
- } elsif ($_ eq 'mtime') {
- $out .= &tab . &n('int(-M _)', shift);
- } elsif ($_ eq 'ctime') {
- $out .= &tab . &n('int(-C _)', shift);
- } elsif ($_ eq 'exec') {
- my @cmd = ();
- while (@ARGV && $ARGV[0] ne ';')
- { push(@cmd, shift) }
- shift;
- $out .= &tab;
- if ($cmd[0] =~m#^(?:(?:/usr)?/bin/)?rm$#
- && $cmd[$#cmd] eq '{}'
- && (@cmd == 2 || (@cmd == 3 && $cmd[1] eq '-f'))) {
- if (@cmd == 2) {
- $out .= '(unlink($_) || warn "$name: $!\n")';
- } elsif (!@ARGV) {
- $out .= 'unlink($_)';
- } else {
- $out .= '(unlink($_) || 1)';
- }
- } else {
- for (@cmd)
- { s/'/\\'/g }
- { local $" = "','"; $out .= "&doexec(0, '@cmd')"; }
- $init{doexec} = 1;
- }
- } elsif ($_ eq 'ok') {
- my @cmd = ();
- while (@ARGV && $ARGV[0] ne ';')
- { push(@cmd, shift) }
- shift;
- $out .= &tab;
- for (@cmd)
- { s/'/\\'/g }
- { local $" = "','"; $out .= "&doexec(0, '@cmd')"; }
- $init{doexec} = 1;
- } elsif ($_ eq 'prune') {
- $out .= &tab . '($File::Find::prune = 1)';
- } elsif ($_ eq 'xdev') {
- $out .= &tab . '!($File::Find::prune |= ($dev != $File::Find::topdev))'
-;
- } elsif ($_ eq 'newer') {
- my $file = shift;
- my $newername = 'AGE_OF' . $file;
- $newername =~ s/\W/_/g;
- $newername = '$' . $newername;
- $out .= &tab . "(-M _ < $newername)";
- $initnewer .= "my $newername = -M " . &quote($file) . ";\n";
- } elsif ($_ eq 'eval') {
- my $prog = shift;
- $prog =~ s/'/\\'/g;
- $out .= &tab . "eval {$prog}";
- } elsif ($_ eq 'depth') {
- $find = 'finddepth';
- next;
- } elsif ($_ eq 'ls') {
- $out .= &tab . "&ls";
- $init{ls} = 1;
- } elsif ($_ eq 'tar') {
- die "-tar must have a filename argument\n" unless @ARGV;
- my $file = shift;
- my $fh = 'FH' . $file;
- $fh =~ s/\W/_/g;
- $out .= &tab . "&tar(*$fh, \$name)";
- $flushall .= "&tflushall;\n";
- $initfile .= "open($fh, " . &quote('> ' . $file) .
- qq{) || die "Can't open $fh: \$!\\n";\n};
- $init{tar} = 1;
- } elsif (/^(n?)cpio\z/) {
- die "-$_ must have a filename argument\n" unless @ARGV;
- my $file = shift;
- my $fh = 'FH' . $file;
- $fh =~ s/\W/_/g;
- $out .= &tab . "&cpio(*$fh, \$name, '$1')";
- $find = 'finddepth';
- $flushall .= "&cflushall;\n";
- $initfile .= "open($fh, " . &quote('> ' . $file) .
- qq{) || die "Can't open $fh: \$!\\n";\n};
- $init{cpio} = 1;
- } else {
- die "Unrecognized switch: -$_\n";
- }
-
- if (@ARGV) {
- if ($ARGV[0] eq '-o') {
- { local($statdone) = 1; $out .= "\n" . &tab . "||\n"; }
- $statdone = 0 if $indent_depth == 1 && exists $init{delayedstat};
- $init{saw_or} = 1;
- shift;
- } else {
- $out .= " &&" unless $Skip_And || $ARGV[0] eq ')';
- $out .= "\n";
- shift if $ARGV[0] eq '-a';
- }
- }
-}
-
-
-print <<"END";
-$startperl
- eval 'exec $perlpath -S \$0 \${1+"\$@"}'
- if 0; #\$running_under_some_shell
-
-use strict;
-use File::Find ();
-
-# Set the variable \$File::Find::dont_use_nlink if you're using AFS,
-# since AFS cheats.
-
-# for the convenience of &wanted calls, including -eval statements:
-use vars qw/*name *dir *prune/;
-*name = *File::Find::name;
-*dir = *File::Find::dir;
-*prune = *File::Find::prune;
-
-END
-
-
-if (exists $init{ls}) {
- print <<'END';
-my @rwx = qw(--- --x -w- -wx r-- r-x rw- rwx);
-my @moname = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
-
-END
-}
-
-if (exists $init{user} || exists $init{ls} || exists $init{tar}) {
- print "my (%uid, %user);\n";
- print "while (my (\$name, \$pw, \$uid) = getpwent) {\n";
- print ' $uid{$name} = $uid{$uid} = $uid;', "\n"
- if exists $init{user};
- print ' $user{$uid} = $name unless exists $user{$uid};', "\n"
- if exists $init{ls} || exists $init{tar};
- print "}\n\n";
-}
-
-if (exists $init{group} || exists $init{ls} || exists $init{tar}) {
- print "my (%gid, %group);\n";
- print "while (my (\$name, \$pw, \$gid) = getgrent) {\n";
- print ' $gid{$name} = $gid{$gid} = $gid;', "\n"
- if exists $init{group};
- print ' $group{$gid} = $name unless exists $group{$gid};', "\n"
- if exists $init{ls} || exists $init{tar};
- print "}\n\n";
-}
-
-print $initnewer, "\n" if $initnewer ne '';
-print $initfile, "\n" if $initfile ne '';
-$flushall .= "exit;\n";
-if (exists $init{declarestat}) {
- $out = <<'END' . $out;
- my ($dev,$ino,$mode,$nlink,$uid,$gid);
-
-END
-}
-
-if ( $follow_in_effect ) {
-$out =~ s/lstat\(\$_\)/lstat(_)/;
-print <<"END";
-$decl
-# Traverse desired filesystems
-File::Find::$find( {wanted => \\&wanted, follow => 1}, $roots);
-$flushall
-
-sub wanted {
-$out;
-}
-
-END
-} else {
-print <<"END";
-$decl
-# Traverse desired filesystems
-File::Find::$find({wanted => \\&wanted}, $roots);
-$flushall
-
-sub wanted {
-$out;
-}
-
-END
-}
-
-if (exists $init{doexec}) {
- print <<'END';
-
-use Cwd ();
-my $cwd = Cwd::cwd();
-
-sub doexec {
- my $ok = shift;
- for my $word (@_)
- { $word =~ s#{}#$name#g }
- if ($ok) {
- my $old = select(STDOUT);
- $| = 1;
- print "@_";
- select($old);
- return 0 unless <STDIN> =~ /^y/;
- }
- chdir $cwd; #sigh
- system @_;
- chdir $File::Find::dir;
- return !$?;
-}
-
-END
-}
-
-if (exists $init{ls}) {
- print <<'INTRO', <<"SUB", <<'END';
-
-sub sizemm {
- my $rdev = shift;
- sprintf("%3d, %3d", ($rdev >> 8) & 0xff, $rdev & 0xff);
-}
-
-sub ls {
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
-INTRO
- \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat(_);
-SUB
- my $pname = $name;
-
- $blocks
- or $blocks = int(($size + 1023) / 1024);
-
- my $perms = $rwx[$mode & 7];
- $mode >>= 3;
- $perms = $rwx[$mode & 7] . $perms;
- $mode >>= 3;
- $perms = $rwx[$mode & 7] . $perms;
- substr($perms, 2, 1) =~ tr/-x/Ss/ if -u _;
- substr($perms, 5, 1) =~ tr/-x/Ss/ if -g _;
- substr($perms, 8, 1) =~ tr/-x/Tt/ if -k _;
- if (-f _) { $perms = '-' . $perms; }
- elsif (-d _) { $perms = 'd' . $perms; }
- elsif (-l _) { $perms = 'l' . $perms; $pname .= ' -> ' . readlink($_); }
- elsif (-c _) { $perms = 'c' . $perms; $size = sizemm($rdev); }
- elsif (-b _) { $perms = 'b' . $perms; $size = sizemm($rdev); }
- elsif (-p _) { $perms = 'p' . $perms; }
- elsif (-S _) { $perms = 's' . $perms; }
- else { $perms = '?' . $perms; }
-
- my $user = $user{$uid} || $uid;
- my $group = $group{$gid} || $gid;
-
- my ($sec,$min,$hour,$mday,$mon,$timeyear) = localtime($mtime);
- if (-M _ > 365.25 / 2) {
- $timeyear += 1900;
- } else {
- $timeyear = sprintf("%02d:%02d", $hour, $min);
- }
-
- printf "%5lu %4ld %-10s %3d %-8s %-8s %8s %s %2d %5s %s\n",
- $ino,
- $blocks,
- $perms,
- $nlink,
- $user,
- $group,
- $size,
- $moname[$mon],
- $mday,
- $timeyear,
- $pname;
- 1;
-}
-
-END
-}
-
-
-if (exists $init{cpio} || exists $init{tar}) {
-print <<'END';
-
-my %blocks = ();
-
-sub flush {
- my ($fh, $varref, $blksz) = @_;
-
- while (length($$varref) >= $blksz) {
- no strict qw/refs/;
- syswrite($fh, $$varref, $blksz);
- substr($$varref, 0, $blksz) = '';
- ++$blocks{$fh};
- }
-}
-
-END
-}
-
-
-if (exists $init{cpio}) {
- print <<'INTRO', <<"SUB", <<'END';
-
-my %cpout = ();
-my %nc = ();
-
-sub cpio {
- my ($fh, $fname, $nc) = @_;
- my $text = '';
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
- $atime,$mtime,$ctime,$blksize,$blocks);
- local (*IN);
-
- if ( ! defined $fname ) {
- $fname = 'TRAILER!!!';
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
- $atime,$mtime,$ctime,$blksize,$blocks) = (0) x 13;
- } else {
- ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
-INTRO
- \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat(_);
-SUB
- if (-f _) {
- open(IN, "./$_\0") || do {
- warn "Couldn't open $fname: $!\n";
- return;
- }
- } else {
- $text = readlink($_);
- $size = 0 unless defined $text;
- }
- }
-
- $fname =~ s#^\./##;
- $nc{$fh} = $nc;
- if ($nc eq 'n') {
- $cpout{$fh} .=
- sprintf("%06o%06o%06o%06o%06o%06o%06o%06o%011lo%06o%011lo%s\0",
- 070707,
- $dev & 0777777,
- $ino & 0777777,
- $mode & 0777777,
- $uid & 0777777,
- $gid & 0777777,
- $nlink & 0777777,
- $rdev & 0177777,
- $mtime,
- length($fname)+1,
- $size,
- $fname);
- } else {
- $cpout{$fh} .= "\0" if length($cpout{$fh}) & 1;
- $cpout{$fh} .= pack("SSSSSSSSLSLa*",
- 070707, $dev, $ino, $mode, $uid, $gid, $nlink, $rdev, $mtime,
- length($fname)+1, $size,
- $fname . (length($fname) & 1 ? "\0" : "\0\0"));
- }
-
- if ($text ne '') {
- $cpout{$fh} .= $text;
- } elsif ($size) {
- my $l;
- flush($fh, \$cpout{$fh}, 5120)
- while ($l = length($cpout{$fh})) >= 5120;
- while (sysread(IN, $cpout{$fh}, 5120 - $l, $l)) {
- flush($fh, \$cpout{$fh}, 5120);
- $l = length($cpout{$fh});
- }
- close IN;
- }
-}
-
-sub cflushall {
- for my $fh (keys %cpout) {
- &cpio($fh, undef, $nc{$fh});
- $cpout{$fh} .= "0" x (5120 - length($cpout{$fh}));
- flush($fh, \$cpout{$fh}, 5120);
- print $blocks{$fh} * 10, " blocks\n";
- }
-}
-
-END
-}
-
-if (exists $init{tar}) {
- print <<'INTRO', <<"SUB", <<'END';
-
-my %tarout = ();
-my %linkseen = ();
-
-sub tar {
- my ($fh, $fname) = @_;
- my $prefix = '';
- my $typeflag = '0';
- my $linkname;
- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
-INTRO
- \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat(_);
-SUB
- local (*IN);
-
- if ($nlink > 1) {
- if ($linkname = $linkseen{$fh, $dev, $ino}) {
- if (length($linkname) > 100) {
- warn "$0: omitting file with linkname ",
- "too long for tar output: $linkname\n";
- return;
- }
- $typeflag = '1';
- $size = 0;
- } else {
- $linkseen{$fh, $dev, $ino} = $fname;
- }
- }
- if ($typeflag eq '0') {
- if (-f _) {
- open(IN, "./$_\0") || do {
- warn "Couldn't open $fname: $!\n";
- return;
- }
- } else {
- $linkname = readlink($_);
- if (defined $linkname) { $typeflag = '2' }
- elsif (-c _) { $typeflag = '3' }
- elsif (-b _) { $typeflag = '4' }
- elsif (-d _) { $typeflag = '5' }
- elsif (-p _) { $typeflag = '6' }
- }
- }
-
- if (length($fname) > 100) {
- ($prefix, $fname) = ($fname =~ m#\A(.*?)/(.{,100})\Z(?!\n)#);
- if (!defined($fname) || length($prefix) > 155) {
- warn "$0: omitting file with name too long for tar output: ",
- $fname, "\n";
- return;
- }
- }
-
- $size = 0 if $typeflag ne '0';
- my $header = pack("a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155",
- $fname,
- sprintf("%7o ", $mode & 0777),
- sprintf("%7o ", $uid & 0777777),
- sprintf("%7o ", $gid & 0777777),
- sprintf("%11o ", $size),
- sprintf("%11o ", $mtime),
- ' 'x8,
- $typeflag,
- defined $linkname ? $linkname : '',
- "ustar\0",
- "00",
- $user{$uid},
- $group{$gid},
- ($rdev >> 8) & 0xff,
- $rdev & 0xff,
- $prefix,
- );
- substr($header, 148, 8) = sprintf("%7o ", unpack("%16C*", $header));
- my $l = length($header) % 512;
- $tarout{$fh} .= $header;
- $tarout{$fh} .= "\0" x (512 - $l) if $l;
-
- if ($size) {
- flush($fh, \$tarout{$fh}, 10240)
- while ($l = length($tarout{$fh})) >= 10240;
- while (sysread(IN, $tarout{$fh}, 10240 - $l, $l)) {
- my $slop = length($tarout{$fh}) % 512;
- $tarout{$fh} .= "\0" x (512 - $slop) if $slop;
- flush($fh, \$tarout{$fh}, 10240);
- $l = length($tarout{$fh});
- }
- close IN;
- }
-}
-
-sub tflushall {
- my $len;
- for my $fh (keys %tarout) {
- $len = 10240 - length($tarout{$fh});
- $len += 10240 if $len < 1024;
- $tarout{$fh} .= "\0" x $len;
- flush($fh, \$tarout{$fh}, 10240);
- }
-}
-
-END
-}
-
-exit;
-
-############################################################################
-
-sub tab {
- my $tabstring;
-
- $tabstring = "\t" x ($indent_depth/2) . ' ' x ($indent_depth%2 * 4);
- if (!$statdone) {
- if ($_ =~ /^(?:name|print|prune|exec|ok|\(|\))/) {
- $init{delayedstat} = 1;
- } else {
- my $statcall = '(($dev,$ino,$mode,$nlink,$uid,$gid) = '
- . $stat . '($_))';
- if (exists $init{saw_or}) {
- $tabstring .= "(\$nlink || $statcall) &&\n" . $tabstring;
- } else {
- $tabstring .= "$statcall &&\n" . $tabstring;
- }
- $statdone = 1;
- $init{declarestat} = 1;
- }
- }
- $tabstring =~ s/^\s+/ / if $out =~ /!$/;
- $tabstring;
-}
-
-sub fileglob_to_re {
- my $x = shift;
- $x =~ s#([./^\$()])#\\$1#g;
- $x =~ s#([?*])#.$1#g;
- "^$x\\z";
-}
-
-sub n {
- my ($pre, $n) = @_;
- $n =~ s/^-/< / || $n =~ s/^\+/> / || $n =~ s/^/== /;
- $n =~ s/ 0*(\d)/ $1/;
- "($pre $n)";
-}
-
-sub quote {
- my $string = shift;
- $string =~ s/\\/\\\\/g;
- $string =~ s/'/\\'/g;
- "'$string'";
-}
-
-__END__
-
-=head1 NAME
-
-find2perl - translate find command lines to Perl code
-
-=head1 SYNOPSIS
-
- find2perl [paths] [predicates] | perl
-
-=head1 DESCRIPTION
-
-find2perl is a little translator to convert find command lines to
-equivalent Perl code. The resulting code is typically faster than
-running find itself.
-
-"paths" are a set of paths where find2perl will start its searches and
-"predicates" are taken from the following list.
-
-=over 4
-
-=item C<! PREDICATE>
-
-Negate the sense of the following predicate. The C<!> must be passed as
-a distinct argument, so it may need to be surrounded by whitespace and/or
-quoted from interpretation by the shell using a backslash (just as with
-using C<find(1)>).
-
-=item C<( PREDICATES )>
-
-Group the given PREDICATES. The parentheses must be passed as distinct
-arguments, so they may need to be surrounded by whitespace and/or
-quoted from interpretation by the shell using a backslash (just as with
-using C<find(1)>).
-
-=item C<PREDICATE1 PREDICATE2>
-
-True if _both_ PREDICATE1 and PREDICATE2 are true; PREDICATE2 is not
-evaluated if PREDICATE1 is false.
-
-=item C<PREDICATE1 -o PREDICATE2>
-
-True if either one of PREDICATE1 or PREDICATE2 is true; PREDICATE2 is
-not evaluated if PREDICATE1 is true.
-
-=item C<-follow>
-
-Follow (dereference) symlinks. The checking of file attributes depends
-on the position of the C<-follow> option. If it precedes the file
-check option, an C<stat> is done which means the file check applies to the
-file the symbolic link is pointing to. If C<-follow> option follows the
-file check option, this now applies to the symbolic link itself, i.e.
-an C<lstat> is done.
-
-=item C<-depth>
-
-Change directory traversal algorithm from breadth-first to depth-first.
-
-=item C<-prune>
-
-Do not descend into the directory currently matched.
-
-=item C<-xdev>
-
-Do not traverse mount points (prunes search at mount-point directories).
-
-=item C<-name GLOB>
-
-File name matches specified GLOB wildcard pattern. GLOB may need to be
-quoted to avoid interpretation by the shell (just as with using
-C<find(1)>).
-
-=item C<-perm PERM>
-
-Low-order 9 bits of permission match octal value PERM.
-
-=item C<-perm -PERM>
-
-The bits specified in PERM are all set in file's permissions.
-
-=item C<-type X>
-
-The file's type matches perl's C<-X> operator.
-
-=item C<-fstype TYPE>
-
-Filesystem of current path is of type TYPE (only NFS/non-NFS distinction
-is implemented).
-
-=item C<-user USER>
-
-True if USER is owner of file.
-
-=item C<-group GROUP>
-
-True if file's group is GROUP.
-
-=item C<-nouser>
-
-True if file's owner is not in password database.
-
-=item C<-nogroup>
-
-True if file's group is not in group database.
-
-=item C<-inum INUM>
-
-True file's inode number is INUM.
-
-=item C<-links N>
-
-True if (hard) link count of file matches N (see below).
-
-=item C<-size N>
-
-True if file's size matches N (see below) N is normally counted in
-512-byte blocks, but a suffix of "c" specifies that size should be
-counted in characters (bytes) and a suffix of "k" specifes that
-size should be counted in 1024-byte blocks.
-
-=item C<-atime N>
-
-True if last-access time of file matches N (measured in days) (see
-below).
-
-=item C<-ctime N>
-
-True if last-changed time of file's inode matches N (measured in days,
-see below).
-
-=item C<-mtime N>
-
-True if last-modified time of file matches N (measured in days, see below).
-
-=item C<-newer FILE>
-
-True if last-modified time of file matches N.
-
-=item C<-print>
-
-Print out path of file (always true).
-
-=item C<-print0>
-
-Like -print, but terminates with \0 instead of \n.
-
-=item C<-exec OPTIONS ;>
-
-exec() the arguments in OPTIONS in a subprocess; any occurence of {} in
-OPTIONS will first be substituted with the path of the current
-file. Note that the command "rm" has been special-cased to use perl's
-unlink() function instead (as an optimization). The C<;> must be passed as
-a distinct argument, so it may need to be surrounded by whitespace and/or
-quoted from interpretation by the shell using a backslash (just as with
-using C<find(1)>).
-
-=item C<-ok OPTIONS ;>
-
-Like -exec, but first prompts user; if user's response does not begin
-with a y, skip the exec. The C<;> must be passed as
-a distinct argument, so it may need to be surrounded by whitespace and/or
-quoted from interpretation by the shell using a backslash (just as with
-using C<find(1)>).
-
-=item C<-eval EXPR>
-
-Has the perl script eval() the EXPR.
-
-=item C<-ls>
-
-Simulates C<-exec ls -dils {} ;>
-
-=item C<-tar FILE>
-
-Adds current output to tar-format FILE.
-
-=item C<-cpio FILE>
-
-Adds current output to old-style cpio-format FILE.
-
-=item C<-ncpio FILE>
-
-Adds current output to "new"-style cpio-format FILE.
-
-=back
-
-Predicates which take a numeric argument N can come in three forms:
-
- * N is prefixed with a +: match values greater than N
- * N is prefixed with a -: match values less than N
- * N is not prefixed with either + or -: match only values equal to N
-
-=head1 SEE ALSO
-
-find
-
-=cut
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/x2p/hash.c b/contrib/perl5/x2p/hash.c
deleted file mode 100644
index a266403..0000000
--- a/contrib/perl5/x2p/hash.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* $RCSfile: hash.c,v $$Revision: 4.1 $$Date: 92/08/07 18:29:20 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: hash.c,v $
- */
-
-#include <stdio.h>
-#include "EXTERN.h"
-#include "a2p.h"
-#include "util.h"
-
-STR *
-hfetch(register HASH *tb, char *key)
-{
- register char *s;
- register int i;
- register int hash;
- register HENT *entry;
-
- if (!tb)
- return Nullstr;
- for (s=key, i=0, hash = 0;
- /* while */ *s;
- 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 (strNE(entry->hent_key,key)) /* is this it? */
- continue;
- return entry->hent_val;
- }
- return Nullstr;
-}
-
-bool
-hstore(register HASH *tb, char *key, STR *val)
-{
- register char *s;
- register int i;
- register int hash;
- register HENT *entry;
- register HENT **oentry;
-
- if (!tb)
- return FALSE;
- for (s=key, i=0, hash = 0;
- /* while */ *s;
- s++, i++, hash *= 5) {
- hash += *s * coeff[i];
- }
-
- 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 (strNE(entry->hent_key,key)) /* is this it? */
- continue;
- /*NOSTRICT*/
- safefree(entry->hent_val);
- entry->hent_val = val;
- return TRUE;
- }
- /*NOSTRICT*/
- entry = (HENT*) safemalloc(sizeof(HENT));
-
- entry->hent_key = savestr(key);
- entry->hent_val = val;
- entry->hent_hash = hash;
- entry->hent_next = *oentry;
- *oentry = entry;
-
- if (i) { /* initial entry? */
- tb->tbl_fill++;
- if ((tb->tbl_fill * 100 / (tb->tbl_max + 1)) > FILLPCT)
- hsplit(tb);
- }
-
- return FALSE;
-}
-
-#ifdef NOTUSED
-bool
-hdelete(register HASH *tb, char *key)
-{
- register char *s;
- register int i;
- register int hash;
- register HENT *entry;
- register HENT **oentry;
-
- if (!tb)
- return FALSE;
- for (s=key, i=0, hash = 0;
- /* while */ *s;
- 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 = entry->hent_next) {
- if (entry->hent_hash != hash) /* strings can't be equal */
- continue;
- if (strNE(entry->hent_key,key)) /* is this it? */
- continue;
- safefree((char*)entry->hent_val);
- safefree(entry->hent_key);
- *oentry = entry->hent_next;
- safefree((char*)entry);
- if (i)
- tb->tbl_fill--;
- return TRUE;
- }
- return FALSE;
-}
-#endif
-
-void
-hsplit(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 = (HENT**) saferealloc((char*)tb->tbl_array, newsize * sizeof(HENT*));
- bzero((char*)&a[oldsize], oldsize * sizeof(HENT*)); /* zero second half */
- tb->tbl_max = --newsize;
- 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(void)
-{
- register HASH *tb = (HASH*)safemalloc(sizeof(HASH));
-
- tb->tbl_array = (HENT**) safemalloc(8 * sizeof(HENT*));
- tb->tbl_fill = 0;
- tb->tbl_max = 7;
- hiterinit(tb); /* so each() will start off right */
- bzero((char*)tb->tbl_array, 8 * sizeof(HENT*));
- return tb;
-}
-
-#ifdef NOTUSED
-hshow(register HASH *tb)
-{
- fprintf(stderr,"%5d %4d (%2d%%)\n",
- tb->tbl_max+1,
- tb->tbl_fill,
- tb->tbl_fill * 100 / (tb->tbl_max+1));
-}
-#endif
-
-int
-hiterinit(register HASH *tb)
-{
- tb->tbl_riter = -1;
- tb->tbl_eiter = Null(HENT*);
- return tb->tbl_fill;
-}
-
-HENT *
-hiternext(register HASH *tb)
-{
- register HENT *entry;
-
- entry = tb->tbl_eiter;
- 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(register HENT *entry)
-{
- return entry->hent_key;
-}
-
-STR *
-hiterval(register HENT *entry)
-{
- return entry->hent_val;
-}
diff --git a/contrib/perl5/x2p/hash.h b/contrib/perl5/x2p/hash.h
deleted file mode 100644
index 7b2b668..0000000
--- a/contrib/perl5/x2p/hash.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* $RCSfile: hash.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:21 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: hash.h,v $
- */
-
-#define FILLPCT 60 /* don't make greater than 99 */
-
-#ifdef DOINIT
-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};
-#else
-extern char coeff[];
-#endif
-
-typedef struct hentry HENT;
-
-struct hentry {
- HENT *hent_next;
- char *hent_key;
- STR *hent_val;
- int hent_hash;
-};
-
-struct htbl {
- HENT **tbl_array;
- int tbl_max;
- int tbl_fill;
- int tbl_riter; /* current root of iterator */
- HENT *tbl_eiter; /* current entry of iterator */
-};
-
-bool hdelete (HASH *tb, char *key);
-STR * hfetch ( HASH *tb, char *key );
-int hiterinit ( HASH *tb );
-char * hiterkey ( HENT *entry );
-HENT * hiternext ( HASH *tb );
-STR * hiterval ( HENT *entry );
-HASH * hnew ( void );
-void hsplit ( HASH *tb );
-bool hstore ( HASH *tb, char *key, STR *val );
diff --git a/contrib/perl5/x2p/proto.h b/contrib/perl5/x2p/proto.h
deleted file mode 100644
index e57b4fc..0000000
--- a/contrib/perl5/x2p/proto.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* proto.h
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
diff --git a/contrib/perl5/x2p/s2p.PL b/contrib/perl5/x2p/s2p.PL
deleted file mode 100644
index 2d44dd2..0000000
--- a/contrib/perl5/x2p/s2p.PL
+++ /dev/null
@@ -1,858 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir dirname($0);
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{startperl}
- eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
-(\$startperl = <<'/../') =~ s/\\s*\\z//;
-$Config{startperl}
-/../
-(\$perlpath = <<'/../') =~ s/\\s*\\z//;
-$Config{perlpath}
-/../
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-# $RCSfile: s2p.SH,v $$Revision: 4.1 $$Date: 92/08/07 18:29:23 $
-#
-# $Log: s2p.SH,v $
-
-=head1 NAME
-
-s2p - Sed to Perl translator
-
-=head1 SYNOPSIS
-
-B<s2p [options] filename>
-
-=head1 DESCRIPTION
-
-I<s2p> takes a sed script specified on the command line (or from
-standard input) and produces a comparable I<perl> script on the
-standard output.
-
-=head2 Options
-
-Options include:
-
-=over 5
-
-=item B<-DE<lt>numberE<gt>>
-
-sets debugging flags.
-
-=item B<-n>
-
-specifies that this sed script was always invoked with a B<sed -n>.
-Otherwise a switch parser is prepended to the front of the script.
-
-=item B<-p>
-
-specifies that this sed script was never invoked with a B<sed -n>.
-Otherwise a switch parser is prepended to the front of the script.
-
-=back
-
-=head2 Considerations
-
-The perl script produced looks very sed-ish, and there may very well
-be better ways to express what you want to do in perl. For instance,
-s2p does not make any use of the split operator, but you might want
-to.
-
-The perl script you end up with may be either faster or slower than
-the original sed script. If you're only interested in speed you'll
-just have to try it both ways. Of course, if you want to do something
-sed doesn't do, you have no choice. It's often possible to speed up
-the perl script by various methods, such as deleting all references to
-$\ and chop.
-
-=head1 ENVIRONMENT
-
-s2p uses no environment variables.
-
-=head1 AUTHOR
-
-Larry Wall E<lt>F<larry@wall.org>E<gt>
-
-=head1 FILES
-
-=head1 SEE ALSO
-
- perl The perl compiler/interpreter
-
- a2p awk to perl translator
-
-=head1 DIAGNOSTICS
-
-=head1 BUGS
-
-=cut
-
-$indent = 4;
-$shiftwidth = 4;
-$l = '{'; $r = '}';
-
-while ($ARGV[0] =~ /^-/) {
- $_ = shift;
- last if /^--/;
- if (/^-D/) {
- $debug++;
- open(BODY,'>-');
- next;
- }
- if (/^-n/) {
- $assumen++;
- next;
- }
- if (/^-p/) {
- $assumep++;
- next;
- }
- die "I don't recognize this switch: $_\n";
-}
-
-unless ($debug) {
- open(BODY,"+>/tmp/sperl$$") ||
- &Die("Can't open temp file: $!\n");
-}
-
-if (!$assumen && !$assumep) {
- print BODY &q(<<'EOT');
-: while ($ARGV[0] =~ /^-/) {
-: $_ = shift;
-: last if /^--/;
-: if (/^-n/) {
-: $nflag++;
-: next;
-: }
-: die "I don't recognize this switch: $_\\n";
-: }
-:
-EOT
-}
-
-print BODY &q(<<'EOT');
-: #ifdef PRINTIT
-: #ifdef ASSUMEP
-: $printit++;
-: #else
-: $printit++ unless $nflag;
-: #endif
-: #endif
-: <><>
-: $\ = "\n"; # automatically add newline on print
-: <><>
-: #ifdef TOPLABEL
-: LINE:
-: while (chop($_ = <>)) {
-: #else
-: LINE:
-: while (<>) {
-: chop;
-: #endif
-EOT
-
-LINE:
-while (<>) {
-
- # Wipe out surrounding whitespace.
-
- s/[ \t]*(.*)\n$/$1/;
-
- # Perhaps it's a label/comment.
-
- if (/^:/) {
- s/^:[ \t]*//;
- $label = &make_label($_);
- if ($. == 1) {
- $toplabel = $label;
- if (/^(top|(re)?start|redo|begin(ning)|again|input)$/i) {
- $_ = <>;
- redo LINE; # Never referenced, so delete it if not a comment.
- }
- }
- $_ = "$label:";
- if ($lastlinewaslabel++) {
- $indent += 4;
- print BODY &tab, ";\n";
- $indent -= 4;
- }
- if ($indent >= 2) {
- $indent -= 2;
- $indmod = 2;
- }
- next;
- } else {
- $lastlinewaslabel = '';
- }
-
- # Look for one or two address clauses
-
- $addr1 = '';
- $addr2 = '';
- if (s/^([0-9]+)//) {
- $addr1 = "$1";
- $addr1 = "\$. == $addr1" unless /^,/;
- }
- elsif (s/^\$//) {
- $addr1 = 'eof()';
- }
- elsif (s|^/||) {
- $addr1 = &fetchpat('/');
- }
- if (s/^,//) {
- if (s/^([0-9]+)//) {
- $addr2 = "$1";
- } elsif (s/^\$//) {
- $addr2 = "eof()";
- } elsif (s|^/||) {
- $addr2 = &fetchpat('/');
- } else {
- &Die("Invalid second address at line $.\n");
- }
- if ($addr2 =~ /^\d+$/) {
- $addr1 .= "..$addr2";
- }
- else {
- $addr1 .= "...$addr2";
- }
- }
-
- # Now we check for metacommands {, }, and ! and worry
- # about indentation.
-
- s/^[ \t]+//;
- # a { to keep vi happy
- if ($_ eq '}') {
- $indent -= 4;
- next;
- }
- if (s/^!//) {
- $if = 'unless';
- $else = "$r else $l\n";
- } else {
- $if = 'if';
- $else = '';
- }
- if (s/^{//) { # a } to keep vi happy
- $indmod = 4;
- $redo = $_;
- $_ = '';
- $rmaybe = '';
- } else {
- $rmaybe = "\n$r";
- if ($addr2 || $addr1) {
- $space = ' ' x $shiftwidth;
- } else {
- $space = '';
- }
- $_ = &transmogrify();
- }
-
- # See if we can optimize to modifier form.
-
- if ($addr1) {
- if ($_ !~ /[\n{}]/ && $rmaybe && !$change &&
- $_ !~ / if / && $_ !~ / unless /) {
- s/;$/ $if $addr1;/;
- $_ = substr($_,$shiftwidth,1000);
- } else {
- $_ = "$if ($addr1) $l\n$change$_$rmaybe";
- }
- $change = '';
- next LINE;
- }
-} continue {
- @lines = split(/\n/,$_);
- for (@lines) {
- unless (s/^ *<<--//) {
- print BODY &tab;
- }
- print BODY $_, "\n";
- }
- $indent += $indmod;
- $indmod = 0;
- if ($redo) {
- $_ = $redo;
- $redo = '';
- redo LINE;
- }
-}
-if ($lastlinewaslabel++) {
- $indent += 4;
- print BODY &tab, ";\n";
- $indent -= 4;
-}
-
-if ($appendseen || $tseen || !$assumen) {
- $printit++ if $dseen || (!$assumen && !$assumep);
- print BODY &q(<<'EOT');
-: #ifdef SAWNEXT
-: }
-: continue {
-: #endif
-: #ifdef PRINTIT
-: #ifdef DSEEN
-: #ifdef ASSUMEP
-: print if $printit++;
-: #else
-: if ($printit)
-: { print; }
-: else
-: { $printit++ unless $nflag; }
-: #endif
-: #else
-: print if $printit;
-: #endif
-: #else
-: print;
-: #endif
-: #ifdef TSEEN
-: $tflag = 0;
-: #endif
-: #ifdef APPENDSEEN
-: if ($atext) { chop $atext; print $atext; $atext = ''; }
-: #endif
-EOT
-}
-
-print BODY &q(<<'EOT');
-: }
-EOT
-
-unless ($debug) {
-
- print &q(<<"EOT");
-: $startperl
-: eval 'exec $perlpath -S \$0 \${1+"\$@"}'
-: if \$running_under_some_shell;
-:
-EOT
- print"$opens\n" if $opens;
- seek(BODY, 0, 0) || die "Can't rewind temp file: $!\n";
- while (<BODY>) {
- /^[ \t]*$/ && next;
- /^#ifdef (\w+)/ && ((${lc $1} || &skip), next);
- /^#else/ && (&skip, next);
- /^#endif/ && next;
- s/^<><>//;
- print;
- }
-}
-
-&Cleanup;
-exit;
-
-sub Cleanup {
- unlink "/tmp/sperl$$";
-}
-sub Die {
- &Cleanup;
- die $_[0];
-}
-sub tab {
- "\t" x ($indent / 8) . ' ' x ($indent % 8);
-}
-sub make_filehandle {
- local($_) = $_[0];
- local($fname) = $_;
- if (!$seen{$fname}) {
- $_ = "FH_" . $_ if /^\d/;
- s/[^a-zA-Z0-9]/_/g;
- s/^_*//;
- $_ = "\U$_";
- if ($fhseen{$_}) {
- for ($tmp = "a"; $fhseen{"$_$tmp"}; $a++) {}
- $_ .= $tmp;
- }
- $fhseen{$_} = 1;
- $opens .= &q(<<"EOT");
-: open($_, '>$fname') || die "Can't create $fname: \$!";
-EOT
- $seen{$fname} = $_;
- }
- $seen{$fname};
-}
-
-sub make_label {
- local($label) = @_;
- $label =~ s/[^a-zA-Z0-9]/_/g;
- if ($label =~ /^[0-9_]/) { $label = 'L' . $label; }
- $label = substr($label,0,8);
-
- # Could be a reserved word, so capitalize it.
- substr($label,0,1) =~ y/a-z/A-Z/
- if $label =~ /^[a-z]/;
-
- $label;
-}
-
-sub transmogrify {
- { # case
- if (/^d/) {
- $dseen++;
- chop($_ = &q(<<'EOT'));
-: <<--#ifdef PRINTIT
-: $printit = 0;
-: <<--#endif
-: next LINE;
-EOT
- $sawnext++;
- next;
- }
-
- if (/^n/) {
- chop($_ = &q(<<'EOT'));
-: <<--#ifdef PRINTIT
-: <<--#ifdef DSEEN
-: <<--#ifdef ASSUMEP
-: print if $printit++;
-: <<--#else
-: if ($printit)
-: { print; }
-: else
-: { $printit++ unless $nflag; }
-: <<--#endif
-: <<--#else
-: print if $printit;
-: <<--#endif
-: <<--#else
-: print;
-: <<--#endif
-: <<--#ifdef APPENDSEEN
-: if ($atext) {chop $atext; print $atext; $atext = '';}
-: <<--#endif
-: $_ = <>;
-: chop;
-: <<--#ifdef TSEEN
-: $tflag = 0;
-: <<--#endif
-EOT
- next;
- }
-
- if (/^a/) {
- $appendseen++;
- $command = $space . "\$atext .= <<'End_Of_Text';\n<<--";
- $lastline = 0;
- while (<>) {
- s/^[ \t]*//;
- s/^[\\]//;
- unless (s|\\$||) { $lastline = 1;}
- s/^([ \t]*\n)/<><>$1/;
- $command .= $_;
- $command .= '<<--';
- last if $lastline;
- }
- $_ = $command . "End_Of_Text";
- last;
- }
-
- if (/^[ic]/) {
- if (/^c/) { $change = 1; }
- $addr1 = 1 if $addr1 eq '';
- $addr1 = '$iter = (' . $addr1 . ')';
- $command = $space .
- " if (\$iter == 1) { print <<'End_Of_Text'; }\n<<--";
- $lastline = 0;
- while (<>) {
- s/^[ \t]*//;
- s/^[\\]//;
- unless (s/\\$//) { $lastline = 1;}
- s/'/\\'/g;
- s/^([ \t]*\n)/<><>$1/;
- $command .= $_;
- $command .= '<<--';
- last if $lastline;
- }
- $_ = $command . "End_Of_Text";
- if ($change) {
- $dseen++;
- $change = "$_\n";
- chop($_ = &q(<<"EOT"));
-: <<--#ifdef PRINTIT
-: $space\$printit = 0;
-: <<--#endif
-: ${space}next LINE;
-EOT
- $sawnext++;
- }
- last;
- }
-
- if (/^s/) {
- $delim = substr($_,1,1);
- $len = length($_);
- $repl = $end = 0;
- $inbracket = 0;
- for ($i = 2; $i < $len; $i++) {
- $c = substr($_,$i,1);
- if ($c eq $delim) {
- if ($inbracket) {
- substr($_, $i, 0) = '\\';
- $i++;
- $len++;
- }
- else {
- if ($repl) {
- $end = $i;
- last;
- } else {
- $repl = $i;
- }
- }
- }
- elsif ($c eq '\\') {
- $i++;
- if ($i >= $len) {
- $_ .= 'n';
- $_ .= <>;
- $len = length($_);
- $_ = substr($_,0,--$len);
- }
- elsif (substr($_,$i,1) =~ /^[n]$/) {
- ;
- }
- elsif (!$repl &&
- substr($_,$i,1) =~ /^[(){}\w]$/) {
- $i--;
- $len--;
- substr($_, $i, 1) = '';
- }
- elsif (!$repl &&
- substr($_,$i,1) =~ /^[<>]$/) {
- substr($_,$i,1) = 'b';
- }
- elsif ($repl && substr($_,$i,1) =~ /^\d$/) {
- substr($_,$i-1,1) = '$';
- }
- }
- elsif ($c eq '@') {
- substr($_, $i, 0) = '\\';
- $i++;
- $len++;
- }
- elsif ($c eq '&' && $repl) {
- substr($_, $i, 0) = '$';
- $i++;
- $len++;
- }
- elsif ($c eq '$' && $repl) {
- substr($_, $i, 0) = '\\';
- $i++;
- $len++;
- }
- elsif ($c eq '[' && !$repl) {
- $i++ if substr($_,$i,1) eq '^';
- $i++ if substr($_,$i,1) eq ']';
- $inbracket = 1;
- }
- elsif ($c eq ']') {
- $inbracket = 0;
- }
- elsif ($c eq "\t") {
- substr($_, $i, 1) = '\\t';
- $i++;
- $len++;
- }
- elsif (!$repl && index("()+",$c) >= 0) {
- substr($_, $i, 0) = '\\';
- $i++;
- $len++;
- }
- }
- &Die("Malformed substitution at line $.\n")
- unless $end;
- $pat = substr($_, 0, $repl + 1);
- $repl = substr($_, $repl+1, $end-$repl-1);
- $end = substr($_, $end + 1, 1000);
- &simplify($pat);
- $subst = "$pat$repl$delim";
- $cmd = '';
- while ($end) {
- if ($end =~ s/^g//) {
- $subst .= 'g';
- next;
- }
- if ($end =~ s/^p//) {
- $cmd .= ' && (print)';
- next;
- }
- if ($end =~ s/^w[ \t]*//) {
- $fh = &make_filehandle($end);
- $cmd .= " && (print $fh \$_)";
- $end = '';
- next;
- }
- &Die("Unrecognized substitution command".
- "($end) at line $.\n");
- }
- chop ($_ = &q(<<"EOT"));
-: <<--#ifdef TSEEN
-: $subst && \$tflag++$cmd;
-: <<--#else
-: $subst$cmd;
-: <<--#endif
-EOT
- next;
- }
-
- if (/^p/) {
- $_ = 'print;';
- next;
- }
-
- if (/^w/) {
- s/^w[ \t]*//;
- $fh = &make_filehandle($_);
- $_ = "print $fh \$_;";
- next;
- }
-
- if (/^r/) {
- $appendseen++;
- s/^r[ \t]*//;
- $file = $_;
- $_ = "\$atext .= `cat $file 2>/dev/null`;";
- next;
- }
-
- if (/^P/) {
- $_ = 'print $1 if /^(.*)/;';
- next;
- }
-
- if (/^D/) {
- chop($_ = &q(<<'EOT'));
-: s/^.*\n?//;
-: redo LINE if $_;
-: next LINE;
-EOT
- $sawnext++;
- next;
- }
-
- if (/^N/) {
- chop($_ = &q(<<'EOT'));
-: $_ .= "\n";
-: $len1 = length;
-: $_ .= <>;
-: chop if $len1 < length;
-: <<--#ifdef TSEEN
-: $tflag = 0;
-: <<--#endif
-EOT
- next;
- }
-
- if (/^h/) {
- $_ = '$hold = $_;';
- next;
- }
-
- if (/^H/) {
- $_ = '$hold .= "\n", $hold .= $_;';
- next;
- }
-
- if (/^g/) {
- $_ = '$_ = $hold;';
- next;
- }
-
- if (/^G/) {
- $_ = '$_ .= "\n", $_ .= $hold;';
- next;
- }
-
- if (/^x/) {
- $_ = '($_, $hold) = ($hold, $_);';
- next;
- }
-
- if (/^b$/) {
- $_ = 'next LINE;';
- $sawnext++;
- next;
- }
-
- if (/^b/) {
- s/^b[ \t]*//;
- $lab = &make_label($_);
- if ($lab eq $toplabel) {
- $_ = 'redo LINE;';
- } else {
- $_ = "goto $lab;";
- }
- next;
- }
-
- if (/^t$/) {
- $_ = 'next LINE if $tflag;';
- $sawnext++;
- $tseen++;
- next;
- }
-
- if (/^t/) {
- s/^t[ \t]*//;
- $lab = &make_label($_);
- $_ = q/if ($tflag) {$tflag = 0; /;
- if ($lab eq $toplabel) {
- $_ .= 'redo LINE;}';
- } else {
- $_ .= "goto $lab;}";
- }
- $tseen++;
- next;
- }
-
- if (/^y/) {
- s/abcdefghijklmnopqrstuvwxyz/a-z/g;
- s/ABCDEFGHIJKLMNOPQRSTUVWXYZ/A-Z/g;
- s/abcdef/a-f/g;
- s/ABCDEF/A-F/g;
- s/0123456789/0-9/g;
- s/01234567/0-7/g;
- $_ .= ';';
- }
-
- if (/^=/) {
- $_ = 'print $.;';
- next;
- }
-
- if (/^q/) {
- chop($_ = &q(<<'EOT'));
-: close(ARGV);
-: @ARGV = ();
-: next LINE;
-EOT
- $sawnext++;
- next;
- }
- } continue {
- if ($space) {
- s/^/$space/;
- s/(\n)(.)/$1$space$2/g;
- }
- last;
- }
- $_;
-}
-
-sub fetchpat {
- local($outer) = @_;
- local($addr) = $outer;
- local($inbracket);
- local($prefix,$delim,$ch);
-
- # Process pattern one potential delimiter at a time.
-
- DELIM: while (s#^([^\]+(|)[\\/]*)([]+(|)[\\/])##) {
- $prefix = $1;
- $delim = $2;
- if ($delim eq '\\') {
- s/(.)//;
- $ch = $1;
- $delim = '' if $ch =~ /^[(){}A-Za-mo-z]$/;
- $ch = 'b' if $ch =~ /^[<>]$/;
- $delim .= $ch;
- }
- elsif ($delim eq '[') {
- $inbracket = 1;
- s/^\^// && ($delim .= '^');
- s/^]// && ($delim .= ']');
- }
- elsif ($delim eq ']') {
- $inbracket = 0;
- }
- elsif ($inbracket || $delim ne $outer) {
- $delim = '\\' . $delim;
- }
- $addr .= $prefix;
- $addr .= $delim;
- if ($delim eq $outer && !$inbracket) {
- last DELIM;
- }
- }
- $addr =~ s/\t/\\t/g;
- $addr =~ s/\@/\\@/g;
- &simplify($addr);
- $addr;
-}
-
-sub q {
- local($string) = @_;
- local($*) = 1;
- $string =~ s/^:\t?//g;
- $string;
-}
-
-sub simplify {
- $_[0] =~ s/_a-za-z0-9/\\w/ig;
- $_[0] =~ s/a-z_a-z0-9/\\w/ig;
- $_[0] =~ s/a-za-z_0-9/\\w/ig;
- $_[0] =~ s/a-za-z0-9_/\\w/ig;
- $_[0] =~ s/_0-9a-za-z/\\w/ig;
- $_[0] =~ s/0-9_a-za-z/\\w/ig;
- $_[0] =~ s/0-9a-z_a-z/\\w/ig;
- $_[0] =~ s/0-9a-za-z_/\\w/ig;
- $_[0] =~ s/\[\\w\]/\\w/g;
- $_[0] =~ s/\[^\\w\]/\\W/g;
- $_[0] =~ s/\[0-9\]/\\d/g;
- $_[0] =~ s/\[^0-9\]/\\D/g;
- $_[0] =~ s/\\d\\d\*/\\d+/g;
- $_[0] =~ s/\\D\\D\*/\\D+/g;
- $_[0] =~ s/\\w\\w\*/\\w+/g;
- $_[0] =~ s/\\t\\t\*/\\t+/g;
- $_[0] =~ s/(\[.[^]]*\])\1\*/$1+/g;
- $_[0] =~ s/([\w\s!@#%^&-=,:;'"])\1\*/$1+/g;
-}
-
-sub skip {
- local($level) = 0;
-
- while(<BODY>) {
- /^#ifdef/ && $level++;
- /^#else/ && !$level && return;
- /^#endif/ && !$level-- && return;
- }
-
- die "Unterminated `#ifdef' conditional\n";
-}
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/contrib/perl5/x2p/str.c b/contrib/perl5/x2p/str.c
deleted file mode 100644
index 310bcd6..0000000
--- a/contrib/perl5/x2p/str.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/* $RCSfile: str.c,v $$Revision: 4.1 $$Date: 92/08/07 18:29:26 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: str.c,v $
- */
-
-#include "EXTERN.h"
-#include "a2p.h"
-#include "util.h"
-
-void
-str_numset(register STR *str, double num)
-{
- str->str_nval = num;
- str->str_pok = 0; /* invalidate pointer */
- str->str_nok = 1; /* validate number */
-}
-
-char *
-str_2ptr(register STR *str)
-{
- register char *s;
-
- if (!str)
- return "";
- GROWSTR(&(str->str_ptr), &(str->str_len), 24);
- s = str->str_ptr;
- if (str->str_nok) {
- sprintf(s,"%.20g",str->str_nval);
- while (*s) s++;
- }
- *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",(unsigned long)str,str->str_ptr);
-#endif
- return str->str_ptr;
-}
-
-double
-str_2num(register STR *str)
-{
- if (!str)
- return 0.0;
- if (str->str_len && str->str_pok)
- str->str_nval = atof(str->str_ptr);
- else
- str->str_nval = 0.0;
- str->str_nok = 1;
-#ifdef DEBUGGING
- if (debug & 32)
- fprintf(stderr,"0x%lx num(%g)\n",(unsigned long)str,str->str_nval);
-#endif
- return str->str_nval;
-}
-
-void
-str_sset(STR *dstr, register STR *sstr)
-{
- if (!sstr)
- str_nset(dstr,No,0);
- else if (sstr->str_nok)
- str_numset(dstr,sstr->str_nval);
- else if (sstr->str_pok)
- str_nset(dstr,sstr->str_ptr,sstr->str_cur);
- else
- str_nset(dstr,"",0);
-}
-
-void
-str_nset(register STR *str, register char *ptr, register int len)
-{
- GROWSTR(&(str->str_ptr), &(str->str_len), len + 1);
- 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 */
-}
-
-void
-str_set(register STR *str, register char *ptr)
-{
- register int len;
-
- if (!ptr)
- ptr = "";
- len = strlen(ptr);
- GROWSTR(&(str->str_ptr), &(str->str_len), len + 1);
- bcopy(ptr,str->str_ptr,len+1);
- str->str_cur = len;
- str->str_nok = 0; /* invalidate number */
- str->str_pok = 1; /* validate pointer */
-}
-
-void
-str_chop(register STR *str, register char *ptr) /* like set but assuming ptr is in str */
-
-
-{
- if (!(str->str_pok))
- str_2ptr(str);
- str->str_cur -= (ptr - str->str_ptr);
- bcopy(ptr,str->str_ptr, str->str_cur + 1);
- str->str_nok = 0; /* invalidate number */
- str->str_pok = 1; /* validate pointer */
-}
-
-void
-str_ncat(register STR *str, register char *ptr, register int len)
-{
- if (!(str->str_pok))
- str_2ptr(str);
- GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + len + 1);
- 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 */
-}
-
-void
-str_scat(STR *dstr, register STR *sstr)
-{
- if (!(sstr->str_pok))
- str_2ptr(sstr);
- if (sstr)
- str_ncat(dstr,sstr->str_ptr,sstr->str_cur);
-}
-
-void
-str_cat(register STR *str, register char *ptr)
-{
- register int len;
-
- if (!ptr)
- return;
- if (!(str->str_pok))
- str_2ptr(str);
- len = strlen(ptr);
- GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + len + 1);
- 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 */
-}
-
-char *
-str_append_till(register STR *str, register char *from, register int delim, char *keeplist)
-{
- register char *to;
- register int len;
-
- if (!from)
- return Nullch;
- len = strlen(from);
- GROWSTR(&(str->str_ptr), &(str->str_len), 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; from++,to++) {
- if (*from == '\\' && from[1] && delim != '\\') {
- if (!keeplist) {
- if (from[1] == delim || from[1] == '\\')
- from++;
- else
- *to++ = *from++;
- }
- else if (strchr(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 *
-str_new(int len)
-{
- register STR *str;
-
- if (freestrroot) {
- str = freestrroot;
- freestrroot = str->str_link.str_next;
- }
- else {
- str = (STR *) safemalloc(sizeof(STR));
- bzero((char*)str,sizeof(STR));
- }
- if (len)
- GROWSTR(&(str->str_ptr), &(str->str_len), len + 1);
- return str;
-}
-
-void
-str_grow(register STR *str, int len)
-{
- if (len && str)
- GROWSTR(&(str->str_ptr), &(str->str_len), len + 1);
-}
-
-/* make str point to what nstr did */
-
-void
-str_replace(register STR *str, register STR *nstr)
-{
- 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;
- if (str->str_nok = nstr->str_nok)
- str->str_nval = nstr->str_nval;
- safefree((char*)nstr);
-}
-
-void
-str_free(register STR *str)
-{
- if (!str)
- return;
- if (str->str_len)
- str->str_ptr[0] = '\0';
- str->str_cur = 0;
- str->str_nok = 0;
- str->str_pok = 0;
- str->str_link.str_next = freestrroot;
- freestrroot = str;
-}
-
-int
-str_len(register STR *str)
-{
- if (!str)
- return 0;
- if (!(str->str_pok))
- str_2ptr(str);
- if (str->str_len)
- return str->str_cur;
- else
- return 0;
-}
-
-char *
-str_gets(register STR *str, register FILE *fp)
-{
-#if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
- /* Here is some breathtakingly efficient cheating */
-
- 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 char newline = '\n'; /* (assuming at least 6 registers) */
- int i;
- int bpx;
-
-#if defined(VMS)
- /* An ungetc()d char is handled separately from the regular
- * buffer, so we getc() it back out and stuff it in the buffer.
- */
- i = getc(fp);
- if (i == EOF) return Nullch;
- *(--((*fp)->_ptr)) = (unsigned char) i;
- (*fp)->_cnt++;
-#endif
-
- cnt = FILE_cnt(fp); /* get count into register */
- str->str_nok = 0; /* invalidate number */
- str->str_pok = 1; /* validate pointer */
- if (str->str_len <= cnt) /* make sure we have the room */
- GROWSTR(&(str->str_ptr), &(str->str_len), cnt+1);
- bp = str->str_ptr; /* move these two too to registers */
- ptr = FILE_ptr(fp);
- for (;;) {
- while (--cnt >= 0) {
- if ((*bp++ = *ptr++) == newline)
- if (bp <= str->str_ptr || bp[-2] != '\\')
- goto thats_all_folks;
- else {
- line++;
- bp -= 2;
- }
- }
-
- FILE_cnt(fp) = cnt; /* deregisterize cnt and ptr */
- FILE_ptr(fp) = ptr;
- i = getc(fp); /* get more characters */
- cnt = FILE_cnt(fp);
- ptr = FILE_ptr(fp); /* reregisterize cnt and ptr */
-
- bpx = bp - str->str_ptr; /* prepare for possible relocation */
- GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + cnt + 1);
- 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_all_folks;
- *bp++ = i; /* now go back to screaming loop */
- }
-
-thats_all_folks:
- FILE_cnt(fp) = cnt; /* put these back or we're in trouble */
- FILE_ptr(fp) = ptr;
- *bp = '\0';
- str->str_cur = bp - str->str_ptr; /* set length */
-
-#else /* USE_STDIO_PTR && STDIO_PTR_LVALUE && STDIO_CNT_LVALUE */
- /* The big, slow, and stupid way */
-
- static char buf[4192];
-
- if (fgets(buf, sizeof buf, fp) != Nullch)
- str_set(str, buf);
- else
- str_set(str, No);
-
-#endif /* USE_STDIO_PTR && STDIO_PTR_LVALUE && STDIO_CNT_LVALUE */
-
- return str->str_cur ? str->str_ptr : Nullch;
-}
-
-void
-str_inc(register STR *str)
-{
- register char *d;
-
- if (!str)
- return;
- if (str->str_nok) {
- str->str_nval += 1.0;
- str->str_pok = 0;
- return;
- }
- if (!str->str_pok) {
- str->str_nval = 1.0;
- str->str_nok = 1;
- return;
- }
- for (d = str->str_ptr; *d && *d != '.'; d++) ;
- d--;
- if (!isdigit(*str->str_ptr) || !isdigit(*d) ) {
- str_numset(str,atof(str->str_ptr) + 1.0); /* punt */
- return;
- }
- while (d >= str->str_ptr) {
- if (++*d <= '9')
- return;
- *(d--) = '0';
- }
- /* oh,oh, the number grew */
- GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + 2);
- str->str_cur++;
- for (d = str->str_ptr + str->str_cur; d > str->str_ptr; d--)
- *d = d[-1];
- *d = '1';
-}
-
-void
-str_dec(register STR *str)
-{
- register char *d;
-
- if (!str)
- return;
- if (str->str_nok) {
- str->str_nval -= 1.0;
- str->str_pok = 0;
- return;
- }
- if (!str->str_pok) {
- str->str_nval = -1.0;
- str->str_nok = 1;
- return;
- }
- for (d = str->str_ptr; *d && *d != '.'; d++) ;
- d--;
- if (!isdigit(*str->str_ptr) || !isdigit(*d) || (*d == '0' && d == str->str_ptr)) {
- str_numset(str,atof(str->str_ptr) - 1.0); /* punt */
- return;
- }
- while (d >= str->str_ptr) {
- if (--*d >= '0')
- return;
- *(d--) = '9';
- }
-}
-
-/* make a string that will exist for the duration of the expression eval */
-
-STR *
-str_mortal(STR *oldstr)
-{
- register STR *str = str_new(0);
- static long tmps_size = -1;
-
- str_sset(str,oldstr);
- if (++tmps_max > tmps_size) {
- tmps_size = tmps_max;
- if (!(tmps_size & 127)) {
- if (tmps_size)
- tmps_list = (STR**)saferealloc((char*)tmps_list,
- (tmps_size + 128) * sizeof(STR*) );
- else
- tmps_list = (STR**)safemalloc(128 * sizeof(char*));
- }
- }
- tmps_list[tmps_max] = str;
- return str;
-}
-
-STR *
-str_make(char *s)
-{
- register STR *str = str_new(0);
-
- str_set(str,s);
- return str;
-}
-
-STR *
-str_nmake(double n)
-{
- register STR *str = str_new(0);
-
- str_numset(str,n);
- return str;
-}
diff --git a/contrib/perl5/x2p/str.h b/contrib/perl5/x2p/str.h
deleted file mode 100644
index 311c5e6..0000000
--- a/contrib/perl5/x2p/str.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* $RCSfile: str.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:27 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: str.h,v $
- */
-
-struct string {
- char * str_ptr; /* pointer to malloced string */
- double str_nval; /* numeric value, if any */
- int str_len; /* allocated size */
- int str_cur; /* length of str_ptr as a C string */
- union {
- STR *str_next; /* while free, link to next free str */
- } str_link;
- char str_pok; /* state of str_ptr */
- char str_nok; /* state of str_nval */
-};
-
-#define Nullstr Null(STR*)
-
-/* the following macro updates any magic values this str is associated with */
-
-#define STABSET(x) (x->str_link.str_magic && stabset(x->str_link.str_magic,x))
-
-EXT STR **tmps_list;
-EXT long tmps_max INIT(-1);
-
-double str_2num ( STR *str );
-char * str_2ptr ( STR *str );
-char * str_append_till ( STR *str, char *from, int delim, char *keeplist );
-void str_cat ( STR *str, char *ptr );
-void str_chop ( STR *str, char *ptr );
-void str_dec ( STR *str );
-void str_free ( STR *str );
-char * str_gets ( STR *str, FILE *fp );
-void str_grow ( STR *str, int len );
-void str_inc ( STR *str );
-int str_len ( STR *str );
-STR * str_make ( char *s );
-STR * str_mortal ( STR *oldstr );
-void str_ncat ( STR *str, char *ptr, int len );
-STR * str_new ( int len );
-STR * str_nmake ( double n );
-void str_nset ( STR *str, char *ptr, int len );
-void str_numset ( STR *str, double num );
-void str_replace ( STR *str, STR *nstr );
-void str_scat ( STR *dstr, STR *sstr );
-void str_set ( STR *str, char *ptr );
-void str_sset ( STR *dstr, STR *sstr );
diff --git a/contrib/perl5/x2p/util.c b/contrib/perl5/x2p/util.c
deleted file mode 100644
index ab24808..0000000
--- a/contrib/perl5/x2p/util.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* $RCSfile: util.c,v $$Revision: 4.1 $$Date: 92/08/07 18:29:29 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: util.c,v $
- */
-
-#include "EXTERN.h"
-#include "a2p.h"
-#include "INTERN.h"
-#include "util.h"
-
-#include <stdarg.h>
-#define FLUSH
-
-static char nomem[] = "Out of memory!\n";
-
-/* paranoid version of malloc */
-
-
-Malloc_t
-safemalloc(MEM_SIZE size)
-{
- Malloc_t ptr;
-
- /* malloc(0) is NASTY on some systems */
- ptr = malloc(size ? size : 1);
-#ifdef DEBUGGING
- if (debug & 128)
- fprintf(stderr,"0x%lx: (%05d) malloc %ld bytes\n",(unsigned long)ptr,
- an++,(long)size);
-#endif
- if (ptr != Nullch)
- return ptr;
- else {
- fputs(nomem,stdout) FLUSH;
- exit(1);
- }
- /*NOTREACHED*/
- return 0;
-}
-
-/* paranoid version of realloc */
-
-Malloc_t
-saferealloc(Malloc_t where, MEM_SIZE size)
-{
- Malloc_t ptr;
-
- /* realloc(0) is NASTY on some systems */
- ptr = realloc(where, size ? size : 1);
-#ifdef DEBUGGING
- if (debug & 128) {
- fprintf(stderr,"0x%lx: (%05d) rfree\n",(unsigned long)where,an++);
- fprintf(stderr,"0x%lx: (%05d) realloc %ld bytes\n",(unsigned long)ptr,an++,(long)size);
- }
-#endif
- if (ptr != Nullch)
- return ptr;
- else {
- fputs(nomem,stdout) FLUSH;
- exit(1);
- }
- /*NOTREACHED*/
- return 0;
-}
-
-/* safe version of free */
-
-Free_t
-safefree(Malloc_t where)
-{
-#ifdef DEBUGGING
- if (debug & 128)
- fprintf(stderr,"0x%lx: (%05d) free\n",(unsigned long)where,an++);
-#endif
- free(where);
-}
-
-/* safe version of string copy */
-
-char *
-safecpy(char *to, register char *from, register int len)
-{
- register char *dest = to;
-
- if (from != Nullch)
- for (len--; len && (*dest++ = *from++); len--) ;
- *dest = '\0';
- return to;
-}
-
-/* copy a string up to some (non-backslashed) delimiter, if any */
-
-char *
-cpytill(register char *to, register char *from, register int delim)
-{
- for (; *from; from++,to++) {
- if (*from == '\\') {
- if (from[1] == delim)
- from++;
- else if (from[1] == '\\')
- *to++ = *from++;
- }
- else if (*from == delim)
- break;
- *to = *from;
- }
- *to = '\0';
- return from;
-}
-
-
-char *
-cpy2(register char *to, register char *from, register int delim)
-{
- for (; *from; from++,to++) {
- if (*from == '\\')
- *to++ = *from++;
- else if (*from == '$')
- *to++ = '\\';
- else if (*from == delim)
- break;
- *to = *from;
- }
- *to = '\0';
- return from;
-}
-
-/* return ptr to little string in big string, NULL if not found */
-
-char *
-instr(char *big, char *little)
-{
- register char *t, *s, *x;
-
- for (t = big; *t; t++) {
- for (x=t,s=little; *s; x++,s++) {
- if (!*x)
- return Nullch;
- if (*s != *x)
- break;
- }
- if (!*s)
- return t;
- }
- return Nullch;
-}
-
-/* copy a string to a safe spot */
-
-char *
-savestr(char *str)
-{
- register char *newaddr = (char *) safemalloc((MEM_SIZE)(strlen(str)+1));
-
- (void)strcpy(newaddr,str);
- return newaddr;
-}
-
-/* grow a static string to at least a certain length */
-
-void
-growstr(char **strptr, int *curlen, int newlen)
-{
- if (newlen > *curlen) { /* need more room? */
- if (*curlen)
- *strptr = (char *) saferealloc(*strptr,(MEM_SIZE)newlen);
- else
- *strptr = (char *) safemalloc((MEM_SIZE)newlen);
- *curlen = newlen;
- }
-}
-
-void
-croak(char *pat,...)
-{
-#if defined(HAS_VPRINTF)
- va_list args;
-
- va_start(args, pat);
- vfprintf(stderr,pat,args);
-#else
- fprintf(stderr,pat,a1,a2,a3,a4);
-#endif
- exit(1);
-}
-
-void
-fatal(char *pat,...)
-{
-#if defined(HAS_VPRINTF)
- va_list args;
-
- va_start(args, pat);
- vfprintf(stderr,pat,args);
-#else
- fprintf(stderr,pat,a1,a2,a3,a4);
-#endif
- exit(1);
-}
-
-#if defined(__APPLE_CC__)
-__private_extern__ /* warn() conflicts with libc */
-#endif
-void
-warn(char *pat,...)
-{
-#if defined(HAS_VPRINTF)
- va_list args;
-
- va_start(args, pat);
- vfprintf(stderr,pat,args);
-#else
- fprintf(stderr,pat,a1,a2,a3,a4);
-#endif
-}
-
diff --git a/contrib/perl5/x2p/util.h b/contrib/perl5/x2p/util.h
deleted file mode 100644
index c5ebcec..0000000
--- a/contrib/perl5/x2p/util.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $RCSfile: util.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:30 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: util.h,v $
- */
-
-/* is the string for makedir a directory name or a filename? */
-
-#define fatal Myfatal
-
-#define MD_DIR 0
-#define MD_FILE 1
-
-#ifdef SETUIDGID
- int eaccess();
-#endif
-
-char *getwd();
-int makedir();
-
-char * cpy2 ( char *to, char *from, int delim );
-char * cpytill ( char *to, char *from, int delim );
-void growstr ( char **strptr, int *curlen, int newlen );
-char * instr ( char *big, char *little );
-char * safecpy ( char *to, char *from, int len );
-char * savestr ( char *str );
-void croak ( char *pat, ... );
-void fatal ( char *pat, ... );
-void warn ( char *pat, ... );
-int prewalk ( int numit, int level, int node, int *numericptr );
-
-Malloc_t safemalloc (MEM_SIZE nbytes);
-Malloc_t safecalloc (MEM_SIZE elements, MEM_SIZE size);
-Malloc_t saferealloc (Malloc_t where, MEM_SIZE nbytes);
-Free_t safefree (Malloc_t where);
diff --git a/contrib/perl5/x2p/walk.c b/contrib/perl5/x2p/walk.c
deleted file mode 100644
index 59ac8a9..0000000
--- a/contrib/perl5/x2p/walk.c
+++ /dev/null
@@ -1,2066 +0,0 @@
-/* $RCSfile: walk.c,v $$Revision: 4.1 $$Date: 92/08/07 18:29:31 $
- *
- * Copyright (c) 1991-2001, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * $Log: walk.c,v $
- */
-
-#include "EXTERN.h"
-#include "a2p.h"
-#include "util.h"
-
-bool exitval = FALSE;
-bool realexit = FALSE;
-bool saw_getline = FALSE;
-bool subretnum = FALSE;
-bool saw_FNR = FALSE;
-bool saw_argv0 = FALSE;
-bool saw_fh = FALSE;
-int maxtmp = 0;
-char *lparen;
-char *rparen;
-char *limit;
-STR *subs;
-STR *curargs = Nullstr;
-
-static void addsemi ( STR *str );
-static void emit_split ( STR *str, int level );
-static void fixtab ( STR *str, int lvl );
-static void numericize ( int node );
-static void tab ( STR *str, int lvl );
-
-int prewalk ( int numit, int level, int node, int *numericptr );
-STR * walk ( int useval, int level, int node, int *numericptr, int minprec );
-
-
-STR *
-walk(int useval, int level, register int node, int *numericptr, int minprec)
-
-
-
-
- /* minimum precedence without parens */
-{
- register int len;
- register STR *str;
- register int type;
- register int i;
- register STR *tmpstr;
- STR *tmp2str;
- STR *tmp3str;
- char *t;
- char *d, *s;
- int numarg;
- int numeric = FALSE;
- STR *fstr;
- int prec = P_MAX; /* assume no parens needed */
-
- if (!node) {
- *numericptr = 0;
- return str_make("");
- }
- type = ops[node].ival;
- len = type >> 8;
- type &= 255;
- switch (type) {
- case OPROG:
- arymax = 0;
- if (namelist) {
- while (isalpha(*namelist)) {
- for (d = tokenbuf,s=namelist;
- isalpha(*s) || isdigit(*s) || *s == '_';
- *d++ = *s++) ;
- *d = '\0';
- while (*s && !isalpha(*s)) s++;
- namelist = s;
- nameary[++arymax] = savestr(tokenbuf);
- }
- }
- if (maxfld < arymax)
- maxfld = arymax;
- opens = str_new(0);
- subs = str_new(0);
- str = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- if (do_split && need_entire && !absmaxfld)
- split_to_array = TRUE;
- if (do_split && split_to_array)
- set_array_base = TRUE;
- if (set_array_base) {
- str_cat(str,"$[ = 1;\t\t\t# set array base to 1\n");
- }
- if (fswitch && !const_FS)
- const_FS = fswitch;
- if (saw_FS > 1 || saw_RS)
- const_FS = 0;
- if (saw_ORS && need_entire)
- do_chop = TRUE;
- if (fswitch) {
- str_cat(str,"$FS = '");
- if (strchr("*+?.[]()|^$\\",fswitch))
- str_cat(str,"\\");
- sprintf(tokenbuf,"%c",fswitch);
- str_cat(str,tokenbuf);
- str_cat(str,"';\t\t# field separator from -F switch\n");
- }
- else if (saw_FS && !const_FS) {
- str_cat(str,"$FS = ' ';\t\t# set field separator\n");
- }
- if (saw_OFS) {
- str_cat(str,"$, = ' ';\t\t# set output field separator\n");
- }
- if (saw_ORS) {
- str_cat(str,"$\\ = \"\\n\";\t\t# set output record separator\n");
- }
- if (saw_argv0) {
- str_cat(str,"$ARGV0 = $0;\t\t# remember what we ran as\n");
- }
- if (str->str_cur > 20)
- str_cat(str,"\n");
- if (ops[node+2].ival) {
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,"\n\n");
- }
- fstr = walk(0,level+1,ops[node+3].ival,&numarg,P_MIN);
- if (*fstr->str_ptr) {
- if (saw_line_op)
- str_cat(str,"line: ");
- str_cat(str,"while (<>) {\n");
- tab(str,++level);
- if (saw_FS && !const_FS)
- do_chop = TRUE;
- if (do_chop) {
- str_cat(str,"chomp;\t# strip record separator\n");
- tab(str,level);
- }
- if (do_split)
- emit_split(str,level);
- str_scat(str,fstr);
- str_free(fstr);
- fixtab(str,--level);
- str_cat(str,"}\n");
- if (saw_FNR)
- str_cat(str,"continue {\n $FNRbase = $. if eof;\n}\n");
- }
- else if (old_awk)
- str_cat(str,"while (<>) { } # (no line actions)\n");
- if (ops[node+4].ival) {
- realexit = TRUE;
- str_cat(str,"\n");
- tab(str,level);
- str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,"\n");
- }
- if (exitval)
- str_cat(str,"exit $ExitValue;\n");
- if (subs->str_ptr) {
- str_cat(str,"\n");
- str_scat(str,subs);
- }
- if (saw_getline) {
- for (len = 0; len < 4; len++) {
- if (saw_getline & (1 << len)) {
- sprintf(tokenbuf,"\nsub Getline%d {\n",len);
- str_cat(str, tokenbuf);
- if (len & 2) {
- if (do_fancy_opens)
- str_cat(str," &Pick('',@_);\n");
- else
- str_cat(str," ($fh) = @_;\n");
- }
- else {
- if (saw_FNR)
- str_cat(str," $FNRbase = $. if eof;\n");
- }
- if (len & 1)
- str_cat(str," local($_);\n");
- if (len & 2)
- str_cat(str,
- " if ($getline_ok = (($_ = <$fh>) ne ''))");
- else
- str_cat(str,
- " if ($getline_ok = (($_ = <>) ne ''))");
- str_cat(str, " {\n");
- level += 2;
- tab(str,level);
- i = 0;
- if (do_chop) {
- i++;
- str_cat(str,"chomp;\t# strip record separator\n");
- tab(str,level);
- }
- if (do_split && !(len & 1)) {
- i++;
- emit_split(str,level);
- }
- if (!i)
- str_cat(str,";\n");
- fixtab(str,--level);
- str_cat(str,"}\n $_;\n}\n");
- --level;
- }
- }
- }
- if (do_fancy_opens) {
- str_cat(str,"\n\
-sub Pick {\n\
- local($mode,$name,$pipe) = @_;\n\
- $fh = $name;\n\
- open($name,$mode.$name.$pipe) unless $opened{$name}++;\n\
-}\n\
-");
- }
- break;
- case OHUNKS:
- str = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- if (len == 3) {
- str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg,P_MIN));
- str_free(fstr);
- }
- else {
- }
- break;
- case ORANGE:
- prec = P_DOTDOT;
- str = walk(1,level,ops[node+1].ival,&numarg,prec+1);
- str_cat(str," .. ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- break;
- case OPAT:
- goto def;
- case OREGEX:
- str = str_new(0);
- str_set(str,"/");
- tmpstr=walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- /* translate \nnn to [\nnn] */
- for (s = tmpstr->str_ptr, d = tokenbuf; *s; s++, d++) {
- if (*s == '\\' && isdigit(s[1]) && isdigit(s[2]) && isdigit(s[3])){
- *d++ = '[';
- *d++ = *s++;
- *d++ = *s++;
- *d++ = *s++;
- *d++ = *s;
- *d = ']';
- }
- else
- *d = *s;
- }
- *d = '\0';
- for (d=tokenbuf; *d; d++)
- *d += 128;
- str_cat(str,tokenbuf);
- str_free(tmpstr);
- str_cat(str,"/");
- break;
- case OHUNK:
- if (len == 1) {
- str = str_new(0);
- str = walk(0,level,oper1(OPRINT,0),&numarg,P_MIN);
- str_cat(str," if ");
- str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,";");
- }
- else {
- tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- if (*tmpstr->str_ptr) {
- str = str_new(0);
- str_set(str,"if (");
- str_scat(str,tmpstr);
- str_cat(str,") {\n");
- tab(str,++level);
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- fixtab(str,--level);
- str_cat(str,"}\n");
- tab(str,level);
- }
- else {
- str = walk(0,level,ops[node+2].ival,&numarg,P_MIN);
- }
- }
- break;
- case OPPAREN:
- str = str_new(0);
- str_set(str,"(");
- str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,")");
- break;
- case OPANDAND:
- prec = P_ANDAND;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str," && ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
- str_free(fstr);
- break;
- case OPOROR:
- prec = P_OROR;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str," || ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
- str_free(fstr);
- break;
- case OPNOT:
- prec = P_UNARY;
- str = str_new(0);
- str_set(str,"!");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec));
- str_free(fstr);
- break;
- case OCOND:
- prec = P_COND;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str," ? ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- str_cat(str," : ");
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
- str_free(fstr);
- break;
- case OCPAREN:
- str = str_new(0);
- str_set(str,"(");
- str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- numeric |= numarg;
- str_cat(str,")");
- break;
- case OCANDAND:
- prec = P_ANDAND;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- numeric = 1;
- str_cat(str," && ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
- str_free(fstr);
- break;
- case OCOROR:
- prec = P_OROR;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- numeric = 1;
- str_cat(str," || ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
- str_free(fstr);
- break;
- case OCNOT:
- prec = P_UNARY;
- str = str_new(0);
- str_set(str,"!");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec));
- str_free(fstr);
- numeric = 1;
- break;
- case ORELOP:
- prec = P_REL;
- str = walk(1,level,ops[node+2].ival,&numarg,prec+1);
- numeric |= numarg;
- tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- tmp2str = walk(1,level,ops[node+3].ival,&numarg,prec+1);
- numeric |= numarg;
- if (!numeric ||
- (!numarg && (*tmp2str->str_ptr == '"' || *tmp2str->str_ptr == '\''))) {
- t = tmpstr->str_ptr;
- if (strEQ(t,"=="))
- str_set(tmpstr,"eq");
- else if (strEQ(t,"!="))
- str_set(tmpstr,"ne");
- else if (strEQ(t,"<"))
- str_set(tmpstr,"lt");
- else if (strEQ(t,"<="))
- str_set(tmpstr,"le");
- else if (strEQ(t,">"))
- str_set(tmpstr,"gt");
- else if (strEQ(t,">="))
- str_set(tmpstr,"ge");
- if (!strchr(tmpstr->str_ptr,'\'') && !strchr(tmpstr->str_ptr,'"') &&
- !strchr(tmp2str->str_ptr,'\'') && !strchr(tmp2str->str_ptr,'"') )
- numeric |= 2;
- }
- if (numeric & 2) {
- if (numeric & 1) /* numeric is very good guess */
- str_cat(str," ");
- else
- str_cat(str,"\377");
- numeric = 1;
- }
- else
- str_cat(str," ");
- str_scat(str,tmpstr);
- str_free(tmpstr);
- str_cat(str," ");
- str_scat(str,tmp2str);
- str_free(tmp2str);
- numeric = 1;
- break;
- case ORPAREN:
- str = str_new(0);
- str_set(str,"(");
- str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- numeric |= numarg;
- str_cat(str,")");
- break;
- case OMATCHOP:
- prec = P_MATCH;
- str = walk(1,level,ops[node+2].ival,&numarg,prec+1);
- str_cat(str," ");
- tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- if (strEQ(tmpstr->str_ptr,"~"))
- str_cat(str,"=~");
- else {
- str_scat(str,tmpstr);
- str_free(tmpstr);
- }
- str_cat(str," ");
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
- str_free(fstr);
- numeric = 1;
- break;
- case OMPAREN:
- str = str_new(0);
- str_set(str,"(");
- str_scat(str,
- fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- numeric |= numarg;
- str_cat(str,")");
- break;
- case OCONCAT:
- prec = P_ADD;
- type = ops[ops[node+1].ival].ival & 255;
- str = walk(1,level,ops[node+1].ival,&numarg,prec+(type != OCONCAT));
- str_cat(str," . ");
- type = ops[ops[node+2].ival].ival & 255;
- str_scat(str,
- fstr=walk(1,level,ops[node+2].ival,&numarg,prec+(type != OCONCAT)));
- str_free(fstr);
- break;
- case OASSIGN:
- prec = P_ASSIGN;
- str = walk(0,level,ops[node+2].ival,&numarg,prec+1);
- str_cat(str," ");
- tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- str_scat(str,tmpstr);
- if (str_len(tmpstr) > 1)
- numeric = 1;
- str_free(tmpstr);
- str_cat(str," ");
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec));
- str_free(fstr);
- numeric |= numarg;
- if (strEQ(str->str_ptr,"$/ = ''"))
- str_set(str, "$/ = \"\\n\\n\"");
- break;
- case OADD:
- prec = P_ADD;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str," + ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- numeric = 1;
- break;
- case OSUBTRACT:
- prec = P_ADD;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str," - ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- numeric = 1;
- break;
- case OMULT:
- prec = P_MUL;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str," * ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- numeric = 1;
- break;
- case ODIV:
- prec = P_MUL;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str," / ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- numeric = 1;
- break;
- case OPOW:
- prec = P_POW;
- str = walk(1,level,ops[node+1].ival,&numarg,prec+1);
- str_cat(str," ** ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec));
- str_free(fstr);
- numeric = 1;
- break;
- case OMOD:
- prec = P_MUL;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str," % ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
- str_free(fstr);
- numeric = 1;
- break;
- case OPOSTINCR:
- prec = P_AUTO;
- str = walk(1,level,ops[node+1].ival,&numarg,prec+1);
- str_cat(str,"++");
- numeric = 1;
- break;
- case OPOSTDECR:
- prec = P_AUTO;
- str = walk(1,level,ops[node+1].ival,&numarg,prec+1);
- str_cat(str,"--");
- numeric = 1;
- break;
- case OPREINCR:
- prec = P_AUTO;
- str = str_new(0);
- str_set(str,"++");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec+1));
- str_free(fstr);
- numeric = 1;
- break;
- case OPREDECR:
- prec = P_AUTO;
- str = str_new(0);
- str_set(str,"--");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec+1));
- str_free(fstr);
- numeric = 1;
- break;
- case OUMINUS:
- prec = P_UNARY;
- str = str_new(0);
- str_set(str,"-");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec));
- str_free(fstr);
- numeric = 1;
- break;
- case OUPLUS:
- numeric = 1;
- goto def;
- case OPAREN:
- str = str_new(0);
- str_set(str,"(");
- str_scat(str,
- fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,")");
- numeric |= numarg;
- break;
- case OGETLINE:
- str = str_new(0);
- if (useval)
- str_cat(str,"(");
- if (len > 0) {
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- if (!*fstr->str_ptr) {
- str_cat(str,"$_");
- len = 2; /* a legal fiction */
- }
- str_free(fstr);
- }
- else
- str_cat(str,"$_");
- if (len > 1) {
- tmpstr=walk(1,level,ops[node+3].ival,&numarg,P_MIN);
- fstr=walk(1,level,ops[node+2].ival,&numarg,P_MIN);
- if (!do_fancy_opens) {
- t = tmpstr->str_ptr;
- if (*t == '"' || *t == '\'')
- t = cpytill(tokenbuf,t+1,*t);
- else
- fatal("Internal error: OGETLINE %s", t);
- d = savestr(t);
- s = savestr(tokenbuf);
- for (t = tokenbuf; *t; t++) {
- *t &= 127;
- if (islower(*t))
- *t = toupper(*t);
- if (!isalpha(*t) && !isdigit(*t))
- *t = '_';
- }
- if (!strchr(tokenbuf,'_'))
- strcpy(t,"_FH");
- tmp3str = hfetch(symtab,tokenbuf);
- if (!tmp3str) {
- do_opens = TRUE;
- str_cat(opens,"open(");
- str_cat(opens,tokenbuf);
- str_cat(opens,", ");
- d[1] = '\0';
- str_cat(opens,d);
- str_cat(opens,tmpstr->str_ptr+1);
- opens->str_cur--;
- if (*fstr->str_ptr == '|')
- str_cat(opens,"|");
- str_cat(opens,d);
- if (*fstr->str_ptr == '|')
- str_cat(opens,") || die 'Cannot pipe from \"");
- else
- str_cat(opens,") || die 'Cannot open file \"");
- if (*d == '"')
- str_cat(opens,"'.\"");
- str_cat(opens,s);
- if (*d == '"')
- str_cat(opens,"\".'");
- str_cat(opens,"\".';\n");
- hstore(symtab,tokenbuf,str_make("x"));
- }
- safefree(s);
- safefree(d);
- str_set(tmpstr,"'");
- str_cat(tmpstr,tokenbuf);
- str_cat(tmpstr,"'");
- }
- if (*fstr->str_ptr == '|')
- str_cat(tmpstr,", '|'");
- str_free(fstr);
- }
- else
- tmpstr = str_make("");
- sprintf(tokenbuf," = &Getline%d(%s)",len,tmpstr->str_ptr);
- str_cat(str,tokenbuf);
- str_free(tmpstr);
- if (useval)
- str_cat(str,",$getline_ok)");
- saw_getline |= 1 << len;
- break;
- case OSPRINTF:
- str = str_new(0);
- str_set(str,"sprintf(");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,")");
- break;
- case OSUBSTR:
- str = str_new(0);
- str_set(str,"substr(");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_COMMA+1));
- str_free(fstr);
- str_cat(str,", ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_COMMA+1));
- str_free(fstr);
- str_cat(str,", ");
- if (len == 3) {
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,P_COMMA+1));
- str_free(fstr);
- }
- else
- str_cat(str,"999999");
- str_cat(str,")");
- break;
- case OSTRING:
- str = str_new(0);
- str_set(str,ops[node+1].cval);
- break;
- case OSPLIT:
- str = str_new(0);
- limit = ", 9999)";
- numeric = 1;
- tmpstr = walk(1,level,ops[node+2].ival,&numarg,P_MIN);
- if (useval)
- str_set(str,"(@");
- else
- str_set(str,"@");
- str_scat(str,tmpstr);
- str_cat(str," = split(");
- if (len == 3) {
- fstr = walk(1,level,ops[node+3].ival,&numarg,P_COMMA+1);
- if (str_len(fstr) == 3 && *fstr->str_ptr == '\'') {
- i = fstr->str_ptr[1] & 127;
- if (strchr("*+?.[]()|^$\\",i))
- sprintf(tokenbuf,"/\\%c/",i);
- else if (i == ' ')
- sprintf(tokenbuf,"' '");
- else
- sprintf(tokenbuf,"/%c/",i);
- str_cat(str,tokenbuf);
- }
- else
- str_scat(str,fstr);
- str_free(fstr);
- }
- else if (const_FS) {
- sprintf(tokenbuf,"/[%c\\n]/",const_FS);
- str_cat(str,tokenbuf);
- }
- else if (saw_FS)
- str_cat(str,"$FS");
- else {
- str_cat(str,"' '");
- limit = ")";
- }
- str_cat(str,", ");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_COMMA+1));
- str_free(fstr);
- str_cat(str,limit);
- if (useval) {
- str_cat(str,")");
- }
- str_free(tmpstr);
- break;
- case OINDEX:
- str = str_new(0);
- str_set(str,"index(");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_COMMA+1));
- str_free(fstr);
- str_cat(str,", ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_COMMA+1));
- str_free(fstr);
- str_cat(str,")");
- numeric = 1;
- break;
- case OMATCH:
- str = str_new(0);
- prec = P_ANDAND;
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MATCH+1));
- str_free(fstr);
- str_cat(str," =~ ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_MATCH+1));
- str_free(fstr);
- str_cat(str," && ($RLENGTH = length($&), $RSTART = length($`)+1)");
- numeric = 1;
- break;
- case OUSERDEF:
- str = str_new(0);
- subretnum = FALSE;
- fstr=walk(1,level-1,ops[node+2].ival,&numarg,P_MIN);
- curargs = str_new(0);
- str_sset(curargs,fstr);
- str_cat(curargs,",");
- tmp2str=walk(1,level,ops[node+5].ival,&numarg,P_MIN);
- str_free(curargs);
- curargs = Nullstr;
- level--;
- subretnum |= numarg;
- s = Nullch;
- t = tmp2str->str_ptr;
- while (t = instr(t,"return "))
- s = t++;
- if (s) {
- i = 0;
- for (t = s+7; *t; t++) {
- if (*t == ';' || *t == '}')
- i++;
- }
- if (i == 1) {
- strcpy(s,s+7);
- tmp2str->str_cur -= 7;
- }
- }
- str_set(str,"\n");
- tab(str,level);
- str_cat(str,"sub ");
- str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- str_cat(str," {\n");
- tab(str,++level);
- if (fstr->str_cur) {
- str_cat(str,"local(");
- str_scat(str,fstr);
- str_cat(str,") = @_;");
- }
- str_free(fstr);
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,P_MIN));
- str_free(fstr);
- fixtab(str,level);
- str_scat(str,fstr=walk(1,level,ops[node+4].ival,&numarg,P_MIN));
- str_free(fstr);
- fixtab(str,level);
- str_scat(str,tmp2str);
- str_free(tmp2str);
- fixtab(str,--level);
- str_cat(str,"}\n");
- tab(str,level);
- str_scat(subs,str);
- str_set(str,"");
- str_cat(tmpstr,"(");
- tmp2str = str_new(0);
- if (subretnum)
- str_set(tmp2str,"1");
- hstore(symtab,tmpstr->str_ptr,tmp2str);
- str_free(tmpstr);
- level++;
- break;
- case ORETURN:
- str = str_new(0);
- if (len > 0) {
- str_cat(str,"return ");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_UNI+1));
- str_free(fstr);
- if (numarg)
- subretnum = TRUE;
- }
- else
- str_cat(str,"return");
- break;
- case OUSERFUN:
- str = str_new(0);
- str_set(str,"&");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,"(");
- tmpstr = hfetch(symtab,str->str_ptr+3);
- if (tmpstr && tmpstr->str_ptr)
- numeric |= atoi(tmpstr->str_ptr);
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,")");
- break;
- case OGSUB:
- case OSUB:
- if (type == OGSUB)
- s = "g";
- else
- s = "";
- str = str_new(0);
- tmpstr = str_new(0);
- i = 0;
- if (len == 3) {
- tmpstr = walk(1,level,ops[node+3].ival,&numarg,P_MATCH+1);
- if (strNE(tmpstr->str_ptr,"$_")) {
- str_cat(tmpstr, " =~ s");
- i++;
- }
- else
- str_set(tmpstr, "s");
- }
- else
- str_set(tmpstr, "s");
- type = ops[ops[node+2].ival].ival;
- len = type >> 8;
- type &= 255;
- tmp3str = str_new(0);
- if (type == OSTR) {
- tmp2str=walk(1,level,ops[ops[node+2].ival+1].ival,&numarg,P_MIN);
- for (t = tmp2str->str_ptr, d=tokenbuf; *t; d++,t++) {
- if (*t == '&')
- *d++ = '$' + 128;
- else if (*t == '$')
- *d++ = '\\' + 128;
- *d = *t + 128;
- }
- *d = '\0';
- str_set(tmp2str,tokenbuf);
- }
- else {
- tmp2str=walk(1,level,ops[node+2].ival,&numarg,P_MIN);
- str_set(tmp3str,"($s_ = '\"'.(");
- str_scat(tmp3str,tmp2str);
- str_cat(tmp3str,").'\"') =~ s/&/\\$&/g, ");
- str_set(tmp2str,"eval $s_");
- s = (char*)(*s == 'g' ? "ge" : "e");
- i++;
- }
- type = ops[ops[node+1].ival].ival;
- len = type >> 8;
- type &= 255;
- fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN);
- if (type == OREGEX) {
- if (useval && i)
- str_cat(str,"(");
- str_scat(str,tmp3str);
- str_scat(str,tmpstr);
- str_scat(str,fstr);
- str_scat(str,tmp2str);
- str_cat(str,"/");
- str_cat(str,s);
- }
- else if ((type == OFLD && !split_to_array) || (type == OVAR && len == 1)) {
- if (useval && i)
- str_cat(str,"(");
- str_scat(str,tmp3str);
- str_scat(str,tmpstr);
- str_cat(str,"/");
- str_scat(str,fstr);
- str_cat(str,"/");
- str_scat(str,tmp2str);
- str_cat(str,"/");
- str_cat(str,s);
- }
- else {
- i++;
- if (useval)
- str_cat(str,"(");
- str_cat(str,"$s = ");
- str_scat(str,fstr);
- str_cat(str,", ");
- str_scat(str,tmp3str);
- str_scat(str,tmpstr);
- str_cat(str,"/$s/");
- str_scat(str,tmp2str);
- str_cat(str,"/");
- str_cat(str,s);
- }
- if (useval && i)
- str_cat(str,")");
- str_free(fstr);
- str_free(tmpstr);
- str_free(tmp2str);
- str_free(tmp3str);
- numeric = 1;
- break;
- case ONUM:
- str = walk(1,level,ops[node+1].ival,&numarg,P_MIN);
- numeric = 1;
- break;
- case OSTR:
- tmpstr = walk(1,level,ops[node+1].ival,&numarg,P_MIN);
- s = "'";
- for (t = tmpstr->str_ptr, d=tokenbuf; *t; d++,t++) {
- if (*t == '\'')
- s = "\"";
- else if (*t == '\\') {
- s = "\"";
- *d++ = *t++ + 128;
- switch (*t) {
- case '\\': case '"': case 'n': case 't': case '$':
- break;
- default: /* hide this from perl */
- *d++ = '\\' + 128;
- }
- }
- *d = *t + 128;
- }
- *d = '\0';
- str = str_new(0);
- str_set(str,s);
- str_cat(str,tokenbuf);
- str_free(tmpstr);
- str_cat(str,s);
- break;
- case ODEFINED:
- prec = P_UNI;
- str = str_new(0);
- str_set(str,"defined $");
- goto addvar;
- case ODELETE:
- str = str_new(0);
- str_set(str,"delete $");
- goto addvar;
- case OSTAR:
- str = str_new(0);
- str_set(str,"*");
- goto addvar;
- case OVAR:
- str = str_new(0);
- str_set(str,"$");
- addvar:
- str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- if (len == 1) {
- tmp2str = hfetch(symtab,tmpstr->str_ptr);
- if (tmp2str && atoi(tmp2str->str_ptr))
- numeric = 2;
- if (strEQ(str->str_ptr,"$FNR")) {
- numeric = 1;
- saw_FNR++;
- str_set(str,"($.-$FNRbase)");
- }
- else if (strEQ(str->str_ptr,"$NR")) {
- numeric = 1;
- str_set(str,"$.");
- }
- else if (strEQ(str->str_ptr,"$NF")) {
- numeric = 1;
- str_set(str,"$#Fld");
- }
- else if (strEQ(str->str_ptr,"$0"))
- str_set(str,"$_");
- else if (strEQ(str->str_ptr,"$ARGC"))
- str_set(str,"($#ARGV+1)");
- }
- else {
-#ifdef NOTDEF
- if (curargs) {
- sprintf(tokenbuf,"$%s,",tmpstr->str_ptr);
- ??? if (instr(curargs->str_ptr,tokenbuf))
- str_cat(str,"\377"); /* can't translate yet */
- }
-#endif
- str_cat(tmpstr,"[]");
- tmp2str = hfetch(symtab,tmpstr->str_ptr);
- if (tmp2str && atoi(tmp2str->str_ptr))
- str_cat(str,"[");
- else
- str_cat(str,"{");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- if (strEQ(str->str_ptr,"$ARGV[0")) {
- str_set(str,"$ARGV0");
- saw_argv0++;
- }
- else {
- if (tmp2str && atoi(tmp2str->str_ptr))
- strcpy(tokenbuf,"]");
- else
- strcpy(tokenbuf,"}");
- *tokenbuf += 128;
- str_cat(str,tokenbuf);
- }
- }
- str_free(tmpstr);
- break;
- case OFLD:
- str = str_new(0);
- if (split_to_array) {
- str_set(str,"$Fld");
- str_cat(str,"[");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,"]");
- }
- else {
- i = atoi(walk(1,level,ops[node+1].ival,&numarg,P_MIN)->str_ptr);
- if (i <= arymax)
- sprintf(tokenbuf,"$%s",nameary[i]);
- else
- sprintf(tokenbuf,"$Fld%d",i);
- str_set(str,tokenbuf);
- }
- break;
- case OVFLD:
- str = str_new(0);
- str_set(str,"$Fld[");
- i = ops[node+1].ival;
- if ((ops[i].ival & 255) == OPAREN)
- i = ops[i+1].ival;
- tmpstr=walk(1,level,i,&numarg,P_MIN);
- str_scat(str,tmpstr);
- str_free(tmpstr);
- str_cat(str,"]");
- break;
- case OJUNK:
- goto def;
- case OSNEWLINE:
- str = str_new(2);
- str_set(str,";\n");
- tab(str,level);
- break;
- case ONEWLINE:
- str = str_new(1);
- str_set(str,"\n");
- tab(str,level);
- break;
- case OSCOMMENT:
- str = str_new(0);
- str_set(str,";");
- tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
- *s += 128;
- str_scat(str,tmpstr);
- str_free(tmpstr);
- tab(str,level);
- break;
- case OCOMMENT:
- str = str_new(0);
- tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
- *s += 128;
- str_scat(str,tmpstr);
- str_free(tmpstr);
- tab(str,level);
- break;
- case OCOMMA:
- prec = P_COMMA;
- str = walk(1,level,ops[node+1].ival,&numarg,prec);
- str_cat(str,", ");
- str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
- str_free(fstr);
- break;
- case OSEMICOLON:
- str = str_new(1);
- str_set(str,";\n");
- tab(str,level);
- break;
- case OSTATES:
- str = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- break;
- case OSTATE:
- str = str_new(0);
- if (len >= 1) {
- str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- if (len >= 2) {
- tmpstr = walk(0,level,ops[node+2].ival,&numarg,P_MIN);
- if (*tmpstr->str_ptr == ';') {
- addsemi(str);
- str_cat(str,tmpstr->str_ptr+1);
- }
- str_free(tmpstr);
- }
- }
- break;
- case OCLOSE:
- str = str_make("close(");
- tmpstr = walk(1,level,ops[node+1].ival,&numarg,P_MIN);
- if (!do_fancy_opens) {
- t = tmpstr->str_ptr;
- if (*t == '"' || *t == '\'')
- t = cpytill(tokenbuf,t+1,*t);
- else
- fatal("Internal error: OCLOSE %s",t);
- s = savestr(tokenbuf);
- for (t = tokenbuf; *t; t++) {
- *t &= 127;
- if (islower(*t))
- *t = toupper(*t);
- if (!isalpha(*t) && !isdigit(*t))
- *t = '_';
- }
- if (!strchr(tokenbuf,'_'))
- strcpy(t,"_FH");
- str_free(tmpstr);
- safefree(s);
- str_set(str,"close ");
- str_cat(str,tokenbuf);
- }
- else {
- sprintf(tokenbuf,"delete $opened{%s} && close(%s)",
- tmpstr->str_ptr, tmpstr->str_ptr);
- str_free(tmpstr);
- str_set(str,tokenbuf);
- }
- break;
- case OPRINTF:
- case OPRINT:
- lparen = ""; /* set to parens if necessary */
- rparen = "";
- str = str_new(0);
- if (len == 3) { /* output redirection */
- tmpstr = walk(1,level,ops[node+3].ival,&numarg,P_MIN);
- tmp2str = walk(1,level,ops[node+2].ival,&numarg,P_MIN);
- if (!do_fancy_opens) {
- t = tmpstr->str_ptr;
- if (*t == '"' || *t == '\'')
- t = cpytill(tokenbuf,t+1,*t);
- else
- fatal("Internal error: OPRINT");
- d = savestr(t);
- s = savestr(tokenbuf);
- for (t = tokenbuf; *t; t++) {
- *t &= 127;
- if (islower(*t))
- *t = toupper(*t);
- if (!isalpha(*t) && !isdigit(*t))
- *t = '_';
- }
- if (!strchr(tokenbuf,'_'))
- strcpy(t,"_FH");
- tmp3str = hfetch(symtab,tokenbuf);
- if (!tmp3str) {
- str_cat(opens,"open(");
- str_cat(opens,tokenbuf);
- str_cat(opens,", ");
- d[1] = '\0';
- str_cat(opens,d);
- str_scat(opens,tmp2str);
- str_cat(opens,tmpstr->str_ptr+1);
- if (*tmp2str->str_ptr == '|')
- str_cat(opens,") || die 'Cannot pipe to \"");
- else
- str_cat(opens,") || die 'Cannot create file \"");
- if (*d == '"')
- str_cat(opens,"'.\"");
- str_cat(opens,s);
- if (*d == '"')
- str_cat(opens,"\".'");
- str_cat(opens,"\".';\n");
- hstore(symtab,tokenbuf,str_make("x"));
- }
- str_free(tmpstr);
- str_free(tmp2str);
- safefree(s);
- safefree(d);
- }
- else {
- sprintf(tokenbuf,"&Pick('%s', %s) &&\n",
- tmp2str->str_ptr, tmpstr->str_ptr);
- str_cat(str,tokenbuf);
- tab(str,level+1);
- strcpy(tokenbuf,"$fh");
- str_free(tmpstr);
- str_free(tmp2str);
- lparen = "(";
- rparen = ")";
- }
- }
- else
- strcpy(tokenbuf,"");
- str_cat(str,lparen); /* may be null */
- if (type == OPRINTF)
- str_cat(str,"printf");
- else
- str_cat(str,"print");
- saw_fh = 0;
- if (len == 3 || do_fancy_opens) {
- if (*tokenbuf) {
- str_cat(str," ");
- saw_fh = 1;
- }
- str_cat(str,tokenbuf);
- }
- tmpstr = walk(1+(type==OPRINT),level,ops[node+1].ival,&numarg,P_MIN);
- if (!*tmpstr->str_ptr && lval_field) {
- t = (char*)(saw_OFS ? "$," : "' '");
- if (split_to_array) {
- sprintf(tokenbuf,"join(%s,@Fld)",t);
- str_cat(tmpstr,tokenbuf);
- }
- else {
- for (i = 1; i < maxfld; i++) {
- if (i <= arymax)
- sprintf(tokenbuf,"$%s, ",nameary[i]);
- else
- sprintf(tokenbuf,"$Fld%d, ",i);
- str_cat(tmpstr,tokenbuf);
- }
- if (maxfld <= arymax)
- sprintf(tokenbuf,"$%s",nameary[maxfld]);
- else
- sprintf(tokenbuf,"$Fld%d",maxfld);
- str_cat(tmpstr,tokenbuf);
- }
- }
- if (*tmpstr->str_ptr) {
- str_cat(str," ");
- if (!saw_fh && *tmpstr->str_ptr == '(') {
- str_cat(str,"(");
- str_scat(str,tmpstr);
- str_cat(str,")");
- }
- else
- str_scat(str,tmpstr);
- }
- else {
- str_cat(str," $_");
- }
- str_cat(str,rparen); /* may be null */
- str_free(tmpstr);
- break;
- case ORAND:
- str = str_make("rand(1)");
- break;
- case OSRAND:
- str = str_make("srand(");
- goto maybe0;
- case OATAN2:
- str = str_make("atan2(");
- goto maybe0;
- case OSIN:
- str = str_make("sin(");
- goto maybe0;
- case OCOS:
- str = str_make("cos(");
- goto maybe0;
- case OSYSTEM:
- str = str_make("system(");
- goto maybe0;
- case OLENGTH:
- str = str_make("length(");
- goto maybe0;
- case OLOG:
- str = str_make("log(");
- goto maybe0;
- case OEXP:
- str = str_make("exp(");
- goto maybe0;
- case OSQRT:
- str = str_make("sqrt(");
- goto maybe0;
- case OINT:
- str = str_make("int(");
- maybe0:
- numeric = 1;
- if (len > 0)
- tmpstr = walk(1,level,ops[node+1].ival,&numarg,P_MIN);
- else
- tmpstr = str_new(0);
- if (!tmpstr->str_ptr || !*tmpstr->str_ptr) {
- if (lval_field) {
- t = (char*)(saw_OFS ? "$," : "' '");
- if (split_to_array) {
- sprintf(tokenbuf,"join(%s,@Fld)",t);
- str_cat(tmpstr,tokenbuf);
- }
- else {
- sprintf(tokenbuf,"join(%s, ",t);
- str_cat(tmpstr,tokenbuf);
- for (i = 1; i < maxfld; i++) {
- if (i <= arymax)
- sprintf(tokenbuf,"$%s,",nameary[i]);
- else
- sprintf(tokenbuf,"$Fld%d,",i);
- str_cat(tmpstr,tokenbuf);
- }
- if (maxfld <= arymax)
- sprintf(tokenbuf,"$%s)",nameary[maxfld]);
- else
- sprintf(tokenbuf,"$Fld%d)",maxfld);
- str_cat(tmpstr,tokenbuf);
- }
- }
- else
- str_cat(tmpstr,"$_");
- }
- if (strEQ(tmpstr->str_ptr,"$_")) {
- if (type == OLENGTH && !do_chop) {
- str = str_make("(length(");
- str_cat(tmpstr,") - 1");
- }
- }
- str_scat(str,tmpstr);
- str_free(tmpstr);
- str_cat(str,")");
- break;
- case OBREAK:
- str = str_new(0);
- str_set(str,"last");
- break;
- case ONEXT:
- str = str_new(0);
- str_set(str,"next line");
- break;
- case OEXIT:
- str = str_new(0);
- if (realexit) {
- prec = P_UNI;
- str_set(str,"exit");
- if (len == 1) {
- str_cat(str," ");
- exitval = TRUE;
- str_scat(str,
- fstr=walk(1,level,ops[node+1].ival,&numarg,prec+1));
- str_free(fstr);
- }
- }
- else {
- if (len == 1) {
- str_set(str,"$ExitValue = ");
- exitval = TRUE;
- str_scat(str,
- fstr=walk(1,level,ops[node+1].ival,&numarg,P_ASSIGN));
- str_free(fstr);
- str_cat(str,"; ");
- }
- str_cat(str,"last line");
- }
- break;
- case OCONTINUE:
- str = str_new(0);
- str_set(str,"next");
- break;
- case OREDIR:
- goto def;
- case OIF:
- str = str_new(0);
- str_set(str,"if (");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,") ");
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- if (len == 3) {
- i = ops[node+3].ival;
- if (i) {
- if ((ops[i].ival & 255) == OBLOCK) {
- i = ops[i+1].ival;
- if (i) {
- if ((ops[i].ival & 255) != OIF)
- i = 0;
- }
- }
- else
- i = 0;
- }
- if (i) {
- str_cat(str,"els");
- str_scat(str,fstr=walk(0,level,i,&numarg,P_MIN));
- str_free(fstr);
- }
- else {
- str_cat(str,"else ");
- str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg,P_MIN));
- str_free(fstr);
- }
- }
- break;
- case OWHILE:
- str = str_new(0);
- str_set(str,"while (");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,") ");
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- break;
- case ODO:
- str = str_new(0);
- str_set(str,"do ");
- str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- if (str->str_ptr[str->str_cur - 1] == '\n')
- --str->str_cur;
- str_cat(str," while (");
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,");");
- break;
- case OFOR:
- str = str_new(0);
- str_set(str,"for (");
- str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- i = numarg;
- if (i) {
- t = s = tmpstr->str_ptr;
- while (isalpha(*t) || isdigit(*t) || *t == '$' || *t == '_')
- t++;
- i = t - s;
- if (i < 2)
- i = 0;
- }
- str_cat(str,"; ");
- fstr=walk(1,level,ops[node+2].ival,&numarg,P_MIN);
- if (i && (t = strchr(fstr->str_ptr,0377))) {
- if (strnEQ(fstr->str_ptr,s,i))
- *t = ' ';
- }
- str_scat(str,fstr);
- str_free(fstr);
- str_free(tmpstr);
- str_cat(str,"; ");
- str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,P_MIN));
- str_free(fstr);
- str_cat(str,") ");
- str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg,P_MIN));
- str_free(fstr);
- break;
- case OFORIN:
- tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- d = strchr(tmpstr->str_ptr,'$');
- if (!d)
- fatal("Illegal for loop: %s",tmpstr->str_ptr);
- s = strchr(d,'{');
- if (!s)
- s = strchr(d,'[');
- if (!s)
- fatal("Illegal for loop: %s",d);
- *s++ = '\0';
- for (t = s; i = *t; t++) {
- i &= 127;
- if (i == '}' || i == ']')
- break;
- }
- if (*t)
- *t = '\0';
- str = str_new(0);
- str_set(str,d+1);
- str_cat(str,"[]");
- tmp2str = hfetch(symtab,str->str_ptr);
- if (tmp2str && atoi(tmp2str->str_ptr)) {
- sprintf(tokenbuf,
- "foreach %s ($[ .. $#%s) ",
- s,
- d+1);
- }
- else {
- sprintf(tokenbuf,
- "foreach %s (keys %%%s) ",
- s,
- d+1);
- }
- str_set(str,tokenbuf);
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- str_free(tmpstr);
- break;
- case OBLOCK:
- str = str_new(0);
- str_set(str,"{");
- if (len >= 2 && ops[node+2].ival) {
- str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN));
- str_free(fstr);
- }
- fixtab(str,++level);
- str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg,P_MIN));
- str_free(fstr);
- addsemi(str);
- fixtab(str,--level);
- str_cat(str,"}\n");
- tab(str,level);
- if (len >= 3) {
- str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg,P_MIN));
- str_free(fstr);
- }
- break;
- default:
- def:
- if (len) {
- if (len > 5)
- fatal("Garbage length in walk");
- str = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- for (i = 2; i<= len; i++) {
- str_scat(str,fstr=walk(0,level,ops[node+i].ival,&numarg,P_MIN));
- str_free(fstr);
- }
- }
- else {
- str = Nullstr;
- }
- break;
- }
- if (!str)
- str = str_new(0);
-
- if (useval && prec < minprec) { /* need parens? */
- fstr = str_new(str->str_cur+2);
- str_nset(fstr,"(",1);
- str_scat(fstr,str);
- str_ncat(fstr,")",1);
- str_free(str);
- str = fstr;
- }
-
- *numericptr = numeric;
-#ifdef DEBUGGING
- if (debug & 4) {
- printf("%3d %5d %15s %d %4d ",level,node,opname[type],len,str->str_cur);
- for (t = str->str_ptr; *t && t - str->str_ptr < 40; t++)
- if (*t == '\n')
- printf("\\n");
- else if (*t == '\t')
- printf("\\t");
- else
- putchar(*t);
- putchar('\n');
- }
-#endif
- return str;
-}
-
-static void
-tab(register STR *str, register int lvl)
-{
- while (lvl > 1) {
- str_cat(str,"\t");
- lvl -= 2;
- }
- if (lvl)
- str_cat(str," ");
-}
-
-static void
-fixtab(register STR *str, register int lvl)
-{
- register char *s;
-
- /* strip trailing white space */
-
- s = str->str_ptr+str->str_cur - 1;
- while (s >= str->str_ptr && (*s == ' ' || *s == '\t' || *s == '\n'))
- s--;
- s[1] = '\0';
- str->str_cur = s + 1 - str->str_ptr;
- if (s >= str->str_ptr && *s != '\n')
- str_cat(str,"\n");
-
- tab(str,lvl);
-}
-
-static void
-addsemi(register STR *str)
-{
- register char *s;
-
- s = str->str_ptr+str->str_cur - 1;
- while (s >= str->str_ptr && (*s == ' ' || *s == '\t' || *s == '\n'))
- s--;
- if (s >= str->str_ptr && *s != ';' && *s != '}')
- str_cat(str,";");
-}
-
-static void
-emit_split(register STR *str, int level)
-{
- register int i;
-
- if (split_to_array)
- str_cat(str,"@Fld");
- else {
- str_cat(str,"(");
- for (i = 1; i < maxfld; i++) {
- if (i <= arymax)
- sprintf(tokenbuf,"$%s,",nameary[i]);
- else
- sprintf(tokenbuf,"$Fld%d,",i);
- str_cat(str,tokenbuf);
- }
- if (maxfld <= arymax)
- sprintf(tokenbuf,"$%s)",nameary[maxfld]);
- else
- sprintf(tokenbuf,"$Fld%d)",maxfld);
- str_cat(str,tokenbuf);
- }
- if (const_FS) {
- sprintf(tokenbuf," = split(/[%c\\n]/, $_, 9999);\n",const_FS);
- str_cat(str,tokenbuf);
- }
- else if (saw_FS)
- str_cat(str," = split($FS, $_, 9999);\n");
- else
- str_cat(str," = split(' ', $_, 9999);\n");
- tab(str,level);
-}
-
-int
-prewalk(int numit, int level, register int node, int *numericptr)
-{
- register int len;
- register int type;
- register int i;
- int numarg;
- int numeric = FALSE;
- STR *tmpstr;
- STR *tmp2str;
-
- if (!node) {
- *numericptr = 0;
- return 0;
- }
- type = ops[node].ival;
- len = type >> 8;
- type &= 255;
- switch (type) {
- case OPROG:
- prewalk(0,level,ops[node+1].ival,&numarg);
- if (ops[node+2].ival) {
- prewalk(0,level,ops[node+2].ival,&numarg);
- }
- ++level;
- prewalk(0,level,ops[node+3].ival,&numarg);
- --level;
- if (ops[node+3].ival) {
- prewalk(0,level,ops[node+4].ival,&numarg);
- }
- break;
- case OHUNKS:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- if (len == 3) {
- prewalk(0,level,ops[node+3].ival,&numarg);
- }
- break;
- case ORANGE:
- prewalk(1,level,ops[node+1].ival,&numarg);
- prewalk(1,level,ops[node+2].ival,&numarg);
- break;
- case OPAT:
- goto def;
- case OREGEX:
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case OHUNK:
- if (len == 1) {
- prewalk(0,level,ops[node+1].ival,&numarg);
- }
- else {
- i = prewalk(0,level,ops[node+1].ival,&numarg);
- if (i) {
- ++level;
- prewalk(0,level,ops[node+2].ival,&numarg);
- --level;
- }
- else {
- prewalk(0,level,ops[node+2].ival,&numarg);
- }
- }
- break;
- case OPPAREN:
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case OPANDAND:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- break;
- case OPOROR:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- break;
- case OPNOT:
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case OCPAREN:
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric |= numarg;
- break;
- case OCANDAND:
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric = 1;
- prewalk(0,level,ops[node+2].ival,&numarg);
- break;
- case OCOROR:
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric = 1;
- prewalk(0,level,ops[node+2].ival,&numarg);
- break;
- case OCNOT:
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case ORELOP:
- prewalk(0,level,ops[node+2].ival,&numarg);
- numeric |= numarg;
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+3].ival,&numarg);
- numeric |= numarg;
- numeric = 1;
- break;
- case ORPAREN:
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric |= numarg;
- break;
- case OMATCHOP:
- prewalk(0,level,ops[node+2].ival,&numarg);
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+3].ival,&numarg);
- numeric = 1;
- break;
- case OMPAREN:
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric |= numarg;
- break;
- case OCONCAT:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- break;
- case OASSIGN:
- prewalk(0,level,ops[node+2].ival,&numarg);
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+3].ival,&numarg);
- if (numarg || strlen(ops[ops[node+1].ival+1].cval) > (Size_t)1) {
- numericize(ops[node+2].ival);
- if (!numarg)
- numericize(ops[node+3].ival);
- }
- numeric |= numarg;
- break;
- case OADD:
- prewalk(1,level,ops[node+1].ival,&numarg);
- prewalk(1,level,ops[node+2].ival,&numarg);
- numeric = 1;
- break;
- case OSUBTRACT:
- prewalk(1,level,ops[node+1].ival,&numarg);
- prewalk(1,level,ops[node+2].ival,&numarg);
- numeric = 1;
- break;
- case OMULT:
- prewalk(1,level,ops[node+1].ival,&numarg);
- prewalk(1,level,ops[node+2].ival,&numarg);
- numeric = 1;
- break;
- case ODIV:
- prewalk(1,level,ops[node+1].ival,&numarg);
- prewalk(1,level,ops[node+2].ival,&numarg);
- numeric = 1;
- break;
- case OPOW:
- prewalk(1,level,ops[node+1].ival,&numarg);
- prewalk(1,level,ops[node+2].ival,&numarg);
- numeric = 1;
- break;
- case OMOD:
- prewalk(1,level,ops[node+1].ival,&numarg);
- prewalk(1,level,ops[node+2].ival,&numarg);
- numeric = 1;
- break;
- case OPOSTINCR:
- prewalk(1,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case OPOSTDECR:
- prewalk(1,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case OPREINCR:
- prewalk(1,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case OPREDECR:
- prewalk(1,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case OUMINUS:
- prewalk(1,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case OUPLUS:
- prewalk(1,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case OPAREN:
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric |= numarg;
- break;
- case OGETLINE:
- break;
- case OSPRINTF:
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case OSUBSTR:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(1,level,ops[node+2].ival,&numarg);
- if (len == 3) {
- prewalk(1,level,ops[node+3].ival,&numarg);
- }
- break;
- case OSTRING:
- break;
- case OSPLIT:
- numeric = 1;
- prewalk(0,level,ops[node+2].ival,&numarg);
- if (len == 3)
- prewalk(0,level,ops[node+3].ival,&numarg);
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case OINDEX:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- numeric = 1;
- break;
- case OMATCH:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- numeric = 1;
- break;
- case OUSERDEF:
- subretnum = FALSE;
- --level;
- tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
- ++level;
- prewalk(0,level,ops[node+2].ival,&numarg);
- prewalk(0,level,ops[node+4].ival,&numarg);
- prewalk(0,level,ops[node+5].ival,&numarg);
- --level;
- str_cat(tmpstr,"(");
- tmp2str = str_new(0);
- if (subretnum || numarg)
- str_set(tmp2str,"1");
- hstore(symtab,tmpstr->str_ptr,tmp2str);
- str_free(tmpstr);
- level++;
- break;
- case ORETURN:
- if (len > 0) {
- prewalk(0,level,ops[node+1].ival,&numarg);
- if (numarg)
- subretnum = TRUE;
- }
- break;
- case OUSERFUN:
- tmp2str = str_new(0);
- str_scat(tmp2str,tmpstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN));
- fixrargs(tmpstr->str_ptr,ops[node+2].ival,0);
- str_free(tmpstr);
- str_cat(tmp2str,"(");
- tmpstr = hfetch(symtab,tmp2str->str_ptr);
- if (tmpstr && tmpstr->str_ptr)
- numeric |= atoi(tmpstr->str_ptr);
- prewalk(0,level,ops[node+2].ival,&numarg);
- str_free(tmp2str);
- break;
- case OGSUB:
- case OSUB:
- if (len >= 3)
- prewalk(0,level,ops[node+3].ival,&numarg);
- prewalk(0,level,ops[ops[node+2].ival+1].ival,&numarg);
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case ONUM:
- prewalk(0,level,ops[node+1].ival,&numarg);
- numeric = 1;
- break;
- case OSTR:
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case ODEFINED:
- case ODELETE:
- case OSTAR:
- case OVAR:
- prewalk(0,level,ops[node+1].ival,&numarg);
- if (len == 1) {
- if (numit)
- numericize(node);
- }
- else {
- prewalk(0,level,ops[node+2].ival,&numarg);
- }
- break;
- case OFLD:
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case OVFLD:
- i = ops[node+1].ival;
- prewalk(0,level,i,&numarg);
- break;
- case OJUNK:
- goto def;
- case OSNEWLINE:
- break;
- case ONEWLINE:
- break;
- case OSCOMMENT:
- break;
- case OCOMMENT:
- break;
- case OCOMMA:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- prewalk(0,level,ops[node+3].ival,&numarg);
- break;
- case OSEMICOLON:
- break;
- case OSTATES:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- break;
- case OSTATE:
- if (len >= 1) {
- prewalk(0,level,ops[node+1].ival,&numarg);
- if (len >= 2) {
- prewalk(0,level,ops[node+2].ival,&numarg);
- }
- }
- break;
- case OCLOSE:
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case OPRINTF:
- case OPRINT:
- if (len == 3) { /* output redirection */
- prewalk(0,level,ops[node+3].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- }
- prewalk(0+(type==OPRINT),level,ops[node+1].ival,&numarg);
- break;
- case ORAND:
- break;
- case OSRAND:
- goto maybe0;
- case OATAN2:
- goto maybe0;
- case OSIN:
- goto maybe0;
- case OCOS:
- goto maybe0;
- case OSYSTEM:
- goto maybe0;
- case OLENGTH:
- goto maybe0;
- case OLOG:
- goto maybe0;
- case OEXP:
- goto maybe0;
- case OSQRT:
- goto maybe0;
- case OINT:
- maybe0:
- numeric = 1;
- if (len > 0)
- prewalk(type != OLENGTH && type != OSYSTEM,
- level,ops[node+1].ival,&numarg);
- break;
- case OBREAK:
- break;
- case ONEXT:
- break;
- case OEXIT:
- if (len == 1) {
- prewalk(1,level,ops[node+1].ival,&numarg);
- }
- break;
- case OCONTINUE:
- break;
- case OREDIR:
- goto def;
- case OIF:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- if (len == 3) {
- prewalk(0,level,ops[node+3].ival,&numarg);
- }
- break;
- case OWHILE:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- break;
- case OFOR:
- prewalk(0,level,ops[node+1].ival,&numarg);
- prewalk(0,level,ops[node+2].ival,&numarg);
- prewalk(0,level,ops[node+3].ival,&numarg);
- prewalk(0,level,ops[node+4].ival,&numarg);
- break;
- case OFORIN:
- prewalk(0,level,ops[node+2].ival,&numarg);
- prewalk(0,level,ops[node+1].ival,&numarg);
- break;
- case OBLOCK:
- if (len == 2) {
- prewalk(0,level,ops[node+2].ival,&numarg);
- }
- ++level;
- prewalk(0,level,ops[node+1].ival,&numarg);
- --level;
- break;
- default:
- def:
- if (len) {
- if (len > 5)
- fatal("Garbage length in prewalk");
- prewalk(0,level,ops[node+1].ival,&numarg);
- for (i = 2; i<= len; i++) {
- prewalk(0,level,ops[node+i].ival,&numarg);
- }
- }
- break;
- }
- *numericptr = numeric;
- return 1;
-}
-
-static void
-numericize(register int node)
-{
- register int len;
- register int type;
- STR *tmpstr;
- STR *tmp2str;
- int numarg;
-
- type = ops[node].ival;
- len = type >> 8;
- type &= 255;
- if (type == OVAR && len == 1) {
- tmpstr=walk(0,0,ops[node+1].ival,&numarg,P_MIN);
- tmp2str = str_make("1");
- hstore(symtab,tmpstr->str_ptr,tmp2str);
- }
-}
diff --git a/contrib/perl5/xsutils.c b/contrib/perl5/xsutils.c
deleted file mode 100644
index b4161b0..0000000
--- a/contrib/perl5/xsutils.c
+++ /dev/null
@@ -1,292 +0,0 @@
-#include "EXTERN.h"
-#define PERL_IN_XSUTILS_C
-#include "perl.h"
-
-/*
- * Contributed by Spider Boardman (spider.boardman@orb.nashua.nh.us).
- */
-
-/* package attributes; */
-void XS_attributes__warn_reserved(pTHXo_ CV *cv);
-void XS_attributes_reftype(pTHXo_ CV *cv);
-void XS_attributes__modify_attrs(pTHXo_ CV *cv);
-void XS_attributes__guess_stash(pTHXo_ CV *cv);
-void XS_attributes__fetch_attrs(pTHXo_ CV *cv);
-void XS_attributes_bootstrap(pTHXo_ CV *cv);
-
-
-/*
- * Note that only ${pkg}::bootstrap definitions should go here.
- * This helps keep down the start-up time, which is especially
- * relevant for users who don't invoke any features which are
- * (partially) implemented here.
- *
- * The various bootstrap definitions can take care of doing
- * package-specific newXS() calls. Since the layout of the
- * bundled *.pm files is in a version-specific directory,
- * version checks in these bootstrap calls are optional.
- */
-
-void
-Perl_boot_core_xsutils(pTHX)
-{
- char *file = __FILE__;
-
- newXS("attributes::bootstrap", XS_attributes_bootstrap, file);
-}
-
-#include "XSUB.h"
-
-static int
-modify_SV_attributes(pTHXo_ SV *sv, SV **retlist, SV **attrlist, int numattrs)
-{
- SV *attr;
- char *name;
- STRLEN len;
- bool negated;
- int nret;
-
- for (nret = 0 ; numattrs && (attr = *attrlist++); numattrs--) {
- name = SvPV(attr, len);
- if ((negated = (*name == '-'))) {
- name++;
- len--;
- }
- switch (SvTYPE(sv)) {
- case SVt_PVCV:
- switch ((int)len) {
- case 6:
- switch (*name) {
- case 'l':
-#ifdef CVf_LVALUE
- if (strEQ(name, "lvalue")) {
- if (negated)
- CvFLAGS((CV*)sv) &= ~CVf_LVALUE;
- else
- CvFLAGS((CV*)sv) |= CVf_LVALUE;
- continue;
- }
-#endif /* defined CVf_LVALUE */
- if (strEQ(name, "locked")) {
- if (negated)
- CvFLAGS((CV*)sv) &= ~CVf_LOCKED;
- else
- CvFLAGS((CV*)sv) |= CVf_LOCKED;
- continue;
- }
- break;
- case 'm':
- if (strEQ(name, "method")) {
- if (negated)
- CvFLAGS((CV*)sv) &= ~CVf_METHOD;
- else
- CvFLAGS((CV*)sv) |= CVf_METHOD;
- continue;
- }
- break;
- }
- break;
- }
- break;
- default:
- /* nothing, yet */
- break;
- }
- /* anything recognized had a 'continue' above */
- *retlist++ = attr;
- nret++;
- }
-
- return nret;
-}
-
-
-
-/* package attributes; */
-
-XS(XS_attributes_bootstrap)
-{
- dXSARGS;
- char *file = __FILE__;
-
- newXSproto("attributes::_warn_reserved", XS_attributes__warn_reserved, file, "");
- newXS("attributes::_modify_attrs", XS_attributes__modify_attrs, file);
- newXSproto("attributes::_guess_stash", XS_attributes__guess_stash, file, "$");
- newXSproto("attributes::_fetch_attrs", XS_attributes__fetch_attrs, file, "$");
- newXSproto("attributes::reftype", XS_attributes_reftype, file, "$");
-
- XSRETURN(0);
-}
-
-XS(XS_attributes__modify_attrs)
-{
- dXSARGS;
- SV *rv, *sv;
-
- if (items < 1) {
-usage:
- Perl_croak(aTHX_
- "Usage: attributes::_modify_attrs $reference, @attributes");
- }
-
- rv = ST(0);
- if (!(SvOK(rv) && SvROK(rv)))
- goto usage;
- sv = SvRV(rv);
- if (items > 1)
- XSRETURN(modify_SV_attributes(aTHXo_ sv, &ST(0), &ST(1), items-1));
-
- XSRETURN(0);
-}
-
-XS(XS_attributes__fetch_attrs)
-{
- dXSARGS;
- SV *rv, *sv;
- cv_flags_t cvflags;
-
- if (items != 1) {
-usage:
- Perl_croak(aTHX_
- "Usage: attributes::_fetch_attrs $reference");
- }
-
- rv = ST(0);
- SP -= items;
- if (!(SvOK(rv) && SvROK(rv)))
- goto usage;
- sv = SvRV(rv);
-
- switch (SvTYPE(sv)) {
- case SVt_PVCV:
- cvflags = CvFLAGS((CV*)sv);
- if (cvflags & CVf_LOCKED)
- XPUSHs(sv_2mortal(newSVpvn("locked", 6)));
-#ifdef CVf_LVALUE
- if (cvflags & CVf_LVALUE)
- XPUSHs(sv_2mortal(newSVpvn("lvalue", 6)));
-#endif
- if (cvflags & CVf_METHOD)
- XPUSHs(sv_2mortal(newSVpvn("method", 6)));
- break;
- default:
- break;
- }
-
- PUTBACK;
-}
-
-XS(XS_attributes__guess_stash)
-{
- dXSARGS;
- SV *rv, *sv;
-#ifdef dXSTARGET
- dXSTARGET;
-#else
- SV * TARG = sv_newmortal();
-#endif
-
- if (items != 1) {
-usage:
- Perl_croak(aTHX_
- "Usage: attributes::_guess_stash $reference");
- }
-
- rv = ST(0);
- ST(0) = TARG;
- if (!(SvOK(rv) && SvROK(rv)))
- goto usage;
- sv = SvRV(rv);
-
- if (SvOBJECT(sv))
- sv_setpv(TARG, HvNAME(SvSTASH(sv)));
-#if 0 /* this was probably a bad idea */
- else if (SvPADMY(sv))
- sv_setsv(TARG, &PL_sv_no); /* unblessed lexical */
-#endif
- else {
- HV *stash = Nullhv;
- switch (SvTYPE(sv)) {
- case SVt_PVCV:
- if (CvGV(sv) && isGV(CvGV(sv)) && GvSTASH(CvGV(sv)) &&
- HvNAME(GvSTASH(CvGV(sv))))
- stash = GvSTASH(CvGV(sv));
- else if (/* !CvANON(sv) && */ CvSTASH(sv) && HvNAME(CvSTASH(sv)))
- stash = CvSTASH(sv);
- break;
- case SVt_PVMG:
- if (!(SvFAKE(sv) && SvTIED_mg(sv, '*')))
- break;
- /*FALLTHROUGH*/
- case SVt_PVGV:
- if (GvGP(sv) && GvESTASH((GV*)sv) && HvNAME(GvESTASH((GV*)sv)))
- stash = GvESTASH((GV*)sv);
- break;
- default:
- break;
- }
- if (stash)
- sv_setpv(TARG, HvNAME(stash));
- }
-
-#ifdef dXSTARGET
- SvSETMAGIC(TARG);
-#endif
- XSRETURN(1);
-}
-
-XS(XS_attributes_reftype)
-{
- dXSARGS;
- SV *rv, *sv;
-#ifdef dXSTARGET
- dXSTARGET;
-#else
- SV * TARG = sv_newmortal();
-#endif
-
- if (items != 1) {
-usage:
- Perl_croak(aTHX_
- "Usage: attributes::reftype $reference");
- }
-
- rv = ST(0);
- ST(0) = TARG;
- if (SvGMAGICAL(rv))
- mg_get(rv);
- if (!(SvOK(rv) && SvROK(rv)))
- goto usage;
- sv = SvRV(rv);
- sv_setpv(TARG, sv_reftype(sv, 0));
-#ifdef dXSTARGET
- SvSETMAGIC(TARG);
-#endif
-
- XSRETURN(1);
-}
-
-XS(XS_attributes__warn_reserved)
-{
- dXSARGS;
-#ifdef dXSTARGET
- dXSTARGET;
-#else
- SV * TARG = sv_newmortal();
-#endif
-
- if (items != 0) {
- Perl_croak(aTHX_
- "Usage: attributes::_warn_reserved ()");
- }
-
- EXTEND(SP,1);
- ST(0) = TARG;
- sv_setiv(TARG, ckWARN(WARN_RESERVED) != 0);
-#ifdef dXSTARGET
- SvSETMAGIC(TARG);
-#endif
-
- XSRETURN(1);
-}
-
OpenPOWER on IntegriCloud